[
  {
    "path": ".gitignore",
    "content": "node_modules\npackage-lock.json\nlibs/Cesium"
  },
  {
    "path": ".vscode/keybindings.json",
    "content": "// Place your key bindings in this file to overwrite the defaults\n[\n\t{\n\t\t\"key\": \"ctrl+l\",\n\t\t\"command\": \"editor.action.deleteLines\",\n\t\t\"when\": \"editorTextFocus && !editorReadonly\"\n\t},{\n\t\t\"key\": \"ctrl+shift+i\",\n\t\t\"command\": \"editor.action.toggleRenderWhitespace\"\n\t},{\n\t\t\"key\": \"ctrl+d\",\n\t\t\"command\": \"editor.action.copyLinesDownAction\",\n\t\t\"when\": \"editorTextFocus\"\n\t},{\n\t\t\"key\": \"alt+2\",\n\t\t\"command\": \"type\",\n\t\t\"args\": {\n\t\t\t\"text\": \"`\"\n\t\t}\n\t}\n]"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n\t\"workbench.editor.enablePreview\": false,\n\t\"files.associations\": {\n\t\t\"*.vs\": \"cpp\",\n\t\t\"*.fs\": \"cpp\"\n\t},\n\t\"files.trimTrailingWhitespace\": false,\n\t\"editor.fontSize\": 28,\n\t\"editor.autoIndent\": \"advanced\",\n\t\"editor.detectIndentation\": false,\n\t\"editor.insertSpaces\": false,\n\t\"editor.minimap.enabled\": false,\n\t\"editor.autoClosingBrackets\": \"never\",\n\t\"editor.formatOnType\": false,\n\t\"editor.acceptSuggestionOnEnter\": \"off\",\n\t\"editor.acceptSuggestionOnCommitCharacter\": false,\n\t\"editor.mouseWheelZoom\": true,\n\t\"editor.renderWhitespace\": \"all\",\n\t\"editor.autoClosingQuotes\": \"never\",\n\t\"editor.autoSurround\": \"never\",\n}"
  },
  {
    "path": "LICENSE",
    "content": " \n============\n== POTREE ==\n============\n\nhttp://potree.org\n\nCopyright (c) 2011-2020, Markus Schütz\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice,\nthis list of conditions and the following disclaimer in the documentation\nand/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe views and conclusions contained in the software and documentation are those\nof the authors and should not be interpreted as representing official policies,\neither expressed or implied, of the FreeBSD Project.\n"
  },
  {
    "path": "PotreeDesktop.bat",
    "content": "start ./node_modules/electron/dist/electron.exe ./main"
  },
  {
    "path": "README.md",
    "content": "\n\n# About\n\nA desktop/portable version of the web-based point cloud viewer [Potree](https://github.com/potree/potree), thanks to [Electron](https://electronjs.org/).\n\n* This version allows you to load [converted point clouds](https://github.com/potree/PotreeConverter) from your hard disc or USB drive. It's also portable so you can put your models together with the viewer on a USB drive and open it wherever you go. \n* It's only been tested on windows at the moment. It may not work on other systems or you may only be able to use it on the same Operating System that you've initially built it on.\n* Modify index.html to change which point cloud should be loaded by default.\n* You can also drag&drop cloud.js files into the window to add point clouds to the scene.\n* This desktop version is in a prototype state and as such it may be a bit awkward to use at times. \nIn order to reset the viewer, you'll have to click \"window->reload\".\n\n# LICENSE\n\n* BSD 2-clause license. (free to use, preservation of copyright notice/attribute when redistributing)\n\n# Getting Started\n\n* Install [Node.js](https://nodejs.org/en/)\n* Execute PotreeDesktop.bat\n* Drag and Drop a las or laz file to convert and load it.\n* Drag and Drop a previously converted point cloud to load it. \n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<meta name=\"description\" content=\"\">\n\t<meta name=\"author\" content=\"\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n\t<title>Potree Viewer</title>\n\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"./libs/potree/potree.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"./libs/jquery-ui/jquery-ui.min.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"./libs/openlayers3/ol.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"./libs/spectrum/spectrum.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"./libs/jstree/themes/mixed/style.css\">\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"./src/desktop.css\">\n\n\t<style>\n\n\t</style>\n</head>\n\n<body>\n\n\t<span id=\"pointcloud_file_dropzone\" class=\"droproot\">\n\t\t<span style=\"position:absolute; left: 0px; right: 0px; top: 0px; bottom: 0px\" class=\"dropzone\">\n\t\t\t\n\t\t\t<span class=\"middle\">\n\t\t\t\t<p class=\"dropzone_title\">Convert and/or Load point clouds</p>\n\n\t\t\t\t<ul class=\"dropzone_text\">\n\t\t\t\t\t<li>Drop LAS/LAZ files to convert and load them.</li>\n\t\t\t\t\t<li>Drop folders to convert and load all files inside.</li>\n\t\t\t\t\t<li>Drop previously converted cloud.js, metadata.json or containing directy to load.</li>\n\t\t\t\t</ul>\n\t\t\t</span>\n\n\t\t</span>\n\t</span>\n\n\t<span id=\"converter_panel\" class=\"middle\">\n\n\t\t<div class=\"converter_panel_widget\">\n\t\t\tTarget Directory: <br>\n\t\t\t<span style=\"display: flex\">\n\t\t\t\t<input id=\"converter_panel_target_directory\" type=\"textfield\" style=\"flex-grow: 1\">\n\t\t\t\t<!-- <span style=\"width: 0.2em\"></span>\n\t\t\t\t<input id=\"converter_panel_pick_target_directory\" type=\"button\" value=\"...\"> -->\n\t\t\t</span>\n\t\t\t<div id=\"converter_panel_target_directory_warning\" style=\"color: red\">\n\t\t\t\t&nbsp;\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"converter_panel_widget\">\n\t\t\tInput Files:\n\t\t\t<div id=\"converter_panel_files\" class=\"converter_panel_list\">\n\t\t\t\t<div>file 1</div>\n\t\t\t\t<div>file 2</div>\n\t\t\t\t<div>file 3</div>\n\t\t\t\t<div>file 4</div>\n\t\t\t\t<div>file 5</div>\n\t\t\t\t<div>file 6</div>\n\t\t\t\t<div>file 7</div>\n\t\t\t\t<div>file 8</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<br>\n\n\t\t<div class=\"converter_panel_widget\">\n\t\t\tChoose a Converter:\n\t\t\t<div class=\"selection_buttons\">\n\n\t\t\t\t<input type=\"radio\" id=\"selection_converter_version_1_7\" \n\t\t\t\t\tname=\"selection_converter_version\" value=\"all\">\n\t\t\t\t\t<label for=\"selection_converter_version_1_7\" class=\"left\">\n\t\t\t\t\t<span class=\"title\">PotreeConverter 1.7</span>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>Older version that generates 1 file per octree node.</li>\n\t\t\t\t\t\t<li>Try of PotreeConverter 2.0 causes issues.</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</label>\n\n\t\t\t\t<input type=\"radio\" id=\"selection_converter_version_2_0\" \n\t\t\t\t\tname=\"selection_converter_version\" value=\"false\" checked>\n\t\t\t\t\t<label for=\"selection_converter_version_2_0\" class=\"right\" >\n\t\t\t\t\t<span class=\"title\">PotreeConverter 2.0</span>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>Complete rewrite that generates a total of 3 files instead of thousands to millions.</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</label>\n\n\t\t\t</div>\n\t\t</div>\n\n\t\t<p>\n\t\t\t<span style=\"display: flex\">\n\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t<input type=\"button\" value=\"Start Conversion\" id=\"converter_panel_start\"/>\n\t\t\t\t<span style=\"width:1em\"></span>\n\t\t\t\t<input type=\"button\" value=\"Cancel\" id=\"converter_panel_cancel\"/>\n\t\t\t</span>\n\t\t\t\n\t\t</p>\n\n\t</span>\n\n\t<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>\n\n\t<script src=\"./libs/jquery/jquery-3.1.1.min.js\"></script>\n\t<script src=\"./libs/spectrum/spectrum.js\"></script>\n\t<script src=\"./libs/jquery-ui/jquery-ui.min.js\"></script>\n\t<script src=\"./libs/other/BinaryHeap.js\"></script>\n\t<script src=\"./libs/tween/tween.min.js\"></script>\n\t<script src=\"./libs/d3/d3.js\"></script>\n\t<script src=\"./libs/proj4/proj4.js\"></script>\n\t<script src=\"./libs/openlayers3/ol.js\"></script>\n\t<script src=\"./libs/i18next/i18next.js\"></script>\n\t<script src=\"./libs/jstree/jstree.js\"></script>\n\t<script src=\"./libs/potree/potree.js\"></script>\n\t<script src=\"./libs/plasio/js/laslaz.js\"></script>\n\n\t\t<script>\n\t\tlet elSplatQuality = $(\"#converter_choice\");\n\t\telSplatQuality.selectgroup({title: \"Converter Choice\"});\n\n\t\telSplatQuality.find(\"input\").click( (e) => {\n\t\t\tconsole.log(e.target.value);\n\t\t\t// if(e.target.value === \"standard\"){\n\t\t\t// \tthis.viewer.useHQ = false;\n\t\t\t// }else if(e.target.value === \"hq\"){\n\t\t\t// \tthis.viewer.useHQ = true;\n\t\t\t// }\n\t\t});\n\t</script>\n\t\n\t<div class=\"potree_container\" style=\"position: absolute; width: 100%; height: 100%; left: 0px; top: 0px; \">\n\t\t<div id=\"potree_render_area\"></div>\n\t\t<div id=\"potree_sidebar_container\"> </div>\n\t</div>\n\n\n\t\t<script type=\"module\">\n\n\t\timport {\n\t\t\tloadDroppedPointcloud, \n\t\t\tcreatePlaceholder, \n\t\t\tconvert_17, \n\t\t\tconvert_20, \n\t\t\tdoConversion,\n\t\t\tdragEnter, dragOver, dragLeave, dropHandler,\n\t\t} from \"./src/desktop.js\";\n\n\t\t{\n\t\t\t// open links in the standard browser instead of electron\n\t\t\t// see https://github.com/electron/electron/issues/1344\n\t\t\tconst shell = require('electron').shell;\n\t\t\t$(document).on('click', 'a[href^=\"http\"]', function(event) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tshell.openExternal(this.href);\n\t\t\t});\n\t\t}\n\n\t\tlet elBody = document.body;\n\n\t\telBody.addEventListener(\"dragenter\", dragEnter, false);\n\t\telBody.addEventListener(\"dragover\", dragOver, false);\n\t\telBody.addEventListener(\"dragleave\", dragLeave, false);\n\t\telBody.addEventListener(\"drop\", dropHandler, false);\n\t\n\t\tlet elRenderArea = document.getElementById(\"potree_render_area\");\n\t\tlet viewerArgs = {\n\t\t\tnoDragAndDrop: true,\n\t\t};\n\t\twindow.viewer = new Potree.Viewer(elRenderArea, viewerArgs);\n\t\t\n\t\tviewer.setEDLEnabled(true);\n\t\tviewer.setFOV(60);\n\t\tviewer.setPointBudget(3*1000*1000);\n\t\tviewer.setMinNodeSize(0);\n\t\tviewer.loadSettingsFromURL();\n\t\t\n\t\tviewer.setDescription(\"\");\n\t\t\n\t\tviewer.loadGUI(() => {\n\t\t\tviewer.setLanguage('en');\n\t\t\t$(\"#menu_appearance\").next().show();\n\t\t\t$(\"#menu_tools\").next().show();\n\t\t\t$(\"#menu_scene\").next().show();\n\t\t\t$(\"#menu_filters\").next().show();\n\t\t\tviewer.toggleSidebar();\n\n\n\t\t\t// let section = $(`\n\t\t\t// \t<h3 id=\"menu_meta\" class=\"accordion-header ui-widget\"><span>Prototyping</span></h3>\n\t\t\t// \t<div class=\"accordion-content ui-widget pv-menu-list\"></div>\n\t\t\t// `);\n\t\t\t// let content = section.last();\n\t\t\t// content.html(`\n\t\t\t// <div class=\"pv-menu-list\">\n\t\t\t// \t<input id=\"btnExportLaz\" type=\"button\" value=\"export selection to LAZ\"/>\n\t\t\t// </div>\n\t\t\t// `);\n\t\t\t// section.first().click(() => content.slideToggle());\n\t\t\t// section.insertBefore($('#menu_appearance'));\n\n\t\t\t// let button = $(\"#btnExportLaz\");\n\t\t\t// button.click( () => {\n\n\t\t\t// \tconst {normalize} = require(\"path\");\n\n\t\t\t// \tlet pointclouds = viewer.scene.pointclouds; //[0].pcoGeometry.url\n\t\t\t// \t//let cmdInput = pointclouds.map(p => normalize(`${p.pcoGeometry.url}/../`)).join( );\n\t\t\t// \tlet inputPaths = pointclouds.map(p => normalize(`${p.pcoGeometry.url}/../`));\n\n\t\t\t// \tlet volumes = viewer.scene.volumes;\n\t\t\t// \tlet matrices = volumes.map(v => v.matrix.elements);\n\n\t\t\t// \tlet cmdArea = \"\";\n\n\t\t\t// \tfor(let matrix of matrices){\n\t\t\t// \t\tlet cmd = `matrix(${matrix.join(\", \")})`;\n\n\t\t\t// \t\tcmdArea += `${cmd} `;\n\t\t\t// \t}\n\t\t\t\t\n\t\t\t// \tlet suggestedPath = normalize(viewer.scene.pointclouds[0].pcoGeometry.url + \"/../../export.las\");\n\t\t\t// \tconst dialog = require('electron').remote.dialog;\n\t\t\t// \tconst chosenPath = dialog.showSaveDialogSync(null, {\n\t\t\t// \t\ttitle: \"Chose Export Path\",\n\t\t\t// \t\tdefaultPath: suggestedPath,\n\t\t\t// \t\tbuttonLabel: \"Select\",\n\t\t\t// \t\tfilters: [],\n\t\t\t// \t\tproperties: [\"openDirectory \", \"promptToCreate\", \"createDirectory\"],\n\t\t\t// \t});\n\n\t\t\t// \tif(!chosenPath){\n\t\t\t// \t\treturn;\n\t\t\t// \t}\n\n\n\t\t\t// \t// let cmd = `${cmdInput} -o ${chosenPath} ${cmdArea}`;\n\n\t\t\t// \tconst { spawn } = require('child_process');\n\n\t\t\t// \tlet exe = './libs/CPotree/filter.exe';\n\t\t\t// \tlet parameters = [\n\t\t\t// \t\t...inputPaths,\n\t\t\t// \t\t\"-o\", chosenPath,\n\t\t\t// \t\t\"--area\", cmdArea\n\t\t\t// \t];\n\t\t\t// \tconsole.log(parameters);\n\n\t\t\t// \tconst converter = spawn(exe, parameters);\n\n\t\t\t// \tconverter.stdout.on('data', (data) => {\n\t\t\t// \t\tconst string = new TextDecoder(\"utf-8\").decode(data);\n\n\t\t\t// \t\tconsole.log(\"stdout\", string);\n\t\t\t// \t});\n\n\t\t\t// \tconverter.stderr.on('data', (data) => {\n\t\t\t// \t\tconsole.log(\"==\");\n\t\t\t// \t\tconsole.error(`stderr: ${data}`);\n\t\t\t// \t});\n\n\t\t\t// \tconverter.on('close', (code) => {\n\t\t\t// \t\tconsole.log(`child process exited with code ${code}`);\n\t\t\t// \t});\n\n\t\t\t\t\n\n\t\t\t// });\n\n\t\t});\n\n\t\t// load a file from your disc or USB drive:\n\t\t//Potree.loadPointCloud(\"C:/dev/workspaces/potree/develop/pointclouds/lion_takanawa/cloud.js\", \"Point Cloud Name\", function(e){\n\t\t\n\t\t//Potree.loadPointCloud(\"http://5.9.65.151/mschuetz/potree/resources/pointclouds/archpro/heidentor/cloud.js\", \"Point Cloud Name\", function(e){\n\t\t//\tviewer.scene.addPointCloud(e.pointcloud);\n\t\t//\te.pointcloud.position.z = 0;\n\t\t//\tlet material = e.pointcloud.material;\n\t\t//\tmaterial.size = 1;\n\t\t//\tmaterial.pointSizeType = Potree.PointSizeType.ADAPTIVE;\n\n\t\t//\tviewer.scene.view.position.set(13.856734292740617, -9.125174923658731, 14.563928417406354);\n\t\t//\tviewer.scene.view.lookAt(-3.5482630104475366, 2.728596783815762, 6.1406044783018725);\n\t\t//});\n\t\t\n\t\t\n\n\t\t//Potree.loadPointCloud(\"C:/dev/pointclouds/ot_35120C7102A_1/cloud.js\", \"CA13\", e => {\n\t\t////Potree.loadPointCloud(\"../pointclouds/C/dev/pointclouds/test/cloud.js\", \"sigeom.sa\", e => {\n\t\t//\tlet scene = viewer.scene;\n\t\t//\tlet pointcloud = e.pointcloud;\n\t\t//\t\n\t\t//\tlet material = pointcloud.material;\n\t\t//\tmaterial.size = 3;\n\t\t//\tmaterial.pointSizeType = Potree.PointSizeType.FIXED;\n\t\t//\tmaterial.pointColorType = Potree.PointColorType.SOURCE;\n\t\t//\tmaterial.shape = Potree.PointShape.SQUARE;\n\t\t//\t\n\t\t//\tscene.addPointCloud(pointcloud);\n\t\t//\t\n\t\t//\tscene.view.position.set(693195.575, 3915628.878, 472.872);\n\t\t//\tscene.view.lookAt(693747.110, 3916033.332, 33.996);\n\t\t//});\n\n\t\t\n\t\t// viewer.onGUILoaded(() => {\n\t\t// \tlet message = `\n\t\t// \tWelcome to Potree Desktop.<br>\n\t\t// \t<p>\n\t\t// \tThis portable version can be used to load <a href=\"https://github.com/potree/PotreeConverter\", target=\"_blank\"> converted point clouds</a>\n\t\t// \tdirectly from disk. Just drag & drop a cloud.js file, or it's parent folder, into this window.\n\t\t// \t</p>\n\n\t\t// \t<p>\n\t\t// \tYou can set up a default scene by modifying the index.html file in the potree desktop folder. \n\t\t// \t</p>\n\t\t// \t`;\n\n\t\t// \t//viewer.postMessage(message);\n\t\t// \tviewer.postMessage(message, {duration: 15000});\n\t\t// });\n\n\t\twindow.addEventListener('error', (e) => {\n\t\t\t//console.log(e);\n\t\t\tviewer.postError(e.error.message);\n\t\t});\n\n\t\t\n\t\t\n\t</script>\n\n\n\t</body>\n</html>\n"
  },
  {
    "path": "libs/MeshLine/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016 Jaume Sanchez\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "libs/MeshLine/README.md",
    "content": "# MeshLine\nMesh replacement for ```THREE.Line```\n\nInstead of using GL_LINE, it uses a strip of triangles billboarded. Some examples:\n\n[![Demo](screenshots/demo.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/index.html)\n[![Graph](screenshots/graph.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/graph.html)\n[![Spinner](screenshots/spinner.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/spinner.html)\n[![SVG](screenshots/svg.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/svg.html)\n[![Shape](screenshots/shape.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/shape.html)\n[![Shape](screenshots/birds.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/birds.html)\n\n* [Demo](https://www.clicktorelease.com/code/THREE.MeshLine/demo/index.html): play with the different settings of materials\n* [Graph](https://www.clicktorelease.com/code/THREE.MeshLine/demo/graph.html): example of using ```MeshLine``` to plot graphs\n* [Spinner](https://www.clicktorelease.com/code/THREE.MeshLine/demo/spinner.html): example of dynamic ```MeshLine``` with texture\n* [SVG](https://www.clicktorelease.com/code/THREE.MeshLine/demo/svg.html): example of ```MeshLine``` rendering SVG Paths\n* [Shape](https://www.clicktorelease.com/code/THREE.MeshLine/demo/shape.html): example of ```MeshLine``` created from a mesh\n* [Birds](https://www.clicktorelease.com/code/THREE.MeshLine/demo/birds.html): example of ```MeshLine.advance()``` by @caramelcode (Jared Sprague) and @mwcz (Michael Clayton)\n\n### How to use ####\n\n* Include script\n* Create and populate a geometry\n* Create a MeshLine and assign the geometry\n* Create a MeshLineMaterial\n* Use MeshLine and MeshLineMaterial to create a THREE.Mesh\n\n#### Include the script\n\nInclude script after THREE is included\n```js\n<script src=\"THREE.MeshLine.js\"></script>\n```\nor use npm to install it\n```\nnpm i three.meshline\n```\nand include it in your code (don't forget to require three.js)\n```js\nvar THREE = require( 'three' );\nvar MeshLine = require( 'three.meshline' );\n```\n\n##### Create and populate a geometry #####\n\nFirst, create the list of vertices that will define the line. ```MeshLine``` accepts ```THREE.Geometry``` (looking up the ```.vertices``` in it) and ```Array```/```Float32Array```. ```THREE.BufferGeometry``` coming soon, and may be others like ```Array``` of ```THREE.Vector3```.\n\n```js\nvar geometry = new THREE.Geometry();\nfor( var j = 0; j < Math.PI; j += 2 * Math.PI / 100 ) {\n\tvar v = new THREE.Vector3( Math.cos( j ), Math.sin( j ), 0 );\n\tgeometry.vertices.push( v );\n}\n```\n\n##### Create a MeshLine and assign the geometry #####\n\nOnce you have that, you can create a new ```MeshLine```, and call ```.setGeometry()``` passing the vertices.\n\n```js\nvar line = new MeshLine();\nline.setGeometry( geometry );\n```\n\nNote: ```.setGeometry``` accepts a second parameter, which is a function to define the width in each point along the line. By default that value is 1, making the line width 1 * lineWidth.\n\n```js\nline.setGeometry( geometry, function( p ) { return 2; } ); // makes width 2 * lineWidth\nline.setGeometry( geometry, function( p ) { return 1 - p; } ); // makes width taper\nline.setGeometry( geometry, function( p ) { return 2 + Math.sin( 50 * p ); } ); // makes width sinusoidal\n```\n\n##### Create a MeshLineMaterial #####\n\nA ```MeshLine``` needs a ```MeshLineMaterial```:\n\n```js\nvar material = new MeshLineMaterial();\n```\n\nBy default it's a white material of width 1 unit.\n\n```MeshLineMaterial``` has several attributes to control the appereance of the ```MeshLine```:\n\n* ```map``` - a ```THREE.Texture``` to paint along the line (requires ```useMap``` set to true)\n* ```useMap``` - tells the material to use ```map``` (0 - solid color, 1 use texture)\n* ```alphaMap``` - a ```THREE.Texture``` to use as alpha along the line (requires ```useAlphaMap``` set to true)\n* ```useAlphaMap``` - tells the material to use ```alphaMap``` (0 - no alpha, 1 modulate alpha)\n* ```repeat``` - THREE.Vector2 to define the texture tiling (applies to map and alphaMap - MIGHT CHANGE IN THE FUTURE)\n* ```color``` - ```THREE.Color``` to paint the line width, or tint the texture with\n* ```opacity``` - alpha value from 0 to 1 (requires ```transparent``` set to ```true```)\n* ```alphaTest``` - cutoff value from 0 to 1\n* ```dashArray``` - THREE.Vector2 to define the dashing (NOT IMPLEMENTED YET)\n* ```resolution``` - ```THREE.Vector2``` specifying the canvas size (REQUIRED)\n* ```sizeAttenuation``` - makes the line width constant regardless distance (1 unit is 1px on screen) (0 - attenuate, 1 - don't attenuate)\n* ```lineWidth``` - float defining width (if ```sizeAttenuation``` is true, it's world units; else is screen pixels)\n* ```near``` - camera near clip plane distance  (REQUIRED if ```sizeAttenuation``` set to false)\n* ```far``` - camera far clip plane distance  (REQUIRED if ```sizeAttenuation``` set to false)\n\nIf you're rendering transparent lines or using a texture with alpha map, you should set ```depthTest``` to ```false```, ```transparent``` to ```true``` and ```blending``` to an appropriate blending mode, or use ```alphaTest```.\n\n##### Use MeshLine and MeshLineMaterial to create a THREE.Mesh #####\n\nFinally, we create a mesh and add it to the scene:\n\n```js\nvar mesh = new THREE.Mesh( line.geometry, material ); // this syntax could definitely be improved!\nscene.add( mesh );\n```\n\n### TODO ###\n\n* Better miters\n* Proper sizes\n* Support for dashArray\n\n### Support ###\n\nTested successfully on\n\n* Chrome OSX, Windows, Android\n* Firefox OSX, Windows, Anroid\n* Safari OSX, iOS\n* Internet Explorer 11 (SVG and Shape demo won't work because they use Promises)\n* Opera OSX, Windows\n\n### References ###\n\n* [Drawing lines is hard](http://mattdesl.svbtle.com/drawing-lines-is-hard)\n* [WebGL rendering of solid trails](http://codeflow.org/entries/2012/aug/05/webgl-rendering-of-solid-trails/)\n* [Drawing Antialiased Lines with OpenGL](https://www.mapbox.com/blog/drawing-antialiased-lines/)\n\n#### License ####\n\nMIT licensed\n\nCopyright (C) 2015-2016 Jaume Sanchez Elias, http://www.clicktorelease.com\n"
  },
  {
    "path": "libs/MeshLine/src/THREE.MeshLine.js",
    "content": ";(function() {\n\n\"use strict\";\n\nvar root = this\n\nvar has_require = typeof require !== 'undefined'\n\nvar THREE = root.THREE || has_require && require('three')\nif( !THREE )\n\tthrow new Error( 'MeshLine requires three.js' )\n\nfunction MeshLine() {\n\n\tthis.positions = [];\n\n\tthis.previous = [];\n\tthis.next = [];\n\tthis.side = [];\n\tthis.width = [];\n\tthis.indices_array = [];\n\tthis.uvs = [];\n\tthis.counters = [];\n\tthis.geometry = new THREE.BufferGeometry();\n\n\tthis.widthCallback = null;\n\n}\n\nMeshLine.prototype.setGeometry = function( g, c ) {\n\n\tthis.widthCallback = c;\n\n\tthis.positions = [];\n\tthis.counters = [];\n\n\tif( g instanceof THREE.Geometry ) {\n\t\tfor( var j = 0; j < g.vertices.length; j++ ) {\n\t\t\tvar v = g.vertices[ j ];\n\t\t\tvar c = j/g.vertices.length;\n\t\t\tthis.positions.push( v.x, v.y, v.z );\n\t\t\tthis.positions.push( v.x, v.y, v.z );\n\t\t\tthis.counters.push(c);\n\t\t\tthis.counters.push(c);\n\t\t}\n\t}\n\n\tif( g instanceof THREE.BufferGeometry ) {\n\t\t// read attribute positions ?\n\t}\n\n\tif( g instanceof Float32Array || g instanceof Array ) {\n\t\tfor( var j = 0; j < g.length; j += 3 ) {\n\t\t\tvar c = j/g.length;\n\t\t\tthis.positions.push( g[ j ], g[ j + 1 ], g[ j + 2 ] );\n\t\t\tthis.positions.push( g[ j ], g[ j + 1 ], g[ j + 2 ] );\n\t\t\tthis.counters.push(c);\n\t\t\tthis.counters.push(c);\n\t\t}\n\t}\n\n\tthis.process();\n\n}\n\nMeshLine.prototype.compareV3 = function( a, b ) {\n\n\tvar aa = a * 6;\n\tvar ab = b * 6;\n\treturn ( this.positions[ aa ] === this.positions[ ab ] ) && ( this.positions[ aa + 1 ] === this.positions[ ab + 1 ] ) && ( this.positions[ aa + 2 ] === this.positions[ ab + 2 ] );\n\n}\n\nMeshLine.prototype.copyV3 = function( a ) {\n\n\tvar aa = a * 6;\n\treturn [ this.positions[ aa ], this.positions[ aa + 1 ], this.positions[ aa + 2 ] ];\n\n}\n\nMeshLine.prototype.process = function() {\n\n\tvar l = this.positions.length / 6;\n\n\tthis.previous = [];\n\tthis.next = [];\n\tthis.side = [];\n\tthis.width = [];\n\tthis.indices_array = [];\n\tthis.uvs = [];\n\n\tfor( var j = 0; j < l; j++ ) {\n\t\tthis.side.push( 1 );\n\t\tthis.side.push( -1 );\n\t}\n\n\tvar w;\n\tfor( var j = 0; j < l; j++ ) {\n\t\tif( this.widthCallback ) w = this.widthCallback( j / ( l -1 ) );\n\t\telse w = 1;\n\t\tthis.width.push( w );\n\t\tthis.width.push( w );\n\t}\n\n\tfor( var j = 0; j < l; j++ ) {\n\t\tthis.uvs.push( j / ( l - 1 ), 0 );\n\t\tthis.uvs.push( j / ( l - 1 ), 1 );\n\t}\n\n\tvar v;\n\n\tif( this.compareV3( 0, l - 1 ) ){\n\t\tv = this.copyV3( l - 2 );\n\t} else {\n\t\tv = this.copyV3( 0 );\n\t}\n\tthis.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] );\n\tthis.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] );\n\tfor( var j = 0; j < l - 1; j++ ) {\n\t\tv = this.copyV3( j );\n\t\tthis.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] );\n\t\tthis.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] );\n\t}\n\n\tfor( var j = 1; j < l; j++ ) {\n\t\tv = this.copyV3( j );\n\t\tthis.next.push( v[ 0 ], v[ 1 ], v[ 2 ] );\n\t\tthis.next.push( v[ 0 ], v[ 1 ], v[ 2 ] );\n\t}\n\n\tif( this.compareV3( l - 1, 0 ) ){\n\t\tv = this.copyV3( 1 );\n\t} else {\n\t\tv = this.copyV3( l - 1 );\n\t}\n\tthis.next.push( v[ 0 ], v[ 1 ], v[ 2 ] );\n\tthis.next.push( v[ 0 ], v[ 1 ], v[ 2 ] );\n\n\tfor( var j = 0; j < l - 1; j++ ) {\n\t\tvar n = j * 2;\n\t\tthis.indices_array.push( n, n + 1, n + 2 );\n\t\tthis.indices_array.push( n + 2, n + 1, n + 3 );\n\t}\n\n\tif (!this.attributes) {\n\t\tthis.attributes = {\n\t\t\tposition: new THREE.BufferAttribute( new Float32Array( this.positions ), 3 ),\n\t\t\tprevious: new THREE.BufferAttribute( new Float32Array( this.previous ), 3 ),\n\t\t\tnext: new THREE.BufferAttribute( new Float32Array( this.next ), 3 ),\n\t\t\tside: new THREE.BufferAttribute( new Float32Array( this.side ), 1 ),\n\t\t\twidth: new THREE.BufferAttribute( new Float32Array( this.width ), 1 ),\n\t\t\tuv: new THREE.BufferAttribute( new Float32Array( this.uvs ), 2 ),\n\t\t\tindex: new THREE.BufferAttribute( new Uint16Array( this.indices_array ), 1 ),\n\t\t\tcounters: new THREE.BufferAttribute( new Float32Array( this.counters ), 1 )\n\t\t}\n\t} else {\n\t\tthis.attributes.position.copyArray(new Float32Array(this.positions));\n\t\tthis.attributes.position.needsUpdate = true;\n\t\tthis.attributes.previous.copyArray(new Float32Array(this.previous));\n\t\tthis.attributes.previous.needsUpdate = true;\n\t\tthis.attributes.next.copyArray(new Float32Array(this.next));\n\t\tthis.attributes.next.needsUpdate = true;\n\t\tthis.attributes.side.copyArray(new Float32Array(this.side));\n\t\tthis.attributes.side.needsUpdate = true;\n\t\tthis.attributes.width.copyArray(new Float32Array(this.width));\n\t\tthis.attributes.width.needsUpdate = true;\n\t\tthis.attributes.uv.copyArray(new Float32Array(this.uvs));\n\t\tthis.attributes.uv.needsUpdate = true;\n\t\tthis.attributes.index.copyArray(new Uint16Array(this.indices_array));\n\t\tthis.attributes.index.needsUpdate = true;\n    }\n\n\tthis.geometry.addAttribute( 'position', this.attributes.position );\n\tthis.geometry.addAttribute( 'previous', this.attributes.previous );\n\tthis.geometry.addAttribute( 'next', this.attributes.next );\n\tthis.geometry.addAttribute( 'side', this.attributes.side );\n\tthis.geometry.addAttribute( 'width', this.attributes.width );\n\tthis.geometry.addAttribute( 'uv', this.attributes.uv );\n\tthis.geometry.addAttribute( 'counters', this.attributes.counters );\n\n\tthis.geometry.setIndex( this.attributes.index );\n\n}\n\nfunction memcpy (src, srcOffset, dst, dstOffset, length) {\n\tvar i\n\n\tsrc = src.subarray || src.slice ? src : src.buffer\n\tdst = dst.subarray || dst.slice ? dst : dst.buffer\n\n\tsrc = srcOffset ? src.subarray ?\n\tsrc.subarray(srcOffset, length && srcOffset + length) :\n\tsrc.slice(srcOffset, length && srcOffset + length) : src\n\n\tif (dst.set) {\n\t\tdst.set(src, dstOffset)\n\t} else {\n\t\tfor (i=0; i<src.length; i++) {\n\t\t\tdst[i + dstOffset] = src[i]\n\t\t}\n\t}\n\n\treturn dst\n}\n\n/**\n * Fast method to advance the line by one position.  The oldest position is removed.\n * @param position\n */\nMeshLine.prototype.advance = function(position) {\n\n\tvar positions = this.attributes.position.array;\n\tvar previous = this.attributes.previous.array;\n\tvar next = this.attributes.next.array;\n\tvar l = positions.length;\n\n\t// PREVIOUS\n\tmemcpy( positions, 0, previous, 0, l );\n\n\t// POSITIONS\n\tmemcpy( positions, 6, positions, 0, l - 6 );\n\n\tpositions[l - 6] = position.x;\n\tpositions[l - 5] = position.y;\n\tpositions[l - 4] = position.z;\n\tpositions[l - 3] = position.x;\n\tpositions[l - 2] = position.y;\n\tpositions[l - 1] = position.z;\n\n    // NEXT\n\tmemcpy( positions, 6, next, 0, l - 6 );\n\n\tnext[l - 6]  = position.x;\n\tnext[l - 5]  = position.y;\n\tnext[l - 4]  = position.z;\n\tnext[l - 3]  = position.x;\n\tnext[l - 2]  = position.y;\n\tnext[l - 1]  = position.z;\n\n\tthis.attributes.position.needsUpdate = true;\n\tthis.attributes.previous.needsUpdate = true;\n\tthis.attributes.next.needsUpdate = true;\n\n};\n\nfunction MeshLineMaterial( parameters ) {\n\n\tvar vertexShaderSource = [\n'precision highp float;',\n'',\n'attribute vec3 position;',\n'attribute vec3 previous;',\n'attribute vec3 next;',\n'attribute float side;',\n'attribute float width;',\n'attribute vec2 uv;',\n'attribute float counters;',\n'',\n'uniform mat4 projectionMatrix;',\n'uniform mat4 modelViewMatrix;',\n'uniform vec2 resolution;',\n'uniform float lineWidth;',\n'uniform vec3 color;',\n'uniform float opacity;',\n'uniform float near;',\n'uniform float far;',\n'uniform float sizeAttenuation;',\n'',\n'varying vec2 vUV;',\n'varying vec4 vColor;',\n'varying float vCounters;',\n'',\n'vec2 fix( vec4 i, float aspect ) {',\n'',\n'    vec2 res = i.xy / i.w;',\n'    res.x *= aspect;',\n'\t vCounters = counters;',\n'    return res;',\n'',\n'}',\n'',\n'void main() {',\n'',\n'    float aspect = resolution.x / resolution.y;',\n'\t float pixelWidthRatio = 1. / (resolution.x * projectionMatrix[0][0]);',\n'',\n'    vColor = vec4( color, opacity );',\n'    vUV = uv;',\n'',\n'    mat4 m = projectionMatrix * modelViewMatrix;',\n'    vec4 finalPosition = m * vec4( position, 1.0 );',\n'    vec4 prevPos = m * vec4( previous, 1.0 );',\n'    vec4 nextPos = m * vec4( next, 1.0 );',\n'',\n'    vec2 currentP = fix( finalPosition, aspect );',\n'    vec2 prevP = fix( prevPos, aspect );',\n'    vec2 nextP = fix( nextPos, aspect );',\n'',\n'\t float pixelWidth = finalPosition.w * pixelWidthRatio;',\n'    float w = 1.8 * pixelWidth * lineWidth * width;',\n'',\n'    if( sizeAttenuation == 1. ) {',\n'        w = 1.8 * lineWidth * width;',\n'    }',\n'',\n'    vec2 dir;',\n'    if( nextP == currentP ) dir = normalize( currentP - prevP );',\n'    else if( prevP == currentP ) dir = normalize( nextP - currentP );',\n'    else {',\n'        vec2 dir1 = normalize( currentP - prevP );',\n'        vec2 dir2 = normalize( nextP - currentP );',\n'        dir = normalize( dir1 + dir2 );',\n'',\n'        vec2 perp = vec2( -dir1.y, dir1.x );',\n'        vec2 miter = vec2( -dir.y, dir.x );',\n'        //w = clamp( w / dot( miter, perp ), 0., 4. * lineWidth * width );',\n'',\n'    }',\n'',\n'    //vec2 normal = ( cross( vec3( dir, 0. ), vec3( 0., 0., 1. ) ) ).xy;',\n'    vec2 normal = vec2( -dir.y, dir.x );',\n'    normal.x /= aspect;',\n'    normal *= .5 * w;',\n'',\n'    vec4 offset = vec4( normal * side, 0.0, 1.0 );',\n'    finalPosition.xy += offset.xy;',\n'',\n'    gl_Position = finalPosition;',\n'',\n'}' ];\n\n\tvar fragmentShaderSource = [\n\t\t'#extension GL_OES_standard_derivatives : enable',\n'precision mediump float;',\n'',\n'uniform sampler2D map;',\n'uniform sampler2D alphaMap;',\n'uniform float useMap;',\n'uniform float useAlphaMap;',\n'uniform float useDash;',\n'uniform vec2 dashArray;',\n'uniform float visibility;',\n'uniform float alphaTest;',\n'uniform vec2 repeat;',\n'',\n'varying vec2 vUV;',\n'varying vec4 vColor;',\n'varying float vCounters;',\n'',\n'void main() {',\n'',\n'    vec4 c = vColor;',\n'    if( useMap == 1. ) c *= texture2D( map, vUV * repeat );',\n'    if( useAlphaMap == 1. ) c.a *= texture2D( alphaMap, vUV * repeat ).a;',\n'\t if( c.a < alphaTest ) discard;',\n'\t if( useDash == 1. ){',\n'\t \t ',\n'\t }',\n'    gl_FragColor = c;',\n'\t gl_FragColor.a *= step(vCounters,visibility);',\n'}' ];\n\n\tfunction check( v, d ) {\n\t\tif( v === undefined ) return d;\n\t\treturn v;\n\t}\n\n\tTHREE.Material.call( this );\n\n\tparameters = parameters || {};\n\n\tthis.lineWidth = check( parameters.lineWidth, 1 );\n\tthis.map = check( parameters.map, null );\n\tthis.useMap = check( parameters.useMap, 0 );\n\tthis.alphaMap = check( parameters.alphaMap, null );\n\tthis.useAlphaMap = check( parameters.useAlphaMap, 0 );\n\tthis.color = check( parameters.color, new THREE.Color( 0xffffff ) );\n\tthis.opacity = check( parameters.opacity, 1 );\n\tthis.resolution = check( parameters.resolution, new THREE.Vector2( 1, 1 ) );\n\tthis.sizeAttenuation = check( parameters.sizeAttenuation, 1 );\n\tthis.near = check( parameters.near, 1 );\n\tthis.far = check( parameters.far, 1 );\n\tthis.dashArray = check( parameters.dashArray, [] );\n\tthis.useDash = ( this.dashArray !== [] ) ? 1 : 0;\n\tthis.visibility = check( parameters.visibility, 1 );\n\tthis.alphaTest = check( parameters.alphaTest, 0 );\n\tthis.repeat = check( parameters.repeat, new THREE.Vector2( 1, 1 ) );\n\n\tvar material = new THREE.RawShaderMaterial( {\n\t\tuniforms:{\n\t\t\tlineWidth: { type: 'f', value: this.lineWidth },\n\t\t\tmap: { type: 't', value: this.map },\n\t\t\tuseMap: { type: 'f', value: this.useMap },\n\t\t\talphaMap: { type: 't', value: this.alphaMap },\n\t\t\tuseAlphaMap: { type: 'f', value: this.useAlphaMap },\n\t\t\tcolor: { type: 'c', value: this.color },\n\t\t\topacity: { type: 'f', value: this.opacity },\n\t\t\tresolution: { type: 'v2', value: this.resolution },\n\t\t\tsizeAttenuation: { type: 'f', value: this.sizeAttenuation },\n\t\t\tnear: { type: 'f', value: this.near },\n\t\t\tfar: { type: 'f', value: this.far },\n\t\t\tdashArray: { type: 'v2', value: new THREE.Vector2( this.dashArray[ 0 ], this.dashArray[ 1 ] ) },\n\t\t\tuseDash: { type: 'f', value: this.useDash },\n\t\t\tvisibility: {type: 'f', value: this.visibility},\n\t\t\talphaTest: {type: 'f', value: this.alphaTest},\n\t\t\trepeat: { type: 'v2', value: this.repeat }\n\t\t},\n\t\tvertexShader: vertexShaderSource.join( '\\r\\n' ),\n\t\tfragmentShader: fragmentShaderSource.join( '\\r\\n' )\n\t});\n\n\tdelete parameters.lineWidth;\n\tdelete parameters.map;\n\tdelete parameters.useMap;\n\tdelete parameters.alphaMap;\n\tdelete parameters.useAlphaMap;\n\tdelete parameters.color;\n\tdelete parameters.opacity;\n\tdelete parameters.resolution;\n\tdelete parameters.sizeAttenuation;\n\tdelete parameters.near;\n\tdelete parameters.far;\n\tdelete parameters.dashArray;\n\tdelete parameters.visibility;\n\tdelete parameters.alphaTest;\n\tdelete parameters.repeat;\n\n\tmaterial.type = 'MeshLineMaterial';\n\n\tmaterial.setValues( parameters );\n\n\treturn material;\n\n};\n\nMeshLineMaterial.prototype = Object.create( THREE.Material.prototype );\nMeshLineMaterial.prototype.constructor = MeshLineMaterial;\n\nMeshLineMaterial.prototype.copy = function ( source ) {\n\n\tTHREE.Material.prototype.copy.call( this, source );\n\n\tthis.lineWidth = source.lineWidth;\n\tthis.map = source.map;\n\tthis.useMap = source.useMap;\n\tthis.alphaMap = source.alphaMap;\n\tthis.useAlphaMap = source.useAlphaMap;\n\tthis.color.copy( source.color );\n\tthis.opacity = source.opacity;\n\tthis.resolution.copy( source.resolution );\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\tthis.near = source.near;\n\tthis.far = source.far;\n\tthis.dashArray.copy( source.dashArray );\n\tthis.useDash = source.useDash;\n\tthis.visibility = source.visibility;\n\tthis.alphaTest = source.alphaTest;\n\tthis.repeat.copy( source.repeat );\n\n\treturn this;\n\n};\n\nif( typeof exports !== 'undefined' ) {\n\tif( typeof module !== 'undefined' && module.exports ) {\n\t\texports = module.exports = { MeshLine: MeshLine, MeshLineMaterial: MeshLineMaterial };\n\t}\n\texports.MeshLine = MeshLine;\n\texports.MeshLineMaterial = MeshLineMaterial;\n}\nelse {\n\troot.MeshLine = MeshLine;\n\troot.MeshLineMaterial = MeshLineMaterial;\n}\n\n}).call(this);\n\n"
  },
  {
    "path": "libs/PotreeConverter/LICENSE_laszip",
    "content": "--------------------------------------------------------------------------\n\n  LICENSE AGREEMENT (for LASzip LiDAR compression):\n\n  LASzip is open-source and is licensed with the standard LGPL version 2.1\n  (see COPYING.txt) modified by the following static linking exception.\n\n  As a special exception, the copyright holders of this library give you\n  permission to link this library with independent modules to produce an\n  executable, regardless of the license terms of these independent modules,\n  and to copy and distribute the resulting executable under terms of your\n  choice, provided that you also meet, for each linked independent module,\n  the terms and conditions of the license of that module. An independent\n  module is a module which is not derived from or based on this library.\n  If you modify this library, you may extend this exception to your version\n  of the library, but you are not obliged to do so. If you do not wish to\n  do so, delete this exception statement from your version.\n\n  This software is distributed WITHOUT ANY WARRANTY and without even the\n  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n--------------------------------------------------------------------------\n\n  PROGRAMMERS:\n  \n  martin@rapidlasso.com\n  \n--------------------------------------------------------------------------\n\n  COPYRIGHT:\n  \n  (c) 2007-2015, martin isenburg, rapidlasso - fast tools to catch reality\n\n--------------------------------------------------------------------------\n"
  },
  {
    "path": "libs/PotreeConverter2/README.md",
    "content": "\r\n# About\r\n\r\nPotreeConverter generates an octree LOD structure for streaming and real-time rendering of massive point clouds. The results can be viewed in web browsers with [Potree](https://github.com/potree/potree) or as a desktop application with [PotreeDesktop](https://github.com/potree/PotreeDesktop). \r\n\r\nVersion 2.0 is a complete rewrite with following differences over the previous version 1.7:\r\n\r\n* About 10 to 50 times faster than PotreeConverter 1.7 on SSDs.\r\n* Produces a total of 3 files instead of thousands to tens of millions of files. The reduction of the number of files improves file system operations such as copy, delete and upload to servers from hours and days to seconds and minutes. \r\n* Better support for standard LAS attributes and arbitrary extra attributes. Full support (e.g. int64 and uint64) in development.\r\n* Optional compression is not yet available in the new converter but on the roadmap for a future update.\r\n\r\nAltough the converter made a major step to version 2.0, the format it produces is also supported by Potree 1.7. The Potree viewer is scheduled to make the major step to version 2.0 in 2021, with a rewrite in WebGPU. \r\n\r\n# Publications\r\n\r\n* [Potree: Rendering Large Point Clouds in Web Browsers](https://www.cg.tuwien.ac.at/research/publications/2016/SCHUETZ-2016-POT/SCHUETZ-2016-POT-thesis.pdf)\r\n* [Fast Out-of-Core Octree Generation for Massive Point Clouds](https://www.cg.tuwien.ac.at/research/publications/2020/SCHUETZ-2020-MPC/), _Schütz M., Ohrhallinger S., Wimmer M._\r\n\r\n# Getting Started\r\n\r\n1. Download windows binaries or\r\n    * Download source code\r\n\t* Install [CMake](https://cmake.org/) 3.16 or later\r\n\t* Create and jump into folder \"build\"\r\n\t    ```\r\n\t    mkdir build\r\n\t    cd build\r\n\t    ```\r\n\t* run \r\n\t    ```\r\n\t    cmake ../\r\n\t    ```\r\n\t* On linux, run: ```make```\r\n\t* On windows, open Visual Studio 2019 Project ./Converter/Converter.sln and compile it in release mode\r\n2. run ```PotreeConverter.exe <input> -o <outputDir>```\r\n    * Optionally specify the sampling strategy:\r\n\t* Poisson-disk sampling (default): ```PotreeConverter.exe <input> -o <outputDir> -m poisson```\r\n\t* Random sampling: ```PotreeConverter.exe <input> -o <outputDir> -m random```\r\n\r\nIn Potree, modify one of the examples with following load command:\r\n\r\n```javascript\r\nlet url = \"../pointclouds/D/temp/test/metadata.json\";\r\nPotree.loadPointCloud(url).then(e => {\r\n\tlet pointcloud = e.pointcloud;\r\n\tlet material = pointcloud.material;\r\n\r\n\tmaterial.activeAttributeName = \"rgba\";\r\n\tmaterial.minSize = 2;\r\n\tmaterial.pointSizeType = Potree.PointSizeType.ADAPTIVE;\r\n\r\n\tviewer.scene.addPointCloud(pointcloud);\r\n\tviewer.fitToScreen();\r\n});\r\n\r\n```\r\n\r\n# Alternatives\r\n\r\nPotreeConverter 2.0 produces a very different format than previous iterations. If you find issues, you can still try previous converters or alternatives:\r\n\r\n<table>\r\n\t<tr>\r\n\t\t<th></th>\r\n\t\t<th>PotreeConverter 2.0</th>\r\n\t\t<th><a href=\"https://github.com/potree/PotreeConverter/releases/tag/1.7\">PotreeConverter 1.7</a></th>\r\n\t\t<th><a href=\"https://entwine.io/\">Entwine</a></th>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<th>license</th>\r\n\t\t<td>\r\n\t\t\tfree, BSD 2-clause\r\n\t\t</td>\r\n\t\t<td>\r\n\t\t\tfree, BSD 2-clause\r\n\t\t</td>\r\n\t\t<td>\r\n\t\t\tfree, LGPL\r\n\t\t</td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<th>#generated files</th>\r\n\t\t<td>\r\n\t\t\t3 files total\r\n\t\t</td>\r\n\t\t<td>\r\n\t\t\t1 per node\r\n\t\t</td>\r\n\t\t<td>\r\n\t\t\t1 per node\r\n\t\t</td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<th>compression</th>\r\n\t\t<td>\r\n\t\t\tnone (TODO)\r\n\t\t</td>\r\n\t\t<td>\r\n\t\t\tLAZ (optional)\r\n\t\t</td>\r\n\t\t<td>\r\n\t\t\tLAZ\r\n\t\t</td>\r\n\t</tr>\r\n</table>\r\n\r\nPerformance comparison (Ryzen 2700, NVMe SSD):\r\n\r\n![](./docs/images/performance_chart.png)\r\n\r\n# License \r\n\r\nPotreeConverter is available under the [BSD 2-clause license](./LICENSE)."
  },
  {
    "path": "libs/PotreeConverter2/licenses/license_brotli.txt",
    "content": "Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "libs/PotreeConverter2/licenses/license_json.txt",
    "content": "MIT License \r\n\r\nCopyright (c) 2013-2020 Niels Lohmann\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE."
  },
  {
    "path": "libs/PotreeConverter2/licenses/license_laszip.txt",
    "content": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\n\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\n\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\n\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\n\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\n\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\n\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\n\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\n\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!\n"
  },
  {
    "path": "libs/PotreeConverter2/licenses/license_potree_converter.txt",
    "content": "\nCopyright 2020 Markus Schütz\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
  },
  {
    "path": "libs/ZoomableSlider/ZoomableSlider.css",
    "content": "\n.zs_widget{\n\tpadding: 2px;\n\theight: 30px;\n\tborder: 1px solid green;\n\tuser-select: none;\n}\n.zs_core{\n\toverflow: hidden;\n\tposition: relative;\n\theight: 100%;\n}\n.zs_handle{\n\tposition: absolute;\n\ttop: 0px;\n\tbottom: 0px;\n\tborder: 1px solid green;\n\tbackground-color: green;\n\twidth: 8px;\n\tuser-select: none;\n}\n.zs_handle:hover{\n\tbackground-color: lightgreen;\n}\n.zs_inside{\n\tposition: absolute;\n}\n.zs_outside{\n\tposition: absolute !important;\n\twidth: 100%;\n\theight: 2px;\n\tbackground-color: black;\n\ttop: 50%;\n}\n.zs_visible_range_label{\n\tposition: absolute;\n\tbottom: 0px;\n}\n.zs_visible_range_label_left{\n\tleft: 0px;\n}\n.zs_visible_range_label_right{\n\tright: 0px;\n}\n.zs_chosen_range_label{\n\tposition: absolute;\n}\n\n"
  },
  {
    "path": "libs/ZoomableSlider/ZoomableSlider.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n\t<title>Document</title>\n\t<link rel=\"stylesheet\" type=\"text/css\" href=\"ZoomableSlider.css\">\n</head>\n<body>\n\n\t<div id=\"target\" style=\"position: absolute; left: 10px; top: 10px; width: 300px;\">\n\n\t</div>\n\n\t<script src=\"ZoomableSlider.js\"></script>\n\t\n\n\t<script>\n\t\t\n\t\tlet el = document.getElementById(\"target\");\n\t\tlet slider = new ZoomableSlider();\n\n\t\tel.appendChild(slider.element);\n\t\tslider.update();\n\n\t</script>\n\n\n</body>\n</html>"
  },
  {
    "path": "libs/ZoomableSlider/ZoomableSlider.js",
    "content": "\nclass ZoomableSlider{\n\tconstructor(){\n\t\tthis.visibleRange = [0, 10];\n\t\tthis.chosenRange = [2, 7];\n\t\tthis.step = 0.01;\n\t\tthis.clipDragToVisible = true;\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.innerHTML = `\n\t\t\t<div name=\"zoomable_slider_widget\" class=\"zs_widget\">\n\t\t\t\t<div name=\"core\" class=\"zs_core\">\n\t\t\t\t\t<span name=\"outside\" class=\"zs_outside\">&nbsp;</span>\n\t\t\t\t\t<span name=\"inside\" class=\"zs_inside\">&nbsp;</span>\n\t\t\t\t\t<span name=\"left\" class=\"zs_handle\">&nbsp;</span>\n\t\t\t\t\t<span name=\"right\" class=\"zs_handle\">&nbsp;</span>\n\t\t\t\t<span name=\"label_visible_left\" class=\"zs_visible_range_label zs_visible_range_label_left\"></span>\n\t\t\t\t<span name=\"label_visible_right\" class=\"zs_visible_range_label zs_visible_range_label_right\"></span>\n\t\t\t\t<span name=\"label_chosen_left\" class=\"zs_chosen_range_label zs_chosen_range_label_left\"></span>\n\t\t\t\t<span name=\"label_chosen_right\" class=\"zs_chosen_range_label zs_chosen_range_label_right\"></span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`;\n\t\tthis.elCore = this.element.querySelector('[name=core]');\n\t\tthis.elLeft = this.element.querySelector('[name=left]');\n\t\tthis.elRight = this.element.querySelector('[name=right]');\n\t\tthis.elInside = this.element.querySelector('[name=inside]');\n\t\tthis.elOutside = this.element.querySelector('[name=outside]');\n\t\tthis.elLabelVisibleLeft = this.element.querySelector('[name=label_visible_left]');\n\t\tthis.elLabelVisibleRight = this.element.querySelector('[name=label_visible_right]');\n\t\tthis.elLabelChosenLeft = this.element.querySelector('[name=label_chosen_left]');\n\t\tthis.elLabelChosenRight = this.element.querySelector('[name=label_chosen_right]');\n\t\tthis.elRight.style.left = \"100px\";\n\t\tlet dragStart = null;\n\t\tlet onMouseDown = (e) => {\n\t\t\te.preventDefault();\n\t\t\tlet value = (e.target === this.elLeft) ? \n\t\t\t\tthis.chosenRange[0] : \n\t\t\t\tthis.chosenRange[1];\n\t\t\tdragStart = {\n\t\t\t\tx: e.clientX,\n\t\t\t\ty: e.clientY,\n\t\t\t\thandle: e.target,\n\t\t\t\tvalue: value,\n\t\t\t};\n\t\t\tdocument.onmouseup = onMouseUp;\n\t\t\tdocument.onmousemove = onMouseMove;\n\t\t};\n\t\tlet onMouseUp = (e) => {\n\t\t\tdocument.onmouseup = null;\n\t\t\tdocument.onmousemove = null;\n\t\t};\n\t\tlet onMouseMove = (e) => {\n\t\t\tlet dx = e.clientX - dragStart.x;\n\t\t\tlet dy = e.clientY - dragStart.y;\n\t\t\tlet normalizedDelta = dx / this.elCore.clientWidth;\n\t\t\tlet valueDelta = (this.visibleRange[1] - this.visibleRange[0]) * normalizedDelta;\n\t\t\tlet newValue = dragStart.value + valueDelta;\n\t\t\tnewValue = Math.round(newValue / this.step) * this.step;\n\t\t\t\n\t\t\tlet newRange;\n\t\t\tif(dragStart.handle === this.elLeft){\n\t\t\t\t newRange = [newValue, this.chosenRange[1]];\n\t\t\t}else{\n\t\t\t\tnewRange = [this.chosenRange[0], newValue];\n\t\t\t}\n\t\t\tif(this.clipDragToVisible){\n\t\t\t\tnewRange[0] = Math.max(newRange[0], this.visibleRange[0]);\n\t\t\t\tnewRange[1] = Math.min(newRange[1], this.visibleRange[1]);\n\t\t\t}\n\t\t\tthis.setRange(newRange);\n\t\t};\n\t\tfor(let handle of [this.elLeft, this.elRight]){\n\t\t\thandle.onmousedown = onMouseDown;\n\t\t}\n\t\tlet onWheel = (e) => {\n\t\t\te.preventDefault();\n\t\t\t\n\t\t\tlet delta = Math.sign(e.deltaY);\n\t\t\t\n\t\t\tlet zoom = 1;\n\t\t\tif(delta < 0){\n\t\t\t\tzoom = 0.8;\n\t\t\t}else if(delta > 0){\n\t\t\t\tzoom = 1.2;\n\t\t\t}\n\t\t\tlet oldRangeWidth = this.visibleRange[1] - this.visibleRange[0];\n\t\t\tlet rect = this.elCore.getBoundingClientRect();\n\t\t\tlet pivotPixels = e.clientX - rect.left;\n\t\t\tlet pivotNormalized = (pivotPixels / this.elCore.clientWidth);\n\t\t\tlet pivot = (oldRangeWidth * pivotNormalized) + this.visibleRange[0];\n\t\t\tlet leftRatio = (pivot - this.visibleRange[0]) / oldRangeWidth;\n\t\t\tlet rightRatio = (this.visibleRange[1] - pivot) / oldRangeWidth;\n\t\t\tlet newRangeWidth = oldRangeWidth * zoom;\n\t\t\tlet newVisibleRange = [\n\t\t\t\tpivot - (newRangeWidth * leftRatio),\n\t\t\t\tpivot + (newRangeWidth * rightRatio),\n\t\t\t\t];\n\t\t\tthis.setVisibleRange(newVisibleRange);\n\t\t};\n\t\tthis.elCore.onmousewheel = onWheel;\n\t\tthis.update();\n\t}\n\tsetRange(range){\n\t\tthis.chosenRange = range;\n\t\tthis.update();\n\t}\n\tsetVisibleRange(range){\n\t\tthis.visibleRange = range;\n\t\tthis.update();\n\t}\n\tupdate(){\n\t\tlet {elLeft, elRight, visibleRange, chosenRange} = this;\n\t\tlet pixelWidth = this.elCore.clientWidth;\n\t\tlet normalizedLeft = (chosenRange[0] - visibleRange[0]) / (visibleRange[1] - visibleRange[0]);\n\t\tlet normalizedRight = (chosenRange[1] - visibleRange[0]) / (visibleRange[1] - visibleRange[0]);\n\t\tlet pixelLeft = Math.round(normalizedLeft * pixelWidth) - elLeft.clientWidth;\n\t\tlet pixelRight = Math.round(normalizedRight * pixelWidth) - elRight.clientWidth;\n\t\t\n\t\telLeft.style.left = `${pixelLeft}px`;\n\t\telRight.style.left = `${pixelRight}px`;\n\t\tlet precision = Math.ceil(Math.log(1 / this.step) / Math.log(10));\n\t\tthis.elLabelVisibleLeft.style.left = \"0px\";\n\t\tthis.elLabelVisibleLeft.innerHTML = `${visibleRange[0].toFixed(precision)}`;\n\t\tthis.elLabelVisibleRight.style.right = \"0px\";\n\t\tthis.elLabelVisibleRight.innerHTML = `${visibleRange[1].toFixed(precision)}`;\n\t\tthis.elLabelChosenLeft.style.left = `${pixelLeft}px`;\n\t\tthis.elLabelChosenLeft.innerHTML = `${chosenRange[0].toFixed(precision)}`;\n\t\tthis.elLabelChosenRight.style.left = `${pixelRight}px`;\n\t\tthis.elLabelChosenRight.innerHTML = `${chosenRange[1].toFixed(precision)}`;\n\t}\n\t\n};\n\t"
  },
  {
    "path": "libs/brotli/BUILD",
    "content": "package(\n    default_visibility = [\"//visibility:public\"],\n)\n\nlicenses([\"notice\"])  # MIT\n\nload(\"@io_bazel_rules_closure//closure:defs.bzl\", \"closure_js_library\")\n\n# Not a real polyfill. Do NOT use for anything, but tests.\nclosure_js_library(\n    name = \"polyfill\",\n    srcs = [\"polyfill.js\"],\n    suppress = [\n        \"JSC_INVALID_OPERAND_TYPE\",\n        \"JSC_MISSING_JSDOC\",\n        \"JSC_STRICT_INEXISTENT_PROPERTY\",\n        \"JSC_TYPE_MISMATCH\",\n        \"JSC_UNKNOWN_EXPR_TYPE\",\n    ],\n)\n\n# Do NOT use this artifact; it is for test purposes only.\nclosure_js_library(\n    name = \"decode\",\n    srcs = [\"decode.js\"],\n    suppress = [\n        \"JSC_DUP_VAR_DECLARATION\",\n        \"JSC_USELESS_BLOCK\",\n    ],\n    deps = [\":polyfill\"],\n)\n\nload(\"@io_bazel_rules_closure//closure:defs.bzl\", \"closure_js_test\")\n\nclosure_js_test(\n    name = \"all_tests\",\n    srcs = [\"decode_test.js\"],\n    deps = [\n        \":decode\",\n        \":polyfill\",\n        \"@io_bazel_rules_closure//closure/library:testing\",\n    ],\n)\n"
  },
  {
    "path": "libs/brotli/LICENSE",
    "content": "Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "libs/brotli/WORKSPACE",
    "content": "workspace(name = \"org_brotli_js\")\n\nload(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\")\n\ngit_repository(\n    name = \"io_bazel_rules_closure\",\n    commit = \"29ec97e7c85d607ba9e41cab3993fbb13f812c4b\",\n    remote = \"https://github.com/bazelbuild/rules_closure.git\",\n)\n\nload(\"@io_bazel_rules_closure//closure:defs.bzl\", \"closure_repositories\")\nclosure_repositories()\n"
  },
  {
    "path": "libs/brotli/decode.js",
    "content": "/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/** @return {function(!Int8Array):!Int8Array} */\nfunction BrotliDecodeClosure() {\n  \"use strict\";\n\n  /** @type {!Int8Array} */\n  var DICTIONARY_DATA = new Int8Array(0);\n\n  /**\n   * @constructor\n   * @param {!Int8Array} bytes\n   * @struct\n   */\n  function InputStream(bytes) {\n    /** @type {!Int8Array} */\n    this.data = bytes;\n    /** @type {!number} */\n    this.offset = 0;\n  }\n  var MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\n  var CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n  var DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\n  var DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\n  var FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\n  var DICTIONARY_OFFSETS_BY_LENGTH = Int32Array.from([0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, 122016]);\n  var DICTIONARY_SIZE_BITS_BY_LENGTH = Int32Array.from([0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5]);\n  var BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\n  var BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\n  var INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\n  var COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\n  var CMD_LOOKUP = new Int16Array(2816);\n  {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n  /**\n   * @param {number} i\n   * @return {number}\n   */\n  function log2floor(i) {\n    var /** number */ result = -1;\n    var /** number */ step = 16;\n    while (step > 0) {\n      if ((i >>> step) != 0) {\n        result += step;\n        i = i >>> step;\n      }\n      step = step >> 1;\n    }\n    return result + i;\n  }\n  /**\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @param {number} maxndistbits\n   * @return {number}\n   */\n  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {\n    return 16 + ndirect + 2 * (maxndistbits << npostfix);\n  }\n  /**\n   * @param {number} maxDistance\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @return {number}\n   */\n  function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      throw \"maxDistance is too small\";\n    }\n    var /** number */ offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    var /** number */ ndistbits = log2floor(offset) - 1;\n    var /** number */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n  }\n  /**\n   * @param {!Int16Array} cmdLookup\n   * @return {void}\n   */\n  function unpackCommandLookupTable(cmdLookup) {\n    var /** !Int16Array */ insertLengthOffsets = new Int16Array(24);\n    var /** !Int16Array */ copyLengthOffsets = new Int16Array(24);\n    copyLengthOffsets[0] = 2;\n    for (var /** number */ i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]));\n      copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]));\n    }\n    for (var /** number */ cmdCode = 0; cmdCode < 704; ++cmdCode) {\n      var /** number */ rangeIdx = cmdCode >>> 6;\n      var /** number */ distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      var /** number */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7);\n      var /** number */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      var /** number */ copyLengthOffset = copyLengthOffsets[copyCode];\n      var /** number */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2);\n      var /** number */ index = cmdCode * 4;\n      cmdLookup[index + 0] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8));\n      cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = distanceContext;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeWindowBits(s) {\n    var /** number */ largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) == 0) {\n      return 16;\n    }\n    var /** number */ n = readFewBits(s, 3);\n    if (n != 0) {\n      return 17 + n;\n    }\n    n = readFewBits(s, 3);\n    if (n != 0) {\n      if (n == 1) {\n        if (largeWindowEnabled == 0) {\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        if (readFewBits(s, 1) == 1) {\n          return -1;\n        }\n        n = readFewBits(s, 6);\n        if (n < 10 || n > 30) {\n          return -1;\n        }\n        return n;\n      } else {\n        return 8 + n;\n      }\n    }\n    return 17;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableEagerOutput(s) {\n    if (s.runningState != 1) {\n      throw \"State MUST be freshly initialized\";\n    }\n    s.isEager = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function enableLargeWindow(s) {\n    if (s.runningState != 1) {\n      throw \"State MUST be freshly initialized\";\n    }\n    s.isLargeWindow = 1;\n  }\n  /**\n   * @param {!State} s\n   * @param {!InputStream} input\n   * @return {void}\n   */\n  function initState(s, input) {\n    if (s.runningState != 0) {\n      throw \"State MUST be uninitialized\";\n    }\n    s.blockTrees = new Int32Array(3091);\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    var /** number */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 15 << 3);\n    s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n    s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n    s.input = input;\n    initBitReader(s);\n    s.runningState = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function close(s) {\n    if (s.runningState == 0) {\n      throw \"State MUST be initialized\";\n    }\n    if (s.runningState == 11) {\n      return;\n    }\n    s.runningState = 11;\n    if (s.input != null) {\n      closeInput(s.input);\n      s.input = null;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeVarLenUnsignedByte(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) != 0) {\n      var /** number */ n = readFewBits(s, 3);\n      if (n == 0) {\n        return 1;\n      } else {\n        return readFewBits(s, n) + (1 << n);\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeMetaBlockLength(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.inputEnd = readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd != 0) && readFewBits(s, 1) != 0) {\n      return;\n    }\n    var /** number */ sizeNibbles = readFewBits(s, 2) + 4;\n    if (sizeNibbles == 7) {\n      s.isMetadata = 1;\n      if (readFewBits(s, 1) != 0) {\n        throw \"Corrupted reserved bit\";\n      }\n      var /** number */ sizeBytes = readFewBits(s, 2);\n      if (sizeBytes == 0) {\n        return;\n      }\n      for (var /** number */ i = 0; i < sizeBytes; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        var /** number */ bits = readFewBits(s, 8);\n        if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) {\n          throw \"Exuberant nibble\";\n        }\n        s.metaBlockLength |= bits << (i * 8);\n      }\n    } else {\n      for (var /** number */ i = 0; i < sizeNibbles; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        var /** number */ bits = readFewBits(s, 4);\n        if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) {\n          throw \"Exuberant nibble\";\n        }\n        s.metaBlockLength |= bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd == 0) {\n      s.isUncompressed = readFewBits(s, 1);\n    }\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSymbol(tableGroup, tableIdx, s) {\n    var /** number */ offset = tableGroup[tableIdx];\n    var /** number */ val = (s.accumulator32 >>> s.bitOffset);\n    offset += val & 0xFF;\n    var /** number */ bits = tableGroup[offset] >> 16;\n    var /** number */ sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= 8) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    var /** number */ mask = (1 << bits) - 1;\n    offset += (val & mask) >>> 8;\n    s.bitOffset += ((tableGroup[offset] >> 16) + 8);\n    return tableGroup[offset] & 0xFFFF;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readBlockLength(tableGroup, tableIdx, s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    var /** number */ code = readSymbol(tableGroup, tableIdx, s);\n    var /** number */ n = BLOCK_LENGTH_N_BITS[code];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n  }\n  /**\n   * @param {!Int32Array} v\n   * @param {number} index\n   * @return {void}\n   */\n  function moveToFront(v, index) {\n    var /** number */ value = v[index];\n    for (; index > 0; index--) {\n      v[index] = v[index - 1];\n    }\n    v[0] = value;\n  }\n  /**\n   * @param {!Int8Array} v\n   * @param {number} vLen\n   * @return {void}\n   */\n  function inverseMoveToFrontTransform(v, vLen) {\n    var /** !Int32Array */ mtf = new Int32Array(256);\n    for (var /** number */ i = 0; i < 256; i++) {\n      mtf[i] = i;\n    }\n    for (var /** number */ i = 0; i < vLen; i++) {\n      var /** number */ index = v[i] & 0xFF;\n      v[i] = mtf[index];\n      if (index != 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n  /**\n   * @param {!Int32Array} codeLengthCodeLengths\n   * @param {number} numSymbols\n   * @param {!Int32Array} codeLengths\n   * @param {!State} s\n   * @return {void}\n   */\n  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {\n    var /** number */ symbol = 0;\n    var /** number */ prevCodeLen = 8;\n    var /** number */ repeat = 0;\n    var /** number */ repeatCodeLen = 0;\n    var /** number */ space = 32768;\n    var /** !Int32Array */ table = new Int32Array(32 + 1);\n    var /** number */ tableIdx = table.length - 1;\n    buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 31;\n      s.bitOffset += table[p] >> 16;\n      var /** number */ codeLen = table[p] & 0xFFFF;\n      if (codeLen < 16) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen != 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        var /** number */ extraBits = codeLen - 14;\n        var /** number */ newLen = 0;\n        if (codeLen == 16) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen != newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        var /** number */ oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat <<= extraBits;\n        }\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        repeat += readFewBits(s, extraBits) + 3;\n        var /** number */ repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          throw \"symbol + repeatDelta > numSymbols\";\n        }\n        for (var /** number */ i = 0; i < repeatDelta; i++) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen != 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space != 0) {\n      throw \"Unused space\";\n    }\n    codeLengths.fill(0, symbol, numSymbols);\n  }\n  /**\n   * @param {!Int32Array} symbols\n   * @param {number} length\n   * @return {void}\n   */\n  function checkDupes(symbols, length) {\n    for (var /** number */ i = 0; i < length - 1; ++i) {\n      for (var /** number */ j = i + 1; j < length; ++j) {\n        if (symbols[i] == symbols[j]) {\n          throw \"Duplicate simple Huffman code symbol\";\n        }\n      }\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit);\n    var /** !Int32Array */ symbols = new Int32Array(4);\n    var /** number */ maxBits = 1 + log2floor(alphabetSizeMax - 1);\n    var /** number */ numSymbols = readFewBits(s, 2) + 1;\n    for (var /** number */ i = 0; i < numSymbols; i++) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      var /** number */ symbol = readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        throw \"Can't readHuffmanCode\";\n      }\n      symbols[i] = symbol;\n    }\n    checkDupes(symbols, numSymbols);\n    var /** number */ histogramId = numSymbols;\n    if (numSymbols == 4) {\n      histogramId += readFewBits(s, 1);\n    }\n    switch(histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n      case 4:\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n      case 5:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n      default:\n        break;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} skip\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {\n    var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit);\n    var /** !Int32Array */ codeLengthCodeLengths = new Int32Array(18);\n    var /** number */ space = 32;\n    var /** number */ numCodes = 0;\n    for (var /** number */ i = skip; i < 18 && space > 0; i++) {\n      var /** number */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 15;\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      var /** number */ v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v != 0) {\n        space -= (32 >> v);\n        numCodes++;\n      }\n    }\n    if (space != 0 && numCodes != 1) {\n      throw \"Corrupted Huffman code histogram\";\n    }\n    readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    var /** number */ simpleCodeOrSkip = readFewBits(s, 2);\n    if (simpleCodeOrSkip == 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    } else {\n      return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n    }\n  }\n  /**\n   * @param {number} contextMapSize\n   * @param {!Int8Array} contextMap\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeContextMap(contextMapSize, contextMap, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    var /** number */ numTrees = decodeVarLenUnsignedByte(s) + 1;\n    if (numTrees == 1) {\n      contextMap.fill(0, 0, contextMapSize);\n      return numTrees;\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    var /** number */ useRleForZeros = readFewBits(s, 1);\n    var /** number */ maxRunLengthPrefix = 0;\n    if (useRleForZeros != 0) {\n      maxRunLengthPrefix = readFewBits(s, 4) + 1;\n    }\n    var /** number */ alphabetSize = numTrees + maxRunLengthPrefix;\n    var /** number */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    var /** !Int32Array */ table = new Int32Array(tableSize + 1);\n    var /** number */ tableIdx = table.length - 1;\n    readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    for (var /** number */ i = 0; i < contextMapSize; ) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      var /** number */ code = readSymbol(table, tableIdx, s);\n      if (code == 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        var /** number */ reps = (1 << code) + readFewBits(s, code);\n        while (reps != 0) {\n          if (i >= contextMapSize) {\n            throw \"Corrupted context map\";\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = (code - maxRunLengthPrefix);\n        i++;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) == 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {\n    var /** !Int32Array */ ringBuffers = s.rings;\n    var /** number */ offset = 4 + treeType * 2;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    var /** number */ blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    var /** number */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n    if (blockType == 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType == 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeLiteralBlockSwitch(s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    var /** number */ literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << 6;\n    s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n    var /** number */ contextMode = s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeCommandBlockSwitch(s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeDistanceBlockSwitch(s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function maybeReallocateRingBuffer(s) {\n    var /** number */ newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      var /** number */ minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize >>= 1;\n      }\n      if ((s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    var /** number */ ringBufferSizeWithSlack = newSize + 37;\n    var /** !Int8Array */ newBuffer = new Int8Array(ringBufferSizeWithSlack);\n    if (s.ringBuffer.length != 0) {\n      newBuffer.set(s.ringBuffer.subarray(0, 0 + s.ringBufferSize), 0);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readNextMetablockHeader(s) {\n    if (s.inputEnd != 0) {\n      s.nextRunningState = 10;\n      s.runningState = 12;\n      return;\n    }\n    s.literalTreeGroup = new Int32Array(0);\n    s.commandTreeGroup = new Int32Array(0);\n    s.distanceTreeGroup = new Int32Array(0);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    decodeMetaBlockLength(s);\n    if ((s.metaBlockLength == 0) && (s.isMetadata == 0)) {\n      return;\n    }\n    if ((s.isUncompressed != 0) || (s.isMetadata != 0)) {\n      jumpToByteBoundary(s);\n      s.runningState = (s.isMetadata != 0) ? 5 : 6;\n    } else {\n      s.runningState = 3;\n    }\n    if (s.isMetadata != 0) {\n      return;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function readMetablockPartition(s, treeType, numBlockTypes) {\n    var /** number */ offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n    var /** number */ blockTypeAlphabetSize = numBlockTypes + 2;\n    offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    s.blockTrees[2 * treeType + 1] = offset;\n    var /** number */ blockLengthAlphabetSize = 26;\n    offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    s.blockTrees[2 * treeType + 2] = offset;\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} alphabetSizeLimit\n   * @return {void}\n   */\n  function calculateDistanceLut(s, alphabetSizeLimit) {\n    var /** !Int8Array */ distExtraBits = s.distExtraBits;\n    var /** !Int32Array */ distOffset = s.distOffset;\n    var /** number */ npostfix = s.distancePostfixBits;\n    var /** number */ ndirect = s.numDirectDistanceCodes;\n    var /** number */ postfix = 1 << npostfix;\n    var /** number */ bits = 1;\n    var /** number */ half = 0;\n    var /** number */ i = 16;\n    for (var /** number */ j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n    while (i < alphabetSizeLimit) {\n      var /** number */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      for (var /** number */ j = 0; j < postfix; ++j) {\n        distExtraBits[i] = bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readMetablockHuffmanCodesAndContextMaps(s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.distancePostfixBits = readFewBits(s, 2);\n    s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n    s.distancePostfixMask = (1 << s.distancePostfixBits) - 1;\n    s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n    for (var /** number */ i = 0; i < s.numLiteralBlockTypes; ) {\n      var /** number */ limit = min(i + 96, s.numLiteralBlockTypes);\n      for (; i < limit; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        s.contextModes[i] = readFewBits(s, 2);\n      }\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n    }\n    s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6);\n    var /** number */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s);\n    s.trivialLiteralContext = 1;\n    for (var /** number */ j = 0; j < s.numLiteralBlockTypes << 6; j++) {\n      if (s.contextMap[j] != j >> 6) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n    s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n    var /** number */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n    s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s);\n    s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s);\n    var /** number */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n    var /** number */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow == 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n      distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n    }\n    s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s);\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function copyUncompressedData(s) {\n    var /** !Int8Array */ ringBuffer = s.ringBuffer;\n    if (s.metaBlockLength <= 0) {\n      reload(s);\n      s.runningState = 2;\n      return;\n    }\n    var /** number */ chunkLength = min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    copyBytes(s, ringBuffer, s.pos, chunkLength);\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos == s.ringBufferSize) {\n      s.nextRunningState = 6;\n      s.runningState = 12;\n      return;\n    }\n    reload(s);\n    s.runningState = 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function writeRingBuffer(s) {\n    var /** number */ toWrite = min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    if (toWrite != 0) {\n      s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n    if (s.outputUsed < s.outputLength) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @param {!State} s\n   * @return {!Int32Array}\n   */\n  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) {\n    var /** number */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    var /** !Int32Array */ group = new Int32Array(n + n * maxTableSize);\n    var /** number */ next = n;\n    for (var /** number */ i = 0; i < n; ++i) {\n      group[i] = next;\n      next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n    }\n    return group;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function calculateFence(s) {\n    var /** number */ result = s.ringBufferSize;\n    if (s.isEager != 0) {\n      result = min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decompress(s) {\n    if (s.runningState == 0) {\n      throw \"Can't decompress until initialized\";\n    }\n    if (s.runningState == 11) {\n      throw \"Can't decompress after close\";\n    }\n    if (s.runningState == 1) {\n      var /** number */ windowBits = decodeWindowBits(s);\n      if (windowBits == -1) {\n        throw \"Invalid 'windowBits' code\";\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = 2;\n    }\n    var /** number */ fence = calculateFence(s);\n    var /** number */ ringBufferMask = s.ringBufferSize - 1;\n    var /** !Int8Array */ ringBuffer = s.ringBuffer;\n    while (s.runningState != 10) {\n      switch(s.runningState) {\n        case 2:\n          if (s.metaBlockLength < 0) {\n            throw \"Invalid metablock length\";\n          }\n          readNextMetablockHeader(s);\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n        case 3:\n          readMetablockHuffmanCodesAndContextMaps(s);\n          s.runningState = 4;\n        case 4:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 2;\n            continue;\n          }\n          if (s.halfOffset > 2030) {\n            doReadMoreInput(s);\n          }\n          if (s.commandBlockLength == 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          var /** number */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          var /** number */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];\n          var /** number */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1];\n          var /** number */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          var /** number */ extraBits = insertAndCopyExtraBits & 0xFF;\n          s.insertLength = insertLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits));\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          var /** number */ extraBits = insertAndCopyExtraBits >> 8;\n          s.copyLength = copyLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits));\n          s.j = 0;\n          s.runningState = 7;\n        case 7:\n          if (s.trivialLiteralContext != 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength == 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          } else {\n            var /** number */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            var /** number */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength == 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              var /** number */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n              var /** number */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState != 7) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 4;\n            continue;\n          }\n          var /** number */ distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.distanceBlockLength == 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            var /** number */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < 16) {\n              var /** number */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                throw \"Negative distance\";\n              }\n            } else {\n              var /** number */ extraBits = s.distExtraBits[distanceCode];\n              var /** number */ bits;\n              if (s.bitOffset + extraBits <= 32) {\n                bits = readFewBits(s, extraBits);\n              } else {\n                if (s.bitOffset >= 16) {\n                  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                  s.bitOffset -= 16;\n                }\n                bits = ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits));\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n          if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.distance > s.maxDistance) {\n            s.runningState = 9;\n            continue;\n          }\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n          if (s.copyLength > s.metaBlockLength) {\n            throw \"Invalid backward reference\";\n          }\n          s.j = 0;\n          s.runningState = 8;\n        case 8:\n          var /** number */ src = (s.pos - s.distance) & ringBufferMask;\n          var /** number */ dst = s.pos;\n          var /** number */ copyLength = s.copyLength - s.j;\n          var /** number */ srcEnd = src + copyLength;\n          var /** number */ dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              for (var /** number */ k = 0; k < copyLength; k += 4) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              ringBuffer.copyWithin(dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            for (; s.j < s.copyLength; ) {\n              ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 8;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState == 8) {\n            s.runningState = 4;\n          }\n          continue;\n        case 9:\n          if (s.distance > 0x7FFFFFFC) {\n            throw \"Invalid backward reference\";\n          }\n          if (s.copyLength >= 4 && s.copyLength <= 24) {\n            var /** number */ offset = DICTIONARY_OFFSETS_BY_LENGTH[s.copyLength];\n            var /** number */ wordId = s.distance - s.maxDistance - 1;\n            var /** number */ shift = DICTIONARY_SIZE_BITS_BY_LENGTH[s.copyLength];\n            var /** number */ mask = (1 << shift) - 1;\n            var /** number */ wordIdx = wordId & mask;\n            var /** number */ transformIdx = wordId >>> shift;\n            offset += wordIdx * s.copyLength;\n            if (transformIdx < 121) {\n              var /** number */ len = transformDictionaryWord(ringBuffer, s.pos, DICTIONARY_DATA, offset, s.copyLength, RFC_TRANSFORMS, transformIdx);\n              s.pos += len;\n              s.metaBlockLength -= len;\n              if (s.pos >= fence) {\n                s.nextRunningState = 4;\n                s.runningState = 12;\n                continue;\n              }\n            } else {\n              throw \"Invalid backward reference\";\n            }\n          } else {\n            throw \"Invalid backward reference\";\n          }\n          s.runningState = 4;\n          continue;\n        case 5:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = 2;\n          continue;\n        case 6:\n          copyUncompressedData(s);\n          continue;\n        case 12:\n          s.ringBufferBytesReady = min(s.pos, s.ringBufferSize);\n          s.runningState = 13;\n        case 13:\n          if (writeRingBuffer(s) == 0) {\n            return;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n            }\n            s.pos &= ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n        default:\n          throw \"Unexpected state \" + s.runningState;\n      }\n    }\n    if (s.runningState == 10) {\n      if (s.metaBlockLength < 0) {\n        throw \"Invalid metablock length\";\n      }\n      jumpToByteBoundary(s);\n      checkHealth(s, 1);\n    }\n  }\n\n  /**\n   * @constructor\n   * @param {number} numTransforms\n   * @param {number} prefixSuffixLen\n   * @param {number} prefixSuffixCount\n   * @struct\n   */\n  function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {\n    /** @type {!number} */\n    this.numTransforms = 0;\n    /** @type {!Int32Array} */\n    this.triplets = new Int32Array(0);\n    /** @type {!Int8Array} */\n    this.prefixSuffixStorage = new Int8Array(0);\n    /** @type {!Int32Array} */\n    this.prefixSuffixHeads = new Int32Array(0);\n    /** @type {!Int16Array} */\n    this.params = new Int16Array(0);\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n\n  var RFC_TRANSFORMS = new Transforms(121, 167, 50);\n  /**\n   * @param {!Int8Array} prefixSuffix\n   * @param {!Int32Array} prefixSuffixHeads\n   * @param {!Int32Array} transforms\n   * @param {!string} prefixSuffixSrc\n   * @param {!string} transformsSrc\n   * @return {void}\n   */\n  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {\n    var /** number */ n = prefixSuffixSrc.length;\n    var /** number */ index = 1;\n    var /** number */ j = 0;\n    for (var /** number */ i = 0; i < n; ++i) {\n      var /** number */ c = prefixSuffixSrc.charCodeAt(i);\n      if (c == 35) {\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = c;\n      }\n    }\n    for (var /** number */ i = 0; i < 363; ++i) {\n      transforms[i] = transformsSrc.charCodeAt(i) - 32;\n    }\n  }\n  {\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\u00C2\\u00A0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n  }\n  /**\n   * @param {!Int8Array} dst\n   * @param {number} dstOffset\n   * @param {!Int8Array} src\n   * @param {number} srcOffset\n   * @param {number} len\n   * @param {!Transforms} transforms\n   * @param {number} transformIndex\n   * @return {number}\n   */\n  function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) {\n    var /** number */ offset = dstOffset;\n    var /** !Int32Array */ triplets = transforms.triplets;\n    var /** !Int8Array */ prefixSuffixStorage = transforms.prefixSuffixStorage;\n    var /** !Int32Array */ prefixSuffixHeads = transforms.prefixSuffixHeads;\n    var /** number */ transformOffset = 3 * transformIndex;\n    var /** number */ prefixIdx = triplets[transformOffset];\n    var /** number */ transformType = triplets[transformOffset + 1];\n    var /** number */ suffixIdx = triplets[transformOffset + 2];\n    var /** number */ prefix = prefixSuffixHeads[prefixIdx];\n    var /** number */ prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    var /** number */ suffix = prefixSuffixHeads[suffixIdx];\n    var /** number */ suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n    var /** number */ omitFirst = transformType - 11;\n    var /** number */ omitLast = transformType - 0;\n    if (omitFirst < 1 || omitFirst > 9) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > 9) {\n      omitLast = 0;\n    }\n    while (prefix != prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    srcOffset += omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    var /** number */ i = len;\n    while (i > 0) {\n      dst[offset++] = src[srcOffset++];\n      i--;\n    }\n    if (transformType == 10 || transformType == 11) {\n      var /** number */ uppercaseOffset = offset - len;\n      if (transformType == 10) {\n        len = 1;\n      }\n      while (len > 0) {\n        var /** number */ c0 = dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) {\n            dst[uppercaseOffset] ^= 32;\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] ^= 32;\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] ^= 5;\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType == 21 || transformType == 22) {\n      var /** number */ shiftOffset = offset - len;\n      var /** number */ param = transforms.params[transformIndex];\n      var /** number */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        var /** number */ step = 1;\n        var /** number */ c0 = dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          scalar += c0;\n          dst[shiftOffset] = (scalar & 0x7F);\n        } else if (c0 < 0xC0) {\n        } else if (c0 < 0xE0) {\n          if (len >= 2) {\n            var /** number */ c1 = dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F));\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          if (len >= 3) {\n            var /** number */ c1 = dst[shiftOffset + 1];\n            var /** number */ c2 = dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F));\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          if (len >= 4) {\n            var /** number */ c1 = dst[shiftOffset + 1];\n            var /** number */ c2 = dst[shiftOffset + 2];\n            var /** number */ c3 = dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F));\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType == 21) {\n          len = 0;\n        }\n      }\n    }\n    while (suffix != suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n    return offset - dstOffset;\n  }\n\n  /**\n   * @param {number} key\n   * @param {number} len\n   * @return {number}\n   */\n  function getNextKey(key, len) {\n    var /** number */ step = 1 << (len - 1);\n    while ((key & step) != 0) {\n      step >>= 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n  /**\n   * @param {!Int32Array} table\n   * @param {number} offset\n   * @param {number} step\n   * @param {number} end\n   * @param {number} item\n   * @return {void}\n   */\n  function replicateValue(table, offset, step, end, item) {\n    do {\n      end -= step;\n      table[offset + end] = item;\n    } while (end > 0);\n  }\n  /**\n   * @param {!Int32Array} count\n   * @param {number} len\n   * @param {number} rootBits\n   * @return {number}\n   */\n  function nextTableBitSize(count, len, rootBits) {\n    var /** number */ left = 1 << (len - rootBits);\n    while (len < 15) {\n      left -= count[len];\n      if (left <= 0) {\n        break;\n      }\n      len++;\n      left <<= 1;\n    }\n    return len - rootBits;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {number} rootBits\n   * @param {!Int32Array} codeLengths\n   * @param {number} codeLengthsSize\n   * @return {number}\n   */\n  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {\n    var /** number */ tableOffset = tableGroup[tableIdx];\n    var /** number */ key;\n    var /** !Int32Array */ sorted = new Int32Array(codeLengthsSize);\n    var /** !Int32Array */ count = new Int32Array(16);\n    var /** !Int32Array */ offset = new Int32Array(16);\n    var /** number */ symbol;\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      count[codeLengths[symbol]]++;\n    }\n    offset[1] = 0;\n    for (var /** number */ len = 1; len < 15; len++) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      if (codeLengths[symbol] != 0) {\n        sorted[offset[codeLengths[symbol]]++] = symbol;\n      }\n    }\n    var /** number */ tableBits = rootBits;\n    var /** number */ tableSize = 1 << tableBits;\n    var /** number */ totalSize = tableSize;\n    if (offset[15] == 1) {\n      for (key = 0; key < totalSize; key++) {\n        tableGroup[tableOffset + key] = sorted[0];\n      }\n      return totalSize;\n    }\n    key = 0;\n    symbol = 0;\n    for (var /** number */ len = 1, step = 2; len <= rootBits; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    var /** number */ mask = totalSize - 1;\n    var /** number */ low = -1;\n    var /** number */ currentOffset = tableOffset;\n    for (var /** number */ len = rootBits + 1, step = 2; len <= 15; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        if ((key & mask) != low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    return totalSize;\n  }\n\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function doReadMoreInput(s) {\n    if (s.endOfStreamReached != 0) {\n      if (halfAvailable(s) >= -2) {\n        return;\n      }\n      throw \"No more input\";\n    }\n    var /** number */ readOffset = s.halfOffset << 1;\n    var /** number */ bytesInBuffer = 4096 - readOffset;\n    s.byteBuffer.copyWithin(0, readOffset, 4096);\n    s.halfOffset = 0;\n    while (bytesInBuffer < 4096) {\n      var /** number */ spaceLeft = 4096 - bytesInBuffer;\n      var /** number */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} endOfStream\n   * @return {void}\n   */\n  function checkHealth(s, endOfStream) {\n    if (s.endOfStreamReached == 0) {\n      return;\n    }\n    var /** number */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n    if (byteOffset > s.tailBytes) {\n      throw \"Read after end\";\n    }\n    if ((endOfStream != 0) && (byteOffset != s.tailBytes)) {\n      throw \"Unused bytes after end\";\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function assertAccumulatorHealthy(s) {\n    if (s.bitOffset > 32) {\n      throw \"Accumulator underloaded: \" + s.bitOffset;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readFewBits(s, n) {\n    var /** number */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return val;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readManyBits(s, n) {\n    var /** number */ low = readFewBits(s, 16);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initBitReader(s) {\n    s.byteBuffer = new Int8Array(4160);\n    s.accumulator32 = 0;\n    s.shortBuffer = new Int16Array(2080);\n    s.bitOffset = 32;\n    s.halfOffset = 2048;\n    s.endOfStreamReached = 0;\n    prepare(s);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function prepare(s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    checkHealth(s, 0);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function reload(s) {\n    if (s.bitOffset == 32) {\n      prepare(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function jumpToByteBoundary(s) {\n    var /** number */ padding = (32 - s.bitOffset) & 7;\n    if (padding != 0) {\n      var /** number */ paddingBits = readFewBits(s, padding);\n      if (paddingBits != 0) {\n        throw \"Corrupted padding bits\";\n      }\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function halfAvailable(s) {\n    var /** number */ limit = 2048;\n    if (s.endOfStreamReached != 0) {\n      limit = (s.tailBytes + 1) >> 1;\n    }\n    return limit - s.halfOffset;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @param {number} offset\n   * @param {number} length\n   * @return {void}\n   */\n  function copyBytes(s, data, offset, length) {\n    if ((s.bitOffset & 7) != 0) {\n      throw \"Unaligned copyBytes\";\n    }\n    while ((s.bitOffset != 32) && (length != 0)) {\n      data[offset++] = (s.accumulator32 >>> s.bitOffset);\n      s.bitOffset += 8;\n      length--;\n    }\n    if (length == 0) {\n      return;\n    }\n    var /** number */ copyNibbles = min(halfAvailable(s), length >> 1);\n    if (copyNibbles > 0) {\n      var /** number */ readOffset = s.halfOffset << 1;\n      var /** number */ delta = copyNibbles << 1;\n      data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset);\n      offset += delta;\n      length -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (length == 0) {\n      return;\n    }\n    if (halfAvailable(s) > 0) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      while (length != 0) {\n        data[offset++] = (s.accumulator32 >>> s.bitOffset);\n        s.bitOffset += 8;\n        length--;\n      }\n      checkHealth(s, 0);\n      return;\n    }\n    while (length > 0) {\n      var /** number */ len = readInput(s.input, data, offset, length);\n      if (len == -1) {\n        throw \"Unexpected end of input\";\n      }\n      offset += len;\n      length -= len;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} byteLen\n   * @return {void}\n   */\n  function bytesToNibbles(s, byteLen) {\n    var /** !Int8Array */ byteBuffer = s.byteBuffer;\n    var /** number */ halfLen = byteLen >> 1;\n    var /** !Int16Array */ shortBuffer = s.shortBuffer;\n    for (var /** number */ i = 0; i < halfLen; ++i) {\n      shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8));\n    }\n  }\n\n  var LOOKUP = new Int32Array(2048);\n  /**\n   * @param {!Int32Array} lookup\n   * @param {!string} map\n   * @param {!string} rle\n   * @return {void}\n   */\n  function unpackLookupTable(lookup, map, rle) {\n    for (var /** number */ i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    for (var /** number */ i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32);\n    }\n    for (var /** number */ i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    var /** number */ offset = 1280;\n    for (var /** number */ k = 0; k < 19; ++k) {\n      var /** number */ value = k & 3;\n      var /** number */ rep = rle.charCodeAt(k) - 32;\n      for (var /** number */ i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    for (var /** number */ i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (var /** number */ i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n  {\n    unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\u0081 @\");\n  }\n\n  /**\n   * @constructor\n   * @struct\n   */\n  function State() {\n    /** @type {!Int8Array} */\n    this.ringBuffer = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextModes = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distContextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distExtraBits = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.output = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.byteBuffer = new Int8Array(0);\n    /** @type {!Int16Array} */\n    this.shortBuffer = new Int16Array(0);\n    /** @type {!Int32Array} */\n    this.intBuffer = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.rings = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.blockTrees = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.literalTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.commandTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distanceTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distOffset = new Int32Array(0);\n    /** @type {!number} */\n    this.runningState = 0;\n    /** @type {!number} */\n    this.nextRunningState = 0;\n    /** @type {!number} */\n    this.accumulator32 = 0;\n    /** @type {!number} */\n    this.bitOffset = 0;\n    /** @type {!number} */\n    this.halfOffset = 0;\n    /** @type {!number} */\n    this.tailBytes = 0;\n    /** @type {!number} */\n    this.endOfStreamReached = 0;\n    /** @type {!number} */\n    this.metaBlockLength = 0;\n    /** @type {!number} */\n    this.inputEnd = 0;\n    /** @type {!number} */\n    this.isUncompressed = 0;\n    /** @type {!number} */\n    this.isMetadata = 0;\n    /** @type {!number} */\n    this.literalBlockLength = 0;\n    /** @type {!number} */\n    this.numLiteralBlockTypes = 0;\n    /** @type {!number} */\n    this.commandBlockLength = 0;\n    /** @type {!number} */\n    this.numCommandBlockTypes = 0;\n    /** @type {!number} */\n    this.distanceBlockLength = 0;\n    /** @type {!number} */\n    this.numDistanceBlockTypes = 0;\n    /** @type {!number} */\n    this.pos = 0;\n    /** @type {!number} */\n    this.maxDistance = 0;\n    /** @type {!number} */\n    this.distRbIdx = 0;\n    /** @type {!number} */\n    this.trivialLiteralContext = 0;\n    /** @type {!number} */\n    this.literalTreeIdx = 0;\n    /** @type {!number} */\n    this.commandTreeIdx = 0;\n    /** @type {!number} */\n    this.j = 0;\n    /** @type {!number} */\n    this.insertLength = 0;\n    /** @type {!number} */\n    this.contextMapSlice = 0;\n    /** @type {!number} */\n    this.distContextMapSlice = 0;\n    /** @type {!number} */\n    this.contextLookupOffset1 = 0;\n    /** @type {!number} */\n    this.contextLookupOffset2 = 0;\n    /** @type {!number} */\n    this.distanceCode = 0;\n    /** @type {!number} */\n    this.numDirectDistanceCodes = 0;\n    /** @type {!number} */\n    this.distancePostfixMask = 0;\n    /** @type {!number} */\n    this.distancePostfixBits = 0;\n    /** @type {!number} */\n    this.distance = 0;\n    /** @type {!number} */\n    this.copyLength = 0;\n    /** @type {!number} */\n    this.maxBackwardDistance = 0;\n    /** @type {!number} */\n    this.maxRingBufferSize = 0;\n    /** @type {!number} */\n    this.ringBufferSize = 0;\n    /** @type {!number} */\n    this.expectedTotalSize = 0;\n    /** @type {!number} */\n    this.outputOffset = 0;\n    /** @type {!number} */\n    this.outputLength = 0;\n    /** @type {!number} */\n    this.outputUsed = 0;\n    /** @type {!number} */\n    this.ringBufferBytesWritten = 0;\n    /** @type {!number} */\n    this.ringBufferBytesReady = 0;\n    /** @type {!number} */\n    this.isEager = 0;\n    /** @type {!number} */\n    this.isLargeWindow = 0;\n    /** @type {!InputStream|null} */\n    this.input = null;\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n\n  /**\n   * @param {!Int8Array} dictionary\n   * @param {!string} data0\n   * @param {!string} data1\n   * @param {!string} skipFlip\n   * @return {void}\n   */\n  function unpackDictionaryData(dictionary, data0, data1, skipFlip) {\n    var /** !Int8Array */ dict = toUsAsciiBytes(data0 + data1);\n    if (dict.length != dictionary.length) {\n      throw \"Corrupted brotli dictionary\";\n    }\n    var /** number */ offset = 0;\n    var /** number */ n = skipFlip.length;\n    for (var /** number */ i = 0; i < n; i += 2) {\n      var /** number */ skip = skipFlip.charCodeAt(i) - 36;\n      var /** number */ flip = skipFlip.charCodeAt(i + 1) - 36;\n      offset += skip;\n      for (var /** number */ j = 0; j < flip; ++j) {\n        dict[offset] |= 0x80;\n        offset++;\n      }\n    }\n    dictionary.set(dict);\n  }\n  {\n    var /** !Int8Array */ dictionary = new Int8Array(122784);\n    unpackDictionaryData(dictionary, \"timedownlifeleftbackcodedatashowonlysitecityopenjustlikefreeworktextyearoverbodyloveformbookplaylivelinehelphomesidemorewordlongthemviewfindpagedaysfullheadtermeachareafromtruemarkableuponhighdatelandnewsevennextcasebothpostusedmadehandherewhatnameLinkblogsizebaseheldmakemainuser') +holdendswithNewsreadweresigntakehavegameseencallpathwellplusmenufilmpartjointhislistgoodneedwayswestjobsmindalsologorichuseslastteamarmyfoodkingwilleastwardbestfirePageknowaway.pngmovethanloadgiveselfnotemuchfeedmanyrockicononcelookhidediedHomerulehostajaxinfoclublawslesshalfsomesuchzone100%onescareTimeracebluefourweekfacehopegavehardlostwhenparkkeptpassshiproomHTMLplanTypedonesavekeepflaglinksoldfivetookratetownjumpthusdarkcardfilefearstaykillthatfallautoever.comtalkshopvotedeepmoderestturnbornbandfellroseurl(skinrolecomeactsagesmeetgold.jpgitemvaryfeltthensenddropViewcopy1.0\\\"</a>stopelseliestourpack.gifpastcss?graymean&gt;rideshotlatesaidroadvar feeljohnrickportfast'UA-dead</b>poorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$('#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml\\\"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid=\\\"sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnear<!--growJSONdutyNamesaleyou lotspainjazzcoldeyesfishwww.risktabsprev10pxrise25pxBlueding300,ballfordearnwildbox.fairlackverspairjunetechif(!pickevil$(\\\"#warmlorddoespull,000ideadrawhugespotfundburnhrefcellkeystickhourlossfuel12pxsuitdealRSS\\\"agedgreyGET\\\"easeaimsgirlaids8px;navygridtips#999warsladycars); }php?helltallwhomzh:e*/\\r\\n 100hall.\\n\\nA7px;pushchat0px;crew*/</hash75pxflatrare && tellcampontolaidmissskiptentfinemalegetsplot400,\\r\\n\\r\\ncoolfeet.php<br>ericmostguidbelldeschairmathatom/img&#82luckcent000;tinygonehtmlselldrugFREEnodenick?id=losenullvastwindRSS wearrelybeensamedukenasacapewishgulfT23:hitsslotgatekickblurthey15px''););\\\">msiewinsbirdsortbetaseekT18:ordstreemall60pxfarmb\\u0000\\u0019sboys[0].');\\\"POSTbearkids);}}marytend(UK)quadzh:f-siz----prop');\\rliftT19:viceandydebt>RSSpoolneckblowT16:doorevalT17:letsfailoralpollnovacolsgene b\\u0000\\u0014softrometillross<h3>pourfadepink<tr>mini)|!(minezh:hbarshear00);milk -->ironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees<h2>json', 'contT21: RSSloopasiamoon</p>soulLINEfortcartT14:<h1>80px!--<9px;T04:mike:46ZniceinchYorkricezh:d'));puremageparatonebond:37Z_of_']);000,zh:gtankyardbowlbush:56ZJava30px\\n|}\\n%C3%:34ZjeffEXPIcashvisagolfsnowzh:iquer.csssickmeatmin.binddellhirepicsrent:36ZHTTP-201fotowolfEND xbox:54ZBODYdick;\\n}\\nexit:35Zvarsbeat'});diet999;anne}}</[i].LangkmB2wiretoysaddssealalex;\\n\\t}echonine.org005)tonyjewssandlegsroof000) 200winegeardogsbootgarycutstyletemption.xmlcockgang$('.50pxPh.Dmiscalanloandeskmileryanunixdisc);}\\ndustclip).\\n\\n70px-200DVDs7]><tapedemoi++)wageeurophiloptsholeFAQsasin-26TlabspetsURL bulkcook;}\\r\\nHEAD[0])abbrjuan(198leshtwin</i>sonyguysfuckpipe|-\\n!002)ndow[1];[];\\nLog salt\\r\\n\\t\\tbangtrimbath){\\r\\n00px\\n});ko:lfeesad>\\rs:// [];tollplug(){\\n{\\r\\n .js'200pdualboat.JPG);\\n}quot);\\n\\n');\\n\\r\\n}\\r201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037201320122011201020092008200720062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195010001024139400009999comomC!sesteestaperotodohacecadaaC1obiendC-aasC-vidacasootroforosolootracualdijosidograntipotemadebealgoquC)estonadatrespococasabajotodasinoaguapuesunosantediceluisellamayozonaamorpisoobraclicellodioshoracasiP7P0P=P0P>P<Q\\u0000P0Q\\u0000Q\\u0003Q\\u0002P0P=P5P?P>P>Q\\u0002P8P7P=P>P4P>Q\\u0002P>P6P5P>P=P8Q\\u0005P\\u001DP0P5P5P1Q\\u000BP<Q\\u000BP\\u0012Q\\u000BQ\\u0001P>P2Q\\u000BP2P>P\\u001DP>P>P1P\\u001FP>P;P8P=P8P P$P\\u001DP5P\\u001CQ\\u000BQ\\u0002Q\\u000BP\\u001EP=P8P<P4P0P\\u0017P0P\\u0014P0P\\u001DQ\\u0003P\\u001EP1Q\\u0002P5P\\u0018P7P5P9P=Q\\u0003P<P<P\\\"Q\\u000BQ\\u0003P6Y\\u0001Y\\nX#Y\\u0006Y\\u0005X'Y\\u0005X9Y\\u0003Y\\u0004X#Y\\u0008X1X/Y\\nX'Y\\u0001Y\\tY\\u0007Y\\u0008Y\\u0004Y\\u0005Y\\u0004Y\\u0003X'Y\\u0008Y\\u0004Y\\u0007X(X3X'Y\\u0004X%Y\\u0006Y\\u0007Y\\nX#Y\\nY\\u0002X/Y\\u0007Y\\u0004X+Y\\u0005X(Y\\u0007Y\\u0004Y\\u0008Y\\u0004Y\\nX(Y\\u0004X'Y\\nX(Y\\u0003X4Y\\nX'Y\\u0005X#Y\\u0005Y\\u0006X*X(Y\\nY\\u0004Y\\u0006X-X(Y\\u0007Y\\u0005Y\\u0005X4Y\\u0008X4firstvideolightworldmediawhitecloseblackrightsmallbooksplacemusicfieldorderpointvalueleveltableboardhousegroupworksyearsstatetodaywaterstartstyledeathpowerphonenighterrorinputabouttermstitletoolseventlocaltimeslargewordsgamesshortspacefocusclearmodelblockguideradiosharewomenagainmoneyimagenamesyounglineslatercolorgreenfront&amp;watchforcepricerulesbeginaftervisitissueareasbelowindextotalhourslabelprintpressbuiltlinksspeedstudytradefoundsenseundershownformsrangeaddedstillmovedtakenaboveflashfixedoftenotherviewschecklegalriveritemsquickshapehumanexistgoingmoviethirdbasicpeacestagewidthloginideaswrotepagesusersdrivestorebreaksouthvoicesitesmonthwherebuildwhichearthforumthreesportpartyClicklowerlivesclasslayerentrystoryusagesoundcourtyour birthpopuptypesapplyImagebeinguppernoteseveryshowsmeansextramatchtrackknownearlybegansuperpapernorthlearngivennamedendedTermspartsGroupbrandusingwomanfalsereadyaudiotakeswhile.com/livedcasesdailychildgreatjudgethoseunitsneverbroadcoastcoverapplefilescyclesceneplansclickwritequeenpieceemailframeolderphotolimitcachecivilscaleenterthemetheretouchboundroyalaskedwholesincestock namefaithheartemptyofferscopeownedmightalbumthinkbloodarraymajortrustcanonunioncountvalidstoneStyleLoginhappyoccurleft:freshquitefilmsgradeneedsurbanfightbasishoverauto;route.htmlmixedfinalYour slidetopicbrownalonedrawnsplitreachRightdatesmarchquotegoodsLinksdoubtasyncthumballowchiefyouthnovel10px;serveuntilhandsCheckSpacequeryjamesequaltwice0,000Startpanelsongsroundeightshiftworthpostsleadsweeksavoidthesemilesplanesmartalphaplantmarksratesplaysclaimsalestextsstarswrong</h3>thing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //-->adminegyptEvent15px;Emailtrue\\\"crossspentblogsbox\\\">notedleavechinasizesguest</h4>robotheavytrue,sevengrandcrimesignsawaredancephase><!--en_US&#39;200px_namelatinenjoyajax.ationsmithU.S. holdspeterindianav\\\">chainscorecomesdoingpriorShare1990sromanlistsjapanfallstrialowneragree</h2>abusealertopera\\\"-//WcardshillsteamsPhototruthclean.php?saintmetallouismeantproofbriefrow\\\">genretrucklooksValueFrame.net/-->\\n<try {\\nvar makescostsplainadultquesttrainlaborhelpscausemagicmotortheir250pxleaststepsCountcouldglasssidesfundshotelawardmouthmovesparisgivesdutchtexasfruitnull,||[];top\\\">\\n<!--POST\\\"ocean<br/>floorspeakdepth sizebankscatchchart20px;aligndealswould50px;url=\\\"parksmouseMost ...</amongbrainbody none;basedcarrydraftreferpage_home.meterdelaydreamprovejoint</tr>drugs<!-- aprilidealallenexactforthcodeslogicView seemsblankports (200saved_linkgoalsgrantgreekhomesringsrated30px;whoseparse();\\\" Blocklinuxjonespixel');\\\">);if(-leftdavidhorseFocusraiseboxesTrackement</em>bar\\\">.src=toweralt=\\\"cablehenry24px;setupitalysharpminortastewantsthis.resetwheelgirls/css/100%;clubsstuffbiblevotes 1000korea});\\r\\nbandsqueue= {};80px;cking{\\r\\n\\t\\taheadclockirishlike ratiostatsForm\\\"yahoo)[0];Aboutfinds</h1>debugtasksURL =cells})();12px;primetellsturns0x600.jpg\\\"spainbeachtaxesmicroangel--></giftssteve-linkbody.});\\n\\tmount (199FAQ</rogerfrankClass28px;feeds<h1><scotttests22px;drink) || lewisshall#039; for lovedwaste00px;ja:c\\u0002simon<fontreplymeetsuntercheaptightBrand) != dressclipsroomsonkeymobilmain.Name platefunnytreescom/\\\"1.jpgwmodeparamSTARTleft idden, 201);\\n}\\nform.viruschairtransworstPagesitionpatch<!--\\no-cacfirmstours,000 asiani++){adobe')[0]id=10both;menu .2.mi.png\\\"kevincoachChildbruce2.jpgURL)+.jpg|suitesliceharry120\\\" sweettr>\\r\\nname=diegopage swiss-->\\n\\n#fff;\\\">Log.com\\\"treatsheet) && 14px;sleepntentfiledja:c\\u0003id=\\\"cName\\\"worseshots-box-delta\\n&lt;bears:48Z<data-rural</a> spendbakershops= \\\"\\\";php\\\">ction13px;brianhellosize=o=%2F joinmaybe<img img\\\">, fjsimg\\\" \\\")[0]MTopBType\\\"newlyDanskczechtrailknows</h5>faq\\\">zh-cn10);\\n-1\\\");type=bluestrulydavis.js';>\\r\\n<!steel you h2>\\r\\nform jesus100% menu.\\r\\n\\t\\r\\nwalesrisksumentddingb-likteachgif\\\" vegasdanskeestishqipsuomisobredesdeentretodospuedeaC1osestC!tienehastaotrospartedondenuevohacerformamismomejormundoaquC-dC-assC3loayudafechatodastantomenosdatosotrassitiomuchoahoralugarmayorestoshorastenerantesfotosestaspaC-snuevasaludforosmedioquienmesespoderchileserC!vecesdecirjosC)estarventagrupohechoellostengoamigocosasnivelgentemismaairesjuliotemashaciafavorjuniolibrepuntobuenoautorabrilbuenatextomarzosaberlistaluegocC3moenerojuegoperC:haberestoynuncamujervalorfueralibrogustaigualvotoscasosguC-apuedosomosavisousteddebennochebuscafaltaeurosseriedichocursoclavecasasleC3nplazolargoobrasvistaapoyojuntotratavistocrearcampohemoscincocargopisosordenhacenC!readiscopedrocercapuedapapelmenorC:tilclarojorgecalleponertardenadiemarcasigueellassiglocochemotosmadreclaserestoniC1oquedapasarbancohijosviajepabloC)stevienereinodejarfondocanalnorteletracausatomarmanoslunesautosvillavendopesartipostengamarcollevapadreunidovamoszonasambosbandamariaabusomuchasubirriojavivirgradochicaallC-jovendichaestantalessalirsuelopesosfinesllamabuscoC)stalleganegroplazahumorpagarjuntadobleislasbolsabaC1ohablaluchaC\\u0001readicenjugarnotasvalleallC!cargadolorabajoestC)gustomentemariofirmacostofichaplatahogarartesleyesaquelmuseobasespocosmitadcielochicomiedoganarsantoetapadebesplayaredessietecortecoreadudasdeseoviejodeseaaguas&quot;domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo\\\">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother\\\" id=\\\"marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo\\\" bottomlist\\\">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed&nbsp;courseAbout island<html cookiename=\\\"amazonmodernadvicein</a>: The dialoghousesBEGIN MexicostartscentreheightaddingIslandassetsEmpireSchooleffortdirectnearlymanualSelect.\\n\\nOnejoinedmenu\\\">PhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunited</b></beginsplantsassistartistissued300px|canadaagencyschemeremainBrazilsamplelogo\\\">beyond-scaleacceptservedmarineFootercamera</h1>\\n_form\\\"leavesstress\\\" />\\r\\n.gif\\\" onloadloaderOxfordsistersurvivlistenfemaleDesignsize=\\\"appealtext\\\">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople<br />wonderpricesturned|| {};main\\\">inlinesundaywrap\\\">failedcensusminutebeaconquotes150px|estateremoteemail\\\"linkedright;signalformal1.htmlsignupprincefloat:.png\\\" forum.AccesspaperssoundsextendHeightsliderUTF-8\\\"&amp; Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome\\\">headerensurebranchpiecesblock;statedtop\\\"><racingresize--&gt;pacitysexualbureau.jpg\\\" 10,000obtaintitlesamount, Inc.comedymenu\\\" lyricstoday.indeedcounty_logo.FamilylookedMarketlse ifPlayerturkey);var forestgivingerrorsDomain}else{insertBlog</footerlogin.fasteragents<body 10px 0pragmafridayjuniordollarplacedcoversplugin5,000 page\\\">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline\\\">body\\\">\\n* TheThoughseeingjerseyNews</verifyexpertinjurywidth=CookieSTART across_imagethreadnativepocketbox\\\">\\nSystem DavidcancertablesprovedApril reallydriveritem\\\">more\\\">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php\\\" assumelayerswilsonstoresreliefswedenCustomeasily your String\\n\\nWhiltaylorclear:resortfrenchthough\\\") + \\\"<body>buyingbrandsMembername\\\">oppingsector5px;\\\">vspacepostermajor coffeemartinmaturehappen</nav>kansaslink\\\">Images=falsewhile hspace0&amp; \\n\\nIn  powerPolski-colorjordanBottomStart -count2.htmlnews\\\">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml\\\"  rights.html-blockregExp:hoverwithinvirginphones</tr>\\rusing \\n\\tvar >');\\n\\t</td>\\n</tr>\\nbahasabrasilgalegomagyarpolskisrpskiX1X/Y\\u0008d8-f\\u0016\\u0007g.\\u0000d=\\u0013g9\\u0001i+\\u0014d?!f\\u0001/d8-e\\u001B=f\\u0008\\u0011d;,d8\\u0000d8*e\\u0005,e\\u000F8g.!g\\u0010\\u0006h.:e\\u001D\\u001Be\\u000F/d;%f\\u001C\\re\\n!f\\u00176i\\u00174d8*d::d:'e\\u0013\\u0001h\\u0007*e71d<\\u0001d8\\u001Af\\u001F%g\\u001C\\u000Be7%d=\\u001Ch\\u0001\\u0014g3;f2!f\\u001C\\tg=\\u0011g+\\u0019f\\t\\u0000f\\u001C\\th/\\u0004h.:d8-e?\\u0003f\\u0016\\u0007g+ g\\u0014(f\\u00087i&\\u0016i!5d=\\u001Ch\\u0000\\u0005f\\n\\u0000f\\u001C/i\\u0017.i\\\"\\u0018g\\u001B8e\\u00053d8\\u000Bh==f\\u0010\\u001Cg4\\\"d=?g\\u0014(h=/d;6e\\u001C(g:?d8;i\\\"\\u0018h5\\u0004f\\u0016\\u0019h'\\u0006i\\\"\\u0011e\\u001B\\u001Ee$\\rf3(e\\u0006\\u000Cg=\\u0011g;\\u001Cf\\u00146h\\u0017\\u000Fe\\u0006\\u0005e.9f\\u000E(h\\r\\u0010e8\\u0002e\\u001C:f6\\u0008f\\u0001/g):i\\u00174e\\u000F\\u0011e8\\u0003d;\\u0000d9\\u0008e%=e\\u000F\\u000Bg\\u0014\\u001Ff4;e\\u001B>g\\t\\u0007e\\u000F\\u0011e1\\u0015e&\\u0002f\\u001E\\u001Cf\\t\\u000Bf\\u001C:f\\u00160i\\u0017;f\\u001C\\u0000f\\u00160f\\u00169e<\\u000Fe\\u000C\\u0017d:,f\\u000F\\u0010d>\\u001Be\\u00053d:\\u000Ef\\u001B4e$\\u001Ah?\\u0019d8*g3;g;\\u001Fg\\u001F%i\\u0001\\u0013f88f\\u0008\\u000Fe9?e\\u0011\\ne\\u00056d;\\u0016e\\u000F\\u0011h!(e.\\te\\u0005(g,,d8\\u0000d<\\u001Ae\\u0011\\u0018h?\\u001Bh!\\u000Cg\\u00029e\\u0007;g\\t\\u0008f\\u001D\\u0003g\\u00145e-\\u0010d8\\u0016g\\u0015\\u000Ch.>h.!e\\u0005\\rh49f\\u0015\\u0019h\\u00022e\\n e\\u0005%f4;e\\n(d;\\u0016d;,e\\u0015\\u0006e\\u0013\\u0001e\\r\\u001Ae.\\\"g\\u000E0e\\u001C(d8\\nf57e&\\u0002d=\\u0015e72g;\\u000Fg\\u0015\\u0019h(\\u0000h/&g;\\u0006g$>e\\u000C:g\\u0019;e=\\u0015f\\u001C,g+\\u0019i\\u001C\\u0000h&\\u0001d;7f <f\\u0014/f\\u000C\\u0001e\\u001B=i\\u0019\\u0005i\\u0013>f\\u000E%e\\u001B=e.6e;:h.>f\\u001C\\u000Be\\u000F\\u000Bi\\u0018\\u0005h/;f3\\u0015e>\\u000Bd=\\rg=.g;\\u000Ff5\\u000Ei\\u0000\\tf\\u000B)h?\\u0019f 7e=\\u0013e\\t\\re\\u0008\\u0006g1;f\\u000E\\u0012h!\\u000Ce\\u001B d8:d:$f\\u0018\\u0013f\\u001C\\u0000e\\u0010\\u000Ei\\u001F3d9\\u0010d8\\rh\\u0003=i\\u0000\\u001Ah?\\u0007h!\\u000Cd8\\u001Ag'\\u0011f\\n\\u0000e\\u000F/h\\u0003=h.>e$\\u0007e\\u0010\\u0008d=\\u001Ce$'e.6g$>d<\\u001Ag \\u0014g)6d8\\u0013d8\\u001Ae\\u0005(i\\u0003(i!9g\\u001B.h?\\u0019i\\u0007\\u000Ch?\\u0018f\\u0018/e<\\u0000e'\\u000Bf\\u0003\\u0005e\\u00065g\\u00145h\\u0004\\u0011f\\u0016\\u0007d;6e\\u0013\\u0001g\\t\\u000Ce8.e\\n)f\\u0016\\u0007e\\u000C\\u0016h5\\u0004f:\\u0010e$'e-&e-&d9 e\\u001C0e\\u001D\\u0000f5\\u000Fh'\\u0008f\\n\\u0015h5\\u0004e7%g(\\u000Bh&\\u0001f1\\u0002f\\u0000\\u000Ed9\\u0008f\\u00176e\\u0000\\u0019e\\n\\u001Fh\\u0003=d8;h&\\u0001g\\u001B.e\\t\\rh5\\u0004h./e\\u001F\\u000Ee8\\u0002f\\u00169f3\\u0015g\\u00145e=1f\\u000B\\u001Bh\\u0001\\u0018e#0f\\u0018\\u000Ed;;d=\\u0015e\\u0001%e:7f\\u00150f\\r.g>\\u000Ee\\u001B=f1=h=&d;\\u000Bg;\\rd=\\u0006f\\u0018/d:$f5\\u0001g\\u0014\\u001Fd:'f\\t\\u0000d;%g\\u00145h/\\u001Df\\u0018>g$:d8\\u0000d:\\u001Be\\r\\u0015d=\\rd::e\\u0011\\u0018e\\u0008\\u0006f\\u001E\\u0010e\\u001C0e\\u001B>f\\u0017\\u0005f88e7%e\\u00057e-&g\\u0014\\u001Fg3;e\\u0008\\u0017g=\\u0011e\\u000F\\u000Be8\\u0016e-\\u0010e/\\u0006g \\u0001i\\\"\\u0011i\\u0001\\u0013f\\u000E'e\\u00086e\\u001C0e\\u000C:e\\u001F:f\\u001C,e\\u0005(e\\u001B=g=\\u0011d8\\ni\\u0007\\rh&\\u0001g,,d:\\u000Ce\\u0016\\u001Cf,\\\"h?\\u001Be\\u0005%e\\u000F\\u000Bf\\u0003\\u0005h?\\u0019d:\\u001Bh\\u0000\\u0003h/\\u0015e\\u000F\\u0011g\\u000E0e\\u001F9h.-d;%d8\\nf\\u0014?e:\\u001Cf\\u0008\\u0010d8:g\\u000E/e\\\"\\u0003i&\\u0019f8/e\\u0010\\u000Cf\\u00176e(1d9\\u0010e\\u000F\\u0011i\\u0000\\u0001d8\\u0000e.\\u001Ae<\\u0000e\\u000F\\u0011d=\\u001Ce\\u0013\\u0001f \\u0007e\\u0007\\u0006f,\\\"h?\\u000Eh'#e\\u00063e\\u001C0f\\u00169d8\\u0000d8\\u000Bd;%e\\u000F\\nh4#d;;f\\u0008\\u0016h\\u0000\\u0005e.\\\"f\\u00087d;#h!(g'/e\\u0008\\u0006e%3d::f\\u00150g \\u0001i\\u0014\\u0000e\\u0014.e\\u0007:g\\u000E0g&;g:?e:\\u0014g\\u0014(e\\u0008\\u0017h!(d8\\re\\u0010\\u000Cg<\\u0016h>\\u0011g;\\u001Fh.!f\\u001F%h/\\\"d8\\rh&\\u0001f\\u001C\\te\\u00053f\\u001C:f\\u001E\\u0004e>\\u0008e$\\u001Af\\u0012-f\\u0014>g;\\u0004g;\\u0007f\\u0014?g-\\u0016g\\u001B4f\\u000E%h\\u0003=e\\n\\u001Bf\\u001D%f:\\u0010f\\u0019\\u0002i\\u0016\\u0013g\\u001C\\u000Be\\u00080g\\u0003-i\\u0017(e\\u00053i\\u0014.d8\\u0013e\\u000C:i\\u001D\\u001Ee88h\\u000B1h/-g\\u0019>e:&e8\\u000Cf\\u001C\\u001Bg>\\u000Ee%3f/\\u0014h>\\u0003g\\u001F%h/\\u0006h'\\u0004e.\\u001Ae;:h..i\\u0003(i\\u0017(f\\u0004\\u000Fh'\\u0001g2>e=)f\\u0017%f\\u001C,f\\u000F\\u0010i+\\u0018e\\u000F\\u0011h(\\u0000f\\u00169i\\u001D\\\"e\\u001F:i\\u0007\\u0011e$\\u0004g\\u0010\\u0006f\\u001D\\u0003i\\u0019\\u0010e=1g\\t\\u0007i\\u00136h!\\u000Ch?\\u0018f\\u001C\\te\\u0008\\u0006d:+g\\t)e\\u0013\\u0001g;\\u000Fh\\u0010%f7;e\\n d8\\u0013e.6h?\\u0019g'\\rh/\\u001Di\\\"\\u0018h57f\\u001D%d8\\u001Ae\\n!e\\u0005,e\\u0011\\nh.0e=\\u0015g.\\u0000d;\\u000Bh4(i\\u0007\\u000Fg\\u00147d::e=1e\\u0013\\re<\\u0015g\\u0014(f\\n%e\\u0011\\ni\\u0003(e\\u0008\\u0006e?+i\\u0000\\u001Fe\\u0012(h/\\\"f\\u00176e0\\u001Af3(f\\u0004\\u000Fg\\u00143h/7e-&f !e:\\u0014h/%e\\u000E\\u0006e\\u000F2e\\u000F*f\\u0018/h?\\u0014e\\u001B\\u001Eh4-d90e\\u0010\\rg'0d8:d:\\u0006f\\u0008\\u0010e\\n\\u001Fh/4f\\u0018\\u000Ed>\\u001Be:\\u0014e-)e-\\u0010d8\\u0013i\\\"\\u0018g(\\u000Be:\\u000Fd8\\u0000h\\u0008,f\\u001C\\u0003e\\u0013!e\\u000F*f\\u001C\\te\\u00056e.\\u0003d?\\u001Df\\n$h\\u0000\\u000Cd8\\u0014d;\\ne$)g*\\u0017e\\u000F#e\\n(f\\u0000\\u0001g\\n6f\\u0000\\u0001g\\t9e\\u0008+h.$d8:e?\\u0005i!;f\\u001B4f\\u00160e0\\u000Fh/4f\\u0008\\u0011e\\u0000\\u0011d=\\u001Cd8:e*\\u0012d=\\u0013e\\u000C\\u0005f\\u000B,i\\u0002#d9\\u0008d8\\u0000f 7e\\u001B=e\\u0006\\u0005f\\u0018/e\\u0010&f 9f\\r.g\\u00145h'\\u0006e-&i\\u0019\\\"e\\u00057f\\u001C\\th?\\u0007g(\\u000Bg\\u00141d:\\u000Ed::f\\t\\re\\u0007:f\\u001D%d8\\rh?\\u0007f-#e\\u001C(f\\u0018\\u000Ef\\u0018\\u001Ff\\u0015\\u0005d:\\u000Be\\u00053g3;f \\u0007i\\\"\\u0018e\\u0015\\u0006e\\n!h>\\u0013e\\u0005%d8\\u0000g\\u001B4e\\u001F:g!\\u0000f\\u0015\\u0019e-&d:\\u0006h'#e;:g-\\u0011g;\\u0013f\\u001E\\u001Ce\\u0005(g\\u0010\\u0003i\\u0000\\u001Ag\\u001F%h.!e\\u0008\\u0012e/9d:\\u000Eh\\t:f\\u001C/g\\u001B8e\\u0006\\u000Ce\\u000F\\u0011g\\u0014\\u001Fg\\u001C\\u001Fg\\u001A\\u0004e;:g+\\u000Bg-\\tg:'g1;e\\u001E\\u000Bg;\\u000Fi*\\u000Ce.\\u001Eg\\u000E0e\\u00086d=\\u001Cf\\u001D%h\\u0007*f \\u0007g->d;%d8\\u000Be\\u000E\\u001Fe\\u0008\\u001Bf\\u0017 f3\\u0015e\\u00056d8-e\\u0000\\u000Bd::d8\\u0000e\\u0008\\u0007f\\u000C\\u0007e\\r\\u0017e\\u00053i\\u0017-i\\u001B\\u0006e\\u001B\\\"g,,d8\\te\\u00053f3(e\\u001B f-$g\\u0005'g\\t\\u0007f71e\\u001C3e\\u0015\\u0006d8\\u001Ae9?e7\\u001Ef\\u0017%f\\u001C\\u001Fi+\\u0018g:'f\\u001C\\u0000h?\\u0011g;<e\\u0010\\u0008h!(g$:d8\\u0013h>\\u0011h!\\u000Cd8:d:$i\\u0000\\u001Ah/\\u0004d;7h'\\te>\\u0017g2>e\\r\\u000Ee.6e:-e.\\u000Cf\\u0008\\u0010f\\u0004\\u001Fh'\\te.\\th#\\u0005e>\\u0017e\\u00080i\\u0002.d;6e\\u00086e:&i#\\u001Fe\\u0013\\u0001h\\u0019=g\\u00046h=,h==f\\n%d;7h.0h\\u0000\\u0005f\\u00169f!\\u0008h!\\u000Cf\\u0014?d::f0\\u0011g\\u0014(e\\u0013\\u0001d8\\u001Ch%?f\\u000F\\u0010e\\u0007:i\\u0005\\u0012e:\\u0017g\\u00046e\\u0010\\u000Ed;\\u0018f,>g\\u0003-g\\u00029d;%e\\t\\re.\\u000Ce\\u0005(e\\u000F\\u0011e8\\u0016h.>g=.i\\\"\\u0006e/<e7%d8\\u001Ae\\u000C;i\\u0019\\\"g\\u001C\\u000Bg\\u001C\\u000Bg;\\u000Fe\\u00058e\\u000E\\u001Fe\\u001B e93e\\u000F0e\\u0010\\u0004g'\\re\\\"\\u001Ee\\n f\\u001D\\u0010f\\u0016\\u0019f\\u00160e\\\"\\u001Ed9\\u000Be\\u0010\\u000Eh\\u0001\\u000Cd8\\u001Af\\u0015\\u0008f\\u001E\\u001Cd;\\ne94h.:f\\u0016\\u0007f\\u0008\\u0011e\\u001B=e\\u0011\\nh/\\tg\\t\\u0008d8;d?.f\\u00149e\\u000F\\u0002d8\\u000Ef\\t\\u0013e\\r0e?+d9\\u0010f\\u001C:f\\\"0h'\\u0002g\\u00029e-\\u0018e\\u001C(g2>g%\\u001Eh\\u000E7e>\\u0017e\\u0008)g\\u0014(g;'g;-d= d;,h?\\u0019d9\\u0008f(!e<\\u000Fh/-h(\\u0000h\\u0003=e$\\u001Fi\\u001B\\u0005h\\u0019\\u000Ef\\u0013\\rd=\\u001Ci#\\u000Ef <d8\\u0000h57g'\\u0011e-&d=\\u0013h\\u00022g\\u001F-d?!f\\u001D!d;6f2;g\\u0016\\u0017h?\\u0010e\\n(d:'d8\\u001Ad<\\u001Ah..e/<h\\u0008*e\\u0005\\u0008g\\u0014\\u001Fh\\u0001\\u0014g\\u001B\\u001Fe\\u000F/f\\u0018/e\\u0015\\u000Fi!\\u000Cg;\\u0013f\\u001E\\u0004d=\\u001Cg\\u0014(h0\\u0003f\\u001F%h3\\u0007f\\u0016\\u0019h\\u0007*e\\n(h4\\u001Fh4#e\\u0006\\u001Cd8\\u001Ah.?i\\u0017.e.\\u001Ef\\u0016=f\\u000E%e\\u000F\\u0017h.(h.:i\\u0002#d8*e\\u000F\\ri&\\u0008e\\n e<:e%3f\\u0000'h\\u000C\\u0003e\\u001B4f\\u001C\\re\\u000B\\u0019d<\\u0011i\\u00172d;\\nf\\u0017%e.\\\"f\\u001C\\rh'\\u0000g\\u001C\\u000Be\\u000F\\u0002e\\n g\\u001A\\u0004h/\\u001Dd8\\u0000g\\u00029d?\\u001Dh/\\u0001e\\u001B>d9&f\\u001C\\tf\\u0015\\u0008f5\\u000Bh/\\u0015g';e\\n(f\\t\\rh\\u0003=e\\u00063e.\\u001Ah\\u0002!g%(d8\\rf\\u0016-i\\u001C\\u0000f1\\u0002d8\\re>\\u0017e\\n\\u001Ef3\\u0015d9\\u000Bi\\u00174i\\u0007\\u0007g\\u0014(h\\u0010%i\\u0014\\u0000f\\n\\u0015h/\\tg\\u001B.f \\u0007g\\u00081f\\u0003\\u0005f\\u0011\\u0004e=1f\\u001C\\td:\\u001Bh$\\u0007h#=f\\u0016\\u0007e-&f\\u001C:d<\\u001Af\\u00150e-\\u0017h#\\u0005d?.h4-g\\t)e\\u0006\\u001Cf\\u001D\\u0011e\\u0005(i\\u001D\\\"g2>e\\u0013\\u0001e\\u00056e.\\u001Ed:\\u000Bf\\u0003\\u0005f04e93f\\u000F\\u0010g$:d8\\ne8\\u0002h0\\\"h0\\\"f\\u0019.i\\u0000\\u001Af\\u0015\\u0019e8\\u0008d8\\nd< g1;e\\u0008+f-\\u000Cf\\u001B2f\\u000B%f\\u001C\\te\\u0008\\u001Bf\\u00160i\\u0005\\rd;6e\\u000F*h&\\u0001f\\u00176d;#h3\\u0007h(\\nh>>e\\u00080d::g\\u0014\\u001Fh.\\\"i\\u0018\\u0005h\\u0000\\u0001e8\\u0008e1\\u0015g$:e?\\u0003g\\u0010\\u0006h44e-\\u0010g62g+\\u0019d8;i!\\u000Ch\\u0007*g\\u00046g:'e\\u0008+g.\\u0000e\\r\\u0015f\\u00149i\\u001D)i\\u0002#d:\\u001Bf\\u001D%h/4f\\t\\u0013e<\\u0000d;#g \\u0001e\\u0008 i\\u0019$h/\\u0001e\\u00088h\\n\\u0002g\\u001B.i\\u0007\\rg\\u00029f,!f\\u00158e$\\u001Ae0\\u0011h'\\u0004e\\u0008\\u0012h5\\u0004i\\u0007\\u0011f\\t>e\\u00080d;%e\\u0010\\u000Ee$'e\\u0005(d8;i!5f\\u001C\\u0000d=3e\\u001B\\u001Eg-\\u0014e$)d8\\u000Bd?\\u001Di\\u001A\\u001Cg\\u000E0d;#f#\\u0000f\\u001F%f\\n\\u0015g%(e0\\u000Ff\\u00176f2\\u0012f\\u001C\\tf-#e88g\\u0014\\u001Ah\\u00073d;#g\\u0010\\u0006g\\u001B.e=\\u0015e\\u0005,e<\\u0000e$\\re\\u00086i\\u0007\\u0011h\\u001E\\re98g&\\u000Fg\\t\\u0008f\\u001C,e=\\\"f\\u0008\\u0010e\\u0007\\u0006e$\\u0007h!\\u000Cf\\u0003\\u0005e\\u001B\\u001Ee\\u00080f\\u0000\\u001Df\\u00033f\\u0000\\u000Ef 7e\\r\\u000Fh..h.$h/\\u0001f\\u001C\\u0000e%=d:'g\\u0014\\u001Ff\\u000C\\tg\\u0005'f\\u001C\\rh#\\u0005e9?d8\\u001Ce\\n(f<+i\\u0007\\u0007h4-f\\u00160f\\t\\u000Bg;\\u0004e\\u001B>i\\u001D\\\"f\\u001D?e\\u000F\\u0002h\\u0000\\u0003f\\u0014?f2;e.9f\\u0018\\u0013e$)e\\u001C0e\\n*e\\n\\u001Bd::d;,e\\r\\u0007g:'i\\u0000\\u001Fe:&d::g\\t)h0\\u0003f\\u00154f5\\u0001h!\\u000Ci\\u0000 f\\u0008\\u0010f\\u0016\\u0007e-\\u0017i\\u001F)e\\u001B=h48f\\u0018\\u0013e<\\u0000e1\\u0015g\\u001B8i\\u0017\\u001Ch!(g\\u000E0e=1h'\\u0006e&\\u0002f-$g>\\u000Ee.9e$'e0\\u000Ff\\n%i\\u0001\\u0013f\\u001D!f,>e?\\u0003f\\u0003\\u0005h.8e$\\u001Af3\\u0015h'\\u0004e.6e1\\u0005d9&e:\\u0017h?\\u001Ef\\u000E%g+\\u000Be\\r3d8>f\\n%f\\n\\u0000e7'e%%h?\\u0010g\\u0019;e\\u0005%d;%f\\u001D%g\\u0010\\u0006h.:d:\\u000Bd;6h\\u0007*g\\u00141d8-e\\r\\u000Ee\\n\\u001Ee\\u0005,e&\\u0008e&\\u0008g\\u001C\\u001Ff-#d8\\ri\\u0014\\u0019e\\u0005(f\\u0016\\u0007e\\u0010\\u0008e\\u0010\\u000Cd;7e\\u0000<e\\u0008+d::g\\u001B\\u0011g\\u001D#e\\u00057d=\\u0013d8\\u0016g:*e\\u001B\\\"i\\u0018\\u001Fe\\u0008\\u001Bd8\\u001Af\\t?f\\u000B\\u0005e\\\"\\u001Ei\\u0015?f\\u001C\\td::d?\\u001Df\\u000C\\u0001e\\u0015\\u0006e.6g;4d?.e\\u000F0f9>e7&e\\u000F3h\\u0002!d;=g-\\u0014f!\\u0008e.\\u001Ei\\u0019\\u0005g\\u00145d?!g;\\u000Fg\\u0010\\u0006g\\u0014\\u001Fe\\u0011=e.#d< d;;e\\n!f-#e<\\u000Fg\\t9h\\t2d8\\u000Bf\\u001D%e\\r\\u000Fd<\\u001Ae\\u000F*h\\u0003=e=\\u0013g\\u00046i\\u0007\\rf\\u00160e\\u0005'e.9f\\u000C\\u0007e/<h?\\u0010h!\\u000Cf\\u0017%e?\\u0017h3#e.6h6\\u0005h?\\u0007e\\u001C\\u001Fe\\u001C0f5\\u0019f1\\u001Ff\\u0014/d;\\u0018f\\u000E(e\\u0007:g+\\u0019i\\u0015?f\\u001D-e7\\u001Ef\\t'h!\\u000Ce\\u00086i\\u0000 d9\\u000Bd8\\u0000f\\u000E(e9?g\\u000E0e\\u001C:f\\u000F\\u000Fh?0e\\u000F\\u0018e\\u000C\\u0016d< g;\\u001Ff-\\u000Cf\\t\\u000Bd?\\u001Di\\u0019)h/>g(\\u000Be\\u000C;g\\u0016\\u0017g;\\u000Fh?\\u0007h?\\u0007e\\u000E;d9\\u000Be\\t\\rf\\u00146e\\u0005%e94e:&f\\u001D\\u0002e?\\u0017g>\\u000Ed8=f\\u001C\\u0000i+\\u0018g\\u0019;i\\u0019\\u0006f\\u001C*f\\u001D%e\\n e7%e\\u0005\\rh4#f\\u0015\\u0019g(\\u000Bg\\t\\u0008e\\u001D\\u0017h:+d=\\u0013i\\u0007\\re:\\u0006e\\u0007:e\\u0014.f\\u0008\\u0010f\\u001C,e=\\\"e<\\u000Fe\\u001C\\u001Fh1\\u0006e\\u0007:e\\u00039d8\\u001Cf\\u00169i\\u0002.g.1e\\r\\u0017d:,f1\\u0002h\\u0001\\u000Ce\\u000F\\u0016e>\\u0017h\\u0001\\u000Cd=\\rg\\u001B8d?!i!5i\\u001D\\\"e\\u0008\\u0006i\\u0012\\u001Fg=\\u0011i!5g!.e.\\u001Ae\\u001B>d>\\u000Bg=\\u0011e\\u001D\\u0000g'/f\\u001E\\u0001i\\u0014\\u0019h//g\\u001B.g\\u001A\\u0004e.\\u001Dh4\\u001Df\\u001C:e\\u00053i#\\u000Ei\\u0019)f\\u000E\\u0008f\\u001D\\u0003g\\u0017\\u0005f/\\u0012e. g\\t)i\\u0019$d:\\u0006h)\\u0015h+\\u0016g\\u0016>g\\u0017\\u0005e\\u000F\\nf\\u00176f1\\u0002h4-g+\\u0019g\\u00029e\\u0004?g+%f/\\u000Fe$)d8-e$.h.$h/\\u0006f/\\u000Fd8*e$)f4%e-\\u0017d=\\u0013e\\u000F0g\\u0001#g;4f\\n$f\\u001C,i!5d8*f\\u0000'e.\\u0018f\\u00169e88h'\\u0001g\\u001B8f\\u001C:f\\u0008\\u0018g\\u0015%e:\\u0014e=\\u0013e>\\u000Be8\\u0008f\\u00169d>?f !e\\u001B-h\\u0002!e8\\u0002f\\u0008?e1\\u000Bf \\u000Fg\\u001B.e\\u0011\\u0018e7%e/<h\\u00074g*\\u0001g\\u00046i\\u0001\\u0013e\\u00057f\\u001C,g=\\u0011g;\\u0013e\\u0010\\u0008f!#f!\\u0008e\\n3e\\n(e\\u000F&e$\\u0016g>\\u000Ee\\u0005\\u0003e<\\u0015h57f\\u00149e\\u000F\\u0018g,,e\\u001B\\u001Bd<\\u001Ah.!h**f\\u0018\\u000Ei\\u001A\\u0010g'\\u0001e.\\u001De.\\u001Dh'\\u0004h\\u000C\\u0003f6\\u0008h49e\\u00051e\\u0010\\u000Ce?\\u0018h.0d=\\u0013g3;e8&f\\u001D%e\\u0010\\re-\\u0017g\\u0019<h!(e<\\u0000f\\u0014>e\\n g\\u001B\\u001Fe\\u000F\\u0017e\\u00080d:\\u000Cf\\t\\u000Be$'i\\u0007\\u000Ff\\u0008\\u0010d::f\\u00150i\\u0007\\u000Fe\\u00051d:+e\\u000C:e\\u001F\\u001Fe%3e-)e\\u000E\\u001Fe\\u0008\\u0019f\\t\\u0000e\\u001C(g;\\u0013f\\u001D\\u001Fi\\u0000\\u001Ad?!h6\\u0005g:'i\\u0005\\rg=.e=\\u0013f\\u00176d<\\u0018g'\\u0000f\\u0000'f\\u0004\\u001Ff\\u0008?d:'i\\u0001\\nf\\u00082e\\u0007:e\\u000F#f\\u000F\\u0010d:$e01d8\\u001Ad?\\u001De\\u0001%g(\\u000Be:&e\\u000F\\u0002f\\u00150d:\\u000Bd8\\u001Af\\u00154d8*e11d8\\u001Cf\\u0003\\u0005f\\u0004\\u001Fg\\t9f.\\ne\\u0008\\u0006i!\\u001Ef\\u0010\\u001Ce0\\u000Be1\\u001Ed:\\u000Ei\\u0017(f\\u00087h4\\\"e\\n!e#0i\\u001F3e\\u000F\\ne\\u00056h4\\\"g;\\u000Fe\\u001D\\u001Af\\u000C\\u0001e92i\\u0003(f\\u0008\\u0010g+\\u000Be\\u0008)g\\u001B\\nh\\u0000\\u0003h\\u0019\\u0011f\\u0008\\u0010i\\u0003=e\\u000C\\u0005h#\\u0005g\\u0014(f\\u00086f/\\u0014h5\\u001Bf\\u0016\\u0007f\\u0018\\u000Ef\\u000B\\u001Be\\u0015\\u0006e.\\u000Cf\\u00154g\\u001C\\u001Ff\\u0018/g\\u001C<g\\u001D\\u001Bd<\\u0019d<4e(\\u0001f\\u001C\\u001Bi\\\"\\u0006e\\u001F\\u001Fe\\r+g\\u0014\\u001Fd<\\u0018f\\u0003 h+\\u0016e#\\u0007e\\u0005,e\\u00051h\\t/e%=e\\u0005\\u0005e\\u0008\\u0006g,&e\\u0010\\u0008i\\u0019\\u0004d;6g\\t9g\\u00029d8\\re\\u000F/h\\u000B1f\\u0016\\u0007h5\\u0004d:'f 9f\\u001C,f\\u0018\\u000Ef\\u0018>e/\\u0006g\\\"<e\\u0005,d<\\u0017f0\\u0011f\\u0017\\u000Ff\\u001B4e\\n d:+e\\u000F\\u0017e\\u0010\\u000Ce-&e\\u0010/e\\n(i\\u0000\\u0002e\\u0010\\u0008e\\u000E\\u001Ff\\u001D%i\\u0017.g-\\u0014f\\u001C,f\\u0016\\u0007g>\\u000Ei#\\u001Fg;?h\\t2g(3e.\\u001Ag;\\u0008d:\\u000Eg\\u0014\\u001Fg\\t)d>\\u001Bf1\\u0002f\\u0010\\u001Cg\\u000B\\u0010e\\n\\u001Bi\\u0007\\u000Fd8%i\\u0007\\rf08h?\\u001Ce\\u0006\\u0019g\\u001C\\u001Ff\\u001C\\ti\\u0019\\u0010g+\\u001Ed:\\te/9h1!h49g\\u0014(d8\\re%=g;\\u001De/9e\\r\\u0001e\\u0008\\u0006d?\\u0003h?\\u001Bg\\u00029h/\\u0004e=1i\\u001F3d<\\u0018e\\n?d8\\re0\\u0011f,#h5\\u000Fe96d8\\u0014f\\u001C\\tg\\u00029f\\u00169e\\u0010\\u0011e\\u0005(f\\u00160d?!g\\u0014(h.>f\\u0016=e=\\\"h1!h5\\u0004f <g*\\u0001g 4i\\u001A\\u000Fg\\u001D\\u0000i\\u0007\\re$'d:\\u000Ef\\u0018/f/\\u0015d8\\u001Af\\u0019:h\\u0003=e\\u000C\\u0016e7%e.\\u000Cg>\\u000Ee\\u0015\\u0006e\\u001F\\u000Eg;\\u001Fd8\\u0000e\\u0007:g\\t\\u0008f\\t\\u0013i\\u0000 g\\u0014\\\"e\\u0013\\u0001f&\\u0002e\\u00065g\\u0014(d:\\u000Ed?\\u001Dg\\u0015\\u0019e\\u001B g4 d8-e\\u001C\\u000Be-\\u0018e\\u0002(h44e\\u001B>f\\u001C\\u0000f\\u0004\\u001Bi\\u0015?f\\u001C\\u001Fe\\u000F#d;7g\\u0010\\u0006h4\\\"e\\u001F:e\\u001C0e.\\tf\\u000E\\u0012f-&f1\\ti\\u0007\\u000Ci\\u001D\\\"e\\u0008\\u001Be;:e$)g):i&\\u0016e\\u0005\\u0008e.\\u000Ce\\u0016\\u0004i)1e\\n(d8\\u000Bi\\u001D\\\"d8\\re\\u0006\\rh/\\u001Ad?!f\\u0004\\u000Fd9\\ti\\u00183e\\u0005\\th\\u000B1e\\u001B=f<\\u0002d:.e\\u0006\\u001Bd:\\u000Bg\\u000E)e.6g>$d<\\u0017e\\u0006\\u001Cf0\\u0011e\\r3e\\u000F/e\\u0010\\rg(1e.6e\\u00057e\\n(g\\u0014;f\\u00033e\\u00080f3(f\\u0018\\u000Ee0\\u000Fe-&f\\u0000'h\\u0003=h\\u0000\\u0003g \\u0014g!,d;6h'\\u0002g\\u001C\\u000Bf8\\u0005f%\\u001Af\\u0010\\u001Eg,\\u0011i&\\u0016i \\u0001i;\\u0004i\\u0007\\u0011i\\u0000\\u0002g\\u0014(f1\\u001Fh\\u000B\\u000Fg\\u001C\\u001Fe.\\u001Ed8;g.!i\\u00186f.5h(;e\\u0006\\ng?;h/\\u0011f\\u001D\\u0003e\\u0008)e\\u0001\\u001Ae%=d<<d9\\u000Ei\\u0000\\u001Ah./f\\u0016=e7%g\\u000B\\u0000f\\u0005\\u000Bd9\\u001Fh.8g\\u000E/d?\\u001De\\u001F9e\\u0005;f&\\u0002e?5e$'e\\u001E\\u000Bf\\u001C:g%(g\\u0010\\u0006h'#e\\u000C?e\\u0010\\rcuandoenviarmadridbuscariniciotiempoporquecuentaestadopuedenjuegoscontraestC!nnombretienenperfilmaneraamigosciudadcentroaunquepuedesdentroprimerpreciosegC:nbuenosvolverpuntossemanahabC-aagostonuevosunidoscarlosequiponiC1osmuchosalgunacorreoimagenpartirarribamarC-ahombreempleoverdadcambiomuchasfueronpasadolC-neaparecenuevascursosestabaquierolibroscuantoaccesomiguelvarioscuatrotienesgruposserC!neuropamediosfrenteacercademC!sofertacochesmodeloitalialetrasalgC:ncompracualesexistecuerposiendoprensallegarviajesdineromurciapodrC!puestodiariopuebloquieremanuelpropiocrisisciertoseguromuertefuentecerrargrandeefectopartesmedidapropiaofrecetierrae-mailvariasformasfuturoobjetoseguirriesgonormasmismosC:nicocaminositiosrazC3ndebidopruebatoledotenC-ajesC:sesperococinaorigentiendacientocC!dizhablarserC-alatinafuerzaestiloguerraentrarC)xitolC3pezagendavC-deoevitarpaginametrosjavierpadresfC!cilcabezaC!reassalidaenvC-ojapC3nabusosbienestextosllevarpuedanfuertecomC:nclaseshumanotenidobilbaounidadestC!seditarcreadoP4P;Q\\u000FQ\\u0007Q\\u0002P>P:P0P:P8P;P8Q\\rQ\\u0002P>P2Q\\u0001P5P5P3P>P?Q\\u0000P8Q\\u0002P0P:P5Q\\tP5Q\\u0003P6P5P\\u001AP0P:P1P5P7P1Q\\u000BP;P>P=P8P\\u0012Q\\u0001P5P?P>P4P-Q\\u0002P>Q\\u0002P>P<Q\\u0007P5P<P=P5Q\\u0002P;P5Q\\u0002Q\\u0000P0P7P>P=P0P3P4P5P<P=P5P\\u0014P;Q\\u000FP\\u001FQ\\u0000P8P=P0Q\\u0001P=P8Q\\u0005Q\\u0002P5P<P:Q\\u0002P>P3P>P4P2P>Q\\u0002Q\\u0002P0P<P!P(P\\u0010P<P0Q\\u000FP'Q\\u0002P>P2P0Q\\u0001P2P0P<P5P<Q\\u0003P\\\"P0P:P4P2P0P=P0P<Q\\rQ\\u0002P8Q\\rQ\\u0002Q\\u0003P\\u0012P0P<Q\\u0002P5Q\\u0005P?Q\\u0000P>Q\\u0002Q\\u0003Q\\u0002P=P0P4P4P=Q\\u000FP\\u0012P>Q\\u0002Q\\u0002Q\\u0000P8P=P5P9P\\u0012P0Q\\u0001P=P8P<Q\\u0001P0P<Q\\u0002P>Q\\u0002Q\\u0000Q\\u0003P1P\\u001EP=P8P<P8Q\\u0000P=P5P5P\\u001EP\\u001EP\\u001EP;P8Q\\u0006Q\\rQ\\u0002P0P\\u001EP=P0P=P5P<P4P>P<P<P>P9P4P2P5P>P=P>Q\\u0001Q\\u0003P4`$\\u0015`%\\u0007`$9`%\\u0008`$\\u0015`%\\u0000`$8`%\\u0007`$\\u0015`$>`$\\u0015`%\\u000B`$\\u0014`$0`$*`$0`$(`%\\u0007`$\\u000F`$\\u0015`$\\u0015`$?`$-`%\\u0000`$\\u0007`$8`$\\u0015`$0`$$`%\\u000B`$9`%\\u000B`$\\u0006`$*`$9`%\\u0000`$/`$9`$/`$>`$$`$\\u0015`$%`$>jagran`$\\u0006`$\\u001C`$\\u001C`%\\u000B`$\\u0005`$,`$&`%\\u000B`$\\u0017`$\\u0008`$\\u001C`$>`$\\u0017`$\\u000F`$9`$.`$\\u0007`$(`$5`$9`$/`%\\u0007`$%`%\\u0007`$%`%\\u0000`$\\u0018`$0`$\\u001C`$,`$&`%\\u0000`$\\u0015`$\\u0008`$\\u001C`%\\u0000`$5`%\\u0007`$(`$\\u0008`$(`$\\u000F`$9`$0`$\\t`$8`$.`%\\u0007`$\\u0015`$.`$5`%\\u000B`$2`%\\u0007`$8`$,`$.`$\\u0008`$&`%\\u0007`$\\u0013`$0`$\\u0006`$.`$,`$8`$-`$0`$,`$(`$\\u001A`$2`$.`$(`$\\u0006`$\\u0017`$8`%\\u0000`$2`%\\u0000X9Y\\u0004Y\\tX%Y\\u0004Y\\tY\\u0007X0X'X\\\"X.X1X9X/X/X'Y\\u0004Y\\tY\\u0007X0Y\\u0007X5Y\\u0008X1X:Y\\nX1Y\\u0003X'Y\\u0006Y\\u0008Y\\u0004X'X(Y\\nY\\u0006X9X1X6X0Y\\u0004Y\\u0003Y\\u0007Y\\u0006X'Y\\nY\\u0008Y\\u0005Y\\u0002X'Y\\u0004X9Y\\u0004Y\\nX'Y\\u0006X'Y\\u0004Y\\u0003Y\\u0006X-X*Y\\tY\\u0002X(Y\\u0004Y\\u0008X-X)X'X.X1Y\\u0001Y\\u0002X7X9X(X/X1Y\\u0003Y\\u0006X%X0X'Y\\u0003Y\\u0005X'X'X-X/X%Y\\u0004X'Y\\u0001Y\\nY\\u0007X(X9X6Y\\u0003Y\\nY\\u0001X(X-X+Y\\u0008Y\\u0005Y\\u0006Y\\u0008Y\\u0007Y\\u0008X#Y\\u0006X'X,X/X'Y\\u0004Y\\u0007X'X3Y\\u0004Y\\u0005X9Y\\u0006X/Y\\u0004Y\\nX3X9X(X1X5Y\\u0004Y\\tY\\u0005Y\\u0006X0X(Y\\u0007X'X#Y\\u0006Y\\u0007Y\\u0005X+Y\\u0004Y\\u0003Y\\u0006X*X'Y\\u0004X'X-Y\\nX+Y\\u0005X5X1X4X1X-X-Y\\u0008Y\\u0004Y\\u0008Y\\u0001Y\\nX'X0X'Y\\u0004Y\\u0003Y\\u0004Y\\u0005X1X)X'Y\\u0006X*X'Y\\u0004Y\\u0001X#X(Y\\u0008X.X'X5X#Y\\u0006X*X'Y\\u0006Y\\u0007X'Y\\u0004Y\\nX9X6Y\\u0008Y\\u0008Y\\u0002X/X'X(Y\\u0006X.Y\\nX1X(Y\\u0006X*Y\\u0004Y\\u0003Y\\u0005X4X'X!Y\\u0008Y\\u0007Y\\nX'X(Y\\u0008Y\\u0002X5X5Y\\u0008Y\\u0005X'X1Y\\u0002Y\\u0005X#X-X/Y\\u0006X-Y\\u0006X9X/Y\\u0005X1X#Y\\nX'X-X)Y\\u0003X*X(X/Y\\u0008Y\\u0006Y\\nX,X(Y\\u0005Y\\u0006Y\\u0007X*X-X*X,Y\\u0007X)X3Y\\u0006X)Y\\nX*Y\\u0005Y\\u0003X1X)X:X2X)Y\\u0006Y\\u0001X3X(Y\\nX*Y\\u0004Y\\u0004Y\\u0007Y\\u0004Y\\u0006X'X*Y\\u0004Y\\u0003Y\\u0002Y\\u0004X(Y\\u0004Y\\u0005X'X9Y\\u0006Y\\u0007X#Y\\u0008Y\\u0004X4Y\\nX!Y\\u0006Y\\u0008X1X#Y\\u0005X'Y\\u0001Y\\nY\\u0003X(Y\\u0003Y\\u0004X0X'X*X1X*X(X(X#Y\\u0006Y\\u0007Y\\u0005X3X'Y\\u0006Y\\u0003X(Y\\nX9Y\\u0001Y\\u0002X/X-X3Y\\u0006Y\\u0004Y\\u0007Y\\u0005X4X9X1X#Y\\u0007Y\\u0004X4Y\\u0007X1Y\\u0002X7X1X7Y\\u0004X(profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashion<title>countryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture&quot;,journalprojectsurfaces&quot;expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\\r\\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular &amp; animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&amp;History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit&lt;!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle=\\\"Mobile killingshowingItaliandroppedheavilyeffects-1']);\\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,&quot;animatefeelingarrivedpassingnaturalroughly.\\n\\nThe but notdensityBritainChineselack oftributeIreland\\\" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang=\\\"return leadersplannedpremiumpackageAmericaEdition]&quot;Messageneed tovalue=\\\"complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling.&quot;AccountEdward segmentRobert effortsPacificlearnedup withheight:we haveAngelesnations_searchappliedacquiremassivegranted: falsetreatedbiggestbenefitdrivingStudiesminimumperhapsmorningsellingis usedreversevariant role=\\\"missingachievepromotestudentsomeoneextremerestorebottom:evolvedall thesitemapenglishway to  AugustsymbolsCompanymattersmusicalagainstserving})();\\r\\npaymenttroubleconceptcompareparentsplayersregionsmonitor ''The winningexploreadaptedGalleryproduceabilityenhancecareers). The collectSearch ancientexistedfooter handlerprintedconsoleEasternexportswindowsChannelillegalneutralsuggest_headersigning.html\\\">settledwesterncausing-webkitclaimedJusticechaptervictimsThomas mozillapromisepartieseditionoutside:false,hundredOlympic_buttonauthorsreachedchronicdemandssecondsprotectadoptedprepareneithergreatlygreateroverallimprovecommandspecialsearch.worshipfundingthoughthighestinsteadutilityquarterCulturetestingclearlyexposedBrowserliberal} catchProjectexamplehide();FloridaanswersallowedEmperordefenseseriousfreedomSeveral-buttonFurtherout of != nulltrainedDenmarkvoid(0)/all.jspreventRequestStephen\\n\\nWhen observe</h2>\\r\\nModern provide\\\" alt=\\\"borders.\\n\\nFor \\n\\nMany artistspoweredperformfictiontype ofmedicalticketsopposedCouncilwitnessjusticeGeorge Belgium...</a>twitternotablywaitingwarfare Other rankingphrasesmentionsurvivescholar</p>\\r\\n Countryignoredloss ofjust asGeorgiastrange<head><stopped1']);\\r\\nislandsnotableborder:list ofcarried100,000</h3>\\n severalbecomesselect wedding00.htmlmonarchoff theteacherhighly biologylife ofor evenrise of&raquo;plusonehunting(thoughDouglasjoiningcirclesFor theAncientVietnamvehiclesuch ascrystalvalue =Windowsenjoyeda smallassumed<a id=\\\"foreign All rihow theDisplayretiredhoweverhidden;battlesseekingcabinetwas notlook atconductget theJanuaryhappensturninga:hoverOnline French lackingtypicalextractenemieseven ifgeneratdecidedare not/searchbeliefs-image:locatedstatic.login\\\">convertviolententeredfirst\\\">circuitFinlandchemistshe was10px;\\\">as suchdivided</span>will beline ofa greatmystery/index.fallingdue to railwaycollegemonsterdescentit withnuclearJewish protestBritishflowerspredictreformsbutton who waslectureinstantsuicidegenericperiodsmarketsSocial fishingcombinegraphicwinners<br /><by the NaturalPrivacycookiesoutcomeresolveSwedishbrieflyPersianso muchCenturydepictscolumnshousingscriptsnext tobearingmappingrevisedjQuery(-width:title\\\">tooltipSectiondesignsTurkishyounger.match(})();\\n\\nburningoperatedegreessource=Richardcloselyplasticentries</tr>\\r\\ncolor:#ul id=\\\"possessrollingphysicsfailingexecutecontestlink toDefault<br />\\n: true,chartertourismclassicproceedexplain</h1>\\r\\nonline.?xml vehelpingdiamonduse theairlineend -->).attr(readershosting#ffffffrealizeVincentsignals src=\\\"/ProductdespitediversetellingPublic held inJoseph theatreaffects<style>a largedoesn'tlater, ElementfaviconcreatorHungaryAirportsee theso thatMichaelSystemsPrograms, and  width=e&quot;tradingleft\\\">\\npersonsGolden Affairsgrammarformingdestroyidea ofcase ofoldest this is.src = cartoonregistrCommonsMuslimsWhat isin manymarkingrevealsIndeed,equally/show_aoutdoorescape(Austriageneticsystem,In the sittingHe alsoIslandsAcademy\\n\\t\\t<!--Daniel bindingblock\\\">imposedutilizeAbraham(except{width:putting).html(|| [];\\nDATA[ *kitchenmountedactual dialectmainly _blank'installexpertsif(typeIt also&copy; \\\">Termsborn inOptionseasterntalkingconcerngained ongoingjustifycriticsfactoryits ownassaultinvitedlastinghis ownhref=\\\"/\\\" rel=\\\"developconcertdiagramdollarsclusterphp?id=alcohol);})();using a><span>vesselsrevivalAddressamateurandroidallegedillnesswalkingcentersqualifymatchesunifiedextinctDefensedied in\\n\\t<!-- customslinkingLittle Book ofeveningmin.js?are thekontakttoday's.html\\\" target=wearingAll Rig;\\n})();raising Also, crucialabout\\\">declare-->\\n<scfirefoxas muchappliesindex, s, but type = \\n\\r\\n<!--towardsRecordsPrivateForeignPremierchoicesVirtualreturnsCommentPoweredinline;povertychamberLiving volumesAnthonylogin\\\" RelatedEconomyreachescuttinggravitylife inChapter-shadowNotable</td>\\r\\n returnstadiumwidgetsvaryingtravelsheld bywho arework infacultyangularwho hadairporttown of\\n\\nSome 'click'chargeskeywordit willcity of(this);Andrew unique checkedor more300px; return;rsion=\\\"pluginswithin herselfStationFederalventurepublishsent totensionactresscome tofingersDuke ofpeople,exploitwhat isharmonya major\\\":\\\"httpin his menu\\\">\\nmonthlyofficercouncilgainingeven inSummarydate ofloyaltyfitnessand wasemperorsupremeSecond hearingRussianlongestAlbertalateralset of small\\\">.appenddo withfederalbank ofbeneathDespiteCapitalgrounds), and percentit fromclosingcontainInsteadfifteenas well.yahoo.respondfighterobscurereflectorganic= Math.editingonline paddinga wholeonerroryear ofend of barrierwhen itheader home ofresumedrenamedstrong>heatingretainscloudfrway of March 1knowingin partBetweenlessonsclosestvirtuallinks\\\">crossedEND -->famous awardedLicenseHealth fairly wealthyminimalAfricancompetelabel\\\">singingfarmersBrasil)discussreplaceGregoryfont copursuedappearsmake uproundedboth ofblockedsaw theofficescoloursif(docuwhen heenforcepush(fuAugust UTF-8\\\">Fantasyin mostinjuredUsuallyfarmingclosureobject defenceuse of Medical<body>\\nevidentbe usedkeyCodesixteenIslamic#000000entire widely active (typeofone cancolor =speakerextendsPhysicsterrain<tbody>funeralviewingmiddle cricketprophetshifteddoctorsRussell targetcompactalgebrasocial-bulk ofman and</td>\\n he left).val()false);logicalbankinghome tonaming Arizonacredits);\\n});\\nfounderin turnCollinsbefore But thechargedTitle\\\">CaptainspelledgoddessTag -->Adding:but wasRecent patientback in=false&Lincolnwe knowCounterJudaismscript altered']);\\n  has theunclearEvent',both innot all\\n\\n<!-- placinghard to centersort ofclientsstreetsBernardassertstend tofantasydown inharbourFreedomjewelry/about..searchlegendsis mademodern only ononly toimage\\\" linear painterand notrarely acronymdelivershorter00&amp;as manywidth=\\\"/* <![Ctitle =of the lowest picked escapeduses ofpeoples PublicMatthewtacticsdamagedway forlaws ofeasy to windowstrong  simple}catch(seventhinfoboxwent topaintedcitizenI don'tretreat. Some ww.\\\");\\nbombingmailto:made in. Many carries||{};wiwork ofsynonymdefeatsfavoredopticalpageTraunless sendingleft\\\"><comScorAll thejQuery.touristClassicfalse\\\" Wilhelmsuburbsgenuinebishops.split(global followsbody ofnominalContactsecularleft tochiefly-hidden-banner</li>\\n\\n. When in bothdismissExplorealways via thespaC1olwelfareruling arrangecaptainhis sonrule ofhe tookitself,=0&amp;(calledsamplesto makecom/pagMartin Kennedyacceptsfull ofhandledBesides//--></able totargetsessencehim to its by common.mineralto takeways tos.org/ladvisedpenaltysimple:if theyLettersa shortHerbertstrikes groups.lengthflightsoverlapslowly lesser social </p>\\n\\t\\tit intoranked rate oful>\\r\\n  attemptpair ofmake itKontaktAntoniohaving ratings activestreamstrapped\\\").css(hostilelead tolittle groups,Picture-->\\r\\n\\r\\n rows=\\\" objectinverse<footerCustomV><\\\\/scrsolvingChamberslaverywoundedwhereas!= 'undfor allpartly -right:Arabianbacked centuryunit ofmobile-Europe,is homerisk ofdesiredClintoncost ofage of become none ofp&quot;Middle ead')[0Criticsstudios>&copy;group\\\">assemblmaking pressedwidget.ps:\\\" ? rebuiltby someFormer editorsdelayedCanonichad thepushingclass=\\\"but arepartialBabylonbottom carrierCommandits useAs withcoursesa thirddenotesalso inHouston20px;\\\">accuseddouble goal ofFamous ).bind(priests Onlinein Julyst + \\\"gconsultdecimalhelpfulrevivedis veryr'+'iptlosing femalesis alsostringsdays ofarrivalfuture <objectforcingString(\\\" />\\n\\t\\there isencoded.  The balloondone by/commonbgcolorlaw of Indianaavoidedbut the2px 3pxjquery.after apolicy.men andfooter-= true;for usescreen.Indian image =family,http:// &nbsp;driverseternalsame asnoticedviewers})();\\n is moreseasonsformer the newis justconsent Searchwas thewhy theshippedbr><br>width: height=made ofcuisineis thata very Admiral fixed;normal MissionPress, ontariocharsettry to invaded=\\\"true\\\"spacingis mosta more totallyfall of});\\r\\n  immensetime inset outsatisfyto finddown tolot of Playersin Junequantumnot thetime todistantFinnishsrc = (single help ofGerman law andlabeledforestscookingspace\\\">header-well asStanleybridges/globalCroatia About [0];\\n  it, andgroupedbeing a){throwhe madelighterethicalFFFFFF\\\"bottom\\\"like a employslive inas seenprintermost ofub-linkrejectsand useimage\\\">succeedfeedingNuclearinformato helpWomen'sNeitherMexicanprotein<table by manyhealthylawsuitdevised.push({sellerssimply Through.cookie Image(older\\\">us.js\\\"> Since universlarger open to!-- endlies in']);\\r\\n  marketwho is (\\\"DOMComanagedone fortypeof Kingdomprofitsproposeto showcenter;made itdressedwere inmixtureprecisearisingsrc = 'make a securedBaptistvoting \\n\\t\\tvar March 2grew upClimate.removeskilledway the</head>face ofacting right\\\">to workreduceshas haderectedshow();action=book ofan area== \\\"htt<header\\n<html>conformfacing cookie.rely onhosted .customhe wentbut forspread Family a meansout theforums.footage\\\">MobilClements\\\" id=\\\"as highintense--><!--female is seenimpliedset thea stateand hisfastestbesidesbutton_bounded\\\"><img Infoboxevents,a youngand areNative cheaperTimeoutand hasengineswon the(mostlyright: find a -bottomPrince area ofmore ofsearch_nature,legallyperiod,land ofor withinducedprovingmissilelocallyAgainstthe wayk&quot;px;\\\">\\r\\npushed abandonnumeralCertainIn thismore inor somename isand, incrownedISBN 0-createsOctobermay notcenter late inDefenceenactedwish tobroadlycoolingonload=it. TherecoverMembersheight assumes<html>\\npeople.in one =windowfooter_a good reklamaothers,to this_cookiepanel\\\">London,definescrushedbaptismcoastalstatus title\\\" move tolost inbetter impliesrivalryservers SystemPerhapses and contendflowinglasted rise inGenesisview ofrising seem tobut in backinghe willgiven agiving cities.flow of Later all butHighwayonly bysign ofhe doesdiffersbattery&amp;lasinglesthreatsintegertake onrefusedcalled =US&ampSee thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\\r\\nAtlantanucleusCounty,purely count\\\">easily build aonclicka givenpointerh&quot;events else {\\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m&quot;renewedDetroitamongsteither them inSenatorUs</a><King ofFrancis-produche usedart andhim andused byscoringat hometo haverelatesibilityfactionBuffalolink\\\"><what hefree toCity ofcome insectorscountedone daynervoussquare };if(goin whatimg\\\" alis onlysearch/tuesdaylooselySolomonsexual - <a hrmedium\\\"DO NOT France,with a war andsecond take a >\\r\\n\\r\\n\\r\\nmarket.highwaydone inctivity\\\"last\\\">obligedrise to\\\"undefimade to Early praisedin its for hisathleteJupiterYahoo! termed so manyreally s. The a woman?value=direct right\\\" bicycleacing=\\\"day andstatingRather,higher Office are nowtimes, when a pay foron this-link\\\">;borderaround annual the Newput the.com\\\" takin toa brief(in thegroups.; widthenzymessimple in late{returntherapya pointbanninginks\\\">\\n();\\\" rea place\\\\u003Caabout atr>\\r\\n\\t\\tccount gives a<SCRIPTRailwaythemes/toolboxById(\\\"xhumans,watchesin some if (wicoming formats Under but hashanded made bythan infear ofdenoted/iframeleft involtagein eacha&quot;base ofIn manyundergoregimesaction </p>\\r\\n<ustomVa;&gt;</importsor thatmostly &amp;re size=\\\"</a></ha classpassiveHost = WhetherfertileVarious=[];(fucameras/></td>acts asIn some>\\r\\n\\r\\n<!organis <br />BeijingcatalC deutscheuropeueuskaragaeilgesvenskaespaC1amensajeusuariotrabajomC)xicopC!ginasiempresistemaoctubreduranteaC1adirempresamomentonuestroprimeratravC)sgraciasnuestraprocesoestadoscalidadpersonanC:meroacuerdomC:sicamiembroofertasalgunospaC-sesejemploderechoademC!sprivadoagregarenlacesposiblehotelessevillaprimeroC:ltimoeventosarchivoculturamujeresentradaanuncioembargomercadograndesestudiomejoresfebrerodiseC1oturismocC3digoportadaespaciofamiliaantoniopermiteguardaralgunaspreciosalguiensentidovisitastC-tuloconocersegundoconsejofranciaminutossegundatenemosefectosmC!lagasesiC3nrevistagranadacompraringresogarcC-aacciC3necuadorquienesinclusodeberC!materiahombresmuestrapodrC-amaC1anaC:ltimaestamosoficialtambienningC:nsaludospodemosmejorarpositionbusinesshomepagesecuritylanguagestandardcampaignfeaturescategoryexternalchildrenreservedresearchexchangefavoritetemplatemilitaryindustryservicesmaterialproductsz-index:commentssoftwarecompletecalendarplatformarticlesrequiredmovementquestionbuildingpoliticspossiblereligionphysicalfeedbackregisterpicturesdisabledprotocolaudiencesettingsactivityelementslearninganythingabstractprogressoverviewmagazineeconomictrainingpressurevarious <strong>propertyshoppingtogetheradvancedbehaviordownloadfeaturedfootballselectedLanguagedistanceremembertrackingpasswordmodifiedstudentsdirectlyfightingnortherndatabasefestivalbreakinglocationinternetdropdownpracticeevidencefunctionmarriageresponseproblemsnegativeprogramsanalysisreleasedbanner\\\">purchasepoliciesregionalcreativeargumentbookmarkreferrerchemicaldivisioncallbackseparateprojectsconflicthardwareinterestdeliverymountainobtained= false;for(var acceptedcapacitycomputeridentityaircraftemployedproposeddomesticincludesprovidedhospitalverticalcollapseapproachpartnerslogo\\\"><adaughterauthor\\\" culturalfamilies/images/assemblypowerfulteachingfinisheddistrictcriticalcgi-bin/purposesrequireselectionbecomingprovidesacademicexerciseactuallymedicineconstantaccidentMagazinedocumentstartingbottom\\\">observed: &quot;extendedpreviousSoftwarecustomerdecisionstrengthdetailedslightlyplanningtextareacurrencyeveryonestraighttransferpositiveproducedheritageshippingabsolutereceivedrelevantbutton\\\" violenceanywherebenefitslaunchedrecentlyalliancefollowedmultiplebulletinincludedoccurredinternal$(this).republic><tr><tdcongressrecordedultimatesolution<ul id=\\\"discoverHome</a>websitesnetworksalthoughentirelymemorialmessagescontinueactive\\\">somewhatvictoriaWestern  title=\\\"LocationcontractvisitorsDownloadwithout right\\\">\\nmeasureswidth = variableinvolvedvirginianormallyhappenedaccountsstandingnationalRegisterpreparedcontrolsaccuratebirthdaystrategyofficialgraphicscriminalpossiblyconsumerPersonalspeakingvalidateachieved.jpg\\\" />machines</h2>\\n  keywordsfriendlybrotherscombinedoriginalcomposedexpectedadequatepakistanfollow\\\" valuable</label>relativebringingincreasegovernorplugins/List of Header\\\">\\\" name=\\\" (&quot;graduate</head>\\ncommercemalaysiadirectormaintain;height:schedulechangingback to catholicpatternscolor: #greatestsuppliesreliable</ul>\\n\\t\\t<select citizensclothingwatching<li id=\\\"specificcarryingsentence<center>contrastthinkingcatch(e)southernMichael merchantcarouselpadding:interior.split(\\\"lizationOctober ){returnimproved--&gt;\\n\\ncoveragechairman.png\\\" />subjectsRichard whateverprobablyrecoverybaseballjudgmentconnect..css\\\" /> websitereporteddefault\\\"/></a>\\r\\nelectricscotlandcreationquantity. ISBN 0did not instance-search-\\\" lang=\\\"speakersComputercontainsarchivesministerreactiondiscountItalianocriteriastrongly: 'http:'script'coveringofferingappearedBritish identifyFacebooknumerousvehiclesconcernsAmericanhandlingdiv id=\\\"William provider_contentaccuracysection andersonflexibleCategorylawrence<script>layout=\\\"approved maximumheader\\\"></table>Serviceshamiltoncurrent canadianchannels/themes//articleoptionalportugalvalue=\\\"\\\"intervalwirelessentitledagenciesSearch\\\" measuredthousandspending&hellip;new Date\\\" size=\\\"pageNamemiddle\\\" \\\" /></a>hidden\\\">sequencepersonaloverflowopinionsillinoislinks\\\">\\n\\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal=\\\"false\\\"EspaC1olreleasessubmit\\\" er&quot;additionsymptomsorientedresourceright\\\"><pleasurestationshistory.leaving  border=contentscenter\\\">.\\n\\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal\\\"><span>search\\\">operatorrequestsa &quot;allowingDocumentrevision. \\n\\nThe yourselfContact michiganEnglish columbiapriorityprintingdrinkingfacilityreturnedContent officersRussian generate-8859-1\\\"indicatefamiliar qualitymargin:0 contentviewportcontacts-title\\\">portable.length eligibleinvolvesatlanticonload=\\\"default.suppliedpaymentsglossary\\n\\nAfter guidance</td><tdencodingmiddle\\\">came to displaysscottishjonathanmajoritywidgets.clinicalthailandteachers<head>\\n\\taffectedsupportspointer;toString</small>oklahomawill be investor0\\\" alt=\\\"holidaysResourcelicensed (which . After considervisitingexplorerprimary search\\\" android\\\"quickly meetingsestimate;return ;color:# height=approval, &quot; checked.min.js\\\"magnetic></a></hforecast. While thursdaydvertise&eacute;hasClassevaluateorderingexistingpatients Online coloradoOptions\\\"campbell<!-- end</span><<br />\\r\\n_popups|sciences,&quot; quality Windows assignedheight: <b classle&quot; value=\\\" Companyexamples<iframe believespresentsmarshallpart of properly).\\n\\nThe taxonomymuch of </span>\\n\\\" data-srtuguC*sscrollTo project<head>\\r\\nattorneyemphasissponsorsfancyboxworld's wildlifechecked=sessionsprogrammpx;font- Projectjournalsbelievedvacationthompsonlightingand the special border=0checking</tbody><button Completeclearfix\\n<head>\\narticle <sectionfindingsrole in popular  Octoberwebsite exposureused to  changesoperatedclickingenteringcommandsinformed numbers  </div>creatingonSubmitmarylandcollegesanalyticlistingscontact.loggedInadvisorysiblingscontent\\\"s&quot;)s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.pngjapanesecodebasebutton\\\">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth=\\\"2lazyloadnovemberused in height=\\\"cript\\\">\\n&nbsp;</<tr><td height:2/productcountry include footer\\\" &lt;!-- title\\\"></jquery.</form>\\n(g.\\u0000d=\\u0013)(g9\\u0001i+\\u0014)hrvatskiitalianoromC\\\"nD\\u0003tC<rkC'eX'X1X/Y\\u0008tambiC)nnoticiasmensajespersonasderechosnacionalserviciocontactousuariosprogramagobiernoempresasanunciosvalenciacolombiadespuC)sdeportesproyectoproductopC:bliconosotroshistoriapresentemillonesmediantepreguntaanteriorrecursosproblemasantiagonuestrosopiniC3nimprimirmientrasamC)ricavendedorsociedadrespectorealizarregistropalabrasinterC)sentoncesespecialmiembrosrealidadcC3rdobazaragozapC!ginassocialesbloqueargestiC3nalquilersistemascienciascompletoversiC3ncompletaestudiospC:blicaobjetivoalicantebuscadorcantidadentradasaccionesarchivossuperiormayorC-aalemaniafunciC3nC:ltimoshaciendoaquellosediciC3nfernandoambientefacebooknuestrasclientesprocesosbastantepresentareportarcongresopublicarcomerciocontratojC3venesdistritotC)cnicaconjuntoenergC-atrabajarasturiasrecienteutilizarboletC-nsalvadorcorrectatrabajosprimerosnegocioslibertaddetallespantallaprC3ximoalmerC-aanimalesquiC)nescorazC3nsecciC3nbuscandoopcionesexteriorconceptotodavC-agalerC-aescribirmedicinalicenciaconsultaaspectoscrC-ticadC3laresjusticiadeberC!nperC-odonecesitamantenerpequeC1orecibidatribunaltenerifecanciC3ncanariasdescargadiversosmallorcarequieretC)cnicodeberC-aviviendafinanzasadelantefuncionaconsejosdifC-cilciudadesantiguasavanzadatC)rminounidadessC!nchezcampaC1asoftonicrevistascontienesectoresmomentosfacultadcrC)ditodiversassupuestofactoressegundospequeC1aP3P>P4P0P5Q\\u0001P;P8P5Q\\u0001Q\\u0002Q\\u000CP1Q\\u000BP;P>P1Q\\u000BQ\\u0002Q\\u000CQ\\rQ\\u0002P>P<P\\u0015Q\\u0001P;P8Q\\u0002P>P3P>P<P5P=Q\\u000FP2Q\\u0001P5Q\\u0005Q\\rQ\\u0002P>P9P4P0P6P5P1Q\\u000BP;P8P3P>P4Q\\u0003P4P5P=Q\\u000CQ\\rQ\\u0002P>Q\\u0002P1Q\\u000BP;P0Q\\u0001P5P1Q\\u000FP>P4P8P=Q\\u0001P5P1P5P=P0P4P>Q\\u0001P0P9Q\\u0002Q\\u0004P>Q\\u0002P>P=P5P3P>Q\\u0001P2P>P8Q\\u0001P2P>P9P8P3Q\\u0000Q\\u000BQ\\u0002P>P6P5P2Q\\u0001P5P<Q\\u0001P2P>Q\\u000EP;P8Q\\u0008Q\\u000CQ\\rQ\\u0002P8Q\\u0005P?P>P:P0P4P=P5P9P4P>P<P0P<P8Q\\u0000P0P;P8P1P>Q\\u0002P5P<Q\\u0003Q\\u0005P>Q\\u0002Q\\u000FP4P2Q\\u0003Q\\u0005Q\\u0001P5Q\\u0002P8P;Q\\u000EP4P8P4P5P;P>P<P8Q\\u0000P5Q\\u0002P5P1Q\\u000FQ\\u0001P2P>P5P2P8P4P5Q\\u0007P5P3P>Q\\rQ\\u0002P8P<Q\\u0001Q\\u0007P5Q\\u0002Q\\u0002P5P<Q\\u000BQ\\u0006P5P=Q\\u000BQ\\u0001Q\\u0002P0P;P2P5P4Q\\u000CQ\\u0002P5P<P5P2P>P4Q\\u000BQ\\u0002P5P1P5P2Q\\u000BQ\\u0008P5P=P0P<P8Q\\u0002P8P?P0Q\\u0002P>P<Q\\u0003P?Q\\u0000P0P2P;P8Q\\u0006P0P>P4P=P0P3P>P4Q\\u000BP7P=P0Q\\u000EP<P>P3Q\\u0003P4Q\\u0000Q\\u0003P3P2Q\\u0001P5P9P8P4P5Q\\u0002P:P8P=P>P>P4P=P>P4P5P;P0P4P5P;P5Q\\u0001Q\\u0000P>P:P8Q\\u000EP=Q\\u000FP2P5Q\\u0001Q\\u000CP\\u0015Q\\u0001Q\\u0002Q\\u000CQ\\u0000P0P7P0P=P0Q\\u0008P8X'Y\\u0004Y\\u0004Y\\u0007X'Y\\u0004X*Y\\nX,Y\\u0005Y\\nX9X.X'X5X)X'Y\\u0004X0Y\\nX9Y\\u0004Y\\nY\\u0007X,X/Y\\nX/X'Y\\u0004X\\\"Y\\u0006X'Y\\u0004X1X/X*X-Y\\u0003Y\\u0005X5Y\\u0001X-X)Y\\u0003X'Y\\u0006X*X'Y\\u0004Y\\u0004Y\\nY\\nY\\u0003Y\\u0008Y\\u0006X4X(Y\\u0003X)Y\\u0001Y\\nY\\u0007X'X(Y\\u0006X'X*X-Y\\u0008X'X!X#Y\\u0003X+X1X.Y\\u0004X'Y\\u0004X'Y\\u0004X-X(X/Y\\u0004Y\\nY\\u0004X/X1Y\\u0008X3X'X6X:X7X*Y\\u0003Y\\u0008Y\\u0006Y\\u0007Y\\u0006X'Y\\u0003X3X'X-X)Y\\u0006X'X/Y\\nX'Y\\u0004X7X(X9Y\\u0004Y\\nY\\u0003X4Y\\u0003X1X'Y\\nY\\u0005Y\\u0003Y\\u0006Y\\u0005Y\\u0006Y\\u0007X'X4X1Y\\u0003X)X1X&Y\\nX3Y\\u0006X4Y\\nX7Y\\u0005X'X0X'X'Y\\u0004Y\\u0001Y\\u0006X4X(X'X(X*X9X(X1X1X-Y\\u0005X)Y\\u0003X'Y\\u0001X)Y\\nY\\u0002Y\\u0008Y\\u0004Y\\u0005X1Y\\u0003X2Y\\u0003Y\\u0004Y\\u0005X)X#X-Y\\u0005X/Y\\u0002Y\\u0004X(Y\\nY\\nX9Y\\u0006Y\\nX5Y\\u0008X1X)X7X1Y\\nY\\u0002X4X'X1Y\\u0003X,Y\\u0008X'Y\\u0004X#X.X1Y\\tY\\u0005X9Y\\u0006X'X'X(X-X+X9X1Y\\u0008X6X(X4Y\\u0003Y\\u0004Y\\u0005X3X,Y\\u0004X(Y\\u0006X'Y\\u0006X.X'Y\\u0004X/Y\\u0003X*X'X(Y\\u0003Y\\u0004Y\\nX)X(X/Y\\u0008Y\\u0006X#Y\\nX6X'Y\\nY\\u0008X,X/Y\\u0001X1Y\\nY\\u0002Y\\u0003X*X(X*X#Y\\u0001X6Y\\u0004Y\\u0005X7X(X.X'Y\\u0003X+X1X(X'X1Y\\u0003X'Y\\u0001X6Y\\u0004X'X-Y\\u0004Y\\tY\\u0006Y\\u0001X3Y\\u0007X#Y\\nX'Y\\u0005X1X/Y\\u0008X/X#Y\\u0006Y\\u0007X'X/Y\\nY\\u0006X'X'Y\\u0004X'Y\\u0006Y\\u0005X9X1X6X*X9Y\\u0004Y\\u0005X/X'X.Y\\u0004Y\\u0005Y\\u0005Y\\u0003Y\\u0006\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0001\\u0000\\u0001\\u0000\\u0001\\u0000\\u0001\\u0000\\u0002\\u0000\\u0002\\u0000\\u0002\\u0000\\u0002\\u0000\\u0004\\u0000\\u0004\\u0000\\u0004\\u0000\\u0004\\u0000\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\u0007\\u0006\\u0005\\u0004\\u0003\\u0002\\u0001\\u0000\\u0008\\t\\n\\u000B\\u000C\\r\\u000E\\u000F\\u000F\\u000E\\r\\u000C\\u000B\\n\\t\\u0008\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0017\\u0016\\u0015\\u0014\\u0013\\u0012\\u0011\\u0010\\u0018\\u0019\\u001A\\u001B\\u001C\\u001D\\u001E\\u001F\\u001F\\u001E\\u001D\\u001C\\u001B\\u001A\\u0019\\u0018\\u007F\\u007F\\u007F\\u007F\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u007F\\u007F\\u007F\\u007F\\u0001\\u0000\\u0000\\u0000\\u0002\\u0000\\u0000\\u0000\\u0002\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u0000\\u0003\\u0000\\u0000\\u0000\\u007F\\u007F\\u0000\\u0001\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u007F\\u007F\\u0000\\u0001\\u0000\\u0000\\u0000\\u0008\\u0000\\u0008\\u0000\\u0008\\u0000\\u0008\\u0000\\u0000\\u0000\\u0001\\u0000\\u0002\\u0000\\u0003\\u0000\\u0004\\u0000\\u0005\\u0000\\u0006\\u0000\\u0007resourcescountriesquestionsequipmentcommunityavailablehighlightDTD/xhtmlmarketingknowledgesomethingcontainerdirectionsubscribeadvertisecharacter\\\" value=\\\"</select>Australia\\\" class=\\\"situationauthorityfollowingprimarilyoperationchallengedevelopedanonymousfunction functionscompaniesstructureagreement\\\" title=\\\"potentialeducationargumentssecondarycopyrightlanguagesexclusivecondition</form>\\r\\nstatementattentionBiography} else {\\nsolutionswhen the Analyticstemplatesdangeroussatellitedocumentspublisherimportantprototypeinfluence&raquo;</effectivegenerallytransformbeautifultransportorganizedpublishedprominentuntil thethumbnailNational .focus();over the migrationannouncedfooter\\\">\\nexceptionless thanexpensiveformationframeworkterritoryndicationcurrentlyclassNamecriticismtraditionelsewhereAlexanderappointedmaterialsbroadcastmentionedaffiliate</option>treatmentdifferent/default.Presidentonclick=\\\"biographyotherwisepermanentFranC'aisHollywoodexpansionstandards</style>\\nreductionDecember preferredCambridgeopponentsBusiness confusion>\\n<title>presentedexplaineddoes not worldwideinterfacepositionsnewspaper</table>\\nmountainslike the essentialfinancialselectionaction=\\\"/abandonedEducationparseInt(stabilityunable to</title>\\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper\\\">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabeth</iframe>discoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inherited</strong>CommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish</from the scheduleddownloads</label>\\nsuspectedmargin: 0spiritual</head>\\n\\nmicrosoftgraduallydiscussedhe becameexecutivejquery.jshouseholdconfirmedpurchasedliterallydestroyedup to thevariationremainingit is notcenturiesJapanese among thecompletedalgorithminterestsrebellionundefinedencourageresizableinvolvingsensitiveuniversalprovision(althoughfeaturingconducted), which continued-header\\\">February numerous overflow:componentfragmentsexcellentcolspan=\\\"technicalnear the Advanced source ofexpressedHong Kong Facebookmultiple mechanismelevationoffensive</form>\\n\\tsponsoreddocument.or &quot;there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting\\\" width=\\\".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper\\\"enough toalong thedelivered-->\\r\\n<!--American protectedNovember </style><furnitureInternet  onblur=\\\"suspendedrecipientbased on Moreover,abolishedcollectedwere madeemotionalemergencynarrativeadvocatespx;bordercommitteddir=\\\"ltr\\\"employeesresearch. selectedsuccessorcustomersdisplayedSeptemberaddClass(Facebook suggestedand lateroperatingelaborateSometimesInstitutecertainlyinstalledfollowersJerusalemthey havecomputinggeneratedprovincesguaranteearbitraryrecognizewanted topx;width:theory ofbehaviourWhile theestimatedbegan to it becamemagnitudemust havemore thanDirectoryextensionsecretarynaturallyoccurringvariablesgiven theplatform.</label><failed tocompoundskinds of societiesalongside --&gt;\\n\\nsouthwestthe rightradiationmay have unescape(spoken in\\\" href=\\\"/programmeonly the come fromdirectoryburied ina similarthey were</font></Norwegianspecifiedproducingpassenger(new DatetemporaryfictionalAfter theequationsdownload.regularlydeveloperabove thelinked tophenomenaperiod oftooltip\\\">substanceautomaticaspect ofAmong theconnectedestimatesAir Forcesystem ofobjectiveimmediatemaking itpaintingsconqueredare stillproceduregrowth ofheaded byEuropean divisionsmoleculesfranchiseintentionattractedchildhoodalso useddedicatedsingaporedegree offather ofconflicts</a></p>\\ncame fromwere usednote thatreceivingExecutiveeven moreaccess tocommanderPoliticalmusiciansdeliciousprisonersadvent ofUTF-8\\\" /><![CDATA[\\\">ContactSouthern bgcolor=\\\"series of. It was in Europepermittedvalidate.appearingofficialsseriously-languageinitiatedextendinglong-terminflationsuch thatgetCookiemarked by</button>implementbut it isincreasesdown the requiringdependent-->\\n<!-- interviewWith the copies ofconsensuswas builtVenezuela(formerlythe statepersonnelstrategicfavour ofinventionWikipediacontinentvirtuallywhich wasprincipleComplete identicalshow thatprimitiveaway frommolecularpreciselydissolvedUnder theversion=\\\">&nbsp;</It is the This is will haveorganismssome timeFriedrichwas firstthe only fact thatform id=\\\"precedingTechnicalphysicistoccurs innavigatorsection\\\">span id=\\\"sought tobelow thesurviving}</style>his deathas in thecaused bypartiallyexisting using thewas givena list oflevels ofnotion ofOfficial dismissedscientistresemblesduplicateexplosiverecoveredall othergalleries{padding:people ofregion ofaddressesassociateimg alt=\\\"in modernshould bemethod ofreportingtimestampneeded tothe Greatregardingseemed toviewed asimpact onidea thatthe Worldheight ofexpandingThese arecurrent\\\">carefullymaintainscharge ofClassicaladdressedpredictedownership<div id=\\\"right\\\">\\r\\nresidenceleave thecontent\\\">are often  })();\\r\\nprobably Professor-button\\\" respondedsays thathad to beplaced inHungarianstatus ofserves asUniversalexecutionaggregatefor whichinfectionagreed tohowever, popular\\\">placed onconstructelectoralsymbol ofincludingreturn toarchitectChristianprevious living ineasier toprofessor\\n&lt;!-- effect ofanalyticswas takenwhere thetook overbelief inAfrikaansas far aspreventedwork witha special<fieldsetChristmasRetrieved\\n\\nIn the back intonortheastmagazines><strong>committeegoverninggroups ofstored inestablisha generalits firsttheir ownpopulatedan objectCaribbeanallow thedistrictswisconsinlocation.; width: inhabitedSocialistJanuary 1</footer>similarlychoice ofthe same specific business The first.length; desire todeal withsince theuserAgentconceivedindex.phpas &quot;engage inrecently,few yearswere also\\n<head>\\n<edited byare knowncities inaccesskeycondemnedalso haveservices,family ofSchool ofconvertednature of languageministers</object>there is a popularsequencesadvocatedThey wereany otherlocation=enter themuch morereflectedwas namedoriginal a typicalwhen theyengineerscould notresidentswednesdaythe third productsJanuary 2what theya certainreactionsprocessorafter histhe last contained\\\"></div>\\n</a></td>depend onsearch\\\">\\npieces ofcompetingReferencetennesseewhich has version=</span> <</header>gives thehistorianvalue=\\\"\\\">padding:0view thattogether,the most was foundsubset ofattack onchildren,points ofpersonal position:allegedlyClevelandwas laterand afterare givenwas stillscrollingdesign ofmakes themuch lessAmericans.\\n\\nAfter , but theMuseum oflouisiana(from theminnesotaparticlesa processDominicanvolume ofreturningdefensive00px|righmade frommouseover\\\" style=\\\"states of(which iscontinuesFranciscobuilding without awith somewho woulda form ofa part ofbefore itknown as  Serviceslocation and oftenmeasuringand it ispaperbackvalues of\\r\\n<title>= window.determineer&quot; played byand early</center>from thisthe threepower andof &quot;innerHTML<a href=\\\"y:inline;Church ofthe eventvery highofficial -height: content=\\\"/cgi-bin/to createafrikaansesperantofranC'aislatvieE!ulietuviE3D\\u000CeE!tinaD\\reE!tina`9\\u0004`8\\u0017`8\\\"f\\u0017%f\\u001C,h*\\u001Eg.\\u0000d=\\u0013e-\\u0017g9\\u0001i+\\u0014e-\\u0017m\\u0015\\u001Cj5-l\\u00164d8:d;\\u0000d9\\u0008h.!g.\\u0017f\\u001C:g,\\u0014h.0f\\u001C,h(\\u000Eh+\\u0016e\\r\\u0000f\\u001C\\re\\n!e\\u0019(d:\\u0012h\\u0001\\u0014g=\\u0011f\\u0008?e\\u001C0d:'d?1d9\\u0010i\\u0003(e\\u0007:g\\t\\u0008g$>f\\u000E\\u0012h!\\u000Cf&\\u001Ci\\u0003(h\\u0010=f <h?\\u001Bd8\\u0000f-%f\\u0014/d;\\u0018e.\\u001Di*\\u000Ch/\\u0001g \\u0001e'\\u0014e\\u0011\\u0018d<\\u001Af\\u00150f\\r.e:\\u0013f6\\u0008h49h\\u0000\\u0005e\\n\\u001Ee\\u0005,e.$h.(h.:e\\u000C:f71e\\u001C3e8\\u0002f\\u0012-f\\u0014>e\\u0019(e\\u000C\\u0017d:,e8\\u0002e$'e-&g\\u0014\\u001Fh6\\nf\\u001D%h6\\ng.!g\\u0010\\u0006e\\u0011\\u0018d?!f\\u0001/g=\\u0011serviciosartC-culoargentinabarcelonacualquierpublicadoproductospolC-ticarespuestawikipediasiguientebC:squedacomunidadseguridadprincipalpreguntascontenidorespondervenezuelaproblemasdiciembrerelaciC3nnoviembresimilaresproyectosprogramasinstitutoactividadencuentraeconomC-aimC!genescontactardescargarnecesarioatenciC3ntelC)fonocomisiC3ncancionescapacidadencontraranC!lisisfavoritostC)rminosprovinciaetiquetaselementosfuncionesresultadocarC!cterpropiedadprincipionecesidadmunicipalcreaciC3ndescargaspresenciacomercialopinionesejercicioeditorialsalamancagonzC!lezdocumentopelC-cularecientesgeneralestarragonaprC!cticanovedadespropuestapacientestC)cnicasobjetivoscontactos`$.`%\\u0007`$\\u0002`$2`$?`$\\u000F`$9`%\\u0008`$\\u0002`$\\u0017`$/`$>`$8`$>`$%`$\\u000F`$5`$\\u0002`$0`$9`%\\u0007`$\\u0015`%\\u000B`$\\u0008`$\\u0015`%\\u0001`$\\u001B`$0`$9`$>`$,`$>`$&`$\\u0015`$9`$>`$8`$-`%\\u0000`$9`%\\u0001`$\\u000F`$0`$9`%\\u0000`$.`%\\u0008`$\\u0002`$&`$?`$(`$,`$>`$$diplodocs`$8`$.`$/`$0`%\\u0002`$*`$(`$>`$.`$*`$$`$>`$+`$?`$0`$\\u0014`$8`$$`$$`$0`$9`$2`%\\u000B`$\\u0017`$9`%\\u0001`$\\u0006`$,`$>`$0`$&`%\\u0007`$6`$9`%\\u0001`$\\u0008`$\\u0016`%\\u0007`$2`$/`$&`$?`$\\u0015`$>`$.`$5`%\\u0007`$,`$$`%\\u0000`$(`$,`%\\u0000`$\\u001A`$.`%\\u000C`$$`$8`$>`$2`$2`%\\u0007`$\\u0016`$\\u001C`%\\t`$,`$.`$&`$&`$$`$%`$>`$(`$9`%\\u0000`$6`$9`$0`$\\u0005`$2`$\\u0017`$\\u0015`$-`%\\u0000`$(`$\\u0017`$0`$*`$>`$8`$0`$>`$$`$\\u0015`$?`$\\u000F`$\\t`$8`%\\u0007`$\\u0017`$/`%\\u0000`$9`%\\u0002`$\\u0001`$\\u0006`$\\u0017`%\\u0007`$\\u001F`%\\u0000`$.`$\\u0016`%\\u000B`$\\u001C`$\\u0015`$>`$0`$\\u0005`$-`%\\u0000`$\\u0017`$/`%\\u0007`$$`%\\u0001`$.`$5`%\\u000B`$\\u001F`$&`%\\u0007`$\\u0002`$\\u0005`$\\u0017`$0`$\\u0010`$8`%\\u0007`$.`%\\u0007`$2`$2`$\\u0017`$>`$9`$>`$2`$\\n`$*`$0`$\\u001A`$>`$0`$\\u0010`$8`$>`$&`%\\u0007`$0`$\\u001C`$?`$8`$&`$?`$2`$,`$\\u0002`$&`$,`$(`$>`$9`%\\u0002`$\\u0002`$2`$>`$\\u0016`$\\u001C`%\\u0000`$$`$,`$\\u001F`$(`$.`$?`$2`$\\u0007`$8`%\\u0007`$\\u0006`$(`%\\u0007`$(`$/`$>`$\\u0015`%\\u0001`$2`$2`%\\t`$\\u0017`$-`$>`$\\u0017`$0`%\\u0007`$2`$\\u001C`$\\u0017`$9`$0`$>`$.`$2`$\\u0017`%\\u0007`$*`%\\u0007`$\\u001C`$9`$>`$%`$\\u0007`$8`%\\u0000`$8`$9`%\\u0000`$\\u0015`$2`$>`$ `%\\u0000`$\\u0015`$9`$>`$\\u0001`$&`%\\u0002`$0`$$`$9`$$`$8`$>`$$`$/`$>`$&`$\\u0006`$/`$>`$*`$>`$\\u0015`$\\u0015`%\\u000C`$(`$6`$>`$.`$&`%\\u0007`$\\u0016`$/`$9`%\\u0000`$0`$>`$/`$\\u0016`%\\u0001`$&`$2`$\\u0017`%\\u0000categoriesexperience</title>\\r\\nCopyright javascriptconditionseverything<p class=\\\"technologybackground<a class=\\\"management&copy; 201javaScriptcharactersbreadcrumbthemselveshorizontalgovernmentCaliforniaactivitiesdiscoveredNavigationtransitionconnectionnavigationappearance</title><mcheckbox\\\" techniquesprotectionapparentlyas well asunt', 'UA-resolutionoperationstelevisiontranslatedWashingtonnavigator. = window.impression&lt;br&gt;literaturepopulationbgcolor=\\\"#especially content=\\\"productionnewsletterpropertiesdefinitionleadershipTechnologyParliamentcomparisonul class=\\\".indexOf(\\\"conclusiondiscussioncomponentsbiologicalRevolution_containerunderstoodnoscript><permissioneach otheratmosphere onfocus=\\\"<form id=\\\"processingthis.valuegenerationConferencesubsequentwell-knownvariationsreputationphenomenondisciplinelogo.png\\\" (document,boundariesexpressionsettlementBackgroundout of theenterprise(\\\"https:\\\" unescape(\\\"password\\\" democratic<a href=\\\"/wrapper\\\">\\nmembershiplinguisticpx;paddingphilosophyassistanceuniversityfacilitiesrecognizedpreferenceif (typeofmaintainedvocabularyhypothesis.submit();&amp;nbsp;annotationbehind theFoundationpublisher\\\"assumptionintroducedcorruptionscientistsexplicitlyinstead ofdimensions onClick=\\\"considereddepartmentoccupationsoon afterinvestmentpronouncedidentifiedexperimentManagementgeographic\\\" height=\\\"link rel=\\\".replace(/depressionconferencepunishmenteliminatedresistanceadaptationoppositionwell knownsupplementdeterminedh1 class=\\\"0px;marginmechanicalstatisticscelebratedGovernment\\n\\nDuring tdevelopersartificialequivalentoriginatedCommissionattachment<span id=\\\"there wereNederlandsbeyond theregisteredjournalistfrequentlyall of thelang=\\\"en\\\" </style>\\r\\nabsolute; supportingextremely mainstream</strong> popularityemployment</table>\\r\\n colspan=\\\"</form>\\n  conversionabout the </p></div>integrated\\\" lang=\\\"enPortuguesesubstituteindividualimpossiblemultimediaalmost allpx solid #apart fromsubject toin Englishcriticizedexcept forguidelinesoriginallyremarkablethe secondh2 class=\\\"<a title=\\\"(includingparametersprohibited= \\\"http://dictionaryperceptionrevolutionfoundationpx;height:successfulsupportersmillenniumhis fatherthe &quot;no-repeat;commercialindustrialencouragedamount of unofficialefficiencyReferencescoordinatedisclaimerexpeditiondevelopingcalculatedsimplifiedlegitimatesubstring(0\\\" class=\\\"completelyillustratefive yearsinstrumentPublishing1\\\" class=\\\"psychologyconfidencenumber of absence offocused onjoined thestructurespreviously></iframe>once againbut ratherimmigrantsof course,a group ofLiteratureUnlike the</a>&nbsp;\\nfunction it was theConventionautomobileProtestantaggressiveafter the Similarly,\\\" /></div>collection\\r\\nfunctionvisibilitythe use ofvolunteersattractionunder the threatened*<![CDATA[importancein generalthe latter</form>\\n</.indexOf('i = 0; i <differencedevoted totraditionssearch forultimatelytournamentattributesso-called }\\n</style>evaluationemphasizedaccessible</section>successionalong withMeanwhile,industries</a><br />has becomeaspects ofTelevisionsufficientbasketballboth sidescontinuingan article<img alt=\\\"adventureshis mothermanchesterprinciplesparticularcommentaryeffects ofdecided to\\\"><strong>publishersJournal ofdifficultyfacilitateacceptablestyle.css\\\"\\tfunction innovation>Copyrightsituationswould havebusinessesDictionarystatementsoften usedpersistentin Januarycomprising</title>\\n\\tdiplomaticcontainingperformingextensionsmay not beconcept of onclick=\\\"It is alsofinancial making theLuxembourgadditionalare calledengaged in\\\"script\\\");but it waselectroniconsubmit=\\\"\\n<!-- End electricalofficiallysuggestiontop of theunlike theAustralianOriginallyreferences\\n</head>\\r\\nrecognisedinitializelimited toAlexandriaretirementAdventuresfour years\\n\\n&lt;!-- increasingdecorationh3 class=\\\"origins ofobligationregulationclassified(function(advantagesbeing the historians<base hrefrepeatedlywilling tocomparabledesignatednominationfunctionalinside therevelationend of thes for the authorizedrefused totake placeautonomouscompromisepolitical restauranttwo of theFebruary 2quality ofswfobject.understandnearly allwritten byinterviews\\\" width=\\\"1withdrawalfloat:leftis usuallycandidatesnewspapersmysteriousDepartmentbest knownparliamentsuppressedconvenientremembereddifferent systematichas led topropagandacontrolledinfluencesceremonialproclaimedProtectionli class=\\\"Scientificclass=\\\"no-trademarksmore than widespreadLiberationtook placeday of theas long asimprisonedAdditional\\n<head>\\n<mLaboratoryNovember 2exceptionsIndustrialvariety offloat: lefDuring theassessmenthave been deals withStatisticsoccurrence/ul></div>clearfix\\\">the publicmany yearswhich wereover time,synonymouscontent\\\">\\npresumablyhis familyuserAgent.unexpectedincluding challengeda minorityundefined\\\"belongs totaken fromin Octoberposition: said to bereligious Federation rowspan=\\\"only a fewmeant thatled to the-->\\r\\n<div <fieldset>Archbishop class=\\\"nobeing usedapproachesprivilegesnoscript>\\nresults inmay be theEaster eggmechanismsreasonablePopulationCollectionselected\\\">noscript>\\r/index.phparrival of-jssdk'));managed toincompletecasualtiescompletionChristiansSeptember arithmeticproceduresmight haveProductionit appearsPhilosophyfriendshipleading togiving thetoward theguaranteeddocumentedcolor:#000video gamecommissionreflectingchange theassociatedsans-serifonkeypress; padding:He was theunderlyingtypically , and the srcElementsuccessivesince the should be networkingaccountinguse of thelower thanshows that</span>\\n\\t\\tcomplaintscontinuousquantitiesastronomerhe did notdue to itsapplied toan averageefforts tothe futureattempt toTherefore,capabilityRepublicanwas formedElectronickilometerschallengespublishingthe formerindigenousdirectionssubsidiaryconspiracydetails ofand in theaffordablesubstancesreason forconventionitemtype=\\\"absolutelysupposedlyremained aattractivetravellingseparatelyfocuses onelementaryapplicablefound thatstylesheetmanuscriptstands for no-repeat(sometimesCommercialin Americaundertakenquarter ofan examplepersonallyindex.php?</button>\\npercentagebest-knowncreating a\\\" dir=\\\"ltrLieutenant\\n<div id=\\\"they wouldability ofmade up ofnoted thatclear thatargue thatto anotherchildren'spurpose offormulatedbased uponthe regionsubject ofpassengerspossession.\\n\\nIn the Before theafterwardscurrently across thescientificcommunity.capitalismin Germanyright-wingthe systemSociety ofpoliticiandirection:went on toremoval of New York apartmentsindicationduring theunless thehistoricalhad been adefinitiveingredientattendanceCenter forprominencereadyStatestrategiesbut in theas part ofconstituteclaim thatlaboratorycompatiblefailure of, such as began withusing the to providefeature offrom which/\\\" class=\\\"geologicalseveral ofdeliberateimportant holds thating&quot; valign=topthe Germanoutside ofnegotiatedhis careerseparationid=\\\"searchwas calledthe fourthrecreationother thanpreventionwhile the education,connectingaccuratelywere builtwas killedagreementsmuch more Due to thewidth: 100some otherKingdom ofthe entirefamous forto connectobjectivesthe Frenchpeople andfeatured\\\">is said tostructuralreferendummost oftena separate->\\n<div id Official worldwide.aria-labelthe planetand it wasd\\\" value=\\\"looking atbeneficialare in themonitoringreportedlythe modernworking onallowed towhere the innovative</a></div>soundtracksearchFormtend to beinput id=\\\"opening ofrestrictedadopted byaddressingtheologianmethods ofvariant ofChristian very largeautomotiveby far therange frompursuit offollow thebrought toin Englandagree thataccused ofcomes frompreventingdiv style=his or hertremendousfreedom ofconcerning0 1em 1em;Basketball/style.cssan earliereven after/\\\" title=\\\".com/indextaking thepittsburghcontent\\\">\\r<script>(fturned outhaving the</span>\\r\\n occasionalbecause itstarted tophysically></div>\\n  created byCurrently, bgcolor=\\\"tabindex=\\\"disastrousAnalytics also has a><div id=\\\"</style>\\n<called forsinger and.src = \\\"//violationsthis pointconstantlyis locatedrecordingsd from thenederlandsportuguC*sW\\\"W\\u0011W(W\\u0019W*Y\\u0001X'X1X3[\\u000CdesarrollocomentarioeducaciC3nseptiembreregistradodirecciC3nubicaciC3npublicidadrespuestasresultadosimportantereservadosartC-culosdiferentessiguientesrepC:blicasituaciC3nministerioprivacidaddirectorioformaciC3npoblaciC3npresidentecont\", \"enidosaccesoriostechnoratipersonalescategorC-aespecialesdisponibleactualidadreferenciavalladolidbibliotecarelacionescalendariopolC-ticasanterioresdocumentosnaturalezamaterialesdiferenciaeconC3micatransporterodrC-guezparticiparencuentrandiscusiC3nestructurafundaciC3nfrecuentespermanentetotalmenteP<P>P6P=P>P1Q\\u0003P4P5Q\\u0002P<P>P6P5Q\\u0002P2Q\\u0000P5P<Q\\u000FQ\\u0002P0P:P6P5Q\\u0007Q\\u0002P>P1Q\\u000BP1P>P;P5P5P>Q\\u0007P5P=Q\\u000CQ\\rQ\\u0002P>P3P>P:P>P3P4P0P?P>Q\\u0001P;P5P2Q\\u0001P5P3P>Q\\u0001P0P9Q\\u0002P5Q\\u0007P5Q\\u0000P5P7P<P>P3Q\\u0003Q\\u0002Q\\u0001P0P9Q\\u0002P0P6P8P7P=P8P<P5P6P4Q\\u0003P1Q\\u0003P4Q\\u0003Q\\u0002P\\u001FP>P8Q\\u0001P:P7P4P5Q\\u0001Q\\u000CP2P8P4P5P>Q\\u0001P2Q\\u000FP7P8P=Q\\u0003P6P=P>Q\\u0001P2P>P5P9P;Q\\u000EP4P5P9P?P>Q\\u0000P=P>P<P=P>P3P>P4P5Q\\u0002P5P9Q\\u0001P2P>P8Q\\u0005P?Q\\u0000P0P2P0Q\\u0002P0P:P>P9P<P5Q\\u0001Q\\u0002P>P8P<P5P5Q\\u0002P6P8P7P=Q\\u000CP>P4P=P>P9P;Q\\u0003Q\\u0007Q\\u0008P5P?P5Q\\u0000P5P4Q\\u0007P0Q\\u0001Q\\u0002P8Q\\u0007P0Q\\u0001Q\\u0002Q\\u000CQ\\u0000P0P1P>Q\\u0002P=P>P2Q\\u000BQ\\u0005P?Q\\u0000P0P2P>Q\\u0001P>P1P>P9P?P>Q\\u0002P>P<P<P5P=P5P5Q\\u0007P8Q\\u0001P;P5P=P>P2Q\\u000BP5Q\\u0003Q\\u0001P;Q\\u0003P3P>P:P>P;P>P=P0P7P0P4Q\\u0002P0P:P>P5Q\\u0002P>P3P4P0P?P>Q\\u0007Q\\u0002P8P\\u001FP>Q\\u0001P;P5Q\\u0002P0P:P8P5P=P>P2Q\\u000BP9Q\\u0001Q\\u0002P>P8Q\\u0002Q\\u0002P0P:P8Q\\u0005Q\\u0001Q\\u0000P0P7Q\\u0003P!P0P=P:Q\\u0002Q\\u0004P>Q\\u0000Q\\u0003P<P\\u001AP>P3P4P0P:P=P8P3P8Q\\u0001P;P>P2P0P=P0Q\\u0008P5P9P=P0P9Q\\u0002P8Q\\u0001P2P>P8P<Q\\u0001P2Q\\u000FP7Q\\u000CP;Q\\u000EP1P>P9Q\\u0007P0Q\\u0001Q\\u0002P>Q\\u0001Q\\u0000P5P4P8P\\u001AQ\\u0000P>P<P5P$P>Q\\u0000Q\\u0003P<Q\\u0000Q\\u000BP=P:P5Q\\u0001Q\\u0002P0P;P8P?P>P8Q\\u0001P:Q\\u0002Q\\u000BQ\\u0001Q\\u000FQ\\u0007P<P5Q\\u0001Q\\u000FQ\\u0006Q\\u0006P5P=Q\\u0002Q\\u0000Q\\u0002Q\\u0000Q\\u0003P4P0Q\\u0001P0P<Q\\u000BQ\\u0005Q\\u0000Q\\u000BP=P:P0P\\u001DP>P2Q\\u000BP9Q\\u0007P0Q\\u0001P>P2P<P5Q\\u0001Q\\u0002P0Q\\u0004P8P;Q\\u000CP<P<P0Q\\u0000Q\\u0002P0Q\\u0001Q\\u0002Q\\u0000P0P=P<P5Q\\u0001Q\\u0002P5Q\\u0002P5P:Q\\u0001Q\\u0002P=P0Q\\u0008P8Q\\u0005P<P8P=Q\\u0003Q\\u0002P8P<P5P=P8P8P<P5Q\\u000EQ\\u0002P=P>P<P5Q\\u0000P3P>Q\\u0000P>P4Q\\u0001P0P<P>P<Q\\rQ\\u0002P>P<Q\\u0003P:P>P=Q\\u0006P5Q\\u0001P2P>P5P<P:P0P:P>P9P\\u0010Q\\u0000Q\\u0005P8P2Y\\u0005Y\\u0006X*X/Y\\tX%X1X3X'Y\\u0004X1X3X'Y\\u0004X)X'Y\\u0004X9X'Y\\u0005Y\\u0003X*X(Y\\u0007X'X(X1X'Y\\u0005X,X'Y\\u0004Y\\nY\\u0008Y\\u0005X'Y\\u0004X5Y\\u0008X1X,X/Y\\nX/X)X'Y\\u0004X9X6Y\\u0008X%X6X'Y\\u0001X)X'Y\\u0004Y\\u0002X3Y\\u0005X'Y\\u0004X9X'X(X*X-Y\\u0005Y\\nY\\u0004Y\\u0005Y\\u0004Y\\u0001X'X*Y\\u0005Y\\u0004X*Y\\u0002Y\\tX*X9X/Y\\nY\\u0004X'Y\\u0004X4X9X1X#X.X(X'X1X*X7Y\\u0008Y\\nX1X9Y\\u0004Y\\nY\\u0003Y\\u0005X%X1Y\\u0001X'Y\\u0002X7Y\\u0004X(X'X*X'Y\\u0004Y\\u0004X:X)X*X1X*Y\\nX(X'Y\\u0004Y\\u0006X'X3X'Y\\u0004X4Y\\nX.Y\\u0005Y\\u0006X*X/Y\\nX'Y\\u0004X9X1X(X'Y\\u0004Y\\u0002X5X5X'Y\\u0001Y\\u0004X'Y\\u0005X9Y\\u0004Y\\nY\\u0007X'X*X-X/Y\\nX+X'Y\\u0004Y\\u0004Y\\u0007Y\\u0005X'Y\\u0004X9Y\\u0005Y\\u0004Y\\u0005Y\\u0003X*X(X)Y\\nY\\u0005Y\\u0003Y\\u0006Y\\u0003X'Y\\u0004X7Y\\u0001Y\\u0004Y\\u0001Y\\nX/Y\\nY\\u0008X%X/X'X1X)X*X'X1Y\\nX.X'Y\\u0004X5X-X)X*X3X,Y\\nY\\u0004X'Y\\u0004Y\\u0008Y\\u0002X*X9Y\\u0006X/Y\\u0005X'Y\\u0005X/Y\\nY\\u0006X)X*X5Y\\u0005Y\\nY\\u0005X#X1X4Y\\nY\\u0001X'Y\\u0004X0Y\\nY\\u0006X9X1X(Y\\nX)X(Y\\u0008X'X(X)X#Y\\u0004X9X'X(X'Y\\u0004X3Y\\u0001X1Y\\u0005X4X'Y\\u0003Y\\u0004X*X9X'Y\\u0004Y\\tX'Y\\u0004X#Y\\u0008Y\\u0004X'Y\\u0004X3Y\\u0006X)X,X'Y\\u0005X9X)X'Y\\u0004X5X-Y\\u0001X'Y\\u0004X/Y\\nY\\u0006Y\\u0003Y\\u0004Y\\u0005X'X*X'Y\\u0004X.X'X5X'Y\\u0004Y\\u0005Y\\u0004Y\\u0001X#X9X6X'X!Y\\u0003X*X'X(X)X'Y\\u0004X.Y\\nX1X1X3X'X&Y\\u0004X'Y\\u0004Y\\u0002Y\\u0004X(X'Y\\u0004X#X/X(Y\\u0005Y\\u0002X'X7X9Y\\u0005X1X'X3Y\\u0004Y\\u0005Y\\u0006X7Y\\u0002X)X'Y\\u0004Y\\u0003X*X(X'Y\\u0004X1X,Y\\u0004X'X4X*X1Y\\u0003X'Y\\u0004Y\\u0002X/Y\\u0005Y\\nX9X7Y\\nY\\u0003sByTagName(.jpg\\\" alt=\\\"1px solid #.gif\\\" alt=\\\"transparentinformationapplication\\\" onclick=\\\"establishedadvertising.png\\\" alt=\\\"environmentperformanceappropriate&amp;mdash;immediately</strong></rather thantemperaturedevelopmentcompetitionplaceholdervisibility:copyright\\\">0\\\" height=\\\"even thoughreplacementdestinationCorporation<ul class=\\\"AssociationindividualsperspectivesetTimeout(url(http://mathematicsmargin-top:eventually description) no-repeatcollections.JPG|thumb|participate/head><bodyfloat:left;<li class=\\\"hundreds of\\n\\nHowever, compositionclear:both;cooperationwithin the label for=\\\"border-top:New Zealandrecommendedphotographyinteresting&lt;sup&gt;controversyNetherlandsalternativemaxlength=\\\"switzerlandDevelopmentessentially\\n\\nAlthough </textarea>thunderbirdrepresented&amp;ndash;speculationcommunitieslegislationelectronics\\n\\t<div id=\\\"illustratedengineeringterritoriesauthoritiesdistributed6\\\" height=\\\"sans-serif;capable of disappearedinteractivelooking forit would beAfghanistanwas createdMath.floor(surroundingcan also beobservationmaintenanceencountered<h2 class=\\\"more recentit has beeninvasion of).getTime()fundamentalDespite the\\\"><div id=\\\"inspirationexaminationpreparationexplanation<input id=\\\"</a></span>versions ofinstrumentsbefore the  = 'http://Descriptionrelatively .substring(each of theexperimentsinfluentialintegrationmany peopledue to the combinationdo not haveMiddle East<noscript><copyright\\\" perhaps theinstitutionin Decemberarrangementmost famouspersonalitycreation oflimitationsexclusivelysovereignty-content\\\">\\n<td class=\\\"undergroundparallel todoctrine ofoccupied byterminologyRenaissancea number ofsupport forexplorationrecognitionpredecessor<img src=\\\"/<h1 class=\\\"publicationmay also bespecialized</fieldset>progressivemillions ofstates thatenforcementaround the one another.parentNodeagricultureAlternativeresearcherstowards theMost of themany other (especially<td width=\\\";width:100%independent<h3 class=\\\" onchange=\\\").addClass(interactionOne of the daughter ofaccessoriesbranches of\\r\\n<div id=\\\"the largestdeclarationregulationsInformationtranslationdocumentaryin order to\\\">\\n<head>\\n<\\\" height=\\\"1across the orientation);</script>implementedcan be seenthere was ademonstratecontainer\\\">connectionsthe Britishwas written!important;px; margin-followed byability to complicatedduring the immigrationalso called<h4 class=\\\"distinctionreplaced bygovernmentslocation ofin Novemberwhether the</p>\\n</div>acquisitioncalled the persecutiondesignation{font-size:appeared ininvestigateexperiencedmost likelywidely useddiscussionspresence of (document.extensivelyIt has beenit does notcontrary toinhabitantsimprovementscholarshipconsumptioninstructionfor exampleone or morepx; paddingthe currenta series ofare usuallyrole in thepreviously derivativesevidence ofexperiencescolorschemestated thatcertificate</a></div>\\n selected=\\\"high schoolresponse tocomfortableadoption ofthree yearsthe countryin Februaryso that thepeople who provided by<param nameaffected byin terms ofappointmentISO-8859-1\\\"was born inhistorical regarded asmeasurementis based on and other : function(significantcelebrationtransmitted/js/jquery.is known astheoretical tabindex=\\\"it could be<noscript>\\nhaving been\\r\\n<head>\\r\\n< &quot;The compilationhe had beenproduced byphilosopherconstructedintended toamong othercompared toto say thatEngineeringa differentreferred todifferencesbelief thatphotographsidentifyingHistory of Republic ofnecessarilyprobabilitytechnicallyleaving thespectacularfraction ofelectricityhead of therestaurantspartnershipemphasis onmost recentshare with saying thatfilled withdesigned toit is often\\\"></iframe>as follows:merged withthrough thecommercial pointed outopportunityview of therequirementdivision ofprogramminghe receivedsetInterval\\\"></span></in New Yorkadditional compression\\n\\n<div id=\\\"incorporate;</script><attachEventbecame the \\\" target=\\\"_carried outSome of thescience andthe time ofContainer\\\">maintainingChristopherMuch of thewritings of\\\" height=\\\"2size of theversion of mixture of between theExamples ofeducationalcompetitive onsubmit=\\\"director ofdistinctive/DTD XHTML relating totendency toprovince ofwhich woulddespite thescientific legislature.innerHTML allegationsAgriculturewas used inapproach tointelligentyears later,sans-serifdeterminingPerformanceappearances, which is foundationsabbreviatedhigher thans from the individual composed ofsupposed toclaims thatattributionfont-size:1elements ofHistorical his brotherat the timeanniversarygoverned byrelated to ultimately innovationsit is stillcan only bedefinitionstoGMTStringA number ofimg class=\\\"Eventually,was changedoccurred inneighboringdistinguishwhen he wasintroducingterrestrialMany of theargues thatan Americanconquest ofwidespread were killedscreen and In order toexpected todescendantsare locatedlegislativegenerations backgroundmost peopleyears afterthere is nothe highestfrequently they do notargued thatshowed thatpredominanttheologicalby the timeconsideringshort-lived</span></a>can be usedvery littleone of the had alreadyinterpretedcommunicatefeatures ofgovernment,</noscript>entered the\\\" height=\\\"3Independentpopulationslarge-scale. Although used in thedestructionpossibilitystarting intwo or moreexpressionssubordinatelarger thanhistory and</option>\\r\\nContinentaleliminatingwill not bepractice ofin front ofsite of theensure thatto create amississippipotentiallyoutstandingbetter thanwhat is nowsituated inmeta name=\\\"TraditionalsuggestionsTranslationthe form ofatmosphericideologicalenterprisescalculatingeast of theremnants ofpluginspage/index.php?remained intransformedHe was alsowas alreadystatisticalin favor ofMinistry ofmovement offormulationis required<link rel=\\\"This is the <a href=\\\"/popularizedinvolved inare used toand severalmade by theseems to belikely thatPalestiniannamed afterit had beenmost commonto refer tobut this isconsecutivetemporarilyIn general,conventionstakes placesubdivisionterritorialoperationalpermanentlywas largelyoutbreak ofin the pastfollowing a xmlns:og=\\\"><a class=\\\"class=\\\"textConversion may be usedmanufactureafter beingclearfix\\\">\\nquestion ofwas electedto become abecause of some peopleinspired bysuccessful a time whenmore commonamongst thean officialwidth:100%;technology,was adoptedto keep thesettlementslive birthsindex.html\\\"Connecticutassigned to&amp;times;account foralign=rightthe companyalways beenreturned toinvolvementBecause thethis period\\\" name=\\\"q\\\" confined toa result ofvalue=\\\"\\\" />is actuallyEnvironment\\r\\n</head>\\r\\nConversely,>\\n<div id=\\\"0\\\" width=\\\"1is probablyhave becomecontrollingthe problemcitizens ofpoliticiansreached theas early as:none; over<table cellvalidity ofdirectly toonmousedownwhere it iswhen it wasmembers of relation toaccommodatealong with In the latethe Englishdelicious\\\">this is notthe presentif they areand finallya matter of\\r\\n\\t</div>\\r\\n\\r\\n</script>faster thanmajority ofafter whichcomparativeto maintainimprove theawarded theer\\\" class=\\\"frameborderrestorationin the sameanalysis oftheir firstDuring the continentalsequence offunction(){font-size: work on the</script>\\n<begins withjavascript:constituentwas foundedequilibriumassume thatis given byneeds to becoordinatesthe variousare part ofonly in thesections ofis a commontheories ofdiscoveriesassociationedge of thestrength ofposition inpresent-dayuniversallyto form thebut insteadcorporationattached tois commonlyreasons for &quot;the can be madewas able towhich meansbut did notonMouseOveras possibleoperated bycoming fromthe primaryaddition offor severaltransferreda period ofare able tohowever, itshould havemuch larger\\n\\t</script>adopted theproperty ofdirected byeffectivelywas broughtchildren ofProgramminglonger thanmanuscriptswar againstby means ofand most ofsimilar to proprietaryoriginatingprestigiousgrammaticalexperience.to make theIt was alsois found incompetitorsin the U.S.replace thebrought thecalculationfall of thethe generalpracticallyin honor ofreleased inresidentialand some ofking of thereaction to1st Earl ofculture andprincipally</title>\\n  they can beback to thesome of hisexposure toare similarform of theaddFavoritecitizenshippart in thepeople within practiceto continue&amp;minus;approved by the first allowed theand for thefunctioningplaying thesolution toheight=\\\"0\\\" in his bookmore than afollows thecreated thepresence in&nbsp;</td>nationalistthe idea ofa characterwere forced class=\\\"btndays of thefeatured inshowing theinterest inin place ofturn of thethe head ofLord of thepoliticallyhas its ownEducationalapproval ofsome of theeach other,behavior ofand becauseand anotherappeared onrecorded inblack&quot;may includethe world'scan lead torefers to aborder=\\\"0\\\" government winning theresulted in while the Washington,the subjectcity in the></div>\\r\\n\\t\\treflect theto completebecame moreradioactiverejected bywithout anyhis father,which couldcopy of theto indicatea politicalaccounts ofconstitutesworked wither</a></li>of his lifeaccompaniedclientWidthprevent theLegislativedifferentlytogether inhas severalfor anothertext of thefounded thee with the is used forchanged theusually theplace wherewhereas the> <a href=\\\"\\\"><a href=\\\"themselves,although hethat can betraditionalrole of theas a resultremoveChilddesigned bywest of theSome peopleproduction,side of thenewslettersused by thedown to theaccepted bylive in theattempts tooutside thefrequenciesHowever, inprogrammersat least inapproximatealthough itwas part ofand variousGovernor ofthe articleturned into><a href=\\\"/the economyis the mostmost widelywould laterand perhapsrise to theoccurs whenunder whichconditions.the westerntheory thatis producedthe city ofin which heseen in thethe centralbuilding ofmany of hisarea of theis the onlymost of themany of thethe WesternThere is noextended toStatisticalcolspan=2 |short storypossible totopologicalcritical ofreported toa Christiandecision tois equal toproblems ofThis can bemerchandisefor most ofno evidenceeditions ofelements in&quot;. Thecom/images/which makesthe processremains theliterature,is a memberthe popularthe ancientproblems intime of thedefeated bybody of thea few yearsmuch of thethe work ofCalifornia,served as agovernment.concepts ofmovement in\\t\\t<div id=\\\"it\\\" value=\\\"language ofas they areproduced inis that theexplain thediv></div>\\nHowever thelead to the\\t<a href=\\\"/was grantedpeople havecontinuallywas seen asand relatedthe role ofproposed byof the besteach other.Constantinepeople fromdialects ofto revisionwas renameda source ofthe initiallaunched inprovide theto the westwhere thereand similarbetween twois also theEnglish andconditions,that it wasentitled tothemselves.quantity ofransparencythe same asto join thecountry andthis is theThis led toa statementcontrast tolastIndexOfthrough hisis designedthe term isis providedprotect theng</a></li>The currentthe site ofsubstantialexperience,in the Westthey shouldslovenD\\rinacomentariosuniversidadcondicionesactividadesexperienciatecnologC-aproducciC3npuntuaciC3naplicaciC3ncontraseC1acategorC-asregistrarseprofesionaltratamientoregC-stratesecretarC-aprincipalesprotecciC3nimportantesimportanciaposibilidadinteresantecrecimientonecesidadessuscribirseasociaciC3ndisponiblesevaluaciC3nestudiantesresponsableresoluciC3nguadalajararegistradosoportunidadcomercialesfotografC-aautoridadesingenierC-atelevisiC3ncompetenciaoperacionesestablecidosimplementeactualmentenavegaciC3nconformidadline-height:font-family:\\\" : \\\"http://applicationslink\\\" href=\\\"specifically//<![CDATA[\\nOrganizationdistribution0px; height:relationshipdevice-width<div class=\\\"<label for=\\\"registration</noscript>\\n/index.html\\\"window.open( !important;application/independence//www.googleorganizationautocompleterequirementsconservative<form name=\\\"intellectualmargin-left:18th centuryan importantinstitutionsabbreviation<img class=\\\"organisationcivilization19th centuryarchitectureincorporated20th century-container\\\">most notably/></a></div>notification'undefined')Furthermore,believe thatinnerHTML = prior to thedramaticallyreferring tonegotiationsheadquartersSouth AfricaunsuccessfulPennsylvaniaAs a result,<html lang=\\\"&lt;/sup&gt;dealing withphiladelphiahistorically);</script>\\npadding-top:experimentalgetAttributeinstructionstechnologiespart of the =function(){subscriptionl.dtd\\\">\\r\\n<htgeographicalConstitution', function(supported byagriculturalconstructionpublicationsfont-size: 1a variety of<div style=\\\"Encyclopediaiframe src=\\\"demonstratedaccomplisheduniversitiesDemographics);</script><dedicated toknowledge ofsatisfactionparticularly</div></div>English (US)appendChild(transmissions. However, intelligence\\\" tabindex=\\\"float:right;Commonwealthranging fromin which theat least onereproductionencyclopedia;font-size:1jurisdictionat that time\\\"><a class=\\\"In addition,description+conversationcontact withis generallyr\\\" content=\\\"representing&lt;math&gt;presentationoccasionally<img width=\\\"navigation\\\">compensationchampionshipmedia=\\\"all\\\" violation ofreference toreturn true;Strict//EN\\\" transactionsinterventionverificationInformation difficultiesChampionshipcapabilities<![endif]-->}\\n</script>\\nChristianityfor example,Professionalrestrictionssuggest thatwas released(such as theremoveClass(unemploymentthe Americanstructure of/index.html published inspan class=\\\"\\\"><a href=\\\"/introductionbelonging toclaimed thatconsequences<meta name=\\\"Guide to theoverwhelmingagainst the concentrated,\\n.nontouch observations</a>\\n</div>\\nf (document.border: 1px {font-size:1treatment of0\\\" height=\\\"1modificationIndependencedivided intogreater thanachievementsestablishingJavaScript\\\" neverthelesssignificanceBroadcasting>&nbsp;</td>container\\\">\\nsuch as the influence ofa particularsrc='http://navigation\\\" half of the substantial &nbsp;</div>advantage ofdiscovery offundamental metropolitanthe opposite\\\" xml:lang=\\\"deliberatelyalign=centerevolution ofpreservationimprovementsbeginning inJesus ChristPublicationsdisagreementtext-align:r, function()similaritiesbody></html>is currentlyalphabeticalis sometimestype=\\\"image/many of the flow:hidden;available indescribe theexistence ofall over thethe Internet\\t<ul class=\\\"installationneighborhoodarmed forcesreducing thecontinues toNonetheless,temperatures\\n\\t\\t<a href=\\\"close to theexamples of is about the(see below).\\\" id=\\\"searchprofessionalis availablethe official\\t\\t</script>\\n\\n\\t\\t<div id=\\\"accelerationthrough the Hall of Famedescriptionstranslationsinterference type='text/recent yearsin the worldvery popular{background:traditional some of the connected toexploitationemergence ofconstitutionA History ofsignificant manufacturedexpectations><noscript><can be foundbecause the has not beenneighbouringwithout the added to the\\t<li class=\\\"instrumentalSoviet Unionacknowledgedwhich can bename for theattention toattempts to developmentsIn fact, the<li class=\\\"aimplicationssuitable formuch of the colonizationpresidentialcancelBubble Informationmost of the is describedrest of the more or lessin SeptemberIntelligencesrc=\\\"http://px; height: available tomanufacturerhuman rightslink href=\\\"/availabilityproportionaloutside the astronomicalhuman beingsname of the are found inare based onsmaller thana person whoexpansion ofarguing thatnow known asIn the earlyintermediatederived fromScandinavian</a></div>\\r\\nconsider thean estimatedthe National<div id=\\\"pagresulting incommissionedanalogous toare required/ul>\\n</div>\\nwas based onand became a&nbsp;&nbsp;t\\\" value=\\\"\\\" was capturedno more thanrespectivelycontinue to >\\r\\n<head>\\r\\n<were createdmore generalinformation used for theindependent the Imperialcomponent ofto the northinclude the Constructionside of the would not befor instanceinvention ofmore complexcollectivelybackground: text-align: its originalinto accountthis processan extensivehowever, thethey are notrejected thecriticism ofduring whichprobably thethis article(function(){It should bean agreementaccidentallydiffers fromArchitecturebetter knownarrangementsinfluence onattended theidentical tosouth of thepass throughxml\\\" title=\\\"weight:bold;creating thedisplay:nonereplaced the<img src=\\\"/ihttps://www.World War IItestimonialsfound in therequired to and that thebetween the was designedconsists of considerablypublished bythe languageConservationconsisted ofrefer to theback to the css\\\" media=\\\"People from available onproved to besuggestions\\\"was known asvarieties oflikely to becomprised ofsupport the hands of thecoupled withconnect and border:none;performancesbefore beinglater becamecalculationsoften calledresidents ofmeaning that><li class=\\\"evidence forexplanationsenvironments\\\"></a></div>which allowsIntroductiondeveloped bya wide rangeon behalf ofvalign=\\\"top\\\"principle ofat the time,</noscript>\\rsaid to havein the firstwhile othershypotheticalphilosopherspower of thecontained inperformed byinability towere writtenspan style=\\\"input name=\\\"the questionintended forrejection ofimplies thatinvented thethe standardwas probablylink betweenprofessor ofinteractionschanging theIndian Ocean class=\\\"lastworking with'http://www.years beforeThis was therecreationalentering themeasurementsan extremelyvalue of thestart of the\\n</script>\\n\\nan effort toincrease theto the southspacing=\\\"0\\\">sufficientlythe Europeanconverted toclearTimeoutdid not haveconsequentlyfor the nextextension ofeconomic andalthough theare producedand with theinsufficientgiven by thestating thatexpenditures</span></a>\\nthought thaton the basiscellpadding=image of thereturning toinformation,separated byassassinateds\\\" content=\\\"authority ofnorthwestern</div>\\n<div \\\"></div>\\r\\n  consultationcommunity ofthe nationalit should beparticipants align=\\\"leftthe greatestselection ofsupernaturaldependent onis mentionedallowing thewas inventedaccompanyinghis personalavailable atstudy of theon the otherexecution ofHuman Rightsterms of theassociationsresearch andsucceeded bydefeated theand from thebut they arecommander ofstate of theyears of agethe study of<ul class=\\\"splace in thewhere he was<li class=\\\"fthere are nowhich becamehe publishedexpressed into which thecommissionerfont-weight:territory ofextensions\\\">Roman Empireequal to theIn contrast,however, andis typicallyand his wife(also called><ul class=\\\"effectively evolved intoseem to havewhich is thethere was noan excellentall of thesedescribed byIn practice,broadcastingcharged withreflected insubjected tomilitary andto the pointeconomicallysetTargetingare actuallyvictory over();</script>continuouslyrequired forevolutionaryan effectivenorth of the, which was front of theor otherwisesome form ofhad not beengenerated byinformation.permitted toincludes thedevelopment,entered intothe previousconsistentlyare known asthe field ofthis type ofgiven to thethe title ofcontains theinstances ofin the northdue to theirare designedcorporationswas that theone of thesemore popularsucceeded insupport fromin differentdominated bydesigned forownership ofand possiblystandardizedresponseTextwas intendedreceived theassumed thatareas of theprimarily inthe basis ofin the senseaccounts fordestroyed byat least twowas declaredcould not beSecretary ofappear to bemargin-top:1/^\\\\s+|\\\\s+$/ge){throw e};the start oftwo separatelanguage andwho had beenoperation ofdeath of thereal numbers\\t<link rel=\\\"provided thethe story ofcompetitionsenglish (UK)english (US)P\\u001CP>P=P3P>P;P!Q\\u0000P?Q\\u0001P:P8Q\\u0001Q\\u0000P?Q\\u0001P:P8Q\\u0001Q\\u0000P?Q\\u0001P:P>Y\\u0004X9X1X(Y\\nX)f-#i+\\u0014d8-f\\u0016\\u0007g.\\u0000d=\\u0013d8-f\\u0016\\u0007g9\\u0001d=\\u0013d8-f\\u0016\\u0007f\\u001C\\ti\\u0019\\u0010e\\u0005,e\\u000F8d::f0\\u0011f\\u0014?e:\\u001Ci\\u0018?i\\u0007\\u000Ce74e74g$>d<\\u001Ad8;d9\\tf\\u0013\\rd=\\u001Cg3;g;\\u001Ff\\u0014?g-\\u0016f3\\u0015h'\\u0004informaciC3nherramientaselectrC3nicodescripciC3nclasificadosconocimientopublicaciC3nrelacionadasinformC!ticarelacionadosdepartamentotrabajadoresdirectamenteayuntamientomercadoLibrecontC!ctenoshabitacionescumplimientorestaurantesdisposiciC3nconsecuenciaelectrC3nicaaplicacionesdesconectadoinstalaciC3nrealizaciC3nutilizaciC3nenciclopediaenfermedadesinstrumentosexperienciasinstituciC3nparticularessubcategoriaQ\\u0002P>P;Q\\u000CP:P>P P>Q\\u0001Q\\u0001P8P8Q\\u0000P0P1P>Q\\u0002Q\\u000BP1P>P;Q\\u000CQ\\u0008P5P?Q\\u0000P>Q\\u0001Q\\u0002P>P<P>P6P5Q\\u0002P5P4Q\\u0000Q\\u0003P3P8Q\\u0005Q\\u0001P;Q\\u0003Q\\u0007P0P5Q\\u0001P5P9Q\\u0007P0Q\\u0001P2Q\\u0001P5P3P4P0P P>Q\\u0001Q\\u0001P8Q\\u000FP\\u001CP>Q\\u0001P:P2P5P4Q\\u0000Q\\u0003P3P8P5P3P>Q\\u0000P>P4P0P2P>P?Q\\u0000P>Q\\u0001P4P0P=P=Q\\u000BQ\\u0005P4P>P;P6P=Q\\u000BP8P<P5P=P=P>P\\u001CP>Q\\u0001P:P2Q\\u000BQ\\u0000Q\\u0003P1P;P5P9P\\u001CP>Q\\u0001P:P2P0Q\\u0001Q\\u0002Q\\u0000P0P=Q\\u000BP=P8Q\\u0007P5P3P>Q\\u0000P0P1P>Q\\u0002P5P4P>P;P6P5P=Q\\u0003Q\\u0001P;Q\\u0003P3P8Q\\u0002P5P?P5Q\\u0000Q\\u000CP\\u001EP4P=P0P:P>P?P>Q\\u0002P>P<Q\\u0003Q\\u0000P0P1P>Q\\u0002Q\\u0003P0P?Q\\u0000P5P;Q\\u000FP2P>P>P1Q\\tP5P>P4P=P>P3P>Q\\u0001P2P>P5P3P>Q\\u0001Q\\u0002P0Q\\u0002Q\\u000CP8P4Q\\u0000Q\\u0003P3P>P9Q\\u0004P>Q\\u0000Q\\u0003P<P5Q\\u0005P>Q\\u0000P>Q\\u0008P>P?Q\\u0000P>Q\\u0002P8P2Q\\u0001Q\\u0001Q\\u000BP;P:P0P:P0P6P4Q\\u000BP9P2P;P0Q\\u0001Q\\u0002P8P3Q\\u0000Q\\u0003P?P?Q\\u000BP2P<P5Q\\u0001Q\\u0002P5Q\\u0000P0P1P>Q\\u0002P0Q\\u0001P:P0P7P0P;P?P5Q\\u0000P2Q\\u000BP9P4P5P;P0Q\\u0002Q\\u000CP4P5P=Q\\u000CP3P8P?P5Q\\u0000P8P>P4P1P8P7P=P5Q\\u0001P>Q\\u0001P=P>P2P5P<P>P<P5P=Q\\u0002P:Q\\u0003P?P8Q\\u0002Q\\u000CP4P>P;P6P=P0Q\\u0000P0P<P:P0Q\\u0005P=P0Q\\u0007P0P;P>P P0P1P>Q\\u0002P0P\\\"P>P;Q\\u000CP:P>Q\\u0001P>P2Q\\u0001P5P<P2Q\\u0002P>Q\\u0000P>P9P=P0Q\\u0007P0P;P0Q\\u0001P?P8Q\\u0001P>P:Q\\u0001P;Q\\u0003P6P1Q\\u000BQ\\u0001P8Q\\u0001Q\\u0002P5P<P?P5Q\\u0007P0Q\\u0002P8P=P>P2P>P3P>P?P>P<P>Q\\tP8Q\\u0001P0P9Q\\u0002P>P2P?P>Q\\u0007P5P<Q\\u0003P?P>P<P>Q\\tQ\\u000CP4P>P;P6P=P>Q\\u0001Q\\u0001Q\\u000BP;P:P8P1Q\\u000BQ\\u0001Q\\u0002Q\\u0000P>P4P0P=P=Q\\u000BP5P<P=P>P3P8P5P?Q\\u0000P>P5P:Q\\u0002P!P5P9Q\\u0007P0Q\\u0001P<P>P4P5P;P8Q\\u0002P0P:P>P3P>P>P=P;P0P9P=P3P>Q\\u0000P>P4P5P2P5Q\\u0000Q\\u0001P8Q\\u000FQ\\u0001Q\\u0002Q\\u0000P0P=P5Q\\u0004P8P;Q\\u000CP<Q\\u000BQ\\u0003Q\\u0000P>P2P=Q\\u000FQ\\u0000P0P7P=Q\\u000BQ\\u0005P8Q\\u0001P:P0Q\\u0002Q\\u000CP=P5P4P5P;Q\\u000EQ\\u000FP=P2P0Q\\u0000Q\\u000FP<P5P=Q\\u000CQ\\u0008P5P<P=P>P3P8Q\\u0005P4P0P=P=P>P9P7P=P0Q\\u0007P8Q\\u0002P=P5P;Q\\u000CP7Q\\u000FQ\\u0004P>Q\\u0000Q\\u0003P<P0P\\\"P5P?P5Q\\u0000Q\\u000CP<P5Q\\u0001Q\\u000FQ\\u0006P0P7P0Q\\tP8Q\\u0002Q\\u000BP\\u001BQ\\u0003Q\\u0007Q\\u0008P8P5`$(`$9`%\\u0000`$\\u0002`$\\u0015`$0`$(`%\\u0007`$\\u0005`$*`$(`%\\u0007`$\\u0015`$?`$/`$>`$\\u0015`$0`%\\u0007`$\\u0002`$\\u0005`$(`%\\r`$/`$\\u0015`%\\r`$/`$>`$\\u0017`$>`$\\u0007`$!`$,`$>`$0`%\\u0007`$\\u0015`$?`$8`%\\u0000`$&`$?`$/`$>`$*`$9`$2`%\\u0007`$8`$?`$\\u0002`$9`$-`$>`$0`$$`$\\u0005`$*`$(`%\\u0000`$5`$>`$2`%\\u0007`$8`%\\u0007`$5`$>`$\\u0015`$0`$$`%\\u0007`$.`%\\u0007`$0`%\\u0007`$9`%\\u000B`$(`%\\u0007`$8`$\\u0015`$$`%\\u0007`$,`$9`%\\u0001`$$`$8`$>`$\\u0007`$\\u001F`$9`%\\u000B`$\\u0017`$>`$\\u001C`$>`$(`%\\u0007`$.`$?`$(`$\\u001F`$\\u0015`$0`$$`$>`$\\u0015`$0`$(`$>`$\\t`$(`$\\u0015`%\\u0007`$/`$9`$>`$\\u0001`$8`$,`$8`%\\u0007`$-`$>`$7`$>`$\\u0006`$*`$\\u0015`%\\u0007`$2`$?`$/`%\\u0007`$6`%\\u0001`$0`%\\u0002`$\\u0007`$8`$\\u0015`%\\u0007`$\\u0018`$\\u0002`$\\u001F`%\\u0007`$.`%\\u0007`$0`%\\u0000`$8`$\\u0015`$$`$>`$.`%\\u0007`$0`$>`$2`%\\u0007`$\\u0015`$0`$\\u0005`$'`$?`$\\u0015`$\\u0005`$*`$(`$>`$8`$.`$>`$\\u001C`$.`%\\u0001`$\\u001D`%\\u0007`$\\u0015`$>`$0`$#`$9`%\\u000B`$$`$>`$\\u0015`$!`$<`%\\u0000`$/`$9`$>`$\\u0002`$9`%\\u000B`$\\u001F`$2`$6`$,`%\\r`$&`$2`$?`$/`$>`$\\u001C`%\\u0000`$5`$(`$\\u001C`$>`$$`$>`$\\u0015`%\\u0008`$8`%\\u0007`$\\u0006`$*`$\\u0015`$>`$5`$>`$2`%\\u0000`$&`%\\u0007`$(`%\\u0007`$*`%\\u0002`$0`%\\u0000`$*`$>`$(`%\\u0000`$\\t`$8`$\\u0015`%\\u0007`$9`%\\u000B`$\\u0017`%\\u0000`$,`%\\u0008`$ `$\\u0015`$\\u0006`$*`$\\u0015`%\\u0000`$5`$0`%\\r`$7`$\\u0017`$>`$\\u0002`$5`$\\u0006`$*`$\\u0015`%\\u000B`$\\u001C`$?`$2`$>`$\\u001C`$>`$(`$>`$8`$9`$.`$$`$9`$.`%\\u0007`$\\u0002`$\\t`$(`$\\u0015`%\\u0000`$/`$>`$9`%\\u0002`$&`$0`%\\r`$\\u001C`$8`%\\u0002`$\\u001A`%\\u0000`$*`$8`$\\u0002`$&`$8`$5`$>`$2`$9`%\\u000B`$(`$>`$9`%\\u000B`$$`%\\u0000`$\\u001C`%\\u0008`$8`%\\u0007`$5`$>`$*`$8`$\\u001C`$(`$$`$>`$(`%\\u0007`$$`$>`$\\u001C`$>`$0`%\\u0000`$\\u0018`$>`$/`$2`$\\u001C`$?`$2`%\\u0007`$(`%\\u0000`$\\u001A`%\\u0007`$\\u001C`$>`$\\u0002`$\\u001A`$*`$$`%\\r`$0`$\\u0017`%\\u0002`$\\u0017`$2`$\\u001C`$>`$$`%\\u0007`$,`$>`$9`$0`$\\u0006`$*`$(`%\\u0007`$5`$>`$9`$(`$\\u0007`$8`$\\u0015`$>`$8`%\\u0001`$,`$9`$0`$9`$(`%\\u0007`$\\u0007`$8`$8`%\\u0007`$8`$9`$?`$$`$,`$!`$<`%\\u0007`$\\u0018`$\\u001F`$(`$>`$$`$2`$>`$6`$*`$>`$\\u0002`$\\u001A`$6`%\\r`$0`%\\u0000`$,`$!`$<`%\\u0000`$9`%\\u000B`$$`%\\u0007`$8`$>`$\\u0008`$\\u001F`$6`$>`$/`$&`$8`$\\u0015`$$`%\\u0000`$\\u001C`$>`$$`%\\u0000`$5`$>`$2`$>`$9`$\\u001C`$>`$0`$*`$\\u001F`$(`$>`$0`$\\u0016`$(`%\\u0007`$8`$!`$<`$\\u0015`$.`$?`$2`$>`$\\t`$8`$\\u0015`%\\u0000`$\\u0015`%\\u0007`$5`$2`$2`$\\u0017`$$`$>`$\\u0016`$>`$(`$>`$\\u0005`$0`%\\r`$%`$\\u001C`$9`$>`$\\u0002`$&`%\\u0007`$\\u0016`$>`$*`$9`$2`%\\u0000`$(`$?`$/`$.`$,`$?`$(`$>`$,`%\\u0008`$\\u0002`$\\u0015`$\\u0015`$9`%\\u0000`$\\u0002`$\\u0015`$9`$(`$>`$&`%\\u0007`$$`$>`$9`$.`$2`%\\u0007`$\\u0015`$>`$+`%\\u0000`$\\u001C`$,`$\\u0015`$?`$$`%\\u0001`$0`$$`$.`$>`$\\u0002`$\\u0017`$5`$9`%\\u0000`$\\u0002`$0`%\\u000B`$\\u001C`$<`$.`$?`$2`%\\u0000`$\\u0006`$0`%\\u000B`$*`$8`%\\u0007`$(`$>`$/`$>`$&`$5`$2`%\\u0007`$(`%\\u0007`$\\u0016`$>`$$`$>`$\\u0015`$0`%\\u0000`$,`$\\t`$(`$\\u0015`$>`$\\u001C`$5`$>`$,`$*`%\\u0002`$0`$>`$,`$!`$<`$>`$8`%\\u000C`$&`$>`$6`%\\u0007`$/`$0`$\\u0015`$?`$/`%\\u0007`$\\u0015`$9`$>`$\\u0002`$\\u0005`$\\u0015`$8`$0`$,`$(`$>`$\\u000F`$5`$9`$>`$\\u0002`$8`%\\r`$%`$2`$.`$?`$2`%\\u0007`$2`%\\u0007`$\\u0016`$\\u0015`$5`$?`$7`$/`$\\u0015`%\\r`$0`$\\u0002`$8`$.`%\\u0002`$9`$%`$>`$(`$>X*X3X*X7Y\\nX9Y\\u0005X4X'X1Y\\u0003X)X(Y\\u0008X'X3X7X)X'Y\\u0004X5Y\\u0001X-X)Y\\u0005Y\\u0008X'X6Y\\nX9X'Y\\u0004X.X'X5X)X'Y\\u0004Y\\u0005X2Y\\nX/X'Y\\u0004X9X'Y\\u0005X)X'Y\\u0004Y\\u0003X'X*X(X'Y\\u0004X1X/Y\\u0008X/X(X1Y\\u0006X'Y\\u0005X,X'Y\\u0004X/Y\\u0008Y\\u0004X)X'Y\\u0004X9X'Y\\u0004Y\\u0005X'Y\\u0004Y\\u0005Y\\u0008Y\\u0002X9X'Y\\u0004X9X1X(Y\\nX'Y\\u0004X3X1Y\\nX9X'Y\\u0004X,Y\\u0008X'Y\\u0004X'Y\\u0004X0Y\\u0007X'X(X'Y\\u0004X-Y\\nX'X)X'Y\\u0004X-Y\\u0002Y\\u0008Y\\u0002X'Y\\u0004Y\\u0003X1Y\\nY\\u0005X'Y\\u0004X9X1X'Y\\u0002Y\\u0005X-Y\\u0001Y\\u0008X8X)X'Y\\u0004X+X'Y\\u0006Y\\nY\\u0005X4X'Y\\u0007X/X)X'Y\\u0004Y\\u0005X1X#X)X'Y\\u0004Y\\u0002X1X\\\"Y\\u0006X'Y\\u0004X4X(X'X(X'Y\\u0004X-Y\\u0008X'X1X'Y\\u0004X,X/Y\\nX/X'Y\\u0004X#X3X1X)X'Y\\u0004X9Y\\u0004Y\\u0008Y\\u0005Y\\u0005X,Y\\u0005Y\\u0008X9X)X'Y\\u0004X1X-Y\\u0005Y\\u0006X'Y\\u0004Y\\u0006Y\\u0002X'X7Y\\u0001Y\\u0004X3X7Y\\nY\\u0006X'Y\\u0004Y\\u0003Y\\u0008Y\\nX*X'Y\\u0004X/Y\\u0006Y\\nX'X(X1Y\\u0003X'X*Y\\u0007X'Y\\u0004X1Y\\nX'X6X*X-Y\\nX'X*Y\\nX(X*Y\\u0008Y\\u0002Y\\nX*X'Y\\u0004X#Y\\u0008Y\\u0004Y\\tX'Y\\u0004X(X1Y\\nX/X'Y\\u0004Y\\u0003Y\\u0004X'Y\\u0005X'Y\\u0004X1X'X(X7X'Y\\u0004X4X.X5Y\\nX3Y\\nX'X1X'X*X'Y\\u0004X+X'Y\\u0004X+X'Y\\u0004X5Y\\u0004X'X)X'Y\\u0004X-X/Y\\nX+X'Y\\u0004X2Y\\u0008X'X1X'Y\\u0004X.Y\\u0004Y\\nX,X'Y\\u0004X,Y\\u0005Y\\nX9X'Y\\u0004X9X'Y\\u0005Y\\u0007X'Y\\u0004X,Y\\u0005X'Y\\u0004X'Y\\u0004X3X'X9X)Y\\u0005X4X'Y\\u0007X/Y\\u0007X'Y\\u0004X1X&Y\\nX3X'Y\\u0004X/X.Y\\u0008Y\\u0004X'Y\\u0004Y\\u0001Y\\u0006Y\\nX)X'Y\\u0004Y\\u0003X*X'X(X'Y\\u0004X/Y\\u0008X1Y\\nX'Y\\u0004X/X1Y\\u0008X3X'X3X*X:X1Y\\u0002X*X5X'Y\\u0005Y\\nY\\u0005X'Y\\u0004X(Y\\u0006X'X*X'Y\\u0004X9X8Y\\nY\\u0005entertainmentunderstanding = function().jpg\\\" width=\\\"configuration.png\\\" width=\\\"<body class=\\\"Math.random()contemporary United Statescircumstances.appendChild(organizations<span class=\\\"\\\"><img src=\\\"/distinguishedthousands of communicationclear\\\"></div>investigationfavicon.ico\\\" margin-right:based on the Massachusettstable border=internationalalso known aspronunciationbackground:#fpadding-left:For example, miscellaneous&lt;/math&gt;psychologicalin particularearch\\\" type=\\\"form method=\\\"as opposed toSupreme Courtoccasionally Additionally,North Americapx;backgroundopportunitiesEntertainment.toLowerCase(manufacturingprofessional combined withFor instance,consisting of\\\" maxlength=\\\"return false;consciousnessMediterraneanextraordinaryassassinationsubsequently button type=\\\"the number ofthe original comprehensiverefers to the</ul>\\n</div>\\nphilosophicallocation.hrefwas publishedSan Francisco(function(){\\n<div id=\\\"mainsophisticatedmathematical /head>\\r\\n<bodysuggests thatdocumentationconcentrationrelationshipsmay have been(for example,This article in some casesparts of the definition ofGreat Britain cellpadding=equivalent toplaceholder=\\\"; font-size: justificationbelieved thatsuffered fromattempted to leader of thecript\\\" src=\\\"/(function() {are available\\n\\t<link rel=\\\" src='http://interested inconventional \\\" alt=\\\"\\\" /></are generallyhas also beenmost popular correspondingcredited withtyle=\\\"border:</a></span></.gif\\\" width=\\\"<iframe src=\\\"table class=\\\"inline-block;according to together withapproximatelyparliamentarymore and moredisplay:none;traditionallypredominantly&nbsp;|&nbsp;&nbsp;</span> cellspacing=<input name=\\\"or\\\" content=\\\"controversialproperty=\\\"og:/x-shockwave-demonstrationsurrounded byNevertheless,was the firstconsiderable Although the collaborationshould not beproportion of<span style=\\\"known as the shortly afterfor instance,described as /head>\\n<body starting withincreasingly the fact thatdiscussion ofmiddle of thean individualdifficult to point of viewhomosexualityacceptance of</span></div>manufacturersorigin of thecommonly usedimportance ofdenominationsbackground: #length of thedeterminationa significant\\\" border=\\\"0\\\">revolutionaryprinciples ofis consideredwas developedIndo-Europeanvulnerable toproponents ofare sometimescloser to theNew York City name=\\\"searchattributed tocourse of themathematicianby the end ofat the end of\\\" border=\\\"0\\\" technological.removeClass(branch of theevidence that![endif]-->\\r\\nInstitute of into a singlerespectively.and thereforeproperties ofis located insome of whichThere is alsocontinued to appearance of &amp;ndash; describes theconsiderationauthor of theindependentlyequipped withdoes not have</a><a href=\\\"confused with<link href=\\\"/at the age ofappear in theThese includeregardless ofcould be used style=&quot;several timesrepresent thebody>\\n</html>thought to bepopulation ofpossibilitiespercentage ofaccess to thean attempt toproduction ofjquery/jquerytwo differentbelong to theestablishmentreplacing thedescription\\\" determine theavailable forAccording to wide range of\\t<div class=\\\"more commonlyorganisationsfunctionalitywas completed &amp;mdash; participationthe characteran additionalappears to befact that thean example ofsignificantlyonmouseover=\\\"because they async = true;problems withseems to havethe result of src=\\\"http://familiar withpossession offunction () {took place inand sometimessubstantially<span></span>is often usedin an attemptgreat deal ofEnvironmentalsuccessfully virtually all20th century,professionalsnecessary to determined bycompatibilitybecause it isDictionary ofmodificationsThe followingmay refer to:Consequently,Internationalalthough somethat would beworld's firstclassified asbottom of the(particularlyalign=\\\"left\\\" most commonlybasis for thefoundation ofcontributionspopularity ofcenter of theto reduce thejurisdictionsapproximation onmouseout=\\\"New Testamentcollection of</span></a></in the Unitedfilm director-strict.dtd\\\">has been usedreturn to thealthough thischange in theseveral otherbut there areunprecedentedis similar toespecially inweight: bold;is called thecomputationalindicate thatrestricted to\\t<meta name=\\\"are typicallyconflict withHowever, the An example ofcompared withquantities ofrather than aconstellationnecessary forreported thatspecificationpolitical and&nbsp;&nbsp;<references tothe same yearGovernment ofgeneration ofhave not beenseveral yearscommitment to\\t\\t<ul class=\\\"visualization19th century,practitionersthat he wouldand continuedoccupation ofis defined ascentre of thethe amount of><div style=\\\"equivalent ofdifferentiatebrought aboutmargin-left: automaticallythought of asSome of these\\n<div class=\\\"input class=\\\"replaced withis one of theeducation andinfluenced byreputation as\\n<meta name=\\\"accommodation</div>\\n</div>large part ofInstitute forthe so-called against the In this case,was appointedclaimed to beHowever, thisDepartment ofthe remainingeffect on theparticularly deal with the\\n<div style=\\\"almost alwaysare currentlyexpression ofphilosophy offor more thancivilizationson the islandselectedIndexcan result in\\\" value=\\\"\\\" />the structure /></a></div>Many of thesecaused by theof the Unitedspan class=\\\"mcan be tracedis related tobecame one ofis frequentlyliving in thetheoreticallyFollowing theRevolutionarygovernment inis determinedthe politicalintroduced insufficient todescription\\\">short storiesseparation ofas to whetherknown for itswas initiallydisplay:blockis an examplethe principalconsists of arecognized as/body></html>a substantialreconstructedhead of stateresistance toundergraduateThere are twogravitationalare describedintentionallyserved as theclass=\\\"headeropposition tofundamentallydominated theand the otheralliance withwas forced torespectively,and politicalin support ofpeople in the20th century.and publishedloadChartbeatto understandmember statesenvironmentalfirst half ofcountries andarchitecturalbe consideredcharacterizedclearIntervalauthoritativeFederation ofwas succeededand there area consequencethe Presidentalso includedfree softwaresuccession ofdeveloped thewas destroyedaway from the;\\n</script>\\n<although theyfollowed by amore powerfulresulted in aUniversity ofHowever, manythe presidentHowever, someis thought tountil the endwas announcedare importantalso includes><input type=the center of DO NOT ALTERused to referthemes/?sort=that had beenthe basis forhas developedin the summercomparativelydescribed thesuch as thosethe resultingis impossiblevarious otherSouth Africanhave the sameeffectivenessin which case; text-align:structure and; background:regarding thesupported theis also knownstyle=\\\"marginincluding thebahasa Melayunorsk bokmC%lnorsk nynorskslovenE!D\\rinainternacionalcalificaciC3ncomunicaciC3nconstrucciC3n\\\"><div class=\\\"disambiguationDomainName', 'administrationsimultaneouslytransportationInternational margin-bottom:responsibility<![endif]-->\\n</><meta name=\\\"implementationinfrastructurerepresentationborder-bottom:</head>\\n<body>=http%3A%2F%2F<form method=\\\"method=\\\"post\\\" /favicon.ico\\\" });\\n</script>\\n.setAttribute(Administration= new Array();<![endif]-->\\r\\ndisplay:block;Unfortunately,\\\">&nbsp;</div>/favicon.ico\\\">='stylesheet' identification, for example,<li><a href=\\\"/an alternativeas a result ofpt\\\"></script>\\ntype=\\\"submit\\\" \\n(function() {recommendationform action=\\\"/transformationreconstruction.style.display According to hidden\\\" name=\\\"along with thedocument.body.approximately Communicationspost\\\" action=\\\"meaning &quot;--<![endif]-->Prime Ministercharacteristic</a> <a class=the history of onmouseover=\\\"the governmenthref=\\\"https://was originallywas introducedclassificationrepresentativeare considered<![endif]-->\\n\\ndepends on theUniversity of in contrast to placeholder=\\\"in the case ofinternational constitutionalstyle=\\\"border-: function() {Because of the-strict.dtd\\\">\\n<table class=\\\"accompanied byaccount of the<script src=\\\"/nature of the the people in in addition tos); js.id = id\\\" width=\\\"100%\\\"regarding the Roman Catholican independentfollowing the .gif\\\" width=\\\"1the following discriminationarchaeologicalprime minister.js\\\"></script>combination of marginwidth=\\\"createElement(w.attachEvent(</a></td></tr>src=\\\"https://aIn particular, align=\\\"left\\\" Czech RepublicUnited Kingdomcorrespondenceconcluded that.html\\\" title=\\\"(function () {comes from theapplication of<span class=\\\"sbelieved to beement('script'</a>\\n</li>\\n<livery different><span class=\\\"option value=\\\"(also known as\\t<li><a href=\\\"><input name=\\\"separated fromreferred to as valign=\\\"top\\\">founder of theattempting to carbon dioxide\\n\\n<div class=\\\"class=\\\"search-/body>\\n</html>opportunity tocommunications</head>\\r\\n<body style=\\\"width:Tia:?ng Via;\\u0007tchanges in theborder-color:#0\\\" border=\\\"0\\\" </span></div><was discovered\\\" type=\\\"text\\\" );\\n</script>\\n\\nDepartment of ecclesiasticalthere has beenresulting from</body></html>has never beenthe first timein response toautomatically </div>\\n\\n<div iwas consideredpercent of the\\\" /></a></div>collection of descended fromsection of theaccept-charsetto be confusedmember of the padding-right:translation ofinterpretation href='http://whether or notThere are alsothere are manya small numberother parts ofimpossible to  class=\\\"buttonlocated in the. However, theand eventuallyAt the end of because of itsrepresents the<form action=\\\" method=\\\"post\\\"it is possiblemore likely toan increase inhave also beencorresponds toannounced thatalign=\\\"right\\\">many countriesfor many yearsearliest knownbecause it waspt\\\"></script>\\r valign=\\\"top\\\" inhabitants offollowing year\\r\\n<div class=\\\"million peoplecontroversial concerning theargue that thegovernment anda reference totransferred todescribing the style=\\\"color:although therebest known forsubmit\\\" name=\\\"multiplicationmore than one recognition ofCouncil of theedition of the  <meta name=\\\"Entertainment away from the ;margin-right:at the time ofinvestigationsconnected withand many otheralthough it isbeginning with <span class=\\\"descendants of<span class=\\\"i align=\\\"right\\\"</head>\\n<body aspects of thehas since beenEuropean Unionreminiscent ofmore difficultVice Presidentcomposition ofpassed throughmore importantfont-size:11pxexplanation ofthe concept ofwritten in the\\t<span class=\\\"is one of the resemblance toon the groundswhich containsincluding the defined by thepublication ofmeans that theoutside of thesupport of the<input class=\\\"<span class=\\\"t(Math.random()most prominentdescription ofConstantinoplewere published<div class=\\\"seappears in the1\\\" height=\\\"1\\\" most importantwhich includeswhich had beendestruction ofthe population\\n\\t<div class=\\\"possibility ofsometimes usedappear to havesuccess of theintended to bepresent in thestyle=\\\"clear:b\\r\\n</script>\\r\\n<was founded ininterview with_id\\\" content=\\\"capital of the\\r\\n<link rel=\\\"srelease of thepoint out thatxMLHttpRequestand subsequentsecond largestvery importantspecificationssurface of theapplied to theforeign policy_setDomainNameestablished inis believed toIn addition tomeaning of theis named afterto protect theis representedDeclaration ofmore efficientClassificationother forms ofhe returned to<span class=\\\"cperformance of(function() {\\rif and only ifregions of theleading to therelations withUnited Nationsstyle=\\\"height:other than theype\\\" content=\\\"Association of\\n</head>\\n<bodylocated on theis referred to(including theconcentrationsthe individualamong the mostthan any other/>\\n<link rel=\\\" return false;the purpose ofthe ability to;color:#fff}\\n.\\n<span class=\\\"the subject ofdefinitions of>\\r\\n<link rel=\\\"claim that thehave developed<table width=\\\"celebration ofFollowing the to distinguish<span class=\\\"btakes place inunder the namenoted that the><![endif]-->\\nstyle=\\\"margin-instead of theintroduced thethe process ofincreasing thedifferences inestimated thatespecially the/div><div id=\\\"was eventuallythroughout histhe differencesomething thatspan></span></significantly ></script>\\r\\n\\r\\nenvironmental to prevent thehave been usedespecially forunderstand theis essentiallywere the firstis the largesthave been made\\\" src=\\\"http://interpreted assecond half ofcrolling=\\\"no\\\" is composed ofII, Holy Romanis expected tohave their owndefined as thetraditionally have differentare often usedto ensure thatagreement withcontaining theare frequentlyinformation onexample is theresulting in a</a></li></ul> class=\\\"footerand especiallytype=\\\"button\\\" </span></span>which included>\\n<meta name=\\\"considered thecarried out byHowever, it isbecame part ofin relation topopular in thethe capital ofwas officiallywhich has beenthe History ofalternative todifferent fromto support thesuggested thatin the process  <div class=\\\"the foundationbecause of hisconcerned withthe universityopposed to thethe context of<span class=\\\"ptext\\\" name=\\\"q\\\"\\t\\t<div class=\\\"the scientificrepresented bymathematicianselected by thethat have been><div class=\\\"cdiv id=\\\"headerin particular,converted into);\\n</script>\\n<philosophical srpskohrvatskitia:?ng Via;\\u0007tP Q\\u0003Q\\u0001Q\\u0001P:P8P9Q\\u0000Q\\u0003Q\\u0001Q\\u0001P:P8P9investigaciC3nparticipaciC3nP:P>Q\\u0002P>Q\\u0000Q\\u000BP5P>P1P;P0Q\\u0001Q\\u0002P8P:P>Q\\u0002P>Q\\u0000Q\\u000BP9Q\\u0007P5P;P>P2P5P:Q\\u0001P8Q\\u0001Q\\u0002P5P<Q\\u000BP\\u001DP>P2P>Q\\u0001Q\\u0002P8P:P>Q\\u0002P>Q\\u0000Q\\u000BQ\\u0005P>P1P;P0Q\\u0001Q\\u0002Q\\u000CP2Q\\u0000P5P<P5P=P8P:P>Q\\u0002P>Q\\u0000P0Q\\u000FQ\\u0001P5P3P>P4P=Q\\u000FQ\\u0001P:P0Q\\u0007P0Q\\u0002Q\\u000CP=P>P2P>Q\\u0001Q\\u0002P8P#P:Q\\u0000P0P8P=Q\\u000BP2P>P?Q\\u0000P>Q\\u0001Q\\u000BP:P>Q\\u0002P>Q\\u0000P>P9Q\\u0001P4P5P;P0Q\\u0002Q\\u000CP?P>P<P>Q\\tQ\\u000CQ\\u000EQ\\u0001Q\\u0000P5P4Q\\u0001Q\\u0002P2P>P1Q\\u0000P0P7P>P<Q\\u0001Q\\u0002P>Q\\u0000P>P=Q\\u000BQ\\u0003Q\\u0007P0Q\\u0001Q\\u0002P8P5Q\\u0002P5Q\\u0007P5P=P8P5P\\u0013P;P0P2P=P0Q\\u000FP8Q\\u0001Q\\u0002P>Q\\u0000P8P8Q\\u0001P8Q\\u0001Q\\u0002P5P<P0Q\\u0000P5Q\\u0008P5P=P8Q\\u000FP!P:P0Q\\u0007P0Q\\u0002Q\\u000CP?P>Q\\rQ\\u0002P>P<Q\\u0003Q\\u0001P;P5P4Q\\u0003P5Q\\u0002Q\\u0001P:P0P7P0Q\\u0002Q\\u000CQ\\u0002P>P2P0Q\\u0000P>P2P:P>P=P5Q\\u0007P=P>Q\\u0000P5Q\\u0008P5P=P8P5P:P>Q\\u0002P>Q\\u0000P>P5P>Q\\u0000P3P0P=P>P2P:P>Q\\u0002P>Q\\u0000P>P<P P5P:P;P0P<P0X'Y\\u0004Y\\u0005Y\\u0006X*X/Y\\tY\\u0005Y\\u0006X*X/Y\\nX'X*X'Y\\u0004Y\\u0005Y\\u0008X6Y\\u0008X9X'Y\\u0004X(X1X'Y\\u0005X,X'Y\\u0004Y\\u0005Y\\u0008X'Y\\u0002X9X'Y\\u0004X1X3X'X&Y\\u0004Y\\u0005X4X'X1Y\\u0003X'X*X'Y\\u0004X#X9X6X'X!X'Y\\u0004X1Y\\nX'X6X)X'Y\\u0004X*X5Y\\u0005Y\\nY\\u0005X'Y\\u0004X'X9X6X'X!X'Y\\u0004Y\\u0006X*X'X&X,X'Y\\u0004X#Y\\u0004X9X'X(X'Y\\u0004X*X3X,Y\\nY\\u0004X'Y\\u0004X#Y\\u0002X3X'Y\\u0005X'Y\\u0004X6X:X7X'X*X'Y\\u0004Y\\u0001Y\\nX/Y\\nY\\u0008X'Y\\u0004X*X1X-Y\\nX(X'Y\\u0004X,X/Y\\nX/X)X'Y\\u0004X*X9Y\\u0004Y\\nY\\u0005X'Y\\u0004X#X.X(X'X1X'Y\\u0004X'Y\\u0001Y\\u0004X'Y\\u0005X'Y\\u0004X#Y\\u0001Y\\u0004X'Y\\u0005X'Y\\u0004X*X'X1Y\\nX.X'Y\\u0004X*Y\\u0002Y\\u0006Y\\nX)X'Y\\u0004X'Y\\u0004X9X'X(X'Y\\u0004X.Y\\u0008X'X7X1X'Y\\u0004Y\\u0005X,X*Y\\u0005X9X'Y\\u0004X/Y\\nY\\u0003Y\\u0008X1X'Y\\u0004X3Y\\nX'X-X)X9X(X/X'Y\\u0004Y\\u0004Y\\u0007X'Y\\u0004X*X1X(Y\\nX)X'Y\\u0004X1Y\\u0008X'X(X7X'Y\\u0004X#X/X(Y\\nX)X'Y\\u0004X'X.X(X'X1X'Y\\u0004Y\\u0005X*X-X/X)X'Y\\u0004X'X:X'Y\\u0006Y\\ncursor:pointer;</title>\\n<meta \\\" href=\\\"http://\\\"><span class=\\\"members of the window.locationvertical-align:/a> | <a href=\\\"<!doctype html>media=\\\"screen\\\" <option value=\\\"favicon.ico\\\" />\\n\\t\\t<div class=\\\"characteristics\\\" method=\\\"get\\\" /body>\\n</html>\\nshortcut icon\\\" document.write(padding-bottom:representativessubmit\\\" value=\\\"align=\\\"center\\\" throughout the science fiction\\n  <div class=\\\"submit\\\" class=\\\"one of the most valign=\\\"top\\\"><was established);\\r\\n</script>\\r\\nreturn false;\\\">).style.displaybecause of the document.cookie<form action=\\\"/}body{margin:0;Encyclopedia ofversion of the .createElement(name\\\" content=\\\"</div>\\n</div>\\n\\nadministrative </body>\\n</html>history of the \\\"><input type=\\\"portion of the as part of the &nbsp;<a href=\\\"other countries\\\">\\n<div class=\\\"</span></span><In other words,display: block;control of the introduction of/>\\n<meta name=\\\"as well as the in recent years\\r\\n\\t<div class=\\\"</div>\\n\\t</div>\\ninspired by thethe end of the compatible withbecame known as style=\\\"margin:.js\\\"></script>< International there have beenGerman language style=\\\"color:#Communist Partyconsistent withborder=\\\"0\\\" cell marginheight=\\\"the majority of\\\" align=\\\"centerrelated to the many different Orthodox Churchsimilar to the />\\n<link rel=\\\"swas one of the until his death})();\\n</script>other languagescompared to theportions of thethe Netherlandsthe most commonbackground:url(argued that thescrolling=\\\"no\\\" included in theNorth American the name of theinterpretationsthe traditionaldevelopment of frequently useda collection ofvery similar tosurrounding theexample of thisalign=\\\"center\\\">would have beenimage_caption =attached to thesuggesting thatin the form of involved in theis derived fromnamed after theIntroduction torestrictions on style=\\\"width: can be used to the creation ofmost important information andresulted in thecollapse of theThis means thatelements of thewas replaced byanalysis of theinspiration forregarded as themost successfulknown as &quot;a comprehensiveHistory of the were consideredreturned to theare referred toUnsourced image>\\n\\t<div class=\\\"consists of thestopPropagationinterest in theavailability ofappears to haveelectromagneticenableServices(function of theIt is important</script></div>function(){var relative to theas a result of the position ofFor example, in method=\\\"post\\\" was followed by&amp;mdash; thethe applicationjs\\\"></script>\\r\\nul></div></div>after the deathwith respect tostyle=\\\"padding:is particularlydisplay:inline; type=\\\"submit\\\" is divided intod8-f\\u0016\\u0007 (g.\\u0000d=\\u0013)responsabilidadadministraciC3ninternacionalescorrespondiente`$\\t`$*`$/`%\\u000B`$\\u0017`$*`%\\u0002`$0`%\\r`$5`$9`$.`$>`$0`%\\u0007`$2`%\\u000B`$\\u0017`%\\u000B`$\\u0002`$\\u001A`%\\u0001`$(`$>`$5`$2`%\\u0007`$\\u0015`$?`$(`$8`$0`$\\u0015`$>`$0`$*`%\\u0001`$2`$?`$8`$\\u0016`%\\u000B`$\\u001C`%\\u0007`$\\u0002`$\\u001A`$>`$9`$?`$\\u000F`$-`%\\u0007`$\\u001C`%\\u0007`$\\u0002`$6`$>`$.`$?`$2`$9`$.`$>`$0`%\\u0000`$\\u001C`$>`$\\u0017`$0`$#`$,`$(`$>`$(`%\\u0007`$\\u0015`%\\u0001`$.`$>`$0`$,`%\\r`$2`%\\t`$\\u0017`$.`$>`$2`$?`$\\u0015`$.`$9`$?`$2`$>`$*`%\\u0003`$7`%\\r`$ `$,`$\\\"`$<`$$`%\\u0007`$-`$>`$\\u001C`$*`$>`$\\u0015`%\\r`$2`$?`$\\u0015`$\\u001F`%\\r`$0`%\\u0007`$(`$\\u0016`$?`$2`$>`$+`$&`%\\u000C`$0`$>`$(`$.`$>`$.`$2`%\\u0007`$.`$$`$&`$>`$(`$,`$>`$\\u001C`$>`$0`$5`$?`$\\u0015`$>`$8`$\\u0015`%\\r`$/`%\\u000B`$\\u0002`$\\u001A`$>`$9`$$`%\\u0007`$*`$9`%\\u0001`$\\u0001`$\\u001A`$,`$$`$>`$/`$>`$8`$\\u0002`$5`$>`$&`$&`%\\u0007`$\\u0016`$(`%\\u0007`$*`$?`$\\u001B`$2`%\\u0007`$5`$?`$6`%\\u0007`$7`$0`$>`$\\u001C`%\\r`$/`$\\t`$$`%\\r`$$`$0`$.`%\\u0001`$\\u0002`$,`$\\u0008`$&`%\\u000B`$(`%\\u000B`$\\u0002`$\\t`$*`$\\u0015`$0`$#`$*`$\\\"`$<`%\\u0007`$\\u0002`$8`%\\r`$%`$?`$$`$+`$?`$2`%\\r`$.`$.`%\\u0001`$\\u0016`%\\r`$/`$\\u0005`$\\u001A`%\\r`$\\u001B`$>`$\\u001B`%\\u0002`$\\u001F`$$`%\\u0000`$8`$\\u0002`$\\u0017`%\\u0000`$$`$\\u001C`$>`$\\u000F`$\\u0017`$>`$5`$?`$-`$>`$\\u0017`$\\u0018`$#`%\\r`$\\u001F`%\\u0007`$&`%\\u0002`$8`$0`%\\u0007`$&`$?`$(`%\\u000B`$\\u0002`$9`$$`%\\r`$/`$>`$8`%\\u0007`$\\u0015`%\\r`$8`$\\u0017`$>`$\\u0002`$'`%\\u0000`$5`$?`$6`%\\r`$5`$0`$>`$$`%\\u0007`$\\u0002`$&`%\\u0008`$\\u001F`%\\r`$8`$(`$\\u0015`%\\r`$6`$>`$8`$>`$.`$(`%\\u0007`$\\u0005`$&`$>`$2`$$`$,`$?`$\\u001C`$2`%\\u0000`$*`%\\u0001`$0`%\\u0002`$7`$9`$?`$\\u0002`$&`%\\u0000`$.`$?`$$`%\\r`$0`$\\u0015`$5`$?`$$`$>`$0`%\\u0001`$*`$/`%\\u0007`$8`%\\r`$%`$>`$(`$\\u0015`$0`%\\u000B`$!`$<`$.`%\\u0001`$\\u0015`%\\r`$$`$/`%\\u000B`$\\u001C`$(`$>`$\\u0015`%\\u0003`$*`$/`$>`$*`%\\u000B`$8`%\\r`$\\u001F`$\\u0018`$0`%\\u0007`$2`%\\u0002`$\\u0015`$>`$0`%\\r`$/`$5`$?`$\\u001A`$>`$0`$8`%\\u0002`$\\u001A`$(`$>`$.`%\\u0002`$2`%\\r`$/`$&`%\\u0007`$\\u0016`%\\u0007`$\\u0002`$9`$.`%\\u0007`$6`$>`$8`%\\r`$\\u0015`%\\u0002`$2`$.`%\\u0008`$\\u0002`$(`%\\u0007`$$`%\\u0008`$/`$>`$0`$\\u001C`$?`$8`$\\u0015`%\\u0007rss+xml\\\" title=\\\"-type\\\" content=\\\"title\\\" content=\\\"at the same time.js\\\"></script>\\n<\\\" method=\\\"post\\\" </span></a></li>vertical-align:t/jquery.min.js\\\">.click(function( style=\\\"padding-})();\\n</script>\\n</span><a href=\\\"<a href=\\\"http://); return false;text-decoration: scrolling=\\\"no\\\" border-collapse:associated with Bahasa IndonesiaEnglish language<text xml:space=.gif\\\" border=\\\"0\\\"</body>\\n</html>\\noverflow:hidden;img src=\\\"http://addEventListenerresponsible for s.js\\\"></script>\\n/favicon.ico\\\" />operating system\\\" style=\\\"width:1target=\\\"_blank\\\">State Universitytext-align:left;\\ndocument.write(, including the around the world);\\r\\n</script>\\r\\n<\\\" style=\\\"height:;overflow:hiddenmore informationan internationala member of the one of the firstcan be found in </div>\\n\\t\\t</div>\\ndisplay: none;\\\">\\\" />\\n<link rel=\\\"\\n  (function() {the 15th century.preventDefault(large number of Byzantine Empire.jpg|thumb|left|vast majority ofmajority of the  align=\\\"center\\\">University Pressdominated by theSecond World Wardistribution of style=\\\"position:the rest of the characterized by rel=\\\"nofollow\\\">derives from therather than the a combination ofstyle=\\\"width:100English-speakingcomputer scienceborder=\\\"0\\\" alt=\\\"the existence ofDemocratic Party\\\" style=\\\"margin-For this reason,.js\\\"></script>\\n\\tsByTagName(s)[0]js\\\"></script>\\r\\n<.js\\\"></script>\\r\\nlink rel=\\\"icon\\\" ' alt='' class='formation of theversions of the </a></div></div>/page>\\n  <page>\\n<div class=\\\"contbecame the firstbahasa Indonesiaenglish (simple)N\\u0015N;N;N7N=N9N:N,Q\\u0005Q\\u0000P2P0Q\\u0002Q\\u0001P:P8P:P>P<P?P0P=P8P8Q\\u000FP2P;Q\\u000FP5Q\\u0002Q\\u0001Q\\u000FP\\u0014P>P1P0P2P8Q\\u0002Q\\u000CQ\\u0007P5P;P>P2P5P:P0Q\\u0000P0P7P2P8Q\\u0002P8Q\\u000FP\\u0018P=Q\\u0002P5Q\\u0000P=P5Q\\u0002P\\u001EQ\\u0002P2P5Q\\u0002P8Q\\u0002Q\\u000CP=P0P?Q\\u0000P8P<P5Q\\u0000P8P=Q\\u0002P5Q\\u0000P=P5Q\\u0002P:P>Q\\u0002P>Q\\u0000P>P3P>Q\\u0001Q\\u0002Q\\u0000P0P=P8Q\\u0006Q\\u000BP:P0Q\\u0007P5Q\\u0001Q\\u0002P2P5Q\\u0003Q\\u0001P;P>P2P8Q\\u000FQ\\u0005P?Q\\u0000P>P1P;P5P<Q\\u000BP?P>P;Q\\u0003Q\\u0007P8Q\\u0002Q\\u000CQ\\u000FP2P;Q\\u000FQ\\u000EQ\\u0002Q\\u0001Q\\u000FP=P0P8P1P>P;P5P5P:P>P<P?P0P=P8Q\\u000FP2P=P8P<P0P=P8P5Q\\u0001Q\\u0000P5P4Q\\u0001Q\\u0002P2P0X'Y\\u0004Y\\u0005Y\\u0008X'X6Y\\nX9X'Y\\u0004X1X&Y\\nX3Y\\nX)X'Y\\u0004X'Y\\u0006X*Y\\u0002X'Y\\u0004Y\\u0005X4X'X1Y\\u0003X'X*Y\\u0003X'Y\\u0004X3Y\\nX'X1X'X*X'Y\\u0004Y\\u0005Y\\u0003X*Y\\u0008X(X)X'Y\\u0004X3X9Y\\u0008X/Y\\nX)X'X-X5X'X&Y\\nX'X*X'Y\\u0004X9X'Y\\u0004Y\\u0005Y\\nX)X'Y\\u0004X5Y\\u0008X*Y\\nX'X*X'Y\\u0004X'Y\\u0006X*X1Y\\u0006X*X'Y\\u0004X*X5X'Y\\u0005Y\\nY\\u0005X'Y\\u0004X%X3Y\\u0004X'Y\\u0005Y\\nX'Y\\u0004Y\\u0005X4X'X1Y\\u0003X)X'Y\\u0004Y\\u0005X1X&Y\\nX'X*robots\\\" content=\\\"<div id=\\\"footer\\\">the United States<img src=\\\"http://.jpg|right|thumb|.js\\\"></script>\\r\\n<location.protocolframeborder=\\\"0\\\" s\\\" />\\n<meta name=\\\"</a></div></div><font-weight:bold;&quot; and &quot;depending on the margin:0;padding:\\\" rel=\\\"nofollow\\\" President of the twentieth centuryevision>\\n  </pageInternet Explorera.async = true;\\r\\ninformation about<div id=\\\"header\\\">\\\" action=\\\"http://<a href=\\\"https://<div id=\\\"content\\\"</div>\\r\\n</div>\\r\\n<derived from the <img src='http://according to the \\n</body>\\n</html>\\nstyle=\\\"font-size:script language=\\\"Arial, Helvetica,</a><span class=\\\"</script><script political partiestd></tr></table><href=\\\"http://www.interpretation ofrel=\\\"stylesheet\\\" document.write('<charset=\\\"utf-8\\\">\\nbeginning of the revealed that thetelevision series\\\" rel=\\\"nofollow\\\"> target=\\\"_blank\\\">claiming that thehttp%3A%2F%2Fwww.manifestations ofPrime Minister ofinfluenced by theclass=\\\"clearfix\\\">/div>\\r\\n</div>\\r\\n\\r\\nthree-dimensionalChurch of Englandof North Carolinasquare kilometres.addEventListenerdistinct from thecommonly known asPhonetic Alphabetdeclared that thecontrolled by theBenjamin Franklinrole-playing gamethe University ofin Western Europepersonal computerProject Gutenbergregardless of thehas been proposedtogether with the></li><li class=\\\"in some countriesmin.js\\\"></script>of the populationofficial language<img src=\\\"images/identified by thenatural resourcesclassification ofcan be consideredquantum mechanicsNevertheless, themillion years ago</body>\\r\\n</html>\\rN\\u0015N;N;N7N=N9N:N,\\ntake advantage ofand, according toattributed to theMicrosoft Windowsthe first centuryunder the controldiv class=\\\"headershortly after thenotable exceptiontens of thousandsseveral differentaround the world.reaching militaryisolated from theopposition to thethe Old TestamentAfrican Americansinserted into theseparate from themetropolitan areamakes it possibleacknowledged thatarguably the mosttype=\\\"text/css\\\">\\nthe InternationalAccording to the pe=\\\"text/css\\\" />\\ncoincide with thetwo-thirds of theDuring this time,during the periodannounced that hethe internationaland more recentlybelieved that theconsciousness andformerly known assurrounded by thefirst appeared inoccasionally usedposition:absolute;\\\" target=\\\"_blank\\\" position:relative;text-align:center;jax/libs/jquery/1.background-color:#type=\\\"application/anguage\\\" content=\\\"<meta http-equiv=\\\"Privacy Policy</a>e(\\\"%3Cscript src='\\\" target=\\\"_blank\\\">On the other hand,.jpg|thumb|right|2</div><div class=\\\"<div style=\\\"float:nineteenth century</body>\\r\\n</html>\\r\\n<img src=\\\"http://s;text-align:centerfont-weight: bold; According to the difference between\\\" frameborder=\\\"0\\\" \\\" style=\\\"position:link href=\\\"http://html4/loose.dtd\\\">\\nduring this period</td></tr></table>closely related tofor the first time;font-weight:bold;input type=\\\"text\\\" <span style=\\\"font-onreadystatechange\\t<div class=\\\"cleardocument.location. For example, the a wide variety of <!DOCTYPE html>\\r\\n<&nbsp;&nbsp;&nbsp;\\\"><a href=\\\"http://style=\\\"float:left;concerned with the=http%3A%2F%2Fwww.in popular culturetype=\\\"text/css\\\" />it is possible to Harvard Universitytylesheet\\\" href=\\\"/the main characterOxford University  name=\\\"keywords\\\" cstyle=\\\"text-align:the United Kingdomfederal government<div style=\\\"margin depending on the description of the<div class=\\\"header.min.js\\\"></script>destruction of theslightly differentin accordance withtelecommunicationsindicates that theshortly thereafterespecially in the European countriesHowever, there aresrc=\\\"http://staticsuggested that the\\\" src=\\\"http://www.a large number of Telecommunications\\\" rel=\\\"nofollow\\\" tHoly Roman Emperoralmost exclusively\\\" border=\\\"0\\\" alt=\\\"Secretary of Stateculminating in theCIA World Factbookthe most importantanniversary of thestyle=\\\"background-<li><em><a href=\\\"/the Atlantic Oceanstrictly speaking,shortly before thedifferent types ofthe Ottoman Empire><img src=\\\"http://An Introduction toconsequence of thedeparture from theConfederate Statesindigenous peoplesProceedings of theinformation on thetheories have beeninvolvement in thedivided into threeadjacent countriesis responsible fordissolution of thecollaboration withwidely regarded ashis contemporariesfounding member ofDominican Republicgenerally acceptedthe possibility ofare also availableunder constructionrestoration of thethe general publicis almost entirelypasses through thehas been suggestedcomputer and videoGermanic languages according to the different from theshortly afterwardshref=\\\"https://www.recent developmentBoard of Directors<div class=\\\"search| <a href=\\\"http://In particular, theMultiple footnotesor other substancethousands of yearstranslation of the</div>\\r\\n</div>\\r\\n\\r\\n<a href=\\\"index.phpwas established inmin.js\\\"></script>\\nparticipate in thea strong influencestyle=\\\"margin-top:represented by thegraduated from theTraditionally, theElement(\\\"script\\\");However, since the/div>\\n</div>\\n<div left; margin-left:protection against0; vertical-align:Unfortunately, thetype=\\\"image/x-icon/div>\\n<div class=\\\" class=\\\"clearfix\\\"><div class=\\\"footer\\t\\t</div>\\n\\t\\t</div>\\nthe motion pictureP\\u0011Q\\nP;P3P0Q\\u0000Q\\u0001P:P8P1Q\\nP;P3P0Q\\u0000Q\\u0001P:P8P$P5P4P5Q\\u0000P0Q\\u0006P8P8P=P5Q\\u0001P:P>P;Q\\u000CP:P>Q\\u0001P>P>P1Q\\tP5P=P8P5Q\\u0001P>P>P1Q\\tP5P=P8Q\\u000FP?Q\\u0000P>P3Q\\u0000P0P<P<Q\\u000BP\\u001EQ\\u0002P?Q\\u0000P0P2P8Q\\u0002Q\\u000CP1P5Q\\u0001P?P;P0Q\\u0002P=P>P<P0Q\\u0002P5Q\\u0000P8P0P;Q\\u000BP?P>P7P2P>P;Q\\u000FP5Q\\u0002P?P>Q\\u0001P;P5P4P=P8P5Q\\u0000P0P7P;P8Q\\u0007P=Q\\u000BQ\\u0005P?Q\\u0000P>P4Q\\u0003P:Q\\u0006P8P8P?Q\\u0000P>P3Q\\u0000P0P<P<P0P?P>P;P=P>Q\\u0001Q\\u0002Q\\u000CQ\\u000EP=P0Q\\u0005P>P4P8Q\\u0002Q\\u0001Q\\u000FP8P7P1Q\\u0000P0P=P=P>P5P=P0Q\\u0001P5P;P5P=P8Q\\u000FP8P7P<P5P=P5P=P8Q\\u000FP:P0Q\\u0002P5P3P>Q\\u0000P8P8P\\u0010P;P5P:Q\\u0001P0P=P4Q\\u0000`$&`%\\r`$5`$>`$0`$>`$.`%\\u0008`$(`%\\u0001`$\\u0005`$2`$*`%\\r`$0`$&`$>`$(`$-`$>`$0`$$`%\\u0000`$/`$\\u0005`$(`%\\u0001`$&`%\\u0007`$6`$9`$?`$(`%\\r`$&`%\\u0000`$\\u0007`$\\u0002`$!`$?`$/`$>`$&`$?`$2`%\\r`$2`%\\u0000`$\\u0005`$'`$?`$\\u0015`$>`$0`$5`%\\u0000`$!`$?`$/`%\\u000B`$\\u001A`$?`$\\u001F`%\\r`$ `%\\u0007`$8`$.`$>`$\\u001A`$>`$0`$\\u001C`$\\u0002`$\\u0015`%\\r`$6`$(`$&`%\\u0001`$(`$?`$/`$>`$*`%\\r`$0`$/`%\\u000B`$\\u0017`$\\u0005`$(`%\\u0001`$8`$>`$0`$\\u0011`$(`$2`$>`$\\u0007`$(`$*`$>`$0`%\\r`$\\u001F`%\\u0000`$6`$0`%\\r`$$`%\\u000B`$\\u0002`$2`%\\u000B`$\\u0015`$8`$-`$>`$+`$<`%\\r`$2`%\\u0008`$6`$6`$0`%\\r`$$`%\\u0007`$\\u0002`$*`%\\r`$0`$&`%\\u0007`$6`$*`%\\r`$2`%\\u0007`$/`$0`$\\u0015`%\\u0007`$\\u0002`$&`%\\r`$0`$8`%\\r`$%`$?`$$`$?`$\\t`$$`%\\r`$*`$>`$&`$\\t`$(`%\\r`$9`%\\u0007`$\\u0002`$\\u001A`$?`$\\u001F`%\\r`$ `$>`$/`$>`$$`%\\r`$0`$>`$\\u001C`%\\r`$/`$>`$&`$>`$*`%\\u0001`$0`$>`$(`%\\u0007`$\\u001C`%\\u000B`$!`$<`%\\u0007`$\\u0002`$\\u0005`$(`%\\u0001`$5`$>`$&`$6`%\\r`$0`%\\u0007`$#`%\\u0000`$6`$?`$\\u0015`%\\r`$7`$>`$8`$0`$\\u0015`$>`$0`%\\u0000`$8`$\\u0002`$\\u0017`%\\r`$0`$9`$*`$0`$?`$#`$>`$.`$,`%\\r`$0`$>`$\\u0002`$!`$,`$\\u001A`%\\r`$\\u001A`%\\u000B`$\\u0002`$\\t`$*`$2`$,`%\\r`$'`$.`$\\u0002`$$`%\\r`$0`%\\u0000`$8`$\\u0002`$*`$0`%\\r`$\\u0015`$\\t`$.`%\\r`$.`%\\u0000`$&`$.`$>`$'`%\\r`$/`$.`$8`$9`$>`$/`$$`$>`$6`$,`%\\r`$&`%\\u000B`$\\u0002`$.`%\\u0000`$!`$?`$/`$>`$\\u0006`$\\u0008`$*`%\\u0000`$\\u000F`$2`$.`%\\u000B`$,`$>`$\\u0007`$2`$8`$\\u0002`$\\u0016`%\\r`$/`$>`$\\u0006`$*`$0`%\\u0007`$6`$(`$\\u0005`$(`%\\u0001`$,`$\\u0002`$'`$,`$>`$\\u001C`$<`$>`$0`$(`$5`%\\u0000`$(`$$`$.`$*`%\\r`$0`$.`%\\u0001`$\\u0016`$*`%\\r`$0`$6`%\\r`$(`$*`$0`$?`$5`$>`$0`$(`%\\u0001`$\\u0015`$8`$>`$(`$8`$.`$0`%\\r`$%`$(`$\\u0006`$/`%\\u000B`$\\u001C`$?`$$`$8`%\\u000B`$.`$5`$>`$0X'Y\\u0004Y\\u0005X4X'X1Y\\u0003X'X*X'Y\\u0004Y\\u0005Y\\u0006X*X/Y\\nX'X*X'Y\\u0004Y\\u0003Y\\u0005X(Y\\nY\\u0008X*X1X'Y\\u0004Y\\u0005X4X'Y\\u0007X/X'X*X9X/X/X'Y\\u0004X2Y\\u0008X'X1X9X/X/X'Y\\u0004X1X/Y\\u0008X/X'Y\\u0004X%X3Y\\u0004X'Y\\u0005Y\\nX)X'Y\\u0004Y\\u0001Y\\u0008X*Y\\u0008X4Y\\u0008X(X'Y\\u0004Y\\u0005X3X'X(Y\\u0002X'X*X'Y\\u0004Y\\u0005X9Y\\u0004Y\\u0008Y\\u0005X'X*X'Y\\u0004Y\\u0005X3Y\\u0004X3Y\\u0004X'X*X'Y\\u0004X,X1X'Y\\u0001Y\\nY\\u0003X3X'Y\\u0004X'X3Y\\u0004X'Y\\u0005Y\\nX)X'Y\\u0004X'X*X5X'Y\\u0004X'X*keywords\\\" content=\\\"w3.org/1999/xhtml\\\"><a target=\\\"_blank\\\" text/html; charset=\\\" target=\\\"_blank\\\"><table cellpadding=\\\"autocomplete=\\\"off\\\" text-align: center;to last version by background-color: #\\\" href=\\\"http://www./div></div><div id=<a href=\\\"#\\\" class=\\\"\\\"><img src=\\\"http://cript\\\" src=\\\"http://\\n<script language=\\\"//EN\\\" \\\"http://www.wencodeURIComponent(\\\" href=\\\"javascript:<div class=\\\"contentdocument.write('<scposition: absolute;script src=\\\"http:// style=\\\"margin-top:.min.js\\\"></script>\\n</div>\\n<div class=\\\"w3.org/1999/xhtml\\\" \\n\\r\\n</body>\\r\\n</html>distinction between/\\\" target=\\\"_blank\\\"><link href=\\\"http://encoding=\\\"utf-8\\\"?>\\nw.addEventListener?action=\\\"http://www.icon\\\" href=\\\"http:// style=\\\"background:type=\\\"text/css\\\" />\\nmeta property=\\\"og:t<input type=\\\"text\\\"  style=\\\"text-align:the development of tylesheet\\\" type=\\\"tehtml; charset=utf-8is considered to betable width=\\\"100%\\\" In addition to the contributed to the differences betweendevelopment of the It is important to </script>\\n\\n<script  style=\\\"font-size:1></span><span id=gbLibrary of Congress<img src=\\\"http://imEnglish translationAcademy of Sciencesdiv style=\\\"display:construction of the.getElementById(id)in conjunction withElement('script'); <meta property=\\\"og:P\\u0011Q\\nP;P3P0Q\\u0000Q\\u0001P:P8\\n type=\\\"text\\\" name=\\\">Privacy Policy</a>administered by theenableSingleRequeststyle=&quot;margin:</div></div></div><><img src=\\\"http://i style=&quot;float:referred to as the total population ofin Washington, D.C. style=\\\"background-among other things,organization of theparticipated in thethe introduction ofidentified with thefictional character Oxford University misunderstanding ofThere are, however,stylesheet\\\" href=\\\"/Columbia Universityexpanded to includeusually referred toindicating that thehave suggested thataffiliated with thecorrelation betweennumber of different></td></tr></table>Republic of Ireland\\n</script>\\n<script under the influencecontribution to theOfficial website ofheadquarters of thecentered around theimplications of thehave been developedFederal Republic ofbecame increasinglycontinuation of theNote, however, thatsimilar to that of capabilities of theaccordance with theparticipants in thefurther developmentunder the directionis often consideredhis younger brother</td></tr></table><a http-equiv=\\\"X-UA-physical propertiesof British Columbiahas been criticized(with the exceptionquestions about thepassing through the0\\\" cellpadding=\\\"0\\\" thousands of peopleredirects here. Forhave children under%3E%3C/script%3E\\\"));<a href=\\\"http://www.<li><a href=\\\"http://site_name\\\" content=\\\"text-decoration:nonestyle=\\\"display: none<meta http-equiv=\\\"X-new Date().getTime() type=\\\"image/x-icon\\\"</span><span class=\\\"language=\\\"javascriptwindow.location.href<a href=\\\"javascript:-->\\r\\n<script type=\\\"t<a href='http://www.hortcut icon\\\" href=\\\"</div>\\r\\n<div class=\\\"<script src=\\\"http://\\\" rel=\\\"stylesheet\\\" t</div>\\n<script type=/a> <a href=\\\"http:// allowTransparency=\\\"X-UA-Compatible\\\" conrelationship between\\n</script>\\r\\n<script </a></li></ul></div>associated with the programming language</a><a href=\\\"http://</a></li><li class=\\\"form action=\\\"http://<div style=\\\"display:type=\\\"text\\\" name=\\\"q\\\"<table width=\\\"100%\\\" background-position:\\\" border=\\\"0\\\" width=\\\"rel=\\\"shortcut icon\\\" h6><ul><li><a href=\\\"  <meta http-equiv=\\\"css\\\" media=\\\"screen\\\" responsible for the \\\" type=\\\"application/\\\" style=\\\"background-html; charset=utf-8\\\" allowtransparency=\\\"stylesheet\\\" type=\\\"te\\r\\n<meta http-equiv=\\\"></span><span class=\\\"0\\\" cellspacing=\\\"0\\\">;\\n</script>\\n<script sometimes called thedoes not necessarilyFor more informationat the beginning of <!DOCTYPE html><htmlparticularly in the type=\\\"hidden\\\" name=\\\"javascript:void(0);\\\"effectiveness of the autocomplete=\\\"off\\\" generally considered><input type=\\\"text\\\" \\\"></script>\\r\\n<scriptthroughout the worldcommon misconceptionassociation with the</div>\\n</div>\\n<div cduring his lifetime,corresponding to thetype=\\\"image/x-icon\\\" an increasing numberdiplomatic relationsare often consideredmeta charset=\\\"utf-8\\\" <input type=\\\"text\\\" examples include the\\\"><img src=\\\"http://iparticipation in thethe establishment of\\n</div>\\n<div class=\\\"&amp;nbsp;&amp;nbsp;to determine whetherquite different frommarked the beginningdistance between thecontributions to theconflict between thewidely considered towas one of the firstwith varying degreeshave speculated that(document.getElementparticipating in theoriginally developedeta charset=\\\"utf-8\\\"> type=\\\"text/css\\\" />\\ninterchangeably withmore closely relatedsocial and politicalthat would otherwiseperpendicular to thestyle type=\\\"text/csstype=\\\"submit\\\" name=\\\"families residing indeveloping countriescomputer programmingeconomic developmentdetermination of thefor more informationon several occasionsportuguC*s (Europeu)P#P:Q\\u0000P0Q\\u0017P=Q\\u0001Q\\u000CP:P0Q\\u0003P:Q\\u0000P0Q\\u0017P=Q\\u0001Q\\u000CP:P0P P>Q\\u0001Q\\u0001P8P9Q\\u0001P:P>P9P<P0Q\\u0002P5Q\\u0000P8P0P;P>P2P8P=Q\\u0004P>Q\\u0000P<P0Q\\u0006P8P8Q\\u0003P?Q\\u0000P0P2P;P5P=P8Q\\u000FP=P5P>P1Q\\u0005P>P4P8P<P>P8P=Q\\u0004P>Q\\u0000P<P0Q\\u0006P8Q\\u000FP\\u0018P=Q\\u0004P>Q\\u0000P<P0Q\\u0006P8Q\\u000FP P5Q\\u0001P?Q\\u0003P1P;P8P:P8P:P>P;P8Q\\u0007P5Q\\u0001Q\\u0002P2P>P8P=Q\\u0004P>Q\\u0000P<P0Q\\u0006P8Q\\u000EQ\\u0002P5Q\\u0000Q\\u0000P8Q\\u0002P>Q\\u0000P8P8P4P>Q\\u0001Q\\u0002P0Q\\u0002P>Q\\u0007P=P>X'Y\\u0004Y\\u0005X*Y\\u0008X'X,X/Y\\u0008Y\\u0006X'Y\\u0004X'X4X*X1X'Y\\u0003X'X*X'Y\\u0004X'Y\\u0002X*X1X'X-X'X*html; charset=UTF-8\\\" setTimeout(function()display:inline-block;<input type=\\\"submit\\\" type = 'text/javascri<img src=\\\"http://www.\\\" \\\"http://www.w3.org/shortcut icon\\\" href=\\\"\\\" autocomplete=\\\"off\\\" </a></div><div class=</a></li>\\n<li class=\\\"css\\\" type=\\\"text/css\\\" <form action=\\\"http://xt/css\\\" href=\\\"http://link rel=\\\"alternate\\\" \\r\\n<script type=\\\"text/ onclick=\\\"javascript:(new Date).getTime()}height=\\\"1\\\" width=\\\"1\\\" People's Republic of  <a href=\\\"http://www.text-decoration:underthe beginning of the </div>\\n</div>\\n</div>\\nestablishment of the </div></div></div></d#viewport{min-height:\\n<script src=\\\"http://option><option value=often referred to as /option>\\n<option valu<!DOCTYPE html>\\n<!--[International Airport>\\n<a href=\\\"http://www</a><a href=\\\"http://w`8 `82`8)`82`9\\u0004`8\\u0017`8\\\"a\\u0003%a\\u0003\\u0010a\\u0003 a\\u0003\\u0017a\\u0003#a\\u0003\\u001Aa\\u0003\\u0018f-#i+\\u0014d8-f\\u0016\\u0007 (g9\\u0001i+\\u0014)`$(`$?`$0`%\\r`$&`%\\u0007`$6`$!`$>`$\\t`$(`$2`%\\u000B`$!`$\\u0015`%\\r`$7`%\\u0007`$$`%\\r`$0`$\\u001C`$>`$(`$\\u0015`$>`$0`%\\u0000`$8`$\\u0002`$,`$\\u0002`$'`$?`$$`$8`%\\r`$%`$>`$*`$(`$>`$8`%\\r`$5`%\\u0000`$\\u0015`$>`$0`$8`$\\u0002`$8`%\\r`$\\u0015`$0`$#`$8`$>`$.`$\\u0017`%\\r`$0`%\\u0000`$\\u001A`$?`$\\u001F`%\\r`$ `%\\u000B`$\\u0002`$5`$?`$\\u001C`%\\r`$\\u001E`$>`$(`$\\u0005`$.`%\\u0007`$0`$?`$\\u0015`$>`$5`$?`$-`$?`$(`%\\r`$(`$\\u0017`$>`$!`$?`$/`$>`$\\u0001`$\\u0015`%\\r`$/`%\\u000B`$\\u0002`$\\u0015`$?`$8`%\\u0001`$0`$\\u0015`%\\r`$7`$>`$*`$9`%\\u0001`$\\u0001`$\\u001A`$$`%\\u0000`$*`%\\r`$0`$,`$\\u0002`$'`$(`$\\u001F`$?`$*`%\\r`$*`$#`%\\u0000`$\\u0015`%\\r`$0`$?`$\\u0015`%\\u0007`$\\u001F`$*`%\\r`$0`$>`$0`$\\u0002`$-`$*`%\\r`$0`$>`$*`%\\r`$$`$.`$>`$2`$?`$\\u0015`%\\u000B`$\\u0002`$0`$+`$<`%\\r`$$`$>`$0`$(`$?`$0`%\\r`$.`$>`$#`$2`$?`$.`$?`$\\u001F`%\\u0007`$!description\\\" content=\\\"document.location.prot.getElementsByTagName(<!DOCTYPE html>\\n<html <meta charset=\\\"utf-8\\\">:url\\\" content=\\\"http://.css\\\" rel=\\\"stylesheet\\\"style type=\\\"text/css\\\">type=\\\"text/css\\\" href=\\\"w3.org/1999/xhtml\\\" xmltype=\\\"text/javascript\\\" method=\\\"get\\\" action=\\\"link rel=\\\"stylesheet\\\"  = document.getElementtype=\\\"image/x-icon\\\" />cellpadding=\\\"0\\\" cellsp.css\\\" type=\\\"text/css\\\" </a></li><li><a href=\\\"\\\" width=\\\"1\\\" height=\\\"1\\\"\\\"><a href=\\\"http://www.style=\\\"display:none;\\\">alternate\\\" type=\\\"appli-//W3C//DTD XHTML 1.0 ellspacing=\\\"0\\\" cellpad type=\\\"hidden\\\" value=\\\"/a>&nbsp;<span role=\\\"s\\n<input type=\\\"hidden\\\" language=\\\"JavaScript\\\"  document.getElementsBg=\\\"0\\\" cellspacing=\\\"0\\\" ype=\\\"text/css\\\" media=\\\"type='text/javascript'with the exception of ype=\\\"text/css\\\" rel=\\\"st height=\\\"1\\\" width=\\\"1\\\" ='+encodeURIComponent(<link rel=\\\"alternate\\\" \\nbody, tr, input, textmeta name=\\\"robots\\\" conmethod=\\\"post\\\" action=\\\">\\n<a href=\\\"http://www.css\\\" rel=\\\"stylesheet\\\" </div></div><div classlanguage=\\\"javascript\\\">aria-hidden=\\\"true\\\">B7<ript\\\" type=\\\"text/javasl=0;})();\\n(function(){background-image: url(/a></li><li><a href=\\\"h\\t\\t<li><a href=\\\"http://ator\\\" aria-hidden=\\\"tru> <a href=\\\"http://www.language=\\\"javascript\\\" /option>\\n<option value/div></div><div class=rator\\\" aria-hidden=\\\"tre=(new Date).getTime()portuguC*s (do Brasil)P>Q\\u0000P3P0P=P8P7P0Q\\u0006P8P8P2P>P7P<P>P6P=P>Q\\u0001Q\\u0002Q\\u000CP>P1Q\\u0000P0P7P>P2P0P=P8Q\\u000FQ\\u0000P5P3P8Q\\u0001Q\\u0002Q\\u0000P0Q\\u0006P8P8P2P>P7P<P>P6P=P>Q\\u0001Q\\u0002P8P>P1Q\\u000FP7P0Q\\u0002P5P;Q\\u000CP=P0<!DOCTYPE html PUBLIC \\\"nt-Type\\\" content=\\\"text/<meta http-equiv=\\\"Conteransitional//EN\\\" \\\"http:<html xmlns=\\\"http://www-//W3C//DTD XHTML 1.0 TDTD/xhtml1-transitional//www.w3.org/TR/xhtml1/pe = 'text/javascript';<meta name=\\\"descriptionparentNode.insertBefore<input type=\\\"hidden\\\" najs\\\" type=\\\"text/javascri(document).ready(functiscript type=\\\"text/javasimage\\\" content=\\\"http://UA-Compatible\\\" content=tml; charset=utf-8\\\" />\\nlink rel=\\\"shortcut icon<link rel=\\\"stylesheet\\\" </script>\\n<script type== document.createElemen<a target=\\\"_blank\\\" href= document.getElementsBinput type=\\\"text\\\" name=a.type = 'text/javascrinput type=\\\"hidden\\\" namehtml; charset=utf-8\\\" />dtd\\\">\\n<html xmlns=\\\"http-//W3C//DTD HTML 4.01 TentsByTagName('script')input type=\\\"hidden\\\" nam<script type=\\\"text/javas\\\" style=\\\"display:none;\\\">document.getElementById(=document.createElement(' type='text/javascript'input type=\\\"text\\\" name=\\\"d.getElementsByTagName(snical\\\" href=\\\"http://www.C//DTD HTML 4.01 Transit<style type=\\\"text/css\\\">\\n\\n<style type=\\\"text/css\\\">ional.dtd\\\">\\n<html xmlns=http-equiv=\\\"Content-Typeding=\\\"0\\\" cellspacing=\\\"0\\\"html; charset=utf-8\\\" />\\n style=\\\"display:none;\\\"><<li><a href=\\\"http://www. type='text/javascript'>P4P5Q\\u000FQ\\u0002P5P;Q\\u000CP=P>Q\\u0001Q\\u0002P8Q\\u0001P>P>Q\\u0002P2P5Q\\u0002Q\\u0001Q\\u0002P2P8P8P?Q\\u0000P>P8P7P2P>P4Q\\u0001Q\\u0002P2P0P1P5P7P>P?P0Q\\u0001P=P>Q\\u0001Q\\u0002P8`$*`%\\u0001`$8`%\\r`$$`$?`$\\u0015`$>`$\\u0015`$>`$\\u0002`$\\u0017`%\\r`$0`%\\u0007`$8`$\\t`$(`%\\r`$9`%\\u000B`$\\u0002`$(`%\\u0007`$5`$?`$'`$>`$(`$8`$-`$>`$+`$?`$\\u0015`%\\r`$8`$?`$\\u0002`$\\u0017`$8`%\\u0001`$0`$\\u0015`%\\r`$7`$?`$$`$\\u0015`%\\t`$*`%\\u0000`$0`$>`$\\u0007`$\\u001F`$5`$?`$\\u001C`%\\r`$\\u001E`$>`$*`$(`$\\u0015`$>`$0`%\\r`$0`$5`$>`$\\u0008`$8`$\\u0015`%\\r`$0`$?`$/`$$`$>\", \"\\u06F7%\\u018C'T%\\u0085'W%\\u00D7%O%g%\\u00A6&\\u0193%\\u01E5&>&*&'&^&\\u0088\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\u0082&P&1&\\u00B1&3&]&m&u&E&t&C&\\u00CF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\u00CC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\u0081&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\u009A&>&\\u0086&7&]&F&2&>&J&6&n&2&%&?&\\u008E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\u0084(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\u0081&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\u00C6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\u00CC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\u00A8\\u04B4\\u0174\");\n    flipBuffer(dictionary);\n    DICTIONARY_DATA = dictionary;\n  }\n\n\n  /**\n   * @param {!number} a\n   * @param {!number} b\n   * @return {!number}\n   */\n  function min(a, b) {\n    return a <= b ? a : b;\n  }\n\n  /**\n   * @param {!InputStream|null} src\n   * @param {!Int8Array} dst\n   * @param {!number} offset\n   * @param {!number} length\n   * @return {!number}\n   */\n  function readInput(src, dst, offset, length) {\n    if (src == null) return -1;\n    var /** number */ end = min(src.offset + length, src.data.length);\n    var /** number */ bytesRead = end - src.offset;\n    dst.set(src.data.subarray(src.offset, end), offset);\n    src.offset += bytesRead;\n    return bytesRead;\n  }\n\n  /**\n   * @param {!InputStream} src\n   * @return {!number}\n   */\n  function closeInput(src) { return 0; }\n\n  /**\n   * @param {!Int8Array} buffer\n   * @return {void}\n   */\n  function flipBuffer(buffer) { /* no-op */ }\n\n  /**\n   * @param {!string} src\n   * @return {!Int8Array}\n   */\n  function toUsAsciiBytes(src) {\n    var /** !number */ n = src.length;\n    var /** !Int8Array */ result = new Int8Array(n);\n    for (var /** !number */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n\n  /**\n   * @param {!Int8Array} bytes\n   * @return {!Int8Array}\n   */\n  function decode(bytes) {\n    var /** !State */ s = new State();\n    initState(s, new InputStream(bytes));\n    var /** !number */ totalOutput = 0;\n    var /** !Array<!Int8Array> */ chunks = [];\n    while (true) {\n      var /** !Int8Array */ chunk = new Int8Array(16384);\n      chunks.push(chunk);\n      s.output = chunk;\n      s.outputOffset = 0;\n      s.outputLength = 16384;\n      s.outputUsed = 0;\n      decompress(s);\n      totalOutput += s.outputUsed;\n      if (s.outputUsed < 16384) break;\n    }\n    close(s);\n    var /** !Int8Array */ result = new Int8Array(totalOutput);\n    var /** !number */ offset = 0;\n    for (var /** !number */ i = 0; i < chunks.length; ++i) {\n      var /** !Int8Array */ chunk = chunks[i];\n      var /** !number */ end = min(totalOutput, offset + 16384);\n      var /** !number */ len = end - offset;\n      if (len < 16384) {\n        result.set(chunk.subarray(0, len), offset);\n      } else {\n        result.set(chunk, offset);\n      }\n      offset += len;\n    }\n    return result;\n  }\n\n  return decode;\n}\n\nexport let BrotliDecode = BrotliDecodeClosure();\n\n// /** @export */\n// var BrotliDecode = BrotliDecodeClosure();\n\n// window[\"BrotliDecode\"] = BrotliDecode;\n"
  },
  {
    "path": "libs/brotli/decode_test.js",
    "content": "goog.require('goog.testing.asserts');\ngoog.require('goog.testing.jsunit');\n\n/**\n * @param {!Int8Array} bytes\n * @return {string}\n */\nfunction bytesToString(bytes) {\n  return String.fromCharCode.apply(null, new Uint16Array(bytes));\n}\n\nfunction testMetadata() {\n  assertEquals(\"\", bytesToString(BrotliDecode(Int8Array.from([1, 11, 0, 42, 3]))));\n}\n\nfunction testEmpty() {\n  assertEquals(\"\", bytesToString(BrotliDecode(Int8Array.from([6]))));\n  assertEquals(\"\", bytesToString(BrotliDecode(Int8Array.from([0x81, 1]))));\n}\n\nfunction testBaseDictWord() {\n  var input = Int8Array.from([\n    0x1b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0x41, 0x02\n  ]);\n  /** @type {!Int8Array} */\n  var output = BrotliDecode(input);\n  assertEquals(\"time\", bytesToString(output));\n}\n\nfunction testBlockCountMessage() {\n  var input = Int8Array.from([\n    0x1b, 0x0b, 0x00, 0x11, 0x01, 0x8c, 0xc1, 0xc5, 0x0d, 0x08, 0x00, 0x22,\n    0x65, 0xe1, 0xfc, 0xfd, 0x22, 0x2c, 0xc4, 0x00, 0x00, 0x38, 0xd8, 0x32,\n    0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x04, 0x10, 0x42, 0x00, 0x00, 0x00\n  ]);\n  /** @type {!Int8Array} */\n  var output = BrotliDecode(input);\n  assertEquals(\"aabbaaaaabab\", bytesToString(output));\n}\n\nfunction testCompressedUncompressedShortCompressedSmallWindow() {\n  var input = Int8Array.from([\n    0x21, 0xf4, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa7, 0x6d, 0x00, 0x00,\n    0x38, 0xd8, 0x32, 0x89, 0x01, 0x12, 0x00, 0x00, 0x77, 0xda, 0x34, 0x7b,\n    0xdb, 0x50, 0x80, 0x02, 0x80, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x31,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x4e, 0xdb, 0x00, 0x00, 0x70, 0xb0,\n    0x65, 0x12, 0x03, 0x24, 0x00, 0x00, 0xee, 0xb4, 0x11, 0x24, 0x00\n  ]);\n  /** @type {!Int8Array} */\n  var output = BrotliDecode(input);\n  assertEquals(\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" +\n    \"aaaaaaaaaaaaaabbbbbbbbbb\", bytesToString(output));\n}\n\nfunction testIntactDistanceRingBuffer0() {\n  var input = Int8Array.from([\n    0x1b, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0xb4, 0x0d, 0x00, 0x00,\n    0x07, 0x5b, 0x26, 0x31, 0x40, 0x02, 0x00, 0xe0, 0x4e, 0x1b, 0xa1, 0x80,\n    0x20, 0x00\n  ]);\n  /** @type {!Int8Array} */\n  var output = BrotliDecode(input);\n  assertEquals(\"himselfself\", bytesToString(output));\n}\n"
  },
  {
    "path": "libs/brotli/polyfill.js",
    "content": "if (!Int32Array.__proto__.from) {\n  Object.defineProperty(Int32Array.__proto__, 'from', {\n    value: function(obj) {\n      obj = Object(obj);\n      if (!obj['length']) {\n        return new this(0);\n      }\n      var typed_array = new this(obj.length);\n      for(var i = 0; i < typed_array.length; i++) {\n        typed_array[i] = obj[i];\n      }\n      return typed_array;\n    }\n  });\n}\n\nif (!Array.prototype.copyWithin) {\n  Array.prototype.copyWithin = function(target, start, end) {\n    var O = Object(this);\n    var len = O.length >>> 0;\n    var to = target | 0;\n    var from = start | 0;\n    var count = Math.min(Math.min(end | 0, len) - from, len - to);\n    var direction = 1;\n    if (from < to && to < (from + count)) {\n      direction = -1;\n      from += count - 1;\n      to += count - 1;\n    }\n    while (count > 0) {\n      O[to] = O[from];\n      from += direction;\n      to += direction;\n      count--;\n    }\n    return O;\n  };\n}\n\nif (!Array.prototype.fill) {\n  Object.defineProperty(Array.prototype, 'fill', {\n    value: function(value, start, end) {\n      end = end | 0;\n      var O = Object(this);\n      var k = start | 0;\n      while (k < end) {\n        O[k] = value;\n        k++;\n      }\n      return O;\n    }\n  });\n}\n\nif (!Int8Array.prototype.copyWithin) {\n  Int8Array.prototype.copyWithin = Array.prototype.copyWithin;\n}\n\nif (!Int8Array.prototype.fill) {\n  Int8Array.prototype.fill = Array.prototype.fill;\n}\n\nif (!Int32Array.prototype.fill) {\n  Int32Array.prototype.fill = Array.prototype.fill;\n}\n"
  },
  {
    "path": "libs/d3/LICENSE",
    "content": "Copyright (c) 2010-2017, Michael Bostock\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* The name Michael Bostock may not be used to endorse or promote products\n  derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\nBUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\nOF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\nEVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "libs/d3/d3.js",
    "content": "!function() {\n  var d3 = {\n    version: \"3.5.5\"\n  };\n  var d3_arraySlice = [].slice, d3_array = function(list) {\n    return d3_arraySlice.call(list);\n  };\n  var d3_document = this.document;\n  function d3_documentElement(node) {\n    return node && (node.ownerDocument || node.document || node).documentElement;\n  }\n  function d3_window(node) {\n    return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);\n  }\n  if (d3_document) {\n    try {\n      d3_array(d3_document.documentElement.childNodes)[0].nodeType;\n    } catch (e) {\n      d3_array = function(list) {\n        var i = list.length, array = new Array(i);\n        while (i--) array[i] = list[i];\n        return array;\n      };\n    }\n  }\n  if (!Date.now) Date.now = function() {\n    return +new Date();\n  };\n  if (d3_document) {\n    try {\n      d3_document.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\");\n    } catch (error) {\n      var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n      d3_element_prototype.setAttribute = function(name, value) {\n        d3_element_setAttribute.call(this, name, value + \"\");\n      };\n      d3_element_prototype.setAttributeNS = function(space, local, value) {\n        d3_element_setAttributeNS.call(this, space, local, value + \"\");\n      };\n      d3_style_prototype.setProperty = function(name, value, priority) {\n        d3_style_setProperty.call(this, name, value + \"\", priority);\n      };\n    }\n  }\n  d3.ascending = d3_ascending;\n  function d3_ascending(a, b) {\n    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n  }\n  d3.descending = function(a, b) {\n    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n  };\n  d3.min = function(array, f) {\n    var i = -1, n = array.length, a, b;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n    }\n    return a;\n  };\n  d3.max = function(array, f) {\n    var i = -1, n = array.length, a, b;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n    }\n    return a;\n  };\n  d3.extent = function(array, f) {\n    var i = -1, n = array.length, a, b, c;\n    if (arguments.length === 1) {\n      while (++i < n) if ((b = array[i]) != null && b >= b) {\n        a = c = b;\n        break;\n      }\n      while (++i < n) if ((b = array[i]) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    } else {\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n        a = c = b;\n        break;\n      }\n      while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n        if (a > b) a = b;\n        if (c < b) c = b;\n      }\n    }\n    return [ a, c ];\n  };\n  function d3_number(x) {\n    return x === null ? NaN : +x;\n  }\n  function d3_numeric(x) {\n    return !isNaN(x);\n  }\n  d3.sum = function(array, f) {\n    var s = 0, n = array.length, a, i = -1;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n    } else {\n      while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n    }\n    return s;\n  };\n  d3.mean = function(array, f) {\n    var s = 0, n = array.length, a, i = -1, j = n;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n    } else {\n      while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n    }\n    if (j) return s / j;\n  };\n  d3.quantile = function(values, p) {\n    var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n    return e ? v + e * (values[h] - v) : v;\n  };\n  d3.median = function(array, f) {\n    var numbers = [], n = array.length, a, i = -1;\n    if (arguments.length === 1) {\n      while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n    } else {\n      while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n    }\n    if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n  };\n  d3.variance = function(array, f) {\n    var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;\n    if (arguments.length === 1) {\n      while (++i < n) {\n        if (d3_numeric(a = d3_number(array[i]))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    } else {\n      while (++i < n) {\n        if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {\n          d = a - m;\n          m += d / ++j;\n          s += d * (a - m);\n        }\n      }\n    }\n    if (j > 1) return s / (j - 1);\n  };\n  d3.deviation = function() {\n    var v = d3.variance.apply(this, arguments);\n    return v ? Math.sqrt(v) : v;\n  };\n  function d3_bisector(compare) {\n    return {\n      left: function(a, x, lo, hi) {\n        if (arguments.length < 3) lo = 0;\n        if (arguments.length < 4) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n        }\n        return lo;\n      },\n      right: function(a, x, lo, hi) {\n        if (arguments.length < 3) lo = 0;\n        if (arguments.length < 4) hi = a.length;\n        while (lo < hi) {\n          var mid = lo + hi >>> 1;\n          if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n        }\n        return lo;\n      }\n    };\n  }\n  var d3_bisect = d3_bisector(d3_ascending);\n  d3.bisectLeft = d3_bisect.left;\n  d3.bisect = d3.bisectRight = d3_bisect.right;\n  d3.bisector = function(f) {\n    return d3_bisector(f.length === 1 ? function(d, x) {\n      return d3_ascending(f(d), x);\n    } : f);\n  };\n  d3.shuffle = function(array, i0, i1) {\n    if ((m = arguments.length) < 3) {\n      i1 = array.length;\n      if (m < 2) i0 = 0;\n    }\n    var m = i1 - i0, t, i;\n    while (m) {\n      i = Math.random() * m-- | 0;\n      t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n    }\n    return array;\n  };\n  d3.permute = function(array, indexes) {\n    var i = indexes.length, permutes = new Array(i);\n    while (i--) permutes[i] = array[indexes[i]];\n    return permutes;\n  };\n  d3.pairs = function(array) {\n    var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n    while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n    return pairs;\n  };\n  d3.zip = function() {\n    if (!(n = arguments.length)) return [];\n    for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {\n      for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {\n        zip[j] = arguments[j][i];\n      }\n    }\n    return zips;\n  };\n  function d3_zipLength(d) {\n    return d.length;\n  }\n  d3.transpose = function(matrix) {\n    return d3.zip.apply(d3, matrix);\n  };\n  d3.keys = function(map) {\n    var keys = [];\n    for (var key in map) keys.push(key);\n    return keys;\n  };\n  d3.values = function(map) {\n    var values = [];\n    for (var key in map) values.push(map[key]);\n    return values;\n  };\n  d3.entries = function(map) {\n    var entries = [];\n    for (var key in map) entries.push({\n      key: key,\n      value: map[key]\n    });\n    return entries;\n  };\n  d3.merge = function(arrays) {\n    var n = arrays.length, m, i = -1, j = 0, merged, array;\n    while (++i < n) j += arrays[i].length;\n    merged = new Array(j);\n    while (--n >= 0) {\n      array = arrays[n];\n      m = array.length;\n      while (--m >= 0) {\n        merged[--j] = array[m];\n      }\n    }\n    return merged;\n  };\n  var abs = Math.abs;\n  d3.range = function(start, stop, step) {\n    if (arguments.length < 3) {\n      step = 1;\n      if (arguments.length < 2) {\n        stop = start;\n        start = 0;\n      }\n    }\n    if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n    var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n    start *= k, stop *= k, step *= k;\n    if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n    return range;\n  };\n  function d3_range_integerScale(x) {\n    var k = 1;\n    while (x * k % 1) k *= 10;\n    return k;\n  }\n  function d3_class(ctor, properties) {\n    for (var key in properties) {\n      Object.defineProperty(ctor.prototype, key, {\n        value: properties[key],\n        enumerable: false\n      });\n    }\n  }\n  d3.map = function(object, f) {\n    var map = new d3_Map();\n    if (object instanceof d3_Map) {\n      object.forEach(function(key, value) {\n        map.set(key, value);\n      });\n    } else if (Array.isArray(object)) {\n      var i = -1, n = object.length, o;\n      if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n    } else {\n      for (var key in object) map.set(key, object[key]);\n    }\n    return map;\n  };\n  function d3_Map() {\n    this._ = Object.create(null);\n  }\n  var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n  d3_class(d3_Map, {\n    has: d3_map_has,\n    get: function(key) {\n      return this._[d3_map_escape(key)];\n    },\n    set: function(key, value) {\n      return this._[d3_map_escape(key)] = value;\n    },\n    remove: d3_map_remove,\n    keys: d3_map_keys,\n    values: function() {\n      var values = [];\n      for (var key in this._) values.push(this._[key]);\n      return values;\n    },\n    entries: function() {\n      var entries = [];\n      for (var key in this._) entries.push({\n        key: d3_map_unescape(key),\n        value: this._[key]\n      });\n      return entries;\n    },\n    size: d3_map_size,\n    empty: d3_map_empty,\n    forEach: function(f) {\n      for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n    }\n  });\n  function d3_map_escape(key) {\n    return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n  }\n  function d3_map_unescape(key) {\n    return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n  }\n  function d3_map_has(key) {\n    return d3_map_escape(key) in this._;\n  }\n  function d3_map_remove(key) {\n    return (key = d3_map_escape(key)) in this._ && delete this._[key];\n  }\n  function d3_map_keys() {\n    var keys = [];\n    for (var key in this._) keys.push(d3_map_unescape(key));\n    return keys;\n  }\n  function d3_map_size() {\n    var size = 0;\n    for (var key in this._) ++size;\n    return size;\n  }\n  function d3_map_empty() {\n    for (var key in this._) return false;\n    return true;\n  }\n  d3.nest = function() {\n    var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n    function map(mapType, array, depth) {\n      if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n      var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n      while (++i < n) {\n        if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n          values.push(object);\n        } else {\n          valuesByKey.set(keyValue, [ object ]);\n        }\n      }\n      if (mapType) {\n        object = mapType();\n        setter = function(keyValue, values) {\n          object.set(keyValue, map(mapType, values, depth));\n        };\n      } else {\n        object = {};\n        setter = function(keyValue, values) {\n          object[keyValue] = map(mapType, values, depth);\n        };\n      }\n      valuesByKey.forEach(setter);\n      return object;\n    }\n    function entries(map, depth) {\n      if (depth >= keys.length) return map;\n      var array = [], sortKey = sortKeys[depth++];\n      map.forEach(function(key, keyMap) {\n        array.push({\n          key: key,\n          values: entries(keyMap, depth)\n        });\n      });\n      return sortKey ? array.sort(function(a, b) {\n        return sortKey(a.key, b.key);\n      }) : array;\n    }\n    nest.map = function(array, mapType) {\n      return map(mapType, array, 0);\n    };\n    nest.entries = function(array) {\n      return entries(map(d3.map, array, 0), 0);\n    };\n    nest.key = function(d) {\n      keys.push(d);\n      return nest;\n    };\n    nest.sortKeys = function(order) {\n      sortKeys[keys.length - 1] = order;\n      return nest;\n    };\n    nest.sortValues = function(order) {\n      sortValues = order;\n      return nest;\n    };\n    nest.rollup = function(f) {\n      rollup = f;\n      return nest;\n    };\n    return nest;\n  };\n  d3.set = function(array) {\n    var set = new d3_Set();\n    if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n    return set;\n  };\n  function d3_Set() {\n    this._ = Object.create(null);\n  }\n  d3_class(d3_Set, {\n    has: d3_map_has,\n    add: function(key) {\n      this._[d3_map_escape(key += \"\")] = true;\n      return key;\n    },\n    remove: d3_map_remove,\n    values: d3_map_keys,\n    size: d3_map_size,\n    empty: d3_map_empty,\n    forEach: function(f) {\n      for (var key in this._) f.call(this, d3_map_unescape(key));\n    }\n  });\n  d3.behavior = {};\n  function d3_identity(d) {\n    return d;\n  }\n  d3.rebind = function(target, source) {\n    var i = 1, n = arguments.length, method;\n    while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n    return target;\n  };\n  function d3_rebind(target, source, method) {\n    return function() {\n      var value = method.apply(source, arguments);\n      return value === source ? target : value;\n    };\n  }\n  function d3_vendorSymbol(object, name) {\n    if (name in object) return name;\n    name = name.charAt(0).toUpperCase() + name.slice(1);\n    for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n      var prefixName = d3_vendorPrefixes[i] + name;\n      if (prefixName in object) return prefixName;\n    }\n  }\n  var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n  function d3_noop() {}\n  d3.dispatch = function() {\n    var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n    return dispatch;\n  };\n  function d3_dispatch() {}\n  d3_dispatch.prototype.on = function(type, listener) {\n    var i = type.indexOf(\".\"), name = \"\";\n    if (i >= 0) {\n      name = type.slice(i + 1);\n      type = type.slice(0, i);\n    }\n    if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n    if (arguments.length === 2) {\n      if (listener == null) for (type in this) {\n        if (this.hasOwnProperty(type)) this[type].on(name, null);\n      }\n      return this;\n    }\n  };\n  function d3_dispatch_event(dispatch) {\n    var listeners = [], listenerByName = new d3_Map();\n    function event() {\n      var z = listeners, i = -1, n = z.length, l;\n      while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n      return dispatch;\n    }\n    event.on = function(name, listener) {\n      var l = listenerByName.get(name), i;\n      if (arguments.length < 2) return l && l.on;\n      if (l) {\n        l.on = null;\n        listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n        listenerByName.remove(name);\n      }\n      if (listener) listeners.push(listenerByName.set(name, {\n        on: listener\n      }));\n      return dispatch;\n    };\n    return event;\n  }\n  d3.event = null;\n  function d3_eventPreventDefault() {\n    d3.event.preventDefault();\n  }\n  function d3_eventSource() {\n    var e = d3.event, s;\n    while (s = e.sourceEvent) e = s;\n    return e;\n  }\n  function d3_eventDispatch(target) {\n    var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n    dispatch.of = function(thiz, argumentz) {\n      return function(e1) {\n        try {\n          var e0 = e1.sourceEvent = d3.event;\n          e1.target = target;\n          d3.event = e1;\n          dispatch[e1.type].apply(thiz, argumentz);\n        } finally {\n          d3.event = e0;\n        }\n      };\n    };\n    return dispatch;\n  }\n  d3.requote = function(s) {\n    return s.replace(d3_requote_re, \"\\\\$&\");\n  };\n  var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n  var d3_subclass = {}.__proto__ ? function(object, prototype) {\n    object.__proto__ = prototype;\n  } : function(object, prototype) {\n    for (var property in prototype) object[property] = prototype[property];\n  };\n  function d3_selection(groups) {\n    d3_subclass(groups, d3_selectionPrototype);\n    return groups;\n  }\n  var d3_select = function(s, n) {\n    return n.querySelector(s);\n  }, d3_selectAll = function(s, n) {\n    return n.querySelectorAll(s);\n  }, d3_selectMatches = function(n, s) {\n    var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, \"matchesSelector\")];\n    d3_selectMatches = function(n, s) {\n      return d3_selectMatcher.call(n, s);\n    };\n    return d3_selectMatches(n, s);\n  };\n  if (typeof Sizzle === \"function\") {\n    d3_select = function(s, n) {\n      return Sizzle(s, n)[0] || null;\n    };\n    d3_selectAll = Sizzle;\n    d3_selectMatches = Sizzle.matchesSelector;\n  }\n  d3.selection = function() {\n    return d3.select(d3_document.documentElement);\n  };\n  var d3_selectionPrototype = d3.selection.prototype = [];\n  d3_selectionPrototype.select = function(selector) {\n    var subgroups = [], subgroup, subnode, group, node;\n    selector = d3_selection_selector(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = (group = this[j]).parentNode;\n      for (var i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n          if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_selector(selector) {\n    return typeof selector === \"function\" ? selector : function() {\n      return d3_select(selector, this);\n    };\n  }\n  d3_selectionPrototype.selectAll = function(selector) {\n    var subgroups = [], subgroup, node;\n    selector = d3_selection_selectorAll(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n          subgroup.parentNode = node;\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_selectorAll(selector) {\n    return typeof selector === \"function\" ? selector : function() {\n      return d3_selectAll(selector, this);\n    };\n  }\n  var d3_nsPrefix = {\n    svg: \"http://www.w3.org/2000/svg\",\n    xhtml: \"http://www.w3.org/1999/xhtml\",\n    xlink: \"http://www.w3.org/1999/xlink\",\n    xml: \"http://www.w3.org/XML/1998/namespace\",\n    xmlns: \"http://www.w3.org/2000/xmlns/\"\n  };\n  d3.ns = {\n    prefix: d3_nsPrefix,\n    qualify: function(name) {\n      var i = name.indexOf(\":\"), prefix = name;\n      if (i >= 0) {\n        prefix = name.slice(0, i);\n        name = name.slice(i + 1);\n      }\n      return d3_nsPrefix.hasOwnProperty(prefix) ? {\n        space: d3_nsPrefix[prefix],\n        local: name\n      } : name;\n    }\n  };\n  d3_selectionPrototype.attr = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") {\n        var node = this.node();\n        name = d3.ns.qualify(name);\n        return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n      }\n      for (value in name) this.each(d3_selection_attr(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_attr(name, value));\n  };\n  function d3_selection_attr(name, value) {\n    name = d3.ns.qualify(name);\n    function attrNull() {\n      this.removeAttribute(name);\n    }\n    function attrNullNS() {\n      this.removeAttributeNS(name.space, name.local);\n    }\n    function attrConstant() {\n      this.setAttribute(name, value);\n    }\n    function attrConstantNS() {\n      this.setAttributeNS(name.space, name.local, value);\n    }\n    function attrFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n    }\n    function attrFunctionNS() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n    }\n    return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n  }\n  function d3_collapse(s) {\n    return s.trim().replace(/\\s+/g, \" \");\n  }\n  d3_selectionPrototype.classed = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") {\n        var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n        if (value = node.classList) {\n          while (++i < n) if (!value.contains(name[i])) return false;\n        } else {\n          value = node.getAttribute(\"class\");\n          while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n        }\n        return true;\n      }\n      for (value in name) this.each(d3_selection_classed(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_classed(name, value));\n  };\n  function d3_selection_classedRe(name) {\n    return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n  }\n  function d3_selection_classes(name) {\n    return (name + \"\").trim().split(/^|\\s+/);\n  }\n  function d3_selection_classed(name, value) {\n    name = d3_selection_classes(name).map(d3_selection_classedName);\n    var n = name.length;\n    function classedConstant() {\n      var i = -1;\n      while (++i < n) name[i](this, value);\n    }\n    function classedFunction() {\n      var i = -1, x = value.apply(this, arguments);\n      while (++i < n) name[i](this, x);\n    }\n    return typeof value === \"function\" ? classedFunction : classedConstant;\n  }\n  function d3_selection_classedName(name) {\n    var re = d3_selection_classedRe(name);\n    return function(node, value) {\n      if (c = node.classList) return value ? c.add(name) : c.remove(name);\n      var c = node.getAttribute(\"class\") || \"\";\n      if (value) {\n        re.lastIndex = 0;\n        if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n      } else {\n        node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n      }\n    };\n  }\n  d3_selectionPrototype.style = function(name, value, priority) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof name !== \"string\") {\n        if (n < 2) value = \"\";\n        for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n        return this;\n      }\n      if (n < 2) {\n        var node = this.node();\n        return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);\n      }\n      priority = \"\";\n    }\n    return this.each(d3_selection_style(name, value, priority));\n  };\n  function d3_selection_style(name, value, priority) {\n    function styleNull() {\n      this.style.removeProperty(name);\n    }\n    function styleConstant() {\n      this.style.setProperty(name, value, priority);\n    }\n    function styleFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n    }\n    return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n  }\n  d3_selectionPrototype.property = function(name, value) {\n    if (arguments.length < 2) {\n      if (typeof name === \"string\") return this.node()[name];\n      for (value in name) this.each(d3_selection_property(value, name[value]));\n      return this;\n    }\n    return this.each(d3_selection_property(name, value));\n  };\n  function d3_selection_property(name, value) {\n    function propertyNull() {\n      delete this[name];\n    }\n    function propertyConstant() {\n      this[name] = value;\n    }\n    function propertyFunction() {\n      var x = value.apply(this, arguments);\n      if (x == null) delete this[name]; else this[name] = x;\n    }\n    return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n  }\n  d3_selectionPrototype.text = function(value) {\n    return arguments.length ? this.each(typeof value === \"function\" ? function() {\n      var v = value.apply(this, arguments);\n      this.textContent = v == null ? \"\" : v;\n    } : value == null ? function() {\n      this.textContent = \"\";\n    } : function() {\n      this.textContent = value;\n    }) : this.node().textContent;\n  };\n  d3_selectionPrototype.html = function(value) {\n    return arguments.length ? this.each(typeof value === \"function\" ? function() {\n      var v = value.apply(this, arguments);\n      this.innerHTML = v == null ? \"\" : v;\n    } : value == null ? function() {\n      this.innerHTML = \"\";\n    } : function() {\n      this.innerHTML = value;\n    }) : this.node().innerHTML;\n  };\n  d3_selectionPrototype.append = function(name) {\n    name = d3_selection_creator(name);\n    return this.select(function() {\n      return this.appendChild(name.apply(this, arguments));\n    });\n  };\n  function d3_selection_creator(name) {\n    function create() {\n      var document = this.ownerDocument, namespace = this.namespaceURI;\n      return namespace ? document.createElementNS(namespace, name) : document.createElement(name);\n    }\n    function createNS() {\n      return this.ownerDocument.createElementNS(name.space, name.local);\n    }\n    return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;\n  }\n  d3_selectionPrototype.insert = function(name, before) {\n    name = d3_selection_creator(name);\n    before = d3_selection_selector(before);\n    return this.select(function() {\n      return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n    });\n  };\n  d3_selectionPrototype.remove = function() {\n    return this.each(d3_selectionRemove);\n  };\n  function d3_selectionRemove() {\n    var parent = this.parentNode;\n    if (parent) parent.removeChild(this);\n  }\n  d3_selectionPrototype.data = function(value, key) {\n    var i = -1, n = this.length, group, node;\n    if (!arguments.length) {\n      value = new Array(n = (group = this[0]).length);\n      while (++i < n) {\n        if (node = group[i]) {\n          value[i] = node.__data__;\n        }\n      }\n      return value;\n    }\n    function bind(group, groupData) {\n      var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n      if (key) {\n        var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n        for (i = -1; ++i < n; ) {\n          if (nodeByKeyValue.has(keyValue = key.call(node = group[i], node.__data__, i))) {\n            exitNodes[i] = node;\n          } else {\n            nodeByKeyValue.set(keyValue, node);\n          }\n          keyValues[i] = keyValue;\n        }\n        for (i = -1; ++i < m; ) {\n          if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n            enterNodes[i] = d3_selection_dataNode(nodeData);\n          } else if (node !== true) {\n            updateNodes[i] = node;\n            node.__data__ = nodeData;\n          }\n          nodeByKeyValue.set(keyValue, true);\n        }\n        for (i = -1; ++i < n; ) {\n          if (nodeByKeyValue.get(keyValues[i]) !== true) {\n            exitNodes[i] = group[i];\n          }\n        }\n      } else {\n        for (i = -1; ++i < n0; ) {\n          node = group[i];\n          nodeData = groupData[i];\n          if (node) {\n            node.__data__ = nodeData;\n            updateNodes[i] = node;\n          } else {\n            enterNodes[i] = d3_selection_dataNode(nodeData);\n          }\n        }\n        for (;i < m; ++i) {\n          enterNodes[i] = d3_selection_dataNode(groupData[i]);\n        }\n        for (;i < n; ++i) {\n          exitNodes[i] = group[i];\n        }\n      }\n      enterNodes.update = updateNodes;\n      enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n      enter.push(enterNodes);\n      update.push(updateNodes);\n      exit.push(exitNodes);\n    }\n    var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n    if (typeof value === \"function\") {\n      while (++i < n) {\n        bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n      }\n    } else {\n      while (++i < n) {\n        bind(group = this[i], value);\n      }\n    }\n    update.enter = function() {\n      return enter;\n    };\n    update.exit = function() {\n      return exit;\n    };\n    return update;\n  };\n  function d3_selection_dataNode(data) {\n    return {\n      __data__: data\n    };\n  }\n  d3_selectionPrototype.datum = function(value) {\n    return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n  };\n  d3_selectionPrototype.filter = function(filter) {\n    var subgroups = [], subgroup, group, node;\n    if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = (group = this[j]).parentNode;\n      for (var i = 0, n = group.length; i < n; i++) {\n        if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n          subgroup.push(node);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  function d3_selection_filter(selector) {\n    return function() {\n      return d3_selectMatches(this, selector);\n    };\n  }\n  d3_selectionPrototype.order = function() {\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n        if (node = group[i]) {\n          if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n          next = node;\n        }\n      }\n    }\n    return this;\n  };\n  d3_selectionPrototype.sort = function(comparator) {\n    comparator = d3_selection_sortComparator.apply(this, arguments);\n    for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n    return this.order();\n  };\n  function d3_selection_sortComparator(comparator) {\n    if (!arguments.length) comparator = d3_ascending;\n    return function(a, b) {\n      return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n    };\n  }\n  d3_selectionPrototype.each = function(callback) {\n    return d3_selection_each(this, function(node, i, j) {\n      callback.call(node, node.__data__, i, j);\n    });\n  };\n  function d3_selection_each(groups, callback) {\n    for (var j = 0, m = groups.length; j < m; j++) {\n      for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {\n        if (node = group[i]) callback(node, i, j);\n      }\n    }\n    return groups;\n  }\n  d3_selectionPrototype.call = function(callback) {\n    var args = d3_array(arguments);\n    callback.apply(args[0] = this, args);\n    return this;\n  };\n  d3_selectionPrototype.empty = function() {\n    return !this.node();\n  };\n  d3_selectionPrototype.node = function() {\n    for (var j = 0, m = this.length; j < m; j++) {\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        var node = group[i];\n        if (node) return node;\n      }\n    }\n    return null;\n  };\n  d3_selectionPrototype.size = function() {\n    var n = 0;\n    d3_selection_each(this, function() {\n      ++n;\n    });\n    return n;\n  };\n  function d3_selection_enter(selection) {\n    d3_subclass(selection, d3_selection_enterPrototype);\n    return selection;\n  }\n  var d3_selection_enterPrototype = [];\n  d3.selection.enter = d3_selection_enter;\n  d3.selection.enter.prototype = d3_selection_enterPrototype;\n  d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n  d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n  d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n  d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n  d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n  d3_selection_enterPrototype.select = function(selector) {\n    var subgroups = [], subgroup, subnode, upgroup, group, node;\n    for (var j = -1, m = this.length; ++j < m; ) {\n      upgroup = (group = this[j]).update;\n      subgroups.push(subgroup = []);\n      subgroup.parentNode = group.parentNode;\n      for (var i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n          subnode.__data__ = node.__data__;\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_selection(subgroups);\n  };\n  d3_selection_enterPrototype.insert = function(name, before) {\n    if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n    return d3_selectionPrototype.insert.call(this, name, before);\n  };\n  function d3_selection_enterInsertBefore(enter) {\n    var i0, j0;\n    return function(d, i, j) {\n      var group = enter[j].update, n = group.length, node;\n      if (j != j0) j0 = j, i0 = 0;\n      if (i >= i0) i0 = i + 1;\n      while (!(node = group[i0]) && ++i0 < n) ;\n      return node;\n    };\n  }\n  d3.select = function(node) {\n    var group;\n    if (typeof node === \"string\") {\n      group = [ d3_select(node, d3_document) ];\n      group.parentNode = d3_document.documentElement;\n    } else {\n      group = [ node ];\n      group.parentNode = d3_documentElement(node);\n    }\n    return d3_selection([ group ]);\n  };\n  d3.selectAll = function(nodes) {\n    var group;\n    if (typeof nodes === \"string\") {\n      group = d3_array(d3_selectAll(nodes, d3_document));\n      group.parentNode = d3_document.documentElement;\n    } else {\n      group = nodes;\n      group.parentNode = null;\n    }\n    return d3_selection([ group ]);\n  };\n  d3_selectionPrototype.on = function(type, listener, capture) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof type !== \"string\") {\n        if (n < 2) listener = false;\n        for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n        return this;\n      }\n      if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n      capture = false;\n    }\n    return this.each(d3_selection_on(type, listener, capture));\n  };\n  function d3_selection_on(type, listener, capture) {\n    var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n    if (i > 0) type = type.slice(0, i);\n    var filter = d3_selection_onFilters.get(type);\n    if (filter) type = filter, wrap = d3_selection_onFilter;\n    function onRemove() {\n      var l = this[name];\n      if (l) {\n        this.removeEventListener(type, l, l.$);\n        delete this[name];\n      }\n    }\n    function onAdd() {\n      var l = wrap(listener, d3_array(arguments));\n      onRemove.call(this);\n      this.addEventListener(type, this[name] = l, l.$ = capture);\n      l._ = listener;\n    }\n    function removeAll() {\n      var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n      for (var name in this) {\n        if (match = name.match(re)) {\n          var l = this[name];\n          this.removeEventListener(match[1], l, l.$);\n          delete this[name];\n        }\n      }\n    }\n    return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n  }\n  var d3_selection_onFilters = d3.map({\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\"\n  });\n  if (d3_document) {\n    d3_selection_onFilters.forEach(function(k) {\n      if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n    });\n  }\n  function d3_selection_onListener(listener, argumentz) {\n    return function(e) {\n      var o = d3.event;\n      d3.event = e;\n      argumentz[0] = this.__data__;\n      try {\n        listener.apply(this, argumentz);\n      } finally {\n        d3.event = o;\n      }\n    };\n  }\n  function d3_selection_onFilter(listener, argumentz) {\n    var l = d3_selection_onListener(listener, argumentz);\n    return function(e) {\n      var target = this, related = e.relatedTarget;\n      if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n        l.call(target, e);\n      }\n    };\n  }\n  var d3_event_dragSelect, d3_event_dragId = 0;\n  function d3_event_dragSuppress(node) {\n    var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window(node)).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n    if (d3_event_dragSelect == null) {\n      d3_event_dragSelect = \"onselectstart\" in node ? false : d3_vendorSymbol(node.style, \"userSelect\");\n    }\n    if (d3_event_dragSelect) {\n      var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];\n      style[d3_event_dragSelect] = \"none\";\n    }\n    return function(suppressClick) {\n      w.on(name, null);\n      if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n      if (suppressClick) {\n        var off = function() {\n          w.on(click, null);\n        };\n        w.on(click, function() {\n          d3_eventPreventDefault();\n          off();\n        }, true);\n        setTimeout(off, 0);\n      }\n    };\n  }\n  d3.mouse = function(container) {\n    return d3_mousePoint(container, d3_eventSource());\n  };\n  var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n  function d3_mousePoint(container, e) {\n    if (e.changedTouches) e = e.changedTouches[0];\n    var svg = container.ownerSVGElement || container;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      if (d3_mouse_bug44083 < 0) {\n        var window = d3_window(container);\n        if (window.scrollX || window.scrollY) {\n          svg = d3.select(\"body\").append(\"svg\").style({\n            position: \"absolute\",\n            top: 0,\n            left: 0,\n            margin: 0,\n            padding: 0,\n            border: \"none\"\n          }, \"important\");\n          var ctm = svg[0][0].getScreenCTM();\n          d3_mouse_bug44083 = !(ctm.f || ctm.e);\n          svg.remove();\n        }\n      }\n      if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n      point.y = e.clientY;\n      point = point.matrixTransform(container.getScreenCTM().inverse());\n      return [ point.x, point.y ];\n    }\n    var rect = container.getBoundingClientRect();\n    return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n  }\n  d3.touch = function(container, touches, identifier) {\n    if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n    if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n      if ((touch = touches[i]).identifier === identifier) {\n        return d3_mousePoint(container, touch);\n      }\n    }\n  };\n  d3.behavior.drag = function() {\n    var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, \"touchmove\", \"touchend\");\n    function drag() {\n      this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n    }\n    function dragstart(id, position, subject, move, end) {\n      return function() {\n        var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);\n        if (origin) {\n          dragOffset = origin.apply(that, arguments);\n          dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n        } else {\n          dragOffset = [ 0, 0 ];\n        }\n        dispatch({\n          type: \"dragstart\"\n        });\n        function moved() {\n          var position1 = position(parent, dragId), dx, dy;\n          if (!position1) return;\n          dx = position1[0] - position0[0];\n          dy = position1[1] - position0[1];\n          dragged |= dx | dy;\n          position0 = position1;\n          dispatch({\n            type: \"drag\",\n            x: position1[0] + dragOffset[0],\n            y: position1[1] + dragOffset[1],\n            dx: dx,\n            dy: dy\n          });\n        }\n        function ended() {\n          if (!position(parent, dragId)) return;\n          dragSubject.on(move + dragName, null).on(end + dragName, null);\n          dragRestore(dragged && d3.event.target === target);\n          dispatch({\n            type: \"dragend\"\n          });\n        }\n      };\n    }\n    drag.origin = function(x) {\n      if (!arguments.length) return origin;\n      origin = x;\n      return drag;\n    };\n    return d3.rebind(drag, event, \"on\");\n  };\n  function d3_behavior_dragTouchId() {\n    return d3.event.changedTouches[0].identifier;\n  }\n  d3.touches = function(container, touches) {\n    if (arguments.length < 2) touches = d3_eventSource().touches;\n    return touches ? d3_array(touches).map(function(touch) {\n      var point = d3_mousePoint(container, touch);\n      point.identifier = touch.identifier;\n      return point;\n    }) : [];\n  };\n  var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;\n  function d3_sgn(x) {\n    return x > 0 ? 1 : x < 0 ? -1 : 0;\n  }\n  function d3_cross2d(a, b, c) {\n    return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n  }\n  function d3_acos(x) {\n    return x > 1 ? 0 : x < -1 ? π : Math.acos(x);\n  }\n  function d3_asin(x) {\n    return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);\n  }\n  function d3_sinh(x) {\n    return ((x = Math.exp(x)) - 1 / x) / 2;\n  }\n  function d3_cosh(x) {\n    return ((x = Math.exp(x)) + 1 / x) / 2;\n  }\n  function d3_tanh(x) {\n    return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n  }\n  function d3_haversin(x) {\n    return (x = Math.sin(x / 2)) * x;\n  }\n  var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;\n  d3.interpolateZoom = function(p0, p1) {\n    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2];\n    var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ;\n    function interpolate(t) {\n      var s = t * S;\n      if (dr) {\n        var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));\n        return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];\n      }\n      return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ];\n    }\n    interpolate.duration = S * 1e3;\n    return interpolate;\n  };\n  d3.behavior.zoom = function() {\n    var view = {\n      x: 0,\n      y: 0,\n      k: 1\n    }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n    if (!d3_behavior_zoomWheel) {\n      d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n        return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n      }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n        return d3.event.wheelDelta;\n      }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n        return -d3.event.detail;\n      }, \"MozMousePixelScroll\");\n    }\n    function zoom(g) {\n      g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n    }\n    zoom.event = function(g) {\n      g.each(function() {\n        var dispatch = event.of(this, arguments), view1 = view;\n        if (d3_transitionInheritId) {\n          d3.select(this).transition().each(\"start.zoom\", function() {\n            view = this.__chart__ || {\n              x: 0,\n              y: 0,\n              k: 1\n            };\n            zoomstarted(dispatch);\n          }).tween(\"zoom:zoom\", function() {\n            var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n            return function(t) {\n              var l = i(t), k = dx / l[2];\n              this.__chart__ = view = {\n                x: cx - l[0] * k,\n                y: cy - l[1] * k,\n                k: k\n              };\n              zoomed(dispatch);\n            };\n          }).each(\"interrupt.zoom\", function() {\n            zoomended(dispatch);\n          }).each(\"end.zoom\", function() {\n            zoomended(dispatch);\n          });\n        } else {\n          this.__chart__ = view;\n          zoomstarted(dispatch);\n          zoomed(dispatch);\n          zoomended(dispatch);\n        }\n      });\n    };\n    zoom.translate = function(_) {\n      if (!arguments.length) return [ view.x, view.y ];\n      view = {\n        x: +_[0],\n        y: +_[1],\n        k: view.k\n      };\n      rescale();\n      return zoom;\n    };\n    zoom.scale = function(_) {\n      if (!arguments.length) return view.k;\n      view = {\n        x: view.x,\n        y: view.y,\n        k: +_\n      };\n      rescale();\n      return zoom;\n    };\n    zoom.scaleExtent = function(_) {\n      if (!arguments.length) return scaleExtent;\n      scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.center = function(_) {\n      if (!arguments.length) return center;\n      center = _ && [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.size = function(_) {\n      if (!arguments.length) return size;\n      size = _ && [ +_[0], +_[1] ];\n      return zoom;\n    };\n    zoom.duration = function(_) {\n      if (!arguments.length) return duration;\n      duration = +_;\n      return zoom;\n    };\n    zoom.x = function(z) {\n      if (!arguments.length) return x1;\n      x1 = z;\n      x0 = z.copy();\n      view = {\n        x: 0,\n        y: 0,\n        k: 1\n      };\n      return zoom;\n    };\n    zoom.y = function(z) {\n      if (!arguments.length) return y1;\n      y1 = z;\n      y0 = z.copy();\n      view = {\n        x: 0,\n        y: 0,\n        k: 1\n      };\n      return zoom;\n    };\n    function location(p) {\n      return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n    }\n    function point(l) {\n      return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n    }\n    function scaleTo(s) {\n      view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n    }\n    function translateTo(p, l) {\n      l = point(l);\n      view.x += p[0] - l[0];\n      view.y += p[1] - l[1];\n    }\n    function zoomTo(that, p, l, k) {\n      that.__chart__ = {\n        x: view.x,\n        y: view.y,\n        k: view.k\n      };\n      scaleTo(Math.pow(2, k));\n      translateTo(center0 = p, l);\n      that = d3.select(that);\n      if (duration > 0) that = that.transition().duration(duration);\n      that.call(zoom.event);\n    }\n    function rescale() {\n      if (x1) x1.domain(x0.range().map(function(x) {\n        return (x - view.x) / view.k;\n      }).map(x0.invert));\n      if (y1) y1.domain(y0.range().map(function(y) {\n        return (y - view.y) / view.k;\n      }).map(y0.invert));\n    }\n    function zoomstarted(dispatch) {\n      if (!zooming++) dispatch({\n        type: \"zoomstart\"\n      });\n    }\n    function zoomed(dispatch) {\n      rescale();\n      dispatch({\n        type: \"zoom\",\n        scale: view.k,\n        translate: [ view.x, view.y ]\n      });\n    }\n    function zoomended(dispatch) {\n      if (!--zooming) dispatch({\n        type: \"zoomend\"\n      });\n      center0 = null;\n    }\n    function mousedowned() {\n      var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);\n      d3_selection_interrupt.call(that);\n      zoomstarted(dispatch);\n      function moved() {\n        dragged = 1;\n        translateTo(d3.mouse(that), location0);\n        zoomed(dispatch);\n      }\n      function ended() {\n        subject.on(mousemove, null).on(mouseup, null);\n        dragRestore(dragged && d3.event.target === target);\n        zoomended(dispatch);\n      }\n    }\n    function touchstarted() {\n      var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);\n      started();\n      zoomstarted(dispatch);\n      subject.on(mousedown, null).on(touchstart, started);\n      function relocate() {\n        var touches = d3.touches(that);\n        scale0 = view.k;\n        touches.forEach(function(t) {\n          if (t.identifier in locations0) locations0[t.identifier] = location(t);\n        });\n        return touches;\n      }\n      function started() {\n        var target = d3.event.target;\n        d3.select(target).on(touchmove, moved).on(touchend, ended);\n        targets.push(target);\n        var changed = d3.event.changedTouches;\n        for (var i = 0, n = changed.length; i < n; ++i) {\n          locations0[changed[i].identifier] = null;\n        }\n        var touches = relocate(), now = Date.now();\n        if (touches.length === 1) {\n          if (now - touchtime < 500) {\n            var p = touches[0];\n            zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n            d3_eventPreventDefault();\n          }\n          touchtime = now;\n        } else if (touches.length > 1) {\n          var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n          distance0 = dx * dx + dy * dy;\n        }\n      }\n      function moved() {\n        var touches = d3.touches(that), p0, l0, p1, l1;\n        d3_selection_interrupt.call(that);\n        for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n          p1 = touches[i];\n          if (l1 = locations0[p1.identifier]) {\n            if (l0) break;\n            p0 = p1, l0 = l1;\n          }\n        }\n        if (l1) {\n          var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n          p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n          l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n          scaleTo(scale1 * scale0);\n        }\n        touchtime = null;\n        translateTo(p0, l0);\n        zoomed(dispatch);\n      }\n      function ended() {\n        if (d3.event.touches.length) {\n          var changed = d3.event.changedTouches;\n          for (var i = 0, n = changed.length; i < n; ++i) {\n            delete locations0[changed[i].identifier];\n          }\n          for (var identifier in locations0) {\n            return void relocate();\n          }\n        }\n        d3.selectAll(targets).on(zoomName, null);\n        subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n        dragRestore();\n        zoomended(dispatch);\n      }\n    }\n    function mousewheeled() {\n      var dispatch = event.of(this, arguments);\n      if (mousewheelTimer) clearTimeout(mousewheelTimer); else translate0 = location(center0 = center || d3.mouse(this)), \n      d3_selection_interrupt.call(this), zoomstarted(dispatch);\n      mousewheelTimer = setTimeout(function() {\n        mousewheelTimer = null;\n        zoomended(dispatch);\n      }, 50);\n      d3_eventPreventDefault();\n      scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n      translateTo(center0, translate0);\n      zoomed(dispatch);\n    }\n    function dblclicked() {\n      var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n      zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n    }\n    return d3.rebind(zoom, event, \"on\");\n  };\n  var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;\n  d3.color = d3_color;\n  function d3_color() {}\n  d3_color.prototype.toString = function() {\n    return this.rgb() + \"\";\n  };\n  d3.hsl = d3_hsl;\n  function d3_hsl(h, s, l) {\n    return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n  }\n  var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n  d3_hslPrototype.brighter = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_hsl(this.h, this.s, this.l / k);\n  };\n  d3_hslPrototype.darker = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_hsl(this.h, this.s, k * this.l);\n  };\n  d3_hslPrototype.rgb = function() {\n    return d3_hsl_rgb(this.h, this.s, this.l);\n  };\n  function d3_hsl_rgb(h, s, l) {\n    var m1, m2;\n    h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n    s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n    l = l < 0 ? 0 : l > 1 ? 1 : l;\n    m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n    m1 = 2 * l - m2;\n    function v(h) {\n      if (h > 360) h -= 360; else if (h < 0) h += 360;\n      if (h < 60) return m1 + (m2 - m1) * h / 60;\n      if (h < 180) return m2;\n      if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n      return m1;\n    }\n    function vv(h) {\n      return Math.round(v(h) * 255);\n    }\n    return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n  }\n  d3.hcl = d3_hcl;\n  function d3_hcl(h, c, l) {\n    return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n  }\n  var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n  d3_hclPrototype.brighter = function(k) {\n    return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n  };\n  d3_hclPrototype.darker = function(k) {\n    return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n  };\n  d3_hclPrototype.rgb = function() {\n    return d3_hcl_lab(this.h, this.c, this.l).rgb();\n  };\n  function d3_hcl_lab(h, c, l) {\n    if (isNaN(h)) h = 0;\n    if (isNaN(c)) c = 0;\n    return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n  }\n  d3.lab = d3_lab;\n  function d3_lab(l, a, b) {\n    return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n  }\n  var d3_lab_K = 18;\n  var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n  var d3_labPrototype = d3_lab.prototype = new d3_color();\n  d3_labPrototype.brighter = function(k) {\n    return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n  };\n  d3_labPrototype.darker = function(k) {\n    return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n  };\n  d3_labPrototype.rgb = function() {\n    return d3_lab_rgb(this.l, this.a, this.b);\n  };\n  function d3_lab_rgb(l, a, b) {\n    var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n    x = d3_lab_xyz(x) * d3_lab_X;\n    y = d3_lab_xyz(y) * d3_lab_Y;\n    z = d3_lab_xyz(z) * d3_lab_Z;\n    return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n  }\n  function d3_lab_hcl(l, a, b) {\n    return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n  }\n  function d3_lab_xyz(x) {\n    return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n  }\n  function d3_xyz_lab(x) {\n    return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n  }\n  function d3_xyz_rgb(r) {\n    return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n  }\n  d3.rgb = d3_rgb;\n  function d3_rgb(r, g, b) {\n    return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n  }\n  function d3_rgbNumber(value) {\n    return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n  }\n  function d3_rgbString(value) {\n    return d3_rgbNumber(value) + \"\";\n  }\n  var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n  d3_rgbPrototype.brighter = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    var r = this.r, g = this.g, b = this.b, i = 30;\n    if (!r && !g && !b) return new d3_rgb(i, i, i);\n    if (r && r < i) r = i;\n    if (g && g < i) g = i;\n    if (b && b < i) b = i;\n    return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n  };\n  d3_rgbPrototype.darker = function(k) {\n    k = Math.pow(.7, arguments.length ? k : 1);\n    return new d3_rgb(k * this.r, k * this.g, k * this.b);\n  };\n  d3_rgbPrototype.hsl = function() {\n    return d3_rgb_hsl(this.r, this.g, this.b);\n  };\n  d3_rgbPrototype.toString = function() {\n    return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n  };\n  function d3_rgb_hex(v) {\n    return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n  }\n  function d3_rgb_parse(format, rgb, hsl) {\n    var r = 0, g = 0, b = 0, m1, m2, color;\n    m1 = /([a-z]+)\\((.*)\\)/i.exec(format);\n    if (m1) {\n      m2 = m1[2].split(\",\");\n      switch (m1[1]) {\n       case \"hsl\":\n        {\n          return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n        }\n\n       case \"rgb\":\n        {\n          return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n        }\n      }\n    }\n    if (color = d3_rgb_names.get(format.toLowerCase())) {\n      return rgb(color.r, color.g, color.b);\n    }\n    if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n      if (format.length === 4) {\n        r = (color & 3840) >> 4;\n        r = r >> 4 | r;\n        g = color & 240;\n        g = g >> 4 | g;\n        b = color & 15;\n        b = b << 4 | b;\n      } else if (format.length === 7) {\n        r = (color & 16711680) >> 16;\n        g = (color & 65280) >> 8;\n        b = color & 255;\n      }\n    }\n    return rgb(r, g, b);\n  }\n  function d3_rgb_hsl(r, g, b) {\n    var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n    if (d) {\n      s = l < .5 ? d / (max + min) : d / (2 - max - min);\n      if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n      h *= 60;\n    } else {\n      h = NaN;\n      s = l > 0 && l < 1 ? 0 : h;\n    }\n    return new d3_hsl(h, s, l);\n  }\n  function d3_rgb_lab(r, g, b) {\n    r = d3_rgb_xyz(r);\n    g = d3_rgb_xyz(g);\n    b = d3_rgb_xyz(b);\n    var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n    return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n  }\n  function d3_rgb_xyz(r) {\n    return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n  }\n  function d3_rgb_parseNumber(c) {\n    var f = parseFloat(c);\n    return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n  }\n  var d3_rgb_names = d3.map({\n    aliceblue: 15792383,\n    antiquewhite: 16444375,\n    aqua: 65535,\n    aquamarine: 8388564,\n    azure: 15794175,\n    beige: 16119260,\n    bisque: 16770244,\n    black: 0,\n    blanchedalmond: 16772045,\n    blue: 255,\n    blueviolet: 9055202,\n    brown: 10824234,\n    burlywood: 14596231,\n    cadetblue: 6266528,\n    chartreuse: 8388352,\n    chocolate: 13789470,\n    coral: 16744272,\n    cornflowerblue: 6591981,\n    cornsilk: 16775388,\n    crimson: 14423100,\n    cyan: 65535,\n    darkblue: 139,\n    darkcyan: 35723,\n    darkgoldenrod: 12092939,\n    darkgray: 11119017,\n    darkgreen: 25600,\n    darkgrey: 11119017,\n    darkkhaki: 12433259,\n    darkmagenta: 9109643,\n    darkolivegreen: 5597999,\n    darkorange: 16747520,\n    darkorchid: 10040012,\n    darkred: 9109504,\n    darksalmon: 15308410,\n    darkseagreen: 9419919,\n    darkslateblue: 4734347,\n    darkslategray: 3100495,\n    darkslategrey: 3100495,\n    darkturquoise: 52945,\n    darkviolet: 9699539,\n    deeppink: 16716947,\n    deepskyblue: 49151,\n    dimgray: 6908265,\n    dimgrey: 6908265,\n    dodgerblue: 2003199,\n    firebrick: 11674146,\n    floralwhite: 16775920,\n    forestgreen: 2263842,\n    fuchsia: 16711935,\n    gainsboro: 14474460,\n    ghostwhite: 16316671,\n    gold: 16766720,\n    goldenrod: 14329120,\n    gray: 8421504,\n    green: 32768,\n    greenyellow: 11403055,\n    grey: 8421504,\n    honeydew: 15794160,\n    hotpink: 16738740,\n    indianred: 13458524,\n    indigo: 4915330,\n    ivory: 16777200,\n    khaki: 15787660,\n    lavender: 15132410,\n    lavenderblush: 16773365,\n    lawngreen: 8190976,\n    lemonchiffon: 16775885,\n    lightblue: 11393254,\n    lightcoral: 15761536,\n    lightcyan: 14745599,\n    lightgoldenrodyellow: 16448210,\n    lightgray: 13882323,\n    lightgreen: 9498256,\n    lightgrey: 13882323,\n    lightpink: 16758465,\n    lightsalmon: 16752762,\n    lightseagreen: 2142890,\n    lightskyblue: 8900346,\n    lightslategray: 7833753,\n    lightslategrey: 7833753,\n    lightsteelblue: 11584734,\n    lightyellow: 16777184,\n    lime: 65280,\n    limegreen: 3329330,\n    linen: 16445670,\n    magenta: 16711935,\n    maroon: 8388608,\n    mediumaquamarine: 6737322,\n    mediumblue: 205,\n    mediumorchid: 12211667,\n    mediumpurple: 9662683,\n    mediumseagreen: 3978097,\n    mediumslateblue: 8087790,\n    mediumspringgreen: 64154,\n    mediumturquoise: 4772300,\n    mediumvioletred: 13047173,\n    midnightblue: 1644912,\n    mintcream: 16121850,\n    mistyrose: 16770273,\n    moccasin: 16770229,\n    navajowhite: 16768685,\n    navy: 128,\n    oldlace: 16643558,\n    olive: 8421376,\n    olivedrab: 7048739,\n    orange: 16753920,\n    orangered: 16729344,\n    orchid: 14315734,\n    palegoldenrod: 15657130,\n    palegreen: 10025880,\n    paleturquoise: 11529966,\n    palevioletred: 14381203,\n    papayawhip: 16773077,\n    peachpuff: 16767673,\n    peru: 13468991,\n    pink: 16761035,\n    plum: 14524637,\n    powderblue: 11591910,\n    purple: 8388736,\n    rebeccapurple: 6697881,\n    red: 16711680,\n    rosybrown: 12357519,\n    royalblue: 4286945,\n    saddlebrown: 9127187,\n    salmon: 16416882,\n    sandybrown: 16032864,\n    seagreen: 3050327,\n    seashell: 16774638,\n    sienna: 10506797,\n    silver: 12632256,\n    skyblue: 8900331,\n    slateblue: 6970061,\n    slategray: 7372944,\n    slategrey: 7372944,\n    snow: 16775930,\n    springgreen: 65407,\n    steelblue: 4620980,\n    tan: 13808780,\n    teal: 32896,\n    thistle: 14204888,\n    tomato: 16737095,\n    turquoise: 4251856,\n    violet: 15631086,\n    wheat: 16113331,\n    white: 16777215,\n    whitesmoke: 16119285,\n    yellow: 16776960,\n    yellowgreen: 10145074\n  });\n  d3_rgb_names.forEach(function(key, value) {\n    d3_rgb_names.set(key, d3_rgbNumber(value));\n  });\n  function d3_functor(v) {\n    return typeof v === \"function\" ? v : function() {\n      return v;\n    };\n  }\n  d3.functor = d3_functor;\n  d3.xhr = d3_xhrType(d3_identity);\n  function d3_xhrType(response) {\n    return function(url, mimeType, callback) {\n      if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n      mimeType = null;\n      return d3_xhr(url, mimeType, response, callback);\n    };\n  }\n  function d3_xhr(url, mimeType, response, callback) {\n    var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n    if (this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n    \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n      request.readyState > 3 && respond();\n    };\n    function respond() {\n      var status = request.status, result;\n      if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n        try {\n          result = response.call(xhr, request);\n        } catch (e) {\n          dispatch.error.call(xhr, e);\n          return;\n        }\n        dispatch.load.call(xhr, result);\n      } else {\n        dispatch.error.call(xhr, request);\n      }\n    }\n    request.onprogress = function(event) {\n      var o = d3.event;\n      d3.event = event;\n      try {\n        dispatch.progress.call(xhr, request);\n      } finally {\n        d3.event = o;\n      }\n    };\n    xhr.header = function(name, value) {\n      name = (name + \"\").toLowerCase();\n      if (arguments.length < 2) return headers[name];\n      if (value == null) delete headers[name]; else headers[name] = value + \"\";\n      return xhr;\n    };\n    xhr.mimeType = function(value) {\n      if (!arguments.length) return mimeType;\n      mimeType = value == null ? null : value + \"\";\n      return xhr;\n    };\n    xhr.responseType = function(value) {\n      if (!arguments.length) return responseType;\n      responseType = value;\n      return xhr;\n    };\n    xhr.response = function(value) {\n      response = value;\n      return xhr;\n    };\n    [ \"get\", \"post\" ].forEach(function(method) {\n      xhr[method] = function() {\n        return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n      };\n    });\n    xhr.send = function(method, data, callback) {\n      if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n      request.open(method, url, true);\n      if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n      if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n      if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n      if (responseType != null) request.responseType = responseType;\n      if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n        callback(null, request);\n      });\n      dispatch.beforesend.call(xhr, request);\n      request.send(data == null ? null : data);\n      return xhr;\n    };\n    xhr.abort = function() {\n      request.abort();\n      return xhr;\n    };\n    d3.rebind(xhr, dispatch, \"on\");\n    return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n  }\n  function d3_xhr_fixCallback(callback) {\n    return callback.length === 1 ? function(error, request) {\n      callback(error == null ? request : null);\n    } : callback;\n  }\n  function d3_xhrHasResponse(request) {\n    var type = request.responseType;\n    return type && type !== \"text\" ? request.response : request.responseText;\n  }\n  d3.dsv = function(delimiter, mimeType) {\n    var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n    function dsv(url, row, callback) {\n      if (arguments.length < 3) callback = row, row = null;\n      var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n      xhr.row = function(_) {\n        return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n      };\n      return xhr;\n    }\n    function response(request) {\n      return dsv.parse(request.responseText);\n    }\n    function typedResponse(f) {\n      return function(request) {\n        return dsv.parse(request.responseText, f);\n      };\n    }\n    dsv.parse = function(text, f) {\n      var o;\n      return dsv.parseRows(text, function(row, i) {\n        if (o) return o(row, i - 1);\n        var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n          return JSON.stringify(name) + \": d[\" + i + \"]\";\n        }).join(\",\") + \"}\");\n        o = f ? function(row, i) {\n          return f(a(row), i);\n        } : a;\n      });\n    };\n    dsv.parseRows = function(text, f) {\n      var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n      function token() {\n        if (I >= N) return EOF;\n        if (eol) return eol = false, EOL;\n        var j = I;\n        if (text.charCodeAt(j) === 34) {\n          var i = j;\n          while (i++ < N) {\n            if (text.charCodeAt(i) === 34) {\n              if (text.charCodeAt(i + 1) !== 34) break;\n              ++i;\n            }\n          }\n          I = i + 2;\n          var c = text.charCodeAt(i + 1);\n          if (c === 13) {\n            eol = true;\n            if (text.charCodeAt(i + 2) === 10) ++I;\n          } else if (c === 10) {\n            eol = true;\n          }\n          return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n        }\n        while (I < N) {\n          var c = text.charCodeAt(I++), k = 1;\n          if (c === 10) eol = true; else if (c === 13) {\n            eol = true;\n            if (text.charCodeAt(I) === 10) ++I, ++k;\n          } else if (c !== delimiterCode) continue;\n          return text.slice(j, I - k);\n        }\n        return text.slice(j);\n      }\n      while ((t = token()) !== EOF) {\n        var a = [];\n        while (t !== EOL && t !== EOF) {\n          a.push(t);\n          t = token();\n        }\n        if (f && (a = f(a, n++)) == null) continue;\n        rows.push(a);\n      }\n      return rows;\n    };\n    dsv.format = function(rows) {\n      if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n      var fieldSet = new d3_Set(), fields = [];\n      rows.forEach(function(row) {\n        for (var field in row) {\n          if (!fieldSet.has(field)) {\n            fields.push(fieldSet.add(field));\n          }\n        }\n      });\n      return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n        return fields.map(function(field) {\n          return formatValue(row[field]);\n        }).join(delimiter);\n      })).join(\"\\n\");\n    };\n    dsv.formatRows = function(rows) {\n      return rows.map(formatRow).join(\"\\n\");\n    };\n    function formatRow(row) {\n      return row.map(formatValue).join(delimiter);\n    }\n    function formatValue(text) {\n      return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n    }\n    return dsv;\n  };\n  d3.csv = d3.dsv(\",\", \"text/csv\");\n  d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n  var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n    setTimeout(callback, 17);\n  };\n  d3.timer = function(callback, delay, then) {\n    var n = arguments.length;\n    if (n < 2) delay = 0;\n    if (n < 3) then = Date.now();\n    var time = then + delay, timer = {\n      c: callback,\n      t: time,\n      f: false,\n      n: null\n    };\n    if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n    d3_timer_queueTail = timer;\n    if (!d3_timer_interval) {\n      d3_timer_timeout = clearTimeout(d3_timer_timeout);\n      d3_timer_interval = 1;\n      d3_timer_frame(d3_timer_step);\n    }\n  };\n  function d3_timer_step() {\n    var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n    if (delay > 24) {\n      if (isFinite(delay)) {\n        clearTimeout(d3_timer_timeout);\n        d3_timer_timeout = setTimeout(d3_timer_step, delay);\n      }\n      d3_timer_interval = 0;\n    } else {\n      d3_timer_interval = 1;\n      d3_timer_frame(d3_timer_step);\n    }\n  }\n  d3.timer.flush = function() {\n    d3_timer_mark();\n    d3_timer_sweep();\n  };\n  function d3_timer_mark() {\n    var now = Date.now();\n    d3_timer_active = d3_timer_queueHead;\n    while (d3_timer_active) {\n      if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t);\n      d3_timer_active = d3_timer_active.n;\n    }\n    return now;\n  }\n  function d3_timer_sweep() {\n    var t0, t1 = d3_timer_queueHead, time = Infinity;\n    while (t1) {\n      if (t1.f) {\n        t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n      } else {\n        if (t1.t < time) time = t1.t;\n        t1 = (t0 = t1).n;\n      }\n    }\n    d3_timer_queueTail = t0;\n    return time;\n  }\n  function d3_format_precision(x, p) {\n    return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);\n  }\n  d3.round = function(x, n) {\n    return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n  };\n  var d3_formatPrefixes = [ \"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\" ].map(d3_formatPrefix);\n  d3.formatPrefix = function(value, precision) {\n    var i = 0;\n    if (value) {\n      if (value < 0) value *= -1;\n      if (precision) value = d3.round(value, d3_format_precision(value, precision));\n      i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n      i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n    }\n    return d3_formatPrefixes[8 + i / 3];\n  };\n  function d3_formatPrefix(d, i) {\n    var k = Math.pow(10, abs(8 - i) * 3);\n    return {\n      scale: i > 8 ? function(d) {\n        return d / k;\n      } : function(d) {\n        return d * k;\n      },\n      symbol: d\n    };\n  }\n  function d3_locale_numberFormat(locale) {\n    var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {\n      var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;\n      while (i > 0 && g > 0) {\n        if (length + g + 1 > width) g = Math.max(1, width - length);\n        t.push(value.substring(i -= g, i + g));\n        if ((length += g + 1) > width) break;\n        g = locale_grouping[j = (j + 1) % locale_grouping.length];\n      }\n      return t.reverse().join(locale_thousands);\n    } : d3_identity;\n    return function(specifier) {\n      var match = d3_format_re.exec(specifier), fill = match[1] || \" \", align = match[2] || \">\", sign = match[3] || \"-\", symbol = match[4] || \"\", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = \"\", suffix = \"\", integer = false, exponent = true;\n      if (precision) precision = +precision.substring(1);\n      if (zfill || fill === \"0\" && align === \"=\") {\n        zfill = fill = \"0\";\n        align = \"=\";\n      }\n      switch (type) {\n       case \"n\":\n        comma = true;\n        type = \"g\";\n        break;\n\n       case \"%\":\n        scale = 100;\n        suffix = \"%\";\n        type = \"f\";\n        break;\n\n       case \"p\":\n        scale = 100;\n        suffix = \"%\";\n        type = \"r\";\n        break;\n\n       case \"b\":\n       case \"o\":\n       case \"x\":\n       case \"X\":\n        if (symbol === \"#\") prefix = \"0\" + type.toLowerCase();\n\n       case \"c\":\n        exponent = false;\n\n       case \"d\":\n        integer = true;\n        precision = 0;\n        break;\n\n       case \"s\":\n        scale = -1;\n        type = \"r\";\n        break;\n      }\n      if (symbol === \"$\") prefix = locale_currency[0], suffix = locale_currency[1];\n      if (type == \"r\" && !precision) type = \"g\";\n      if (precision != null) {\n        if (type == \"g\") precision = Math.max(1, Math.min(21, precision)); else if (type == \"e\" || type == \"f\") precision = Math.max(0, Math.min(20, precision));\n      }\n      type = d3_format_types.get(type) || d3_format_typeDefault;\n      var zcomma = zfill && comma;\n      return function(value) {\n        var fullSuffix = suffix;\n        if (integer && value % 1) return \"\";\n        var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, \"-\") : sign === \"-\" ? \"\" : sign;\n        if (scale < 0) {\n          var unit = d3.formatPrefix(value, precision);\n          value = unit.scale(value);\n          fullSuffix = unit.symbol + suffix;\n        } else {\n          value *= scale;\n        }\n        value = type(value, precision);\n        var i = value.lastIndexOf(\".\"), before, after;\n        if (i < 0) {\n          var j = exponent ? value.lastIndexOf(\"e\") : -1;\n          if (j < 0) before = value, after = \"\"; else before = value.substring(0, j), after = value.substring(j);\n        } else {\n          before = value.substring(0, i);\n          after = locale_decimal + value.substring(i + 1);\n        }\n        if (!zfill && comma) before = formatGroup(before, Infinity);\n        var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : \"\";\n        if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);\n        negative += prefix;\n        value = before + after;\n        return (align === \"<\" ? negative + value + padding : align === \">\" ? padding + negative + value : align === \"^\" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;\n      };\n    };\n  }\n  var d3_format_re = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;\n  var d3_format_types = d3.map({\n    b: function(x) {\n      return x.toString(2);\n    },\n    c: function(x) {\n      return String.fromCharCode(x);\n    },\n    o: function(x) {\n      return x.toString(8);\n    },\n    x: function(x) {\n      return x.toString(16);\n    },\n    X: function(x) {\n      return x.toString(16).toUpperCase();\n    },\n    g: function(x, p) {\n      return x.toPrecision(p);\n    },\n    e: function(x, p) {\n      return x.toExponential(p);\n    },\n    f: function(x, p) {\n      return x.toFixed(p);\n    },\n    r: function(x, p) {\n      return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));\n    }\n  });\n  function d3_format_typeDefault(x) {\n    return x + \"\";\n  }\n  var d3_time = d3.time = {}, d3_date = Date;\n  function d3_date_utc() {\n    this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);\n  }\n  d3_date_utc.prototype = {\n    getDate: function() {\n      return this._.getUTCDate();\n    },\n    getDay: function() {\n      return this._.getUTCDay();\n    },\n    getFullYear: function() {\n      return this._.getUTCFullYear();\n    },\n    getHours: function() {\n      return this._.getUTCHours();\n    },\n    getMilliseconds: function() {\n      return this._.getUTCMilliseconds();\n    },\n    getMinutes: function() {\n      return this._.getUTCMinutes();\n    },\n    getMonth: function() {\n      return this._.getUTCMonth();\n    },\n    getSeconds: function() {\n      return this._.getUTCSeconds();\n    },\n    getTime: function() {\n      return this._.getTime();\n    },\n    getTimezoneOffset: function() {\n      return 0;\n    },\n    valueOf: function() {\n      return this._.valueOf();\n    },\n    setDate: function() {\n      d3_time_prototype.setUTCDate.apply(this._, arguments);\n    },\n    setDay: function() {\n      d3_time_prototype.setUTCDay.apply(this._, arguments);\n    },\n    setFullYear: function() {\n      d3_time_prototype.setUTCFullYear.apply(this._, arguments);\n    },\n    setHours: function() {\n      d3_time_prototype.setUTCHours.apply(this._, arguments);\n    },\n    setMilliseconds: function() {\n      d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);\n    },\n    setMinutes: function() {\n      d3_time_prototype.setUTCMinutes.apply(this._, arguments);\n    },\n    setMonth: function() {\n      d3_time_prototype.setUTCMonth.apply(this._, arguments);\n    },\n    setSeconds: function() {\n      d3_time_prototype.setUTCSeconds.apply(this._, arguments);\n    },\n    setTime: function() {\n      d3_time_prototype.setTime.apply(this._, arguments);\n    }\n  };\n  var d3_time_prototype = Date.prototype;\n  function d3_time_interval(local, step, number) {\n    function round(date) {\n      var d0 = local(date), d1 = offset(d0, 1);\n      return date - d0 < d1 - date ? d0 : d1;\n    }\n    function ceil(date) {\n      step(date = local(new d3_date(date - 1)), 1);\n      return date;\n    }\n    function offset(date, k) {\n      step(date = new d3_date(+date), k);\n      return date;\n    }\n    function range(t0, t1, dt) {\n      var time = ceil(t0), times = [];\n      if (dt > 1) {\n        while (time < t1) {\n          if (!(number(time) % dt)) times.push(new Date(+time));\n          step(time, 1);\n        }\n      } else {\n        while (time < t1) times.push(new Date(+time)), step(time, 1);\n      }\n      return times;\n    }\n    function range_utc(t0, t1, dt) {\n      try {\n        d3_date = d3_date_utc;\n        var utc = new d3_date_utc();\n        utc._ = t0;\n        return range(utc, t1, dt);\n      } finally {\n        d3_date = Date;\n      }\n    }\n    local.floor = local;\n    local.round = round;\n    local.ceil = ceil;\n    local.offset = offset;\n    local.range = range;\n    var utc = local.utc = d3_time_interval_utc(local);\n    utc.floor = utc;\n    utc.round = d3_time_interval_utc(round);\n    utc.ceil = d3_time_interval_utc(ceil);\n    utc.offset = d3_time_interval_utc(offset);\n    utc.range = range_utc;\n    return local;\n  }\n  function d3_time_interval_utc(method) {\n    return function(date, k) {\n      try {\n        d3_date = d3_date_utc;\n        var utc = new d3_date_utc();\n        utc._ = date;\n        return method(utc, k)._;\n      } finally {\n        d3_date = Date;\n      }\n    };\n  }\n  d3_time.year = d3_time_interval(function(date) {\n    date = d3_time.day(date);\n    date.setMonth(0, 1);\n    return date;\n  }, function(date, offset) {\n    date.setFullYear(date.getFullYear() + offset);\n  }, function(date) {\n    return date.getFullYear();\n  });\n  d3_time.years = d3_time.year.range;\n  d3_time.years.utc = d3_time.year.utc.range;\n  d3_time.day = d3_time_interval(function(date) {\n    var day = new d3_date(2e3, 0);\n    day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n    return day;\n  }, function(date, offset) {\n    date.setDate(date.getDate() + offset);\n  }, function(date) {\n    return date.getDate() - 1;\n  });\n  d3_time.days = d3_time.day.range;\n  d3_time.days.utc = d3_time.day.utc.range;\n  d3_time.dayOfYear = function(date) {\n    var year = d3_time.year(date);\n    return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);\n  };\n  [ \"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\" ].forEach(function(day, i) {\n    i = 7 - i;\n    var interval = d3_time[day] = d3_time_interval(function(date) {\n      (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);\n      return date;\n    }, function(date, offset) {\n      date.setDate(date.getDate() + Math.floor(offset) * 7);\n    }, function(date) {\n      var day = d3_time.year(date).getDay();\n      return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);\n    });\n    d3_time[day + \"s\"] = interval.range;\n    d3_time[day + \"s\"].utc = interval.utc.range;\n    d3_time[day + \"OfYear\"] = function(date) {\n      var day = d3_time.year(date).getDay();\n      return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);\n    };\n  });\n  d3_time.week = d3_time.sunday;\n  d3_time.weeks = d3_time.sunday.range;\n  d3_time.weeks.utc = d3_time.sunday.utc.range;\n  d3_time.weekOfYear = d3_time.sundayOfYear;\n  function d3_locale_timeFormat(locale) {\n    var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;\n    function d3_time_format(template) {\n      var n = template.length;\n      function format(date) {\n        var string = [], i = -1, j = 0, c, p, f;\n        while (++i < n) {\n          if (template.charCodeAt(i) === 37) {\n            string.push(template.slice(j, i));\n            if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);\n            if (f = d3_time_formats[c]) c = f(date, p == null ? c === \"e\" ? \" \" : \"0\" : p);\n            string.push(c);\n            j = i + 1;\n          }\n        }\n        string.push(template.slice(j, i));\n        return string.join(\"\");\n      }\n      format.parse = function(string) {\n        var d = {\n          y: 1900,\n          m: 0,\n          d: 1,\n          H: 0,\n          M: 0,\n          S: 0,\n          L: 0,\n          Z: null\n        }, i = d3_time_parse(d, template, string, 0);\n        if (i != string.length) return null;\n        if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n        var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();\n        if (\"j\" in d) date.setFullYear(d.y, 0, d.j); else if (\"w\" in d && (\"W\" in d || \"U\" in d)) {\n          date.setFullYear(d.y, 0, 1);\n          date.setFullYear(d.y, 0, \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);\n        } else date.setFullYear(d.y, d.m, d.d);\n        date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);\n        return localZ ? date._ : date;\n      };\n      format.toString = function() {\n        return template;\n      };\n      return format;\n    }\n    function d3_time_parse(date, template, string, j) {\n      var c, p, t, i = 0, n = template.length, m = string.length;\n      while (i < n) {\n        if (j >= m) return -1;\n        c = template.charCodeAt(i++);\n        if (c === 37) {\n          t = template.charAt(i++);\n          p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];\n          if (!p || (j = p(date, string, j)) < 0) return -1;\n        } else if (c != string.charCodeAt(j++)) {\n          return -1;\n        }\n      }\n      return j;\n    }\n    d3_time_format.utc = function(template) {\n      var local = d3_time_format(template);\n      function format(date) {\n        try {\n          d3_date = d3_date_utc;\n          var utc = new d3_date();\n          utc._ = date;\n          return local(utc);\n        } finally {\n          d3_date = Date;\n        }\n      }\n      format.parse = function(string) {\n        try {\n          d3_date = d3_date_utc;\n          var date = local.parse(string);\n          return date && date._;\n        } finally {\n          d3_date = Date;\n        }\n      };\n      format.toString = local.toString;\n      return format;\n    };\n    d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;\n    var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);\n    locale_periods.forEach(function(p, i) {\n      d3_time_periodLookup.set(p.toLowerCase(), i);\n    });\n    var d3_time_formats = {\n      a: function(d) {\n        return locale_shortDays[d.getDay()];\n      },\n      A: function(d) {\n        return locale_days[d.getDay()];\n      },\n      b: function(d) {\n        return locale_shortMonths[d.getMonth()];\n      },\n      B: function(d) {\n        return locale_months[d.getMonth()];\n      },\n      c: d3_time_format(locale_dateTime),\n      d: function(d, p) {\n        return d3_time_formatPad(d.getDate(), p, 2);\n      },\n      e: function(d, p) {\n        return d3_time_formatPad(d.getDate(), p, 2);\n      },\n      H: function(d, p) {\n        return d3_time_formatPad(d.getHours(), p, 2);\n      },\n      I: function(d, p) {\n        return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);\n      },\n      j: function(d, p) {\n        return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);\n      },\n      L: function(d, p) {\n        return d3_time_formatPad(d.getMilliseconds(), p, 3);\n      },\n      m: function(d, p) {\n        return d3_time_formatPad(d.getMonth() + 1, p, 2);\n      },\n      M: function(d, p) {\n        return d3_time_formatPad(d.getMinutes(), p, 2);\n      },\n      p: function(d) {\n        return locale_periods[+(d.getHours() >= 12)];\n      },\n      S: function(d, p) {\n        return d3_time_formatPad(d.getSeconds(), p, 2);\n      },\n      U: function(d, p) {\n        return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);\n      },\n      w: function(d) {\n        return d.getDay();\n      },\n      W: function(d, p) {\n        return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);\n      },\n      x: d3_time_format(locale_date),\n      X: d3_time_format(locale_time),\n      y: function(d, p) {\n        return d3_time_formatPad(d.getFullYear() % 100, p, 2);\n      },\n      Y: function(d, p) {\n        return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);\n      },\n      Z: d3_time_zone,\n      \"%\": function() {\n        return \"%\";\n      }\n    };\n    var d3_time_parsers = {\n      a: d3_time_parseWeekdayAbbrev,\n      A: d3_time_parseWeekday,\n      b: d3_time_parseMonthAbbrev,\n      B: d3_time_parseMonth,\n      c: d3_time_parseLocaleFull,\n      d: d3_time_parseDay,\n      e: d3_time_parseDay,\n      H: d3_time_parseHour24,\n      I: d3_time_parseHour24,\n      j: d3_time_parseDayOfYear,\n      L: d3_time_parseMilliseconds,\n      m: d3_time_parseMonthNumber,\n      M: d3_time_parseMinutes,\n      p: d3_time_parseAmPm,\n      S: d3_time_parseSeconds,\n      U: d3_time_parseWeekNumberSunday,\n      w: d3_time_parseWeekdayNumber,\n      W: d3_time_parseWeekNumberMonday,\n      x: d3_time_parseLocaleDate,\n      X: d3_time_parseLocaleTime,\n      y: d3_time_parseYear,\n      Y: d3_time_parseFullYear,\n      Z: d3_time_parseZone,\n      \"%\": d3_time_parseLiteralPercent\n    };\n    function d3_time_parseWeekdayAbbrev(date, string, i) {\n      d3_time_dayAbbrevRe.lastIndex = 0;\n      var n = d3_time_dayAbbrevRe.exec(string.slice(i));\n      return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseWeekday(date, string, i) {\n      d3_time_dayRe.lastIndex = 0;\n      var n = d3_time_dayRe.exec(string.slice(i));\n      return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseMonthAbbrev(date, string, i) {\n      d3_time_monthAbbrevRe.lastIndex = 0;\n      var n = d3_time_monthAbbrevRe.exec(string.slice(i));\n      return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseMonth(date, string, i) {\n      d3_time_monthRe.lastIndex = 0;\n      var n = d3_time_monthRe.exec(string.slice(i));\n      return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n    }\n    function d3_time_parseLocaleFull(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.c.toString(), string, i);\n    }\n    function d3_time_parseLocaleDate(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.x.toString(), string, i);\n    }\n    function d3_time_parseLocaleTime(date, string, i) {\n      return d3_time_parse(date, d3_time_formats.X.toString(), string, i);\n    }\n    function d3_time_parseAmPm(date, string, i) {\n      var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());\n      return n == null ? -1 : (date.p = n, i);\n    }\n    return d3_time_format;\n  }\n  var d3_time_formatPads = {\n    \"-\": \"\",\n    _: \" \",\n    \"0\": \"0\"\n  }, d3_time_numberRe = /^\\s*\\d+/, d3_time_percentRe = /^%/;\n  function d3_time_formatPad(value, fill, width) {\n    var sign = value < 0 ? \"-\" : \"\", string = (sign ? -value : value) + \"\", length = string.length;\n    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n  }\n  function d3_time_formatRe(names) {\n    return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\", \"i\");\n  }\n  function d3_time_formatLookup(names) {\n    var map = new d3_Map(), i = -1, n = names.length;\n    while (++i < n) map.set(names[i].toLowerCase(), i);\n    return map;\n  }\n  function d3_time_parseWeekdayNumber(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 1));\n    return n ? (date.w = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseWeekNumberSunday(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i));\n    return n ? (date.U = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseWeekNumberMonday(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i));\n    return n ? (date.W = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseFullYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 4));\n    return n ? (date.y = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;\n  }\n  function d3_time_parseZone(date, string, i) {\n    return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, \n    i + 5) : -1;\n  }\n  function d3_time_expandYear(d) {\n    return d + (d > 68 ? 1900 : 2e3);\n  }\n  function d3_time_parseMonthNumber(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.m = n[0] - 1, i + n[0].length) : -1;\n  }\n  function d3_time_parseDay(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.d = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseDayOfYear(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n    return n ? (date.j = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseHour24(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.H = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseMinutes(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.M = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseSeconds(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n    return n ? (date.S = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_parseMilliseconds(date, string, i) {\n    d3_time_numberRe.lastIndex = 0;\n    var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n    return n ? (date.L = +n[0], i + n[0].length) : -1;\n  }\n  function d3_time_zone(d) {\n    var z = d.getTimezoneOffset(), zs = z > 0 ? \"-\" : \"+\", zh = abs(z) / 60 | 0, zm = abs(z) % 60;\n    return zs + d3_time_formatPad(zh, \"0\", 2) + d3_time_formatPad(zm, \"0\", 2);\n  }\n  function d3_time_parseLiteralPercent(date, string, i) {\n    d3_time_percentRe.lastIndex = 0;\n    var n = d3_time_percentRe.exec(string.slice(i, i + 1));\n    return n ? i + n[0].length : -1;\n  }\n  function d3_time_formatMulti(formats) {\n    var n = formats.length, i = -1;\n    while (++i < n) formats[i][0] = this(formats[i][0]);\n    return function(date) {\n      var i = 0, f = formats[i];\n      while (!f[1](date)) f = formats[++i];\n      return f[0](date);\n    };\n  }\n  d3.locale = function(locale) {\n    return {\n      numberFormat: d3_locale_numberFormat(locale),\n      timeFormat: d3_locale_timeFormat(locale)\n    };\n  };\n  var d3_locale_enUS = d3.locale({\n    decimal: \".\",\n    thousands: \",\",\n    grouping: [ 3 ],\n    currency: [ \"$\", \"\" ],\n    dateTime: \"%a %b %e %X %Y\",\n    date: \"%m/%d/%Y\",\n    time: \"%H:%M:%S\",\n    periods: [ \"AM\", \"PM\" ],\n    days: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ],\n    shortDays: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ],\n    months: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n    shortMonths: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ]\n  });\n  d3.format = d3_locale_enUS.numberFormat;\n  d3.geo = {};\n  function d3_adder() {}\n  d3_adder.prototype = {\n    s: 0,\n    t: 0,\n    add: function(y) {\n      d3_adderSum(y, this.t, d3_adderTemp);\n      d3_adderSum(d3_adderTemp.s, this.s, this);\n      if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;\n    },\n    reset: function() {\n      this.s = this.t = 0;\n    },\n    valueOf: function() {\n      return this.s;\n    }\n  };\n  var d3_adderTemp = new d3_adder();\n  function d3_adderSum(a, b, o) {\n    var x = o.s = a + b, bv = x - a, av = x - bv;\n    o.t = a - av + (b - bv);\n  }\n  d3.geo.stream = function(object, listener) {\n    if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {\n      d3_geo_streamObjectType[object.type](object, listener);\n    } else {\n      d3_geo_streamGeometry(object, listener);\n    }\n  };\n  function d3_geo_streamGeometry(geometry, listener) {\n    if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {\n      d3_geo_streamGeometryType[geometry.type](geometry, listener);\n    }\n  }\n  var d3_geo_streamObjectType = {\n    Feature: function(feature, listener) {\n      d3_geo_streamGeometry(feature.geometry, listener);\n    },\n    FeatureCollection: function(object, listener) {\n      var features = object.features, i = -1, n = features.length;\n      while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);\n    }\n  };\n  var d3_geo_streamGeometryType = {\n    Sphere: function(object, listener) {\n      listener.sphere();\n    },\n    Point: function(object, listener) {\n      object = object.coordinates;\n      listener.point(object[0], object[1], object[2]);\n    },\n    MultiPoint: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);\n    },\n    LineString: function(object, listener) {\n      d3_geo_streamLine(object.coordinates, listener, 0);\n    },\n    MultiLineString: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);\n    },\n    Polygon: function(object, listener) {\n      d3_geo_streamPolygon(object.coordinates, listener);\n    },\n    MultiPolygon: function(object, listener) {\n      var coordinates = object.coordinates, i = -1, n = coordinates.length;\n      while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);\n    },\n    GeometryCollection: function(object, listener) {\n      var geometries = object.geometries, i = -1, n = geometries.length;\n      while (++i < n) d3_geo_streamGeometry(geometries[i], listener);\n    }\n  };\n  function d3_geo_streamLine(coordinates, listener, closed) {\n    var i = -1, n = coordinates.length - closed, coordinate;\n    listener.lineStart();\n    while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);\n    listener.lineEnd();\n  }\n  function d3_geo_streamPolygon(coordinates, listener) {\n    var i = -1, n = coordinates.length;\n    listener.polygonStart();\n    while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);\n    listener.polygonEnd();\n  }\n  d3.geo.area = function(object) {\n    d3_geo_areaSum = 0;\n    d3.geo.stream(object, d3_geo_area);\n    return d3_geo_areaSum;\n  };\n  var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();\n  var d3_geo_area = {\n    sphere: function() {\n      d3_geo_areaSum += 4 * π;\n    },\n    point: d3_noop,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: function() {\n      d3_geo_areaRingSum.reset();\n      d3_geo_area.lineStart = d3_geo_areaRingStart;\n    },\n    polygonEnd: function() {\n      var area = 2 * d3_geo_areaRingSum;\n      d3_geo_areaSum += area < 0 ? 4 * π + area : area;\n      d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;\n    }\n  };\n  function d3_geo_areaRingStart() {\n    var λ00, φ00, λ0, cosφ0, sinφ0;\n    d3_geo_area.point = function(λ, φ) {\n      d3_geo_area.point = nextPoint;\n      λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), \n      sinφ0 = Math.sin(φ);\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      φ = φ * d3_radians / 2 + π / 4;\n      var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);\n      d3_geo_areaRingSum.add(Math.atan2(v, u));\n      λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;\n    }\n    d3_geo_area.lineEnd = function() {\n      nextPoint(λ00, φ00);\n    };\n  }\n  function d3_geo_cartesian(spherical) {\n    var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);\n    return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];\n  }\n  function d3_geo_cartesianDot(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n  }\n  function d3_geo_cartesianCross(a, b) {\n    return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];\n  }\n  function d3_geo_cartesianAdd(a, b) {\n    a[0] += b[0];\n    a[1] += b[1];\n    a[2] += b[2];\n  }\n  function d3_geo_cartesianScale(vector, k) {\n    return [ vector[0] * k, vector[1] * k, vector[2] * k ];\n  }\n  function d3_geo_cartesianNormalize(d) {\n    var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n    d[0] /= l;\n    d[1] /= l;\n    d[2] /= l;\n  }\n  function d3_geo_spherical(cartesian) {\n    return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];\n  }\n  function d3_geo_sphericalEqual(a, b) {\n    return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;\n  }\n  d3.geo.bounds = function() {\n    var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;\n    var bound = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        bound.point = ringPoint;\n        bound.lineStart = ringStart;\n        bound.lineEnd = ringEnd;\n        dλSum = 0;\n        d3_geo_area.polygonStart();\n      },\n      polygonEnd: function() {\n        d3_geo_area.polygonEnd();\n        bound.point = point;\n        bound.lineStart = lineStart;\n        bound.lineEnd = lineEnd;\n        if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;\n        range[0] = λ0, range[1] = λ1;\n      }\n    };\n    function point(λ, φ) {\n      ranges.push(range = [ λ0 = λ, λ1 = λ ]);\n      if (φ < φ0) φ0 = φ;\n      if (φ > φ1) φ1 = φ;\n    }\n    function linePoint(λ, φ) {\n      var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);\n      if (p0) {\n        var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);\n        d3_geo_cartesianNormalize(inflection);\n        inflection = d3_geo_spherical(inflection);\n        var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;\n        if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n          var φi = inflection[1] * d3_degrees;\n          if (φi > φ1) φ1 = φi;\n        } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n          var φi = -inflection[1] * d3_degrees;\n          if (φi < φ0) φ0 = φi;\n        } else {\n          if (φ < φ0) φ0 = φ;\n          if (φ > φ1) φ1 = φ;\n        }\n        if (antimeridian) {\n          if (λ < λ_) {\n            if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n          } else {\n            if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n          }\n        } else {\n          if (λ1 >= λ0) {\n            if (λ < λ0) λ0 = λ;\n            if (λ > λ1) λ1 = λ;\n          } else {\n            if (λ > λ_) {\n              if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n            } else {\n              if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n            }\n          }\n        }\n      } else {\n        point(λ, φ);\n      }\n      p0 = p, λ_ = λ;\n    }\n    function lineStart() {\n      bound.point = linePoint;\n    }\n    function lineEnd() {\n      range[0] = λ0, range[1] = λ1;\n      bound.point = point;\n      p0 = null;\n    }\n    function ringPoint(λ, φ) {\n      if (p0) {\n        var dλ = λ - λ_;\n        dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;\n      } else λ__ = λ, φ__ = φ;\n      d3_geo_area.point(λ, φ);\n      linePoint(λ, φ);\n    }\n    function ringStart() {\n      d3_geo_area.lineStart();\n    }\n    function ringEnd() {\n      ringPoint(λ__, φ__);\n      d3_geo_area.lineEnd();\n      if (abs(dλSum) > ε) λ0 = -(λ1 = 180);\n      range[0] = λ0, range[1] = λ1;\n      p0 = null;\n    }\n    function angle(λ0, λ1) {\n      return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;\n    }\n    function compareRanges(a, b) {\n      return a[0] - b[0];\n    }\n    function withinRange(x, range) {\n      return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n    }\n    return function(feature) {\n      φ1 = λ1 = -(λ0 = φ0 = Infinity);\n      ranges = [];\n      d3.geo.stream(feature, bound);\n      var n = ranges.length;\n      if (n) {\n        ranges.sort(compareRanges);\n        for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {\n          b = ranges[i];\n          if (withinRange(b[0], a) || withinRange(b[1], a)) {\n            if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n            if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n          } else {\n            merged.push(a = b);\n          }\n        }\n        var best = -Infinity, dλ;\n        for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {\n          b = merged[i];\n          if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];\n        }\n      }\n      ranges = range = null;\n      return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];\n    };\n  }();\n  d3.geo.centroid = function(object) {\n    d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n    d3.geo.stream(object, d3_geo_centroid);\n    var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;\n    if (m < ε2) {\n      x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;\n      if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;\n      m = x * x + y * y + z * z;\n      if (m < ε2) return [ NaN, NaN ];\n    }\n    return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];\n  };\n  var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;\n  var d3_geo_centroid = {\n    sphere: d3_noop,\n    point: d3_geo_centroidPoint,\n    lineStart: d3_geo_centroidLineStart,\n    lineEnd: d3_geo_centroidLineEnd,\n    polygonStart: function() {\n      d3_geo_centroid.lineStart = d3_geo_centroidRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_centroid.lineStart = d3_geo_centroidLineStart;\n    }\n  };\n  function d3_geo_centroidPoint(λ, φ) {\n    λ *= d3_radians;\n    var cosφ = Math.cos(φ *= d3_radians);\n    d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));\n  }\n  function d3_geo_centroidPointXYZ(x, y, z) {\n    ++d3_geo_centroidW0;\n    d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;\n    d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;\n    d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;\n  }\n  function d3_geo_centroidLineStart() {\n    var x0, y0, z0;\n    d3_geo_centroid.point = function(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians);\n      x0 = cosφ * Math.cos(λ);\n      y0 = cosφ * Math.sin(λ);\n      z0 = Math.sin(φ);\n      d3_geo_centroid.point = nextPoint;\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n      d3_geo_centroidW1 += w;\n      d3_geo_centroidX1 += w * (x0 + (x0 = x));\n      d3_geo_centroidY1 += w * (y0 + (y0 = y));\n      d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    }\n  }\n  function d3_geo_centroidLineEnd() {\n    d3_geo_centroid.point = d3_geo_centroidPoint;\n  }\n  function d3_geo_centroidRingStart() {\n    var λ00, φ00, x0, y0, z0;\n    d3_geo_centroid.point = function(λ, φ) {\n      λ00 = λ, φ00 = φ;\n      d3_geo_centroid.point = nextPoint;\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians);\n      x0 = cosφ * Math.cos(λ);\n      y0 = cosφ * Math.sin(λ);\n      z0 = Math.sin(φ);\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    };\n    d3_geo_centroid.lineEnd = function() {\n      nextPoint(λ00, φ00);\n      d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;\n      d3_geo_centroid.point = d3_geo_centroidPoint;\n    };\n    function nextPoint(λ, φ) {\n      λ *= d3_radians;\n      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);\n      d3_geo_centroidX2 += v * cx;\n      d3_geo_centroidY2 += v * cy;\n      d3_geo_centroidZ2 += v * cz;\n      d3_geo_centroidW1 += w;\n      d3_geo_centroidX1 += w * (x0 + (x0 = x));\n      d3_geo_centroidY1 += w * (y0 + (y0 = y));\n      d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n      d3_geo_centroidPointXYZ(x0, y0, z0);\n    }\n  }\n  function d3_geo_compose(a, b) {\n    function compose(x, y) {\n      return x = a(x, y), b(x[0], x[1]);\n    }\n    if (a.invert && b.invert) compose.invert = function(x, y) {\n      return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n    };\n    return compose;\n  }\n  function d3_true() {\n    return true;\n  }\n  function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {\n    var subject = [], clip = [];\n    segments.forEach(function(segment) {\n      if ((n = segment.length - 1) <= 0) return;\n      var n, p0 = segment[0], p1 = segment[n];\n      if (d3_geo_sphericalEqual(p0, p1)) {\n        listener.lineStart();\n        for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);\n        listener.lineEnd();\n        return;\n      }\n      var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);\n      a.o = b;\n      subject.push(a);\n      clip.push(b);\n      a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);\n      b = new d3_geo_clipPolygonIntersection(p1, null, a, true);\n      a.o = b;\n      subject.push(a);\n      clip.push(b);\n    });\n    clip.sort(compare);\n    d3_geo_clipPolygonLinkCircular(subject);\n    d3_geo_clipPolygonLinkCircular(clip);\n    if (!subject.length) return;\n    for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {\n      clip[i].e = entry = !entry;\n    }\n    var start = subject[0], points, point;\n    while (1) {\n      var current = start, isSubject = true;\n      while (current.v) if ((current = current.n) === start) return;\n      points = current.z;\n      listener.lineStart();\n      do {\n        current.v = current.o.v = true;\n        if (current.e) {\n          if (isSubject) {\n            for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);\n          } else {\n            interpolate(current.x, current.n.x, 1, listener);\n          }\n          current = current.n;\n        } else {\n          if (isSubject) {\n            points = current.p.z;\n            for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);\n          } else {\n            interpolate(current.x, current.p.x, -1, listener);\n          }\n          current = current.p;\n        }\n        current = current.o;\n        points = current.z;\n        isSubject = !isSubject;\n      } while (!current.v);\n      listener.lineEnd();\n    }\n  }\n  function d3_geo_clipPolygonLinkCircular(array) {\n    if (!(n = array.length)) return;\n    var n, i = 0, a = array[0], b;\n    while (++i < n) {\n      a.n = b = array[i];\n      b.p = a;\n      a = b;\n    }\n    a.n = b = array[0];\n    b.p = a;\n  }\n  function d3_geo_clipPolygonIntersection(point, points, other, entry) {\n    this.x = point;\n    this.z = points;\n    this.o = other;\n    this.e = entry;\n    this.v = false;\n    this.n = this.p = null;\n  }\n  function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {\n    return function(rotate, listener) {\n      var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);\n      var clip = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          clip.point = pointRing;\n          clip.lineStart = ringStart;\n          clip.lineEnd = ringEnd;\n          segments = [];\n          polygon = [];\n        },\n        polygonEnd: function() {\n          clip.point = point;\n          clip.lineStart = lineStart;\n          clip.lineEnd = lineEnd;\n          segments = d3.merge(segments);\n          var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);\n          if (segments.length) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);\n          } else if (clipStartInside) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            listener.lineStart();\n            interpolate(null, null, 1, listener);\n            listener.lineEnd();\n          }\n          if (polygonStarted) listener.polygonEnd(), polygonStarted = false;\n          segments = polygon = null;\n        },\n        sphere: function() {\n          listener.polygonStart();\n          listener.lineStart();\n          interpolate(null, null, 1, listener);\n          listener.lineEnd();\n          listener.polygonEnd();\n        }\n      };\n      function point(λ, φ) {\n        var point = rotate(λ, φ);\n        if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);\n      }\n      function pointLine(λ, φ) {\n        var point = rotate(λ, φ);\n        line.point(point[0], point[1]);\n      }\n      function lineStart() {\n        clip.point = pointLine;\n        line.lineStart();\n      }\n      function lineEnd() {\n        clip.point = point;\n        line.lineEnd();\n      }\n      var segments;\n      var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;\n      function pointRing(λ, φ) {\n        ring.push([ λ, φ ]);\n        var point = rotate(λ, φ);\n        ringListener.point(point[0], point[1]);\n      }\n      function ringStart() {\n        ringListener.lineStart();\n        ring = [];\n      }\n      function ringEnd() {\n        pointRing(ring[0][0], ring[0][1]);\n        ringListener.lineEnd();\n        var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;\n        ring.pop();\n        polygon.push(ring);\n        ring = null;\n        if (!n) return;\n        if (clean & 1) {\n          segment = ringSegments[0];\n          var n = segment.length - 1, i = -1, point;\n          if (n > 0) {\n            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n            listener.lineStart();\n            while (++i < n) listener.point((point = segment[i])[0], point[1]);\n            listener.lineEnd();\n          }\n          return;\n        }\n        if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n        segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));\n      }\n      return clip;\n    };\n  }\n  function d3_geo_clipSegmentLength1(segment) {\n    return segment.length > 1;\n  }\n  function d3_geo_clipBufferListener() {\n    var lines = [], line;\n    return {\n      lineStart: function() {\n        lines.push(line = []);\n      },\n      point: function(λ, φ) {\n        line.push([ λ, φ ]);\n      },\n      lineEnd: d3_noop,\n      buffer: function() {\n        var buffer = lines;\n        lines = [];\n        line = null;\n        return buffer;\n      },\n      rejoin: function() {\n        if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n      }\n    };\n  }\n  function d3_geo_clipSort(a, b) {\n    return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);\n  }\n  var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);\n  function d3_geo_clipAntimeridianLine(listener) {\n    var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;\n    return {\n      lineStart: function() {\n        listener.lineStart();\n        clean = 1;\n      },\n      point: function(λ1, φ1) {\n        var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);\n        if (abs(dλ - π) < ε) {\n          listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);\n          listener.point(sλ0, φ0);\n          listener.lineEnd();\n          listener.lineStart();\n          listener.point(sλ1, φ0);\n          listener.point(λ1, φ0);\n          clean = 0;\n        } else if (sλ0 !== sλ1 && dλ >= π) {\n          if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;\n          if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;\n          φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);\n          listener.point(sλ0, φ0);\n          listener.lineEnd();\n          listener.lineStart();\n          listener.point(sλ1, φ0);\n          clean = 0;\n        }\n        listener.point(λ0 = λ1, φ0 = φ1);\n        sλ0 = sλ1;\n      },\n      lineEnd: function() {\n        listener.lineEnd();\n        λ0 = φ0 = NaN;\n      },\n      clean: function() {\n        return 2 - clean;\n      }\n    };\n  }\n  function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {\n    var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);\n    return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;\n  }\n  function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {\n    var φ;\n    if (from == null) {\n      φ = direction * halfπ;\n      listener.point(-π, φ);\n      listener.point(0, φ);\n      listener.point(π, φ);\n      listener.point(π, 0);\n      listener.point(π, -φ);\n      listener.point(0, -φ);\n      listener.point(-π, -φ);\n      listener.point(-π, 0);\n      listener.point(-π, φ);\n    } else if (abs(from[0] - to[0]) > ε) {\n      var s = from[0] < to[0] ? π : -π;\n      φ = direction * s / 2;\n      listener.point(-s, φ);\n      listener.point(0, φ);\n      listener.point(s, φ);\n    } else {\n      listener.point(to[0], to[1]);\n    }\n  }\n  function d3_geo_pointInPolygon(point, polygon) {\n    var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;\n    d3_geo_areaRingSum.reset();\n    for (var i = 0, n = polygon.length; i < n; ++i) {\n      var ring = polygon[i], m = ring.length;\n      if (!m) continue;\n      var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;\n      while (true) {\n        if (j === m) j = 0;\n        point = ring[j];\n        var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;\n        d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));\n        polarAngle += antimeridian ? dλ + sdλ * τ : dλ;\n        if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {\n          var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));\n          d3_geo_cartesianNormalize(arc);\n          var intersection = d3_geo_cartesianCross(meridianNormal, arc);\n          d3_geo_cartesianNormalize(intersection);\n          var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);\n          if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {\n            winding += antimeridian ^ dλ >= 0 ? 1 : -1;\n          }\n        }\n        if (!j++) break;\n        λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;\n      }\n    }\n    return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;\n  }\n  function d3_geo_clipCircle(radius) {\n    var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);\n    return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);\n    function visible(λ, φ) {\n      return Math.cos(λ) * Math.cos(φ) > cr;\n    }\n    function clipLine(listener) {\n      var point0, c0, v0, v00, clean;\n      return {\n        lineStart: function() {\n          v00 = v0 = false;\n          clean = 1;\n        },\n        point: function(λ, φ) {\n          var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;\n          if (!point0 && (v00 = v0 = v)) listener.lineStart();\n          if (v !== v0) {\n            point2 = intersect(point0, point1);\n            if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {\n              point1[0] += ε;\n              point1[1] += ε;\n              v = visible(point1[0], point1[1]);\n            }\n          }\n          if (v !== v0) {\n            clean = 0;\n            if (v) {\n              listener.lineStart();\n              point2 = intersect(point1, point0);\n              listener.point(point2[0], point2[1]);\n            } else {\n              point2 = intersect(point0, point1);\n              listener.point(point2[0], point2[1]);\n              listener.lineEnd();\n            }\n            point0 = point2;\n          } else if (notHemisphere && point0 && smallRadius ^ v) {\n            var t;\n            if (!(c & c0) && (t = intersect(point1, point0, true))) {\n              clean = 0;\n              if (smallRadius) {\n                listener.lineStart();\n                listener.point(t[0][0], t[0][1]);\n                listener.point(t[1][0], t[1][1]);\n                listener.lineEnd();\n              } else {\n                listener.point(t[1][0], t[1][1]);\n                listener.lineEnd();\n                listener.lineStart();\n                listener.point(t[0][0], t[0][1]);\n              }\n            }\n          }\n          if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {\n            listener.point(point1[0], point1[1]);\n          }\n          point0 = point1, v0 = v, c0 = c;\n        },\n        lineEnd: function() {\n          if (v0) listener.lineEnd();\n          point0 = null;\n        },\n        clean: function() {\n          return clean | (v00 && v0) << 1;\n        }\n      };\n    }\n    function intersect(a, b, two) {\n      var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);\n      var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;\n      if (!determinant) return !two && a;\n      var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);\n      d3_geo_cartesianAdd(A, B);\n      var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);\n      if (t2 < 0) return;\n      var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);\n      d3_geo_cartesianAdd(q, A);\n      q = d3_geo_spherical(q);\n      if (!two) return q;\n      var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;\n      if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;\n      var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;\n      if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;\n      if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {\n        var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);\n        d3_geo_cartesianAdd(q1, A);\n        return [ q, d3_geo_spherical(q1) ];\n      }\n    }\n    function code(λ, φ) {\n      var r = smallRadius ? radius : π - radius, code = 0;\n      if (λ < -r) code |= 1; else if (λ > r) code |= 2;\n      if (φ < -r) code |= 4; else if (φ > r) code |= 8;\n      return code;\n    }\n  }\n  function d3_geom_clipLine(x0, y0, x1, y1) {\n    return function(line) {\n      var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n      r = x0 - ax;\n      if (!dx && r > 0) return;\n      r /= dx;\n      if (dx < 0) {\n        if (r < t0) return;\n        if (r < t1) t1 = r;\n      } else if (dx > 0) {\n        if (r > t1) return;\n        if (r > t0) t0 = r;\n      }\n      r = x1 - ax;\n      if (!dx && r < 0) return;\n      r /= dx;\n      if (dx < 0) {\n        if (r > t1) return;\n        if (r > t0) t0 = r;\n      } else if (dx > 0) {\n        if (r < t0) return;\n        if (r < t1) t1 = r;\n      }\n      r = y0 - ay;\n      if (!dy && r > 0) return;\n      r /= dy;\n      if (dy < 0) {\n        if (r < t0) return;\n        if (r < t1) t1 = r;\n      } else if (dy > 0) {\n        if (r > t1) return;\n        if (r > t0) t0 = r;\n      }\n      r = y1 - ay;\n      if (!dy && r < 0) return;\n      r /= dy;\n      if (dy < 0) {\n        if (r > t1) return;\n        if (r > t0) t0 = r;\n      } else if (dy > 0) {\n        if (r < t0) return;\n        if (r < t1) t1 = r;\n      }\n      if (t0 > 0) line.a = {\n        x: ax + t0 * dx,\n        y: ay + t0 * dy\n      };\n      if (t1 < 1) line.b = {\n        x: ax + t1 * dx,\n        y: ay + t1 * dy\n      };\n      return line;\n    };\n  }\n  var d3_geo_clipExtentMAX = 1e9;\n  d3.geo.clipExtent = function() {\n    var x0, y0, x1, y1, stream, clip, clipExtent = {\n      stream: function(output) {\n        if (stream) stream.valid = false;\n        stream = clip(output);\n        stream.valid = true;\n        return stream;\n      },\n      extent: function(_) {\n        if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n        clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);\n        if (stream) stream.valid = false, stream = null;\n        return clipExtent;\n      }\n    };\n    return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);\n  };\n  function d3_geo_clipExtent(x0, y0, x1, y1) {\n    return function(listener) {\n      var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;\n      var clip = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          listener = bufferListener;\n          segments = [];\n          polygon = [];\n          clean = true;\n        },\n        polygonEnd: function() {\n          listener = listener_;\n          segments = d3.merge(segments);\n          var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;\n          if (inside || visible) {\n            listener.polygonStart();\n            if (inside) {\n              listener.lineStart();\n              interpolate(null, null, 1, listener);\n              listener.lineEnd();\n            }\n            if (visible) {\n              d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);\n            }\n            listener.polygonEnd();\n          }\n          segments = polygon = ring = null;\n        }\n      };\n      function insidePolygon(p) {\n        var wn = 0, n = polygon.length, y = p[1];\n        for (var i = 0; i < n; ++i) {\n          for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {\n            b = v[j];\n            if (a[1] <= y) {\n              if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;\n            } else {\n              if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;\n            }\n            a = b;\n          }\n        }\n        return wn !== 0;\n      }\n      function interpolate(from, to, direction, listener) {\n        var a = 0, a1 = 0;\n        if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {\n          do {\n            listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n          } while ((a = (a + direction + 4) % 4) !== a1);\n        } else {\n          listener.point(to[0], to[1]);\n        }\n      }\n      function pointVisible(x, y) {\n        return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n      }\n      function point(x, y) {\n        if (pointVisible(x, y)) listener.point(x, y);\n      }\n      var x__, y__, v__, x_, y_, v_, first, clean;\n      function lineStart() {\n        clip.point = linePoint;\n        if (polygon) polygon.push(ring = []);\n        first = true;\n        v_ = false;\n        x_ = y_ = NaN;\n      }\n      function lineEnd() {\n        if (segments) {\n          linePoint(x__, y__);\n          if (v__ && v_) bufferListener.rejoin();\n          segments.push(bufferListener.buffer());\n        }\n        clip.point = point;\n        if (v_) listener.lineEnd();\n      }\n      function linePoint(x, y) {\n        x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));\n        y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));\n        var v = pointVisible(x, y);\n        if (polygon) ring.push([ x, y ]);\n        if (first) {\n          x__ = x, y__ = y, v__ = v;\n          first = false;\n          if (v) {\n            listener.lineStart();\n            listener.point(x, y);\n          }\n        } else {\n          if (v && v_) listener.point(x, y); else {\n            var l = {\n              a: {\n                x: x_,\n                y: y_\n              },\n              b: {\n                x: x,\n                y: y\n              }\n            };\n            if (clipLine(l)) {\n              if (!v_) {\n                listener.lineStart();\n                listener.point(l.a.x, l.a.y);\n              }\n              listener.point(l.b.x, l.b.y);\n              if (!v) listener.lineEnd();\n              clean = false;\n            } else if (v) {\n              listener.lineStart();\n              listener.point(x, y);\n              clean = false;\n            }\n          }\n        }\n        x_ = x, y_ = y, v_ = v;\n      }\n      return clip;\n    };\n    function corner(p, direction) {\n      return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;\n    }\n    function compare(a, b) {\n      return comparePoints(a.x, b.x);\n    }\n    function comparePoints(a, b) {\n      var ca = corner(a, 1), cb = corner(b, 1);\n      return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n    }\n  }\n  function d3_geo_conic(projectAt) {\n    var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);\n    p.parallels = function(_) {\n      if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];\n      return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);\n    };\n    return p;\n  }\n  function d3_geo_conicEqualArea(φ0, φ1) {\n    var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;\n    function forward(λ, φ) {\n      var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;\n      return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = ρ0 - y;\n      return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];\n    };\n    return forward;\n  }\n  (d3.geo.conicEqualArea = function() {\n    return d3_geo_conic(d3_geo_conicEqualArea);\n  }).raw = d3_geo_conicEqualArea;\n  d3.geo.albers = function() {\n    return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);\n  };\n  d3.geo.albersUsa = function() {\n    var lower48 = d3.geo.albers();\n    var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);\n    var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);\n    var point, pointStream = {\n      point: function(x, y) {\n        point = [ x, y ];\n      }\n    }, lower48Point, alaskaPoint, hawaiiPoint;\n    function albersUsa(coordinates) {\n      var x = coordinates[0], y = coordinates[1];\n      point = null;\n      (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);\n      return point;\n    }\n    albersUsa.invert = function(coordinates) {\n      var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n      return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);\n    };\n    albersUsa.stream = function(stream) {\n      var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);\n      return {\n        point: function(x, y) {\n          lower48Stream.point(x, y);\n          alaskaStream.point(x, y);\n          hawaiiStream.point(x, y);\n        },\n        sphere: function() {\n          lower48Stream.sphere();\n          alaskaStream.sphere();\n          hawaiiStream.sphere();\n        },\n        lineStart: function() {\n          lower48Stream.lineStart();\n          alaskaStream.lineStart();\n          hawaiiStream.lineStart();\n        },\n        lineEnd: function() {\n          lower48Stream.lineEnd();\n          alaskaStream.lineEnd();\n          hawaiiStream.lineEnd();\n        },\n        polygonStart: function() {\n          lower48Stream.polygonStart();\n          alaskaStream.polygonStart();\n          hawaiiStream.polygonStart();\n        },\n        polygonEnd: function() {\n          lower48Stream.polygonEnd();\n          alaskaStream.polygonEnd();\n          hawaiiStream.polygonEnd();\n        }\n      };\n    };\n    albersUsa.precision = function(_) {\n      if (!arguments.length) return lower48.precision();\n      lower48.precision(_);\n      alaska.precision(_);\n      hawaii.precision(_);\n      return albersUsa;\n    };\n    albersUsa.scale = function(_) {\n      if (!arguments.length) return lower48.scale();\n      lower48.scale(_);\n      alaska.scale(_ * .35);\n      hawaii.scale(_);\n      return albersUsa.translate(lower48.translate());\n    };\n    albersUsa.translate = function(_) {\n      if (!arguments.length) return lower48.translate();\n      var k = lower48.scale(), x = +_[0], y = +_[1];\n      lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;\n      alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n      hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n      return albersUsa;\n    };\n    return albersUsa.scale(1070);\n  };\n  var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {\n    point: d3_noop,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: function() {\n      d3_geo_pathAreaPolygon = 0;\n      d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;\n      d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);\n    }\n  };\n  function d3_geo_pathAreaRingStart() {\n    var x00, y00, x0, y0;\n    d3_geo_pathArea.point = function(x, y) {\n      d3_geo_pathArea.point = nextPoint;\n      x00 = x0 = x, y00 = y0 = y;\n    };\n    function nextPoint(x, y) {\n      d3_geo_pathAreaPolygon += y0 * x - x0 * y;\n      x0 = x, y0 = y;\n    }\n    d3_geo_pathArea.lineEnd = function() {\n      nextPoint(x00, y00);\n    };\n  }\n  var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;\n  var d3_geo_pathBounds = {\n    point: d3_geo_pathBoundsPoint,\n    lineStart: d3_noop,\n    lineEnd: d3_noop,\n    polygonStart: d3_noop,\n    polygonEnd: d3_noop\n  };\n  function d3_geo_pathBoundsPoint(x, y) {\n    if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;\n    if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;\n    if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;\n    if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;\n  }\n  function d3_geo_pathBuffer() {\n    var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];\n    var stream = {\n      point: point,\n      lineStart: function() {\n        stream.point = pointLineStart;\n      },\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        stream.lineEnd = lineEndPolygon;\n      },\n      polygonEnd: function() {\n        stream.lineEnd = lineEnd;\n        stream.point = point;\n      },\n      pointRadius: function(_) {\n        pointCircle = d3_geo_pathBufferCircle(_);\n        return stream;\n      },\n      result: function() {\n        if (buffer.length) {\n          var result = buffer.join(\"\");\n          buffer = [];\n          return result;\n        }\n      }\n    };\n    function point(x, y) {\n      buffer.push(\"M\", x, \",\", y, pointCircle);\n    }\n    function pointLineStart(x, y) {\n      buffer.push(\"M\", x, \",\", y);\n      stream.point = pointLine;\n    }\n    function pointLine(x, y) {\n      buffer.push(\"L\", x, \",\", y);\n    }\n    function lineEnd() {\n      stream.point = point;\n    }\n    function lineEndPolygon() {\n      buffer.push(\"Z\");\n    }\n    return stream;\n  }\n  function d3_geo_pathBufferCircle(radius) {\n    return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n  }\n  var d3_geo_pathCentroid = {\n    point: d3_geo_pathCentroidPoint,\n    lineStart: d3_geo_pathCentroidLineStart,\n    lineEnd: d3_geo_pathCentroidLineEnd,\n    polygonStart: function() {\n      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;\n    },\n    polygonEnd: function() {\n      d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;\n      d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;\n    }\n  };\n  function d3_geo_pathCentroidPoint(x, y) {\n    d3_geo_centroidX0 += x;\n    d3_geo_centroidY0 += y;\n    ++d3_geo_centroidZ0;\n  }\n  function d3_geo_pathCentroidLineStart() {\n    var x0, y0;\n    d3_geo_pathCentroid.point = function(x, y) {\n      d3_geo_pathCentroid.point = nextPoint;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    };\n    function nextPoint(x, y) {\n      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n      d3_geo_centroidX1 += z * (x0 + x) / 2;\n      d3_geo_centroidY1 += z * (y0 + y) / 2;\n      d3_geo_centroidZ1 += z;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    }\n  }\n  function d3_geo_pathCentroidLineEnd() {\n    d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n  }\n  function d3_geo_pathCentroidRingStart() {\n    var x00, y00, x0, y0;\n    d3_geo_pathCentroid.point = function(x, y) {\n      d3_geo_pathCentroid.point = nextPoint;\n      d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);\n    };\n    function nextPoint(x, y) {\n      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n      d3_geo_centroidX1 += z * (x0 + x) / 2;\n      d3_geo_centroidY1 += z * (y0 + y) / 2;\n      d3_geo_centroidZ1 += z;\n      z = y0 * x - x0 * y;\n      d3_geo_centroidX2 += z * (x0 + x);\n      d3_geo_centroidY2 += z * (y0 + y);\n      d3_geo_centroidZ2 += z * 3;\n      d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n    }\n    d3_geo_pathCentroid.lineEnd = function() {\n      nextPoint(x00, y00);\n    };\n  }\n  function d3_geo_pathContext(context) {\n    var pointRadius = 4.5;\n    var stream = {\n      point: point,\n      lineStart: function() {\n        stream.point = pointLineStart;\n      },\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        stream.lineEnd = lineEndPolygon;\n      },\n      polygonEnd: function() {\n        stream.lineEnd = lineEnd;\n        stream.point = point;\n      },\n      pointRadius: function(_) {\n        pointRadius = _;\n        return stream;\n      },\n      result: d3_noop\n    };\n    function point(x, y) {\n      context.moveTo(x + pointRadius, y);\n      context.arc(x, y, pointRadius, 0, τ);\n    }\n    function pointLineStart(x, y) {\n      context.moveTo(x, y);\n      stream.point = pointLine;\n    }\n    function pointLine(x, y) {\n      context.lineTo(x, y);\n    }\n    function lineEnd() {\n      stream.point = point;\n    }\n    function lineEndPolygon() {\n      context.closePath();\n    }\n    return stream;\n  }\n  function d3_geo_resample(project) {\n    var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;\n    function resample(stream) {\n      return (maxDepth ? resampleRecursive : resampleNone)(stream);\n    }\n    function resampleNone(stream) {\n      return d3_geo_transformPoint(stream, function(x, y) {\n        x = project(x, y);\n        stream.point(x[0], x[1]);\n      });\n    }\n    function resampleRecursive(stream) {\n      var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;\n      var resample = {\n        point: point,\n        lineStart: lineStart,\n        lineEnd: lineEnd,\n        polygonStart: function() {\n          stream.polygonStart();\n          resample.lineStart = ringStart;\n        },\n        polygonEnd: function() {\n          stream.polygonEnd();\n          resample.lineStart = lineStart;\n        }\n      };\n      function point(x, y) {\n        x = project(x, y);\n        stream.point(x[0], x[1]);\n      }\n      function lineStart() {\n        x0 = NaN;\n        resample.point = linePoint;\n        stream.lineStart();\n      }\n      function linePoint(λ, φ) {\n        var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);\n        resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n        stream.point(x0, y0);\n      }\n      function lineEnd() {\n        resample.point = point;\n        stream.lineEnd();\n      }\n      function ringStart() {\n        lineStart();\n        resample.point = ringPoint;\n        resample.lineEnd = ringEnd;\n      }\n      function ringPoint(λ, φ) {\n        linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n        resample.point = linePoint;\n      }\n      function ringEnd() {\n        resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);\n        resample.lineEnd = lineEnd;\n        lineEnd();\n      }\n      return resample;\n    }\n    function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {\n      var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n      if (d2 > 4 * δ2 && depth--) {\n        var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n        if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n          resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);\n          stream.point(x2, y2);\n          resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);\n        }\n      }\n    }\n    resample.precision = function(_) {\n      if (!arguments.length) return Math.sqrt(δ2);\n      maxDepth = (δ2 = _ * _) > 0 && 16;\n      return resample;\n    };\n    return resample;\n  }\n  d3.geo.path = function() {\n    var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;\n    function path(object) {\n      if (object) {\n        if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n        if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);\n        d3.geo.stream(object, cacheStream);\n      }\n      return contextStream.result();\n    }\n    path.area = function(object) {\n      d3_geo_pathAreaSum = 0;\n      d3.geo.stream(object, projectStream(d3_geo_pathArea));\n      return d3_geo_pathAreaSum;\n    };\n    path.centroid = function(object) {\n      d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n      d3.geo.stream(object, projectStream(d3_geo_pathCentroid));\n      return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];\n    };\n    path.bounds = function(object) {\n      d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);\n      d3.geo.stream(object, projectStream(d3_geo_pathBounds));\n      return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];\n    };\n    path.projection = function(_) {\n      if (!arguments.length) return projection;\n      projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;\n      return reset();\n    };\n    path.context = function(_) {\n      if (!arguments.length) return context;\n      contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);\n      if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n      return reset();\n    };\n    path.pointRadius = function(_) {\n      if (!arguments.length) return pointRadius;\n      pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n      return path;\n    };\n    function reset() {\n      cacheStream = null;\n      return path;\n    }\n    return path.projection(d3.geo.albersUsa()).context(null);\n  };\n  function d3_geo_pathProjectStream(project) {\n    var resample = d3_geo_resample(function(x, y) {\n      return project([ x * d3_degrees, y * d3_degrees ]);\n    });\n    return function(stream) {\n      return d3_geo_projectionRadians(resample(stream));\n    };\n  }\n  d3.geo.transform = function(methods) {\n    return {\n      stream: function(stream) {\n        var transform = new d3_geo_transform(stream);\n        for (var k in methods) transform[k] = methods[k];\n        return transform;\n      }\n    };\n  };\n  function d3_geo_transform(stream) {\n    this.stream = stream;\n  }\n  d3_geo_transform.prototype = {\n    point: function(x, y) {\n      this.stream.point(x, y);\n    },\n    sphere: function() {\n      this.stream.sphere();\n    },\n    lineStart: function() {\n      this.stream.lineStart();\n    },\n    lineEnd: function() {\n      this.stream.lineEnd();\n    },\n    polygonStart: function() {\n      this.stream.polygonStart();\n    },\n    polygonEnd: function() {\n      this.stream.polygonEnd();\n    }\n  };\n  function d3_geo_transformPoint(stream, point) {\n    return {\n      point: point,\n      sphere: function() {\n        stream.sphere();\n      },\n      lineStart: function() {\n        stream.lineStart();\n      },\n      lineEnd: function() {\n        stream.lineEnd();\n      },\n      polygonStart: function() {\n        stream.polygonStart();\n      },\n      polygonEnd: function() {\n        stream.polygonEnd();\n      }\n    };\n  }\n  d3.geo.projection = d3_geo_projection;\n  d3.geo.projectionMutator = d3_geo_projectionMutator;\n  function d3_geo_projection(project) {\n    return d3_geo_projectionMutator(function() {\n      return project;\n    })();\n  }\n  function d3_geo_projectionMutator(projectAt) {\n    var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {\n      x = project(x, y);\n      return [ x[0] * k + δx, δy - x[1] * k ];\n    }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;\n    function projection(point) {\n      point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);\n      return [ point[0] * k + δx, δy - point[1] * k ];\n    }\n    function invert(point) {\n      point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);\n      return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];\n    }\n    projection.stream = function(output) {\n      if (stream) stream.valid = false;\n      stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));\n      stream.valid = true;\n      return stream;\n    };\n    projection.clipAngle = function(_) {\n      if (!arguments.length) return clipAngle;\n      preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);\n      return invalidate();\n    };\n    projection.clipExtent = function(_) {\n      if (!arguments.length) return clipExtent;\n      clipExtent = _;\n      postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;\n      return invalidate();\n    };\n    projection.scale = function(_) {\n      if (!arguments.length) return k;\n      k = +_;\n      return reset();\n    };\n    projection.translate = function(_) {\n      if (!arguments.length) return [ x, y ];\n      x = +_[0];\n      y = +_[1];\n      return reset();\n    };\n    projection.center = function(_) {\n      if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];\n      λ = _[0] % 360 * d3_radians;\n      φ = _[1] % 360 * d3_radians;\n      return reset();\n    };\n    projection.rotate = function(_) {\n      if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];\n      δλ = _[0] % 360 * d3_radians;\n      δφ = _[1] % 360 * d3_radians;\n      δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;\n      return reset();\n    };\n    d3.rebind(projection, projectResample, \"precision\");\n    function reset() {\n      projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);\n      var center = project(λ, φ);\n      δx = x - center[0] * k;\n      δy = y + center[1] * k;\n      return invalidate();\n    }\n    function invalidate() {\n      if (stream) stream.valid = false, stream = null;\n      return projection;\n    }\n    return function() {\n      project = projectAt.apply(this, arguments);\n      projection.invert = project.invert && invert;\n      return reset();\n    };\n  }\n  function d3_geo_projectionRadians(stream) {\n    return d3_geo_transformPoint(stream, function(x, y) {\n      stream.point(x * d3_radians, y * d3_radians);\n    });\n  }\n  function d3_geo_equirectangular(λ, φ) {\n    return [ λ, φ ];\n  }\n  (d3.geo.equirectangular = function() {\n    return d3_geo_projection(d3_geo_equirectangular);\n  }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;\n  d3.geo.rotation = function(rotate) {\n    rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);\n    function forward(coordinates) {\n      coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n      return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n    }\n    forward.invert = function(coordinates) {\n      coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n      return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n    };\n    return forward;\n  };\n  function d3_geo_identityRotation(λ, φ) {\n    return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n  }\n  d3_geo_identityRotation.invert = d3_geo_equirectangular;\n  function d3_geo_rotation(δλ, δφ, δγ) {\n    return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;\n  }\n  function d3_geo_forwardRotationλ(δλ) {\n    return function(λ, φ) {\n      return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n    };\n  }\n  function d3_geo_rotationλ(δλ) {\n    var rotation = d3_geo_forwardRotationλ(δλ);\n    rotation.invert = d3_geo_forwardRotationλ(-δλ);\n    return rotation;\n  }\n  function d3_geo_rotationφγ(δφ, δγ) {\n    var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);\n    function rotation(λ, φ) {\n      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;\n      return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];\n    }\n    rotation.invert = function(λ, φ) {\n      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;\n      return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];\n    };\n    return rotation;\n  }\n  d3.geo.circle = function() {\n    var origin = [ 0, 0 ], angle, precision = 6, interpolate;\n    function circle() {\n      var center = typeof origin === \"function\" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];\n      interpolate(null, null, 1, {\n        point: function(x, y) {\n          ring.push(x = rotate(x, y));\n          x[0] *= d3_degrees, x[1] *= d3_degrees;\n        }\n      });\n      return {\n        type: \"Polygon\",\n        coordinates: [ ring ]\n      };\n    }\n    circle.origin = function(x) {\n      if (!arguments.length) return origin;\n      origin = x;\n      return circle;\n    };\n    circle.angle = function(x) {\n      if (!arguments.length) return angle;\n      interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);\n      return circle;\n    };\n    circle.precision = function(_) {\n      if (!arguments.length) return precision;\n      interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);\n      return circle;\n    };\n    return circle.angle(90);\n  };\n  function d3_geo_circleInterpolate(radius, precision) {\n    var cr = Math.cos(radius), sr = Math.sin(radius);\n    return function(from, to, direction, listener) {\n      var step = direction * precision;\n      if (from != null) {\n        from = d3_geo_circleAngle(cr, from);\n        to = d3_geo_circleAngle(cr, to);\n        if (direction > 0 ? from < to : from > to) from += direction * τ;\n      } else {\n        from = radius + direction * τ;\n        to = radius - .5 * step;\n      }\n      for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {\n        listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);\n      }\n    };\n  }\n  function d3_geo_circleAngle(cr, point) {\n    var a = d3_geo_cartesian(point);\n    a[0] -= cr;\n    d3_geo_cartesianNormalize(a);\n    var angle = d3_acos(-a[1]);\n    return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);\n  }\n  d3.geo.distance = function(a, b) {\n    var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;\n    return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);\n  };\n  d3.geo.graticule = function() {\n    var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n    function graticule() {\n      return {\n        type: \"MultiLineString\",\n        coordinates: lines()\n      };\n    }\n    function lines() {\n      return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {\n        return abs(x % DX) > ε;\n      }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {\n        return abs(y % DY) > ε;\n      }).map(y));\n    }\n    graticule.lines = function() {\n      return lines().map(function(coordinates) {\n        return {\n          type: \"LineString\",\n          coordinates: coordinates\n        };\n      });\n    };\n    graticule.outline = function() {\n      return {\n        type: \"Polygon\",\n        coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]\n      };\n    };\n    graticule.extent = function(_) {\n      if (!arguments.length) return graticule.minorExtent();\n      return graticule.majorExtent(_).minorExtent(_);\n    };\n    graticule.majorExtent = function(_) {\n      if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];\n      X0 = +_[0][0], X1 = +_[1][0];\n      Y0 = +_[0][1], Y1 = +_[1][1];\n      if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n      if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n      return graticule.precision(precision);\n    };\n    graticule.minorExtent = function(_) {\n      if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n      x0 = +_[0][0], x1 = +_[1][0];\n      y0 = +_[0][1], y1 = +_[1][1];\n      if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n      if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n      return graticule.precision(precision);\n    };\n    graticule.step = function(_) {\n      if (!arguments.length) return graticule.minorStep();\n      return graticule.majorStep(_).minorStep(_);\n    };\n    graticule.majorStep = function(_) {\n      if (!arguments.length) return [ DX, DY ];\n      DX = +_[0], DY = +_[1];\n      return graticule;\n    };\n    graticule.minorStep = function(_) {\n      if (!arguments.length) return [ dx, dy ];\n      dx = +_[0], dy = +_[1];\n      return graticule;\n    };\n    graticule.precision = function(_) {\n      if (!arguments.length) return precision;\n      precision = +_;\n      x = d3_geo_graticuleX(y0, y1, 90);\n      y = d3_geo_graticuleY(x0, x1, precision);\n      X = d3_geo_graticuleX(Y0, Y1, 90);\n      Y = d3_geo_graticuleY(X0, X1, precision);\n      return graticule;\n    };\n    return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);\n  };\n  function d3_geo_graticuleX(y0, y1, dy) {\n    var y = d3.range(y0, y1 - ε, dy).concat(y1);\n    return function(x) {\n      return y.map(function(y) {\n        return [ x, y ];\n      });\n    };\n  }\n  function d3_geo_graticuleY(x0, x1, dx) {\n    var x = d3.range(x0, x1 - ε, dx).concat(x1);\n    return function(y) {\n      return x.map(function(x) {\n        return [ x, y ];\n      });\n    };\n  }\n  function d3_source(d) {\n    return d.source;\n  }\n  function d3_target(d) {\n    return d.target;\n  }\n  d3.geo.greatArc = function() {\n    var source = d3_source, source_, target = d3_target, target_;\n    function greatArc() {\n      return {\n        type: \"LineString\",\n        coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]\n      };\n    }\n    greatArc.distance = function() {\n      return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));\n    };\n    greatArc.source = function(_) {\n      if (!arguments.length) return source;\n      source = _, source_ = typeof _ === \"function\" ? null : _;\n      return greatArc;\n    };\n    greatArc.target = function(_) {\n      if (!arguments.length) return target;\n      target = _, target_ = typeof _ === \"function\" ? null : _;\n      return greatArc;\n    };\n    greatArc.precision = function() {\n      return arguments.length ? greatArc : 0;\n    };\n    return greatArc;\n  };\n  d3.geo.interpolate = function(source, target) {\n    return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);\n  };\n  function d3_geo_interpolate(x0, y0, x1, y1) {\n    var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);\n    var interpolate = d ? function(t) {\n      var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n      return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];\n    } : function() {\n      return [ x0 * d3_degrees, y0 * d3_degrees ];\n    };\n    interpolate.distance = d;\n    return interpolate;\n  }\n  d3.geo.length = function(object) {\n    d3_geo_lengthSum = 0;\n    d3.geo.stream(object, d3_geo_length);\n    return d3_geo_lengthSum;\n  };\n  var d3_geo_lengthSum;\n  var d3_geo_length = {\n    sphere: d3_noop,\n    point: d3_noop,\n    lineStart: d3_geo_lengthLineStart,\n    lineEnd: d3_noop,\n    polygonStart: d3_noop,\n    polygonEnd: d3_noop\n  };\n  function d3_geo_lengthLineStart() {\n    var λ0, sinφ0, cosφ0;\n    d3_geo_length.point = function(λ, φ) {\n      λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);\n      d3_geo_length.point = nextPoint;\n    };\n    d3_geo_length.lineEnd = function() {\n      d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;\n    };\n    function nextPoint(λ, φ) {\n      var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);\n      d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);\n      λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;\n    }\n  }\n  function d3_geo_azimuthal(scale, angle) {\n    function azimuthal(λ, φ) {\n      var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);\n      return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];\n    }\n    azimuthal.invert = function(x, y) {\n      var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);\n      return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];\n    };\n    return azimuthal;\n  }\n  var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {\n    return Math.sqrt(2 / (1 + cosλcosφ));\n  }, function(ρ) {\n    return 2 * Math.asin(ρ / 2);\n  });\n  (d3.geo.azimuthalEqualArea = function() {\n    return d3_geo_projection(d3_geo_azimuthalEqualArea);\n  }).raw = d3_geo_azimuthalEqualArea;\n  var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {\n    var c = Math.acos(cosλcosφ);\n    return c && c / Math.sin(c);\n  }, d3_identity);\n  (d3.geo.azimuthalEquidistant = function() {\n    return d3_geo_projection(d3_geo_azimuthalEquidistant);\n  }).raw = d3_geo_azimuthalEquidistant;\n  function d3_geo_conicConformal(φ0, φ1) {\n    var cosφ0 = Math.cos(φ0), t = function(φ) {\n      return Math.tan(π / 4 + φ / 2);\n    }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;\n    if (!n) return d3_geo_mercator;\n    function forward(λ, φ) {\n      if (F > 0) {\n        if (φ < -halfπ + ε) φ = -halfπ + ε;\n      } else {\n        if (φ > halfπ - ε) φ = halfπ - ε;\n      }\n      var ρ = F / Math.pow(t(φ), n);\n      return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);\n      return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];\n    };\n    return forward;\n  }\n  (d3.geo.conicConformal = function() {\n    return d3_geo_conic(d3_geo_conicConformal);\n  }).raw = d3_geo_conicConformal;\n  function d3_geo_conicEquidistant(φ0, φ1) {\n    var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;\n    if (abs(n) < ε) return d3_geo_equirectangular;\n    function forward(λ, φ) {\n      var ρ = G - φ;\n      return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];\n    }\n    forward.invert = function(x, y) {\n      var ρ0_y = G - y;\n      return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];\n    };\n    return forward;\n  }\n  (d3.geo.conicEquidistant = function() {\n    return d3_geo_conic(d3_geo_conicEquidistant);\n  }).raw = d3_geo_conicEquidistant;\n  var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {\n    return 1 / cosλcosφ;\n  }, Math.atan);\n  (d3.geo.gnomonic = function() {\n    return d3_geo_projection(d3_geo_gnomonic);\n  }).raw = d3_geo_gnomonic;\n  function d3_geo_mercator(λ, φ) {\n    return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];\n  }\n  d3_geo_mercator.invert = function(x, y) {\n    return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];\n  };\n  function d3_geo_mercatorProjection(project) {\n    var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;\n    m.scale = function() {\n      var v = scale.apply(m, arguments);\n      return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n    };\n    m.translate = function() {\n      var v = translate.apply(m, arguments);\n      return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n    };\n    m.clipExtent = function(_) {\n      var v = clipExtent.apply(m, arguments);\n      if (v === m) {\n        if (clipAuto = _ == null) {\n          var k = π * scale(), t = translate();\n          clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);\n        }\n      } else if (clipAuto) {\n        v = null;\n      }\n      return v;\n    };\n    return m.clipExtent(null);\n  }\n  (d3.geo.mercator = function() {\n    return d3_geo_mercatorProjection(d3_geo_mercator);\n  }).raw = d3_geo_mercator;\n  var d3_geo_orthographic = d3_geo_azimuthal(function() {\n    return 1;\n  }, Math.asin);\n  (d3.geo.orthographic = function() {\n    return d3_geo_projection(d3_geo_orthographic);\n  }).raw = d3_geo_orthographic;\n  var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {\n    return 1 / (1 + cosλcosφ);\n  }, function(ρ) {\n    return 2 * Math.atan(ρ);\n  });\n  (d3.geo.stereographic = function() {\n    return d3_geo_projection(d3_geo_stereographic);\n  }).raw = d3_geo_stereographic;\n  function d3_geo_transverseMercator(λ, φ) {\n    return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];\n  }\n  d3_geo_transverseMercator.invert = function(x, y) {\n    return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];\n  };\n  (d3.geo.transverseMercator = function() {\n    var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;\n    projection.center = function(_) {\n      return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);\n    };\n    projection.rotate = function(_) {\n      return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), \n      [ _[0], _[1], _[2] - 90 ]);\n    };\n    return rotate([ 0, 0, 90 ]);\n  }).raw = d3_geo_transverseMercator;\n  d3.geom = {};\n  function d3_geom_pointX(d) {\n    return d[0];\n  }\n  function d3_geom_pointY(d) {\n    return d[1];\n  }\n  d3.geom.hull = function(vertices) {\n    var x = d3_geom_pointX, y = d3_geom_pointY;\n    if (arguments.length) return hull(vertices);\n    function hull(data) {\n      if (data.length < 3) return [];\n      var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n      for (i = 0; i < n; i++) {\n        points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n      }\n      points.sort(d3_geom_hullOrder);\n      for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n      var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n      var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n      for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n      for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n      return polygon;\n    }\n    hull.x = function(_) {\n      return arguments.length ? (x = _, hull) : x;\n    };\n    hull.y = function(_) {\n      return arguments.length ? (y = _, hull) : y;\n    };\n    return hull;\n  };\n  function d3_geom_hullUpper(points) {\n    var n = points.length, hull = [ 0, 1 ], hs = 2;\n    for (var i = 2; i < n; i++) {\n      while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n      hull[hs++] = i;\n    }\n    return hull.slice(0, hs);\n  }\n  function d3_geom_hullOrder(a, b) {\n    return a[0] - b[0] || a[1] - b[1];\n  }\n  d3.geom.polygon = function(coordinates) {\n    d3_subclass(coordinates, d3_geom_polygonPrototype);\n    return coordinates;\n  };\n  var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n  d3_geom_polygonPrototype.area = function() {\n    var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n    while (++i < n) {\n      a = b;\n      b = this[i];\n      area += a[1] * b[0] - a[0] * b[1];\n    }\n    return area * .5;\n  };\n  d3_geom_polygonPrototype.centroid = function(k) {\n    var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n    if (!arguments.length) k = -1 / (6 * this.area());\n    while (++i < n) {\n      a = b;\n      b = this[i];\n      c = a[0] * b[1] - b[0] * a[1];\n      x += (a[0] + b[0]) * c;\n      y += (a[1] + b[1]) * c;\n    }\n    return [ x * k, y * k ];\n  };\n  d3_geom_polygonPrototype.clip = function(subject) {\n    var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n    while (++i < n) {\n      input = subject.slice();\n      subject.length = 0;\n      b = this[i];\n      c = input[(m = input.length - closed) - 1];\n      j = -1;\n      while (++j < m) {\n        d = input[j];\n        if (d3_geom_polygonInside(d, a, b)) {\n          if (!d3_geom_polygonInside(c, a, b)) {\n            subject.push(d3_geom_polygonIntersect(c, d, a, b));\n          }\n          subject.push(d);\n        } else if (d3_geom_polygonInside(c, a, b)) {\n          subject.push(d3_geom_polygonIntersect(c, d, a, b));\n        }\n        c = d;\n      }\n      if (closed) subject.push(subject[0]);\n      a = b;\n    }\n    return subject;\n  };\n  function d3_geom_polygonInside(p, a, b) {\n    return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n  }\n  function d3_geom_polygonIntersect(c, d, a, b) {\n    var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n    return [ x1 + ua * x21, y1 + ua * y21 ];\n  }\n  function d3_geom_polygonClosed(coordinates) {\n    var a = coordinates[0], b = coordinates[coordinates.length - 1];\n    return !(a[0] - b[0] || a[1] - b[1]);\n  }\n  var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n  function d3_geom_voronoiBeach() {\n    d3_geom_voronoiRedBlackNode(this);\n    this.edge = this.site = this.circle = null;\n  }\n  function d3_geom_voronoiCreateBeach(site) {\n    var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n    beach.site = site;\n    return beach;\n  }\n  function d3_geom_voronoiDetachBeach(beach) {\n    d3_geom_voronoiDetachCircle(beach);\n    d3_geom_voronoiBeaches.remove(beach);\n    d3_geom_voronoiBeachPool.push(beach);\n    d3_geom_voronoiRedBlackNode(beach);\n  }\n  function d3_geom_voronoiRemoveBeach(beach) {\n    var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n      x: x,\n      y: y\n    }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n    d3_geom_voronoiDetachBeach(beach);\n    var lArc = previous;\n    while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n      previous = lArc.P;\n      disappearing.unshift(lArc);\n      d3_geom_voronoiDetachBeach(lArc);\n      lArc = previous;\n    }\n    disappearing.unshift(lArc);\n    d3_geom_voronoiDetachCircle(lArc);\n    var rArc = next;\n    while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n      next = rArc.N;\n      disappearing.push(rArc);\n      d3_geom_voronoiDetachBeach(rArc);\n      rArc = next;\n    }\n    disappearing.push(rArc);\n    d3_geom_voronoiDetachCircle(rArc);\n    var nArcs = disappearing.length, iArc;\n    for (iArc = 1; iArc < nArcs; ++iArc) {\n      rArc = disappearing[iArc];\n      lArc = disappearing[iArc - 1];\n      d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n    }\n    lArc = disappearing[0];\n    rArc = disappearing[nArcs - 1];\n    rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n    d3_geom_voronoiAttachCircle(lArc);\n    d3_geom_voronoiAttachCircle(rArc);\n  }\n  function d3_geom_voronoiAddBeach(site) {\n    var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n    while (node) {\n      dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n      if (dxl > ε) node = node.L; else {\n        dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n        if (dxr > ε) {\n          if (!node.R) {\n            lArc = node;\n            break;\n          }\n          node = node.R;\n        } else {\n          if (dxl > -ε) {\n            lArc = node.P;\n            rArc = node;\n          } else if (dxr > -ε) {\n            lArc = node;\n            rArc = node.N;\n          } else {\n            lArc = rArc = node;\n          }\n          break;\n        }\n      }\n    }\n    var newArc = d3_geom_voronoiCreateBeach(site);\n    d3_geom_voronoiBeaches.insert(lArc, newArc);\n    if (!lArc && !rArc) return;\n    if (lArc === rArc) {\n      d3_geom_voronoiDetachCircle(lArc);\n      rArc = d3_geom_voronoiCreateBeach(lArc.site);\n      d3_geom_voronoiBeaches.insert(newArc, rArc);\n      newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n      d3_geom_voronoiAttachCircle(lArc);\n      d3_geom_voronoiAttachCircle(rArc);\n      return;\n    }\n    if (!rArc) {\n      newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n      return;\n    }\n    d3_geom_voronoiDetachCircle(lArc);\n    d3_geom_voronoiDetachCircle(rArc);\n    var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n      x: (cy * hb - by * hc) / d + ax,\n      y: (bx * hc - cx * hb) / d + ay\n    };\n    d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n    newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n    rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n    d3_geom_voronoiAttachCircle(lArc);\n    d3_geom_voronoiAttachCircle(rArc);\n  }\n  function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n    var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n    if (!pby2) return rfocx;\n    var lArc = arc.P;\n    if (!lArc) return -Infinity;\n    site = lArc.site;\n    var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n    if (!plby2) return lfocx;\n    var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n    if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n    return (rfocx + lfocx) / 2;\n  }\n  function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n    var rArc = arc.N;\n    if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n    var site = arc.site;\n    return site.y === directrix ? site.x : Infinity;\n  }\n  function d3_geom_voronoiCell(site) {\n    this.site = site;\n    this.edges = [];\n  }\n  d3_geom_voronoiCell.prototype.prepare = function() {\n    var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n    while (iHalfEdge--) {\n      edge = halfEdges[iHalfEdge].edge;\n      if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n    }\n    halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n    return halfEdges.length;\n  };\n  function d3_geom_voronoiCloseCells(extent) {\n    var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n    while (iCell--) {\n      cell = cells[iCell];\n      if (!cell || !cell.prepare()) continue;\n      halfEdges = cell.edges;\n      nHalfEdges = halfEdges.length;\n      iHalfEdge = 0;\n      while (iHalfEdge < nHalfEdges) {\n        end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n        start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n        if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n          halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n            x: x0,\n            y: abs(x2 - x0) < ε ? y2 : y1\n          } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n            x: abs(y2 - y1) < ε ? x2 : x1,\n            y: y1\n          } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n            x: x1,\n            y: abs(x2 - x1) < ε ? y2 : y0\n          } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n            x: abs(y2 - y0) < ε ? x2 : x0,\n            y: y0\n          } : null), cell.site, null));\n          ++nHalfEdges;\n        }\n      }\n    }\n  }\n  function d3_geom_voronoiHalfEdgeOrder(a, b) {\n    return b.angle - a.angle;\n  }\n  function d3_geom_voronoiCircle() {\n    d3_geom_voronoiRedBlackNode(this);\n    this.x = this.y = this.arc = this.site = this.cy = null;\n  }\n  function d3_geom_voronoiAttachCircle(arc) {\n    var lArc = arc.P, rArc = arc.N;\n    if (!lArc || !rArc) return;\n    var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n    if (lSite === rSite) return;\n    var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n    var d = 2 * (ax * cy - ay * cx);\n    if (d >= -ε2) return;\n    var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n    var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n    circle.arc = arc;\n    circle.site = cSite;\n    circle.x = x + bx;\n    circle.y = cy + Math.sqrt(x * x + y * y);\n    circle.cy = cy;\n    arc.circle = circle;\n    var before = null, node = d3_geom_voronoiCircles._;\n    while (node) {\n      if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n        if (node.L) node = node.L; else {\n          before = node.P;\n          break;\n        }\n      } else {\n        if (node.R) node = node.R; else {\n          before = node;\n          break;\n        }\n      }\n    }\n    d3_geom_voronoiCircles.insert(before, circle);\n    if (!before) d3_geom_voronoiFirstCircle = circle;\n  }\n  function d3_geom_voronoiDetachCircle(arc) {\n    var circle = arc.circle;\n    if (circle) {\n      if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n      d3_geom_voronoiCircles.remove(circle);\n      d3_geom_voronoiCirclePool.push(circle);\n      d3_geom_voronoiRedBlackNode(circle);\n      arc.circle = null;\n    }\n  }\n  function d3_geom_voronoiClipEdges(extent) {\n    var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n    while (i--) {\n      e = edges[i];\n      if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n        e.a = e.b = null;\n        edges.splice(i, 1);\n      }\n    }\n  }\n  function d3_geom_voronoiConnectEdge(edge, extent) {\n    var vb = edge.b;\n    if (vb) return true;\n    var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n    if (ry === ly) {\n      if (fx < x0 || fx >= x1) return;\n      if (lx > rx) {\n        if (!va) va = {\n          x: fx,\n          y: y0\n        }; else if (va.y >= y1) return;\n        vb = {\n          x: fx,\n          y: y1\n        };\n      } else {\n        if (!va) va = {\n          x: fx,\n          y: y1\n        }; else if (va.y < y0) return;\n        vb = {\n          x: fx,\n          y: y0\n        };\n      }\n    } else {\n      fm = (lx - rx) / (ry - ly);\n      fb = fy - fm * fx;\n      if (fm < -1 || fm > 1) {\n        if (lx > rx) {\n          if (!va) va = {\n            x: (y0 - fb) / fm,\n            y: y0\n          }; else if (va.y >= y1) return;\n          vb = {\n            x: (y1 - fb) / fm,\n            y: y1\n          };\n        } else {\n          if (!va) va = {\n            x: (y1 - fb) / fm,\n            y: y1\n          }; else if (va.y < y0) return;\n          vb = {\n            x: (y0 - fb) / fm,\n            y: y0\n          };\n        }\n      } else {\n        if (ly < ry) {\n          if (!va) va = {\n            x: x0,\n            y: fm * x0 + fb\n          }; else if (va.x >= x1) return;\n          vb = {\n            x: x1,\n            y: fm * x1 + fb\n          };\n        } else {\n          if (!va) va = {\n            x: x1,\n            y: fm * x1 + fb\n          }; else if (va.x < x0) return;\n          vb = {\n            x: x0,\n            y: fm * x0 + fb\n          };\n        }\n      }\n    }\n    edge.a = va;\n    edge.b = vb;\n    return true;\n  }\n  function d3_geom_voronoiEdge(lSite, rSite) {\n    this.l = lSite;\n    this.r = rSite;\n    this.a = this.b = null;\n  }\n  function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n    var edge = new d3_geom_voronoiEdge(lSite, rSite);\n    d3_geom_voronoiEdges.push(edge);\n    if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n    if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n    d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n    d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n    return edge;\n  }\n  function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n    var edge = new d3_geom_voronoiEdge(lSite, null);\n    edge.a = va;\n    edge.b = vb;\n    d3_geom_voronoiEdges.push(edge);\n    return edge;\n  }\n  function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n    if (!edge.a && !edge.b) {\n      edge.a = vertex;\n      edge.l = lSite;\n      edge.r = rSite;\n    } else if (edge.l === rSite) {\n      edge.b = vertex;\n    } else {\n      edge.a = vertex;\n    }\n  }\n  function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n    var va = edge.a, vb = edge.b;\n    this.edge = edge;\n    this.site = lSite;\n    this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n  }\n  d3_geom_voronoiHalfEdge.prototype = {\n    start: function() {\n      return this.edge.l === this.site ? this.edge.a : this.edge.b;\n    },\n    end: function() {\n      return this.edge.l === this.site ? this.edge.b : this.edge.a;\n    }\n  };\n  function d3_geom_voronoiRedBlackTree() {\n    this._ = null;\n  }\n  function d3_geom_voronoiRedBlackNode(node) {\n    node.U = node.C = node.L = node.R = node.P = node.N = null;\n  }\n  d3_geom_voronoiRedBlackTree.prototype = {\n    insert: function(after, node) {\n      var parent, grandpa, uncle;\n      if (after) {\n        node.P = after;\n        node.N = after.N;\n        if (after.N) after.N.P = node;\n        after.N = node;\n        if (after.R) {\n          after = after.R;\n          while (after.L) after = after.L;\n          after.L = node;\n        } else {\n          after.R = node;\n        }\n        parent = after;\n      } else if (this._) {\n        after = d3_geom_voronoiRedBlackFirst(this._);\n        node.P = null;\n        node.N = after;\n        after.P = after.L = node;\n        parent = after;\n      } else {\n        node.P = node.N = null;\n        this._ = node;\n        parent = null;\n      }\n      node.L = node.R = null;\n      node.U = parent;\n      node.C = true;\n      after = node;\n      while (parent && parent.C) {\n        grandpa = parent.U;\n        if (parent === grandpa.L) {\n          uncle = grandpa.R;\n          if (uncle && uncle.C) {\n            parent.C = uncle.C = false;\n            grandpa.C = true;\n            after = grandpa;\n          } else {\n            if (after === parent.R) {\n              d3_geom_voronoiRedBlackRotateLeft(this, parent);\n              after = parent;\n              parent = after.U;\n            }\n            parent.C = false;\n            grandpa.C = true;\n            d3_geom_voronoiRedBlackRotateRight(this, grandpa);\n          }\n        } else {\n          uncle = grandpa.L;\n          if (uncle && uncle.C) {\n            parent.C = uncle.C = false;\n            grandpa.C = true;\n            after = grandpa;\n          } else {\n            if (after === parent.L) {\n              d3_geom_voronoiRedBlackRotateRight(this, parent);\n              after = parent;\n              parent = after.U;\n            }\n            parent.C = false;\n            grandpa.C = true;\n            d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n          }\n        }\n        parent = after.U;\n      }\n      this._.C = false;\n    },\n    remove: function(node) {\n      if (node.N) node.N.P = node.P;\n      if (node.P) node.P.N = node.N;\n      node.N = node.P = null;\n      var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n      if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n      if (parent) {\n        if (parent.L === node) parent.L = next; else parent.R = next;\n      } else {\n        this._ = next;\n      }\n      if (left && right) {\n        red = next.C;\n        next.C = node.C;\n        next.L = left;\n        left.U = next;\n        if (next !== right) {\n          parent = next.U;\n          next.U = node.U;\n          node = next.R;\n          parent.L = node;\n          next.R = right;\n          right.U = next;\n        } else {\n          next.U = parent;\n          parent = next;\n          node = next.R;\n        }\n      } else {\n        red = node.C;\n        node = next;\n      }\n      if (node) node.U = parent;\n      if (red) return;\n      if (node && node.C) {\n        node.C = false;\n        return;\n      }\n      do {\n        if (node === this._) break;\n        if (node === parent.L) {\n          sibling = parent.R;\n          if (sibling.C) {\n            sibling.C = false;\n            parent.C = true;\n            d3_geom_voronoiRedBlackRotateLeft(this, parent);\n            sibling = parent.R;\n          }\n          if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n            if (!sibling.R || !sibling.R.C) {\n              sibling.L.C = false;\n              sibling.C = true;\n              d3_geom_voronoiRedBlackRotateRight(this, sibling);\n              sibling = parent.R;\n            }\n            sibling.C = parent.C;\n            parent.C = sibling.R.C = false;\n            d3_geom_voronoiRedBlackRotateLeft(this, parent);\n            node = this._;\n            break;\n          }\n        } else {\n          sibling = parent.L;\n          if (sibling.C) {\n            sibling.C = false;\n            parent.C = true;\n            d3_geom_voronoiRedBlackRotateRight(this, parent);\n            sibling = parent.L;\n          }\n          if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n            if (!sibling.L || !sibling.L.C) {\n              sibling.R.C = false;\n              sibling.C = true;\n              d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n              sibling = parent.L;\n            }\n            sibling.C = parent.C;\n            parent.C = sibling.L.C = false;\n            d3_geom_voronoiRedBlackRotateRight(this, parent);\n            node = this._;\n            break;\n          }\n        }\n        sibling.C = true;\n        node = parent;\n        parent = parent.U;\n      } while (!node.C);\n      if (node) node.C = false;\n    }\n  };\n  function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n    var p = node, q = node.R, parent = p.U;\n    if (parent) {\n      if (parent.L === p) parent.L = q; else parent.R = q;\n    } else {\n      tree._ = q;\n    }\n    q.U = parent;\n    p.U = q;\n    p.R = q.L;\n    if (p.R) p.R.U = p;\n    q.L = p;\n  }\n  function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n    var p = node, q = node.L, parent = p.U;\n    if (parent) {\n      if (parent.L === p) parent.L = q; else parent.R = q;\n    } else {\n      tree._ = q;\n    }\n    q.U = parent;\n    p.U = q;\n    p.L = q.R;\n    if (p.L) p.L.U = p;\n    q.R = p;\n  }\n  function d3_geom_voronoiRedBlackFirst(node) {\n    while (node.L) node = node.L;\n    return node;\n  }\n  function d3_geom_voronoi(sites, bbox) {\n    var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n    d3_geom_voronoiEdges = [];\n    d3_geom_voronoiCells = new Array(sites.length);\n    d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n    d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n    while (true) {\n      circle = d3_geom_voronoiFirstCircle;\n      if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n        if (site.x !== x0 || site.y !== y0) {\n          d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n          d3_geom_voronoiAddBeach(site);\n          x0 = site.x, y0 = site.y;\n        }\n        site = sites.pop();\n      } else if (circle) {\n        d3_geom_voronoiRemoveBeach(circle.arc);\n      } else {\n        break;\n      }\n    }\n    if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n    var diagram = {\n      cells: d3_geom_voronoiCells,\n      edges: d3_geom_voronoiEdges\n    };\n    d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n    return diagram;\n  }\n  function d3_geom_voronoiVertexOrder(a, b) {\n    return b.y - a.y || b.x - a.x;\n  }\n  d3.geom.voronoi = function(points) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n    if (points) return voronoi(points);\n    function voronoi(data) {\n      var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n      d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n        var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n          var s = e.start();\n          return [ s.x, s.y ];\n        }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n        polygon.point = data[i];\n      });\n      return polygons;\n    }\n    function sites(data) {\n      return data.map(function(d, i) {\n        return {\n          x: Math.round(fx(d, i) / ε) * ε,\n          y: Math.round(fy(d, i) / ε) * ε,\n          i: i\n        };\n      });\n    }\n    voronoi.links = function(data) {\n      return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n        return edge.l && edge.r;\n      }).map(function(edge) {\n        return {\n          source: data[edge.l.i],\n          target: data[edge.r.i]\n        };\n      });\n    };\n    voronoi.triangles = function(data) {\n      var triangles = [];\n      d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n        var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n        while (++j < m) {\n          e0 = e1;\n          s0 = s1;\n          e1 = edges[j].edge;\n          s1 = e1.l === site ? e1.r : e1.l;\n          if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n            triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n          }\n        }\n      });\n      return triangles;\n    };\n    voronoi.x = function(_) {\n      return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n    };\n    voronoi.y = function(_) {\n      return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n    };\n    voronoi.clipExtent = function(_) {\n      if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n      clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n      return voronoi;\n    };\n    voronoi.size = function(_) {\n      if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n      return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n    };\n    return voronoi;\n  };\n  var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n  function d3_geom_voronoiTriangleArea(a, b, c) {\n    return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n  }\n  d3.geom.delaunay = function(vertices) {\n    return d3.geom.voronoi().triangles(vertices);\n  };\n  d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n    if (compat = arguments.length) {\n      x = d3_geom_quadtreeCompatX;\n      y = d3_geom_quadtreeCompatY;\n      if (compat === 3) {\n        y2 = y1;\n        x2 = x1;\n        y1 = x1 = 0;\n      }\n      return quadtree(points);\n    }\n    function quadtree(data) {\n      var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n      if (x1 != null) {\n        x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n      } else {\n        x2_ = y2_ = -(x1_ = y1_ = Infinity);\n        xs = [], ys = [];\n        n = data.length;\n        if (compat) for (i = 0; i < n; ++i) {\n          d = data[i];\n          if (d.x < x1_) x1_ = d.x;\n          if (d.y < y1_) y1_ = d.y;\n          if (d.x > x2_) x2_ = d.x;\n          if (d.y > y2_) y2_ = d.y;\n          xs.push(d.x);\n          ys.push(d.y);\n        } else for (i = 0; i < n; ++i) {\n          var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n          if (x_ < x1_) x1_ = x_;\n          if (y_ < y1_) y1_ = y_;\n          if (x_ > x2_) x2_ = x_;\n          if (y_ > y2_) y2_ = y_;\n          xs.push(x_);\n          ys.push(y_);\n        }\n      }\n      var dx = x2_ - x1_, dy = y2_ - y1_;\n      if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n      function insert(n, d, x, y, x1, y1, x2, y2) {\n        if (isNaN(x) || isNaN(y)) return;\n        if (n.leaf) {\n          var nx = n.x, ny = n.y;\n          if (nx != null) {\n            if (abs(nx - x) + abs(ny - y) < .01) {\n              insertChild(n, d, x, y, x1, y1, x2, y2);\n            } else {\n              var nPoint = n.point;\n              n.x = n.y = n.point = null;\n              insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n              insertChild(n, d, x, y, x1, y1, x2, y2);\n            }\n          } else {\n            n.x = x, n.y = y, n.point = d;\n          }\n        } else {\n          insertChild(n, d, x, y, x1, y1, x2, y2);\n        }\n      }\n      function insertChild(n, d, x, y, x1, y1, x2, y2) {\n        var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n        n.leaf = false;\n        n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n        if (right) x1 = xm; else x2 = xm;\n        if (below) y1 = ym; else y2 = ym;\n        insert(n, d, x, y, x1, y1, x2, y2);\n      }\n      var root = d3_geom_quadtreeNode();\n      root.add = function(d) {\n        insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n      };\n      root.visit = function(f) {\n        d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n      };\n      root.find = function(point) {\n        return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n      };\n      i = -1;\n      if (x1 == null) {\n        while (++i < n) {\n          insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n        }\n        --i;\n      } else data.forEach(root.add);\n      xs = ys = data = d = null;\n      return root;\n    }\n    quadtree.x = function(_) {\n      return arguments.length ? (x = _, quadtree) : x;\n    };\n    quadtree.y = function(_) {\n      return arguments.length ? (y = _, quadtree) : y;\n    };\n    quadtree.extent = function(_) {\n      if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n      if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n      y2 = +_[1][1];\n      return quadtree;\n    };\n    quadtree.size = function(_) {\n      if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n      if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n      return quadtree;\n    };\n    return quadtree;\n  };\n  function d3_geom_quadtreeCompatX(d) {\n    return d.x;\n  }\n  function d3_geom_quadtreeCompatY(d) {\n    return d.y;\n  }\n  function d3_geom_quadtreeNode() {\n    return {\n      leaf: true,\n      nodes: [],\n      point: null,\n      x: null,\n      y: null\n    };\n  }\n  function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n    if (!f(node, x1, y1, x2, y2)) {\n      var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n      if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n      if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n      if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n      if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n    }\n  }\n  function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n    var minDistance2 = Infinity, closestPoint;\n    (function find(node, x1, y1, x2, y2) {\n      if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n      if (point = node.point) {\n        var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;\n        if (distance2 < minDistance2) {\n          var distance = Math.sqrt(minDistance2 = distance2);\n          x0 = x - distance, y0 = y - distance;\n          x3 = x + distance, y3 = y + distance;\n          closestPoint = point;\n        }\n      }\n      var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n      for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n        if (node = children[i & 3]) switch (i & 3) {\n         case 0:\n          find(node, x1, y1, xm, ym);\n          break;\n\n         case 1:\n          find(node, xm, y1, x2, ym);\n          break;\n\n         case 2:\n          find(node, x1, ym, xm, y2);\n          break;\n\n         case 3:\n          find(node, xm, ym, x2, y2);\n          break;\n        }\n      }\n    })(root, x0, y0, x3, y3);\n    return closestPoint;\n  }\n  d3.interpolateRgb = d3_interpolateRgb;\n  function d3_interpolateRgb(a, b) {\n    a = d3.rgb(a);\n    b = d3.rgb(b);\n    var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n    return function(t) {\n      return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n    };\n  }\n  d3.interpolateObject = d3_interpolateObject;\n  function d3_interpolateObject(a, b) {\n    var i = {}, c = {}, k;\n    for (k in a) {\n      if (k in b) {\n        i[k] = d3_interpolate(a[k], b[k]);\n      } else {\n        c[k] = a[k];\n      }\n    }\n    for (k in b) {\n      if (!(k in a)) {\n        c[k] = b[k];\n      }\n    }\n    return function(t) {\n      for (k in i) c[k] = i[k](t);\n      return c;\n    };\n  }\n  d3.interpolateNumber = d3_interpolateNumber;\n  function d3_interpolateNumber(a, b) {\n    a = +a, b = +b;\n    return function(t) {\n      return a * (1 - t) + b * t;\n    };\n  }\n  d3.interpolateString = d3_interpolateString;\n  function d3_interpolateString(a, b) {\n    var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n    a = a + \"\", b = b + \"\";\n    while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n      if ((bs = bm.index) > bi) {\n        bs = b.slice(bi, bs);\n        if (s[i]) s[i] += bs; else s[++i] = bs;\n      }\n      if ((am = am[0]) === (bm = bm[0])) {\n        if (s[i]) s[i] += bm; else s[++i] = bm;\n      } else {\n        s[++i] = null;\n        q.push({\n          i: i,\n          x: d3_interpolateNumber(am, bm)\n        });\n      }\n      bi = d3_interpolate_numberB.lastIndex;\n    }\n    if (bi < b.length) {\n      bs = b.slice(bi);\n      if (s[i]) s[i] += bs; else s[++i] = bs;\n    }\n    return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n      return b(t) + \"\";\n    }) : function() {\n      return b;\n    } : (b = q.length, function(t) {\n      for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    });\n  }\n  var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n  d3.interpolate = d3_interpolate;\n  function d3_interpolate(a, b) {\n    var i = d3.interpolators.length, f;\n    while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n    return f;\n  }\n  d3.interpolators = [ function(a, b) {\n    var t = typeof b;\n    return (t === \"string\" ? d3_rgb_names.has(b) || /^(#|rgb\\(|hsl\\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n  } ];\n  d3.interpolateArray = d3_interpolateArray;\n  function d3_interpolateArray(a, b) {\n    var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n    for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n    for (;i < na; ++i) c[i] = a[i];\n    for (;i < nb; ++i) c[i] = b[i];\n    return function(t) {\n      for (i = 0; i < n0; ++i) c[i] = x[i](t);\n      return c;\n    };\n  }\n  var d3_ease_default = function() {\n    return d3_identity;\n  };\n  var d3_ease = d3.map({\n    linear: d3_ease_default,\n    poly: d3_ease_poly,\n    quad: function() {\n      return d3_ease_quad;\n    },\n    cubic: function() {\n      return d3_ease_cubic;\n    },\n    sin: function() {\n      return d3_ease_sin;\n    },\n    exp: function() {\n      return d3_ease_exp;\n    },\n    circle: function() {\n      return d3_ease_circle;\n    },\n    elastic: d3_ease_elastic,\n    back: d3_ease_back,\n    bounce: function() {\n      return d3_ease_bounce;\n    }\n  });\n  var d3_ease_mode = d3.map({\n    \"in\": d3_identity,\n    out: d3_ease_reverse,\n    \"in-out\": d3_ease_reflect,\n    \"out-in\": function(f) {\n      return d3_ease_reflect(d3_ease_reverse(f));\n    }\n  });\n  d3.ease = function(name) {\n    var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n    t = d3_ease.get(t) || d3_ease_default;\n    m = d3_ease_mode.get(m) || d3_identity;\n    return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n  };\n  function d3_ease_clamp(f) {\n    return function(t) {\n      return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n    };\n  }\n  function d3_ease_reverse(f) {\n    return function(t) {\n      return 1 - f(1 - t);\n    };\n  }\n  function d3_ease_reflect(f) {\n    return function(t) {\n      return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n    };\n  }\n  function d3_ease_quad(t) {\n    return t * t;\n  }\n  function d3_ease_cubic(t) {\n    return t * t * t;\n  }\n  function d3_ease_cubicInOut(t) {\n    if (t <= 0) return 0;\n    if (t >= 1) return 1;\n    var t2 = t * t, t3 = t2 * t;\n    return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n  }\n  function d3_ease_poly(e) {\n    return function(t) {\n      return Math.pow(t, e);\n    };\n  }\n  function d3_ease_sin(t) {\n    return 1 - Math.cos(t * halfπ);\n  }\n  function d3_ease_exp(t) {\n    return Math.pow(2, 10 * (t - 1));\n  }\n  function d3_ease_circle(t) {\n    return 1 - Math.sqrt(1 - t * t);\n  }\n  function d3_ease_elastic(a, p) {\n    var s;\n    if (arguments.length < 2) p = .45;\n    if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;\n    return function(t) {\n      return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);\n    };\n  }\n  function d3_ease_back(s) {\n    if (!s) s = 1.70158;\n    return function(t) {\n      return t * t * ((s + 1) * t - s);\n    };\n  }\n  function d3_ease_bounce(t) {\n    return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n  }\n  d3.interpolateHcl = d3_interpolateHcl;\n  function d3_interpolateHcl(a, b) {\n    a = d3.hcl(a);\n    b = d3.hcl(b);\n    var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n    if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n    if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n    return function(t) {\n      return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n    };\n  }\n  d3.interpolateHsl = d3_interpolateHsl;\n  function d3_interpolateHsl(a, b) {\n    a = d3.hsl(a);\n    b = d3.hsl(b);\n    var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n    if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n    if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n    return function(t) {\n      return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n    };\n  }\n  d3.interpolateLab = d3_interpolateLab;\n  function d3_interpolateLab(a, b) {\n    a = d3.lab(a);\n    b = d3.lab(b);\n    var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n    return function(t) {\n      return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n    };\n  }\n  d3.interpolateRound = d3_interpolateRound;\n  function d3_interpolateRound(a, b) {\n    b -= a;\n    return function(t) {\n      return Math.round(a + b * t);\n    };\n  }\n  d3.transform = function(string) {\n    var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n    return (d3.transform = function(string) {\n      if (string != null) {\n        g.setAttribute(\"transform\", string);\n        var t = g.transform.baseVal.consolidate();\n      }\n      return new d3_transform(t ? t.matrix : d3_transformIdentity);\n    })(string);\n  };\n  function d3_transform(m) {\n    var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n    if (r0[0] * r1[1] < r1[0] * r0[1]) {\n      r0[0] *= -1;\n      r0[1] *= -1;\n      kx *= -1;\n      kz *= -1;\n    }\n    this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n    this.translate = [ m.e, m.f ];\n    this.scale = [ kx, ky ];\n    this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n  }\n  d3_transform.prototype.toString = function() {\n    return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n  };\n  function d3_transformDot(a, b) {\n    return a[0] * b[0] + a[1] * b[1];\n  }\n  function d3_transformNormalize(a) {\n    var k = Math.sqrt(d3_transformDot(a, a));\n    if (k) {\n      a[0] /= k;\n      a[1] /= k;\n    }\n    return k;\n  }\n  function d3_transformCombine(a, b, k) {\n    a[0] += k * b[0];\n    a[1] += k * b[1];\n    return a;\n  }\n  var d3_transformIdentity = {\n    a: 1,\n    b: 0,\n    c: 0,\n    d: 1,\n    e: 0,\n    f: 0\n  };\n  d3.interpolateTransform = d3_interpolateTransform;\n  function d3_interpolateTransform(a, b) {\n    var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;\n    if (ta[0] != tb[0] || ta[1] != tb[1]) {\n      s.push(\"translate(\", null, \",\", null, \")\");\n      q.push({\n        i: 1,\n        x: d3_interpolateNumber(ta[0], tb[0])\n      }, {\n        i: 3,\n        x: d3_interpolateNumber(ta[1], tb[1])\n      });\n    } else if (tb[0] || tb[1]) {\n      s.push(\"translate(\" + tb + \")\");\n    } else {\n      s.push(\"\");\n    }\n    if (ra != rb) {\n      if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n      q.push({\n        i: s.push(s.pop() + \"rotate(\", null, \")\") - 2,\n        x: d3_interpolateNumber(ra, rb)\n      });\n    } else if (rb) {\n      s.push(s.pop() + \"rotate(\" + rb + \")\");\n    }\n    if (wa != wb) {\n      q.push({\n        i: s.push(s.pop() + \"skewX(\", null, \")\") - 2,\n        x: d3_interpolateNumber(wa, wb)\n      });\n    } else if (wb) {\n      s.push(s.pop() + \"skewX(\" + wb + \")\");\n    }\n    if (ka[0] != kb[0] || ka[1] != kb[1]) {\n      n = s.push(s.pop() + \"scale(\", null, \",\", null, \")\");\n      q.push({\n        i: n - 4,\n        x: d3_interpolateNumber(ka[0], kb[0])\n      }, {\n        i: n - 2,\n        x: d3_interpolateNumber(ka[1], kb[1])\n      });\n    } else if (kb[0] != 1 || kb[1] != 1) {\n      s.push(s.pop() + \"scale(\" + kb + \")\");\n    }\n    n = q.length;\n    return function(t) {\n      var i = -1, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  }\n  function d3_uninterpolateNumber(a, b) {\n    b = (b -= a = +a) || 1 / b;\n    return function(x) {\n      return (x - a) / b;\n    };\n  }\n  function d3_uninterpolateClamp(a, b) {\n    b = (b -= a = +a) || 1 / b;\n    return function(x) {\n      return Math.max(0, Math.min(1, (x - a) / b));\n    };\n  }\n  d3.layout = {};\n  d3.layout.bundle = function() {\n    return function(links) {\n      var paths = [], i = -1, n = links.length;\n      while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n      return paths;\n    };\n  };\n  function d3_layout_bundlePath(link) {\n    var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n    while (start !== lca) {\n      start = start.parent;\n      points.push(start);\n    }\n    var k = points.length;\n    while (end !== lca) {\n      points.splice(k, 0, end);\n      end = end.parent;\n    }\n    return points;\n  }\n  function d3_layout_bundleAncestors(node) {\n    var ancestors = [], parent = node.parent;\n    while (parent != null) {\n      ancestors.push(node);\n      node = parent;\n      parent = parent.parent;\n    }\n    ancestors.push(node);\n    return ancestors;\n  }\n  function d3_layout_bundleLeastCommonAncestor(a, b) {\n    if (a === b) return a;\n    var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n    while (aNode === bNode) {\n      sharedNode = aNode;\n      aNode = aNodes.pop();\n      bNode = bNodes.pop();\n    }\n    return sharedNode;\n  }\n  d3.layout.chord = function() {\n    var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n    function relayout() {\n      var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n      chords = [];\n      groups = [];\n      k = 0, i = -1;\n      while (++i < n) {\n        x = 0, j = -1;\n        while (++j < n) {\n          x += matrix[i][j];\n        }\n        groupSums.push(x);\n        subgroupIndex.push(d3.range(n));\n        k += x;\n      }\n      if (sortGroups) {\n        groupIndex.sort(function(a, b) {\n          return sortGroups(groupSums[a], groupSums[b]);\n        });\n      }\n      if (sortSubgroups) {\n        subgroupIndex.forEach(function(d, i) {\n          d.sort(function(a, b) {\n            return sortSubgroups(matrix[i][a], matrix[i][b]);\n          });\n        });\n      }\n      k = (τ - padding * n) / k;\n      x = 0, i = -1;\n      while (++i < n) {\n        x0 = x, j = -1;\n        while (++j < n) {\n          var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n          subgroups[di + \"-\" + dj] = {\n            index: di,\n            subindex: dj,\n            startAngle: a0,\n            endAngle: a1,\n            value: v\n          };\n        }\n        groups[di] = {\n          index: di,\n          startAngle: x0,\n          endAngle: x,\n          value: (x - x0) / k\n        };\n        x += padding;\n      }\n      i = -1;\n      while (++i < n) {\n        j = i - 1;\n        while (++j < n) {\n          var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n          if (source.value || target.value) {\n            chords.push(source.value < target.value ? {\n              source: target,\n              target: source\n            } : {\n              source: source,\n              target: target\n            });\n          }\n        }\n      }\n      if (sortChords) resort();\n    }\n    function resort() {\n      chords.sort(function(a, b) {\n        return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n      });\n    }\n    chord.matrix = function(x) {\n      if (!arguments.length) return matrix;\n      n = (matrix = x) && matrix.length;\n      chords = groups = null;\n      return chord;\n    };\n    chord.padding = function(x) {\n      if (!arguments.length) return padding;\n      padding = x;\n      chords = groups = null;\n      return chord;\n    };\n    chord.sortGroups = function(x) {\n      if (!arguments.length) return sortGroups;\n      sortGroups = x;\n      chords = groups = null;\n      return chord;\n    };\n    chord.sortSubgroups = function(x) {\n      if (!arguments.length) return sortSubgroups;\n      sortSubgroups = x;\n      chords = null;\n      return chord;\n    };\n    chord.sortChords = function(x) {\n      if (!arguments.length) return sortChords;\n      sortChords = x;\n      if (chords) resort();\n      return chord;\n    };\n    chord.chords = function() {\n      if (!chords) relayout();\n      return chords;\n    };\n    chord.groups = function() {\n      if (!groups) relayout();\n      return groups;\n    };\n    return chord;\n  };\n  d3.layout.force = function() {\n    var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n    function repulse(node) {\n      return function(quad, x1, _, x2) {\n        if (quad.point !== node) {\n          var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n          if (dw * dw / theta2 < dn) {\n            if (dn < chargeDistance2) {\n              var k = quad.charge / dn;\n              node.px -= dx * k;\n              node.py -= dy * k;\n            }\n            return true;\n          }\n          if (quad.point && dn && dn < chargeDistance2) {\n            var k = quad.pointCharge / dn;\n            node.px -= dx * k;\n            node.py -= dy * k;\n          }\n        }\n        return !quad.charge;\n      };\n    }\n    force.tick = function() {\n      if ((alpha *= .99) < .005) {\n        event.end({\n          type: \"end\",\n          alpha: alpha = 0\n        });\n        return true;\n      }\n      var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n      for (i = 0; i < m; ++i) {\n        o = links[i];\n        s = o.source;\n        t = o.target;\n        x = t.x - s.x;\n        y = t.y - s.y;\n        if (l = x * x + y * y) {\n          l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n          x *= l;\n          y *= l;\n          t.x -= x * (k = s.weight / (t.weight + s.weight));\n          t.y -= y * k;\n          s.x += x * (k = 1 - k);\n          s.y += y * k;\n        }\n      }\n      if (k = alpha * gravity) {\n        x = size[0] / 2;\n        y = size[1] / 2;\n        i = -1;\n        if (k) while (++i < n) {\n          o = nodes[i];\n          o.x += (x - o.x) * k;\n          o.y += (y - o.y) * k;\n        }\n      }\n      if (charge) {\n        d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n        i = -1;\n        while (++i < n) {\n          if (!(o = nodes[i]).fixed) {\n            q.visit(repulse(o));\n          }\n        }\n      }\n      i = -1;\n      while (++i < n) {\n        o = nodes[i];\n        if (o.fixed) {\n          o.x = o.px;\n          o.y = o.py;\n        } else {\n          o.x -= (o.px - (o.px = o.x)) * friction;\n          o.y -= (o.py - (o.py = o.y)) * friction;\n        }\n      }\n      event.tick({\n        type: \"tick\",\n        alpha: alpha\n      });\n    };\n    force.nodes = function(x) {\n      if (!arguments.length) return nodes;\n      nodes = x;\n      return force;\n    };\n    force.links = function(x) {\n      if (!arguments.length) return links;\n      links = x;\n      return force;\n    };\n    force.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return force;\n    };\n    force.linkDistance = function(x) {\n      if (!arguments.length) return linkDistance;\n      linkDistance = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.distance = force.linkDistance;\n    force.linkStrength = function(x) {\n      if (!arguments.length) return linkStrength;\n      linkStrength = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.friction = function(x) {\n      if (!arguments.length) return friction;\n      friction = +x;\n      return force;\n    };\n    force.charge = function(x) {\n      if (!arguments.length) return charge;\n      charge = typeof x === \"function\" ? x : +x;\n      return force;\n    };\n    force.chargeDistance = function(x) {\n      if (!arguments.length) return Math.sqrt(chargeDistance2);\n      chargeDistance2 = x * x;\n      return force;\n    };\n    force.gravity = function(x) {\n      if (!arguments.length) return gravity;\n      gravity = +x;\n      return force;\n    };\n    force.theta = function(x) {\n      if (!arguments.length) return Math.sqrt(theta2);\n      theta2 = x * x;\n      return force;\n    };\n    force.alpha = function(x) {\n      if (!arguments.length) return alpha;\n      x = +x;\n      if (alpha) {\n        if (x > 0) alpha = x; else alpha = 0;\n      } else if (x > 0) {\n        event.start({\n          type: \"start\",\n          alpha: alpha = x\n        });\n        d3.timer(force.tick);\n      }\n      return force;\n    };\n    force.start = function() {\n      var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n      for (i = 0; i < n; ++i) {\n        (o = nodes[i]).index = i;\n        o.weight = 0;\n      }\n      for (i = 0; i < m; ++i) {\n        o = links[i];\n        if (typeof o.source == \"number\") o.source = nodes[o.source];\n        if (typeof o.target == \"number\") o.target = nodes[o.target];\n        ++o.source.weight;\n        ++o.target.weight;\n      }\n      for (i = 0; i < n; ++i) {\n        o = nodes[i];\n        if (isNaN(o.x)) o.x = position(\"x\", w);\n        if (isNaN(o.y)) o.y = position(\"y\", h);\n        if (isNaN(o.px)) o.px = o.x;\n        if (isNaN(o.py)) o.py = o.y;\n      }\n      distances = [];\n      if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n      strengths = [];\n      if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n      charges = [];\n      if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n      function position(dimension, size) {\n        if (!neighbors) {\n          neighbors = new Array(n);\n          for (j = 0; j < n; ++j) {\n            neighbors[j] = [];\n          }\n          for (j = 0; j < m; ++j) {\n            var o = links[j];\n            neighbors[o.source.index].push(o.target);\n            neighbors[o.target.index].push(o.source);\n          }\n        }\n        var candidates = neighbors[i], j = -1, l = candidates.length, x;\n        while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;\n        return Math.random() * size;\n      }\n      return force.resume();\n    };\n    force.resume = function() {\n      return force.alpha(.1);\n    };\n    force.stop = function() {\n      return force.alpha(0);\n    };\n    force.drag = function() {\n      if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n      if (!arguments.length) return drag;\n      this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n    };\n    function dragmove(d) {\n      d.px = d3.event.x, d.py = d3.event.y;\n      force.resume();\n    }\n    return d3.rebind(force, event, \"on\");\n  };\n  function d3_layout_forceDragstart(d) {\n    d.fixed |= 2;\n  }\n  function d3_layout_forceDragend(d) {\n    d.fixed &= ~6;\n  }\n  function d3_layout_forceMouseover(d) {\n    d.fixed |= 4;\n    d.px = d.x, d.py = d.y;\n  }\n  function d3_layout_forceMouseout(d) {\n    d.fixed &= ~4;\n  }\n  function d3_layout_forceAccumulate(quad, alpha, charges) {\n    var cx = 0, cy = 0;\n    quad.charge = 0;\n    if (!quad.leaf) {\n      var nodes = quad.nodes, n = nodes.length, i = -1, c;\n      while (++i < n) {\n        c = nodes[i];\n        if (c == null) continue;\n        d3_layout_forceAccumulate(c, alpha, charges);\n        quad.charge += c.charge;\n        cx += c.charge * c.cx;\n        cy += c.charge * c.cy;\n      }\n    }\n    if (quad.point) {\n      if (!quad.leaf) {\n        quad.point.x += Math.random() - .5;\n        quad.point.y += Math.random() - .5;\n      }\n      var k = alpha * charges[quad.point.index];\n      quad.charge += quad.pointCharge = k;\n      cx += k * quad.point.x;\n      cy += k * quad.point.y;\n    }\n    quad.cx = cx / quad.charge;\n    quad.cy = cy / quad.charge;\n  }\n  var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n  d3.layout.hierarchy = function() {\n    var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n    function hierarchy(root) {\n      var stack = [ root ], nodes = [], node;\n      root.depth = 0;\n      while ((node = stack.pop()) != null) {\n        nodes.push(node);\n        if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n          var n, childs, child;\n          while (--n >= 0) {\n            stack.push(child = childs[n]);\n            child.parent = node;\n            child.depth = node.depth + 1;\n          }\n          if (value) node.value = 0;\n          node.children = childs;\n        } else {\n          if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n          delete node.children;\n        }\n      }\n      d3_layout_hierarchyVisitAfter(root, function(node) {\n        var childs, parent;\n        if (sort && (childs = node.children)) childs.sort(sort);\n        if (value && (parent = node.parent)) parent.value += node.value;\n      });\n      return nodes;\n    }\n    hierarchy.sort = function(x) {\n      if (!arguments.length) return sort;\n      sort = x;\n      return hierarchy;\n    };\n    hierarchy.children = function(x) {\n      if (!arguments.length) return children;\n      children = x;\n      return hierarchy;\n    };\n    hierarchy.value = function(x) {\n      if (!arguments.length) return value;\n      value = x;\n      return hierarchy;\n    };\n    hierarchy.revalue = function(root) {\n      if (value) {\n        d3_layout_hierarchyVisitBefore(root, function(node) {\n          if (node.children) node.value = 0;\n        });\n        d3_layout_hierarchyVisitAfter(root, function(node) {\n          var parent;\n          if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n          if (parent = node.parent) parent.value += node.value;\n        });\n      }\n      return root;\n    };\n    return hierarchy;\n  };\n  function d3_layout_hierarchyRebind(object, hierarchy) {\n    d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n    object.nodes = object;\n    object.links = d3_layout_hierarchyLinks;\n    return object;\n  }\n  function d3_layout_hierarchyVisitBefore(node, callback) {\n    var nodes = [ node ];\n    while ((node = nodes.pop()) != null) {\n      callback(node);\n      if ((children = node.children) && (n = children.length)) {\n        var n, children;\n        while (--n >= 0) nodes.push(children[n]);\n      }\n    }\n  }\n  function d3_layout_hierarchyVisitAfter(node, callback) {\n    var nodes = [ node ], nodes2 = [];\n    while ((node = nodes.pop()) != null) {\n      nodes2.push(node);\n      if ((children = node.children) && (n = children.length)) {\n        var i = -1, n, children;\n        while (++i < n) nodes.push(children[i]);\n      }\n    }\n    while ((node = nodes2.pop()) != null) {\n      callback(node);\n    }\n  }\n  function d3_layout_hierarchyChildren(d) {\n    return d.children;\n  }\n  function d3_layout_hierarchyValue(d) {\n    return d.value;\n  }\n  function d3_layout_hierarchySort(a, b) {\n    return b.value - a.value;\n  }\n  function d3_layout_hierarchyLinks(nodes) {\n    return d3.merge(nodes.map(function(parent) {\n      return (parent.children || []).map(function(child) {\n        return {\n          source: parent,\n          target: child\n        };\n      });\n    }));\n  }\n  d3.layout.partition = function() {\n    var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n    function position(node, x, dx, dy) {\n      var children = node.children;\n      node.x = x;\n      node.y = node.depth * dy;\n      node.dx = dx;\n      node.dy = dy;\n      if (children && (n = children.length)) {\n        var i = -1, n, c, d;\n        dx = node.value ? dx / node.value : 0;\n        while (++i < n) {\n          position(c = children[i], x, d = c.value * dx, dy);\n          x += d;\n        }\n      }\n    }\n    function depth(node) {\n      var children = node.children, d = 0;\n      if (children && (n = children.length)) {\n        var i = -1, n;\n        while (++i < n) d = Math.max(d, depth(children[i]));\n      }\n      return 1 + d;\n    }\n    function partition(d, i) {\n      var nodes = hierarchy.call(this, d, i);\n      position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n      return nodes;\n    }\n    partition.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return partition;\n    };\n    return d3_layout_hierarchyRebind(partition, hierarchy);\n  };\n  d3.layout.pie = function() {\n    var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;\n    function pie(data) {\n      var n = data.length, values = data.map(function(d, i) {\n        return +value.call(pie, d, i);\n      }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), k = (da - n * pa) / d3.sum(values), index = d3.range(n), arcs = [], v;\n      if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n        return values[j] - values[i];\n      } : function(i, j) {\n        return sort(data[i], data[j]);\n      });\n      index.forEach(function(i) {\n        arcs[i] = {\n          data: data[i],\n          value: v = values[i],\n          startAngle: a,\n          endAngle: a += v * k + pa,\n          padAngle: p\n        };\n      });\n      return arcs;\n    }\n    pie.value = function(_) {\n      if (!arguments.length) return value;\n      value = _;\n      return pie;\n    };\n    pie.sort = function(_) {\n      if (!arguments.length) return sort;\n      sort = _;\n      return pie;\n    };\n    pie.startAngle = function(_) {\n      if (!arguments.length) return startAngle;\n      startAngle = _;\n      return pie;\n    };\n    pie.endAngle = function(_) {\n      if (!arguments.length) return endAngle;\n      endAngle = _;\n      return pie;\n    };\n    pie.padAngle = function(_) {\n      if (!arguments.length) return padAngle;\n      padAngle = _;\n      return pie;\n    };\n    return pie;\n  };\n  var d3_layout_pieSortByValue = {};\n  d3.layout.stack = function() {\n    var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n    function stack(data, index) {\n      if (!(n = data.length)) return data;\n      var series = data.map(function(d, i) {\n        return values.call(stack, d, i);\n      });\n      var points = series.map(function(d) {\n        return d.map(function(v, i) {\n          return [ x.call(stack, v, i), y.call(stack, v, i) ];\n        });\n      });\n      var orders = order.call(stack, points, index);\n      series = d3.permute(series, orders);\n      points = d3.permute(points, orders);\n      var offsets = offset.call(stack, points, index);\n      var m = series[0].length, n, i, j, o;\n      for (j = 0; j < m; ++j) {\n        out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n        for (i = 1; i < n; ++i) {\n          out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n        }\n      }\n      return data;\n    }\n    stack.values = function(x) {\n      if (!arguments.length) return values;\n      values = x;\n      return stack;\n    };\n    stack.order = function(x) {\n      if (!arguments.length) return order;\n      order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n      return stack;\n    };\n    stack.offset = function(x) {\n      if (!arguments.length) return offset;\n      offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n      return stack;\n    };\n    stack.x = function(z) {\n      if (!arguments.length) return x;\n      x = z;\n      return stack;\n    };\n    stack.y = function(z) {\n      if (!arguments.length) return y;\n      y = z;\n      return stack;\n    };\n    stack.out = function(z) {\n      if (!arguments.length) return out;\n      out = z;\n      return stack;\n    };\n    return stack;\n  };\n  function d3_layout_stackX(d) {\n    return d.x;\n  }\n  function d3_layout_stackY(d) {\n    return d.y;\n  }\n  function d3_layout_stackOut(d, y0, y) {\n    d.y0 = y0;\n    d.y = y;\n  }\n  var d3_layout_stackOrders = d3.map({\n    \"inside-out\": function(data) {\n      var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n        return max[a] - max[b];\n      }), top = 0, bottom = 0, tops = [], bottoms = [];\n      for (i = 0; i < n; ++i) {\n        j = index[i];\n        if (top < bottom) {\n          top += sums[j];\n          tops.push(j);\n        } else {\n          bottom += sums[j];\n          bottoms.push(j);\n        }\n      }\n      return bottoms.reverse().concat(tops);\n    },\n    reverse: function(data) {\n      return d3.range(data.length).reverse();\n    },\n    \"default\": d3_layout_stackOrderDefault\n  });\n  var d3_layout_stackOffsets = d3.map({\n    silhouette: function(data) {\n      var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n      for (j = 0; j < m; ++j) {\n        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n        if (o > max) max = o;\n        sums.push(o);\n      }\n      for (j = 0; j < m; ++j) {\n        y0[j] = (max - sums[j]) / 2;\n      }\n      return y0;\n    },\n    wiggle: function(data) {\n      var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n      y0[0] = o = o0 = 0;\n      for (j = 1; j < m; ++j) {\n        for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n        for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n          for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n            s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n          }\n          s2 += s3 * data[i][j][1];\n        }\n        y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n        if (o < o0) o0 = o;\n      }\n      for (j = 0; j < m; ++j) y0[j] -= o0;\n      return y0;\n    },\n    expand: function(data) {\n      var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n      for (j = 0; j < m; ++j) {\n        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n        if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n      }\n      for (j = 0; j < m; ++j) y0[j] = 0;\n      return y0;\n    },\n    zero: d3_layout_stackOffsetZero\n  });\n  function d3_layout_stackOrderDefault(data) {\n    return d3.range(data.length);\n  }\n  function d3_layout_stackOffsetZero(data) {\n    var j = -1, m = data[0].length, y0 = [];\n    while (++j < m) y0[j] = 0;\n    return y0;\n  }\n  function d3_layout_stackMaxIndex(array) {\n    var i = 1, j = 0, v = array[0][1], k, n = array.length;\n    for (;i < n; ++i) {\n      if ((k = array[i][1]) > v) {\n        j = i;\n        v = k;\n      }\n    }\n    return j;\n  }\n  function d3_layout_stackReduceSum(d) {\n    return d.reduce(d3_layout_stackSum, 0);\n  }\n  function d3_layout_stackSum(p, d) {\n    return p + d[1];\n  }\n  d3.layout.histogram = function() {\n    var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n    function histogram(data, i) {\n      var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n      while (++i < m) {\n        bin = bins[i] = [];\n        bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n        bin.y = 0;\n      }\n      if (m > 0) {\n        i = -1;\n        while (++i < n) {\n          x = values[i];\n          if (x >= range[0] && x <= range[1]) {\n            bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n            bin.y += k;\n            bin.push(data[i]);\n          }\n        }\n      }\n      return bins;\n    }\n    histogram.value = function(x) {\n      if (!arguments.length) return valuer;\n      valuer = x;\n      return histogram;\n    };\n    histogram.range = function(x) {\n      if (!arguments.length) return ranger;\n      ranger = d3_functor(x);\n      return histogram;\n    };\n    histogram.bins = function(x) {\n      if (!arguments.length) return binner;\n      binner = typeof x === \"number\" ? function(range) {\n        return d3_layout_histogramBinFixed(range, x);\n      } : d3_functor(x);\n      return histogram;\n    };\n    histogram.frequency = function(x) {\n      if (!arguments.length) return frequency;\n      frequency = !!x;\n      return histogram;\n    };\n    return histogram;\n  };\n  function d3_layout_histogramBinSturges(range, values) {\n    return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n  }\n  function d3_layout_histogramBinFixed(range, n) {\n    var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n    while (++x <= n) f[x] = m * x + b;\n    return f;\n  }\n  function d3_layout_histogramRange(values) {\n    return [ d3.min(values), d3.max(values) ];\n  }\n  d3.layout.pack = function() {\n    var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n    function pack(d, i) {\n      var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n        return radius;\n      };\n      root.x = root.y = 0;\n      d3_layout_hierarchyVisitAfter(root, function(d) {\n        d.r = +r(d.value);\n      });\n      d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n      if (padding) {\n        var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n        d3_layout_hierarchyVisitAfter(root, function(d) {\n          d.r += dr;\n        });\n        d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n        d3_layout_hierarchyVisitAfter(root, function(d) {\n          d.r -= dr;\n        });\n      }\n      d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n      return nodes;\n    }\n    pack.size = function(_) {\n      if (!arguments.length) return size;\n      size = _;\n      return pack;\n    };\n    pack.radius = function(_) {\n      if (!arguments.length) return radius;\n      radius = _ == null || typeof _ === \"function\" ? _ : +_;\n      return pack;\n    };\n    pack.padding = function(_) {\n      if (!arguments.length) return padding;\n      padding = +_;\n      return pack;\n    };\n    return d3_layout_hierarchyRebind(pack, hierarchy);\n  };\n  function d3_layout_packSort(a, b) {\n    return a.value - b.value;\n  }\n  function d3_layout_packInsert(a, b) {\n    var c = a._pack_next;\n    a._pack_next = b;\n    b._pack_prev = a;\n    b._pack_next = c;\n    c._pack_prev = b;\n  }\n  function d3_layout_packSplice(a, b) {\n    a._pack_next = b;\n    b._pack_prev = a;\n  }\n  function d3_layout_packIntersects(a, b) {\n    var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n    return .999 * dr * dr > dx * dx + dy * dy;\n  }\n  function d3_layout_packSiblings(node) {\n    if (!(nodes = node.children) || !(n = nodes.length)) return;\n    var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n    function bound(node) {\n      xMin = Math.min(node.x - node.r, xMin);\n      xMax = Math.max(node.x + node.r, xMax);\n      yMin = Math.min(node.y - node.r, yMin);\n      yMax = Math.max(node.y + node.r, yMax);\n    }\n    nodes.forEach(d3_layout_packLink);\n    a = nodes[0];\n    a.x = -a.r;\n    a.y = 0;\n    bound(a);\n    if (n > 1) {\n      b = nodes[1];\n      b.x = b.r;\n      b.y = 0;\n      bound(b);\n      if (n > 2) {\n        c = nodes[2];\n        d3_layout_packPlace(a, b, c);\n        bound(c);\n        d3_layout_packInsert(a, c);\n        a._pack_prev = c;\n        d3_layout_packInsert(c, b);\n        b = a._pack_next;\n        for (i = 3; i < n; i++) {\n          d3_layout_packPlace(a, b, c = nodes[i]);\n          var isect = 0, s1 = 1, s2 = 1;\n          for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n            if (d3_layout_packIntersects(j, c)) {\n              isect = 1;\n              break;\n            }\n          }\n          if (isect == 1) {\n            for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n              if (d3_layout_packIntersects(k, c)) {\n                break;\n              }\n            }\n          }\n          if (isect) {\n            if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n            i--;\n          } else {\n            d3_layout_packInsert(a, c);\n            b = c;\n            bound(c);\n          }\n        }\n      }\n    }\n    var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n    for (i = 0; i < n; i++) {\n      c = nodes[i];\n      c.x -= cx;\n      c.y -= cy;\n      cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n    }\n    node.r = cr;\n    nodes.forEach(d3_layout_packUnlink);\n  }\n  function d3_layout_packLink(node) {\n    node._pack_next = node._pack_prev = node;\n  }\n  function d3_layout_packUnlink(node) {\n    delete node._pack_next;\n    delete node._pack_prev;\n  }\n  function d3_layout_packTransform(node, x, y, k) {\n    var children = node.children;\n    node.x = x += k * node.x;\n    node.y = y += k * node.y;\n    node.r *= k;\n    if (children) {\n      var i = -1, n = children.length;\n      while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n    }\n  }\n  function d3_layout_packPlace(a, b, c) {\n    var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n    if (db && (dx || dy)) {\n      var da = b.r + c.r, dc = dx * dx + dy * dy;\n      da *= da;\n      db *= db;\n      var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n      c.x = a.x + x * dx + y * dy;\n      c.y = a.y + x * dy - y * dx;\n    } else {\n      c.x = a.x + db;\n      c.y = a.y;\n    }\n  }\n  d3.layout.tree = function() {\n    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n    function tree(d, i) {\n      var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n      d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n      d3_layout_hierarchyVisitBefore(root1, secondWalk);\n      if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n        var left = root0, right = root0, bottom = root0;\n        d3_layout_hierarchyVisitBefore(root0, function(node) {\n          if (node.x < left.x) left = node;\n          if (node.x > right.x) right = node;\n          if (node.depth > bottom.depth) bottom = node;\n        });\n        var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n        d3_layout_hierarchyVisitBefore(root0, function(node) {\n          node.x = (node.x + tx) * kx;\n          node.y = node.depth * ky;\n        });\n      }\n      return nodes;\n    }\n    function wrapTree(root0) {\n      var root1 = {\n        A: null,\n        children: [ root0 ]\n      }, queue = [ root1 ], node1;\n      while ((node1 = queue.pop()) != null) {\n        for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n          queue.push((children[i] = child = {\n            _: children[i],\n            parent: node1,\n            children: (child = children[i].children) && child.slice() || [],\n            A: null,\n            a: null,\n            z: 0,\n            m: 0,\n            c: 0,\n            s: 0,\n            t: null,\n            i: i\n          }).a = child);\n        }\n      }\n      return root1.children[0];\n    }\n    function firstWalk(v) {\n      var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n      if (children.length) {\n        d3_layout_treeShift(v);\n        var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n        if (w) {\n          v.z = w.z + separation(v._, w._);\n          v.m = v.z - midpoint;\n        } else {\n          v.z = midpoint;\n        }\n      } else if (w) {\n        v.z = w.z + separation(v._, w._);\n      }\n      v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n    }\n    function secondWalk(v) {\n      v._.x = v.z + v.parent.m;\n      v.m += v.parent.m;\n    }\n    function apportion(v, w, ancestor) {\n      if (w) {\n        var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;\n        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n          vom = d3_layout_treeLeft(vom);\n          vop = d3_layout_treeRight(vop);\n          vop.a = v;\n          shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n          if (shift > 0) {\n            d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n            sip += shift;\n            sop += shift;\n          }\n          sim += vim.m;\n          sip += vip.m;\n          som += vom.m;\n          sop += vop.m;\n        }\n        if (vim && !d3_layout_treeRight(vop)) {\n          vop.t = vim;\n          vop.m += sim - sop;\n        }\n        if (vip && !d3_layout_treeLeft(vom)) {\n          vom.t = vip;\n          vom.m += sip - som;\n          ancestor = v;\n        }\n      }\n      return ancestor;\n    }\n    function sizeNode(node) {\n      node.x *= size[0];\n      node.y = node.depth * size[1];\n    }\n    tree.separation = function(x) {\n      if (!arguments.length) return separation;\n      separation = x;\n      return tree;\n    };\n    tree.size = function(x) {\n      if (!arguments.length) return nodeSize ? null : size;\n      nodeSize = (size = x) == null ? sizeNode : null;\n      return tree;\n    };\n    tree.nodeSize = function(x) {\n      if (!arguments.length) return nodeSize ? size : null;\n      nodeSize = (size = x) == null ? null : sizeNode;\n      return tree;\n    };\n    return d3_layout_hierarchyRebind(tree, hierarchy);\n  };\n  function d3_layout_treeSeparation(a, b) {\n    return a.parent == b.parent ? 1 : 2;\n  }\n  function d3_layout_treeLeft(v) {\n    var children = v.children;\n    return children.length ? children[0] : v.t;\n  }\n  function d3_layout_treeRight(v) {\n    var children = v.children, n;\n    return (n = children.length) ? children[n - 1] : v.t;\n  }\n  function d3_layout_treeMove(wm, wp, shift) {\n    var change = shift / (wp.i - wm.i);\n    wp.c -= change;\n    wp.s += shift;\n    wm.c += change;\n    wp.z += shift;\n    wp.m += shift;\n  }\n  function d3_layout_treeShift(v) {\n    var shift = 0, change = 0, children = v.children, i = children.length, w;\n    while (--i >= 0) {\n      w = children[i];\n      w.z += shift;\n      w.m += shift;\n      shift += w.s + (change += w.c);\n    }\n  }\n  function d3_layout_treeAncestor(vim, v, ancestor) {\n    return vim.a.parent === v.parent ? vim.a : ancestor;\n  }\n  d3.layout.cluster = function() {\n    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n    function cluster(d, i) {\n      var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n      d3_layout_hierarchyVisitAfter(root, function(node) {\n        var children = node.children;\n        if (children && children.length) {\n          node.x = d3_layout_clusterX(children);\n          node.y = d3_layout_clusterY(children);\n        } else {\n          node.x = previousNode ? x += separation(node, previousNode) : 0;\n          node.y = 0;\n          previousNode = node;\n        }\n      });\n      var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n      d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n        node.x = (node.x - root.x) * size[0];\n        node.y = (root.y - node.y) * size[1];\n      } : function(node) {\n        node.x = (node.x - x0) / (x1 - x0) * size[0];\n        node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n      });\n      return nodes;\n    }\n    cluster.separation = function(x) {\n      if (!arguments.length) return separation;\n      separation = x;\n      return cluster;\n    };\n    cluster.size = function(x) {\n      if (!arguments.length) return nodeSize ? null : size;\n      nodeSize = (size = x) == null;\n      return cluster;\n    };\n    cluster.nodeSize = function(x) {\n      if (!arguments.length) return nodeSize ? size : null;\n      nodeSize = (size = x) != null;\n      return cluster;\n    };\n    return d3_layout_hierarchyRebind(cluster, hierarchy);\n  };\n  function d3_layout_clusterY(children) {\n    return 1 + d3.max(children, function(child) {\n      return child.y;\n    });\n  }\n  function d3_layout_clusterX(children) {\n    return children.reduce(function(x, child) {\n      return x + child.x;\n    }, 0) / children.length;\n  }\n  function d3_layout_clusterLeft(node) {\n    var children = node.children;\n    return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n  }\n  function d3_layout_clusterRight(node) {\n    var children = node.children, n;\n    return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n  }\n  d3.layout.treemap = function() {\n    var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n    function scale(children, k) {\n      var i = -1, n = children.length, child, area;\n      while (++i < n) {\n        area = (child = children[i]).value * (k < 0 ? 0 : k);\n        child.area = isNaN(area) || area <= 0 ? 0 : area;\n      }\n    }\n    function squarify(node) {\n      var children = node.children;\n      if (children && children.length) {\n        var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n        scale(remaining, rect.dx * rect.dy / node.value);\n        row.area = 0;\n        while ((n = remaining.length) > 0) {\n          row.push(child = remaining[n - 1]);\n          row.area += child.area;\n          if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n            remaining.pop();\n            best = score;\n          } else {\n            row.area -= row.pop().area;\n            position(row, u, rect, false);\n            u = Math.min(rect.dx, rect.dy);\n            row.length = row.area = 0;\n            best = Infinity;\n          }\n        }\n        if (row.length) {\n          position(row, u, rect, true);\n          row.length = row.area = 0;\n        }\n        children.forEach(squarify);\n      }\n    }\n    function stickify(node) {\n      var children = node.children;\n      if (children && children.length) {\n        var rect = pad(node), remaining = children.slice(), child, row = [];\n        scale(remaining, rect.dx * rect.dy / node.value);\n        row.area = 0;\n        while (child = remaining.pop()) {\n          row.push(child);\n          row.area += child.area;\n          if (child.z != null) {\n            position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n            row.length = row.area = 0;\n          }\n        }\n        children.forEach(stickify);\n      }\n    }\n    function worst(row, u) {\n      var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n      while (++i < n) {\n        if (!(r = row[i].area)) continue;\n        if (r < rmin) rmin = r;\n        if (r > rmax) rmax = r;\n      }\n      s *= s;\n      u *= u;\n      return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n    }\n    function position(row, u, rect, flush) {\n      var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n      if (u == rect.dx) {\n        if (flush || v > rect.dy) v = rect.dy;\n        while (++i < n) {\n          o = row[i];\n          o.x = x;\n          o.y = y;\n          o.dy = v;\n          x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n        }\n        o.z = true;\n        o.dx += rect.x + rect.dx - x;\n        rect.y += v;\n        rect.dy -= v;\n      } else {\n        if (flush || v > rect.dx) v = rect.dx;\n        while (++i < n) {\n          o = row[i];\n          o.x = x;\n          o.y = y;\n          o.dx = v;\n          y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n        }\n        o.z = false;\n        o.dy += rect.y + rect.dy - y;\n        rect.x += v;\n        rect.dx -= v;\n      }\n    }\n    function treemap(d) {\n      var nodes = stickies || hierarchy(d), root = nodes[0];\n      root.x = 0;\n      root.y = 0;\n      root.dx = size[0];\n      root.dy = size[1];\n      if (stickies) hierarchy.revalue(root);\n      scale([ root ], root.dx * root.dy / root.value);\n      (stickies ? stickify : squarify)(root);\n      if (sticky) stickies = nodes;\n      return nodes;\n    }\n    treemap.size = function(x) {\n      if (!arguments.length) return size;\n      size = x;\n      return treemap;\n    };\n    treemap.padding = function(x) {\n      if (!arguments.length) return padding;\n      function padFunction(node) {\n        var p = x.call(treemap, node, node.depth);\n        return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n      }\n      function padConstant(node) {\n        return d3_layout_treemapPad(node, x);\n      }\n      var type;\n      pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n      padConstant) : padConstant;\n      return treemap;\n    };\n    treemap.round = function(x) {\n      if (!arguments.length) return round != Number;\n      round = x ? Math.round : Number;\n      return treemap;\n    };\n    treemap.sticky = function(x) {\n      if (!arguments.length) return sticky;\n      sticky = x;\n      stickies = null;\n      return treemap;\n    };\n    treemap.ratio = function(x) {\n      if (!arguments.length) return ratio;\n      ratio = x;\n      return treemap;\n    };\n    treemap.mode = function(x) {\n      if (!arguments.length) return mode;\n      mode = x + \"\";\n      return treemap;\n    };\n    return d3_layout_hierarchyRebind(treemap, hierarchy);\n  };\n  function d3_layout_treemapPadNull(node) {\n    return {\n      x: node.x,\n      y: node.y,\n      dx: node.dx,\n      dy: node.dy\n    };\n  }\n  function d3_layout_treemapPad(node, padding) {\n    var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n    if (dx < 0) {\n      x += dx / 2;\n      dx = 0;\n    }\n    if (dy < 0) {\n      y += dy / 2;\n      dy = 0;\n    }\n    return {\n      x: x,\n      y: y,\n      dx: dx,\n      dy: dy\n    };\n  }\n  d3.random = {\n    normal: function(µ, σ) {\n      var n = arguments.length;\n      if (n < 2) σ = 1;\n      if (n < 1) µ = 0;\n      return function() {\n        var x, y, r;\n        do {\n          x = Math.random() * 2 - 1;\n          y = Math.random() * 2 - 1;\n          r = x * x + y * y;\n        } while (!r || r > 1);\n        return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n      };\n    },\n    logNormal: function() {\n      var random = d3.random.normal.apply(d3, arguments);\n      return function() {\n        return Math.exp(random());\n      };\n    },\n    bates: function(m) {\n      var random = d3.random.irwinHall(m);\n      return function() {\n        return random() / m;\n      };\n    },\n    irwinHall: function(m) {\n      return function() {\n        for (var s = 0, j = 0; j < m; j++) s += Math.random();\n        return s;\n      };\n    }\n  };\n  d3.scale = {};\n  function d3_scaleExtent(domain) {\n    var start = domain[0], stop = domain[domain.length - 1];\n    return start < stop ? [ start, stop ] : [ stop, start ];\n  }\n  function d3_scaleRange(scale) {\n    return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n  }\n  function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n    var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n    return function(x) {\n      return i(u(x));\n    };\n  }\n  function d3_scale_nice(domain, nice) {\n    var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n    if (x1 < x0) {\n      dx = i0, i0 = i1, i1 = dx;\n      dx = x0, x0 = x1, x1 = dx;\n    }\n    domain[i0] = nice.floor(x0);\n    domain[i1] = nice.ceil(x1);\n    return domain;\n  }\n  function d3_scale_niceStep(step) {\n    return step ? {\n      floor: function(x) {\n        return Math.floor(x / step) * step;\n      },\n      ceil: function(x) {\n        return Math.ceil(x / step) * step;\n      }\n    } : d3_scale_niceIdentity;\n  }\n  var d3_scale_niceIdentity = {\n    floor: d3_identity,\n    ceil: d3_identity\n  };\n  function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n    var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n    if (domain[k] < domain[0]) {\n      domain = domain.slice().reverse();\n      range = range.slice().reverse();\n    }\n    while (++j <= k) {\n      u.push(uninterpolate(domain[j - 1], domain[j]));\n      i.push(interpolate(range[j - 1], range[j]));\n    }\n    return function(x) {\n      var j = d3.bisect(domain, x, 1, k) - 1;\n      return i[j](u[j](x));\n    };\n  }\n  d3.scale.linear = function() {\n    return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n  };\n  function d3_scale_linear(domain, range, interpolate, clamp) {\n    var output, input;\n    function rescale() {\n      var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n      output = linear(domain, range, uninterpolate, interpolate);\n      input = linear(range, domain, uninterpolate, d3_interpolate);\n      return scale;\n    }\n    function scale(x) {\n      return output(x);\n    }\n    scale.invert = function(y) {\n      return input(y);\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(Number);\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.rangeRound = function(x) {\n      return scale.range(x).interpolate(d3_interpolateRound);\n    };\n    scale.clamp = function(x) {\n      if (!arguments.length) return clamp;\n      clamp = x;\n      return rescale();\n    };\n    scale.interpolate = function(x) {\n      if (!arguments.length) return interpolate;\n      interpolate = x;\n      return rescale();\n    };\n    scale.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    scale.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    scale.nice = function(m) {\n      d3_scale_linearNice(domain, m);\n      return rescale();\n    };\n    scale.copy = function() {\n      return d3_scale_linear(domain, range, interpolate, clamp);\n    };\n    return rescale();\n  }\n  function d3_scale_linearRebind(scale, linear) {\n    return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n  }\n  function d3_scale_linearNice(domain, m) {\n    return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n  }\n  function d3_scale_linearTickRange(domain, m) {\n    if (m == null) m = 10;\n    var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n    if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n    extent[0] = Math.ceil(extent[0] / step) * step;\n    extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n    extent[2] = step;\n    return extent;\n  }\n  function d3_scale_linearTicks(domain, m) {\n    return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n  }\n  function d3_scale_linearTickFormat(domain, m, format) {\n    var range = d3_scale_linearTickRange(domain, m);\n    if (format) {\n      var match = d3_format_re.exec(format);\n      match.shift();\n      if (match[8] === \"s\") {\n        var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));\n        if (!match[7]) match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));\n        match[8] = \"f\";\n        format = d3.format(match.join(\"\"));\n        return function(d) {\n          return format(prefix.scale(d)) + prefix.symbol;\n        };\n      }\n      if (!match[7]) match[7] = \".\" + d3_scale_linearFormatPrecision(match[8], range);\n      format = match.join(\"\");\n    } else {\n      format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";\n    }\n    return d3.format(format);\n  }\n  var d3_scale_linearFormatSignificant = {\n    s: 1,\n    g: 1,\n    p: 1,\n    r: 1,\n    e: 1\n  };\n  function d3_scale_linearPrecision(value) {\n    return -Math.floor(Math.log(value) / Math.LN10 + .01);\n  }\n  function d3_scale_linearFormatPrecision(type, range) {\n    var p = d3_scale_linearPrecision(range[2]);\n    return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n  }\n  d3.scale.log = function() {\n    return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n  };\n  function d3_scale_log(linear, base, positive, domain) {\n    function log(x) {\n      return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n    }\n    function pow(x) {\n      return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n    }\n    function scale(x) {\n      return linear(log(x));\n    }\n    scale.invert = function(x) {\n      return pow(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      positive = x[0] >= 0;\n      linear.domain((domain = x.map(Number)).map(log));\n      return scale;\n    };\n    scale.base = function(_) {\n      if (!arguments.length) return base;\n      base = +_;\n      linear.domain(domain.map(log));\n      return scale;\n    };\n    scale.nice = function() {\n      var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n      linear.domain(niced);\n      domain = niced.map(pow);\n      return scale;\n    };\n    scale.ticks = function() {\n      var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n      if (isFinite(j - i)) {\n        if (positive) {\n          for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n          ticks.push(pow(i));\n        } else {\n          ticks.push(pow(i));\n          for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n        }\n        for (i = 0; ticks[i] < u; i++) {}\n        for (j = ticks.length; ticks[j - 1] > v; j--) {}\n        ticks = ticks.slice(i, j);\n      }\n      return ticks;\n    };\n    scale.tickFormat = function(n, format) {\n      if (!arguments.length) return d3_scale_logFormat;\n      if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== \"function\") format = d3.format(format);\n      var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12, \n      Math.floor), e;\n      return function(d) {\n        return d / pow(f(log(d) + e)) <= k ? format(d) : \"\";\n      };\n    };\n    scale.copy = function() {\n      return d3_scale_log(linear.copy(), base, positive, domain);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  var d3_scale_logFormat = d3.format(\".0e\"), d3_scale_logNiceNegative = {\n    floor: function(x) {\n      return -Math.ceil(-x);\n    },\n    ceil: function(x) {\n      return -Math.floor(-x);\n    }\n  };\n  d3.scale.pow = function() {\n    return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n  };\n  function d3_scale_pow(linear, exponent, domain) {\n    var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n    function scale(x) {\n      return linear(powp(x));\n    }\n    scale.invert = function(x) {\n      return powb(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      linear.domain((domain = x.map(Number)).map(powp));\n      return scale;\n    };\n    scale.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    scale.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    scale.nice = function(m) {\n      return scale.domain(d3_scale_linearNice(domain, m));\n    };\n    scale.exponent = function(x) {\n      if (!arguments.length) return exponent;\n      powp = d3_scale_powPow(exponent = x);\n      powb = d3_scale_powPow(1 / exponent);\n      linear.domain(domain.map(powp));\n      return scale;\n    };\n    scale.copy = function() {\n      return d3_scale_pow(linear.copy(), exponent, domain);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  function d3_scale_powPow(e) {\n    return function(x) {\n      return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n    };\n  }\n  d3.scale.sqrt = function() {\n    return d3.scale.pow().exponent(.5);\n  };\n  d3.scale.ordinal = function() {\n    return d3_scale_ordinal([], {\n      t: \"range\",\n      a: [ [] ]\n    });\n  };\n  function d3_scale_ordinal(domain, ranger) {\n    var index, range, rangeBand;\n    function scale(x) {\n      return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n    }\n    function steps(start, step) {\n      return d3.range(domain.length).map(function(i) {\n        return start + step * i;\n      });\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = [];\n      index = new d3_Map();\n      var i = -1, n = x.length, xi;\n      while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n      return scale[ranger.t].apply(scale, ranger.a);\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      rangeBand = 0;\n      ranger = {\n        t: \"range\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangePoints = function(x, padding) {\n      if (arguments.length < 2) padding = 0;\n      var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n      0) : (stop - start) / (domain.length - 1 + padding);\n      range = steps(start + step * padding / 2, step);\n      rangeBand = 0;\n      ranger = {\n        t: \"rangePoints\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeRoundPoints = function(x, padding) {\n      if (arguments.length < 2) padding = 0;\n      var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n      0) : (stop - start) / (domain.length - 1 + padding) | 0;\n      range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n      rangeBand = 0;\n      ranger = {\n        t: \"rangeRoundPoints\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeBands = function(x, padding, outerPadding) {\n      if (arguments.length < 2) padding = 0;\n      if (arguments.length < 3) outerPadding = padding;\n      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n      range = steps(start + step * outerPadding, step);\n      if (reverse) range.reverse();\n      rangeBand = step * (1 - padding);\n      ranger = {\n        t: \"rangeBands\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeRoundBands = function(x, padding, outerPadding) {\n      if (arguments.length < 2) padding = 0;\n      if (arguments.length < 3) outerPadding = padding;\n      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n      range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n      if (reverse) range.reverse();\n      rangeBand = Math.round(step * (1 - padding));\n      ranger = {\n        t: \"rangeRoundBands\",\n        a: arguments\n      };\n      return scale;\n    };\n    scale.rangeBand = function() {\n      return rangeBand;\n    };\n    scale.rangeExtent = function() {\n      return d3_scaleExtent(ranger.a[0]);\n    };\n    scale.copy = function() {\n      return d3_scale_ordinal(domain, ranger);\n    };\n    return scale.domain(domain);\n  }\n  d3.scale.category10 = function() {\n    return d3.scale.ordinal().range(d3_category10);\n  };\n  d3.scale.category20 = function() {\n    return d3.scale.ordinal().range(d3_category20);\n  };\n  d3.scale.category20b = function() {\n    return d3.scale.ordinal().range(d3_category20b);\n  };\n  d3.scale.category20c = function() {\n    return d3.scale.ordinal().range(d3_category20c);\n  };\n  var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n  var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n  var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n  var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n  d3.scale.quantile = function() {\n    return d3_scale_quantile([], []);\n  };\n  function d3_scale_quantile(domain, range) {\n    var thresholds;\n    function rescale() {\n      var k = 0, q = range.length;\n      thresholds = [];\n      while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n      return scale;\n    }\n    function scale(x) {\n      if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.quantiles = function() {\n      return thresholds;\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n    };\n    scale.copy = function() {\n      return d3_scale_quantile(domain, range);\n    };\n    return rescale();\n  }\n  d3.scale.quantize = function() {\n    return d3_scale_quantize(0, 1, [ 0, 1 ]);\n  };\n  function d3_scale_quantize(x0, x1, range) {\n    var kx, i;\n    function scale(x) {\n      return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n    }\n    function rescale() {\n      kx = range.length / (x1 - x0);\n      i = range.length - 1;\n      return scale;\n    }\n    scale.domain = function(x) {\n      if (!arguments.length) return [ x0, x1 ];\n      x0 = +x[0];\n      x1 = +x[x.length - 1];\n      return rescale();\n    };\n    scale.range = function(x) {\n      if (!arguments.length) return range;\n      range = x;\n      return rescale();\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      y = y < 0 ? NaN : y / kx + x0;\n      return [ y, y + 1 / kx ];\n    };\n    scale.copy = function() {\n      return d3_scale_quantize(x0, x1, range);\n    };\n    return rescale();\n  }\n  d3.scale.threshold = function() {\n    return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n  };\n  function d3_scale_threshold(domain, range) {\n    function scale(x) {\n      if (x <= x) return range[d3.bisect(domain, x)];\n    }\n    scale.domain = function(_) {\n      if (!arguments.length) return domain;\n      domain = _;\n      return scale;\n    };\n    scale.range = function(_) {\n      if (!arguments.length) return range;\n      range = _;\n      return scale;\n    };\n    scale.invertExtent = function(y) {\n      y = range.indexOf(y);\n      return [ domain[y - 1], domain[y] ];\n    };\n    scale.copy = function() {\n      return d3_scale_threshold(domain, range);\n    };\n    return scale;\n  }\n  d3.scale.identity = function() {\n    return d3_scale_identity([ 0, 1 ]);\n  };\n  function d3_scale_identity(domain) {\n    function identity(x) {\n      return +x;\n    }\n    identity.invert = identity;\n    identity.domain = identity.range = function(x) {\n      if (!arguments.length) return domain;\n      domain = x.map(identity);\n      return identity;\n    };\n    identity.ticks = function(m) {\n      return d3_scale_linearTicks(domain, m);\n    };\n    identity.tickFormat = function(m, format) {\n      return d3_scale_linearTickFormat(domain, m, format);\n    };\n    identity.copy = function() {\n      return d3_scale_identity(domain);\n    };\n    return identity;\n  }\n  d3.svg = {};\n  function d3_zero() {\n    return 0;\n  }\n  d3.svg.arc = function() {\n    var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n    function arc() {\n      var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n      if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n      if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n      var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n      if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n        rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n        if (!cw) p1 *= -1;\n        if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n        if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n      }\n      if (r1) {\n        x0 = r1 * Math.cos(a0 + p1);\n        y0 = r1 * Math.sin(a0 + p1);\n        x1 = r1 * Math.cos(a1 - p1);\n        y1 = r1 * Math.sin(a1 - p1);\n        var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;\n        if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n          var h1 = (a0 + a1) / 2;\n          x0 = r1 * Math.cos(h1);\n          y0 = r1 * Math.sin(h1);\n          x1 = y1 = null;\n        }\n      } else {\n        x0 = y0 = 0;\n      }\n      if (r0) {\n        x2 = r0 * Math.cos(a1 - p0);\n        y2 = r0 * Math.sin(a1 - p0);\n        x3 = r0 * Math.cos(a0 + p0);\n        y3 = r0 * Math.sin(a0 + p0);\n        var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;\n        if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n          var h0 = (a0 + a1) / 2;\n          x2 = r0 * Math.cos(h0);\n          y2 = r0 * Math.sin(h0);\n          x3 = y3 = null;\n        }\n      } else {\n        x2 = y2 = 0;\n      }\n      if ((rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n        cr = r0 < r1 ^ cw ? 0 : 1;\n        var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n        if (x1 != null) {\n          var rc1 = Math.min(rc, (r1 - lc) / (kc + 1)), t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n          if (rc === rc1) {\n            path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n          } else {\n            path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n          }\n        } else {\n          path.push(\"M\", x0, \",\", y0);\n        }\n        if (x3 != null) {\n          var rc0 = Math.min(rc, (r0 - lc) / (kc - 1)), t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n          if (rc === rc0) {\n            path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n          } else {\n            path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n          }\n        } else {\n          path.push(\"L\", x2, \",\", y2);\n        }\n      } else {\n        path.push(\"M\", x0, \",\", y0);\n        if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n        path.push(\"L\", x2, \",\", y2);\n        if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n      }\n      path.push(\"Z\");\n      return path.join(\"\");\n    }\n    function circleSegment(r1, cw) {\n      return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n    }\n    arc.innerRadius = function(v) {\n      if (!arguments.length) return innerRadius;\n      innerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.outerRadius = function(v) {\n      if (!arguments.length) return outerRadius;\n      outerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.cornerRadius = function(v) {\n      if (!arguments.length) return cornerRadius;\n      cornerRadius = d3_functor(v);\n      return arc;\n    };\n    arc.padRadius = function(v) {\n      if (!arguments.length) return padRadius;\n      padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n      return arc;\n    };\n    arc.startAngle = function(v) {\n      if (!arguments.length) return startAngle;\n      startAngle = d3_functor(v);\n      return arc;\n    };\n    arc.endAngle = function(v) {\n      if (!arguments.length) return endAngle;\n      endAngle = d3_functor(v);\n      return arc;\n    };\n    arc.padAngle = function(v) {\n      if (!arguments.length) return padAngle;\n      padAngle = d3_functor(v);\n      return arc;\n    };\n    arc.centroid = function() {\n      var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;\n      return [ Math.cos(a) * r, Math.sin(a) * r ];\n    };\n    return arc;\n  };\n  var d3_svg_arcAuto = \"auto\";\n  function d3_svg_arcInnerRadius(d) {\n    return d.innerRadius;\n  }\n  function d3_svg_arcOuterRadius(d) {\n    return d.outerRadius;\n  }\n  function d3_svg_arcStartAngle(d) {\n    return d.startAngle;\n  }\n  function d3_svg_arcEndAngle(d) {\n    return d.endAngle;\n  }\n  function d3_svg_arcPadAngle(d) {\n    return d && d.padAngle;\n  }\n  function d3_svg_arcSweep(x0, y0, x1, y1) {\n    return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n  }\n  function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n    var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(r * r * d2 - D * D), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n    if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n    return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n  }\n  function d3_svg_line(projection) {\n    var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n    function line(data) {\n      var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n      function segment() {\n        segments.push(\"M\", interpolate(projection(points), tension));\n      }\n      while (++i < n) {\n        if (defined.call(this, d = data[i], i)) {\n          points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n        } else if (points.length) {\n          segment();\n          points = [];\n        }\n      }\n      if (points.length) segment();\n      return segments.length ? segments.join(\"\") : null;\n    }\n    line.x = function(_) {\n      if (!arguments.length) return x;\n      x = _;\n      return line;\n    };\n    line.y = function(_) {\n      if (!arguments.length) return y;\n      y = _;\n      return line;\n    };\n    line.defined = function(_) {\n      if (!arguments.length) return defined;\n      defined = _;\n      return line;\n    };\n    line.interpolate = function(_) {\n      if (!arguments.length) return interpolateKey;\n      if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n      return line;\n    };\n    line.tension = function(_) {\n      if (!arguments.length) return tension;\n      tension = _;\n      return line;\n    };\n    return line;\n  }\n  d3.svg.line = function() {\n    return d3_svg_line(d3_identity);\n  };\n  var d3_svg_lineInterpolators = d3.map({\n    linear: d3_svg_lineLinear,\n    \"linear-closed\": d3_svg_lineLinearClosed,\n    step: d3_svg_lineStep,\n    \"step-before\": d3_svg_lineStepBefore,\n    \"step-after\": d3_svg_lineStepAfter,\n    basis: d3_svg_lineBasis,\n    \"basis-open\": d3_svg_lineBasisOpen,\n    \"basis-closed\": d3_svg_lineBasisClosed,\n    bundle: d3_svg_lineBundle,\n    cardinal: d3_svg_lineCardinal,\n    \"cardinal-open\": d3_svg_lineCardinalOpen,\n    \"cardinal-closed\": d3_svg_lineCardinalClosed,\n    monotone: d3_svg_lineMonotone\n  });\n  d3_svg_lineInterpolators.forEach(function(key, value) {\n    value.key = key;\n    value.closed = /-closed$/.test(key);\n  });\n  function d3_svg_lineLinear(points) {\n    return points.join(\"L\");\n  }\n  function d3_svg_lineLinearClosed(points) {\n    return d3_svg_lineLinear(points) + \"Z\";\n  }\n  function d3_svg_lineStep(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n    if (n > 1) path.push(\"H\", p[0]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineStepBefore(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineStepAfter(points) {\n    var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n    while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n    return path.join(\"\");\n  }\n  function d3_svg_lineCardinalOpen(points, tension) {\n    return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n  }\n  function d3_svg_lineCardinalClosed(points, tension) {\n    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n    points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n  }\n  function d3_svg_lineCardinal(points, tension) {\n    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n  }\n  function d3_svg_lineHermite(points, tangents) {\n    if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n      return d3_svg_lineLinear(points);\n    }\n    var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n    if (quad) {\n      path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n      p0 = points[1];\n      pi = 2;\n    }\n    if (tangents.length > 1) {\n      t = tangents[1];\n      p = points[pi];\n      pi++;\n      path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n      for (var i = 2; i < tangents.length; i++, pi++) {\n        p = points[pi];\n        t = tangents[i];\n        path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n      }\n    }\n    if (quad) {\n      var lp = points[pi];\n      path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n    }\n    return path;\n  }\n  function d3_svg_lineCardinalTangents(points, tension) {\n    var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n    while (++i < n) {\n      p0 = p1;\n      p1 = p2;\n      p2 = points[i];\n      tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n    }\n    return tangents;\n  }\n  function d3_svg_lineBasis(points) {\n    if (points.length < 3) return d3_svg_lineLinear(points);\n    var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n    points.push(points[n - 1]);\n    while (++i <= n) {\n      pi = points[i];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    points.pop();\n    path.push(\"L\", pi);\n    return path.join(\"\");\n  }\n  function d3_svg_lineBasisOpen(points) {\n    if (points.length < 4) return d3_svg_lineLinear(points);\n    var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n    while (++i < 3) {\n      pi = points[i];\n      px.push(pi[0]);\n      py.push(pi[1]);\n    }\n    path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n    --i;\n    while (++i < n) {\n      pi = points[i];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    return path.join(\"\");\n  }\n  function d3_svg_lineBasisClosed(points) {\n    var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n    while (++i < 4) {\n      pi = points[i % n];\n      px.push(pi[0]);\n      py.push(pi[1]);\n    }\n    path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n    --i;\n    while (++i < m) {\n      pi = points[i % n];\n      px.shift();\n      px.push(pi[0]);\n      py.shift();\n      py.push(pi[1]);\n      d3_svg_lineBasisBezier(path, px, py);\n    }\n    return path.join(\"\");\n  }\n  function d3_svg_lineBundle(points, tension) {\n    var n = points.length - 1;\n    if (n) {\n      var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n      while (++i <= n) {\n        p = points[i];\n        t = i / n;\n        p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n        p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n      }\n    }\n    return d3_svg_lineBasis(points);\n  }\n  function d3_svg_lineDot4(a, b) {\n    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n  }\n  var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n  function d3_svg_lineBasisBezier(path, x, y) {\n    path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n  }\n  function d3_svg_lineSlope(p0, p1) {\n    return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n  }\n  function d3_svg_lineFiniteDifferences(points) {\n    var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n    while (++i < j) {\n      m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n    }\n    m[i] = d;\n    return m;\n  }\n  function d3_svg_lineMonotoneTangents(points) {\n    var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n    while (++i < j) {\n      d = d3_svg_lineSlope(points[i], points[i + 1]);\n      if (abs(d) < ε) {\n        m[i] = m[i + 1] = 0;\n      } else {\n        a = m[i] / d;\n        b = m[i + 1] / d;\n        s = a * a + b * b;\n        if (s > 9) {\n          s = d * 3 / Math.sqrt(s);\n          m[i] = s * a;\n          m[i + 1] = s * b;\n        }\n      }\n    }\n    i = -1;\n    while (++i <= j) {\n      s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n      tangents.push([ s || 0, m[i] * s || 0 ]);\n    }\n    return tangents;\n  }\n  function d3_svg_lineMonotone(points) {\n    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n  }\n  d3.svg.line.radial = function() {\n    var line = d3_svg_line(d3_svg_lineRadial);\n    line.radius = line.x, delete line.x;\n    line.angle = line.y, delete line.y;\n    return line;\n  };\n  function d3_svg_lineRadial(points) {\n    var point, i = -1, n = points.length, r, a;\n    while (++i < n) {\n      point = points[i];\n      r = point[0];\n      a = point[1] - halfπ;\n      point[0] = r * Math.cos(a);\n      point[1] = r * Math.sin(a);\n    }\n    return points;\n  }\n  function d3_svg_area(projection) {\n    var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n    function area(data) {\n      var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n        return x;\n      } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n        return y;\n      } : d3_functor(y1), x, y;\n      function segment() {\n        segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n      }\n      while (++i < n) {\n        if (defined.call(this, d = data[i], i)) {\n          points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n          points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n        } else if (points0.length) {\n          segment();\n          points0 = [];\n          points1 = [];\n        }\n      }\n      if (points0.length) segment();\n      return segments.length ? segments.join(\"\") : null;\n    }\n    area.x = function(_) {\n      if (!arguments.length) return x1;\n      x0 = x1 = _;\n      return area;\n    };\n    area.x0 = function(_) {\n      if (!arguments.length) return x0;\n      x0 = _;\n      return area;\n    };\n    area.x1 = function(_) {\n      if (!arguments.length) return x1;\n      x1 = _;\n      return area;\n    };\n    area.y = function(_) {\n      if (!arguments.length) return y1;\n      y0 = y1 = _;\n      return area;\n    };\n    area.y0 = function(_) {\n      if (!arguments.length) return y0;\n      y0 = _;\n      return area;\n    };\n    area.y1 = function(_) {\n      if (!arguments.length) return y1;\n      y1 = _;\n      return area;\n    };\n    area.defined = function(_) {\n      if (!arguments.length) return defined;\n      defined = _;\n      return area;\n    };\n    area.interpolate = function(_) {\n      if (!arguments.length) return interpolateKey;\n      if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n      interpolateReverse = interpolate.reverse || interpolate;\n      L = interpolate.closed ? \"M\" : \"L\";\n      return area;\n    };\n    area.tension = function(_) {\n      if (!arguments.length) return tension;\n      tension = _;\n      return area;\n    };\n    return area;\n  }\n  d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n  d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n  d3.svg.area = function() {\n    return d3_svg_area(d3_identity);\n  };\n  d3.svg.area.radial = function() {\n    var area = d3_svg_area(d3_svg_lineRadial);\n    area.radius = area.x, delete area.x;\n    area.innerRadius = area.x0, delete area.x0;\n    area.outerRadius = area.x1, delete area.x1;\n    area.angle = area.y, delete area.y;\n    area.startAngle = area.y0, delete area.y0;\n    area.endAngle = area.y1, delete area.y1;\n    return area;\n  };\n  d3.svg.chord = function() {\n    var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n    function chord(d, i) {\n      var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n      return \"M\" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n    }\n    function subgroup(self, f, d, i) {\n      var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n      return {\n        r: r,\n        a0: a0,\n        a1: a1,\n        p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n        p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n      };\n    }\n    function equals(a, b) {\n      return a.a0 == b.a0 && a.a1 == b.a1;\n    }\n    function arc(r, p, a) {\n      return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n    }\n    function curve(r0, p0, r1, p1) {\n      return \"Q 0,0 \" + p1;\n    }\n    chord.radius = function(v) {\n      if (!arguments.length) return radius;\n      radius = d3_functor(v);\n      return chord;\n    };\n    chord.source = function(v) {\n      if (!arguments.length) return source;\n      source = d3_functor(v);\n      return chord;\n    };\n    chord.target = function(v) {\n      if (!arguments.length) return target;\n      target = d3_functor(v);\n      return chord;\n    };\n    chord.startAngle = function(v) {\n      if (!arguments.length) return startAngle;\n      startAngle = d3_functor(v);\n      return chord;\n    };\n    chord.endAngle = function(v) {\n      if (!arguments.length) return endAngle;\n      endAngle = d3_functor(v);\n      return chord;\n    };\n    return chord;\n  };\n  function d3_svg_chordRadius(d) {\n    return d.radius;\n  }\n  d3.svg.diagonal = function() {\n    var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n    function diagonal(d, i) {\n      var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n        x: p0.x,\n        y: m\n      }, {\n        x: p3.x,\n        y: m\n      }, p3 ];\n      p = p.map(projection);\n      return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n    }\n    diagonal.source = function(x) {\n      if (!arguments.length) return source;\n      source = d3_functor(x);\n      return diagonal;\n    };\n    diagonal.target = function(x) {\n      if (!arguments.length) return target;\n      target = d3_functor(x);\n      return diagonal;\n    };\n    diagonal.projection = function(x) {\n      if (!arguments.length) return projection;\n      projection = x;\n      return diagonal;\n    };\n    return diagonal;\n  };\n  function d3_svg_diagonalProjection(d) {\n    return [ d.x, d.y ];\n  }\n  d3.svg.diagonal.radial = function() {\n    var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n    diagonal.projection = function(x) {\n      return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n    };\n    return diagonal;\n  };\n  function d3_svg_diagonalRadialProjection(projection) {\n    return function() {\n      var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;\n      return [ r * Math.cos(a), r * Math.sin(a) ];\n    };\n  }\n  d3.svg.symbol = function() {\n    var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n    function symbol(d, i) {\n      return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n    }\n    symbol.type = function(x) {\n      if (!arguments.length) return type;\n      type = d3_functor(x);\n      return symbol;\n    };\n    symbol.size = function(x) {\n      if (!arguments.length) return size;\n      size = d3_functor(x);\n      return symbol;\n    };\n    return symbol;\n  };\n  function d3_svg_symbolSize() {\n    return 64;\n  }\n  function d3_svg_symbolType() {\n    return \"circle\";\n  }\n  function d3_svg_symbolCircle(size) {\n    var r = Math.sqrt(size / π);\n    return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n  }\n  var d3_svg_symbols = d3.map({\n    circle: d3_svg_symbolCircle,\n    cross: function(size) {\n      var r = Math.sqrt(size / 5) / 2;\n      return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n    },\n    diamond: function(size) {\n      var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n      return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n    },\n    square: function(size) {\n      var r = Math.sqrt(size) / 2;\n      return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n    },\n    \"triangle-down\": function(size) {\n      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n      return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n    },\n    \"triangle-up\": function(size) {\n      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n      return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n    }\n  });\n  d3.svg.symbolTypes = d3_svg_symbols.keys();\n  var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n  d3_selectionPrototype.transition = function(name) {\n    var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n      time: Date.now(),\n      ease: d3_ease_cubicInOut,\n      delay: 0,\n      duration: 250\n    };\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n        subgroup.push(node);\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_selectionPrototype.interrupt = function(name) {\n    return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));\n  };\n  var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());\n  function d3_selection_interruptNS(ns) {\n    return function() {\n      var lock, active;\n      if ((lock = this[ns]) && (active = lock[lock.active])) {\n        if (--lock.count) delete lock[lock.active]; else delete this[ns];\n        lock.active += .5;\n        active.event && active.event.interrupt.call(this, this.__data__, active.index);\n      }\n    };\n  }\n  function d3_transition(groups, ns, id) {\n    d3_subclass(groups, d3_transitionPrototype);\n    groups.namespace = ns;\n    groups.id = id;\n    return groups;\n  }\n  var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n  d3_transitionPrototype.call = d3_selectionPrototype.call;\n  d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n  d3_transitionPrototype.node = d3_selectionPrototype.node;\n  d3_transitionPrototype.size = d3_selectionPrototype.size;\n  d3.transition = function(selection, name) {\n    return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);\n  };\n  d3.transition.prototype = d3_transitionPrototype;\n  d3_transitionPrototype.select = function(selector) {\n    var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n    selector = d3_selection_selector(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n          if (\"__data__\" in node) subnode.__data__ = node.__data__;\n          d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n          subgroup.push(subnode);\n        } else {\n          subgroup.push(null);\n        }\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_transitionPrototype.selectAll = function(selector) {\n    var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n    selector = d3_selection_selectorAll(selector);\n    for (var j = -1, m = this.length; ++j < m; ) {\n      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n        if (node = group[i]) {\n          transition = node[ns][id];\n          subnodes = selector.call(node, node.__data__, i, j);\n          subgroups.push(subgroup = []);\n          for (var k = -1, o = subnodes.length; ++k < o; ) {\n            if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n            subgroup.push(subnode);\n          }\n        }\n      }\n    }\n    return d3_transition(subgroups, ns, id);\n  };\n  d3_transitionPrototype.filter = function(filter) {\n    var subgroups = [], subgroup, group, node;\n    if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n          subgroup.push(node);\n        }\n      }\n    }\n    return d3_transition(subgroups, this.namespace, this.id);\n  };\n  d3_transitionPrototype.tween = function(name, tween) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n    return d3_selection_each(this, tween == null ? function(node) {\n      node[ns][id].tween.remove(name);\n    } : function(node) {\n      node[ns][id].tween.set(name, tween);\n    });\n  };\n  function d3_transition_tween(groups, name, value, tween) {\n    var id = groups.id, ns = groups.namespace;\n    return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n    } : (value = tween(value), function(node) {\n      node[ns][id].tween.set(name, value);\n    }));\n  }\n  d3_transitionPrototype.attr = function(nameNS, value) {\n    if (arguments.length < 2) {\n      for (value in nameNS) this.attr(value, nameNS[value]);\n      return this;\n    }\n    var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n    function attrNull() {\n      this.removeAttribute(name);\n    }\n    function attrNullNS() {\n      this.removeAttributeNS(name.space, name.local);\n    }\n    function attrTween(b) {\n      return b == null ? attrNull : (b += \"\", function() {\n        var a = this.getAttribute(name), i;\n        return a !== b && (i = interpolate(a, b), function(t) {\n          this.setAttribute(name, i(t));\n        });\n      });\n    }\n    function attrTweenNS(b) {\n      return b == null ? attrNullNS : (b += \"\", function() {\n        var a = this.getAttributeNS(name.space, name.local), i;\n        return a !== b && (i = interpolate(a, b), function(t) {\n          this.setAttributeNS(name.space, name.local, i(t));\n        });\n      });\n    }\n    return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n  };\n  d3_transitionPrototype.attrTween = function(nameNS, tween) {\n    var name = d3.ns.qualify(nameNS);\n    function attrTween(d, i) {\n      var f = tween.call(this, d, i, this.getAttribute(name));\n      return f && function(t) {\n        this.setAttribute(name, f(t));\n      };\n    }\n    function attrTweenNS(d, i) {\n      var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n      return f && function(t) {\n        this.setAttributeNS(name.space, name.local, f(t));\n      };\n    }\n    return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n  };\n  d3_transitionPrototype.style = function(name, value, priority) {\n    var n = arguments.length;\n    if (n < 3) {\n      if (typeof name !== \"string\") {\n        if (n < 2) value = \"\";\n        for (priority in name) this.style(priority, name[priority], value);\n        return this;\n      }\n      priority = \"\";\n    }\n    function styleNull() {\n      this.style.removeProperty(name);\n    }\n    function styleString(b) {\n      return b == null ? styleNull : (b += \"\", function() {\n        var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;\n        return a !== b && (i = d3_interpolate(a, b), function(t) {\n          this.style.setProperty(name, i(t), priority);\n        });\n      });\n    }\n    return d3_transition_tween(this, \"style.\" + name, value, styleString);\n  };\n  d3_transitionPrototype.styleTween = function(name, tween, priority) {\n    if (arguments.length < 3) priority = \"\";\n    function styleTween(d, i) {\n      var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));\n      return f && function(t) {\n        this.style.setProperty(name, f(t), priority);\n      };\n    }\n    return this.tween(\"style.\" + name, styleTween);\n  };\n  d3_transitionPrototype.text = function(value) {\n    return d3_transition_tween(this, \"text\", value, d3_transition_text);\n  };\n  function d3_transition_text(b) {\n    if (b == null) b = \"\";\n    return function() {\n      this.textContent = b;\n    };\n  }\n  d3_transitionPrototype.remove = function() {\n    var ns = this.namespace;\n    return this.each(\"end.transition\", function() {\n      var p;\n      if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n    });\n  };\n  d3_transitionPrototype.ease = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].ease;\n    if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n    return d3_selection_each(this, function(node) {\n      node[ns][id].ease = value;\n    });\n  };\n  d3_transitionPrototype.delay = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].delay;\n    return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].delay = +value.call(node, node.__data__, i, j);\n    } : (value = +value, function(node) {\n      node[ns][id].delay = value;\n    }));\n  };\n  d3_transitionPrototype.duration = function(value) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 1) return this.node()[ns][id].duration;\n    return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n      node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n    } : (value = Math.max(1, value), function(node) {\n      node[ns][id].duration = value;\n    }));\n  };\n  d3_transitionPrototype.each = function(type, listener) {\n    var id = this.id, ns = this.namespace;\n    if (arguments.length < 2) {\n      var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n      try {\n        d3_transitionInheritId = id;\n        d3_selection_each(this, function(node, i, j) {\n          d3_transitionInherit = node[ns][id];\n          type.call(node, node.__data__, i, j);\n        });\n      } finally {\n        d3_transitionInherit = inherit;\n        d3_transitionInheritId = inheritId;\n      }\n    } else {\n      d3_selection_each(this, function(node) {\n        var transition = node[ns][id];\n        (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n      });\n    }\n    return this;\n  };\n  d3_transitionPrototype.transition = function() {\n    var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n    for (var j = 0, m = this.length; j < m; j++) {\n      subgroups.push(subgroup = []);\n      for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n        if (node = group[i]) {\n          transition = node[ns][id0];\n          d3_transitionNode(node, i, ns, id1, {\n            time: transition.time,\n            ease: transition.ease,\n            delay: transition.delay + transition.duration,\n            duration: transition.duration\n          });\n        }\n        subgroup.push(node);\n      }\n    }\n    return d3_transition(subgroups, ns, id1);\n  };\n  function d3_transitionNamespace(name) {\n    return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n  }\n  function d3_transitionNode(node, i, ns, id, inherit) {\n    var lock = node[ns] || (node[ns] = {\n      active: 0,\n      count: 0\n    }), transition = lock[id];\n    if (!transition) {\n      var time = inherit.time;\n      transition = lock[id] = {\n        tween: new d3_Map(),\n        time: time,\n        delay: inherit.delay,\n        duration: inherit.duration,\n        ease: inherit.ease,\n        index: i\n      };\n      inherit = null;\n      ++lock.count;\n      d3.timer(function(elapsed) {\n        var delay = transition.delay, duration, ease, timer = d3_timer_active, tweened = [];\n        timer.t = delay + time;\n        if (delay <= elapsed) return start(elapsed - delay);\n        timer.c = start;\n        function start(elapsed) {\n          if (lock.active > id) return stop();\n          var active = lock[lock.active];\n          if (active) {\n            --lock.count;\n            delete lock[lock.active];\n            active.event && active.event.interrupt.call(node, node.__data__, active.index);\n          }\n          lock.active = id;\n          transition.event && transition.event.start.call(node, node.__data__, i);\n          transition.tween.forEach(function(key, value) {\n            if (value = value.call(node, node.__data__, i)) {\n              tweened.push(value);\n            }\n          });\n          ease = transition.ease;\n          duration = transition.duration;\n          d3.timer(function() {\n            timer.c = tick(elapsed || 1) ? d3_true : tick;\n            return 1;\n          }, 0, time);\n        }\n        function tick(elapsed) {\n          if (lock.active !== id) return 1;\n          var t = elapsed / duration, e = ease(t), n = tweened.length;\n          while (n > 0) {\n            tweened[--n].call(node, e);\n          }\n          if (t >= 1) {\n            transition.event && transition.event.end.call(node, node.__data__, i);\n            return stop();\n          }\n        }\n        function stop() {\n          if (--lock.count) delete lock[id]; else delete node[ns];\n          return 1;\n        }\n      }, 0, time);\n    }\n  }\n  d3.svg.axis = function() {\n    var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n    function axis(g) {\n      g.each(function() {\n        var g = d3.select(this);\n        var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n        var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n        var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n        d3.transition(path));\n        tickEnter.append(\"line\");\n        tickEnter.append(\"text\");\n        var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n        if (orient === \"bottom\" || orient === \"top\") {\n          tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n          text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n          pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n        } else {\n          tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n          text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n          pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n        }\n        lineEnter.attr(y2, sign * innerTickSize);\n        textEnter.attr(y1, sign * tickSpacing);\n        lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n        textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n        if (scale1.rangeBand) {\n          var x = scale1, dx = x.rangeBand() / 2;\n          scale0 = scale1 = function(d) {\n            return x(d) + dx;\n          };\n        } else if (scale0.rangeBand) {\n          scale0 = scale1;\n        } else {\n          tickExit.call(tickTransform, scale1, scale0);\n        }\n        tickEnter.call(tickTransform, scale0, scale1);\n        tickUpdate.call(tickTransform, scale1, scale1);\n      });\n    }\n    axis.scale = function(x) {\n      if (!arguments.length) return scale;\n      scale = x;\n      return axis;\n    };\n    axis.orient = function(x) {\n      if (!arguments.length) return orient;\n      orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n      return axis;\n    };\n    axis.ticks = function() {\n      if (!arguments.length) return tickArguments_;\n      tickArguments_ = arguments;\n      return axis;\n    };\n    axis.tickValues = function(x) {\n      if (!arguments.length) return tickValues;\n      tickValues = x;\n      return axis;\n    };\n    axis.tickFormat = function(x) {\n      if (!arguments.length) return tickFormat_;\n      tickFormat_ = x;\n      return axis;\n    };\n    axis.tickSize = function(x) {\n      var n = arguments.length;\n      if (!n) return innerTickSize;\n      innerTickSize = +x;\n      outerTickSize = +arguments[n - 1];\n      return axis;\n    };\n    axis.innerTickSize = function(x) {\n      if (!arguments.length) return innerTickSize;\n      innerTickSize = +x;\n      return axis;\n    };\n    axis.outerTickSize = function(x) {\n      if (!arguments.length) return outerTickSize;\n      outerTickSize = +x;\n      return axis;\n    };\n    axis.tickPadding = function(x) {\n      if (!arguments.length) return tickPadding;\n      tickPadding = +x;\n      return axis;\n    };\n    axis.tickSubdivide = function() {\n      return arguments.length && axis;\n    };\n    return axis;\n  };\n  var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n    top: 1,\n    right: 1,\n    bottom: 1,\n    left: 1\n  };\n  function d3_svg_axisX(selection, x0, x1) {\n    selection.attr(\"transform\", function(d) {\n      var v0 = x0(d);\n      return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n    });\n  }\n  function d3_svg_axisY(selection, y0, y1) {\n    selection.attr(\"transform\", function(d) {\n      var v0 = y0(d);\n      return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n    });\n  }\n  d3.svg.brush = function() {\n    var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n    function brush(g) {\n      g.each(function() {\n        var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n        var background = g.selectAll(\".background\").data([ 0 ]);\n        background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n        g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n        var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n        resize.exit().remove();\n        resize.enter().append(\"g\").attr(\"class\", function(d) {\n          return \"resize \" + d;\n        }).style(\"cursor\", function(d) {\n          return d3_svg_brushCursor[d];\n        }).append(\"rect\").attr(\"x\", function(d) {\n          return /[ew]$/.test(d) ? -3 : null;\n        }).attr(\"y\", function(d) {\n          return /^[ns]/.test(d) ? -3 : null;\n        }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n        resize.style(\"display\", brush.empty() ? \"none\" : null);\n        var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n        if (x) {\n          range = d3_scaleRange(x);\n          backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n          redrawX(gUpdate);\n        }\n        if (y) {\n          range = d3_scaleRange(y);\n          backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n          redrawY(gUpdate);\n        }\n        redraw(gUpdate);\n      });\n    }\n    brush.event = function(g) {\n      g.each(function() {\n        var event_ = event.of(this, arguments), extent1 = {\n          x: xExtent,\n          y: yExtent,\n          i: xExtentDomain,\n          j: yExtentDomain\n        }, extent0 = this.__chart__ || extent1;\n        this.__chart__ = extent1;\n        if (d3_transitionInheritId) {\n          d3.select(this).transition().each(\"start.brush\", function() {\n            xExtentDomain = extent0.i;\n            yExtentDomain = extent0.j;\n            xExtent = extent0.x;\n            yExtent = extent0.y;\n            event_({\n              type: \"brushstart\"\n            });\n          }).tween(\"brush:brush\", function() {\n            var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n            xExtentDomain = yExtentDomain = null;\n            return function(t) {\n              xExtent = extent1.x = xi(t);\n              yExtent = extent1.y = yi(t);\n              event_({\n                type: \"brush\",\n                mode: \"resize\"\n              });\n            };\n          }).each(\"end.brush\", function() {\n            xExtentDomain = extent1.i;\n            yExtentDomain = extent1.j;\n            event_({\n              type: \"brush\",\n              mode: \"resize\"\n            });\n            event_({\n              type: \"brushend\"\n            });\n          });\n        } else {\n          event_({\n            type: \"brushstart\"\n          });\n          event_({\n            type: \"brush\",\n            mode: \"resize\"\n          });\n          event_({\n            type: \"brushend\"\n          });\n        }\n      });\n    };\n    function redraw(g) {\n      g.selectAll(\".resize\").attr(\"transform\", function(d) {\n        return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n      });\n    }\n    function redrawX(g) {\n      g.select(\".extent\").attr(\"x\", xExtent[0]);\n      g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n    }\n    function redrawY(g) {\n      g.select(\".extent\").attr(\"y\", yExtent[0]);\n      g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n    }\n    function brushstart() {\n      var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;\n      var w = d3.select(d3_window(target)).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n      if (d3.event.changedTouches) {\n        w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n      } else {\n        w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n      }\n      g.interrupt().selectAll(\"*\").interrupt();\n      if (dragging) {\n        origin[0] = xExtent[0] - origin[0];\n        origin[1] = yExtent[0] - origin[1];\n      } else if (resizing) {\n        var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n        offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n        origin[0] = xExtent[ex];\n        origin[1] = yExtent[ey];\n      } else if (d3.event.altKey) center = origin.slice();\n      g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n      d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n      event_({\n        type: \"brushstart\"\n      });\n      brushmove();\n      function keydown() {\n        if (d3.event.keyCode == 32) {\n          if (!dragging) {\n            center = null;\n            origin[0] -= xExtent[1];\n            origin[1] -= yExtent[1];\n            dragging = 2;\n          }\n          d3_eventPreventDefault();\n        }\n      }\n      function keyup() {\n        if (d3.event.keyCode == 32 && dragging == 2) {\n          origin[0] += xExtent[1];\n          origin[1] += yExtent[1];\n          dragging = 0;\n          d3_eventPreventDefault();\n        }\n      }\n      function brushmove() {\n        var point = d3.mouse(target), moved = false;\n        if (offset) {\n          point[0] += offset[0];\n          point[1] += offset[1];\n        }\n        if (!dragging) {\n          if (d3.event.altKey) {\n            if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n            origin[0] = xExtent[+(point[0] < center[0])];\n            origin[1] = yExtent[+(point[1] < center[1])];\n          } else center = null;\n        }\n        if (resizingX && move1(point, x, 0)) {\n          redrawX(g);\n          moved = true;\n        }\n        if (resizingY && move1(point, y, 1)) {\n          redrawY(g);\n          moved = true;\n        }\n        if (moved) {\n          redraw(g);\n          event_({\n            type: \"brush\",\n            mode: dragging ? \"move\" : \"resize\"\n          });\n        }\n      }\n      function move1(point, scale, i) {\n        var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n        if (dragging) {\n          r0 -= position;\n          r1 -= size + position;\n        }\n        min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n        if (dragging) {\n          max = (min += position) + size;\n        } else {\n          if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n          if (position < min) {\n            max = min;\n            min = position;\n          } else {\n            max = position;\n          }\n        }\n        if (extent[0] != min || extent[1] != max) {\n          if (i) yExtentDomain = null; else xExtentDomain = null;\n          extent[0] = min;\n          extent[1] = max;\n          return true;\n        }\n      }\n      function brushend() {\n        brushmove();\n        g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n        d3.select(\"body\").style(\"cursor\", null);\n        w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n        dragRestore();\n        event_({\n          type: \"brushend\"\n        });\n      }\n    }\n    brush.x = function(z) {\n      if (!arguments.length) return x;\n      x = z;\n      resizes = d3_svg_brushResizes[!x << 1 | !y];\n      return brush;\n    };\n    brush.y = function(z) {\n      if (!arguments.length) return y;\n      y = z;\n      resizes = d3_svg_brushResizes[!x << 1 | !y];\n      return brush;\n    };\n    brush.clamp = function(z) {\n      if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n      if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n      return brush;\n    };\n    brush.extent = function(z) {\n      var x0, x1, y0, y1, t;\n      if (!arguments.length) {\n        if (x) {\n          if (xExtentDomain) {\n            x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n          } else {\n            x0 = xExtent[0], x1 = xExtent[1];\n            if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n            if (x1 < x0) t = x0, x0 = x1, x1 = t;\n          }\n        }\n        if (y) {\n          if (yExtentDomain) {\n            y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n          } else {\n            y0 = yExtent[0], y1 = yExtent[1];\n            if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n            if (y1 < y0) t = y0, y0 = y1, y1 = t;\n          }\n        }\n        return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n      }\n      if (x) {\n        x0 = z[0], x1 = z[1];\n        if (y) x0 = x0[0], x1 = x1[0];\n        xExtentDomain = [ x0, x1 ];\n        if (x.invert) x0 = x(x0), x1 = x(x1);\n        if (x1 < x0) t = x0, x0 = x1, x1 = t;\n        if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n      }\n      if (y) {\n        y0 = z[0], y1 = z[1];\n        if (x) y0 = y0[1], y1 = y1[1];\n        yExtentDomain = [ y0, y1 ];\n        if (y.invert) y0 = y(y0), y1 = y(y1);\n        if (y1 < y0) t = y0, y0 = y1, y1 = t;\n        if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n      }\n      return brush;\n    };\n    brush.clear = function() {\n      if (!brush.empty()) {\n        xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n        xExtentDomain = yExtentDomain = null;\n      }\n      return brush;\n    };\n    brush.empty = function() {\n      return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n    };\n    return d3.rebind(brush, event, \"on\");\n  };\n  var d3_svg_brushCursor = {\n    n: \"ns-resize\",\n    e: \"ew-resize\",\n    s: \"ns-resize\",\n    w: \"ew-resize\",\n    nw: \"nwse-resize\",\n    ne: \"nesw-resize\",\n    se: \"nwse-resize\",\n    sw: \"nesw-resize\"\n  };\n  var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n  var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;\n  var d3_time_formatUtc = d3_time_format.utc;\n  var d3_time_formatIso = d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n  d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? d3_time_formatIsoNative : d3_time_formatIso;\n  function d3_time_formatIsoNative(date) {\n    return date.toISOString();\n  }\n  d3_time_formatIsoNative.parse = function(string) {\n    var date = new Date(string);\n    return isNaN(date) ? null : date;\n  };\n  d3_time_formatIsoNative.toString = d3_time_formatIso.toString;\n  d3_time.second = d3_time_interval(function(date) {\n    return new d3_date(Math.floor(date / 1e3) * 1e3);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 1e3);\n  }, function(date) {\n    return date.getSeconds();\n  });\n  d3_time.seconds = d3_time.second.range;\n  d3_time.seconds.utc = d3_time.second.utc.range;\n  d3_time.minute = d3_time_interval(function(date) {\n    return new d3_date(Math.floor(date / 6e4) * 6e4);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 6e4);\n  }, function(date) {\n    return date.getMinutes();\n  });\n  d3_time.minutes = d3_time.minute.range;\n  d3_time.minutes.utc = d3_time.minute.utc.range;\n  d3_time.hour = d3_time_interval(function(date) {\n    var timezone = date.getTimezoneOffset() / 60;\n    return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);\n  }, function(date, offset) {\n    date.setTime(date.getTime() + Math.floor(offset) * 36e5);\n  }, function(date) {\n    return date.getHours();\n  });\n  d3_time.hours = d3_time.hour.range;\n  d3_time.hours.utc = d3_time.hour.utc.range;\n  d3_time.month = d3_time_interval(function(date) {\n    date = d3_time.day(date);\n    date.setDate(1);\n    return date;\n  }, function(date, offset) {\n    date.setMonth(date.getMonth() + offset);\n  }, function(date) {\n    return date.getMonth();\n  });\n  d3_time.months = d3_time.month.range;\n  d3_time.months.utc = d3_time.month.utc.range;\n  function d3_time_scale(linear, methods, format) {\n    function scale(x) {\n      return linear(x);\n    }\n    scale.invert = function(x) {\n      return d3_time_scaleDate(linear.invert(x));\n    };\n    scale.domain = function(x) {\n      if (!arguments.length) return linear.domain().map(d3_time_scaleDate);\n      linear.domain(x);\n      return scale;\n    };\n    function tickMethod(extent, count) {\n      var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);\n      return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {\n        return d / 31536e6;\n      }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];\n    }\n    scale.nice = function(interval, skip) {\n      var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" && tickMethod(extent, interval);\n      if (method) interval = method[0], skip = method[1];\n      function skipped(date) {\n        return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;\n      }\n      return scale.domain(d3_scale_nice(domain, skip > 1 ? {\n        floor: function(date) {\n          while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);\n          return date;\n        },\n        ceil: function(date) {\n          while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);\n          return date;\n        }\n      } : interval));\n    };\n    scale.ticks = function(interval, skip) {\n      var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" ? tickMethod(extent, interval) : !interval.range && [ {\n        range: interval\n      }, skip ];\n      if (method) interval = method[0], skip = method[1];\n      return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);\n    };\n    scale.tickFormat = function() {\n      return format;\n    };\n    scale.copy = function() {\n      return d3_time_scale(linear.copy(), methods, format);\n    };\n    return d3_scale_linearRebind(scale, linear);\n  }\n  function d3_time_scaleDate(t) {\n    return new Date(t);\n  }\n  var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];\n  var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];\n  var d3_time_scaleLocalFormat = d3_time_format.multi([ [ \".%L\", function(d) {\n    return d.getMilliseconds();\n  } ], [ \":%S\", function(d) {\n    return d.getSeconds();\n  } ], [ \"%I:%M\", function(d) {\n    return d.getMinutes();\n  } ], [ \"%I %p\", function(d) {\n    return d.getHours();\n  } ], [ \"%a %d\", function(d) {\n    return d.getDay() && d.getDate() != 1;\n  } ], [ \"%b %d\", function(d) {\n    return d.getDate() != 1;\n  } ], [ \"%B\", function(d) {\n    return d.getMonth();\n  } ], [ \"%Y\", d3_true ] ]);\n  var d3_time_scaleMilliseconds = {\n    range: function(start, stop, step) {\n      return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);\n    },\n    floor: d3_identity,\n    ceil: d3_identity\n  };\n  d3_time_scaleLocalMethods.year = d3_time.year;\n  d3_time.scale = function() {\n    return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);\n  };\n  var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {\n    return [ m[0].utc, m[1] ];\n  });\n  var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ \".%L\", function(d) {\n    return d.getUTCMilliseconds();\n  } ], [ \":%S\", function(d) {\n    return d.getUTCSeconds();\n  } ], [ \"%I:%M\", function(d) {\n    return d.getUTCMinutes();\n  } ], [ \"%I %p\", function(d) {\n    return d.getUTCHours();\n  } ], [ \"%a %d\", function(d) {\n    return d.getUTCDay() && d.getUTCDate() != 1;\n  } ], [ \"%b %d\", function(d) {\n    return d.getUTCDate() != 1;\n  } ], [ \"%B\", function(d) {\n    return d.getUTCMonth();\n  } ], [ \"%Y\", d3_true ] ]);\n  d3_time_scaleUtcMethods.year = d3_time.year.utc;\n  d3_time.scale.utc = function() {\n    return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);\n  };\n  d3.text = d3_xhrType(function(request) {\n    return request.responseText;\n  });\n  d3.json = function(url, callback) {\n    return d3_xhr(url, \"application/json\", d3_json, callback);\n  };\n  function d3_json(request) {\n    return JSON.parse(request.responseText);\n  }\n  d3.html = function(url, callback) {\n    return d3_xhr(url, \"text/html\", d3_html, callback);\n  };\n  function d3_html(request) {\n    var range = d3_document.createRange();\n    range.selectNode(d3_document.body);\n    return range.createContextualFragment(request.responseText);\n  }\n  d3.xml = d3_xhrType(function(request) {\n    return request.responseXML;\n  });\n  if (typeof define === \"function\" && define.amd) define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3;\n  this.d3 = d3;\n}();"
  },
  {
    "path": "libs/ept/ParseBuffer.js",
    "content": "function parseEpt(event) {\n\tlet buffer = event.data.buffer;\n\tlet view = new DataView(buffer);\n\tlet schema = event.data.schema;\n\tlet scale = event.data.scale;\n\tlet offset = event.data.offset;\n\tlet mins = event.data.mins;\n\n\tlet dimensions = schema.reduce((p, c) => {\n\t\tp[c.name] = c;\n\t\treturn p;\n\t}, { });\n\n\tlet dimOffset = (name) => {\n\t\tlet offset = 0;\n\t\tfor (var i = 0; i < schema.length; ++i) {\n\t\t\tif (schema[i].name == name) return offset;\n\t\t\toffset += schema[i].size;\n\t\t}\n\t\treturn undefined;\n\t};\n\n\tlet getExtractor = (name) => {\n\t\tlet offset = dimOffset(name);\n\t\tlet type = dimensions[name].type;\n\t\tlet size = dimensions[name].size;\n\n\t\tif (type == 'signed') switch (size) {\n\t\t\tcase 1: return (p) => view.getInt8(p + offset);\n\t\t\tcase 2: return (p) => view.getInt16(p + offset, true);\n\t\t\tcase 4: return (p) => view.getInt32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getInt64(p + offset, true);\n\t\t}\n\t\tif (type == 'unsigned') switch (size) {\n\t\t\tcase 1: return (p) => view.getUint8(p + offset);\n\t\t\tcase 2: return (p) => view.getUint16(p + offset, true);\n\t\t\tcase 4: return (p) => view.getUint32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getUint64(p + offset, true);\n\t\t}\n\t\tif (type == 'float') switch (size) {\n\t\t\tcase 4: return (p) => view.getFloat32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getFloat64(p + offset, true);\n\t\t}\n\n\t\tlet str = JSON.stringify(dimensions[name]);\n\t\tthrow new Error(`Invalid dimension specification for ${name}: ${str}`);\n\t};\n\n\tlet pointSize = schema.reduce((p, c) => p + c.size, 0);\n\tlet numPoints = buffer.byteLength / pointSize;\n\n\tlet xyzBuffer, rgbBuffer, intensityBuffer, classificationBuffer,\n\t\treturnNumberBuffer, numberOfReturnsBuffer, pointSourceIdBuffer;\n\tlet xyz, rgb, intensity, classification, returnNumber, numberOfReturns,\n\t\tpointSourceId;\n\tlet xyzExtractor, rgbExtractor, intensityExtractor, classificationExtractor,\n\t\treturnNumberExtractor, numberOfReturnsExtractor, pointSourceIdExtractor;\n\tlet twoByteColor = false;\n\n\tif (dimensions['X'] && dimensions['Y'] && dimensions['Z']) {\n\t\txyzBuffer = new ArrayBuffer(numPoints * 4 * 3);\n\t\txyz = new Float32Array(xyzBuffer);\n\t\txyzExtractor = [\n\t\t\tgetExtractor('X'),\n\t\t\tgetExtractor('Y'),\n\t\t\tgetExtractor('Z')\n\t\t];\n\t}\n\n\tif (dimensions['Red'] && dimensions['Green'] && dimensions['Blue']) {\n\t\trgbBuffer = new ArrayBuffer(numPoints * 4);\n\t\trgb = new Uint8Array(rgbBuffer);\n\t\trgbExtractor = [\n\t\t\tgetExtractor('Red'),\n\t\t\tgetExtractor('Green'),\n\t\t\tgetExtractor('Blue')\n\t\t];\n\n\t\tlet r, g, b, pos;\n\t\tfor (let i = 0; i < numPoints && !twoByteColor; ++i) {\n\t\t\tpos = i * pointSize;\n\t\t\tr = rgbExtractor[0](pos);\n\t\t\tg = rgbExtractor[1](pos);\n\t\t\tb = rgbExtractor[2](pos);\n\t\t\tif (r > 255 || g > 255 || b > 255) twoByteColor = true;\n\t\t}\n\t}\n\n\tif (dimensions['Intensity']) {\n\t\tintensityBuffer = new ArrayBuffer(numPoints * 4);\n\t\tintensity = new Float32Array(intensityBuffer);\n\t\tintensityExtractor = getExtractor('Intensity');\n\t}\n\n\tif (dimensions['Classification']) {\n\t\tclassificationBuffer = new ArrayBuffer(numPoints);\n\t\tclassification = new Uint8Array(classificationBuffer);\n\t\tclassificationExtractor = getExtractor('Classification');\n\t}\n\n\tif (dimensions['ReturnNumber']) {\n\t\treturnNumberBuffer = new ArrayBuffer(numPoints);\n\t\treturnNumber = new Uint8Array(returnNumberBuffer);\n\t\treturnNumberExtractor = getExtractor('ReturnNumber');\n\t}\n\n\tif (dimensions['NumberOfReturns']) {\n\t\tnumberOfReturnsBuffer = new ArrayBuffer(numPoints);\n\t\tnumberOfReturns = new Uint8Array(numberOfReturnsBuffer);\n\t\tnumberOfReturnsExtractor = getExtractor('NumberOfReturns');\n\t}\n\n\tif (dimensions['PointSourceId']) {\n\t\tpointSourceIdBuffer = new ArrayBuffer(numPoints * 2);\n\t\tpointSourceId = new Uint16Array(pointSourceIdBuffer);\n\t\tpointSourceIdExtractor = getExtractor('PointSourceId');\n\t}\n\n\tlet mean = [0, 0, 0];\n\tlet bounds = {\n\t\tmin: [Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE],\n\t\tmax: [-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE],\n\t};\n\n\tlet x, y, z, r, g, b;\n\tfor (let i = 0; i < numPoints; ++i) {\n\t\tlet pos = i * pointSize;\n\t\tif (xyz) {\n\t\t\tx = xyzExtractor[0](pos) * scale.x + offset.x - mins[0];\n\t\t\ty = xyzExtractor[1](pos) * scale.y + offset.y - mins[1];\n\t\t\tz = xyzExtractor[2](pos) * scale.z + offset.z - mins[2];\n\n\t\t\tmean[0] += x / numPoints;\n\t\t\tmean[1] += y / numPoints;\n\t\t\tmean[2] += z / numPoints;\n\n\t\t\tbounds.min[0] = Math.min(bounds.min[0], x);\n\t\t\tbounds.min[1] = Math.min(bounds.min[1], y);\n\t\t\tbounds.min[2] = Math.min(bounds.min[2], z);\n\n\t\t\tbounds.max[0] = Math.max(bounds.max[0], x);\n\t\t\tbounds.max[1] = Math.max(bounds.max[1], y);\n\t\t\tbounds.max[2] = Math.max(bounds.max[2], z);\n\n\t\t\txyz[3 * i + 0] = x;\n\t\t\txyz[3 * i + 1] = y;\n\t\t\txyz[3 * i + 2] = z;\n\t\t}\n\n\t\tif (rgb) {\n\t\t\tr = rgbExtractor[0](pos);\n\t\t\tg = rgbExtractor[1](pos);\n\t\t\tb = rgbExtractor[2](pos);\n\n\t\t\tif (twoByteColor) {\n\t\t\t\tr /= 256;\n\t\t\t\tg /= 256;\n\t\t\t\tb /= 256;\n\t\t\t}\n\n\t\t\trgb[4 * i + 0] = r;\n\t\t\trgb[4 * i + 1] = g;\n\t\t\trgb[4 * i + 2] = b;\n\t\t}\n\n\t\tif (intensity) intensity[i] = intensityExtractor(pos);\n\t\tif (classification) classification[i] = classificationExtractor(pos);\n\t\tif (returnNumber) returnNumber[i] = returnNumberExtractor(pos);\n\t\tif (numberOfReturns) numberOfReturns[i] = numberOfReturnsExtractor(pos);\n\t\tif (pointSourceId) pointSourceId[i] = pointSourceIdExtractor(pos);\n\t}\n\n\tlet indicesBuffer = new ArrayBuffer(numPoints * 4);\n\tlet indices = new Uint32Array(indicesBuffer);\n\tfor (let i = 0; i < numPoints; ++i) {\n\t\tindices[i] = i;\n\t}\n\n\tlet message = {\n\t\tnumPoints: numPoints,\n\t\ttightBoundingBox: bounds,\n\t\tmean: mean,\n\n\t\tposition: xyzBuffer,\n\t\tcolor: rgbBuffer,\n\t\tintensity: intensityBuffer,\n\t\tclassification: classificationBuffer,\n\t\treturnNumber: returnNumberBuffer,\n\t\tnumberOfReturns: numberOfReturnsBuffer,\n\t\tpointSourceId: pointSourceIdBuffer,\n\t\tindices: indicesBuffer\n\t};\n\n\tlet transferables = [\n\t\tmessage.position,\n\t\tmessage.color,\n\t\tmessage.intensity,\n\t\tmessage.classification,\n\t\tmessage.returnNumber,\n\t\tmessage.numberOfReturns,\n\t\tmessage.pointSourceId,\n\t\tmessage.indices\n\t].filter((v) => v);\n\n\tpostMessage(message, transferables);\n}\n\n"
  },
  {
    "path": "libs/geopackage/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 National Geospatial-Intelligence Agency\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "libs/geopackage/README.md",
    "content": "# GeoPackage JS\n\nGeoPackage JS is an implementation of the OGC GeoPackage spec.  This library works in both the browser and Node 4+.\n\n### Demo ###\n[GeoPackage JS Demo Page](http://ngageoint.github.io/geopackage-js/)\n\nCloning this repository and opening the docs/index.html in your browser will run the demo locally.\n\n### Installation ###\n\n[![Build Status](https://travis-ci.org/ngageoint/geopackage-js.svg?branch=master)](https://travis-ci.org/ngageoint/geopackage-js)\n[![NPM](https://img.shields.io/npm/v/@ngageoint/geopackage.svg)](https://www.npmjs.com/package/@ngageoint/geopackage)\n[![Coverage Status](https://coveralls.io/repos/github/ngageoint/geopackage-js/badge.svg)](https://coveralls.io/github/ngageoint/geopackage-js)\n\n```sh\n$ npm install @ngageoint/geopackage\n```\n\n#### GeoPackage JS Library ####\n\nThe [GeoPackage Libraries](http://ngageoint.github.io/GeoPackage/) were developed at the [National Geospatial-Intelligence Agency (NGA)](http://www.nga.mil/) in collaboration with [BIT Systems](http://www.bit-sys.com/). The government has \"unlimited rights\" and is releasing this software to increase the impact of government investments by providing developers with the opportunity to take things in new directions. The software use, modification, and distribution rights are stipulated within the [MIT license](http://choosealicense.com/licenses/mit/).\n\n### Pull Requests ###\nIf you'd like to contribute to this project, please make a pull request. We'll review the pull request and discuss the changes. All pull request contributions to this project will be released under the MIT license.\n\nSoftware source code previously released under an open source license and then modified by NGA staff is considered a \"joint work\" (see 17 USC § 101); it is partially copyrighted, partially public domain, and as a whole is protected by the copyrights of the non-government authors and must be released according to the terms of the original open source license.\n\n### About ###\n\n[GeoPackage JS](https://github.com/ngageoint/geopackage-js) is a [GeoPackage Library](http://ngageoint.github.io/GeoPackage/) JavaScript implementation of the Open Geospatial Consortium [GeoPackage](http://www.geopackage.org/) [spec](http://www.geopackage.org/spec/).  It is listed as an [OGC GeoPackage Implementation](http://www.geopackage.org/#implementations_nga) by the National Geospatial-Intelligence Agency.\n\nThe GeoPackage JavaScript library currently provides the ability to read GeoPackage files.  This library works both in the browser and in Node.  In the browser tiles are rendered using HTML5 Canvas and GeoPackages are read using [sql.js](https://github.com/kripken/sql.js/).  In Node tiles are rendered  [PureImage](https://github.com/joshmarinacci/node-pureimage) and GeoPackages are read using [node-sqlite3](https://github.com/mapbox/node-sqlite3).\n\n### Changelog\n\n##### 2.1.0\n\n- Implementation of the Feature Style Extension and Contents ID Extension\n\n##### 2.0.8\n\n- Checks for Electron when returning a tile creator\n\n##### 2.0\n\n- All new API utilizing Promises\n\n##### 1.1.4\n\n- Adds a method to retrieve tiles in EPSG:4326\n\n##### 1.1.3\n\n- Fixes issue #115\n\n##### 1.1.2\n\n- fix case where GeoPackage Zoom does not correspond to the web map zoom\n\n##### 1.1.1\n\n- fix more instances of proj4 bug for react\n- fixed tile generation for images with different x and y pixel densities\n\n##### 1.1.0\n\n- accept pull request adding support for react\n- fix bug with projected tiles that spanned the date line\n\n##### 1.0.25\n\n- ensure we use proj4 2.4.3 instead of 2.4.4\n\n##### 1.0.22\n\n- Fixed bug where querying for indexed features only returned the geometry instead of the entire feature\n\n##### 1.0.19\n\n- Remove dependency on Lwip\n\n### Usage ###\n\nView examples using [Bower](https://github.com/ngageoint/geopackage-js/tree/master/docs/bower) and [Browserify](https://github.com/ngageoint/geopackage-js/tree/master/docs)\n\nView the latest [docs](http://ngageoint.github.io/geopackage-js/jsdoc/module-geoPackage-GeoPackage.html) (currently being updated).\n\n#### Browser Usage ####\n```javascript\n\n// attach this method to a file input onchange event\nwindow.loadGeoPackage = function(files) {\n  var f = files[0];\n  var r = new FileReader();\n  r.onload = function() {\n    var array = new Uint8Array(r.result);\n    loadByteArray(array);\n  }\n  r.readAsArrayBuffer(f);\n}\n\nfunction loadByteArray(array, callback) {\n  var db = new SQL.Database(array);\n  GeoPackageConnection.connectWithDatabase(db, function(err, connection) {\n    var geoPackage = new GeoPackage('', '', connection);\n\n    // Now you can operate on the GeoPackage\n\n    // get the tile table names\n    geoPackage.getTileTables(function(err, tileTableNames) {\n      // tileTableNames is an array of all tile table names\n\n      // get the info for the first table\n      geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) {\n        geoPackage.getInfoForTable(tileDao, function(err, info) {\n          // do something with the tile table info\n        });\n\n        // draw a tile into a canvas for an XYZ tile\n        var canvas = canvasFromSomewhere;\n        var gpr = new GeoPackageTileRetriever(tileDao, 256, 256);\n        var x = 0;\n        var y = 0;\n        var zoom = 0;\n\n        console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);\n        gpr.drawTileIn(x, y, zoom, canvas, function() {\n          console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);\n        });\n\n        // or get a tile base64 data URL for an XYZ tile\n        gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) {\n          console.log('got the base64 data url');\n        });\n\n        // or get a tile from a GeoPackage tile column and tile row\n        tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) {\n          var tileData = tile.getTileData();  // the raw bytes from the GeoPackage\n        });\n\n      });\n    });\n\n    // get the feature table names\n    geoPackage.getFeatureTables(function(err, featureTableNames) {\n      // featureTableNames is an array of all feature table names\n\n      // get the info for the first table\n      geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) {\n        geoPackage.getInfoForTable(featureDao, function(err, info) {\n          // do something with the feature table info\n        });\n\n        // query for all features\n        featureDao.queryForEach(function(err, row, rowDone) {\n          var feature = featureDao.getFeatureRow(row);\n          var geometry = currentRow.getGeometry();\n          if (geometry) {\n            var geom = geometry.geometry;\n            var geoJson = geometry.geometry.toGeoJSON();\n\n            geoJson.properties = {};\n            for (var key in feature.values) {\n              if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) {\n                var column = info.columnMap[key];\n                geoJson.properties[column.displayName] = currentRow.values[key];\n              }\n            }\n          }\n          rowDone();\n        });\n      });\n    });\n  });\n}\n\n```\n\n#### NodeJS Usage ####\n\n```javascript\nvar GeoPackageAPI = require('@ngageoint/geopackage')\n  , GeoPackageManager = GeoPackageAPI.GeoPackageManager\n  , GeoPackageConnection = GeoPackageAPI.GeoPackageConnection\n  , GeoPackageTileRetriever = GeoPackageAPI.GeoPackageTileRetriever;\n\nGeoPackageAPI.open(filename, function(err, geoPackage) {\n\n  // Now you can operate on the GeoPackage\n\n  // get the tile table names\n  geoPackage.getTileTables(function(err, tileTableNames) {\n    // tileTableNames is an array of all tile table names\n\n    // get the info for the first table\n    geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) {\n      geoPackage.getInfoForTable(tileDao, function(err, info) {\n        // do something with the tile table info\n      });\n\n      // draw a tile into a canvas for an XYZ tile\n      var canvas = canvasFromSomewhere;\n      var gpr = new GeoPackageTileRetriever(tileDao, 256, 256);\n      var x = 0;\n      var y = 0;\n      var zoom = 0;\n\n      console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);\n      gpr.drawTileIn(x, y, zoom, canvas, function() {\n        console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);\n      });\n\n      // or get a tile base64 data URL for an XYZ tile\n      gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) {\n        console.log('got the base64 data url');\n      });\n\n      // or get a tile from a GeoPackage tile column and tile row\n      tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) {\n        var tileData = tile.getTileData();  // the raw bytes from the GeoPackage\n      });\n\n    });\n  });\n\n  // get the feature table names\n  geoPackage.getFeatureTables(function(err, featureTableNames) {\n    // featureTableNames is an array of all feature table names\n\n    // get the info for the first table\n    geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) {\n      geoPackage.getInfoForTable(featureDao, function(err, info) {\n        // do something with the feature table info\n      });\n\n      // query for all features\n      featureDao.queryForEach(function(err, row, rowDone) {\n        var feature = featureDao.getFeatureRow(row);\n        var geometry = currentRow.getGeometry();\n        if (geometry) {\n          var geom = geometry.geometry;\n          var geoJson = geometry.geometry.toGeoJSON();\n\n          geoJson.properties = {};\n          for (var key in feature.values) {\n            if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) {\n              var column = info.columnMap[key];\n              geoJson.properties[column.displayName] = currentRow.values[key];\n            }\n          }\n        }\n        rowDone();\n      });\n    });\n  });\n});\n\n```\n"
  },
  {
    "path": "libs/geopackage/geopackage.js",
    "content": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.geopackage = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n\nmodule.exports = require('./lib/api');\nvar proj4Defs = require('./lib/proj4Defs');\nmodule.exports.proj4Defs = proj4Defs;\n\nmodule.exports.GeoPackageTileRetriever = require('./lib/tiles/retriever');\nmodule.exports.GeoPackageConnection = require('./lib/db/geoPackageConnection');\nmodule.exports.TableCreator = require('./lib/db/tableCreator');\nmodule.exports.MediaTable = require('./lib/extension/relatedTables/mediaTable');\nmodule.exports.UserMappingTable = require('./lib/extension/relatedTables/userMappingTable');\nmodule.exports.DublinCoreType = require('./lib/extension/relatedTables/dublinCoreType');\n\nmodule.exports.TileColumn = require('./lib/tiles/user/tileColumn');\nmodule.exports.BoundingBox = require('./lib/boundingBox');\nmodule.exports.TileUtilities = require('./lib/tiles/creator/tileUtilities');\nmodule.exports.FeatureColumn = require('./lib/features/user/featureColumn');\nmodule.exports.UserColumn = require('./lib/user/userColumn');\nmodule.exports.GeometryColumns = require('./lib/features/columns').GeometryColumns;\nmodule.exports.GeometryData = require('./lib/geom/geometryData');\nmodule.exports.DataColumns = require('./lib/dataColumns').DataColumns;\nmodule.exports.DataTypes = require('./lib/db/dataTypes');\nmodule.exports.Metadata = require('./lib/metadata').Metadata;\nmodule.exports.MetadataReference = require('./lib/metadata/reference').MetadataReference;\nmodule.exports.RTreeIndex = require('./lib/extension/rtree').RTreeIndex;\nmodule.exports.CrsWktExtension = require('./lib/extension/crsWkt').CrsWktExtension;\nmodule.exports.SchemaExtension = require('./lib/extension/schema').SchemaExtension;\nmodule.exports.MetadataExtension = require('./lib/extension/metadata').MetadataExtension;\nmodule.exports.WebPExtension = require('./lib/extension/webp').WebPExtension;\nmodule.exports.DataColumnsDao = require('./lib/dataColumns').DataColumnsDao;\nmodule.exports.DataColumnConstraintsDao = require('./lib/dataColumnConstraints').DataColumnConstraintsDao;\n\n},{\"./lib/api\":2,\"./lib/boundingBox\":7,\"./lib/dataColumnConstraints\":12,\"./lib/dataColumns\":13,\"./lib/db/dataTypes\":14,\"./lib/db/geoPackageConnection\":15,\"./lib/db/tableCreator\":19,\"./lib/extension/crsWkt\":24,\"./lib/extension/metadata\":29,\"./lib/extension/relatedTables/dublinCoreType\":30,\"./lib/extension/relatedTables/mediaTable\":35,\"./lib/extension/relatedTables/userMappingTable\":42,\"./lib/extension/rtree\":44,\"./lib/extension/schema\":45,\"./lib/extension/webp\":63,\"./lib/features/columns\":64,\"./lib/features/user/featureColumn\":65,\"./lib/geom/geometryData\":73,\"./lib/metadata\":74,\"./lib/metadata/reference\":75,\"./lib/proj4Defs\":77,\"./lib/tiles/creator/tileUtilities\":82,\"./lib/tiles/retriever\":92,\"./lib/tiles/user/tileColumn\":95,\"./lib/user/userColumn\":105}],2:[function(require,module,exports){\n(function (process){\n\n\nvar wkx = require('wkx')\n  , reproject = require('reproject')\n  , path = require('path')\n  , fs = require('fs')\n  , geojsonvt = require('geojson-vt')\n  , vtpbf = require('vt-pbf')\n  , Pbf = require('pbf')\n  , VectorTile = require('@mapbox/vector-tile');\n\nvar GeoPackage = require('./geoPackage')\n  , GeoPackageValidate = require('./validate/geoPackageValidate')\n  , GeoPackageTileRetriever = require('./tiles/retriever')\n  , GeoPackageConnection = require('./db/geoPackageConnection')\n  , BoundingBox = require('./boundingBox')\n  , GeometryData = require('./geom/geometryData')\n  , TableCreator = require('./db/tableCreator')\n  , TileBoundingBoxUtils = require('./tiles/tileBoundingBoxUtils')\n  , FeatureTile = require('./tiles/features')\n  , FeatureTableIndex = require('./extension/index/featureTableIndex')\n  , DataColumnsDao = require('./dataColumns').DataColumnsDao\n  , DataColumns = require('./dataColumns').DataColumns\n  , DataTypes = require('./db/dataTypes')\n  , GeometryColumns = require('./features/columns').GeometryColumns\n  , FeatureColumn = require('./features/user/featureColumn')\n  , RelationType = require('./extension/relatedTables/relationType')\n  , MediaTable = require('./extension/relatedTables/mediaTable')\n  , SimpleAttributesTable = require('./extension/relatedTables/simpleAttributesTable')\n  , UserColumn = require('./user/userColumn');\n\n/**\n * This module is the entry point to the GeoPackage API, providing static\n * methods for opening and building GeoPackage files.\n *\n * @exports api\n */\nvar GeoPackageAPI = module.exports;\n\n/**\n * In Node, open a GeoPackage file at the given path, or in a browser, load an\n * in-memory GeoPackage from the given byte array.\n * @param  {String|Uint8Array} gppathOrByteArray path to the GeoPackage file or `Uint8Array` of GeoPackage bytes\n * @param  {geopackageCallback=} callback called with an `Error` if one occurred and the open `GeoPackage` object\n * @return {Promise} promise that resolves with the open {@link module:geoPackage~GeoPackage} object or rejects with an `Error`\n */\nGeoPackageAPI.open = function(gppathOrByteArray, callback) {\n  return new Promise(function(resolve, reject) {\n    var valid = (typeof gppathOrByteArray !== 'string') || (typeof gppathOrByteArray === 'string' &&\n    (gppathOrByteArray.indexOf('http') === 0 || !GeoPackageValidate.validateGeoPackageExtension(gppathOrByteArray)));\n    if (!valid) {\n      reject(new Error('Invalid GeoPackage - Invalid GeoPackage Extension'));\n    } else {\n      resolve(gppathOrByteArray);\n    }\n  }).then(function() {\n    return GeoPackageConnection.connect(gppathOrByteArray);\n  }).then(function(connection) {\n    if (gppathOrByteArray && typeof gppathOrByteArray === 'string') {\n      return new GeoPackage(path.basename(gppathOrByteArray), gppathOrByteArray, connection);\n    } else {\n      return new GeoPackage('geopackage', undefined, connection);\n    }\n  })\n  .then(function(geoPackage) {\n    if (GeoPackageValidate.hasMinimumTables(geoPackage)) {\n      return geoPackage;\n    } else {\n      throw new Error('Invalid GeoPackage - GeoPackage does not have the minimum required tables');\n    }\n  })\n  .then(function(geoPackage) {\n    if(callback) callback(null, geoPackage);\n    return geoPackage;\n  })\n  .catch(function(error){\n    if(callback) {\n      callback(error);\n    } else {\n      throw error;\n    }\n  });\n};\n\n/**\n * In Node, create a GeoPackage file at the given file path, or in a browser,\n * create an in-memory GeoPackage.\n * @param  {String|geopackageCallback} gppath path of the created GeoPackage file; ignored in the browser\n * @param  {geopackageCallback=} callback called with an `Error` if one occurred and the open {@link module:geoPackage~GeoPackage} object\n * @return {Promise} promise that resolves with the open {@link module:geoPackage~GeoPackage} object or rejects with an  `Error`\n */\nGeoPackageAPI.create = function(gppath, callback) {\n  if (typeof gppath == 'function') {\n    callback = gppath;\n    gppath = undefined;\n  }\n  var valid = (typeof gppath !== 'string') || (typeof gppath === 'string' && !GeoPackageValidate.validateGeoPackageExtension(gppath));\n  if (!valid) {\n    if (callback) {\n      return callback(new Error('Invalid GeoPackage'));\n    }\n    return Promise.reject(new Error('Invalid GeoPackage'));\n  }\n\n  var promise = new Promise(function(resolve, reject) {\n    if (typeof(process) !== 'undefined' && process.version && gppath) {\n      fs.mkdirSync(path.dirname(gppath));\n    }\n    resolve(gppath);\n  })\n  .catch(function(error) {\n    // could not create directory, just move on\n  })\n  .then(function() {\n    return GeoPackageConnection.connect(gppath);\n  })\n  .then(function(connection) {\n    connection.setApplicationId();\n    return connection;\n  })\n  .then(function(connection) {\n    if (gppath) {\n      return new GeoPackage(path.basename(gppath), gppath, connection);\n    } else {\n      return new GeoPackage('geopackage', undefined, connection);\n    }\n  })\n  .then(function(geopackage) {\n    return geopackage.createRequiredTables();\n  })\n  .then(function(geopackage) {\n    return geopackage.createSupportedExtensions();\n  })\n  .then(function(geopackage) {\n    if (callback) callback(null, geopackage);\n    return geopackage;\n  })\n  .catch(function(error){\n    if (callback) {\n      callback(error);\n    } else {\n      throw error;\n    }\n  });\n\n  return promise;\n};\n\n/**\n * Create the [tables and rows](https://www.geopackage.org/spec121/index.html#tiles)\n * necessary to store tiles according to the ubiquitous [XYZ web/slippy-map tiles](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames) scheme.\n * The extent for the [contents table]{@link module:core/contents~Contents} row,\n * `contentsBoundingBox`, is [informational only](https://www.geopackage.org/spec121/index.html#gpkg_contents_cols),\n * and need not match the [tile matrix set]{@link module:tiles/matrixset~TileMatrixSet}\n * extent, `tileMatrixSetBoundingBox`, which should be the precise bounding box\n * used to calculate the tile row and column coordinates of all tiles in the\n * tile set.  The two SRS ID parameters, `contentsSrsId` and `tileMatrixSetSrsId`,\n * must match, however.  See {@link module:tiles/matrixset~TileMatrixSet} for\n * more information about how GeoPackage consumers use the bouding boxes for a\n * tile set.\n *\n * @param {module:geoPackage~GeoPackage} geopackage the GeoPackage that will store the tiles\n * @param {string} tableName the name of the table that will store the tiles\n * @param {BoundingBox} contentsBoundingBox the bounds stored in the [`gpkg_contents`]{@link module:core/contents~Contents} table row for the tile matrix set\n * @param {SRSRef} contentsSrsId the ID of a [spatial reference system]{@link module:core/srs~SpatialReferenceSystem}; must match `tileMatrixSetSrsId`\n * @param {BoundingBox} tileMatrixSetBoundingBox the bounds stored in the [`gpkg_tile_matrix_set`]{@link module:tiles/matrixset~TileMatrixSet} table row\n * @param {SRSRef} tileMatrixSetSrsId the ID of a [spatial reference system]{@link module:core/srs~SpatialReferenceSystem}\n *   for the [tile matrix set](https://www.geopackage.org/spec121/index.html#_tile_matrix_set) table; must match `contentsSrsId`\n * @param {number} minZoom the zoom level of the lowest resolution [tile matrix]{@link module:tiles/matrix~TileMatrix} in the tile matrix set\n * @param {number} maxZoom the zoom level of the highest resolution [tile matrix]{@link module:tiles/matrix~TileMatrix} in the tile matrix set\n * @param {number=} tileSize the width and height in pixels of the tile images; defaults to 256\n * @returns {Promise} a `Promise` that resolves with the created {@link module:tiles/matrixset~TileMatrixSet} object, or rejects with an `Error`\n *\n * @todo make `tileMatrixSetSrsId` optional because it always has to be the same anyway\n */\nGeoPackageAPI.createStandardWebMercatorTileTable = function(geopackage, tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId, minZoom, maxZoom, tileSize) {\n  tileSize = tileSize || 256;\n  return geopackage.createTileTableWithTableName(tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId)\n  .then(function(tileMatrixSet) {\n    geopackage.createStandardWebMercatorTileMatrix(tileMatrixSetBoundingBox, tileMatrixSet, minZoom, maxZoom, tileSize);\n    return tileMatrixSet;\n  });\n}\n\nGeoPackageAPI.createFeatureTable = function(geopackage, tableName, geometryColumn, featureColumns) {\n  return GeoPackageAPI.createFeatureTableWithDataColumns(geopackage, tableName, geometryColumn, featureColumns, null);\n};\n\nGeoPackageAPI.createFeatureTableWithDataColumns = function(geopackage, tableName, geometryColumn, featureColumns, dataColumns) {\n  var boundingBox = new BoundingBox(-180, 180, -90, 90);\n  return GeoPackageAPI.createFeatureTableWithDataColumnsAndBoundingBox(geopackage, tableName, geometryColumn, featureColumns, dataColumns, boundingBox, 4326);\n};\n\nGeoPackageAPI.createFeatureTableWithDataColumnsAndBoundingBox = function(geopackage, tableName, geometryColumn, featureColumns, dataColumns, boundingBox, boundingBoxSrsId) {\n  return geopackage.createFeatureTableWithGeometryColumnsAndDataColumns(geometryColumn, boundingBox, boundingBoxSrsId, featureColumns, dataColumns)\n  .then(function() {\n    return geopackage.getFeatureDao(tableName);\n  });\n};\n\n/**\n * Create a feature table with the properties specified.\n * @param {module:geoPackage~GeoPackage} geopackage the geopackage object\n * @param {Object[]} properties properties to create columns from\n * @param {string} properties.name name of the column\n * @param {string} properties.dataType name of the data type\n * @return {Promise}\n */\nGeoPackageAPI.createFeatureTableWithProperties = function(geopackage, tableName, properties) {\n  var geometryColumns = new GeometryColumns();\n  geometryColumns.table_name = tableName;\n  geometryColumns.column_name = 'geometry';\n  geometryColumns.geometry_type_name = 'GEOMETRY';\n  geometryColumns.z = 0;\n  geometryColumns.m = 0;\n\n  var boundingBox = new BoundingBox(-180, 180, -80, 80);\n\n  var columns = [];\n  var columnNumber = 0;\n  columns.push(FeatureColumn.createPrimaryKeyColumnWithIndexAndName(columnNumber++, 'id'));\n  columns.push(FeatureColumn.createGeometryColumn(columnNumber++, 'geometry', 'GEOMETRY', false, null));\n\n  for (var i = 0; i < properties.length; i++) {\n    var property = properties[i];\n    columns.push(FeatureColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));\n  }\n\n  return geopackage.createFeatureTableWithGeometryColumns(geometryColumns, boundingBox, 4326, columns);\n};\n\n/**\n * Create a feature table with the properties specified.\n * @param {module:geoPackage~GeoPackage} geopackage the geopackage object\n * @param {Object[]} properties properties to create columns from\n * @param {string} properties.name name of the column\n * @param {string} properties.dataType name of the data type\n * @return {Promise}\n */\nGeoPackageAPI.createAttributeTableWithProperties = function(geopackage, tableName, properties) {\n  var columns = [];\n  var columnNumber = 0;\n  columns.push(UserColumn.createPrimaryKeyColumnWithIndexAndName(columnNumber++, 'id'));\n\n  var dataColumns = [];\n\n  for (var i = 0; i < properties.length; i++) {\n    var property = properties[i];\n    columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));\n    if (property.dataColumn) {\n      var dc = new DataColumns();\n      dc.table_name = property.dataColumn.table_name;\n      dc.column_name = property.dataColumn.column_name;\n      dc.name = property.dataColumn.name;\n      dc.title = property.dataColumn.title;\n      dc.description = property.dataColumn.description;\n      dc.mime_type = property.dataColumn.mime_type;\n      dc.constraint_name = property.dataColumn.constraint_name;\n      dataColumns.push(dc);\n    }\n  }\n\n  return geopackage.createAttributeTable(tableName, columns, dataColumns.length ? dataColumns : undefined);\n};\n\nGeoPackageAPI.addAttributeRow = function(geopackage, tableName, row) {\n  var attributeDao = geopackage.getAttributeDaoWithTableName(tableName);\n  var attributeRow = attributeDao.newRow(row);\n  return attributeDao.create(attributeRow);\n}\n\n/**\n * Create a simple attributes table with the properties specified.\n * @param {module:geoPackage~GeoPackage} geopackage the geopackage object\n * @param {Object[]} properties properties to create columns from\n * @param {string} properties.name name of the column\n * @param {string} properties.dataType name of the data type\n * @return {Promise}\n */\nGeoPackageAPI.createSimpleAttributesTableWithProperties = function(geopackage, tableName, properties) {\n  var relatedTables = geopackage.getRelatedTablesExtension();\n  var columns = [];\n  var columnNumber = SimpleAttributesTable.numRequiredColumns();\n  if (properties) {\n    for (var i = 0; i < properties.length; i++) {\n      var property = properties[i];\n      columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType), true));\n    }\n  }\n  var simpleAttributesTable = SimpleAttributesTable.create(tableName, columns);\n  relatedTables.createRelatedTable(simpleAttributesTable);\n  return relatedTables.getSimpleAttributesDao(simpleAttributesTable);\n};\n\n/**\n * Create a media table with the properties specified.  These properties are added to the required columns\n * @param {module:geoPackage~GeoPackage} geopackage the geopackage object\n * @param {Object[]} properties properties to create columns from\n * @param {string} properties.name name of the column\n * @param {string} properties.dataType name of the data type\n * @return {Promise}\n */\nGeoPackageAPI.createMediaTableWithProperties = function(geopackage, tableName, properties) {\n  var relatedTables = geopackage.getRelatedTablesExtension();\n  var columns = [];\n  var columnNumber = MediaTable.numRequiredColumns();\n  if (properties) {\n    for (var i = 0; i < properties.length; i++) {\n      var property = properties[i];\n      columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));\n    }\n  }\n  var mediaTable = MediaTable.create(tableName, columns)\n  relatedTables.createRelatedTable(mediaTable);\n  return relatedTables.getMediaDao(mediaTable);\n};\n\nGeoPackageAPI.addMedia = function(geopackage, tableName, dataBuffer, contentType, additionalProperties) {\n  var relatedTables = geopackage.getRelatedTablesExtension();\n  var mediaDao = relatedTables.getMediaDao(tableName);\n  var row = mediaDao.newRow();\n  row.setContentType(contentType);\n  row.setData(dataBuffer);\n  for (var key in additionalProperties) {\n    row.setValueWithColumnName(key, additionalProperties[key]);\n  }\n  return mediaDao.create(row);\n}\n\nGeoPackageAPI.linkMedia = function(geopackage, baseTableName, baseId, mediaTableName, mediaId) {\n  var relatedTables = geopackage.getRelatedTablesExtension();\n  return relatedTables.linkRelatedIds(baseTableName, baseId, mediaTableName, mediaId, RelationType.MEDIA);\n}\n\nGeoPackageAPI.getLinkedMedia = function(geopackage, baseTableName, baseId) {\n  var relationships = GeoPackageAPI.getRelatedRows(geopackage, baseTableName, baseId);\n  var mediaRelationships = [];\n  for (var i = 0; i < relationships.length; i++) {\n    var relationship = relationships[i];\n    if (relationship.relation_name === RelationType.MEDIA.name) {\n      for (var r = 0; r < relationship.mappingRows.length; r++) {\n        var row = relationship.mappingRows[r].row;\n        mediaRelationships.push(row);\n      }\n    }\n  }\n\n  return mediaRelationships;\n}\n\nGeoPackageAPI.getRelatedRows = function(geopackage, baseTableName, baseId) {\n  return geopackage.getRelatedTablesExtension().getRelatedRows(baseTableName, baseId);\n}\n\n/**\n * Adds a GeoJSON feature to the GeoPackage\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {object}   feature    GeoJSON feature to add\n * @param  {String}   tableName  name of the table that will store the feature\n */\nGeoPackageAPI.addGeoJSONFeatureToGeoPackage = function(geopackage, feature, tableName) {\n  var featureDao = geopackage.getFeatureDao(tableName);\n  var srs = featureDao.getSrs();\n  var featureRow = featureDao.newRow();\n  var geometryData = new GeometryData();\n  geometryData.setSrsId(srs.srs_id);\n  var srs = featureDao.getSrs();\n  if (!(srs.organization === 'EPSG' && srs.organization_coordsys_id === 4326)) {\n    feature = reproject.reproject(feature, 'EPSG:4326', featureDao.projection);\n  }\n\n  var featureGeometry = typeof feature.geometry === 'string' ? JSON.parse(feature.geometry) : feature.geometry;\n  var geometry = wkx.Geometry.parseGeoJSON(featureGeometry);\n  geometryData.setGeometry(geometry);\n  featureRow.setGeometry(geometryData);\n  for (var propertyKey in feature.properties) {\n    if (feature.properties.hasOwnProperty(propertyKey)) {\n      featureRow.setValueWithColumnName(propertyKey, feature.properties[propertyKey]);\n    }\n  }\n\n  return featureDao.create(featureRow);\n};\n\n/**\n * Adds a GeoJSON feature to the GeoPackage and updates the FeatureTableIndex extension if it exists\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {object}   feature    GeoJSON feature to add\n * @param  {String}   tableName  name of the table that will store the feature\n */\nGeoPackageAPI.addGeoJSONFeatureToGeoPackageAndIndex = function(geopackage, feature, tableName) {\n  var featureDao = geopackage.getFeatureDao(tableName);\n  if (!featureDao) throw new Error('No feature Dao for table ', + tableName);\n  var srs = featureDao.getSrs();\n  var featureRow = featureDao.newRow();\n  var geometryData = new GeometryData();\n  geometryData.setSrsId(srs.srs_id);\n\n  var reprojectedFeature = reproject.reproject(feature, 'EPSG:4326', featureDao.projection);\n\n  var featureGeometry = typeof reprojectedFeature.geometry === 'string' ? JSON.parse(reprojectedFeature.geometry) : reprojectedFeature.geometry;\n  var geometry = wkx.Geometry.parseGeoJSON(featureGeometry);\n  geometryData.setGeometry(geometry);\n  featureRow.setGeometry(geometryData);\n  for (var propertyKey in feature.properties) {\n    if (feature.properties.hasOwnProperty(propertyKey)) {\n      featureRow.setValueWithColumnName(propertyKey, feature.properties[propertyKey]);\n    }\n  }\n\n  var id = featureDao.create(featureRow);\n  var fti = featureDao.featureTableIndex;\n  var tableIndex = fti.getTableIndex();\n  if (!tableIndex) return id;\n  fti.indexRow(tableIndex, id, geometryData);\n  fti.updateLastIndexed(tableIndex);\n  return id;\n};\n\n/**\n * Queries for GeoJSON features in a feature tables\n * @param  {String}   geoPackagePath  path to the GeoPackage file\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} callback    Caled with err, featureArray\n */\nGeoPackageAPI.queryForGeoJSONFeaturesInTableFromPath = function(geoPackagePath, tableName, boundingBox) {\n  return GeoPackageAPI.open(geoPackagePath)\n  .then(function(geoPackage) {\n    var features = geoPackage.queryForGeoJSONFeaturesInTable(tableName, boundingBox);\n    geoPackage.close();\n    return features;\n  });\n}\n\n/**\n * Queries for GeoJSON features in a feature tables\n * @param  {module:geoPackage~GeoPackage}   geoPackage  open GeoPackage object\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} callback    Caled with err, featureArray\n */\nGeoPackageAPI.queryForGeoJSONFeaturesInTable = function(geoPackage, tableName, boundingBox) {\n  return geoPackage.queryForGeoJSONFeaturesInTable(tableName, boundingBox);\n}\n\n/**\n * Iterates GeoJSON features in a feature table that matches the bounding box\n * @param  {module:geoPackage~GeoPackage}   geoPackage  open GeoPackage object\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} rowCallback    Caled with err, and GeoJSON feature\n * @param  {Function} doneCallback    Caled with err if one occurred\n */\nGeoPackageAPI.iterateGeoJSONFeaturesInTableWithinBoundingBox = function(geoPackage, tableName, boundingBox) {\n  return geoPackage.iterateGeoJSONFeaturesInTableWithinBoundingBox(tableName, boundingBox);\n}\n\n\n/**\n * Iterates GeoJSON features in a feature table that matches the bounding box\n * @param  {String}   geoPackagePath  path to the GeoPackage file\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} rowCallback    Caled with err, and GeoJSON feature\n * @param  {Function} doneCallback    Caled with err if one occurred\n */\nGeoPackageAPI.iterateGeoJSONFeaturesFromPathInTableWithinBoundingBox = function(geoPackagePath, tableName, boundingBox) {\n  return GeoPackageAPI.open(geoPackagePath)\n  .then(function(geoPackage) {\n    return geoPackage.iterateGeoJSONFeaturesInTableWithinBoundingBox(tableName, boundingBox);\n  });\n}\n\nGeoPackageAPI.createDataColumnMap = function(featureDao) {\n  var columnMap = {};\n  var dcd = new DataColumnsDao(featureDao.geoPackage);\n  featureDao.table.columns.forEach(function(column) {\n    var dataColumn = dcd.getDataColumns(featureDao.table.table_name, column.name);\n    columnMap[column.name] = {\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey,\n      dataType: column.dataType ? DataTypes.name(column.dataType) : '',\n      displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,\n      dataColumn: dataColumn\n    };\n  }.bind(this));\n  return columnMap;\n}\n\n/**\n * Iterate GeoJSON features from table\n * @param  {module:geoPackage~GeoPackage} geopackage      open GeoPackage object\n * @param  {String} table           Table name to Iterate\n * @return {Iterator<module:user/feature/featureRow~FeatureRow>}\n */\nGeoPackageAPI.iterateGeoJSONFeaturesFromTable = function(geopackage, table) {\n  var featureDao = geopackage.getFeatureDao(table);\n  if (!featureDao) {\n    throw new Error('No Table exists with the name ' + table);\n  }\n\n  var columnMap = GeoPackageAPI.createDataColumnMap(featureDao);\n\n  var srs = featureDao.getSrs();\n\n  var iterator = featureDao.queryForEach();\n\n  return {\n    srs: srs,\n    featureDao: featureDao,\n    results: {\n      [Symbol.iterator]() {\n        return this;\n      },\n      next: function() {\n        var nextRow = iterator.next();\n        if (!nextRow.done) {\n          var featureRow;\n          var geometry;\n\n          while(!nextRow.done && !geometry) {\n            featureRow = featureDao.getRow(nextRow.value);\n            return {\n              value: GeoPackageAPI.parseFeatureRowIntoGeoJSON(featureRow, srs, columnMap),\n              done: false\n            };\n          }\n        }\n        return {\n          done: true\n        }\n      }.bind(this)\n    }\n  };\n};\n\n/**\n * Gets a GeoJSON feature from the table by id\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table to get the feature from\n * @param  {Number}   featureId  ID of the feature\n * @param  {Function} callback   called with an error if one occurred and the GeoJSON feature\n */\nGeoPackageAPI.getFeature = function(geopackage, table, featureId) {\n  var srs;\n  var featureDao = geopackage.getFeatureDao(table)\n  srs = featureDao.getSrs();\n  var feature = featureDao.queryForId(featureId);\n  if (!feature) {\n    var features = featureDao.queryForAllEq('_feature_id', featureId)\n    if (features.length) {\n      feature = featureDao.getRow(features[0]);\n    } else {\n      var features = featureDao.queryForAllEq('_properties_id', featureId)\n      if (features.length) {\n        feature = featureDao.getRow(features[0]);\n      }\n    }\n  }\n  if (feature) {\n    return GeoPackageAPI.parseFeatureRowIntoGeoJSON(feature, srs);\n  }\n};\n\nGeoPackageAPI.parseFeatureRowIntoGeoJSON = function(featureRow, srs, columnMap) {\n  var geoJson = {\n    type: 'Feature',\n    properties: {}\n  };\n  var geometry = featureRow.getGeometry();\n  if (geometry && geometry.geometry) {\n    var geom = geometry.geometry;\n    var geoJsonGeom = geometry.geometry.toGeoJSON();\n    if (srs.definition && srs.definition !== 'undefined' && (srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id) != 'EPSG:4326') {\n      // geoJsonGeom = reproject.reproject(geoJsonGeom, srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id, 'EPSG:4326');\n      geoJsonGeom = reproject.reproject(geoJsonGeom, srs.getProjection(), 'EPSG:4326');\n\n    }\n    geoJson.geometry = geoJsonGeom;\n  }\n\n  for (var key in featureRow.values) {\n    if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') {\n      if (key.toLowerCase() == '_feature_id') {\n        geoJson.id = featureRow.values[key];\n      } else if (key.toLowerCase() == '_properties_id') {\n        geoJson.properties[key.substring(12)] = featureRow.values[key];\n      } else if (columnMap && columnMap[key]) {\n        geoJson.properties[columnMap[key].displayName] = featureRow.values[key];\n      } else {\n        geoJson.properties[key] = featureRow.values[key];\n      }\n    } else if (featureRow.getGeometryColumn().name === key) {\n      // geoJson.properties[key] = geometry && !geometry.geometryError ? 'Valid' : geometry.geometryError;\n    }\n  }\n  geoJson.id = geoJson.id || featureRow.getId();\n  return geoJson;\n}\n\n\n/**\n * Gets a tile from the specified table\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table to get the tile from\n * @param  {Number}   zoom       zoom level of the tile\n * @param  {Number}   tileRow    row of the tile\n * @param  {Number}   tileColumn column of the tile\n *\n * @todo jsdoc return value\n */\nGeoPackageAPI.getTileFromTable = function(geopackage, table, zoom, tileRow, tileColumn) {\n  var tileDao = geopackage.getTileDao(table);\n  return tileDao.queryForTile(tileColumn, tileRow, zoom);\n};\n\n/**\n * Gets the tiles in the EPSG:4326 bounding box\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the tile table\n * @param  {Number}   zoom       Zoom of the tiles to query for\n * @param  {Number}   west       EPSG:4326 western boundary\n * @param  {Number}   east       EPSG:4326 eastern boundary\n * @param  {Number}   south      EPSG:4326 southern boundary\n * @param  {Number}   north      EPSG:4326 northern boundary\n * @param  {Function} callback   called with an error if one occurred and a tiles object describing the tiles\n */\nGeoPackageAPI.getTilesInBoundingBox = function(geopackage, table, zoom, west, east, south, north) {\n  var tiles = {};\n\n  var tileDao = geopackage.getTileDao(table);\n  if (zoom < tileDao.minZoom || zoom > tileDao.maxZoom) {\n    return\n  }\n  tiles.columns = [];\n  for (var i = 0; i < tileDao.table.columns.length; i++) {\n    var column = tileDao.table.columns[i];\n    tiles.columns.push({\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey\n    });\n  }\n  var srs = tileDao.getSrs();\n  tiles.srs = srs;\n  tiles.tiles = [];\n\n  var tms = tileDao.tileMatrixSet;\n  var tm = tileDao.getTileMatrixWithZoomLevel(zoom);\n  if (!tm) {\n    return tiles;\n  }\n  var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north);\n  tiles.west = Math.max(-180, west).toFixed(2);\n  tiles.east = Math.min(east, 180).toFixed(2);\n  tiles.south = south.toFixed(2);\n  tiles.north = north.toFixed(2);\n  tiles.zoom = zoom;\n  mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id);\n\n  var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox);\n\n  var iterator = tileDao.queryByTileGrid(grid, zoom);\n\n  for (var row of iterator ) {\n    var tile = {};\n    tile.tableName = table;\n    tile.id = row.getId();\n\n    var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow());\n    tile.minLongitude = tileBB.minLongitude;\n    tile.maxLongitude = tileBB.maxLongitude;\n    tile.minLatitude = tileBB.minLatitude;\n    tile.maxLatitude = tileBB.maxLatitude;\n    tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id;\n    tile.values = [];\n    for (var i = 0; i < tiles.columns.length; i++) {\n      var value = row.values[tiles.columns[i].name];\n      if (tiles.columns[i].name === 'tile_data') {\n        tile.values.push('data');\n      } else\n      if (value === null || value === 'null') {\n        tile.values.push('');\n      } else {\n        tile.values.push(value.toString());\n        tile[tiles.columns[i].name] = value;\n      }\n    }\n    tiles.tiles.push(tile);\n  }\n  return tiles;\n};\n\n/**\n * Gets the tiles in the EPSG:4326 bounding box\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the tile table\n * @param  {Number}   zoom       Zoom of the tiles to query for\n * @param  {Number}   west       EPSG:4326 western boundary\n * @param  {Number}   east       EPSG:4326 eastern boundary\n * @param  {Number}   south      EPSG:4326 southern boundary\n * @param  {Number}   north      EPSG:4326 northern boundary\n * @param  {Function} callback   called with an error if one occurred and a tiles object describing the tiles\n */\nGeoPackageAPI.getTilesInBoundingBoxWebZoom = function(geopackage, table, webZoom, west, east, south, north) {\n  var tiles = {};\n\n  var tileDao = geopackage.getTileDao(table);\n  if (webZoom < tileDao.minWebZoom || webZoom > tileDao.maxWebZoom) {\n    return;\n  }\n  tiles.columns = [];\n  for (var i = 0; i < tileDao.table.columns.length; i++) {\n    var column = tileDao.table.columns[i];\n    tiles.columns.push({\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey\n    });\n  }\n  var srs = tileDao.getSrs();\n  tiles.srs = srs;\n  tiles.tiles = [];\n\n  var zoom = tileDao.webZoomToGeoPackageZoom(webZoom);\n\n  var tms = tileDao.tileMatrixSet;\n  var tm = tileDao.getTileMatrixWithZoomLevel(zoom);\n  if (!tm) {\n    return tiles;\n  }\n  var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north);\n  tiles.west = Math.max(-180, west).toFixed(2);\n  tiles.east = Math.min(east, 180).toFixed(2);\n  tiles.south = south.toFixed(2);\n  tiles.north = north.toFixed(2);\n  tiles.zoom = zoom;\n  mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id);\n\n  var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox);\n\n  var iterator = tileDao.queryByTileGrid(grid, zoom);\n  for (var row of iterator) {\n    var tile = {};\n    tile.tableName = table;\n    tile.id = row.getId();\n\n    var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow());\n    tile.minLongitude = tileBB.minLongitude;\n    tile.maxLongitude = tileBB.maxLongitude;\n    tile.minLatitude = tileBB.minLatitude;\n    tile.maxLatitude = tileBB.maxLatitude;\n    tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id;\n    tile.values = [];\n    for (var i = 0; i < tiles.columns.length; i++) {\n      var value = row.values[tiles.columns[i].name];\n      if (tiles.columns[i].name === 'tile_data') {\n        tile.values.push('data');\n      } else\n      if (value === null || value === 'null') {\n        tile.values.push('');\n      } else {\n        tile.values.push(value.toString());\n        tile[tiles.columns[i].name] = value;\n      }\n    }\n    tiles.tiles.push(tile);\n  }\n  return tiles;\n};\n\nGeoPackageAPI.getFeatureTileFromXYZ = function(geopackage, table, x, y, z, width, height) {\n  x = Number(x);\n  y = Number(y);\n  z = Number(z);\n  width = Number(width);\n  height = Number(height);\n  var featureDao = geopackage.getFeatureDao(table)\n  if (!featureDao) return;\n  var ft = new FeatureTile(featureDao, width, height);\n  return ft.drawTile(x, y, z);\n}\n\n/**\n * Gets the features in the EPSG:4326 bounding box\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the feature table\n * @param  {Number}   west       EPSG:4326 western boundary\n * @param  {Number}   east       EPSG:4326 eastern boundary\n * @param  {Number}   south      EPSG:4326 southern boundary\n * @param  {Number}   north      EPSG:4326 northern boundary\n */\nGeoPackageAPI.getGeoJSONFeaturesInTile = function(geopackage, table, x, y, z, skipVerification) {\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z);\n  var bb = webMercatorBoundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326');\n  return geopackage.indexFeatureTable(table)\n  .then(function(indexed) {\n    return geopackage.getFeatureDao(table);\n  })\n  .then(function(featureDao) {\n    if (!featureDao) return;\n    var features = [];\n    var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(bb, skipVerification);\n    for (var feature of iterator) {\n      features.push(feature);\n    }\n    return features;\n  })\n  .catch(function(error) {\n    console.log('error', error);\n  });\n}\n\nGeoPackageAPI.convertPBFToVectorTile = function(pbf) {\n  return new VectorTile.VectorTile(new Pbf(pbf));\n}\n\n/**\n * Gets a mapbox VectorTile for the x y z web mercator tile specified\n * @param  {module:geoPackage~GeoPackage} geopackage open GeoPackage object\n * @param  {String} table      table name\n * @param  {Number} x          x tile\n * @param  {Number} y          y tile\n * @param  {Number} z          web zoom\n * @return {VectorTile}\n */\nGeoPackageAPI.getVectorTile = function(geopackage, table, x, y, z) {\n  return GeoPackageAPI.getVectorTileProtobuf(geopackage, table, x, y, z)\n  .then(function(pbf) {\n    return new VectorTile.VectorTile(new Pbf(pbf));\n  });\n}\n\n/**\n * Gets a protobuf for the x y z web mercator tile specified\n * @param  {module:geoPackage~GeoPackage} geopackage open GeoPackage object\n * @param  {String} table      table name\n * @param  {Number} x          x tile\n * @param  {Number} y          y tile\n * @param  {Number} z          web zoom\n * @return {Protobuf}\n */\nGeoPackageAPI.getVectorTileProtobuf = function(geopackage, table, x, y, z) {\n  return GeoPackageAPI.getGeoJSONFeaturesInTile(geopackage, table, x, y, z, true)\n  .then(function(features) {\n    var featureCollection = {\n      type: 'FeatureCollection',\n      features: features\n    };\n    var tileBuffer = 8;\n    var tileIndex = geojsonvt(featureCollection, {buffer: tileBuffer * 8, maxZoom: z});\n    var layer = {};\n    var tile = tileIndex.getTile(z, x, y);\n\n    var gjvt = {};\n\n    if (tile) {\n      gjvt[table] = tile;\n    } else {\n      gjvt[table] = {features:[]};\n    }\n\n    return vtpbf.fromGeojsonVt(gjvt);\n  });\n}\n\n/**\n * Gets the features in the EPSG:4326 bounding box\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the feature table\n * @param  {Number}   west       EPSG:4326 western boundary\n * @param  {Number}   east       EPSG:4326 eastern boundary\n * @param  {Number}   south      EPSG:4326 southern boundary\n * @param  {Number}   north      EPSG:4326 northern boundary\n */\nGeoPackageAPI.getFeaturesInBoundingBox = function(geopackage, table, west, east, south, north) {\n  return geopackage.indexFeatureTable(table)\n  .then(function(indexed) {\n    var featureDao = geopackage.getFeatureDao(table);\n    if (!featureDao) throw new Error('Unable to find table ' + table);\n    var features = [];\n    var bb = new BoundingBox(west, east, south, north);\n    var iterator = featureDao.queryIndexedFeaturesWithBoundingBox(bb);\n    return iterator;\n  });\n}\n\n/**\n * Gets a tile image for an XYZ tile pyramid location\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table containing the tiles\n * @param  {Number}   x          x index of the tile\n * @param  {Number}   y          y index of the tile\n * @param  {Number}   z          zoom level of the tile\n * @param  {Number}   width      width of the resulting tile\n * @param  {Number}   height     height of the resulting tile\n * @return {Promise}\n */\nGeoPackageAPI.getTileFromXYZ = function(geopackage, table, x, y, z, width, height) {\n  x = Number(x);\n  y = Number(y);\n  z = Number(z);\n  width = Number(width);\n  height = Number(height);\n  var tileDao = geopackage.getTileDao(table);\n  var retriever = new GeoPackageTileRetriever(tileDao, width, height);\n  return retriever.getTile(x, y, z);\n};\n\n/**\n * Draws an XYZ tile pyramid location into the provided canvas\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table containing the tiles\n * @param  {Number}   x          x index of the tile\n * @param  {Number}   y          y index of the tile\n * @param  {Number}   z          zoom level of the tile\n * @param  {Number}   width      width of the resulting tile\n * @param  {Number}   height     height of the resulting tile\n * @param  {Canvas}   canvas     canvas element to draw the tile into\n */\nGeoPackageAPI.drawXYZTileInCanvas = function(geopackage, table, x, y, z, width, height, canvas) {\n  x = Number(x);\n  y = Number(y);\n  z = Number(z);\n  width = Number(width);\n  height = Number(height);\n  var tileDao = geopackage.getTileDao(table)\n  var retriever = new GeoPackageTileRetriever(tileDao, width, height);\n  return retriever.drawTileIn(x, y, z, canvas);\n};\n\n/**\n * Draws a tile specified by the bounds in EPSG:4326 into the canvas\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table containing the tiles\n * @param  {Number}   minLat     minimum latitude bounds of tile\n * @param  {Number}   minLon     minimum longitude bounds of tile\n * @param  {Number}   maxLat     maximum latitude bounds of tile\n * @param  {Number}   maxLon     maximum longitude bounds of tile\n * @param  {Number}   z          zoom level of the tile\n * @param  {Number}   width      width of the resulting tile\n * @param  {Number}   height     height of the resulting tile\n * @param  {Canvas}   canvas     canvas element to draw the tile into\n */\nGeoPackageAPI.draw4326TileInCanvas = function(geopackage, table, minLat, minLon, maxLat, maxLon, z, width, height, canvas) {\n  z = Number(z);\n  width = Number(width);\n  height = Number(height);\n  var tileDao = geopackage.getTileDao(table);\n  var retriever = new GeoPackageTileRetriever(tileDao, width, height);\n  var bounds = new BoundingBox(minLon, maxLon, minLat, maxLat);\n  return retriever.drawTileWithWgs84BoundsInProjection(bounds, z, 'EPSG:4326', canvas);\n}\n\n\n///////////////////\n// JSDoc Globals //\n///////////////////\n\n/**\n * @callback geopackageCallback\n * @param {?Error} error\n * @param {module:geoPackage~GeoPackage=} geopackage a GeoPackage instance\n */\n\n /**\n  * An integer database key referencing a {@link module:core/srs~SpatialReferenceSystem} row in a GeoPackage database\n  * @typedef {number} SRSRef\n  * @see https://www.geopackage.org/spec121/index.html#spatial_ref_sys\n  */\n\n}).call(this,require('_process'))\n},{\"./boundingBox\":7,\"./dataColumns\":13,\"./db/dataTypes\":14,\"./db/geoPackageConnection\":15,\"./db/tableCreator\":19,\"./extension/index/featureTableIndex\":26,\"./extension/relatedTables/mediaTable\":35,\"./extension/relatedTables/relationType\":36,\"./extension/relatedTables/simpleAttributesTable\":39,\"./features/columns\":64,\"./features/user/featureColumn\":65,\"./geoPackage\":70,\"./geom/geometryData\":73,\"./tiles/features\":87,\"./tiles/retriever\":92,\"./tiles/tileBoundingBoxUtils\":93,\"./user/userColumn\":105,\"./validate/geoPackageValidate\":110,\"@mapbox/vector-tile\":113,\"_process\":284,\"fs\":177,\"geojson-vt\":226,\"path\":276,\"pbf\":277,\"reproject\":315,\"vt-pbf\":345,\"wkx\":360}],3:[function(require,module,exports){\n/**\n * @module attributes/attributeDao\n */\n\nvar UserDao = require('../user/userDao')\n  , AttributeRow = require('./attributeRow');\n\nvar util = require('util');\n\n/**\n * Attribute DAO for reading attribute user data tables\n * @class AttributeDao\n * @extends {module:user/userDao~UserDao}\n * @param  {module:geoPackage~GeoPackage} geopackage              geopackage object\n * @param  {module:attributes/attributeTable~AttributeTable} table           attribute table\n */\nvar AttributeDao = function(geoPackage, table) {\n  UserDao.call(this, geoPackage, table);\n  if (!table.contents) {\n    throw new Error('Attributes table has null Contents');\n  }\n  /**\n   * Contents of this AttributeDao\n   * @member {module:core/contents~Contents}\n   */\n  this.contents = table.contents;\n}\n\nutil.inherits(AttributeDao, UserDao);\n\n/**\n * Create a new attribute row with the column types and values\n * @param  {Array} columnTypes column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {moule:attributes/attributeRow~AttributeRow}             attribute row\n */\nAttributeDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new AttributeRow(this.table, columnTypes, values);\n};\n\n/**\n * Create a new attribute row\n * @return {module:attributes/attributeRow~AttributeRow} attribute row\n */\nAttributeDao.prototype.newRow = function () {\n  return new AttributeRow(this.table);\n};\n\nmodule.exports = AttributeDao;\n\n},{\"../user/userDao\":106,\"./attributeRow\":4,\"util\":343}],4:[function(require,module,exports){\n/**\n * AttributeRow module.\n * @module attributes/attributeRow\n */\n\nvar UserRow = require('../user/userRow');\nvar util = require('util');\n\n/**\n * Attribute Row containing the values from a single result set row\n * @class AttributeRow\n * @extends module:user/userRow~UserRow\n * @param  {module:attributes/attributeTable~AttributeTable} attributeTable attribute table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n */\nvar AttributeRow = function(attributeTable, columnTypes, values) {\n  UserRow.call(this, attributeTable, columnTypes, values);\n}\n\nutil.inherits(AttributeRow, UserRow);\n\nmodule.exports = AttributeRow;\n\n},{\"../user/userRow\":107,\"util\":343}],5:[function(require,module,exports){\n/**\n * @module attributes/attributeTable\n */\n\nvar UserTable = require('../user/userTable')\n  , ContentsDao = require('../core/contents').ContentsDao;\n\nvar util = require('util');\n\n/**\n * Represents a user attribute table\n * @class AttributeTable\n * @extends {module:user/userTable~UserTable}\n * @constructor\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   attribute columns\n */\nvar AttributeTable = function(tableName, columns) {\n  /**\n   * Contents of this AttributeTable\n   * @member {module:core/contents~Contents}\n   */\n  this.contents;\n\n  UserTable.call(this, tableName, columns);\n}\n\nutil.inherits(AttributeTable, UserTable);\n\n/**\n * Set the contents\n * @param  {module:core/contents~Contents} contents the contents\n */\nAttributeTable.prototype.setContents = function(contents) {\n  this.contents = contents;\n  if (contents.data_type !== ContentsDao.GPKG_CDT_ATTRIBUTES_NAME) {\n    throw new Error('The Contents of an Attributes Table must have a data type of ' + ContentsDao.GPKG_CDT_ATTRIBUTES_NAME);\n  }\n}\n\nmodule.exports = AttributeTable;\n\n},{\"../core/contents\":8,\"../user/userTable\":108,\"util\":343}],6:[function(require,module,exports){\n/**\n * attributeTableReader module.\n * @module attributes/attributeTableReader\n */\n\nvar UserTableReader = require('../user/userTableReader')\n  , AttributeTable = require('./attributeTable')\n  , DataTypes = require('../db/dataTypes');\n\nvar util = require('util');\n\n/**\n* Reads the metadata from an existing attribute table\n* @class AttributeTableReader\n* @extends {module:user/userTableReader~UserTableReader}\n* @classdesc Reads the metadata from an existing attributes table\n*/\nvar AttributeTableReader = function(tableName) {\n  UserTableReader.call(this, tableName);\n}\n\nutil.inherits(AttributeTableReader, UserTableReader);\n\n/**\n * @inheritdoc\n */\nAttributeTableReader.prototype.createTable = function (tableName, columns) {\n  return new AttributeTable(tableName, columns);\n};\n\nmodule.exports = AttributeTableReader;\n\n},{\"../db/dataTypes\":14,\"../user/userTableReader\":109,\"./attributeTable\":5,\"util\":343}],7:[function(require,module,exports){\nvar proj4 = require('proj4');\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\n/**\n * Create a new bounding box\n * @class BoundingBox\n * @param  {Number} minLongitudeOrBoundingBox minimum longitude or bounding box to copy (west)\n * @param  {Number} maxLongitude              maximum longitude (east)\n * @param  {Number} minLatitude               Minimum latitude (south)\n * @param  {Number} maxLatitude               Maximum latitude (north)\n * @return {BoundingBox}                      newly constructed bounding box\n */\nvar BoundingBox = function(minLongitudeOrBoundingBox, maxLongitude, minLatitude, maxLatitude) {\n  // if there is a second argument the first argument is the minLongitude\n  if (maxLongitude !== undefined) {\n    this.minLongitude = minLongitudeOrBoundingBox;\n    this.maxLongitude = maxLongitude;\n    this.minLatitude = minLatitude;\n    this.maxLatitude = maxLatitude;\n  } else {\n    var boundingBox = minLongitudeOrBoundingBox;\n    this.minLongitude = boundingBox.minLongitude;\n    this.maxLongitude = boundingBox.maxLongitude;\n    this.minLatitude = boundingBox.minLatitude;\n    this.maxLatitude = boundingBox.maxLatitude;\n  }\n}\n\nmodule.exports = BoundingBox;\n\n/**\n * Build a Geometry Envelope from the bounding box\n *\n * @return geometry envelope\n */\nBoundingBox.prototype.buildEnvelope = function () {\n  return {\n    minY: this.minLatitude,\n    minX: this.minLongitude,\n    maxY: this.maxLatitude,\n    maxX: this.maxLongitude\n  };\n};\n\nBoundingBox.prototype.toGeoJSON = function() {\n  return {\n    \"type\": \"Feature\",\n    \"properties\": {},\n    \"geometry\": {\n      \"type\": \"Polygon\",\n      \"coordinates\": [\n        [\n          [this.minLongitude,this.minLatitude],\n          [this.maxLongitude,this.minLatitude],\n          [this.maxLongitude,this.maxLatitude],\n          [this.minLongitude,this.maxLatitude],\n          [this.minLongitude,this.minLatitude]\n        ]\n      ]\n    }\n  };\n}\n\n/**\n * Determine if equal to the provided bounding box\n * @param  {BoundingBox} boundingBox bounding boundingBox\n * @return {Boolean}             true if equal, false if not\n */\nBoundingBox.prototype.equals = function (boundingBox) {\n  if (!boundingBox) {\n    return false;\n  }\n\n  if (this === boundingBox) {\n    return true;\n  }\n\n  return this.maxLatitude === boundingBox.maxLatitude\n    && this.minLatitude === boundingBox.minLatitude\n    && this.maxLongitude === boundingBox.maxLongitude\n    && this.maxLatitude === boundingBox.maxLatitude;\n};\n\nBoundingBox.prototype.projectBoundingBox = function (from, to) {\n  if (from && from !== 'undefined' && to && to !== 'undefined') {\n    var toProj = to.toUpperCase ? proj4(to) : to;\n    var fromProj = from.toUpperCase ? proj4(from) : from;\n    if (to.toUpperCase && to.toUpperCase() === 'EPSG:3857' && from.toUpperCase && from.toUpperCase() === 'EPSG:4326') {\n      this.maxLatitude = this.maxLatitude > 85.0511 ? 85.0511 : this.maxLatitude;\n      this.minLatitude = this.minLatitude < -85.0511 ? -85.0511 : this.minLatitude;\n      this.minLongitude = this.minLongitude < -180.0 ? -180.0 : this.minLongitude;\n      this.maxLongitude = this.maxLongitude > 180.0 ? 180.0 : this.maxLongitude;\n    }\n    var min = proj4(from, to, [this.minLongitude, this.minLatitude]);\n    var max = proj4(from, to, [this.maxLongitude, this.maxLatitude]);\n    var projected = new BoundingBox(min[0], max[0], min[1], max[1]);\n    return projected;\n  } else {\n    return this;\n  }\n};\n\n\n\n// /**\n//  *  Get a Map Rectangle representing the bounding box\n//  *\n//  *  @return map rectangle\n//  */\n// -(MKMapRect) getMapRect;\n//\n// /**\n//  *  Get a Coordinate Region of the bounding box\n//  *\n//  *  @return Coordinate Region\n//  */\n// -(MKCoordinateRegion) getCoordinateRegion;\n//\n// /**\n//  *  Get the Span of the bounding box\n//  *\n//  *  @return Span\n//  */\n// -(MKCoordinateSpan) getSpan;\n//\n// /**\n//  *  Get the center of the bounding box\n//  *\n//  *  @return center location\n//  */\n// -(CLLocationCoordinate2D) getCenter;\n//\n// /**\n//  *  Get with width and height of the bounding box in meters\n//  *\n//  *  @return bounding box size\n//  */\n// -(struct GPKGBoundingBoxSize) sizeInMeters;\n\n},{\"proj4\":285}],8:[function(require,module,exports){\n/**\n * Contents module.\n * @module core/contents\n */\n\nvar Dao = require('../../dao/dao')\n  , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao\n  , SpatialReferenceSystemDao = require('../srs').SpatialReferenceSystemDao\n  , TileMatrixDao = require('../../tiles/matrix').TileMatrixDao\n  , TileMatrixSetDao = require('../../tiles/matrixset').TileMatrixSetDao\n  , ColumnValues = require('../../dao/columnValues');\n\nvar util = require('util');\n\n/**\n * The Contents class models rows in the [`gpkg_contents`](https://www.geopackage.org/spec121/index.html#_contents)\n * table.  The contents table stores identifying and descriptive information\n * that an application can display to a user in a menu of geospatial data\n * available in a GeoPackage.\n * @class Contents\n * @see https://www.geopackage.org/spec121/index.html#_contents\n */\nvar Contents = function() {\n  /**\n   * the name of the tiles, or feature table\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * Type of data stored in the table:. “features” per clause Features,\n   * “tiles” per clause Tiles, or an implementer-defined value for other data\n   * tables per clause in an Extended GeoPackage.\n   * @member {string}\n   */\n  this.data_type;\n\n  /**\n   * A human-readable identifier (e.g. short name) for the table_name content\n   * @member {string}\n   */\n  this.identifier;\n\n  /**\n   * A human-readable description for the table_name content\n   * @member {string}\n   */\n  this.description;\n\n  /**\n   * timestamp value in ISO 8601 format as defined by the strftime function\n   * %Y-%m-%dT%H:%M:%fZ format string applied to the current time\n   * @member {Date}\n   */\n  this.last_change;\n\n  /**\n   * Bounding box minimum easting or longitude for all content in table_name\n   * @member {Number}\n   */\n  this.min_x;\n\n  /**\n   * Bounding box minimum northing or latitude for all content in table_name\n   * @member {Number}\n   */\n  this.min_y;\n\n  /**\n   * Bounding box maximum easting or longitude for all content in table_name\n   * @member {Number}\n   */\n  this.max_x;\n\n  /**\n   * Bounding box maximum northing or latitude for all content in table_name\n   * @member {Number}\n   */\n  this.max_y;\n\n  /**\n   * Unique identifier for each Spatial Reference System within a GeoPackage\n   * @member {SRSRef}\n   */\n  this.srs_id;\n}\n\n/**\n * Contents object. Provides identifying and descriptive information that an\n * application can display to a user in a menu of geospatial data that is\n * available for access and/or update.\n * @class ContentsDao\n * @extends {module:dao/dao~Dao}\n */\nvar ContentsDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(ContentsDao, Dao);\n\n/**\n * Creates a new Contents object\n * @return {module:core/contents~Contents} new Contents object\n */\nContentsDao.prototype.createObject = function () {\n  return new Contents();\n};\n\n/**\n * Get table names by table type\n * @param  {string} [tableType] table type to query for\n * @return {string[]}           Array of table names\n */\nContentsDao.prototype.getTables = function(tableType) {\n  var results;\n  if (tableType) {\n    var fieldValues = new ColumnValues();\n    fieldValues.addColumn(ContentsDao.COLUMN_DATA_TYPE, tableType);\n    results = this.queryForColumns('table_name', fieldValues);\n  } else {\n    results = this.queryForColumns('table_name');\n  }\n  var tableNames = [];\n  for (var i = 0; i < results.length; i++) {\n    tableNames.push(results[i].table_name);\n  }\n  return tableNames;\n}\n\n/**\n * Returns the proj4 projection for the Contents\n * @param  {module:core/contents~Contents} contents Contents to get the projection from\n * @return {proj4}          proj4 projection\n */\nContentsDao.prototype.getProjection = function (contents) {\n  var srs = this.getSrs(contents);\n  var srsDao = this.geoPackage.getSpatialReferenceSystemDao();\n  return srsDao.getProjection(srs);\n};\n\n/**\n * Get the SpatialReferenceSystemDao for the Contents\n * @param  {module:core/contents~Contents} contents Contents to get the SpatialReferenceSystemDao from\n * @return {module:core/srs~SpatialReferenceSystemDao}\n */\nContentsDao.prototype.getSrs = function (contents) {\n  var dao = this.geoPackage.getSpatialReferenceSystemDao();\n  return dao.queryForId(contents.srs_id);\n};\n\n/**\n * Get the GeometryColumns for the Contents\n * @param  {module:core/contents~Contents} contents Contents\n * @return {module:features/columns~GeometryColumns}\n */\nContentsDao.prototype.getGeometryColumns = function (contents) {\n  var dao = this.geoPackage.getGeometryColumnsDao();\n  // TODO what is causing this to need to be here and not up in the require section\n  var GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao;\n  var results = dao.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, contents.table_name);\n  if (!results || !results.length) return;\n  var gc = dao.createObject();\n  dao.populateObjectFromResult(gc, results[0]);\n  return gc;\n};\n\n/**\n * Get the TileMatrixSet for the Contents\n * @param  {module:core/contents~Contents} contents Contents\n * @return {module:tiles/matrixset~TileMatrixSet}\n */\nContentsDao.prototype.getTileMatrixSet = function (contents) {\n  var dao = this.geoPackage.getTileMatrixSetDao();\n  var results = dao.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, contents.table_name);\n  if (!results || !results.length) return;\n  var gc = dao.createObject();\n  dao.populateObjectFromResult(gc, results[0]);\n  return gc;\n};\n\n/**\n * Get the TileMatrix for the Contents\n * @param  {module:core/contents~Contents} contents Contents\n * @return {module:tiles/matrix~TileMatrix}\n */\nContentsDao.prototype.getTileMatrix = function (contents) {\n  var dao = this.geoPackage.getTileMatrixDao();\n  var results = dao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, contents.table_name);\n  if (!results || !results.length) return;\n  var tileMatricies = [];\n  for (var i = 0; i < results.length; i++) {\n    var gc = dao.createObject();\n    dao.populateObjectFromResult(gc, results[i]);\n    tileMatricies.push(gc);\n  }\n  return tileMatricies;\n};\n\nContentsDao.TABLE_NAME = \"gpkg_contents\";\nContentsDao.COLUMN_PK = \"table_name\";\nContentsDao.COLUMN_TABLE_NAME = \"table_name\";\nContentsDao.COLUMN_DATA_TYPE = \"data_type\";\nContentsDao.COLUMN_IDENTIFIER = \"identifier\";\nContentsDao.COLUMN_DESCRIPTION = \"description\";\nContentsDao.COLUMN_LAST_CHANGE = \"last_change\";\nContentsDao.COLUMN_MIN_X = \"min_x\";\nContentsDao.COLUMN_MIN_Y = \"min_y\";\nContentsDao.COLUMN_MAX_X = \"max_x\";\nContentsDao.COLUMN_MAX_Y = \"max_y\";\nContentsDao.COLUMN_SRS_ID = \"srs_id\";\n\nContentsDao.GPKG_CDT_FEATURES_NAME = \"features\";\nContentsDao.GPKG_CDT_TILES_NAME = \"tiles\";\nContentsDao.GPKG_CDT_ATTRIBUTES_NAME = \"attributes\";\n\nContentsDao.prototype.gpkgTableName = ContentsDao.TABLE_NAME;\nContentsDao.prototype.idColumns = [ContentsDao.COLUMN_PK];\n\nmodule.exports.ContentsDao = ContentsDao;\nContents.TABLE_NAME = ContentsDao.TABLE_NAME;\nmodule.exports.Contents = Contents;\n\n},{\"../../dao/columnValues\":10,\"../../dao/dao\":11,\"../../features/columns\":64,\"../../tiles/matrix\":90,\"../../tiles/matrixset\":91,\"../srs\":9,\"util\":343}],9:[function(require,module,exports){\n/**\n * SpatialReferenceSystem module.\n * @module core/srs\n */\n\nvar Dao = require('../../dao/dao');\n\nvar util = require('util')\n  , proj4 = require('proj4');\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\n/**\n * Spatial Reference System object. The coordinate reference system definitions it contains are referenced by the GeoPackage Contents and GeometryColumns objects to relate the vector and tile data in user tables to locations on the earth.\n * @class SpatialReferenceSystem\n */\nvar SpatialReferenceSystem = function() {\n  /**\n   * Human readable name of this SRS\n   * @member {string}\n   */\n  this.srs_name;\n  /**\n   * Unique identifier for each Spatial Reference System within a GeoPackage\n   * @member {Number}\n   */\n  this.srs_id;\n\n  /**\n   * Case-insensitive name of the defining organization e.g. EPSG or epsg\n   * @member {string}\n   */\n  this.organization;\n\n  /**\n   * Numeric ID of the Spatial Reference System assigned by the organization\n   * @member {Number}\n   */\n  this.organization_coordsys_id;\n\n  /**\n   * Well-known Text [32] Representation of the Spatial Reference System\n   * @member {string}\n   */\n  this.definition;\n\n  /**\n   * Human readable description of this SRS\n   * @member {string}\n   */\n  this.description;\n\n  /**\n   * Well-known Text Representation of the Spatial Reference System\n   * @member {string}\n   */\n  this.definition_12_063;\n};\n\n/**\n * Return the proj4 projection specified by this SpatialReferenceSystem\n * @return {proj4}\n */\nSpatialReferenceSystem.prototype.getProjection = function() {\n  if(this.organization === 'NONE') return {};\n  if(this.organization_coordsys_id === 4326 && (this.organization === 'EPSG' || this.organization === 'epsg')) {\n    return proj4('EPSG:4326');\n  } else if (this.definition_12_063 && this.definition_12_063 !== '' && this.definition_12_063 !== 'undefined') {\n      return proj4(this.definition_12_063);\n  } else if (this.definition && this.definition !== '' && this.definition !== 'undefined') {\n      return proj4(this.definition);\n  } else if (this.organization && this.organization_coordsys_id) {\n    return proj4(this.organization.toUpperCase() + ':' + this.organization_coordsys_id);\n  } else {\n    return {};\n  }\n}\n\n/**\n * Spatial Reference System Data Access Object\n * @class SpatialReferenceSystemDao\n * @extends {module:dao/dao~Dao}\n * @param {module:geoPackage~GeoPackage} geoPackage The GeoPackage object\n */\nvar SpatialReferenceSystemDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(SpatialReferenceSystemDao, Dao);\n\n/**\n * Create a new SpatialReferenceSystem object\n * @return {module:core/srs~SpatialReferenceSystem}\n */\nSpatialReferenceSystemDao.prototype.createObject = function () {\n  return new SpatialReferenceSystem();\n};\n\n/**\n * Get the Spatial Reference System for the provided id\n * @param  {Number}   srsId srs id\n * @return {module:core/srs~SpatialReferenceSystem}\n */\nSpatialReferenceSystemDao.prototype.getBySrsId = function(srsId) {\n  return this.queryForId(srsId);\n};\n\n/**\n * Return the proj4 projection specified by this SpatialReferenceSystem\n * @return {proj4}\n */\nSpatialReferenceSystemDao.prototype.getProjection = function (srs) {\n  return srs.getProjection();\n};\n\n/**\n * Creates the required EPSG WGS84 Spatial Reference System (spec\n * Requirement 11)\n * @return {Number} id of the created row\n */\nSpatialReferenceSystemDao.prototype.createWgs84 = function() {\n  var srs = this.getBySrsId(4326);\n  if (srs) {\n    return srs;\n  }\n  var srs = new SpatialReferenceSystem();\n  srs.srs_name = 'WGS 84 geodetic';\n  srs.srs_id = 4326;\n  srs.organization = 'EPSG';\n  srs.organization_coordsys_id = 4326;\n  srs.definition = 'GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]';\n  srs.description = 'longitude/latitude coordinates in decimal degrees on the WGS 84 spheroid';\n  if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {\n    srs.definition_12_063 = 'GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]';\n  }\n  return this.create(srs);\n}\n\n/**\n * Creates the required Undefined Cartesian Spatial Reference System (spec\n * Requirement 11)\n * @return {Number} id of the created row\n */\nSpatialReferenceSystemDao.prototype.createUndefinedCartesian = function() {\n  var srs = this.getBySrsId(-1);\n  if (srs) {\n    return srs;\n  }\n  var srs = new SpatialReferenceSystem();\n  srs.srs_name = 'Undefined cartesian SRS';\n  srs.srs_id = -1;\n  srs.organization = 'NONE';\n  srs.organization_coordsys_id = -1;\n  srs.definition = 'undefined';\n  srs.description = 'undefined cartesian coordinate reference system';\n  if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {\n    srs.definition_12_063 = 'undefined';\n  }\n  return this.create(srs);\n}\n\n/**\n * Creates the required Undefined Geographic Spatial Reference System (spec\n * Requirement 11)\n * @return {Number} id of the created row\n */\nSpatialReferenceSystemDao.prototype.createUndefinedGeographic = function() {\n  var srs = this.getBySrsId(0);\n  if (srs) {\n    return srs;\n  }\n  var srs = new SpatialReferenceSystem();\n  srs.srs_name = 'Undefined geographic SRS';\n  srs.srs_id = 0;\n  srs.organization = 'NONE';\n  srs.organization_coordsys_id = 0;\n  srs.definition = 'undefined';\n  srs.description = 'undefined geographic coordinate reference system';\n  if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {\n    srs.definition_12_063 = 'undefined';\n  }\n  return this.create(srs);\n}\n\n/**\n * Creates the Web Mercator Spatial Reference System if it does not already\n * exist\n * @return {Number} id of the created row\n */\nSpatialReferenceSystemDao.prototype.createWebMercator = function() {\n  var srs = this.getBySrsId(3857);\n  if (srs) {\n    return srs;\n  }\n  var srs = new SpatialReferenceSystem();\n  srs.srs_name = 'WGS 84 / Pseudo-Mercator';\n  srs.srs_id = 3857;\n  srs.organization = 'EPSG';\n  srs.organization_coordsys_id = 3857;\n  srs.definition = 'PROJCS[\"WGS 84 / Pseudo-Mercator\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],EXTENSION[\"PROJ4\",\"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs\"],AUTHORITY[\"EPSG\",\"3857\"]]';\n  srs.description = 'Spherical Mercator projection coordinate system';\n  if(this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {\n    srs.definition_12_063 = 'PROJCS[\"WGS 84 / Pseudo-Mercator\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],EXTENSION[\"PROJ4\",\"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs\"],AUTHORITY[\"EPSG\",\"3857\"]]';\n  }\n  return this.create(srs);\n}\n\n/**\n * Spatial Reference System Table Name\n * @type {String}\n */\nSpatialReferenceSystemDao.TABLE_NAME = 'gpkg_spatial_ref_sys';\n\n/**\n * Table Name\n * @type {String}\n */\nSpatialReferenceSystemDao.prototype.gpkgTableName = SpatialReferenceSystemDao.TABLE_NAME;\n\n/**\n * srsName field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_SRS_NAME = \"srs_name\";\n\n/**\n * srsId field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_SRS_ID = \"srs_id\";\n\n/**\n * id field name, srsId\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_ID = SpatialReferenceSystemDao.COLUMN_SRS_ID;\n\n/**\n * organization field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_ORGANIZATION = \"organization\";\n\n/**\n * organizationCoordsysId field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_ORGANIZATION_COORDSYS_ID = \"organization_coordsys_id\";\n\n/**\n * definition field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_DEFINITION = \"definition\";\n\n/**\n * description field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_DESCRIPTION = \"description\";\n\n\nSpatialReferenceSystemDao.prototype.idColumns = [SpatialReferenceSystemDao.COLUMN_SRS_ID];\n\nmodule.exports.SpatialReferenceSystemDao = SpatialReferenceSystemDao;\nSpatialReferenceSystem.TABLE_NAME = SpatialReferenceSystemDao.TABLE_NAME;\nmodule.exports.SpatialReferenceSystem = SpatialReferenceSystem;\n\n},{\"../../dao/dao\":11,\"proj4\":285,\"util\":343}],10:[function(require,module,exports){\n/**\n * @module dao/columnValues\n */\n\n/**\n * Structure to define columns in a table\n * @class ColumnValues\n */\nvar ColumnValues = function() {\n  this.values = {};\n  this.columns = [];\n}\n\nmodule.exports = ColumnValues;\n\n/**\n * adds a column to the structure\n * @param  {string} columnName  name of column to add\n * @param  {module:user/userColumn~UserColumn} column column to add\n */\nColumnValues.prototype.addColumn = function (columnName, column) {\n  this.columns.push(columnName);\n  this.values[columnName] = column;\n};\n\n/**\n * Gets the column by name\n * @param  {string} columnName name of column\n * @return {module:user/userColumn~UserColumn}            user column\n */\nColumnValues.prototype.getValue = function (columnName) {\n  return this.values[columnName];\n};\n\n},{}],11:[function(require,module,exports){\n/**\n * Dao module.\n * @module dao/dao\n */\n\nvar sqliteQueryBuilder = require('../db/sqliteQueryBuilder')\n  , ColumnValues = require('./columnValues');\n\n/**\n * Base DAO\n * @class Dao\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n */\nvar Dao = function(geoPackage) {\n  /**\n   * GeoPackage object this dao belongs to\n   * @type {module:geoPackage~GeoPackage}\n   */\n  this.geoPackage = geoPackage;\n  /**\n   * Database connection to the sqlite file\n   * @type {module:db/geoPackageConnection~GeoPackageConnection}\n   */\n  this.connection = geoPackage.getDatabase();\n}\n\n/**\n * Copies object properties from result object to the object\n * @param  {Object} object object to copy properties to\n * @param  {Object} result object to copy properties from\n */\nDao.prototype.populateObjectFromResult = function (object, result) {\n  if (!result) return;\n  for (var key in result) {\n    object[key] = result[key];\n  }\n};\n\n/**\n * Checks if the table exists\n * @return  {Boolean}\n */\nDao.prototype.isTableExists = function () {\n  var results = this.connection.isTableExists(this.gpkgTableName);\n  return !!results;\n};\n\n/**\n * Refreshes the object by id\n * @param  {Object} object object to refresh\n * @return {Object}\n */\nDao.prototype.refresh = function(object) {\n  return this.queryForSameId(object);\n}\n\n/**\n * Query for object by id\n * @param  {object} id ID of the object to query for\n * @return {Object} object created from the raw database object\n */\nDao.prototype.queryForId = function(id) {\n  var whereString = this.buildPkWhere(id);\n  var whereArgs = this.buildPkWhereArgs(id);\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString);\n  var result = this.connection.get(query, whereArgs);\n  if (!result) return;\n  var object = this.createObject(result);\n  // TOOD something is wrong here\n  this.populateObjectFromResult(object, result);\n  return object;\n};\n\nDao.prototype.queryForSameId = function (object) {\n  var idArray = this.getMultiId(object);\n  return this.queryForMultiId(idArray);\n};\n\nDao.prototype.getMultiId = function (object) {\n  var idValues = [];\n  for (var i = 0; i < this.idColumns.length; i++) {\n    var idValue = object.values ? object.values[this.idColumns[i]] : object[this.idColumns[i]];\n    if (idValue !== undefined) {\n      idValues.push(idValue);\n    }\n  }\n  return idValues;\n};\n\n/**\n * Query for object by multi id\n * @param  {module:dao/columnValues~ColumnValues} idValues ColumnValues with the multi id\n * @return {Object} object created from the raw database object\n */\nDao.prototype.queryForMultiId = function (idValues) {\n  var whereString = this.buildPkWhere(idValues);\n  var whereArgs = this.buildPkWhereArgs(idValues);\n\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString);\n\n  var result = this.connection.get(query, whereArgs);\n  if (!result) return;\n  var object = this.createObject(result);\n  this.populateObjectFromResult(object, result);\n  return object;\n};\n\n/**\n * Queries for all matches and returns them in the callback.  Be aware this pulls all results into memory\n * @param  {string} [where]     Optional where clause\n * @param  {object[]} [whereArgs] Optional where args array\n * @return {Object[]} raw object array from the database\n */\nDao.prototype.queryForAll = function (where, whereArgs) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, where);\n  return this.connection.all(query, whereArgs);\n};\n\n/**\n * Queries for all matches and returns them in the callback.  Be aware this pulls all results into memory\n * @param  {string} fieldName name of the field to query for\n * @param  {string} value     value of the like clause\n * @return {Object[]} raw object array from the database\n */\nDao.prototype.queryForLike = function(fieldName, value) {\n  var values = new ColumnValues();\n  values.addColumn(fieldName, value);\n  var where = this.buildWhereLike(values);\n  var whereArgs = this.buildWhereArgs(value);\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, where);\n  return this.connection.all(query, whereArgs);\n}\n\n/**\n * Queries for all matches and returns them.  Only queries for the specified column name  Be aware this pulls all results into memory\n * @param {string}  columnName  name of the column to query for\n * @param {module:dao/columnValues~ColumnValues} [fieldValues] optional values to filter on\n * @return {Object[]} raw object array from the database\n */\nDao.prototype.queryForColumns = function (columnName, fieldValues) {\n  var where;\n  var whereArgs;\n  if (fieldValues) {\n    where = this.buildWhere(fieldValues);\n    whereArgs = this.buildWhereArgs(fieldValues);\n  }\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", [columnName], where);\n  return this.connection.all(query, whereArgs);\n};\n\n/**\n * Queries for all items in the table with a page size and page number\n * @param  {Number} pageSize size of the chunk to query for\n * @param  {Number} page     chunk number to query for\n * @return {Object[]} raw object array from the database\n */\nDao.prototype.queryForChunk = function(pageSize, page) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, undefined, undefined, undefined, undefined, this.idColumns[0], pageSize, page * pageSize);\n  return this.connection.all(query);\n};\n\n/**\n * Iterate all items in the table one at a time.  If no parameters are passed, iterates the entire table.  Returns an Iterable object\n * @param  {string} [field]   field to filter on\n * @param  {Object} [value]   value to filter on\n * @param  {string} [groupBy] group by clause\n * @param  {string} [having]  having clause\n * @param  {string} [orderBy] order by clause\n * @return {Iterable} iterable of database objects\n */\nDao.prototype.queryForEach = function (field, value, groupBy, having, orderBy) {\n  if (!field) {\n    var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\");\n    var count = 0;\n    return this.connection.each(query);\n  } else {\n    var whereString = this.buildWhereWithFieldAndValue(field, value);\n    var whereArgs = this.buildWhereArgs(value);\n    var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString);\n    return this.connection.each(query, whereArgs);\n  }\n};\n\n/**\n * Iterate all objects in thet able that match the ColumnValues passed in\n * @param  {module:dao/columnValues~ColumnValues} fieldValues ColumnValues to query for\n * @return {Iterable.Object}\n */\nDao.prototype.queryForFieldValues = function (fieldValues) {\n  var whereString = this.buildWhere(fieldValues);\n  var whereArgs = this.buildWhereArgs(fieldValues);\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString);\n  var count = 0;\n  return this.connection.each(query, whereArgs);\n};\n\n/**\n * Iterate all matching objects\n * @param  {string} join      join clause\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs array of where query values\n * @param  {string[]} columns   columns to query for\n * @return {Iterable.<Object>}\n */\nDao.prototype.queryJoinWhereWithArgs = function(join, where, whereArgs, columns) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", columns, where, join);\n  var count = 0;\n  return this.connection.each(query, whereArgs);\n}\n\n/**\n * Count all matching objects\n * @param  {string} join      join clause\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs array of where query values\n * @param  {string[]} columns   columns to query for\n * @return {Number}\n */\nDao.prototype.countJoinWhereWithArgs = function(join, where, whereArgs, columns) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", columns, where, join);\n  return this.connection.all(query, whereArgs).length;\n}\n\n/**\n * Iterate all distinct matching rows in the table\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs array of where query values\n * @return {Iterable.<Object>}\n */\nDao.prototype.queryWhereWithArgsDistinct = function(where, whereArgs) {\n  var query = sqliteQueryBuilder.buildQuery(true, \"'\"+this.gpkgTableName+\"'\", undefined, where);\n  var count = 0;\n  return this.connection.each(query, whereArgs);\n}\n\n/**\n * Iterate all matching rows\n * @param  {string} [where]     where clause\n * @param  {Object[]} [whereArgs] array of where query values\n * @param  {string} [groupBy]   group by clause\n * @param  {string} [having]    having clause\n * @param  {string} [orderBy]   order by clause\n * @param  {string} [limit]     limit clause\n * @return {Iterable.<Object>}\n */\nDao.prototype.queryWhere = function (where, whereArgs, groupBy, having, orderBy, limit) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, where, undefined, groupBy, having, orderBy, limit);\n  return this.connection.each(query, whereArgs);\n};\n\n/**\n * Get the primary key where clause\n * @param  {Object|Object[]} idValue id\n * @return {string} primary key where clause\n */\nDao.prototype.buildPkWhere = function(idValue) {\n  if (Array.isArray(idValue)) {\n    var idValuesArray = idValue;\n    var idColumnValues = new ColumnValues();\n    for (var i = 0; i < idValuesArray.length; i++) {\n      idColumnValues.addColumn(this.idColumns[i], idValuesArray[i]);\n    }\n    return this.buildWhere(idColumnValues);\n  }\n  return this.buildWhereWithFieldAndValue(this.idColumns, idValue);\n};\n\n/**\n * Get the primary key where args\n * @param  {Object} idValue id\n * @return {Object[]} where args\n */\nDao.prototype.buildPkWhereArgs = function (idValue) {\n  if (Array.isArray(idValue)) {\n    var idValuesArray = idValue;\n    var values = [];\n    for (var i = 0; i < idValuesArray.length; i++) {\n      values = values.concat(this.buildWhereArgs(idValuesArray[i]));\n    }\n    return values;\n  }\n  return this.buildWhereArgs(idValue);\n};\n\n/**\n * Build where (or selection) LIKE statement for fields\n * @param  {module:dao/columnValues~ColumnValues} fields    columns and values\n * @param  {string} operation AND or OR\n * @return {string} where clause\n */\nDao.prototype.buildWhereLike = function(fields, operation) {\n  var whereString = '';\n  for (var i = 0; i < fields.columns.length; i++) {\n    var column = fields.columns[i];\n    if (i) {\n      whereString += ' ' + operation + ' ';\n    }\n    whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column), 'like');\n  }\n  return whereString;\n}\n\n/**\n * Build where or selection statement for fields\n * @param  {module:dao/columnValues~ColumnValues} fields    columns and values\n * @param  {string} [operation=AND] AND or OR\n * @return {string} where clause\n */\nDao.prototype.buildWhere = function (fields, operation) {\n  operation = operation || 'and';\n  var whereString = '';\n\n  for (var i = 0; i < fields.columns.length; i++) {\n    var column = fields.columns[i];\n    if (i) {\n      whereString += ' ' + operation + ' ';\n    }\n    whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column));\n  }\n  return whereString;\n};\n\nDao.prototype.buildWhereArgs = function (values) {\n  var args = [];\n  if (Array.isArray(values)) {\n    for (var i = 0; i < values.length; i++) {\n      var value = values[i];\n      if (value !== undefined && value !== null) {\n        args.push(value);\n      }\n    }\n  } else if (values.columns) {\n    for (var i = 0; i < values.columns.length; i++) {\n      var column = values.columns[i];\n      var value = values.getValue(column);\n      if (value !== undefined && value !== null) {\n        args.push(value);\n      }\n    }\n  } else {\n    if(values !== undefined || values !== null) {\n      args.push(values);\n    }\n  }\n  return args.count ? null : args;\n};\n\n/**\n * Builds a where clause from the field and value with an optional operation.  If the value is empty, 'is null' is added to the query for the field\n * @param  {string} field     field name\n * @param  {Object} [value]     optional value to filter on\n * @param  {string} [operation='='] optional operation\n * @return {string} where clause\n */\nDao.prototype.buildWhereWithFieldAndValue = function (field, value, operation) {\n  operation = operation || '=';\n  var whereString = '' + field + ' ';\n  if(value === undefined || value === null){\n    whereString += \"is null\";\n  } else {\n    whereString += operation + ' ?';\n  }\n  return whereString;\n};\n\n/**\n * Query for all rows in the table that match\n * @param  {string} field   field to match\n * @param  {string} value   value to match\n * @param  {string} [groupBy] group by clause\n * @param  {string} [having]  having clause\n * @param  {string} [orderBy] order by clause\n * @return {Object[]} array of raw database objects\n */\nDao.prototype.queryForAllEq = function(field, value, groupBy, having, orderBy) {\n  var whereString = this.buildWhereWithFieldAndValue(field, value);\n  var whereArgs = this.buildWhereArgs(value);\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString, undefined, groupBy, having, orderBy);\n  return this.connection.all(query, whereArgs);\n};\n\n/**\n * Count rows in the table optionally filtered by the parameters specified\n * @param  {module:dao/columnValues~ColumnValues|string} [fields] Either a ColumnValues object or a string specifying a field name\n * @param  {Object} [value]  value to filter on if fields is a string\n * @return {Number} count of objects\n */\nDao.prototype.count = function(fields, value) {\n  if (!fields) {\n    return this.connection.count(this.gpkgTableName);\n  }\n  var where;\n  var whereArgs;\n  var query;\n  if (fields.columns) {\n    where = this.buildWhere(fields, 'and');\n    whereArgs = this.buildWhereArgs(fields);\n    query = sqliteQueryBuilder.buildCount(\"'\"+this.gpkgTableName+\"'\", where);\n  } else {\n    whereString = this.buildWhereWithFieldAndValue(fields, value);\n    whereArgs = this.buildWhereArgs(value);\n    query = sqliteQueryBuilder.buildCount(\"'\"+this.gpkgTableName+\"'\", whereString);\n  }\n  var result = this.connection.get(query, whereArgs);\n  if (!result) return 0;\n  return result.count;\n}\n\n/**\n * Get the min of the column\n * @param  {string} column    column name\n * @param  {string} [where]     where clause\n * @param  {Object[]} [whereArgs] where args\n * @return {Number}\n */\nDao.prototype.minOfColumn = function (column, where, whereArgs) {\n  return this.connection.minOfColumn(\"'\"+this.gpkgTableName+\"'\", column, where, whereArgs);\n};\n\n/**\n * Get the max of the column\n * @param  {string} column    column name\n * @param  {string} [where]     where clause\n * @param  {Object[]} [whereArgs] where args\n * @return {Number}\n */\nDao.prototype.maxOfColumn = function (column, where, whereArgs) {\n  return this.connection.maxOfColumn(\"'\"+this.gpkgTableName+\"'\", column, where, whereArgs);\n};\n\n/**\n * Delete the object passed in.  Object is deleted by id\n * @param  {Object} object object to delete\n * @return {Number} number of objects deleted\n */\nDao.prototype.delete = function(object) {\n  if (object.getId) {\n    return this.deleteById(object.getId());\n  }\n  return this.deleteByMultiId(this.getMultiId(object));\n};\n\n/**\n * Delete the object specified by the id\n * @param  {Object} idValue id value\n * @return {Number} number of objects deleted\n */\nDao.prototype.deleteById = function(idValue) {\n  var where = this.buildPkWhere(idValue);\n  var whereArgs = this.buildPkWhereArgs(idValue);\n\n  return this.connection.delete(\"'\"+this.gpkgTableName+\"'\", where, whereArgs);\n};\n\n/**\n * Delete the object specified by the ids\n * @param  {module:dao/columnValues~ColumnValues} idValue id values\n * @return {Number} number of objects deleted\n */\nDao.prototype.deleteByMultiId = function(idValues) {\n  var where = this.buildPkWhere(idValues);\n  var whereArgs = this.buildPkWhereArgs(idValues);\n\n  return this.connection.delete(\"'\"+this.gpkgTableName+\"'\", where, whereArgs);\n};\n\n/**\n * Delete objects that match the query\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs where arguments\n * @return {Number} number of objects deleted\n */\nDao.prototype.deleteWhere = function(where, whereArgs) {\n  return this.connection.delete(\"'\"+this.gpkgTableName+\"'\", where, whereArgs);\n};\n\n/**\n * Delete all objects in the table\n * @return {Number} number of objects deleted\n */\nDao.prototype.deleteAll = function() {\n  return this.connection.delete(\"'\"+this.gpkgTableName+\"'\", '', []);\n};\n\n/**\n * Insert the object into the table\n * @param  {Object} object object to be inserted\n * @return {Number} id of the inserted object\n */\nDao.prototype.create = function(object) {\n  var sql = sqliteQueryBuilder.buildInsert(\"'\"+this.gpkgTableName+\"'\", object);\n  var insertObject = sqliteQueryBuilder.buildUpdateOrInsertObject(object);\n  return this.connection.insert(sql, insertObject);\n};\n\n/**\n * Update all rows that match the query\n * @param  {module:dao/columnValues~ColumnValues} values    values to insert\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs where arguments\n * @return {Number} number of objects updated\n */\nDao.prototype.updateWithValues = function (values, where, whereArgs) {\n  var update = sqliteQueryBuilder.buildUpdate(\"'\"+this.gpkgTableName+\"'\", values, where, whereArgs);\n  return this.connection.run(update.sql, update.args);\n};\n\n/**\n * Update the object specified\n * @param  {Object} object object with updated values\n * @return {Number} number of objects updated\n */\nDao.prototype.update = function(object) {\n  var updateValues = sqliteQueryBuilder.buildUpdateOrInsertObject(object);\n  var update = sqliteQueryBuilder.buildObjectUpdate(\"'\"+this.gpkgTableName+\"'\", object);\n  var multiId = this.getMultiId(object);\n  if (multiId.length) {\n  var where = ' where ';\n    for (var i = 0; i < multiId.length; i++) {\n      where += '\"' + this.idColumns[i] + '\" = $' + sqliteQueryBuilder.fixColumnName(this.idColumns[i]);\n      updateValues[sqliteQueryBuilder.fixColumnName(this.idColumns[i])] = multiId[i];\n    }\n    update += where;\n  }\n  return this.connection.run(update, updateValues);\n};\n\n/**\n * Queries for the object by id, and if it exists, updates it, otherwise creates a new object\n * @param  {Object} object object to update or create\n * @return {Number} number of objects modified\n */\nDao.prototype.createOrUpdate = function(object) {\n  var existing = this.queryForSameId(object);\n  if (!existing) {\n    return this.create(object);\n  } else {\n    return this.update(object);\n  }\n};\n\n/**\n * Drops this table\n * @return {Number} results of the drop\n */\nDao.prototype.dropTable = function() {\n  return this.connection.dropTable(this.gpkgTableName);\n};\n\nDao.prototype.rename = function(newName) {\n  var result = this.connection.run('ALTER TABLE ' + '\"' + this.gpkgTableName + '\" RENAME TO \"' + newName + '\"');\n  this.gpkgTableName = newName;\n}\n\nmodule.exports = Dao;\n\n},{\"../db/sqliteQueryBuilder\":17,\"./columnValues\":10}],12:[function(require,module,exports){\n/**\n * DataColumnConstraints module.\n * @module dataColumnConstraints\n */\n\nvar Dao = require('../dao/dao');\n\nvar util = require('util');\n\n/**\n * Contains data to specify restrictions on basic data type column values\n * @class DataColumnConstraints\n */\nvar DataColumnConstraints = function() {\n\n  /**\n   * Case sensitive name of constraint\n   * @member {string}\n   */\n  this.constraint_name;\n\n  /**\n   * Lowercase type name of constraint: range | enum | glob\n   * @member {string}\n   */\n  this.constraint_type;\n\n  /**\n   * Specified case sensitive value for enum or glob or NULL for range constraint_type\n   * @member {string}\n   */\n  this.value;\n\n  /**\n   * Minimum value for 'range' or NULL for 'enum' or 'glob' constraint_type\n   * @member {Number}\n   */\n  this.min;\n\n  /**\n   * 0 (false) if min value is exclusive, or 1 (true) if min value is inclusive\n   * @member {Number}\n   */\n  this.min_is_inclusive;\n\n  /**\n   * Maximum value for 'range' or NULL for 'enum' or 'glob' constraint_type\n   * @member {Number}\n   */\n  this.max;\n\n  /**\n   * 0 (false) if max value is exclusive, or 1 (true) if max value is inclusive\n   * @member {Number}\n   */\n  this.max_is_inclusive;\n\n  /**\n   * For ranges and globs, describes the constraing; for enums, describes the enum value.\n   */\n  this.description;\n\n}\n\n/**\n * Data Column Constraints Data Access Object\n * @class\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @extends {module:dao/dao~Dao}\n */\nvar DataColumnConstraintsDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(DataColumnConstraintsDao, Dao);\n\n/**\n * Creates a new DataColumnConstraints object\n * @return {module:dataColumnConstraints~DataColumnConstraints}\n */\nDataColumnConstraintsDao.prototype.createObject = function () {\n  return new DataColumnConstraints();\n};\n\n/**\n * query by constraint name\n * @param  {String} constraintName     constraint name\n * @return {Iterable}\n */\nDataColumnConstraintsDao.prototype.queryByConstraintName = function (constraintName) {\n  return this.queryForEach(DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, constraintName);\n};\n\n/**\n * Query by the unique column values\n * @param  {String} constraintName     constraint name\n * @param  {String} constraintType     constraint type\n * @param  {String} value              value\n * @return {module:dataColumnConstraints~DataColumnConstraints}\n */\nDataColumnConstraintsDao.prototype.queryUnique = function (constraintName, constraintType, value) {\n  var dataColumnConstraints = new DataColumnConstraints();\n  dataColumnConstraints.constraint_name = constraintName;\n  dataColumnConstraints.constraint_type = constraintType;\n  dataColumnConstraints.value = value;\n\n  return this.queryForSameId(dataColumnConstraints);\n};\n\nDataColumnConstraintsDao.TABLE_NAME = \"gpkg_data_column_constraints\";\nDataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME = \"constraint_name\";\nDataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE = \"constraint_type\";\nDataColumnConstraintsDao.COLUMN_VALUE = \"value\";\nDataColumnConstraintsDao.COLUMN_MIN = \"min\";\nDataColumnConstraintsDao.COLUMN_MIN_IS_INCLUSIVE = \"min_is_inclusive\";\nDataColumnConstraintsDao.COLUMN_MAX = \"max\";\nDataColumnConstraintsDao.COLUMN_MAX_IS_INCLUSIVE = \"max_is_inclusive\";\nDataColumnConstraintsDao.COLUMN_DESCRIPTION = \"description\";\n\nDataColumnConstraintsDao.ENUM_TYPE = 'enum';\nDataColumnConstraintsDao.GLOB_TYPE = 'glob';\nDataColumnConstraintsDao.RANGE_TYPE = 'range';\n\nDataColumnConstraintsDao.prototype.gpkgTableName = DataColumnConstraintsDao.TABLE_NAME;\nDataColumnConstraintsDao.prototype.idColumns = [DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, DataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE, DataColumnConstraintsDao.COLUMN_VALUE];\n\nmodule.exports.DataColumnConstraintsDao = DataColumnConstraintsDao;\nmodule.exports.DataColumnConstraints = DataColumnConstraints;\n\n},{\"../dao/dao\":11,\"util\":343}],13:[function(require,module,exports){\n/**\n * DataColumns module.\n * @module dataColumns\n */\n\nvar Dao = require('../dao/dao')\n  , ContentsDao = require('../core/contents').ContentsDao;\n\nvar util = require('util');\n\n/**\n * Stores minimal application schema identifying, descriptive and MIME type\n * information about columns in user vector feature and tile matrix data tables\n * that supplements the data available from the SQLite sqlite_master table and\n * pragma table_info(table_name) SQL function. The gpkg_data_columns data CAN be\n * used to provide more specific column data types and value ranges and\n * application specific structural and semantic information to enable more\n * informative user menu displays and more effective user decisions on the\n * suitability of GeoPackage contents for specific purposes.\n * @class DataColumns\n */\nvar DataColumns = function() {\n  /**\n   * the name of the tiles, or feature table\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * the name of the table column\n   * @member {string}\n   */\n  this.column_name;\n\n  /**\n   * A human-readable identifier (e.g. short name) for the column_name content\n   * @member {string}\n   */\n  this.name;\n\n  /**\n   * A human-readable formal title for the column_name content\n   * @member {string}\n   */\n  this.title;\n\n  /**\n   * A human-readable description for the table_name contente\n   * @member {string}\n   */\n  this.description;\n\n  /**\n   * MIME type of columnName if BLOB type or NULL for other types\n   * @member {string}\n   */\n  this.mime_type;\n\n  /**\n   * Case sensitive column value constraint name specified\n   */\n  this.constraint_name;\n}\n\n/**\n * Contents object. Provides identifying and descriptive information that an\n * application can display to a user in a menu of geospatial data that is\n * available for access and/or update.\n * @class\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @extends {module:dao/dao~Dao}\n */\nvar DataColumnsDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(DataColumnsDao, Dao);\n\n/**\n * Creates a new {module:dataColumns~DataColumns} object\n * @return {module:dataColumns~DataColumns}\n */\nDataColumnsDao.prototype.createObject = function () {\n  return new DataColumns();\n};\n\n/**\n * Get the Contents from the Data Columns\n * @param  {module:dataColumns~DataColumns} dataColumns data columns\n * @return {module:core/contents~Contents}             contents\n */\nDataColumnsDao.prototype.getContents = function (dataColumns) {\n  var cd = new ContentsDao(this.geoPackage);\n  return cd.queryForId(dataColumns.table_name);\n};\n\n/**\n * Query by constraint name\n * @param  {String} constraintName     constraint name\n * @return {Iterator} iterator of database objects\n */\nDataColumnsDao.prototype.queryByConstraintName = function (constraintName) {\n  return this.queryForEach(DataColumnsDao.COLUMN_CONSTRAINT_NAME, constraintName);\n};\n\n/**\n * Get DataColumn by column name and table name\n * @param  {String} tableName  table name\n * @param  {String} columnName column name\n * @return {module:dataColumns~DataColumns}\n */\nDataColumnsDao.prototype.getDataColumns = function (tableName, columnName) {\n  var exists = this.isTableExists();\n  if (!exists) {\n    return;\n  }\n  var where = this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_TABLE_NAME, tableName) +\n    ' and ' +\n    this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_COLUMN_NAME, columnName);\n  var values = [tableName, columnName];\n  var dataColumn;\n  for (var row of this.queryWhere(where, values)) {\n    dataColumn = row;\n  }\n  return dataColumn;\n};\n\nDataColumnsDao.TABLE_NAME = \"gpkg_data_columns\";\nDataColumnsDao.COLUMN_PK1 = \"table_name\";\nDataColumnsDao.COLUMN_PK2 = \"column_name\";\nDataColumnsDao.COLUMN_TABLE_NAME = \"table_name\";\nDataColumnsDao.COLUMN_COLUMN_NAME = \"column_name\";\nDataColumnsDao.COLUMN_NAME = \"name\";\nDataColumnsDao.COLUMN_TITLE = \"title\";\nDataColumnsDao.COLUMN_DESCRIPTION = \"description\";\nDataColumnsDao.COLUMN_MIME_TYPE = \"mime_type\";\nDataColumnsDao.COLUMN_CONSTRAINT_NAME = \"constraint_name\";\n\nDataColumnsDao.prototype.gpkgTableName = DataColumnsDao.TABLE_NAME;\nDataColumnsDao.prototype.idColumns = [DataColumnsDao.COLUMN_PK1, DataColumnsDao.COLUMN_PK2];\n\nmodule.exports.DataColumnsDao = DataColumnsDao;\nmodule.exports.DataColumns = DataColumns;\n\n},{\"../core/contents\":8,\"../dao/dao\":11,\"util\":343}],14:[function(require,module,exports){\n/**\n * @module db/dataTypes\n */\n\n/**\n * A boolean value representing true or false.\n * @type {String}\n */\nmodule.exports.GPKG_DT_BOOLEAN_NAME = \"BOOLEAN\";\n/**\n * 8-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_TINYINT_NAME = \"TINYINT\";\n/**\n * 16-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_SMALLINT_NAME = \"SMALLINT\";\n/**\n * 32-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_MEDIUMINT_NAME = \"MEDIUMINT\";\n/**\n * 64-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_INT_NAME = \"INT\";\n/**\n * 64-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_INTEGER_NAME = \"INTEGER\";\n/**\n * 32-bit IEEE floating point number.\n * @type {String}\n */\nmodule.exports.GPKG_DT_FLOAT_NAME = \"FLOAT\";\n/**\n * 64-bit IEEE floating point number.\n * @type {String}\n */\nmodule.exports.GPKG_DT_DOUBLE_NAME = \"DOUBLE\";\n/**\n * 64-bit IEEE floating point number.\n * @type {String}\n */\nmodule.exports.GPKG_DT_REAL_NAME = \"REAL\";\n/**\n * TEXT{(maxchar_count)}: Variable length string encoded in either UTF-8 or UTF-16, determined by PRAGMA encoding; see http://www.sqlite.org/pragma.html#pragma_encoding.\n * @type {String}\n */\nmodule.exports.GPKG_DT_TEXT_NAME = \"TEXT\";\n/**\n * BLOB{(max_size)}: Variable length binary data.\n * @type {String}\n */\nmodule.exports.GPKG_DT_BLOB_NAME = \"BLOB\";\n/**\n * ISO-8601 date string in the form YYYY-MM-DD encoded in either UTF-8 or UTF-16.\n * @type {String}\n */\nmodule.exports.GPKG_DT_DATE_NAME = \"DATE\";\n/**\n * ISO-8601 date/time string in the form YYYY-MM-DDTHH:MM:SS.SSSZ with T separator character and Z suffix for coordinated universal time (UTC) encoded in either UTF-8 or UTF-16.\n * @type {String}\n */\nmodule.exports.GPKG_DT_DATETIME_NAME = \"DATETIME\";\nmodule.exports.GPKG_DT_GEOMETRY_NAME = \"GEOMETRY\";\n\n/**\n * DataType enumeration\n * @typedef {object} GPKGDataType\n */\nmodule.exports.GPKGDataType = {};\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_BOOLEAN_NAME] = 0;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_TINYINT_NAME] = 1;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_SMALLINT_NAME] = 2;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_MEDIUMINT_NAME] = 3;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_INT_NAME] = 4;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_INTEGER_NAME] = 5;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_FLOAT_NAME] = 6;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_DOUBLE_NAME] = 7;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_REAL_NAME] = 8;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_TEXT_NAME] = 9;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_BLOB_NAME] = 10;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_DATE_NAME] = 11;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_DATETIME_NAME] = 12;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_GEOMETRY_NAME] = 13;\n\nmodule.exports.GPKGDataType.GPKG_DT_BOOLEAN = 0;\nmodule.exports.GPKGDataType.GPKG_DT_TINYINT = 1;\nmodule.exports.GPKGDataType.GPKG_DT_SMALLINT = 2;\nmodule.exports.GPKGDataType.GPKG_DT_MEDIUMINT = 3;\nmodule.exports.GPKGDataType.GPKG_DT_INT = 4;\nmodule.exports.GPKGDataType.GPKG_DT_INTEGER = 5;\nmodule.exports.GPKGDataType.GPKG_DT_FLOAT = 6;\nmodule.exports.GPKGDataType.GPKG_DT_DOUBLE = 7;\nmodule.exports.GPKGDataType.GPKG_DT_REAL = 8;\nmodule.exports.GPKGDataType.GPKG_DT_TEXT = 9;\nmodule.exports.GPKGDataType.GPKG_DT_BLOB = 10;\nmodule.exports.GPKGDataType.GPKG_DT_DATE = 11;\nmodule.exports.GPKGDataType.GPKG_DT_DATETIME = 12;\nmodule.exports.GPKGDataType.GPKG_DT_GEOMETRY = 13;\n\n\n/**\n * Return the name of the given data type.\n *\n * @param  {module:db/dataTypes~GPKGDataType} dataType the enum to retrieve the name for\n * @return {String} the string name of the given data type enum\n */\nmodule.exports.name = function(dataType) {\n  var name = undefined;\n\n  switch(dataType){\n    case module.exports.GPKGDataType.GPKG_DT_BOOLEAN:\n      name = module.exports.GPKG_DT_BOOLEAN_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_TINYINT:\n      name = module.exports.GPKG_DT_TINYINT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_SMALLINT:\n      name = module.exports.GPKG_DT_SMALLINT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_MEDIUMINT:\n      name = module.exports.GPKG_DT_MEDIUMINT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_INT:\n      name = module.exports.GPKG_DT_INT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_INTEGER:\n      name = module.exports.GPKG_DT_INTEGER_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_FLOAT:\n      name = module.exports.GPKG_DT_FLOAT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_DOUBLE:\n      name = module.exports.GPKG_DT_DOUBLE_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_REAL:\n      name = module.exports.GPKG_DT_REAL_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_TEXT:\n      name = module.exports.GPKG_DT_TEXT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_BLOB:\n      name = module.exports.GPKG_DT_BLOB_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_DATE:\n      name = module.exports.GPKG_DT_DATE_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_DATETIME:\n      name = module.exports.GPKG_DT_DATETIME_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_GEOMETRY:\n      name = module.exports.GPKG_DT_GEOMETRY_NAME;\n      break;\n  }\n\n  return name;\n}\n\n/**\n * Return the data type enum value for the given name, ignoring case.\n *\n * @param  {String} name the name of the data type enum\n * @return {module:db/dataTypes~GPKGDataType} the enum value\n */\nmodule.exports.fromName = function(name) {\n  var value = 9;\n  if (name) {\n    name = name.toUpperCase();\n    value = module.exports.GPKGDataType[name];\n  }\n  return value;\n}\n\n},{}],15:[function(require,module,exports){\n(function (process,Buffer){\n/**\n * Connection to the SQLite file\n * @module db/geoPackageConnection\n */\n\nvar GeoPackageConstants = require('../geoPackageConstants');\n\nif (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) {\n  console.log('Better SQLite');\n} else {\n  console.log('SQL.js');\n}\n\n/**\n * Creates a connection to the SQLite file and when connected, returns a promise that resolves the connection.\n * This will create a {module:db/sqliteAdapter~Adapter} if running in node and the FORCE_SQLJS environment variable is not set.\n * This will create a {module:db/sqljsAdapter~Adapter} if running in the browser or the FORCE_SQLJS environment variable is set\n * @see {module:db/sqliteAdapter~Adapter}\n * @see {module:db/sqljsAdapter~Adapter}\n * @class\n * @param  {string} filePath path to the sqlite file\n * @return {Promise<module:db/geoPackageConnection~GeoPackageConnection>}\n * @todo change this constructor to return an actual `GeoPackageConnection` instance instead of a `Promise`\n */\nvar GeoPackageConnection = function(filePath) {\n  if (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) {\n    this.adapterCreator = require('./sqliteAdapter');\n  } else {\n    this.adapterCreator = require('./sqljsAdapter');\n  }\n\n  var promise = new Promise(function(resolve, reject) {\n    this.adapterCreator.createAdapter(filePath)\n    .then(function(adapter) {\n      this.adapter = adapter;\n      resolve(this);\n    }.bind(this))\n    .catch(function(error) {\n      reject(error);\n    });\n  }.bind(this));\n\n  return promise;\n}\n\n/**\n * Close the database.\n */\nGeoPackageConnection.prototype.close = function() {\n  this.adapter.close();\n}\n\n/**\n * exports the GeoPackage as a file\n * @param  {Function} callback called with an err and the buffer containing the contents of the file\n */\nGeoPackageConnection.prototype.export = function(callback) {\n  this.adapter.export(callback);\n}\n\n/**\n * Gets the raw connection to the database\n * @return {Object}\n */\nGeoPackageConnection.prototype.getDBConnection = function () {\n  return this.adapter.db;\n};\n\n/**\n * Connects to a GeoPackage database\n * @param  {Object} db database to connect to\n * @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)}\n */\nGeoPackageConnection.prototype.setDBConnection = function (db) {\n  return this.adapter = this.adapterCreator.createAdapterFromDb(db);\n};\n\n/**\n* Registers the given function so that it can be used by SQL statements\n* @param  {string} name               name of function to register\n* @param  {Function} functionDefinition function to register\n* @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)} the adapter in use\n*/\nGeoPackageConnection.prototype.registerFunction = function(name, functionDefinition) {\n  this.adapter.registerFunction(name, functionDefinition);\n  return this.adapter;\n}\n\n/**\n * Gets the first result from the query\n * @param  {string} sql    sql query to run\n * @param  {Array|Object} [params] array of substitution parameters\n * @return {object}\n */\nGeoPackageConnection.prototype.get = function (sql, params) {\n  return this.adapter.get(sql, params);\n};\n\n/**\n * Checks if table exists in database\n * @param {String} tableName\n * @returns {Boolean}\n */\nGeoPackageConnection.prototype.isTableExists = function (tableName) {\n  return this.adapter.isTableExists(tableName);\n};\n\n/**\n * Run the given SQL and return the results.\n * @param  {string} sql    sql to run\n * @param  {Array|Object} [params] array of substitution parameters\n * @return {{changes: number, lastInsertROWID: number}} object: `{ \"changes\": number, \"lastInsertROWID\": number }`\n * * `changes`: number of rows the statement changed\n * * `lastInsertROWID`: ID of the last inserted row\n */\nGeoPackageConnection.prototype.run = function (sql, params) {\n  return this.adapter.run(sql, params)\n};\n\n/**\n * Executes the query and returns all results in an array\n * @param  {string} sql sql to run\n * @param  {Array|Object} [params] substitution parameters\n * @return {Object[]}\n */\nGeoPackageConnection.prototype.all = function (sql, params) {\n  return this.adapter.all(sql, params);\n};\n\n/**\n * Executes the query and returns an Iterable object of results\n * @param  {string} sql    sql to run\n * @param  {Array|Object} [params] substitution parameters\n * @return {Iterable<Object>}\n */\nGeoPackageConnection.prototype.each = function (sql, params) {\n  return this.adapter.each(sql, params);\n};\n\n/**\n * Gets the minimum value from the column\n * @param  {string} table     table to query\n * @param  {string} column    column to get the min value from\n * @param  {string} [where]     where clause\n * @param  {Array|Object} [whereArgs] substitution parameters\n * @return {Object}\n */\nGeoPackageConnection.prototype.minOfColumn = function(table, column, where, whereArgs) {\n  var minStatement = 'select min('+column+') as min from ' + table;\n  if(where) {\n    minStatement += ' ';\n    if (where.indexOf('where')) {\n      where = 'where ' + where;\n    }\n    minStatement += where;\n  }\n  return this.adapter.get(minStatement, whereArgs).min;\n};\n\n/**\n * Gets the maximum value from the column\n * @param  {string} table     table to query\n * @param  {string} column    column to get the max value from\n * @param  {string} [where]     where clause\n * @param  {Array|Object} [whereArgs] substitution parameters\n * @return {Object}\n */\nGeoPackageConnection.prototype.maxOfColumn = function(table, column, where, whereArgs, callback) {\n  var maxStatement = 'select max('+column+') as max from ' + table;\n  if(where) {\n    maxStatement += ' ';\n    if (where.indexOf('where')) {\n      where = 'where ' + where;\n    }\n    maxStatement += where;\n  }\n  return this.adapter.get(maxStatement, whereArgs).max;\n};\n\n/**\n * Return the count of objects in the table\n * @param  {string} table table name\n * @param  {string} [where] where clause\n * @param  {Array|Object} [whereArgs] substitution parameters\n * @return {Number}\n */\nGeoPackageConnection.prototype.count = function(table, where, whereArgs) {\n  return this.adapter.count(table, where, whereArgs);\n};\n\n/**\n * Executes an insert statement and returns the last id inserted\n * @param  {string} sql    sql to insert\n * @param  {Array|Object} params substitution parameters\n * @return {Object} last row id inserted\n */\nGeoPackageConnection.prototype.insert = function (sql, params) {\n  return this.adapter.insert(sql, params);\n};\n\n/**\n * Delete from the table\n * @param  {string} tableName table name to delete from\n * @param  {string} [where]     where clause\n * @param  {Array|Object} [whereArgs] substitution parameters\n * @return {Number} number of rows deleted\n */\nGeoPackageConnection.prototype.delete = function(tableName, where, whereArgs) {\n  var deleteStatement = 'DELETE FROM ' + tableName + '';\n\n  if (where) {\n    deleteStatement += ' WHERE ' + where;\n  }\n\n  return this.adapter.delete(deleteStatement, whereArgs);\n};\n\n/**\n * Drops the table specified\n * @param  {string} tableName table to drop\n * @return {Boolean} results of table drop\n */\nGeoPackageConnection.prototype.dropTable = function(tableName) {\n  return this.adapter.dropTable(tableName);\n};\n\n/**\n * Gets information about the table specified.  If data is returned, the table exists\n * @param  {string} tableName table to check\n * @return {Object}\n */\nGeoPackageConnection.prototype.tableExists = function(tableName) {\n  return this.adapter.get('SELECT name FROM sqlite_master WHERE type=\"table\" AND name=?', [tableName]);\n};\n\n/**\n * Checks if a table and column exist\n * @param  {string} tableName  table to check\n * @param  {string} columnName column to check\n * @return {Boolean}\n */\nGeoPackageConnection.prototype.columnAndTableExists = function(tableName, columnName) {\n  var columns = this.adapter.all('PRAGMA table_info(\\''+tableName+'\\')');\n  for (var i = 0; i < columns.length; i++) {\n    if (columns[i].name === columnName) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Sets the APPLICATION_ID and user_version for GeoPackage\n */\nGeoPackageConnection.prototype.setApplicationId = function() {\n  var buff = Buffer.from(GeoPackageConstants.APPLICATION_ID);\n  var applicationId = buff.readUInt32BE(0);\n  this.adapter.run('PRAGMA application_id = ' + applicationId);\n  this.adapter.run('PRAGMA user_version = ' + GeoPackageConstants.USER_VERSION);\n}\n\n/**\n * gets the application_id from the sqlite file\n * @return {Object}\n */\nGeoPackageConnection.prototype.getApplicationId = function() {\n  return this.adapter.get('PRAGMA application_id').application_id;\n}\n\nmodule.exports = GeoPackageConnection;\n\n/**\n * Convenience method\n * @see {module:db/geoPackageConnection~GeoPackageConnection}\n * @see {module:db/sqliteAdapter~Adapter}\n * @see {module:db/sqljsAdapter~Adapter}\n * @param  {string|Buffer} filePath string path to an existing file or a path to where a new file will be created or a Buffer containing the contents of the file, if undefined, an in memory database is created\n * @return {Promise} that resolves\n */\nGeoPackageConnection.connect = function(filePath) {\n  return new GeoPackageConnection(filePath);\n}\n\n/**\n * Convenience method\n * @param  {Object}   db       open database to connect to\n * @return {Promise}\n */\nGeoPackageConnection.connectWithDatabase = function(db) {\n  return new GeoPackageConnection(undefined)\n  .then(function(connection) {\n    connection.setDBConnection(db);\n  });\n}\n\n}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"../geoPackageConstants\":71,\"./sqliteAdapter\":16,\"./sqljsAdapter\":18,\"_process\":284,\"buffer\":182}],16:[function(require,module,exports){\n/**\n * This adapter uses better-sqlite3 to execute queries against the GeoPackage database\n * @module db/sqliteAdapter\n * @see {@link https://github.com/JoshuaWise/better-sqlite3|better-sqlite3}\n */\n\nvar fs = require('fs')\n  , path = require('path')\n  , http = require('http')\n  , Buffer = require('buffer')\n  , os = require('os');\n\n/**\n * Returns a Promise which, when resolved, returns a {module:db/sqliteAdapter~Adapter} which has connected to the GeoPackage database file\n * @param  {string|Buffer} [filePath] string path to an existing file or a path to where a new file will be created or a Buffer containing the contents of the file, if undefined, an in memory database is created\n * @return {Promise<module:db/sqliteAdapter~Adapter>}\n */\nmodule.exports.createAdapter = function(filePath) {\n  var promise = new Promise(function(resolve, reject) {\n    var Database = require('better-sqlite3');\n    try {\n      var db;\n      if (filePath && typeof filePath === 'string') {\n        if (filePath.indexOf('http') === 0) {\n          http.get(filePath, function(response) {\n            if (response.statusCode !== 200) {\n              return reject(new Error('Unable to reach url: ' + filePath));\n            }\n            var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg');\n            var writeStream = fs.createWriteStream(tmpPath);\n            response.pipe(writeStream);\n            writeStream.on('close', function() {\n              try {\n                db = new Database(tmpPath);\n                // verify that this is an actual database\n                var applicationId = db.pragma('application_id');\n                db.pragma('journal_mode = WAL');\n                var adapter = new Adapter(db);\n                adapter.filePath = tmpPath;\n                resolve(adapter);\n              } catch (err) {\n                console.log('error', err);\n                return reject(err);\n              }\n            });\n          });\n        } else {\n          db = new Database(filePath);\n          var adapter = new Adapter(db);\n          adapter.filePath = filePath;\n          resolve(adapter);\n        }\n      } else if (filePath) {\n        // write this byte array to a file then open it\n        var byteArray = filePath;\n        var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg');\n        return fs.writeFile(tmpPath, byteArray, function(err) {\n          db = new Database(tmpPath);\n          // verify that this is an actual database\n          try {\n            var applicationId = db.pragma('application_id');\n            db.pragma('journal_mode = WAL');\n          } catch (err) {\n            console.log('error', err);\n            return reject(err);\n          }\n          var adapter = new Adapter(db);\n          adapter.filePath = tmpPath;\n          resolve(adapter);\n        });\n      } else {\n        console.log('create in memory');\n        db = new Database(\"memory\", {\n          memory: !filePath\n        });\n        var adapter = new Adapter(db);\n        adapter.filePath = filePath;\n        resolve(adapter);\n      }\n\n    } catch (err) {\n      console.log('Error opening database', err);\n      return reject(err);\n    }\n  });\n  return promise;\n}\n/**\n * Creates an adapter from an already established better-sqlite3 database connection\n * @param  {better-sqlite3.Database} db better-sqlite3 database connection\n * @return {module:db/sqliteAdapter~Adapter}\n */\nmodule.exports.createAdapterFromDb = function(db) {\n  return new Adapter(db);\n}\n\n/**\n * Class which adapts generic GeoPackage queries to better-sqlite3 queries\n * @class Adapter\n * @param {better-sqlite3.Database} db better-sqlite3 database connection\n */\nfunction Adapter(db) {\n  this.db = db;\n}\n\n/**\n * Closes the connection to the GeoPackage\n */\nAdapter.prototype.close = function() {\n  this.db.close();\n}\n\n/**\n * Get the connection to the database file\n * @return {better-sqlite3.Database}\n */\nAdapter.prototype.getDBConnection = function () {\n  return this.db;\n};\n\n/**\n * Returns a Buffer containing the contents of the database as a file\n * @param  {Function} callback called when export is complete\n */\nAdapter.prototype.export = function(callback) {\n  fs.readFile(this.filePath, callback);\n}\n\n/**\n * Registers the given function so that it can be used by SQL statements\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#registeroptions-function---this|better-sqlite3 register}\n * @param  {string} name               name of function to register\n * @param  {Function} functionDefinition function to register\n * @return {module:db/sqliteAdapter~Adapter} this\n */\nAdapter.prototype.registerFunction = function(name, functionDefinition) {\n  this.db.function(name, functionDefinition);\n  return this;\n}\n\n/**\n * Gets one row of results from the statement\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#getbindparameters---row|better-sqlite3 get}\n * @param  {string} sql    statement to run\n * @param  {Array|Object} [params] bind parameters\n * @return {Object}\n */\nAdapter.prototype.get = function (sql, params) {\n  var statement = this.db.prepare(sql);\n  if (params) {\n    return statement.get(params);\n  } else {\n    return statement.get();\n  }\n};\n\n/**\n * Determines if a tableName exists in the database\n * @param {String} tableName\n * @returns {Boolean}\n */\nAdapter.prototype.isTableExists = function (tableName) {\n  var statement = this.db.prepare(\"SELECT name FROM sqlite_master WHERE type='table' AND name=:name\");\n  var result;\n  result = statement.get({name: tableName});\n  return !!result;\n};\n\n/**\n * Gets all results from the statement in an array\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#allbindparameters---array-of-rows|better-sqlite3 all}\n * @param  {string} sql    statement to run\n * @param  {Array|Object} [params] bind parameters\n * @return {Object[]}\n */\nAdapter.prototype.all = function (sql, params) {\n  var statement = this.db.prepare(sql);\n  if (params) {\n    return statement.all(params);\n  } else {\n    return statement.all();\n  }\n};\n\n/**\n * Returns an `Iterable` with results from the query\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#iteratebindparameters---iterator|better-sqlite3 iterate}\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {Iterable<Object>}\n */\nAdapter.prototype.each = function (sql, params) {\n  var statement = this.db.prepare(sql);\n  if (params) {\n    return statement.iterate(params);\n  } else {\n    return statement.iterate();\n  }\n};\n\n/**\n * Run the given statement, returning information about what changed.\n *\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#runbindparameters---object|better-sqlite3}\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {{changes: number, lastInsertROWID: number}} object: `{ \"changes\": number, \"lastInsertROWID\": number }`\n * * `changes`: number of rows the statement changed\n * * `lastInsertROWID`: ID of the last inserted row\n */\nAdapter.prototype.run = function(sql, params) {\n  var statement = this.db.prepare(sql);\n  if (params) {\n    return statement.run(params);\n  } else {\n    return statement.run();\n  }\n}\n\n/**\n * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {Number} last inserted row id\n */\nAdapter.prototype.insert = function(sql, params) {\n  var statement = this.db.prepare(sql);\n  return statement.run(params).lastInsertRowid;\n};\n\n/**\n * Runs the specified delete statement and returns the number of deleted rows\n * @param  {string} sql    statement to run\n * @param  {Object|Array} params bind parameters\n * @return {number} deleted rows\n */\nAdapter.prototype.delete = function(sql, params) {\n  var statement = this.db.prepare(sql);\n  return statement.run(params).changes;\n};\n\n/**\n * Drops the table\n * @param  {string} table table name\n * @return {Boolean} indicates if the table was dropped\n */\nAdapter.prototype.dropTable = function(table) {\n  try {\n    var statement = this.db.prepare('DROP TABLE IF EXISTS \"' + table + '\"');\n    var result = statement.run();\n    var vacuum = this.db.prepare('VACUUM');\n    vacuum.run();\n    return result.changes == 0;\n  } catch (e) {\n    console.log('Drop Table Error', e);\n    return false;\n  }\n};\n\n/**\n * Counts rows that match the query\n * @param  {string} tableName table name from which to count\n * @param  {string} [where]     where clause\n * @param  {Object|Array} [whereArgs] where args\n * @return {Number} count\n */\nAdapter.prototype.count = function (tableName, where, whereArgs) {\n  var sql = 'SELECT COUNT(*) as count FROM \"' + tableName + '\"';\n  if (where) {\n    sql += ' where ' + where;\n  }\n  var statement = this.db.prepare(sql);\n  if (whereArgs) {\n    return statement.get(whereArgs).count;\n  } else {\n    return statement.get().count;\n  }\n};\n\n},{\"better-sqlite3\":undefined,\"buffer\":182,\"fs\":177,\"http\":329,\"os\":270,\"path\":276}],17:[function(require,module,exports){\n/**\n * SQLite query builder module.\n * @module db/sqliteQueryBuilder\n */\n\n/**\n * Utility class to build sql queries\n * @class\n */\nfunction SqliteQueryBuilder() {}\n\nmodule.exports = SqliteQueryBuilder;\n\n/**\n * Replaces all whitespace in a column name with underscores\n * @param  {string} columnName column name to fix\n * @return {string}\n */\nSqliteQueryBuilder.fixColumnName = function(columnName) {\n  return columnName.replace(/\\W+/g, '_');\n}\n\n/**\n * Builds a query\n * @param  {Boolean} distinct whether query should be distinct or not\n * @param  {string} tables   table names to query, added to the query from clause\n * @param  {string[]} [columns=*]  columns to query for\n * @param  {string} [where]    where clause\n * @param  {string} [join]     join clause\n * @param  {string} [groupBy]  group by clause\n * @param  {string} [having]   having clause\n * @param  {string} [orderBy]  order by clause\n * @param  {Number} [limit]    limit\n * @param  {Number} [offset]   offset\n * @return {string}\n */\nSqliteQueryBuilder.buildQuery = function(distinct, tables, columns, where, join, groupBy, having, orderBy, limit, offset) {\n\n  var query = '';\n  if (isEmpty(groupBy) && !isEmpty(having)) {\n    throw new Error('Illegal Arguments: having clauses require a groupBy clause');\n  }\n\n  query += 'select ';\n  if (distinct) {\n    query += 'distinct ';\n  }\n  if(columns && columns.length) {\n    query = appendColumnsToString(columns, query);\n  } else {\n    query += '* ';\n  }\n\n  query += 'from ' + tables;\n  if (join) {\n    query += ' ' + join;\n  }\n  query = appendClauseToString(query, ' where ', where);\n  query = appendClauseToString(query, ' group by ', groupBy);\n  query = appendClauseToString(query, ' having ', having);\n  query = appendClauseToString(query, ' order by ', orderBy);\n  query = appendClauseToString(query, ' limit ', limit);\n  query = appendClauseToString(query, ' offset ', offset);\n\n  return query;\n}\n\n/**\n * Builds a count statement\n * @param  {string} tables table names to query for\n * @param  {string} [where]  where clause\n * @return {string} count statement\n */\nSqliteQueryBuilder.buildCount = function(tables, where) {\n  var query = 'select count(*) as count from ' + tables;\n  query = appendClauseToString(query, ' where ', where);\n  return query;\n}\n\n/**\n * Builds an insert statement using the properties of the object\n * @param  {string} table  table to insert into\n * @param  {Object} object object to insert\n * @return {string} insert statement\n */\nSqliteQueryBuilder.buildInsert = function(table, object) {\n  if (object.getColumnNames) {\n    return SqliteQueryBuilder.buildInsertFromColumnNames(table, object);\n  }\n  var insert = 'insert into ' + table + ' (';\n  var keys = '';\n  var values = '';\n  var first = true;\n  for (var key in object) {\n    if (object.hasOwnProperty(key)) {\n      if (!first) {\n        keys += ',';\n        values += ',';\n      }\n      first = false;\n      keys += key;\n      values += '$' + SqliteQueryBuilder.fixColumnName(key);\n    }\n  }\n\n  insert += keys + ') values (' + values + ')';\n  return insert;\n}\n\n/**\n * Builds an insert statement from the object.getColumnNames method\n * @param  {string} table  table to insert into\n * @param  {Object} object object with a getColumnNames method\n * @return {string} insert statement\n */\nSqliteQueryBuilder.buildInsertFromColumnNames = function(table, object) {\n  var insert = 'insert into ' + table + ' (';\n  var keys = '';\n  var values = '';\n  var first = true;\n  var columnNames = object.getColumnNames();\n  for (var i = 0; i < columnNames.length; i++) {\n    var key = columnNames[i];\n    if (!first) {\n      keys += ',';\n      values += ',';\n    }\n    first = false;\n    keys += '\"' + key + '\"';\n    values += '$' + SqliteQueryBuilder.fixColumnName(key);\n  }\n\n  insert += keys + ') values (' + values + ')';\n  return insert;\n}\n\n/**\n * Builds an update or insert object to bind to a statement\n * @param  {Object} object object to create bind parameters from\n * @return {Object} bind parameters\n */\nSqliteQueryBuilder.buildUpdateOrInsertObject = function(object) {\n  var insertOrUpdate = {};\n  if (object.getColumnNames) {\n    var columnNames = object.getColumnNames();\n    for (var i = 0; i < columnNames.length; i++) {\n      insertOrUpdate[SqliteQueryBuilder.fixColumnName(columnNames[i])] = object.toDatabaseValue(columnNames[i]);\n    }\n  } else {\n    for (var key in object) {\n      if (object.hasOwnProperty(key)) {\n        if (object.toDatabaseValue) {\n          insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object.toDatabaseValue(key);\n        } else {\n          if (typeof object[key] == 'boolean') {\n            insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key] ? 1 : 0;\n          } else {\n            insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key];\n          }\n        }\n      }\n    }\n  }\n  return insertOrUpdate;\n}\n\n/**\n * Builds an update statement\n * @param  {string} table     table to update\n * @param  {Object} values    object with values to update\n * @param  {string} [where]     where clause\n * @param  {Array|Ojbect} [whereArgs] where bind parameters\n * @return {Object} object with a sql property containing the update statement and an args property with bind arguments\n */\nSqliteQueryBuilder.buildUpdate = function(table, values, where, whereArgs) {\n  var args = [];\n  var update = 'update ' + table + ' set ';\n  var first = true;\n  for (var columnName in values) {\n    if (!first) {\n      update += ', ';\n    }\n    first = false;\n    update += '\"'+ columnName + '\"';\n    args.push(values[columnName]);\n    update += '=?';\n  }\n  if (whereArgs) {\n    for (var i = 0; i < whereArgs.length; i++) {\n      args.push(whereArgs[i]);\n    }\n  }\n  if (where) {\n    update += ' where ';\n    update += where;\n  }\n  return {\n    sql: update,\n    args: args\n  };\n}\n\n/**\n * Builds an update from an object\n * @param  {string} table  table name to update\n * @param  {Object} object object with values to update\n * @return {string} update statement\n */\nSqliteQueryBuilder.buildObjectUpdate = function(table, object) {\n  var update = 'update ' + table + ' set ';\n  var first = true;\n  if (object.getColumnNames) {\n    var columnNames = object.getColumnNames();\n\n    for (var i = 0; i < columnNames.length; i++) {\n      var key = columnNames[i];\n      if (!first) {\n        update += ', ';\n      }\n      first = false;\n      update += '\"' + key + '\"=';\n      update += '$' + SqliteQueryBuilder.fixColumnName(key);\n    }\n  } else {\n    for (var key in object) {\n      if (!first) {\n        update += ', ';\n      }\n      first = false;\n\n      if (object.hasOwnProperty(key)) {\n        update += '\"' + key + '\"=';\n        update += '$' + SqliteQueryBuilder.fixColumnName(key);\n      }\n    }\n  }\n\n  return update;\n}\n\nfunction appendClauseToString(string, name, clause) {\n  if (clause) {\n    string += name + clause;\n  }\n  return string;\n}\n\nfunction appendColumnsToString(columns, string) {\n  if (!columns || columns.length == 0) return string;\n  string += columnToAppend(columns[0]);\n  for (var i = 1; i < columns.length; i++) {\n    string += ', ' + columnToAppend(columns[i]);\n  }\n  string += ' ';\n  return string;\n}\n\nfunction columnToAppend(column) {\n  return column.indexOf('*') != -1 ? column : '\"' + column + '\"';\n}\n\nfunction isEmpty(string) {\n  return !string || string.length === 0;\n}\n\n},{}],18:[function(require,module,exports){\n(function (process,Buffer){\n/**\n * This adapter uses sql.js to execute queries against the GeoPackage database\n * @module db/sqljsAdapter\n * @see {@link http://kripken.github.io/sql.js/documentation/|sqljs}\n */\n\nvar sqljs = require('sql.js/dist/sql-asm-memory-growth.js');\n// var sqljs = require('sql.js/js/sql.js');\n\n/**\n * Returns a Promise which, when resolved, returns a {module:db/sqljsAdapter~Adapter} which has connected to the GeoPackage database file\n * @param  {string|Buffer} [filePath] string path to an existing file or a path to where a new file will be created or a url from which to download a GeoPackage or a Uint8Array containing the contents of the file, if undefined, an in memory database is created\n * @return {Promise<module:db/sqjsAdapter~Adapter>}\n */\nmodule.exports.createAdapter = function(filePath) {\n  var promise = new Promise(function(resolve, reject) {\n    sqljs().then(SQL => {\n      if (filePath && typeof filePath === 'string') {\n        if (typeof (process) !== 'undefined' && process.version) {\n          var fs = require('fs');\n          if (filePath.indexOf('http') === 0) {\n            var http = require('http');\n            http.get(filePath, function(response) {\n              if (response.statusCode !== 200) {\n                return reject(new Error('Unable to reach url: ' + filePath));\n              }\n              var body = [];\n              response.on('data', chunk => body.push(chunk));\n              response.on('end', function() {\n                var t = new Uint8Array(Buffer.concat(body));\n                var db = new SQL.Database(t);\n                var adapter = new Adapter(db);\n                resolve(adapter);\n              });\n            });\n          } else {\n            try {\n              var stats = fs.statSync(filePath);\n            } catch (e) {\n              var db = new SQL.Database();\n              var adapter = new Adapter(db);\n              return resolve(adapter);\n            }\n            var filebuffer = fs.readFileSync(filePath);\n            var t = new Uint8Array(filebuffer);\n            var db = new SQL.Database(t);\n            // console.log('setting wal mode');\n            // var walMode = db.exec('PRAGMA journal_mode=DELETE');\n            // console.log('walMode', walMode);\n            var adapter = new Adapter(db);\n            return resolve(adapter);\n          }\n        } else {\n          var xhr = new XMLHttpRequest();\n          xhr.open('GET', filePath, true);\n          xhr.responseType = 'arraybuffer';\n\n          xhr.onload = function (e) {\n            if (xhr.status !== 200) {\n              return reject(new Error('Unable to reach url: ' + filePath));\n            }\n            var uInt8Array = new Uint8Array(this.response);\n            var db = new SQL.Database(uInt8Array);\n            var adapter = new Adapter(db);\n            return resolve(adapter);\n          };\n          xhr.onerror = function (e) {\n            return reject(new Error('Error reaching url: ' + filePath));\n          };\n          xhr.send();\n        }\n      } else if (filePath) {\n        var byteArray = filePath;\n        var db = new SQL.Database(byteArray);\n        var adapter = new Adapter(db);\n        return resolve(adapter);\n      } else {\n        var db = new SQL.Database();\n        var adapter = new Adapter(db);\n        return resolve(adapter);\n      }\n    });\n  });\n\n  return promise;\n}\n\n/**\n * Creates an adapter from an already established better-sqlite3 database connection\n * @param  {sqljs.Database} db sqljs database connection\n * @return {module:db/sqljsAdapter~Adapter}\n */\nmodule.exports.createAdapterFromDb = function(db) {\n  return new Adapter(db);\n}\n\n/**\n * Class which adapts generic GeoPackage queries to sqljs queries\n * @class Adapter\n * @param {sqljs.Database} db sqljs database connection\n */\nfunction Adapter(db) {\n  this.db = db;\n}\n\n/**\n * Closes the connection to the GeoPackage\n */\nAdapter.prototype.close = function() {\n  this.db.close();\n}\n\n/**\n * Get the connection to the database file\n * @return {sqljs.Database}\n */\nAdapter.prototype.getDBConnection = function () {\n  return this.db;\n};\n\n/**\n * Returns a Uint8Array containing the contents of the database as a file\n * @param  {Function} callback called when export is complete\n */\nAdapter.prototype.export = function(callback) {\n  callback(null, this.db.export());\n}\n\n/**\n * Registers the given function so that it can be used by SQL statements\n * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Database.html#create_function-dynamic|sqljs create_function}\n * @param  {string} name               name of function to register\n * @param  {Function} functionDefinition function to register\n * @return {module:db/sqljsAdapter~Adapter} this\n */\nAdapter.prototype.registerFunction = function(name, functionDefinition) {\n  this.db.create_function(name, functionDefinition);\n  return this;\n}\n\n/**\n * Gets one row of results from the statement\n * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#get-dynamic|sqljs get}\n * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#getAsObject-dynamic|sqljs getAsObject}\n * @param  {string} sql    statement to run\n * @param  {Array|Object} [params] substitution parameters\n * @return {Object}\n */\nAdapter.prototype.get = function (sql, params) {\n  params = params || [];\n  var statement = this.db.prepare(sql);\n  statement.bind(params);\n  var hasResult = statement.step();\n  var row;\n\n  if (hasResult) {\n    row = statement.getAsObject();\n  }\n\n  statement.free();\n  return row;\n};\n\n/**\n * Determines if a tableName exists in the database\n * @param {String} tableName\n * @returns {Boolean}\n */\nAdapter.prototype.isTableExists = function (tableName) {\n  var statement = this.db.prepare(\"SELECT name FROM sqlite_master WHERE type='table' AND name=:name\");\n  statement.bind([tableName]);\n  var hasResult = statement.step();\n  var row;\n  if (hasResult) {\n    row = statement.getAsObject();\n  }\n  statement.free();\n  return !!row;\n};\n\n/**\n * Gets all results from the statement in an array\n * @param  {string} sql    statement to run\n * @param  {Array|Object} [params] bind parameters\n * @return {Object[]}\n */\nAdapter.prototype.all = function (sql, params) {\n  var rows = [];\n  var iterator = this.each(sql, params);\n  for (var row of iterator) {\n    rows.push(row);\n  }\n  return rows;\n};\n\n/**\n * Returns an Iterable with results from the query\n * @param  {string} sql    statement to run\n * @param  {Object|Array} params bind parameters\n * @return {Iterable<Object>}\n */\nAdapter.prototype.each = function (sql, params) {\n  var statement = this.db.prepare(sql);\n  statement.bind(params);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      if (statement.step()) {\n        return {\n          value: statement.getAsObject(),\n          done: false\n        };\n      } else {\n        statement.free();\n        return {\n          done: true\n        }\n      }\n    }\n  }\n};\n\n/**\n * Runs the statement specified, returning information about what changed\n * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#run-dynamic|sqljs run}\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {Object} object containing a changes property indicating the number of rows changed and a lastInsertROWID indicating the last inserted row\n */\nAdapter.prototype.run = function(sql, params) {\n  if (params) {\n    for (var key in params) {\n      params['$' + key] = params[key];\n    }\n  }\n  this.db.run(sql, params);\n  var lastId = this.db.exec('select last_insert_rowid();');\n  var lastInsertedId;\n  if (lastId) {\n    lastInsertedId = lastId[0].values[0][0];\n  }\n  return {\n    lastInsertROWID: lastInsertedId,\n    changes: this.db.getRowsModified()\n  };\n};\n\n/**\n * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {Number} last inserted row id\n */\nAdapter.prototype.insert = function(sql, params) {\n  if (params) {\n    for (var key in params) {\n      params['$' + key] = params[key];\n    }\n  }\n  var statement = this.db.prepare(sql, params);\n  statement.step();\n  statement.free();\n  var lastId = this.db.exec('select last_insert_rowid();');\n  if (lastId) {\n    return lastId[0].values[0][0];\n  } else {\n    return;\n  }\n};\n\n/**\n * Runs the specified delete statement and returns the number of deleted rows\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {number} deleted rows\n */\nAdapter.prototype.delete = function(sql, params) {\n  var rowsModified = 0;\n  var statement = this.db.prepare(sql, params);\n  statement.step();\n  rowsModified = this.db.getRowsModified();\n  statement.free();\n  return rowsModified;\n};\n\n/**\n * Drops the table\n * @param  {string} table table name\n * @return {Boolean} indicates if the table was dropped\n */\nAdapter.prototype.dropTable = function(table) {\n  var response = this.db.exec('DROP TABLE IF EXISTS \"' + table + '\"');\n  var vacuum = this.db.exec('VACUUM');\n  return !!response;\n};\n\n/**\n * Counts rows that match the query\n * @param  {string} tableName table name from which to count\n * @param  {string} [where]     where clause\n * @param  {Object|Array} [whereArgs] where args\n * @return {Number} count\n */\nAdapter.prototype.count = function (tableName, where, whereArgs) {\n  var sql = 'SELECT COUNT(*) as count FROM \"' + tableName + '\"';\n  if (where) {\n    sql += ' where ' + where;\n  }\n  return this.get(sql, whereArgs).count;\n};\n\n}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"_process\":284,\"buffer\":182,\"fs\":177,\"http\":329,\"sql.js/dist/sql-asm-memory-growth.js\":327}],19:[function(require,module,exports){\n/**\n * Creates tables necessary for GeoPackages\n * @module db/tableCreator\n */\n\nconst SpatialReferenceSystemDao = require('../core/srs').SpatialReferenceSystemDao;\nconst DataTypes = require('./dataTypes');\n\n/**\n * `TableCreator` provides methods for creating the various standard tables in\n * a GeoPackage database.\n *\n * @class\n * @param {module:geoPackage~GeoPackage} geopackage GeoPackage object\n */\nvar TableCreator = function(geopackage) {\n  this.geopackage = geopackage;\n  this.connection = geopackage.getDatabase();\n}\n\nmodule.exports = TableCreator;\n\n/**\n * Creates all required tables and Spatial Reference Systems, in addition to EPSG:3857\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createRequired = function () {\n  var dao = new SpatialReferenceSystemDao(this.geopackage);\n  return Promise.all([this.createSpatialReferenceSystem(), this.createContents()])\n  .then(function() {\n    // Create the required Spatial Reference Systems (spec Requirement 11)\n    dao.createUndefinedGeographic();\n    dao.createWgs84();\n    dao.createUndefinedCartesian();\n    // not required but very common\n    dao.createWebMercator();\n    return true;\n  });\n};\n\n/**\n * Creates the spatial reference system tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createSpatialReferenceSystem = function() {\n  return this.createTable('spatial_reference_system');\n}\n\n/**\n * Creates the contents tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createContents = function() {\n  return this.createTable('contents');\n}\n\n/**\n * Creates the geometry columns tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createGeometryColumns = function() {\n  return this.createTable('geometry_columns');\n}\n\n/**\n * Creates the tile matrix set tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createTileMatrixSet = function() {\n  return this.createTable('tile_matrix_set');\n}\n\n/**\n * Creates the tile matrix tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createTileMatrix = function() {\n  return this.createTable('tile_matrix');\n}\n\n/**\n * Creates the data columns tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createDataColumns = function() {\n  return this.createTable('data_columns');\n}\n\n/**\n * Creates the data column constraints tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createDataColumnConstraints = function() {\n  return this.createTable('data_column_constraints');\n}\n\n/**\n * Creates the metadata tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createMetadata = function() {\n  return this.createTable('metadata');\n}\n\n/**\n * Creates the metadata reference tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createMetadataReference = function() {\n  return this.createTable('metadata_reference');\n}\n\n/**\n * Creates the extensions tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createExtensions = function() {\n  return this.createTable('extensions');\n}\n\n/**\n * Creates the table index tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createTableIndex = function() {\n  return this.createTable('table_index');\n}\n\n/**\n * Creates the geometry index tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createGeometryIndex = function() {\n  return this.createTable('geometry_index');\n}\n\n/**\n * Creates the feature tile link tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createFeatureTileLink = function() {\n  return this.createTable('feature_tile_link');\n}\n\n/**\n * Creates the extended relations tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createExtendedRelations = function() {\n  return this.createTable('extended_relations');\n}\n\n/**\n * Creates the contentsId tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createContentsId = function() {\n  return this.createTable('contents_id');\n}\n\n/**\n * Creates all tables necessary for the specified table creation script name in the GeoPackage\n * @param  {string} creationScriptName creation scripts to run\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createTable = function(creationScriptName) {\n  var connection = this.connection;\n\n  return tableCreationScripts[creationScriptName].reduce(function(sequence, sql) {\n    return sequence.then(function() {\n      try {\n        return !!connection.run(sql);\n      } catch (error) {\n        if (error.message.indexOf('already exists') === -1) {\n          throw error;\n        }\n      }\n    });\n  }, Promise.resolve());\n}\n\n/**\n * Create the given user table.\n *\n * @param {modle:user/userTable~UserTable} userTable user table to create\n * @return {object} the result of {@link module:db/geoPackageConnection~GeoPackageConnection#run}\n * @throws {Error} if the table already exists\n */\nTableCreator.prototype.createUserTable = function (userTable) {\n  var connection = this.connection;\n  var result = connection.tableExists(userTable.table_name);\n  if (result) {\n    throw new Error('Table already exists and cannot be created: ' + userTable.table_name);\n  }\n  var check = '';\n\n  var sql = 'create table \\'' + userTable.table_name + '\\' (';\n  for (var i = 0; i < userTable.columns.length; i++) {\n    var tc = userTable.columns[i];\n    if (i) {\n      sql += ', ';\n    }\n    sql += '\\n\\'' + tc.name + '\\' ' + tc.getTypeName();\n    if (tc.max != null) {\n      sql += '(' + tc.max + ')';\n      if (check.length) {\n        check += ' AND\\n';\n      }\n      check += '\\tlength(\"'+tc.name+'\") <= ' + tc.max;\n    }\n    if (tc.notNull) {\n      sql += ' not null'\n    }\n    if (tc.primaryKey) {\n      sql += ' primary key autoincrement';\n    }\n    if (tc.defaultValue) {\n      if (tc.dataType === DataTypes.GPKGDataType.GPKG_DT_TEXT) {\n        sql += ' default \\'' + tc.defaultValue + '\\'';\n      } else {\n        sql += ' default ' + tc.defaultValue;\n      }\n    }\n  }\n  for (var i = 0; i < userTable.uniqueConstraints.length; i++) {\n    var uniqueConstraint = userTable.uniqueConstraints[i];\n    sql += ',\\n unique (';\n    for (var j = 0; j < uniqueConstraint.columns.length; j++) {\n      var uniqueColumn = uniqueConstraint.columns[j];\n      if (j) {\n        sql += ', ';\n      }\n      sql += uniqueColumn.name;\n    }\n    sql += ')';\n  }\n\n  if (check.length) {\n    sql += '\\nCHECK(\\n' + check + '\\n)';\n  }\n\n  sql += '\\n);';\n  return connection.run(sql);\n};\n\nvar tableCreationScripts = {\n  spatial_reference_system: [\n    'CREATE TABLE gpkg_spatial_ref_sys ('+\n    '  srs_name TEXT NOT NULL,'+\n    '  srs_id INTEGER NOT NULL PRIMARY KEY,'+\n    '  organization TEXT NOT NULL,'+\n    '  organization_coordsys_id INTEGER NOT NULL,'+\n    '  definition  TEXT NOT NULL,'+\n    '  description TEXT,'+\n    '  definition_12_063 TEXT NOT NULL DEFAULT \"undefined\"'+\n    ')',\n\n    'CREATE VIEW st_spatial_ref_sys AS'+\n    ' SELECT'+\n    '   srs_name,'+\n    '   srs_id,'+\n    '   organization,'+\n    '   organization_coordsys_id,'+\n    '   definition,'+\n    '   description'+\n    ' FROM gpkg_spatial_ref_sys',\n\n    'CREATE VIEW spatial_ref_sys AS'+\n    ' SELECT'+\n    '   srs_id AS srid,'+\n    '   organization AS auth_name,'+\n    '   organization_coordsys_id AS auth_srid,'+\n    '   definition AS srtext'+\n    ' FROM gpkg_spatial_ref_sys'\n  ],\n  contents: [\n    'CREATE TABLE gpkg_contents ('+\n    ' table_name TEXT NOT NULL PRIMARY KEY,'+\n    ' data_type TEXT NOT NULL,'+\n    ' identifier TEXT UNIQUE,'+\n    \" description TEXT DEFAULT '',\"+\n    \" last_change DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),\"+\n    ' min_x DOUBLE,'+\n    ' min_y DOUBLE,'+\n    ' max_x DOUBLE,'+\n    ' max_y DOUBLE,'+\n    ' srs_id INTEGER,'+\n    ' CONSTRAINT fk_gc_r_srs_id FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys(srs_id)'+\n    ')'\n  ],\n  geometry_columns: [\n    'CREATE TABLE gpkg_geometry_columns ('+\n    '  table_name TEXT NOT NULL,'+\n    '  column_name TEXT NOT NULL,'+\n    '  geometry_type_name TEXT NOT NULL,'+\n    '  srs_id INTEGER NOT NULL,'+\n    '  z TINYINT NOT NULL,'+\n    '  m TINYINT NOT NULL,'+\n    '  CONSTRAINT pk_geom_cols PRIMARY KEY (table_name, column_name),'+\n    '  CONSTRAINT uk_gc_table_name UNIQUE (table_name),'+\n    '  CONSTRAINT fk_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+\n    '  CONSTRAINT fk_gc_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+\n    ')',\n\n    'CREATE VIEW st_geometry_columns AS'+\n    '  SELECT'+\n    '    table_name,'+\n    '    column_name,'+\n    '    \"ST_\" || geometry_type_name AS geometry_type_name,'+\n    '    g.srs_id,'+\n    '    srs_name'+\n    '  FROM gpkg_geometry_columns as g JOIN gpkg_spatial_ref_sys AS s'+\n    '  WHERE g.srs_id = s.srs_id',\n\n    'CREATE VIEW geometry_columns AS'+\n    '  SELECT'+\n    '    table_name AS f_table_name,'+\n    '    column_name AS f_geometry_column,'+\n    '    (CASE geometry_type_name'+\n    '    \tWHEN \"GEOMETRY\" THEN 0'+\n    '    \tWHEN \"POINT\" THEN 1'+\n    '    \tWHEN \"LINESTRING\" THEN 2'+\n    '    \tWHEN \"POLYGON\" THEN 3'+\n    '    \tWHEN \"MULTIPOINT\" THEN 4'+\n    '    \tWHEN \"MULTILINESTRING\" THEN 5'+\n    '    \tWHEN \"MULTIPOLYGON\" THEN 6'+\n    '    \tWHEN \"GEOMETRYCOLLECTION\" THEN 7'+\n    '    \tWHEN \"CIRCULARSTRING\" THEN 8'+\n    '    \tWHEN \"COMPOUNDCURVE\" THEN 9'+\n    '    \tWHEN \"CURVEPOLYGON\" THEN 10'+\n    '    \tWHEN \"MULTICURVE\" THEN 11'+\n    '    \tWHEN \"MULTISURFACE\" THEN 12'+\n    '    \tWHEN \"CURVE\" THEN 13'+\n    '    \tWHEN \"SURFACE\" THEN 14'+\n    '    \tWHEN \"POLYHEDRALSURFACE\" THEN 15'+\n    '    \tWHEN \"TIN\" THEN 16'+\n    '    \tWHEN \"TRIANGLE\" THEN 17'+\n    '    \tELSE 0 END) AS geometry_type,'+\n    '    2 + (CASE z WHEN 1 THEN 1 WHEN 2 THEN 1 ELSE 0 END) + (CASE m WHEN 1 THEN 1 WHEN 2 THEN 1 ELSE 0 END) AS coord_dimension,'+\n    '    srs_id AS srid'+\n    '  FROM gpkg_geometry_columns'\n  ],\n  tile_matrix_set: [\n    'CREATE TABLE gpkg_tile_matrix_set ('+\n    '  table_name TEXT NOT NULL PRIMARY KEY,'+\n    '  srs_id INTEGER NOT NULL,'+\n    '  min_x DOUBLE NOT NULL,'+\n    '  min_y DOUBLE NOT NULL,'+\n    '  max_x DOUBLE NOT NULL,'+\n    '  max_y DOUBLE NOT NULL,'+\n    '  CONSTRAINT fk_gtms_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+\n    '  CONSTRAINT fk_gtms_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+\n    ')'\n  ],\n  tile_matrix: [\n    'CREATE TABLE gpkg_tile_matrix ('+\n    '  table_name TEXT NOT NULL,'+\n    '  zoom_level INTEGER NOT NULL,'+\n    '  matrix_width INTEGER NOT NULL,'+\n    '  matrix_height INTEGER NOT NULL,'+\n    '  tile_width INTEGER NOT NULL,'+\n    '  tile_height INTEGER NOT NULL,'+\n    '  pixel_x_size DOUBLE NOT NULL,'+\n    '  pixel_y_size DOUBLE NOT NULL,'+\n    '  CONSTRAINT pk_ttm PRIMARY KEY (table_name, zoom_level),'+\n    '  CONSTRAINT fk_tmm_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+\n    ')',\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')\"+\n    \"WHERE (NEW.zoom_level < 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_update'\"+\n    \"BEFORE UPDATE of zoom_level ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')\"+\n    \"WHERE (NEW.zoom_level < 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')\"+\n    \"WHERE (NEW.matrix_width < 1);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_update'\"+\n    \"BEFORE UPDATE OF matrix_width ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')\"+\n    \"WHERE (NEW.matrix_width < 1);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')\"+\n    \"WHERE (NEW.matrix_height < 1);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_update'\"+\n    \"BEFORE UPDATE OF matrix_height ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')\"+\n    \"WHERE (NEW.matrix_height < 1);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')\"+\n    \"WHERE NOT (NEW.pixel_x_size > 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_update'\"+\n    \"BEFORE UPDATE OF pixel_x_size ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')\"+\n    \"WHERE NOT (NEW.pixel_x_size > 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')\"+\n    \"WHERE NOT (NEW.pixel_y_size > 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_update'\"+\n    \"BEFORE UPDATE OF pixel_y_size ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')\"+\n    \"WHERE NOT (NEW.pixel_y_size > 0);\"+\n    \"END\"\n  ],\n  data_columns: [\n    'CREATE TABLE gpkg_data_columns ('+\n    '  table_name TEXT NOT NULL,'+\n    '  column_name TEXT NOT NULL,'+\n    '  name TEXT,'+\n    '  title TEXT,'+\n    '  description TEXT,'+\n    '  mime_type TEXT,'+\n    '  constraint_name TEXT,'+\n    '  CONSTRAINT pk_gdc PRIMARY KEY (table_name, column_name),'+\n    '  CONSTRAINT fk_gdc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+\n    ')'\n  ],\n  data_column_constraints: [\n    'CREATE TABLE gpkg_data_column_constraints ('+\n    '  constraint_name TEXT NOT NULL,'+\n    '  constraint_type TEXT NOT NULL, /* \"range\" | \"enum\" | \"glob\" */'+\n    '  value TEXT,'+\n    '  min NUMERIC,'+\n    '  min_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+\n    '  max NUMERIC,'+\n    '  max_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+\n    '  description TEXT,'+\n    '  CONSTRAINT gdcc_ntv UNIQUE (constraint_name, constraint_type, value)'+\n    ')'\n  ],\n  metadata: [\n    'CREATE TABLE gpkg_metadata ('+\n    '  id INTEGER CONSTRAINT m_pk PRIMARY KEY ASC NOT NULL UNIQUE,'+\n    '  md_scope TEXT NOT NULL DEFAULT \"dataset\",'+\n    '  md_standard_uri TEXT NOT NULL,'+\n    '  mime_type TEXT NOT NULL DEFAULT \"text/xml\",'+\n    '  metadata TEXT NOT NULL'+\n    ')',\n\n    \"CREATE TRIGGER 'gpkg_metadata_md_scope_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata violates \"+\n    \"constraint: md_scope must be one of undefined | fieldSession | \"+\n    \"collectionSession | series | dataset | featureType | feature | \"+\n    \"attributeType | attribute | tile | model | catalogue | schema | \"+\n    \"taxonomy software | service | collectionHardware | \"+\n    \"nonGeographicDataset | dimensionGroup') \"+\n    \"WHERE NOT(NEW.md_scope IN \"+\n    \"('undefined','fieldSession','collectionSession','series','dataset', \"+\n    \"'featureType','feature','attributeType','attribute','tile','model', \"+\n    \"'catalogue','schema','taxonomy','software','service', \"+\n    \"'collectionHardware','nonGeographicDataset','dimensionGroup')); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_md_scope_update' \"+\n    \"BEFORE UPDATE OF 'md_scope' ON 'gpkg_metadata' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata violates \"+\n    \"constraint: md_scope must be one of undefined | fieldSession | \"+\n    \"collectionSession | series | dataset | featureType | feature | \"+\n    \"attributeType | attribute | tile | model | catalogue | schema | \"+\n    \"taxonomy software | service | collectionHardware | \"+\n    \"nonGeographicDataset | dimensionGroup') \"+\n    \"WHERE NOT(NEW.md_scope IN \"+\n    \"('undefined','fieldSession','collectionSession','series','dataset', \"+\n    \"'featureType','feature','attributeType','attribute','tile','model', \"+\n    \"'catalogue','schema','taxonomy','software','service', \"+\n    \"'collectionHardware','nonGeographicDataset','dimensionGroup')); \"+\n    \"END\"\n  ],\n  metadata_reference: [\n    \"CREATE TABLE gpkg_metadata_reference (\" +\n    \"  reference_scope TEXT NOT NULL,\" +\n    \"  table_name TEXT,\" +\n    \"  column_name TEXT,\" +\n    \"  row_id_value INTEGER,\" +\n    \"  timestamp DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),\" +\n    \"  md_file_id INTEGER NOT NULL,\" +\n    \"  md_parent_id INTEGER,\" +\n    \"  CONSTRAINT crmr_mfi_fk FOREIGN KEY (md_file_id) REFERENCES gpkg_metadata(id),\" +\n    \"  CONSTRAINT crmr_mpi_fk FOREIGN KEY (md_parent_id) REFERENCES gpkg_metadata(id)\" +\n    \")\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: reference_scope must be one of \\\"geopackage\\\", \"+\n    \"table\\\", \\\"column\\\", \\\"row\\\", \\\"row/col\\\"') \"+\n    \"WHERE NOT NEW.reference_scope IN \"+\n    \"('geopackage','table','column','row','row/col'); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_update' \"+\n    \"BEFORE UPDATE OF 'reference_scope' ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: referrence_scope must be one of \\\"geopackage\\\", \"+\n    \"\\\"table\\\", \\\"column\\\", \\\"row\\\", \\\"row/col\\\"') \"+\n    \"WHERE NOT NEW.reference_scope IN \"+\n    \"('geopackage','table','column','row','row/col'); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_column_name_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: column name must be NULL when reference_scope \"+\n    \"is \\\"geopackage\\\", \\\"table\\\" or \\\"row\\\"') \"+\n    \"WHERE (NEW.reference_scope IN ('geopackage','table','row') \"+\n    \"AND NEW.column_name IS NOT NULL); \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: column name must be defined for the specified \"+\n    \"table when reference_scope is \\\"column\\\" or \\\"row/col\\\"') \"+\n    \"WHERE (NEW.reference_scope IN ('column','row/col') \"+\n    \"AND NOT NEW.table_name IN ( \"+\n    \"SELECT name FROM SQLITE_MASTER WHERE type = 'table' \"+\n    \"AND name = NEW.table_name \"+\n    \"AND sql LIKE ('%' || NEW.column_name || '%'))); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_column_name_update' \"+\n    \"BEFORE UPDATE OF column_name ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: column name must be NULL when reference_scope \"+\n    \"is \\\"geopackage\\\", \\\"table\\\" or \\\"row\\\"') \"+\n    \"WHERE (NEW.reference_scope IN ('geopackage','table','row') \"+\n    \"AND NEW.column_nameIS NOT NULL); \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: column name must be defined for the specified \"+\n    \"table when reference_scope is \\\"column\\\" or \\\"row/col\\\"') \"+\n    \"WHERE (NEW.reference_scope IN ('column','row/col') \"+\n    \"AND NOT NEW.table_name IN ( \"+\n    \"SELECT name FROM SQLITE_MASTER WHERE type = 'table' \"+\n    \"AND name = NEW.table_name \"+\n    \"AND sql LIKE ('%' || NEW.column_name || '%'))); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: row_id_value must be NULL when reference_scope \"+\n    \"is \\\"geopackage\\\", \\\"table\\\" or \\\"column\\\"') \"+\n    \"WHERE NEW.reference_scope IN ('geopackage','table','column') \"+\n    \"AND NEW.row_id_value IS NOT NULL; \"+\n    \"END \",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_update' \"+\n    \"BEFORE UPDATE OF 'row_id_value' ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: row_id_value must be NULL when reference_scope \"+\n    \"is \\\"geopackage\\\", \\\"table\\\" or \\\"column\\\"') \"+\n    \"WHERE NEW.reference_scope IN ('geopackage','table','column') \"+\n    \"AND NEW.row_id_value IS NOT NULL; \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_timestamp_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: timestamp must be a valid time in ISO 8601 \"+\n    \"\\\"yyyy-mm-ddThh:mm:ss.cccZ\\\" form') \"+\n    \"WHERE NOT (NEW.timestamp GLOB \"+\n    \"'[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]Z' \"+\n    \"AND strftime('%s',NEW.timestamp) NOT NULL); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_timestamp_update' \"+\n    \"BEFORE UPDATE OF 'timestamp' ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: timestamp must be a valid time in ISO 8601 \"+\n    \"\\\"yyyy-mm-ddThh:mm:ss.cccZ\\\" form') \"+\n    \"WHERE NOT (NEW.timestamp GLOB \"+\n    \"'[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]Z' \"+\n    \"AND strftime('%s',NEW.timestamp) NOT NULL); \"+\n    \"END \"\n  ],\n  extensions: [\n    'CREATE TABLE gpkg_extensions ('+\n    '  table_name TEXT,'+\n    '  column_name TEXT,'+\n    '  extension_name TEXT NOT NULL,'+\n    '  definition TEXT NOT NULL,'+\n    '  scope TEXT NOT NULL,'+\n    '  CONSTRAINT ge_tce UNIQUE (table_name, column_name, extension_name)'+\n    ')'\n  ],\n  table_index: [\n    'CREATE TABLE nga_table_index ('+\n    '  table_name TEXT NOT NULL PRIMARY KEY,'+\n    '  last_indexed DATETIME'+\n    ')'\n  ],\n  geometry_index: [\n    'CREATE TABLE nga_geometry_index ('+\n    '  table_name TEXT NOT NULL,'+\n    '  geom_id INTEGER NOT NULL,'+\n    '  min_x DOUBLE NOT NULL,'+\n    '  max_x DOUBLE NOT NULL,'+\n    '  min_y DOUBLE NOT NULL,'+\n    '  max_y DOUBLE NOT NULL,'+\n    '  min_z DOUBLE,'+\n    '  max_z DOUBLE,'+\n    '  min_m DOUBLE,'+\n    '  max_m DOUBLE,'+\n    '  CONSTRAINT pk_ngi PRIMARY KEY (table_name, geom_id),'+\n    '  CONSTRAINT fk_ngi_nti_tn FOREIGN KEY (table_name) REFERENCES nga_table_index(table_name)'+\n    ')'\n  ],\n  feature_tile_link: [\n    'CREATE TABLE nga_feature_tile_link ('+\n    '  feature_table_name TEXT NOT NULL,'+\n    '  tile_table_name TEXT NOT NULL,'+\n    '  CONSTRAINT pk_nftl PRIMARY KEY (feature_table_name, tile_table_name)'+\n    ')'\n  ],\n  extended_relations: [\n    'CREATE TABLE gpkgext_relations (' +\n    '  id INTEGER PRIMARY KEY AUTOINCREMENT,' +\n    '  base_table_name TEXT NOT NULL,' +\n    '  base_primary_column TEXT NOT NULL DEFAULT \\'id\\',' +\n    '  related_table_name TEXT NOT NULL,' +\n    '  related_primary_column TEXT NOT NULL DEFAULT \\'id\\',' +\n    '  relation_name TEXT NOT NULL,' +\n    '  mapping_table_name TEXT NOT NULL UNIQUE' +\n    ')'\n  ],\n  contents_id: [\n    'CREATE TABLE nga_contents_id (' +\n    '  id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' +\n    '  table_name TEXT NOT NULL,' +\n    '  CONSTRAINT uk_nci_table_name UNIQUE (table_name),' +\n    '  CONSTRAINT fk_nci_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)' +\n    ')'\n  ]\n};\n\n},{\"../core/srs\":9,\"./dataTypes\":14}],20:[function(require,module,exports){\n/**\n * Base Extension\n * @module extension/baseExtension\n */\n\nvar Extension = require('./index').Extension\n  , ExtensionDao = require('./index').ExtensionDao;\n/**\n * Abstract base GeoPackage extension\n * @class\n */\nvar BaseExtension = function(geoPackage) {\n  this.geoPackage = geoPackage;\n  this.connection = geoPackage.connection;\n  this.extensionsDao = geoPackage.getExtensionDao();\n}\n\nmodule.exports = BaseExtension;\n\n/**\n * Get the extension or create as needed\n * @param  {String}   extensionName extension name\n * @param  {String}   tableName     table name\n * @param  {String}   columnName    column name\n * @param  {String}   definition    extension definition\n * @param  {String}   scopeType     extension scope type\n * @return {Promise<module:extension/baseExtension~BaseExtension>}\n */\nBaseExtension.prototype.getOrCreate = function(extensionName, tableName, columnName, definition, scopeType) {\n  var extension = this.getExtension(extensionName, tableName, columnName);\n  if (extension) {\n    return Promise.resolve(extension);\n  }\n  return this.extensionsDao.createTable()\n  .then(function() {\n    return this.createExtension(extensionName, tableName, columnName, definition, scopeType);\n  }.bind(this));\n};\n\n/**\n * Get the extension for the name, table name and column name\n * @param  {String}   extensionName extension name\n * @param  {String}   tableName     table name\n * @param  {String}   columnName    column name\n * @param  {Function} callback      Called with err if one occurred and the extension\n */\nBaseExtension.prototype.getExtension = function(extensionName, tableName, columnName) {\n  if (!this.extensionsDao.isTableExists()) {\n    return false;\n  }\n  return this.extensionsDao.queryByExtensionAndTableNameAndColumnName(extensionName, tableName, columnName);\n};\n\n/**\n * Determine if the GeoPackage has the extension\n * @param  {String}   extensionName extension name\n * @param  {String}   tableName     table name\n * @param  {String}   columnName    column name\n */\nBaseExtension.prototype.hasExtension = function(extensionName, tableName, columnName) {\n  var exists = this.getExtension(extensionName, tableName, columnName);\n  return !!this.getExtension(extensionName, tableName, columnName).length;\n};\n\nBaseExtension.prototype.createExtension = function(extensionName, tableName, columnName, definition, scopeType) {\n  var extension = new Extension();\n  extension.table_name = tableName;\n  extension.column_name = columnName;\n  extension.extension_name = extensionName;\n  extension.definition = definition;\n  extension.scope = scopeType;\n  return this.extensionsDao.create(extension);\n};\n\n},{\"./index\":25}],21:[function(require,module,exports){\n/**\n * @memberOf module:extension/contents\n * @class ContentsId\n */\n\n/**\n * Contents Id object, for maintaining a unique identifier for contents tables\n * @constructor\n */\nvar ContentsId = function() {\n  /**\n   * Id column, primary key\n   * @member {Number}\n   */\n  this.id = undefined;\n\n  /**\n   * Table name column\n   * @member {String}\n   */\n  this.table_name = undefined;\n};\n\nmodule.exports = ContentsId;\n\n},{}],22:[function(require,module,exports){\n/**\n * @memberOf module:extension/contents\n * @class ContentsIdDao\n */\n\nvar Dao = require('../../dao/dao')\n  , ContentsId = require('./contentsId');\nvar util = require('util');\n\n/**\n * Contents Id Data Access Object\n * @extends {module:dao/dao~Dao}\n * @constructor\n */\nvar ContentsIdDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(ContentsIdDao, Dao);\n\n/**\n * Create a {module:extension/contents.ContentsId} object\n * @return {module:extension/contents.ContentsId}\n */\nContentsIdDao.prototype.createObject = function() {\n  return new ContentsId();\n};\n\n/**\n * Create the necessary tables for this dao\n * @return {Promise}\n */\nContentsIdDao.prototype.createTable = function() {\n  return this.geoPackage.getTableCreator().createContentsId();\n};\n\n/**\n * Get all the table names\n * @return {string[]}\n */\nContentsIdDao.prototype.getTableNames = function() {\n  var tableNames = [];\n  var tableNameColumns = this.queryForColumns('table_name');\n  for (var i = 0; i < tableNameColumns.length; i++) {\n    tableNames.push(tableNameColumns[i].table_name);\n  }\n  return tableNames;\n};\n\n/**\n * Query by table name\n * @param  {string} tableName name of the table\n * @return {module:extension/contents.ContentsId}\n */\nContentsIdDao.prototype.queryForTableName = function(tableName) {\n  var contentsIds = this.queryForAll(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName));\n  if (contentsIds.length > 0) {\n    return contentsIds[0];\n  } else {\n    return null;\n  }\n};\n\n/**\n * Delete by tableName\n * @param  {string} tableName the table name to delete by\n * @return {number} number of deleted rows\n */\nContentsIdDao.prototype.deleteByTableName = function(tableName) {\n  return this.deleteWhere(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName));\n};\n\nContentsIdDao.TABLE_NAME = 'nga_contents_id';\nContentsIdDao.COLUMN_ID = 'id';\nContentsIdDao.COLUMN_TABLE_NAME = 'table_name';\n\nContentsIdDao.prototype.gpkgTableName = ContentsIdDao.TABLE_NAME;\nContentsIdDao.prototype.idColumns = ['id'];\n\nmodule.exports = ContentsIdDao;\n\n},{\"../../dao/dao\":11,\"./contentsId\":21,\"util\":343}],23:[function(require,module,exports){\n/**\n * @module extension/contents\n */\n\nvar BaseExtension = require('../baseExtension')\n\t, Extension = require('../.').Extension\n\t, ContentsDao = require('../../core/contents').ContentsDao\n\t, ContentsIdDao = require('./contentsIdDao');\n\nvar util = require('util');\n\n/**\n * Style extension\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @extends {module:extension/baseExtension~BaseExtension}\n * @class ContentsIdExtension\n * @constructor\n */\nvar ContentsIdExtension = function(geoPackage) {\n\tBaseExtension.call(this, geoPackage);\n\tthis.contentsIdDao = geoPackage.getContentsIdDao();\n};\n\nutil.inherits(ContentsIdExtension, BaseExtension);\n\n/**\n * Get or create the contents id extension\n * @return {Promise}\n */\nContentsIdExtension.prototype.getOrCreateExtension = function() {\n\treturn this.getOrCreate(ContentsIdExtension.EXTENSION_NAME, null, null, ContentsIdExtension.EXTENSION_DEFINITION, Extension.READ_WRITE)\n\t\t.then(function() {\n\t\t\treturn this.contentsIdDao.createTable();\n\t\t}.bind(this));\n};\n\n/**\n * Get the ContentsIdDao\n * @returns {module:extension/contents.ContentsIdDao}\n */\nContentsIdExtension.prototype.getDao = function() {\n\treturn this.contentsIdDao;\n};\n\nContentsIdExtension.prototype.has = function () {\n\treturn this.hasExtension(ContentsIdExtension.EXTENSION_NAME, null, null) && this.contentsIdDao.isTableExists();\n};\n\n/**\n * Get the ContentsId object\n * @param contents {module:core/contents.Contents}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.get = function (contents) {\n\tvar contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.getByTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Get the ContentsId object\n * @param tableName\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.getByTableName = function (tableName) {\n\tvar contentsId = null;\n\tif (this.contentsIdDao.isTableExists()) {\n\t\tcontentsId = this.contentsIdDao.queryForTableName(tableName);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Get the ContentsId id\n * @param contents {module:core/contents.Contents}\n * @returns {Number}\n */\nContentsIdExtension.prototype.getId = function (contents) {\n\tlet contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.getIdByTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Get the ContentsId id\n * @param tableName\n * @returns {Number}\n */\nContentsIdExtension.prototype.getIdByTableName = function (tableName) {\n\tvar id = null;\n\tif (this.contentsIdDao.isTableExists()) {\n\t\tvar contentsId = this.contentsIdDao.queryForTableName(tableName);\n\t\tif (contentsId) {\n\t\t\tid = contentsId.id;\n\t\t}\n\t}\n\treturn id;\n};\n\n/**\n * Creates contentsId for contents\n * @param contents {module:core/contents.Contents}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.create = function (contents) {\n\tvar contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.createWithTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Creates contentsId for contents\n * @param tableName\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.createWithTableName = function (tableName) {\n\tvar contentsId = this.contentsIdDao.createObject();\n\tcontentsId.table_name = tableName;\n\tcontentsId.id = this.contentsIdDao.create(contentsId);\n\treturn contentsId;\n};\n\n/**\n * Creates contentsId for contents\n * @param contents {module:core/contents.Contents}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.createId = function (contents) {\n\tvar contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.createIdWithTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Creates contentsId for contents\n * @param tableName {string}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.createIdWithTableName = function (tableName) {\n\treturn this.createWithTableName(tableName);\n};\n\n/**\n * Gets or creates contentsId for contents\n * @param contents {module:core/contents.Contents}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.getOrCreateId = function (contents) {\n\tvar contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.getOrCreateIdByTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Gets or creates contentsId for table name\n * @param tableName {string}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.getOrCreateIdByTableName = function (tableName) {\n\tvar contentId = this.getByTableName(tableName);\n\tif (contentId == null) {\n\t\tcontentId = this.createWithTableName(tableName);\n\t}\n\treturn contentId;\n};\n\n/**\n * Deletes contentsId for contents\n * @param contents {module:core/contents.Contents}\n * @returns {number} number of deleted rows\n */\nContentsIdExtension.prototype.deleteId = function (contents) {\n\tvar deleted = false;\n\tif (contents && contents.table_name) {\n\t\tdeleted = this.deleteIdByTableName(contents.table_name);\n\t}\n\treturn deleted;\n};\n\n/**\n * Deletes contentId for table name\n * @param tableName {string}\n * @returns {number} number of deleted rows\n */\nContentsIdExtension.prototype.deleteIdByTableName = function (tableName) {\n\treturn this.contentsIdDao.deleteByTableName(tableName);\n};\n\n/**\n * Number of contentsIds\n * @returns {number}\n */\nContentsIdExtension.prototype.count = function () {\n\tvar count = 0;\n\tif (this.has()) {\n\t\tcount = this.contentsIdDao.count();\n\t}\n\treturn count;\n};\n\n/**\n * Create contentsIds for contents of type passed in\n * @param type {string} defaults to \"\"\n * @returns {number}\n */\nContentsIdExtension.prototype.createIds = function (type = \"\") {\n\tvar missing = this.getMissing(type);\n\tfor (var i = 0; i < missing.length; i++) {\n\t\tthis.getOrCreateIdByTableName(missing[i].table_name);\n\t}\n\treturn missing.length;\n};\n\n/**\n * Deletes ids by type\n * @param type\n * @returns {number}\n */\nContentsIdExtension.prototype.deleteIds = function (type = \"\") {\n\tvar deleted = 0;\n\tif (this.has()) {\n\t\tif (type.length === 0) {\n\t\t\tdeleted = this.contentsIdDao.deleteAll();\n\t\t} else {\n\t\t\tvar ids = this.getIdsByType(type);\n\t\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\t\tdeleted += this.contentsIdDao.deleteById(ids[i].id);\n\t\t\t}\n\t\t}\n\t}\n\treturn deleted;\n};\n\nContentsIdExtension.prototype.getIdsByType = function (type = \"\") {\n\tvar contentIds = [];\n\tif (this.has()) {\n\t\tvar query = \"SELECT \";\n\t\tquery += ContentsIdDao.COLUMN_ID;\n\t\tquery += \", \";\n\t\tquery += ContentsIdDao.COLUMN_TABLE_NAME;\n\t\tquery += \" FROM \" + ContentsIdDao.TABLE_NAME;\n\t\tquery += \" WHERE \";\n\t\tquery += ContentsIdDao.COLUMN_TABLE_NAME;\n\t\tquery += \" IN (SELECT \";\n\t\tquery += ContentsDao.COLUMN_TABLE_NAME;\n\t\tquery += \" FROM \";\n\t\tquery += ContentsDao.TABLE_NAME;\n\t\tvar where = \"\";\n\t\tvar params = [];\n\t\tif (type != null && type.length > 0) {\n\t\t\twhere += ContentsDao.COLUMN_DATA_TYPE;\n\t\t\twhere += \" = ?\";\n\t\t\tparams.push(type);\n\t\t}\n\t\tif (where.length > 0) {\n\t\t\tquery += \" WHERE \" + where;\n\t\t}\n\t\tquery += \")\";\n\t\tcontentIds = this.connection.all(query, params);\n\t}\n\treturn contentIds;\n};\n\n/**\n * Get contents without contents ids\n * @param type\n * @returns {string[]}\n */\nContentsIdExtension.prototype.getMissing = function (type = \"\") {\n\tvar query = \"SELECT \" + ContentsDao.COLUMN_TABLE_NAME + \" FROM \" + ContentsDao.TABLE_NAME;\n\tvar where = \"\";\n\tvar params = [];\n\tif (type != null && type.length > 0) {\n\t\twhere += ContentsDao.COLUMN_DATA_TYPE;\n\t\twhere += \" = ?\";\n\t\tparams.push(type);\n\t}\n\tif (this.has()) {\n\t\tif (where.length > 0) {\n\t\t\twhere += \" AND \";\n\t\t}\n\t\twhere += ContentsDao.COLUMN_TABLE_NAME;\n\t\twhere += \" NOT IN (SELECT \";\n\t\twhere += ContentsIdDao.COLUMN_TABLE_NAME;\n\t\twhere += \" FROM \";\n\t\twhere += ContentsIdDao.TABLE_NAME;\n\t\twhere += \")\";\n\t}\n\tif (where.length > 0) {\n\t\tquery += \" WHERE \" + where;\n\t}\n\treturn this.connection.all(query, params);\n};\n\n/**\n * Remove contents id extension\n */\nContentsIdExtension.prototype.removeExtension = function() {\n\tif (this.contentsIdDao.isTableExists()) {\n\t\tthis.geoPackage.deleteTable(ContentsIdDao.TABLE_NAME);\n\t}\n\tif (this.extensionsDao.isTableExists()) {\n\t\tthis.extensionsDao.deleteByExtension(ContentsIdDao.EXTENSION_NAME);\n\t}\n};\n\nContentsIdExtension.EXTENSION_NAME = 'nga_contents_id';\nContentsIdExtension.EXTENSION_AUTHOR = 'nga';\nContentsIdExtension.EXTENSION_NAME_NO_AUTHOR = 'contents_id';\nContentsIdExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/contents-id.html';\n\nmodule.exports = ContentsIdExtension;\n\n},{\"../.\":25,\"../../core/contents\":8,\"../baseExtension\":20,\"./contentsIdDao\":22,\"util\":343}],24:[function(require,module,exports){\n/**\n * CrsWktExtension module.\n * @module extension/crsWkt\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension;\n\nvar util = require('util');\n\n/**\n * OGC Well known text representation of Coordinate Reference Systems extensionName\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @class\n * @extends {module:extension/baseExtension~BaseExtension}\n */\nvar CrsWktExtension = function(geoPackage) {\n  BaseExtension.call(this, geoPackage);\n\n  this.extensionName = CrsWktExtension.EXTENSION_NAME;\n\n  this.extensionDefinition = CrsWktExtension.EXTENSION_CRS_WKT_DEFINITION;\n}\n\nutil.inherits(CrsWktExtension, BaseExtension);\n\n/**\n * Get or create the extension\n * @return {Promise<module:extension/crsWkt~CrsWktExtension>}\n */\nCrsWktExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);\n};\n\nCrsWktExtension.EXTENSION_NAME = 'gpkg_crs_wkt';\nCrsWktExtension.EXTENSION_CRS_WKT_AUTHOR = 'gpkg';\nCrsWktExtension.EXTENSION_CRS_WKT_NAME_NO_AUTHOR = 'crs_wkt';\nCrsWktExtension.EXTENSION_CRS_WKT_DEFINITION = 'http://www.geopackage.org/spec/#extension_crs_wkt';\n\nmodule.exports.CrsWktExtension = CrsWktExtension;\n\n},{\"../.\":25,\"../baseExtension\":20,\"util\":343}],25:[function(require,module,exports){\n/**\n * Metadata module.\n * @module extension\n * @see module:dao/dao\n */\n\nvar Dao = require('../dao/dao')\n  , ColumnValues = require('../dao/columnValues')\n  , TableCreator = require('../db/tableCreator');\n\nvar util = require('util');\n\n/**\n  * Indicates that a particular extension applies to a GeoPackage, a table in a\n  * GeoPackage or a column of a table in a GeoPackage. An application that access\n  * a GeoPackage can query the gpkg_extensions table instead of the contents of\n  * all the user data tables to determine if it has the required capabilities to\n  * read or write to tables with extensions, and to “fail fast” and return an\n  * error message if it does not.\n * @class Extension\n */\nvar Extension = function() {\n\n  /**\n   * Name of the table that requires the extension. When NULL, the extension\n   * is required for the entire GeoPackage. SHALL NOT be NULL when the\n   * column_name is not NULL.\n   * @member {String}\n   */\n  this.table_name;\n\n  /**\n   * Name of the column that requires the extension. When NULL, the extension\n   * is required for the entire table.\n   * @member {String}\n   */\n  this.column_name;\n\n  /**\n   * The case sensitive name of the extension that is required, in the form\n   * <author>_<extension_name>.\n   * @member {String}\n   */\n  this.extension_name;\n\n  /**\n   * Definition of the extension in the form specfied by the template in\n   * GeoPackage Extension Template (Normative) or reference thereto.\n   * @member {String}\n   */\n  this.definition;\n\n  /**\n   * Indicates scope of extension effects on readers / writers: read-write or\n   * write-only in lowercase.\n   * @member {String}\n   */\n  this.scope;\n}\n\nExtension.EXTENSION_NAME_DIVIDER = \"_\";\n\nExtension.READ_WRITE = \"read-write\";\nExtension.WRITE_ONLY = \"write-only\";\n\nExtension.prototype.setExtensionName = function(author, extensionName) {\n  this.extension_name = Extension.buildExtensionName(author, extensionName);\n};\n\nExtension.prototype.getAuthor = function() {\n  return Extension.getAuthorWithExtensionName(this.extension_name);\n}\n\nExtension.prototype.getExtensionNameNoAuthor = function() {\n  return Extension.getExtensionNameNoAuthor(this.extension_name);\n}\n\nExtension.buildExtensionName = function(author, extensionName) {\n  return author + Extension.EXTENSION_NAME_DIVIDER + extensionName;\n}\n\nExtension.getAuthorWithExtensionName = function(extensionName) {\n  return extensionName.split(Extension.EXTENSION_NAME_DIVIDER)[0];\n}\n\nExtension.getExtensionNameNoAuthor = function(extensionName) {\n  return extensionName.slice(extensionName.indexOf(Extension.EXTENSION_NAME_DIVIDER)+1);\n}\n\n/**\n * Extension Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar ExtensionDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(ExtensionDao, Dao);\n\nExtensionDao.prototype.createObject = function(row) {\n  var e = new Extension();\n  for (var key in row) {\n    e[key] = row[key];\n  }\n  return e;\n};\n\nExtensionDao.prototype.queryByExtension = function(extensionName) {\n  var results = this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  var e = this.createObject(results[0]);\n  return e;\n}\n\nExtensionDao.prototype.queryAllByExtension = function(extensionName) {\n  var extensions = []\n  for (var row of this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName)) {\n    var e = this.createObject(row);\n    extensions.push(e);\n  }\n  if (extensions.length) {\n    return extensions;\n  } else {\n    return false;\n  }\n}\n\nExtensionDao.prototype.queryByExtensionAndTableName = function(extensionName, tableName) {\n  var values = new ColumnValues();\n  values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);\n  var extensions = [];\n  for (var row of this.queryForFieldValues(values)) {\n    var e = this.createObject(row);\n    extensions.push(e);\n  }\n  if (extensions.length) {\n    return extensions;\n  } else {\n    return false;\n  }\n}\n\nExtensionDao.prototype.queryByExtensionAndTableNameAndColumnName = function (extensionName, tableName, columnName) {\n  var values = new ColumnValues();\n  values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);\n  values.addColumn(ExtensionDao.COLUMN_COLUMN_NAME, columnName);\n  var extensions = [];\n  for (var row of this.queryForFieldValues(values)) {\n    var e = this.createObject(row);\n    extensions.push(e);\n  }\n  if (extensions.length) {\n    return extensions;\n  } else {\n    return false;\n  }\n};\n\nExtensionDao.prototype.createTable = function() {\n  var tc = new TableCreator(this.geoPackage);\n  return tc.createExtensions();\n}\n\nExtensionDao.prototype.deleteByExtension = function(extensionName) {\n  var values = new ColumnValues();\n  values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  this.deleteWhere(this.buildWhere(values, '='), this.buildWhereArgs(values));\n}\n\nExtensionDao.prototype.deleteByExtensionAndTableName = function(extensionName, tableName) {\n  var values = new ColumnValues();\n  values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);\n  this.deleteWhere(this.buildWhere(values, 'and'), this.buildWhereArgs(values));\n}\n\nExtensionDao.TABLE_NAME = \"gpkg_extensions\";\nExtensionDao.COLUMN_TABLE_NAME = \"table_name\";\nExtensionDao.COLUMN_COLUMN_NAME = \"column_name\";\nExtensionDao.COLUMN_EXTENSION_NAME = \"extension_name\";\nExtensionDao.COLUMN_DEFINITION = \"definition\";\nExtensionDao.COLUMN_SCOPE = \"scope\";\n\nExtensionDao.prototype.gpkgTableName = ExtensionDao.TABLE_NAME;\nExtensionDao.prototype.idColumns = [ExtensionDao.COLUMN_TABLE_NAME, ExtensionDao.COLUMN_COLUMN_NAME, ExtensionDao.COLUMN_EXTENSION_NAME];\n\nmodule.exports.ExtensionDao = ExtensionDao;\nmodule.exports.Extension = Extension;\n\n},{\"../dao/columnValues\":10,\"../dao/dao\":11,\"../db/tableCreator\":19,\"util\":343}],26:[function(require,module,exports){\n/**\n * Feature Table Index\n * @module extension/index\n */\n\nvar Extension = require('../index').Extension\n  , ExtensionDao = require('../index').ExtensionDao\n  , BaseExtension = require('../baseExtension')\n  , TableIndexDao = require('./tableIndex').TableIndexDao\n  , TableIndex = require('./tableIndex').TableIndex\n  , GeometryIndexDao = require('./geometryIndex').GeometryIndexDao\n  , RTreeIndexDao = require('../rtree').RTreeIndexDao\n  , RTreeIndex = require('../rtree').RTreeIndex\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , EnvelopeBuilder = require('../../geom/envelopeBuilder');\n\nvar proj4 = require('proj4');\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nvar util = require('util');\n\n/**\n * This class will either use the RTree index if it exists, or the\n * Feature Table Index NGA Extension implementation. This extension is used to\n * index Geometries within a feature table by their minimum bounding box for\n * bounding box queries.\n * @extends {module:extension/baseExtension~BaseExtension}\n * @class\n */\nvar FeatureTableIndex = function(geoPackage, featureDao) {\n  BaseExtension.call(this, geoPackage);\n\n  this.progress;\n\n  /**\n   * Feature Dao to index\n   * @type {module:features/user/featureDao~FeatureDao}\n   */\n  this.featureDao = featureDao;\n\n  this.extensionName = Extension.buildExtensionName(FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR, FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR);\n\n  this.extensionDefinition = FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION;\n\n  this.tableName = featureDao.table_name;\n\n  this.columnName = featureDao.getGeometryColumnName();\n\n  this.extensionsDao = geoPackage.getExtensionDao();\n\n  this.tableIndexDao = geoPackage.getTableIndexDao();\n\n  this.geometryIndexDao = geoPackage.getGeometryIndexDao(featureDao);\n\n  this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao);\n  this.rtreeIndexDao.gpkgTableName = 'rtree_'+this.tableName+'_'+this.columnName;\n\n  this.rtreeIndex = new RTreeIndex(geoPackage, featureDao);\n\n  /**\n   * true if the table is indexed with an RTree\n   * @type {Boolean}\n   */\n  this.rtreeIndexed = this.hasExtension('gpkg_rtree_index', this.tableName, this.columnName);\n}\n\nutil.inherits(FeatureTableIndex, BaseExtension);\n\n/**\n * Index the table if not already indexed\n * @param  {Function} progress function which is called with progress while indexing\n * @return {Promise<Boolean>} promise resolved when the indexing is complete\n */\nFeatureTableIndex.prototype.index = function(progress) {\n  return this.indexWithForce(false, progress);\n};\n\n/**\n * Index the table if not already indexed or force is true\n * @param  {Boolean} force force index even if the table is already indexed\n * @param  {Function} progress function which is called with progress while indexing\n * @return {Promise<Boolean>} promise resolved when the indexing is complete\n */\nFeatureTableIndex.prototype.indexWithForce = function(force, progress) {\n  progress = progress || function() {};\n  this.progress = function(message) {\n    setTimeout(progress, 0, message);\n  };\n  var indexed = this.isIndexed();\n  if (force || !indexed) {\n    return this.getOrCreateExtension()\n    .then(function(extension) {\n      return this.getOrCreateTableIndex();\n    }.bind(this))\n    .then(function(tableIndex) {\n      return this.createOrClearGeometryIndicies()\n      .then(function() {\n        return this.indexTable(tableIndex);\n      }.bind(this))\n      .then(function() {\n        return true;\n      });\n    }.bind(this));\n  } else {\n    return Promise.resolve(indexed);\n  }\n}\n\n/**\n * Check if the table is indexed either with an RTree or the NGA Feature Table Index\n * @return {Boolean}\n */\nFeatureTableIndex.prototype.isIndexed = function () {\n  if (this.rtreeIndexed) return true;\n\n  try {\n    var result = this.getFeatureTableIndexExtension();\n    if (result) {\n      var contentsDao = this.geoPackage.getContentsDao();\n      var contents = contentsDao.queryForId(this.tableName);\n      if (!contents) return false;\n      var lastChange = new Date(contents.last_change);\n      var tableIndex = this.tableIndexDao.queryForId(this.tableName);\n      if (!tableIndex || !tableIndex.last_indexed) {\n        return false;\n      }\n      var lastIndexed = new Date(tableIndex.last_indexed);\n      return lastIndexed >= lastChange;\n    } else {\n      return false;\n    }\n  } catch (e) {\n    return false;\n  }\n};\n\n/**\n * Returns the feature table index extension for this table and column name if exists\n * @return {module:extension~Extension}\n */\nFeatureTableIndex.prototype.getFeatureTableIndexExtension = function () {\n  return this.getExtension(this.extensionName, this.tableName, this.columnName);\n};\n\n/**\n * Get or create the extension for this table name and column name\n * @return {module:extension~Extension}\n */\nFeatureTableIndex.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.READ_WRITE);\n};\n\n/**\n * Get or create if needed the table index\n * @return {Promise<TableIndex>}\n */\nFeatureTableIndex.prototype.getOrCreateTableIndex = function() {\n  var tableIndex = this.getTableIndex();\n  if (tableIndex) return Promise.resolve(tableIndex);\n  return this.tableIndexDao.createTable()\n  .then(function() {\n    this.createTableIndex();\n    return this.getTableIndex();\n  }.bind(this));\n};\n\n/**\n * Create the table index\n * @return {module:extension/index~TableIndex}\n */\nFeatureTableIndex.prototype.createTableIndex = function() {\n  var ti = new TableIndex();\n  ti.table_name = this.tableName;\n  ti.last_indexed = this.lastIndexed;\n  return this.tableIndexDao.create(ti);\n};\n\n/**\n * Get the table index\n * @return {module:extension/index~TableIndex}\n */\nFeatureTableIndex.prototype.getTableIndex = function() {\n  if (this.tableIndexDao.isTableExists()) {\n    return this.tableIndexDao.queryForId(this.tableName);\n  } else {\n    return;\n  }\n};\n\n/**\n * Clear the geometry indices or create the table if needed\n * @return {Promise} resolved when complete\n */\nFeatureTableIndex.prototype.createOrClearGeometryIndicies = function() {\n  return this.geometryIndexDao.createTable()\n  .then(function() {\n    return this.clearGeometryIndicies();\n  }.bind(this));\n};\n\n/**\n * Clears the geometry indices\n * @return {Number} number of rows deleted\n */\nFeatureTableIndex.prototype.clearGeometryIndicies = function() {\n  var where = this.geometryIndexDao.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, this.tableName);\n  var whereArgs = this.geometryIndexDao.buildWhereArgs(this.tableName);\n  return this.geometryIndexDao.deleteWhere(where, whereArgs);\n};\n\n/**\n * Indexes the table\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex\n * @return {Promise} resolved when complete\n */\nFeatureTableIndex.prototype.indexTable = function(tableIndex) {\n  return new Promise(function(resolve, reject) {\n    setTimeout(function() {\n      this.indexChunk(0, tableIndex, resolve, reject);\n    }.bind(this));\n  }.bind(this))\n  .then(function(result) {\n    return this.updateLastIndexed(tableIndex);\n  }.bind(this));\n};\n\n/**\n * Indexes a chunk of 100 rows\n * @param  {Number} page       page to start on\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex\n * @param  {Function} resolve    function to call when all chunks are indexed\n * @param  {Function} reject     called if there is an error\n */\nFeatureTableIndex.prototype.indexChunk = function(page, tableIndex, resolve, reject) {\n  var rows = this.featureDao.queryForChunk(100, page);\n  if (rows.length) {\n    this.progress('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100));\n    console.log('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100));\n    rows.forEach(function(row) {\n      var fr = this.featureDao.getRow(row);\n      this.indexRow(tableIndex, fr.getId(), fr.getGeometry());\n    }.bind(this));\n    setTimeout(function() {\n      this.indexChunk(++page, tableIndex, resolve, reject);\n    }.bind(this));\n  } else {\n    resolve();\n  }\n}\n\n/**\n * Indexes a row\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex`\n * @param  {Number} geomId     id of the row\n * @param  {module:geom/geometryData~GeometryData} geomData   GeometryData to index\n * @return {Boolean} success\n */\nFeatureTableIndex.prototype.indexRow = function(tableIndex, geomId, geomData) {\n  if (!geomData) return false;\n  var envelope = geomData.envelope;\n  if (!envelope) {\n    var geometry = geomData.geometry;\n    if (geometry) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geometry);\n    }\n  }\n  if (envelope) {\n    var geometryIndex = this.geometryIndexDao.populate(tableIndex, geomId, envelope);\n    return this.geometryIndexDao.createOrUpdate(geometryIndex);\n  } else {\n    return false;\n  }\n};\n\n/**\n * Update the last time this feature table was indexed\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex\n * @return {Object} update status\n */\nFeatureTableIndex.prototype.updateLastIndexed = function(tableIndex) {\n  if (!tableIndex) {\n    tableIndex = new TableIndex();\n    tableIndex.table_name = this.tableName;\n  }\n  tableIndex.last_indexed = new Date().toISOString();\n  var updateIndex = this.tableIndexDao.createOrUpdate(tableIndex);\n  return updateIndex;\n}\n\n/**\n * Query the index with the specified bounding box and projection\n * @param  {module:boundingBox~BoundingBox} boundingBox bounding box to query for\n * @param  {string} projection  projection the boundingBox is in\n * @return {Iterable}\n */\nFeatureTableIndex.prototype.queryWithBoundingBox = function(boundingBox, projection) {\n  var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection);\n  var envelope = projectedBoundingBox.buildEnvelope();\n  return this.queryWithGeometryEnvelope(envelope);\n}\n\n/**\n * Query witha geometry envelope\n * @param  {Envelope} envelope envelope\n * @return {Iterable}\n */\nFeatureTableIndex.prototype.queryWithGeometryEnvelope = function(envelope) {\n  if (this.rtreeIndexed) {\n    return this.rtreeIndexDao.queryWithGeometryEnvelope(envelope);\n  } else {\n    return this.geometryIndexDao.queryWithGeometryEnvelope(envelope);\n  }\n}\n\n\n/**\n * Count the index with the specified bounding box and projection\n * @param  {module:boundingBox~BoundingBox} boundingBox bounding box to query for\n * @param  {string} projection  projection the boundingBox is in\n * @return {Number}\n */\nFeatureTableIndex.prototype.countWithBoundingBox = function(boundingBox, projection) {\n  var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection);\n  var envelope = projectedBoundingBox.buildEnvelope();\n  return this.countWithGeometryEnvelope(envelope);\n};\n\n/**\n * Count with a geometry envelope\n * @param  {Envelope} envelope envelope\n * @return {Number}\n */\nFeatureTableIndex.prototype.countWithGeometryEnvelope = function(envelope) {\n  if (this.rtreeIndexed) {\n    return this.rtreeIndexDao.countWithGeometryEnvelope(envelope);\n  } else {\n    return this.geometryIndexDao.countWithGeometryEnvelope(envelope);\n  }\n};\n\nFeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR = 'nga';\nFeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR = 'geometry_index';\nFeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/geometry-index.html';\n\nmodule.exports = FeatureTableIndex;\n\n},{\"../../core/contents\":8,\"../../geom/envelopeBuilder\":72,\"../baseExtension\":20,\"../index\":25,\"../rtree\":44,\"./geometryIndex\":27,\"./tableIndex\":28,\"proj4\":285,\"util\":343}],27:[function(require,module,exports){\n/**\n * GeometryIndexDao module.\n * @module extension/index\n */\n\nvar Dao = require('../../dao/dao')\n  , TableIndexDao = require('./tableIndex').TableIndexDao\n  , TableCreator = require('../../db/tableCreator');\n\nvar util = require('util');\n\n/**\n * Geometry Index object, for indexing data within user tables\n * @class\n */\nvar GeometryIndex = function() {\n\n  /**\n   * Name of the table\n   * @member {String}\n   */\n  this.table_name;\n\n  /**\n   * Geometry Id column\n   * @member {Number}\n   */\n  this.geom_id;\n\n  /**\n   * Min X\n   * @member {Number}\n   */\n  this.min_x;\n\n  /**\n   * Max X\n   * @member {Number}\n   */\n  this.max_x;\n\n  /**\n   * Min Y\n   * @member {Number}\n   */\n  this.min_y;\n\n  /**\n   * Max Y\n   * @member {Number}\n   */\n  this.max_y;\n\n  /**\n   * Min Z\n   * @member {Number}\n   */\n  this.min_z;\n\n  /**\n   * Max Z\n   * @member {Number}\n   */\n  this.max_z;\n\n  /**\n   * Min M\n   * @member {Number}\n   */\n  this.min_m;\n\n  /**\n   * Max M\n   * @member {Number}\n   */\n  this.max_m;\n}\n\nGeometryIndex.prototype.setTableIndex = function(tableIndex) {\n  this.table_name = tableIndex.table_name;\n}\n\n/**\n * Geometry Index Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar GeometryIndexDao = function(geoPackage, featureDao) {\n  Dao.call(this, geoPackage);\n  this.featureDao = featureDao;\n};\n\nutil.inherits(GeometryIndexDao, Dao);\n\nGeometryIndexDao.prototype.createObject = function() {\n  return new GeometryIndex();\n};\n\n/**\n * Get the Table Index of the Geometry Index\n *\n * @param {module:extension/index~GeometryIndex} geometryIndex geometry index\n * @return {module:extension/index~TableIndex}\n */\nGeometryIndexDao.prototype.getTableIndex = function(geometryIndex) {\n  var dao = this.geoPackage.getTableIndexDao();\n  return dao.queryForId(geometryIndex.tableName);\n};\n\n/**\n * Query by table name\n * @param  {string} tableName table name\n * @return {Iterable}\n */\nGeometryIndexDao.prototype.queryForTableName = function(tableName) {\n  return this.queryForEach(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);\n};\n\n/**\n *  Count by table name\n *\n *  @param tableName table name\n *\n *  @return count\n */\n/**\n * Count by table name\n * @param  {string}   tableName table name\n * @return {Number}\n */\nGeometryIndexDao.prototype.countByTableName = function(tableName) {\n  return this.count(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);\n};\n\n/**\n *  Populate a new geometry index from an envelope\n *\n *  @param tableIndex table index\n *  @param geomId     geometry id\n *  @param envelope   geometry envelope\n *  @param callback called with results of the populate\n */\n/**\n * Populate a new goemetry index from an envelope\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex\n * @param  {Number} geometryId id of the geometry\n * @param  {Object} envelope   envelope to store\n * @return {module:extension/index~GeometryIndex}\n */\nGeometryIndexDao.prototype.populate = function(tableIndex, geometryId, envelope) {\n  var geometryIndex  = new GeometryIndex();\n  geometryIndex.setTableIndex(tableIndex);\n  geometryIndex.geom_id = geometryId;\n  geometryIndex.min_x = envelope.minX;\n  geometryIndex.min_y = envelope.minY;\n  geometryIndex.max_x = envelope.maxX;\n  geometryIndex.max_y = envelope.maxY;\n  if (envelope.hasZ) {\n    geometryIndex.min_z = envelope.minZ;\n    geometryIndex.max_z = envelope.maxZ;\n  }\n\n  if (envelope.hasM) {\n    geometryIndex.min_m = envelope.minM;\n    geometryIndex.max_m = envelope.maxM;\n  }\n  return geometryIndex;\n};\n\n/**\n * Create the GeometryIndex table\n * @return {Promise}\n */\nGeometryIndexDao.prototype.createTable = function() {\n  var exists = this.isTableExists();\n  if (exists) return Promise.resolve(true);\n  var tc = new TableCreator(this.geoPackage);\n  return tc.createGeometryIndex();\n}\n\n/**\n * Query the index with an envelope\n * @param  {Object} envelope envelope\n * @param  {Number} envelope.minX min x\n * @param  {Number} envelope.maxX max x\n * @param  {Number} envelope.minY min y\n * @param  {Number} envelope.maxY max y\n * @return {Iterable}\n */\nGeometryIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) {\n  var tableName = this.featureDao.gpkgTableName;\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);\n  where += ' and ';\n  var minXLessThanMaxX = envelope.minX < envelope.maxX;\n  if (minXLessThanMaxX) {\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<=');\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>=');\n  } else {\n    where += '(';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.minX, '>=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.maxX, '<=');\n    where += ')';\n  }\n\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Y, envelope.maxY, '<=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Y, envelope.minY, '>=');\n\n  var whereArgs = [tableName, envelope.maxX, envelope.minX];\n  if (!minXLessThanMaxX) {\n    whereArgs.push(envelope.minX, envelope.maxX);\n  }\n  whereArgs.push(envelope.maxY, envelope.minY);\n  if (envelope.hasZ) {\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Z, envelope.minZ, '<=');\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Z, envelope.maxZ, '>=');\n    whereArgs.push(envelope.maxZ, envelope.minZ);\n  }\n\n  if (envelope.hasM) {\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_M, envelope.minM, '<=');\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_M, envelope.maxM, '>=');\n    whereArgs.push(envelope.maxM, envelope.minM);\n  }\n  return {\n    join: 'inner join \"' + tableName + '\" on \"' + tableName + '\".' + this.featureDao.idColumns[0] + ' = ' + GeometryIndexDao.COLUMN_GEOM_ID,\n    where,\n    whereArgs,\n    tableNameArr: ['\"' + tableName + '\".*']\n  };\n};\n\nGeometryIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) {\n  var result = this._generateGeometryEnvelopeQuery(envelope);\n  return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);\n};\n\nGeometryIndexDao.prototype.countWithGeometryEnvelope = function(envelope) {\n  var result = this._generateGeometryEnvelopeQuery(envelope);\n  return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);\n};\n\nGeometryIndexDao.TABLE_NAME = \"nga_geometry_index\";\nGeometryIndexDao.COLUMN_TABLE_NAME = GeometryIndexDao.TABLE_NAME + \".table_name\";\nGeometryIndexDao.COLUMN_GEOM_ID = GeometryIndexDao.TABLE_NAME + \".geom_id\";\nGeometryIndexDao.COLUMN_MIN_X = GeometryIndexDao.TABLE_NAME + \".min_x\";\nGeometryIndexDao.COLUMN_MAX_X = GeometryIndexDao.TABLE_NAME + \".max_x\";\nGeometryIndexDao.COLUMN_MIN_Y = GeometryIndexDao.TABLE_NAME + \".min_y\";\nGeometryIndexDao.COLUMN_MAX_Y = GeometryIndexDao.TABLE_NAME + \".max_y\";\nGeometryIndexDao.COLUMN_MIN_Z = GeometryIndexDao.TABLE_NAME + \".min_z\";\nGeometryIndexDao.COLUMN_MAX_Z = GeometryIndexDao.TABLE_NAME + \".max_z\";\nGeometryIndexDao.COLUMN_MIN_M = GeometryIndexDao.TABLE_NAME + \".min_m\";\nGeometryIndexDao.COLUMN_MAX_M = GeometryIndexDao.TABLE_NAME + \".max_m\";\n\nGeometryIndexDao.prototype.gpkgTableName = GeometryIndexDao.TABLE_NAME;\nGeometryIndexDao.prototype.idColumns = ['table_name', 'geom_id'];\n\nmodule.exports.GeometryIndexDao = GeometryIndexDao;\nmodule.exports.GeometryIndex = GeometryIndex;\n\n},{\"../../dao/dao\":11,\"../../db/tableCreator\":19,\"./tableIndex\":28,\"util\":343}],28:[function(require,module,exports){\n/**\n * TableIndexDao module.\n * @module extension/index\n */\n\nvar Dao = require('../../dao/dao')\n  , TableCreator = require('../../db/tableCreator');\n\nvar util = require('util');\n\n/**\n * Table Index object, for indexing data within user tables\n * @class TableIndex\n */\nvar TableIndex = function() {\n\n  /**\n   * Name of the table\n   * @member {String}\n   */\n  this.table_name;\n\n  /**\n   * Last indexed date\n   * @member {String}\n   */\n  this.last_indexed;\n}\n\n/**\n * Table Index Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n * @param {module:geoPackage~GeoPackage}  geoPackage The GeoPackage object\n */\nvar TableIndexDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(TableIndexDao, Dao);\n\n/**\n * Create a new TableIndex object\n * @return {module:extension/index~TableIndex}\n */\nTableIndexDao.prototype.createObject = function() {\n  return new TableIndex();\n};\n\nTableIndexDao.prototype.getGeometryIndices = function(tableIndex) {\n\n};\n\nTableIndexDao.prototype.getGeometryIndexCount = function(tableIndex) {\n\n};\n\n/**\n * Creates the tables necessary\n * @return {Promise}\n */\nTableIndexDao.prototype.createTable = function() {\n  var tc = new TableCreator(this.geoPackage);\n  return tc.createTableIndex();\n}\n\n\nTableIndexDao.TABLE_NAME = \"nga_table_index\";\nTableIndexDao.COLUMN_TABLE_NAME = \"table_name\";\nTableIndexDao.COLUMN_LAST_INDEXED = \"last_indexed\";\n\nTableIndexDao.prototype.gpkgTableName = TableIndexDao.TABLE_NAME;\nTableIndexDao.prototype.idColumns = [TableIndexDao.COLUMN_TABLE_NAME];\n\nmodule.exports.TableIndexDao = TableIndexDao;\nmodule.exports.TableIndex = TableIndex;\n\n},{\"../../dao/dao\":11,\"../../db/tableCreator\":19,\"util\":343}],29:[function(require,module,exports){\n/**\n * MetadataExtension module.\n * @module extension/metadata\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension;\n\nvar util = require('util');\n\n/**\n * Metadata extension\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @class\n * @extends {module:extension/baseExtension~BaseExtension}\n */\nvar MetadataExtension = function(geoPackage) {\n  BaseExtension.call(this, geoPackage);\n\n  this.extensionName = MetadataExtension.EXTENSION_NAME;\n\n  this.extensionDefinition = MetadataExtension.EXTENSION_Metadata_DEFINITION;\n}\n\nutil.inherits(MetadataExtension, BaseExtension);\n\n/**\n * Get or create the metadata extension\n * @return {Promise}\n */\nMetadataExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);\n};\n\nMetadataExtension.EXTENSION_NAME = 'gpkg_metadata';\nMetadataExtension.EXTENSION_Metadata_AUTHOR = 'gpkg';\nMetadataExtension.EXTENSION_Metadata_NAME_NO_AUTHOR = 'metadata';\nMetadataExtension.EXTENSION_Metadata_DEFINITION = 'http://www.geopackage.org/spec/#extension_metadata';\n\nmodule.exports.MetadataExtension = MetadataExtension;\n\n},{\"../.\":25,\"../baseExtension\":20,\"util\":343}],30:[function(require,module,exports){\n/**\n * @module  extension/relatedTables\n */\n\n/**\n * Dublin Core Metadata Initiative term types\n * @class\n */\nfunction DublinCoreType() {}\n\nmodule.exports = DublinCoreType;\n\n/**\n * A point or period of time associated with an event in the lifecycle of\n * the resource.\n * @type {Object}\n */\nDublinCoreType.DATE = {\n  name: 'date'\n};\n\n/**\n * An account of the resource.\n * @type {Object}\n */\nDublinCoreType.DESCRIPTION = {\n  name: 'description'\n};\n\n/**\n * The file format, physical medium, or dimensions of the resource.\n * @type {Object}\n */\nDublinCoreType.FORMAT = {\n  name: 'format',\n  synonyms: ['content_type']\n};\n\n/**\n * An unambiguous reference to the resource within a given context.\n * @type {Object}\n */\nDublinCoreType.IDENTIFIER = {\n  name: 'identifier',\n  synonyms: ['id']\n};\n\n/**\n * A related resource from which the described resource is derived.\n * @type {Object}\n */\nDublinCoreType.SOURCE = {\n  name: 'source'\n};\n\n/**\n * A name given to the resource.\n * @type {Object}\n */\nDublinCoreType.TITLE = {\n  name: 'title'\n};\n\n/**\n * Get the Dublin Core Type from the name\n * @param  {string} name name\n * @return {module:extension/relatedTables~DublinCoreType}\n */\nDublinCoreType.fromName = function(name) {\n  for (var prop in module.exports) {\n    var type = module.exports[prop];\n    if (type.name === name) {\n      return type;\n    }\n  }\n  for (var prop in module.exports) {\n    var type = module.exports[prop];\n    if (type.synonyms) {\n      for (var i = 0; i < type.synonyms.length; i++) {\n        if (type.synonyms[i] === name) {\n          return type;\n        }\n      }\n    }\n  }\n}\n\n},{}],31:[function(require,module,exports){\n/**\n * @module extension/relatedTables\n */\n\nvar Dao = require('../../dao/dao')\n  , ColumnValues = require('../../dao/columnValues');\n\nvar util = require('util');\n\n/**\n * Describes the relationships between a base table, a related data table, and a\n * mapping table\n * @class ExtendedRelation\n */\nvar ExtendedRelation = function() {\n\n  /**\n   * Autoincrement primary key\n   * @member {Number}\n   */\n  this.id;\n\n  /**\n   * Name of the table containing the base data (e.g., features) to relate\n   * @member {String}\n   */\n  this.base_table_name;\n\n  /**\n   * Name of the primary key column in base_table_name\n   * @member {String}\n   */\n  this.base_primary_column;\n\n  /**\n   * Name of the table containing the related content\n   * @member {String}\n   */\n  this.related_table_name;\n\n  /**\n   * Name of the primary key column in related_table_name\n   * @member {String}\n   */\n  this.related_primary_column;\n\n  /**\n   * Name (profile) of the relationship\n   * @member {String}\n   */\n  this.relation_name;\n\n  /**\n   * Name of a mapping table\n   * @member {String}\n   */\n  this.mapping_table_name;\n}\n\n/**\n * Extended Relations Data Access Object\n * @class ExtendedRelationDao\n * @extends {module:dao/dao~Dao}\n */\nvar ExtendedRelationDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(ExtendedRelationDao, Dao);\n\n/**\n * Create a {module:extension/relatedTables~ExtendedRelation} object\n * @return {module:extension/relatedTables~ExtendedRelation}\n */\nExtendedRelationDao.prototype.createObject = function() {\n  return new ExtendedRelation();\n};\n\n/**\n * Create the necessary tables for this dao\n * @return {Promise}\n */\nExtendedRelationDao.prototype.createTable = function() {\n  var tc = this.geoPackage.getTableCreator();\n  return tc.createExtendedRelations();\n}\n\n/**\n * Get all the base table names\n * @return {string[]}\n */\nExtendedRelationDao.prototype.getBaseTables = function() {\n  var baseTables = [];\n  var baseTableColumns = this.queryForColumns('base_table_name');\n  for (var i = 0; i < baseTableColumns.length; i++) {\n    baseTables.push(baseTableColumns[i].base_table_name);\n  }\n  return baseTables;\n};\n\n/**\n * Get all the related table names\n * @return {string[]}\n */\nExtendedRelationDao.prototype.getRelatedTables = function() {\n  var relatedTables = [];\n  var relatedTableColumns = this.queryForColumns('related_table_name');\n  for (var i = 0; i < relatedTableColumns.length; i++) {\n    relatedTables.push(relatedTableColumns[i].related_table_name);\n  }\n  return relatedTables;\n};\n\n/**\n * Get all relations for the given base table name\n * @param  {string} baseTable base table name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getBaseTableRelations = function(baseTable) {\n  return this.queryForAllEq(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable);\n}\n\n/**\n * Get all relations for the given related table name\n * @param  {string} relatedTable related table name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getRelatedTableRelations = function(relatedTable) {\n  return this.queryForAllEq(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTable);\n}\n\n/**\n * Get all relations for the base table with the relation name\n * @param  {string} baseTable base table name\n * @param  {string} name      relation name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getBaseTableRelationsWithName = function(baseTable, name) {\n  var fields = new ColumnValues();\n  fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable);\n  fields.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, name);\n  var where = this.buildWhere(fields, 'and');\n  var whereArgs = this.buildWhereArgs(fields);\n  return this.queryForAll(where, whereArgs);\n}\n\n/**\n * Get all relations to the table.  Returns relations where the table is the base table and relations where the table is the related table.\n * @param  {string} table table name to query for\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getTableRelations = function(table) {\n  var fields = new ColumnValues();\n  fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, table);\n  fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, table);\n  var where = this.buildWhere(fields, 'or');\n  var whereArgs = this.buildWhereArgs(fields);\n  return this.queryForAll(where, whereArgs);\n}\n\n/**\n * Gets all relationships in the GeoPackage with an optional base table name and an optional base id\n * @param {String} [baseTableName] base table name\n * @param {String} [relatedTableName] related table name\n * @param {String} [mappingTableName] mapping table name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getRelations = function(baseTableName, relatedTableName, mappingTableName) {\n  var fields = new ColumnValues();\n  fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTableName);\n  fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTableName);\n  fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName);\n  var where = this.buildWhereLike(fields, 'and');\n  var whereArgs = this.buildWhereArgs(fields);\n  return this.queryForAll(where, whereArgs);\n};\n\n/**\n * Get all relations by the mapping table name\n * @param  {string} mappingTableName name of the mapping table\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.queryByMappingTableName = function(mappingTableName) {\n  var fields = new ColumnValues();\n  fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName);\n  var where = this.buildWhere(fields, 'and');\n  var whereArgs = this.buildWhereArgs(fields);\n  return this.queryForAll(where, whereArgs);\n}\n\nExtendedRelationDao.TABLE_NAME = 'gpkgext_relations';\nExtendedRelationDao.COLUMN_ID = ExtendedRelationDao.TABLE_NAME + '.id';\nExtendedRelationDao.COLUMN_BASE_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.base_table_name';\nExtendedRelationDao.COLUMN_BASE_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.base_primary_column';\nExtendedRelationDao.COLUMN_RELATED_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.related_table_name';\nExtendedRelationDao.COLUMN_RELATED_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.related_primary_column';\nExtendedRelationDao.COLUMN_RELATION_NAME = ExtendedRelationDao.TABLE_NAME + '.relation_name';\nExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.mapping_table_name';\n\nExtendedRelationDao.prototype.gpkgTableName = ExtendedRelationDao.TABLE_NAME;\nExtendedRelationDao.prototype.idColumns = ['id'];\n\nmodule.exports.ExtendedRelationDao = ExtendedRelationDao;\nmodule.exports.ExtendedRelation = ExtendedRelation;\n\n},{\"../../dao/columnValues\":10,\"../../dao/dao\":11,\"util\":343}],32:[function(require,module,exports){\n/**\n * RelatedTablesExtension module.\n * @module extension/relatedTables\n * @see module:extension/BaseExtension\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension\n  , ColumnValues = require('../../dao/columnValues')\n  , OptionBuilder = require('../../optionBuilder')\n  , ExtendedRelationDao = require('./extendedRelation').ExtendedRelationDao\n  , ExtendedRelation = require('./extendedRelation').ExtendedRelation\n  , MediaDao = require('./mediaDao')\n  , MediaTable = require('./mediaTable')\n  , SimpleAttributesDao = require('./simpleAttributesDao')\n  , SimpleAttributesTable = require('./simpleAttributesTable')\n  , UserMappingTable = require('./userMappingTable')\n  , UserMappingDao = require('./userMappingDao')\n  , UserCustomDao = require('../../user/custom/userCustomDao')\n  , UserDao = require('../../user/userDao')\n  , UserTableReader = require('../../user/userTableReader')\n  , RelationType = require('./relationType')\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , Contents = require('../../core/contents').Contents\n  , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao;\n\nvar util = require('util');\n\n/**\n * Related Tables Extension\n * @param  {module:geoPackage~GeoPackage} geoPackage the GeoPackage object\n * @class\n * @extends {module:extension/baseExtension~BaseExtension}\n */\nvar RelatedTablesExtension = function(geoPackage) {\n  BaseExtension.call(this, geoPackage);\n  this.extendedRelationDao = geoPackage.getExtendedRelationDao();\n}\n\nutil.inherits(RelatedTablesExtension, BaseExtension);\n\n/**\n * Get or create the extension\n * @return {Promise}\n */\nRelatedTablesExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, 'gpkgext_relations', undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE)\n  .then(function() {\n    return this.extendedRelationDao.createTable();\n  }.bind(this));\n};\n\n/**\n * Get or create the extension for the mapping table\n * @param  {string} mappingTableName user mapping table\n * @return {Promise}\n */\nRelatedTablesExtension.prototype.getOrCreateMappingTable = function(mappingTableName) {\n  return this.getOrCreateExtension()\n  .then(function() {\n    this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, mappingTableName, undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE);\n  }.bind(this));\n}\n\n/**\n * Set the contents in the UserRelatedTable\n * @param  {module:extension/relatedTables~UserRelatedTable} userRelatedTable user related table\n */\nRelatedTablesExtension.prototype.setContents = function(userRelatedTable) {\n  var contents = this.geoPackage.getContentsDao().queryForId(userRelatedTable.table_name);\n  userRelatedTable.setContents(contents);\n}\n\n/**\n * Reads the user table and creates a UserCustomDao\n * @param  {string} tableName       table name to reader\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/custom~UserCustomDao}\n */\nRelatedTablesExtension.prototype.getUserDao = function(tableName, requiredColumns) {\n  return UserCustomDao.readTable(this.geoPackage, tableName, requiredColumns);\n}\n\n/**\n * Gets the UserMappingDao from the mapping table name\n * @param  {string|module:extension/relatedTables~ExtendedRelation} tableName user mapping table name or ExtendedRelation object\n * @return {module:extension/relatedTables~UserMappingDao}\n */\nRelatedTablesExtension.prototype.getMappingDao = function(tableName) {\n  if (tableName.mapping_table_name) {\n    tableName = tableName.mapping_table_name;\n  }\n  return new UserMappingDao(this.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage);\n}\n\n/**\n * Gets all relationships in the GeoPackage with an optional base table name and an optional base id\n * @param {string} [baseTableName] base table name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nRelatedTablesExtension.prototype.getRelationships = function(baseTableName) {\n  if (this.extendedRelationDao.isTableExists()) {\n    if (baseTableName) {\n      return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(baseTableName);\n    }\n    return this.extendedRelationDao.queryForAll();\n  }\n  return [];\n}\n\n/**\n * Gets all relationships in the GeoPackage with an optional base table name and an optional base id\n * @param {String} [baseTableName] base table name\n * @param {String} [relatedTableName] related table name\n * @param {String} [mappingTableName] mapping table name\n * @return {Boolean}\n */\nRelatedTablesExtension.prototype.hasRelations = function(baseTableName, relatedTableName, mappingTableName) {\n  var relations = [];\n  if (this.extendedRelationDao.isTableExists()) {\n    relations = this.extendedRelationDao.getRelations(baseTableName, relatedTableName, mappingTableName);\n  }\n  return relations;\n};\n\nRelatedTablesExtension.prototype.getRelatedRows = function(baseTableName, baseId) {\n  var relationships = this.getRelationships(baseTableName);\n  for (var i = 0; i < relationships.length; i++) {\n    var relation = relationships[i];\n    var mappingRows = this.getMappingRowsForBase(relation.mapping_table_name, baseId);\n    relation.mappingRows = mappingRows;\n    var userDao;\n    // TODO do this for all known types\n    if (relation.relation_name === 'media') {\n      userDao = MediaDao.readTable(this.geoPackage, relation.related_table_name);\n    } else {\n      userDao = UserDao.readTable(this.geoPackage, relation.related_table_name);\n    }\n    for (var m = 0; m < mappingRows.length; m++) {\n      var mappingRow = mappingRows[m];\n      mappingRow.row = userDao.queryForId(mappingRow.related_id);\n    }\n  }\n  return relationships;\n}\n\nRelatedTablesExtension.RelationshipBuilder = function() {\n  return OptionBuilder([\n    'baseTableName',\n    'relatedTableName',\n    'userMappingTable',\n    'mappingTableName',\n    'relationName',\n    'relationAuthor',\n    'relationType',\n    'relatedTable'\n  ]);\n}\n/**\n * Convience object to build a Relationship object for querying and adding\n * @typedef {Object} module:extension/relatedTables~Relationship\n * @property  {module:extension/relatedTables~RelationType} relationType type of relationship\n * @property  {string} baseTableName base table name\n * @property  {string} relatedTableName related table name\n * @property  {string} relationAuthor relationship author\n * @property  {string} mappingTableName mapping table name\n * @property  {module:extension/relatedTables~UserMappingTable} userMappingTable UserMappingTable\n * @property  {module:extension/relatedTables~UserRelatedTable} relatedTable UserRelatedTable\n */\nRelatedTablesExtension.prototype.getRelationshipBuilder = function() {\n  return RelatedTablesExtension.RelationshipBuilder();\n}\n\n/**\n * Adds a relationship to the GeoPackage\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation|Boolean>}\n */\nRelatedTablesExtension.prototype.addRelationship = function(relationship) {\n  var extendedRelation = this.extendedRelationDao.createObject();\n  var userMappingTable = relationship.userMappingTable;\n  if (relationship.hasOwnProperty('base_table_name')) {\n    extendedRelation = relationship;\n    userMappingTable = UserMappingTable.create(extendedRelation.mapping_table_name);\n  } else {\n    if (relationship.relationType) {\n      relationship.relationName = relationship.relationType.name;\n    }\n    if (relationship.relationAuthor) {\n      relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName);\n    }\n    if (relationship.mappingTableName) {\n      userMappingTable = UserMappingTable.create(relationship.mappingTableName);\n    }\n\n    if (relationship.relatedTable) {\n      this.createRelatedTable(relationship.relatedTable);\n      relationship.relatedTableName = relationship.relatedTable.table_name;\n      relationship.relationName = relationship.relatedTable.relation_name;\n    }\n\n    extendedRelation.base_table_name = relationship.baseTableName;\n    extendedRelation.base_primary_column = this.getPrimaryKeyColumnName(relationship.baseTableName);\n    extendedRelation.related_table_name = relationship.relatedTableName;\n    extendedRelation.related_primary_column = this.getPrimaryKeyColumnName(relationship.relatedTableName);\n    extendedRelation.mapping_table_name = userMappingTable.table_name;\n    extendedRelation.relation_name = relationship.relationName;\n  }\n\n  if (!this.validateRelationship(extendedRelation.base_table_name, extendedRelation.related_table_name, extendedRelation.relation_name)) {\n    return Promise.resolve(false);\n  }\n  return this.createUserMappingTable(userMappingTable)\n  .then(function() {\n    var mappingTableRelations = this.extendedRelationDao.queryByMappingTableName(extendedRelation.mapping_table_name);\n    if (mappingTableRelations.length) {\n      return mappingTableRelations[0];\n    }\n    this.extendedRelationDao.create(extendedRelation);\n    return extendedRelation;\n  }.bind(this));\n}\n\n/**\n * Get the primary key column name from the specified table\n * @param  {string} tableName table name\n * @return {string}\n */\nRelatedTablesExtension.prototype.getPrimaryKeyColumnName = function(tableName) {\n  var reader = new UserTableReader(tableName);\n  var table = reader.readTable(this.geoPackage.getDatabase());\n  return table.getPkColumn().name;\n}\n\n/**\n * Adds a features relationship between the base feature and related feature\n * table. Creates a default user mapping table if needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addFeaturesRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.FEATURES.name;\n  } else {\n    relationship.relationType = RelationType.FEATURES;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Adds a tiles relationship between the base table and related tile\n * table. Creates a default user mapping table if needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addTilesRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.TILES.name;\n  } else {\n    relationship.relationType = RelationType.TILES;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Adds an attributes relationship between the base table and related attribute\n * table. Creates a default user mapping table if needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addAttributesRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.ATTRIBUTES.name;\n  } else {\n    relationship.relationType = RelationType.ATTRIBUTES;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Adds a simple attributes relationship between the base table and user\n * simple attributes related table. Creates a default user mapping table and\n * the simple attributes table if needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addSimpleAttributesRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.SIMPLE_ATTRIBUTES.name;\n  } else {\n    relationship.relationType = RelationType.SIMPLE_ATTRIBUTES;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Adds a media relationship between the base table and user media related\n * table. Creates a default user mapping table and the media table if\n * needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addMediaRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.MEDIA.name;\n  } else {\n    relationship.relationType = RelationType.MEDIA;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Remove a specific relationship from the GeoPackage\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to remove\n * @return {Number} number of relationships removed\n */\nRelatedTablesExtension.prototype.removeRelationship = function(relationship) {\n  // this is an ExtendedRelation\n  if (relationship.hasOwnProperty('base_table_name')) {\n    relationship.baseTableName = relationship.base_table_name;\n    relationship.relatedTableName = relationship.related_table_name;\n    relationship.relationName = relationship.relation_name;\n    relationship.userMappingTable = relationship.mapping_table_name;\n  }\n\n  if (relationship.relationType) {\n    relationship.relationName = relationship.relationType.name;\n  }\n  if (relationship.relationAuthor) {\n    relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName);\n  }\n\n  if (this.extendedRelationDao.isTableExists()) {\n\n    var values = new ColumnValues();\n    values.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, relationship.baseTableName);\n    values.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relationship.relatedTableName);\n    values.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, relationship.relationName);\n\n    var iterator = this.extendedRelationDao.queryForFieldValues(values);\n\n    var tablesToDelete = [];\n    for (var extendedRelation of iterator) {\n      tablesToDelete.push(extendedRelation.mapping_table_name);\n    }\n    tablesToDelete.forEach(function(table) {\n      this.geoPackage.deleteTable(table);\n    }.bind(this));\n    this.extensionsDao.deleteByExtensionAndTableName(RelatedTablesExtension.EXTENSION_NAME, relationship.userMappingTable);\n    return this.extendedRelationDao.delete(extendedRelation);\n  }\n\n  return 0;\n}\n\n/**\n * Create a default user mapping table and extension row if either does not\n * exist. When not created, there is no guarantee that an existing table has\n * the same schema as the provided tabled.\n * @param  {string|module:extension/relatedTables~UserMappingTable} userMappingTableOrName user mapping table or name\n * @return {Promise<Boolean>}\n */\nRelatedTablesExtension.prototype.createUserMappingTable = function(userMappingTableOrName) {\n  var userMappingTable = userMappingTableOrName;\n  if (typeof userMappingTableOrName === 'string') {\n    userMappingTable = UserMappingTable.create(userMappingTableOrName);\n  }\n  return this.getOrCreateMappingTable(userMappingTable.table_name)\n  .then(function(){\n    if (!this.geoPackage.isTable(userMappingTable.table_name)) {\n      return this.geoPackage.tableCreator.createUserTable(userMappingTable);\n    }\n    return true;\n  }.bind(this));\n}\n\n/**\n * Create a user related table if it does not exist. When not created, there\n * is no guarantee that an existing table has the same schema as the\n * provided tabled.\n * @param  {module:extension/relatedTables~UserRelatedTable} relatedTable user related table\n * @return {Boolean} true if the table now exists\n */\nRelatedTablesExtension.prototype.createRelatedTable = function(relatedTable) {\n  if (!this.geoPackage.isTable(relatedTable.table_name)) {\n    this.geoPackage.tableCreator.createUserTable(relatedTable);\n\n    var contents = new Contents();\n    contents.table_name = relatedTable.table_name;\n    contents.data_type = relatedTable.data_type;\n    contents.identifier = relatedTable.table_name;\n    this.geoPackage.getContentsDao().create(contents);\n    var refreshed = this.geoPackage.getContentsDao().refresh(contents);\n    relatedTable.setContents(refreshed);\n  }\n  return true;\n}\n\n/**\n * Validate that the relation name is valid between the base and related tables\n * @param  {string} baseTableName    base table name\n * @param  {string} relatedTableName related table name\n * @param  {string} relationName     relation name\n * @return {Boolean}\n */\nRelatedTablesExtension.prototype.validateRelationship = function(baseTableName, relatedTableName, relationName) {\n  // Verify the base and related tables exist\n  if (!this.geoPackage.isTable(baseTableName)) {\n    console.log('Base relationship table does not exist: ' + baseTableName + ', Relation: ' + relationName);\n    return false;\n  }\n  if (!this.geoPackage.isTable(relatedTableName)) {\n    console.log('Related relationship table does not exist: ' + relatedTableName + ', Relation: ' + relationName);\n    return false;\n  }\n  // Verify spec defined relation types\n  var relationType = RelationType.fromName(relationName);\n  if (relationType) {\n    if (!this.geoPackage.isTableType(relationType.dataType, relatedTableName)) {\n      console.log('The related table must be a ' + relationType.dataType + ' table.  Related Table: ' + relatedTableName + ', Type: ' + this.geoPackage.getTableType(relatedTableName));\n      return false;\n    }\n    return true;\n  }\n  return true;\n}\n\n/**\n * Link related Ids\n * @param  {string} baseTableName    base table name\n * @param  {Number} baseId           base row id\n * @param  {string} relatedTableName related table name\n * @param  {Number} relatedId        related row id\n * @param  {module:extension/relatedTables~RelationType} relationType     relation type\n * @return {Promise}\n */\nRelatedTablesExtension.prototype.linkRelatedIds = function(baseTableName, baseId, relatedTableName, relatedId, relationType) {\n  var baseDao = UserDao.readTable(this.geoPackage, baseTableName);\n  var relatedDao = UserDao.readTable(this.geoPackage, relatedTableName);\n\n  var baseRow = baseDao.queryForId(baseId);\n  var relatedRow = relatedDao.queryForId(relatedId);\n\n  return baseDao.linkRelatedRow(baseRow, relatedRow, relationType);\n}\n\n/**\n * Get the related id mappings for the base id\n * @param  {string} mappingTableName mapping table name\n * @param  {Number} baseId           base id\n * @return {Number[]} ids of related items\n */\nRelatedTablesExtension.prototype.getMappingsForBase = function(mappingTableName, baseId) {\n  var mappingDao = this.getMappingDao(mappingTableName);\n  var results = mappingDao.queryByBaseId(baseId);\n  var relatedIds = [];\n  for (var i = 0; i < results.length; i++) {\n    var row = mappingDao.getUserMappingRow(results[i]);\n    relatedIds.push(row.getRelatedId());\n  }\n  return relatedIds;\n}\n\n/**\n * Get the related id mapping rows for the base id\n * @param  {string} mappingTableName mapping table name\n * @param  {Number} baseId           base id\n * @return {module:extension/relatedTables~UserMappingRow[]} user mapping rows\n */\nRelatedTablesExtension.prototype.getMappingRowsForBase = function(mappingTableName, baseId) {\n  var mappingDao = this.getMappingDao(mappingTableName);\n  return mappingDao.queryByBaseId(baseId);\n}\n\n/**\n * Get the base id mappings for the base id\n * @param  {string} mappingTableName mapping table name\n * @param  {Number} relatedId           related id\n * @return {Number[]} ids of base items\n */\nRelatedTablesExtension.prototype.getMappingsForRelated = function(mappingTableName, relatedId) {\n  var mappingDao = this.getMappingDao(mappingTableName);\n  var results = mappingDao.queryByRelatedId(relatedId);\n  var baseIds = [];\n  for (var i = 0; i < results.length; i++) {\n    var row = mappingDao.getUserMappingRow(results[i]);\n    baseIds.push(row.getBaseId());\n  }\n  return baseIds;\n}\n\n/**\n * Returns a {module:extension/relatedTables~MediaDao} from the table specified\n * @param  {string|module:extension/relatedTables~MediaTable} tableName either a table name or a MediaTable\n * @return {module:extension/relatedTables~MediaDao}\n */\nRelatedTablesExtension.prototype.getMediaDao = function(tableName) {\n  var table;\n  if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'media') {\n    table = tableName;\n  } else {\n    if (tableName.related_table_name) {\n      tableName = tableName.related_table_name;\n    }\n    var reader = new UserTableReader(tableName, MediaTable.requiredColumns());\n    var userTable = reader.readTable(this.geoPackage.getDatabase());\n    table = new MediaTable(userTable.table_name, userTable.columns, MediaTable.requiredColumns());\n    table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name));\n  }\n\n  return new MediaDao(this.geoPackage, table);\n}\n\n/**\n * Returns a {module:extension/relatedTables~SimpleAttributesDao} from the table specified\n * @param  {string|module:extension/relatedTables~SimpleAttributesDao} tableName either a table name or a SimpleAttributesDao\n * @return {module:extension/relatedTables~SimpleAttributesDao}\n */\nRelatedTablesExtension.prototype.getSimpleAttributesDao = function(tableName) {\n  var table;\n  if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'simple_attributes') {\n    table = tableName;\n  } else {\n    if (tableName.related_table_name) {\n      tableName = tableName.related_table_name;\n    }\n    var reader = new UserTableReader(tableName, SimpleAttributesTable.requiredColumns());\n    var userTable = reader.readTable(this.geoPackage.getDatabase());\n    table = new SimpleAttributesTable(userTable.table_name, userTable.columns, SimpleAttributesTable.requiredColumns());\n    table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name));\n  }\n\n  return new SimpleAttributesDao(this.geoPackage, table);\n}\n\n/**\n * Builds the custom relation name with the author\n * @param  {string} author author\n * @param  {string} name   name\n * @return {string}\n */\nRelatedTablesExtension.prototype.buildRelationName = function(author, name) {\n  return 'x-' + author + '_' + name;\n}\n\n/**\n * Remove all traces of the extension\n */\nRelatedTablesExtension.prototype.removeExtension = function() {\n  if (this.extendedRelationDao.isTableExists()) {\n    var extendedRelations = this.extendedRelationDao.queryForAll();\n    extendedRelations.forEach(function(relation) {\n      this.geoPackage.deleteTable(relation.mapping_table_name);\n    }.bind(this));\n    this.geoPackage.deleteTable(ExtendedRelationDao.TABLE_NAME);\n  }\n  if (this.extensionsDao.isTableExists()) {\n    this.extensionsDao.deleteByExtension(RelatedTablesExtension.EXTENSION_NAME);\n  }\n}\n\n/**\n * Determine if the GeoPackage has the extension\n * @param  {string} [mappingTableName] mapping table name to check, if not specified, this checks for any mapping table name\n * @return {Boolean}\n */\nRelatedTablesExtension.prototype.has = function(mappingTableName) {\n  if (mappingTableName) {\n    return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME)\n      && this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, mappingTableName);\n  }\n  return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME);\n}\n\nRelatedTablesExtension.EXTENSION_NAME = 'related_tables';\nRelatedTablesExtension.EXTENSION_RELATED_TABLES_AUTHOR = 'gpkg';\nRelatedTablesExtension.EXTENSION_RELATED_TABLES_NAME_NO_AUTHOR = 'related_tables';\nRelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION = 'TBD';\n\nmodule.exports = RelatedTablesExtension;\n\n},{\"../.\":25,\"../../core/contents\":8,\"../../dao/columnValues\":10,\"../../features/columns\":64,\"../../optionBuilder\":76,\"../../user/custom/userCustomDao\":102,\"../../user/userDao\":106,\"../../user/userTableReader\":109,\"../baseExtension\":20,\"./extendedRelation\":31,\"./mediaDao\":33,\"./mediaTable\":35,\"./relationType\":36,\"./simpleAttributesDao\":37,\"./simpleAttributesTable\":39,\"./userMappingDao\":40,\"./userMappingTable\":42,\"util\":343}],33:[function(require,module,exports){\n/**\n * MediaDao module.\n * @module extension/relatedTables\n */\n\nvar MediaRow = require('./mediaRow')\n  , MediaTable = require('./mediaTable')\n  , Dao = require('../../dao/dao')\n  , UserDao = require('../../user/userDao')\n  , UserTableReader = require('../../user/userTableReader');\n\nvar util = require('util');\n\n/**\n * User Media DAO for reading user media data tables\n * @class\n * @extends {module:user/userDao~UserDao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} connection        connection\n * @param  {string} table table name\n */\nvar MediaDao = function(geoPackage, table) {\n  UserDao.call(this, geoPackage, table);\n  this.mediaTable = table;\n}\n\nutil.inherits(MediaDao, UserDao);\n\n/**\n * Reads the table specified from the geopackage\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @param  {string} tableName       table name\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/userDao~UserDao}\n */\nMediaDao.readTable = function(geoPackage, tableName) {\n  var reader = new UserTableReader(tableName);\n  var userTable = reader.readTable(geoPackage.getDatabase());\n  return new MediaDao(geoPackage, userTable);\n}\n\n/**\n * Create a new media row\n * @return {module:extension/relatedTables~MediaRow}\n */\nMediaDao.prototype.newRow = function() {\n  return new MediaRow(this.mediaTable);\n}\n\n/**\n * Create a media row with the column types and values\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/relatedTables~MediaRow}             media row\n */\nMediaDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new MediaRow(this.mediaTable, columnTypes, values);\n};\n\n/**\n * Gets the media table\n * @return {module:extension/relatedTables~MediaTable}\n */\nMediaDao.prototype.getTable = function() {\n  return this.mediaTable;\n}\n\nmodule.exports = MediaDao;\n\n},{\"../../dao/dao\":11,\"../../user/userDao\":106,\"../../user/userTableReader\":109,\"./mediaRow\":34,\"./mediaTable\":35,\"util\":343}],34:[function(require,module,exports){\n/**\n * MediaRow module.\n * @module extension/relatedTables\n */\nvar UserRow = require('../../user/userRow');\n\nvar util = require('util');\n\nvar ImageUtils = require('../../tiles/imageUtils');\n\n/**\n * User Media Row containing the values from a single result set row\n * @class\n * @extends {module:user/userRow~UserRow}\n * @param  {module:extension/relatedTables~MediaTable} mediaTable  media table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n */\nvar MediaRow = function(mediaTable, columnTypes, values) {\n  UserRow.call(this, mediaTable, columnTypes, values);\n  this.mediaTable = mediaTable;\n}\n\nutil.inherits(MediaRow, UserRow);\n\n/**\n * Gets the id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaRow.prototype.getIdColumn = function() {\n  return this.mediaTable.getIdColumn();\n}\n\n/**\n * Gets the id\n * @return {Number}\n */\nMediaRow.prototype.getId = function() {\n  return this.getValueWithColumnName(this.getIdColumn().name);\n}\n\n/**\n * Get the data column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaRow.prototype.getDataColumn = function() {\n  return this.mediaTable.getDataColumn();\n}\n\n/**\n * Gets the data\n * @return {Buffer}\n */\nMediaRow.prototype.getData = function() {\n  return this.getValueWithColumnName(this.getDataColumn().name);\n}\n\n/**\n * Get the data image\n *\n * @return {Promise<Image>}\n */\nMediaRow.prototype.getDataImage = function() {\n  return ImageUtils.getImage(this.getData(), this.getContentType());\n}\n/**\n * Get the scaled data image\n * @param {Number} scale\n * @return {Promise<Image>}\n */\nMediaRow.prototype.getScaledDataImage = function(scale) {\n  return ImageUtils.getScaledImage(this.getData(), scale);\n}\n\n/**\n * Sets the data for the row\n * @param  {Buffer} data data\n */\nMediaRow.prototype.setData = function(data) {\n  this.setValueWithColumnName(this.getDataColumn().name, data);\n}\n\n/**\n * Get the content type column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaRow.prototype.getContentTypeColumn = function() {\n  return this.mediaTable.getContentTypeColumn();\n}\n\n/**\n * Gets the content type\n * @return {string}\n */\nMediaRow.prototype.getContentType = function() {\n  return this.getValueWithColumnName(this.getContentTypeColumn().name);\n}\n\n/**\n * Sets the content type for the row\n * @param  {string} contentType contentType\n */\nMediaRow.prototype.setContentType = function(contentType) {\n  this.setValueWithColumnName(this.getContentTypeColumn().name, contentType);\n}\n\nmodule.exports = MediaRow;\n\n},{\"../../tiles/imageUtils\":89,\"../../user/userRow\":107,\"util\":343}],35:[function(require,module,exports){\n/**\n * mediaTable module.\n * @module extension/relatedTables\n */\n\nvar UserTable = require('../../user/userTable')\n  , UserRelatedTable = require('./userRelatedTable')\n  , UserColumn = require('../../user/userColumn')\n  , DataType = require('../../db/dataTypes')\n  , RelationType = require('./relationType');\n\nvar util = require('util');\n\n/**\n * Media Requirements Class User-Defined Related Data Table\n * @class\n * @extends {module:extension/relatedTables~UserRelatedTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   media columns\n * @param {string[]} requiredColumns required column names\n */\nvar MediaTable = function(tableName, columns, requiredColumns) {\n  UserRelatedTable.call(this, tableName, MediaTable.RELATION_TYPE.name, MediaTable.RELATION_TYPE.dataType, columns, requiredColumns);\n}\n\nutil.inherits(MediaTable, UserRelatedTable);\n\n/**\n * Create a media table with a minimum required columns followed by the additional columns\n * @param  {string} tableName         name of the table\n * @param  {module:user/userColumn~UserColumn[]} additionalColumns additional columns\n * @return {module:extension/relatedTables~MediaTable}\n */\nMediaTable.create = function(tableName, additionalColumns) {\n  var columns = MediaTable.createRequiredColumns();\n  if (additionalColumns) {\n    columns = columns.concat(additionalColumns);\n  }\n  return new MediaTable(tableName, columns, MediaTable.requiredColumns());\n}\n\n/**\n * Get the required columns\n * @param  {string} [idColumnName=id] id column name\n * @return {string[]}\n */\nMediaTable.requiredColumns = function(idColumnName) {\n  var requiredColumns = [];\n  requiredColumns.push(idColumnName || MediaTable.COLUMN_ID);\n  requiredColumns.push(MediaTable.COLUMN_DATA);\n  requiredColumns.push(MediaTable.COLUMN_CONTENT_TYPE);\n  return requiredColumns;\n}\n\n/**\n * Get the number of required columns\n * @return {Number}\n */\nMediaTable.numRequiredColumns = function(){\n  return MediaTable.requiredColumns().length;\n}\n\n/**\n * Create the required columns\n * @param  {Number} [startingIndex=0] starting index of the required columns\n * @param  {string} [idColumnName=id]  id column name\n * @return {module:user/userColumn~UserColumn[]}\n */\nMediaTable.createRequiredColumns = function(startingIndex, idColumnName) {\n  startingIndex = startingIndex || 0;\n  return [\n    MediaTable.createIdColumn(startingIndex++, idColumnName || MediaTable.COLUMN_ID),\n    MediaTable.createDataColumn(startingIndex++),\n    MediaTable.createContentTypeColumn(startingIndex++)\n  ];\n}\n\n/**\n * Create the primary key id column\n * @param  {Number} index        index of the column\n * @param  {string} idColumnName name of the id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.createIdColumn = function(index, idColumnName) {\n  return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName);\n}\n\n/**\n * Create the data column\n * @param  {Number} index        index of the column\n * @param  {string} idColumnName name of the id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.createDataColumn = function(index) {\n  return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_DATA, DataType.GPKGDataType.GPKG_DT_BLOB, true);\n}\n\n/**\n * Create the content type column\n * @param  {Number} index        index of the column\n * @param  {string} idColumnName name of the id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.createContentTypeColumn = function(index) {\n  return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_CONTENT_TYPE, DataType.GPKGDataType.GPKG_DT_TEXT, true);\n}\n\n/**\n * Get the primary key id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.prototype.getIdColumn = function() {\n  return this.getPkColumn();\n}\n\n/**\n * Get the data column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.prototype.getDataColumn = function() {\n  return this.getColumnWithColumnName(MediaTable.COLUMN_DATA);\n}\n\n/**\n * Get the content type column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.prototype.getContentTypeColumn = function() {\n  return this.getColumnWithColumnName(MediaTable.COLUMN_CONTENT_TYPE);\n}\n\nMediaTable.RELATION_TYPE = RelationType.MEDIA;\nMediaTable.COLUMN_ID = 'id';\nMediaTable.COLUMN_DATA = 'data';\nMediaTable.COLUMN_CONTENT_TYPE = 'content_type';\n\nMediaTable.prototype.TABLE_TYPE = 'media';\n\nmodule.exports = MediaTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"../../user/userTable\":108,\"./relationType\":36,\"./userRelatedTable\":43,\"util\":343}],36:[function(require,module,exports){\n/**\n * @module extension/relatedTables\n */\n\nvar ContentsDao = require('../../core/contents').ContentsDao;\n\n/**\n * Spec supported User-Defined Related Data Tables\n * @class\n */\nvar RelationType = function() {}\n\nmodule.exports = RelationType;\n\n/**\n * Link features with other features\n * @type {Object}\n */\nRelationType.FEATURES = {\n  name: 'features',\n  dataType: ContentsDao.GPKG_CDT_FEATURES_NAME\n};\n\n/**\n * Relate sets of tabular text or numeric data\n * @type {Object}\n */\nRelationType.SIMPLE_ATTRIBUTES = {\n  name: 'simple_attributes',\n  dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME\n};\n\n/**\n * Relate features or attributes to multimedia files such as pictures and videos\n * @type {Object}\n */\nRelationType.MEDIA = {\n  name: 'media',\n  dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME\n};\n\n/**\n * Attribute type relation\n * @type {Object}\n */\nRelationType.ATTRIBUTES = {\n  name: 'attributes',\n  dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME\n};\n\n/**\n * Tile type relation\n * @type {Object}\n */\nRelationType.TILES = {\n  name: 'tiles',\n  dataType: ContentsDao.GPKG_CDT_TILES_NAME\n};\n\n/**\n * Get the relation type from the name\n * @param  {string} name name\n * @return {module:extension/relatedTables~RelationType}\n */\nRelationType.fromName = function(name) {\n  return RelationType[name.toUpperCase()];\n}\n\n},{\"../../core/contents\":8}],37:[function(require,module,exports){\n/**\n * SimpleAttributesDao module.\n * @module extension/relatedTables\n */\n\nvar SimpleAttributesRow = require('./simpleAttributesRow')\n  , SimpleAttributesTable = require('./simpleAttributesTable')\n  , Dao = require('../../dao/dao')\n  , UserDao = require('../../user/userDao');\n\nvar util = require('util');\n\n/**\n * User Simple Attributes DAO for reading user simple attributes data tables\n * @class\n * @extends {module:user/userDao~UserDao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} connection        connection\n * @param  {string} table table name\n */\nvar SimpleAttributesDao = function(geoPackage, table) {\n  UserDao.call(this, geoPackage, table);\n  this.simpleAttributesTable = table;\n}\n\nutil.inherits(SimpleAttributesDao, UserDao);\n\n/**\n * Create a new {module:extension/relatedTables~SimpleAttributesRow}\n * @return {module:extension/relatedTables~SimpleAttributesRow}\n */\nSimpleAttributesDao.prototype.newRow = function() {\n  return new SimpleAttributesRow(this.simpleAttributesTable);\n}\n\n/**\n * Create a new {module:extension/relatedTables~SimpleAttributesRow} with the column types and values\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/relatedTables~SimpleAttributesRow}             simple attributes row\n */\nSimpleAttributesDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new SimpleAttributesRow(this.simpleAttributesTable, columnTypes, values);\n};\n\n/**\n * Gets the {module:extension/relatedTables~SimpleAttributesTable}\n * @return {module:extension/relatedTables~SimpleAttributesTable}\n */\nSimpleAttributesDao.prototype.getTable = function() {\n  return this.simpleAttributesTable;\n}\n\n/**\n * Get the simple attributes rows from this table by ids\n * @param  {Number[]} ids array of ids\n * @return {module:extension/relatedTables~SimpleAttributesRow[]}\n */\nSimpleAttributesDao.prototype.getRows = function(ids) {\n  var simpleAttributesRows = [];\n  for (var i = 0; i < ids.length; i++) {\n    var row = this.queryForId(ids[i]);\n    if (row) {\n      simpleAttributesRows.push(row);\n    }\n  }\n  return simpleAttributesRows;\n}\n\nmodule.exports = SimpleAttributesDao;\n\n},{\"../../dao/dao\":11,\"../../user/userDao\":106,\"./simpleAttributesRow\":38,\"./simpleAttributesTable\":39,\"util\":343}],38:[function(require,module,exports){\n/**\n * SimpleAttributesRow module.\n * @module extension/relatedTables\n */\n\nvar UserRow = require('../../user/userRow');\n\nvar util = require('util');\n\n/**\n * User Simple Attributes Row containing the values from a single result set row\n * @class\n * @extends {module:user/userRow~UserRow}\n * @param  {module:extension/relatedTables~SimpleAttributesTable} simpleAttributesTable simple attributes table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n */\nvar SimpleAttributesRow = function(simpleAttributesTable, columnTypes, values) {\n  UserRow.call(this, simpleAttributesTable, columnTypes, values);\n  this.simpleAttributesTable = simpleAttributesTable;\n}\n\nutil.inherits(SimpleAttributesRow, UserRow);\n\n/**\n * Gets the primary key id column\n * @return {module:user/userColumn~UserColumn}\n */\nSimpleAttributesRow.prototype.getIdColumn = function() {\n  return this.simpleAttributesTable.getIdColumn();\n}\n\n/**\n * Gets the id\n * @return {Number}\n */\nSimpleAttributesRow.prototype.getId = function() {\n  return this.getValueWithColumnName(this.getIdColumn().name);\n}\n\nmodule.exports = SimpleAttributesRow;\n\n},{\"../../user/userRow\":107,\"util\":343}],39:[function(require,module,exports){\n/**\n * simpleAttributesTable module.\n * @module extension/relatedTables\n */\n\nvar UserTable = require('../../user/userTable')\n  , UserRelatedTable = require('./userRelatedTable')\n  , UserColumn = require('../../user/userColumn')\n  , DataTypes = require('../../db/dataTypes')\n  , RelationType = require('./relationType');\n\nvar util = require('util');\n\n/**\n * Simple Attributes Requirements Class User-Defined Related Data Table\n * @class\n * @extends {module:extension/relatedTables~UserRelatedTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   attribute columns\n * @param {string[]} requiredColumns required column names\n */\nvar SimpleAttributesTable = function(tableName, columns, requiredColumns) {\n  UserRelatedTable.call(this, tableName, SimpleAttributesTable.RELATION_TYPE.name, SimpleAttributesTable.RELATION_TYPE.dataType, columns, requiredColumns);\n  this.validateColumns();\n}\n\nutil.inherits(SimpleAttributesTable, UserRelatedTable);\n\n/**\n * Create a simple attributes table with the columns\n * @param  {string} tableName name of the table\n * @param  {module:user/userColumn~UserColumn[]} additionalColumns additional columns\n * @return {module:extension/relatedTables~SimpleAttributesTable}\n */\nSimpleAttributesTable.create = function(tableName, additionalColumns) {\n  var tableColumns = SimpleAttributesTable.createRequiredColumns(0);\n\n  if (additionalColumns) {\n    tableColumns = tableColumns.concat(additionalColumns);\n  }\n\n  return new SimpleAttributesTable(tableName, tableColumns, SimpleAttributesTable.requiredColumns());\n}\n\n/**\n * Get the required columns\n * @param  {string} [idColumnName=id] id column name\n * @return {string[]}\n */\nSimpleAttributesTable.requiredColumns = function(idColumnName) {\n  var requiredColumns = [];\n  requiredColumns.push(idColumnName || SimpleAttributesTable.COLUMN_ID);\n  return requiredColumns;\n}\n\n/**\n * Get the number of required columns\n * @return {Number}\n */\nSimpleAttributesTable.numRequiredColumns = function(){\n  return SimpleAttributesTable.requiredColumns().length;\n}\n\n/**\n * Create the required columns\n * @param  {Number} [startingIndex=0] starting index of the required columns\n * @param  {string} [idColumnName=id]  id column name\n * @return {module:user/userColumn~UserColumn[]}\n */\nSimpleAttributesTable.createRequiredColumns = function(startingIndex, idColumnName) {\n  startingIndex = startingIndex || 0;\n  return [SimpleAttributesTable.createIdColumn(startingIndex++, idColumnName || SimpleAttributesTable.COLUMN_ID)];\n}\n\n/**\n * Create the primary key id column\n * @param  {Number} index        index of the column\n * @param  {string} idColumnName name of the id column\n * @return {module:user/userColumn~UserColumn}\n */\nSimpleAttributesTable.createIdColumn = function(index, idColumnName) {\n  return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName);\n}\n\n/**\n * Validate that Simple Attributes columns to verify at least one non id\n * column exists and that all columns are simple data types\n */\nSimpleAttributesTable.prototype.validateColumns = function() {\n  var columns = this.columns;\n  if (columns.length < 2) {\n    throw new Error('Simple Attributes Tables require at least one non id column');\n  }\n\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    if (!SimpleAttributesTable.isSimple(column)) {\n      throw new Error('Simple Attributes Tables only support simple data types. Column: ' + column.name + ', Non Simple Data Type: ' + column.dataType);\n    }\n  }\n}\n\n/**\n * Get the column index of the id column\n * @return {Number}\n */\nSimpleAttributesTable.prototype.getIdColumnIndex = function() {\n  return this.pkIndex;\n}\n\n/**\n * Get the primary key id column\n * @return {module:user/userColumn~UserColumn}\n */\nSimpleAttributesTable.prototype.getIdColumn = function() {\n  return this.getPkColumn();\n}\n\n/**\n * Determine if the column is a simple column\n * @param  {module:user/userColumn~UserColumn} column column to check\n * @return {Boolean}\n */\nSimpleAttributesTable.isSimple = function(column) {\n  return column.notNull && SimpleAttributesTable.isSimpleDataType(column.dataType);\n}\n\n/**\n * Determine if the data type is a simple type: TEXT, INTEGER, or REAL\n * @param {module:db/dataTypes~GPKGDataType}\n * @return {Boolean}\n */\nSimpleAttributesTable.isSimpleDataType = function(dataType) {\n  return dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB && dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY;\n}\n\nSimpleAttributesTable.RELATION_TYPE = RelationType.SIMPLE_ATTRIBUTES;\nSimpleAttributesTable.COLUMN_ID = 'id';\n\nSimpleAttributesTable.prototype.TABLE_TYPE = 'simple_attributes';\n\nmodule.exports = SimpleAttributesTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"../../user/userTable\":108,\"./relationType\":36,\"./userRelatedTable\":43,\"util\":343}],40:[function(require,module,exports){\n/**\n * @module extension/relatedTables\n */\n\nvar UserMappingRow = require('./userMappingRow')\n  , UserMappingTable = require('./userMappingTable')\n  , UserCustomDao = require('../../user/custom/userCustomDao')\n  , ColumnValues = require('../../dao/columnValues');\n\nvar util = require('util');\n\n/**\n * User Mapping DAO for reading user mapping data tables\n * @class\n * @extends {module:user/custom/userCustomDao~UserCustomDao}\n * @param  {string} table table name\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n */\nvar UserMappingDao = function(userCustomDao, geoPackage) {\n  UserCustomDao.call(this, geoPackage, this.createMappingTable(userCustomDao));\n}\n\nutil.inherits(UserMappingDao, UserCustomDao);\n\n/**\n * Create a new {module:user/custom~UserCustomTable}\n * @param  {module:user/custom~UserCustomDao} userCustomDao\n * @return {module:user/custom~UserCustomTable} userCustomTable user custom table\n */\nUserMappingDao.prototype.createMappingTable = function(userCustomDao) {\n  return new UserMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns);\n}\n\n/**\n * Create a new {module:extension/relatedTables~UserMappingRow}\n * @return {module:extension/relatedTables~UserMappingRow}\n */\nUserMappingDao.prototype.newRow = function() {\n  return new UserMappingRow(this.table);\n}\n\n/**\n * Gets the {module:extension/relatedTables~UserMappingTable}\n * @return {module:extension/relatedTables~UserMappingTable}\n */\nUserMappingDao.prototype.getTable = function() {\n  return this.table;\n}\n\n/**\n * Create a user mapping row\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/relatedTables~UserMappingRow}             user mapping row\n */\nUserMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new UserMappingRow(this.table, columnTypes, values);\n};\n\n/**\n * Gets the user mapping row from the result\n * @param  {Object} result db result\n * @return {module:extension/relatedTables~UserMappingRow}             user mapping row\n */\nUserMappingDao.prototype.getUserMappingRow = function(result) {\n  return this.getRow(result);\n}\n\n/**\n * Query by base id\n * @param  {Number} baseId base id\n * @return {Object[]}\n */\nUserMappingDao.prototype.queryByBaseId = function(baseId) {\n  if (baseId.getBaseId) {\n    baseId = baseId.getBaseId();\n  }\n  return this.queryForAllEq(UserMappingTable.COLUMN_BASE_ID, baseId);\n}\n\n/**\n * Query by related id\n * @param  {Number} relatedId related id\n * @return {Object[]}\n */\nUserMappingDao.prototype.queryByRelatedId = function(relatedId) {\n  if (relatedId.getRelatedId) {\n    relatedId = relatedId.getRelatedId();\n  }\n  return this.queryForAllEq(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n}\n\n/**\n * Query by base id and related id\n * @param  {Number} baseId base id\n * @param  {Number} relatedId related id\n * @return {Object[]}\n */\nUserMappingDao.prototype.queryByIds = function(baseId, relatedId) {\n  if (baseId.getBaseId) {\n    relatedId = baseId.getRelatedId();\n    baseId = baseId.getBaseId();\n  }\n\n  var values = new ColumnValues();\n  values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId);\n  values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n\n  return this.queryForFieldValues(values);\n}\n\n/**\n * The unique related ids\n * @return {Number[]}\n */\nUserMappingDao.prototype.uniqueRelatedIds = function() {\n  var query = 'SELECT DISTINCT ';\n  query += UserMappingTable.COLUMN_RELATED_ID;\n  query += ' FROM ';\n  query += \"'\"+this.gpkgTableName+\"'\";\n  return this.connection.all(query);\n}\n\n/**\n * Count user mapping rows by base id and related id\n * @param  {Number} baseId    base id\n * @param  {Number} relatedId related id\n * @return {Number}\n */\nUserMappingDao.prototype.countByIds = function(baseId, relatedId) {\n  if (baseId.getBaseId) {\n    relatedId = baseId.getRelatedId();\n    baseId = baseId.getBaseId();\n  }\n\n  var values = new ColumnValues();\n  values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId);\n  values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n\n  return this.count(values);\n}\n\n/**\n * Delete by base id\n * @param  {Number} baseId base id\n * @return {Number} number of deleted rows\n */\nUserMappingDao.prototype.deleteByBaseId = function(baseId) {\n  if (baseId.getBaseId) {\n    baseId = baseId.getBaseId();\n  }\n\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);\n  var whereArgs = this.buildWhereArgs([baseId]);\n\n  return this.deleteWhere(where, whereArgs);\n};\n\n/**\n * Delete by related id\n * @param  {Number} relatedId related id\n * @return {Number} number of deleted rows\n */\nUserMappingDao.prototype.deleteByRelatedId = function(relatedId) {\n  if (relatedId.getRelatedId) {\n    relatedId = relatedId.getRelatedId();\n  }\n\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n  var whereArgs = this.buildWhereArgs([relatedId]);\n\n  return this.deleteWhere(where, whereArgs);\n};\n\n/**\n * Delete by base id and related id\n * @param  {Number} baseId    base id\n * @param  {Number} relatedId related id\n * @return {Number} number of deleted rows\n */\nUserMappingDao.prototype.deleteByIds = function(baseId, relatedId) {\n  if (baseId.getBaseId) {\n    relatedId = baseId.getRelatedId();\n    baseId = baseId.getBaseId();\n  }\n\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n  var whereArgs = this.buildWhereArgs([baseId, relatedId]);\n\n  return this.deleteWhere(where, whereArgs);\n}\n\nmodule.exports = UserMappingDao;\n\n},{\"../../dao/columnValues\":10,\"../../user/custom/userCustomDao\":102,\"./userMappingRow\":41,\"./userMappingTable\":42,\"util\":343}],41:[function(require,module,exports){\n/**\n * UserMappingRow module.\n * @module extension/relatedTables\n */\n\nvar UserRow = require('../../user/userRow');\n\nvar util = require('util');\n\n/**\n * User Mapping Row containing the values from a single result set row\n * @class\n * @extends {module:user/userRow~UserRow}\n * @param  {module:extension/relatedTables~UserMappingTable} userMappingTable user mapping table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n */\nvar UserMappingRow = function(userMappingTable, columnTypes, values) {\n  UserRow.call(this, userMappingTable, columnTypes, values);\n}\n\nutil.inherits(UserMappingRow, UserRow);\n\n/**\n * Get the base id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingRow.prototype.getBaseIdColumn = function() {\n  return this.table.getBaseIdColumn();\n}\n\n/**\n * Gets the base id\n * @return {Number}\n */\nUserMappingRow.prototype.getBaseId = function() {\n  return this.getValueWithColumnName(this.getBaseIdColumn().name);\n}\n\n/**\n * Sets the base id\n * @param  {Number} baseId base id\n */\nUserMappingRow.prototype.setBaseId = function(baseId) {\n  this.setValueWithColumnName(this.getBaseIdColumn().name, baseId);\n}\n\n/**\n * Get the related id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingRow.prototype.getRelatedIdColumn = function() {\n  return this.table.getRelatedIdColumn();\n}\n\n/**\n * Gets the related id\n * @return {Number}\n */\nUserMappingRow.prototype.getRelatedId = function() {\n  return this.getValueWithColumnName(this.getRelatedIdColumn().name);\n}\n\n/**\n * Sets the related id\n * @param  {Number} relatedId related id\n */\nUserMappingRow.prototype.setRelatedId = function(relatedId) {\n  this.setValueWithColumnName(this.getRelatedIdColumn().name, relatedId);\n}\n\nmodule.exports = UserMappingRow;\n\n},{\"../../user/userRow\":107,\"util\":343}],42:[function(require,module,exports){\n/**\n * userMappingTable module.\n * @module extension/relatedTables\n */\n\nvar UserTable = require('../../user/userTable')\n  , UserCustomColumn = require('../../user/custom/userCustomColumn')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Contains user mapping table factory and utility methods\n * @class\n * @extends {module:user/userTable~UserTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   user mapping columns\n */\nvar UserMappingTable = function(tableName, columns) {\n  UserTable.call(this, tableName, columns);\n}\n\nutil.inherits(UserMappingTable, UserTable);\n\n/**\n * Creates a user mapping table with the minimum required columns followed by the additional columns\n * @param  {string} tableName name of the table\n * @param  {module:user/userColumn~UserColumn[]} additionalColumns additional columns\n * @return {module:extension/relatedTables~UserMappingTable}\n */\nUserMappingTable.create = function(tableName, columns) {\n  var allColumns = UserMappingTable.createRequiredColumns(0);\n  if (columns) {\n    allColumns = allColumns.concat(columns);\n  }\n  return new UserMappingTable(tableName, allColumns);\n}\n\n/**\n * Get the number of required columns\n * @return {Number}\n */\nUserMappingTable.numRequiredColumns = function() {\n  return UserMappingTable.createRequiredColumns(0).length;\n}\n\n/**\n * Create the required columns\n * @param  {Number} [startingIndex=0] starting index of the required columns\n * @return {module:user/userColumn~UserColumn[]}\n */\nUserMappingTable.createRequiredColumns = function(startingIndex) {\n  startingIndex = startingIndex || 0;\n  return [\n    UserMappingTable.createBaseIdColumn(startingIndex++),\n    UserMappingTable.createRelatedIdColumn(startingIndex)\n  ];\n}\n\n/**\n * Create the base id column\n * @param  {Number} index        index of the column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingTable.createBaseIdColumn = function(index) {\n  var baseIdColumn = UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_BASE_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true);\n  return baseIdColumn;\n}\n\n/**\n * Create the related id column\n * @param  {Number} index        index of the column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingTable.createRelatedIdColumn = function(index) {\n  return UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_RELATED_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true);\n}\n\n/**\n * Get the base id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingTable.prototype.getBaseIdColumn = function() {\n  return this.getColumnWithColumnName(UserMappingTable.COLUMN_BASE_ID);\n}\n\n/**\n * Get the related id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingTable.prototype.getRelatedIdColumn = function() {\n  return this.getColumnWithColumnName(UserMappingTable.COLUMN_RELATED_ID);\n}\n\n/**\n * Get the required columns\n * @return {string[]}\n */\nUserMappingTable.requiredColumns = function() {\n  return [UserMappingTable.COLUMN_BASE_ID, UserMappingTable.COLUMN_RELATED_ID];\n}\n\nUserMappingTable.COLUMN_BASE_ID = 'base_id';\nUserMappingTable.COLUMN_RELATED_ID = 'related_id';\n\nmodule.exports = UserMappingTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/custom/userCustomColumn\":101,\"../../user/userTable\":108,\"util\":343}],43:[function(require,module,exports){\n/**\n * userRelatedTable module.\n * @module extension/relatedTables\n */\n\nvar UserTable = require('../../user/userTable')\n  , UserColumn = require('../../user/userColumn')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * User Defined Related Table\n * @param  {string} tableName table name\n * @param  {array} columns   attribute columns\n */\n/**\n * User Defined Related Table\n * @param  {string} tableName       table name\n * @param  {string} relationName    relation name\n * @param  {string} dataType        Contents data type\n * @param  {module:user/userColumn~UserColumn} columns         columns\n * @param  {string[]} requiredColumns required columns\n * @return {module:extension/relatedTables~UserRelatedTable}\n */\nvar UserRelatedTable = function(tableName, relationName, dataType, columns, requiredColumns) {\n  UserTable.call(this, tableName, columns, requiredColumns);\n  this.relation_name = relationName;\n  this.data_type = dataType;\n}\n\nutil.inherits(UserRelatedTable, UserTable);\n\n/**\n * Sets the contents\n * @param  {module:core/contents~Contents} contents contents\n * @throw Error if the contents data type does not match this data type\n */\nUserRelatedTable.prototype.setContents = function(contents) {\n  this.contents = contents;\n\n  // verify the contents have a relation name data type\n  if (!contents.data_type || contents.data_type !== this.data_type) {\n    throw new Error('The contents of this related table must have a data type of ' + this.data_type);\n  }\n}\n\nmodule.exports = UserRelatedTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"../../user/userTable\":108,\"util\":343}],44:[function(require,module,exports){\n/**\n * RTreeIndexDao module.\n * @module RTreeIndexDao\n * @see module:dao/dao\n */\n\nvar Dao = require('../../dao/dao')\n  , BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension\n  , EnvelopeBuilder = require('../../geom/envelopeBuilder')\n  , GeometryData = require('../../geom/geometryData');\n\nvar util = require('util');\n\nvar RTreeIndex = function(geoPackage, featureDao) {\n  BaseExtension.call(this, geoPackage);\n\n  this.extensionName = Extension.buildExtensionName(RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR, RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR);\n\n  this.extensionDefinition = RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION;\n\n  this.tableName = featureDao.table_name;\n  this.primaryKeyColumn = featureDao.idColumns[0];\n  this.columnName = featureDao.getGeometryColumnName();\n\n  this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao);\n  this.extensionExists = this.hasExtension(this.extensionName, this.tableName, this.columnName);\n}\n\nutil.inherits(RTreeIndex, BaseExtension);\n\nRTreeIndex.prototype.getRTreeIndexExtension = function () {\n  return this.getExtension(this.extensionName, this.tableName, this.columnName);\n};\n\nRTreeIndex.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.WRITE_ONLY);\n};\n\nRTreeIndex.prototype.create = function() {\n  if (this.extensionExists) {\n    return Promise.resolve(this.getRTreeIndexExtension());\n  }\n\n  return this.getOrCreate(this.extensionName, this.tableName, this.columnName, RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION, Extension.WRITE_ONLY)\n  .then(function() {\n    this.createAllFunctions();\n    this.createRTreeIndex();\n    this.loadRTreeIndex();\n    this.createAllTriggers();\n    return this.getRTreeIndexExtension();\n  }.bind(this));\n}\n\nRTreeIndex.prototype.createAllTriggers = function() {\n  var insertTrigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_insert AFTER INSERT ON '+this.tableName+\n  '  WHEN (new.'+this.columnName+' NOT NULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+\n  '    NEW.'+this.primaryKeyColumn+','+\n  '    ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+\n  '    ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+\n  '  ); '+\n  'END;';\n\n  var update1Trigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update1 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+\n  '  WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+\n  '     (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+\n  '    NEW.'+this.primaryKeyColumn+','+\n  '    ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+\n  '    ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+\n  '  ); '+\n  'END;';\n\n  var update2Trigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update2 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+\n  '  WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+\n  '       (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+\n  'END;';\n\n  var update3Trigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update3 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+\n  '  WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+\n  '       (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+\n  '  INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+\n  '    NEW.'+this.primaryKeyColumn+', '+\n  '    ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+\n  '    ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+')'+\n  '  ); '+\n  'END;';\n\n  var update4Trigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update4 AFTER UPDATE ON '+this.tableName+\n  '  WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+\n  '       (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id IN (OLD.'+this.primaryKeyColumn+', NEW.'+this.primaryKeyColumn+'); '+\n  'END;';\n\n  var deleteTrigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_delete AFTER DELETE ON '+this.tableName+\n  '  WHEN old.'+this.columnName+' NOT NULL '+\n  'BEGIN'+\n  '  DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+\n  'END;';\n\n  this.connection.run(insertTrigger);\n  this.connection.run(update1Trigger);\n  this.connection.run(update2Trigger);\n  this.connection.run(update3Trigger);\n  this.connection.run(update4Trigger);\n  this.connection.run(deleteTrigger);\n}\n\nRTreeIndex.prototype.loadRTreeIndex = function() {\n  this.connection.run('INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' SELECT '+this.primaryKeyColumn+', st_minx('+this.columnName+'), st_maxx('+this.columnName+'), st_miny('+this.columnName+'), st_maxy('+this.columnName+') FROM '+this.tableName);\n}\n\nRTreeIndex.prototype.createRTreeIndex = function() {\n  this.connection.run('CREATE VIRTUAL TABLE rtree_'+this.tableName+'_'+this.columnName+' USING rtree(id, minx, maxx, miny, maxy)');\n}\n\nRTreeIndex.prototype.createAllFunctions = function() {\n  this.createMinXFunction();\n\tthis.createMaxXFunction();\n\tthis.createMinYFunction();\n\tthis.createMaxYFunction();\n\tthis.createIsEmptyFunction();\n}\n\nRTreeIndex.prototype.createMinXFunction = function() {\n  this.connection.registerFunction('ST_MinX', function(buffer) {\n    var geom = new GeometryData(buffer);\n    var envelope = geom.envelope;\n    if (!envelope) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);\n    }\n    return envelope.minX;\n  });\n}\n\nRTreeIndex.prototype.createMinYFunction = function() {\n  this.connection.registerFunction('ST_MinY', function(buffer) {\n    var geom = new GeometryData(buffer);\n    var envelope = geom.envelope;\n    if (!envelope) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);\n    }\n    return envelope.minY;\n  });\n}\n\nRTreeIndex.prototype.createMaxXFunction = function() {\n  this.connection.registerFunction('ST_MaxX', function(buffer) {\n    var geom = new GeometryData(buffer);\n    var envelope = geom.envelope;\n    if (!envelope) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);\n    }\n    return envelope.maxX;\n  });\n}\n\nRTreeIndex.prototype.createMaxYFunction = function() {\n  this.connection.registerFunction('ST_MaxY', function(buffer) {\n    var geom = new GeometryData(buffer);\n    var envelope = geom.envelope;\n    if (!envelope) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);\n    }\n    return envelope.maxY;\n  });\n}\n\nRTreeIndex.prototype.createIsEmptyFunction = function() {\n  this.connection.registerFunction('ST_IsEmpty', function(buffer) {\n    var geom = new GeometryData(buffer);\n    return !geom || geom.empty || !geom.geometry;\n  });\n}\n\n/**\n * RTree Index Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar RTreeIndexDao = function(geoPackage, featureDao) {\n  Dao.call(this, geoPackage);\n  this.featureDao = featureDao;\n\n};\n\nutil.inherits(RTreeIndexDao, Dao);\n\n/**\n * Generate query components\n * @param envelope\n * @returns {{whereArgs: Array, where: string, join: string, tableNameArr: string[]}}\n * @private\n */\nRTreeIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) {\n  var tableName = this.featureDao.gpkgTableName;\n\n  var where = '';\n  var minXLessThanMaxX = envelope.minX < envelope.maxX;\n  if (minXLessThanMaxX) {\n    where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<=');\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>=');\n  } else {\n    where += '(';\n    where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue('minx', envelope.minX, '>=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue('maxx', envelope.maxX, '<=');\n    where += ')';\n  }\n\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue('miny', envelope.maxY, '<=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue('maxy', envelope.minY, '>=');\n\n  var whereArgs = []\n  whereArgs.push(envelope.maxX, envelope.minX);\n  if (!minXLessThanMaxX) {\n    whereArgs.push(envelope.minX, envelope.maxX);\n  }\n  whereArgs.push(envelope.maxY, envelope.minY);\n\n  return {\n    join: 'inner join ' + tableName + ' on ' + tableName + '.' + this.featureDao.idColumns[0] + ' = ' + this.gpkgTableName+'.id',\n    where,\n    whereArgs,\n    tableNameArr: [tableName + '.*']\n  };\n};\n\nRTreeIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) {\n  var result = this._generateGeometryEnvelopeQuery(envelope)\n  return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);\n};\n\nRTreeIndexDao.prototype.countWithGeometryEnvelope = function(envelope) {\n  var result = this._generateGeometryEnvelopeQuery(envelope)\n  return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);\n};\n\nRTreeIndexDao.TABLE_NAME = \"rtree\";\nRTreeIndexDao.COLUMN_TABLE_NAME = RTreeIndexDao.TABLE_NAME + \".table_name\";\nRTreeIndexDao.COLUMN_GEOM_ID = RTreeIndexDao.TABLE_NAME + \".geom_id\";\nRTreeIndexDao.COLUMN_MIN_X = RTreeIndexDao.TABLE_NAME + \".minx\";\nRTreeIndexDao.COLUMN_MAX_X = RTreeIndexDao.TABLE_NAME + \".maxx\";\nRTreeIndexDao.COLUMN_MIN_Y = RTreeIndexDao.TABLE_NAME + \".miny\";\nRTreeIndexDao.COLUMN_MAX_Y = RTreeIndexDao.TABLE_NAME + \".maxy\";\nRTreeIndexDao.COLUMN_MIN_Z = RTreeIndexDao.TABLE_NAME + \".minz\";\nRTreeIndexDao.COLUMN_MAX_Z = RTreeIndexDao.TABLE_NAME + \".maxz\";\nRTreeIndexDao.COLUMN_MIN_M = RTreeIndexDao.TABLE_NAME + \".minm\";\nRTreeIndexDao.COLUMN_MAX_M = RTreeIndexDao.TABLE_NAME + \".maxm\";\n\nRTreeIndexDao.EXTENSION_NAME = 'gpkg_rtree_index';\nRTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR = 'gpkg';\nRTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR = 'rtree_index';\nRTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION = 'http://www.geopackage.org/spec/#extension_rtree';\n\nRTreeIndexDao.prototype.gpkgTableName = RTreeIndexDao.TABLE_NAME;\n\nmodule.exports.RTreeIndexDao = RTreeIndexDao;\nmodule.exports.RTreeIndex = RTreeIndex;\n\n},{\"../.\":25,\"../../dao/dao\":11,\"../../geom/envelopeBuilder\":72,\"../../geom/geometryData\":73,\"../baseExtension\":20,\"util\":343}],45:[function(require,module,exports){\n/**\n * SchemaExtension module.\n * @module SchemaExtension\n * @see module:extension/BaseExtension\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension;\n\nvar util = require('util');\n\nvar SchemaExtension = function(geoPackage) {\n  BaseExtension.call(this, geoPackage);\n\n  this.extensionName = SchemaExtension.EXTENSION_NAME;\n\n  this.extensionDefinition = SchemaExtension.EXTENSION_SCHEMA_DEFINITION;\n}\n\nutil.inherits(SchemaExtension, BaseExtension);\n\nSchemaExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);\n};\n\nSchemaExtension.EXTENSION_NAME = 'gpkg_schema';\nSchemaExtension.EXTENSION_SCHEMA_AUTHOR = 'gpkg';\nSchemaExtension.EXTENSION_SCHEMA_NAME_NO_AUTHOR = 'schema';\nSchemaExtension.EXTENSION_SCHEMA_DEFINITION = 'http://www.geopackage.org/spec/#extension_schema';\n\nmodule.exports.SchemaExtension = SchemaExtension;\n\n},{\"../.\":25,\"../baseExtension\":20,\"util\":343}],46:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class FeatureStyle\n */\n\n/**\n * FeatureStyle constructor\n * @param {module:extension/style.StyleRow} styleRow\n * @param {module:extension/style.IconRow} iconRow\n * @constructor\n */\nvar FeatureStyle = function(styleRow, iconRow) {\n  this.styleRow = styleRow;\n  this.iconRow = iconRow;\n};\n\n/**\n * Set style\n * @param {module:extension/style.StyleRow} styleRow\n */\nFeatureStyle.prototype.setStyle = function(styleRow) {\n  this.styleRow = styleRow;\n};\n\n/**\n * Get style\n * @returns {module:extension/style.StyleRow}\n */\nFeatureStyle.prototype.getStyle = function() {\n  return this.styleRow;\n};\n\n/**\n * Returns true if has style\n * @returns {Boolean}\n */\nFeatureStyle.prototype.hasStyle = function() {\n  return !!this.styleRow;\n};\n\n/**\n * Set icon\n * @param {module:extension/style.IconRow} iconRow\n */\nFeatureStyle.prototype.setIcon = function(iconRow) {\n  this.iconRow = iconRow;\n};\n\n/**\n * Get icon\n * @returns {module:extension/style.IconRow}\n */\nFeatureStyle.prototype.getIcon = function() {\n  return this.iconRow;\n};\n\n/**\n * Returns true if has icon\n * @returns {Boolean}\n */\nFeatureStyle.prototype.hasIcon = function() {\n  return !!this.iconRow;\n};\n\nmodule.exports = FeatureStyle;\n\n},{}],47:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class FeatureStyles\n */\n\n/**\n * FeatureStyles constructor\n * @param {module:extension/style.Styles} styles\n * @param {module:extension/style.Icons} icons\n * @constructor\n */\nvar FeatureStyles = function(styles = null, icons = null) {\n  this.styles = styles;\n  this.icons = icons;\n};\n\n/**\n * Set style\n * @param {module:extension/style.Styles} styles\n */\nFeatureStyles.prototype.setStyles = function(styles) {\n  this.styles = styles;\n};\n\n/**\n * Get style\n * @returns {module:extension/style.Styles}\n */\nFeatureStyles.prototype.getStyles = function() {\n  return this.styles;\n};\n\n/**\n * Set icon\n * @param {module:extension/style.Icons} icons\n */\nFeatureStyles.prototype.setIcons = function(icons) {\n  this.icons = icons;\n};\n\n/**\n * Get icon\n * @returns {module:extension/style.Icons}\n */\nFeatureStyles.prototype.getIcons = function() {\n  return this.icons;\n};\n\nmodule.exports = FeatureStyles;\n\n},{}],48:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class FeatureStyleExtension\n */\n\nvar FeatureStyles = require('./featureStyles')\n\t, FeatureStyle = require('./featureStyle')\n\t, Styles = require('./styles')\n\t, Icons = require('./icons');\n\n\n/**\n * Feature Table Styles, styles and icons for an individual feature table\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @param {String} tableName\n * @constructor\n */\nvar FeatureTableStyles = function(geoPackage, tableName) {\n\tthis.featureStyleExtension = geoPackage.getFeatureStyleExtension();\n\tthis.cachedTableFeatureStyles = new FeatureStyles();\n\tthis.tableName = tableName;\n};\n\n/**\n * Get the feature style extension\n * @return {module:extension/style.FeatureStyleExtension} feature style extension\n */\nFeatureTableStyles.prototype.getFeatureStyleExtension = function() {\n\treturn this.featureStyleExtension;\n};\n\n/**\n * Get the feature table name\n * @return {String} feature table name\n */\nFeatureTableStyles.prototype.getTableName = function() {\n\treturn this.tableName;\n};\n\n/**\n * Determine if the GeoPackage has the extension for the table\n * @return {Boolean} true if has extension\n */\nFeatureTableStyles.prototype.has = function() {\n\treturn this.featureStyleExtension.has(this.tableName);\n};\n\n/**\n * Create style, icon, table style, and table icon relationships for the\n * feature table\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createRelationships = function() {\n\treturn this.featureStyleExtension.createRelationships(this.tableName);\n};\n\n/**\n * Check if feature table has a style, icon, table style, or table icon\n * relationships\n * @return {Boolean} true if has a relationship\n */\nFeatureTableStyles.prototype.hasRelationship = function() {\n\treturn this.featureStyleExtension.hasRelationship(this.tableName);\n};\n\n/**\n * Create a style relationship for the feature table\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createStyleRelationship = function() {\n\treturn this.featureStyleExtension.createStyleRelationship(this.tableName);\n};\n\n/**\n * Determine if a style relationship exists for the feature table\n * @return {Boolean} true if relationship exists\n */\nFeatureTableStyles.prototype.hasStyleRelationship = function() {\n\treturn this.featureStyleExtension.hasStyleRelationship(this.tableName);\n};\n\n/**\n * Create a feature table style relationship\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createTableStyleRelationship = function() {\n\treturn this.featureStyleExtension.createTableStyleRelationship(this.tableName);\n};\n\n/**\n * Determine if feature table style relationship exists\n *\n * @return {Boolean} true if relationship exists\n */\nFeatureTableStyles.prototype.hasTableStyleRelationship = function() {\n\treturn this.featureStyleExtension.hasTableStyleRelationship(this.tableName);\n};\n\n/**\n * Create an icon relationship for the feature table\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createIconRelationship = function() {\n\treturn this.featureStyleExtension.createIconRelationship(this.tableName);\n};\n\n/**\n * Determine if an icon relationship exists for the feature table\n * @return {Boolean} true if relationship exists\n */\nFeatureTableStyles.prototype.hasIconRelationship = function() {\n\treturn this.featureStyleExtension.hasIconRelationship(this.tableName);\n};\n\n/**\n * Create a feature table icon relationship\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createTableIconRelationship = function() {\n\treturn this.featureStyleExtension.createTableIconRelationship(this.tableName);\n};\n\n/**\n * Determine if feature table icon relationship exists\n * @return {Boolean} true if relationship exists\n */\nFeatureTableStyles.prototype.hasTableIconRelationship = function() {\n\treturn this.featureStyleExtension.hasTableIconRelationship(this.tableName);\n};\n\n/**\n * Delete the style and icon table and row relationships for the feature\n * table\n */\nFeatureTableStyles.prototype.deleteRelationships = function() {\n\tthis.featureStyleExtension.deleteRelationships(this.tableName);\n};\n\n/**\n * Delete a style relationship for the feature table\n */\nFeatureTableStyles.prototype.deleteStyleRelationship = function() {\n\tthis.featureStyleExtension.deleteStyleRelationship(this.tableName);\n};\n\n/**\n * Delete a table style relationship for the feature table\n */\nFeatureTableStyles.prototype.deleteTableStyleRelationship = function() {\n\tthis.featureStyleExtension.deleteTableStyleRelationship(this.tableName);\n};\n\n/**\n * Delete a icon relationship for the feature table\n */\nFeatureTableStyles.prototype.deleteIconRelationship = function() {\n\tthis.featureStyleExtension.deleteIconRelationship(this.tableName);\n};\n\n/**\n * Delete a table icon relationship for the feature table\n */\nFeatureTableStyles.prototype.deleteTableIconRelationship = function() {\n\tthis.featureStyleExtension.deleteTableIconRelationship(this.tableName);\n};\n\n/**\n * Get a Style Mapping DAO\n * @return {module:extension/style.StyleMappingDao} style mapping DAO\n */\nFeatureTableStyles.prototype.getStyleMappingDao = function() {\n\treturn this.featureStyleExtension.getStyleMappingDao(this.tableName);\n};\n\n/**\n * Get a Table Style Mapping DAO\n * @return {module:extension/style.StyleMappingDao} table style mapping DAO\n */\nFeatureTableStyles.prototype.getTableStyleMappingDao = function() {\n\treturn this.featureStyleExtension.getTableStyleMappingDao(this.tableName);\n};\n\n/**\n * Get a Icon Mapping DAO\n * @return {module:extension/style.StyleMappingDao} icon mapping DAO\n */\nFeatureTableStyles.prototype.getIconMappingDao = function() {\n\treturn this.featureStyleExtension.getIconMappingDao(this.tableName);\n};\n\n/**\n * Get a Table Icon Mapping DAO\n * @return {module:extension/style.StyleMappingDao} table icon mapping DAO\n */\nFeatureTableStyles.prototype.getTableIconMappingDao = function() {\n\treturn this.featureStyleExtension.getTableIconMappingDao(this.tableName);\n};\n\n/**\n * Get a style DAO\n * @return {module:extension/style.StyleDao} style DAO\n */\nFeatureTableStyles.prototype.getStyleDao = function() {\n\treturn this.featureStyleExtension.getStyleDao();\n};\n\n/**\n * Get a icon DAO\n * @return {module:extension/style.IconDao} icon DAO\n */\nFeatureTableStyles.prototype.getIconDao = function() {\n\treturn this.featureStyleExtension.getIconDao();\n};\n\n/**\n * Get the table feature styles\n * @return {module:extension/style.FeatureStyles} table feature styles or null\n */\nFeatureTableStyles.prototype.getTableFeatureStyles = function() {\n\treturn this.featureStyleExtension.getTableFeatureStyles(this.tableName);\n};\n\n/**\n * Get the table styles\n * @return {module:extension/style.Styles} table styles or null\n */\nFeatureTableStyles.prototype.getTableStyles = function() {\n\treturn this.featureStyleExtension.getTableStyles(this.tableName);\n};\n\n/**\n * Get the cached table styles, querying and caching if needed\n * @return {module:extension/style.Styles} cached table styles\n */\nFeatureTableStyles.prototype.getCachedTableStyles = function() {\n\tvar styles = this.cachedTableFeatureStyles.getStyles();\n\tif (styles === null) {\n\t\tstyles = this.cachedTableFeatureStyles.getStyles();\n\t\tif (styles === null) {\n\t\t\tstyles = this.getTableStyles();\n\t\t\tif (styles === null) {\n\t\t\t\tstyles = new Styles();\n\t\t\t}\n\t\t\tthis.cachedTableFeatureStyles.setStyles(styles);\n\t\t}\n\t}\n\tif (styles.isEmpty()) {\n\t\tstyles = null;\n\t}\n\treturn styles;\n};\n\n/**\n * Get the table style of the geometry type\n * @param {String} geometryType geometry type\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getTableStyle = function(geometryType) {\n\treturn this.featureStyleExtension.getTableStyle(this.tableName, geometryType);\n};\n\n/**\n * Get the table style default\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getTableStyleDefault = function() {\n\treturn this.featureStyleExtension.getTableStyleDefault(this.tableName);\n};\n\n/**\n * Get the table icons\n * @return {module:extension/style.Icons} table icons or null\n */\nFeatureTableStyles.prototype.getTableIcons = function() {\n\treturn this.featureStyleExtension.getTableIcons(this.tableName);\n};\n\n/**\n * Get the cached table icons, querying and caching if needed\n * @return {module:extension/style.Icons} cached table icons\n */\nFeatureTableStyles.prototype.getCachedTableIcons = function() {\n\tvar icons = this.cachedTableFeatureStyles.getIcons();\n\tif (icons === null) {\n\t\ticons = this.cachedTableFeatureStyles.getIcons();\n\t\tif (icons === null) {\n\t\t\ticons = this.getTableIcons();\n\t\t\tif (icons === null) {\n\t\t\t\ticons = new Icons();\n\t\t\t}\n\t\t\tthis.cachedTableFeatureStyles.setIcons(icons);\n\t\t}\n\t}\n\tif (icons.isEmpty()) {\n\t\ticons = null;\n\t}\n\treturn icons;\n};\n\n/**\n * Get the table icon of the geometry type\n * @param {String} geometryType geometry type\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getTableIcon = function(geometryType) {\n\treturn this.featureStyleExtension.getTableIcon(this.tableName, geometryType);\n};\n\n/**\n * Get the table icon default\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getTableIconDefault = function() {\n\treturn this.featureStyleExtension.getTableIconDefault(this.tableName);\n};\n\n/**\n * Get the feature styles for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyles} feature styles or null\n */\nFeatureTableStyles.prototype.getFeatureStylesForFeatureRow = function(featureRow) {\n\treturn this.featureStyleExtension.getFeatureStylesForFeatureRow(featureRow);\n};\n\n/**\n * Get the feature styles for the feature id\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.FeatureStyles} feature styles or null\n */\nFeatureTableStyles.prototype.getFeatureStyles = function(featureId) {\n\treturn this.featureStyleExtension.getFeatureStyles(this.tableName, featureId);\n};\n\n/**\n * Get the feature style (style and icon) of the feature row, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyleForFeatureRow = function(featureRow) {\n\treturn this.getFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Get the feature style (style and icon) of the feature row with the\n * provided geometry type, searching in order: feature geometry type style\n * or icon, feature default style or icon, table geometry type style or\n * icon, table default style or icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\treturn this.getFeatureStyle(featureRow.getId(), geometryType);\n};\n\n/**\n * Get the feature style default (style and icon) of the feature row,\n * searching in order: feature default style or icon, table default style or\n * icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyleDefaultForFeatureRow = function(featureRow) {\n\treturn this.getFeatureStyle(featureRow.getId(), null);\n};\n\n/**\n * Get the feature style (style and icon) of the feature, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyle = function(featureId, geometryType) {\n\tvar featureStyle = null;\n\tvar style = this.getStyle(featureId, geometryType);\n\tvar icon = this.getIcon(featureId, geometryType);\n\tif (style != null || icon != null) {\n\t\tfeatureStyle = new FeatureStyle(style, icon);\n\t}\n\treturn featureStyle;\n};\n\n/**\n * Get the feature style (style and icon) of the feature, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyleDefault = function(featureId) {\n\treturn this.getFeatureStyle(featureId, null);\n};\n\n/**\n * Get the styles for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.Styles} styles or null\n */\nFeatureTableStyles.prototype.getStylesForFeatureRow = function(featureRow) {\n\treturn this.featureStyleExtension.getStylesForFeatureRow(featureRow);\n};\n\n/**\n * Get the styles for the feature id\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.Styles}  styles or null\n */\nFeatureTableStyles.prototype.getStylesForFeatureId = function(featureId) {\n\treturn this.featureStyleExtension.getStylesForFeatureId(this.tableName, featureId);\n};\n\n/**\n * Get the style of the feature row, searching in order: feature geometry\n * type style, feature default style, table geometry type style, table\n * default style\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyleForFeatureRow = function(featureRow) {\n\treturn this.getStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Get the style of the feature row with the provided geometry type,\n * searching in order: feature geometry type style, feature default style,\n * table geometry type style, table default style\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\treturn this.getStyle(featureRow.getId(), geometryType);\n};\n\n/**\n * Get the default style of the feature row, searching in order: feature\n * default style, table default style\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyleDefaultForFeatureRow = function(featureRow) {\n\treturn this.getStyle(featureRow.getId(), null);\n};\n\n/**\n * Get the style of the feature, searching in order: feature geometry type\n * style, feature default style, table geometry type style, table default\n * style\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyle = function(featureId, geometryType) {\n\tvar styleRow = this.featureStyleExtension.getStyle(this.tableName, featureId, geometryType, false);\n\tif (styleRow === null) {\n\t\t// Table Style\n\t\tvar styles = this.getCachedTableStyles();\n\t\tif (styles != null) {\n\t\t\tstyleRow = styles.getStyle(geometryType);\n\t\t}\n\t}\n\treturn styleRow;\n};\n\n/**\n * Get the default style of the feature, searching in order: feature default\n * style, table default style\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyleDefault = function(featureId) {\n\treturn this.getStyle(featureId, null);\n};\n\n/**\n * Get the icons for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.Icons} icons or null\n */\nFeatureTableStyles.prototype.getIconsForFeatureRow = function(featureRow) {\n\treturn this.featureStyleExtension.getIconsForFeatureRow(featureRow);\n};\n\n/**\n * Get the icons for the feature id\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.Icons} icons or null\n */\nFeatureTableStyles.prototype.getIconsForFeatureId = function(featureId) {\n\treturn this.featureStyleExtension.getIconsForFeatureId(this.tableName, featureId);\n};\n\n/**\n * Get the icon of the feature row, searching in order: feature geometry\n * type icon, feature default icon, table geometry type icon, table default\n * icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIconForFeatureRow = function(featureRow) {\n\treturn this.getIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Get the icon of the feature row with the provided geometry type,\n * searching in order: feature geometry type icon, feature default icon,\n * table geometry type icon, table default icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\treturn this.getIcon(featureRow.getId(), geometryType);\n};\n\n/**\n * Get the default icon of the feature row, searching in order: feature\n * default icon, table default icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIconDefaultForFeatureRow = function(featureRow) {\n\treturn this.getIcon(featureRow.getId(), null);\n};\n\n/**\n * Get the icon of the feature, searching in order: feature geometry type\n * icon, feature default icon, table geometry type icon, table default icon\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIcon = function(featureId, geometryType) {\n\tvar iconRow = this.featureStyleExtension.getIcon(this.tableName, featureId, geometryType, false);\n\tif (iconRow === null) {\n\t\t// Table Icon\n\t\tvar icons = this.getCachedTableIcons();\n\t\tif (icons != null) {\n\t\t\ticonRow = icons.getIcon(geometryType);\n\t\t}\n\t}\n\treturn iconRow;\n};\n\n/**\n * Get the default icon of the feature, searching in order: feature default\n * icon, table default icon\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIconDefault = function(featureId) {\n\treturn this.getIcon(featureId, null);\n};\n\n/**\n * Set the feature table default feature styles\n *\n * @param {module:extension/style.FeatureStyles} featureStyles default feature styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableFeatureStyles = function(featureStyles) {\n\treturn this.featureStyleExtension.setTableFeatureStyles(this.tableName, featureStyles).then(function () {\n\t\tthis.clearCachedTableFeatureStyles();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table default styles\n *\n * @param {module:extension/style.Styles} styles default styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableStyles = function(styles) {\n\treturn this.featureStyleExtension.setTableStyles(this.tableName, styles).then(function () {\n\t\tthis.clearCachedTableStyles();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table style default\n *\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableStyleDefault = function(style) {\n\treturn this.featureStyleExtension.setTableStyleDefault(this.tableName, style).then(function () {\n\t\tthis.clearCachedTableStyles();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table style for the geometry type\n *\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableStyle = function(geometryType, style) {\n\treturn this.featureStyleExtension.setTableStyle(this.tableName, geometryType, style).then(function () {\n\t\tthis.clearCachedTableStyles();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table default icons\n *\n * @param {module:extension/style.Icons} icons default icons\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableIcons = function(icons) {\n\treturn this.featureStyleExtension.setTableIcons(this.tableName, icons).then(function () {\n\t\tthis.clearCachedTableIcons();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table icon default\n *\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableIconDefault = function(icon) {\n\treturn this.featureStyleExtension.setTableIconDefault(this.tableName, icon).then(function () {\n\t\tthis.clearCachedTableIcons();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table icon for the geometry type\n *\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableIcon = function(geometryType, icon) {\n\treturn this.featureStyleExtension.setTableIcon(this.tableName, geometryType, icon).then(function () {\n\t\tthis.clearCachedTableIcons();\n\t}.bind(this));\n};\n\n/**\n * Set the feature styles for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) {\n\treturn this.featureStyleExtension.setFeatureStylesForFeatureRow(featureRow, featureStyles);\n};\n\n/**\n * Set the feature styles for the feature table and feature id\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyles = function(featureId, featureStyles) {\n\treturn this.featureStyleExtension.setFeatureStyles(this.tableName, featureId, featureStyles);\n};\n\n/**\n * Set the feature style (style and icon) of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyleForFeatureRow(featureRow, featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature row for the\n * specified geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyleForFeatureRowAndGeometryType(featureRow, geometryType, featureStyle);\n};\n\n/**\n * Set the feature style default (style and icon) of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyleDefaultForFeatureRow(featureRow, featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyle = function(featureId, geometryType, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyle(this.tableName, featureId, geometryType, featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyleDefault = function(featureId, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyleDefault(this.tableName, featureId, featureStyle);\n};\n\n/**\n * Set the styles for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} styles styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStylesForFeatureRow = function(featureRow, styles) {\n\treturn this.featureStyleExtension.setStylesForFeatureRow(featureRow, styles);\n};\n\n/**\n * Set the styles for the feature table and feature id\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.Styles} styles styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyles = function(featureId, styles) {\n\treturn this.featureStyleExtension.setStyles(this.tableName, featureId, styles);\n};\n\n/**\n * Set the style of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyleForFeatureRow = function(featureRow, style) {\n\treturn this.featureStyleExtension.setStyleForFeatureRow(featureRow, style);\n};\n\n/**\n * Set the style of the feature row for the specified geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) {\n\treturn this.featureStyleExtension.setStyleForFeatureRowAndGeometryType(featureRow, geometryType, style);\n};\n\n/**\n * Set the default style of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) {\n\treturn this.featureStyleExtension.setStyleDefaultForFeatureRow(featureRow, style);\n};\n\n/**\n * Set the style of the feature\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyle = function(featureId, geometryType, style) {\n\treturn this.featureStyleExtension.setStyle(this.tableName, featureId, geometryType, style);\n};\n\n/**\n * Set the default style of the feature\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyleDefault = function(featureId, style) {\n\treturn this.featureStyleExtension.setStyleDefault(this.tableName, featureId, style);\n};\n\n/**\n * Set the icons for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.Icons} icons icons\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconsForFeatureRow = function(featureRow, icons) {\n\treturn this.featureStyleExtension.setIconsForFeatureRow(featureRow, icons);\n};\n\n/**\n * Set the icons for the feature table and feature id\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.Icons} icons icons\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIcons = function(featureId, icons) {\n\treturn this.featureStyleExtension.setIcons(this.tableName, featureId, icons);\n};\n\n/**\n * Set the icon of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconForFeatureRow = function(featureRow, icon) {\n\treturn this.featureStyleExtension.setIconForFeatureRow(featureRow, icon);\n};\n\n/**\n * Set the icon of the feature row for the specified geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) {\n\treturn this.featureStyleExtension.setIconForFeatureRowAndGeometryType(featureRow, geometryType, icon);\n};\n\n/**\n * Set the default icon of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) {\n\treturn this.featureStyleExtension.setIconDefaultForFeatureRow(featureRow, icon);\n};\n\n/**\n * Get the icon of the feature, searching in order: feature geometry type\n * icon, feature default icon, table geometry type icon, table default icon\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIcon = function(featureId, geometryType, icon) {\n\treturn this.featureStyleExtension.setIcon(this.tableName, featureId, geometryType, icon);\n};\n\n/**\n * Set the default icon of the feature\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconDefault = function(featureId, icon) {\n\treturn this.featureStyleExtension.setIconDefault(this.tableName, featureId, icon);\n};\n\n/**\n * Delete all feature styles including table styles, table icons, style, and\n * icons\n */\nFeatureTableStyles.prototype.deleteAllFeatureStyles = function() {\n\tthis.featureStyleExtension.deleteAllFeatureStyles(this.tableName);\n\tthis.clearCachedTableFeatureStyles();\n};\n\n/**\n * Delete all styles including table styles and feature row styles\n */\nFeatureTableStyles.prototype.deleteAllStyles = function() {\n\tthis.featureStyleExtension.deleteAllStyles(this.tableName);\n\tthis.clearCachedTableStyles();\n};\n\n/**\n * Delete all icons including table icons and feature row icons\n */\nFeatureTableStyles.prototype.deleteAllIcons = function() {\n\tthis.featureStyleExtension.deleteAllIcons(this.tableName);\n\tthis.clearCachedTableIcons();\n};\n\n/**\n * Delete the feature table feature styles\n */\nFeatureTableStyles.prototype.deleteTableFeatureStyles = function() {\n\tthis.featureStyleExtension.deleteTableFeatureStyles(this.tableName);\n\tthis.clearCachedTableFeatureStyles();\n};\n\n/**\n * Delete the feature table styles\n */\nFeatureTableStyles.prototype.deleteTableStyles = function() {\n\tthis.featureStyleExtension.deleteTableStyles(this.tableName);\n\tthis.clearCachedTableStyles();\n};\n\n/**\n * Delete the feature table default style\n */\nFeatureTableStyles.prototype.deleteTableStyleDefault = function() {\n\tthis.featureStyleExtension.deleteTableStyleDefault(this.tableName);\n\tthis.clearCachedTableStyles();\n};\n\n/**\n * Delete the feature table style for the geometry type\n *\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteTableStyle = function(geometryType) {\n\tthis.featureStyleExtension.deleteTableStyle(this.tableName, geometryType);\n\tthis.clearCachedTableStyles();\n};\n\n/**\n * Delete the feature table icons\n */\nFeatureTableStyles.prototype.deleteTableIcons = function() {\n\tthis.featureStyleExtension.deleteTableIcons(this.tableName);\n\tthis.clearCachedTableIcons();\n};\n\n/**\n * Delete the feature table default icon\n */\nFeatureTableStyles.prototype.deleteTableIconDefault = function() {\n\tthis.featureStyleExtension.deleteTableIconDefault(this.tableName);\n\tthis.clearCachedTableIcons();\n};\n\n/**\n * Delete the feature table icon for the geometry type\n *\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteTableIcon = function(geometryType) {\n\tthis.featureStyleExtension.deleteTableIcon(this.tableName, geometryType);\n\tthis.clearCachedTableIcons();\n};\n\n/**\n * Clear the cached table feature styles\n */\nFeatureTableStyles.prototype.clearCachedTableFeatureStyles = function() {\n\tthis.cachedTableFeatureStyles.setStyles(null);\n\tthis.cachedTableFeatureStyles.setIcons(null);\n};\n\n/**\n * Clear the cached table styles\n */\nFeatureTableStyles.prototype.clearCachedTableStyles = function() {\n\tthis.cachedTableFeatureStyles.setStyles(null);\n};\n\n/**\n * Clear the cached table icons\n */\nFeatureTableStyles.prototype.clearCachedTableIcons = function() {\n\tthis.cachedTableFeatureStyles.setIcons(null);\n};\n\n/**\n * Delete all feature styles\n */\nFeatureTableStyles.prototype.deleteFeatureStyles = function() {\n\tthis.featureStyleExtension.deleteFeatureStyles(this.tableName);\n};\n\n/**\n * Delete all styles\n */\nFeatureTableStyles.prototype.deleteStyles = function() {\n\tthis.featureStyleExtension.deleteStyles(this.tableName);\n};\n\n/**\n * Delete feature row styles\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteStylesForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteStylesForFeatureRow(featureRow);\n};\n\n/**\n * Delete feature row styles\n *\n * @param {Number} featureId feature id\n */\nFeatureTableStyles.prototype.deleteStylesForFeatureId = function(featureId) {\n\tthis.featureStyleExtension.deleteStylesForFeatureId(this.tableName, featureId);\n};\n\n/**\n * Delete the feature row default style\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteStyleDefaultForFeatureRow(featureRow);\n};\n\n/**\n * Delete the feature row default style\n *\n * @param {Number} featureId feature id\n */\nFeatureTableStyles.prototype.deleteStyleDefault = function(featureId) {\n\tthis.featureStyleExtension.deleteStyleDefault(this.tableName, featureId);\n};\n\n/**\n * Delete the feature row style for the feature row geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteStyleForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteStyleForFeatureRow(featureRow);\n};\n\n/**\n * Delete the feature row style for the geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\tthis.featureStyleExtension.deleteStyleForFeatureRowAndGeometryType(featureRow, geometryType);\n};\n\n/**\n * Delete the feature row style for the geometry type\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteStyle = function(featureId, geometryType) {\n\tthis.featureStyleExtension.deleteStyle(this.tableName, featureId, geometryType);\n};\n\n/**\n * Delete all icons\n */\nFeatureTableStyles.prototype.deleteIcons = function() {\n\tthis.featureStyleExtension.deleteIcons(this.tableName);\n};\n\n/**\n * Delete feature row icons\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteIconsForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteIconsForFeatureRow(featureRow);\n};\n\n/**\n * Delete feature row icons\n *\n * @param {Number} featureId feature id\n */\nFeatureTableStyles.prototype.deleteIconsForFeatureId = function(featureId) {\n\tthis.featureStyleExtension.deleteIconsForFeatureId(this.tableName, featureId);\n};\n\n/**\n * Delete the feature row default icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteIconDefaultForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteIconDefaultForFeatureRow(featureRow);\n};\n\n/**\n * Delete the feature row default icon\n *\n * @param {Number} featureId feature id\n */\nFeatureTableStyles.prototype.deleteIconDefault = function(featureId) {\n\tthis.featureStyleExtension.deleteIconDefault(this.tableName, featureId);\n};\n\n/**\n * Delete the feature row icon for the feature row geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteIconForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteIconForFeatureRow(featureRow);\n};\n\n/**\n * Delete the feature row icon for the geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\tthis.featureStyleExtension.deleteIconForFeatureRowAndGeometryType(featureRow, geometryType);\n};\n\n/**\n * Delete the feature row icon for the geometry type\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteIcon = function(featureId, geometryType) {\n\tthis.featureStyleExtension.deleteIcon(this.tableName, featureId, geometryType);\n};\n\n/**\n * Get all the unique style row ids the table maps to\n *\n * @return {module:extension/style.StyleRow} style row ids\n */\nFeatureTableStyles.prototype.getAllTableStyleIds = function() {\n\treturn this.featureStyleExtension.getAllTableStyleIds(this.tableName);\n};\n\n/**\n * Get all the unique icon row ids the table maps to\n *\n * @return {module:extension/style.IconRow} icon row ids\n */\nFeatureTableStyles.prototype.getAllTableIconIds = function() {\n\treturn this.featureStyleExtension.getAllTableIconIds(this.tableName);\n};\n\n/**\n * Get all the unique style row ids the features map to\n *\n * @return {module:extension/style.StyleRow} style row ids\n */\nFeatureTableStyles.prototype.getAllStyleIds = function() {\n\treturn this.featureStyleExtension.getAllStyleIds(this.tableName);\n};\n\n/**\n * Get all the unique icon row ids the features map to\n *\n * @return {module:extension/style.IconRow} icon row ids\n */\nFeatureTableStyles.prototype.getAllIconIds = function() {\n\treturn this.featureStyleExtension.getAllIconIds(this.tableName);\n};\n\nmodule.exports = FeatureTableStyles;\n\n},{\"./featureStyle\":46,\"./featureStyles\":47,\"./icons\":53,\"./styles\":62}],49:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class IconCache\n */\n\n/**\n * Constructor, created with cache size of {@link #IconCache.DEFAULT_CACHE_SIZE}\n * @constructor\n */\nvar IconCache = function(size = null) {\n  this.cacheSize = size !== null ? size : IconCache.DEFAULT_CACHE_SIZE;\n  this.iconCache = {};\n  this.accessHistory = [];\n};\n\n/**\n * Get the cached image for the icon row or null if not cached\n * @param {module:extension/style.IconRow} iconRow icon row\n * @return {Image} icon image or null\n */\nIconCache.prototype.getIconForIconRow = function(iconRow) {\n  return this.get(iconRow.getId());\n};\n\n/**\n * Get the cached image for the icon row id or null if not cached\n * @param {Number} iconRowId icon row id\n * @return {Image} icon image or null\n */\nIconCache.prototype.get = function(iconRowId) {\n  var image = this.iconCache[iconRowId];\n  if (!!image) {\n    var index = this.accessHistory.indexOf(iconRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }\n    this.accessHistory.push(iconRowId);\n  }\n  return image;\n};\n\n/**\n * Cache the icon image for the icon row\n * @param {module:extension/style.IconRow} iconRow icon row\n * @param {Image} image icon image\n * @return {Image} previous cached icon image or null\n */\nIconCache.prototype.putIconForIconRow = function(iconRow, image) {\n  return this.put(iconRow.getId(), image);\n};\n\n/**\n * Cache the icon image for the icon row id\n * @param {Number} iconRowId icon row id\n * @param {Image} image icon image\n * @return {Image} previous cached icon image or null\n */\nIconCache.prototype.put = function(iconRowId, image) {\n  var previous = this.iconCache[iconRowId];\n  this.iconCache[iconRowId] = image;\n  if (!!previous) {\n    var index = this.accessHistory.indexOf(iconRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }\n  }\n  this.accessHistory.push(iconRowId);\n  if (Object.keys(this.iconCache).length > this.cacheSize) {\n    var iconId = this.accessHistory.shift();\n    if (iconId) {\n      delete this.iconCache[iconId];\n    }\n  }\n  return previous;\n};\n\n/**\n * Remove the cached image for the icon row\n * @param {module:extension/style.IconRow} iconRow icon row\n * @return {Image} removed icon image or null\n */\nIconCache.prototype.removeIconForIconRow = function(iconRow) {\n  return this.remove(iconRow.getId());\n};\n\n/**\n * Remove the cached image for the icon row id\n * @param {Number} iconRowId icon row id\n * @return {Image} removed icon image or null\n */\nIconCache.prototype.remove = function(iconRowId) {\n  var removed = this.iconCache[iconRowId];\n  delete this.iconCache[iconRowId];\n  if (!!removed) {\n    var index = this.accessHistory.indexOf(iconRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }  }\n  return removed;\n};\n\n/**\n * Clear the cache\n */\nIconCache.prototype.clear = function() {\n  this.iconCache = {};\n  this.accessHistory = [];\n};\n\n/**\n * Resize the cache\n * @param {Number} maxSize max size\n */\nIconCache.prototype.resize = function(maxSize) {\n  this.cacheSize = maxSize;\n  var keys = Object.keys(this.iconCache);\n  if (keys.length > maxSize) {\n    var numberToRemove = keys.length - maxSize;\n    for (var i = 0; i < numberToRemove; i++) {\n      delete this.iconCache[this.accessHistory.shift()];\n    }\n  }\n};\n\n/**\n * Create or retrieve from cache an icon image for the icon row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createIcon = function(icon) {\n  return this.createAndCacheIcon(icon, this);\n};\n\n/**\n * Create or retrieve from cache an icon image for the icon row\n * @param {module:extension/style.IconRow} icon icon row\n * @param {Number} scale scale factor\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createScaledIcon = function(icon, scale) {\n  return this.createAndCacheScaledIcon(icon, scale, this);\n};\n\n/**\n * Create an icon image for the icon row without caching\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createIconNoCache = function(icon) {\n  return this.createScaledIconNoCache(icon, 1.0);\n};\n\n/**\n * Create an icon image for the icon row without caching\n * @param icon icon row\n * @param scale scale factor\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createScaledIconNoCache = function(icon, scale) {\n  return this.createAndCacheScaledIcon(icon, scale, null);\n};\n\n/**\n * Create or retrieve from cache an icon image for the icon row\n * @param {module:extension/style.IconRow} icon icon row\n * @param {module:extension/style.IconCache} iconCache icon cache\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createAndCacheIcon = function(icon, iconCache) {\n  return this.createAndCacheScaledIcon(icon, 1.0, iconCache);\n};\n\n/**\n * Create or retrieve from cache an icon image for the icon row\n * @param {module:extension/style.IconRow} icon icon row\n * @param {Number} scale scale factor\n * @param {module:extension/style.IconCache} iconCache icon cache\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createAndCacheScaledIcon = async function(icon, scale, iconCache) {\n  var iconImage = null;\n  if (icon != null) {\n    var iconId = icon.getId();\n    if (iconCache !== null) {\n      iconImage = iconCache.get(iconId);\n    }\n    var iconScaledWidth = Math.round(icon.getWidth() * scale);\n    var iconScaledHeight = Math.round(icon.getHeight() * scale);\n    if (!iconImage || iconImage.width !== iconScaledWidth || iconImage.height !== iconScaledHeight) {\n      iconImage = await icon.getScaledDataImage(scale);\n    }\n    if (iconCache !== null) {\n      iconCache.putIconForIconRow(icon, iconImage);\n    }\n  }\n  return iconImage;\n};\n\nIconCache.DEFAULT_CACHE_SIZE = 100;\n\nmodule.exports = IconCache;\n\n},{}],50:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class IconDao\n */\n\nvar IconRow = require('./iconRow')\n  , MediaDao = require('../relatedTables/mediaDao');\n\nvar util = require('util');\n\n/**\n * Icon DAO for reading user icon data tables\n * @extends {module:user/userDao~MediaDao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection\n * @param  {string} table table name\n * @constructor\n */\nvar IconDao = function(geoPackage, table) {\n  MediaDao.call(this, geoPackage, table);\n  this.table = table;\n};\n\nutil.inherits(IconDao, MediaDao);\n\n/**\n * Create a new icon row\n * @return {module:extension/style.IconRow}\n */\nIconDao.prototype.newRow = function() {\n  return new IconRow(this.table);\n};\n\n/**\n * Create a icon row with the column types and values\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/style.IconRow}             icon row\n */\nIconDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new IconRow(this.table, columnTypes, values);\n};\n\nmodule.exports = IconDao;\n\n},{\"../relatedTables/mediaDao\":33,\"./iconRow\":51,\"util\":343}],51:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class IconRow\n */\n\nvar MediaRow = require('../relatedTables/mediaRow');\nvar util = require('util');\nvar ImageUtils = require('../../tiles/imageUtils');\n\n/**\n * Icon Row\n * @extends {module:extension/relatedTables~MediaRow}\n * @param  {module:extension/style.IconTable} iconTable  icon table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @constructor\n */\nvar IconRow = function(iconTable, columnTypes, values) {\n  MediaRow.call(this, iconTable, columnTypes, values);\n  this.iconTable = iconTable;\n};\n\nutil.inherits(IconRow, MediaRow);\n\n/**\n * Get the name column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getNameColumn = function() {\n  return this.iconTable.getNameColumn();\n};\n\n/**\n * Gets the name\n * @return {String}\n */\nIconRow.prototype.getName = function() {\n  return this.getValueWithColumnName(this.getNameColumn().name);\n};\n\n/**\n * Sets the name for the row\n * @param {String} name name\n */\nIconRow.prototype.setName = function(name) {\n  this.setValueWithColumnName(this.getNameColumn().name, name);\n};\n\n/**\n * Get the description column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getDescriptionColumn = function() {\n  return this.iconTable.getDescriptionColumn();\n};\n\n/**\n * Gets the description\n * @return {String}\n */\nIconRow.prototype.getDescription = function() {\n  return this.getValueWithColumnName(this.getDescriptionColumn().name);\n};\n\n/**\n * Sets the description for the row\n * @param {string} description description\n */\nIconRow.prototype.setDescription = function(description) {\n  this.setValueWithColumnName(this.getDescriptionColumn().name, description);\n};\n\n/**\n * Get the width column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getWidthColumn = function() {\n  return this.iconTable.getWidthColumn();\n};\n\n/**\n * Gets the width\n * @return {Number}\n */\nIconRow.prototype.getWidth = function() {\n  return this.getValueWithColumnName(this.getWidthColumn().name);\n};\n\n/**\n * Sets the width for the row\n * @param {Number} width width\n */\nIconRow.prototype.setWidth = function(width) {\n  this.setValueWithColumnName(this.getWidthColumn().name, width);\n};\n\n/**\n * Get the width or derived width from the icon data and scaled as needed\n * for the height\n *\n * @return {Promise<Number>}  derived width\n */\nIconRow.prototype.getDerivedWidth = function() {\n  var width = this.getWidth();\n  if (width === undefined || width === null) {\n    width = this.getDerivedDimensions()[0];\n  }\n  return width;\n};\n\n/**\n * Get the height column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getHeightColumn = function() {\n  return this.iconTable.getHeightColumn();\n};\n\n/**\n * Gets the height\n * @return {Number}\n */\nIconRow.prototype.getHeight = function() {\n  return this.getValueWithColumnName(this.getHeightColumn().name);\n};\n\n/**\n * Sets the height for the row\n * @param {Number} height height\n */\nIconRow.prototype.setHeight = function(height) {\n  this.setValueWithColumnName(this.getHeightColumn().name, height);\n};\n\n/**\n * Get the height or derived height from the icon data and scaled as needed\n * for the width\n *\n * @return {Promise<Number>} derived height\n */\nIconRow.prototype.getDerivedHeight = function() {\n  var height = this.getHeight();\n  if (height === undefined || height === null) {\n    height = this.getDerivedDimensions()[1];\n  }\n  return height;\n};\n\n/**\n * Get the derived width and height from the values and icon data, scaled as needed\n * @return {Number[]} derived dimensions array with two values, width at index 0, height at index 1\n */\nIconRow.prototype.getDerivedDimensions = function() {\n  var width = this.getWidth();\n  var height = this.getHeight();\n  if (width === undefined || width === null || height === undefined || height === null) {\n    var dataWidth;\n    var dataHeight;\n    var imageSize = ImageUtils.getImageSize(this.getData());\n    dataWidth = imageSize.width;\n    dataHeight = imageSize.height;\n    if (width === undefined || width === null) {\n      width = dataWidth;\n      if (height !== undefined && height !== null) {\n        width *= (height / dataHeight);\n      }\n    }\n    if (height === undefined || height === null) {\n      height = dataHeight;\n      if (width !== undefined && width !== null) {\n        height *= (width / dataWidth);\n      }\n    }\n  }\n  return [width, height];\n};\n\n/**\n * Get the anchor_u column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getAnchorUColumn = function() {\n  return this.iconTable.getAnchorUColumn();\n};\n\n/**\n * Gets the anchor_u\n * @return {Number}\n */\nIconRow.prototype.getAnchorU = function() {\n  return this.getValueWithColumnName(this.getAnchorUColumn().name);\n};\n\n/**\n * Sets the anchor_u for the row\n * @param {Number} anchor_u anchor_u\n */\nIconRow.prototype.setAnchorU = function(anchor_u) {\n  this.validateAnchor(anchor_u);\n  this.setValueWithColumnName(this.getAnchorUColumn().name, anchor_u);\n};\n\n/**\n * Get the anchor u value or the default value of 0.5\n * @return {Number} anchor u value\n */\nIconRow.prototype.getAnchorUOrDefault = function() {\n  var anchorU = this.getAnchorU();\n  if (anchorU == null) {\n    anchorU = 0.5;\n  }\n  return anchorU;\n};\n\n/**\n * Get the anchor_v column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getAnchorVColumn = function() {\n  return this.iconTable.getAnchorVColumn();\n};\n\n/**\n * Gets the anchor_v\n * @return {Number}\n */\nIconRow.prototype.getAnchorV = function() {\n  return this.getValueWithColumnName(this.getAnchorVColumn().name);\n};\n\n/**\n * Sets the anchor_v for the row\n * @param {Number} anchor_v anchor_v\n */\nIconRow.prototype.setAnchorV = function(anchor_v) {\n  this.validateAnchor(anchor_v);\n  this.setValueWithColumnName(this.getAnchorVColumn().name, anchor_v);\n};\n\n/**\n * Get the anchor v value or the default value of 1.0\n * @return {Number} anchor v value\n */\nIconRow.prototype.getAnchorVOrDefault = function() {\n  var anchorV = this.getAnchorV();\n  if (anchorV == null) {\n    anchorV = 1.0;\n  }\n  return anchorV;\n};\n\n/**\n * Validate the anchor value\n * @param {Number} anchor anchor\n */\nIconRow.prototype.validateAnchor = function(anchor) {\n  if (anchor != null && (anchor < 0.0 || anchor > 1.0)) {\n    throw new Error(\"Anchor must be set inclusively between 0.0 and 1.0, invalid value: \" + anchor);\n  }\n};\n\nmodule.exports = IconRow;\n\n},{\"../../tiles/imageUtils\":89,\"../relatedTables/mediaRow\":34,\"util\":343}],52:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class IconTable\n */\n\nvar MediaTable = require('../relatedTables/mediaTable')\n  , UserCustomColumn = require('../../user/custom/userCustomColumn')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Icon Requirements Class Media Table\n * @class\n * @extends {module:extension/relatedTables~MediaTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   media columns\n * @param {string[]} requiredColumns required column names\n */\nvar IconTable = function(tableName, columns, requiredColumns) {\n  MediaTable.call(this, tableName, columns, requiredColumns);\n};\n\nutil.inherits(IconTable, MediaTable);\n\n/**\n * Create a media table with a minimum required columns followed by the additional columns\n * @return {module:extension/relatedTables~MediaTable}\n */\nIconTable.create = function() {\n  return new IconTable(IconTable.TABLE_NAME, IconTable.createColumns(), IconTable.requiredColumns());\n};\n\nIconTable.createRequiredColumns = function() {\n  return MediaTable.createRequiredColumns();\n};\n\n/**\n * Get the required columns\n * @return {string[]}\n */\nIconTable.requiredColumns = function() {\n  return MediaTable.requiredColumns();\n};\n\n/**\n * Create the columns\n * @return {module:user/userColumn~UserColumn[]}\n */\nIconTable.createColumns = function() {\n  var columns = IconTable.createRequiredColumns();\n  var index = columns.length;\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_HEIGHT, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_ANCHOR_U, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index, IconTable.COLUMN_ANCHOR_V, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  return columns;\n};\n\n/**\n * Get the name column index\n * @return int\n */\nIconTable.prototype.getNameColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_NAME);\n};\n\n/**\n * Get the name column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getNameColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_NAME);\n};\n\n/**\n * Get the description column index\n * @return int\n */\nIconTable.prototype.getDescriptionColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_DESCRIPTION);\n};\n\n/**\n * Get the description column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getDescriptionColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_DESCRIPTION);\n};\n\n/**\n * Get the width column index\n * @return int\n */\nIconTable.prototype.getWidthColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_WIDTH);\n};\n\n/**\n * Get the width column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getWidthColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_WIDTH);\n};\n\n/**\n * Get the height column index\n * @return int\n */\nIconTable.prototype.getHeightColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_HEIGHT);\n};\n\n/**\n * Get the height column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getHeightColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_HEIGHT);\n};\n\n/**\n * Get the anchor_u column index\n * @return int\n */\nIconTable.prototype.getAnchorUColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_ANCHOR_U);\n};\n\n/**\n * Get the anchor_u column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getAnchorUColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_U);\n};\n\n/**\n * Get the anchor_v column index\n * @return int\n */\nIconTable.prototype.getAnchorVColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_ANCHOR_V);\n};\n\n/**\n * Get the anchor_v column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getAnchorVColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_V);\n};\n\nIconTable.TABLE_NAME = 'nga_icon';\nIconTable.COLUMN_NAME = 'name';\nIconTable.COLUMN_DESCRIPTION = 'description';\nIconTable.COLUMN_WIDTH = 'width';\nIconTable.COLUMN_HEIGHT = 'height';\nIconTable.COLUMN_ANCHOR_U = 'anchor_u';\nIconTable.COLUMN_ANCHOR_V = 'anchor_v';\nIconTable.prototype.TABLE_TYPE = 'media';\n\nmodule.exports = IconTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/custom/userCustomColumn\":101,\"../relatedTables/mediaTable\":35,\"util\":343}],53:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class Icons\n */\n\n/**\n * Icons constructor\n * @constructor\n */\nvar Icons = function() {\n  this.defaultIcon = null;\n  this.icons = {};\n};\n\nIcons.prototype.setDefault = function(iconRow) {\n  this.defaultIcon = iconRow;\n};\n\nIcons.prototype.getDefault = function() {\n  return this.defaultIcon;\n};\n\nIcons.prototype.setIcon = function(iconRow, geometryType) {\n  if (geometryType != null) {\n    if (iconRow != null) {\n      this.icons[geometryType] = iconRow;\n    } else {\n      delete this.icons[geometryType];\n    }\n  } else {\n    this.setDefault(iconRow);\n  }\n};\n\nIcons.prototype.getIcon = function(geometryType) {\n  var iconRow = null;\n  if (geometryType != null) {\n    iconRow = this.icons[geometryType];\n  }\n  if (iconRow === null || geometryType === null) {\n    iconRow = this.getDefault();\n  }\n  return iconRow;\n};\n\nIcons.prototype.isEmpty = function() {\n  return Object.keys(this.icons).length === 0 && this.defaultIcon === null;\n};\n\nmodule.exports = Icons;\n\n},{}],54:[function(require,module,exports){\n/**\n * @module extension/style\n */\n\nvar BaseExtension = require('../baseExtension')\n\t, Extension = require('../.').Extension\n\t, ContentsIdDao = require('../contents/contentsIdDao')\n\t, IconTable = require('./iconTable')\n\t, IconDao = require('./iconDao')\n\t, StyleTable = require('./styleTable')\n\t, StyleDao = require('./styleDao')\n\t, StyleMappingTable = require('./styleMappingTable')\n\t, StyleMappingDao = require('./styleMappingDao')\n\t, UserMappingTable = require('../relatedTables/userMappingTable')\n\t, FeatureStyles = require('./featureStyles')\n\t, FeatureStyle = require('./featureStyle')\n\t, Styles = require('./styles')\n\t, Icons = require('./icons')\n\t, StyleTableReader = require('./styleTableReader')\n\t, UserTableReader = require('../../user/userTableReader');\n\nvar util = require('util');\n\n/**\n * Style extension\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @extends {module:extension/baseExtension~BaseExtension}\n * @constructor\n */\nvar FeatureStyleExtension = function(geoPackage) {\n\tBaseExtension.call(this, geoPackage);\n\tthis.relatedTablesExtension = geoPackage.getRelatedTablesExtension();\n\tthis.contentsIdExtension = geoPackage.getContentsIdExtension();\n};\n\nutil.inherits(FeatureStyleExtension, BaseExtension);\n\n/**\n * Get or create the metadata extension\n *  @param {module:features/user/featureTable|String} featureTable, defaults to null\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.getOrCreateExtension = function(featureTable) {\n\treturn this.getOrCreate(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null, FeatureStyleExtension.EXTENSION_DEFINITION, Extension.READ_WRITE);\n};\n\n/**\n * Determine if the GeoPackage has the extension or has the extension for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {Boolean}\n */\nFeatureStyleExtension.prototype.has = function (featureTable) {\n\treturn this.hasExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null);\n};\n\n/**\n * Gets featureTables\n * @returns {String[]}\n */\nFeatureStyleExtension.prototype.getTables = function() {\n\tvar tables = [];\n\tif (this.extensionsDao.isTableExists()) {\n\t\tvar extensions = this.extensionsDao.queryAllByExtension(FeatureStyleExtension.EXTENSION_NAME);\n\t\tfor (var i = 0; i < extensions.length; i++) {\n\t\t\ttables.push(extensions[i].table_name);\n\t\t}\n\t}\n\treturn tables;\n};\n\n/**\n * Get the related tables extension\n * @returns {module:extension/relatedTables~RelatedTablesExtension}\n */\nFeatureStyleExtension.prototype.getRelatedTables = function () {\n\treturn this.relatedTablesExtension;\n};\n\n/**\n * Get the contentsId extension\n * @returns {module:extension/contents~ContentsIdExtension}\n */\nFeatureStyleExtension.prototype.getContentsId = function () {\n\treturn this.contentsIdExtension;\n};\n\n/**\n * Create style, icon, table style, and table icon relationships for the\n * feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createRelationships = function(featureTable) {\n\tvar promises = [];\n\tpromises.push(this.createStyleRelationship(featureTable));\n\tpromises.push(this.createTableStyleRelationship(featureTable));\n\tpromises.push(this.createIconRelationship(featureTable));\n\tpromises.push(this.createTableIconRelationship(featureTable));\n\treturn Promise.all(promises);\n};\n\n/**\n * Check if feature table has a style, icon, table style, or table icon\n * relationships\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {boolean}\n */\nFeatureStyleExtension.prototype.hasRelationship = function(featureTable) {\n\treturn this.hasStyleRelationship(featureTable)\n\t\t|| this.hasTableStyleRelationship(featureTable)\n\t\t|| this.hasIconRelationship(featureTable)\n\t\t|| this.hasTableIconRelationship(featureTable);\n};\n\n/**\n * Create a style relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createStyleRelationship = function(featureTable) {\n\treturn this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME);\n};\n\n/**\n * Determine if a style relationship exists for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {boolean}\n */\nFeatureStyleExtension.prototype.hasStyleRelationship = function(featureTable) {\n\treturn this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME);\n};\n\n/**\n * Create a feature table style relationship\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createTableStyleRelationship = function(featureTable) {\n\treturn this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME);\n};\n\n/**\n * Determine if a feature table style relationship exists\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {boolean} true if relationship exists\n */\nFeatureStyleExtension.prototype.hasTableStyleRelationship = function(featureTable) {\n\treturn this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME);\n};\n\n/**\n * Create an icon relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createIconRelationship = function(featureTable) {\n\treturn this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME);\n};\n\n/**\n * Determine if an icon relationship exists for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {boolean} true if relationship exists\n */\nFeatureStyleExtension.prototype.hasIconRelationship = function(featureTable) {\n\treturn this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME);\n};\n\n/**\n * Create a feature table icon relationship\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createTableIconRelationship = function(featureTable) {\n\treturn this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME);\n};\n\n/**\n * Determine if a feature table icon relationship exists\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {Boolean} true if relationship exists\n */\nFeatureStyleExtension.prototype.hasTableIconRelationship = function(featureTable) {\n\treturn this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME);\n};\n\n/**\n * Get the mapping table name\n * @param tablePrefix table name prefix\n * @param {module:features/user/featureTable|String} featureTable feature table name\n * @returns {String} mapping table name\n */\nFeatureStyleExtension.prototype.getMappingTableName = function(tablePrefix, featureTable) {\n\treturn tablePrefix + this.getFeatureTableName(featureTable);\n};\n\n/**\n * Check if the style extension relationship between a feature table and\n * style extension table exists\n * @param {String} mappingTableName mapping table name\n * @param {String} baseTable base table name\n * @param {String} relatedTable related table name\n * @returns {boolean} true if relationship exists\n */\nFeatureStyleExtension.prototype._hasStyleRelationship = function(mappingTableName, baseTable, relatedTable) {\n\treturn this.relatedTablesExtension.hasRelations(baseTable, relatedTable, mappingTableName).length !== 0;\n};\n\n/**\n * Create a style extension relationship between a feature table and style\n * extension table\n * @param {String} mappingTableName mapping table name\n * @param {String} featureTable feature table\n * @param {String} baseTable base table name\n * @param {String} relatedTable related table name\n * @return {Promise}\n * @private\n */\nFeatureStyleExtension.prototype._createStyleRelationship = function(mappingTableName, featureTable, baseTable, relatedTable) {\n\tif (!this._hasStyleRelationship(mappingTableName, baseTable, relatedTable)) {\n\t\t// Create the extension\n\t\treturn this.getOrCreateExtension(featureTable).then(function () {\n\t\t\tif (baseTable === ContentsIdDao.TABLE_NAME && !this.contentsIdExtension.has()) {\n\t\t\t\treturn this.contentsIdExtension.getOrCreateExtension().then(function () {\n\t\t\t\t\treturn this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable);\n\t\t\t\t}.bind(this));\n\t\t\t} else {\n\t\t\t\treturn this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable);\n\t\t\t}\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Private function to aid in creation of the a style extension relationship between a feature table and style extension table\n * @param {String} mappingTableName\n * @param {String} baseTable\n * @param {String} relatedTable\n * @return {Promise}\n * @private\n */\nFeatureStyleExtension.prototype._handleCreateStyleRelationship = function(mappingTableName, baseTable, relatedTable) {\n\tif (relatedTable === StyleTable.TABLE_NAME) {\n\t\treturn this.relatedTablesExtension.addAttributesRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder()\n\t\t\t.setBaseTableName(baseTable)\n\t\t\t.setUserMappingTable(StyleMappingTable.create(mappingTableName))\n\t\t\t.setRelatedTable(StyleTable.create()));\n\t} else {\n\t\treturn this.relatedTablesExtension.addMediaRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder()\n\t\t\t.setBaseTableName(baseTable)\n\t\t\t.setUserMappingTable(StyleMappingTable.create(mappingTableName))\n\t\t\t.setRelatedTable(IconTable.create()));\n\t}\n};\n\n/**\n * Delete the style and icon table and row relationships for all feature\n * tables\n */\nFeatureStyleExtension.prototype.deleteAllRelationships = function() {\n\tvar tables = this.getTables();\n\tfor (var i = 0; i < tables.length; i++) {\n\t\tthis.deleteRelationships(tables[i]);\n\t}\n};\n\n/**\n * Delete the style and icon table and row relationships for the feature\n * table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteRelationships = function(featureTable) {\n\tthis.deleteStyleRelationship(featureTable);\n\tthis.deleteTableStyleRelationship(featureTable);\n\tthis.deleteIconRelationship(featureTable);\n\tthis.deleteTableIconRelationship(featureTable);\n};\n\n/**\n * Delete a style relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteStyleRelationship = function(featureTable) {\n\tthis._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), featureTable);\n};\n\n/**\n * Delete a table style relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableStyleRelationship = function(featureTable) {\n\tthis._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), featureTable);\n};\n\n/**\n * Delete a icon relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteIconRelationship = function(featureTable) {\n\tthis._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), featureTable);\n};\n\n/**\n * Delete a table icon relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableIconRelationship = function(featureTable) {\n\tthis._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), featureTable);\n};\n\n/**\n * Delete a style extension feature table relationship and the mapping table\n * @param {String} mappingTableName\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @private\n */\nFeatureStyleExtension.prototype._deleteStyleRelationship = function(mappingTableName, featureTable) {\n\tvar relationships = this.geoPackage.getExtendedRelationDao().queryByMappingTableName(mappingTableName);\n\tfor (var i = 0; i < relationships.length; i++) {\n\t\tthis.relatedTablesExtension.removeRelationship(relationships[i]);\n\t}\n\tif (!this.hasRelationship(featureTable)) {\n\t\tif (this.extensionsDao.isTableExists()) {\n\t\t\tthis.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable));\n\t\t}\n\t}\n};\n\n/**\n * Get a Style Mapping DAO\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} style mapping DAO\n */\nFeatureStyleExtension.prototype.getStyleMappingDao = function (featureTable) {\n\treturn this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable);\n};\n\n/**\n * Get a Table Style Mapping DAO\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} table style mapping DAO\n */\nFeatureStyleExtension.prototype.getTableStyleMappingDao = function (featureTable) {\n\treturn this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable);\n};\n\n/**\n * Get a Icon Mapping DAO\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} icon mapping DAO\n */\nFeatureStyleExtension.prototype.getIconMappingDao = function (featureTable) {\n\treturn this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable);\n};\n\n/**\n * Get a Table Icon Mapping DAO\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} table icon mapping DAO\n */\nFeatureStyleExtension.prototype.getTableIconMappingDao = function (featureTable) {\n\treturn this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable);\n};\n\n/**\n * Get a Style Mapping DAO from a table name\n * @param {String} tablePrefix table name prefix\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} style mapping dao\n * @private\n */\nFeatureStyleExtension.prototype._getMappingDao = function (tablePrefix, featureTable) {\n\tvar featureTableName = this.getFeatureTableName(featureTable);\n\tvar tableName = tablePrefix + featureTableName;\n\tvar dao = null;\n\tif (this.geoPackage.isTable(tableName)) {\n\t\tdao = new StyleMappingDao(this.relatedTablesExtension.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage);\n\t}\n\treturn dao;\n};\n\n/**\n * Get a style DAO\n * @return {module:extension/style.StyleDao} style DAO\n */\nFeatureStyleExtension.prototype.getStyleDao = function () {\n\tvar styleDao = null;\n\tif (this.geoPackage.isTable(StyleTable.TABLE_NAME)) {\n\t\tvar dao = this.geoPackage.getContentsDao();\n\t\tvar contents = dao.queryForId(StyleTable.TABLE_NAME);\n\t\tif (contents) {\n\t\t\tvar reader = new StyleTableReader(contents.table_name);\n\t\t\tvar table = reader.readTable(this.geoPackage.connection);\n\t\t\tthis.relatedTablesExtension.setContents(table);\n\t\t\tstyleDao = new StyleDao(this.geoPackage, table);\n\t\t}\n\t}\n\treturn styleDao;\n};\n\n/**\n * Get a icon DAO\n * @return {module:extension/style.IconDao}\n */\nFeatureStyleExtension.prototype.getIconDao = function() {\n\tvar iconDao = null;\n\tif (this.geoPackage.isTable(IconTable.TABLE_NAME)) {\n\t\tvar reader = new UserTableReader(IconTable.TABLE_NAME, IconTable.requiredColumns());\n\t\tvar userTable = reader.readTable(this.geoPackage.getDatabase());\n\t\tvar table = new IconTable(userTable.table_name, userTable.columns, IconTable.requiredColumns());\n\t\ttable.setContents(this.geoPackage.getContentsDao().queryForId(IconTable.TABLE_NAME));\n\t\ticonDao = new IconDao(this.geoPackage, table);\n\t}\n\treturn iconDao;\n};\n\n/**\n * Get the feature table default feature styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.FeatureStyles} table feature styles or null\n */\nFeatureStyleExtension.prototype.getTableFeatureStyles = function(featureTable) {\n\tvar featureStyles = null;\n\tvar id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\tif (id !== null) {\n\t\tvar styles = this.getTableStyles(featureTable);\n\t\tvar icons = this.getTableIcons(featureTable);\n\t\tif (styles !== null || icons !== null) {\n\t\t\tfeatureStyles = new FeatureStyles(styles, icons);\n\t\t}\n\t}\n\treturn featureStyles;\n};\n\n/**\n * Get the default style of the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureStyleExtension.prototype.getTableStyleDefault = function(featureTable) {\n\treturn this.getTableStyle(featureTable, null);\n};\n\n/**\n * Get the style of the feature table and geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureStyleExtension.prototype.getTableStyle = function(featureTable, geometryType) {\n\tvar style = null;\n\tvar styles = this.getTableStyles(featureTable);\n\tif (styles !== null) {\n\t\tif (geometryType === null) {\n\t\t\tstyle = styles.getDefault();\n\t\t} else {\n\t\t\tstyle = styles.getStyle(geometryType);\n\t\t}\n\t}\n\treturn style;\n};\n\n/**\n * Get the feature table default styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.Styles} table styles or null\n */\nFeatureStyleExtension.prototype.getTableStyles = function(featureTable) {\n\tvar styles = null;\n\tvar id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\tif (id !== null) {\n\t\tstyles = this.getStyles(id, this.getTableStyleMappingDao(featureTable));\n\t}\n\treturn styles;\n};\n\n/**\n * Get the default icon of the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureStyleExtension.prototype.getTableIconDefault = function(featureTable) {\n\treturn this.getTableIcon(featureTable, null);\n};\n\n/**\n * Get the icon of the feature table and geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureStyleExtension.prototype.getTableIcon = function(featureTable, geometryType) {\n\tvar icon = null;\n\tvar icons = this.getTableIcons(featureTable);\n\tif (icons !== null) {\n\t\tif (geometryType === null) {\n\t\t\ticon = icons.getDefault();\n\t\t} else {\n\t\t\ticon = icons.getIcon(geometryType);\n\t\t}\n\t}\n\treturn icon;\n};\n\n/**\n * Get the feature table default icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.Icons} table icons or null\n */\nFeatureStyleExtension.prototype.getTableIcons = function(featureTable) {\n\tvar icons = null;\n\tvar id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\tif (id !== null) {\n\t\ticons = this.getIcons(id, this.getTableIconMappingDao(featureTable));\n\t}\n\treturn icons;\n};\n\n/**\n * Gets Icons for featureId and mappingDao\n * @param {Number} featureId\n * @param mappingDao\n * @returns {module:extension/style.Icons}\n * @private\n */\nFeatureStyleExtension.prototype.getIcons = function(featureId, mappingDao) {\n\tvar icons = new Icons();\n\tif (mappingDao !== null) {\n\t\tvar iconDao = this.getIconDao();\n\t\tvar styleMappingRows = mappingDao.queryByBaseId(featureId);\n\t\tfor (var i = 0; i < styleMappingRows.length; i++) {\n\t\t\tvar styleMappingRow = mappingDao.createObject(styleMappingRows[i]);\n\t\t\tvar iconRow = iconDao.queryForId(styleMappingRow.getRelatedId());\n\t\t\tif (styleMappingRow.getGeometryTypeName() === null) {\n\t\t\t\ticons.setDefault(iconRow);\n\t\t\t} else {\n\t\t\t\ticons.setIcon(iconRow, styleMappingRow.getGeometryTypeName());\n\t\t\t}\n\t\t}\n\t}\n\tif (icons.isEmpty()) {\n\t\ticons = null;\n\t}\n\treturn icons;\n};\n\n/**\n * Gets Styles for featureId and mappingDao\n * @param {Number} featureId\n * @param {module:extension/style.StyleMappingDao} mappingDao\n * @returns {module:extension/style.Styles}\n */\nFeatureStyleExtension.prototype.getStyles = function(featureId, mappingDao) {\n\tvar styles = new Styles();\n\tif (mappingDao !== null) {\n\t\tvar styleDao = this.getStyleDao();\n\t\tvar styleMappingRows = mappingDao.queryByBaseId(featureId);\n\t\tfor (var i = 0; i < styleMappingRows.length; i++) {\n\t\t\tvar styleMappingRow = mappingDao.createObject(styleMappingRows[i]);\n\t\t\tvar styleRow = styleDao.queryForId(styleMappingRow.getRelatedId());\n\t\t\tif (styleMappingRow.getGeometryTypeName() === null) {\n\t\t\t\tstyles.setDefault(styleRow);\n\t\t\t} else {\n\t\t\t\tstyles.setStyle(styleRow, styleMappingRow.getGeometryTypeName());\n\t\t\t}\n\t\t}\n\t}\n\tif (styles.isEmpty()) {\n\t\tstyles = null;\n\t}\n\treturn styles;\n};\n\n/**\n * Get the feature styles for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyles} feature styles or null\n */\nFeatureStyleExtension.prototype.getFeatureStylesForFeatureRow = function(featureRow) {\n\treturn this.getFeatureStyles(featureRow.featureTable, featureRow.getId());\n};\n/**\n * Get the feature styles for the feature row\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @return {module:extension/style.FeatureStyles} feature styles or null\n */\nFeatureStyleExtension.prototype.getFeatureStyles = function(featureTable, featureId) {\n\tvar styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable));\n\tvar icons = this.getIcons(featureId, this.getIconMappingDao(featureTable));\n\tvar featureStyles = null;\n\tif (styles !== null || icons !== null) {\n\t\tfeatureStyles = new FeatureStyles(styles, icons);\n\t}\n\treturn featureStyles;\n};\n\n/**\n * Get the styles for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.Styles} styles or null\n */\nFeatureStyleExtension.prototype.getStylesForFeatureRow = function(featureRow) {\n\treturn this.getStyles(featureRow.getId(), this.getStyleMappingDao(featureRow.featureTable.table_name));\n};\n/**\n * Get the styles for the feature id\n * @param {String} tableName table name\n * @param {Number} featureId feature id\n * @return {module:extension/style.Styles} styles or null\n */\nFeatureStyleExtension.prototype.getStylesForFeatureId = function(tableName, featureId) {\n\treturn this.getStyles(featureId, this.getStyleMappingDao(tableName));\n};\n\n/**\n * Get the icons for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.Icons} icons or null\n */\nFeatureStyleExtension.prototype.getIconsForFeatureRow = function(featureRow) {\n\treturn this.getIcons(featureRow.getId(), this.getIconMappingDao(featureRow.featureTable.table_name));\n};\n\n/**\n * Get the icons for the feature id\n * @param {String} tableName table name\n * @param {Number} featureId feature id\n * @return {module:extension/style.Icons} icons or null\n */\nFeatureStyleExtension.prototype.getIconsForFeatureId = function(tableName, featureId) {\n\treturn this.getIcons(featureId, this.getIconMappingDao(tableName));\n};\n\n/**\n * Get the feature style (style and icon) of the feature row, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureStyleExtension.prototype.getFeatureStyleForFeatureRow = function(featureRow) {\n\treturn new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true));\n};\n\n/**\n * Get the feature style (style and icon) of the feature, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureStyleExtension.prototype.getFeatureStyleDefault = function(featureRow) {\n\treturn new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), null, true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), null, true));\n};\n\n/**\n * Get the icon of the feature, searching in order: feature geometry type\n * icon, feature default icon, when tableIcon enabled continue searching:\n * table geometry type icon, table default icon\n * @param {module:features/user/featureTable|String} featureTable\n * @param {Number} featureId\n * @param {String} geometryType\n * @param {Boolean} tableIcon\n * @returns {module:extension/style.IconRow}\n * @private\n */\nFeatureStyleExtension.prototype.getIcon = function(featureTable, featureId, geometryType, tableIcon) {\n\tvar iconRow = null;\n\tvar icons = this.getIcons(featureId, this.getIconMappingDao(featureTable));\n\tif (icons !== null) {\n\t\ticonRow = icons.getIcon(geometryType);\n\t}\n\tif (iconRow === null && tableIcon) {\n\t\ticonRow = this.getTableIcon(featureTable, geometryType);\n\t}\n\treturn iconRow;\n};\n\n/**\n * Get the style of the feature, searching in order: feature geometry type\n * style, feature default style, when tableStyle enabled continue searching:\n * table geometry type style, table default style\n * @param {module:features/user/featureTable|String} featureTable\n * @param {Number} featureId\n * @param {String} geometryType\n * @param {Boolean} tableStyle\n * @returns {module:extension/style.StyleRow}\n * @private\n */\nFeatureStyleExtension.prototype.getStyle = function(featureTable, featureId, geometryType, tableStyle) {\n\tvar styleRow = null;\n\tvar styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable));\n\tif (styles !== null) {\n\t\tstyleRow = styles.getStyle(geometryType);\n\t}\n\tif (styleRow === null && tableStyle) {\n\t\tstyleRow = this.getTableStyle(featureTable, geometryType);\n\t}\n\treturn styleRow;\n};\n\n/**\n * Set the feature table default feature styles\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableFeatureStyles = function(featureTable, featureStyles) {\n\tif (featureStyles !== null) {\n\t\tvar promises = [];\n\t\tpromises.push(this.setTableStyles(featureTable, featureStyles.getStyles()));\n\t\tpromises.push(this.setTableIcons(featureTable, featureStyles.getIcons()));\n\t\treturn Promise.all(promises);\n\t} else {\n\t\tthis.deleteTableFeatureStyles(featureTable);\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature table default styles\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.Styles} styles default styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableStyles = function(featureTable, styles) {\n\t// var tableName = featureTable.table_name ? featureTable.table_name : featureTable;\n\tthis.deleteTableStyles(featureTable);\n\tif (styles !== null) {\n\t\tvar promises = [];\n\t\tif (styles.getDefault() !== null) {\n\t\t\tpromises.push(this.setTableStyleDefault(featureTable, styles.getDefault()));\n\t\t}\n\t\tvar keys = Object.keys(styles.styles);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tvar value = styles.styles[key];\n\t\t\tpromises.push(this.setTableStyle(featureTable, key, value));\n\t\t}\n\t\treturn Promise.all(promises);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature table style default\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableStyleDefault = function(featureTable, style) {\n\treturn this.setTableStyle(featureTable, null, style);\n};\n\n/**\n * Set the feature table style for the geometry type\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableStyle = function(featureTable, geometryType, style) {\n\tthis.deleteTableStyle(featureTable, geometryType);\n\tif (style !== null) {\n\t\treturn this.createTableStyleRelationship(featureTable).then(function () {\n\t\t\tvar featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable));\n\t\t\tvar styleId = this.getOrInsertStyle(style);\n\t\t\tvar mappingDao = this.getTableStyleMappingDao(featureTable);\n\t\t\tthis.insertStyleMapping(mappingDao, featureContentsId.id, styleId, geometryType);\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature table default icons\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.Icons} icons default icons\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableIcons = function(featureTable, icons) {\n\tthis.deleteTableIcons(featureTable);\n\tif (icons !== null) {\n\t\tvar promises = [];\n\t\tif (icons.getDefault() !== null) {\n\t\t\tpromises.push(this.setTableIconDefault(featureTable, icons.getDefault()));\n\t\t}\n\t\tvar keys = Object.keys(icons.icons);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tvar value = icons.icons[key];\n\t\t\tpromises.push(this.setTableIcon(featureTable, key, value));\n\t\t}\n\t\treturn Promise.all(promises);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n/**\n * Set the feature table icon default\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableIconDefault = function(featureTable, icon) {\n\treturn this.setTableIcon(featureTable, null, icon);\n};\n\n/**\n * Set the feature table icon for the geometry type\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableIcon = function(featureTable, geometryType, icon) {\n\tthis.deleteTableIcon(featureTable, geometryType);\n\tif (icon !== null) {\n\t\treturn this.createTableIconRelationship(featureTable).then(function () {\n\t\t\tvar featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable));\n\t\t\tvar iconId = this.getOrInsertIcon(icon);\n\t\t\tvar mappingDao = this.getTableIconMappingDao(featureTable);\n\t\t\tthis.insertStyleMapping(mappingDao, featureContentsId.id, iconId, geometryType);\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature styles for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) {\n\treturn this.setFeatureStyles(featureRow.featureTable.table_name, featureRow.getId(), featureStyles);\n};\n\n/**\n * Set the feature styles for the feature table and feature id\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyles = function(featureTable, featureId, featureStyles) {\n\tif (featureStyles !== null) {\n\t\tvar promises = [];\n\t\tpromises.push(this.setStyles(featureTable, featureId, featureStyles.getStyles()));\n\t\tpromises.push(this.setIcons(featureTable, featureId, featureStyles.getIcons()));\n\t\treturn Promise.all(promises);\n\t} else {\n\t\tthis.deleteStyles(featureTable, featureId);\n\t\tthis.deleteIcons(featureTable, featureId);\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature style (style and icon) of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) {\n\treturn this.setFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature row for the\n * specified geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) {\n\treturn this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, featureStyle);\n};\n\n/**\n * Set the feature style default (style and icon) of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) {\n\treturn this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), null, featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyle = async function(featureTable, featureId, geometryType, featureStyle) {\n\tif (featureStyle !== null) {\n\t\tvar promises = [];\n\t\tpromises.push(this.setStyle(featureTable, featureId, geometryType, featureStyle.getStyle()));\n\t\tpromises.push(this.setIcon(featureTable, featureId, geometryType, featureStyle.getIcon()));\n\t\treturn Promise.all(promises);\n\t} else {\n\t\tthis.deleteStyle(featureTable, featureId, geometryType);\n\t\tthis.deleteIcon(featureTable, featureId, geometryType);\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature style (style and icon) of the feature\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyleDefault = function(featureTable, featureId, featureStyle) {\n\treturn this.setFeatureStyle(featureTable, featureId, null, featureStyle);\n};\n\n/**\n * Set the styles for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.Styles} styles styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStylesForFeatureRow = function(featureRow, styles) {\n\treturn this.setStyles(featureRow.featureTable.table_name, featureRow.getId(), styles);\n};\n\n/**\n * Set the styles for the feature table and feature id\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.Styles} styles styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyles = function(featureTable, featureId, styles) {\n\tthis.deleteStylesForFeatureId(featureTable, featureId);\n\tif (styles !== null) {\n\t\tvar promises = [];\n\t\tif (styles.getDefault() !== null) {\n\t\t\tpromises.push(this.setStyleDefault(featureTable, featureId, styles.getDefault()));\n\t\t}\n\t\tvar keys = Object.keys(styles.styles);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tpromises.push(this.setStyle(featureTable, featureId, keys[i], styles.styles[keys[i]]));\n\t\t}\n\t\treturn Promise.all(promises);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the style of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyleForFeatureRow = function(featureRow, style) {\n\treturn this.setStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), style);\n};\n\n/**\n * Set the style of the feature row for the specified geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) {\n\treturn this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, style);\n};\n\n/**\n * Set the default style of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) {\n\treturn this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), null, style);\n};\n\n/**\n * Set the style of the feature\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyle = function(featureTable, featureId, geometryType, style) {\n\tthis.deleteStyle(featureTable, featureId, geometryType);\n\tif (style !== null) {\n\t\treturn this.createStyleRelationship(featureTable).then(function () {\n\t\t\tvar styleId = this.getOrInsertStyle(style);\n\t\t\tvar mappingDao = this.getStyleMappingDao(featureTable);\n\t\t\tthis.insertStyleMapping(mappingDao, featureId, styleId, geometryType);\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the default style of the feature\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyleDefault = function(featureTable, featureId, style) {\n\treturn this.setStyle(featureTable, featureId, null, style);\n};\n\n/**\n * Set the icons for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.Icons} icons icons\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconsForFeatureRow = function(featureRow, icons) {\n\treturn this.setIcons(featureRow.featureTable.table_name, featureRow.getId(), icons);\n};\n\n/**\n * Set the icons for the feature table and feature id\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.Icons} icons icons\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIcons = function(featureTable, featureId, icons) {\n\tthis.deleteIconsForFeatureId(featureTable, featureId);\n\tif (icons !== null) {\n\t\tvar promises = [];\n\t\tif (icons.getDefault() !== null) {\n\t\t\tpromises.push(this.setIconDefault(featureTable, featureId, icons.getDefault()));\n\t\t}\n\t\tvar keys = Object.keys(icons.icons);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tpromises.push(this.setIcon(featureTable, featureId, keys[i], icons.icons[keys[i]]));\n\t\t}\n\t\treturn Promise.all(promises);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the icon of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconForFeatureRow = function(featureRow, icon) {\n\treturn this.setIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), icon);\n};\n\n/**\n * Set the icon of the feature row for the specified geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) {\n\treturn this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), geometryType, icon);\n};\n\n/**\n * Set the default icon of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) {\n\treturn this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), null, icon);\n};\n\n/**\n * Get the icon of the feature, searching in order: feature geometry type\n * icon, feature default icon, table geometry type icon, table default icon\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIcon = function(featureTable, featureId, geometryType, icon) {\n\tthis.deleteIcon(featureTable, featureId, geometryType);\n\tif (icon !== null) {\n\t\treturn this.createIconRelationship(featureTable).then(function () {\n\t\t\tvar iconId = this.getOrInsertIcon(icon);\n\t\t\tvar mappingDao = this.getIconMappingDao(featureTable);\n\t\t\tthis.insertStyleMapping(mappingDao, featureId, iconId, geometryType);\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the default icon of the feature\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconDefault = function(featureTable, featureId, icon) {\n\treturn this.setIcon(featureTable, featureId, null, icon);\n};\n\n/**\n * Get the style id, either from the existing style or by inserting a new one\n * @param {module:extension/style.StyleRow} style style row\n * @return {Number} style id\n */\nFeatureStyleExtension.prototype.getOrInsertStyle = function(style) {\n\tvar styleId;\n\tif (style.hasId()) {\n\t\tstyleId = style.getId();\n\t} else {\n\t\tvar styleDao = this.getStyleDao();\n\t\tif (styleDao !== null) {\n\t\t\tstyleId = styleDao.create(style);\n\t\t\tstyle.setId(styleId);\n\t\t}\n\t}\n\treturn styleId;\n};\n\n/**\n * Get the icon id, either from the existing icon or by inserting a new one\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Number} icon id\n */\nFeatureStyleExtension.prototype.getOrInsertIcon = function(icon) {\n\tvar iconId;\n\tif (icon.hasId()) {\n\t\ticonId = icon.getId();\n\t} else {\n\t\tvar iconDao = this.getIconDao();\n\t\tif (iconDao != null) {\n\t\t\ticonId = iconDao.create(icon);\n\t\t\ticon.setId(iconId);\n\t\t}\n\t}\n\treturn iconId;\n};\n\n/**\n * Insert a style mapping row\n * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao\n * @param {Number} baseId base id, either contents id or feature id\n * @param {Number} relatedId related id, either style or icon id\n * @param {String} geometryType geometry type or null\n */\nFeatureStyleExtension.prototype.insertStyleMapping = function(mappingDao, baseId, relatedId, geometryType) {\n\tvar row = mappingDao.newRow();\n\trow.setBaseId(baseId);\n\trow.setRelatedId(relatedId);\n\trow.setGeometryTypeName(geometryType);\n\tmappingDao.create(row);\n};\n\n/**\n * Delete all feature styles including table styles, table icons, style, and icons\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteAllFeatureStyles = function(featureTable) {\n\tthis.deleteTableFeatureStyles(featureTable);\n\tthis.deleteFeatureStyles(featureTable);\n};\n\n/**\n * Delete all styles including table styles and feature row style\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteAllStyles = function(featureTable) {\n\tthis.deleteTableStyles(featureTable);\n\tthis.deleteStyles(featureTable);\n};\n\n/**\n * Delete all icons including table icons and feature row icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteAllIcons = function(featureTable) {\n\tthis.deleteTableIcons(featureTable);\n\tthis.deleteIcons(featureTable);\n};\n\n/**\n * Delete the feature table feature styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableFeatureStyles = function(featureTable) {\n\tthis.deleteTableStyles(featureTable);\n\tthis.deleteTableIcons(featureTable);\n};\n\n/**\n * Delete the feature table styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableStyles = function(featureTable) {\n\tthis.deleteTableMappings(this.getTableStyleMappingDao(featureTable), featureTable);\n};\n\n/**\n * Delete the feature table default style\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableStyleDefault = function(featureTable) {\n\tthis.deleteTableStyle(featureTable, null);\n};\n\n/**\n * Delete the feature table style for the geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteTableStyle = function(featureTable, geometryType) {\n\tthis.deleteTableMapping(this.getTableStyleMappingDao(featureTable), featureTable, geometryType);\n};\n\n/**\n * Delete the feature table icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableIcons = function(featureTable) {\n\tthis.deleteTableMappings(this.getTableIconMappingDao(featureTable), featureTable);\n};\n\n/**\n * Delete the feature table default icon\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableIconDefault = function(featureTable) {\n\tthis.deleteTableIcon(featureTable, null);\n};\n\n/**\n * Delete the feature table icon for the geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteTableIcon = function(featureTable, geometryType) {\n\tthis.deleteTableMapping(this.getTableIconMappingDao(featureTable), featureTable, geometryType);\n};\n\n/**\n * Delete the table style mappings\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableMappings = function(mappingDao, featureTable) {\n\tif (mappingDao !== null) {\n\t\tvar featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\t\tif (featureContentsId !== null) {\n\t\t\tmappingDao.deleteByBaseId(featureContentsId);\n\t\t}\n\t}\n};\n\n/**\n * Delete the table style mapping with the geometry type value\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteTableMapping = function(mappingDao, featureTable, geometryType) {\n\tif (mappingDao !== null) {\n\t\tvar featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\t\tif (featureContentsId !== null) {\n\t\t\tmappingDao.deleteByBaseIdAndGeometryType(featureContentsId, geometryType);\n\t\t}\n\t}\n};\n\n/**\n * Delete all feature styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteFeatureStyles = function(featureTable) {\n\tthis.deleteStyles(featureTable);\n\tthis.deleteIcons(featureTable);\n};\n\n/**\n * Delete all styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteStyles = function(featureTable) {\n\tthis.deleteMappings(this.getStyleMappingDao(featureTable));\n};\n\n/**\n * Delete feature row styles\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteStylesForFeatureRow = function(featureRow) {\n\tthis.deleteStylesForFeatureId(featureRow.featureTable.table_name, featureRow.getId());\n};\n\n/**\n * Delete feature row styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteStylesForFeatureId = function(featureTable, featureId) {\n\tthis.deleteMappingsForFeatureId(this.getStyleMappingDao(featureTable), featureId);\n};\n\n/**\n * Delete the feature row default style\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) {\n\tthis.deleteStyleForFeatureRowAndGeometryType(featureRow, null);\n};\n\n/**\n * Delete the feature row default style\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteStyleDefault = function(featureTable, featureId) {\n\tthis.deleteStyle(featureTable, featureId, null);\n};\n\n/**\n * Delete the feature row style for the feature row geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteStyleForFeatureRow = function(featureRow) {\n\tthis.deleteStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Delete the feature row style for the geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\tthis.deleteStyle(featureRow.featureTable, featureRow.getId(), geometryType);\n};\n\n/**\n * Delete the feature row style for the geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteStyle = function(featureTable, featureId, geometryType) {\n\tthis.deleteMapping(this.getStyleMappingDao(featureTable), featureId, geometryType);\n};\n\n/**\n * Delete all icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteIcons = function(featureTable) {\n\tthis.deleteMappings(this.getIconMappingDao(featureTable));\n};\n\n/**\n * Delete feature row icons\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteIconsForFeatureRow = function(featureRow) {\n\tthis.deleteIconsForFeatureId(featureRow.featureTable.table_name, featureRow.getId());\n};\n\n/**\n * Delete feature row icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteIconsForFeatureId = function(featureTable, featureId) {\n\tthis.deleteMappingsForFeatureId(this.getIconMappingDao(featureTable), featureId);\n};\n\n/**\n * Delete the feature row default icon\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteIconDefaultForFeatureRow = function(featureRow) {\n\tthis.deleteIconDefault(featureRow.featureTable.table_name, featureRow.getId());\n};\n\n/**\n * Delete the feature row default icon\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteIconDefault = function(featureTable, featureId) {\n\tthis.deleteIcon(featureTable, featureId, null);\n};\n\n/**\n * Delete the feature row icon for the feature row geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteIconForFeatureRow = function(featureRow) {\n\tthis.deleteIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Delete the feature row icon for the geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\tthis.deleteIcon(featureRow.featureTable, featureRow.getId(), geometryType);\n};\n\n/**\n * Delete the feature row icon for the geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteIcon = function(featureTable, featureId, geometryType) {\n\tthis.deleteMapping(this.getIconMappingDao(featureTable), featureId, geometryType);\n};\n\n/**\n * Delete all style mappings\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n */\nFeatureStyleExtension.prototype.deleteMappings = function(mappingDao) {\n\tif (mappingDao !== null) {\n\t\tmappingDao.deleteAll();\n\t}\n};\n\n/**\n * Delete the style mappings\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteMappingsForFeatureId = function(mappingDao, featureId) {\n\tif (mappingDao !== null) {\n\t\tmappingDao.deleteByBaseId(featureId);\n\t}\n};\n\n/**\n * Delete the style mapping with the geometry type value\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteMapping = function(mappingDao, featureId, geometryType) {\n\tif (mappingDao !== null) {\n\t\tmappingDao.deleteByBaseIdAndGeometryType(featureId, geometryType);\n\t}\n};\n\n/**\n * Get all the unique style row ids the table maps to\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return style row ids\n */\nFeatureStyleExtension.prototype.getAllTableStyleIds = function(featureTable) {\n\tvar styleIds = null;\n\tvar mappingDao = this.getTableStyleMappingDao(featureTable);\n\tif (mappingDao !== null) {\n\t\tstyleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);\n\t}\n\treturn styleIds;\n};\n\n/**\n * Get all the unique icon row ids the table maps to\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return icon row ids\n */\nFeatureStyleExtension.prototype.getAllTableIconIds = function(featureTable) {\n\tvar styleIds = null;\n\tvar mappingDao = this.getTableIconMappingDao(featureTable);\n\tif (mappingDao !== null) {\n\t\tstyleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);\n\t}\n\treturn styleIds;\n};\n\n/**\n * Get all the unique style row ids the features map to\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Number[]} style row ids\n */\nFeatureStyleExtension.prototype.getAllStyleIds = function(featureTable) {\n\tvar styleIds = null;\n\tvar mappingDao = this.getStyleMappingDao(featureTable);\n\tif (mappingDao !== null) {\n\t\tstyleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);\n\t}\n\treturn styleIds;\n};\n\n/**\n * Get all the unique icon row ids the features map to\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Number[]} icon row ids\n */\nFeatureStyleExtension.prototype.getAllIconIds = function(featureTable) {\n\tvar styleIds = null;\n\tvar mappingDao = this.getIconMappingDao(featureTable);\n\tif (mappingDao !== null) {\n\t\tstyleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);\n\t}\n\treturn styleIds;\n};\n\n/**\n * Get name of feature table\n * @param featureTable\n * @returns {String}\n */\nFeatureStyleExtension.prototype.getFeatureTableName = function(featureTable) {\n\treturn featureTable.table_name ? featureTable.table_name : featureTable;\n};\n\n/**\n * Remove all traces of the extension\n */\nFeatureStyleExtension.prototype.removeExtension = function() {\n\tthis.deleteAllRelationships();\n\tthis.geoPackage.deleteTable(StyleTable.TABLE_NAME);\n\tthis.geoPackage.deleteTable(IconTable.TABLE_NAME);\n\tif (this.extensionsDao.isTableExists()) {\n\t\tthis.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME);\n\t}\n};\n\nFeatureStyleExtension.EXTENSION_NAME = 'nga_feature_style';\nFeatureStyleExtension.EXTENSION_AUTHOR = 'nga';\nFeatureStyleExtension.EXTENSION_NAME_NO_AUTHOR = 'feature_style';\nFeatureStyleExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/feature-style.html';\nFeatureStyleExtension.TABLE_MAPPING_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + \"_style_\";\nFeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + \"_style_default_\";\nFeatureStyleExtension.TABLE_MAPPING_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + \"_icon_\";\nFeatureStyleExtension.TABLE_MAPPING_TABLE_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + \"_icon_default_\";\n\nmodule.exports = FeatureStyleExtension;\n\n},{\"../.\":25,\"../../user/userTableReader\":109,\"../baseExtension\":20,\"../contents/contentsIdDao\":22,\"../relatedTables/userMappingTable\":42,\"./featureStyle\":46,\"./featureStyles\":47,\"./iconDao\":50,\"./iconTable\":52,\"./icons\":53,\"./styleDao\":55,\"./styleMappingDao\":56,\"./styleMappingTable\":58,\"./styleTable\":60,\"./styleTableReader\":61,\"./styles\":62,\"util\":343}],55:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleDao\n */\n\nvar StyleRow = require('./styleRow')\n  , StyleTable = require('./styleTable')\n  , AttributesDao = require('../../attributes/attributeDao');\n\nvar util = require('util');\n\n/**\n * Style DAO for reading style tables\n * @extends {module:attributes/attributeDao~AttributesDao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection\n * @param  {string} table table name\n * @constructor\n */\nvar StyleDao = function(geoPackage, table) {\n  AttributesDao.call(this, geoPackage, table);\n  this.table = table;\n};\n\nutil.inherits(StyleDao, AttributesDao);\n\n/**\n * Creates a StyleRow object from the results\n * @param results\n * @returns {module:extension/style.StyleRow}\n */\nStyleDao.prototype.createObject = function (results) {\n  if (results) {\n    return this.getRow(results);\n  }\n  return this.newRow();\n};\n\n/**\n * Create a new style row\n * @return {module:extension/style.StyleRow}\n */\nStyleDao.prototype.newRow = function() {\n  return new StyleRow(this.table);\n};\n\n/**\n * Create a style row with the column types and values\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/style.StyleRow}             icon row\n */\nStyleDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new StyleRow(this.table, columnTypes, values);\n};\n\nmodule.exports = StyleDao;\n\n},{\"../../attributes/attributeDao\":3,\"./styleRow\":59,\"./styleTable\":60,\"util\":343}],56:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleMappingDao\n */\n\nvar StyleMappingRow = require('./styleMappingRow')\n  , StyleMappingTable = require('./styleMappingTable')\n  , UserMappingTable = require('../relatedTables/userMappingTable')\n  , UserMappingDao = require('../relatedTables/userMappingDao');\n\nvar util = require('util');\n\n/**\n * Style Mapping DAO for reading user mapping data tables\n * @extends {module:extension/relatedTables~UserMappingDao}\n * @param  {module:user/custom~UserCustomDao} userCustomDao\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @constructor\n */\nvar StyleMappingDao = function(userCustomDao, geoPackage) {\n  UserMappingDao.call(this, userCustomDao, geoPackage);\n};\n\nutil.inherits(StyleMappingDao, UserMappingDao);\n\n/**\n * Create a new {module:user/custom~UserCustomTable}\n * @param  {module:user/custom~UserCustomDao} userCustomDao\n * @return {module:user/custom~UserCustomTable} userCustomTable user custom table\n */\nStyleMappingDao.prototype.createMappingTable = function(userCustomDao) {\n  return new StyleMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns);\n};\n\n/**\n * Create a new {module:extension/style.StyleMappingRow}\n * @return {module:extension/style.StyleMappingRow}\n */\nStyleMappingDao.prototype.newRow = function() {\n  return new StyleMappingRow(this.table);\n};\n\n/**\n * Create a user mapping row\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values values\n * @return {module:extension/style.StyleMappingRow} style mapping row\n */\nStyleMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new StyleMappingRow(this.table, columnTypes, values);\n};\n\n/**\n * Delete by base id and geometry type\n * @param  {Number} baseId base id\n * @param  {String} geometryType geometry type\n * @return {Number} number of deleted rows\n */\nStyleMappingDao.prototype.deleteByBaseIdAndGeometryType = function(baseId, geometryType) {\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);\n  where += ' AND ';\n  where += this.buildWhereWithFieldAndValue(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, geometryType);\n  var whereArgs = this.buildWhereArgs([baseId, geometryType]);\n  return this.deleteWhere(where, whereArgs);\n};\n\nmodule.exports = StyleMappingDao;\n\n},{\"../relatedTables/userMappingDao\":40,\"../relatedTables/userMappingTable\":42,\"./styleMappingRow\":57,\"./styleMappingTable\":58,\"util\":343}],57:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleMappingRow\n */\n\nvar UserMappingRow = require('../relatedTables/userMappingRow');\n\nvar util = require('util');\n\n/**\n * User Mapping Row containing the values from a single result set row\n * @extends {module:extension/relatedTables~UserMappingRow}\n * @param  {module:extension/style.StyleMappingTable} styleMappingTable style mapping table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @constructor\n */\nvar StyleMappingRow = function(styleMappingTable, columnTypes, values) {\n  UserMappingRow.call(this, styleMappingTable, columnTypes, values);\n  this.styleMappingTable = styleMappingTable;\n};\n\nutil.inherits(StyleMappingRow, UserMappingRow);\n\n/**\n * Get the geometry type name column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleMappingRow.prototype.getGeometryTypeNameColumn = function() {\n  return this.styleMappingTable.getGeometryTypeNameColumn();\n};\n\n/**\n * Gets the geometry type name\n * @return {string}\n */\nStyleMappingRow.prototype.getGeometryTypeName = function() {\n  return this.getValueWithColumnName(this.getGeometryTypeNameColumn().name);\n};\n\n/**\n * Sets the geometry type name\n * @param  {string} geometryTypeName geometry type name\n */\nStyleMappingRow.prototype.setGeometryTypeName = function(geometryTypeName) {\n  this.setValueWithColumnName(this.getGeometryTypeNameColumn().name, geometryTypeName);\n};\n\nmodule.exports = StyleMappingRow;\n\n},{\"../relatedTables/userMappingRow\":41,\"util\":343}],58:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleMappingTable\n */\n\nvar UserMappingTable = require('../relatedTables/userMappingTable')\n  , UserCustomColumn = require('../../user/custom/userCustomColumn')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Contains style mapping table factory and utility methods\n * @extends {module:extension/relatedTables~UserMappingTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   style mapping columns\n * @constructor\n */\nvar StyleMappingTable = function(tableName, columns) {\n  UserMappingTable.call(this, tableName, columns);\n};\n\nutil.inherits(StyleMappingTable, UserMappingTable);\n\n/**\n * Creates a user mapping table with the minimum required columns followed by the additional columns\n * @param  {string} tableName name of the table\n * @return {module:extension/relatedTables~UserMappingTable}\n */\nStyleMappingTable.create = function(tableName) {\n  return new StyleMappingTable(tableName, StyleMappingTable.createColumns());\n};\n\n/**\n * Create the columns\n * @return {module:user/userColumn~UserColumn[]}\n */\nStyleMappingTable.createColumns = function() {\n  var columns = UserMappingTable.createRequiredColumns();\n  var index = columns.length;\n  columns.push(UserCustomColumn.createColumn(index, StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined))\n  return columns;\n};\n\n/**\n * Get the geometry type name column index\n * @return int\n */\nStyleMappingTable.prototype.getGeometryTypeNameColumnIndex = function() {\n  return this.getColumnIndex(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME);\n};\n\n/**\n * Get the geometry type name column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleMappingTable.prototype.getGeometryTypeNameColumn = function() {\n  return this.getColumnWithColumnName(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME);\n};\n\nStyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME = 'geometry_type_name';\n\nmodule.exports = StyleMappingTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/custom/userCustomColumn\":101,\"../relatedTables/userMappingTable\":42,\"util\":343}],59:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleRow\n */\n\nvar AttributesRow = require('../../attributes/attributeRow');\n\nvar util = require('util');\n\n/**\n * Color hex pattern\n */\nvar colorPattern = /^#([0-9a-fA-F]{3}){1,2}$/;\n\n/**\n * Style Row\n * @extends {module:attributes/attributeRow~AttributesRow}\n * @param  {module:extension/style.StyleTable} styleTable  style table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @constructor\n */\nvar StyleRow = function(styleTable, columnTypes, values) {\n  AttributesRow.call(this, styleTable, columnTypes, values);\n  this.styleTable = styleTable;\n};\n\nutil.inherits(StyleRow, AttributesRow);\n\n/**\n * Get the name column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getNameColumn = function() {\n  return this.styleTable.getNameColumn();\n};\n\n/**\n * Gets the name\n * @return {String}\n */\nStyleRow.prototype.getName = function() {\n  return this.getValueWithColumnName(this.getNameColumn().name);\n};\n\n/**\n * Sets the name for the row\n * @param {String} name name\n */\nStyleRow.prototype.setName = function(name) {\n  this.setValueWithColumnName(this.getNameColumn().name, name);\n};\n\n/**\n * Get the description column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getDescriptionColumn = function() {\n  return this.styleTable.getDescriptionColumn();\n};\n\n/**\n * Gets the description\n * @return {String}\n */\nStyleRow.prototype.getDescription = function() {\n  return this.getValueWithColumnName(this.getDescriptionColumn().name);\n};\n\n/**\n * Sets the description for the row\n * @param {String} description description\n */\nStyleRow.prototype.setDescription = function(description) {\n  this.setValueWithColumnName(this.getDescriptionColumn().name, description);\n};\n\n/**\n * Get the color column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getColorColumn = function() {\n  return this.styleTable.getColorColumn();\n};\n\n/**\n * Get the style color\n * @return {String} color\n */\nStyleRow.prototype.getColor = function() {\n  return this.createColor(this.getHexColor(), this.getOpacity());\n};\n\n/**\n * Check if the style has a color\n * @return true if has a color\n */\nStyleRow.prototype.hasColor = function() {\n  return this._hasColor(this.getHexColor(), this.getOpacity());\n};\n\n/**\n * Get the color\n * @return {String} color\n */\nStyleRow.prototype.getHexColor = function() {\n  return this.getValueWithColumnName(this.getColorColumn().name);\n};\n\n/**\n * Set the color\n * @param {String} color color\n * @param {Number} opacity opacity\n */\nStyleRow.prototype.setColor = function(color, opacity) {\n  this.setHexColor(color);\n  this.setOpacity(opacity);\n};\n\n/**\n * Sets the color for the row\n * @param {String} color color\n */\nStyleRow.prototype.setHexColor = function(color) {\n  var validatedColor = this.validateColor(color);\n  this.setValueWithColumnName(this.getColorColumn().name, validatedColor);\n};\n\n/**\n * Get the opacity column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getOpacityColumn = function() {\n  return this.styleTable.getOpacityColumn();\n};\n\n/**\n * Gets the opacity\n * @return {Number}\n */\nStyleRow.prototype.getOpacity = function() {\n  return this.getValueWithColumnName(this.getOpacityColumn().name);\n};\n\n/**\n * Get the opacity or default value\n * @return {Number} opacity\n */\nStyleRow.prototype.getOpacityOrDefault = function() {\n  var opacity = this.getOpacity();\n  if (opacity === null) {\n    opacity = 1.0;\n  }\n  return opacity;\n};\n\n/**\n * Sets the opacity for the row\n * @param {Number} opacity opacity\n */\nStyleRow.prototype.setOpacity = function(opacity) {\n  this.validateOpacity(opacity);\n  this.setValueWithColumnName(this.getOpacityColumn().name, opacity);\n};\n\n/**\n * Get the width column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getWidthColumn = function() {\n  return this.styleTable.getWidthColumn();\n};\n\n/**\n * Gets the width\n * @return {int}\n */\nStyleRow.prototype.getWidth = function() {\n  return this.getValueWithColumnName(this.getWidthColumn().name);\n};\n\n/**\n * Sets the width for the row\n * @param {Number} width width\n */\nStyleRow.prototype.setWidth = function(width) {\n  if (width !== null && width < 0.0) {\n    throw new Error(\"Width must be greater than or equal to 0.0, invalid value: \" + width);\n  }\n  this.setValueWithColumnName(this.getWidthColumn().name, width);\n};\n\n/**\n * Get the width value or default width\n * @return width\n */\nStyleRow.prototype.getWidthOrDefault = function() {\n  var width = this.getWidth();\n  if (width === null) {\n    width = 1.0;\n  }\n  return width;\n};\n\n/**\n * Get the fill color column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getFillColorColumn = function() {\n  return this.styleTable.getFillColorColumn();\n};\n\n\n/**\n * Get the style fill color\n * @return {String} color\n */\nStyleRow.prototype.getFillColor = function() {\n  return this.createColor(this.getFillHexColor(), this.getFillOpacity());\n};\n\n/**\n * Check if the style has a fill color\n * @return true if has a color\n */\nStyleRow.prototype.hasFillColor = function() {\n  return this._hasColor(this.getFillHexColor(), this.getFillOpacity());\n};\n\n/**\n * Get the fill color\n * @return {String} color\n */\nStyleRow.prototype.getFillHexColor = function() {\n  return this.getValueWithColumnName(this.getFillColorColumn().name);\n};\n\n/**\n * Set the fill color\n * @param {String} color color\n * @param {Number} opacity opacity\n */\nStyleRow.prototype.setFillColor = function(color, opacity) {\n  this.setFillHexColor(color);\n  this.setFillOpacity(opacity);\n};\n\n/**\n * Sets the fill color for the row\n * @param {String} color color\n */\nStyleRow.prototype.setFillHexColor = function(color) {\n  var validatedColor = this.validateColor(color);\n  this.setValueWithColumnName(this.getFillColorColumn().name, validatedColor);\n};\n\n/**\n * Get the fill opacity column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getFillOpacityColumn = function() {\n  return this.styleTable.getFillOpacityColumn();\n};\n\n/**\n * Gets the fill opacity\n * @return {Number}\n */\nStyleRow.prototype.getFillOpacity = function() {\n  return this.getValueWithColumnName(this.getFillOpacityColumn().name);\n};\n\n/**\n * Sets the fill opacity for the row\n * @param {Number} fillOpacity fillOpacity\n */\nStyleRow.prototype.setFillOpacity = function(fillOpacity) {\n  this.validateOpacity(fillOpacity);\n  this.setValueWithColumnName(this.getFillOpacityColumn().name, fillOpacity);\n};\n\n/**\n * Get the fill opacity or default value\n * @return {Number} fill opacity\n */\nStyleRow.prototype.getFillOpacityOrDefault = function() {\n  var fillOpacity = this.getFillOpacity();\n  if (fillOpacity == null) {\n    fillOpacity = 1.0;\n  }\n  return fillOpacity;\n};\n\n/**\n * Validate and adjust the color value\n * @param {String} color color\n */\nStyleRow.prototype.validateColor = function(color) {\n  var validated = color;\n  if (color != null) {\n    if (!color.startsWith(\"#\")) {\n      validated = \"#\" + color;\n    }\n    if (!colorPattern.test(validated)) {\n      throw new Error(\"Color must be in hex format #RRGGBB or #RGB, invalid value: \" + color);\n    }\n    validated = validated.toUpperCase();\n  }\n  return validated;\n};\n\n/**\n * Validate the opacity value\n * @param {Number} opacity opacity\n */\nStyleRow.prototype.validateOpacity = function(opacity) {\n  if (opacity != null && (opacity < 0.0 || opacity > 1.0)) {\n    throw new Error(\"Opacity must be set inclusively between 0.0 and 1.0, invalid value: \" + opacity);\n  }\n};\n\n/**\n * Create a color from the hex color and opacity\n * @param {String} hexColor hex color\n * @param {Number} opacity opacity\n * @return {String} rgba color\n */\nStyleRow.prototype.createColor = function(hexColor, opacity) {\n  var color = '#000000';\n  if (hexColor !== null) {\n    color = hexColor;\n  }\n  if (opacity !== null) {\n    var a = Math.round(opacity * 255).toString(16);\n    if (a.length === 1) {\n      a = \"0\" + a;\n    }\n    color += a;\n  }\n  return color.toUpperCase();\n};\n\n/**\n * Determine if a color exists from the hex color and opacity\n * @param {String} hexColor hex color\n * @param {Number} opacity opacity\n * @return true if has a color\n */\nStyleRow.prototype._hasColor = function(hexColor, opacity) {\n  return hexColor !== null || opacity !== null;\n};\n\nmodule.exports = StyleRow;\n\n},{\"../../attributes/attributeRow\":4,\"util\":343}],60:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleTable\n */\n\nvar AttributesTable = require('../../attributes/attributeTable')\n  , UserColumn = require('../../user/userColumn')\n  , UserCustomColumn = require('../../user/custom/userCustomColumn')\n  , RelationType = require('../relatedTables/relationType')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Icon Requirements Class Media Table\n * @extends {module:attributes/attributeTable~AttributeTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   media columns\n * @constructor\n */\nvar StyleTable = function(tableName, columns) {\n  this.data_type = RelationType.ATTRIBUTES.dataType;\n  this.relation_name = RelationType.ATTRIBUTES.name;\n  AttributesTable.call(this, tableName, columns);\n};\n\nutil.inherits(StyleTable, AttributesTable);\n\n/**\n * Create a media table with a minimum required columns followed by the additional columns\n * @return {module:extension/style.StyleTable}\n */\nStyleTable.create = function() {\n  return new StyleTable(StyleTable.TABLE_NAME, StyleTable.createColumns());\n};\n\n/**\n * Create the columns\n * @return {module:user/custom~UserCustomColumn[]}\n */\nStyleTable.createColumns = function() {\n  var columns = [];\n  var index = 0;\n  columns.push(UserColumn.createPrimaryKeyColumnWithIndexAndName(index++, StyleTable.COLUMN_ID));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_OPACITY, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_FILL_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index, StyleTable.COLUMN_FILL_OPACITY, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  return columns;\n};\n\n/**\n * Get the name column index\n * @return int\n */\nStyleTable.prototype.getNameColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_NAME);\n};\n\n/**\n * Get the name column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getNameColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_NAME);\n};\n\n/**\n * Get the description column index\n * @return int\n */\nStyleTable.prototype.getDescriptionColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_DESCRIPTION);\n};\n\n/**\n * Get the description column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getDescriptionColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_DESCRIPTION);\n};\n\n/**\n * Get the color column index\n * @return int\n */\nStyleTable.prototype.getColorColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_COLOR);\n};\n\n/**\n * Get the color column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getColorColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_COLOR);\n};\n\n/**\n * Get the opacity column index\n * @return int\n */\nStyleTable.prototype.getOpacityColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_OPACITY);\n};\n\n/**\n * Get the opacity column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getOpacityColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_OPACITY);\n};\n\n/**\n * Get the width column index\n * @return int\n */\nStyleTable.prototype.getWidthColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_WIDTH);\n};\n\n/**\n * Get the width column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getWidthColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_WIDTH);\n};\n\n/**\n * Get the fill_color column index\n * @return int\n */\nStyleTable.prototype.getFillColorColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_FILL_COLOR);\n};\n\n/**\n * Get the fill_color column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getFillColorColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_COLOR);\n};\n\n/**\n * Get the fill_opacity column index\n * @return int\n */\nStyleTable.prototype.getFillOpacityColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_FILL_OPACITY);\n};\n\n/**\n * Get the fill_opacity column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getFillOpacityColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_OPACITY);\n};\n\nStyleTable.TABLE_NAME = 'nga_style';\nStyleTable.COLUMN_ID = 'id';\nStyleTable.COLUMN_NAME = 'name';\nStyleTable.COLUMN_DESCRIPTION = 'description';\nStyleTable.COLUMN_COLOR = 'color';\nStyleTable.COLUMN_OPACITY = 'opacity';\nStyleTable.COLUMN_WIDTH = 'width';\nStyleTable.COLUMN_FILL_COLOR = 'fill_color';\nStyleTable.COLUMN_FILL_OPACITY = 'fill_opacity';\nStyleTable.prototype.TABLE_TYPE = 'media';\n\nmodule.exports = StyleTable;\n\n},{\"../../attributes/attributeTable\":5,\"../../db/dataTypes\":14,\"../../user/custom/userCustomColumn\":101,\"../../user/userColumn\":105,\"../relatedTables/relationType\":36,\"util\":343}],61:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleTableReader\n */\n\nvar AttributeTableReader = require('../../attributes/attributeTableReader')\n  , StyleTable = require('./styleTable');\n\nvar util = require('util');\n\n/**\n * Reads the metadata from an existing attribute table\n * @extends {module:attributes/attributeTableReader}\n * @constructor\n*/\nvar StyleTableReader = function(tableName) {\n  AttributeTableReader.call(this, tableName);\n};\n\nutil.inherits(StyleTableReader, AttributeTableReader);\n\n/**\n *\n * @param {String} tableName\n * @param columns\n * @returns {module:extension/style.StyleTable}\n */\nStyleTableReader.prototype.createTable = function (tableName, columns) {\n  return new StyleTable(tableName, columns);\n};\n\nmodule.exports = StyleTableReader;\n\n},{\"../../attributes/attributeTableReader\":6,\"./styleTable\":60,\"util\":343}],62:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class Styles\n */\n\n\n/**\n * Styles constructor\n * @constructor\n */\nvar Styles = function() {\n  this.defaultStyle = null;\n  this.styles = {};\n};\n\nStyles.prototype.setDefault = function(styleRow) {\n  this.defaultStyle = styleRow;\n};\n\nStyles.prototype.getDefault = function() {\n  return this.defaultStyle;\n};\n\nStyles.prototype.setStyle = function(styleRow, geometryType) {\n  if (geometryType != null) {\n    if (styleRow != null) {\n      this.styles[geometryType] = styleRow;\n    } else {\n      delete this.styles[geometryType];\n    }\n  } else {\n    this.setDefault(styleRow);\n  }\n};\n\nStyles.prototype.getStyle = function(geometryType) {\n  var styleRow = null;\n  if (geometryType != null) {\n    styleRow = this.styles[geometryType];\n  }\n  if (styleRow === null || geometryType === null) {\n    styleRow = this.getDefault();\n  }\n  return styleRow;\n};\n\nStyles.prototype.isEmpty = function() {\n  return Object.keys(this.styles).length === 0 && this.defaultStyle === null;\n};\n\nmodule.exports = Styles;\n\n},{}],63:[function(require,module,exports){\n/**\n * WebPExtension module.\n * @module WebPExtension\n * @see module:extension/BaseExtension\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension;\n\nvar util = require('util');\n\nvar WebPExtension = function(geoPackage, tableName) {\n  BaseExtension.call(this, geoPackage);\n\n  this.tableName = tableName;\n}\n\nutil.inherits(WebPExtension, BaseExtension);\n\nWebPExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(WebPExtension.EXTENSION_NAME, this.tableName, 'tile_data', WebPExtension.EXTENSION_WEBP_DEFINITION, Extension.READ_WRITE);\n};\n\nWebPExtension.EXTENSION_NAME = 'gpkg_webp';\nWebPExtension.EXTENSION_WEBP_AUTHOR = 'gpkg';\nWebPExtension.EXTENSION_WEBP_NAME_NO_AUTHOR = 'webp';\nWebPExtension.EXTENSION_WEBP_DEFINITION = 'http://www.geopackage.org/spec/#extension_webp';\n\nmodule.exports.WebPExtension = WebPExtension;\n\n},{\"../.\":25,\"../baseExtension\":20,\"util\":343}],64:[function(require,module,exports){\n/**\n * GeometryColumns module.\n * @module features/columns\n */\n\nvar Dao = require('../../dao/dao')\n  , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , Contents = require('../../core/contents').Contents;\n\nvar util = require('util');\n\n/**\n * Spatial Reference System object. The coordinate reference system definitions it contains are referenced by the GeoPackage Contents and GeometryColumns objects to relate the vector and tile data in user tables to locations on the earth.\n * @class GeometryColumns\n */\nvar GeometryColumns = function() {\n  /**\n\t * Name of the table containing the geometry column\n\t * @member {string}\n\t */\n\tthis.table_name;\n\n\t/**\n\t * Name of a column in the feature table that is a Geometry Column\n\t * @member {string}\n\t */\n\tthis.column_name;\n\n\t/**\n\t * Name from Geometry Type Codes (Core) or Geometry Type Codes (Extension)\n\t * in Geometry Types (Normative)\n\t * @member {string}\n\t */\n\tthis.geometry_type_name;\n\n\t/**\n\t * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id\n\t * @member {module:dao/spatialReferenceSystem~SpatialReferenceSystem}\n\t */\n\tthis.srs;\n\n\t/**\n\t * Unique identifier for each Spatial Reference System within a GeoPackage\n\t * @member {Number}\n\t */\n\tthis.srs_id;\n\n\t/**\n\t * 0: z values prohibited; 1: z values mandatory; 2: z values optional\n\t * @member {byte}\n\t */\n\tthis.z;\n\n\t/**\n\t * 0: m values prohibited; 1: m values mandatory; 2: m values optional\n\t * @member {byte}\n\t */\n\tthis.m;\n\n};\n\nGeometryColumns.prototype.getGeometryType = function() {\n  return this.geometry_type_name;\n};\n\n  // /**\n  //  * Contents\n  //  */\n  // @ForeignCollectionField(eager = false)\n  // private ForeignCollection<Contents> contents;\n  //\n  // /**\n  //  * Geometry Columns\n  //  */\n  // @ForeignCollectionField(eager = false)\n  // private ForeignCollection<GeometryColumns> geometryColumns;\n  //\n  // /**\n  //  * Matrix Tile Set\n  //  */\n  // @ForeignCollectionField(eager = false)\n  // private ForeignCollection<TileMatrixSet> tileMatrixSet;\n\n\n\n/**\n * Geometry Columns Data Access Object\n * @class GeometryColumnsDao\n * @extends {module:dao/dao~Dao}\n */\nvar GeometryColumnsDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(GeometryColumnsDao, Dao);\n\nGeometryColumnsDao.prototype.createObject = function () {\n  return new GeometryColumns();\n};\n\n/**\n *  Query for the table name\n *\n *  @param {string} tableName table name\n *  @param {callback} callback called with an error if one occurred and the {module:dao/geometryColumns~GeometryColumns}\n */\nGeometryColumnsDao.prototype.queryForTableName = function (tableName) {\n  var results = this.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, tableName);\n  if (results && results.length) {\n    var gc = this.createObject();\n    this.populateObjectFromResult(gc, results[0]);\n    return gc;\n  }\n  return;\n};\n\n/**\n *  Get the feature table names\n *\n *  @param {callback} callback called with an error if one occurred and an array of the {FeatureTable}\n */\nGeometryColumnsDao.prototype.getFeatureTables = function () {\n  var tableNames = [];\n  for (var result of this.connection.each('select ' + GeometryColumnsDao.COLUMN_TABLE_NAME + ' from ' + this.gpkgTableName)) {\n    tableNames.push(result[GeometryColumnsDao.COLUMN_TABLE_NAME]);\n  }\n  return tableNames;\n};\n\n/**\n *  Get the Spatial Reference System of the Geometry Columns\n *\n *  @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns\n *  @param {callback} callback called with an error if one occurred and the {SpatialReferenceSystem}\n */\nGeometryColumnsDao.prototype.getSrs = function (geometryColumns) {\n  var dao = this.geoPackage.getSpatialReferenceSystemDao();\n  return dao.queryForId(geometryColumns.srs_id);;\n};\n\n/**\n *  Get the Contents of the Geometry Columns\n *\n *  @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns\n *  @return {ContentsDao} contents dao\n */\nGeometryColumnsDao.prototype.getContents = function (geometryColumns) {\n  var dao = this.geoPackage.getContentsDao();\n  return dao.queryForId(geometryColumns.table_name);\n};\n\nGeometryColumnsDao.prototype.getProjection = function (projectionObject) {\n  var srs = this.getSrs(projectionObject);\n  var srsDao = this.geoPackage.getSpatialReferenceSystemDao();\n  return srsDao.getProjection(srs);\n};\n\n/**\n * tableName field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_TABLE_NAME = \"table_name\";\n\n/**\n * columnName field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_COLUMN_NAME = \"column_name\";\n\n/**\n * id 1 field name, tableName\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_ID_1 = GeometryColumnsDao.COLUMN_TABLE_NAME;\n\n/**\n * id 2 field name, columnName\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_ID_2 = GeometryColumnsDao.COLUMN_COLUMN_NAME;\n\n/**\n * geometryTypeName field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME = \"geometry_type_name\";\n\n/**\n * srsId field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_SRS_ID = 'srs_id';\n\n/**\n * z field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_Z = \"z\";\n\n/**\n * m field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_M = \"m\";\n\n/**\n * Table Name\n * @type {String}\n */\nGeometryColumnsDao.prototype.gpkgTableName = 'gpkg_geometry_columns';\n\nGeometryColumnsDao.prototype.idColumns = [GeometryColumnsDao.COLUMN_ID_1, GeometryColumnsDao.COLUMN_ID_2];\nGeometryColumnsDao.prototype.columns =\n  [GeometryColumnsDao.COLUMN_TABLE_NAME, GeometryColumnsDao.COLUMN_COLUMN_NAME, GeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME, GeometryColumnsDao.COLUMN_SRS_ID, GeometryColumnsDao.COLUMN_Z, GeometryColumnsDao.COLUMN_M];\n\nGeometryColumns.TABLE_NAME = \"tableName\";\nGeometryColumns.COLUMN_NAME = \"columnName\";\nGeometryColumns.GEOMETRY_TYPE_NAME = \"geometryTypeName\";\nGeometryColumns.SRS_ID = \"srsId\";\nGeometryColumns.Z = \"z\";\nGeometryColumns.M = \"m\";\n\nmodule.exports.GeometryColumnsDao = GeometryColumnsDao;\nmodule.exports.GeometryColumns = GeometryColumns;\n\n},{\"../../core/contents\":8,\"../../core/srs\":9,\"../../dao/dao\":11,\"util\":343}],65:[function(require,module,exports){\n/**\n * @module features/user/featureColumn\n */\n\nconst UserColumn = require('../../user/userColumn');\nconst DataTypes = require('../../db/dataTypes');\nconst util = require('util');\n\n/**\n * Represents a user feature column\n * @class\n * @extends {module:user/userColumn~UserColumn}\n */\nvar FeatureColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType) {\n  UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);\n  this.geometryType = geometryType;\n\n  if (!geometryType && dataType === DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) {\n    throw new Error('Data or Geometry Type is required to create column: ' + name);\n  }\n}\n\nutil.inherits(FeatureColumn, UserColumn);\n\nFeatureColumn.prototype.getTypeName = function () {\n  if (this.isGeometry()) {\n    return DataTypes.name(DataTypes.GPKGDataType.GPKG_DT_GEOMETRY);\n  }\n  return this.dataType !== undefined && DataTypes.name(this.dataType);\n};\n\n/**\n *  Create a new primary key column\n *\n *  @param {Number} index column index\n *  @param {string} name  column name\n *\n *  @return feature column\n */\nFeatureColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) {\n  return new FeatureColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true);\n}\n\n/**\n *  Create a new geometry column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {WKBGeometryType} type         geometry type\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return feature column\n */\nFeatureColumn.createGeometryColumn = function(index, name, type, notNull, defaultValue) {\n  return new FeatureColumn(index, name, type, undefined, notNull, defaultValue, false, type);\n}\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return feature column\n */\nFeatureColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) {\n  return FeatureColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue);\n}\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Number} max max value\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return feature column\n */\nFeatureColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) {\n  return new FeatureColumn(index, name, type, max, notNull, defaultValue, false);\n}\n\n/**\n * Determine if this column is a geometry\n * @return {Boolean} true if a geometry column\n */\nFeatureColumn.prototype.isGeometry = function () {\n  return this.geometryType !== undefined;\n};\n\nmodule.exports = FeatureColumn;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"util\":343}],66:[function(require,module,exports){\n/**\n * featureDao module.\n * @module features/user/featureDao\n */\n\nvar UserDao = require('../../user/userDao')\n  , GeometryColumnsDao = require('../columns').GeometryColumnsDao\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , DataColumnsDao = require('../../dataColumns').DataColumnsDao\n  , FeatureRow = require('./featureRow')\n  , DataTypes = require('../../db/dataTypes')\n  , FeatureTableIndex = require('../../extension/index/featureTableIndex')\n  , BoundingBox = require('../../boundingBox');\n\nvar util = require('util')\n  , reproject = require('reproject')\n  , LineIntersect = require('@turf/line-intersect').default\n  , Intersect = require('@turf/intersect').default\n  , BooleanWithin = require('@turf/boolean-within').default;\n\n/**\n * Feature DAO for reading feature user data tables\n * @class FeatureDao\n * @extends {module:user/userDao~UserDao}\n * @param  {sqlite3} db              database connection\n * @param  {FeatureTable} table           feature table\n * @param  {GeometryColumns} geometryColumns geometry columns\n * @param  {MetadataDb} metadataDb      metadata db\n */\nvar FeatureDao = function(geoPackage, table, geometryColumns, metadataDb) {\n  UserDao.call(this, geoPackage, table);\n  this.geometryColumns = geometryColumns;\n  this.metadataDb = metadataDb;\n  this.dataColumnsDao = new DataColumnsDao(geoPackage);\n  this.featureTableIndex = new FeatureTableIndex(geoPackage, this);\n  var dao = geoPackage.getGeometryColumnsDao();\n  if (!dao.getContents(geometryColumns)) {\n    throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Contents');\n  }\n  if (!dao.getSrs(geometryColumns)) {\n    throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Spatial Reference System');\n  }\n  this.projection = dao.getProjection(geometryColumns);\n}\n\nutil.inherits(FeatureDao, UserDao);\n\nFeatureDao.prototype.createObject = function (results) {\n  if (results) {\n    return this.getRow(results);\n  }\n  return this.newRow();\n};\n\nFeatureDao.prototype.getContents = function() {\n  var dao = this.geoPackage.getGeometryColumnsDao();\n  return dao.getContents(this.geometryColumns);\n}\n\n/**\n * Get the feature table\n * @return {FeatureTable} the feature table\n */\nFeatureDao.prototype.getFeatureTable = function () {\n  return this.table;\n};\n\n/**\n * Create a new feature row with the column types and values\n * @param  {Array} columnTypes column types\n * @param  {Array} values      values\n * @return {FeatureRow}             feature row\n */\nFeatureDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new FeatureRow(this.getFeatureTable(), columnTypes, values);\n};\n\n/**\n * Create a new feature row\n * @return {FeatureRow} feature row\n */\nFeatureDao.prototype.newRow = function () {\n  return new FeatureRow(this.getFeatureTable());\n};\n\n/**\n * Get the geometry column name\n * @return {string} the geometry column name\n */\nFeatureDao.prototype.getGeometryColumnName = function () {\n  return this.geometryColumns.column_name;\n};\n\n/**\n * Get the geometry types\n * @return {WKBGeometryType} well known binary geometry type\n */\nFeatureDao.prototype.getGeometryType = function () {\n  return this.geometryColumns.getGeometryType();\n};\n\nFeatureDao.prototype.getSrs = function() {\n  return this.geoPackage.getGeometryColumnsDao().getSrs(this.geometryColumns);\n};\n\n/**\n * Determine if the feature table is indexed\n * @param  {Function} callback called with err if one occurred and true or false indicating the indexed status\n */\nFeatureDao.prototype.isIndexed = function() {\n  return this.featureTableIndex.isIndexed();\n}\n\n/**\n * Query for count in bounding box\n * @param boundingBox\n * @returns {Number}}\n */\nFeatureDao.prototype.countWebMercatorBoundingBox = function(boundingBox) {\n  var srs = this.getSrs();\n  return this.featureTableIndex.countWithBoundingBox(boundingBox, 'EPSG:3857');\n}\n\nFeatureDao.prototype.fastQueryWebMercatorBoundingBox = function(boundingBox, featureRowCallback) {\n  var srs = this.getSrs();\n  var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857');\n  var thisgetRow = this.getRow.bind(this);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var featureRow = thisgetRow(nextRow.value);\n\n        return {\n          value: featureRow,\n          done: false\n        };\n      } else {\n        return {\n          done: true\n        }\n      }\n    }\n  }\n}\n\nFeatureDao.prototype.queryIndexedFeaturesWithWebMercatorBoundingBox = function(boundingBox) {\n  var srs = this.getSrs();\n  var projection = this.projection;\n\n  var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857');\n  var thisgetRow = this.getRow.bind(this);\n  var projectedBoundingBox = boundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326');\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var featureRow;\n        var geometry;\n\n        while(!nextRow.done && !geometry) {\n          featureRow = thisgetRow(nextRow.value);\n          geometry = reprojectFeature(featureRow, srs, projection);\n          geometry = verifyFeature(geometry, projectedBoundingBox);\n          if (geometry) {\n            geometry.properties = featureRow.values;\n            return {\n              value: featureRow,\n              done: false\n            };\n          } else {\n            nextRow = iterator.next();\n          }\n        }\n      }\n      return {\n        done: true\n      }\n    }\n  }\n}\n\n/**\n * Calls geoJSONFeatureCallback with the geoJSON of each matched feature (always in 4326 projection)\n * @param  {BoundingBox} boundingBox        4326 bounding box to query\n * @param  {function} geoJSONFeatureCallback called with err, geoJSON, doneCallback\n * @param  {function} doneCallback       called when all rows have been returned\n */\nFeatureDao.prototype.queryForGeoJSONIndexedFeaturesWithBoundingBox = function(boundingBox, skipVerification) {\n\n  var columns = [];\n  var columnMap = {};\n\n  var srs = this.getSrs();\n  var projection = this.projection;\n  this.table.columns.forEach(function(column) {\n    var dataColumn = this.dataColumnsDao.getDataColumns(this.table.table_name, column.name);\n    columns.push({\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey,\n      dataType: column.dataType ? DataTypes.name(column.dataType) : '',\n      displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,\n      dataColumn: dataColumn\n    });\n    columnMap[column.name] = columns[columns.length-1];\n  }.bind(this));\n\n  var verifiedCount = 0;\n  var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326')[Symbol.iterator]();\n  var thisgetRow = this.getRow.bind(this);\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var featureRow;\n        var geometry;\n\n        while(!nextRow.done && !geometry) {\n          featureRow = thisgetRow(nextRow.value);\n          geometry = reprojectFeature(featureRow, srs, projection);\n          if (!skipVerification) {\n            geometry = verifyFeature(geometry, boundingBox);\n          }\n          if (geometry) {\n            var geoJson = {\n              properties: {},\n              geometry: geometry\n            };\n            for (var key in featureRow.values) {\n              if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') {\n                if (key.toLowerCase() == '_feature_id') {\n                  geoJson.id = featureRow.values[key];\n                } else if (key.toLowerCase() == '_properties_id') {\n                  geoJson.properties[key.substring(12)] = featureRow.values[key];\n                } else {\n                  geoJson.properties[columnMap[key].displayName] = featureRow.values[key];\n                }\n              }\n            }\n            geoJson.id = geoJson.id || featureRow.getId();\n            return {\n              value: geoJson,\n              done: false\n            };\n          } else {\n            nextRow = iterator.next();\n          }\n        }\n      }\n      return {\n        done: true\n      }\n    }.bind(this)\n  }\n}\n\nfunction reprojectFeature(featureRow, srs, projection) {\n  var geometry = featureRow.getGeometry().toGeoJSON();\n  if (srs.organization + ':' + srs.organization_coordsys_id != 'EPSG:4326') {\n    geometry = reproject.reproject(geometry, projection, 'EPSG:4326');\n  }\n  return geometry;\n}\n\nfunction verifyFeature(geometry, boundingBox) {\n  try {\n    if (geometry.type == 'Point') {\n      return geometry;\n    } else if (geometry.type == 'LineString') {\n      var intersect = LineIntersect(geometry, boundingBox.toGeoJSON().geometry);\n      if (intersect.features.length) {\n        return geometry;\n      } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) {\n        return geometry;\n      }\n    } else if (geometry.type == 'Polygon') {\n      var polyIntersect = Intersect(geometry, boundingBox.toGeoJSON().geometry);\n      if (polyIntersect) {\n        return geometry;\n      } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) {\n        return geometry;\n      }\n    }\n  } catch (e) {}\n}\n\nFeatureDao.prototype.queryIndexedFeaturesWithBoundingBox = function(boundingBox) {\n  var srs = this.getSrs();\n  var projection = this.projection;\n\n  var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326');\n  var thisgetRow = this.getRow.bind(this);\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var featureRow;\n        var geometry;\n\n        while(!nextRow.done && !geometry) {\n          featureRow = thisgetRow(nextRow.value);\n          geometry = reprojectFeature(featureRow, srs, projection);\n          geometry = verifyFeature(geometry, boundingBox);\n          if (geometry) {\n            geometry.properties = featureRow.values;\n            return {\n              value: featureRow,\n              done: false\n            };\n          } else {\n            nextRow = iterator.next();\n          }\n        }\n      }\n      return {\n        done: true\n      }\n    }.bind(this)\n  }\n}\n\nFeatureDao.prototype.getBoundingBox = function () {\n  var contents = this.getContents();\n  return new BoundingBox(contents.min_x, contents.max_x, contents.min_y, contents.max_y);\n};\n\nmodule.exports = FeatureDao;\n\n},{\"../../boundingBox\":7,\"../../core/contents\":8,\"../../dataColumns\":13,\"../../db/dataTypes\":14,\"../../extension/index/featureTableIndex\":26,\"../../user/userDao\":106,\"../columns\":64,\"./featureRow\":67,\"@turf/boolean-within\":120,\"@turf/intersect\":124,\"@turf/line-intersect\":126,\"reproject\":315,\"util\":343}],67:[function(require,module,exports){\n/**\n * featureRow module.\n * @module features/user/featureRow\n */\n\nvar UserRow = require('../../user/userRow')\n  , FeatureColumn = require('./featureColumn')\n  , GeometryData = require('../../geom/geometryData')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Feature Row containing the values from a single result set row\n * @param  {FeatureTable} featureTable feature table\n * @param  {Array} columnTypes  column types\n * @param  {Array} values       values\n */\nvar FeatureRow = function(featureTable, columnTypes, values) {\n  UserRow.call(this, featureTable, columnTypes, values);\n  this.featureTable = featureTable;\n}\n\nutil.inherits(FeatureRow, UserRow);\n\n/**\n * Get the geometry column index\n * @return {Number} geometry column index\n */\nFeatureRow.prototype.getGeometryColumnIndex = function () {\n  return this.featureTable.geometryIndex;\n};\n\n/**\n * Get the geometry column\n * @return {FeatureColumn} geometry column\n */\nFeatureRow.prototype.getGeometryColumn = function () {\n  return this.featureTable.getGeometryColumn();\n};\n\n/**\n * Get the geometry\n * @return {Buffer} geometry data\n */\nFeatureRow.prototype.getGeometry = function () {\n  return this.getValueWithIndex(this.featureTable.geometryIndex);\n};\n\n/**\n * Get the geometry's type\n * @return {String} geometry data\n */\nFeatureRow.prototype.getGeometryType = function () {\n  var geometryType = null;\n  var geometry = this.getValueWithIndex(this.featureTable.geometryIndex);\n  if (geometry !== null) {\n    geometryType = geometry.toGeoJSON().type;\n  }\n  return geometryType;\n};\n\n/**\n * set the geometry\n * @param {Buffer} geometryData geometry data\n */\nFeatureRow.prototype.setGeometry = function (geometryData) {\n  this.setValueWithIndex(this.featureTable.geometryIndex, geometryData);\n};\n\nFeatureRow.prototype.toObjectValue = function (index, value) {\n  var objectValue = value;\n  var column = this.getColumnWithIndex(index);\n  if (column.isGeometry() && value) {\n    objectValue = new GeometryData(value);\n  }\n  return objectValue;\n};\n\nFeatureRow.prototype.toDatabaseValue = function(columnName) {\n  var column = this.getColumnWithColumnName(columnName);\n  var value = this.getValueWithColumnName(columnName);\n  if (column.isGeometry() && value.toData) {\n    return value.toData();\n  } else if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) {\n    return value === true ? 1 : 0;\n  }\n\n  return value;\n}\n\nmodule.exports = FeatureRow;\n\n},{\"../../db/dataTypes\":14,\"../../geom/geometryData\":73,\"../../user/userRow\":107,\"./featureColumn\":65,\"util\":343}],68:[function(require,module,exports){\n/**\n * featureTable module.\n * @module features/user/featureTable\n */\n\nvar UserTable = require('../../user/userTable');\n\nvar util = require('util');\n\n/**\n * Represents a user feature table\n * @param  {string} tableName table name\n * @param  {array} columns   feature columns\n */\nvar FeatureTable = function(tableName, columns) {\n  UserTable.call(this, tableName, columns);\n  var geometry = undefined;\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    if (column.isGeometry()) {\n      this.duplicateCheck(column.index, geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY');\n      geometry = column.index;\n    }\n  }\n  this.missingCheck(geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY');\n  this.geometryIndex = geometry;\n}\n\nutil.inherits(FeatureTable, UserTable);\n\n/**\n * Get the geometry feature column\n * @return {FeatureColumn} geometry feature column\n */\nFeatureTable.prototype.getGeometryColumn = function () {\n  return this.getColumnWithIndex(this.geometryIndex);\n};\n\nFeatureTable.prototype.getTableType = function() {\n  return UserTable.FEATURE_TABLE;\n}\n\n/**\n * The FeatureTable\n * @type {FeatureTable}\n */\nmodule.exports = FeatureTable;\n\n},{\"../../user/userTable\":108,\"util\":343}],69:[function(require,module,exports){\n/**\n * featureTableReader module.\n * @module features/user/featureTableReader\n */\n\nvar UserTableReader = require('../../user/userTableReader')\n  , FeatureTable = require('./featureTable')\n  , FeatureColumn = require('./featureColumn')\n  , GeometryColumnsDao = require('../columns').GeometryColumnsDao\n  , DataTypes = require('../../db/dataTypes')\n  , wkb = require('../../wkb');\n\nvar util = require('util');\n\n/**\n* Reads the metadata from an existing feature table\n* @class FeatureTableReader\n* @extends {module:user~UserTableReader}\n*/\nvar FeatureTableReader = function(tableNameOrGeometryColumns) {\n  if (util.isString(tableNameOrGeometryColumns)) {\n    UserTableReader.call(this, tableNameOrGeometryColumns);\n  } else {\n    UserTableReader.call(this, tableNameOrGeometryColumns.table_name);\n    this.geometryColumns = tableNameOrGeometryColumns;\n  }\n}\n\nutil.inherits(FeatureTableReader, UserTableReader);\n\nFeatureTableReader.prototype.readFeatureTable = function (geoPackage) {\n  if (!this.geometryColumns) {\n    var gcd = new GeometryColumnsDao(geoPackage);\n    this.geometryColumns = gcd.queryForTableName(this.table_name);\n    return this.readTable(geoPackage.getDatabase());\n  } else {\n    return this.readTable(geoPackage.getDatabase());\n  }\n};\n\nFeatureTableReader.prototype.createTable = function (tableName, columns) {\n  return new FeatureTable(tableName, columns);\n};\n\nFeatureTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValue, primaryKey) {\n  var geometry = name === this.geometryColumns.column_name;\n  var geometryType = undefined;\n  var dataType = undefined;\n  if (geometry) {\n    geometryType = wkb.fromName(type);\n  } else {\n    dataType = DataTypes.fromName(type);\n  }\n  var column = new FeatureColumn(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType);\n\n  return column;\n};\n\n/**\n * The FeatureTableReader\n * @type {FeatureTableReader}\n */\nmodule.exports = FeatureTableReader;\n\n},{\"../../db/dataTypes\":14,\"../../user/userTableReader\":109,\"../../wkb\":111,\"../columns\":64,\"./featureColumn\":65,\"./featureTable\":68,\"util\":343}],70:[function(require,module,exports){\n\n/**\n * @module geoPackage\n */\n\nvar SpatialReferenceSystemDao = require('./core/srs').SpatialReferenceSystemDao\n  , GeometryColumnsDao = require('./features/columns').GeometryColumnsDao\n  , FeatureDao = require('./features/user/featureDao')\n  , FeatureTableReader = require('./features/user/featureTableReader')\n  , ContentsDao = require('./core/contents').ContentsDao\n  , Contents = require('./core/contents').Contents\n  , TileMatrixSetDao = require('./tiles/matrixset').TileMatrixSetDao\n  , TileMatrixSet = require('./tiles/matrixset').TileMatrixSet\n  , TileMatrixDao = require('./tiles/matrix').TileMatrixDao\n  , TileMatrix = require('./tiles/matrix').TileMatrix\n  , TileTableReader = require('./tiles/user/tileTableReader')\n  , TileDao = require('./tiles/user/tileDao')\n  , TileTable = require('./tiles/user/tileTable')\n  , TileBoundingBoxUtils = require('./tiles/tileBoundingBoxUtils')\n  , TableCreator = require('./db/tableCreator')\n  , UserTable = require('./user/userTable')\n  , FeatureTable = require('./features/user/featureTable')\n  , DataColumnsDao = require('./dataColumns').DataColumnsDao\n  , DataColumnConstraintsDao = require('./dataColumnConstraints').DataColumnConstraintsDao\n  , MetadataDao = require('./metadata').MetadataDao\n  , MetadataReferenceDao = require('./metadata/reference').MetadataReferenceDao\n  , ExtensionDao = require('./extension').ExtensionDao\n  , CrsWktExtension = require('./extension/crsWkt').CrsWktExtension\n  , SchemaExtension = require('./extension/schema').SchemaExtension\n  , RelatedTablesExtension = require('./extension/relatedTables')\n  , TableIndexDao = require('./extension/index/tableIndex').TableIndexDao\n  , GeometryIndexDao = require('./extension/index/geometryIndex').GeometryIndexDao\n  , ExtendedRelationDao = require('./extension/relatedTables/extendedRelation').ExtendedRelationDao\n  , ContentsIdDao = require('./extension/contents/contentsIdDao')\n  , ContentsIdExtension = require('./extension/contents/.')\n  , FeatureStyleExtension = require('./extension/style/.')\n  , AttributeTable = require('./attributes/attributeTable')\n  , AttributeTableReader = require('./attributes/attributeTableReader')\n  , AttributeDao = require('./attributes/attributeDao')\n  , DataTypes = require('./db/dataTypes');\n\nvar proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4; // Module loading hack\n\nvar defs = require('./proj4Defs');\nfor (var name in defs) {\n  if (defs[name]) {\n    proj4.defs(name, defs[name]);\n  }\n}\n\n/**\n * A `GeoPackage` instance is the interface to a physical GeoPackage SQLite\n * database.\n * @param {string} name\n * @param {string} path\n * @param {module:db/geoPackageConnection~GeoPackageConnection} connection\n * @class\n */\nvar GeoPackage = module.exports = function(name, path, connection) {\n  this.name = name;\n  this.path = path;\n  this.connection = connection;\n  this.tableCreator = new TableCreator(this);\n}\n\nGeoPackage.loadProjections = function(items) {\n  if (!(items instanceof Array)) throw new Error('Invalid array of projections');\n  for (var i = 0; i < items.length; i++) {\n    if (!defs[items[i]]) throw new Error('Projection not found');\n    this.addProjection(items[i], defs[items[i]]);\n  }\n}\n\nGeoPackage.addProjection = function(name, definition) {\n  if (!name || ! definition) throw new Error('Invalid projection name/definition');\n  proj4.defs(''+name, ''+definition);\n}\n\nGeoPackage.hasProjection = function(name) {\n  return proj4.defs(''+name);\n}\n\nGeoPackage.prototype.close = function() {\n  this.connection.close();\n}\n\nGeoPackage.prototype.getDatabase = function() {\n  return this.connection;\n}\n\nGeoPackage.prototype.getPath = function() {\n  return this.path;\n}\n\nGeoPackage.prototype.export = function(callback) {\n  this.connection.export(callback);\n}\n\n/**\n * Get the GeoPackage name\n * @return {String} the GeoPackage name\n */\nGeoPackage.prototype.getName = function() {\n  return this.name;\n}\n\n/**\n * @returns {module:core/srs~SpatialReferenceSystemDao} the DAO to access the [SRS table]{@link module:core/srs~SpatialReferenceSystem} in this `GeoPackage`\n */\nGeoPackage.prototype.getSpatialReferenceSystemDao = function() {\n  return this.spatialReferenceSystemDao || (this.spatialReferenceSystemDao = new SpatialReferenceSystemDao(this));\n}\n\n/**\n * @returns {module:core/contents~ContentsDao} the DAO to access the [contents table]{@link module:core/contents~Contents} in this `GeoPackage`\n */\nGeoPackage.prototype.getContentsDao = function() {\n  return this.contentsDao || (this.contentsDao = new ContentsDao(this));\n}\n\n/**\n * @returns {module:tiles/matrixset~TileMatrixSetDao} the DAO to access the [tile matrix set]{@link module:tiles/matrixset~TileMatrixSet} in this `GeoPackage`\n */\nGeoPackage.prototype.getTileMatrixSetDao = function () {\n  return this.tileMatrixSetDao || (this.tileMatrixSetDao = new TileMatrixSetDao(this));\n};\n\n/**\n * @returns {module:tiles/matrixset~TileMatrixDao} the DAO to access the [tile matrix]{@link module:tiles/matrixset~TileMatrix} in this `GeoPackage`\n */\nGeoPackage.prototype.getTileMatrixDao = function() {\n  return this.tileMatrixDao || (this.tileMatrixDao = new TileMatrixDao(this));\n}\n\nGeoPackage.prototype.getDataColumnsDao = function() {\n  return this.dataColumnsDao || (this.dataColumnsDao = new DataColumnsDao(this));\n}\n\nGeoPackage.prototype.getExtensionDao = function() {\n  return this.extensionDao || (this.extensionDao = new ExtensionDao(this));\n}\n\nGeoPackage.prototype.getTableIndexDao = function() {\n  return this.tableIndexDao || (this.tableIndexDao = new TableIndexDao(this));\n}\n\nGeoPackage.prototype.getGeometryColumnsDao = function () {\n  return this.geometryColumnsDao || (this.geometryColumnsDao = new GeometryColumnsDao(this));\n};\n\nGeoPackage.prototype.getDataColumnConstraintsDao = function () {\n  return this.dataColumnConstraintsDao || (this.dataColumnConstraintsDao = new DataColumnConstraintsDao(this));\n};\n\nGeoPackage.prototype.getMetadataReferenceDao = function () {\n  return this.metadataReferenceDao || (this.metadataReferenceDao = new MetadataReferenceDao(this));\n};\n\nGeoPackage.prototype.getMetadataDao = function () {\n  return this.metadataDao || (this.metadataDao = new MetadataDao(this));\n};\n\nGeoPackage.prototype.getExtendedRelationDao = function() {\n  return this.extendedRelationDao || (this.extendedRelationDao = new ExtendedRelationDao(this));\n}\n\nGeoPackage.prototype.getContentsIdDao = function() {\n  return this.contentsIdDao || (this.contentsIdDao = new ContentsIdDao(this));\n}\n\nGeoPackage.prototype.getContentsIdExtension = function() {\n  return this.contentsIdExtension || (this.contentsIdExtension = new ContentsIdExtension(this));\n}\n\nGeoPackage.prototype.getFeatureStyleExtension = function() {\n  return this.featureStyleExtension || (this.featureStyleExtension = new FeatureStyleExtension(this));\n}\n\nGeoPackage.prototype.getGeometryIndexDao = function(featureDao) {\n  return new GeometryIndexDao(this, featureDao);\n}\n\nGeoPackage.prototype.getRelatedTablesExtension = function() {\n  return this.relatedTablesExtension || (this.relatedTablesExtension = new RelatedTablesExtension(this));\n}\n\nGeoPackage.prototype.getSrs = function(srsId) {\n  var dao = this.getSpatialReferenceSystemDao();\n  return dao.queryForId(srsId);\n}\n\nGeoPackage.prototype.createRequiredTables = function() {\n  var geopackage = this;\n  return this.tableCreator.createRequired()\n  .then(function(results) {\n    return geopackage;\n  });\n}\n\nGeoPackage.prototype.createSupportedExtensions = function() {\n  var crs = new CrsWktExtension(this);\n  crs.getOrCreateExtension();\n  var schema = new SchemaExtension(this);\n  schema.getOrCreateExtension();\n  return this;\n}\n\n/**\n * @returns {module:tiles/user/tileDao~TileDao} the `TileDao` to access [tiles]{@link module:tiles/user/tileTable}\n */\nGeoPackage.prototype.getTileDaoWithTileMatrixSet = function (tileMatrixSet) {\n  var tileMatrices = [];\n  var tileMatrixDao = this.getTileMatrixDao();\n  var results = tileMatrixDao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, tileMatrixSet.table_name, null, null, TileMatrixDao.COLUMN_ZOOM_LEVEL + ' ASC, ' + TileMatrixDao.COLUMN_PIXEL_X_SIZE + ' DESC, ' + TileMatrixDao.COLUMN_PIXEL_Y_SIZE + ' DESC');\n  results.forEach(function(result) {\n    var tm = new TileMatrix();\n    tileMatrixDao.populateObjectFromResult(tm, result);\n    tileMatrices.push(tm);\n  });\n  var tableReader = new TileTableReader(tileMatrixSet);\n  var tileTable = tableReader.readTileTable(this);\n  return new TileDao(this, tileTable, tileMatrixSet, tileMatrices);\n};\n\nGeoPackage.prototype.getTileDaoWithContents = function (contents) {\n  var dao = this.getContentsDao();\n  var tileMatrixSet = dao.getTileMatrixSet(contents);\n  return this.getTileDaoWithTileMatrixSet(tileMatrixSet);\n};\n\nGeoPackage.prototype.getTileDao = function (tableName) {\n  var tms = this.getTileMatrixSetDao();\n  var results = tms.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, tableName);\n  if (results.length > 1) {\n    throw new Error('Unexpected state. More than one Tile Matrix Set matched for table name: ' + tableName + ', count: ' + results.length);\n  } else if (results.length === 0) {\n    throw new Error('No Tile Matrix found for table name: ' + tableName);\n  }\n  var tileMatrixSet = new TileMatrixSet();\n  tms.populateObjectFromResult(tileMatrixSet, results[0]);\n  return this.getTileDaoWithTileMatrixSet(tileMatrixSet);\n};\n\n/**\n * Return a hash containing arrays of table names grouped under keys `features`,\n * `tiles`, and `attributes`.\n * @return {{features: string[], tiles: string[], attributes: string[]}}\n */\nGeoPackage.prototype.getTables = function() {\n  var tables = {};\n  var featureTables = this.getFeatureTables();\n  tables.features = featureTables;\n  var tileTables = this.getTileTables();\n  tables.tiles = tileTables;\n  var attributesTables = this.getAttributesTables();\n  tables.attributes = attributesTables;\n  return tables;\n};\n\nGeoPackage.prototype.getAttributesTables = function() {\n  return this.getContentsDao().getTables(ContentsDao.GPKG_CDT_ATTRIBUTES_NAME);\n}\n\nGeoPackage.prototype.hasAttributeTable = function(attributeTableName) {\n  var tables = this.getAttributesTables();\n  return tables && tables.indexOf(attributeTableName) != -1;\n}\n\n/**\n *  Get the tile tables\n *  @param {callback} callback called with an error if one occurred and the array of {TileTable} names\n */\nGeoPackage.prototype.getTileTables = function () {\n  var tms = this.getTileMatrixSetDao();\n  if (!tms.isTableExists()) {\n    return [];\n  }\n  return tms.getTileTables();\n};\n\n/**\n * Checks if the tile table exists in the GeoPackage\n * @param  {String} tileTableName name of the table to query for\n * @param  {Function} callback   called with an error if one occurred and true or false for the existence of the table\n */\nGeoPackage.prototype.hasTileTable = function(tileTableName) {\n  var tables = this.getTileTables();\n  return tables && tables.indexOf(tileTableName) != -1;\n};\n\n/**\n * Checks if the feature table exists in the GeoPackage\n * @param  {GeoPackage}   geopackage open GeoPackage object\n * @param  {String} featureTableName name of the table to query for\n * @param  {Function} callback   called with an error if one occurred and true or false for the existence of the table\n */\nGeoPackage.prototype.hasFeatureTable = function(featureTableName) {\n  var tables = this.getFeatureTables();\n  return tables && tables.indexOf(featureTableName) != -1;\n};\n\n/**\n *  Get the feature tables\n *  @param {callback} callback called with an error if one occurred and the array of {FeatureTable} names\n */\nGeoPackage.prototype.getFeatureTables = function () {\n  var gcd = this.getGeometryColumnsDao();\n  if (!gcd.isTableExists()) {\n    return [];\n  }\n  return gcd.getFeatureTables();\n};\n\nGeoPackage.prototype.isTable = function(tableName) {\n  return !!this.connection.tableExists(tableName);\n}\n\nGeoPackage.prototype.isTableType = function(type, tableName) {\n  return type === this.getTableType(tableName);\n}\n\nGeoPackage.prototype.getTableType = function(tableName) {\n  var contents = this.getTableContents(tableName);\n  if (contents) {\n    return contents.data_type;\n  }\n}\n\nGeoPackage.prototype.getTableContents = function(tableName) {\n  return this.getContentsDao().queryForId(tableName);\n}\n\nGeoPackage.prototype.deleteTable = function(tableName) {\n  this.connection.dropTable(tableName);\n}\n\nGeoPackage.prototype.getTableCreator = function() {\n  return this.tableCreator;\n}\n\nGeoPackage.prototype.index = function() {\n  var tables = this.getFeatureTables();\n\n  return tables.reduce(function(sequence, table) {\n    return sequence.then(function() {\n      return this.indexFeatureTable(table)\n      .then(function(indexed) {\n        if (indexed) {\n          return true;\n        } else {\n          throw new Error('Unable to index table ' + table);\n        }\n      });\n    }.bind(this))\n  }.bind(this), Promise.resolve());\n}\n\nGeoPackage.prototype.indexFeatureTable = function(table, progress) {\n  var featureDao = this.getFeatureDao(table);\n  var fti = featureDao.featureTableIndex;\n  return new Promise(function(resolve, reject) {\n    var tableIndex = fti.getTableIndex();\n    if (tableIndex) {\n      return resolve(true);\n    }\n    resolve(fti.index(progress));\n  });\n}\n\n/**\n *  Get a Feature DAO from Geometry Columns\n *\n *  @param {GeometryColumns} geometryColumns Geometry Columns\n *  @param {callback} callback called with an error if one occurred and the {FeatureDao}\n */\nGeoPackage.prototype.getFeatureDaoWithGeometryColumns = function (geometryColumns) {\n  if (!geometryColumns) {\n    throw new Error('Non null Geometry Columns is required to create Feature DAO');\n  }\n\n  var tableReader = new FeatureTableReader(geometryColumns);\n  var featureTable = tableReader.readFeatureTable(this);\n  var dao = new FeatureDao(this, featureTable, geometryColumns, this.metadataDb);\n  return dao;\n};\n\n/**\n * Get a Feature DAO from Contents\n * @param  {Contents}   contents Contents\n * @param  {Function} callback callback called with an error if one occurred and the {FeatureDao}\n */\nGeoPackage.prototype.getFeatureDaoWithContents = function (contents) {\n  var dao = this.getContentsDao();\n  var columns = dao.getGeometryColumns(contents);\n  return this.getFeatureDaoWithGeometryColumns(columns);\n};\n\n/**\n * Get a Feature DAO from Contents\n * @param  {string}   tableName table name\n * @param  {Function} callback callback called with an error if one occurred and the {FeatureDao}\n */\nGeoPackage.prototype.getFeatureDao = function (tableName) {\n  var dao = this.getGeometryColumnsDao();\n  var geometryColumns = dao.queryForTableName(tableName);\n  if (!geometryColumns) {\n    throw new Error('No Feature Table exists for table name: ' + tableName);\n  }\n  return this.getFeatureDaoWithGeometryColumns(geometryColumns);\n};\n\n/**\n * Queries for GeoJSON features in a feature table\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} callback    Caled with err, featureArray\n */\nGeoPackage.prototype.queryForGeoJSONFeaturesInTable = function(tableName, boundingBox) {\n  var featureDao = this.getFeatureDao(tableName);\n  var features = [];\n  var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox);\n  for (var feature of iterator) {\n    features.push(feature);\n  }\n  return features;\n}\n\n/**\n * iterates GeoJSON features in a feature table within a bounding box\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} rowCallback    Caled with err, geoJSON\n * @param  {Function} doneCallback    Caled with err if one occurred\n */\nGeoPackage.prototype.iterateGeoJSONFeaturesInTableWithinBoundingBox = function(tableName, boundingBox) {\n  var featureDao = this.getFeatureDao(tableName);\n  return featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox);\n}\n\n/**\n * Create the Geometry Columns table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createGeometryColumnsTable = function () {\n  var dao = this.getGeometryColumnsDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createGeometryColumns();\n};\n\n/**\n * Get a Attribute DAO\n * @param  {string}   tableName table name\n * @param  {Function} callback callback called with an error if one occurred and the {AttributeDao}\n */\nGeoPackage.prototype.getAttributeDaoWithTableName = function (tableName) {\n  var dao = this.getContentsDao();\n  var contents = dao.queryForId(tableName);\n  return this.getAttributeDaoWithContents(contents);\n};\n\n/**\n * Get a Attribute DAO\n * @param  {Contents}   contents Contents\n * @param  {Function} callback callback called with an error if one occurred and the {AttributeDao}\n */\nGeoPackage.prototype.getAttributeDaoWithContents = function (contents) {\n  if (!contents) {\n    throw new Error('Non null Contents is required to create an Attributes DAO');\n  }\n\n  var reader = new AttributeTableReader(contents.table_name);\n  var table = reader.readTable(this.connection);\n  table.setContents(contents);\n  return new AttributeDao(this, table);\n}\n\nGeoPackage.prototype.createAttributeTable = function(tableName, columns, dataColumns) {\n  return Promise.resolve()\n  .then(function() {\n    var attributeTable = new AttributeTable(tableName, columns);\n    var result = this.tableCreator.createUserTable(attributeTable);\n    var contents = new Contents();\n    contents.table_name = tableName;\n    contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME;\n    contents.identifier = tableName;\n    contents.last_change = new Date().toISOString();\n\n    return this.getContentsDao().create(contents);\n  }.bind(this))\n  .then(function() {\n    if (dataColumns) {\n      return this.createDataColumns()\n      .then(function() {\n        var dataColumnsDao = this.getDataColumnsDao();\n        dataColumns.forEach(function(dataColumn) {\n          dataColumnsDao.create(dataColumn);\n        });\n      }.bind(this));\n    }\n  }.bind(this))\n  .then(function() {\n    return true;\n  });\n}\n\n/**\n * Create the given {@link module:features/user/featureTable~FeatureTable}\n * @param  {FeatureTable}   featureTable    feature table\n */\nGeoPackage.prototype.createFeatureTable = function(featureTable) {\n  return this.tableCreator.createUserTable(featureTable);\n};\n\nGeoPackage.prototype.createFeatureTableWithGeometryColumns = function(geometryColumns, boundingBox, srsId, columns) {\n  return this.createFeatureTableWithGeometryColumnsAndDataColumns(geometryColumns, boundingBox, srsId, columns, undefined);\n};\n\nGeoPackage.prototype.createFeatureTableWithGeometryColumnsAndDataColumns = function(geometryColumns, boundingBox, srsId, columns, dataColumns) {\n  return this.createGeometryColumnsTable()\n  .then(function(result) {\n    var featureTable = new FeatureTable(geometryColumns.table_name, columns);\n    var result = this.createFeatureTable(featureTable);\n    var contents = new Contents();\n    contents.table_name = geometryColumns.table_name;\n    contents.data_type = ContentsDao.GPKG_CDT_FEATURES_NAME;\n    contents.identifier = geometryColumns.table_name;\n    contents.last_change = new Date().toISOString();\n    contents.min_x = boundingBox.minLongitude;\n    contents.min_y = boundingBox.minLatitude;\n    contents.max_x = boundingBox.maxLongitude;\n    contents.max_y = boundingBox.maxLatitude;\n    contents.srs_id = srsId;\n\n    this.getContentsDao().create(contents);\n    geometryColumns.srs_id = srsId;\n    return this.getGeometryColumnsDao().create(geometryColumns);\n  }.bind(this))\n  .then(function() {\n    if (dataColumns) {\n      return this.createDataColumns()\n      .then(function() {\n        var dataColumnsDao = this.getDataColumnsDao();\n        dataColumns.forEach(function(dataColumn) {\n          dataColumnsDao.create(dataColumn);\n        });\n      }.bind(this));\n    }\n  }.bind(this))\n  .then(function() {\n    return true;\n  });\n};\n\n/**\n * Create the Tile Matrix Set table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createTileMatrixSetTable = function() {\n  var dao = this.getTileMatrixSetDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createTileMatrixSet();\n}\n\n/**\n * Create the Tile Matrix table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createTileMatrixTable = function() {\n  var dao = this.getTileMatrixDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createTileMatrix();\n};\n\n/**\n * Create the given tile table in this GeoPackage.\n *\n * @param  {module:tiles/user/tileTable~TileTable} tileTable\n * @returns {@link module:db/tableCreator~TableCreator#createUserTable}\n */\nGeoPackage.prototype.createTileTable = function(tileTable) {\n  return this.tableCreator.createUserTable(tileTable);\n};\n\n/**\n * Create a new [tile table]{@link module:tiles/user/tileTable~TileTable} in this GeoPackage.\n *\n * @param {String} tableName tile table name\n * @param {BoundingBox} contentsBoundingBox bounding box of the contents table\n * @param {Number} contentsSrsId srs id of the contents table\n * @param {BoundingBox} tileMatrixSetBoundingBox bounding box of the matrix set\n * @param {Number} tileMatrixSetSrsId srs id of the matrix set\n * @returns {Promise<module:tiles/matrixset~TileMatrixSet>} `Promise` of the created {@link module:tiles/matrixset~TileMatrixSet}\n */\nGeoPackage.prototype.createTileTableWithTableName = function(tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId) {\n  const columns = TileTable.createRequiredColumns();\n  const tileTable = new TileTable(tableName, columns);\n  const contents = new Contents();\n  contents.table_name = tableName;\n  contents.data_type = ContentsDao.GPKG_CDT_TILES_NAME;\n  contents.identifier = tableName;\n  contents.last_change = new Date().toISOString();\n  contents.min_x = contentsBoundingBox.minLongitude;\n  contents.min_y = contentsBoundingBox.minLatitude;\n  contents.max_x = contentsBoundingBox.maxLongitude;\n  contents.max_y = contentsBoundingBox.maxLatitude;\n  contents.srs_id = contentsSrsId;\n\n  const tileMatrixSet = new TileMatrixSet();\n  tileMatrixSet.setContents(contents);\n  tileMatrixSet.srs_id = tileMatrixSetSrsId;\n  tileMatrixSet.min_x = tileMatrixSetBoundingBox.minLongitude;\n  tileMatrixSet.min_y = tileMatrixSetBoundingBox.minLatitude;\n  tileMatrixSet.max_x = tileMatrixSetBoundingBox.maxLongitude;\n  tileMatrixSet.max_y = tileMatrixSetBoundingBox.maxLatitude;\n\n  return this.createTileMatrixSetTable()\n    .then(function() {\n      return this.createTileMatrixTable();\n    }.bind(this))\n    .then(function() {\n      return this.createTileTable(tileTable);\n    }.bind(this))\n    .then(function() {\n      return this.getContentsDao().create(contents);\n    }.bind(this))\n    .then(function() {\n      return this.getTileMatrixSetDao().create(tileMatrixSet);\n    }.bind(this))\n    .then(function() {\n      return tileMatrixSet;\n    });\n};\n\n/**\n * Create the tables and rows necessary to store tiles in a {@link module:tiles/matrixset~TileMatrixSet}.\n * This will create a [tile matrix row]{@link module:tiles/matrix~TileMatrix}\n * for every integral zoom level in the range `[minZoom..maxZoom]`.\n *\n * @param {BoundingBox} epsg3857TileBoundingBox\n * @param {module:tiles/matrixset~TileMatrixSet} tileMatrixSet\n * @param {number} minZoom\n * @param {number} maxZoom\n * @param {number} [tileSize=256] optional tile size in pixels\n * @returns {module:geoPackage~GeoPackage} `this` `GeoPackage`\n */\nGeoPackage.prototype.createStandardWebMercatorTileMatrix = function(epsg3857TileBoundingBox, tileMatrixSet, minZoom, maxZoom, tileSize) {\n  tileSize = tileSize || 256;\n  var tileMatrixDao = this.getTileMatrixDao();\n\n  for (var zoom = minZoom; zoom <= maxZoom; zoom++) {\n    var box = TileBoundingBoxUtils.webMercatorTileBox(epsg3857TileBoundingBox, zoom);\n    var matrixWidth = (box.maxX - box.minX) + 1;\n    var matrixHeight = (box.maxY - box.minY) + 1;\n\n    var pixelXSize = ((epsg3857TileBoundingBox.maxLongitude - epsg3857TileBoundingBox.minLongitude) / matrixWidth) / tileSize;\n    var pixelYSize = ((epsg3857TileBoundingBox.maxLatitude - epsg3857TileBoundingBox.minLatitude) / matrixHeight) / tileSize;\n\n    var tileMatrix = new TileMatrix();\n    tileMatrix.table_name = tileMatrixSet.table_name;\n    tileMatrix.zoom_level = zoom;\n    tileMatrix.matrix_width = matrixWidth;\n    tileMatrix.matrix_height = matrixHeight;\n    tileMatrix.tile_width = tileSize;\n    tileMatrix.tile_height = tileSize;\n    tileMatrix.pixel_x_size = pixelXSize;\n    tileMatrix.pixel_y_size = pixelYSize;\n    tileMatrixDao.create(tileMatrix);\n  }\n\n  return this;\n};\n\n/**\n * Adds a tile to the GeoPackage\n * @param  {object}   tile       Byte array or Buffer containing the tile bytes\n * @param  {String}   tableName  Table name to add the tile to\n * @param  {Number}   zoom       zoom level of this tile\n * @param  {Number}   tileRow    row of this tile\n * @param  {Number}   tileColumn column of this tile\n */\nGeoPackage.prototype.addTile = function(tileStream, tableName, zoom, tileRow, tileColumn) {\n  var tileDao = this.getTileDao(tableName);\n  var newRow = tileDao.newRow();\n  newRow.setZoomLevel(zoom);\n  newRow.setTileColumn(tileColumn);\n  newRow.setTileRow(tileRow);\n  newRow.setTileData(tileStream);\n  return tileDao.create(newRow);\n};\n\n/**\n * Create the Data Columns table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createDataColumns = function() {\n  var dao = this.getDataColumnsDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createDataColumns();\n};\n\n/**\n * Create the Data Column Constraints table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createDataColumnConstraintsTable = function () {\n  var dao = this.getDataColumnConstraintsDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createDataColumnConstraints();\n};\n\nGeoPackage.prototype.createMetadataTable = function () {\n  var dao = this.getMetadataDao()\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createMetadata();\n};\n\nGeoPackage.prototype.createMetadataReferenceTable = function () {\n  var dao = this.getMetadataReferenceDao()\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createMetadataReference();\n};\n\nGeoPackage.prototype.createExtensionTable = function () {\n  var dao = this.getExtensionDao()\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createExtensions();\n};\n\nGeoPackage.prototype.createTableIndexTable = function () {\n  var dao = this.getTableIndexDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createTableIndex();\n};\n\nGeoPackage.prototype.createGeometryIndexTable = function() {\n  var dao = this.getGeometryIndexDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createGeometryIndex();\n};\n\nGeoPackage.prototype.createStyleMappingTable = function(tableName, columns, dataColumns) {\n  return Promise.resolve()\n    .then(function() {\n      var attributeTable = new StyleMappingTable(tableName, columns);\n      var result = this.tableCreator.createUserTable(attributeTable);\n      var contents = new Contents();\n      contents.table_name = tableName;\n      contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME;\n      contents.identifier = tableName;\n      contents.last_change = new Date().toISOString();\n\n      return this.getContentsDao().create(contents);\n    }.bind(this))\n    .then(function() {\n      if (dataColumns) {\n        return this.createDataColumns()\n          .then(function() {\n            var dataColumnsDao = this.getDataColumnsDao();\n            dataColumns.forEach(function(dataColumn) {\n              dataColumnsDao.create(dataColumn);\n            });\n          }.bind(this));\n      }\n    }.bind(this))\n    .then(function() {\n      return true;\n    });\n}\n\n/**\n * Get the application id of the GeoPackage\n * @param  {Function} callback callback called with the application id\n */\nGeoPackage.prototype.getApplicationId = function() {\n  var connection = this.getDatabase();\n  return connection.getApplicationId();\n}\n\nGeoPackage.prototype.getInfoForTable = function (tableDao) {\n  var info = {};\n  info.tableName = tableDao.table_name;\n  info.tableType = tableDao.table.getTableType();\n  info.count = tableDao.getCount();\n  if (info.tableType === UserTable.FEATURE_TABLE) {\n    info.geometryColumns = {};\n    info.geometryColumns.tableName = tableDao.geometryColumns.table_name;\n    info.geometryColumns.geometryColumn = tableDao.geometryColumns.column_name;\n    info.geometryColumns.geometryTypeName = tableDao.geometryColumns.geometry_type_name;\n    info.geometryColumns.z = tableDao.geometryColumns.z;\n    info.geometryColumns.m = tableDao.geometryColumns.m;\n  }\n  if (info.tableType === UserTable.TILE_TABLE) {\n    info.minZoom = tableDao.minZoom;\n    info.maxZoom = tableDao.maxZoom;\n    info.minWebMapZoom = tableDao.minWebMapZoom;\n    info.maxWebMapZoom = tableDao.maxWebMapZoom;\n    info.zoomLevels = tableDao.tileMatrices.length;\n  }\n\n  var dao;\n  var contentsRetriever;\n  if (info.tableType === UserTable.FEATURE_TABLE) {\n    dao = this.getGeometryColumnsDao();\n    contentsRetriever = tableDao.geometryColumns;\n  } else if (info.tableType === UserTable.TILE_TABLE) {\n    dao = this.getTileMatrixSetDao();\n    contentsRetriever = tableDao.tileMatrixSet;\n    info.tileMatrixSet = {};\n    info.tileMatrixSet.srsId = tableDao.tileMatrixSet.srs_id;\n    info.tileMatrixSet.minX = tableDao.tileMatrixSet.min_x;\n    info.tileMatrixSet.maxX = tableDao.tileMatrixSet.max_x;\n    info.tileMatrixSet.minY = tableDao.tileMatrixSet.min_y;\n    info.tileMatrixSet.maxY = tableDao.tileMatrixSet.max_y;\n  }\n  var contents = dao.getContents(contentsRetriever);\n  info.contents = {};\n  info.contents.tableName = contents.table_name;\n  info.contents.dataType = contents.data_type;\n  info.contents.identifier = contents.identifier;\n  info.contents.description = contents.description;\n  info.contents.lastChange = contents.last_change;\n  info.contents.minX = contents.min_x;\n  info.contents.maxX = contents.max_x;\n  info.contents.minY = contents.min_y;\n  info.contents.maxY = contents.max_y;\n  var contentsDao = this.getContentsDao();\n  var contentsSrs = contentsDao.getSrs(contents);\n  info.contents.srs = {\n    name:contentsSrs.srs_name,\n    id:contentsSrs.srs_id,\n    organization:contentsSrs.organization,\n    organization_coordsys_id:contentsSrs.organization_coordsys_id,\n    definition:contentsSrs.definition,\n    description:contentsSrs.description\n  };\n  var srs = tableDao.getSrs();\n\n  info.srs = {\n    name:srs.srs_name,\n    id:srs.srs_id,\n    organization:srs.organization,\n    organization_coordsys_id:srs.organization_coordsys_id,\n    definition:srs.definition,\n    description:srs.description\n  };\n  info.columns = [];\n  info.columnMap = {};\n\n  var dcd = this.getDataColumnsDao();\n\n  tableDao.table.columns.forEach(function(column) {\n    var dataColumn = dcd.getDataColumns(tableDao.table.table_name, column.name);\n    info.columns.push({\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey,\n      dataType: column.dataType ? DataTypes.name(column.dataType) : '',\n      displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,\n      dataColumn: dataColumn\n    });\n    info.columnMap[column.name] = info.columns[info.columns.length-1];\n  }.bind(this));\n\n  return info;\n};\n\n},{\"./attributes/attributeDao\":3,\"./attributes/attributeTable\":5,\"./attributes/attributeTableReader\":6,\"./core/contents\":8,\"./core/srs\":9,\"./dataColumnConstraints\":12,\"./dataColumns\":13,\"./db/dataTypes\":14,\"./db/tableCreator\":19,\"./extension\":25,\"./extension/contents/.\":23,\"./extension/contents/contentsIdDao\":22,\"./extension/crsWkt\":24,\"./extension/index/geometryIndex\":27,\"./extension/index/tableIndex\":28,\"./extension/relatedTables\":32,\"./extension/relatedTables/extendedRelation\":31,\"./extension/schema\":45,\"./extension/style/.\":54,\"./features/columns\":64,\"./features/user/featureDao\":66,\"./features/user/featureTable\":68,\"./features/user/featureTableReader\":69,\"./metadata\":74,\"./metadata/reference\":75,\"./proj4Defs\":77,\"./tiles/matrix\":90,\"./tiles/matrixset\":91,\"./tiles/tileBoundingBoxUtils\":93,\"./tiles/user/tileDao\":96,\"./tiles/user/tileTable\":99,\"./tiles/user/tileTableReader\":100,\"./user/userTable\":108,\"proj4\":285}],71:[function(require,module,exports){\n/**\n * GeoPackage Constants module.\n * @module dao/geoPackageConstants\n */\n\n/** @constant {string} GEOPACKAGE_EXTENSION Extension to GeoPackage files */\nexports.GEOPACKAGE_EXTENSION = 'gpkg';\n/** @constant {string} GEOPACKAGE_EXTENDED_EXTENSION Extension to GeoPackage extension files */\nexports.GEOPACKAGE_EXTENDED_EXTENSION = 'gpkx';\n/** @constant {string} APPLICATION_ID GeoPackage application id */\nexports.APPLICATION_ID = 'GPKG';\n/** @constant {string} USER_VERSION GeoPackage user version */\nexports.USER_VERSION = '10200';\n/** @constant {string} GEOPACKAGE_EXTENSION_AUTHOR GeoPackage author */\nexports.GEOPACKAGE_EXTENSION_AUTHOR = exports.GEOPACKAGE_EXTENSION;\n/** @constant {string} GEOMETRY_EXTENSION_PREFIX Geometry extension prefix */\nexports.GEOMETRY_EXTENSION_PREFIX = 'geom';\n/** @constant {string} GEOPACKAGE_GEOMETRY_MAGIX_NUMBER Expected magic number */\nexports.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER = 'GP';\n/** @constant {string} GEOPACKAGE_GEOMETRY_VERSION_1 Expected version 1 value */\nexports.GEOPACKAGE_GEOMETRY_VERSION_1 = 0;\n/** @constant {string} SQLITE_HEADER_PREFIX SQLite header string prefix */\nexports.SQLITE_HEADER_PREFIX = 'SQLite format 3';\n\n},{}],72:[function(require,module,exports){\nvar wkx = require('wkx');\nvar turfBbox = require('@turf/bbox');\n\nmodule.exports.buildEnvelopeWithGeometry = function(wkbGeometry) {\n  var geoJson = wkbGeometry.toGeoJSON();\n  var bbox = turfBbox(geoJson);\n  return {\n    minX: bbox[0],\n    minY: bbox[1],\n    maxX: bbox[2],\n    maxY: bbox[3]\n  };\n}\n\nmodule.exports.expandEnvelopeForGeometry = function(envelope, wkbGeometry) {\n\n}\n\n},{\"@turf/bbox\":117,\"wkx\":360}],73:[function(require,module,exports){\n(function (Buffer){\n/**\n * GeometryData module.\n * @module geom/geometryData\n */\n\nvar GeoPackageConstants = require('../geoPackageConstants');\n\nvar wkx = require('wkx');\n\nvar BIG_ENDIAN = 0;\nvar LITTLE_ENDIAN = 1;\n\n/**\n * GeoPackage Geometry Data\n */\nvar GeometryData = function(buffer) {\n  this.empty = true;\n  this.byteOrder = BIG_ENDIAN;\n  if (buffer) {\n    this.fromData(buffer);\n  }\n}\n\nmodule.exports = GeometryData;\n\nGeometryData.prototype.setSrsId = function(srsId) {\n  this.srsId = srsId;\n}\n\nGeometryData.prototype.setGeometry = function(wkbGeometry) {\n  this.empty = false;\n  this.geometry = wkbGeometry;\n}\n\nGeometryData.prototype.setEnvelope = function(envelope) {\n  this.envelope = envelope;\n}\n\nGeometryData.prototype.toGeoJSON = function() {\n  return this.geometry.toGeoJSON();\n}\n\nGeometryData.prototype.fromData = function (buffer) {\n  this.buffer = buffer;\n  if (buffer instanceof Uint8Array) {\n    this.buffer = buffer = Buffer.from(buffer);\n  }\n  var magicString = buffer.toString('ascii', 0, 2);\n  if (magicString !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER) {\n    throw new Error('Unexpected GeoPackage Geometry magic number: ' + magicString + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER);\n  }\n\n  var version = buffer.readUInt8(2);\n  if (version !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1) {\n    throw new Error('Unexpected GeoPackage Geometry version ' + version + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1);\n  }\n\n  var flags = buffer.readUInt8(3);\n  var envelopeIndicator = this.readFlags(flags);\n\n  this.srsId = buffer[this.byteOrder ? 'readUInt32LE' : 'readUInt32BE'](4);\n  var envelopeAndOffset = this.readEnvelope(envelopeIndicator, buffer);\n  this.envelope = envelopeAndOffset.envelope;\n\n  var offset = envelopeAndOffset.offset;\n\n  var wkbBuffer = buffer.slice(offset);\n  try {\n    this.geometry = wkx.Geometry.parse(wkbBuffer);\n    this.geometryError = undefined;\n  } catch (error) {\n    this.geometryError = error.message;\n    console.log('Error parsing geometry');\n  }\n};\n\nGeometryData.prototype.toData = function() {\n  var header = Buffer.alloc(8);\n\n  // Write GP as the 2 byte magic number\n  header.write(GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER);\n\n  // Write a byte as the version value of 0 = version 1\n  header.writeUInt8(GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1, 2);\n\n  // Build and write a flags byte\n  var flags = this.buildFlagsByte();\n  header.writeUInt8(flags, 3);\n\n  // write the 4 byte srs id\n  header[this.byteOrder ? 'writeUInt32LE' : 'writeUInt32BE'](this.srsId, 4);\n\n  var envelopeBuffer = this.writeEnvelope(this.envelope);\n  var concatArray = [header, envelopeBuffer];\n  try {\n    concatArray.push(this.geometry.toWkb());\n    this.geometryError = undefined;\n  } catch (error) {\n    this.geometryError = error.message;\n  }\n\n  this.buffer = Buffer.concat(concatArray);\n  return this.buffer;\n};\n\nGeometryData.prototype.writeEnvelope = function() {\n  if (!this.envelope) return Buffer.alloc(0);\n\n  var writeDoubleMethod = 'writeDouble' + (this.byteOrder ? 'LE' : 'BE');\n\n  var length = 32;\n  if (this.envelope.hasZ) {\n    length += 16;\n  }\n  if (this.envelope.hasM) {\n    length += 16;\n  }\n  var envelopeBuffer = Buffer.alloc(length);\n  envelopeBuffer[writeDoubleMethod](this.envelope.minX, 0);\n  envelopeBuffer[writeDoubleMethod](this.envelope.maxX, 8);\n  envelopeBuffer[writeDoubleMethod](this.envelope.minY, 16);\n  envelopeBuffer[writeDoubleMethod](this.envelope.maxY, 24);\n\n  var position = 32;\n  if (this.envelope.hasZ) {\n    envelopeBuffer[writeDoubleMethod](this.envelope.minZ, position);\n    envelopeBuffer[writeDoubleMethod](this.envelope.maxZ, position+8);\n    position = 48;\n  }\n  if (this.envelope.hasM) {\n    envelopeBuffer[writeDoubleMethod](this.envelope.minM, position);\n    envelopeBuffer[writeDoubleMethod](this.envelope.maxM, position+8);\n  }\n\n  return envelopeBuffer;\n};\n\nGeometryData.prototype.buildFlagsByte = function() {\n  var flag = 0;\n\n  // Add the binary type to bit 5, 0 for standard and 1 for extended\n  var binaryType = this.extended ? 1 : 0;\n  flag += (binaryType << 5);\n\n  // Add the empty geometry flag to bit 4, 0 for non-empty and 1 for empty\n  var emptyValue = this.empty ? 1 : 0;\n  flag += (emptyValue << 4);\n\n  // Add the envelope contents indicator code (3-bit unsigned integer to bits 3, 2, and 1)\n  var envelopeIndicator = !this.envelope ? 0 : this.getIndicatorWithEnvelope(this.envelope);\n  flag += (envelopeIndicator << 1);\n\n  // Add the byte order to bit 0, 0 for Big Endian and 1 for Little Endian\n  var byteOrderValue = (this.byteOrder === BIG_ENDIAN) ? 0 : 1;\n  flag += byteOrderValue;\n\n  return flag;\n};\n\nGeometryData.prototype.getIndicatorWithEnvelope = function(envelope) {\n  var indicator = 1;\n  if (envelope.hasZ) {\n    indicator++;\n  }\n  if (envelope.hasM) {\n    indicator += 2;\n  }\n  return indicator;\n};\n\nGeometryData.prototype.readFlags = function (flagsInt) {\n  // Verify the reserved bits at 7 and 6 are 0\n  var reserved7 = (flagsInt >> 7) & 1;\n  var reserved6 = (flagsInt >> 6) & 1;\n  if (reserved7 !== 0 || reserved6 !== 0) {\n      throw new Error('Unexpected GeoPackage Geometry flags. Flag bit 7 and 6 should both be 0, 7='+reserved7+', 6='+ reserved6);\n  }\n\n  // Get the binary type from bit 5, 0 for standard and 1 for extended\n  var binaryType = (flagsInt >> 5) & 1;\n  this.extended = binaryType == 1;\n\n  // Get the empty geometry flag from bit 4, 0 for non-empty and 1 for\n  // empty\n  var emptyValue = (flagsInt >> 4) & 1;\n  this.empty = emptyValue == 1;\n\n  // Get the envelope contents indicator code (3-bit unsigned integer from\n  // bits 3, 2, and 1)\n  var envelopeIndicator = (flagsInt >> 1) & 7;\n  if (envelopeIndicator > 4) {\n      throw new Error('Unexpected GeoPackage Geometry flags. Envelope contents indicator must be between 0 and 4. Actual: ' + envelopeIndicator);\n  }\n\n  // Get the byte order from bit 0, 0 for Big Endian and 1 for Little Endian\n  var byteOrderValue = flagsInt & 1;\n  this.byteOrder = byteOrderValue;\n  return envelopeIndicator;\n};\n\nGeometryData.prototype.readEnvelope = function (envelopeIndicator, buffer) {\n  var readDoubleMethod = 'readDouble' + (this.byteOrder ? 'LE' : 'BE');\n\n  var envelopeByteOffset = 8;\n  reads = 0;\n  var envelopeAndOffset = {\n    envelope: undefined,\n    offset: envelopeByteOffset\n  };\n\n  if (envelopeIndicator <= 0) {\n    return envelopeAndOffset;\n  }\n  var envelope = {};\n  // Read x and y values and create envelope\n  envelope.minX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  envelope.maxX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  envelope.minY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  envelope.maxY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n\n  envelope.hasZ = false;\n  var minZ = undefined;\n  var maxZ = undefined;\n\n  envelope.hasM = false;\n  var minM = undefined;\n  var maxM = undefined;\n\n  // Read z values\n  if (envelopeIndicator === 2 || envelopeIndicator === 4) {\n    envelope.hasZ = true;\n    envelope.minZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n    envelope.maxZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  }\n\n  // Read m values\n  if (envelopeIndicator === 3 || envelopeIndicator === 4) {\n    envelope.hasM = true;\n    envelope.minM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n    envelope.maxM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  }\n  envelopeAndOffset.envelope = envelope;\n  envelopeAndOffset.offset = envelopeByteOffset + (8 * reads);\n  return envelopeAndOffset;\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"../geoPackageConstants\":71,\"buffer\":182,\"wkx\":360}],74:[function(require,module,exports){\n/**\n * Metadata module.\n * @module metadata\n * @see module:dao/dao\n */\n\nvar Dao = require('../dao/dao');\n\nvar util = require('util');\n\n/**\n * Contains metadata in MIME encodings structured in accordance with any\n * authoritative metadata specification\n * @class Metadata\n */\nvar Metadata = function() {\n\n  /**\n   * Metadata primary key\n   * @member {Number}\n   */\n  this.id;\n\n  /**\n   * Case sensitive name of the data scope to which this metadata applies; see Metadata Scopes below\n   * @member {string}\n   */\n  this.md_scope;\n\n  /**\n   * URI reference to the metadata structure definition authority\n   * @member {string}\n   */\n  this.md_standard_uri;\n\n  /**\n   * MIME encoding of metadata\n   * @member {string}\n   */\n  this.mime_type;\n\n  /**\n   * metadata\n   * @member {string}\n   */\n  this.metadata;\n}\n\nMetadata.UNDEFINED = \"undefined\";\nMetadata.FIELD_SESSION = \"fieldSession\";\nMetadata.COLLECTION_SESSION = \"collectionSession\";\nMetadata.SERIES = \"series\";\nMetadata.DATASET = \"dataset\";\nMetadata.FEATURE_TYPE = \"featureType\";\nMetadata.FEATURE = \"feature\";\nMetadata.ATTRIBUTE_TYPE = \"attributeType\";\nMetadata.ATTRIBUTE = \"attribute\";\nMetadata.TILE = \"tile\";\nMetadata.MODEL = \"model\";\nMetadata.CATALOG = \"catalog\";\nMetadata.SCHEMA = \"schema\";\nMetadata.TAXONOMY = \"taxonomy\";\nMetadata.SOFTWARE = \"software\";\nMetadata.SERVICE = \"service\";\nMetadata.COLLECTION_HARDWARE = \"collectionHardware\";\nMetadata.NON_GEOGRAPHIC_DATASET = \"nonGeographicDataset\";\nMetadata.DIMENSION_GROUP = \"dimensionGroup\";\n\nMetadata.prototype.getScopeInformation = function(type) {\n  switch(type) {\n    case Metadata.UNDEFINED:\n      return {\n        name: Metadata.UNDEFINED,\n        code: 'NA',\n        definition: 'Metadata information scope is undefined'\n      };\n    case Metadata.FIELD_SESSION:\n      return {\n        name: Metadata.FIELD_SESSION,\n        code: '012',\n        definition: 'Information applies to the field session'\n      };\n    case Metadata.COLLECTION_SESSION:\n      return {\n        name: Metadata.COLLECTION_SESSION,\n        code: '004',\n        definition: 'Information applies to the collection session'\n      };\n    case Metadata.SERIES:\n      return {\n        name: Metadata.SERIES,\n        code: '006',\n        definition: 'Information applies to the (dataset) series'\n      };\n    case Metadata.DATASET:\n      return {\n        name: Metadata.DATASET,\n        code: '005',\n        definition: 'Information applies to the (geographic feature) dataset'\n      };\n    case Metadata.FEATURE_TYPE:\n      return {\n        name: Metadata.FEATURE_TYPE,\n        code: '010',\n        definition: 'Information applies to a feature type (class)'\n      };\n    case Metadata.FEATURE:\n      return {\n        name: Metadata.FEATURE,\n        code: '009',\n        definition: 'Information applies to a feature (instance)'\n      };\n    case Metadata.ATTRIBUTE_TYPE:\n      return {\n        name: Metadata.ATTRIBUTE_TYPE,\n        code: '002',\n        definition: 'Information applies to the attribute class'\n      };\n    case Metadata.ATTRIBUTE:\n      return {\n        name: Metadata.ATTRIBUTE,\n        code: '001',\n        definition: 'Information applies to the characteristic of a feature (instance)'\n      };\n    case Metadata.TILE:\n      return {\n        name: Metadata.TILE,\n        code: '016',\n        definition: 'Information applies to a tile, a spatial subset of geographic data'\n      };\n    case Metadata.MODEL:\n      return {\n        name: Metadata.MODEL,\n        code: '015',\n        definition: 'Information applies to a copy or imitation of an existing or hypothetical object'\n      };\n    case Metadata.CATALOG:\n      return {\n        name: Metadata.CATALOG,\n        code: 'NA',\n        definition: 'Metadata applies to a feature catalog'\n      };\n    case Metadata.SCHEMA:\n      return {\n        name: Metadata.SCHEMA,\n        code: 'NA',\n        definition: 'Metadata applies to an application schema'\n      };\n    case Metadata.TAXONOMY:\n      return {\n        name: Metadata.TAXONOMY,\n        code: 'NA',\n        definition: 'Metadata applies to a taxonomy or knowledge system'\n      };\n    case Metadata.SOFTWARE:\n      return {\n        name: Metadata.SOFTWARE,\n        code: '013',\n        definition: 'Information applies to a computer program or routine'\n      };\n    case Metadata.SERVICE:\n      return {\n        name: Metadata.SERVICE,\n        code: '014',\n        definition: 'Information applies to a capability which a service provider entity makes available to a service user entity through a set of interfaces that define a behaviour, such as a use case'\n      };\n    case Metadata.COLLECTION_HARDWARE:\n      return {\n        name: Metadata.COLLECTION_HARDWARE,\n        code: '003',\n        definition: 'Information applies to the collection hardware class'\n      };\n    case Metadata.NON_GEOGRAPHIC_DATASET:\n      return {\n        name: Metadata.NON_GEOGRAPHIC_DATASET,\n        code: '007',\n        definition: 'Information applies to non-geographic data'\n      };\n    case Metadata.DIMENSION_GROUP:\n      return {\n        name: Metadata.DIMENSION_GROUP,\n        code: '008',\n        definition: 'Information applies to a dimension group'\n      };\n  }\n}\n\n/**\n * Metadata Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar MetadataDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(MetadataDao, Dao);\n\nMetadataDao.prototype.createObject = function() {\n  return new Metadata();\n};\n\nMetadataDao.TABLE_NAME = \"gpkg_metadata\";\nMetadataDao.COLUMN_ID = \"id\";\nMetadataDao.COLUMN_MD_SCOPE = \"md_scope\";\nMetadataDao.COLUMN_MD_STANDARD_URI = \"md_standard_uri\";\nMetadataDao.COLUMN_MIME_TYPE = \"mime_type\";\nMetadataDao.COLUMN_METADATA = \"metadata\";\n\nMetadataDao.prototype.gpkgTableName = MetadataDao.TABLE_NAME;\nMetadataDao.prototype.idColumns = [MetadataDao.COLUMN_ID];\n\nmodule.exports.MetadataDao = MetadataDao;\nmodule.exports.Metadata = Metadata;\n\n},{\"../dao/dao\":11,\"util\":343}],75:[function(require,module,exports){\n/**\n * MetadataReference module.\n * @module metadata/reference\n * @see module:dao/dao\n */\n\nvar Dao = require('../../dao/dao')\n  , ColumnValues = require('../../dao/columnValues');\n\nvar util = require('util');\n\n/**\n * Links metadata in the gpkg_metadata table to data in the feature, and tiles tables\n * @class MetadataReference\n */\nvar MetadataReference = function() {\n\n  /**\n   * Lowercase metadata reference scope; one of ‘geopackage’, ‘table’, ‘column’, ’row’, ’row/col’\n   * @member {string}\n   */\n  this.reference_scope;\n\n  /**\n   * Name of the table to which this metadata reference applies, or NULL for reference_scope of ‘geopackage’.\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * Name of the column to which this metadata reference applies; NULL for\n   * reference_scope of ‘geopackage’,‘table’ or ‘row’, or the name of a column\n   * in the table_name table for reference_scope of ‘column’ or ‘row/col’\n   * @member {string}\n   */\n  this.column_name;\n\n  /**\n   * NULL for reference_scope of ‘geopackage’, ‘table’ or ‘column’, or the\n   * rowed of a row record in the table_name table for reference_scope of\n   * ‘row’ or ‘row/col’\n   * @member {Number}\n   */\n  this.row_id_value;\n\n  /**\n   * timestamp value in ISO 8601 format as defined by the strftime function\n   * '%Y-%m-%dT%H:%M:%fZ' format string applied to the current time\n   * @member {Date}\n   */\n  this.timestamp;\n\n  /**\n   * gpkg_metadata table id column value for the metadata to which this\n   * gpkg_metadata_reference applies\n   * @member {Number}\n   */\n  this.md_file_id;\n\n  /**\n   * gpkg_metadata table id column value for the hierarchical parent\n   * gpkg_metadata for the gpkg_metadata to which this gpkg_metadata_reference\n   * applies, or NULL if md_file_id forms the root of a metadata hierarchy\n   * @member {Number}\n   */\n  this.md_parent_id;\n}\n\nMetadataReference.prototype.toDatabaseValue = function(columnName) {\n  if (columnName === 'timestamp') {\n    return this.timestamp.toISOString();\n  }\n  return this[columnName];\n}\n\n/**\n * Set the metadata\n * @param  {Metadata} metadata metadata\n */\nMetadataReference.prototype.setMetadata = function(metadata) {\n  if (metadata) {\n    this.md_file_id = metadata.id;\n  } else {\n    this.md_file_id = -1;\n  }\n}\n\n/**\n * Set the parent metadata\n * @param  {Metadata} metadata parent metadata\n */\nMetadataReference.prototype.setParentMetadata = function(metadata) {\n  if (metadata) {\n    this.md_parent_id = metadata.id;\n  } else {\n    this.md_parent_id = -1;\n  }\n}\n\nMetadataReference.prototype.setReferenceScopeType = function(referenceScopeType) {\n  this.reference_scope = referenceScopeType;\n  switch(referenceScopeType) {\n    case MetadataReference.GEOPACKAGE:\n      this.table_name = undefined;\n      this.column_name = undefined;\n      this.row_id_value = undefined;\n      break;\n    case MetadataReference.TABLE:\n      this.column_name = undefined;\n      this.row_id_value = undefined;\n      break;\n    case MetadataReference.ROW:\n      this.column_name = undefined;\n      break;\n    case MetadataReference.COLUMN:\n      this.row_id_value = undefined;\n      break;\n  }\n}\n\nMetadataReference.GEOPACKAGE = \"geopackage\";\nMetadataReference.TABLE = \"table\";\nMetadataReference.COLUMN = \"column\";\nMetadataReference.ROW = \"row\";\nMetadataReference.ROW_COL = \"row/col\";\n\n/**\n * Metadata Reference Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar MetadataReferenceDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(MetadataReferenceDao, Dao);\n\nMetadataReferenceDao.prototype.createObject = function() {\n  return new MetadataReference();\n};\n\nMetadataReferenceDao.prototype.removeMetadataParent = function(parentId) {\n  var values = {};\n  values[MetadataReferenceDao.COLUMN_MD_PARENT_ID] = null;\n\n  var where = this.buildWhereWithFieldAndValue(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);\n  var whereArgs = this.buildWhereArgs(parentId);\n  return this.updateWithValues(values, where, whereArgs);\n}\n\nMetadataReferenceDao.prototype.queryByMetadataAndParent = function (fileId, parentId) {\n  var columnValues = new ColumnValues();\n  columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId);\n  columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);\n  return this.queryForFieldValues(columnValues);\n};\n\nMetadataReferenceDao.prototype.queryByMetadata = function(fileId) {\n  var columnValues = new ColumnValues();\n  columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId);\n  return this.queryForFieldValues(columnValues);\n};\n\nMetadataReferenceDao.prototype.queryByMetadataParent = function(parentId) {\n  var columnValues = new ColumnValues();\n  columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);\n  return this.queryForFieldValues(columnValues);\n};\n\nMetadataReferenceDao.TABLE_NAME = \"gpkg_metadata_reference\";\nMetadataReferenceDao.COLUMN_REFERENCE_SCOPE = \"reference_scope\";\nMetadataReferenceDao.COLUMN_TABLE_NAME = \"table_name\";\nMetadataReferenceDao.COLUMN_COLUMN_NAME = \"column_name\";\nMetadataReferenceDao.COLUMN_ROW_ID = \"row_id\";\nMetadataReferenceDao.COLUMN_TIMESTAMP = \"timestamp\";\nMetadataReferenceDao.COLUMN_MD_FILE_ID = \"md_file_id\";\nMetadataReferenceDao.COLUMN_MD_PARENT_ID = \"md_parent_id\";\n\n\nMetadataReferenceDao.prototype.gpkgTableName = MetadataReferenceDao.TABLE_NAME;\nMetadataReferenceDao.prototype.idColumns = [MetadataReferenceDao.COLUMN_MD_FILE_ID, MetadataReferenceDao.COLUMN_MD_PARENT_ID];\n\nmodule.exports.MetadataReferenceDao = MetadataReferenceDao;\nmodule.exports.MetadataReference = MetadataReference;\n\n},{\"../../dao/columnValues\":10,\"../../dao/dao\":11,\"util\":343}],76:[function(require,module,exports){\nmodule.exports = function(optionList) {\n  var optionBuilder = {};\n  optionList.forEach(function(option) {\n    optionBuilder['set'+option.slice(0,1).toUpperCase()+option.slice(1)] = function(param) {\n      this[option] = param;\n      return this;\n    }\n    optionBuilder['get'+option.slice(0,1).toUpperCase()+option.slice(1)] = function() {\n      return this[option];\n    }\n  });\n  return optionBuilder;\n}\n\n},{}],77:[function(require,module,exports){\nmodule.exports = {\n  \"EPSG:3819\":'+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs ',\n  \"EPSG:3821\":'+proj=longlat +ellps=aust_SA +no_defs ',\n  \"EPSG:3824\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:3889\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:3906\":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +no_defs ',\n  \"EPSG:4001\":'+proj=longlat +ellps=airy +no_defs ',\n  \"EPSG:4002\":'+proj=longlat +ellps=mod_airy +no_defs ',\n  \"EPSG:4003\":'+proj=longlat +ellps=aust_SA +no_defs ',\n  \"EPSG:4004\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4005\":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs ',\n  \"EPSG:4006\":'+proj=longlat +ellps=bess_nam +no_defs ',\n  \"EPSG:4007\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',\n  \"EPSG:4008\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4009\":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ',\n  \"EPSG:4010\":'+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs ',\n  \"EPSG:4011\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4012\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4013\":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs ',\n  \"EPSG:4014\":'+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs ',\n  \"EPSG:4015\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs ',\n  \"EPSG:4016\":'+proj=longlat +ellps=evrstSS +no_defs ',\n  \"EPSG:4018\":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs ',\n  \"EPSG:4019\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:4020\":'+proj=longlat +ellps=helmert +no_defs ',\n  \"EPSG:4021\":'+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs ',\n  \"EPSG:4022\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4023\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4024\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4025\":'+proj=longlat +ellps=WGS66 +no_defs ',\n  \"EPSG:4027\":'+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs ',\n  \"EPSG:4028\":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs ',\n  \"EPSG:4029\":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ',\n  \"EPSG:4030\":'+proj=longlat +ellps=WGS84 +no_defs ',\n  \"EPSG:4031\":'+proj=longlat +ellps=WGS84 +no_defs ',\n  \"EPSG:4032\":'+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs ',\n  \"EPSG:4033\":'+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs ',\n  \"EPSG:4034\":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ',\n  \"EPSG:4035\":'+proj=longlat +a=6371000 +b=6371000 +no_defs ',\n  \"EPSG:4036\":'+proj=longlat +ellps=GRS67 +no_defs ',\n  \"EPSG:4041\":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ',\n  \"EPSG:4042\":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ',\n  \"EPSG:4043\":'+proj=longlat +ellps=WGS72 +no_defs ',\n  \"EPSG:4044\":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs ',\n  \"EPSG:4045\":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs ',\n  \"EPSG:4046\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4047\":'+proj=longlat +a=6371007 +b=6371007 +no_defs ',\n  \"EPSG:4052\":'+proj=longlat +a=6370997 +b=6370997 +no_defs ',\n  \"EPSG:4053\":'+proj=longlat +a=6371228 +b=6371228 +no_defs ',\n  \"EPSG:4054\":'+proj=longlat +a=6378273 +b=6356889.449 +no_defs ',\n  \"EPSG:4055\":'+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4075\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4081\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4120\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4121\":'+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs ',\n  \"EPSG:4122\":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ',\n  \"EPSG:4123\":'+proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +no_defs ',\n  \"EPSG:4124\":'+proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs ',\n  \"EPSG:4125\":'+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs ',\n  \"EPSG:4126\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:4127\":'+proj=longlat +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +no_defs ',\n  \"EPSG:4128\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4129\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4130\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs ',\n  \"EPSG:4131\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +no_defs ',\n  \"EPSG:4132\":'+proj=longlat +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +no_defs ',\n  \"EPSG:4133\":'+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs ',\n  \"EPSG:4134\":'+proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +no_defs ',\n  \"EPSG:4135\":'+proj=longlat +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +no_defs ',\n  \"EPSG:4136\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4137\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4138\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4139\":'+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs ',\n  \"EPSG:4140\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4141\":'+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs ',\n  \"EPSG:4142\":'+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs ',\n  \"EPSG:4143\":'+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs ',\n  \"EPSG:4144\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +no_defs ',\n  \"EPSG:4145\":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +no_defs ',\n  \"EPSG:4146\":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs ',\n  \"EPSG:4147\":'+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs ',\n  \"EPSG:4148\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4149\":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +no_defs ',\n  \"EPSG:4150\":'+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs ',\n  \"EPSG:4151\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4152\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4153\":'+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs ',\n  \"EPSG:4154\":'+proj=longlat +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +no_defs ',\n  \"EPSG:4155\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs ',\n  \"EPSG:4156\":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +no_defs ',\n  \"EPSG:4157\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',\n  \"EPSG:4158\":'+proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs ',\n  \"EPSG:4159\":'+proj=longlat +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +no_defs ',\n  \"EPSG:4160\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4161\":'+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs ',\n  \"EPSG:4162\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4163\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4164\":'+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs ',\n  \"EPSG:4165\":'+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs ',\n  \"EPSG:4166\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4167\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4168\":'+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs ',\n  \"EPSG:4169\":'+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs ',\n  \"EPSG:4170\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4171\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4172\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4173\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4174\":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ',\n  \"EPSG:4175\":'+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs ',\n  \"EPSG:4176\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4178\":'+proj=longlat +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +no_defs ',\n  \"EPSG:4179\":'+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs ',\n  \"EPSG:4180\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4181\":'+proj=longlat +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +no_defs ',\n  \"EPSG:4182\":'+proj=longlat +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +no_defs ',\n  \"EPSG:4183\":'+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs ',\n  \"EPSG:4184\":'+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs ',\n  \"EPSG:4185\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4188\":'+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',\n  \"EPSG:4189\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4190\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4191\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4192\":'+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs ',\n  \"EPSG:4193\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ',\n  \"EPSG:4194\":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ',\n  \"EPSG:4195\":'+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs ',\n  \"EPSG:4196\":'+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs ',\n  \"EPSG:4197\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4198\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4199\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4200\":'+proj=longlat +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +no_defs ',\n  \"EPSG:4201\":'+proj=longlat +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +no_defs ',\n  \"EPSG:4202\":'+proj=longlat +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +no_defs ',\n  \"EPSG:4203\":'+proj=longlat +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +no_defs ',\n  \"EPSG:4204\":'+proj=longlat +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +no_defs ',\n  \"EPSG:4205\":'+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs ',\n  \"EPSG:4206\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4207\":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs ',\n  \"EPSG:4208\":'+proj=longlat +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +no_defs ',\n  \"EPSG:4209\":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +no_defs ',\n  \"EPSG:4210\":'+proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs ',\n  \"EPSG:4211\":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +no_defs ',\n  \"EPSG:4212\":'+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs ',\n  \"EPSG:4213\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs ',\n  \"EPSG:4214\":'+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs ',\n  \"EPSG:4215\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4216\":'+proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs ',\n  \"EPSG:4218\":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs ',\n  \"EPSG:4219\":'+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs ',\n  \"EPSG:4220\":'+proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs ',\n  \"EPSG:4221\":'+proj=longlat +ellps=intl +towgs84=-148,136,90,0,0,0,0 +no_defs ',\n  \"EPSG:4222\":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +no_defs ',\n  \"EPSG:4223\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +no_defs ',\n  \"EPSG:4224\":'+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs ',\n  \"EPSG:4225\":'+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs ',\n  \"EPSG:4226\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4227\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +no_defs ',\n  \"EPSG:4228\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4229\":'+proj=longlat +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +no_defs ',\n  \"EPSG:4230\":'+proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs ',\n  \"EPSG:4231\":'+proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218 +no_defs ',\n  \"EPSG:4232\":'+proj=longlat +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +no_defs ',\n  \"EPSG:4233\":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ',\n  \"EPSG:4234\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4235\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4236\":'+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs ',\n  \"EPSG:4237\":'+proj=longlat +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs ',\n  \"EPSG:4238\":'+proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +no_defs ',\n  \"EPSG:4239\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs ',\n  \"EPSG:4240\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +no_defs ',\n  \"EPSG:4241\":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ',\n  \"EPSG:4242\":'+proj=longlat +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +no_defs ',\n  \"EPSG:4243\":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ',\n  \"EPSG:4244\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs ',\n  \"EPSG:4245\":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs ',\n  \"EPSG:4246\":'+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs ',\n  \"EPSG:4247\":'+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs ',\n  \"EPSG:4248\":'+proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +no_defs ',\n  \"EPSG:4249\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4250\":'+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs ',\n  \"EPSG:4251\":'+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs ',\n  \"EPSG:4252\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4253\":'+proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs ',\n  \"EPSG:4254\":'+proj=longlat +ellps=intl +towgs84=16,196,93,0,0,0,0 +no_defs ',\n  \"EPSG:4255\":'+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs ',\n  \"EPSG:4256\":'+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs ',\n  \"EPSG:4257\":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs ',\n  \"EPSG:4258\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4259\":'+proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +no_defs ',\n  \"EPSG:4260\":'+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ',\n  \"EPSG:4261\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs ',\n  \"EPSG:4262\":'+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs ',\n  \"EPSG:4263\":'+proj=longlat +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +no_defs ',\n  \"EPSG:4264\":'+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs ',\n  \"EPSG:4265\":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +no_defs ',\n  \"EPSG:4266\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +no_defs ',\n  \"EPSG:4267\":'+proj=longlat +datum=NAD27 +no_defs ',\n  \"EPSG:4268\":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ',\n  \"EPSG:4269\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4270\":'+proj=longlat +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +no_defs ',\n  \"EPSG:4271\":'+proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs ',\n  \"EPSG:4272\":'+proj=longlat +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +no_defs ',\n  \"EPSG:4273\":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs ',\n  \"EPSG:4274\":'+proj=longlat +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +no_defs ',\n  \"EPSG:4275\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs ',\n  \"EPSG:4276\":'+proj=longlat +ellps=WGS66 +no_defs ',\n  \"EPSG:4277\":'+proj=longlat +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +no_defs ',\n  \"EPSG:4278\":'+proj=longlat +ellps=airy +no_defs ',\n  \"EPSG:4279\":'+proj=longlat +ellps=airy +no_defs ',\n  \"EPSG:4280\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4281\":'+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs ',\n  \"EPSG:4282\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +no_defs ',\n  \"EPSG:4283\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4284\":'+proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs ',\n  \"EPSG:4285\":'+proj=longlat +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +no_defs ',\n  \"EPSG:4286\":'+proj=longlat +ellps=helmert +no_defs ',\n  \"EPSG:4287\":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ',\n  \"EPSG:4288\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4289\":'+proj=longlat +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +no_defs ',\n  \"EPSG:4291\":'+proj=longlat +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +no_defs ',\n  \"EPSG:4292\":'+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs ',\n  \"EPSG:4293\":'+proj=longlat +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +no_defs ',\n  \"EPSG:4294\":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ',\n  \"EPSG:4295\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4296\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4297\":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs ',\n  \"EPSG:4298\":'+proj=longlat +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +no_defs ',\n  \"EPSG:4299\":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',\n  \"EPSG:4300\":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',\n  \"EPSG:4301\":'+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs ',\n  \"EPSG:4302\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs ',\n  \"EPSG:4303\":'+proj=longlat +ellps=helmert +no_defs ',\n  \"EPSG:4304\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs ',\n  \"EPSG:4306\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4307\":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +no_defs ',\n  \"EPSG:4308\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4309\":'+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs ',\n  \"EPSG:4310\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4311\":'+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs ',\n  \"EPSG:4312\":'+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs ',\n  \"EPSG:4313\":'+proj=longlat +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +no_defs ',\n  \"EPSG:4314\":'+proj=longlat +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +no_defs ',\n  \"EPSG:4315\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs ',\n  \"EPSG:4316\":'+proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs ',\n  \"EPSG:4317\":'+proj=longlat +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +no_defs ',\n  \"EPSG:4318\":'+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs ',\n  \"EPSG:4319\":'+proj=longlat +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs ',\n  \"EPSG:4322\":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ',\n  \"EPSG:4324\":'+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs ',\n  \"EPSG:4326\":'+proj=longlat +datum=WGS84 +no_defs ',\n  \"EPSG:4463\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4470\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4475\":'+proj=longlat +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +no_defs ',\n  \"EPSG:4483\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4490\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:4555\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4558\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4600\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4601\":'+proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs ',\n  \"EPSG:4602\":'+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs ',\n  \"EPSG:4603\":'+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs ',\n  \"EPSG:4604\":'+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs ',\n  \"EPSG:4605\":'+proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs ',\n  \"EPSG:4606\":'+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs ',\n  \"EPSG:4607\":'+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs ',\n  \"EPSG:4608\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4609\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4610\":'+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs ',\n  \"EPSG:4611\":'+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs ',\n  \"EPSG:4612\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4613\":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ',\n  \"EPSG:4614\":'+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs ',\n  \"EPSG:4615\":'+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs ',\n  \"EPSG:4616\":'+proj=longlat +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +no_defs ',\n  \"EPSG:4617\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4618\":'+proj=longlat +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +no_defs ',\n  \"EPSG:4619\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4620\":'+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs ',\n  \"EPSG:4621\":'+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs ',\n  \"EPSG:4622\":'+proj=longlat +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +no_defs ',\n  \"EPSG:4623\":'+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs ',\n  \"EPSG:4624\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4625\":'+proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs ',\n  \"EPSG:4626\":'+proj=longlat +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +no_defs ',\n  \"EPSG:4627\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4628\":'+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs ',\n  \"EPSG:4629\":'+proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +no_defs ',\n  \"EPSG:4630\":'+proj=longlat +ellps=intl +towgs84=84,274,65,0,0,0,0 +no_defs ',\n  \"EPSG:4631\":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ',\n  \"EPSG:4632\":'+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs ',\n  \"EPSG:4633\":'+proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs ',\n  \"EPSG:4634\":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ',\n  \"EPSG:4635\":'+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs ',\n  \"EPSG:4636\":'+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs ',\n  \"EPSG:4637\":'+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs ',\n  \"EPSG:4638\":'+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs ',\n  \"EPSG:4639\":'+proj=longlat +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +no_defs ',\n  \"EPSG:4640\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4641\":'+proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs ',\n  \"EPSG:4642\":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ',\n  \"EPSG:4643\":'+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs ',\n  \"EPSG:4644\":'+proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +no_defs ',\n  \"EPSG:4645\":'+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4646\":'+proj=longlat +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +no_defs ',\n  \"EPSG:4657\":'+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs ',\n  \"EPSG:4658\":'+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs ',\n  \"EPSG:4659\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4660\":'+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +no_defs ',\n  \"EPSG:4661\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4662\":'+proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs ',\n  \"EPSG:4663\":'+proj=longlat +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +no_defs ',\n  \"EPSG:4664\":'+proj=longlat +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs ',\n  \"EPSG:4665\":'+proj=longlat +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +no_defs ',\n  \"EPSG:4666\":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +no_defs ',\n  \"EPSG:4667\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4668\":'+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs ',\n  \"EPSG:4669\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4670\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4671\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4672\":'+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs ',\n  \"EPSG:4673\":'+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs ',\n  \"EPSG:4674\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4675\":'+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs ',\n  \"EPSG:4676\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4677\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4678\":'+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs ',\n  \"EPSG:4679\":'+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs ',\n  \"EPSG:4680\":'+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs ',\n  \"EPSG:4681\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4682\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +no_defs ',\n  \"EPSG:4683\":'+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs ',\n  \"EPSG:4684\":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ',\n  \"EPSG:4685\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4686\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4687\":'+proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +no_defs ',\n  \"EPSG:4688\":'+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs ',\n  \"EPSG:4689\":'+proj=longlat +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +no_defs ',\n  \"EPSG:4690\":'+proj=longlat +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +no_defs ',\n  \"EPSG:4691\":'+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs ',\n  \"EPSG:4692\":'+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs ',\n  \"EPSG:4693\":'+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs ',\n  \"EPSG:4694\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4695\":'+proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs ',\n  \"EPSG:4696\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4697\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4698\":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ',\n  \"EPSG:4699\":'+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs ',\n  \"EPSG:4700\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4701\":'+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs ',\n  \"EPSG:4702\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4703\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4704\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4705\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4706\":'+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs ',\n  \"EPSG:4707\":'+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs ',\n  \"EPSG:4708\":'+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs ',\n  \"EPSG:4709\":'+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs ',\n  \"EPSG:4710\":'+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs ',\n  \"EPSG:4711\":'+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs ',\n  \"EPSG:4712\":'+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs ',\n  \"EPSG:4713\":'+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs ',\n  \"EPSG:4714\":'+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs ',\n  \"EPSG:4715\":'+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs ',\n  \"EPSG:4716\":'+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs ',\n  \"EPSG:4717\":'+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs ',\n  \"EPSG:4718\":'+proj=longlat +ellps=intl +towgs84=230,-199,-752,0,0,0,0 +no_defs ',\n  \"EPSG:4719\":'+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs ',\n  \"EPSG:4720\":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ',\n  \"EPSG:4721\":'+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs ',\n  \"EPSG:4722\":'+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs ',\n  \"EPSG:4723\":'+proj=longlat +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +no_defs ',\n  \"EPSG:4724\":'+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs ',\n  \"EPSG:4725\":'+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs ',\n  \"EPSG:4726\":'+proj=longlat +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +no_defs ',\n  \"EPSG:4727\":'+proj=longlat +ellps=intl +towgs84=403,-81,277,0,0,0,0 +no_defs ',\n  \"EPSG:4728\":'+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs ',\n  \"EPSG:4729\":'+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs ',\n  \"EPSG:4730\":'+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs ',\n  \"EPSG:4731\":'+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs ',\n  \"EPSG:4732\":'+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs ',\n  \"EPSG:4733\":'+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs ',\n  \"EPSG:4734\":'+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs ',\n  \"EPSG:4735\":'+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs ',\n  \"EPSG:4736\":'+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs ',\n  \"EPSG:4737\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4738\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',\n  \"EPSG:4739\":'+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs ',\n  \"EPSG:4740\":'+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs ',\n  \"EPSG:4741\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4742\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:4743\":'+proj=longlat +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +no_defs ',\n  \"EPSG:4744\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4745\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4746\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4747\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4748\":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ',\n  \"EPSG:4749\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4750\":'+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs ',\n  \"EPSG:4751\":'+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs ',\n  \"EPSG:4752\":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ',\n  \"EPSG:4753\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4754\":'+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs ',\n  \"EPSG:4755\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4756\":'+proj=longlat +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +no_defs ',\n  \"EPSG:4757\":'+proj=longlat +ellps=WGS84 +no_defs ',\n  \"EPSG:4758\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4759\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4760\":'+proj=longlat +ellps=WGS66 +no_defs ',\n  \"EPSG:4761\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4762\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4763\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4764\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4765\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4801\":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs ',\n  \"EPSG:4802\":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs ',\n  \"EPSG:4803\":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +no_defs ',\n  \"EPSG:4804\":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs ',\n  \"EPSG:4805\":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs ',\n  \"EPSG:4806\":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +no_defs ',\n  \"EPSG:4807\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs ',\n  \"EPSG:4808\":'+proj=longlat +ellps=bessel +pm=jakarta +no_defs ',\n  \"EPSG:4809\":'+proj=longlat +ellps=intl +pm=brussels +no_defs ',\n  \"EPSG:4810\":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs ',\n  \"EPSG:4811\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs ',\n  \"EPSG:4813\":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +no_defs ',\n  \"EPSG:4814\":'+proj=longlat +ellps=bessel +pm=stockholm +no_defs ',\n  \"EPSG:4815\":'+proj=longlat +ellps=bessel +pm=athens +no_defs ',\n  \"EPSG:4816\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +pm=paris +no_defs ',\n  \"EPSG:4817\":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs ',\n  \"EPSG:4818\":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs ',\n  \"EPSG:4819\":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +pm=paris +no_defs ',\n  \"EPSG:4820\":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +no_defs ',\n  \"EPSG:4821\":'+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs ',\n  \"EPSG:4823\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4824\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4901\":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +no_defs ',\n  \"EPSG:4902\":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs ',\n  \"EPSG:4903\":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs ',\n  \"EPSG:4904\":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +pm=lisbon +no_defs ',\n  \"EPSG:5013\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5132\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:5228\":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +no_defs ',\n  \"EPSG:5229\":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +pm=ferro +no_defs ',\n  \"EPSG:5233\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +no_defs ',\n  \"EPSG:5246\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:5252\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5264\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5324\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5340\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5354\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5360\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5365\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5371\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5373\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5381\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5393\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5451\":'+proj=longlat +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +no_defs ',\n  \"EPSG:5464\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',\n  \"EPSG:5467\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:5489\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5524\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:5527\":'+proj=longlat +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +no_defs ',\n  \"EPSG:5546\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5561\":'+proj=longlat +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +no_defs ',\n  \"EPSG:5593\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5681\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:5886\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:6135\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:2000\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:2001\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2002\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2003\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2004\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2005\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2006\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2007\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2008\":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2009\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2010\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2011\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2012\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2013\":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2014\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2015\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2016\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2017\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2018\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2019\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2020\":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2021\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2022\":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2023\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2024\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2025\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2026\":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2027\":'+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2028\":'+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2029\":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2030\":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2031\":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2032\":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2033\":'+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2034\":'+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2035\":'+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2036\":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2037\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2038\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2039\":'+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2040\":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2041\":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2042\":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2043\":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2044\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2045\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2046\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2047\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2048\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2049\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2050\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2051\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2052\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2053\":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2054\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2055\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2056\":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2057\":'+proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +gamma=0.5716611944444444 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2058\":'+proj=utm +zone=38 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2059\":'+proj=utm +zone=39 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2060\":'+proj=utm +zone=40 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2061\":'+proj=utm +zone=41 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2062\":'+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs ',\n  \"EPSG:2063\":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2064\":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2065\":'+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:2066\":'+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs ',\n  \"EPSG:2067\":'+proj=utm +zone=20 +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2068\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2069\":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2070\":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2071\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2072\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2073\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2074\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2075\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2076\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2077\":'+proj=utm +zone=32 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2078\":'+proj=utm +zone=33 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2079\":'+proj=utm +zone=34 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2080\":'+proj=utm +zone=35 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2081\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2082\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2083\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2084\":'+proj=utm +zone=19 +south +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2085\":'+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:2086\":'+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:2087\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2088\":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2089\":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2090\":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2091\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2092\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2093\":'+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2094\":'+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:2095\":'+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2096\":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:2097\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:2098\":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:2099\":'+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs ',\n  \"EPSG:2100\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2101\":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2102\":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2103\":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2104\":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2105\":'+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2106\":'+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2107\":'+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2108\":'+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2109\":'+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2110\":'+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2111\":'+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2112\":'+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2113\":'+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2114\":'+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2115\":'+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2116\":'+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2117\":'+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2118\":'+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2119\":'+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2120\":'+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2121\":'+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2122\":'+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2123\":'+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2124\":'+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2125\":'+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2126\":'+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2127\":'+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2128\":'+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2129\":'+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2130\":'+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2131\":'+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2132\":'+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2133\":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2134\":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2135\":'+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2136\":'+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs ',\n  \"EPSG:2137\":'+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2138\":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2139\":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2140\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2141\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2142\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2143\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2144\":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2145\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2146\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2147\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2148\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2149\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2150\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2151\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2152\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2153\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2154\":'+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2155\":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2156\":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2157\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2158\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2159\":'+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs ',\n  \"EPSG:2160\":'+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs ',\n  \"EPSG:2161\":'+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2162\":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2163\":'+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs ',\n  \"EPSG:2164\":'+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2165\":'+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2166\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2167\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2168\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2169\":'+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +units=m +no_defs ',\n  \"EPSG:2170\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:2171\":'+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2172\":'+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2173\":'+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2174\":'+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2175\":'+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2176\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2177\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2178\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2179\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2180\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2188\":'+proj=utm +zone=25 +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2189\":'+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2190\":'+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2191\":'+proj=utm +zone=28 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2192\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2193\":'+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2194\":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2195\":'+proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2196\":'+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2197\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2198\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2199\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:2200\":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2201\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2202\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2203\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2204\":'+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:2205\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2206\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2207\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2208\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2209\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2210\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2211\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2212\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2213\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2214\":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2215\":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2216\":'+proj=utm +zone=22 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2217\":'+proj=utm +zone=23 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2219\":'+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2220\":'+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2222\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2223\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2224\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2225\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2226\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2227\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2228\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2229\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2230\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2231\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2232\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2233\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2234\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2235\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2236\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2237\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2238\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2239\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2240\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2241\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2242\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2243\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2244\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2245\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2246\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2247\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2248\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2249\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2250\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2251\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2252\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2253\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2254\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2255\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2256\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2257\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2258\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2259\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2260\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2261\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2262\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2263\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2264\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2265\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2266\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2267\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2268\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2269\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2270\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2271\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2272\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2273\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2274\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2275\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2276\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2277\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2278\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2279\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2280\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2281\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2282\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2283\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2284\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2285\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2286\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2287\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2288\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2289\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2290\":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2291\":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2292\":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2294\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2295\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2308\":'+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2309\":'+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:2310\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:2311\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:2312\":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:2313\":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:2314\":'+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.3047972654 +no_defs ',\n  \"EPSG:2315\":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2316\":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2317\":'+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2318\":'+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2319\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2320\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2321\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2322\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2323\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2324\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2325\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2326\":'+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs ',\n  \"EPSG:2327\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2328\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2329\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2330\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2331\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2332\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2333\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2334\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2335\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2336\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2337\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2338\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2339\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2340\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2341\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2342\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2343\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2344\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2345\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2346\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2347\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2348\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2349\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2350\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2351\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2352\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2353\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2354\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2355\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2356\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2357\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2358\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2359\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2360\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2361\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2362\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2363\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2364\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2365\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2366\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2367\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2368\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2369\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2370\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2371\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2372\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2373\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2374\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2375\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2376\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2377\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2378\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2379\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2380\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2381\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2382\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2383\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2384\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2385\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2386\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2387\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2388\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2389\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2390\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2391\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:2392\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:2393\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:2394\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:2395\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2396\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2397\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2398\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2399\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2400\":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:2401\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2402\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2403\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2404\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2405\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2406\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2407\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2408\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2409\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2410\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2411\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2412\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2413\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2414\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2415\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2416\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2417\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2418\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2419\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2420\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2421\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2422\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2423\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2424\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2425\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2426\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2427\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2428\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2429\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2430\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2431\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2432\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2433\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2434\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2435\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2436\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2437\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2438\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2439\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2440\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2441\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2442\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2443\":'+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2444\":'+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2445\":'+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2446\":'+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2447\":'+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2448\":'+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2449\":'+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2450\":'+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2451\":'+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2452\":'+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2453\":'+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2454\":'+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2455\":'+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2456\":'+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2457\":'+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2458\":'+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2459\":'+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2460\":'+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2461\":'+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2462\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:2463\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2464\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2465\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2466\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2467\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2468\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2469\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2470\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2471\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2472\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2473\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2474\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2475\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2476\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2477\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2478\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2479\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2480\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2481\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2482\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2483\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2484\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2485\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2486\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2487\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2488\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2489\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2490\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2491\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2492\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2493\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2494\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2495\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2496\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2497\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2498\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2499\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2500\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2501\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2502\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2503\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2504\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2505\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2506\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2507\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2508\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2509\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2510\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2511\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2512\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2513\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2514\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2515\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2516\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2517\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2518\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2519\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2520\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2521\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2522\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2523\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2524\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2525\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2526\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2527\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2528\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2529\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2530\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2531\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2532\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2533\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2534\":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2535\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2536\":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2537\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2538\":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2539\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2540\":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2541\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2542\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2543\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2544\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2545\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2546\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2547\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2548\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2549\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2550\":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2551\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2552\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2553\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2554\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2555\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2556\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2557\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2558\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2559\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2560\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2561\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2562\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2563\":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2564\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2565\":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2566\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2567\":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2568\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2569\":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2570\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2571\":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2572\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2573\":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2574\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2575\":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2576\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2577\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2578\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2579\":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2580\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2581\":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2582\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2583\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2584\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2585\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2586\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2587\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2588\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2589\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2590\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2591\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2592\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2593\":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2594\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2595\":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2596\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2597\":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2598\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2599\":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2600\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2601\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2602\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2603\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2604\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2605\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2606\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2607\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2608\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2609\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2610\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2611\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2612\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2613\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2614\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2615\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2616\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2617\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2618\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2619\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2620\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2621\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2622\":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2623\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2624\":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2625\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2626\":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2627\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2628\":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2629\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2630\":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2631\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2632\":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2633\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2634\":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2635\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2636\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2637\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2638\":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2639\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2640\":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2641\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2642\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2643\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2644\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2645\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2646\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2647\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2648\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2649\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2650\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2651\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2652\":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2653\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2654\":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2655\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2656\":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2657\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2658\":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2659\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2660\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2661\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2662\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2663\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2664\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2665\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2666\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2667\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2668\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2669\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2670\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2671\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2672\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2673\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2674\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2675\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2676\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2677\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2678\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2679\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2680\":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2681\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2682\":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2683\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2684\":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2685\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2686\":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2687\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2688\":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2689\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2690\":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2691\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2692\":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2693\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2694\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2695\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2696\":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2697\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2698\":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2699\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2700\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2701\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2702\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2703\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2704\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2705\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2706\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2707\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2708\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2709\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2710\":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2711\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2712\":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2713\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2714\":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2715\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2716\":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2717\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2718\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2719\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2720\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2721\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2722\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2723\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2724\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2725\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2726\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2727\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2728\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2729\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2730\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2731\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2732\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2733\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2734\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2735\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2736\":'+proj=utm +zone=36 +south +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +units=m +no_defs ',\n  \"EPSG:2737\":'+proj=utm +zone=37 +south +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +units=m +no_defs ',\n  \"EPSG:2738\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2739\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2740\":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2741\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2742\":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2743\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2744\":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2745\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2746\":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2747\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2748\":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2749\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2750\":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2751\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2752\":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2753\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2754\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2755\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2756\":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2757\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2758\":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2759\":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2760\":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2761\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2762\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2763\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2764\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2765\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2766\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2767\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2768\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2769\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2770\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2771\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2772\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2773\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2774\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2775\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2776\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2777\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2778\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2779\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2780\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2781\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2782\":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2783\":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2784\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2785\":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2786\":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2787\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2788\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2789\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2790\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2791\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2792\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2793\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2794\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2795\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2796\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2797\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2798\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2799\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2800\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2801\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2802\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2803\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2804\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2805\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2806\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2807\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2808\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2809\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2810\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2811\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2812\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2813\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2814\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2815\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2816\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2817\":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2818\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2819\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2820\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2821\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2822\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2823\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2824\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2825\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2826\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2827\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2828\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2829\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2830\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2831\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2832\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2833\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2834\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2835\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2836\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2837\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2838\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2839\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2840\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2841\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2842\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2843\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2844\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2845\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2846\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2847\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2848\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2849\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2850\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2851\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2852\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2853\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2854\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2855\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2856\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2857\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2858\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2859\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2860\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2861\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2862\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2863\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2864\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2865\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2866\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2867\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2868\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2869\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2870\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2871\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2872\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2873\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2874\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2875\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2876\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2877\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2878\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2879\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2880\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2881\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2882\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2883\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2884\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2885\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2886\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2887\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2888\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2889\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2890\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2891\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2892\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2893\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2894\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2895\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2896\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2897\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2898\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2899\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2900\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2901\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2902\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2903\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2904\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2905\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2906\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2907\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2908\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2909\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2910\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2911\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2912\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2913\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2914\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2915\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2916\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2917\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2918\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2919\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2920\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2921\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2922\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2923\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2924\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2925\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2926\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2927\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2928\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2929\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2930\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2931\":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2932\":'+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs ',\n  \"EPSG:2933\":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2934\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:2935\":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2936\":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2937\":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2938\":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2939\":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2940\":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2941\":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2942\":'+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2943\":'+proj=utm +zone=28 +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2944\":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2945\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2946\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2947\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2948\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2949\":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2950\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2951\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2952\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2953\":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2954\":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2955\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2956\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2957\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2958\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2959\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2960\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2961\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2962\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2964\":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:2965\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2966\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2967\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2968\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2969\":'+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2970\":'+proj=utm +zone=20 +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2971\":'+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2972\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2973\":'+proj=utm +zone=20 +ellps=intl +towgs84=186,482,151,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2975\":'+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2976\":'+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2977\":'+proj=utm +zone=5 +south +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +units=m +no_defs ',\n  \"EPSG:2978\":'+proj=utm +zone=7 +south +ellps=intl +towgs84=84,274,65,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2979\":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2980\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2981\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2982\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2983\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs ',\n  \"EPSG:2984\":'+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2987\":'+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2988\":'+proj=utm +zone=1 +south +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2989\":'+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2990\":'+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2991\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2992\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2993\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2994\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2995\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2996\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2997\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs ',\n  \"EPSG:2998\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2999\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3000\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3001\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3002\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3003\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',\n  \"EPSG:3004\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',\n  \"EPSG:3005\":'+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3006\":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3007\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3008\":'+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3009\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3010\":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3011\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3012\":'+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3013\":'+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3014\":'+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3015\":'+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3016\":'+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3017\":'+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3018\":'+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3019\":'+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3020\":'+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3021\":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3022\":'+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3023\":'+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3024\":'+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3025\":'+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3026\":'+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3027\":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3028\":'+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3029\":'+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3030\":'+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3031\":'+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3032\":'+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3033\":'+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3034\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3035\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3036\":'+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',\n  \"EPSG:3037\":'+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',\n  \"EPSG:3038\":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3039\":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3040\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3041\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3042\":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3043\":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3044\":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3045\":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3046\":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3047\":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3048\":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3049\":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3050\":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3051\":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3054\":'+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3055\":'+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3056\":'+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3057\":'+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3058\":'+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +units=m +no_defs ',\n  \"EPSG:3059\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3060\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3061\":'+proj=utm +zone=28 +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3062\":'+proj=utm +zone=26 +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3063\":'+proj=utm +zone=26 +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3064\":'+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3065\":'+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3066\":'+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3067\":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3068\":'+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:3069\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3070\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3071\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3072\":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3073\":'+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3074\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3075\":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3076\":'+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3077\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3078\":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3079\":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3080\":'+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +datum=NAD27 +units=ft +no_defs ',\n  \"EPSG:3081\":'+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3082\":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3083\":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3084\":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3085\":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3086\":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3087\":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3088\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3089\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3090\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3091\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3092\":'+proj=utm +zone=51 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3093\":'+proj=utm +zone=52 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3094\":'+proj=utm +zone=53 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3095\":'+proj=utm +zone=54 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3096\":'+proj=utm +zone=55 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3097\":'+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3098\":'+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3099\":'+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3100\":'+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3101\":'+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3102\":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3103\":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3104\":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3105\":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3106\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3107\":'+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3108\":'+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3109\":'+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3110\":'+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:3111\":'+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3112\":'+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3113\":'+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3114\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3115\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3116\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3117\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3118\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3119\":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3120\":'+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3121\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3122\":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3123\":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3124\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3125\":'+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3126\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3127\":'+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3128\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3129\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3130\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3131\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3132\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3133\":'+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3134\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3135\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3136\":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3137\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3138\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3140\":'+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs ',\n  \"EPSG:3141\":'+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3142\":'+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3143\":'+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:3146\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3147\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3148\":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3149\":'+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3150\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:3151\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:3152\":'+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3153\":'+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3154\":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3155\":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3156\":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3157\":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3158\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3159\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3160\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3161\":'+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3162\":'+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3163\":'+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3164\":'+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3165\":'+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3166\":'+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3167\":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs ',\n  \"EPSG:3168\":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs ',\n  \"EPSG:3169\":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3170\":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3171\":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3172\":'+proj=utm +zone=59 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3174\":'+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3175\":'+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3176\":'+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3177\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3178\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3179\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3180\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3181\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3182\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3183\":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3184\":'+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3185\":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3186\":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3187\":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3188\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3189\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3190\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3191\":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3192\":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3193\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3194\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3195\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3196\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3197\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3198\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3199\":'+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3200\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3201\":'+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3202\":'+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3203\":'+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3204\":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3205\":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3206\":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3207\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3208\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3209\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3210\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3211\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3212\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3213\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3214\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3215\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3216\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3217\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3218\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3219\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3220\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3221\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3222\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3223\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3224\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3225\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3226\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3227\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3228\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3229\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3230\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3231\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3232\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3233\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3234\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3235\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3236\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3237\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3238\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3239\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3240\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3241\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3242\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3243\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3244\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3245\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3246\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3247\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3248\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3249\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3250\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3251\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3252\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3253\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3254\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3255\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3256\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3257\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3258\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3259\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3260\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3261\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3262\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3263\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3264\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3265\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3266\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3267\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3268\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3269\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3270\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3271\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3272\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3273\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3274\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3275\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3276\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3277\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3278\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3279\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3280\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3281\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3282\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3283\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3284\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3285\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3286\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3287\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3288\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3289\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3290\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3291\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3292\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3293\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3294\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3296\":'+proj=utm +zone=5 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',\n  \"EPSG:3297\":'+proj=utm +zone=6 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',\n  \"EPSG:3298\":'+proj=utm +zone=7 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',\n  \"EPSG:3299\":'+proj=utm +zone=8 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',\n  \"EPSG:3300\":'+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs ',\n  \"EPSG:3301\":'+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3302\":'+proj=utm +zone=7 +south +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +units=m +no_defs ',\n  \"EPSG:3303\":'+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs ',\n  \"EPSG:3304\":'+proj=utm +zone=6 +south +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +units=m +no_defs ',\n  \"EPSG:3305\":'+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs ',\n  \"EPSG:3306\":'+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3307\":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3308\":'+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3309\":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3310\":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3311\":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3312\":'+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3313\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3314\":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3315\":'+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3316\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3317\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3318\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3319\":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3320\":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3321\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3322\":'+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3323\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3324\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3325\":'+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3326\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3327\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3328\":'+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3329\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3330\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3331\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3332\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3333\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3334\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3335\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3336\":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3337\":'+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3338\":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3339\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3340\":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3341\":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3342\":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3343\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3344\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3345\":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3346\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3347\":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3348\":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3349\":'+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3350\":'+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3351\":'+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3352\":'+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3353\":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:3354\":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:3355\":'+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3356\":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=m +no_defs ',\n  \"EPSG:3357\":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=m +no_defs ',\n  \"EPSG:3358\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3359\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3360\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3361\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3362\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3363\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3364\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3365\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3366\":'+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs ',\n  \"EPSG:3367\":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3368\":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3369\":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3370\":'+proj=utm +zone=59 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3371\":'+proj=utm +zone=60 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3372\":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3373\":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3374\":'+proj=utm +zone=29 +ellps=intl +units=m +no_defs ',\n  \"EPSG:3375\":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3376\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +no_uoff +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3377\":'+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3378\":'+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3379\":'+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3380\":'+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3381\":'+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3382\":'+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3383\":'+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3384\":'+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3385\":'+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3386\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:3387\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:3388\":'+proj=merc +lon_0=51 +lat_ts=42 +x_0=0 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3389\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3390\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:3391\":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3392\":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3393\":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3394\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3395\":'+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3396\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3397\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3398\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3399\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3400\":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3401\":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3402\":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3403\":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3404\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3405\":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs ',\n  \"EPSG:3406\":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs ',\n  \"EPSG:3407\":'+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs ',\n  \"EPSG:3408\":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',\n  \"EPSG:3409\":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',\n  \"EPSG:3410\":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',\n  \"EPSG:3411\":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',\n  \"EPSG:3412\":'+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',\n  \"EPSG:3413\":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3414\":'+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs ',\n  \"EPSG:3415\":'+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:3416\":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3417\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3418\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3419\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3420\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3421\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3422\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3423\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3424\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3425\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3426\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3427\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3428\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3429\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3430\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3431\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3432\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3433\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3434\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3435\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3436\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3437\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3438\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3439\":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs ',\n  \"EPSG:3440\":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs ',\n  \"EPSG:3441\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3442\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3443\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3444\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3445\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3446\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3447\":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3448\":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3449\":'+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3450\":'+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3451\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3452\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3453\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3454\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3455\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3456\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3457\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3458\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3459\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3460\":'+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:3461\":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3462\":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3463\":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3464\":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3465\":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3466\":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3467\":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3468\":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3469\":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3470\":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3471\":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3472\":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3473\":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3474\":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3475\":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3476\":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3477\":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3478\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3479\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3480\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3481\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3482\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3483\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3484\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3485\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3486\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3487\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3488\":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3489\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3490\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3491\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3492\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3493\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3494\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3495\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3496\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3497\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3498\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3499\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3500\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3501\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3502\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3503\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3504\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3505\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3506\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3507\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3508\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3509\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3510\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3511\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3512\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3513\":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3514\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3515\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3516\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3517\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3518\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3519\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3520\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3521\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3522\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3523\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3524\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3525\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3526\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3527\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3528\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3529\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3530\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3531\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3532\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3533\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3534\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3535\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3536\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3537\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3538\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3539\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3540\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3541\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3542\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3543\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3544\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3545\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3546\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3547\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3548\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3549\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3550\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3551\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3552\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3553\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3554\":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3555\":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3556\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3557\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3558\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3559\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3560\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3561\":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3562\":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3563\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3564\":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3565\":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3566\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3567\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3568\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3569\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3570\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3571\":'+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3572\":'+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3573\":'+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3574\":'+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3575\":'+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3576\":'+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3577\":'+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3578\":'+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3579\":'+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3580\":'+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3581\":'+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3582\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3583\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3584\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3585\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3586\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3587\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3588\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3589\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3590\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3591\":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3592\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3593\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3594\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3595\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3596\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3597\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3598\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3599\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3600\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3601\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3602\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3603\":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3604\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3605\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3606\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3607\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3608\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3609\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3610\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3611\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3612\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3613\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3614\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3615\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3616\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3617\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3618\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3619\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3620\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3621\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3622\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3623\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3624\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3625\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3626\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3627\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3628\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3629\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3630\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3631\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3632\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3633\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3634\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3635\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3636\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3637\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3638\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3639\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3640\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3641\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3642\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3643\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3644\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3645\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3646\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3647\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3648\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3649\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3650\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3651\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3652\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3653\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3654\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3655\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3656\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3657\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3658\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3659\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3660\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3661\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3662\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3663\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3664\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3665\":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3666\":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3667\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3668\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3669\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3670\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3671\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3672\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3673\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3674\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3675\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3676\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3677\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3678\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3679\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3680\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3681\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3682\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3683\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3684\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3685\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3686\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3687\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3688\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3689\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3690\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3691\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3692\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3693\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3694\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3695\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3696\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3697\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3698\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3699\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3700\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3701\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3702\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3703\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3704\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3705\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3706\":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3707\":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3708\":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3709\":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3710\":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3711\":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3712\":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3713\":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3714\":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3715\":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3716\":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3717\":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3718\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3719\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3720\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3721\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3722\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3723\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3724\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3725\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3726\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3727\":'+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3728\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3729\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3730\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3731\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3732\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3733\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3734\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3735\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3736\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3737\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3738\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3739\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3740\":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3741\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3742\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3743\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3744\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3745\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3746\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3747\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3748\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3749\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3750\":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3751\":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3752\":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3753\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3754\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3755\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3756\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3757\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3758\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3759\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3760\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3761\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3762\":'+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3763\":'+proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3764\":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3765\":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3766\":'+proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3767\":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3768\":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3769\":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3770\":'+proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3771\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3772\":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3773\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3774\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3775\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3776\":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3777\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3778\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3779\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3780\":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3781\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3782\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3783\":'+proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3784\":'+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3785\":'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs',\n  \"EPSG:3786\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs ',\n  \"EPSG:3787\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:3788\":'+proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3789\":'+proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3790\":'+proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3791\":'+proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3793\":'+proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3794\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3795\":'+proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3796\":'+proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3797\":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3798\":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3799\":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3800\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3801\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3802\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3812\":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3814\":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3815\":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3816\":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3825\":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3826\":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3827\":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs ',\n  \"EPSG:3828\":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs ',\n  \"EPSG:3829\":'+proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3832\":'+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3833\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3834\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3835\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3836\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3837\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3838\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3839\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3840\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3841\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3842\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3843\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3844\":'+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3845\":'+proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3846\":'+proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3847\":'+proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3848\":'+proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3849\":'+proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3850\":'+proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3851\":'+proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3852\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3854\":'+proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  //\"EPSG:3857\":'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs',\n  \"EPSG:3873\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3874\":'+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3875\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3876\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3877\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3878\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=24500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3879\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3880\":'+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3881\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3882\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3883\":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3884\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3885\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3890\":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3891\":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3892\":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3893\":'+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3907\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3908\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3909\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3910\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3911\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3912\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3920\":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3942\":'+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3943\":'+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3944\":'+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3945\":'+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3946\":'+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3947\":'+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3948\":'+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3949\":'+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3950\":'+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3968\":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3969\":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3970\":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3973\":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3974\":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3975\":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3976\":'+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3978\":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3979\":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3985\":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3986\":'+proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3987\":'+proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3988\":'+proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3989\":'+proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3991\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3992\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3994\":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3995\":'+proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3996\":'+proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3997\":'+proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4026\":'+proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4037\":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4038\":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4048\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4049\":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4050\":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4051\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4056\":'+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4057\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4058\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4059\":'+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4060\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4061\":'+proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4062\":'+proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4063\":'+proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4071\":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4082\":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4083\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4087\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4088\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs ',\n  \"EPSG:4093\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99998 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4094\":'+proj=tmerc +lat_0=0 +lon_0=10 +k=0.99998 +x_0=400000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4095\":'+proj=tmerc +lat_0=0 +lon_0=11.75 +k=0.99998 +x_0=600000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4096\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=800000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4217\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4399\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4400\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4401\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4402\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4403\":'+proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4404\":'+proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4405\":'+proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4406\":'+proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4407\":'+proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4408\":'+proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4409\":'+proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4410\":'+proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4411\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4412\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4413\":'+proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4414\":'+proj=tmerc +lat_0=13.5 +lon_0=144.75 +k=1 +x_0=100000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4415\":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=-9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4417\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4418\":'+proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4419\":'+proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4420\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4421\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4422\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4423\":'+proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4424\":'+proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4425\":'+proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4426\":'+proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4427\":'+proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4428\":'+proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4429\":'+proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4430\":'+proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4431\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4432\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4433\":'+proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4434\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4437\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4438\":'+proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4439\":'+proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4455\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4456\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4457\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4462\":'+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=-27 +lon_0=132 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4467\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4471\":'+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4474\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4484\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4485\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4486\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4487\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4488\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4489\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4491\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4492\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4493\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4494\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4495\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4496\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4497\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4498\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4499\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4500\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4501\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4502\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4503\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4504\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4505\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4506\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4507\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4508\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4509\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4510\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4511\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4512\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4513\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4514\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4515\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4516\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4517\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4518\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4519\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4520\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4521\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4522\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4523\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4524\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4525\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4526\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4527\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4528\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4529\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4530\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4531\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4532\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4533\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4534\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4535\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4536\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4537\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4538\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4539\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4540\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4541\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4542\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4543\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4544\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4545\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4546\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4547\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4548\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4549\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4550\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4551\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4552\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4553\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4554\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4559\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4568\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4569\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4570\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4571\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4572\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4573\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4574\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4575\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4576\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4577\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4578\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4579\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4580\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4581\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4582\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4583\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4584\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4585\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4586\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4587\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4588\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4589\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4647\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4652\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4653\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4654\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4655\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4656\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4766\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4767\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4768\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4769\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4770\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4771\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4772\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4773\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4774\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4775\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4776\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4777\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4778\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4779\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4780\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4781\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4782\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4783\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4784\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4785\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4786\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4787\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4788\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4789\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4790\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4791\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4792\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4793\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4794\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4795\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4796\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4797\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4798\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4799\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4800\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4812\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4822\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4826\":'+proj=lcc +lat_1=15 +lat_2=16.66666666666667 +lat_0=15.83333333333333 +lon_0=-24 +x_0=161587.83 +y_0=128511.202 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4839\":'+proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4855\":'+proj=tmerc +lat_0=0 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4856\":'+proj=tmerc +lat_0=0 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4857\":'+proj=tmerc +lat_0=0 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4858\":'+proj=tmerc +lat_0=0 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4859\":'+proj=tmerc +lat_0=0 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4860\":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4861\":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4862\":'+proj=tmerc +lat_0=0 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4863\":'+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4864\":'+proj=tmerc +lat_0=0 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4865\":'+proj=tmerc +lat_0=0 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4866\":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4867\":'+proj=tmerc +lat_0=0 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4868\":'+proj=tmerc +lat_0=0 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4869\":'+proj=tmerc +lat_0=0 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4870\":'+proj=tmerc +lat_0=0 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4871\":'+proj=tmerc +lat_0=0 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4872\":'+proj=tmerc +lat_0=0 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4873\":'+proj=tmerc +lat_0=0 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4874\":'+proj=tmerc +lat_0=0 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4875\":'+proj=tmerc +lat_0=0 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4876\":'+proj=tmerc +lat_0=0 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4877\":'+proj=tmerc +lat_0=0 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4878\":'+proj=tmerc +lat_0=0 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4879\":'+proj=tmerc +lat_0=0 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4880\":'+proj=tmerc +lat_0=0 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5014\":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5015\":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5016\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5018\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5041\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5042\":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5048\":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5069\":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:5070\":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5071\":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5072\":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5105\":'+proj=tmerc +lat_0=58 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5106\":'+proj=tmerc +lat_0=58 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5107\":'+proj=tmerc +lat_0=58 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5108\":'+proj=tmerc +lat_0=58 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5109\":'+proj=tmerc +lat_0=58 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5110\":'+proj=tmerc +lat_0=58 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5111\":'+proj=tmerc +lat_0=58 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5112\":'+proj=tmerc +lat_0=58 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5113\":'+proj=tmerc +lat_0=58 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5114\":'+proj=tmerc +lat_0=58 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5115\":'+proj=tmerc +lat_0=58 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5116\":'+proj=tmerc +lat_0=58 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5117\":'+proj=tmerc +lat_0=58 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5118\":'+proj=tmerc +lat_0=58 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5119\":'+proj=tmerc +lat_0=58 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5120\":'+proj=tmerc +lat_0=58 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5121\":'+proj=tmerc +lat_0=58 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5122\":'+proj=tmerc +lat_0=58 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5123\":'+proj=tmerc +lat_0=58 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5124\":'+proj=tmerc +lat_0=58 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5125\":'+proj=tmerc +lat_0=58 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5126\":'+proj=tmerc +lat_0=58 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5127\":'+proj=tmerc +lat_0=58 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5128\":'+proj=tmerc +lat_0=58 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5129\":'+proj=tmerc +lat_0=58 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5130\":'+proj=tmerc +lat_0=58 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5167\":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5168\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5169\":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5170\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5171\":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5172\":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5173\":'+proj=tmerc +lat_0=38 +lon_0=125.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5174\":'+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5175\":'+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5176\":'+proj=tmerc +lat_0=38 +lon_0=129.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5177\":'+proj=tmerc +lat_0=38 +lon_0=131.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5178\":'+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5179\":'+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5180\":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5181\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5182\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5183\":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5184\":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5185\":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5186\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5187\":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5188\":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5221\":'+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:5223\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5234\":'+proj=tmerc +lat_0=7.000480277777778 +lon_0=80.77171111111112 +k=0.9999238418 +x_0=200000 +y_0=200000 +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5235\":'+proj=tmerc +lat_0=7.000471527777778 +lon_0=80.77171308333334 +k=0.9999238418 +x_0=500000 +y_0=500000 +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +units=m +no_defs ',\n  \"EPSG:5243\":'+proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5247\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +no_uoff +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:5253\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5254\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5255\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5256\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5257\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5258\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5259\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5266\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5269\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5270\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5271\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5272\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5273\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5274\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5275\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5292\":'+proj=tmerc +lat_0=0 +lon_0=90.73333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5293\":'+proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5294\":'+proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5295\":'+proj=tmerc +lat_0=0 +lon_0=90.03333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5296\":'+proj=tmerc +lat_0=0 +lon_0=90.15000000000001 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5297\":'+proj=tmerc +lat_0=0 +lon_0=91.13333333333334 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5298\":'+proj=tmerc +lat_0=0 +lon_0=91.23333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5299\":'+proj=tmerc +lat_0=0 +lon_0=89.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5300\":'+proj=tmerc +lat_0=0 +lon_0=91.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5301\":'+proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5302\":'+proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5303\":'+proj=tmerc +lat_0=0 +lon_0=89.06666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5304\":'+proj=tmerc +lat_0=0 +lon_0=90.26666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5305\":'+proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5306\":'+proj=tmerc +lat_0=0 +lon_0=91.75 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5307\":'+proj=tmerc +lat_0=0 +lon_0=90.5 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5308\":'+proj=tmerc +lat_0=0 +lon_0=90.16666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5309\":'+proj=tmerc +lat_0=0 +lon_0=90.11666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5310\":'+proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5311\":'+proj=tmerc +lat_0=0 +lon_0=90.86666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5316\":'+proj=tmerc +lat_0=0 +lon_0=-7 +k=0.999997 +x_0=200000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5320\":'+proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5321\":'+proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5325\":'+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=1700000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5329\":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:5330\":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:5331\":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:5337\":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5343\":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5344\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5345\":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5346\":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5347\":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5348\":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5349\":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5355\":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5356\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5357\":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5361\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5362\":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5367\":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5382\":'+proj=utm +zone=21 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5383\":'+proj=utm +zone=22 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5387\":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5388\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5389\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5396\":'+proj=utm +zone=26 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5456\":'+proj=lcc +lat_1=10.46666666666667 +lat_0=10.46666666666667 +lon_0=-84.33333333333333 +k_0=0.99995696 +x_0=500000 +y_0=271820.522 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5457\":'+proj=lcc +lat_1=9 +lat_0=9 +lon_0=-83.66666666666667 +k_0=0.99995696 +x_0=500000 +y_0=327987.436 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5458\":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:5459\":'+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5460\":'+proj=lcc +lat_1=13.78333333333333 +lat_0=13.78333333333333 +lon_0=-89 +k_0=0.99996704 +x_0=500000 +y_0=295809.184 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5461\":'+proj=lcc +lat_1=13.86666666666667 +lat_0=13.86666666666667 +lon_0=-85.5 +k_0=0.99990314 +x_0=500000 +y_0=359891.816 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5462\":'+proj=lcc +lat_1=11.73333333333333 +lat_0=11.73333333333333 +lon_0=-85.5 +k_0=0.9999222800000001 +x_0=500000 +y_0=288876.327 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5463\":'+proj=utm +zone=17 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5466\":'+proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs ',\n  \"EPSG:5469\":'+proj=lcc +lat_1=8.416666666666666 +lat_0=8.416666666666666 +lon_0=-80 +k_0=0.99989909 +x_0=500000 +y_0=294865.303 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:5472\":'+proj=poly +lat_0=8.25 +lon_0=-81 +x_0=914391.7962 +y_0=999404.7217154861 +ellps=clrk66 +to_meter=0.9143917962 +no_defs ',\n  \"EPSG:5479\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=163 +x_0=7000000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5480\":'+proj=lcc +lat_1=-73.66666666666667 +lat_2=-75.33333333333333 +lat_0=-74.5 +lon_0=165 +x_0=5000000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5481\":'+proj=lcc +lat_1=-70.66666666666667 +lat_2=-72.33333333333333 +lat_0=-71.5 +lon_0=166 +x_0=3000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5482\":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=180 +k=0.994 +x_0=5000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5490\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5513\":'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5514\":'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5518\":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=175,-38,113,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5519\":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:5520\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5523\":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=1500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5530\":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5531\":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5532\":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5533\":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5534\":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5535\":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5536\":'+proj=utm +zone=21 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:5537\":'+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:5538\":'+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:5539\":'+proj=utm +zone=24 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:5550\":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5551\":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5552\":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5559\":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5562\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5563\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5564\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5565\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5566\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5567\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5568\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5569\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5570\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5571\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5572\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5573\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5574\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5575\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5576\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5577\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5578\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5579\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5580\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5581\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5582\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5583\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5588\":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=304800 +y_0=304800 +datum=NAD27 +units=ft +no_defs ',\n  \"EPSG:5589\":'+proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs ',\n  \"EPSG:5596\":'+proj=tmerc +lat_0=0 +lon_0=11.33333333333333 +k=1 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5623\":'+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:5624\":'+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:5625\":'+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:5627\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5629\":'+proj=utm +zone=38 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',\n  \"EPSG:5631\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5632\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5633\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5634\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5635\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5636\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5637\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5638\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5639\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5641\":'+proj=merc +lon_0=-43 +lat_ts=-2 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5643\":'+proj=lcc +lat_1=52.66666666666666 +lat_2=54.33333333333334 +lat_0=48 +lon_0=10 +x_0=815000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5644\":'+proj=utm +zone=39 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5646\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:5649\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5650\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5651\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5652\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5653\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5654\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:5655\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:5659\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=500053 +y_0=-3999820 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',\n  \"EPSG:5663\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5664\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5665\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5666\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5667\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5668\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5669\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5670\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5671\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5672\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5673\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5674\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5675\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5676\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5677\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5678\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5679\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5680\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5682\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5683\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5684\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5685\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5700\":'+proj=utm +zone=1 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5825\":'+proj=tmerc +lat_0=-35.31773627777778 +lon_0=149.0092948305555 +k=1.000086 +x_0=200000 +y_0=600000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:5836\":'+proj=utm +zone=37 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5837\":'+proj=utm +zone=40 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5839\":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5842\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5844\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5858\":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5875\":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5876\":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5877\":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5879\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5880\":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5887\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:5890\":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=90 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',\n  \"EPSG:5921\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5922\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5923\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5924\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5925\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5926\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5927\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5928\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5929\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5930\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5931\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5932\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5933\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5934\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5935\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5936\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-150 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5937\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-100 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5938\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-33 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5939\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=18 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5940\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=105 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6050\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-30 +x_0=25500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6051\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-52 +x_0=18500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6052\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-12 +x_0=20500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6053\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6054\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-39 +x_0=31500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6055\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-10 +x_0=33500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6056\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-64 +x_0=20500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6057\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-39 +x_0=22500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6058\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-14 +x_0=24500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6059\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-62 +x_0=41500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6060\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-42 +x_0=43500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6061\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-22 +x_0=45500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6062\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-56 +x_0=26500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6063\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-38 +x_0=28500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6064\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-20 +x_0=30500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6065\":'+proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-51 +x_0=11500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6066\":'+proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-34 +x_0=13500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6067\":'+proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-52 +x_0=20500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6068\":'+proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-37 +x_0=22500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6069\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=16 +x_0=22500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6070\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=21 +x_0=11500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6071\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=10 +x_0=26500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6072\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=34 +x_0=28500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6073\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=14 +x_0=11500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6074\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=34 +x_0=13500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6075\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=53 +x_0=24500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6076\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=93 +x_0=26500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6077\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=52 +x_0=13500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6078\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=83 +x_0=15500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6079\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=114 +x_0=17500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6080\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=145 +x_0=19500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6081\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=58 +x_0=30500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6082\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=82 +x_0=32500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6083\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=106 +x_0=34500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6084\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=130 +x_0=36500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6085\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=154 +x_0=38500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6086\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=179 +x_0=40500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6087\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=54 +x_0=15500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6088\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=74 +x_0=17500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6089\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=95 +x_0=19500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6090\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=116 +x_0=21500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6091\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=137 +x_0=23500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6092\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=158 +x_0=25500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6093\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=179 +x_0=27500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6094\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-163 +x_0=29500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6095\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-147 +x_0=31500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6096\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-165 +x_0=14500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6097\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-147 +x_0=16500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6098\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-90 +x_0=23500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6099\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-115 +x_0=14500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6100\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-75 +x_0=16500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6101\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-129 +x_0=25500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6102\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-99 +x_0=27500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6103\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6104\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-129 +x_0=14500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6105\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-104 +x_0=16500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6106\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-79 +x_0=18500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6107\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-131 +x_0=33500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6108\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-111 +x_0=35500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6109\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-91 +x_0=37500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6110\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-71 +x_0=39500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6111\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-132 +x_0=18500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6112\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-113 +x_0=20500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6113\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-94 +x_0=22500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6114\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-75 +x_0=24500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6115\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=30 +x_0=27500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6116\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=90 +x_0=29500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6117\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=150 +x_0=31500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6118\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-150 +x_0=21500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6119\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=133 +x_0=28500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6120\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=166 +x_0=10500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6121\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-154 +x_0=12500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6122\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=176 +x_0=21500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6123\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-153 +x_0=23500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6124\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-155 +x_0=12500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6125\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-5 +x_0=47500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6128\":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=ft +no_defs ',\n  \"EPSG:6129\":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=ft +no_defs ',\n  \"EPSG:6141\":'+proj=lcc +lat_1=19.33333333333333 +lat_2=19.7 +lat_0=19.33333333333333 +lon_0=80.56666666666666 +x_0=899160 +y_0=579120 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:20004\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20005\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20006\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20007\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20008\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20009\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20010\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20011\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20012\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20013\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20014\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20015\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20016\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20017\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20018\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20019\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20020\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20021\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20022\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20023\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20024\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20025\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20026\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20027\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20028\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20029\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20030\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20031\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20032\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20064\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20065\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20066\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20067\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20068\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20069\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20070\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20071\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20072\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20073\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20074\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20075\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20076\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20077\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20078\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20079\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20080\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20081\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20082\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20083\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20084\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20085\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20086\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20087\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20088\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20089\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20090\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20091\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20092\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20135\":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20136\":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20137\":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20138\":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20248\":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20249\":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20250\":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20251\":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20252\":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20253\":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20254\":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20255\":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20256\":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20257\":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20258\":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20348\":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20349\":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20350\":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20351\":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20352\":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20353\":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20354\":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20355\":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20356\":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20357\":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20358\":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20436\":'+proj=utm +zone=36 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20437\":'+proj=utm +zone=37 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20438\":'+proj=utm +zone=38 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20439\":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20440\":'+proj=utm +zone=40 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20499\":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20538\":'+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20539\":'+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20790\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs ',\n  \"EPSG:20791\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs ',\n  \"EPSG:20822\":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20823\":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20824\":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20934\":'+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20935\":'+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20936\":'+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21035\":'+proj=utm +zone=35 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21036\":'+proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21037\":'+proj=utm +zone=37 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21095\":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21096\":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21097\":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21100\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:21148\":'+proj=utm +zone=48 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21149\":'+proj=utm +zone=49 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21150\":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21291\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21292\":'+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21413\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21414\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21415\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21416\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21417\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21418\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21419\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21420\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21421\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21422\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21423\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21453\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21454\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21455\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21456\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21457\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21458\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21459\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21460\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21461\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21462\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21463\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21473\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21474\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21475\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21476\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21477\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21478\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21479\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21480\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21481\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21482\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21483\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21500\":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs ',\n  \"EPSG:21780\":'+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +units=m +no_defs ',\n  \"EPSG:21781\":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21782\":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21817\":'+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21818\":'+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21891\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21892\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21893\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21894\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21896\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21897\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21898\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21899\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22032\":'+proj=utm +zone=32 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22033\":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22091\":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22092\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22171\":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22172\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22173\":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22174\":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22175\":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22176\":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22177\":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22181\":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22182\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22183\":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22184\":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22185\":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22186\":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22187\":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22191\":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22192\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22193\":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22194\":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22195\":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22196\":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22197\":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22234\":'+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22235\":'+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22236\":'+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22275\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22277\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22279\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22281\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22283\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22285\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22287\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22289\":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22291\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22293\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22332\":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22391\":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22392\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22521\":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22522\":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22523\":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22524\":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22525\":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22700\":'+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22770\":'+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22780\":'+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22832\":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:22991\":'+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22992\":'+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22993\":'+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22994\":'+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23028\":'+proj=utm +zone=28 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23029\":'+proj=utm +zone=29 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23030\":'+proj=utm +zone=30 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23031\":'+proj=utm +zone=31 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23032\":'+proj=utm +zone=32 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23033\":'+proj=utm +zone=33 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23034\":'+proj=utm +zone=34 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23035\":'+proj=utm +zone=35 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23036\":'+proj=utm +zone=36 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23037\":'+proj=utm +zone=37 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23038\":'+proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23090\":'+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23095\":'+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23239\":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23240\":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23433\":'+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:23700\":'+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23830\":'+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23831\":'+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23832\":'+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23833\":'+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23834\":'+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23835\":'+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23836\":'+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23837\":'+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23838\":'+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23839\":'+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23840\":'+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23841\":'+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23842\":'+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23843\":'+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23844\":'+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23845\":'+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23846\":'+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23847\":'+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23848\":'+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23849\":'+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23850\":'+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23851\":'+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23852\":'+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23853\":'+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23866\":'+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23867\":'+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23868\":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23869\":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23870\":'+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23871\":'+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23872\":'+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23877\":'+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23878\":'+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23879\":'+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23880\":'+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23881\":'+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23882\":'+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23883\":'+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23884\":'+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23886\":'+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23887\":'+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23888\":'+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23889\":'+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23890\":'+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23891\":'+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23892\":'+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23893\":'+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23894\":'+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23946\":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23947\":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23948\":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24047\":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24048\":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24100\":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs ',\n  \"EPSG:24200\":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24305\":'+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24306\":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24311\":'+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24312\":'+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24313\":'+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24342\":'+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24343\":'+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24344\":'+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24345\":'+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24346\":'+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24347\":'+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24370\":'+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24371\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24372\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24373\":'+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24374\":'+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24375\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24376\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24377\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24378\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24379\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24380\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24381\":'+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24382\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24383\":'+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24500\":'+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24547\":'+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24548\":'+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24571\":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs ',\n  \"EPSG:24600\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24718\":'+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24719\":'+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24720\":'+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24817\":'+proj=utm +zone=17 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24818\":'+proj=utm +zone=18 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24819\":'+proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24820\":'+proj=utm +zone=20 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24821\":'+proj=utm +zone=21 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24877\":'+proj=utm +zone=17 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24878\":'+proj=utm +zone=18 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24879\":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24880\":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24881\":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24882\":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24891\":'+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24892\":'+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24893\":'+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25000\":'+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25231\":'+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:25391\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25392\":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25393\":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25394\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25395\":'+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25700\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:25828\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25829\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25830\":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25831\":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25832\":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25833\":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25834\":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25835\":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25836\":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25837\":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25838\":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25884\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25932\":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26191\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26192\":'+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26193\":'+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26194\":'+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26195\":'+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26237\":'+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26331\":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26332\":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26391\":'+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26392\":'+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26393\":'+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26432\":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26591\":'+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs ',\n  \"EPSG:26592\":'+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs ',\n  \"EPSG:26632\":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26692\":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26701\":'+proj=utm +zone=1 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26702\":'+proj=utm +zone=2 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26703\":'+proj=utm +zone=3 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26704\":'+proj=utm +zone=4 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26705\":'+proj=utm +zone=5 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26706\":'+proj=utm +zone=6 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26707\":'+proj=utm +zone=7 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26708\":'+proj=utm +zone=8 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26709\":'+proj=utm +zone=9 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26710\":'+proj=utm +zone=10 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26711\":'+proj=utm +zone=11 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26712\":'+proj=utm +zone=12 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26713\":'+proj=utm +zone=13 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26714\":'+proj=utm +zone=14 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26715\":'+proj=utm +zone=15 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26716\":'+proj=utm +zone=16 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26717\":'+proj=utm +zone=17 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26718\":'+proj=utm +zone=18 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26719\":'+proj=utm +zone=19 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26720\":'+proj=utm +zone=20 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26721\":'+proj=utm +zone=21 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26722\":'+proj=utm +zone=22 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26729\":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26730\":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26731\":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +no_uoff +gamma=323.1301023611111 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26732\":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26733\":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26734\":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26735\":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26736\":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26737\":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26738\":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26739\":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26740\":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26741\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26742\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26743\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26744\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26745\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26746\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26747\":'+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26748\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26749\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26750\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26751\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26752\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26753\":'+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26754\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26755\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26756\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26757\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26758\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26759\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26760\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26766\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26767\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26768\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26769\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26770\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26771\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26772\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26773\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26774\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26775\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26776\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26777\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26778\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26779\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26780\":'+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26781\":'+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26782\":'+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26783\":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26784\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26785\":'+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26786\":'+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26787\":'+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26791\":'+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26792\":'+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26793\":'+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26794\":'+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26795\":'+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26796\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26797\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26798\":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26799\":'+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26801\":'+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26802\":'+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26803\":'+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26811\":'+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26812\":'+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26813\":'+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26814\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26815\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26819\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26820\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26821\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26822\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26823\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26824\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26825\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26826\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26830\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26831\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26832\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26833\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26834\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26835\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26836\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26837\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26841\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26842\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26843\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26844\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26845\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26846\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26847\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26848\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26849\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26850\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26851\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26852\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26853\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26854\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26855\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26856\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26857\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26858\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26859\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26860\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26861\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26862\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26863\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26864\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26865\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26866\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26867\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26868\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26869\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26870\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26891\":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26892\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26893\":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26894\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26895\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26896\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26897\":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26898\":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26899\":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26901\":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26902\":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26903\":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26904\":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26905\":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26906\":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26907\":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26908\":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26909\":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26910\":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26911\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26912\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26913\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26914\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26915\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26916\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26917\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26918\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26919\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26920\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26921\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26922\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26923\":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26929\":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26930\":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26931\":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26932\":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26933\":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26934\":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26935\":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26936\":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26937\":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26938\":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26939\":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26940\":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26941\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26942\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26943\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26944\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26945\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26946\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26948\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26949\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26950\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26951\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26952\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26953\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26954\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26955\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26956\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26957\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26958\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26959\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26960\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26961\":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26962\":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26963\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26964\":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26965\":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26966\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26967\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26968\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26969\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26970\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26971\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26972\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26973\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26974\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26975\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26976\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26977\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26978\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26979\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26980\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26981\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26982\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26983\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26984\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26985\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26986\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26987\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26988\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26989\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26990\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26991\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26992\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26993\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26994\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26995\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26996\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26997\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26998\":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27037\":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27038\":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27039\":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27040\":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27120\":'+proj=utm +zone=20 +ellps=intl +towgs84=-10,375,165,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27200\":'+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27205\":'+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27206\":'+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27207\":'+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27208\":'+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27209\":'+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27210\":'+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27211\":'+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27212\":'+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27213\":'+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27214\":'+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27215\":'+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27216\":'+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27217\":'+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27218\":'+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27219\":'+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27220\":'+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27221\":'+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27222\":'+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27223\":'+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27224\":'+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27225\":'+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27226\":'+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27227\":'+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27228\":'+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27229\":'+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27230\":'+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27231\":'+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27232\":'+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27258\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27259\":'+proj=utm +zone=59 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27260\":'+proj=utm +zone=60 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27291\":'+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs ',\n  \"EPSG:27292\":'+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs ',\n  \"EPSG:27391\":'+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27392\":'+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27393\":'+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27394\":'+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27395\":'+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27396\":'+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27397\":'+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27398\":'+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27429\":'+proj=utm +zone=29 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27492\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27493\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27500\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +units=m +no_defs ',\n  \"EPSG:27561\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27562\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27563\":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27564\":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27571\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27572\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27573\":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27574\":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27581\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27582\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27583\":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27584\":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27591\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27592\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27593\":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27594\":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27700\":'+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs ',\n  \"EPSG:28191\":'+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',\n  \"EPSG:28192\":'+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',\n  \"EPSG:28193\":'+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',\n  \"EPSG:28232\":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28348\":'+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28349\":'+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28350\":'+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28351\":'+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28352\":'+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28353\":'+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28354\":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28355\":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28356\":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28357\":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28358\":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28402\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28403\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28404\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28405\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28406\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28407\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28408\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28409\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28410\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28411\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28412\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28413\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28414\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28415\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28416\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28417\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28418\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28419\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28420\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28421\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28422\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28423\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28424\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28425\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28426\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28427\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28428\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28429\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28430\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28431\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28432\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28462\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28463\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28464\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28465\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28466\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28467\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28468\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28469\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28470\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28471\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28472\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28473\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28474\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28475\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28476\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28477\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28478\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28479\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28480\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28481\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28482\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28483\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28484\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28485\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28486\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28487\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28488\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28489\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28490\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28491\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28492\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28600\":'+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28991\":'+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs ',\n  \"EPSG:28992\":'+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs ',\n  \"EPSG:29100\":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29101\":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29118\":'+proj=utm +zone=18 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29119\":'+proj=utm +zone=19 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29120\":'+proj=utm +zone=20 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29121\":'+proj=utm +zone=21 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29122\":'+proj=utm +zone=22 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29168\":'+proj=utm +zone=18 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29169\":'+proj=utm +zone=19 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29170\":'+proj=utm +zone=20 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29171\":'+proj=utm +zone=21 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29172\":'+proj=utm +zone=22 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29177\":'+proj=utm +zone=17 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29178\":'+proj=utm +zone=18 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29179\":'+proj=utm +zone=19 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29180\":'+proj=utm +zone=20 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29181\":'+proj=utm +zone=21 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29182\":'+proj=utm +zone=22 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29183\":'+proj=utm +zone=23 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29184\":'+proj=utm +zone=24 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29185\":'+proj=utm +zone=25 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29187\":'+proj=utm +zone=17 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29188\":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29189\":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29190\":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29191\":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29192\":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29193\":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29194\":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29195\":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29220\":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29221\":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29333\":'+proj=utm +zone=33 +south +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29371\":'+proj=tmerc +lat_0=-22 +lon_0=11 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29373\":'+proj=tmerc +lat_0=-22 +lon_0=13 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29375\":'+proj=tmerc +lat_0=-22 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29377\":'+proj=tmerc +lat_0=-22 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29379\":'+proj=tmerc +lat_0=-22 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29381\":'+proj=tmerc +lat_0=-22 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29383\":'+proj=tmerc +lat_0=-22 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29385\":'+proj=tmerc +lat_0=-22 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29635\":'+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:29636\":'+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:29700\":'+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:29702\":'+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:29738\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29739\":'+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29849\":'+proj=utm +zone=49 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29850\":'+proj=utm +zone=50 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29871\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +to_meter=20.11676512155263 +no_defs ',\n  \"EPSG:29872\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +to_meter=0.3047994715386762 +no_defs ',\n  \"EPSG:29873\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29900\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',\n  \"EPSG:29901\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',\n  \"EPSG:29902\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',\n  \"EPSG:29903\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',\n  \"EPSG:30161\":'+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30162\":'+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30163\":'+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30164\":'+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30165\":'+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30166\":'+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30167\":'+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30168\":'+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30169\":'+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30170\":'+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30171\":'+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30172\":'+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30173\":'+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30174\":'+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30175\":'+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30176\":'+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30177\":'+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30178\":'+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30179\":'+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30200\":'+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.201166195164 +no_defs ',\n  \"EPSG:30339\":'+proj=utm +zone=39 +ellps=helmert +units=m +no_defs ',\n  \"EPSG:30340\":'+proj=utm +zone=40 +ellps=helmert +units=m +no_defs ',\n  \"EPSG:30491\":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30492\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30493\":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:30494\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:30729\":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30730\":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30731\":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30732\":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30791\":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30792\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30800\":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:31028\":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:31121\":'+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31154\":'+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31170\":'+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31171\":'+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31251\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31252\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31253\":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31254\":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31255\":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31256\":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31257\":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31258\":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31259\":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31265\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31266\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31267\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31268\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31275\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31276\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31277\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31278\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31279\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31281\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31282\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31283\":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31284\":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31285\":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31286\":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31287\":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31288\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31289\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31290\":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31291\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31292\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31293\":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31294\":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31295\":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31296\":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31297\":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31300\":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs ',\n  \"EPSG:31370\":'+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs ',\n  \"EPSG:31461\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31462\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31463\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31464\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31465\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31466\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31467\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31468\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31469\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31528\":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31529\":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31600\":'+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31700\":'+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31838\":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31839\":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31900\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31901\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31965\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31966\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31967\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31968\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31969\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31970\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31971\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31972\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31973\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31974\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31975\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31976\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31977\":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31978\":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31979\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31980\":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31981\":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31982\":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31983\":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31984\":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31985\":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31986\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31987\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31988\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31989\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31990\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31991\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31992\":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31993\":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31994\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31995\":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31996\":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31997\":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31998\":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31999\":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32000\":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32001\":'+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32002\":'+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32003\":'+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32005\":'+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32006\":'+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32007\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32008\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32009\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32010\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32011\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32012\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32013\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32014\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32015\":'+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32016\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32017\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32018\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32019\":'+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32020\":'+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32021\":'+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32022\":'+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32023\":'+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32024\":'+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32025\":'+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32026\":'+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32027\":'+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32028\":'+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32029\":'+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32030\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32031\":'+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32033\":'+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32034\":'+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32035\":'+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32036\":'+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32037\":'+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32038\":'+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32039\":'+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32040\":'+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32041\":'+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32042\":'+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32043\":'+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32044\":'+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32045\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32046\":'+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32047\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32048\":'+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32049\":'+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32050\":'+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32051\":'+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32052\":'+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32053\":'+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32054\":'+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32055\":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32056\":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32057\":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32058\":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32061\":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32062\":'+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32064\":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32065\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32066\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32067\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32074\":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32075\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32076\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32077\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32081\":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32082\":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32083\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32084\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32085\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32086\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32098\":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32099\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32100\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32104\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32107\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32108\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32109\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32110\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32111\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32112\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32113\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32114\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32115\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32116\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32117\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32118\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32119\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32120\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32121\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32122\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32123\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32124\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32125\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32126\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32127\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32128\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32129\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32130\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32133\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32134\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32135\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32136\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32137\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32138\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32139\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32140\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32141\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32142\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32143\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32144\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32145\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32146\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32147\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32148\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32149\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32150\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32151\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32152\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32153\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32154\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32155\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32156\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32157\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32158\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32161\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32164\":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:32165\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:32166\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:32167\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:32180\":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32181\":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32182\":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32183\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32184\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32185\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32186\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32187\":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32188\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32189\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32190\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32191\":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32192\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32193\":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32194\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32195\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32196\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32197\":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32198\":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32199\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32201\":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32202\":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32203\":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32204\":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32205\":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32206\":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32207\":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32208\":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32209\":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32210\":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32211\":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32212\":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32213\":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32214\":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32215\":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32216\":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32217\":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32218\":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32219\":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32220\":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32221\":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32222\":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32223\":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32224\":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32225\":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32226\":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32227\":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32228\":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32229\":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32230\":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32231\":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32232\":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32233\":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32234\":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32235\":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32236\":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32237\":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32238\":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32239\":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32240\":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32241\":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32242\":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32243\":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32244\":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32245\":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32246\":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32247\":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32248\":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32249\":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32250\":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32251\":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32252\":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32253\":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32254\":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32255\":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32256\":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32257\":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32258\":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32259\":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32260\":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32301\":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32302\":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32303\":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32304\":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32305\":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32306\":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32307\":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32308\":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32309\":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32310\":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32311\":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32312\":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32313\":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32314\":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32315\":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32316\":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32317\":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32318\":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32319\":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32320\":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32321\":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32322\":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32323\":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32324\":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32325\":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32326\":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32327\":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32328\":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32329\":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32330\":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32331\":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32332\":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32333\":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32334\":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32335\":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32336\":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32337\":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32338\":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32339\":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32340\":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32341\":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32342\":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32343\":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32344\":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32345\":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32346\":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32347\":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32348\":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32349\":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32350\":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32351\":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32352\":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32353\":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32354\":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32355\":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32356\":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32357\":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32358\":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32359\":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32360\":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32401\":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32402\":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32403\":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32404\":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32405\":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32406\":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32407\":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32408\":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32409\":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32410\":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32411\":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32412\":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32413\":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32414\":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32415\":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32416\":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32417\":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32418\":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32419\":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32420\":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32421\":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32422\":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32423\":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32424\":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32425\":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32426\":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32427\":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32428\":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32429\":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32430\":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32431\":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32432\":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32433\":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32434\":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32435\":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32436\":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32437\":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32438\":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32439\":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32440\":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32441\":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32442\":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32443\":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32444\":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32445\":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32446\":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32447\":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32448\":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32449\":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32450\":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32451\":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32452\":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32453\":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32454\":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32455\":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32456\":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32457\":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32458\":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32459\":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32460\":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32501\":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32502\":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32503\":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32504\":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32505\":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32506\":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32507\":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32508\":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32509\":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32510\":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32511\":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32512\":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32513\":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32514\":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32515\":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32516\":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32517\":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32518\":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32519\":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32520\":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32521\":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32522\":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32523\":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32524\":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32525\":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32526\":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32527\":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32528\":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32529\":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32530\":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32531\":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32532\":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32533\":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32534\":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32535\":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32536\":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32537\":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32538\":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32539\":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32540\":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32541\":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32542\":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32543\":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32544\":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32545\":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32546\":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32547\":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32548\":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32549\":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32550\":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32551\":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32552\":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32553\":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32554\":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32555\":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32556\":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32557\":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32558\":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32559\":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32560\":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32601\":'+proj=utm +zone=1 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32602\":'+proj=utm +zone=2 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32603\":'+proj=utm +zone=3 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32604\":'+proj=utm +zone=4 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32605\":'+proj=utm +zone=5 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32606\":'+proj=utm +zone=6 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32607\":'+proj=utm +zone=7 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32608\":'+proj=utm +zone=8 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32609\":'+proj=utm +zone=9 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32610\":'+proj=utm +zone=10 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32611\":'+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32612\":'+proj=utm +zone=12 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32613\":'+proj=utm +zone=13 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32614\":'+proj=utm +zone=14 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32615\":'+proj=utm +zone=15 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32616\":'+proj=utm +zone=16 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32617\":'+proj=utm +zone=17 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32618\":'+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32619\":'+proj=utm +zone=19 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32620\":'+proj=utm +zone=20 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32621\":'+proj=utm +zone=21 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32622\":'+proj=utm +zone=22 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32623\":'+proj=utm +zone=23 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32624\":'+proj=utm +zone=24 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32625\":'+proj=utm +zone=25 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32626\":'+proj=utm +zone=26 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32627\":'+proj=utm +zone=27 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32628\":'+proj=utm +zone=28 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32629\":'+proj=utm +zone=29 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32630\":'+proj=utm +zone=30 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32631\":'+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32632\":'+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32633\":'+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32634\":'+proj=utm +zone=34 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32635\":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32636\":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32637\":'+proj=utm +zone=37 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32638\":'+proj=utm +zone=38 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32639\":'+proj=utm +zone=39 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32640\":'+proj=utm +zone=40 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32641\":'+proj=utm +zone=41 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32642\":'+proj=utm +zone=42 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32643\":'+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32644\":'+proj=utm +zone=44 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32645\":'+proj=utm +zone=45 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32646\":'+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32647\":'+proj=utm +zone=47 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32648\":'+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32649\":'+proj=utm +zone=49 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32650\":'+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32651\":'+proj=utm +zone=51 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32652\":'+proj=utm +zone=52 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32653\":'+proj=utm +zone=53 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32654\":'+proj=utm +zone=54 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32655\":'+proj=utm +zone=55 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32656\":'+proj=utm +zone=56 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32657\":'+proj=utm +zone=57 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32658\":'+proj=utm +zone=58 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32659\":'+proj=utm +zone=59 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32660\":'+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32661\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32662\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32663\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32664\":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',\n  \"EPSG:32665\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',\n  \"EPSG:32666\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',\n  \"EPSG:32667\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',\n  \"EPSG:32701\":'+proj=utm +zone=1 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32702\":'+proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32703\":'+proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32704\":'+proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32705\":'+proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32706\":'+proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32707\":'+proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32708\":'+proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32709\":'+proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32710\":'+proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32711\":'+proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32712\":'+proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32713\":'+proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32714\":'+proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32715\":'+proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32716\":'+proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32717\":'+proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32718\":'+proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32719\":'+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32720\":'+proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32721\":'+proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32722\":'+proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32723\":'+proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32724\":'+proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32725\":'+proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32726\":'+proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32727\":'+proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32728\":'+proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32729\":'+proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32730\":'+proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32731\":'+proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32732\":'+proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32733\":'+proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32734\":'+proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32735\":'+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32736\":'+proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32737\":'+proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32738\":'+proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32739\":'+proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32740\":'+proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32741\":'+proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32742\":'+proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32743\":'+proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32744\":'+proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32745\":'+proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32746\":'+proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32747\":'+proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32748\":'+proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32749\":'+proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32750\":'+proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32751\":'+proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32752\":'+proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32753\":'+proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32754\":'+proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32755\":'+proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32756\":'+proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32757\":'+proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32758\":'+proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32759\":'+proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32760\":'+proj=utm +zone=60 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32761\":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32766\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs '\n};\n\n},{}],78:[function(require,module,exports){\nvar util = require('util')\n  , fileType = require('file-type');\n\nvar TileCreator = require('./index').TileCreator\n  , TileBoundingBoxUtils = require('../tileBoundingBoxUtils')\n  , TileUtilities = require('./tileUtilities')\n  , ProjectTile = require('./projectTile.js');\n\nfunction CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) {\n  TileCreator.apply(this, arguments);\n  this.canvas = canvas || document.createElement('canvas');\n  this.canvas.width  = width;\n  this.canvas.height = height;\n  this.ctx = this.canvas.getContext('2d');\n\n  this.image = document.createElement('img');\n\n  this.tileCanvas = document.createElement('canvas');\n  this.tileContext = this.tileCanvas.getContext('2d');\n  this.tileCanvas.width = tileMatrix.tile_width;\n  this.tileCanvas.height = tileMatrix.tile_height;\n\n  this.imageData = new Uint8ClampedArray(width * height * 4);\n}\n\nutil.inherits(CanvasTileCreator, TileCreator);\n\nCanvasTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) {\n  var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1);\n  this.imageData.set(color.data, (targetY * this.width * 4) + (targetX * 4));\n};\n\nCanvasTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) {\n  var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow);\n\n  var type = fileType(tileData);\n  var binary = '';\n  var bytes = tileData;\n  var len = bytes.byteLength;\n  for (var i = 0; i < len; i++) {\n    binary += String.fromCharCode( bytes[ i ] );\n  }\n  var base64Data = btoa( binary );\n\n  return new Promise(function(resolve, reject) {\n    this.chunks = [];\n    this.image.onload = function() {\n      resolve(this.tileContext.drawImage(this.image, 0, 0));\n    }.bind(this);\n    this.image.src = 'data:'+type.mime+';base64,' + base64Data;\n  }.bind(this))\n  .then(function() {\n    return this.projectTile(tileData, gridColumn, gridRow);\n  }.bind(this))\n  .then(function() {\n    if (this.chunks && this.chunks.length) {\n      return this.chunks.reduce(function(sequence, chunk) {\n        var type = fileType(tileData);\n\n        var binary = '';\n        var bytes = chunk.chunk;\n        var len = bytes.byteLength;\n        for (var i = 0; i < len; i++) {\n          binary += String.fromCharCode( bytes[ i ] );\n        }\n\n        var base64DataChunk = btoa( binary );\n        var image = document.createElement('img');\n\n        return sequence.then(function() {\n          return new Promise(function(resolve, reject) {\n            image.onload = function() {\n              var p = chunk.position;\n\n              this.ctx.drawImage(image,\n                p.sx,\n                p.sy,\n                p.sWidth,\n                p.sHeight,\n                p.dx,\n                p.dy,\n                p.dWidth,\n                p.dHeight\n              );\n              resolve();\n            }.bind(this);\n            image.src = 'data:'+type.mime+';base64,' + base64DataChunk;\n          }.bind(this));\n        }.bind(this));\n\n      }.bind(this), Promise.resolve());\n    }\n  }.bind(this));\n};\n\nCanvasTileCreator.prototype.getCompleteTile = function (format, callback) {\n  return this.canvas.toDataURL();\n};\n\nCanvasTileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) {\n  var ctx = this.ctx;\n  var width = this.width;\n  var height = this.height;\n\n  var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, this.tileBoundingBox, this.height, this.width, this.projectionTo, this.projectionFrom, this.projectionFromDefinition, this.tileHeightUnitsPerPixel, this.tileWidthUnitsPerPixel, this.tileMatrix.pixel_x_size, this.tileMatrix.pixel_y_size);\n\n  var job = {\n    tileBoundingBox: JSON.stringify(this.tileBoundingBox),\n    tileWidthUnitsPerPixel: this.tileWidthUnitsPerPixel,\n    tileHeightUnitsPerPixel: this.tileHeightUnitsPerPixel,\n    projectionTo: this.projectionTo,\n    projectionFrom: this.projectionFrom,\n    projectionFromDefinition: this.projectionFromDefinition,\n    tileWidth: this.tileMatrix.tile_width,\n    tileHeight: this.tileMatrix.tile_height,\n    pixelYSize: this.tileMatrix.pixel_y_size,\n    pixelXSize: this.tileMatrix.pixel_x_size,\n    height: this.height,\n    width: this.width,\n    tilePieceBoundingBox: JSON.stringify(tilePieceBoundingBox),\n    imageData: this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer\n  };\n\n  return new Promise(function(resolve, reject) {\n    try {\n      var work = require('webworkify');\n      var worker = work(require('./tileWorker.js'));\n\n      worker.onmessage = function(e) {\n        resolve(workerDone(e.data, piecePosition, ctx));\n      };\n\n      worker.postMessage(job, [this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer]);\n\n    } catch (e) {\n      worker = ProjectTile;\n      worker(job, function(err, data) {\n        resolve(workerDone(data, piecePosition, ctx));\n      });\n    }\n  }.bind(this));\n};\n\nfunction workerDone(data, piecePosition, ctx) {\n  if (data.message === 'done') {\n    var imageData = new Uint8ClampedArray(data.imageData);\n    var offsetX = piecePosition.startX;\n    var offsetY = piecePosition.startY;\n    var finalWidth = data.finalWidth;\n    var finalHeight = data.finalHeight;\n\n    var tmpCanvas = document.createElement('canvas');\n    tmpCanvas.width = finalWidth;\n    tmpCanvas.height = finalHeight;\n    tmpCanvas.getContext('2d').putImageData(new ImageData(imageData, finalWidth, finalHeight), 0, 0);\n\n    ctx.drawImage(tmpCanvas, offsetX, offsetY);\n  }\n}\n\n\nmodule.exports = CanvasTileCreator;\n\n},{\"../tileBoundingBoxUtils\":93,\"./index\":79,\"./projectTile.js\":81,\"./tileUtilities\":82,\"./tileWorker.js\":83,\"file-type\":223,\"util\":343,\"webworkify\":347}],79:[function(require,module,exports){\n(function (process){\nvar proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nvar TileBoundingBoxUtils = require('../tileBoundingBoxUtils');\n\nmodule.exports.initialize = function(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) {\n  var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);\n  var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);\n  var isNode = typeof(process) !== 'undefined' && process.version;\n  if (isNode && !isPhantom && !isElectron) {\n    var NodeTileCreator = require('./node');\n    return new NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas);\n  } else {\n    var CanvasTileCreator = require('./canvas');\n    return new CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas);\n  }\n}\n\nfunction TileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo) {\n  this.width = width;\n  this.height = height;\n  this.tileMatrix = tileMatrix;\n  this.projectionFrom = srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id;\n  this.projectionFromDefinition = srs.definition;\n  this.projectionTo = projectionTo.toUpperCase();\n  this.tileBoundingBox = tileBoundingBox;\n  this.tileMatrixSet = tileMatrixSet;\n  this.chunks = [];\n\n  this.tileHeightUnitsPerPixel = (tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude) / height;\n  this.tileWidthUnitsPerPixel = (tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude) / width;\n\n  // use this as a quick check if the projections are equal.  If they are we can shortcut some math\n  // special cases 'EPSG:900913' =='EPSG:3857' == 'EPSG:102113'\n  this.sameProjection = (this.projectionFrom === this.projectionTo) || (this.projectionTo === 'EPSG:3857' && (this.projectionFrom === 'EPSG:900913' || this.projectionFrom === 'EPSG:102113'));\n}\n\nmodule.exports.TileCreator = TileCreator;\n\nTileCreator.prototype.projectTile = function(tileData, gridColumn, gridRow) {\n  var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow);\n  if (!this.sameProjection) {\n    return this.reproject(tileData, bb);\n  } else {\n    return Promise.resolve(this.cutAndScale(tileData, bb));\n  }\n}\n\nTileCreator.prototype.cutAndScale = function (tileData, tilePieceBoundingBox) {\n  var position = TileBoundingBoxUtils.determinePositionAndScale(tilePieceBoundingBox, this.tileMatrix.tile_height, this.tileMatrix.tile_width, this.tileBoundingBox, this.height, this.width);\n  if (position.xPositionInFinalTileStart >= this.width || position.xPositionInFinalTileEnd <= 0 || position.yPositionInFinalTileStart >= this.height || position.yPositionInFinalTileEnd <= 0) {\n    // this tile doesn't belong just skip it\n  } else {\n    this.addChunk(tileData, position);\n  }\n};\n\nTileCreator.prototype.addChunk = function (chunk, position) {\n  this.chunks.push({\n    chunk: chunk,\n    position: position\n  });\n};\n\nTileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) {\n  var y = 0;\n  var x = 0;\n  var height = this.height;\n  var width = this.width;\n  var proj4To = proj4(this.projectionTo);\n  var proj4From;\n  if (this.projectionFrom) {\n    try {\n      proj4From = proj4(this.projectionFrom);\n    } catch (e) {}\n  }\n  if (!proj4From && this.projectionFromDefinition) {\n    proj4From = proj4(this.projectionFromDefinition);\n  }\n  var conversion;\n  try {\n    conversion = proj4(this.projectionTo, this.projectionFrom);\n  } catch (e) {}\n  if (!conversion) {\n    conversion = proj4(this.projectionTo, this.projectionFromDefinition);\n  }\n\n  var latitude;\n\n  var rows = [];\n  for (var i = 0; i < height; i++) {\n    rows.push(i);\n  }\n  var columns = [];\n  for (var i = 0; i < width; i++) {\n    columns.push(i);\n  }\n\n  return rows.reduce(function(rowSequence, row) {\n    return rowSequence.then(function() {\n      latitude = this.tileBoundingBox.maxLatitude - (row * this.tileHeightUnitsPerPixel);\n      var currentColumns = columns.slice();\n      return currentColumns.reduce(function(columnSequence, column) {\n        return columnSequence.then(function() {\n          // loop over all pixels in the target tile\n\n          // determine the position of the current pixel in the target tile\n          var longitude = this.tileBoundingBox.minLongitude + (column * this.tileWidthUnitsPerPixel);\n\n          // project that lat/lng to the source coordinate system\n          var projected = conversion.forward([longitude, latitude]);\n          var projectedLongitude = projected[0];\n          var projectedLatitude = projected[1];\n\n          // now find the source pixel\n          var xPixel = this.tileMatrix.tile_width - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / this.tileMatrix.pixel_x_size);\n          var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / this.tileMatrix.pixel_y_size);\n\n          if (xPixel >= 0 && xPixel < this.tileMatrix.tile_width\n          && yPixel >= 0 && yPixel < this.tileMatrix.tile_height) {\n            this.addPixel(column, row, xPixel, yPixel);\n          }\n        }.bind(this));\n      }.bind(this), Promise.resolve());\n    }.bind(this));\n  }.bind(this), Promise.resolve());\n};\n\n}).call(this,require('_process'))\n},{\"../tileBoundingBoxUtils\":93,\"./canvas\":78,\"./node\":80,\"_process\":284,\"proj4\":285}],80:[function(require,module,exports){\nvar util = require('util')\n  , concat = require('concat-stream')\n  , ImageUtils = require('../imageUtils');\n\nvar TileCreator = require('./index').TileCreator;\n\nfunction NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, projectionFrom, projectionTo, canvas) {\n  TileCreator.apply(this, arguments);\n\n  this.Canvas = require('canvas');\n  this.canvas = canvas || this.Canvas.createCanvas(width, height);\n  this.ctx = this.canvas.getContext('2d');\n\n  this.tileCanvas = this.Canvas.createCanvas(width, height);\n  this.tileContext = this.tileCanvas.getContext('2d');\n  this.tileCanvas.width = tileMatrix.tile_width;\n  this.tileCanvas.height = tileMatrix.tile_height;\n  this.imageData = this.Canvas.createImageData(new Uint8ClampedArray(width * height * 4), width, height);\n  this.pixelAdded = false;\n}\n\nutil.inherits(NodeTileCreator, TileCreator);\n\nNodeTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) {\n  var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1);\n  this.imageData.data.set(color.data, (targetY * this.width * 4) + (targetX * 4));\n  this.pixelAdded = true;\n};\n\nNodeTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) {\n  return ImageUtils.getImage(tileData)\n  .then(function(img) {\n    this.tile = img;\n    this.tileContext.drawImage(img, 0, 0);\n    this.chunks = [];\n  }.bind(this))\n  .then(function() {\n    return this.projectTile(tileData, gridColumn, gridRow);\n  }.bind(this))\n  .then(function() {\n    if (this.pixelAdded) {\n      this.ctx.putImageData(this.imageData, 0, 0);\n    }\n  }.bind(this))\n  .then(function() {\n    if (this.chunks && this.chunks.length) {\n      return this.chunks.reduce(function(sequence, chunk) {\n        return sequence.then(function() {\n          return ImageUtils.getImage(tileData);\n        }.bind(this))\n        .then(function(image) {\n          var p = chunk.position;\n          this.ctx.drawImage(image,\n            p.sx,\n            p.sy,\n            p.sWidth,\n            p.sHeight,\n            p.dx,\n            p.dy,\n            p.dWidth,\n            p.dHeight\n          );\n        }.bind(this));\n      }.bind(this), Promise.resolve());\n    }\n  }.bind(this))\n  .then(function() {\n    return this.canvas;\n  }.bind(this));\n};\n\nNodeTileCreator.prototype.getCompleteTile = function (format) {\n  return new Promise(function (resolve, reject) {\n    var writeStream = concat(function(buffer) {\n      resolve(buffer);\n    });\n    var stream = null;\n    if (format === 'png') {\n      stream = this.canvas.createPNGStream();\n    } else {\n      stream = this.canvas.createJPEGStream();\n    }\n    stream.pipe(writeStream);\n  }.bind(this));\n};\n\nmodule.exports = NodeTileCreator;\n\n},{\"../imageUtils\":89,\"./index\":79,\"canvas\":undefined,\"concat-stream\":185,\"util\":343}],81:[function(require,module,exports){\nvar proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nvar TileUtilities = require('./tileUtilities')\n  , proj4Defs = require('../../proj4Defs');\n\nmodule.exports = function(job, callback) {\n  console.log('Tile Worker - working');\n  console.time('Tile Worker - time');\n  var self = this;\n\n  if (proj4Defs[job.projectionTo]) {\n    proj4.defs(job.projectionTo, proj4Defs[job.projectionTo]);\n  }\n  if (proj4Defs[job.projectionFrom]) {\n    proj4.defs(job.projectionFrom, proj4Defs[job.projectionFrom]);\n  }\n  var proj4To = proj4(job.projectionTo);\n  var proj4From = proj4(job.projectionFrom);\n\n  var conversion;\n  try {\n    conversion = proj4(job.projectionTo, job.projectionFrom);\n  } catch (e) {}\n  if (!conversion) {\n    conversion = proj4(job.projectionTo, job.projectionFromDefinition);\n  }\n\n  var tileBoundingBox = JSON.parse(job.tileBoundingBox);\n  var tilePieceBoundingBox = JSON.parse(job.tilePieceBoundingBox);\n\n  var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, tileBoundingBox, job.height, job.width, job.projectionTo, job.projectionFrom, job.projectionFromDefinition, job.tileHeightUnitsPerPixel, job.tileWidthUnitsPerPixel, job.pixelXSize, job.pixelYSize);\n  var x = piecePosition.startX;\n  var y = piecePosition.startY;\n\n  var finalWidth = (piecePosition.endX - piecePosition.startX);\n  var finalHeight = (piecePosition.endY - piecePosition.startY);\n  if (finalWidth <= 0 || finalHeight <= 0) {\n    console.timeEnd('Tile Worker - time');\n    if (callback) {\n      return callback(null, {message:'donenodata'});\n    } else {\n      postMessage({message:'donenodata'});\n      return self.close();\n    }\n  }\n\n  var imageData = new Uint8ClampedArray(job.imageData);\n\n  var finalImageData = new Uint8ClampedArray(finalWidth * finalHeight * 4);\n  var latitude;\n\n  var yArray = [];\n  for (var i = y; i < piecePosition.endY; i++) {\n    yArray.push(i);\n  }\n\n  var xArray = [];\n  for (var i = x; i < piecePosition.endX; i++) {\n    xArray.push(i);\n  }\n\n  return yArray.reduce(function(ySequence, y) {\n    return ySequence.then(function() {\n      latitude = tileBoundingBox.maxLatitude - (y * job.tileHeightUnitsPerPixel);\n      var currentXArray = xArray.slice();\n      return currentXArray.reduce(function(xSequence, x) {\n        return xSequence.then(function() {\n          longitude = tileBoundingBox.minLongitude + (x * job.tileWidthUnitsPerPixel);\n          var projected = conversion.forward([longitude, latitude]);\n          var projectedLongitude = projected[0];\n          var projectedLatitude = projected[1];\n\n          var xPixel = job.tileWidth - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / job.pixelXSize);\n          var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / job.pixelYSize);\n          if (xPixel >= 0 && xPixel < job.tileWidth\n          && yPixel >= 0 && yPixel < job.tileHeight) {\n            var sliceStart = (yPixel * job.tileWidth * 4) + (xPixel * 4);\n            if (sliceStart >= 0) {\n              finalImageData.set(imageData.slice(sliceStart, sliceStart + 4), ((y-piecePosition.startY)*finalWidth*4) + ((x-piecePosition.startX)*4));\n            }\n          }\n        });\n      }, Promise.resolve());\n    });\n  }, Promise.resolve())\n  .then(function() {\n    console.timeEnd('Tile Worker - time');\n    if (callback) {\n      callback(null, {message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]);\n    } else {\n      postMessage({message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]);\n      self.close();\n    }\n  });\n}\n\n},{\"../../proj4Defs\":77,\"./tileUtilities\":82,\"proj4\":285}],82:[function(require,module,exports){\nvar proj4 = require('proj4');\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nmodule.exports.getPiecePosition = function(tilePieceBoundingBox, tileBoundingBox, height, width, projectionTo, projectionFrom, projectionFromDefinition, tileHeightUnitsPerPixel, tileWidthUnitsPerPixel, pixelXSize, pixelYSize) {\n  var conversion;\n  try {\n    conversion = proj4(projectionTo, projectionFrom);\n  } catch (e) {}\n  if (!conversion) {\n    conversion = proj4(projectionTo, projectionFromDefinition);\n  }\n\n  var maxLatitude = tilePieceBoundingBox.maxLatitude;\n  var minLatitude = tilePieceBoundingBox.minLatitude;\n  var minLongitude = tilePieceBoundingBox.minLongitude - pixelXSize;\n  var maxLongitude = tilePieceBoundingBox.maxLongitude + pixelXSize;\n\n  if (projectionTo.toUpperCase() === 'EPSG:3857' && projectionFrom.toUpperCase() === 'EPSG:4326') {\n    maxLatitude = maxLatitude > 85.0511 ? 85.0511 : maxLatitude;\n    minLatitude = minLatitude < -85.0511 ? -85.0511 : minLatitude;\n    minLongitude = minLongitude < -180.0 ? -180.0 : minLongitude;\n    maxLongitude = maxLongitude > 180.0 ? 180.0 : maxLongitude;\n  }\n\n  // ensure the projeced longitude wont wrap around the world\n  var negative180 = proj4('EPSG:4326', projectionTo, [-180,0]);\n  var positive180 = proj4('EPSG:4326', projectionTo, [180,0]);\n  minLongitude = minLongitude < negative180[0] ? negative180[0] : minLongitude;\n  maxLongitude = maxLongitude > positive180[0] ? positive180[0] : maxLongitude;\n\n  var pieceBoundingBoxInTileProjectionSW = conversion.inverse([minLongitude, minLatitude]);\n  var pieceBoundingBoxInTileProjectionNE = conversion.inverse([maxLongitude, maxLatitude]);\n\n  var pieceBBProjected = {\n    minLatitude: isNaN(pieceBoundingBoxInTileProjectionSW[1]) ? tileBoundingBox.minLatitude : pieceBoundingBoxInTileProjectionSW[1],\n    maxLatitude: isNaN(pieceBoundingBoxInTileProjectionNE[1]) ? tileBoundingBox.maxLatitude : pieceBoundingBoxInTileProjectionNE[1],\n    minLongitude: pieceBoundingBoxInTileProjectionSW[0],\n    maxLongitude: pieceBoundingBoxInTileProjectionNE[0]\n  };\n\n  var startY = y = Math.max(0, Math.floor((tileBoundingBox.maxLatitude - pieceBBProjected.maxLatitude) / tileHeightUnitsPerPixel));\n  var startX = x = Math.max(0, Math.floor((pieceBBProjected.minLongitude - tileBoundingBox.minLongitude) / tileWidthUnitsPerPixel));\n\n  var endY = Math.min(height, height - Math.floor((pieceBBProjected.minLatitude - tileBoundingBox.minLatitude) / tileHeightUnitsPerPixel));\n  var endX = Math.min(width, width - Math.floor((tileBoundingBox.maxLongitude - pieceBBProjected.maxLongitude) / tileWidthUnitsPerPixel));\n\n  return {\n    startY: startY,\n    startX: startX,\n    endY: endY,\n    endX: endX\n  };\n}\n\n},{\"proj4\":285}],83:[function(require,module,exports){\nvar ProjectTile = require('./projectTile');\n\nfunction tileWorker(e) {\n  console.log('Tile Worker - working');\n  console.time('Tile Worker - time');\n  var self = this;\n  var job = e.data;\n\n  ProjectTile(job, function(err, data) {\n    postMessage(data);\n    self.close();\n  });\n}\n\nmodule.exports = function(self) {\n  self.onmessage = tileWorker;\n  self.onerror = function(e) {\n    console.log('error', e);\n  }\n};\n\n},{\"./projectTile\":81}],84:[function(require,module,exports){\n/**\n * Feature Draw Type module.\n * @module tiles/features\n */\nvar FeatureDrawType = {\n  /**\n   * Circle for a point\n   */\n  CIRCLE: 'CIRCLE',\n  /**\n   * Stroke for a line of polygon\n   */\n  STROKE: 'STOKE',\n  /**\n   * Fill for a polygon\n   */\n  FILL: 'FILL'\n};\n\n\nmodule.exports = FeatureDrawType;\n\n},{}],85:[function(require,module,exports){\n/**\n * FeaturePaint module.\n * @module tiles/features\n */\nvar FeaturePaint = function () {\n  this.featurePaints = {};\n};\n\n/**\n * Get the feature paint for the featureDrawType\n * @param {module:tiles/features~FeatureDrawType} featureDrawType\n * @return {module:tiles/features~FeaturePaint} paint\n */\nFeaturePaint.prototype.getPaint = function(featureDrawType) {\n  return this.featurePaints[featureDrawType];\n};\n\n/**\n * Set the feature paint for the featureDrawType\n * @param {module:tiles/features~FeatureDrawType} featureDrawType\n * @param {module:tiles/features~Paint} paint\n */\nFeaturePaint.prototype.setPaint = function(featureDrawType, paint) {\n  this.featurePaints[featureDrawType] = paint;\n};\n\nmodule.exports = FeaturePaint;\n\n},{}],86:[function(require,module,exports){\n/**\n * Feature Paint Cache.\n * @module tiles/features\n */\nvar FeaturePaint = require('./featurePaint');\n\n\n/**\n * Constructor, created with cache size of {@link #DEFAULT_CACHE_SIZE}\n * @constructor\n */\nvar FeaturePaintCache = function(size = null) {\n  this.cacheSize = size !== null ? size : FeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE;\n  this.paintCache = {};\n  this.accessHistory = [];\n};\n\n/**\n * Get the cached featurePaint for the style row or null if not cached\n * @param {module:extension/style~StyleRow} styleRow style row\n * @return {module:tiles/features~FeaturePaint} feature paint or null\n */\nFeaturePaintCache.prototype.getFeaturePaintForStyleRow = function(styleRow) {\n  return this.getFeaturePaint(styleRow.getId());\n};\n\n/**\n * Get the cached featurePaint for the style row id or null if not cached\n * @param {Number} styleRowId style row id\n * @return {module:tiles/features~FeaturePaint} feature paint or null\n */\nFeaturePaintCache.prototype.getFeaturePaint = function(styleRowId) {\n  var featurePaint = this.paintCache[styleRowId];\n  if (!!featurePaint) {\n    var index = this.accessHistory.indexOf(styleRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }\n    this.accessHistory.push(styleRowId);\n  }\n  return featurePaint;\n};\n\n/**\n * Get the paint for the style row and draw type\n * @param {module:extension/style~StyleRow} styleRow style row\n * @param {String} type feature draw type\n * @return {module:tiles/features~Paint} paint\n */\nFeaturePaintCache.prototype.getPaintForStyleRow = function(styleRow, type) {\n  return this.getPaint(styleRow.getId(), type);\n};\n\n/**\n * Get the paint for the style row id and draw type\n * @param {Number} styleId  style row id\n * @param {String} type feature draw type\n * @return {module:tiles/features~Paint} paint\n */\nFeaturePaintCache.prototype.getPaint = function(styleId, type) {\n  var paint = null;\n  var featurePaint = this.getFeaturePaint(styleId);\n  if (featurePaint !== undefined && featurePaint !== null) {\n    paint = featurePaint.getPaint(type);\n  }\n  return paint;\n};\n\n/**\n * Cache the featurePaint for the style row\n * @param {module:extension/style~StyleRow} styleRow style row\n * @param {module:tiles/features~FeatureDrawType} type feature draw type\n * @param {module:tiles/features~Paint} paint paint\n */\nFeaturePaintCache.prototype.setPaintForStyleRow = function(styleRow, type, paint) {\n  this.setPaint(styleRow.getId(), type, paint);\n};\n\n/**\n * Cache the featurePaint for the style row id\n * @param {Number} styleRowId style row id\n * @param {module:tiles/features~FeatureDrawType} type feature draw type\n * @param {module:tiles/features~Paint} paint paint\n */\nFeaturePaintCache.prototype.setPaint = function(styleRowId, type, paint) {\n  var featurePaint = this.paintCache[styleRowId];\n  if (!featurePaint) {\n    featurePaint = new FeaturePaint();\n  } else {\n    var index = this.accessHistory.indexOf(styleRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }\n  }\n  featurePaint.setPaint(type, paint);\n  this.paintCache[styleRowId] = featurePaint;\n  this.accessHistory.push(styleRowId);\n  if (Object.keys(this.paintCache).length > this.cacheSize) {\n    var styleId = this.accessHistory.shift();\n    if (styleId) {\n      delete this.paintCache[styleId];\n    }\n  }\n};\n\n/**\n * Remove the cached featurePaint for the style row id\n * @param {Number} styleRowId style row id\n * @return {module:tiles/features~FeaturePaint} removed feature paint or null\n */\nFeaturePaintCache.prototype.remove = function(styleRowId) {\n  var removed = this.paintCache[styleRowId];\n  delete this.paintCache[styleRowId];\n  if (!!removed) {\n    var index = this.accessHistory.indexOf(styleRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }  }\n  return removed;\n};\n\n/**\n * Clear the cache\n */\nFeaturePaintCache.prototype.clear = function() {\n  this.paintCache = {};\n  this.accessHistory = [];\n};\n\n/**\n * Resize the cache\n * @param {Number} maxSize max size\n */\nFeaturePaintCache.prototype.resize = function(maxSize) {\n  this.cacheSize = maxSize;\n  var keys = Object.keys(this.paintCache);\n  if (keys.length > maxSize) {\n    var numberToRemove = keys.length - maxSize;\n    for (var i = 0; i < numberToRemove; i++) {\n      var styleRowId = this.accessHistory.shift();\n      if (!!styleRowId) {\n        delete this.paintCache[styleRowId];\n      }\n    }\n  }\n};\n\nFeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE = 100;\n\n\nmodule.exports = FeaturePaintCache;\n\n},{\"./featurePaint\":85}],87:[function(require,module,exports){\n(function (process){\n/**\n * FeatureTiles module.\n * @module tiles/features\n */\nvar TileBoundingBoxUtils = require('../tileBoundingBoxUtils')\n  , BoundingBox = require('../../boundingBox')\n  , FeatureTableStyles = require('../../extension/style/featureTableStyles')\n  , Paint = require('./paint')\n  , FeaturePaintCache = require('./featurePaintCache')\n  , FeatureDrawType = require('./featureDrawType')\n  , IconCache = require('../../extension/style/iconCache')\n  , ImageUtils = require('../imageUtils');\n\nvar d3geo = require('d3-geo')\n  , concat = require('concat-stream')\n  , reproject = require('reproject')\n  , PolyToLine = require('@turf/polygon-to-line').default;\n\n/**\n *  Tiles drawn from or linked to features. Used to query features and optionally draw tiles\n *  from those features.\n */\nvar FeatureTiles = function(featureDao, tileWidth = null, tileHeight = null) {\n  var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);\n  var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);\n  var isNode = typeof(process) !== 'undefined' && process.version;\n  this.useNodeCanvas =  isNode && !isPhantom && !isElectron;\n  this.featureDao = featureDao;\n  this.tileWidth = tileWidth !== null ? tileWidth : 256;\n  this.tileHeight = tileHeight !== null ? tileHeight : 256;\n  this.compressFormat = 'png';\n  this.pointRadius = 4.0;\n  this.pointPaint = new Paint();\n  this.pointIcon = null;\n  this.linePaint = new Paint();\n  this.linePaint.setStrokeWidth(2.0);\n  this.lineStrokeWidth = 2.0;\n  this.polygonPaint = new Paint();\n  this.polygonPaint.setStrokeWidth(2.0);\n  this.polygonStrokeWidth = 2.0;\n  this.fillPolygon = true;\n  this.polygonFillPaint = new Paint();\n  this.featurePaintCache = new FeaturePaintCache();\n  this.iconCache = new IconCache();\n  this.scale = 1.0;\n  this.geoPackage = this.featureDao.geoPackage;\n  if (this.geoPackage != null) {\n    this.featureTableStyles = new FeatureTableStyles(this.geoPackage, this.featureDao.getTable());\n    if (!this.featureTableStyles.has()) {\n      this.featureTableStyles = null;\n    }\n  }\n  this.maxFeaturesPerTile = null;\n  this.maxFeaturesTileDraw = null;\n  this.calculateDrawOverlap();\n};\n\n/**\n * Manually set the width and height draw overlap\n * @param {Number} pixels pixels\n */\nFeatureTiles.prototype.setDrawOverlap = function (pixels) {\n  this.setWidthDrawOverlap(pixels);\n  this.setHeightDrawOverlap(pixels);\n};\n\n/**\n * Get the width draw overlap\n * @return {Number} width draw overlap\n */\nFeatureTiles.prototype.getWidthDrawOverlap = function () {\n  return this.widthOverlap;\n};\n\n/**\n * Manually set the width draw overlap\n * @param {Number} pixels pixels\n */\nFeatureTiles.prototype.setWidthDrawOverlap = function (pixels) {\n  this.widthOverlap = pixels;\n};\n\n/**\n * Get the height draw overlap\n * @return {Number} height draw overlap\n */\nFeatureTiles.prototype.getHeightDrawOverlap = function () {\n  return this.heightOverlap;\n};\n\n/**\n * Manually set the height draw overlap\n * @param {Number} pixels pixels\n */\nFeatureTiles.prototype.setHeightDrawOverlap = function (pixels) {\n  this.heightOverlap = pixels;\n};\n\n/**\n * Get the feature DAO\n * @return {module:features/user/featureDao} feature dao\n */\nFeatureTiles.prototype.getFeatureDao = function () {\n  return this.featureDao;\n};\n\n/**\n * Get the feature table styles\n * @return {module:extension/style~FeatureTableStyles} feature table styles\n */\nFeatureTiles.prototype.getFeatureTableStyles = function () {\n  return this.featureTableStyles;\n};\n\n/**\n * Set the feature table styles\n * @param {module:extension/style~FeatureTableStyles} featureTableStyles feature table styles\n */\nFeatureTiles.prototype.setFeatureTableStyles = function (featureTableStyles) {\n  this.featureTableStyles = featureTableStyles;\n};\n\n/**\n * Ignore the feature table styles within the GeoPackage\n */\nFeatureTiles.prototype.ignoreFeatureTableStyles = function () {\n  this.setFeatureTableStyles(null);\n  this.calculateDrawOverlap();\n};\n\n/**\n * Clear all caches\n */\nFeatureTiles.prototype.clearCache = function () {\n  this.clearStylePaintCache();\n  this.clearIconCache();\n};\n\n/**\n * Clear the style paint cache\n */\nFeatureTiles.prototype.clearStylePaintCache = function () {\n  this.featurePaintCache.clear();\n};\n\n/**\n * Set / resize the style paint cache size\n *\n * @param {Number} size\n * @since 3.3.0\n */\nFeatureTiles.prototype.setStylePaintCacheSize = function (size) {\n  this.featurePaintCache.resize(size);\n};\n\n/**\n * Clear the icon cache\n */\nFeatureTiles.prototype.clearIconCache = function () {\n  this.iconCache.clear();\n};\n\n/**\n * Set / resize the icon cache size\n * @param {Number} size new size\n */\nFeatureTiles.prototype.setIconCacheSize = function (size) {\n  this.iconCache.resize(size);\n};\n\n/**\n * Get the tile width\n * @return {Number} tile width\n */\nFeatureTiles.prototype.getTileWidth = function () {\n  return this.tileWidth;\n};\n\n/**\n * Set the tile width\n * @param {Number} tileWidth tile width\n */\nFeatureTiles.prototype.setTileWidth = function (tileWidth) {\n  this.tileWidth = tileWidth;\n};\n\n/**\n * Get the tile height\n * @return {Number} tile height\n */\nFeatureTiles.prototype.getTileHeight = function () {\n  return this.tileHeight;\n};\n\n/**\n * Set the tile height\n * @param {Number} tileHeight tile height\n */\nFeatureTiles.prototype.setTileHeight = function (tileHeight) {\n  this.tileHeight = tileHeight;\n};\n\n/**\n * Get the compress format\n * @return {String} compress format\n */\nFeatureTiles.prototype.getCompressFormat = function () {\n  return this.compressFormat;\n};\n\n/**\n * Set the compress format\n * @param {String} compressFormat compress format\n */\nFeatureTiles.prototype.setCompressFormat = function (compressFormat) {\n  this.compressFormat = compressFormat;\n};\n\n/**\n * Set the scale\n *\n * @param {Number} scale scale factor\n */\nFeatureTiles.prototype.setScale = function(scale) {\n  this.scale = scale;\n  this.linePaint.setStrokeWidth(scale * this.lineStrokeWidth);\n  this.polygonPaint.setStrokeWidth(scale * this.polygonStrokeWidth);\n  this.featurePaintCache.clear();\n};\n\n/**\n * Get the scale\n * @return {Number} scale factor\n */\nFeatureTiles.prototype.getScale = function() {\n  return this.scale;\n};\n\nFeatureTiles.prototype.calculateDrawOverlap = function() {\n  if (this.pointIcon) {\n    this.heightOverlap = this.scale * this.pointIcon.getHeight();\n    this.widthOverlap = this.scale * this.pointIcon.getWidth();\n  } else {\n    this.heightOverlap = this.scale * this.pointRadius;\n    this.widthOverlap = this.scale * this.pointRadius;\n  }\n\n  var lineHalfStroke = this.scale * this.lineStrokeWidth / 2.0;\n  this.heightOverlap = Math.max(this.heightOverlap, lineHalfStroke);\n  this.widthOverlap = Math.max(this.widthOverlap, lineHalfStroke);\n\n  var polygonHalfStroke = this.scale * this.polygonStrokeWidth / 2.0;\n  this.heightOverlap = Math.max(this.heightOverlap, polygonHalfStroke);\n  this.widthOverlap = Math.max(this.widthOverlap, polygonHalfStroke);\n\n  if (this.featureTableStyles !== null && this.featureTableStyles.has()) {\n    var styleRowIds = [];\n    var tableStyleIds = this.featureTableStyles.getAllTableStyleIds();\n    if (tableStyleIds !== null) {\n      styleRowIds = styleRowIds.concat(tableStyleIds);\n    }\n    var styleIds = this.featureTableStyles.getAllStyleIds();\n    if (styleIds != null) {\n      styleRowIds = styleRowIds.concat(styleIds.filter(id => styleRowIds.indexOf(id) === -1));\n    }\n    var styleDao = this.featureTableStyles.getStyleDao();\n    for (var i = 0; i < styleRowIds.length; i++) {\n      var styleRowId = styleRowIds[i];\n      var styleRow = styleDao.queryForId(styleRowId);\n      var styleHalfWidth = this.scale * (styleRow.getWidthOrDefault() / 2.0);\n      this.widthOverlap = Math.max(this.widthOverlap, styleHalfWidth);\n      this.heightOverlap = Math.max(this.heightOverlap, styleHalfWidth);\n    }\n\n    var iconRowIds = [];\n    var tableIconIds = this.featureTableStyles.getAllTableIconIds();\n    if (tableIconIds != null) {\n      iconRowIds = iconRowIds.concat(tableIconIds);\n    }\n    var iconIds = this.featureTableStyles.getAllIconIds();\n    if (iconIds != null) {\n      iconRowIds = iconRowIds.concat(iconIds.filter(id => iconRowIds.indexOf(id) === -1));\n    }\n    var iconDao = this.featureTableStyles.getIconDao();\n    for (i = 0; i < iconRowIds.length; i++) {\n      var iconRowId = iconRowIds[i];\n      var iconRow = iconDao.queryForId(iconRowId);\n      var iconDimensions = iconRow.getDerivedDimensions();\n      var iconWidth = this.scale * Math.ceil(iconDimensions[0]);\n      var iconHeight = this.scale * Math.ceil(iconDimensions[1]);\n      this.widthOverlap = Math.max(this.widthOverlap, iconWidth);\n      this.heightOverlap = Math.max(this.heightOverlap, iconHeight);\n    }\n  }\n};\n\nFeatureTiles.prototype.setDrawOverlapsWithPixels = function(pixels) {\n  this.widthOverlap = pixels;\n  this.heightOverlap = pixels;\n};\n\nFeatureTiles.prototype.getFeatureStyle = function(featureRow) {\n  var featureStyle = null;\n  if (this.featureTableStyles !== null) {\n    featureStyle = this.featureTableStyles.getFeatureStyleForFeatureRow(featureRow);\n  }\n  return featureStyle;\n};\n\n/**\n * Get the point paint for the feature style, or return the default paint\n * @param featureStyle feature style\n * @return paint\n */\nFeatureTiles.prototype.getPointPaint = function(featureStyle) {\n  var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.CIRCLE);\n  if (paint == null) {\n    paint = this.pointPaint;\n  }\n  return paint;\n};\n\n/**\n * Get the line paint for the feature style, or return the default paint\n * @param featureStyle feature style\n * @return paint\n */\nFeatureTiles.prototype.getLinePaint = function(featureStyle) {\n  var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE);\n  if (paint === null) {\n    paint = this.linePaint;\n  }\n  return paint;\n};\n\n/**\n * Get the polygon paint for the feature style, or return the default paint\n * @param featureStyle feature style\n * @return paint\n */\nFeatureTiles.prototype.getPolygonPaint = function(featureStyle) {\n  var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE);\n  if (paint == null) {\n    paint = this.polygonPaint;\n  }\n  return paint;\n};\n\n/**\n * Get the polygon fill paint for the feature style, or return the default\n * paint\n * @param featureStyle feature style\n * @return paint\n */\nFeatureTiles.prototype.getPolygonFillPaint = function(featureStyle) {\n  var paint = null;\n  var hasStyleColor = false;\n  if (featureStyle != null) {\n    var style = featureStyle.getStyle();\n    if (style != null) {\n      if (style.hasFillColor()) {\n        paint = this.getStylePaint(style, FeatureDrawType.FILL);\n      } else {\n        hasStyleColor = style.hasColor();\n      }\n    }\n  }\n  if (paint === null && !hasStyleColor && this.fillPolygon) {\n    paint = this.polygonFillPaint;\n  }\n  return paint;\n};\n\n/**\n * Get the feature style paint from cache, or create and cache it\n * @param featureStyle feature style\n * @param drawType draw type\n * @return feature style paint\n */\nFeatureTiles.prototype.getFeatureStylePaint = function(featureStyle, drawType) {\n  var paint = null;\n  if (featureStyle != null) {\n    var style = featureStyle.getStyle();\n    if (style !== null && style.hasColor()) {\n      paint = this.getStylePaint(style, drawType);\n    }\n  }\n  return paint;\n};\n\n/**\n * Get the style paint from cache, or create and cache it\n * @param style style row\n * @param drawType draw type\n * @return {Paint} paint\n */\nFeatureTiles.prototype.getStylePaint = function(style, drawType) {\n  var paint = this.featurePaintCache.getPaintForStyleRow(style, drawType);\n  if (paint === undefined || paint === null) {\n    var color = null;\n    var strokeWidth = null;\n    if (drawType === FeatureDrawType.CIRCLE) {\n      color = style.getColor();\n    } else if (drawType === FeatureDrawType.STROKE) {\n      color = style.getColor();\n      strokeWidth = this.scale * style.getWidthOrDefault();\n    } else if (drawType === FeatureDrawType.FILL) {\n      color = style.getFillColor();\n      strokeWidth = this.scale * style.getWidthOrDefault();\n    } else {\n      throw new Error(\"Unsupported Draw Type: \" + drawType);\n    }\n    var stylePaint = new Paint();\n    stylePaint.setColor(color);\n    if (strokeWidth !== null) {\n      stylePaint.setStrokeWidth(strokeWidth);\n    }\n    paint = this.featurePaintCache.getPaintForStyleRow(style, drawType);\n    if (paint === undefined || paint === null) {\n      this.featurePaintCache.setPaintForStyleRow(style, drawType, stylePaint);\n      paint = stylePaint;\n    }\n  }\n  return paint;\n};\n\n/**\n * Get the point radius\n * @return {Number} radius\n */\nFeatureTiles.prototype.getPointRadius = function() {\n  return this.pointRadius;\n};\n\n/**\n * Set the point radius\n * @param {Number} pointRadius point radius\n */\nFeatureTiles.prototype.setPointRadius = function(pointRadius) {\n  this.pointRadius = pointRadius;\n};\n\n/**\n * Get point color\n * @return {String} color\n */\nFeatureTiles.prototype.getPointColor = function() {\n  return this.pointPaint.getColor();\n};\n\n/**\n * Set point color\n * @param {String} pointColor point color\n */\nFeatureTiles.prototype.setPointColor = function(pointColor) {\n  this.pointPaint.setColor(pointColor);\n};\n\n/**\n * Get the point icon\n * @return {module:tiles/features.FeatureTilePointIcon} icon\n */\nFeatureTiles.prototype.getPointIcon = function() {\n  return this.pointIcon;\n};\n\n/**\n * Set the point icon\n * @param {module:tiles/features.FeatureTilePointIcon} pointIcon point icon\n */\nFeatureTiles.prototype.setPointIcon = function(pointIcon) {\n  this.pointIcon = pointIcon;\n};\n\n/**\n * Get line stroke width\n * @return {Number} width\n */\nFeatureTiles.prototype.getLineStrokeWidth = function() {\n  return this.lineStrokeWidth;\n};\n\n/**\n * Set line stroke width\n * @param {Number} lineStrokeWidth line stroke width\n */\nFeatureTiles.prototype.setLineStrokeWidth = function(lineStrokeWidth) {\n  this.lineStrokeWidth = lineStrokeWidth;\n  this.linePaint.setStrokeWidth(this.scale * this.lineStrokeWidth);\n};\n\n/**\n * Get line color\n * @return {String} color\n */\nFeatureTiles.prototype.getLineColor = function() {\n  return this.linePaint.getColor();\n};\n\n/**\n * Set line color\n * @param {String} lineColor line color\n */\nFeatureTiles.prototype.setLineColor = function(lineColor) {\n  this.linePaint.setColor(lineColor);\n};\n\n/**\n * Get polygon stroke width\n * @return {Number} width\n */\nFeatureTiles.prototype.getPolygonStrokeWidth = function() {\n  return this.polygonStrokeWidth;\n};\n\n/**\n * Set polygon stroke width\n * @param {Number} polygonStrokeWidth polygon stroke width\n */\nFeatureTiles.prototype.setPolygonStrokeWidth = function(polygonStrokeWidth) {\n  this.polygonStrokeWidth = polygonStrokeWidth;\n  this.polygonPaint.setStrokeWidth(this.scale * this.polygonStrokeWidth);\n};\n\n/**\n * Get polygon color\n * @return {String} color\n */\nFeatureTiles.prototype.getPolygonColor = function() {\n  return this.polygonPaint.getColor();\n};\n\n/**\n * Set polygon color\n * @param {String} polygonColor polygon color\n */\nFeatureTiles.prototype.setPolygonColor = function(polygonColor) {\n  this.polygonPaint.setColor(polygonColor);\n};\n\n/**\n * Is fill polygon\n * @return {Boolean} true if fill polygon\n */\nFeatureTiles.prototype.isFillPolygon = function() {\n  return this.fillPolygon;\n};\n\n/**\n * Set the fill polygon\n * @param {Boolean} fillPolygon fill polygon\n */\nFeatureTiles.prototype.setFillPolygon = function(fillPolygon) {\n  this.fillPolygon = fillPolygon;\n};\n\n/**\n * Get polygon fill color\n * @return {String} color\n */\nFeatureTiles.prototype.getPolygonFillColor = function() {\n  return this.polygonFillPaint.getColor();\n};\n\n/**\n * Set polygon fill color\n * @param {String} polygonFillColor polygon fill color\n */\nFeatureTiles.prototype.setPolygonFillColor = function(polygonFillColor) {\n  this.polygonFillPaint.setColor(polygonFillColor);\n};\n\n/**\n * Get the max features per tile\n * @return {Number} max features per tile or null\n */\nFeatureTiles.prototype.getMaxFeaturesPerTile = function() {\n  return this.maxFeaturesPerTile;\n};\n\n/**\n * Set the max features per tile. When more features are returned in a query\n * to create a single tile, the tile is not created.\n * @param {Number} maxFeaturesPerTile  max features per tile\n */\nFeatureTiles.prototype.setMaxFeaturesPerTile = function(maxFeaturesPerTile) {\n  this.maxFeaturesPerTile = maxFeaturesPerTile;\n};\n\n/**\n * Get the max features tile draw, the custom tile drawing implementation\n * for tiles with more features than the max at #getMaxFeaturesPerTile\n * @return {module:tiles/features/custom~CustomFeatureTile} max features tile draw or null\n */\nFeatureTiles.prototype.getMaxFeaturesTileDraw = function() {\n  return this.maxFeaturesTileDraw;\n};\n\n/**\n * Set the max features tile draw, used to draw tiles when more features for\n * a single tile than the max at #getMaxFeaturesPerTile exist\n * @param {module:tiles/features/custom~CustomFeatureTile} maxFeaturesTileDraw max features tile draw\n */\nFeatureTiles.prototype.setMaxFeaturesTileDraw = function(maxFeaturesTileDraw) {\n  this.maxFeaturesTileDraw = maxFeaturesTileDraw;\n};\n\nFeatureTiles.prototype.drawTile = function (x, y, z, canvas = null) {\n  var indexed = this.featureDao.isIndexed();\n  if (indexed) {\n    return this.drawTileQueryIndex(x, y, z, canvas);\n  } else {\n    return this.drawTileQueryAll(x, y, z, canvas);\n  }\n};\n\nFeatureTiles.prototype.drawTileQueryAll = function(x, y, zoom, canvas) {\n  var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  boundingBox = this.expandBoundingBox(boundingBox);\n\n  var count = this.featureDao.getCount();\n  if (this.maxFeaturesPerTile === null || count <= this.maxFeaturesPerTile) {\n    return this.drawTileWithBoundingBox(boundingBox, zoom, canvas);\n  } else if (this.maxFeaturesTileDraw !== null) {\n    return this.maxFeaturesTileDraw.drawUnindexedTile(256, 256, canvas);\n  }\n};\n\nFeatureTiles.prototype.drawTileQueryIndex = async function(x, y, z, tileCanvas) {\n  var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z);\n  var expandedBoundingBox = this.expandBoundingBox(boundingBox);\n\n  var width = 256;\n  var height = 256;\n\n  var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << z), width * (1 << z));\n  var xTranslate = -positionAndScale.xPositionInFinalTileStart;\n  var yTranslate = -positionAndScale.yPositionInFinalTileStart;\n\n  var pi = Math.PI,\n    tau = 2 * pi;\n  var drawProjection = d3geo.geoMercator()\n    .scale((1 << z) * 256 / tau)\n    .center([-180, 85.0511287798066])\n    .translate([xTranslate, yTranslate]);\n\n  var canvas;\n  if (tileCanvas !== null) {\n    canvas = tileCanvas;\n  }\n  var context;\n  if (canvas === undefined || canvas === null) {\n    if (this.useNodeCanvas) {\n      var Canvas = require('canvas');\n      canvas = Canvas.createCanvas(width, height);\n    } else {\n      canvas = document.createElement('canvas');\n      canvas.width = width;\n      canvas.height = height;\n    }\n  }\n  context = canvas.getContext('2d');\n  context.clearRect(0, 0, width, height);\n  var srs = this.featureDao.getSrs();\n  var tileCount = this.featureDao.countWebMercatorBoundingBox(expandedBoundingBox);\n  if (this.maxFeaturesPerTile === null || tileCount <= this.maxFeaturesPerTile) {\n    var iterator = this.featureDao.fastQueryWebMercatorBoundingBox(expandedBoundingBox);\n    var geojsonFeatures = []\n    for (var featureRow of iterator) {\n      geojsonFeatures.push(featureRow.getGeometry().geometry.toGeoJSON());\n    }\n    for (var gj of geojsonFeatures) {\n      var style = this.getFeatureStyle(featureRow);\n      if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) {\n        gj = reproject.toWgs84(gj, this.featureDao.projection);\n      }\n      await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style);\n    }\n    return new Promise(function(resolve, reject) {\n      if (this.useNodeCanvas) {\n        var writeStream = concat(function (buffer) {\n          resolve(buffer);\n        });\n        var stream = null;\n        if (this.compressFormat === 'png') {\n          stream = canvas.createPNGStream();\n        } else {\n          stream = canvas.createJPEGStream();\n        }\n        stream.pipe(writeStream);\n      } else {\n        resolve(canvas.toDataURL('image/' + this.compressFormat));\n      }\n    }.bind(this));\n  } else if (this.maxFeaturesTileDraw !== null) {\n    // Draw the max features tile\n    return this.maxFeaturesTileDraw.drawTile(width, height, tileCount, canvas);\n  }\n};\n\nFeatureTiles.prototype.drawTileWithBoundingBox = async function(boundingBox, zoom, tileCanvas) {\n  var width = 256;\n  var height = 256;\n  var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << zoom), width * (1 << zoom));\n  var xTranslate = -positionAndScale.xPositionInFinalTileStart;\n  var yTranslate = -positionAndScale.yPositionInFinalTileStart;\n\n  var pi = Math.PI,\n    tau = 2 * pi;\n  var drawProjection = d3geo.geoMercator()\n    .scale((1 << zoom) * 256 / tau)\n    .center([-180, 85.0511287798066])\n    .translate([xTranslate, yTranslate]);\n  var canvas;\n  if (tileCanvas !== null) {\n    canvas = tileCanvas;\n  }\n  var context;\n  if (canvas === undefined || canvas === null) {\n    if (this.useNodeCanvas) {\n      var Canvas = require('canvas');\n      canvas = Canvas.createCanvas(width, height);\n    } else {\n      canvas = document.createElement('canvas');\n      canvas.width = width;\n      canvas.height = height;\n    }\n  }\n  context = canvas.getContext('2d');\n  context.clearRect(0, 0, width, height);\n  var featureDao = this.featureDao;\n  var srs = featureDao.getSrs();\n  var each = featureDao.queryForEach();\n  var featureRows = [];\n  for (var row of each) {\n    featureRows.push(featureDao.getRow(row));\n  }\n  for (var fr of featureRows) {\n    var gj = fr.getGeometry().geometry.toGeoJSON();\n    var style = this.getFeatureStyle(fr);\n    if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) {\n      gj = reproject.toWgs84(gj, featureDao.projection);\n    }\n    await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style);\n  }\n  return new Promise(function(resolve, reject) {\n    if (this.useNodeCanvas) {\n      var writeStream = concat(function (buffer) {\n        resolve(buffer);\n      });\n      var stream = null;\n      if (this.compressFormat === 'png') {\n        stream = canvas.createPNGStream();\n      } else {\n        stream = canvas.createJPEGStream();\n      }\n      stream.pipe(writeStream);\n    } else {\n      resolve(canvas.toDataURL('image/' + this.compressFormat));\n    }\n  }.bind(this));\n};\n\n/**\n * Draw a point in the context\n * @param path\n * @param geoJson\n * @param context\n * @param boundingBox\n * @param featureStyle\n * @param drawProjection\n */\nFeatureTiles.prototype.drawPoint = async function(path, geoJson, context, boundingBox, featureStyle, drawProjection) {\n  var width;\n  var height;\n  var iconX;\n  var iconY;\n  var transformedCoords = drawProjection([geoJson.coordinates[0], geoJson.coordinates[1]]);\n  var x = transformedCoords[0];\n  var y = transformedCoords[1];\n\n  if (featureStyle !== undefined && featureStyle !== null && featureStyle.hasIcon()) {\n    var iconRow = featureStyle.getIcon();\n    var image = await iconRow.getDataImage(iconRow);\n    width = Math.round(this.scale * iconRow.getWidth());\n    height = Math.round(this.scale * iconRow.getHeight());\n    if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height && y <= this.tileHeight + height) {\n      var anchorU = iconRow.getAnchorUOrDefault();\n      var anchorV = iconRow.getAnchorVOrDefault();\n      iconX = Math.round(x - (anchorU * width));\n      iconY = Math.round(y - (anchorV * height));\n      context.drawImage(image, iconX, iconY, width, height);\n    }\n  } else if (this.pointIcon !== undefined && this.pointIcon !== null) {\n    width = Math.round(this.scale * this.pointIcon.getWidth());\n    height = Math.round(this.scale * this.pointIcon.getHeight());\n    if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height\n      && y <= this.tileHeight + height) {\n      iconX = Math.round(x - this.scale * this.pointIcon.getXOffset());\n      iconY = Math.round(y - this.scale * this.pointIcon.getYOffset());\n      ImageUtils.scaleBitmap(this.pointIcon.getIcon(), this.scale).then((image) => {\n        context.drawImage(image, iconX, iconY, width, height);\n      });\n    }\n  } else {\n    context.save();\n    var radius = null;\n    if (featureStyle !== undefined && featureStyle !== null) {\n      var styleRow = featureStyle.getStyle();\n      if (styleRow !== undefined && styleRow !== null) {\n        radius = this.scale * (styleRow.getWidthOrDefault() / 2.0);\n      }\n    }\n    if (radius == null) {\n      radius = this.scale * this.pointRadius;\n    }\n    var pointPaint = this.getPointPaint(featureStyle);\n    if (x >= 0 - radius && x <= this.tileWidth + radius && y >= 0 - radius && y <= this.tileHeight + radius) {\n      var circleX = Math.round(x);\n      var circleY = Math.round(y);\n      context.beginPath();\n      context.arc(circleX, circleY, radius, 0, 2 * Math.PI, true);\n      context.closePath()\n      context.fillStyle = pointPaint.getColorRGBA();\n      context.fill();\n    }\n    context.restore();\n  }\n};\n\n/**\n * Draw a line in the context\n * @param path\n * @param geoJson\n * @param context\n * @param featureStyle\n */\nFeatureTiles.prototype.drawLine = function(path, geoJson, context, featureStyle) {\n  context.save();\n  context.beginPath();\n  var paint = this.getLinePaint(featureStyle);\n  context.strokeStyle = paint.getColorRGBA();\n  context.lineWidth = paint.getStrokeWidth();\n  path(geoJson);\n  context.stroke();\n  context.closePath();\n  context.restore();\n};\n\n/**\n * Draw a polygon in the context\n * @param path\n * @param geoJson\n * @param context\n * @param featureStyle\n */\nFeatureTiles.prototype.drawPolygon = function(path, geoJson, context, featureStyle) {\n  context.save();\n  context.beginPath();\n  path(PolyToLine(geoJson).geometry);\n  context.closePath();\n  var fillPaint = this.getPolygonFillPaint(featureStyle);\n  if (fillPaint !== undefined && fillPaint !== null) {\n    context.fillStyle = fillPaint.getColorRGBA();\n    context.fill();\n  }\n  var paint = this.getPolygonPaint(featureStyle);\n  context.strokeStyle = paint.getColorRGBA();\n  context.lineWidth = paint.getStrokeWidth();\n  context.stroke();\n  context.restore();\n};\n\n/**\n * Add a feature to the batch\n * @param geoJson\n * @param context\n * @param drawProjection\n * @param boundingBox\n * @param featureStyle\n */\nFeatureTiles.prototype.addFeatureToBatch = async function(geoJson, context, drawProjection, boundingBox, featureStyle) {\n  var path = new d3geo.geoPath()\n    .context(context)\n    .projection(drawProjection);\n  var i, c;\n  if (geoJson.type === 'Point') {\n    await this.drawPoint(path, geoJson, context, boundingBox, featureStyle, drawProjection);\n  } else if (geoJson.type === 'LineString') {\n    this.drawLine(path, geoJson, context, featureStyle);\n  } else if (geoJson.type === 'Polygon') {\n    this.drawPolygon(path, geoJson, context, featureStyle);\n  } else if (geoJson.type === 'MultiPoint') {\n    for (i = 0; i < geoJson.coordinates.length; i++) {\n      c = geoJson.coordinates[i];\n      var ptGeom = {\n        type: 'Point',\n        coordinates: c\n      };\n      await this.drawPoint(path, ptGeom, context, boundingBox, featureStyle, drawProjection);\n    }\n  } else if (geoJson.type === 'MultiLineString') {\n    for (i = 0; i < geoJson.coordinates.length; i++) {\n      c = geoJson.coordinates[i];\n      var lsGeom = {\n        type: 'LineString',\n        coordinates: c\n      };\n      this.drawLine(path, lsGeom, context, featureStyle);\n    }\n  } else if (geoJson.type === 'MultiPolygon') {\n    for (i = 0; i < geoJson.coordinates.length; i++) {\n      c = geoJson.coordinates[i];\n      var pGeom = {\n        type: 'Polygon',\n        coordinates: c\n      };\n      this.drawPolygon(path, pGeom, context, featureStyle);\n    }\n  }\n};\n\n/**\n * Create an expanded bounding box to handle features outside the tile that overlap\n * @param webMercatorBoundingBox  web mercator bounding box\n * @return {BoundingBox} bounding box\n */\nFeatureTiles.prototype.expandBoundingBox = function(webMercatorBoundingBox) {\n  return this.expandWebMercatorBoundingBox(webMercatorBoundingBox, webMercatorBoundingBox);\n};\n\n/**\n * Create an expanded bounding box to handle features outside the tile that overlap\n * @param webMercatorBoundingBox web mercator bounding box\n * @param tileWebMercatorBoundingBox  tile web mercator bounding box\n * @return {BoundingBox} bounding box\n */\nFeatureTiles.prototype.expandWebMercatorBoundingBox = function(webMercatorBoundingBox, tileWebMercatorBoundingBox) {\n  // Create an expanded bounding box to handle features outside the tile  that overlap\n  var minLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.widthOverlap);\n  var maxLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox,  this.tileWidth + this.widthOverlap);\n  var maxLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.heightOverlap);\n  var minLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, this.tileHeight + this. heightOverlap);\n\n  // Choose the most expanded longitudes and latitudes\n  minLongitude = Math.min(minLongitude, webMercatorBoundingBox.minLongitude);\n  maxLongitude = Math.max(maxLongitude, webMercatorBoundingBox.maxLongitude);\n  minLatitude = Math.min(minLatitude, webMercatorBoundingBox.minLatitude);\n  maxLatitude = Math.max(maxLatitude, webMercatorBoundingBox.maxLatitude);\n\n  // Bound with the web mercator limits\n  minLongitude = Math.max(minLongitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);\n  maxLongitude = Math.min(maxLongitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);\n  minLatitude = Math.max(minLatitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);\n  maxLatitude = Math.min(maxLatitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);\n\n  return new BoundingBox(minLongitude, maxLongitude, minLatitude, maxLatitude);\n};\n\nmodule.exports = FeatureTiles;\n\n}).call(this,require('_process'))\n},{\"../../boundingBox\":7,\"../../extension/style/featureTableStyles\":48,\"../../extension/style/iconCache\":49,\"../imageUtils\":89,\"../tileBoundingBoxUtils\":93,\"./featureDrawType\":84,\"./featurePaintCache\":86,\"./paint\":88,\"@turf/polygon-to-line\":131,\"_process\":284,\"canvas\":undefined,\"concat-stream\":185,\"d3-geo\":194,\"reproject\":315}],88:[function(require,module,exports){\n/**\n * Paint module.\n * @module tiles/features\n */\nvar Paint = function () {\n  this.color = '#000000FF';\n  this.strokeWidth = 1.0;\n};\n\n/**\n * Get the color\n * @returns {String} color\n */\nPaint.prototype.getColor = function() {\n  return this.color;\n};\n\n/**\n * Get the color\n * @returns {String} color\n */\nPaint.prototype.getColorRGBA = function() {\n  // assumes color is in the format #RRGGBB or #RRGGBBAA\n  var red = parseInt(this.color.substr(1,2), 16);\n  var green = parseInt(this.color.substr(3,2), 16);\n  var blue = parseInt(this.color.substr(5,2), 16);\n  var alpha = 1.0;\n  if (this.color.length > 7) {\n    alpha = parseInt(this.color.substr(7,2), 16) / 255;\n  }\n  return 'rgba(' + red + ',' + green + ',' + blue + ',' + alpha + ')';\n};\n\n/**\n * Set the color\n * @param {String} color\n */\nPaint.prototype.setColor = function(color) {\n  this.color = color;\n};\n\n/**\n * Get the stroke width\n * @returns {Number} strokeWidth\n */\nPaint.prototype.getStrokeWidth = function() {\n  return this.strokeWidth;\n};\n\n/**\n * Set the stroke width\n * @param {Number} strokeWidth\n */\nPaint.prototype.setStrokeWidth = function(strokeWidth) {\n  this.strokeWidth = strokeWidth;\n};\n\nmodule.exports = Paint;\n\n},{}],89:[function(require,module,exports){\n(function (process,Buffer){\nvar sizeOf = require('image-size');\nvar ImageUtils = {};\nvar isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);\nvar isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);\nvar isNode = typeof(process) !== 'undefined' && process.version;\nImageUtils.useNodeCanvas =  isNode && !isPhantom && !isElectron;\n\n/**\n * Get image for data\n * @param {Buffer|String} data file data or file path\n * @returns {Object}\n */\nImageUtils.getImageSize = function (data) {\n\treturn sizeOf(data);\n};\n\n/**\n * Get image for data\n * @param {Buffer|String} data file data or file path\n * @param {String} contentType\n * @returns {Promise<Image>}\n */\nImageUtils.getImage = function (data, contentType = 'image/png') {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar image;\n\t\tif (ImageUtils.useNodeCanvas) {\n\t\t\tvar Canvas = require('canvas');\n\t\t\timage = new Canvas.Image();\n\t\t} else {\n\t\t\timage = new Image();\n\t\t}\n\t\timage.onload = () => {\n\t\t\tresolve(image);\n\t\t};\n\t\timage.onerror = (error) => {\n\t\t\treject(error);\n\t\t};\n\t\tvar src = data;\n\t\tif (data instanceof Buffer) {\n\t\t\tsrc = 'data:' + contentType + ';base64,' + data.toString('base64');\n\t\t}\n\t\timage.src = src;\n\t}.bind(this));\n};\n\n/**\n * Get a scaled image\n * @param {Buffer} data\n * @param {Number} scale\n * @returns {Promise<Image>}\n */\nImageUtils.getScaledImage = function (data, scale) {\n\treturn ImageUtils.getImage(data).then(function (image) {\n\t\treturn ImageUtils.scaleBitmap(image, scale);\n\t}.bind(this));\n};\n\n/**\n * Get a scaled image\n * @param {Image} image\n * @param {Number} scale\n * @returns {Promise<Image>}\n */\nImageUtils.scaleBitmap = function (image, scale) {\n\tif (scale === 1.0) {\n\t\treturn Promise.resolve(image);\n\t} else {\n\t\tvar iconWidth = image.width;\n\t\tvar iconHeight = image.height;\n\t\tvar scaledWidth = Math.round(scale * iconWidth);\n\t\tvar scaledHeight = Math.round(scale * iconHeight);\n\t\tvar canvas, ctx, img;\n\t\tif (ImageUtils.useNodeCanvas) {\n\t\t\tvar Canvas = require('canvas');\n\t\t\tcanvas = Canvas.createCanvas(scaledWidth, scaledHeight);\n\t\t\timg = new Canvas.Image();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tcanvas.width = scaledWidth;\n\t\t\tcanvas.height = scaledHeight;\n\t\t\timg = new Image();\n\t\t}\n\t\tctx = canvas.getContext('2d');\n\t\tctx.drawImage(image, 0, 0, iconWidth, iconHeight, 0, 0, scaledWidth, scaledHeight);\n\t\treturn new Promise(function (resolve) {\n\t\t\timg.onload = () => { resolve(img); };\n\t\t\timg.src = canvas.toDataURL();\n\t\t}.bind(this));\n\t}\n};\n\nmodule.exports = ImageUtils;\n\n}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"_process\":284,\"buffer\":182,\"canvas\":undefined,\"image-size\":244}],90:[function(require,module,exports){\n/**\n * @module tiles/matrix\n * @see module:dao/dao\n */\n\nvar Dao = require('../../dao/dao')\n  // , ContentsDao = require('../../core/contents').ContentsDao\n  , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao;\n\nvar util = require('util');\n\n/**\n * Tile Matrix object. Documents the structure of the tile matrix at each zoom\n * level in each tiles table. It allows GeoPackages to contain rectangular as\n * well as square tiles (e.g. for better representation of polar regions). It\n * allows tile pyramids with zoom levels that differ in resolution by factors of\n * 2, irregular intervals, or regular intervals other than factors of 2.\n * @class TileMatrix\n */\nvar TileMatrix = function() {\n\n  /**\n   * Tile Pyramid User Data Table Name\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * 0 ⇐ zoom_level ⇐ max_level for table_name\n   * @member {Number}\n   */\n  this.zoom_level;\n\n  /**\n   * Number of columns (>= 1) in tile matrix at this zoom level\n   * @member {Number}\n   */\n  this.matrix_width;\n\n  /**\n   * Number of rows (>= 1) in tile matrix at this zoom level\n   * @member {Number}\n   */\n  this.matrix_height;\n\n  /**\n   * Tile width in pixels (>= 1)for this zoom level\n   * @member {Number}\n   */\n  this.tile_width;\n\n  /**\n   * Tile height in pixels (>= 1)for this zoom level\n   * @member {Number}\n   */\n  this.tile_height;\n\n  /**\n   * In t_table_name srid units or default meters for srid 0 (>0)\n   * @member {Number}\n   */\n  this.pixel_x_size;\n\n  /**\n   * In t_table_name srid units or default meters for srid 0 (>0)\n   * @member {Number}\n   */\n  this.pixel_y_size;\n};\n\n/**\n * Tile Matrix Set Data Access Object\n * @class TileMatrixDao\n * @extends {module:dao/dao~Dao}\n */\nvar TileMatrixDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(TileMatrixDao, Dao);\n\nTileMatrixDao.prototype.createObject = function () {\n  return new TileMatrix();\n};\n\n/**\n * get the Contents of the Tile matrix\n * @param  {tileMatrix} tileMatrix the tile matrix\n * @param  {Function} callback returns the contents\n */\nTileMatrixDao.prototype.getContents = function (tileMatrix) {\n  var dao = this.geoPackage.getContentsDao();\n  return dao.queryForId(tileMatrix.table_name);\n};\n\nTileMatrixDao.prototype.getTileMatrixSet = function (tileMatrix) {\n  var dao = this.geoPackage.getTileMatrixSetDao();\n  return dao.queryForId(tileMatrix.table_name);\n};\n\nTileMatrixDao.TABLE_NAME = \"gpkg_tile_matrix\";\nTileMatrixDao.COLUMN_PK1 = \"table_name\";\nTileMatrixDao.COLUMN_PK2 = \"zoom_level\";\nTileMatrixDao.COLUMN_TABLE_NAME = \"table_name\";\nTileMatrixDao.COLUMN_ZOOM_LEVEL = \"zoom_level\";\nTileMatrixDao.COLUMN_MATRIX_WIDTH = \"matrix_width\";\nTileMatrixDao.COLUMN_MATRIX_HEIGHT = \"matrix_height\";\nTileMatrixDao.COLUMN_TILE_WIDTH = \"tile_width\";\nTileMatrixDao.COLUMN_TILE_HEIGHT = \"tile_height\";\nTileMatrixDao.COLUMN_PIXEL_X_SIZE = \"pixel_x_size\";\nTileMatrixDao.COLUMN_PIXEL_Y_SIZE = \"pixel_y_size\";\n\nTileMatrix.TABLE_NAME = 'tableName';\nTileMatrix.ZOOM_LEVEL = 'zoomLevel';\nTileMatrix.MATRIX_WIDTH = 'matrixWidth';\nTileMatrix.MATRIX_HEIGHT = 'matrixHeight';\nTileMatrix.TILE_WIDTH = 'tileWidth';\nTileMatrix.TILE_HEIGHT = 'tileHeight';\nTileMatrix.PIXEL_X_SIZE = 'pixelXSize';\nTileMatrix.PIXEL_Y_SIZE = 'pixelYSize';\n\n\nTileMatrixDao.prototype.gpkgTableName = 'gpkg_tile_matrix';\nTileMatrixDao.prototype.idColumns = [TileMatrixDao.COLUMN_PK1, TileMatrixDao.COLUMN_PK2];\nTileMatrixDao.prototype.columns = [TileMatrixDao.COLUMN_TABLE_NAME, TileMatrixDao.COLUMN_ZOOM_LEVEL, TileMatrixDao.COLUMN_MATRIX_WIDTH, TileMatrixDao.COLUMN_MATRIX_HEIGHT, TileMatrixDao.COLUMN_TILE_WIDTH, TileMatrixDao.COLUMN_TILE_HEIGHT, TileMatrixDao.COLUMN_PIXEL_X_SIZE, TileMatrixDao.COLUMN_PIXEL_Y_SIZE];\n\nmodule.exports.TileMatrixDao = TileMatrixDao;\nmodule.exports.TileMatrix = TileMatrix;\n\n},{\"../../dao/dao\":11,\"../matrixset\":91,\"util\":343}],91:[function(require,module,exports){\n/**\n * @module tiles/matrixset\n * @see module:dao/dao\n */\n\nvar Dao = require('../../dao/dao')\n  , BoundingBox = require('../../boundingBox')\n  , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao;\n  // , ContentsDao = require('../../core/contents').ContentsDao;\n\nvar util = require('util');\n\n/**\n * `TileMatrixSet` models the [`gpkg_tile_matrix_set`](https://www.geopackage.org/spec121/index.html#_tile_matrix_set)\n * table.  A row in this table defines the minimum bounding box (min_x, min_y,\n * max_x, max_y) and spatial reference system (srs_id) for all tiles in a\n * [tile pyramid](https://www.geopackage.org/spec121/index.html#tiles_user_tables)\n * user data table.  While the parent [Contents]{@link module:core/contents~Contents}\n * row/object also defines a bounding box, the tile matrix set bounding box is\n * used as the reference for calculating tile column/row matrix coordinates, so\n * (min_x, max_y) in SRS coordinates would be the upper-left corner of the tile\n * at tile matrix coordinate (0, 0).  The parent `Contents` bounding box may be\n * smaller or larger than the `TileMatrixSet` bounding box, and its purpose is\n * to guide a user-facing application to the target region of the tile pyramid.\n * The [`srs_id`]{@link module:tiles/matrixset~TileMatrixSet#srs_id} of the `TileMatrixSet`, on the other hand, must\n * match that of the parent [`Contents`]{@link module:core/contents~Contents#srs_id}.\n *\n * @class TileMatrixSet\n */\nvar TileMatrixSet = function() {\n\n  /**\n   * Name of the [tile pyramid user data table](https://www.geopackage.org/spec121/index.html#tiles_user_tables)\n   * that stores the tiles\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * Unique identifier for each Spatial Reference System within a GeoPackage\n   * @member {SRSRef}\n   */\n  this.srs_id;\n\n  /**\n   * Bounding box minimum easting or longitude for all content in table_name\n   * @member {Number}\n   */\n  this.min_x;\n\n  /**\n   * Bounding box minimum northing or latitude for all content in table_name\n   * @member {Number}\n   */\n  this.min_y;\n\n  /**\n   * Bounding box maximum easting or longitude for all content in table_name\n   * @member {Number}\n   */\n  this.max_x;\n\n  /**\n   * Bounding box maximum northing or latitude for all content in table_name\n   * @member {Number}\n   */\n  this.max_y;\n};\n\nTileMatrixSet.prototype.setBoundingBox = function (boundingBox) {\n  this.min_x = boundingBox.minLongitude;\n  this.max_x = boundingBox.maxLongitude;\n  this.min_y = boundingBox.minLatitude;\n  this.max_y = boundingBox.maxLatitude;\n};\n\nTileMatrixSet.prototype.getBoundingBox = function () {\n  return new BoundingBox(this.min_x, this.max_x, this.min_y, this.max_y);\n};\n\nTileMatrixSet.prototype.setContents = function(contents) {\n  if (contents && contents.data_type === 'tiles') {\n    this.table_name = contents.table_name;\n  }\n}\n\n/**\n * Tile Matrix Set Data Access Object\n * @class TileMatrixSetDao\n * @extends {module:dao/dao~Dao}\n */\nvar TileMatrixSetDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(TileMatrixSetDao, Dao);\n\nTileMatrixSetDao.prototype.createObject = function () {\n  return new TileMatrixSet();\n};\n\n/**\n * Get the tile table names\n * @param  {Function} callback returns the tile table names\n */\nTileMatrixSetDao.prototype.getTileTables = function () {\n  var tableNames = [];\n  for (var result of this.connection.each('select ' + TileMatrixSetDao.COLUMN_TABLE_NAME + ' from ' + TileMatrixSetDao.TABLE_NAME)) {\n    tableNames.push(result[TileMatrixSetDao.COLUMN_TABLE_NAME]);\n  }\n  return tableNames;\n};\n\nTileMatrixSetDao.prototype.getProjection = function (tileMatrixSet) {\n  var srs = this.getSrs(tileMatrixSet);\n  if (!srs) return;\n  var srsDao = this.geoPackage.getSpatialReferenceSystemDao();\n  return srsDao.getProjection(srs);\n};\n\n/**\n * Get the Spatial Reference System of the Tile Matrix set\n * @param  {TileMatrixSet}   tileMatrixSet tile matrix set\n */\nTileMatrixSetDao.prototype.getSrs = function (tileMatrixSet) {\n  var dao = this.geoPackage.getSpatialReferenceSystemDao();\n  return dao.queryForId(tileMatrixSet.srs_id);\n};\n\nTileMatrixSetDao.prototype.getContents = function (tileMatrixSet) {\n  var dao = this.geoPackage.getContentsDao();\n  return dao.queryForId(tileMatrixSet.table_name);\n};\n\nTileMatrixSet.TABLE_NAME = \"tableName\";\nTileMatrixSet.MIN_X = \"minX\";\nTileMatrixSet.MIN_Y = \"minY\";\nTileMatrixSet.MAX_X = \"maxX\";\nTileMatrixSet.MAX_Y = \"maxY\";\nTileMatrixSet.SRS_ID = \"srsId\";\n\nTileMatrixSetDao.TABLE_NAME = \"gpkg_tile_matrix_set\";\nTileMatrixSetDao.COLUMN_PK = \"table_name\";\nTileMatrixSetDao.COLUMN_TABLE_NAME = \"table_name\";\nTileMatrixSetDao.COLUMN_SRS_ID = \"srs_id\";\nTileMatrixSetDao.COLUMN_MIN_X = \"min_x\";\nTileMatrixSetDao.COLUMN_MIN_Y = \"min_y\";\nTileMatrixSetDao.COLUMN_MAX_X = \"max_x\";\nTileMatrixSetDao.COLUMN_MAX_Y = \"max_y\";\n\nTileMatrixSetDao.prototype.gpkgTableName = 'gpkg_tile_matrix_set';\nTileMatrixSetDao.prototype.idColumns = [TileMatrixSetDao.COLUMN_PK];\nTileMatrixSetDao.prototype.columns = [TileMatrixSetDao.COLUMN_TABLE_NAME, TileMatrixSetDao.COLUMN_SRS_ID, TileMatrixSetDao.COLUMN_MIN_X, TileMatrixSetDao.COLUMN_MIN_Y, TileMatrixSetDao.COLUMN_MAX_X, TileMatrixSetDao.COLUMN_MAX_Y];\n\nTileMatrixSetDao.prototype.columnToPropertyMap = {};\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_TABLE_NAME] = TileMatrixSet.TABLE_NAME;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_SRS_ID] = TileMatrixSet.SRS_ID;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_X] = TileMatrixSet.MIN_X;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_Y] = TileMatrixSet.MIN_Y;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_X] = TileMatrixSet.MAX_X;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_Y] = TileMatrixSet.MAX_Y;\n\nmodule.exports.TileMatrixSetDao = TileMatrixSetDao;\nmodule.exports.TileMatrixSet = TileMatrixSet;\n\n},{\"../../boundingBox\":7,\"../../core/srs\":9,\"../../dao/dao\":11,\"util\":343}],92:[function(require,module,exports){\nvar TileMatrixSetDao = require('../matrixset').TileMatrixSetDao\n  , TileBoundingBoxUtils = require('../tileBoundingBoxUtils')\n  , TileCreator = require('../creator')\n  , BoundingBox = require('../../boundingBox');\n\nvar proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nvar GeoPackageTileRetriever = function(tileDao, width, height) {\n  this.tileDao = tileDao;\n  this.tileDao.adjustTileMatrixLengths();\n\n  this.width = width;\n  this.height = height;\n}\n\nmodule.exports = GeoPackageTileRetriever;\n\nGeoPackageTileRetriever.prototype.getWebMercatorBoundingBox = function () {\n  if (this.setWebMercatorBoundingBox) {\n    return this.setWebMercatorBoundingBox;\n  } else {\n    var tileMatrixSetDao = this.tileDao.geoPackage.getTileMatrixSetDao();\n    var tileMatrixSet = this.tileDao.tileMatrixSet;\n    var srs = tileMatrixSetDao.getSrs(tileMatrixSet);\n    this.setProjectionBoundingBox = tileMatrixSet.getBoundingBox();\n    if (srs.organization_coordsys_id === 4326 && srs.organization === 'EPSG') {\n      this.setProjectionBoundingBox.minLatitude = Math.max(this.setProjectionBoundingBox.minLatitude, -85.05);\n      this.setProjectionBoundingBox.maxLatitude = Math.min(this.setProjectionBoundingBox.maxLatitude, 85.05);\n    }\n    this.setWebMercatorBoundingBox = this.setProjectionBoundingBox.projectBoundingBox(this.tileDao.projection, 'EPSG:3857');\n\n    return this.setWebMercatorBoundingBox;\n  }\n};\n\nGeoPackageTileRetriever.prototype.hasTile = function (x, y, zoom) {\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom);\n  var iterator = this.retrieveTileResults(webMercatorBoundingBox, tileMatrix);\n  var exists = false;\n  for (var row of iterator) {\n    exists = true;\n  }\n  return exists;\n};\n\nGeoPackageTileRetriever.prototype.getTile = function (x, y, zoom) {\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);\n  return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');\n};\n\nGeoPackageTileRetriever.prototype.drawTileIn = function (x, y, zoom, canvas) {\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);\n  return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857', canvas);\n};\n\nGeoPackageTileRetriever.prototype.getTileWithWgs84Bounds = function (wgs84BoundingBox, zoom) {\n  var webMercatorBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', 'EPSG:3857');\n  var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);\n  return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');\n};\n\nGeoPackageTileRetriever.prototype.getTileWithWgs84BoundsInProjection = function (wgs84BoundingBox, zoom, targetProjection) {\n  var targetBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', targetProjection);\n  return this.getTileWithBounds(targetBoundingBox, zoom, targetProjection);\n};\n\nGeoPackageTileRetriever.prototype.getWebMercatorTile = function (x, y, zoom) {\n  // need to determine the geoPackage zoom level from the web mercator zoom level\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);\n  return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');\n};\n\nGeoPackageTileRetriever.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) {\n  // find width and height of this tile in geopackage projection\n  var proj4Projection = proj4(this.tileDao.projection, 'EPSG:3857');\n  var ne = proj4Projection.inverse([webMercatorBoundingBox.maxLongitude, webMercatorBoundingBox.maxLatitude]);\n  var sw = proj4Projection.inverse([webMercatorBoundingBox.minLongitude, webMercatorBoundingBox.minLatitude]);\n  var width = (ne[0] - sw[0]);\n  var height = (ne[1] - sw[1]);\n  var gpZoom = undefined;\n  // find the closest zoom for width\n  for (var i = 0; i < this.tileDao.widths.length; i++) {\n    var tileWidth = this.tileDao.widths[i];\n    var difference = Math.abs(width - tileWidth);\n    var tolerance = .001 * tileWidth;\n    if (tileWidth <= width || difference <= tolerance) {\n      gpZoom = this.tileDao.maxZoom - i;\n    }\n  }\n\n  return gpZoom;\n};\n\nGeoPackageTileRetriever.prototype.getTileWithBounds = function (targetBoundingBox, zoom, targetProjection, canvas) {\n  var tiles = [];\n  var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom);\n  if (!tileMatrix) return Promise.resolve();\n  var tileWidth = tileMatrix.tile_width;\n  var tileHeight = tileMatrix.tile_height;\n  var matrixSetBoundsInTargetProjection = this.tileDao.tileMatrixSet.getBoundingBox().projectBoundingBox(this.tileDao.projection, targetProjection);\n\n  var matrixTotalBoundingBox = this.tileDao.tileMatrixSet.getBoundingBox();\n  var targetBoundingBoxInMatrixSetProjection = targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection);\n\n  var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(matrixTotalBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, targetBoundingBoxInMatrixSetProjection);\n  var creator = TileCreator.initialize(this.width || tileWidth, this.height || tileHeight, tileMatrix, this.tileDao.tileMatrixSet, targetBoundingBox, this.tileDao.srs, targetProjection, canvas);\n\n  var iterator = this.retrieveTileResults(targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection), tileMatrix);\n  for (var tile of iterator) {\n    tiles.push({\n      data: tile.getTileData(),\n      gridColumn: tile.getTileColumn(),\n      gridRow: tile.getRow()\n    });\n  }\n\n  return tiles.reduce(function(sequence, tile) {\n    return sequence.then(function() {\n      return creator.addTile(tile.data, tile.gridColumn, tile.gridRow);\n    });\n  }, Promise.resolve())\n  .then(function() {\n    if (!canvas) {\n      return creator.getCompleteTile('png');\n    }\n  });\n};\n\nGeoPackageTileRetriever.prototype.retrieveTileResults = function (tileMatrixProjectionBoundingBox, tileMatrix) {\n  if(tileMatrix) {\n    var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(this.tileDao.tileMatrixSet.getBoundingBox(), tileMatrix.matrix_width, tileMatrix.matrix_height, tileMatrixProjectionBoundingBox);\n    return this.tileDao.queryByTileGrid(tileGrid, tileMatrix.zoom_level);\n  } else {\n    return Promise.resolve();\n  }\n};\n\n},{\"../../boundingBox\":7,\"../creator\":79,\"../matrixset\":91,\"../tileBoundingBoxUtils\":93,\"proj4\":285}],93:[function(require,module,exports){\n\n/**\n * This module exports utility functions for [slippy map (XYZ)](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames)\n * tile calculations.\n *\n * @module tiles/tileBoundingBoxUtils\n */\n\nconst BoundingBox = require('../boundingBox');\nconst TileGrid = require('./tileGrid');\nconst proj4 = ((proj4) => { return 'default' in proj4 ? proj4['default'] : proj4 })(require('proj4'));\n\nvar WEB_MERCATOR_HALF_WORLD_WIDTH = proj4('EPSG:4326', 'EPSG:3857').forward([180, 0])[0];\n\n/**\n * Calculate the bounds in tile coordinates that covers the given bounding box\n * at the given zoom level.  The result object contains the keys `minX`, `maxX`,\n * `minY`, and `maxY`, which are tile column and row values in the XYZ tile\n * scheme.\n *\n * @param {BoundingBox} webMercatorBoundingBox bounds in EPSG:3857 coordinates (meters)\n * @param {number} zoom the integral zoom level\n * @returns {{minX: number, maxX: number, minY: number, maxY: number}} bounds in tile column and row coordinates\n */\nmodule.exports.webMercatorTileBox = function(webMercatorBoundingBox, zoom) {\n  var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom);\n  var tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide);\n\n  const minLonClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLongitude);\n  const maxLonClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLongitude);\n  const minLatClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLatitude);\n  const maxLatClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLatitude);\n\n  var minX = Math.floor((minLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize);\n  var maxX = Math.max(0, Math.ceil((maxLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize) - 1);\n  var minY = Math.floor((WEB_MERCATOR_HALF_WORLD_WIDTH - maxLatClip) / tileSize);\n  var maxY = Math.max(0, Math.ceil((WEB_MERCATOR_HALF_WORLD_WIDTH - minLatClip) / tileSize) - 1);\n\n  return {\n    minX: minX,\n    maxX: maxX,\n    minY: minY,\n    maxY: maxY\n  };\n}\n\nmodule.exports.WEB_MERCATOR_HALF_WORLD_WIDTH = WEB_MERCATOR_HALF_WORLD_WIDTH;\n\nmodule.exports.determinePositionAndScale = function(geoPackageTileBoundingBox, tileHeight, tileWidth, totalBoundingBox, totalHeight, totalWidth) {\n  var p = {};\n\n  var finalTileWidth = totalBoundingBox.maxLongitude - totalBoundingBox.minLongitude;\n  var xoffsetMin = geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude;\n  var xpercentageMin = xoffsetMin / finalTileWidth;\n\n  var finalTileHeight = totalBoundingBox.maxLatitude - totalBoundingBox.minLatitude;\n  var yoffsetMax = totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude;\n  var ypercentageMax = yoffsetMax / finalTileHeight;\n\n  var gpTileWidth = geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude;\n  var gpPixelsPerUnitWidth = tileWidth / gpTileWidth;\n\n  var finalTilePixelsPerUnitWidth = totalWidth / finalTileWidth;\n\n  var xPositionInFinalTileUnits = ((geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth);\n  var widthInFinalTileUnits = Math.round(((geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth));\n\n  var gpTileHeight = geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude;\n  var gpPixelsPerUnitHeight = tileHeight / gpTileHeight;\n\n  var finalTilePixelsPerUnitHeight = totalHeight / finalTileHeight;\n\n  var yPositionInFinalTileUnits = ((totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude) * finalTilePixelsPerUnitHeight);\n  var heightInFinalTileUnits = Math.round((geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude) * finalTilePixelsPerUnitHeight);\n\n  p.yPositionInFinalTileStart = Math.round(ypercentageMax * totalHeight);\n  p.xPositionInFinalTileStart = Math.round(xpercentageMin * totalWidth);\n  p.dx = p.xPositionInFinalTileStart;\n  p.dy = p.yPositionInFinalTileStart;\n  p.sx = 0;\n  p.sy = 0;\n  p.dWidth = widthInFinalTileUnits;\n  p.dHeight = heightInFinalTileUnits;\n  p.sWidth = tileWidth;\n  p.sHeight = tileHeight;\n\n  return p;\n}\n\n/**\n * Calculate the bounds in EPSG:3857 coordinates of the tile at the given XYZ\n * coordinates coordinates and zoom level.\n *\n *  @param {number} x tile column\n *  @param {number} y tile row\n *  @param {number} zoom zoom level\n *  @return {BoundingBox} a bounding box in EPSG:3857 meters\n */\nmodule.exports.getWebMercatorBoundingBoxFromXYZ = function(x, y, zoom, options) {\n  var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom);\n\tvar tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide);\n\n  var meterBuffer = 0;\n  if (options && options.buffer && options.tileSize) {\n    var pixelBuffer = options.buffer;\n    var metersPerPixel = tileSize / options.tileSize;\n    meterBuffer = metersPerPixel * pixelBuffer;\n  }\n\n\tvar minLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + (x * tileSize) - meterBuffer;\n\tvar maxLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + ((x + 1) * tileSize) + meterBuffer;\n\tvar minLat = WEB_MERCATOR_HALF_WORLD_WIDTH - ((y + 1) * tileSize) - meterBuffer;\n\tvar maxLat = WEB_MERCATOR_HALF_WORLD_WIDTH - (y * tileSize) + meterBuffer;\n\n  minLon = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLon);\n  maxLon = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLon);\n  minLat = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLat);\n  maxLat = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLat);\n\n\tvar box = new BoundingBox(minLon, maxLon, minLat, maxLat);\n\n\treturn box;\n}\n\n/**\n *  Get the tile size in meters\n *\n *  @param tilesPerSide tiles per side\n *\n *  @return meters\n */\nmodule.exports.tileSizeWithTilesPerSide = function(tilesPerSide) {\n  return (2 * WEB_MERCATOR_HALF_WORLD_WIDTH) / tilesPerSide;\n}\n\n/**\n *  Get the tiles per side, width and height, at the zoom level\n *\n *  @param zoom zoom level\n *\n *  @return tiles per side\n */\nmodule.exports.tilesPerSideWithZoom = function(zoom) {\n  return 1 << zoom;\n}\n\n/**\n *  Get the tile grid\n *\n *  @param webMercatorTotalBox    web mercator total bounding box\n *  @param matrixWidth            matrix width\n *  @param matrixHeight           matrix height\n *  @param boundingBox            bounding box\n *\n *  @return tile grid\n */\nmodule.exports.getTileGridWithTotalBoundingBox = function(totalBoundingBox, matrixWidth, matrixHeight, boundingBox) {\n  var minColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.minLongitude);\n  var maxColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.maxLongitude, true);\n  if (minColumn < matrixWidth && maxColumn >= 0) {\n    if (minColumn < 0) {\n      minColumn = 0;\n    }\n    if (maxColumn >= matrixWidth) {\n      maxColumn = matrixWidth - 1;\n    }\n  }\n\n  var maxRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.minLatitude, true);\n  var minRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.maxLatitude);\n\n\n  if(minRow < matrixHeight && maxRow >= 0){\n    if(minRow < 0){\n      minRow = 0;\n    }\n    if(maxRow >= matrixHeight){\n      maxRow = matrixHeight - 1;\n    }\n  }\n\n  var tileGrid = new TileGrid(minColumn, maxColumn, minRow, maxRow);\n  return tileGrid;\n}\n\n/**\n *  Get the tile column of the longitude in degrees\n *\n *  @param webMercatorTotalBox web mercator total bounding box\n *  @param matrixWidth         matrix width\n *  @param longitude           longitude\n *\n *  @return tile column\n */\nmodule.exports.getTileColumnWithTotalBoundingBox = function(webMercatorTotalBox, matrixWidth, longitude, max) {\n  var minX = webMercatorTotalBox.minLongitude;\n  var maxX = webMercatorTotalBox.maxLongitude;\n  var tileId;\n  if (longitude < minX) {\n    tileId = -1;\n  } else if (longitude >= maxX) {\n    tileId = matrixWidth;\n  } else {\n    var matrixWidthMeters = maxX - minX;\n    var tileWidth = matrixWidthMeters / matrixWidth;\n    var tileIdDouble = ((longitude - minX) / tileWidth);\n    tileId = ~~tileIdDouble;\n    if (max) {\n      // if the edge lands right on the calculated edge, subtract one\n      if (tileIdDouble === tileId) {\n        tileId--;\n      }\n    }\n  }\n  return tileId;\n}\n\n/**\n *  Get the tile row of the latitude in degrees\n *\n *  @param webMercatorTotalBox web mercator total bounding box\n *  @param matrixHeight        matrix height\n *  @param latitude            latitude\n *\n *  @return tile row\n */\nmodule.exports.getRowWithTotalBoundingBox = function(webMercatorTotalBox, matrixHeight, latitude, max) {\n  var minY = webMercatorTotalBox.minLatitude;\n  var maxY = webMercatorTotalBox.maxLatitude;\n\n  var tileId;\n  if (latitude < minY) {\n    tileId = matrixHeight;\n  } else if (latitude >= maxY) {\n    tileId = -1;\n  } else {\n    var matrixHeightMeters = maxY - minY;\n    var tileHeight = matrixHeightMeters / matrixHeight;\n    var tileIdDouble = ((maxY - latitude) / tileHeight);\n    tileId = ~~tileIdDouble;\n    if (max) {\n      // if the edge lands right on the calculated edge, add one\n      if (tileIdDouble === tileId) {\n        tileId--;\n      }\n    }\n  }\n  return tileId;\n}\n\n/**\n *  Get the web mercator bounding box of the tile column and row in the tile\n *  matrix using the total bounding box\n *\n *  @param webMercatorTotalBox web mercator total bounding box\n *  @param tileMatrix          tile matrix\n *  @param tileColumn          tile column\n *  @param tileRow             tile row\n *\n *  @return web mercator bounding box\n */\nmodule.exports.getTileBoundingBox = function(box, tileMatrix, tileColumn, tileRow) {\n  var tileMatrixWidth = tileMatrix.matrix_width;\n  var tileMatrixHeight = tileMatrix.matrix_height;\n  var tileGrid = new TileGrid(tileColumn, tileColumn, tileRow, tileRow);\n  var matrixMinX = box.minLongitude;\n  var matrixMaxX = box.maxLongitude;\n  var matrixWidth = matrixMaxX - matrixMinX;\n  var tileWidth = matrixWidth / tileMatrixWidth;\n\n  // Find the longitude range\n  var minLon = matrixMinX + (tileWidth * tileGrid.min_x);\n  var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x));\n\n  // Get the tile height\n  var matrixMinY = box.minLatitude;\n  var matrixMaxY = box.maxLatitude;\n  var matrixHeight = matrixMaxY - matrixMinY;\n  var tileHeight = matrixHeight / tileMatrixHeight;\n\n  // Find the latitude range\n  var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y);\n  var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y));\n\n  return new BoundingBox(minLon, maxLon, minLat, maxLat);\n}\n\nmodule.exports.getTileGridBoundingBox = function(matrixSetBoundingBox, tileMatrixWidth, tileMatrixHeight, tileGrid) {\n  // Get the tile width\n  var matrixMinX = matrixSetBoundingBox.minLongitude;\n  var matrixMaxX = matrixSetBoundingBox.maxLongitude;\n  var matrixWidth = matrixMaxX - matrixMinX;\n  var tileWidth = matrixWidth / tileMatrixWidth;\n\n  // Find the longitude range\n  var minLon = matrixMinX + (tileWidth * tileGrid.min_x);\n  var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x));\n\n  // Get the tile height\n  var matrixMinY = matrixSetBoundingBox.minLatitude;\n  var matrixMaxY = matrixSetBoundingBox.maxLatitude;\n  var matrixHeight = matrixMaxY - matrixMinY;\n  var tileHeight = matrixHeight / tileMatrixHeight;\n\n  // Find the latitude range\n  var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y);\n  var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y));\n\n  return new BoundingBox(minLon, maxLon, minLat, maxLat);\n}\n\nmodule.exports.getXPixel = function(width, boundingBox, longitude) {\n  var boxWidth = boundingBox.maxLongitude - boundingBox.minLongitude;\n  var offset = longitude - boundingBox.minLongitude;\n  var percentage = offset / boxWidth;\n  return percentage * width;\n}\n\nmodule.exports.getLongitudeFromPixel = function(width, boundingBox, tileBoundingBox, pixel) {\n  var boxWidth = tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude;\n  var percentage = pixel / width;\n  var offset = percentage * boxWidth;\n  return offset + boundingBox.minLongitude;\n}\n\nmodule.exports.getYPixel = function(height, boundingBox, latitude) {\n  var boxHeight = boundingBox.maxLatitude - boundingBox.minLatitude;\n  var offset = boundingBox.maxLatitude - latitude;\n  var percentage = offset / boxHeight;\n  return percentage * height;\n}\n\nmodule.exports.getLatitudeFromPixel = function(height, boundingBox, tileBoundingBox, pixel) {\n  var boxHeight = tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude;\n  var percentage = pixel / height;\n  var offset = percentage * boxHeight;\n  return boundingBox.maxLatitude - offset;\n}\n\n},{\"../boundingBox\":7,\"./tileGrid\":94,\"proj4\":285}],94:[function(require,module,exports){\n\n/**\n * Tile grid with x and y ranges\n * @module tiles/tileGrid\n * @class\n */\nvar TileGrid = function(minX, maxX, minY, maxY) {\n  this.min_x = minX;\n  this.max_x = maxX;\n  this.min_y = minY;\n  this.max_y = maxY;\n}\n\nTileGrid.prototype.count = function () {\n  return ((this.max_x + 1) - this.min_x) * ((this.max_y + 1) - this.min_y);\n};\n\nTileGrid.prototype.equals = function (tileGrid) {\n  if (!tileGrid) return false;\n  return this.min_x === tileGrid.min_x\n    && this.max_x === tileGrid.max_x\n    && this.min_y === tileGrid.min_y\n    && this.max_y === tileGrid.max_y;\n};\n\nmodule.exports = TileGrid;\n\n},{}],95:[function(require,module,exports){\n/**\n * @module tiles/user/tileColumn\n */\n\nconst UserColumn = require('../../user/userColumn');\nconst DataTypes = require('../../db/dataTypes');\nconst util = require('util');\n\n/**\n * `TileColumn` models columns in [user tile pyramid tables]{@link module:tiles/user/tileTable~TileTable}.\n *\n * @class\n * @extends {module:user/userColumn~UserColumn}\n */\nvar TileColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) {\n  UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);\n  if (dataType === DataTypes.GPKG_DT_GEOMETRY) {\n    throw new Error('Data Type is required to create column: ' + name);\n  }\n}\n\nutil.inherits(TileColumn, UserColumn);\n\n/**\n * Create an id column\n * @param  {number} index Index\n */\nTileColumn.createIdColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, false, null, true);\n}\n\n/**\n * Create a zoom level column\n * @param  {number} index Index\n */\nTileColumn.createZoomLevelColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_ZOOM_LEVEL, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);\n}\n\n/**\n *  Create a tile column column\n *\n *  @param {number} index column index\n */\nTileColumn.createTileColumnColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_TILE_COLUMN, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);\n}\n\n/**\n *  Create a tile row column\n *\n *  @param {number} index column index\n *\n */\nTileColumn.createTileRowColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_TILE_ROW, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);\n}\n\n/**\n *  Create a tile data column\n *\n *  @param {number} index column index\n */\nTileColumn.createTileDataColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_TILE_DATA, DataTypes.GPKGDataType.GPKG_DT_BLOB, null, true, null, false);\n}\n\nTileColumn.COLUMN_ID = \"id\";\nTileColumn.COLUMN_ZOOM_LEVEL = \"zoom_level\";\nTileColumn.COLUMN_TILE_COLUMN = \"tile_column\";\nTileColumn.COLUMN_TILE_ROW = \"tile_row\";\nTileColumn.COLUMN_TILE_DATA = \"tile_data\";\n\nmodule.exports = TileColumn;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"util\":343}],96:[function(require,module,exports){\n/**\n * tileDao module.\n * @module tiles/user/tileDao\n */\n\nvar UserDao = require('../../user/userDao')\n  , TileGrid = require('../tileGrid')\n  , TileRow = require('./tileRow')\n  , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao\n  , TileMatrixDao = require('../matrix').TileMatrixDao\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , BoundingBox = require('../../boundingBox')\n  , BoundingBoxUtils = require('../tileBoundingBoxUtils')\n  , BoundingBox = require('../../boundingBox')\n  , ColumnValues = require('../../dao/columnValues')\n  , TileColumn = require('./tileColumn')\n  , TileDaoUtils = require('./tileDaoUtils');\n\nvar util = require('util')\n  , proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\n/**\n * `TileDao` is a {@link module:dao/dao~Dao} subclass for reading\n * [user tile tables]{@link module:tiles/user/tileTable~TileTable}.\n *\n * @class TileDao\n * @extends {module:user/userDao~UserDao}\n * @param  {GeoPackageConnection} connection\n * @param  {TileTable} table\n * @param  {TileMatrixSet} tileMatrixSet\n * @param  {TileMatrix[]} tileMatrices\n */\nvar TileDao = function(geoPackage, table, tileMatrixSet, tileMatrices) {\n  UserDao.call(this, geoPackage, table);\n\n  this.tileMatrixSet = tileMatrixSet;\n  this.tileMatrices = tileMatrices;\n  this.zoomLevelToTileMatrix = [];\n  this.widths = [];\n  this.heights = [];\n\n  if (tileMatrices.length === 0) {\n    this.minZoom = 0;\n    this.maxZoom = 0;\n  } else {\n    this.minZoom = this.tileMatrices[0].zoom_level;\n    this.maxZoom = this.tileMatrices[this.tileMatrices.length-1].zoom_level;\n  }\n\n  // Populate the zoom level to tile matrix and the sorted tile widths and heights\n  for (var i = this.tileMatrices.length-1; i >= 0; i--) {\n    var tileMatrix = this.tileMatrices[i];\n    this.zoomLevelToTileMatrix[tileMatrix.zoom_level] = tileMatrix;\n  }\n\n  this.initialize();\n}\n\nutil.inherits(TileDao, UserDao);\n\nTileDao.prototype.initialize = function() {\n  var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();\n  this.srs = tileMatrixSetDao.getSrs(this.tileMatrixSet);\n  this.projection = this.srs.organization.toUpperCase() + ':' + this.srs.organization_coordsys_id;\n\n  // Populate the zoom level to tile matrix and the sorted tile widths and heights\n  for (var i = this.tileMatrices.length-1; i >= 0; i--) {\n    var tileMatrix = this.tileMatrices[i];\n\n    var width = tileMatrix.pixel_x_size * tileMatrix.tile_width;\n    var height = tileMatrix.pixel_y_size * tileMatrix.tile_height;\n    var proj4Projection = proj4(this.projection);\n    if (proj4Projection.to_meter) {\n      width = proj4Projection.to_meter * tileMatrix.pixel_x_size * tileMatrix.tile_width;\n      height = proj4Projection.to_meter * tileMatrix.pixel_y_size * tileMatrix.tile_height;\n    }\n    this.widths.push(width);\n    this.heights.push(height);\n  }\n  this.setWebMapZoomLevels();\n}\n\nTileDao.prototype.webZoomToGeoPackageZoom = function(webZoom) {\n  var webMercatorBoundingBox = BoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(0, 0, webZoom);\n  return this.determineGeoPackageZoomLevel(webMercatorBoundingBox, webZoom);\n}\n\nTileDao.prototype.setWebMapZoomLevels = function() {\n  this.minWebMapZoom = 20;\n  this.maxWebMapZoom = 0;\n\n  this.webZoomToGeoPackageZooms = {};\n\n  var totalTileWidth = this.tileMatrixSet.max_x - this.tileMatrixSet.min_x;\n  var totalTileHeight = this.tileMatrixSet.max_y - this.tileMatrixSet.min_y;\n  for (var i = 0; i < this.tileMatrices.length; i++) {\n    var tileMatrix = this.tileMatrices[i];\n    var singleTileWidth = totalTileWidth / tileMatrix.matrix_width;\n    var singleTileHeight = totalTileHeight / tileMatrix.matrix_height;\n    var tileBox = new BoundingBox(this.tileMatrixSet.min_x, this.tileMatrixSet.min_x + singleTileWidth, this.tileMatrixSet.min_y, this.tileMatrixSet.min_y + singleTileHeight);\n    var proj4Projection = proj4(this.projection, 'EPSG:4326');\n    var ne = proj4Projection.forward([tileBox.maxLongitude, tileBox.maxLatitude]);\n    var sw = proj4Projection.forward([tileBox.minLongitude, tileBox.minLatitude]);\n    var width = (ne[0] - sw[0]);\n    var height = (ne[1] - sw[1]);\n    var zoom = Math.ceil(Math.log2(360/width));\n    if (this.minWebMapZoom > zoom) {\n      this.minWebMapZoom = zoom;\n    }\n    if (this.maxWebMapZoom < zoom) {\n      this.maxWebMapZoom = zoom;\n    }\n    this.webZoomToGeoPackageZooms[zoom] = tileMatrix.zoom_level;\n  }\n}\n\nTileDao.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) {\n  return this.webZoomToGeoPackageZooms[zoom];\n};\n\n/**\n * Get the bounding box of tiles at the zoom level\n * @param  {Number} zoomLevel zoom level\n * @return {BoundingBox}           bounding box of the zoom level, or null if no tiles\n */\nTileDao.prototype.getBoundingBoxWithZoomLevel = function (zoomLevel) {\n  var boundingBox;\n\n  var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel);\n  if (tileMatrix) {\n    var tileGrid = this.queryForTileGridWithZoomLevel(zoomLevel);\n    if (tileGrid) {\n      var matrixSetBoundingBox = this.getBoundingBox();\n      boundingBox = BoundingBoxUtils.getTileGridBoundingBox(matrixSetBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, tileGrid);\n    }\n    return boundingBox;\n  } else {\n    return boundingBox;\n  }\n};\n\nTileDao.prototype.getBoundingBox = function () {\n  return this.tileMatrixSet.getBoundingBox();\n};\n\nTileDao.prototype.queryForTileGridWithZoomLevel = function (zoomLevel) {\n  var where = this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  var whereArgs = this.buildWhereArgs(zoomLevel);\n  var minX = this.minOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs);\n  var maxX = this.maxOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs);\n  var minY = this.minOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs);\n  var maxY = this.maxOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs);\n  var tileGrid;\n  if (minX != null && minY != null && maxX != null && maxY != null) {\n    tileGrid = new TileGrid(minX, maxX, minY, maxY);\n  }\n  return tileGrid;\n};\n\n/**\n * Get the tile grid of the zoom level\n * @param  {Number} zoomLevel zoom level\n * @return {TileGrid}           tile grid at zoom level, null if no tile matrix at zoom level\n */\nTileDao.prototype.getTileGridWithZoomLevel = function (zoomLevel) {\n  var tileGrid;\n  var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel);\n  if (tileMatrix) {\n    tileGrid = new TileGrid(0, ~~tileMatrix.matrix_width - 1, 0, ~~tileMatrix.matrix_height - 1);\n  }\n  return tileGrid;\n};\n\n/**\n * get the tile table\n * @return {TileTable} tile table\n */\nTileDao.prototype.getTileTable = function () {\n  return this.table;\n};\n\n/**\n * Create a new tile row with the column types and values\n * @param  {Array} columnTypes column types\n * @param  {Array} values      values\n * @return {TileRow}             tile row\n */\nTileDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new TileRow(this.getTileTable(), columnTypes, values);\n};\n\n/**\n * Create a new tile row\n * @return {TileRow} tile row\n */\nTileDao.prototype.newRow = function () {\n  return new TileRow(this.getTileTable());\n};\n\n/**\n * Adjust the tile matrix lengths if needed. Check if the tile matrix width\n * and height need to expand to account for pixel * number of pixels fitting\n * into the tile matrix lengths\n */\nTileDao.prototype.adjustTileMatrixLengths = function () {\n  TileDaoUtils.adjustTileMatrixLengths(this.tileMatrixSet, this.tileMatrices);\n};\n\n/**\n * Get the tile matrix at the zoom level\n * @param  {Number} zoomLevel zoom level\n * @return {TileMatrix}           tile matrix\n */\nTileDao.prototype.getTileMatrixWithZoomLevel = function (zoomLevel) {\n  return this.zoomLevelToTileMatrix[zoomLevel];\n};\n\n/**\n * Query for a tile\n * @param  {Number} column    column\n * @param  {Number} row       row\n * @param  {Number} zoomLevel zoom level\n * @param {Function}           callback called with an error if one occurred and the TileDao\n */\nTileDao.prototype.queryForTile = function (column, row, zoomLevel) {\n  var fieldValues = new ColumnValues();\n  fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column);\n  fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row);\n  fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  var tileRow;\n  for (var row of this.queryForFieldValues(fieldValues)) {\n    tileRow = this.getRow(row);\n  }\n  return tileRow;\n};\n\nTileDao.prototype.queryForTilesWithZoomLevel = function (zoomLevel, tileCallback) {\n  var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  var thisgetRow = this.getRow.bind(this);\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        return {\n          value: thisgetRow(nextRow.value),\n          done: false\n        };\n      }\n      return {\n        done: true\n      }\n    }.bind(this)\n  }\n};\n\n/**\n * Query for Tiles at a zoom level in descending row and column order\n * @param  {Number} zoomLevel    zoom level\n * @param  {Function} tileCallback callback for each tile\n * @param  {Function} doneCallback called when all tiles are retrieved\n */\nTileDao.prototype.queryForTilesDescending = function (zoomLevel, tileCallback) {\n  var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel, undefined, undefined, TileColumn.COLUMN_TILE_COLUMN + ' DESC, ' + TileColumn.COLUMN_TILE_ROW + ', DESC');\n\n  var thisgetRow = this.getRow.bind(this);\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        return {\n          value: thisgetRow(nextRow.value),\n          done: false\n        };\n      }\n      return {\n        done: true\n      }\n    }.bind(this)\n  };\n};\n\n/**\n * Query for tiles at a zoom level and column\n * @param  {Number} column       column\n * @param  {Number} zoomLevel    zoom level\n * @param  {Function} tileCallback called for each tile\n * @param  {Function} doneCallback called when all tiles have been retrieved\n */\nTileDao.prototype.queryForTilesInColumn = function (column, zoomLevel, tileCallback) {\n  var fieldValues = new ColumnValues();\n  fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column);\n  fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n\n  var iterator = this.queryForFieldValues(fieldValues);\n  var thisgetRow = this.getRow.bind(this);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var tileRow = thisgetRow(nextRow.value);\n\n        return {\n          value: tileRow,\n          done: false\n        };\n      } else {\n        return {\n          done: true\n        }\n      }\n    }\n  }\n};\n\n/**\n * Query for tiles at a zoom level and row\n * @param  {Number} row       row\n * @param  {Number} zoomLevel    zoom level\n * @param  {Function} tileCallback called for each tile\n * @param  {Function} doneCallback called when all tiles have been retrieved\n */\nTileDao.prototype.queryForTilesInRow = function (row, zoomLevel, tileCallback, doneCallback) {\n  var fieldValues = new ColumnValues();\n  fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row);\n  fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n\n  var iterator = this.queryForFieldValues(fieldValues);\n  var thisgetRow = this.getRow.bind(this);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var tileRow = thisgetRow(nextRow.value);\n\n        return {\n          value: tileRow,\n          done: false\n        };\n      } else {\n        return {\n          done: true\n        }\n      }\n    }\n  }\n};\n\n/**\n * Query by tile grid and zoom level\n * @param  {TileGrid} tileGrid  tile grid\n * @param  {Number} zoomLevel zoom level\n * @param  {Function} tileCallback called for each tile\n * @param  {Function} doneCallback called when all tiles have been retrieved\n */\nTileDao.prototype.queryByTileGrid = function (tileGrid, zoomLevel) {\n  if (!tileGrid) return doneCallback();\n  var tileCount = 0;\n  var x = tileGrid.min_x;\n\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.min_x, '>=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.max_x, '<=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.min_y, '>=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.max_y, '<=');\n  var whereArgs = this.buildWhereArgs([zoomLevel, tileGrid.min_x, tileGrid.max_x, tileGrid.min_y, tileGrid.max_y]);\n\n  var iterator = this.queryWhereWithArgsDistinct(where, whereArgs);\n  var thisgetRow = this.getRow.bind(this);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var tileRow = thisgetRow(nextRow.value);\n\n        return {\n          value: tileRow,\n          done: false\n        };\n      } else {\n        return {\n          done: true\n        }\n      }\n    }\n  }\n};\n\nTileDao.prototype.deleteTile = function(column, row, zoomLevel) {\n  var where = '';\n\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, column);\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, row);\n\n  var whereArgs = this.buildWhereArgs([zoomLevel, column, row]);\n\n  return this.deleteWhere(where, whereArgs);\n};\n\nTileDao.prototype.getSrs = function() {\n  return this.geoPackage.getContentsDao().getSrs(this.tileMatrixSet);\n};\n\nTileDao.prototype.dropTable = function() {\n  var tileMatrixDao = this.geoPackage.getTileMatrixDao();\n  var dropResult = UserDao.prototype.dropTable.call(this);\n\n  var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();\n  tileMatrixSetDao.delete(this.tileMatrixSet);\n\n  for (var i = this.tileMatrices.length-1; i >= 0; i--) {\n    var tileMatrix = this.tileMatrices[i];\n    tileMatrixDao.delete(tileMatrix);\n  }\n\n  var dao = this.geoPackage.getContentsDao();\n  dao.deleteById(this.gpkgTableName);\n  return dropResult;\n}\n\nTileDao.prototype.rename = function(newName) {\n  UserDao.prototype.rename.call(this, newName);\n\n  var oldName = this.tileMatrixSet.table_name;\n\n  var values = {};\n  values[TileMatrixSetDao.COLUMN_TABLE_NAME] = newName;\n\n  var where = this.buildWhereWithFieldAndValue(TileMatrixSetDao.COLUMN_TABLE_NAME, oldName);\n  var whereArgs = this.buildWhereArgs([oldName]);\n\n  var contentsDao = this.geoPackage.getContentsDao();\n  var contents = contentsDao.queryForId(oldName);\n  contents.table_name = newName;\n  contents.identifier = newName;\n  contentsDao.create(contents);\n\n  var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();\n  tileMatrixSetDao.updateWithValues(values, where, whereArgs);\n\n  var tileMatrixDao = this.geoPackage.getTileMatrixDao();\n  var tileMatrixUpdate = {};\n  tileMatrixUpdate[TileMatrixDao.COLUMN_TABLE_NAME] = newName;\n  var tileMatrixWhere = this.buildWhereWithFieldAndValue(TileMatrixDao.COLUMN_TABLE_NAME, oldName);\n\n  tileMatrixDao.updateWithValues(tileMatrixUpdate, tileMatrixWhere, whereArgs);\n\n  contentsDao.deleteById(oldName);\n}\n\nmodule.exports = TileDao;\n\n},{\"../../boundingBox\":7,\"../../core/contents\":8,\"../../dao/columnValues\":10,\"../../user/userDao\":106,\"../matrix\":90,\"../matrixset\":91,\"../tileBoundingBoxUtils\":93,\"../tileGrid\":94,\"./tileColumn\":95,\"./tileDaoUtils\":97,\"./tileRow\":98,\"proj4\":285,\"util\":343}],97:[function(require,module,exports){\n\nmodule.exports.adjustTileMatrixLengths = function(tileMatrixSet, tileMatrices) {\n  var tileMatrixWidth = tileMatrixSet.maxX - tileMatrixSet.minX;\n  var tileMatrixHeight = tileMatrixSet.maxY - tileMatrixSet.minY;\n  for (var i = 0; i < tileMatrices.length; i++) {\n    var tileMatrix = tileMatrices[i];\n    var tempMatrixWidth = ~~((tileMatrixWidth / (tileMatrix.pixelXSize * ~~tileMatrix.tileWidth)));\n    var tempMatrixHeight = ~~((tileMatrixHeight / (tileMatrix.pixelYSize * ~~(tileMatrix.tileHeight))));\n    if(tempMatrixWidth > ~~(tileMatrix.matrixWidth)) {\n      tileMatrix.matrixWidth = ~~(tempMatrixWidth);\n    }\n    if (tempMatrixHeight > ~~(tileMatrix.matrixHeight)) {\n      tileMatrix.matrixHeight = ~~(tempMatrixHeight);\n    }\n  }\n}\n\n},{}],98:[function(require,module,exports){\n/**\n * tileRow module.\n * @module tiles/user/tileRow\n */\n\nvar UserRow = require('../../user/userRow');\n\nvar util = require('util');\n\n/**\n * Tile Row containing the values from a single result set row\n * @param  {TileTable} tileTable tile table\n * @param  {Array} columnTypes  column types\n * @param  {Array} values       values\n */\nvar TileRow = function(tileTable, columnTypes, values) {\n  UserRow.call(this, tileTable, columnTypes, values);\n  this.tileTable = tileTable;\n}\n\nutil.inherits(TileRow, UserRow);\n\nTileRow.prototype.toObjectValue = function (value) {\n  return value;\n};\n\nTileRow.prototype.toDatabaseValue = function (columnName) {\n  return this.getValueWithColumnName(columnName);\n};\n\n/**\n * Get the zoom level column index\n * @return {Number} zoom level column index\n */\nTileRow.prototype.getZoomLevelColumnIndex = function () {\n  return this.tileTable.zoomLevelIndex;\n};\n\n/**\n * Get the zoom level column\n * @return {TileColumn} zoom level column\n */\nTileRow.prototype.getZoomLevelColumn = function() {\n  return this.tileTable.getZoomLevelColumn();\n}\n\n/**\n * Get the zoom level\n * @return {Number} zoom level\n */\nTileRow.prototype.getZoomLevel = function () {\n  return this.getValueWithColumnName(this.getZoomLevelColumn().name);\n};\n\n/**\n * Set the zoom level\n * @param {Number} zoomLevel zoom level\n */\nTileRow.prototype.setZoomLevel = function (zoomLevel) {\n  this.setValueWithIndex(this.getZoomLevelColumnIndex(), zoomLevel);\n};\n\n/**\n * Get the tile column column Index\n * @return {number} tile column column index\n */\nTileRow.prototype.getTileColumnColumnIndex = function () {\n  return this.tileTable.tileColumnIndex;\n};\n\n/**\n * Get the tile column column\n * @return {TileColumn} tile column column\n */\nTileRow.prototype.getTileColumnColumn = function () {\n  return this.tileTable.getTileColumnColumn();\n};\n\n/**\n * Get the tile column\n * @return {Number} tile column\n */\nTileRow.prototype.getTileColumn = function () {\n  return this.getValueWithColumnName(this.getTileColumnColumn().name);\n};\n\n/**\n * Set the tile column\n * @param {number} tileColumn tile column\n */\nTileRow.prototype.setTileColumn = function (tileColumn) {\n  this.setValueWithColumnName(this.getTileColumnColumn().name, tileColumn);\n};\n\n/**\n * Get the tile row column index\n * @return {Number} tile row column index\n */\nTileRow.prototype.getRowColumnIndex = function () {\n  return this.tileTable.tileRowIndex;\n};\n\n/**\n * Get the tile row column\n * @return {TileColumn} tile row column\n */\nTileRow.prototype.getRowColumn = function () {\n  return this.tileTable.getRowColumn();\n};\n\n/**\n * Get the tile row\n * @return {Number} tile row\n */\nTileRow.prototype.getRow = function () {\n  return this.getValueWithColumnName(this.getRowColumn().name);\n};\n\n/**\n * Set the tile row\n * @param {Number} tileRow tile row\n */\nTileRow.prototype.setTileRow = function (tileRow) {\n  this.setValueWithColumnName(this.getRowColumn().name, tileRow);\n};\n\n/**\n * Get the tile data column index\n * @return {Number} tile data column index\n */\nTileRow.prototype.getTileDataColumnIndex = function () {\n  return this.tileTable.tileDataIndex;\n};\n\n/**\n * Get the tile data column\n * @return {TileColumn} tile data column\n */\nTileRow.prototype.getTileDataColumn = function () {\n  return this.tileTable.getTileDataColumn();\n};\n\n/**\n * Get the tile data\n * @return {Buffer} tile data\n */\nTileRow.prototype.getTileData = function () {\n  return this.getValueWithColumnName(this.getTileDataColumn().name);\n};\n\n/**\n * Set the tile data\n * @param {Buffer} tileData tile data\n */\nTileRow.prototype.setTileData = function (tileData) {\n  this.setValueWithColumnName(this.getTileDataColumn().name, tileData);\n};\n\n/**\n * Get the tile data as an image\n * @return {image} tile image\n */\nTileRow.prototype.getTileDataImage = function () {\n  // TODO\n};\n\n\n// /**\n//  *  Get the tile data as a scaled image\n//  *\n//  *  @param scale scale, 0.0 to 1.0\n//  *\n//  *  @return tile image\n//  */\n// -(UIImage *) getTileDataImageWithScale: (CGFloat) scale;\n//\n// /**\n//  *  Set the tile data with an image\n//  *\n//  *  @param image  image\n//  *  @param format image format\n//  */\n// -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format;\n//\n// /**\n//  *  Set the tile data with an image\n//  *\n//  *  @param image  image\n//  *  @param format image format\n//  *  @param quality compression quality, 0.0 to 1.0, used only for GPKG_CF_JPEG\n//  */\n// -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format andQuality: (CGFloat) quality;\n\n\nmodule.exports = TileRow;\n\n},{\"../../user/userRow\":107,\"util\":343}],99:[function(require,module,exports){\n/**\n * @module tiles/user/tileTable\n */\n\nconst UserTable = require('../../user/userTable');\nconst TileColumn = require('./tileColumn');\nconst util = require('util');\n\n/**\n * `TileTable` models [tile pyramid user tables](https://www.geopackage.org/spec121/index.html#tiles_user_tables).\n *\n * @class\n * @extends {module:user/userTable~UserTable}\n * @param {string} tableName\n * @param {module:tiles/user/tileColumn~TileColumn[]} columns\n */\nvar TileTable = module.exports = function(tableName, columns) {\n  UserTable.call(this, tableName, columns);\n\n  var zoomLevel;\n  var tileColumn;\n  var tileRow;\n  var tileData;\n  var uniqueColumns = [];\n\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    var columnName = column.name;\n    var columnIndex = column.index;\n\n    switch(columnName) {\n      case TileColumn.COLUMN_ZOOM_LEVEL:\n      this.duplicateCheck(columnIndex, zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL);\n      zoomLevel = columnIndex;\n      uniqueColumns.push(column);\n      break;\n      case TileColumn.COLUMN_TILE_COLUMN:\n      this.duplicateCheck(columnIndex, tileColumn, TileColumn.COLUMN_TILE_COLUMN);\n      tileColumn = columnIndex;\n      uniqueColumns.push(column);\n      break;\n      case TileColumn.COLUMN_TILE_ROW:\n      this.duplicateCheck(columnIndex, tileRow, TileColumn.COLUMN_TILE_ROW);\n      tileRow = columnIndex;\n      uniqueColumns.push(column);\n      break;\n      case TileColumn.COLUMN_TILE_DATA:\n      this.duplicateCheck(columnIndex, tileData, TileColumn.COLUMN_TILE_DATA);\n      tileData = columnIndex;\n      break;\n    }\n  }\n\n  this.uniqueConstraints = [{columns: uniqueColumns}];\n\n  this.missingCheck(zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL);\n  this.zoomLevelIndex = zoomLevel;\n\n  this.missingCheck(tileColumn, TileColumn.COLUMN_TILE_COLUMN);\n  this.tileColumnIndex = tileColumn;\n\n  this.missingCheck(tileRow, TileColumn.COLUMN_TILE_ROW);\n  this.tileRowIndex = tileRow;\n\n  this.missingCheck(tileData, TileColumn.COLUMN_TILE_DATA);\n  this.tileDataIndex = tileData;\n}\n\nutil.inherits(TileTable, UserTable);\n\nTileTable.prototype.getZoomLevelColumn = function() {\n  return this.getColumnWithIndex(this.zoomLevelIndex);\n};\n\nTileTable.prototype.getTileColumnColumn = function() {\n  return this.getColumnWithIndex(this.tileColumnIndex);\n};\n\nTileTable.prototype.getRowColumn = function() {\n  return this.getColumnWithIndex(this.tileRowIndex);\n};\n\nTileTable.prototype.getTileDataColumn = function() {\n  return this.getColumnWithIndex(this.tileDataIndex);\n};\n\nTileTable.prototype.getTableType = function() {\n  return UserTable.TILE_TABLE;\n}\n\nTileTable.createRequiredColumns = function() {\n  return TileTable.createRequiredColumnsWithStartingIndex(0);\n}\n\nTileTable.createRequiredColumnsWithStartingIndex = function(startingIndex) {\n  var columns = [];\n  columns.push(TileColumn.createIdColumn(startingIndex++));\n  columns.push(TileColumn.createZoomLevelColumn(startingIndex++));\n  columns.push(TileColumn.createTileColumnColumn(startingIndex++));\n  columns.push(TileColumn.createTileRowColumn(startingIndex++));\n  columns.push(TileColumn.createTileDataColumn(startingIndex++));\n  return columns;\n}\n\n},{\"../../user/userTable\":108,\"./tileColumn\":95,\"util\":343}],100:[function(require,module,exports){\n/**\n * tileTableReader module.\n * @module tiles/user/tileTableReader\n */\n\nvar UserTableReader = require('../../user/userTableReader')\n  , DataTypes = require('../../db/dataTypes')\n  , TileMatrixSet = require('../matrixset').TileMatrixSet\n  , TileTable = require('./tileTable')\n  , TileColumn = require('./tileColumn');\n\nvar util = require('util');\n\n/**\n* Reads the metadata from an existing tile table\n* @class TileTableReader\n* @extends {module:user~UserTableReader}\n*/\nvar TileTableReader = function(tileMatrixSet) {\n  UserTableReader.call(this, tileMatrixSet.table_name);\n  this.tileMatrixSet = tileMatrixSet;\n}\n\nutil.inherits(TileTableReader, UserTableReader);\n\nTileTableReader.prototype.readTileTable = function (geoPackage) {\n  return this.readTable(geoPackage.getDatabase());\n};\n\nTileTableReader.prototype.createTable = function (tableName, columns) {\n  return new TileTable(tableName, columns);\n};\n\nTileTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValueIndex, primaryKey) {\n  var dataType = DataTypes.fromName(type);\n  var defaultValue = undefined;\n  if (defaultValueIndex) {\n    // console.log('default value index', defaultValueIndex);\n    // console.log('result', results);\n  }\n  var column = new TileColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);\n\n  return column;\n};\n\n/**\n * The TileTableReader\n * @type {TileTableReader}\n */\nmodule.exports = TileTableReader;\n\n},{\"../../db/dataTypes\":14,\"../../user/userTableReader\":109,\"../matrixset\":91,\"./tileColumn\":95,\"./tileTable\":99,\"util\":343}],101:[function(require,module,exports){\n/**\n * @module user/custom\n */\n\nvar util = require('util');\n\nvar UserColumn = require('../userColumn')\n  , DataTypes = require('../../db/dataTypes')\n\n/**\n * Create a new user custom columnd\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} dataType  data type\n *  @param {Number} max max value\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *  @param {Boolean} primaryKey primary key\n */\nvar UserCustomColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) {\n  UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);\n  if (dataType == null) {\n    throw new Error('Data type is required to create column: ' + name);\n  }\n}\n\nutil.inherits(UserCustomColumn, UserColumn);\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Number} max max value\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return {module:user/custom~UserCustomColumn} created column\n */\nUserCustomColumn.createColumn = function(index, name, dataType, max, notNull, defaultValue) {\n  return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, false);\n}\n\nmodule.exports = UserCustomColumn;\n\n},{\"../../db/dataTypes\":14,\"../userColumn\":105,\"util\":343}],102:[function(require,module,exports){\n/**\n * @module user/custom\n */\nvar util = require('util');\n\nvar UserDao = require('../userDao')\n  , UserRow = require('../userRow')\n  , UserCustomTableReader = require('./userCustomTableReader');\n\n/**\n * User Custom Dao\n * @class\n * @extends module:user/userDao~UserDao\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @param  {module:user/custom~UserCustomTable} userCustomTable user custom table\n */\nvar UserCustomDao = function(geoPackage, userCustomTable) {\n  UserDao.call(this, geoPackage, userCustomTable);\n}\n\nutil.inherits(UserCustomDao, UserDao);\n\n/**\n * Create a new UserRow\n * @return {module:user/userRow~UserRow}\n */\nUserCustomDao.prototype.newRow = function() {\n  return new UserRow(this.table);\n}\n\n/**\n * Reads the table specified from the geopackage\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @param  {string} tableName       table name\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/custom~UserCustomDao}\n */\nUserCustomDao.readTable = function(geoPackage, tableName, requiredColumns) {\n  var reader = new UserCustomTableReader(tableName, requiredColumns);\n  var userCustomTable = reader.readTable(geoPackage.getDatabase());\n  return new UserCustomDao(geoPackage, userCustomTable);\n}\n\nmodule.exports = UserCustomDao;\n\n},{\"../userDao\":106,\"../userRow\":107,\"./userCustomTableReader\":104,\"util\":343}],103:[function(require,module,exports){\n/**\n * @module user/custom\n */\nvar util = require('util');\n\nvar UserTable = require('../userTable');\n\n/**\n * Create a new user custom table\n * @class\n * @extends module:user/userTable~UserTable\n * @param  {string} tableName       table name\n * @param  {module:user/userColumn~UserColumn[]} columns         user columns\n * @param  {string[]} requiredColumns required columns\n */\nvar UserCustomTable = function(tableName, columns, requiredColumns) {\n  UserTable.call(this, tableName, columns);\n  if (requiredColumns && requiredColumns.length) {\n    var found = {};\n    for (var i = 0; i < columns.length; i++) {\n      var column = columns[i];\n      if (requiredColumns.indexOf(column.name) !== -1) {\n        var previousIndex = found[column.name];\n        this.duplicateCheck(column.index, previousIndex, column.name);\n        found[column.name] = column.index;\n      }\n    }\n    for (var i = 0; i < requiredColumns.length; i++) {\n      this.missingCheck(found[requiredColumns[i]], requiredColumns);\n    }\n  }\n}\n\nutil.inherits(UserCustomTable, UserTable);\n\nmodule.exports = UserCustomTable;\n\n},{\"../userTable\":108,\"util\":343}],104:[function(require,module,exports){\n/**\n * @module user/custom\n */\nvar util = require('util');\n\nvar UserTableReader = require('../userTableReader')\n  , DataTypes = require('../../db/dataTypes')\n  , UserCustomColumn = require('./userCustomColumn')\n  , UserCustomTable = require('./userCustomTable');\n\n/**\n * User custom table reader\n * @class\n * @extends module:user/userTableReader~UserTableReader\n * @param  {string} tableName       table name\n * @param  {string[]} requiredColumns required columns\n */\nvar UserCustomTableReader = function(tableName, requiredColumns) {\n  UserTableReader.call(this, tableName, requiredColumns);\n}\n\nutil.inherits(UserCustomTableReader, UserTableReader);\n\n/**\n * Creates user custom column\n * @param  {string} tableName       table name\n * @param  {module:user/userCustom~UserCustomColumn[]} columnList      columns\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/userCustom~UserCustomTable}\n */\nUserCustomTableReader.prototype.createTable = function(tableName, columnList, requiredColumns) {\n  return new UserCustomTable(tableName, columnList, requiredColumns);\n}\n\n/**\n * Creates a user custom column\n * @param {Object} result\n * @param {Number} index        column index\n * @param {string} name         column name\n * @param {module:db/dataTypes~GPKGDataType} type         data type\n * @param {Number} max max value\n * @param {Boolean} notNull      not null\n * @param {Object} defaultValue default value or nil\n * @param {Boolean} primaryKey primary key\n * @return {module:user/custom~UserCustomColumn}\n */\nUserCustomTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) {\n\n  var dataType = DataTypes.fromName(type);\n  return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);\n}\n\n\nmodule.exports = UserCustomTableReader;\n\n},{\"../../db/dataTypes\":14,\"../userTableReader\":109,\"./userCustomColumn\":101,\"./userCustomTable\":103,\"util\":343}],105:[function(require,module,exports){\n/**\n * @module user/userColumn\n */\n\nvar DataTypes = require('../db/dataTypes');\n\n/**\n * A `UserColumn` is meta-data about a single column from a {@link module:/user/userTable~UserTable}.\n *\n * @class\n * @param {Number} index column index\n * @param {string} name column name\n * @param {module:db/dataTypes~GPKGDataType} dataType data type of the column\n * @param {?Number} max max value\n * @param {Boolean} notNull not null\n * @param {?Object} defaultValue default value or null\n * @param {Boolean} primaryKey `true` if this column is part of the table's primary key\n */\nfunction UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey) {\n  this.index = index;\n  this.name = name;\n  this.dataType = dataType;\n  this.max = max;\n  this.notNull = notNull;\n  this.defaultValue = defaultValue;\n  this.primaryKey = primaryKey;\n  this.validateMax();\n}\n\n/**\n * Gets the type name\n * @return {module:db/dataTypes~GPKGDataType}\n */\nUserColumn.prototype.getTypeName = function () {\n  var type = undefined;\n  if (this.dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) {\n    type = DataTypes.name(this.dataType);\n  }\n  return type;\n};\n\n/**\n * Validate that if max is set, the data type is text or blob\n */\nUserColumn.prototype.validateMax = function () {\n  if(this.max && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_TEXT && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB) {\n    throw new Error('Column max is only supported for TEXT and BLOB columns. column: ' + this.name + ', max: ' + this.max + ', type: ' + this.dataType)\n  }\n};\n\n/**\n *  Create a new primary key column\n *\n *  @param {Number} index column index\n *  @param {string} name  column name\n *\n *  @return {module:user/userColumn~UserColumn} created column\n */\nUserColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) {\n  return new UserColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true);\n}\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return {module:user/userColumn~UserColumn} created column\n */\nUserColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) {\n  return UserColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue);\n}\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Number} max max value\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return {module:user/userColumn~UserColumn} created column\n */\nUserColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) {\n  return new UserColumn(index, name, type, max, notNull, defaultValue, false);\n}\n\nmodule.exports = UserColumn;\n\n},{\"../db/dataTypes\":14}],106:[function(require,module,exports){\n/**\n * UserDao module.\n * @module user/userDao\n */\n\nvar UserRow = require('./userRow')\n  , MediaTable = require('../extension/relatedTables/mediaTable')\n  , SimpleAttributesTable = require('../extension/relatedTables/simpleAttributesTable')\n  , RelationType = require('../extension/relatedTables/relationType')\n  , UserTableReader = require('./userTableReader')\n  , Dao = require('../dao/dao');\n\nvar util = require('util');\n\n/**\n * Abstract User DAO for reading user tables\n * @class UserDao\n * @extends {module:dao/dao~Dao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} connection        connection\n * @param  {string} table table name\n */\nvar UserDao = function(geoPackage, table) {\n  Dao.call(this, geoPackage);\n  this.table = table;\n  this.table_name = table.table_name;\n  this.gpkgTableName = table.table_name;\n  if (table.getPkColumn()) {\n    this.idColumns = [table.getPkColumn().name];\n  } else {\n    this.idColumns = [];\n  }\n  this.columns = table.columnNames;\n}\n\nutil.inherits(UserDao, Dao);\n\n/**\n * Reads the table specified from the geopackage\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @param  {string} tableName       table name\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/userDao~UserDao}\n */\nUserDao.readTable = function(geoPackage, tableName) {\n  var reader = new UserTableReader(tableName);\n  var userTable = reader.readTable(geoPackage.getDatabase());\n  return new UserDao(geoPackage, userTable);\n}\n\n/**\n * Creates a UserRow\n * @param  {Object} [results] results to create the row from if not specified, an empty row is created\n * @return {module:user/userRow~UserRow}\n */\nUserDao.prototype.createObject = function (results) {\n  if (results) {\n    return this.getRow(results);\n  }\n  return this.newRow();\n};\n\n/**\n * Sets the value in the row\n * @param  {module:user/userRow~UserRow} object      user row\n * @param  {Number} columnIndex index\n * @param  {Object} value       value\n */\nUserDao.prototype.setValueInObject = function (object, columnIndex, value) {\n  object.setValueNoValidationWithIndex(columnIndex, value);\n};\n\n/**\n * Get a user row from the current results\n * @param  {Object} results result to create the row from\n * @return {module:user/userRow~UserRow}         the user row\n */\nUserDao.prototype.getRow = function (results) {\n  var row = undefined;\n  if (!this.table) return row;\n  var columns = this.table.columnCount();\n  var columnTypes = {};\n  for (var i = 0; i < columns; i++) {\n    var column = this.table.getColumnWithIndex(i);\n    columnTypes[column.name] = column.dataType;\n  }\n  return this.newRowWithColumnTypes(columnTypes, results);\n};\n\n/**\n * Get the table for this dao\n * @return {module:user/userTable~UserTable}\n */\nUserDao.prototype.getTable = function() {\n  return this.table;\n}\n\n/**\n * Create a user row\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:user/userRow~UserRow}             user row\n */\nUserDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new UserRow(this.table, columnTypes, values);\n};\n\n/**\n * Get the projection\n * @return {string} the projection\n */\nUserDao.prototype.getProjection = function () {\n  return this.projection;\n};\n\n/**\n * Links related rows together\n * @param  {module:user/userRow~UserRow} userRow             user row\n * @param  {module:user/userRow~UserRow} relatedRow          related row\n * @param  {string} relationType        relation type\n * @param  {string|module:extension/relatedTables~UserMappingTable} [mappingTable]        mapping table\n * @param  {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values\n * @return {Promise}\n */\nUserDao.prototype.linkRelatedRow = function(userRow, relatedRow, relationType, mappingTable, mappingColumnValues) {\n  var rte = this.geoPackage.getRelatedTablesExtension();\n  var baseTableName = userRow.table.table_name;\n  var relatedTableName = relatedRow.table.table_name;\n  var relationship = rte.getRelationshipBuilder()\n  .setBaseTableName(baseTableName)\n  .setRelatedTableName(relatedTableName)\n  .setRelationType(relationType);\n\n  var mappingTableName;\n  if (!mappingTable || typeof mappingTable === 'string') {\n    var mappingTable = mappingTable || baseTableName + '_' + relatedTableName;\n    relationship.setMappingTableName(mappingTable);\n    mappingTableName = mappingTable;\n  } else {\n    relationship.setUserMappingTable(mappingTable);\n    mappingTableName = mappingTable.table_name;\n  }\n\n  return rte.addRelationship(relationship)\n  .then(function() {\n    var userMappingDao = rte.getMappingDao(mappingTableName);\n    var userMappingRow = userMappingDao.newRow();\n    userMappingRow.setBaseId(userRow.getId());\n    userMappingRow.setRelatedId(relatedRow.getId());\n    for (var column in mappingColumnValues) {\n      userMappingRow.setValueWithColumnName(column, mappingColumnValues[column]);\n    }\n    userMappingDao.create(userMappingRow);\n  });\n}\n\n/**\n * Links a user row to a feature row\n * @param  {module:user/userRow~UserRow} userRow             user row\n * @param  {module:features/user/featureRow~FeatureRow} featureRow          feature row\n * @param  {string|module:extension/relatedTables~UserMappingTable} [mappingTable]        mapping table\n * @param  {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values\n * @return {Promise}\n */\nUserDao.prototype.linkFeatureRow = function(userRow, featureRow, mappingTable, mappingColumnValues) {\n  return this.linkRelatedRow(userRow, featureRow, RelationType.FEATURES, mappingTable, mappingColumnValues);\n}\n\n/**\n * Links a user row to a media row\n * @param  {module:user/userRow~UserRow} userRow             user row\n * @param  {module:extension/relatedTables~MediaRow} mediaRow          media row\n * @param  {string|module:extension/relatedTables~UserMappingTable} [mappingTable]        mapping table\n * @param  {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values\n * @return {Promise}\n */\nUserDao.prototype.linkMediaRow = function(userRow, mediaRow, mappingTable, mappingColumnValues) {\n  return this.linkRelatedRow(userRow, mediaRow, RelationType.MEDIA, mappingTable, mappingColumnValues);\n}\n\n/**\n * Links a user row to a simpleAttributes row\n * @param  {module:user/userRow~UserRow} userRow             user row\n * @param  {module:extension/relatedTables~SimpleAttributesRow} simpleAttributesRow          simple attributes row\n * @param  {string|module:extension/relatedTables~UserMappingTable} [mappingTable]        mapping table\n * @param  {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values\n * @return {Promise}\n */\nUserDao.prototype.linkSimpleAttributesRow = function(userRow, simpleAttrbuteRow, mappingTable, mappingColumnValues) {\n  return this.linkRelatedRow(userRow, simpleAttrbuteRow, RelationType.SIMPLE_ATTRIBUTES, mappingTable, mappingColumnValues);\n}\n\n/**\n * Get all media rows that are linked to this user row\n * @param  {module:user/userRow~UserRow} userRow user row\n * @return {module:extension/relatedTables~MediaRow[]}\n */\nUserDao.prototype.getLinkedMedia = function(userRow) {\n  var mediaRelations = this.getMediaRelations();\n  var rte = this.geoPackage.getRelatedTablesExtension();\n  var linkedMedia = [];\n  for (var i = 0; i < mediaRelations.length; i++) {\n    var mediaRelation = mediaRelations[i];\n    var mediaDao = rte.getMediaDao(mediaRelation);\n    var userMappingDao = rte.getMappingDao(mediaRelation.mapping_table_name);\n    var mappings = userMappingDao.queryByBaseId(userRow.getId());\n    for (var m = 0; m < mappings.length; m++) {\n      var relatedId = mappings[m].related_id;\n      linkedMedia.push(mediaDao.queryForId(relatedId));\n    }\n  }\n  return linkedMedia;\n}\n\n/**\n * Get all simple attribute rows that are linked to this user row\n * @param  {module:user/userRow~UserRow} userRow user row\n * @return {module:extension/relatedTables~SimpleAttributeRow[]}\n */\nUserDao.prototype.getLinkedSimpleAttributes = function(userRow) {\n  var simpleRelations = this.getSimpleAttributesRelations();\n  var rte = this.geoPackage.getRelatedTablesExtension();\n  var linkedSimpleAttributes = [];\n  for (var i = 0; i < simpleRelations.length; i++) {\n    var simpleRelation = simpleRelations[i];\n    var simpleDao = rte.getSimpleAttributesDao(simpleRelation);\n    var userMappingDao = rte.getMappingDao(simpleRelation.mapping_table_name);\n    var mappings = userMappingDao.queryByBaseId(userRow.getId());\n    for (var m = 0; m < mappings.length; m++) {\n      var relatedId = mappings[m].related_id;\n      linkedSimpleAttributes.push(simpleDao.queryForId(relatedId));\n    }\n  }\n  return linkedSimpleAttributes;\n}\n\n/**\n * Get all feature rows that are linked to this user row\n * @param  {module:user/userRow~UserRow} userRow user row\n * @return {module:features/user/featureRow~FeatureRow[]}\n */\nUserDao.prototype.getLinkedFeatures = function(userRow) {\n  var featureRelations = this.getFeatureRelations();\n  var rte = this.geoPackage.getRelatedTablesExtension();\n  var linkedFeatures = [];\n  for (var i = 0; i < featureRelations.length; i++) {\n    var featureRelation = featureRelations[i];\n    var featureDao = this.geoPackage.getFeatureDao(featureRelation.base_table_name);\n    var userMappingDao = rte.getMappingDao(featureRelation.mapping_table_name);\n    var mappings = userMappingDao.queryByBaseId(userRow.getId());\n    for (var m = 0; m < mappings.length; m++) {\n      var relatedId = mappings[m].related_id;\n      linkedFeatures.push(featureDao.queryForId(relatedId));\n    }\n  }\n  return linkedFeatures;\n}\n\n/**\n * Get all simple attribute relations to this table\n * @return {Object[]}\n */\nUserDao.prototype.getSimpleAttributesRelations = function() {\n  return this.getRelationsWithName(SimpleAttributesTable.RELATION_TYPE.name);\n}\n\n/**\n * Get all feature relations to this table\n * @return {Object[]}\n */\nUserDao.prototype.getFeatureRelations = function() {\n  return this.getRelationsWithName(RelationType.FEATURES.name);\n}\n\n/**\n * Get all media relations to this table\n * @return {Object[]}\n */\nUserDao.prototype.getMediaRelations = function() {\n  return this.getRelationsWithName(MediaTable.RELATION_TYPE.name);\n}\n\n/**\n * Get all relations to this table with the specified name\n * @param {string} name\n * @return {Object[]}\n */\nUserDao.prototype.getRelationsWithName = function(name) {\n  return this.geoPackage.getExtendedRelationDao().getBaseTableRelationsWithName(this.table_name, name);\n}\n\n/**\n * Get all relations to this table\n * @return {Object[]}\n */\nUserDao.prototype.getRelations = function() {\n  return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(this.table_name);\n}\n\n/**\n * Gets the rows in this table by id\n * @param  {Number[]} ids ids to query for\n * @return {Object[]}\n */\nUserDao.prototype.getRows = function(ids) {\n  var rows = [];\n  for (var i = 0; i < ids.length; i++) {\n    var row = this.queryForId(ids[i]);\n    if (row) {\n      rows.push(row);\n    }\n  }\n  return rows;\n}\n\n/**\n *  Get the approximate zoom level of where the bounding box of the user data fits into the world\n *\n *  @return zoom level\n */\nUserDao.prototype.getZoomLevel = function () {\n  return 0;\n  // if(self.projection == nil){\n  //     [NSException raise:@\"No Projection\" format:@\"No projection was set which is required to determine the zoom level\"];\n  // }\n  // GPKGBoundingBox * boundingBox = [self getBoundingBox];\n  // if([self.projection.epsg intValue] == PROJ_EPSG_WORLD_GEODETIC_SYSTEM){\n  //     boundingBox = [GPKGTileBoundingBoxUtils boundWgs84BoundingBoxWithWebMercatorLimits:boundingBox];\n  // }\n  // GPKGProjectionTransform * webMercatorTransform = [[GPKGProjectionTransform alloc] initWithFromProjection:self.projection andToEpsg:PROJ_EPSG_WEB_MERCATOR];\n  // GPKGBoundingBox * webMercatorBoundingBox = [webMercatorTransform transformWithBoundingBox:boundingBox];\n  // int zoomLevel = [GPKGTileBoundingBoxUtils getZoomLevelWithWebMercatorBoundingBox:webMercatorBoundingBox];\n  // return zoomLevel;\n};\n\n/**\n * Get count of all rows in this table\n * @return {Number}\n */\nUserDao.prototype.getCount = function () {\n  return this.connection.count(this.table_name);\n};\n\nmodule.exports = UserDao;\n\n},{\"../dao/dao\":11,\"../extension/relatedTables/mediaTable\":35,\"../extension/relatedTables/relationType\":36,\"../extension/relatedTables/simpleAttributesTable\":39,\"./userRow\":107,\"./userTableReader\":109,\"util\":343}],107:[function(require,module,exports){\n(function (Buffer){\n/**\n * UserRow module.\n * @module user/userRow\n */\n\nvar DataTypes = require('../db/dataTypes');\n\n/**\n * User Row containing the values from a single result row\n * @class UserRow\n * @param  {UserTable} table       user table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {Array} values      values\n */\nvar UserRow = function(table, columnTypes, values) {\n  /**\n   * User table\n   * @type {UserTable}\n   */\n  this.table = table;\n  /**\n   * Column types of this row, based upon the data values\n   * @type {Object}\n   */\n  this.columnTypes = columnTypes;\n  /**\n   * Array of row values\n   * @type {Object}\n   */\n  this.values = values;\n\n  if (!this.columnTypes) {\n    var columnCount = this.table.columnCount();\n    this.columnTypes = {};\n    this.values = {};\n    for (var i = 0; i < columnCount; i++) {\n      this.columnTypes[this.table.columnNames[i]] = this.table.columns[i].dataType;\n      this.values[this.table.columnNames[i]] = this.table.columns[i].defaultValue;\n    }\n  }\n\n}\n\nmodule.exports = UserRow;\n\n/**\n * Get the column count\n * @return {number} column count\n */\nUserRow.prototype.columnCount = function () {\n  return this.table.columnCount();\n};\n\n/**\n * Get the column names\n * @return {Array} column names\n */\nUserRow.prototype.getColumnNames = function () {\n  return this.table.columnNames;\n};\n\n/**\n * Get the column name at the index\n * @param  {Number} index index\n * @return {string}       column name\n */\nUserRow.prototype.getColumnNameWithIndex = function (index) {\n  return this.table.getColumnNameWithIndex(index);\n};\n\n/**\n * Get the column index of the column name\n * @param  {string} columnName column name\n * @return {Number}            column index\n */\nUserRow.prototype.getColumnIndexWithColumnName = function (columnName) {\n  return this.table.getColumnIndex(columnName);\n};\n\n/**\n * Get the value at the index\n * @param  {Number} index index\n * @return {object}       value\n */\nUserRow.prototype.getValueWithIndex = function (index) {\n  var value = this.values[this.getColumnNameWithIndex(index)];\n  if (value !== undefined) {\n    value = this.toObjectValue(index, value);\n  }\n  return value;\n};\n\n/**\n * Get the value of the column name\n * @param  {string} columnName column name\n * @return {Object}            value\n */\nUserRow.prototype.getValueWithColumnName = function (columnName) {\n  var value = this.values[columnName];\n  var dataType = this.getRowColumnTypeWithColumnName(columnName);\n  if (value === undefined || value === null) return value;\n\n  if (dataType === DataTypes.GPKGDataType.BOOLEAN) {\n    return value === 1 ? true : false;\n  } else if (dataType === DataTypes.GPKGDataType.BLOB) {\n    return Buffer.from(value);\n  }\n  return value;\n};\n\nUserRow.prototype.toObjectValue = function (index, value) {\n  var objectValue = value;\n  var column = this.getColumnWithIndex(index);\n  if (column.dataType === DataTypes.GPKGDataType.BOOLEAN && value) {\n    return value === 1 ? true : false;\n  }\n  return objectValue;\n};\n\nUserRow.prototype.toDatabaseValue = function(columnName) {\n  var column = this.getColumnWithColumnName(columnName);\n  var value = this.getValueWithColumnName(columnName);\n  if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) {\n    return value === true ? 1 : 0;\n  }\n\n  return value;\n}\n\n/**\n * Get the row column type at the index\n * @param  {Number} index index\n * @return {Number}       row column type\n */\nUserRow.prototype.getRowColumnTypeWithIndex = function (index) {\n  return this.columnTypes[this.getColumnNameWithIndex(index)];\n};\n\n/**\n * Get the row column type of the column name\n * @param  {string} columnName column name\n * @return {Number}            row column type\n */\nUserRow.prototype.getRowColumnTypeWithColumnName = function (columnName) {\n  return this.columnTypes[columnName];\n};\n\n/**\n * Get the column at the index\n * @param  {Number} index index\n * @return {UserColumn}       column\n */\nUserRow.prototype.getColumnWithIndex = function (index) {\n  return this.table.getColumnWithIndex(index);\n};\n\n/**\n * Get the column of the column name\n * @param  {string} columnName column name\n * @return {UserColumn}            column\n */\nUserRow.prototype.getColumnWithColumnName = function (columnName) {\n  return this.table.getColumnWithColumnName(columnName);\n};\n\n/**\n * Get the id value, which is the value of the primary key\n * @return {Number} id value\n */\nUserRow.prototype.getId = function () {\n  if (this.getPkColumn()) {\n    return this.getValueWithColumnName(this.getPkColumn().name);\n  }\n};\n\n/**\n * Get the primary key column Index\n * @return {Number} pk index\n */\nUserRow.prototype.getPkColumnIndex = function () {\n  return this.table.pkIndex;\n};\n\n/**\n * Get the primary key column\n * @return {UserColumn} pk column\n */\nUserRow.prototype.getPkColumn = function () {\n  return this.table.getPkColumn();\n};\n\n/**\n * Set the value at the index\n * @param {Number} index index\n * @param {object} value value\n */\nUserRow.prototype.setValueWithIndex = function (index, value) {\n  if (index === this.table.pkIndex) {\n    throw new Error('Cannot update the primary key of the row.  Table Name: ' + this.table.tableName + ', Index: ' + index + ', Name: ' + this.table.getPkColumn().name);\n  }\n  this.setValueWithColumnName(this.getColumnNameWithIndex(index), value);\n};\n\n/**\n * Set the value at the index without validation\n * @param {Number} index index\n * @param {Object} value value\n */\nUserRow.prototype.setValueNoValidationWithIndex = function (index, value) {\n  this.values[this.getColumnNameWithIndex(index)] = value;\n};\n\n/**\n * Set the value of the column name\n * @param {string} columnName column name\n * @param {Object} value      value\n */\nUserRow.prototype.setValueWithColumnName = function (columnName, value) {\n  var dataType = this.getRowColumnTypeWithColumnName(columnName);\n  if (dataType === DataTypes.GPKGDataType.BOOLEAN) {\n    value === true ? this.values[columnName] = 1 : this.values[columnName] = 0;\n  } else if (dataType === DataTypes.GPKGDataType.DATE) {\n    this.values[columnName] = value.toISOString().slice(0,10);\n  } else if (dataType === DataTypes.GPKGDataType.DATETIME) {\n    this.values[columnName] = value.toISOString();\n  } else {\n    this.values[columnName] = value;\n  }\n};\n\nUserRow.prototype.hasIdColumn = function() {\n  return this.table.pkIndex !== undefined;\n}\n\nUserRow.prototype.hasId = function() {\n  var hasId = false;\n  if (this.hasIdColumn()) {\n    var objectValue = this.getValueWithIndex(this.table.pkIndex);\n    hasId = objectValue !== null && objectValue !== undefined && typeof objectValue === 'number';\n  }\n  return hasId;\n}\n\n/**\n * Set the primary key id value\n * @param {Number} id id\n */\nUserRow.prototype.setId = function (id) {\n  this.values[this.table.getPkColumn().name] = id;\n};\n\n/**\n * Clears the id so the row can be used as part of an insert or create\n */\nUserRow.prototype.resetId = function () {\n  this.values[this.table.getPkColumn().name] = undefined;\n};\n\n/**\n * Validate the value and its actual value types against eh column data type class\n * @param  {UserColumn} column     column\n * @param  {Object} value      value\n * @param  {Array} valueTypes value types\n */\nUserRow.prototype.validateValueWithColumn = function (column, value, valueTypes) {\n  // TODO implement validation\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"../db/dataTypes\":14,\"buffer\":182}],108:[function(require,module,exports){\n/**\n * @module user/userTable\n */\n\n/**\n * `UserTable` models optional [user data tables](https://www.geopackage.org/spec121/index.html#_options)\n * in a [GeoPackage]{@link module:geoPackage~GeoPackage}.\n *\n * @class\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns user columns\n */\nvar UserTable = function(tableName, columns) {\n  /**\n   * The name of the table\n   * @type {string}\n   */\n  this.table_name = tableName;\n\n  // Sort the columns by index\n  columns.sort(function(a, b) {\n    return a.index - b.index;\n  });\n\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    if (column.index != i) {\n      throw new Error('Column has wrong index of ' + column.index + ', found at index: ' + i + ', Table Name: ' + this.table_name);\n    }\n  }\n\n  var pk = undefined;\n  var tempColumnNames = new Array();\n  var tempNameToIndex = {};\n\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    var index = column.index;\n    if (column.primaryKey) {\n      if (pk !== undefined) {\n        throw new Error('More than one primary key column was found for table \\'' + this.table_name + '\\'. Index ' + pk + ' and ' + index);\n      }\n      pk = index;\n    }\n    tempColumnNames.push(column.name);\n    tempNameToIndex[column.name] = index;\n  }\n\n  /**\n   * Array of columns\n   * @type {module:user/userColumn~UserColumn[]}\n   */\n  this.columns = columns;\n\n  /**\n   * Array of column names\n   * @type {string[]}\n   */\n  this.columnNames = tempColumnNames;\n\n  /**\n   * Mapping between column names and their index\n   * @type {Object}\n   */\n  this.nameToIndex = tempNameToIndex;\n  this.uniqueConstraints = [];\n\n  /**\n   * Primary key column Index\n   * @type {Number}\n   */\n  this.pkIndex = pk;\n}\n\n/**\n * Check for duplicate column names\n * @param  {Number} index         index\n * @param  {Number} previousIndex previous index\n * @param  {string} column        column\n * @throws Throws an error if previous index is not undefined\n */\nUserTable.prototype.duplicateCheck = function (index, previousIndex, column) {\n  if(previousIndex !== undefined) {\n    throw new Error('More than one ' + column + ' column was found for table \\'' + this.table_name + '\\'. Index ' + previousIndex + ' and ' + index);\n  }\n};\n\n/**\n * Check for the expected data type\n * @param  {module:db/dataTypes~GPKGDataType} expected expected data type\n * @param  {module:user/userColumn~UserColumn} column   column\n * @throws Will throw an error if the actual column type does not match the expected column type\n */\nUserTable.prototype.typeCheck = function (expected, column) {\n  var actual = column.dataType;\n  if (!actual || actual !== expected) {\n    throw new Error('Unexpected ' + column.name + ' column data type was found for table \\'' + this.table_name + '\\', expected: ' + DataTypes.name(expected) + ', actual: ' + column.dataType);\n  }\n};\n\n/**\n * Check for missing columns\n * @param  {Number} index  index\n * @param  {string} column column\n * @throws Will throw an error if no column is found\n */\nUserTable.prototype.missingCheck = function (index, column) {\n  if (index === undefined || index === null) {\n    throw new Error('No ' + column + ' column was found for table \\'' + this.table_name +'\\'');\n  }\n};\n\n/**\n * Get the column index of the column name\n * @param  {string} columnName column name\n * @return {Number} the column index\n * @throws Will throw an error if the column is not found in the table\n */\nUserTable.prototype.getColumnIndex = function (columnName) {\n  var index = this.nameToIndex[columnName];\n  if (index === undefined || index === null) {\n    throw new Error('Column does not exist in table \\'' + this.table_name + '\\', column: ' + columnName);\n  }\n  return index;\n};\n\n/**\n * Check if the table has the column\n * @param  {string} columnName name of the column\n * @return {Boolean}            true if the column exists in the table\n */\nUserTable.prototype.hasColumn = function(columnName) {\n  try {\n    this.getColumnIndex(columnName);\n    return true;\n  } catch (e) {\n    return false;\n  }\n  return false;\n}\n\n/**\n * Get the column name from the index\n * @param  {Number} index index\n * @return {string} the column name\n */\nUserTable.prototype.getColumnNameWithIndex = function (index) {\n  return this.columnNames[index];\n};\n\n/**\n * Get the column from the index\n * @param  {Number} index index\n * @return {module:user/userColumn~UserColumn} column at the index\n */\nUserTable.prototype.getColumnWithIndex = function (index) {\n  return this.columns[index];\n};\n\n/**\n * Get column with the column name\n * @param  {string} columnName column name\n * @return {module:user/userColumn~UserColumn}            column at the index\n */\nUserTable.prototype.getColumnWithColumnName = function (columnName) {\n  return this.getColumnWithIndex(this.getColumnIndex(columnName));\n};\n\n/**\n * Get the column count\n * @return {Number} the count of the columns\n */\nUserTable.prototype.columnCount = function () {\n  return this.columns.length;\n};\n\n/**\n * Get the primary key column\n * @return {module:user/userColumn~UserColumn} the primary key column\n */\nUserTable.prototype.getPkColumn = function () {\n  return this.columns[this.pkIndex];\n};\n\n/**\n * Get the primary key id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserTable.prototype.getIdColumn = function() {\n  return this.getPkColumn();\n}\n\nUserTable.prototype.addUniqueConstraint = function (uniqueConstraint) {\n  this.uniqueConstraints.push(uniqueConstraint);\n};\n\nUserTable.FEATURE_TABLE = 'FEATURE';\nUserTable.TILE_TABLE = 'TILE';\n\nmodule.exports = UserTable;\n\n},{}],109:[function(require,module,exports){\n/**\n * userTableReader module.\n * @module user/userTableReader\n */\n\nvar UserColumn = require('./userColumn')\n  , UserTable = require('./userTable')\n  , DataTypes = require('../db/dataTypes');\n\n/**\n * @class\n * @param  {string} tableName       name of the table\n * @param  {string[]} requiredColumns array of required column names\n */\nvar UserTableReader = function(tableName, requiredColumns) {\n  this.table_name = tableName;\n  this.requiredColumns = requiredColumns;\n}\n\nvar GPKG_UTR_CID = \"cid\";\nvar GPKG_UTR_NAME = \"name\";\nvar GPKG_UTR_TYPE = \"type\";\nvar GPKG_UTR_NOT_NULL = \"notnull\";\nvar GPKG_UTR_PK = \"pk\";\nvar GPKG_UTR_DFLT_VALUE = \"dflt_value\";\n\n/**\n * Read the table\n * @param  {object} db db connection\n * @return {module:user/userTable~UserTable}\n */\nUserTableReader.prototype.readTable = function (db) {\n  var columnList = [];\n  var results = db.all('PRAGMA table_info(\\''+this.table_name+'\\')');\n  for (var i =0; i < results.length; i++) {\n    var result = results[i];\n    var index = result[GPKG_UTR_CID];\n    var name = result[GPKG_UTR_NAME];\n    var type = result[GPKG_UTR_TYPE];\n    var notNull = result[GPKG_UTR_NOT_NULL] === 1;\n    var primarykey = result[GPKG_UTR_PK] === 1;\n    var max = undefined;\n    if (type && type.lastIndexOf(')') === type.length-1) {\n      var maxStart = type.indexOf('(');\n      if (maxStart > -1) {\n        var maxString = type.substring(maxStart + 1, type.length - 1);\n        if (maxString !== '') {\n          max = parseInt(maxString);\n          type = type.substring(0, maxStart);\n        }\n      }\n    }\n    var defaultValue = undefined;\n    if (result[GPKG_UTR_DFLT_VALUE]) {\n      defaultValue = result[GPKG_UTR_DFLT_VALUE].replace(/\\\\'/g, '');\n    }\n    var column = this.createColumnWithResults(result, index, name, type, max, notNull, defaultValue, primarykey);\n\n    columnList.push(column);\n  }\n\n  if (columnList.length === 0) {\n    throw new Error('Table does not exist: ' + this.table_name);\n  }\n  return this.createTable(this.table_name, columnList, this.requiredColumns);\n};\n\n/**\n * Creates a user column\n * @param {Object} result\n * @param {Number} index        column index\n * @param {string} name         column name\n * @param {module:db/dataTypes~GPKGDataType} type         data type\n * @param {Number} max max value\n * @param {Boolean} notNull      not null\n * @param {Object} defaultValue default value or nil\n * @param {Boolean} primaryKey primary key\n * @return {module:user/custom~UserCustomColumn}\n */\nUserTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) {\n\n  var dataType = DataTypes.fromName(type);\n  return new UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);\n}\n\n/**\n * Create the table\n * @param  {string} tableName table name\n * @param  {module:dao/columnValues~ColumnValues[]} columns   columns\n * @return {module:user/userTable~UserTable}           the user table\n */\nUserTableReader.prototype.createTable = function (tableName, columns) {\n  return new UserTable(tableName, columns);\n};\n\nmodule.exports = UserTableReader;\n\n},{\"../db/dataTypes\":14,\"./userColumn\":105,\"./userTable\":108}],110:[function(require,module,exports){\n/**\n * GeoPackageValidate module.\n * @module validate/geoPackageValidate\n *\n */\n\nvar path = require('path')\n  , SpatialReferenceSystem = require('../core/srs').SpatialReferenceSystem\n  , Contents = require('../core/contents').Contents\n  , GeoPackageConstants = require('../geoPackageConstants');\n\n/**\n * Check the file extension to see if it is a GeoPackage\n * @param  {string}   filePath Absolute path to the GeoPackage to create\n * @return {boolean} true if GeoPackage extension\n */\nexports.hasGeoPackageExtension = function(filePath) {\n  var extension = path.extname(filePath);\n  return extension && extension !== ''\n    && (extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENSION.toLowerCase()\n      || extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION.toLowerCase());\n}\n\n/**\n * Validate the extension file as a GeoPackage\n * @param  {string}   filePath Absolute path to the GeoPackage to create\n * @return {Error}    error if the extension is not valid\n */\nexports.validateGeoPackageExtension = function(filePath) {\n  if (!exports.hasGeoPackageExtension(filePath)) {\n    return new Error(\"GeoPackage database file '\" + filePath\n  \t\t\t\t\t+ \"' does not have a valid extension of '\"\n  \t\t\t\t\t+ GeoPackageConstants.GEOPACKAGE_EXTENSION + \"' or '\"\n  \t\t\t\t\t+ GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION + \"'\");\n  }\n}\n\n/**\n * Check the GeoPackage for the minimum required tables\n * @param  {Object}   geoPackage GeoPackage to check\n * @param {module:validate/geoPackageValidate~validationCallback} callback - The validation callback\n */\nexports.hasMinimumTables = function(geoPackage) {\n  var srsExists = geoPackage.getSpatialReferenceSystemDao().isTableExists();\n  var contentsExists = geoPackage.getContentsDao().isTableExists();\n  return (srsExists && contentsExists);\n}\n\n/**\n * Validation callback is passed an error if the validation failed.\n * @callback module:validate/geoPackageValidate~validationCallback\n * @param {Error} null if no error, otherwise describes the error\n */\n\n},{\"../core/contents\":8,\"../core/srs\":9,\"../geoPackageConstants\":71,\"path\":276}],111:[function(require,module,exports){\n/**\n * WKB module.\n * @module wkb\n */\n\nvar wkx = require('wkx');\n\nvar wktToEnum = {};\nwktToEnum[wkx.Types.wkt.Point] = wkx.Types.wkb.Point;\nwktToEnum[wkx.Types.wkt.LineString] = wkx.Types.wkb.LineString;\nwktToEnum[wkx.Types.wkt.Polygon] = wkx.Types.wkb.Polygon;\nwktToEnum[wkx.Types.wkt.MultiPoint] = wkx.Types.wkb.MultiPoint;\nwktToEnum[wkx.Types.wkt.MultiLineString] = wkx.Types.wkb.MultiLineString;\nwktToEnum[wkx.Types.wkt.MultiPolygon] = wkx.Types.wkb.MultiPolygon;\nwktToEnum[wkx.Types.wkt.GeometryCollection] = wkx.Types.wkb.GeometryCollection;\n\n/**\n * number from name\n * @param  {string} name name\n * @return {Number}      number corresponding to the wkb name\n */\nmodule.exports.fromName = function(name) {\n  name = name.toUpperCase();\n  if (name === 'GEOMETRY') {\n    return wkx.Types.wkb.GeometryCollection;\n  }\n  return wktToEnum[name];\n}\n\n},{\"wkx\":360}],112:[function(require,module,exports){\n'use strict';\n\nmodule.exports = Point;\n\n/**\n * A standalone point geometry with useful accessor, comparison, and\n * modification methods.\n *\n * @class Point\n * @param {Number} x the x-coordinate. this could be longitude or screen\n * pixels, or any other sort of unit.\n * @param {Number} y the y-coordinate. this could be latitude or screen\n * pixels, or any other sort of unit.\n * @example\n * var point = new Point(-77, 38);\n */\nfunction Point(x, y) {\n    this.x = x;\n    this.y = y;\n}\n\nPoint.prototype = {\n\n    /**\n     * Clone this point, returning a new point that can be modified\n     * without affecting the old one.\n     * @return {Point} the clone\n     */\n    clone: function() { return new Point(this.x, this.y); },\n\n    /**\n     * Add this point's x & y coordinates to another point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    add:     function(p) { return this.clone()._add(p); },\n\n    /**\n     * Subtract this point's x & y coordinates to from point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    sub:     function(p) { return this.clone()._sub(p); },\n\n    /**\n     * Multiply this point's x & y coordinates by point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    multByPoint:    function(p) { return this.clone()._multByPoint(p); },\n\n    /**\n     * Divide this point's x & y coordinates by point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    divByPoint:     function(p) { return this.clone()._divByPoint(p); },\n\n    /**\n     * Multiply this point's x & y coordinates by a factor,\n     * yielding a new point.\n     * @param {Point} k factor\n     * @return {Point} output point\n     */\n    mult:    function(k) { return this.clone()._mult(k); },\n\n    /**\n     * Divide this point's x & y coordinates by a factor,\n     * yielding a new point.\n     * @param {Point} k factor\n     * @return {Point} output point\n     */\n    div:     function(k) { return this.clone()._div(k); },\n\n    /**\n     * Rotate this point around the 0, 0 origin by an angle a,\n     * given in radians\n     * @param {Number} a angle to rotate around, in radians\n     * @return {Point} output point\n     */\n    rotate:  function(a) { return this.clone()._rotate(a); },\n\n    /**\n     * Rotate this point around p point by an angle a,\n     * given in radians\n     * @param {Number} a angle to rotate around, in radians\n     * @param {Point} p Point to rotate around\n     * @return {Point} output point\n     */\n    rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },\n\n    /**\n     * Multiply this point by a 4x1 transformation matrix\n     * @param {Array<Number>} m transformation matrix\n     * @return {Point} output point\n     */\n    matMult: function(m) { return this.clone()._matMult(m); },\n\n    /**\n     * Calculate this point but as a unit vector from 0, 0, meaning\n     * that the distance from the resulting point to the 0, 0\n     * coordinate will be equal to 1 and the angle from the resulting\n     * point to the 0, 0 coordinate will be the same as before.\n     * @return {Point} unit vector point\n     */\n    unit:    function() { return this.clone()._unit(); },\n\n    /**\n     * Compute a perpendicular point, where the new y coordinate\n     * is the old x coordinate and the new x coordinate is the old y\n     * coordinate multiplied by -1\n     * @return {Point} perpendicular point\n     */\n    perp:    function() { return this.clone()._perp(); },\n\n    /**\n     * Return a version of this point with the x & y coordinates\n     * rounded to integers.\n     * @return {Point} rounded point\n     */\n    round:   function() { return this.clone()._round(); },\n\n    /**\n     * Return the magitude of this point: this is the Euclidean\n     * distance from the 0, 0 coordinate to this point's x and y\n     * coordinates.\n     * @return {Number} magnitude\n     */\n    mag: function() {\n        return Math.sqrt(this.x * this.x + this.y * this.y);\n    },\n\n    /**\n     * Judge whether this point is equal to another point, returning\n     * true or false.\n     * @param {Point} other the other point\n     * @return {boolean} whether the points are equal\n     */\n    equals: function(other) {\n        return this.x === other.x &&\n               this.y === other.y;\n    },\n\n    /**\n     * Calculate the distance from this point to another point\n     * @param {Point} p the other point\n     * @return {Number} distance\n     */\n    dist: function(p) {\n        return Math.sqrt(this.distSqr(p));\n    },\n\n    /**\n     * Calculate the distance from this point to another point,\n     * without the square root step. Useful if you're comparing\n     * relative distances.\n     * @param {Point} p the other point\n     * @return {Number} distance\n     */\n    distSqr: function(p) {\n        var dx = p.x - this.x,\n            dy = p.y - this.y;\n        return dx * dx + dy * dy;\n    },\n\n    /**\n     * Get the angle from the 0, 0 coordinate to this point, in radians\n     * coordinates.\n     * @return {Number} angle\n     */\n    angle: function() {\n        return Math.atan2(this.y, this.x);\n    },\n\n    /**\n     * Get the angle from this point to another point, in radians\n     * @param {Point} b the other point\n     * @return {Number} angle\n     */\n    angleTo: function(b) {\n        return Math.atan2(this.y - b.y, this.x - b.x);\n    },\n\n    /**\n     * Get the angle between this point and another point, in radians\n     * @param {Point} b the other point\n     * @return {Number} angle\n     */\n    angleWith: function(b) {\n        return this.angleWithSep(b.x, b.y);\n    },\n\n    /*\n     * Find the angle of the two vectors, solving the formula for\n     * the cross product a x b = |a||b|sin(θ) for θ.\n     * @param {Number} x the x-coordinate\n     * @param {Number} y the y-coordinate\n     * @return {Number} the angle in radians\n     */\n    angleWithSep: function(x, y) {\n        return Math.atan2(\n            this.x * y - this.y * x,\n            this.x * x + this.y * y);\n    },\n\n    _matMult: function(m) {\n        var x = m[0] * this.x + m[1] * this.y,\n            y = m[2] * this.x + m[3] * this.y;\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _add: function(p) {\n        this.x += p.x;\n        this.y += p.y;\n        return this;\n    },\n\n    _sub: function(p) {\n        this.x -= p.x;\n        this.y -= p.y;\n        return this;\n    },\n\n    _mult: function(k) {\n        this.x *= k;\n        this.y *= k;\n        return this;\n    },\n\n    _div: function(k) {\n        this.x /= k;\n        this.y /= k;\n        return this;\n    },\n\n    _multByPoint: function(p) {\n        this.x *= p.x;\n        this.y *= p.y;\n        return this;\n    },\n\n    _divByPoint: function(p) {\n        this.x /= p.x;\n        this.y /= p.y;\n        return this;\n    },\n\n    _unit: function() {\n        this._div(this.mag());\n        return this;\n    },\n\n    _perp: function() {\n        var y = this.y;\n        this.y = this.x;\n        this.x = -y;\n        return this;\n    },\n\n    _rotate: function(angle) {\n        var cos = Math.cos(angle),\n            sin = Math.sin(angle),\n            x = cos * this.x - sin * this.y,\n            y = sin * this.x + cos * this.y;\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _rotateAround: function(angle, p) {\n        var cos = Math.cos(angle),\n            sin = Math.sin(angle),\n            x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),\n            y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _round: function() {\n        this.x = Math.round(this.x);\n        this.y = Math.round(this.y);\n        return this;\n    }\n};\n\n/**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array<Number>|Point|*} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\nPoint.convert = function (a) {\n    if (a instanceof Point) {\n        return a;\n    }\n    if (Array.isArray(a)) {\n        return new Point(a[0], a[1]);\n    }\n    return a;\n};\n\n},{}],113:[function(require,module,exports){\nmodule.exports.VectorTile = require('./lib/vectortile.js');\nmodule.exports.VectorTileFeature = require('./lib/vectortilefeature.js');\nmodule.exports.VectorTileLayer = require('./lib/vectortilelayer.js');\n\n},{\"./lib/vectortile.js\":114,\"./lib/vectortilefeature.js\":115,\"./lib/vectortilelayer.js\":116}],114:[function(require,module,exports){\n'use strict';\n\nvar VectorTileLayer = require('./vectortilelayer');\n\nmodule.exports = VectorTile;\n\nfunction VectorTile(pbf, end) {\n    this.layers = pbf.readFields(readTile, {}, end);\n}\n\nfunction readTile(tag, layers, pbf) {\n    if (tag === 3) {\n        var layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);\n        if (layer.length) layers[layer.name] = layer;\n    }\n}\n\n\n},{\"./vectortilelayer\":116}],115:[function(require,module,exports){\n'use strict';\n\nvar Point = require('@mapbox/point-geometry');\n\nmodule.exports = VectorTileFeature;\n\nfunction VectorTileFeature(pbf, end, extent, keys, values) {\n    // Public\n    this.properties = {};\n    this.extent = extent;\n    this.type = 0;\n\n    // Private\n    this._pbf = pbf;\n    this._geometry = -1;\n    this._keys = keys;\n    this._values = values;\n\n    pbf.readFields(readFeature, this, end);\n}\n\nfunction readFeature(tag, feature, pbf) {\n    if (tag == 1) feature.id = pbf.readVarint();\n    else if (tag == 2) readTag(pbf, feature);\n    else if (tag == 3) feature.type = pbf.readVarint();\n    else if (tag == 4) feature._geometry = pbf.pos;\n}\n\nfunction readTag(pbf, feature) {\n    var end = pbf.readVarint() + pbf.pos;\n\n    while (pbf.pos < end) {\n        var key = feature._keys[pbf.readVarint()],\n            value = feature._values[pbf.readVarint()];\n        feature.properties[key] = value;\n    }\n}\n\nVectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nVectorTileFeature.prototype.loadGeometry = function() {\n    var pbf = this._pbf;\n    pbf.pos = this._geometry;\n\n    var end = pbf.readVarint() + pbf.pos,\n        cmd = 1,\n        length = 0,\n        x = 0,\n        y = 0,\n        lines = [],\n        line;\n\n    while (pbf.pos < end) {\n        if (length <= 0) {\n            var cmdLen = pbf.readVarint();\n            cmd = cmdLen & 0x7;\n            length = cmdLen >> 3;\n        }\n\n        length--;\n\n        if (cmd === 1 || cmd === 2) {\n            x += pbf.readSVarint();\n            y += pbf.readSVarint();\n\n            if (cmd === 1) { // moveTo\n                if (line) lines.push(line);\n                line = [];\n            }\n\n            line.push(new Point(x, y));\n\n        } else if (cmd === 7) {\n\n            // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n            if (line) {\n                line.push(line[0].clone()); // closePolygon\n            }\n\n        } else {\n            throw new Error('unknown command ' + cmd);\n        }\n    }\n\n    if (line) lines.push(line);\n\n    return lines;\n};\n\nVectorTileFeature.prototype.bbox = function() {\n    var pbf = this._pbf;\n    pbf.pos = this._geometry;\n\n    var end = pbf.readVarint() + pbf.pos,\n        cmd = 1,\n        length = 0,\n        x = 0,\n        y = 0,\n        x1 = Infinity,\n        x2 = -Infinity,\n        y1 = Infinity,\n        y2 = -Infinity;\n\n    while (pbf.pos < end) {\n        if (length <= 0) {\n            var cmdLen = pbf.readVarint();\n            cmd = cmdLen & 0x7;\n            length = cmdLen >> 3;\n        }\n\n        length--;\n\n        if (cmd === 1 || cmd === 2) {\n            x += pbf.readSVarint();\n            y += pbf.readSVarint();\n            if (x < x1) x1 = x;\n            if (x > x2) x2 = x;\n            if (y < y1) y1 = y;\n            if (y > y2) y2 = y;\n\n        } else if (cmd !== 7) {\n            throw new Error('unknown command ' + cmd);\n        }\n    }\n\n    return [x1, y1, x2, y2];\n};\n\nVectorTileFeature.prototype.toGeoJSON = function(x, y, z) {\n    var size = this.extent * Math.pow(2, z),\n        x0 = this.extent * x,\n        y0 = this.extent * y,\n        coords = this.loadGeometry(),\n        type = VectorTileFeature.types[this.type],\n        i, j;\n\n    function project(line) {\n        for (var j = 0; j < line.length; j++) {\n            var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;\n            line[j] = [\n                (p.x + x0) * 360 / size - 180,\n                360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90\n            ];\n        }\n    }\n\n    switch (this.type) {\n    case 1:\n        var points = [];\n        for (i = 0; i < coords.length; i++) {\n            points[i] = coords[i][0];\n        }\n        coords = points;\n        project(coords);\n        break;\n\n    case 2:\n        for (i = 0; i < coords.length; i++) {\n            project(coords[i]);\n        }\n        break;\n\n    case 3:\n        coords = classifyRings(coords);\n        for (i = 0; i < coords.length; i++) {\n            for (j = 0; j < coords[i].length; j++) {\n                project(coords[i][j]);\n            }\n        }\n        break;\n    }\n\n    if (coords.length === 1) {\n        coords = coords[0];\n    } else {\n        type = 'Multi' + type;\n    }\n\n    var result = {\n        type: \"Feature\",\n        geometry: {\n            type: type,\n            coordinates: coords\n        },\n        properties: this.properties\n    };\n\n    if ('id' in this) {\n        result.id = this.id;\n    }\n\n    return result;\n};\n\n// classifies an array of rings into polygons with outer rings and holes\n\nfunction classifyRings(rings) {\n    var len = rings.length;\n\n    if (len <= 1) return [rings];\n\n    var polygons = [],\n        polygon,\n        ccw;\n\n    for (var i = 0; i < len; i++) {\n        var area = signedArea(rings[i]);\n        if (area === 0) continue;\n\n        if (ccw === undefined) ccw = area < 0;\n\n        if (ccw === area < 0) {\n            if (polygon) polygons.push(polygon);\n            polygon = [rings[i]];\n\n        } else {\n            polygon.push(rings[i]);\n        }\n    }\n    if (polygon) polygons.push(polygon);\n\n    return polygons;\n}\n\nfunction signedArea(ring) {\n    var sum = 0;\n    for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {\n        p1 = ring[i];\n        p2 = ring[j];\n        sum += (p2.x - p1.x) * (p1.y + p2.y);\n    }\n    return sum;\n}\n\n},{\"@mapbox/point-geometry\":112}],116:[function(require,module,exports){\n'use strict';\n\nvar VectorTileFeature = require('./vectortilefeature.js');\n\nmodule.exports = VectorTileLayer;\n\nfunction VectorTileLayer(pbf, end) {\n    // Public\n    this.version = 1;\n    this.name = null;\n    this.extent = 4096;\n    this.length = 0;\n\n    // Private\n    this._pbf = pbf;\n    this._keys = [];\n    this._values = [];\n    this._features = [];\n\n    pbf.readFields(readLayer, this, end);\n\n    this.length = this._features.length;\n}\n\nfunction readLayer(tag, layer, pbf) {\n    if (tag === 15) layer.version = pbf.readVarint();\n    else if (tag === 1) layer.name = pbf.readString();\n    else if (tag === 5) layer.extent = pbf.readVarint();\n    else if (tag === 2) layer._features.push(pbf.pos);\n    else if (tag === 3) layer._keys.push(pbf.readString());\n    else if (tag === 4) layer._values.push(readValueMessage(pbf));\n}\n\nfunction readValueMessage(pbf) {\n    var value = null,\n        end = pbf.readVarint() + pbf.pos;\n\n    while (pbf.pos < end) {\n        var tag = pbf.readVarint() >> 3;\n\n        value = tag === 1 ? pbf.readString() :\n            tag === 2 ? pbf.readFloat() :\n            tag === 3 ? pbf.readDouble() :\n            tag === 4 ? pbf.readVarint64() :\n            tag === 5 ? pbf.readVarint() :\n            tag === 6 ? pbf.readSVarint() :\n            tag === 7 ? pbf.readBoolean() : null;\n    }\n\n    return value;\n}\n\n// return feature `i` from this layer as a `VectorTileFeature`\nVectorTileLayer.prototype.feature = function(i) {\n    if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');\n\n    this._pbf.pos = this._features[i];\n\n    var end = this._pbf.readVarint() + this._pbf.pos;\n    return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values);\n};\n\n},{\"./vectortilefeature.js\":115}],117:[function(require,module,exports){\nvar each = require('@turf/meta').coordEach;\n\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {(Feature|FeatureCollection)} geojson input features\n * @returns {Array<number>} bbox extent in [minX, minY, maxX, maxY] order\n * @addToMap features, bboxPolygon\n * @example\n * var pt1 = turf.point([114.175329, 22.2524])\n * var pt2 = turf.point([114.170007, 22.267969])\n * var pt3 = turf.point([114.200649, 22.274641])\n * var pt4 = turf.point([114.200649, 22.274641])\n * var pt5 = turf.point([114.186744, 22.265745])\n * var features = turf.featureCollection([pt1, pt2, pt3, pt4, pt5])\n *\n * var bbox = turf.bbox(features);\n *\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //=bbox\n *\n * //=bboxPolygon\n */\nmodule.exports = function (geojson) {\n    var bbox = [Infinity, Infinity, -Infinity, -Infinity];\n    each(geojson, function (coord) {\n        if (bbox[0] > coord[0]) bbox[0] = coord[0];\n        if (bbox[1] > coord[1]) bbox[1] = coord[1];\n        if (bbox[2] < coord[0]) bbox[2] = coord[0];\n        if (bbox[3] < coord[1]) bbox[3] = coord[1];\n    });\n    return bbox;\n};\n\n},{\"@turf/meta\":130}],118:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar invariant_1 = require(\"@turf/invariant\");\n// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule\n// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js\n// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n/**\n * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point\n * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.\n *\n * @name booleanPointInPolygon\n * @param {Coord} point input point\n * @param {Feature<Polygon|MultiPolygon>} polygon input polygon or multipolygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if\n * the point is inside the polygon otherwise false.\n * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon\n * @example\n * var pt = turf.point([-77, 44]);\n * var poly = turf.polygon([[\n *   [-81, 41],\n *   [-81, 47],\n *   [-72, 47],\n *   [-72, 41],\n *   [-81, 41]\n * ]]);\n *\n * turf.booleanPointInPolygon(pt, poly);\n * //= true\n */\nfunction booleanPointInPolygon(point, polygon, options) {\n    if (options === void 0) { options = {}; }\n    // validation\n    if (!point) {\n        throw new Error(\"point is required\");\n    }\n    if (!polygon) {\n        throw new Error(\"polygon is required\");\n    }\n    var pt = invariant_1.getCoord(point);\n    var geom = invariant_1.getGeom(polygon);\n    var type = geom.type;\n    var bbox = polygon.bbox;\n    var polys = geom.coordinates;\n    // Quick elimination if point is not inside bbox\n    if (bbox && inBBox(pt, bbox) === false) {\n        return false;\n    }\n    // normalize to multipolygon\n    if (type === \"Polygon\") {\n        polys = [polys];\n    }\n    var insidePoly = false;\n    for (var i = 0; i < polys.length && !insidePoly; i++) {\n        // check if it is in the outer ring first\n        if (inRing(pt, polys[i][0], options.ignoreBoundary)) {\n            var inHole = false;\n            var k = 1;\n            // check for the point in any of the holes\n            while (k < polys[i].length && !inHole) {\n                if (inRing(pt, polys[i][k], !options.ignoreBoundary)) {\n                    inHole = true;\n                }\n                k++;\n            }\n            if (!inHole) {\n                insidePoly = true;\n            }\n        }\n    }\n    return insidePoly;\n}\nexports.default = booleanPointInPolygon;\n/**\n * inRing\n *\n * @private\n * @param {Array<number>} pt [x,y]\n * @param {Array<Array<number>>} ring [[x,y], [x,y],..]\n * @param {boolean} ignoreBoundary ignoreBoundary\n * @returns {boolean} inRing\n */\nfunction inRing(pt, ring, ignoreBoundary) {\n    var isInside = false;\n    if (ring[0][0] === ring[ring.length - 1][0] && ring[0][1] === ring[ring.length - 1][1]) {\n        ring = ring.slice(0, ring.length - 1);\n    }\n    for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n        var xi = ring[i][0];\n        var yi = ring[i][1];\n        var xj = ring[j][0];\n        var yj = ring[j][1];\n        var onBoundary = (pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0) &&\n            ((xi - pt[0]) * (xj - pt[0]) <= 0) && ((yi - pt[1]) * (yj - pt[1]) <= 0);\n        if (onBoundary) {\n            return !ignoreBoundary;\n        }\n        var intersect = ((yi > pt[1]) !== (yj > pt[1])) &&\n            (pt[0] < (xj - xi) * (pt[1] - yi) / (yj - yi) + xi);\n        if (intersect) {\n            isInside = !isInside;\n        }\n    }\n    return isInside;\n}\n/**\n * inBBox\n *\n * @private\n * @param {Position} pt point [x,y]\n * @param {BBox} bbox BBox [west, south, east, north]\n * @returns {boolean} true/false if point is inside BBox\n */\nfunction inBBox(pt, bbox) {\n    return bbox[0] <= pt[0] &&\n        bbox[1] <= pt[1] &&\n        bbox[2] >= pt[0] &&\n        bbox[3] >= pt[1];\n}\n\n},{\"@turf/invariant\":125}],119:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Returns true if a point is on a line. Accepts a optional parameter to ignore the\n * start and end vertices of the linestring.\n *\n * @name booleanPointOnLine\n * @param {Coord} pt GeoJSON Point\n * @param {Feature<LineString>} line GeoJSON LineString\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreEndVertices=false] whether to ignore the start and end vertices.\n * @returns {boolean} true/false\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[-1, -1],[1, 1],[1.5, 2.2]]);\n * var isPointOnLine = turf.booleanPointOnLine(pt, line);\n * //=true\n */\nfunction booleanPointOnLine(pt, line, options) {\n    if (options === void 0) { options = {}; }\n    // Normalize inputs\n    var ptCoords = invariant_1.getCoord(pt);\n    var lineCoords = invariant_1.getCoords(line);\n    // Main\n    for (var i = 0; i < lineCoords.length - 1; i++) {\n        var ignoreBoundary = false;\n        if (options.ignoreEndVertices) {\n            if (i === 0) {\n                ignoreBoundary = \"start\";\n            }\n            if (i === lineCoords.length - 2) {\n                ignoreBoundary = \"end\";\n            }\n            if (i === 0 && i + 1 === lineCoords.length - 1) {\n                ignoreBoundary = \"both\";\n            }\n        }\n        if (isPointOnLineSegment(lineCoords[i], lineCoords[i + 1], ptCoords, ignoreBoundary)) {\n            return true;\n        }\n    }\n    return false;\n}\n// See http://stackoverflow.com/a/4833823/1979085\n/**\n * @private\n * @param {Position} lineSegmentStart coord pair of start of line\n * @param {Position} lineSegmentEnd coord pair of end of line\n * @param {Position} pt coord pair of point to check\n * @param {boolean|string} excludeBoundary whether the point is allowed to fall on the line ends.\n * If true which end to ignore.\n * @returns {boolean} true/false\n */\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt, excludeBoundary) {\n    var x = pt[0];\n    var y = pt[1];\n    var x1 = lineSegmentStart[0];\n    var y1 = lineSegmentStart[1];\n    var x2 = lineSegmentEnd[0];\n    var y2 = lineSegmentEnd[1];\n    var dxc = pt[0] - x1;\n    var dyc = pt[1] - y1;\n    var dxl = x2 - x1;\n    var dyl = y2 - y1;\n    var cross = dxc * dyl - dyc * dxl;\n    if (cross !== 0) {\n        return false;\n    }\n    if (!excludeBoundary) {\n        if (Math.abs(dxl) >= Math.abs(dyl)) {\n            return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1;\n        }\n        return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1;\n    }\n    else if (excludeBoundary === \"start\") {\n        if (Math.abs(dxl) >= Math.abs(dyl)) {\n            return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1;\n        }\n        return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1;\n    }\n    else if (excludeBoundary === \"end\") {\n        if (Math.abs(dxl) >= Math.abs(dyl)) {\n            return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1;\n        }\n        return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1;\n    }\n    else if (excludeBoundary === \"both\") {\n        if (Math.abs(dxl) >= Math.abs(dyl)) {\n            return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1;\n        }\n        return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1;\n    }\n    return false;\n}\nexports.default = booleanPointOnLine;\n\n},{\"@turf/invariant\":125}],120:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bbox_1 = require(\"@turf/bbox\");\nvar boolean_point_on_line_1 = require(\"@turf/boolean-point-on-line\");\nvar boolean_point_in_polygon_1 = require(\"@turf/boolean-point-in-polygon\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Boolean-within returns true if the first geometry is completely within the second geometry.\n * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)\n * must not intersect the exterior of the secondary (geometry b).\n * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.\n *\n * @name booleanWithin\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanWithin(point, line);\n * //=true\n */\nfunction booleanWithin(feature1, feature2) {\n    var type1 = invariant_1.getType(feature1);\n    var type2 = invariant_1.getType(feature2);\n    var geom1 = invariant_1.getGeom(feature1);\n    var geom2 = invariant_1.getGeom(feature2);\n    switch (type1) {\n        case 'Point':\n            switch (type2) {\n                case 'MultiPoint':\n                    return isPointInMultiPoint(geom1, geom2);\n                case 'LineString':\n                    return boolean_point_on_line_1.default(geom1, geom2, { ignoreEndVertices: true });\n                case 'Polygon':\n                case 'MultiPolygon':\n                    return boolean_point_in_polygon_1.default(geom1, geom2, { ignoreBoundary: true });\n                default:\n                    throw new Error('feature2 ' + type2 + ' geometry not supported');\n            }\n        case 'MultiPoint':\n            switch (type2) {\n                case 'MultiPoint':\n                    return isMultiPointInMultiPoint(geom1, geom2);\n                case 'LineString':\n                    return isMultiPointOnLine(geom1, geom2);\n                case 'Polygon':\n                case 'MultiPolygon':\n                    return isMultiPointInPoly(geom1, geom2);\n                default:\n                    throw new Error('feature2 ' + type2 + ' geometry not supported');\n            }\n        case 'LineString':\n            switch (type2) {\n                case 'LineString':\n                    return isLineOnLine(geom1, geom2);\n                case 'Polygon':\n                case 'MultiPolygon':\n                    return isLineInPoly(geom1, geom2);\n                default:\n                    throw new Error('feature2 ' + type2 + ' geometry not supported');\n            }\n        case 'Polygon':\n            switch (type2) {\n                case 'Polygon':\n                case 'MultiPolygon':\n                    return isPolyInPoly(geom1, geom2);\n                default:\n                    throw new Error('feature2 ' + type2 + ' geometry not supported');\n            }\n        default:\n            throw new Error('feature1 ' + type1 + ' geometry not supported');\n    }\n}\nfunction isPointInMultiPoint(point, multiPoint) {\n    var i;\n    var output = false;\n    for (i = 0; i < multiPoint.coordinates.length; i++) {\n        if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {\n            output = true;\n            break;\n        }\n    }\n    return output;\n}\nfunction isMultiPointInMultiPoint(multiPoint1, multiPoint2) {\n    for (var i = 0; i < multiPoint1.coordinates.length; i++) {\n        var anyMatch = false;\n        for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {\n            if (compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])) {\n                anyMatch = true;\n            }\n        }\n        if (!anyMatch) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isMultiPointOnLine(multiPoint, lineString) {\n    var foundInsidePoint = false;\n    for (var i = 0; i < multiPoint.coordinates.length; i++) {\n        if (!boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString)) {\n            return false;\n        }\n        if (!foundInsidePoint) {\n            foundInsidePoint = boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString, { ignoreEndVertices: true });\n        }\n    }\n    return foundInsidePoint;\n}\nfunction isMultiPointInPoly(multiPoint, polygon) {\n    var output = true;\n    var oneInside = false;\n    for (var i = 0; i < multiPoint.coordinates.length; i++) {\n        var isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon);\n        if (!isInside) {\n            output = false;\n            break;\n        }\n        if (!oneInside) {\n            isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon, { ignoreBoundary: true });\n        }\n    }\n    return output && isInside;\n}\nfunction isLineOnLine(lineString1, lineString2) {\n    for (var i = 0; i < lineString1.coordinates.length; i++) {\n        if (!boolean_point_on_line_1.default(lineString1.coordinates[i], lineString2)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isLineInPoly(linestring, polygon) {\n    var polyBbox = bbox_1.default(polygon);\n    var lineBbox = bbox_1.default(linestring);\n    if (!doBBoxOverlap(polyBbox, lineBbox)) {\n        return false;\n    }\n    var foundInsidePoint = false;\n    for (var i = 0; i < linestring.coordinates.length - 1; i++) {\n        if (!boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon)) {\n            return false;\n        }\n        if (!foundInsidePoint) {\n            foundInsidePoint = boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon, { ignoreBoundary: true });\n        }\n        if (!foundInsidePoint) {\n            var midpoint = getMidpoint(linestring.coordinates[i], linestring.coordinates[i + 1]);\n            foundInsidePoint = boolean_point_in_polygon_1.default(midpoint, polygon, { ignoreBoundary: true });\n        }\n    }\n    return foundInsidePoint;\n}\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Geometry|Feature<Polygon>} feature1 Polygon1\n * @param {Geometry|Feature<Polygon>} feature2 Polygon2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(feature1, feature2) {\n    var poly1Bbox = bbox_1.default(feature1);\n    var poly2Bbox = bbox_1.default(feature2);\n    if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {\n        return false;\n    }\n    for (var i = 0; i < feature1.coordinates[0].length; i++) {\n        if (!boolean_point_in_polygon_1.default(feature1.coordinates[0][i], feature2)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction doBBoxOverlap(bbox1, bbox2) {\n    if (bbox1[0] > bbox2[0])\n        return false;\n    if (bbox1[2] < bbox2[2])\n        return false;\n    if (bbox1[1] > bbox2[1])\n        return false;\n    if (bbox1[3] < bbox2[3])\n        return false;\n    return true;\n}\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1, pair2) {\n    return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n/**\n * getMidpoint\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {Position} midpoint of pair1 and pair2\n */\nfunction getMidpoint(pair1, pair2) {\n    return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\nexports.default = booleanWithin;\n\n},{\"@turf/bbox\":121,\"@turf/boolean-point-in-polygon\":118,\"@turf/boolean-point-on-line\":119,\"@turf/invariant\":125}],121:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar meta_1 = require(\"@turf/meta\");\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n    var result = [Infinity, Infinity, -Infinity, -Infinity];\n    meta_1.coordEach(geojson, function (coord) {\n        if (result[0] > coord[0]) {\n            result[0] = coord[0];\n        }\n        if (result[1] > coord[1]) {\n            result[1] = coord[1];\n        }\n        if (result[2] < coord[0]) {\n            result[2] = coord[0];\n        }\n        if (result[3] < coord[1]) {\n            result[3] = coord[1];\n        }\n    });\n    return result;\n}\nexports.default = bbox;\n\n},{\"@turf/meta\":122}],122:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar helpers = require('@turf/helpers');\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array<number>} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=currentCoord\n *   //=coordIndex\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n    // Handles null Geometry -- Skips this GeoJSON\n    if (geojson === null) return;\n    var j, k, l, geometry, stopG, coords,\n        geometryMaybeCollection,\n        wrapShrink = 0,\n        coordIndex = 0,\n        isGeometryCollection,\n        type = geojson.type,\n        isFeatureCollection = type === 'FeatureCollection',\n        isFeature = type === 'Feature',\n        stop = isFeatureCollection ? geojson.features.length : 1;\n\n    // This logic may look a little weird. The reason why it is that way\n    // is because it's trying to be fast. GeoJSON supports multiple kinds\n    // of objects at its root: FeatureCollection, Features, Geometries.\n    // This function has the responsibility of handling all of them, and that\n    // means that some of the `for` loops you see below actually just don't apply\n    // to certain inputs. For instance, if you give this just a\n    // Point geometry, then both loops are short-circuited and all we do\n    // is gradually rename the input until it's called 'geometry'.\n    //\n    // This also aims to allocate as few resources as possible: just a\n    // few numbers and booleans, rather than any temporary arrays as would\n    // be required with the normalization approach.\n    for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n        geometryMaybeCollection = (isFeatureCollection ? geojson.features[featureIndex].geometry :\n            (isFeature ? geojson.geometry : geojson));\n        isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;\n        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n        for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n            var multiFeatureIndex = 0;\n            var geometryIndex = 0;\n            geometry = isGeometryCollection ?\n                geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n\n            // Handles null Geometry -- Skips this geometry\n            if (geometry === null) continue;\n            coords = geometry.coordinates;\n            var geomType = geometry.type;\n\n            wrapShrink = (excludeWrapCoord && (geomType === 'Polygon' || geomType === 'MultiPolygon')) ? 1 : 0;\n\n            switch (geomType) {\n            case null:\n                break;\n            case 'Point':\n                if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n                coordIndex++;\n                multiFeatureIndex++;\n                break;\n            case 'LineString':\n            case 'MultiPoint':\n                for (j = 0; j < coords.length; j++) {\n                    if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n                    coordIndex++;\n                    if (geomType === 'MultiPoint') multiFeatureIndex++;\n                }\n                if (geomType === 'LineString') multiFeatureIndex++;\n                break;\n            case 'Polygon':\n            case 'MultiLineString':\n                for (j = 0; j < coords.length; j++) {\n                    for (k = 0; k < coords[j].length - wrapShrink; k++) {\n                        if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n                        coordIndex++;\n                    }\n                    if (geomType === 'MultiLineString') multiFeatureIndex++;\n                    if (geomType === 'Polygon') geometryIndex++;\n                }\n                if (geomType === 'Polygon') multiFeatureIndex++;\n                break;\n            case 'MultiPolygon':\n                for (j = 0; j < coords.length; j++) {\n                    geometryIndex = 0;\n                    for (k = 0; k < coords[j].length; k++) {\n                        for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n                            if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n                            coordIndex++;\n                        }\n                        geometryIndex++;\n                    }\n                    multiFeatureIndex++;\n                }\n                break;\n            case 'GeometryCollection':\n                for (j = 0; j < geometry.geometries.length; j++)\n                    if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false;\n                break;\n            default:\n                throw new Error('Unknown Geometry Type');\n            }\n        }\n    }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array<number>} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=previousValue\n *   //=currentCoord\n *   //=coordIndex\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n    var previousValue = initialValue;\n    coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n        if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord;\n        else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex);\n    }, excludeWrapCoord);\n    return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n *   //=currentProperties\n *   //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n    var i;\n    switch (geojson.type) {\n    case 'FeatureCollection':\n        for (i = 0; i < geojson.features.length; i++) {\n            if (callback(geojson.features[i].properties, i) === false) break;\n        }\n        break;\n    case 'Feature':\n        callback(geojson.properties, 0);\n        break;\n    }\n}\n\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n *   //=previousValue\n *   //=currentProperties\n *   //=featureIndex\n *   return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    propEach(geojson, function (currentProperties, featureIndex) {\n        if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties;\n        else previousValue = callback(previousValue, currentProperties, featureIndex);\n    });\n    return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature<any>} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {foo: 'bar'}),\n *   turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n *   //=currentFeature\n *   //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n    if (geojson.type === 'Feature') {\n        callback(geojson, 0);\n    } else if (geojson.type === 'FeatureCollection') {\n        for (var i = 0; i < geojson.features.length; i++) {\n            if (callback(geojson.features[i], i) === false) break;\n        }\n    }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n *   //=previousValue\n *   //=currentFeature\n *   //=featureIndex\n *   return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    featureEach(geojson, function (currentFeature, featureIndex) {\n        if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature;\n        else previousValue = callback(previousValue, currentFeature, featureIndex);\n    });\n    return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array<Array<number>>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {foo: 'bar'}),\n *   turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n    var coords = [];\n    coordEach(geojson, function (coord) {\n        coords.push(coord);\n    });\n    return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array<number>} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n *   //=currentGeometry\n *   //=featureIndex\n *   //=featureProperties\n *   //=featureBBox\n *   //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n    var i, j, g, geometry, stopG,\n        geometryMaybeCollection,\n        isGeometryCollection,\n        featureProperties,\n        featureBBox,\n        featureId,\n        featureIndex = 0,\n        isFeatureCollection = geojson.type === 'FeatureCollection',\n        isFeature = geojson.type === 'Feature',\n        stop = isFeatureCollection ? geojson.features.length : 1;\n\n    // This logic may look a little weird. The reason why it is that way\n    // is because it's trying to be fast. GeoJSON supports multiple kinds\n    // of objects at its root: FeatureCollection, Features, Geometries.\n    // This function has the responsibility of handling all of them, and that\n    // means that some of the `for` loops you see below actually just don't apply\n    // to certain inputs. For instance, if you give this just a\n    // Point geometry, then both loops are short-circuited and all we do\n    // is gradually rename the input until it's called 'geometry'.\n    //\n    // This also aims to allocate as few resources as possible: just a\n    // few numbers and booleans, rather than any temporary arrays as would\n    // be required with the normalization approach.\n    for (i = 0; i < stop; i++) {\n\n        geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry :\n            (isFeature ? geojson.geometry : geojson));\n        featureProperties = (isFeatureCollection ? geojson.features[i].properties :\n            (isFeature ? geojson.properties : {}));\n        featureBBox = (isFeatureCollection ? geojson.features[i].bbox :\n            (isFeature ? geojson.bbox : undefined));\n        featureId = (isFeatureCollection ? geojson.features[i].id :\n            (isFeature ? geojson.id : undefined));\n        isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;\n        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n        for (g = 0; g < stopG; g++) {\n            geometry = isGeometryCollection ?\n                geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n\n            // Handle null Geometry\n            if (geometry === null) {\n                if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n                continue;\n            }\n            switch (geometry.type) {\n            case 'Point':\n            case 'LineString':\n            case 'MultiPoint':\n            case 'Polygon':\n            case 'MultiLineString':\n            case 'MultiPolygon': {\n                if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n                break;\n            }\n            case 'GeometryCollection': {\n                for (j = 0; j < geometry.geometries.length; j++) {\n                    if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n                }\n                break;\n            }\n            default:\n                throw new Error('Unknown Geometry Type');\n            }\n        }\n        // Only increase `featureIndex` per each feature\n        featureIndex++;\n    }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array<number>} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n *   //=previousValue\n *   //=currentGeometry\n *   //=featureIndex\n *   //=featureProperties\n *   //=featureBBox\n *   //=featureId\n *   return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n        if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry;\n        else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId);\n    });\n    return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n *   //=currentFeature\n *   //=featureIndex\n *   //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n    geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n        // Callback for single geometry\n        var type = (geometry === null) ? null : geometry.type;\n        switch (type) {\n        case null:\n        case 'Point':\n        case 'LineString':\n        case 'Polygon':\n            if (callback(helpers.feature(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) return false;\n            return;\n        }\n\n        var geomType;\n\n        // Callback for multi-geometry\n        switch (type) {\n        case 'MultiPoint':\n            geomType = 'Point';\n            break;\n        case 'MultiLineString':\n            geomType = 'LineString';\n            break;\n        case 'MultiPolygon':\n            geomType = 'Polygon';\n            break;\n        }\n\n        for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n            var coordinate = geometry.coordinates[multiFeatureIndex];\n            var geom = {\n                type: geomType,\n                coordinates: coordinate\n            };\n            if (callback(helpers.feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false;\n        }\n    });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n *   //=previousValue\n *   //=currentFeature\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) {\n        if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature;\n        else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex);\n    });\n    return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n *   //=currentSegment\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n *     total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n    flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n        var segmentIndex = 0;\n\n        // Exclude null Geometries\n        if (!feature.geometry) return;\n        // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n        var type = feature.geometry.type;\n        if (type === 'Point' || type === 'MultiPoint') return;\n\n        // Generate 2-vertex line segments\n        var previousCoords;\n        var previousFeatureIndex = 0;\n        var previousMultiIndex = 0;\n        var prevGeomIndex = 0;\n        if (coordEach(feature, function (currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n            // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n            if (previousCoords === undefined || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n                previousCoords = currentCoord;\n                previousFeatureIndex = featureIndex;\n                previousMultiIndex = multiPartIndexCoord;\n                prevGeomIndex = geometryIndex;\n                segmentIndex = 0;\n                return;\n            }\n            var currentSegment = helpers.lineString([previousCoords, currentCoord], feature.properties);\n            if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false;\n            segmentIndex++;\n            previousCoords = currentCoord;\n        }) === false) return false;\n    });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n *   //= previousSegment\n *   //= currentSegment\n *   //= featureIndex\n *   //= multiFeatureIndex\n *   //= geometryIndex\n *   //= segmentInex\n *   return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n *     previousValue++;\n *     return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    var started = false;\n    segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n        if (started === false && initialValue === undefined) previousValue = currentSegment;\n        else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex);\n        started = true;\n    });\n    return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n *   [[26, 37], [35, 45]],\n *   [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=currentLine\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n    // validation\n    if (!geojson) throw new Error('geojson is required');\n\n    flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n        if (feature.geometry === null) return;\n        var type = feature.geometry.type;\n        var coords = feature.geometry.coordinates;\n        switch (type) {\n        case 'LineString':\n            if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false) return false;\n            break;\n        case 'Polygon':\n            for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n                if (callback(helpers.lineString(coords[geometryIndex], feature.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n            }\n            break;\n        }\n    });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n *   turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n *   turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=previousValue\n *   //=currentLine\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n        if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine;\n        else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex);\n    });\n    return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature<LineString>} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n *     [[10, 10], [50, 30], [30, 40]],\n *     [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature<LineString<[[10, 10], [50, 30]]>>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature<LineString<[[-10, -10], [-50, -30]]>>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature<LineString<[[-50, -30], [-30, -40]]>>\n */\nfunction findSegment(geojson, options) {\n    // Optional Parameters\n    options = options || {};\n    if (!helpers.isObject(options)) throw new Error('options is invalid');\n    var featureIndex = options.featureIndex || 0;\n    var multiFeatureIndex = options.multiFeatureIndex || 0;\n    var geometryIndex = options.geometryIndex || 0;\n    var segmentIndex = options.segmentIndex || 0;\n\n    // Find FeatureIndex\n    var properties = options.properties;\n    var geometry;\n\n    switch (geojson.type) {\n    case 'FeatureCollection':\n        if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;\n        properties = properties || geojson.features[featureIndex].properties;\n        geometry = geojson.features[featureIndex].geometry;\n        break;\n    case 'Feature':\n        properties = properties || geojson.properties;\n        geometry = geojson.geometry;\n        break;\n    case 'Point':\n    case 'MultiPoint':\n        return null;\n    case 'LineString':\n    case 'Polygon':\n    case 'MultiLineString':\n    case 'MultiPolygon':\n        geometry = geojson;\n        break;\n    default:\n        throw new Error('geojson is invalid');\n    }\n\n    // Find SegmentIndex\n    if (geometry === null) return null;\n    var coords = geometry.coordinates;\n    switch (geometry.type) {\n    case 'Point':\n    case 'MultiPoint':\n        return null;\n    case 'LineString':\n        if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n        return helpers.lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options);\n    case 'Polygon':\n        if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n        if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n        return helpers.lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options);\n    case 'MultiLineString':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n        return helpers.lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options);\n    case 'MultiPolygon':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n        if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n        return helpers.lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options);\n    }\n    throw new Error('geojson is invalid');\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature<Point>} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n *     [[10, 10], [50, 30], [30, 40]],\n *     [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature<Point<[10, 10]>>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature<Point<[-10, -10]>>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature<Point<[-30, -40]>>\n */\nfunction findPoint(geojson, options) {\n    // Optional Parameters\n    options = options || {};\n    if (!helpers.isObject(options)) throw new Error('options is invalid');\n    var featureIndex = options.featureIndex || 0;\n    var multiFeatureIndex = options.multiFeatureIndex || 0;\n    var geometryIndex = options.geometryIndex || 0;\n    var coordIndex = options.coordIndex || 0;\n\n    // Find FeatureIndex\n    var properties = options.properties;\n    var geometry;\n\n    switch (geojson.type) {\n    case 'FeatureCollection':\n        if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;\n        properties = properties || geojson.features[featureIndex].properties;\n        geometry = geojson.features[featureIndex].geometry;\n        break;\n    case 'Feature':\n        properties = properties || geojson.properties;\n        geometry = geojson.geometry;\n        break;\n    case 'Point':\n    case 'MultiPoint':\n        return null;\n    case 'LineString':\n    case 'Polygon':\n    case 'MultiLineString':\n    case 'MultiPolygon':\n        geometry = geojson;\n        break;\n    default:\n        throw new Error('geojson is invalid');\n    }\n\n    // Find Coord Index\n    if (geometry === null) return null;\n    var coords = geometry.coordinates;\n    switch (geometry.type) {\n    case 'Point':\n        return helpers.point(coords, properties, options);\n    case 'MultiPoint':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        return helpers.point(coords[multiFeatureIndex], properties, options);\n    case 'LineString':\n        if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n        return helpers.point(coords[coordIndex], properties, options);\n    case 'Polygon':\n        if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n        if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex;\n        return helpers.point(coords[geometryIndex][coordIndex], properties, options);\n    case 'MultiLineString':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex;\n        return helpers.point(coords[multiFeatureIndex][coordIndex], properties, options);\n    case 'MultiPolygon':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n        if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n        return helpers.point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options);\n    }\n    throw new Error('geojson is invalid');\n}\n\nexports.coordEach = coordEach;\nexports.coordReduce = coordReduce;\nexports.propEach = propEach;\nexports.propReduce = propReduce;\nexports.featureEach = featureEach;\nexports.featureReduce = featureReduce;\nexports.coordAll = coordAll;\nexports.geomEach = geomEach;\nexports.geomReduce = geomReduce;\nexports.flattenEach = flattenEach;\nexports.flattenReduce = flattenReduce;\nexports.segmentEach = segmentEach;\nexports.segmentReduce = segmentReduce;\nexports.lineEach = lineEach;\nexports.lineReduce = lineReduce;\nexports.findSegment = findSegment;\nexports.findPoint = findPoint;\n\n},{\"@turf/helpers\":123}],123:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexports.earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.factors = {\n    centimeters: exports.earthRadius * 100,\n    centimetres: exports.earthRadius * 100,\n    degrees: exports.earthRadius / 111325,\n    feet: exports.earthRadius * 3.28084,\n    inches: exports.earthRadius * 39.370,\n    kilometers: exports.earthRadius / 1000,\n    kilometres: exports.earthRadius / 1000,\n    meters: exports.earthRadius,\n    metres: exports.earthRadius,\n    miles: exports.earthRadius / 1609.344,\n    millimeters: exports.earthRadius * 1000,\n    millimetres: exports.earthRadius * 1000,\n    nauticalmiles: exports.earthRadius / 1852,\n    radians: 1,\n    yards: exports.earthRadius / 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.unitsFactors = {\n    centimeters: 100,\n    centimetres: 100,\n    degrees: 1 / 111325,\n    feet: 3.28084,\n    inches: 39.370,\n    kilometers: 1 / 1000,\n    kilometres: 1 / 1000,\n    meters: 1,\n    metres: 1,\n    miles: 1 / 1609.344,\n    millimeters: 1000,\n    millimetres: 1000,\n    nauticalmiles: 1 / 1852,\n    radians: 1 / exports.earthRadius,\n    yards: 1 / 1.0936,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.areaFactors = {\n    acres: 0.000247105,\n    centimeters: 10000,\n    centimetres: 10000,\n    feet: 10.763910417,\n    inches: 1550.003100006,\n    kilometers: 0.000001,\n    kilometres: 0.000001,\n    meters: 1,\n    metres: 1,\n    miles: 3.86e-7,\n    millimeters: 1000000,\n    millimetres: 1000000,\n    yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n *   \"type\": \"Point\",\n *   \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nfunction feature(geom, properties, options) {\n    if (options === void 0) { options = {}; }\n    var feat = { type: \"Feature\" };\n    if (options.id === 0 || options.id) {\n        feat.id = options.id;\n    }\n    if (options.bbox) {\n        feat.bbox = options.bbox;\n    }\n    feat.properties = properties || {};\n    feat.geometry = geom;\n    return feat;\n}\nexports.feature = feature;\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array<any>} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nfunction geometry(type, coordinates, options) {\n    if (options === void 0) { options = {}; }\n    switch (type) {\n        case \"Point\": return point(coordinates).geometry;\n        case \"LineString\": return lineString(coordinates).geometry;\n        case \"Polygon\": return polygon(coordinates).geometry;\n        case \"MultiPoint\": return multiPoint(coordinates).geometry;\n        case \"MultiLineString\": return multiLineString(coordinates).geometry;\n        case \"MultiPolygon\": return multiPolygon(coordinates).geometry;\n        default: throw new Error(type + \" is invalid\");\n    }\n}\nexports.geometry = geometry;\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Point>} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nfunction point(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"Point\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.point = point;\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array<Array<number>>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Point>} Point Feature\n * @example\n * var points = turf.points([\n *   [-75, 39],\n *   [-80, 45],\n *   [-78, 50]\n * ]);\n *\n * //=points\n */\nfunction points(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    return featureCollection(coordinates.map(function (coords) {\n        return point(coords, properties);\n    }), options);\n}\nexports.points = points;\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Polygon>} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nfunction polygon(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n        var ring = coordinates_1[_i];\n        if (ring.length < 4) {\n            throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n        }\n        for (var j = 0; j < ring[ring.length - 1].length; j++) {\n            // Check if first point of Polygon contains two numbers\n            if (ring[ring.length - 1][j] !== ring[0][j]) {\n                throw new Error(\"First and last Position are not equivalent.\");\n            }\n        }\n    }\n    var geom = {\n        type: \"Polygon\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.polygon = polygon;\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nfunction polygons(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    return featureCollection(coordinates.map(function (coords) {\n        return polygon(coords, properties);\n    }), options);\n}\nexports.polygons = polygons;\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<LineString>} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nfunction lineString(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    if (coordinates.length < 2) {\n        throw new Error(\"coordinates must be an array of two or more positions\");\n    }\n    var geom = {\n        type: \"LineString\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.lineString = lineString;\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<LineString>} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nfunction lineStrings(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    return featureCollection(coordinates.map(function (coords) {\n        return lineString(coords, properties);\n    }), options);\n}\nexports.lineStrings = lineStrings;\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n *   locationA,\n *   locationB,\n *   locationC\n * ]);\n *\n * //=collection\n */\nfunction featureCollection(features, options) {\n    if (options === void 0) { options = {}; }\n    var fc = { type: \"FeatureCollection\" };\n    if (options.id) {\n        fc.id = options.id;\n    }\n    if (options.bbox) {\n        fc.bbox = options.bbox;\n    }\n    fc.features = features;\n    return fc;\n}\nexports.featureCollection = featureCollection;\n/**\n * Creates a {@link Feature<MultiLineString>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiLineString>} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nfunction multiLineString(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"MultiLineString\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.multiLineString = multiLineString;\n/**\n * Creates a {@link Feature<MultiPoint>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPoint>} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nfunction multiPoint(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"MultiPoint\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.multiPoint = multiPoint;\n/**\n * Creates a {@link Feature<MultiPolygon>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPolygon>} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nfunction multiPolygon(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"MultiPolygon\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.multiPolygon = multiPolygon;\n/**\n * Creates a {@link Feature<GeometryCollection>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array<Geometry>} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nfunction geometryCollection(geometries, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"GeometryCollection\",\n        geometries: geometries,\n    };\n    return feature(geom, properties, options);\n}\nexports.geometryCollection = geometryCollection;\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nfunction round(num, precision) {\n    if (precision === void 0) { precision = 0; }\n    if (precision && !(precision >= 0)) {\n        throw new Error(\"precision must be a positive number\");\n    }\n    var multiplier = Math.pow(10, precision || 0);\n    return Math.round(num * multiplier) / multiplier;\n}\nexports.round = round;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, or kilometers inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nfunction radiansToLength(radians, units) {\n    if (units === void 0) { units = \"kilometers\"; }\n    var factor = exports.factors[units];\n    if (!factor) {\n        throw new Error(units + \" units is invalid\");\n    }\n    return radians * factor;\n}\nexports.radiansToLength = radiansToLength;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, or kilometers inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nfunction lengthToRadians(distance, units) {\n    if (units === void 0) { units = \"kilometers\"; }\n    var factor = exports.factors[units];\n    if (!factor) {\n        throw new Error(units + \" units is invalid\");\n    }\n    return distance / factor;\n}\nexports.lengthToRadians = lengthToRadians;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, or kilometers inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nfunction lengthToDegrees(distance, units) {\n    return radiansToDegrees(lengthToRadians(distance, units));\n}\nexports.lengthToDegrees = lengthToDegrees;\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nfunction bearingToAzimuth(bearing) {\n    var angle = bearing % 360;\n    if (angle < 0) {\n        angle += 360;\n    }\n    return angle;\n}\nexports.bearingToAzimuth = bearingToAzimuth;\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nfunction radiansToDegrees(radians) {\n    var degrees = radians % (2 * Math.PI);\n    return degrees * 180 / Math.PI;\n}\nexports.radiansToDegrees = radiansToDegrees;\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nfunction degreesToRadians(degrees) {\n    var radians = degrees % 360;\n    return radians * Math.PI / 180;\n}\nexports.degreesToRadians = degreesToRadians;\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nfunction convertLength(length, originalUnit, finalUnit) {\n    if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n    if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n    if (!(length >= 0)) {\n        throw new Error(\"length must be a positive number\");\n    }\n    return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nexports.convertLength = convertLength;\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted distance\n */\nfunction convertArea(area, originalUnit, finalUnit) {\n    if (originalUnit === void 0) { originalUnit = \"meters\"; }\n    if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n    if (!(area >= 0)) {\n        throw new Error(\"area must be a positive number\");\n    }\n    var startFactor = exports.areaFactors[originalUnit];\n    if (!startFactor) {\n        throw new Error(\"invalid original units\");\n    }\n    var finalFactor = exports.areaFactors[finalUnit];\n    if (!finalFactor) {\n        throw new Error(\"invalid final units\");\n    }\n    return (area / startFactor) * finalFactor;\n}\nexports.convertArea = convertArea;\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nfunction isNumber(num) {\n    return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\\s*$/.test(num);\n}\nexports.isNumber = isNumber;\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nfunction isObject(input) {\n    return (!!input) && (input.constructor === Object);\n}\nexports.isObject = isObject;\n/**\n * Validate BBox\n *\n * @private\n * @param {Array<number>} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nfunction validateBBox(bbox) {\n    if (!bbox) {\n        throw new Error(\"bbox is required\");\n    }\n    if (!Array.isArray(bbox)) {\n        throw new Error(\"bbox must be an Array\");\n    }\n    if (bbox.length !== 4 && bbox.length !== 6) {\n        throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n    }\n    bbox.forEach(function (num) {\n        if (!isNumber(num)) {\n            throw new Error(\"bbox must only contain numbers\");\n        }\n    });\n}\nexports.validateBBox = validateBBox;\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nfunction validateId(id) {\n    if (!id) {\n        throw new Error(\"id is required\");\n    }\n    if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n        throw new Error(\"id must be a number or a string\");\n    }\n}\nexports.validateId = validateId;\n// Deprecated methods\nfunction radians2degrees() {\n    throw new Error(\"method has been renamed to `radiansToDegrees`\");\n}\nexports.radians2degrees = radians2degrees;\nfunction degrees2radians() {\n    throw new Error(\"method has been renamed to `degreesToRadians`\");\n}\nexports.degrees2radians = degrees2radians;\nfunction distanceToDegrees() {\n    throw new Error(\"method has been renamed to `lengthToDegrees`\");\n}\nexports.distanceToDegrees = distanceToDegrees;\nfunction distanceToRadians() {\n    throw new Error(\"method has been renamed to `lengthToRadians`\");\n}\nexports.distanceToRadians = distanceToRadians;\nfunction radiansToDistance() {\n    throw new Error(\"method has been renamed to `radiansToLength`\");\n}\nexports.radiansToDistance = radiansToDistance;\nfunction bearingToAngle() {\n    throw new Error(\"method has been renamed to `bearingToAzimuth`\");\n}\nexports.bearingToAngle = bearingToAngle;\nfunction convertDistance() {\n    throw new Error(\"method has been renamed to `convertLength`\");\n}\nexports.convertDistance = convertDistance;\n\n},{}],124:[function(require,module,exports){\n\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar martinez = __importStar(require(\"martinez-polygon-clipping\"));\n/**\n * Takes two {@link Polygon|polygon} or {@link MultiPolygon|multi-polygon} geometries and\n * finds their polygonal intersection. If they don't intersect, returns null.\n *\n * @name intersect\n * @param {Feature<Polygon | MultiPolygon>} poly1 the first polygon or multipolygon\n * @param {Feature<Polygon | MultiPolygon>} poly2 the second polygon or multipolygon\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate GeoJSON Properties to Feature\n * @returns {Feature|null} returns a feature representing the area they share (either a {@link Polygon} or\n * {@link MultiPolygon}). If they do not share any area, returns `null`.\n * @example\n * var poly1 = turf.polygon([[\n *   [-122.801742, 45.48565],\n *   [-122.801742, 45.60491],\n *   [-122.584762, 45.60491],\n *   [-122.584762, 45.48565],\n *   [-122.801742, 45.48565]\n * ]]);\n *\n * var poly2 = turf.polygon([[\n *   [-122.520217, 45.535693],\n *   [-122.64038, 45.553967],\n *   [-122.720031, 45.526554],\n *   [-122.669906, 45.507309],\n *   [-122.723464, 45.446643],\n *   [-122.532577, 45.408574],\n *   [-122.487258, 45.477466],\n *   [-122.520217, 45.535693]\n * ]]);\n *\n * var intersection = turf.intersect(poly1, poly2);\n *\n * //addToMap\n * var addToMap = [poly1, poly2, intersection];\n */\nfunction intersect(poly1, poly2, options) {\n    if (options === void 0) { options = {}; }\n    var geom1 = invariant_1.getGeom(poly1);\n    var geom2 = invariant_1.getGeom(poly2);\n    if (geom1.type === \"Polygon\" && geom2.type === \"Polygon\") {\n        var intersection = martinez.intersection(geom1.coordinates, geom2.coordinates);\n        if (intersection === null || intersection.length === 0) {\n            return null;\n        }\n        if (intersection.length === 1) {\n            var start = intersection[0][0][0];\n            var end = intersection[0][0][intersection[0][0].length - 1];\n            if (start[0] === end[0] && start[1] === end[1]) {\n                return helpers_1.polygon(intersection[0], options.properties);\n            }\n            return null;\n        }\n        return helpers_1.multiPolygon(intersection, options.properties);\n    }\n    else if (geom1.type === \"MultiPolygon\") {\n        var resultCoords = [];\n        // iterate through the polygon and run intersect with each part, adding to the resultCoords.\n        for (var _i = 0, _a = geom1.coordinates; _i < _a.length; _i++) {\n            var coords = _a[_i];\n            var subGeom = invariant_1.getGeom(helpers_1.polygon(coords));\n            var subIntersection = intersect(subGeom, geom2);\n            if (subIntersection) {\n                var subIntGeom = invariant_1.getGeom(subIntersection);\n                if (subIntGeom.type === \"Polygon\") {\n                    resultCoords.push(subIntGeom.coordinates);\n                }\n                else if (subIntGeom.type === \"MultiPolygon\") {\n                    resultCoords = resultCoords.concat(subIntGeom.coordinates);\n                }\n                else {\n                    throw new Error(\"intersection is invalid\");\n                }\n            }\n        }\n        // Make a polygon with the result\n        if (resultCoords.length === 0) {\n            return null;\n        }\n        if (resultCoords.length === 1) {\n            return helpers_1.polygon(resultCoords[0], options.properties);\n        }\n        else {\n            return helpers_1.multiPolygon(resultCoords, options.properties);\n        }\n    }\n    else if (geom2.type === \"MultiPolygon\") {\n        // geom1 is a polygon and geom2 a multiPolygon,\n        // put the multiPolygon first and fallback to the previous case.\n        return intersect(geom2, geom1);\n    }\n    else {\n        // handle invalid geometry types\n        throw new Error(\"poly1 and poly2 must be either polygons or multiPolygons\");\n    }\n}\nexports.default = intersect;\n\n},{\"@turf/helpers\":123,\"@turf/invariant\":125,\"martinez-polygon-clipping\":265}],125:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers\n * @returns {Array<number>} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nfunction getCoord(coord) {\n    if (!coord) {\n        throw new Error(\"coord is required\");\n    }\n    if (!Array.isArray(coord)) {\n        if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n            return coord.geometry.coordinates;\n        }\n        if (coord.type === \"Point\") {\n            return coord.coordinates;\n        }\n    }\n    if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n        return coord;\n    }\n    throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nexports.getCoord = getCoord;\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array<any>} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nfunction getCoords(coords) {\n    if (Array.isArray(coords)) {\n        return coords;\n    }\n    // Feature\n    if (coords.type === \"Feature\") {\n        if (coords.geometry !== null) {\n            return coords.geometry.coordinates;\n        }\n    }\n    else {\n        // Geometry\n        if (coords.coordinates) {\n            return coords.coordinates;\n        }\n    }\n    throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\");\n}\nexports.getCoords = getCoords;\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array<any>} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nfunction containsNumber(coordinates) {\n    if (coordinates.length > 1 && helpers_1.isNumber(coordinates[0]) && helpers_1.isNumber(coordinates[1])) {\n        return true;\n    }\n    if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n        return containsNumber(coordinates[0]);\n    }\n    throw new Error(\"coordinates must only contain numbers\");\n}\nexports.containsNumber = containsNumber;\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction geojsonType(value, type, name) {\n    if (!type || !name) {\n        throw new Error(\"type and name required\");\n    }\n    if (!value || value.type !== type) {\n        throw new Error(\"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type);\n    }\n}\nexports.geojsonType = geojsonType;\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nfunction featureOf(feature, type, name) {\n    if (!feature) {\n        throw new Error(\"No feature passed\");\n    }\n    if (!name) {\n        throw new Error(\".featureOf() requires a name\");\n    }\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n        throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n        throw new Error(\"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type);\n    }\n}\nexports.featureOf = featureOf;\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction collectionOf(featureCollection, type, name) {\n    if (!featureCollection) {\n        throw new Error(\"No featureCollection passed\");\n    }\n    if (!name) {\n        throw new Error(\".collectionOf() requires a name\");\n    }\n    if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n        throw new Error(\"Invalid input to \" + name + \", FeatureCollection required\");\n    }\n    for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {\n        var feature = _a[_i];\n        if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n            throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n        }\n        if (!feature.geometry || feature.geometry.type !== type) {\n            throw new Error(\"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type);\n        }\n    }\n}\nexports.collectionOf = collectionOf;\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n *   \"type\": \"Feature\",\n *   \"properties\": {},\n *   \"geometry\": {\n *     \"type\": \"Point\",\n *     \"coordinates\": [110, 40]\n *   }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nfunction getGeom(geojson) {\n    if (geojson.type === \"Feature\") {\n        return geojson.geometry;\n    }\n    return geojson;\n}\nexports.getGeom = getGeom;\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n *   \"type\": \"Feature\",\n *   \"properties\": {},\n *   \"geometry\": {\n *     \"type\": \"Point\",\n *     \"coordinates\": [110, 40]\n *   }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nfunction getType(geojson, name) {\n    if (geojson.type === \"FeatureCollection\") {\n        return \"FeatureCollection\";\n    }\n    if (geojson.type === \"GeometryCollection\") {\n        return \"GeometryCollection\";\n    }\n    if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n        return geojson.geometry.type;\n    }\n    return geojson.type;\n}\nexports.getType = getType;\n\n},{\"@turf/helpers\":123}],126:[function(require,module,exports){\n\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar line_segment_1 = __importDefault(require(\"@turf/line-segment\"));\nvar meta_1 = require(\"@turf/meta\");\nvar geojson_rbush_1 = __importDefault(require(\"geojson-rbush\"));\n/**\n * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s).\n *\n * @name lineIntersect\n * @param {GeoJSON} line1 any LineString or Polygon\n * @param {GeoJSON} line2 any LineString or Polygon\n * @returns {FeatureCollection<Point>} point(s) that intersect both\n * @example\n * var line1 = turf.lineString([[126, -11], [129, -21]]);\n * var line2 = turf.lineString([[123, -18], [131, -14]]);\n * var intersects = turf.lineIntersect(line1, line2);\n *\n * //addToMap\n * var addToMap = [line1, line2, intersects]\n */\nfunction lineIntersect(line1, line2) {\n    var unique = {};\n    var results = [];\n    // First, normalize geometries to features\n    // Then, handle simple 2-vertex segments\n    if (line1.type === \"LineString\") {\n        line1 = helpers_1.feature(line1);\n    }\n    if (line2.type === \"LineString\") {\n        line2 = helpers_1.feature(line2);\n    }\n    if (line1.type === \"Feature\" &&\n        line2.type === \"Feature\" &&\n        line1.geometry !== null &&\n        line2.geometry !== null &&\n        line1.geometry.type === \"LineString\" &&\n        line2.geometry.type === \"LineString\" &&\n        line1.geometry.coordinates.length === 2 &&\n        line2.geometry.coordinates.length === 2) {\n        var intersect = intersects(line1, line2);\n        if (intersect) {\n            results.push(intersect);\n        }\n        return helpers_1.featureCollection(results);\n    }\n    // Handles complex GeoJSON Geometries\n    var tree = geojson_rbush_1.default();\n    tree.load(line_segment_1.default(line2));\n    meta_1.featureEach(line_segment_1.default(line1), function (segment) {\n        meta_1.featureEach(tree.search(segment), function (match) {\n            var intersect = intersects(segment, match);\n            if (intersect) {\n                // prevent duplicate points https://github.com/Turfjs/turf/issues/688\n                var key = invariant_1.getCoords(intersect).join(\",\");\n                if (!unique[key]) {\n                    unique[key] = true;\n                    results.push(intersect);\n                }\n            }\n        });\n    });\n    return helpers_1.featureCollection(results);\n}\n/**\n * Find a point that intersects LineStrings with two coordinates each\n *\n * @private\n * @param {Feature<LineString>} line1 GeoJSON LineString (Must only contain 2 coordinates)\n * @param {Feature<LineString>} line2 GeoJSON LineString (Must only contain 2 coordinates)\n * @returns {Feature<Point>} intersecting GeoJSON Point\n */\nfunction intersects(line1, line2) {\n    var coords1 = invariant_1.getCoords(line1);\n    var coords2 = invariant_1.getCoords(line2);\n    if (coords1.length !== 2) {\n        throw new Error(\"<intersects> line1 must only contain 2 coordinates\");\n    }\n    if (coords2.length !== 2) {\n        throw new Error(\"<intersects> line2 must only contain 2 coordinates\");\n    }\n    var x1 = coords1[0][0];\n    var y1 = coords1[0][1];\n    var x2 = coords1[1][0];\n    var y2 = coords1[1][1];\n    var x3 = coords2[0][0];\n    var y3 = coords2[0][1];\n    var x4 = coords2[1][0];\n    var y4 = coords2[1][1];\n    var denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1));\n    var numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3));\n    var numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3));\n    if (denom === 0) {\n        if (numeA === 0 && numeB === 0) {\n            return null;\n        }\n        return null;\n    }\n    var uA = numeA / denom;\n    var uB = numeB / denom;\n    if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n        var x = x1 + (uA * (x2 - x1));\n        var y = y1 + (uA * (y2 - y1));\n        return helpers_1.point([x, y]);\n    }\n    return null;\n}\nexports.default = lineIntersect;\n\n},{\"@turf/helpers\":123,\"@turf/invariant\":125,\"@turf/line-segment\":128,\"@turf/meta\":127,\"geojson-rbush\":224}],127:[function(require,module,exports){\narguments[4][122][0].apply(exports,arguments)\n},{\"@turf/helpers\":123,\"dup\":122}],128:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar meta_1 = require(\"@turf/meta\");\n/**\n * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a\n * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}.\n *\n * @name lineSegment\n * @param {GeoJSON} geojson GeoJSON Polygon or LineString\n * @returns {FeatureCollection<LineString>} 2-vertex line segments\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n * var segments = turf.lineSegment(polygon);\n *\n * //addToMap\n * var addToMap = [polygon, segments]\n */\nfunction lineSegment(geojson) {\n    if (!geojson) {\n        throw new Error(\"geojson is required\");\n    }\n    var results = [];\n    meta_1.flattenEach(geojson, function (feature) {\n        lineSegmentFeature(feature, results);\n    });\n    return helpers_1.featureCollection(results);\n}\n/**\n * Line Segment\n *\n * @private\n * @param {Feature<LineString|Polygon>} geojson Line or polygon feature\n * @param {Array} results push to results\n * @returns {void}\n */\nfunction lineSegmentFeature(geojson, results) {\n    var coords = [];\n    var geometry = geojson.geometry;\n    if (geometry !== null) {\n        switch (geometry.type) {\n            case \"Polygon\":\n                coords = invariant_1.getCoords(geometry);\n                break;\n            case \"LineString\":\n                coords = [invariant_1.getCoords(geometry)];\n        }\n        coords.forEach(function (coord) {\n            var segments = createSegments(coord, geojson.properties);\n            segments.forEach(function (segment) {\n                segment.id = results.length;\n                results.push(segment);\n            });\n        });\n    }\n}\n/**\n * Create Segments from LineString coordinates\n *\n * @private\n * @param {Array<Array<number>>} coords LineString coordinates\n * @param {*} properties GeoJSON properties\n * @returns {Array<Feature<LineString>>} line segments\n */\nfunction createSegments(coords, properties) {\n    var segments = [];\n    coords.reduce(function (previousCoords, currentCoords) {\n        var segment = helpers_1.lineString([previousCoords, currentCoords], properties);\n        segment.bbox = bbox(previousCoords, currentCoords);\n        segments.push(segment);\n        return currentCoords;\n    });\n    return segments;\n}\n/**\n * Create BBox between two coordinates (faster than @turf/bbox)\n *\n * @private\n * @param {Array<number>} coords1 Point coordinate\n * @param {Array<number>} coords2 Point coordinate\n * @returns {BBox} [west, south, east, north]\n */\nfunction bbox(coords1, coords2) {\n    var x1 = coords1[0];\n    var y1 = coords1[1];\n    var x2 = coords2[0];\n    var y2 = coords2[1];\n    var west = (x1 < x2) ? x1 : x2;\n    var south = (y1 < y2) ? y1 : y2;\n    var east = (x1 > x2) ? x1 : x2;\n    var north = (y1 > y2) ? y1 : y2;\n    return [west, south, east, north];\n}\nexports.default = lineSegment;\n\n},{\"@turf/helpers\":123,\"@turf/invariant\":125,\"@turf/meta\":129}],129:[function(require,module,exports){\narguments[4][122][0].apply(exports,arguments)\n},{\"@turf/helpers\":123,\"dup\":122}],130:[function(require,module,exports){\n/**\n * Callback for coordEach\n *\n * @private\n * @callback coordEachCallback\n * @param {[number, number]} currentCoords The current coordinates being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (currentCoords, currentIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include\n * the final coordinate of LinearRings that wraps the ring in its iteration.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.coordEach(features, function (currentCoords, currentIndex) {\n *   //=currentCoords\n *   //=currentIndex\n * });\n */\nfunction coordEach(layer, callback, excludeWrapCoord) {\n    var i, j, k, g, l, geometry, stopG, coords,\n        geometryMaybeCollection,\n        wrapShrink = 0,\n        currentIndex = 0,\n        isGeometryCollection,\n        isFeatureCollection = layer.type === 'FeatureCollection',\n        isFeature = layer.type === 'Feature',\n        stop = isFeatureCollection ? layer.features.length : 1;\n\n  // This logic may look a little weird. The reason why it is that way\n  // is because it's trying to be fast. GeoJSON supports multiple kinds\n  // of objects at its root: FeatureCollection, Features, Geometries.\n  // This function has the responsibility of handling all of them, and that\n  // means that some of the `for` loops you see below actually just don't apply\n  // to certain inputs. For instance, if you give this just a\n  // Point geometry, then both loops are short-circuited and all we do\n  // is gradually rename the input until it's called 'geometry'.\n  //\n  // This also aims to allocate as few resources as possible: just a\n  // few numbers and booleans, rather than any temporary arrays as would\n  // be required with the normalization approach.\n    for (i = 0; i < stop; i++) {\n\n        geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry :\n        (isFeature ? layer.geometry : layer));\n        isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection';\n        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n        for (g = 0; g < stopG; g++) {\n            geometry = isGeometryCollection ?\n            geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n            coords = geometry.coordinates;\n\n            wrapShrink = (excludeWrapCoord &&\n                (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon')) ?\n                1 : 0;\n\n            if (geometry.type === 'Point') {\n                callback(coords, currentIndex);\n                currentIndex++;\n            } else if (geometry.type === 'LineString' || geometry.type === 'MultiPoint') {\n                for (j = 0; j < coords.length; j++) {\n                    callback(coords[j], currentIndex);\n                    currentIndex++;\n                }\n            } else if (geometry.type === 'Polygon' || geometry.type === 'MultiLineString') {\n                for (j = 0; j < coords.length; j++)\n                    for (k = 0; k < coords[j].length - wrapShrink; k++) {\n                        callback(coords[j][k], currentIndex);\n                        currentIndex++;\n                    }\n            } else if (geometry.type === 'MultiPolygon') {\n                for (j = 0; j < coords.length; j++)\n                    for (k = 0; k < coords[j].length; k++)\n                        for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n                            callback(coords[j][k][l], currentIndex);\n                            currentIndex++;\n                        }\n            } else if (geometry.type === 'GeometryCollection') {\n                for (j = 0; j < geometry.geometries.length; j++)\n                    coordEach(geometry.geometries[j], callback, excludeWrapCoord);\n            } else {\n                throw new Error('Unknown Geometry Type');\n            }\n        }\n    }\n}\nmodule.exports.coordEach = coordEach;\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @private\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {[number, number]} currentCoords The current coordinate being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoords, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include\n * the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.coordReduce(features, function (previousValue, currentCoords, currentIndex) {\n *   //=previousValue\n *   //=currentCoords\n *   //=currentIndex\n *   return currentCoords;\n * });\n */\nfunction coordReduce(layer, callback, initialValue, excludeWrapCoord) {\n    var previousValue = initialValue;\n    coordEach(layer, function (currentCoords, currentIndex) {\n        if (currentIndex === 0 && initialValue === undefined) {\n            previousValue = currentCoords;\n        } else {\n            previousValue = callback(previousValue, currentCoords, currentIndex);\n        }\n    }, excludeWrapCoord);\n    return previousValue;\n}\nmodule.exports.coordReduce = coordReduce;\n\n/**\n * Callback for propEach\n *\n * @private\n * @callback propEachCallback\n * @param {*} currentProperties The current properties being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, currentIndex)\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"foo\": \"bar\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"hello\": \"world\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.propEach(features, function (currentProperties, currentIndex) {\n *   //=currentProperties\n *   //=currentIndex\n * });\n */\nfunction propEach(layer, callback) {\n    var i;\n    switch (layer.type) {\n    case 'FeatureCollection':\n        for (i = 0; i < layer.features.length; i++) {\n            callback(layer.features[i].properties, i);\n        }\n        break;\n    case 'Feature':\n        callback(layer.properties, 0);\n        break;\n    }\n}\nmodule.exports.propEach = propEach;\n\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @private\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current properties being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"foo\": \"bar\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"hello\": \"world\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.propReduce(features, function (previousValue, currentProperties, currentIndex) {\n *   //=previousValue\n *   //=currentProperties\n *   //=currentIndex\n *   return currentProperties\n * });\n */\nfunction propReduce(layer, callback, initialValue) {\n    var previousValue = initialValue;\n    propEach(layer, function (currentProperties, currentIndex) {\n        if (currentIndex === 0 && initialValue === undefined) {\n            previousValue = currentProperties;\n        } else {\n            previousValue = callback(previousValue, currentProperties, currentIndex);\n        }\n    });\n    return previousValue;\n}\nmodule.exports.propReduce = propReduce;\n\n/**\n * Callback for featureEach\n *\n * @private\n * @callback featureEachCallback\n * @param {Feature<any>} currentFeature The current feature being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, currentIndex)\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.featureEach(features, function (currentFeature, currentIndex) {\n *   //=currentFeature\n *   //=currentIndex\n * });\n */\nfunction featureEach(layer, callback) {\n    if (layer.type === 'Feature') {\n        callback(layer, 0);\n    } else if (layer.type === 'FeatureCollection') {\n        for (var i = 0; i < layer.features.length; i++) {\n            callback(layer.features[i], i);\n        }\n    }\n}\nmodule.exports.featureEach = featureEach;\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @private\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<any>} currentFeature The current Feature being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"foo\": \"bar\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"hello\": \"world\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.featureReduce(features, function (previousValue, currentFeature, currentIndex) {\n *   //=previousValue\n *   //=currentFeature\n *   //=currentIndex\n *   return currentFeature\n * });\n */\nfunction featureReduce(layer, callback, initialValue) {\n    var previousValue = initialValue;\n    featureEach(layer, function (currentFeature, currentIndex) {\n        if (currentIndex === 0 && initialValue === undefined) {\n            previousValue = currentFeature;\n        } else {\n            previousValue = callback(previousValue, currentFeature, currentIndex);\n        }\n    });\n    return previousValue;\n}\nmodule.exports.featureReduce = featureReduce;\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {Object} layer any GeoJSON object\n * @returns {Array<Array<number>>} coordinate position array\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * var coords = turf.coordAll(features);\n * //=coords\n */\nfunction coordAll(layer) {\n    var coords = [];\n    coordEach(layer, function (coord) {\n        coords.push(coord);\n    });\n    return coords;\n}\nmodule.exports.coordAll = coordAll;\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, currentIndex)\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.geomEach(features, function (currentGeometry, currentIndex) {\n *   //=currentGeometry\n *   //=currentIndex\n * });\n */\nfunction geomEach(layer, callback) {\n    var i, j, g, geometry, stopG,\n        geometryMaybeCollection,\n        isGeometryCollection,\n        currentIndex = 0,\n        isFeatureCollection = layer.type === 'FeatureCollection',\n        isFeature = layer.type === 'Feature',\n        stop = isFeatureCollection ? layer.features.length : 1;\n\n  // This logic may look a little weird. The reason why it is that way\n  // is because it's trying to be fast. GeoJSON supports multiple kinds\n  // of objects at its root: FeatureCollection, Features, Geometries.\n  // This function has the responsibility of handling all of them, and that\n  // means that some of the `for` loops you see below actually just don't apply\n  // to certain inputs. For instance, if you give this just a\n  // Point geometry, then both loops are short-circuited and all we do\n  // is gradually rename the input until it's called 'geometry'.\n  //\n  // This also aims to allocate as few resources as possible: just a\n  // few numbers and booleans, rather than any temporary arrays as would\n  // be required with the normalization approach.\n    for (i = 0; i < stop; i++) {\n\n        geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry :\n        (isFeature ? layer.geometry : layer));\n        isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection';\n        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n        for (g = 0; g < stopG; g++) {\n            geometry = isGeometryCollection ?\n            geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n\n            if (geometry.type === 'Point' ||\n                geometry.type === 'LineString' ||\n                geometry.type === 'MultiPoint' ||\n                geometry.type === 'Polygon' ||\n                geometry.type === 'MultiLineString' ||\n                geometry.type === 'MultiPolygon') {\n                callback(geometry, currentIndex);\n                currentIndex++;\n            } else if (geometry.type === 'GeometryCollection') {\n                for (j = 0; j < geometry.geometries.length; j++) {\n                    callback(geometry.geometries[j], currentIndex);\n                    currentIndex++;\n                }\n            } else {\n                throw new Error('Unknown Geometry Type');\n            }\n        }\n    }\n}\nmodule.exports.geomEach = geomEach;\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @private\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentGeometry The current Feature being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"foo\": \"bar\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"hello\": \"world\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.geomReduce(features, function (previousValue, currentGeometry, currentIndex) {\n *   //=previousValue\n *   //=currentGeometry\n *   //=currentIndex\n *   return currentGeometry\n * });\n */\nfunction geomReduce(layer, callback, initialValue) {\n    var previousValue = initialValue;\n    geomEach(layer, function (currentGeometry, currentIndex) {\n        if (currentIndex === 0 && initialValue === undefined) {\n            previousValue = currentGeometry;\n        } else {\n            previousValue = callback(previousValue, currentGeometry, currentIndex);\n        }\n    });\n    return previousValue;\n}\nmodule.exports.geomReduce = geomReduce;\n\n},{}],131:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a\n * {@link FeatureCollection} of {@link LineString|(Multi)LineString}.\n *\n * @name polygonToLine\n * @param {Feature<Polygon|MultiPolygon>} poly Feature to convert\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] translates GeoJSON properties to Feature\n * @returns {FeatureCollection|Feature<LineString|MultiLinestring>} converted (Multi)Polygon to (Multi)LineString\n * @example\n * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]);\n *\n * var line = turf.polygonToLine(poly);\n *\n * //addToMap\n * var addToMap = [line];\n */\nfunction default_1(poly, options) {\n    if (options === void 0) { options = {}; }\n    var geom = invariant_1.getGeom(poly);\n    if (!options.properties && poly.type === \"Feature\") {\n        options.properties = poly.properties;\n    }\n    switch (geom.type) {\n        case \"Polygon\": return polygonToLine(geom, options);\n        case \"MultiPolygon\": return multiPolygonToLine(geom, options);\n        default: throw new Error(\"invalid poly\");\n    }\n}\nexports.default = default_1;\n/**\n * @private\n */\nfunction polygonToLine(poly, options) {\n    if (options === void 0) { options = {}; }\n    var geom = invariant_1.getGeom(poly);\n    var type = geom.type;\n    var coords = geom.coordinates;\n    var properties = options.properties ? options.properties : poly.type === \"Feature\" ? poly.properties : {};\n    return coordsToLine(coords, properties);\n}\nexports.polygonToLine = polygonToLine;\n/**\n * @private\n */\nfunction multiPolygonToLine(multiPoly, options) {\n    if (options === void 0) { options = {}; }\n    var geom = invariant_1.getGeom(multiPoly);\n    var type = geom.type;\n    var coords = geom.coordinates;\n    var properties = options.properties ? options.properties :\n        multiPoly.type === \"Feature\" ? multiPoly.properties : {};\n    var lines = [];\n    coords.forEach(function (coord) {\n        lines.push(coordsToLine(coord, properties));\n    });\n    return helpers_1.featureCollection(lines);\n}\nexports.multiPolygonToLine = multiPolygonToLine;\n/**\n * @private\n */\nfunction coordsToLine(coords, properties) {\n    if (coords.length > 1) {\n        return helpers_1.multiLineString(coords, properties);\n    }\n    return helpers_1.lineString(coords[0], properties);\n}\nexports.coordsToLine = coordsToLine;\n\n},{\"@turf/helpers\":123,\"@turf/invariant\":125}],132:[function(require,module,exports){\nvar asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n\n},{\"./asn1/api\":133,\"./asn1/base\":135,\"./asn1/constants\":139,\"./asn1/decoders\":141,\"./asn1/encoders\":144,\"bn.js\":147}],133:[function(require,module,exports){\nvar asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n  var named;\n  try {\n    named = require('vm').runInThisContext(\n      '(function ' + this.name + '(entity) {\\n' +\n      '  this._initNamed(entity);\\n' +\n      '})'\n    );\n  } catch (e) {\n    named = function (entity) {\n      this._initNamed(entity);\n    };\n  }\n  inherits(named, base);\n  named.prototype._initNamed = function initnamed(entity) {\n    base.call(this, entity);\n  };\n\n  return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n\n},{\"../asn1\":132,\"inherits\":262,\"vm\":344}],134:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  var res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  var res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!(item instanceof EncoderBuffer))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = new Buffer(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n\n},{\"../base\":135,\"buffer\":182,\"inherits\":262}],135:[function(require,module,exports){\nvar base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n\n},{\"./buffer\":134,\"./node\":136,\"./reporter\":137}],136:[function(require,module,exports){\nvar Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n  var state = {};\n  this._baseState = state;\n\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  var state = this._baseState;\n  var cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  var res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  var state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      var clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  var state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  var state = this._baseState;\n\n  // Filter children and args\n  var children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      var res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        var value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    var state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    var state = this._baseState;\n    var args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  var state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  var state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  var state = this._baseState;\n  var args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  var state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  var state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  var state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  var result = state['default'];\n  var present = true;\n\n  var prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    var tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      var save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  var prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      var explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    var start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      if (state.any)\n        var save = input.save();\n      var body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any)\n      result = result;\n    else if (state.choice === null)\n      result = this._decodeGeneric(state.tag, input, options);\n    else\n      result = this._decodeChoice(input, options);\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      var data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n          ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  var state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n        ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  var state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  var state = this._baseState;\n  var result = null;\n  var match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    var save = input.save();\n    var node = state.choice[key];\n    try {\n      var value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  var state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  var result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  var result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default']\n    else\n      return;\n  }\n\n  // Encode children first\n  var content = null;\n  var primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      var prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      var res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      var child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        var state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  var result;\n  if (!state.any && state.choice === null) {\n    var tag = state.implicit !== null ? state.implicit : state.tag;\n    var cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  var state = this._baseState;\n\n  var node = state.choice[data.type];\n  if (!node) {\n    assert(\n        false,\n        data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  var state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n\n},{\"../base\":135,\"minimalistic-assert\":268}],137:[function(require,module,exports){\nvar inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  var state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  var state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  var state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  var state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  var state = this._reporterState;\n\n  var prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  var state = this._reporterState;\n\n  var now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  var err;\n  var state = this._reporterState;\n\n  var inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  var state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n\n},{\"inherits\":262}],138:[function(require,module,exports){\nvar constants = require('../constants');\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n\n},{\"../constants\":139}],139:[function(require,module,exports){\nvar constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  var res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    var value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n\n},{\"./der\":138}],140:[function(require,module,exports){\nvar inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!(data instanceof base.DecoderBuffer))\n    data = new base.DecoderBuffer(data, options);\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  var state = buffer.save();\n  var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  var decodedTag = derDecodeTag(buffer,\n                                'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  var len = derDecodeLen(buffer,\n                         decodedTag.primitive,\n                         'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  var state = buffer.save();\n  var res = this._skipUntilEnd(\n      buffer,\n      'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  while (true) {\n    var tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    var len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    var res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len)\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n                                                    options) {\n  var result = [];\n  while (!buffer.isEmpty()) {\n    var possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    var res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    var unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    var raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    var str = '';\n    for (var i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    var numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    var printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  var result;\n  var identifiers = [];\n  var ident = 0;\n  while (!buffer.isEmpty()) {\n    var subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  var first = (identifiers[0] / 40) | 0;\n  var second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    var tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  var str = buffer.raw().toString();\n  if (tag === 'gentime') {\n    var year = str.slice(0, 4) | 0;\n    var mon = str.slice(4, 6) | 0;\n    var day = str.slice(6, 8) | 0;\n    var hour = str.slice(8, 10) | 0;\n    var min = str.slice(10, 12) | 0;\n    var sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    var year = str.slice(0, 2) | 0;\n    var mon = str.slice(2, 4) | 0;\n    var day = str.slice(4, 6) | 0;\n    var hour = str.slice(6, 8) | 0;\n    var min = str.slice(8, 10) | 0;\n    var sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  var res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  var raw = buffer.raw();\n  var res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  var tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  var cls = der.tagClass[tag >> 6];\n  var primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    var oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  var tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  var len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  var num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (var i = 0; i < num; i++) {\n    len <<= 8;\n    var j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n\n},{\"../../asn1\":132,\"inherits\":262}],141:[function(require,module,exports){\nvar decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n\n},{\"./der\":140,\"./pem\":142}],142:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  var lines = data.toString().split(/[\\r\\n]+/g);\n\n  var label = options.label.toUpperCase();\n\n  var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  var start = -1;\n  var end = -1;\n  for (var i = 0; i < lines.length; i++) {\n    var match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  var base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n  var input = new Buffer(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n\n},{\"./der\":140,\"buffer\":182,\"inherits\":262}],143:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n                                                              primitive,\n                                                              cls,\n                                                              content) {\n  var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    var header = new Buffer(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  var lenOctets = 1;\n  for (var i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  var header = new Buffer(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    var buf = new Buffer(str.length * 2);\n    for (var i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s\\.]+/g);\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  var size = 0;\n  for (var i = 0; i < id.length; i++) {\n    var ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  var objid = new Buffer(size);\n  var offset = objid.length - 1;\n  for (var i = id.length - 1; i >= 0; i--) {\n    var ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  var str;\n  var date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    var numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = new Buffer(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    var size = num.length;\n    if (num.length === 0)\n      size++;\n\n    var out = new Buffer(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  var size = 1;\n  for (var i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  var out = new Array(size);\n  for (var i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  var state = this._baseState;\n  var i;\n  if (state['default'] === null)\n    return false;\n\n  var data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  var res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n\n},{\"../../asn1\":132,\"buffer\":182,\"inherits\":262}],144:[function(require,module,exports){\nvar encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n\n},{\"./der\":143,\"./pem\":145}],145:[function(require,module,exports){\nvar inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  var buf = DEREncoder.prototype.encode.call(this, data);\n\n  var p = buf.toString('base64');\n  var out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (var i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n\n},{\"./der\":143,\"inherits\":262}],146:[function(require,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n},{}],147:[function(require,module,exports){\n(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    Buffer = require('buffer').Buffer;\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n    }\n\n    if (base === 16) {\n      this._parseHex(number, start);\n    } else {\n      this._parseBase(number, base, start);\n    }\n\n    if (number[0] === '-') {\n      this.negative = 1;\n    }\n\n    this.strip();\n\n    if (endian !== 'le') return;\n\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex (str, start, end) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r <<= 4;\n\n      // 'a' - 'f'\n      if (c >= 49 && c <= 54) {\n        r |= c - 49 + 0xa;\n\n      // 'A' - 'F'\n      } else if (c >= 17 && c <= 22) {\n        r |= c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r |= c & 0xf;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    // Scan 24-bit chunks and add them to the number\n    var off = 0;\n    for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n      w = parseHex(number, i, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n      off += 24;\n      if (off >= 26) {\n        off -= 26;\n        j++;\n      }\n    }\n    if (i + 6 !== start) {\n      w = parseHex(number, start, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n    }\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      r.strip();\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n\n},{\"buffer\":149}],148:[function(require,module,exports){\nvar r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n\n},{\"crypto\":149}],149:[function(require,module,exports){\n\n},{}],150:[function(require,module,exports){\n// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n  var len = (buf.length / 4) | 0\n  var out = new Array(len)\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n\n  return out\n}\n\nfunction scrubVec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0]\n  var SUB_MIX1 = SUB_MIX[1]\n  var SUB_MIX2 = SUB_MIX[2]\n  var SUB_MIX3 = SUB_MIX[3]\n\n  var s0 = M[0] ^ keySchedule[0]\n  var s1 = M[1] ^ keySchedule[1]\n  var s2 = M[2] ^ keySchedule[2]\n  var s3 = M[3] ^ keySchedule[3]\n  var t0, t1, t2, t3\n  var ksRow = 4\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  t0 = t0 >>> 0\n  t1 = t1 >>> 0\n  t2 = t2 >>> 0\n  t3 = t3 >>> 0\n\n  return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n  // Compute double table\n  var d = new Array(256)\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1\n    } else {\n      d[j] = (j << 1) ^ 0x11b\n    }\n  }\n\n  var SBOX = []\n  var INV_SBOX = []\n  var SUB_MIX = [[], [], [], []]\n  var INV_SUB_MIX = [[], [], [], []]\n\n  // Walk GF(2^8)\n  var x = 0\n  var xi = 0\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    SBOX[x] = sx\n    INV_SBOX[sx] = x\n\n    // Compute multiplication\n    var x2 = d[x]\n    var x4 = d[x2]\n    var x8 = d[x4]\n\n    // Compute sub bytes, mix columns tables\n    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    SUB_MIX[3][x] = t\n\n    // Compute inv sub bytes, inv mix columns tables\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    INV_SUB_MIX[3][sx] = t\n\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  }\n})()\n\nfunction AES (key) {\n  this._key = asUInt32Array(key)\n  this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n  var keyWords = this._key\n  var keySize = keyWords.length\n  var nRounds = keySize + 6\n  var ksRows = (nRounds + 1) * 4\n\n  var keySchedule = []\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k]\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1]\n\n    if (k % keySize === 0) {\n      t = (t << 8) | (t >>> 24)\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n\n      t ^= RCON[(k / keySize) | 0] << 24\n    } else if (keySize > 6 && k % keySize === 4) {\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t\n  }\n\n  var invKeySchedule = []\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt\n    } else {\n      invKeySchedule[ik] =\n        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n    }\n  }\n\n  this._nRounds = nRounds\n  this._keySchedule = keySchedule\n  this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M)\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M)\n\n  // swap\n  var m1 = M[1]\n  M[1] = M[3]\n  M[3] = m1\n\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule)\n  scrubVec(this._invKeySchedule)\n  scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n\n},{\"safe-buffer\":318}],151:[function(require,module,exports){\nvar aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) out++\n\n  var len = Math.min(a.length, b.length)\n  for (var i = 0; i < len; ++i) {\n    out += (a[i] ^ b[i])\n  }\n\n  return out\n}\n\nfunction calcIv (self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n  }\n  var ghash = new GHASH(ck)\n  var len = iv.length\n  var toPad = len % 16\n  ghash.update(iv)\n  if (toPad) {\n    toPad = 16 - toPad\n    ghash.update(Buffer.alloc(toPad, 0))\n  }\n  ghash.update(Buffer.alloc(8, 0))\n  var ivBits = len * 8\n  var tail = Buffer.alloc(8)\n  tail.writeUIntBE(ivBits, 0, 8)\n  ghash.update(tail)\n  self._finID = ghash.state\n  var out = Buffer.from(self._finID)\n  incr32(out)\n  return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  var h = Buffer.alloc(4, 0)\n\n  this._cipher = new aes.AES(key)\n  var ck = this._cipher.encryptBlock(h)\n  this._ghash = new GHASH(ck)\n  iv = calcIv(this, iv, ck)\n\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  this._mode = mode\n\n  this._authTag = null\n  this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0)\n      this._ghash.update(rump)\n    }\n  }\n\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n  this._authTag = tag\n  this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n  return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n  this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n  this._ghash.update(buf)\n  this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n\n},{\"./aes\":150,\"./ghash\":155,\"./incr32\":156,\"buffer-xor\":181,\"cipher-base\":184,\"inherits\":262,\"safe-buffer\":318}],152:[function(require,module,exports){\nvar ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n  return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n\n},{\"./decrypter\":153,\"./encrypter\":154,\"./modes/list.json\":164}],153:[function(require,module,exports){\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n  var padded = last[15]\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data')\n  }\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) return\n\n  return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true)\n  }\n\n  return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n\n},{\"./aes\":150,\"./authCipher\":151,\"./modes\":163,\"./streamCipher\":166,\"cipher-base\":184,\"evp_bytestokey\":222,\"inherits\":262,\"safe-buffer\":318}],154:[function(require,module,exports){\nvar MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n\n  return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = Buffer.allocUnsafe(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n\n  return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv)\n  }\n\n  return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n\n},{\"./aes\":150,\"./authCipher\":151,\"./modes\":163,\"./streamCipher\":166,\"cipher-base\":184,\"evp_bytestokey\":222,\"inherits\":262,\"safe-buffer\":318}],155:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\n\nfunction fromArray (out) {\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0] >>> 0, 0)\n  buf.writeUInt32BE(out[1] >>> 0, 4)\n  buf.writeUInt32BE(out[2] >>> 0, 8)\n  buf.writeUInt32BE(out[3] >>> 0, 12)\n  return buf\n}\n\nfunction GHASH (key) {\n  this.h = key\n  this.state = Buffer.alloc(16, 0)\n  this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsbVi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0]\n      Zi[1] ^= Vi[1]\n      Zi[2] ^= Vi[2]\n      Zi[3] ^= Vi[3]\n    }\n\n    // Store the value of LSB(V_i)\n    lsbVi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]))\n  return this.state\n}\n\nmodule.exports = GHASH\n\n},{\"safe-buffer\":318}],156:[function(require,module,exports){\nfunction incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\nmodule.exports = incr32\n\n},{}],157:[function(require,module,exports){\nvar xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n\n},{\"buffer-xor\":181}],158:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0)\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = Buffer.allocUnsafe(0)\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\n\n},{\"buffer-xor\":181,\"safe-buffer\":318}],159:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\n\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = Buffer.allocUnsafe(buffer.length)\n  buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n\n},{\"safe-buffer\":318}],160:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n\n  self._prev = Buffer.concat([\n    self._prev.slice(1),\n    Buffer.from([decrypt ? byteParam : out])\n  ])\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n\n},{\"safe-buffer\":318}],161:[function(require,module,exports){\nvar xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlockRaw(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize)\n  var start = self._cache.length\n  self._cache = Buffer.concat([\n    self._cache,\n    Buffer.allocUnsafe(chunkNum * blockSize)\n  ])\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self)\n    var offset = start + i * blockSize\n    self._cache.writeUInt32BE(out[0], offset + 0)\n    self._cache.writeUInt32BE(out[1], offset + 4)\n    self._cache.writeUInt32BE(out[2], offset + 8)\n    self._cache.writeUInt32BE(out[3], offset + 12)\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n\n},{\"../incr32\":156,\"buffer-xor\":181,\"safe-buffer\":318}],162:[function(require,module,exports){\nexports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n\n},{}],163:[function(require,module,exports){\nvar modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n\n},{\"./cbc\":157,\"./cfb\":158,\"./cfb1\":159,\"./cfb8\":160,\"./ctr\":161,\"./ecb\":162,\"./list.json\":164,\"./ofb\":165}],164:[function(require,module,exports){\nmodule.exports={\n  \"aes-128-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-192-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-256-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-192-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-256-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes128\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes192\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes256\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-192-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-256-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  }\n}\n\n},{}],165:[function(require,module,exports){\n(function (Buffer){\nvar xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182,\"buffer-xor\":181}],166:[function(require,module,exports){\nvar aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n\n},{\"./aes\":150,\"cipher-base\":184,\"inherits\":262,\"safe-buffer\":318}],167:[function(require,module,exports){\nvar DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n\n},{\"browserify-aes/browser\":152,\"browserify-aes/modes\":163,\"browserify-des\":168,\"browserify-des/modes\":169,\"evp_bytestokey\":222}],168:[function(require,module,exports){\nvar CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key)\n  }\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv)\n  }\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return Buffer.from(this._des.final())\n}\n\n},{\"cipher-base\":184,\"des.js\":195,\"inherits\":262,\"safe-buffer\":318}],169:[function(require,module,exports){\nexports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n\n},{}],170:[function(require,module,exports){\n(function (Buffer){\nvar bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n  var r = getr(priv);\n  var blinder = r.toRed(bn.mont(priv.modulus))\n  .redPow(new bn(priv.publicExponent)).fromRed();\n  return {\n    blinder: blinder,\n    unblinder:r.invm(priv.modulus)\n  };\n}\nfunction crt(msg, priv) {\n  var blinds = blind(priv);\n  var len = priv.modulus.byteLength();\n  var mod = bn.mont(priv.modulus);\n  var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n  var c1 = blinded.toRed(bn.mont(priv.prime1));\n  var c2 = blinded.toRed(bn.mont(priv.prime2));\n  var qinv = priv.coefficient;\n  var p = priv.prime1;\n  var q = priv.prime2;\n  var m1 = c1.redPow(priv.exponent1);\n  var m2 = c2.redPow(priv.exponent2);\n  m1 = m1.fromRed();\n  m2 = m2.fromRed();\n  var h = m1.isub(m2).imul(qinv).umod(p);\n  h.imul(q);\n  m2.iadd(h);\n  return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n  var len = priv.modulus.byteLength();\n  var r = new bn(randomBytes(len));\n  while (r.cmp(priv.modulus) >=  0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n    r = new bn(randomBytes(len));\n  }\n  return r;\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":147,\"buffer\":182,\"randombytes\":298}],171:[function(require,module,exports){\nmodule.exports = require('./browser/algorithms.json')\n\n},{\"./browser/algorithms.json\":172}],172:[function(require,module,exports){\nmodule.exports={\n  \"sha224WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"RSA-SHA224\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"sha256WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"RSA-SHA256\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"sha384WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"RSA-SHA384\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"sha512WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA512\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA1\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"3021300906052b0e03021a05000414\"\n  },\n  \"ecdsa-with-SHA1\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"sha256\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"sha224\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"sha384\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"sha512\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA1\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-RIPEMD160\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"\"\n  },\n  \"ripemd160WithRSA\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"RSA-RIPEMD160\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"md5WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  },\n  \"RSA-MD5\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  }\n}\n\n},{}],173:[function(require,module,exports){\nmodule.exports={\n  \"1.3.132.0.10\": \"secp256k1\",\n  \"1.3.132.0.33\": \"p224\",\n  \"1.2.840.10045.3.1.1\": \"p192\",\n  \"1.2.840.10045.3.1.7\": \"p256\",\n  \"1.3.132.0.34\": \"p384\",\n  \"1.3.132.0.35\": \"p521\"\n}\n\n},{}],174:[function(require,module,exports){\n(function (Buffer){\nvar createHash = require('create-hash')\nvar stream = require('stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = new Buffer(algorithms[key].id, 'hex')\n  algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hashType = data.hash\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nSign.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n  this.end()\n  var hash = this._hash.digest()\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n  return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n  if (typeof sig === 'string') sig = new Buffer(sig, enc)\n\n  this.end()\n  var hash = this._hash.digest()\n  return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n  return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n  return new Verify(algorithm)\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./algorithms.json\":172,\"./sign\":175,\"./verify\":176,\"buffer\":182,\"create-hash\":188,\"inherits\":262,\"stream\":328}],175:[function(require,module,exports){\n(function (Buffer){\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key)\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n    return ecSign(hash, priv)\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong private key type')\n    return dsaSign(hash, priv, hashType)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = priv.modulus.byteLength()\n  var pad = [ 0, 1 ]\n  while (hash.length + pad.length + 1 < len) pad.push(0xff)\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) pad.push(hash[i])\n\n  var out = crt(pad, priv)\n  return out\n}\n\nfunction ecSign (hash, priv) {\n  var curveId = curves[priv.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var key = curve.keyFromPrivate(priv.privateKey)\n  var out = key.sign(hash)\n\n  return new Buffer(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n  var x = priv.params.priv_key\n  var p = priv.params.p\n  var q = priv.params.q\n  var g = priv.params.g\n  var r = new BN(0)\n  var k\n  var H = bits2int(hash, q).mod(q)\n  var s = false\n  var kv = getKey(x, q, hash, algo)\n  while (s === false) {\n    k = makeKey(q, kv, algo)\n    r = makeR(g, k, p, q)\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n    if (s.cmpn(0) === 0) {\n      s = false\n      r = new BN(0)\n    }\n  }\n  return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n  r = r.toArray()\n  s = s.toArray()\n\n  // Pad values\n  if (r[0] & 0x80) r = [ 0 ].concat(r)\n  if (s[0] & 0x80) s = [ 0 ].concat(s)\n\n  var total = r.length + s.length + 4\n  var res = [ 0x30, total, 0x02, r.length ]\n  res = res.concat(r, [ 0x02, s.length ], s)\n  return new Buffer(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n  x = new Buffer(x.toArray())\n  if (x.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - x.length)\n    zeros.fill(0)\n    x = Buffer.concat([ zeros, x ])\n  }\n  var hlen = hash.length\n  var hbits = bits2octets(hash, q)\n  var v = new Buffer(hlen)\n  v.fill(1)\n  var k = new Buffer(hlen)\n  k.fill(0)\n  k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n  var bits = new BN(obits)\n  var shift = (obits.length << 3) - q.bitLength()\n  if (shift > 0) bits.ishrn(shift)\n  return bits\n}\n\nfunction bits2octets (bits, q) {\n  bits = bits2int(bits, q)\n  bits = bits.mod(q)\n  var out = new Buffer(bits.toArray())\n  if (out.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - out.length)\n    zeros.fill(0)\n    out = Buffer.concat([ zeros, out ])\n  }\n  return out\n}\n\nfunction makeKey (q, kv, algo) {\n  var t\n  var k\n\n  do {\n    t = new Buffer(0)\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n      t = Buffer.concat([ t, kv.v ])\n    }\n\n    k = bits2int(t, q)\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n  } while (k.cmp(q) !== -1)\n\n  return k\n}\n\nfunction makeR (g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./curves.json\":173,\"bn.js\":147,\"browserify-rsa\":170,\"buffer\":182,\"create-hmac\":190,\"elliptic\":205,\"parse-asn1\":275}],176:[function(require,module,exports){\n(function (Buffer){\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n  var pub = parseKeys(key)\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n    return ecVerify(sig, hash, pub)\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong public key type')\n    return dsaVerify(sig, hash, pub)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = pub.modulus.byteLength()\n  var pad = [ 1 ]\n  var padNum = 0\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff)\n    padNum++\n  }\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) {\n    pad.push(hash[i])\n  }\n  pad = new Buffer(pad)\n  var red = BN.mont(pub.modulus)\n  sig = new BN(sig).toRed(red)\n\n  sig = sig.redPow(new BN(pub.publicExponent))\n  sig = new Buffer(sig.fromRed().toArray())\n  var out = padNum < 8 ? 1 : 0\n  len = Math.min(sig.length, pad.length)\n  if (sig.length !== pad.length) out = 1\n\n  i = -1\n  while (++i < len) out |= sig[i] ^ pad[i]\n  return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var pubkey = pub.data.subjectPrivateKey.data\n\n  return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n  var p = pub.data.p\n  var q = pub.data.q\n  var g = pub.data.g\n  var y = pub.data.pub_key\n  var unpacked = parseKeys.signature.decode(sig, 'der')\n  var s = unpacked.s\n  var r = unpacked.r\n  checkValue(s, q)\n  checkValue(r, q)\n  var montp = BN.mont(p)\n  var w = s.invm(q)\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q)\n  return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n  if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n  if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./curves.json\":173,\"bn.js\":147,\"buffer\":182,\"elliptic\":205,\"parse-asn1\":275}],177:[function(require,module,exports){\narguments[4][149][0].apply(exports,arguments)\n},{\"dup\":149}],178:[function(require,module,exports){\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":182}],179:[function(require,module,exports){\n'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return -1;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// UTF-8 replacement characters ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd'.repeat(p);\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd'.repeat(p + 1);\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd'.repeat(p + 2);\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character for each buffered byte of a (partial)\n// character needs to be added to the output.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd'.repeat(this.lastTotal - this.lastNeed);\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n},{\"safe-buffer\":178}],180:[function(require,module,exports){\n(function (Buffer){\nvar toString = Object.prototype.toString\n\nvar isModern = (\n  typeof Buffer.alloc === 'function' &&\n  typeof Buffer.allocUnsafe === 'function' &&\n  typeof Buffer.from === 'function'\n)\n\nfunction isArrayBuffer (input) {\n  return toString.call(input).slice(8, -1) === 'ArrayBuffer'\n}\n\nfunction fromArrayBuffer (obj, byteOffset, length) {\n  byteOffset >>>= 0\n\n  var maxLength = obj.byteLength - byteOffset\n\n  if (maxLength < 0) {\n    throw new RangeError(\"'offset' is out of bounds\")\n  }\n\n  if (length === undefined) {\n    length = maxLength\n  } else {\n    length >>>= 0\n\n    if (length > maxLength) {\n      throw new RangeError(\"'length' is out of bounds\")\n    }\n  }\n\n  return isModern\n    ? Buffer.from(obj.slice(byteOffset, byteOffset + length))\n    : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  return isModern\n    ? Buffer.from(string, encoding)\n    : new Buffer(string, encoding)\n}\n\nfunction bufferFrom (value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (isArrayBuffer(value)) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  return isModern\n    ? Buffer.from(value)\n    : new Buffer(value)\n}\n\nmodule.exports = bufferFrom\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182}],181:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182}],182:[function(require,module,exports){\n(function (Buffer){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol.for === 'function')\n    ? Symbol.for('nodejs.util.inspect.custom')\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    var proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n    Buffer[Symbol.species] === Buffer) {\n  Object.defineProperty(Buffer, Symbol.species, {\n    value: null,\n    configurable: true,\n    enumerable: false,\n    writable: false\n  })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayLike(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      buf = Buffer.from(buf)\n    }\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  var strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n        : (firstByte > 0xBF) ? 2\n          : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (var i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    var len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n  var alphabet = '0123456789abcdef'\n  var table = new Array(256)\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"base64-js\":146,\"buffer\":182,\"ieee754\":241}],183:[function(require,module,exports){\nmodule.exports = {\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Unordered Collection\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n}\n\n},{}],184:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n  Transform.call(this)\n  this.hashMode = typeof hashMode === 'string'\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest\n  } else {\n    this.final = this._finalOrDigest\n  }\n  if (this._final) {\n    this.__final = this._final\n    this._final = null\n  }\n  this._decoder = null\n  this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc)\n  }\n\n  var outData = this._update(data)\n  if (this.hashMode) return this\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc)\n  }\n\n  return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err\n  try {\n    if (this.hashMode) {\n      this._update(data)\n    } else {\n      this.push(this._update(data))\n    }\n  } catch (e) {\n    err = e\n  } finally {\n    next(err)\n  }\n}\nCipherBase.prototype._flush = function (done) {\n  var err\n  try {\n    this.push(this.__final())\n  } catch (e) {\n    err = e\n  }\n\n  done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0)\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true)\n  }\n  return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc)\n    this._encoding = enc\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n  var out = this._decoder.write(value)\n  if (fin) {\n    out += this._decoder.end()\n  }\n\n  return out\n}\n\nmodule.exports = CipherBase\n\n},{\"inherits\":262,\"safe-buffer\":318,\"stream\":328,\"string_decoder\":179}],185:[function(require,module,exports){\n(function (Buffer){\nvar Writable = require('readable-stream').Writable\nvar inherits = require('inherits')\nvar bufferFrom = require('buffer-from')\n\nif (typeof Uint8Array === 'undefined') {\n  var U8 = require('typedarray').Uint8Array\n} else {\n  var U8 = Uint8Array\n}\n\nfunction ConcatStream(opts, cb) {\n  if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)\n\n  if (typeof opts === 'function') {\n    cb = opts\n    opts = {}\n  }\n  if (!opts) opts = {}\n\n  var encoding = opts.encoding\n  var shouldInferEncoding = false\n\n  if (!encoding) {\n    shouldInferEncoding = true\n  } else {\n    encoding =  String(encoding).toLowerCase()\n    if (encoding === 'u8' || encoding === 'uint8') {\n      encoding = 'uint8array'\n    }\n  }\n\n  Writable.call(this, { objectMode: true })\n\n  this.encoding = encoding\n  this.shouldInferEncoding = shouldInferEncoding\n\n  if (cb) this.on('finish', function () { cb(this.getBody()) })\n  this.body = []\n}\n\nmodule.exports = ConcatStream\ninherits(ConcatStream, Writable)\n\nConcatStream.prototype._write = function(chunk, enc, next) {\n  this.body.push(chunk)\n  next()\n}\n\nConcatStream.prototype.inferEncoding = function (buff) {\n  var firstBuffer = buff === undefined ? this.body[0] : buff;\n  if (Buffer.isBuffer(firstBuffer)) return 'buffer'\n  if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'\n  if (Array.isArray(firstBuffer)) return 'array'\n  if (typeof firstBuffer === 'string') return 'string'\n  if (Object.prototype.toString.call(firstBuffer) === \"[object Object]\") return 'object'\n  return 'buffer'\n}\n\nConcatStream.prototype.getBody = function () {\n  if (!this.encoding && this.body.length === 0) return []\n  if (this.shouldInferEncoding) this.encoding = this.inferEncoding()\n  if (this.encoding === 'array') return arrayConcat(this.body)\n  if (this.encoding === 'string') return stringConcat(this.body)\n  if (this.encoding === 'buffer') return bufferConcat(this.body)\n  if (this.encoding === 'uint8array') return u8Concat(this.body)\n  return this.body\n}\n\nvar isArray = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]'\n}\n\nfunction isArrayish (arr) {\n  return /Array\\]$/.test(Object.prototype.toString.call(arr))\n}\n\nfunction isBufferish (p) {\n  return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function')\n}\n\nfunction stringConcat (parts) {\n  var strings = []\n  var needsToString = false\n  for (var i = 0; i < parts.length; i++) {\n    var p = parts[i]\n    if (typeof p === 'string') {\n      strings.push(p)\n    } else if (Buffer.isBuffer(p)) {\n      strings.push(p)\n    } else if (isBufferish(p)) {\n      strings.push(bufferFrom(p))\n    } else {\n      strings.push(bufferFrom(String(p)))\n    }\n  }\n  if (Buffer.isBuffer(parts[0])) {\n    strings = Buffer.concat(strings)\n    strings = strings.toString('utf8')\n  } else {\n    strings = strings.join('')\n  }\n  return strings\n}\n\nfunction bufferConcat (parts) {\n  var bufs = []\n  for (var i = 0; i < parts.length; i++) {\n    var p = parts[i]\n    if (Buffer.isBuffer(p)) {\n      bufs.push(p)\n    } else if (isBufferish(p)) {\n      bufs.push(bufferFrom(p))\n    } else {\n      bufs.push(bufferFrom(String(p)))\n    }\n  }\n  return Buffer.concat(bufs)\n}\n\nfunction arrayConcat (parts) {\n  var res = []\n  for (var i = 0; i < parts.length; i++) {\n    res.push.apply(res, parts[i])\n  }\n  return res\n}\n\nfunction u8Concat (parts) {\n  var len = 0\n  for (var i = 0; i < parts.length; i++) {\n    if (typeof parts[i] === 'string') {\n      parts[i] = bufferFrom(parts[i])\n    }\n    len += parts[i].length\n  }\n  var u8 = new U8(len)\n  for (var i = 0, offset = 0; i < parts.length; i++) {\n    var part = parts[i]\n    for (var j = 0; j < part.length; j++) {\n      u8[offset++] = part[j]\n    }\n  }\n  return u8\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182,\"buffer-from\":180,\"inherits\":262,\"readable-stream\":312,\"typedarray\":337}],186:[function(require,module,exports){\n(function (Buffer){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n}).call(this,{\"isBuffer\":require(\"../../is-buffer/index.js\")})\n},{\"../../is-buffer/index.js\":263}],187:[function(require,module,exports){\n(function (Buffer){\nvar elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n  return new ECDH(curve)\n}\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n  this.curveType = aliases[curve]\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    }\n  }\n  this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n  this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair()\n  return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8'\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc)\n  }\n  var otherPub = this.curve.keyFromPublic(other).getPublic()\n  var out = otherPub.mul(this.keys.getPrivate()).getX()\n  return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true)\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7\n    } else {\n      key[0] = 6\n    }\n  }\n  return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc)\n  }\n  this.keys._importPublic(pub)\n  return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc)\n  }\n\n  var _priv = new BN(priv)\n  _priv = _priv.toString(16)\n  this.keys = this.curve.genKeyPair()\n  this.keys._importPrivate(_priv)\n  return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray()\n  }\n  var buf = new Buffer(bn)\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length)\n    zeros.fill(0)\n    buf = Buffer.concat([zeros, buf])\n  }\n  if (!enc) {\n    return buf\n  } else {\n    return buf.toString(enc)\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":147,\"buffer\":182,\"elliptic\":205}],188:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new MD5()\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n  return new Hash(sha(alg))\n}\n\n},{\"cipher-base\":184,\"inherits\":262,\"md5.js\":266,\"ripemd160\":317,\"sha.js\":320}],189:[function(require,module,exports){\nvar MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest()\n}\n\n},{\"md5.js\":266}],190:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n\n},{\"./legacy\":191,\"cipher-base\":184,\"create-hash/md5\":189,\"inherits\":262,\"ripemd160\":317,\"safe-buffer\":318,\"sha.js\":320}],191:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n\n},{\"cipher-base\":184,\"inherits\":262,\"safe-buffer\":318}],192:[function(require,module,exports){\n'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n  return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n  throw new Error([\n    'sorry, createCredentials is not implemented yet',\n    'we accept pull requests',\n    'https://github.com/crypto-browserify/crypto-browserify'\n  ].join('\\n'))\n}\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n}\n\n},{\"browserify-cipher\":167,\"browserify-sign\":174,\"browserify-sign/algos\":171,\"create-ecdh\":187,\"create-hash\":188,\"create-hmac\":190,\"diffie-hellman\":201,\"pbkdf2\":278,\"public-encrypt\":286,\"randombytes\":298,\"randomfill\":299}],193:[function(require,module,exports){\n// https://d3js.org/d3-array/ v1.2.4 Copyright 2018 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\ntypeof define === 'function' && define.amd ? define(['exports'], factory) :\n(factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) { 'use strict';\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction bisector(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n\nvar ascendingBisect = bisector(ascending);\nvar bisectRight = ascendingBisect.right;\nvar bisectLeft = ascendingBisect.left;\n\nfunction pairs(array, f) {\n  if (f == null) f = pair;\n  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n  while (i < n) pairs[i] = f(p, p = array[++i]);\n  return pairs;\n}\n\nfunction pair(a, b) {\n  return [a, b];\n}\n\nfunction cross(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n\nfunction descending(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\nfunction number(x) {\n  return x === null ? NaN : +x;\n}\n\nfunction variance(values, valueof) {\n  var n = values.length,\n      m = 0,\n      i = -1,\n      mean = 0,\n      value,\n      delta,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  if (m > 1) return sum / (m - 1);\n}\n\nfunction deviation(array, f) {\n  var v = variance(array, f);\n  return v ? Math.sqrt(v) : v;\n}\n\nfunction extent(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nvar array = Array.prototype;\n\nvar slice = array.slice;\nvar map = array.map;\n\nfunction constant(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction identity(x) {\n  return x;\n}\n\nfunction range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n\nvar e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction ticks(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nfunction tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n\nfunction sturges(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n\nfunction histogram() {\n  var value = identity,\n      domain = extent,\n      threshold = sturges;\n\n  function histogram(data) {\n    var i,\n        n = data.length,\n        x,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = tickStep(x0, x1, tz);\n      tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n    }\n\n    // Remove any thresholds outside the domain.\n    var m = tz.length;\n    while (tz[0] <= x0) tz.shift(), --m;\n    while (tz[m - 1] > x1) tz.pop(), --m;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    for (i = 0; i < n; ++i) {\n      x = values[i];\n      if (x0 <= x && x <= x1) {\n        bins[bisectRight(tz, x, 0, m)].push(data[i]);\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n  };\n\n  return histogram;\n}\n\nfunction quantile(values, p, valueof) {\n  if (valueof == null) valueof = number;\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction freedmanDiaconis(values, min, max) {\n  values = map.call(values, number).sort(ascending);\n  return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n}\n\nfunction scott(values, min, max) {\n  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n}\n\nfunction max(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n}\n\nfunction mean(values, valueof) {\n  var n = values.length,\n      m = n,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) sum += value;\n      else --m;\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;\n      else --m;\n    }\n  }\n\n  if (m) return sum / m;\n}\n\nfunction median(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      numbers = [];\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  return quantile(numbers.sort(ascending), 0.5);\n}\n\nfunction merge(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n\nfunction min(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  return min;\n}\n\nfunction permute(array, indexes) {\n  var i = indexes.length, permutes = new Array(i);\n  while (i--) permutes[i] = array[indexes[i]];\n  return permutes;\n}\n\nfunction scan(values, compare) {\n  if (!(n = values.length)) return;\n  var n,\n      i = 0,\n      j = 0,\n      xi,\n      xj = values[j];\n\n  if (compare == null) compare = ascending;\n\n  while (++i < n) {\n    if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n      xj = xi, j = i;\n    }\n  }\n\n  if (compare(xj, xj) === 0) return j;\n}\n\nfunction shuffle(array, i0, i1) {\n  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m + i0];\n    array[m + i0] = array[i + i0];\n    array[i + i0] = t;\n  }\n\n  return array;\n}\n\nfunction sum(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (value = +valueof(values[i], i, values)) sum += value;\n    }\n  }\n\n  return sum;\n}\n\nfunction transpose(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n}\n\nfunction length(d) {\n  return d.length;\n}\n\nfunction zip() {\n  return transpose(arguments);\n}\n\nexports.bisect = bisectRight;\nexports.bisectRight = bisectRight;\nexports.bisectLeft = bisectLeft;\nexports.ascending = ascending;\nexports.bisector = bisector;\nexports.cross = cross;\nexports.descending = descending;\nexports.deviation = deviation;\nexports.extent = extent;\nexports.histogram = histogram;\nexports.thresholdFreedmanDiaconis = freedmanDiaconis;\nexports.thresholdScott = scott;\nexports.thresholdSturges = sturges;\nexports.max = max;\nexports.mean = mean;\nexports.median = median;\nexports.merge = merge;\nexports.min = min;\nexports.pairs = pairs;\nexports.permute = permute;\nexports.quantile = quantile;\nexports.range = range;\nexports.scan = scan;\nexports.shuffle = shuffle;\nexports.sum = sum;\nexports.ticks = ticks;\nexports.tickIncrement = tickIncrement;\nexports.tickStep = tickStep;\nexports.transpose = transpose;\nexports.variance = variance;\nexports.zip = zip;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{}],194:[function(require,module,exports){\n// https://d3js.org/d3-geo/ v1.11.6 Copyright 2019 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) :\ntypeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) :\n(factory((global.d3 = global.d3 || {}),global.d3));\n}(this, (function (exports,d3Array) { 'use strict';\n\n// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nfunction adder() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add(temp, y, this.t);\n    add(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n\nvar epsilon = 1e-6;\nvar epsilon2 = 1e-12;\nvar pi = Math.PI;\nvar halfPi = pi / 2;\nvar quarterPi = pi / 4;\nvar tau = pi * 2;\n\nvar degrees = 180 / pi;\nvar radians = pi / 180;\n\nvar abs = Math.abs;\nvar atan = Math.atan;\nvar atan2 = Math.atan2;\nvar cos = Math.cos;\nvar ceil = Math.ceil;\nvar exp = Math.exp;\nvar log = Math.log;\nvar pow = Math.pow;\nvar sin = Math.sin;\nvar sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nvar sqrt = Math.sqrt;\nvar tan = Math.tan;\n\nfunction acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nfunction asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nfunction haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n\nfunction noop() {}\n\nfunction streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nfunction geoStream(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n\nvar areaRingSum = adder();\n\nvar areaSum = adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum.reset();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nfunction area(object) {\n  areaSum.reset();\n  geoStream(object, areaStream);\n  return areaSum * 2;\n}\n\nfunction spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nfunction cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nfunction cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nfunction cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nfunction cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nfunction cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n\nvar lambda0$1, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00$1, phi00$1, // first point\n    p0, // previous 3D point\n    deltaSum = adder(),\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum.reset();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0$1, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign$$1 = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign$$1,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0$1) {\n        if (lambda < lambda0$1) lambda0$1 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0$1, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00$1 = lambda, phi00$1 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00$1, phi00$1);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0$1 = -(lambda1 = 180);\n  range[0] = lambda0$1, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nfunction bounds(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n  ranges = [];\n  geoStream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0$1 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0$1, phi0], [lambda1, phi1]];\n}\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00$2, phi00$2, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00$2, phi00$2);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00$2 = lambda, phi00$2 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = sqrt(cx * cx + cy * cy + cz * cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2 += v * cx;\n  Y2 += v * cy;\n  Z2 += v * cz;\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroid(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 =\n  X2 = Y2 = Z2 = 0;\n  geoStream(object, centroidStream);\n\n  var x = X2,\n      y = Y2,\n      z = Z2,\n      m = x * x + y * y + z * z;\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n    m = x * x + y * y + z * z;\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n\nfunction constant(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction compose(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nfunction rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nfunction rotation(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nfunction circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nfunction circle() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n\nfunction clipBuffer() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y) {\n      line.push([x, y]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n\nfunction pointEqual(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nfunction clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    // If the first and last points of a segment are coincident, then treat as a\n    // closed ring. TODO if all rings are closed, then the winding order of the\n    // exterior ring should be checked.\n    if (pointEqual(p0, p1)) {\n      stream.lineStart();\n      for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n      stream.lineEnd();\n      return;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n\nvar sum = adder();\n\nfunction longitude(point) {\n  if (abs(point[0]) <= pi)\n    return point[0];\n  else\n    return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nfunction polygonContains(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  sum.reset();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign$$1 = delta >= 0 ? 1 : -1,\n          absDelta = sign$$1 * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign$$1 * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign$$1 * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n\nfunction clip(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = d3Array.merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n\nvar clipAntimeridian = clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n\nfunction clipCircle(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        // Handle degeneracies.\n        // TODO ignore if not clipping polygons.\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n            point1[0] += epsilon;\n            point1[1] += epsilon;\n            v = visible(point1[0], point1[1]);\n          }\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1]);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n\nfunction clipLine(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nfunction clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = d3Array.merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n\nfunction extent() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 960,\n      y1 = 500,\n      cache,\n      cacheStream,\n      clip;\n\n  return clip = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n    },\n    extent: function(_) {\n      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n    }\n  };\n}\n\nvar lengthSum = adder(),\n    lambda0$2,\n    sinPhi0$1,\n    cosPhi0$1;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0$2 = lambda, sinPhi0$1 = sin(phi), cosPhi0$1 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0$2),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,\n      z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n}\n\nfunction length(object) {\n  lengthSum.reset();\n  geoStream(object, lengthStream);\n  return +lengthSum;\n}\n\nvar coordinates = [null, null],\n    object = {type: \"LineString\", coordinates: coordinates};\n\nfunction distance(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length(object);\n}\n\nvar containsObjectType = {\n  Feature: function(object, point) {\n    return containsGeometry(object.geometry, point);\n  },\n  FeatureCollection: function(object, point) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n    return false;\n  }\n};\n\nvar containsGeometryType = {\n  Sphere: function() {\n    return true;\n  },\n  Point: function(object, point) {\n    return containsPoint(object.coordinates, point);\n  },\n  MultiPoint: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n    return false;\n  },\n  LineString: function(object, point) {\n    return containsLine(object.coordinates, point);\n  },\n  MultiLineString: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\n    return false;\n  },\n  Polygon: function(object, point) {\n    return containsPolygon(object.coordinates, point);\n  },\n  MultiPolygon: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n    return false;\n  },\n  GeometryCollection: function(object, point) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n    return false;\n  }\n};\n\nfunction containsGeometry(geometry, point) {\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n      ? containsGeometryType[geometry.type](geometry, point)\n      : false;\n}\n\nfunction containsPoint(coordinates, point) {\n  return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n  var ao, bo, ab;\n  for (var i = 0, n = coordinates.length; i < n; i++) {\n    bo = distance(coordinates[i], point);\n    if (bo === 0) return true;\n    if (i > 0) {\n      ab = distance(coordinates[i], coordinates[i - 1]);\n      if (\n        ab > 0 &&\n        ao <= ab &&\n        bo <= ab &&\n        (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n      )\n        return true;\n    }\n    ao = bo;\n  }\n  return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n  return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n  return [point[0] * radians, point[1] * radians];\n}\n\nfunction contains(object, point) {\n  return (object && containsObjectType.hasOwnProperty(object.type)\n      ? containsObjectType[object.type]\n      : containsGeometry)(object, point);\n}\n\nfunction graticuleX(y0, y1, dy) {\n  var y = d3Array.range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = d3Array.range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nfunction graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return d3Array.range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(d3Array.range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(d3Array.range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(d3Array.range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nfunction graticule10() {\n  return graticule()();\n}\n\nfunction interpolate(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos(y0),\n      sy0 = sin(y0),\n      cy1 = cos(y1),\n      sy1 = sin(y1),\n      kx0 = cy0 * cos(x0),\n      ky0 = cy0 * sin(x0),\n      kx1 = cy1 * cos(x1),\n      ky1 = cy1 * sin(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin(t *= d) / k,\n        A = sin(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees,\n      atan2(z, sqrt(x * x + y * y)) * degrees\n    ];\n  } : function() {\n    return [x0 * degrees, y0 * degrees];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n\nfunction identity(x) {\n  return x;\n}\n\nvar areaSum$1 = adder(),\n    areaRingSum$1 = adder(),\n    x00,\n    y00,\n    x0$1,\n    y0$1;\n\nvar areaStream$1 = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream$1.lineStart = areaRingStart$1;\n    areaStream$1.lineEnd = areaRingEnd$1;\n  },\n  polygonEnd: function() {\n    areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop;\n    areaSum$1.add(abs(areaRingSum$1));\n    areaRingSum$1.reset();\n  },\n  result: function() {\n    var area = areaSum$1 / 2;\n    areaSum$1.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart$1() {\n  areaStream$1.point = areaPointFirst$1;\n}\n\nfunction areaPointFirst$1(x, y) {\n  areaStream$1.point = areaPoint$1;\n  x00 = x0$1 = x, y00 = y0$1 = y;\n}\n\nfunction areaPoint$1(x, y) {\n  areaRingSum$1.add(y0$1 * x - x0$1 * y);\n  x0$1 = x, y0$1 = y;\n}\n\nfunction areaRingEnd$1() {\n  areaPoint$1(x00, y00);\n}\n\nvar x0$2 = Infinity,\n    y0$2 = x0$2,\n    x1 = -x0$2,\n    y1 = x1;\n\nvar boundsStream$1 = {\n  point: boundsPoint$1,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0$2, y0$2], [x1, y1]];\n    x1 = y1 = -(y0$2 = x0$2 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint$1(x, y) {\n  if (x < x0$2) x0$2 = x;\n  if (x > x1) x1 = x;\n  if (y < y0$2) y0$2 = y;\n  if (y > y1) y1 = y;\n}\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0$1 = 0,\n    Y0$1 = 0,\n    Z0$1 = 0,\n    X1$1 = 0,\n    Y1$1 = 0,\n    Z1$1 = 0,\n    X2$1 = 0,\n    Y2$1 = 0,\n    Z2$1 = 0,\n    x00$1,\n    y00$1,\n    x0$3,\n    y0$3;\n\nvar centroidStream$1 = {\n  point: centroidPoint$1,\n  lineStart: centroidLineStart$1,\n  lineEnd: centroidLineEnd$1,\n  polygonStart: function() {\n    centroidStream$1.lineStart = centroidRingStart$1;\n    centroidStream$1.lineEnd = centroidRingEnd$1;\n  },\n  polygonEnd: function() {\n    centroidStream$1.point = centroidPoint$1;\n    centroidStream$1.lineStart = centroidLineStart$1;\n    centroidStream$1.lineEnd = centroidLineEnd$1;\n  },\n  result: function() {\n    var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n        : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n        : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n        : [NaN, NaN];\n    X0$1 = Y0$1 = Z0$1 =\n    X1$1 = Y1$1 = Z1$1 =\n    X2$1 = Y2$1 = Z2$1 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint$1(x, y) {\n  X0$1 += x;\n  Y0$1 += y;\n  ++Z0$1;\n}\n\nfunction centroidLineStart$1() {\n  centroidStream$1.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream$1.point = centroidPointLine;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);\n  X1$1 += z * (x0$3 + x) / 2;\n  Y1$1 += z * (y0$3 + y) / 2;\n  Z1$1 += z;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidLineEnd$1() {\n  centroidStream$1.point = centroidPoint$1;\n}\n\nfunction centroidRingStart$1() {\n  centroidStream$1.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd$1() {\n  centroidPointRing(x00$1, y00$1);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream$1.point = centroidPointRing;\n  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0$3,\n      dy = y - y0$3,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1$1 += z * (x0$3 + x) / 2;\n  Y1$1 += z * (y0$3 + y) / 2;\n  Z1$1 += z;\n\n  z = y0$3 * x - x0$3 * y;\n  X2$1 += z * (x0$3 + x);\n  Y2$1 += z * (y0$3 + y);\n  Z2$1 += z * 3;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n\nvar lengthSum$1 = adder(),\n    lengthRing,\n    x00$2,\n    y00$2,\n    x0$4,\n    y0$4;\n\nvar lengthStream$1 = {\n  point: noop,\n  lineStart: function() {\n    lengthStream$1.point = lengthPointFirst$1;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint$1(x00$2, y00$2);\n    lengthStream$1.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum$1;\n    lengthSum$1.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst$1(x, y) {\n  lengthStream$1.point = lengthPoint$1;\n  x00$2 = x0$4 = x, y00$2 = y0$4 = y;\n}\n\nfunction lengthPoint$1(x, y) {\n  x0$4 -= x, y0$4 -= y;\n  lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));\n  x0$4 = x, y0$4 = y;\n}\n\nfunction PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle$1(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle$1(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle$1(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n\nfunction index(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      geoStream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    geoStream(object, projectionStream(areaStream$1));\n    return areaStream$1.result();\n  };\n\n  path.measure = function(object) {\n    geoStream(object, projectionStream(lengthStream$1));\n    return lengthStream$1.result();\n  };\n\n  path.bounds = function(object) {\n    geoStream(object, projectionStream(boundsStream$1));\n    return boundsStream$1.result();\n  };\n\n  path.centroid = function(object) {\n    geoStream(object, projectionStream(centroidStream$1));\n    return centroidStream$1.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n\nfunction transform(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nfunction transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream$1));\n  fitBounds(boundsStream$1.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nfunction fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nfunction fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nfunction fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nfunction fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nfunction resample(project, delta2) {\n  return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample$1(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n  function transform$$1(x, y) {\n    return [dx + k * x, dy - k * y];\n  }\n  transform$$1.invert = function(x, y) {\n    return [(x - dx) / k, (dy - y) / k];\n  };\n  return transform$$1;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform$$1(x, y) {\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform$$1.invert = function(x, y) {\n    return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n  };\n  return transform$$1;\n}\n\nfunction projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nfunction projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n        transform$$1 = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform$$1);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n\nfunction conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n\nfunction cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n\nfunction conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y;\n    return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nfunction conicEqualArea() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n\nfunction albers() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nfunction albersUsa() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n\nfunction azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nfunction azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n\nvar azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nfunction azimuthalEqualArea() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n\nvar azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nfunction azimuthalEquidistant() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n\nfunction mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nfunction mercator() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nfunction mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nfunction conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n    return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nfunction conicConformal() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n\nfunction equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nfunction equirectangular() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n\nfunction conicEquidistantRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin(nx), g - gy * cos(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y;\n    return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nfunction conicEquidistant() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nfunction equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nfunction equalEarth() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n\nfunction gnomonicRaw(x, y) {\n  var cy = cos(y), k = cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nfunction gnomonic() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n\nfunction scaleTranslate$1(kx, ky, tx, ty) {\n  return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n    point: function(x, y) {\n      this.stream.point(x * kx + tx, y * ky + ty);\n    }\n  });\n}\n\nfunction identity$1() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity, // scale, translate and reflect\n      x0 = null, y0, x1, y1, // clip extent\n      postclip = identity,\n      cache,\n      cacheStream,\n      projection;\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return projection = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = transform$$1(postclip(cacheStream = stream));\n    },\n    postclip: function(_) {\n      return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n    },\n    clipExtent: function(_) {\n      return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n    },\n    scale: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n    },\n    translate: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n    },\n    reflectX: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n    },\n    reflectY: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n    },\n    fitExtent: function(extent, object) {\n      return fitExtent(projection, extent, object);\n    },\n    fitSize: function(size, object) {\n      return fitSize(projection, size, object);\n    },\n    fitWidth: function(width, object) {\n      return fitWidth(projection, width, object);\n    },\n    fitHeight: function(height, object) {\n      return fitHeight(projection, height, object);\n    }\n  };\n}\n\nfunction naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nfunction naturalEarth1() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n\nfunction orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nfunction orthographic() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n\nfunction stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nfunction stereographic() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n\nfunction transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nfunction transverseMercator() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n\nexports.geoArea = area;\nexports.geoBounds = bounds;\nexports.geoCentroid = centroid;\nexports.geoCircle = circle;\nexports.geoClipAntimeridian = clipAntimeridian;\nexports.geoClipCircle = clipCircle;\nexports.geoClipExtent = extent;\nexports.geoClipRectangle = clipRectangle;\nexports.geoContains = contains;\nexports.geoDistance = distance;\nexports.geoGraticule = graticule;\nexports.geoGraticule10 = graticule10;\nexports.geoInterpolate = interpolate;\nexports.geoLength = length;\nexports.geoPath = index;\nexports.geoAlbers = albers;\nexports.geoAlbersUsa = albersUsa;\nexports.geoAzimuthalEqualArea = azimuthalEqualArea;\nexports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\nexports.geoAzimuthalEquidistant = azimuthalEquidistant;\nexports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\nexports.geoConicConformal = conicConformal;\nexports.geoConicConformalRaw = conicConformalRaw;\nexports.geoConicEqualArea = conicEqualArea;\nexports.geoConicEqualAreaRaw = conicEqualAreaRaw;\nexports.geoConicEquidistant = conicEquidistant;\nexports.geoConicEquidistantRaw = conicEquidistantRaw;\nexports.geoEqualEarth = equalEarth;\nexports.geoEqualEarthRaw = equalEarthRaw;\nexports.geoEquirectangular = equirectangular;\nexports.geoEquirectangularRaw = equirectangularRaw;\nexports.geoGnomonic = gnomonic;\nexports.geoGnomonicRaw = gnomonicRaw;\nexports.geoIdentity = identity$1;\nexports.geoProjection = projection;\nexports.geoProjectionMutator = projectionMutator;\nexports.geoMercator = mercator;\nexports.geoMercatorRaw = mercatorRaw;\nexports.geoNaturalEarth1 = naturalEarth1;\nexports.geoNaturalEarth1Raw = naturalEarth1Raw;\nexports.geoOrthographic = orthographic;\nexports.geoOrthographicRaw = orthographicRaw;\nexports.geoStereographic = stereographic;\nexports.geoStereographicRaw = stereographicRaw;\nexports.geoTransverseMercator = transverseMercator;\nexports.geoTransverseMercatorRaw = transverseMercatorRaw;\nexports.geoRotation = rotation;\nexports.geoStream = geoStream;\nexports.geoTransform = transform;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{\"d3-array\":193}],195:[function(require,module,exports){\n'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n\n},{\"./des/cbc\":196,\"./des/cipher\":197,\"./des/des\":198,\"./des/ede\":199,\"./des/utils\":200}],196:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n\n},{\"inherits\":262,\"minimalistic-assert\":268}],197:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n\n},{\"minimalistic-assert\":268}],198:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar utils = des.utils;\nvar Cipher = des.Cipher;\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n\n},{\"../des\":195,\"inherits\":262,\"minimalistic-assert\":268}],199:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar Cipher = des.Cipher;\nvar DES = des.DES;\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n\n},{\"../des\":195,\"inherits\":262,\"minimalistic-assert\":268}],200:[function(require,module,exports){\n'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n\n},{}],201:[function(require,module,exports){\n(function (Buffer){\nvar generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./lib/dh\":202,\"./lib/generatePrime\":203,\"./lib/primes.json\":204,\"buffer\":182}],202:[function(require,module,exports){\n(function (Buffer){\nvar BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./generatePrime\":203,\"bn.js\":147,\"buffer\":182,\"miller-rabin\":267,\"randombytes\":298}],203:[function(require,module,exports){\nvar randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n\n},{\"bn.js\":147,\"miller-rabin\":267,\"randombytes\":298}],204:[function(require,module,exports){\nmodule.exports={\n    \"modp1\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n    },\n    \"modp2\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n    },\n    \"modp5\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n    },\n    \"modp14\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n    },\n    \"modp15\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n    },\n    \"modp16\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n    },\n    \"modp17\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n    },\n    \"modp18\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n    }\n}\n},{}],205:[function(require,module,exports){\n'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n\n},{\"../package.json\":220,\"./elliptic/curve\":208,\"./elliptic/curves\":211,\"./elliptic/ec\":212,\"./elliptic/eddsa\":215,\"./elliptic/utils\":219,\"brorand\":148}],206:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  for (var j = 0; j < naf.length; j += doubles.step) {\n    var nafW = 0;\n    for (var k = j + doubles.step - 1; k >= j; k--)\n      nafW = (nafW << 1) + naf[k];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (var j = 0; j < repr.length; j++) {\n      var nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var k = 0; i >= 0 && naf[i] === 0; i--)\n      k++;\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n                                                       points,\n                                                       coeffs,\n                                                       len,\n                                                       jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  for (var i = 0; i < len; i++) {\n    var p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (var i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a]);\n      naf[b] = getNAF(coeffs[b], wndWidth[b]);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b] /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (var j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (var i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (var j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (var j = 0; j < len; j++) {\n      var z = tmp[j];\n      var p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (var i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n                          bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n\n},{\"../utils\":219,\"bn.js\":147}],207:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // E = a * C\n    var e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      var h = this.z.redSqr();\n      // J = F - 2 * H\n      var j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    var e = c.redAdd(d);\n    // H = (c * Z1)^2\n    var h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    var j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n                          this.y,\n                          this.z,\n                          this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n\n},{\"../utils\":219,\"./base\":206,\"bn.js\":147,\"inherits\":262}],208:[function(require,module,exports){\n'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n\n},{\"./base\":206,\"./edwards\":207,\"./mont\":209,\"./short\":210}],209:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n\n},{\"../utils\":219,\"./base\":206,\"bn.js\":147,\"inherits\":262}],210:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16)\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 }\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n  var npoints = this._endoWnafT1;\n  var ncoeffs = this._endoWnafT2;\n  for (var i = 0; i < points.length; i++) {\n    var split = this._endoSplit(coeffs[i]);\n    var p = points[i];\n    var beta = p._getBeta();\n\n    if (split.k1.negative) {\n      split.k1.ineg();\n      p = p.neg(true);\n    }\n    if (split.k2.negative) {\n      split.k2.ineg();\n      beta = beta.neg(true);\n    }\n\n    npoints[i * 2] = p;\n    npoints[i * 2 + 1] = beta;\n    ncoeffs[i * 2] = split.k1;\n    ncoeffs[i * 2 + 1] = split.k2;\n  }\n  var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n  // Clean-up references to points and coefficients\n  for (var j = 0; j < i * 2; j++) {\n    npoints[j] = null;\n    ncoeffs[j] = null;\n  }\n  return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul)\n      }\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1)\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1)\n    }\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point))\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point))\n    }\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate)\n      }\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (var i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (var i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\n},{\"../utils\":219,\"./base\":206,\"bn.js\":147,\"inherits\":262}],211:[function(require,module,exports){\n'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else\n    this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve\n      });\n      return curve;\n    }\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n  ]\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n  ]\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n  ]\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n  ]\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n  ]\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9'\n  ]\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658'\n  ]\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3'\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15'\n    }\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre\n  ]\n});\n\n},{\"./curve\":208,\"./precomputed/secp256k1\":218,\"./utils\":219,\"hash.js\":228}],212:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray()\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  do {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8'\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; true; iter++) {\n    var k = options.k ?\n        options.k(iter) :\n        new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n\n  if (!this.curve._maxwellTrick) {\n    var p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n\n},{\"../curves\":211,\"../utils\":219,\"./key\":213,\"./signature\":214,\"bn.js\":147,\"brorand\":148,\"hmac-drbg\":240}],213:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n\n},{\"../utils\":219,\"bn.js\":147}],214:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n  }\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0 && (r[1] & 0x80)) {\n    r = r.slice(1);\n  }\n  if (s[0] === 0 && (s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n\n},{\"../utils\":219,\"bn.js\":147}],215:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  var curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n               .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n\n},{\"../curves\":211,\"../utils\":219,\"./key\":216,\"./signature\":217,\"hash.js\":228}],216:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n\n},{\"../utils\":219}],217:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength)\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n\n},{\"../utils\":219,\"bn.js\":147}],218:[function(require,module,exports){\nmodule.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n      ]\n    ]\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n      ]\n    ]\n  }\n};\n\n},{}],219:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n  var naf = [];\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n  while (k.cmpn(1) >= 0) {\n    var z;\n    if (k.isOdd()) {\n      var mod = k.andln(ws - 1);\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n    naf.push(z);\n\n    // Optimization, shift by word if possible\n    var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n    for (var i = 1; i < shift; i++)\n      naf.push(0);\n    k.iushrn(shift);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    []\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      var m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      var m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n           this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n                                     bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n\n},{\"bn.js\":147,\"minimalistic-assert\":268,\"minimalistic-crypto-utils\":269}],220:[function(require,module,exports){\nmodule.exports={\n  \"_args\": [\n    [\n      \"elliptic@6.5.1\",\n      \"/Users/caldwell/geopackage-js\"\n    ]\n  ],\n  \"_development\": true,\n  \"_from\": \"elliptic@6.5.1\",\n  \"_id\": \"elliptic@6.5.1\",\n  \"_inBundle\": false,\n  \"_integrity\": \"sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==\",\n  \"_location\": \"/elliptic\",\n  \"_phantomChildren\": {},\n  \"_requested\": {\n    \"type\": \"version\",\n    \"registry\": true,\n    \"raw\": \"elliptic@6.5.1\",\n    \"name\": \"elliptic\",\n    \"escapedName\": \"elliptic\",\n    \"rawSpec\": \"6.5.1\",\n    \"saveSpec\": null,\n    \"fetchSpec\": \"6.5.1\"\n  },\n  \"_requiredBy\": [\n    \"/browserify-sign\",\n    \"/create-ecdh\"\n  ],\n  \"_resolved\": \"https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz\",\n  \"_spec\": \"6.5.1\",\n  \"_where\": \"/Users/caldwell/geopackage-js\",\n  \"author\": {\n    \"name\": \"Fedor Indutny\",\n    \"email\": \"fedor@indutny.com\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/indutny/elliptic/issues\"\n  },\n  \"dependencies\": {\n    \"bn.js\": \"^4.4.0\",\n    \"brorand\": \"^1.0.1\",\n    \"hash.js\": \"^1.0.0\",\n    \"hmac-drbg\": \"^1.0.0\",\n    \"inherits\": \"^2.0.1\",\n    \"minimalistic-assert\": \"^1.0.0\",\n    \"minimalistic-crypto-utils\": \"^1.0.0\"\n  },\n  \"description\": \"EC cryptography\",\n  \"devDependencies\": {\n    \"brfs\": \"^1.4.3\",\n    \"coveralls\": \"^3.0.4\",\n    \"grunt\": \"^1.0.4\",\n    \"grunt-browserify\": \"^5.0.0\",\n    \"grunt-cli\": \"^1.2.0\",\n    \"grunt-contrib-connect\": \"^1.0.0\",\n    \"grunt-contrib-copy\": \"^1.0.0\",\n    \"grunt-contrib-uglify\": \"^1.0.1\",\n    \"grunt-mocha-istanbul\": \"^3.0.1\",\n    \"grunt-saucelabs\": \"^9.0.1\",\n    \"istanbul\": \"^0.4.2\",\n    \"jscs\": \"^3.0.7\",\n    \"jshint\": \"^2.6.0\",\n    \"mocha\": \"^6.1.4\"\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"homepage\": \"https://github.com/indutny/elliptic\",\n  \"keywords\": [\n    \"EC\",\n    \"Elliptic\",\n    \"curve\",\n    \"Cryptography\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"lib/elliptic.js\",\n  \"name\": \"elliptic\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+ssh://git@github.com/indutny/elliptic.git\"\n  },\n  \"scripts\": {\n    \"jscs\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n    \"jshint\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n    \"lint\": \"npm run jscs && npm run jshint\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n    \"version\": \"grunt dist && git add dist/\"\n  },\n  \"version\": \"6.5.1\"\n}\n\n},{}],221:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],222:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n  }\n\n  var keyLen = keyBits / 8\n  var key = Buffer.alloc(keyLen)\n  var iv = Buffer.alloc(ivLen || 0)\n  var tmp = Buffer.alloc(0)\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5()\n    hash.update(tmp)\n    hash.update(password)\n    if (salt) hash.update(salt)\n    tmp = hash.digest()\n\n    var used = 0\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen\n      used = Math.min(keyLen, tmp.length)\n      tmp.copy(key, keyStart, 0, used)\n      keyLen -= used\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen\n      var length = Math.min(ivLen, tmp.length - used)\n      tmp.copy(iv, ivStart, used, used + length)\n      ivLen -= length\n    }\n  }\n\n  tmp.fill(0)\n  return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n\n},{\"md5.js\":266,\"safe-buffer\":318}],223:[function(require,module,exports){\n'use strict';\nconst toBytes = s => [...s].map(c => c.charCodeAt(0));\nconst xpiZipFilename = toBytes('META-INF/mozilla.rsa');\nconst oxmlContentTypes = toBytes('[Content_Types].xml');\nconst oxmlRels = toBytes('_rels/.rels');\n\nmodule.exports = input => {\n\tconst buf = input instanceof Uint8Array ? input : new Uint8Array(input);\n\n\tif (!(buf && buf.length > 1)) {\n\t\treturn null;\n\t}\n\n\tconst check = (header, options) => {\n\t\toptions = Object.assign({\n\t\t\toffset: 0\n\t\t}, options);\n\n\t\tfor (let i = 0; i < header.length; i++) {\n\t\t\t// If a bitmask is set\n\t\t\tif (options.mask) {\n\t\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\t\tif (header[i] !== (options.mask[i] & buf[i + options.offset])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (header[i] !== buf[i + options.offset]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n\n\tconst checkString = (header, options) => check(toBytes(header), options);\n\n\tif (check([0xFF, 0xD8, 0xFF])) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (check([0x47, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\t// Needs to be before `tif` check\n\tif (\n\t\t(check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) &&\n\t\tcheck([0x43, 0x52], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'cr2',\n\t\t\tmime: 'image/x-canon-cr2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x49, 0x49, 0x2A, 0x0]) ||\n\t\tcheck([0x4D, 0x4D, 0x0, 0x2A])\n\t) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4D])) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0xBC])) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (check([0x38, 0x42, 0x50, 0x53])) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\t// Zip-based file formats\n\t// Need to be before the `zip` check\n\tif (check([0x50, 0x4B, 0x3, 0x4])) {\n\t\tif (\n\t\t\tcheck([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'epub',\n\t\t\t\tmime: 'application/epub+zip'\n\t\t\t};\n\t\t}\n\n\t\t// Assumes signed `.xpi` from addons.mozilla.org\n\t\tif (check(xpiZipFilename, {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'xpi',\n\t\t\t\tmime: 'application/x-xpinstall'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.text', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'odt',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.text'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.spreadsheet', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'ods',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.spreadsheet'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.presentation', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'odp',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.presentation'\n\t\t\t};\n\t\t}\n\n\t\t// https://github.com/file/file/blob/master/magic/Magdir/msooxml\n\t\tif (check(oxmlContentTypes, {offset: 30}) || check(oxmlRels, {offset: 30})) {\n\t\t\tconst sliced = buf.subarray(4, 4 + 2000);\n\t\t\tconst nextZipHeaderIndex = arr => arr.findIndex((el, i, arr) => arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4);\n\t\t\tconst header2Pos = nextZipHeaderIndex(sliced);\n\n\t\t\tif (header2Pos !== -1) {\n\t\t\t\tconst slicedAgain = buf.subarray(header2Pos + 8, header2Pos + 8 + 1000);\n\t\t\t\tconst header3Pos = nextZipHeaderIndex(slicedAgain);\n\n\t\t\t\tif (header3Pos !== -1) {\n\t\t\t\t\tconst offset = 8 + header2Pos + header3Pos + 30;\n\n\t\t\t\t\tif (checkString('word/', {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'docx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (checkString('ppt/', {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'pptx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (checkString('xl/', {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0x50, 0x4B]) &&\n\t\t(buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) &&\n\t\t(buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)\n\t) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&\n\t\t(buf[6] === 0x0 || buf[6] === 0x1)\n\t) {\n\t\treturn {\n\t\t\text: 'rar',\n\t\t\tmime: 'application/x-rar-compressed'\n\t\t};\n\t}\n\n\tif (check([0x1F, 0x8B, 0x8])) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x5A, 0x68])) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\treturn {\n\t\t\text: '7z',\n\t\t\tmime: 'application/x-7z-compressed'\n\t\t};\n\t}\n\n\tif (check([0x78, 0x01])) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\tif (check([0x33, 0x67, 0x70, 0x35]) || // 3gp5\n\t\t(\n\t\t\tcheck([0x0, 0x0, 0x0]) && check([0x66, 0x74, 0x79, 0x70], {offset: 4}) &&\n\t\t\t\t(\n\t\t\t\t\tcheck([0x6D, 0x70, 0x34, 0x31], {offset: 8}) || // MP41\n\t\t\t\t\tcheck([0x6D, 0x70, 0x34, 0x32], {offset: 8}) || // MP42\n\t\t\t\t\tcheck([0x69, 0x73, 0x6F, 0x6D], {offset: 8}) || // ISOM\n\t\t\t\t\tcheck([0x69, 0x73, 0x6F, 0x32], {offset: 8}) || // ISO2\n\t\t\t\t\tcheck([0x6D, 0x6D, 0x70, 0x34], {offset: 8}) || // MMP4\n\t\t\t\t\tcheck([0x4D, 0x34, 0x56], {offset: 8}) || // M4V\n\t\t\t\t\tcheck([0x64, 0x61, 0x73, 0x68], {offset: 8}) // DASH\n\t\t\t\t)\n\t\t)) {\n\t\treturn {\n\t\t\text: 'mp4',\n\t\t\tmime: 'video/mp4'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x54, 0x68, 0x64])) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\tif (check([0x1A, 0x45, 0xDF, 0xA3])) {\n\t\tconst sliced = buf.subarray(4, 4 + 4096);\n\t\tconst idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82);\n\n\t\tif (idPos !== -1) {\n\t\t\tconst docTypePos = idPos + 3;\n\t\t\tconst findDocType = type => [...type].every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0));\n\n\t\t\tif (findDocType('matroska')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mkv',\n\t\t\t\t\tmime: 'video/x-matroska'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (findDocType('webm')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'webm',\n\t\t\t\t\tmime: 'video/webm'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tif (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) ||\n\t\tcheck([0x66, 0x72, 0x65, 0x65], {offset: 4}) ||\n\t\tcheck([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) ||\n\t\tcheck([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG\n\t\tcheck([0x77, 0x69, 0x64, 0x65], {offset: 4})) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\t// RIFF file format which might be AVI, WAV, QCP, etc\n\tif (check([0x52, 0x49, 0x46, 0x46])) {\n\t\tif (check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'avi',\n\t\t\t\tmime: 'video/x-msvideo'\n\t\t\t};\n\t\t}\n\t\tif (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'wav',\n\t\t\t\tmime: 'audio/x-wav'\n\t\t\t};\n\t\t}\n\t\t// QLCM, QCP file\n\t\tif (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'qcp',\n\t\t\t\tmime: 'audio/qcelp'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\treturn {\n\t\t\text: 'wmv',\n\t\t\tmime: 'video/x-ms-wmv'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x0, 0x0, 0x1, 0xBA]) ||\n\t\tcheck([0x0, 0x0, 0x1, 0xB3])\n\t) {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\tif (check([0x66, 0x74, 0x79, 0x70, 0x33, 0x67], {offset: 4})) {\n\t\treturn {\n\t\t\text: '3gp',\n\t\t\tmime: 'video/3gpp'\n\t\t};\n\t}\n\n\t// Check for MPEG header at different starting offsets\n\tfor (let start = 0; start < 2 && start < (buf.length - 16); start++) {\n\t\tif (\n\t\t\tcheck([0x49, 0x44, 0x33], {offset: start}) || // ID3 header\n\t\t\tcheck([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE2]}) // MPEG 1 or 2 Layer 3 header\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xE4], {offset: start, mask: [0xFF, 0xE4]}) // MPEG 1 or 2 Layer 2 header\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xF8], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 2 layer 0 using ADTS\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xF0], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 4 layer 0 using ADTS\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp4',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) ||\n\t\tcheck([0x4D, 0x34, 0x41, 0x20])\n\t) {\n\t\treturn {\n\t\t\text: 'm4a',\n\t\t\tmime: 'audio/m4a'\n\t\t};\n\t}\n\n\t// Needs to be before `ogg` check\n\tif (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) {\n\t\treturn {\n\t\t\text: 'opus',\n\t\t\tmime: 'audio/opus'\n\t\t};\n\t}\n\n\t// If 'OggS' in first  bytes, then OGG container\n\tif (check([0x4F, 0x67, 0x67, 0x53])) {\n\t\t// This is a OGG container\n\n\t\t// If ' theora' in header.\n\t\tif (check([0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogv',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\t\t// If '\\x01video' in header.\n\t\tif (check([0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogm',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\t\t// If ' FLAC' in header  https://xiph.org/flac/faq.html\n\t\tif (check([0x7F, 0x46, 0x4C, 0x41, 0x43], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'oga',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// 'Speex  ' in header https://en.wikipedia.org/wiki/Speex\n\t\tif (check([0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'spx',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01vorbis' in header\n\t\tif (check([0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogg',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\treturn {\n\t\t\text: 'ogx',\n\t\t\tmime: 'application/ogg'\n\t\t};\n\t}\n\n\tif (check([0x66, 0x4C, 0x61, 0x43])) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x41, 0x43, 0x20])) {\n\t\treturn {\n\t\t\text: 'ape',\n\t\t\tmime: 'audio/ape'\n\t\t};\n\t}\n\n\tif (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x50, 0x44, 0x46])) {\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x5A])) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x43 || buf[0] === 0x46) &&\n\t\tcheck([0x57, 0x53], {offset: 1})\n\t) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\tif (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x61, 0x73, 0x6D])) {\n\t\treturn {\n\t\t\text: 'wasm',\n\t\t\tmime: 'application/wasm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x46]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'font/woff'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x32]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'font/woff2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4C, 0x50], {offset: 34}) &&\n\t\t(\n\t\t\tcheck([0x00, 0x00, 0x01], {offset: 8}) ||\n\t\t\tcheck([0x01, 0x00, 0x02], {offset: 8}) ||\n\t\t\tcheck([0x02, 0x00, 0x02], {offset: 8})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/octet-stream'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'font/ttf'\n\t\t};\n\t}\n\n\tif (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'font/otf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x01, 0x00])) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x02, 0x00])) {\n\t\treturn {\n\t\t\text: 'cur',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x56, 0x01])) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x21])) {\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (check([0x53, 0x51, 0x4C, 0x69])) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (check([0x43, 0x72, 0x32, 0x34])) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4D, 0x53, 0x43, 0x46]) ||\n\t\tcheck([0x49, 0x53, 0x63, 0x28])\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\t// Needs to be before `ar` check\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) {\n\t\treturn {\n\t\t\text: 'deb',\n\t\t\tmime: 'application/x-deb'\n\t\t};\n\t}\n\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) {\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\tif (check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x1F, 0xA0]) ||\n\t\tcheck([0x1F, 0x9D])\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x5A, 0x49, 0x50])) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\treturn {\n\t\t\text: 'msi',\n\t\t\tmime: 'application/x-msi'\n\t\t};\n\t}\n\n\tif (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\treturn {\n\t\t\text: 'mxf',\n\t\t\tmime: 'application/mxf'\n\t\t};\n\t}\n\n\tif (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {\n\t\treturn {\n\t\t\text: 'mts',\n\t\t\tmime: 'video/mp2t'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) {\n\t\treturn {\n\t\t\text: 'blend',\n\t\t\tmime: 'application/x-blender'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x50, 0x47, 0xFB])) {\n\t\treturn {\n\t\t\text: 'bpg',\n\t\t\tmime: 'image/bpg'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t// JPEG-2000 family\n\n\t\tif (check([0x6A, 0x70, 0x32, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jp2',\n\t\t\t\tmime: 'image/jp2'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6A, 0x70, 0x78, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jpx',\n\t\t\t\tmime: 'image/jpx'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6A, 0x70, 0x6D, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jpm',\n\t\t\t\tmime: 'image/jpm'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6D, 0x6A, 0x70, 0x32], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'mj2',\n\t\t\t\tmime: 'image/mj2'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (check([0x46, 0x4F, 0x52, 0x4D, 0x00])) {\n\t\treturn {\n\t\t\text: 'aif',\n\t\t\tmime: 'audio/aiff'\n\t\t};\n\t}\n\n\tif (checkString('<?xml ')) {\n\t\treturn {\n\t\t\text: 'xml',\n\t\t\tmime: 'application/xml'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\treturn {\n\t\t\text: 'mobi',\n\t\t\tmime: 'application/x-mobipocket-ebook'\n\t\t};\n\t}\n\n\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\tif (check([0x66, 0x74, 0x79, 0x70], {offset: 4})) {\n\t\tif (check([0x6D, 0x69, 0x66, 0x31], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'heic',\n\t\t\t\tmime: 'image/heif'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6D, 0x73, 0x66, 0x31], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'heic',\n\t\t\t\tmime: 'image/heif-sequence'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x68, 0x65, 0x69, 0x63], {offset: 8}) || check([0x68, 0x65, 0x69, 0x78], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'heic',\n\t\t\t\tmime: 'image/heic'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x68, 0x65, 0x76, 0x63], {offset: 8}) || check([0x68, 0x65, 0x76, 0x78], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'heic',\n\t\t\t\tmime: 'image/heic-sequence'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'ktx',\n\t\t\tmime: 'image/ktx'\n\t\t};\n\t}\n\n\treturn null;\n};\n\n},{}],224:[function(require,module,exports){\nvar rbush = require('rbush');\nvar helpers = require('@turf/helpers');\nvar meta = require('@turf/meta');\nvar turfBBox = require('@turf/bbox').default;\nvar featureEach = meta.featureEach;\nvar coordEach = meta.coordEach;\nvar polygon = helpers.polygon;\nvar featureCollection = helpers.featureCollection;\n\n/**\n * GeoJSON implementation of [RBush](https://github.com/mourner/rbush#rbush) spatial index.\n *\n * @name rbush\n * @param {number} [maxEntries=9] defines the maximum number of entries in a tree node. 9 (used by default) is a\n * reasonable choice for most applications. Higher value means faster insertion and slower search, and vice versa.\n * @returns {RBush} GeoJSON RBush\n * @example\n * var geojsonRbush = require('geojson-rbush').default;\n * var tree = geojsonRbush();\n */\nfunction geojsonRbush(maxEntries) {\n    var tree = rbush(maxEntries);\n    /**\n     * [insert](https://github.com/mourner/rbush#data-format)\n     *\n     * @param {Feature} feature insert single GeoJSON Feature\n     * @returns {RBush} GeoJSON RBush\n     * @example\n     * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n     * tree.insert(poly)\n     */\n    tree.insert = function (feature) {\n        if (feature.type !== 'Feature') throw new Error('invalid feature');\n        feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n        return rbush.prototype.insert.call(this, feature);\n    };\n\n    /**\n     * [load](https://github.com/mourner/rbush#bulk-inserting-data)\n     *\n     * @param {FeatureCollection|Array<Feature>} features load entire GeoJSON FeatureCollection\n     * @returns {RBush} GeoJSON RBush\n     * @example\n     * var polys = turf.polygons([\n     *     [[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]],\n     *     [[[-93, 32], [-83, 32], [-83, 39], [-93, 39], [-93, 32]]]\n     * ]);\n     * tree.load(polys);\n     */\n    tree.load = function (features) {\n        var load = [];\n        // Load an Array of Features\n        if (Array.isArray(features)) {\n            features.forEach(function (feature) {\n                if (feature.type !== 'Feature') throw new Error('invalid features');\n                feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n                load.push(feature);\n            });\n        } else {\n            // Load a FeatureCollection\n            featureEach(features, function (feature) {\n                if (feature.type !== 'Feature') throw new Error('invalid features');\n                feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n                load.push(feature);\n            });\n        }\n        return rbush.prototype.load.call(this, load);\n    };\n\n    /**\n     * [remove](https://github.com/mourner/rbush#removing-data)\n     *\n     * @param {Feature} feature remove single GeoJSON Feature\n     * @param {Function} equals Pass a custom equals function to compare by value for removal.\n     * @returns {RBush} GeoJSON RBush\n     * @example\n     * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n     *\n     * tree.remove(poly);\n     */\n    tree.remove = function (feature, equals) {\n        if (feature.type !== 'Feature') throw new Error('invalid feature');\n        feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n        return rbush.prototype.remove.call(this, feature, equals);\n    };\n\n    /**\n     * [clear](https://github.com/mourner/rbush#removing-data)\n     *\n     * @returns {RBush} GeoJSON Rbush\n     * @example\n     * tree.clear()\n     */\n    tree.clear = function () {\n        return rbush.prototype.clear.call(this);\n    };\n\n    /**\n     * [search](https://github.com/mourner/rbush#search)\n     *\n     * @param {BBox|FeatureCollection|Feature} geojson search with GeoJSON\n     * @returns {FeatureCollection} all features that intersects with the given GeoJSON.\n     * @example\n     * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n     *\n     * tree.search(poly);\n     */\n    tree.search = function (geojson) {\n        var features = rbush.prototype.search.call(this, this.toBBox(geojson));\n        return featureCollection(features);\n    };\n\n    /**\n     * [collides](https://github.com/mourner/rbush#collisions)\n     *\n     * @param {BBox|FeatureCollection|Feature} geojson collides with GeoJSON\n     * @returns {boolean} true if there are any items intersecting the given GeoJSON, otherwise false.\n     * @example\n     * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n     *\n     * tree.collides(poly);\n     */\n    tree.collides = function (geojson) {\n        return rbush.prototype.collides.call(this, this.toBBox(geojson));\n    };\n\n    /**\n     * [all](https://github.com/mourner/rbush#search)\n     *\n     * @returns {FeatureCollection} all the features in RBush\n     * @example\n     * tree.all()\n     */\n    tree.all = function () {\n        var features = rbush.prototype.all.call(this);\n        return featureCollection(features);\n    };\n\n    /**\n     * [toJSON](https://github.com/mourner/rbush#export-and-import)\n     *\n     * @returns {any} export data as JSON object\n     * @example\n     * var exported = tree.toJSON()\n     */\n    tree.toJSON = function () {\n        return rbush.prototype.toJSON.call(this);\n    };\n\n    /**\n     * [fromJSON](https://github.com/mourner/rbush#export-and-import)\n     *\n     * @param {any} json import previously exported data\n     * @returns {RBush} GeoJSON RBush\n     * @example\n     * var exported = {\n     *   \"children\": [\n     *     {\n     *       \"type\": \"Feature\",\n     *       \"geometry\": {\n     *         \"type\": \"Point\",\n     *         \"coordinates\": [110, 50]\n     *       },\n     *       \"properties\": {},\n     *       \"bbox\": [110, 50, 110, 50]\n     *     }\n     *   ],\n     *   \"height\": 1,\n     *   \"leaf\": true,\n     *   \"minX\": 110,\n     *   \"minY\": 50,\n     *   \"maxX\": 110,\n     *   \"maxY\": 50\n     * }\n     * tree.fromJSON(exported)\n     */\n    tree.fromJSON = function (json) {\n        return rbush.prototype.fromJSON.call(this, json);\n    };\n\n    /**\n     * Converts GeoJSON to {minX, minY, maxX, maxY} schema\n     *\n     * @private\n     * @param {BBox|FeatureCollection|Feature} geojson feature(s) to retrieve BBox from\n     * @returns {Object} converted to {minX, minY, maxX, maxY}\n     */\n    tree.toBBox = function (geojson) {\n        var bbox;\n        if (geojson.bbox) bbox = geojson.bbox;\n        else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson;\n        else if (Array.isArray(geojson) && geojson.length === 6) bbox = [geojson[0], geojson[1], geojson[3], geojson[4]];\n        else if (geojson.type === 'Feature') bbox = turfBBox(geojson);\n        else if (geojson.type === 'FeatureCollection') bbox = turfBBox(geojson);\n        else throw new Error('invalid geojson')\n\n        return {\n            minX: bbox[0],\n            minY: bbox[1],\n            maxX: bbox[2],\n            maxY: bbox[3]\n        };\n    };\n    return tree;\n}\n\nmodule.exports = geojsonRbush;\nmodule.exports.default = geojsonRbush;\n\n},{\"@turf/bbox\":117,\"@turf/helpers\":123,\"@turf/meta\":225,\"rbush\":300}],225:[function(require,module,exports){\narguments[4][122][0].apply(exports,arguments)\n},{\"@turf/helpers\":123,\"dup\":122}],226:[function(require,module,exports){\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\ntypeof define === 'function' && define.amd ? define(factory) :\n(global.geojsonvt = factory());\n}(this, (function () { 'use strict';\n\n// calculate simplification data using optimized Douglas-Peucker algorithm\n\nfunction simplify(coords, first, last, sqTolerance) {\n    var maxSqDist = sqTolerance;\n    var mid = (last - first) >> 1;\n    var minPosToMid = last - first;\n    var index;\n\n    var ax = coords[first];\n    var ay = coords[first + 1];\n    var bx = coords[last];\n    var by = coords[last + 1];\n\n    for (var i = first + 3; i < last; i += 3) {\n        var d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by);\n\n        if (d > maxSqDist) {\n            index = i;\n            maxSqDist = d;\n\n        } else if (d === maxSqDist) {\n            // a workaround to ensure we choose a pivot close to the middle of the list,\n            // reducing recursion depth, for certain degenerate inputs\n            // https://github.com/mapbox/geojson-vt/issues/104\n            var posToMid = Math.abs(i - mid);\n            if (posToMid < minPosToMid) {\n                index = i;\n                minPosToMid = posToMid;\n            }\n        }\n    }\n\n    if (maxSqDist > sqTolerance) {\n        if (index - first > 3) simplify(coords, first, index, sqTolerance);\n        coords[index + 2] = maxSqDist;\n        if (last - index > 3) simplify(coords, index, last, sqTolerance);\n    }\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(px, py, x, y, bx, by) {\n\n    var dx = bx - x;\n    var dy = by - y;\n\n    if (dx !== 0 || dy !== 0) {\n\n        var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n        if (t > 1) {\n            x = bx;\n            y = by;\n\n        } else if (t > 0) {\n            x += dx * t;\n            y += dy * t;\n        }\n    }\n\n    dx = px - x;\n    dy = py - y;\n\n    return dx * dx + dy * dy;\n}\n\nfunction createFeature(id, type, geom, tags) {\n    var feature = {\n        id: typeof id === 'undefined' ? null : id,\n        type: type,\n        geometry: geom,\n        tags: tags,\n        minX: Infinity,\n        minY: Infinity,\n        maxX: -Infinity,\n        maxY: -Infinity\n    };\n    calcBBox(feature);\n    return feature;\n}\n\nfunction calcBBox(feature) {\n    var geom = feature.geometry;\n    var type = feature.type;\n\n    if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n        calcLineBBox(feature, geom);\n\n    } else if (type === 'Polygon' || type === 'MultiLineString') {\n        for (var i = 0; i < geom.length; i++) {\n            calcLineBBox(feature, geom[i]);\n        }\n\n    } else if (type === 'MultiPolygon') {\n        for (i = 0; i < geom.length; i++) {\n            for (var j = 0; j < geom[i].length; j++) {\n                calcLineBBox(feature, geom[i][j]);\n            }\n        }\n    }\n}\n\nfunction calcLineBBox(feature, geom) {\n    for (var i = 0; i < geom.length; i += 3) {\n        feature.minX = Math.min(feature.minX, geom[i]);\n        feature.minY = Math.min(feature.minY, geom[i + 1]);\n        feature.maxX = Math.max(feature.maxX, geom[i]);\n        feature.maxY = Math.max(feature.maxY, geom[i + 1]);\n    }\n}\n\n// converts GeoJSON feature into an intermediate projected JSON vector format with simplification data\n\nfunction convert(data, options) {\n    var features = [];\n    if (data.type === 'FeatureCollection') {\n        for (var i = 0; i < data.features.length; i++) {\n            convertFeature(features, data.features[i], options, i);\n        }\n\n    } else if (data.type === 'Feature') {\n        convertFeature(features, data, options);\n\n    } else {\n        // single geometry or a geometry collection\n        convertFeature(features, {geometry: data}, options);\n    }\n\n    return features;\n}\n\nfunction convertFeature(features, geojson, options, index) {\n    if (!geojson.geometry) return;\n\n    var coords = geojson.geometry.coordinates;\n    var type = geojson.geometry.type;\n    var tolerance = Math.pow(options.tolerance / ((1 << options.maxZoom) * options.extent), 2);\n    var geometry = [];\n    var id = geojson.id;\n    if (options.promoteId) {\n        id = geojson.properties[options.promoteId];\n    } else if (options.generateId) {\n        id = index || 0;\n    }\n    if (type === 'Point') {\n        convertPoint(coords, geometry);\n\n    } else if (type === 'MultiPoint') {\n        for (var i = 0; i < coords.length; i++) {\n            convertPoint(coords[i], geometry);\n        }\n\n    } else if (type === 'LineString') {\n        convertLine(coords, geometry, tolerance, false);\n\n    } else if (type === 'MultiLineString') {\n        if (options.lineMetrics) {\n            // explode into linestrings to be able to track metrics\n            for (i = 0; i < coords.length; i++) {\n                geometry = [];\n                convertLine(coords[i], geometry, tolerance, false);\n                features.push(createFeature(id, 'LineString', geometry, geojson.properties));\n            }\n            return;\n        } else {\n            convertLines(coords, geometry, tolerance, false);\n        }\n\n    } else if (type === 'Polygon') {\n        convertLines(coords, geometry, tolerance, true);\n\n    } else if (type === 'MultiPolygon') {\n        for (i = 0; i < coords.length; i++) {\n            var polygon = [];\n            convertLines(coords[i], polygon, tolerance, true);\n            geometry.push(polygon);\n        }\n    } else if (type === 'GeometryCollection') {\n        for (i = 0; i < geojson.geometry.geometries.length; i++) {\n            convertFeature(features, {\n                id: id,\n                geometry: geojson.geometry.geometries[i],\n                properties: geojson.properties\n            }, options, index);\n        }\n        return;\n    } else {\n        throw new Error('Input data is not a valid GeoJSON object.');\n    }\n\n    features.push(createFeature(id, type, geometry, geojson.properties));\n}\n\nfunction convertPoint(coords, out) {\n    out.push(projectX(coords[0]));\n    out.push(projectY(coords[1]));\n    out.push(0);\n}\n\nfunction convertLine(ring, out, tolerance, isPolygon) {\n    var x0, y0;\n    var size = 0;\n\n    for (var j = 0; j < ring.length; j++) {\n        var x = projectX(ring[j][0]);\n        var y = projectY(ring[j][1]);\n\n        out.push(x);\n        out.push(y);\n        out.push(0);\n\n        if (j > 0) {\n            if (isPolygon) {\n                size += (x0 * y - x * y0) / 2; // area\n            } else {\n                size += Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)); // length\n            }\n        }\n        x0 = x;\n        y0 = y;\n    }\n\n    var last = out.length - 3;\n    out[2] = 1;\n    simplify(out, 0, last, tolerance);\n    out[last + 2] = 1;\n\n    out.size = Math.abs(size);\n    out.start = 0;\n    out.end = out.size;\n}\n\nfunction convertLines(rings, out, tolerance, isPolygon) {\n    for (var i = 0; i < rings.length; i++) {\n        var geom = [];\n        convertLine(rings[i], geom, tolerance, isPolygon);\n        out.push(geom);\n    }\n}\n\nfunction projectX(x) {\n    return x / 360 + 0.5;\n}\n\nfunction projectY(y) {\n    var sin = Math.sin(y * Math.PI / 180);\n    var y2 = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI;\n    return y2 < 0 ? 0 : y2 > 1 ? 1 : y2;\n}\n\n/* clip features between two axis-parallel lines:\n *     |        |\n *  ___|___     |     /\n * /   |   \\____|____/\n *     |        |\n */\n\nfunction clip(features, scale, k1, k2, axis, minAll, maxAll, options) {\n\n    k1 /= scale;\n    k2 /= scale;\n\n    if (minAll >= k1 && maxAll < k2) return features; // trivial accept\n    else if (maxAll < k1 || minAll >= k2) return null; // trivial reject\n\n    var clipped = [];\n\n    for (var i = 0; i < features.length; i++) {\n\n        var feature = features[i];\n        var geometry = feature.geometry;\n        var type = feature.type;\n\n        var min = axis === 0 ? feature.minX : feature.minY;\n        var max = axis === 0 ? feature.maxX : feature.maxY;\n\n        if (min >= k1 && max < k2) { // trivial accept\n            clipped.push(feature);\n            continue;\n        } else if (max < k1 || min >= k2) { // trivial reject\n            continue;\n        }\n\n        var newGeometry = [];\n\n        if (type === 'Point' || type === 'MultiPoint') {\n            clipPoints(geometry, newGeometry, k1, k2, axis);\n\n        } else if (type === 'LineString') {\n            clipLine(geometry, newGeometry, k1, k2, axis, false, options.lineMetrics);\n\n        } else if (type === 'MultiLineString') {\n            clipLines(geometry, newGeometry, k1, k2, axis, false);\n\n        } else if (type === 'Polygon') {\n            clipLines(geometry, newGeometry, k1, k2, axis, true);\n\n        } else if (type === 'MultiPolygon') {\n            for (var j = 0; j < geometry.length; j++) {\n                var polygon = [];\n                clipLines(geometry[j], polygon, k1, k2, axis, true);\n                if (polygon.length) {\n                    newGeometry.push(polygon);\n                }\n            }\n        }\n\n        if (newGeometry.length) {\n            if (options.lineMetrics && type === 'LineString') {\n                for (j = 0; j < newGeometry.length; j++) {\n                    clipped.push(createFeature(feature.id, type, newGeometry[j], feature.tags));\n                }\n                continue;\n            }\n\n            if (type === 'LineString' || type === 'MultiLineString') {\n                if (newGeometry.length === 1) {\n                    type = 'LineString';\n                    newGeometry = newGeometry[0];\n                } else {\n                    type = 'MultiLineString';\n                }\n            }\n            if (type === 'Point' || type === 'MultiPoint') {\n                type = newGeometry.length === 3 ? 'Point' : 'MultiPoint';\n            }\n\n            clipped.push(createFeature(feature.id, type, newGeometry, feature.tags));\n        }\n    }\n\n    return clipped.length ? clipped : null;\n}\n\nfunction clipPoints(geom, newGeom, k1, k2, axis) {\n    for (var i = 0; i < geom.length; i += 3) {\n        var a = geom[i + axis];\n\n        if (a >= k1 && a <= k2) {\n            newGeom.push(geom[i]);\n            newGeom.push(geom[i + 1]);\n            newGeom.push(geom[i + 2]);\n        }\n    }\n}\n\nfunction clipLine(geom, newGeom, k1, k2, axis, isPolygon, trackMetrics) {\n\n    var slice = newSlice(geom);\n    var intersect = axis === 0 ? intersectX : intersectY;\n    var len = geom.start;\n    var segLen, t;\n\n    for (var i = 0; i < geom.length - 3; i += 3) {\n        var ax = geom[i];\n        var ay = geom[i + 1];\n        var az = geom[i + 2];\n        var bx = geom[i + 3];\n        var by = geom[i + 4];\n        var a = axis === 0 ? ax : ay;\n        var b = axis === 0 ? bx : by;\n        var exited = false;\n\n        if (trackMetrics) segLen = Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2));\n\n        if (a < k1) {\n            // ---|-->  | (line enters the clip region from the left)\n            if (b > k1) {\n                t = intersect(slice, ax, ay, bx, by, k1);\n                if (trackMetrics) slice.start = len + segLen * t;\n            }\n        } else if (a > k2) {\n            // |  <--|--- (line enters the clip region from the right)\n            if (b < k2) {\n                t = intersect(slice, ax, ay, bx, by, k2);\n                if (trackMetrics) slice.start = len + segLen * t;\n            }\n        } else {\n            addPoint(slice, ax, ay, az);\n        }\n        if (b < k1 && a >= k1) {\n            // <--|---  | or <--|-----|--- (line exits the clip region on the left)\n            t = intersect(slice, ax, ay, bx, by, k1);\n            exited = true;\n        }\n        if (b > k2 && a <= k2) {\n            // |  ---|--> or ---|-----|--> (line exits the clip region on the right)\n            t = intersect(slice, ax, ay, bx, by, k2);\n            exited = true;\n        }\n\n        if (!isPolygon && exited) {\n            if (trackMetrics) slice.end = len + segLen * t;\n            newGeom.push(slice);\n            slice = newSlice(geom);\n        }\n\n        if (trackMetrics) len += segLen;\n    }\n\n    // add the last point\n    var last = geom.length - 3;\n    ax = geom[last];\n    ay = geom[last + 1];\n    az = geom[last + 2];\n    a = axis === 0 ? ax : ay;\n    if (a >= k1 && a <= k2) addPoint(slice, ax, ay, az);\n\n    // close the polygon if its endpoints are not the same after clipping\n    last = slice.length - 3;\n    if (isPolygon && last >= 3 && (slice[last] !== slice[0] || slice[last + 1] !== slice[1])) {\n        addPoint(slice, slice[0], slice[1], slice[2]);\n    }\n\n    // add the final slice\n    if (slice.length) {\n        newGeom.push(slice);\n    }\n}\n\nfunction newSlice(line) {\n    var slice = [];\n    slice.size = line.size;\n    slice.start = line.start;\n    slice.end = line.end;\n    return slice;\n}\n\nfunction clipLines(geom, newGeom, k1, k2, axis, isPolygon) {\n    for (var i = 0; i < geom.length; i++) {\n        clipLine(geom[i], newGeom, k1, k2, axis, isPolygon, false);\n    }\n}\n\nfunction addPoint(out, x, y, z) {\n    out.push(x);\n    out.push(y);\n    out.push(z);\n}\n\nfunction intersectX(out, ax, ay, bx, by, x) {\n    var t = (x - ax) / (bx - ax);\n    out.push(x);\n    out.push(ay + (by - ay) * t);\n    out.push(1);\n    return t;\n}\n\nfunction intersectY(out, ax, ay, bx, by, y) {\n    var t = (y - ay) / (by - ay);\n    out.push(ax + (bx - ax) * t);\n    out.push(y);\n    out.push(1);\n    return t;\n}\n\nfunction wrap(features, options) {\n    var buffer = options.buffer / options.extent;\n    var merged = features;\n    var left  = clip(features, 1, -1 - buffer, buffer,     0, -1, 2, options); // left world copy\n    var right = clip(features, 1,  1 - buffer, 2 + buffer, 0, -1, 2, options); // right world copy\n\n    if (left || right) {\n        merged = clip(features, 1, -buffer, 1 + buffer, 0, -1, 2, options) || []; // center world copy\n\n        if (left) merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center\n        if (right) merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center\n    }\n\n    return merged;\n}\n\nfunction shiftFeatureCoords(features, offset) {\n    var newFeatures = [];\n\n    for (var i = 0; i < features.length; i++) {\n        var feature = features[i],\n            type = feature.type;\n\n        var newGeometry;\n\n        if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n            newGeometry = shiftCoords(feature.geometry, offset);\n\n        } else if (type === 'MultiLineString' || type === 'Polygon') {\n            newGeometry = [];\n            for (var j = 0; j < feature.geometry.length; j++) {\n                newGeometry.push(shiftCoords(feature.geometry[j], offset));\n            }\n        } else if (type === 'MultiPolygon') {\n            newGeometry = [];\n            for (j = 0; j < feature.geometry.length; j++) {\n                var newPolygon = [];\n                for (var k = 0; k < feature.geometry[j].length; k++) {\n                    newPolygon.push(shiftCoords(feature.geometry[j][k], offset));\n                }\n                newGeometry.push(newPolygon);\n            }\n        }\n\n        newFeatures.push(createFeature(feature.id, type, newGeometry, feature.tags));\n    }\n\n    return newFeatures;\n}\n\nfunction shiftCoords(points, offset) {\n    var newPoints = [];\n    newPoints.size = points.size;\n\n    if (points.start !== undefined) {\n        newPoints.start = points.start;\n        newPoints.end = points.end;\n    }\n\n    for (var i = 0; i < points.length; i += 3) {\n        newPoints.push(points[i] + offset, points[i + 1], points[i + 2]);\n    }\n    return newPoints;\n}\n\n// Transforms the coordinates of each feature in the given tile from\n// mercator-projected space into (extent x extent) tile space.\nfunction transformTile(tile, extent) {\n    if (tile.transformed) return tile;\n\n    var z2 = 1 << tile.z,\n        tx = tile.x,\n        ty = tile.y,\n        i, j, k;\n\n    for (i = 0; i < tile.features.length; i++) {\n        var feature = tile.features[i],\n            geom = feature.geometry,\n            type = feature.type;\n\n        feature.geometry = [];\n\n        if (type === 1) {\n            for (j = 0; j < geom.length; j += 2) {\n                feature.geometry.push(transformPoint(geom[j], geom[j + 1], extent, z2, tx, ty));\n            }\n        } else {\n            for (j = 0; j < geom.length; j++) {\n                var ring = [];\n                for (k = 0; k < geom[j].length; k += 2) {\n                    ring.push(transformPoint(geom[j][k], geom[j][k + 1], extent, z2, tx, ty));\n                }\n                feature.geometry.push(ring);\n            }\n        }\n    }\n\n    tile.transformed = true;\n\n    return tile;\n}\n\nfunction transformPoint(x, y, extent, z2, tx, ty) {\n    return [\n        Math.round(extent * (x * z2 - tx)),\n        Math.round(extent * (y * z2 - ty))];\n}\n\nfunction createTile(features, z, tx, ty, options) {\n    var tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent);\n    var tile = {\n        features: [],\n        numPoints: 0,\n        numSimplified: 0,\n        numFeatures: 0,\n        source: null,\n        x: tx,\n        y: ty,\n        z: z,\n        transformed: false,\n        minX: 2,\n        minY: 1,\n        maxX: -1,\n        maxY: 0\n    };\n    for (var i = 0; i < features.length; i++) {\n        tile.numFeatures++;\n        addFeature(tile, features[i], tolerance, options);\n\n        var minX = features[i].minX;\n        var minY = features[i].minY;\n        var maxX = features[i].maxX;\n        var maxY = features[i].maxY;\n\n        if (minX < tile.minX) tile.minX = minX;\n        if (minY < tile.minY) tile.minY = minY;\n        if (maxX > tile.maxX) tile.maxX = maxX;\n        if (maxY > tile.maxY) tile.maxY = maxY;\n    }\n    return tile;\n}\n\nfunction addFeature(tile, feature, tolerance, options) {\n\n    var geom = feature.geometry,\n        type = feature.type,\n        simplified = [];\n\n    if (type === 'Point' || type === 'MultiPoint') {\n        for (var i = 0; i < geom.length; i += 3) {\n            simplified.push(geom[i]);\n            simplified.push(geom[i + 1]);\n            tile.numPoints++;\n            tile.numSimplified++;\n        }\n\n    } else if (type === 'LineString') {\n        addLine(simplified, geom, tile, tolerance, false, false);\n\n    } else if (type === 'MultiLineString' || type === 'Polygon') {\n        for (i = 0; i < geom.length; i++) {\n            addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0);\n        }\n\n    } else if (type === 'MultiPolygon') {\n\n        for (var k = 0; k < geom.length; k++) {\n            var polygon = geom[k];\n            for (i = 0; i < polygon.length; i++) {\n                addLine(simplified, polygon[i], tile, tolerance, true, i === 0);\n            }\n        }\n    }\n\n    if (simplified.length) {\n        var tags = feature.tags || null;\n        if (type === 'LineString' && options.lineMetrics) {\n            tags = {};\n            for (var key in feature.tags) tags[key] = feature.tags[key];\n            tags['mapbox_clip_start'] = geom.start / geom.size;\n            tags['mapbox_clip_end'] = geom.end / geom.size;\n        }\n        var tileFeature = {\n            geometry: simplified,\n            type: type === 'Polygon' || type === 'MultiPolygon' ? 3 :\n                type === 'LineString' || type === 'MultiLineString' ? 2 : 1,\n            tags: tags\n        };\n        if (feature.id !== null) {\n            tileFeature.id = feature.id;\n        }\n        tile.features.push(tileFeature);\n    }\n}\n\nfunction addLine(result, geom, tile, tolerance, isPolygon, isOuter) {\n    var sqTolerance = tolerance * tolerance;\n\n    if (tolerance > 0 && (geom.size < (isPolygon ? sqTolerance : tolerance))) {\n        tile.numPoints += geom.length / 3;\n        return;\n    }\n\n    var ring = [];\n\n    for (var i = 0; i < geom.length; i += 3) {\n        if (tolerance === 0 || geom[i + 2] > sqTolerance) {\n            tile.numSimplified++;\n            ring.push(geom[i]);\n            ring.push(geom[i + 1]);\n        }\n        tile.numPoints++;\n    }\n\n    if (isPolygon) rewind(ring, isOuter);\n\n    result.push(ring);\n}\n\nfunction rewind(ring, clockwise) {\n    var area = 0;\n    for (var i = 0, len = ring.length, j = len - 2; i < len; j = i, i += 2) {\n        area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]);\n    }\n    if (area > 0 === clockwise) {\n        for (i = 0, len = ring.length; i < len / 2; i += 2) {\n            var x = ring[i];\n            var y = ring[i + 1];\n            ring[i] = ring[len - 2 - i];\n            ring[i + 1] = ring[len - 1 - i];\n            ring[len - 2 - i] = x;\n            ring[len - 1 - i] = y;\n        }\n    }\n}\n\nfunction geojsonvt(data, options) {\n    return new GeoJSONVT(data, options);\n}\n\nfunction GeoJSONVT(data, options) {\n    options = this.options = extend(Object.create(this.options), options);\n\n    var debug = options.debug;\n\n    if (debug) console.time('preprocess data');\n\n    if (options.maxZoom < 0 || options.maxZoom > 24) throw new Error('maxZoom should be in the 0-24 range');\n    if (options.promoteId && options.generateId) throw new Error('promoteId and generateId cannot be used together.');\n\n    var features = convert(data, options);\n\n    this.tiles = {};\n    this.tileCoords = [];\n\n    if (debug) {\n        console.timeEnd('preprocess data');\n        console.log('index: maxZoom: %d, maxPoints: %d', options.indexMaxZoom, options.indexMaxPoints);\n        console.time('generate tiles');\n        this.stats = {};\n        this.total = 0;\n    }\n\n    features = wrap(features, options);\n\n    // start slicing from the top tile down\n    if (features.length) this.splitTile(features, 0, 0, 0);\n\n    if (debug) {\n        if (features.length) console.log('features: %d, points: %d', this.tiles[0].numFeatures, this.tiles[0].numPoints);\n        console.timeEnd('generate tiles');\n        console.log('tiles generated:', this.total, JSON.stringify(this.stats));\n    }\n}\n\nGeoJSONVT.prototype.options = {\n    maxZoom: 14,            // max zoom to preserve detail on\n    indexMaxZoom: 5,        // max zoom in the tile index\n    indexMaxPoints: 100000, // max number of points per tile in the tile index\n    tolerance: 3,           // simplification tolerance (higher means simpler)\n    extent: 4096,           // tile extent\n    buffer: 64,             // tile buffer on each side\n    lineMetrics: false,     // whether to calculate line metrics\n    promoteId: null,        // name of a feature property to be promoted to feature.id\n    generateId: false,      // whether to generate feature ids. Cannot be used with promoteId\n    debug: 0                // logging level (0, 1 or 2)\n};\n\nGeoJSONVT.prototype.splitTile = function (features, z, x, y, cz, cx, cy) {\n\n    var stack = [features, z, x, y],\n        options = this.options,\n        debug = options.debug;\n\n    // avoid recursion by using a processing queue\n    while (stack.length) {\n        y = stack.pop();\n        x = stack.pop();\n        z = stack.pop();\n        features = stack.pop();\n\n        var z2 = 1 << z,\n            id = toID(z, x, y),\n            tile = this.tiles[id];\n\n        if (!tile) {\n            if (debug > 1) console.time('creation');\n\n            tile = this.tiles[id] = createTile(features, z, x, y, options);\n            this.tileCoords.push({z: z, x: x, y: y});\n\n            if (debug) {\n                if (debug > 1) {\n                    console.log('tile z%d-%d-%d (features: %d, points: %d, simplified: %d)',\n                        z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified);\n                    console.timeEnd('creation');\n                }\n                var key = 'z' + z;\n                this.stats[key] = (this.stats[key] || 0) + 1;\n                this.total++;\n            }\n        }\n\n        // save reference to original geometry in tile so that we can drill down later if we stop now\n        tile.source = features;\n\n        // if it's the first-pass tiling\n        if (!cz) {\n            // stop tiling if we reached max zoom, or if the tile is too simple\n            if (z === options.indexMaxZoom || tile.numPoints <= options.indexMaxPoints) continue;\n\n        // if a drilldown to a specific tile\n        } else {\n            // stop tiling if we reached base zoom or our target tile zoom\n            if (z === options.maxZoom || z === cz) continue;\n\n            // stop tiling if it's not an ancestor of the target tile\n            var m = 1 << (cz - z);\n            if (x !== Math.floor(cx / m) || y !== Math.floor(cy / m)) continue;\n        }\n\n        // if we slice further down, no need to keep source geometry\n        tile.source = null;\n\n        if (features.length === 0) continue;\n\n        if (debug > 1) console.time('clipping');\n\n        // values we'll use for clipping\n        var k1 = 0.5 * options.buffer / options.extent,\n            k2 = 0.5 - k1,\n            k3 = 0.5 + k1,\n            k4 = 1 + k1,\n            tl, bl, tr, br, left, right;\n\n        tl = bl = tr = br = null;\n\n        left  = clip(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, options);\n        right = clip(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, options);\n        features = null;\n\n        if (left) {\n            tl = clip(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);\n            bl = clip(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);\n            left = null;\n        }\n\n        if (right) {\n            tr = clip(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);\n            br = clip(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);\n            right = null;\n        }\n\n        if (debug > 1) console.timeEnd('clipping');\n\n        stack.push(tl || [], z + 1, x * 2,     y * 2);\n        stack.push(bl || [], z + 1, x * 2,     y * 2 + 1);\n        stack.push(tr || [], z + 1, x * 2 + 1, y * 2);\n        stack.push(br || [], z + 1, x * 2 + 1, y * 2 + 1);\n    }\n};\n\nGeoJSONVT.prototype.getTile = function (z, x, y) {\n    var options = this.options,\n        extent = options.extent,\n        debug = options.debug;\n\n    if (z < 0 || z > 24) return null;\n\n    var z2 = 1 << z;\n    x = ((x % z2) + z2) % z2; // wrap tile x coordinate\n\n    var id = toID(z, x, y);\n    if (this.tiles[id]) return transformTile(this.tiles[id], extent);\n\n    if (debug > 1) console.log('drilling down to z%d-%d-%d', z, x, y);\n\n    var z0 = z,\n        x0 = x,\n        y0 = y,\n        parent;\n\n    while (!parent && z0 > 0) {\n        z0--;\n        x0 = Math.floor(x0 / 2);\n        y0 = Math.floor(y0 / 2);\n        parent = this.tiles[toID(z0, x0, y0)];\n    }\n\n    if (!parent || !parent.source) return null;\n\n    // if we found a parent tile containing the original geometry, we can drill down from it\n    if (debug > 1) console.log('found parent tile z%d-%d-%d', z0, x0, y0);\n\n    if (debug > 1) console.time('drilling down');\n    this.splitTile(parent.source, z0, x0, y0, z, x, y);\n    if (debug > 1) console.timeEnd('drilling down');\n\n    return this.tiles[id] ? transformTile(this.tiles[id], extent) : null;\n};\n\nfunction toID(z, x, y) {\n    return (((1 << z) * y + x) * 32) + z;\n}\n\nfunction extend(dest, src) {\n    for (var i in src) dest[i] = src[i];\n    return dest;\n}\n\nreturn geojsonvt;\n\n})));\n\n},{}],227:[function(require,module,exports){\n'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n  if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n    throw new TypeError(prefix + ' must be a string or a buffer')\n  }\n}\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = Buffer.allocUnsafe(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    this.update(chunk, encoding)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this.digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  throwIfNotStringOrBuffer(data, 'Data')\n  if (this._finalized) throw new Error('Digest already called')\n  if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n\n  // reset state\n  this._block.fill(0)\n  this._blockOffset = 0\n  for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n\n},{\"inherits\":262,\"safe-buffer\":318,\"stream\":328}],228:[function(require,module,exports){\nvar hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n\n},{\"./hash/common\":229,\"./hash/hmac\":230,\"./hash/ripemd\":231,\"./hash/sha\":232,\"./hash/utils\":239}],229:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n\n},{\"./utils\":239,\"minimalistic-assert\":268}],230:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n\n},{\"./utils\":239,\"minimalistic-assert\":268}],231:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n\n},{\"./common\":229,\"./utils\":239}],232:[function(require,module,exports){\n'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n\n},{\"./sha/1\":233,\"./sha/224\":234,\"./sha/256\":235,\"./sha/384\":236,\"./sha/512\":237}],233:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":229,\"../utils\":239,\"./common\":238}],234:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n\n},{\"../utils\":239,\"./256\":235}],235:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":229,\"../utils\":239,\"./common\":238,\"minimalistic-assert\":268}],236:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n\n},{\"../utils\":239,\"./512\":237}],237:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\n},{\"../common\":229,\"../utils\":239,\"minimalistic-assert\":268}],238:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n\n},{\"../utils\":239}],239:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = (c >> 6) | 192;\n          res[p++] = (c & 63) | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = (c >> 18) | 240;\n          res[p++] = ((c >> 12) & 63) | 128;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        } else {\n          res[p++] = (c >> 12) | 224;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n\n},{\"inherits\":262,\"minimalistic-assert\":268}],240:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n\n},{\"hash.js\":228,\"minimalistic-assert\":268,\"minimalistic-crypto-utils\":269}],241:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n},{}],242:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst types_1 = require(\"./types\");\nconst keys = Object.keys(types_1.typeHandlers);\n// This map helps avoid validating for every single image type\nconst firstBytes = {\n    0x38: 'psd',\n    0x42: 'bmp',\n    0x44: 'dds',\n    0x47: 'gif',\n    0x49: 'tiff',\n    0x4d: 'tiff',\n    0x52: 'webp',\n    0x69: 'icns',\n    0x89: 'png',\n    0xff: 'jpg'\n};\nfunction detector(buffer) {\n    const byte = buffer[0];\n    if (byte in firstBytes) {\n        const type = firstBytes[byte];\n        if (types_1.typeHandlers[type].validate(buffer)) {\n            return type;\n        }\n    }\n    const finder = (key) => types_1.typeHandlers[key].validate(buffer);\n    return keys.find(finder);\n}\nexports.detector = detector;\n\n},{\"./types\":246}],243:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"fs\");\n// fs.promises polyfill for node 8.x\nif (!('promises' in fs)) {\n    class FileHandle {\n        constructor(fd) {\n            this.fd = fd;\n        }\n        stat() {\n            return new Promise((resolve, reject) => {\n                fs.fstat(this.fd, (err, stats) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve(stats);\n                    }\n                });\n            });\n        }\n        read(buffer, offset, length, position) {\n            return new Promise((resolve, reject) => {\n                fs.read(this.fd, buffer, offset, length, position, (err) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve();\n                    }\n                });\n            });\n        }\n        close() {\n            return new Promise((resolve, reject) => {\n                fs.close(this.fd, (err) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve();\n                    }\n                });\n            });\n        }\n    }\n    Object.defineProperty(fs, 'promises', {\n        value: {\n            open: (filepath, flags) => (new Promise((resolve, reject) => {\n                fs.open(filepath, flags, (err, fd) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve(new FileHandle(fd));\n                    }\n                });\n            })),\n        },\n        writable: false\n    });\n}\n\n},{\"fs\":177}],244:[function(require,module,exports){\n(function (process,Buffer){\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst queue_1 = require(\"queue\");\nconst types_1 = require(\"./types\");\nconst detector_1 = require(\"./detector\");\nrequire(\"./fs.promises\");\n// Maximum buffer size, with a default of 512 kilobytes.\n// TO-DO: make this adaptive based on the initial signature of the image\nconst MaxBufferSize = 512 * 1024;\n// This queue is for async `fs` operations, to avoid reaching file-descriptor limits\nconst queue = new queue_1.default({ concurrency: 100, autostart: true });\n/**\n * Return size information based on a buffer\n *\n * @param {Buffer} buffer\n * @param {String} filepath\n * @returns {Object}\n */\nfunction lookup(buffer, filepath) {\n    // detect the file type.. don't rely on the extension\n    const type = detector_1.detector(buffer);\n    // find an appropriate handler for this file type\n    if (type && type in types_1.typeHandlers) {\n        const size = types_1.typeHandlers[type].calculate(buffer, filepath);\n        if (size !== undefined) {\n            size.type = type;\n            return size;\n        }\n    }\n    // throw up, if we don't understand the file\n    throw new TypeError('unsupported file type: ' + type + ' (file: ' + filepath + ')');\n}\n/**\n * Reads a file into a buffer.\n * @param {String} filepath\n * @returns {Promise<Buffer>}\n */\nfunction asyncFileToBuffer(filepath) {\n    return __awaiter(this, void 0, void 0, function* () {\n        const handle = yield fs.promises.open(filepath, 'r');\n        const { size } = yield handle.stat();\n        if (size <= 0) {\n            throw new Error('Empty file');\n        }\n        const bufferSize = Math.min(size, MaxBufferSize);\n        const buffer = Buffer.alloc(bufferSize);\n        yield handle.read(buffer, 0, bufferSize, 0);\n        yield handle.close();\n        return buffer;\n    });\n}\n/**\n * Synchronously reads a file into a buffer, blocking the nodejs process.\n *\n * @param {String} filepath\n * @returns {Buffer}\n */\nfunction syncFileToBuffer(filepath) {\n    // read from the file, synchronously\n    const descriptor = fs.openSync(filepath, 'r');\n    const size = fs.fstatSync(descriptor).size;\n    const bufferSize = Math.min(size, MaxBufferSize);\n    const buffer = Buffer.alloc(bufferSize);\n    fs.readSync(descriptor, buffer, 0, bufferSize, 0);\n    fs.closeSync(descriptor);\n    return buffer;\n}\nmodule.exports = exports = imageSize; // backwards compatibility\n/**\n * @param {Buffer|string} input - buffer or relative/absolute path of the image file\n * @param {Function=} [callback] - optional function for async detection\n */\nfunction imageSize(input, callback) {\n    // Handle buffer input\n    if (Buffer.isBuffer(input)) {\n        return lookup(input);\n    }\n    // input should be a string at this point\n    if (typeof input !== 'string') {\n        throw new TypeError('invalid invocation');\n    }\n    // resolve the file path\n    const filepath = path.resolve(input);\n    if (typeof callback === 'function') {\n        queue.push(() => asyncFileToBuffer(filepath)\n            .then((buffer) => process.nextTick(callback, null, lookup(buffer, filepath)))\n            .catch(callback));\n    }\n    else {\n        const buffer = syncFileToBuffer(filepath);\n        return lookup(buffer, filepath);\n    }\n}\nexports.imageSize = imageSize;\nexports.setConcurrency = (c) => { queue.concurrency = c; };\nexports.types = Object.keys(types_1.typeHandlers);\n\n}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"./detector\":242,\"./fs.promises\":243,\"./types\":246,\"_process\":284,\"buffer\":182,\"fs\":177,\"path\":276,\"queue\":296}],245:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Abstract reading multi-byte unsigned integers\nfunction readUInt(buffer, bits, offset, isBigEndian) {\n    offset = offset || 0;\n    const endian = isBigEndian ? 'BE' : 'LE';\n    const methodName = ('readUInt' + bits + endian);\n    const method = buffer[methodName];\n    return method.call(buffer, offset);\n}\nexports.readUInt = readUInt;\n\n},{}],246:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst bmp_1 = require(\"./types/bmp\");\nconst cur_1 = require(\"./types/cur\");\nconst dds_1 = require(\"./types/dds\");\nconst gif_1 = require(\"./types/gif\");\nconst icns_1 = require(\"./types/icns\");\nconst ico_1 = require(\"./types/ico\");\nconst jpg_1 = require(\"./types/jpg\");\nconst ktx_1 = require(\"./types/ktx\");\nconst png_1 = require(\"./types/png\");\nconst pnm_1 = require(\"./types/pnm\");\nconst psd_1 = require(\"./types/psd\");\nconst svg_1 = require(\"./types/svg\");\nconst tiff_1 = require(\"./types/tiff\");\nconst webp_1 = require(\"./types/webp\");\nexports.typeHandlers = {\n    bmp: bmp_1.BMP,\n    cur: cur_1.CUR,\n    dds: dds_1.DDS,\n    gif: gif_1.GIF,\n    icns: icns_1.ICNS,\n    ico: ico_1.ICO,\n    jpg: jpg_1.JPG,\n    ktx: ktx_1.KTX,\n    png: png_1.PNG,\n    pnm: pnm_1.PNM,\n    psd: psd_1.PSD,\n    svg: svg_1.SVG,\n    tiff: tiff_1.TIFF,\n    webp: webp_1.WEBP,\n};\n\n},{\"./types/bmp\":247,\"./types/cur\":248,\"./types/dds\":249,\"./types/gif\":250,\"./types/icns\":251,\"./types/ico\":252,\"./types/jpg\":253,\"./types/ktx\":254,\"./types/png\":255,\"./types/pnm\":256,\"./types/psd\":257,\"./types/svg\":258,\"./types/tiff\":259,\"./types/webp\":260}],247:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BMP = {\n    validate(buffer) {\n        return ('BM' === buffer.toString('ascii', 0, 2));\n    },\n    calculate(buffer) {\n        return {\n            height: Math.abs(buffer.readInt32LE(22)),\n            width: buffer.readUInt32LE(18)\n        };\n    }\n};\n\n},{}],248:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ico_1 = require(\"./ico\");\nconst TYPE_CURSOR = 2;\nexports.CUR = {\n    validate(buffer) {\n        if (buffer.readUInt16LE(0) !== 0) {\n            return false;\n        }\n        return buffer.readUInt16LE(2) === TYPE_CURSOR;\n    },\n    calculate(buffer) {\n        return ico_1.ICO.calculate(buffer);\n    }\n};\n\n},{\"./ico\":252}],249:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DDS = {\n    validate(buffer) {\n        return buffer.readUInt32LE(0) === 0x20534444;\n    },\n    calculate(buffer) {\n        return {\n            height: buffer.readUInt32LE(12),\n            width: buffer.readUInt32LE(16)\n        };\n    }\n};\n\n},{}],250:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst gifRegexp = /^GIF8[79]a/;\nexports.GIF = {\n    validate(buffer) {\n        const signature = buffer.toString('ascii', 0, 6);\n        return (gifRegexp.test(signature));\n    },\n    calculate(buffer) {\n        return {\n            height: buffer.readUInt16LE(8),\n            width: buffer.readUInt16LE(6)\n        };\n    }\n};\n\n},{}],251:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * ICNS Header\n *\n * | Offset | Size | Purpose                                                |\n * | 0\t    | 4    | Magic literal, must be \"icns\" (0x69, 0x63, 0x6e, 0x73) |\n * | 4      | 4    | Length of file, in bytes, msb first.                   |\n *\n */\nconst SIZE_HEADER = 4 + 4; // 8\nconst FILE_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN\n/**\n * Image Entry\n *\n * | Offset | Size | Purpose                                                          |\n * | 0\t    | 4    | Icon type, see OSType below.                                     |\n * | 4      | 4    | Length of data, in bytes (including type and length), msb first. |\n * | 8      | n    | Icon data                                                        |\n */\nconst ENTRY_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN\n/* tslint:disable:object-literal-sort-keys */\nconst ICON_TYPE_SIZE = {\n    ICON: 32,\n    'ICN#': 32,\n    // m => 16 x 16\n    'icm#': 16,\n    icm4: 16,\n    icm8: 16,\n    // s => 16 x 16\n    'ics#': 16,\n    ics4: 16,\n    ics8: 16,\n    is32: 16,\n    s8mk: 16,\n    icp4: 16,\n    // l => 32 x 32\n    icl4: 32,\n    icl8: 32,\n    il32: 32,\n    l8mk: 32,\n    icp5: 32,\n    ic11: 32,\n    // h => 48 x 48\n    ich4: 48,\n    ich8: 48,\n    ih32: 48,\n    h8mk: 48,\n    // . => 64 x 64\n    icp6: 64,\n    ic12: 32,\n    // t => 128 x 128\n    it32: 128,\n    t8mk: 128,\n    ic07: 128,\n    // . => 256 x 256\n    ic08: 256,\n    ic13: 256,\n    // . => 512 x 512\n    ic09: 512,\n    ic14: 512,\n    // . => 1024 x 1024\n    ic10: 1024,\n};\n/* tslint:enable:object-literal-sort-keys */\nfunction readImageHeader(buffer, imageOffset) {\n    const imageLengthOffset = imageOffset + ENTRY_LENGTH_OFFSET;\n    return [\n        buffer.toString('ascii', imageOffset, imageLengthOffset),\n        buffer.readUInt32BE(imageLengthOffset)\n    ];\n}\nfunction getImageSize(type) {\n    const size = ICON_TYPE_SIZE[type];\n    return { width: size, height: size, type };\n}\nexports.ICNS = {\n    validate(buffer) {\n        return ('icns' === buffer.toString('ascii', 0, 4));\n    },\n    calculate(buffer) {\n        const bufferLength = buffer.length;\n        const fileLength = buffer.readUInt32BE(FILE_LENGTH_OFFSET);\n        let imageOffset = SIZE_HEADER;\n        let imageHeader = readImageHeader(buffer, imageOffset);\n        let imageSize = getImageSize(imageHeader[0]);\n        imageOffset += imageHeader[1];\n        if (imageOffset === fileLength) {\n            return imageSize;\n        }\n        const result = {\n            height: imageSize.height,\n            images: [imageSize],\n            width: imageSize.width\n        };\n        while (imageOffset < fileLength && imageOffset < bufferLength) {\n            imageHeader = readImageHeader(buffer, imageOffset);\n            imageSize = getImageSize(imageHeader[0]);\n            imageOffset += imageHeader[1];\n            result.images.push(imageSize);\n        }\n        return result;\n    }\n};\n\n},{}],252:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst TYPE_ICON = 1;\n/**\n * ICON Header\n *\n * | Offset | Size | Purpose |\n * | 0\t    | 2    | Reserved. Must always be 0.  |\n * | 2      | 2    | Image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid. |\n * | 4      | 2    | Number of images in the file. |\n *\n */\nconst SIZE_HEADER = 2 + 2 + 2; // 6\n/**\n * Image Entry\n *\n * | Offset | Size | Purpose |\n * | 0\t    | 1    | Image width in pixels. Can be any number between 0 and 255. Value 0 means width is 256 pixels. |\n * | 1      | 1    | Image height in pixels. Can be any number between 0 and 255. Value 0 means height is 256 pixels. |\n * | 2      | 1    | Number of colors in the color palette. Should be 0 if the image does not use a color palette. |\n * | 3      | 1    | Reserved. Should be 0. |\n * | 4      | 2    | ICO format: Color planes. Should be 0 or 1. |\n * |        |      | CUR format: The horizontal coordinates of the hotspot in number of pixels from the left. |\n * | 6      | 2    | ICO format: Bits per pixel. |\n * |        |      | CUR format: The vertical coordinates of the hotspot in number of pixels from the top. |\n * | 8      | 4    | The size of the image's data in bytes |\n * | 12     | 4    | The offset of BMP or PNG data from the beginning of the ICO/CUR file |\n *\n */\nconst SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4; // 16\nfunction getSizeFromOffset(buffer, offset) {\n    const value = buffer.readUInt8(offset);\n    return value === 0 ? 256 : value;\n}\nfunction getImageSize(buffer, imageIndex) {\n    const offset = SIZE_HEADER + (imageIndex * SIZE_IMAGE_ENTRY);\n    return {\n        height: getSizeFromOffset(buffer, offset + 1),\n        width: getSizeFromOffset(buffer, offset)\n    };\n}\nexports.ICO = {\n    validate(buffer) {\n        if (buffer.readUInt16LE(0) !== 0) {\n            return false;\n        }\n        return buffer.readUInt16LE(2) === TYPE_ICON;\n    },\n    calculate(buffer) {\n        const nbImages = buffer.readUInt16LE(4);\n        const imageSize = getImageSize(buffer, 0);\n        if (nbImages === 1) {\n            return imageSize;\n        }\n        const result = {\n            height: imageSize.height,\n            images: [imageSize],\n            width: imageSize.width\n        };\n        for (let imageIndex = 1; imageIndex < nbImages; imageIndex += 1) {\n            result.images.push(getImageSize(buffer, imageIndex));\n        }\n        return result;\n    }\n};\n\n},{}],253:[function(require,module,exports){\n\"use strict\";\n// NOTE: we only support baseline and progressive JPGs here\n// due to the structure of the loader class, we only get a buffer\n// with a maximum size of 4096 bytes. so if the SOF marker is outside\n// if this range we can't detect the file size correctly.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst readUInt_1 = require(\"../readUInt\");\nconst EXIF_MARKER = '45786966';\nconst APP1_DATA_SIZE_BYTES = 2;\nconst EXIF_HEADER_BYTES = 6;\nconst TIFF_BYTE_ALIGN_BYTES = 2;\nconst BIG_ENDIAN_BYTE_ALIGN = '4d4d';\nconst LITTLE_ENDIAN_BYTE_ALIGN = '4949';\n// Each entry is exactly 12 bytes\nconst IDF_ENTRY_BYTES = 12;\nconst NUM_DIRECTORY_ENTRIES_BYTES = 2;\nfunction isEXIF(buffer) {\n    return (buffer.toString('hex', 2, 6) === EXIF_MARKER);\n}\nfunction extractSize(buffer, index) {\n    return {\n        height: buffer.readUInt16BE(index),\n        width: buffer.readUInt16BE(index + 2)\n    };\n}\nfunction validateExifBlock(buffer, index) {\n    // Skip APP1 Data Size\n    const exifBlock = buffer.slice(APP1_DATA_SIZE_BYTES, index);\n    // Consider byte alignment\n    const byteAlign = exifBlock.toString('hex', EXIF_HEADER_BYTES, EXIF_HEADER_BYTES + TIFF_BYTE_ALIGN_BYTES);\n    // Ignore Empty EXIF. Validate byte alignment\n    const isBigEndian = byteAlign === BIG_ENDIAN_BYTE_ALIGN;\n    const isLittleEndian = byteAlign === LITTLE_ENDIAN_BYTE_ALIGN;\n    if (isBigEndian || isLittleEndian) {\n        return extractOrientation(exifBlock, isBigEndian);\n    }\n}\nfunction extractOrientation(exifBlock, isBigEndian) {\n    // TODO: assert that this contains 0x002A\n    // let STATIC_MOTOROLA_TIFF_HEADER_BYTES = 2\n    // let TIFF_IMAGE_FILE_DIRECTORY_BYTES = 4\n    // TODO: derive from TIFF_IMAGE_FILE_DIRECTORY_BYTES\n    const idfOffset = 8;\n    // IDF osset works from right after the header bytes\n    // (so the offset includes the tiff byte align)\n    const offset = EXIF_HEADER_BYTES + idfOffset;\n    const idfDirectoryEntries = readUInt_1.readUInt(exifBlock, 16, offset, isBigEndian);\n    for (let directoryEntryNumber = 0; directoryEntryNumber < idfDirectoryEntries; directoryEntryNumber++) {\n        const start = offset + NUM_DIRECTORY_ENTRIES_BYTES + (directoryEntryNumber * IDF_ENTRY_BYTES);\n        const end = start + IDF_ENTRY_BYTES;\n        // Skip on corrupt EXIF blocks\n        if (start > exifBlock.length) {\n            return;\n        }\n        const block = exifBlock.slice(start, end);\n        const tagNumber = readUInt_1.readUInt(block, 16, 0, isBigEndian);\n        // 0x0112 (decimal: 274) is the `orientation` tag ID\n        if (tagNumber === 274) {\n            const dataFormat = readUInt_1.readUInt(block, 16, 2, isBigEndian);\n            if (dataFormat !== 3) {\n                return;\n            }\n            // unsinged int has 2 bytes per component\n            // if there would more than 4 bytes in total it's a pointer\n            const numberOfComponents = readUInt_1.readUInt(block, 32, 4, isBigEndian);\n            if (numberOfComponents !== 1) {\n                return;\n            }\n            return readUInt_1.readUInt(block, 16, 8, isBigEndian);\n        }\n    }\n}\nfunction validateBuffer(buffer, index) {\n    // index should be within buffer limits\n    if (index > buffer.length) {\n        throw new TypeError('Corrupt JPG, exceeded buffer limits');\n    }\n    // Every JPEG block must begin with a 0xFF\n    if (buffer[index] !== 0xFF) {\n        throw new TypeError('Invalid JPG, marker table corrupted');\n    }\n}\nexports.JPG = {\n    validate(buffer) {\n        const SOIMarker = buffer.toString('hex', 0, 2);\n        return ('ffd8' === SOIMarker);\n    },\n    calculate(buffer) {\n        // Skip 4 chars, they are for signature\n        buffer = buffer.slice(4);\n        let orientation;\n        let next;\n        while (buffer.length) {\n            // read length of the next block\n            const i = buffer.readUInt16BE(0);\n            if (isEXIF(buffer)) {\n                orientation = validateExifBlock(buffer, i);\n            }\n            // ensure correct format\n            validateBuffer(buffer, i);\n            // 0xFFC0 is baseline standard(SOF)\n            // 0xFFC1 is baseline optimized(SOF)\n            // 0xFFC2 is progressive(SOF2)\n            next = buffer[i + 1];\n            if (next === 0xC0 || next === 0xC1 || next === 0xC2) {\n                const size = extractSize(buffer, i + 5);\n                // TODO: is orientation=0 a valid answer here?\n                if (!orientation) {\n                    return size;\n                }\n                return {\n                    height: size.height,\n                    orientation,\n                    width: size.width\n                };\n            }\n            // move to the next block\n            buffer = buffer.slice(i + 2);\n        }\n        throw new TypeError('Invalid JPG, no size found');\n    }\n};\n\n},{\"../readUInt\":245}],254:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SIGNATURE = 'KTX 11';\nexports.KTX = {\n    validate(buffer) {\n        return SIGNATURE === buffer.toString('ascii', 1, 7);\n    },\n    calculate(buffer) {\n        return {\n            height: buffer.readUInt32LE(40),\n            width: buffer.readUInt32LE(36),\n        };\n    }\n};\n\n},{}],255:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst pngSignature = 'PNG\\r\\n\\x1a\\n';\nconst pngImageHeaderChunkName = 'IHDR';\n// Used to detect \"fried\" png's: http://www.jongware.com/pngdefry.html\nconst pngFriedChunkName = 'CgBI';\nexports.PNG = {\n    validate(buffer) {\n        if (pngSignature === buffer.toString('ascii', 1, 8)) {\n            let chunkName = buffer.toString('ascii', 12, 16);\n            if (chunkName === pngFriedChunkName) {\n                chunkName = buffer.toString('ascii', 28, 32);\n            }\n            if (chunkName !== pngImageHeaderChunkName) {\n                throw new TypeError('Invalid PNG');\n            }\n            return true;\n        }\n        return false;\n    },\n    calculate(buffer) {\n        if (buffer.toString('ascii', 12, 16) === pngFriedChunkName) {\n            return {\n                height: buffer.readUInt32BE(36),\n                width: buffer.readUInt32BE(32)\n            };\n        }\n        return {\n            height: buffer.readUInt32BE(20),\n            width: buffer.readUInt32BE(16)\n        };\n    }\n};\n\n},{}],256:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst PNMTypes = {\n    P1: 'pbm/ascii',\n    P2: 'pgm/ascii',\n    P3: 'ppm/ascii',\n    P4: 'pbm',\n    P5: 'pgm',\n    P6: 'ppm',\n    P7: 'pam',\n    PF: 'pfm'\n};\nconst Signatures = Object.keys(PNMTypes);\nconst handlers = {\n    default: (lines) => {\n        let dimensions = [];\n        while (lines.length > 0) {\n            const line = lines.shift();\n            if (line[0] === '#') {\n                continue;\n            }\n            dimensions = line.split(' ');\n            break;\n        }\n        if (dimensions.length === 2) {\n            return {\n                height: parseInt(dimensions[1], 10),\n                width: parseInt(dimensions[0], 10),\n            };\n        }\n        else {\n            throw new TypeError('Invalid PNM');\n        }\n    },\n    pam: (lines) => {\n        const size = {};\n        while (lines.length > 0) {\n            const line = lines.shift();\n            if (line.length > 16 || line.charCodeAt(0) > 128) {\n                continue;\n            }\n            const [key, value] = line.split(' ');\n            if (key && value) {\n                size[key.toLowerCase()] = parseInt(value, 10);\n            }\n            if (size.height && size.width) {\n                break;\n            }\n        }\n        if (size.height && size.width) {\n            return {\n                height: size.height,\n                width: size.width\n            };\n        }\n        else {\n            throw new TypeError('Invalid PAM');\n        }\n    }\n};\nexports.PNM = {\n    validate(buffer) {\n        const signature = buffer.toString('ascii', 0, 2);\n        return Signatures.includes(signature);\n    },\n    calculate(buffer) {\n        const signature = buffer.toString('ascii', 0, 2);\n        const type = PNMTypes[signature];\n        // TODO: this probably generates garbage. move to a stream based parser\n        const lines = buffer.toString('ascii', 3).split(/[\\r\\n]+/);\n        const handler = handlers[type] || handlers.default;\n        return handler(lines);\n    }\n};\n\n},{}],257:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PSD = {\n    validate(buffer) {\n        return ('8BPS' === buffer.toString('ascii', 0, 4));\n    },\n    calculate(buffer) {\n        return {\n            height: buffer.readUInt32BE(14),\n            width: buffer.readUInt32BE(18)\n        };\n    }\n};\n\n},{}],258:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst svgReg = /<svg\\s([^>\"']|\"[^\"]*\"|'[^']*')*>/;\nconst extractorRegExps = {\n    height: /\\sheight=(['\"])([^%]+?)\\1/,\n    root: svgReg,\n    viewbox: /\\sviewBox=(['\"])(.+?)\\1/,\n    width: /\\swidth=(['\"])([^%]+?)\\1/,\n};\nconst INCH_CM = 2.54;\nconst units = {\n    cm: 96 / INCH_CM,\n    em: 16,\n    ex: 8,\n    m: 96 / INCH_CM * 100,\n    mm: 96 / INCH_CM / 10,\n    pc: 96 / 72 / 12,\n    pt: 96 / 72,\n};\nfunction parseLength(len) {\n    const m = /([0-9.]+)([a-z]*)/.exec(len);\n    if (!m) {\n        return undefined;\n    }\n    return Math.round(parseFloat(m[1]) * (units[m[2]] || 1));\n}\nfunction parseViewbox(viewbox) {\n    const bounds = viewbox.split(' ');\n    return {\n        height: parseLength(bounds[3]),\n        width: parseLength(bounds[2])\n    };\n}\nfunction parseAttributes(root) {\n    const width = root.match(extractorRegExps.width);\n    const height = root.match(extractorRegExps.height);\n    const viewbox = root.match(extractorRegExps.viewbox);\n    return {\n        height: height && parseLength(height[2]),\n        viewbox: viewbox && parseViewbox(viewbox[2]),\n        width: width && parseLength(width[2]),\n    };\n}\nfunction calculateByDimensions(attrs) {\n    return {\n        height: attrs.height,\n        width: attrs.width,\n    };\n}\nfunction calculateByViewbox(attrs) {\n    const viewbox = attrs && attrs.viewbox;\n    if (!viewbox) {\n        return;\n    }\n    const ratio = viewbox.width / viewbox.height;\n    if (attrs.width) {\n        return {\n            height: Math.floor(attrs.width / ratio),\n            width: attrs.width,\n        };\n    }\n    if (attrs.height) {\n        return {\n            height: attrs.height,\n            width: Math.floor(attrs.height * ratio),\n        };\n    }\n    return {\n        height: viewbox.height,\n        width: viewbox.width,\n    };\n}\nexports.SVG = {\n    validate(buffer) {\n        const str = String(buffer);\n        return svgReg.test(str);\n    },\n    calculate(buffer) {\n        const root = buffer.toString('utf8').match(extractorRegExps.root);\n        if (root) {\n            const attrs = parseAttributes(root[0]);\n            if (attrs.width && attrs.height) {\n                return calculateByDimensions(attrs);\n            }\n            if (attrs.viewbox) {\n                return calculateByViewbox(attrs);\n            }\n        }\n        throw new TypeError('Invalid SVG');\n    }\n};\n\n},{}],259:[function(require,module,exports){\n(function (Buffer){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// based on http://www.compix.com/fileformattif.htm\n// TO-DO: support big-endian as well\nconst fs = require(\"fs\");\nconst readUInt_1 = require(\"../readUInt\");\n// Read IFD (image-file-directory) into a buffer\nfunction readIFD(buffer, filepath, isBigEndian) {\n    const ifdOffset = readUInt_1.readUInt(buffer, 32, 4, isBigEndian);\n    // read only till the end of the file\n    let bufferSize = 1024;\n    const fileSize = fs.statSync(filepath).size;\n    if (ifdOffset + bufferSize > fileSize) {\n        bufferSize = fileSize - ifdOffset - 10;\n    }\n    // populate the buffer\n    const endBuffer = Buffer.alloc(bufferSize);\n    const descriptor = fs.openSync(filepath, 'r');\n    fs.readSync(descriptor, endBuffer, 0, bufferSize, ifdOffset);\n    return endBuffer.slice(2);\n}\n// TIFF values seem to be messed up on Big-Endian, this helps\nfunction readValue(buffer, isBigEndian) {\n    const low = readUInt_1.readUInt(buffer, 16, 8, isBigEndian);\n    const high = readUInt_1.readUInt(buffer, 16, 10, isBigEndian);\n    return (high << 16) + low;\n}\n// move to the next tag\nfunction nextTag(buffer) {\n    if (buffer.length > 24) {\n        return buffer.slice(12);\n    }\n}\n// Extract IFD tags from TIFF metadata\nfunction extractTags(buffer, isBigEndian) {\n    const tags = {};\n    let temp = buffer;\n    while (temp && temp.length) {\n        const code = readUInt_1.readUInt(temp, 16, 0, isBigEndian);\n        const type = readUInt_1.readUInt(temp, 16, 2, isBigEndian);\n        const length = readUInt_1.readUInt(temp, 32, 4, isBigEndian);\n        // 0 means end of IFD\n        if (code === 0) {\n            break;\n        }\n        else {\n            // 256 is width, 257 is height\n            // if (code === 256 || code === 257) {\n            if (length === 1 && (type === 3 || type === 4)) {\n                tags[code] = readValue(temp, isBigEndian);\n            }\n            // move to the next tag\n            temp = nextTag(temp);\n        }\n    }\n    return tags;\n}\n// Test if the TIFF is Big Endian or Little Endian\nfunction determineEndianness(buffer) {\n    const signature = buffer.toString('ascii', 0, 2);\n    if ('II' === signature) {\n        return 'LE';\n    }\n    else if ('MM' === signature) {\n        return 'BE';\n    }\n}\nconst signatures = [\n    // '492049', // currently not supported\n    '49492a00',\n    '4d4d002a',\n];\nexports.TIFF = {\n    validate(buffer) {\n        return signatures.includes(buffer.toString('hex', 0, 4));\n    },\n    calculate(buffer, filepath) {\n        if (!filepath) {\n            throw new TypeError('Tiff doesn\\'t support buffer');\n        }\n        // Determine BE/LE\n        const isBigEndian = determineEndianness(buffer) === 'BE';\n        // read the IFD\n        const ifdBuffer = readIFD(buffer, filepath, isBigEndian);\n        // extract the tags from the IFD\n        const tags = extractTags(ifdBuffer, isBigEndian);\n        const width = tags[256];\n        const height = tags[257];\n        if (!width || !height) {\n            throw new TypeError('Invalid Tiff. Missing tags');\n        }\n        return { height, width };\n    }\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"../readUInt\":245,\"buffer\":182,\"fs\":177}],260:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction calculateExtended(buffer) {\n    return {\n        height: 1 + buffer.readUIntLE(7, 3),\n        width: 1 + buffer.readUIntLE(4, 3)\n    };\n}\nfunction calculateLossless(buffer) {\n    return {\n        height: 1 + (((buffer[4] & 0xF) << 10) | (buffer[3] << 2) | ((buffer[2] & 0xC0) >> 6)),\n        width: 1 + (((buffer[2] & 0x3F) << 8) | buffer[1])\n    };\n}\nfunction calculateLossy(buffer) {\n    // `& 0x3fff` returns the last 14 bits\n    // TO-DO: include webp scaling in the calculations\n    return {\n        height: buffer.readInt16LE(8) & 0x3fff,\n        width: buffer.readInt16LE(6) & 0x3fff\n    };\n}\nexports.WEBP = {\n    validate(buffer) {\n        const riffHeader = 'RIFF' === buffer.toString('ascii', 0, 4);\n        const webpHeader = 'WEBP' === buffer.toString('ascii', 8, 12);\n        const vp8Header = 'VP8' === buffer.toString('ascii', 12, 15);\n        return (riffHeader && webpHeader && vp8Header);\n    },\n    calculate(buffer) {\n        const chunkHeader = buffer.toString('ascii', 12, 16);\n        buffer = buffer.slice(20, 30);\n        // Extended webp stream signature\n        if (chunkHeader === 'VP8X') {\n            const extendedHeader = buffer[0];\n            const validStart = (extendedHeader & 0xc0) === 0;\n            const validEnd = (extendedHeader & 0x01) === 0;\n            if (validStart && validEnd) {\n                return calculateExtended(buffer);\n            }\n            else {\n                // TODO: breaking change\n                throw new TypeError('Invalid WebP');\n            }\n        }\n        // Lossless webp stream signature\n        if (chunkHeader === 'VP8 ' && buffer[0] !== 0x2f) {\n            return calculateLossy(buffer);\n        }\n        // Lossy webp stream signature\n        const signature = buffer.toString('hex', 3, 6);\n        if (chunkHeader === 'VP8L' && signature !== '9d012a') {\n            return calculateLossless(buffer);\n        }\n        throw new TypeError('Invalid WebP');\n    }\n};\n\n},{}],261:[function(require,module,exports){\n\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n},{}],262:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n\n},{}],263:[function(require,module,exports){\n/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n},{}],264:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n},{}],265:[function(require,module,exports){\n/**\n * martinez v0.4.3\n * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor\n *\n * @author Alex Milevski <info@w8r.name>\n * @license MIT\n * @preserve\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.martinez = {})));\n}(this, (function (exports) { 'use strict';\n\n  function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }\n\n  var SplayTree = function SplayTree(compare, noDuplicates) {\n    if ( compare === void 0 ) compare = DEFAULT_COMPARE;\n    if ( noDuplicates === void 0 ) noDuplicates = false;\n\n    this._compare = compare;\n    this._root = null;\n    this._size = 0;\n    this._noDuplicates = !!noDuplicates;\n  };\n\n  var prototypeAccessors = { size: { configurable: true } };\n\n\n  SplayTree.prototype.rotateLeft = function rotateLeft (x) {\n    var y = x.right;\n    if (y) {\n      x.right = y.left;\n      if (y.left) { y.left.parent = x; }\n      y.parent = x.parent;\n    }\n\n    if (!x.parent)              { this._root = y; }\n    else if (x === x.parent.left) { x.parent.left = y; }\n    else                        { x.parent.right = y; }\n    if (y) { y.left = x; }\n    x.parent = y;\n  };\n\n\n  SplayTree.prototype.rotateRight = function rotateRight (x) {\n    var y = x.left;\n    if (y) {\n      x.left = y.right;\n      if (y.right) { y.right.parent = x; }\n      y.parent = x.parent;\n    }\n\n    if (!x.parent)             { this._root = y; }\n    else if(x === x.parent.left) { x.parent.left = y; }\n    else                       { x.parent.right = y; }\n    if (y) { y.right = x; }\n    x.parent = y;\n  };\n\n\n  SplayTree.prototype._splay = function _splay (x) {\n      var this$1 = this;\n\n    while (x.parent) {\n      var p = x.parent;\n      if (!p.parent) {\n        if (p.left === x) { this$1.rotateRight(p); }\n        else            { this$1.rotateLeft(p); }\n      } else if (p.left === x && p.parent.left === p) {\n        this$1.rotateRight(p.parent);\n        this$1.rotateRight(p);\n      } else if (p.right === x && p.parent.right === p) {\n        this$1.rotateLeft(p.parent);\n        this$1.rotateLeft(p);\n      } else if (p.left === x && p.parent.right === p) {\n        this$1.rotateRight(p);\n        this$1.rotateLeft(p);\n      } else {\n        this$1.rotateLeft(p);\n        this$1.rotateRight(p);\n      }\n    }\n  };\n\n\n  SplayTree.prototype.splay = function splay (x) {\n      var this$1 = this;\n\n    var p, gp, ggp, l, r;\n\n    while (x.parent) {\n      p = x.parent;\n      gp = p.parent;\n\n      if (gp && gp.parent) {\n        ggp = gp.parent;\n        if (ggp.left === gp) { ggp.left= x; }\n        else               { ggp.right = x; }\n        x.parent = ggp;\n      } else {\n        x.parent = null;\n        this$1._root = x;\n      }\n\n      l = x.left; r = x.right;\n\n      if (x === p.left) { // left\n        if (gp) {\n          if (gp.left === p) {\n            /* zig-zig */\n            if (p.right) {\n              gp.left = p.right;\n              gp.left.parent = gp;\n            } else { gp.left = null; }\n\n            p.right = gp;\n            gp.parent = p;\n          } else {\n            /* zig-zag */\n            if (l) {\n              gp.right = l;\n              l.parent = gp;\n            } else { gp.right = null; }\n\n            x.left  = gp;\n            gp.parent = x;\n          }\n        }\n        if (r) {\n          p.left = r;\n          r.parent = p;\n        } else { p.left = null; }\n\n        x.right= p;\n        p.parent = x;\n      } else { // right\n        if (gp) {\n          if (gp.right === p) {\n            /* zig-zig */\n            if (p.left) {\n              gp.right = p.left;\n              gp.right.parent = gp;\n            } else { gp.right = null; }\n\n            p.left = gp;\n            gp.parent = p;\n          } else {\n            /* zig-zag */\n            if (r) {\n              gp.left = r;\n              r.parent = gp;\n            } else { gp.left = null; }\n\n            x.right = gp;\n            gp.parent = x;\n          }\n        }\n        if (l) {\n          p.right = l;\n          l.parent = p;\n        } else { p.right = null; }\n\n        x.left = p;\n        p.parent = x;\n      }\n    }\n  };\n\n\n  SplayTree.prototype.replace = function replace (u, v) {\n    if (!u.parent) { this._root = v; }\n    else if (u === u.parent.left) { u.parent.left = v; }\n    else { u.parent.right = v; }\n    if (v) { v.parent = u.parent; }\n  };\n\n\n  SplayTree.prototype.minNode = function minNode (u) {\n      if ( u === void 0 ) u = this._root;\n\n    if (u) { while (u.left) { u = u.left; } }\n    return u;\n  };\n\n\n  SplayTree.prototype.maxNode = function maxNode (u) {\n      if ( u === void 0 ) u = this._root;\n\n    if (u) { while (u.right) { u = u.right; } }\n    return u;\n  };\n\n\n  SplayTree.prototype.insert = function insert (key, data) {\n    var z = this._root;\n    var p = null;\n    var comp = this._compare;\n    var cmp;\n\n    if (this._noDuplicates) {\n      while (z) {\n        p = z;\n        cmp = comp(z.key, key);\n        if (cmp === 0) { return; }\n        else if (comp(z.key, key) < 0) { z = z.right; }\n        else { z = z.left; }\n      }\n    } else {\n      while (z) {\n        p = z;\n        if (comp(z.key, key) < 0) { z = z.right; }\n        else { z = z.left; }\n      }\n    }\n\n    z = { key: key, data: data, left: null, right: null, parent: p };\n\n    if (!p)                        { this._root = z; }\n    else if (comp(p.key, z.key) < 0) { p.right = z; }\n    else                           { p.left= z; }\n\n    this.splay(z);\n    this._size++;\n    return z;\n  };\n\n\n  SplayTree.prototype.find = function find (key) {\n    var z  = this._root;\n    var comp = this._compare;\n    while (z) {\n      var cmp = comp(z.key, key);\n      if    (cmp < 0) { z = z.right; }\n      else if (cmp > 0) { z = z.left; }\n      else            { return z; }\n    }\n    return null;\n  };\n\n  /**\n   * Whether the tree contains a node with the given key\n   * @param{Key} key\n   * @return {boolean} true/false\n   */\n  SplayTree.prototype.contains = function contains (key) {\n    var node     = this._root;\n    var comparator = this._compare;\n    while (node){\n      var cmp = comparator(key, node.key);\n      if    (cmp === 0) { return true; }\n      else if (cmp < 0) { node = node.left; }\n      else              { node = node.right; }\n    }\n\n    return false;\n  };\n\n\n  SplayTree.prototype.remove = function remove (key) {\n    var z = this.find(key);\n\n    if (!z) { return false; }\n\n    this.splay(z);\n\n    if (!z.left) { this.replace(z, z.right); }\n    else if (!z.right) { this.replace(z, z.left); }\n    else {\n      var y = this.minNode(z.right);\n      if (y.parent !== z) {\n        this.replace(y, y.right);\n        y.right = z.right;\n        y.right.parent = y;\n      }\n      this.replace(z, y);\n      y.left = z.left;\n      y.left.parent = y;\n    }\n\n    this._size--;\n    return true;\n  };\n\n\n  SplayTree.prototype.removeNode = function removeNode (z) {\n    if (!z) { return false; }\n\n    this.splay(z);\n\n    if (!z.left) { this.replace(z, z.right); }\n    else if (!z.right) { this.replace(z, z.left); }\n    else {\n      var y = this.minNode(z.right);\n      if (y.parent !== z) {\n        this.replace(y, y.right);\n        y.right = z.right;\n        y.right.parent = y;\n      }\n      this.replace(z, y);\n      y.left = z.left;\n      y.left.parent = y;\n    }\n\n    this._size--;\n    return true;\n  };\n\n\n  SplayTree.prototype.erase = function erase (key) {\n    var z = this.find(key);\n    if (!z) { return; }\n\n    this.splay(z);\n\n    var s = z.left;\n    var t = z.right;\n\n    var sMax = null;\n    if (s) {\n      s.parent = null;\n      sMax = this.maxNode(s);\n      this.splay(sMax);\n      this._root = sMax;\n    }\n    if (t) {\n      if (s) { sMax.right = t; }\n      else { this._root = t; }\n      t.parent = sMax;\n    }\n\n    this._size--;\n  };\n\n  /**\n   * Removes and returns the node with smallest key\n   * @return {?Node}\n   */\n  SplayTree.prototype.pop = function pop () {\n    var node = this._root, returnValue = null;\n    if (node) {\n      while (node.left) { node = node.left; }\n      returnValue = { key: node.key, data: node.data };\n      this.remove(node.key);\n    }\n    return returnValue;\n  };\n\n\n  /* eslint-disable class-methods-use-this */\n\n  /**\n   * Successor node\n   * @param{Node} node\n   * @return {?Node}\n   */\n  SplayTree.prototype.next = function next (node) {\n    var successor = node;\n    if (successor) {\n      if (successor.right) {\n        successor = successor.right;\n        while (successor && successor.left) { successor = successor.left; }\n      } else {\n        successor = node.parent;\n        while (successor && successor.right === node) {\n          node = successor; successor = successor.parent;\n        }\n      }\n    }\n    return successor;\n  };\n\n\n  /**\n   * Predecessor node\n   * @param{Node} node\n   * @return {?Node}\n   */\n  SplayTree.prototype.prev = function prev (node) {\n    var predecessor = node;\n    if (predecessor) {\n      if (predecessor.left) {\n        predecessor = predecessor.left;\n        while (predecessor && predecessor.right) { predecessor = predecessor.right; }\n      } else {\n        predecessor = node.parent;\n        while (predecessor && predecessor.left === node) {\n          node = predecessor;\n          predecessor = predecessor.parent;\n        }\n      }\n    }\n    return predecessor;\n  };\n  /* eslint-enable class-methods-use-this */\n\n\n  /**\n   * @param{forEachCallback} callback\n   * @return {SplayTree}\n   */\n  SplayTree.prototype.forEach = function forEach (callback) {\n    var current = this._root;\n    var s = [], done = false, i = 0;\n\n    while (!done) {\n      // Reach the left most Node of the current Node\n      if (current) {\n        // Place pointer to a tree node on the stack\n        // before traversing the node's left subtree\n        s.push(current);\n        current = current.left;\n      } else {\n        // BackTrack from the empty subtree and visit the Node\n        // at the top of the stack; however, if the stack is\n        // empty you are done\n        if (s.length > 0) {\n          current = s.pop();\n          callback(current, i++);\n\n          // We have visited the node and its left\n          // subtree. Now, it's right subtree's turn\n          current = current.right;\n        } else { done = true; }\n      }\n    }\n    return this;\n  };\n\n\n  /**\n   * Walk key range from `low` to `high`. Stops if `fn` returns a value.\n   * @param{Key}    low\n   * @param{Key}    high\n   * @param{Function} fn\n   * @param{*?}     ctx\n   * @return {SplayTree}\n   */\n  SplayTree.prototype.range = function range (low, high, fn, ctx) {\n      var this$1 = this;\n\n    var Q = [];\n    var compare = this._compare;\n    var node = this._root, cmp;\n\n    while (Q.length !== 0 || node) {\n      if (node) {\n        Q.push(node);\n        node = node.left;\n      } else {\n        node = Q.pop();\n        cmp = compare(node.key, high);\n        if (cmp > 0) {\n          break;\n        } else if (compare(node.key, low) >= 0) {\n          if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned\n        }\n        node = node.right;\n      }\n    }\n    return this;\n  };\n\n  /**\n   * Returns all keys in order\n   * @return {Array<Key>}\n   */\n  SplayTree.prototype.keys = function keys () {\n    var current = this._root;\n    var s = [], r = [], done = false;\n\n    while (!done) {\n      if (current) {\n        s.push(current);\n        current = current.left;\n      } else {\n        if (s.length > 0) {\n          current = s.pop();\n          r.push(current.key);\n          current = current.right;\n        } else { done = true; }\n      }\n    }\n    return r;\n  };\n\n\n  /**\n   * Returns `data` fields of all nodes in order.\n   * @return {Array<Value>}\n   */\n  SplayTree.prototype.values = function values () {\n    var current = this._root;\n    var s = [], r = [], done = false;\n\n    while (!done) {\n      if (current) {\n        s.push(current);\n        current = current.left;\n      } else {\n        if (s.length > 0) {\n          current = s.pop();\n          r.push(current.data);\n          current = current.right;\n        } else { done = true; }\n      }\n    }\n    return r;\n  };\n\n\n  /**\n   * Returns node at given index\n   * @param{number} index\n   * @return {?Node}\n   */\n  SplayTree.prototype.at = function at (index) {\n    // removed after a consideration, more misleading than useful\n    // index = index % this.size;\n    // if (index < 0) index = this.size - index;\n\n    var current = this._root;\n    var s = [], done = false, i = 0;\n\n    while (!done) {\n      if (current) {\n        s.push(current);\n        current = current.left;\n      } else {\n        if (s.length > 0) {\n          current = s.pop();\n          if (i === index) { return current; }\n          i++;\n          current = current.right;\n        } else { done = true; }\n      }\n    }\n    return null;\n  };\n\n  /**\n   * Bulk-load items. Both array have to be same size\n   * @param{Array<Key>}  keys\n   * @param{Array<Value>}[values]\n   * @param{Boolean}     [presort=false] Pre-sort keys and values, using\n   *                                       tree's comparator. Sorting is done\n   *                                       in-place\n   * @return {AVLTree}\n   */\n  SplayTree.prototype.load = function load (keys, values, presort) {\n      if ( keys === void 0 ) keys = [];\n      if ( values === void 0 ) values = [];\n      if ( presort === void 0 ) presort = false;\n\n    if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }\n    var size = keys.length;\n    if (presort) { sort(keys, values, 0, size - 1, this._compare); }\n    this._root = loadRecursive(null, keys, values, 0, size);\n    this._size = size;\n    return this;\n  };\n\n\n  SplayTree.prototype.min = function min () {\n    var node = this.minNode(this._root);\n    if (node) { return node.key; }\n    else    { return null; }\n  };\n\n\n  SplayTree.prototype.max = function max () {\n    var node = this.maxNode(this._root);\n    if (node) { return node.key; }\n    else    { return null; }\n  };\n\n  SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };\n  prototypeAccessors.size.get = function () { return this._size; };\n\n\n  /**\n   * Create a tree and load it with items\n   * @param{Array<Key>}        keys\n   * @param{Array<Value>?}      [values]\n\n   * @param{Function?}          [comparator]\n   * @param{Boolean?}           [presort=false] Pre-sort keys and values, using\n   *                                             tree's comparator. Sorting is done\n   *                                             in-place\n   * @param{Boolean?}           [noDuplicates=false] Allow duplicates\n   * @return {SplayTree}\n   */\n  SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {\n    return new SplayTree(comparator, noDuplicates).load(keys, values, presort);\n  };\n\n  Object.defineProperties( SplayTree.prototype, prototypeAccessors );\n\n\n  function loadRecursive (parent, keys, values, start, end) {\n    var size = end - start;\n    if (size > 0) {\n      var middle = start + Math.floor(size / 2);\n      var key    = keys[middle];\n      var data   = values[middle];\n      var node   = { key: key, data: data, parent: parent };\n      node.left    = loadRecursive(node, keys, values, start, middle);\n      node.right   = loadRecursive(node, keys, values, middle + 1, end);\n      return node;\n    }\n    return null;\n  }\n\n\n  function sort(keys, values, left, right, compare) {\n    if (left >= right) { return; }\n\n    var pivot = keys[(left + right) >> 1];\n    var i = left - 1;\n    var j = right + 1;\n\n    while (true) {\n      do { i++; } while (compare(keys[i], pivot) < 0);\n      do { j--; } while (compare(keys[j], pivot) > 0);\n      if (i >= j) { break; }\n\n      var tmp = keys[i];\n      keys[i] = keys[j];\n      keys[j] = tmp;\n\n      tmp = values[i];\n      values[i] = values[j];\n      values[j] = tmp;\n    }\n\n    sort(keys, values,  left,     j, compare);\n    sort(keys, values, j + 1, right, compare);\n  }\n\n  var NORMAL               = 0;\n  var NON_CONTRIBUTING     = 1;\n  var SAME_TRANSITION      = 2;\n  var DIFFERENT_TRANSITION = 3;\n\n  var INTERSECTION = 0;\n  var UNION        = 1;\n  var DIFFERENCE   = 2;\n  var XOR          = 3;\n\n  /**\n   * @param  {SweepEvent} event\n   * @param  {SweepEvent} prev\n   * @param  {Operation} operation\n   */\n  function computeFields (event, prev, operation) {\n    // compute inOut and otherInOut fields\n    if (prev === null) {\n      event.inOut      = false;\n      event.otherInOut = true;\n\n    // previous line segment in sweepline belongs to the same polygon\n    } else {\n      if (event.isSubject === prev.isSubject) {\n        event.inOut      = !prev.inOut;\n        event.otherInOut = prev.otherInOut;\n\n      // previous line segment in sweepline belongs to the clipping polygon\n      } else {\n        event.inOut      = !prev.otherInOut;\n        event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;\n      }\n\n      // compute prevInResult field\n      if (prev) {\n        event.prevInResult = (!inResult(prev, operation) || prev.isVertical())\n          ? prev.prevInResult : prev;\n      }\n    }\n\n    // check if the line segment belongs to the Boolean operation\n    event.inResult = inResult(event, operation);\n  }\n\n\n  /* eslint-disable indent */\n  function inResult(event, operation) {\n    switch (event.type) {\n      case NORMAL:\n        switch (operation) {\n          case INTERSECTION:\n            return !event.otherInOut;\n          case UNION:\n            return event.otherInOut;\n          case DIFFERENCE:\n            // return (event.isSubject && !event.otherInOut) ||\n            //         (!event.isSubject && event.otherInOut);\n            return (event.isSubject && event.otherInOut) ||\n                    (!event.isSubject && !event.otherInOut);\n          case XOR:\n            return true;\n        }\n        break;\n      case SAME_TRANSITION:\n        return operation === INTERSECTION || operation === UNION;\n      case DIFFERENT_TRANSITION:\n        return operation === DIFFERENCE;\n      case NON_CONTRIBUTING:\n        return false;\n    }\n    return false;\n  }\n  /* eslint-enable indent */\n\n  var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {\n\n    /**\n     * Is left endpoint?\n     * @type {Boolean}\n     */\n    this.left = left;\n\n    /**\n     * @type {Array.<Number>}\n     */\n    this.point = point;\n\n    /**\n     * Other edge reference\n     * @type {SweepEvent}\n     */\n    this.otherEvent = otherEvent;\n\n    /**\n     * Belongs to source or clipping polygon\n     * @type {Boolean}\n     */\n    this.isSubject = isSubject;\n\n    /**\n     * Edge contribution type\n     * @type {Number}\n     */\n    this.type = edgeType || NORMAL;\n\n\n    /**\n     * In-out transition for the sweepline crossing polygon\n     * @type {Boolean}\n     */\n    this.inOut = false;\n\n\n    /**\n     * @type {Boolean}\n     */\n    this.otherInOut = false;\n\n    /**\n     * Previous event in result?\n     * @type {SweepEvent}\n     */\n    this.prevInResult = null;\n\n    /**\n     * Does event belong to result?\n     * @type {Boolean}\n     */\n    this.inResult = false;\n\n\n    // connection step\n\n    /**\n     * @type {Boolean}\n     */\n    this.resultInOut = false;\n\n    this.isExteriorRing = true;\n  };\n\n\n  /**\n   * @param{Array.<Number>}p\n   * @return {Boolean}\n   */\n  SweepEvent.prototype.isBelow = function isBelow (p) {\n    var p0 = this.point, p1 = this.otherEvent.point;\n    return this.left\n      ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0\n      // signedArea(this.point, this.otherEvent.point, p) > 0 :\n      : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;\n      //signedArea(this.otherEvent.point, this.point, p) > 0;\n  };\n\n\n  /**\n   * @param{Array.<Number>}p\n   * @return {Boolean}\n   */\n  SweepEvent.prototype.isAbove = function isAbove (p) {\n    return !this.isBelow(p);\n  };\n\n\n  /**\n   * @return {Boolean}\n   */\n  SweepEvent.prototype.isVertical = function isVertical () {\n    return this.point[0] === this.otherEvent.point[0];\n  };\n\n\n  SweepEvent.prototype.clone = function clone () {\n    var copy = new SweepEvent(\n      this.point, this.left, this.otherEvent, this.isSubject, this.type);\n\n    copy.inResult     = this.inResult;\n    copy.prevInResult = this.prevInResult;\n    copy.isExteriorRing = this.isExteriorRing;\n    copy.inOut        = this.inOut;\n    copy.otherInOut   = this.otherInOut;\n\n    return copy;\n  };\n\n  function equals(p1, p2) {\n    if (p1[0] === p2[0]) {\n      if (p1[1] === p2[1]) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n    return false;\n  }\n\n  // const EPSILON = 1e-9;\n  // const abs = Math.abs;\n  // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164\n  // Precision problem.\n  //\n  // module.exports = function equals(p1, p2) {\n  //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;\n  // };\n\n  /**\n   * Signed area of the triangle (p0, p1, p2)\n   * @param  {Array.<Number>} p0\n   * @param  {Array.<Number>} p1\n   * @param  {Array.<Number>} p2\n   * @return {Number}\n   */\n  function signedArea(p0, p1, p2) {\n    return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);\n  }\n\n  /**\n   * @param  {SweepEvent} e1\n   * @param  {SweepEvent} e2\n   * @return {Number}\n   */\n  function compareEvents(e1, e2) {\n    var p1 = e1.point;\n    var p2 = e2.point;\n\n    // Different x-coordinate\n    if (p1[0] > p2[0]) { return 1; }\n    if (p1[0] < p2[0]) { return -1; }\n\n    // Different points, but same x-coordinate\n    // Event with lower y-coordinate is processed first\n    if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }\n\n    return specialCases(e1, e2, p1, p2);\n  }\n\n\n  /* eslint-disable no-unused-vars */\n  function specialCases(e1, e2, p1, p2) {\n    // Same coordinates, but one is a left endpoint and the other is\n    // a right endpoint. The right endpoint is processed first\n    if (e1.left !== e2.left)\n      { return e1.left ? 1 : -1; }\n\n    // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;\n    // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])\n    // Same coordinates, both events\n    // are left endpoints or right endpoints.\n    // not collinear\n    if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {\n      // the event associate to the bottom segment is processed first\n      return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;\n    }\n\n    return (!e1.isSubject && e2.isSubject) ? 1 : -1;\n  }\n  /* eslint-enable no-unused-vars */\n\n  /**\n   * @param  {SweepEvent} se\n   * @param  {Array.<Number>} p\n   * @param  {Queue} queue\n   * @return {Queue}\n   */\n  function divideSegment(se, p, queue)  {\n    var r = new SweepEvent(p, false, se,            se.isSubject);\n    var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);\n\n    /* eslint-disable no-console */\n    if (equals(se.point, se.otherEvent.point)) {\n\n      console.warn('what is that, a collapsed segment?', se);\n    }\n    /* eslint-enable no-console */\n\n    r.contourId = l.contourId = se.contourId;\n\n    // avoid a rounding error. The left event would be processed after the right event\n    if (compareEvents(l, se.otherEvent) > 0) {\n      se.otherEvent.left = true;\n      l.left = false;\n    }\n\n    // avoid a rounding error. The left event would be processed after the right event\n    // if (compareEvents(se, r) > 0) {}\n\n    se.otherEvent.otherEvent = l;\n    se.otherEvent = r;\n\n    queue.push(l);\n    queue.push(r);\n\n    return queue;\n  }\n\n  //const EPS = 1e-9;\n\n  /**\n   * Finds the magnitude of the cross product of two vectors (if we pretend\n   * they're in three dimensions)\n   *\n   * @param {Object} a First vector\n   * @param {Object} b Second vector\n   * @private\n   * @returns {Number} The magnitude of the cross product\n   */\n  function crossProduct(a, b) {\n    return (a[0] * b[1]) - (a[1] * b[0]);\n  }\n\n  /**\n   * Finds the dot product of two vectors.\n   *\n   * @param {Object} a First vector\n   * @param {Object} b Second vector\n   * @private\n   * @returns {Number} The dot product\n   */\n  function dotProduct(a, b) {\n    return (a[0] * b[0]) + (a[1] * b[1]);\n  }\n\n  /**\n   * Finds the intersection (if any) between two line segments a and b, given the\n   * line segments' end points a1, a2 and b1, b2.\n   *\n   * This algorithm is based on Schneider and Eberly.\n   * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf\n   * Page 244.\n   *\n   * @param {Array.<Number>} a1 point of first line\n   * @param {Array.<Number>} a2 point of first line\n   * @param {Array.<Number>} b1 point of second line\n   * @param {Array.<Number>} b2 point of second line\n   * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints\n   *                                         (meaning connected segments) as\n   *                                         intersections\n   * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of\n   * intersection. If they overlap, the two end points of the overlapping segment.\n   * Otherwise, null.\n   */\n  function intersection (a1, a2, b1, b2, noEndpointTouch) {\n    // The algorithm expects our lines in the form P + sd, where P is a point,\n    // s is on the interval [0, 1], and d is a vector.\n    // We are passed two points. P can be the first point of each pair. The\n    // vector, then, could be thought of as the distance (in x and y components)\n    // from the first point to the second point.\n    // So first, let's make our vectors:\n    var va = [a2[0] - a1[0], a2[1] - a1[1]];\n    var vb = [b2[0] - b1[0], b2[1] - b1[1]];\n    // We also define a function to convert back to regular point form:\n\n    /* eslint-disable arrow-body-style */\n\n    function toPoint(p, s, d) {\n      return [\n        p[0] + s * d[0],\n        p[1] + s * d[1]\n      ];\n    }\n\n    /* eslint-enable arrow-body-style */\n\n    // The rest is pretty much a straight port of the algorithm.\n    var e = [b1[0] - a1[0], b1[1] - a1[1]];\n    var kross    = crossProduct(va, vb);\n    var sqrKross = kross * kross;\n    var sqrLenA  = dotProduct(va, va);\n    //const sqrLenB  = dotProduct(vb, vb);\n\n    // Check for line intersection. This works because of the properties of the\n    // cross product -- specifically, two vectors are parallel if and only if the\n    // cross product is the 0 vector. The full calculation involves relative error\n    // to account for possible very small line segments. See Schneider & Eberly\n    // for details.\n    if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {\n      // If they're not parallel, then (because these are line segments) they\n      // still might not actually intersect. This code checks that the\n      // intersection point of the lines is actually on both line segments.\n      var s = crossProduct(e, vb) / kross;\n      if (s < 0 || s > 1) {\n        // not on line segment a\n        return null;\n      }\n      var t = crossProduct(e, va) / kross;\n      if (t < 0 || t > 1) {\n        // not on line segment b\n        return null;\n      }\n      if (s === 0 || s === 1) {\n        // on an endpoint of line segment a\n        return noEndpointTouch ? null : [toPoint(a1, s, va)];\n      }\n      if (t === 0 || t === 1) {\n        // on an endpoint of line segment b\n        return noEndpointTouch ? null : [toPoint(b1, t, vb)];\n      }\n      return [toPoint(a1, s, va)];\n    }\n\n    // If we've reached this point, then the lines are either parallel or the\n    // same, but the segments could overlap partially or fully, or not at all.\n    // So we need to find the overlap, if any. To do that, we can use e, which is\n    // the (vector) difference between the two initial points. If this is parallel\n    // with the line itself, then the two lines are the same line, and there will\n    // be overlap.\n    //const sqrLenE = dotProduct(e, e);\n    kross = crossProduct(e, va);\n    sqrKross = kross * kross;\n\n    if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {\n    // Lines are just parallel, not the same. No overlap.\n      return null;\n    }\n\n    var sa = dotProduct(va, e) / sqrLenA;\n    var sb = sa + dotProduct(va, vb) / sqrLenA;\n    var smin = Math.min(sa, sb);\n    var smax = Math.max(sa, sb);\n\n    // this is, essentially, the FindIntersection acting on floats from\n    // Schneider & Eberly, just inlined into this function.\n    if (smin <= 1 && smax >= 0) {\n\n      // overlap on an end point\n      if (smin === 1) {\n        return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];\n      }\n\n      if (smax === 0) {\n        return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];\n      }\n\n      if (noEndpointTouch && smin === 0 && smax === 1) { return null; }\n\n      // There's overlap on a segment -- two points of intersection. Return both.\n      return [\n        toPoint(a1, smin > 0 ? smin : 0, va),\n        toPoint(a1, smax < 1 ? smax : 1, va)\n      ];\n    }\n\n    return null;\n  }\n\n  /**\n   * @param  {SweepEvent} se1\n   * @param  {SweepEvent} se2\n   * @param  {Queue}      queue\n   * @return {Number}\n   */\n  function possibleIntersection (se1, se2, queue) {\n    // that disallows self-intersecting polygons,\n    // did cost us half a day, so I'll leave it\n    // out of respect\n    // if (se1.isSubject === se2.isSubject) return;\n    var inter = intersection(\n      se1.point, se1.otherEvent.point,\n      se2.point, se2.otherEvent.point\n    );\n\n    var nintersections = inter ? inter.length : 0;\n    if (nintersections === 0) { return 0; } // no intersection\n\n    // the line segments intersect at an endpoint of both line segments\n    if ((nintersections === 1) &&\n        (equals(se1.point, se2.point) ||\n         equals(se1.otherEvent.point, se2.otherEvent.point))) {\n      return 0;\n    }\n\n    if (nintersections === 2 && se1.isSubject === se2.isSubject) {\n      // if(se1.contourId === se2.contourId){\n      // console.warn('Edges of the same polygon overlap',\n      //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);\n      // }\n      //throw new Error('Edges of the same polygon overlap');\n      return 0;\n    }\n\n    // The line segments associated to se1 and se2 intersect\n    if (nintersections === 1) {\n\n      // if the intersection point is not an endpoint of se1\n      if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {\n        divideSegment(se1, inter[0], queue);\n      }\n\n      // if the intersection point is not an endpoint of se2\n      if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {\n        divideSegment(se2, inter[0], queue);\n      }\n      return 1;\n    }\n\n    // The line segments associated to se1 and se2 overlap\n    var events        = [];\n    var leftCoincide  = false;\n    var rightCoincide = false;\n\n    if (equals(se1.point, se2.point)) {\n      leftCoincide = true; // linked\n    } else if (compareEvents(se1, se2) === 1) {\n      events.push(se2, se1);\n    } else {\n      events.push(se1, se2);\n    }\n\n    if (equals(se1.otherEvent.point, se2.otherEvent.point)) {\n      rightCoincide = true;\n    } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {\n      events.push(se2.otherEvent, se1.otherEvent);\n    } else {\n      events.push(se1.otherEvent, se2.otherEvent);\n    }\n\n    if ((leftCoincide && rightCoincide) || leftCoincide) {\n      // both line segments are equal or share the left endpoint\n      se2.type = NON_CONTRIBUTING;\n      se1.type = (se2.inOut === se1.inOut)\n        ? SAME_TRANSITION : DIFFERENT_TRANSITION;\n\n      if (leftCoincide && !rightCoincide) {\n        // honestly no idea, but changing events selection from [2, 1]\n        // to [0, 1] fixes the overlapping self-intersecting polygons issue\n        divideSegment(events[1].otherEvent, events[0].point, queue);\n      }\n      return 2;\n    }\n\n    // the line segments share the right endpoint\n    if (rightCoincide) {\n      divideSegment(events[0], events[1].point, queue);\n      return 3;\n    }\n\n    // no line segment includes totally the other one\n    if (events[0] !== events[3].otherEvent) {\n      divideSegment(events[0], events[1].point, queue);\n      divideSegment(events[1], events[2].point, queue);\n      return 3;\n    }\n\n    // one line segment includes the other one\n    divideSegment(events[0], events[1].point, queue);\n    divideSegment(events[3].otherEvent, events[2].point, queue);\n\n    return 3;\n  }\n\n  /**\n   * @param  {SweepEvent} le1\n   * @param  {SweepEvent} le2\n   * @return {Number}\n   */\n  function compareSegments(le1, le2) {\n    if (le1 === le2) { return 0; }\n\n    // Segments are not collinear\n    if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||\n      signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {\n\n      // If they share their left endpoint use the right endpoint to sort\n      if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }\n\n      // Different left endpoint: use the left endpoint to sort\n      if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }\n\n      // has the line segment associated to e1 been inserted\n      // into S after the line segment associated to e2 ?\n      if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }\n\n      // The line segment associated to e2 has been inserted\n      // into S after the line segment associated to e1\n      return le1.isBelow(le2.point) ? -1 : 1;\n    }\n\n    if (le1.isSubject === le2.isSubject) { // same polygon\n      var p1 = le1.point, p2 = le2.point;\n      if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {\n        p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;\n        if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }\n        else { return le1.contourId > le2.contourId ? 1 : -1; }\n      }\n    } else { // Segments are collinear, but belong to separate polygons\n      return le1.isSubject ? -1 : 1;\n    }\n\n    return compareEvents(le1, le2) === 1 ? 1 : -1;\n  }\n\n  function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {\n    var sweepLine = new SplayTree(compareSegments);\n    var sortedEvents = [];\n\n    var rightbound = Math.min(sbbox[2], cbbox[2]);\n\n    var prev, next, begin;\n\n    while (eventQueue.length !== 0) {\n      var event = eventQueue.pop();\n      sortedEvents.push(event);\n\n      // optimization by bboxes for intersection and difference goes here\n      if ((operation === INTERSECTION && event.point[0] > rightbound) ||\n          (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {\n        break;\n      }\n\n      if (event.left) {\n        next  = prev = sweepLine.insert(event);\n        begin = sweepLine.minNode();\n\n        if (prev !== begin) { prev = sweepLine.prev(prev); }\n        else                { prev = null; }\n\n        next = sweepLine.next(next);\n\n        var prevEvent = prev ? prev.key : null;\n        var prevprevEvent = (void 0);\n        computeFields(event, prevEvent, operation);\n        if (next) {\n          if (possibleIntersection(event, next.key, eventQueue) === 2) {\n            computeFields(event, prevEvent, operation);\n            computeFields(event, next.key, operation);\n          }\n        }\n\n        if (prev) {\n          if (possibleIntersection(prev.key, event, eventQueue) === 2) {\n            var prevprev = prev;\n            if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }\n            else                    { prevprev = null; }\n\n            prevprevEvent = prevprev ? prevprev.key : null;\n            computeFields(prevEvent, prevprevEvent, operation);\n            computeFields(event,     prevEvent,     operation);\n          }\n        }\n      } else {\n        event = event.otherEvent;\n        next = prev = sweepLine.find(event);\n\n        if (prev && next) {\n\n          if (prev !== begin) { prev = sweepLine.prev(prev); }\n          else                { prev = null; }\n\n          next = sweepLine.next(next);\n          sweepLine.remove(event);\n\n          if (next && prev) {\n            possibleIntersection(prev.key, next.key, eventQueue);\n          }\n        }\n      }\n    }\n    return sortedEvents;\n  }\n\n  /**\n   * @param  {Array.<SweepEvent>} sortedEvents\n   * @return {Array.<SweepEvent>}\n   */\n  function orderEvents(sortedEvents) {\n    var event, i, len, tmp;\n    var resultEvents = [];\n    for (i = 0, len = sortedEvents.length; i < len; i++) {\n      event = sortedEvents[i];\n      if ((event.left && event.inResult) ||\n        (!event.left && event.otherEvent.inResult)) {\n        resultEvents.push(event);\n      }\n    }\n    // Due to overlapping edges the resultEvents array can be not wholly sorted\n    var sorted = false;\n    while (!sorted) {\n      sorted = true;\n      for (i = 0, len = resultEvents.length; i < len; i++) {\n        if ((i + 1) < len &&\n          compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {\n          tmp = resultEvents[i];\n          resultEvents[i] = resultEvents[i + 1];\n          resultEvents[i + 1] = tmp;\n          sorted = false;\n        }\n      }\n    }\n\n\n    for (i = 0, len = resultEvents.length; i < len; i++) {\n      event = resultEvents[i];\n      event.pos = i;\n    }\n\n    // imagine, the right event is found in the beginning of the queue,\n    // when his left counterpart is not marked yet\n    for (i = 0, len = resultEvents.length; i < len; i++) {\n      event = resultEvents[i];\n      if (!event.left) {\n        tmp = event.pos;\n        event.pos = event.otherEvent.pos;\n        event.otherEvent.pos = tmp;\n      }\n    }\n\n    return resultEvents;\n  }\n\n\n  /**\n   * @param  {Number} pos\n   * @param  {Array.<SweepEvent>} resultEvents\n   * @param  {Object>}    processed\n   * @return {Number}\n   */\n  function nextPos(pos, resultEvents, processed, origIndex) {\n    var newPos = pos + 1;\n    var length = resultEvents.length;\n    if (newPos > length - 1) { return pos - 1; }\n    var p  = resultEvents[pos].point;\n    var p1 = resultEvents[newPos].point;\n\n\n    // while in range and not the current one by value\n    while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {\n      if (!processed[newPos]) {\n        return newPos;\n      } else   {\n        newPos++;\n      }\n      p1 = resultEvents[newPos].point;\n    }\n\n    newPos = pos - 1;\n\n    while (processed[newPos] && newPos >= origIndex) {\n      newPos--;\n    }\n    return newPos;\n  }\n\n\n  /**\n   * @param  {Array.<SweepEvent>} sortedEvents\n   * @return {Array.<*>} polygons\n   */\n  function connectEdges(sortedEvents, operation) {\n    var i, len;\n    var resultEvents = orderEvents(sortedEvents);\n\n    // \"false\"-filled array\n    var processed = {};\n    var result = [];\n    var event;\n\n    for (i = 0, len = resultEvents.length; i < len; i++) {\n      if (processed[i]) { continue; }\n      var contour = [[]];\n\n      if (!resultEvents[i].isExteriorRing) {\n        if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {\n          result.push(contour);\n        } else if (result.length === 0) {\n          result.push([[contour]]);\n        } else {\n          result[result.length - 1].push(contour[0]);\n        }\n      } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {\n        result[result.length - 1].push(contour[0]);\n      } else {\n        result.push(contour);\n      }\n\n      var ringId = result.length - 1;\n      var pos = i;\n\n      var initial = resultEvents[i].point;\n      contour[0].push(initial);\n\n      while (pos >= i) {\n        event = resultEvents[pos];\n        processed[pos] = true;\n\n        if (event.left) {\n          event.resultInOut = false;\n          event.contourId   = ringId;\n        } else {\n          event.otherEvent.resultInOut = true;\n          event.otherEvent.contourId   = ringId;\n        }\n\n        pos = event.pos;\n        processed[pos] = true;\n        contour[0].push(resultEvents[pos].point);\n        pos = nextPos(pos, resultEvents, processed, i);\n      }\n\n      pos = pos === -1 ? i : pos;\n\n      event = resultEvents[pos];\n      processed[pos] = processed[event.pos] = true;\n      event.otherEvent.resultInOut = true;\n      event.otherEvent.contourId   = ringId;\n    }\n\n    // Handle if the result is a polygon (eg not multipoly)\n    // Commented it again, let's see what do we mean by that\n    // if (result.length === 1) result = result[0];\n    return result;\n  }\n\n  var tinyqueue = TinyQueue;\n  var default_1 = TinyQueue;\n\n  function TinyQueue(data, compare) {\n      var this$1 = this;\n\n      if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }\n\n      this.data = data || [];\n      this.length = this.data.length;\n      this.compare = compare || defaultCompare;\n\n      if (this.length > 0) {\n          for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }\n      }\n  }\n\n  function defaultCompare(a, b) {\n      return a < b ? -1 : a > b ? 1 : 0;\n  }\n\n  TinyQueue.prototype = {\n\n      push: function (item) {\n          this.data.push(item);\n          this.length++;\n          this._up(this.length - 1);\n      },\n\n      pop: function () {\n          if (this.length === 0) { return undefined; }\n\n          var top = this.data[0];\n          this.length--;\n\n          if (this.length > 0) {\n              this.data[0] = this.data[this.length];\n              this._down(0);\n          }\n          this.data.pop();\n\n          return top;\n      },\n\n      peek: function () {\n          return this.data[0];\n      },\n\n      _up: function (pos) {\n          var data = this.data;\n          var compare = this.compare;\n          var item = data[pos];\n\n          while (pos > 0) {\n              var parent = (pos - 1) >> 1;\n              var current = data[parent];\n              if (compare(item, current) >= 0) { break; }\n              data[pos] = current;\n              pos = parent;\n          }\n\n          data[pos] = item;\n      },\n\n      _down: function (pos) {\n          var this$1 = this;\n\n          var data = this.data;\n          var compare = this.compare;\n          var halfLength = this.length >> 1;\n          var item = data[pos];\n\n          while (pos < halfLength) {\n              var left = (pos << 1) + 1;\n              var right = left + 1;\n              var best = data[left];\n\n              if (right < this$1.length && compare(data[right], best) < 0) {\n                  left = right;\n                  best = data[right];\n              }\n              if (compare(best, item) >= 0) { break; }\n\n              data[pos] = best;\n              pos = left;\n          }\n\n          data[pos] = item;\n      }\n  };\n  tinyqueue.default = default_1;\n\n  var max = Math.max;\n  var min = Math.min;\n\n  var contourId = 0;\n\n\n  function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {\n    var i, len, s1, s2, e1, e2;\n    for (i = 0, len = contourOrHole.length - 1; i < len; i++) {\n      s1 = contourOrHole[i];\n      s2 = contourOrHole[i + 1];\n      e1 = new SweepEvent(s1, false, undefined, isSubject);\n      e2 = new SweepEvent(s2, false, e1,        isSubject);\n      e1.otherEvent = e2;\n\n      if (s1[0] === s2[0] && s1[1] === s2[1]) {\n        continue; // skip collapsed edges, or it breaks\n      }\n\n      e1.contourId = e2.contourId = depth;\n      if (!isExteriorRing) {\n        e1.isExteriorRing = false;\n        e2.isExteriorRing = false;\n      }\n      if (compareEvents(e1, e2) > 0) {\n        e2.left = true;\n      } else {\n        e1.left = true;\n      }\n\n      var x = s1[0], y = s1[1];\n      bbox[0] = min(bbox[0], x);\n      bbox[1] = min(bbox[1], y);\n      bbox[2] = max(bbox[2], x);\n      bbox[3] = max(bbox[3], y);\n\n      // Pushing it so the queue is sorted from left to right,\n      // with object on the left having the highest priority.\n      Q.push(e1);\n      Q.push(e2);\n    }\n  }\n\n\n  function fillQueue(subject, clipping, sbbox, cbbox, operation) {\n    var eventQueue = new tinyqueue(null, compareEvents);\n    var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;\n\n    for (i = 0, ii = subject.length; i < ii; i++) {\n      polygonSet = subject[i];\n      for (j = 0, jj = polygonSet.length; j < jj; j++) {\n        isExteriorRing = j === 0;\n        if (isExteriorRing) { contourId++; }\n        processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);\n      }\n    }\n\n    for (i = 0, ii = clipping.length; i < ii; i++) {\n      polygonSet = clipping[i];\n      for (j = 0, jj = polygonSet.length; j < jj; j++) {\n        isExteriorRing = j === 0;\n        if (operation === DIFFERENCE) { isExteriorRing = false; }\n        if (isExteriorRing) { contourId++; }\n        processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);\n      }\n    }\n\n    return eventQueue;\n  }\n\n  var EMPTY = [];\n\n\n  function trivialOperation(subject, clipping, operation) {\n    var result = null;\n    if (subject.length * clipping.length === 0) {\n      if        (operation === INTERSECTION) {\n        result = EMPTY;\n      } else if (operation === DIFFERENCE) {\n        result = subject;\n      } else if (operation === UNION ||\n                 operation === XOR) {\n        result = (subject.length === 0) ? clipping : subject;\n      }\n    }\n    return result;\n  }\n\n\n  function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {\n    var result = null;\n    if (sbbox[0] > cbbox[2] ||\n        cbbox[0] > sbbox[2] ||\n        sbbox[1] > cbbox[3] ||\n        cbbox[1] > sbbox[3]) {\n      if        (operation === INTERSECTION) {\n        result = EMPTY;\n      } else if (operation === DIFFERENCE) {\n        result = subject;\n      } else if (operation === UNION ||\n                 operation === XOR) {\n        result = subject.concat(clipping);\n      }\n    }\n    return result;\n  }\n\n\n  function boolean(subject, clipping, operation) {\n    if (typeof subject[0][0][0] === 'number') {\n      subject = [subject];\n    }\n    if (typeof clipping[0][0][0] === 'number') {\n      clipping = [clipping];\n    }\n    var trivial = trivialOperation(subject, clipping, operation);\n    if (trivial) {\n      return trivial === EMPTY ? null : trivial;\n    }\n    var sbbox = [Infinity, Infinity, -Infinity, -Infinity];\n    var cbbox = [Infinity, Infinity, -Infinity, -Infinity];\n\n    //console.time('fill queue');\n    var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);\n    //console.timeEnd('fill queue');\n\n    trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);\n    if (trivial) {\n      return trivial === EMPTY ? null : trivial;\n    }\n    //console.time('subdivide edges');\n    var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);\n    //console.timeEnd('subdivide edges');\n\n    //console.time('connect vertices');\n    var result = connectEdges(sortedEvents, operation);\n    //console.timeEnd('connect vertices');\n    return result;\n  }\n\n  function union (subject, clipping) {\n    return boolean(subject, clipping, UNION);\n  }\n\n  function diff (subject, clipping) {\n    return boolean(subject, clipping, DIFFERENCE);\n  }\n\n  function xor (subject, clipping){\n    return boolean(subject, clipping, XOR);\n  }\n\n  function intersection$1 (subject, clipping) {\n    return boolean(subject, clipping, INTERSECTION);\n  }\n\n  /**\n   * @enum {Number}\n   */\n  var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };\n\n  exports.union = union;\n  exports.diff = diff;\n  exports.xor = xor;\n  exports.intersection = intersection$1;\n  exports.operations = operations;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n\n},{}],266:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n  var M = ARRAY16\n  for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n  var a = this._a\n  var b = this._b\n  var c = this._c\n  var d = this._d\n\n  a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n  d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n  c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n  b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n  a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n  d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n  c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n  b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n  a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n  d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n  c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n  b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n  a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n  d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n  c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n  b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n  a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n  d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n  c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n  b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n  a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n  d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n  c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n  b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n  a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n  d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n  c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n  b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n  a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n  d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n  c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n  b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n  a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n  d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n  c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n  b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n  a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n  d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n  c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n  b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n  a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n  d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n  c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n  b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n  a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n  d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n  c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n  b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n  a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n  d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n  c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n  b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n  a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n  d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n  c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n  b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n  a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n  d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n  c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n  b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n  a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n  d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n  c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n  b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n  this._a = (this._a + a) | 0\n  this._b = (this._b + b) | 0\n  this._c = (this._c + c) | 0\n  this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n  return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n\n},{\"hash-base\":227,\"inherits\":262,\"safe-buffer\":318}],267:[function(require,module,exports){\nvar bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n  var len = n.bitLength();\n  var min_bytes = Math.ceil(len / 8);\n\n  // Generage random bytes until a number less than n is found.\n  // This ensures that 0..n-1 have an equal probability of being selected.\n  do\n    var a = new bn(this.rand.generate(min_bytes));\n  while (a.cmp(n) >= 0);\n\n  return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n  // Generate a random number greater than or equal to start and less than stop.\n  var size = stop.sub(start);\n  return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n\n},{\"bn.js\":147,\"brorand\":148}],268:[function(require,module,exports){\nmodule.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n\n},{}],269:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n\n},{}],270:[function(require,module,exports){\nexports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n    if (typeof location !== 'undefined') {\n        return location.hostname\n    }\n    else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n    return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n    return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n    if (typeof navigator !== 'undefined') {\n        return navigator.appVersion;\n    }\n    return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n    return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n\n},{}],271:[function(require,module,exports){\nmodule.exports={\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}\n},{}],272:[function(require,module,exports){\n// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('modulus').int(),\n    this.key('publicExponent').int(),\n    this.key('privateExponent').int(),\n    this.key('prime1').int(),\n    this.key('prime2').int(),\n    this.key('exponent1').int(),\n    this.key('exponent2').int(),\n    this.key('coefficient').int()\n  )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n  this.seq().obj(\n    this.key('modulus').int(),\n    this.key('publicExponent').int()\n  )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('none').null_().optional(),\n    this.key('curve').objid().optional(),\n    this.key('params').seq().obj(\n      this.key('p').int(),\n      this.key('q').int(),\n      this.key('g').int()\n    ).optional()\n  )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').seq().obj(\n      this.key('id').objid(),\n      this.key('decrypt').seq().obj(\n        this.key('kde').seq().obj(\n          this.key('id').objid(),\n          this.key('kdeparams').seq().obj(\n            this.key('salt').octstr(),\n            this.key('iters').int()\n          )\n        ),\n        this.key('cipher').seq().obj(\n          this.key('algo').objid(),\n          this.key('iv').octstr()\n        )\n      )\n    ),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('p').int(),\n    this.key('q').int(),\n    this.key('g').int(),\n    this.key('pub_key').int(),\n    this.key('priv_key').int()\n  )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n  this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('privateKey').octstr(),\n    this.key('parameters').optional().explicit(0).use(ECParameters),\n    this.key('publicKey').optional().explicit(1).bitstr()\n  )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n  this.choice({\n    namedCurve: this.objid()\n  })\n})\n\nexports.signature = asn1.define('signature', function () {\n  this.seq().obj(\n    this.key('r').int(),\n    this.key('s').int()\n  )\n})\n\n},{\"./certificate\":273,\"asn1.js\":132}],273:[function(require,module,exports){\n// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n  this.choice({\n    utcTime: this.utctime(),\n    generalTime: this.gentime()\n  })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n  this.seq().obj(\n    this.key('type').objid(),\n    this.key('value').any()\n  )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('parameters').optional(),\n    this.key('curve').objid().optional()\n  )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n  this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n  this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n  this.choice({\n    rdnSequence: this.use(RDNSequence)\n  })\n})\n\nvar Validity = asn.define('Validity', function () {\n  this.seq().obj(\n    this.key('notBefore').use(Time),\n    this.key('notAfter').use(Time)\n  )\n})\n\nvar Extension = asn.define('Extension', function () {\n  this.seq().obj(\n    this.key('extnID').objid(),\n    this.key('critical').bool().def(false),\n    this.key('extnValue').octstr()\n  )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n  this.seq().obj(\n    this.key('version').explicit(0).int().optional(),\n    this.key('serialNumber').int(),\n    this.key('signature').use(AlgorithmIdentifier),\n    this.key('issuer').use(Name),\n    this.key('validity').use(Validity),\n    this.key('subject').use(Name),\n    this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n    this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n    this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n    this.key('extensions').explicit(3).seqof(Extension).optional()\n  )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n  this.seq().obj(\n    this.key('tbsCertificate').use(TBSCertificate),\n    this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n    this.key('signatureValue').bitstr()\n  )\n})\n\nmodule.exports = X509Certificate\n\n},{\"asn1.js\":132}],274:[function(require,module,exports){\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n  var key = okey.toString()\n  var match = key.match(findProc)\n  var decrypted\n  if (!match) {\n    var match2 = key.match(fullRegex)\n    decrypted = new Buffer(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n  } else {\n    var suite = 'aes' + match[1]\n    var iv = Buffer.from(match[2], 'hex')\n    var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n    var out = []\n    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n    out.push(cipher.update(cipherText))\n    out.push(cipher.final())\n    decrypted = Buffer.concat(out)\n  }\n  var tag = key.match(startRegex)[1]\n  return {\n    tag: tag,\n    data: decrypted\n  }\n}\n\n},{\"browserify-aes\":152,\"evp_bytestokey\":222,\"safe-buffer\":318}],275:[function(require,module,exports){\nvar asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n  var password\n  if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n    password = buffer.passphrase\n    buffer = buffer.key\n  }\n  if (typeof buffer === 'string') {\n    buffer = Buffer.from(buffer)\n  }\n\n  var stripped = fixProc(buffer, password)\n\n  var type = stripped.tag\n  var data = stripped.data\n  var subtype, ndata\n  switch (type) {\n    case 'CERTIFICATE':\n      ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n      // falls through\n    case 'PUBLIC KEY':\n      if (!ndata) {\n        ndata = asn1.PublicKey.decode(data, 'der')\n      }\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n        case '1.2.840.10045.2.1':\n          ndata.subjectPrivateKey = ndata.subjectPublicKey\n          return {\n            type: 'ec',\n            data: ndata\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n          return {\n            type: 'dsa',\n            data: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      throw new Error('unknown key type ' + type)\n    case 'ENCRYPTED PRIVATE KEY':\n      data = asn1.EncryptedPrivateKey.decode(data, 'der')\n      data = decrypt(data, password)\n      // falls through\n    case 'PRIVATE KEY':\n      ndata = asn1.PrivateKey.decode(data, 'der')\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n        case '1.2.840.10045.2.1':\n          return {\n            curve: ndata.algorithm.curve,\n            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n          return {\n            type: 'dsa',\n            params: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      throw new Error('unknown key type ' + type)\n    case 'RSA PUBLIC KEY':\n      return asn1.RSAPublicKey.decode(data, 'der')\n    case 'RSA PRIVATE KEY':\n      return asn1.RSAPrivateKey.decode(data, 'der')\n    case 'DSA PRIVATE KEY':\n      return {\n        type: 'dsa',\n        params: asn1.DSAPrivateKey.decode(data, 'der')\n      }\n    case 'EC PRIVATE KEY':\n      data = asn1.ECPrivateKey.decode(data, 'der')\n      return {\n        curve: data.parameters.value,\n        privateKey: data.privateKey\n      }\n    default: throw new Error('unknown key type ' + type)\n  }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n  var salt = data.algorithm.decrypt.kde.kdeparams.salt\n  var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n  var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n  var iv = data.algorithm.decrypt.cipher.iv\n  var cipherText = data.subjectPrivateKey\n  var keylen = parseInt(algo.split('-')[1], 10) / 8\n  var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n  var cipher = ciphers.createDecipheriv(algo, key, iv)\n  var out = []\n  out.push(cipher.update(cipherText))\n  out.push(cipher.final())\n  return Buffer.concat(out)\n}\n\n},{\"./aesid.json\":271,\"./asn1\":272,\"./fixProc\":274,\"browserify-aes\":152,\"pbkdf2\":278,\"safe-buffer\":318}],276:[function(require,module,exports){\n(function (process){\n// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\n}).call(this,require('_process'))\n},{\"_process\":284}],277:[function(require,module,exports){\n'use strict';\n\nmodule.exports = Pbf;\n\nvar ieee754 = require('ieee754');\n\nfunction Pbf(buf) {\n    this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);\n    this.pos = 0;\n    this.type = 0;\n    this.length = this.buf.length;\n}\n\nPbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nPbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64\nPbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nPbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32\n\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16),\n    SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\nPbf.prototype = {\n\n    destroy: function() {\n        this.buf = null;\n    },\n\n    // === READING =================================================================\n\n    readFields: function(readField, result, end) {\n        end = end || this.length;\n\n        while (this.pos < end) {\n            var val = this.readVarint(),\n                tag = val >> 3,\n                startPos = this.pos;\n\n            this.type = val & 0x7;\n            readField(tag, result, this);\n\n            if (this.pos === startPos) this.skip(val);\n        }\n        return result;\n    },\n\n    readMessage: function(readField, result) {\n        return this.readFields(readField, result, this.readVarint() + this.pos);\n    },\n\n    readFixed32: function() {\n        var val = readUInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n\n    readSFixed32: function() {\n        var val = readInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n\n    // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n    readFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n\n    readSFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n\n    readFloat: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 23, 4);\n        this.pos += 4;\n        return val;\n    },\n\n    readDouble: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 52, 8);\n        this.pos += 8;\n        return val;\n    },\n\n    readVarint: function(isSigned) {\n        var buf = this.buf,\n            val, b;\n\n        b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n        b = buf[this.pos];   val |= (b & 0x0f) << 28;\n\n        return readVarintRemainder(val, isSigned, this);\n    },\n\n    readVarint64: function() { // for compatibility with v2.0.1\n        return this.readVarint(true);\n    },\n\n    readSVarint: function() {\n        var num = this.readVarint();\n        return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n    },\n\n    readBoolean: function() {\n        return Boolean(this.readVarint());\n    },\n\n    readString: function() {\n        var end = this.readVarint() + this.pos,\n            str = readUtf8(this.buf, this.pos, end);\n        this.pos = end;\n        return str;\n    },\n\n    readBytes: function() {\n        var end = this.readVarint() + this.pos,\n            buffer = this.buf.subarray(this.pos, end);\n        this.pos = end;\n        return buffer;\n    },\n\n    // verbose for performance reasons; doesn't affect gzipped size\n\n    readPackedVarint: function(arr, isSigned) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readVarint(isSigned));\n        return arr;\n    },\n    readPackedSVarint: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSVarint());\n        return arr;\n    },\n    readPackedBoolean: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readBoolean());\n        return arr;\n    },\n    readPackedFloat: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFloat());\n        return arr;\n    },\n    readPackedDouble: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readDouble());\n        return arr;\n    },\n    readPackedFixed32: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed32());\n        return arr;\n    },\n    readPackedSFixed32: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed32());\n        return arr;\n    },\n    readPackedFixed64: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed64());\n        return arr;\n    },\n    readPackedSFixed64: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed64());\n        return arr;\n    },\n\n    skip: function(val) {\n        var type = val & 0x7;\n        if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}\n        else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;\n        else if (type === Pbf.Fixed32) this.pos += 4;\n        else if (type === Pbf.Fixed64) this.pos += 8;\n        else throw new Error('Unimplemented type: ' + type);\n    },\n\n    // === WRITING =================================================================\n\n    writeTag: function(tag, type) {\n        this.writeVarint((tag << 3) | type);\n    },\n\n    realloc: function(min) {\n        var length = this.length || 16;\n\n        while (length < this.pos + min) length *= 2;\n\n        if (length !== this.length) {\n            var buf = new Uint8Array(length);\n            buf.set(this.buf);\n            this.buf = buf;\n            this.length = length;\n        }\n    },\n\n    finish: function() {\n        this.length = this.pos;\n        this.pos = 0;\n        return this.buf.subarray(0, this.length);\n    },\n\n    writeFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n\n    writeSFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n\n    writeFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n\n    writeSFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n\n    writeVarint: function(val) {\n        val = +val || 0;\n\n        if (val > 0xfffffff || val < 0) {\n            writeBigVarint(val, this);\n            return;\n        }\n\n        this.realloc(4);\n\n        this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] =   (val >>> 7) & 0x7f;\n    },\n\n    writeSVarint: function(val) {\n        this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n    },\n\n    writeBoolean: function(val) {\n        this.writeVarint(Boolean(val));\n    },\n\n    writeString: function(str) {\n        str = String(str);\n        this.realloc(str.length * 4);\n\n        this.pos++; // reserve 1 byte for short string length\n\n        var startPos = this.pos;\n        // write the string directly to the buffer and see how much was written\n        this.pos = writeUtf8(this.buf, str, this.pos);\n        var len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n\n    writeFloat: function(val) {\n        this.realloc(4);\n        ieee754.write(this.buf, val, this.pos, true, 23, 4);\n        this.pos += 4;\n    },\n\n    writeDouble: function(val) {\n        this.realloc(8);\n        ieee754.write(this.buf, val, this.pos, true, 52, 8);\n        this.pos += 8;\n    },\n\n    writeBytes: function(buffer) {\n        var len = buffer.length;\n        this.writeVarint(len);\n        this.realloc(len);\n        for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n    },\n\n    writeRawMessage: function(fn, obj) {\n        this.pos++; // reserve 1 byte for short message length\n\n        // write the message directly to the buffer and see how much was written\n        var startPos = this.pos;\n        fn(obj, this);\n        var len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n\n    writeMessage: function(tag, fn, obj) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeRawMessage(fn, obj);\n    },\n\n    writePackedVarint:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr);   },\n    writePackedSVarint:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr);  },\n    writePackedBoolean:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr);  },\n    writePackedFloat:    function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr);    },\n    writePackedDouble:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr);   },\n    writePackedFixed32:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr);  },\n    writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },\n    writePackedFixed64:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr);  },\n    writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },\n\n    writeBytesField: function(tag, buffer) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeBytes(buffer);\n    },\n    writeFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFixed32(val);\n    },\n    writeSFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeSFixed32(val);\n    },\n    writeFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeFixed64(val);\n    },\n    writeSFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeSFixed64(val);\n    },\n    writeVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeVarint(val);\n    },\n    writeSVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeSVarint(val);\n    },\n    writeStringField: function(tag, str) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeString(str);\n    },\n    writeFloatField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFloat(val);\n    },\n    writeDoubleField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeDouble(val);\n    },\n    writeBooleanField: function(tag, val) {\n        this.writeVarintField(tag, Boolean(val));\n    }\n};\n\nfunction readVarintRemainder(l, s, p) {\n    var buf = p.buf,\n        h, b;\n\n    b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n    throw new Error('Expected varint not more than 10 bytes');\n}\n\nfunction readPackedEnd(pbf) {\n    return pbf.type === Pbf.Bytes ?\n        pbf.readVarint() + pbf.pos : pbf.pos + 1;\n}\n\nfunction toNum(low, high, isSigned) {\n    if (isSigned) {\n        return high * 0x100000000 + (low >>> 0);\n    }\n\n    return ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\nfunction writeBigVarint(val, pbf) {\n    var low, high;\n\n    if (val >= 0) {\n        low  = (val % 0x100000000) | 0;\n        high = (val / 0x100000000) | 0;\n    } else {\n        low  = ~(-val % 0x100000000);\n        high = ~(-val / 0x100000000);\n\n        if (low ^ 0xffffffff) {\n            low = (low + 1) | 0;\n        } else {\n            low = 0;\n            high = (high + 1) | 0;\n        }\n    }\n\n    if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n        throw new Error('Given varint doesn\\'t fit into 10 bytes');\n    }\n\n    pbf.realloc(10);\n\n    writeBigVarintLow(low, high, pbf);\n    writeBigVarintHigh(high, pbf);\n}\n\nfunction writeBigVarintLow(low, high, pbf) {\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos]   = low & 0x7f;\n}\n\nfunction writeBigVarintHigh(high, pbf) {\n    var lsb = (high & 0x07) << 4;\n\n    pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f;\n}\n\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n    var extraLen =\n        len <= 0x3fff ? 1 :\n        len <= 0x1fffff ? 2 :\n        len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));\n\n    // if 1 byte isn't enough for encoding message length, shift the data to the right\n    pbf.realloc(extraLen);\n    for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\n\nfunction writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }\nfunction writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }\nfunction writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }\nfunction writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }\nfunction writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }\nfunction writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }\nfunction writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }\nfunction writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }\nfunction writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\nfunction readUInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] * 0x1000000);\n}\n\nfunction writeInt32(buf, val, pos) {\n    buf[pos] = val;\n    buf[pos + 1] = (val >>> 8);\n    buf[pos + 2] = (val >>> 16);\n    buf[pos + 3] = (val >>> 24);\n}\n\nfunction readInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] << 24);\n}\n\nfunction readUtf8(buf, pos, end) {\n    var str = '';\n    var i = pos;\n\n    while (i < end) {\n        var b0 = buf[i];\n        var c = null; // codepoint\n        var bytesPerSequence =\n            b0 > 0xEF ? 4 :\n            b0 > 0xDF ? 3 :\n            b0 > 0xBF ? 2 : 1;\n\n        if (i + bytesPerSequence > end) break;\n\n        var b1, b2, b3;\n\n        if (bytesPerSequence === 1) {\n            if (b0 < 0x80) {\n                c = b0;\n            }\n        } else if (bytesPerSequence === 2) {\n            b1 = buf[i + 1];\n            if ((b1 & 0xC0) === 0x80) {\n                c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n                if (c <= 0x7F) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 3) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n                if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 4) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            b3 = buf[i + 3];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n                if (c <= 0xFFFF || c >= 0x110000) {\n                    c = null;\n                }\n            }\n        }\n\n        if (c === null) {\n            c = 0xFFFD;\n            bytesPerSequence = 1;\n\n        } else if (c > 0xFFFF) {\n            c -= 0x10000;\n            str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n            c = 0xDC00 | c & 0x3FF;\n        }\n\n        str += String.fromCharCode(c);\n        i += bytesPerSequence;\n    }\n\n    return str;\n}\n\nfunction writeUtf8(buf, str, pos) {\n    for (var i = 0, c, lead; i < str.length; i++) {\n        c = str.charCodeAt(i); // code point\n\n        if (c > 0xD7FF && c < 0xE000) {\n            if (lead) {\n                if (c < 0xDC00) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                    lead = c;\n                    continue;\n                } else {\n                    c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n                    lead = null;\n                }\n            } else {\n                if (c > 0xDBFF || (i + 1 === str.length)) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                } else {\n                    lead = c;\n                }\n                continue;\n            }\n        } else if (lead) {\n            buf[pos++] = 0xEF;\n            buf[pos++] = 0xBF;\n            buf[pos++] = 0xBD;\n            lead = null;\n        }\n\n        if (c < 0x80) {\n            buf[pos++] = c;\n        } else {\n            if (c < 0x800) {\n                buf[pos++] = c >> 0x6 | 0xC0;\n            } else {\n                if (c < 0x10000) {\n                    buf[pos++] = c >> 0xC | 0xE0;\n                } else {\n                    buf[pos++] = c >> 0x12 | 0xF0;\n                    buf[pos++] = c >> 0xC & 0x3F | 0x80;\n                }\n                buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n            }\n            buf[pos++] = c & 0x3F | 0x80;\n        }\n    }\n    return pos;\n}\n\n},{\"ieee754\":241}],278:[function(require,module,exports){\nexports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n\n},{\"./lib/async\":279,\"./lib/sync\":282}],279:[function(require,module,exports){\n(function (process,global){\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  'sha': 'SHA-1',\n  'sha-1': 'SHA-1',\n  'sha1': 'SHA-1',\n  'sha256': 'SHA-256',\n  'sha-256': 'SHA-256',\n  'sha384': 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\n\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    process.nextTick(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    process.nextTick(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n\n  if (!algo || typeof global.Promise !== 'function') {\n    return process.nextTick(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n  }\n\n  checkParameters(password, salt, iterations, keylen)\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n    return sync(password, salt, iterations, keylen, digest)\n  }), callback)\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./default-encoding\":280,\"./precondition\":281,\"./sync\":282,\"_process\":284,\"safe-buffer\":318}],280:[function(require,module,exports){\n(function (process){\nvar defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n  defaultEncoding = 'utf-8'\n} else {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n\n}).call(this,require('_process'))\n},{\"_process\":284}],281:[function(require,module,exports){\n(function (Buffer){\nvar MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nfunction checkBuffer (buf, name) {\n  if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n    throw new TypeError(name + ' must be a buffer or string')\n  }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n  checkBuffer(password, 'Password')\n  checkBuffer(salt, 'Salt')\n\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n\n}).call(this,{\"isBuffer\":require(\"../../is-buffer/index.js\")})\n},{\"../../is-buffer/index.js\":263}],282:[function(require,module,exports){\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n  function rmd160Func (data) {\n    return new RIPEMD160().update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  checkParameters(password, salt, iterations, keylen)\n\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n\n},{\"./default-encoding\":280,\"./precondition\":281,\"create-hash/md5\":189,\"ripemd160\":317,\"safe-buffer\":318,\"sha.js\":320}],283:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n\n}).call(this,require('_process'))\n},{\"_process\":284}],284:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],285:[function(require,module,exports){\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.proj4 = factory());\n}(this, (function () { 'use strict';\n\n\tvar globals = function(defs) {\n\t  defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n\t  defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n\t  defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n\t  defs.WGS84 = defs['EPSG:4326'];\n\t  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n\t  defs.GOOGLE = defs['EPSG:3857'];\n\t  defs['EPSG:900913'] = defs['EPSG:3857'];\n\t  defs['EPSG:102113'] = defs['EPSG:3857'];\n\t};\n\n\tvar PJD_3PARAM = 1;\n\tvar PJD_7PARAM = 2;\n\tvar PJD_WGS84 = 4; // WGS84 or equivalent\n\tvar PJD_NODATUM = 5; // WGS84 or equivalent\n\tvar SEC_TO_RAD = 4.84813681109535993589914102357e-6;\n\tvar HALF_PI = Math.PI/2;\n\t// ellipoid pj_set_ell.c\n\tvar SIXTH = 0.1666666666666666667;\n\t/* 1/6 */\n\tvar RA4 = 0.04722222222222222222;\n\t/* 17/360 */\n\tvar RA6 = 0.02215608465608465608;\n\tvar EPSLN = (typeof Number.EPSILON === 'undefined') ? 1.0e-10 : Number.EPSILON;\n\tvar D2R = 0.01745329251994329577;\n\tvar R2D = 57.29577951308232088;\n\tvar FORTPI = Math.PI/4;\n\tvar TWO_PI = Math.PI * 2;\n\t// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n\t// degree range by a tiny amount don't get wrapped. This prevents points that\n\t// have drifted from their original location along the 180th meridian (due to\n\t// floating point error) from changing their sign.\n\tvar SPI = 3.14159265359;\n\n\tvar exports$1 = {};\n\texports$1.greenwich = 0.0; //\"0dE\",\n\texports$1.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\n\texports$1.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\n\texports$1.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\n\texports$1.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\n\texports$1.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\n\texports$1.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\n\texports$1.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\n\texports$1.ferro = -17.666666666667; //\"17d40'W\",\n\texports$1.brussels = 4.367975; //\"4d22'4.71\\\"E\",\n\texports$1.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\n\texports$1.athens = 23.7163375; //\"23d42'58.815\\\"E\",\n\texports$1.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n\n\tvar units = {\n\t  ft: {to_meter: 0.3048},\n\t  'us-ft': {to_meter: 1200 / 3937}\n\t};\n\n\tvar ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\n\tfunction match(obj, key) {\n\t  if (obj[key]) {\n\t    return obj[key];\n\t  }\n\t  var keys = Object.keys(obj);\n\t  var lkey = key.toLowerCase().replace(ignoredChar, '');\n\t  var i = -1;\n\t  var testkey, processedKey;\n\t  while (++i < keys.length) {\n\t    testkey = keys[i];\n\t    processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n\t    if (processedKey === lkey) {\n\t      return obj[testkey];\n\t    }\n\t  }\n\t}\n\n\tvar parseProj = function(defData) {\n\t  var self = {};\n\t  var paramObj = defData.split('+').map(function(v) {\n\t    return v.trim();\n\t  }).filter(function(a) {\n\t    return a;\n\t  }).reduce(function(p, a) {\n\t    var split = a.split('=');\n\t    split.push(true);\n\t    p[split[0].toLowerCase()] = split[1];\n\t    return p;\n\t  }, {});\n\t  var paramName, paramVal, paramOutname;\n\t  var params = {\n\t    proj: 'projName',\n\t    datum: 'datumCode',\n\t    rf: function(v) {\n\t      self.rf = parseFloat(v);\n\t    },\n\t    lat_0: function(v) {\n\t      self.lat0 = v * D2R;\n\t    },\n\t    lat_1: function(v) {\n\t      self.lat1 = v * D2R;\n\t    },\n\t    lat_2: function(v) {\n\t      self.lat2 = v * D2R;\n\t    },\n\t    lat_ts: function(v) {\n\t      self.lat_ts = v * D2R;\n\t    },\n\t    lon_0: function(v) {\n\t      self.long0 = v * D2R;\n\t    },\n\t    lon_1: function(v) {\n\t      self.long1 = v * D2R;\n\t    },\n\t    lon_2: function(v) {\n\t      self.long2 = v * D2R;\n\t    },\n\t    alpha: function(v) {\n\t      self.alpha = parseFloat(v) * D2R;\n\t    },\n\t    lonc: function(v) {\n\t      self.longc = v * D2R;\n\t    },\n\t    x_0: function(v) {\n\t      self.x0 = parseFloat(v);\n\t    },\n\t    y_0: function(v) {\n\t      self.y0 = parseFloat(v);\n\t    },\n\t    k_0: function(v) {\n\t      self.k0 = parseFloat(v);\n\t    },\n\t    k: function(v) {\n\t      self.k0 = parseFloat(v);\n\t    },\n\t    a: function(v) {\n\t      self.a = parseFloat(v);\n\t    },\n\t    b: function(v) {\n\t      self.b = parseFloat(v);\n\t    },\n\t    r_a: function() {\n\t      self.R_A = true;\n\t    },\n\t    zone: function(v) {\n\t      self.zone = parseInt(v, 10);\n\t    },\n\t    south: function() {\n\t      self.utmSouth = true;\n\t    },\n\t    towgs84: function(v) {\n\t      self.datum_params = v.split(\",\").map(function(a) {\n\t        return parseFloat(a);\n\t      });\n\t    },\n\t    to_meter: function(v) {\n\t      self.to_meter = parseFloat(v);\n\t    },\n\t    units: function(v) {\n\t      self.units = v;\n\t      var unit = match(units, v);\n\t      if (unit) {\n\t        self.to_meter = unit.to_meter;\n\t      }\n\t    },\n\t    from_greenwich: function(v) {\n\t      self.from_greenwich = v * D2R;\n\t    },\n\t    pm: function(v) {\n\t      var pm = match(exports$1, v);\n\t      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n\t    },\n\t    nadgrids: function(v) {\n\t      if (v === '@null') {\n\t        self.datumCode = 'none';\n\t      }\n\t      else {\n\t        self.nadgrids = v;\n\t      }\n\t    },\n\t    axis: function(v) {\n\t      var legalAxis = \"ewnsud\";\n\t      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n\t        self.axis = v;\n\t      }\n\t    }\n\t  };\n\t  for (paramName in paramObj) {\n\t    paramVal = paramObj[paramName];\n\t    if (paramName in params) {\n\t      paramOutname = params[paramName];\n\t      if (typeof paramOutname === 'function') {\n\t        paramOutname(paramVal);\n\t      }\n\t      else {\n\t        self[paramOutname] = paramVal;\n\t      }\n\t    }\n\t    else {\n\t      self[paramName] = paramVal;\n\t    }\n\t  }\n\t  if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n\t    self.datumCode = self.datumCode.toLowerCase();\n\t  }\n\t  return self;\n\t};\n\n\tvar NEUTRAL = 1;\n\tvar KEYWORD = 2;\n\tvar NUMBER = 3;\n\tvar QUOTED = 4;\n\tvar AFTERQUOTE = 5;\n\tvar ENDED = -1;\n\tvar whitespace = /\\s/;\n\tvar latin = /[A-Za-z]/;\n\tvar keyword = /[A-Za-z84]/;\n\tvar endThings = /[,\\]]/;\n\tvar digets = /[\\d\\.E\\-\\+]/;\n\t// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\n\tfunction Parser(text) {\n\t  if (typeof text !== 'string') {\n\t    throw new Error('not a string');\n\t  }\n\t  this.text = text.trim();\n\t  this.level = 0;\n\t  this.place = 0;\n\t  this.root = null;\n\t  this.stack = [];\n\t  this.currentObject = null;\n\t  this.state = NEUTRAL;\n\t}\n\tParser.prototype.readCharicter = function() {\n\t  var char = this.text[this.place++];\n\t  if (this.state !== QUOTED) {\n\t    while (whitespace.test(char)) {\n\t      if (this.place >= this.text.length) {\n\t        return;\n\t      }\n\t      char = this.text[this.place++];\n\t    }\n\t  }\n\t  switch (this.state) {\n\t    case NEUTRAL:\n\t      return this.neutral(char);\n\t    case KEYWORD:\n\t      return this.keyword(char)\n\t    case QUOTED:\n\t      return this.quoted(char);\n\t    case AFTERQUOTE:\n\t      return this.afterquote(char);\n\t    case NUMBER:\n\t      return this.number(char);\n\t    case ENDED:\n\t      return;\n\t  }\n\t};\n\tParser.prototype.afterquote = function(char) {\n\t  if (char === '\"') {\n\t    this.word += '\"';\n\t    this.state = QUOTED;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.word = this.word.trim();\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n\t};\n\tParser.prototype.afterItem = function(char) {\n\t  if (char === ',') {\n\t    if (this.word !== null) {\n\t      this.currentObject.push(this.word);\n\t    }\n\t    this.word = null;\n\t    this.state = NEUTRAL;\n\t    return;\n\t  }\n\t  if (char === ']') {\n\t    this.level--;\n\t    if (this.word !== null) {\n\t      this.currentObject.push(this.word);\n\t      this.word = null;\n\t    }\n\t    this.state = NEUTRAL;\n\t    this.currentObject = this.stack.pop();\n\t    if (!this.currentObject) {\n\t      this.state = ENDED;\n\t    }\n\n\t    return;\n\t  }\n\t};\n\tParser.prototype.number = function(char) {\n\t  if (digets.test(char)) {\n\t    this.word += char;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.word = parseFloat(this.word);\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n\t};\n\tParser.prototype.quoted = function(char) {\n\t  if (char === '\"') {\n\t    this.state = AFTERQUOTE;\n\t    return;\n\t  }\n\t  this.word += char;\n\t  return;\n\t};\n\tParser.prototype.keyword = function(char) {\n\t  if (keyword.test(char)) {\n\t    this.word += char;\n\t    return;\n\t  }\n\t  if (char === '[') {\n\t    var newObjects = [];\n\t    newObjects.push(this.word);\n\t    this.level++;\n\t    if (this.root === null) {\n\t      this.root = newObjects;\n\t    } else {\n\t      this.currentObject.push(newObjects);\n\t    }\n\t    this.stack.push(this.currentObject);\n\t    this.currentObject = newObjects;\n\t    this.state = NEUTRAL;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n\t};\n\tParser.prototype.neutral = function(char) {\n\t  if (latin.test(char)) {\n\t    this.word = char;\n\t    this.state = KEYWORD;\n\t    return;\n\t  }\n\t  if (char === '\"') {\n\t    this.word = '';\n\t    this.state = QUOTED;\n\t    return;\n\t  }\n\t  if (digets.test(char)) {\n\t    this.word = char;\n\t    this.state = NUMBER;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n\t};\n\tParser.prototype.output = function() {\n\t  while (this.place < this.text.length) {\n\t    this.readCharicter();\n\t  }\n\t  if (this.state === ENDED) {\n\t    return this.root;\n\t  }\n\t  throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n\t};\n\n\tfunction parseString(txt) {\n\t  var parser = new Parser(txt);\n\t  return parser.output();\n\t}\n\n\tfunction mapit(obj, key, value) {\n\t  if (Array.isArray(key)) {\n\t    value.unshift(key);\n\t    key = null;\n\t  }\n\t  var thing = key ? {} : obj;\n\n\t  var out = value.reduce(function(newObj, item) {\n\t    sExpr(item, newObj);\n\t    return newObj\n\t  }, thing);\n\t  if (key) {\n\t    obj[key] = out;\n\t  }\n\t}\n\n\tfunction sExpr(v, obj) {\n\t  if (!Array.isArray(v)) {\n\t    obj[v] = true;\n\t    return;\n\t  }\n\t  var key = v.shift();\n\t  if (key === 'PARAMETER') {\n\t    key = v.shift();\n\t  }\n\t  if (v.length === 1) {\n\t    if (Array.isArray(v[0])) {\n\t      obj[key] = {};\n\t      sExpr(v[0], obj[key]);\n\t      return;\n\t    }\n\t    obj[key] = v[0];\n\t    return;\n\t  }\n\t  if (!v.length) {\n\t    obj[key] = true;\n\t    return;\n\t  }\n\t  if (key === 'TOWGS84') {\n\t    obj[key] = v;\n\t    return;\n\t  }\n\t  if (!Array.isArray(key)) {\n\t    obj[key] = {};\n\t  }\n\n\t  var i;\n\t  switch (key) {\n\t    case 'UNIT':\n\t    case 'PRIMEM':\n\t    case 'VERT_DATUM':\n\t      obj[key] = {\n\t        name: v[0].toLowerCase(),\n\t        convert: v[1]\n\t      };\n\t      if (v.length === 3) {\n\t        sExpr(v[2], obj[key]);\n\t      }\n\t      return;\n\t    case 'SPHEROID':\n\t    case 'ELLIPSOID':\n\t      obj[key] = {\n\t        name: v[0],\n\t        a: v[1],\n\t        rf: v[2]\n\t      };\n\t      if (v.length === 4) {\n\t        sExpr(v[3], obj[key]);\n\t      }\n\t      return;\n\t    case 'PROJECTEDCRS':\n\t    case 'PROJCRS':\n\t    case 'GEOGCS':\n\t    case 'GEOCCS':\n\t    case 'PROJCS':\n\t    case 'LOCAL_CS':\n\t    case 'GEODCRS':\n\t    case 'GEODETICCRS':\n\t    case 'GEODETICDATUM':\n\t    case 'EDATUM':\n\t    case 'ENGINEERINGDATUM':\n\t    case 'VERT_CS':\n\t    case 'VERTCRS':\n\t    case 'VERTICALCRS':\n\t    case 'COMPD_CS':\n\t    case 'COMPOUNDCRS':\n\t    case 'ENGINEERINGCRS':\n\t    case 'ENGCRS':\n\t    case 'FITTED_CS':\n\t    case 'LOCAL_DATUM':\n\t    case 'DATUM':\n\t      v[0] = ['name', v[0]];\n\t      mapit(obj, key, v);\n\t      return;\n\t    default:\n\t      i = -1;\n\t      while (++i < v.length) {\n\t        if (!Array.isArray(v[i])) {\n\t          return sExpr(v, obj[key]);\n\t        }\n\t      }\n\t      return mapit(obj, key, v);\n\t  }\n\t}\n\n\tvar D2R$1 = 0.01745329251994329577;\n\tfunction rename(obj, params) {\n\t  var outName = params[0];\n\t  var inName = params[1];\n\t  if (!(outName in obj) && (inName in obj)) {\n\t    obj[outName] = obj[inName];\n\t    if (params.length === 3) {\n\t      obj[outName] = params[2](obj[outName]);\n\t    }\n\t  }\n\t}\n\n\tfunction d2r(input) {\n\t  return input * D2R$1;\n\t}\n\n\tfunction cleanWKT(wkt) {\n\t  if (wkt.type === 'GEOGCS') {\n\t    wkt.projName = 'longlat';\n\t  } else if (wkt.type === 'LOCAL_CS') {\n\t    wkt.projName = 'identity';\n\t    wkt.local = true;\n\t  } else {\n\t    if (typeof wkt.PROJECTION === 'object') {\n\t      wkt.projName = Object.keys(wkt.PROJECTION)[0];\n\t    } else {\n\t      wkt.projName = wkt.PROJECTION;\n\t    }\n\t  }\n\t  if (wkt.UNIT) {\n\t    wkt.units = wkt.UNIT.name.toLowerCase();\n\t    if (wkt.units === 'metre') {\n\t      wkt.units = 'meter';\n\t    }\n\t    if (wkt.UNIT.convert) {\n\t      if (wkt.type === 'GEOGCS') {\n\t        if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n\t          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n\t        }\n\t      } else {\n\t        wkt.to_meter = wkt.UNIT.convert, 10;\n\t      }\n\t    }\n\t  }\n\t  var geogcs = wkt.GEOGCS;\n\t  if (wkt.type === 'GEOGCS') {\n\t    geogcs = wkt;\n\t  }\n\t  if (geogcs) {\n\t    //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n\t    //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n\t    //}\n\t    if (geogcs.DATUM) {\n\t      wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n\t    } else {\n\t      wkt.datumCode = geogcs.name.toLowerCase();\n\t    }\n\t    if (wkt.datumCode.slice(0, 2) === 'd_') {\n\t      wkt.datumCode = wkt.datumCode.slice(2);\n\t    }\n\t    if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n\t      wkt.datumCode = 'nzgd49';\n\t    }\n\t    if (wkt.datumCode === 'wgs_1984') {\n\t      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n\t        wkt.sphere = true;\n\t      }\n\t      wkt.datumCode = 'wgs84';\n\t    }\n\t    if (wkt.datumCode.slice(-6) === '_ferro') {\n\t      wkt.datumCode = wkt.datumCode.slice(0, - 6);\n\t    }\n\t    if (wkt.datumCode.slice(-8) === '_jakarta') {\n\t      wkt.datumCode = wkt.datumCode.slice(0, - 8);\n\t    }\n\t    if (~wkt.datumCode.indexOf('belge')) {\n\t      wkt.datumCode = 'rnb72';\n\t    }\n\t    if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n\t      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n\t      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n\t        wkt.ellps = 'intl';\n\t      }\n\n\t      wkt.a = geogcs.DATUM.SPHEROID.a;\n\t      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n\t    }\n\t    if (~wkt.datumCode.indexOf('osgb_1936')) {\n\t      wkt.datumCode = 'osgb36';\n\t    }\n\t  }\n\t  if (wkt.b && !isFinite(wkt.b)) {\n\t    wkt.b = wkt.a;\n\t  }\n\n\t  function toMeter(input) {\n\t    var ratio = wkt.to_meter || 1;\n\t    return input * ratio;\n\t  }\n\t  var renamer = function(a) {\n\t    return rename(wkt, a);\n\t  };\n\t  var list = [\n\t    ['standard_parallel_1', 'Standard_Parallel_1'],\n\t    ['standard_parallel_2', 'Standard_Parallel_2'],\n\t    ['false_easting', 'False_Easting'],\n\t    ['false_northing', 'False_Northing'],\n\t    ['central_meridian', 'Central_Meridian'],\n\t    ['latitude_of_origin', 'Latitude_Of_Origin'],\n\t    ['latitude_of_origin', 'Central_Parallel'],\n\t    ['scale_factor', 'Scale_Factor'],\n\t    ['k0', 'scale_factor'],\n\t    ['latitude_of_center', 'Latitude_of_center'],\n\t    ['lat0', 'latitude_of_center', d2r],\n\t    ['longitude_of_center', 'Longitude_Of_Center'],\n\t    ['longc', 'longitude_of_center', d2r],\n\t    ['x0', 'false_easting', toMeter],\n\t    ['y0', 'false_northing', toMeter],\n\t    ['long0', 'central_meridian', d2r],\n\t    ['lat0', 'latitude_of_origin', d2r],\n\t    ['lat0', 'standard_parallel_1', d2r],\n\t    ['lat1', 'standard_parallel_1', d2r],\n\t    ['lat2', 'standard_parallel_2', d2r],\n\t    ['alpha', 'azimuth', d2r],\n\t    ['srsCode', 'name']\n\t  ];\n\t  list.forEach(renamer);\n\t  if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n\t    wkt.long0 = wkt.longc;\n\t  }\n\t  if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n\t    wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n\t    wkt.lat_ts = wkt.lat1;\n\t  }\n\t}\n\tvar wkt = function(wkt) {\n\t  var lisp = parseString(wkt);\n\t  var type = lisp.shift();\n\t  var name = lisp.shift();\n\t  lisp.unshift(['name', name]);\n\t  lisp.unshift(['type', type]);\n\t  var obj = {};\n\t  sExpr(lisp, obj);\n\t  cleanWKT(obj);\n\t  return obj;\n\t};\n\n\tfunction defs(name) {\n\t  /*global console*/\n\t  var that = this;\n\t  if (arguments.length === 2) {\n\t    var def = arguments[1];\n\t    if (typeof def === 'string') {\n\t      if (def.charAt(0) === '+') {\n\t        defs[name] = parseProj(arguments[1]);\n\t      }\n\t      else {\n\t        defs[name] = wkt(arguments[1]);\n\t      }\n\t    } else {\n\t      defs[name] = def;\n\t    }\n\t  }\n\t  else if (arguments.length === 1) {\n\t    if (Array.isArray(name)) {\n\t      return name.map(function(v) {\n\t        if (Array.isArray(v)) {\n\t          defs.apply(that, v);\n\t        }\n\t        else {\n\t          defs(v);\n\t        }\n\t      });\n\t    }\n\t    else if (typeof name === 'string') {\n\t      if (name in defs) {\n\t        return defs[name];\n\t      }\n\t    }\n\t    else if ('EPSG' in name) {\n\t      defs['EPSG:' + name.EPSG] = name;\n\t    }\n\t    else if ('ESRI' in name) {\n\t      defs['ESRI:' + name.ESRI] = name;\n\t    }\n\t    else if ('IAU2000' in name) {\n\t      defs['IAU2000:' + name.IAU2000] = name;\n\t    }\n\t    else {\n\t      console.log(name);\n\t    }\n\t    return;\n\t  }\n\n\n\t}\n\tglobals(defs);\n\n\tfunction testObj(code){\n\t  return typeof code === 'string';\n\t}\n\tfunction testDef(code){\n\t  return code in defs;\n\t}\n\t var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS']; \n\tfunction testWKT(code){\n\t  return codeWords.some(function (word) {\n\t    return code.indexOf(word) > -1;\n\t  });\n\t}\n\tfunction testProj(code){\n\t  return code[0] === '+';\n\t}\n\tfunction parse(code){\n\t  if (testObj(code)) {\n\t    //check to see if this is a WKT string\n\t    if (testDef(code)) {\n\t      return defs[code];\n\t    }\n\t    if (testWKT(code)) {\n\t      return wkt(code);\n\t    }\n\t    if (testProj(code)) {\n\t      return parseProj(code);\n\t    }\n\t  }else{\n\t    return code;\n\t  }\n\t}\n\n\tvar extend = function(destination, source) {\n\t  destination = destination || {};\n\t  var value, property;\n\t  if (!source) {\n\t    return destination;\n\t  }\n\t  for (property in source) {\n\t    value = source[property];\n\t    if (value !== undefined) {\n\t      destination[property] = value;\n\t    }\n\t  }\n\t  return destination;\n\t};\n\n\tvar msfnz = function(eccent, sinphi, cosphi) {\n\t  var con = eccent * sinphi;\n\t  return cosphi / (Math.sqrt(1 - con * con));\n\t};\n\n\tvar sign = function(x) {\n\t  return x<0 ? -1 : 1;\n\t};\n\n\tvar adjust_lon = function(x) {\n\t  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n\t};\n\n\tvar tsfnz = function(eccent, phi, sinphi) {\n\t  var con = eccent * sinphi;\n\t  var com = 0.5 * eccent;\n\t  con = Math.pow(((1 - con) / (1 + con)), com);\n\t  return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n\t};\n\n\tvar phi2z = function(eccent, ts) {\n\t  var eccnth = 0.5 * eccent;\n\t  var con, dphi;\n\t  var phi = HALF_PI - 2 * Math.atan(ts);\n\t  for (var i = 0; i <= 15; i++) {\n\t    con = eccent * Math.sin(phi);\n\t    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\t  //console.log(\"phi2z has NoConvergence\");\n\t  return -9999;\n\t};\n\n\tfunction init() {\n\t  var con = this.b / this.a;\n\t  this.es = 1 - con * con;\n\t  if(!('x0' in this)){\n\t    this.x0 = 0;\n\t  }\n\t  if(!('y0' in this)){\n\t    this.y0 = 0;\n\t  }\n\t  this.e = Math.sqrt(this.es);\n\t  if (this.lat_ts) {\n\t    if (this.sphere) {\n\t      this.k0 = Math.cos(this.lat_ts);\n\t    }\n\t    else {\n\t      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n\t    }\n\t  }\n\t  else {\n\t    if (!this.k0) {\n\t      if (this.k) {\n\t        this.k0 = this.k;\n\t      }\n\t      else {\n\t        this.k0 = 1;\n\t      }\n\t    }\n\t  }\n\t}\n\n\t/* Mercator forward equations--mapping lat,long to x,y\n\t  --------------------------------------------------*/\n\n\tfunction forward(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  // convert to radians\n\t  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n\t    return null;\n\t  }\n\n\t  var x, y;\n\t  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n\t    return null;\n\t  }\n\t  else {\n\t    if (this.sphere) {\n\t      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n\t      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n\t    }\n\t    else {\n\t      var sinphi = Math.sin(lat);\n\t      var ts = tsfnz(this.e, lat, sinphi);\n\t      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n\t      y = this.y0 - this.a * this.k0 * Math.log(ts);\n\t    }\n\t    p.x = x;\n\t    p.y = y;\n\t    return p;\n\t  }\n\t}\n\n\t/* Mercator inverse equations--mapping x,y to lat/long\n\t  --------------------------------------------------*/\n\tfunction inverse(p) {\n\n\t  var x = p.x - this.x0;\n\t  var y = p.y - this.y0;\n\t  var lon, lat;\n\n\t  if (this.sphere) {\n\t    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n\t  }\n\t  else {\n\t    var ts = Math.exp(-y / (this.a * this.k0));\n\t    lat = phi2z(this.e, ts);\n\t    if (lat === -9999) {\n\t      return null;\n\t    }\n\t  }\n\t  lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$1 = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\n\tvar merc = {\n\t  init: init,\n\t  forward: forward,\n\t  inverse: inverse,\n\t  names: names$1\n\t};\n\n\tfunction init$1() {\n\t  //no-op for longlat\n\t}\n\n\tfunction identity(pt) {\n\t  return pt;\n\t}\n\tvar names$2 = [\"longlat\", \"identity\"];\n\tvar longlat = {\n\t  init: init$1,\n\t  forward: identity,\n\t  inverse: identity,\n\t  names: names$2\n\t};\n\n\tvar projs = [merc, longlat];\n\tvar names$$1 = {};\n\tvar projStore = [];\n\n\tfunction add(proj, i) {\n\t  var len = projStore.length;\n\t  if (!proj.names) {\n\t    console.log(i);\n\t    return true;\n\t  }\n\t  projStore[len] = proj;\n\t  proj.names.forEach(function(n) {\n\t    names$$1[n.toLowerCase()] = len;\n\t  });\n\t  return this;\n\t}\n\n\tfunction get(name) {\n\t  if (!name) {\n\t    return false;\n\t  }\n\t  var n = name.toLowerCase();\n\t  if (typeof names$$1[n] !== 'undefined' && projStore[names$$1[n]]) {\n\t    return projStore[names$$1[n]];\n\t  }\n\t}\n\n\tfunction start() {\n\t  projs.forEach(add);\n\t}\n\tvar projections = {\n\t  start: start,\n\t  add: add,\n\t  get: get\n\t};\n\n\tvar exports$2 = {};\n\texports$2.MERIT = {\n\t  a: 6378137.0,\n\t  rf: 298.257,\n\t  ellipseName: \"MERIT 1983\"\n\t};\n\n\texports$2.SGS85 = {\n\t  a: 6378136.0,\n\t  rf: 298.257,\n\t  ellipseName: \"Soviet Geodetic System 85\"\n\t};\n\n\texports$2.GRS80 = {\n\t  a: 6378137.0,\n\t  rf: 298.257222101,\n\t  ellipseName: \"GRS 1980(IUGG, 1980)\"\n\t};\n\n\texports$2.IAU76 = {\n\t  a: 6378140.0,\n\t  rf: 298.257,\n\t  ellipseName: \"IAU 1976\"\n\t};\n\n\texports$2.airy = {\n\t  a: 6377563.396,\n\t  b: 6356256.910,\n\t  ellipseName: \"Airy 1830\"\n\t};\n\n\texports$2.APL4 = {\n\t  a: 6378137,\n\t  rf: 298.25,\n\t  ellipseName: \"Appl. Physics. 1965\"\n\t};\n\n\texports$2.NWL9D = {\n\t  a: 6378145.0,\n\t  rf: 298.25,\n\t  ellipseName: \"Naval Weapons Lab., 1965\"\n\t};\n\n\texports$2.mod_airy = {\n\t  a: 6377340.189,\n\t  b: 6356034.446,\n\t  ellipseName: \"Modified Airy\"\n\t};\n\n\texports$2.andrae = {\n\t  a: 6377104.43,\n\t  rf: 300.0,\n\t  ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n\t};\n\n\texports$2.aust_SA = {\n\t  a: 6378160.0,\n\t  rf: 298.25,\n\t  ellipseName: \"Australian Natl & S. Amer. 1969\"\n\t};\n\n\texports$2.GRS67 = {\n\t  a: 6378160.0,\n\t  rf: 298.2471674270,\n\t  ellipseName: \"GRS 67(IUGG 1967)\"\n\t};\n\n\texports$2.bessel = {\n\t  a: 6377397.155,\n\t  rf: 299.1528128,\n\t  ellipseName: \"Bessel 1841\"\n\t};\n\n\texports$2.bess_nam = {\n\t  a: 6377483.865,\n\t  rf: 299.1528128,\n\t  ellipseName: \"Bessel 1841 (Namibia)\"\n\t};\n\n\texports$2.clrk66 = {\n\t  a: 6378206.4,\n\t  b: 6356583.8,\n\t  ellipseName: \"Clarke 1866\"\n\t};\n\n\texports$2.clrk80 = {\n\t  a: 6378249.145,\n\t  rf: 293.4663,\n\t  ellipseName: \"Clarke 1880 mod.\"\n\t};\n\n\texports$2.clrk58 = {\n\t  a: 6378293.645208759,\n\t  rf: 294.2606763692654,\n\t  ellipseName: \"Clarke 1858\"\n\t};\n\n\texports$2.CPM = {\n\t  a: 6375738.7,\n\t  rf: 334.29,\n\t  ellipseName: \"Comm. des Poids et Mesures 1799\"\n\t};\n\n\texports$2.delmbr = {\n\t  a: 6376428.0,\n\t  rf: 311.5,\n\t  ellipseName: \"Delambre 1810 (Belgium)\"\n\t};\n\n\texports$2.engelis = {\n\t  a: 6378136.05,\n\t  rf: 298.2566,\n\t  ellipseName: \"Engelis 1985\"\n\t};\n\n\texports$2.evrst30 = {\n\t  a: 6377276.345,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1830\"\n\t};\n\n\texports$2.evrst48 = {\n\t  a: 6377304.063,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1948\"\n\t};\n\n\texports$2.evrst56 = {\n\t  a: 6377301.243,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1956\"\n\t};\n\n\texports$2.evrst69 = {\n\t  a: 6377295.664,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1969\"\n\t};\n\n\texports$2.evrstSS = {\n\t  a: 6377298.556,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest (Sabah & Sarawak)\"\n\t};\n\n\texports$2.fschr60 = {\n\t  a: 6378166.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer (Mercury Datum) 1960\"\n\t};\n\n\texports$2.fschr60m = {\n\t  a: 6378155.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer 1960\"\n\t};\n\n\texports$2.fschr68 = {\n\t  a: 6378150.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer 1968\"\n\t};\n\n\texports$2.helmert = {\n\t  a: 6378200.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Helmert 1906\"\n\t};\n\n\texports$2.hough = {\n\t  a: 6378270.0,\n\t  rf: 297.0,\n\t  ellipseName: \"Hough\"\n\t};\n\n\texports$2.intl = {\n\t  a: 6378388.0,\n\t  rf: 297.0,\n\t  ellipseName: \"International 1909 (Hayford)\"\n\t};\n\n\texports$2.kaula = {\n\t  a: 6378163.0,\n\t  rf: 298.24,\n\t  ellipseName: \"Kaula 1961\"\n\t};\n\n\texports$2.lerch = {\n\t  a: 6378139.0,\n\t  rf: 298.257,\n\t  ellipseName: \"Lerch 1979\"\n\t};\n\n\texports$2.mprts = {\n\t  a: 6397300.0,\n\t  rf: 191.0,\n\t  ellipseName: \"Maupertius 1738\"\n\t};\n\n\texports$2.new_intl = {\n\t  a: 6378157.5,\n\t  b: 6356772.2,\n\t  ellipseName: \"New International 1967\"\n\t};\n\n\texports$2.plessis = {\n\t  a: 6376523.0,\n\t  rf: 6355863.0,\n\t  ellipseName: \"Plessis 1817 (France)\"\n\t};\n\n\texports$2.krass = {\n\t  a: 6378245.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Krassovsky, 1942\"\n\t};\n\n\texports$2.SEasia = {\n\t  a: 6378155.0,\n\t  b: 6356773.3205,\n\t  ellipseName: \"Southeast Asia\"\n\t};\n\n\texports$2.walbeck = {\n\t  a: 6376896.0,\n\t  b: 6355834.8467,\n\t  ellipseName: \"Walbeck\"\n\t};\n\n\texports$2.WGS60 = {\n\t  a: 6378165.0,\n\t  rf: 298.3,\n\t  ellipseName: \"WGS 60\"\n\t};\n\n\texports$2.WGS66 = {\n\t  a: 6378145.0,\n\t  rf: 298.25,\n\t  ellipseName: \"WGS 66\"\n\t};\n\n\texports$2.WGS7 = {\n\t  a: 6378135.0,\n\t  rf: 298.26,\n\t  ellipseName: \"WGS 72\"\n\t};\n\n\tvar WGS84 = exports$2.WGS84 = {\n\t  a: 6378137.0,\n\t  rf: 298.257223563,\n\t  ellipseName: \"WGS 84\"\n\t};\n\n\texports$2.sphere = {\n\t  a: 6370997.0,\n\t  b: 6370997.0,\n\t  ellipseName: \"Normal Sphere (r=6370997)\"\n\t};\n\n\tfunction eccentricity(a, b, rf, R_A) {\n\t  var a2 = a * a; // used in geocentric\n\t  var b2 = b * b; // used in geocentric\n\t  var es = (a2 - b2) / a2; // e ^ 2\n\t  var e = 0;\n\t  if (R_A) {\n\t    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n\t    a2 = a * a;\n\t    es = 0;\n\t  } else {\n\t    e = Math.sqrt(es); // eccentricity\n\t  }\n\t  var ep2 = (a2 - b2) / b2; // used in geocentric\n\t  return {\n\t    es: es,\n\t    e: e,\n\t    ep2: ep2\n\t  };\n\t}\n\tfunction sphere(a, b, rf, ellps, sphere) {\n\t  if (!a) { // do we have an ellipsoid?\n\t    var ellipse = match(exports$2, ellps);\n\t    if (!ellipse) {\n\t      ellipse = WGS84;\n\t    }\n\t    a = ellipse.a;\n\t    b = ellipse.b;\n\t    rf = ellipse.rf;\n\t  }\n\n\t  if (rf && !b) {\n\t    b = (1.0 - 1.0 / rf) * a;\n\t  }\n\t  if (rf === 0 || Math.abs(a - b) < EPSLN) {\n\t    sphere = true;\n\t    b = a;\n\t  }\n\t  return {\n\t    a: a,\n\t    b: b,\n\t    rf: rf,\n\t    sphere: sphere\n\t  };\n\t}\n\n\tvar exports$3 = {};\n\texports$3.wgs84 = {\n\t  towgs84: \"0,0,0\",\n\t  ellipse: \"WGS84\",\n\t  datumName: \"WGS84\"\n\t};\n\n\texports$3.ch1903 = {\n\t  towgs84: \"674.374,15.056,405.346\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"swiss\"\n\t};\n\n\texports$3.ggrs87 = {\n\t  towgs84: \"-199.87,74.79,246.62\",\n\t  ellipse: \"GRS80\",\n\t  datumName: \"Greek_Geodetic_Reference_System_1987\"\n\t};\n\n\texports$3.nad83 = {\n\t  towgs84: \"0,0,0\",\n\t  ellipse: \"GRS80\",\n\t  datumName: \"North_American_Datum_1983\"\n\t};\n\n\texports$3.nad27 = {\n\t  nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n\t  ellipse: \"clrk66\",\n\t  datumName: \"North_American_Datum_1927\"\n\t};\n\n\texports$3.potsdam = {\n\t  towgs84: \"606.0,23.0,413.0\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"Potsdam Rauenberg 1950 DHDN\"\n\t};\n\n\texports$3.carthage = {\n\t  towgs84: \"-263.0,6.0,431.0\",\n\t  ellipse: \"clark80\",\n\t  datumName: \"Carthage 1934 Tunisia\"\n\t};\n\n\texports$3.hermannskogel = {\n\t  towgs84: \"653.0,-212.0,449.0\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"Hermannskogel\"\n\t};\n\n\texports$3.ire65 = {\n\t  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n\t  ellipse: \"mod_airy\",\n\t  datumName: \"Ireland 1965\"\n\t};\n\n\texports$3.rassadiran = {\n\t  towgs84: \"-133.63,-157.5,-158.62\",\n\t  ellipse: \"intl\",\n\t  datumName: \"Rassadiran\"\n\t};\n\n\texports$3.nzgd49 = {\n\t  towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n\t  ellipse: \"intl\",\n\t  datumName: \"New Zealand Geodetic Datum 1949\"\n\t};\n\n\texports$3.osgb36 = {\n\t  towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n\t  ellipse: \"airy\",\n\t  datumName: \"Airy 1830\"\n\t};\n\n\texports$3.s_jtsk = {\n\t  towgs84: \"589,76,480\",\n\t  ellipse: 'bessel',\n\t  datumName: 'S-JTSK (Ferro)'\n\t};\n\n\texports$3.beduaram = {\n\t  towgs84: '-106,-87,188',\n\t  ellipse: 'clrk80',\n\t  datumName: 'Beduaram'\n\t};\n\n\texports$3.gunung_segara = {\n\t  towgs84: '-403,684,41',\n\t  ellipse: 'bessel',\n\t  datumName: 'Gunung Segara Jakarta'\n\t};\n\n\texports$3.rnb72 = {\n\t  towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n\t  ellipse: \"intl\",\n\t  datumName: \"Reseau National Belge 1972\"\n\t};\n\n\tfunction datum(datumCode, datum_params, a, b, es, ep2) {\n\t  var out = {};\n\n\t  if (datumCode === undefined || datumCode === 'none') {\n\t    out.datum_type = PJD_NODATUM;\n\t  } else {\n\t    out.datum_type = PJD_WGS84;\n\t  }\n\n\t  if (datum_params) {\n\t    out.datum_params = datum_params.map(parseFloat);\n\t    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n\t      out.datum_type = PJD_3PARAM;\n\t    }\n\t    if (out.datum_params.length > 3) {\n\t      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n\t        out.datum_type = PJD_7PARAM;\n\t        out.datum_params[3] *= SEC_TO_RAD;\n\t        out.datum_params[4] *= SEC_TO_RAD;\n\t        out.datum_params[5] *= SEC_TO_RAD;\n\t        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n\t      }\n\t    }\n\t  }\n\n\t  out.a = a; //datum object also uses these values\n\t  out.b = b;\n\t  out.es = es;\n\t  out.ep2 = ep2;\n\t  return out;\n\t}\n\n\tfunction Projection$1(srsCode,callback) {\n\t  if (!(this instanceof Projection$1)) {\n\t    return new Projection$1(srsCode);\n\t  }\n\t  callback = callback || function(error){\n\t    if(error){\n\t      throw error;\n\t    }\n\t  };\n\t  var json = parse(srsCode);\n\t  if(typeof json !== 'object'){\n\t    callback(srsCode);\n\t    return;\n\t  }\n\t  var ourProj = Projection$1.projections.get(json.projName);\n\t  if(!ourProj){\n\t    callback(srsCode);\n\t    return;\n\t  }\n\t  if (json.datumCode && json.datumCode !== 'none') {\n\t    var datumDef = match(exports$3, json.datumCode);\n\t    if (datumDef) {\n\t      json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n\t      json.ellps = datumDef.ellipse;\n\t      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n\t    }\n\t  }\n\t  json.k0 = json.k0 || 1.0;\n\t  json.axis = json.axis || 'enu';\n\t  json.ellps = json.ellps || 'wgs84';\n\t  var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n\t  var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n\t  var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);\n\n\t  extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n\t  extend(this, ourProj); // transfer all the methods from the projection\n\n\t  // copy the 4 things over we calulated in deriveConstants.sphere\n\t  this.a = sphere_.a;\n\t  this.b = sphere_.b;\n\t  this.rf = sphere_.rf;\n\t  this.sphere = sphere_.sphere;\n\n\t  // copy the 3 things we calculated in deriveConstants.eccentricity\n\t  this.es = ecc.es;\n\t  this.e = ecc.e;\n\t  this.ep2 = ecc.ep2;\n\n\t  // add in the datum object\n\t  this.datum = datumObj;\n\n\t  // init the projection\n\t  this.init();\n\n\t  // legecy callback from back in the day when it went to spatialreference.org\n\t  callback(null, this);\n\n\t}\n\tProjection$1.projections = projections;\n\tProjection$1.projections.start();\n\n\tfunction compareDatums(source, dest) {\n\t  if (source.datum_type !== dest.datum_type) {\n\t    return false; // false, datums are not equal\n\t  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n\t    // the tolerance for es is to ensure that GRS80 and WGS84\n\t    // are considered identical\n\t    return false;\n\t  } else if (source.datum_type === PJD_3PARAM) {\n\t    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n\t  } else if (source.datum_type === PJD_7PARAM) {\n\t    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n\t  } else {\n\t    return true; // datums are equal\n\t  }\n\t} // cs_compare_datums()\n\n\t/*\n\t * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n\t * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n\t * according to the current ellipsoid parameters.\n\t *\n\t *    Latitude  : Geodetic latitude in radians                     (input)\n\t *    Longitude : Geodetic longitude in radians                    (input)\n\t *    Height    : Geodetic height, in meters                       (input)\n\t *    X         : Calculated Geocentric X coordinate, in meters    (output)\n\t *    Y         : Calculated Geocentric Y coordinate, in meters    (output)\n\t *    Z         : Calculated Geocentric Z coordinate, in meters    (output)\n\t *\n\t */\n\tfunction geodeticToGeocentric(p, es, a) {\n\t  var Longitude = p.x;\n\t  var Latitude = p.y;\n\t  var Height = p.z ? p.z : 0; //Z value not always supplied\n\n\t  var Rn; /*  Earth radius at location  */\n\t  var Sin_Lat; /*  Math.sin(Latitude)  */\n\t  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */\n\t  var Cos_Lat; /*  Math.cos(Latitude)  */\n\n\t  /*\n\t   ** Don't blow up if Latitude is just a little out of the value\n\t   ** range as it may just be a rounding issue.  Also removed longitude\n\t   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.\n\t   */\n\t  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n\t    Latitude = -HALF_PI;\n\t  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n\t    Latitude = HALF_PI;\n\t  } else if ((Latitude < -HALF_PI) || (Latitude > HALF_PI)) {\n\t    /* Latitude out of range */\n\t    //..reportError('geocent:lat out of range:' + Latitude);\n\t    return null;\n\t  }\n\n\t  if (Longitude > Math.PI) {\n\t    Longitude -= (2 * Math.PI);\n\t  }\n\t  Sin_Lat = Math.sin(Latitude);\n\t  Cos_Lat = Math.cos(Latitude);\n\t  Sin2_Lat = Sin_Lat * Sin_Lat;\n\t  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n\t  return {\n\t    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n\t    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n\t    z: ((Rn * (1 - es)) + Height) * Sin_Lat\n\t  };\n\t} // cs_geodetic_to_geocentric()\n\n\tfunction geocentricToGeodetic(p, es, a, b) {\n\t  /* local defintions and variables */\n\t  /* end-criterium of loop, accuracy of sin(Latitude) */\n\t  var genau = 1e-12;\n\t  var genau2 = (genau * genau);\n\t  var maxiter = 30;\n\n\t  var P; /* distance between semi-minor axis and location */\n\t  var RR; /* distance between center and location */\n\t  var CT; /* sin of geocentric latitude */\n\t  var ST; /* cos of geocentric latitude */\n\t  var RX;\n\t  var RK;\n\t  var RN; /* Earth radius at location */\n\t  var CPHI0; /* cos of start or old geodetic latitude in iterations */\n\t  var SPHI0; /* sin of start or old geodetic latitude in iterations */\n\t  var CPHI; /* cos of searched geodetic latitude */\n\t  var SPHI; /* sin of searched geodetic latitude */\n\t  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n\t  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n\t  var X = p.x;\n\t  var Y = p.y;\n\t  var Z = p.z ? p.z : 0.0; //Z value not always supplied\n\t  var Longitude;\n\t  var Latitude;\n\t  var Height;\n\n\t  P = Math.sqrt(X * X + Y * Y);\n\t  RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n\t  /*      special cases for latitude and longitude */\n\t  if (P / a < genau) {\n\n\t    /*  special case, if P=0. (X=0., Y=0.) */\n\t    Longitude = 0.0;\n\n\t    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n\t     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */\n\t    if (RR / a < genau) {\n\t      Latitude = HALF_PI;\n\t      Height = -b;\n\t      return {\n\t        x: p.x,\n\t        y: p.y,\n\t        z: p.z\n\t      };\n\t    }\n\t  } else {\n\t    /*  ellipsoidal (geodetic) longitude\n\t     *  interval: -PI < Longitude <= +PI */\n\t    Longitude = Math.atan2(Y, X);\n\t  }\n\n\t  /* --------------------------------------------------------------\n\t   * Following iterative algorithm was developped by\n\t   * \"Institut for Erdmessung\", University of Hannover, July 1988.\n\t   * Internet: www.ife.uni-hannover.de\n\t   * Iterative computation of CPHI,SPHI and Height.\n\t   * Iteration of CPHI and SPHI to 10**-12 radian resp.\n\t   * 2*10**-7 arcsec.\n\t   * --------------------------------------------------------------\n\t   */\n\t  CT = Z / RR;\n\t  ST = P / RR;\n\t  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n\t  CPHI0 = ST * (1.0 - es) * RX;\n\t  SPHI0 = CT * RX;\n\t  iter = 0;\n\n\t  /* loop to find sin(Latitude) resp. Latitude\n\t   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n\t  do {\n\t    iter++;\n\t    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n\t    /*  ellipsoidal (geodetic) height */\n\t    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n\t    RK = es * RN / (RN + Height);\n\t    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n\t    CPHI = ST * (1.0 - RK) * RX;\n\t    SPHI = CT * RX;\n\t    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n\t    CPHI0 = CPHI;\n\t    SPHI0 = SPHI;\n\t  }\n\t  while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n\t  /*      ellipsoidal (geodetic) latitude */\n\t  Latitude = Math.atan(SPHI / Math.abs(CPHI));\n\t  return {\n\t    x: Longitude,\n\t    y: Latitude,\n\t    z: Height\n\t  };\n\t} // cs_geocentric_to_geodetic()\n\n\t/****************************************************************/\n\t// pj_geocentic_to_wgs84( p )\n\t//  p = point to transform in geocentric coordinates (x,y,z)\n\n\n\t/** point object, nothing fancy, just allows values to be\n\t    passed back and forth by reference rather than by value.\n\t    Other point classes may be used as long as they have\n\t    x and y properties, which will get modified in the transform method.\n\t*/\n\tfunction geocentricToWgs84(p, datum_type, datum_params) {\n\n\t  if (datum_type === PJD_3PARAM) {\n\t    // if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: p.x + datum_params[0],\n\t      y: p.y + datum_params[1],\n\t      z: p.z + datum_params[2],\n\t    };\n\t  } else if (datum_type === PJD_7PARAM) {\n\t    var Dx_BF = datum_params[0];\n\t    var Dy_BF = datum_params[1];\n\t    var Dz_BF = datum_params[2];\n\t    var Rx_BF = datum_params[3];\n\t    var Ry_BF = datum_params[4];\n\t    var Rz_BF = datum_params[5];\n\t    var M_BF = datum_params[6];\n\t    // if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n\t      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n\t      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n\t    };\n\t  }\n\t} // cs_geocentric_to_wgs84\n\n\t/****************************************************************/\n\t// pj_geocentic_from_wgs84()\n\t//  coordinate system definition,\n\t//  point to transform in geocentric coordinates (x,y,z)\n\tfunction geocentricFromWgs84(p, datum_type, datum_params) {\n\n\t  if (datum_type === PJD_3PARAM) {\n\t    //if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: p.x - datum_params[0],\n\t      y: p.y - datum_params[1],\n\t      z: p.z - datum_params[2],\n\t    };\n\n\t  } else if (datum_type === PJD_7PARAM) {\n\t    var Dx_BF = datum_params[0];\n\t    var Dy_BF = datum_params[1];\n\t    var Dz_BF = datum_params[2];\n\t    var Rx_BF = datum_params[3];\n\t    var Ry_BF = datum_params[4];\n\t    var Rz_BF = datum_params[5];\n\t    var M_BF = datum_params[6];\n\t    var x_tmp = (p.x - Dx_BF) / M_BF;\n\t    var y_tmp = (p.y - Dy_BF) / M_BF;\n\t    var z_tmp = (p.z - Dz_BF) / M_BF;\n\t    //if( x[io] === HUGE_VAL )\n\t    //    continue;\n\n\t    return {\n\t      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n\t      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n\t      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n\t    };\n\t  } //cs_geocentric_from_wgs84()\n\t}\n\n\tfunction checkParams(type) {\n\t  return (type === PJD_3PARAM || type === PJD_7PARAM);\n\t}\n\n\tvar datum_transform = function(source, dest, point) {\n\t  // Short cut if the datums are identical.\n\t  if (compareDatums(source, dest)) {\n\t    return point; // in this case, zero is sucess,\n\t    // whereas cs_compare_datums returns 1 to indicate TRUE\n\t    // confusing, should fix this\n\t  }\n\n\t  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n\t  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n\t    return point;\n\t  }\n\n\t  // If this datum requires grid shifts, then apply it to geodetic coordinates.\n\n\t  // Do we need to go through geocentric coordinates?\n\t  if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {\n\t    return point;\n\t  }\n\n\t  // Convert to geocentric coordinates.\n\t  point = geodeticToGeocentric(point, source.es, source.a);\n\t  // Convert between datums\n\t  if (checkParams(source.datum_type)) {\n\t    point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n\t  }\n\t  if (checkParams(dest.datum_type)) {\n\t    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n\t  }\n\t  return geocentricToGeodetic(point, dest.es, dest.a, dest.b);\n\n\t};\n\n\tvar adjust_axis = function(crs, denorm, point) {\n\t  var xin = point.x,\n\t    yin = point.y,\n\t    zin = point.z || 0.0;\n\t  var v, t, i;\n\t  var out = {};\n\t  for (i = 0; i < 3; i++) {\n\t    if (denorm && i === 2 && point.z === undefined) {\n\t      continue;\n\t    }\n\t    if (i === 0) {\n\t      v = xin;\n\t      t = 'x';\n\t    }\n\t    else if (i === 1) {\n\t      v = yin;\n\t      t = 'y';\n\t    }\n\t    else {\n\t      v = zin;\n\t      t = 'z';\n\t    }\n\t    switch (crs.axis[i]) {\n\t    case 'e':\n\t      out[t] = v;\n\t      break;\n\t    case 'w':\n\t      out[t] = -v;\n\t      break;\n\t    case 'n':\n\t      out[t] = v;\n\t      break;\n\t    case 's':\n\t      out[t] = -v;\n\t      break;\n\t    case 'u':\n\t      if (point[t] !== undefined) {\n\t        out.z = v;\n\t      }\n\t      break;\n\t    case 'd':\n\t      if (point[t] !== undefined) {\n\t        out.z = -v;\n\t      }\n\t      break;\n\t    default:\n\t      //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n\t      return null;\n\t    }\n\t  }\n\t  return out;\n\t};\n\n\tvar toPoint = function (array){\n\t  var out = {\n\t    x: array[0],\n\t    y: array[1]\n\t  };\n\t  if (array.length>2) {\n\t    out.z = array[2];\n\t  }\n\t  if (array.length>3) {\n\t    out.m = array[3];\n\t  }\n\t  return out;\n\t};\n\n\tfunction checkNotWGS(source, dest) {\n\t  return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n\t}\n\n\tfunction transform(source, dest, point) {\n\t  var wgs84;\n\t  if (Array.isArray(point)) {\n\t    point = toPoint(point);\n\t  }\n\n\t  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n\t  if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n\t    wgs84 = new Projection$1('WGS84');\n\t    point = transform(source, wgs84, point);\n\t    source = wgs84;\n\t  }\n\t  // DGR, 2010/11/12\n\t  if (source.axis !== 'enu') {\n\t    point = adjust_axis(source, false, point);\n\t  }\n\t  // Transform source points to long/lat, if they aren't already.\n\t  if (source.projName === 'longlat') {\n\t    point = {\n\t      x: point.x * D2R,\n\t      y: point.y * D2R\n\t    };\n\t  }\n\t  else {\n\t    if (source.to_meter) {\n\t      point = {\n\t        x: point.x * source.to_meter,\n\t        y: point.y * source.to_meter\n\t      };\n\t    }\n\t    point = source.inverse(point); // Convert Cartesian to longlat\n\t  }\n\t  // Adjust for the prime meridian if necessary\n\t  if (source.from_greenwich) {\n\t    point.x += source.from_greenwich;\n\t  }\n\n\t  // Convert datums if needed, and if possible.\n\t  point = datum_transform(source.datum, dest.datum, point);\n\n\t  // Adjust for the prime meridian if necessary\n\t  if (dest.from_greenwich) {\n\t    point = {\n\t      x: point.x - dest.from_greenwich,\n\t      y: point.y\n\t    };\n\t  }\n\n\t  if (dest.projName === 'longlat') {\n\t    // convert radians to decimal degrees\n\t    point = {\n\t      x: point.x * R2D,\n\t      y: point.y * R2D\n\t    };\n\t  } else { // else project\n\t    point = dest.forward(point);\n\t    if (dest.to_meter) {\n\t      point = {\n\t        x: point.x / dest.to_meter,\n\t        y: point.y / dest.to_meter\n\t      };\n\t    }\n\t  }\n\n\t  // DGR, 2010/11/12\n\t  if (dest.axis !== 'enu') {\n\t    return adjust_axis(dest, true, point);\n\t  }\n\n\t  return point;\n\t}\n\n\tvar wgs84 = Projection$1('WGS84');\n\n\tfunction transformer(from, to, coords) {\n\t  var transformedArray;\n\t  if (Array.isArray(coords)) {\n\t    transformedArray = transform(from, to, coords);\n\t    if (coords.length === 3) {\n\t      return [transformedArray.x, transformedArray.y, transformedArray.z];\n\t    }\n\t    else {\n\t      return [transformedArray.x, transformedArray.y];\n\t    }\n\t  }\n\t  else {\n\t    return transform(from, to, coords);\n\t  }\n\t}\n\n\tfunction checkProj(item) {\n\t  if (item instanceof Projection$1) {\n\t    return item;\n\t  }\n\t  if (item.oProj) {\n\t    return item.oProj;\n\t  }\n\t  return Projection$1(item);\n\t}\n\tfunction proj4$1(fromProj, toProj, coord) {\n\t  fromProj = checkProj(fromProj);\n\t  var single = false;\n\t  var obj;\n\t  if (typeof toProj === 'undefined') {\n\t    toProj = fromProj;\n\t    fromProj = wgs84;\n\t    single = true;\n\t  }\n\t  else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n\t    coord = toProj;\n\t    toProj = fromProj;\n\t    fromProj = wgs84;\n\t    single = true;\n\t  }\n\t  toProj = checkProj(toProj);\n\t  if (coord) {\n\t    return transformer(fromProj, toProj, coord);\n\t  }\n\t  else {\n\t    obj = {\n\t      forward: function(coords) {\n\t        return transformer(fromProj, toProj, coords);\n\t      },\n\t      inverse: function(coords) {\n\t        return transformer(toProj, fromProj, coords);\n\t      }\n\t    };\n\t    if (single) {\n\t      obj.oProj = toProj;\n\t    }\n\t    return obj;\n\t  }\n\t}\n\n\t/**\n\t * UTM zones are grouped, and assigned to one of a group of 6\n\t * sets.\n\t *\n\t * {int} @private\n\t */\n\tvar NUM_100K_SETS = 6;\n\n\t/**\n\t * The column letters (for easting) of the lower left value, per\n\t * set.\n\t *\n\t * {string} @private\n\t */\n\tvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n\t/**\n\t * The row letters (for northing) of the lower left value, per\n\t * set.\n\t *\n\t * {string} @private\n\t */\n\tvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\n\tvar A = 65; // A\n\tvar I = 73; // I\n\tvar O = 79; // O\n\tvar V = 86; // V\n\tvar Z = 90; // Z\n\tvar mgrs = {\n\t  forward: forward$1,\n\t  inverse: inverse$1,\n\t  toPoint: toPoint$1\n\t};\n\t/**\n\t * Conversion of lat/lon to MGRS.\n\t *\n\t * @param {object} ll Object literal with lat and lon properties on a\n\t *     WGS84 ellipsoid.\n\t * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n\t *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n\t * @return {string} the MGRS string for the given location and accuracy.\n\t */\n\tfunction forward$1(ll, accuracy) {\n\t  accuracy = accuracy || 5; // default accuracy 1m\n\t  return encode(LLtoUTM({\n\t    lat: ll[1],\n\t    lon: ll[0]\n\t  }), accuracy);\n\t}\n\n\t/**\n\t * Conversion of MGRS to lat/lon.\n\t *\n\t * @param {string} mgrs MGRS string.\n\t * @return {array} An array with left (longitude), bottom (latitude), right\n\t *     (longitude) and top (latitude) values in WGS84, representing the\n\t *     bounding box for the provided MGRS reference.\n\t */\n\tfunction inverse$1(mgrs) {\n\t  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n\t  if (bbox.lat && bbox.lon) {\n\t    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n\t  }\n\t  return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n\t}\n\n\tfunction toPoint$1(mgrs) {\n\t  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n\t  if (bbox.lat && bbox.lon) {\n\t    return [bbox.lon, bbox.lat];\n\t  }\n\t  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n\t}\n\t/**\n\t * Conversion from degrees to radians.\n\t *\n\t * @private\n\t * @param {number} deg the angle in degrees.\n\t * @return {number} the angle in radians.\n\t */\n\tfunction degToRad(deg) {\n\t  return (deg * (Math.PI / 180.0));\n\t}\n\n\t/**\n\t * Conversion from radians to degrees.\n\t *\n\t * @private\n\t * @param {number} rad the angle in radians.\n\t * @return {number} the angle in degrees.\n\t */\n\tfunction radToDeg(rad) {\n\t  return (180.0 * (rad / Math.PI));\n\t}\n\n\t/**\n\t * Converts a set of Longitude and Latitude co-ordinates to UTM\n\t * using the WGS84 ellipsoid.\n\t *\n\t * @private\n\t * @param {object} ll Object literal with lat and lon properties\n\t *     representing the WGS84 coordinate to be converted.\n\t * @return {object} Object literal containing the UTM value with easting,\n\t *     northing, zoneNumber and zoneLetter properties, and an optional\n\t *     accuracy property in digits. Returns null if the conversion failed.\n\t */\n\tfunction LLtoUTM(ll) {\n\t  var Lat = ll.lat;\n\t  var Long = ll.lon;\n\t  var a = 6378137.0; //ellip.radius;\n\t  var eccSquared = 0.00669438; //ellip.eccsq;\n\t  var k0 = 0.9996;\n\t  var LongOrigin;\n\t  var eccPrimeSquared;\n\t  var N, T, C, A, M;\n\t  var LatRad = degToRad(Lat);\n\t  var LongRad = degToRad(Long);\n\t  var LongOriginRad;\n\t  var ZoneNumber;\n\t  // (int)\n\t  ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n\t  //Make sure the longitude 180.00 is in Zone 60\n\t  if (Long === 180) {\n\t    ZoneNumber = 60;\n\t  }\n\n\t  // Special zone for Norway\n\t  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n\t    ZoneNumber = 32;\n\t  }\n\n\t  // Special zones for Svalbard\n\t  if (Lat >= 72.0 && Lat < 84.0) {\n\t    if (Long >= 0.0 && Long < 9.0) {\n\t      ZoneNumber = 31;\n\t    }\n\t    else if (Long >= 9.0 && Long < 21.0) {\n\t      ZoneNumber = 33;\n\t    }\n\t    else if (Long >= 21.0 && Long < 33.0) {\n\t      ZoneNumber = 35;\n\t    }\n\t    else if (Long >= 33.0 && Long < 42.0) {\n\t      ZoneNumber = 37;\n\t    }\n\t  }\n\n\t  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n\t  // in middle of\n\t  // zone\n\t  LongOriginRad = degToRad(LongOrigin);\n\n\t  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n\t  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n\t  T = Math.tan(LatRad) * Math.tan(LatRad);\n\t  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n\t  A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n\t  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n\t  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n\t  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n\t  if (Lat < 0.0) {\n\t    UTMNorthing += 10000000.0; //10000000 meter offset for\n\t    // southern hemisphere\n\t  }\n\n\t  return {\n\t    northing: Math.round(UTMNorthing),\n\t    easting: Math.round(UTMEasting),\n\t    zoneNumber: ZoneNumber,\n\t    zoneLetter: getLetterDesignator(Lat)\n\t  };\n\t}\n\n\t/**\n\t * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n\t * class where the Zone can be specified as a single string eg.\"60N\" which\n\t * is then broken down into the ZoneNumber and ZoneLetter.\n\t *\n\t * @private\n\t * @param {object} utm An object literal with northing, easting, zoneNumber\n\t *     and zoneLetter properties. If an optional accuracy property is\n\t *     provided (in meters), a bounding box will be returned instead of\n\t *     latitude and longitude.\n\t * @return {object} An object literal containing either lat and lon values\n\t *     (if no accuracy was provided), or top, right, bottom and left values\n\t *     for the bounding box calculated according to the provided accuracy.\n\t *     Returns null if the conversion failed.\n\t */\n\tfunction UTMtoLL(utm) {\n\n\t  var UTMNorthing = utm.northing;\n\t  var UTMEasting = utm.easting;\n\t  var zoneLetter = utm.zoneLetter;\n\t  var zoneNumber = utm.zoneNumber;\n\t  // check the ZoneNummber is valid\n\t  if (zoneNumber < 0 || zoneNumber > 60) {\n\t    return null;\n\t  }\n\n\t  var k0 = 0.9996;\n\t  var a = 6378137.0; //ellip.radius;\n\t  var eccSquared = 0.00669438; //ellip.eccsq;\n\t  var eccPrimeSquared;\n\t  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n\t  var N1, T1, C1, R1, D, M;\n\t  var LongOrigin;\n\t  var mu, phi1Rad;\n\n\t  // remove 500,000 meter offset for longitude\n\t  var x = UTMEasting - 500000.0;\n\t  var y = UTMNorthing;\n\n\t  // We must know somehow if we are in the Northern or Southern\n\t  // hemisphere, this is the only time we use the letter So even\n\t  // if the Zone letter isn't exactly correct it should indicate\n\t  // the hemisphere correctly\n\t  if (zoneLetter < 'N') {\n\t    y -= 10000000.0; // remove 10,000,000 meter offset used\n\t    // for southern hemisphere\n\t  }\n\n\t  // There are 60 zones with zone 1 being at West -180 to -174\n\t  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n\t  // in middle of\n\t  // zone\n\n\t  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n\t  M = y / k0;\n\t  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n\t  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n\t  // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n\t  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n\t  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n\t  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n\t  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n\t  D = x / (N1 * k0);\n\n\t  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n\t  lat = radToDeg(lat);\n\n\t  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n\t  lon = LongOrigin + radToDeg(lon);\n\n\t  var result;\n\t  if (utm.accuracy) {\n\t    var topRight = UTMtoLL({\n\t      northing: utm.northing + utm.accuracy,\n\t      easting: utm.easting + utm.accuracy,\n\t      zoneLetter: utm.zoneLetter,\n\t      zoneNumber: utm.zoneNumber\n\t    });\n\t    result = {\n\t      top: topRight.lat,\n\t      right: topRight.lon,\n\t      bottom: lat,\n\t      left: lon\n\t    };\n\t  }\n\t  else {\n\t    result = {\n\t      lat: lat,\n\t      lon: lon\n\t    };\n\t  }\n\t  return result;\n\t}\n\n\t/**\n\t * Calculates the MGRS letter designator for the given latitude.\n\t *\n\t * @private\n\t * @param {number} lat The latitude in WGS84 to get the letter designator\n\t *     for.\n\t * @return {char} The letter designator.\n\t */\n\tfunction getLetterDesignator(lat) {\n\t  //This is here as an error flag to show that the Latitude is\n\t  //outside MGRS limits\n\t  var LetterDesignator = 'Z';\n\n\t  if ((84 >= lat) && (lat >= 72)) {\n\t    LetterDesignator = 'X';\n\t  }\n\t  else if ((72 > lat) && (lat >= 64)) {\n\t    LetterDesignator = 'W';\n\t  }\n\t  else if ((64 > lat) && (lat >= 56)) {\n\t    LetterDesignator = 'V';\n\t  }\n\t  else if ((56 > lat) && (lat >= 48)) {\n\t    LetterDesignator = 'U';\n\t  }\n\t  else if ((48 > lat) && (lat >= 40)) {\n\t    LetterDesignator = 'T';\n\t  }\n\t  else if ((40 > lat) && (lat >= 32)) {\n\t    LetterDesignator = 'S';\n\t  }\n\t  else if ((32 > lat) && (lat >= 24)) {\n\t    LetterDesignator = 'R';\n\t  }\n\t  else if ((24 > lat) && (lat >= 16)) {\n\t    LetterDesignator = 'Q';\n\t  }\n\t  else if ((16 > lat) && (lat >= 8)) {\n\t    LetterDesignator = 'P';\n\t  }\n\t  else if ((8 > lat) && (lat >= 0)) {\n\t    LetterDesignator = 'N';\n\t  }\n\t  else if ((0 > lat) && (lat >= -8)) {\n\t    LetterDesignator = 'M';\n\t  }\n\t  else if ((-8 > lat) && (lat >= -16)) {\n\t    LetterDesignator = 'L';\n\t  }\n\t  else if ((-16 > lat) && (lat >= -24)) {\n\t    LetterDesignator = 'K';\n\t  }\n\t  else if ((-24 > lat) && (lat >= -32)) {\n\t    LetterDesignator = 'J';\n\t  }\n\t  else if ((-32 > lat) && (lat >= -40)) {\n\t    LetterDesignator = 'H';\n\t  }\n\t  else if ((-40 > lat) && (lat >= -48)) {\n\t    LetterDesignator = 'G';\n\t  }\n\t  else if ((-48 > lat) && (lat >= -56)) {\n\t    LetterDesignator = 'F';\n\t  }\n\t  else if ((-56 > lat) && (lat >= -64)) {\n\t    LetterDesignator = 'E';\n\t  }\n\t  else if ((-64 > lat) && (lat >= -72)) {\n\t    LetterDesignator = 'D';\n\t  }\n\t  else if ((-72 > lat) && (lat >= -80)) {\n\t    LetterDesignator = 'C';\n\t  }\n\t  return LetterDesignator;\n\t}\n\n\t/**\n\t * Encodes a UTM location as MGRS string.\n\t *\n\t * @private\n\t * @param {object} utm An object literal with easting, northing,\n\t *     zoneLetter, zoneNumber\n\t * @param {number} accuracy Accuracy in digits (1-5).\n\t * @return {string} MGRS string for the given UTM location.\n\t */\n\tfunction encode(utm, accuracy) {\n\t  // prepend with leading zeroes\n\t  var seasting = \"00000\" + utm.easting,\n\t    snorthing = \"00000\" + utm.northing;\n\n\t  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n\t}\n\n\t/**\n\t * Get the two letter 100k designator for a given UTM easting,\n\t * northing and zone number value.\n\t *\n\t * @private\n\t * @param {number} easting\n\t * @param {number} northing\n\t * @param {number} zoneNumber\n\t * @return the two letter 100k designator for the given UTM location.\n\t */\n\tfunction get100kID(easting, northing, zoneNumber) {\n\t  var setParm = get100kSetForZone(zoneNumber);\n\t  var setColumn = Math.floor(easting / 100000);\n\t  var setRow = Math.floor(northing / 100000) % 20;\n\t  return getLetter100kID(setColumn, setRow, setParm);\n\t}\n\n\t/**\n\t * Given a UTM zone number, figure out the MGRS 100K set it is in.\n\t *\n\t * @private\n\t * @param {number} i An UTM zone number.\n\t * @return {number} the 100k set the UTM zone is in.\n\t */\n\tfunction get100kSetForZone(i) {\n\t  var setParm = i % NUM_100K_SETS;\n\t  if (setParm === 0) {\n\t    setParm = NUM_100K_SETS;\n\t  }\n\n\t  return setParm;\n\t}\n\n\t/**\n\t * Get the two-letter MGRS 100k designator given information\n\t * translated from the UTM northing, easting and zone number.\n\t *\n\t * @private\n\t * @param {number} column the column index as it relates to the MGRS\n\t *        100k set spreadsheet, created from the UTM easting.\n\t *        Values are 1-8.\n\t * @param {number} row the row index as it relates to the MGRS 100k set\n\t *        spreadsheet, created from the UTM northing value. Values\n\t *        are from 0-19.\n\t * @param {number} parm the set block, as it relates to the MGRS 100k set\n\t *        spreadsheet, created from the UTM zone. Values are from\n\t *        1-60.\n\t * @return two letter MGRS 100k code.\n\t */\n\tfunction getLetter100kID(column, row, parm) {\n\t  // colOrigin and rowOrigin are the letters at the origin of the set\n\t  var index = parm - 1;\n\t  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n\t  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n\t  // colInt and rowInt are the letters to build to return\n\t  var colInt = colOrigin + column - 1;\n\t  var rowInt = rowOrigin + row;\n\t  var rollover = false;\n\n\t  if (colInt > Z) {\n\t    colInt = colInt - Z + A - 1;\n\t    rollover = true;\n\t  }\n\n\t  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n\t    colInt++;\n\t  }\n\n\t  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n\t    colInt++;\n\n\t    if (colInt === I) {\n\t      colInt++;\n\t    }\n\t  }\n\n\t  if (colInt > Z) {\n\t    colInt = colInt - Z + A - 1;\n\t  }\n\n\t  if (rowInt > V) {\n\t    rowInt = rowInt - V + A - 1;\n\t    rollover = true;\n\t  }\n\t  else {\n\t    rollover = false;\n\t  }\n\n\t  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n\t    rowInt++;\n\t  }\n\n\t  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n\t    rowInt++;\n\n\t    if (rowInt === I) {\n\t      rowInt++;\n\t    }\n\t  }\n\n\t  if (rowInt > V) {\n\t    rowInt = rowInt - V + A - 1;\n\t  }\n\n\t  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n\t  return twoLetter;\n\t}\n\n\t/**\n\t * Decode the UTM parameters from a MGRS string.\n\t *\n\t * @private\n\t * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n\t * @return {object} An object literal with easting, northing, zoneLetter,\n\t *     zoneNumber and accuracy (in meters) properties.\n\t */\n\tfunction decode(mgrsString) {\n\n\t  if (mgrsString && mgrsString.length === 0) {\n\t    throw (\"MGRSPoint coverting from nothing\");\n\t  }\n\n\t  var length = mgrsString.length;\n\n\t  var hunK = null;\n\t  var sb = \"\";\n\t  var testChar;\n\t  var i = 0;\n\n\t  // get Zone number\n\t  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n\t    if (i >= 2) {\n\t      throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n\t    }\n\t    sb += testChar;\n\t    i++;\n\t  }\n\n\t  var zoneNumber = parseInt(sb, 10);\n\n\t  if (i === 0 || i + 3 > length) {\n\t    // A good MGRS string has to be 4-5 digits long,\n\t    // ##AAA/#AAA at least.\n\t    throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n\t  }\n\n\t  var zoneLetter = mgrsString.charAt(i++);\n\n\t  // Should we check the zone letter here? Why not.\n\t  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n\t    throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n\t  }\n\n\t  hunK = mgrsString.substring(i, i += 2);\n\n\t  var set = get100kSetForZone(zoneNumber);\n\n\t  var east100k = getEastingFromChar(hunK.charAt(0), set);\n\t  var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n\t  // We have a bug where the northing may be 2000000 too low.\n\t  // How\n\t  // do we know when to roll over?\n\n\t  while (north100k < getMinNorthing(zoneLetter)) {\n\t    north100k += 2000000;\n\t  }\n\n\t  // calculate the char index for easting/northing separator\n\t  var remainder = length - i;\n\n\t  if (remainder % 2 !== 0) {\n\t    throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n\t  }\n\n\t  var sep = remainder / 2;\n\n\t  var sepEasting = 0.0;\n\t  var sepNorthing = 0.0;\n\t  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n\t  if (sep > 0) {\n\t    accuracyBonus = 100000.0 / Math.pow(10, sep);\n\t    sepEastingString = mgrsString.substring(i, i + sep);\n\t    sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n\t    sepNorthingString = mgrsString.substring(i + sep);\n\t    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n\t  }\n\n\t  easting = sepEasting + east100k;\n\t  northing = sepNorthing + north100k;\n\n\t  return {\n\t    easting: easting,\n\t    northing: northing,\n\t    zoneLetter: zoneLetter,\n\t    zoneNumber: zoneNumber,\n\t    accuracy: accuracyBonus\n\t  };\n\t}\n\n\t/**\n\t * Given the first letter from a two-letter MGRS 100k zone, and given the\n\t * MGRS table set for the zone number, figure out the easting value that\n\t * should be added to the other, secondary easting value.\n\t *\n\t * @private\n\t * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n\t * @param {number} set The MGRS table set for the zone number.\n\t * @return {number} The easting value for the given letter and set.\n\t */\n\tfunction getEastingFromChar(e, set) {\n\t  // colOrigin is the letter at the origin of the set for the\n\t  // column\n\t  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n\t  var eastingValue = 100000.0;\n\t  var rewindMarker = false;\n\n\t  while (curCol !== e.charCodeAt(0)) {\n\t    curCol++;\n\t    if (curCol === I) {\n\t      curCol++;\n\t    }\n\t    if (curCol === O) {\n\t      curCol++;\n\t    }\n\t    if (curCol > Z) {\n\t      if (rewindMarker) {\n\t        throw (\"Bad character: \" + e);\n\t      }\n\t      curCol = A;\n\t      rewindMarker = true;\n\t    }\n\t    eastingValue += 100000.0;\n\t  }\n\n\t  return eastingValue;\n\t}\n\n\t/**\n\t * Given the second letter from a two-letter MGRS 100k zone, and given the\n\t * MGRS table set for the zone number, figure out the northing value that\n\t * should be added to the other, secondary northing value. You have to\n\t * remember that Northings are determined from the equator, and the vertical\n\t * cycle of letters mean a 2000000 additional northing meters. This happens\n\t * approx. every 18 degrees of latitude. This method does *NOT* count any\n\t * additional northings. You have to figure out how many 2000000 meters need\n\t * to be added for the zone letter of the MGRS coordinate.\n\t *\n\t * @private\n\t * @param {char} n Second letter of the MGRS 100k zone\n\t * @param {number} set The MGRS table set number, which is dependent on the\n\t *     UTM zone number.\n\t * @return {number} The northing value for the given letter and set.\n\t */\n\tfunction getNorthingFromChar(n, set) {\n\n\t  if (n > 'V') {\n\t    throw (\"MGRSPoint given invalid Northing \" + n);\n\t  }\n\n\t  // rowOrigin is the letter at the origin of the set for the\n\t  // column\n\t  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n\t  var northingValue = 0.0;\n\t  var rewindMarker = false;\n\n\t  while (curRow !== n.charCodeAt(0)) {\n\t    curRow++;\n\t    if (curRow === I) {\n\t      curRow++;\n\t    }\n\t    if (curRow === O) {\n\t      curRow++;\n\t    }\n\t    // fixing a bug making whole application hang in this loop\n\t    // when 'n' is a wrong character\n\t    if (curRow > V) {\n\t      if (rewindMarker) { // making sure that this loop ends\n\t        throw (\"Bad character: \" + n);\n\t      }\n\t      curRow = A;\n\t      rewindMarker = true;\n\t    }\n\t    northingValue += 100000.0;\n\t  }\n\n\t  return northingValue;\n\t}\n\n\t/**\n\t * The function getMinNorthing returns the minimum northing value of a MGRS\n\t * zone.\n\t *\n\t * Ported from Geotrans' c Lattitude_Band_Value structure table.\n\t *\n\t * @private\n\t * @param {char} zoneLetter The MGRS zone to get the min northing for.\n\t * @return {number}\n\t */\n\tfunction getMinNorthing(zoneLetter) {\n\t  var northing;\n\t  switch (zoneLetter) {\n\t  case 'C':\n\t    northing = 1100000.0;\n\t    break;\n\t  case 'D':\n\t    northing = 2000000.0;\n\t    break;\n\t  case 'E':\n\t    northing = 2800000.0;\n\t    break;\n\t  case 'F':\n\t    northing = 3700000.0;\n\t    break;\n\t  case 'G':\n\t    northing = 4600000.0;\n\t    break;\n\t  case 'H':\n\t    northing = 5500000.0;\n\t    break;\n\t  case 'J':\n\t    northing = 6400000.0;\n\t    break;\n\t  case 'K':\n\t    northing = 7300000.0;\n\t    break;\n\t  case 'L':\n\t    northing = 8200000.0;\n\t    break;\n\t  case 'M':\n\t    northing = 9100000.0;\n\t    break;\n\t  case 'N':\n\t    northing = 0.0;\n\t    break;\n\t  case 'P':\n\t    northing = 800000.0;\n\t    break;\n\t  case 'Q':\n\t    northing = 1700000.0;\n\t    break;\n\t  case 'R':\n\t    northing = 2600000.0;\n\t    break;\n\t  case 'S':\n\t    northing = 3500000.0;\n\t    break;\n\t  case 'T':\n\t    northing = 4400000.0;\n\t    break;\n\t  case 'U':\n\t    northing = 5300000.0;\n\t    break;\n\t  case 'V':\n\t    northing = 6200000.0;\n\t    break;\n\t  case 'W':\n\t    northing = 7000000.0;\n\t    break;\n\t  case 'X':\n\t    northing = 7900000.0;\n\t    break;\n\t  default:\n\t    northing = -1.0;\n\t  }\n\t  if (northing >= 0.0) {\n\t    return northing;\n\t  }\n\t  else {\n\t    throw (\"Invalid zone letter: \" + zoneLetter);\n\t  }\n\n\t}\n\n\tfunction Point(x, y, z) {\n\t  if (!(this instanceof Point)) {\n\t    return new Point(x, y, z);\n\t  }\n\t  if (Array.isArray(x)) {\n\t    this.x = x[0];\n\t    this.y = x[1];\n\t    this.z = x[2] || 0.0;\n\t  } else if(typeof x === 'object') {\n\t    this.x = x.x;\n\t    this.y = x.y;\n\t    this.z = x.z || 0.0;\n\t  } else if (typeof x === 'string' && typeof y === 'undefined') {\n\t    var coords = x.split(',');\n\t    this.x = parseFloat(coords[0], 10);\n\t    this.y = parseFloat(coords[1], 10);\n\t    this.z = parseFloat(coords[2], 10) || 0.0;\n\t  } else {\n\t    this.x = x;\n\t    this.y = y;\n\t    this.z = z || 0.0;\n\t  }\n\t  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n\t}\n\n\tPoint.fromMGRS = function(mgrsStr) {\n\t  return new Point(toPoint$1(mgrsStr));\n\t};\n\tPoint.prototype.toMGRS = function(accuracy) {\n\t  return forward$1([this.x, this.y], accuracy);\n\t};\n\n\tvar version = \"2.4.3\";\n\n\tvar C00 = 1;\n\tvar C02 = 0.25;\n\tvar C04 = 0.046875;\n\tvar C06 = 0.01953125;\n\tvar C08 = 0.01068115234375;\n\tvar C22 = 0.75;\n\tvar C44 = 0.46875;\n\tvar C46 = 0.01302083333333333333;\n\tvar C48 = 0.00712076822916666666;\n\tvar C66 = 0.36458333333333333333;\n\tvar C68 = 0.00569661458333333333;\n\tvar C88 = 0.3076171875;\n\n\tvar pj_enfn = function(es) {\n\t  var en = [];\n\t  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n\t  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n\t  var t = es * es;\n\t  en[2] = t * (C44 - es * (C46 + es * C48));\n\t  t *= es;\n\t  en[3] = t * (C66 - es * C68);\n\t  en[4] = t * es * C88;\n\t  return en;\n\t};\n\n\tvar pj_mlfn = function(phi, sphi, cphi, en) {\n\t  cphi *= sphi;\n\t  sphi *= sphi;\n\t  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n\t};\n\n\tvar MAX_ITER = 20;\n\n\tvar pj_inv_mlfn = function(arg, es, en) {\n\t  var k = 1 / (1 - es);\n\t  var phi = arg;\n\t  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n\t    var s = Math.sin(phi);\n\t    var t = 1 - es * s * s;\n\t    //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n\t    //phi -= t * (t * Math.sqrt(t)) * k;\n\t    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n\t    phi -= t;\n\t    if (Math.abs(t) < EPSLN) {\n\t      return phi;\n\t    }\n\t  }\n\t  //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n\t  return phi;\n\t};\n\n\t// Heavily based on this tmerc projection implementation\n\t// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\n\tfunction init$2() {\n\t  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n\t  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n\t  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n\t  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n\t  if (this.es) {\n\t    this.en = pj_enfn(this.es);\n\t    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n\t  }\n\t}\n\n\t/**\n\t    Transverse Mercator Forward  - long/lat to x/y\n\t    long/lat in radians\n\t  */\n\tfunction forward$2(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  var con;\n\t  var x, y;\n\t  var sin_phi = Math.sin(lat);\n\t  var cos_phi = Math.cos(lat);\n\n\t  if (!this.es) {\n\t    var b = cos_phi * Math.sin(delta_lon);\n\n\t    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n\t      return (93);\n\t    }\n\t    else {\n\t      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n\t      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n\t      b = Math.abs(y);\n\n\t      if (b >= 1) {\n\t        if ((b - 1) > EPSLN) {\n\t          return (93);\n\t        }\n\t        else {\n\t          y = 0;\n\t        }\n\t      }\n\t      else {\n\t        y = Math.acos(y);\n\t      }\n\n\t      if (lat < 0) {\n\t        y = -y;\n\t      }\n\n\t      y = this.a * this.k0 * (y - this.lat0) + this.y0;\n\t    }\n\t  }\n\t  else {\n\t    var al = cos_phi * delta_lon;\n\t    var als = Math.pow(al, 2);\n\t    var c = this.ep2 * Math.pow(cos_phi, 2);\n\t    var cs = Math.pow(c, 2);\n\t    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n\t    var t = Math.pow(tq, 2);\n\t    var ts = Math.pow(t, 2);\n\t    con = 1 - this.es * Math.pow(sin_phi, 2);\n\t    al = al / Math.sqrt(con);\n\t    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n\t    x = this.a * (this.k0 * al * (1 +\n\t      als / 6 * (1 - t + c +\n\t      als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n\t      als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n\t      this.x0;\n\n\t    y = this.a * (this.k0 * (ml - this.ml0 +\n\t      sin_phi * delta_lon * al / 2 * (1 +\n\t      als / 12 * (5 - t + 9 * c + 4 * cs +\n\t      als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n\t      als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n\t      this.y0;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\n\t  return p;\n\t}\n\n\t/**\n\t    Transverse Mercator Inverse  -  x/y to long/lat\n\t  */\n\tfunction inverse$2(p) {\n\t  var con, phi;\n\t  var lat, lon;\n\t  var x = (p.x - this.x0) * (1 / this.a);\n\t  var y = (p.y - this.y0) * (1 / this.a);\n\n\t  if (!this.es) {\n\t    var f = Math.exp(x / this.k0);\n\t    var g = 0.5 * (f - 1 / f);\n\t    var temp = this.lat0 + y / this.k0;\n\t    var h = Math.cos(temp);\n\t    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n\t    lat = Math.asin(con);\n\n\t    if (y < 0) {\n\t      lat = -lat;\n\t    }\n\n\t    if ((g === 0) && (h === 0)) {\n\t      lon = 0;\n\t    }\n\t    else {\n\t      lon = adjust_lon(Math.atan2(g, h) + this.long0);\n\t    }\n\t  }\n\t  else { // ellipsoidal form\n\t    con = this.ml0 + y / this.k0;\n\t    phi = pj_inv_mlfn(con, this.es, this.en);\n\n\t    if (Math.abs(phi) < HALF_PI) {\n\t      var sin_phi = Math.sin(phi);\n\t      var cos_phi = Math.cos(phi);\n\t      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n\t      var c = this.ep2 * Math.pow(cos_phi, 2);\n\t      var cs = Math.pow(c, 2);\n\t      var t = Math.pow(tan_phi, 2);\n\t      var ts = Math.pow(t, 2);\n\t      con = 1 - this.es * Math.pow(sin_phi, 2);\n\t      var d = x * Math.sqrt(con) / this.k0;\n\t      var ds = Math.pow(d, 2);\n\t      con = con * tan_phi;\n\n\t      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n\t        ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n\t        ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n\t        ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n\t      lon = adjust_lon(this.long0 + (d * (1 -\n\t        ds / 6 * (1 + 2 * t + c -\n\t        ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n\t        ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n\t    }\n\t    else {\n\t      lat = HALF_PI * sign(y);\n\t      lon = 0;\n\t    }\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$3 = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\n\tvar tmerc = {\n\t  init: init$2,\n\t  forward: forward$2,\n\t  inverse: inverse$2,\n\t  names: names$3\n\t};\n\n\tvar sinh = function(x) {\n\t  var r = Math.exp(x);\n\t  r = (r - 1 / r) / 2;\n\t  return r;\n\t};\n\n\tvar hypot = function(x, y) {\n\t  x = Math.abs(x);\n\t  y = Math.abs(y);\n\t  var a = Math.max(x, y);\n\t  var b = Math.min(x, y) / (a ? a : 1);\n\n\t  return a * Math.sqrt(1 + Math.pow(b, 2));\n\t};\n\n\tvar log1py = function(x) {\n\t  var y = 1 + x;\n\t  var z = y - 1;\n\n\t  return z === 0 ? x : x * Math.log(y) / z;\n\t};\n\n\tvar asinhy = function(x) {\n\t  var y = Math.abs(x);\n\t  y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n\t  return x < 0 ? -y : y;\n\t};\n\n\tvar gatg = function(pp, B) {\n\t  var cos_2B = 2 * Math.cos(2 * B);\n\t  var i = pp.length - 1;\n\t  var h1 = pp[i];\n\t  var h2 = 0;\n\t  var h;\n\n\t  while (--i >= 0) {\n\t    h = -h2 + cos_2B * h1 + pp[i];\n\t    h2 = h1;\n\t    h1 = h;\n\t  }\n\n\t  return (B + h * Math.sin(2 * B));\n\t};\n\n\tvar clens = function(pp, arg_r) {\n\t  var r = 2 * Math.cos(arg_r);\n\t  var i = pp.length - 1;\n\t  var hr1 = pp[i];\n\t  var hr2 = 0;\n\t  var hr;\n\n\t  while (--i >= 0) {\n\t    hr = -hr2 + r * hr1 + pp[i];\n\t    hr2 = hr1;\n\t    hr1 = hr;\n\t  }\n\n\t  return Math.sin(arg_r) * hr;\n\t};\n\n\tvar cosh = function(x) {\n\t  var r = Math.exp(x);\n\t  r = (r + 1 / r) / 2;\n\t  return r;\n\t};\n\n\tvar clens_cmplx = function(pp, arg_r, arg_i) {\n\t  var sin_arg_r = Math.sin(arg_r);\n\t  var cos_arg_r = Math.cos(arg_r);\n\t  var sinh_arg_i = sinh(arg_i);\n\t  var cosh_arg_i = cosh(arg_i);\n\t  var r = 2 * cos_arg_r * cosh_arg_i;\n\t  var i = -2 * sin_arg_r * sinh_arg_i;\n\t  var j = pp.length - 1;\n\t  var hr = pp[j];\n\t  var hi1 = 0;\n\t  var hr1 = 0;\n\t  var hi = 0;\n\t  var hr2;\n\t  var hi2;\n\n\t  while (--j >= 0) {\n\t    hr2 = hr1;\n\t    hi2 = hi1;\n\t    hr1 = hr;\n\t    hi1 = hi;\n\t    hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n\t    hi = -hi2 + i * hr1 + r * hi1;\n\t  }\n\n\t  r = sin_arg_r * cosh_arg_i;\n\t  i = cos_arg_r * sinh_arg_i;\n\n\t  return [r * hr - i * hi, r * hi + i * hr];\n\t};\n\n\t// Heavily based on this etmerc projection implementation\n\t// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\n\tfunction init$3() {\n\t  if (this.es === undefined || this.es <= 0) {\n\t    throw new Error('incorrect elliptical usage');\n\t  }\n\n\t  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n\t  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n\t  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n\t  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n\t  this.cgb = [];\n\t  this.cbg = [];\n\t  this.utg = [];\n\t  this.gtu = [];\n\n\t  var f = this.es / (1 + Math.sqrt(1 - this.es));\n\t  var n = f / (2 - f);\n\t  var np = n;\n\n\t  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n\t  this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n\t  np = np * n;\n\t  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n\t  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n\t  np = np * n;\n\t  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n\t  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n\t  np = np * n;\n\t  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n\t  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n\t  np = np * n;\n\t  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n\t  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n\t  np = np * n;\n\t  this.cgb[5] = np * (601676 / 22275);\n\t  this.cbg[5] = np * (444337 / 155925);\n\n\t  np = Math.pow(n, 2);\n\t  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n\t  this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n\t  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n\t  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n\t  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n\t  np = np * n;\n\t  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n\t  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n\t  np = np * n;\n\t  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n\t  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n\t  np = np * n;\n\t  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n\t  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n\t  np = np * n;\n\t  this.utg[5] = np * (-20648693 / 638668800);\n\t  this.gtu[5] = np * (212378941 / 319334400);\n\n\t  var Z = gatg(this.cbg, this.lat0);\n\t  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n\t}\n\n\tfunction forward$3(p) {\n\t  var Ce = adjust_lon(p.x - this.long0);\n\t  var Cn = p.y;\n\n\t  Cn = gatg(this.cbg, Cn);\n\t  var sin_Cn = Math.sin(Cn);\n\t  var cos_Cn = Math.cos(Cn);\n\t  var sin_Ce = Math.sin(Ce);\n\t  var cos_Ce = Math.cos(Ce);\n\n\t  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n\t  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n\t  Ce = asinhy(Math.tan(Ce));\n\n\t  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n\t  Cn = Cn + tmp[0];\n\t  Ce = Ce + tmp[1];\n\n\t  var x;\n\t  var y;\n\n\t  if (Math.abs(Ce) <= 2.623395162778) {\n\t    x = this.a * (this.Qn * Ce) + this.x0;\n\t    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n\t  }\n\t  else {\n\t    x = Infinity;\n\t    y = Infinity;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\n\t  return p;\n\t}\n\n\tfunction inverse$3(p) {\n\t  var Ce = (p.x - this.x0) * (1 / this.a);\n\t  var Cn = (p.y - this.y0) * (1 / this.a);\n\n\t  Cn = (Cn - this.Zb) / this.Qn;\n\t  Ce = Ce / this.Qn;\n\n\t  var lon;\n\t  var lat;\n\n\t  if (Math.abs(Ce) <= 2.623395162778) {\n\t    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n\t    Cn = Cn + tmp[0];\n\t    Ce = Ce + tmp[1];\n\t    Ce = Math.atan(sinh(Ce));\n\n\t    var sin_Cn = Math.sin(Cn);\n\t    var cos_Cn = Math.cos(Cn);\n\t    var sin_Ce = Math.sin(Ce);\n\t    var cos_Ce = Math.cos(Ce);\n\n\t    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n\t    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n\t    lon = adjust_lon(Ce + this.long0);\n\t    lat = gatg(this.cgb, Cn);\n\t  }\n\t  else {\n\t    lon = Infinity;\n\t    lat = Infinity;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$4 = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\"];\n\tvar etmerc = {\n\t  init: init$3,\n\t  forward: forward$3,\n\t  inverse: inverse$3,\n\t  names: names$4\n\t};\n\n\tvar adjust_zone = function(zone, lon) {\n\t  if (zone === undefined) {\n\t    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n\t    if (zone < 0) {\n\t      return 0;\n\t    } else if (zone > 60) {\n\t      return 60;\n\t    }\n\t  }\n\t  return zone;\n\t};\n\n\tvar dependsOn = 'etmerc';\n\tfunction init$4() {\n\t  var zone = adjust_zone(this.zone, this.long0);\n\t  if (zone === undefined) {\n\t    throw new Error('unknown utm zone');\n\t  }\n\t  this.lat0 = 0;\n\t  this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;\n\t  this.x0 = 500000;\n\t  this.y0 = this.utmSouth ? 10000000 : 0;\n\t  this.k0 = 0.9996;\n\n\t  etmerc.init.apply(this);\n\t  this.forward = etmerc.forward;\n\t  this.inverse = etmerc.inverse;\n\t}\n\n\tvar names$5 = [\"Universal Transverse Mercator System\", \"utm\"];\n\tvar utm = {\n\t  init: init$4,\n\t  names: names$5,\n\t  dependsOn: dependsOn\n\t};\n\n\tvar srat = function(esinp, exp) {\n\t  return (Math.pow((1 - esinp) / (1 + esinp), exp));\n\t};\n\n\tvar MAX_ITER$1 = 20;\n\tfunction init$6() {\n\t  var sphi = Math.sin(this.lat0);\n\t  var cphi = Math.cos(this.lat0);\n\t  cphi *= cphi;\n\t  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n\t  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n\t  this.phic0 = Math.asin(sphi / this.C);\n\t  this.ratexp = 0.5 * this.C * this.e;\n\t  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n\t}\n\n\tfunction forward$5(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n\t  p.x = this.C * lon;\n\t  return p;\n\t}\n\n\tfunction inverse$5(p) {\n\t  var DEL_TOL = 1e-14;\n\t  var lon = p.x / this.C;\n\t  var lat = p.y;\n\t  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n\t  for (var i = MAX_ITER$1; i > 0; --i) {\n\t    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n\t    if (Math.abs(lat - p.y) < DEL_TOL) {\n\t      break;\n\t    }\n\t    p.y = lat;\n\t  }\n\t  /* convergence failed */\n\t  if (!i) {\n\t    return null;\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$7 = [\"gauss\"];\n\tvar gauss = {\n\t  init: init$6,\n\t  forward: forward$5,\n\t  inverse: inverse$5,\n\t  names: names$7\n\t};\n\n\tfunction init$5() {\n\t  gauss.init.apply(this);\n\t  if (!this.rc) {\n\t    return;\n\t  }\n\t  this.sinc0 = Math.sin(this.phic0);\n\t  this.cosc0 = Math.cos(this.phic0);\n\t  this.R2 = 2 * this.rc;\n\t  if (!this.title) {\n\t    this.title = \"Oblique Stereographic Alternative\";\n\t  }\n\t}\n\n\tfunction forward$4(p) {\n\t  var sinc, cosc, cosl, k;\n\t  p.x = adjust_lon(p.x - this.long0);\n\t  gauss.forward.apply(this, [p]);\n\t  sinc = Math.sin(p.y);\n\t  cosc = Math.cos(p.y);\n\t  cosl = Math.cos(p.x);\n\t  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n\t  p.x = k * cosc * Math.sin(p.x);\n\t  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n\t  p.x = this.a * p.x + this.x0;\n\t  p.y = this.a * p.y + this.y0;\n\t  return p;\n\t}\n\n\tfunction inverse$4(p) {\n\t  var sinc, cosc, lon, lat, rho;\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  p.x /= this.k0;\n\t  p.y /= this.k0;\n\t  if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n\t    var c = 2 * Math.atan2(rho, this.R2);\n\t    sinc = Math.sin(c);\n\t    cosc = Math.cos(c);\n\t    lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n\t    lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n\t  }\n\t  else {\n\t    lat = this.phic0;\n\t    lon = 0;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  gauss.inverse.apply(this, [p]);\n\t  p.x = adjust_lon(p.x + this.long0);\n\t  return p;\n\t}\n\n\tvar names$6 = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\"];\n\tvar sterea = {\n\t  init: init$5,\n\t  forward: forward$4,\n\t  inverse: inverse$4,\n\t  names: names$6\n\t};\n\n\tfunction ssfn_(phit, sinphi, eccen) {\n\t  sinphi *= eccen;\n\t  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n\t}\n\n\tfunction init$7() {\n\t  this.coslat0 = Math.cos(this.lat0);\n\t  this.sinlat0 = Math.sin(this.lat0);\n\t  if (this.sphere) {\n\t    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n\t      this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      if (this.lat0 > 0) {\n\t        //North pole\n\t        //trace('stere:north pole');\n\t        this.con = 1;\n\t      }\n\t      else {\n\t        //South pole\n\t        //trace('stere:south pole');\n\t        this.con = -1;\n\t      }\n\t    }\n\t    this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n\t    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n\t      this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n\t    }\n\t    this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n\t    this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n\t    this.cosX0 = Math.cos(this.X0);\n\t    this.sinX0 = Math.sin(this.X0);\n\t  }\n\t}\n\n\t// Stereographic forward equations--mapping lat,long to x,y\n\tfunction forward$6(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var sinlat = Math.sin(lat);\n\t  var coslat = Math.cos(lat);\n\t  var A, X, sinX, cosX, ts, rh;\n\t  var dlon = adjust_lon(lon - this.long0);\n\n\t  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n\t    //case of the origine point\n\t    //trace('stere:this is the origin point');\n\t    p.x = NaN;\n\t    p.y = NaN;\n\t    return p;\n\t  }\n\t  if (this.sphere) {\n\t    //trace('stere:sphere case');\n\t    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n\t    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n\t    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n\t    return p;\n\t  }\n\t  else {\n\t    X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n\t    cosX = Math.cos(X);\n\t    sinX = Math.sin(X);\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n\t      rh = 2 * this.a * this.k0 * ts / this.cons;\n\t      p.x = this.x0 + rh * Math.sin(lon - this.long0);\n\t      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n\t      //trace(p.toString());\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sinlat0) < EPSLN) {\n\t      //Eq\n\t      //trace('stere:equateur');\n\t      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n\t      p.y = A * sinX;\n\t    }\n\t    else {\n\t      //other case\n\t      //trace('stere:normal case');\n\t      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n\t      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n\t    }\n\t    p.x = A * cosX * Math.sin(dlon) + this.x0;\n\t  }\n\t  //trace(p.toString());\n\t  return p;\n\t}\n\n\t//* Stereographic inverse equations--mapping x,y to lat/long\n\tfunction inverse$6(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var lon, lat, ts, ce, Chi;\n\t  var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  if (this.sphere) {\n\t    var c = 2 * Math.atan(rh / (0.5 * this.a * this.k0));\n\t    lon = this.long0;\n\t    lat = this.lat0;\n\t    if (rh <= EPSLN) {\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n\t    if (Math.abs(this.coslat0) < EPSLN) {\n\t      if (this.lat0 > 0) {\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t      }\n\t      else {\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n\t      }\n\t    }\n\t    else {\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n\t    }\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      if (rh <= EPSLN) {\n\t        lat = this.lat0;\n\t        lon = this.long0;\n\t        p.x = lon;\n\t        p.y = lat;\n\t        //trace(p.toString());\n\t        return p;\n\t      }\n\t      p.x *= this.con;\n\t      p.y *= this.con;\n\t      ts = rh * this.cons / (2 * this.a * this.k0);\n\t      lat = this.con * phi2z(this.e, ts);\n\t      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t    }\n\t    else {\n\t      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n\t      lon = this.long0;\n\t      if (rh <= EPSLN) {\n\t        Chi = this.X0;\n\t      }\n\t      else {\n\t        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n\t      }\n\t      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n\t    }\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  //trace(p.toString());\n\t  return p;\n\n\t}\n\n\tvar names$8 = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\n\tvar stere = {\n\t  init: init$7,\n\t  forward: forward$6,\n\t  inverse: inverse$6,\n\t  names: names$8,\n\t  ssfn_: ssfn_\n\t};\n\n\t/*\n\t  references:\n\t    Formules et constantes pour le Calcul pour la\n\t    projection cylindrique conforme à axe oblique et pour la transformation entre\n\t    des systèmes de référence.\n\t    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n\t  */\n\n\tfunction init$8() {\n\t  var phy0 = this.lat0;\n\t  this.lambda0 = this.long0;\n\t  var sinPhy0 = Math.sin(phy0);\n\t  var semiMajorAxis = this.a;\n\t  var invF = this.rf;\n\t  var flattening = 1 / invF;\n\t  var e2 = 2 * flattening - Math.pow(flattening, 2);\n\t  var e = this.e = Math.sqrt(e2);\n\t  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n\t  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n\t  this.b0 = Math.asin(sinPhy0 / this.alpha);\n\t  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n\t  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n\t  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n\t  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n\t}\n\n\tfunction forward$7(p) {\n\t  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n\t  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n\t  var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n\t  // spheric latitude\n\t  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n\t  // spheric longitude\n\t  var I = this.alpha * (p.x - this.lambda0);\n\n\t  // psoeudo equatorial rotation\n\t  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n\t  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n\t  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n\t  p.x = this.R * rotI + this.x0;\n\t  return p;\n\t}\n\n\tfunction inverse$7(p) {\n\t  var Y = p.x - this.x0;\n\t  var X = p.y - this.y0;\n\n\t  var rotI = Y / this.R;\n\t  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n\t  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n\t  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n\t  var lambda = this.lambda0 + I / this.alpha;\n\n\t  var S = 0;\n\t  var phy = b;\n\t  var prevPhy = -1000;\n\t  var iteration = 0;\n\t  while (Math.abs(phy - prevPhy) > 0.0000001) {\n\t    if (++iteration > 20) {\n\t      //...reportError(\"omercFwdInfinity\");\n\t      return;\n\t    }\n\t    //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n\t    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n\t    prevPhy = phy;\n\t    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n\t  }\n\n\t  p.x = lambda;\n\t  p.y = phy;\n\t  return p;\n\t}\n\n\tvar names$9 = [\"somerc\"];\n\tvar somerc = {\n\t  init: init$8,\n\t  forward: forward$7,\n\t  inverse: inverse$7,\n\t  names: names$9\n\t};\n\n\t/* Initialize the Oblique Mercator  projection\n\t    ------------------------------------------*/\n\tfunction init$9() {\n\t  this.no_off = this.no_off || false;\n\t  this.no_rot = this.no_rot || false;\n\n\t  if (isNaN(this.k0)) {\n\t    this.k0 = 1;\n\t  }\n\t  var sinlat = Math.sin(this.lat0);\n\t  var coslat = Math.cos(this.lat0);\n\t  var con = this.e * sinlat;\n\n\t  this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n\t  this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n\t  var t0 = tsfnz(this.e, this.lat0, sinlat);\n\t  var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n\t  if (dl * dl < 1) {\n\t    dl = 1;\n\t  }\n\t  var fl;\n\t  var gl;\n\t  if (!isNaN(this.longc)) {\n\t    //Central point and azimuth method\n\n\t    if (this.lat0 >= 0) {\n\t      fl = dl + Math.sqrt(dl * dl - 1);\n\t    }\n\t    else {\n\t      fl = dl - Math.sqrt(dl * dl - 1);\n\t    }\n\t    this.el = fl * Math.pow(t0, this.bl);\n\t    gl = 0.5 * (fl - 1 / fl);\n\t    this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n\t    this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n\t  }\n\t  else {\n\t    //2 points method\n\t    var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n\t    var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n\t    if (this.lat0 >= 0) {\n\t      this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n\t    }\n\t    else {\n\t      this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n\t    }\n\t    var hl = Math.pow(t1, this.bl);\n\t    var ll = Math.pow(t2, this.bl);\n\t    fl = this.el / hl;\n\t    gl = 0.5 * (fl - 1 / fl);\n\t    var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n\t    var pl = (ll - hl) / (ll + hl);\n\t    var dlon12 = adjust_lon(this.long1 - this.long2);\n\t    this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n\t    this.long0 = adjust_lon(this.long0);\n\t    var dlon10 = adjust_lon(this.long1 - this.long0);\n\t    this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n\t    this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n\t  }\n\n\t  if (this.no_off) {\n\t    this.uc = 0;\n\t  }\n\t  else {\n\t    if (this.lat0 >= 0) {\n\t      this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n\t    }\n\t    else {\n\t      this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n\t    }\n\t  }\n\n\t}\n\n\t/* Oblique Mercator forward equations--mapping lat,long to x,y\n\t    ----------------------------------------------------------*/\n\tfunction forward$8(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var us, vs;\n\t  var con;\n\t  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n\t    if (lat > 0) {\n\t      con = -1;\n\t    }\n\t    else {\n\t      con = 1;\n\t    }\n\t    vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n\t    us = -1 * con * HALF_PI * this.al / this.bl;\n\t  }\n\t  else {\n\t    var t = tsfnz(this.e, lat, Math.sin(lat));\n\t    var ql = this.el / Math.pow(t, this.bl);\n\t    var sl = 0.5 * (ql - 1 / ql);\n\t    var tl = 0.5 * (ql + 1 / ql);\n\t    var vl = Math.sin(this.bl * (dlon));\n\t    var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n\t    if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n\t      vs = Number.POSITIVE_INFINITY;\n\t    }\n\t    else {\n\t      vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n\t    }\n\t    if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n\t      us = this.al * this.bl * (dlon);\n\t    }\n\t    else {\n\t      us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n\t    }\n\t  }\n\n\t  if (this.no_rot) {\n\t    p.x = this.x0 + us;\n\t    p.y = this.y0 + vs;\n\t  }\n\t  else {\n\n\t    us -= this.uc;\n\t    p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n\t    p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n\t  }\n\t  return p;\n\t}\n\n\tfunction inverse$8(p) {\n\t  var us, vs;\n\t  if (this.no_rot) {\n\t    vs = p.y - this.y0;\n\t    us = p.x - this.x0;\n\t  }\n\t  else {\n\t    vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n\t    us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n\t    us += this.uc;\n\t  }\n\t  var qp = Math.exp(-1 * this.bl * vs / this.al);\n\t  var sp = 0.5 * (qp - 1 / qp);\n\t  var tp = 0.5 * (qp + 1 / qp);\n\t  var vp = Math.sin(this.bl * us / this.al);\n\t  var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n\t  var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n\t  if (Math.abs(up - 1) < EPSLN) {\n\t    p.x = this.long0;\n\t    p.y = HALF_PI;\n\t  }\n\t  else if (Math.abs(up + 1) < EPSLN) {\n\t    p.x = this.long0;\n\t    p.y = -1 * HALF_PI;\n\t  }\n\t  else {\n\t    p.y = phi2z(this.e, ts);\n\t    p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n\t  }\n\t  return p;\n\t}\n\n\tvar names$10 = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];\n\tvar omerc = {\n\t  init: init$9,\n\t  forward: forward$8,\n\t  inverse: inverse$8,\n\t  names: names$10\n\t};\n\n\tfunction init$10() {\n\n\t  // array of:  r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n\t  //double c_lat;                   /* center latitude                      */\n\t  //double c_lon;                   /* center longitude                     */\n\t  //double lat1;                    /* first standard parallel              */\n\t  //double lat2;                    /* second standard parallel             */\n\t  //double r_maj;                   /* major axis                           */\n\t  //double r_min;                   /* minor axis                           */\n\t  //double false_east;              /* x offset in meters                   */\n\t  //double false_north;             /* y offset in meters                   */\n\n\t  if (!this.lat2) {\n\t    this.lat2 = this.lat1;\n\t  } //if lat2 is not defined\n\t  if (!this.k0) {\n\t    this.k0 = 1;\n\t  }\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  // Standard Parallels cannot be equal and on opposite sides of the equator\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\n\t  var temp = this.b / this.a;\n\t  this.e = Math.sqrt(1 - temp * temp);\n\n\t  var sin1 = Math.sin(this.lat1);\n\t  var cos1 = Math.cos(this.lat1);\n\t  var ms1 = msfnz(this.e, sin1, cos1);\n\t  var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n\t  var sin2 = Math.sin(this.lat2);\n\t  var cos2 = Math.cos(this.lat2);\n\t  var ms2 = msfnz(this.e, sin2, cos2);\n\t  var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n\t  var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n\t  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n\t    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n\t  }\n\t  else {\n\t    this.ns = sin1;\n\t  }\n\t  if (isNaN(this.ns)) {\n\t    this.ns = sin1;\n\t  }\n\t  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n\t  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n\t  if (!this.title) {\n\t    this.title = \"Lambert Conformal Conic\";\n\t  }\n\t}\n\n\t// Lambert Conformal conic forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$9(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  // singular cases :\n\t  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n\t    lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n\t  }\n\n\t  var con = Math.abs(Math.abs(lat) - HALF_PI);\n\t  var ts, rh1;\n\t  if (con > EPSLN) {\n\t    ts = tsfnz(this.e, lat, Math.sin(lat));\n\t    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n\t  }\n\t  else {\n\t    con = lat * this.ns;\n\t    if (con <= 0) {\n\t      return null;\n\t    }\n\t    rh1 = 0;\n\t  }\n\t  var theta = this.ns * adjust_lon(lon - this.long0);\n\t  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n\t  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n\t  return p;\n\t}\n\n\t// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$9(p) {\n\n\t  var rh1, con, ts;\n\t  var lat, lon;\n\t  var x = (p.x - this.x0) / this.k0;\n\t  var y = (this.rh - (p.y - this.y0) / this.k0);\n\t  if (this.ns > 0) {\n\t    rh1 = Math.sqrt(x * x + y * y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(x * x + y * y);\n\t    con = -1;\n\t  }\n\t  var theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2((con * x), (con * y));\n\t  }\n\t  if ((rh1 !== 0) || (this.ns > 0)) {\n\t    con = 1 / this.ns;\n\t    ts = Math.pow((rh1 / (this.a * this.f0)), con);\n\t    lat = phi2z(this.e, ts);\n\t    if (lat === -9999) {\n\t      return null;\n\t    }\n\t  }\n\t  else {\n\t    lat = -HALF_PI;\n\t  }\n\t  lon = adjust_lon(theta / this.ns + this.long0);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$11 = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\n\tvar lcc = {\n\t  init: init$10,\n\t  forward: forward$9,\n\t  inverse: inverse$9,\n\t  names: names$11\n\t};\n\n\tfunction init$11() {\n\t  this.a = 6377397.155;\n\t  this.es = 0.006674372230614;\n\t  this.e = Math.sqrt(this.es);\n\t  if (!this.lat0) {\n\t    this.lat0 = 0.863937979737193;\n\t  }\n\t  if (!this.long0) {\n\t    this.long0 = 0.7417649320975901 - 0.308341501185665;\n\t  }\n\t  /* if scale not set default to 0.9999 */\n\t  if (!this.k0) {\n\t    this.k0 = 0.9999;\n\t  }\n\t  this.s45 = 0.785398163397448; /* 45 */\n\t  this.s90 = 2 * this.s45;\n\t  this.fi0 = this.lat0;\n\t  this.e2 = this.es;\n\t  this.e = Math.sqrt(this.e2);\n\t  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n\t  this.uq = 1.04216856380474;\n\t  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n\t  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n\t  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n\t  this.k1 = this.k0;\n\t  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n\t  this.s0 = 1.37008346281555;\n\t  this.n = Math.sin(this.s0);\n\t  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n\t  this.ad = this.s90 - this.uq;\n\t}\n\n\t/* ellipsoid */\n\t/* calculate xy from lat/lon */\n\t/* Constants, identical to inverse transform function */\n\tfunction forward$10(p) {\n\t  var gfi, u, deltav, s, d, eps, ro;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  /* Transformation */\n\t  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n\t  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n\t  deltav = -delta_lon * this.alfa;\n\t  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n\t  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n\t  eps = this.n * d;\n\t  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n\t  p.y = ro * Math.cos(eps) / 1;\n\t  p.x = ro * Math.sin(eps) / 1;\n\n\t  if (!this.czech) {\n\t    p.y *= -1;\n\t    p.x *= -1;\n\t  }\n\t  return (p);\n\t}\n\n\t/* calculate lat/lon from xy */\n\tfunction inverse$10(p) {\n\t  var u, deltav, s, d, eps, ro, fi1;\n\t  var ok;\n\n\t  /* Transformation */\n\t  /* revert y, x*/\n\t  var tmp = p.x;\n\t  p.x = p.y;\n\t  p.y = tmp;\n\t  if (!this.czech) {\n\t    p.y *= -1;\n\t    p.x *= -1;\n\t  }\n\t  ro = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  eps = Math.atan2(p.y, p.x);\n\t  d = eps / Math.sin(this.s0);\n\t  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n\t  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n\t  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n\t  p.x = this.long0 - deltav / this.alfa;\n\t  fi1 = u;\n\t  ok = 0;\n\t  var iter = 0;\n\t  do {\n\t    p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n\t    if (Math.abs(fi1 - p.y) < 0.0000000001) {\n\t      ok = 1;\n\t    }\n\t    fi1 = p.y;\n\t    iter += 1;\n\t  } while (ok === 0 && iter < 15);\n\t  if (iter >= 15) {\n\t    return null;\n\t  }\n\n\t  return (p);\n\t}\n\n\tvar names$12 = [\"Krovak\", \"krovak\"];\n\tvar krovak = {\n\t  init: init$11,\n\t  forward: forward$10,\n\t  inverse: inverse$10,\n\t  names: names$12\n\t};\n\n\tvar mlfn = function(e0, e1, e2, e3, phi) {\n\t  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n\t};\n\n\tvar e0fn = function(x) {\n\t  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n\t};\n\n\tvar e1fn = function(x) {\n\t  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n\t};\n\n\tvar e2fn = function(x) {\n\t  return (0.05859375 * x * x * (1 + 0.75 * x));\n\t};\n\n\tvar e3fn = function(x) {\n\t  return (x * x * x * (35 / 3072));\n\t};\n\n\tvar gN = function(a, e, sinphi) {\n\t  var temp = e * sinphi;\n\t  return a / Math.sqrt(1 - temp * temp);\n\t};\n\n\tvar adjust_lat = function(x) {\n\t  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n\t};\n\n\tvar imlfn = function(ml, e0, e1, e2, e3) {\n\t  var phi;\n\t  var dphi;\n\n\t  phi = ml / e0;\n\t  for (var i = 0; i < 15; i++) {\n\t    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\n\t  //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n\t  return NaN;\n\t};\n\n\tfunction init$12() {\n\t  if (!this.sphere) {\n\t    this.e0 = e0fn(this.es);\n\t    this.e1 = e1fn(this.es);\n\t    this.e2 = e2fn(this.es);\n\t    this.e3 = e3fn(this.es);\n\t    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n\t  }\n\t}\n\n\t/* Cassini forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------------------*/\n\tfunction forward$11(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var x, y;\n\t  var lam = p.x;\n\t  var phi = p.y;\n\t  lam = adjust_lon(lam - this.long0);\n\n\t  if (this.sphere) {\n\t    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n\t    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n\t  }\n\t  else {\n\t    //ellipsoid\n\t    var sinphi = Math.sin(phi);\n\t    var cosphi = Math.cos(phi);\n\t    var nl = gN(this.a, this.e, sinphi);\n\t    var tl = Math.tan(phi) * Math.tan(phi);\n\t    var al = lam * Math.cos(phi);\n\t    var asq = al * al;\n\t    var cl = this.es * cosphi * cosphi / (1 - this.es);\n\t    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n\t    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n\t    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n\t  }\n\n\t  p.x = x + this.x0;\n\t  p.y = y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$11(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var x = p.x / this.a;\n\t  var y = p.y / this.a;\n\t  var phi, lam;\n\n\t  if (this.sphere) {\n\t    var dd = y + this.lat0;\n\t    phi = Math.asin(Math.sin(dd) * Math.cos(x));\n\t    lam = Math.atan2(Math.tan(x), Math.cos(dd));\n\t  }\n\t  else {\n\t    /* ellipsoid */\n\t    var ml1 = this.ml0 / this.a + y;\n\t    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n\t    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n\t      p.x = this.long0;\n\t      p.y = HALF_PI;\n\t      if (y < 0) {\n\t        p.y *= -1;\n\t      }\n\t      return p;\n\t    }\n\t    var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n\t    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n\t    var tl1 = Math.pow(Math.tan(phi1), 2);\n\t    var dl = x * this.a / nl1;\n\t    var dsq = dl * dl;\n\t    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n\t    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n\t  }\n\n\t  p.x = adjust_lon(lam + this.long0);\n\t  p.y = adjust_lat(phi);\n\t  return p;\n\n\t}\n\n\tvar names$13 = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\n\tvar cass = {\n\t  init: init$12,\n\t  forward: forward$11,\n\t  inverse: inverse$11,\n\t  names: names$13\n\t};\n\n\tvar qsfnz = function(eccent, sinphi) {\n\t  var con;\n\t  if (eccent > 1.0e-7) {\n\t    con = eccent * sinphi;\n\t    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n\t  }\n\t  else {\n\t    return (2 * sinphi);\n\t  }\n\t};\n\n\t/*\n\t  reference\n\t    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n\t    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n\t  */\n\n\tvar S_POLE = 1;\n\n\tvar N_POLE = 2;\n\tvar EQUIT = 3;\n\tvar OBLIQ = 4;\n\n\t/* Initialize the Lambert Azimuthal Equal Area projection\n\t  ------------------------------------------------------*/\n\tfunction init$13() {\n\t  var t = Math.abs(this.lat0);\n\t  if (Math.abs(t - HALF_PI) < EPSLN) {\n\t    this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n\t  }\n\t  else if (Math.abs(t) < EPSLN) {\n\t    this.mode = this.EQUIT;\n\t  }\n\t  else {\n\t    this.mode = this.OBLIQ;\n\t  }\n\t  if (this.es > 0) {\n\t    var sinphi;\n\n\t    this.qp = qsfnz(this.e, 1);\n\t    this.mmf = 0.5 / (1 - this.es);\n\t    this.apa = authset(this.es);\n\t    switch (this.mode) {\n\t    case this.N_POLE:\n\t      this.dd = 1;\n\t      break;\n\t    case this.S_POLE:\n\t      this.dd = 1;\n\t      break;\n\t    case this.EQUIT:\n\t      this.rq = Math.sqrt(0.5 * this.qp);\n\t      this.dd = 1 / this.rq;\n\t      this.xmf = 1;\n\t      this.ymf = 0.5 * this.qp;\n\t      break;\n\t    case this.OBLIQ:\n\t      this.rq = Math.sqrt(0.5 * this.qp);\n\t      sinphi = Math.sin(this.lat0);\n\t      this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n\t      this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n\t      this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n\t      this.ymf = (this.xmf = this.rq) / this.dd;\n\t      this.xmf *= this.dd;\n\t      break;\n\t    }\n\t  }\n\t  else {\n\t    if (this.mode === this.OBLIQ) {\n\t      this.sinph0 = Math.sin(this.lat0);\n\t      this.cosph0 = Math.cos(this.lat0);\n\t    }\n\t  }\n\t}\n\n\t/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------------------*/\n\tfunction forward$12(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n\t  var lam = p.x;\n\t  var phi = p.y;\n\n\t  lam = adjust_lon(lam - this.long0);\n\t  if (this.sphere) {\n\t    sinphi = Math.sin(phi);\n\t    cosphi = Math.cos(phi);\n\t    coslam = Math.cos(lam);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n\t      if (y <= EPSLN) {\n\t        return null;\n\t      }\n\t      y = Math.sqrt(2 / y);\n\t      x = y * cosphi * Math.sin(lam);\n\t      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n\t    }\n\t    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n\t      if (this.mode === this.N_POLE) {\n\t        coslam = -coslam;\n\t      }\n\t      if (Math.abs(phi + this.phi0) < EPSLN) {\n\t        return null;\n\t      }\n\t      y = FORTPI - phi * 0.5;\n\t      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n\t      x = y * Math.sin(lam);\n\t      y *= coslam;\n\t    }\n\t  }\n\t  else {\n\t    sinb = 0;\n\t    cosb = 0;\n\t    b = 0;\n\t    coslam = Math.cos(lam);\n\t    sinlam = Math.sin(lam);\n\t    sinphi = Math.sin(phi);\n\t    q = qsfnz(this.e, sinphi);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      sinb = q / this.qp;\n\t      cosb = Math.sqrt(1 - sinb * sinb);\n\t    }\n\t    switch (this.mode) {\n\t    case this.OBLIQ:\n\t      b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n\t      break;\n\t    case this.EQUIT:\n\t      b = 1 + cosb * coslam;\n\t      break;\n\t    case this.N_POLE:\n\t      b = HALF_PI + phi;\n\t      q = this.qp - q;\n\t      break;\n\t    case this.S_POLE:\n\t      b = phi - HALF_PI;\n\t      q = this.qp + q;\n\t      break;\n\t    }\n\t    if (Math.abs(b) < EPSLN) {\n\t      return null;\n\t    }\n\t    switch (this.mode) {\n\t    case this.OBLIQ:\n\t    case this.EQUIT:\n\t      b = Math.sqrt(2 / b);\n\t      if (this.mode === this.OBLIQ) {\n\t        y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n\t      }\n\t      else {\n\t        y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n\t      }\n\t      x = this.xmf * b * cosb * sinlam;\n\t      break;\n\t    case this.N_POLE:\n\t    case this.S_POLE:\n\t      if (q >= 0) {\n\t        x = (b = Math.sqrt(q)) * sinlam;\n\t        y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n\t      }\n\t      else {\n\t        x = y = 0;\n\t      }\n\t      break;\n\t    }\n\t  }\n\n\t  p.x = this.a * x + this.x0;\n\t  p.y = this.a * y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$12(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var x = p.x / this.a;\n\t  var y = p.y / this.a;\n\t  var lam, phi, cCe, sCe, q, rho, ab;\n\t  if (this.sphere) {\n\t    var cosz = 0,\n\t      rh, sinz = 0;\n\n\t    rh = Math.sqrt(x * x + y * y);\n\t    phi = rh * 0.5;\n\t    if (phi > 1) {\n\t      return null;\n\t    }\n\t    phi = 2 * Math.asin(phi);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      sinz = Math.sin(phi);\n\t      cosz = Math.cos(phi);\n\t    }\n\t    switch (this.mode) {\n\t    case this.EQUIT:\n\t      phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n\t      x *= sinz;\n\t      y = cosz * rh;\n\t      break;\n\t    case this.OBLIQ:\n\t      phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n\t      x *= sinz * this.cosph0;\n\t      y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n\t      break;\n\t    case this.N_POLE:\n\t      y = -y;\n\t      phi = HALF_PI - phi;\n\t      break;\n\t    case this.S_POLE:\n\t      phi -= HALF_PI;\n\t      break;\n\t    }\n\t    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n\t  }\n\t  else {\n\t    ab = 0;\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      x /= this.dd;\n\t      y *= this.dd;\n\t      rho = Math.sqrt(x * x + y * y);\n\t      if (rho < EPSLN) {\n\t        p.x = 0;\n\t        p.y = this.phi0;\n\t        return p;\n\t      }\n\t      sCe = 2 * Math.asin(0.5 * rho / this.rq);\n\t      cCe = Math.cos(sCe);\n\t      x *= (sCe = Math.sin(sCe));\n\t      if (this.mode === this.OBLIQ) {\n\t        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n\t        q = this.qp * ab;\n\t        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n\t      }\n\t      else {\n\t        ab = y * sCe / rho;\n\t        q = this.qp * ab;\n\t        y = rho * cCe;\n\t      }\n\t    }\n\t    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n\t      if (this.mode === this.N_POLE) {\n\t        y = -y;\n\t      }\n\t      q = (x * x + y * y);\n\t      if (!q) {\n\t        p.x = 0;\n\t        p.y = this.phi0;\n\t        return p;\n\t      }\n\t      ab = 1 - q / this.qp;\n\t      if (this.mode === this.S_POLE) {\n\t        ab = -ab;\n\t      }\n\t    }\n\t    lam = Math.atan2(x, y);\n\t    phi = authlat(Math.asin(ab), this.apa);\n\t  }\n\n\t  p.x = adjust_lon(this.long0 + lam);\n\t  p.y = phi;\n\t  return p;\n\t}\n\n\t/* determine latitude from authalic latitude */\n\tvar P00 = 0.33333333333333333333;\n\n\tvar P01 = 0.17222222222222222222;\n\tvar P02 = 0.10257936507936507936;\n\tvar P10 = 0.06388888888888888888;\n\tvar P11 = 0.06640211640211640211;\n\tvar P20 = 0.01641501294219154443;\n\n\tfunction authset(es) {\n\t  var t;\n\t  var APA = [];\n\t  APA[0] = es * P00;\n\t  t = es * es;\n\t  APA[0] += t * P01;\n\t  APA[1] = t * P10;\n\t  t *= es;\n\t  APA[0] += t * P02;\n\t  APA[1] += t * P11;\n\t  APA[2] = t * P20;\n\t  return APA;\n\t}\n\n\tfunction authlat(beta, APA) {\n\t  var t = beta + beta;\n\t  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n\t}\n\n\tvar names$14 = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\n\tvar laea = {\n\t  init: init$13,\n\t  forward: forward$12,\n\t  inverse: inverse$12,\n\t  names: names$14,\n\t  S_POLE: S_POLE,\n\t  N_POLE: N_POLE,\n\t  EQUIT: EQUIT,\n\t  OBLIQ: OBLIQ\n\t};\n\n\tvar asinz = function(x) {\n\t  if (Math.abs(x) > 1) {\n\t    x = (x > 1) ? 1 : -1;\n\t  }\n\t  return Math.asin(x);\n\t};\n\n\tfunction init$14() {\n\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2);\n\t  this.e3 = Math.sqrt(this.es);\n\n\t  this.sin_po = Math.sin(this.lat1);\n\t  this.cos_po = Math.cos(this.lat1);\n\t  this.t1 = this.sin_po;\n\t  this.con = this.sin_po;\n\t  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n\t  this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  this.sin_po = Math.sin(this.lat2);\n\t  this.cos_po = Math.cos(this.lat2);\n\t  this.t2 = this.sin_po;\n\t  this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n\t  this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  this.sin_po = Math.sin(this.lat0);\n\t  this.cos_po = Math.cos(this.lat0);\n\t  this.t3 = this.sin_po;\n\t  this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n\t    this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n\t  }\n\t  else {\n\t    this.ns0 = this.con;\n\t  }\n\t  this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n\t  this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n\t}\n\n\t/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n\t  -------------------------------------------------------------------*/\n\tfunction forward$13(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  this.sin_phi = Math.sin(lat);\n\t  this.cos_phi = Math.cos(lat);\n\n\t  var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n\t  var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n\t  var theta = this.ns0 * adjust_lon(lon - this.long0);\n\t  var x = rh1 * Math.sin(theta) + this.x0;\n\t  var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$13(p) {\n\t  var rh1, qs, con, theta, lon, lat;\n\n\t  p.x -= this.x0;\n\t  p.y = this.rh - p.y + this.y0;\n\t  if (this.ns0 >= 0) {\n\t    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = -1;\n\t  }\n\t  theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2(con * p.x, con * p.y);\n\t  }\n\t  con = rh1 * this.ns0 / this.a;\n\t  if (this.sphere) {\n\t    lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n\t  }\n\t  else {\n\t    qs = (this.c - con * con) / this.ns0;\n\t    lat = this.phi1z(this.e3, qs);\n\t  }\n\n\t  lon = adjust_lon(theta / this.ns0 + this.long0);\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\t/* Function to compute phi1, the latitude for the inverse of the\n\t   Albers Conical Equal-Area projection.\n\t-------------------------------------------*/\n\tfunction phi1z(eccent, qs) {\n\t  var sinphi, cosphi, con, com, dphi;\n\t  var phi = asinz(0.5 * qs);\n\t  if (eccent < EPSLN) {\n\t    return phi;\n\t  }\n\n\t  var eccnts = eccent * eccent;\n\t  for (var i = 1; i <= 25; i++) {\n\t    sinphi = Math.sin(phi);\n\t    cosphi = Math.cos(phi);\n\t    con = eccent * sinphi;\n\t    com = 1 - con * con;\n\t    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n\t    phi = phi + dphi;\n\t    if (Math.abs(dphi) <= 1e-7) {\n\t      return phi;\n\t    }\n\t  }\n\t  return null;\n\t}\n\n\tvar names$15 = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\n\tvar aea = {\n\t  init: init$14,\n\t  forward: forward$13,\n\t  inverse: inverse$13,\n\t  names: names$15,\n\t  phi1z: phi1z\n\t};\n\n\t/*\n\t  reference:\n\t    Wolfram Mathworld \"Gnomonic Projection\"\n\t    http://mathworld.wolfram.com/GnomonicProjection.html\n\t    Accessed: 12th November 2009\n\t  */\n\tfunction init$15() {\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.sin_p14 = Math.sin(this.lat0);\n\t  this.cos_p14 = Math.cos(this.lat0);\n\t  // Approximation for projecting points to the horizon (infinity)\n\t  this.infinity_dist = 1000 * this.a;\n\t  this.rc = 1;\n\t}\n\n\t/* Gnomonic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$14(p) {\n\t  var sinphi, cosphi; /* sin and cos value        */\n\t  var dlon; /* delta longitude value      */\n\t  var coslon; /* cos of longitude        */\n\t  var ksp; /* scale factor          */\n\t  var g;\n\t  var x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  dlon = adjust_lon(lon - this.long0);\n\n\t  sinphi = Math.sin(lat);\n\t  cosphi = Math.cos(lat);\n\n\t  coslon = Math.cos(dlon);\n\t  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n\t  ksp = 1;\n\t  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n\t    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n\t    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n\t  }\n\t  else {\n\n\t    // Point is in the opposing hemisphere and is unprojectable\n\t    // We still need to return a reasonable point, so we project\n\t    // to infinity, on a bearing\n\t    // equivalent to the northern hemisphere equivalent\n\t    // This is a reasonable approximation for short shapes and lines that\n\t    // straddle the horizon.\n\n\t    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n\t    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$14(p) {\n\t  var rh; /* Rho */\n\t  var sinc, cosc;\n\t  var c;\n\t  var lon, lat;\n\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  p.x /= this.k0;\n\t  p.y /= this.k0;\n\n\t  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n\t    c = Math.atan2(rh, this.rc);\n\t    sinc = Math.sin(c);\n\t    cosc = Math.cos(c);\n\n\t    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n\t    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n\t    lon = adjust_lon(this.long0 + lon);\n\t  }\n\t  else {\n\t    lat = this.phic0;\n\t    lon = 0;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$16 = [\"gnom\"];\n\tvar gnom = {\n\t  init: init$15,\n\t  forward: forward$14,\n\t  inverse: inverse$14,\n\t  names: names$16\n\t};\n\n\tvar iqsfnz = function(eccent, q) {\n\t  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n\t  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n\t    if (q < 0) {\n\t      return (-1 * HALF_PI);\n\t    }\n\t    else {\n\t      return HALF_PI;\n\t    }\n\t  }\n\t  //var phi = 0.5* q/(1-eccent*eccent);\n\t  var phi = Math.asin(0.5 * q);\n\t  var dphi;\n\t  var sin_phi;\n\t  var cos_phi;\n\t  var con;\n\t  for (var i = 0; i < 30; i++) {\n\t    sin_phi = Math.sin(phi);\n\t    cos_phi = Math.cos(phi);\n\t    con = eccent * sin_phi;\n\t    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\n\t  //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n\t  return NaN;\n\t};\n\n\t/*\n\t  reference:\n\t    \"Cartographic Projection Procedures for the UNIX Environment-\n\t    A User's Manual\" by Gerald I. Evenden,\n\t    USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n\t*/\n\tfunction init$16() {\n\t  //no-op\n\t  if (!this.sphere) {\n\t    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n\t  }\n\t}\n\n\t/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n\t    ------------------------------------------------------------*/\n\tfunction forward$15(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var x, y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  if (this.sphere) {\n\t    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n\t    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n\t  }\n\t  else {\n\t    var qs = qsfnz(this.e, Math.sin(lat));\n\t    x = this.x0 + this.a * this.k0 * dlon;\n\t    y = this.y0 + this.a * qs * 0.5 / this.k0;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n\t    ------------------------------------------------------------*/\n\tfunction inverse$15(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var lon, lat;\n\n\t  if (this.sphere) {\n\t    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n\t    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n\t  }\n\t  else {\n\t    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n\t    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$17 = [\"cea\"];\n\tvar cea = {\n\t  init: init$16,\n\t  forward: forward$15,\n\t  inverse: inverse$15,\n\t  names: names$17\n\t};\n\n\tfunction init$17() {\n\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  this.lat0 = this.lat0 || 0;\n\t  this.long0 = this.long0 || 0;\n\t  this.lat_ts = this.lat_ts || 0;\n\t  this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n\t  this.rc = Math.cos(this.lat_ts);\n\t}\n\n\t// forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$16(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var dlat = adjust_lat(lat - this.lat0);\n\t  p.x = this.x0 + (this.a * dlon * this.rc);\n\t  p.y = this.y0 + (this.a * dlat);\n\t  return p;\n\t}\n\n\t// inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$16(p) {\n\n\t  var x = p.x;\n\t  var y = p.y;\n\n\t  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n\t  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n\t  return p;\n\t}\n\n\tvar names$18 = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\n\tvar eqc = {\n\t  init: init$17,\n\t  forward: forward$16,\n\t  inverse: inverse$16,\n\t  names: names$18\n\t};\n\n\tvar MAX_ITER$2 = 20;\n\n\tfunction init$18() {\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n\t  this.e = Math.sqrt(this.es);\n\t  this.e0 = e0fn(this.es);\n\t  this.e1 = e1fn(this.es);\n\t  this.e2 = e2fn(this.es);\n\t  this.e3 = e3fn(this.es);\n\t  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n\t}\n\n\t/* Polyconic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$17(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var x, y, el;\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  el = dlon * Math.sin(lat);\n\t  if (this.sphere) {\n\t    if (Math.abs(lat) <= EPSLN) {\n\t      x = this.a * dlon;\n\t      y = -1 * this.a * this.lat0;\n\t    }\n\t    else {\n\t      x = this.a * Math.sin(el) / Math.tan(lat);\n\t      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(lat) <= EPSLN) {\n\t      x = this.a * dlon;\n\t      y = -1 * this.ml0;\n\t    }\n\t    else {\n\t      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n\t      x = nl * Math.sin(el);\n\t      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n\t    }\n\n\t  }\n\t  p.x = x + this.x0;\n\t  p.y = y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$17(p) {\n\t  var lon, lat, x, y, i;\n\t  var al, bl;\n\t  var phi, dphi;\n\t  x = p.x - this.x0;\n\t  y = p.y - this.y0;\n\n\t  if (this.sphere) {\n\t    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n\t      lon = adjust_lon(x / this.a + this.long0);\n\t      lat = 0;\n\t    }\n\t    else {\n\t      al = this.lat0 + y / this.a;\n\t      bl = x * x / this.a / this.a + al * al;\n\t      phi = al;\n\t      var tanphi;\n\t      for (i = MAX_ITER$2; i; --i) {\n\t        tanphi = Math.tan(phi);\n\t        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n\t        phi += dphi;\n\t        if (Math.abs(dphi) <= EPSLN) {\n\t          lat = phi;\n\t          break;\n\t        }\n\t      }\n\t      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(y + this.ml0) <= EPSLN) {\n\t      lat = 0;\n\t      lon = adjust_lon(this.long0 + x / this.a);\n\t    }\n\t    else {\n\n\t      al = (this.ml0 + y) / this.a;\n\t      bl = x * x / this.a / this.a + al * al;\n\t      phi = al;\n\t      var cl, mln, mlnp, ma;\n\t      var con;\n\t      for (i = MAX_ITER$2; i; --i) {\n\t        con = this.e * Math.sin(phi);\n\t        cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n\t        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\t        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n\t        ma = mln / this.a;\n\t        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n\t        phi -= dphi;\n\t        if (Math.abs(dphi) <= EPSLN) {\n\t          lat = phi;\n\t          break;\n\t        }\n\t      }\n\n\t      //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n\t      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n\t      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n\t    }\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$19 = [\"Polyconic\", \"poly\"];\n\tvar poly = {\n\t  init: init$18,\n\t  forward: forward$17,\n\t  inverse: inverse$17,\n\t  names: names$19\n\t};\n\n\t/*\n\t  reference\n\t    Department of Land and Survey Technical Circular 1973/32\n\t      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n\t    OSG Technical Report 4.1\n\t      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n\t  */\n\n\t/**\n\t * iterations: Number of iterations to refine inverse transform.\n\t *     0 -> km accuracy\n\t *     1 -> m accuracy -- suitable for most mapping applications\n\t *     2 -> mm accuracy\n\t */\n\n\n\tfunction init$19() {\n\t  this.A = [];\n\t  this.A[1] = 0.6399175073;\n\t  this.A[2] = -0.1358797613;\n\t  this.A[3] = 0.063294409;\n\t  this.A[4] = -0.02526853;\n\t  this.A[5] = 0.0117879;\n\t  this.A[6] = -0.0055161;\n\t  this.A[7] = 0.0026906;\n\t  this.A[8] = -0.001333;\n\t  this.A[9] = 0.00067;\n\t  this.A[10] = -0.00034;\n\n\t  this.B_re = [];\n\t  this.B_im = [];\n\t  this.B_re[1] = 0.7557853228;\n\t  this.B_im[1] = 0;\n\t  this.B_re[2] = 0.249204646;\n\t  this.B_im[2] = 0.003371507;\n\t  this.B_re[3] = -0.001541739;\n\t  this.B_im[3] = 0.041058560;\n\t  this.B_re[4] = -0.10162907;\n\t  this.B_im[4] = 0.01727609;\n\t  this.B_re[5] = -0.26623489;\n\t  this.B_im[5] = -0.36249218;\n\t  this.B_re[6] = -0.6870983;\n\t  this.B_im[6] = -1.1651967;\n\n\t  this.C_re = [];\n\t  this.C_im = [];\n\t  this.C_re[1] = 1.3231270439;\n\t  this.C_im[1] = 0;\n\t  this.C_re[2] = -0.577245789;\n\t  this.C_im[2] = -0.007809598;\n\t  this.C_re[3] = 0.508307513;\n\t  this.C_im[3] = -0.112208952;\n\t  this.C_re[4] = -0.15094762;\n\t  this.C_im[4] = 0.18200602;\n\t  this.C_re[5] = 1.01418179;\n\t  this.C_im[5] = 1.64497696;\n\t  this.C_re[6] = 1.9660549;\n\t  this.C_im[6] = 2.5127645;\n\n\t  this.D = [];\n\t  this.D[1] = 1.5627014243;\n\t  this.D[2] = 0.5185406398;\n\t  this.D[3] = -0.03333098;\n\t  this.D[4] = -0.1052906;\n\t  this.D[5] = -0.0368594;\n\t  this.D[6] = 0.007317;\n\t  this.D[7] = 0.01220;\n\t  this.D[8] = 0.00394;\n\t  this.D[9] = -0.0013;\n\t}\n\n\t/**\n\t    New Zealand Map Grid Forward  - long/lat to x/y\n\t    long/lat in radians\n\t  */\n\tfunction forward$18(p) {\n\t  var n;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lat = lat - this.lat0;\n\t  var delta_lon = lon - this.long0;\n\n\t  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda\n\t  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n\t  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n\t  var d_lambda = delta_lon;\n\t  var d_phi_n = 1; // d_phi^0\n\n\t  var d_psi = 0;\n\t  for (n = 1; n <= 10; n++) {\n\t    d_phi_n = d_phi_n * d_phi;\n\t    d_psi = d_psi + this.A[n] * d_phi_n;\n\t  }\n\n\t  // 2. Calculate theta\n\t  var th_re = d_psi;\n\t  var th_im = d_lambda;\n\n\t  // 3. Calculate z\n\t  var th_n_re = 1;\n\t  var th_n_im = 0; // theta^0\n\t  var th_n_re1;\n\t  var th_n_im1;\n\n\t  var z_re = 0;\n\t  var z_im = 0;\n\t  for (n = 1; n <= 6; n++) {\n\t    th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t    th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t    th_n_re = th_n_re1;\n\t    th_n_im = th_n_im1;\n\t    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n\t    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n\t  }\n\n\t  // 4. Calculate easting and northing\n\t  p.x = (z_im * this.a) + this.x0;\n\t  p.y = (z_re * this.a) + this.y0;\n\n\t  return p;\n\t}\n\n\t/**\n\t    New Zealand Map Grid Inverse  -  x/y to long/lat\n\t  */\n\tfunction inverse$18(p) {\n\t  var n;\n\t  var x = p.x;\n\t  var y = p.y;\n\n\t  var delta_x = x - this.x0;\n\t  var delta_y = y - this.y0;\n\n\t  // 1. Calculate z\n\t  var z_re = delta_y / this.a;\n\t  var z_im = delta_x / this.a;\n\n\t  // 2a. Calculate theta - first approximation gives km accuracy\n\t  var z_n_re = 1;\n\t  var z_n_im = 0; // z^0\n\t  var z_n_re1;\n\t  var z_n_im1;\n\n\t  var th_re = 0;\n\t  var th_im = 0;\n\t  for (n = 1; n <= 6; n++) {\n\t    z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n\t    z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n\t    z_n_re = z_n_re1;\n\t    z_n_im = z_n_im1;\n\t    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n\t    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n\t  }\n\n\t  // 2b. Iterate to refine the accuracy of the calculation\n\t  //        0 iterations gives km accuracy\n\t  //        1 iteration gives m accuracy -- good enough for most mapping applications\n\t  //        2 iterations bives mm accuracy\n\t  for (var i = 0; i < this.iterations; i++) {\n\t    var th_n_re = th_re;\n\t    var th_n_im = th_im;\n\t    var th_n_re1;\n\t    var th_n_im1;\n\n\t    var num_re = z_re;\n\t    var num_im = z_im;\n\t    for (n = 2; n <= 6; n++) {\n\t      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t      th_n_re = th_n_re1;\n\t      th_n_im = th_n_im1;\n\t      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n\t      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n\t    }\n\n\t    th_n_re = 1;\n\t    th_n_im = 0;\n\t    var den_re = this.B_re[1];\n\t    var den_im = this.B_im[1];\n\t    for (n = 2; n <= 6; n++) {\n\t      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t      th_n_re = th_n_re1;\n\t      th_n_im = th_n_im1;\n\t      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n\t      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n\t    }\n\n\t    // Complex division\n\t    var den2 = den_re * den_re + den_im * den_im;\n\t    th_re = (num_re * den_re + num_im * den_im) / den2;\n\t    th_im = (num_im * den_re - num_re * den_im) / den2;\n\t  }\n\n\t  // 3. Calculate d_phi              ...                                    // and d_lambda\n\t  var d_psi = th_re;\n\t  var d_lambda = th_im;\n\t  var d_psi_n = 1; // d_psi^0\n\n\t  var d_phi = 0;\n\t  for (n = 1; n <= 9; n++) {\n\t    d_psi_n = d_psi_n * d_psi;\n\t    d_phi = d_phi + this.D[n] * d_psi_n;\n\t  }\n\n\t  // 4. Calculate latitude and longitude\n\t  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n\t  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n\t  var lon = this.long0 + d_lambda;\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$20 = [\"New_Zealand_Map_Grid\", \"nzmg\"];\n\tvar nzmg = {\n\t  init: init$19,\n\t  forward: forward$18,\n\t  inverse: inverse$18,\n\t  names: names$20\n\t};\n\n\t/*\n\t  reference\n\t    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n\t    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n\t  */\n\n\n\t/* Initialize the Miller Cylindrical projection\n\t  -------------------------------------------*/\n\tfunction init$20() {\n\t  //no-op\n\t}\n\n\t/* Miller Cylindrical forward equations--mapping lat,long to x,y\n\t    ------------------------------------------------------------*/\n\tfunction forward$19(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var x = this.x0 + this.a * dlon;\n\t  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n\t    ------------------------------------------------------------*/\n\tfunction inverse$19(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\n\t  var lon = adjust_lon(this.long0 + p.x / this.a);\n\t  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$21 = [\"Miller_Cylindrical\", \"mill\"];\n\tvar mill = {\n\t  init: init$20,\n\t  forward: forward$19,\n\t  inverse: inverse$19,\n\t  names: names$21\n\t};\n\n\tvar MAX_ITER$3 = 20;\n\tfunction init$21() {\n\t  /* Place parameters in static storage for common use\n\t    -------------------------------------------------*/\n\n\n\t  if (!this.sphere) {\n\t    this.en = pj_enfn(this.es);\n\t  }\n\t  else {\n\t    this.n = 1;\n\t    this.m = 0;\n\t    this.es = 0;\n\t    this.C_y = Math.sqrt((this.m + 1) / this.n);\n\t    this.C_x = this.C_y / (this.m + 1);\n\t  }\n\n\t}\n\n\t/* Sinusoidal forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------*/\n\tfunction forward$20(p) {\n\t  var x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t    -----------------*/\n\t  lon = adjust_lon(lon - this.long0);\n\n\t  if (this.sphere) {\n\t    if (!this.m) {\n\t      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n\t    }\n\t    else {\n\t      var k = this.n * Math.sin(lat);\n\t      for (var i = MAX_ITER$3; i; --i) {\n\t        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n\t        lat -= V;\n\t        if (Math.abs(V) < EPSLN) {\n\t          break;\n\t        }\n\t      }\n\t    }\n\t    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n\t    y = this.a * this.C_y * lat;\n\n\t  }\n\t  else {\n\n\t    var s = Math.sin(lat);\n\t    var c = Math.cos(lat);\n\t    y = this.a * pj_mlfn(lat, s, c, this.en);\n\t    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$20(p) {\n\t  var lat, temp, lon, s;\n\n\t  p.x -= this.x0;\n\t  lon = p.x / this.a;\n\t  p.y -= this.y0;\n\t  lat = p.y / this.a;\n\n\t  if (this.sphere) {\n\t    lat /= this.C_y;\n\t    lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n\t    if (this.m) {\n\t      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n\t    }\n\t    else if (this.n !== 1) {\n\t      lat = asinz(Math.sin(lat) / this.n);\n\t    }\n\t    lon = adjust_lon(lon + this.long0);\n\t    lat = adjust_lat(lat);\n\t  }\n\t  else {\n\t    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n\t    s = Math.abs(lat);\n\t    if (s < HALF_PI) {\n\t      s = Math.sin(lat);\n\t      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n\t      //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n\t      lon = adjust_lon(temp);\n\t    }\n\t    else if ((s - EPSLN) < HALF_PI) {\n\t      lon = this.long0;\n\t    }\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$22 = [\"Sinusoidal\", \"sinu\"];\n\tvar sinu = {\n\t  init: init$21,\n\t  forward: forward$20,\n\t  inverse: inverse$20,\n\t  names: names$22\n\t};\n\n\tfunction init$22() {}\n\t/* Mollweide forward equations--mapping lat,long to x,y\n\t    ----------------------------------------------------*/\n\tfunction forward$21(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  var theta = lat;\n\t  var con = Math.PI * Math.sin(lat);\n\n\t  /* Iterate using the Newton-Raphson method to find theta\n\t      -----------------------------------------------------*/\n\t  for (var i = 0; true; i++) {\n\t    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n\t    theta += delta_theta;\n\t    if (Math.abs(delta_theta) < EPSLN) {\n\t      break;\n\t    }\n\t  }\n\t  theta /= 2;\n\n\t  /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n\t       this is done here because of precision problems with \"cos(theta)\"\n\t       --------------------------------------------------------------------------*/\n\t  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n\t    delta_lon = 0;\n\t  }\n\t  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n\t  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$21(p) {\n\t  var theta;\n\t  var arg;\n\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  arg = p.y / (1.4142135623731 * this.a);\n\n\t  /* Because of division by zero problems, 'arg' can not be 1.  Therefore\n\t       a number very close to one is used instead.\n\t       -------------------------------------------------------------------*/\n\t  if (Math.abs(arg) > 0.999999999999) {\n\t    arg = 0.999999999999;\n\t  }\n\t  theta = Math.asin(arg);\n\t  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n\t  if (lon < (-Math.PI)) {\n\t    lon = -Math.PI;\n\t  }\n\t  if (lon > Math.PI) {\n\t    lon = Math.PI;\n\t  }\n\t  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n\t  if (Math.abs(arg) > 1) {\n\t    arg = 1;\n\t  }\n\t  var lat = Math.asin(arg);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$23 = [\"Mollweide\", \"moll\"];\n\tvar moll = {\n\t  init: init$22,\n\t  forward: forward$21,\n\t  inverse: inverse$21,\n\t  names: names$23\n\t};\n\n\tfunction init$23() {\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  // Standard Parallels cannot be equal and on opposite sides of the equator\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\t  this.lat2 = this.lat2 || this.lat1;\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2);\n\t  this.e = Math.sqrt(this.es);\n\t  this.e0 = e0fn(this.es);\n\t  this.e1 = e1fn(this.es);\n\t  this.e2 = e2fn(this.es);\n\t  this.e3 = e3fn(this.es);\n\n\t  this.sinphi = Math.sin(this.lat1);\n\t  this.cosphi = Math.cos(this.lat1);\n\n\t  this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n\t  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n\t  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n\t    this.ns = this.sinphi;\n\t  }\n\t  else {\n\t    this.sinphi = Math.sin(this.lat2);\n\t    this.cosphi = Math.cos(this.lat2);\n\t    this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n\t    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n\t    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n\t  }\n\t  this.g = this.ml1 + this.ms1 / this.ns;\n\t  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n\t  this.rh = this.a * (this.g - this.ml0);\n\t}\n\n\t/* Equidistant Conic forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------*/\n\tfunction forward$22(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var rh1;\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  if (this.sphere) {\n\t    rh1 = this.a * (this.g - lat);\n\t  }\n\t  else {\n\t    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n\t    rh1 = this.a * (this.g - ml);\n\t  }\n\t  var theta = this.ns * adjust_lon(lon - this.long0);\n\t  var x = this.x0 + rh1 * Math.sin(theta);\n\t  var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$22(p) {\n\t  p.x -= this.x0;\n\t  p.y = this.rh - p.y + this.y0;\n\t  var con, rh1, lat, lon;\n\t  if (this.ns >= 0) {\n\t    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = -1;\n\t  }\n\t  var theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2(con * p.x, con * p.y);\n\t  }\n\n\t  if (this.sphere) {\n\t    lon = adjust_lon(this.long0 + theta / this.ns);\n\t    lat = adjust_lat(this.g - rh1 / this.a);\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    var ml = this.g - rh1 / this.a;\n\t    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n\t    lon = adjust_lon(this.long0 + theta / this.ns);\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\n\t}\n\n\tvar names$24 = [\"Equidistant_Conic\", \"eqdc\"];\n\tvar eqdc = {\n\t  init: init$23,\n\t  forward: forward$22,\n\t  inverse: inverse$22,\n\t  names: names$24\n\t};\n\n\t/* Initialize the Van Der Grinten projection\n\t  ----------------------------------------*/\n\tfunction init$24() {\n\t  //this.R = 6370997; //Radius of earth\n\t  this.R = this.a;\n\t}\n\n\tfunction forward$23(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  /* Forward equations\n\t    -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var x, y;\n\n\t  if (Math.abs(lat) <= EPSLN) {\n\t    x = this.x0 + this.R * dlon;\n\t    y = this.y0;\n\t  }\n\t  var theta = asinz(2 * Math.abs(lat / Math.PI));\n\t  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n\t    x = this.x0;\n\t    if (lat >= 0) {\n\t      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n\t    }\n\t    else {\n\t      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n\t    }\n\t    //  return(OK);\n\t  }\n\t  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n\t  var asq = al * al;\n\t  var sinth = Math.sin(theta);\n\t  var costh = Math.cos(theta);\n\n\t  var g = costh / (sinth + costh - 1);\n\t  var gsq = g * g;\n\t  var m = g * (2 / sinth - 1);\n\t  var msq = m * m;\n\t  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n\t  if (dlon < 0) {\n\t    con = -con;\n\t  }\n\t  x = this.x0 + con;\n\t  //con = Math.abs(con / (Math.PI * this.R));\n\t  var q = asq + g;\n\t  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n\t  if (lat >= 0) {\n\t    //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n\t    y = this.y0 + con;\n\t  }\n\t  else {\n\t    //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n\t    y = this.y0 - con;\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Van Der Grinten inverse equations--mapping x,y to lat/long\n\t  ---------------------------------------------------------*/\n\tfunction inverse$23(p) {\n\t  var lon, lat;\n\t  var xx, yy, xys, c1, c2, c3;\n\t  var a1;\n\t  var m1;\n\t  var con;\n\t  var th1;\n\t  var d;\n\n\t  /* inverse equations\n\t    -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  con = Math.PI * this.R;\n\t  xx = p.x / con;\n\t  yy = p.y / con;\n\t  xys = xx * xx + yy * yy;\n\t  c1 = -Math.abs(yy) * (1 + xys);\n\t  c2 = c1 - 2 * yy * yy + xx * xx;\n\t  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n\t  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n\t  a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n\t  m1 = 2 * Math.sqrt(-a1 / 3);\n\t  con = ((3 * d) / a1) / m1;\n\t  if (Math.abs(con) > 1) {\n\t    if (con >= 0) {\n\t      con = 1;\n\t    }\n\t    else {\n\t      con = -1;\n\t    }\n\t  }\n\t  th1 = Math.acos(con) / 3;\n\t  if (p.y >= 0) {\n\t    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n\t  }\n\t  else {\n\t    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n\t  }\n\n\t  if (Math.abs(xx) < EPSLN) {\n\t    lon = this.long0;\n\t  }\n\t  else {\n\t    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$25 = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\n\tvar vandg = {\n\t  init: init$24,\n\t  forward: forward$23,\n\t  inverse: inverse$23,\n\t  names: names$25\n\t};\n\n\tfunction init$25() {\n\t  this.sin_p12 = Math.sin(this.lat0);\n\t  this.cos_p12 = Math.cos(this.lat0);\n\t}\n\n\tfunction forward$24(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var sinphi = Math.sin(p.y);\n\t  var cosphi = Math.cos(p.y);\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n\t  if (this.sphere) {\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North Pole case\n\t      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n\t      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South Pole case\n\t      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n\t      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else {\n\t      //default case\n\t      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n\t      c = Math.acos(cos_c);\n\t      kp = c / Math.sin(c);\n\t      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n\t      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n\t      return p;\n\t    }\n\t  }\n\t  else {\n\t    e0 = e0fn(this.es);\n\t    e1 = e1fn(this.es);\n\t    e2 = e2fn(this.es);\n\t    e3 = e3fn(this.es);\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North Pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n\t      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n\t      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South Pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n\t      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n\t      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else {\n\t      //Default case\n\t      tanphi = sinphi / cosphi;\n\t      Nl1 = gN(this.a, this.e, this.sin_p12);\n\t      Nl = gN(this.a, this.e, sinphi);\n\t      psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n\t      Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n\t      if (Az === 0) {\n\t        s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n\t      }\n\t      else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n\t        s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n\t      }\n\t      else {\n\t        s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n\t      }\n\t      G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n\t      H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n\t      GH = G * H;\n\t      Hs = H * H;\n\t      s2 = s * s;\n\t      s3 = s2 * s;\n\t      s4 = s3 * s;\n\t      s5 = s4 * s;\n\t      c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n\t      p.x = this.x0 + c * Math.sin(Az);\n\t      p.y = this.y0 + c * Math.cos(Az);\n\t      return p;\n\t    }\n\t  }\n\n\n\t}\n\n\tfunction inverse$24(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F;\n\t  if (this.sphere) {\n\t    rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    if (rh > (2 * HALF_PI * this.a)) {\n\t      return;\n\t    }\n\t    z = rh / this.a;\n\n\t    sinz = Math.sin(z);\n\t    cosz = Math.cos(z);\n\n\t    lon = this.long0;\n\t    if (Math.abs(rh) <= EPSLN) {\n\t      lat = this.lat0;\n\t    }\n\t    else {\n\t      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n\t      con = Math.abs(this.lat0) - HALF_PI;\n\t      if (Math.abs(con) <= EPSLN) {\n\t        if (this.lat0 >= 0) {\n\t          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n\t        }\n\t        else {\n\t          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n\t        }\n\t      }\n\t      else {\n\t        /*con = cosz - this.sin_p12 * Math.sin(lat);\n\t        if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n\t          //no-op, just keep the lon value as is\n\t        } else {\n\t          var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n\t          lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n\t        }*/\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n\t      }\n\t    }\n\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    e0 = e0fn(this.es);\n\t    e1 = e1fn(this.es);\n\t    e2 = e2fn(this.es);\n\t    e3 = e3fn(this.es);\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      M = Mlp - rh;\n\t      lat = imlfn(M / this.a, e0, e1, e2, e3);\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      M = rh - Mlp;\n\n\t      lat = imlfn(M / this.a, e0, e1, e2, e3);\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    else {\n\t      //default case\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      Az = Math.atan2(p.x, p.y);\n\t      N1 = gN(this.a, this.e, this.sin_p12);\n\t      cosAz = Math.cos(Az);\n\t      tmp = this.e * this.cos_p12 * cosAz;\n\t      A = -tmp * tmp / (1 - this.es);\n\t      B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n\t      D = rh / N1;\n\t      Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n\t      F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n\t      psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n\t      lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n\t      lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t  }\n\n\t}\n\n\tvar names$26 = [\"Azimuthal_Equidistant\", \"aeqd\"];\n\tvar aeqd = {\n\t  init: init$25,\n\t  forward: forward$24,\n\t  inverse: inverse$24,\n\t  names: names$26\n\t};\n\n\tfunction init$26() {\n\t  //double temp;      /* temporary variable    */\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.sin_p14 = Math.sin(this.lat0);\n\t  this.cos_p14 = Math.cos(this.lat0);\n\t}\n\n\t/* Orthographic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$25(p) {\n\t  var sinphi, cosphi; /* sin and cos value        */\n\t  var dlon; /* delta longitude value      */\n\t  var coslon; /* cos of longitude        */\n\t  var ksp; /* scale factor          */\n\t  var g, x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  dlon = adjust_lon(lon - this.long0);\n\n\t  sinphi = Math.sin(lat);\n\t  cosphi = Math.cos(lat);\n\n\t  coslon = Math.cos(dlon);\n\t  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n\t  ksp = 1;\n\t  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n\t    x = this.a * ksp * cosphi * Math.sin(dlon);\n\t    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$25(p) {\n\t  var rh; /* height above ellipsoid      */\n\t  var z; /* angle          */\n\t  var sinz, cosz; /* sin of z and cos of z      */\n\t  var con;\n\t  var lon, lat;\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  z = asinz(rh / this.a);\n\n\t  sinz = Math.sin(z);\n\t  cosz = Math.cos(z);\n\n\t  lon = this.long0;\n\t  if (Math.abs(rh) <= EPSLN) {\n\t    lat = this.lat0;\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n\t  con = Math.abs(this.lat0) - HALF_PI;\n\t  if (Math.abs(con) <= EPSLN) {\n\t    if (this.lat0 >= 0) {\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n\t    }\n\t    else {\n\t      lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n\t    }\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$27 = [\"ortho\"];\n\tvar ortho = {\n\t  init: init$26,\n\t  forward: forward$25,\n\t  inverse: inverse$25,\n\t  names: names$27\n\t};\n\n\tvar includedProjections = function(proj4){\n\t  proj4.Proj.projections.add(tmerc);\n\t  proj4.Proj.projections.add(etmerc);\n\t  proj4.Proj.projections.add(utm);\n\t  proj4.Proj.projections.add(sterea);\n\t  proj4.Proj.projections.add(stere);\n\t  proj4.Proj.projections.add(somerc);\n\t  proj4.Proj.projections.add(omerc);\n\t  proj4.Proj.projections.add(lcc);\n\t  proj4.Proj.projections.add(krovak);\n\t  proj4.Proj.projections.add(cass);\n\t  proj4.Proj.projections.add(laea);\n\t  proj4.Proj.projections.add(aea);\n\t  proj4.Proj.projections.add(gnom);\n\t  proj4.Proj.projections.add(cea);\n\t  proj4.Proj.projections.add(eqc);\n\t  proj4.Proj.projections.add(poly);\n\t  proj4.Proj.projections.add(nzmg);\n\t  proj4.Proj.projections.add(mill);\n\t  proj4.Proj.projections.add(sinu);\n\t  proj4.Proj.projections.add(moll);\n\t  proj4.Proj.projections.add(eqdc);\n\t  proj4.Proj.projections.add(vandg);\n\t  proj4.Proj.projections.add(aeqd);\n\t  proj4.Proj.projections.add(ortho);\n\t};\n\n\tproj4$1.defaultDatum = 'WGS84'; //default datum\n\tproj4$1.Proj = Projection$1;\n\tproj4$1.WGS84 = new proj4$1.Proj('WGS84');\n\tproj4$1.Point = Point;\n\tproj4$1.toPoint = toPoint;\n\tproj4$1.defs = defs;\n\tproj4$1.transform = transform;\n\tproj4$1.mgrs = mgrs;\n\tproj4$1.version = version;\n\tincludedProjections(proj4$1);\n\n\treturn proj4$1;\n\n})));\n\n},{}],286:[function(require,module,exports){\nexports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n  return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n  return exports.privateDecrypt(key, buf, true)\n}\n\n},{\"./privateDecrypt\":288,\"./publicEncrypt\":289}],287:[function(require,module,exports){\nvar createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n  var t = Buffer.alloc(0)\n  var i = 0\n  var c\n  while (t.length < len) {\n    c = i2ops(i++)\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n  }\n  return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n  var out = Buffer.allocUnsafe(4)\n  out.writeUInt32BE(c, 0)\n  return out\n}\n\n},{\"create-hash\":188,\"safe-buffer\":318}],288:[function(require,module,exports){\nvar parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n  var padding\n  if (privateKey.padding) {\n    padding = privateKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n\n  var key = parseKeys(privateKey)\n  var k = key.modulus.byteLength()\n  if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error')\n  }\n  var msg\n  if (reverse) {\n    msg = withPublic(new BN(enc), key)\n  } else {\n    msg = crt(enc, key)\n  }\n  var zBuffer = Buffer.alloc(k - msg.length)\n  msg = Buffer.concat([zBuffer, msg], k)\n  if (padding === 4) {\n    return oaep(key, msg)\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    return msg\n  } else {\n    throw new Error('unknown padding')\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  if (msg[0] !== 0) {\n    throw new Error('decryption error')\n  }\n  var maskedSeed = msg.slice(1, hLen + 1)\n  var maskedDb = msg.slice(hLen + 1)\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error')\n  }\n  var i = hLen\n  while (db[i] === 0) {\n    i++\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error')\n  }\n  return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n  var p1 = msg.slice(0, 2)\n  var i = 2\n  var status = 0\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++\n      break\n    }\n  }\n  var ps = msg.slice(2, i - 1)\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n    status++\n  }\n  if (ps.length < 8) {\n    status++\n  }\n  if (status) {\n    throw new Error('decryption error')\n  }\n  return msg.slice(i)\n}\nfunction compare (a, b) {\n  a = Buffer.from(a)\n  b = Buffer.from(b)\n  var dif = 0\n  var len = a.length\n  if (a.length !== b.length) {\n    dif++\n    len = Math.min(a.length, b.length)\n  }\n  var i = -1\n  while (++i < len) {\n    dif += (a[i] ^ b[i])\n  }\n  return dif\n}\n\n},{\"./mgf\":287,\"./withPublic\":290,\"./xor\":291,\"bn.js\":147,\"browserify-rsa\":170,\"create-hash\":188,\"parse-asn1\":275,\"safe-buffer\":318}],289:[function(require,module,exports){\nvar parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n  var padding\n  if (publicKey.padding) {\n    padding = publicKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n  var key = parseKeys(publicKey)\n  var paddedMsg\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg)\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    paddedMsg = new BN(msg)\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus')\n    }\n  } else {\n    throw new Error('unknown padding')\n  }\n  if (reverse) {\n    return crt(paddedMsg, key)\n  } else {\n    return withPublic(paddedMsg, key)\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var mLen = msg.length\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  var hLen2 = 2 * hLen\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long')\n  }\n  var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n  var dblen = k - hLen - 1\n  var seed = randomBytes(hLen)\n  var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n  return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n  var mLen = msg.length\n  var k = key.modulus.byteLength()\n  if (mLen > k - 11) {\n    throw new Error('message too long')\n  }\n  var ps\n  if (reverse) {\n    ps = Buffer.alloc(k - mLen - 3, 0xff)\n  } else {\n    ps = nonZero(k - mLen - 3)\n  }\n  return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n  var out = Buffer.allocUnsafe(len)\n  var i = 0\n  var cache = randomBytes(len * 2)\n  var cur = 0\n  var num\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len * 2)\n      cur = 0\n    }\n    num = cache[cur++]\n    if (num) {\n      out[i++] = num\n    }\n  }\n  return out\n}\n\n},{\"./mgf\":287,\"./withPublic\":290,\"./xor\":291,\"bn.js\":147,\"browserify-rsa\":170,\"create-hash\":188,\"parse-asn1\":275,\"randombytes\":298,\"safe-buffer\":318}],290:[function(require,module,exports){\nvar BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n  return Buffer.from(paddedMsg\n    .toRed(BN.mont(key.modulus))\n    .redPow(new BN(key.publicExponent))\n    .fromRed()\n    .toArray())\n}\n\nmodule.exports = withPublic\n\n},{\"bn.js\":147,\"safe-buffer\":318}],291:[function(require,module,exports){\nmodule.exports = function xor (a, b) {\n  var len = a.length\n  var i = -1\n  while (++i < len) {\n    a[i] ^= b[i]\n  }\n  return a\n}\n\n},{}],292:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],293:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\n},{}],294:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n\n},{}],295:[function(require,module,exports){\n'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n\n},{\"./decode\":293,\"./encode\":294}],296:[function(require,module,exports){\nvar inherits = require('inherits')\nvar EventEmitter = require('events').EventEmitter\n\nmodule.exports = Queue\nmodule.exports.default = Queue\n\nfunction Queue (options) {\n  if (!(this instanceof Queue)) {\n    return new Queue(options)\n  }\n\n  EventEmitter.call(this)\n  options = options || {}\n  this.concurrency = options.concurrency || Infinity\n  this.timeout = options.timeout || 0\n  this.autostart = options.autostart || false\n  this.results = options.results || null\n  this.pending = 0\n  this.session = 0\n  this.running = false\n  this.jobs = []\n  this.timers = {}\n}\ninherits(Queue, EventEmitter)\n\nvar arrayMethods = [\n  'pop',\n  'shift',\n  'indexOf',\n  'lastIndexOf'\n]\n\narrayMethods.forEach(function (method) {\n  Queue.prototype[method] = function () {\n    return Array.prototype[method].apply(this.jobs, arguments)\n  }\n})\n\nQueue.prototype.slice = function (begin, end) {\n  this.jobs = this.jobs.slice(begin, end)\n  return this\n}\n\nQueue.prototype.reverse = function () {\n  this.jobs.reverse()\n  return this\n}\n\nvar arrayAddMethods = [\n  'push',\n  'unshift',\n  'splice'\n]\n\narrayAddMethods.forEach(function (method) {\n  Queue.prototype[method] = function () {\n    var methodResult = Array.prototype[method].apply(this.jobs, arguments)\n    if (this.autostart) {\n      this.start()\n    }\n    return methodResult\n  }\n})\n\nObject.defineProperty(Queue.prototype, 'length', {\n  get: function () {\n    return this.pending + this.jobs.length\n  }\n})\n\nQueue.prototype.start = function (cb) {\n  if (cb) {\n    callOnErrorOrEnd.call(this, cb)\n  }\n\n  this.running = true\n\n  if (this.pending >= this.concurrency) {\n    return\n  }\n\n  if (this.jobs.length === 0) {\n    if (this.pending === 0) {\n      done.call(this)\n    }\n    return\n  }\n\n  var self = this\n  var job = this.jobs.shift()\n  var once = true\n  var session = this.session\n  var timeoutId = null\n  var didTimeout = false\n  var resultIndex = null\n  var timeout = job.timeout || this.timeout\n\n  function next (err, result) {\n    if (once && self.session === session) {\n      once = false\n      self.pending--\n      if (timeoutId !== null) {\n        delete self.timers[timeoutId]\n        clearTimeout(timeoutId)\n      }\n\n      if (err) {\n        self.emit('error', err, job)\n      } else if (didTimeout === false) {\n        if (resultIndex !== null) {\n          self.results[resultIndex] = Array.prototype.slice.call(arguments, 1)\n        }\n        self.emit('success', result, job)\n      }\n\n      if (self.session === session) {\n        if (self.pending === 0 && self.jobs.length === 0) {\n          done.call(self)\n        } else if (self.running) {\n          self.start()\n        }\n      }\n    }\n  }\n\n  if (timeout) {\n    timeoutId = setTimeout(function () {\n      didTimeout = true\n      if (self.listeners('timeout').length > 0) {\n        self.emit('timeout', next, job)\n      } else {\n        next()\n      }\n    }, timeout)\n    this.timers[timeoutId] = timeoutId\n  }\n\n  if (this.results) {\n    resultIndex = this.results.length\n    this.results[resultIndex] = null\n  }\n\n  this.pending++\n  self.emit('start', job)\n  var promise = job(next)\n  if (promise && promise.then && typeof promise.then === 'function') {\n    promise.then(function (result) {\n      return next(null, result)\n    }).catch(function (err) {\n      return next(err || true)\n    })\n  }\n\n  if (this.running && this.jobs.length > 0) {\n    this.start()\n  }\n}\n\nQueue.prototype.stop = function () {\n  this.running = false\n}\n\nQueue.prototype.end = function (err) {\n  clearTimers.call(this)\n  this.jobs.length = 0\n  this.pending = 0\n  done.call(this, err)\n}\n\nfunction clearTimers () {\n  for (var key in this.timers) {\n    var timeoutId = this.timers[key]\n    delete this.timers[key]\n    clearTimeout(timeoutId)\n  }\n}\n\nfunction callOnErrorOrEnd (cb) {\n  var self = this\n  this.on('error', onerror)\n  this.on('end', onend)\n\n  function onerror (err) { self.end(err) }\n  function onend (err) {\n    self.removeListener('error', onerror)\n    self.removeListener('end', onend)\n    cb(err, this.results)\n  }\n}\n\nfunction done (err) {\n  this.session++\n  this.running = false\n  this.emit('end', err)\n}\n\n},{\"events\":221,\"inherits\":262}],297:[function(require,module,exports){\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.quickselect = factory());\n}(this, (function () { 'use strict';\n\nfunction quickselect(arr, k, left, right, compare) {\n    quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n    while (right > left) {\n        if (right - left > 600) {\n            var n = right - left + 1;\n            var m = k - left + 1;\n            var z = Math.log(n);\n            var s = 0.5 * Math.exp(2 * z / 3);\n            var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n            var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n            var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n            quickselectStep(arr, k, newLeft, newRight, compare);\n        }\n\n        var t = arr[k];\n        var i = left;\n        var j = right;\n\n        swap(arr, left, k);\n        if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (compare(arr[i], t) < 0) i++;\n            while (compare(arr[j], t) > 0) j--;\n        }\n\n        if (compare(arr[left], t) === 0) swap(arr, left, j);\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n\n        if (j <= k) left = j + 1;\n        if (k <= j) right = j - 1;\n    }\n}\n\nfunction swap(arr, i, j) {\n    var tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n\nreturn quickselect;\n\n})));\n\n},{}],298:[function(require,module,exports){\n(function (process,global){\n'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n  throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n  var bytes = Buffer.allocUnsafe(size)\n\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n      for (var generated = 0; generated < size; generated += MAX_BYTES) {\n        // buffer.slice automatically checks if the end is past the end of\n        // the buffer so we don't have to here\n        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n      }\n    } else {\n      crypto.getRandomValues(bytes)\n    }\n  }\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":284,\"safe-buffer\":318}],299:[function(require,module,exports){\n(function (process,global){\n'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n  if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n    throw new TypeError('offset must be a number')\n  }\n\n  if (offset > kMaxUint32 || offset < 0) {\n    throw new TypeError('offset must be a uint32')\n  }\n\n  if (offset > kBufferMaxLength || offset > length) {\n    throw new RangeError('offset out of range')\n  }\n}\n\nfunction assertSize (size, offset, length) {\n  if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n    throw new TypeError('size must be a number')\n  }\n\n  if (size > kMaxUint32 || size < 0) {\n    throw new TypeError('size must be a uint32')\n  }\n\n  if (size + offset > length || size > kBufferMaxLength) {\n    throw new RangeError('buffer too small')\n  }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n  exports.randomFill = randomFill\n  exports.randomFillSync = randomFillSync\n} else {\n  exports.randomFill = oldBrowser\n  exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  if (typeof offset === 'function') {\n    cb = offset\n    offset = 0\n    size = buf.length\n  } else if (typeof size === 'function') {\n    cb = size\n    size = buf.length - offset\n  } else if (typeof cb !== 'function') {\n    throw new TypeError('\"cb\" argument must be a function')\n  }\n  assertOffset(offset, buf.length)\n  assertSize(size, offset, buf.length)\n  return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n  if (process.browser) {\n    var ourBuf = buf.buffer\n    var uint = new Uint8Array(ourBuf, offset, size)\n    crypto.getRandomValues(uint)\n    if (cb) {\n      process.nextTick(function () {\n        cb(null, buf)\n      })\n      return\n    }\n    return buf\n  }\n  if (cb) {\n    randombytes(size, function (err, bytes) {\n      if (err) {\n        return cb(err)\n      }\n      bytes.copy(buf, offset)\n      cb(null, buf)\n    })\n    return\n  }\n  var bytes = randombytes(size)\n  bytes.copy(buf, offset)\n  return buf\n}\nfunction randomFillSync (buf, offset, size) {\n  if (typeof offset === 'undefined') {\n    offset = 0\n  }\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  assertOffset(offset, buf.length)\n\n  if (size === undefined) size = buf.length - offset\n\n  assertSize(size, offset, buf.length)\n\n  return actualFill(buf, offset, size)\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":284,\"randombytes\":298,\"safe-buffer\":318}],300:[function(require,module,exports){\n'use strict';\n\nmodule.exports = rbush;\nmodule.exports.default = rbush;\n\nvar quickselect = require('quickselect');\n\nfunction rbush(maxEntries, format) {\n    if (!(this instanceof rbush)) return new rbush(maxEntries, format);\n\n    // max entries in a node is 9 by default; min node fill is 40% for best performance\n    this._maxEntries = Math.max(4, maxEntries || 9);\n    this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n\n    if (format) {\n        this._initFormat(format);\n    }\n\n    this.clear();\n}\n\nrbush.prototype = {\n\n    all: function () {\n        return this._all(this.data, []);\n    },\n\n    search: function (bbox) {\n\n        var node = this.data,\n            result = [],\n            toBBox = this.toBBox;\n\n        if (!intersects(bbox, node)) return result;\n\n        var nodesToSearch = [],\n            i, len, child, childBBox;\n\n        while (node) {\n            for (i = 0, len = node.children.length; i < len; i++) {\n\n                child = node.children[i];\n                childBBox = node.leaf ? toBBox(child) : child;\n\n                if (intersects(bbox, childBBox)) {\n                    if (node.leaf) result.push(child);\n                    else if (contains(bbox, childBBox)) this._all(child, result);\n                    else nodesToSearch.push(child);\n                }\n            }\n            node = nodesToSearch.pop();\n        }\n\n        return result;\n    },\n\n    collides: function (bbox) {\n\n        var node = this.data,\n            toBBox = this.toBBox;\n\n        if (!intersects(bbox, node)) return false;\n\n        var nodesToSearch = [],\n            i, len, child, childBBox;\n\n        while (node) {\n            for (i = 0, len = node.children.length; i < len; i++) {\n\n                child = node.children[i];\n                childBBox = node.leaf ? toBBox(child) : child;\n\n                if (intersects(bbox, childBBox)) {\n                    if (node.leaf || contains(bbox, childBBox)) return true;\n                    nodesToSearch.push(child);\n                }\n            }\n            node = nodesToSearch.pop();\n        }\n\n        return false;\n    },\n\n    load: function (data) {\n        if (!(data && data.length)) return this;\n\n        if (data.length < this._minEntries) {\n            for (var i = 0, len = data.length; i < len; i++) {\n                this.insert(data[i]);\n            }\n            return this;\n        }\n\n        // recursively build the tree with the given data from scratch using OMT algorithm\n        var node = this._build(data.slice(), 0, data.length - 1, 0);\n\n        if (!this.data.children.length) {\n            // save as is if tree is empty\n            this.data = node;\n\n        } else if (this.data.height === node.height) {\n            // split root if trees have the same height\n            this._splitRoot(this.data, node);\n\n        } else {\n            if (this.data.height < node.height) {\n                // swap trees if inserted one is bigger\n                var tmpNode = this.data;\n                this.data = node;\n                node = tmpNode;\n            }\n\n            // insert the small tree into the large tree at appropriate level\n            this._insert(node, this.data.height - node.height - 1, true);\n        }\n\n        return this;\n    },\n\n    insert: function (item) {\n        if (item) this._insert(item, this.data.height - 1);\n        return this;\n    },\n\n    clear: function () {\n        this.data = createNode([]);\n        return this;\n    },\n\n    remove: function (item, equalsFn) {\n        if (!item) return this;\n\n        var node = this.data,\n            bbox = this.toBBox(item),\n            path = [],\n            indexes = [],\n            i, parent, index, goingUp;\n\n        // depth-first iterative tree traversal\n        while (node || path.length) {\n\n            if (!node) { // go up\n                node = path.pop();\n                parent = path[path.length - 1];\n                i = indexes.pop();\n                goingUp = true;\n            }\n\n            if (node.leaf) { // check current node\n                index = findItem(item, node.children, equalsFn);\n\n                if (index !== -1) {\n                    // item found, remove the item and condense tree upwards\n                    node.children.splice(index, 1);\n                    path.push(node);\n                    this._condense(path);\n                    return this;\n                }\n            }\n\n            if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n                path.push(node);\n                indexes.push(i);\n                i = 0;\n                parent = node;\n                node = node.children[0];\n\n            } else if (parent) { // go right\n                i++;\n                node = parent.children[i];\n                goingUp = false;\n\n            } else node = null; // nothing found\n        }\n\n        return this;\n    },\n\n    toBBox: function (item) { return item; },\n\n    compareMinX: compareNodeMinX,\n    compareMinY: compareNodeMinY,\n\n    toJSON: function () { return this.data; },\n\n    fromJSON: function (data) {\n        this.data = data;\n        return this;\n    },\n\n    _all: function (node, result) {\n        var nodesToSearch = [];\n        while (node) {\n            if (node.leaf) result.push.apply(result, node.children);\n            else nodesToSearch.push.apply(nodesToSearch, node.children);\n\n            node = nodesToSearch.pop();\n        }\n        return result;\n    },\n\n    _build: function (items, left, right, height) {\n\n        var N = right - left + 1,\n            M = this._maxEntries,\n            node;\n\n        if (N <= M) {\n            // reached leaf level; return leaf\n            node = createNode(items.slice(left, right + 1));\n            calcBBox(node, this.toBBox);\n            return node;\n        }\n\n        if (!height) {\n            // target height of the bulk-loaded tree\n            height = Math.ceil(Math.log(N) / Math.log(M));\n\n            // target number of root entries to maximize storage utilization\n            M = Math.ceil(N / Math.pow(M, height - 1));\n        }\n\n        node = createNode([]);\n        node.leaf = false;\n        node.height = height;\n\n        // split the items into M mostly square tiles\n\n        var N2 = Math.ceil(N / M),\n            N1 = N2 * Math.ceil(Math.sqrt(M)),\n            i, j, right2, right3;\n\n        multiSelect(items, left, right, N1, this.compareMinX);\n\n        for (i = left; i <= right; i += N1) {\n\n            right2 = Math.min(i + N1 - 1, right);\n\n            multiSelect(items, i, right2, N2, this.compareMinY);\n\n            for (j = i; j <= right2; j += N2) {\n\n                right3 = Math.min(j + N2 - 1, right2);\n\n                // pack each entry recursively\n                node.children.push(this._build(items, j, right3, height - 1));\n            }\n        }\n\n        calcBBox(node, this.toBBox);\n\n        return node;\n    },\n\n    _chooseSubtree: function (bbox, node, level, path) {\n\n        var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;\n\n        while (true) {\n            path.push(node);\n\n            if (node.leaf || path.length - 1 === level) break;\n\n            minArea = minEnlargement = Infinity;\n\n            for (i = 0, len = node.children.length; i < len; i++) {\n                child = node.children[i];\n                area = bboxArea(child);\n                enlargement = enlargedArea(bbox, child) - area;\n\n                // choose entry with the least area enlargement\n                if (enlargement < minEnlargement) {\n                    minEnlargement = enlargement;\n                    minArea = area < minArea ? area : minArea;\n                    targetNode = child;\n\n                } else if (enlargement === minEnlargement) {\n                    // otherwise choose one with the smallest area\n                    if (area < minArea) {\n                        minArea = area;\n                        targetNode = child;\n                    }\n                }\n            }\n\n            node = targetNode || node.children[0];\n        }\n\n        return node;\n    },\n\n    _insert: function (item, level, isNode) {\n\n        var toBBox = this.toBBox,\n            bbox = isNode ? item : toBBox(item),\n            insertPath = [];\n\n        // find the best node for accommodating the item, saving all nodes along the path too\n        var node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n        // put the item into the node\n        node.children.push(item);\n        extend(node, bbox);\n\n        // split on node overflow; propagate upwards if necessary\n        while (level >= 0) {\n            if (insertPath[level].children.length > this._maxEntries) {\n                this._split(insertPath, level);\n                level--;\n            } else break;\n        }\n\n        // adjust bboxes along the insertion path\n        this._adjustParentBBoxes(bbox, insertPath, level);\n    },\n\n    // split overflowed node into two\n    _split: function (insertPath, level) {\n\n        var node = insertPath[level],\n            M = node.children.length,\n            m = this._minEntries;\n\n        this._chooseSplitAxis(node, m, M);\n\n        var splitIndex = this._chooseSplitIndex(node, m, M);\n\n        var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n        newNode.height = node.height;\n        newNode.leaf = node.leaf;\n\n        calcBBox(node, this.toBBox);\n        calcBBox(newNode, this.toBBox);\n\n        if (level) insertPath[level - 1].children.push(newNode);\n        else this._splitRoot(node, newNode);\n    },\n\n    _splitRoot: function (node, newNode) {\n        // split root node\n        this.data = createNode([node, newNode]);\n        this.data.height = node.height + 1;\n        this.data.leaf = false;\n        calcBBox(this.data, this.toBBox);\n    },\n\n    _chooseSplitIndex: function (node, m, M) {\n\n        var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;\n\n        minOverlap = minArea = Infinity;\n\n        for (i = m; i <= M - m; i++) {\n            bbox1 = distBBox(node, 0, i, this.toBBox);\n            bbox2 = distBBox(node, i, M, this.toBBox);\n\n            overlap = intersectionArea(bbox1, bbox2);\n            area = bboxArea(bbox1) + bboxArea(bbox2);\n\n            // choose distribution with minimum overlap\n            if (overlap < minOverlap) {\n                minOverlap = overlap;\n                index = i;\n\n                minArea = area < minArea ? area : minArea;\n\n            } else if (overlap === minOverlap) {\n                // otherwise choose distribution with minimum area\n                if (area < minArea) {\n                    minArea = area;\n                    index = i;\n                }\n            }\n        }\n\n        return index;\n    },\n\n    // sorts node children by the best axis for split\n    _chooseSplitAxis: function (node, m, M) {\n\n        var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,\n            compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,\n            xMargin = this._allDistMargin(node, m, M, compareMinX),\n            yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n        // if total distributions margin value is minimal for x, sort by minX,\n        // otherwise it's already sorted by minY\n        if (xMargin < yMargin) node.children.sort(compareMinX);\n    },\n\n    // total margin of all possible split distributions where each node is at least m full\n    _allDistMargin: function (node, m, M, compare) {\n\n        node.children.sort(compare);\n\n        var toBBox = this.toBBox,\n            leftBBox = distBBox(node, 0, m, toBBox),\n            rightBBox = distBBox(node, M - m, M, toBBox),\n            margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),\n            i, child;\n\n        for (i = m; i < M - m; i++) {\n            child = node.children[i];\n            extend(leftBBox, node.leaf ? toBBox(child) : child);\n            margin += bboxMargin(leftBBox);\n        }\n\n        for (i = M - m - 1; i >= m; i--) {\n            child = node.children[i];\n            extend(rightBBox, node.leaf ? toBBox(child) : child);\n            margin += bboxMargin(rightBBox);\n        }\n\n        return margin;\n    },\n\n    _adjustParentBBoxes: function (bbox, path, level) {\n        // adjust bboxes along the given tree path\n        for (var i = level; i >= 0; i--) {\n            extend(path[i], bbox);\n        }\n    },\n\n    _condense: function (path) {\n        // go through the path, removing empty nodes and updating bboxes\n        for (var i = path.length - 1, siblings; i >= 0; i--) {\n            if (path[i].children.length === 0) {\n                if (i > 0) {\n                    siblings = path[i - 1].children;\n                    siblings.splice(siblings.indexOf(path[i]), 1);\n\n                } else this.clear();\n\n            } else calcBBox(path[i], this.toBBox);\n        }\n    },\n\n    _initFormat: function (format) {\n        // data format (minX, minY, maxX, maxY accessors)\n\n        // uses eval-type function compilation instead of just accepting a toBBox function\n        // because the algorithms are very sensitive to sorting functions performance,\n        // so they should be dead simple and without inner calls\n\n        var compareArr = ['return a', ' - b', ';'];\n\n        this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));\n        this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));\n\n        this.toBBox = new Function('a',\n            'return {minX: a' + format[0] +\n            ', minY: a' + format[1] +\n            ', maxX: a' + format[2] +\n            ', maxY: a' + format[3] + '};');\n    }\n};\n\nfunction findItem(item, items, equalsFn) {\n    if (!equalsFn) return items.indexOf(item);\n\n    for (var i = 0; i < items.length; i++) {\n        if (equalsFn(item, items[i])) return i;\n    }\n    return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n    distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n    if (!destNode) destNode = createNode(null);\n    destNode.minX = Infinity;\n    destNode.minY = Infinity;\n    destNode.maxX = -Infinity;\n    destNode.maxY = -Infinity;\n\n    for (var i = k, child; i < p; i++) {\n        child = node.children[i];\n        extend(destNode, node.leaf ? toBBox(child) : child);\n    }\n\n    return destNode;\n}\n\nfunction extend(a, b) {\n    a.minX = Math.min(a.minX, b.minX);\n    a.minY = Math.min(a.minY, b.minY);\n    a.maxX = Math.max(a.maxX, b.maxX);\n    a.maxY = Math.max(a.maxY, b.maxY);\n    return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n    return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n           (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n    var minX = Math.max(a.minX, b.minX),\n        minY = Math.max(a.minY, b.minY),\n        maxX = Math.min(a.maxX, b.maxX),\n        maxY = Math.min(a.maxY, b.maxY);\n\n    return Math.max(0, maxX - minX) *\n           Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n    return a.minX <= b.minX &&\n           a.minY <= b.minY &&\n           b.maxX <= a.maxX &&\n           b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n    return b.minX <= a.maxX &&\n           b.minY <= a.maxY &&\n           b.maxX >= a.minX &&\n           b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n    return {\n        children: children,\n        height: 1,\n        leaf: true,\n        minX: Infinity,\n        minY: Infinity,\n        maxX: -Infinity,\n        maxY: -Infinity\n    };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n    var stack = [left, right],\n        mid;\n\n    while (stack.length) {\n        right = stack.pop();\n        left = stack.pop();\n\n        if (right - left <= n) continue;\n\n        mid = left + Math.ceil((right - left) / n / 2) * n;\n        quickselect(arr, mid, left, right, compare);\n\n        stack.push(left, mid, mid, right);\n    }\n}\n\n},{\"quickselect\":297}],301:[function(require,module,exports){\nmodule.exports = require('./lib/_stream_duplex.js');\n\n},{\"./lib/_stream_duplex.js\":302}],302:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};\n},{\"./_stream_readable\":304,\"./_stream_writable\":306,\"core-util-is\":186,\"inherits\":262,\"process-nextick-args\":283}],303:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};\n},{\"./_stream_transform\":305,\"core-util-is\":186,\"inherits\":262}],304:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, unpipeInfo);\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./_stream_duplex\":302,\"./internal/streams/BufferList\":307,\"./internal/streams/destroy\":308,\"./internal/streams/stream\":309,\"_process\":284,\"core-util-is\":186,\"events\":221,\"inherits\":262,\"isarray\":264,\"process-nextick-args\":283,\"safe-buffer\":310,\"string_decoder/\":333,\"util\":149}],305:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}\n},{\"./_stream_duplex\":302,\"core-util-is\":186,\"inherits\":262}],306:[function(require,module,exports){\n(function (process,global,setImmediate){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n  if (state.corkedRequestsFree) {\n    state.corkedRequestsFree.next = corkReq;\n  } else {\n    state.corkedRequestsFree = corkReq;\n  }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {},require(\"timers\").setImmediate)\n},{\"./_stream_duplex\":302,\"./internal/streams/destroy\":308,\"./internal/streams/stream\":309,\"_process\":284,\"core-util-is\":186,\"inherits\":262,\"process-nextick-args\":283,\"safe-buffer\":310,\"timers\":335,\"util-deprecate\":340}],307:[function(require,module,exports){\n'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    if (this.length === 1) return this.head.data;\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}\n},{\"safe-buffer\":310,\"util\":149}],308:[function(require,module,exports){\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n      pna.nextTick(emitErrorNT, this, err);\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      pna.nextTick(emitErrorNT, _this, err);\n      if (_this._writableState) {\n        _this._writableState.errorEmitted = true;\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};\n},{\"process-nextick-args\":283}],309:[function(require,module,exports){\nmodule.exports = require('events').EventEmitter;\n\n},{\"events\":221}],310:[function(require,module,exports){\narguments[4][178][0].apply(exports,arguments)\n},{\"buffer\":182,\"dup\":178}],311:[function(require,module,exports){\nmodule.exports = require('./readable').PassThrough\n\n},{\"./readable\":312}],312:[function(require,module,exports){\nexports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n\n},{\"./lib/_stream_duplex.js\":302,\"./lib/_stream_passthrough.js\":303,\"./lib/_stream_readable.js\":304,\"./lib/_stream_transform.js\":305,\"./lib/_stream_writable.js\":306}],313:[function(require,module,exports){\nmodule.exports = require('./readable').Transform\n\n},{\"./readable\":312}],314:[function(require,module,exports){\nmodule.exports = require('./lib/_stream_writable.js');\n\n},{\"./lib/_stream_writable.js\":306}],315:[function(require,module,exports){\n'use strict';\n\nvar proj4 = require('proj4').hasOwnProperty('default') ? require('proj4').default : require('proj4');\n// Checks if `list` looks like a `[x, y]`.\nfunction isXY(list) {\n  return list.length >= 2 &&\n    typeof list[0] === 'number' &&\n    typeof list[1] === 'number';\n}\n\nfunction traverseCoords(coordinates, callback) {\n  if (isXY(coordinates)) return callback(coordinates);\n  return coordinates.map(function(coord){return traverseCoords(coord, callback);});\n}\n\n// Simplistic shallow clone that will work for a normal GeoJSON object.\nfunction clone(obj) {\n  if (null == obj || 'object' !== typeof obj) return obj;\n  var copy = obj.constructor();\n  for (var attr in obj) {\n    if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];\n  }\n  return copy;\n}\n\nfunction traverseGeoJson(geometryCb, nodeCb, geojson) {\n  if (geojson == null) return geojson;\n\n  var r = clone(geojson);\n  var self = traverseGeoJson.bind(this, geometryCb, nodeCb);\n\n  switch (geojson.type) {\n  case 'Feature':\n    r.geometry = self(geojson.geometry);\n    break;\n  case 'FeatureCollection':\n    r.features = r.features.map(self);\n    break;\n  case 'GeometryCollection':\n    r.geometries = r.geometries.map(self);\n    break;\n  default:\n    geometryCb(r);\n    break;\n  }\n\n  if (nodeCb) nodeCb(r);\n\n  return r;\n}\n\nfunction detectCrs(geojson, projs) {\n  var crsInfo = geojson.crs,\n      crs;\n\n  if (crsInfo === undefined) {\n    throw new Error('Unable to detect CRS, GeoJSON has no \"crs\" property.');\n  }\n\n  if (crsInfo.type === 'name') {\n    crs = projs[crsInfo.properties.name];\n  } else if (crsInfo.type === 'EPSG') {\n    crs = projs['EPSG:' + crsInfo.properties.code];\n  }\n\n  if (!crs) {\n    throw new Error('CRS defined in crs section could not be identified: ' + JSON.stringify(crsInfo));\n  }\n\n  return crs;\n}\n\nfunction determineCrs(crs, projs) {\n  if (typeof crs === 'string' || crs instanceof String) {\n    return projs[crs] || proj4.Proj(crs);\n  }\n\n  return crs;\n}\n\nfunction calcBbox(geojson) {\n  var min = [Number.MAX_VALUE, Number.MAX_VALUE],\n      max = [-Number.MAX_VALUE, -Number.MAX_VALUE];\n  traverseGeoJson(function(_gj) {\n    traverseCoords(_gj.coordinates, function(xy) {\n      min[0] = Math.min(min[0], xy[0]);\n      min[1] = Math.min(min[1], xy[1]);\n      max[0] = Math.max(max[0], xy[0]);\n      max[1] = Math.max(max[1], xy[1]);\n    });\n  }, null, geojson);\n  return [min[0], min[1], max[0], max[1]];\n}\n\nfunction reproject(geojson, from, to, projs) {\n  projs = projs || {};\n  if (!from) {\n    from = detectCrs(geojson, projs);\n  } else {\n    from = determineCrs(from, projs);\n  }\n\n  to = determineCrs(to, projs);\n  var transform = proj4(from, to).forward.bind(transform);\n\n  var transformGeometryCoords = function(gj) {\n    // No easy way to put correct CRS info into the GeoJSON,\n    // and definitely wrong to keep the old, so delete it.\n    if (gj.crs) {\n      delete gj.crs;\n    }\n    gj.coordinates = traverseCoords(gj.coordinates, transform);\n  }\n\n  var transformBbox = function(gj) {\n    if (gj.bbox) {\n      gj.bbox = calcBbox(gj);\n    }\n  }\n\n  return traverseGeoJson(transformGeometryCoords, transformBbox, geojson);\n}\n\nmodule.exports = {\n  detectCrs: detectCrs,\n\n  reproject: reproject,\n\n  reverse: function(geojson) {\n    return traverseGeoJson(function(gj) {\n      gj.coordinates = traverseCoords(gj.coordinates, function(xy) {\n        return [ xy[1], xy[0] ];\n      });\n    }, null, geojson);\n  },\n\n  toWgs84: function(geojson, from, projs) {\n    return reproject(geojson, from, proj4.WGS84, projs);\n  }\n};\n\n},{\"proj4\":316}],316:[function(require,module,exports){\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.proj4 = factory());\n}(this, (function () { 'use strict';\n\n\tvar globals = function(defs) {\n\t  defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n\t  defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n\t  defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n\t  defs.WGS84 = defs['EPSG:4326'];\n\t  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n\t  defs.GOOGLE = defs['EPSG:3857'];\n\t  defs['EPSG:900913'] = defs['EPSG:3857'];\n\t  defs['EPSG:102113'] = defs['EPSG:3857'];\n\t};\n\n\tvar PJD_3PARAM = 1;\n\tvar PJD_7PARAM = 2;\n\tvar PJD_WGS84 = 4; // WGS84 or equivalent\n\tvar PJD_NODATUM = 5; // WGS84 or equivalent\n\tvar SEC_TO_RAD = 4.84813681109535993589914102357e-6;\n\tvar HALF_PI = Math.PI/2;\n\t// ellipoid pj_set_ell.c\n\tvar SIXTH = 0.1666666666666666667;\n\t/* 1/6 */\n\tvar RA4 = 0.04722222222222222222;\n\t/* 17/360 */\n\tvar RA6 = 0.02215608465608465608;\n\tvar EPSLN = 1.0e-10;\n\t// you'd think you could use Number.EPSILON above but that makes\n\t// Mollweide get into an infinate loop.\n\n\tvar D2R = 0.01745329251994329577;\n\tvar R2D = 57.29577951308232088;\n\tvar FORTPI = Math.PI/4;\n\tvar TWO_PI = Math.PI * 2;\n\t// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n\t// degree range by a tiny amount don't get wrapped. This prevents points that\n\t// have drifted from their original location along the 180th meridian (due to\n\t// floating point error) from changing their sign.\n\tvar SPI = 3.14159265359;\n\n\tvar exports$1 = {};\n\texports$1.greenwich = 0.0; //\"0dE\",\n\texports$1.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\n\texports$1.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\n\texports$1.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\n\texports$1.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\n\texports$1.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\n\texports$1.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\n\texports$1.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\n\texports$1.ferro = -17.666666666667; //\"17d40'W\",\n\texports$1.brussels = 4.367975; //\"4d22'4.71\\\"E\",\n\texports$1.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\n\texports$1.athens = 23.7163375; //\"23d42'58.815\\\"E\",\n\texports$1.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n\n\tvar units = {\n\t  ft: {to_meter: 0.3048},\n\t  'us-ft': {to_meter: 1200 / 3937}\n\t};\n\n\tvar ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\n\tfunction match(obj, key) {\n\t  if (obj[key]) {\n\t    return obj[key];\n\t  }\n\t  var keys = Object.keys(obj);\n\t  var lkey = key.toLowerCase().replace(ignoredChar, '');\n\t  var i = -1;\n\t  var testkey, processedKey;\n\t  while (++i < keys.length) {\n\t    testkey = keys[i];\n\t    processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n\t    if (processedKey === lkey) {\n\t      return obj[testkey];\n\t    }\n\t  }\n\t}\n\n\tvar parseProj = function(defData) {\n\t  var self = {};\n\t  var paramObj = defData.split('+').map(function(v) {\n\t    return v.trim();\n\t  }).filter(function(a) {\n\t    return a;\n\t  }).reduce(function(p, a) {\n\t    var split = a.split('=');\n\t    split.push(true);\n\t    p[split[0].toLowerCase()] = split[1];\n\t    return p;\n\t  }, {});\n\t  var paramName, paramVal, paramOutname;\n\t  var params = {\n\t    proj: 'projName',\n\t    datum: 'datumCode',\n\t    rf: function(v) {\n\t      self.rf = parseFloat(v);\n\t    },\n\t    lat_0: function(v) {\n\t      self.lat0 = v * D2R;\n\t    },\n\t    lat_1: function(v) {\n\t      self.lat1 = v * D2R;\n\t    },\n\t    lat_2: function(v) {\n\t      self.lat2 = v * D2R;\n\t    },\n\t    lat_ts: function(v) {\n\t      self.lat_ts = v * D2R;\n\t    },\n\t    lon_0: function(v) {\n\t      self.long0 = v * D2R;\n\t    },\n\t    lon_1: function(v) {\n\t      self.long1 = v * D2R;\n\t    },\n\t    lon_2: function(v) {\n\t      self.long2 = v * D2R;\n\t    },\n\t    alpha: function(v) {\n\t      self.alpha = parseFloat(v) * D2R;\n\t    },\n\t    lonc: function(v) {\n\t      self.longc = v * D2R;\n\t    },\n\t    x_0: function(v) {\n\t      self.x0 = parseFloat(v);\n\t    },\n\t    y_0: function(v) {\n\t      self.y0 = parseFloat(v);\n\t    },\n\t    k_0: function(v) {\n\t      self.k0 = parseFloat(v);\n\t    },\n\t    k: function(v) {\n\t      self.k0 = parseFloat(v);\n\t    },\n\t    a: function(v) {\n\t      self.a = parseFloat(v);\n\t    },\n\t    b: function(v) {\n\t      self.b = parseFloat(v);\n\t    },\n\t    r_a: function() {\n\t      self.R_A = true;\n\t    },\n\t    zone: function(v) {\n\t      self.zone = parseInt(v, 10);\n\t    },\n\t    south: function() {\n\t      self.utmSouth = true;\n\t    },\n\t    towgs84: function(v) {\n\t      self.datum_params = v.split(\",\").map(function(a) {\n\t        return parseFloat(a);\n\t      });\n\t    },\n\t    to_meter: function(v) {\n\t      self.to_meter = parseFloat(v);\n\t    },\n\t    units: function(v) {\n\t      self.units = v;\n\t      var unit = match(units, v);\n\t      if (unit) {\n\t        self.to_meter = unit.to_meter;\n\t      }\n\t    },\n\t    from_greenwich: function(v) {\n\t      self.from_greenwich = v * D2R;\n\t    },\n\t    pm: function(v) {\n\t      var pm = match(exports$1, v);\n\t      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n\t    },\n\t    nadgrids: function(v) {\n\t      if (v === '@null') {\n\t        self.datumCode = 'none';\n\t      }\n\t      else {\n\t        self.nadgrids = v;\n\t      }\n\t    },\n\t    axis: function(v) {\n\t      var legalAxis = \"ewnsud\";\n\t      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n\t        self.axis = v;\n\t      }\n\t    }\n\t  };\n\t  for (paramName in paramObj) {\n\t    paramVal = paramObj[paramName];\n\t    if (paramName in params) {\n\t      paramOutname = params[paramName];\n\t      if (typeof paramOutname === 'function') {\n\t        paramOutname(paramVal);\n\t      }\n\t      else {\n\t        self[paramOutname] = paramVal;\n\t      }\n\t    }\n\t    else {\n\t      self[paramName] = paramVal;\n\t    }\n\t  }\n\t  if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n\t    self.datumCode = self.datumCode.toLowerCase();\n\t  }\n\t  return self;\n\t};\n\n\tvar NEUTRAL = 1;\n\tvar KEYWORD = 2;\n\tvar NUMBER = 3;\n\tvar QUOTED = 4;\n\tvar AFTERQUOTE = 5;\n\tvar ENDED = -1;\n\tvar whitespace = /\\s/;\n\tvar latin = /[A-Za-z]/;\n\tvar keyword = /[A-Za-z84]/;\n\tvar endThings = /[,\\]]/;\n\tvar digets = /[\\d\\.E\\-\\+]/;\n\t// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\n\tfunction Parser(text) {\n\t  if (typeof text !== 'string') {\n\t    throw new Error('not a string');\n\t  }\n\t  this.text = text.trim();\n\t  this.level = 0;\n\t  this.place = 0;\n\t  this.root = null;\n\t  this.stack = [];\n\t  this.currentObject = null;\n\t  this.state = NEUTRAL;\n\t}\n\tParser.prototype.readCharicter = function() {\n\t  var char = this.text[this.place++];\n\t  if (this.state !== QUOTED) {\n\t    while (whitespace.test(char)) {\n\t      if (this.place >= this.text.length) {\n\t        return;\n\t      }\n\t      char = this.text[this.place++];\n\t    }\n\t  }\n\t  switch (this.state) {\n\t    case NEUTRAL:\n\t      return this.neutral(char);\n\t    case KEYWORD:\n\t      return this.keyword(char)\n\t    case QUOTED:\n\t      return this.quoted(char);\n\t    case AFTERQUOTE:\n\t      return this.afterquote(char);\n\t    case NUMBER:\n\t      return this.number(char);\n\t    case ENDED:\n\t      return;\n\t  }\n\t};\n\tParser.prototype.afterquote = function(char) {\n\t  if (char === '\"') {\n\t    this.word += '\"';\n\t    this.state = QUOTED;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.word = this.word.trim();\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n\t};\n\tParser.prototype.afterItem = function(char) {\n\t  if (char === ',') {\n\t    if (this.word !== null) {\n\t      this.currentObject.push(this.word);\n\t    }\n\t    this.word = null;\n\t    this.state = NEUTRAL;\n\t    return;\n\t  }\n\t  if (char === ']') {\n\t    this.level--;\n\t    if (this.word !== null) {\n\t      this.currentObject.push(this.word);\n\t      this.word = null;\n\t    }\n\t    this.state = NEUTRAL;\n\t    this.currentObject = this.stack.pop();\n\t    if (!this.currentObject) {\n\t      this.state = ENDED;\n\t    }\n\n\t    return;\n\t  }\n\t};\n\tParser.prototype.number = function(char) {\n\t  if (digets.test(char)) {\n\t    this.word += char;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.word = parseFloat(this.word);\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n\t};\n\tParser.prototype.quoted = function(char) {\n\t  if (char === '\"') {\n\t    this.state = AFTERQUOTE;\n\t    return;\n\t  }\n\t  this.word += char;\n\t  return;\n\t};\n\tParser.prototype.keyword = function(char) {\n\t  if (keyword.test(char)) {\n\t    this.word += char;\n\t    return;\n\t  }\n\t  if (char === '[') {\n\t    var newObjects = [];\n\t    newObjects.push(this.word);\n\t    this.level++;\n\t    if (this.root === null) {\n\t      this.root = newObjects;\n\t    } else {\n\t      this.currentObject.push(newObjects);\n\t    }\n\t    this.stack.push(this.currentObject);\n\t    this.currentObject = newObjects;\n\t    this.state = NEUTRAL;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n\t};\n\tParser.prototype.neutral = function(char) {\n\t  if (latin.test(char)) {\n\t    this.word = char;\n\t    this.state = KEYWORD;\n\t    return;\n\t  }\n\t  if (char === '\"') {\n\t    this.word = '';\n\t    this.state = QUOTED;\n\t    return;\n\t  }\n\t  if (digets.test(char)) {\n\t    this.word = char;\n\t    this.state = NUMBER;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n\t};\n\tParser.prototype.output = function() {\n\t  while (this.place < this.text.length) {\n\t    this.readCharicter();\n\t  }\n\t  if (this.state === ENDED) {\n\t    return this.root;\n\t  }\n\t  throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n\t};\n\n\tfunction parseString(txt) {\n\t  var parser = new Parser(txt);\n\t  return parser.output();\n\t}\n\n\tfunction mapit(obj, key, value) {\n\t  if (Array.isArray(key)) {\n\t    value.unshift(key);\n\t    key = null;\n\t  }\n\t  var thing = key ? {} : obj;\n\n\t  var out = value.reduce(function(newObj, item) {\n\t    sExpr(item, newObj);\n\t    return newObj\n\t  }, thing);\n\t  if (key) {\n\t    obj[key] = out;\n\t  }\n\t}\n\n\tfunction sExpr(v, obj) {\n\t  if (!Array.isArray(v)) {\n\t    obj[v] = true;\n\t    return;\n\t  }\n\t  var key = v.shift();\n\t  if (key === 'PARAMETER') {\n\t    key = v.shift();\n\t  }\n\t  if (v.length === 1) {\n\t    if (Array.isArray(v[0])) {\n\t      obj[key] = {};\n\t      sExpr(v[0], obj[key]);\n\t      return;\n\t    }\n\t    obj[key] = v[0];\n\t    return;\n\t  }\n\t  if (!v.length) {\n\t    obj[key] = true;\n\t    return;\n\t  }\n\t  if (key === 'TOWGS84') {\n\t    obj[key] = v;\n\t    return;\n\t  }\n\t  if (!Array.isArray(key)) {\n\t    obj[key] = {};\n\t  }\n\n\t  var i;\n\t  switch (key) {\n\t    case 'UNIT':\n\t    case 'PRIMEM':\n\t    case 'VERT_DATUM':\n\t      obj[key] = {\n\t        name: v[0].toLowerCase(),\n\t        convert: v[1]\n\t      };\n\t      if (v.length === 3) {\n\t        sExpr(v[2], obj[key]);\n\t      }\n\t      return;\n\t    case 'SPHEROID':\n\t    case 'ELLIPSOID':\n\t      obj[key] = {\n\t        name: v[0],\n\t        a: v[1],\n\t        rf: v[2]\n\t      };\n\t      if (v.length === 4) {\n\t        sExpr(v[3], obj[key]);\n\t      }\n\t      return;\n\t    case 'PROJECTEDCRS':\n\t    case 'PROJCRS':\n\t    case 'GEOGCS':\n\t    case 'GEOCCS':\n\t    case 'PROJCS':\n\t    case 'LOCAL_CS':\n\t    case 'GEODCRS':\n\t    case 'GEODETICCRS':\n\t    case 'GEODETICDATUM':\n\t    case 'EDATUM':\n\t    case 'ENGINEERINGDATUM':\n\t    case 'VERT_CS':\n\t    case 'VERTCRS':\n\t    case 'VERTICALCRS':\n\t    case 'COMPD_CS':\n\t    case 'COMPOUNDCRS':\n\t    case 'ENGINEERINGCRS':\n\t    case 'ENGCRS':\n\t    case 'FITTED_CS':\n\t    case 'LOCAL_DATUM':\n\t    case 'DATUM':\n\t      v[0] = ['name', v[0]];\n\t      mapit(obj, key, v);\n\t      return;\n\t    default:\n\t      i = -1;\n\t      while (++i < v.length) {\n\t        if (!Array.isArray(v[i])) {\n\t          return sExpr(v, obj[key]);\n\t        }\n\t      }\n\t      return mapit(obj, key, v);\n\t  }\n\t}\n\n\tvar D2R$1 = 0.01745329251994329577;\n\tfunction rename(obj, params) {\n\t  var outName = params[0];\n\t  var inName = params[1];\n\t  if (!(outName in obj) && (inName in obj)) {\n\t    obj[outName] = obj[inName];\n\t    if (params.length === 3) {\n\t      obj[outName] = params[2](obj[outName]);\n\t    }\n\t  }\n\t}\n\n\tfunction d2r(input) {\n\t  return input * D2R$1;\n\t}\n\n\tfunction cleanWKT(wkt) {\n\t  if (wkt.type === 'GEOGCS') {\n\t    wkt.projName = 'longlat';\n\t  } else if (wkt.type === 'LOCAL_CS') {\n\t    wkt.projName = 'identity';\n\t    wkt.local = true;\n\t  } else {\n\t    if (typeof wkt.PROJECTION === 'object') {\n\t      wkt.projName = Object.keys(wkt.PROJECTION)[0];\n\t    } else {\n\t      wkt.projName = wkt.PROJECTION;\n\t    }\n\t  }\n\t  if (wkt.UNIT) {\n\t    wkt.units = wkt.UNIT.name.toLowerCase();\n\t    if (wkt.units === 'metre') {\n\t      wkt.units = 'meter';\n\t    }\n\t    if (wkt.UNIT.convert) {\n\t      if (wkt.type === 'GEOGCS') {\n\t        if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n\t          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n\t        }\n\t      } else {\n\t        wkt.to_meter = wkt.UNIT.convert, 10;\n\t      }\n\t    }\n\t  }\n\t  var geogcs = wkt.GEOGCS;\n\t  if (wkt.type === 'GEOGCS') {\n\t    geogcs = wkt;\n\t  }\n\t  if (geogcs) {\n\t    //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n\t    //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n\t    //}\n\t    if (geogcs.DATUM) {\n\t      wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n\t    } else {\n\t      wkt.datumCode = geogcs.name.toLowerCase();\n\t    }\n\t    if (wkt.datumCode.slice(0, 2) === 'd_') {\n\t      wkt.datumCode = wkt.datumCode.slice(2);\n\t    }\n\t    if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n\t      wkt.datumCode = 'nzgd49';\n\t    }\n\t    if (wkt.datumCode === 'wgs_1984') {\n\t      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n\t        wkt.sphere = true;\n\t      }\n\t      wkt.datumCode = 'wgs84';\n\t    }\n\t    if (wkt.datumCode.slice(-6) === '_ferro') {\n\t      wkt.datumCode = wkt.datumCode.slice(0, - 6);\n\t    }\n\t    if (wkt.datumCode.slice(-8) === '_jakarta') {\n\t      wkt.datumCode = wkt.datumCode.slice(0, - 8);\n\t    }\n\t    if (~wkt.datumCode.indexOf('belge')) {\n\t      wkt.datumCode = 'rnb72';\n\t    }\n\t    if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n\t      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n\t      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n\t        wkt.ellps = 'intl';\n\t      }\n\n\t      wkt.a = geogcs.DATUM.SPHEROID.a;\n\t      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n\t    }\n\n\t    if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n\t      wkt.datum_params = geogcs.DATUM.TOWGS84;\n\t    }\n\t    if (~wkt.datumCode.indexOf('osgb_1936')) {\n\t      wkt.datumCode = 'osgb36';\n\t    }\n\t    if (~wkt.datumCode.indexOf('osni_1952')) {\n\t      wkt.datumCode = 'osni52';\n\t    }\n\t    if (~wkt.datumCode.indexOf('tm65')\n\t      || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n\t      wkt.datumCode = 'ire65';\n\t    }\n\t    if (wkt.datumCode === 'ch1903+') {\n\t      wkt.datumCode = 'ch1903';\n\t    }\n\t    if (~wkt.datumCode.indexOf('israel')) {\n\t      wkt.datumCode = 'isr93';\n\t    }\n\t  }\n\t  if (wkt.b && !isFinite(wkt.b)) {\n\t    wkt.b = wkt.a;\n\t  }\n\n\t  function toMeter(input) {\n\t    var ratio = wkt.to_meter || 1;\n\t    return input * ratio;\n\t  }\n\t  var renamer = function(a) {\n\t    return rename(wkt, a);\n\t  };\n\t  var list = [\n\t    ['standard_parallel_1', 'Standard_Parallel_1'],\n\t    ['standard_parallel_2', 'Standard_Parallel_2'],\n\t    ['false_easting', 'False_Easting'],\n\t    ['false_northing', 'False_Northing'],\n\t    ['central_meridian', 'Central_Meridian'],\n\t    ['latitude_of_origin', 'Latitude_Of_Origin'],\n\t    ['latitude_of_origin', 'Central_Parallel'],\n\t    ['scale_factor', 'Scale_Factor'],\n\t    ['k0', 'scale_factor'],\n\t    ['latitude_of_center', 'Latitude_Of_Center'],\n\t    ['latitude_of_center', 'Latitude_of_center'],\n\t    ['lat0', 'latitude_of_center', d2r],\n\t    ['longitude_of_center', 'Longitude_Of_Center'],\n\t    ['longitude_of_center', 'Longitude_of_center'],\n\t    ['longc', 'longitude_of_center', d2r],\n\t    ['x0', 'false_easting', toMeter],\n\t    ['y0', 'false_northing', toMeter],\n\t    ['long0', 'central_meridian', d2r],\n\t    ['lat0', 'latitude_of_origin', d2r],\n\t    ['lat0', 'standard_parallel_1', d2r],\n\t    ['lat1', 'standard_parallel_1', d2r],\n\t    ['lat2', 'standard_parallel_2', d2r],\n\t    ['azimuth', 'Azimuth'],\n\t    ['alpha', 'azimuth', d2r],\n\t    ['srsCode', 'name']\n\t  ];\n\t  list.forEach(renamer);\n\t  if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n\t    wkt.long0 = wkt.longc;\n\t  }\n\t  if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n\t    wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n\t    wkt.lat_ts = wkt.lat1;\n\t  }\n\t}\n\tvar wkt = function(wkt) {\n\t  var lisp = parseString(wkt);\n\t  var type = lisp.shift();\n\t  var name = lisp.shift();\n\t  lisp.unshift(['name', name]);\n\t  lisp.unshift(['type', type]);\n\t  var obj = {};\n\t  sExpr(lisp, obj);\n\t  cleanWKT(obj);\n\t  return obj;\n\t};\n\n\tfunction defs(name) {\n\t  /*global console*/\n\t  var that = this;\n\t  if (arguments.length === 2) {\n\t    var def = arguments[1];\n\t    if (typeof def === 'string') {\n\t      if (def.charAt(0) === '+') {\n\t        defs[name] = parseProj(arguments[1]);\n\t      }\n\t      else {\n\t        defs[name] = wkt(arguments[1]);\n\t      }\n\t    } else {\n\t      defs[name] = def;\n\t    }\n\t  }\n\t  else if (arguments.length === 1) {\n\t    if (Array.isArray(name)) {\n\t      return name.map(function(v) {\n\t        if (Array.isArray(v)) {\n\t          defs.apply(that, v);\n\t        }\n\t        else {\n\t          defs(v);\n\t        }\n\t      });\n\t    }\n\t    else if (typeof name === 'string') {\n\t      if (name in defs) {\n\t        return defs[name];\n\t      }\n\t    }\n\t    else if ('EPSG' in name) {\n\t      defs['EPSG:' + name.EPSG] = name;\n\t    }\n\t    else if ('ESRI' in name) {\n\t      defs['ESRI:' + name.ESRI] = name;\n\t    }\n\t    else if ('IAU2000' in name) {\n\t      defs['IAU2000:' + name.IAU2000] = name;\n\t    }\n\t    else {\n\t      console.log(name);\n\t    }\n\t    return;\n\t  }\n\n\n\t}\n\tglobals(defs);\n\n\tfunction testObj(code){\n\t  return typeof code === 'string';\n\t}\n\tfunction testDef(code){\n\t  return code in defs;\n\t}\n\t var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\tfunction testWKT(code){\n\t  return codeWords.some(function (word) {\n\t    return code.indexOf(word) > -1;\n\t  });\n\t}\n\tvar codes = ['3857', '900913', '3785', '102113'];\n\tfunction checkMercator(item) {\n\t  var auth = match(item, 'authority');\n\t  if (!auth) {\n\t    return;\n\t  }\n\t  var code = match(auth, 'epsg');\n\t  return code && codes.indexOf(code) > -1;\n\t}\n\tfunction checkProjStr(item) {\n\t  var ext = match(item, 'extension');\n\t  if (!ext) {\n\t    return;\n\t  }\n\t  return match(ext, 'proj4');\n\t}\n\tfunction testProj(code){\n\t  return code[0] === '+';\n\t}\n\tfunction parse(code){\n\t  if (testObj(code)) {\n\t    //check to see if this is a WKT string\n\t    if (testDef(code)) {\n\t      return defs[code];\n\t    }\n\t    if (testWKT(code)) {\n\t      var out = wkt(code);\n\t      // test of spetial case, due to this being a very common and often malformed\n\t      if (checkMercator(out)) {\n\t        return defs['EPSG:3857'];\n\t      }\n\t      var maybeProjStr = checkProjStr(out);\n\t      if (maybeProjStr) {\n\t        return parseProj(maybeProjStr);\n\t      }\n\t      return out;\n\t    }\n\t    if (testProj(code)) {\n\t      return parseProj(code);\n\t    }\n\t  }else{\n\t    return code;\n\t  }\n\t}\n\n\tvar extend = function(destination, source) {\n\t  destination = destination || {};\n\t  var value, property;\n\t  if (!source) {\n\t    return destination;\n\t  }\n\t  for (property in source) {\n\t    value = source[property];\n\t    if (value !== undefined) {\n\t      destination[property] = value;\n\t    }\n\t  }\n\t  return destination;\n\t};\n\n\tvar msfnz = function(eccent, sinphi, cosphi) {\n\t  var con = eccent * sinphi;\n\t  return cosphi / (Math.sqrt(1 - con * con));\n\t};\n\n\tvar sign = function(x) {\n\t  return x<0 ? -1 : 1;\n\t};\n\n\tvar adjust_lon = function(x) {\n\t  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n\t};\n\n\tvar tsfnz = function(eccent, phi, sinphi) {\n\t  var con = eccent * sinphi;\n\t  var com = 0.5 * eccent;\n\t  con = Math.pow(((1 - con) / (1 + con)), com);\n\t  return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n\t};\n\n\tvar phi2z = function(eccent, ts) {\n\t  var eccnth = 0.5 * eccent;\n\t  var con, dphi;\n\t  var phi = HALF_PI - 2 * Math.atan(ts);\n\t  for (var i = 0; i <= 15; i++) {\n\t    con = eccent * Math.sin(phi);\n\t    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\t  //console.log(\"phi2z has NoConvergence\");\n\t  return -9999;\n\t};\n\n\tfunction init() {\n\t  var con = this.b / this.a;\n\t  this.es = 1 - con * con;\n\t  if(!('x0' in this)){\n\t    this.x0 = 0;\n\t  }\n\t  if(!('y0' in this)){\n\t    this.y0 = 0;\n\t  }\n\t  this.e = Math.sqrt(this.es);\n\t  if (this.lat_ts) {\n\t    if (this.sphere) {\n\t      this.k0 = Math.cos(this.lat_ts);\n\t    }\n\t    else {\n\t      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n\t    }\n\t  }\n\t  else {\n\t    if (!this.k0) {\n\t      if (this.k) {\n\t        this.k0 = this.k;\n\t      }\n\t      else {\n\t        this.k0 = 1;\n\t      }\n\t    }\n\t  }\n\t}\n\n\t/* Mercator forward equations--mapping lat,long to x,y\n\t  --------------------------------------------------*/\n\n\tfunction forward(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  // convert to radians\n\t  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n\t    return null;\n\t  }\n\n\t  var x, y;\n\t  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n\t    return null;\n\t  }\n\t  else {\n\t    if (this.sphere) {\n\t      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n\t      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n\t    }\n\t    else {\n\t      var sinphi = Math.sin(lat);\n\t      var ts = tsfnz(this.e, lat, sinphi);\n\t      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n\t      y = this.y0 - this.a * this.k0 * Math.log(ts);\n\t    }\n\t    p.x = x;\n\t    p.y = y;\n\t    return p;\n\t  }\n\t}\n\n\t/* Mercator inverse equations--mapping x,y to lat/long\n\t  --------------------------------------------------*/\n\tfunction inverse(p) {\n\n\t  var x = p.x - this.x0;\n\t  var y = p.y - this.y0;\n\t  var lon, lat;\n\n\t  if (this.sphere) {\n\t    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n\t  }\n\t  else {\n\t    var ts = Math.exp(-y / (this.a * this.k0));\n\t    lat = phi2z(this.e, ts);\n\t    if (lat === -9999) {\n\t      return null;\n\t    }\n\t  }\n\t  lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$1 = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\n\tvar merc = {\n\t  init: init,\n\t  forward: forward,\n\t  inverse: inverse,\n\t  names: names$1\n\t};\n\n\tfunction init$1() {\n\t  //no-op for longlat\n\t}\n\n\tfunction identity(pt) {\n\t  return pt;\n\t}\n\tvar names$2 = [\"longlat\", \"identity\"];\n\tvar longlat = {\n\t  init: init$1,\n\t  forward: identity,\n\t  inverse: identity,\n\t  names: names$2\n\t};\n\n\tvar projs = [merc, longlat];\n\tvar names = {};\n\tvar projStore = [];\n\n\tfunction add(proj, i) {\n\t  var len = projStore.length;\n\t  if (!proj.names) {\n\t    console.log(i);\n\t    return true;\n\t  }\n\t  projStore[len] = proj;\n\t  proj.names.forEach(function(n) {\n\t    names[n.toLowerCase()] = len;\n\t  });\n\t  return this;\n\t}\n\n\tfunction get(name) {\n\t  if (!name) {\n\t    return false;\n\t  }\n\t  var n = name.toLowerCase();\n\t  if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n\t    return projStore[names[n]];\n\t  }\n\t}\n\n\tfunction start() {\n\t  projs.forEach(add);\n\t}\n\tvar projections = {\n\t  start: start,\n\t  add: add,\n\t  get: get\n\t};\n\n\tvar exports$2 = {};\n\texports$2.MERIT = {\n\t  a: 6378137.0,\n\t  rf: 298.257,\n\t  ellipseName: \"MERIT 1983\"\n\t};\n\n\texports$2.SGS85 = {\n\t  a: 6378136.0,\n\t  rf: 298.257,\n\t  ellipseName: \"Soviet Geodetic System 85\"\n\t};\n\n\texports$2.GRS80 = {\n\t  a: 6378137.0,\n\t  rf: 298.257222101,\n\t  ellipseName: \"GRS 1980(IUGG, 1980)\"\n\t};\n\n\texports$2.IAU76 = {\n\t  a: 6378140.0,\n\t  rf: 298.257,\n\t  ellipseName: \"IAU 1976\"\n\t};\n\n\texports$2.airy = {\n\t  a: 6377563.396,\n\t  b: 6356256.910,\n\t  ellipseName: \"Airy 1830\"\n\t};\n\n\texports$2.APL4 = {\n\t  a: 6378137,\n\t  rf: 298.25,\n\t  ellipseName: \"Appl. Physics. 1965\"\n\t};\n\n\texports$2.NWL9D = {\n\t  a: 6378145.0,\n\t  rf: 298.25,\n\t  ellipseName: \"Naval Weapons Lab., 1965\"\n\t};\n\n\texports$2.mod_airy = {\n\t  a: 6377340.189,\n\t  b: 6356034.446,\n\t  ellipseName: \"Modified Airy\"\n\t};\n\n\texports$2.andrae = {\n\t  a: 6377104.43,\n\t  rf: 300.0,\n\t  ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n\t};\n\n\texports$2.aust_SA = {\n\t  a: 6378160.0,\n\t  rf: 298.25,\n\t  ellipseName: \"Australian Natl & S. Amer. 1969\"\n\t};\n\n\texports$2.GRS67 = {\n\t  a: 6378160.0,\n\t  rf: 298.2471674270,\n\t  ellipseName: \"GRS 67(IUGG 1967)\"\n\t};\n\n\texports$2.bessel = {\n\t  a: 6377397.155,\n\t  rf: 299.1528128,\n\t  ellipseName: \"Bessel 1841\"\n\t};\n\n\texports$2.bess_nam = {\n\t  a: 6377483.865,\n\t  rf: 299.1528128,\n\t  ellipseName: \"Bessel 1841 (Namibia)\"\n\t};\n\n\texports$2.clrk66 = {\n\t  a: 6378206.4,\n\t  b: 6356583.8,\n\t  ellipseName: \"Clarke 1866\"\n\t};\n\n\texports$2.clrk80 = {\n\t  a: 6378249.145,\n\t  rf: 293.4663,\n\t  ellipseName: \"Clarke 1880 mod.\"\n\t};\n\n\texports$2.clrk58 = {\n\t  a: 6378293.645208759,\n\t  rf: 294.2606763692654,\n\t  ellipseName: \"Clarke 1858\"\n\t};\n\n\texports$2.CPM = {\n\t  a: 6375738.7,\n\t  rf: 334.29,\n\t  ellipseName: \"Comm. des Poids et Mesures 1799\"\n\t};\n\n\texports$2.delmbr = {\n\t  a: 6376428.0,\n\t  rf: 311.5,\n\t  ellipseName: \"Delambre 1810 (Belgium)\"\n\t};\n\n\texports$2.engelis = {\n\t  a: 6378136.05,\n\t  rf: 298.2566,\n\t  ellipseName: \"Engelis 1985\"\n\t};\n\n\texports$2.evrst30 = {\n\t  a: 6377276.345,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1830\"\n\t};\n\n\texports$2.evrst48 = {\n\t  a: 6377304.063,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1948\"\n\t};\n\n\texports$2.evrst56 = {\n\t  a: 6377301.243,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1956\"\n\t};\n\n\texports$2.evrst69 = {\n\t  a: 6377295.664,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1969\"\n\t};\n\n\texports$2.evrstSS = {\n\t  a: 6377298.556,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest (Sabah & Sarawak)\"\n\t};\n\n\texports$2.fschr60 = {\n\t  a: 6378166.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer (Mercury Datum) 1960\"\n\t};\n\n\texports$2.fschr60m = {\n\t  a: 6378155.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer 1960\"\n\t};\n\n\texports$2.fschr68 = {\n\t  a: 6378150.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer 1968\"\n\t};\n\n\texports$2.helmert = {\n\t  a: 6378200.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Helmert 1906\"\n\t};\n\n\texports$2.hough = {\n\t  a: 6378270.0,\n\t  rf: 297.0,\n\t  ellipseName: \"Hough\"\n\t};\n\n\texports$2.intl = {\n\t  a: 6378388.0,\n\t  rf: 297.0,\n\t  ellipseName: \"International 1909 (Hayford)\"\n\t};\n\n\texports$2.kaula = {\n\t  a: 6378163.0,\n\t  rf: 298.24,\n\t  ellipseName: \"Kaula 1961\"\n\t};\n\n\texports$2.lerch = {\n\t  a: 6378139.0,\n\t  rf: 298.257,\n\t  ellipseName: \"Lerch 1979\"\n\t};\n\n\texports$2.mprts = {\n\t  a: 6397300.0,\n\t  rf: 191.0,\n\t  ellipseName: \"Maupertius 1738\"\n\t};\n\n\texports$2.new_intl = {\n\t  a: 6378157.5,\n\t  b: 6356772.2,\n\t  ellipseName: \"New International 1967\"\n\t};\n\n\texports$2.plessis = {\n\t  a: 6376523.0,\n\t  rf: 6355863.0,\n\t  ellipseName: \"Plessis 1817 (France)\"\n\t};\n\n\texports$2.krass = {\n\t  a: 6378245.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Krassovsky, 1942\"\n\t};\n\n\texports$2.SEasia = {\n\t  a: 6378155.0,\n\t  b: 6356773.3205,\n\t  ellipseName: \"Southeast Asia\"\n\t};\n\n\texports$2.walbeck = {\n\t  a: 6376896.0,\n\t  b: 6355834.8467,\n\t  ellipseName: \"Walbeck\"\n\t};\n\n\texports$2.WGS60 = {\n\t  a: 6378165.0,\n\t  rf: 298.3,\n\t  ellipseName: \"WGS 60\"\n\t};\n\n\texports$2.WGS66 = {\n\t  a: 6378145.0,\n\t  rf: 298.25,\n\t  ellipseName: \"WGS 66\"\n\t};\n\n\texports$2.WGS7 = {\n\t  a: 6378135.0,\n\t  rf: 298.26,\n\t  ellipseName: \"WGS 72\"\n\t};\n\n\tvar WGS84 = exports$2.WGS84 = {\n\t  a: 6378137.0,\n\t  rf: 298.257223563,\n\t  ellipseName: \"WGS 84\"\n\t};\n\n\texports$2.sphere = {\n\t  a: 6370997.0,\n\t  b: 6370997.0,\n\t  ellipseName: \"Normal Sphere (r=6370997)\"\n\t};\n\n\tfunction eccentricity(a, b, rf, R_A) {\n\t  var a2 = a * a; // used in geocentric\n\t  var b2 = b * b; // used in geocentric\n\t  var es = (a2 - b2) / a2; // e ^ 2\n\t  var e = 0;\n\t  if (R_A) {\n\t    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n\t    a2 = a * a;\n\t    es = 0;\n\t  } else {\n\t    e = Math.sqrt(es); // eccentricity\n\t  }\n\t  var ep2 = (a2 - b2) / b2; // used in geocentric\n\t  return {\n\t    es: es,\n\t    e: e,\n\t    ep2: ep2\n\t  };\n\t}\n\tfunction sphere(a, b, rf, ellps, sphere) {\n\t  if (!a) { // do we have an ellipsoid?\n\t    var ellipse = match(exports$2, ellps);\n\t    if (!ellipse) {\n\t      ellipse = WGS84;\n\t    }\n\t    a = ellipse.a;\n\t    b = ellipse.b;\n\t    rf = ellipse.rf;\n\t  }\n\n\t  if (rf && !b) {\n\t    b = (1.0 - 1.0 / rf) * a;\n\t  }\n\t  if (rf === 0 || Math.abs(a - b) < EPSLN) {\n\t    sphere = true;\n\t    b = a;\n\t  }\n\t  return {\n\t    a: a,\n\t    b: b,\n\t    rf: rf,\n\t    sphere: sphere\n\t  };\n\t}\n\n\tvar exports$3 = {};\n\texports$3.wgs84 = {\n\t  towgs84: \"0,0,0\",\n\t  ellipse: \"WGS84\",\n\t  datumName: \"WGS84\"\n\t};\n\n\texports$3.ch1903 = {\n\t  towgs84: \"674.374,15.056,405.346\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"swiss\"\n\t};\n\n\texports$3.ggrs87 = {\n\t  towgs84: \"-199.87,74.79,246.62\",\n\t  ellipse: \"GRS80\",\n\t  datumName: \"Greek_Geodetic_Reference_System_1987\"\n\t};\n\n\texports$3.nad83 = {\n\t  towgs84: \"0,0,0\",\n\t  ellipse: \"GRS80\",\n\t  datumName: \"North_American_Datum_1983\"\n\t};\n\n\texports$3.nad27 = {\n\t  nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n\t  ellipse: \"clrk66\",\n\t  datumName: \"North_American_Datum_1927\"\n\t};\n\n\texports$3.potsdam = {\n\t  towgs84: \"606.0,23.0,413.0\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"Potsdam Rauenberg 1950 DHDN\"\n\t};\n\n\texports$3.carthage = {\n\t  towgs84: \"-263.0,6.0,431.0\",\n\t  ellipse: \"clark80\",\n\t  datumName: \"Carthage 1934 Tunisia\"\n\t};\n\n\texports$3.hermannskogel = {\n\t  towgs84: \"653.0,-212.0,449.0\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"Hermannskogel\"\n\t};\n\n\texports$3.osni52 = {\n\t  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n\t  ellipse: \"airy\",\n\t  datumName: \"Irish National\"\n\t};\n\n\texports$3.ire65 = {\n\t  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n\t  ellipse: \"mod_airy\",\n\t  datumName: \"Ireland 1965\"\n\t};\n\n\texports$3.rassadiran = {\n\t  towgs84: \"-133.63,-157.5,-158.62\",\n\t  ellipse: \"intl\",\n\t  datumName: \"Rassadiran\"\n\t};\n\n\texports$3.nzgd49 = {\n\t  towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n\t  ellipse: \"intl\",\n\t  datumName: \"New Zealand Geodetic Datum 1949\"\n\t};\n\n\texports$3.osgb36 = {\n\t  towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n\t  ellipse: \"airy\",\n\t  datumName: \"Airy 1830\"\n\t};\n\n\texports$3.s_jtsk = {\n\t  towgs84: \"589,76,480\",\n\t  ellipse: 'bessel',\n\t  datumName: 'S-JTSK (Ferro)'\n\t};\n\n\texports$3.beduaram = {\n\t  towgs84: '-106,-87,188',\n\t  ellipse: 'clrk80',\n\t  datumName: 'Beduaram'\n\t};\n\n\texports$3.gunung_segara = {\n\t  towgs84: '-403,684,41',\n\t  ellipse: 'bessel',\n\t  datumName: 'Gunung Segara Jakarta'\n\t};\n\n\texports$3.rnb72 = {\n\t  towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n\t  ellipse: \"intl\",\n\t  datumName: \"Reseau National Belge 1972\"\n\t};\n\n\tfunction datum(datumCode, datum_params, a, b, es, ep2) {\n\t  var out = {};\n\n\t  if (datumCode === undefined || datumCode === 'none') {\n\t    out.datum_type = PJD_NODATUM;\n\t  } else {\n\t    out.datum_type = PJD_WGS84;\n\t  }\n\n\t  if (datum_params) {\n\t    out.datum_params = datum_params.map(parseFloat);\n\t    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n\t      out.datum_type = PJD_3PARAM;\n\t    }\n\t    if (out.datum_params.length > 3) {\n\t      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n\t        out.datum_type = PJD_7PARAM;\n\t        out.datum_params[3] *= SEC_TO_RAD;\n\t        out.datum_params[4] *= SEC_TO_RAD;\n\t        out.datum_params[5] *= SEC_TO_RAD;\n\t        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n\t      }\n\t    }\n\t  }\n\n\t  out.a = a; //datum object also uses these values\n\t  out.b = b;\n\t  out.es = es;\n\t  out.ep2 = ep2;\n\t  return out;\n\t}\n\n\tfunction Projection(srsCode,callback) {\n\t  if (!(this instanceof Projection)) {\n\t    return new Projection(srsCode);\n\t  }\n\t  callback = callback || function(error){\n\t    if(error){\n\t      throw error;\n\t    }\n\t  };\n\t  var json = parse(srsCode);\n\t  if(typeof json !== 'object'){\n\t    callback(srsCode);\n\t    return;\n\t  }\n\t  var ourProj = Projection.projections.get(json.projName);\n\t  if(!ourProj){\n\t    callback(srsCode);\n\t    return;\n\t  }\n\t  if (json.datumCode && json.datumCode !== 'none') {\n\t    var datumDef = match(exports$3, json.datumCode);\n\t    if (datumDef) {\n\t      json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n\t      json.ellps = datumDef.ellipse;\n\t      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n\t    }\n\t  }\n\t  json.k0 = json.k0 || 1.0;\n\t  json.axis = json.axis || 'enu';\n\t  json.ellps = json.ellps || 'wgs84';\n\t  var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n\t  var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n\t  var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);\n\n\t  extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n\t  extend(this, ourProj); // transfer all the methods from the projection\n\n\t  // copy the 4 things over we calulated in deriveConstants.sphere\n\t  this.a = sphere_.a;\n\t  this.b = sphere_.b;\n\t  this.rf = sphere_.rf;\n\t  this.sphere = sphere_.sphere;\n\n\t  // copy the 3 things we calculated in deriveConstants.eccentricity\n\t  this.es = ecc.es;\n\t  this.e = ecc.e;\n\t  this.ep2 = ecc.ep2;\n\n\t  // add in the datum object\n\t  this.datum = datumObj;\n\n\t  // init the projection\n\t  this.init();\n\n\t  // legecy callback from back in the day when it went to spatialreference.org\n\t  callback(null, this);\n\n\t}\n\tProjection.projections = projections;\n\tProjection.projections.start();\n\n\t'use strict';\n\tfunction compareDatums(source, dest) {\n\t  if (source.datum_type !== dest.datum_type) {\n\t    return false; // false, datums are not equal\n\t  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n\t    // the tolerance for es is to ensure that GRS80 and WGS84\n\t    // are considered identical\n\t    return false;\n\t  } else if (source.datum_type === PJD_3PARAM) {\n\t    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n\t  } else if (source.datum_type === PJD_7PARAM) {\n\t    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n\t  } else {\n\t    return true; // datums are equal\n\t  }\n\t} // cs_compare_datums()\n\n\t/*\n\t * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n\t * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n\t * according to the current ellipsoid parameters.\n\t *\n\t *    Latitude  : Geodetic latitude in radians                     (input)\n\t *    Longitude : Geodetic longitude in radians                    (input)\n\t *    Height    : Geodetic height, in meters                       (input)\n\t *    X         : Calculated Geocentric X coordinate, in meters    (output)\n\t *    Y         : Calculated Geocentric Y coordinate, in meters    (output)\n\t *    Z         : Calculated Geocentric Z coordinate, in meters    (output)\n\t *\n\t */\n\tfunction geodeticToGeocentric(p, es, a) {\n\t  var Longitude = p.x;\n\t  var Latitude = p.y;\n\t  var Height = p.z ? p.z : 0; //Z value not always supplied\n\n\t  var Rn; /*  Earth radius at location  */\n\t  var Sin_Lat; /*  Math.sin(Latitude)  */\n\t  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */\n\t  var Cos_Lat; /*  Math.cos(Latitude)  */\n\n\t  /*\n\t   ** Don't blow up if Latitude is just a little out of the value\n\t   ** range as it may just be a rounding issue.  Also removed longitude\n\t   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.\n\t   */\n\t  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n\t    Latitude = -HALF_PI;\n\t  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n\t    Latitude = HALF_PI;\n\t  } else if (Latitude < -HALF_PI) {\n\t    /* Latitude out of range */\n\t    //..reportError('geocent:lat out of range:' + Latitude);\n\t    return { x: -Infinity, y: -Infinity, z: p.z };\n\t  } else if (Latitude > HALF_PI) {\n\t    /* Latitude out of range */\n\t    return { x: Infinity, y: Infinity, z: p.z };\n\t  }\n\n\t  if (Longitude > Math.PI) {\n\t    Longitude -= (2 * Math.PI);\n\t  }\n\t  Sin_Lat = Math.sin(Latitude);\n\t  Cos_Lat = Math.cos(Latitude);\n\t  Sin2_Lat = Sin_Lat * Sin_Lat;\n\t  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n\t  return {\n\t    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n\t    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n\t    z: ((Rn * (1 - es)) + Height) * Sin_Lat\n\t  };\n\t} // cs_geodetic_to_geocentric()\n\n\tfunction geocentricToGeodetic(p, es, a, b) {\n\t  /* local defintions and variables */\n\t  /* end-criterium of loop, accuracy of sin(Latitude) */\n\t  var genau = 1e-12;\n\t  var genau2 = (genau * genau);\n\t  var maxiter = 30;\n\n\t  var P; /* distance between semi-minor axis and location */\n\t  var RR; /* distance between center and location */\n\t  var CT; /* sin of geocentric latitude */\n\t  var ST; /* cos of geocentric latitude */\n\t  var RX;\n\t  var RK;\n\t  var RN; /* Earth radius at location */\n\t  var CPHI0; /* cos of start or old geodetic latitude in iterations */\n\t  var SPHI0; /* sin of start or old geodetic latitude in iterations */\n\t  var CPHI; /* cos of searched geodetic latitude */\n\t  var SPHI; /* sin of searched geodetic latitude */\n\t  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n\t  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n\t  var X = p.x;\n\t  var Y = p.y;\n\t  var Z = p.z ? p.z : 0.0; //Z value not always supplied\n\t  var Longitude;\n\t  var Latitude;\n\t  var Height;\n\n\t  P = Math.sqrt(X * X + Y * Y);\n\t  RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n\t  /*      special cases for latitude and longitude */\n\t  if (P / a < genau) {\n\n\t    /*  special case, if P=0. (X=0., Y=0.) */\n\t    Longitude = 0.0;\n\n\t    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n\t     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */\n\t    if (RR / a < genau) {\n\t      Latitude = HALF_PI;\n\t      Height = -b;\n\t      return {\n\t        x: p.x,\n\t        y: p.y,\n\t        z: p.z\n\t      };\n\t    }\n\t  } else {\n\t    /*  ellipsoidal (geodetic) longitude\n\t     *  interval: -PI < Longitude <= +PI */\n\t    Longitude = Math.atan2(Y, X);\n\t  }\n\n\t  /* --------------------------------------------------------------\n\t   * Following iterative algorithm was developped by\n\t   * \"Institut for Erdmessung\", University of Hannover, July 1988.\n\t   * Internet: www.ife.uni-hannover.de\n\t   * Iterative computation of CPHI,SPHI and Height.\n\t   * Iteration of CPHI and SPHI to 10**-12 radian resp.\n\t   * 2*10**-7 arcsec.\n\t   * --------------------------------------------------------------\n\t   */\n\t  CT = Z / RR;\n\t  ST = P / RR;\n\t  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n\t  CPHI0 = ST * (1.0 - es) * RX;\n\t  SPHI0 = CT * RX;\n\t  iter = 0;\n\n\t  /* loop to find sin(Latitude) resp. Latitude\n\t   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n\t  do {\n\t    iter++;\n\t    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n\t    /*  ellipsoidal (geodetic) height */\n\t    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n\t    RK = es * RN / (RN + Height);\n\t    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n\t    CPHI = ST * (1.0 - RK) * RX;\n\t    SPHI = CT * RX;\n\t    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n\t    CPHI0 = CPHI;\n\t    SPHI0 = SPHI;\n\t  }\n\t  while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n\t  /*      ellipsoidal (geodetic) latitude */\n\t  Latitude = Math.atan(SPHI / Math.abs(CPHI));\n\t  return {\n\t    x: Longitude,\n\t    y: Latitude,\n\t    z: Height\n\t  };\n\t} // cs_geocentric_to_geodetic()\n\n\t/****************************************************************/\n\t// pj_geocentic_to_wgs84( p )\n\t//  p = point to transform in geocentric coordinates (x,y,z)\n\n\n\t/** point object, nothing fancy, just allows values to be\n\t    passed back and forth by reference rather than by value.\n\t    Other point classes may be used as long as they have\n\t    x and y properties, which will get modified in the transform method.\n\t*/\n\tfunction geocentricToWgs84(p, datum_type, datum_params) {\n\n\t  if (datum_type === PJD_3PARAM) {\n\t    // if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: p.x + datum_params[0],\n\t      y: p.y + datum_params[1],\n\t      z: p.z + datum_params[2],\n\t    };\n\t  } else if (datum_type === PJD_7PARAM) {\n\t    var Dx_BF = datum_params[0];\n\t    var Dy_BF = datum_params[1];\n\t    var Dz_BF = datum_params[2];\n\t    var Rx_BF = datum_params[3];\n\t    var Ry_BF = datum_params[4];\n\t    var Rz_BF = datum_params[5];\n\t    var M_BF = datum_params[6];\n\t    // if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n\t      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n\t      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n\t    };\n\t  }\n\t} // cs_geocentric_to_wgs84\n\n\t/****************************************************************/\n\t// pj_geocentic_from_wgs84()\n\t//  coordinate system definition,\n\t//  point to transform in geocentric coordinates (x,y,z)\n\tfunction geocentricFromWgs84(p, datum_type, datum_params) {\n\n\t  if (datum_type === PJD_3PARAM) {\n\t    //if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: p.x - datum_params[0],\n\t      y: p.y - datum_params[1],\n\t      z: p.z - datum_params[2],\n\t    };\n\n\t  } else if (datum_type === PJD_7PARAM) {\n\t    var Dx_BF = datum_params[0];\n\t    var Dy_BF = datum_params[1];\n\t    var Dz_BF = datum_params[2];\n\t    var Rx_BF = datum_params[3];\n\t    var Ry_BF = datum_params[4];\n\t    var Rz_BF = datum_params[5];\n\t    var M_BF = datum_params[6];\n\t    var x_tmp = (p.x - Dx_BF) / M_BF;\n\t    var y_tmp = (p.y - Dy_BF) / M_BF;\n\t    var z_tmp = (p.z - Dz_BF) / M_BF;\n\t    //if( x[io] === HUGE_VAL )\n\t    //    continue;\n\n\t    return {\n\t      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n\t      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n\t      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n\t    };\n\t  } //cs_geocentric_from_wgs84()\n\t}\n\n\tfunction checkParams(type) {\n\t  return (type === PJD_3PARAM || type === PJD_7PARAM);\n\t}\n\n\tvar datum_transform = function(source, dest, point) {\n\t  // Short cut if the datums are identical.\n\t  if (compareDatums(source, dest)) {\n\t    return point; // in this case, zero is sucess,\n\t    // whereas cs_compare_datums returns 1 to indicate TRUE\n\t    // confusing, should fix this\n\t  }\n\n\t  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n\t  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n\t    return point;\n\t  }\n\n\t  // If this datum requires grid shifts, then apply it to geodetic coordinates.\n\n\t  // Do we need to go through geocentric coordinates?\n\t  if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {\n\t    return point;\n\t  }\n\n\t  // Convert to geocentric coordinates.\n\t  point = geodeticToGeocentric(point, source.es, source.a);\n\t  // Convert between datums\n\t  if (checkParams(source.datum_type)) {\n\t    point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n\t  }\n\t  if (checkParams(dest.datum_type)) {\n\t    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n\t  }\n\t  return geocentricToGeodetic(point, dest.es, dest.a, dest.b);\n\n\t};\n\n\tvar adjust_axis = function(crs, denorm, point) {\n\t  var xin = point.x,\n\t    yin = point.y,\n\t    zin = point.z || 0.0;\n\t  var v, t, i;\n\t  var out = {};\n\t  for (i = 0; i < 3; i++) {\n\t    if (denorm && i === 2 && point.z === undefined) {\n\t      continue;\n\t    }\n\t    if (i === 0) {\n\t      v = xin;\n\t      t = 'x';\n\t    }\n\t    else if (i === 1) {\n\t      v = yin;\n\t      t = 'y';\n\t    }\n\t    else {\n\t      v = zin;\n\t      t = 'z';\n\t    }\n\t    switch (crs.axis[i]) {\n\t    case 'e':\n\t      out[t] = v;\n\t      break;\n\t    case 'w':\n\t      out[t] = -v;\n\t      break;\n\t    case 'n':\n\t      out[t] = v;\n\t      break;\n\t    case 's':\n\t      out[t] = -v;\n\t      break;\n\t    case 'u':\n\t      if (point[t] !== undefined) {\n\t        out.z = v;\n\t      }\n\t      break;\n\t    case 'd':\n\t      if (point[t] !== undefined) {\n\t        out.z = -v;\n\t      }\n\t      break;\n\t    default:\n\t      //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n\t      return null;\n\t    }\n\t  }\n\t  return out;\n\t};\n\n\tvar toPoint = function (array){\n\t  var out = {\n\t    x: array[0],\n\t    y: array[1]\n\t  };\n\t  if (array.length>2) {\n\t    out.z = array[2];\n\t  }\n\t  if (array.length>3) {\n\t    out.m = array[3];\n\t  }\n\t  return out;\n\t};\n\n\tvar checkSanity = function (point) {\n\t  checkCoord(point.x);\n\t  checkCoord(point.y);\n\t};\n\tfunction checkCoord(num) {\n\t  if (typeof Number.isFinite === 'function') {\n\t    if (Number.isFinite(num)) {\n\t      return;\n\t    }\n\t    throw new TypeError('coordinates must be finite numbers');\n\t  }\n\t  if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n\t    throw new TypeError('coordinates must be finite numbers');\n\t  }\n\t}\n\n\tfunction checkNotWGS(source, dest) {\n\t  return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n\t}\n\n\tfunction transform(source, dest, point) {\n\t  var wgs84;\n\t  if (Array.isArray(point)) {\n\t    point = toPoint(point);\n\t  }\n\t  checkSanity(point);\n\t  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n\t  if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n\t    wgs84 = new Projection('WGS84');\n\t    point = transform(source, wgs84, point);\n\t    source = wgs84;\n\t  }\n\t  // DGR, 2010/11/12\n\t  if (source.axis !== 'enu') {\n\t    point = adjust_axis(source, false, point);\n\t  }\n\t  // Transform source points to long/lat, if they aren't already.\n\t  if (source.projName === 'longlat') {\n\t    point = {\n\t      x: point.x * D2R,\n\t      y: point.y * D2R\n\t    };\n\t  }\n\t  else {\n\t    if (source.to_meter) {\n\t      point = {\n\t        x: point.x * source.to_meter,\n\t        y: point.y * source.to_meter\n\t      };\n\t    }\n\t    point = source.inverse(point); // Convert Cartesian to longlat\n\t  }\n\t  // Adjust for the prime meridian if necessary\n\t  if (source.from_greenwich) {\n\t    point.x += source.from_greenwich;\n\t  }\n\n\t  // Convert datums if needed, and if possible.\n\t  point = datum_transform(source.datum, dest.datum, point);\n\n\t  // Adjust for the prime meridian if necessary\n\t  if (dest.from_greenwich) {\n\t    point = {\n\t      x: point.x - dest.from_greenwich,\n\t      y: point.y\n\t    };\n\t  }\n\n\t  if (dest.projName === 'longlat') {\n\t    // convert radians to decimal degrees\n\t    point = {\n\t      x: point.x * R2D,\n\t      y: point.y * R2D\n\t    };\n\t  } else { // else project\n\t    point = dest.forward(point);\n\t    if (dest.to_meter) {\n\t      point = {\n\t        x: point.x / dest.to_meter,\n\t        y: point.y / dest.to_meter\n\t      };\n\t    }\n\t  }\n\n\t  // DGR, 2010/11/12\n\t  if (dest.axis !== 'enu') {\n\t    return adjust_axis(dest, true, point);\n\t  }\n\n\t  return point;\n\t}\n\n\tvar wgs84 = Projection('WGS84');\n\n\tfunction transformer(from, to, coords) {\n\t  var transformedArray, out, keys;\n\t  if (Array.isArray(coords)) {\n\t    transformedArray = transform(from, to, coords);\n\t    if (coords.length === 3) {\n\t      return [transformedArray.x, transformedArray.y, transformedArray.z];\n\t    }\n\t    else {\n\t      return [transformedArray.x, transformedArray.y];\n\t    }\n\t  }\n\t  else {\n\t    out = transform(from, to, coords);\n\t    keys = Object.keys(coords);\n\t    if (keys.length === 2) {\n\t      return out;\n\t    }\n\t    keys.forEach(function (key) {\n\t      if (key === 'x' || key === 'y') {\n\t        return;\n\t      }\n\t      out[key] = coords[key];\n\t    });\n\t    return out;\n\t  }\n\t}\n\n\tfunction checkProj(item) {\n\t  if (item instanceof Projection) {\n\t    return item;\n\t  }\n\t  if (item.oProj) {\n\t    return item.oProj;\n\t  }\n\t  return Projection(item);\n\t}\n\tfunction proj4$1(fromProj, toProj, coord) {\n\t  fromProj = checkProj(fromProj);\n\t  var single = false;\n\t  var obj;\n\t  if (typeof toProj === 'undefined') {\n\t    toProj = fromProj;\n\t    fromProj = wgs84;\n\t    single = true;\n\t  }\n\t  else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n\t    coord = toProj;\n\t    toProj = fromProj;\n\t    fromProj = wgs84;\n\t    single = true;\n\t  }\n\t  toProj = checkProj(toProj);\n\t  if (coord) {\n\t    return transformer(fromProj, toProj, coord);\n\t  }\n\t  else {\n\t    obj = {\n\t      forward: function(coords) {\n\t        return transformer(fromProj, toProj, coords);\n\t      },\n\t      inverse: function(coords) {\n\t        return transformer(toProj, fromProj, coords);\n\t      }\n\t    };\n\t    if (single) {\n\t      obj.oProj = toProj;\n\t    }\n\t    return obj;\n\t  }\n\t}\n\n\t/**\n\t * UTM zones are grouped, and assigned to one of a group of 6\n\t * sets.\n\t *\n\t * {int} @private\n\t */\n\tvar NUM_100K_SETS = 6;\n\n\t/**\n\t * The column letters (for easting) of the lower left value, per\n\t * set.\n\t *\n\t * {string} @private\n\t */\n\tvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n\t/**\n\t * The row letters (for northing) of the lower left value, per\n\t * set.\n\t *\n\t * {string} @private\n\t */\n\tvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\n\tvar A = 65; // A\n\tvar I = 73; // I\n\tvar O = 79; // O\n\tvar V = 86; // V\n\tvar Z = 90; // Z\n\tvar mgrs = {\n\t  forward: forward$1,\n\t  inverse: inverse$1,\n\t  toPoint: toPoint$1\n\t};\n\t/**\n\t * Conversion of lat/lon to MGRS.\n\t *\n\t * @param {object} ll Object literal with lat and lon properties on a\n\t *     WGS84 ellipsoid.\n\t * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n\t *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n\t * @return {string} the MGRS string for the given location and accuracy.\n\t */\n\tfunction forward$1(ll, accuracy) {\n\t  accuracy = accuracy || 5; // default accuracy 1m\n\t  return encode(LLtoUTM({\n\t    lat: ll[1],\n\t    lon: ll[0]\n\t  }), accuracy);\n\t}\n\n\t/**\n\t * Conversion of MGRS to lat/lon.\n\t *\n\t * @param {string} mgrs MGRS string.\n\t * @return {array} An array with left (longitude), bottom (latitude), right\n\t *     (longitude) and top (latitude) values in WGS84, representing the\n\t *     bounding box for the provided MGRS reference.\n\t */\n\tfunction inverse$1(mgrs) {\n\t  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n\t  if (bbox.lat && bbox.lon) {\n\t    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n\t  }\n\t  return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n\t}\n\n\tfunction toPoint$1(mgrs) {\n\t  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n\t  if (bbox.lat && bbox.lon) {\n\t    return [bbox.lon, bbox.lat];\n\t  }\n\t  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n\t}\n\t/**\n\t * Conversion from degrees to radians.\n\t *\n\t * @private\n\t * @param {number} deg the angle in degrees.\n\t * @return {number} the angle in radians.\n\t */\n\tfunction degToRad(deg) {\n\t  return (deg * (Math.PI / 180.0));\n\t}\n\n\t/**\n\t * Conversion from radians to degrees.\n\t *\n\t * @private\n\t * @param {number} rad the angle in radians.\n\t * @return {number} the angle in degrees.\n\t */\n\tfunction radToDeg(rad) {\n\t  return (180.0 * (rad / Math.PI));\n\t}\n\n\t/**\n\t * Converts a set of Longitude and Latitude co-ordinates to UTM\n\t * using the WGS84 ellipsoid.\n\t *\n\t * @private\n\t * @param {object} ll Object literal with lat and lon properties\n\t *     representing the WGS84 coordinate to be converted.\n\t * @return {object} Object literal containing the UTM value with easting,\n\t *     northing, zoneNumber and zoneLetter properties, and an optional\n\t *     accuracy property in digits. Returns null if the conversion failed.\n\t */\n\tfunction LLtoUTM(ll) {\n\t  var Lat = ll.lat;\n\t  var Long = ll.lon;\n\t  var a = 6378137.0; //ellip.radius;\n\t  var eccSquared = 0.00669438; //ellip.eccsq;\n\t  var k0 = 0.9996;\n\t  var LongOrigin;\n\t  var eccPrimeSquared;\n\t  var N, T, C, A, M;\n\t  var LatRad = degToRad(Lat);\n\t  var LongRad = degToRad(Long);\n\t  var LongOriginRad;\n\t  var ZoneNumber;\n\t  // (int)\n\t  ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n\t  //Make sure the longitude 180.00 is in Zone 60\n\t  if (Long === 180) {\n\t    ZoneNumber = 60;\n\t  }\n\n\t  // Special zone for Norway\n\t  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n\t    ZoneNumber = 32;\n\t  }\n\n\t  // Special zones for Svalbard\n\t  if (Lat >= 72.0 && Lat < 84.0) {\n\t    if (Long >= 0.0 && Long < 9.0) {\n\t      ZoneNumber = 31;\n\t    }\n\t    else if (Long >= 9.0 && Long < 21.0) {\n\t      ZoneNumber = 33;\n\t    }\n\t    else if (Long >= 21.0 && Long < 33.0) {\n\t      ZoneNumber = 35;\n\t    }\n\t    else if (Long >= 33.0 && Long < 42.0) {\n\t      ZoneNumber = 37;\n\t    }\n\t  }\n\n\t  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n\t  // in middle of\n\t  // zone\n\t  LongOriginRad = degToRad(LongOrigin);\n\n\t  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n\t  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n\t  T = Math.tan(LatRad) * Math.tan(LatRad);\n\t  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n\t  A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n\t  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n\t  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n\t  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n\t  if (Lat < 0.0) {\n\t    UTMNorthing += 10000000.0; //10000000 meter offset for\n\t    // southern hemisphere\n\t  }\n\n\t  return {\n\t    northing: Math.round(UTMNorthing),\n\t    easting: Math.round(UTMEasting),\n\t    zoneNumber: ZoneNumber,\n\t    zoneLetter: getLetterDesignator(Lat)\n\t  };\n\t}\n\n\t/**\n\t * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n\t * class where the Zone can be specified as a single string eg.\"60N\" which\n\t * is then broken down into the ZoneNumber and ZoneLetter.\n\t *\n\t * @private\n\t * @param {object} utm An object literal with northing, easting, zoneNumber\n\t *     and zoneLetter properties. If an optional accuracy property is\n\t *     provided (in meters), a bounding box will be returned instead of\n\t *     latitude and longitude.\n\t * @return {object} An object literal containing either lat and lon values\n\t *     (if no accuracy was provided), or top, right, bottom and left values\n\t *     for the bounding box calculated according to the provided accuracy.\n\t *     Returns null if the conversion failed.\n\t */\n\tfunction UTMtoLL(utm) {\n\n\t  var UTMNorthing = utm.northing;\n\t  var UTMEasting = utm.easting;\n\t  var zoneLetter = utm.zoneLetter;\n\t  var zoneNumber = utm.zoneNumber;\n\t  // check the ZoneNummber is valid\n\t  if (zoneNumber < 0 || zoneNumber > 60) {\n\t    return null;\n\t  }\n\n\t  var k0 = 0.9996;\n\t  var a = 6378137.0; //ellip.radius;\n\t  var eccSquared = 0.00669438; //ellip.eccsq;\n\t  var eccPrimeSquared;\n\t  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n\t  var N1, T1, C1, R1, D, M;\n\t  var LongOrigin;\n\t  var mu, phi1Rad;\n\n\t  // remove 500,000 meter offset for longitude\n\t  var x = UTMEasting - 500000.0;\n\t  var y = UTMNorthing;\n\n\t  // We must know somehow if we are in the Northern or Southern\n\t  // hemisphere, this is the only time we use the letter So even\n\t  // if the Zone letter isn't exactly correct it should indicate\n\t  // the hemisphere correctly\n\t  if (zoneLetter < 'N') {\n\t    y -= 10000000.0; // remove 10,000,000 meter offset used\n\t    // for southern hemisphere\n\t  }\n\n\t  // There are 60 zones with zone 1 being at West -180 to -174\n\t  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n\t  // in middle of\n\t  // zone\n\n\t  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n\t  M = y / k0;\n\t  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n\t  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n\t  // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n\t  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n\t  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n\t  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n\t  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n\t  D = x / (N1 * k0);\n\n\t  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n\t  lat = radToDeg(lat);\n\n\t  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n\t  lon = LongOrigin + radToDeg(lon);\n\n\t  var result;\n\t  if (utm.accuracy) {\n\t    var topRight = UTMtoLL({\n\t      northing: utm.northing + utm.accuracy,\n\t      easting: utm.easting + utm.accuracy,\n\t      zoneLetter: utm.zoneLetter,\n\t      zoneNumber: utm.zoneNumber\n\t    });\n\t    result = {\n\t      top: topRight.lat,\n\t      right: topRight.lon,\n\t      bottom: lat,\n\t      left: lon\n\t    };\n\t  }\n\t  else {\n\t    result = {\n\t      lat: lat,\n\t      lon: lon\n\t    };\n\t  }\n\t  return result;\n\t}\n\n\t/**\n\t * Calculates the MGRS letter designator for the given latitude.\n\t *\n\t * @private\n\t * @param {number} lat The latitude in WGS84 to get the letter designator\n\t *     for.\n\t * @return {char} The letter designator.\n\t */\n\tfunction getLetterDesignator(lat) {\n\t  //This is here as an error flag to show that the Latitude is\n\t  //outside MGRS limits\n\t  var LetterDesignator = 'Z';\n\n\t  if ((84 >= lat) && (lat >= 72)) {\n\t    LetterDesignator = 'X';\n\t  }\n\t  else if ((72 > lat) && (lat >= 64)) {\n\t    LetterDesignator = 'W';\n\t  }\n\t  else if ((64 > lat) && (lat >= 56)) {\n\t    LetterDesignator = 'V';\n\t  }\n\t  else if ((56 > lat) && (lat >= 48)) {\n\t    LetterDesignator = 'U';\n\t  }\n\t  else if ((48 > lat) && (lat >= 40)) {\n\t    LetterDesignator = 'T';\n\t  }\n\t  else if ((40 > lat) && (lat >= 32)) {\n\t    LetterDesignator = 'S';\n\t  }\n\t  else if ((32 > lat) && (lat >= 24)) {\n\t    LetterDesignator = 'R';\n\t  }\n\t  else if ((24 > lat) && (lat >= 16)) {\n\t    LetterDesignator = 'Q';\n\t  }\n\t  else if ((16 > lat) && (lat >= 8)) {\n\t    LetterDesignator = 'P';\n\t  }\n\t  else if ((8 > lat) && (lat >= 0)) {\n\t    LetterDesignator = 'N';\n\t  }\n\t  else if ((0 > lat) && (lat >= -8)) {\n\t    LetterDesignator = 'M';\n\t  }\n\t  else if ((-8 > lat) && (lat >= -16)) {\n\t    LetterDesignator = 'L';\n\t  }\n\t  else if ((-16 > lat) && (lat >= -24)) {\n\t    LetterDesignator = 'K';\n\t  }\n\t  else if ((-24 > lat) && (lat >= -32)) {\n\t    LetterDesignator = 'J';\n\t  }\n\t  else if ((-32 > lat) && (lat >= -40)) {\n\t    LetterDesignator = 'H';\n\t  }\n\t  else if ((-40 > lat) && (lat >= -48)) {\n\t    LetterDesignator = 'G';\n\t  }\n\t  else if ((-48 > lat) && (lat >= -56)) {\n\t    LetterDesignator = 'F';\n\t  }\n\t  else if ((-56 > lat) && (lat >= -64)) {\n\t    LetterDesignator = 'E';\n\t  }\n\t  else if ((-64 > lat) && (lat >= -72)) {\n\t    LetterDesignator = 'D';\n\t  }\n\t  else if ((-72 > lat) && (lat >= -80)) {\n\t    LetterDesignator = 'C';\n\t  }\n\t  return LetterDesignator;\n\t}\n\n\t/**\n\t * Encodes a UTM location as MGRS string.\n\t *\n\t * @private\n\t * @param {object} utm An object literal with easting, northing,\n\t *     zoneLetter, zoneNumber\n\t * @param {number} accuracy Accuracy in digits (1-5).\n\t * @return {string} MGRS string for the given UTM location.\n\t */\n\tfunction encode(utm, accuracy) {\n\t  // prepend with leading zeroes\n\t  var seasting = \"00000\" + utm.easting,\n\t    snorthing = \"00000\" + utm.northing;\n\n\t  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n\t}\n\n\t/**\n\t * Get the two letter 100k designator for a given UTM easting,\n\t * northing and zone number value.\n\t *\n\t * @private\n\t * @param {number} easting\n\t * @param {number} northing\n\t * @param {number} zoneNumber\n\t * @return the two letter 100k designator for the given UTM location.\n\t */\n\tfunction get100kID(easting, northing, zoneNumber) {\n\t  var setParm = get100kSetForZone(zoneNumber);\n\t  var setColumn = Math.floor(easting / 100000);\n\t  var setRow = Math.floor(northing / 100000) % 20;\n\t  return getLetter100kID(setColumn, setRow, setParm);\n\t}\n\n\t/**\n\t * Given a UTM zone number, figure out the MGRS 100K set it is in.\n\t *\n\t * @private\n\t * @param {number} i An UTM zone number.\n\t * @return {number} the 100k set the UTM zone is in.\n\t */\n\tfunction get100kSetForZone(i) {\n\t  var setParm = i % NUM_100K_SETS;\n\t  if (setParm === 0) {\n\t    setParm = NUM_100K_SETS;\n\t  }\n\n\t  return setParm;\n\t}\n\n\t/**\n\t * Get the two-letter MGRS 100k designator given information\n\t * translated from the UTM northing, easting and zone number.\n\t *\n\t * @private\n\t * @param {number} column the column index as it relates to the MGRS\n\t *        100k set spreadsheet, created from the UTM easting.\n\t *        Values are 1-8.\n\t * @param {number} row the row index as it relates to the MGRS 100k set\n\t *        spreadsheet, created from the UTM northing value. Values\n\t *        are from 0-19.\n\t * @param {number} parm the set block, as it relates to the MGRS 100k set\n\t *        spreadsheet, created from the UTM zone. Values are from\n\t *        1-60.\n\t * @return two letter MGRS 100k code.\n\t */\n\tfunction getLetter100kID(column, row, parm) {\n\t  // colOrigin and rowOrigin are the letters at the origin of the set\n\t  var index = parm - 1;\n\t  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n\t  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n\t  // colInt and rowInt are the letters to build to return\n\t  var colInt = colOrigin + column - 1;\n\t  var rowInt = rowOrigin + row;\n\t  var rollover = false;\n\n\t  if (colInt > Z) {\n\t    colInt = colInt - Z + A - 1;\n\t    rollover = true;\n\t  }\n\n\t  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n\t    colInt++;\n\t  }\n\n\t  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n\t    colInt++;\n\n\t    if (colInt === I) {\n\t      colInt++;\n\t    }\n\t  }\n\n\t  if (colInt > Z) {\n\t    colInt = colInt - Z + A - 1;\n\t  }\n\n\t  if (rowInt > V) {\n\t    rowInt = rowInt - V + A - 1;\n\t    rollover = true;\n\t  }\n\t  else {\n\t    rollover = false;\n\t  }\n\n\t  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n\t    rowInt++;\n\t  }\n\n\t  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n\t    rowInt++;\n\n\t    if (rowInt === I) {\n\t      rowInt++;\n\t    }\n\t  }\n\n\t  if (rowInt > V) {\n\t    rowInt = rowInt - V + A - 1;\n\t  }\n\n\t  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n\t  return twoLetter;\n\t}\n\n\t/**\n\t * Decode the UTM parameters from a MGRS string.\n\t *\n\t * @private\n\t * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n\t * @return {object} An object literal with easting, northing, zoneLetter,\n\t *     zoneNumber and accuracy (in meters) properties.\n\t */\n\tfunction decode(mgrsString) {\n\n\t  if (mgrsString && mgrsString.length === 0) {\n\t    throw (\"MGRSPoint coverting from nothing\");\n\t  }\n\n\t  var length = mgrsString.length;\n\n\t  var hunK = null;\n\t  var sb = \"\";\n\t  var testChar;\n\t  var i = 0;\n\n\t  // get Zone number\n\t  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n\t    if (i >= 2) {\n\t      throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n\t    }\n\t    sb += testChar;\n\t    i++;\n\t  }\n\n\t  var zoneNumber = parseInt(sb, 10);\n\n\t  if (i === 0 || i + 3 > length) {\n\t    // A good MGRS string has to be 4-5 digits long,\n\t    // ##AAA/#AAA at least.\n\t    throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n\t  }\n\n\t  var zoneLetter = mgrsString.charAt(i++);\n\n\t  // Should we check the zone letter here? Why not.\n\t  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n\t    throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n\t  }\n\n\t  hunK = mgrsString.substring(i, i += 2);\n\n\t  var set = get100kSetForZone(zoneNumber);\n\n\t  var east100k = getEastingFromChar(hunK.charAt(0), set);\n\t  var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n\t  // We have a bug where the northing may be 2000000 too low.\n\t  // How\n\t  // do we know when to roll over?\n\n\t  while (north100k < getMinNorthing(zoneLetter)) {\n\t    north100k += 2000000;\n\t  }\n\n\t  // calculate the char index for easting/northing separator\n\t  var remainder = length - i;\n\n\t  if (remainder % 2 !== 0) {\n\t    throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n\t  }\n\n\t  var sep = remainder / 2;\n\n\t  var sepEasting = 0.0;\n\t  var sepNorthing = 0.0;\n\t  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n\t  if (sep > 0) {\n\t    accuracyBonus = 100000.0 / Math.pow(10, sep);\n\t    sepEastingString = mgrsString.substring(i, i + sep);\n\t    sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n\t    sepNorthingString = mgrsString.substring(i + sep);\n\t    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n\t  }\n\n\t  easting = sepEasting + east100k;\n\t  northing = sepNorthing + north100k;\n\n\t  return {\n\t    easting: easting,\n\t    northing: northing,\n\t    zoneLetter: zoneLetter,\n\t    zoneNumber: zoneNumber,\n\t    accuracy: accuracyBonus\n\t  };\n\t}\n\n\t/**\n\t * Given the first letter from a two-letter MGRS 100k zone, and given the\n\t * MGRS table set for the zone number, figure out the easting value that\n\t * should be added to the other, secondary easting value.\n\t *\n\t * @private\n\t * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n\t * @param {number} set The MGRS table set for the zone number.\n\t * @return {number} The easting value for the given letter and set.\n\t */\n\tfunction getEastingFromChar(e, set) {\n\t  // colOrigin is the letter at the origin of the set for the\n\t  // column\n\t  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n\t  var eastingValue = 100000.0;\n\t  var rewindMarker = false;\n\n\t  while (curCol !== e.charCodeAt(0)) {\n\t    curCol++;\n\t    if (curCol === I) {\n\t      curCol++;\n\t    }\n\t    if (curCol === O) {\n\t      curCol++;\n\t    }\n\t    if (curCol > Z) {\n\t      if (rewindMarker) {\n\t        throw (\"Bad character: \" + e);\n\t      }\n\t      curCol = A;\n\t      rewindMarker = true;\n\t    }\n\t    eastingValue += 100000.0;\n\t  }\n\n\t  return eastingValue;\n\t}\n\n\t/**\n\t * Given the second letter from a two-letter MGRS 100k zone, and given the\n\t * MGRS table set for the zone number, figure out the northing value that\n\t * should be added to the other, secondary northing value. You have to\n\t * remember that Northings are determined from the equator, and the vertical\n\t * cycle of letters mean a 2000000 additional northing meters. This happens\n\t * approx. every 18 degrees of latitude. This method does *NOT* count any\n\t * additional northings. You have to figure out how many 2000000 meters need\n\t * to be added for the zone letter of the MGRS coordinate.\n\t *\n\t * @private\n\t * @param {char} n Second letter of the MGRS 100k zone\n\t * @param {number} set The MGRS table set number, which is dependent on the\n\t *     UTM zone number.\n\t * @return {number} The northing value for the given letter and set.\n\t */\n\tfunction getNorthingFromChar(n, set) {\n\n\t  if (n > 'V') {\n\t    throw (\"MGRSPoint given invalid Northing \" + n);\n\t  }\n\n\t  // rowOrigin is the letter at the origin of the set for the\n\t  // column\n\t  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n\t  var northingValue = 0.0;\n\t  var rewindMarker = false;\n\n\t  while (curRow !== n.charCodeAt(0)) {\n\t    curRow++;\n\t    if (curRow === I) {\n\t      curRow++;\n\t    }\n\t    if (curRow === O) {\n\t      curRow++;\n\t    }\n\t    // fixing a bug making whole application hang in this loop\n\t    // when 'n' is a wrong character\n\t    if (curRow > V) {\n\t      if (rewindMarker) { // making sure that this loop ends\n\t        throw (\"Bad character: \" + n);\n\t      }\n\t      curRow = A;\n\t      rewindMarker = true;\n\t    }\n\t    northingValue += 100000.0;\n\t  }\n\n\t  return northingValue;\n\t}\n\n\t/**\n\t * The function getMinNorthing returns the minimum northing value of a MGRS\n\t * zone.\n\t *\n\t * Ported from Geotrans' c Lattitude_Band_Value structure table.\n\t *\n\t * @private\n\t * @param {char} zoneLetter The MGRS zone to get the min northing for.\n\t * @return {number}\n\t */\n\tfunction getMinNorthing(zoneLetter) {\n\t  var northing;\n\t  switch (zoneLetter) {\n\t  case 'C':\n\t    northing = 1100000.0;\n\t    break;\n\t  case 'D':\n\t    northing = 2000000.0;\n\t    break;\n\t  case 'E':\n\t    northing = 2800000.0;\n\t    break;\n\t  case 'F':\n\t    northing = 3700000.0;\n\t    break;\n\t  case 'G':\n\t    northing = 4600000.0;\n\t    break;\n\t  case 'H':\n\t    northing = 5500000.0;\n\t    break;\n\t  case 'J':\n\t    northing = 6400000.0;\n\t    break;\n\t  case 'K':\n\t    northing = 7300000.0;\n\t    break;\n\t  case 'L':\n\t    northing = 8200000.0;\n\t    break;\n\t  case 'M':\n\t    northing = 9100000.0;\n\t    break;\n\t  case 'N':\n\t    northing = 0.0;\n\t    break;\n\t  case 'P':\n\t    northing = 800000.0;\n\t    break;\n\t  case 'Q':\n\t    northing = 1700000.0;\n\t    break;\n\t  case 'R':\n\t    northing = 2600000.0;\n\t    break;\n\t  case 'S':\n\t    northing = 3500000.0;\n\t    break;\n\t  case 'T':\n\t    northing = 4400000.0;\n\t    break;\n\t  case 'U':\n\t    northing = 5300000.0;\n\t    break;\n\t  case 'V':\n\t    northing = 6200000.0;\n\t    break;\n\t  case 'W':\n\t    northing = 7000000.0;\n\t    break;\n\t  case 'X':\n\t    northing = 7900000.0;\n\t    break;\n\t  default:\n\t    northing = -1.0;\n\t  }\n\t  if (northing >= 0.0) {\n\t    return northing;\n\t  }\n\t  else {\n\t    throw (\"Invalid zone letter: \" + zoneLetter);\n\t  }\n\n\t}\n\n\tfunction Point(x, y, z) {\n\t  if (!(this instanceof Point)) {\n\t    return new Point(x, y, z);\n\t  }\n\t  if (Array.isArray(x)) {\n\t    this.x = x[0];\n\t    this.y = x[1];\n\t    this.z = x[2] || 0.0;\n\t  } else if(typeof x === 'object') {\n\t    this.x = x.x;\n\t    this.y = x.y;\n\t    this.z = x.z || 0.0;\n\t  } else if (typeof x === 'string' && typeof y === 'undefined') {\n\t    var coords = x.split(',');\n\t    this.x = parseFloat(coords[0], 10);\n\t    this.y = parseFloat(coords[1], 10);\n\t    this.z = parseFloat(coords[2], 10) || 0.0;\n\t  } else {\n\t    this.x = x;\n\t    this.y = y;\n\t    this.z = z || 0.0;\n\t  }\n\t  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n\t}\n\n\tPoint.fromMGRS = function(mgrsStr) {\n\t  return new Point(toPoint$1(mgrsStr));\n\t};\n\tPoint.prototype.toMGRS = function(accuracy) {\n\t  return forward$1([this.x, this.y], accuracy);\n\t};\n\n\tvar version = \"2.5.0\";\n\n\tvar C00 = 1;\n\tvar C02 = 0.25;\n\tvar C04 = 0.046875;\n\tvar C06 = 0.01953125;\n\tvar C08 = 0.01068115234375;\n\tvar C22 = 0.75;\n\tvar C44 = 0.46875;\n\tvar C46 = 0.01302083333333333333;\n\tvar C48 = 0.00712076822916666666;\n\tvar C66 = 0.36458333333333333333;\n\tvar C68 = 0.00569661458333333333;\n\tvar C88 = 0.3076171875;\n\n\tvar pj_enfn = function(es) {\n\t  var en = [];\n\t  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n\t  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n\t  var t = es * es;\n\t  en[2] = t * (C44 - es * (C46 + es * C48));\n\t  t *= es;\n\t  en[3] = t * (C66 - es * C68);\n\t  en[4] = t * es * C88;\n\t  return en;\n\t};\n\n\tvar pj_mlfn = function(phi, sphi, cphi, en) {\n\t  cphi *= sphi;\n\t  sphi *= sphi;\n\t  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n\t};\n\n\tvar MAX_ITER = 20;\n\n\tvar pj_inv_mlfn = function(arg, es, en) {\n\t  var k = 1 / (1 - es);\n\t  var phi = arg;\n\t  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n\t    var s = Math.sin(phi);\n\t    var t = 1 - es * s * s;\n\t    //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n\t    //phi -= t * (t * Math.sqrt(t)) * k;\n\t    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n\t    phi -= t;\n\t    if (Math.abs(t) < EPSLN) {\n\t      return phi;\n\t    }\n\t  }\n\t  //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n\t  return phi;\n\t};\n\n\t// Heavily based on this tmerc projection implementation\n\t// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\n\tfunction init$2() {\n\t  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n\t  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n\t  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n\t  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n\t  if (this.es) {\n\t    this.en = pj_enfn(this.es);\n\t    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n\t  }\n\t}\n\n\t/**\n\t    Transverse Mercator Forward  - long/lat to x/y\n\t    long/lat in radians\n\t  */\n\tfunction forward$2(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  var con;\n\t  var x, y;\n\t  var sin_phi = Math.sin(lat);\n\t  var cos_phi = Math.cos(lat);\n\n\t  if (!this.es) {\n\t    var b = cos_phi * Math.sin(delta_lon);\n\n\t    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n\t      return (93);\n\t    }\n\t    else {\n\t      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n\t      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n\t      b = Math.abs(y);\n\n\t      if (b >= 1) {\n\t        if ((b - 1) > EPSLN) {\n\t          return (93);\n\t        }\n\t        else {\n\t          y = 0;\n\t        }\n\t      }\n\t      else {\n\t        y = Math.acos(y);\n\t      }\n\n\t      if (lat < 0) {\n\t        y = -y;\n\t      }\n\n\t      y = this.a * this.k0 * (y - this.lat0) + this.y0;\n\t    }\n\t  }\n\t  else {\n\t    var al = cos_phi * delta_lon;\n\t    var als = Math.pow(al, 2);\n\t    var c = this.ep2 * Math.pow(cos_phi, 2);\n\t    var cs = Math.pow(c, 2);\n\t    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n\t    var t = Math.pow(tq, 2);\n\t    var ts = Math.pow(t, 2);\n\t    con = 1 - this.es * Math.pow(sin_phi, 2);\n\t    al = al / Math.sqrt(con);\n\t    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n\t    x = this.a * (this.k0 * al * (1 +\n\t      als / 6 * (1 - t + c +\n\t      als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n\t      als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n\t      this.x0;\n\n\t    y = this.a * (this.k0 * (ml - this.ml0 +\n\t      sin_phi * delta_lon * al / 2 * (1 +\n\t      als / 12 * (5 - t + 9 * c + 4 * cs +\n\t      als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n\t      als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n\t      this.y0;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\n\t  return p;\n\t}\n\n\t/**\n\t    Transverse Mercator Inverse  -  x/y to long/lat\n\t  */\n\tfunction inverse$2(p) {\n\t  var con, phi;\n\t  var lat, lon;\n\t  var x = (p.x - this.x0) * (1 / this.a);\n\t  var y = (p.y - this.y0) * (1 / this.a);\n\n\t  if (!this.es) {\n\t    var f = Math.exp(x / this.k0);\n\t    var g = 0.5 * (f - 1 / f);\n\t    var temp = this.lat0 + y / this.k0;\n\t    var h = Math.cos(temp);\n\t    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n\t    lat = Math.asin(con);\n\n\t    if (y < 0) {\n\t      lat = -lat;\n\t    }\n\n\t    if ((g === 0) && (h === 0)) {\n\t      lon = 0;\n\t    }\n\t    else {\n\t      lon = adjust_lon(Math.atan2(g, h) + this.long0);\n\t    }\n\t  }\n\t  else { // ellipsoidal form\n\t    con = this.ml0 + y / this.k0;\n\t    phi = pj_inv_mlfn(con, this.es, this.en);\n\n\t    if (Math.abs(phi) < HALF_PI) {\n\t      var sin_phi = Math.sin(phi);\n\t      var cos_phi = Math.cos(phi);\n\t      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n\t      var c = this.ep2 * Math.pow(cos_phi, 2);\n\t      var cs = Math.pow(c, 2);\n\t      var t = Math.pow(tan_phi, 2);\n\t      var ts = Math.pow(t, 2);\n\t      con = 1 - this.es * Math.pow(sin_phi, 2);\n\t      var d = x * Math.sqrt(con) / this.k0;\n\t      var ds = Math.pow(d, 2);\n\t      con = con * tan_phi;\n\n\t      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n\t        ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n\t        ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n\t        ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n\t      lon = adjust_lon(this.long0 + (d * (1 -\n\t        ds / 6 * (1 + 2 * t + c -\n\t        ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n\t        ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n\t    }\n\t    else {\n\t      lat = HALF_PI * sign(y);\n\t      lon = 0;\n\t    }\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$3 = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\n\tvar tmerc = {\n\t  init: init$2,\n\t  forward: forward$2,\n\t  inverse: inverse$2,\n\t  names: names$3\n\t};\n\n\tvar sinh = function(x) {\n\t  var r = Math.exp(x);\n\t  r = (r - 1 / r) / 2;\n\t  return r;\n\t};\n\n\tvar hypot = function(x, y) {\n\t  x = Math.abs(x);\n\t  y = Math.abs(y);\n\t  var a = Math.max(x, y);\n\t  var b = Math.min(x, y) / (a ? a : 1);\n\n\t  return a * Math.sqrt(1 + Math.pow(b, 2));\n\t};\n\n\tvar log1py = function(x) {\n\t  var y = 1 + x;\n\t  var z = y - 1;\n\n\t  return z === 0 ? x : x * Math.log(y) / z;\n\t};\n\n\tvar asinhy = function(x) {\n\t  var y = Math.abs(x);\n\t  y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n\t  return x < 0 ? -y : y;\n\t};\n\n\tvar gatg = function(pp, B) {\n\t  var cos_2B = 2 * Math.cos(2 * B);\n\t  var i = pp.length - 1;\n\t  var h1 = pp[i];\n\t  var h2 = 0;\n\t  var h;\n\n\t  while (--i >= 0) {\n\t    h = -h2 + cos_2B * h1 + pp[i];\n\t    h2 = h1;\n\t    h1 = h;\n\t  }\n\n\t  return (B + h * Math.sin(2 * B));\n\t};\n\n\tvar clens = function(pp, arg_r) {\n\t  var r = 2 * Math.cos(arg_r);\n\t  var i = pp.length - 1;\n\t  var hr1 = pp[i];\n\t  var hr2 = 0;\n\t  var hr;\n\n\t  while (--i >= 0) {\n\t    hr = -hr2 + r * hr1 + pp[i];\n\t    hr2 = hr1;\n\t    hr1 = hr;\n\t  }\n\n\t  return Math.sin(arg_r) * hr;\n\t};\n\n\tvar cosh = function(x) {\n\t  var r = Math.exp(x);\n\t  r = (r + 1 / r) / 2;\n\t  return r;\n\t};\n\n\tvar clens_cmplx = function(pp, arg_r, arg_i) {\n\t  var sin_arg_r = Math.sin(arg_r);\n\t  var cos_arg_r = Math.cos(arg_r);\n\t  var sinh_arg_i = sinh(arg_i);\n\t  var cosh_arg_i = cosh(arg_i);\n\t  var r = 2 * cos_arg_r * cosh_arg_i;\n\t  var i = -2 * sin_arg_r * sinh_arg_i;\n\t  var j = pp.length - 1;\n\t  var hr = pp[j];\n\t  var hi1 = 0;\n\t  var hr1 = 0;\n\t  var hi = 0;\n\t  var hr2;\n\t  var hi2;\n\n\t  while (--j >= 0) {\n\t    hr2 = hr1;\n\t    hi2 = hi1;\n\t    hr1 = hr;\n\t    hi1 = hi;\n\t    hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n\t    hi = -hi2 + i * hr1 + r * hi1;\n\t  }\n\n\t  r = sin_arg_r * cosh_arg_i;\n\t  i = cos_arg_r * sinh_arg_i;\n\n\t  return [r * hr - i * hi, r * hi + i * hr];\n\t};\n\n\t// Heavily based on this etmerc projection implementation\n\t// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\n\tfunction init$3() {\n\t  if (this.es === undefined || this.es <= 0) {\n\t    throw new Error('incorrect elliptical usage');\n\t  }\n\n\t  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n\t  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n\t  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n\t  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n\t  this.cgb = [];\n\t  this.cbg = [];\n\t  this.utg = [];\n\t  this.gtu = [];\n\n\t  var f = this.es / (1 + Math.sqrt(1 - this.es));\n\t  var n = f / (2 - f);\n\t  var np = n;\n\n\t  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n\t  this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n\t  np = np * n;\n\t  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n\t  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n\t  np = np * n;\n\t  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n\t  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n\t  np = np * n;\n\t  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n\t  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n\t  np = np * n;\n\t  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n\t  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n\t  np = np * n;\n\t  this.cgb[5] = np * (601676 / 22275);\n\t  this.cbg[5] = np * (444337 / 155925);\n\n\t  np = Math.pow(n, 2);\n\t  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n\t  this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n\t  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n\t  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n\t  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n\t  np = np * n;\n\t  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n\t  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n\t  np = np * n;\n\t  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n\t  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n\t  np = np * n;\n\t  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n\t  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n\t  np = np * n;\n\t  this.utg[5] = np * (-20648693 / 638668800);\n\t  this.gtu[5] = np * (212378941 / 319334400);\n\n\t  var Z = gatg(this.cbg, this.lat0);\n\t  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n\t}\n\n\tfunction forward$3(p) {\n\t  var Ce = adjust_lon(p.x - this.long0);\n\t  var Cn = p.y;\n\n\t  Cn = gatg(this.cbg, Cn);\n\t  var sin_Cn = Math.sin(Cn);\n\t  var cos_Cn = Math.cos(Cn);\n\t  var sin_Ce = Math.sin(Ce);\n\t  var cos_Ce = Math.cos(Ce);\n\n\t  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n\t  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n\t  Ce = asinhy(Math.tan(Ce));\n\n\t  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n\t  Cn = Cn + tmp[0];\n\t  Ce = Ce + tmp[1];\n\n\t  var x;\n\t  var y;\n\n\t  if (Math.abs(Ce) <= 2.623395162778) {\n\t    x = this.a * (this.Qn * Ce) + this.x0;\n\t    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n\t  }\n\t  else {\n\t    x = Infinity;\n\t    y = Infinity;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\n\t  return p;\n\t}\n\n\tfunction inverse$3(p) {\n\t  var Ce = (p.x - this.x0) * (1 / this.a);\n\t  var Cn = (p.y - this.y0) * (1 / this.a);\n\n\t  Cn = (Cn - this.Zb) / this.Qn;\n\t  Ce = Ce / this.Qn;\n\n\t  var lon;\n\t  var lat;\n\n\t  if (Math.abs(Ce) <= 2.623395162778) {\n\t    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n\t    Cn = Cn + tmp[0];\n\t    Ce = Ce + tmp[1];\n\t    Ce = Math.atan(sinh(Ce));\n\n\t    var sin_Cn = Math.sin(Cn);\n\t    var cos_Cn = Math.cos(Cn);\n\t    var sin_Ce = Math.sin(Ce);\n\t    var cos_Ce = Math.cos(Ce);\n\n\t    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n\t    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n\t    lon = adjust_lon(Ce + this.long0);\n\t    lat = gatg(this.cgb, Cn);\n\t  }\n\t  else {\n\t    lon = Infinity;\n\t    lat = Infinity;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$4 = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\"];\n\tvar etmerc = {\n\t  init: init$3,\n\t  forward: forward$3,\n\t  inverse: inverse$3,\n\t  names: names$4\n\t};\n\n\tvar adjust_zone = function(zone, lon) {\n\t  if (zone === undefined) {\n\t    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n\t    if (zone < 0) {\n\t      return 0;\n\t    } else if (zone > 60) {\n\t      return 60;\n\t    }\n\t  }\n\t  return zone;\n\t};\n\n\tvar dependsOn = 'etmerc';\n\tfunction init$4() {\n\t  var zone = adjust_zone(this.zone, this.long0);\n\t  if (zone === undefined) {\n\t    throw new Error('unknown utm zone');\n\t  }\n\t  this.lat0 = 0;\n\t  this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;\n\t  this.x0 = 500000;\n\t  this.y0 = this.utmSouth ? 10000000 : 0;\n\t  this.k0 = 0.9996;\n\n\t  etmerc.init.apply(this);\n\t  this.forward = etmerc.forward;\n\t  this.inverse = etmerc.inverse;\n\t}\n\n\tvar names$5 = [\"Universal Transverse Mercator System\", \"utm\"];\n\tvar utm = {\n\t  init: init$4,\n\t  names: names$5,\n\t  dependsOn: dependsOn\n\t};\n\n\tvar srat = function(esinp, exp) {\n\t  return (Math.pow((1 - esinp) / (1 + esinp), exp));\n\t};\n\n\tvar MAX_ITER$1 = 20;\n\tfunction init$6() {\n\t  var sphi = Math.sin(this.lat0);\n\t  var cphi = Math.cos(this.lat0);\n\t  cphi *= cphi;\n\t  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n\t  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n\t  this.phic0 = Math.asin(sphi / this.C);\n\t  this.ratexp = 0.5 * this.C * this.e;\n\t  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n\t}\n\n\tfunction forward$5(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n\t  p.x = this.C * lon;\n\t  return p;\n\t}\n\n\tfunction inverse$5(p) {\n\t  var DEL_TOL = 1e-14;\n\t  var lon = p.x / this.C;\n\t  var lat = p.y;\n\t  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n\t  for (var i = MAX_ITER$1; i > 0; --i) {\n\t    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n\t    if (Math.abs(lat - p.y) < DEL_TOL) {\n\t      break;\n\t    }\n\t    p.y = lat;\n\t  }\n\t  /* convergence failed */\n\t  if (!i) {\n\t    return null;\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$7 = [\"gauss\"];\n\tvar gauss = {\n\t  init: init$6,\n\t  forward: forward$5,\n\t  inverse: inverse$5,\n\t  names: names$7\n\t};\n\n\tfunction init$5() {\n\t  gauss.init.apply(this);\n\t  if (!this.rc) {\n\t    return;\n\t  }\n\t  this.sinc0 = Math.sin(this.phic0);\n\t  this.cosc0 = Math.cos(this.phic0);\n\t  this.R2 = 2 * this.rc;\n\t  if (!this.title) {\n\t    this.title = \"Oblique Stereographic Alternative\";\n\t  }\n\t}\n\n\tfunction forward$4(p) {\n\t  var sinc, cosc, cosl, k;\n\t  p.x = adjust_lon(p.x - this.long0);\n\t  gauss.forward.apply(this, [p]);\n\t  sinc = Math.sin(p.y);\n\t  cosc = Math.cos(p.y);\n\t  cosl = Math.cos(p.x);\n\t  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n\t  p.x = k * cosc * Math.sin(p.x);\n\t  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n\t  p.x = this.a * p.x + this.x0;\n\t  p.y = this.a * p.y + this.y0;\n\t  return p;\n\t}\n\n\tfunction inverse$4(p) {\n\t  var sinc, cosc, lon, lat, rho;\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  p.x /= this.k0;\n\t  p.y /= this.k0;\n\t  if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n\t    var c = 2 * Math.atan2(rho, this.R2);\n\t    sinc = Math.sin(c);\n\t    cosc = Math.cos(c);\n\t    lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n\t    lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n\t  }\n\t  else {\n\t    lat = this.phic0;\n\t    lon = 0;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  gauss.inverse.apply(this, [p]);\n\t  p.x = adjust_lon(p.x + this.long0);\n\t  return p;\n\t}\n\n\tvar names$6 = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\n\tvar sterea = {\n\t  init: init$5,\n\t  forward: forward$4,\n\t  inverse: inverse$4,\n\t  names: names$6\n\t};\n\n\tfunction ssfn_(phit, sinphi, eccen) {\n\t  sinphi *= eccen;\n\t  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n\t}\n\n\tfunction init$7() {\n\t  this.coslat0 = Math.cos(this.lat0);\n\t  this.sinlat0 = Math.sin(this.lat0);\n\t  if (this.sphere) {\n\t    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n\t      this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      if (this.lat0 > 0) {\n\t        //North pole\n\t        //trace('stere:north pole');\n\t        this.con = 1;\n\t      }\n\t      else {\n\t        //South pole\n\t        //trace('stere:south pole');\n\t        this.con = -1;\n\t      }\n\t    }\n\t    this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n\t    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n\t      this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n\t    }\n\t    this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n\t    this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n\t    this.cosX0 = Math.cos(this.X0);\n\t    this.sinX0 = Math.sin(this.X0);\n\t  }\n\t}\n\n\t// Stereographic forward equations--mapping lat,long to x,y\n\tfunction forward$6(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var sinlat = Math.sin(lat);\n\t  var coslat = Math.cos(lat);\n\t  var A, X, sinX, cosX, ts, rh;\n\t  var dlon = adjust_lon(lon - this.long0);\n\n\t  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n\t    //case of the origine point\n\t    //trace('stere:this is the origin point');\n\t    p.x = NaN;\n\t    p.y = NaN;\n\t    return p;\n\t  }\n\t  if (this.sphere) {\n\t    //trace('stere:sphere case');\n\t    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n\t    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n\t    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n\t    return p;\n\t  }\n\t  else {\n\t    X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n\t    cosX = Math.cos(X);\n\t    sinX = Math.sin(X);\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n\t      rh = 2 * this.a * this.k0 * ts / this.cons;\n\t      p.x = this.x0 + rh * Math.sin(lon - this.long0);\n\t      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n\t      //trace(p.toString());\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sinlat0) < EPSLN) {\n\t      //Eq\n\t      //trace('stere:equateur');\n\t      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n\t      p.y = A * sinX;\n\t    }\n\t    else {\n\t      //other case\n\t      //trace('stere:normal case');\n\t      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n\t      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n\t    }\n\t    p.x = A * cosX * Math.sin(dlon) + this.x0;\n\t  }\n\t  //trace(p.toString());\n\t  return p;\n\t}\n\n\t//* Stereographic inverse equations--mapping x,y to lat/long\n\tfunction inverse$6(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var lon, lat, ts, ce, Chi;\n\t  var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  if (this.sphere) {\n\t    var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n\t    lon = this.long0;\n\t    lat = this.lat0;\n\t    if (rh <= EPSLN) {\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n\t    if (Math.abs(this.coslat0) < EPSLN) {\n\t      if (this.lat0 > 0) {\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t      }\n\t      else {\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n\t      }\n\t    }\n\t    else {\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n\t    }\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      if (rh <= EPSLN) {\n\t        lat = this.lat0;\n\t        lon = this.long0;\n\t        p.x = lon;\n\t        p.y = lat;\n\t        //trace(p.toString());\n\t        return p;\n\t      }\n\t      p.x *= this.con;\n\t      p.y *= this.con;\n\t      ts = rh * this.cons / (2 * this.a * this.k0);\n\t      lat = this.con * phi2z(this.e, ts);\n\t      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t    }\n\t    else {\n\t      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n\t      lon = this.long0;\n\t      if (rh <= EPSLN) {\n\t        Chi = this.X0;\n\t      }\n\t      else {\n\t        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n\t      }\n\t      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n\t    }\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  //trace(p.toString());\n\t  return p;\n\n\t}\n\n\tvar names$8 = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\n\tvar stere = {\n\t  init: init$7,\n\t  forward: forward$6,\n\t  inverse: inverse$6,\n\t  names: names$8,\n\t  ssfn_: ssfn_\n\t};\n\n\t/*\n\t  references:\n\t    Formules et constantes pour le Calcul pour la\n\t    projection cylindrique conforme à axe oblique et pour la transformation entre\n\t    des systèmes de référence.\n\t    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n\t  */\n\n\tfunction init$8() {\n\t  var phy0 = this.lat0;\n\t  this.lambda0 = this.long0;\n\t  var sinPhy0 = Math.sin(phy0);\n\t  var semiMajorAxis = this.a;\n\t  var invF = this.rf;\n\t  var flattening = 1 / invF;\n\t  var e2 = 2 * flattening - Math.pow(flattening, 2);\n\t  var e = this.e = Math.sqrt(e2);\n\t  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n\t  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n\t  this.b0 = Math.asin(sinPhy0 / this.alpha);\n\t  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n\t  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n\t  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n\t  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n\t}\n\n\tfunction forward$7(p) {\n\t  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n\t  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n\t  var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n\t  // spheric latitude\n\t  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n\t  // spheric longitude\n\t  var I = this.alpha * (p.x - this.lambda0);\n\n\t  // psoeudo equatorial rotation\n\t  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n\t  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n\t  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n\t  p.x = this.R * rotI + this.x0;\n\t  return p;\n\t}\n\n\tfunction inverse$7(p) {\n\t  var Y = p.x - this.x0;\n\t  var X = p.y - this.y0;\n\n\t  var rotI = Y / this.R;\n\t  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n\t  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n\t  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n\t  var lambda = this.lambda0 + I / this.alpha;\n\n\t  var S = 0;\n\t  var phy = b;\n\t  var prevPhy = -1000;\n\t  var iteration = 0;\n\t  while (Math.abs(phy - prevPhy) > 0.0000001) {\n\t    if (++iteration > 20) {\n\t      //...reportError(\"omercFwdInfinity\");\n\t      return;\n\t    }\n\t    //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n\t    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n\t    prevPhy = phy;\n\t    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n\t  }\n\n\t  p.x = lambda;\n\t  p.y = phy;\n\t  return p;\n\t}\n\n\tvar names$9 = [\"somerc\"];\n\tvar somerc = {\n\t  init: init$8,\n\t  forward: forward$7,\n\t  inverse: inverse$7,\n\t  names: names$9\n\t};\n\n\t/* Initialize the Oblique Mercator  projection\n\t    ------------------------------------------*/\n\tfunction init$9() {\n\t  this.no_off = this.no_off || false;\n\t  this.no_rot = this.no_rot || false;\n\n\t  if (isNaN(this.k0)) {\n\t    this.k0 = 1;\n\t  }\n\t  var sinlat = Math.sin(this.lat0);\n\t  var coslat = Math.cos(this.lat0);\n\t  var con = this.e * sinlat;\n\n\t  this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n\t  this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n\t  var t0 = tsfnz(this.e, this.lat0, sinlat);\n\t  var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n\t  if (dl * dl < 1) {\n\t    dl = 1;\n\t  }\n\t  var fl;\n\t  var gl;\n\t  if (!isNaN(this.longc)) {\n\t    //Central point and azimuth method\n\n\t    if (this.lat0 >= 0) {\n\t      fl = dl + Math.sqrt(dl * dl - 1);\n\t    }\n\t    else {\n\t      fl = dl - Math.sqrt(dl * dl - 1);\n\t    }\n\t    this.el = fl * Math.pow(t0, this.bl);\n\t    gl = 0.5 * (fl - 1 / fl);\n\t    this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n\t    this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n\t  }\n\t  else {\n\t    //2 points method\n\t    var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n\t    var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n\t    if (this.lat0 >= 0) {\n\t      this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n\t    }\n\t    else {\n\t      this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n\t    }\n\t    var hl = Math.pow(t1, this.bl);\n\t    var ll = Math.pow(t2, this.bl);\n\t    fl = this.el / hl;\n\t    gl = 0.5 * (fl - 1 / fl);\n\t    var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n\t    var pl = (ll - hl) / (ll + hl);\n\t    var dlon12 = adjust_lon(this.long1 - this.long2);\n\t    this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n\t    this.long0 = adjust_lon(this.long0);\n\t    var dlon10 = adjust_lon(this.long1 - this.long0);\n\t    this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n\t    this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n\t  }\n\n\t  if (this.no_off) {\n\t    this.uc = 0;\n\t  }\n\t  else {\n\t    if (this.lat0 >= 0) {\n\t      this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n\t    }\n\t    else {\n\t      this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n\t    }\n\t  }\n\n\t}\n\n\t/* Oblique Mercator forward equations--mapping lat,long to x,y\n\t    ----------------------------------------------------------*/\n\tfunction forward$8(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var us, vs;\n\t  var con;\n\t  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n\t    if (lat > 0) {\n\t      con = -1;\n\t    }\n\t    else {\n\t      con = 1;\n\t    }\n\t    vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n\t    us = -1 * con * HALF_PI * this.al / this.bl;\n\t  }\n\t  else {\n\t    var t = tsfnz(this.e, lat, Math.sin(lat));\n\t    var ql = this.el / Math.pow(t, this.bl);\n\t    var sl = 0.5 * (ql - 1 / ql);\n\t    var tl = 0.5 * (ql + 1 / ql);\n\t    var vl = Math.sin(this.bl * (dlon));\n\t    var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n\t    if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n\t      vs = Number.POSITIVE_INFINITY;\n\t    }\n\t    else {\n\t      vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n\t    }\n\t    if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n\t      us = this.al * this.bl * (dlon);\n\t    }\n\t    else {\n\t      us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n\t    }\n\t  }\n\n\t  if (this.no_rot) {\n\t    p.x = this.x0 + us;\n\t    p.y = this.y0 + vs;\n\t  }\n\t  else {\n\n\t    us -= this.uc;\n\t    p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n\t    p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n\t  }\n\t  return p;\n\t}\n\n\tfunction inverse$8(p) {\n\t  var us, vs;\n\t  if (this.no_rot) {\n\t    vs = p.y - this.y0;\n\t    us = p.x - this.x0;\n\t  }\n\t  else {\n\t    vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n\t    us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n\t    us += this.uc;\n\t  }\n\t  var qp = Math.exp(-1 * this.bl * vs / this.al);\n\t  var sp = 0.5 * (qp - 1 / qp);\n\t  var tp = 0.5 * (qp + 1 / qp);\n\t  var vp = Math.sin(this.bl * us / this.al);\n\t  var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n\t  var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n\t  if (Math.abs(up - 1) < EPSLN) {\n\t    p.x = this.long0;\n\t    p.y = HALF_PI;\n\t  }\n\t  else if (Math.abs(up + 1) < EPSLN) {\n\t    p.x = this.long0;\n\t    p.y = -1 * HALF_PI;\n\t  }\n\t  else {\n\t    p.y = phi2z(this.e, ts);\n\t    p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n\t  }\n\t  return p;\n\t}\n\n\tvar names$10 = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];\n\tvar omerc = {\n\t  init: init$9,\n\t  forward: forward$8,\n\t  inverse: inverse$8,\n\t  names: names$10\n\t};\n\n\tfunction init$10() {\n\n\t  // array of:  r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n\t  //double c_lat;                   /* center latitude                      */\n\t  //double c_lon;                   /* center longitude                     */\n\t  //double lat1;                    /* first standard parallel              */\n\t  //double lat2;                    /* second standard parallel             */\n\t  //double r_maj;                   /* major axis                           */\n\t  //double r_min;                   /* minor axis                           */\n\t  //double false_east;              /* x offset in meters                   */\n\t  //double false_north;             /* y offset in meters                   */\n\n\t  if (!this.lat2) {\n\t    this.lat2 = this.lat1;\n\t  } //if lat2 is not defined\n\t  if (!this.k0) {\n\t    this.k0 = 1;\n\t  }\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  // Standard Parallels cannot be equal and on opposite sides of the equator\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\n\t  var temp = this.b / this.a;\n\t  this.e = Math.sqrt(1 - temp * temp);\n\n\t  var sin1 = Math.sin(this.lat1);\n\t  var cos1 = Math.cos(this.lat1);\n\t  var ms1 = msfnz(this.e, sin1, cos1);\n\t  var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n\t  var sin2 = Math.sin(this.lat2);\n\t  var cos2 = Math.cos(this.lat2);\n\t  var ms2 = msfnz(this.e, sin2, cos2);\n\t  var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n\t  var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n\t  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n\t    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n\t  }\n\t  else {\n\t    this.ns = sin1;\n\t  }\n\t  if (isNaN(this.ns)) {\n\t    this.ns = sin1;\n\t  }\n\t  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n\t  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n\t  if (!this.title) {\n\t    this.title = \"Lambert Conformal Conic\";\n\t  }\n\t}\n\n\t// Lambert Conformal conic forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$9(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  // singular cases :\n\t  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n\t    lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n\t  }\n\n\t  var con = Math.abs(Math.abs(lat) - HALF_PI);\n\t  var ts, rh1;\n\t  if (con > EPSLN) {\n\t    ts = tsfnz(this.e, lat, Math.sin(lat));\n\t    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n\t  }\n\t  else {\n\t    con = lat * this.ns;\n\t    if (con <= 0) {\n\t      return null;\n\t    }\n\t    rh1 = 0;\n\t  }\n\t  var theta = this.ns * adjust_lon(lon - this.long0);\n\t  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n\t  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n\t  return p;\n\t}\n\n\t// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$9(p) {\n\n\t  var rh1, con, ts;\n\t  var lat, lon;\n\t  var x = (p.x - this.x0) / this.k0;\n\t  var y = (this.rh - (p.y - this.y0) / this.k0);\n\t  if (this.ns > 0) {\n\t    rh1 = Math.sqrt(x * x + y * y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(x * x + y * y);\n\t    con = -1;\n\t  }\n\t  var theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2((con * x), (con * y));\n\t  }\n\t  if ((rh1 !== 0) || (this.ns > 0)) {\n\t    con = 1 / this.ns;\n\t    ts = Math.pow((rh1 / (this.a * this.f0)), con);\n\t    lat = phi2z(this.e, ts);\n\t    if (lat === -9999) {\n\t      return null;\n\t    }\n\t  }\n\t  else {\n\t    lat = -HALF_PI;\n\t  }\n\t  lon = adjust_lon(theta / this.ns + this.long0);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$11 = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\n\tvar lcc = {\n\t  init: init$10,\n\t  forward: forward$9,\n\t  inverse: inverse$9,\n\t  names: names$11\n\t};\n\n\tfunction init$11() {\n\t  this.a = 6377397.155;\n\t  this.es = 0.006674372230614;\n\t  this.e = Math.sqrt(this.es);\n\t  if (!this.lat0) {\n\t    this.lat0 = 0.863937979737193;\n\t  }\n\t  if (!this.long0) {\n\t    this.long0 = 0.7417649320975901 - 0.308341501185665;\n\t  }\n\t  /* if scale not set default to 0.9999 */\n\t  if (!this.k0) {\n\t    this.k0 = 0.9999;\n\t  }\n\t  this.s45 = 0.785398163397448; /* 45 */\n\t  this.s90 = 2 * this.s45;\n\t  this.fi0 = this.lat0;\n\t  this.e2 = this.es;\n\t  this.e = Math.sqrt(this.e2);\n\t  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n\t  this.uq = 1.04216856380474;\n\t  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n\t  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n\t  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n\t  this.k1 = this.k0;\n\t  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n\t  this.s0 = 1.37008346281555;\n\t  this.n = Math.sin(this.s0);\n\t  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n\t  this.ad = this.s90 - this.uq;\n\t}\n\n\t/* ellipsoid */\n\t/* calculate xy from lat/lon */\n\t/* Constants, identical to inverse transform function */\n\tfunction forward$10(p) {\n\t  var gfi, u, deltav, s, d, eps, ro;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  /* Transformation */\n\t  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n\t  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n\t  deltav = -delta_lon * this.alfa;\n\t  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n\t  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n\t  eps = this.n * d;\n\t  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n\t  p.y = ro * Math.cos(eps) / 1;\n\t  p.x = ro * Math.sin(eps) / 1;\n\n\t  if (!this.czech) {\n\t    p.y *= -1;\n\t    p.x *= -1;\n\t  }\n\t  return (p);\n\t}\n\n\t/* calculate lat/lon from xy */\n\tfunction inverse$10(p) {\n\t  var u, deltav, s, d, eps, ro, fi1;\n\t  var ok;\n\n\t  /* Transformation */\n\t  /* revert y, x*/\n\t  var tmp = p.x;\n\t  p.x = p.y;\n\t  p.y = tmp;\n\t  if (!this.czech) {\n\t    p.y *= -1;\n\t    p.x *= -1;\n\t  }\n\t  ro = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  eps = Math.atan2(p.y, p.x);\n\t  d = eps / Math.sin(this.s0);\n\t  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n\t  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n\t  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n\t  p.x = this.long0 - deltav / this.alfa;\n\t  fi1 = u;\n\t  ok = 0;\n\t  var iter = 0;\n\t  do {\n\t    p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n\t    if (Math.abs(fi1 - p.y) < 0.0000000001) {\n\t      ok = 1;\n\t    }\n\t    fi1 = p.y;\n\t    iter += 1;\n\t  } while (ok === 0 && iter < 15);\n\t  if (iter >= 15) {\n\t    return null;\n\t  }\n\n\t  return (p);\n\t}\n\n\tvar names$12 = [\"Krovak\", \"krovak\"];\n\tvar krovak = {\n\t  init: init$11,\n\t  forward: forward$10,\n\t  inverse: inverse$10,\n\t  names: names$12\n\t};\n\n\tvar mlfn = function(e0, e1, e2, e3, phi) {\n\t  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n\t};\n\n\tvar e0fn = function(x) {\n\t  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n\t};\n\n\tvar e1fn = function(x) {\n\t  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n\t};\n\n\tvar e2fn = function(x) {\n\t  return (0.05859375 * x * x * (1 + 0.75 * x));\n\t};\n\n\tvar e3fn = function(x) {\n\t  return (x * x * x * (35 / 3072));\n\t};\n\n\tvar gN = function(a, e, sinphi) {\n\t  var temp = e * sinphi;\n\t  return a / Math.sqrt(1 - temp * temp);\n\t};\n\n\tvar adjust_lat = function(x) {\n\t  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n\t};\n\n\tvar imlfn = function(ml, e0, e1, e2, e3) {\n\t  var phi;\n\t  var dphi;\n\n\t  phi = ml / e0;\n\t  for (var i = 0; i < 15; i++) {\n\t    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\n\t  //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n\t  return NaN;\n\t};\n\n\tfunction init$12() {\n\t  if (!this.sphere) {\n\t    this.e0 = e0fn(this.es);\n\t    this.e1 = e1fn(this.es);\n\t    this.e2 = e2fn(this.es);\n\t    this.e3 = e3fn(this.es);\n\t    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n\t  }\n\t}\n\n\t/* Cassini forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------------------*/\n\tfunction forward$11(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var x, y;\n\t  var lam = p.x;\n\t  var phi = p.y;\n\t  lam = adjust_lon(lam - this.long0);\n\n\t  if (this.sphere) {\n\t    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n\t    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n\t  }\n\t  else {\n\t    //ellipsoid\n\t    var sinphi = Math.sin(phi);\n\t    var cosphi = Math.cos(phi);\n\t    var nl = gN(this.a, this.e, sinphi);\n\t    var tl = Math.tan(phi) * Math.tan(phi);\n\t    var al = lam * Math.cos(phi);\n\t    var asq = al * al;\n\t    var cl = this.es * cosphi * cosphi / (1 - this.es);\n\t    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n\t    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n\t    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n\t  }\n\n\t  p.x = x + this.x0;\n\t  p.y = y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$11(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var x = p.x / this.a;\n\t  var y = p.y / this.a;\n\t  var phi, lam;\n\n\t  if (this.sphere) {\n\t    var dd = y + this.lat0;\n\t    phi = Math.asin(Math.sin(dd) * Math.cos(x));\n\t    lam = Math.atan2(Math.tan(x), Math.cos(dd));\n\t  }\n\t  else {\n\t    /* ellipsoid */\n\t    var ml1 = this.ml0 / this.a + y;\n\t    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n\t    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n\t      p.x = this.long0;\n\t      p.y = HALF_PI;\n\t      if (y < 0) {\n\t        p.y *= -1;\n\t      }\n\t      return p;\n\t    }\n\t    var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n\t    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n\t    var tl1 = Math.pow(Math.tan(phi1), 2);\n\t    var dl = x * this.a / nl1;\n\t    var dsq = dl * dl;\n\t    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n\t    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n\t  }\n\n\t  p.x = adjust_lon(lam + this.long0);\n\t  p.y = adjust_lat(phi);\n\t  return p;\n\n\t}\n\n\tvar names$13 = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\n\tvar cass = {\n\t  init: init$12,\n\t  forward: forward$11,\n\t  inverse: inverse$11,\n\t  names: names$13\n\t};\n\n\tvar qsfnz = function(eccent, sinphi) {\n\t  var con;\n\t  if (eccent > 1.0e-7) {\n\t    con = eccent * sinphi;\n\t    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n\t  }\n\t  else {\n\t    return (2 * sinphi);\n\t  }\n\t};\n\n\t/*\n\t  reference\n\t    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n\t    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n\t  */\n\n\tvar S_POLE = 1;\n\n\tvar N_POLE = 2;\n\tvar EQUIT = 3;\n\tvar OBLIQ = 4;\n\n\t/* Initialize the Lambert Azimuthal Equal Area projection\n\t  ------------------------------------------------------*/\n\tfunction init$13() {\n\t  var t = Math.abs(this.lat0);\n\t  if (Math.abs(t - HALF_PI) < EPSLN) {\n\t    this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n\t  }\n\t  else if (Math.abs(t) < EPSLN) {\n\t    this.mode = this.EQUIT;\n\t  }\n\t  else {\n\t    this.mode = this.OBLIQ;\n\t  }\n\t  if (this.es > 0) {\n\t    var sinphi;\n\n\t    this.qp = qsfnz(this.e, 1);\n\t    this.mmf = 0.5 / (1 - this.es);\n\t    this.apa = authset(this.es);\n\t    switch (this.mode) {\n\t    case this.N_POLE:\n\t      this.dd = 1;\n\t      break;\n\t    case this.S_POLE:\n\t      this.dd = 1;\n\t      break;\n\t    case this.EQUIT:\n\t      this.rq = Math.sqrt(0.5 * this.qp);\n\t      this.dd = 1 / this.rq;\n\t      this.xmf = 1;\n\t      this.ymf = 0.5 * this.qp;\n\t      break;\n\t    case this.OBLIQ:\n\t      this.rq = Math.sqrt(0.5 * this.qp);\n\t      sinphi = Math.sin(this.lat0);\n\t      this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n\t      this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n\t      this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n\t      this.ymf = (this.xmf = this.rq) / this.dd;\n\t      this.xmf *= this.dd;\n\t      break;\n\t    }\n\t  }\n\t  else {\n\t    if (this.mode === this.OBLIQ) {\n\t      this.sinph0 = Math.sin(this.lat0);\n\t      this.cosph0 = Math.cos(this.lat0);\n\t    }\n\t  }\n\t}\n\n\t/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------------------*/\n\tfunction forward$12(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n\t  var lam = p.x;\n\t  var phi = p.y;\n\n\t  lam = adjust_lon(lam - this.long0);\n\t  if (this.sphere) {\n\t    sinphi = Math.sin(phi);\n\t    cosphi = Math.cos(phi);\n\t    coslam = Math.cos(lam);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n\t      if (y <= EPSLN) {\n\t        return null;\n\t      }\n\t      y = Math.sqrt(2 / y);\n\t      x = y * cosphi * Math.sin(lam);\n\t      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n\t    }\n\t    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n\t      if (this.mode === this.N_POLE) {\n\t        coslam = -coslam;\n\t      }\n\t      if (Math.abs(phi + this.phi0) < EPSLN) {\n\t        return null;\n\t      }\n\t      y = FORTPI - phi * 0.5;\n\t      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n\t      x = y * Math.sin(lam);\n\t      y *= coslam;\n\t    }\n\t  }\n\t  else {\n\t    sinb = 0;\n\t    cosb = 0;\n\t    b = 0;\n\t    coslam = Math.cos(lam);\n\t    sinlam = Math.sin(lam);\n\t    sinphi = Math.sin(phi);\n\t    q = qsfnz(this.e, sinphi);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      sinb = q / this.qp;\n\t      cosb = Math.sqrt(1 - sinb * sinb);\n\t    }\n\t    switch (this.mode) {\n\t    case this.OBLIQ:\n\t      b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n\t      break;\n\t    case this.EQUIT:\n\t      b = 1 + cosb * coslam;\n\t      break;\n\t    case this.N_POLE:\n\t      b = HALF_PI + phi;\n\t      q = this.qp - q;\n\t      break;\n\t    case this.S_POLE:\n\t      b = phi - HALF_PI;\n\t      q = this.qp + q;\n\t      break;\n\t    }\n\t    if (Math.abs(b) < EPSLN) {\n\t      return null;\n\t    }\n\t    switch (this.mode) {\n\t    case this.OBLIQ:\n\t    case this.EQUIT:\n\t      b = Math.sqrt(2 / b);\n\t      if (this.mode === this.OBLIQ) {\n\t        y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n\t      }\n\t      else {\n\t        y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n\t      }\n\t      x = this.xmf * b * cosb * sinlam;\n\t      break;\n\t    case this.N_POLE:\n\t    case this.S_POLE:\n\t      if (q >= 0) {\n\t        x = (b = Math.sqrt(q)) * sinlam;\n\t        y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n\t      }\n\t      else {\n\t        x = y = 0;\n\t      }\n\t      break;\n\t    }\n\t  }\n\n\t  p.x = this.a * x + this.x0;\n\t  p.y = this.a * y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$12(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var x = p.x / this.a;\n\t  var y = p.y / this.a;\n\t  var lam, phi, cCe, sCe, q, rho, ab;\n\t  if (this.sphere) {\n\t    var cosz = 0,\n\t      rh, sinz = 0;\n\n\t    rh = Math.sqrt(x * x + y * y);\n\t    phi = rh * 0.5;\n\t    if (phi > 1) {\n\t      return null;\n\t    }\n\t    phi = 2 * Math.asin(phi);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      sinz = Math.sin(phi);\n\t      cosz = Math.cos(phi);\n\t    }\n\t    switch (this.mode) {\n\t    case this.EQUIT:\n\t      phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n\t      x *= sinz;\n\t      y = cosz * rh;\n\t      break;\n\t    case this.OBLIQ:\n\t      phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n\t      x *= sinz * this.cosph0;\n\t      y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n\t      break;\n\t    case this.N_POLE:\n\t      y = -y;\n\t      phi = HALF_PI - phi;\n\t      break;\n\t    case this.S_POLE:\n\t      phi -= HALF_PI;\n\t      break;\n\t    }\n\t    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n\t  }\n\t  else {\n\t    ab = 0;\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      x /= this.dd;\n\t      y *= this.dd;\n\t      rho = Math.sqrt(x * x + y * y);\n\t      if (rho < EPSLN) {\n\t        p.x = 0;\n\t        p.y = this.phi0;\n\t        return p;\n\t      }\n\t      sCe = 2 * Math.asin(0.5 * rho / this.rq);\n\t      cCe = Math.cos(sCe);\n\t      x *= (sCe = Math.sin(sCe));\n\t      if (this.mode === this.OBLIQ) {\n\t        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n\t        q = this.qp * ab;\n\t        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n\t      }\n\t      else {\n\t        ab = y * sCe / rho;\n\t        q = this.qp * ab;\n\t        y = rho * cCe;\n\t      }\n\t    }\n\t    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n\t      if (this.mode === this.N_POLE) {\n\t        y = -y;\n\t      }\n\t      q = (x * x + y * y);\n\t      if (!q) {\n\t        p.x = 0;\n\t        p.y = this.phi0;\n\t        return p;\n\t      }\n\t      ab = 1 - q / this.qp;\n\t      if (this.mode === this.S_POLE) {\n\t        ab = -ab;\n\t      }\n\t    }\n\t    lam = Math.atan2(x, y);\n\t    phi = authlat(Math.asin(ab), this.apa);\n\t  }\n\n\t  p.x = adjust_lon(this.long0 + lam);\n\t  p.y = phi;\n\t  return p;\n\t}\n\n\t/* determine latitude from authalic latitude */\n\tvar P00 = 0.33333333333333333333;\n\n\tvar P01 = 0.17222222222222222222;\n\tvar P02 = 0.10257936507936507936;\n\tvar P10 = 0.06388888888888888888;\n\tvar P11 = 0.06640211640211640211;\n\tvar P20 = 0.01641501294219154443;\n\n\tfunction authset(es) {\n\t  var t;\n\t  var APA = [];\n\t  APA[0] = es * P00;\n\t  t = es * es;\n\t  APA[0] += t * P01;\n\t  APA[1] = t * P10;\n\t  t *= es;\n\t  APA[0] += t * P02;\n\t  APA[1] += t * P11;\n\t  APA[2] = t * P20;\n\t  return APA;\n\t}\n\n\tfunction authlat(beta, APA) {\n\t  var t = beta + beta;\n\t  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n\t}\n\n\tvar names$14 = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\n\tvar laea = {\n\t  init: init$13,\n\t  forward: forward$12,\n\t  inverse: inverse$12,\n\t  names: names$14,\n\t  S_POLE: S_POLE,\n\t  N_POLE: N_POLE,\n\t  EQUIT: EQUIT,\n\t  OBLIQ: OBLIQ\n\t};\n\n\tvar asinz = function(x) {\n\t  if (Math.abs(x) > 1) {\n\t    x = (x > 1) ? 1 : -1;\n\t  }\n\t  return Math.asin(x);\n\t};\n\n\tfunction init$14() {\n\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2);\n\t  this.e3 = Math.sqrt(this.es);\n\n\t  this.sin_po = Math.sin(this.lat1);\n\t  this.cos_po = Math.cos(this.lat1);\n\t  this.t1 = this.sin_po;\n\t  this.con = this.sin_po;\n\t  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n\t  this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  this.sin_po = Math.sin(this.lat2);\n\t  this.cos_po = Math.cos(this.lat2);\n\t  this.t2 = this.sin_po;\n\t  this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n\t  this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  this.sin_po = Math.sin(this.lat0);\n\t  this.cos_po = Math.cos(this.lat0);\n\t  this.t3 = this.sin_po;\n\t  this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n\t    this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n\t  }\n\t  else {\n\t    this.ns0 = this.con;\n\t  }\n\t  this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n\t  this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n\t}\n\n\t/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n\t  -------------------------------------------------------------------*/\n\tfunction forward$13(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  this.sin_phi = Math.sin(lat);\n\t  this.cos_phi = Math.cos(lat);\n\n\t  var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n\t  var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n\t  var theta = this.ns0 * adjust_lon(lon - this.long0);\n\t  var x = rh1 * Math.sin(theta) + this.x0;\n\t  var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$13(p) {\n\t  var rh1, qs, con, theta, lon, lat;\n\n\t  p.x -= this.x0;\n\t  p.y = this.rh - p.y + this.y0;\n\t  if (this.ns0 >= 0) {\n\t    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = -1;\n\t  }\n\t  theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2(con * p.x, con * p.y);\n\t  }\n\t  con = rh1 * this.ns0 / this.a;\n\t  if (this.sphere) {\n\t    lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n\t  }\n\t  else {\n\t    qs = (this.c - con * con) / this.ns0;\n\t    lat = this.phi1z(this.e3, qs);\n\t  }\n\n\t  lon = adjust_lon(theta / this.ns0 + this.long0);\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\t/* Function to compute phi1, the latitude for the inverse of the\n\t   Albers Conical Equal-Area projection.\n\t-------------------------------------------*/\n\tfunction phi1z(eccent, qs) {\n\t  var sinphi, cosphi, con, com, dphi;\n\t  var phi = asinz(0.5 * qs);\n\t  if (eccent < EPSLN) {\n\t    return phi;\n\t  }\n\n\t  var eccnts = eccent * eccent;\n\t  for (var i = 1; i <= 25; i++) {\n\t    sinphi = Math.sin(phi);\n\t    cosphi = Math.cos(phi);\n\t    con = eccent * sinphi;\n\t    com = 1 - con * con;\n\t    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n\t    phi = phi + dphi;\n\t    if (Math.abs(dphi) <= 1e-7) {\n\t      return phi;\n\t    }\n\t  }\n\t  return null;\n\t}\n\n\tvar names$15 = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\n\tvar aea = {\n\t  init: init$14,\n\t  forward: forward$13,\n\t  inverse: inverse$13,\n\t  names: names$15,\n\t  phi1z: phi1z\n\t};\n\n\t/*\n\t  reference:\n\t    Wolfram Mathworld \"Gnomonic Projection\"\n\t    http://mathworld.wolfram.com/GnomonicProjection.html\n\t    Accessed: 12th November 2009\n\t  */\n\tfunction init$15() {\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.sin_p14 = Math.sin(this.lat0);\n\t  this.cos_p14 = Math.cos(this.lat0);\n\t  // Approximation for projecting points to the horizon (infinity)\n\t  this.infinity_dist = 1000 * this.a;\n\t  this.rc = 1;\n\t}\n\n\t/* Gnomonic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$14(p) {\n\t  var sinphi, cosphi; /* sin and cos value        */\n\t  var dlon; /* delta longitude value      */\n\t  var coslon; /* cos of longitude        */\n\t  var ksp; /* scale factor          */\n\t  var g;\n\t  var x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  dlon = adjust_lon(lon - this.long0);\n\n\t  sinphi = Math.sin(lat);\n\t  cosphi = Math.cos(lat);\n\n\t  coslon = Math.cos(dlon);\n\t  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n\t  ksp = 1;\n\t  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n\t    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n\t    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n\t  }\n\t  else {\n\n\t    // Point is in the opposing hemisphere and is unprojectable\n\t    // We still need to return a reasonable point, so we project\n\t    // to infinity, on a bearing\n\t    // equivalent to the northern hemisphere equivalent\n\t    // This is a reasonable approximation for short shapes and lines that\n\t    // straddle the horizon.\n\n\t    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n\t    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$14(p) {\n\t  var rh; /* Rho */\n\t  var sinc, cosc;\n\t  var c;\n\t  var lon, lat;\n\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  p.x /= this.k0;\n\t  p.y /= this.k0;\n\n\t  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n\t    c = Math.atan2(rh, this.rc);\n\t    sinc = Math.sin(c);\n\t    cosc = Math.cos(c);\n\n\t    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n\t    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n\t    lon = adjust_lon(this.long0 + lon);\n\t  }\n\t  else {\n\t    lat = this.phic0;\n\t    lon = 0;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$16 = [\"gnom\"];\n\tvar gnom = {\n\t  init: init$15,\n\t  forward: forward$14,\n\t  inverse: inverse$14,\n\t  names: names$16\n\t};\n\n\tvar iqsfnz = function(eccent, q) {\n\t  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n\t  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n\t    if (q < 0) {\n\t      return (-1 * HALF_PI);\n\t    }\n\t    else {\n\t      return HALF_PI;\n\t    }\n\t  }\n\t  //var phi = 0.5* q/(1-eccent*eccent);\n\t  var phi = Math.asin(0.5 * q);\n\t  var dphi;\n\t  var sin_phi;\n\t  var cos_phi;\n\t  var con;\n\t  for (var i = 0; i < 30; i++) {\n\t    sin_phi = Math.sin(phi);\n\t    cos_phi = Math.cos(phi);\n\t    con = eccent * sin_phi;\n\t    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\n\t  //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n\t  return NaN;\n\t};\n\n\t/*\n\t  reference:\n\t    \"Cartographic Projection Procedures for the UNIX Environment-\n\t    A User's Manual\" by Gerald I. Evenden,\n\t    USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n\t*/\n\tfunction init$16() {\n\t  //no-op\n\t  if (!this.sphere) {\n\t    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n\t  }\n\t}\n\n\t/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n\t    ------------------------------------------------------------*/\n\tfunction forward$15(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var x, y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  if (this.sphere) {\n\t    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n\t    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n\t  }\n\t  else {\n\t    var qs = qsfnz(this.e, Math.sin(lat));\n\t    x = this.x0 + this.a * this.k0 * dlon;\n\t    y = this.y0 + this.a * qs * 0.5 / this.k0;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n\t    ------------------------------------------------------------*/\n\tfunction inverse$15(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var lon, lat;\n\n\t  if (this.sphere) {\n\t    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n\t    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n\t  }\n\t  else {\n\t    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n\t    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$17 = [\"cea\"];\n\tvar cea = {\n\t  init: init$16,\n\t  forward: forward$15,\n\t  inverse: inverse$15,\n\t  names: names$17\n\t};\n\n\tfunction init$17() {\n\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  this.lat0 = this.lat0 || 0;\n\t  this.long0 = this.long0 || 0;\n\t  this.lat_ts = this.lat_ts || 0;\n\t  this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n\t  this.rc = Math.cos(this.lat_ts);\n\t}\n\n\t// forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$16(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var dlat = adjust_lat(lat - this.lat0);\n\t  p.x = this.x0 + (this.a * dlon * this.rc);\n\t  p.y = this.y0 + (this.a * dlat);\n\t  return p;\n\t}\n\n\t// inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$16(p) {\n\n\t  var x = p.x;\n\t  var y = p.y;\n\n\t  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n\t  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n\t  return p;\n\t}\n\n\tvar names$18 = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\n\tvar eqc = {\n\t  init: init$17,\n\t  forward: forward$16,\n\t  inverse: inverse$16,\n\t  names: names$18\n\t};\n\n\tvar MAX_ITER$2 = 20;\n\n\tfunction init$18() {\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n\t  this.e = Math.sqrt(this.es);\n\t  this.e0 = e0fn(this.es);\n\t  this.e1 = e1fn(this.es);\n\t  this.e2 = e2fn(this.es);\n\t  this.e3 = e3fn(this.es);\n\t  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n\t}\n\n\t/* Polyconic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$17(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var x, y, el;\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  el = dlon * Math.sin(lat);\n\t  if (this.sphere) {\n\t    if (Math.abs(lat) <= EPSLN) {\n\t      x = this.a * dlon;\n\t      y = -1 * this.a * this.lat0;\n\t    }\n\t    else {\n\t      x = this.a * Math.sin(el) / Math.tan(lat);\n\t      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(lat) <= EPSLN) {\n\t      x = this.a * dlon;\n\t      y = -1 * this.ml0;\n\t    }\n\t    else {\n\t      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n\t      x = nl * Math.sin(el);\n\t      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n\t    }\n\n\t  }\n\t  p.x = x + this.x0;\n\t  p.y = y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$17(p) {\n\t  var lon, lat, x, y, i;\n\t  var al, bl;\n\t  var phi, dphi;\n\t  x = p.x - this.x0;\n\t  y = p.y - this.y0;\n\n\t  if (this.sphere) {\n\t    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n\t      lon = adjust_lon(x / this.a + this.long0);\n\t      lat = 0;\n\t    }\n\t    else {\n\t      al = this.lat0 + y / this.a;\n\t      bl = x * x / this.a / this.a + al * al;\n\t      phi = al;\n\t      var tanphi;\n\t      for (i = MAX_ITER$2; i; --i) {\n\t        tanphi = Math.tan(phi);\n\t        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n\t        phi += dphi;\n\t        if (Math.abs(dphi) <= EPSLN) {\n\t          lat = phi;\n\t          break;\n\t        }\n\t      }\n\t      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(y + this.ml0) <= EPSLN) {\n\t      lat = 0;\n\t      lon = adjust_lon(this.long0 + x / this.a);\n\t    }\n\t    else {\n\n\t      al = (this.ml0 + y) / this.a;\n\t      bl = x * x / this.a / this.a + al * al;\n\t      phi = al;\n\t      var cl, mln, mlnp, ma;\n\t      var con;\n\t      for (i = MAX_ITER$2; i; --i) {\n\t        con = this.e * Math.sin(phi);\n\t        cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n\t        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\t        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n\t        ma = mln / this.a;\n\t        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n\t        phi -= dphi;\n\t        if (Math.abs(dphi) <= EPSLN) {\n\t          lat = phi;\n\t          break;\n\t        }\n\t      }\n\n\t      //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n\t      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n\t      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n\t    }\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$19 = [\"Polyconic\", \"poly\"];\n\tvar poly = {\n\t  init: init$18,\n\t  forward: forward$17,\n\t  inverse: inverse$17,\n\t  names: names$19\n\t};\n\n\t/*\n\t  reference\n\t    Department of Land and Survey Technical Circular 1973/32\n\t      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n\t    OSG Technical Report 4.1\n\t      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n\t  */\n\n\t/**\n\t * iterations: Number of iterations to refine inverse transform.\n\t *     0 -> km accuracy\n\t *     1 -> m accuracy -- suitable for most mapping applications\n\t *     2 -> mm accuracy\n\t */\n\n\n\tfunction init$19() {\n\t  this.A = [];\n\t  this.A[1] = 0.6399175073;\n\t  this.A[2] = -0.1358797613;\n\t  this.A[3] = 0.063294409;\n\t  this.A[4] = -0.02526853;\n\t  this.A[5] = 0.0117879;\n\t  this.A[6] = -0.0055161;\n\t  this.A[7] = 0.0026906;\n\t  this.A[8] = -0.001333;\n\t  this.A[9] = 0.00067;\n\t  this.A[10] = -0.00034;\n\n\t  this.B_re = [];\n\t  this.B_im = [];\n\t  this.B_re[1] = 0.7557853228;\n\t  this.B_im[1] = 0;\n\t  this.B_re[2] = 0.249204646;\n\t  this.B_im[2] = 0.003371507;\n\t  this.B_re[3] = -0.001541739;\n\t  this.B_im[3] = 0.041058560;\n\t  this.B_re[4] = -0.10162907;\n\t  this.B_im[4] = 0.01727609;\n\t  this.B_re[5] = -0.26623489;\n\t  this.B_im[5] = -0.36249218;\n\t  this.B_re[6] = -0.6870983;\n\t  this.B_im[6] = -1.1651967;\n\n\t  this.C_re = [];\n\t  this.C_im = [];\n\t  this.C_re[1] = 1.3231270439;\n\t  this.C_im[1] = 0;\n\t  this.C_re[2] = -0.577245789;\n\t  this.C_im[2] = -0.007809598;\n\t  this.C_re[3] = 0.508307513;\n\t  this.C_im[3] = -0.112208952;\n\t  this.C_re[4] = -0.15094762;\n\t  this.C_im[4] = 0.18200602;\n\t  this.C_re[5] = 1.01418179;\n\t  this.C_im[5] = 1.64497696;\n\t  this.C_re[6] = 1.9660549;\n\t  this.C_im[6] = 2.5127645;\n\n\t  this.D = [];\n\t  this.D[1] = 1.5627014243;\n\t  this.D[2] = 0.5185406398;\n\t  this.D[3] = -0.03333098;\n\t  this.D[4] = -0.1052906;\n\t  this.D[5] = -0.0368594;\n\t  this.D[6] = 0.007317;\n\t  this.D[7] = 0.01220;\n\t  this.D[8] = 0.00394;\n\t  this.D[9] = -0.0013;\n\t}\n\n\t/**\n\t    New Zealand Map Grid Forward  - long/lat to x/y\n\t    long/lat in radians\n\t  */\n\tfunction forward$18(p) {\n\t  var n;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lat = lat - this.lat0;\n\t  var delta_lon = lon - this.long0;\n\n\t  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda\n\t  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n\t  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n\t  var d_lambda = delta_lon;\n\t  var d_phi_n = 1; // d_phi^0\n\n\t  var d_psi = 0;\n\t  for (n = 1; n <= 10; n++) {\n\t    d_phi_n = d_phi_n * d_phi;\n\t    d_psi = d_psi + this.A[n] * d_phi_n;\n\t  }\n\n\t  // 2. Calculate theta\n\t  var th_re = d_psi;\n\t  var th_im = d_lambda;\n\n\t  // 3. Calculate z\n\t  var th_n_re = 1;\n\t  var th_n_im = 0; // theta^0\n\t  var th_n_re1;\n\t  var th_n_im1;\n\n\t  var z_re = 0;\n\t  var z_im = 0;\n\t  for (n = 1; n <= 6; n++) {\n\t    th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t    th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t    th_n_re = th_n_re1;\n\t    th_n_im = th_n_im1;\n\t    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n\t    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n\t  }\n\n\t  // 4. Calculate easting and northing\n\t  p.x = (z_im * this.a) + this.x0;\n\t  p.y = (z_re * this.a) + this.y0;\n\n\t  return p;\n\t}\n\n\t/**\n\t    New Zealand Map Grid Inverse  -  x/y to long/lat\n\t  */\n\tfunction inverse$18(p) {\n\t  var n;\n\t  var x = p.x;\n\t  var y = p.y;\n\n\t  var delta_x = x - this.x0;\n\t  var delta_y = y - this.y0;\n\n\t  // 1. Calculate z\n\t  var z_re = delta_y / this.a;\n\t  var z_im = delta_x / this.a;\n\n\t  // 2a. Calculate theta - first approximation gives km accuracy\n\t  var z_n_re = 1;\n\t  var z_n_im = 0; // z^0\n\t  var z_n_re1;\n\t  var z_n_im1;\n\n\t  var th_re = 0;\n\t  var th_im = 0;\n\t  for (n = 1; n <= 6; n++) {\n\t    z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n\t    z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n\t    z_n_re = z_n_re1;\n\t    z_n_im = z_n_im1;\n\t    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n\t    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n\t  }\n\n\t  // 2b. Iterate to refine the accuracy of the calculation\n\t  //        0 iterations gives km accuracy\n\t  //        1 iteration gives m accuracy -- good enough for most mapping applications\n\t  //        2 iterations bives mm accuracy\n\t  for (var i = 0; i < this.iterations; i++) {\n\t    var th_n_re = th_re;\n\t    var th_n_im = th_im;\n\t    var th_n_re1;\n\t    var th_n_im1;\n\n\t    var num_re = z_re;\n\t    var num_im = z_im;\n\t    for (n = 2; n <= 6; n++) {\n\t      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t      th_n_re = th_n_re1;\n\t      th_n_im = th_n_im1;\n\t      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n\t      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n\t    }\n\n\t    th_n_re = 1;\n\t    th_n_im = 0;\n\t    var den_re = this.B_re[1];\n\t    var den_im = this.B_im[1];\n\t    for (n = 2; n <= 6; n++) {\n\t      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t      th_n_re = th_n_re1;\n\t      th_n_im = th_n_im1;\n\t      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n\t      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n\t    }\n\n\t    // Complex division\n\t    var den2 = den_re * den_re + den_im * den_im;\n\t    th_re = (num_re * den_re + num_im * den_im) / den2;\n\t    th_im = (num_im * den_re - num_re * den_im) / den2;\n\t  }\n\n\t  // 3. Calculate d_phi              ...                                    // and d_lambda\n\t  var d_psi = th_re;\n\t  var d_lambda = th_im;\n\t  var d_psi_n = 1; // d_psi^0\n\n\t  var d_phi = 0;\n\t  for (n = 1; n <= 9; n++) {\n\t    d_psi_n = d_psi_n * d_psi;\n\t    d_phi = d_phi + this.D[n] * d_psi_n;\n\t  }\n\n\t  // 4. Calculate latitude and longitude\n\t  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n\t  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n\t  var lon = this.long0 + d_lambda;\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$20 = [\"New_Zealand_Map_Grid\", \"nzmg\"];\n\tvar nzmg = {\n\t  init: init$19,\n\t  forward: forward$18,\n\t  inverse: inverse$18,\n\t  names: names$20\n\t};\n\n\t/*\n\t  reference\n\t    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n\t    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n\t  */\n\n\n\t/* Initialize the Miller Cylindrical projection\n\t  -------------------------------------------*/\n\tfunction init$20() {\n\t  //no-op\n\t}\n\n\t/* Miller Cylindrical forward equations--mapping lat,long to x,y\n\t    ------------------------------------------------------------*/\n\tfunction forward$19(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var x = this.x0 + this.a * dlon;\n\t  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n\t    ------------------------------------------------------------*/\n\tfunction inverse$19(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\n\t  var lon = adjust_lon(this.long0 + p.x / this.a);\n\t  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$21 = [\"Miller_Cylindrical\", \"mill\"];\n\tvar mill = {\n\t  init: init$20,\n\t  forward: forward$19,\n\t  inverse: inverse$19,\n\t  names: names$21\n\t};\n\n\tvar MAX_ITER$3 = 20;\n\tfunction init$21() {\n\t  /* Place parameters in static storage for common use\n\t    -------------------------------------------------*/\n\n\n\t  if (!this.sphere) {\n\t    this.en = pj_enfn(this.es);\n\t  }\n\t  else {\n\t    this.n = 1;\n\t    this.m = 0;\n\t    this.es = 0;\n\t    this.C_y = Math.sqrt((this.m + 1) / this.n);\n\t    this.C_x = this.C_y / (this.m + 1);\n\t  }\n\n\t}\n\n\t/* Sinusoidal forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------*/\n\tfunction forward$20(p) {\n\t  var x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t    -----------------*/\n\t  lon = adjust_lon(lon - this.long0);\n\n\t  if (this.sphere) {\n\t    if (!this.m) {\n\t      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n\t    }\n\t    else {\n\t      var k = this.n * Math.sin(lat);\n\t      for (var i = MAX_ITER$3; i; --i) {\n\t        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n\t        lat -= V;\n\t        if (Math.abs(V) < EPSLN) {\n\t          break;\n\t        }\n\t      }\n\t    }\n\t    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n\t    y = this.a * this.C_y * lat;\n\n\t  }\n\t  else {\n\n\t    var s = Math.sin(lat);\n\t    var c = Math.cos(lat);\n\t    y = this.a * pj_mlfn(lat, s, c, this.en);\n\t    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$20(p) {\n\t  var lat, temp, lon, s;\n\n\t  p.x -= this.x0;\n\t  lon = p.x / this.a;\n\t  p.y -= this.y0;\n\t  lat = p.y / this.a;\n\n\t  if (this.sphere) {\n\t    lat /= this.C_y;\n\t    lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n\t    if (this.m) {\n\t      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n\t    }\n\t    else if (this.n !== 1) {\n\t      lat = asinz(Math.sin(lat) / this.n);\n\t    }\n\t    lon = adjust_lon(lon + this.long0);\n\t    lat = adjust_lat(lat);\n\t  }\n\t  else {\n\t    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n\t    s = Math.abs(lat);\n\t    if (s < HALF_PI) {\n\t      s = Math.sin(lat);\n\t      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n\t      //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n\t      lon = adjust_lon(temp);\n\t    }\n\t    else if ((s - EPSLN) < HALF_PI) {\n\t      lon = this.long0;\n\t    }\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$22 = [\"Sinusoidal\", \"sinu\"];\n\tvar sinu = {\n\t  init: init$21,\n\t  forward: forward$20,\n\t  inverse: inverse$20,\n\t  names: names$22\n\t};\n\n\tfunction init$22() {}\n\t/* Mollweide forward equations--mapping lat,long to x,y\n\t    ----------------------------------------------------*/\n\tfunction forward$21(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  var theta = lat;\n\t  var con = Math.PI * Math.sin(lat);\n\n\t  /* Iterate using the Newton-Raphson method to find theta\n\t      -----------------------------------------------------*/\n\t  while (true) {\n\t    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n\t    theta += delta_theta;\n\t    if (Math.abs(delta_theta) < EPSLN) {\n\t      break;\n\t    }\n\t  }\n\t  theta /= 2;\n\n\t  /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n\t       this is done here because of precision problems with \"cos(theta)\"\n\t       --------------------------------------------------------------------------*/\n\t  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n\t    delta_lon = 0;\n\t  }\n\t  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n\t  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$21(p) {\n\t  var theta;\n\t  var arg;\n\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  arg = p.y / (1.4142135623731 * this.a);\n\n\t  /* Because of division by zero problems, 'arg' can not be 1.  Therefore\n\t       a number very close to one is used instead.\n\t       -------------------------------------------------------------------*/\n\t  if (Math.abs(arg) > 0.999999999999) {\n\t    arg = 0.999999999999;\n\t  }\n\t  theta = Math.asin(arg);\n\t  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n\t  if (lon < (-Math.PI)) {\n\t    lon = -Math.PI;\n\t  }\n\t  if (lon > Math.PI) {\n\t    lon = Math.PI;\n\t  }\n\t  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n\t  if (Math.abs(arg) > 1) {\n\t    arg = 1;\n\t  }\n\t  var lat = Math.asin(arg);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$23 = [\"Mollweide\", \"moll\"];\n\tvar moll = {\n\t  init: init$22,\n\t  forward: forward$21,\n\t  inverse: inverse$21,\n\t  names: names$23\n\t};\n\n\tfunction init$23() {\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  // Standard Parallels cannot be equal and on opposite sides of the equator\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\t  this.lat2 = this.lat2 || this.lat1;\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2);\n\t  this.e = Math.sqrt(this.es);\n\t  this.e0 = e0fn(this.es);\n\t  this.e1 = e1fn(this.es);\n\t  this.e2 = e2fn(this.es);\n\t  this.e3 = e3fn(this.es);\n\n\t  this.sinphi = Math.sin(this.lat1);\n\t  this.cosphi = Math.cos(this.lat1);\n\n\t  this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n\t  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n\t  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n\t    this.ns = this.sinphi;\n\t  }\n\t  else {\n\t    this.sinphi = Math.sin(this.lat2);\n\t    this.cosphi = Math.cos(this.lat2);\n\t    this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n\t    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n\t    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n\t  }\n\t  this.g = this.ml1 + this.ms1 / this.ns;\n\t  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n\t  this.rh = this.a * (this.g - this.ml0);\n\t}\n\n\t/* Equidistant Conic forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------*/\n\tfunction forward$22(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var rh1;\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  if (this.sphere) {\n\t    rh1 = this.a * (this.g - lat);\n\t  }\n\t  else {\n\t    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n\t    rh1 = this.a * (this.g - ml);\n\t  }\n\t  var theta = this.ns * adjust_lon(lon - this.long0);\n\t  var x = this.x0 + rh1 * Math.sin(theta);\n\t  var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$22(p) {\n\t  p.x -= this.x0;\n\t  p.y = this.rh - p.y + this.y0;\n\t  var con, rh1, lat, lon;\n\t  if (this.ns >= 0) {\n\t    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = -1;\n\t  }\n\t  var theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2(con * p.x, con * p.y);\n\t  }\n\n\t  if (this.sphere) {\n\t    lon = adjust_lon(this.long0 + theta / this.ns);\n\t    lat = adjust_lat(this.g - rh1 / this.a);\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    var ml = this.g - rh1 / this.a;\n\t    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n\t    lon = adjust_lon(this.long0 + theta / this.ns);\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\n\t}\n\n\tvar names$24 = [\"Equidistant_Conic\", \"eqdc\"];\n\tvar eqdc = {\n\t  init: init$23,\n\t  forward: forward$22,\n\t  inverse: inverse$22,\n\t  names: names$24\n\t};\n\n\t/* Initialize the Van Der Grinten projection\n\t  ----------------------------------------*/\n\tfunction init$24() {\n\t  //this.R = 6370997; //Radius of earth\n\t  this.R = this.a;\n\t}\n\n\tfunction forward$23(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  /* Forward equations\n\t    -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var x, y;\n\n\t  if (Math.abs(lat) <= EPSLN) {\n\t    x = this.x0 + this.R * dlon;\n\t    y = this.y0;\n\t  }\n\t  var theta = asinz(2 * Math.abs(lat / Math.PI));\n\t  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n\t    x = this.x0;\n\t    if (lat >= 0) {\n\t      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n\t    }\n\t    else {\n\t      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n\t    }\n\t    //  return(OK);\n\t  }\n\t  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n\t  var asq = al * al;\n\t  var sinth = Math.sin(theta);\n\t  var costh = Math.cos(theta);\n\n\t  var g = costh / (sinth + costh - 1);\n\t  var gsq = g * g;\n\t  var m = g * (2 / sinth - 1);\n\t  var msq = m * m;\n\t  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n\t  if (dlon < 0) {\n\t    con = -con;\n\t  }\n\t  x = this.x0 + con;\n\t  //con = Math.abs(con / (Math.PI * this.R));\n\t  var q = asq + g;\n\t  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n\t  if (lat >= 0) {\n\t    //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n\t    y = this.y0 + con;\n\t  }\n\t  else {\n\t    //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n\t    y = this.y0 - con;\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Van Der Grinten inverse equations--mapping x,y to lat/long\n\t  ---------------------------------------------------------*/\n\tfunction inverse$23(p) {\n\t  var lon, lat;\n\t  var xx, yy, xys, c1, c2, c3;\n\t  var a1;\n\t  var m1;\n\t  var con;\n\t  var th1;\n\t  var d;\n\n\t  /* inverse equations\n\t    -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  con = Math.PI * this.R;\n\t  xx = p.x / con;\n\t  yy = p.y / con;\n\t  xys = xx * xx + yy * yy;\n\t  c1 = -Math.abs(yy) * (1 + xys);\n\t  c2 = c1 - 2 * yy * yy + xx * xx;\n\t  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n\t  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n\t  a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n\t  m1 = 2 * Math.sqrt(-a1 / 3);\n\t  con = ((3 * d) / a1) / m1;\n\t  if (Math.abs(con) > 1) {\n\t    if (con >= 0) {\n\t      con = 1;\n\t    }\n\t    else {\n\t      con = -1;\n\t    }\n\t  }\n\t  th1 = Math.acos(con) / 3;\n\t  if (p.y >= 0) {\n\t    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n\t  }\n\t  else {\n\t    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n\t  }\n\n\t  if (Math.abs(xx) < EPSLN) {\n\t    lon = this.long0;\n\t  }\n\t  else {\n\t    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$25 = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\n\tvar vandg = {\n\t  init: init$24,\n\t  forward: forward$23,\n\t  inverse: inverse$23,\n\t  names: names$25\n\t};\n\n\tfunction init$25() {\n\t  this.sin_p12 = Math.sin(this.lat0);\n\t  this.cos_p12 = Math.cos(this.lat0);\n\t}\n\n\tfunction forward$24(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var sinphi = Math.sin(p.y);\n\t  var cosphi = Math.cos(p.y);\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n\t  if (this.sphere) {\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North Pole case\n\t      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n\t      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South Pole case\n\t      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n\t      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else {\n\t      //default case\n\t      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n\t      c = Math.acos(cos_c);\n\t      kp = c / Math.sin(c);\n\t      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n\t      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n\t      return p;\n\t    }\n\t  }\n\t  else {\n\t    e0 = e0fn(this.es);\n\t    e1 = e1fn(this.es);\n\t    e2 = e2fn(this.es);\n\t    e3 = e3fn(this.es);\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North Pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n\t      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n\t      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South Pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n\t      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n\t      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else {\n\t      //Default case\n\t      tanphi = sinphi / cosphi;\n\t      Nl1 = gN(this.a, this.e, this.sin_p12);\n\t      Nl = gN(this.a, this.e, sinphi);\n\t      psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n\t      Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n\t      if (Az === 0) {\n\t        s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n\t      }\n\t      else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n\t        s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n\t      }\n\t      else {\n\t        s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n\t      }\n\t      G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n\t      H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n\t      GH = G * H;\n\t      Hs = H * H;\n\t      s2 = s * s;\n\t      s3 = s2 * s;\n\t      s4 = s3 * s;\n\t      s5 = s4 * s;\n\t      c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n\t      p.x = this.x0 + c * Math.sin(Az);\n\t      p.y = this.y0 + c * Math.cos(Az);\n\t      return p;\n\t    }\n\t  }\n\n\n\t}\n\n\tfunction inverse$24(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F;\n\t  if (this.sphere) {\n\t    rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    if (rh > (2 * HALF_PI * this.a)) {\n\t      return;\n\t    }\n\t    z = rh / this.a;\n\n\t    sinz = Math.sin(z);\n\t    cosz = Math.cos(z);\n\n\t    lon = this.long0;\n\t    if (Math.abs(rh) <= EPSLN) {\n\t      lat = this.lat0;\n\t    }\n\t    else {\n\t      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n\t      con = Math.abs(this.lat0) - HALF_PI;\n\t      if (Math.abs(con) <= EPSLN) {\n\t        if (this.lat0 >= 0) {\n\t          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n\t        }\n\t        else {\n\t          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n\t        }\n\t      }\n\t      else {\n\t        /*con = cosz - this.sin_p12 * Math.sin(lat);\n\t        if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n\t          //no-op, just keep the lon value as is\n\t        } else {\n\t          var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n\t          lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n\t        }*/\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n\t      }\n\t    }\n\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    e0 = e0fn(this.es);\n\t    e1 = e1fn(this.es);\n\t    e2 = e2fn(this.es);\n\t    e3 = e3fn(this.es);\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      M = Mlp - rh;\n\t      lat = imlfn(M / this.a, e0, e1, e2, e3);\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      M = rh - Mlp;\n\n\t      lat = imlfn(M / this.a, e0, e1, e2, e3);\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    else {\n\t      //default case\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      Az = Math.atan2(p.x, p.y);\n\t      N1 = gN(this.a, this.e, this.sin_p12);\n\t      cosAz = Math.cos(Az);\n\t      tmp = this.e * this.cos_p12 * cosAz;\n\t      A = -tmp * tmp / (1 - this.es);\n\t      B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n\t      D = rh / N1;\n\t      Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n\t      F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n\t      psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n\t      lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n\t      lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t  }\n\n\t}\n\n\tvar names$26 = [\"Azimuthal_Equidistant\", \"aeqd\"];\n\tvar aeqd = {\n\t  init: init$25,\n\t  forward: forward$24,\n\t  inverse: inverse$24,\n\t  names: names$26\n\t};\n\n\tfunction init$26() {\n\t  //double temp;      /* temporary variable    */\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.sin_p14 = Math.sin(this.lat0);\n\t  this.cos_p14 = Math.cos(this.lat0);\n\t}\n\n\t/* Orthographic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$25(p) {\n\t  var sinphi, cosphi; /* sin and cos value        */\n\t  var dlon; /* delta longitude value      */\n\t  var coslon; /* cos of longitude        */\n\t  var ksp; /* scale factor          */\n\t  var g, x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  dlon = adjust_lon(lon - this.long0);\n\n\t  sinphi = Math.sin(lat);\n\t  cosphi = Math.cos(lat);\n\n\t  coslon = Math.cos(dlon);\n\t  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n\t  ksp = 1;\n\t  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n\t    x = this.a * ksp * cosphi * Math.sin(dlon);\n\t    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$25(p) {\n\t  var rh; /* height above ellipsoid      */\n\t  var z; /* angle          */\n\t  var sinz, cosz; /* sin of z and cos of z      */\n\t  var con;\n\t  var lon, lat;\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  z = asinz(rh / this.a);\n\n\t  sinz = Math.sin(z);\n\t  cosz = Math.cos(z);\n\n\t  lon = this.long0;\n\t  if (Math.abs(rh) <= EPSLN) {\n\t    lat = this.lat0;\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n\t  con = Math.abs(this.lat0) - HALF_PI;\n\t  if (Math.abs(con) <= EPSLN) {\n\t    if (this.lat0 >= 0) {\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n\t    }\n\t    else {\n\t      lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n\t    }\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$27 = [\"ortho\"];\n\tvar ortho = {\n\t  init: init$26,\n\t  forward: forward$25,\n\t  inverse: inverse$25,\n\t  names: names$27\n\t};\n\n\t// QSC projection rewritten from the original PROJ4\n\t// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\n\t/* constants */\n\tvar FACE_ENUM = {\n\t    FRONT: 1,\n\t    RIGHT: 2,\n\t    BACK: 3,\n\t    LEFT: 4,\n\t    TOP: 5,\n\t    BOTTOM: 6\n\t};\n\n\tvar AREA_ENUM = {\n\t    AREA_0: 1,\n\t    AREA_1: 2,\n\t    AREA_2: 3,\n\t    AREA_3: 4\n\t};\n\n\tfunction init$27() {\n\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  this.lat0 = this.lat0 || 0;\n\t  this.long0 = this.long0 || 0;\n\t  this.lat_ts = this.lat_ts || 0;\n\t  this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n\t  /* Determine the cube face from the center of projection. */\n\t  if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n\t    this.face = FACE_ENUM.TOP;\n\t  } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n\t    this.face = FACE_ENUM.BOTTOM;\n\t  } else if (Math.abs(this.long0) <= FORTPI) {\n\t    this.face = FACE_ENUM.FRONT;\n\t  } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n\t    this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n\t  } else {\n\t    this.face = FACE_ENUM.BACK;\n\t  }\n\n\t  /* Fill in useful values for the ellipsoid <-> sphere shift\n\t   * described in [LK12]. */\n\t  if (this.es !== 0) {\n\t    this.one_minus_f = 1 - (this.a - this.b) / this.a;\n\t    this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n\t  }\n\t}\n\n\t// QSC forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$26(p) {\n\t  var xy = {x: 0, y: 0};\n\t  var lat, lon;\n\t  var theta, phi;\n\t  var t, mu;\n\t  /* nu; */\n\t  var area = {value: 0};\n\n\t  // move lon according to projection's lon\n\t  p.x -= this.long0;\n\n\t  /* Convert the geodetic latitude to a geocentric latitude.\n\t   * This corresponds to the shift from the ellipsoid to the sphere\n\t   * described in [LK12]. */\n\t  if (this.es !== 0) {//if (P->es != 0) {\n\t    lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n\t  } else {\n\t    lat = p.y;\n\t  }\n\n\t  /* Convert the input lat, lon into theta, phi as used by QSC.\n\t   * This depends on the cube face and the area on it.\n\t   * For the top and bottom face, we can compute theta and phi\n\t   * directly from phi, lam. For the other faces, we must use\n\t   * unit sphere cartesian coordinates as an intermediate step. */\n\t  lon = p.x; //lon = lp.lam;\n\t  if (this.face === FACE_ENUM.TOP) {\n\t    phi = HALF_PI - lat;\n\t    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n\t      area.value = AREA_ENUM.AREA_0;\n\t      theta = lon - HALF_PI;\n\t    } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n\t      area.value = AREA_ENUM.AREA_1;\n\t      theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n\t    } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n\t      area.value = AREA_ENUM.AREA_2;\n\t      theta = lon + HALF_PI;\n\t    } else {\n\t      area.value = AREA_ENUM.AREA_3;\n\t      theta = lon;\n\t    }\n\t  } else if (this.face === FACE_ENUM.BOTTOM) {\n\t    phi = HALF_PI + lat;\n\t    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n\t      area.value = AREA_ENUM.AREA_0;\n\t      theta = -lon + HALF_PI;\n\t    } else if (lon < FORTPI && lon >= -FORTPI) {\n\t      area.value = AREA_ENUM.AREA_1;\n\t      theta = -lon;\n\t    } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n\t      area.value = AREA_ENUM.AREA_2;\n\t      theta = -lon - HALF_PI;\n\t    } else {\n\t      area.value = AREA_ENUM.AREA_3;\n\t      theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n\t    }\n\t  } else {\n\t    var q, r, s;\n\t    var sinlat, coslat;\n\t    var sinlon, coslon;\n\n\t    if (this.face === FACE_ENUM.RIGHT) {\n\t      lon = qsc_shift_lon_origin(lon, +HALF_PI);\n\t    } else if (this.face === FACE_ENUM.BACK) {\n\t      lon = qsc_shift_lon_origin(lon, +SPI);\n\t    } else if (this.face === FACE_ENUM.LEFT) {\n\t      lon = qsc_shift_lon_origin(lon, -HALF_PI);\n\t    }\n\t    sinlat = Math.sin(lat);\n\t    coslat = Math.cos(lat);\n\t    sinlon = Math.sin(lon);\n\t    coslon = Math.cos(lon);\n\t    q = coslat * coslon;\n\t    r = coslat * sinlon;\n\t    s = sinlat;\n\n\t    if (this.face === FACE_ENUM.FRONT) {\n\t      phi = Math.acos(q);\n\t      theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n\t    } else if (this.face === FACE_ENUM.RIGHT) {\n\t      phi = Math.acos(r);\n\t      theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n\t    } else if (this.face === FACE_ENUM.BACK) {\n\t      phi = Math.acos(-q);\n\t      theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n\t    } else if (this.face === FACE_ENUM.LEFT) {\n\t      phi = Math.acos(-r);\n\t      theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n\t    } else {\n\t      /* Impossible */\n\t      phi = theta = 0;\n\t      area.value = AREA_ENUM.AREA_0;\n\t    }\n\t  }\n\n\t  /* Compute mu and nu for the area of definition.\n\t   * For mu, see Eq. (3-21) in [OL76], but note the typos:\n\t   * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n\t  mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n\t  t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n\t  /* Apply the result to the real area. */\n\t  if (area.value === AREA_ENUM.AREA_1) {\n\t    mu += HALF_PI;\n\t  } else if (area.value === AREA_ENUM.AREA_2) {\n\t    mu += SPI;\n\t  } else if (area.value === AREA_ENUM.AREA_3) {\n\t    mu += 1.5 * SPI;\n\t  }\n\n\t  /* Now compute x, y from mu and nu */\n\t  xy.x = t * Math.cos(mu);\n\t  xy.y = t * Math.sin(mu);\n\t  xy.x = xy.x * this.a + this.x0;\n\t  xy.y = xy.y * this.a + this.y0;\n\n\t  p.x = xy.x;\n\t  p.y = xy.y;\n\t  return p;\n\t}\n\n\t// QSC inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$26(p) {\n\t  var lp = {lam: 0, phi: 0};\n\t  var mu, nu, cosmu, tannu;\n\t  var tantheta, theta, cosphi, phi;\n\t  var t;\n\t  var area = {value: 0};\n\n\t  /* de-offset */\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  /* Convert the input x, y to the mu and nu angles as used by QSC.\n\t   * This depends on the area of the cube face. */\n\t  nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n\t  mu = Math.atan2(p.y, p.x);\n\t  if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n\t    area.value = AREA_ENUM.AREA_0;\n\t  } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n\t    area.value = AREA_ENUM.AREA_1;\n\t    mu -= HALF_PI;\n\t  } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n\t    area.value = AREA_ENUM.AREA_2;\n\t    mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n\t  } else {\n\t    area.value = AREA_ENUM.AREA_3;\n\t    mu += HALF_PI;\n\t  }\n\n\t  /* Compute phi and theta for the area of definition.\n\t   * The inverse projection is not described in the original paper, but some\n\t   * good hints can be found here (as of 2011-12-14):\n\t   * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n\t   * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n\t  t = (SPI / 12) * Math.tan(mu);\n\t  tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n\t  theta = Math.atan(tantheta);\n\t  cosmu = Math.cos(mu);\n\t  tannu = Math.tan(nu);\n\t  cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n\t  if (cosphi < -1) {\n\t    cosphi = -1;\n\t  } else if (cosphi > +1) {\n\t    cosphi = +1;\n\t  }\n\n\t  /* Apply the result to the real area on the cube face.\n\t   * For the top and bottom face, we can compute phi and lam directly.\n\t   * For the other faces, we must use unit sphere cartesian coordinates\n\t   * as an intermediate step. */\n\t  if (this.face === FACE_ENUM.TOP) {\n\t    phi = Math.acos(cosphi);\n\t    lp.phi = HALF_PI - phi;\n\t    if (area.value === AREA_ENUM.AREA_0) {\n\t      lp.lam = theta + HALF_PI;\n\t    } else if (area.value === AREA_ENUM.AREA_1) {\n\t      lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n\t    } else if (area.value === AREA_ENUM.AREA_2) {\n\t      lp.lam = theta - HALF_PI;\n\t    } else /* area.value == AREA_ENUM.AREA_3 */ {\n\t      lp.lam = theta;\n\t    }\n\t  } else if (this.face === FACE_ENUM.BOTTOM) {\n\t    phi = Math.acos(cosphi);\n\t    lp.phi = phi - HALF_PI;\n\t    if (area.value === AREA_ENUM.AREA_0) {\n\t      lp.lam = -theta + HALF_PI;\n\t    } else if (area.value === AREA_ENUM.AREA_1) {\n\t      lp.lam = -theta;\n\t    } else if (area.value === AREA_ENUM.AREA_2) {\n\t      lp.lam = -theta - HALF_PI;\n\t    } else /* area.value == AREA_ENUM.AREA_3 */ {\n\t      lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n\t    }\n\t  } else {\n\t    /* Compute phi and lam via cartesian unit sphere coordinates. */\n\t    var q, r, s;\n\t    q = cosphi;\n\t    t = q * q;\n\t    if (t >= 1) {\n\t      s = 0;\n\t    } else {\n\t      s = Math.sqrt(1 - t) * Math.sin(theta);\n\t    }\n\t    t += s * s;\n\t    if (t >= 1) {\n\t      r = 0;\n\t    } else {\n\t      r = Math.sqrt(1 - t);\n\t    }\n\t    /* Rotate q,r,s into the correct area. */\n\t    if (area.value === AREA_ENUM.AREA_1) {\n\t      t = r;\n\t      r = -s;\n\t      s = t;\n\t    } else if (area.value === AREA_ENUM.AREA_2) {\n\t      r = -r;\n\t      s = -s;\n\t    } else if (area.value === AREA_ENUM.AREA_3) {\n\t      t = r;\n\t      r = s;\n\t      s = -t;\n\t    }\n\t    /* Rotate q,r,s into the correct cube face. */\n\t    if (this.face === FACE_ENUM.RIGHT) {\n\t      t = q;\n\t      q = -r;\n\t      r = t;\n\t    } else if (this.face === FACE_ENUM.BACK) {\n\t      q = -q;\n\t      r = -r;\n\t    } else if (this.face === FACE_ENUM.LEFT) {\n\t      t = q;\n\t      q = r;\n\t      r = -t;\n\t    }\n\t    /* Now compute phi and lam from the unit sphere coordinates. */\n\t    lp.phi = Math.acos(-s) - HALF_PI;\n\t    lp.lam = Math.atan2(r, q);\n\t    if (this.face === FACE_ENUM.RIGHT) {\n\t      lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n\t    } else if (this.face === FACE_ENUM.BACK) {\n\t      lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n\t    } else if (this.face === FACE_ENUM.LEFT) {\n\t      lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n\t    }\n\t  }\n\n\t  /* Apply the shift from the sphere to the ellipsoid as described\n\t   * in [LK12]. */\n\t  if (this.es !== 0) {\n\t    var invert_sign;\n\t    var tanphi, xa;\n\t    invert_sign = (lp.phi < 0 ? 1 : 0);\n\t    tanphi = Math.tan(lp.phi);\n\t    xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n\t    lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n\t    if (invert_sign) {\n\t      lp.phi = -lp.phi;\n\t    }\n\t  }\n\n\t  lp.lam += this.long0;\n\t  p.x = lp.lam;\n\t  p.y = lp.phi;\n\t  return p;\n\t}\n\n\t/* Helper function for forward projection: compute the theta angle\n\t * and determine the area number. */\n\tfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n\t  var theta;\n\t  if (phi < EPSLN) {\n\t    area.value = AREA_ENUM.AREA_0;\n\t    theta = 0.0;\n\t  } else {\n\t    theta = Math.atan2(y, x);\n\t    if (Math.abs(theta) <= FORTPI) {\n\t      area.value = AREA_ENUM.AREA_0;\n\t    } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n\t      area.value = AREA_ENUM.AREA_1;\n\t      theta -= HALF_PI;\n\t    } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n\t      area.value = AREA_ENUM.AREA_2;\n\t      theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n\t    } else {\n\t      area.value = AREA_ENUM.AREA_3;\n\t      theta += HALF_PI;\n\t    }\n\t  }\n\t  return theta;\n\t}\n\n\t/* Helper function: shift the longitude. */\n\tfunction qsc_shift_lon_origin(lon, offset) {\n\t  var slon = lon + offset;\n\t  if (slon < -SPI) {\n\t    slon += TWO_PI;\n\t  } else if (slon > +SPI) {\n\t    slon -= TWO_PI;\n\t  }\n\t  return slon;\n\t}\n\n\tvar names$28 = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\n\tvar qsc = {\n\t  init: init$27,\n\t  forward: forward$26,\n\t  inverse: inverse$26,\n\t  names: names$28\n\t};\n\n\t// Robinson projection\n\t// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n\t// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\n\tvar COEFS_X = [\n\t    [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n\t    [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n\t    [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n\t    [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n\t    [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n\t    [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n\t    [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n\t    [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n\t    [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n\t    [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n\t    [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n\t    [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n\t    [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n\t    [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n\t    [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n\t    [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n\t    [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n\t    [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n\t    [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n\t];\n\n\tvar COEFS_Y = [\n\t    [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n\t    [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n\t    [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n\t    [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n\t    [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n\t    [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n\t    [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n\t    [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n\t    [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n\t    [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n\t    [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n\t    [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n\t    [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n\t    [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n\t    [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n\t    [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n\t    [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n\t    [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n\t    [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n\t];\n\n\tvar FXC = 0.8487;\n\tvar FYC = 1.3523;\n\tvar C1 = R2D/5; // rad to 5-degree interval\n\tvar RC1 = 1/C1;\n\tvar NODES = 18;\n\n\tvar poly3_val = function(coefs, x) {\n\t    return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n\t};\n\n\tvar poly3_der = function(coefs, x) {\n\t    return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n\t};\n\n\tfunction newton_rapshon(f_df, start, max_err, iters) {\n\t    var x = start;\n\t    for (; iters; --iters) {\n\t        var upd = f_df(x);\n\t        x -= upd;\n\t        if (Math.abs(upd) < max_err) {\n\t            break;\n\t        }\n\t    }\n\t    return x;\n\t}\n\n\tfunction init$28() {\n\t    this.x0 = this.x0 || 0;\n\t    this.y0 = this.y0 || 0;\n\t    this.long0 = this.long0 || 0;\n\t    this.es = 0;\n\t    this.title = this.title || \"Robinson\";\n\t}\n\n\tfunction forward$27(ll) {\n\t    var lon = adjust_lon(ll.x - this.long0);\n\n\t    var dphi = Math.abs(ll.y);\n\t    var i = Math.floor(dphi * C1);\n\t    if (i < 0) {\n\t        i = 0;\n\t    } else if (i >= NODES) {\n\t        i = NODES - 1;\n\t    }\n\t    dphi = R2D * (dphi - RC1 * i);\n\t    var xy = {\n\t        x: poly3_val(COEFS_X[i], dphi) * lon,\n\t        y: poly3_val(COEFS_Y[i], dphi)\n\t    };\n\t    if (ll.y < 0) {\n\t        xy.y = -xy.y;\n\t    }\n\n\t    xy.x = xy.x * this.a * FXC + this.x0;\n\t    xy.y = xy.y * this.a * FYC + this.y0;\n\t    return xy;\n\t}\n\n\tfunction inverse$27(xy) {\n\t    var ll = {\n\t        x: (xy.x - this.x0) / (this.a * FXC),\n\t        y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n\t    };\n\n\t    if (ll.y >= 1) { // pathologic case\n\t        ll.x /= COEFS_X[NODES][0];\n\t        ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n\t    } else {\n\t        // find table interval\n\t        var i = Math.floor(ll.y * NODES);\n\t        if (i < 0) {\n\t            i = 0;\n\t        } else if (i >= NODES) {\n\t            i = NODES - 1;\n\t        }\n\t        for (;;) {\n\t            if (COEFS_Y[i][0] > ll.y) {\n\t                --i;\n\t            } else if (COEFS_Y[i+1][0] <= ll.y) {\n\t                ++i;\n\t            } else {\n\t                break;\n\t            }\n\t        }\n\t        // linear interpolation in 5 degree interval\n\t        var coefs = COEFS_Y[i];\n\t        var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n\t        // find t so that poly3_val(coefs, t) = ll.y\n\t        t = newton_rapshon(function(x) {\n\t            return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n\t        }, t, EPSLN, 100);\n\n\t        ll.x /= poly3_val(COEFS_X[i], t);\n\t        ll.y = (5 * i + t) * D2R;\n\t        if (xy.y < 0) {\n\t            ll.y = -ll.y;\n\t        }\n\t    }\n\n\t    ll.x = adjust_lon(ll.x + this.long0);\n\t    return ll;\n\t}\n\n\tvar names$29 = [\"Robinson\", \"robin\"];\n\tvar robin = {\n\t  init: init$28,\n\t  forward: forward$27,\n\t  inverse: inverse$27,\n\t  names: names$29\n\t};\n\n\tvar includedProjections = function(proj4){\n\t  proj4.Proj.projections.add(tmerc);\n\t  proj4.Proj.projections.add(etmerc);\n\t  proj4.Proj.projections.add(utm);\n\t  proj4.Proj.projections.add(sterea);\n\t  proj4.Proj.projections.add(stere);\n\t  proj4.Proj.projections.add(somerc);\n\t  proj4.Proj.projections.add(omerc);\n\t  proj4.Proj.projections.add(lcc);\n\t  proj4.Proj.projections.add(krovak);\n\t  proj4.Proj.projections.add(cass);\n\t  proj4.Proj.projections.add(laea);\n\t  proj4.Proj.projections.add(aea);\n\t  proj4.Proj.projections.add(gnom);\n\t  proj4.Proj.projections.add(cea);\n\t  proj4.Proj.projections.add(eqc);\n\t  proj4.Proj.projections.add(poly);\n\t  proj4.Proj.projections.add(nzmg);\n\t  proj4.Proj.projections.add(mill);\n\t  proj4.Proj.projections.add(sinu);\n\t  proj4.Proj.projections.add(moll);\n\t  proj4.Proj.projections.add(eqdc);\n\t  proj4.Proj.projections.add(vandg);\n\t  proj4.Proj.projections.add(aeqd);\n\t  proj4.Proj.projections.add(ortho);\n\t  proj4.Proj.projections.add(qsc);\n\t  proj4.Proj.projections.add(robin);\n\t};\n\n\tproj4$1.defaultDatum = 'WGS84'; //default datum\n\tproj4$1.Proj = Projection;\n\tproj4$1.WGS84 = new proj4$1.Proj('WGS84');\n\tproj4$1.Point = Point;\n\tproj4$1.toPoint = toPoint;\n\tproj4$1.defs = defs;\n\tproj4$1.transform = transform;\n\tproj4$1.mgrs = mgrs;\n\tproj4$1.version = version;\n\tincludedProjections(proj4$1);\n\n\treturn proj4$1;\n\n})));\n\n},{}],317:[function(require,module,exports){\n'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16\n  for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n  var al = this._a | 0\n  var bl = this._b | 0\n  var cl = this._c | 0\n  var dl = this._d | 0\n  var el = this._e | 0\n\n  var ar = this._a | 0\n  var br = this._b | 0\n  var cr = this._c | 0\n  var dr = this._d | 0\n  var er = this._e | 0\n\n  // computation\n  for (var i = 0; i < 80; i += 1) {\n    var tl\n    var tr\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n    } else { // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n    }\n\n    al = el\n    el = dl\n    dl = rotl(cl, 10)\n    cl = bl\n    bl = tl\n\n    ar = er\n    er = dr\n    dr = rotl(cr, 10)\n    cr = br\n    br = tr\n  }\n\n  // update state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n\n},{\"buffer\":182,\"hash-base\":227,\"inherits\":262}],318:[function(require,module,exports){\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":182}],319:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n\n},{\"safe-buffer\":318}],320:[function(require,module,exports){\nvar exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n\n},{\"./sha\":321,\"./sha1\":322,\"./sha224\":323,\"./sha256\":324,\"./sha384\":325,\"./sha512\":326}],321:[function(require,module,exports){\n/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n\n},{\"./hash\":319,\"inherits\":262,\"safe-buffer\":318}],322:[function(require,module,exports){\n/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n\n},{\"./hash\":319,\"inherits\":262,\"safe-buffer\":318}],323:[function(require,module,exports){\n/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n\n},{\"./hash\":319,\"./sha256\":324,\"inherits\":262,\"safe-buffer\":318}],324:[function(require,module,exports){\n/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n\n},{\"./hash\":319,\"inherits\":262,\"safe-buffer\":318}],325:[function(require,module,exports){\nvar inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n\n},{\"./hash\":319,\"./sha512\":326,\"inherits\":262,\"safe-buffer\":318}],326:[function(require,module,exports){\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n\n},{\"./hash\":319,\"inherits\":262,\"safe-buffer\":318}],327:[function(require,module,exports){\n(function (process,Buffer,__dirname){\n\n// We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n// https://github.com/kripken/emscripten/issues/5820\n// In addition, When you use emcc's modularization, it still expects to export a global object called `Module`,\n// which is able to be used/called before the WASM is loaded.\n// The modularization below exports a promise that loads and resolves to the actual sql.js module.\n// That way, this module can't be used before the WASM is finished loading.\n\n// We are going to define a function that a user will call to start loading initializing our Sql.js library\n// However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module\n// Instead, we want to return the previously loaded module\n\n// TODO: Make this not declare a global if used in the browser\nvar initSqlJsPromise = undefined;\n\nvar initSqlJs = function (moduleConfig) {\n\n    if (initSqlJsPromise){\n      return initSqlJsPromise;\n    }\n    // If we're here, we've never called this function before\n    initSqlJsPromise = new Promise((resolveModule, reject) => {\n\n        // We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n        // https://github.com/kripken/emscripten/issues/5820\n\n        // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add\n        // properties to it, like `preRun`, `postRun`, etc\n        // We are using that to get notified when the WASM has finished loading.\n        // Only then will we return our promise\n\n        // If they passed in a moduleConfig object, use that\n        // Otherwise, initialize Module to the empty object\n        var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {};\n\n        // EMCC only allows for a single onAbort function (not an array of functions)\n        // So if the user defined their own onAbort function, we remember it and call it\n        var originalOnAbortFunction = Module['onAbort'];\n        Module['onAbort'] = function (errorThatCausedAbort) {\n            reject(new Error(errorThatCausedAbort));\n            if (originalOnAbortFunction){\n              originalOnAbortFunction(errorThatCausedAbort);\n            }\n        };\n\n        Module['postRun'] = Module['postRun'] || [];\n        Module['postRun'].push(function () {\n            // When Emscripted calls postRun, this promise resolves with the built Module\n            resolveModule(Module);\n        });\n\n        // There is a section of code in the emcc-generated code below that looks like this:\n        // (Note that this is lowercase `module`)\n        // if (typeof module !== 'undefined') {\n        //     module['exports'] = Module;\n        // }\n        // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js!\n        // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags,\n        // but that carries with it additional unnecessary baggage/bugs we don't want either.\n        // So, we have three options:\n        // 1) We undefine `module`\n        // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later\n        // 3) We write a script to remove those lines of code as part of the Make process.\n        //\n        // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward\n        // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future.\n        // That's a nice side effect since we're handling the modularization efforts ourselves\n        module = undefined;\n        \n        // The emcc-generated code and shell-post.js code goes below,\n        // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort\nvar aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {});\nvar wa=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.ga=a;this.db=b;this.oa=1;this.Ha=[]}a.prototype.bind=function(a){if(!this.ga)throw\"Statement closed\";this.reset();return Array.isArray(a)?this.pb(a):this.qb(a)};a.prototype.step=function(){var a;if(!this.ga)throw\"Statement closed\";this.oa=1;switch(a=fc(this.ga)){case c.lb:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.wb=function(a){null==a&&(a=this.oa++);return hc(this.ga,a)};a.prototype.xb=\nfunction(a){null==a&&(a=this.oa++);return ic(this.ga,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.oa++);var c=jc(this.ga,a);var d=kc(this.ga,a);var e=new Uint8Array(c);for(a=b=0;0<=c?b<c:b>c;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=pb(this.ga);0<=d?b<d:b>d;a=0<=d?++b:--b)switch(lc(this.ga,a)){case c.kb:case c.FLOAT:e.push(this.wb(a));break;case c.mb:e.push(this.xb(a));break;case c.cb:e.push(this.getBlob(a));\nbreak;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=pb(this.ga);0<=b?a<b:a>b;d=0<=b?++a:--a)c.push(mc(this.ga,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b<c;a=++b){var Oa=e[a];g[Oa]=d[a]}return g};a.prototype.run=function(a){null!=a&&this.bind(a);this.step();return this.reset()};a.prototype.tb=function(a,b){var c;null==b&&(b=this.oa++);a=ba(a);this.Ha.push(c=\nca(a));this.db.handleError(da(this.ga,b,c,a.length-1,0))};a.prototype.ob=function(a,b){var c;null==b&&(b=this.oa++);this.Ha.push(c=ca(a));this.db.handleError(Pa(this.ga,b,c,a.length,0))};a.prototype.sb=function(a,b){null==b&&(b=this.oa++);this.db.handleError((a===(a|0)?nc:oc)(this.ga,b,a))};a.prototype.rb=function(a){null==a&&(a=this.oa++);Pa(this.ga,a,0,0,0)};a.prototype.Ta=function(a,b){null==b&&(b=this.oa++);switch(typeof a){case \"string\":this.tb(a,b);break;case \"number\":case \"boolean\":this.sb(a+\n0,b);break;case \"object\":if(null===a)this.rb(b);else if(null!=a.length)this.ob(a,b);else throw\"Wrong API use : tried to bind a value of an unknown type (\"+a+\").\";}};a.prototype.qb=function(a){var b;for(b in a){var c=a[b];var d=pc(this.ga,b);0!==d&&this.Ta(c,d)}return!0};a.prototype.pb=function(a){var b,c;var d=b=0;for(c=a.length;b<c;d=++b){var e=a[d];this.Ta(e,d+1)}return!0};a.prototype.reset=function(){this.freemem();return qc(this.ga)===c.Aa&&rc(this.ga)===c.Aa};a.prototype.freemem=function(){for(var a;a=\nthis.Ha.pop();)fa(a);return null};a.prototype.free=function(){this.freemem();var a=sc(this.ga)===c.Aa;delete this.db.Ea[this.ga];this.ga=ea;return a};return a}();var e=function(){function a(a){this.filename=\"dbfile_\"+(4294967295*Math.random()>>>0);if(null!=a){var c=this.filename,d=c?m(\"/\",c):\"/\";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if(\"string\"===typeof a){for(var e=Array(a.length),k=0,Oa=a.length;k<Oa;++k)e[k]=a.charCodeAt(k);a=e}ka(d,c|146);e=p(d,\"w\");la(e,a,0,a.length,0,void 0);\nma(e);ka(d,c)}}this.handleError(g(this.filename,b));this.db=q(b,\"i32\");tc(this.db);this.Ea={};this.qa={}}a.prototype.run=function(a,c){if(!this.db)throw\"Database closed\";c?(a=this.prepare(a,c),a.step(),a.free()):this.handleError(n(this.db,a,0,0,b));return this};a.prototype.exec=function(a){if(!this.db)throw\"Database closed\";var c=na();var e=oa(a)+1;var g=h(e);r(a,l,g,e);a=g;e=h(4);for(g=[];q(a,\"i8\")!==ea;){pa(b);pa(e);this.handleError(ha(this.db,a,-1,b,e));var k=q(b,\"i32\");a=q(e,\"i32\");if(k!==ea){var n=\nnew d(k,this);for(k=null;n.step();)null===k&&(k={columns:n.getColumnNames(),values:[]},g.push(k)),k.values.push(n.get());n.free()}}qa(c);return g};a.prototype.each=function(a,b,c,d){\"function\"===typeof b&&(d=c,c=b,b=void 0);for(a=this.prepare(a,b);a.step();)c(a.getAsObject());a.free();if(\"function\"===typeof d)return d()};a.prototype.prepare=function(a,c){pa(b);this.handleError(A(this.db,a,-1,b,ea));a=q(b,\"i32\");if(a===ea)throw\"Nothing to prepare\";var e=new d(a,this);null!=c&&e.bind(c);return this.Ea[a]=\ne};a.prototype[\"export\"]=function(){var a;var c=this.Ea;for(e in c){var d=c[e];d.free()}d=this.qa;for(e in d)c=d[e],t[c-ra]=null;this.qa={};this.handleError(k(this.db));d=this.filename;var e=e={encoding:\"binary\"};e.flags=e.flags||\"r\";e.encoding=e.encoding||\"binary\";if(\"utf8\"!==e.encoding&&\"binary\"!==e.encoding)throw Error('Invalid encoding type \"'+e.encoding+'\"');c=p(d,e.flags);d=sa(d).size;var n=new Uint8Array(d);ta(c,n,0,d,0);\"utf8\"===e.encoding?a=u(n,0):\"binary\"===e.encoding&&(a=n);ma(c);this.handleError(g(this.filename,\nb));this.db=q(b,\"i32\");return a};a.prototype.close=function(){var a;var b=this.Ea;for(a in b){var c=b[a];c.free()}c=this.qa;for(a in c)b=c[a],t[b-ra]=null;this.qa={};this.handleError(k(this.db));ua(\"/\"+this.filename);return this.db=null};a.prototype.handleError=function(a){if(a===c.Aa)return null;a=uc(this.db);throw Error(a);};a.prototype.getRowsModified=function(){return v(this.db)};a.prototype.create_function=function(a,b){a in this.qa&&(t[this.qa[a]-ra]=null,delete this.qa[a]);var d=va(function(a,\nc,d){var e,g;var k=[];for(e=g=0;0<=c?g<c:g>c;e=0<=c?++g:--g){var n=q(d+4*e,\"i32\");var A=wc(n);e=function(){switch(!1){case 1!==A:return ub;case 2!==A:return ub;case 3!==A:return xc;case 4!==A:return function(a){var b,c;var d=zc(a);var e=Ac(a);a=new Uint8Array(d);for(b=c=0;0<=d?c<d:c>d;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(n);k.push(e)}try{var v=b.apply(null,k)}catch(yc){v=yc;vb(a,v,-1);return}switch(typeof v){case \"boolean\":Bc(a,v?1:0);break;case \"number\":Cc(a,\nv);break;case \"string\":Dc(a,v,-1,-1);break;case \"object\":null===v?wb(a):null!=v.length?(c=ca(v),Ec(a,c,v.length,-1),fa(c)):vb(a,\"Wrong API use : tried to return a value of an unknown type (\"+v+\").\",-1);break;default:wb(a)}});this.qa[a]=d;this.handleError(Fc(this.db,a,b.length,c.nb,0,d,0,0,0));return this};return a}();var g=f.cwrap(\"sqlite3_open\",\"number\",[\"string\",\"number\"]);var k=f.cwrap(\"sqlite3_close_v2\",\"number\",[\"number\"]);var n=f.cwrap(\"sqlite3_exec\",\"number\",[\"number\",\"string\",\"number\",\"number\",\n\"number\"]);f.cwrap(\"sqlite3_free\",\"\",[\"number\"]);var v=f.cwrap(\"sqlite3_changes\",\"number\",[\"number\"]);var A=f.cwrap(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"string\",\"number\",\"number\",\"number\"]);var ha=f.cwrap(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var da=f.cwrap(\"sqlite3_bind_text\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var Pa=f.cwrap(\"sqlite3_bind_blob\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var oc=f.cwrap(\"sqlite3_bind_double\",\n\"number\",[\"number\",\"number\",\"number\"]);var nc=f.cwrap(\"sqlite3_bind_int\",\"number\",[\"number\",\"number\",\"number\"]);var pc=f.cwrap(\"sqlite3_bind_parameter_index\",\"number\",[\"number\",\"string\"]);var fc=f.cwrap(\"sqlite3_step\",\"number\",[\"number\"]);var uc=f.cwrap(\"sqlite3_errmsg\",\"string\",[\"number\"]);var pb=f.cwrap(\"sqlite3_data_count\",\"number\",[\"number\"]);var hc=f.cwrap(\"sqlite3_column_double\",\"number\",[\"number\",\"number\"]);var ic=f.cwrap(\"sqlite3_column_text\",\"string\",[\"number\",\"number\"]);var kc=f.cwrap(\"sqlite3_column_blob\",\n\"number\",[\"number\",\"number\"]);var jc=f.cwrap(\"sqlite3_column_bytes\",\"number\",[\"number\",\"number\"]);var lc=f.cwrap(\"sqlite3_column_type\",\"number\",[\"number\",\"number\"]);var mc=f.cwrap(\"sqlite3_column_name\",\"string\",[\"number\",\"number\"]);var rc=f.cwrap(\"sqlite3_reset\",\"number\",[\"number\"]);var qc=f.cwrap(\"sqlite3_clear_bindings\",\"number\",[\"number\"]);var sc=f.cwrap(\"sqlite3_finalize\",\"number\",[\"number\"]);var Fc=f.cwrap(\"sqlite3_create_function_v2\",\"number\",\"number string number number number number number number number\".split(\" \"));\nvar wc=f.cwrap(\"sqlite3_value_type\",\"number\",[\"number\"]);var zc=f.cwrap(\"sqlite3_value_bytes\",\"number\",[\"number\"]);var xc=f.cwrap(\"sqlite3_value_text\",\"string\",[\"number\"]);f.cwrap(\"sqlite3_value_int\",\"number\",[\"number\"]);var Ac=f.cwrap(\"sqlite3_value_blob\",\"number\",[\"number\"]);var ub=f.cwrap(\"sqlite3_value_double\",\"number\",[\"number\"]);var Cc=f.cwrap(\"sqlite3_result_double\",\"\",[\"number\",\"number\"]);var wb=f.cwrap(\"sqlite3_result_null\",\"\",[\"number\"]);var Dc=f.cwrap(\"sqlite3_result_text\",\"\",[\"number\",\n\"string\",\"number\",\"number\"]);var Ec=f.cwrap(\"sqlite3_result_blob\",\"\",[\"number\",\"number\",\"number\",\"number\"]);var Bc=f.cwrap(\"sqlite3_result_int\",\"\",[\"number\",\"number\"]);f.cwrap(\"sqlite3_result_int64\",\"\",[\"number\",\"number\"]);var vb=f.cwrap(\"sqlite3_result_error\",\"\",[\"number\",\"string\",\"number\"]);var tc=f.cwrap(\"RegisterExtensionFunctions\",\"number\",[\"number\"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var ea=0;c.Aa=0;c.Dd=1;c.Wd=2;c.ge=3;c.Gb=4;c.Ib=5;c.Zd=6;c.NOMEM=7;c.je=8;c.Xd=9;c.Yd=\n10;c.Lb=11;c.NOTFOUND=12;c.Vd=13;c.Jb=14;c.he=15;c.EMPTY=16;c.ke=17;c.le=18;c.Kb=19;c.$d=20;c.be=21;c.ce=22;c.Hb=23;c.Ud=24;c.ie=25;c.de=26;c.ee=27;c.me=28;c.lb=100;c.DONE=101;c.kb=1;c.FLOAT=2;c.mb=3;c.cb=4;c.fe=5;c.nb=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(wa);var xa={},w;for(w in f)f.hasOwnProperty(w)&&(xa[w]=f[w]);f.arguments=[];f.thisProgram=\"./this.program\";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var ya=!1,x=!1,y=!1,za=!1;ya=\"object\"===typeof window;\nx=\"function\"===typeof importScripts;y=\"object\"===typeof process&&\"function\"===typeof require&&!ya&&!x;za=!ya&&!y&&!x;var z=\"\";\nif(y){z=__dirname+\"/\";var Aa,Ba;f.read=function(a,b){var c=B(a);c||(Aa||(Aa=require(\"fs\")),Ba||(Ba=require(\"path\")),a=Ba.normalize(a),c=Aa.readFileSync(a));return b?c:c.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1<process.argv.length&&(f.thisProgram=process.argv[1].replace(/\\\\/g,\"/\"));f.arguments=process.argv.slice(2);\"undefined\"!==typeof module&&(module.exports=f);process.on(\"unhandledRejection\",C);f.quit=function(a){process.exit(a)};\nf.inspect=function(){return\"[Emscripten Module object]\"}}else if(za)\"undefined\"!=typeof read&&(f.read=function(a){var b=B(a);return b?Ca(b):read(a)}),f.readBinary=function(a){var b;if(b=B(a))return b;if(\"function\"===typeof readbuffer)return new Uint8Array(readbuffer(a));b=read(a,\"binary\");assert(\"object\"===typeof b);return b},\"undefined\"!=typeof scriptArgs?f.arguments=scriptArgs:\"undefined\"!=typeof arguments&&(f.arguments=arguments),\"function\"===typeof quit&&(f.quit=function(a){quit(a)});else if(ya||\nx)x?z=self.location.href:document.currentScript&&(z=document.currentScript.src),z=0!==z.indexOf(\"blob:\")?z.substr(0,z.lastIndexOf(\"/\")+1):\"\",f.read=function(a){try{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.send(null);return b.responseText}catch(c){if(a=B(a))return Ca(a);throw c;}},x&&(f.readBinary=function(a){try{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.responseType=\"arraybuffer\";b.send(null);return new Uint8Array(b.response)}catch(c){if(a=B(a))return a;throw c;}}),f.readAsync=function(a,\nb,c){var d=new XMLHttpRequest;d.open(\"GET\",a,!0);d.responseType=\"arraybuffer\";d.onload=function(){if(200==d.status||0==d.status&&d.response)b(d.response);else{var e=B(a);e?b(e.buffer):c()}};d.onerror=c;d.send(null)},f.setWindowTitle=function(a){document.title=a};var Da=f.print||(\"undefined\"!==typeof console?console.log.bind(console):\"undefined\"!==typeof print?print:null),Ea=f.printErr||(\"undefined\"!==typeof printErr?printErr:\"undefined\"!==typeof console&&console.warn.bind(console)||Da);\nfor(w in xa)xa.hasOwnProperty(w)&&(f[w]=xa[w]);xa=void 0;function Fa(a){var b=D[Ga>>2];a=b+a+15&-16;if(a<=Ha())D[Ga>>2]=a;else if(!Ia(a))return 0;return b}var ra=1,t=Array(64);function va(a){for(var b=0;64>b;b++)if(!t[b])return t[b]=a,ra+b;throw\"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.\";}var Ja=0;\nfunction q(a,b){b=b||\"i8\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":return l[a>>0];case \"i8\":return l[a>>0];case \"i16\":return Ka[a>>1];case \"i32\":return D[a>>2];case \"i64\":return D[a>>2];case \"float\":return La[a>>2];case \"double\":return Ma[a>>3];default:C(\"invalid type for getValue: \"+b)}return null}var Na=!1;function assert(a,b){a||C(\"Assertion failed: \"+b)}function Qa(a){var b=f[\"_\"+a];assert(b,\"Cannot call unknown function \"+a+\", make sure it is exported\");return b}\nfunction Ra(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,E,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Qa(a),k=[];a=0;if(d)for(var n=0;n<d.length;n++){var v=e[c[n]];v?(0===a&&(a=na()),k[n]=v(d[n])):k[n]=d[n]}c=g.apply(null,k);c=function(a){return\"string\"===b?F(a):\"boolean\"===b?!!a:a}(c);0!==a&&qa(a);return c}\nfunction pa(a){var b=\"i32\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":l[a>>0]=0;break;case \"i8\":l[a>>0]=0;break;case \"i16\":Ka[a>>1]=0;break;case \"i32\":D[a>>2]=0;break;case \"i64\":aa=[0,1<=+Sa(0)?~~+Ta(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case \"float\":La[a>>2]=0;break;case \"double\":Ma[a>>3]=0;break;default:C(\"invalid type for setValue: \"+b)}}var Ua=0,Va=3;\nfunction ca(a){var b=Ua;if(\"number\"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;var e;b==Va?e=g:e=[Wa,h,Fa][b](Math.max(d,1));if(c){var g=e;assert(0==(e&3));for(a=e+(d&-4);g<a;g+=4)D[g>>2]=0;for(a=e+d;g<a;)l[g++>>0]=0;return e}a.subarray||a.slice?E.set(a,e):E.set(new Uint8Array(a),e);return e}var Xa=\"undefined\"!==typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;\nfunction u(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.subarray&&Xa)return Xa.decode(a.subarray(b,c));for(d=\"\";b<c;){var e=a[b++];if(e&128){var g=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|g);else{var k=a[b++]&63;e=224==(e&240)?(e&15)<<12|g<<6|k:(e&7)<<18|g<<12|k<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function F(a){return a?u(E,a,void 0):\"\"}\nfunction r(a,b,c,d){if(!(0<d))return 0;var e=c;d=c+d-1;for(var g=0;g<a.length;++g){var k=a.charCodeAt(g);if(55296<=k&&57343>=k){var n=a.charCodeAt(++g);k=65536+((k&1023)<<10)|n&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e}\nfunction oa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}\"undefined\"!==typeof TextDecoder&&new TextDecoder(\"utf-16le\");function Ya(a){return a.replace(/__Z[\\w\\d_]+/g,function(a){return a===a?a:a+\" [\"+a+\"]\"})}function Za(a){0<a%16777216&&(a+=16777216-a%16777216);return a}var buffer,l,E,Ka,D,La,Ma;\nfunction $a(){f.HEAP8=l=new Int8Array(buffer);f.HEAP16=Ka=new Int16Array(buffer);f.HEAP32=D=new Int32Array(buffer);f.HEAPU8=E=new Uint8Array(buffer);f.HEAPU16=new Uint16Array(buffer);f.HEAPU32=new Uint32Array(buffer);f.HEAPF32=La=new Float32Array(buffer);f.HEAPF64=Ma=new Float64Array(buffer)}var Ga=60240,ab=f.TOTAL_MEMORY||16777216;5242880>ab&&Ea(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+ab+\"! (TOTAL_STACK=5242880)\");f.buffer?buffer=f.buffer:buffer=new ArrayBuffer(ab);$a();D[Ga>>2]=5303376;\nfunction bb(a){for(;0<a.length;){var b=a.shift();if(\"function\"==typeof b)b();else{var c=b.vb;\"number\"===typeof c?void 0===b.Ia?f.dynCall_v(c):f.dynCall_vi(c,b.Ia):c(void 0===b.Ia?null:b.Ia)}}}var cb=[],db=[],eb=[],fb=[],gb=!1;function hb(){var a=f.preRun.shift();cb.unshift(a)}var Sa=Math.abs,Ta=Math.ceil,G=0,ib=null,jb=null;f.preloadedImages={};f.preloadedAudios={};var H=null,kb=\"data:application/octet-stream;base64,\";db.push({vb:function(){lb()}});H=\"data:application/octet-stream;base64,AAAAAAAAAABkCgEQAABzAAQFAABnAAEDHgB6AAQGAABxAAQJAABRAAQKAAB3AAQOAABjAAAIAABvCAAAAAJ1CgAQAAB4EAAAEAFYEAAAAARmAAEBAABlAAECHgBFAAECDgBHAAEDDgBpCgEQAABuAAAEAAAlAAAHAABwEAANAAFUAAALAABTAAAMAAByCgEPAAAAAAAAAAAwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OWFiY2RlZgAAAAAAAAAAAAAAAAAAAAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6W1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AwAAADQAAAAAAgAAAAAAANF5AADYcwAAQQAAAEEAAABBAAAAQgAAAAAAAAAAAAAAAAAAAAAAAABCAAAAQQAAAEIAAABDAAAAQwAAAEQAAABEAAAARQAAAAMAAAA0AAAAAAIAAAAAAADWeQAA3HMAAEEAAABBAAAAQQAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAEEAAABCAAAAQwAAAEMAAABEAAAARAAAAEUAAAADAAAANAAAAAACAAAAAAAA4HkAAOBzAABBAAAAQQAAAEEAAABCAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABBAAAAQgAAAEMAAABDAAAARAAAAEQAAABFAAAAAwAAADQAAAAAAgAAAAAAAO15AADYcwAAQQAAAEEAAABBAAAAQgAAAAAAAAAAAAAAAAAAAAAAAABCAAAAQQAAAEIAAABDAAAAQwAAAEQAAABEAAAARQAAAAQFAwUBBQEFAgUCBQEFAQUEBQMFAQUBBQIFAgUBBQEFnwAAAGwAAAAfAAUBWgAAAVEBAABFAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAEAgABAAACAAAAAAAAAAAAMDAwMDAwMDAwMAAAAAAAAAAoKCgoKCgICAgICAgICAgICAgICAgICAgICgAAAAECAKioqKioqIiIiIiIiIiIiIiIiIiIiIiIiIiIAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAUkVJTkRFWEVERVNDQVBFQUNIRUNLRVlCRUZPUkVJR05PUkVHRVhQTEFJTlNURUFEREFUQUJBU0VMRUNUQUJMRUZUSEVOREVGRVJSQUJMRUxTRVhDTFVERUxFVEVNUE9SQVJZQ09OU1RSQUlOVEVSU0VDVElFU0FWRVBPSU5UT0ZGU0VUUkFOU0FDVElPTkFUVVJBTFRFUkFJU0VYQ0VQVFJJR0dFUkVGRVJFTkNFU1VOSVFVRVJZV0lUSE9VVEVSRUxFQVNFWENMVVNJVkVYSVNUU0FUVEFDSEFWSU5HTE9CRUdJTk5FUkFOR0VCRVRXRUVOT1RISU5HUk9VUFNDQVNDQURFVEFDSENBU0VDT0xMQVRFQ1JFQVRFQ1VSUkVOVF9EQVRFSU1NRURJQVRFSk9JTlNFUlRMSUtFTUFUQ0hQTEFOQUxZWkVQUkFHTUFCT1JUVVBEQVRFVkFMVUVTVklSVFVBTElNSVRXSEVOT1ROVUxMV0hFUkVDVVJTSVZFQUZURVJFTkFNRUFOREVGQVVMVEFVVE9JTkNSRU1FTlRDQVNUQ09MVU1OQ09NTUlUQ09ORkxJQ1RDUk9TU0NVUlJFTlRfVElNRVNUQU1QQVJUSVRJT05ERUZFUlJFRElTVElOQ1REUk9QUkVDRURJTkdGQUlMRklMVEVSRVBMQUNFRk9MTE9XSU5HRlJPTUZVTExJRklTTlVMTE9SREVSRVNUUklDVE9USEVSU09WRVJJR0hUUk9MTEJBQ0tST1dTVU5CT1VOREVEVU5JT05VU0lOR1ZBQ1VVTVZJRVdJTkRPV0JZSU5JVElBTExZUFJJTUFSWQAAAAAAAAAAAAAAAAAAAgACAAgACQAOABAAFAAXABkAGQAdACEAJAApAC4A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7gGmAHkBeQF7AkMDQwN7AuwC2wNeCF4IXgjAAS0ALQCTAeQB9gFqAA0C/AEQAhoC7gHuAe4B7gHuAe4B7gHuAe4BVADuAe4B7gHuAe4B7gHuAe4B7gHuAe4B7gELAQsBCwHuAe4B7gHuAQED7gHuAe4BBADdAe4B7gEUA+4B7gHuAe4B7gHuAe4B7gHXAgUAhwDZA9kD2QPZAwoChwCHAB0DRgFrA9oDyAMMBAwEDgTIA8gDDgTMAzkEXgSqBKoEqgQMBPUC9QKyAwkDSwROBDUFAgUCBWUFZQUCBREFNgWOBX4FKgWoBagFqAWoBQIFqwUqBSoFNgWOBX4FfgUqBQIFqwVBBZoFAgWrBcsFAgWrBQIFqwXLBXwFfAV8BawFywV8BX0FfAWsBXwFfAXLBY8FjwXLBX8FnQV/BZ0FfwWdBX8FnQUCBbYFtgWDBYoFAQYCBYgFgwWUBZcFKgUTBhgGJwYnBjAGMAYwBl4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IPQDVAnYBOATGAAMDGwGoBJoEpgRTBMUEtgTKBMsE0ATRBNgE2gSlBGkE5QTYALoE3wTgBOEEawR/BPoEDQXEBL4ERQZIBjcGswVABvUFRgY+BkIG1gXUBekFTgbgBVQG5gVZBm8G6wXjBfsFOwZVBuoFRwZKBkwGTQYABhAGYgb9BYUGggZzBh4G8gVJBnIGSwZDBmcGCwYmBnsGgAaDBhkGIQaEBlYGhwaIBoEGiQZYBoYGigZeBn4GjQYXBpEGkgYNBpQGlQaTBpgGmgacBpsGnwaeBjEGogapBlEGoAarBjwGrQahBqYGqAavBnQGiwZ6BqwGjAZ4BrIGvgbDBsIGwQbFBroGxgatBskGygbOBs8GzQbRBtMG3wbVBtYG2AbZBtcG2wbdBnwGdQZ3BnkGfQbhBvEGAAcAAAAAAAC4ALgAAwEEAQUBAwEEAQUBsACxALIAswC0ALUAuADQANQA1QC6ABMAvADNAM4AGAHNAN0AFgDDABgAwwDQAB8AwwDNAB0AzQDOAP8AIQAnAMgAyQDKACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AM0A4wDkAOMA5AA7AOMA5AADAQQBBQH8AEEA8QDwALgA8ADfAOAA8AD0APUA+gADAQQBBQETAP0ANgA3ADgAOQA6ALgA/wC4AM0AzgBgAGEAYgBjAGQAZQBmAGcAaABpAGoALgAvADAAMQAuACgBKQFuABsBEwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAYABhAGIAYwBkAGUAZgBnAGgAaQBqAF4AKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAbgBqAEkA+wByAEkAsgCzALQAtQA7ALgAJAFRALoAJwG8ANoAbAATAHIAuAALAMMAuABTALgAVQA2ADcAOAA5AM0AzgB8AJEAkgCTAGAAYQBiAGMAZABlAGYAZwBoAGkAagB4AHkAegB4AGYAUQDjAOQA3AATABAAbQBuAG8AgwCEABoAuAC4APAA5QBgAGEAYgBjAGQAZQBmAGcAaABpAGoA/QArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQBkAGUAZgBnAGgAaQBqAIMAhABqAH8ARQCBAIIAGwFwAHEAcgBzAHQAdQB2AFEATQBMAE8AKAF8ACoBywC4ABMAVAA7AFYAeQB6AFkAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAIwDNAM4AFgBxACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AM0AzgCDAIQAZABlACMBJAFyAEMAJwFCAGwAbQBuAG8AigBxAHwASgA7ALMAuAC1ALgAeQAWAA8BugATALwAuAAUATsAGAC4APEAwwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAkQA7AJMAuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQB7AOMA5ABuACgBKQEWABcAuABmAGcAaABpAGoA8ABtAG4AbwBwAMMAzABzAHQAdQAWALgA4gD9ANQAzQDOAH0AbQBuAG8AFgBkAGUAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAOwDjAOQAeQB6ADsAFQEbARMAIQEiATsAFwBMAPAA8QCPAEwASAC9AM0AzgA7AFYA+gBUAFkAVgDLAF8AWQAZASsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AOMA5AC4AG0AbgBvAAwAuABtAG4AbwC4ALgA8ABtAG4AbwC4AMMA1gA7ABsAuADNAM4AbQBuAG8AzQDOALgABwGKAM0AzgC4ACoAFgBgAGEAYgBjAGQAZQBmAGcAaABpAGoACgHjAOQAOwAOARQBXgBCAD8AEwDxABYAGgAXAPAA8QBIADsASQD6APEAbQBuAFIAFgA7AHIA3wDgAPoA/AA7AFsAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOwC4ABoAOwAMAW0AbgBvALgAkQCSAJMAcAA7AMsAcwB0AHUAFQFtAG4AbwDNAM4AwwB9ABUBbQBuAG8AZABlAIsAbQBuAG8A2wC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagBvAG0AbgBvAG0AbgBvAOMA5AATALgAiAC4ABcAbQBuAG8AyADJAMoA8AADAQQBBQHDAIgAkQC4AJMAuAC4AIgA1gArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDNAM4AzQDOAOMA5AC4AOUA4wDkAIMAhAC4ADsA2wC4ANsA8AAjASQBuADwACcBaQBqABYAFwDNAM4AGgC4APsAuADNAM4AuADNAM4AYABhAGIAYwBkAGUAZgBnAGgAaQBqAPsA2wDNAM4AzQDOALgAzQDOABMAuAAQALgAFwDxAG4A2wAVANsAuADxANsAHgEfAcMAuADDAM0AzgDJAMoAzQDOACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ALgAXwAWABcAuAAaABoA3ADjAOQA4wDkAMQAuAAXAPEAGgAaAMMA8QC4APAADADwAE0AGgBPAMMAUAAiAckAygDYALgA2gDDALgAGwBgAGEAYgBjAGQAZQBmAGcAaABpAGoADQHjAOQAKgC4AM0AzgC4ALgAEwDjAOQAwAAXAPAAdADEAEwA4wDkAHgAeQB6APAAPwD+AF8AVgDNAM4AWQDwALgAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAuAANAbgAmQCZAG8AuAAHAAgACQC4AIoAuAC4AMQAuAB4AHkAegC4AIoAzQDOALgAZgC4ALgAzQDOAJwAiADNAM4AzQDOAMYAxwCHAGAAYQBiAGMAZABlAGYAZwBoAGkAagC4AIAAuAC4ALgA/gCFALgA7QATAO8A5QDiABcAJAG4AOIAJwHiAOIAuADNAM4AzQDOAM0AzgC4ACQBEwC4ACcB/AArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDNAM4AuADNAM4AKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAnQCeABoAzQDOAP4AGgD8ALgADwC4ALgAuAAkAbgA/AAnARgAYABhAGIAYwBkAGUAZgBnAGgAaQBqAM0AzgDNAM4AzQDOAM0AzgC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagC4ALgAuAA7ALgAPAC4AOUAuADNAM4AuAACAbgAEwC4ABMAuAD2ALgAAgHNAM4AzQDOAM0AzgDNAM4AzQDOALgAzQDOAM0AzgDNAM4AzQDOAM0AzgAkAeIAlwAnAbgA5AAmAbgAdwC4AM0AzgBuAJYAJgGYALgA8AC4ABYAFwAXABMAuAAaAM0AzgCOAM0AzgDNAM4AuADGAMcAgwCEAM0AzgDNAM4AFgATABgAzQDOACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ALgAbQC4AG0AuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQAuAM0AzgDNAM4AzQDOAOgAuAC4ALgAXwC4ABwBHQH0APUA8gBgAGEAYgBjAGQAZQBmAGcAaABpAGoAzQDOAM0AzgDNAM4AuAAWALgAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAGAAXALgAuAAaALgAzQDOAM0AzgC4AB8AbACAABYAegC4ADUAhQAnAM0AzgAWAJcAzQDOAM0AzgBxAHIAFwDNAM4AGgA7ABcAFwCQABoAGgC4ABcAFwATABoAGgAHAAgAGAAXANYAFwAaAD0AGgA7ABcAFwAXABoAGgAaAJEAEwCTADsAuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQCRABcAkwBuABoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAFwC4ALgAGgBuALgAuAC4AIYAuAC4ALgAuAC4AG4AuAC4ALgAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAuAC4AIYALAG4APMAuAC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagC4ALgAuAC4ALgA4AC4ABoBEQETABABywC2APMA8wDmANEAFgHzAOcA0AAJARYB6gDqAOoA2QDVADwAEwDzANAA7QDpACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDQAPcAuwCGAPcA9wAmAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkA7QDnAL8AvwAXARcBGgGPAL8AbAAMARYAEwAUAAABFgArAAEBYABhAGIAYwBkAGUAZgBnAGgAaQBqACQA3gCOAOoAEgC/AOEAEgC+AGAAYQBiAGMAZABlAGYAZwBoAGkAagDhAL8A4QA7AOEAAQHqAOoAAAHeAN4AvgDqAJYAPgBHABMBEgG/ABMAFAC+ABYAFgDSAFEAvwC+ANIAvwBsAL4AzwDPAEAAzwAkANcAXgDSAM8A0QB3AM8AZABlAM8AagAwANcAzwBrANIAbQBuAG8ACwELAXIAOwDSAPkAiQBsAPgAvwD5APgAWAD5AI0ARwD4ACsBigCDAIQAFgC/APkAKwHtAFIA7gCWAAYBjABXAIsAkQCSAJMAlACVAF4A+ADuAOwAGQDrAGQAZQDqAMIAGgDBAA0AawAGAG0AbgBvAAgBuQByALkAtwDFALcAywC3AMsAywDFAMsA0wDTAAQAxQADAMsAFgCbAA8AIAHLAF0AIAEdARcAEADLAMsAFwCEAJEAkgCTAJQAlQAAAAEAAgCPAHsABQAYAIcAFAAQAAoACwAMAA0ADgCJAAEAEQCHAJAAEwAUAHsAFgA9AI8AJQB7ADUAbQAeADUAIAA1ADUAhgAiACQAAQAFACgAFgBsAJkAGgBEAEsARAApAIYAbAAYABQAfAATAHYAFwBDABYAQwA7ABYAFgAWABYAQwAcACUAFwCOAEYAFgBHABcAnQAXABcAGgBOABcAFgBRABcAUgAYABYAGACGAFcAFwATABQAXAAWAG0AXgAXABYAIgAiAIgAZABlABoAIgBVACIAJABrAFMAbQBuAG8AIgBaAHIAIgAXAEsASwAsABYAGAAaACIAFwB+ABoAFwAXADsAgwCEABcAFwAaABcAFgALABYAFgAWAEcAFwAXABYAkQCSAJMAlACVABoAFwBSAJoAhgCAAIYAVwCGAA8AAQAtAYYALQFeAC0BLQEtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwABAAIAcgAtAQUALQEtAS0BLQEKAAsADAANAA4ALQEtAREALQEtAS0BLQETABQALQEWAC0BLQEtAS0BHgAtASAALQGRAJIAkwCUAJUAJAAoAC0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtATsALQEtAS0BLQEtAS0BLQFGAC0BLQEtAUcALQEtAS0BTgAtAS0BUQATABQALQEWAC0BLQEtAS0BLQEtAVwALQEtAS0BLQFeAC0BJAAtAS0BLQFkAGUAZgAtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAtAS0BLQEtATsALQEtAS0BfgAtAS0BLQEtAYMAhAAtAUcALQEtAS0BLQEtAS0BLQETABQALQEWAC0BLQGRAJIAkwCUAJUALQGaAC0BLQFeAC0BJAAtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAFAC0BLQEtATsACgALAAwADQAOAC0BLQERAC0BLQEtAUcALQEtAS0BLQEtAS0BLQEtAR4ALQEgAC0BLQGRAJIAkwCUAJUAKAAtAS0BLQFeAC0BLQEtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAtAS0BLQEtAS0BRgAtAS0BLQEtAS0BLQEtAU4ALQEtAVEALQEtAS0BLQEtAS0BLQEtAS0BLQFcAC0BLQGRAJIAkwCUAJUALQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAX4ALQEtAS0BLQGDAIQALQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BmgAtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEAAAAAAAAAAAAAAAAAABcCKwVwAG0A0QBwAG0A0QCIBAEAAQAcAgIAjAQXAgwFzAS3BCEBgAGGACoAKgCTBX4BzAQJANkE8gDsAQsFkwN1AXsBAgRGAEYAqwECBJQDEQIRAhECdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAfAEIAQgBCAEIAW4ECAEIAXAAbQDRAI0BxgEFAhQC6wEUAtEE0QQUAu8AzgDtAXAAbQDRANAB2wB2AHYAdgB2AG8AiQG4AbwBEAAQAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHLA8sD1gPZA+sAtwVfAW4EowGAAXQAdAB0AHQAcwBzAHIAcgByAHEAnwF0AHQAdAB0AHMAcwByAHIAcgBxAJ8BwQN3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgC4A58BrQMqAbcDrQPIBRwCAgCMBFsEFwKyBaAAIQEGAIYA4AWFAZYBzwNSAQAE2QRRAUEExAVBBHYAdgB2AHYAKgAqAEkBtwO3A7kDdAB0AHQAdABzAHMAcgByAHIAcQCfATcBrgErATcBcQOgAAgBCAGRAYABRAFbBFwEXQQgAQ4CYACfAKEFFAKNAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHbAHcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AHMAcwByAHIAcgBxAJ8BIAEOApMBFQJ5AGYDZgOjAfoACwFQAdsBSwHaAewAoAA/ATwEQgG5BUkBXgEMABcCgAH2AVsEPASzATgBPAR0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwJEAyoAKgCKAKoBdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYARgBGACABDgKcAZsB4AGxBU8BTwAGANkBdARbBFwEXQT1AXYETgFFAysDzAUAAowEFgJ1BHsAuwAhAYABhgDAAbIBWwRQAF0B8gHZBHQAdAB0AHQAcwBzAHIAcgByAHEAnwF3BFsEdwTLAXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AJQBCAEIASsDtwX6AXABhAQXAnIAcgByAHEAnwEUAlsEXARdBOcABgLcBdgB1QHUAa8A8QGmAdsAsgRGAEYA0wFbBFwEXQSwAMkAyAB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwJbBAgBCAGzATgBWwQRAaMBgAEBAqoFWwRGATwEFAIFAlIAPASnAIQBRQBFAFsEPAQHAv0BPAQ8BAwAhQQ8BKQBdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAAgECARcCWwRcBF0EFQQXAlsEXARdBCsFFwIUAlsEXARdBCgB4wG7BDIDFgTAAUYARgBbBFwEXQQyADIAwAFkAfQBRgBGAM8AFwQgAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHFAQgBCAFbBMIBwQHBA/wBWAOAAQUCBQCEAzYDFALkAbUAWwRZAwQCBQIyA7gD+wEDAFsEtwPPBM8E4gGOAVsERwR3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgBbBBcC7gBbBG8FWwRcBF0EnwC3A7cDuQPnAFsEAwHYAdUB1AE2AVsEXARdBA0ADQApAdMBFAFbBFwEXQScAZsBRwRbBFwEXQSLAWMBdAB0AHQAdABzAHMAcgByAHIAcQCfAdAAWwRcBF0EWwRcBF0ECAEIAYABUQGGA4kBLwNbBFwEXQSdAZ0BnQEUAnAAbQDRADUBhAN3BBcCdwQXAokBhQO6BHcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AA0ADQANAA0ACQEJARcCjwAIAQgBIAEOAhcCXwSQARcCkgEUAv4BsQUAAhQCBgBxAJ8BKwT6BUYARgD6BRcCDwEXAkYARgAXAg0ADQB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BEAEVAQ0ADQANAA0AFwINAA0AgAEXAjABqQFMBBwBXwS4ACEDuQBSAR0BAgL8BXEB1wSeBZ4ERgBGAKkBqAFGAEYAdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAvgApBCsE+wW6AWsA+wWYAQgBCAEIAQgBfwF0BQUBmgFfAIQD5QGeAaUBFAIVBBQCLQFtBC8B6AGxAasFdAV2BRYBFwIWAQgCmwUWBHQAdAB0AHQAcwBzAHIAcgByAHEAnwGpAQgBCAEXBL4ANgA2ABcCIwGAAQgBCAFqAcIDFALsA3gBPAQIAQgBBQQFBMgBFAILAg4BKQQ8BDcANwA8BBQCugF3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgAXAnQFvgAuAWcF0AAXAhUDFgMXAxcCAwIXAisFcwFRAeoA6QDoAMsBAwIPAA8AywHdAcsBywEsACwAiACEAzgAOAA5ADkAoQSGAcUAdAB0AHQAdABzAHMAcgByAHIAcQCfARcCbAMXAroBFwISAWsDKwVlAYABYQGMAJIFsgOvBSsFbgUGANgE1AQkAToAOgA7ADsAPAA8ABcCsAWAARcCBgCPAXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AD0APQAXAi0ALQB3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgDFBd8BygAuAC4AEwFfAMcBFwLUABcCUQEXAq4FFwKZAQYA8gB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BMAAwADEAMQA+AD4APwA/ABcCdAB0AHQAdABzAHMAcgByAHIAcQCfARcCywEXAm4EFwJ/BBcCjgAXAkAAQAAXAjoFFwLuARcCvgEXAvAEFwI5BQ4ADgBBAEEAfQB9AEIAQgAzADMAFwJDAEMARABEADQANACTAJMAlACUAK0FPQFiAAYAFwLdBOEBFwI7AxcCSwBLAG4EZgDhAWQAFwIUAhcCcAEqBN8FgAEXAk0DNQA1AF0ARwBHAH4AfgAnARAChgEgAQ4CSABIAH8AfwCLAIABJgCAAIAAdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAFwLvARcCvwEXAncAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AOsAfAB8AJIAkgCRAJEAHwEXAv0EFwKFBBcChwGhAAcBzgB9AXQAdAB0AHQAcwBzAHIAcgByAHEAnwGEAIQAgwCDAIEAgQAXAh4AFwJ0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwLYACYE/AQXAnIBFwKCAIIASgBKABcCkwOFAWwDEQC1Aa0BHwBrA5QDTABMAAoBZQBJAEkAKwArAEMDQgM0AS8ALwBfADkDrwO5AaoD8QDxADEBuwE5AYAB8QBfAEoDSwPBANEBuQRHAe0AtAFfAPMD7wONA2kD7QDxAGsA/wOAAf8DuwOHBXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AP4DKQP+AzkDiQB3AGwAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgBqA4YFwwFrAPMDOgH5BD4B2gBBAUMBRQHIBLgEuwNKAVMBVAF0AHQAdAB0AHMAcwByAHIAcgBxAJ8BBQUqBewE1QW+BfcEGwEJAjAFdAB0AHQAdABzAHMAcgByAHIAcQCfAacEoASVBJQElgQKAs8F0wDMAYABAAHHAG8B6QRWAcMA1gEzAVgBCwBNAQ0CvQEbBSMFdwHLALcEfwSAAVoBawW8AGgBeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AGoFrAHSBfUALAFcAXwEbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgC9AMYAmgWYBU4AUQCjAFIAiAG3AXAFrQBpAA8CIwAEAJ0AIAV0AHQAdAB0AHMAcwByAHIAcgBxAJ8BEgKlAF0AGAWvAbABqADPAd0AdAB0AHQAdABzAHMAcgByAHIAcQCfAakAxAGqAKABqwB2AXQBtgEkACYFsQDhAGUFVwDKAQwCewU8AQEBaQAPAuMABAC2AM0BoABAAeQAeQGXBNwB5QDLBMoElQHJBBICwgTBA3oBrwSuBDsDTAFnAGcArQSXAQgAwQTeBWgA5wGgARkCGAIZARoBtwOgAeoB9ATwAVwAVQHzAPUEVwH0APMEegAMAlkBtQUDAiABDgIKAGIB8gS0BWAB+AHiBGMAVwVeAPcB8wG3A7cDuQO6AxsAwQNbAeEEwgD7AGYBZwBnAGcBnQQiABoCVgRoAP8AoAEZAhgCHgH8ALcD/gAbApUAkgSLBY0EjAWKBZYAiQWHABcBEQOXAKEBqwTEACIB0gCCAaoEDQGDAaIA/QOFAE0AqAT7A6cDtwO3A7kDugMbAMcFUASiAaQAmQAMAdkApgBbAzIBbgFuAW0B/QBrAdwACwQeA6wAqwNpAA8CmwAEAIoBrgCMAZwAUwAOBNUAVAAmAVUAVgDfAN4AEgIKBJAAJQESAOAAOwHxAAMEeQSyAMkB4gCzACUAIANOAc4B5gBIAdIBtADXAaABWAATABQAWQAYAUYDngC/AFoA1wDeAQwCSQTMAMAA2wNbAJgALgQnAJoALwT4AeYBKADpAc0A+QEEAWkADwLWAAQAjAPBAwYBtwDwABUAhwNnAGcAawAWAD4EFwASAmgAQASgARkCGAIYAEUEtwMZADIEQgRGBAcAIQD/AboAGgDqA4EBXwDcA9oDoAEgAQ4C3gMUBPYAEwT3AN8DHAApAGoADAK8AyoDHQC3A7cDuQO6AxsAEwJpAfgBpwH4AGUD+QD3AdcFbAFRBIkE1gWJBMEDiQSJBIkEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAlAEogG3A4kEDAGJBIkEiQSJBG4BbgFtAf0AawGJBIkEHgOJBIkEiQSJBGkADwKJBAQAiQSJBIkEiQTVAIkEJgGJBLcDtwO5A7oDGwASAiUBiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEoAGJBIkEiQSJBIkEiQSJBNcAiQSJBIkEDAKJBIkEiQSYAIkEiQSaAGkADwKJBAQAiQSJBIkEiQSJBIkE1gCJBIkEiQSJBMEDiQQSAokEiQSJBGcAZwBwA4kEiQSJBIkEaACJBKABGQIYAokEiQS3A4kEiQSJBIkEoAGJBIkEiQSBAYkEiQSJBIkEIAEOAokEDAKJBIkEiQSJBIkEiQSJBGEADwKJBAQAiQSJBLcDtwO5A7oDGwCJBKcBiQSJBMEDiQQSAokEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAokEiQS3AwwBiQSJBIkEoAFuAW4BbQH9AGsBiQSJBB4DiQSJBIkEDAKJBIkEiQSJBIkEiQSJBIkE1QCJBCYBiQSJBLcDtwO5A7oDGwAlAYkEiQSJBMEDiQSJBIkEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAokEiQS3A4kEiQSJBIkEiQTXAIkEiQSJBIkEiQSJBIkEmACJBIkEmgCJBIkEiQSJBIkEiQSJBIkEiQSJBNYAiQSJBLcDtwO5A7oDGwCJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEgQGJBIkEiQSJBCABDgKJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSnAQAAAAAABgAGAAZgBYcE8QSHBIcEhwRgBWAFYAWHBA8FDwWVBaYEhwSHBIcEhwSHBIcEhwSHBIcEhwRfBYcEhwSHBIcEswWzBYcEhwSHBIcEhwSHBIcEhwSHBBUFhwSHBIcEhwSHBGEFYgWHBIcEhwSUBZYFcQUfBR4FHQUcBYMFAgUaBRMFFwVbBVwFWgVeBWIFYQWHBBYFPgVMBT0FhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBEYFSwVRBUoFRwVABT8FQQVCBYcEnATNBIcEhwSHBIcEpwWmBYcEhwSmBEMFRAVOBU0FnAXUBdMFcgWHBIcEhwSHBIcEhwSzBYcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBLMFswWHBKYEswWzBaIEOAU3BaIECQWHBKIF8QToBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSZBZcFhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTtBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTOBYcEfgXbBO0E7QTtBO0E7wTcBNoE5wSmBI4E+AUZBQQFBAX1BRkFGQX1BbQE4gWxBA8FDwUPBQQFCQUJBV0F7gTnBIcE+AX2BPYE9wX3BfYEcgUiBSgF0AQZBdYE1gTWBNYE9gSZBBkFGQUiBSgF0ATQBBkF9gSZBIIF8gX2BJkEaAX2BJkE9gSZBGgFzgTOBM4EwwRoBc4EtATOBMMEzgTOBGgFbAVsBWgFCAUDBQgFAwUIBQMFCAUDBfYEvQW9BRQFCQVjBfYEhwQUBRIFEAUZBZ8ExgTRBdEFzQXNBc0F/QX9BaIF3QWmBKYEpgSmBN0FtgS2BKYEpgSmBKYE3QWHBIcEhwSHBIcEhwTYBYcEcwX6BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcELQWHBIoEnwWHBIcEnQWHBIcEhwSHBIcEhwT7BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBPQFhwSHBIcEhwSHBIcEgQWABYcEhwT4BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwQRBYcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTCBQoFhwSHBOsFhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBOYF3gQvBYcELgUyBYcEkwSHBAAAAAAAAP/9//0A/////v7+/fv6/wD9/wD7/gD+/gD8+v4A/vz8/Pz9/fv+/Pz//gD/AP7+/f39/v7///79/gD+/gD//vn7+/YAAP0A/v///P4A9/z//fz//f/+//f2/Pv//wAA+/37/gAA/v4A+ff5+QD+//3//fv9//79/P4AAP3+/AAA/fz+//8AAP0A/gD+/Pz6AP74+/n9+/n5APX4/P7/AP39//3///37//////36+/z6+//7/f39/f39/f3+/fv+/f38/v7+//77//77/fv7/Pv7/P4A/wAA/f8A/fT/AAD9+/0A/vz+/f4A/fv6+/r+/vv1//4A///9AP79/v39/vj4+v38+v////z6/QD+//3//fr5//j//PgA//3//v36+P/9+/v6/Pv//gD9+v///v/+/v4A/v7+//77/QD7//7///7+AP/+/wD+/P7//////////gD+/v3/AP/////+/////////////wD9/wD/AAD///3+APz+AAAAAAAAAAAAAJSwAAABAAAAOogAAAEAAAC0ALQAswC1ALYAtgC2ALYAtQC1ALUAtQC1ALoAvAC+AL4AvQC9ALsAuwDCAMIAxADGAMYAxgDHAMsAzADMAMwAzADMAMwAzADMAMwAzADMAMwAzADRANEA0wDTANUA1QDVANUA1gDWANYA1gDWANQA1ADXANcA1wDBANkA2gDaANoA2gDaAN0AzwDPAN4A3gDfAN8AtQDhAOEAtQC1ALUAwwDDAMMA4wDmAOYA5gDkAOQA8ADwAOcA5wDnAPIA6ADoAOgA8wDzAOkA6QD1APUA9AD0APQA9AC/AL8A4gDiAPsA+wD7APsA9gD2APYA9gD4APgA9wD3APcA+QD5AO0A7QDbANsA0ADQANAA6wDrAOwA7ADuAO4A7gDuALUA6gDqALUA/gD+AP4A/gC1ALUAAQEBAQEBAQH/AP8AAAEAAfwA/ADOAM4AzgDOAM4AzQDNAM0AzgDOAM4AzgDOAM4AzgDNAM4AzgDOAM4AzgDOAM4AzgDOAAMBzgDOAM4AzgDOAM4AzgDOAM4ABAEEAc4ABQEFAc4AzgDOAM4AzgDOAAgBCAEJAQkBBwEHAfoA8QDxAAYBBgG1AAoBCgHSANIA3ADcAAsBCwG1ALUAtQAMAQwBtQC1ALUAtQC1AMkAygC1AA4BEAEQARABEQERAREBEwETAQ8BDwEVARYBFgEUARQBFAEUAc4AzgDgAOAA4AC1ALUAtQAYARgBtQC1ALUAtQC1ALUAGQG1ALUAtQAbAR0BHgEeAR8B/QD9AOUA5QAhASEBIgEjASMBIwEjASMBIwEkASQBJAEnASkBKQEqASoBKAEoASsBKwEsASwBLAHvAAIBAgEmASYBsACxALEAsgCyALIAtwC3ALcAuQC5ALUAwADAALgAuAC4AMYAxwDIAMgAxQDFAMwAwQDYANgA2QDdAN8A4wDkAPIA8wDOAAMB+gANAQ0BDQENAQ0ByQASARIBFQEWARcBFwEaARoBHAEcAR0BIAEgASAB/QAAAEkAAAAkAAoAWgAAADQACQCAAAAAWgABAFMAAABOAAAACwALAAUAAgBGAAAAdQAAAFOeAABMAAAAVwAAAFIAAABengAAVgAAAFcAAABSAAAAaZ4AAFYAAABXAAAAUgAAAG6eAABZAAAA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dXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBz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MTk6NDk6NTMgODg0YjRiN2U1MDJiNGU5OTE2NzdiNTM5NzEyNzdhZGZhZjBhMDRhMjg0ZjhlNDgzZTI1NTNkMGY4MzE1NmI1MABjYW5ub3QgZnN0YXQgZGIgZmlsZSAlcwBmaWxlIHVubGlua2VkIHdoaWxlIG9wZW46ICVzAG11bHRpcGxlIGxpbmtzIHRvIGZpbGU6ICVzAGZpbGUgcmVuYW1lZCB3aGlsZSBvcGVuOiAlcwBvcGVuAGNsb3NlAGFjY2VzcwBnZXRjd2QAc3RhdABmc3RhdABmdHJ1bmNhdGUAZmNudGwAcmVhZABwcmVhZABwcmVhZDY0AHdyaXRlAHB3cml0ZQBwd3JpdGU2NABmY2htb2QAZmFsbG9jYXRlAHVubGluawBvcGVuRGlyZWN0b3J5AG1rZGlyAHJtZGlyAGZjaG93bgBnZXRldWlkAG1tYXAAbXVubWFwAG1yZW1hcABnZXRwYWdlc2l6ZQByZWFkbGluawBsc3RhdABpb2N0bABhdHRlbXB0IHRvIG9wZW4gIiVzIiBhcyBmaWxlIGRlc2NyaXB0b3IgJWQAL2Rldi9udWxsAG9zX3VuaXguYzolZDogKCVkKSAlcyglcykgLSAlcwBjYW5ub3Qgb3BlbiBmaWxlACVzIGF0IGxpbmUgJWQgb2YgWyUuMTBzXQBmdWxsX2ZzeW5jACVzL2V0aWxxc18lbGx4JWMAL3Zhci90bXAAL3Vzci90bXAAL3RtcABTUUxJVEVfVE1QRElSAFRNUERJUgAlcy1zaG0AcmVhZG9ubHlfc2htAG1vZGVvZgBwc293ACVzLmxvY2sAZnN5bmMAL2Rldi91cmFuZG9tAHVuYWJsZSB0byBvcGVuIGEgdGVtcG9yYXJ5IGRhdGFiYXNlIGZpbGUgZm9yIHN0b3JpbmcgdGVtcG9yYXJ5IHRhYmxlcwA6bWVtb3J5OgAtam91cm5hbAAALXdhbAAAbm9sb2NrAGltbXV0YWJsZQByZWNvdmVyZWQgJWQgZnJhbWVzIGZyb20gV0FMIGZpbGUgJXMAZGF0YWJhc2UgY29ycnVwdGlvbgBjYW5ub3QgbGltaXQgV0FMIHNpemU6ICVzANnVBfkgoWPXcmVjb3ZlcmVkICVkIHBhZ2VzIGZyb20gJXMAQCAgAEFQSSBjYWxsZWQgd2l0aCBmaW5hbGl6ZWQgcHJlcGFyZWQgc3RhdGVtZW50AEZPUkVJR04gS0VZIGNvbnN0cmFpbnQgZmFpbGVkACVzLW1qWFhYWFhYOVhYegBNSiBkZWxldGU6ICVzAE1KIGNvbGxpZGU6ICVzAC1taiUwNlg5JTAyWAAlbGxkACUhLjE1ZwA5MjIzMzcyMDM2ODU0Nzc1ODAAQVBJIGNhbGxlZCB3aXRoIE5VTEwgcHJlcGFyZWQgc3RhdGVtZW50ACUuMngAU2F2ZXBvaW50AEF1dG9Db21taXQAVHJhbnNhY3Rpb24AU29ydGVyTmV4dABQcmV2AE5leHQAQ2hlY2twb2ludABKb3VybmFsTW9kZQBWYWN1dW0AVkZpbHRlcgBWVXBkYXRlAEdvdG8AR29zdWIASW5pdENvcm91dGluZQBZaWVsZABNdXN0QmVJbnQASnVtcABPbmNlAElmAE5vdABJZk5vdABJZk51bGxSb3cAU2Vla0xUAFNlZWtMRQBTZWVrR0UAU2Vla0dUAElmTm9Ib3BlAE5vQ29uZmxpY3QATm90Rm91bmQARm91bmQAU2Vla1Jvd2lkAE5vdEV4aXN0cwBMYXN0AElmU21hbGxlcgBTb3J0ZXJTb3J0AFNvcnQAUmV3aW5kAElkeExFAElkeEdUAElkeExUAElkeEdFAFJvd1NldFJlYWQAUm93U2V0VGVzdABPcgBBbmQAUHJvZ3JhbQBGa0lmWmVybwBJZlBvcwBJZk5vdFplcm8ARGVjckp1bXBaZXJvAElzTnVsbABOb3ROdWxsAE5lAEVxAEd0AExlAEx0AEdlAEVsc2VOb3RFcQBJbmNyVmFjdXVtAFZOZXh0AEluaXQAUHVyZUZ1bmMwAEZ1bmN0aW9uMABQdXJlRnVuYwBGdW5jdGlvbgBSZXR1cm4ARW5kQ29yb3V0aW5lAEhhbHRJZk51bGwASGFsdABJbnRlZ2VyAEludDY0AFN0cmluZwBOdWxsAFNvZnROdWxsAEJsb2IAVmFyaWFibGUATW92ZQBDb3B5AFNDb3B5AEludENvcHkAUmVzdWx0Um93AENvbGxTZXEAQWRkSW1tAFJlYWxBZmZpbml0eQBDYXN0AFBlcm11dGF0aW9uAENvbXBhcmUASXNUcnVlAE9mZnNldABDb2x1bW4AQWZmaW5pdHkATWFrZVJlY29yZABDb3VudABSZWFkQ29va2llAFNldENvb2tpZQBCaXRBbmQAQml0T3IAU2hpZnRMZWZ0AFNoaWZ0UmlnaHQAQWRkAFN1YnRyYWN0AE11bHRpcGx5AERpdmlkZQBSZW1haW5kZXIAQ29uY2F0AFJlb3BlbklkeABCaXROb3QAT3BlblJlYWQAT3BlbldyaXRlAFN0cmluZzgAT3BlbkR1cABPcGVuQXV0b2luZGV4AE9wZW5FcGhlbWVyYWwAU29ydGVyT3BlbgBTZXF1ZW5jZVRlc3QAT3BlblBzZXVkbwBDbG9zZQBDb2x1bW5zVXNlZABTZWVrSGl0AFNlcXVlbmNlAE5ld1Jvd2lkAEluc2VydABEZWxldGUAUmVzZXRDb3VudABTb3J0ZXJDb21wYXJlAFNvcnRlckRhdGEAUm93RGF0YQBSb3dpZABOdWxsUm93AFNlZWtFbmQAU29ydGVySW5zZXJ0AElkeEluc2VydABJZHhEZWxldGUARGVmZXJyZWRTZWVrAElkeFJvd2lkAERlc3Ryb3kAQ2xlYXIAUmVzZXRTb3J0ZXIAQ3JlYXRlQnRyZWUAU3FsRXhlYwBQYXJzZVNjaGVtYQBMb2FkQW5hbHlzaXMARHJvcFRhYmxlAERyb3BJbmRleABSZWFsAERyb3BUcmlnZ2VyAEludGVncml0eUNrAFJvd1NldEFkZABQYXJhbQBGa0NvdW50ZXIATWVtTWF4AE9mZnNldExpbWl0AEFnZ0ludmVyc2UAQWdnU3RlcABBZ2dTdGVwMQBBZ2dWYWx1ZQBBZ2dGaW5hbABFeHBpcmUAVGFibGVMb2NrAFZCZWdpbgBWQ3JlYXRlAFZEZXN0cm95AFZPcGVuAFZDb2x1bW4AVlJlbmFtZQBQYWdlY291bnQATWF4UGdjbnQAVHJhY2UAQ3Vyc29ySGludABOb29wAEV4cGxhaW4AQWJvcnRhYmxlAGsoJWQAQklOQVJZAEIALCVzJXMALQApACglLjIwcykAJXMoJWQpACVkACUuMTZnAChibG9iKQB2dGFiOiVwACwlZABdAHByb2dyYW0ATk9UIE5VTEwAVU5JUVVFAENIRUNLAEZPUkVJR04gS0VZACVzIGNvbnN0cmFpbnQgZmFpbGVkACV6OiAlcwBhYm9ydCBhdCAlZCBpbiBbJXNdOiAlcwABAAABAQAAAQABAAEBAAEAAAEAAAAAAQIAAgIAAQIBAQECAQJjYW5ub3Qgb3BlbiBzYXZlcG9pbnQgLSBTUUwgc3RhdGVtZW50cyBpbiBwcm9ncmVzcwBubyBzdWNoIHNhdmVwb2ludDogJXMAY2Fubm90IHJlbGVhc2Ugc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IGNvbW1pdCB0cmFuc2FjdGlvbiAtIFNRTCBzdGF0ZW1lbnRzIGluIHByb2dyZXNzAGNhbm5vdCBzdGFydCBhIHRyYW5zYWN0aW9uIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCByb2xsYmFjayAtIG5vIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZQBjYW5ub3QgY29tbWl0IC0gbm8gdHJhbnNhY3Rpb24gaXMgYWN0aXZlAGRhdGFiYXNlIHNjaGVtYSBoYXMgY2hhbmdlZABzcWxpdGVfbWFzdGVyAFNFTEVDVCBuYW1lLCByb290cGFnZSwgc3FsIEZST00gJyVxJy4lcyBXSEVSRSAlcyBPUkRFUiBCWSByb3dpZAB0b28gbWFueSBsZXZlbHMgb2YgdHJpZ2dlciByZWN1cnNpb24AY2Fubm90IGNoYW5nZSAlcyB3YWwgbW9kZSBmcm9tIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGludG8Ab3V0IG9mAGRhdGFiYXNlIHRhYmxlIGlzIGxvY2tlZDogJXMALS0gJXMAc3RhdGVtZW50IGFib3J0cyBhdCAlZDogWyVzXSAlcwBvdXQgb2YgbWVtb3J5AAABAgMEBggAAABzcWxpdGVfdGVtcF9tYXN0ZXIAMQBDUkVBVEUgVEFCTEUgeCh0eXBlIHRleHQsbmFtZSB0ZXh0LHRibF9uYW1lIHRleHQscm9vdHBhZ2UgaW50LHNxbCB0ZXh0KQBhdHRhY2hlZCBkYXRhYmFzZXMgbXVzdCB1c2UgdGhlIHNhbWUgdGV4dCBlbmNvZGluZyBhcyBtYWluIGRhdGFiYXNlAHVuc3VwcG9ydGVkIGZpbGUgZm9ybWF0AFNFTEVDVCBuYW1lLCByb290cGFnZSwgc3FsIEZST00gIiV3Ii4lcyBPUkRFUiBCWSByb3dpZABjcmVhdGUgAGludmFsaWQgcm9vdHBhZ2UAb3JwaGFuIGluZGV4AD8AbWFsZm9ybWVkIGRhdGFiYXNlIHNjaGVtYSAoJXMpACV6IC0gJXMAc3FsaXRlX3N0YXQxAFNFTEVDVCB0YmwsaWR4LHN0YXQgRlJPTSAlUS5zcWxpdGVfc3RhdDEAdW5vcmRlcmVkKgBzej1bMC05XSoAbm9za2lwc2NhbioATWFpbiBmcmVlbGlzdDogAG1heCByb290cGFnZSAoJWQpIGRpc2FncmVlcyB3aXRoIGhlYWRlciAoJWQpAGluY3JlbWVudGFsX3ZhY3V1bSBlbmFibGVkIHdpdGggYSBtYXggcm9vdHBhZ2Ugb2YgemVybwBQYWdlICVkIGlzIG5ldmVyIHVzZWQAUG9pbnRlciBtYXAgcGFnZSAlZCBpcyByZWZlcmVuY2VkAGZhaWxlZCB0byBnZXQgcGFnZSAlZABmcmVlbGlzdCBsZWFmIGNvdW50IHRvbyBiaWcgb24gcGFnZSAlZAAlcyBpcyAlZCBidXQgc2hvdWxkIGJlICVkAHNpemUAb3ZlcmZsb3cgbGlzdCBsZW5ndGgAaW52YWxpZCBwYWdlIG51bWJlciAlZAAybmQgcmVmZXJlbmNlIHRvIHBhZ2UgJWQACgBGYWlsZWQgdG8gcmVhZCBwdHJtYXAga2V5PSVkAEJhZCBwdHIgbWFwIGVudHJ5IGtleT0lZCBleHBlY3RlZD0oJWQsJWQpIGdvdD0oJWQsJWQpAFBhZ2UgJWQ6IAB1bmFibGUgdG8gZ2V0IHRoZSBwYWdlLiBlcnJvciBjb2RlPSVkAGJ0cmVlSW5pdFBhZ2UoKSByZXR1cm5zIGVycm9yIGNvZGUgJWQAZnJlZSBzcGFjZSBjb3JydXB0aW9uAE9uIHRyZWUgcGFnZSAlZCBjZWxsICVkOiAAT24gcGFnZSAlZCBhdCByaWdodCBjaGlsZDogAE9mZnNldCAlZCBvdXQgb2YgcmFuZ2UgJWQuLiVkAEV4dGVuZHMgb2ZmIGVuZCBvZiBwYWdlAFJvd2lkICVsbGQgb3V0IG9mIG9yZGVyAENoaWxkIHBhZ2UgZGVwdGggZGlmZmVycwBNdWx0aXBsZSB1c2VzIGZvciBieXRlICV1IG9mIHBhZ2UgJWQARnJhZ21lbnRhdGlvbiBvZiAlZCBieXRlcyByZXBvcnRlZCBhcyAlZCBvbiBwYWdlICVkAGRlbGV0ZQBwZXJzaXN0AG9mZgB0cnVuY2F0ZQBtZW1vcnkAd2FsAGNhbm5vdCBWQUNVVU0gZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgBjYW5ub3QgVkFDVVVNIC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAbm9uLXRleHQgZmlsZW5hbWUAQVRUQUNIICVRIEFTIHZhY3V1bV9kYgBvdXRwdXQgZmlsZSBhbHJlYWR5IGV4aXN0cwBCRUdJTgBTRUxFQ1Qgc3FsIEZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJ0FORCBuYW1lPD4nc3FsaXRlX3NlcXVlbmNlJyBBTkQgY29hbGVzY2Uocm9vdHBhZ2UsMSk+MABTRUxFQ1Qgc3FsIEZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J2luZGV4JwBTRUxFQ1QnSU5TRVJUIElOVE8gdmFjdXVtX2RiLid8fHF1b3RlKG5hbWUpfHwnIFNFTEVDVCpGUk9NIiV3Ii4nfHxxdW90ZShuYW1lKUZST00gdmFjdXVtX2RiLnNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnQU5EIGNvYWxlc2NlKHJvb3RwYWdlLDEpPjAASU5TRVJUIElOVE8gdmFjdXVtX2RiLnNxbGl0ZV9tYXN0ZXIgU0VMRUNUKkZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgSU4oJ3ZpZXcnLCd0cmlnZ2VyJykgT1IodHlwZT0ndGFibGUnQU5EIHJvb3RwYWdlPTApAAEBAwAFAAYACABDUkUASU5TAG5vIHN1Y2ggbW9kdWxlOiAlcwB2dGFibGUgY29uc3RydWN0b3IgY2FsbGVkIHJlY3Vyc2l2ZWx5OiAlcwB2dGFibGUgY29uc3RydWN0b3IgZmFpbGVkOiAlcwB2dGFibGUgY29uc3RydWN0b3IgZGlkIG5vdCBkZWNsYXJlIHNjaGVtYTogJXMAaGlkZGVuAGJpbmQgb24gYSBidXN5IHByZXBhcmVkIHN0YXRlbWVudDogWyVzXQAtLSAAJyUuKnEnAHplcm9ibG9iKCVkKQB4JwAlMDJ4ACcAY2Fubm90IG9wZW4gdmFsdWUgb2YgdHlwZSAlcwBudWxsAHJlYWwAaW50ZWdlcgBubyBzdWNoIHJvd2lkOiAlbGxkAHByYWdtYV8Abm8gc3VjaCB2aWV3AG5vIHN1Y2ggdGFibGUAJXM6ICVzLiVzACVzOiAlcwBhcHBsaWNhdGlvbl9pZABhdXRvX3ZhY3V1bQBhdXRvbWF0aWNfaW5kZXgAYnVzeV90aW1lb3V0AGNhY2hlX3NpemUAY2FjaGVfc3BpbGwAY2FzZV9zZW5zaXRpdmVfbGlrZQBjZWxsX3NpemVfY2hlY2sAY2hlY2twb2ludF9mdWxsZnN5bmMAY29sbGF0aW9uX2xpc3QAY29tcGlsZV9vcHRpb25zAGNvdW50X2NoYW5nZXMAZGF0YV92ZXJzaW9uAGRhdGFiYXNlX2xpc3QAZGVmYXVsdF9jYWNoZV9zaXplAGRlZmVyX2ZvcmVpZ25fa2V5cwBlbXB0eV9yZXN1bHRfY2FsbGJhY2tzAGVuY29kaW5nAGZvcmVpZ25fa2V5X2NoZWNrAGZvcmVpZ25fa2V5X2xpc3QAZm9yZWlnbl9rZXlzAGZyZWVsaXN0X2NvdW50AGZ1bGxfY29sdW1uX25hbWVzAGZ1bGxmc3luYwBpZ25vcmVfY2hlY2tfY29uc3RyYWludHMAaW5jcmVtZW50YWxfdmFjdXVtAGluZGV4X2luZm8AaW5kZXhfbGlzdABpbmRleF94aW5mbwBpbnRlZ3JpdHlfY2hlY2sAam91cm5hbF9tb2RlAGpvdXJuYWxfc2l6ZV9saW1pdABsZWdhY3lfYWx0ZXJfdGFibGUAbGVnYWN5X2ZpbGVfZm9ybWF0AGxvY2tpbmdfbW9kZQBtYXhfcGFnZV9jb3VudABtbWFwX3NpemUAb3B0aW1pemUAcGFnZV9jb3VudABwYWdlX3NpemUAcXVlcnlfb25seQBxdWlja19jaGVjawByZWFkX3VuY29tbWl0dGVkAHJlY3Vyc2l2ZV90cmlnZ2VycwByZXZlcnNlX3Vub3JkZXJlZF9zZWxlY3RzAHNjaGVtYV92ZXJzaW9uAHNlY3VyZV9kZWxldGUAc2hvcnRfY29sdW1uX25hbWVzAHNocmlua19tZW1vcnkAc29mdF9oZWFwX2xpbWl0AHN5bmNocm9ub3VzAHRhYmxlX2luZm8AdGFibGVfeGluZm8AdGVtcF9zdG9yZQB0ZW1wX3N0b3JlX2RpcmVjdG9yeQB0aHJlYWRzAHVzZXJfdmVyc2lvbgB3YWxfYXV0b2NoZWNrcG9pbnQAd2FsX2NoZWNrcG9pbnQAd3JpdGFibGVfc2NoZW1hAENSRUFURSBUQUJMRSB4ACVjIiVzIgAoIiVzIgAsYXJnIEhJRERFTgAsc2NoZW1hIEhJRERFTgBpZABzZXEAdGFibGUAZnJvbQB0bwBvbl91cGRhdGUAb25fZGVsZXRlAG1hdGNoAGNpZABuYW1lAHR5cGUAbm90bnVsbABkZmx0X3ZhbHVlAHBrAHNlcW5vAGRlc2MAY29sbABrZXkAdGJsAGlkeAB3ZHRoAGhnaHQAZmxncwB1bmlxdWUAb3JpZ2luAHBhcnRpYWwAcm93aWQAcGFyZW50AGZraWQAZmlsZQBidXN5AGNoZWNrcG9pbnRlZABidWlsdGluAGRhdGFiYXNlAHN0YXR1cwB0aW1lb3V0AFBSQUdNQSAAJVEuAD0lUQB0b28gbWFueSBjb2x1bW5zIG9uICVzAHVub3BlbmVkAEFQSSBjYWxsIHdpdGggJXMgZGF0YWJhc2UgY29ubmVjdGlvbiBwb2ludGVyAGRhdGFiYXNlIHNjaGVtYSBpcyBsb2NrZWQ6ICVzAHN0YXRlbWVudCB0b28gbG9uZwBhZGRyAG9wY29kZQBwMQBwMgBwMwBwNABwNQBjb21tZW50AG5vdHVzZWQAZGV0YWlsAG5vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlOiAlcwB1bnJlY29nbml6ZWQgdG9rZW46ICIlLipzIgAlcyBpbiAiJXMiAHVua25vd24gdGFibGUgb3B0aW9uOiAlLipzAHNldCBsaXN0AG5lYXIgIiVUIjogc3ludGF4IGVycm9yAHF1YWxpZmllZCB0YWJsZSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgb24gSU5TRVJULCBVUERBVEUsIGFuZCBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIElOREVYRUQgQlkgY2xhdXNlIGlzIG5vdCBhbGxvd2VkIG9uIFVQREFURSBvciBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIE5PVCBJTkRFWEVEIGNsYXVzZSBpcyBub3QgYWxsb3dlZCBvbiBVUERBVEUgb3IgREVMRVRFIHN0YXRlbWVudHMgd2l0aGluIHRyaWdnZXJzAHBhcnNlciBzdGFjayBvdmVyZmxvdwBCAEMARABFAG1pc3VzZSBvZiBhZ2dyZWdhdGU6ICVzKCkAdW5rbm93biBmdW5jdGlvbjogJXMoKQAlZCBjb2x1bW5zIGFzc2lnbmVkICVkIHZhbHVlcwByb3cgdmFsdWUgbWlzdXNlZABSQUlTRSgpIG1heSBvbmx5IGJlIHVzZWQgd2l0aGluIGEgdHJpZ2dlci1wcm9ncmFtACVzJXMAMHgAaGV4IGxpdGVyYWwgdG9vIGJpZzogJXMlcwBzdWItc2VsZWN0IHJldHVybnMgJWQgY29sdW1ucyAtIGV4cGVjdGVkICVkAFJFVVNFIFNVQlFVRVJZICVkACVzU0NBTEFSIFNVQlFVRVJZICVkAENPUlJFTEFURUQgAFVTSU5HIFJPV0lEIFNFQVJDSCBPTiBUQUJMRSAlcyBGT1IgSU4tT1BFUkFUT1IAVVNJTkcgSU5ERVggJXMgRk9SIElOLU9QRVJBVE9SAFJFVVNFIExJU1QgU1VCUVVFUlkgJWQAJXNMSVNUIFNVQlFVRVJZICVkAG5vdCBhdXRob3JpemVkAGF1dGhvcml6ZXIgbWFsZnVuY3Rpb24AUk9MTEJBQ0sAQ09NTUlUAFJFTEVBU0UAdGVtcG9yYXJ5IHRhYmxlIG5hbWUgbXVzdCBiZSB1bnF1YWxpZmllZAACBAgGdGFibGUgJVQgYWxyZWFkeSBleGlzdHMAdGhlcmUgaXMgYWxyZWFkeSBhbiBpbmRleCBuYW1lZCAlcwBzcWxpdGVfc2VxdWVuY2UABgAAAAAAY29ycnVwdCBkYXRhYmFzZQB1bmtub3duIGRhdGFiYXNlICVUAHNxbGl0ZV8Ab2JqZWN0IG5hbWUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZTogJXMAQVVUT0lOQ1JFTUVOVCBub3QgYWxsb3dlZCBvbiBXSVRIT1VUIFJPV0lEIHRhYmxlcwBQUklNQVJZIEtFWSBtaXNzaW5nIG9uIHRhYmxlICVzAFRBQkxFAHZpZXcAVklFVwBDUkVBVEUgJXMgJS4qcwBVUERBVEUgJVEuJXMgU0VUIHR5cGU9JyVzJywgbmFtZT0lUSwgdGJsX25hbWU9JVEsIHJvb3RwYWdlPSMlZCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABDUkVBVEUgVEFCTEUgJVEuc3FsaXRlX3NlcXVlbmNlKG5hbWUsc2VxKQB0YmxfbmFtZT0nJXEnIEFORCB0eXBlIT0ndHJpZ2dlcicAdGhlICIuIiBvcGVyYXRvcgBzZWNvbmQgYXJndW1lbnQgdG8gbGlrZWxpaG9vZCgpIG11c3QgYmUgYSBjb25zdGFudCBiZXR3ZWVuIDAuMCBhbmQgMS4wAG5vdCBhdXRob3JpemVkIHRvIHVzZSBmdW5jdGlvbjogJXMAbm9uLWRldGVybWluaXN0aWMgZnVuY3Rpb25zACUuKnMoKSBtYXkgbm90IGJlIHVzZWQgYXMgYSB3aW5kb3cgZnVuY3Rpb24Ad2luZG93AGFnZ3JlZ2F0ZQBtaXN1c2Ugb2YgJXMgZnVuY3Rpb24gJS4qcygpAG5vIHN1Y2ggZnVuY3Rpb246ICUuKnMAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiAlLipzKCkAc3VicXVlcmllcwBwYXJhbWV0ZXJzAHBhcnRpYWwgaW5kZXggV0hFUkUgY2xhdXNlcwBpbmRleCBleHByZXNzaW9ucwBDSEVDSyBjb25zdHJhaW50cwAlcyBwcm9oaWJpdGVkIGluICVzAG5ldwBvbGQAZXhjbHVkZWQAbWlzdXNlIG9mIGFsaWFzZWQgYWdncmVnYXRlICVzAG1pc3VzZSBvZiBhbGlhc2VkIHdpbmRvdyBmdW5jdGlvbiAlcwBkb3VibGUtcXVvdGVkIHN0cmluZyBsaXRlcmFsOiAiJXciAG5vIHN1Y2ggY29sdW1uAGFtYmlndW91cyBjb2x1bW4gbmFtZQAlczogJXMuJXMuJXMAUk9XSUQAJXMuJXMAJXMuJXoAYWNjZXNzIHRvICV6IGlzIHByb2hpYml0ZWQAUkFOR0Ugd2l0aCBvZmZzZXQgUFJFQ0VESU5HL0ZPTExPV0lORyByZXF1aXJlcyBvbmUgT1JERVIgQlkgZXhwcmVzc2lvbgBGSUxURVIgY2xhdXNlIG1heSBvbmx5IGJlIHVzZWQgd2l0aCBhZ2dyZWdhdGUgd2luZG93IGZ1bmN0aW9ucwByb3dfbnVtYmVyAGRlbnNlX3JhbmsAcmFuawBwZXJjZW50X3JhbmsAY3VtZV9kaXN0AG50aWxlAGxlYWQAbGFnAG5vIHN1Y2ggd2luZG93OiAlcwBhIEdST1VQIEJZIGNsYXVzZSBpcyByZXF1aXJlZCBiZWZvcmUgSEFWSU5HAE9SREVSAEdST1VQAGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBHUk9VUCBCWSBjbGF1c2UAdG9vIG1hbnkgcmVmZXJlbmNlcyB0byAiJXMiOiBtYXggNjU1MzUAKgAlcy4lcy4lcwBubyBzdWNoIHRhYmxlOiAlcwBubyB0YWJsZXMgc3BlY2lmaWVkAHRvbyBtYW55IGNvbHVtbnMgaW4gcmVzdWx0IHNldABtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHJlY3Vyc2l2ZSB0YWJsZTogJXMAY2lyY3VsYXIgcmVmZXJlbmNlOiAlcwB0YWJsZSAlcyBoYXMgJWQgdmFsdWVzIGZvciAlZCBjb2x1bW5zAG11bHRpcGxlIHJlY3Vyc2l2ZSByZWZlcmVuY2VzOiAlcwByZWN1cnNpdmUgcmVmZXJlbmNlIGluIGEgc3VicXVlcnk6ICVzAGNvbHVtbiVkACUuKno6JXUAc3VicXVlcnlfJXUAJyVzJyBpcyBub3QgYSBmdW5jdGlvbgB2aWV3ICVzIGlzIGNpcmN1bGFybHkgZGVmaW5lZABubyBzdWNoIGluZGV4OiAlcwBhIE5BVFVSQUwgam9pbiBtYXkgbm90IGhhdmUgYW4gT04gb3IgVVNJTkcgY2xhdXNlAGNhbm5vdCBoYXZlIGJvdGggT04gYW5kIFVTSU5HIGNsYXVzZXMgaW4gdGhlIHNhbWUgam9pbgBjYW5ub3Qgam9pbiB1c2luZyBjb2x1bW4gJXMgLSBjb2x1bW4gbm90IHByZXNlbnQgaW4gYm90aCB0YWJsZXMAJXIgJXMgQlkgdGVybSBvdXQgb2YgcmFuZ2UgLSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAlZAB0b28gbWFueSB0ZXJtcyBpbiAlcyBCWSBjbGF1c2UAYWxsIFZBTFVFUyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHRlcm1zAFNFTEVDVHMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mICVzIGRvIG5vdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiByZXN1bHQgY29sdW1ucwBVTklPTiBBTEwASU5URVJTRUNUAEVYQ0VQVABVTklPTgB0b28gbWFueSB0ZXJtcyBpbiBPUkRFUiBCWSBjbGF1c2UAJXIgT1JERVIgQlkgdGVybSBkb2VzIG5vdCBtYXRjaCBhbnkgY29sdW1uIGluIHRoZSByZXN1bHQgc2V0AEV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpACwACiAgACwKICAACikAQ1JFQVRFIFRBQkxFIAAgVEVYVAAgTlVNACBJTlQAIFJFQUwAZHVwbGljYXRlIGNvbHVtbiBuYW1lOiAlcwBkZWZhdWx0IHZhbHVlIG9mIGNvbHVtbiBbJXNdIGlzIG5vdCBjb25zdGFudAB0cnVlAGZhbHNlAHRhYmxlICIlcyIgaGFzIG1vcmUgdGhhbiBvbmUgcHJpbWFyeSBrZXkAQVVUT0lOQ1JFTUVOVCBpcyBvbmx5IGFsbG93ZWQgb24gYW4gSU5URUdFUiBQUklNQVJZIEtFWQBpbmRleABjYW5ub3QgY3JlYXRlIGEgVEVNUCBpbmRleCBvbiBub24tVEVNUCB0YWJsZSAiJXMiAHRhYmxlICVzIG1heSBub3QgYmUgaW5kZXhlZAB2aWV3cyBtYXkgbm90IGJlIGluZGV4ZWQAdmlydHVhbCB0YWJsZXMgbWF5IG5vdCBiZSBpbmRleGVkAHRoZXJlIGlzIGFscmVhZHkgYSB0YWJsZSBuYW1lZCAlcwBpbmRleCAlcyBhbHJlYWR5IGV4aXN0cwBzcWxpdGVfYXV0b2luZGV4XyVzXyVkAGV4cHJlc3Npb25zIHByb2hpYml0ZWQgaW4gUFJJTUFSWSBLRVkgYW5kIFVOSVFVRSBjb25zdHJhaW50cwBjb25mbGljdGluZyBPTiBDT05GTElDVCBjbGF1c2VzIHNwZWNpZmllZABDUkVBVEUlcyBJTkRFWCAlLipzACBVTklRVUUASU5TRVJUIElOVE8gJVEuJXMgVkFMVUVTKCdpbmRleCcsJVEsJVEsIyVkLCVRKTsAbmFtZT0nJXEnIEFORCB0eXBlPSdpbmRleCcAJXMgJVQgY2Fubm90IHJlZmVyZW5jZSBvYmplY3RzIGluIGRhdGFiYXNlICVzACVzIGNhbm5vdCB1c2UgdmFyaWFibGVzAGluZGV4ICclcScALCAAZm9yZWlnbiBrZXkgb24gJXMgc2hvdWxkIHJlZmVyZW5jZSBvbmx5IG9uZSBjb2x1bW4gb2YgdGFibGUgJVQAbnVtYmVyIG9mIGNvbHVtbnMgaW4gZm9yZWlnbiBrZXkgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSByZWZlcmVuY2VkIHRhYmxlAHVua25vd24gY29sdW1uICIlcyIgaW4gZm9yZWlnbiBrZXkgZGVmaW5pdGlvbgBzcWxpdGVfc3RhdAB0YWJsZSAlcyBtYXkgbm90IGJlIGRyb3BwZWQAdXNlIERST1AgVEFCTEUgdG8gZGVsZXRlIHRhYmxlICVzAHVzZSBEUk9QIFZJRVcgdG8gZGVsZXRlIHZpZXcgJXMAc3FsaXRlX3N0YXQlZABERUxFVEUgRlJPTSAlUS4lcyBXSEVSRSAlcz0lUQBERUxFVEUgRlJPTSAlUS5zcWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0lUQBERUxFVEUgRlJPTSAlUS4lcyBXSEVSRSB0YmxfbmFtZT0lUSBhbmQgdHlwZSE9J3RyaWdnZXInAERFTEVURSBGUk9NICVRLiVzIFdIRVJFIG5hbWU9JVEgQU5EIHR5cGU9J3RyaWdnZXInAGNvcnJ1cHQgc2NoZW1hAFVQREFURSAlUS4lcyBTRVQgcm9vdHBhZ2U9JWQgV0hFUkUgIyVkIEFORCByb290cGFnZT0jJWQAcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdmlld3MAZXhwZWN0ZWQgJWQgY29sdW1ucyBmb3IgJyVzJyBidXQgZ290ICVkAENPLVJPVVRJTkUgJXUATUFURVJJQUxJWkUgJXUARElTVElOQ1QAR1JPVVAgQlkAUklHSFQgUEFSVCBPRiBPUkRFUiBCWQBPUkRFUiBCWQB0b28gbWFueSBGUk9NIGNsYXVzZSB0ZXJtcywgbWF4OiAlZAAlcyBjbGF1c2Ugc2hvdWxkIGNvbWUgYWZ0ZXIgJXMgbm90IGJlZm9yZQBMSU1JVABDT01QT1VORCBRVUVSWQBMRUZULU1PU1QgU1VCUVVFUlkAJXMgVVNJTkcgVEVNUCBCLVRSRUUAU0NBTiAlZCBDT05TVEFOVCBST1clcwBTAGNhbm5vdCB1c2Ugd2luZG93IGZ1bmN0aW9ucyBpbiByZWN1cnNpdmUgcXVlcmllcwBTRVRVUAByZWN1cnNpdmUgYWdncmVnYXRlIHF1ZXJpZXMgbm90IHN1cHBvcnRlZABSRUNVUlNJVkUgU1RFUABNRVJHRSAoJXMpAExFRlQAUklHSFQAbnRoX3ZhbHVlAGZpcnN0X3ZhbHVlAGF0IG1vc3QgJWQgdGFibGVzIGluIGEgam9pbgBTQ0FOIENPTlNUQU5UIFJPVwB0b28gbWFueSBhcmd1bWVudHMgb24gJXMoKSAtIG1heCAlZABPTiBjbGF1c2UgcmVmZXJlbmNlcyB0YWJsZXMgdG8gaXRzIHJpZ2h0AE5PQ0FTRQBnbG9iAGxpa2UAcmVnZXhwAGFiYnJldmlhdGVkIHF1ZXJ5IGFsZ29yaXRobSBzZWFyY2gAJXMueEJlc3RJbmRleCBtYWxmdW5jdGlvbgBubyBxdWVyeSBzb2x1dGlvbgBhdXRvbWF0aWMgaW5kZXggb24gJXMoJXMpAGF1dG8taW5kZXgAU0VBUkNIAFNDQU4AIFNVQlFVRVJZICV1ACBUQUJMRSAlcwAgQVMgJXMAUFJJTUFSWSBLRVkAQVVUT01BVElDIFBBUlRJQUwgQ09WRVJJTkcgSU5ERVgAQVVUT01BVElDIENPVkVSSU5HIElOREVYAENPVkVSSU5HIElOREVYICVzAElOREVYICVzACBVU0lORyAAPQA+PyBBTkQgcm93aWQ8AD4APAAgVVNJTkcgSU5URUdFUiBQUklNQVJZIEtFWSAocm93aWQlcz8pACBWSVJUVUFMIFRBQkxFIElOREVYICVkOiVzACAoACBBTkQgACVzPT8AQU5ZKCVzKQA8ZXhwcj4AKAAZFxYYAAAkIBkWGBcoJiUnTVVMVEktSU5ERVggT1IASU5ERVggJWQABQQkIGZyYW1lIHN0YXJ0aW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIAc2Vjb25kIGFyZ3VtZW50IHRvIG50aF92YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcgBmcmFtZSBzdGFydGluZyBvZmZzZXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcgBtaW4AbWF4AFVTRSBURU1QIEItVFJFRSBGT1IgJXMARElTVElOQ1QgYWdncmVnYXRlcyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgYXJndW1lbnQAU0NBTiBUQUJMRSAlcyVzJXMAIFVTSU5HIENPVkVSSU5HIElOREVYIAB0b28gbWFueSB0ZXJtcyBpbiBjb21wb3VuZCBTRUxFQ1QAYSBKT0lOIGNsYXVzZSBpcyByZXF1aXJlZCBiZWZvcmUgJXMAT04AVVNJTkcAIAB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGpvaW4gdHlwZTogJVQgJVQlcyVUAFJJR0hUIGFuZCBGVUxMIE9VVEVSIEpPSU5zIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZAByb3dzIGRlbGV0ZWQAdGFibGUgJXMgbWF5IG5vdCBiZSBtb2RpZmllZABjYW5ub3QgbW9kaWZ5ICVzIGJlY2F1c2UgaXQgaXMgYSB2aWV3AC0tIFRSSUdHRVIgJXMAZm9yZWlnbiBrZXkgbWlzbWF0Y2ggLSAiJXciIHJlZmVyZW5jaW5nICIldyIAdG9vIG1hbnkgY29sdW1ucyBpbiAlcwBubyBzdWNoIGNvbHVtbjogJXMAcm93cyB1cGRhdGVkACVzLnJvd2lkAHRhYmxlICVTIGhhcyBubyBjb2x1bW4gbmFtZWQgJXMAdGFibGUgJVMgaGFzICVkIGNvbHVtbnMgYnV0ICVkIHZhbHVlcyB3ZXJlIHN1cHBsaWVkACVkIHZhbHVlcyBmb3IgJWQgY29sdW1ucwBVUFNFUlQgbm90IGltcGxlbWVudGVkIGZvciB2aXJ0dWFsIHRhYmxlICIlcyIAcm93cyBpbnNlcnRlZABPTiBDT05GTElDVCBjbGF1c2UgZG9lcyBub3QgbWF0Y2ggYW55IFBSSU1BUlkgS0VZIG9yIFVOSVFVRSBjb25zdHJhaW50AHZhcmlhYmxlIG51bWJlciBtdXN0IGJlIGJldHdlZW4gPzEgYW5kID8lZAB0b28gbWFueSBTUUwgdmFyaWFibGVzAHRvbyBtYW55IGFyZ3VtZW50cyBvbiBmdW5jdGlvbiAlVABESVNUSU5DVCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3aW5kb3cgZnVuY3Rpb25zADAAc3ludGF4IGVycm9yIGFmdGVyIGNvbHVtbiBuYW1lICIlLipzIgBubyBzdWNoIGluZGV4OiAlUwBpbmRleCBhc3NvY2lhdGVkIHdpdGggVU5JUVVFIG9yIFBSSU1BUlkgS0VZIGNvbnN0cmFpbnQgY2Fubm90IGJlIGRyb3BwZWQAREVMRVRFIEZST00gJVEuJXMgV0hFUkUgbmFtZT0lUSBBTkQgdHlwZT0naW5kZXgnAC0lVABmYXN0AG5vcm1hbABleGNsdXNpdmUAbm90IGEgd3JpdGFibGUgZGlyZWN0b3J5AFNhZmV0eSBsZXZlbCBtYXkgbm90IGJlIGNoYW5nZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24AaXNzaXNpaQBpc3Npc2kAaWlzWABpc2lYAGMAdQBpc2lzaQBpc3MAaXMAaWlzc3Nzc3MATk9ORQBzaVgAKioqIGluIGRhdGFiYXNlICVzICoqKgoATlVMTCB2YWx1ZSBpbiAlcy4lcwBDSEVDSyBjb25zdHJhaW50IGZhaWxlZCBpbiAlcwByb3cgACBtaXNzaW5nIGZyb20gaW5kZXggAG5vbi11bmlxdWUgZW50cnkgaW4gaW5kZXggAHdyb25nICMgb2YgZW50cmllcyBpbiBpbmRleCAAb2sAVVRGOABVVEYtOABVVEYtMTZsZQBVVEYtMTZiZQBVVEYxNmxlAFVURjE2YmUAVVRGLTE2AFVURjE2AHVuc3VwcG9ydGVkIGVuY29kaW5nOiAlcwACAAEAXwAAAAIAAABeAAEAUQEBAGZ1bGwAcmVzdGFydABBTkFMWVpFICIldyIuIiV3IgBub25lAGluY3JlbWVudGFsAHRlbXBvcmFyeSBzdG9yYWdlIGNhbm5vdCBiZSBjaGFuZ2VkIGZyb20gd2l0aGluIGEgdHJhbnNhY3Rpb24AAQAAAAEBAwJTRVQgTlVMTABTRVQgREVGQVVMVABDQVNDQURFAFJFU1RSSUNUAE5PIEFDVElPTgAlXwAATElLRSBvciBHTE9CIHBhdHRlcm4gdG9vIGNvbXBsZXgARVNDQVBFIGV4cHJlc3Npb24gbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIASU5TRVJUIElOVE8gJVEuJXMgVkFMVUVTKCd0cmlnZ2VyJywlUSwlUSwwLCdDUkVBVEUgVFJJR0dFUiAlcScpAHR5cGU9J3RyaWdnZXInIEFORCBuYW1lPSclcScAdGVtcG9yYXJ5IHRyaWdnZXIgbWF5IG5vdCBoYXZlIHF1YWxpZmllZCBuYW1lAGNhbm5vdCBjcmVhdGUgdHJpZ2dlcnMgb24gdmlydHVhbCB0YWJsZXMAdHJpZ2dlciAlVCBhbHJlYWR5IGV4aXN0cwBjYW5ub3QgY3JlYXRlIHRyaWdnZXIgb24gc3lzdGVtIHRhYmxlAGNhbm5vdCBjcmVhdGUgJXMgdHJpZ2dlciBvbiB2aWV3OiAlUwBCRUZPUkUAQUZURVIAY2Fubm90IGNyZWF0ZSBJTlNURUFEIE9GIHRyaWdnZXIgb24gdGFibGU6ICVTAG5vIHN1Y2ggdHJpZ2dlcjogJVMAc3FsaXRlX2F0dGFjaAB0b28gbWFueSBhdHRhY2hlZCBkYXRhYmFzZXMgLSBtYXggJWQAZGF0YWJhc2UgJXMgaXMgYWxyZWFkeSBpbiB1c2UAZGF0YWJhc2UgaXMgYWxyZWFkeSBhdHRhY2hlZAB1bmFibGUgdG8gb3BlbiBkYXRhYmFzZTogJXMAZmlsZToAbG9jYWxob3N0AGludmFsaWQgdXJpIGF1dGhvcml0eTogJS4qcwB2ZnMAY2FjaGUAc2hhcmVkAHByaXZhdGUAcm8AcncAcndjAG5vIHN1Y2ggJXMgbW9kZTogJXMAJXMgbW9kZSBub3QgYWxsb3dlZDogJXMAbm8gc3VjaCB2ZnM6ICVzAHNxbGl0ZV9kZXRhY2gAbm8gc3VjaCBkYXRhYmFzZTogJXMAY2Fubm90IGRldGFjaCBkYXRhYmFzZSAlcwBkYXRhYmFzZSAlcyBpcyBsb2NrZWQAdW5hYmxlIHRvIGlkZW50aWZ5IHRoZSBvYmplY3QgdG8gYmUgcmVpbmRleGVkAHRibCxpZHgsc3RhdABzcWxpdGVfc3RhdDMAc3FsaXRlX3N0YXQ0AENSRUFURSBUQUJMRSAlUS4lcyglcykAc3FsaXRlXF8lAEJCQgBzdGF0X2luaXQAc3RhdF9wdXNoAHN0YXRfZ2V0ACVsbHUAICVsbHUAdGhlcmUgaXMgYWxyZWFkeSBhbm90aGVyIHRhYmxlIG9yIGluZGV4IHdpdGggdGhpcyBuYW1lOiAlcwB2aWV3ICVzIG1heSBub3QgYmUgYWx0ZXJlZABVUERBVEUgIiV3Ii4lcyBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV90YWJsZSglUSwgdHlwZSwgbmFtZSwgc3FsLCAlUSwgJVEsICVkKSBXSEVSRSAodHlwZSE9J2luZGV4JyBPUiB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSlBTkQgICBuYW1lIE5PVCBMSUtFICdzcWxpdGVfJSUnAFVQREFURSAlUS4lcyBTRVQgdGJsX25hbWUgPSAlUSwgbmFtZSA9IENBU0UgV0hFTiB0eXBlPSd0YWJsZScgVEhFTiAlUSBXSEVOIG5hbWUgTElLRSAnc3FsaXRlX2F1dG9pbmRleCUlJyBBTkQgdHlwZT0naW5kZXgnIFRIRU4gJ3NxbGl0ZV9hdXRvaW5kZXhfJyB8fCAlUSB8fCBzdWJzdHIobmFtZSwlZCsxOCkgRUxTRSBuYW1lIEVORCBXSEVSRSB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSBBTkQgKHR5cGU9J3RhYmxlJyBPUiB0eXBlPSdpbmRleCcgT1IgdHlwZT0ndHJpZ2dlcicpOwBVUERBVEUgIiV3Ii5zcWxpdGVfc2VxdWVuY2Ugc2V0IG5hbWUgPSAlUSBXSEVSRSBuYW1lID0gJVEAVVBEQVRFIHNxbGl0ZV90ZW1wX21hc3RlciBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV90YWJsZSglUSwgdHlwZSwgbmFtZSwgc3FsLCAlUSwgJVEsIDEpLCB0YmxfbmFtZSA9IENBU0UgV0hFTiB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSBBTkQgICAgICAgICAgIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAxKSBUSEVOICVRIEVMU0UgdGJsX25hbWUgRU5EIFdIRVJFIHR5cGUgSU4gKCd2aWV3JywgJ3RyaWdnZXInKQB0YWJsZSAlcyBtYXkgbm90IGJlIGFsdGVyZWQAU0VMRUNUIDEgRlJPTSAiJXciLiVzIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZV8lJScgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScgQU5EIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAlZCk9TlVMTCAAU0VMRUNUIDEgRlJPTSB0ZW1wLiVzIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZV8lJScgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScgQU5EIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAxKT1OVUxMIABDYW5ub3QgYWRkIGEgUFJJTUFSWSBLRVkgY29sdW1uAENhbm5vdCBhZGQgYSBVTklRVUUgY29sdW1uAENhbm5vdCBhZGQgYSBSRUZFUkVOQ0VTIGNvbHVtbiB3aXRoIG5vbi1OVUxMIGRlZmF1bHQgdmFsdWUAQ2Fubm90IGFkZCBhIE5PVCBOVUxMIGNvbHVtbiB3aXRoIGRlZmF1bHQgdmFsdWUgTlVMTABDYW5ub3QgYWRkIGEgY29sdW1uIHdpdGggbm9uLWNvbnN0YW50IGRlZmF1bHQAVVBEQVRFICIldyIuJXMgU0VUIHNxbCA9IHN1YnN0cihzcWwsMSwlZCkgfHwgJywgJyB8fCAlUSB8fCBzdWJzdHIoc3FsLCVkKSBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQgbmFtZSA9ICVRAHZpcnR1YWwgdGFibGVzIG1heSBub3QgYmUgYWx0ZXJlZABDYW5ub3QgYWRkIGEgY29sdW1uIHRvIGEgdmlldwBzcWxpdGVfYWx0ZXJ0YWJfJXMAVVBEQVRFICIldyIuJXMgU0VUIHNxbCA9IHNxbGl0ZV9yZW5hbWVfY29sdW1uKHNxbCwgdHlwZSwgbmFtZSwgJVEsICVRLCAlZCwgJVEsICVkLCAlZCkgV0hFUkUgbmFtZSBOT1QgTElLRSAnc3FsaXRlXyUlJyBBTkQgKHR5cGUgIT0gJ2luZGV4JyBPUiB0YmxfbmFtZSA9ICVRKSBBTkQgc3FsIE5PVCBMSUtFICdjcmVhdGUgdmlydHVhbCUlJwBVUERBVEUgdGVtcC4lcyBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV9jb2x1bW4oc3FsLCB0eXBlLCBuYW1lLCAlUSwgJVEsICVkLCAlUSwgJWQsIDEpIFdIRVJFIHR5cGUgSU4gKCd0cmlnZ2VyJywgJ3ZpZXcnKQB2aXJ0dWFsIHRhYmxlAGNhbm5vdCByZW5hbWUgY29sdW1ucyBvZiAlcyAiJXMiAENSRUFURSBWSVJUVUFMIFRBQkxFICVUAFVQREFURSAlUS4lcyBTRVQgdHlwZT0ndGFibGUnLCBuYW1lPSVRLCB0YmxfbmFtZT0lUSwgcm9vdHBhZ2U9MCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABuYW1lPSclcScgQU5EIHR5cGU9J3RhYmxlJwBkdXBsaWNhdGUgV0lUSCB0YWJsZSBuYW1lOiAlcwBQQVJUSVRJT04gY2xhdXNlAE9SREVSIEJZIGNsYXVzZQBmcmFtZSBzcGVjaWZpY2F0aW9uAGNhbm5vdCBvdmVycmlkZSAlcyBvZiB3aW5kb3c6ICVzAHVuc3VwcG9ydGVkIGZyYW1lIHNwZWNpZmljYXRpb24AaW5jb21wbGV0ZSBpbnB1dABzcWxpdGVfY29tcGlsZW9wdGlvbl91c2VkAHNxbGl0ZV9jb21waWxlb3B0aW9uX2dldAB1bmxpa2VseQBsaWtlbGlob29kAGxpa2VseQBsdHJpbQBydHJpbQB0cmltAHR5cGVvZgBsZW5ndGgAaW5zdHIAcHJpbnRmAHVuaWNvZGUAY2hhcgBhYnMAcm91bmQAdXBwZXIAbG93ZXIAaGV4AGlmbnVsbAByYW5kb20AcmFuZG9tYmxvYgBudWxsaWYAc3FsaXRlX3ZlcnNpb24Ac3FsaXRlX3NvdXJjZV9pZABzcWxpdGVfbG9nAHF1b3RlAGxhc3RfaW5zZXJ0X3Jvd2lkAGNoYW5nZXMAdG90YWxfY2hhbmdlcwByZXBsYWNlAHplcm9ibG9iAHN1YnN0cgBzdW0AdG90YWwAYXZnAGNvdW50AGdyb3VwX2NvbmNhdABjb2FsZXNjZQABdGV4dABibG9iAGludGVnZXIgb3ZlcmZsb3cAJS4qZgAlIS4yMGUAc3FsaXRlX3JlbmFtZV9jb2x1bW4Ac3FsaXRlX3JlbmFtZV90YWJsZQBzcWxpdGVfcmVuYW1lX3Rlc3QAIiV3IgBlcnJvciBpbiAlcyAlcyVzOiAlcwAgYWZ0ZXIgcmVuYW1lAGxhc3RfdmFsdWUAYXJndW1lbnQgb2YgbnRpbGUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAanVsaWFuZGF5AGRhdGUAdGltZQBkYXRldGltZQBzdHJmdGltZQBjdXJyZW50X3RpbWUAY3VycmVudF90aW1lc3RhbXAAY3VycmVudF9kYXRlAG5vdwA0MGYtMjFhLTIxZAAyMGM6MjBlADIwZQAyMGI6MjBlAG5vbi1kZXRlcm1pbmlzdGljIGZ1bmN0aW9uIGluIGluZGV4IGV4cHJlc3Npb24gb3IgQ0hFQ0sgY29uc3RyYWludABsb2NhbHRpbWUAdW5peGVwb2NoAHV0YwB3ZWVrZGF5IABzdGFydCBvZiAAbW9udGgAeWVhcgBkYXkAbG9jYWwgdGltZSB1bmF2YWlsYWJsZQBzZWNvbmQAbWludXRlAGhvdXIAJTA0ZC0lMDJkLSUwMmQAJTAyZDolMDJkOiUwMmQAJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQAJTAyZAAlMDYuM2YAJTAzZAAlMDRkAGZhaWxlZCB0byBhbGxvY2F0ZSAldSBieXRlcyBvZiBtZW1vcnkAZmFpbGVkIG1lbW9yeSByZXNpemUgJXUgdG8gJXUgYnl0ZXMAdW5hYmxlIHRvIGNsb3NlIGR1ZSB0byB1bmZpbmFsaXplZCBzdGF0ZW1lbnRzIG9yIHVuZmluaXNoZWQgYmFja3VwcwBub3QgYW4gZXJyb3IAU1FMIGxvZ2ljIGVycm9yAGFjY2VzcyBwZXJtaXNzaW9uIGRlbmllZABxdWVyeSBhYm9ydGVkAGRhdGFiYXNlIGlzIGxvY2tlZABkYXRhYmFzZSB0YWJsZSBpcyBsb2NrZWQAYXR0ZW1wdCB0byB3cml0ZSBhIHJlYWRvbmx5IGRhdGFiYXNlAGludGVycnVwdGVkAGRpc2sgSS9PIGVycm9yAGRhdGFiYXNlIGRpc2sgaW1hZ2UgaXMgbWFsZm9ybWVkAHVua25vd24gb3BlcmF0aW9uAGRhdGFiYXNlIG9yIGRpc2sgaXMgZnVsbAB1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSBmaWxlAGxvY2tpbmcgcHJvdG9jb2wAY29uc3RyYWludCBmYWlsZWQAZGF0YXR5cGUgbWlzbWF0Y2gAYmFkIHBhcmFtZXRlciBvciBvdGhlciBBUEkgbWlzdXNlAGxhcmdlIGZpbGUgc3VwcG9ydCBpcyBkaXNhYmxlZABhdXRob3JpemF0aW9uIGRlbmllZABjb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlAGZpbGUgaXMgbm90IGEgZGF0YWJhc2UAbm90aWZpY2F0aW9uIG1lc3NhZ2UAd2FybmluZyBtZXNzYWdlAHVua25vd24gZXJyb3IAYWJvcnQgZHVlIHRvIFJPTExCQUNLAGFub3RoZXIgcm93IGF2YWlsYWJsZQBubyBtb3JlIHJvd3MgYXZhaWxhYmxlAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IHVzZXItZnVuY3Rpb24gZHVlIHRvIGFjdGl2ZSBzdGF0ZW1lbnRzAHVuYWJsZSB0byB1c2UgZnVuY3Rpb24gJXMgaW4gdGhlIHJlcXVlc3RlZCBjb250ZXh0AG1haW4AaW52YWxpZABSVFJJTQBNQVRDSABhdXRvbWF0aWMgZXh0ZW5zaW9uIGxvYWRpbmcgZmFpbGVkOiAlcwBzaW1wbGUAcG9ydGVyAHVuaWNvZGU2MQBmdHMzX3Rva2VuaXplcgBzbmlwcGV0AG9mZnNldHMAbWF0Y2hpbmZvAGZ0czMAZnRzNAByZW1vdmVfZGlhY3JpdGljcz0xAHJlbW92ZV9kaWFjcml0aWNzPTAAcmVtb3ZlX2RpYWNyaXRpY3M9MgB0b2tlbmNoYXJzPQBzZXBhcmF0b3JzPQBmdHM0YXV4AENSRUFURSBUQUJMRSB4KHRlcm0sIGNvbCwgZG9jdW1lbnRzLCBvY2N1cnJlbmNlcywgbGFuZ3VhZ2VpZCBISURERU4pAGludmFsaWQgYXJndW1lbnRzIHRvIGZ0czRhdXggY29uc3RydWN0b3IAREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkID0gPwBTRUxFQ1QgTk9UIEVYSVNUUyhTRUxFQ1QgZG9jaWQgRlJPTSAlUS4nJXFfY29udGVudCcgV0hFUkUgcm93aWQhPT8pAERFTEVURSBGUk9NICVRLiclcV9jb250ZW50JwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInAERFTEVURSBGUk9NICVRLiclcV9kb2NzaXplJwBERUxFVEUgRlJPTSAlUS4nJXFfc3RhdCcAU0VMRUNUICVzIFdIRVJFIHJvd2lkPT8AU0VMRUNUIChTRUxFQ1QgbWF4KGlkeCkgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8pICsgMQBSRVBMQUNFIElOVE8gJVEuJyVxX3NlZ21lbnRzJyhibG9ja2lkLCBibG9jaykgVkFMVUVTKD8sID8pAFNFTEVDVCBjb2FsZXNjZSgoU0VMRUNUIG1heChibG9ja2lkKSBGUk9NICVRLiclcV9zZWdtZW50cycpICsgMSwgMSkAUkVQTEFDRSBJTlRPICVRLiclcV9zZWdkaXInIFZBTFVFUyg/LD8sPyw/LD8sPykAU0VMRUNUIGlkeCwgc3RhcnRfYmxvY2ssIGxlYXZlc19lbmRfYmxvY2ssIGVuZF9ibG9jaywgcm9vdCBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDAFNFTEVDVCBpZHgsIHN0YXJ0X2Jsb2NrLCBsZWF2ZXNfZW5kX2Jsb2NrLCBlbmRfYmxvY2ssIHJvb3QgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID9PUkRFUiBCWSBsZXZlbCBERVNDLCBpZHggQVNDAFNFTEVDVCBjb3VudCgqKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPwBTRUxFQ1QgbWF4KGxldmVsKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8AREVMRVRFIEZST00gJVEuJyVxX3NlZ21lbnRzJyBXSEVSRSBibG9ja2lkIEJFVFdFRU4gPyBBTkQgPwBJTlNFUlQgSU5UTyAlUS4nJXFfY29udGVudCcgVkFMVUVTKCVzKQBERUxFVEUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQgPSA/AFJFUExBQ0UgSU5UTyAlUS4nJXFfZG9jc2l6ZScgVkFMVUVTKD8sPykAU0VMRUNUIHNpemUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQ9PwBTRUxFQ1QgdmFsdWUgRlJPTSAlUS4nJXFfc3RhdCcgV0hFUkUgaWQ9PwBSRVBMQUNFIElOVE8gJVEuJyVxX3N0YXQnIFZBTFVFUyg/LD8pAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBTRUxFQ1QgPyBVTklPTiBTRUxFQ1QgbGV2ZWwgLyAoMTAyNCAqID8pIEZST00gJVEuJyVxX3NlZ2RpcicAU0VMRUNUIGxldmVsLCBjb3VudCgqKSBBUyBjbnQgRlJPTSAlUS4nJXFfc2VnZGlyJyAgIEdST1VQIEJZIGxldmVsIEhBVklORyBjbnQ+PT8gIE9SREVSIEJZIChsZXZlbCAlJSAxMDI0KSBBU0MgTElNSVQgMQBTRUxFQ1QgMiAqIHRvdGFsKDEgKyBsZWF2ZXNfZW5kX2Jsb2NrIC0gc3RhcnRfYmxvY2spICAgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8gQU5EIGlkeCA8ID8AREVMRVRFIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgaWR4ID0gPyBXSEVSRSBsZXZlbD0/IEFORCBpZHg9PwBTRUxFQ1QgaWR4LCBzdGFydF9ibG9jaywgbGVhdmVzX2VuZF9ibG9jaywgZW5kX2Jsb2NrLCByb290IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgc3RhcnRfYmxvY2sgPSA/LCByb290ID0gP1dIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBTRUxFQ1QgMSBGUk9NICVRLiclcV9zZWdtZW50cycgV0hFUkUgYmxvY2tpZD0/IEFORCBibG9jayBJUyBOVUxMAFNFTEVDVCBpZHggRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbD0/IE9SREVSIEJZIDEgQVNDAFNFTEVDVCBtYXgoIGxldmVsICUlIDEwMjQgKSBGUk9NICVRLiclcV9zZWdkaXInAFNFTEVDVCBsZXZlbCwgaWR4LCBlbmRfYmxvY2sgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID8gT1JERVIgQlkgbGV2ZWwgREVTQywgaWR4IEFTQwBVUERBVEUgT1IgRkFJTCAlUS4nJXFfc2VnZGlyJyBTRVQgbGV2ZWw9LTEsaWR4PT8gV0hFUkUgbGV2ZWw9PyBBTkQgaWR4PT8AVVBEQVRFIE9SIEZBSUwgJVEuJyVxX3NlZ2RpcicgU0VUIGxldmVsPT8gV0hFUkUgbGV2ZWw9LTEAJXNfc2VnbWVudHMAYmxvY2sAYXJndW1lbnQgdHlwZSBtaXNtYXRjaABmdHMzdG9rZW5pemUgZGlzYWJsZWQAdW5rbm93biB0b2tlbml6ZXI6ICVzAHRva2VuaXplAHByZWZpeABjb21wcmVzcwB1bmNvbXByZXNzAG9yZGVyAGNvbnRlbnQAbGFuZ3VhZ2VpZABub3RpbmRleGVkAHVucmVjb2duaXplZCBtYXRjaGluZm86ICVzAGFzYwB1bnJlY29nbml6ZWQgb3JkZXI6ICVzAHVucmVjb2duaXplZCBwYXJhbWV0ZXI6ICVzAGVycm9yIHBhcnNpbmcgcHJlZml4IHBhcmFtZXRlcjogJXMAbWlzc2luZyAlcyBwYXJhbWV0ZXIgaW4gZnRzNCBjb25zdHJ1Y3RvcgB1bmtub3duIHRva2VuaXplcgBTRUxFQ1QgKiBGUk9NICVRLiVRAGRvY2lkACwlcyh4LidjJWQlcScpACwgeC4lUQBsYW5naWQALCB4LiclcScAIEZST00gJyVxJy4nJXElcycgQVMgeABfY29udGVudAAsJXMoPykALCA/AGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVkAJXosICdjJWQlcScAJXosIGxhbmdpZABDUkVBVEUgVEFCTEUgJVEuJyVxX2NvbnRlbnQnKCVzKQBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ21lbnRzJyhibG9ja2lkIElOVEVHRVIgUFJJTUFSWSBLRVksIGJsb2NrIEJMT0IpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ2RpcicobGV2ZWwgSU5URUdFUixpZHggSU5URUdFUixzdGFydF9ibG9jayBJTlRFR0VSLGxlYXZlc19lbmRfYmxvY2sgSU5URUdFUixlbmRfYmxvY2sgSU5URUdFUixyb290IEJMT0IsUFJJTUFSWSBLRVkobGV2ZWwsIGlkeCkpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX2RvY3NpemUnKGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVksIHNpemUgQkxPQik7AENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICVRLiclcV9zdGF0JyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCB2YWx1ZSBCTE9CKTsAUFJBR01BICVRLnBhZ2Vfc2l6ZQBfX2xhbmdpZAAlUSwgACV6JVEsIABDUkVBVEUgVEFCTEUgeCglcyAlUSBISURERU4sIGRvY2lkIEhJRERFTiwgJVEgSElEREVOKQBERVNDAEFTQwBEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfc2VnbWVudHMnO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zZWdkaXInO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9kb2NzaXplJztEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfc3RhdCc7JXMgRFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX2NvbnRlbnQnOwAtLQBTRUxFQ1QgJXMgV0hFUkUgcm93aWQgQkVUV0VFTiAlbGxkIEFORCAlbGxkIE9SREVSIEJZIHJvd2lkICVzAFNFTEVDVCAlcyBPUkRFUiBCWSByb3dpZCAlcwBGVFMgZXhwcmVzc2lvbiB0cmVlIGlzIHRvbyBsYXJnZSAobWF4aW11bSBkZXB0aCAlZCkAbWFsZm9ybWVkIE1BVENIIGV4cHJlc3Npb246IFslc10AT1IAQU5EAE5PVABORUFSAFNFTEVDVCAlcyBXSEVSRSByb3dpZCA9ID8AZnRzM2N1cnNvcgByZWJ1aWxkAGludGVncml0eS1jaGVjawBtZXJnZT0AYXV0b21lcmdlPQAlbGxkICVsbGQAU0VMRUNUICVzACVzX3N0YXQAPGI+ADwvYj4APGI+Li4uPC9iPgB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGZ1bmN0aW9uIHNuaXBwZXQoKQBpbGxlZ2FsIGZpcnN0IGFyZ3VtZW50IHRvICVzACVkICVkICVkICVkIABJbmRleCBvcHRpbWl6ZWQASW5kZXggYWxyZWFkeSBvcHRpbWFsAFNBVkVQT0lOVCBmdHMzAFJFTEVBU0UgZnRzMwBST0xMQkFDSyBUTyBmdHMzAHBjeAB1bnJlY29nbml6ZWQgbWF0Y2hpbmZvIHJlcXVlc3Q6ICVjAEFMVEVSIFRBQkxFICVRLiclcV9jb250ZW50JyAgUkVOQU1FIFRPICclcV9jb250ZW50JzsAQUxURVIgVEFCTEUgJVEuJyVxX2RvY3NpemUnICBSRU5BTUUgVE8gJyVxX2RvY3NpemUnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc3RhdCcgIFJFTkFNRSBUTyAnJXFfc3RhdCc7AEFMVEVSIFRBQkxFICVRLiclcV9zZWdtZW50cycgUkVOQU1FIFRPICclcV9zZWdtZW50cyc7AEFMVEVSIFRBQkxFICVRLiclcV9zZWdkaXInICAgUkVOQU1FIFRPICclcV9zZWdkaXInOwBkb2NzaXplAHNlZ2RpcgBzZWdtZW50cwBmdHMzdG9rZW5pemUAQ1JFQVRFIFRBQkxFIHgoaW5wdXQsIHRva2VuLCBzdGFydCwgZW5kLCBwb3NpdGlvbikAcnRyZWVub2RlAHJ0cmVlZGVwdGgAcnRyZWVjaGVjawBydHJlZQBydHJlZV9pMzIAeyVsbGQAICVnAH0ASW52YWxpZCBhcmd1bWVudCB0byBydHJlZWRlcHRoKCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiBydHJlZWNoZWNrKCkAU0VMRUNUICogRlJPTSAlUS4nJXFfcm93aWQnAFNjaGVtYSBjb3JydXB0IG9yIG5vdCBhbiBydHJlZQBfcm93aWQAX3BhcmVudABFTkQAJXolcyV6AE5vZGUgJWxsZCBpcyB0b28gc21hbGwgKCVkIGJ5dGVzKQBSdHJlZSBkZXB0aCBvdXQgb2YgcmFuZ2UgKCVkKQBOb2RlICVsbGQgaXMgdG9vIHNtYWxsIGZvciBjZWxsIGNvdW50IG9mICVkICglZCBieXRlcykAU0VMRUNUIGRhdGEgRlJPTSAlUS4nJXFfbm9kZScgV0hFUkUgbm9kZW5vPT8ATm9kZSAlbGxkIG1pc3NpbmcgZnJvbSBkYXRhYmFzZQBEaW1lbnNpb24gJWQgb2YgY2VsbCAlZCBvbiBub2RlICVsbGQgaXMgY29ycnVwdABEaW1lbnNpb24gJWQgb2YgY2VsbCAlZCBvbiBub2RlICVsbGQgaXMgY29ycnVwdCByZWxhdGl2ZSB0byBwYXJlbnQAU0VMRUNUIHBhcmVudG5vZGUgRlJPTSAlUS4nJXFfcGFyZW50JyBXSEVSRSBub2Rlbm89PzEAU0VMRUNUIG5vZGVubyBGUk9NICVRLiclcV9yb3dpZCcgV0hFUkUgcm93aWQ9PzEATWFwcGluZyAoJWxsZCAtPiAlbGxkKSBtaXNzaW5nIGZyb20gJXMgdGFibGUAJV9yb3dpZAAlX3BhcmVudABGb3VuZCAoJWxsZCAtPiAlbGxkKSBpbiAlcyB0YWJsZSwgZXhwZWN0ZWQgKCVsbGQgLT4gJWxsZCkAU0VMRUNUIGNvdW50KCopIEZST00gJVEuJyVxJXMnAFdyb25nIG51bWJlciBvZiBlbnRyaWVzIGluICUlJXMgdGFibGUgLSBleHBlY3RlZCAlbGxkLCBhY3R1YWwgJWxsZABXcm9uZyBudW1iZXIgb2YgY29sdW1ucyBmb3IgYW4gcnRyZWUgdGFibGUAVG9vIGZldyBjb2x1bW5zIGZvciBhbiBydHJlZSB0YWJsZQBUb28gbWFueSBjb2x1bW5zIGZvciBhbiBydHJlZSB0YWJsZQBBdXhpbGlhcnkgcnRyZWUgY29sdW1ucyBtdXN0IGJlIGxhc3QAQ1JFQVRFIFRBQkxFIHgoJXMALCVzACk7AFNFTEVDVCBsZW5ndGgoZGF0YSkgRlJPTSAnJXEnLiclcV9ub2RlJyBXSEVSRSBub2Rlbm8gPSAxAHVuZGVyc2l6ZSBSVHJlZSBibG9icyBpbiAiJXFfbm9kZSIASU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnJXEnLiclcV9ub2RlJyBWQUxVRVMoPzEsID8yKQBERUxFVEUgRlJPTSAnJXEnLiclcV9ub2RlJyBXSEVSRSBub2Rlbm8gPSA/MQBTRUxFQ1Qgbm9kZW5vIEZST00gJyVxJy4nJXFfcm93aWQnIFdIRVJFIHJvd2lkID0gPzEASU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnJXEnLiclcV9yb3dpZCcgVkFMVUVTKD8xLCA/MikAREVMRVRFIEZST00gJyVxJy4nJXFfcm93aWQnIFdIRVJFIHJvd2lkID0gPzEAU0VMRUNUIHBhcmVudG5vZGUgRlJPTSAnJXEnLiclcV9wYXJlbnQnIFdIRVJFIG5vZGVubyA9ID8xAElOU0VSVCBPUiBSRVBMQUNFIElOVE8gJyVxJy4nJXFfcGFyZW50JyBWQUxVRVMoPzEsID8yKQBERUxFVEUgRlJPTSAnJXEnLiclcV9wYXJlbnQnIFdIRVJFIG5vZGVubyA9ID8xAENSRUFURSBUQUJMRSAiJXciLiIld19yb3dpZCIocm93aWQgSU5URUdFUiBQUklNQVJZIEtFWSxub2Rlbm8ALGElZAApO0NSRUFURSBUQUJMRSAiJXciLiIld19ub2RlIihub2Rlbm8gSU5URUdFUiBQUklNQVJZIEtFWSxkYXRhKTsAQ1JFQVRFIFRBQkxFICIldyIuIiV3X3BhcmVudCIobm9kZW5vIElOVEVHRVIgUFJJTUFSWSBLRVkscGFyZW50bm9kZSk7AElOU0VSVCBJTlRPICIldyIuIiV3X25vZGUiVkFMVUVTKDEsemVyb2Jsb2IoJWQpKQBJTlNFUlQgSU5UTyIldyIuIiV3X3Jvd2lkIihyb3dpZCxub2Rlbm8pVkFMVUVTKD8xLD8yKU9OIENPTkZMSUNUKHJvd2lkKURPIFVQREFURSBTRVQgbm9kZW5vPWV4Y2x1ZGVkLm5vZGVubwBTRUxFQ1QgKiBGUk9NICIldyIuIiV3X3Jvd2lkIiBXSEVSRSByb3dpZD0/MQBVUERBVEUgIiV3Ii4iJXdfcm93aWQiU0VUIABhJWQ9Y29hbGVzY2UoPyVkLGElZCkAYSVkPT8lZAAgV0hFUkUgcm93aWQ9PzEAU0VMRUNUIHN0YXQgRlJPTSAlUS5zcWxpdGVfc3RhdDEgV0hFUkUgdGJsID0gJyVxX3Jvd2lkJwBEUk9QIFRBQkxFICclcScuJyVxX25vZGUnO0RST1AgVEFCTEUgJyVxJy4nJXFfcm93aWQnO0RST1AgVEFCTEUgJyVxJy4nJXFfcGFyZW50JzsAJXNfbm9kZQBkYXRhAFJ0cmVlTWF0Y2hBcmcAVU5JUVVFIGNvbnN0cmFpbnQgZmFpbGVkOiAlcy4lcwBydHJlZSBjb25zdHJhaW50IGZhaWxlZDogJXMuKCVzPD0lcykAQUxURVIgVEFCTEUgJVEuJyVxX25vZGUnICAgUkVOQU1FIFRPICIld19ub2RlIjtBTFRFUiBUQUJMRSAlUS4nJXFfcGFyZW50JyBSRU5BTUUgVE8gIiV3X3BhcmVudCI7QUxURVIgVEFCTEUgJVEuJyVxX3Jvd2lkJyAgUkVOQU1FIFRPICIld19yb3dpZCI7AG5vZGUAdW5hYmxlIHRvIGRlbGV0ZS9tb2RpZnkgY29sbGF0aW9uIHNlcXVlbmNlIGR1ZSB0byBhY3RpdmUgc3RhdGVtZW50cwBtaXN1c2UAX1JPV0lEXwBPSUQAQ09NUElMRVI9Y2xhbmctNi4wLjEARElTQUJMRV9MRlMARU5BQkxFX0ZUUzMARU5BQkxFX0ZUUzNfUEFSRU5USEVTSVMARU5BQkxFX1JUUkVFAE9NSVRfTE9BRF9FWFRFTlNJT04AVEhSRUFEU0FGRT0wAHN0ZGV2AHZhcmlhbmNlAG1vZGUAbWVkaWFuAGxvd2VyX3F1YXJ0aWxlAHVwcGVyX3F1YXJ0aWxlAGFyZ2M9PTEAc3FsaXRlLXNyYy9zcWxpdGUtYW1hbGdhbWF0aW9uLTMyODAwMDAvZXh0ZW5zaW9uLWZ1bmN0aW9ucy5jAG1vZGVTdGVwAHZhcmlhbmNlU3RlcABhY29zAGFzaW4AYXRhbgBhdG4yAGF0YW4yAGFjb3NoAGFzaW5oAGF0YW5oAGRpZmZlcmVuY2UAZGVncmVlcwByYWRpYW5zAGNvcwBzaW4AdGFuAGNvdABjb3NoAHNpbmgAdGFuaABjb3RoAGV4cABsb2cAbG9nMTAAcG93ZXIAc2lnbgBzcXJ0AHNxdWFyZQBjZWlsAGZsb29yAHBpAHJlcGxpY2F0ZQBjaGFyaW5kZXgAbGVmdHN0cgByaWdodHN0cgByZXZlcnNlAHByb3BlcgBwYWRsAHBhZHIAcGFkYwBzdHJmaWx0ZXIAYXJnYz09MgBzdHJmaWx0ZXJGdW5jAHBhZGNGdW5jAGRvbWFpbiBlcnJvcgBwYWRyRnVuYwBwYWRsRnVuYwBwcm9wZXJGdW5jADE9PWFyZ2MAcmV2ZXJzZUZ1bmMAcmlnaHRGdW5jAGxlZnRGdW5jAGFyZ2M9PTMgfHxhcmdjPT0yAGNoYXJpbmRleEZ1bmMAZmxvb3JGdW5jAGNlaWxGdW5jAHNxdWFyZUZ1bmMAc3FydEZ1bmMAc2lnbkZ1bmMAcG93ZXJGdW5jAGxvZzEwRnVuYwBsb2dGdW5jAGV4cEZ1bmMAY290aEZ1bmMAdGFuaEZ1bmMAc2luaEZ1bmMAY29zaEZ1bmMAY290RnVuYwB0YW5GdW5jAHNpbkZ1bmMAY29zRnVuYwBkZWcycmFkRnVuYwByYWQyZGVnRnVuYwBkaWZmZXJlbmNlRnVuYwA/MDAwAGF0YW5oRnVuYwBhc2luaEZ1bmMAYWNvc2hGdW5jAGF0bjJGdW5jAGF0YW5GdW5jAGFzaW5GdW5jAGFjb3NGdW5jAC9wcm9jL3NlbGYvZmQv\";\nvar I={};\nfunction mb(a){if(mb.pa){var b=D[a>>2];var c=D[b>>2]}else mb.pa=!0,I.USER=I.LOGNAME=\"web_user\",I.PATH=\"/\",I.PWD=\"/\",I.HOME=\"/home/web_user\",I.LANG=\"C.UTF-8\",I._=f.thisProgram,c=gb?Wa(1024):Fa(1024),b=gb?Wa(256):Fa(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in I)if(\"string\"===typeof I[e]){var g=e+\"=\"+I[e];a.push(g);d+=g.length}if(1024<d)throw Error(\"Environment size exceeded TOTAL_ENV_SIZE!\");for(e=0;e<a.length;e++){d=g=a[e];for(var k=c,n=0;n<d.length;++n)l[k++>>0]=d.charCodeAt(n);l[k>>0]=0;D[b+\n4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function nb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function ob(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];\".\"===e?a.splice(d,1):\"..\"===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift(\"..\");return a}function qb(a){var b=\"/\"===a.charAt(0),c=\"/\"===a.substr(-1);(a=ob(a.split(\"/\").filter(function(a){return!!a}),!b).join(\"/\"))||b||(a=\".\");a&&c&&(a+=\"/\");return(b?\"/\":\"\")+a}\nfunction rb(a){var b=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return\".\";b&&(b=b.substr(0,b.length-1));return a+b}function sb(a){if(\"/\"===a)return\"/\";var b=a.lastIndexOf(\"/\");return-1===b?a:a.substr(b+1)}function tb(){var a=Array.prototype.slice.call(arguments,0);return qb(a.join(\"/\"))}function m(a,b){return qb(a+\"/\"+b)}\nfunction xb(){for(var a=\"\",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:\"/\";if(\"string\"!==typeof b)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!b)return\"\";a=b+\"/\"+a;b=\"/\"===b.charAt(0)}a=ob(a.split(\"/\").filter(function(a){return!!a}),!b).join(\"/\");return(b?\"/\":\"\")+a||\".\"}var yb=[];function zb(a,b){yb[a]={input:[],output:[],wa:b};Ab(a,Bb)}\nvar Bb={open:function(a){var b=yb[a.node.rdev];if(!b)throw new J(K.Fa);a.tty=b;a.seekable=!1},close:function(a){a.tty.wa.flush(a.tty)},flush:function(a){a.tty.wa.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.wa.$a)throw new J(K.Ra);for(var e=0,g=0;g<d;g++){try{var k=a.tty.wa.$a(a.tty)}catch(n){throw new J(K.Oa);}if(void 0===k&&0===e)throw new J(K.fb);if(null===k||void 0===k)break;e++;b[c+g]=k}e&&(a.node.timestamp=Date.now());return e},write:function(a,b,c,d){if(!a.tty||!a.tty.wa.La)throw new J(K.Ra);\ntry{for(var e=0;e<d;e++)a.tty.wa.La(a.tty,b[c+e])}catch(g){throw new J(K.Oa);}d&&(a.node.timestamp=Date.now());return e}},Cb={$a:function(a){if(!a.input.length){var b=null;if(y){var c=new Buffer(256),d=0,e=process.stdin.fd;if(\"win32\"!=process.platform){var g=!1;try{e=fs.openSync(\"/dev/stdin\",\"r\"),g=!0}catch(k){}}try{d=fs.readSync(e,c,0,256,null)}catch(k){if(-1!=k.toString().indexOf(\"EOF\"))d=0;else throw k;}g&&fs.closeSync(e);0<d?b=c.slice(0,d).toString(\"utf-8\"):b=null}else\"undefined\"!=typeof window&&\n\"function\"==typeof window.prompt?(b=window.prompt(\"Input: \"),null!==b&&(b+=\"\\n\")):\"function\"==typeof readline&&(b=readline(),null!==b&&(b+=\"\\n\"));if(!b)return null;a.input=ba(b,!0)}return a.input.shift()},La:function(a,b){null===b||10===b?(Da(u(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(Da(u(a.output,0)),a.output=[])}},Db={La:function(a,b){null===b||10===b?(Ea(u(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&\n(Ea(u(a.output,0)),a.output=[])}},L={na:null,ka:function(){return L.createNode(null,\"/\",16895,0)},createNode:function(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new J(K.ib);L.na||(L.na={dir:{node:{ma:L.ba.ma,ia:L.ba.ia,lookup:L.ba.lookup,ya:L.ba.ya,rename:L.ba.rename,unlink:L.ba.unlink,rmdir:L.ba.rmdir,readdir:L.ba.readdir,symlink:L.ba.symlink},stream:{ra:L.ea.ra}},file:{node:{ma:L.ba.ma,ia:L.ba.ia},stream:{ra:L.ea.ra,read:L.ea.read,write:L.ea.write,Sa:L.ea.Sa,Ca:L.ea.Ca,Da:L.ea.Da}},link:{node:{ma:L.ba.ma,\nia:L.ba.ia,readlink:L.ba.readlink},stream:{}},Va:{node:{ma:L.ba.ma,ia:L.ba.ia},stream:Eb}});c=Fb(a,b,c,d);M(c.mode)?(c.ba=L.na.dir.node,c.ea=L.na.dir.stream,c.da={}):32768===(c.mode&61440)?(c.ba=L.na.file.node,c.ea=L.na.file.stream,c.ha=0,c.da=null):40960===(c.mode&61440)?(c.ba=L.na.link.node,c.ea=L.na.link.stream):8192===(c.mode&61440)&&(c.ba=L.na.Va.node,c.ea=L.na.Va.stream);c.timestamp=Date.now();a&&(a.da[b]=c);return c},ne:function(a){if(a.da&&a.da.subarray){for(var b=[],c=0;c<a.ha;++c)b.push(a.da[c]);\nreturn b}return a.da},oe:function(a){return a.da?a.da.subarray?a.da.subarray(0,a.ha):new Uint8Array(a.da):new Uint8Array},Wa:function(a,b){var c=a.da?a.da.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.da,a.da=new Uint8Array(b),0<a.ha&&a.da.set(c.subarray(0,a.ha),0))},Cb:function(a,b){if(a.ha!=b)if(0==b)a.da=null,a.ha=0;else{if(!a.da||a.da.subarray){var c=a.da;a.da=new Uint8Array(new ArrayBuffer(b));c&&a.da.set(c.subarray(0,Math.min(b,a.ha)))}else if(a.da||(a.da=\n[]),a.da.length>b)a.da.length=b;else for(;a.da.length<b;)a.da.push(0);a.ha=b}},ba:{ma:function(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;M(a.mode)?b.size=4096:32768===(a.mode&61440)?b.size=a.ha:40960===(a.mode&61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.sa=4096;b.blocks=Math.ceil(b.size/b.sa);return b},ia:function(a,b){void 0!==b.mode&&(a.mode=\nb.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&L.Cb(a,b.size)},lookup:function(){throw Gb[K.gb];},ya:function(a,b,c,d){return L.createNode(a,b,c,d)},rename:function(a,b,c){if(M(a.mode)){try{var d=N(b,c)}catch(g){}if(d)for(var e in d.da)throw new J(K.Qa);}delete a.parent.da[a.name];a.name=c;b.da[c]=a;a.parent=b},unlink:function(a,b){delete a.da[b]},rmdir:function(a,b){var c=N(a,b),d;for(d in c.da)throw new J(K.Qa);delete a.da[b]},readdir:function(a){var b=[\".\",\"..\"],c;for(c in a.da)a.da.hasOwnProperty(c)&&\nb.push(c);return b},symlink:function(a,b,c){a=L.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(40960!==(a.mode&61440))throw new J(K.ja);return a.link}},ea:{read:function(a,b,c,d,e){var g=a.node.da;if(e>=a.node.ha)return 0;a=Math.min(a.node.ha-e,d);if(8<a&&g.subarray)b.set(g.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=g[e+d];return a},write:function(a,b,c,d,e,g){g=!1;if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.da||a.da.subarray)){if(g)return a.da=b.subarray(c,\nc+d),a.ha=d;if(0===a.ha&&0===e)return a.da=new Uint8Array(b.subarray(c,c+d)),a.ha=d;if(e+d<=a.ha)return a.da.set(b.subarray(c,c+d),e),d}L.Wa(a,e+d);if(a.da.subarray&&b.subarray)a.da.set(b.subarray(c,c+d),e);else for(g=0;g<d;g++)a.da[e+g]=b[c+g];a.ha=Math.max(a.ha,e+d);return d},ra:function(a,b,c){1===c?b+=a.position:2===c&&32768===(a.node.mode&61440)&&(b+=a.node.ha);if(0>b)throw new J(K.ja);return b},Sa:function(a,b,c){L.Wa(a.node,b+c);a.node.ha=Math.max(a.node.ha,b+c)},Ca:function(a,b,c,d,e,g,k){if(32768!==\n(a.node.mode&61440))throw new J(K.Fa);c=a.node.da;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0<e||e+d<a.node.ha)c.subarray?c=c.subarray(e,e+d):c=Array.prototype.slice.call(c,e,e+d);a=!0;d=Wa(d);if(!d)throw new J(K.Pa);b.set(c,d)}else a=!1,d=c.byteOffset;return{Bb:d,Ga:a}},Da:function(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new J(K.Fa);if(e&2)return 0;L.ea.write(a,b,0,d,c,!1);return 0}}},O={Ba:!1,Eb:function(){O.Ba=!!process.platform.match(/^win/);var a=process.binding(\"constants\");a.fs&&\n(a=a.fs);O.Xa={1024:a.O_APPEND,64:a.O_CREAT,128:a.O_EXCL,0:a.O_RDONLY,2:a.O_RDWR,4096:a.O_SYNC,512:a.O_TRUNC,1:a.O_WRONLY}},Ua:function(a){return Buffer.pa?Buffer.from(a):new Buffer(a)},ka:function(a){assert(y);return O.createNode(null,\"/\",O.Za(a.Ka.root),0)},createNode:function(a,b,c){if(!M(c)&&32768!==(c&61440)&&40960!==(c&61440))throw new J(K.ja);a=Fb(a,b,c);a.ba=O.ba;a.ea=O.ea;return a},Za:function(a){try{var b=fs.lstatSync(a);O.Ba&&(b.mode=b.mode|(b.mode&292)>>2)}catch(c){if(!c.code)throw c;\nthrow new J(K[c.code]);}return b.mode},la:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.ka.Ka.root);b.reverse();return tb.apply(null,b)},ub:function(a){a&=-2656257;var b=0,c;for(c in O.Xa)a&c&&(b|=O.Xa[c],a^=c);if(a)throw new J(K.ja);return b},ba:{ma:function(a){a=O.la(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}O.Ba&&!b.sa&&(b.sa=4096);O.Ba&&!b.blocks&&(b.blocks=(b.size+b.sa-1)/b.sa|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink,\nuid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,sa:b.sa,blocks:b.blocks}},ia:function(a,b){var c=O.la(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},lookup:function(a,b){var c=m(O.la(a),b);c=O.Za(c);return O.createNode(a,b,c)},ya:function(a,b,c,d){a=O.createNode(a,b,c,d);b=O.la(a);try{M(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,\"\",{mode:a.mode})}catch(e){if(!e.code)throw e;\nthrow new J(K[e.code]);}return a},rename:function(a,b,c){a=O.la(a);b=m(O.la(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},unlink:function(a,b){a=m(O.la(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},rmdir:function(a,b){a=m(O.la(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},readdir:function(a){a=O.la(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new J(K[b.code]);}},symlink:function(a,\nb,c){a=m(O.la(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},readlink:function(a){var b=O.la(a);try{return b=fs.readlinkSync(b),b=Hb.relative(Hb.resolve(a.ka.Ka.root),b)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}}},ea:{open:function(a){var b=O.la(a.node);try{32768===(a.node.mode&61440)&&(a.za=fs.openSync(b,O.ub(a.flags)))}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.za&&fs.closeSync(a.za)}catch(b){if(!b.code)throw b;\nthrow new J(K[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.za,O.Ua(b.buffer),c,d,e)}catch(g){throw new J(K[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.za,O.Ua(b.buffer),c,d,e)}catch(g){throw new J(K[g.code]);}},ra:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.za).size}catch(d){throw new J(K[d.code]);}if(0>b)throw new J(K.ja);return b}}},Ib=null,Jb={},P=[],Kb=1,Q=null,Lb=!0,R={},J=null,\nGb={};function S(a,b){a=xb(\"/\",a);b=b||{};if(!a)return{path:\"\",node:null};var c={Ya:!0,Ma:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.Ma)throw new J(40);a=ob(a.split(\"/\").filter(function(a){return!!a}),!1);var e=Ib;c=\"/\";for(d=0;d<a.length;d++){var g=d===a.length-1;if(g&&b.parent)break;e=N(e,a[d]);c=m(c,a[d]);e.ua&&(!g||g&&b.Ya)&&(e=e.ua.root);if(!g||b.ta)for(g=0;40960===(e.mode&61440);)if(e=Mb(c),c=xb(rb(c),e),e=S(c,{Ma:b.Ma}).node,40<g++)throw new J(40);}return{path:c,node:e}}\nfunction Nb(a){for(var b;;){if(a===a.parent)return a=a.ka.bb,b?\"/\"!==a[a.length-1]?a+\"/\"+b:a+b:a;b=b?a.name+\"/\"+b:a.name;a=a.parent}}function Ob(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%Q.length}function Pb(a){var b=Ob(a.parent.id,a.name);a.va=Q[b];Q[b]=a}function Qb(a){var b=Ob(a.parent.id,a.name);if(Q[b]===a)Q[b]=a.va;else for(b=Q[b];b;){if(b.va===a){b.va=a.va;break}b=b.va}}\nfunction N(a,b){var c;if(c=(c=Rb(a,\"x\"))?c:a.ba.lookup?0:13)throw new J(c,a);for(c=Q[Ob(a.id,b)];c;c=c.va){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ba.lookup(a,b)}\nfunction Fb(a,b,c,d){Sb||(Sb=function(a,b,c,d){a||(a=this);this.parent=a;this.ka=a.ka;this.ua=null;this.id=Kb++;this.name=b;this.mode=c;this.ba={};this.ea={};this.rdev=d},Sb.prototype={},Object.defineProperties(Sb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Sb(a,b,c,d);Pb(a);return a}\nfunction M(a){return 16384===(a&61440)}var Tb={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};function Ub(a){var b=[\"r\",\"w\",\"rw\"][a&3];a&512&&(b+=\"w\");return b}function Rb(a,b){if(Lb)return 0;if(-1===b.indexOf(\"r\")||a.mode&292){if(-1!==b.indexOf(\"w\")&&!(a.mode&146)||-1!==b.indexOf(\"x\")&&!(a.mode&73))return 13}else return 13;return 0}function Vb(a,b){try{return N(a,b),17}catch(c){}return Rb(a,\"wx\")}\nfunction Wb(a,b,c){try{var d=N(a,b)}catch(e){return e.fa}if(a=Rb(a,\"wx\"))return a;if(c){if(!M(d.mode))return 20;if(d===d.parent||\"/\"===Nb(d))return 16}else if(M(d.mode))return 21;return 0}function Xb(a){var b=4096;for(a=a||0;a<=b;a++)if(!P[a])return a;throw new J(24);}\nfunction Yb(a,b){Zb||(Zb=function(){},Zb.prototype={},Object.defineProperties(Zb.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new Zb,d;for(d in a)c[d]=a[d];a=c;b=Xb(b);a.fd=b;return P[b]=a}var Eb={open:function(a){a.ea=Jb[a.node.rdev].ea;a.ea.open&&a.ea.open(a)},ra:function(){throw new J(29);}};function Ab(a,b){Jb[a]={ea:b}}\nfunction $b(a,b){var c=\"/\"===b,d=!b;if(c&&Ib)throw new J(16);if(!c&&!d){var e=S(b,{Ya:!1});b=e.path;e=e.node;if(e.ua)throw new J(16);if(!M(e.mode))throw new J(20);}b={type:a,Ka:{},bb:b,Ab:[]};a=a.ka(b);a.ka=b;b.root=a;c?Ib=a:e&&(e.ua=b,e.ka&&e.ka.Ab.push(b))}function ja(a,b,c){var d=S(a,{parent:!0}).node;a=sb(a);if(!a||\".\"===a||\"..\"===a)throw new J(22);var e=Vb(d,a);if(e)throw new J(e);if(!d.ba.ya)throw new J(1);return d.ba.ya(d,a,b,c)}function T(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)}\nfunction ac(a,b,c){\"undefined\"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function bc(a,b){if(!xb(a))throw new J(2);var c=S(b,{parent:!0}).node;if(!c)throw new J(2);b=sb(b);var d=Vb(c,b);if(d)throw new J(d);if(!c.ba.symlink)throw new J(1);c.ba.symlink(c,b,a)}\nfunction ua(a){var b=S(a,{parent:!0}).node,c=sb(a),d=N(b,c),e=Wb(b,c,!1);if(e)throw new J(e);if(!b.ba.unlink)throw new J(1);if(d.ua)throw new J(16);try{R.willDeletePath&&R.willDeletePath(a)}catch(g){console.log(\"FS.trackingDelegate['willDeletePath']('\"+a+\"') threw an exception: \"+g.message)}b.ba.unlink(b,c);Qb(d);try{if(R.onDeletePath)R.onDeletePath(a)}catch(g){console.log(\"FS.trackingDelegate['onDeletePath']('\"+a+\"') threw an exception: \"+g.message)}}\nfunction Mb(a){a=S(a).node;if(!a)throw new J(2);if(!a.ba.readlink)throw new J(22);return xb(Nb(a.parent),a.ba.readlink(a))}function sa(a,b){a=S(a,{ta:!b}).node;if(!a)throw new J(2);if(!a.ba.ma)throw new J(1);return a.ba.ma(a)}function cc(a){return sa(a,!0)}function ka(a,b){var c;\"string\"===typeof a?c=S(a,{ta:!0}).node:c=a;if(!c.ba.ia)throw new J(1);c.ba.ia(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})}\nfunction dc(a){var b;\"string\"===typeof a?b=S(a,{ta:!0}).node:b=a;if(!b.ba.ia)throw new J(1);b.ba.ia(b,{timestamp:Date.now()})}function ec(a,b){if(0>b)throw new J(22);var c;\"string\"===typeof a?c=S(a,{ta:!0}).node:c=a;if(!c.ba.ia)throw new J(1);if(M(c.mode))throw new J(21);if(32768!==(c.mode&61440))throw new J(22);if(a=Rb(c,\"w\"))throw new J(a);c.ba.ia(c,{size:b,timestamp:Date.now()})}\nfunction p(a,b,c,d){if(\"\"===a)throw new J(2);if(\"string\"===typeof b){var e=Tb[b];if(\"undefined\"===typeof e)throw Error(\"Unknown file open mode: \"+b);b=e}c=b&64?(\"undefined\"===typeof c?438:c)&4095|32768:0;if(\"object\"===typeof a)var g=a;else{a=qb(a);try{g=S(a,{ta:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new J(17);}else g=ja(a,c,0),e=!0;if(!g)throw new J(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!M(g.mode))throw new J(20);if(!e&&(c=g?40960===(g.mode&61440)?40:M(g.mode)&&\n(\"r\"!==Ub(b)||b&512)?21:Rb(g,Ub(b)):2))throw new J(c);b&512&&ec(g,0);b&=-641;d=Yb({node:g,path:Nb(g),flags:b,seekable:!0,position:0,ea:g.ea,Fb:[],error:!1},d);d.ea.open&&d.ea.open(d);!f.logReadFiles||b&1||(vc||(vc={}),a in vc||(vc[a]=1,console.log(\"FS.trackingDelegate error on read file: \"+a)));try{R.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),R.onOpenFile(a,g))}catch(k){console.log(\"FS.trackingDelegate['onOpenFile']('\"+a+\"', flags) threw an exception: \"+k.message)}return d}\nfunction ma(a){if(null===a.fd)throw new J(9);a.Ja&&(a.Ja=null);try{a.ea.close&&a.ea.close(a)}catch(b){throw b;}finally{P[a.fd]=null}a.fd=null}function Gc(a,b,c){if(null===a.fd)throw new J(9);if(!a.seekable||!a.ea.ra)throw new J(29);if(0!=c&&1!=c&&2!=c)throw new J(22);a.position=a.ea.ra(a,b,c);a.Fb=[]}\nfunction ta(a,b,c,d,e){if(0>d||0>e)throw new J(22);if(null===a.fd)throw new J(9);if(1===(a.flags&2097155))throw new J(9);if(M(a.node.mode))throw new J(21);if(!a.ea.read)throw new J(22);var g=\"undefined\"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new J(29);b=a.ea.read(a,b,c,d,e);g||(a.position+=b);return b}\nfunction la(a,b,c,d,e,g){if(0>d||0>e)throw new J(22);if(null===a.fd)throw new J(9);if(0===(a.flags&2097155))throw new J(9);if(M(a.node.mode))throw new J(21);if(!a.ea.write)throw new J(22);a.flags&1024&&Gc(a,0,2);var k=\"undefined\"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new J(29);b=a.ea.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&R.onWriteToFile)R.onWriteToFile(a.path)}catch(n){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+a.path+\"') threw an exception: \"+n.message)}return b}\nfunction Hc(){J||(J=function(a,b){this.node=b;this.Db=function(a){this.fa=a};this.Db(a);this.message=\"FS error\";this.stack&&Object.defineProperty(this,\"stack\",{value:Error().stack,writable:!0})},J.prototype=Error(),J.prototype.constructor=J,[2].forEach(function(a){Gb[a]=new J(a);Gb[a].stack=\"<generic error, no stack>\"}))}var Ic;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c}\nfunction Jc(a,b,c){a=m(\"/dev\",a);var d=ia(!!b,!!c);Kc||(Kc=64);var e=Kc++<<8|0;Ab(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k<e;k++){try{var n=b()}catch(Pa){throw new J(5);}if(void 0===n&&0===g)throw new J(11);if(null===n||void 0===n)break;g++;c[d+k]=n}g&&(a.node.timestamp=Date.now());return g},write:function(a,b,d,e){for(var g=0;g<e;g++)try{c(b[d+g])}catch(ha){throw new J(5);}e&&(a.node.timestamp=Date.now());return g}});\nac(a,d,e)}\nvar Kc,U={},Sb,Zb,vc,K={ib:1,gb:2,Hd:3,wc:4,Oa:5,Ra:6,Mb:7,Xc:8,Na:9,bc:10,fb:11,Rd:11,Pa:12,eb:13,pc:14,ld:15,Zb:16,oc:17,Sd:18,Fa:19,hb:20,yc:21,ja:22,Sc:23,Kc:24,qd:25,Od:26,qc:27,gd:28,Gd:29,Cd:30,Lc:31,wd:32,lc:33,jb:34,bd:42,tc:43,cc:44,Ac:45,Bc:46,Cc:47,Ic:48,Pd:49,Vc:50,zc:51,ic:35,Yc:37,Sb:52,Vb:53,Td:54,Tc:55,Wb:56,Xb:57,jc:35,Yb:59,jd:60,Wc:61,Ld:62,hd:63,cd:64,dd:65,Bd:66,Zc:67,Pb:68,Id:69,dc:70,xd:71,Nc:72,mc:73,Ub:74,rd:76,Tb:77,Ad:78,Dc:79,Ec:80,Hc:81,Gc:82,Fc:83,kd:38,Qa:39,Oc:36,\nJc:40,sd:95,vd:96,hc:104,Uc:105,Qb:97,zd:91,od:88,ed:92,Ed:108,fc:111,Nb:98,ec:103,Rc:101,Pc:100,Md:110,rc:112,sc:113,vc:115,Rb:114,kc:89,Mc:90,yd:93,Fd:94,Ob:99,Qc:102,xc:106,md:107,Nd:109,Qd:87,nc:122,Jd:116,pd:95,$c:123,uc:84,td:75,$b:125,nd:131,ud:130,Kd:86},Lc={};\nfunction Mc(a,b,c){try{var d=a(b)}catch(e){if(e&&e.node&&qb(b)!==qb(Nb(e.node)))return-K.hb;throw e;}D[c>>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var V=0;\nfunction W(){V+=4;return D[V-4>>2]}function X(){return F(W())}function Y(){var a=P[W()];if(!a)throw new J(K.Na);return a}function Nc(a,b){V=b;return 0}function Ha(){return l.length}\nfunction Oc(a){try{var b=new ArrayBuffer(a);if(b.byteLength!=a)return!1;(new Int8Array(b)).set(l)}catch(c){return!1}f._emscripten_replace_memory(b);l=new Int8Array(b);Ka=new Int16Array(b);D=new Int32Array(b);E=new Uint8Array(b);new Uint16Array(b);new Uint32Array(b);La=new Float32Array(b);Ma=new Float64Array(b);return buffer=b}\nfunction Ia(a){if(2130706432<a)return!1;for(var b=Math.max(Ha(),16777216);b<a;)536870912>=b?b=Za(2*b):b=Math.min(Za((3*b+2147483648)/4),2130706432);a=Oc(b);if(!a||a.byteLength!=b)return!1;$a();return!0}function Pc(a){if(0===a)return 0;a=F(a);if(!I.hasOwnProperty(a))return 0;Pc.pa&&fa(Pc.pa);a=I[a];var b=oa(a)+1,c=Wa(b);c&&r(a,l,c,b);Pc.pa=c;return Pc.pa}function Qc(a){return Math.log(a)/Math.LN10}r(\"GMT\",E,60384,4);\nfunction Rc(){function a(a){return(a=a.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?a[1]:\"GMT\"}if(!Rc.pa){Rc.pa=!0;D[Sc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Tc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ca(ba(d));e=ca(ba(e));c.getTimezoneOffset()<b.getTimezoneOffset()?(D[Uc()>>2]=d,D[Uc()+4>>2]=e):(D[Uc()>>2]=e,D[Uc()+4>>2]=d)}}\nfunction Vc(a,b){Rc();a=new Date(1E3*D[a>>2]);D[b>>2]=a.getSeconds();D[b+4>>2]=a.getMinutes();D[b+8>>2]=a.getHours();D[b+12>>2]=a.getDate();D[b+16>>2]=a.getMonth();D[b+20>>2]=a.getFullYear()-1900;D[b+24>>2]=a.getDay();var c=new Date(a.getFullYear(),0,1);D[b+28>>2]=(a.getTime()-c.getTime())/864E5|0;D[b+36>>2]=-(60*a.getTimezoneOffset());var d=(new Date(2E3,6,1)).getTimezoneOffset();c=c.getTimezoneOffset();a=(d!=c&&a.getTimezoneOffset()==Math.min(c,d))|0;D[b+32>>2]=a;a=D[Uc()+(a?4:0)>>2];D[b+40>>2]=\na;return b}function Wc(a){a/=1E3;if((ya||x)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b<a;);else for(b=Date.now();Date.now()-b<a;);return 0}f._usleep=Wc;Hc();Q=Array(4096);$b(L,\"/\");T(\"/tmp\");T(\"/home\");T(\"/home/web_user\");\n(function(){T(\"/dev\");Ab(259,{read:function(){return 0},write:function(a,b,c,k){return k}});ac(\"/dev/null\",259);zb(1280,Cb);zb(1536,Db);ac(\"/dev/tty\",1280);ac(\"/dev/tty1\",1536);if(\"object\"===typeof crypto&&\"function\"===typeof crypto.getRandomValues){var a=new Uint8Array(1);var b=function(){crypto.getRandomValues(a);return a[0]}}else if(y)try{var c=require(\"crypto\");b=function(){return c.randomBytes(1)[0]}}catch(d){}b||(b=function(){C(\"random_device\")});Jc(\"random\",b);Jc(\"urandom\",b);T(\"/dev/shm\");\nT(\"/dev/shm/tmp\")})();T(\"/proc\");T(\"/proc/self\");T(\"/proc/self/fd\");$b({ka:function(){var a=Fb(\"/proc/self\",\"fd\",16895,73);a.ba={lookup:function(a,c){var b=P[+c];if(!b)throw new J(9);a={parent:null,ka:{bb:\"fake\"},ba:{readlink:function(){return b.path}}};return a.parent=a}};return a}},\"/proc/self/fd\");if(y){var fs=require(\"fs\"),Hb=require(\"path\");O.Eb()}var Xc=!1;function ba(a,b){var c=Array(oa(a)+1);a=r(a,c,0,c.length);b&&(c.length=a);return c}\nfunction Ca(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];255<d&&(Xc&&assert(!1,\"Character code \"+d+\" (\"+String.fromCharCode(d)+\")  at offset \"+c+\" not in 0x00-0xFF.\"),d&=255);b.push(String.fromCharCode(d))}return b.join(\"\")}\nvar Yc=\"function\"===typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var k=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|g>>2;var n=(g&3)<<6|k;b+=String.fromCharCode(d);64!==g&&(b+=String.fromCharCode(e));64!==k&&(b+=String.fromCharCode(n))}while(c<a.length);return b};\nfunction B(a){if(String.prototype.startsWith?a.startsWith(kb):0===a.indexOf(kb)){a=a.slice(kb.length);if(\"boolean\"===typeof y&&y){try{var b=Buffer.from(a,\"base64\")}catch(g){b=new Buffer(a,\"base64\")}var c=new Uint8Array(b.buffer,b.byteOffset,b.byteLength)}else try{var d=Yc(a),e=new Uint8Array(d.length);for(b=0;b<d.length;++b)e[b]=d.charCodeAt(b);c=e}catch(g){throw Error(\"Converting base64 string to bytes failed.\");}return c}}\nvar Zc={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Float32Array:Float32Array,Float64Array:Float64Array,Infinity:Infinity},bd={a:C,b:function(a){Ja=a},c:function(){return Ja},d:function(a){return t[a]()},e:function(a,b){return t[a](b)},f:function(a,b,c){return t[a](b,c)},g:function(a,b,c,d){return t[a](b,c,d)},h:function(a,b,c,d,e){return t[a](b,c,d,e)},i:function(a,b,c,d,e,g){return t[a](b,c,d,e,g)},j:function(a,b,c,d,e,\ng,k){return t[a](b,c,d,e,g,k)},k:function(a,b){t[a](b)},l:function(a,b,c){t[a](b,c)},m:function(a,b,c,d){t[a](b,c,d)},n:function(a,b,c,d,e){t[a](b,c,d,e)},o:function(a,b,c,d,e,g,k){t[a](b,c,d,e,g,k)},p:function(a,b,c,d){C(\"Assertion failed: \"+F(a)+\", at: \"+[b?F(b):\"unknown filename\",c,d?F(d):\"unknown function\"])},q:mb,r:nb,s:function(a,b){V=b;try{var c=X();ua(c);return 0}catch(d){return\"undefined\"!==typeof U&&d instanceof J||C(d),-d.fa}},t:function(a,b){V=b;try{return Y(),0}catch(c){return\"undefined\"!==\ntypeof U&&c instanceof J||C(c),-c.fa}},u:function(a,b){V=b;try{var c=Y();W();var d=W(),e=W(),g=W();Gc(c,d,g);D[e>>2]=c.position;c.Ja&&0===d&&0===g&&(c.Ja=null);return 0}catch(k){return\"undefined\"!==typeof U&&k instanceof J||C(k),-k.fa}},v:function(a,b){V=b;try{var c=X(),d=W();ka(c,d);return 0}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},w:function(a,b){V=b;try{var c=W(),d=W();if(0===d)return-K.ja;if(d<oa(\"/\")+1)return-K.jb;r(\"/\",E,c,d);return c}catch(e){return\"undefined\"!==\ntypeof U&&e instanceof J||C(e),-e.fa}},x:function(a,b){V=b;try{var c=W(),d=W(),e=W(),g=W(),k=W(),n=W();n<<=12;a=!1;if(-1===k){var v=$c(16384,d);if(!v)return-K.Pa;ad(v,0,d);a=!0}else{var A=P[k];if(!A)return-K.Na;b=E;if(1===(A.flags&2097155))throw new J(13);if(!A.ea.Ca)throw new J(19);var ha=A.ea.Ca(A,b,c,d,n,e,g);v=ha.Bb;a=ha.Ga}Lc[v]={zb:v,yb:d,Ga:a,fd:k,flags:g};return v}catch(da){return\"undefined\"!==typeof U&&da instanceof J||C(da),-da.fa}},y:function(a,b){V=b;try{var c=W();W();var d=W();W();var e=\nP[c];if(!e)throw new J(9);if(0===(e.flags&2097155))throw new J(22);ec(e.node,d);return 0}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},z:function(a,b){V=b;try{var c=X(),d=W();return Mc(sa,c,d)}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},A:function(a,b){V=b;try{var c=X(),d=W();return Mc(cc,c,d)}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},B:function(a,b){V=b;try{var c=Y(),d=W();return Mc(sa,c.path,d)}catch(e){return\"undefined\"!==\ntypeof U&&e instanceof J||C(e),-e.fa}},C:function(a,b){V=b;return 42},D:function(a,b){return Nc(a,b)},E:Nc,F:function(a,b){V=b;try{var c=W();W();W();var d=P[c];if(!d)throw new J(9);dc(d.node);return 0}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},G:function(a,b){V=b;try{var c=X();W();W();dc(c);return 0}catch(d){return\"undefined\"!==typeof U&&d instanceof J||C(d),-d.fa}},H:function(a,b){V=b;try{var c=Y();switch(W()){case 0:var d=W();return 0>d?-K.ja:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0;\ncase 3:return c.flags;case 4:return d=W(),c.flags|=d,0;case 12:return d=W(),Ka[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-K.ja;case 9:return nb(K.ja),-1;default:return-K.ja}}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},I:function(a,b){V=b;try{var c=Y(),d=W(),e=W();return ta(c,l,d,e)}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},J:function(a,b){V=b;try{var c=X();var d=W();if(d&-8)var e=-K.ja;else{var g=S(c,{ta:!0}).node;a=\"\";d&4&&(a+=\"r\");\nd&2&&(a+=\"w\");d&1&&(a+=\"x\");e=a&&Rb(g,a)?-K.eb:0}return e}catch(k){return\"undefined\"!==typeof U&&k instanceof J||C(k),-k.fa}},K:function(a,b){V=b;try{var c=X(),d=W();a=c;a=qb(a);\"/\"===a[a.length-1]&&(a=a.substr(0,a.length-1));T(a,d);return 0}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},L:function(a,b){V=b;try{var c=Y(),d=W(),e=W();return la(c,l,d,e)}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},M:function(a,b){V=b;try{var c=X(),d=S(c,{parent:!0}).node,\ne=sb(c),g=N(d,e),k=Wb(d,e,!0);if(k)throw new J(k);if(!d.ba.rmdir)throw new J(1);if(g.ua)throw new J(16);try{R.willDeletePath&&R.willDeletePath(c)}catch(n){console.log(\"FS.trackingDelegate['willDeletePath']('\"+c+\"') threw an exception: \"+n.message)}d.ba.rmdir(d,e);Qb(g);try{if(R.onDeletePath)R.onDeletePath(c)}catch(n){console.log(\"FS.trackingDelegate['onDeletePath']('\"+c+\"') threw an exception: \"+n.message)}return 0}catch(n){return\"undefined\"!==typeof U&&n instanceof J||C(n),-n.fa}},N:function(a,b){V=\nb;try{var c=X(),d=W(),e=W();return p(c,d,e).fd}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},O:function(a,b){V=b;try{var c=Y();ma(c);return 0}catch(d){return\"undefined\"!==typeof U&&d instanceof J||C(d),-d.fa}},P:function(a,b){V=b;try{var c=X(),d=W();var e=W();if(0>=e)var g=-K.ja;else{var k=Mb(c),n=Math.min(e,oa(k)),v=l[d+n];r(k,E,d,e+1);l[d+n]=v;g=n}return g}catch(A){return\"undefined\"!==typeof U&&A instanceof J||C(A),-A.fa}},Q:function(a,b){V=b;try{var c=W(),d=W(),e=Lc[c];if(!e)return 0;\nif(d===e.yb){var g=P[e.fd],k=e.flags,n=new Uint8Array(E.subarray(c,c+d));g&&g.ea.Da&&g.ea.Da(g,n,0,d,k);Lc[c]=null;e.Ga&&fa(e.zb)}return 0}catch(v){return\"undefined\"!==typeof U&&v instanceof J||C(v),-v.fa}},R:function(a,b){V=b;try{var c=W(),d=W(),e=P[c];if(!e)throw new J(9);ka(e.node,d);return 0}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},S:Ha,T:function(a,b,c){E.set(E.subarray(b,b+c),a)},U:Ia,V:Pc,W:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0},\nX:Qc,Y:function(a){return Qc(a)},Z:function(){C(\"trap!\")},_:function(a){return Vc(a,60336)},$:Vc,aa:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Wc(1E6*c+a/1E3)},ab:function(a){switch(a){case 30:return 16384;case 85:return 130048;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;\ncase 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;\ncase 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return\"object\"===typeof navigator?navigator.hardwareConcurrency||1:1}nb(22);return-1},\nac:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},ad:Rc,ae:Wc,af:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=F(a);try{b=c;var d=S(a,{ta:!0}).node;d.ba.ia(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof J)){a+=\" : \";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d=\"(no stack trace available)\";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+=\"\\n\"+f.extraStackTrace());d=Ya(d);throw a+d;}nb(a.fa);return-1}},\nag:function(){C(\"OOM\")},ah:Oc,ai:60480,aj:Ga};// EMSCRIPTEN_START_ASM\nvar Z=(/** @suppress {uselessCode} */ function(global,env,buffer) {\n\"almost asm\";var a=new global.Int8Array(buffer),b=new global.Int16Array(buffer),c=new global.Int32Array(buffer),d=new global.Uint8Array(buffer),e=new global.Uint16Array(buffer),f=new global.Float32Array(buffer),g=new global.Float64Array(buffer),h=env.ai|0,i=env.aj|0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=global.Infinity,s=global.Math.floor,t=global.Math.abs,u=global.Math.sqrt,v=global.Math.pow,w=global.Math.cos,x=global.Math.sin,y=global.Math.tan,z=global.Math.acos,A=global.Math.asin,B=global.Math.atan,C=global.Math.atan2,D=global.Math.exp,E=global.Math.log,F=global.Math.ceil,G=global.Math.imul,H=global.Math.min,I=global.Math.clz32,J=env.a,K=env.b,L=env.c,M=env.d,N=env.e,O=env.f,P=env.g,Q=env.h,R=env.i,S=env.j,T=env.k,U=env.l,V=env.m,W=env.n,X=env.o,Y=env.p,Z=env.q,_=env.r,$=env.s,aa=env.t,ba=env.u,ca=env.v,da=env.w,ea=env.x,fa=env.y,ga=env.z,ha=env.A,ia=env.B,ja=env.C,ka=env.D,la=env.E,ma=env.F,na=env.G,oa=env.H,pa=env.I,qa=env.J,ra=env.K,sa=env.L,ta=env.M,ua=env.N,va=env.O,wa=env.P,xa=env.Q,ya=env.R,za=env.S,Aa=env.T,Ba=env.U,Ca=env.V,Da=env.W,Ea=env.X,Fa=env.Y,Ga=env.Z,Ha=env._,Ia=env.$,Ja=env.aa,Ka=env.ab,La=env.ac,Ma=env.ad,Na=env.ae,Oa=env.af,Pa=env.ag,Qa=env.ah,Ra=60496,Sa=5303376,Ta=0.0;function Ua(newBuffer){a=new Int8Array(newBuffer);d=new Uint8Array(newBuffer);b=new Int16Array(newBuffer);e=new Uint16Array(newBuffer);c=new Int32Array(newBuffer);f=new Float32Array(newBuffer);g=new Float64Array(newBuffer);buffer=newBuffer;return true}\n// EMSCRIPTEN_START_FUNCS\nfunction Rg(f){f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,$a=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Eb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,ad=0,bd=0,cd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Od=0,Pd=0,Qd=0,Rd=0,Td=0,Ud=0,Vd=0,Wd=0,Yd=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Ef=0,Ff=0,Gf=0,Hf=0;Hf=Ra;Ra=Ra+864|0;nf=Hf+848|0;yf=Hf+840|0;Be=Hf+832|0;Gf=Hf+816|0;Ff=Hf+800|0;Ef=Hf+792|0;ze=Hf+784|0;ye=Hf+776|0;xe=Hf+768|0;we=Hf+760|0;ve=Hf+752|0;ue=Hf+736|0;te=Hf+728|0;bf=Hf+720|0;Ye=Hf+712|0;Xe=Hf+704|0;We=Hf+696|0;Ue=Hf+688|0;Te=Hf+664|0;Se=Hf+656|0;Re=Hf+648|0;Qe=Hf+640|0;Oe=Hf+624|0;Ne=Hf+608|0;Me=Hf+592|0;Le=Hf+576|0;Ke=Hf+560|0;Je=Hf+544|0;ef=Hf+536|0;df=Hf+528|0;cf=Hf+520|0;Ie=Hf+512|0;He=Hf+504|0;Ge=Hf+496|0;Fe=Hf+488|0;Ee=Hf+472|0;De=Hf+456|0;Ce=Hf+440|0;Ae=Hf+432|0;lf=Hf+416|0;gf=Hf+408|0;kf=Hf+400|0;ff=Hf+392|0;rf=Hf+352|0;Hd=Hf+112|0;Td=Hf+280|0;Yd=Hf;ee=Hf+272|0;je=Hf+852|0;le=f+104|0;q=c[le>>2]|0;Cf=c[f>>2]|0;sd=a[Cf+78>>0]|0;xd=f+88|0;o=c[xd>>2]|0;i=c[f+156>>2]|0;if(i|0?(k=c[Cf+16>>2]|0,l=c[Cf+20>>2]|0,(l|0)>0):0){h=0;do{if(((h|0)!=1?1<<h&i|0:0)?(m=c[k+(h<<4)+4>>2]|0,m|0):0)c[(c[m+4>>2]|0)+4>>2]=c[m>>2];h=h+1|0}while((h|0)!=(l|0))}Af=Cf+320|0;if(!(c[Af>>2]|0))h=-1;else{h=c[Cf+328>>2]|0;h=h-(((c[f+176>>2]|0)>>>0)%(h>>>0)|0)|0}Bf=f+40|0;a:do if((c[Bf>>2]|0)==7){l=q;n=0;k=0;m=q;j=h;i=Cf+81|0;oa=3892}else{Zc=f+56|0;c[Zc>>2]=0;c[Zc+4>>2]=0;Zc=f+120|0;c[Zc>>2]=0;c[Cf+404>>2]=0;lc=Cf+264|0;b:do if(!(c[lc>>2]|0)){xf=f+36|0;mc=f+100|0;qf=Cf+88|0;nc=f+196|0;oc=f+96|0;pc=f+147|0;uf=Cf+16|0;vf=f+149|0;qc=rf+8|0;rc=f+44|0;sc=Cf+100|0;tc=Cf+104|0;uc=f+168|0;vc=Hd+8|0;wc=Hd+10|0;xc=Hd+4|0;zc=Hd+8|0;Ac=Hd+10|0;Bc=Hd+4|0;Cc=Cf+90|0;Dc=Td+4|0;Ec=Td+12|0;Fc=Td+16|0;Gc=Td+20|0;Hc=Td+24|0;Ic=Td+28|0;Jc=Td+8|0;Kc=Td+64|0;Lc=Td+40|0;Mc=Td+44|0;Nc=Td+48|0;Oc=Td+52|0;Pc=Td+56|0;Qc=Td+60|0;Rc=Td+61|0;Sc=Cf+32|0;$c=Cf+272|0;Tc=rf+8|0;Uc=rf+4|0;mf=f+124|0;Vc=Cf+332|0;Wc=rf+32|0;sa=rf+8|0;ad=Cf+184|0;ta=f+92|0;zf=Cf+81|0;ua=f+32|0;bd=Cf+176|0;qd=Cf+444|0;va=f+24|0;wa=Yd+8|0;xa=Yd+10|0;ya=Yd+4|0;za=Yd+14|0;Aa=Hd+8|0;Ba=Hd+4|0;Ca=Cf+232|0;Da=Cf+108|0;Ea=rf+8|0;Fa=rf+32|0;Ga=rf+24|0;Ha=Cf+172|0;hf=Cf+24|0;Ia=rf+8|0;Ja=rf+4|0;Ka=rf+16|0;Ze=Cf+480|0;La=f+204|0;Ma=Cf+148|0;Na=Cf+472|0;Oa=f+64|0;Pa=Cf+464|0;Xc=Cf+276|0;Qa=rf+12|0;Sa=Hd+8|0;Ta=Hd+32|0;Ua=rf+8|0;Va=rf+4|0;$a=Cf+4|0;db=Cf+356|0;fb=Cf+328|0;gb=Cf+324|0;hb=sd<<24>>24==1;ib=f+184|0;_e=Cf+304|0;$e=Cf+308|0;af=Cf+300|0;jb=Hd+8|0;kb=Hd+32|0;lb=Hd+24|0;mb=rf+16|0;nb=rf+12|0;ob=Cf+165|0;pb=rf+12|0;qb=rf+20|0;Yc=Cf+288|0;rb=rf+20|0;tb=rf+8|0;ub=rf+4|0;vb=rf+20|0;wb=f+108|0;hd=f+188|0;Fd=Cf+456|0;Gd=Cf+452|0;xb=rf+16|0;yb=rf+28|0;zb=Cf+40|0;Ab=Hd+8|0;Bb=Hd+20|0;Cb=Hd+24|0;Eb=Hd+16|0;Gb=Hd+12|0;Hb=f+216|0;Ib=f+28|0;cd=Cf+296|0;ed=Cf+284|0;Jb=rf+10|0;Kb=rf+20|0;Lb=Cf+180|0;of=Cf+196|0;pf=Cf+200|0;Mb=rf+8|0;Nb=rf+8|0;fd=Cf+292|0;Ob=rf+16|0;Pb=Cf+348|0;Qb=rf+24|0;Rb=Cf+86|0;gd=Cf+79|0;Sb=rf+32|0;Tb=Cf+228|0;Ub=rf+8|0;Vb=Cf+344|0;Wb=Cf+340|0;Xb=rf+12|0;Yb=Hd+16|0;_b=Hd+8|0;ac=Hd+12|0;bc=f+48|0;ra=Cf+80|0;cc=rf+8|0;dc=Cf+336|0;ec=rf+20|0;Id=Cf+87|0;fc=Hd+24|0;sf=Cf+20|0;jf=Cf+56|0;gc=f+72|0;hc=f+80|0;ic=rf+8|0;Jd=f+146|0;jc=Cf+8|0;kc=rf+4|0;m=q;p=q+((c[xf>>2]|0)*20|0)|0;K=0;k=0;qa=0;n=0;pa=o;c:while(1){n=n+1|0;z=a[p>>0]|0;d:do switch(z<<24>>24){case 81:{oa=153;break c}case 1:{oa=922;break c}case 11:{i=K;oa=20;break}case 12:{i=c[p+4>>2]|0;b[pa+(i*40|0)+8>>1]=4;oa=(p-m|0)/20|0;i=pa+(i*40|0)|0;c[i>>2]=oa;c[i+4>>2]=((oa|0)<0)<<31>>31;i=K;oa=28;break}case 66:{l=c[p+4>>2]|0;p=m+((c[pa+(l*40|0)>>2]|0)*20|0)|0;b[pa+(l*40|0)+8>>1]=128;l=m;q=pa;o=qa;i=K;break}case 13:{na=c[p+4>>2]|0;la=(c[p+12>>2]|0)+-1|0;ma=pa+(na*40|0)|0;c[ma>>2]=la;c[ma+4>>2]=((la|0)<0)<<31>>31;b[pa+(na*40|0)+8>>1]=4;if(!(c[p+8>>2]|0)){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 67:{l=c[p+4>>2]|0;p=m+(((c[m+((c[pa+(l*40|0)>>2]|0)*20|0)+8>>2]|0)+-1|0)*20|0)|0;b[pa+(l*40|0)+8>>1]=128;l=m;q=pa;o=qa;i=K;break}case 14:{l=c[p+4>>2]|0;b[pa+(l*40|0)+8>>1]=4;l=pa+(l*40|0)|0;i=c[l>>2]|0;q=(p-m|0)/20|0;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;p=m+(i*20|0)|0;i=K;break}case 68:{if(!(b[pa+((c[p+12>>2]|0)*40|0)+8>>1]&1)){l=m;q=pa;o=qa;i=K}else oa=34;break}case 69:{oa=34;break}case 70:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;q=c[p+4>>2]|0;l=i;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 71:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=c[p+16>>2]|0;q=c[o+4>>2]|0;l=i;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case -111:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;b[i+8>>1]=8;g[i>>3]=+g[c[p+16>>2]>>3];l=m;q=pa;o=qa;i=K;break}case 110:{oa=c[xd>>2]|0;s=p+8|0;l=c[s>>2]|0;i=oa+(l*40|0)|0;l=oa+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;a[p>>0]=72;q=p+16|0;o=c[q>>2]|0;if(!o)l=0;else l=(Eu(o)|0)&1073741823;r=p+4|0;c[r>>2]=l;if(hb)i=K;else{if(yc(i,o,-1,1,0)|0){oa=3891;break c}o=i+8|0;l=b[o>>1]|0;if((l&2)!=0?(a[i+10>>0]|0)!=sd<<24>>24:0){if(Ig(i,sd)|0){l=p;j=h;i=zf;oa=3892;break a}l=b[o>>1]|0}c[i+24>>2]=0;b[o>>1]=l|2048;l=p+1|0;e:do if((a[l>>0]|0)==-7?(ae=c[q>>2]|0,ae|0):0){if(c[Ze>>2]|0){Xd(Cf,ae);break}o=ae;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;c[ae>>2]=c[af>>2];c[af>>2]=ae;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](ae);break}else{oa=Wa[c[29352>>2]&127](ae)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ae);break}}while(0);a[l>>0]=-7;c[q>>2]=c[i+16>>2];l=c[i+12>>2]|0;c[r>>2]=l;i=0}if((l|0)>(c[Da>>2]|0)){oa=3891;break c}else{l=s;oa=83}break}case 72:{l=p+8|0;i=K;oa=83;break}case 73:{o=c[xd>>2]|0;q=p+8|0;i=c[q>>2]|0;l=o+(i*40|0)|0;o=o+(i*40|0)+8|0;if(!(b[o>>1]&9216))b[o>>1]=4;else{lh(l)|0;i=c[q>>2]|0}i=(c[p+12>>2]|0)-i|0;r=(c[p+4>>2]|0)==0?1:257;b[l+8>>1]=r;c[l+12>>2]=0;if((i|0)>0)while(1){o=l;l=l+40|0;q=o+48|0;if(!(b[q>>1]&9216))b[q>>1]=1;else Dg(l);b[q>>1]=r;c[o+52>>2]=0;if((i|0)<=1){l=m;q=pa;o=qa;i=K;break}else i=i+-1|0}else{l=m;q=pa;o=qa;i=K}break}case 74:{l=pa+((c[p+4>>2]|0)*40|0)+8|0;b[l>>1]=b[l>>1]&-160|1;l=m;q=pa;o=qa;i=K;break}case 75:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;yc(i,c[p+16>>2]|0,c[p+4>>2]|0,0,0)|0;a[i+10>>0]=sd;l=m;q=pa;o=qa;i=K;break}case 76:{o=c[mc>>2]|0;q=(c[p+4>>2]|0)+-1|0;r=o+(q*40|0)|0;l=e[o+(q*40|0)+8>>1]|0;if(l&18|0){i=c[o+(q*40|0)+12>>2]|0;if(l&16384)i=(c[r>>2]|0)+i|0;if((i|0)>(c[(c[o+(q*40|0)+32>>2]|0)+108>>2]|0)){oa=3891;break c}}l=c[p+8>>2]|0;i=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(b[l>>1]&9216)Dg(i);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];c[i+16>>2]=c[r+16>>2];b[l>>1]=b[l>>1]&-7201|2080;l=m;q=pa;o=qa;i=K;break}case 77:{q=pa+((c[p+4>>2]|0)*40|0)|0;r=c[p+12>>2]|0;s=pa+((c[p+8>>2]|0)*40|0)|0;while(1){t=s+8|0;if(!((b[t>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);ea=s;l=q;fa=ea+40|0;do{c[ea>>2]=c[l>>2];ea=ea+4|0;l=l+4|0}while((ea|0)<(fa|0));b[q+8>>1]=1;c[q+24>>2]=0;i=b[t>>1]|0;if(i&4096){l=i&65535;do if(l&18){do if(l&16384){o=s+12|0;l=(c[s>>2]|0)+(c[o>>2]|0)|0;if((l|0)<1)if(!(i&16))break;else i=1;else i=l;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[o>>2]|0)|0,0,c[s>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+(c[s>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}while(0);b[t>>1]=i&-4097}r=r+-1|0;if(!r){l=m;q=pa;o=qa;i=K;break}else{q=q+40|0;s=s+40|0}}break}case 78:{q=c[p+12>>2]|0;r=pa+((c[p+4>>2]|0)*40|0)|0;s=pa+((c[p+8>>2]|0)*40|0)|0;while(1){t=s+8|0;if(!(b[t>>1]&9216)){c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];c[s+16>>2]=c[r+16>>2];if(!(b[r+8>>1]&2048))b[t>>1]=b[t>>1]&-7169|4096}else mh(s,r,4096);i=b[t>>1]|0;if(i&4096){l=i&65535;do if(l&18){do if(l&16384){o=s+12|0;l=(c[s>>2]|0)+(c[o>>2]|0)|0;if((l|0)<1)if(!(i&16))break;else i=1;else i=l;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[o>>2]|0)|0,0,c[s>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+(c[s>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}while(0);b[t>>1]=i&-4097}if(!q){l=m;q=pa;o=qa;i=K;break d}q=q+-1|0;r=r+40|0;s=s+40|0}}case 79:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;q=c[p+8>>2]|0;o=pa+(q*40|0)|0;q=pa+(q*40|0)+8|0;if(b[q>>1]&9216){mh(o,l,4096);l=m;q=pa;o=qa;i=K;break d};c[o>>2]=c[l>>2];c[o+4>>2]=c[l+4>>2];c[o+8>>2]=c[l+8>>2];c[o+12>>2]=c[l+12>>2];c[o+16>>2]=c[l+16>>2];if(!(b[pa+(i*40|0)+8>>1]&2048)){b[q>>1]=b[q>>1]&-7169|4096;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 80:{q=c[p+8>>2]|0;i=pa+(q*40|0)|0;o=pa+((c[p+4>>2]|0)*40|0)|0;l=c[o>>2]|0;o=c[o+4>>2]|0;q=pa+(q*40|0)+8|0;if(!(b[q>>1]&9216)){c[i>>2]=l;c[i+4>>2]=o;b[q>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(i,l,o);l=m;q=pa;o=qa;i=K;break d}}case 105:{z=c[p+4>>2]|0;s=pa+(z*40|0)|0;x=c[p+8>>2]|0;w=pa+(x*40|0)|0;A=c[p+12>>2]|0;y=pa+(A*40|0)|0;r=pa+(z*40|0)+8|0;l=b[r>>1]|0;t=pa+(x*40|0)+8|0;i=b[t>>1]|0;if((i|l)&1){i=pa+(A*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(y);l=m;q=pa;o=qa;i=K;break d}}do if(l&16384){q=pa+(z*40|0)+12|0;o=(c[s>>2]|0)+(c[q>>2]|0)|0;if((o|0)<1)if(!(l&16))break;else i=1;else i=o;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[pa+(z*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[s>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[s>>2]|0);l=b[r>>1]&-16897;b[r>>1]=l;i=b[t>>1]|0}while(0);do if(i&16384){q=pa+(x*40|0)+12|0;o=(c[w>>2]|0)+(c[q>>2]|0)|0;if((o|0)<1)if(!(i&16))break;else i=1;else i=o;if(Eg(w,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[pa+(x*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[w>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i;l=b[r>>1]|0}while(0);if(!(l&18)){if(Hg(s,sd,0)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}if((i&18)==0?Hg(w,sd,0)|0:0){l=p;j=h;i=zf;oa=3892;break a}q=pa+(z*40|0)+12|0;r=pa+(x*40|0)+12|0;s=(c[r>>2]|0)+(c[q>>2]|0)|0;if((s|0)>(c[Da>>2]|0)){oa=3891;break c}l=(A|0)==(x|0);if(Eg(y,s+2|0,l&1)|0){l=p;j=h;i=zf;oa=3892;break a}o=pa+(A*40|0)+8|0;b[o>>1]=b[o>>1]&15904|2;i=pa+(x*40|0)+16|0;if(!l){na=pa+(A*40|0)+16|0;ew(c[na>>2]|0,c[i>>2]|0,c[r>>2]|0)|0;i=na}ew((c[i>>2]|0)+(c[r>>2]|0)|0,c[pa+(z*40|0)+16>>2]|0,c[q>>2]|0)|0;a[(c[i>>2]|0)+s>>0]=0;a[(c[i>>2]|0)+(s+1)>>0]=0;b[o>>1]=b[o>>1]|512;c[pa+(A*40|0)+12>>2]=s;a[pa+(A*40|0)+10>>0]=sd;l=m;q=pa;o=qa;i=K;break}case 104:case 103:case 102:case 101:case 100:{s=c[p+4>>2]|0;t=pa+(s*40|0)|0;r=pa+(s*40|0)+8|0;i=e[r>>1]|0;l=i&12;if(!l)if(!(i&18))B=0;else B=nh(t)|0;else B=l&65535;x=c[p+8>>2]|0;y=pa+(x*40|0)|0;w=pa+(x*40|0)+8|0;i=e[w>>1]|0;l=i&12;if(!l)if(!(i&18))A=0;else A=nh(y)|0;else A=l&65535;C=c[p+12>>2]|0;D=pa+(C*40|0)|0;f:do if(!((B&4&A)<<16>>16)){if(!((b[w>>1]|b[r>>1])&1)){z=0;oa=245}}else{i=t;o=c[i>>2]|0;i=c[i+4>>2]|0;q=y;l=c[q>>2]|0;q=c[q+4>>2]|0;g:do switch(a[p>>0]|0){case 100:{if((i|0)>-1|(i|0)==-1&o>>>0>4294967295){na=Tv(-1,2147483647,l|0,q|0)|0;ma=L()|0;if(((q|0)>0|(q|0)==0&l>>>0>0)&((ma|0)<(i|0)|(ma|0)==(i|0)&na>>>0<o>>>0)){z=1;oa=245;break f}}else if((q|0)<0?(ma=Tv(1,-2147483648,l|0,q|0)|0,ka=L()|0,na=Sv(o|0,i|0,1,0)|0,la=L()|0,(ka|0)>(la|0)|(ka|0)==(la|0)&ma>>>0>na>>>0):0){z=1;oa=245;break f}l=Sv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 101:{if((o|0)==0&(i|0)==-2147483648)if((q|0)>-1|(q|0)==-1&l>>>0>4294967295){z=1;oa=245;break f}else{i=q^-2147483648;break g}if((i|0)<0|(i|0)==0&o>>>0<1){na=Tv(0,0,o|0,i|0)|0;la=L()|0;ma=Tv(-1,2147483647,l|0,q|0)|0;ka=L()|0;if(((q|0)>0|(q|0)==0&l>>>0>0)&((ka|0)<(la|0)|(ka|0)==(la|0)&ma>>>0<na>>>0)){z=1;oa=245;break f}}else if((q|0)<0?(ma=Tv(1,-2147483648,l|0,q|0)|0,ka=L()|0,na=Tv(1,0,o|0,i|0)|0,la=L()|0,(ka|0)>(la|0)|(ka|0)==(la|0)&ma>>>0>na>>>0):0){z=1;oa=245;break f}l=Tv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 102:{do if((i|0)>0|(i|0)==0&o>>>0>0){na=_v(-1,2147483647,o|0,i|0)|0;ma=L()|0;if((q|0)>(ma|0)|(q|0)==(ma|0)&l>>>0>na>>>0){z=1;oa=245;break f}na=Wv(0,-2147483648,o|0,i|0)|0;ma=L()|0;if((q|0)<(ma|0)|(q|0)==(ma|0)&l>>>0<na>>>0){z=1;oa=245;break f}}else if((i|0)<0){if((q|0)>0|(q|0)==0&l>>>0>0){na=Wv(0,-2147483648,l|0,q|0)|0;ma=L()|0;if((ma|0)>(i|0)|(ma|0)==(i|0)&na>>>0>o>>>0){z=1;oa=245;break f}else break}if((q|0)<0){if((o|0)==0&(i|0)==-2147483648|(l|0)==0&(q|0)==-2147483648){z=1;oa=245;break f}na=Tv(0,0,l|0,q|0)|0;la=L()|0;ma=Tv(0,0,o|0,i|0)|0;ma=Wv(-1,2147483647,ma|0,L()|0)|0;ka=L()|0;if((ka|0)<(la|0)|(ka|0)==(la|0)&ma>>>0<na>>>0){z=1;oa=245;break f}}}while(0);l=Yv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 103:{if((o|0)==0&(i|0)==0)break f;if((o|0)==-1&(i|0)==-1&((l|0)==0&(q|0)==-2147483648)){z=1;oa=245;break f}l=Wv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}default:{switch(o|0){case 0:{if(!i)break f;break}case -1:{if((i|0)==-1){o=1;i=0}break}default:{}}l=Zv(l|0,q|0,o|0,i|0)|0;i=L()|0}}while(0);q=D;c[q>>2]=l;c[q+4>>2]=i;l=pa+(C*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break d}while(0);h:do if((oa|0)==245){oa=0;i=e[r>>1]|0;do if(!(i&8)){if(i&4|0){na=t;v=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(i&18))v=0.0;else v=+Kg(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)}else v=+g[t>>3];while(0);i=e[w>>1]|0;do if(!(i&8)){if(i&4|0){na=y;u=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(i&18))u=0.0;else u=+Kg(a[pa+(x*40|0)+10>>0]|0,c[pa+(x*40|0)+12>>2]|0,c[pa+(x*40|0)+16>>2]|0)}else u=+g[y>>3];while(0);switch(a[p>>0]|0){case 100:{u=v+u;break}case 101:{u=u-v;break}case 102:{u=v*u;break}case 103:{if(v==0.0)break h;u=u/v;break}default:{i=e[r>>1]|0;do if(!(i&4)){if(i&8|0){r=Mg(+g[t>>3])|0;i=L()|0;break}if(!(i&18)){r=0;i=0}else{r=Ng(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)|0;i=L()|0}}else{i=t;r=c[i>>2]|0;i=c[i+4>>2]|0}while(0);l=e[w>>1]|0;do if(!(l&4)){if(l&8|0){o=Mg(+g[y>>3])|0;q=L()|0;break}if(!(l&18)){o=0;q=0}else{o=Ng(a[pa+(x*40|0)+10>>0]|0,c[pa+(x*40|0)+12>>2]|0,c[pa+(x*40|0)+16>>2]|0)|0;q=L()|0}}else{q=y;o=c[q>>2]|0;q=c[q+4>>2]|0}while(0);switch(r|0){case 0:{if(!i)break h;else l=r;break}case -1:{if((i|0)==-1){l=1;i=0}else l=r;break}default:l=r}u=+((Zv(o|0,q|0,l|0,i|0)|0)>>>0)+4294967296.0*+(L()|0)}}g[rf>>3]=u;g[Hd>>3]=+g[rf>>3];if(+g[rf>>3]==+g[Hd>>3]){g[D>>3]=u;o=pa+(C*40|0)+8|0;q=b[o>>1]&15904;b[o>>1]=q|8;if(((A|B)&8)!=0|z<<24>>24!=0){l=m;q=pa;o=qa;i=K;break d}i=Mg(u)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&u==+(i>>>0)+4294967296.0*+(l|0))){l=m;q=pa;o=qa;i=K;break d}na=D;c[na>>2]=i;c[na+4>>2]=l;b[o>>1]=q|4;l=m;q=pa;o=qa;i=K;break d}}while(0);i=pa+(C*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(D);l=m;q=pa;o=qa;i=K;break d}}case 82:{i=c[p+4>>2]|0;if(i){l=pa+(i*40|0)|0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216)){c[l>>2]=0;c[l+4>>2]=0;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(l,0,0);l=m;q=pa;o=qa;i=K;break d}}else{l=m;q=pa;o=qa;i=K}break}case 99:case 98:case 97:case 96:{s=c[p+4>>2]|0;l=c[p+8>>2]|0;w=c[p+12>>2]|0;x=pa+(w*40|0)|0;q=pa+(s*40|0)+8|0;o=b[q>>1]|0;i=b[pa+(l*40|0)+8>>1]|0;if((i|o)&1){i=pa+(w*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(x);l=m;q=pa;o=qa;i=K;break d}}r=pa+(l*40|0)|0;t=pa+(s*40|0)|0;i=i&65535;do if(!(i&4)){if(i&8|0){l=Mg(+g[r>>3])|0;i=L()|0;break}if(!(i&18)){l=0;i=0}else{l=Ng(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0)|0;i=L()|0;o=b[q>>1]|0}}else{i=r;l=c[i>>2]|0;i=c[i+4>>2]|0}while(0);o=o&65535;do if(!(o&4)){if(o&8|0){q=Mg(+g[t>>3])|0;s=L()|0;break}if(!(o&18)){q=0;s=0}else{q=Ng(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)|0;s=L()|0}}else{s=t;q=c[s>>2]|0;s=c[s+4>>2]|0}while(0);o=a[p>>0]|0;i:do switch(o<<24>>24){case 96:{l=q&l;i=s&i;break}case 97:{l=q|l;i=s|i;break}default:if(!((q|0)==0&(s|0)==0)){la=(s|0)<0;ma=(s|0)>-1|(s|0)==-1&q>>>0>4294967232;ka=Tv(0,0,q|0,s|0)|0;na=L()|0;r=la?197-(o&255)&255:o;q=la?(ma?ka:64):q;o=la?(ma?na:0):s;if((o|0)>0|(o|0)==0&q>>>0>63){i=((i|0)<0&r<<24>>24!=98)<<31>>31;l=i;i=((i|0)<0)<<31>>31;break i}if(r<<24>>24==98){l=cw(l|0,i|0,q|0)|0;i=L()|0;break i}else{l=bw(l|0,i|0,q|0)|0;na=L()|0;ma=(i|0)<0;la=Tv(64,0,q|0,o|0)|0;L()|0;la=cw(-1,-1,la|0)|0;i=L()|0;l=(ma?la:0)|l;i=(ma?i:0)|na;break i}}}while(0);q=x;c[q>>2]=l;c[q+4>>2]=i;l=pa+(w*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break}case 83:{i=c[p+4>>2]|0;r=pa+(i*40|0)|0;s=pa+(i*40|0)+8|0;q=b[s>>1]|0;l=q&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[r>>3])|0;o=L()|0;i=q;break}if(!(l&18)){l=0;o=0;i=q}else{l=Ng(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)|0;o=L()|0;i=b[s>>1]|0}}else{o=r;l=c[o>>2]|0;o=c[o+4>>2]|0;i=q}while(0);q=r;c[q>>2]=l;c[q+4>>2]=o;b[s>>1]=i&15904|4;q=c[p+8>>2]|0;o=Sv(l|0,o|0,q|0,((q|0)<0)<<31>>31|0)|0;q=L()|0;l=r;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case 15:{q=c[p+4>>2]|0;s=pa+(q*40|0)+8|0;i=b[s>>1]|0;if(!(i&4)){r=pa+(q*40|0)|0;l=i&65535;do if(!(l&4)){if(l&8|0){v=+g[r>>3];l=Mg(v)|0;o=L()|0;na=Sv(l|0,o|0,1,-2147483648)|0;ma=L()|0;q=i&15904|4;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(l>>>0)+4294967296.0*+(o|0)))break;i=r;c[i>>2]=l;c[i+4>>2]=o;b[s>>1]=q;i=q;break}if(l&2){l=a[pa+(q*40|0)+10>>0]|0;o=pa+(q*40|0)+16|0;i=pa+(q*40|0)+12|0;if(!(Lg(c[o>>2]|0,rf,c[i>>2]|0,l)|0))i=b[s>>1]|0;else{if(Og(c[o>>2]|0,Hd,c[i>>2]|0,l)|0){v=+g[rf>>3];g[r>>3]=v;l=b[s>>1]|0;i=l|8;b[s>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)){i=r;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=334}}else{na=Hd;oa=c[na+4>>2]|0;i=r;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[s>>1]|0;oa=334}if((oa|0)==334){oa=0;i=i|4;b[s>>1]=i}i=i&-3;b[s>>1]=i}}}while(0);if(!(i&4))if(!(c[p+8>>2]|0)){i=20;oa=3855;break c}else{i=K;oa=28;break d}}b[s>>1]=i&15904|4;l=m;q=pa;o=qa;i=K;break}case 84:{l=c[p+4>>2]|0;q=pa+(l*40|0)+8|0;i=b[q>>1]|0;if(!(i&4)){l=m;q=pa;o=qa;i=K}else{r=pa+(l*40|0)|0;o=i&65535;do if(!(o&8)){if(o&4|0){na=r;u=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(o&18))u=0.0;else{u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);i=b[q>>1]|0}}else u=+g[r>>3];while(0);g[r>>3]=u;b[q>>1]=i&15904|8;l=m;q=pa;o=qa;i=K}break}case 85:{o=c[p+4>>2]|0;s=pa+(o*40|0)|0;q=pa+(o*40|0)+8|0;l=b[q>>1]|0;do if(l&16384){r=pa+(o*40|0)+12|0;i=(c[s>>2]|0)+(c[r>>2]|0)|0;if((i|0)<1)if(!(l&16)){i=0;break}else i=1;if(!(Eg(s,i,1)|0)){gw((c[pa+(o*40|0)+16>>2]|0)+(c[r>>2]|0)|0,0,c[s>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[s>>2]|0);b[q>>1]=b[q>>1]&-16897;i=0}else i=7}else i=0;while(0);Sg(s,c[p+8>>2]&255,sd);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 57:case 54:case 55:case 56:case 52:case 53:{s=c[p+4>>2]|0;y=pa+(s*40|0)|0;w=c[p+12>>2]|0;x=pa+(w*40|0)|0;A=pa+(s*40|0)+8|0;i=b[A>>1]|0;B=pa+(w*40|0)+8|0;l=b[B>>1]|0;q=i&65535;t=l&65535;r=(l|i)&65535;C=p+2|0;o=e[C>>1]|0;do if(r&1){if(o&128|0){if(!((i&1&l)<<16>>16!=0&(t&256|0)==0)){r=(t<<1&2^2)+-1|0;oa=389;break}q=z;o=(z&255)+-52|0;oa=392;break}if(!(o&32))if(!(o&16)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}else{l=pa+((c[p+8>>2]|0)*40|0)+8|0;b[l>>1]=b[l>>1]&15904|1;l=m;q=pa;o=1;i=K;break d}}else{o=o&71;if(o>>>0>66){if(r&2){if((q&14|0)==2){o=a[pa+(s*40|0)+10>>0]|0;q=pa+(s*40|0)+16|0;l=pa+(s*40|0)+12|0;if(Lg(c[q>>2]|0,rf,c[l>>2]|0,o)|0){if(!(Og(c[q>>2]|0,Hd,c[l>>2]|0,o)|0)){na=Hd;oa=c[na+4>>2]|0;l=y;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=4}else{g[y>>3]=+g[rf>>3];l=8}b[A>>1]=b[A>>1]&-3|l}r=b[B>>1]|0}else r=l;if((r&14)==2){o=a[pa+(w*40|0)+10>>0]|0;q=pa+(w*40|0)+16|0;l=pa+(w*40|0)+12|0;if(!(Lg(c[q>>2]|0,rf,c[l>>2]|0,o)|0))l=b[B>>1]|0;else{if(!(Og(c[q>>2]|0,Hd,c[l>>2]|0,o)|0)){na=Hd;oa=c[na+4>>2]|0;l=x;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=4}else{g[x>>3]=+g[rf>>3];l=8}l=b[B>>1]&-3|l;b[B>>1]=l}s=r}else{s=r;l=r}}else s=l;if(!((l&4&b[A>>1])<<16>>16))l=s;else{r=x;q=c[r>>2]|0;r=c[r+4>>2]|0;o=y;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((r|0)>(o|0)|(r|0)==(o|0)&q>>>0>l>>>0)){r=((r|0)<(o|0)|(r|0)==(o|0)&q>>>0<l>>>0)<<31>>31;l=s;oa=389;break}o=a[p>>0]|0;r=1;l=s;q=o;o=(o&255)+-52|0;oa=393;break}}else if((o|0)==66){if(!((q&2|0)!=0|(q&12|0)==0)){Hg(y,sd,1)|0;i=(q&49631|b[A>>1]&15904)&65535}if(!((t&2|0)!=0|(t&12|0)==0)){Hg(x,sd,1)|0;l=(t&49631|b[B>>1]&15904)&65535}}r=Tg(x,y,c[p+16>>2]|0)|0;oa=389}while(0);do if((oa|0)==389){oa=0;if((r|0)>=0){q=a[p>>0]|0;o=(q&255)+-52|0;if(!r){oa=392;break}else{oa=393;break}}else{na=a[p>>0]|0;s=r;o=34207+((na&255)+-52)|0;r=na;break}}while(0);if((oa|0)==392){oa=0;s=0;o=34213+o|0;r=q}else if((oa|0)==393){oa=0;s=r;o=34219+o|0;r=q}o=a[o>>0]|0;q=o&255;b[A>>1]=i;b[B>>1]=l;l=e[C>>1]|0;if(!(l&32))if(!(o<<24>>24)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}i=c[p+8>>2]|0;if(l&8|0?(q|0)==(r<<24>>24==53|0):0){l=m;q=pa;o=s;i=K;break d}l=pa+(i*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=pa+(i*40|0)|0;c[l>>2]=o&255;c[l+4>>2]=0;l=m;q=pa;o=s;i=K;break}case 58:{if(!qa){l=m;q=pa;o=0;i=K}else{i=K;oa=28}break}case -88:case 61:{l=a[qf>>0]|0;do if(l&65?((d[vf>>0]|d[vf+1>>0]<<8)&16)==0:0){i=c[p+16>>2]|0;if(!i){i=c[hd>>2]|0;if(!i)break}if(l&64){na=c[of>>2]|0;i=_c(f,i)|0;bb[na&127](c[pf>>2]|0,i);if(!i)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}if((c[Lb>>2]|0)<=1){Za[c[of>>2]&127](1,c[pf>>2]|0,f,i)|0;break}c[ze>>2]=i;i=dd(Cf,34793,ze)|0;Za[c[of>>2]&127](1,c[pf>>2]|0,f,i)|0;if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);q=p+4|0;i=c[q>>2]|0;if((i|0)>=(c[7392]|0)){if((a[p>>0]|0)==-88){l=m;q=pa;o=qa;i=K;break d}l=c[wb>>2]|0;if((l|0)>1){o=c[le>>2]|0;i=1;do{if((a[o+(i*20|0)>>0]|0)==17)c[o+(i*20|0)+4>>2]=0;i=i+1|0}while((i|0)!=(l|0))}c[q>>2]=0;i=0}c[q>>2]=i+1;c[ib>>2]=(c[ib>>2]|0)+1;i=K;oa=28;break}case 87:{if(!(b[p+2>>1]&1))q=0;else q=(c[p+-4>>2]|0)+4|0;s=c[p+12>>2]|0;t=c[p+16>>2]|0;w=c[p+4>>2]|0;x=c[p+8>>2]|0;if((s|0)>0){r=t+16|0;j:do if(!q){l=0;while(1){i=a[(c[r>>2]|0)+l>>0]|0;o=Tg(pa+((l+w|0)*40|0)|0,pa+((l+x|0)*40|0)|0,c[t+20+(l<<2)>>2]|0)|0;l=l+1|0;if(o|0)break j;if((l|0)>=(s|0)){l=m;q=pa;o=0;i=K;break d}}}else{l=0;while(1){o=c[q+(l<<2)>>2]|0;i=a[(c[r>>2]|0)+l>>0]|0;o=Tg(pa+((o+w|0)*40|0)|0,pa+((o+x|0)*40|0)|0,c[t+20+(l<<2)>>2]|0)|0;l=l+1|0;if(o|0)break j;if((l|0)>=(s|0)){l=m;q=pa;o=0;i=K;break d}}}while(0);l=m;q=pa;o=i<<24>>24==0?o:0-o|0;i=K}else{l=m;q=pa;o=qa;i=K}break}case 16:{if((qa|0)<0){l=m;q=pa;o=qa;p=m+(((c[p+4>>2]|0)+-1|0)*20|0)|0;i=K;break d}if(!qa){l=m;q=pa;o=0;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0;i=K;break d}else{l=m;q=pa;o=qa;p=m+(((c[p+12>>2]|0)+-1|0)*20|0)|0;i=K;break d}}case 43:case 44:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(!(o&4))if(!(o&1)){if(!(o&8))if(!(o&18))u=0.0;else u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0);else u=+g[l>>3];q=u!=0.0&1}else q=2;else{q=l;q=((c[q>>2]|0)!=0|(c[q+4>>2]|0)!=0)&1}i=c[p+8>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(!(o&4))if(!(o&1)){if(!(o&8))if(!(o&18))u=0.0;else u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0);else u=+g[l>>3];i=u!=0.0&1}else i=2;else{i=l;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}i=a[((a[p>>0]|0)==44?34225:34234)+(i+(q*3|0))>>0]|0;l=c[p+12>>2]|0;if(i<<24>>24==2){l=pa+(l*40|0)+8|0;b[l>>1]=b[l>>1]&15904|1;l=m;q=pa;o=qa;i=K;break d}else{q=pa+(l*40|0)|0;c[q>>2]=i&255;c[q+4>>2]=0;l=pa+(l*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break d}}case 88:{r=c[p+8>>2]|0;s=pa+(r*40|0)|0;l=c[p+4>>2]|0;o=pa+(l*40|0)|0;q=e[pa+(l*40|0)+8>>1]|0;if(!(q&4)){i=c[p+12>>2]|0;if(!(q&1)){if(!(q&8))if(!(q&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0&1}}else{i=o;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}l=c[p+16>>2]^i;o=((l|0)<0)<<31>>31;i=pa+(r*40|0)+8|0;if(!(b[i>>1]&9216)){q=s;c[q>>2]=l;c[q+4>>2]=o;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(s,l,o);l=m;q=pa;o=qa;i=K;break d}}case 19:{l=c[p+4>>2]|0;q=c[p+8>>2]|0;r=pa+(q*40|0)|0;i=b[pa+(l*40|0)+8>>1]|0;if(i&1){i=pa+(q*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(r);l=m;q=pa;o=qa;i=K;break d}}o=pa+(l*40|0)|0;i=i&65535;if(!(i&4))if(!(i&1)){if(!(i&8))if(!(i&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0}else i=0;else{i=o;i=(c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0}l=(i^1)&1;i=pa+(q*40|0)+8|0;if(!(b[i>>1]&9216)){q=r;c[q>>2]=l;c[q+4>>2]=0;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(r,l,0);l=m;q=pa;o=qa;i=K;break d}}case 107:{o=c[p+4>>2]|0;i=c[p+8>>2]|0;r=pa+(i*40|0)|0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(r);l=pa+(o*40|0)+8|0;if(!(b[l>>1]&1)){q=pa+(o*40|0)|0;b[i>>1]=4;i=e[l>>1]|0;do if(!(i&4)){if(i&8|0){i=Mg(+g[q>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[pa+(o*40|0)+10>>0]|0,c[pa+(o*40|0)+12>>2]|0,c[pa+(o*40|0)+16>>2]|0)|0;l=L()|0}}else{l=q;i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);q=r;c[q>>2]=~i;c[q+4>>2]=~l;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 17:{i=c[nc>>2]|0;if(!i){l=c[(c[le>>2]|0)+4>>2]|0;i=p+4|0;if((l|0)==(c[i>>2]|0)){i=K;oa=28;break d}}else{o=(p-(c[le>>2]|0)|0)/20|0;i=(c[i+24>>2]|0)+(o>>>3)|0;l=d[i>>0]|0;o=1<<(o&7);if(o&l|0){i=K;oa=28;break d}a[i>>0]=o|l;i=p+4|0;l=c[(c[le>>2]|0)+4>>2]|0}c[i>>2]=l;l=m;q=pa;o=qa;i=K;break}case 18:{l=c[p+4>>2]|0;o=pa+(l*40|0)|0;q=e[pa+(l*40|0)+8>>1]|0;if(!(q&4)){i=c[p+12>>2]|0;if(!(q&1)){if(!(q&8))if(!(q&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0&1}}else{i=o;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}if(!i){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 20:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(o&4|0){na=l;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}if(o&1|0)if(!(c[p+12>>2]|0)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}if(!(o&8)){if(!(o&18)){i=K;oa=28;break d}u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)}else u=+g[l>>3];if(u!=0.0){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 50:{if(!(b[pa+((c[p+4>>2]|0)*40|0)+8>>1]&1)){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 51:{if(!(b[pa+((c[p+4>>2]|0)*40|0)+8>>1]&1)){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 21:{if(a[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+2>>0]|0){i=c[p+12>>2]|0;l=pa+(i*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=1;i=K;oa=28;break d}else{Dg(pa+(i*40|0)|0);i=K;oa=28;break d}}else{l=m;q=pa;o=qa;i=K}break}case 90:{o=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=c[p+8>>2]|0;do if(!(a[o+3>>0]|0)){if(a[c[o+40>>2]>>0]|0){i=sh(o)|0;oa=508}}else{i=c[o+24>>2]|0;if(i|0?(Kd=c[i+(l+1<<2)>>2]|0,(Kd|0)>0):0){l=Kd+-1|0;o=c[o+36>>2]|0;break}i=rh(o)|0;oa=508}while(0);if((oa|0)==508){oa=0;if(i){oa=601;break c}}F=c[p+12>>2]|0;H=pa+(F*40|0)|0;E=c[o+72>>2]|0;r=o+28|0;i=c[ua>>2]|0;k:do if((c[r>>2]|0)!=(i|0)){do if(a[o+2>>0]|0){if((a[o>>0]|0)==3){q=c[o+32>>2]|0;x=c[pa+(q*40|0)+12>>2]|0;c[o+84>>2]=x;c[o+80>>2]=x;q=c[pa+(q*40|0)+16>>2]|0;x=o+76|0;c[x>>2]=q;break}i=pa+(F*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;break k}else{Dg(H);break k}}else{na=c[o+40>>2]|0;bg(na);oa=c[na+44>>2]|0;c[o+80>>2]=oa;i=e[na+48>>1]|0;q=c[na+40>>2]|0;na=(c[(c[na+116>>2]|0)+60>>2]|0)-q|0;c[o+84>>2]=(na|0)<(i|0)?((na|0)>0?na:0):i;i=o+76|0;c[i>>2]=q;if(oa>>>0>(c[Da>>2]|0)>>>0){oa=518;break c}x=i;i=c[ua>>2]|0}while(0);c[r>>2]=i;oa=a[q>>0]|0;i=oa&255;if(oa<<24>>24>-1){c[E>>2]=i;w=1}else{r=d[q+1>>0]|0;do if(r&128){s=d[q+2>>0]|0;if(!(s&128)){c[E>>2]=(i<<14|s)&2080895|r<<7&16256;i=3;break}else{i=Of(q,rf)|0;na=rf;oa=c[na>>2]|0;c[E>>2]=((oa|0)==(oa|0)?0==(c[na+4>>2]|0):0)?oa:-1;break}}else{c[E>>2]=i<<7&16256|r;i=2}while(0);w=i&255}t=o+48|0;c[t>>2]=w;r=o+58|0;b[r>>1]=0;i=o+84|0;s=c[E>>2]|0;if((c[i>>2]|0)>>>0>=s>>>0){q=c[x>>2]|0;i=0;oa=540;break}c[x>>2]=0;c[i>>2]=0;oa=c[E>>2]|0;if(oa>>>0<=98307?oa>>>0<=(c[o+80>>2]|0)>>>0:0){i=0;oa=532}else oa=597}else{i=o+58|0;r=i;i=b[i>>1]|0;oa=532}while(0);do if((oa|0)==532){if((l|0)<(i&65535|0)){r=c[o+88+(l<<2)>>2]|0;oa=576;break}x=o+48|0;w=c[x>>2]|0;s=c[E>>2]|0;if(w>>>0<s>>>0){q=c[o+76>>2]|0;if(!q){ea=Hd;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));s=c[o+40>>2]|0;t=c[E>>2]|0;oa=e[s+48>>1]|0;q=c[s+40>>2]|0;na=(c[(c[s+116>>2]|0)+60>>2]|0)-q|0;if(t>>>0>((na|0)<(oa|0)?((na|0)>0?na:0):oa)>>>0){i=uh(s,0,t,Hd)|0;if(i|0){oa=601;break c}i=b[r>>1]|0;s=c[x>>2]|0;q=c[Yb>>2]|0}else{c[Yb>>2]=q;b[_b>>1]=4112;c[ac>>2]=t;s=w}t=x;w=s;s=c[E>>2]|0;oa=540}else{t=x;oa=540}}else{q=0;oa=566}}while(0);do if((oa|0)==540){B=i&65535;D=q+s|0;i=B;s=q+w|0;B=c[E+(B<<2)>>2]|0;C=0;do{oa=a[s>>0]|0;w=oa&255;A=o+88+(i<<2)|0;c[A>>2]=w;if(oa<<24>>24>-1){s=s+1|0;y=w;w=d[3520+w>>0]|0;x=0}else{x=d[s>>0]|0;y=d[s+1>>0]|0;do if(y&128){z=d[s+2>>0]|0;if(!(z&128)){w=3;x=(x<<14|z)&2080895|y<<7&16256;oa=549;break}w=Of(s,rf)|0;oa=rf;x=c[oa>>2]|0;if((x|0)==(x|0)?0==(c[oa+4>>2]|0):0)oa=549;else{c[A>>2]=-1;x=-1;s=s+(w&255)|0;oa=550}}else{w=2;x=x<<7&16256|y;oa=549}while(0);if((oa|0)==549){oa=0;s=s+(w&255)|0;c[A>>2]=x;if(x>>>0>127)oa=550;else w=d[3520+x>>0]|0}if((oa|0)==550)w=(x+-12|0)>>>1;y=x;x=0}B=Sv(w|0,x|0,B|0,C|0)|0;C=L()|0;oa=i;i=i+1|0;c[E+(i<<2)>>2]=B;w=s>>>0<D>>>0}while((oa|0)<(l|0)&w);if(!w)if(s>>>0<=D>>>0?((C|0)==0?(B|0)==(c[o+80>>2]|0):0):0){w=C;x=B;oa=558}else oa=559;else{w=0;x=c[o+80>>2]|0;oa=558}if((oa|0)==558){oa=0;if(C>>>0>w>>>0|(C|0)==(w|0)&B>>>0>x>>>0)oa=559}if((oa|0)==559)if(!(c[E>>2]|0)){i=0;s=D}else{if(c[o+76>>2]|0){oa=597;break}if((b[_b>>1]&9216)==0&(c[fc>>2]|0)==0){oa=597;break}Cg(Hd);oa=597;break}i=i&65535;b[r>>1]=i;c[t>>2]=s-q;if((c[o+76>>2]|0)==0?!((b[_b>>1]&9216)==0&(c[fc>>2]|0)==0):0){Cg(Hd);q=y;i=b[r>>1]|0;oa=566}else{q=y;oa=566}}while(0);do if((oa|0)==566){oa=0;if((l|0)>=(i&65535|0)){if((a[p+1>>0]|0)!=-11){i=pa+(F*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;break}else{Dg(H);break}}l=c[p+16>>2]|0;i=pa+(F*40|0)+8|0;if(b[i>>1]&9216){mh(H,l,2048);break};c[H>>2]=c[l>>2];c[H+4>>2]=c[l+4>>2];c[H+8>>2]=c[l+8>>2];c[H+12>>2]=c[l+12>>2];c[H+16>>2]=c[l+16>>2];if(!(b[l+8>>1]&2048))b[i>>1]=b[i>>1]&-7169|2048}else{r=q;oa=576}}else if((oa|0)==597){oa=0;i=c[m+12>>2]|0;if((i|0)<=0){oa=599;break c}p=m+((i+-1|0)*20|0)|0}while(0);l:do if((oa|0)==576){oa=0;s=pa+(F*40|0)+8|0;if(b[s>>1]&9216)Dg(H);if((c[o+84>>2]|0)>>>0>=(c[E+(l+1<<2)>>2]|0)>>>0){o=(c[o+76>>2]|0)+(c[E+(l<<2)>>2]|0)|0;if(r>>>0<12){Ug(o,r,H)|0;break}q=(r+-12|0)>>>1;c[pa+(F*40|0)+12>>2]=q;a[pa+(F*40|0)+10>>0]=sd;i=q+2|0;if((c[pa+(F*40|0)+24>>2]|0)<(i|0)){b[s>>1]=1;if(Eg(H,i,0)|0){oa=602;break c}l=pa+(F*40|0)+16|0;i=l;l=c[l>>2]|0}else{l=c[pa+(F*40|0)+20>>2]|0;i=pa+(F*40|0)+16|0;c[i>>2]=l}ew(l|0,o|0,q|0)|0;a[(c[i>>2]|0)+q>>0]=0;a[(c[i>>2]|0)+(q+1)>>0]=0;b[s>>1]=b[31112+((r&1)<<1)>>1]|0;break}a[pa+(F*40|0)+10>>0]=sd;na=b[p+2>>1]|0;if(!((na&192)!=0?!((r>>>0<12|(r&1|0)!=0)&(na&128)==0):0))oa=588;do if((oa|0)==588){oa=0;if(r>>>0<=127){i=a[3520+r>>0]|0;if(!(i<<24>>24))break;else q=i&255}else q=(r+-12|0)>>>1;o=c[o+40>>2]|0;i=c[E+(l<<2)>>2]|0;na=e[o+48>>1]|0;l=c[o+40>>2]|0;ma=(c[(c[o+116>>2]|0)+60>>2]|0)-l|0;if((i+q|0)>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(o,i,q,H)|0;if(i|0){oa=601;break c}i=c[pa+(F*40|0)+16>>2]|0}else{i=l+i|0;c[pa+(F*40|0)+16>>2]=i;b[s>>1]=4112;c[pa+(F*40|0)+12>>2]=q}Ug(i,r,H)|0;b[s>>1]=b[s>>1]&-4097;break l}while(0);Ug(59040,r,H)|0}while(0);l=m;q=pa;o=qa;i=0;break}case 91:{i=c[p+16>>2]|0;s=i;t=pa+((c[p+4>>2]|0)*40|0)|0;i=a[i>>0]|0;while(1){s=s+1|0;do if(i<<24>>24>66){r=t+8|0;o=b[r>>1]|0;i=o&65535;if(!(i&4)){if(i&8|0){v=+g[t>>3];i=Mg(v)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(i>>>0)+4294967296.0*+(l|0)))break;na=t;c[na>>2]=i;c[na+4>>2]=l;b[r>>1]=o&15904|4;break}if(i&2|0?(Ld=a[t+10>>0]|0,Md=t+16|0,Od=t+12|0,Lg(c[Md>>2]|0,rf,c[Od>>2]|0,Ld)|0):0){if(Og(c[Md>>2]|0,Hd,c[Od>>2]|0,Ld)|0){v=+g[rf>>3];g[t>>3]=v;l=b[r>>1]|0;i=l|8;b[r>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)){i=t;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=613}}else{na=Hd;oa=c[na+4>>2]|0;i=t;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[r>>1]|0;oa=613}if((oa|0)==613){oa=0;i=i|4;b[r>>1]=i}b[r>>1]=i&-3}}}else if(i<<24>>24==66){l=t+8|0;i=b[l>>1]|0;na=i&65535;if(!((na&2|0)!=0|(na&12|0)==0)){Hg(t,sd,1)|0;i=b[l>>1]|0}b[l>>1]=i&-13}while(0);i=a[s>>0]|0;if(!(i<<24>>24)){l=m;q=pa;o=qa;i=K;break}else t=t+40|0}break}case 92:{i=c[p+16>>2]|0;E=pa+((c[p+4>>2]|0)*40|0)|0;F=E+(((c[p+8>>2]|0)+-1|0)*40|0)|0;x=a[pc>>0]|0;H=c[p+12>>2]|0;I=pa+(H*40|0)|0;if(i|0){t=E;w=i;i=a[i>>0]|0;do{s=t;t=t+40|0;w=w+1|0;do if(i<<24>>24>66){r=s+8|0;o=b[r>>1]|0;i=o&65535;if(!(i&4)){if(i&8|0){v=+g[s>>3];i=Mg(v)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(i>>>0)+4294967296.0*+(l|0)))break;na=s;c[na>>2]=i;c[na+4>>2]=l;b[r>>1]=o&15904|4;break}if(i&2|0?(Pd=a[s+10>>0]|0,Qd=s+16|0,Rd=s+12|0,Lg(c[Qd>>2]|0,rf,c[Rd>>2]|0,Pd)|0):0){do if(!(Og(c[Qd>>2]|0,Hd,c[Rd>>2]|0,Pd)|0)){na=Hd;oa=c[na+4>>2]|0;i=s;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[r>>1]|0;oa=634}else{v=+g[rf>>3];g[s>>3]=v;l=b[r>>1]|0;i=l|8;b[r>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)))break;i=s;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=634}while(0);if((oa|0)==634){oa=0;i=i|4;b[r>>1]=i}b[r>>1]=i&-3}}}else if(i<<24>>24==66){l=s+8|0;i=b[l>>1]|0;na=i&65535;if(!((na&2|0)!=0|(na&12|0)==0)){Hg(s,sd,1)|0;i=b[l>>1]|0}b[l>>1]=i&-13}while(0);i=a[w>>0]|0}while(i<<24>>24!=0)}B=(x&255)>3;C=0;A=F;z=0;y=0;s=0;t=0;while(1){w=A+8|0;r=b[w>>1]|0;l=r&65535;do if(!(l&1)){if(!(l&4)){if(l&8|0){o=8;x=7;break}i=c[A+12>>2]|0;if(l&16384)i=(c[A>>2]|0)+i|0;o=i;x=(i<<1)+12|l>>>1&1;break}l=A;i=c[l>>2]|0;l=c[l+4>>2]|0;q=aw(i|0,l|0,63)|0;q=q^i;o=(L()|0)^l;if(o>>>0<0|(o|0)==0&q>>>0<128){if(!(B&((i&1|0)==(i|0)&0==(l|0)))){o=1;x=1;break}o=0;x=q+8|0;break}if(!(o>>>0<0|(o|0)==0&q>>>0<32768))if(o>>>0<0|(o|0)==0&q>>>0<8388608){o=3;x=3}else{na=o>>>0<0|(o|0)==0&q>>>0<2147483648;x=o>>>0<32768|(o|0)==32768&q>>>0<0;o=na?4:x?6:8;x=na?4:x?5:6}else{o=2;x=2}}else{o=0;x=0}while(0);do if(!(r&16384)){i=o;oa=666}else{if(!x){w=Sv(z|0,y|0,o|0,0)|0;i=10;o=1;x=L()|0;D=s;break}if((z|0)==0&(y|0)==0){i=c[A>>2]|0;s=Sv(s|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;i=o-i|0;t=L()|0;oa=666;break}l=A+12|0;i=(c[A>>2]|0)+(c[l>>2]|0)|0;if((i|0)<1)if(!(r&16)){i=o;oa=666;break}else i=1;if(Eg(A,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[A+16>>2]|0)+(c[l>>2]|0)|0,0,c[A>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[A>>2]|0);b[w>>1]=b[w>>1]&-16897;i=o;oa=666}while(0);if((oa|0)==666){oa=0;q=Sv(z|0,y|0,i|0,0)|0;r=L()|0;if(x>>>0<128){i=x;o=1;w=q;x=r;D=s}else{o=1;i=x;l=0;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0){i=x;w=q;x=r;D=s;break}else o=o+1|0}}}C=o+C|0;c[A+28>>2]=i;if((A|0)==(E|0))break;else{A=A+-40|0;z=w;y=x;s=D}}if(C>>>0<127)r=C+1|0;else{r=1;i=C;l=0;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0)break;else r=r+1|0}l=r+C|0;i=1;o=l;q=0;while(1){o=bw(o|0,q|0,7)|0;q=L()|0;if((o|0)==0&(q|0)==0)break;else i=i+1|0}r=l+(r>>>0<i>>>0&1)|0}q=((r|0)<0)<<31>>31;z=Sv(w|0,x|0,r|0,q|0)|0;i=Sv(z|0,L()|0,D|0,t|0)|0;l=L()|0;o=c[pa+(H*40|0)+24>>2]|0;na=((o|0)<0)<<31>>31;do if((l|0)>(na|0)|(l|0)==(na|0)&i>>>0>o>>>0){na=c[Da>>2]|0;ma=((na|0)<0)<<31>>31;if((l|0)>(ma|0)|(l|0)==(ma|0)&i>>>0>na>>>0){oa=3891;break c}if((o|0)>=(z|0)){y=c[pa+(H*40|0)+20>>2]|0;c[pa+(H*40|0)+16>>2]=y;na=pa+(H*40|0)+8|0;b[na>>1]=b[na>>1]&13;break}if(Eg(I,z,0)|0){l=p;j=h;i=zf;oa=3892;break a}y=c[pa+(H*40|0)+16>>2]|0}else{y=c[pa+(H*40|0)+20>>2]|0;c[pa+(H*40|0)+16>>2]=y}while(0);do if(r>>>0>=128)if(r>>>0<16384){i=bw(r|0,q|0,7)|0;L()|0;a[y>>0]=i&255|-128;a[y+1>>0]=r&127;i=2;break}else{i=wh(y,r,q)|0;break}else{a[y>>0]=r;i=1}while(0);o=i&255;x=r;w=E;while(1){l=c[w+28>>2]|0;do if(l>>>0<128){a[y+o>>0]=l;i=o+1|0;o=y+x|0;if((l+-1|0)>>>0>=7)if(l>>>0>11){oa=699;break}else{l=0;break}s=w;l=d[3520+l>>0]|0;q=l;r=c[s>>2]|0;s=c[s+4>>2]|0;do{q=q+-1|0;a[o+q>>0]=r;r=bw(r|0,s|0,8)|0;s=L()|0}while((q|0)!=0)}else{i=y+o|0;if(l>>>0<16384){a[i>>0]=l>>>7&255|-128;a[i+1>>0]=l&127;i=2}else i=wh(i,l,0)|0;i=(i&255)+o|0;o=y+x|0;oa=699}while(0);if((oa|0)==699){oa=0;l=c[w+12>>2]|0;if(!l)l=0;else ew(o|0,c[w+16>>2]|0,l|0)|0}w=w+40|0;if(w>>>0>F>>>0)break;else{o=i;x=l+x|0}}c[pa+(H*40|0)+12>>2]=z;i=pa+(H*40|0)+8|0;b[i>>1]=16;if((D|0)==0&(t|0)==0){l=m;q=pa;o=qa;i=K}else{c[I>>2]=D;b[i>>1]=16400;l=m;q=pa;o=qa;i=K}break}case 93:{F=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;i=xh(F)|0;switch(i|0){case 16:{q=0;o=0;break}case 0:{y=F+116|0;z=F+70|0;A=F+68|0;B=F+50|0;C=F+1|0;D=F+20|0;E=F+2|0;q=0;o=0;m:while(1){l=c[y>>2]|0;if(!(a[l+8>>0]|0)){t=(a[l+2>>0]|0)==0;r=b[l+24>>1]|0;q=Sv((t?r&65535:0)|0,(t?0:0)|0,q|0,o|0)|0;o=L()|0;t=l;x=b[z>>1]|0;s=l}else{q=Sv(q|0,o|0,e[l+24>>1]|0,0)|0;o=L()|0;do{i=a[A>>0]|0;if(!(i<<24>>24))break m;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;s=b[F+72+((i<<24>>24)+-1<<1)>>1]|0;b[z>>1]=s;r=i+-1<<24>>24;a[A>>0]=r;r=c[F+120+(r<<24>>24<<2)>>2]|0;c[y>>2]=r;i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);l=c[y>>2]|0;w=l;i=b[z>>1]|0}else{w=c[i+20>>2]|0;l=w+120|0;c[l>>2]=(c[l>>2]|0)+-1;w=w+136|0;c[i+16>>2]=c[w>>2];c[w>>2]=i;w=r;l=r;i=s}r=b[l+24>>1]|0}while((i&65535)>=(r&65535));x=i+1<<16>>16;b[z>>1]=x;t=l;s=w}i=c[t+56>>2]|0;if(x<<16>>16==r<<16>>16){i=i+((d[t+9>>0]|0)+8)|0;l=a[A>>0]|0;if(l<<24>>24>18){oa=717;break c}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];na=c[D>>2]|0;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;ma=l<<24>>24;b[F+72+(ma<<1)>>1]=x;c[F+120+(ma<<2)>>2]=s;b[z>>1]=0;a[A>>0]=l+1<<24>>24;i=yh(na,i,y,F,d[E>>0]|0)|0}else{l=(c[t+64>>2]|0)+((x&65535)<<1)|0;i=i+((d[l>>0]<<8|d[l+1>>0])&e[t+26>>1])|0;l=a[A>>0]|0;if(l<<24>>24>18){oa=720;break c}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];na=c[D>>2]|0;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;ma=l<<24>>24;b[F+72+(ma<<1)>>1]=x;c[F+120+(ma<<2)>>2]=s;b[z>>1]=0;a[A>>0]=l+1<<24>>24;i=yh(na,i,y,F,d[E>>0]|0)|0}if(i){oa=3845;break c}}i=xh(F)|0;if(i){oa=3855;break c}break}default:{oa=3855;break c}}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=q;c[l+4>>2]=o;l=m;q=pa;o=qa;i=0;break}case 0:{w=c[p+4>>2]|0;A=c[p+16>>2]|0;if(!w){if((c[bd>>2]|0)>0){oa=730;break c}if(!A)z=0;else z=(Eu(A)|0)&1073741823;x=(c[Gd>>2]|0)+(c[Fd>>2]|0)|0;n:do if(c[db>>2]|0){y=x+1|0;w=0;while(1){if((w|0)>=(c[Vc>>2]|0))break n;t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;o:do if((l|0)!=0?(c[i>>2]|0)>1:0){s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=y;if(!i){q=0;i=o}else{q=Xa[i&255](l,x)|0;i=c[s>>2]|0}l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break o}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3846;break c}}}while(0);l=z+33|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=761;else{l=m;q=pa;o=qa;i=0;break d}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=761}while(0);if((oa|0)==761){oa=0;i=_d(Cf,l,0)|0}if(!i){l=m;q=pa;o=qa;i=0;break d}na=i+32|0;c[i>>2]=na;ew(na|0,A|0,z+1|0)|0;if(!(a[gd>>0]|0))c[Gd>>2]=(c[Gd>>2]|0)+1;else{a[gd>>0]=0;a[Id>>0]=1}c[i+24>>2]=c[qd>>2];c[qd>>2]=i;l=Pa;q=c[l+4>>2]|0;o=i+8|0;c[o>>2]=c[l>>2];c[o+4>>2]=q;o=Na;q=c[o+4>>2]|0;l=i+16|0;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;i=0;break d}i=c[qd>>2]|0;if(!i){oa=774;break c}q=d[208+(d[A>>0]|0)>>0]|0;B=i;r=0;while(1){l=c[B>>2]|0;na=a[l>>0]|0;i=(d[208+(na&255)>>0]|0)-q|0;if(!(na<<24>>24==0|(i|0)!=0)){o=A;do{l=l+1|0;o=o+1|0;na=a[l>>0]|0;i=(d[208+(na&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(i|0)!=0))}if(!i)break;i=c[B+24>>2]|0;if(!i){oa=774;break c}else{B=i;r=r+1|0}}z=(w|0)==1;if(z&(c[bd>>2]|0)>0){oa=776;break c}A=B+24|0;if(!(c[A>>2]|0)){i=(a[Id>>0]|0)!=0;if(z&i){ma=c[f>>2]|0;na=ma+464|0;ma=ma+472|0;na=Sv(c[ma>>2]|0,c[ma+4>>2]|0,c[na>>2]|0,c[na+4>>2]|0)|0;ma=L()|0;if((ma|0)>0|(ma|0)==0&na>>>0>0){oa=780;break c}a[gd>>0]=1;if((pg(f)|0)==5){oa=782;break c}a[Id>>0]=0;y=r;i=c[Bf>>2]|0;q=1}else{q=i;oa=784}}else{q=0;oa=784}if((oa|0)==784){oa=0;s=(c[Gd>>2]|0)-r|0;x=s+-1|0;t=(w|0)==2;if(t){l=c[hf>>2]&1;if((c[sf>>2]|0)>0){o=l^1;i=0;while(1){r=jg(c[(c[uf>>2]|0)+(i<<4)+4>>2]|0,516,o)|0;i=i+1|0;if(r|0){oa=3854;break c}r=c[sf>>2]|0;if((i|0)>=(r|0)){i=0;oa=790;break}}}else i=K}else{l=0;i=K;r=c[sf>>2]|0;oa=790}p:do if((oa|0)==790){oa=0;if((r|0)>0){i=(s|0)<1;if(!t){if(!i){s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=wf(c[r>>2]|0,w,x)|0;if(i|0){oa=3853;break c}i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[r+44>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3853;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=wf(c[r>>2]|0,w,x)|0;if(i|0){oa=3852;break c}o=r+44|0;if(b[r+22>>1]&16)c[o>>2]=0;i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[o>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3852;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}if(!i){s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=c[r+8>>2]|0;if(i|0?(Vd=$f(i,0,0)|0,Vd|0):0){i=Vd;oa=3851;break c}i=wf(c[r>>2]|0,2,x)|0;if(i|0){oa=3851;break c}i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[r+44>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3851;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=c[r+8>>2]|0;if(i|0?(Ud=$f(i,0,0)|0,Ud|0):0){i=Ud;oa=3850;break c}i=wf(c[r>>2]|0,2,x)|0;if(i|0){oa=3850;break c}o=r+44|0;if(b[r+22>>1]&16)c[o>>2]=0;i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[o>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3850;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break}}}}while(0);if(!l)y=x;else{l=c[$a>>2]|0;if(l|0)do{na=l+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|1;a[na>>0]=ma;a[na+1>>0]=ma>>8;l=c[l+8>>2]|0}while((l|0)!=0);$b(Cf);c[hf>>2]=c[hf>>2]|1;y=x}}l=c[qd>>2]|0;if((l|0)!=(B|0))do{c[qd>>2]=c[l+24>>2];q:do if(l|0){if(c[Ze>>2]|0){Xd(Cf,l);break}o=l;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;c[l>>2]=c[af>>2];c[af>>2]=l;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[Gd>>2]=(c[Gd>>2]|0)+-1;l=c[qd>>2]|0}while((l|0)!=(B|0));if(z){c[qd>>2]=c[A>>2];do if(!(c[Ze>>2]|0)){na=B;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[B>>2]=c[af>>2];c[af>>2]=B;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{na=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}else Xd(Cf,B);while(0);if(q){Wd=1;oa=859}else c[Gd>>2]=(c[Gd>>2]|0)+-1}else{Wd=B+8|0;oa=c[Wd+4>>2]|0;na=Pa;c[na>>2]=c[Wd>>2];c[na+4>>2]=oa;na=B+16|0;oa=c[na+4>>2]|0;Wd=Na;c[Wd>>2]=c[na>>2];c[Wd+4>>2]=oa;Wd=q;oa=859}if((oa|0)==859?(oa=0,!((w|0)==2|Wd^1)):0)if(!i){l=m;q=pa;o=qa;i=0;break d}else{oa=3855;break c}if(!(c[db>>2]|0)){l=m;q=pa;o=qa;i=0}else{x=y+1|0;switch(w|0){case 0:while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;r:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=x;if(!i){q=0;i=o}else{q=Xa[i&255](l,y)|0;i=c[s>>2]|0}l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break r}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3848;break c}}case 2:{w=0;while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;s:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+88>>2]|0;do if(!i){q=0;i=o}else{if((c[t+20>>2]|0)<=(y|0)){q=0;i=o;break}q=Xa[i&255](l,y)|0;i=c[s>>2]|0}while(0);l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break s}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3849;break c}}}default:{w=0;while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;t:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+84>>2]|0;do if(!i){q=0;i=o}else{if((c[t+20>>2]|0)<=(y|0)){q=0;i=o;break}q=Xa[i&255](l,y)|0;i=c[s>>2]|0}while(0);l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break t}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3847;break c}}}}}break}case 2:{c[rf>>2]=0;o=p+8|0;i=c[o>>2]|0;if(i|0?!((c[Sc>>2]&1048576|0)==0&0==0):0){l=8;oa=1017;break c}z=p+4|0;y=c[(c[uf>>2]|0)+(c[z>>2]<<4)+4>>2]|0;do if(y){l=Zb(y,i,rf)|0;if(l|0){oa=950;break c}if((c[o>>2]|0)!=0?((d[vf>>0]|d[vf+1>>0]<<8)&128)!=0:0){if(a[gd>>0]|0?(c[Ha>>2]|0)<=1:0){i=0;break}i=c[bc>>2]|0;if(!i){l=(c[Fd>>2]|0)+1|0;c[Fd>>2]=l;l=(c[Gd>>2]|0)+l|0;c[bc>>2]=l}else l=i;x=l+-1|0;u:do if(!(c[db>>2]|0))oa=979;else{w=0;while(1){if((w|0)>=(c[Vc>>2]|0))break;t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;q=c[r>>2]|0;v:do if(q){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=l;if(!i)i=0;else{i=Xa[i&255](q,x)|0;o=c[s>>2]|0}q=c[t>>2]|0;na=o+-1|0;c[s>>2]=na;if(na|0)break;o=c[r>>2]|0;if(o|0)Wa[c[(c[o>>2]|0)+16>>2]&127](o)|0;do if(q|0){if(c[q+480>>2]|0){Xd(q,t);break v}o=t;if((c[q+304>>2]|0)>>>0>o>>>0)break;if((c[q+308>>2]|0)>>>0<=o>>>0)break;na=q+300|0;c[t>>2]=c[na>>2];c[na>>2]=t;break v}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{na=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else i=0;while(0);if(!i)w=w+1|0;else break u}l=c[bc>>2]|0;oa=979}while(0);if((oa|0)==979){oa=0;i=c[y+4>>2]|0;c[i+4>>2]=c[y>>2];i=c[i>>2]|0;if((c[i+96>>2]|0)<(l|0)?(a[i+6>>0]|0)!=0:0)i=Vf(i,l)|0;else i=0}na=Pa;ma=c[na+4>>2]|0;la=gc;c[la>>2]=c[na>>2];c[la+4>>2]=ma;la=Na;ma=c[la+4>>2]|0;na=hc;c[na>>2]=c[la>>2];c[na+4>>2]=ma}else i=0}else i=K;while(0);if(b[p+2>>1]|0){if((c[rf>>2]|0)!=(c[p+12>>2]|0)){oa=986;break c}if((c[(c[(c[uf>>2]|0)+(c[z>>2]<<4)+12>>2]|0)+4>>2]|0)!=(c[p+16>>2]|0)){oa=986;break c}}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 94:{i=c[p+12>>2]|0;l=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;o=c[l+4>>2]|0;c[o+4>>2]=c[l>>2];if((i|0)==15)o=(c[l+20>>2]|0)+(c[(c[o>>2]|0)+100>>2]|0)|0;else{o=(c[(c[o+12>>2]|0)+56>>2]|0)+((i<<2)+36)|0;o=d[o+1>>0]<<16|d[o>>0]<<24|d[o+2>>0]<<8|d[o+3>>0]}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=o;c[l+4>>2]=((o|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 95:{w=c[uf>>2]|0;x=p+4|0;y=c[x>>2]|0;l=c[w+(y<<4)+4>>2]|0;z=p+8|0;s=c[z>>2]|0;A=p+12|0;q=c[A>>2]|0;t=c[l+4>>2]|0;c[t+4>>2]=c[l>>2];l=c[t+12>>2]|0;r=c[l+56>>2]|0;l=c[l+72>>2]|0;o=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[o+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[o+96>>2]|0))oa=1035;else{i=Ve(l)|0;oa=1034}else oa=1030;do if((oa|0)==1030){oa=0;i=c[o+40>>2]|0;if(!i)if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){i=Wf(l)|0;oa=1034;break}else{i=Xf(l)|0;oa=1034;break}else o=0}while(0);if((oa|0)==1034){oa=0;if(!i)oa=1035;else o=0}if((oa|0)==1035){oa=0;na=r+((s<<2)+36)|0;a[na>>0]=q>>>24;a[na+1>>0]=q>>>16;a[na+2>>0]=q>>>8;i=q&255;a[na+3>>0]=i;if((s|0)==7){a[t+18>>0]=i;i=0;o=1}else{i=0;o=1}}switch(c[z>>2]|0){case 1:{c[c[w+(y<<4)+12>>2]>>2]=c[A>>2];c[hf>>2]=c[hf>>2]|1;break}case 2:{a[(c[w+(y<<4)+12>>2]|0)+76>>0]=c[A>>2];break}default:{}}if((c[x>>2]|0)==1){l=c[$a>>2]|0;if(l|0)do{na=l+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|1;a[na>>0]=ma;a[na+1>>0]=ma>>8;l=c[l+8>>2]|0}while((l|0)!=0);na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8}if(o){l=m;q=pa;o=qa}else{oa=3855;break c}break}case 106:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((i|0)!=0?(c[i+52>>2]|0)==(c[p+8>>2]|0):0){o=i;i=K;l=p+2|0;oa=1074}else oa=1049;break}case 109:case 108:{oa=1049;break}case 111:{l=c[oc>>2]|0;w=c[l+(c[p+8>>2]<<2)>>2]|0;q=c[p+4>>2]|0;s=b[w+56>>1]|0;t=s<<16>>16;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;o=t<<3;r=o+96|0;o=o+296|0;l=c[l+(q<<2)>>2]|0;if(l|0){na=l+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(o|0)){if(Eg(i,o,0)|0){l=p;j=h;i=zf;oa=3892;break a}o=i+16|0;l=o;o=c[o>>2]|0}else{o=c[i+20>>2]|0;l=i+16|0;c[l>>2]=o;na=i+8|0;b[na>>1]=b[na>>1]&13}c[(c[oc>>2]|0)+(q<<2)>>2]=o;i=o+1|0;ea=o;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=-1;b[o+56>>1]=s;c[o+72>>2]=o+88+(t<<2);na=(c[l>>2]|0)+r|0;i=o+40|0;c[i>>2]=na;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;if(!o){l=p;j=h;i=zf;oa=3892;break a}a[o+2>>0]=1;l=o+5|0;q=a[l>>0]|1;a[l>>0]=q;na=c[w+44>>2]|0;c[o+44>>2]=na;a[o+4>>0]=a[w+4>>0]|0;ma=c[w+52>>2]|0;c[o+52>>2]=ma;a[l>>0]=a[w+5>>0]&4|q&-5;l=m;q=pa;o=qa;i=Vg(c[w+8>>2]|0,ma,4,na,c[i>>2]|0)|0;break}case 113:case 112:{o=c[p+4>>2]|0;q=(c[oc>>2]|0)+(o<<2)|0;i=c[q>>2]|0;if(!i){s=c[p+8>>2]|0;i=c[xd>>2]|0;if((o|0)>0)i=i+(((c[va>>2]|0)-o|0)*40|0)|0;l=s<<3;r=l+96|0;l=l+296|0;if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}w=i+16|0;l=w;i=(c[oc>>2]|0)+(o<<2)|0;w=c[w>>2]|0}else{w=c[i+20>>2]|0;l=i+16|0;c[l>>2]=w;i=i+8|0;b[i>>1]=b[i>>1]&13;i=q}c[i>>2]=w;i=w+1|0;ea=w;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=-1;b[w+56>>1]=s;c[w+72>>2]=w+88+(s<<2);na=(c[l>>2]|0)+r|0;q=w+40|0;c[q>>2]=na;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;if(!w){l=p;j=h;i=zf;oa=3892;break a}a[w+2>>0]=1;s=w+5|0;a[s>>0]=a[s>>0]|1;r=w+8|0;t=p+2|0;i=Pe(c[Cf>>2]|0,0,Cf,r,(b[t>>1]|5)&65535,1054)|0;do if(!i){i=Zb(c[r>>2]|0,1,0)|0;if(!i){l=c[p+16>>2]|0;c[w+44>>2]=l;if(!l){c[w+52>>2]=1;i=Vg(c[r>>2]|0,1,4,0,c[q>>2]|0)|0;a[w+4>>0]=1;break}o=w+52|0;i=Wg(c[r>>2]|0,o,(b[t>>1]|2)&65535)|0;if(!i)i=Vg(c[r>>2]|0,c[o>>2]|0,4,l,c[q>>2]|0)|0;a[w+4>>0]=0}}while(0);a[s>>0]=((b[t>>1]|0)!=8&1)<<2&255|a[s>>0]&-5}else{l=c[i+8>>2]|0;q=c[i+52>>2]|0;o=l+4|0;r=c[o>>2]|0;c[r+4>>2]=c[l>>2];i=c[r+8>>2]|0;w:do if(i|0){x:do if(q)while(1){if((c[i+64>>2]|0)==(q|0))break x;i=c[i+24>>2]|0;if(!i)break w}while(0);i=$f(i,q,0)|0;if(i|0){oa=3855;break c}}while(0);l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,md=c[(c[o>>2]|0)+8>>2]|0,md|0):0){i=md;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(q|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(r,q,0,0)|0}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 114:{q=c[p+4>>2]|0;r=c[p+8>>2]|0;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;l=(r<<3)+96|0;o=c[(c[oc>>2]|0)+(q<<2)>>2]|0;if(o|0){na=o+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}s=c[i+16>>2]|0}else{s=c[i+20>>2]|0;c[i+16>>2]=s;na=i+8|0;b[na>>1]=b[na>>1]&13}c[(c[oc>>2]|0)+(q<<2)>>2]=s;ea=s;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[s>>0]=1;a[s+1>>0]=-1;b[s+56>>1]=r;c[s+72>>2]=s+88+(r<<2);if(!s){l=p;j=h;i=zf;oa=3892;break a}q=c[p+16>>2]|0;l=s+44|0;c[l>>2]=q;o=c[p+12>>2]|0;q=e[q+6>>1]<<2;r=q+156|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=1133;else{oa=1135;break c}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<r>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;t=i;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;t=i;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=1133}while(0);if((oa|0)==1133){oa=0;t=_d(Cf,r,0)|0}if(!t){oa=1135;break c}gw(t|0,0,r|0)|0;c[s+40>>2]=t;na=t+136|0;c[t+28>>2]=na;ew(na|0,c[l>>2]|0,q+20|0)|0;c[t+148>>2]=0;if(o|0)b[t+142>>1]=o;i=c[uf>>2]|0;l=c[(c[(c[i+4>>2]|0)+4>>2]|0)+32>>2]|0;c[t+12>>2]=l;a[t+59>>0]=1;a[t+58>>0]=-1;a[t+57>>0]=0;c[t+24>>2]=Cf;c[t+72>>2]=t;if((a[ra>>0]|0)!=2?(ma=G(c[7379]|0,l)|0,c[t>>2]=ma,na=c[(c[i+12>>2]|0)+80>>2]|0,la=(na|0)<0,be=((l|0)<0)<<31>>31,na=Yv((la?-1024:l)|0,(la?-1:be)|0,na|0,((na|0)<0)<<31>>31|0)|0,la=L()|0,ka=(la|0)<0|(la|0)==0&na>>>0<536870912,na=ka?na:536870912,ka?la:0,c[t+4>>2]=(ma|0)>(na|0)?ma:na,(c[7329]|0)==0):0){c[t+52>>2]=l;na=Sv(l|0,be|0,-1,-1)|0;ma=L()|0;do if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390)i=0;else{if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;break}o=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(!i){i=0;break}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);c[t+40>>2]=i;i=(i|0)==0?7:0}else i=0;do if((e[t+144>>1]|0)<13){na=c[t+156>>2]|0;if(na|0?(na|0)!=(c[jc>>2]|0):0)break;a[t+60>>0]=3}while(0);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 115:{la=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+16|0;na=la;ma=c[na>>2]|0;na=c[na+4>>2]|0;ja=Sv(ma|0,na|0,1,0)|0;ka=L()|0;c[la>>2]=ja;c[la+4>>2]=ka;if((ma|0)==0&(na|0)==0){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 116:{q=c[p+4>>2]|0;r=c[p+12>>2]|0;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;l=(r<<3)+96|0;o=c[(c[oc>>2]|0)+(q<<2)>>2]|0;if(o|0){na=o+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}i=c[i+16>>2]|0}else{na=c[i+20>>2]|0;c[i+16>>2]=na;i=i+8|0;b[i>>1]=b[i>>1]&13;i=na}c[(c[oc>>2]|0)+(q<<2)>>2]=i;ea=i;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=3;a[i+1>>0]=-1;b[i+56>>1]=r;c[i+72>>2]=i+88+(r<<2);if(!i){l=p;j=h;i=zf;oa=3892;break a}a[i+2>>0]=1;c[i+32>>2]=c[p+8>>2];a[i+4>>0]=1;c[i+40>>2]=59954;l=m;q=pa;o=qa;i=K;break}case 117:{l=p+4|0;tg(f,c[(c[oc>>2]|0)+(c[l>>2]<<2)>>2]|0);c[(c[oc>>2]|0)+(c[l>>2]<<2)>>2]=0;l=m;q=pa;o=qa;i=K;break}case 25:case 24:case 23:case 22:{w=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=z&255;a[w+2>>0]=0;y:do if(!(a[w+4>>0]|0)){i=c[w+40>>2]|0;o=(d[i+3>>0]|0)>>>1&1;oa=c[p+16>>2]|0;c[Yd>>2]=c[w+44>>2];b[wa>>1]=oa;a[xa>>0]=(l<<1&2^2)+255;c[ya>>2]=pa+((c[p+12>>2]|0)*40|0);a[za>>0]=0;i=Xg(i,Yd,0,0,0,Td)|0;if(i|0){oa=1213;break c}i=o&255;if(o<<24>>24!=0&(a[za>>0]|0)==0)if(!(c[Td>>2]|0)){p=p+20|0;oa=1212}else{i=0;oa=1211}else{o=i;oa=1194}}else{r=c[p+12>>2]|0;t=pa+(r*40|0)|0;s=pa+(r*40|0)+8|0;i=b[s>>1]|0;if((i&14)==2){i=a[pa+(r*40|0)+10>>0]|0;o=pa+(r*40|0)+16|0;q=pa+(r*40|0)+12|0;if(!(Lg(c[o>>2]|0,rf,c[q>>2]|0,i)|0))i=b[s>>1]|0;else{if(!(Og(c[o>>2]|0,Hd,c[q>>2]|0,i)|0)){na=Hd;oa=c[na+4>>2]|0;i=t;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=4}else{g[t>>3]=+g[rf>>3];i=8}i=b[s>>1]&-3|i;b[s>>1]=i}}i=i&65535;do if(!(i&4)){if(i&8|0){o=Mg(+g[t>>3])|0;q=L()|0;break}if(!(i&18)){o=0;q=0}else{o=Ng(a[pa+(r*40|0)+10>>0]|0,c[pa+(r*40|0)+12>>2]|0,c[pa+(r*40|0)+16>>2]|0)|0;q=L()|0;i=e[s>>1]|0}}else{q=t;o=c[q>>2]|0;q=c[q+4>>2]|0}while(0);do if(!(i&4)){if(!(i&8)){i=K;oa=1211;break y}u=+g[t>>3];v=+(o>>>0)+4294967296.0*+(q|0);if(u<v){l=(l<<31>>31)+l|0;break}else{l=((l&1|0)==0&u>v&1)+l|0;break}}while(0);i=Xg(c[w+40>>2]|0,0,o,q,0,Td)|0;oa=w+64|0;c[oa>>2]=o;c[oa+4>>2]=q;if(!i){o=0;oa=1194}else{oa=1213;break c}}while(0);z:do if((oa|0)==1194){oa=0;a[w+3>>0]=0;c[w+28>>2]=0;i=c[Td>>2]|0;if((l|0)>23){if((i|0)>=0?!((l|0)==25&(i|0)==0):0)c[Td>>2]=0;else oa=1197;A:do if((oa|0)==1197){c[Td>>2]=0;i=Yg(c[w+40>>2]|0,0)|0;switch(i|0){case 0:break A;case 101:break;default:{oa=1213;break c}}c[Td>>2]=1;i=0;oa=1211;break z}while(0);p=(o|0)==0?p:p+20|0;oa=1212;break}if((i|0)<=0?!((l|0)==22&(i|0)==0):0){oa=(a[c[w+40>>2]>>0]|0)!=0;c[Td>>2]=oa&1;if(oa){i=0;oa=1211;break}else{p=(o|0)==0?p:p+20|0;oa=1212;break}}c[Td>>2]=0;i=c[w+40>>2]|0;na=i+1|0;a[na>>0]=a[na>>0]&-15;b[i+50>>1]=0;if(((a[i>>0]|0)==0?(ce=i+70|0,de=b[ce>>1]|0,de<<16>>16!=0):0)?(a[(c[i+116>>2]|0)+8>>0]|0)!=0:0)b[ce>>1]=de+-1<<16>>16;else oa=1206;B:do if((oa|0)==1206){i=Hh(i)|0;switch(i|0){case 0:break B;case 101:break;default:{oa=1213;break c}}c[Td>>2]=1;i=0;oa=1211;break z}while(0);p=(o|0)==0?p:p+20|0;oa=1212}while(0);if((oa|0)==1211){oa=28;break d}else if((oa|0)==1212){oa=0;l=m;q=pa;o=qa;i=0;break d}break}case 119:{l=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+5|0;a[l>>0]=(c[p+8>>2]&255)<<3&8|a[l>>0]&-9;l=m;q=pa;o=qa;i=K;break}case 26:{if(!(a[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+5>>0]&8))oa=1216;else{l=m;q=pa;o=qa;i=K}break}case 29:case 28:case 27:{oa=1216;break}case 30:{i=p+12|0;o=c[i>>2]|0;t=pa+(o*40|0)+8|0;w=b[t>>1]|0;if(!(w&4)){s=pa+(o*40|0)|0;l=w&65535;do if(!(l&4)){if(l&8|0){v=+g[s>>3];o=Mg(v)|0;q=L()|0;oa=Sv(o|0,q|0,1,-2147483648)|0;na=L()|0;l=w&15904|4;if(!((na>>>0>0|(na|0)==0&oa>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0))){l=w;break}oa=s;c[oa>>2]=o;c[oa+4>>2]=q;b[t>>1]=l;break}if(l&2){q=a[pa+(o*40|0)+10>>0]|0;r=pa+(o*40|0)+16|0;l=pa+(o*40|0)+12|0;if(!(Lg(c[r>>2]|0,rf,c[l>>2]|0,q)|0))l=b[t>>1]|0;else{if(Og(c[r>>2]|0,Hd,c[l>>2]|0,q)|0){v=+g[rf>>3];g[s>>3]=v;o=b[t>>1]|0;l=o|8;b[t>>1]=l;q=Mg(v)|0;r=L()|0;na=Sv(q|0,r|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(q>>>0)+4294967296.0*+(r|0)){l=s;c[l>>2]=q;c[l+4>>2]=r;l=o&15904;oa=1281}}else{na=Hd;oa=c[na+4>>2]|0;l=s;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=b[t>>1]|0;oa=1281}if((oa|0)==1281){l=l|4;b[t>>1]=l}l=l&-3;b[t>>1]=l}}else l=w}else l=w;while(0);b[t>>1]=w;if(!(l&4)){i=K;oa=28}else oa=1287}else oa=1287;break}case 31:{i=p+12|0;oa=1287;break}case 120:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+16|0;q=l;o=c[q>>2]|0;q=c[q+4>>2]|0;ma=Sv(o|0,q|0,1,0)|0;na=L()|0;c[l>>2]=ma;c[l+4>>2]=na;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case 121:{na=rf;c[na>>2]=0;c[na+4>>2]=0;c[Hd>>2]=0;na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;y=i}else{lh(i)|0;y=i}z=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=z+5|0;do if(!(a[x>>0]&2)){l=z+40|0;i=$g(c[l>>2]|0,Hd)|0;if(i|0){oa=1328;break c}if(c[Hd>>2]|0){i=rf;c[i>>2]=1;c[i+4>>2]=0;i=0;break}l=c[l>>2]|0;bg(l);l=l+32|0;i=c[l>>2]|0;l=c[l+4>>2]|0;na=rf;c[na>>2]=i;c[na+4>>2]=l;if((i|0)==-1&(l|0)==2147483647){a[x>>0]=a[x>>0]|2;i=0;break}else{ma=Sv(i|0,l|0,1,0)|0;na=L()|0;i=rf;c[i>>2]=ma;c[i+4>>2]=na;i=0;break}}else i=K;while(0);r=c[p+12>>2]|0;if(r|0){l=c[nc>>2]|0;if(!l)o=pa;else{while(1){o=c[l+4>>2]|0;if(!o)break;else l=o}o=c[l+16>>2]|0}w=o+(r*40|0)|0;s=o+(r*40|0)+8|0;l=b[s>>1]|0;q=l&65535;do if(!(q&4)){if(q&8|0){q=Mg(+g[w>>3])|0;o=L()|0;oa=1317;break}if(!(q&18)){t=w;c[t>>2]=0;c[t+4>>2]=0;b[s>>1]=l&15904|4;t=0;q=0;break}else{q=Ng(a[o+(r*40|0)+10>>0]|0,c[o+(r*40|0)+12>>2]|0,c[o+(r*40|0)+16>>2]|0)|0;o=L()|0;l=b[s>>1]|0;oa=1317;break}}else{o=w;q=c[o>>2]|0;o=c[o+4>>2]|0;oa=1317}while(0);if((oa|0)==1317){oa=0;na=w;c[na>>2]=q;c[na+4>>2]=o;b[s>>1]=l&15904|4;if((q|0)==-1&(o|0)==2147483647){i=13;oa=1328;break c}else t=o}if(a[x>>0]&2){i=13;oa=1328;break c}l=rf;o=c[l>>2]|0;l=c[l+4>>2]|0;r=Sv(q|0,t|0,1,0)|0;s=L()|0;if(!((l|0)>(t|0)|(l|0)==(t|0)&o>>>0>q>>>0)){o=rf;c[o>>2]=r;c[o+4>>2]=s;o=r;l=s}na=w;c[na>>2]=o;c[na+4>>2]=l}if(a[x>>0]&2){o=z+40|0;l=0;do{Fb(8,rf);q=rf;q=Sv(c[q>>2]|0,c[q+4>>2]&1073741823|0,1,0)|0;i=L()|0;na=rf;c[na>>2]=q;c[na+4>>2]=i;i=Xg(c[o>>2]|0,0,q,i,0,Hd)|0;q=c[Hd>>2]|0;if(q|i|0)break;l=l+1|0}while(l>>>0<100);if(i|0){oa=1328;break c}if(!q){i=13;oa=1328;break c}else i=0}a[z+3>>0]=0;c[z+28>>2]=0;o=rf;q=c[o+4>>2]|0;l=y;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;break}case 122:{i=c[p+8>>2]|0;s=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=pa+((c[p+12>>2]|0)*40|0)|0;t=c[w>>2]|0;w=c[w+4>>2]|0;na=qc;c[na>>2]=t;c[na+4>>2]=w;if((a[p+1>>0]|0)==-6?(c[Ca>>2]|0)!=0:0){q=c[(c[uf>>2]|0)+(a[s+1>>0]<<4)>>2]|0;r=c[p+16>>2]|0}else{q=0;r=0}x=p+2|0;l=b[x>>1]|0;if(l&1)c[rc>>2]=(c[rc>>2]|0)+1;if(l&32){na=zb;c[na>>2]=t;c[na+4>>2]=w}c[xb>>2]=c[pa+(i*40|0)+16>>2];c[yb>>2]=c[pa+(i*40|0)+12>>2];if(!(l&16))o=0;else o=c[s+32>>2]|0;if(!(b[pa+(i*40|0)+8>>1]&16384))i=0;else i=c[pa+(i*40|0)>>2]|0;c[Sb>>2]=i;c[rf>>2]=0;i=ah(c[s+40>>2]|0,rf,l&10,o)|0;a[s+3>>0]=0;c[s+28>>2]=0;if(i|0){oa=1345;break c}if(r|0)eb[c[Ca>>2]&127](c[Tb>>2]|0,(b[x>>1]&4)==0?18:23,q,c[r>>2]|0,t,w);l=m;q=pa;o=qa;i=0;break}case 123:{q=c[p+8>>2]|0;r=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((a[p+1>>0]|0)==-6?(c[Ca>>2]|0)!=0:0){i=c[(c[uf>>2]|0)+(a[r+1>>0]<<4)>>2]|0;l=c[p+16>>2]|0;if((b[p+2>>1]&2)!=0?(a[r+4>>0]|0)!=0:0){ma=c[r+40>>2]|0;bg(ma);ma=ma+32|0;na=c[ma+4>>2]|0;o=r+64|0;c[o>>2]=c[ma>>2];c[o+4>>2]=na;o=i}else o=i}else{o=0;l=0}i=bh(c[r+40>>2]|0,b[p+2>>1]&255)|0;c[r+28>>2]=0;c[r+32>>2]=0;if(i|0){oa=3855;break c}if(((q&1|0)!=0?(c[rc>>2]=(c[rc>>2]|0)+1,ge=c[Ca>>2]|0,(ge|0)!=0):0)?(c[l+36>>2]&32|0)==0:0){q=r+64|0;eb[ge&127](c[Tb>>2]|0,9,o,c[l>>2]|0,c[q>>2]|0,c[q+4>>2]|0);l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}break}case 124:{l=c[rc>>2]|0;c[sc>>2]=l;c[tc>>2]=(c[tc>>2]|0)+l;c[rc>>2]=0;l=m;q=pa;o=qa;i=K;break}case 125:{t=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+12>>2]|0;x=c[p+16>>2]|0;s=c[t+40>>2]|0;r=s+32|0;i=c[r>>2]|0;t=c[t+44>>2]|0;if(!i){q=((e[t+6>>1]|0)*40|0)+56|0;o=c[t+12>>2]|0;C:do if(!o){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;oa=1381;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(!i){oa=1382;break c}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){oa=1382;break c}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<q>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1381;break C}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1381;break C}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,q,0)|0;oa=1381}while(0);if((oa|0)==1381){oa=0;if(!i){oa=1382;break c}}c[i+4>>2]=i+16;c[i>>2]=t;c[r>>2]=i;b[i+8>>1]=x;o=i}else o=i;if(!(a[s+56>>0]|0)){l=c[s+36>>2]|0;i=l+8|0}else{l=c[s+20>>2]|0;na=c[l+12>>2]|0;l=c[(c[l+8>>2]|0)+4>>2]|0;i=c[na+(l*56|0)+32>>2]|0;l=na+(l*56|0)+20|0}_g(t,c[l>>2]|0,i,o);if((x|0)>0){l=c[o+4>>2]|0;i=0;do{if(b[l+(i*40|0)+8>>1]&1){i=0;oa=28;break d}i=i+1|0}while((i|0)<(x|0))}if(!(Fh(c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0,o,0)|0)){l=m;q=pa;o=qa;i=0}else{i=0;oa=28}break}case 126:{s=c[p+8>>2]|0;i=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;if(!(a[i+56>>0]|0)){i=c[i+36>>2]|0;r=i+8|0}else{i=c[i+20>>2]|0;na=c[i+12>>2]|0;i=c[(c[i+8>>2]|0)+4>>2]|0;r=c[na+(i*56|0)+32>>2]|0;i=na+(i*56|0)+20|0}i=c[i>>2]|0;if((c[pa+(s*40|0)+24>>2]|0)<(i|0)){if(Eg(pa+(s*40|0)|0,i,0)|0){i=7;oa=3855;break c}o=pa+(s*40|0)+8|0;l=o;o=b[o>>1]|0;q=c[pa+(s*40|0)+16>>2]|0}else{q=c[pa+(s*40|0)+20>>2]|0;c[pa+(s*40|0)+16>>2]=q;l=pa+(s*40|0)+8|0;o=b[l>>1]&13;b[l>>1]=o}c[pa+(s*40|0)+12>>2]=i;b[l>>1]=o&15904|16;ew(q|0,r|0,i|0)|0;c[(c[(c[oc>>2]|0)+(c[p+12>>2]<<2)>>2]|0)+28>>2]=0;l=m;q=pa;o=qa;i=0;break}case 127:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;q=i}else{lh(i)|0;q=i}i=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;bg(i);l=c[i+44>>2]|0;if(l>>>0>(c[Da>>2]|0)>>>0){oa=3891;break c}na=e[i+48>>1]|0;o=c[i+40>>2]|0;ma=(c[(c[i+116>>2]|0)+60>>2]|0)-o|0;if(l>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(i,0,l,q)|0;if(i|0){oa=3855;break c}}else{c[q+16>>2]=o;b[q+8>>1]=4112;c[q+12>>2]=l}if((c[p+12>>2]|0)==0?(he=q+8|0,ie=b[he>>1]|0,(ie&4096)!=0):0){i=ie&65535;do if(!(i&18))i=ie;else{do if(!(i&16384))i=ie;else{l=q+12|0;i=(c[q>>2]|0)+(c[l>>2]|0)|0;if((i|0)<1)if(!(ie&16)){i=ie;break}else i=1;if(Eg(q,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[q+16>>2]|0)+(c[l>>2]|0)|0,0,c[q>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[q>>2]|0);i=b[he>>1]&-16897;b[he>>1]=i}while(0);if(c[q+24>>2]|0?(c[q+16>>2]|0)==(c[q+20>>2]|0):0)break;if(Jg(q)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[he>>1]|0}while(0);b[he>>1]=i&-4097;l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}break}case -128:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;w=i}else{lh(i)|0;w=i}l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;q=l+2|0;D:do if(!(a[q>>0]|0)){do if(!(a[l+3>>0]|0)){if((a[l>>0]|0)!=2){o=l+40|0;i=c[o>>2]|0;do if(a[i>>0]|0){i=sh(l)|0;if(i|0){oa=1481;break c}if(!(a[q>>0]|0)){i=c[o>>2]|0;break}else{b[w+8>>1]=1;i=0;break D}}while(0);bg(i);o=i+32|0;l=c[o>>2]|0;o=c[o+4>>2]|0;i=rf;c[i>>2]=l;c[i+4>>2]=o;i=0;break}i=c[l+40>>2]|0;t=c[i>>2]|0;i=Xa[c[(c[t>>2]|0)+48>>2]&255](i,rf)|0;t=t+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;E:do if(l|0){do if(q|0){if(c[q+480>>2]|0){Xd(q,l);break E}o=l;if((c[q+304>>2]|0)>>>0>o>>>0)break;if((c[q+308>>2]|0)>>>0<=o>>>0)break;na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break E}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;F:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;G:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break F}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=1464;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break F}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break F}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1464;break G}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1464;break G}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=1464}while(0);if((oa|0)==1464){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=1481;break c}o=rf;i=0;l=c[o>>2]|0;o=c[o+4>>2]|0}else{o=l+64|0;l=c[o>>2]|0;o=c[o+4>>2]|0;i=rf;c[i>>2]=l;c[i+4>>2]=o;i=K}while(0);na=w;c[na>>2]=l;c[na+4>>2]=o}else{b[w+8>>1]=1;i=K}while(0);l=m;q=pa;o=qa;break}case -127:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;a[i+2>>0]=1;c[i+28>>2]=0;if(!(a[i>>0]|0)){i=c[i+40>>2]|0;l=i+16|0;o=c[l>>2]|0;do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[l>>2]=0;a[i>>0]=1;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 32:case -126:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[l+40>>2]|0;c[rf>>2]=0;if(z<<24>>24==-126?(c[l+32>>2]=-1,(a[i>>0]|0)==0):0){l=m;q=pa;o=qa;i=K;break d}r=$g(i,rf)|0;i=c[rf>>2]|0;a[l+2>>0]=i;a[l+3>>0]=0;c[l+28>>2]=0;if(r|0){oa=1492;break c}if((i|0)!=0&(c[p+8>>2]|0)>0){i=0;oa=28}else{l=m;q=pa;o=qa;i=0}break}case 33:{s=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;i=ch(s,rf)|0;if(i|0){oa=1519;break c}do if(!(c[rf>>2]|0)){if((a[s>>0]|0)==0?(ke=c[s+116>>2]|0,a[ke+8>>0]|0):0){i=e[ke+24>>1]|0;l=a[s+68>>0]|0;if(l<<24>>24>0){q=l<<24>>24;o=0;r=0;l=0;do{i=Yv(i|0,l|0,e[(c[s+120+(r<<2)>>2]|0)+24>>1]|0,0)|0;l=L()|0;o=o+1<<24>>24;r=o&255}while((r|0)<(q|0))}else l=0;if(l>>>0<0|(l|0)==0&i>>>0<8)if(l>>>0<0|(l|0)==0&i>>>0<2)i=0;else{o=40;do{o=(o&65535)+65526|0;i=cw(i|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&i>>>0<8);o=o&65535;oa=1514}else{if(l>>>0>0|(l|0)==0&i>>>0>255){o=40;do{o=(o&65535)+40|0;oa=i;i=bw(i|0,l|0,4)|0;na=l;l=L()|0}while(na>>>0>0|(na|0)==0&oa>>>0>4095);o=o&65535}else o=40;if(l>>>0>0|(l|0)==0&i>>>0>15){do{o=(o&65535)+10&65535;oa=i;i=bw(i|0,l|0,1)|0;na=l;l=L()|0}while(na>>>0>0|(na|0)==0&oa>>>0>31);oa=1514}else oa=1514}if((oa|0)==1514){oa=0;i=(o&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)|0}if((c[p+12>>2]|0)>(i<<16>>16|0)){c[rf>>2]=1;break}}l=m;q=pa;o=qa;i=0;break d}while(0);i=0;oa=28;break}case 35:case 34:{c[uc>>2]=(c[uc>>2]|0)+1;oa=1521;break}case 36:{oa=1521;break}case 3:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[l+40>>2]|0;if(a[i+56>>0]|0){c[rf>>2]=0;i=fi(c[i+20>>2]|0,rf)|0;i=(i|0)==0&(c[rf>>2]|0)!=0?101:i;oa=2160;break d}q=i+36|0;o=c[q>>2]|0;oa=o+4|0;c[q>>2]=c[oa>>2];c[oa>>2]=0;do if(!((o|0)==0|(c[i+40>>2]|0)!=0)){if(c[Ze>>2]|0){Xd(Cf,o);break}oa=o;if((c[_e>>2]|0)>>>0<=oa>>>0?(c[$e>>2]|0)>>>0>oa>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{oa=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);i=(c[q>>2]|0)==0?101:0;oa=2160;break}case 5:case 4:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=i;i=Xa[c[p+16>>2]&255](c[i+40>>2]|0,c[p+12>>2]|0)|0;oa=2160;break}case -124:case -125:{t=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+8>>2]|0;o=pa+(w*40|0)|0;s=p+2|0;if(b[s>>1]&1)c[rc>>2]=(c[rc>>2]|0)+1;q=pa+(w*40|0)+8|0;l=b[q>>1]|0;do if(!(l&16384))i=z;else{r=pa+(w*40|0)+12|0;i=(c[o>>2]|0)+(c[r>>2]|0)|0;if((i|0)<1)if(!(l&16)){i=z;break}else i=1;if(Eg(o,i,1)|0){oa=2221;break c}gw((c[pa+(w*40|0)+16>>2]|0)+(c[r>>2]|0)|0,0,c[o>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[o>>2]|0);b[q>>1]=b[q>>1]&-16897;i=a[p>>0]|0}while(0);if(i<<24>>24==-125){t=c[t+40>>2]|0;F=pa+(w*40|0)+16|0;l=c[F>>2]|0;o=l+1|0;na=a[o>>0]|0;i=na&255;do if(na<<24>>24<=-1){q=d[l+2>>0]|0;if(!(q&128)){i=i<<7&16256|q;break}l=d[l+3>>0]|0;if(!(l&128)){i=(i<<14|l)&2080895|q<<7&16256;break}else{Of(o,rf)|0;na=rf;i=c[na>>2]|0;i=((i|0)==(i|0)?0==(c[na+4>>2]|0):0)?i:-1;break}}while(0);do if(!((i|0)!=7&(i+-1|0)>>>0<9)){l=t+60|0;if((i|0)<11|(i&1|0)==0){a[l>>0]=0;break}else{a[l>>0]=a[l>>0]&2;break}}else{na=t+60|0;a[na>>0]=a[na>>0]&1}while(0);E=pa+(w*40|0)+12|0;D=c[E>>2]|0;o=1;i=D;l=((D|0)<0)<<31>>31;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0)break;else o=o+1|0}s=D+8|0;q=o+D|0;B=t+4|0;l=c[B>>2]|0;do if(!l)i=0;else{if(!(c[t+40>>2]|0)){i=t+44|0;na=c[i>>2]|0;if((na|0)<=(l|0)?!(c[14768]|0?(na|0)>(c[t>>2]|0):0):0){i=0;break}}else{na=c[t+48>>2]|0;if((na|0)==0|(na+s|0)<=(l|0)){i=0;break}i=t+44|0}na=Vh(t)|0;c[i>>2]=0;c[t+48>>2]=0;i=na}while(0);o=t+36|0;l=t+44|0;c[l>>2]=(c[l>>2]|0)+q;l=t+8|0;if((q|0)>(c[l>>2]|0))c[l>>2]=q;A=t+40|0;l=c[A>>2]|0;r=l;if(l){C=t+48|0;q=c[C>>2]|0;y=q+s|0;z=t+52|0;s=c[z>>2]|0;if((y|0)>(s|0)){q=c[o>>2]|0;x=((y|0)<0)<<31>>31;w=s;t=((s|0)<0)<<31>>31;do{w=cw(w|0,t|0,1)|0;t=L()|0}while((t|0)<(x|0)|(t|0)==(x|0)&w>>>0<y>>>0);s=(q|0)==0?-1:q-r|0;q=c[B>>2]|0;r=((q|0)<0)<<31>>31;na=(t|0)>(r|0)|(t|0)==(r|0)&w>>>0>q>>>0;q=na?q:w;r=na?r:t;na=(r|0)<(x|0)|(r|0)==(x|0)&q>>>0<y>>>0;q=na?y:q;r=sb(l,q,na?x:r)|0;if(!r){oa=2221;break c}if((s|0)>-1)c[o>>2]=r+s;c[A>>2]=r;c[z>>2]=q;l=r;q=c[C>>2]|0}l=l+q|0;c[C>>2]=q+(D+15&-8);q=c[o>>2]|0;if(q)c[l+4>>2]=q-r}else{na=Sv(s|0,((s|0)<0)<<31>>31|0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){oa=2221;break c}do if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;if(!l){oa=2221;break c}}else{r=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;l=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,q|0,r|0,((r|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](r)|0;if(!l){oa=2221;break c}q=Wa[c[29352>>2]&127](l)|0;q=(c[14978]|0)+q|0;c[14978]=q;if(q>>>0>(c[14982]|0)>>>0)c[14982]=q;q=(c[14981]|0)+1|0;c[14981]=q;if(q>>>0<=(c[14987]|0)>>>0)break;c[14987]=q}while(0);c[l+4>>2]=c[o>>2]}ew(l+8|0,c[F>>2]|0,c[E>>2]|0)|0;c[l>>2]=c[E>>2];c[o>>2]=l}else{na=c[pa+(w*40|0)+12>>2]|0;i=Ab;c[i>>2]=na;c[i+4>>2]=((na|0)<0)<<31>>31;c[Hd>>2]=c[pa+(w*40|0)+16>>2];c[Bb>>2]=pa+((c[p+12>>2]|0)*40|0);b[Cb>>1]=c[p+16>>2];i=e[s>>1]|0;if(!(i&16))l=0;else l=c[t+32>>2]|0;i=ah(c[t+40>>2]|0,Hd,i&10,l)|0;c[t+28>>2]=0}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -123:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;o=c[l+40>>2]|0;c[Hd>>2]=c[l+44>>2];b[vc>>1]=c[p+12>>2];a[wc>>0]=0;c[xc>>2]=pa+((c[p+8>>2]|0)*40|0);i=Xg(o,Hd,0,0,0,rf)|0;if(i|0){oa=2226;break c}if((c[rf>>2]|0)==0?(me=bh(o,4)|0,me|0):0){i=me;oa=2226;break c}c[l+28>>2]=0;c[l+32>>2]=0;l=m;q=pa;o=qa;i=0;break}case -121:case -122:{s=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=s+40|0;if(a[c[i>>2]>>0]|0?(ne=sh(s)|0,ne|0):0){i=ne;oa=3855;break c}if(a[s+2>>0]|0){i=c[p+8>>2]|0;l=pa+(i*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=1;l=m;q=pa;o=qa;i=0;break d}else{Dg(pa+(i*40|0)|0);l=m;q=pa;o=qa;i=0;break d}}i=c[i>>2]|0;bg(i);l=c[i+44>>2]|0;b[jb>>1]=0;c[kb>>2]=Cf;c[lb>>2]=0;na=e[i+48>>1]|0;o=c[i+40>>2]|0;ma=(c[(c[i+116>>2]|0)+60>>2]|0)-o|0;if(l>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(i,0,l,Hd)|0;if(i|0){oa=2256;break c}o=c[Eb>>2]|0}else{c[Eb>>2]=o;b[jb>>1]=4112;c[Gb>>2]=l}na=a[o>>0]|0;i=na&255;do if(na<<24>>24<=-1){l=d[o+1>>0]|0;if(!(l&128)){i=i<<7&16256|l;oa=2241;break}q=d[o+2>>0]|0;if(q&128){Of(o,rf)|0;na=rf;i=c[na>>2]|0;if((i|0)==(i|0)?0==(c[na+4>>2]|0):0){oa=2241;break}else{i=-1;break}}else{i=(i<<14|q)&2080895|l<<7&16256;oa=2241;break}}else oa=2241;while(0);if((oa|0)==2241){oa=0;if(i>>>0<3){oa=2253;break c}}if(i>>>0>(c[Gb>>2]|0)>>>0){oa=2253;break c}o=c[Eb>>2]|0;r=o+(i+-1)|0;na=a[r>>0]|0;l=na&255;do if(na<<24>>24<=-1){o=d[o+i>>0]|0;if(!(o&128)){l=l<<7&16256|o;break}q=d[r+2>>0]|0;if(!(q&128)){l=(l<<14|q)&2080895|o<<7&16256;break}else{Of(r,rf)|0;na=rf;l=c[na>>2]|0;l=((l|0)==(l|0)?0==(c[na+4>>2]|0):0)?l:-1;break}}while(0);if((l|0)==7|(l+-1|0)>>>0>8){oa=2253;break c}o=d[3520+l>>0]|0;q=c[Gb>>2]|0;if(q>>>0<(i+o|0)>>>0){oa=2253;break c}Ug((c[Eb>>2]|0)+(q-o)|0,l,Td)|0;q=Td;o=c[q>>2]|0;q=c[q+4>>2]|0;if(!((b[jb>>1]&9216)==0&(c[lb>>2]|0)==0))Cg(Hd);if((a[p>>0]|0)==-122){l=c[(c[oc>>2]|0)+(c[p+12>>2]<<2)>>2]|0;a[l+2>>0]=0;i=l+64|0;c[i>>2]=o;c[i+4>>2]=q;a[l+3>>0]=1;c[l+24>>2]=c[p+16>>2];c[l+36>>2]=s;l=m;q=pa;o=qa;i=0;break d}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=0;break}case 40:case 39:case 38:case 37:{o=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;c[Hd>>2]=c[o+44>>2];b[zc>>1]=c[p+16>>2];a[Ac>>0]=((z&255)<39)<<31>>31;c[Bc>>2]=pa+((c[p+12>>2]|0)*40|0);o=c[o+40>>2]|0;bg(o);i=c[o+44>>2]|0;if((i|0)<1){oa=2267;break c}b[Ea>>1]=0;c[Fa>>2]=Cf;c[Ga>>2]=0;na=e[o+48>>1]|0;l=c[o+40>>2]|0;ma=(c[(c[o+116>>2]|0)+60>>2]|0)-l|0;if(i>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(o,0,i,rf)|0;if(i|0){oa=2274;break c}i=c[nb>>2]|0;l=c[mb>>2]|0}else{c[mb>>2]=l;b[Ea>>1]=4112;c[nb>>2]=i}i=Fh(i,l,Hd,0)|0;if(!((b[Ea>>1]&9216)==0&(c[Ga>>2]|0)==0))Cg(rf);if((((a[p>>0]&1)==0?i+1|0:0-i|0)|0)>0){i=0;oa=28}else{l=m;q=pa;o=qa;i=0}break}case -120:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;A=i}else{lh(i)|0;A=i}B=A+8|0;b[B>>1]=1;if((c[Ha>>2]|0)>((c[ad>>2]|0)+1|0)){oa=2280;break c}C=c[p+12>>2]|0;x=c[(c[uf>>2]|0)+(C<<4)+4>>2]|0;z=p+4|0;s=c[z>>2]|0;y=x+4|0;w=c[y>>2]|0;c[w+4>>2]=c[x>>2];if((c[w+44>>2]|0)>>>0<s>>>0){oa=2282;break c}l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,s,rf,0)|0;if(l|0){oa=2286;break c}i=c[rf>>2]|0;r=c[i+8>>2]|0;q=r+4|0;if((c[q>>2]|0)!=(s|0)){c[r+56>>2]=c[i+4>>2];c[r+72>>2]=i;c[r+52>>2]=w;c[q>>2]=s;a[r+9>>0]=(s|0)==1?100:0}o=c[y>>2]|0;c[o+4>>2]=c[x>>2];i=c[o+8>>2]|0;H:do if(i|0){I:do if(s)while(1){if((c[i+64>>2]|0)==(s|0))break I;i=c[i+24>>2]|0;if(!i)break H}while(0);i=$f(i,s,0)|0;if(i|0){j=i;oa=2301;break c}}while(0);l=x+11|0;if(a[l>>0]|0?(a[l>>0]=0,kd=c[(c[y>>2]|0)+8>>2]|0,kd|0):0){i=kd;do{do if(a[i+1>>0]&16){a[l>>0]=1;if((c[i+64>>2]|0)!=(s|0))break;a[i>>0]=1}while(0);i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(o,s,0,0)|0;if(i|0){j=i;oa=2301;break c}if(!(a[w+17>>0]|0)){i=Bh(c[r+52>>2]|0,r,c[q>>2]|0)|0;do if(r|0){l=c[r+72>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{na=c[l+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[l+16>>2]=c[na>>2];c[na>>2]=l;break}}while(0);b[B>>1]=4;na=A;c[na>>2]=0;c[na+4>>2]=0;if(!i){l=m;q=pa;o=qa;i=0;break d}else{oa=3855;break c}}t=c[y>>2]|0;c[t+4>>2]=c[x>>2];t=c[(c[t+12>>2]|0)+56>>2]|0;t=d[t+53>>0]<<16|d[t+52>>0]<<24|d[t+54>>0]<<8|d[t+55>>0];if((t|0)==(s|0)){l=Bh(c[r+52>>2]|0,r,c[q>>2]|0)|0;do if(r|0){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);if(!l)i=0;else{i=0;j=l;oa=2353;break c}}else{do if(r|0){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,t,rf,0)|0;if(l|0){oa=2319;break c}i=c[rf>>2]|0;o=c[i+8>>2]|0;l=o+4|0;if((c[l>>2]|0)!=(t|0)){c[o+56>>2]=c[i+4>>2];c[o+72>>2]=i;c[o+52>>2]=w;c[l>>2]=t;a[o+9>>0]=(t|0)==1?100:0}l=gg(w,o,1,0,s,0)|0;do if(o|0){i=c[o+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);if(l|0){i=0;j=l;oa=2353;break c}l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,t,rf,0)|0;if(l|0){oa=2329;break c}i=c[rf>>2]|0;o=c[i+8>>2]|0;l=o+4|0;if((c[l>>2]|0)==(t|0)){l=o+72|0;i=c[o+52>>2]|0}else{c[o+56>>2]=c[i+4>>2];na=o+72|0;c[na>>2]=i;c[o+52>>2]=w;c[l>>2]=t;a[o+9>>0]=(t|0)==1?100:0;l=na;i=w}o=Bh(i,o,t)|0;i=c[l>>2]|0;if(!(b[i+28>>1]&32))Df(i);else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i}if(!o)i=t;else{i=0;j=o;oa=2353;break c}}q=1073741824/((c[w+32>>2]|0)>>>0)|0;r=q+1|0;o=w+36|0;l=t;while(1){s=l+-1|0;if((s|0)!=(r|0)){if(s>>>0<2)l=0;else{l=l+-3|0;l=l-((l>>>0)%(((((c[o>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;l=((l+1|0)==(q|0)?3:2)+l|0}if((l|0)!=(s|0))break}l=s}o=c[y>>2]|0;c[o+4>>2]=c[x>>2];o=c[o+12>>2]|0;l=c[o+56>>2]|0;o=c[o+72>>2]|0;q=c[o+20>>2]|0;do if(!(b[o+28>>1]&4))oa=2344;else{if((c[q+24>>2]|0)>>>0<(c[o+24>>2]|0)>>>0){oa=2344;break}if(!(c[q+96>>2]|0))break;j=Ve(o)|0;oa=2348}while(0);do if((oa|0)==2344){j=c[q+40>>2]|0;if(j|0){oa=2353;break c}if((c[q+148>>2]|0)>>>0>(c[q+152>>2]|0)>>>0){j=Wf(o)|0;oa=2348;break}else{j=Xf(o)|0;oa=2348;break}}while(0);if((oa|0)==2348?(oa=0,j|0):0){oa=2353;break c}a[l+52>>0]=s>>>24;a[l+53>>0]=s>>>16;a[l+54>>0]=s>>>8;a[l+55>>0]=s;b[B>>1]=4;na=A;c[na>>2]=i;c[na+4>>2]=((i|0)<0)<<31>>31;if(!i){l=m;q=pa;o=qa;i=0}else{q=c[z>>2]|0;o=c[(c[uf>>2]|0)+(C<<4)+12>>2]|0;k=c[o+16>>2]|0;if(k|0)do{l=(c[k+8>>2]|0)+28|0;if((c[l>>2]|0)==(i|0))c[l>>2]=q;k=c[k>>2]|0}while((k|0)!=0);k=c[o+32>>2]|0;if(k|0)do{l=(c[k+8>>2]|0)+44|0;if((c[l>>2]|0)==(i|0))c[l>>2]=q;k=c[k>>2]|0}while((k|0)!=0);k=C+1&255;l=m;q=pa;o=qa;i=0}break}case -119:{c[rf>>2]=0;l=c[(c[uf>>2]|0)+(c[p+8>>2]<<4)+4>>2]|0;r=c[p+4>>2]|0;t=p+12|0;q=(c[t>>2]|0)==0?0:rf;o=l+4|0;s=c[o>>2]|0;c[s+4>>2]=c[l>>2];i=c[s+8>>2]|0;J:do if(i){K:do if(r)while(1){if((c[i+64>>2]|0)==(r|0))break K;i=c[i+24>>2]|0;if(!i){oa=2373;break J}}while(0);i=$f(i,r,0)|0;if(!i)oa=2373}else oa=2373;while(0);if((oa|0)==2373){oa=0;l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,ld=c[(c[o>>2]|0)+8>>2]|0,ld|0):0){i=ld;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(r|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(s,r,0,q)|0}l=c[t>>2]|0;if(l|0?(oe=c[rf>>2]|0,c[rc>>2]=(c[rc>>2]|0)+oe,pe=pa+(l*40|0)|0,(l|0)>0):0){la=pe;la=Sv(c[la>>2]|0,c[la+4>>2]|0,oe|0,((oe|0)<0)<<31>>31|0)|0;ma=L()|0;na=pe;c[na>>2]=la;c[na+4>>2]=ma}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -118:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((a[i>>0]|0)==1){wg(Cf,c[i+40>>2]|0);l=m;q=pa;o=qa;i=K;break d}q=c[i+40>>2]|0;l=c[q+8>>2]|0;q=c[q+64>>2]|0;o=l+4|0;r=c[o>>2]|0;c[r+4>>2]=c[l>>2];i=c[r+8>>2]|0;L:do if(i|0){M:do if(q)while(1){if((c[i+64>>2]|0)==(q|0))break M;i=c[i+24>>2]|0;if(!i)break L}while(0);i=$f(i,q,0)|0;if(i|0){oa=3855;break c}}while(0);l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,jd=c[(c[o>>2]|0)+8>>2]|0,jd|0):0){i=jd;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(q|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(r,q,0,0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -117:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;c[rf>>2]=0;l=Wg(c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0,rf,c[p+12>>2]|0)|0;if(l|0){oa=2406;break c}q=c[rf>>2]|0;l=i;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;i=0;break}case -116:{a[Cc>>0]=(a[Cc>>0]|0)+1<<24>>24;i=nd(Cf,c[p+16>>2]|0,0,0,0)|0;a[Cc>>0]=(a[Cc>>0]|0)+-1<<24>>24;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -115:{i=c[p+4>>2]|0;l=p+16|0;if(!(c[l>>2]|0)){dh(c[(c[uf>>2]|0)+(i<<4)+12>>2]|0);c[hf>>2]=c[hf>>2]&-17;i=eh(Cf,i,mf,1)|0;c[hf>>2]=c[hf>>2]|1;na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8}else{c[rf>>2]=Cf;c[Ia>>2]=i;c[Ja>>2]=mf;c[Ka>>2]=0;l=c[l>>2]|0;c[Ne>>2]=c[(c[uf>>2]|0)+(i<<4)>>2];c[Ne+4>>2]=34585;c[Ne+8>>2]=l;l=dd(Cf,34599,Ne)|0;if(!l){oa=2424;break c}a[ob>>0]=1;c[pb>>2]=0;c[qb>>2]=0;i=nd(Cf,l,77,rf,0)|0;i=(i|0)==0?c[pb>>2]|0:i;if(!(i|c[qb>>2])){c[Oe>>2]=32306;c[Oe+4>>2]=89378;c[Oe+8>>2]=31517;Db(11,32001,Oe);i=11}do if(!(c[Ze>>2]|0)){na=l;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[l>>2]=c[af>>2];c[af>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(Cf,l);while(0);a[ob>>0]=0}switch(i|0){case 7:{oa=2424;break c}case 0:break;default:{oa=2425;break c}}l=m;q=pa;o=qa;i=0;break}case -114:{i=gh(Cf,c[p+4>>2]|0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -113:{i=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+8|0,c[p+16>>2]|0,0)|0;do if(i|0){if(c[Ze>>2]|0){Vi(Cf,i);break}ma=i+32|0;na=(c[ma>>2]|0)+-1|0;c[ma>>2]=na;if(!na)Vi(Cf,i)}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K;break}case -112:{o=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+24|0,c[p+16>>2]|0,0)|0;do if(o|0){l=(c[o+12>>2]|0)+8|0;i=c[l>>2]|0;if((i|0)==(o|0)){c[l>>2]=c[o+20>>2];i=c[o+36>>2]|0;if(i|0)ni(Cf,i);i=c[o+40>>2]|0;if(i|0)ri(Cf,i);i=c[o+16>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);na=o+55|0;N:do if((d[na>>0]|d[na+1>>0]<<8)&16?(qe=c[o+32>>2]|0,qe|0):0){if(c[Ze>>2]|0){Xd(Cf,qe);break}i=qe;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[qe>>2]=c[af>>2];c[af>>2]=qe;break N}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](qe);break}else{na=Wa[c[29352>>2]&127](qe)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](qe);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,o);break}na=o;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}O:do if(i|0){while(1){l=c[i+20>>2]|0;if((l|0)==(o|0))break;if(!l)break O;else i=l}c[i+20>>2]=c[o+20>>2]}while(0);i=c[o+36>>2]|0;if(i|0)ni(Cf,i);i=c[o+40>>2]|0;if(i|0)ri(Cf,i);i=c[o+16>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);na=o+55|0;P:do if((d[na>>0]|d[na+1>>0]<<8)&16?(re=c[o+32>>2]|0,re|0):0){if(c[Ze>>2]|0){Xd(Cf,re);break}i=re;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[re>>2]=c[af>>2];c[af>>2]=re;break P}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](re);break}else{na=Wa[c[29352>>2]&127](re)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](re);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,o);break}na=o;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K;break}case -110:{x=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+40|0,c[p+16>>2]|0,0)|0;if(!x){l=m;q=pa;o=qa;i=K}else{q=c[x+20>>2]|0;Q:do if((q|0)==(c[x+24>>2]|0)){w=x+4|0;t=c[w>>2]|0;r=c[q+20>>2]|0;if(!r){l=q+12|0;i=q+16|0}else{l=a[t>>0]|0;if(!(l<<24>>24))i=0;else{i=0;o=t;do{o=o+1|0;i=G(i+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[o>>0]|0}while(l<<24>>24!=0)}i=(i>>>0)%((c[q+8>>2]|0)>>>0)|0;l=r+(i<<3)|0;i=r+(i<<3)+4|0}l=c[l>>2]|0;R:do if(!l)i=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;l=l+-1|0;q=c[i+12>>2]|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-s|0;if(!(na<<24>>24==0|(o|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(o|0)!=0))}if(!o)break R;if(!l){i=59292;break}}}while(0);i=(c[i+8>>2]|0)+68|0;while(1){na=c[i>>2]|0;l=na+32|0;if((na|0)==(x|0))break;else i=l}c[i>>2]=c[l>>2];Xi(Cf,c[x+28>>2]|0);i=c[x>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[w>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+12>>2]|0;if(i|0)ni(Cf,i);r=c[x+16>>2]|0;S:do if(r|0){q=r+4|0;i=c[r>>2]|0;if((c[q>>2]|0)>0){o=0;do{i=c[i+(o<<3)>>2]|0;T:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break T}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=o+1|0;i=c[r>>2]|0}while((o|0)<(c[q>>2]|0))}U:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break U}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,r);break}i=r;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[r>>2]=c[af>>2];c[af>>2]=r;break S}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{na=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,x);break}i=x;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[x>>2]=c[af>>2];c[af>>2]=x;break Q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{na=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}else{Xi(Cf,c[x+28>>2]|0);i=c[x>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+4>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+12>>2]|0;if(i|0)ni(Cf,i);r=c[x+16>>2]|0;V:do if(r|0){q=r+4|0;i=c[r>>2]|0;if((c[q>>2]|0)>0){o=0;do{i=c[i+(o<<3)>>2]|0;W:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break W}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=o+1|0;i=c[r>>2]|0}while((o|0)<(c[q>>2]|0))}X:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break X}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,r);break}i=r;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[r>>2]=c[af>>2];c[af>>2]=r;break V}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{na=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,x);break}na=x;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[x>>2]=c[af>>2];c[af>>2]=x;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{na=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K}break}case -109:{w=c[p+8>>2]|0;C=c[p+4>>2]|0;D=pa+(C*40|0)|0;i=c[(c[uf>>2]|0)+(e[p+2>>1]<<4)+4>>2]|0;x=(c[p+16>>2]|0)+4|0;E=pa+((c[p+12>>2]|0)*40|0)|0;na=(c[E>>2]|0)+1|0;z=c[i+4>>2]|0;y=z+4|0;B=(c[y>>2]|0)+32|0;A=c[B>>2]|0;B=c[B+4>>2]|0;c[y>>2]=c[i>>2];c[Td>>2]=z;c[Dc>>2]=c[z>>2];i=c[z+44>>2]|0;c[Ec>>2]=i;c[Fc>>2]=na;c[Jc>>2]=0;c[Kc>>2]=0;c[Gc>>2]=0;c[Gc+4>>2]=0;c[Gc+8>>2]=0;c[Gc+12>>2]=0;c[Gc+16>>2]=0;c[Mc>>2]=Yd;c[Lc>>2]=0;c[Nc>>2]=100;c[Oc>>2]=1e9;c[Pc>>2]=0;a[Qc>>0]=0;a[Rc>>0]=1;Y:do if(i){i=i>>>3;q=i+1|0;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;if(!i)oa=2649}else{o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<=i>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(i){l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else oa=2649}if((oa|0)==2649){c[Jc>>2]=0;c[Hc>>2]=1;oa=2710;break}gw(i|0,0,q|0)|0;c[Jc>>2]=i;t=z+32|0;q=c[t>>2]|0;if((c[14813]|0)>=(q|0)?(se=c[14819]|0,(se|0)!=0):0){c[14819]=c[se>>2];na=c[14820]|0;c[14820]=na+-1;c[14821]=(na|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<q>>>0)c[14986]=q;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0){c[14983]=i;i=se}else i=se}else oa=2656;Z:do if((oa|0)==2656){oa=0;na=Sv(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;ma=L()|0;_:do if(!(ma>>>0>0|(ma|0)==0&na>>>0>2147483390)){do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;if(!i)break _}else{l=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;i=59064;o=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](l)|0;if(!i)break _;l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);l=Wa[c[29352>>2]&127](i)|0;if((c[14986]|0)>>>0<q>>>0)c[14986]=q;l=(c[14980]|0)+l|0;c[14980]=l;if(l>>>0<=(c[14984]|0)>>>0)break Z;c[14984]=l;break Z}while(0);c[Kc>>2]=0;c[Hc>>2]=1;break Y}while(0);c[Kc>>2]=i;i=(1073741824/((c[t>>2]|0)>>>0)|0)+1|0;if(i>>>0<=(c[Ec>>2]|0)>>>0){na=(c[Jc>>2]|0)+(i>>>3)|0;a[na>>0]=1<<(i&7)|d[na>>0]}c[Ic>>2]=35261;o=z+12|0;s=c[(c[o>>2]|0)+56>>2]|0;si(Td,1,d[s+33>>0]<<16|d[s+32>>0]<<24|d[s+34>>0]<<8|d[s+35>>0],d[s+37>>0]<<16|d[s+36>>0]<<24|d[s+38>>0]<<8|d[s+39>>0]);c[Ic>>2]=0;s=z+17|0;if(!(a[s>>0]|0)){na=c[(c[o>>2]|0)+56>>2]|0;if(d[na+65>>0]<<16|d[na+64>>0]<<24|d[na+66>>0]<<8|d[na+67>>0]|0)ti(Td,35322,Re)}else{if((w|0)>0){i=0;l=0;do{na=c[x+(i<<2)>>2]|0;l=(l|0)<(na|0)?na:l;i=i+1|0}while((i|0)!=(w|0))}else l=0;i=c[(c[o>>2]|0)+56>>2]|0;i=d[i+53>>0]<<16|d[i+52>>0]<<24|d[i+54>>0]<<8|d[i+55>>0];if((l|0)!=(i|0)){c[Qe>>2]=l;c[Qe+4>>2]=i;ti(Td,35277,Qe)}}l=(c[y>>2]|0)+32|0;ma=l;na=c[ma+4>>2]|0;i=l;c[i>>2]=c[ma>>2]&-2097153;c[i+4>>2]=na;i=c[Fc>>2]|0;if((w|0)>0&(i|0)!=0){r=0;do{o=x+(r<<2)|0;q=c[o>>2]|0;if(q){if((q|0)>1&(a[s>>0]|0)!=0){i=eg(c[Td>>2]|0,q,rf,Hd)|0;$:do if((i|0)<7){switch(i|0){case 0:break;default:{oa=2689;break $}}i=a[rf>>0]|0;l=c[Hd>>2]|0;if(i<<24>>24==1&(l|0)==0)break;c[Te>>2]=q;c[Te+4>>2]=1;c[Te+8>>2]=0;c[Te+12>>2]=i&255;c[Te+16>>2]=l;ti(Td,35625,Te)}else{if((i|0)<3082)switch(i|0){case 7:break;default:{oa=2689;break $}}else switch(i|0){case 3082:break;default:{oa=2689;break $}}c[Hc>>2]=1;oa=2689}while(0);if((oa|0)==2689){oa=0;c[Se>>2]=q;ti(Td,35596,Se)}i=c[o>>2]|0}else i=q;ui(Td,i,ee,-1,2147483647)|0;i=c[Fc>>2]|0}r=r+1|0}while((r|0)<(w|0)&(i|0)!=0);l=(c[y>>2]|0)+32|0}na=l;c[na>>2]=A;c[na+4>>2]=B;if((i|0)!=0&(c[Ec>>2]|0)!=0){r=z+36|0;q=1;do{l=q>>>3;o=1<<(q&7);do if(!(o&d[(c[Jc>>2]|0)+l>>0])){if(q>>>0<2)i=0;else{i=q+-2|0;i=i-((i>>>0)%(((((c[r>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[t>>2]|0)>>>0)|0|0)?3:2)+i|0}if((i|0)==(q|0)?a[s>>0]|0:0)break;c[Ue>>2]=q;ti(Td,35377,Ue);if(o&d[(c[Jc>>2]|0)+l>>0]|0)oa=2704}else oa=2704;while(0);do if((oa|0)==2704){oa=0;if(q>>>0<2)i=0;else{i=q+-2|0;i=i-((i>>>0)%(((((c[r>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[t>>2]|0)>>>0)|0|0)?3:2)+i|0}if((i|0)!=(q|0))break;if(!(a[s>>0]|0))break;c[We>>2]=q;ti(Td,35399,We)}while(0);q=q+1|0}while(c[Fc>>2]|0?q>>>0<=(c[Ec>>2]|0)>>>0:0);oa=2710}else oa=2710}else oa=2710;while(0);aa:do if((oa|0)==2710?(oa=0,pd=c[Kc>>2]|0,pd|0):0){i=pd;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[pd>>2]=c[14819];c[14819]=pd;na=(c[14820]|0)+1|0;c[14820]=na;c[14821]=(na|0)<(c[14815]|0)&1;break aa}else{i=Wa[c[29352>>2]&127](pd)|0;break}else i=Wa[c[29352>>2]&127](pd)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](pd);break}else{na=Wa[c[29352>>2]&127](pd)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](pd);break}}while(0);i=c[Jc>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);if(!(c[Hc>>2]|0))r=c[Gc>>2]|0;else{if(a[Rc>>0]&4){i=c[Lc>>2]|0;l=c[Mc>>2]|0;ba:do if(l|0){do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break ba}o=l;if((c[i+304>>2]|0)>>>0<=o>>>0){if((c[i+308>>2]|0)>>>0<=o>>>0)break;na=i+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break ba}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);a[Rc>>0]=a[Rc>>0]&-5}c[Nc>>2]=0;c[Pc>>2]=0;c[Mc>>2]=0;r=(c[Gc>>2]|0)+1|0;c[Gc>>2]=r}q=(r|0)==0;if(!q){i=c[Mc>>2]|0;if(((i|0)!=0?(a[i+(c[Pc>>2]|0)>>0]=0,(c[Oc>>2]|0)!=0):0)?(a[Rc>>0]&4)==0:0)i=$d(Lc)|0;else oa=2756}else{if(a[Rc>>0]&4){i=c[Lc>>2]|0;l=c[Mc>>2]|0;ca:do if(l|0){do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break ca}o=l;if((c[i+304>>2]|0)>>>0>o>>>0)break;if((c[i+308>>2]|0)>>>0<=o>>>0)break;oa=i+300|0;c[l>>2]=c[oa>>2];c[oa>>2]=l;break ca}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);a[Rc>>0]=a[Rc>>0]&-5}c[Nc>>2]=0;c[Pc>>2]=0;c[Mc>>2]=0;oa=2756}if((oa|0)==2756){oa=0;i=c[Mc>>2]|0}l=pa+(C*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=1;else Dg(D);if(!q){if(!i){l=p;j=h;i=zf;oa=3892;break a}la=r+-1|0;ma=E;la=Tv(c[ma>>2]|0,c[ma+4>>2]|0,la|0,((la|0)<0)<<31>>31|0)|0;ma=L()|0;na=E;c[na>>2]=la;c[na+4>>2]=ma;yc(D,i,-1,1,90)|0}if((b[l>>1]&2)!=0?(a[pa+(C*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(D,sd)|0;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case -108:{i=c[p+4>>2]|0;l=c[p+8>>2]|0;if((b[pa+(i*40|0)+8>>1]&16)==0?hh(pa+(i*40|0)|0)|0:0){l=p;j=h;i=zf;oa=3892;break a}t=c[pa+(i*40|0)+16>>2]|0;s=pa+(l*40|0)|0;r=c[s>>2]|0;s=c[s+4>>2]|0;q=t+24|0;l=b[q>>1]|0;if(l<<16>>16){na=t+16|0;i=c[na>>2]|0;b[q>>1]=l+-1<<16>>16;c[na>>2]=i+16;if(!i){l=m;q=pa;o=qa;i=K;break d}}else{o=c[t+4>>2]|0;da:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))oa=2779;else{l=m;q=pa;o=qa;i=K;break d}else{do if((e[o+276>>1]|0)>=1016){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break da}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break da}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;oa=2779}while(0);if((oa|0)==2779){oa=0;i=_d(o,1016,0)|0}if(!i){l=m;q=pa;o=qa;i=K;break d}c[i>>2]=c[t>>2];c[t>>2]=i;b[q>>1]=62;c[t+16>>2]=i+24;i=i+8|0}l=i;c[l>>2]=r;c[l+4>>2]=s;c[i+8>>2]=0;l=t+12|0;o=c[l>>2]|0;if(!o)c[t+8>>2]=i;else{na=o;ma=c[na+4>>2]|0;if(!((ma|0)<(s|0)|((ma|0)==(s|0)?(c[na>>2]|0)>>>0<r>>>0:0))){na=t+26|0;b[na>>1]=b[na>>1]&-2}c[o+8>>2]=i}c[l>>2]=i;l=m;q=pa;o=qa;i=K;break}case 41:{l=c[p+4>>2]|0;B=pa+(l*40|0)|0;C=pa+(l*40|0)+8|0;i=b[C>>1]|0;do if(i&16){D=c[pa+(l*40|0)+16>>2]|0;E=D+26|0;A=b[E>>1]|0;i=A&65535;if(!(i&2)){if(!(i&1)){z=D+8|0;i=c[z>>2]|0;gw(Hd|0,0,160)|0;if(!i)i=0;else{l=0;while(1){na=i+8|0;o=i;i=c[na>>2]|0;c[na>>2]=0;if(!l)l=Hd;else{y=0;x=Hd;while(1){q=rf;ea:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=o;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[q+8>>2]=o;q=c[o+8>>2]|0;if(!q){q=o;break ea}else{na=o;o=q;q=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[q+8>>2]=l;q=l}l=c[l+8>>2]|0;if(!l){l=o;break}}c[q+8>>2]=l;o=c[Nb>>2]|0;c[x>>2]=0;y=y+1|0;q=Hd+(y<<2)|0;l=c[q>>2]|0;if(!l){l=q;break}else x=q}}c[l>>2]=o;l=c[Hd>>2]|0;if(!i){i=l;break}}}w=1;do{o=c[Hd+(w<<2)>>2]|0;if(o)if(!i)i=o;else{l=rf;fa:while(1){t=i;s=c[t>>2]|0;t=c[t+4>>2]|0;while(1){r=o;q=c[r>>2]|0;r=c[r+4>>2]|0;if(!((t|0)>(r|0)|(t|0)==(r|0)&s>>>0>q>>>0))break;c[l+8>>2]=o;l=c[o+8>>2]|0;if(!l){l=o;break fa}else{na=o;o=l;l=na}}if((t|0)<(r|0)|(t|0)==(r|0)&s>>>0<q>>>0){c[l+8>>2]=i;l=i}i=c[i+8>>2]|0;if(!i){i=o;break}}c[l+8>>2]=i;i=c[Mb>>2]|0}w=w+1|0}while((w|0)!=40);c[z>>2]=i}b[E>>1]=A|3}s=D+8|0;i=c[s>>2]|0;if(!i){i=b[C>>1]|0;break}w=i;t=c[w>>2]|0;w=c[w+4>>2]|0;na=c[i+8>>2]|0;c[s>>2]=na;if(!na){i=c[D>>2]|0;if(i|0){r=D+4|0;do{l=i;i=c[i>>2]|0;o=c[r>>2]|0;do if(!o)oa=2830;else{if(c[o+480>>2]|0){Xd(o,l);break}q=l;if((c[o+304>>2]|0)>>>0>q>>>0){oa=2830;break}if((c[o+308>>2]|0)>>>0<=q>>>0){oa=2830;break}na=o+300|0;c[l>>2]=c[na>>2];c[na>>2]=l}while(0);do if((oa|0)==2830){oa=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0)}while((i|0)!=0)}c[D>>2]=0;b[D+24>>1]=0;c[s>>2]=0;c[D+12>>2]=0;c[D+20>>2]=0;b[E>>1]=1}l=c[p+12>>2]|0;i=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(!(b[l>>1]&9216)){o=i;c[o>>2]=t;c[o+4>>2]=w;b[l>>1]=4;l=m;o=pa;i=K;oa=21;break d}else{Pg(i,t,w);l=m;o=pa;i=K;oa=21;break d}}while(0);if(!(i&9216)){b[C>>1]=1;i=K;oa=20;break d}else{Dg(B);i=K;oa=20;break d}}case 42:{l=c[p+4>>2]|0;i=pa+((c[p+12>>2]|0)*40|0)|0;J=c[p+16>>2]|0;if((b[pa+(l*40|0)+8>>1]&16)==0?hh(pa+(l*40|0)|0)|0:0){l=p;j=h;i=zf;oa=3892;break a}I=pa+(l*40|0)+16|0;if(J){B=c[I>>2]|0;H=i;F=c[H>>2]|0;H=c[H+4>>2]|0;C=B+28|0;if((c[C>>2]|0)!=(J|0)){D=B+8|0;l=c[D>>2]|0;if(l|0){A=B+20|0;E=B+26|0;if(!(b[E>>1]&1)){gw(Hd|0,0,160)|0;z=l;l=0;do{na=z+8|0;o=z;z=c[na>>2]|0;c[na>>2]=0;if(!l)l=Hd;else{y=0;x=Hd;while(1){q=rf;ga:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=o;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[q+8>>2]=o;q=c[o+8>>2]|0;if(!q){q=o;break ga}else{na=o;o=q;q=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[q+8>>2]=l;q=l}l=c[l+8>>2]|0;if(!l){l=o;break}}c[q+8>>2]=l;o=c[Ub>>2]|0;c[x>>2]=0;y=y+1|0;q=Hd+(y<<2)|0;l=c[q>>2]|0;if(!l){l=q;break}else x=q}}c[l>>2]=o;l=c[Hd>>2]|0}while((z|0)!=0);x=1;do{q=c[Hd+(x<<2)>>2]|0;do if(q){if(!l){l=q;break}o=rf;ha:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=q;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[o+8>>2]=q;o=c[q+8>>2]|0;if(!o){o=q;break ha}else{na=q;q=o;o=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[o+8>>2]=l;o=l}l=c[l+8>>2]|0;if(!l){l=q;break}}c[o+8>>2]=l;l=c[ic>>2]|0}while(0);x=x+1|0}while((x|0)!=40)}o=c[A>>2]|0;ia:do if(!o){s=A;oa=2889}else{while(1){x=o+8|0;r=o+12|0;o=c[r>>2]|0;if(!o)break;wi(o,Hd,Td);c[r>>2]=0;o=rf;w=c[Hd>>2]|0;ja:do{t=w;s=c[t>>2]|0;t=c[t+4>>2]|0;while(1){r=l;q=c[r>>2]|0;r=c[r+4>>2]|0;if(!((t|0)>(r|0)|(t|0)==(r|0)&s>>>0>q>>>0))break;c[o+8>>2]=l;o=c[l+8>>2]|0;if(!o){o=l;l=w;break ja}else{na=l;l=o;o=na}}if((t|0)<(r|0)|(t|0)==(r|0)&s>>>0<q>>>0){c[o+8>>2]=w;o=w}w=c[w+8>>2]|0}while((w|0)!=0);c[o+8>>2]=l;l=c[cc>>2]|0;o=c[x>>2]|0;if(!o){s=x;oa=2889;break ia}}na=l+8|0;o=c[na>>2]|0;c[rf>>2]=o;c[na>>2]=0;c[l+12>>2]=0;if(!o){c[r>>2]=l;break}q=1;while(1){na=o+8|0;c[rf>>2]=c[na>>2];c[o+12>>2]=l;l=xi(rf,q)|0;c[na>>2]=l;l=c[rf>>2]|0;if(!l)break;else{na=o;q=q+1|0;o=l;l=na}}c[r>>2]=o}while(0);ka:do if((oa|0)==2889){oa=0;t=B+24|0;q=b[t>>1]|0;la:do if(q<<16>>16){na=B+16|0;o=c[na>>2]|0;b[t>>1]=q+-1<<16>>16;c[na>>2]=o+16;c[s>>2]=o;if(!o)break ka}else{r=c[B+4>>2]|0;ma:do if(c[r+272>>2]|0){if(!(a[r+81>>0]|0))oa=2900}else{do if((e[r+276>>1]|0)>=1016){q=r+300|0;o=c[q>>2]|0;if(o|0){c[q>>2]=c[o>>2];oa=r+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=2901;break ma}q=r+296|0;o=c[q>>2]|0;if(!o){o=r+292|0;break}else{c[q>>2]=c[o>>2];oa=r+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=2901;break ma}}else o=r+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;oa=2900}while(0);if((oa|0)==2900){o=_d(r,1016,0)|0;oa=2901}do if((oa|0)==2901){oa=0;if(!o)break;c[o>>2]=c[B>>2];c[B>>2]=o;na=o+8|0;b[t>>1]=62;c[B+16>>2]=o+24;c[s>>2]=na;o=na;break la}while(0);c[s>>2]=0;break ka}while(0);na=o;c[na>>2]=0;c[na+4>>2]=0;c[o+8>>2]=0;na=l+8|0;q=c[na>>2]|0;c[rf>>2]=q;c[na>>2]=0;c[l+12>>2]=0;if(q){r=1;while(1){na=q+8|0;c[rf>>2]=c[na>>2];c[q+12>>2]=l;l=xi(rf,r)|0;c[na>>2]=l;l=c[rf>>2]|0;if(!l){l=q;break}else{na=q;r=r+1|0;q=l;l=na}}}c[o+12>>2]=l}while(0);c[D>>2]=0;c[B+12>>2]=0;b[E>>1]=b[E>>1]|1}c[C>>2]=J}l=c[B+20>>2]|0;if(l|0)do{o=c[l+12>>2]|0;if(o|0)do{r=o;q=c[r>>2]|0;r=c[r+4>>2]|0;if((r|0)<(H|0)|(r|0)==(H|0)&q>>>0<F>>>0)o=o+8|0;else{if(!((r|0)>(H|0)|(r|0)==(H|0)&q>>>0>F>>>0)){i=K;oa=28;break d}o=o+12|0}o=c[o>>2]|0}while((o|0)!=0);l=c[l+8>>2]|0}while((l|0)!=0);if((J|0)<=-1){l=m;q=pa;o=qa;i=K;break d}}t=c[I>>2]|0;s=i;r=c[s>>2]|0;s=c[s+4>>2]|0;q=t+24|0;l=b[q>>1]|0;if(l<<16>>16){na=t+16|0;i=c[na>>2]|0;b[q>>1]=l+-1<<16>>16;c[na>>2]=i+16;if(!i){l=m;q=pa;o=qa;i=K;break d}}else{o=c[t+4>>2]|0;na:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))oa=2933;else{l=m;q=pa;o=qa;i=K;break d}else{do if((e[o+276>>1]|0)>=1016){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break na}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break na}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;oa=2933}while(0);if((oa|0)==2933){oa=0;i=_d(o,1016,0)|0}if(!i){l=m;q=pa;o=qa;i=K;break d}c[i>>2]=c[t>>2];c[t>>2]=i;b[q>>1]=62;c[t+16>>2]=i+24;i=i+8|0}l=i;c[l>>2]=r;c[l+4>>2]=s;c[i+8>>2]=0;l=t+12|0;o=c[l>>2]|0;if(!o)c[t+8>>2]=i;else{na=o;ma=c[na+4>>2]|0;if(!((ma|0)<(s|0)|((ma|0)==(s|0)?(c[na>>2]|0)>>>0<r>>>0:0))){na=t+26|0;b[na>>1]=b[na>>1]&-2}c[o+8>>2]=i}c[l>>2]=i;l=m;q=pa;o=qa;i=K;break}case 45:{z=c[p+16>>2]|0;s=c[p+12>>2]|0;t=pa+(s*40|0)|0;if(b[p+2>>1]|0?(rd=c[z+20>>2]|0,od=c[nc>>2]|0,od|0):0){i=od;do{if((c[i+28>>2]|0)==(rd|0)){l=m;q=pa;o=qa;i=K;break d}i=c[i+4>>2]|0}while((i|0)!=0)}if((c[La>>2]|0)>=(c[Ma>>2]|0)){oa=2968;break c}o=pa+(s*40|0)+8|0;if(!(b[o>>1]&16)){q=z+12|0;r=c[q>>2]|0;w=r+(c[z+8>>2]|0)+((r|0)==0&1)|0;y=z+4|0;r=(r<<2)+80+(((c[y>>2]|0)+7|0)/8|0)+(w*40|0)|0;l=((r|0)<0)<<31>>31;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=2958;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<l>>>0|(0==(l|0)?(e[Xc>>1]|0)>>>0<r>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;x=i;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;x=i;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=2958}while(0);if((oa|0)==2958)x=_d(Cf,r,l)|0;if(!x){l=p;j=h;i=zf;oa=3892;break a}gw(x|0,0,r|0)|0;if(!((b[o>>1]&9216)==0?!(c[pa+(s*40|0)+24>>2]|0):0))Cg(t);b[o>>1]=1040;c[pa+(s*40|0)+16>>2]=x;c[pa+(s*40|0)+12>>2]=r;c[pa+(s*40|0)+36>>2]=93;c[x>>2]=f;c[x+60>>2]=w;r=c[q>>2]|0;c[x+64>>2]=r;c[x+48>>2]=(p-m|0)/20|0;c[x+16>>2]=c[xd>>2];c[x+56>>2]=c[va>>2];c[x+20>>2]=c[oc>>2];c[x+44>>2]=c[Ib>>2];c[x+8>>2]=c[le>>2];c[x+52>>2]=c[wb>>2];c[x+28>>2]=c[z+20>>2];m=x+80|0;l=m+(w*40|0)|0;if((l|0)==(m|0)){o=x;p=m;q=m;m=y;l=x;i=r}else{i=m;do{b[i+8>>1]=128;c[i+32>>2]=Cf;i=i+40|0}while((i|0)!=(l|0));o=x;p=m;q=m;m=y;l=x;i=r}}else{l=c[pa+(s*40|0)+16>>2]|0;q=l+80|0;o=l;p=q;m=z+4|0;i=c[z+12>>2]|0}c[La>>2]=(c[La>>2]|0)+1;c[o+4>>2]=c[nc>>2];na=zb;pa=c[na+4>>2]|0;oa=o+32|0;c[oa>>2]=c[na>>2];c[oa+4>>2]=pa;c[o+68>>2]=c[rc>>2];c[o+72>>2]=c[(c[f>>2]|0)+100>>2];c[o+40>>2]=c[Hb>>2];c[Hb>>2]=0;c[rc>>2]=0;c[nc>>2]=l;c[xd>>2]=p;p=c[o+60>>2]|0;c[va>>2]=p;c[Ib>>2]=c[o+64>>2]&65535;p=q+(p*40|0)|0;c[oc>>2]=p;p=p+(i<<2)|0;c[o+24>>2]=p;gw(p|0,0,((c[m>>2]|0)+7|0)/8|0|0)|0;p=c[z>>2]|0;c[le>>2]=p;c[wb>>2]=c[m>>2];l=p;p=p+-20|0;o=q;i=K;oa=21;break}case -107:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=c[nc>>2]|0;l=c[o+16>>2]|0;o=(c[(c[o+8>>2]|0)+((c[o+48>>2]|0)*20|0)+4>>2]|0)+(c[p+4>>2]|0)|0;q=l+(o*40|0)|0;r=i+8|0;if(b[r>>1]&9216){mh(i,q,4096);l=m;q=pa;o=qa;i=K;break d};c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];c[i+12>>2]=c[q+12>>2];c[i+16>>2]=c[q+16>>2];if(!(b[l+(o*40|0)+8>>1]&2048)){b[r>>1]=b[r>>1]&-7169|4096;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case -106:{if(!((c[Sc>>2]&524288|0)==0&0==0)){o=c[p+8>>2]|0;q=Na;o=Sv(c[q>>2]|0,c[q+4>>2]|0,o|0,((o|0)<0)<<31>>31|0)|0;q=L()|0;l=Na;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}i=c[p+8>>2]|0;l=((i|0)<0)<<31>>31;if(!(c[p+4>>2]|0)){o=Oa;o=Sv(c[o>>2]|0,c[o+4>>2]|0,i|0,l|0)|0;q=L()|0;l=Oa;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}else{o=Pa;o=Sv(c[o>>2]|0,c[o+4>>2]|0,i|0,l|0)|0;q=L()|0;l=Pa;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}}case 46:if(!(c[p+4>>2]|0)){na=Oa;if(!((c[na>>2]|0)==0&(c[na+4>>2]|0)==0)){l=m;q=pa;o=qa;i=K;break d}na=Na;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}else{na=Pa;if(!((c[na>>2]|0)==0&(c[na+4>>2]|0)==0)){l=m;q=pa;o=qa;i=K;break d}na=Na;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}case -105:{i=c[nc>>2]|0;if(!i)l=pa;else{while(1){l=c[i+4>>2]|0;if(!l)break;else i=l}l=c[i+16>>2]|0}o=c[p+4>>2]|0;t=l+(o*40|0)|0;r=l+(o*40|0)+8|0;i=b[r>>1]|0;q=i&65535;do if(!(q&4)){if(q&8|0){l=Mg(+g[t>>3])|0;o=L()|0;break}if(!(q&18)){l=0;o=0}else{l=Ng(a[l+(o*40|0)+10>>0]|0,c[l+(o*40|0)+12>>2]|0,c[l+(o*40|0)+16>>2]|0)|0;o=L()|0;i=b[r>>1]|0}}else{o=t;l=c[o>>2]|0;o=c[o+4>>2]|0}while(0);s=t;c[s>>2]=l;c[s+4>>2]=o;b[r>>1]=i&15904|4;i=c[p+8>>2]|0;r=pa+(i*40|0)|0;s=pa+(i*40|0)+8|0;q=b[s>>1]|0;l=q&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[r>>3])|0;o=L()|0;i=q;break}if(!(l&18)){l=0;o=0;i=q}else{l=Ng(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)|0;o=L()|0;i=b[s>>1]|0}}else{o=r;l=c[o>>2]|0;o=c[o+4>>2]|0;i=q}while(0);na=r;c[na>>2]=l;c[na+4>>2]=o;b[s>>1]=i&15904|4;na=t;ma=c[na+4>>2]|0;if((ma|0)<(o|0)|((ma|0)==(o|0)?(c[na>>2]|0)>>>0<l>>>0:0)){q=t;c[q>>2]=l;c[q+4>>2]=o;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 47:{i=pa+((c[p+4>>2]|0)*40|0)|0;o=i;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[p+12>>2]|0;na=Tv(l|0,o|0,na|0,((na|0)<0)<<31>>31|0)|0;oa=L()|0;c[i>>2]=na;c[i+4>>2]=oa;i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case -104:{o=c[p+4>>2]|0;q=c[p+12>>2]|0;na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=pa+(o*40|0)|0;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((o|0)<0|(o|0)==0&l>>>0<1)?(ud=pa+(q*40|0)|0,td=c[ud>>2]|0,ud=c[ud+4>>2]|0,na=(ud|0)>0|(ud|0)==0&td>>>0>0,td=na?td:0,ud=na?ud:0,na=Tv(-1,2147483647,l|0,o|0)|0,ma=L()|0,!(((ud|0)>-1|(ud|0)==-1&td>>>0>4294967295)&((ma|0)<(ud|0)|(ma|0)==(ud|0)&na>>>0<td>>>0))):0){o=Sv(td|0,ud|0,l|0,o|0)|0;q=L()|0;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}l=i;c[l>>2]=-1;c[l+4>>2]=-1;l=m;q=pa;o=qa;i=K;break}case 48:{i=pa+((c[p+4>>2]|0)*40|0)|0;o=i;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((l|0)==0&(o|0)==0))if((o|0)>0|(o|0)==0&l>>>0>0){na=Sv(l|0,o|0,-1,-1)|0;oa=L()|0;c[i>>2]=na;c[i+4>>2]=oa;i=K;oa=28}else{i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 49:{i=pa+((c[p+4>>2]|0)*40|0)|0;na=i;ma=c[na>>2]|0;na=c[na+4>>2]|0;l=Sv(ma|0,na|0,-1,-1)|0;o=L()|0;if(!((ma|0)==0&(na|0)==-2147483648)?(na=i,c[na>>2]=l,c[na+4>>2]=o,(l|0)==0&(o|0)==0):0){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case -102:case -103:{o=b[p+2>>1]|0;q=o&65535;l=(q<<2)+68|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=3026;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=3026}while(0);if((oa|0)==3026)i=_d(Cf,l,0)|0;if(!i){l=p;j=h;i=zf;oa=3892;break a}c[i+8>>2]=0;s=i+28+(q<<2)|0;c[i>>2]=s;b[s+8>>1]=1;c[s+32>>2]=Cf;c[s+24>>2]=0;s=p+16|0;c[i+4>>2]=c[s>>2];c[i+16>>2]=(p-m|0)/20|0;c[i+12>>2]=f;a[i+24>>0]=0;c[i+20>>2]=0;a[i+25>>0]=o;a[p+1>>0]=-16;c[s>>2]=i;a[p>>0]=-101;s=i;oa=3029;break}case -101:{s=c[p+16>>2]|0;oa=3029;break}case -99:case -100:{o=c[p+4>>2]|0;r=pa+(o*40|0)|0;q=p+12|0;i=c[q>>2]|0;if(!i){l=c[p+16>>2]|0;c[Qa>>2]=0;c[Qa+4>>2]=0;c[Qa+8>>2]=0;c[Qa+12>>2]=0;c[Qa+16>>2]=0;ea=Hd;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));b[Sa>>1]=1;i=pa+(o*40|0)+32|0;c[Ta>>2]=c[i>>2];c[rf>>2]=Hd;c[Ua>>2]=r;c[Va>>2]=l;ab[c[l+20>>2]&127](rf);do if((c[pa+(o*40|0)+24>>2]|0)>0){l=c[i>>2]|0;i=c[pa+(o*40|0)+20>>2]|0;if(l|0){if(c[l+480>>2]|0){Xd(l,i);break}na=i;if((c[l+304>>2]|0)>>>0<=na>>>0?(c[l+308>>2]|0)>>>0>na>>>0:0){na=l+300|0;c[i>>2]=c[na>>2];c[na>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=r;l=Hd;fa=ea+40|0;do{c[ea>>2]=c[l>>2];ea=ea+4|0;l=l+4|0}while((ea|0)<(fa|0));o=r;l=c[rb>>2]|0}else{l=pa+(i*40|0)|0;o=c[p+16>>2]|0;c[rf>>2]=0;c[rf+4>>2]=0;c[rf+8>>2]=0;c[rf+12>>2]=0;c[rf+16>>2]=0;c[rf+20>>2]=0;c[rf+24>>2]=0;c[rf+28>>2]=0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(l);c[rf>>2]=l;c[tb>>2]=r;c[ub>>2]=o;ab[c[o+24>>2]&127](rf);o=pa+((c[q>>2]|0)*40|0)|0;l=c[vb>>2]|0}if(l|0){oa=3073;break c}l=o+8|0;i=b[l>>1]|0;if((i&2)!=0?(a[o+10>>0]|0)!=sd<<24>>24:0){Ig(o,sd)|0;i=b[l>>1]|0}l=i&65535;if(l&18){i=c[o+12>>2]|0;if(l&16384)i=(c[o>>2]|0)+i|0;if((i|0)>(c[(c[o+32>>2]|0)+108>>2]|0)){oa=3891;break c}else{l=m;q=pa;o=qa;i=0}}else{l=m;q=pa;o=qa;i=0}break}case 6:{c[rf>>2]=0;c[Tc>>2]=-1;c[Uc>>2]=-1;i=Nd(Cf,c[p+4>>2]|0,c[p+8>>2]|0,Uc,Tc)|0;switch(i|0){case 0:{l=c[rf>>2]|0;break}case 5:{c[rf>>2]=1;l=1;break}default:{oa=3094;break c}}q=c[p+12>>2]|0;i=pa+(q*40|0)|0;o=((l|0)<0)<<31>>31;q=pa+(q*40|0)+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);i=i+40|0;l=c[Uc>>2]|0;o=((l|0)<0)<<31>>31;q=i+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);i=i+40|0;l=c[Tc>>2]|0;o=((l|0)<0)<<31>>31;q=i+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);l=m;q=pa;o=qa;i=0;break}case 7:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;B=i}else{lh(i)|0;B=i}i=c[p+12>>2]|0;x=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;s=x+4|0;z=c[c[s>>2]>>2]|0;o=a[z+5>>0]|0;A=o&255;i=(i|0)==-1?A:i;if((d[z+16>>0]|0)<=2){if((c[c[z+64>>2]>>2]|0)!=0?(na=z+72|0,ma=c[na+4>>2]|0,(ma|0)>0|(ma|0)==0&(c[na>>2]|0)>>>0>0):0)oa=3101}else oa=3101;if((oa|0)==3101){oa=0;i=A}if(!(a[z+15>>0]|0))l=c[z+168>>2]|0;else l=59952;if((i|0)==5)if(((l|0)!=0?((Eu(l)|0)&1073741823|0)!=0:0)?(wd=c[c[z+60>>2]>>2]|0,(a[z+13>>0]|0)==0):0)if(!(a[z+4>>0]|0))if((c[wd>>2]|0)>1?(c[wd+52>>2]|0)!=0:0){y=5;oa=3111}else{l=A;i=K}else{y=5;oa=3111}else{l=A;i=K}else{y=i;oa=3111}oa:do if((oa|0)==3111){oa=0;if((y|0)!=(A|0)){i=o<<24>>24==5;w=(y|0)==5;if(i|w){if(!(a[gd>>0]|0)){oa=3115;break c}if((c[Ha>>2]|0)>1){oa=3115;break c}if(!i){if(o<<24>>24==4)jh(z,2)|0;if(K|0){l=y;i=K;break}}else{o=z+216|0;i=c[o>>2]|0;if(!i){c[rf>>2]=0;l=z+17|0;i=a[l>>0]|0;pa:do switch(i<<24>>24){case 0:case 5:{do if(!(a[z+13>>0]|0)){i=c[z+60>>2]|0;i=Xa[c[(c[i>>2]|0)+28>>2]&255](i,1)|0;if(!i){i=a[l>>0]|0;break}else{l=y;break oa}}while(0);if(i<<24>>24==5)break pa;a[l>>0]=1;break}default:{}}while(0);i=c[z>>2]|0;i=Za[c[i+32>>2]&127](i,c[z+220>>2]|0,0,rf)|0;if((i|0)==0&(c[rf>>2]|0)!=0)i=Uf(z)|0;if(i|0){l=y;break}i=c[o>>2]|0;if(i|0){r=l;oa=3130}}else{r=z+17|0;oa=3130}do if((oa|0)==3130){oa=0;switch(a[r>>0]|0){case 0:case 1:case 2:case 3:case 5:{q=z+13|0;do if(!(a[q>>0]|0)){l=z+60|0;i=c[l>>2]|0;i=Xa[c[(c[i>>2]|0)+28>>2]&255](i,4)|0;if(!i){i=c[o>>2]|0;break}l=c[l>>2]|0;o=c[l>>2]|0;if(!o){l=y;break oa}if(!(a[q>>0]|0))Xa[c[o+32>>2]&255](l,1)|0;if((a[r>>0]|0)==5){l=y;break oa}a[r>>0]=1;l=y;break oa}while(0);a[r>>0]=4;break}default:{}}i=Pf(i,Cf,d[z+11>>0]|0,c[z+152>>2]|0,c[z+208>>2]|0)|0;c[o>>2]=0;if(!i)break;if(a[z+4>>0]|0){l=y;break oa}l=c[z+60>>2]|0;o=c[l>>2]|0;if(!o){l=y;break oa}if(!(a[z+13>>0]|0))Xa[c[o+32>>2]&255](l,1)|0;if((a[r>>0]|0)==5){l=y;break oa}a[r>>0]=1;l=y;break oa}while(0);jh(z,y)|0}l=c[s>>2]|0;t=l+22|0;i=b[t>>1]|0;b[t>>1]=w?i&-33:i|32;i=Zb(x,0,0)|0;qa:do if(!i){l=l+12|0;r=c[(c[l>>2]|0)+56>>2]|0;s=r+18|0;na=a[s>>0]|0;q=w?2:1;if(na<<24>>24==q<<24>>24?(a[r+19>>0]|0)==na<<24>>24:0){i=0;break}i=Zb(x,2,0)|0;if(i|0)break;l=c[(c[l>>2]|0)+72>>2]|0;o=c[l+20>>2]|0;do if(!(b[l+28>>1]&4))oa=3159;else{if((c[o+24>>2]|0)>>>0<(c[l+24>>2]|0)>>>0){oa=3159;break}if(!(c[o+96>>2]|0))break;id=Ve(l)|0;oa=3163}while(0);do if((oa|0)==3159){oa=0;i=c[o+40>>2]|0;if(i|0)break qa;if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){id=Wf(l)|0;oa=3163;break}else{id=Xf(l)|0;oa=3163;break}}while(0);if((oa|0)==3163?(oa=0,id|0):0){i=id;break}a[s>>0]=q;a[r+19>>0]=q;i=0}while(0);b[t>>1]=b[t>>1]&-33;l=y}else{l=y;i=K}}else{l=A;i=K}}while(0);o=(i|0)!=0;l=jh(z,o?A:l)|0;b[B+8>>1]=2562;if((l|0)==6){c[B+16>>2]=0;l=0}else{l=c[3664+(l<<2)>>2]|0;c[B+16>>2]=l;l=(Eu(l)|0)&1073741823}c[B+12>>2]=l;a[B+10>>0]=1;if(!hb)Ig(B,sd)|0;if(o){oa=3855;break c}else{l=m;q=pa;o=qa;i=0}break}case 8:{i=c[p+8>>2]|0;i=kh(mf,Cf,c[p+4>>2]|0,(i|0)==0?0:pa+(i*40|0)|0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 59:{na=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;w=c[na+4>>2]|0;c[w+4>>2]=c[na>>2];if(a[w+17>>0]|0){x=w+44|0;t=c[x>>2]|0;y=w+12|0;r=c[(c[y>>2]|0)+56>>2]|0;r=d[r+37>>0]<<16|d[r+36>>0]<<24|d[r+38>>0]<<8|d[r+39>>0];l=((c[w+36>>2]|0)>>>0)/5|0;if(t>>>0<2){i=0;o=1073741824/((c[w+32>>2]|0)>>>0)|0;q=l+1|0}else{q=l+1|0;i=t+-2|0;i=i-((i>>>0)%(q>>>0)|0)|0;o=1073741824/((c[w+32>>2]|0)>>>0)|0;i=((i+1|0)==(o|0)?3:2)+i|0}s=t-r-(((l-t+r+i|0)>>>0)/(l>>>0)|0)|0;l=o+1|0;s=s+((l>>>0<t>>>0&s>>>0<l>>>0)<<31>>31)|0;while(1){if(s>>>0<2)i=0;else{i=s+-2|0;i=i-((i>>>0)%(q>>>0)|0)|0;i=((i+1|0)==(o|0)?3:2)+i|0}if((s|0)==(l|0)|(i|0)==(s|0))s=s+-1|0;else break}if(t>>>0<s>>>0){oa=3182;break c}if(r){l=w+8|0;i=c[l>>2]|0;if(i){i=$f(i,0,0)|0;if(!i){i=c[l>>2]|0;if(!i)oa=3189;else{do{oa=i+1|0;a[oa>>0]=a[oa>>0]&-5;i=c[i+24>>2]|0}while((i|0)!=0);oa=3189}}}else oa=3189;if((oa|0)==3189){oa=0;i=_f(w,s,t,0)|0;if(!i){l=c[(c[y>>2]|0)+72>>2]|0;o=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[o+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[o+96>>2]|0))i=0;else i=Ve(l)|0;else oa=3194;do if((oa|0)==3194){oa=0;i=c[o+40>>2]|0;if(!i)if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){i=Wf(l)|0;break}else{i=Xf(l)|0;break}}while(0);na=c[(c[y>>2]|0)+56>>2]|0;ma=c[x>>2]|0;a[na+28>>0]=ma>>>24;a[na+29>>0]=ma>>>16;a[na+30>>0]=ma>>>8;a[na+31>>0]=ma}}switch(i|0){case 101:{i=0;oa=28;break}case 0:{l=m;q=pa;o=qa;break}default:{oa=3855;break c}}}else{i=0;oa=28}}else{i=0;oa=28}break}case -98:{l=c[p+8>>2]|0;if(c[p+4>>2]|0){l=(d[vf>>0]|d[vf+1>>0]<<8)&-4|l+1&3;a[vf>>0]=l;a[vf+1>>0]=l>>8;l=m;q=pa;o=qa;i=K;break d}i=c[$a>>2]|0;if(!i){l=m;q=pa;o=qa;i=K}else{l=l+1&3;do{na=i+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|l;a[na>>0]=ma;a[na+1>>0]=ma>>8;i=c[i+8>>2]|0}while((i|0)!=0);l=m;q=pa;o=qa;i=K}break}case -97:{i=c[p+12>>2]|0;if((i&255|0)==0?!((c[Sc>>2]&1024|0)==0&0==0):0){l=m;q=pa;o=qa;i=K;break d}r=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;s=c[p+8>>2]|0;if(a[r+9>>0]|0){t=i+1&255;o=c[r+4>>2]|0;c[o+4>>2]=c[r>>2];if((c[o+76>>2]|0)!=(r|0)?b[o+22>>1]&64:0){oa=3236;break c}q=o+72|0;i=c[q>>2]|0;ra:do if(!i)oa=3222;else{l=i;do{if(((c[l>>2]|0)!=(r|0)?(c[l+4>>2]|0)==(s|0):0)?(a[l+8>>0]|0)!=t<<24>>24:0){oa=3215;break c}l=c[l+12>>2]|0}while((l|0)!=0);while(1){if((c[i+4>>2]|0)==(s|0)?(c[i>>2]|0)==(r|0):0)break ra;i=c[i+12>>2]|0;if(!i){oa=3222;break}}}while(0);if((oa|0)==3222){oa=0;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;if(!i){i=7;oa=3855;break c}}else{i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=7;oa=3855;break c}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}na=i+8|0;a[na>>0]=0;a[na+1>>0]=0;a[na+2>>0]=0;a[na+3>>0]=0;c[i+4>>2]=s;c[i>>2]=r;c[i+12>>2]=c[q>>2];c[q>>2]=i}i=i+8|0;if((d[i>>0]|0)<(t&255)){a[i>>0]=t;l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}}else{l=m;q=pa;o=qa;i=0}break}case -96:{x=c[p+16>>2]|0;s=c[Vc>>2]|0;q=(s|0)>0;if(q?(c[db>>2]|0)==0:0){i=6;oa=3268}else oa=3239;sa:do if((oa|0)==3239){oa=0;if(!x){l=m;q=pa;o=qa;i=0;break d}l=x+8|0;i=c[l>>2]|0;w=c[i>>2]|0;t=w+56|0;o=c[t>>2]|0;if(o){if(q){r=c[db>>2]|0;q=0;do{if((c[r+(q<<2)>>2]|0)==(x|0)){i=0;oa=3268;break sa}q=q+1|0}while((q|0)<(s|0))}if(!((s|0)%5|0)){o=cw(s|0,((s|0)<0)<<31>>31|0,2)|0;o=Sv(o|0,L()|0,20,0)|0;q=L()|0;i=c[db>>2]|0;ta:do if(!i){if(c[$c>>2]|0){if(a[zf>>0]|0){i=7;oa=3268;break sa}}else{do if(q>>>0>0|((q|0)==0?o>>>0>(e[Xc>>1]|0)>>>0:0))i=Yc;else{i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3261;break ta}i=c[cd>>2]|0;if(!i){i=fd;break}c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3261;break ta}while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(Cf,o,q)|0;oa=3261}else{na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){if(!(q>>>0>0|((q|0)==0?o>>>0>(e[Xc>>1]|0)>>>0:0))){o=s;break}i=Zd(Cf,i,o,q)|0;oa=3261;break}i=Zd(Cf,i,o,q)|0;oa=3261}while(0);if((oa|0)==3261){if(!i){i=7;oa=3268;break}o=c[Vc>>2]|0}o=i+(o<<2)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[db>>2]=i;o=c[t>>2]|0;i=c[l>>2]|0}i=Wa[o&127](i)|0;if(!i){i=(c[Gd>>2]|0)+(c[Fd>>2]|0)|0;na=c[db>>2]|0;oa=c[Vc>>2]|0;c[Vc>>2]=oa+1;c[na+(oa<<2)>>2]=x;oa=x+12|0;c[oa>>2]=(c[oa>>2]|0)+1;if((i|0)!=0?(yd=c[w+80>>2]|0,(yd|0)!=0):0){c[x+20>>2]=i;i=Xa[yd&255](c[l>>2]|0,i+-1|0)|0;oa=3270}else{i=0;oa=3270}}else oa=3268}else{i=0;oa=3270}}while(0);if((oa|0)==3268){oa=0;if(x){l=x+8|0;oa=3270}}if((oa|0)==3270){oa=0;t=(c[l>>2]|0)+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;ua:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;va:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break ua}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3306;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break ua}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break ua}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3306;break va}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3306;break va}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3306}while(0);if((oa|0)==3306){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -95:{ea=rf;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));c[Wc>>2]=Cf;na=c[p+8>>2]|0;i=pa+(na*40|0)|0;c[rf>>2]=c[i>>2];c[rf+4>>2]=c[i+4>>2];c[rf+8>>2]=c[i+8>>2];c[rf+12>>2]=c[i+12>>2];c[rf+16>>2]=c[i+16>>2];i=b[sa>>1]&-1025;b[sa>>1]=i;i=i&65535;wa:do if((i&18|0)!=0?(b[pa+(na*40|0)+8>>1]&2048)==0:0){l=(i|4096)&65535;b[sa>>1]=l;do if(i&16384){i=(c[rf>>2]|0)+(c[Xb>>2]|0)|0;if((i|0)<1)if(!(l&16)){oa=3322;break}else i=1;if(Eg(rf,i,1)|0){i=7;break wa}gw((c[Ob>>2]|0)+(c[Xb>>2]|0)|0,0,c[rf>>2]|0)|0;c[Xb>>2]=(c[Xb>>2]|0)+(c[rf>>2]|0);i=b[sa>>1]&-16897;b[sa>>1]=i;if(!((c[Qb>>2]|0)!=0?(c[Ob>>2]|0)==(c[ec>>2]|0):0))oa=3322}else oa=3322;while(0);if((oa|0)==3322){oa=0;i=Jg(rf)|0;if(i|0)break;i=b[sa>>1]|0}b[sa>>1]=i&-4097;i=0}else i=0;while(0);l=b[sa>>1]|0;if(!((l&514)==514&(a[Jb>>0]|0)==1)){if(!(l&1)){l=Gg(rf,1)|0;oa=3329}}else{l=c[Ob>>2]|0;oa=3329}xa:do if((oa|0)==3329){oa=0;if(l){w=Sd(Cf,l,c[(c[uf>>2]|0)+(c[p+4>>2]<<4)>>2]|0)|0;t=c[c[w+60>>2]>>2]|0;q=c[Pb>>2]|0;if(!q){l=Wb;i=Vb}else{l=a[t>>0]|0;if(!(l<<24>>24))i=0;else{i=0;o=t;do{o=o+1|0;i=G(i+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[o>>0]|0}while(l<<24>>24!=0)}i=(i>>>0)%((c[dc>>2]|0)>>>0)|0;l=q+(i<<3)|0;i=q+(i<<3)+4|0}l=c[l>>2]|0;ya:do if(!l)i=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;l=l+-1|0;q=c[i+12>>2]|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-s|0;if(!(na<<24>>24==0|(o|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(o|0)!=0))}if(!o)break ya;if(!l){i=59292;break}}}while(0);i=c[i+8>>2]|0;if((i|0?(zd=c[i>>2]|0,Ad=c[zd+4>>2]|0,Ad|0):0)?c[zd+20>>2]|0:0){i=Ai(Cf,w,i,Ad,mf)|0;if(i|0)break;s=w+64|0;i=c[s>>2]|0;if(!i){i=0;break}l=i;while(1){if((c[l>>2]|0)==(Cf|0))break;l=c[l+24>>2]|0;if(!l){i=0;break xa}}l=c[Vc>>2]|0;if(!((l|0)%5|0)){q=cw(l|0,((l|0)<0)<<31>>31|0,2)|0;q=Sv(q|0,L()|0,20,0)|0;r=L()|0;i=c[db>>2]|0;za:do if(!i){if(c[$c>>2]|0){if(a[zf>>0]|0){i=7;break xa}}else{do if(r>>>0>0|((r|0)==0?q>>>0>(e[Xc>>1]|0)>>>0:0))i=Yc;else{i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3367;break za}i=c[cd>>2]|0;if(!i){i=fd;break}c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3367;break za}while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(Cf,q,r)|0;oa=3367}else{o=i;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;if(!(r>>>0>0|((r|0)==0?q>>>0>(e[Xc>>1]|0)>>>0:0)))break za;i=Zd(Cf,i,q,r)|0;oa=3367;break za}while(0);i=Zd(Cf,i,q,r)|0;oa=3367}while(0);if((oa|0)==3367){oa=0;if(!i){i=7;break}l=c[Vc>>2]|0}na=i+(l<<2)|0;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;c[db>>2]=i;i=c[s>>2]|0}Aa:do if(!i)i=0;else while(1){if((c[i>>2]|0)==(Cf|0))break Aa;i=c[i+24>>2]|0;if(!i){i=0;break}}while(0);ma=c[db>>2]|0;na=c[Vc>>2]|0;c[Vc>>2]=na+1;c[ma+(na<<2)>>2]=i;i=i+12|0;c[i>>2]=(c[i>>2]|0)+1;i=0;break}c[we>>2]=t;i=dd(Cf,36690,we)|0;c[mf>>2]=i;i=1}}while(0);if(!((b[sa>>1]&9216)==0&(c[Qb>>2]|0)==0))Cg(rf);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -94:{i=(c[ad>>2]|0)+1|0;c[ad>>2]=i;l=Sd(Cf,c[p+16>>2]|0,c[(c[uf>>2]|0)+(c[p+4>>2]<<4)>>2]|0)|0;do if(l|0?(Bd=l+64|0,Cd=c[Bd>>2]|0,Cd|0):0){l=Cd;do{if((c[(c[l+8>>2]|0)+4>>2]|0)>0){j=6;oa=3401;break c}l=c[l+24>>2]|0}while((l|0)!=0);c[Bd>>2]=0;r=Cd;l=0;while(1){o=c[r>>2]|0;q=r+24|0;i=r;r=c[q>>2]|0;if((o|0)==(Cf|0)){c[Bd>>2]=i;c[q>>2]=0;o=i}else{o=o+360|0;c[q>>2]=c[o>>2];c[o>>2]=i;o=l}if(!r)break;else l=o}i=o+8|0;l=Wa[c[(c[c[o+4>>2]>>2]|0)+20>>2]&127](c[i>>2]|0)|0;if(l|0){oa=3400;break c}c[i>>2]=0;c[Bd>>2]=0;i=c[o>>2]|0;ma=o+12|0;na=(c[ma>>2]|0)+-1|0;c[ma>>2]=na;if(!na){if(i|0){if(c[i+480>>2]|0){Xd(i,o);break}na=o;if((c[i+304>>2]|0)>>>0<=na>>>0?(c[i+308>>2]|0)>>>0>na>>>0:0){na=i+300|0;c[o>>2]=c[na>>2];c[na>>2]=o;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}}while(0);c[ad>>2]=(c[ad>>2]|0)+-1;l=m;q=pa;o=qa;i=0;break}case -93:{c[rf>>2]=0;w=c[(c[p+16>>2]|0)+8>>2]|0;if(!w){i=6;oa=3458;break c}x=c[w>>2]|0;if(!x){i=6;oa=3458;break c}i=Xa[c[x+24>>2]&255](w,rf)|0;t=w+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Ba:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ca:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ba}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3440;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ba}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ba}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3440;break Ca}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3440;break Ca}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3440}while(0);if((oa|0)==3440){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=3458;break c}c[c[rf>>2]>>2]=w;o=c[p+4>>2]|0;i=c[xd>>2]|0;if((o|0)>0)i=i+(((c[va>>2]|0)-o|0)*40|0)|0;l=c[(c[oc>>2]|0)+(o<<2)>>2]|0;if(l|0){na=l+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(o<<2)>>2]|0);c[(c[oc>>2]|0)+(o<<2)>>2]=0}if((c[i+24>>2]|0)<96){if(Eg(i,96,0)|0){oa=3459;break c}i=c[i+16>>2]|0}else{na=c[i+20>>2]|0;c[i+16>>2]=na;i=i+8|0;b[i>>1]=b[i>>1]&13;i=na}c[(c[oc>>2]|0)+(o<<2)>>2]=i;ea=i;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=2;a[i+1>>0]=-1;b[i+56>>1]=0;c[i+72>>2]=i+88;if(!i){oa=3459;break c}c[i+40>>2]=c[rf>>2];l=w+4|0;c[l>>2]=(c[l>>2]|0)+1;l=m;q=pa;o=qa;i=0;break}case 9:{q=pa+((c[p+12>>2]|0)*40|0)|0;l=q+40|0;w=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=c[w+40>>2]|0;s=c[x>>2]|0;y=c[s>>2]|0;o=c[l>>2]|0;q=c[q>>2]|0;r=c[ta>>2]|0;if((o|0)>0){i=0;do{na=i;i=i+1|0;c[r+(na<<2)>>2]=l+(i*40|0)}while((i|0)!=(o|0))}i=_a[c[y+32>>2]&127](x,q,c[p+16>>2]|0,o,r)|0;t=s+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Da:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ea:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Da}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3499;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Da}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Da}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3499;break Ea}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3499;break Ea}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3499}while(0);if((oa|0)==3499){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=3855;break c}na=Wa[c[y+40>>2]&127](x)|0;a[w+2>>0]=0;if(!na){l=m;q=pa;o=qa;i=0}else{i=0;oa=28}break}case -92:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=c[p+12>>2]|0;y=pa+(x*40|0)|0;if(a[i+2>>0]|0){i=pa+(x*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(y);l=m;q=pa;o=qa;i=K;break d}i=i+40|0;q=c[c[i>>2]>>2]|0;l=c[q>>2]|0;c[kc>>2]=0;c[kc+4>>2]=0;c[kc+8>>2]=0;c[kc+12>>2]=0;c[kc+16>>2]=0;c[kc+20>>2]=0;c[kc+24>>2]=0;c[rf>>2]=y;w=pa+(x*40|0)+8|0;o=b[w>>1]|0;if(!(b[p+2>>1]&1))b[w>>1]=o&15904|1;else{if(!(o&9216))b[w>>1]=1;else Dg(y);b[w>>1]=16385;c[y>>2]=0}i=Ya[c[l+44>>2]&127](c[i>>2]|0,rf,c[p+8>>2]|0)|0;t=q+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Fa:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ga:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Fa}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3554;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Fa}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Fa}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3554;break Ga}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3554;break Ga}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3554}while(0);if((oa|0)==3554){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if((c[Kb>>2]|0)>0){i=b[w>>1]|0;if((i&514)==514?(a[pa+(x*40|0)+10>>0]|0)==1:0)i=c[pa+(x*40|0)+16>>2]|0;else if(!(i&1))i=Gg(y,1)|0;else i=0;c[xe>>2]=i;Ag(f,31408,xe);i=c[Kb>>2]|0}l=b[w>>1]|0;if((l&2)!=0?(a[pa+(x*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(y,sd)|0;l=b[w>>1]|0}o=l&65535;if(o&18){l=c[pa+(x*40|0)+12>>2]|0;if(o&16384)l=(c[y>>2]|0)+l|0;if((l|0)>(c[(c[pa+(x*40|0)+32>>2]|0)+108>>2]|0)){oa=3576;break c}else l=(i|0)==0?7:12}else l=(i|0)==0?7:12;switch(l&15){case 12:{oa=3855;break c}case 15:{oa=3891;break c}case 7:{l=m;q=pa;o=qa;break}default:{h=0;oa=3900;break c}}break}case 60:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if(!(a[i+2>>0]|0)){t=i+40|0;i=c[t>>2]|0;x=c[i>>2]|0;w=c[x>>2]|0;i=Wa[c[w+36>>2]&127](i)|0;x=x+8|0;if(c[x>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[x>>2]|0;Ha:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ia:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ha}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3616;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ha}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ha}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3616;break Ia}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3616;break Ia}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3616}while(0);if((oa|0)==3616)if(!l){l=0;break}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[x>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[x>>2]=0}if(i|0){oa=3855;break c}if(!(Wa[c[w+40>>2]&127](c[t>>2]|0)|0)){i=0;oa=20}else{l=m;o=pa;i=0;oa=21}}else{l=m;q=pa;o=qa;i=K}break}case -91:{i=Sc;o=c[i>>2]|0;i=c[i+4>>2]|0;q=Sc;c[q>>2]=o|67108864;c[q+4>>2]=i;q=c[(c[p+16>>2]|0)+8>>2]|0;i=c[p+4>>2]|0;l=pa+(i*40|0)|0;if((b[pa+(i*40|0)+8>>1]&2?(a[pa+(i*40|0)+10>>0]|0)!=1:0)?(Dd=Ig(l,1)|0,Dd|0):0){i=Dd;oa=3855;break c}i=Xa[c[(c[q>>2]|0)+76>>2]&255](q,c[pa+(i*40|0)+16>>2]|0)|0;if((o&67108864|0)==0&0==0){la=Sc;ma=c[la+4>>2]|0;na=Sc;c[na>>2]=c[la>>2]&-67108865;c[na+4>>2]=ma}t=q+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Ja:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ka:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ja}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3666;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ja}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ja}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3666;break Ka}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3666;break Ka}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3666}while(0);if((oa|0)==3666){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 10:{if(a[zf>>0]|0){i=2;j=K;break c}y=p+16|0;t=c[(c[y>>2]|0)+8>>2]|0;if(!t){i=12;j=6;break c}i=c[t>>2]|0;if(!i){i=12;j=6;break c}s=c[p+8>>2]|0;o=i+52|0;i=c[o>>2]|0;La:do if(i){r=a[Rb>>0]|0;q=c[ta>>2]|0;if((s|0)>0){i=pa+((c[p+12>>2]|0)*40|0)|0;l=0;while(1){c[q+(l<<2)>>2]=i;l=l+1|0;if((l|0)==(s|0))break;else i=i+40|0}i=c[o>>2]|0}w=p+2|0;a[Rb>>0]=b[w>>1];x=Za[i&127](t,s,q,rf)|0;a[Rb>>0]=r;s=t+8|0;if(c[s>>2]|0){o=c[f>>2]|0;i=c[mf>>2]|0;Ma:do if(i|0){do if(o|0){if(c[o+480>>2]|0){Xd(o,i);break Ma}l=i;if((c[o+304>>2]|0)>>>0>l>>>0)break;if((c[o+308>>2]|0)>>>0<=l>>>0)break;na=o+300|0;c[i>>2]=c[na>>2];c[na>>2]=i;break Ma}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);q=c[s>>2]|0;Na:do if(!q)i=0;else{r=(Eu(q)|0)+1|0;Oa:do if(!o){na=Sv(r|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){i=0;break Na}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](r)|0;oa=3718;break}i=Wa[c[29356>>2]&127](r)|0;if((c[14985]|0)>>>0<r>>>0)c[14985]=r;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break Na}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){i=0;break Na}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<r>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3718;break Oa}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3718;break Oa}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,r,0)|0;oa=3718}while(0);if((oa|0)==3718){oa=0;if(!i){i=0;break}}ew(i|0,q|0,r|0)|0}while(0);c[mf>>2]=i;i=c[s>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[s>>2]=0}if(!x){if(c[p+4>>2]|0){la=rf;ma=c[la+4>>2]|0;na=zb;c[na>>2]=c[la>>2];c[na+4>>2]=ma}c[rc>>2]=(c[rc>>2]|0)+1;i=0;break}else{if((x&255|0)!=19){oa=3733;break c}if(!(a[(c[y>>2]|0)+16>>0]|0)){oa=3733;break c}i=b[w>>1]|0;switch(i<<16>>16){case 5:{i=2;oa=3732;break c}case 4:{i=0;break La}default:{oa=3731;break c}}}}else i=K;while(0);l=m;q=pa;o=qa;break}case -90:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=c[(c[(c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0)+4>>2]|0)+44>>2];c[l+4>>2]=0;l=m;q=pa;o=qa;i=K;break}case -89:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;q=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;l=c[p+12>>2]|0;o=c[q+4>>2]|0;if(!l)l=0;else{na=c[o+44>>2]|0;l=na>>>0<l>>>0?l:na}c[o+4>>2]=c[q>>2];o=(c[o>>2]|0)+156|0;if((l|0)>0)c[o>>2]=l;else l=c[o>>2]|0;q=i;c[q>>2]=l;c[q+4>>2]=((l|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 63:case 62:{o=b[p+2>>1]|0;l=((o&65535)<<2)+28|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=3758;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=3758}while(0);if((oa|0)==3758)i=_d(Cf,l,0)|0;if(!i){l=p;j=h;i=zf;oa=3892;break a}c[i>>2]=0;oa=p+16|0;c[i+4>>2]=c[oa>>2];c[i+16>>2]=(p-m|0)/20|0;c[i+12>>2]=f;c[i+20>>2]=0;a[i+25>>0]=o;a[p+1>>0]=-16;c[oa>>2]=i;a[p>>0]=(d[p>>0]|0)+2;oa=3761;break}case 65:case 64:{oa=3761;break}default:{l=m;q=pa;o=qa;i=K}}while(0);Pa:do if((oa|0)==34){oa=0;i=c[p+4>>2]|0;if(i|0){oa=39;break c}i=c[nc>>2]|0;if(!i){oa=38;break c}c[nc>>2]=c[i+4>>2];c[La>>2]=(c[La>>2]|0)+-1;m=c[rc>>2]|0;c[sc>>2]=m;c[tc>>2]=(c[tc>>2]|0)+m;i=sg(i)|0;m=c[le>>2]|0;if((c[p+8>>2]|0)==4)i=(c[m+(i*20|0)+8>>2]|0)+-1|0;l=m;q=c[xd>>2]|0;o=qa;p=m+(i*20|0)|0;i=K}else if((oa|0)==83){oa=0;na=c[xd>>2]|0;o=c[l>>2]|0;l=na+(o*40|0)|0;o=na+(o*40|0)+8|0;if(!(b[o>>1]&9216))b[o>>1]=4;else lh(l)|0;o=l+8|0;b[o>>1]=2562;c[l+16>>2]=c[p+16>>2];c[l+12>>2]=c[p+4>>2];a[l+10>>0]=sd;l=c[p+12>>2]|0;if((l|0)>0?(na=pa+(l*40|0)|0,(c[na+4>>2]|0)==0?(c[na>>2]|0)==(e[p+2>>1]|0):0):0){b[o>>1]=2576;l=m;q=pa;o=qa}else{l=m;q=pa;o=qa}}else if((oa|0)==1049){if(((d[vf>>0]|d[vf+1>>0]<<8)&3)==1){i=516;oa=3855;break c}w=c[p+8>>2]|0;A=c[p+12>>2]|0;i=c[uf>>2]|0;C=c[i+(A<<4)+4>>2]|0;l=p+2|0;q=b[l>>1]|0;if(z<<24>>24==109){o=(q&8|4)&65535;i=a[(c[i+(A<<4)+12>>2]|0)+76>>0]|0;if((i&255)<(d[pc>>0]|0)){a[pc>>0]=i;B=o}else B=o}else B=0;if(q&16){s=pa+(w*40|0)|0;t=pa+(w*40|0)+8|0;r=b[t>>1]|0;i=r&65535;do if(!(i&4)){if(i&8|0){o=Mg(+g[s>>3])|0;q=L()|0;i=r;break}if(!(i&18)){o=0;q=0;i=r}else{o=Ng(a[pa+(w*40|0)+10>>0]|0,c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0)|0;q=L()|0;i=b[t>>1]|0}}else{q=s;o=c[q>>2]|0;q=c[q+4>>2]|0;i=r}while(0);w=s;c[w>>2]=o;c[w+4>>2]=q;b[t>>1]=i&15904|4;w=o}z=p+1|0;switch(a[z>>0]|0){case -9:{y=c[p+16>>2]|0;x=e[y+8>>1]|0;break}case -3:{x=c[p+16>>2]|0;y=0;break}default:{x=0;y=0}}s=c[p+4>>2]|0;i=c[xd>>2]|0;if((s|0)>0)i=i+(((c[va>>2]|0)-s|0)*40|0)|0;o=x<<3;t=o+96|0;o=o+296|0;q=c[(c[oc>>2]|0)+(s<<2)>>2]|0;if(q|0){oa=q+5|0;a[oa>>0]=a[oa>>0]&-2;tg(f,c[(c[oc>>2]|0)+(s<<2)>>2]|0);c[(c[oc>>2]|0)+(s<<2)>>2]=0}if((c[i+24>>2]|0)<(o|0)){if(Eg(i,o,0)|0){l=p;j=h;i=zf;oa=3892;break a}o=i+16|0;r=o;o=c[o>>2]|0}else{o=c[i+20>>2]|0;r=i+16|0;c[r>>2]=o;oa=i+8|0;b[oa>>1]=b[oa>>1]&13}c[(c[oc>>2]|0)+(s<<2)>>2]=o;i=A&255;q=o+1|0;ea=o;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[q>>0]=i;b[o+56>>1]=x;c[o+72>>2]=o+88+(x<<2);oa=(c[r>>2]|0)+t|0;i=o+40|0;c[i>>2]=oa;c[oa>>2]=0;c[oa+4>>2]=0;c[oa+8>>2]=0;c[oa+12>>2]=0;c[oa+16>>2]=0;if(!o){l=p;j=h;i=zf;oa=3892;break a}a[o+2>>0]=1;oa=o+5|0;a[oa>>0]=a[oa>>0]|4;c[o+52>>2]=w;i=Vg(C,w,B,y,c[i>>2]|0)|0;c[o+44>>2]=y;a[o+4>>0]=(a[z>>0]|0)!=-9&1;oa=1074}else if((oa|0)==1216){oa=0;x=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+12>>2]|0;r=pa+(w*40|0)|0;i=c[p+16>>2]|0;if((i|0)>0){c[Hd>>2]=c[x+44>>2];b[Aa>>1]=i;c[Ba>>2]=r;s=0;r=Hd;i=z;q=0}else{o=pa+(w*40|0)+8|0;l=b[o>>1]|0;do if(l&16384){q=pa+(w*40|0)+12|0;i=(c[r>>2]|0)+(c[q>>2]|0)|0;if((i|0)<1)if(!(l&16))break;else i=1;if(Eg(r,i,1)|0){oa=1268;break c}gw((c[pa+(w*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[r>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[r>>2]|0);b[o>>1]=b[o>>1]&-16897}while(0);r=x+44|0;s=c[r>>2]|0;t=s+6|0;q=((e[t>>1]|0)*40|0)+56|0;o=c[s+12>>2]|0;Qa:do if(!o){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;oa=1246;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](o)|0;if(!l){oa=1268;break c}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){oa=1268;break c}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<q>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1246;break Qa}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1246;break Qa}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,q,0)|0;oa=1246}while(0);if((oa|0)==1246)if(!i){oa=1268;break c}else l=i;c[l+4>>2]=l+16;c[l>>2]=s;b[l+8>>1]=(e[t>>1]|0)+1;_g(c[r>>2]|0,c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0,l);s=l;r=l;i=a[p>>0]|0;q=l}a[r+10>>0]=0;Ra:do if(i<<24>>24==27?(fe=b[r+8>>1]|0,fe<<16>>16!=0):0){l=c[r+4>>2]|0;o=fe&65535;i=0;while(1){if(b[l+(i*40|0)+8>>1]&1){o=1;break Ra}i=i+1|0;if(i>>>0>=o>>>0){o=0;break}}}else o=0;while(0);i=Xg(c[x+40>>2]|0,r,0,0,0,rf)|0;do if(s|0){if(c[Ze>>2]|0){Xd(Cf,q);break}oa=q;if((c[_e>>2]|0)>>>0<=oa>>>0?(c[$e>>2]|0)>>>0>oa>>>0:0){c[q>>2]=c[af>>2];c[af>>2]=q;break}if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{oa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);if(i|0){oa=1270;break c}i=c[rf>>2]|0;c[x+32>>2]=i;l=(i|0)==0;a[x+2>>0]=(l^1)&1;a[x+3>>0]=0;c[x+28>>2]=0;if((a[p>>0]|0)==29)if(l)oa=1269;else oa=1267;else if(!(i|o))oa=1267;else oa=1269;if((oa|0)==1267){oa=0;l=m;q=pa;o=qa;i=0;break}else if((oa|0)==1269){i=0;oa=28;break}}else if((oa|0)==1287){oa=0;la=c[i>>2]|0;ma=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[ma+40>>2]|0;c[je>>2]=0;la=pa+(la*40|0)|0;ka=c[la>>2]|0;la=c[la+4>>2]|0;i=Xg(i,0,ka,la,0,je)|0;na=ma+64|0;c[na>>2]=ka;c[na+4>>2]=la;a[ma+2>>0]=0;c[ma+28>>2]=0;a[ma+3>>0]=0;na=c[je>>2]|0;c[ma+32>>2]=na;if(!na)if(!i){l=m;q=pa;o=qa;i=0;break}else{oa=3855;break c}else if(!(c[p+8>>2]|0)){oa=1289;break c}else{oa=28;break}}else if((oa|0)==1521){oa=0;na=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;c[Yd>>2]=1;do if((a[na>>0]|0)==1){ma=c[na+40>>2]|0;if(!(a[ma+56>>0]|0)){i=ma+36|0;if(!(c[i>>2]|0)){c[Yd>>2]=1;a[na+2>>0]=1;break}else{c[Yd>>2]=0;i=Uh(ma+64|0,i)|0;oa=2142;break}}i=Vh(ma)|0;if(i|0){oa=2145;break c}la=ma+59|0;R=0;ka=0;while(1){if(ka>>>0>=(d[la>>0]|0)>>>0){oa=2138;break}ha=ma+64+(ka*72|0)|0;c[rf>>2]=0;ia=ma+64+(ka*72|0)+28|0;i=c[ia>>2]|0;l=((i|0)<0)<<31>>31;if((i|0)>16){ga=0;o=16;q=0;while(1){o=cw(o|0,q|0,4)|0;q=L()|0;ja=ga+1|0;if(!((q|0)<(l|0)|(q|0)==(l|0)&o>>>0<i>>>0))break;else ga=ja}fa=Hd;c[fa>>2]=0;c[fa+4>>2]=0;if((i|0)>=17){i=c[7389]|0;if((i|0)!=0?(Wa[i&127](100)|0)!=0:0){S=0;U=0}else oa=1537;Sa:do if((oa|0)==1537){oa=0;do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](976)|0;if(!i){S=0;U=0;break Sa}}else{i=Wa[c[29356>>2]&127](976)|0;if((c[14985]|0)>>>0<976)c[14985]=976;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;da=L()|0;c[14768]=((da|0)<0|(da|0)==0&ea>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){S=0;U=0;break Sa}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);S=i+16|0;gw(S|0,0,960)|0;c[i>>2]=16;c[i+4>>2]=0;c[i+12>>2]=S;c[i+8>>2]=i+912;S=i;U=i}while(0);c[rf>>2]=U;fa=(U|0)==0;i=fa?7:0;l=c[ia>>2]|0;if((l|0)>0&(fa^1)){ba=(ga|0)==0;ca=ma+64+(ka*72|0)+8|0;da=ma+64+(ka*72|0)+64|0;o=0;aa=0;do{c[Td>>2]=0;i=l-aa|0;i=$h(ha,(i|0)<16?i:16,Hd,Td)|0;do if(!i){$=o+1|0;Z=c[Td>>2]|0;i=c[7389]|0;if((i|0)!=0?(Wa[i&127](100)|0)!=0:0)oa=1566;else oa=1554;Ta:do if((oa|0)==1554){oa=0;do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](64)|0;if(!i){oa=1566;break Ta}else l=i}else{i=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;q=59064;l=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,q|0,i|0,((i|0)<0)<<31>>31|0)|0;_=L()|0;c[14768]=((_|0)<0|(_|0)==0&ea>>>0<=fa>>>0)&1}l=Wa[c[29340>>2]&127](i)|0;if(!l){oa=1566;break Ta}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0<=(c[14987]|0)>>>0)break;c[14987]=i}while(0);ea=l+8|0;fa=ea+56|0;do{a[ea>>0]=0;ea=ea+1|0}while((ea|0)<(fa|0));c[l+4>>2]=Z;c[l>>2]=ha;_=c[ca>>2]|0;Z=(c[_+8>>2]|0)+9|0;_=(c[_+4>>2]|0)/2|0;_=(Z|0)>(_|0)?Z:_;c[l+16>>2]=_;Z=da;_=Sv(c[Z>>2]|0,c[Z+4>>2]|0,_|0,((_|0)<0)<<31>>31|0)|0;Z=L()|0;i=da;c[i>>2]=_;c[i+4>>2]=Z;i=0;Z=l;_=l}while(0);do if((oa|0)==1566){oa=0;if(!Z){i=7;Z=0;_=0;break}if((c[Z>>2]|0)>0){X=Z+12|0;W=0;do{l=c[X>>2]|0;Y=l+(W*56|0)|0;i=c[l+(W*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(W*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);P=c[l+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{l=c[T>>2]|0;V=l+(O*56|0)|0;i=c[l+(O*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(O*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);J=c[l+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{l=c[M>>2]|0;N=l+(I*56|0)|0;i=c[l+(I*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(I*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);D=c[l+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{l=c[F>>2]|0;H=l+(C*56|0)|0;i=c[l+(C*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(C*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);y=c[l+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{l=c[A>>2]|0;B=l+(x*56|0)|0;i=c[l+(x*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(x*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);s=c[l+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{l=c[w>>2]|0;q=l+(r*56|0)|0;i=c[l+(r*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(r*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(r*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=Y;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[Z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Z);i=7;Z=0;_=0;break}else{i=Wa[c[29352>>2]&127](Z)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Z);i=7;Z=0;_=0;break}}while(0);Ua:do if(ba){if(!i){i=U;oa=1830}}else{q=1;l=1;do{q=q<<4;l=l+1|0}while((l|0)!=(ja|0));if(i|0)break;i=U;w=1;Va:while(1){t=(c[i+12>>2]|0)+((((o|0)/(q|0)|0|0)%16|0)*56|0)+48|0;i=c[t>>2]|0;if(!i){i=c[7389]|0;if(i|0?Wa[i&127](100)|0:0){i=7;break Ua}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](976)|0;if(!i){i=7;break Ua}else l=i}else{i=Wa[c[29356>>2]&127](976)|0;if((c[14985]|0)>>>0<976)c[14985]=976;r=59064;l=c[r>>2]|0;r=c[r+4>>2]|0;if((r|0)>0|(r|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,r|0,i|0,((i|0)<0)<<31>>31|0)|0;Y=L()|0;c[14768]=((Y|0)<0|(Y|0)==0&ea>>>0<=fa>>>0)&1}l=Wa[c[29340>>2]&127](i)|0;if(!l){i=7;break Ua}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0<=(c[14987]|0)>>>0)break;c[14987]=i}while(0);i=l+16|0;gw(i|0,0,960)|0;Y=l+12|0;c[l>>2]=16;c[l+4>>2]=0;c[Y>>2]=i;c[l+8>>2]=l+912;i=c[7389]|0;if(i|0?Wa[i&127](100)|0:0){oa=1702;break}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](64)|0;if(!i){oa=1714;break Va}}else{i=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;s=59064;r=c[s>>2]|0;s=c[s+4>>2]|0;if((s|0)>0|(s|0)==0&r>>>0>0){fa=c[14978]|0;ea=Tv(r|0,s|0,i|0,((i|0)<0)<<31>>31|0)|0;X=L()|0;c[14768]=((X|0)<0|(X|0)==0&ea>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){oa=1714;break Va}r=Wa[c[29352>>2]&127](i)|0;r=(c[14978]|0)+r|0;c[14978]=r;if(r>>>0>(c[14982]|0)>>>0)c[14982]=r;r=(c[14981]|0)+1|0;c[14981]=r;if(r>>>0<=(c[14987]|0)>>>0)break;c[14987]=r}while(0);ea=i+8|0;fa=ea+56|0;do{a[ea>>0]=0;ea=ea+1|0}while((ea|0)<(fa|0));c[t>>2]=i;c[i+4>>2]=l;c[i>>2]=ha;Y=c[ca>>2]|0;ea=(c[Y+8>>2]|0)+9|0;Y=(c[Y+4>>2]|0)/2|0;Y=(ea|0)>(Y|0)?ea:Y;c[i+16>>2]=Y;ea=da;Y=Sv(c[ea>>2]|0,c[ea+4>>2]|0,Y|0,((Y|0)<0)<<31>>31|0)|0;ea=L()|0;fa=da;c[fa>>2]=Y;c[fa+4>>2]=ea}i=c[i+4>>2]|0;if(w>>>0<ga>>>0){q=(q|0)/16|0;w=w+1|0}else{oa=1830;break Ua}}if((oa|0)==1702){oa=0;c[t>>2]=0}else if((oa|0)==1714){oa=0;c[t>>2]=0}if((c[l>>2]|0)>0){W=0;do{o=c[Y>>2]|0;X=o+(W*56|0)|0;i=c[o+(W*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(W*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);P=c[o+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{o=c[T>>2]|0;V=o+(O*56|0)|0;i=c[o+(O*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(O*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;i=c[o+(I*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(I*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;i=c[o+(C*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(C*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;i=c[o+(x*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(x*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;i=c[o+(r*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(r*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(r*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=X;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[l>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);i=7;break}else{i=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);i=7;break}}while(0);if((oa|0)==1830){oa=0;c[(c[i+12>>2]|0)+(((o|0)%16|0)*56|0)+48>>2]=_;o=$;i=0;break}if(!Z){o=$;break}X=c[Z+4>>2]|0;do if(X|0){if((c[X>>2]|0)>0){Y=X+12|0;W=0;do{o=c[Y>>2]|0;Z=o+(W*56|0)|0;l=c[o+(W*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(W*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);P=c[o+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{o=c[T>>2]|0;V=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);zg(c[o+(r*56|0)+48>>2]|0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=Z;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[X>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](X);break}else{fa=Wa[c[29352>>2]&127](X)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](X);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](_);o=$;break}else{o=Wa[c[29352>>2]&127](_)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](_);o=$;break}}while(0);aa=aa+16|0;l=c[ia>>2]|0}while((i|0)==0&(l|0)>(aa|0))}}else oa=1534}else{oa=Hd;c[oa>>2]=0;c[oa+4>>2]=0;oa=1534}if((oa|0)==1534){oa=0;i=$h(ha,i,Hd,rf)|0;S=c[rf>>2]|0;U=S}T=(i|0)==0;do if(!T){if(U){if((c[U>>2]|0)>0){P=U+12|0;O=0;do{o=c[P>>2]|0;Q=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+48>>2]|0;do if(l|0){xg(c[l+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{ja=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{ja=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{ja=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{ja=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{ja=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{ja=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{ja=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{ja=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=Q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[U>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](S);break}else{ja=Wa[c[29352>>2]&127](S)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](S);break}}}else R=U;while(0);if(T)ka=ka+1|0;else{oa=2043;break}}do if((oa|0)==2043)if(R){if((c[R>>2]|0)>0){P=R+12|0;O=0;do{o=c[P>>2]|0;Q=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+48>>2]|0;do if(l|0){xg(c[l+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{oa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{oa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{oa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{oa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{oa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{oa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{oa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{oa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=Q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[R>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](R);oa=2139;break}else{oa=Wa[c[29352>>2]&127](R)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](R);oa=2139;break}}else oa=2139;else if((oa|0)==2138){oa=0;i=_h(ma+64|0,R)|0;c[ma+20>>2]=R;if(!i)i=0;else oa=2139}while(0);c[Yd>>2]=0;oa=2142}else{i=ch(c[na+40>>2]|0,Yd)|0;a[na+3>>0]=0;c[na+28>>2]=0;oa=2142}while(0);if((oa|0)==2142){oa=0;if(i|0){oa=2145;break c}ma=c[Yd>>2]|0;a[na+2>>0]=ma;if(!ma){l=m;q=pa;o=qa;i=0;break}}i=0;oa=28}else if((oa|0)==2160){c[l+28>>2]=0;switch(i|0){case 0:{a[l+2>>0]=0;i=f+160+(e[p+2>>1]<<2)|0;c[i>>2]=(c[i>>2]|0)+1;i=0;oa=20;break Pa}case 101:{a[l+2>>0]=1;l=m;o=pa;i=0;oa=21;break Pa}default:{oa=3855;break c}}}else if((oa|0)==3029){oa=0;o=c[p+12>>2]|0;i=pa+(o*40|0)|0;l=s+8|0;if((c[l>>2]|0)!=(i|0)?(c[l>>2]=i,vd=a[s+25>>0]|0,vd<<24>>24):0){l=c[p+8>>2]|0;i=vd&255;do{na=i;i=i+-1|0;c[s+28+(i<<2)>>2]=pa+((i+l|0)*40|0)}while((na|0)>1)}i=pa+(o*40|0)+12|0;c[i>>2]=(c[i>>2]|0)+1;i=c[s+4>>2]|0;if(!(c[p+4>>2]|0))cb[c[i+16>>2]&255](s,d[s+25>>0]|0,s+28|0);else cb[c[i+28>>2]&255](s,d[s+25>>0]|0,s+28|0);r=s+20|0;i=c[r>>2]|0;if(i){if((i|0)>0){i=c[s>>2]|0;do if(i){l=b[i+8>>1]|0;if((l&514)==514?(a[i+10>>0]|0)==1:0){i=c[i+16>>2]|0;break}if(!(l&1))i=Gg(i,1)|0;else i=0}else i=0;while(0);c[Ye>>2]=i;Ag(f,31408,Ye);i=c[r>>2]|0}else i=K;o=s+24|0;if(a[o>>0]|0){l=c[p+-16>>2]|0;do if(l|0){q=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(!(b[l>>1]&9216)){na=q;c[na>>2]=1;c[na+4>>2]=0;b[l>>1]=4;break}else{Pg(q,1,0);break}}while(0);a[o>>0]=0}o=c[s>>2]|0;l=o+8|0;if(!((b[l>>1]&9216)==0?(c[o+24>>2]|0)==0:0)){Cg(o);l=(c[s>>2]|0)+8|0}b[l>>1]=1;c[r>>2]=0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}}else{l=m;q=pa;o=qa;i=K}}else if((oa|0)==3761){oa=0;q=c[p+16>>2]|0;y=c[p+12>>2]|0;x=pa+(y*40|0)|0;if((c[q>>2]|0)!=(x|0)){c[q>>2]=x;i=a[q+25>>0]|0;if(!(i<<24>>24))i=0;else{o=c[p+8>>2]|0;l=i&255;do{na=l;l=l+-1|0;c[q+28+(l<<2)>>2]=pa+((l+o|0)*40|0)}while((na|0)>1)}}else i=a[q+25>>0]|0;w=pa+(y*40|0)+8|0;b[w>>1]=b[w>>1]&15904|1;cb[c[(c[q+4>>2]|0)+16>>2]&255](q,i&255,q+28|0);t=q+20|0;i=c[t>>2]|0;if(i){if((i|0)>0){i=b[w>>1]|0;if((i&514)==514?(a[pa+(y*40|0)+10>>0]|0)==1:0)i=c[pa+(y*40|0)+16>>2]|0;else if(!(i&1))i=Gg(x,1)|0;else i=0;c[ye>>2]=i;Ag(f,31408,ye);i=c[t>>2]|0}else i=K;r=c[q+16>>2]|0;s=c[p+4>>2]|0;o=c[Hb>>2]|0;Wa:do if(o|0){if((r|0)<0)while(1){l=c[o+12>>2]|0;if(l|0)ab[l&127](c[o+8>>2]|0);c[Hb>>2]=c[o+16>>2];Xa:do if(!(c[Ze>>2]|0)){l=o;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[o>>2]=c[af>>2];c[af>>2]=o;break Xa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else Xd(Cf,o);while(0);o=c[Hb>>2]|0;if(!o)break Wa}l=Hb;do{Ya:do if((c[o>>2]|0)==(r|0)?(Ed=c[o+4>>2]|0,(Ed|0)>-1):0){if((Ed|0)<=31?1<<Ed&s|0:0){oa=3803;break}q=c[o+12>>2]|0;if(q|0)ab[q&127](c[o+8>>2]|0);c[l>>2]=c[o+16>>2];if(c[Ze>>2]|0){Xd(Cf,o);break}q=o;do if((c[_e>>2]|0)>>>0<=q>>>0){if((c[$e>>2]|0)>>>0<=q>>>0)break;c[o>>2]=c[af>>2];c[af>>2]=o;break Ya}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else oa=3803;while(0);if((oa|0)==3803){oa=0;l=o+16|0}o=c[l>>2]|0}while((o|0)!=0)}while(0);c[t>>2]=0;if(!i)i=0;else{oa=3855;break c}}else i=K;l=b[w>>1]|0;if(l&18){if((l&2)!=0?(a[pa+(y*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(x,sd)|0;l=b[w>>1]|0}o=l&65535;if(o&18){l=c[pa+(y*40|0)+12>>2]|0;if(o&16384)l=(c[x>>2]|0)+l|0;if((l|0)>(c[(c[pa+(y*40|0)+32>>2]|0)+108>>2]|0)){oa=3891;break c}else{l=m;q=pa;o=qa}}else{l=m;q=pa;o=qa}}else{l=m;q=pa;o=qa}}while(0);if((oa|0)==20){l=m;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0;o=pa;oa=21}else if((oa|0)==28){oa=0;l=m;q=pa;o=qa;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0}else if((oa|0)==1074){oa=0;a[(c[o+40>>2]|0)+3>>0]=b[l>>1]&3;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break}}Za:do if((oa|0)==21){oa=0;if(c[lc>>2]|0){j=n;i=zf;break b}if(n>>>0<h>>>0){q=o;o=qa}else while(1){m=c[Af>>2]|0;if(!m){q=o;o=qa;break Za}pa=c[fb>>2]|0;h=pa+h|0;if(Wa[m&127](c[gb>>2]|0)|0){oa=3844;break c}if(n>>>0<h>>>0){q=o;o=qa;break}}}while(0);m=l;p=p+20|0;K=i;qa=o;pa=q}switch(oa|0){case 38:{c[Bf>>2]=0;a[Jd>>0]=c[p+8>>2];c[xf>>2]=(p-m|0)/20|0;oa=44;break}case 39:{j=p+4|0;l=(p-m|0)/20|0;c[Bf>>2]=i;a[Jd>>0]=c[p+8>>2];c[xf>>2]=l;i=b[p+2>>1]|0;if(i<<16>>16){c[ff>>2]=c[3504+((i&65535)+-1<<2)>>2];Ag(f,34155,ff);i=c[p+16>>2]|0;if(i|0){c[kf>>2]=c[mf>>2];c[kf+4>>2]=i;zf=dd(Cf,34176,kf)|0;c[mf>>2]=zf}}else{c[gf>>2]=c[p+16>>2];Ag(f,31408,gf)}oa=c[j>>2]|0;yf=c[hd>>2]|0;zf=c[mf>>2]|0;c[lf>>2]=l;c[lf+4>>2]=yf;c[lf+8>>2]=zf;Db(oa,34183,lf);oa=44;break}case 153:{vf=Oa;uf=c[vf+4>>2]|0;if((uf|0)>0|(uf|0)==0&(c[vf>>2]|0)>>>0>0){c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,Ae);o=k;q=h;h=1;i=zf;break a}if(c[(c[f>>2]|0)+456>>2]|0?c[bc>>2]|0:0)Bg(f,1)|0;c[ua>>2]=(c[ua>>2]|0)+2|1;t=pa+((c[p+4>>2]|0)*40|0)|0;c[Zc>>2]=t;r=p+8|0;if((c[r>>2]|0)>0){q=0;do{s=t+(q*40|0)|0;o=s+8|0;i=b[o>>1]|0;if(i&4096){j=i&65535;do if(j&18){do if(j&16384){l=s+12|0;j=(c[s>>2]|0)+(c[l>>2]|0)|0;if((j|0)<1)if(!(i&16))break;else i=1;else i=j;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[l>>2]|0)|0,0,c[s>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[s>>2]|0);i=b[o>>1]&-16897;b[o>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[o>>1]|0}while(0);i=i&-4097;b[o>>1]=i}if((i&514)==2)Jg(s)|0;q=q+1|0}while((q|0)<(c[r>>2]|0))}if(a[zf>>0]|0){l=p;j=m;i=zf;oa=3898;break a}if(a[qf>>0]&4)Za[c[of>>2]&127](4,c[pf>>2]|0,f,0)|0;c[xf>>2]=((p-m|0)/20|0)+1;o=k;l=100;oa=3884;break a}case 518:{oa=3891;break}case 599:{c[Ce>>2]=32306;c[Ce+4>>2]=86318;c[Ce+8>>2]=31517;Db(11,32001,Ce);i=11;oa=601;break}case 602:{l=p;j=h;i=zf;oa=3892;break a}case 717:{c[De>>2]=32306;c[De+4>>2]=68229;c[De+8>>2]=31517;Db(11,32001,De);o=k;q=h;h=11;i=zf;break a}case 720:{c[Ee>>2]=32306;c[Ee+4>>2]=68229;c[Ee+8>>2]=31517;Db(11,32001,Ee);o=k;q=h;h=11;i=zf;break a}case 730:{Ag(f,34243,Fe);o=k;q=h;h=5;i=zf;break a}case 774:{c[Ge>>2]=A;Ag(f,34294,Ge);o=k;q=h;h=1;i=zf;break a}case 776:{Ag(f,34316,He);o=k;q=h;h=5;i=zf;break a}case 780:{c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,Ie);o=k;l=1;oa=3884;break a}case 782:{c[xf>>2]=(p-m|0)/20|0;a[gd>>0]=0;c[Bf>>2]=5;o=k;l=5;oa=3884;break a}case 922:{j=c[p+4>>2]|0;i=c[p+8>>2]|0;if((j|0)==(d[gd>>0]|0)){Ag(f,(j|0)==0?34425:(i|0)==0?34516:34473,ef);o=k;q=h;h=1;i=zf;break a}do if(!i){if(j|0?(c[bd>>2]|0)>0:0){Ag(f,34370,cf);o=k;q=h;h=5;i=zf;break a}yf=c[f>>2]|0;zf=yf+464|0;yf=yf+472|0;zf=Sv(c[yf>>2]|0,c[yf+4>>2]|0,c[zf>>2]|0,c[zf+4>>2]|0)|0;yf=L()|0;if((yf|0)>0|(yf|0)==0&zf>>>0>0){c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,df);o=k;l=1;oa=3884;break a}else{i=j&255;break}}else{rg(Cf,516);i=1}while(0);a[gd>>0]=i;if((pg(f)|0)==5){c[xf>>2]=(p-m|0)/20|0;a[gd>>0]=1-j;c[Bf>>2]=5;o=k;l=5;oa=3884;break a}i=c[qd>>2]|0;if(i|0)do{c[qd>>2]=c[i+24>>2];do if(!(c[Ze>>2]|0)){zf=i;if((c[_e>>2]|0)>>>0<=zf>>>0?(c[$e>>2]|0)>>>0>zf>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{zf=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-zf;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(Cf,i);while(0);i=c[qd>>2]|0}while((i|0)!=0);c[Gd>>2]=0;c[Fd>>2]=0;a[Id>>0]=0;o=k;l=(c[Bf>>2]|0)==0?101:1;oa=3884;break a}case 950:{if((l&255|0)==5){c[xf>>2]=(p-m|0)/20|0;c[Bf>>2]=l;o=k;oa=3884;break a}else oa=1017;break}case 986:{i=c[mf>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}yf=i;if((c[_e>>2]|0)>>>0<=yf>>>0?(c[$e>>2]|0)>>>0>yf>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{yf=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-yf;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=1003;else i=0;else{if((e[Xc>>1]|0)>=28){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=1004;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=1004;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=1003}while(0);if((oa|0)==1003){i=_d(Cf,28,0)|0;oa=1004}if((oa|0)==1004)if(!i)i=0;else{ea=i;l=34557;fa=ea+28|0;do{a[ea>>0]=a[l>>0]|0;ea=ea+1|0;l=l+1|0}while((ea|0)<(fa|0))}c[mf>>2]=i;j=c[uf>>2]|0;i=c[z>>2]|0;l=c[j+(i<<4)+12>>2]|0;_a:do if((c[l>>2]|0)!=(c[rf>>2]|0)){if((i|0)>-1){yf=l+78|0;b[yf>>1]=b[yf>>1]|8;yf=(c[j+28>>2]|0)+78|0;b[yf>>1]=b[yf>>1]|8;c[hf>>2]=c[hf>>2]&-17}if((c[jf>>2]|0)==0?(tf=c[sf>>2]|0,(tf|0)>0):0){i=0;l=tf;while(1){j=c[j+(i<<4)+12>>2]|0;if(!(b[j+78>>1]&8))j=l;else{dh(j);j=c[sf>>2]|0}i=i+1|0;if((i|0)>=(j|0))break _a;l=j;j=c[uf>>2]|0}}}while(0);l=(d[vf>>0]|d[vf+1>>0]<<8)&-4|1;a[vf>>0]=l;a[vf+1>>0]=l>>8;l=17;oa=1017;break}case 1135:{c[s+40>>2]=0;o=k;q=h;h=7;i=zf;break a}case 1213:{o=k;q=h;h=i;i=zf;break a}case 1268:{l=p;j=h;i=zf;oa=3892;break a}case 1270:{o=k;q=h;h=i;i=zf;break a}case 1289:{c[Je>>2]=32306;c[Je+4>>2]=87969;c[Je+8>>2]=31517;Db(11,32001,Je);o=k;q=h;h=11;i=zf;break a}case 1328:{o=k;q=h;h=i;i=zf;break a}case 1345:{o=k;q=h;h=i;i=zf;break a}case 1382:{c[r>>2]=0;o=k;q=h;h=7;i=zf;break a}case 1481:{o=k;q=h;h=i;i=zf;break a}case 1492:{o=k;q=h;h=r;i=zf;break a}case 1519:{o=k;q=h;h=i;i=zf;break a}case 2145:{o=k;q=h;h=i;i=zf;break a}case 2221:{o=k;q=h;h=7;i=zf;break a}case 2226:{o=k;q=h;h=i;i=zf;break a}case 2253:{if(!((b[jb>>1]&9216)==0&(c[lb>>2]|0)==0))Cg(Hd);c[Ke>>2]=32306;c[Ke+4>>2]=81024;c[Ke+8>>2]=31517;Db(11,32001,Ke);i=11;oa=2256;break}case 2267:{c[Le>>2]=32306;c[Le+4>>2]=81057;c[Le+8>>2]=31517;Db(11,32001,Le);i=11;oa=2274;break}case 2280:{a[Jd>>0]=2;o=k;q=h;h=6;i=zf;break a}case 2282:{c[Me>>2]=32306;c[Me+4>>2]=72453;c[Me+8>>2]=31517;Db(11,32001,Me);i=0;j=11;oa=2353;break}case 2286:{i=0;j=l;oa=2353;break}case 2301:{if(r){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);i=0;oa=2353;break}else{oa=c[i+20>>2]|0;yf=oa+120|0;c[yf>>2]=(c[yf>>2]|0)+-1;oa=oa+136|0;c[i+16>>2]=c[oa>>2];c[oa>>2]=i;i=0;oa=2353;break}}else{i=0;oa=2353}break}case 2319:{i=0;j=l;oa=2353;break}case 2329:{i=0;j=l;oa=2353;break}case 2406:{o=k;q=h;h=l;i=zf;break a}case 2424:{$b(Cf);l=p;j=h;i=zf;oa=3892;break a}case 2425:{$b(Cf);o=k;q=h;h=i;i=zf;break a}case 2968:{Ag(f,34663,Xe);o=k;q=h;h=1;i=zf;break a}case 3073:{do if(o){i=b[o+8>>1]|0;if((i&514)==514?(a[o+10>>0]|0)==1:0){i=c[o+16>>2]|0;break}if(!(i&1))i=Gg(o,1)|0;else i=0}else i=0;while(0);c[bf>>2]=i;Ag(f,31408,bf);o=k;q=h;h=l;i=zf;break a}case 3094:{o=k;q=h;h=i;i=zf;break a}case 3115:{c[te>>2]=w?34752:34757;Ag(f,34700,te);o=k;q=h;h=1;i=zf;break a}case 3182:{c[ue>>2]=32306;c[ue+4>>2]=67051;c[ue+8>>2]=31517;Db(11,32001,ue);o=k;q=h;h=11;i=zf;break a}case 3215:{if(t<<24>>24==2){oa=o+22|0;b[oa>>1]=b[oa>>1]|128;oa=3236}else oa=3236;break}case 3400:{j=l;i=c[ad>>2]|0;oa=3401;break}case 3458:{o=k;q=h;h=i;i=zf;break a}case 3459:{Wa[c[x+28>>2]&127](c[rf>>2]|0)|0;l=p;j=h;i=zf;oa=3892;break a}case 3576:{oa=3891;break}case 3731:{i=i&65535;oa=3732;break}case 3733:{c[rc>>2]=(c[rc>>2]|0)+1;i=12;j=x;break}case 3844:{o=k;q=-1;m=l;h=9;i=zf;break a}case 3845:{o=k;q=h;h=i;i=zf;break a}case 3846:{o=k;q=h;h=i;i=zf;break a}case 3847:{o=k;q=h;h=i;i=zf;break a}case 3848:{o=k;q=h;h=i;i=zf;break a}case 3849:{o=k;q=h;h=i;i=zf;break a}case 3850:{o=k;q=h;h=i;i=zf;break a}case 3851:{o=k;q=h;h=i;i=zf;break a}case 3852:{o=k;q=h;h=i;i=zf;break a}case 3853:{o=k;q=h;h=i;i=zf;break a}case 3854:{o=k;q=h;h=r;i=zf;break a}case 3855:{o=k;q=h;h=i;i=zf;break a}case 3900:{Ra=Hf;return h|0}}switch(oa|0){case 44:if((pg(f)|0)==5){c[Bf>>2]=5;o=k;l=5;oa=3884;break a}else{o=k;l=(c[Bf>>2]|0)==0?101:1;oa=3884;break a}case 601:{o=k;q=h;h=i;i=zf;break a}case 1017:{o=k;q=h;h=l;i=zf;break a}case 2256:{o=k;q=h;h=i;i=zf;break a}case 2274:{o=k;q=h;h=i;i=zf;break a}case 2353:{b[B>>1]=4;o=A;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;o=k;q=h;h=j;i=zf;break a}case 3236:{c[ve>>2]=c[p+16>>2];Ag(f,34764,ve);o=k;q=h;h=262;i=zf;break a}case 3401:{c[ad>>2]=i+-1;o=k;q=h;h=j;i=zf;break a}case 3732:{a[Jd>>0]=i;i=12;j=x;break}case 3891:{Ag(f,31223,Be);o=k;q=h;h=18;i=zf;break a}}switch(i&15){case 12:{o=k;q=h;h=j;i=zf;break a}case 2:{l=p;j=h;i=zf;oa=3892;break a}default:h=0}Ra=Hf;return h|0}else{p=q;j=0;k=0;l=q;i=Cf+81|0}while(0);zf=(a[i>>0]|0)==0?9:7;c[Bf>>2]=zf;c[nf>>2]=c[22960+(zf<<2)>>2];Ag(f,31408,nf);n=j;o=k;q=h;m=l;h=zf}while(0);if((oa|0)==3892)if((a[i>>0]|0)==0?(a[Cf+82>>0]|0)==0:0){a[i>>0]=1;if((c[Cf+180>>2]|0)>0)c[Cf+264>>2]=1;h=Cf+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Cf+236>>2]|0;if(h){c[h+12>>2]=7;h=j;j=m;oa=3898}else{h=j;j=m;oa=3898}}else{h=j;j=m;oa=3898}if((oa|0)==3898){Ag(f,34831,yf);o=k;q=h;m=j;p=l;h=7}$a:while(1){if((oa|0)==3884){if(n>>>0<h>>>0)break;j=Cf+328|0;k=Cf+324|0;while(1){i=c[Af>>2]|0;if(!i)break $a;zf=c[j>>2]|0;h=zf+h|0;if(Wa[i&127](c[k>>2]|0)|0)break;if(n>>>0<h>>>0)break $a}q=-1;h=9;i=Cf+81|0}k=(a[i>>0]|0)==0?h:7;j=f+124|0;if((c[j>>2]|0)==0&(k|0)!=3082){switch(k|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=k&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}c[Ef>>2]=h;Ag(f,31408,Ef)}c[Bf>>2]=k;if((k|0)==3082){yf=c[f+188>>2]|0;zf=c[j>>2]|0;c[Gf>>2]=(p-m|0)/20|0;c[Gf+4>>2]=yf;c[Gf+8>>2]=zf;Db(3082,34799,Gf);pg(f)|0;if((a[i>>0]|0)==0?(a[Cf+82>>0]|0)==0:0){a[i>>0]=1;if((c[Cf+180>>2]|0)>0)c[Cf+264>>2]=1;h=Cf+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Cf+236>>2]|0;if(h|0)c[h+12>>2]=7}}else{if((k&251|4|0)==14){h=c[Cf>>2]|0;i=c[h+68>>2]|0;if(!i)h=0;else h=Ya[i&127](h,0,0)|0;c[Cf+72>>2]=h}yf=c[f+188>>2]|0;zf=c[j>>2]|0;c[Ff>>2]=(p-m|0)/20|0;c[Ff+4>>2]=yf;c[Ff+8>>2]=zf;Db(k,34799,Ff);pg(f)|0}if(!(o<<24>>24)){o=0;h=q;l=1;oa=3884;continue}k=Cf+16|0;i=c[k>>2]|0;zf=(c[i+((o&255)+-1<<4)+12>>2]|0)+78|0;b[zf>>1]=b[zf>>1]|8;zf=(c[i+28>>2]|0)+78|0;b[zf>>1]=b[zf>>1]|8;zf=Cf+24|0;c[zf>>2]=c[zf>>2]&-17;if(c[Cf+56>>2]|0){h=q;l=1;oa=3884;continue}l=Cf+20|0;j=c[l>>2]|0;if((j|0)<=0){h=q;l=1;oa=3884;continue}h=0;while(1){i=c[i+(h<<4)+12>>2]|0;if(b[i+78>>1]&8){dh(i);j=c[l>>2]|0}h=h+1|0;if((h|0)>=(j|0)){h=q;l=1;oa=3884;continue $a}i=c[k>>2]|0}}Gf=f+176|0;c[Gf>>2]=(c[Gf>>2]|0)+n;Gf=l;Ra=Hf;return Gf|0}\nfunction $i(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,fd=0,gd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0;ud=Ra;Ra=Ra+1392|0;Qc=ud+1352|0;Nc=ud+1344|0;Mc=ud+1328|0;Lc=ud+1320|0;Kc=ud+1304|0;mb=ud+1296|0;Cc=ud+1288|0;Bc=ud+1280|0;ic=ud+1272|0;Eb=ud+1264|0;na=ud+1256|0;bc=ud+1248|0;_b=ud+1232|0;ac=ud+1216|0;$b=ud+1200|0;Xb=ud+1176|0;Wb=ud+1136|0;Ub=ud+1128|0;Db=ud+1120|0;Bb=ud+1112|0;Ma=ud+1104|0;kc=ud+1096|0;Ja=ud+1088|0;Ia=ud+1080|0;Zb=ud+1056|0;Ab=ud+1048|0;xb=ud+1040|0;lb=ud+1032|0;kb=ud+1024|0;jb=ud+1016|0;fb=ud+1008|0;eb=ud+1e3|0;Vc=ud+992|0;Jc=ud+976|0;Uc=ud+960|0;Tc=ud+944|0;wc=ud+920|0;vc=ud+904|0;uc=ud+872|0;tc=ud+840|0;Ib=ud+832|0;Hb=ud+824|0;wb=ud+816|0;ib=ud+808|0;hb=ud+800|0;dc=ud+792|0;jc=ud+784|0;Pc=ud+776|0;Va=ud+768|0;Qa=ud+760|0;Yb=ud+752|0;Vb=ud+744|0;cc=ud+736|0;qc=ud+728|0;o=ud+720|0;n=ud+712|0;i=ud+704|0;od=ud+696|0;nd=ud+688|0;md=ud+680|0;ld=ud+672|0;jd=ud+664|0;id=ud+648|0;gd=ud+640|0;$c=ud+632|0;Yc=ud+624|0;Fc=ud+616|0;Ec=ud+608|0;hc=ud+600|0;bb=ud+592|0;_a=ud+584|0;Za=ud+576|0;Xc=ud+568|0;Wc=ud+544|0;mc=ud+536|0;Ic=ud+528|0;Hc=ud+512|0;Gc=ud+504|0;Oc=ud;pc=ud+496|0;Tb=ud+488|0;Sb=ud+480|0;Mb=ud+472|0;Lb=ud+464|0;Ua=ud+456|0;Ta=ud+448|0;t=ud+440|0;H=ud+432|0;ka=ud+424|0;s=ud+416|0;_=ud+408|0;M=ud+400|0;w=ud+392|0;$=ud+384|0;va=ud+376|0;ua=ud+368|0;ta=ud+360|0;sa=ud+352|0;v=ud+344|0;X=ud+336|0;K=ud+328|0;Fa=ud+320|0;ra=ud+312|0;ja=ud+304|0;u=ud+296|0;qa=ud+288|0;ia=ud+280|0;J=ud+272|0;yc=ud+264|0;Xa=ud+256|0;ha=ud+248|0;Na=ud+240|0;pa=ud+232|0;oa=ud+224|0;ma=ud+216|0;Ka=ud+208|0;Ha=ud+200|0;la=ud+192|0;nc=ud+184|0;U=ud+176|0;gb=ud+168|0;vb=ud+160|0;ub=ud+152|0;tb=ud+144|0;sb=ud+136|0;rb=ud+128|0;yb=ud+120|0;W=ud+112|0;V=ud+104|0;I=ud+96|0;F=ud+88|0;T=ud+80|0;qd=ud+48|0;_c=ud+24|0;Qb=ud+1368|0;td=c[f>>2]|0;sd=a[16752+g>>0]|0;if(sd<<24>>24==0?td>>>0>=(c[f+1208>>2]|0)>>>0:0){l=f+4|0;m=c[l>>2]|0;i=f+8|0;if(td>>>0>i>>>0?(c[f>>2]=td+-12,aj(m,b[td+2>>1]|0,td+4|0),O=c[f>>2]|0,O>>>0>i>>>0):0){k=O;do{td=c[l>>2]|0;c[f>>2]=k+-12;aj(td,b[k+2>>1]|0,k+4|0);k=c[f>>2]|0}while(k>>>0>i>>>0)}cd(m,38790,T);c[l>>2]=m;f=0;Ra=ud;return f|0}a:do switch(g|0){case 0:{a[j+199>>0]=1;break}case 1:{a[j+199>>0]=2;break}case 2:{w=c[j>>2]|0;if(!(a[j+18>>0]|0)){A=w+81|0;if((a[A>>0]|0)==0?(kd=j+36|0,(c[kd>>2]|0)==0):0){z=j+8|0;k=c[z>>2]|0;if(!k){if((c[j+116>>2]|0)==0?(b[w+76>>1]&8)==0:0)a[j+23>>0]=1;b:do if(!(c[w+272>>2]|0)){do if((e[w+276>>1]|0)>=224){k=w+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];qd=w+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break b}k=w+296|0;l=c[k>>2]|0;if(!l){k=w+292|0;break}else{c[k>>2]=c[l>>2];qd=w+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break b}}else k=w+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=29}else rd=29;while(0);if((rd|0)==29)l=_d(w,224,0)|0;if(l|0){I=l+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[l>>2]=w;k=w+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=j;c[z>>2]=l;Di(l,61,0,1,0)|0;rd=34}}else{l=k;rd=34}if((rd|0)==34){x=l+108|0;k=c[x>>2]|0;y=l+112|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;I=c[l+104>>2]|0;a[I+(k*20|0)>>0]=69;I=I+(k*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}else Di(l,69,0,0,0)|0;do if(!(a[A>>0]|0)){v=j+84|0;i=c[v>>2]|0;if(!i){if(!(c[j+68>>2]|0))break;k=c[x>>2]|0;if(!(a[(c[l>>2]|0)+81>>0]|0))m=c[l+104>>2]|0;else m=59308}else{k=c[x>>2]|0;if(!(a[(c[l>>2]|0)+81>>0]|0))m=c[l+104>>2]|0;else m=59308}c[m+8>>2]=k;o=w+20|0;c:do if((c[o>>2]|0)>0){p=l+152|0;q=w+16|0;r=j+80|0;s=l+104|0;t=l+156|0;u=w+165|0;k=0;while(1){m=1<<k;do if(m&i|0){c[p>>2]=c[p>>2]|m;if((k|0)!=1?a[(c[(c[(c[l>>2]|0)+16>>2]|0)+(k<<4)+4>>2]|0)+9>>0]|0:0)c[t>>2]=c[t>>2]|m;n=c[(c[q>>2]|0)+(k<<4)+12>>2]|0;i=(c[r>>2]&m|0)!=0&1;h=c[n>>2]|0;n=c[n+4>>2]|0;m=c[x>>2]|0;if((c[y>>2]|0)>(m|0)){c[x>>2]=m+1;qd=c[s>>2]|0;a[qd+(m*20|0)>>0]=2;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=k;c[qd+(m*20|0)+8>>2]=i;c[qd+(m*20|0)+12>>2]=h;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(l,2,k,i,h)|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){qd=c[s>>2]|0;a[qd+(m*20|0)+1>>0]=-3;c[qd+(m*20|0)+16>>2]=n}if(a[u>>0]|0)break;m=c[x>>2]|0;if((m|0)<=0)break;b[(c[s>>2]|0)+((m+-1|0)*20|0)+2>>1]=1}while(0);k=k+1|0;if((k|0)>=(c[o>>2]|0))break c;i=c[v>>2]|0}}while(0);o=j+204|0;if((c[o>>2]|0)>0){p=j+252|0;q=l+104|0;n=0;do{k=c[(c[(c[p>>2]|0)+(n<<2)>>2]|0)+64>>2]|0;d:do if(!k)k=0;else while(1){if((c[k>>2]|0)==(w|0))break d;k=c[k+24>>2]|0;if(!k){k=0;break}}while(0);m=c[x>>2]|0;if((c[y>>2]|0)>(m|0)){c[x>>2]=m+1;I=c[q>>2]|0;a[I+(m*20|0)>>0]=-96;I=I+(m*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}else m=Di(l,160,0,0,0)|0;do if(!(a[(c[l>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[x>>2]|0)+-1|0;i=c[q>>2]|0;h=i+(m*20|0)+1|0;if(a[h>>0]|0){Ei(l,i+(m*20|0)|0,k,-12);break}if(!k)break;c[i+(m*20|0)+16>>2]=k;a[h>>0]=-12;qd=k+12|0;c[qd>>2]=(c[qd>>2]|0)+1}while(0);n=n+1|0}while((n|0)<(c[o>>2]|0))}c[o>>2]=0;k=c[z>>2]|0;e:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;f:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=91;else{k=0;break e}else{do if((e[i+276>>1]|0)>=224){m=i+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];qd=i+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break f}m=i+296|0;k=c[m>>2]|0;if(!k){k=i+292|0;break}else{c[m>>2]=c[k>>2];qd=i+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break f}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=91}while(0);if((rd|0)==91)k=_d(i,224,0)|0;if(!k)k=0;else{I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=i;m=i+4|0;i=c[m>>2]|0;if(i|0)c[i+4>>2]=k;c[k+8>>2]=i;c[k+4>>2]=0;c[m>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[z>>2]=k;Di(k,61,0,1,0)|0}}while(0);p=j+104|0;if((c[p>>2]|0)>0){q=j+108|0;r=k+108|0;s=k+112|0;t=k+104|0;o=0;do{u=c[q>>2]|0;i=c[u+(o<<4)>>2]|0;h=c[u+(o<<4)+4>>2]|0;n=d[u+(o<<4)+8>>0]|0;u=c[u+(o<<4)+12>>2]|0;m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;qd=c[t>>2]|0;a[qd+(m*20|0)>>0]=-97;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=i;c[qd+(m*20|0)+8>>2]=h;c[qd+(m*20|0)+12>>2]=n;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(k,159,i,h,n)|0;do if(!(a[(c[k>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;i=c[t>>2]|0;h=i+(m*20|0)+1|0;if(a[h>>0]|0){Ei(k,i+(m*20|0)|0,u,-1);break}if(!u)break;c[i+(m*20|0)+16>>2]=u;a[h>>0]=-1}while(0);o=o+1|0}while((o|0)<(c[p>>2]|0))}o=c[z>>2]|0;k=c[j+112>>2]|0;g:do if(k|0){p=(c[j>>2]|0)+16|0;q=o+108|0;r=o+112|0;s=o+104|0;t=j+40|0;do{n=c[k+8>>2]|0;h=c[k+12>>2]|0;Gj(j,0,n,c[(c[(c[p>>2]|0)+(n<<4)+12>>2]|0)+72>>2]|0,108);n=h+-1|0;i=c[c[k+4>>2]>>2]|0;m=c[q>>2]|0;if((c[r>>2]|0)>(m|0)){c[q>>2]=m+1;qd=c[s>>2]|0;a[qd+(m*20|0)>>0]=110;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=0;c[qd+(m*20|0)+8>>2]=n;c[qd+(m*20|0)+12>>2]=0;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(o,110,0,n,0)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[q>>2]|0)+-1|0;Ei(o,(c[s>>2]|0)+(m*20|0)|0,i,0)}m=ed(o,12,17904)|0;if(!m)break g;c[m+8>>2]=h;qd=h+2|0;c[m+12>>2]=qd;c[m+52>>2]=h;c[m+64>>2]=n;c[m+72>>2]=h;b[m+62>>1]=16;c[m+88>>2]=h+1;c[m+112>>2]=h;c[m+124>>2]=h;c[m+148>>2]=qd;c[m+144>>2]=h;c[m+208>>2]=h;if(!(c[t>>2]|0))c[t>>2]=1;k=c[k>>2]|0}while((k|0)!=0)}while(0);o=c[j+68>>2]|0;if(o|0?(a[j+23>>0]=0,(c[o>>2]|0)>0):0){n=0;do{k=c[o+4+(n*20|0)>>2]|0;p=c[o+4+(n*20|0)+16>>2]|0;do if(k){if((a[k>>0]|0)!=-88){h=Jj(j,k,p)|0;rd=132;break}h=c[z>>2]|0;k=c[k+28>>2]|0;m=h+108|0;i=c[m>>2]|0;if((c[h+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[h+104>>2]|0;a[qd+(i*20|0)>>0]=78;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=k;c[qd+(i*20|0)+8>>2]=p;c[qd+(i*20|0)+12>>2]=0;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0;break}else{Di(h,78,k,p,0)|0;break}}else{h=Jj(j,0,p)|0;rd=132}while(0);do if((rd|0)==132){rd=0;if((h|0)==(p|0))break;k=c[z>>2]|0;if(!k)break;m=k+108|0;i=c[m>>2]|0;if((c[k+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[k+104>>2]|0;a[qd+(i*20|0)>>0]=79;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=h;c[qd+(i*20|0)+8>>2]=p;c[qd+(i*20|0)+12>>2]=0;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0;break}else{Di(k,79,h,p,0)|0;break}}while(0);n=n+1|0}while((n|0)<(c[o>>2]|0))}k=c[x>>2]|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;rd=c[l+104>>2]|0;a[rd+(k*20|0)>>0]=11;b[rd+(k*20|0)+2>>1]=0;c[rd+(k*20|0)+4>>2]=0;c[rd+(k*20|0)+8>>2]=1;c[rd+(k*20|0)+12>>2]=0;c[rd+(k*20|0)+16>>2]=0;a[rd+(k*20|0)+1>>0]=0;break}else{Di(l,11,0,1,0)|0;break}}while(0);if((c[kd>>2]|0)==0?(a[A>>0]|0)==0:0){hd(l,j);c[j+12>>2]=101;break a}}c[j+12>>2]=1;break a}k=j+12|0;if(!(c[k>>2]|0))c[k>>2]=1}break}case 3:{o=c[td+-8>>2]|0;n=c[j>>2]|0;do if(((a[n+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(z=c[n+312>>2]|0,z|0):0){k=$a[z&127](c[n+316>>2]|0,22,36223,0,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,F);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,I);c[j+12>>2]=1;break a}}while(0);h=j+8|0;k=c[h>>2]|0;if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;h:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=167;else break a;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break h}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break h}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=167}while(0);if((rd|0)==167)m=_d(i,224,0)|0;if(!m)break a;I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;r=m}else r=k;if((o|0)==7){k=r+108|0;l=c[k>>2]|0;if((c[r+112>>2]|0)>(l|0)){c[k>>2]=l+1;I=c[r+104>>2]|0;a[I+(l*20|0)>>0]=1;I=I+(l*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));break a}else{Di(r,1,0,0,0)|0;break a}}q=n+20|0;if((c[q>>2]|0)>0){h=(o|0)==9?2:1;m=r+108|0;k=r+112|0;n=r+104|0;o=r+152|0;p=r+156|0;i=0;do{l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;j=c[n>>2]|0;a[j+(l*20|0)>>0]=2;b[j+(l*20|0)+2>>1]=0;c[j+(l*20|0)+4>>2]=i;c[j+(l*20|0)+8>>2]=h;c[j+(l*20|0)+12>>2]=0;c[j+(l*20|0)+16>>2]=0;a[j+(l*20|0)+1>>0]=0}else Di(r,2,i,h,0)|0;l=1<<i;c[o>>2]=c[o>>2]|l;if((i|0)!=1?a[(c[(c[(c[r>>2]|0)+16>>2]|0)+(i<<4)+4>>2]|0)+9>>0]|0:0)c[p>>2]=c[p>>2]|l;i=i+1|0}while((i|0)<(c[q>>2]|0))}else{m=r+108|0;k=r+112|0}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;I=c[r+104>>2]|0;a[I+(l*20|0)>>0]=1;I=I+(l*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));break a}else{Di(r,1,0,0,0)|0;break a}}case 4:{c[td+16>>2]=7;break}case 300:case 7:case 6:case 5:{c[td+4>>2]=e[td+2>>1];break}case 9:case 8:{k=(b[td+-10>>1]|0)==12;h=k&1;k=k?39254:39263;l=c[j>>2]|0;do if(((a[l+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(S=c[l+312>>2]|0,S|0):0){k=$a[S&127](c[l+316>>2]|0,22,k,0,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,V);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,W);c[j+12>>2]=1;break a}}while(0);i=j+8|0;k=c[i>>2]|0;if(!k){m=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;i:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=213;else break a;else{do if((e[m+276>>1]|0)>=224){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break i}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break i}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=213}while(0);if((rd|0)==213)k=_d(m,224,0)|0;if(!k)break a;I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=m;l=m+4|0;m=c[l>>2]|0;if(m|0)c[m+4>>2]=k;c[k+8>>2]=m;c[k+4>>2]=0;c[l>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[i>>2]=k;Di(k,61,0,1,0)|0}l=k+108|0;m=c[l>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[k+104>>2]|0;a[j+(m*20|0)>>0]=1;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=1;c[j+(m*20|0)+8>>2]=h;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break a}else{Di(k,1,1,h,0)|0;break a}}case 10:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;j:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;k:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=236;else break j;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break k}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break k}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=236}while(0);if((rd|0)==236)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=241}}else{i=k;rd=241}while(0);l:do if((rd|0)==241){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(pb=c[k+312>>2]|0,pb|0):0){k=$a[pb&127](c[k+316>>2]|0,32,36223,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,yb);c[j+12>>2]=23;break l}if((k|2|0)==2)if(!k)break;else break l;else{cd(j,39231,rb);c[j+12>>2]=1;break l}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=(c[i+104>>2]|0)+(k*20|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0}else k=Di(i,0,0,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 11:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;m:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;n:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=291;else break m;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break n}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break n}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=291}while(0);if((rd|0)==291)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=296}}else{i=k;rd=296}while(0);o:do if((rd|0)==296){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(qb=c[k+312>>2]|0,qb|0):0){k=$a[qb&127](c[k+316>>2]|0,32,39270,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,sb);c[j+12>>2]=23;break o}if((k|2|0)==2)if(!k)break;else break o;else{cd(j,39231,tb);c[j+12>>2]=1;break o}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=c[i+104>>2]|0;a[j+(k*20|0)>>0]=0;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=1;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(i,0,1,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 12:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;p:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;q:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=346;else break p;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break q}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break q}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=346}while(0);if((rd|0)==346)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=351}}else{i=k;rd=351}while(0);r:do if((rd|0)==351){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(nb=c[k+312>>2]|0,nb|0):0){k=$a[nb&127](c[k+316>>2]|0,32,39254,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,ub);c[j+12>>2]=23;break r}if((k|2|0)==2)if(!k)break;else break r;else{cd(j,39231,vb);c[j+12>>2]=1;break r}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=c[i+104>>2]|0;a[j+(k*20|0)>>0]=0;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=2;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(i,0,2,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 13:{bj(j,td+-8|0,td+4|0,c[td+-44>>2]|0,0,0,c[td+-20>>2]|0);break}case 14:{rd=j+24|0;a[rd>>0]=(a[rd>>0]|0)+1<<24>>24;j=(c[j>>2]|0)+272|0;c[j>>2]=(c[j>>2]|0)+1;break}case 226:case 93:case 76:case 67:case 57:case 42:case 21:case 18:case 15:{c[td+16>>2]=0;break}case 16:{c[td+-20>>2]=1;break}case 43:case 17:{c[td+4>>2]=1;break}case 19:{cj(j,td+-20|0,td+-8|0,c[td+4>>2]&255,0);break}case 20:{k=td+4|0;cj(j,0,0,0,c[k>>2]|0);k=c[k>>2]|0;if(k|0)pi(c[j>>2]|0,k,1);break}case 22:{i=c[td+8>>2]|0;k=c[td+4>>2]|0;do if((i|0)==5)if(!k)k=0;else{l=a[k>>0]|0;do if(!(l<<24>>24)){l=38132;rd=397}else{qd=l&255;l=208+qd|0;if((qd|32|0)==114){l=a[k+1>>0]|0;if(!(l<<24>>24)){l=38133;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==111){l=a[k+2>>0]|0;if(!(l<<24>>24)){l=38134;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==119){l=a[k+3>>0]|0;if(!(l<<24>>24)){l=38135;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==105){l=a[k+4>>0]|0;if(!(l<<24>>24)){l=38136;rd=397;break}l=l&255;if((l|32|0)==100)break;else{m=100;l=208+l|0}}else m=105}else m=119}else m=111}else m=114;cb=d[l>>0]|0;rd=401}while(0);if((rd|0)==397){cb=0;m=a[208+(d[l>>0]|0)>>0]|0;rd=401}if((rd|0)==401?(cb|0)!=(m&255|0):0)break;c[td+-8>>2]=96;break a}while(0);c[td+-8>>2]=0;c[gb>>2]=i;c[gb+4>>2]=k;cd(j,38466,gb);break}case 23:{h=td+-8|0;q=c[j>>2]|0;n=c[j+228>>2]|0;if(n|0){t=n+42|0;if((c[q+116>>2]|0)<=(b[t>>1]|0)){c[U>>2]=c[n>>2];cd(j,38221,U);break a}i=td+-4|0;s=td+8|0;m=(c[i>>2]|0)+2+(c[s>>2]|0)|0;p=q+272|0;s:do if(c[p>>2]|0)if(!(a[q+81>>0]|0))rd=417;else break a;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){k=q+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=q+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break s}k=q+296|0;l=c[k>>2]|0;if(!l){k=q+292|0;break}else{c[k>>2]=c[l>>2];r=q+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break s}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=417}while(0);if((rd|0)==417)r=_d(q,m,0)|0;if(r|0){t:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;u:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=443;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){pd=c[14978]|0;od=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;nd=L()|0;c[14768]=((nd|0)<0|(nd|0)==0&od>>>0<=pd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break t;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break t}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=443;break u}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=443;break u}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=443}while(0);if((rd|0)==443)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=r;nd=h;od=c[nd+4>>2]|0;pd=l;c[pd>>2]=c[nd>>2];c[pd+4>>2]=od;pd=j+272|0;c[k+12>>2]=c[pd>>2];c[pd>>2]=k}while(0);ew(r|0,c[h>>2]|0,c[i>>2]|0)|0;a[r+(c[i>>2]|0)>>0]=0;k=a[r>>0]|0;if((a[880+(k&255)>>0]|0)<0){i=k<<24>>24==91?93:k;m=0;k=1;while(1){l=a[r+k>>0]|0;if(l<<24>>24==i<<24>>24){k=k+1|0;l=r+m|0;if((a[r+k>>0]|0)!=i<<24>>24)break;a[l>>0]=i}else a[r+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0}pd=b[t>>1]|0;k=pd<<16>>16;o=n+4|0;v:do if(pd<<16>>16>0){n=c[o>>2]|0;h=0;while(1){m=c[n+(h<<4)>>2]|0;if(m|0){pd=a[r>>0]|0;l=(d[208+(pd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(pd<<24>>24==0|(l|0)!=0)){i=r;do{i=i+1|0;m=m+1|0;pd=a[i>>0]|0;l=(d[208+(pd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(l|0)!=0))}if(!l)break}h=h+1|0;if((h|0)>=(k|0))break v}c[nc>>2]=r;cd(j,41735,nc);if(c[q+480>>2]|0){Xd(q,r);break a}j=r;if((c[q+304>>2]|0)>>>0<=j>>>0?(c[q+308>>2]|0)>>>0>j>>>0:0){j=q+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break a}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break a}}while(0);do if(!(k&7)){l=c[o>>2]|0;m=(k<<4)+128|0;w:do if(!l){if(c[p>>2]|0){if(a[q+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){k=q+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];sc=q+284|0;c[sc>>2]=(c[sc>>2]|0)+1;sc=l;rd=488;break w}k=q+296|0;l=c[k>>2]|0;if(!l){k=q+292|0;break}else{c[k>>2]=c[l>>2];sc=q+284|0;c[sc>>2]=(c[sc>>2]|0)+1;sc=l;rd=488;break w}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}sc=_d(q,m,0)|0;rd=488}else{rd=l;if((c[q+304>>2]|0)>>>0<=rd>>>0?(c[q+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){rd=498;break}sc=Zd(q,l,m,0)|0;rd=488;break}sc=Zd(q,l,m,0)|0;rd=488}while(0);if((rd|0)==488?sc|0:0){l=sc;k=b[t>>1]|0;rd=498}if((rd|0)==498){c[o>>2]=l;q=k;p=l;break}if(c[q+480>>2]|0){Xd(q,r);break a}j=r;if((c[q+304>>2]|0)>>>0<=j>>>0?(c[q+308>>2]|0)>>>0>j>>>0:0){j=q+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break a}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break a}}else{q=k;p=c[o>>2]|0}while(0);o=p+(q<<4)|0;k=p+(q<<4)+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[o>>2]=r;k=c[s>>2]|0;if(!k){a[p+(q<<4)+13>>0]=65;a[p+(q<<4)+14>>0]=1}else{n=r+((Eu(r)|0)&1073741823)+1|0;ew(n|0,c[td+4>>2]|0,k|0)|0;a[n+(c[s>>2]|0)>>0]=0;k=a[n>>0]|0;if((a[880+(k&255)>>0]|0)<0){i=k<<24>>24==91?93:k;m=0;k=1;while(1){l=a[n+k>>0]|0;if(l<<24>>24==i<<24>>24){k=k+1|0;l=n+m|0;if((a[n+k>>0]|0)!=i<<24>>24)break;a[l>>0]=i}else a[n+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0;k=a[n>>0]|0}x:do if(!(k<<24>>24)){k=0;m=67}else{l=67;h=0;i=n;m=0;while(1){h=h<<8|d[208+(k&255)>>0];i=i+1|0;y:do if((h|0)<1685026146){if((h|0)<1667785074){switch(h|0){case 1651273570:break;default:{rd=521;break y}}switch(l<<24>>24){case 69:case 67:break;default:{rd=520;break y}}k=a[i>>0]|0;m=k<<24>>24==40?i:m;l=65;break}if((h|0)<1668050786)switch(h|0){case 1667785074:{k=i;l=66;rd=522;break y}default:{rd=521;break y}}switch(h|0){case 1668050786:break;default:{rd=521;break y}}k=m;l=66;rd=522}else{if((h|0)>=1919246700)if((h|0)<1952807028){switch(h|0){case 1919246700:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}else{rd=520;break}}else{switch(h|0){case 1952807028:break;default:{rd=521;break y}}k=m;l=66;rd=522;break}if((h|0)<1718382433){switch(h|0){case 1685026146:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}}else{switch(h|0){case 1718382433:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}}k=m;rd=522}while(0);if((rd|0)==520){k=m;rd=522}else if((rd|0)==521){rd=0;if((h&16777215|0)==6909556){k=m;m=68;break x}else{k=m;rd=522}}if((rd|0)==522){rd=0;m=k;k=a[i>>0]|0}if(!(k<<24>>24)){k=m;m=l;break}}}while(0);if(o|0){c[qd>>2]=0;z:do if(m<<24>>24<67){if(!k){c[qd>>2]=16;k=5;rd=533;break}l=a[k>>0]|0;if(l<<24>>24){while(1){if(((l&255)+-48|0)>>>0<10)break;k=k+1|0;l=a[k>>0]|0;if(!(l<<24>>24)){k=1;rd=533;break z}}ii(k,qd)|0;k=c[qd>>2]|0;if((k|0)<1016){k=((k|0)/4|0)+1|0;rd=533}else k=255}else{k=1;rd=533}}else{k=1;rd=533}while(0);a[p+(q<<4)+14>>0]=k}a[p+(q<<4)+13>>0]=m;rd=p+(q<<4)+15|0;a[rd>>0]=a[rd>>0]|4}b[t>>1]=(b[t>>1]|0)+1<<16>>16;c[j+76>>2]=0}}break}case 99:case 60:case 24:{c[td+20>>2]=0;c[td+16>>2]=0;break}case 25:{c[td+-28>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-32>>2]|0);break}case 26:{c[td+-52>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-56>>2]|0);break}case 27:{c[td+-4>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-8>>2]|0);break}case 28:{c[td+16>>2]=h;break}case 62:case 29:{qd=td+4|0;rd=c[qd+4>>2]|0;j=j+72|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 30:{dj(j,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 31:{dj(j,c[td+-8>>2]|0,(c[td+-20>>2]|0)+1|0,c[td+4>>2]|0);break}case 32:{dj(j,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 33:{rd=ej(j,165,c[td+-8>>2]|0,0)|0;dj(j,rd,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 34:{o=td+4|0;p=td+8|0;q=fj(j,110,c[o>>2]|0,c[p>>2]|0)|0;do if(q|0?(c[q+4>>2]&67108864|0)==0:0){l=c[q+8>>2]|0;n=a[l>>0]|0;h=d[208+(n&255)>>0]|0;k=h+-116|0;n=n<<24>>24==0;if(!(n|(k|0)!=0)){m=41806;i=l;do{i=i+1|0;m=m+1|0;rd=a[i>>0]|0;k=(d[208+(rd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(rd<<24>>24==0|(k|0)!=0))}if(k|0){k=h+-102|0;if(!(n|(k|0)!=0)){m=41811;do{l=l+1|0;m=m+1|0;rd=a[l>>0]|0;k=(d[208+(rd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(rd<<24>>24==0|(k|0)!=0))}if(k|0)break}a[q>>0]=-97}while(0);rd=c[o>>2]|0;dj(j,q,rd,rd+(c[p>>2]|0)|0);break}case 35:{i=c[td+4>>2]|0;m=c[j+228>>2]|0;if(((m|0?(aa=m+42|0,l=b[aa>>1]|0,l<<16>>16>=1):0)?(rd=c[m+4>>2]|0,j=(l<<16>>16)+-1|0,a[rd+(j<<4)+12>>0]=i,qd=m+36|0,c[qd>>2]=c[qd>>2]|512,a[rd+(j<<4)+15>>0]&8):0)?(k=c[m+8>>2]|0,k|0):0)while(1){if(((l<<16>>16)+-1|0)==(b[c[k+4>>2]>>1]|0)){j=k+55|0;rd=d[j>>0]|d[j+1>>0]<<8|8;a[j>>0]=rd;a[j+1>>0]=rd>>8}k=c[k+20>>2]|0;if(!k)break a;l=b[aa>>1]|0}break}case 36:{gj(j,0,c[td+-8>>2]|0,c[td+4>>2]|0,c[td+-20>>2]|0);break}case 37:{hj(j,0,0,0,0,c[td+4>>2]|0,0,0,0,0,1);break}case 38:{k=c[td+-8>>2]|0;l=c[j+228>>2]|0;m=c[j>>2]|0;if((l|0?(Ob=j+200|0,(a[Ob>>0]|0)!=1):0)?(b[(c[(c[(c[m+16>>2]|0)+(d[m+164>>0]<<4)+4>>2]|0)+4>>2]|0)+22>>1]&1)==0:0){o=l+24|0;n=nj(m,c[o>>2]|0,k)|0;c[o>>2]=n;o=c[j+76>>2]|0;if(!o)break a;s=j+72|0;if(!n)break a;p=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;q=c[s>>2]|0;A:do if(q){i=Sv(o|0,0,1,0)|0;h=L()|0;B:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=586;else{rd=588;break A}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break B}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break B}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=586}while(0);if((rd|0)==586)r=_d(m,i,h)|0;if(r){ew(r|0,q|0,o|0)|0;a[r+o>>0]=0;k=n+4+(p*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=588}else rd=588;while(0);if((rd|0)==588){k=n+4+(p*20|0)+4|0;c[k>>2]=0}if((d[Ob>>0]|0)<=1)break a;i=c[k>>2]|0;m=c[j>>2]|0;C:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=621;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=621;break C}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=621;break C}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=621}while(0);if((rd|0)==621)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k;break a}if(k|0)ni(m,k);break}case 39:{ij(j,0,td+-20|0,c[td+-8>>2]|0,c[td+4>>2]|0);break}case 40:{l=c[td+4>>2]|0;k=c[j+228>>2]|0;if(k|0?(x=c[k+16>>2]|0,x|0):0)a[x+24>>0]=l;break}case 41:{m=c[j+228>>2]|0;if(m|0?(wa=(b[m+42>>1]|0)+-1|0,ba=c[j>>2]|0,ca=qj(ba,td+4|0)|0,ca|0):0){l=c[j>>2]|0;k=a[l+78>>0]|0;qd=a[l+165>>0]|0;l=Zi(l,k,ca,qd&255)|0;do if(!(qd<<24>>24)){if(!l){N=_i(j,k,0,ca)|0;rd=636;break}if(!(c[l+12>>2]|0)){N=_i(j,k,l,ca)|0;rd=636}}else{N=l;rd=636}while(0);if((rd|0)==636?(N|0)==0:0){if(ba|0){if(c[ba+480>>2]|0){Xd(ba,ca);break a}j=ca;if((c[ba+304>>2]|0)>>>0<=j>>>0?(c[ba+308>>2]|0)>>>0>j>>>0:0){j=ba+300|0;c[ca>>2]=c[j>>2];c[j>>2]=ca;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](ca);break a}else{j=Wa[c[29352>>2]&127](ca)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ca);break a}}l=m+4|0;k=c[(c[l>>2]|0)+(wa<<4)+8>>2]|0;do if(k|0){if(ba|0){if(c[ba+480>>2]|0){Xd(ba,k);break}j=k;if((c[ba+304>>2]|0)>>>0<=j>>>0?(c[ba+308>>2]|0)>>>0>j>>>0:0){j=ba+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[(c[l>>2]|0)+(wa<<4)+8>>2]=ca;k=c[m+8>>2]|0;if(k|0)do{if((wa|0)==(b[c[k+4>>2]>>1]|0))c[c[k+32>>2]>>2]=c[(c[l>>2]|0)+(wa<<4)+8>>2];k=c[k+20>>2]|0}while((k|0)!=0)}break}case 44:{c[td+16>>2]=0;break}case 45:{j=td+-8|0;c[j>>2]=c[j>>2]&~c[td+8>>2]|c[td+4>>2];break}case 46:{c[td+-8>>2]=0;c[td+-4>>2]=0;break}case 47:{c[td+-20>>2]=0;c[td+-16>>2]=0;break}case 48:{c[td+-20>>2]=c[td+4>>2];c[td+-16>>2]=255;break}case 49:{c[td+-20>>2]=c[td+4>>2]<<8;c[td+-16>>2]=65280;break}case 50:{c[td+-8>>2]=8;break}case 51:{c[td+-8>>2]=9;break}case 52:{c[td+4>>2]=10;break}case 53:{c[td+4>>2]=7;break}case 54:{c[td+-8>>2]=0;break}case 55:{c[td+-20>>2]=0;break}case 156:case 71:case 56:{c[td+-8>>2]=c[td+4>>2];break}case 227:case 201:case 198:case 75:case 58:{c[td+-8>>2]=1;break}case 59:{c[td+-8>>2]=0;break}case 61:{c[j+76>>2]=0;break}case 63:{gj(j,c[td+-32>>2]|0,c[td+4>>2]|0,c[td+-20>>2]|0,0);break}case 64:{hj(j,0,0,0,c[td+-20>>2]|0,c[td+4>>2]|0,0,0,0,0,1);break}case 65:{k=c[td+-20>>2]|0;l=c[j+228>>2]|0;m=c[j>>2]|0;if((l|0?(Pb=j+200|0,(a[Pb>>0]|0)!=1):0)?(b[(c[(c[(c[m+16>>2]|0)+(d[m+164>>0]<<4)+4>>2]|0)+4>>2]|0)+22>>1]&1)==0:0){o=l+24|0;n=nj(m,c[o>>2]|0,k)|0;c[o>>2]=n;o=c[j+76>>2]|0;if(!o)break a;s=j+72|0;if(!n)break a;p=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;q=c[s>>2]|0;D:do if(q){i=Sv(o|0,0,1,0)|0;h=L()|0;E:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=695;else{rd=697;break D}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break E}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break E}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=695}while(0);if((rd|0)==695)r=_d(m,i,h)|0;if(r){ew(r|0,q|0,o|0)|0;a[r+o>>0]=0;k=n+4+(p*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=697}else rd=697;while(0);if((rd|0)==697){k=n+4+(p*20|0)+4|0;c[k>>2]=0}if((d[Pb>>0]|0)<=1)break a;i=c[k>>2]|0;m=c[j>>2]|0;F:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=730;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=730;break F}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=730;break F}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=730}while(0);if((rd|0)==730)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k;break a}if(k|0)ni(m,k);break}case 66:{ij(j,c[td+-68>>2]|0,td+-32|0,c[td+-20>>2]|0,c[td+-8>>2]|0);l=c[td+4>>2]|0;k=c[j+228>>2]|0;if(k|0?(y=c[k+16>>2]|0,y|0):0)a[y+24>>0]=l;break}case 70:case 68:{c[td+16>>2]=11;break}case 69:{c[td+-20>>2]=c[td+4>>2];break}case 72:{c[td+4>>2]=4;break}case 157:case 73:{c[td+4>>2]=5;break}case 74:{jj(j,c[td+4>>2]|0,0,c[td+-8>>2]|0);break}case 77:{h=td+-44|0;i=td+-32|0;o=c[td+-20>>2]|0;l=c[td+4>>2]|0;k=c[td+-80>>2]|0;m=c[td+-56>>2]|0;p=c[j>>2]|0;if((b[j+196>>1]|0)<=0){bj(j,h,i,k,1,0,m);n=c[j+228>>2]|0;if((n|0)!=0?(c[j+36>>2]|0)==0:0){k=c[j>>2]|0;do if(c[td+-28>>2]|0){if(a[k+165>>0]|0){cd(j,39404,Ha);h=0;break}if((wk(k,h)|0)<0){c[Ka>>2]=h;cd(j,39421,Ka);h=i}else h=i}while(0);m=c[n+72>>2]|0;if(!m)k=-1e6;else{i=c[p+16>>2]|0;k=0;while(1)if((c[i+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}pd=c[j>>2]|0;c[Qb>>2]=j;pd=c[pd+16>>2]|0;c[Qb+12>>2]=c[pd+(k<<4)>>2];c[Qb+4>>2]=c[pd+(k<<4)+12>>2];c[Qb+16>>2]=39579;c[Qb+20>>2]=h;c[Qb+8>>2]=(k|0)==1&1;if(!(cl(Qb,l)|0)){if((d[j+200>>0]|0)>1)k=0;else{k=l;l=fk(p,l,1)|0}c[n+12>>2]=l;pd=gk(p,o,1)|0;c[n+24>>2]=pd;if(!(a[p+81>>0]|0)){m=j+188|0;l=c[m>>2]|0;m=c[m+4>>2]|0;i=_c;c[i>>2]=l;c[i+4>>2]=m;i=l;if((a[i>>0]|0)!=59){l=i+m|0;c[_c>>2]=l}m=_c+4|0;c[m>>2]=0;i=c[td+-92>>2]|0;l=l-i|0;do l=l+-1|0;while((a[880+(d[i+l>>0]|0)>>0]&1)!=0);c[_c>>2]=i+l;c[m>>2]=1;cj(j,0,_c,0,0)}}else k=l}else k=l}else{cd(j,43004,la);k=l}if(k|0)pi(p,k,1);if((d[j+200>>0]|0)>1){if(o|0){k=qd+8|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[qd>>2]=j;c[qd+4>>2]=124;k=c[o>>2]|0;if((k|0)>0){l=o+4|0;while(1){m=c[l>>2]|0;if(m|0?_j(qd,m)|0:0)break;if((k|0)>1){k=k+-1|0;l=l+20|0}else break}h=c[o>>2]|0;if((h|0)>0){m=j+272|0;l=0;do{i=c[o+4+(l*20|0)+4>>2]|0;k=c[m>>2]|0;G:do if(k|0){while(1){if((c[k>>2]|0)==(i|0))break;k=c[k+12>>2]|0;if(!k)break G}c[k>>2]=0}while(0);l=l+1|0}while((l|0)!=(h|0))}}rd=781}}else rd=781;if((rd|0)==781?o|0:0)ri(p,o);break}case 78:{jj(j,c[td+4>>2]|0,1,c[td+-8>>2]|0);break}case 79:{c[qd>>2]=c[7517];c[qd+4>>2]=c[7518];c[qd+8>>2]=c[7519];c[qd+12>>2]=c[7520];c[qd+16>>2]=c[7521];c[qd+20>>2]=c[7522];k=td+4|0;kj(j,c[k>>2]|0,qd)|0;k=c[k>>2]|0;if(k|0)pi(c[j>>2]|0,k,1);break}case 80:{q=c[td+4>>2]|0;do if(!q){o=c[j>>2]|0;p=c[td+-8>>2]|0;if(p|0){H:do if((c[p>>2]|0)>0){m=o+480|0;i=o+304|0;h=o+308|0;n=o+300|0;if(!o){l=0;while(1){k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(0,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(0,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=l+1|0;if((l|0)>=(c[p>>2]|0))break H}}l=0;do{k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(o,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(o,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0){if(c[m>>2]|0){Xd(o,k);break}j=k;if((c[i>>2]|0)>>>0<=j>>>0?(c[h>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[n>>2];c[n>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);l=l+1|0}while((l|0)<(c[p>>2]|0))}while(0);if(o|0){if(c[o+480>>2]|0){Xd(o,p);break}j=p;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[p>>2]=c[j>>2];c[j>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{j=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}}else{c[q+64>>2]=c[td+-8>>2];k=c[q+52>>2]|0;if(k|0){c[q+56>>2]=0;h=q+8|0;c[h>>2]=c[h>>2]|256;m=q;i=0;while(1){i=i+1|0;l=c[k+52>>2]|0;c[k+56>>2]=m;rd=k+8|0;c[rd>>2]=c[rd>>2]|256;if(!l)break;else{m=k;k=l}}if((c[h>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,ma)}}while(0);c[td+-20>>2]=q;break}case 81:{q=c[td+4>>2]|0;do if(!q){o=c[j>>2]|0;p=c[td+-8>>2]|0;if(p|0){I:do if((c[p>>2]|0)>0){m=o+480|0;i=o+304|0;h=o+308|0;n=o+300|0;if(!o){l=0;while(1){k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(0,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(0,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=l+1|0;if((l|0)>=(c[p>>2]|0))break I}}l=0;do{k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(o,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(o,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0){if(c[m>>2]|0){Xd(o,k);break}j=k;if((c[i>>2]|0)>>>0<=j>>>0?(c[h>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[n>>2];c[n>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);l=l+1|0}while((l|0)<(c[p>>2]|0))}while(0);if(o|0){if(c[o+480>>2]|0){Xd(o,p);break}j=p;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[p>>2]=c[j>>2];c[j>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{j=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}}else{c[q+64>>2]=c[td+-8>>2];k=c[q+52>>2]|0;if(k|0){c[q+56>>2]=0;h=q+8|0;c[h>>2]=c[h>>2]|256;m=q;i=0;while(1){i=i+1|0;l=c[k+52>>2]|0;c[k+56>>2]=m;rd=k+8|0;c[rd>>2]=c[rd>>2]|256;if(!l)break;else{m=k;k=l}}if((c[h>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,oa)}}while(0);c[td+-32>>2]=q;break}case 82:{h=td+4|0;n=c[h>>2]|0;if(n|0?(da=c[n+52>>2]|0,da|0):0){c[n+56>>2]=0;o=n+8|0;c[o>>2]=c[o>>2]|256;m=n;i=0;l=da;while(1){i=i+1|0;k=c[l+52>>2]|0;c[l+56>>2]=m;rd=l+8|0;c[rd>>2]=c[rd>>2]|256;if(!k)break;else{m=l;l=k}}if((c[o>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,pa)}c[h>>2]=n;break}case 83:{k=c[td+4>>2]|0;p=td+-20|0;o=c[p>>2]|0;do if(k){l=k+52|0;m=c[l>>2]|0;if(m){c[qd+4>>2]=0;c[k+56>>2]=0;n=k+8|0;c[n>>2]=c[n>>2]|256;i=k;h=0;while(1){h=h+1|0;l=c[m+52>>2]|0;c[m+56>>2]=i;pd=m+8|0;c[pd>>2]=c[pd>>2]|256;if(!l)break;else{i=m;m=l}}if((c[n>>2]&1024|0)==0?(pd=c[(c[j>>2]|0)+124>>2]|0,(pd|0)>0&(h|0)>=(pd|0)):0)cd(j,44434,Na);l=mj(j,0,lj(j,0,0,0,qd,k,0,0)|0,0,0,0,0,0,0)|0;if(!l){rd=899;break}k=l;l=l+52|0}m=td+-8|0;a[k+4>>0]=c[m>>2];c[l>>2]=o;if(o|0){qd=o+8|0;c[qd>>2]=c[qd>>2]&-1025}qd=k+8|0;c[qd>>2]=c[qd>>2]&-1025;if((c[m>>2]|0)!=128)a[j+22>>0]=1}else rd=899;while(0);if((rd|0)==899)if(!o)k=0;else{pi(c[j>>2]|0,o,1);k=0}c[p>>2]=k;break}case 86:case 84:{c[td+4>>2]=e[td+2>>1];break}case 85:{c[td+-8>>2]=128;break}case 87:{j=mj(j,c[td+-68>>2]|0,c[td+-56>>2]|0,c[td+-44>>2]|0,c[td+-32>>2]|0,c[td+-20>>2]|0,c[td+-8>>2]|0,c[td+-80>>2]|0,c[td+4>>2]|0)|0;c[td+-92>>2]=j;break}case 88:{k=mj(j,c[td+-80>>2]|0,c[td+-68>>2]|0,c[td+-56>>2]|0,c[td+-44>>2]|0,c[td+-32>>2]|0,c[td+-8>>2]|0,c[td+-92>>2]|0,c[td+4>>2]|0)|0;c[td+-104>>2]=k;if(k|0){c[k+72>>2]=c[td+-20>>2];break a}l=c[j>>2]|0;k=c[td+-20>>2]|0;if(k|0)do{j=k;k=c[k+32>>2]|0;oi(l,j)}while((k|0)!=0);break}case 89:{j=mj(j,c[td+-8>>2]|0,0,0,0,0,0,512,0)|0;c[td+-32>>2]=j;break}case 90:{m=td+-44|0;k=c[m>>2]|0;l=mj(j,c[td+-8>>2]|0,0,0,0,0,0,1536,0)|0;if(k|0){j=k+8|0;c[j>>2]=c[j>>2]&-1025}if(l){a[l+4>>0]=-128;c[l+52>>2]=k;k=l}c[m>>2]=k;break}case 91:{c[td+4>>2]=1;break}case 92:{c[td+4>>2]=2;break}case 222:case 217:case 214:case 134:case 127:case 94:{c[td+16>>2]=0;break}case 95:{r=td+-44|0;k=nj(c[j>>2]|0,c[r>>2]|0,c[td+-20>>2]|0)|0;c[r>>2]=k;o=c[td+8>>2]|0;if(o){s=td+4|0;J:do if(k|0){p=(c[k>>2]|0)+-1|0;i=c[j>>2]|0;q=c[s>>2]|0;K:do if(q){h=Sv(o|0,0,1,0)|0;n=L()|0;L:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=932;else{rd=934;break K}else{do if(0<0|(0==0?o>>>0<(e[i+276>>1]|0)>>>0:0)){l=i+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=m;break L}l=i+296|0;m=c[l>>2]|0;if(!m){l=i+292|0;break}else{c[l>>2]=c[m>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=m;break L}}else l=i+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;rd=932}while(0);if((rd|0)==932)n=_d(i,h,n)|0;if(n){ew(n|0,q|0,o|0)|0;a[n+o>>0]=0;k=k+4+(p*20|0)+4|0;c[k>>2]=n;l=a[n>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[n+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=n+i|0;if((a[n+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[n+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=934}else rd=934;while(0);if((rd|0)==934){k=k+4+(p*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;M:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=967;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break J;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break J}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=967;break M}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=967;break M}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=967}while(0);if((rd|0)==967)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;od=s;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}}while(0);k=c[r>>2]|0}l=c[td+-32>>2]|0;m=c[td+-8>>2]|0;o=c[j>>2]|0;if(k|0){p=k+4+(((c[k>>2]|0)+-1|0)*20|0)+8|0;k=c[p>>2]|0;do if(k|0){if(o|0){if(c[o+480>>2]|0){Xd(o,k);break}j=k;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);n=l;while(1)if(!(a[880+(d[n>>0]|0)>>0]&1))break;else n=n+1|0;k=m-n|0;N:do if((k|0)<=0)if(!n)k=0;else{l=k;rd=988}else while(1){l=k+-1|0;if(!(a[880+(d[n+l>>0]|0)>>0]&1)){l=k;rd=988;break N}if((k|0)>1)k=l;else{rd=988;break}}while(0);O:do if((rd|0)==988){i=Sv(l|0,((l|0)<0)<<31>>31|0,1,0)|0;h=L()|0;P:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))rd=998;else{k=0;break O}else{do if(!(h>>>0>0|((h|0)==0?i>>>0>(e[o+276>>1]|0)>>>0:0))){m=o+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];j=o+284|0;c[j>>2]=(c[j>>2]|0)+1;break P}m=o+296|0;k=c[m>>2]|0;if(!k){k=o+292|0;break}else{c[m>>2]=c[k>>2];j=o+284|0;c[j>>2]=(c[j>>2]|0)+1;break P}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=998}while(0);if((rd|0)==998)k=_d(o,i,h)|0;if(!k)k=0;else{ew(k|0,n|0,l|0)|0;a[k+l>>0]=0}}while(0);c[p>>2]=k}break}case 96:{rd=c[j>>2]|0;c[qd>>2]=0;c[qd+4>>2]=0;qd=oj(rd,172,qd,0)|0;rd=td+-20|0;j=nj(c[j>>2]|0,c[rd>>2]|0,qd)|0;c[rd>>2]=j;break}case 97:{qd=ej(j,172,0,0)|0;qd=ej(j,134,oj(c[j>>2]|0,59,td+-20|0,1)|0,qd)|0;rd=td+-44|0;j=nj(c[j>>2]|0,c[rd>>2]|0,qd)|0;c[rd>>2]=j;break}case 239:case 238:case 109:case 98:{qd=td+4|0;rd=c[qd+4>>2]|0;j=td+-8|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 100:{m=c[j>>2]|0;Q:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](80)|0;rd=1028;break}k=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1029}else rd=1029}else k=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if((e[m+276>>1]|0)>=80){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1028;break Q}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1028;break Q}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,80,0)|0;rd=1028}while(0);if((rd|0)==1028)if(!k)k=0;else rd=1029;if((rd|0)==1029){I=k;J=I+80|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}c[td+16>>2]=k;break}case 101:{l=c[td+4>>2]|0;c[td+-8>>2]=l;if(l|0){k=c[l>>2]|0;if((k|0)>1)do{j=k;k=k+-1|0;a[l+8+(k*72|0)+36>>0]=a[l+8+((j+-2|0)*72|0)+36>>0]|0}while((j|0)>2);a[l+44>>0]=0}break}case 102:{k=c[td+-8>>2]|0;if(k|0?(p=c[k>>2]|0,(p|0)>0):0)a[k+8+((p+-1|0)*72|0)+36>>0]=c[td+4>>2];break}case 103:{c[td+16>>2]=0;break}case 104:{l=td+-68|0;k=lj(j,c[l>>2]|0,td+-56|0,td+-44|0,td+-32|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[l>>2]=k;l=td+-20|0;if(k|0?(P=c[td+-16>>2]|0,P|0):0){m=(c[k>>2]|0)+-1|0;if((P|0)==1?(c[l>>2]|0)==0:0){j=k+8+(m*72|0)+37|0;a[j>>0]=a[j>>0]|1;break a}j=qj(c[j>>2]|0,l)|0;c[k+8+(m*72|0)+64>>2]=j;j=k+8+(m*72|0)+37|0;a[j>>0]=a[j>>0]|2}break}case 105:{l=td+-92|0;k=lj(j,c[l>>2]|0,td+-80|0,td+-68|0,td+-20|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[l>>2]=k;l=c[td+-44>>2]|0;if(k|0){j=(c[k>>2]|0)+-1|0;c[k+8+(j*72|0)+64>>2]=l;j=k+8+(j*72|0)+37|0;a[j>>0]=a[j>>0]|4;break a}if(l|0)ri(c[j>>2]|0,l);break}case 106:{rd=td+-68|0;j=lj(j,c[rd>>2]|0,0,0,td+-20|0,c[td+-44>>2]|0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 107:{i=td+-68|0;l=c[i>>2]|0;if((((l|0)==0?(c[td+-16>>2]|0)==0:0)?(c[td+-8>>2]|0)==0:0)?(c[td+4>>2]|0)==0:0){c[i>>2]=c[td+-44>>2];break a}p=td+-44|0;m=c[p>>2]|0;k=c[m>>2]|0;if((k|0)==1){o=lj(j,l,0,0,td+-20|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[i>>2]=o;if(o|0){k=(c[o>>2]|0)+-1|0;l=c[p>>2]|0;m=l+16|0;c[o+8+(k*72|0)+8>>2]=c[m>>2];i=l+12|0;c[o+8+(k*72|0)+4>>2]=c[i>>2];h=l+28|0;c[o+8+(k*72|0)+20>>2]=c[h>>2];n=l+45|0;if(a[n>>0]&4){rd=l+72|0;c[o+8+(k*72|0)+64>>2]=c[rd>>2];c[rd>>2]=0;a[n>>0]=a[n>>0]&-5;rd=o+8+(k*72|0)+37|0;a[rd>>0]=a[rd>>0]|4}c[i>>2]=0;c[m>>2]=0;c[h>>2]=0}qi(c[j>>2]|0,c[p>>2]|0);break a}if(!m)k=0;else{if((k|0)>1)do{rd=k;k=k+-1|0;a[m+8+(k*72|0)+36>>0]=a[m+8+((rd+-2|0)*72|0)+36>>0]|0}while((rd|0)>2);a[m+44>>0]=0;k=c[p>>2]|0}rd=mj(j,0,k,0,0,0,0,2048,0)|0;j=lj(j,c[i>>2]|0,0,0,td+-20|0,rd,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[i>>2]=j;break}case 122:case 108:{c[td+16>>2]=0;c[td+20>>2]=0;break}case 110:{i=td+4|0;h=pj(j,0,i,0)|0;R:do if(!((h|0)==0|(d[j+200>>0]|0)<2)){n=c[h+16>>2]|0;m=c[j>>2]|0;S:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1093;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break R;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break R}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1093;break S}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1093;break S}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1093}while(0);if((rd|0)==1093)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=n;pd=i;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}while(0);c[i>>2]=h;break}case 111:{i=td+-20|0;h=td+4|0;n=pj(j,0,i,h)|0;T:do if(!((n|0)==0|(d[j+200>>0]|0)<2)){o=c[n+16>>2]|0;m=c[j>>2]|0;U:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1120;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break T;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break T}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1120;break U}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1120;break U}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1120}while(0);if((rd|0)==1120)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=o;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}while(0);c[i>>2]=n;break}case 112:{rd=td+4|0;j=pj(j,0,rd,0)|0;c[rd>>2]=j;break}case 113:{rd=td+-20|0;j=pj(j,0,rd,td+4|0)|0;c[rd>>2]=j;break}case 114:{k=td+-44|0;rd=pj(j,0,k,td+-20|0)|0;c[k>>2]=rd;if(rd|0){j=qj(c[j>>2]|0,td+4|0)|0;c[(c[k>>2]|0)+20>>2]=j}break}case 115:{k=td+-20|0;rd=pj(j,0,k,0)|0;c[k>>2]=rd;if(rd|0){j=qj(c[j>>2]|0,td+4|0)|0;c[(c[k>>2]|0)+20>>2]=j}break}case 116:{c[td+4>>2]=1;break}case 117:{rd=td+-8|0;j=rj(j,rd,0,0)|0;c[rd>>2]=j;break}case 118:{rd=td+-20|0;j=rj(j,rd,td+-8|0,0)|0;c[rd>>2]=j;break}case 119:{rd=td+-32|0;j=rj(j,rd,td+-20|0,td+-8|0)|0;c[rd>>2]=j;break}case 231:case 210:case 144:case 137:case 120:{c[td+-8>>2]=c[td+4>>2];break}case 232:case 213:case 211:case 143:case 138:case 136:case 121:{c[td+16>>2]=0;break}case 123:{qd=td+4|0;rd=c[qd+4>>2]|0;j=td+-20|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 124:{c[td+-8>>2]=0;c[td+-4>>2]=1;break}case 125:{c[td+-32>>2]=c[td+-8>>2];break}case 158:case 126:{c[td+16>>2]=0;break}case 135:case 128:{c[td+-20>>2]=c[td+4>>2];break}case 129:{l=td+-32|0;k=nj(c[j>>2]|0,c[l>>2]|0,c[td+-8>>2]|0)|0;c[l>>2]=k;l=c[td+4>>2]|0;if(!((k|0)==0|(l|0)<0))a[k+4+(((c[k>>2]|0)+-1|0)*20|0)+12>>0]=l;break}case 130:{l=td+-8|0;k=nj(c[j>>2]|0,0,c[l>>2]|0)|0;c[l>>2]=k;l=c[td+4>>2]|0;if(!((k|0)==0|(l|0)<0))a[k+4+(((c[k>>2]|0)+-1|0)*20|0)+12>>0]=l;break}case 131:{c[td+4>>2]=0;break}case 132:{c[td+4>>2]=1;break}case 133:{c[td+16>>2]=-1;break}case 139:{j=ej(j,141,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 140:{j=ej(j,141,c[td+-20>>2]|0,c[td+4>>2]|0)|0;c[td+-32>>2]=j;break}case 141:{j=ej(j,141,c[td+4>>2]|0,c[td+-20>>2]|0)|0;c[td+-32>>2]=j;break}case 142:{k=td+-20|0;l=c[k>>2]|0;m=td+-8|0;do if(l|0?(Y=c[td+-4>>2]|0,Y|0):0){i=(c[l>>2]|0)+-1|0;if((Y|0)==1?(c[m>>2]|0)==0:0){rd=l+8+(i*72|0)+37|0;a[rd>>0]=a[rd>>0]|1;break}rd=qj(c[j>>2]|0,m)|0;c[l+8+(i*72|0)+64>>2]=rd;rd=l+8+(i*72|0)+37|0;a[rd>>0]=a[rd>>0]|2}while(0);sj(j,c[k>>2]|0,c[td+4>>2]|0);break}case 145:{i=td+-44|0;k=c[i>>2]|0;l=td+-32|0;do if(k|0?(Z=c[td+-28>>2]|0,Z|0):0){m=(c[k>>2]|0)+-1|0;if((Z|0)==1?(c[l>>2]|0)==0:0){rd=k+8+(m*72|0)+37|0;a[rd>>0]=a[rd>>0]|1;break}rd=qj(c[j>>2]|0,l)|0;c[k+8+(m*72|0)+64>>2]=rd;rd=k+8+(m*72|0)+37|0;a[rd>>0]=a[rd>>0]|2}while(0);l=td+-8|0;k=c[l>>2]|0;if(k){if((c[k>>2]|0)>(c[(c[j>>2]|0)+116>>2]|0)){c[ha>>2]=38493;cd(j,44753,ha);k=c[l>>2]|0}}else k=0;tj(j,c[i>>2]|0,k,c[td+4>>2]|0,c[td+-56>>2]|0,0);break}case 146:{s=td+-44|0;n=nj(c[j>>2]|0,c[s>>2]|0,c[td+4>>2]|0)|0;c[s>>2]=n;s=td+-20|0;if(n|0){o=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;p=c[s>>2]|0;q=c[td+-16>>2]|0;V:do if(p){i=Sv(q|0,0,1,0)|0;h=L()|0;W:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1179;else{rd=1181;break V}else{do if(0<0|(0==0?q>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break W}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break W}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1179}while(0);if((rd|0)==1179)r=_d(m,i,h)|0;if(r){ew(r|0,p|0,q|0)|0;a[r+q>>0]=0;k=n+4+(o*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1181}else rd=1181;while(0);if((rd|0)==1181){k=n+4+(o*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;X:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1214;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1214;break X}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1214;break X}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1214}while(0);if((rd|0)==1214)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}break}case 147:{rd=td+-68|0;j=uj(j,c[rd>>2]|0,c[td+-32>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 148:{r=nj(c[j>>2]|0,0,c[td+4>>2]|0)|0;s=td+-20|0;Y:do if(r|0){n=(c[r>>2]|0)+-1|0;m=c[j>>2]|0;o=c[s>>2]|0;p=c[td+-16>>2]|0;Z:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;_:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1229;else{rd=1231;break Z}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break _}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break _}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1229}while(0);if((rd|0)==1229)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=r+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1231}else rd=1231;while(0);if((rd|0)==1231){k=r+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;$:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1264;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break Y;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break Y}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1264;break $}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1264;break $}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1264}while(0);if((rd|0)==1264)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[s>>2]=r;break}case 149:{j=uj(j,0,c[td+-32>>2]|0,c[td+4>>2]|0)|0;c[td+-44>>2]=j;break}case 150:{vj(j,c[td+-32>>2]|0,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+-56>>2]|0,c[td+4>>2]|0);break}case 151:{vj(j,c[td+-32>>2]|0,0,c[td+-20>>2]|0,c[td+-56>>2]|0,0);break}case 152:{c[td+16>>2]=0;break}case 153:{i=c[j>>2]|0;h=c[td+-80>>2]|0;n=c[td+-56>>2]|0;o=c[td+-8>>2]|0;p=c[td+4>>2]|0;aa:do if(!i){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1294;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1303}else rd=1303}else rd=1295}else{if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=1295;break}}else{do if((e[i+276>>1]|0)>=36){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1294;break aa}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1294;break aa}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,36,0)|0;rd=1294}while(0);if((rd|0)==1294)if(!k)rd=1295;else rd=1303;if((rd|0)==1295){if(h|0)ri(i,h);if(n|0)ni(i,n);if(o|0)ri(i,o);if(!p)k=0;else{ni(i,p);k=0}}else if((rd|0)==1303){c[k>>2]=h;c[k+4>>2]=n;c[k+8>>2]=o;c[k+12>>2]=p;c[k+16>>2]=0}c[td+-116>>2]=k;break}case 154:{i=c[j>>2]|0;h=c[td+-44>>2]|0;n=c[td+-20>>2]|0;ba:do if(!i){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1328;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1333}else rd=1333}else rd=1329}else{if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=1329;break}}else{do if((e[i+276>>1]|0)>=36){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1328;break ba}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1328;break ba}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,36,0)|0;rd=1328}while(0);if((rd|0)==1328)if(!k)rd=1329;else rd=1333;if((rd|0)==1329){if(h|0)ri(i,h);if(!n)k=0;else{ni(i,n);k=0}}else if((rd|0)==1333){c[k>>2]=h;c[k+4>>2]=n;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}c[td+-80>>2]=k;break}case 155:{m=c[j>>2]|0;ca:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1358;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1359}else rd=1359}else k=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if((e[m+276>>1]|0)>=36){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1358;break ca}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1358;break ca}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,36,0)|0;rd=1358}while(0);if((rd|0)==1358)if(!k)k=0;else rd=1359;if((rd|0)==1359){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}c[td+-32>>2]=k;break}case 159:{c[td+-20>>2]=c[td+-8>>2];break}case 160:{rd=td+-20|0;j=wj(j,c[rd>>2]|0,td+4|0)|0;c[rd>>2]=j;break}case 161:{rd=td+4|0;j=wj(j,0,rd)|0;c[rd>>2]=j;break}case 162:{c[td+-20>>2]=c[td+-8>>2];break}case 164:case 163:{rd=td+4|0;j=fj(j,59,c[rd>>2]|0,c[td+8>>2]|0)|0;c[rd>>2]=j;break}case 165:{h=td+-20|0;n=oj(c[j>>2]|0,59,h,1)|0;i=td+4|0;o=oj(c[j>>2]|0,59,i,1)|0;da:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;ea:do if(!m){if(!(c[7324]|0)){La=Wa[c[29340>>2]&127](16)|0;rd=1390;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l|0){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;k=l;rd=1391}else{k=l;rd=1391}}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];La=m+284|0;c[La>>2]=(c[La>>2]|0)+1;La=l;rd=1390;break ea}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];La=m+284|0;c[La>>2]=(c[La>>2]|0)+1;La=l;rd=1390;break ea}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}La=_d(m,16,0)|0;rd=1390}while(0);if((rd|0)==1390?La|0:0){k=La;rd=1391}if((rd|0)==1391){l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=o;od=i;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}m=c[j>>2]|0;fa:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1415;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break da;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break da}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1415;break fa}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1415;break fa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1415}while(0);if((rd|0)==1415)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=n;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;rd=j+272|0;c[k+12>>2]=c[rd>>2];c[rd>>2]=k}while(0);j=ej(j,134,n,o)|0;c[h>>2]=j;break}case 166:{n=td+-44|0;o=oj(c[j>>2]|0,59,n,1)|0;p=td+-20|0;q=oj(c[j>>2]|0,59,p,1)|0;i=td+4|0;h=oj(c[j>>2]|0,59,i,1)|0;r=ej(j,134,q,h)|0;ga:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;ha:do if(!m){if(!(c[7324]|0)){Ya=Wa[c[29340>>2]&127](16)|0;rd=1442;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l|0){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;k=l;rd=1443}else{k=l;rd=1443}}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Ya=m+284|0;c[Ya>>2]=(c[Ya>>2]|0)+1;Ya=l;rd=1442;break ha}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];Ya=m+284|0;c[Ya>>2]=(c[Ya>>2]|0)+1;Ya=l;rd=1442;break ha}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Ya=_d(m,16,0)|0;rd=1442}while(0);if((rd|0)==1442?Ya|0:0){k=Ya;rd=1443}if((rd|0)==1443){l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=h;od=i;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}m=c[j>>2]|0;ia:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1467;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break ga;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break ga}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1467;break ia}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1467;break ia}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1467}while(0);if((rd|0)==1467)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=q;pd=p;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;rd=j+272|0;c[k+12>>2]=c[rd>>2];c[rd>>2]=k}while(0);j=ej(j,134,o,r)|0;c[n>>2]=j;break}case 168:case 167:{rd=td+4|0;j=fj(j,e[td+2>>1]|0,c[rd>>2]|0,c[td+8>>2]|0)|0;c[rd>>2]=j;break}case 169:{rd=td+4|0;j=oj(c[j>>2]|0,147,rd,1)|0;c[rd>>2]=j;break}case 170:{m=td+4|0;k=c[m>>2]|0;if((a[k>>0]|0)==35?((d[k+1>>0]|0)+-48|0)>>>0<10:0){pd=m;l=c[pd>>2]|0;pd=c[pd+4>>2]|0;rd=qd;c[rd>>2]=l;c[rd+4>>2]=pd;if(a[j+18>>0]|0){k=ej(j,168,0,0)|0;c[m>>2]=k;if(k|0)ii(l+1|0,k+28|0)|0}else{c[J>>2]=qd;cd(j,38502,J);c[m>>2]=0}break a}u=c[td+8>>2]|0;w=fj(j,148,k,u)|0;c[m>>2]=w;v=c[j>>2]|0;if(w|0){t=c[w+8>>2]|0;k=t+1|0;l=a[k>>0]|0;ja:do if(!(l<<24>>24)){rd=j+196|0;k=(b[rd>>1]|0)+1<<16>>16;b[rd>>1]=k}else{if((a[t>>0]|0)==63){if((u|0)==2){i=(l<<24>>24)+-48|0;m=((i|0)<0)<<31>>31;k=qd;c[k>>2]=i;c[k+4>>2]=m;k=0}else{k=(Og(k,qd,u+-1|0,1)|0)!=0;i=qd;m=c[i+4>>2]|0;i=c[i>>2]|0}l=c[v+144>>2]|0;qd=((l|0)<0)<<31>>31;if(k|((m|0)<0|(m|0)==0&i>>>0<1)|((m|0)>(qd|0)|(m|0)==(qd|0)&i>>>0>l>>>0)){c[Xa>>2]=l;cd(j,45057,Xa);break a}k=i&65535;l=j+196|0;ka:do if((b[l>>1]|0)>=k<<16>>16){h=k<<16>>16;m=j+216|0;l=c[m>>2]|0;if(!l)l=0;else{n=c[l+4>>2]|0;i=2;while(1){if((c[l+(i<<2)>>2]|0)==(h|0))break;i=(c[l+(i+1<<2)>>2]|0)+i|0;if((i|0)>=(n|0))break ka}break ja}}else{b[l>>1]=k;l=j+216|0;m=l;l=c[l>>2]|0}while(0)}else{m=j+216|0;l=c[m>>2]|0;la:do if(l|0){h=c[l+4>>2]|0;k=2;while(1){i=l+(k+2<<2)|0;if((av(i,t,u)|0)==0?(a[i+u>>0]|0)==0:0)break;k=(c[l+(k+1<<2)>>2]|0)+k|0;if((k|0)>=(h|0))break la}k=c[l+(k<<2)>>2]|0;if(k&65535|0){k=k&65535;break ja}}while(0);qd=j+196|0;k=(b[qd>>1]|0)+1<<16>>16;b[qd>>1]=k}r=k<<16>>16;i=(u|0)/4|0;s=i+3|0;q=(l|0)==0;ma:do if(!q){o=l+4|0;i=c[o>>2]|0;h=i+s|0;n=c[l>>2]|0;if((h|0)>(n|0)){i=cw(n|0,((n|0)<0)<<31>>31|0,1)|0;i=Sv(i|0,L()|0,s|0,((s|0)<0)<<31>>31|0)|0;h=cw(i|0,L()|0,2)|0;n=L()|0;rd=l;if((c[v+304>>2]|0)>>>0<=rd>>>0?(c[v+308>>2]|0)>>>0>rd>>>0:0){if(!(n>>>0>0|((n|0)==0?h>>>0>(e[v+276>>1]|0)>>>0:0))){rd=1518;break}n=Zd(v,l,h,n)|0;rd=1515;break}n=Zd(v,l,h,n)|0;rd=1515}else{n=o;rd=1519}}else{i=i+13|0;o=cw(i|0,((i|0)<0)<<31>>31|0,2)|0;p=L()|0;if(c[v+272>>2]|0){if(a[v+81>>0]|0){l=0;break}}else{do if(!(p>>>0>0|((p|0)==0?o>>>0>(e[v+276>>1]|0)>>>0:0))){h=v+300|0;n=c[h>>2]|0;if(n|0){c[h>>2]=c[n>>2];rd=v+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1515;break ma}h=v+296|0;n=c[h>>2]|0;if(!n){h=v+292|0;break}else{c[h>>2]=c[n>>2];rd=v+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1515;break ma}}else h=v+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}n=_d(v,o,p)|0;rd=1515}while(0);if((rd|0)==1515)if(n)if(q){c[n+4>>2]=2;l=n;rd=1518}else{l=n;rd=1518}if((rd|0)==1518){c[l>>2]=i;n=l+4|0;i=c[n>>2]|0;h=i+s|0;rd=1519}if((rd|0)==1519){c[l+(i<<2)>>2]=r;c[l+(i+1<<2)>>2]=s;rd=l+(i+2<<2)|0;c[n>>2]=h;ew(rd|0,t|0,u|0)|0;a[rd+u>>0]=0}c[m>>2]=l}while(0);b[w+32>>1]=k;if((c[v+144>>2]|0)<(k<<16>>16|0))cd(j,45100,yc)}break}case 171:{l=td+-20|0;k=c[l>>2]|0;if((c[td+8>>2]|0)!=0?(A=oj(c[j>>2]|0,106,td+4|0,1)|0,(A|0)!=0):0){c[A+12>>2]=k;k=A+4|0;c[k>>2]=c[k>>2]|4352;k=A}c[l>>2]=k;break}case 172:{i=oj(c[j>>2]|0,36,td+-8|0,1)|0;c[td+-56>>2]=i;k=c[j>>2]|0;l=c[td+-32>>2]|0;m=(l|0)==0;if(!i){if(m)break a;ni(k,l);break a}if(!m){c[i+12>>2]=l;j=i+4|0;c[j>>2]=c[j>>2]|c[l+4>>2]&2097412}Ym(i);break}case 173:{l=c[td+-8>>2]|0;n=td+-44|0;h=c[td+-20>>2]|0;m=c[j>>2]|0;k=oj(m,161,n,1)|0;i=(l|0)==0;if(!k)if(i)k=0;else{ri(m,l);k=0}else{if(!i?(c[l>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ia>>2]=n;cd(j,45123,ia)}c[k+20>>2]=l;l=k+4|0;c[l>>2]=c[l>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),xa=c[(c[j>>2]|0)+120>>2]|0,(xa|0)<(c[k+24>>2]|0)):0){c[qa>>2]=xa;cd(j,41637,qa)}if((h|0)==1)c[l>>2]=c[l>>2]|2}c[n>>2]=k;break}case 174:{l=td+-32|0;k=oj(c[j>>2]|0,161,l,1)|0;if(k){c[k+20>>2]=0;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),B=c[(c[j>>2]|0)+120>>2]|0,(B|0)<(c[k+24>>2]|0)):0){c[u>>2]=B;cd(j,41637,u)}}else k=0;c[l>>2]=k;break}case 175:{l=c[td+-20>>2]|0;n=td+-56|0;h=c[td+-32>>2]|0;m=c[j>>2]|0;k=oj(m,161,n,1)|0;i=(l|0)==0;if(k){if(!i?(c[l>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ja>>2]=n;cd(j,45123,ja)}c[k+20>>2]=l;m=k+4|0;c[m>>2]=c[m>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),ya=c[(c[j>>2]|0)+120>>2]|0,(ya|0)<(c[k+24>>2]|0)):0){c[ra>>2]=ya;cd(j,41637,ra)}if((h|0)==1)c[m>>2]=c[m>>2]|2;l=c[td+4>>2]|0;if((l|0)!=0?(c[k+44>>2]=l,rd=c[m>>2]|0,c[m>>2]=rd|16777216,c[l+68>>2]=k,(rd&2|0)!=0):0)cd(j,45157,Fa)}else{if(!i)ri(m,l);oi(c[j>>2]|0,c[td+4>>2]|0);k=0}c[n>>2]=k;break}case 176:{i=td+-44|0;k=oj(c[j>>2]|0,161,i,1)|0;if(k){c[k+20>>2]=0;m=k+4|0;c[m>>2]=c[m>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),Q=c[(c[j>>2]|0)+120>>2]|0,(Q|0)<(c[k+24>>2]|0)):0){c[K>>2]=Q;cd(j,41637,K)}l=c[td+4>>2]|0;if((l|0)!=0?(c[k+44>>2]=l,rd=c[m>>2]|0,c[m>>2]=rd|16777216,c[l+68>>2]=k,(rd&2|0)!=0):0)cd(j,45157,X)}else{oi(c[j>>2]|0,c[td+4>>2]|0);k=0}c[i>>2]=k;break}case 177:{l=td+4|0;k=oj(c[j>>2]|0,161,l,1)|0;if(k){c[k+20>>2]=0;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),C=c[(c[j>>2]|0)+120>>2]|0,(C|0)<(c[k+24>>2]|0)):0){c[v>>2]=C;cd(j,41637,v)}}else k=0;c[l>>2]=k;break}case 178:{k=nj(c[j>>2]|0,c[td+-32>>2]|0,c[td+-8>>2]|0)|0;l=ej(j,169,0,0)|0;c[td+-44>>2]=l;if(l|0){c[l+20>>2]=k;break a}if(k|0)ri(c[j>>2]|0,k);break}case 186:case 185:case 184:case 183:case 182:case 181:case 180:case 179:{rd=td+-20|0;j=ej(j,e[td+-10>>1]|0,c[rd>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 187:{qd=td+4|0;j=c[qd+4>>2]|0;rd=td+-8|0;c[rd>>2]=c[qd>>2];c[rd+4>>2]=j;c[td+-4>>2]=j|-2147483648;break}case 188:{l=td+-8|0;m=td+-4|0;n=c[m>>2]|0;c[m>>2]=n&2147483647;m=nj(c[j>>2]|0,0,c[td+4>>2]|0)|0;o=td+-20|0;m=nj(c[j>>2]|0,m,c[o>>2]|0)|0;i=c[j>>2]|0;k=oj(i,161,l,1)|0;h=(m|0)==0;if(!k)if(h)k=0;else{ri(i,m);k=0}else{if(!h?(c[m>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[sa>>2]=l;cd(j,45123,sa)}c[k+20>>2]=m;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),za=c[(c[j>>2]|0)+120>>2]|0,(za|0)<(c[k+24>>2]|0)):0){c[ta>>2]=za;cd(j,41637,ta)}}c[o>>2]=k;if((n|0)<0){k=ej(j,19,k,0)|0;c[o>>2]=k}if(k|0){j=k+4|0;c[j>>2]=c[j>>2]|128}break}case 189:{l=td+-32|0;m=td+-28|0;n=c[m>>2]|0;c[m>>2]=n&2147483647;m=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;o=td+-44|0;m=nj(c[j>>2]|0,m,c[o>>2]|0)|0;m=nj(c[j>>2]|0,m,c[td+4>>2]|0)|0;i=c[j>>2]|0;k=oj(i,161,l,1)|0;h=(m|0)==0;if(!k)if(h)k=0;else{ri(i,m);k=0}else{if(!h?(c[m>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ua>>2]=l;cd(j,45123,ua)}c[k+20>>2]=m;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),Aa=c[(c[j>>2]|0)+120>>2]|0,(Aa|0)<(c[k+24>>2]|0)):0){c[va>>2]=Aa;cd(j,41637,va)}}c[o>>2]=k;if((n|0)<0){k=ej(j,19,k,0)|0;c[o>>2]=k}if(k|0){j=k+4|0;c[j>>2]=c[j>>2]|128}break}case 190:{rd=td+-8|0;j=ej(j,e[td+2>>1]|0,c[rd>>2]|0,0)|0;c[rd>>2]=j;break}case 191:{rd=td+-20|0;j=ej(j,51,c[rd>>2]|0,0)|0;c[rd>>2]=j;break}case 192:{m=td+-20|0;rd=td+4|0;k=ej(j,45,c[m>>2]|0,c[rd>>2]|0)|0;c[m>>2]=k;rd=c[rd>>2]|0;m=c[j>>2]|0;if(((k|0)!=0&(rd|0)!=0?(a[rd>>0]|0)==114:0)?(d[j+200>>0]|0)<=1:0){a[k>>0]=50;k=k+16|0;l=c[k>>2]|0;if(l|0)ni(m,l);c[k>>2]=0}break}case 193:{m=td+-32|0;rd=td+4|0;k=ej(j,160,c[m>>2]|0,c[rd>>2]|0)|0;c[m>>2]=k;rd=c[rd>>2]|0;m=c[j>>2]|0;if(((k|0)!=0&(rd|0)!=0?(a[rd>>0]|0)==114:0)?(d[j+200>>0]|0)<=1:0){a[k>>0]=51;k=k+16|0;l=c[k>>2]|0;if(l|0)ni(m,l);c[k>>2]=0}break}case 195:case 194:{j=ej(j,e[td+-10>>1]|0,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 196:{j=ej(j,(b[td+-10>>1]|0)==100?166:165,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 200:case 197:{c[td+4>>2]=0;break}case 199:{k=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;k=nj(c[j>>2]|0,k,c[td+4>>2]|0)|0;l=td+-44|0;m=ej(j,48,c[l>>2]|0,0)|0;c[l>>2]=m;if(!m){if(k|0)ri(c[j>>2]|0,k)}else c[m+20>>2]=k;if(c[td+-32>>2]|0){j=ej(j,19,c[l>>2]|0,0)|0;c[l>>2]=j}break}case 202:{m=td+-8|0;k=c[m>>2]|0;if(!k){if((d[j+200>>0]|0)>=2)break a;k=td+-44|0;l=c[k>>2]|0;if(l|0)ni(c[j>>2]|0,l);j=oj(c[j>>2]|0,147,17136+(c[td+-32>>2]<<3)|0,1)|0;c[k>>2]=j;break a}if((c[k>>2]|0)==1){k=k+4|0;l=c[k>>2]|0;c[k>>2]=0;k=c[m>>2]|0;if(k|0)ri(c[j>>2]|0,k);if(l|0){rd=l+4|0;c[rd>>2]=c[rd>>2]&-769|512}rd=td+-44|0;j=ej(j,(c[td+-32>>2]|0)==0?53:52,c[rd>>2]|0,l)|0;c[rd>>2]=j;break a}l=td+-44|0;k=ej(j,49,c[l>>2]|0,0)|0;c[l>>2]=k;if(!k){k=c[m>>2]|0;if(k|0)ri(c[j>>2]|0,k)}else{c[k+20>>2]=c[m>>2];k=c[l>>2]|0;if((c[j+36>>2]|0)==0?(Ym(k),ea=c[(c[j>>2]|0)+120>>2]|0,(ea|0)<(c[k+24>>2]|0)):0){c[$>>2]=ea;cd(j,41637,$)}}if(c[td+-32>>2]|0){j=ej(j,19,c[l>>2]|0,0)|0;c[l>>2]=j}break}case 203:{k=ej(j,131,0,0)|0;c[td+-20>>2]=k;l=c[td+-8>>2]|0;if(!k){if(!l)break a;pi(c[j>>2]|0,l,1);break a}c[k+20>>2]=l;rd=k+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(k),D=c[(c[j>>2]|0)+120>>2]|0,(D|0)<(c[k+24>>2]|0)):0){c[w>>2]=D;cd(j,41637,w)}break}case 204:{k=td+-44|0;l=ej(j,49,c[k>>2]|0,0)|0;c[k>>2]=l;m=c[td+-8>>2]|0;if(!l){if(m|0)pi(c[j>>2]|0,m,1)}else{c[l+20>>2]=m;rd=l+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(l),R=c[(c[j>>2]|0)+120>>2]|0,(R|0)<(c[l+24>>2]|0)):0){c[M>>2]=R;cd(j,41637,M)}}if(c[td+-32>>2]|0){j=ej(j,19,c[k>>2]|0,0)|0;c[k>>2]=j}break}case 205:{k=pj(j,0,td+-20|0,td+-8|0)|0;m=mj(j,0,k,0,0,0,0,0,0)|0;l=c[td+4>>2]|0;do if(l|0)if((k|0)==0|(m|0)==0){ri(c[j>>2]|0,l);break}else{rd=(c[k>>2]|0)+-1|0;c[k+8+(rd*72|0)+64>>2]=l;rd=k+8+(rd*72|0)+37|0;a[rd>>0]=a[rd>>0]|4;break}while(0);k=td+-44|0;l=ej(j,49,c[k>>2]|0,0)|0;c[k>>2]=l;if(!l){if(m|0)pi(c[j>>2]|0,m,1)}else{c[l+20>>2]=m;rd=l+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(l),fa=c[(c[j>>2]|0)+120>>2]|0,(fa|0)<(c[l+24>>2]|0)):0){c[_>>2]=fa;cd(j,41637,_)}}if(c[td+-32>>2]|0){j=ej(j,19,c[k>>2]|0,0)|0;c[k>>2]=j}break}case 206:{k=ej(j,20,0,0)|0;c[td+-32>>2]=k;l=c[td+-8>>2]|0;if(!k){if(!l)break a;pi(c[j>>2]|0,l,1);break a}c[k+20>>2]=l;rd=k+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(k),E=c[(c[j>>2]|0)+120>>2]|0,(E|0)<(c[k+24>>2]|0)):0){c[s>>2]=E;cd(j,41637,s)}break}case 207:{l=ej(j,149,c[td+-32>>2]|0,0)|0;i=td+-44|0;c[i>>2]=l;if(!l){k=c[td+-20>>2]|0;if(k|0)ri(c[j>>2]|0,k);k=c[td+-8>>2]|0;if(!k)break a;ni(c[j>>2]|0,k);break a}m=c[td+-8>>2]|0;k=c[td+-20>>2]|0;if(m){k=nj(c[j>>2]|0,k,m)|0;l=c[i>>2]|0}c[l+20>>2]=k;k=c[i>>2]|0;if((c[j+36>>2]|0)==0?(Ym(k),Ba=c[(c[j>>2]|0)+120>>2]|0,(Ba|0)<(c[k+24>>2]|0)):0){c[ka>>2]=Ba;cd(j,41637,ka)}break}case 208:{rd=td+-44|0;qd=nj(c[j>>2]|0,c[rd>>2]|0,c[td+-20>>2]|0)|0;c[rd>>2]=qd;j=nj(c[j>>2]|0,qd,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 209:{qd=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;rd=td+-32|0;c[rd>>2]=qd;j=nj(c[j>>2]|0,qd,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 316:{c[td+-44>>2]=c[td+-8>>2];break}case 215:{rd=td+-20|0;j=nj(c[j>>2]|0,c[rd>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 216:{rd=td+4|0;j=nj(c[j>>2]|0,0,c[rd>>2]|0)|0;c[rd>>2]=j;break}case 223:case 218:{c[td+-20>>2]=c[td+-8>>2];break}case 219:{h=td+-44|0;qd=pj(j,0,h,0)|0;hj(j,td+-80|0,td+-68|0,qd,c[td+-20>>2]|0,c[td+-116>>2]|0,td+-128|0,c[td+4>>2]|0,0,c[td+-92>>2]|0,0);if((d[j+200>>0]|0)>1?(q=c[j+232>>2]|0,q|0):0){i=c[q>>2]|0;m=c[j>>2]|0;na:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1732;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1732;break na}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1732;break na}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1732}while(0);if((rd|0)==1732)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}break}case 262:case 220:{c[td+4>>2]=2;break}case 221:{c[td+16>>2]=0;break}case 224:{r=td+-44|0;s=td+-20|0;pd=c[td+-8>>2]|0;qd=c[td+4>>2]|0;t=nj(c[j>>2]|0,c[r>>2]|0,0)|0;if((pd|0)!=0|(qd|0)!=-1?(a[(c[j>>2]|0)+165>>0]|0)==0:0){qd=c[s>>2]|0;c[H>>2]=c[td+-16>>2];c[H+4>>2]=qd;cd(j,45206,H)}oa:do if(t|0){n=(c[t>>2]|0)+-1|0;m=c[j>>2]|0;o=c[s>>2]|0;p=c[td+-16>>2]|0;pa:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;qa:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1751;else{rd=1753;break pa}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break qa}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break qa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1751}while(0);if((rd|0)==1751)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=t+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1753}else rd=1753;while(0);if((rd|0)==1753){k=t+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;ra:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1786;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break oa;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break oa}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1786;break ra}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1786;break ra}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1786}while(0);if((rd|0)==1786)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[r>>2]=t;break}case 225:{r=td+-20|0;pd=c[td+-8>>2]|0;qd=c[td+4>>2]|0;s=nj(c[j>>2]|0,0,0)|0;if((pd|0)!=0|(qd|0)!=-1?(a[(c[j>>2]|0)+165>>0]|0)==0:0){qd=c[r>>2]|0;c[t>>2]=c[td+-16>>2];c[t+4>>2]=qd;cd(j,45206,t)}sa:do if(s|0){n=(c[s>>2]|0)+-1|0;m=c[j>>2]|0;o=c[r>>2]|0;p=c[td+-16>>2]|0;ta:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;ua:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1804;else{rd=1806;break ta}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break ua}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break ua}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1804}while(0);if((rd|0)==1804)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=s+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1806}else rd=1806;while(0);if((rd|0)==1806){k=s+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;va:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1839;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break sa;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break sa}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1839;break va}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1839;break va}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1839}while(0);if((rd|0)==1839)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=r;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[r>>2]=s;break}case 228:{x=c[td+4>>2]|0;o=c[td+-8>>2]|0;y=c[j>>2]|0;wa:do if(!(a[y+81>>0]|0)){xa:do if(!(a[y+165>>0]|0)){m=j+4|0;i=y+24|0;h=(c[i>>2]&1|0)==0;n=y+16|0;pd=c[(c[n>>2]|0)+12>>2]|0;a[y+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(Ca=eh(y,0,m,0)|0,(Ca|0)!=0):0)k=Ca;else rd=1846;ya:do if((rd|0)==1846){k=c[y+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[n>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Oa=eh(y,k,m,0)|0,Oa|0):0){k=Oa;break ya}}while((l|0)>2);if(h)c[i>>2]=c[i>>2]&-2;if(!(a[y+89>>0]|0))break xa;c[i>>2]=c[i>>2]|16;break xa}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break wa}while(0);k=c[x+12>>2]|0;w=hi(y,c[x+16>>2]|0,k)|0;if(!w){if(!o){c[Ta>>2]=x;c[Ta+4>>2]=0;cd(j,45244,Ta)}else hl(j,k);a[j+17>>0]=1;break}pd=w+55|0;if((d[pd>>0]|d[pd+1>>0]<<8)&3){c[Ua>>2]=0;cd(j,45262,Ua);break}l=c[w+24>>2]|0;u=y+16|0;m=c[u>>2]|0;if(!l)v=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){v=k;break}else k=k+1|0}n=c[w+12>>2]|0;o=c[m+(v<<4)>>2]|0;t=(v|0)==1;k=t?34855:34585;m=c[j>>2]|0;l=a[m+165>>0]|0;if(!(l<<24>>24))if((a[j+200>>0]|0)==0?(Kb=c[m+312>>2]|0,(Kb|0)!=0):0){k=$a[Kb&127](c[m+316>>2]|0,9,k,0,o,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Lb);c[j+12>>2]=23;break}if((k|2|0)!=2){cd(j,39231,Mb);c[j+12>>2]=1;break}if(k|0)break;m=c[j>>2]|0;h=a[m+165>>0]|0}else h=0;else h=l;i=(v|0)==0?10:12;l=c[w>>2]|0;k=c[n>>2]|0;do if((h<<24>>24==0?(a[j+200>>0]|0)==0:0)?(Rb=c[m+312>>2]|0,Rb|0):0){k=$a[Rb&127](c[m+316>>2]|0,i,l,k,o,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Sb);c[j+12>>2]=23;break wa}if((k|2|0)==2)if(!k)break;else break wa;else{cd(j,39231,Tb);c[j+12>>2]=1;break wa}}while(0);s=j+8|0;k=c[s>>2]|0;i=j+116|0;if(!k){m=c[j>>2]|0;if((c[i>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;za:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1897;else break wa;else{do if((e[m+276>>1]|0)>=224){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];pd=m+284|0;c[pd>>2]=(c[pd>>2]|0)+1;break za}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];pd=m+284|0;c[pd>>2]=(c[pd>>2]|0)+1;break za}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1897}while(0);if((rd|0)==1897)l=_d(m,224,0)|0;if(!l)break;I=l+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[l>>2]=m;k=m+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=j;c[s>>2]=l;Di(l,61,0,1,0)|0;r=l}else r=k;q=c[i>>2]|0;q=(q|0)==0?j:q;k=q+84|0;l=c[k>>2]|0;p=1<<v;Aa:do if((((l&p|0)==0?(c[k>>2]=l|p,t):0)?(Dc=c[q>>2]|0,rc=Dc+16|0,(c[(c[rc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[Dc>>2]|0,0,Dc,qd,0,542)|0;if(k|0){cd(q,32157,pc);c[q+12>>2]=k;break}qd=c[qd>>2]|0;c[(c[rc>>2]|0)+20>>2]=qd;k=c[Dc+92>>2]|0;i=c[qd+4>>2]|0;c[i+4>>2]=c[qd>>2];do if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=1917;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=1917}while(0);do if((rd|0)==1917){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);rd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((rd|0)!=7)break;k=Dc+81|0;do if(!(a[k>>0]|0)){if(a[Dc+82>>0]|0)break;a[k>>0]=1;if((c[Dc+180>>2]|0)>0)c[Dc+264>>2]=1;k=Dc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Dc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break Aa}while(0)}while(0);l=q+80|0;c[l>>2]=c[l>>2]|p;l=q+20|0;a[l>>0]=a[l>>0]|1;l=c[w>>2]|0;c[Oc>>2]=c[(c[u>>2]|0)+(v<<4)>>2];c[Oc+4>>2]=34585;c[Oc+8>>2]=l;Ak(j,45335,Oc);l=c[w>>2]|0;m=c[(c[(c[j>>2]|0)+16>>2]|0)+(v<<4)>>2]|0;c[Gc>>2]=1;Cb(24,Oc,42737,Gc)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Hc>>2]=m;c[Hc+4>>2]=Oc;c[Hc+8>>2]=38091;c[Hc+12>>2]=l;Ak(j,42751,Hc)}c[Ic>>2]=2;Cb(24,Oc,42737,Ic)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Kc>>2]=m;c[Kc+4>>2]=Oc;c[Kc+8>>2]=38091;c[Kc+12>>2]=l;Ak(j,42751,Kc)}c[Lc>>2]=3;Cb(24,Oc,42737,Lc)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Mc>>2]=m;c[Mc+4>>2]=Oc;c[Mc+8>>2]=38091;c[Mc+12>>2]=l;Ak(j,42751,Mc)}c[Nc>>2]=4;Cb(24,Oc,42737,Nc)|0;k=c[j>>2]|0;if(Sd(k,Oc,m)|0){c[Qc>>2]=m;c[Qc+4>>2]=Oc;c[Qc+8>>2]=38091;c[Qc+12>>2]=l;Ak(j,42751,Qc);k=c[j>>2]|0}i=c[s>>2]|0;k=(c[c[(c[k+16>>2]|0)+(v<<4)+12>>2]>>2]|0)+1|0;m=i+108|0;l=c[m>>2]|0;if((c[i+112>>2]|0)>(l|0)){c[m>>2]=l+1;rd=c[i+104>>2]|0;a[rd+(l*20|0)>>0]=95;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=v;c[rd+(l*20|0)+8>>2]=1;c[rd+(l*20|0)+12>>2]=k;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(i,95,v,1,k)|0;kl(j,c[w+44>>2]|0,v);m=c[w>>2]|0;l=r+108|0;k=c[l>>2]|0;if((c[r+112>>2]|0)>(k|0)){c[l>>2]=k+1;j=c[r+104>>2]|0;a[j+(k*20|0)>>0]=-112;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=v;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(r,144,v,0,0)|0;if(!(a[(c[r>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[l>>2]|0)+-1|0;Ei(r,(c[r+104>>2]|0)+(k*20|0)|0,m,0)}}while(0);qi(y,x);break}case 229:{xj(j,0,c[td+4>>2]|0);break}case 230:{xj(j,td+-8|0,c[td+4>>2]|0);break}case 233:{yj(j,td+-8|0,td+4|0,0,0);break}case 234:{yj(j,td+-32|0,td+-20|0,td+4|0,0);break}case 235:{yj(j,td+-44|0,td+-32|0,td+-8|0,0);break}case 236:{yj(j,td+-32|0,td+-20|0,td+4|0,1);break}case 237:{yj(j,td+-44|0,td+-32|0,td+-8|0,1);break}case 240:{v=c[td+-32>>2]|0;w=(c[td+4>>2]|0)-v+(c[td+8>>2]|0)|0;k=c[td+-8>>2]|0;p=j+236|0;l=c[p>>2]|0;A=c[j>>2]|0;c[p>>2]=0;Ba:do if((l|0)!=0&(c[j+36>>2]|0)==0){z=c[l>>2]|0;i=c[l+20>>2]|0;if(!i)y=-1e6;else{h=c[A+16>>2]|0;m=0;while(1)if((c[h+(m<<4)+12>>2]|0)==(i|0)){y=m;break}else m=m+1|0}m=l+28|0;c[m>>2]=k;h=(k|0)==0;if(!h){i=k;do{c[i+4>>2]=l;i=c[i+36>>2]|0}while((i|0)!=0)}c[Qb>>2]=z;if(!z)i=0;else i=(Eu(z)|0)&1073741823;c[Qb+4>>2]=i;c[_c>>2]=j;x=A+16|0;q=c[x>>2]|0;c[_c+12>>2]=c[q+(y<<4)>>2];c[_c+4>>2]=c[q+(y<<4)+12>>2];c[_c+16>>2]=31419;c[_c+20>>2]=Qb;q=(y|0)==1;c[_c+8>>2]=q&1;if(!h)do{if(cl(_c,c[k+8>>2]|0)|0){k=0;rd=2083;break Ba}if(dl(_c,c[k+16>>2]|0)|0){k=0;rd=2083;break Ba}n=c[k+20>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}o=c[k+28>>2]|0;if(o|0){n=c[o>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}if(dl(_c,c[o+4>>2]|0)|0){k=0;rd=2083;break Ba}n=c[o+8>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}if(dl(_c,c[o+12>>2]|0)|0){k=0;rd=2083;break Ba}}k=c[k+36>>2]|0}while((k|0)!=0);if(!(dl(_c,c[l+12>>2]|0)|0)){if((d[j+200>>0]|0)<=1){k=A+165|0;if(!(a[k>>0]|0)){u=j+8|0;i=c[u>>2]|0;o=j+116|0;if(!i){n=c[j>>2]|0;if((c[o>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[j+23>>0]=1;Ca:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))rd=2e3;else{k=0;r=l;rd=2085;break Ba}else{do if((e[n+276>>1]|0)>=224){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];od=n+284|0;c[od>>2]=(c[od>>2]|0)+1;break Ca}i=n+296|0;h=c[i>>2]|0;if(!h){i=n+292|0;break}else{c[i>>2]=c[h>>2];od=n+284|0;c[od>>2]=(c[od>>2]|0)+1;break Ca}}else i=n+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;rd=2e3}while(0);if((rd|0)==2e3)h=_d(n,224,0)|0;if(!h){k=0;r=l;rd=2085;break}I=h+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[h>>2]=n;m=n+4|0;i=c[m>>2]|0;if(i|0)c[i+4>>2]=h;c[h+8>>2]=i;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=j;c[u>>2]=h;Di(h,61,0,1,0)|0;t=h}else t=i;s=c[o>>2]|0;s=(s|0)==0?j:s;m=s+84|0;i=c[m>>2]|0;r=1<<y;Da:do if((((i&r|0)==0?(c[m>>2]=i|r,q):0)?(Ac=c[s>>2]|0,oc=Ac+16|0,(c[(c[oc>>2]|0)+20>>2]|0)==0):0)?(a[s+199>>0]|0)==0:0){m=Pe(c[Ac>>2]|0,0,Ac,qd,0,542)|0;if(m|0){cd(s,32157,mc);c[s+12>>2]=m;break}qd=c[qd>>2]|0;c[(c[oc>>2]|0)+20>>2]=qd;m=c[Ac+92>>2]|0;n=c[qd+4>>2]|0;c[n+4>>2]=c[qd>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((m+-512|0)>>>0<65025){if(m+-1&m|0)break;c[o>>2]=m;h=n+80|0;m=c[h>>2]|0;if(!m)break;i=m+-4|0;c[h>>2]=i;m=i;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](i)|0;rd=2020;break}else{m=Wa[c[29352>>2]&127](i)|0;rd=2020}while(0);do if((rd|0)==2020){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{qd=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[h>>2]=0}while(0);qd=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((qd|0)!=7)break;m=Ac+81|0;do if(!(a[m>>0]|0)){if(a[Ac+82>>0]|0)break;a[m>>0]=1;if((c[Ac+180>>2]|0)>0)c[Ac+264>>2]=1;m=Ac+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[Ac+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);break Da}while(0)}while(0);o=s+80|0;c[o>>2]=c[o>>2]|r;o=v;Ea:do if(v){h=Sv(w|0,0,1,0)|0;n=L()|0;Fa:do if(c[A+272>>2]|0)if(!(a[A+81>>0]|0))rd=2044;else{i=0;break Ea}else{do if(0<0|(0==0?w>>>0<(e[A+276>>1]|0)>>>0:0)){m=A+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];qd=A+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Fa}m=A+296|0;i=c[m>>2]|0;if(!i){m=A+292|0;break}else{c[m>>2]=c[i>>2];qd=A+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Fa}}else m=A+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;rd=2044}while(0);if((rd|0)==2044)i=_d(A,h,n)|0;if(i){ew(i|0,o|0,w|0)|0;a[i+w>>0]=0}else i=0}else i=0;while(0);rd=c[l+4>>2]|0;c[Wc>>2]=c[(c[x>>2]|0)+(y<<4)>>2];c[Wc+4>>2]=34585;c[Wc+8>>2]=z;c[Wc+12>>2]=rd;c[Wc+16>>2]=i;Ak(j,46058,Wc);Ga:do if(i|0){if(c[A+480>>2]|0){Xd(A,i);break}m=i;do if((c[A+304>>2]|0)>>>0<=m>>>0){if((c[A+308>>2]|0)>>>0<=m>>>0)break;rd=A+300|0;c[i>>2]=c[rd>>2];c[rd>>2]=i;break Ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{rd=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);n=c[u>>2]|0;m=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(y<<4)+12>>2]>>2]|0)+1|0;i=n+108|0;h=c[i>>2]|0;if((c[n+112>>2]|0)>(h|0)){c[i>>2]=h+1;j=c[n+104>>2]|0;a[j+(h*20|0)>>0]=95;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=y;c[j+(h*20|0)+8>>2]=1;c[j+(h*20|0)+12>>2]=m;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0}else Di(n,95,y,1,m)|0;c[Xc>>2]=z;Bk(t,y,dd(A,46122,Xc)|0);rd=2060}}else{c[p>>2]=l;l=0;k=A+165|0;rd=2060}if((rd|0)==2060)if(!(a[k>>0]|0)){k=0;rd=2083;break}q=mi((c[(c[x>>2]|0)+(y<<4)+12>>2]|0)+40|0,z,l)|0;if(q|0){k=A+81|0;if(a[k>>0]|0){k=0;l=q;rd=2083;break}if(a[A+82>>0]|0){k=0;l=q;rd=2083;break}a[k>>0]=1;if((c[A+180>>2]|0)>0)c[A+264>>2]=1;k=A+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[A+236>>2]|0;if(!k){k=0;l=q;rd=2083;break}c[k+12>>2]=7;k=0;l=q;rd=2083;break}h=c[l+20>>2]|0;if((h|0)==(c[l+24>>2]|0)){p=c[l+4>>2]|0;n=c[h+20>>2]|0;if(!n){m=h+12|0;k=h+16|0}else{m=a[p>>0]|0;if(!(m<<24>>24))k=0;else{k=0;i=p;do{i=i+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[i>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[h+8>>2]|0)>>>0)|0;m=n+(k<<3)|0;k=n+(k<<3)+4|0}m=c[m>>2]|0;Ha:do if(!m)k=59292;else{o=d[208+(d[p>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;h=c[k+12>>2]|0;j=a[h>>0]|0;i=(d[208+(j&255)>>0]|0)-o|0;if(!(j<<24>>24==0|(i|0)!=0)){n=p;do{h=h+1|0;n=n+1|0;j=a[h>>0]|0;i=(d[208+(j&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(j<<24>>24==0|(i|0)!=0))}if(!i)break Ha;if(!m){k=59292;break}}}while(0);k=(c[k+8>>2]|0)+68|0;c[l+32>>2]=c[k>>2];c[k>>2]=l;k=0;l=q;rd=2083}else{k=0;l=q;rd=2083}}else{k=0;r=l;rd=2085}}else rd=2083;while(0);if((rd|0)==2083)if(l){r=l;m=l+28|0;rd=2085}do if((rd|0)==2085){Xi(A,c[m>>2]|0);l=c[l>>2]|0;do if(l|0){if(A|0){if(c[A+480>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[r+4>>2]|0;do if(l|0){if(A|0){if(c[A+480>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[r+12>>2]|0;if(l|0)ni(A,l);l=c[r+16>>2]|0;if(l|0){q=l+4|0;m=c[l>>2]|0;Ia:do if((c[q>>2]|0)>0){h=A+480|0;n=A+304|0;o=A+308|0;p=A+300|0;if(!A){i=0;while(1){m=c[m+(i<<3)>>2]|0;do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{j=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);i=i+1|0;m=c[l>>2]|0;if((i|0)>=(c[q>>2]|0))break Ia}}i=0;do{m=c[m+(i<<3)>>2]|0;do if(m|0){if(c[h>>2]|0){Xd(A,m);break}j=m;if((c[n>>2]|0)>>>0<=j>>>0?(c[o>>2]|0)>>>0>j>>>0:0){c[m>>2]=c[p>>2];c[p>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{j=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);i=i+1|0;m=c[l>>2]|0}while((i|0)<(c[q>>2]|0))}while(0);Ja:do if(m){do if(A|0){i=A+480|0;if(!(c[i>>2]|0)){h=m;if((c[A+304>>2]|0)>>>0>h>>>0)break;if((c[A+308>>2]|0)>>>0<=h>>>0)break;j=A+300|0;c[m>>2]=c[j>>2];c[j>>2]=m}else Xd(A,m);m=i;rd=2140;break Ja}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);rd=2138;break}else{rd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);rd=2138;break}}else rd=2138;while(0);if((rd|0)==2138)if(!A){pd=l;rd=2145}else{m=A+480|0;rd=2140}do if((rd|0)==2140){if(c[m>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l}else{pd=l;rd=2145}}while(0);do if((rd|0)==2145?pd|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](pd);break}else{j=Wa[c[29352>>2]&127](pd)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](pd);break}while(0);if(!r)break}if(A|0){if(c[A+480>>2]|0){Xd(A,r);break}j=r;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);Xi(A,k);break}case 241:{H=td+-80|0;K=td+-68|0;y=c[td+-56>>2]|0;D=c[td+-44>>2]|0;k=c[td+-40>>2]|0;E=c[td+-20>>2]|0;F=c[td+4>>2]|0;M=td+-116|0;v=c[td+-92>>2]|0;N=c[j>>2]|0;x=(c[M>>2]|0)!=0;O=td+-64|0;l=(c[O>>2]|0)==0;do if(x)if(l)if(!E){rd=2387;break}else{l=1;m=H;rd=2171;break}else{cd(j,46151,Za);rd=2387;break}else{if(!l){if(a[N+165>>0]|0){cd(j,39404,_a);rd=2387;break}l=wk(N,H)|0;if((l|0)<0){c[bb>>2]=H;cd(j,39421,bb);rd=2387;break}else m=K}else{l=d[N+164>>0]|0;m=H}if((E|0)!=0&(l|0)>-1)rd=2171;else rd=2387}while(0);Ka:do if((rd|0)==2171){B=N+81|0;if(!(a[B>>0]|0)){t=N+165|0;if((l|0)!=1&(a[t>>0]|0)!=0){i=E+12|0;h=c[i>>2]|0;do if(h|0){if(c[N+480>>2]|0){Xd(N,h);break}pd=h;if((c[N+304>>2]|0)>>>0<=pd>>>0?(c[N+308>>2]|0)>>>0>pd>>>0:0){pd=N+300|0;c[h>>2]=c[pd>>2];c[pd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{pd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[i>>2]=0}s=E+8|0;h=c[s>>2]|0;if(!h)i=E+12|0;else{n=c[(c[j>>2]|0)+16>>2]|0;i=0;while(1)if((c[n+(i<<4)+12>>2]|0)==(h|0))break;else i=i+1|0;i=n+(i<<4)|0}C=E+16|0;i=bd(j,0,c[C>>2]|0,c[i>>2]|0)|0;h=c[j>>2]|0;u=E+24|0;n=c[u>>2]|0;do if(n|0){if(h|0?c[h+480>>2]|0:0){Vi(h,n);break}kd=n+32|0;pd=(c[kd>>2]|0)+-1|0;c[kd>>2]=pd;if(!pd)Vi(h,n)}while(0);c[u>>2]=i;La:do if(i){pd=i+32|0;c[pd>>2]=(c[pd>>2]|0)+1;if(a[E+45>>0]&2){q=c[E+72>>2]|0;h=c[i+8>>2]|0;Ma:do if(h|0){r=d[208+(d[q>>0]|0)>>0]|0;while(1){o=c[h>>2]|0;pd=a[o>>0]|0;n=(d[208+(pd&255)>>0]|0)-r|0;if(!(pd<<24>>24==0|(n|0)!=0)){p=q;do{o=o+1|0;p=p+1|0;pd=a[o>>0]|0;n=(d[208+(pd&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(n|0)!=0))}if(!n)break;h=c[h+20>>2]|0;if(!h)break Ma}c[E+76>>2]=h;break La}while(0);c[hc>>2]=q;c[hc+4>>2]=0;cd(j,41107,hc);a[j+17>>0]=1;i=0}}else i=0;while(0);if((a[t>>0]|0)==0?(i|0)!=0&(c[O>>2]|0)==0:0)A=(c[i+72>>2]|0)==(c[(c[N+16>>2]|0)+28>>2]|0)?1:l;else A=l;if((a[B>>0]|0)==0?(Zc=c[j>>2]|0,c[_c>>2]=j,Zc=c[Zc+16>>2]|0,c[_c+12>>2]=c[Zc+(A<<4)>>2],c[_c+4>>2]=c[Zc+(A<<4)+12>>2],c[_c+16>>2]=31419,c[_c+20>>2]=m,Zc=(A|0)==1,c[_c+8>>2]=Zc&1,(al(_c,E)|0)==0):0){i=c[s>>2]|0;if(!i)l=E+12|0;else{h=c[(c[j>>2]|0)+16>>2]|0;l=0;while(1)if((c[h+(l<<4)+12>>2]|0)==(i|0))break;else l=l+1|0;l=h+(l<<4)|0}z=bd(j,0,c[C>>2]|0,c[l>>2]|0)|0;l=c[j>>2]|0;i=c[u>>2]|0;do if(i|0){if(l|0?c[l+480>>2]|0:0){Vi(l,i);break}kd=i+32|0;pd=(c[kd>>2]|0)+-1|0;c[kd>>2]=pd;if(!pd)Vi(l,i)}while(0);c[u>>2]=z;Na:do if(z|0){pd=z+32|0;c[pd>>2]=(c[pd>>2]|0)+1;Oa:do if(a[E+45>>0]&2){o=c[E+72>>2]|0;l=c[z+8>>2]|0;Pa:do if(l|0){p=d[208+(d[o>>0]|0)>>0]|0;while(1){h=c[l>>2]|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-p|0;if(!(pd<<24>>24==0|(i|0)!=0)){n=o;do{h=h+1|0;n=n+1|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(i|0)!=0))}if(!i)break;l=c[l+20>>2]|0;if(!l)break Pa}c[E+76>>2]=l;break Oa}while(0);c[Ec>>2]=o;c[Ec+4>>2]=0;cd(j,41107,Ec);a[j+17>>0]=1;break Na}while(0);if(c[z+56>>2]|0){cd(j,46197,Fc);rd=2387;break Ka}w=qj(N,m)|0;if(!w){rd=2387;break Ka}Qa:do if(!(vk(j,w)|0)){u=j+200|0;t=a[u>>0]|0;s=(t&255)>1;do if(!s){n=c[(c[N+16>>2]|0)+(A<<4)+12>>2]|0;o=c[n+52>>2]|0;if(!o){i=n+44|0;l=n+48|0}else{i=a[w>>0]|0;if(!(i<<24>>24))l=0;else{l=0;h=w;do{h=h+1|0;l=G(l+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[h>>0]|0}while(i<<24>>24!=0)}l=(l>>>0)%((c[n+40>>2]|0)>>>0)|0;i=o+(l<<3)|0;l=o+(l<<3)+4|0}i=c[i>>2]|0;Ra:do if(!i)l=59292;else{p=d[208+(d[w>>0]|0)>>0]|0;while(1){l=c[l>>2]|0;i=i+-1|0;n=c[l+12>>2]|0;pd=a[n>>0]|0;h=(d[208+(pd&255)>>0]|0)-p|0;if(!(pd<<24>>24==0|(h|0)!=0)){o=w;do{n=n+1|0;o=o+1|0;pd=a[n>>0]|0;h=(d[208+(pd&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(h|0)!=0))}if(!h)break Ra;if(!i){l=59292;break}}}while(0);if(!(c[l+8>>2]|0))break;if(!v){c[Yc>>2]=m;cd(j,46238,Yc);rd=2378;break Qa}h=c[j+116>>2]|0;h=(h|0)==0?j:h;m=h+84|0;i=c[m>>2]|0;l=1<<A;if(i&l|0){rd=2378;break Qa}c[m>>2]=i|l;if(!Zc){rd=2378;break Qa}q=c[h>>2]|0;l=q+16|0;if(c[(c[l>>2]|0)+20>>2]|0){rd=2378;break Qa}if(a[h+199>>0]|0){rd=2378;break Qa}m=Pe(c[q>>2]|0,0,q,qd,0,542)|0;if(m|0){cd(h,32157,$c);c[h+12>>2]=m;rd=2378;break Qa}qd=c[qd>>2]|0;c[(c[l>>2]|0)+20>>2]=qd;l=c[q+92>>2]|0;h=c[qd+4>>2]|0;c[h+4>>2]=c[qd>>2];do if(!(b[h+22>>1]&2)){n=h+32|0;o=h+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[n>>2]=l;i=h+80|0;l=c[i>>2]|0;if(!l)break;m=l+-4|0;c[i>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;rd=2270;break}else{l=Wa[c[29352>>2]&127](m)|0;rd=2270}while(0);do if((rd|0)==2270){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{rd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[i>>2]=0}while(0);rd=Se(c[h>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((rd|0)!=7)break;l=q+81|0;do if(!(a[l>>0]|0)){if(a[q+82>>0]|0)break;a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;l=q+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[q+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);rd=2378;break Qa}while(0);rd=2378;break Qa}while(0);r=c[z>>2]|0;do if(r|0){l=a[r>>0]|0;Sa:do if(!(l<<24>>24)){l=39441;rd=2285}else{qd=l&255;l=208+qd|0;do if((qd|32|0)==115){l=a[r+1>>0]|0;if(!(l<<24>>24)){l=39442;rd=2285;break Sa}l=l&255;if((l|32|0)!=113){m=113;l=208+l|0;break}l=a[r+2>>0]|0;if(!(l<<24>>24)){l=39443;rd=2285;break Sa}l=l&255;if((l|32|0)!=108){m=108;l=208+l|0;break}l=a[r+3>>0]|0;if(!(l<<24>>24)){l=39444;rd=2285;break Sa}l=l&255;if((l|32|0)!=105){m=105;l=208+l|0;break}l=a[r+4>>0]|0;if(!(l<<24>>24)){l=39445;rd=2285;break Sa}l=l&255;if((l|32|0)!=116){m=116;l=208+l|0;break}l=a[r+5>>0]|0;if(!(l<<24>>24)){l=39446;rd=2285;break Sa}l=l&255;if((l|32|0)!=101){m=101;l=208+l|0;break}l=a[r+6>>0]|0;if(!(l<<24>>24)){l=39447;rd=2285;break Sa}if(l<<24>>24==95)break Sa;else{m=95;l=208+(l&255)|0}}else m=115;while(0);fd=d[l>>0]|0;ad=m;rd=2289}while(0);if((rd|0)==2285){fd=0;ad=a[208+(d[l>>0]|0)>>0]|0;rd=2289}if((rd|0)==2289?(fd|0)!=(ad&255|0):0)break;cd(j,46264,gd);rd=2378;break Qa}while(0);l=c[z+12>>2]|0;if((y|0)!=65&(l|0)!=0){c[id>>2]=(y|0)==33?46339:46346;c[id+4>>2]=E;c[id+8>>2]=0;cd(j,46302,id);rd=2378;break}q=(y|0)==65;if(q&(l|0)==0){c[jd>>2]=E;c[jd+4>>2]=0;cd(j,46352,jd);rd=2378;break}do if(s){h=q?33:y;if(N|0){rd=2319;break}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](36)|0;i=1;l=h;rd=2341;break}l=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){qd=c[14978]|0;pd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}m=Wa[c[29340>>2]&127](l)|0;if(!m)break Qa;l=Wa[c[29352>>2]&127](m)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){q=m;i=1;break}c[14987]=l;q=m;i=1}else{m=c[z+72>>2]|0;i=c[N+16>>2]|0;if(!m)l=-1e6;else{l=0;while(1)if((c[i+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}p=c[i+(l<<4)>>2]|0;if(x)n=c[i+16>>2]|0;else n=p;o=(l|0)==1;h=x|o?5:7;i=c[j>>2]|0;l=a[i+165>>0]|0;do if(!((l|t)<<24>>24)){m=c[i+312>>2]|0;if(!m)break;l=$a[m&127](c[i+316>>2]|0,h,w,r,n,c[j+240>>2]|0)|0;if((l|0)==1){cd(j,39216,ld);c[j+12>>2]=23;rd=2378;break Qa}if((l|2|0)!=2){cd(j,39231,md);c[j+12>>2]=1;rd=2378;break Qa}if(l|0){rd=2378;break Qa}i=c[j>>2]|0;l=a[i+165>>0]|0}while(0);m=o?34855:34585;do if(!(l<<24>>24)){if(a[u>>0]|0)break;l=c[i+312>>2]|0;if(!l)break;l=$a[l&127](c[i+316>>2]|0,18,m,0,p,c[j+240>>2]|0)|0;if((l|0)==1){cd(j,39216,nd);c[j+12>>2]=23;rd=2378;break Qa}if((l|2|0)==2)if(!l)break;else{rd=2378;break Qa}else{cd(j,39231,od);c[j+12>>2]=1;rd=2378;break Qa}}while(0);h=q?33:y;rd=2319}while(0);Ta:do if((rd|0)==2319){if(c[N+272>>2]|0){if(a[B>>0]|0){rd=2379;break Qa}}else{do if((e[N+276>>1]|0)>=36){l=N+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];i=N+284|0;c[i>>2]=(c[i>>2]|0)+1;i=0;l=h;rd=2341;break Ta}l=N+296|0;m=c[l>>2]|0;if(!m){l=N+292|0;break}else{c[l>>2]=c[m>>2];i=N+284|0;c[i>>2]=(c[i>>2]|0)+1;i=0;l=h;rd=2341;break Ta}}else l=N+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}m=_d(N,36,0)|0;i=0;l=h;rd=2341}while(0);if((rd|0)==2341)if(!m){rd=2378;break}else{q=m;h=l}p=q+4|0;I=p;J=I+32|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[q>>2]=w;n=c[C>>2]|0;Ua:do if(!n)i=0;else{o=(Eu(n)|0)+1|0;Va:do if(i){qd=Sv(o|0,0,-1,-1)|0;pd=L()|0;if(pd>>>0>0|(pd|0)==0&qd>>>0>2147483390){i=0;break Ua}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;rd=2367;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){qd=c[14978]|0;pd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){i=0;break Ua}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[N+272>>2]|0){if(a[B>>0]|0){i=0;break Ua}}else{do if(!(0<0|(0==0?(e[N+276>>1]|0)>>>0<o>>>0:0))){m=N+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];rd=N+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2367;break Va}m=N+296|0;l=c[m>>2]|0;if(!l){l=N+292|0;break}else{c[m>>2]=c[l>>2];rd=N+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2367;break Va}}else l=N+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(N,o,0)|0;rd=2367}while(0);if((rd|0)==2367)if(!l){i=0;break}ew(l|0,n|0,o|0)|0;i=l}while(0);c[p>>2]=i;c[q+20>>2]=c[(c[N+16>>2]|0)+(A<<4)+12>>2];c[q+24>>2]=c[z+72>>2];a[q+8>>0]=D;a[q+9>>0]=(h|0)==33?1:2;Wa:do if((d[u>>0]|0)>1){m=c[C>>2]|0;l=c[j+272>>2]|0;if(!l){m=0;l=F;break}while(1){if((c[l>>2]|0)==(m|0))break;l=c[l+12>>2]|0;if(!l){m=0;l=F;break Wa}}c[l>>2]=i;m=0;l=F}else{if(!F){m=F;l=0;break}m=F;l=dk(N,F,1,0)|0}while(0);c[q+12>>2]=l;c[q+16>>2]=k;c[j+236>>2]=q;qi(N,E);l=q;k=m;r=q;break Ka}else rd=2378;while(0);if((rd|0)==2378?N|0:0)rd=2379;do if((rd|0)==2379){if(c[N+480>>2]|0){Xd(N,w);rd=2387;break Ka}l=w;if((c[N+304>>2]|0)>>>0>l>>>0)break;if((c[N+308>>2]|0)>>>0<=l>>>0)break;rd=N+300|0;c[w>>2]=c[rd>>2];c[rd>>2]=w;rd=2387;break Ka}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](w);rd=2387;break Ka}else{rd=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);rd=2387;break Ka}}while(0);if((a[N+164>>0]|0)==1){rd=N+166|0;a[rd>>0]=a[rd>>0]|1;rd=2387}else rd=2387}else rd=2387}else rd=2387}while(0);do if((rd|0)==2387){qi(N,E);if(k){p=k+4|0;l=c[k>>2]|0;Xa:do if((c[p>>2]|0)>0){i=N+480|0;h=N+304|0;n=N+308|0;o=N+300|0;if(!N){m=0;while(1){l=c[l+(m<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=m+1|0;l=c[k>>2]|0;if((m|0)>=(c[p>>2]|0))break Xa}}m=0;do{l=c[l+(m<<3)>>2]|0;do if(l|0){if(c[i>>2]|0){Xd(N,l);break}rd=l;if((c[h>>2]|0)>>>0<=rd>>>0?(c[n>>2]|0)>>>0>rd>>>0:0){c[l>>2]=c[o>>2];c[o>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);m=m+1|0;l=c[k>>2]|0}while((m|0)<(c[p>>2]|0))}while(0);Ya:do if(l){do if(N|0){m=N+480|0;if(!(c[m>>2]|0)){i=l;if((c[N+304>>2]|0)>>>0>i>>>0)break;if((c[N+308>>2]|0)>>>0<=i>>>0)break;rd=N+300|0;c[l>>2]=c[rd>>2];c[rd>>2]=l}else Xd(N,l);l=m;rd=2420;break Ya}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);rd=2418;break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);rd=2418;break}}else rd=2418;while(0);if((rd|0)==2418)if(N){l=N+480|0;rd=2420}if((rd|0)==2420){if(c[l>>2]|0){Xd(N,k);l=0;k=F;r=0;break}rd=k;if((c[N+304>>2]|0)>>>0<=rd>>>0?(c[N+308>>2]|0)>>>0>rd>>>0:0){l=N+300|0;c[k>>2]=c[l>>2];c[l>>2]=k;l=0;k=F;r=0;break}}if(k)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);l=0;k=F;r=0;break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);l=0;k=F;r=0;break}else{l=0;k=F;r=0}}else{l=0;k=F;r=0}}while(0);if(k|0)ni(N,k);do if(!((l|0)==0|(c[j+236>>2]|0)!=0)){Xi(N,c[l+28>>2]|0);k=c[l>>2]|0;do if(k|0){if(N|0){if(c[N+480>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=c[l+4>>2]|0;do if(k|0){if(N|0){if(c[N+480>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=c[l+12>>2]|0;if(k|0)ni(N,k);k=c[l+16>>2]|0;do if(k|0){q=k+4|0;l=c[k>>2]|0;Za:do if((c[q>>2]|0)>0){h=N+480|0;n=N+304|0;o=N+308|0;p=N+300|0;if(!N){m=0;while(1){l=c[l+(m<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=m+1|0;l=c[k>>2]|0;if((m|0)>=(c[q>>2]|0))break Za}}i=0;do{l=c[l+(i<<3)>>2]|0;_a:do if(l|0){if(c[h>>2]|0){Xd(N,l);break}m=l;do if((c[n>>2]|0)>>>0<=m>>>0){if((c[o>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[p>>2];c[p>>2]=l;break _a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);i=i+1|0;l=c[k>>2]|0}while((i|0)<(c[q>>2]|0))}while(0);$a:do if(l){do if(N|0){m=N+480|0;if(!(c[m>>2]|0)){i=l;if((c[N+304>>2]|0)>>>0>i>>>0)break;if((c[N+308>>2]|0)>>>0<=i>>>0)break;j=N+300|0;c[l>>2]=c[j>>2];c[j>>2]=l}else Xd(N,l);l=m;rd=2487;break $a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);rd=2485;break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);rd=2485;break}}else rd=2485;while(0);if((rd|0)==2485)if(N){l=N+480|0;rd=2487}if((rd|0)==2487){if(c[l>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(r|0){if(N|0){if(c[N+480>>2]|0){Xd(N,r);break}j=r;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}}while(0);if(!(c[O>>2]|0)){qd=H;rd=c[qd+4>>2]|0;j=M;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break a}else{qd=K;rd=c[qd+4>>2]|0;j=M;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break a}}case 242:{c[td+4>>2]=e[td+2>>1];break}case 243:{c[td+-8>>2]=65;break}case 244:{c[td+16>>2]=33;break}case 246:case 245:{c[td+4>>2]=e[td+2>>1];c[td+8>>2]=0;break}case 247:{c[td+-20>>2]=122;c[td+-16>>2]=c[td+4>>2];break}case 315:case 267:case 248:{c[td+16>>2]=0;break}case 268:case 249:{c[td+-8>>2]=c[td+4>>2];break}case 250:{rd=td+-8|0;j=td+-20|0;c[(c[(c[j>>2]|0)+40>>2]|0)+36>>2]=c[rd>>2];c[(c[j>>2]|0)+40>>2]=c[rd>>2];break}case 251:{j=c[td+-8>>2]|0;c[j+40>>2]=j;break}case 252:{pd=td+4|0;qd=c[pd+4>>2]|0;rd=td+-20|0;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;cd(j,38526,i);break}case 253:{cd(j,38621,n);break}case 254:{cd(j,38705,o);break}case 255:{l=c[td+-20>>2]|0;m=c[td+-8>>2]|0;i=c[td+-68>>2]&255;h=td+-80|0;n=c[j>>2]|0;o=an(j,122,td+-56|0,c[h>>2]|0,c[td+4>>2]|0)|0;if(!o)k=m;else{if((d[j+200>>0]|0)<=1){j=gk(n,l,1)|0;c[o+20>>2]=j;if(!m){k=m;m=0}else{k=m;m=dk(n,m,1,0)|0}}else{c[o+20>>2]=l;l=0;k=0}c[o+16>>2]=m;a[o+1>>0]=i}if(l|0)ri(n,l);if(k|0)ni(n,k);c[h>>2]=o;break}case 256:{q=c[td+-32>>2]|0;l=c[td+-20>>2]|0;m=c[td+-68>>2]&255;r=c[td+-8>>2]|0;s=td+-80|0;t=c[j>>2]|0;u=an(j,120,td+-44|0,c[s>>2]|0,c[td+4>>2]|0)|0;do if(!u){do if(q|0){p=q+4|0;k=c[q>>2]|0;ab:do if((c[p>>2]|0)>0){i=t+480|0;h=t+304|0;n=t+308|0;o=t+300|0;if(!t){m=0;while(1){k=c[k+(m<<3)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);m=m+1|0;k=c[q>>2]|0;if((m|0)>=(c[p>>2]|0))break ab}}m=0;do{k=c[k+(m<<3)>>2]|0;do if(k|0){if(c[i>>2]|0){Xd(t,k);break}j=k;if((c[h>>2]|0)>>>0<=j>>>0?(c[n>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[o>>2];c[o>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);m=m+1|0;k=c[q>>2]|0}while((m|0)<(c[p>>2]|0))}while(0);bb:do if(k){do if(t|0){m=t+480|0;if(!(c[m>>2]|0)){i=k;if((c[t+304>>2]|0)>>>0>i>>>0)break;if((c[t+308>>2]|0)>>>0<=i>>>0)break;j=t+300|0;c[k>>2]=c[j>>2];c[j>>2]=k}else Xd(t,k);k=q;rd=2569;break bb}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);rd=2567;break}else{rd=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);rd=2567;break}}else rd=2567;while(0);if((rd|0)==2567)if(!t)k=q;else{m=t+480|0;k=q;rd=2569}if((rd|0)==2569){if(c[m>>2]|0){Xd(t,k);break}j=k;if((c[t+304>>2]|0)>>>0<=j>>>0?(c[t+308>>2]|0)>>>0>j>>>0:0){j=t+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(r){k=c[r>>2]|0;if(k|0)ri(t,k);k=c[r+4>>2]|0;if(k|0)ni(t,k);k=c[r+8>>2]|0;if(k|0)ri(t,k);k=c[r+12>>2]|0;if(k|0)ni(t,k);if(t|0){if(c[t+480>>2]|0){Xd(t,r);k=l;break}j=r;if((c[t+304>>2]|0)>>>0<=j>>>0?(c[t+308>>2]|0)>>>0>j>>>0:0){k=t+300|0;c[r>>2]=c[k>>2];c[k>>2]=r;k=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);k=l;break}else{k=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);k=l;break}}else k=l}else{if((d[j+200>>0]|0)>1)k=0;else{k=l;l=fk(t,l,1)|0}c[u+8>>2]=l;c[u+24>>2]=q;c[u+28>>2]=r;a[u+1>>0]=m}while(0);if(k|0)pi(t,k,1);c[s>>2]=u;break}case 257:{l=c[td+-8>>2]|0;m=td+-56|0;i=c[j>>2]|0;h=an(j,121,td+-32|0,c[m>>2]|0,c[td+4>>2]|0)|0;if(!h)k=l;else{if((d[j+200>>0]|0)<=1)if(!l){k=l;l=0}else{k=l;l=dk(i,l,1,0)|0}else k=0;c[h+16>>2]=l;a[h+1>>0]=11}if(k|0)ni(i,k);c[m>>2]=h;break}case 258:{p=c[j>>2]|0;i=c[td+-8>>2]|0;q=td+-20|0;o=c[q>>2]|0;h=c[td+4>>2]|0;cb:do if(!p){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](44)|0;rd=2630;break}k=Wa[c[29356>>2]&127](44)|0;if((c[14985]|0)>>>0<44)c[14985]=44;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=2633}else rd=2633}else rd=2631}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){rd=2631;break}}else{do if((e[p+276>>1]|0)>=44){l=p+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=p+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2630;break cb}l=p+296|0;k=c[l>>2]|0;if(!k){k=p+292|0;break}else{c[l>>2]=c[k>>2];rd=p+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2630;break cb}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(p,44,0)|0;rd=2630}while(0);if((rd|0)==2630)if(!k)rd=2631;else rd=2633;if((rd|0)==2631)if(!i)k=0;else{pi(p,i,1);k=0}else if((rd|0)==2633){I=k+2|0;J=I+42|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));a[k>>0]=-125;c[k+8>>2]=i;a[k+1>>0]=11;while(1)if(!(a[880+(d[o>>0]|0)>>0]&1))break;else o=o+1|0;l=h-o|0;db:do if((l|0)<=0)if(!o)l=0;else{m=l;rd=2640}else while(1){m=l+-1|0;if(!(a[880+(d[o+m>>0]|0)>>0]&1)){m=l;rd=2640;break db}if((l|0)>1)l=m;else{rd=2640;break}}while(0);eb:do if((rd|0)==2640){h=Sv(m|0,((m|0)<0)<<31>>31|0,1,0)|0;n=L()|0;fb:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))rd=2650;else{l=0;break eb}else{do if(!(n>>>0>0|((n|0)==0?h>>>0>(e[p+276>>1]|0)>>>0:0))){i=p+300|0;l=c[i>>2]|0;if(l|0){c[i>>2]=c[l>>2];j=p+284|0;c[j>>2]=(c[j>>2]|0)+1;break fb}i=p+296|0;l=c[i>>2]|0;if(!l){l=p+292|0;break}else{c[i>>2]=c[l>>2];j=p+284|0;c[j>>2]=(c[j>>2]|0)+1;break fb}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;rd=2650}while(0);if((rd|0)==2650)l=_d(p,h,n)|0;if(l){ew(l|0,o|0,m|0)|0;a[l+m>>0]=0;m=a[l>>0]|0;if(m<<24>>24){h=0;i=l;do{if(a[880+(m&255)>>0]&1)a[i>>0]=32;h=h+1|0;i=l+h|0;m=a[i>>0]|0}while(m<<24>>24!=0)}}else l=0}while(0);c[k+32>>2]=l}c[q>>2]=k;break}case 259:{k=ej(j,71,0,0)|0;c[td+-32>>2]=k;if(k|0)a[k+1>>0]=4;break}case 260:{k=oj(c[j>>2]|0,71,td+-8|0,1)|0;c[td+-56>>2]=k;if(k|0)a[k+1>>0]=c[td+-32>>2];break}case 261:{c[td+4>>2]=1;break}case 263:{c[td+4>>2]=3;break}case 264:{v=c[td+4>>2]|0;u=c[td+-8>>2]|0;w=c[j>>2]|0;gb:do if(!(a[w+81>>0]|0)){hb:do if(!(a[w+165>>0]|0)){i=j+4|0;h=w+24|0;n=(c[h>>2]&1|0)==0;o=w+16|0;qd=c[(c[o>>2]|0)+12>>2]|0;a[w+78>>0]=a[qd+77>>0]|0;if((b[qd+78>>1]&1)==0?(Da=eh(w,0,i,0)|0,(Da|0)!=0):0)k=Da;else rd=2670;ib:do if((rd|0)==2670){k=w+20|0;l=c[k>>2]|0;if((l|0)>1)do{m=l;l=l+-1|0;if((b[(c[(c[o>>2]|0)+(l<<4)+12>>2]|0)+78>>1]&1)==0?(Sa=eh(w,l,i,0)|0,Sa|0):0){k=Sa;break ib}}while((m|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[w+89>>0]|0))break hb;c[h>>2]=c[h>>2]|16;break hb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break gb}else k=w+20|0;while(0);t=c[v+12>>2]|0;s=c[v+16>>2]|0;q=c[k>>2]|0;if((q|0)>0){r=(t|0)==0;p=c[w+16>>2]|0;k=0;o=0;do{h=o^o>>>0<2;if(!r){m=c[p+(h<<4)>>2]|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(qd<<24>>24==0|(l|0)!=0)){i=t;do{m=m+1|0;i=i+1|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(l|0)!=0))}if(!l)rd=2687}else rd=2687;if((rd|0)==2687){rd=0;i=c[p+(h<<4)+12>>2]|0;h=c[i+52>>2]|0;if(!h){l=i+44|0;k=i+48|0}else{l=a[s>>0]|0;if(!(l<<24>>24))k=0;else{k=0;m=s;do{m=m+1|0;k=G(k+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[m>>0]|0}while(l<<24>>24!=0)}k=(k>>>0)%((c[i+40>>2]|0)>>>0)|0;l=h+(k<<3)|0;k=h+(k<<3)+4|0}l=c[l>>2]|0;jb:do if(!l)k=59292;else{n=d[208+(d[s>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;l=l+-1|0;i=c[k+12>>2]|0;qd=a[i>>0]|0;m=(d[208+(qd&255)>>0]|0)-n|0;if(!(qd<<24>>24==0|(m|0)!=0)){h=s;do{i=i+1|0;h=h+1|0;qd=a[i>>0]|0;m=(d[208+(qd&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(m|0)!=0))}if(!m)break jb;if(!l){k=59292;break}}}while(0);k=c[k+8>>2]|0;if(k){rd=2702;break}}o=o+1|0}while((o|0)<(q|0));if(k|0){jl(j,k);break}}if(!u){c[qc>>2]=v;c[qc+4>>2]=0;cd(j,46398,qc)}else hl(j,t);a[j+17>>0]=1}while(0);qi(w,v);break}case 265:{rd=c[td+-32>>2]|0;cn(j,24,30104,rd,rd,c[td+-8>>2]|0,c[td+4>>2]|0);break}case 266:{rd=c[td+4>>2]|0;cn(j,25,30144,rd,0,0,rd);break}case 269:{m=c[j>>2]|0;kb:do if(!(a[m+165>>0]|0)){i=j+4|0;h=m+24|0;n=(c[h>>2]&1|0)==0;o=m+16|0;pd=c[(c[o>>2]|0)+12>>2]|0;a[m+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(ga=eh(m,0,i,0)|0,(ga|0)!=0):0)k=ga;else rd=2715;lb:do if((rd|0)==2715){k=c[m+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[o>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Ga=eh(m,k,i,0)|0,Ga|0):0){k=Ga;break lb}}while((l|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[m+89>>0]|0))break kb;c[h>>2]=c[h>>2]|16;break kb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break a}while(0);k=c[j>>2]|0;w=k+20|0;l=c[w>>2]|0;if((l|0)>0){x=j+116|0;v=0;u=c[k+16>>2]|0;k=l;while(1){l=c[(c[u+12>>2]|0)+16>>2]|0;if(l){do{k=c[l+8>>2]|0;if((c[k+56>>2]|0)==0?(ec=c[k+8>>2]|0,ec|0):0){t=k+72|0;s=ec;do{m=c[t>>2]|0;if(!m)k=-1e6;else{i=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[i+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}r=c[x>>2]|0;r=(r|0)==0?j:r;m=r+84|0;i=c[m>>2]|0;q=1<<k;mb:do if((((i&q|0)==0?(c[m>>2]=i|q,(k|0)==1):0)?(fc=c[r>>2]|0,gc=fc+16|0,(c[(c[gc>>2]|0)+20>>2]|0)==0):0)?(a[r+199>>0]|0)==0:0){k=Pe(c[fc>>2]|0,0,fc,qd,0,542)|0;if(k|0){cd(r,32157,cc);c[r+12>>2]=k;break}pd=c[qd>>2]|0;c[(c[gc>>2]|0)+20>>2]=pd;k=c[fc+92>>2]|0;h=c[pd+4>>2]|0;c[h+4>>2]=c[pd>>2];do if(!(b[h+22>>1]&2)){n=h+32|0;o=h+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[n>>2]=k;i=h+80|0;k=c[i>>2]|0;if(!k)break;m=k+-4|0;c[i>>2]=m;k=m;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;pd=(c[14820]|0)+1|0;c[14820]=pd;c[14821]=(pd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](m)|0;rd=2750;break}else{k=Wa[c[29352>>2]&127](m)|0;rd=2750}while(0);do if((rd|0)==2750){rd=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{pd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[i>>2]=0}while(0);pd=Se(c[h>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((pd|0)!=7)break;k=fc+81|0;do if(!(a[k>>0]|0)){if(a[fc+82>>0]|0)break;a[k>>0]=1;if((c[fc+180>>2]|0)>0)c[fc+264>>2]=1;k=fc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[fc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break mb}while(0)}while(0);pd=r+80|0;c[pd>>2]=c[pd>>2]|q;bl(j,s,-1);s=c[s+20>>2]|0}while((s|0)!=0)}l=c[l>>2]|0}while((l|0)!=0);k=c[w>>2]|0}v=v+1|0;if((v|0)>=(k|0))break;else u=u+16|0}}break}case 270:{l=td+-8|0;s=td+4|0;v=c[j>>2]|0;nb:do if(!(a[v+165>>0]|0)){i=j+4|0;h=v+24|0;n=(c[h>>2]&1|0)==0;o=v+16|0;pd=c[(c[o>>2]|0)+12>>2]|0;a[v+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(Ea=eh(v,0,i,0)|0,(Ea|0)!=0):0)k=Ea;else rd=2770;ob:do if((rd|0)==2770){k=c[v+20>>2]|0;if((k|0)>1)do{m=k;k=k+-1|0;if((b[(c[(c[o>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Pa=eh(v,k,i,0)|0,Pa|0):0){k=Pa;break ob}}while((m|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[v+89>>0]|0))break nb;c[h>>2]=c[h>>2]|16;break nb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break a}while(0);k=c[j>>2]|0;do if(!(c[s>>2]|0)){q=qj(k,l)|0;if(!q)break a;p=a[v+78>>0]|0;h=c[v+392>>2]|0;if(!h){m=v+384|0;k=v+388|0}else{m=a[q>>0]|0;if(!(m<<24>>24))k=0;else{k=0;i=q;do{i=i+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[i>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[v+380>>2]|0)>>>0)|0;m=h+(k<<3)|0;k=h+(k<<3)+4|0}m=c[m>>2]|0;pb:do if(!m)k=59292;else{o=d[208+(d[q>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;h=c[k+12>>2]|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-o|0;if(!(pd<<24>>24==0|(i|0)!=0)){n=q;do{h=h+1|0;n=n+1|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(i|0)!=0))}if(!i)break pb;if(!m){k=59292;break}}}while(0);pd=c[k+8>>2]|0;if((pd|0)==0|(pd+(((p&255)+-1|0)*20|0)|0)==0){do if(v){if(c[v+480>>2]|0){Xd(v,q);break}pd=q;if((c[v+304>>2]|0)>>>0<=pd>>>0?(c[v+308>>2]|0)>>>0>pd>>>0:0){pd=v+300|0;c[q>>2]=c[pd>>2];c[pd>>2]=q}else rd=2818}else rd=2818;while(0);do if((rd|0)==2818)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{pd=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);k=c[j>>2]|0;if(!(c[td+8>>2]|0)){m=d[k+164>>0]|0;break}if(a[k+165>>0]|0){cd(j,39404,Vb);break a}k=wk(k,l)|0;if((k|0)>=0){l=s;m=k;break}c[Yb>>2]=l;cd(j,39421,Yb);break a}k=c[j>>2]|0;h=k+20|0;l=c[h>>2]|0;if((l|0)>0){i=0;m=c[k+16>>2]|0;while(1){k=c[(c[m+12>>2]|0)+16>>2]|0;if(!k)k=l;else{do{gn(j,c[k+8>>2]|0,q);k=c[k>>2]|0}while((k|0)!=0);k=c[h>>2]|0}i=i+1|0;if((i|0)>=(k|0))break;else{m=m+16|0;l=k}}}if(v|0){if(c[v+480>>2]|0){Xd(v,q);break a}j=q;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[q>>2]=c[j>>2];c[j>>2]=q;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break a}else{j=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break a}}else{if(!(c[td+8>>2]|0)){m=d[k+164>>0]|0;break}if(a[k+165>>0]|0){cd(j,39404,Qa);break a}k=wk(k,l)|0;if((k|0)<0){c[Va>>2]=l;cd(j,39421,Va);break a}else{l=s;m=k}}while(0);u=qj(v,l)|0;if(u|0){k=c[(c[v+16>>2]|0)+(m<<4)>>2]|0;l=Sd(v,u,k)|0;if(!l){r=hi(v,u,k)|0;do if(!(c[v+480>>2]|0)){pd=u;if((c[v+304>>2]|0)>>>0<=pd>>>0?(c[v+308>>2]|0)>>>0>pd>>>0:0){pd=v+300|0;c[u>>2]=c[pd>>2];c[pd>>2]=u;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{pd=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}else Xd(v,u);while(0);if(!r){cd(j,46778,dc);break a}q=c[j+116>>2]|0;q=(q|0)==0?j:q;k=q+84|0;l=c[k>>2]|0;p=1<<m;do if((((l&p|0)==0?(c[k>>2]=l|p,(m|0)==1):0)?(xc=c[q>>2]|0,lc=xc+16|0,(c[(c[lc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[xc>>2]|0,0,xc,qd,0,542)|0;if(k|0){cd(q,32157,jc);c[q+12>>2]=k;break}qd=c[qd>>2]|0;c[(c[lc>>2]|0)+20>>2]=qd;k=c[xc+92>>2]|0;i=c[qd+4>>2]|0;c[i+4>>2]=c[qd>>2];if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025?(k+-1&k|0)==0:0){c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2903;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2903}while(0);do if((rd|0)==2903){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);rd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((rd|0)==7){k=xc+81|0;do if(!(a[k>>0]|0)){if(a[xc+82>>0]|0)break;a[k>>0]=1;if((c[xc+180>>2]|0)>0)c[xc+264>>2]=1;k=xc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[xc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break}}}while(0);rd=q+80|0;c[rd>>2]=c[rd>>2]|p;bl(j,r,-1);break a}if((c[l+56>>2]|0)==0?(r=c[l+8>>2]|0,(r|0)!=0):0){s=l+72|0;t=j+116|0;do{l=c[s>>2]|0;if(!l)k=-1e6;else{m=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0}q=c[t>>2]|0;q=(q|0)==0?j:q;l=q+84|0;m=c[l>>2]|0;p=1<<k;qb:do if((((m&p|0)==0?(c[l>>2]=m|p,(k|0)==1):0)?(Rc=c[q>>2]|0,Sc=Rc+16|0,(c[(c[Sc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[Rc>>2]|0,0,Rc,qd,0,542)|0;if(k|0){cd(q,32157,Pc);c[q+12>>2]=k;break}pd=c[qd>>2]|0;c[(c[Sc>>2]|0)+20>>2]=pd;k=c[Rc+92>>2]|0;i=c[pd+4>>2]|0;c[i+4>>2]=c[pd>>2];do if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;pd=(c[14820]|0)+1|0;c[14820]=pd;c[14821]=(pd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2856;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2856}while(0);do if((rd|0)==2856){rd=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{pd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);pd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((pd|0)!=7)break;k=Rc+81|0;do if(!(a[k>>0]|0)){if(a[Rc+82>>0]|0)break;a[k>>0]=1;if((c[Rc+180>>2]|0)>0)c[Rc+264>>2]=1;k=Rc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Rc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break qb}while(0)}while(0);pd=q+80|0;c[pd>>2]=c[pd>>2]|p;bl(j,r,-1);r=c[r+20>>2]|0}while((r|0)!=0);if(v|0)rd=2871}else rd=2871;if((rd|0)==2871){if(c[v+480>>2]|0){Xd(v,u);break a}j=u;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[u>>2]=c[j>>2];c[j>>2]=u;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break a}else{j=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break a}}break}case 271:{zj(j,0,0);break}case 272:{zj(j,td+-8|0,td+4|0);break}case 273:{w=c[td+-32>>2]|0;i=td+4|0;x=c[j>>2]|0;y=x+24|0;z=c[y>>2]|0;do if(!(a[x+81>>0]|0)){l=c[w+8>>2]|0;if(!l)k=w+12|0;else{m=c[x+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}s=bd(j,0,c[w+16>>2]|0,c[k>>2]|0)|0;if(s){l=c[s+72>>2]|0;if(!l)u=-1e6;else{m=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){u=k;break}else k=k+1|0}v=c[(c[x+16>>2]|0)+(u<<4)>>2]|0;c[y>>2]=c[y>>2]|2;t=qj(x,i)|0;if(t){rb:do if(!(Sd(x,t,v)|0)){if(hi(x,t,v)|0){c[ib>>2]=t;cd(j,46940,ib);rd=3010;break}if((on(j,s)|0)==0?(vk(j,t)|0)==0:0){l=c[s>>2]|0;if(c[s+12>>2]|0){c[wb>>2]=l;cd(j,46999,wb);rd=3010;break}k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(Gb=c[k+312>>2]|0,Gb|0):0){k=$a[Gb&127](c[k+316>>2]|0,26,v,l,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Hb);c[j+12>>2]=23;rd=3010;break rb}if((k|2|0)==2)if(!k)break;else{rd=3010;break rb}else{cd(j,39231,Ib);c[j+12>>2]=1;rd=3010;break rb}}while(0);if(!(Sk(j,s)|0)){if(!(c[s+56>>2]|0))q=0;else{k=c[s+64>>2]|0;sb:do if(!k)k=0;else while(1){if((c[k>>2]|0)==(x|0))break sb;k=c[k+24>>2]|0;if(!k){k=0;break}}while(0);q=(c[(c[c[k+8>>2]>>2]|0)+76>>2]|0)==0?0:k}r=j+8|0;k=c[r>>2]|0;h=j+116|0;tb:do if(!k){i=c[j>>2]|0;do if(!(c[h>>2]|0)){if(b[i+76>>1]&8)break;a[j+23>>0]=1}while(0);ub:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=2968;else break tb;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break ub}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break ub}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=2968}while(0);if((rd|0)==2968)m=_d(i,224,0)|0;if(!m)break;I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[r>>2]=m;Di(m,61,0,1,0)|0;p=m;rd=2973}else{p=k;rd=2973}while(0);vb:do if((rd|0)==2973){h=c[h>>2]|0;a[((h|0)==0?j:h)+21>>0]=1;h=c[s>>2]|0;m=a[h>>0]|0;if((h|0)!=(-1|0)&m<<24>>24!=0){l=h;k=0;do{i=l+1|0;if((m&255)>191){l=i;while(1){m=a[l>>0]|0;if((m&-64)<<24>>24==-128)l=l+1|0;else break}}else{l=i;m=a[i>>0]|0}k=k+1|0}while(m<<24>>24!=0&(l|0)!=(-1|0))}else k=0;n=(u|0)==1;o=n&1;c[tc>>2]=v;c[tc+4>>2]=34585;c[tc+8>>2]=v;c[tc+12>>2]=h;c[tc+16>>2]=t;c[tc+20>>2]=o;c[tc+24>>2]=h;Ak(j,47026,tc);c[uc>>2]=v;c[uc+4>>2]=34585;c[uc+8>>2]=t;c[uc+12>>2]=t;c[uc+16>>2]=t;c[uc+20>>2]=k;c[uc+24>>2]=h;Ak(j,47187,uc);if(Sd(x,39382,v)|0){qd=c[s>>2]|0;c[vc>>2]=v;c[vc+4>>2]=t;c[vc+8>>2]=qd;Ak(j,47464,vc)}if(!n){c[wc>>2]=v;c[wc+4>>2]=h;c[wc+8>>2]=t;c[wc+12>>2]=h;c[wc+16>>2]=v;c[wc+20>>2]=t;Ak(j,47522,wc)}do if(q|0){i=j+44|0;l=(c[i>>2]|0)+1|0;c[i>>2]=l;i=p+108|0;k=c[i>>2]|0;m=p+112|0;if((c[m>>2]|0)>(k|0)){c[i>>2]=k+1;qd=c[p+104>>2]|0;a[qd+(k*20|0)>>0]=110;b[qd+(k*20|0)+2>>1]=0;c[qd+(k*20|0)+4>>2]=0;c[qd+(k*20|0)+8>>2]=l;c[qd+(k*20|0)+12>>2]=0;c[qd+(k*20|0)+16>>2]=0;a[qd+(k*20|0)+1>>0]=0}else k=Di(p,110,0,l,0)|0;if(!(a[(c[p>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[i>>2]|0)+-1|0;Ei(p,(c[p+104>>2]|0)+(k*20|0)|0,t,0)}k=c[i>>2]|0;if((c[m>>2]|0)>(k|0)){c[i>>2]=k+1;qd=c[p+104>>2]|0;a[qd+(k*20|0)>>0]=-91;b[qd+(k*20|0)+2>>1]=0;c[qd+(k*20|0)+4>>2]=l;c[qd+(k*20|0)+8>>2]=0;c[qd+(k*20|0)+12>>2]=0;c[qd+(k*20|0)+16>>2]=0;a[qd+(k*20|0)+1>>0]=0}else k=Di(p,165,l,0,0)|0;if(a[(c[p>>2]|0)+81>>0]|0)break;if((k|0)<0)k=(c[i>>2]|0)+-1|0;l=c[p+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=q;a[m>>0]=-12;qd=q+12|0;c[qd>>2]=(c[qd>>2]|0)+1;break}else{Ei(p,l+(k*20|0)|0,q,-12);break}}while(0);i=c[r>>2]|0;do if(!i){c[Jc>>2]=v;c[Jc+4>>2]=34585;c[Jc+8>>2]=v;c[Jc+12>>2]=o;Ak(j,47804,Jc);if(n)break vb}else{k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(u<<4)+12>>2]>>2]|0)+1|0;l=i+108|0;m=c[l>>2]|0;if((c[i+112>>2]|0)>(m|0)){c[l>>2]=m+1;qd=c[i+104>>2]|0;a[qd+(m*20|0)>>0]=95;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=u;c[qd+(m*20|0)+8>>2]=1;c[qd+(m*20|0)+12>>2]=k;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else Di(i,95,u,1,k)|0;Bk(c[r>>2]|0,u,0);if(n){c[Tc>>2]=v;c[Tc+4>>2]=34585;c[Tc+8>>2]=v;c[Tc+12>>2]=o;Ak(j,47804,Tc);break vb}else{Bk(c[r>>2]|0,1,0);c[Uc>>2]=v;c[Uc+4>>2]=34585;c[Uc+8>>2]=v;c[Uc+12>>2]=o;Ak(j,47804,Uc);break}}while(0);c[Vc>>2]=34585;c[Vc+4>>2]=v;Ak(j,47948,Vc)}while(0);qi(x,w);if(x|0)rd=3013}else rd=3010}else rd=3010}else{c[hb>>2]=t;cd(j,46940,hb);rd=3010}while(0);if((rd|0)==3010){qi(x,w);rd=3013}if((rd|0)==3013){if(c[x+480>>2]|0){Xd(x,t);break}j=t;if((c[x+304>>2]|0)>>>0<=j>>>0?(c[x+308>>2]|0)>>>0>j>>>0:0){j=x+300|0;c[t>>2]=c[j>>2];c[j>>2]=t;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{j=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else rd=3011}else rd=3011}else rd=3011;while(0);if((rd|0)==3011)qi(x,w);c[y>>2]=z;break}case 274:{h=td+-8|0;o=td+-4|0;c[o>>2]=(c[j+188>>2]|0)-(c[h>>2]|0)+(c[j+192>>2]|0);s=c[j>>2]|0;if((c[j+36>>2]|0)==0?(Nb=s+81|0,(a[Nb>>0]|0)==0):0){r=c[j+228>>2]|0;l=c[r+72>>2]|0;m=c[s+16>>2]|0;if(!l)t=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){t=k;break}else k=k+1|0}p=c[m+(t<<4)>>2]|0;q=(c[r>>2]|0)+16|0;m=c[r+4>>2]|0;i=(b[r+42>>1]|0)+-1|0;l=c[m+(i<<4)+4>>2]|0;k=Sd(s,q,p)|0;k=c[k>>2]|0;do if(((a[s+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(db=c[s+312>>2]|0,db|0):0){k=$a[db&127](c[s+316>>2]|0,26,p,k,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,eb);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,fb);c[j+12>>2]=1;break a}}while(0);if(!l)l=0;else l=(a[c[l+12>>2]>>0]|0)==114?0:l;if(a[m+(i<<4)+15>>0]&1){cd(j,48091,jb);break a}if(c[r+8>>2]|0){cd(j,48123,kb);break a}if(!(0==0?(c[s+32>>2]&16384|0)==0:0)?(l|0)!=0&(c[r+16>>2]|0)!=0:0){cd(j,48150,lb);break a}k=(l|0)!=0;if(!(k|(a[m+(i<<4)+12>>0]|0)==0)){cd(j,48209,xb);break a}wb:do if(k){c[qd>>2]=0;do if(!(Wj(s,l,1,65,qd)|0)){m=c[qd>>2]|0;if(!m){cd(j,48262,Ab);break}if(!((b[m+8>>1]&9216)==0?!(c[m+24>>2]|0):0))Cg(m);k=c[m+32>>2]|0;do if(!k)rd=3059;else{if(c[k+480>>2]|0){Xd(k,m);break}l=m;if((c[k+304>>2]|0)>>>0>l>>>0){rd=3059;break}if((c[k+308>>2]|0)>>>0<=l>>>0){rd=3059;break}qd=k+300|0;c[m>>2]=c[qd>>2];c[qd>>2]=m}while(0);do if((rd|0)==3059)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{qd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);break wb}while(0);break a}while(0);h=c[h>>2]|0;n=c[o>>2]|0;xb:do if(h|0){m=Sv(n|0,0,1,0)|0;i=L()|0;yb:do if(c[s+272>>2]|0)if(!(a[Nb>>0]|0))rd=3075;else break xb;else{do if(0<0|(0==0?n>>>0<(e[s+276>>1]|0)>>>0:0)){k=s+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];qd=s+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break yb}k=s+296|0;l=c[k>>2]|0;if(!l){k=s+292|0;break}else{c[k>>2]=c[l>>2];qd=s+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break yb}}else k=s+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3075}while(0);if((rd|0)==3075)l=_d(s,m,i)|0;if(l|0){ew(l|0,h|0,n|0)|0;a[l+n>>0]=0;k=(c[o>>2]|0)+-1|0;m=s+24|0;i=c[m>>2]|0;if((k|0)>0){k=l+k|0;do{qd=a[k>>0]|0;if(qd<<24>>24!=59?(a[880+(qd&255)>>0]&1)==0:0)break;a[k>>0]=0;k=k+-1|0}while(k>>>0>l>>>0);k=c[m>>2]|0}else k=i;c[m>>2]=k|2;qd=c[r+52>>2]|0;c[Zb>>2]=p;c[Zb+4>>2]=34585;c[Zb+8>>2]=qd;c[Zb+12>>2]=l;c[Zb+16>>2]=qd+1;c[Zb+20>>2]=q;Ak(j,48308,Zb);zb:do if(!(c[s+480>>2]|0)){k=l;do if((c[s+304>>2]|0)>>>0<=k>>>0){if((c[s+308>>2]|0)>>>0<=k>>>0)break;qd=s+300|0;c[l>>2]=c[qd>>2];c[qd>>2]=l;break zb}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{qd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(s,l);while(0);c[m>>2]=i}}while(0);p=j+8|0;k=c[p>>2]|0;Ab:do if(!k){m=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;Bb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3106;else break Ab;else{do if((e[m+276>>1]|0)>=224){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Bb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Bb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3106}while(0);if((rd|0)==3106)k=_d(m,224,0)|0;if(k|0){I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=m;l=m+4|0;m=c[l>>2]|0;if(m|0)c[m+4>>2]=k;c[k+8>>2]=m;c[k+4>>2]=0;c[l>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[p>>2]=k;Di(k,61,0,1,0)|0;rd=3111}}else rd=3111;while(0);do if((rd|0)==3111){o=j+19|0;l=a[o>>0]|0;if(!(l<<24>>24)){rd=j+44|0;n=(c[rd>>2]|0)+1|0;c[rd>>2]=n}else{n=l+-1<<24>>24;a[o>>0]=n;n=c[j+148+((n&255)<<2)>>2]|0}i=k+108|0;l=c[i>>2]|0;h=k+112|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=94;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=t;c[rd+(l*20|0)+8>>2]=n;c[rd+(l*20|0)+12>>2]=2;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,94,t,n,2)|0;l=1<<t;rd=k+152|0;c[rd>>2]=c[rd>>2]|l;if((t|0)!=1?a[(c[(c[(c[k>>2]|0)+16>>2]|0)+(t<<4)+4>>2]|0)+9>>0]|0:0){rd=k+156|0;c[rd>>2]=c[rd>>2]|l}l=c[i>>2]|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=83;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=n;c[rd+(l*20|0)+8>>2]=-2;c[rd+(l*20|0)+12>>2]=0;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,83,n,-2,0)|0;l=c[i>>2]|0;m=l+2|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=47;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=n;c[rd+(l*20|0)+8>>2]=m;c[rd+(l*20|0)+12>>2]=0;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,47,n,m,0)|0;l=c[i>>2]|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=95;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=t;c[rd+(l*20|0)+8>>2]=2;c[rd+(l*20|0)+12>>2]=3;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,95,t,2,3)|0;if(!n)break;k=a[o>>0]|0;if((k&255)>=8)break;a[o>>0]=k+1<<24>>24;c[j+148+((k&255)<<2)>>2]=n}while(0);i=c[p>>2]|0;if(i|0){k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(t<<4)+12>>2]>>2]|0)+1|0;l=i+108|0;m=c[l>>2]|0;if((c[i+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[i+104>>2]|0;a[j+(m*20|0)>>0]=95;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=t;c[j+(m*20|0)+8>>2]=1;c[j+(m*20|0)+12>>2]=k;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(i,95,t,1,k)|0;Bk(c[p>>2]|0,t,0);if((t|0)!=1)Bk(c[p>>2]|0,1,0)}}break}case 275:{D=j+24|0;a[D>>0]=(a[D>>0]|0)+1<<24>>24;D=c[j>>2]|0;E=D+272|0;c[E>>2]=(c[E>>2]|0)+1;F=c[td+4>>2]|0;H=D+81|0;Cb:do if(!(a[H>>0]|0)){l=c[F+8>>2]|0;if(!l)k=F+12|0;else{m=c[D+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}C=bd(j,0,c[F+16>>2]|0,c[k>>2]|0)|0;if(C|0){if(c[C+56>>2]|0){cd(j,48417,Ia);break}if(c[C+12>>2]|0){cd(j,48451,Ja);break}if(!(on(j,C)|0)){l=c[C+72>>2]|0;if(!l)A=-1e6;else{m=c[D+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){A=k;break}else k=k+1|0}B=(D|0)==0;Db:do if(B){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](80)|0;rd=3176;break}k=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break Cb;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[E>>2]|0){if(a[H>>0]|0)break Cb}else{do if((e[D+276>>1]|0)>=80){l=D+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3176;break Db}l=D+296|0;k=c[l>>2]|0;if(!k){k=D+292|0;break}else{c[l>>2]=c[k>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3176;break Db}}else k=D+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(D,80,0)|0;rd=3176}while(0);if((rd|0)==3176)if(!k)break;I=k;J=I+80|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[j+228>>2]=k;y=k+32|0;c[y>>2]=1;h=b[C+42>>1]|0;z=k+42|0;b[z>>1]=h;h=((((h<<16>>16)+-1|0)/8|0)<<7)+128|0;Eb:do if(B){j=Sv(h|0,0,-1,-1)|0;qd=L()|0;if(!(qd>>>0>0|(qd|0)==0&j>>>0>2147483390)){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](h)|0;rd=3201;break}l=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){j=c[14978]|0;qd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(l){m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;rd=3202}else rd=3202}else l=0}else l=0}else{if(c[E>>2]|0){if(a[H>>0]|0){l=0;break}}else{do if(!(0<0|(0==0?(e[D+276>>1]|0)>>>0<h>>>0:0))){m=D+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3201;break Eb}m=D+296|0;l=c[m>>2]|0;if(!l){l=D+292|0;break}else{c[m>>2]=c[l>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3201;break Eb}}else l=D+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(D,h,0)|0;rd=3201}while(0);if((rd|0)==3201)if(!l)l=0;else rd=3202;if((rd|0)==3202)gw(l|0,0,h|0)|0;x=k+4|0;c[x>>2]=l;c[kc>>2]=c[C>>2];j=dd(D,48481,kc)|0;c[k>>2]=j;l=c[x>>2]|0;if(!((j|0)==0|(l|0)==0)){ew(l|0,c[C+4>>2]|0,b[z>>1]<<4|0)|0;if((b[z>>1]|0)>0){p=D+276|0;q=D+288|0;r=D+300|0;s=D+296|0;t=D+284|0;u=D+292|0;o=0;do{v=c[x>>2]|0;w=v+(o<<4)|0;h=c[w>>2]|0;Fb:do if(!h)l=0;else{n=(Eu(h)|0)+1|0;Gb:do if(B){j=Sv(n|0,0,-1,-1)|0;qd=L()|0;if(qd>>>0>0|(qd|0)==0&j>>>0>2147483390){l=0;break Fb}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](n)|0;rd=3229;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){j=c[14978]|0;qd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Fb}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[E>>2]|0){if(a[H>>0]|0){l=0;break Fb}}else{do if(0<0|(0==0?(e[p>>1]|0)>>>0<n>>>0:0))l=q;else{l=c[r>>2]|0;if(l|0){c[r>>2]=c[l>>2];c[t>>2]=(c[t>>2]|0)+1;rd=3229;break Gb}l=c[s>>2]|0;if(!l){l=u;break}c[s>>2]=c[l>>2];c[t>>2]=(c[t>>2]|0)+1;rd=3229;break Gb}while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(D,n,0)|0;rd=3229}while(0);if((rd|0)==3229){rd=0;if(!l){l=0;break}}ew(l|0,h|0,n|0)|0}while(0);c[w>>2]=l;c[v+(o<<4)+8>>2]=0;c[v+(o<<4)+4>>2]=0;o=o+1|0}while((o|0)<(b[z>>1]|0))}c[k+72>>2]=c[(c[D+16>>2]|0)+(A<<4)+12>>2];c[k+52>>2]=c[C+52>>2];c[y>>2]=1}}}}while(0);qi(D,F);break}case 276:{u=c[td+-56>>2]|0;i=td+-20|0;p=td+4|0;v=c[j>>2]|0;l=c[u+8>>2]|0;if(!l)k=u+12|0;else{m=c[v+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}r=bd(j,0,c[u+16>>2]|0,c[k>>2]|0)|0;Hb:do if(r|0?(on(j,r)|0)==0:0){k=(c[r+56>>2]|0)==0?((c[r+12>>2]|0)==0?0:39579):48814;if(k|0){rd=c[r>>2]|0;c[Ma>>2]=k;c[Ma+4>>2]=rd;cd(j,48828,Ma);break}l=c[r+72>>2]|0;m=c[v+16>>2]|0;if(!l)t=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){t=k;break}else k=k+1|0}s=c[m+(t<<4)>>2]|0;k=c[r>>2]|0;l=c[j>>2]|0;do if(((a[l+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(zb=c[l+312>>2]|0,zb|0):0){k=$a[zb&127](c[l+316>>2]|0,26,s,k,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Bb);c[j+12>>2]=23;break Hb}if((k|2|0)==2)if(!k)break;else break Hb;else{cd(j,39231,Db);c[j+12>>2]=1;break Hb}}while(0);q=qj(v,i)|0;if(q|0){qd=b[r+42>>1]|0;o=qd<<16>>16;Ib:do if(qd<<16>>16>0){h=c[r+4>>2]|0;n=d[208+(d[q>>0]|0)>>0]|0;k=0;do{m=c[h+(k<<4)>>2]|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-n|0;if(!(qd<<24>>24==0|(l|0)!=0)){i=q;do{m=m+1|0;i=i+1|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(l|0)!=0))}if(!l)break Ib;k=k+1|0}while((k|0)<(o|0))}else k=0;while(0);Jb:do if((k|0)!=(o|0)){l=c[j+116>>2]|0;a[((l|0)==0?j:l)+21>>0]=1;l=qj(v,p)|0;if(!l)l=0;else{h=a[880+(d[c[p>>2]>>0]|0)>>0]&-128&255;n=c[r>>2]|0;o=(t|0)==1;p=o&1;c[Wb>>2]=s;c[Wb+4>>2]=34585;c[Wb+8>>2]=s;c[Wb+12>>2]=n;c[Wb+16>>2]=k;c[Wb+20>>2]=l;c[Wb+24>>2]=h;c[Wb+28>>2]=p;c[Wb+32>>2]=n;Ak(j,48500,Wb);n=c[r>>2]|0;c[Xb>>2]=34585;c[Xb+4>>2]=s;c[Xb+8>>2]=n;c[Xb+12>>2]=k;c[Xb+16>>2]=l;c[Xb+20>>2]=h;Ak(j,48694,Xb);h=j+8|0;n=c[h>>2]|0;do if(!n){c[_b>>2]=s;c[_b+4>>2]=34585;c[_b+8>>2]=s;c[_b+12>>2]=p;Ak(j,47804,_b);if(o)break Jb}else{k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(t<<4)+12>>2]>>2]|0)+1|0;m=n+108|0;i=c[m>>2]|0;if((c[n+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[n+104>>2]|0;a[qd+(i*20|0)>>0]=95;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=t;c[qd+(i*20|0)+8>>2]=1;c[qd+(i*20|0)+12>>2]=k;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0}else Di(n,95,t,1,k)|0;Bk(c[h>>2]|0,t,0);if(o){c[$b>>2]=s;c[$b+4>>2]=34585;c[$b+8>>2]=s;c[$b+12>>2]=p;Ak(j,47804,$b);break Jb}else{Bk(c[h>>2]|0,1,0);c[ac>>2]=s;c[ac+4>>2]=34585;c[ac+8>>2]=s;c[ac+12>>2]=p;Ak(j,47804,ac);break}}while(0);c[bc>>2]=34585;c[bc+4>>2]=s;Ak(j,47948,bc)}}else{c[Ub>>2]=q;cd(j,31333,Ub);l=0}while(0);qi(v,u);k=(v|0)==0;do if(!k){if(c[v+480>>2]|0){Xd(v,q);break}j=q;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[q>>2]=c[j>>2];c[j>>2]=q}else rd=3281}else rd=3281;while(0);do if((rd|0)==3281)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{j=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);if(!l)break a;if(!k){if(c[v+480>>2]|0){Xd(v,l);break a}j=l;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break a}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break a}}}while(0);qi(v,u);break}case 277:{Aj(j,0);break}case 278:{Aj(j,td+4|0);break}case 279:{o=td+4|0;bj(j,td+-32|0,td+-20|0,0,0,1,c[td+-44>>2]|0);r=c[j+228>>2]|0;if(r|0){q=c[j>>2]|0;h=qj(q,o)|0;p=r+56|0;rd=c[p>>2]|0;m=(rd<<2)+8|0;i=c[j>>2]|0;if((rd+3|0)>=(c[i+116>>2]|0)){c[na>>2]=c[r>>2];cd(j,38221,na)}n=r+60|0;k=c[n>>2]|0;Kb:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=3317;break}}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3316;break Kb}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3316;break Kb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,m,0)|0;rd=3316}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3326;break}k=Zd(i,k,m,0)|0;rd=3316;break}k=Zd(i,k,m,0)|0;rd=3316}while(0);if((rd|0)==3316)if(!k)rd=3317;else rd=3326;do if((rd|0)==3317){if(h|0){if(c[i+480>>2]|0){Xd(i,h);break}qd=h;if((c[i+304>>2]|0)>>>0<=qd>>>0?(c[i+308>>2]|0)>>>0>qd>>>0:0){qd=i+300|0;c[h>>2]=c[qd>>2];c[qd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{qd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}else if((rd|0)==3326){pd=c[p>>2]|0;qd=pd+1|0;c[p>>2]=qd;c[k+(pd<<2)>>2]=h;c[k+(qd<<2)>>2]=0;c[n>>2]=k}while(0);qd=c[p>>2]|0;m=(qd<<2)+8|0;i=c[j>>2]|0;if((qd+3|0)>=(c[i+116>>2]|0)){c[Eb>>2]=c[r>>2];cd(j,38221,Eb)}k=c[n>>2]|0;Lb:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Jb=i+284|0;c[Jb>>2]=(c[Jb>>2]|0)+1;Jb=l;rd=3346;break Lb}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];Jb=i+284|0;c[Jb>>2]=(c[Jb>>2]|0)+1;Jb=l;rd=3346;break Lb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Jb=_d(i,m,0)|0;rd=3346}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3347;break}Jb=Zd(i,k,m,0)|0;rd=3346;break}Jb=Zd(i,k,m,0)|0;rd=3346}while(0);if((rd|0)==3346?Jb|0:0){k=Jb;rd=3347}if((rd|0)==3347){pd=c[p>>2]|0;qd=pd+1|0;c[p>>2]=qd;c[k+(pd<<2)>>2]=0;c[k+(qd<<2)>>2]=0;c[n>>2]=k}i=c[r>>2]|0;Mb:do if(!i)h=0;else{h=(Eu(i)|0)+1|0;Nb:do if(!q){qd=Sv(h|0,0,-1,-1)|0;pd=L()|0;if(pd>>>0>0|(pd|0)==0&qd>>>0>2147483390){h=0;break Mb}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](h)|0;rd=3373;break}k=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){h=0;break Mb}l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){h=0;break Mb}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<h>>>0:0))){l=q+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=q+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3373;break Nb}l=q+296|0;k=c[l>>2]|0;if(!k){k=q+292|0;break}else{c[l>>2]=c[k>>2];rd=q+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3373;break Nb}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(q,h,0)|0;rd=3373}while(0);if((rd|0)==3373)if(!k){h=0;break}ew(k|0,i|0,h|0)|0;h=k}while(0);rd=c[p>>2]|0;m=(rd<<2)+8|0;i=c[j>>2]|0;if((rd+3|0)>=(c[i+116>>2]|0)){c[ic>>2]=c[r>>2];cd(j,38221,ic)}k=c[n>>2]|0;Ob:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=3395;break}}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3394;break Ob}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3394;break Ob}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,m,0)|0;rd=3394}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3404;break}k=Zd(i,k,m,0)|0;rd=3394;break}k=Zd(i,k,m,0)|0;rd=3394}while(0);if((rd|0)==3394)if(!k)rd=3395;else rd=3404;do if((rd|0)==3395){if(h|0){if(c[i+480>>2]|0){Xd(i,h);break}rd=h;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){rd=i+300|0;c[h>>2]=c[rd>>2];c[rd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{rd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}else if((rd|0)==3404){qd=c[p>>2]|0;rd=qd+1|0;c[p>>2]=rd;c[k+(qd<<2)>>2]=h;c[k+(rd<<2)>>2]=0;c[n>>2]=k}while(0);c[j+184>>2]=(c[o>>2]|0)+(c[td+8>>2]|0)-(c[j+180>>2]|0);h=c[n>>2]|0;if(h|0){m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[q+16>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}i=c[r>>2]|0;l=c[h>>2]|0;m=c[j>>2]|0;k=c[(c[m+16>>2]|0)+(k<<4)>>2]|0;if(((a[m+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(zc=c[m+312>>2]|0,zc|0):0){k=$a[zc&127](c[m+316>>2]|0,29,i,l,k,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Bc);c[j+12>>2]=23;break a}if((k|2|0)!=2){cd(j,39231,Cc);c[j+12>>2]=1}}}}break}case 280:{p=j+244|0;n=c[p>>2]|0;do if(n|0?(ob=c[j+228>>2]|0,ob|0):0){o=c[j+248>>2]|0;m=c[j>>2]|0;i=Sv(o|0,((o|0)<0)<<31>>31|0,1,0)|0;h=L()|0;Pb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3428;else n=0;else{do if(!(h>>>0>0|((h|0)==0?i>>>0>(e[m+276>>1]|0)>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3429;break Pb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3429;break Pb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3428}while(0);if((rd|0)==3428){k=_d(m,i,h)|0;rd=3429}if((rd|0)==3429)if(!k)n=0;else{ew(k|0,n|0,o|0)|0;a[k+o>>0]=0;n=k}o=ob+56|0;qd=c[o>>2]|0;i=(qd<<2)+8|0;h=c[j>>2]|0;if((qd+3|0)>=(c[h+116>>2]|0)){c[mb>>2]=c[ob>>2];cd(j,38221,mb)}m=ob+60|0;k=c[m>>2]|0;Qb:do if(!k){if(c[h+272>>2]|0){if(a[h+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[h+276>>1]|0)>>>0<i>>>0:0))){k=h+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Fb=h+284|0;c[Fb>>2]=(c[Fb>>2]|0)+1;Fb=l;rd=3450;break Qb}k=h+296|0;l=c[k>>2]|0;if(!l){k=h+292|0;break}else{c[k>>2]=c[l>>2];Fb=h+284|0;c[Fb>>2]=(c[Fb>>2]|0)+1;Fb=l;rd=3450;break Qb}}else k=h+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Fb=_d(h,i,0)|0;rd=3450}else{rd=k;if((c[h+304>>2]|0)>>>0<=rd>>>0?(c[h+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[h+276>>1]|0)>>>0<i>>>0:0))){rd=3460;break}Fb=Zd(h,k,i,0)|0;rd=3450;break}Fb=Zd(h,k,i,0)|0;rd=3450}while(0);if((rd|0)==3450?Fb|0:0){k=Fb;rd=3460}if((rd|0)==3460){qd=c[o>>2]|0;rd=qd+1|0;c[o>>2]=rd;c[k+(qd<<2)>>2]=n;c[k+(rd<<2)>>2]=0;c[m>>2]=k;break}if(n|0){if(c[h+480>>2]|0){Xd(h,n);break}rd=n;if((c[h+304>>2]|0)>>>0<=rd>>>0?(c[h+308>>2]|0)>>>0>rd>>>0:0){rd=h+300|0;c[n>>2]=c[rd>>2];c[rd>>2]=n;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{rd=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}}while(0);c[p>>2]=0;c[j+248>>2]=0;break}case 283:case 282:case 281:{k=j+244|0;l=c[k>>2]|0;m=c[td+4>>2]|0;if(!l){c[k>>2]=m;k=c[td+8>>2]|0}else k=m+(c[td+8>>2]|0)-l|0;c[j+248>>2]=k;break}case 285:case 284:{k=c[td+4>>2]|0;if(k|0){rd=j+264|0;c[k+4>>2]=c[rd>>2];c[rd>>2]=k;c[j+268>>2]=k}break}case 286:{rd=td+-56|0;j=Bj(j,0,rd,c[td+-44>>2]|0,c[td+-8>>2]|0)|0;c[rd>>2]=j;break}case 287:{rd=td+-80|0;j=Bj(j,c[rd>>2]|0,td+-56|0,c[td+-44>>2]|0,c[td+-8>>2]|0)|0;c[rd>>2]=j;break}case 314:{m=c[j>>2]|0;Rb:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](92)|0;rd=3591;break}k=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){rd=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=rd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;rd=3592}else rd=3592}else rd=3607}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){rd=3607;break}}else{do if((e[m+276>>1]|0)>=92){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3591;break Rb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3591;break Rb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,92,0)|0;rd=3591}while(0);if((rd|0)==3591)if(!k)rd=3607;else{l=k;rd=3592}if((rd|0)==3592){I=l;J=I+92|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));i=c[j>>2]|0;o=c[td+4>>2]|0;p=c[td+8>>2]|0;Sb:do if(o){h=Sv(p|0,0,1,0)|0;n=L()|0;Tb:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=3603;else{k=0;break Sb}else{do if(0<0|(0==0?p>>>0<(e[i+276>>1]|0)>>>0:0)){m=i+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];j=i+284|0;c[j>>2]=(c[j>>2]|0)+1;break Tb}m=i+296|0;k=c[m>>2]|0;if(!k){k=i+292|0;break}else{c[m>>2]=c[k>>2];j=i+284|0;c[j>>2]=(c[j>>2]|0)+1;break Tb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3603}while(0);if((rd|0)==3603)k=_d(i,h,n)|0;if(k){ew(k|0,o|0,p|0)|0;a[k+p>>0]=0}else k=0}else k=0;while(0);c[l>>2]=k;c[l+36>>2]=c[td+-20>>2];k=l}else if((rd|0)==3607){k=c[td+-20>>2]|0;if(!k)k=0;else{ni(c[j>>2]|0,k);k=0}}c[td+-20>>2]=k;break}case 289:{qd=td+4|0;rd=td+-20|0;Cj(j,c[qd>>2]|0,c[rd>>2]|0);c[(c[qd>>2]|0)+32>>2]=c[rd>>2];c[rd>>2]=c[qd>>2];break}case 290:{p=td+-8|0;if(!(c[p>>2]|0))k=0;else{m=c[j>>2]|0;n=c[td+-44>>2]|0;o=c[td+-40>>2]|0;Ub:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Vb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3483;else{k=0;break Ub}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Vb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Vb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3483}while(0);if((rd|0)==3483)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[c[p>>2]>>2]=k;k=c[p>>2]|0}c[td+-44>>2]=k;break}case 291:{k=c[td+4>>2]|0;l=c[td+-20>>2]|0;m=c[td+-8>>2]|0;if(!k){if(l|0)ri(c[j>>2]|0,l);if(m|0)ri(c[j>>2]|0,m)}else{c[k+8>>2]=l;c[k+12>>2]=m}c[td+-44>>2]=k;break}case 292:{p=c[td+4>>2]|0;k=c[td+-20>>2]|0;l=c[td+-8>>2]|0;q=td+-56|0;if(!p){if(k|0)ri(c[j>>2]|0,k);if(l|0)ri(c[j>>2]|0,l)}else{c[p+8>>2]=k;c[p+12>>2]=l;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-52>>2]|0;Wb:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Xb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3507;else{k=0;break Wb}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Xb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Xb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3507}while(0);if((rd|0)==3507)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 293:{k=c[td+4>>2]|0;l=c[td+-8>>2]|0;if(!k){if(l|0)ri(c[j>>2]|0,l)}else{c[k+8>>2]=0;c[k+12>>2]=l}c[td+-32>>2]=k;break}case 294:{p=c[td+4>>2]|0;k=c[td+-8>>2]|0;q=td+-44|0;if(!p){if(k|0)ri(c[j>>2]|0,k)}else{c[p+8>>2]=0;c[p+12>>2]=k;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-40>>2]|0;Yb:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Zb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3533;else{k=0;break Yb}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Zb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Zb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3533}while(0);if((rd|0)==3533)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 313:{rd=c[td+-8>>2]|0;j=td+-44|0;c[rd+36>>2]=c[j>>2];c[j>>2]=rd;break}case 296:{p=c[td+4>>2]|0;q=td+-8|0;if(p|0){c[p+8>>2]=0;c[p+12>>2]=0;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-4>>2]|0;_b:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;$b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3552;else{k=0;break _b}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break $b}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break $b}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3552}while(0);if((rd|0)==3552)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 297:{j=Dj(j,0,87,0,82,0,0)|0;c[td+16>>2]=j;break}case 298:{rd=td+-20|0;j=Dj(j,c[rd>>2]|0,c[td+-8>>2]|0,c[td+-4>>2]|0,82,0,a[td+4>>0]|0)|0;c[rd>>2]=j;break}case 299:{rd=td+-56|0;j=Dj(j,c[rd>>2]|0,c[td+-32>>2]|0,c[td+-28>>2]|0,c[td+-8>>2]|0,c[td+-4>>2]|0,a[td+4>>0]|0)|0;c[rd>>2]=j;break}case 312:{c[td+-8>>2]=c[td+4>>2];break}case 311:{a[td+4>>0]=b[td+2>>1];break}case 306:case 304:case 302:{c[td+-8>>2]=e[td+-10>>1];c[td+-4>>2]=0;break}case 305:{rd=td+-8|0;j=c[rd>>2]|0;c[rd>>2]=e[td+2>>1];c[td+-4>>2]=j;break}case 307:{a[td+16>>0]=0;break}case 308:{a[td+-8>>0]=a[td+4>>0]|0;break}case 310:case 309:{a[td+-8>>0]=b[td+-10>>1];break}default:{}}while(0);j=b[17152+(g<<1)>>1]|0;sd=sd<<24>>24;g=b[11376+((b[18656+(e[td+(sd*12|0)>>1]<<1)>>1]|0)+(j&65535)<<1)>>1]|0;sd=sd+1|0;rd=td+(sd*12|0)|0;c[f>>2]=rd;b[rd>>1]=g;b[td+(sd*12|0)+2>>1]=j;f=g;Ra=ud;return f|0}\nfunction zj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+64|0;B=I+48|0;A=I+40|0;s=I+32|0;r=I+24|0;q=I+16|0;p=I+8|0;u=I;F=I+52|0;G=c[f>>2]|0;a:do if(!(a[G+165>>0]|0)){n=f+4|0;o=G+24|0;k=(c[o>>2]&1|0)==0;l=G+16|0;C=c[(c[l>>2]|0)+12>>2]|0;a[G+78>>0]=a[C+77>>0]|0;if(!((b[C+78>>1]&1)==0?(i=eh(G,0,n,0)|0,(i|0)!=0):0))H=4;b:do if((H|0)==4){i=c[G+20>>2]|0;if((i|0)>1)do{j=i;i=i+-1|0;if((b[(c[(c[l>>2]|0)+(i<<4)+12>>2]|0)+78>>1]&1)==0?(m=eh(G,i,n,0)|0,m|0):0){i=m;break b}}while((j|0)>2);if(k)c[o>>2]=c[o>>2]&-2;if(!(a[G+89>>0]|0))break a;c[o>>2]=c[o>>2]|16;break a}while(0);c[f+12>>2]=i;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;Ra=I;return}while(0);c:do if(!g){n=G+20|0;if((c[n>>2]|0)>0){o=f+116|0;p=f+40|0;q=f+44|0;r=f+8|0;s=f+23|0;m=0;do{d:do if((m|0)!=1){l=c[(c[(c[f>>2]|0)+16>>2]|0)+(m<<4)+12>>2]|0;k=c[o>>2]|0;k=(k|0)==0?f:k;i=k+84|0;g=c[i>>2]|0;j=1<<m;if(!(g&j))c[i>>2]=g|j;g=k+80|0;c[g>>2]=c[g>>2]|j;g=c[p>>2]|0;c[p>>2]=g+3;hn(f,m,g,0,0);j=(c[q>>2]|0)+1|0;k=c[p>>2]|0;i=c[l+16>>2]|0;if(i|0)do{jn(f,c[i+8>>2]|0,0,g,j,k);i=c[i>>2]|0}while((i|0)!=0);i=c[r>>2]|0;if(!i){j=c[f>>2]|0;if((c[o>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[s>>0]=1;e:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=37;else break d;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break e}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break e}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=37}while(0);if((H|0)==37){H=0;i=_d(j,224,0)|0}if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[r>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=m;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,m,0,0)|0;break}}while(0);m=m+1|0}while((m|0)<(c[n>>2]|0))}}else{j=h+4|0;do if(!(c[j>>2]|0)){C=wk(G,g)|0;i=c[f>>2]|0;if((C|0)<=-1){if(!(c[j>>2]|0)){i=d[i+164>>0]|0;break}if(a[i+165>>0]|0){cd(f,39404,r);break c}i=wk(i,g)|0;if((i|0)>=0){g=h;break}c[s>>2]=g;cd(f,39421,s);break c}p=c[(c[i+16>>2]|0)+(C<<4)+12>>2]|0;q=f+116|0;o=c[q>>2]|0;o=(o|0)==0?f:o;i=o+84|0;g=c[i>>2]|0;n=1<<C;do if((((g&n|0)==0?(c[i>>2]=g|n,(C|0)==1):0)?(x=c[o>>2]|0,t=x+16|0,(c[(c[t>>2]|0)+20>>2]|0)==0):0)?(a[o+199>>0]|0)==0:0){i=Pe(c[x>>2]|0,0,x,F,0,542)|0;if(i|0){cd(o,32157,u);c[o+12>>2]=i;break}F=c[F>>2]|0;c[(c[t>>2]|0)+20>>2]=F;i=c[x+92>>2]|0;j=c[F+4>>2]|0;c[j+4>>2]=c[F>>2];if(!(b[j+22>>1]&2)){k=j+32|0;l=j+36|0;m=(c[k>>2]|0)-(c[l>>2]|0)|0;if(((i+-512|0)>>>0<65025?(i+-1&i|0)==0:0)?(c[k>>2]=i,w=j+80|0,v=c[w>>2]|0,v|0):0){g=v+-4|0;c[w>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=63;break}else{i=Wa[c[29352>>2]&127](g)|0;H=63}while(0);do if((H|0)==63){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[w>>2]=0}F=Se(c[j>>2]|0,k,m)|0;c[l>>2]=(c[k>>2]|0)-(m&65535);if((F|0)==7){i=x+81|0;do if((a[i>>0]|0)==0?(a[x+82>>0]|0)==0:0){a[i>>0]=1;if((c[x+180>>2]|0)>0)c[x+264>>2]=1;i=x+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[x+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=o+80|0;c[k>>2]=c[k>>2]|n;k=f+40|0;g=c[k>>2]|0;c[k>>2]=g+3;hn(f,C,g,0,0);j=(c[f+44>>2]|0)+1|0;k=c[k>>2]|0;i=c[p+16>>2]|0;if(i|0)do{jn(f,c[i+8>>2]|0,0,g,j,k);i=c[i>>2]|0}while((i|0)!=0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[q>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;f:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=93;else break c;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break f}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break f}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=93}while(0);if((H|0)==93)i=_d(j,224,0)|0;if(!i)break c;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=C;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break c}else{Di(i,142,C,0,0)|0;break c}}else{i=c[f>>2]|0;if(a[i+165>>0]|0){cd(f,39404,p);break c}i=wk(i,g)|0;if((i|0)<0){c[q>>2]=g;cd(f,39421,q);break c}else g=h}while(0);if(!(c[j>>2]|0))i=0;else i=c[(c[G+16>>2]|0)+(i<<4)>>2]|0;t=qj(G,g)|0;if(t|0){s=hi(G,t,i)|0;g:do if(!s){q=bd(f,0,t,i)|0;if(q|0){g=c[q+72>>2]|0;if(!g)s=-1e6;else{j=c[(c[f>>2]|0)+16>>2]|0;i=0;while(1)if((c[j+(i<<4)+12>>2]|0)==(g|0)){s=i;break}else i=i+1|0}r=f+116|0;p=c[r>>2]|0;p=(p|0)==0?f:p;i=p+84|0;g=c[i>>2]|0;o=1<<s;do if((((g&o|0)==0?(c[i>>2]=g|o,(s|0)==1):0)?(E=c[p>>2]|0,z=E+16|0,(c[(c[z>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){i=Pe(c[E>>2]|0,0,E,F,0,542)|0;if(i|0){cd(p,32157,B);c[p+12>>2]=i;break}F=c[F>>2]|0;c[(c[z>>2]|0)+20>>2]=F;i=c[E+92>>2]|0;k=c[F+4>>2]|0;c[k+4>>2]=c[F>>2];if(!(b[k+22>>1]&2)){l=k+32|0;m=k+36|0;n=(c[l>>2]|0)-(c[m>>2]|0)|0;do if((i+-512|0)>>>0<65025){if(i+-1&i|0)break;c[l>>2]=i;j=k+80|0;i=c[j>>2]|0;if(!i)break;g=i+-4|0;c[j>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=187;break}else{i=Wa[c[29352>>2]&127](g)|0;H=187}while(0);do if((H|0)==187){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[j>>2]=0}while(0);F=Se(c[k>>2]|0,l,n)|0;c[m>>2]=(c[l>>2]|0)-(n&65535);if((F|0)==7){i=E+81|0;do if(!(a[i>>0]|0)){if(a[E+82>>0]|0)break;a[i>>0]=1;if((c[E+180>>2]|0)>0)c[E+264>>2]=1;i=E+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[E+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=p+80|0;c[k>>2]=c[k>>2]|o;k=f+40|0;i=c[k>>2]|0;c[k>>2]=i+3;hn(f,s,i,c[q>>2]|0,38087);jn(f,q,0,i,(c[f+44>>2]|0)+1|0,c[k>>2]|0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[r>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=214;else break g;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break h}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break h}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=214}while(0);if((H|0)==214)i=_d(j,224,0)|0;if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=s;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,s,0,0)|0;break}}}else{q=c[s+12>>2]|0;g=c[q+72>>2]|0;if(!g)h=-1e6;else{j=c[(c[f>>2]|0)+16>>2]|0;i=0;while(1)if((c[j+(i<<4)+12>>2]|0)==(g|0)){h=i;break}else i=i+1|0}r=f+116|0;p=c[r>>2]|0;p=(p|0)==0?f:p;i=p+84|0;g=c[i>>2]|0;o=1<<h;do if((((g&o|0)==0?(c[i>>2]=g|o,(h|0)==1):0)?(D=c[p>>2]|0,y=D+16|0,(c[(c[y>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){i=Pe(c[D>>2]|0,0,D,F,0,542)|0;if(i|0){cd(p,32157,A);c[p+12>>2]=i;break}F=c[F>>2]|0;c[(c[y>>2]|0)+20>>2]=F;i=c[D+92>>2]|0;k=c[F+4>>2]|0;c[k+4>>2]=c[F>>2];if(!(b[k+22>>1]&2)){l=k+32|0;m=k+36|0;n=(c[l>>2]|0)-(c[m>>2]|0)|0;do if((i+-512|0)>>>0<65025?(i+-1&i|0)==0:0){c[l>>2]=i;j=k+80|0;i=c[j>>2]|0;if(!i)break;g=i+-4|0;c[j>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=133;break}else{i=Wa[c[29352>>2]&127](g)|0;H=133}while(0);do if((H|0)==133){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[j>>2]=0}while(0);F=Se(c[k>>2]|0,l,n)|0;c[m>>2]=(c[l>>2]|0)-(n&65535);if((F|0)==7){i=D+81|0;do if(!(a[i>>0]|0)){if(a[D+82>>0]|0)break;a[i>>0]=1;if((c[D+180>>2]|0)>0)c[D+264>>2]=1;i=D+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[D+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=p+80|0;c[k>>2]=c[k>>2]|o;k=f+40|0;i=c[k>>2]|0;c[k>>2]=i+3;hn(f,h,i,c[s>>2]|0,38091);jn(f,q,s,i,(c[f+44>>2]|0)+1|0,c[k>>2]|0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[r>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;i:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=160;else break g;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break i}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break i}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=160}while(0);if((H|0)==160)i=_d(j,224,0)|0;if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=h;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,h,0,0)|0;break}}while(0);if(G|0){if(c[G+480>>2]|0){Xd(G,t);break}F=t;if((c[G+304>>2]|0)>>>0<=F>>>0?(c[G+308>>2]|0)>>>0>F>>>0:0){F=G+300|0;c[t>>2]=c[F>>2];c[F>>2]=t;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{F=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}}while(0);if(a[G+90>>0]|0){Ra=I;return}k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;j:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=246;else{Ra=I;return}else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];G=j+284|0;c[G>>2]=(c[G>>2]|0)+1;break j}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];G=j+284|0;c[G>>2]=(c[G>>2]|0)+1;break j}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=246}while(0);if((H|0)==246)i=_d(j,224,0)|0;if(!i){Ra=I;return}g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;g=c[i+104>>2]|0;a[g+(j*20|0)>>0]=-98;g=g+(j*20|0)+1|0;l=g+19|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(l|0));Ra=I;return}else{Di(i,158,0,0,0)|0;Ra=I;return}}function Aj(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+48|0;t=w+40|0;s=w+16|0;q=w+8|0;n=w;o=d+228|0;u=c[o>>2]|0;v=c[d>>2]|0;if(!u){Ra=w;return}p=d+244|0;m=c[p>>2]|0;do if(m){l=c[d+248>>2]|0;j=Sv(l|0,((l|0)<0)<<31>>31|0,1,0)|0;k=L()|0;a:do if(c[v+272>>2]|0)if(!(a[v+81>>0]|0))r=14;else m=0;else{do if(!(k>>>0>0|((k|0)==0?j>>>0>(e[v+276>>1]|0)>>>0:0))){i=v+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];r=v+284|0;c[r>>2]=(c[r>>2]|0)+1;r=15;break a}i=v+296|0;g=c[i>>2]|0;if(!g){g=v+292|0;break}else{c[i>>2]=c[g>>2];r=v+284|0;c[r>>2]=(c[r>>2]|0)+1;r=15;break a}}else g=v+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;r=14}while(0);if((r|0)==14){g=_d(v,j,k)|0;r=15}if((r|0)==15)if(!g)m=0;else{ew(g|0,m|0,l|0)|0;a[g+l>>0]=0;m=g}g=u+56|0;l=c[g>>2]|0;j=(l<<2)+8|0;k=c[d>>2]|0;if((l+3|0)>=(c[k+116>>2]|0)){c[n>>2]=c[u>>2];cd(d,38221,n)}l=u+60|0;i=c[l>>2]|0;b:do if(!i){if(c[k+272>>2]|0){if(a[k+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<j>>>0:0))){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;r=36;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;r=36;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(k,j,0)|0;r=36}else{r=i;if((c[k+304>>2]|0)>>>0<=r>>>0?(c[k+308>>2]|0)>>>0>r>>>0:0){if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<j>>>0:0))){h=i;r=46;break}h=Zd(k,i,j,0)|0;r=36;break}h=Zd(k,i,j,0)|0;r=36}while(0);if((r|0)==36?h|0:0)r=46;if((r|0)==46){k=c[g>>2]|0;n=k+1|0;c[g>>2]=n;c[h+(k<<2)>>2]=m;c[h+(n<<2)>>2]=0;c[l>>2]=h;break}if(m){if(c[k+480>>2]|0){Xd(k,m);break}n=m;if((c[k+304>>2]|0)>>>0<=n>>>0?(c[k+308>>2]|0)>>>0>n>>>0:0){n=k+300|0;c[m>>2]=c[n>>2];c[n>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}else g=u+56|0;while(0);c[p>>2]=0;if((c[g>>2]|0)<1){Ra=w;return}if(a[v+165>>0]|0){if(!(mi((c[u+72>>2]|0)+8|0,c[u>>2]|0,u)|0)){c[o>>2]=0;Ra=w;return}g=v+81|0;if(a[g>>0]|0){Ra=w;return}if(a[v+82>>0]|0){Ra=w;return}a[g>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;g=v+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[v+236>>2]|0;if(!g){Ra=w;return}c[g+12>>2]=7;Ra=w;return}if(!f)g=d+180|0;else{g=d+180|0;c[d+184>>2]=(c[f>>2]|0)-(c[g>>2]|0)+(c[f+4>>2]|0)}c[q>>2]=g;j=dd(v,48861,q)|0;h=c[u+72>>2]|0;i=c[v+16>>2]|0;if(!h)m=-1e6;else{g=0;while(1)if((c[i+(g<<4)+12>>2]|0)==(h|0)){m=g;break}else g=g+1|0}p=c[u>>2]|0;q=c[d+88>>2]|0;c[s>>2]=c[i+(m<<4)>>2];c[s+4>>2]=34585;c[s+8>>2]=p;c[s+12>>2]=p;c[s+16>>2]=j;c[s+20>>2]=q;Ak(d,48885,s);do if(j|0){if(c[v+480>>2]|0){Xd(v,j);break}s=j;if((c[v+304>>2]|0)>>>0<=s>>>0?(c[v+308>>2]|0)>>>0>s>>>0:0){s=v+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);k=d+8|0;g=c[k>>2]|0;c:do if(!g){j=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[d+23>>0]=1;d:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))r=78;else{l=0;break c}else{do if((e[j+276>>1]|0)>=224){g=j+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];i=j+284|0;c[i>>2]=(c[i>>2]|0)+1;i=h;break d}g=j+296|0;h=c[g>>2]|0;if(!h){g=j+292|0;break}else{c[g>>2]=c[h>>2];i=j+284|0;c[i>>2]=(c[i>>2]|0)+1;i=h;break d}}else g=j+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;r=78}while(0);if((r|0)==78)i=_d(j,224,0)|0;if(!i)l=0;else{g=i+104|0;h=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[i>>2]=j;g=j+4|0;h=c[g>>2]|0;if(h|0)c[h+4>>2]=i;c[i+8>>2]=h;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=d;c[k>>2]=i;Di(i,61,0,1,0)|0;l=i}}else l=g;while(0);g=c[k>>2]|0;h=(c[c[(c[(c[d>>2]|0)+16>>2]|0)+(m<<4)+12>>2]>>2]|0)+1|0;i=g+108|0;j=c[i>>2]|0;if((c[g+112>>2]|0)>(j|0)){c[i>>2]=j+1;s=c[g+104>>2]|0;a[s+(j*20|0)>>0]=95;b[s+(j*20|0)+2>>1]=0;c[s+(j*20|0)+4>>2]=m;c[s+(j*20|0)+8>>2]=1;c[s+(j*20|0)+12>>2]=h;c[s+(j*20|0)+16>>2]=0;a[s+(j*20|0)+1>>0]=0}else Di(g,95,m,1,h)|0;j=l+108|0;g=c[j>>2]|0;k=l+112|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;h=c[l+104>>2]|0;a[h+(g*20|0)>>0]=-98;g=h+(g*20|0)+1|0;h=g+19|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0))}else Di(l,158,0,0,0)|0;c[t>>2]=c[u>>2];Bk(l,m,dd(v,48973,t)|0);h=d+44|0;i=(c[h>>2]|0)+1|0;c[h>>2]=i;h=c[u>>2]|0;g=c[j>>2]|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;v=c[l+104>>2]|0;a[v+(g*20|0)>>0]=110;b[v+(g*20|0)+2>>1]=0;c[v+(g*20|0)+4>>2]=0;c[v+(g*20|0)+8>>2]=i;c[v+(g*20|0)+12>>2]=0;c[v+(g*20|0)+16>>2]=0;a[v+(g*20|0)+1>>0]=0}else g=Di(l,110,0,i,0)|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){if((g|0)<0)g=(c[j>>2]|0)+-1|0;Ei(l,(c[l+104>>2]|0)+(g*20|0)|0,h,0)}g=c[j>>2]|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;v=c[l+104>>2]|0;a[v+(g*20|0)>>0]=-95;b[v+(g*20|0)+2>>1]=0;c[v+(g*20|0)+4>>2]=m;c[v+(g*20|0)+8>>2]=i;c[v+(g*20|0)+12>>2]=0;c[v+(g*20|0)+16>>2]=0;a[v+(g*20|0)+1>>0]=0;Ra=w;return}else{Di(l,161,m,i,0)|0;Ra=w;return}}function Bj(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;o=s;r=c[b>>2]|0;q=qj(r,g)|0;n=(f|0)!=0;if(n&(q|0)!=0?(j=c[f>>2]|0,(j|0)>0):0){m=0;g=j;do{k=c[f+8+(m<<4)>>2]|0;l=a[q>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0;if(!(l<<24>>24==0|(j|0)!=0)){l=q;do{l=l+1|0;k=k+1|0;t=a[l>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){c[o>>2]=q;cd(b,49e3,o);g=c[f>>2]|0}m=m+1|0}while((m|0)<(g|0))}a:do if(n){g=(c[f>>2]<<4)+24|0;t=f;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<g>>>0:0))){g=f;break}g=Zd(r,f,g,0)|0;break}g=Zd(r,f,g,0)|0}else{b:do if(!r){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](24)|0;p=39;break}k=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;j=59064;g=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&g>>>0>0){t=c[14978]|0;o=Tv(g|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&o>>>0<=t>>>0)&1}g=Wa[c[29340>>2]&127](k)|0;if(!g){g=0;break a}j=Wa[c[29352>>2]&127](g)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[r+272>>2]|0){if(a[r+81>>0]|0){g=0;break a}}else{do if((e[r+276>>1]|0)>=24){j=r+300|0;g=c[j>>2]|0;if(g|0){c[j>>2]=c[g>>2];p=r+284|0;c[p>>2]=(c[p>>2]|0)+1;p=39;break b}j=r+296|0;g=c[j>>2]|0;if(!g){g=r+292|0;break}else{c[j>>2]=c[g>>2];p=r+284|0;c[p>>2]=(c[p>>2]|0)+1;p=39;break b}}else g=r+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(r,24,0)|0;p=39}while(0);if((p|0)==39)if(!g){g=0;break}j=g;k=j+24|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}while(0);if(!(a[r+81>>0]|0)){r=g+8|0;t=c[g>>2]|0;c[r+(t<<4)+8>>2]=i;c[r+(t<<4)+4>>2]=h;c[r+(t<<4)>>2]=q;c[r+(t<<4)+12>>2]=0;c[g>>2]=t+1;t=g;Ra=s;return t|0}if(h|0)ri(r,h);if(i|0)pi(r,i,1);if(!q){t=f;Ra=s;return t|0}if(c[r+480>>2]|0){Xd(r,q);t=f;Ra=s;return t|0}t=q;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){t=r+300|0;c[q>>2]=c[t>>2];c[t>>2]=q;t=f;Ra=s;return t|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);t=f;Ra=s;return t|0}else{t=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);t=f;Ra=s;return t|0}return 0}function Cj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;m=p+8|0;k=p;n=e+4|0;l=c[n>>2]|0;if(!l){Ra=p;return}o=c[b>>2]|0;a:do if(f|0){j=d[208+(d[l>>0]|0)>>0]|0;while(1){h=c[f>>2]|0;i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-j|0;if(!(i<<24>>24==0|(g|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;q=a[h>>0]|0;g=(d[208+(q&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(g|0)!=0))}if(!g)break;f=c[f+32>>2]|0;if(!f)break a}if(!f){Ra=p;return}g=e+8|0;do if(!(c[g>>2]|0)){h=f+12|0;if(c[h>>2]|0?c[e+12>>2]|0:0){f=49047;break}if(!(a[f+19>>0]|0))f=49063;else{f=gk(o,c[f+8>>2]|0,0)|0;c[g>>2]=f;f=c[h>>2]|0;if(f|0){q=gk(o,f,0)|0;c[e+12>>2]=q}f=c[n>>2]|0;do if(f|0){if(o|0){if(c[o+480>>2]|0){Xd(o,f);break}q=f;if((c[o+304>>2]|0)>>>0<=q>>>0?(c[o+308>>2]|0)>>>0>q>>>0:0){q=o+300|0;c[f>>2]=c[q>>2];c[q>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[n>>2]=0;Ra=p;return}}else f=49030;while(0);c[m>>2]=f;c[m+4>>2]=l;cd(b,49083,m);Ra=p;return}while(0);c[k>>2]=l;cd(b,40596,k);Ra=p;return}function Dj(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;l=r;p=(f|0)==0;q=p&1;a:do if((g|0)==82&(i|0)==85)o=4;else{if((g|0)==83)switch(i|0){case 82:case 85:{o=4;break a}default:{}}n=c[d>>2]|0;b:do if(!n){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](92)|0;o=28;break}l=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){s=c[14978]|0;n=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=s>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l)break a;m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0)break a}else{do if((e[n+276>>1]|0)>=92){m=n+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];o=n+284|0;c[o>>2]=(c[o>>2]|0)+1;o=28;break b}m=n+296|0;l=c[m>>2]|0;if(!l){l=n+292|0;break}else{c[m>>2]=c[l>>2];o=n+284|0;c[o>>2]=(c[o>>2]|0)+1;o=28;break b}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(n,92,0)|0;o=28}while(0);if((o|0)==28)if(!l)break;m=l;n=m+92|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));a[l+16>>0]=p?86:f&255;a[l+17>>0]=g;a[l+18>>0]=i;if(!(k<<24>>24))k=(b[(c[d>>2]|0)+76>>1]&2)==0?0:66;a[l+20>>0]=k;a[l+19>>0]=q;s=pn(d,j)|0;c[l+28>>2]=s;s=pn(d,h)|0;c[l+24>>2]=s;s=l;Ra=r;return s|0}while(0);if((o|0)==4)cd(d,49116,l);if(j|0)ni(c[d>>2]|0,j);if(!h){s=0;Ra=r;return s|0}ni(c[d>>2]|0,h);s=0;Ra=r;return s|0}function Ej(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=d+8|0;e=c[i>>2]|0;if(e|0){i=e;return i|0}e=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[e+76>>1]&8)==0:0)a[d+23>>0]=1;h=Yd(e,224,0)|0;if(!h){i=0;return i|0}f=h+104|0;g=f+120|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[h>>2]=e;e=e+4|0;f=c[e>>2]|0;if(f|0)c[f+4>>2]=h;c[h+8>>2]=f;c[h+4>>2]=0;c[e>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[i>>2]=h;Di(h,61,0,1,0)|0;i=h;return i|0}function Fj(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;k=d+108|0;l=c[k>>2]|0;if((c[d+112>>2]|0)>(l|0)){c[k>>2]=l+1;k=c[d+104>>2]|0;a[k+(l*20|0)>>0]=e;b[k+(l*20|0)+2>>1]=0;c[k+(l*20|0)+4>>2]=f;c[k+(l*20|0)+8>>2]=g;c[k+(l*20|0)+12>>2]=h;c[k+(l*20|0)+16>>2]=0;a[k+(l*20|0)+1>>0]=0;gd(d,l,i,j);return l|0}else{l=Di(d,e,f,g,h)|0;gd(d,l,i,j);return l|0}return 0}function Gj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0;p=f+8|0;k=c[p>>2]|0;a:do if(!k){o=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))n=15;else{o=0;break a}else{do if((e[o+276>>1]|0)>=224){k=o+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}k=o+296|0;l=c[k>>2]|0;if(!l){k=o+292|0;break}else{c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;n=15}while(0);if((n|0)==15)m=_d(o,224,0)|0;if(!m)o=0;else{k=m+104|0;l=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[m>>2]=o;k=o+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[p>>2]=m;Di(m,61,0,1,0)|0;o=m}}else o=k;while(0);k=i+28|0;Hj(f,h,c[k>>2]|0,(j|0)==109&1,c[i>>2]|0);if(!(c[i+36>>2]&32)){m=c[k>>2]|0;n=b[i+42>>1]|0;l=o+108|0;k=c[l>>2]|0;if((c[o+112>>2]|0)>(k|0)){c[l>>2]=k+1;f=c[o+104>>2]|0;a[f+(k*20|0)>>0]=j;b[f+(k*20|0)+2>>1]=0;c[f+(k*20|0)+4>>2]=g;c[f+(k*20|0)+8>>2]=m;c[f+(k*20|0)+12>>2]=h;c[f+(k*20|0)+16>>2]=0;a[f+(k*20|0)+1>>0]=0}else k=Di(o,j,g,m,h)|0;if(a[(c[o>>2]|0)+81>>0]|0)return;j=c[o+104>>2]|0;a[j+(k*20|0)+1>>0]=-3;c[j+(k*20|0)+16>>2]=n;return}k=c[i+8>>2]|0;c:do if(!k)k=0;else while(1){i=k+55|0;if(((d[i>>0]|d[i+1>>0]<<8)&3)==2)break c;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);l=c[k+44>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;i=c[o+104>>2]|0;a[i+(n*20|0)>>0]=j;b[i+(n*20|0)+2>>1]=0;c[i+(n*20|0)+4>>2]=g;c[i+(n*20|0)+8>>2]=l;c[i+(n*20|0)+12>>2]=h;c[i+(n*20|0)+16>>2]=0;a[i+(n*20|0)+1>>0]=0}else Di(o,j,g,l,h)|0;m=c[p>>2]|0;l=Ij(f,k)|0;if(!l)return;k=c[m>>2]|0;if(!(a[k+81>>0]|0)){h=c[m+104>>2]|0;j=(c[m+108>>2]|0)+-1|0;a[h+(j*20|0)+1>>0]=-9;c[h+(j*20|0)+16>>2]=l;return}if(c[k+480>>2]|0)return;j=(c[l>>2]|0)+-1|0;c[l>>2]=j;if(j|0)return;k=c[l+12>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,l);return}j=l;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);return}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);return}}function Hj(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;l=c[b+116>>2]|0;l=(l|0)==0?b:l;if((d|0)==1)return;if(!(a[(c[(c[(c[b>>2]|0)+16>>2]|0)+(d<<4)+4>>2]|0)+9>>0]|0))return;r=l+104|0;p=c[r>>2]|0;i=l+108|0;a:do if((p|0)<=0){j=c[i>>2]|0;k=(p<<4)+16|0;n=c[l>>2]|0;m=((k|0)<0)<<31>>31;if(!j){b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))q=21;else{b=l;q=39;break a}else{do if(!(0<m>>>0|(0==(m|0)?(e[n+276>>1]|0)>>>0<k>>>0:0))){j=n+300|0;b=c[j>>2]|0;if(b|0){c[j>>2]=c[b>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}j=n+296|0;b=c[j>>2]|0;if(!b){b=n+292|0;break}else{c[j>>2]=c[b>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else b=n+288|0;while(0);c[b>>2]=(c[b>>2]|0)+1;q=21}while(0);if((q|0)==21)b=_d(n,k,m)|0;c[i>>2]=b;if(!b)b=l;else q=37}else{b=l;o=j;j=k;q=22}}else{j=c[i>>2]|0;b=0;while(1){if((c[j+(b<<4)>>2]|0)==(d|0)?(c[j+(b<<4)+4>>2]|0)==(f|0):0)break;b=b+1|0;if((b|0)>=(p|0)){q=9;break}}if((q|0)==9){k=(p<<4)+16|0;b=l;o=j;n=c[l>>2]|0;m=((k|0)<0)<<31>>31;j=k;q=22;break}r=j+(b<<4)+8|0;a[r>>0]=(a[r>>0]|g)<<24>>24!=0&1;return}while(0);do if((q|0)==22){k=o;l=n+304|0;if(((c[l>>2]|0)>>>0<=k>>>0?(c[n+308>>2]|0)>>>0>k>>>0:0)?!(m>>>0>0|((m|0)==0?j>>>0>(e[n+276>>1]|0)>>>0:0)):0){c[i>>2]=o;b=o;i=p;q=38;break}j=Zd(n,o,j,m)|0;if(j|0){c[i>>2]=j;b=j;q=37;break}if(c[n+480>>2]|0){Xd(n,o);q=39;break}if((c[l>>2]|0)>>>0<=k>>>0?(c[n+308>>2]|0)>>>0>k>>>0:0){q=n+300|0;c[o>>2]=c[q>>2];c[q>>2]=o;q=39;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);q=39;break}else{q=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);q=39;break}}while(0);if((q|0)==37){i=c[r>>2]|0;q=38}else if((q|0)==39)c[i>>2]=0;if((q|0)==38){c[r>>2]=i+1;c[b+(i<<4)>>2]=d;c[b+(i<<4)+4>>2]=f;a[b+(i<<4)+8>>0]=g;c[b+(i<<4)+12>>2]=h;return}c[r>>2]=0;b=c[b>>2]|0;i=b+81|0;if(a[i>>0]|0)return;if(a[b+82>>0]|0)return;a[i>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;r=b+272|0;c[r>>2]=(c[r>>2]|0)+1;b=c[b+236>>2]|0;if(!b)return;c[b+12>>2]=7;return}function Ij(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=b[g+52>>1]|0;r=q&65535;j=b[g+50>>1]|0;s=f+36|0;if(c[s>>2]|0){t=0;return t|0}t=g+55|0;n=c[f>>2]|0;l=r*5|0;k=l+20|0;o=n+272|0;h=(c[o>>2]|0)==0;do if(!((d[t>>0]|d[t+1>>0]<<8)&8)){a:do if(!h)if(!(a[n+81>>0]|0))m=32;else{t=0;return t|0}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<k>>>0:0))){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}i=n+296|0;h=c[i>>2]|0;if(!h){h=n+292|0;break}else{c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;m=32}while(0);if((m|0)==32)h=_d(n,k,0)|0;if(h|0){c[h+16>>2]=h+20+(r<<2);b[h+6>>1]=q;b[h+8>>1]=q;a[h+4>>0]=a[n+78>>0]|0;c[h+12>>2]=n;c[h>>2]=1;gw(h+24|0,0,l+-4|0)|0;p=h;o=h;break}i=n+81|0;if((a[i>>0]|0)==0?(a[n+82>>0]|0)==0:0){a[i>>0]=1;if((c[n+180>>2]|0)>0)c[n+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;i=c[n+236>>2]|0;if(i){c[i+12>>2]=7;m=41}else m=41}else m=41}else{b:do if(!h)if(!(a[n+81>>0]|0))m=13;else{t=0;return t|0}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<k>>>0:0))){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=n+296|0;h=c[i>>2]|0;if(!h){h=n+292|0;break}else{c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;m=13}while(0);if((m|0)==13)h=_d(n,k,0)|0;if(h|0){c[h+16>>2]=h+20+(r<<2);b[h+6>>1]=j;b[h+8>>1]=q;a[h+4>>0]=a[n+78>>0]|0;c[h+12>>2]=n;c[h>>2]=1;gw(h+24|0,0,l+-4|0)|0;p=h;o=h;break}i=n+81|0;if((a[i>>0]|0)==0?(a[n+82>>0]|0)==0:0){a[i>>0]=1;if((c[n+180>>2]|0)>0)c[n+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;i=c[n+236>>2]|0;if(i){c[i+12>>2]=7;m=41}else m=41}else m=41}while(0);if((m|0)==41)if(!h){t=0;return t|0}else{p=h;o=0}if(q<<16>>16){n=g+32|0;l=g+28|0;m=p+16|0;k=0;do{i=c[(c[n>>2]|0)+(k<<2)>>2]|0;do if((i|0)!=34049){h=c[f>>2]|0;j=a[h+78>>0]|0;g=a[h+165>>0]|0;h=Zi(h,j,i,g&255)|0;if(!(g<<24>>24)){if(!h){h=_i(f,j,0,i)|0;break}if(!(c[h+12>>2]|0))h=_i(f,j,h,i)|0}}else h=0;while(0);c[p+20+(k<<2)>>2]=h;a[(c[m>>2]|0)+k>>0]=a[(c[l>>2]|0)+k>>0]|0;k=k+1|0}while((k|0)!=(r|0))}if(!(c[s>>2]|0)){t=p;return t|0}h=d[t>>0]|d[t+1>>0]<<8;if(!(h&256)){s=h|256;a[t>>0]=s;a[t+1>>0]=s>>8;c[f+12>>2]=513}t=(c[p>>2]|0)+-1|0;c[p>>2]=t;if(t|0){t=0;return t|0}h=c[p+12>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,o);t=0;return t|0}t=p;if((c[h+304>>2]|0)>>>0<=t>>>0?(c[h+308>>2]|0)>>>0>t>>>0:0){t=h+300|0;c[p>>2]=c[t>>2];c[t>>2]=o;t=0;return t|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);t=0;return t|0}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);t=0;return t|0}return 0}function Jj(f,i,j){f=f|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+208|0;m=Z+80|0;l=Z+72|0;s=Z+64|0;n=Z+56|0;t=Z+48|0;p=Z+40|0;w=Z+32|0;S=Z;R=Z+144|0;T=Z+140|0;W=Z+136|0;E=Z+84|0;M=f+8|0;Y=c[M>>2]|0;c[T>>2]=0;c[W>>2]=0;if(!Y){j=0;Ra=Z;return j|0}Q=i;a:while(1){if(!Q)v=114;else v=d[Q>>0]|0;u=v&255;switch(u<<24>>24){case -92:{X=6;break a}case -94:{X=12;break a}case -109:{X=36;break a}case -97:{X=37;break a}case -111:{X=40;break a}case 110:{X=80;break a}case 114:{X=87;break a}case -110:{X=90;break a}case -108:{X=127;break a}case -88:{X=138;break a}case 36:{X=139;break a}case -96:case 45:{X=157;break a}case 53:case 52:case 57:case 54:case 55:case 56:{l=0;k=v;X=158;break a}case 105:case 99:case 98:case 103:case 97:case 96:case 104:case 101:case 102:case 100:case 43:case 44:{X=228;break a}case -91:{X=231;break a}case 19:case 107:{X=276;break a}case -89:{X=279;break a}case 51:case 50:{X=284;break a}case -93:{X=296;break a}case -95:{X=299;break a}case -125:case 20:{X=420;break a}case -86:{X=424;break a}case 49:{X=436;break a}case 48:{X=451;break a}case 77:{X=453;break a}case -87:{X=461;break a}case -85:{X=462;break a}case 71:{X=542;break a}case -90:case 106:case -83:break;default:{X=469;break a}}Q=c[Q+12>>2]|0}b:switch(X|0){case 6:{i=c[Q+40>>2]|0;k=c[i+28>>2]|0;l=b[Q+34>>1]|0;if(!(a[i>>0]|0)){j=c[k+(l*24|0)+16>>2]|0;Ra=Z;return j|0}if(a[i+1>>0]|0){m=c[i+8>>2]|0;i=c[k+(l*24|0)+12>>2]|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=90;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=m;c[Y+(l*20|0)+8>>2]=i;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,90,m,i,j)|0;Ra=Z;return j|0}}else X=12;break}case 36:{Kj(f,Q,0,j);Ra=Z;return j|0}case 37:{i=(a[(c[Q+8>>2]|0)+4>>0]|0)==0&1;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=70;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=j;c[Y+(l*20|0)+12>>2]=0;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,70,i,j,0)|0;Ra=Z;return j|0}}case 40:{i=c[Q+8>>2]|0;if(!i){Ra=Z;return j|0}Lg(i,S,(Eu(i)|0)&1073741823,1)|0;l=c[Y>>2]|0;c:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=51;else X=71;else{do if((e[l+276>>1]|0)>=8){i=l+300|0;k=c[i>>2]|0;if(k|0){c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=52;break c}i=l+296|0;k=c[i>>2]|0;if(!k){i=l+292|0;break}else{c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=52;break c}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=51}while(0);if((X|0)==51){k=_d(l,8,0)|0;X=52}do if((X|0)==52)if(k){i=S;W=c[i>>2]|0;i=c[i+4>>2]|0;m=k;f=m;a[f>>0]=W;a[f+1>>0]=W>>8;a[f+2>>0]=W>>16;a[f+3>>0]=W>>24;m=m+4|0;a[m>>0]=i;a[m+1>>0]=i>>8;a[m+2>>0]=i>>16;a[m+3>>0]=i>>24;m=Y+108|0;i=c[m>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;l=c[Y>>2]|0;if(!(a[l+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(i*20|0)+16>>2]=k;a[m>>0]=-13;break}else{Ei(Y,l+(i*20|0)|0,k,-13);break}}if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Y=k;if((c[l+304>>2]|0)>>>0<=Y>>>0?(c[l+308>>2]|0)>>>0>Y>>>0:0){Y=l+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else X=71;while(0);if((X|0)==71){k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[k>>2]|0)+-1|0;k=c[Y+104>>2]|0;if(a[k+(i*20|0)+1>>0]|0)Ei(Y,k+(i*20|0)|0,0,-13)}}Ra=Z;return j|0}case 80:{l=c[Q+8>>2]|0;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=110;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,110,0,j,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}if((i|0)<0)i=(c[k>>2]|0)+-1|0;Ei(Y,(c[Y+104>>2]|0)+(i*20|0)|0,l,0);Ra=Z;return j|0}case 87:{i=Y+108|0;k=c[i>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[i>>2]=k+1;Y=c[Y+104>>2]|0;a[Y+(k*20|0)>>0]=73;b[Y+(k*20|0)+2>>1]=0;c[Y+(k*20|0)+4>>2]=0;c[Y+(k*20|0)+8>>2]=j;c[Y+(k*20|0)+12>>2]=0;c[Y+(k*20|0)+16>>2]=0;a[Y+(k*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,73,0,j,0)|0;Ra=Z;return j|0}}case 90:{q=(c[Q+8>>2]|0)+2|0;p=(Eu(q)|0)&1073741823;r=p+-1|0;k=c[Y>>2]|0;s=(r|0)/2|0;m=s+1|0;n=((m|0)<0)<<31>>31;d:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))X=100;else{m=0;n=1}else{do if(!(0<n>>>0|(0==(n|0)?(e[k+276>>1]|0)>>>0<m>>>0:0))){i=k+300|0;l=c[i>>2]|0;if(l|0){c[i>>2]=c[l>>2];X=k+284|0;c[X>>2]=(c[X>>2]|0)+1;X=101;break d}i=k+296|0;l=c[i>>2]|0;if(!l){i=k+292|0;break}else{c[i>>2]=c[l>>2];X=k+284|0;c[X>>2]=(c[X>>2]|0)+1;X=101;break d}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=100}while(0);if((X|0)==100){l=_d(k,m,n)|0;X=101}if((X|0)==101){k=p+-2|0;if(!l){m=0;n=1}else{if(p>>>0>2){i=0;do{f=a[q+i>>0]|0;X=a[q+(i|1)>>0]|0;a[l+(i>>>1)>>0]=(0-(X>>>6&1)&9)+X&15|(0-(f>>>6&1)&9)+f<<4;i=i+2|0}while((i|0)<(k|0));i=r>>>1}else i=0;a[l+i>>0]=0;m=l;n=0}}l=Y+108|0;i=c[l>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[l>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=75;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=s;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,75,s,j,0)|0;k=c[Y>>2]|0;if(!(a[k+81>>0]|0)){if((i|0)<0)i=(c[l>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(Y,k+(i*20|0)|0,m,-7);Ra=Z;return j|0}if(n){Ra=Z;return j|0}c[k+(i*20|0)+16>>2]=m;a[l>>0]=-7;Ra=Z;return j|0}if(n){Ra=Z;return j|0}if(k|0){if(c[k+480>>2]|0){Xd(k,m);Ra=Z;return j|0}Y=m;if((c[k+304>>2]|0)>>>0<=Y>>>0?(c[k+308>>2]|0)>>>0>Y>>>0:0){Y=k+300|0;c[m>>2]=c[Y>>2];c[Y>>2]=m;Ra=Z;return j|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);Ra=Z;return j|0}else{Y=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);Ra=Z;return j|0}}case 127:{l=Q+32|0;i=b[l>>1]|0;n=Y+108|0;k=c[n>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[n>>2]=k+1;X=c[Y+104>>2]|0;a[X+(k*20|0)>>0]=76;b[X+(k*20|0)+2>>1]=0;c[X+(k*20|0)+4>>2]=i;c[X+(k*20|0)+8>>2]=j;c[X+(k*20|0)+12>>2]=0;c[X+(k*20|0)+16>>2]=0;a[X+(k*20|0)+1>>0]=0}else Di(Y,76,i,j,0)|0;if(!(a[(c[Q+8>>2]|0)+1>>0]|0)){Ra=Z;return j|0}m=c[f+216>>2]|0;k=b[l>>1]|0;e:do if(!m)i=0;else{l=c[m+4>>2]|0;i=2;while(1){if((c[m+(i<<2)>>2]|0)==(k|0))break;i=(c[m+(i+1<<2)>>2]|0)+i|0;if((i|0)>=(l|0)){i=0;break e}}i=m+(i+2<<2)|0}while(0);c[m>>2]=0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}f=c[Y+104>>2]|0;Y=(c[n>>2]|0)+-1|0;a[f+(Y*20|0)+1>>0]=-1;c[f+(Y*20|0)+16>>2]=i;Ra=Z;return j|0}case 138:{j=c[Q+28>>2]|0;Ra=Z;return j|0}case 139:{i=Jj(f,c[Q+12>>2]|0,j)|0;do if((i|0)!=(j|0)){k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;f=c[Y+104>>2]|0;a[f+(l*20|0)>>0]=79;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=i;c[f+(l*20|0)+8>>2]=j;c[f+(l*20|0)+12>>2]=0;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0;break}else{Di(Y,79,i,j,0)|0;break}}while(0);k=c[Q+8>>2]|0;l=a[k>>0]|0;f:do if(!(l<<24>>24))i=67;else{i=67;m=0;do{m=m<<8|d[208+(l&255)>>0];k=k+1|0;g:do if((m|0)<1685026146){if((m|0)<1667785074){switch(m|0){case 1651273570:break;default:{X=152;break g}}switch(i<<24>>24){case 69:case 67:{i=65;break g}default:{X=151;break g}}}if((m|0)<1668050786)switch(m|0){case 1667785074:{i=66;break g}default:{X=152;break g}}else switch(m|0){case 1668050786:{i=66;break g}default:{X=152;break g}}}else{if((m|0)>=1919246700){if((m|0)>=1952807028)switch(m|0){case 1952807028:{i=66;break g}default:{X=152;break g}}switch(m|0){case 1919246700:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}else{X=151;break}}if((m|0)<1718382433){switch(m|0){case 1685026146:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}}else{switch(m|0){case 1718382433:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}}}while(0);if((X|0)==151)X=0;else if((X|0)==152){X=0;if((m&16777215|0)==6909556){i=68;break f}}l=a[k>>0]|0}while(l<<24>>24!=0)}while(0);i=i<<24>>24;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=85;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=j;c[Y+(l*20|0)+8>>2]=i;c[Y+(l*20|0)+12>>2]=0;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,85,j,i,0)|0;Ra=Z;return j|0}}case 157:{l=128;k=(v|0)==45?53:52;X=158;break}case 228:{m=Lj(f,c[Q+12>>2]|0,T)|0;i=Lj(f,c[Q+16>>2]|0,W)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=u;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=m;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;m=j;break}else{Di(Y,v,i,m,j)|0;m=j;break}}case 231:{k=Q+12|0;i=c[k>>2]|0;switch(a[i>>0]|0){case -109:{Kj(f,i,1,j);Ra=Z;return j|0}case -111:{i=c[i+8>>2]|0;if(!i){Ra=Z;return j|0}Lg(i,S,(Eu(i)|0)&1073741823,1)|0;o=-+g[S>>3];g[S>>3]=o;l=c[Y>>2]|0;h:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=244;else X=264;else{do if((e[l+276>>1]|0)>=8){i=l+300|0;k=c[i>>2]|0;if(k|0){c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=245;break h}i=l+296|0;k=c[i>>2]|0;if(!k){i=l+292|0;break}else{c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=245;break h}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=244}while(0);if((X|0)==244){k=_d(l,8,0)|0;X=245}do if((X|0)==245)if(k){g[h>>3]=o;a[k>>0]=a[h>>0];a[k+1>>0]=a[h+1>>0];a[k+2>>0]=a[h+2>>0];a[k+3>>0]=a[h+3>>0];a[k+4>>0]=a[h+4>>0];a[k+5>>0]=a[h+5>>0];a[k+6>>0]=a[h+6>>0];a[k+7>>0]=a[h+7>>0];m=Y+108|0;i=c[m>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;l=c[Y>>2]|0;if(!(a[l+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(i*20|0)+16>>2]=k;a[m>>0]=-13;break}else{Ei(Y,l+(i*20|0)|0,k,-13);break}}if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Y=k;if((c[l+304>>2]|0)>>>0<=Y>>>0?(c[l+308>>2]|0)>>>0>Y>>>0:0){Y=l+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else X=264;while(0);if((X|0)==264){k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[k>>2]|0)+-1|0;k=c[Y+104>>2]|0;if(a[k+(i*20|0)+1>>0]|0)Ei(Y,k+(i*20|0)|0,0,-13)}}Ra=Z;return j|0}default:{a[E>>0]=-109;c[E+4>>2]=17408;c[E+8>>2]=0;m=Lj(f,E,T)|0;i=Lj(f,c[k>>2]|0,W)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=101;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=m;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;m=j;break b}else{Di(Y,101,i,m,j)|0;m=j;break b}}}}case 276:{i=Lj(f,c[Q+12>>2]|0,T)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[Y+104>>2]|0;a[m+(l*20|0)>>0]=u;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=i;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;m=j;break}else{Di(Y,v,i,j,0)|0;m=j;break}}case 279:{l=Lj(f,c[Q+12>>2]|0,T)|0;n=(a[(c[(c[Q+16>>2]|0)+8>>2]|0)+4>>0]|0)==0;m=(n^1)&1;n=(n^(a[Q+38>>0]|0)==45)&1;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=88;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=l;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=m;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else i=Di(Y,88,l,j,m)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){m=c[Y+104>>2]|0;a[m+(i*20|0)+1>>0]=-3;c[m+(i*20|0)+16>>2]=n;m=j}else m=j;break}case 284:{k=Y+108|0;i=c[k>>2]|0;m=Y+112|0;if((c[m>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=70;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=1;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,70,1,j,0)|0;i=Lj(f,c[Q+12>>2]|0,T)|0;l=c[k>>2]|0;if((c[m>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[Y+104>>2]|0;a[S+(l*20|0)>>0]=u;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=0;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else l=Di(Y,v,i,0,0)|0;i=c[k>>2]|0;if((c[m>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=70;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=0;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,70,0,j,0)|0;k=c[k>>2]|0;if(!(a[(c[Y>>2]|0)+81>>0]|0))i=(c[Y+104>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else i=59308;c[i+8>>2]=k;m=j;break}case 296:{i=c[Q+40>>2]|0;if(!i){c[p>>2]=c[Q+8>>2];cd(f,38820,p);m=j;break}j=c[(c[i+40>>2]|0)+(b[Q+34>>1]<<4)+8>>2]|0;Ra=Z;return j|0}case 299:{x=c[f>>2]|0;k=a[x+78>>0]|0;w=Q+4|0;i=c[w>>2]|0;if(i&16777216|0){j=c[(c[Q+44>>2]|0)+52>>2]|0;Ra=Z;return j|0}do if(a[f+23>>0]|0){R=S+20|0;a[R>>0]=2;c[S+4>>2]=127;c[S+8>>2]=128;c[S+24>>2]=0;_j(S,Q)|0;if(!(a[R>>0]|0)){i=c[w>>2]|0;break}j=Nj(f,Q,-1)|0;Ra=Z;return j|0}while(0);if((i&16384|0)==0?(r=c[Q+20>>2]|0,(r|0)!=0):0){A=r;B=c[r>>2]|0;s=1}else{A=0;B=0;s=0}i=c[Q+8>>2]|0;v=Jd(x,i,B,k,0)|0;if(v|0?(c[v+20>>2]|0)==0:0){t=v+4|0;i=c[t>>2]|0;if(i&512|0){i=f+56|0;t=c[i>>2]|0;s=t+-1|0;c[i>>2]=s;i=c[A+4>>2]|0;do if(i){if((a[i>>0]|0)!=-88){z=Jj(f,i,j)|0;X=319;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(m,78,i,j,0)|0;break}}else{z=Jj(f,0,j)|0;X=319}while(0);do if(((X|0)==319?(z|0)!=(j|0):0)?(y=c[M>>2]|0,y|0):0){i=y+108|0;k=c[i>>2]|0;if((c[y+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[y+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=z;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(y,79,z,j,0)|0;break}}while(0);if((B|0)>1){p=Y+108|0;q=Y+112|0;r=Y+104|0;n=1;do{i=c[p>>2]|0;if((c[q>>2]|0)>(i|0)){c[p>>2]=i+1;S=c[r>>2]|0;a[S+(i*20|0)>>0]=51;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=j;c[S+(i*20|0)+8>>2]=s;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,51,j,s,0)|0;i=c[A+4+(n*20|0)>>2]|0;do if(i){if((a[i>>0]|0)!=-88){D=Jj(f,i,j)|0;X=336;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(m,78,i,j,0)|0;break}}else{D=Jj(f,0,j)|0;X=336}while(0);do if(((X|0)==336?(X=0,(D|0)!=(j|0)):0)?(C=c[M>>2]|0,C|0):0){i=C+108|0;k=c[i>>2]|0;if((c[C+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[C+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=D;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(C,79,D,j,0)|0;break}}while(0);n=n+1|0}while((n|0)!=(B|0))}k=c[Y+12>>2]|0;i=0-t|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);m=j;break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[Y+108>>2];m=j;break}}if(i&1024|0){j=Jj(f,c[A+4>>2]|0,j)|0;Ra=Z;return j|0}if((B|0)>0){m=S+20|0;p=S+4|0;q=S+8|0;r=S+24|0;i=0;n=0;l=0;do{if(l>>>0<32){k=c[A+4+(l*20|0)>>2]|0;a[m>>0]=1;c[p>>2]=127;c[q>>2]=128;c[r>>2]=0;if(!k)k=1<<l;else{_j(S,k)|0;k=(a[m>>0]|0)==0?0:1<<l}i=k|i}if(!((n|0)!=0|(c[t>>2]&32|0)==0))n=Yi(f,c[A+4+(l*20|0)>>2]|0)|0;l=l+1|0}while((l|0)!=(B|0));u=i}else{u=0;n=0}if(s){do if(!u)if((B|0)==1){i=f+19|0;k=a[i>>0]|0;if(!(k<<24>>24)){W=f+44|0;l=(c[W>>2]|0)+1|0;c[W>>2]=l;break}else{l=k+-1<<24>>24;a[i>>0]=l;l=c[f+148+((l&255)<<2)>>2]|0;break}}else{i=f+32|0;l=c[i>>2]|0;k=f+28|0;m=c[k>>2]|0;if((m|0)<(B|0)){W=f+44|0;l=c[W>>2]|0;c[W>>2]=l+B;l=l+1|0;break}else{c[i>>2]=l+B;c[k>>2]=m-B;break}}else{W=f+44|0;l=c[W>>2]|0;c[W>>2]=l+B;l=l+1|0}while(0);i=c[t>>2]&192;i:do if(i|0){k=c[A+4>>2]|0;switch(a[k>>0]|0){case -92:case -94:break;default:break i}a[k+38>>0]=i}while(0);Oj(f,A,l,0,3);r=l}else r=0;if((B|0)>1)if(!(c[w>>2]&128))X=375;else{i=A+24|0;X=376}else if((B|0)==1)X=375;else q=v;if((X|0)==375){i=A+4|0;X=376}if((X|0)==376)q=Pj(x,v,B,c[i>>2]|0)|0;do if(c[q+4>>2]&32){if(!n)n=c[x+8>>2]|0;p=Y+108|0;i=c[p>>2]|0;k=Y+112|0;if((c[k>>2]|0)>(i|0)){c[p>>2]=i+1;l=c[Y+104>>2]|0;a[l+(i*20|0)>>0]=82;l=l+(i*20|0)+1|0;m=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0))}else i=Di(Y,82,0,0,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[p>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(a[m>>0]|0){Ei(Y,l+(i*20|0)|0,n,-2);break}if(!n)break;c[l+(i*20|0)+16>>2]=n;a[m>>0]=-2}}else{p=Y+108|0;k=Y+112|0}while(0);l=(c[f+52>>2]|0)==0?63:62;i=c[p>>2]|0;if((c[k>>2]|0)>(i|0)){c[p>>2]=i+1;X=c[Y+104>>2]|0;a[X+(i*20|0)>>0]=l;b[X+(i*20|0)+2>>1]=0;c[X+(i*20|0)+4>>2]=u;c[X+(i*20|0)+8>>2]=r;c[X+(i*20|0)+12>>2]=j;c[X+(i*20|0)+16>>2]=0;a[X+(i*20|0)+1>>0]=0}else i=Di(Y,l,u,r,j)|0;k=c[Y>>2]|0;j:do if(!(a[k+81>>0]|0)){if((i|0)<0)i=(c[p>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(Y,k+(i*20|0)|0,q,-8);break}if(q|0){c[k+(i*20|0)+16>>2]=q;a[l>>0]=-8}}else if(c[q+4>>2]&16|0){do if(k|0){if(c[k+480>>2]|0){Xd(k,q);break j}i=q;if((c[k+304>>2]|0)>>>0>i>>>0)break;if((c[k+308>>2]|0)>>>0<=i>>>0)break;X=k+300|0;c[q>>2]=c[X>>2];c[X>>2]=q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{X=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-X;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);i=c[p>>2]|0;if((i|0)>0)b[(c[Y+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=B&255;if(!((B|0)!=0&(u|0)==0)){Ra=Z;return j|0}if((B|0)!=1){i=f+28|0;if((c[i>>2]|0)>=(B|0)){Ra=Z;return j|0}c[i>>2]=B;c[f+32>>2]=r;Ra=Z;return j|0}if(!r){Ra=Z;return j|0}i=f+19|0;k=a[i>>0]|0;if((k&255)>=8){Ra=Z;return j|0}a[i>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=r;Ra=Z;return j|0}c[t>>2]=i;cd(f,38846,t);m=j;break}case 420:{if((v|0)==131?(k=c[c[c[Q+20>>2]>>2]>>2]|0,(k|0)!=1):0){c[n>>2]=k;c[n+4>>2]=1;cd(f,39001,n);m=j;break}j=Qj(f,Q)|0;Ra=Z;return j|0}case 424:{m=Q+12|0;i=c[m>>2]|0;if(!(c[i+28>>2]|0)){j=Qj(f,i)|0;i=c[m>>2]|0;c[i+28>>2]=j}l=c[Q+28>>2]|0;if(l){k=a[i>>0]|0;if(k<<24>>24==-88)k=a[i+38>>0]|0;switch(k<<24>>24){case -87:{k=i+20|0;X=432;break}case -125:{k=c[i+20>>2]|0;X=432;break}default:k=1}if((X|0)==432)k=c[c[k>>2]>>2]|0;if((l|0)!=(k|0)){c[s>>2]=l;c[s+4>>2]=k;cd(f,38869,s);i=c[m>>2]|0}}j=(c[i+28>>2]|0)+(b[Q+32>>1]|0)|0;Ra=Z;return j|0}case 436:{p=f+56|0;n=c[p>>2]|0;i=n+-2|0;c[p>>2]=i;p=Y+108|0;k=c[p>>2]|0;m=Y+112|0;if((c[m>>2]|0)>(k|0)){c[p>>2]=k+1;X=c[Y+104>>2]|0;a[X+(k*20|0)>>0]=73;b[X+(k*20|0)+2>>1]=0;c[X+(k*20|0)+4>>2]=0;c[X+(k*20|0)+8>>2]=j;c[X+(k*20|0)+12>>2]=0;c[X+(k*20|0)+16>>2]=0;a[X+(k*20|0)+1>>0]=0}else Di(Y,73,0,j,0)|0;Rj(f,Q,n+-1|0,i);i=c[p>>2]|0;if((c[m>>2]|0)>(i|0)){c[p>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=70;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=1;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(Y,70,1,j,0)|0;l=Y+12|0;i=c[l>>2]|0;k=0-n|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,Y,k);else c[(c[i+64>>2]|0)+(k<<2)>>2]=c[p>>2];i=c[p>>2]|0;if((c[m>>2]|0)>(i|0)){c[p>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=83;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=j;c[f+(i*20|0)+8>>2]=0;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(Y,83,j,0,0)|0;k=c[l>>2]|0;i=1-n|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);Ra=Z;return j|0}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[p>>2];Ra=Z;return j|0}}case 451:{Sj(f,c[Q+12>>2]|0,c[Q+20>>2]|0,j,0,0);Ra=Z;return j|0}case 453:{m=c[Q+44>>2]|0;k=G((b[m+42>>1]|0)+1|0,c[Q+28>>2]|0)|0;i=Q+32|0;k=(b[i>>1]|0)+1+k|0;n=Y+108|0;l=c[n>>2]|0;p=Y+112|0;if((c[p>>2]|0)>(l|0)){c[n>>2]=l+1;S=c[Y+104>>2]|0;a[S+(l*20|0)>>0]=-107;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=k;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else Di(Y,149,k,j,0)|0;S=b[i>>1]|0;if(S<<16>>16>-1?(a[(c[m+4>>2]|0)+(S<<16>>16<<4)+13>>0]|0)==69:0){i=c[n>>2]|0;if((c[p>>2]|0)>(i|0)){c[n>>2]=i+1;m=c[Y+104>>2]|0;a[m+(i*20|0)>>0]=84;b[m+(i*20|0)+2>>1]=0;c[m+(i*20|0)+4>>2]=j;c[m+(i*20|0)+8>>2]=0;c[m+(i*20|0)+12>>2]=0;c[m+(i*20|0)+16>>2]=0;a[m+(i*20|0)+1>>0]=0;m=j;break}else{Di(Y,84,j,0,0)|0;m=j;break}}else m=j;break}case 461:{cd(f,38899,l);m=j;break}case 462:{i=c[Q+28>>2]|0;l=Y+108|0;k=c[l>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[l>>2]=k+1;S=c[Y+104>>2]|0;a[S+(k*20|0)>>0]=21;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=i;c[S+(k*20|0)+8>>2]=0;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else k=Di(Y,21,i,0,0)|0;m=Jj(f,c[Q+12>>2]|0,j)|0;i=c[l>>2]|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){j=(k|0)<0?i+-1|0:k;Y=c[Y+104>>2]|0;c[Y+(j*20|0)+8>>2]=i;i=Y+(j*20|0)|0}else{c[14829]=i;i=59308}c[i+12>>2]=m;break}case 469:{C=c[Q+20>>2]|0;D=c[C>>2]|0;F=f+56|0;I=c[F>>2]|0;H=I+-1|0;c[F>>2]=H;i=c[Q+12>>2]|0;z=(i|0)!=0;if(z){l=E;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k=c[i+4>>2]|0;ew(E|0,i|0,((k&16384|0)==0?((k&8192|0)==0?52:28):12)|0)|0;k=a[E>>0]|0;y=E+38|0;switch((k<<24>>24==-88?a[y>>0]|0:k)<<24>>24){case -87:{l=c[E+20>>2]|0;i=l;X=473;break}case -125:{l=c[E+20>>2]|0;i=c[l>>2]|0;X=473;break}default:X=474}k:do if((X|0)==473){x=c[i>>2]|0;if((x|0)!=1){c[T>>2]=0;if(k<<24>>24==-125){i=Qj(f,E)|0;break}Q=f+44|0;P=c[Q>>2]|0;i=P+1|0;c[Q>>2]=P+x;if((x|0)>0){r=E+20|0;s=f+23|0;t=S+20|0;u=S+4|0;v=S+8|0;w=S+24|0;k=0;while(1){l=c[l+4+(k*20|0)>>2]|0;q=k+i|0;do if(!(a[s>>0]|0))if(!l){B=Jj(f,0,q)|0;X=491}else X=485;else{a[t>>0]=2;c[u>>2]=127;c[v>>2]=128;c[w>>2]=0;if(l){_j(S,l)|0;if(!(a[t>>0]|0)){X=485;break}}Nj(f,l,q)|0}while(0);do if((X|0)==485){X=0;if((a[l>>0]|0)!=-88){B=Jj(f,l,q)|0;X=491;break}p=c[M>>2]|0;l=c[l+28>>2]|0;m=p+108|0;n=c[m>>2]|0;if((c[p+112>>2]|0)>(n|0)){c[m>>2]=n+1;Q=c[p+104>>2]|0;a[Q+(n*20|0)>>0]=78;b[Q+(n*20|0)+2>>1]=0;c[Q+(n*20|0)+4>>2]=l;c[Q+(n*20|0)+8>>2]=q;c[Q+(n*20|0)+12>>2]=0;c[Q+(n*20|0)+16>>2]=0;a[Q+(n*20|0)+1>>0]=0;break}else{Di(p,78,l,q,0)|0;break}}while(0);do if(((X|0)==491?(X=0,(B|0)!=(q|0)):0)?(A=c[M>>2]|0,A|0):0){l=A+108|0;m=c[l>>2]|0;if((c[A+112>>2]|0)>(m|0)){c[l>>2]=m+1;Q=c[A+104>>2]|0;a[Q+(m*20|0)>>0]=79;b[Q+(m*20|0)+2>>1]=0;c[Q+(m*20|0)+4>>2]=B;c[Q+(m*20|0)+8>>2]=q;c[Q+(m*20|0)+12>>2]=0;c[Q+(m*20|0)+16>>2]=0;a[Q+(m*20|0)+1>>0]=0;break}else{Di(A,79,B,q,0)|0;break}}while(0);k=k+1|0;if((k|0)==(x|0))break k;l=c[r>>2]|0}}}else X=474}while(0);if((X|0)==474)i=Lj(f,E,T)|0;a[y>>0]=a[E>>0]|0;a[E>>0]=-88;c[E+28>>2]=i;l=E+4|0;c[l>>2]=c[l>>2]&-4097;l=R;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));a[R>>0]=53;c[R+12>>2]=E;c[T>>2]=0;i=R}else i=0;w=D+-1|0;if((D|0)>1){r=R+16|0;s=Y+108|0;t=Y+112|0;u=Y+104|0;v=Y+12|0;q=0;do{k=c[C+4+(q*20|0)>>2]|0;if(z)c[r>>2]=k;else i=k;p=c[F>>2]|0;k=p+-1|0;c[F>>2]=k;Tj(f,i,k,16);k=c[C+4+((q|1)*20|0)>>2]|0;do if(k){if((a[k>>0]|0)!=-88){K=Jj(f,k,j)|0;X=510;break}n=c[M>>2]|0;k=c[k+28>>2]|0;l=n+108|0;m=c[l>>2]|0;if((c[n+112>>2]|0)>(m|0)){c[l>>2]=m+1;S=c[n+104>>2]|0;a[S+(m*20|0)>>0]=78;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=k;c[S+(m*20|0)+8>>2]=j;c[S+(m*20|0)+12>>2]=0;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0;break}else{Di(n,78,k,j,0)|0;break}}else{K=Jj(f,0,j)|0;X=510}while(0);do if(((X|0)==510?(X=0,(K|0)!=(j|0)):0)?(J=c[M>>2]|0,J|0):0){k=J+108|0;l=c[k>>2]|0;if((c[J+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[J+104>>2]|0;a[S+(l*20|0)>>0]=79;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=K;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(J,79,K,j,0)|0;break}}while(0);k=c[s>>2]|0;if((c[t>>2]|0)>(k|0)){c[s>>2]=k+1;S=c[u>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=H;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(Y,11,0,H,0)|0;l=c[v>>2]|0;k=0-p|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Y,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[s>>2];q=q+2|0}while((q|0)<(w|0))}l:do if(!(D&1)){i=Y+108|0;k=c[i>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[Y+104>>2]|0;a[S+(k*20|0)>>0]=73;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(Y,73,0,j,0)|0;break}}else{i=c[C+4+(w*20|0)>>2]|0;do if(i){if((a[i>>0]|0)!=-88){l=Jj(f,i,j)|0;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break l}else{Di(m,78,i,j,0)|0;break l}}else l=Jj(f,0,j)|0;while(0);if((l|0)!=(j|0)?(L=c[M>>2]|0,L|0):0){i=L+108|0;k=c[i>>2]|0;if((c[L+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[L+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=l;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(L,79,l,j,0)|0;break}}}while(0);k=c[Y+12>>2]|0;i=0-I|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,Y,i);else c[(c[k+64>>2]|0)+(i<<2)>>2]=c[Y+108>>2];m=j;break}case 542:{if(!(c[f+120>>2]|0)){cd(f,38917,m);j=0;Ra=Z;return j|0}i=a[Q+1>>0]|0;switch(i<<24>>24){case 2:{Y=c[f+116>>2]|0;a[((Y|0)==0?f:Y)+21>>0]=1;break}case 4:{l=c[Q+8>>2]|0;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=69;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=0;c[S+(i*20|0)+8>>2]=4;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else i=Di(Y,69,0,4,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){m=j;break b}if((i|0)<0)i=(c[k>>2]|0)+-1|0;Ei(Y,(c[Y+104>>2]|0)+(i*20|0)|0,l,0);m=j;break b}default:{}}Uj(f,1811,i<<24>>24,c[Q+8>>2]|0,0,0);m=j;break}}if((X|0)==12){i=c[Q+28>>2]|0;if(!(c[Q+4>>2]&8)){do if((i|0)<0){i=c[f+52>>2]|0;if((i|0)>=0){i=i+-1|0;break}j=(b[Q+32>>1]|0)-i|0;Ra=Z;return j|0}while(0);k=a[Q+38>>0]|0;Vj(Y,c[Q+44>>2]|0,i,b[Q+32>>1]|0,j);if(!(k<<24>>24)){Ra=Z;return j|0}i=c[Y+108>>2]|0;if((i|0)<=0){Ra=Z;return j|0}b[(c[Y+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=k&255;Ra=Z;return j|0}m=Jj(f,c[Q+12>>2]|0,j)|0;i=b[Q+32>>1]|0;if(i<<16>>16>-1){i=a[(c[(c[Q+44>>2]|0)+4>>2]|0)+(i<<16>>16<<4)+13>>0]|0;if(i<<24>>24==65){j=m;Ra=Z;return j|0}else l=i<<24>>24}else l=68;n=Y+108|0;do if((m|0)!=(j|0)){i=c[n>>2]|0;k=Y+112|0;if((c[k>>2]|0)>(i|0)){c[n>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=79;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=m;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0;break}else{Di(Y,79,m,j,0)|0;break}}else k=Y+112|0;while(0);m=38812+((l<<1)+-132)|0;i=c[n>>2]|0;if((c[k>>2]|0)>(i|0)){c[n>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=91;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=j;c[f+(i*20|0)+8>>2]=1;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,91,j,1,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}if((i|0)<0)i=(c[n>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(i*20|0)+16>>2]=m;a[l>>0]=-1;Ra=Z;return j|0}else{Ei(Y,k+(i*20|0)|0,m,-1);Ra=Z;return j|0}}do if((X|0)==158){N=c[Q+12>>2]|0;n=a[N>>0]|0;m=n<<24>>24==-88;if(m)i=a[N+38>>0]|0;else i=n;switch(i<<24>>24){case -87:{q=N+20|0;X=163;break}case -125:{q=c[N+20>>2]|0;X=163;break}default:{}}if((X|0)==163?(c[c[q>>2]>>2]|0)>=2:0){M=k&255;p=l&255;L=c[Q+16>>2]|0;if(m)i=a[N+38>>0]|0;else i=n;switch(i<<24>>24){case -87:{i=N+20|0;X=169;break}case -125:{i=c[N+20>>2]|0;X=169;break}default:l=1}if((X|0)==169)l=c[c[i>>2]>>2]|0;i=f+56|0;K=c[i>>2]|0;J=K+-1|0;c[i>>2]=J;i=a[L>>0]|0;if(i<<24>>24==-88)k=a[L+38>>0]|0;else k=i;switch(k<<24>>24){case -87:{k=L+20|0;X=175;break}case -125:{k=c[L+20>>2]|0;X=175;break}default:k=1}if((X|0)==175)k=c[c[k>>2]>>2]|0;if((l|0)!=(k|0)){cd(f,38899,w);m=j;break}k=M<<24>>24==55?56:M;if(n<<24>>24==-125){H=Qj(f,N)|0;i=a[L>>0]|0}else H=0;if(i<<24>>24==-125)t=Qj(f,L)|0;else t=0;u=N+38|0;v=N+20|0;w=N+28|0;x=N+20|0;y=L+38|0;z=L+20|0;A=L+28|0;B=L+20|0;C=f+19|0;D=l+-1|0;I=Y+108|0;E=Y+112|0;F=Y+104|0;s=l+-2|0;i=p|32;r=0;k=k<<24>>24==57?54:k;while(1){c[S>>2]=0;c[R>>2]=0;switch(a[N>>0]|0){case -88:{m=a[u>>0]|0;switch(m<<24>>24){case -87:{l=x;X=186;break}case -125:{l=c[v>>2]|0;X=186;break}default:l=N}do if((X|0)==186){X=0;if((c[c[l>>2]>>2]|0)>=2)if(m<<24>>24==-125){l=c[(c[c[v>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}else{l=c[(c[x>>2]|0)+4+(r*20|0)>>2]|0;break}else l=N}while(0);p=(c[w>>2]|0)+r|0;break}case -125:{p=r+H|0;l=c[(c[c[v>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}default:{l=c[(c[v>>2]|0)+4+(r*20|0)>>2]|0;p=Lj(f,l,S)|0}}switch(a[L>>0]|0){case -88:{n=a[y>>0]|0;switch(n<<24>>24){case -87:{m=B;X=196;break}case -125:{m=c[z>>2]|0;X=196;break}default:m=L}do if((X|0)==196){X=0;if((c[c[m>>2]>>2]|0)>=2)if(n<<24>>24==-125){m=c[(c[c[z>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}else{m=c[(c[B>>2]|0)+4+(r*20|0)>>2]|0;break}else m=L}while(0);n=(c[A>>2]|0)+r|0;break}case -125:{n=r+t|0;m=c[(c[c[z>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}default:{m=c[(c[z>>2]|0)+4+(r*20|0)>>2]|0;n=Lj(f,m,R)|0}}q=i&255;Mj(f,l,m,k&255,p,n,j,q);l=c[S>>2]|0;if(l|0?(O=a[C>>0]|0,(O&255)<8):0){a[C>>0]=O+1<<24>>24;c[f+148+((O&255)<<2)>>2]=l}l=c[R>>2]|0;if(l|0?(P=a[C>>0]|0,(P&255)<8):0){a[C>>0]=P+1<<24>>24;c[f+148+((P&255)<<2)>>2]=l}if((r|0)==(D|0))break;switch(k<<24>>24){case 53:{i=c[I>>2]|0;if((c[E>>2]|0)>(i|0)){c[I>>2]=i+1;Q=c[F>>2]|0;a[Q+(i*20|0)>>0]=20;b[Q+(i*20|0)+2>>1]=0;c[Q+(i*20|0)+4>>2]=j;c[Q+(i*20|0)+8>>2]=J;c[Q+(i*20|0)+12>>2]=0;c[Q+(i*20|0)+16>>2]=0;a[Q+(i*20|0)+1>>0]=0}else Di(Y,20,j,J,0)|0;i=(q|8)&255;k=53;break}case 52:{i=c[I>>2]|0;if((c[E>>2]|0)>(i|0)){c[I>>2]=i+1;Q=c[F>>2]|0;a[Q+(i*20|0)>>0]=18;b[Q+(i*20|0)+2>>1]=0;c[Q+(i*20|0)+4>>2]=j;c[Q+(i*20|0)+8>>2]=J;c[Q+(i*20|0)+12>>2]=0;c[Q+(i*20|0)+16>>2]=0;a[Q+(i*20|0)+1>>0]=0}else Di(Y,18,j,J,0)|0;i=(q|8)&255;k=52;break}default:{l=c[I>>2]|0;if((c[E>>2]|0)>(l|0)){c[I>>2]=l+1;Q=c[F>>2]|0;a[Q+(l*20|0)>>0]=58;b[Q+(l*20|0)+2>>1]=0;c[Q+(l*20|0)+4>>2]=0;c[Q+(l*20|0)+8>>2]=J;c[Q+(l*20|0)+12>>2]=0;c[Q+(l*20|0)+16>>2]=0;a[Q+(l*20|0)+1>>0]=0}else Di(Y,58,0,J,0)|0;k=(r|0)==(s|0)?M:k}}r=r+1|0}k=c[Y+12>>2]|0;i=0-K|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);m=j;break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[I>>2];m=j;break}}Y=Lj(f,N,T)|0;X=Q+16|0;m=Lj(f,c[X>>2]|0,W)|0;Mj(f,N,c[X>>2]|0,k,Y,m,j,l|32);m=j}while(0);i=c[T>>2]|0;if(i|0?(U=f+19|0,V=a[U>>0]|0,(V&255)<8):0){a[U>>0]=V+1<<24>>24;c[f+148+((V&255)<<2)>>2]=i}i=c[W>>2]|0;if(!i){j=m;Ra=Z;return j|0}k=f+19|0;l=a[k>>0]|0;if((l&255)>=8){j=m;Ra=Z;return j|0}a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=i;j=m;Ra=Z;return j|0}function Kj(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+32|0;s=w+16|0;u=w+8|0;n=w;v=c[f+8>>2]|0;if(c[h+4>>2]&1024|0){l=c[h+8>>2]|0;l=(i|0)==0?l:0-l|0;h=v+108|0;k=c[h>>2]|0;if((c[v+112>>2]|0)>(k|0)){c[h>>2]=k+1;v=c[v+104>>2]|0;a[v+(k*20|0)>>0]=70;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=l;c[v+(k*20|0)+8>>2]=j;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0;Ra=w;return}else{Di(v,70,l,j,0)|0;Ra=w;return}}q=c[h+8>>2]|0;h=Vd(q,n)|0;r=(i|0)!=0;do if(!((h|0)==2|(r|(h|0)!=3)^1)?(o=n,m=c[o>>2]|0,o=c[o+4>>2]|0,!(r&((m|0)==0&(o|0)==-2147483648))):0){if(r){h=(h|0)==3;m=Tv(0,0,m|0,o|0)|0;o=L()|0;m=h?0:m;o=h?-2147483648:o;c[n>>2]=m;c[n+4>>2]=o}n=c[v>>2]|0;a:do if(c[n+272>>2]|0){if(!(a[n+81>>0]|0))t=68}else{do if((e[n+276>>1]|0)>=8){h=n+300|0;l=c[h>>2]|0;if(l|0){c[h>>2]=c[l>>2];t=n+284|0;c[t>>2]=(c[t>>2]|0)+1;t=69;break a}h=n+296|0;l=c[h>>2]|0;if(!l){h=n+292|0;break}else{c[h>>2]=c[l>>2];t=n+284|0;c[t>>2]=(c[t>>2]|0)+1;t=69;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;t=68}while(0);if((t|0)==68){l=_d(n,8,0)|0;t=69}if((t|0)==69?l|0:0){n=l;h=n;a[h>>0]=m;a[h+1>>0]=m>>8;a[h+2>>0]=m>>16;a[h+3>>0]=m>>24;n=n+4|0;a[n>>0]=o;a[n+1>>0]=o>>8;a[n+2>>0]=o>>16;a[n+3>>0]=o>>24;n=v+108|0;h=c[n>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[n>>2]=h+1;o=c[v+104>>2]|0;a[o+(h*20|0)>>0]=71;b[o+(h*20|0)+2>>1]=0;c[o+(h*20|0)+4>>2]=0;c[o+(h*20|0)+8>>2]=j;c[o+(h*20|0)+12>>2]=0;c[o+(h*20|0)+16>>2]=0;a[o+(h*20|0)+1>>0]=0}else h=Di(v,71,0,j,0)|0;m=c[v>>2]|0;if(!(a[m+81>>0]|0)){if((h|0)<0)h=(c[n>>2]|0)+-1|0;m=c[v+104>>2]|0;n=m+(h*20|0)+1|0;if(!(a[n>>0]|0)){c[m+(h*20|0)+16>>2]=l;a[n>>0]=-14;break}else{Ei(v,m+(h*20|0)|0,l,-14);break}}if(m|0){if(c[m+480>>2]|0){Xd(m,l);break}o=l;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[l>>2]=c[o>>2];c[o>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}l=v+108|0;h=c[l>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[l>>2]=h+1;o=c[v+104>>2]|0;a[o+(h*20|0)>>0]=71;b[o+(h*20|0)+2>>1]=0;c[o+(h*20|0)+4>>2]=0;c[o+(h*20|0)+8>>2]=j;c[o+(h*20|0)+12>>2]=0;c[o+(h*20|0)+16>>2]=0;a[o+(h*20|0)+1>>0]=0}else h=Di(v,71,0,j,0)|0;if(!(a[(c[v>>2]|0)+81>>0]|0)){if((h|0)<0)h=(c[l>>2]|0)+-1|0;l=c[v+104>>2]|0;if(a[l+(h*20|0)+1>>0]|0)Ei(v,l+(h*20|0)|0,0,-14)}}else t=7;while(0);do if((t|0)==7?q|0:0){l=a[q>>0]|0;do if(!(l<<24>>24)){h=38972;t=9}else{h=l&255;if(l<<24>>24==48){h=a[q+1>>0]|0;if(!(h<<24>>24)){h=38973;t=9;break}h=h&255;if((h|32|0)==120)break;else k=120}else k=48;p=d[208+h>>0]|0;t=13}while(0);if((t|0)==9){p=0;k=a[208+(d[h>>0]|0)>>0]|0;t=13}if((t|0)==13?(p|0)!=(k&255|0):0){Lg(q,u,(Eu(q)|0)&1073741823,1)|0;if(i|0)g[u>>3]=-+g[u>>3];l=c[v>>2]|0;b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))t=27;else t=47;else{do if((e[l+276>>1]|0)>=8){h=l+300|0;k=c[h>>2]|0;if(k|0){c[h>>2]=c[k>>2];m=l+284|0;c[m>>2]=(c[m>>2]|0)+1;m=k;t=28;break b}h=l+296|0;k=c[h>>2]|0;if(!k){h=l+292|0;break}else{c[h>>2]=c[k>>2];m=l+284|0;c[m>>2]=(c[m>>2]|0)+1;m=k;t=28;break b}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;t=27}while(0);if((t|0)==27){m=_d(l,8,0)|0;t=28}do if((t|0)==28)if(m){h=u;s=c[h>>2]|0;h=c[h+4>>2]|0;l=m;u=l;a[u>>0]=s;a[u+1>>0]=s>>8;a[u+2>>0]=s>>16;a[u+3>>0]=s>>24;l=l+4|0;a[l>>0]=h;a[l+1>>0]=h>>8;a[l+2>>0]=h>>16;a[l+3>>0]=h>>24;l=v+108|0;h=c[l>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[l>>2]=h+1;u=c[v+104>>2]|0;a[u+(h*20|0)>>0]=-111;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=0;c[u+(h*20|0)+8>>2]=j;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else h=Di(v,145,0,j,0)|0;k=c[v>>2]|0;if(!(a[k+81>>0]|0)){if((h|0)<0)h=(c[l>>2]|0)+-1|0;k=c[v+104>>2]|0;l=k+(h*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(h*20|0)+16>>2]=m;a[l>>0]=-13;break}else{Ei(v,k+(h*20|0)|0,m,-13);break}}if(k|0){if(c[k+480>>2]|0){Xd(k,m);break}v=m;if((c[k+304>>2]|0)>>>0<=v>>>0?(c[k+308>>2]|0)>>>0>v>>>0:0){v=k+300|0;c[m>>2]=c[v>>2];c[v>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{v=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else t=47;while(0);if((t|0)==47){k=v+108|0;h=c[k>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[k>>2]=h+1;u=c[v+104>>2]|0;a[u+(h*20|0)>>0]=-111;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=0;c[u+(h*20|0)+8>>2]=j;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else h=Di(v,145,0,j,0)|0;if(!(a[(c[v>>2]|0)+81>>0]|0)){if((h|0)<0)h=(c[k>>2]|0)+-1|0;k=c[v+104>>2]|0;if(a[k+(h*20|0)+1>>0]|0)Ei(v,k+(h*20|0)|0,0,-13)}}break}c[s>>2]=r?34064:59952;c[s+4>>2]=q;cd(f,38975,s)}while(0);Ra=w;return}function Lj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+32|0;g=i;a:do if(!d)f=0;else while(1){f=c[d+4>>2]|0;if(!(f&4096)){f=d;break a}if(!(f&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){f=0;break}}while(0);if((a[b+23>>0]|0?(a[f>>0]|0)!=-88:0)?(d=g+20|0,a[d>>0]=2,c[g+4>>2]=127,c[g+8>>2]=128,c[g+24>>2]=0,_j(g,f)|0,a[d>>0]|0):0){c[e>>2]=0;e=Nj(b,f,-1)|0;Ra=i;return e|0}g=b+19|0;d=a[g>>0]|0;if(!(d<<24>>24)){j=b+44|0;d=(c[j>>2]|0)+1|0;c[j>>2]=d}else{d=d+-1<<24>>24;a[g>>0]=d;d=c[b+148+((d&255)<<2)>>2]|0}f=Jj(b,f,d)|0;if((f|0)!=(d|0))if((d|0)!=0?(h=a[g>>0]|0,(h&255)<8):0){a[g>>0]=h+1<<24>>24;c[b+148+((h&255)<<2)>>2]=d;d=0}else d=0;c[e>>2]=d;j=f;Ra=i;return j|0}function Mj(d,e,f,g,h,i,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0;do if(!(c[e+4>>2]&256)){if(f|0?c[f+4>>2]&256|0:0){n=Yi(d,f)|0;break}l=Yi(d,e)|0;if(!l)n=Yi(d,f)|0;else n=l}else n=Yi(d,e)|0;while(0);f=Xj(f)|0;l=Xj(e)|0;if(f<<24>>24==0|l<<24>>24==0)l=(l|f)<<24>>24==0?65:(l&255)+(f&255)|0;else l=f<<24>>24>66|l<<24>>24>66?67:65;m=l|k;k=d+8|0;d=c[k>>2]|0;f=d+108|0;l=c[f>>2]|0;if((c[d+112>>2]|0)>(l|0)){c[f>>2]=l+1;e=c[d+104>>2]|0;a[e+(l*20|0)>>0]=g;b[e+(l*20|0)+2>>1]=0;c[e+(l*20|0)+4>>2]=i;c[e+(l*20|0)+8>>2]=j;c[e+(l*20|0)+12>>2]=h;c[e+(l*20|0)+16>>2]=0;a[e+(l*20|0)+1>>0]=0}else l=Di(d,g,i,j,h)|0;do if(!(a[(c[d>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[f>>2]|0)+-1|0;f=c[d+104>>2]|0;e=f+(l*20|0)+1|0;if(a[e>>0]|0){Ei(d,f+(l*20|0)|0,n,-2);break}if(n|0){c[f+(l*20|0)+16>>2]=n;a[e>>0]=-2}}while(0);l=c[k>>2]|0;f=c[l+108>>2]|0;if((f|0)<=0)return;b[(c[l+104>>2]|0)+((f+-1|0)*20|0)+2>>1]=m&255;return}function Nj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=b+68|0;h=c[j>>2]|0;i=(e|0)<0;a:do if(i&(h|0)!=0?(f=c[h>>2]|0,(f|0)>0):0){g=h+4|0;while(1){if(a[g+13>>0]&4?(bk(0,c[g>>2]|0,d,-1)|0)==0:0)break;if((f|0)>1){f=f+-1|0;g=g+20|0}else break a}j=c[g+16>>2]|0;return j|0}while(0);if(!d)f=0;else f=dk(c[b>>2]|0,d,0,0)|0;g=nj(c[b>>2]|0,h,f)|0;if(g){f=(c[g>>2]|0)+-1|0;h=g+4+(f*20|0)+13|0;a[h>>0]=a[h>>0]&-5|e>>>29&4;if(i){i=b+44|0;e=(c[i>>2]|0)+1|0;c[i>>2]=e}c[g+4+(f*20|0)+16>>2]=e}c[j>>2]=g;j=e;return j|0}function Oj(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=Ra;Ra=Ra+32|0;A=F;i=h&255;D=79-(i&1)|0;y=c[d+8>>2]|0;j=c[e>>2]|0;if((j|0)<=0){Ra=F;return}w=((a[d+23>>0]|0)==0?i&253:h)&255;q=(w&4|0)==0;r=(w&2|0)==0;s=A+20|0;t=A+4|0;u=A+8|0;v=A+24|0;w=(w&8|0)==0;x=(D|0)==78;l=g+-1|0;m=y+108|0;n=y+112|0;o=y+104|0;p=D&255;k=e+4|0;h=0;i=j;while(1){g=c[k>>2]|0;do if(!q?(j=b[k+16>>1]|0,z=j&65535,j<<16>>16!=0):0){if(!w){h=h+-1|0;i=i+-1|0;break}g=l+z|0;e=h+f|0;j=c[m>>2]|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=j+1;G=c[o>>2]|0;a[G+(j*20|0)>>0]=p;b[G+(j*20|0)+2>>1]=0;c[G+(j*20|0)+4>>2]=g;c[G+(j*20|0)+8>>2]=e;c[G+(j*20|0)+12>>2]=0;c[G+(j*20|0)+16>>2]=0;a[G+(j*20|0)+1>>0]=0;break}else{Di(y,D,g,e,0)|0;break}}else E=10;while(0);a:do if((E|0)==10){E=0;do if(!r){a[s>>0]=2;c[t>>2]=127;c[u>>2]=128;c[v>>2]=0;if(g){_j(A,g)|0;if(!(a[s>>0]|0))break}Nj(d,g,h+f|0)|0;break a}while(0);j=h+f|0;e=Jj(d,g,j)|0;if((e|0)!=(j|0)){if(x){if(!(a[(c[y>>2]|0)+81>>0]|0))g=(c[o>>2]|0)+(((c[m>>2]|0)+-1|0)*20|0)|0;else g=59308;if(((a[g>>0]|0)==78?(B=g+12|0,C=(c[B>>2]|0)+1|0,(C+(c[g+4>>2]|0)|0)==(e|0)):0)?(C+(c[g+8>>2]|0)|0)==(j|0):0){c[B>>2]=C;break}}g=c[m>>2]|0;if((c[n>>2]|0)>(g|0)){c[m>>2]=g+1;G=c[o>>2]|0;a[G+(g*20|0)>>0]=p;b[G+(g*20|0)+2>>1]=0;c[G+(g*20|0)+4>>2]=e;c[G+(g*20|0)+8>>2]=j;c[G+(g*20|0)+12>>2]=0;c[G+(g*20|0)+16>>2]=0;a[G+(g*20|0)+1>>0]=0;break}else{Di(y,D,e,j,0)|0;break}}}while(0);h=h+1|0;if((h|0)>=(i|0))break;else k=k+20|0}Ra=F;return}function Pj(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;l=n+4|0;m=n;c[l>>2]=0;c[m>>2]=0;if(!g){m=d;Ra=n;return m|0}if((a[g>>0]|0)!=-94){m=d;Ra=n;return m|0}g=c[g+44>>2]|0;if(!g){m=d;Ra=n;return m|0}if(!(c[g+56>>2]|0)){m=d;Ra=n;return m|0}g=g+64|0;while(1){g=c[g>>2]|0;if((c[g>>2]|0)==(b|0))break;else g=g+24|0}g=c[g+8>>2]|0;h=c[(c[g>>2]|0)+72>>2]|0;if(!h){m=d;Ra=n;return m|0}k=d+32|0;if(!(_a[h&127](g,f,c[k>>2]|0,l,m)|0)){m=d;Ra=n;return m|0}g=c[k>>2]|0;if(!g)i=41;else i=((Eu(g)|0)&1073741823)+41|0;a:do if(!b){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](i)|0;j=34;break}g=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;f=59064;h=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&h>>>0>0){b=c[14978]|0;f=Tv(h|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&f>>>0<=b>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){m=d;Ra=n;return m|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;b=h}else b=h}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){m=d;Ra=n;return m|0}}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<i>>>0:0))){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];j=b+284|0;c[j>>2]=(c[j>>2]|0)+1;j=34;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];j=b+284|0;c[j>>2]=(c[j>>2]|0)+1;j=34;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,i,0)|0;j=34}while(0);if((j|0)==34)if(!g){m=d;Ra=n;return m|0}else b=g;gw(b+40|0,0,i+-40|0)|0;f=b;g=d;h=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));f=b+40|0;c[b+32>>2]=f;h=c[k>>2]|0;if(!h)g=1;else g=((Eu(h)|0)&1073741823)+1|0;ew(f|0,h|0,g|0)|0;c[b+16>>2]=c[l>>2];c[b+8>>2]=c[m>>2];m=b+4|0;c[m>>2]=c[m>>2]|16;m=b;Ra=n;return m|0}function Qj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+48|0;k=r+8|0;h=r;o=r+16|0;q=c[d+8>>2]|0;p=c[e+20>>2]|0;f=e+4|0;g=c[f>>2]|0;do if(!(g&32)){if(g&33554432|0){c[h>>2]=c[p+20>>2];nk(d,0,39045,h);f=c[e+48>>2]|0;g=c[e+44>>2]|0;h=q+108|0;i=c[h>>2]|0;if((c[q+112>>2]|0)>(i|0)){c[h>>2]=i+1;q=c[q+104>>2]|0;a[q+(i*20|0)>>0]=12;b[q+(i*20|0)+2>>1]=0;c[q+(i*20|0)+4>>2]=f;c[q+(i*20|0)+8>>2]=g;c[q+(i*20|0)+12>>2]=0;c[q+(i*20|0)+16>>2]=0;a[q+(i*20|0)+1>>0]=0}else Di(q,12,f,g,0)|0;q=c[e+28>>2]|0;Ra=r;return q|0}c[f>>2]=g|33554432;i=d+44|0;f=(c[i>>2]|0)+1|0;c[i>>2]=f;c[e+48>>2]=f;i=q+108|0;g=c[i>>2]|0;j=q+112|0;if((c[j>>2]|0)>(g|0)){n=g+1|0;c[i>>2]=n;m=c[q+104>>2]|0;a[m+(g*20|0)>>0]=70;b[m+(g*20|0)+2>>1]=0;c[m+(g*20|0)+4>>2]=0;c[m+(g*20|0)+8>>2]=f;c[m+(g*20|0)+12>>2]=0;c[m+(g*20|0)+16>>2]=0;a[m+(g*20|0)+1>>0]=0;f=n}else f=(Di(q,70,0,f,0)|0)+1|0;c[e+44>>2]=f;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;f=c[q+104>>2]|0;a[f+(h*20|0)>>0]=17;f=f+(h*20|0)+1|0;g=f+19|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));n=h;break}else{n=Di(q,17,0,0,0)|0;break}}else n=0;while(0);m=(n|0)!=0;f=c[p+20>>2]|0;c[k>>2]=m?59952:39084;c[k+4>>2]=f;nk(d,1,39063,k);f=(a[e>>0]|0)==-125;if(f)i=c[c[p>>2]>>2]|0;else i=1;s=d+44|0;j=c[s>>2]|0;k=j+1|0;a[o>>0]=0;l=o+4|0;c[l>>2]=k;c[o+16>>2]=0;g=o+8|0;c[g>>2]=0;h=o+12|0;c[h>>2]=0;j=j+i|0;c[s>>2]=j;do if(f){a[o>>0]=10;c[g>>2]=k;c[h>>2]=i;f=q+108|0;g=c[f>>2]|0;if((c[q+112>>2]|0)>(g|0)){c[f>>2]=g+1;s=c[q+104>>2]|0;a[s+(g*20|0)>>0]=73;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=0;c[s+(g*20|0)+8>>2]=k;c[s+(g*20|0)+12>>2]=j;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0;break}else{Di(q,73,0,k,j)|0;break}}else{a[o>>0]=3;g=q+108|0;f=c[g>>2]|0;if((c[q+112>>2]|0)>(f|0)){c[g>>2]=f+1;s=c[q+104>>2]|0;a[s+(f*20|0)>>0]=70;b[s+(f*20|0)+2>>1]=0;c[s+(f*20|0)+4>>2]=0;c[s+(f*20|0)+8>>2]=k;c[s+(f*20|0)+12>>2]=0;c[s+(f*20|0)+16>>2]=0;a[s+(f*20|0)+1>>0]=0;break}else{Di(q,70,0,k,0)|0;break}}while(0);i=oj(c[d>>2]|0,147,17144,0)|0;h=p+60|0;f=c[h>>2]|0;if(!f){s=ej(d,141,i,0)|0;c[h>>2]=s}else{f=f+12|0;g=c[f>>2]|0;if(g){ni(c[d>>2]|0,g);f=(c[h>>2]|0)+12|0}c[f>>2]=i}c[p+12>>2]=0;if(kj(d,p,o)|0){s=0;Ra=r;return s|0}i=c[l>>2]|0;c[e+28>>2]=i;if(!m){s=i;Ra=r;return s|0}h=q+108|0;g=c[h>>2]|0;if(!(a[(c[q>>2]|0)+81>>0]|0))f=(c[q+104>>2]|0)+(((n|0)<0?g+-1|0:n)*20|0)|0;else f=59308;c[f+8>>2]=g;f=c[e+48>>2]|0;if((c[q+112>>2]|0)>(g|0)){c[h>>2]=g+1;s=c[q+104>>2]|0;a[s+(g*20|0)>>0]=66;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=f;c[s+(g*20|0)+8>>2]=0;c[s+(g*20|0)+12>>2]=0;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0}else Di(q,66,f,0,0)|0;f=c[e+44>>2]|0;g=c[h>>2]|0;if(!(a[(c[q>>2]|0)+81>>0]|0))f=(c[q+104>>2]|0)+((((f|0)<1?g:f)+-1|0)*20|0)|0;else f=59308;c[f+4>>2]=g+-1;s=i;Ra=r;return s|0}function Rj(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+48|0;G=U+12|0;E=U+8|0;m=U+4|0;D=U;c[E>>2]=0;c[D>>2]=0;B=f+12|0;N=c[B>>2]|0;if(ok(d,f)|0){Ra=U;return}T=pk(d,f)|0;j=c[B>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;J=7;break}case -125:{i=c[j+20>>2]|0;J=7;break}default:K=1}if((J|0)==7)K=c[c[i>>2]>>2]|0;k=c[d>>2]|0;l=(K*5|0)+1|0;a:do if(!k){Q=Sv(l|0,0,-1,-1)|0;P=L()|0;if(!(P>>>0>0|(P|0)==0&Q>>>0>2147483390)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;J=32;break}i=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){Q=c[14978]|0;P=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&P>>>0<=Q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;J=33}else J=33}else Q=0}else Q=0}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){Q=0;break}}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<l>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];J=k+284|0;c[J>>2]=(c[J>>2]|0)+1;J=32;break a}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];J=k+284|0;c[J>>2]=(c[J>>2]|0)+1;J=32;break a}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(k,l,0)|0;J=32}while(0);if((J|0)==32)if(!i)Q=0;else J=33;if((J|0)==33){gw(i|0,0,l|0)|0;Q=i}i=c[d>>2]|0;if(!(a[i+81>>0]|0)){w=d+8|0;P=c[w>>2]|0;C=(g|0)==(h|0);z=qk(d,f,3,C?0:E,Q,D)|0;j=a[N>>0]|0;if(j<<24>>24==-88)i=a[N+38>>0]|0;else i=j;switch(i<<24>>24){case -87:{i=N+20|0;J=40;break}case -125:{i=c[N+20>>2]|0;J=40;break}default:J=41}do if((J|0)==40){v=c[c[i>>2]>>2]|0;if((v|0)!=1){c[m>>2]=0;if(j<<24>>24==-125){O=Qj(d,N)|0;break}O=d+44|0;M=c[O>>2]|0;n=M+1|0;c[O>>2]=M+v;if((v|0)>0){o=N+20|0;p=d+23|0;q=G+20|0;r=G+4|0;s=G+8|0;t=G+24|0;m=0;do{i=c[(c[o>>2]|0)+4+(m*20|0)>>2]|0;u=m+n|0;do if(!(a[p>>0]|0))if(!i){y=Jj(d,0,u)|0;J=58}else J=52;else{a[q>>0]=2;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(i){_j(G,i)|0;if(!(a[q>>0]|0)){J=52;break}}Nj(d,i,u)|0}while(0);do if((J|0)==52){J=0;if((a[i>>0]|0)!=-88){y=Jj(d,i,u)|0;J=58;break}l=c[w>>2]|0;i=c[i+28>>2]|0;j=l+108|0;k=c[j>>2]|0;if((c[l+112>>2]|0)>(k|0)){c[j>>2]=k+1;O=c[l+104>>2]|0;a[O+(k*20|0)>>0]=78;b[O+(k*20|0)+2>>1]=0;c[O+(k*20|0)+4>>2]=i;c[O+(k*20|0)+8>>2]=u;c[O+(k*20|0)+12>>2]=0;c[O+(k*20|0)+16>>2]=0;a[O+(k*20|0)+1>>0]=0;break}else{Di(l,78,i,u,0)|0;break}}while(0);do if(((J|0)==58?(J=0,(y|0)!=(u|0)):0)?(x=c[w>>2]|0,x|0):0){i=x+108|0;j=c[i>>2]|0;if((c[x+112>>2]|0)>(j|0)){c[i>>2]=j+1;O=c[x+104>>2]|0;a[O+(j*20|0)>>0]=79;b[O+(j*20|0)+2>>1]=0;c[O+(j*20|0)+4>>2]=y;c[O+(j*20|0)+8>>2]=u;c[O+(j*20|0)+12>>2]=0;c[O+(j*20|0)+16>>2]=0;a[O+(j*20|0)+1>>0]=0;break}else{Di(x,79,y,u,0)|0;break}}while(0);m=m+1|0}while((m|0)!=(v|0));O=n}else O=n}else J=41}while(0);if((J|0)==41)O=Lj(d,N,m)|0;r=(K|0)>0;b:do if(r){i=0;do{if((c[Q+(i<<2)>>2]|0)!=(i|0))break b;i=i+1|0}while((i|0)<(K|0))}else i=0;while(0);if((i|0)!=(K|0)){do if((K|0)==1){i=d+19|0;j=a[i>>0]|0;if(!(j<<24>>24)){M=d+44|0;j=(c[M>>2]|0)+1|0;c[M>>2]=j;break}else{j=j+-1<<24>>24;a[i>>0]=j;j=c[d+148+((j&255)<<2)>>2]|0;break}}else{i=d+32|0;j=c[i>>2]|0;k=d+28|0;l=c[k>>2]|0;if((l|0)<(K|0)){M=d+44|0;j=c[M>>2]|0;c[M>>2]=j+K;j=j+1|0;break}else{c[i>>2]=j+K;c[k>>2]=l-K;break}}while(0);if(r){k=P+108|0;l=P+112|0;m=P+104|0;i=0;do{n=i+O|0;o=(c[Q+(i<<2)>>2]|0)+j|0;p=c[k>>2]|0;if((c[l>>2]|0)>(p|0)){c[k>>2]=p+1;M=c[m>>2]|0;a[M+(p*20|0)>>0]=78;b[M+(p*20|0)+2>>1]=0;c[M+(p*20|0)+4>>2]=n;c[M+(p*20|0)+8>>2]=o;c[M+(p*20|0)+12>>2]=0;c[M+(p*20|0)+16>>2]=0;a[M+(p*20|0)+1>>0]=0}else Di(P,78,n,o,0)|0;i=i+1|0}while((i|0)!=(K|0));M=j}else M=j}else M=O;c:do if((z|0)==5){v=c[f+20>>2]|0;s=Yi(d,c[B>>2]|0)|0;u=d+56|0;x=c[u>>2]|0;t=x+-1|0;c[u>>2]=t;u=(h|0)!=(g|0);do if(u){i=d+19|0;j=a[i>>0]|0;if(!(j<<24>>24)){N=d+44|0;i=(c[N>>2]|0)+1|0;c[N>>2]=i}else{N=j+-1<<24>>24;a[i>>0]=N;i=c[d+148+((N&255)<<2)>>2]|0}j=P+108|0;k=c[j>>2]|0;if((c[P+112>>2]|0)>(k|0)){c[j>>2]=k+1;w=c[P+104>>2]|0;a[w+(k*20|0)>>0]=96;b[w+(k*20|0)+2>>1]=0;c[w+(k*20|0)+4>>2]=M;c[w+(k*20|0)+8>>2]=M;c[w+(k*20|0)+12>>2]=i;c[w+(k*20|0)+16>>2]=0;a[w+(k*20|0)+1>>0]=0;w=i;break}else{Di(P,96,M,M,i)|0;w=i;break}}else w=0;while(0);if((c[v>>2]|0)>0){m=(w|0)==0;n=P+108|0;o=P+112|0;p=P+104|0;q=d+19|0;r=(s|0)==0;l=0;do{i=v+4+(l*20|0)|0;k=Lj(d,c[i>>2]|0,G)|0;d:do if(!m){i=c[i>>2]|0;j=a[i>>0]|0;if((j+91&255)<2)do{i=c[i+12>>2]|0;j=a[i>>0]|0}while((j+91&255)<2);if(j<<24>>24==-88)j=a[i+38>>0]|0;e:do switch(j<<24>>24){case -110:case -111:case 110:case -109:break d;case -94:{if(!(c[i+4>>2]&1048576)){j=c[i+44>>2]|0;if(!j)break e;i=b[i+32>>1]|0;if(i<<16>>16<=-1)break d;if(a[(c[j+4>>2]|0)+(i<<16>>16<<4)+12>>0]|0)break d}break}default:{}}while(0);i=c[n>>2]|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=96;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=w;c[N+(i*20|0)+8>>2]=k;c[N+(i*20|0)+12>>2]=w;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0;break}else{Di(P,96,w,k,w)|0;break}}while(0);i=c[n>>2]|0;j=(c[o>>2]|0)>(i|0);if(u|(l|0)<((c[v>>2]|0)+-1|0)){if(j){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=53;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=M;c[N+(i*20|0)+8>>2]=t;c[N+(i*20|0)+12>>2]=k;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else i=Di(P,53,M,t,k)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[p>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(P,j+(i*20|0)|0,s,-2);break}if(r)break;c[j+(i*20|0)+16>>2]=s;a[k>>0]=-2}while(0);i=c[n>>2]|0;if((i|0)>0)b[(c[p>>2]|0)+((i+-1|0)*20|0)+2>>1]=a[T>>0]|0}else{if(j){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=52;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=M;c[N+(i*20|0)+8>>2]=g;c[N+(i*20|0)+12>>2]=k;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else i=Di(P,52,M,g,k)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[p>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(P,j+(i*20|0)|0,s,-2);break}if(r)break;c[j+(i*20|0)+16>>2]=s;a[k>>0]=-2}while(0);i=c[n>>2]|0;if((i|0)>0)b[(c[p>>2]|0)+((i+-1|0)*20|0)+2>>1]=(a[T>>0]|16)<<24>>24}i=c[G>>2]|0;if(i|0?(F=a[q>>0]|0,(F&255)<8):0){a[q>>0]=F+1<<24>>24;c[d+148+((F&255)<<2)>>2]=i}l=l+1|0}while((l|0)<(c[v>>2]|0))}l=(w|0)==0;do if(!l){j=P+108|0;i=c[j>>2]|0;k=P+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;N=c[P+104>>2]|0;a[N+(i*20|0)>>0]=50;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=w;c[N+(i*20|0)+8>>2]=h;c[N+(i*20|0)+12>>2]=0;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else Di(P,50,w,h,0)|0;i=c[j>>2]|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;h=c[P+104>>2]|0;a[h+(i*20|0)>>0]=11;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=0;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=0;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);j=c[P+12>>2]|0;i=0-x|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,P,i);else c[(c[j+64>>2]|0)+(i<<2)>>2]=c[P+108>>2];if(!l?(H=d+19|0,I=a[H>>0]|0,(I&255)<8):0){a[H>>0]=I+1<<24>>24;c[d+148+((I&255)<<2)>>2]=w}}else{if(C){l=g;q=0}else{l=d+56|0;q=(c[l>>2]|0)+-1|0;c[l>>2]=q;l=q}f:do if(r){n=P+108|0;o=P+112|0;p=P+104|0;m=0;while(1){i=c[B>>2]|0;k=a[i>>0]|0;if(k<<24>>24==-88)j=a[i+38>>0]|0;else j=k;switch(j<<24>>24){case -87:{j=i+20|0;J=158;break}case -125:{j=c[i+20>>2]|0;J=158;break}default:{}}do if((J|0)==158){J=0;if((c[c[j>>2]>>2]|0)>=2){if(k<<24>>24!=-125?(a[i+38>>0]|0)!=-125:0){i=c[(c[i+20>>2]|0)+4+(m*20|0)>>2]|0;break}i=c[(c[c[i+20>>2]>>2]|0)+4+(m*20|0)>>2]|0}}while(0);j=a[i>>0]|0;if((j+91&255)<2)do{i=c[i+12>>2]|0;j=a[i>>0]|0}while((j+91&255)<2);if(j<<24>>24==-88)j=a[i+38>>0]|0;g:do switch(j<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if((c[i+4>>2]&1048576|0)==0?(A=c[i+44>>2]|0,(A|0)!=0):0){i=b[i+32>>1]|0;if(i<<16>>16<=-1)break g;if(!(a[(c[A+4>>2]|0)+(i<<16>>16<<4)+12>>0]|0))J=173}else J=173;break}default:J=173}while(0);do if((J|0)==173){J=0;i=m+M|0;j=c[n>>2]|0;if((c[o>>2]|0)>(j|0)){c[n>>2]=j+1;I=c[p>>2]|0;a[I+(j*20|0)>>0]=50;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=i;c[I+(j*20|0)+8>>2]=l;c[I+(j*20|0)+12>>2]=0;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0;break}else{Di(P,50,i,l,0)|0;break}}while(0);m=m+1|0;if((m|0)==(K|0))break f}}while(0);do if((z|0)==1){l=c[D>>2]|0;j=P+108|0;i=c[j>>2]|0;k=P+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=30;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=l;c[I+(i*20|0)+8>>2]=g;c[I+(i*20|0)+12>>2]=M;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else Di(P,30,l,g,M)|0;i=c[j>>2]|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;j=c[P+104>>2]|0;a[j+(i*20|0)>>0]=11;j=j+(i*20|0)+1|0;k=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));z=l;break}else{i=Di(P,11,0,0,0)|0;z=l;break}}else{n=P+108|0;i=c[n>>2]|0;m=P+112|0;if((c[m>>2]|0)>(i|0)){c[n>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=91;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=M;c[I+(i*20|0)+8>>2]=K;c[I+(i*20|0)+12>>2]=0;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else i=Di(P,91,M,K,0)|0;j=c[P>>2]|0;h:do if(a[j+81>>0]|0){if((K|0)!=-12)kg(j,K,T)}else{if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[P+104>>2]|0;k=j+(i*20|0)|0;do if((K|0)<=-1){l=j+(i*20|0)+1|0;if(a[l>>0]|0)break;if((K|0)==-3){c[j+(i*20|0)+16>>2]=T;a[l>>0]=-3;break h}if(!T)break h;c[j+(i*20|0)+16>>2]=T;a[l>>0]=K;if((K|0)!=-12)break h;I=T+12|0;c[I>>2]=(c[I>>2]|0)+1;break h}while(0);Ei(P,k,T,K)}while(0);k=c[D>>2]|0;i=c[n>>2]|0;j=(c[m>>2]|0)>(i|0);if(C){if(j){c[n>>2]=i+1;h=c[P+104>>2]|0;a[h+(i*20|0)>>0]=28;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=k;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=M;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0}else i=Di(P,28,k,g,M)|0;if(a[(c[P>>2]|0)+81>>0]|0)break c;g=c[P+104>>2]|0;a[g+(i*20|0)+1>>0]=-3;c[g+(i*20|0)+16>>2]=K;break c}else{if(j){c[n>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=29;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=k;c[I+(i*20|0)+8>>2]=0;c[I+(i*20|0)+12>>2]=M;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else i=Di(P,29,k,0,M)|0;if(a[(c[P>>2]|0)+81>>0]|0){z=k;break}z=c[P+104>>2]|0;a[z+(i*20|0)+1>>0]=-3;c[z+(i*20|0)+16>>2]=K;z=k;break}}while(0);j=c[E>>2]|0;do if((K|0)==1&(j|0)!=0){k=P+108|0;l=c[k>>2]|0;if((c[P+112>>2]|0)>(l|0)){c[k>>2]=l+1;I=c[P+104>>2]|0;a[I+(l*20|0)>>0]=51;b[I+(l*20|0)+2>>1]=0;c[I+(l*20|0)+4>>2]=j;c[I+(l*20|0)+8>>2]=g;c[I+(l*20|0)+12>>2]=0;c[I+(l*20|0)+16>>2]=0;a[I+(l*20|0)+1>>0]=0;break}else{Di(P,51,j,g,0)|0;break}}while(0);do if(C){j=P+108|0;k=c[j>>2]|0;if((c[P+112>>2]|0)>(k|0)){c[j>>2]=k+1;I=c[P+104>>2]|0;a[I+(k*20|0)>>0]=11;b[I+(k*20|0)+2>>1]=0;c[I+(k*20|0)+4>>2]=0;c[I+(k*20|0)+8>>2]=g;c[I+(k*20|0)+12>>2]=0;c[I+(k*20|0)+16>>2]=0;a[I+(k*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);do if(q|0){k=c[P+12>>2]|0;j=~q;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,P,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[P+108>>2];break}}while(0);y=P+108|0;j=c[y>>2]|0;f=P+112|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;x=c[P+104>>2]|0;a[x+(j*20|0)>>0]=36;b[x+(j*20|0)+2>>1]=0;c[x+(j*20|0)+4>>2]=z;c[x+(j*20|0)+8>>2]=g;c[x+(j*20|0)+12>>2]=0;c[x+(j*20|0)+16>>2]=0;a[x+(j*20|0)+1>>0]=0;x=j}else x=Di(P,36,z,g,0)|0;v=(K|0)>1;if(v){I=d+56|0;w=(c[I>>2]|0)+-1|0;c[I>>2]=w}else w=g;i:do if(r){p=d+19|0;q=d+44|0;r=N+38|0;s=N+20|0;t=N+20|0;u=P+104|0;o=0;while(1){j=a[p>>0]|0;if(!(j<<24>>24)){n=(c[q>>2]|0)+1|0;c[q>>2]=n}else{n=j+-1<<24>>24;a[p>>0]=n;n=c[d+148+((n&255)<<2)>>2]|0}k=a[N>>0]|0;if(k<<24>>24==-88)j=a[r>>0]|0;else j=k;switch(j<<24>>24){case -87:{j=s;J=237;break}case -125:{j=c[t>>2]|0;J=237;break}default:j=N}j:do if((J|0)==237){J=0;if((c[c[j>>2]>>2]|0)<2){j=N;break}do if(k<<24>>24!=-125){if((a[r>>0]|0)==-125)break;j=c[(c[s>>2]|0)+4+(o*20|0)>>2]|0;break j}while(0);j=c[(c[c[t>>2]>>2]|0)+4+(o*20|0)>>2]|0}while(0);m=Yi(d,j)|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;I=c[u>>2]|0;a[I+(j*20|0)>>0]=90;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=z;c[I+(j*20|0)+8>>2]=o;c[I+(j*20|0)+12>>2]=n;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else Di(P,90,z,o,n)|0;k=o+M|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;I=c[u>>2]|0;a[I+(j*20|0)>>0]=52;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=k;c[I+(j*20|0)+8>>2]=w;c[I+(j*20|0)+12>>2]=n;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else j=Di(P,52,k,w,n)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[y>>2]|0)+-1|0;k=c[u>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(P,k+(j*20|0)|0,m,-2);break}if(!m)break;c[k+(j*20|0)+16>>2]=m;a[l>>0]=-2}while(0);do if(n|0){j=a[p>>0]|0;if((j&255)>=8)break;a[p>>0]=j+1<<24>>24;c[d+148+((j&255)<<2)>>2]=n}while(0);o=o+1|0;if((o|0)==(K|0))break i}}while(0);j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;N=c[P+104>>2]|0;a[N+(j*20|0)>>0]=11;b[N+(j*20|0)+2>>1]=0;c[N+(j*20|0)+4>>2]=0;c[N+(j*20|0)+8>>2]=h;c[N+(j*20|0)+12>>2]=0;c[N+(j*20|0)+16>>2]=0;a[N+(j*20|0)+1>>0]=0}else Di(P,11,0,h,0)|0;do if(v){k=c[P+12>>2]|0;j=~w;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,P,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[y>>2];j=x+1|0;k=c[y>>2]|0;if((c[f>>2]|0)>(k|0)){c[y>>2]=k+1;h=c[P+104>>2]|0;a[h+(k*20|0)>>0]=5;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=z;c[h+(k*20|0)+8>>2]=j;c[h+(k*20|0)+12>>2]=0;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0}else Di(P,5,z,j,0)|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;h=c[P+104>>2]|0;a[h+(j*20|0)>>0]=11;b[h+(j*20|0)+2>>1]=0;c[h+(j*20|0)+4>>2]=0;c[h+(j*20|0)+8>>2]=g;c[h+(j*20|0)+12>>2]=0;c[h+(j*20|0)+16>>2]=0;a[h+(j*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);j=c[y>>2]|0;if(!(a[(c[P>>2]|0)+81>>0]|0))i=(c[P+104>>2]|0)+(((i|0)<0?j+-1|0:i)*20|0)|0;else i=59308;c[i+8>>2]=j}while(0);if(!((M|0)==(O|0)|(M|0)==0)?(R=d+19|0,S=a[R>>0]|0,(S&255)<8):0){a[R>>0]=S+1<<24>>24;c[d+148+((S&255)<<2)>>2]=M}i=c[d>>2]|0}do if(Q|0){if(i|0){if(c[i+480>>2]|0){Xd(i,Q);break}S=Q;if((c[i+304>>2]|0)>>>0<=S>>>0?(c[i+308>>2]|0)>>>0>S>>>0:0){S=i+300|0;c[Q>>2]=c[S>>2];c[S>>2]=Q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{S=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);i=c[d>>2]|0;if(!T){Ra=U;return}if(i|0){if(c[i+480>>2]|0){Xd(i,T);Ra=U;return}d=T;if((c[i+304>>2]|0)>>>0<=d>>>0?(c[i+308>>2]|0)>>>0>d>>>0:0){d=i+300|0;c[T>>2]=c[d>>2];c[d>>2]=T;Ra=U;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](T);Ra=U;return}else{d=Wa[c[29352>>2]&127](T)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](T);Ra=U;return}}function Sj(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+240|0;y=E+212|0;C=E+160|0;j=E+108|0;k=E+56|0;B=E+4|0;D=E;c[D>>2]=0;l=j;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=k;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=C;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=B;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));w=c[e+4>>2]|0;ew(B|0,e|0,((w&16384|0)==0?((w&8192|0)==0?52:28):12)|0)|0;a[C>>0]=44;c[C+12>>2]=j;c[C+16>>2]=k;a[j>>0]=57;c[j+12>>2]=B;c[j+16>>2]=c[f+4>>2];a[k>>0]=55;c[k+12>>2]=B;c[k+16>>2]=c[f+24>>2];f=a[B>>0]|0;w=B+38|0;switch((f<<24>>24==-88?a[w>>0]|0:f)<<24>>24){case -87:{j=c[B+20>>2]|0;e=j;x=4;break}case -125:{j=c[B+20>>2]|0;e=c[j>>2]|0;x=4;break}default:x=5}a:do if((x|0)==4){v=c[e>>2]|0;if((v|0)!=1){c[D>>2]=0;if(f<<24>>24==-125){e=Qj(d,B)|0;break}u=d+44|0;t=c[u>>2]|0;e=t+1|0;c[u>>2]=t+v;if((v|0)>0){o=B+20|0;p=d+23|0;q=y+20|0;r=y+4|0;s=y+8|0;t=y+24|0;u=d+8|0;f=0;while(1){j=c[j+4+(f*20|0)>>2]|0;n=f+e|0;do if(!(a[p>>0]|0))if(!j){A=Jj(d,0,n)|0;x=22}else x=16;else{a[q>>0]=2;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(j){_j(y,j)|0;if(!(a[q>>0]|0)){x=16;break}}Nj(d,j,n)|0}while(0);do if((x|0)==16){x=0;if((a[j>>0]|0)!=-88){A=Jj(d,j,n)|0;x=22;break}m=c[u>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[m+104>>2]|0;a[m+(l*20|0)>>0]=78;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=j;c[m+(l*20|0)+8>>2]=n;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,n,0)|0;break}}while(0);do if(((x|0)==22?(x=0,(A|0)!=(n|0)):0)?(z=c[u>>2]|0,z|0):0){j=z+108|0;k=c[j>>2]|0;if((c[z+112>>2]|0)>(k|0)){c[j>>2]=k+1;m=c[z+104>>2]|0;a[m+(k*20|0)>>0]=79;b[m+(k*20|0)+2>>1]=0;c[m+(k*20|0)+4>>2]=A;c[m+(k*20|0)+8>>2]=n;c[m+(k*20|0)+12>>2]=0;c[m+(k*20|0)+16>>2]=0;a[m+(k*20|0)+1>>0]=0;break}else{Di(z,79,A,n,0)|0;break}}while(0);f=f+1|0;if((f|0)==(v|0))break a;j=c[o>>2]|0}}}else x=5}while(0);if((x|0)==5)e=Lj(d,B,D)|0;a[w>>0]=a[B>>0]|0;a[B>>0]=-88;c[B+28>>2]=e;e=B+4|0;f=c[e>>2]&-4097;c[e>>2]=f;if(!h){c[e>>2]=f|1;Jj(d,C,g)|0}else db[h&127](d,C,g,i);e=c[D>>2]|0;if(!e){Ra=E;return}f=d+19|0;j=a[f>>0]|0;if((j&255)>=8){Ra=E;return}a[f>>0]=j+1<<24>>24;c[d+148+((j&255)<<2)>>2]=e;Ra=E;return}function Tj(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;m=t+8|0;p=t+4|0;s=t;o=c[d+8>>2]|0;c[p>>2]=0;c[s>>2]=0;if((e|0)==0|(o|0)==0){Ra=t;return}h=a[e>>0]|0;j=h^1;k=j&255;a:do switch(h<<24>>24){case 44:{Tj(d,c[e+12>>2]|0,f,g);Tj(d,c[e+16>>2]|0,f,g);break}case 43:{l=d+56|0;m=c[l>>2]|0;h=m+-1|0;c[l>>2]=h;tk(d,c[e+12>>2]|0,h,g^16);Tj(d,c[e+16>>2]|0,f,g);h=c[o+12>>2]|0;g=0-m|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}case 19:{tk(d,c[e+12>>2]|0,f,g);break}case -89:{o=(a[e+38>>0]|0)==-96;h=c[e+12>>2]|0;g=o?0:16;if(o^(a[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>0]|0)==0){Tj(d,h,f,g);break a}else{tk(d,h,f,g);break a}}case -96:case 45:{g=128;i=h<<24>>24==45?52:53;n=12;break}case 53:case 52:case 57:case 54:case 55:case 56:{i=k;n=12;break}case 51:case 50:{h=Lj(d,c[e+12>>2]|0,p)|0;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=j;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break a}else{Di(o,k,h,f,0)|0;break a}}case 48:{Sj(d,c[e+12>>2]|0,c[e+20>>2]|0,f,66,g);break}case 49:{if(g|0){Rj(d,e,f,f);break a}m=d+56|0;g=c[m>>2]|0;h=g+-1|0;c[m>>2]=h;Rj(d,e,f,h);h=c[o+12>>2]|0;g=0-g|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}default:{c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)==0&1;else h=0;n=36}}while(0);do if((n|0)==12){j=e+12|0;k=c[j>>2]|0;h=a[k>>0]|0;if(h<<24>>24==-88)h=a[k+38>>0]|0;switch(h<<24>>24){case -87:{l=k+20|0;n=17;break}case -125:{l=c[k+20>>2]|0;n=17;break}default:{}}if((n|0)==17?(c[c[l>>2]>>2]|0)>=2:0){c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)==0&1;else h=0;n=36;break}m=Lj(d,k,p)|0;e=e+16|0;o=Lj(d,c[e>>2]|0,s)|0;Mj(d,c[j>>2]|0,c[e>>2]|0,i,m,o,f,g)}while(0);do if((n|0)==36){if(h|0){h=o+108|0;g=c[h>>2]|0;if((c[o+112>>2]|0)>(g|0)){c[h>>2]=g+1;o=c[o+104>>2]|0;a[o+(g*20|0)>>0]=11;b[o+(g*20|0)+2>>1]=0;c[o+(g*20|0)+4>>2]=0;c[o+(g*20|0)+8>>2]=f;c[o+(g*20|0)+12>>2]=0;c[o+(g*20|0)+16>>2]=0;a[o+(g*20|0)+1>>0]=0;break}else{Di(o,11,0,f,0)|0;break}}c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0){if(c[m>>2]|0)break}else n=42;j=Lj(d,e,p)|0;h=(g|0)!=0&1;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=20;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=j;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break}else{Di(o,20,j,f,h)|0;break}}while(0);h=c[p>>2]|0;if(h|0?(q=d+19|0,r=a[q>>0]|0,(r&255)<8):0){a[q>>0]=r+1<<24>>24;c[d+148+((r&255)<<2)>>2]=h}h=c[s>>2]|0;if(!h){Ra=t;return}g=d+19|0;i=a[g>>0]|0;if((i&255)>=8){Ra=t;return}a[g>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=h;Ra=t;return}function Uj(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=d+8|0;k=c[p>>2]|0;a:do if(!k){o=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))n=15;else{p=0;break a}else{do if((e[o+276>>1]|0)>=224){k=o+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}k=o+296|0;l=c[k>>2]|0;if(!l){k=o+292|0;break}else{c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;n=15}while(0);if((n|0)==15)m=_d(o,224,0)|0;if(!m)p=0;else{k=m+104|0;l=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[m>>2]=o;k=o+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=d;c[p>>2]=m;Di(m,61,0,1,0)|0;p=m}}else p=k;while(0);if((g|0)==2){o=c[d+116>>2]|0;a[((o|0)==0?d:o)+21>>0]=1}n=i<<24>>24;o=p+108|0;k=c[o>>2]|0;if((c[p+112>>2]|0)>(k|0)){c[o>>2]=k+1;d=c[p+104>>2]|0;a[d+(k*20|0)>>0]=69;b[d+(k*20|0)+2>>1]=0;c[d+(k*20|0)+4>>2]=f;c[d+(k*20|0)+8>>2]=g;c[d+(k*20|0)+12>>2]=0;c[d+(k*20|0)+16>>2]=0;a[d+(k*20|0)+1>>0]=0}else k=Di(p,69,f,g,0)|0;l=c[p>>2]|0;do if(a[l+81>>0]|0){if(i<<24>>24!=-12)kg(l,n,h)}else{if((k|0)<0)k=(c[o>>2]|0)+-1|0;l=c[p+104>>2]|0;m=l+(k*20|0)|0;if(i<<24>>24<=-1?(q=l+(k*20|0)+1|0,(a[q>>0]|0)==0):0){if(i<<24>>24==-3){c[l+(k*20|0)+16>>2]=h;a[q>>0]=-3;break}if(!h)break;c[l+(k*20|0)+16>>2]=h;a[q>>0]=i;if(i<<24>>24!=-12)break;q=h+12|0;c[q>>2]=(c[q>>2]|0)+1;break}Ei(p,m,h,n)}while(0);k=c[o>>2]|0;if((k|0)<=0)return;b[(c[p+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=j&255;return}function Vj(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r;if(!f){j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;e=c[e+104>>2]|0;a[e+(k*20|0)>>0]=90;b[e+(k*20|0)+2>>1]=0;c[e+(k*20|0)+4>>2]=g;c[e+(k*20|0)+8>>2]=h;c[e+(k*20|0)+12>>2]=i;c[e+(k*20|0)+16>>2]=0;a[e+(k*20|0)+1>>0]=0;Ra=r;return}else{Di(e,90,g,h,i)|0;Ra=r;return}}do if((h|0)>=0?(b[f+40>>1]|0)!=(h|0):0){m=(c[f+56>>2]|0)!=0;n=m?164:90;if(m|(c[f+36>>2]&32|0)==0)j=h;else{j=c[f+8>>2]|0;a:do if(!j)j=0;else while(1){m=j+55|0;if(((d[m>>0]|d[m+1>>0]<<8)&3)==2)break a;j=c[j+20>>2]|0;if(!j){j=0;break}}while(0);m=h&65535;k=b[j+52>>1]|0;b:do if(!(k<<16>>16))j=-1;else{l=c[j+4>>2]|0;k=k&65535;j=0;while(1){if((b[l+(j<<1)>>1]|0)==m<<16>>16)break b;j=j+1|0;if(j>>>0>=k>>>0){j=-1;break}}}while(0);j=j<<16>>16}k=e+108|0;l=c[k>>2]|0;if((c[e+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[e+104>>2]|0;a[m+(l*20|0)>>0]=n;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=g;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=i;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;break}else{Di(e,n,g,j,i)|0;break}}else o=7;while(0);do if((o|0)==7){j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;o=c[e+104>>2]|0;a[o+(k*20|0)>>0]=-128;b[o+(k*20|0)+2>>1]=0;c[o+(k*20|0)+4>>2]=g;c[o+(k*20|0)+8>>2]=i;c[o+(k*20|0)+12>>2]=0;c[o+(k*20|0)+16>>2]=0;a[o+(k*20|0)+1>>0]=0;break}else{Di(e,128,g,i,0)|0;break}}while(0);if((h|0)<=-1){Ra=r;return}if(!(c[f+12>>2]|0)){c[p>>2]=0;m=c[e>>2]|0;j=f+4|0;k=c[j>>2]|0;l=c[k+(h<<4)+4>>2]|0;do if(l|0?(Wj(m,l,a[m+78>>0]|0,a[k+(h<<4)+13>>0]|0,p)|0,q=c[p>>2]|0,q|0):0){k=c[e>>2]|0;if(!(a[k+81>>0]|0)){g=c[e+104>>2]|0;p=(c[e+108>>2]|0)+-1|0;a[g+(p*20|0)+1>>0]=-11;c[g+(p*20|0)+16>>2]=q;break}else{kg(k,-11,q);break}}while(0)}else j=f+4|0;if((a[(c[j>>2]|0)+(h<<4)+13>>0]|0)!=69){Ra=r;return}j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;e=c[e+104>>2]|0;a[e+(k*20|0)>>0]=84;b[e+(k*20|0)+2>>1]=0;c[e+(k*20|0)+4>>2]=i;c[e+(k*20|0)+8>>2]=0;c[e+(k*20|0)+12>>2]=0;c[e+(k*20|0)+16>>2]=0;a[e+(k*20|0)+1>>0]=0;Ra=r;return}else{Di(e,84,i,0,0)|0;Ra=r;return}}function Wj(f,i,j,k,l){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+32|0;u=H+16|0;D=H+8|0;E=H;F=H+24|0;c[F>>2]=0;p=i;a:while(1){i=a[p>>0]|0;switch(i<<24>>24){case -90:case -83:break;default:break a}p=c[p+12>>2]|0}if(i<<24>>24==-88)i=d[p+38>>0]|0;else i=i&255;b:do switch((i&255)<<24>>24){case 36:{i=c[p+8>>2]|0;n=a[i>>0]|0;c:do if(!(n<<24>>24))m=67;else{m=67;o=0;do{o=o<<8|d[208+(n&255)>>0];i=i+1|0;d:do if((o|0)<1685026146){if((o|0)<1667785074){switch(o|0){case 1651273570:break;default:{G=16;break d}}switch(m<<24>>24){case 69:case 67:{m=65;break d}default:{G=15;break d}}}if((o|0)<1668050786)switch(o|0){case 1667785074:{m=66;break d}default:{G=16;break d}}else switch(o|0){case 1668050786:{m=66;break d}default:{G=16;break d}}}else{if((o|0)>=1919246700){if((o|0)>=1952807028)switch(o|0){case 1952807028:{m=66;break d}default:{G=16;break d}}switch(o|0){case 1919246700:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}else{G=15;break}}if((o|0)<1718382433){switch(o|0){case 1685026146:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}}else{switch(o|0){case 1718382433:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}}}while(0);if((G|0)==15)G=0;else if((G|0)==16){G=0;if((o&16777215|0)==6909556){m=68;break c}}n=a[i>>0]|0}while(n<<24>>24!=0)}while(0);s=Wj(f,c[p+12>>2]|0,j,m,l)|0;i=c[l>>2]|0;if(!i){l=s;Ra=H;return l|0}Sg(i,m,1);r=c[l>>2]|0;if(k<<24>>24<=66){if(k<<24>>24!=66){l=s;Ra=H;return l|0}m=r+8|0;i=b[m>>1]|0;l=i&65535;if(!((l&2|0)!=0|(l&12|0)==0)){Hg(r,1,1)|0;i=b[m>>1]|0}b[m>>1]=i&-13;l=s;Ra=H;return l|0}p=r+8|0;n=b[p>>1]|0;i=n&65535;if(i&4|0){l=s;Ra=H;return l|0}if(i&8|0){q=+g[r>>3];i=Mg(q)|0;m=L()|0;l=Sv(i|0,m|0,1,-2147483648)|0;G=L()|0;if(!((G>>>0>0|(G|0)==0&l>>>0>1)&q==+(i>>>0)+4294967296.0*+(m|0))){l=s;Ra=H;return l|0}l=r;c[l>>2]=i;c[l+4>>2]=m;b[p>>1]=n&15904|4;l=s;Ra=H;return l|0}if(!(i&2)){l=s;Ra=H;return l|0}i=a[r+10>>0]|0;m=r+16|0;n=r+12|0;if(Lg(c[m>>2]|0,D,c[n>>2]|0,i)|0){if(Og(c[m>>2]|0,E,c[n>>2]|0,i)|0){q=+g[D>>3];g[r>>3]=q;m=b[p>>1]|0;i=m|8;b[p>>1]=i;n=Mg(q)|0;o=L()|0;l=Sv(n|0,o|0,1,-2147483648)|0;f=L()|0;if((f>>>0>0|(f|0)==0&l>>>0>1)&q==+(n>>>0)+4294967296.0*+(o|0)){i=r;c[i>>2]=n;c[i+4>>2]=o;i=m&15904;G=28}}else{l=E;G=c[l+4>>2]|0;i=r;c[i>>2]=c[l>>2];c[i+4>>2]=G;i=b[p>>1]|0;G=28}if((G|0)==28){i=i|4;b[p>>1]=i}b[p>>1]=i&-3}l=s;Ra=H;return l|0}case -91:{i=c[p+12>>2]|0;m=a[i>>0]|0;switch(m<<24>>24){case -111:case -109:break;default:{G=107;break b}}t=34064;p=i;s=m&255;o=-1;r=-1;G=39;break}default:{t=59952;s=i;o=1;r=0;G=39}}while(0);e:do if((G|0)==39){f:do switch(s|0){case 110:case 145:case 147:{g:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=64;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){C=c[14978]|0;B=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&B>>>0<=C>>>0)&1}m=Wa[c[29340>>2]&127](i)|0;if(m){i=Wa[c[29352>>2]&127](m)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;C=m}else C=m}else G=65}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=65;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=64;break g}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=64;break g}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=64}while(0);if((G|0)==64)if(!i)G=65;else C=i;if((G|0)==65){c[F>>2]=0;n=0;m=0;break f}m=C;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));B=C+8|0;b[B>>1]=1;c[C+32>>2]=f;c[F>>2]=C;i=C;if(!(c[p+4>>2]&1024)){m=c[p+8>>2]|0;c[u>>2]=t;c[u+4>>2]=m;m=dd(f,38967,u)|0;if(!m){n=C;m=C;break f}yc(C,m,-1,1,116)|0}else{u=c[p+8>>2]|0;u=Yv(o|0,r|0,u|0,((u|0)<0)<<31>>31|0)|0;F=L()|0;f=C;c[f>>2]=u;c[f+4>>2]=F;b[B>>1]=4}do if(k<<24>>24==65&(s|2|0)==147){o=b[B>>1]|0;m=o&65535;if(!(m&4)){if(m&8|0){q=+g[C>>3];m=Mg(q)|0;n=L()|0;f=Sv(m|0,n|0,1,-2147483648)|0;F=L()|0;if(!((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0)))break;f=C;c[f>>2]=m;c[f+4>>2]=n;b[B>>1]=o&15904|4;break}if(m&2|0?(v=a[C+10>>0]|0,w=C+16|0,x=C+12|0,Lg(c[w>>2]|0,D,c[x>>2]|0,v)|0):0){if(Og(c[w>>2]|0,E,c[x>>2]|0,v)|0){q=+g[D>>3];g[C>>3]=q;n=b[B>>1]|0;m=n|8;b[B>>1]=m;o=Mg(q)|0;p=L()|0;f=Sv(o|0,p|0,1,-2147483648)|0;F=L()|0;if((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(o>>>0)+4294967296.0*+(p|0)){m=C;c[m>>2]=o;c[m+4>>2]=p;m=n&15904;G=79}}else{f=E;G=c[f+4>>2]|0;m=C;c[m>>2]=c[f>>2];c[m+4>>2]=G;m=b[B>>1]|0;G=79}if((G|0)==79){m=m|4;b[B>>1]=m}b[B>>1]=m&-3}}}else{if(k<<24>>24<=66){if(k<<24>>24!=66)break;m=b[B>>1]|0;f=m&65535;if(!((f&2|0)!=0|(f&12|0)==0)){Hg(C,1,1)|0;m=b[B>>1]|0}b[B>>1]=m&-13;break}o=b[B>>1]|0;m=o&65535;if(!(m&4)){if(m&8|0){q=+g[C>>3];m=Mg(q)|0;n=L()|0;f=Sv(m|0,n|0,1,-2147483648)|0;F=L()|0;if(!((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0)))break;f=C;c[f>>2]=m;c[f+4>>2]=n;b[B>>1]=o&15904|4;break}if(m&2|0?(y=a[C+10>>0]|0,z=C+16|0,A=C+12|0,Lg(c[z>>2]|0,D,c[A>>2]|0,y)|0):0){if(Og(c[z>>2]|0,E,c[A>>2]|0,y)|0){q=+g[D>>3];g[C>>3]=q;n=b[B>>1]|0;m=n|8;b[B>>1]=m;o=Mg(q)|0;p=L()|0;f=Sv(o|0,p|0,1,-2147483648)|0;F=L()|0;if((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(o>>>0)+4294967296.0*+(p|0)){m=C;c[m>>2]=o;c[m+4>>2]=p;m=n&15904;G=93}}else{f=E;G=c[f+4>>2]|0;m=C;c[m>>2]=c[f>>2];c[m+4>>2]=G;m=b[B>>1]|0;G=93}if((G|0)==93){m=m|4;b[B>>1]=m}b[B>>1]=m&-3}}}while(0);m=b[B>>1]|0;n=m&65535;if(n&12){m=n&65533;b[B>>1]=m}if(j<<24>>24==1|(m&2)==0){m=0;break e}if((a[C+10>>0]|0)==j<<24>>24){m=0;break e}m=Ig(C,j)|0;break e}case 165:{i=c[p+12>>2]|0;G=107;break e}case 114:{h:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=154;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){G=c[14978]|0;j=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&j>>>0<=G>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;G=156}else G=156}else G=155}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=155;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=154;break h}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=154;break h}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=154}while(0);if((G|0)==154)if(!i)G=155;else G=156;if((G|0)==155){c[F>>2]=0;n=0;m=0;break f}else if((G|0)==156){m=i;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));b[i+8>>1]=1;c[i+32>>2]=f;c[F>>2]=i;oh(i);m=0;break e}break}case 146:{i:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=180;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){j=c[14978]|0;E=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;D=L()|0;c[14768]=((D|0)<0|(D|0)==0&E>>>0<=j>>>0)&1}m=Wa[c[29340>>2]&127](i)|0;if(m){i=Wa[c[29352>>2]&127](m)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;v=m}else v=m}else G=181}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=181;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=180;break i}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=180;break i}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=180}while(0);if((G|0)==180)if(!i)G=181;else v=i;if((G|0)==181){c[F>>2]=0;n=0;m=0;break f}m=v;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));b[v+8>>1]=1;c[v+32>>2]=f;c[F>>2]=v;i=v;s=(c[p+8>>2]|0)+2|0;r=(Eu(s)|0)&1073741823;t=r+-1|0;u=(t|0)/2|0;o=u+1|0;p=((o|0)<0)<<31>>31;j:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))G=192;else m=0;else{do if(!(0<p>>>0|(0==(p|0)?(e[f+276>>1]|0)>>>0<o>>>0:0))){n=f+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=193;break j}n=f+296|0;m=c[n>>2]|0;if(!m){m=f+292|0;break}else{c[n>>2]=c[m>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=193;break j}}else m=f+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;G=192}while(0);if((G|0)==192){m=_d(f,o,p)|0;G=193}if((G|0)==193){o=r+-2|0;if(!m)m=0;else{if(r>>>0>2){n=0;do{f=a[s+n>>0]|0;j=a[s+(n|1)>>0]|0;a[m+(n>>>1)>>0]=(0-(j>>>6&1)&9)+j&15|(0-(f>>>6&1)&9)+f<<4;n=n+2|0}while((n|0)<(o|0));n=t>>>1}else n=0;a[m+n>>0]=0}}yc(v,m,u,0,116)|0;m=0;break e}case 159:{k:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=223;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){G=c[14978]|0;j=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&j>>>0<=G>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;G=225}else G=225}else G=224}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=224;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=223;break k}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=223;break k}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=223}while(0);if((G|0)==223)if(!i)G=224;else G=225;if((G|0)==224){c[F>>2]=0;m=0;i=0;break e}else if((G|0)==225){m=i;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));c[i+32>>2]=f;c[F>>2]=i;b[i+8>>1]=4;m=i;c[m>>2]=(a[(c[p+8>>2]|0)+4>>0]|0)==0&1;c[m+4>>2]=0;m=0;break e}break}default:{m=0;i=0;break e}}while(0);i=f+81|0;if((a[i>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;i=f+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[f+236>>2]|0;if(i|0)c[i+12>>2]=7}if(!n){l=7;Ra=H;return l|0}if(!((b[n+8>>1]&9216)==0?!(c[n+24>>2]|0):0))Cg(n);i=c[n+32>>2]|0;if(i|0){if(c[i+480>>2]|0){Xd(i,m);l=7;Ra=H;return l|0}l=n;if((c[i+304>>2]|0)>>>0<=l>>>0?(c[i+308>>2]|0)>>>0>l>>>0:0){l=i+300|0;c[n>>2]=c[l>>2];c[l>>2]=m;l=7;Ra=H;return l|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);l=7;Ra=H;return l|0}else{l=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);l=7;Ra=H;return l|0}}while(0);do if((G|0)==107){f=(Wj(f,i,j,k,F)|0)==0;p=c[F>>2]|0;s=p;if(f&(p|0)!=0){oh(p);r=p+8|0;i=b[r>>1]|0;do if(!(i&8)){n=p;m=c[n>>2]|0;n=c[n+4>>2]|0;if((m|0)==0&(n|0)==-2147483648){g[p>>3]=9223372036854775808.0;i=i&15904|8;b[r>>1]=i;q=9223372036854775808.0;break}else{F=Tv(0,0,m|0,n|0)|0;f=L()|0;C=p;c[C>>2]=F;c[C+4>>2]=f;c[h>>2]=F;c[h+4>>2]=f;q=+g[h>>3];break}}else{q=-+g[p>>3];g[p>>3]=q}while(0);if(k<<24>>24<=66){if(k<<24>>24!=66){m=0;i=s;break}G=i&65535;if(!((G&2|0)!=0|(G&12|0)==0)){Hg(p,j,1)|0;i=b[r>>1]|0}b[r>>1]=i&-13;m=0;i=s;break}m=i&65535;if(!(m&4)){if(m&8|0){m=Mg(q)|0;n=L()|0;G=Sv(m|0,n|0,1,-2147483648)|0;f=L()|0;if(!((f>>>0>0|(f|0)==0&G>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0))){m=0;i=s;break}G=p;c[G>>2]=m;c[G+4>>2]=n;b[r>>1]=i&15904|4;m=0;i=s;break}if(m&2){i=a[p+10>>0]|0;m=p+16|0;n=p+12|0;if(Lg(c[m>>2]|0,D,c[n>>2]|0,i)|0){if(Og(c[m>>2]|0,E,c[n>>2]|0,i)|0){q=+g[D>>3];g[p>>3]=q;m=b[r>>1]|0;i=m|8;b[r>>1]=i;n=Mg(q)|0;o=L()|0;f=Sv(n|0,o|0,1,-2147483648)|0;j=L()|0;if((j>>>0>0|(j|0)==0&f>>>0>1)&q==+(n>>>0)+4294967296.0*+(o|0)){i=p;c[i>>2]=n;c[i+4>>2]=o;i=m&15904;G=122}}else{f=E;G=c[f+4>>2]|0;i=p;c[i>>2]=c[f>>2];c[i+4>>2]=G;i=b[r>>1]|0;G=122}if((G|0)==122){i=i|4;b[r>>1]=i}b[r>>1]=i&-3}m=0;i=s}else{m=0;i=s}}else{m=0;i=s}}else{m=0;i=s}}while(0);c[l>>2]=i;l=m;Ra=H;return l|0}function Xj(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a:while(1){f=c[e+4>>2]|0;if(f&4096)do{if(!(f&262144))e=e+12|0;else e=(c[e+20>>2]|0)+4|0;e=c[e>>2]|0;f=c[e+4>>2]|0}while((f&4096|0)!=0);if(f&512|0){g=0;k=31;break}f=a[e>>0]|0;if(f<<24>>24==-125)e=(c[c[e+20>>2]>>2]|0)+4|0;else{if(f<<24>>24==-88)f=d[e+38>>0]|0;else f=f&255;switch((f&255)<<24>>24){case 36:{k=15;break a}case -94:case -92:{k=26;break a}case -86:break;default:break a}e=(c[c[(c[e+12>>2]|0)+20>>2]>>2]|0)+4+((b[e+32>>1]|0)*20|0)|0}e=c[e>>2]|0}if((k|0)==15){f=c[e+8>>2]|0;g=a[f>>0]|0;if(!(g<<24>>24)){k=67;return k|0}h=67;i=0;while(1){i=i<<8|d[208+(g&255)>>0];f=f+1|0;b:do if((i|0)<1685026146){if((i|0)<1667785074){switch(i|0){case 1651273570:break;default:{k=24;break b}}switch(h<<24>>24){case 69:case 67:{j=65;break b}default:{k=23;break b}}}if((i|0)<1668050786)switch(i|0){case 1667785074:{j=66;break b}default:{k=24;break b}}else switch(i|0){case 1668050786:{j=66;break b}default:{k=24;break b}}}else{if((i|0)>=1919246700){if((i|0)>=1952807028)switch(i|0){case 1952807028:{j=66;break b}default:{k=24;break b}}switch(i|0){case 1919246700:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}else{k=23;break}}if((i|0)<1718382433){switch(i|0){case 1685026146:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}}else{switch(i|0){case 1718382433:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}}j=h}while(0);if((k|0)==23){k=0;j=h}else if((k|0)==24){k=0;if((i&16777215|0)==6909556){g=68;k=31;break}else j=h}g=a[f>>0]|0;if(!(g<<24>>24)){g=j;k=31;break}else h=j}if((k|0)==31)return g|0}else if((k|0)==26){f=c[e+44>>2]|0;if(f|0){e=b[e+32>>1]|0;if(e<<16>>16<=-1){k=68;return k|0}k=a[(c[f+4>>2]|0)+(e<<16>>16<<4)+13>>0]|0;return k|0}}else if((k|0)==31)return g|0;k=a[e+1>>0]|0;return k|0}function Yj(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+20|0;m=a[l>>0]|0;n=m<<24>>24==2;if(n?c[e+4>>2]&1|0:0){a[l>>0]=0;n=2;return n|0}a:do switch(a[e>>0]|0){case -95:{if((m&255)>3){n=0;return n|0}if(c[e+4>>2]&524288|0){n=0;return n|0}a[l>>0]=0;n=2;return n|0}case 59:{if(!(c[e+4>>2]&67108864)){g=c[e+8>>2]|0;k=a[g>>0]|0;j=d[208+(k&255)>>0]|0;f=j+-116|0;k=k<<24>>24==0;if(!(k|(f|0)!=0)){h=41806;i=g;do{i=i+1|0;h=h+1|0;o=a[i>>0]|0;f=(d[208+(o&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(f|0)!=0))}if(f|0){f=j+-102|0;if(!(k|(f|0)!=0)){h=41811;do{g=g+1|0;h=h+1|0;o=a[g>>0]|0;f=(d[208+(o&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(f|0)!=0))}if(f|0){f=18;break a}}a[e>>0]=-97;o=1;return o|0}else f=18;break}case -92:case -93:case -94:{f=18;break}case -88:case -85:break;case -108:switch(m<<24>>24){case 5:{a[e>>0]=114;o=0;return o|0}case 4:{a[l>>0]=0;o=2;return o|0}default:{o=0;return o|0}}default:{o=0;return o|0}}while(0);do if((f|0)==18){if(c[e+4>>2]&8|0){if(n)break;else f=0;return f|0}if(m<<24>>24==3?(c[e+28>>2]|0)==(c[b+24>>2]|0):0){o=0;return o|0}}while(0);a[l>>0]=0;o=2;return o|0}function Zj(b,c){b=b|0;c=c|0;a[b+20>>0]=0;return 2}function _j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=b+4|0;e=Xa[c[f>>2]&255](b,d)|0;a:do if(!e){p=d;while(1){if(c[p+4>>2]&8404992|0){g=0;d=56;break}d=c[p+12>>2]|0;if(d|0?_j(b,d)|0:0){g=2;d=56;break}e=c[p+16>>2]|0;if(!e){d=9;break}d=Xa[c[f>>2]&255](b,e)|0;if(!d)p=e;else{q=d;break a}}if((d|0)==9){k=p+4|0;b:do if(!(c[k>>2]&2048)){d=c[p+20>>2]|0;if(d|0?(i=c[d>>2]|0,(i|0)>0):0){f=d+4|0;d=i;while(1){e=c[f>>2]|0;if(e|0?_j(b,e)|0:0){g=2;break}if((d|0)>1){f=f+20|0;d=d+-1|0}else break b}return g|0}}else{e=c[p+20>>2]|0;if(e|0?(m=b+8|0,h=c[m>>2]|0,h|0):0){j=b+12|0;d=Xa[h&255](b,e)|0;c:do if(!d){d:while(1){if(ak(b,e)|0){g=2;d=56;break}d=c[e+32>>2]|0;f=c[d>>2]|0;if((f|0)>0){i=d+8|0;while(1){d=c[i+20>>2]|0;if(d|0?$j(b,d)|0:0){g=2;d=56;break d}if((a[i+37>>0]&4?(n=c[i+64>>2]|0,n|0):0)?(o=c[n>>2]|0,(o|0)>0):0){d=n+4|0;g=o;while(1){h=c[d>>2]|0;if(h|0?_j(b,h)|0:0){g=2;d=56;break d}if((g|0)>1){d=d+20|0;g=g+-1|0}else break}}if((f|0)>1){i=i+72|0;f=f+-1|0}else break}}d=c[j>>2]|0;if(d|0)bb[d&127](b,e);e=c[e+52>>2]|0;if(!e)break b;d=Xa[c[m>>2]&255](b,e)|0;if(d|0){l=d;break c}}if((d|0)==56)return g|0}else l=d;while(0);if(l&2|0){s=2;return s|0}}}while(0);if(!(c[k>>2]&16777216)){s=0;return s|0}d=c[p+44>>2]|0;if(!d){s=0;return s|0}e:while(1){e=c[d+12>>2]|0;if(e|0?(s=c[e>>2]|0,(s|0)>0):0){e=e+4|0;f=s;while(1){g=c[e>>2]|0;if(g|0?_j(b,g)|0:0){g=2;d=56;break e}if((f|0)>1){e=e+20|0;f=f+-1|0}else break}}e=c[d+8>>2]|0;if(e|0?(r=c[e>>2]|0,(r|0)>0):0){e=e+4|0;f=r;while(1){g=c[e>>2]|0;if(g|0?_j(b,g)|0:0){g=2;d=56;break e}if((f|0)>1){e=e+20|0;f=f+-1|0}else break}}e=c[d+36>>2]|0;if(e|0?_j(b,e)|0:0){g=2;d=56;break}d=c[d+32>>2]|0;if(!d){g=0;d=56;break}}if((d|0)==56)return g|0}else if((d|0)==56)return g|0}else q=e;while(0);s=q&2;return s|0}function $j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!d){m=0;return m|0}l=b+8|0;e=c[l>>2]|0;if(!e){m=0;return m|0}m=b+12|0;e=Xa[e&255](b,d)|0;a:do if(!e){b:while(1){if(ak(b,d)|0){e=2;d=23;break}e=c[d+32>>2]|0;f=c[e>>2]|0;if((f|0)>0){i=e+8|0;while(1){e=c[i+20>>2]|0;if(e|0?$j(b,e)|0:0){e=2;d=23;break b}if((a[i+37>>0]&4?(j=c[i+64>>2]|0,j|0):0)?(k=c[j>>2]|0,(k|0)>0):0){e=j+4|0;g=k;while(1){h=c[e>>2]|0;if(h|0?_j(b,h)|0:0){e=2;d=23;break b}if((g|0)>1){e=e+20|0;g=g+-1|0}else break}}if((f|0)>1){i=i+72|0;f=f+-1|0}else break}}e=c[m>>2]|0;if(e|0)bb[e&127](b,d);d=c[d+52>>2]|0;if(!d){e=0;d=23;break}e=Xa[c[l>>2]&255](b,d)|0;if(e|0)break a}if((d|0)==23)return e|0}while(0);m=e&2;return m|0}function ak(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[b>>2]|0;a:do if(e|0?(f=c[e>>2]|0,(f|0)>0):0){g=e+4|0;e=f;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break a}return e|0}while(0);e=c[b+36>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[b+40>>2]|0;b:do if(e|0?(h=c[e>>2]|0,(h|0)>0):0){g=e+4|0;e=h;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break b}return e|0}while(0);e=c[b+44>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[b+48>>2]|0;c:do if(e|0?(i=c[e>>2]|0,(i|0)>0):0){g=e+4|0;e=i;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break c}return e|0}while(0);e=c[b+60>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[a>>2]|0;if(!e){k=0;return k|0}if((d[e+200>>0]|0)<=1){k=0;return k|0}e=c[b+72>>2]|0;if(!e){k=0;return k|0}d:while(1){f=c[e+12>>2]|0;if(f|0?(j=c[f>>2]|0,(j|0)>0):0){f=f+4|0;g=j;while(1){h=c[f>>2]|0;if(h|0?_j(a,h)|0:0){e=2;f=44;break d}if((g|0)>1){f=f+20|0;g=g+-1|0}else break}}f=c[e+8>>2]|0;if(f|0?(k=c[f>>2]|0,(k|0)>0):0){f=f+4|0;g=k;while(1){h=c[f>>2]|0;if(h|0?_j(a,h)|0:0){e=2;f=44;break d}if((g|0)>1){f=f+20|0;g=g+-1|0}else break}}f=c[e+36>>2]|0;if(f|0?_j(a,f)|0:0){e=2;f=44;break}e=c[e+32>>2]|0;if(!e){e=0;f=44;break}}if((f|0)==44)return e|0;return 0}function bk(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;j=t;if((g|0)==0|(h|0)==0){i=(h|0)==(g|0)?0:2;Ra=t;return i|0}do if(f|0?(a[g>>0]|0)==-108:0){c[j>>2]=0;Wj(c[f>>2]|0,h,1,65,j)|0;s=c[j>>2]|0;if(!s)break;n=b[g+32>>1]|0;j=n<<16>>16;o=c[f+8>>2]|0;n=n<<16>>16>31;k=o+208|0;o=o+208|0;c[(n?o:k)>>2]=c[(n?o:k)>>2]|(n?-2147483648:1<<j+-1);k=c[f+220>>2]|0;a:do if((k|0)!=0?(o=c[k+100>>2]|0,q=j+-1|0,p=o+(q*40|0)|0,q=o+(q*40|0)+8|0,(b[q>>1]&1)==0):0){n=c[k>>2]|0;b:do if(!n){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](40)|0;r=32;break}j=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){o=c[14978]|0;m=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=o>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){n=0;l=0;m=0;k=1;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;o=k}else o=k}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0){n=0;l=0;m=0;k=1;break a}}else{do if((e[n+276>>1]|0)>=40){k=n+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=32;break b}k=n+296|0;j=c[k>>2]|0;if(!j){j=n+292|0;break}else{c[k>>2]=c[j>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=32;break b}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(n,40,0)|0;r=32}while(0);if((r|0)==32)if(!j){n=0;l=0;m=0;k=1;break}else o=j;j=o;k=j+40|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));m=o+8|0;b[m>>1]=1;c[o+32>>2]=n;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];j=b[m>>1]&-1025;b[m>>1]=j;j=j&65535;c:do if(j&18|0?(b[q>>1]&2048)==0:0){k=(j|4096)&65535;b[m>>1]=k;do if(j&16384){l=o+12|0;j=(c[o>>2]|0)+(c[l>>2]|0)|0;if((j|0)<1)if(!(k&16)){r=41;break}else j=1;if(Eg(o,j,1)|0)break c;q=o+16|0;gw((c[q>>2]|0)+(c[l>>2]|0)|0,0,c[o>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[o>>2]|0);j=b[m>>1]&-16897;b[m>>1]=j;if(!((c[o+24>>2]|0)!=0?(c[q>>2]|0)==(c[o+20>>2]|0):0))r=41}else r=41;while(0);if((r|0)==41){if(Jg(o)|0)break;j=b[m>>1]|0}b[m>>1]=j&-4097}while(0);j=b[m>>1]|0;do if((j&15|16)<<16>>16==18){if((j&514)==514){if(!((j&1)==0&(a[o+10>>0]|0)!=1))break}else if(j&1)break;Gg(o,1)|0}while(0);n=(Tg(o,s,0)|0)==0&1;l=o;m=o;k=0}else{n=0;l=0;m=0;k=1}while(0);if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j){if(c[j+480>>2]|0){Xd(j,s);break}q=s;if((c[j+304>>2]|0)>>>0<=q>>>0?(c[j+308>>2]|0)>>>0>q>>>0:0){q=j+300|0;c[s>>2]=c[q>>2];c[q>>2]=s}else r=59}else r=59;while(0);do if((r|0)==59)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);do if(!k){if(!((b[l+8>>1]&9216)==0?!(c[l+24>>2]|0):0))Cg(l);j=c[l+32>>2]|0;if(j|0){if(c[j+480>>2]|0){Xd(j,m);break}s=m;if((c[j+304>>2]|0)>>>0<=s>>>0?(c[j+308>>2]|0)>>>0>s>>>0:0){s=j+300|0;c[m>>2]=c[s>>2];c[s>>2]=m;break}}if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);if(n|0){i=0;Ra=t;return i|0}}while(0);o=g+4|0;p=c[o>>2]|0;n=h+4|0;k=c[n>>2]|0;q=k|p;if(q&1024|0){if(p&1024&k|0?(c[g+8>>2]|0)==(c[h+8>>2]|0):0){i=0;Ra=t;return i|0}i=2;Ra=t;return i|0}m=a[g>>0]|0;j=a[h>>0]|0;if(m<<24>>24==71?1:m<<24>>24!=j<<24>>24){do if(m<<24>>24==106)if((bk(f,c[g+12>>2]|0,h,i)|0)<2){i=1;Ra=t;return i|0}else{j=a[h>>0]|0;break}while(0);if(j<<24>>24==106?(bk(f,g,c[h+12>>2]|0,i)|0)<2:0){i=1;Ra=t;return i|0}i=2;Ra=t;return i|0}d:do switch(m<<24>>24){case -92:case -94:{j=p;break}default:{l=c[g+8>>2]|0;if(!l)j=p;else switch(m<<24>>24){case -95:{m=c[h+8>>2]|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(j|0)!=0))do{l=l+1|0;m=m+1|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(j|0)!=0));if(j|0){i=2;Ra=t;return i|0}if(!(p&16777216)){j=p;break d}if(!(ck(f,c[g+44>>2]|0,c[h+44>>2]|0)|0)){k=c[n>>2]|0;j=c[o>>2]|0;break d}else{i=2;Ra=t;return i|0}}case 106:{m=c[h+8>>2]|0;if(!m){i=2;Ra=t;return i|0}s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(j|0)!=0))do{l=l+1|0;m=m+1|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(j|0)!=0));if(!j){j=p;break d}else j=2;Ra=t;return j|0}case 114:{i=0;Ra=t;return i|0}default:{j=c[h+8>>2]|0;if(!j){j=p;break d}if(!(Bu(l,j)|0)){j=p;break d}else j=2;Ra=t;return j|0}}}}while(0);if((k^j)&2|0){i=2;Ra=t;return i|0}e:do if(!(q&16384)){if(q&2048|0){i=2;Ra=t;return i|0}if((q&8|0)==0?bk(f,c[g+12>>2]|0,c[h+12>>2]|0,i)|0:0){i=2;Ra=t;return i|0}if(bk(f,c[g+16>>2]|0,c[h+16>>2]|0,i)|0){i=2;Ra=t;return i|0}l=c[g+20>>2]|0;m=c[h+20>>2]|0;j=(l|0)==0;k=(m|0)==0;f:do if(!(j&k)){if(j|k){i=2;Ra=t;return i|0}j=c[l>>2]|0;if((j|0)!=(c[m>>2]|0)){i=2;Ra=t;return i|0}if((j|0)>0){j=0;while(1){if((a[l+4+(j*20|0)+12>>0]|0)!=(a[m+4+(j*20|0)+12>>0]|0)){j=2;r=125;break}if(bk(0,c[l+4+(j*20|0)>>2]|0,c[m+4+(j*20|0)>>2]|0,i)|0){j=2;r=125;break}j=j+1|0;if((j|0)>=(c[l>>2]|0))break f}if((r|0)==125){Ra=t;return j|0}}}while(0);switch(a[g>>0]|0){case -97:case 110:break e;default:{}}if(!(q&8192)){if((b[g+32>>1]|0)!=(b[h+32>>1]|0)){i=2;Ra=t;return i|0}g=c[g+28>>2]|0;h=c[h+28>>2]|0;if((g|0)!=(h|0)?(g|0)!=(i|0)|(h|0)>-1:0){i=2;Ra=t;return i|0}}}while(0);i=0;Ra=t;return i|0}function ck(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((a[d+16>>0]|0)!=(a[e+16>>0]|0)){e=1;return e|0}if((a[d+17>>0]|0)!=(a[e+17>>0]|0)){e=1;return e|0}if((a[d+18>>0]|0)!=(a[e+18>>0]|0)){e=1;return e|0}if((a[d+20>>0]|0)!=(a[e+20>>0]|0)){e=1;return e|0}if(bk(b,c[d+24>>2]|0,c[e+24>>2]|0,-1)|0){e=1;return e|0}if(bk(b,c[d+28>>2]|0,c[e+28>>2]|0,-1)|0){e=1;return e|0}g=c[d+8>>2]|0;h=c[e+8>>2]|0;b=(g|0)==0;f=(h|0)==0;a:do if(!(b&f)){if(b|f){e=1;return e|0}b=c[g>>2]|0;if((b|0)!=(c[h>>2]|0)){e=1;return e|0}if((b|0)>0){b=0;while(1){if((a[g+4+(b*20|0)+12>>0]|0)!=(a[h+4+(b*20|0)+12>>0]|0)){b=1;f=23;break}if(bk(0,c[g+4+(b*20|0)>>2]|0,c[h+4+(b*20|0)>>2]|0,-1)|0){b=1;f=23;break}b=b+1|0;if((b|0)>=(c[g>>2]|0))break a}if((f|0)==23)return b|0}}while(0);h=c[d+12>>2]|0;g=c[e+12>>2]|0;b=(h|0)==0;f=(g|0)==0;if(b&f){e=0;return e|0}if(b|f){e=1;return e|0}b=c[h>>2]|0;if((b|0)!=(c[g>>2]|0)){e=1;return e|0}if((b|0)<=0){e=0;return e|0}b=0;while(1){if((a[h+4+(b*20|0)+12>>0]|0)!=(a[g+4+(b*20|0)+12>>0]|0)){b=1;f=23;break}if(bk(0,c[h+4+(b*20|0)>>2]|0,c[g+4+(b*20|0)>>2]|0,-1)|0){b=1;f=23;break}b=b+1|0;if((b|0)>=(c[h>>2]|0)){b=0;f=23;break}}if((f|0)==23)return b|0;return 0}function dk(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;r=t;s=(g|0)!=0;a:do if(s){m=134217728;q=c[g>>2]|0}else{j=ek(d,f)|0;k=((j|0)<0)<<31>>31;if(c[b+272>>2]|0){if(a[b+81>>0]|0){c[r>>2]=0;b=0;Ra=t;return b|0}}else{do if(!(0<k>>>0|(0==(k|0)?(e[b+276>>1]|0)>>>0<j>>>0:0))){h=b+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=0;q=i;break a}h=b+296|0;i=c[h>>2]|0;if(!i){h=b+292|0;break}else{c[h>>2]=c[i>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=0;q=i;break a}}else h=b+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}m=0;q=_d(b,j,k)|0}while(0);c[r>>2]=q;if(!q){b=q;Ra=t;return b|0}n=(f|0)==0;if((!n?(a[d>>0]|0)!=-86:0)?(c[d+4>>2]&16777216|0)==0:0)if(!(c[d+12>>2]|0))j=(c[d+20>>2]|0)==0?16396:8220;else j=8220;else j=52;k=j&60;o=d+4|0;h=c[o>>2]|0;if((h&1024|0)==0?(l=c[d+8>>2]|0,(l|0)!=0):0)i=((Eu(l)|0)&1073741823)+1|0;else i=0;if(n){h=(h&16384|0)==0?((h&8192|0)==0?52:28):12;ew(q|0,d|0,h|0)|0;if(h>>>0<52)gw(q+h|0,0,52-h|0)|0}else ew(q|0,d|0,k|0)|0;l=q+4|0;h=j&24576|m|c[l>>2]&-134307841;c[l>>2]=h;if(i){h=q+k|0;c[q+8>>2]=h;ew(h|0,c[d+8>>2]|0,i|0)|0;h=c[l>>2]|0}i=c[o>>2]|0;do if(!((h|i)&8404992)){h=d+20|0;if(!(i&2048)){f=gk(b,c[h>>2]|0,f)|0;c[q+20>>2]=f;break}else{f=fk(b,c[h>>2]|0,f)|0;c[q+20>>2]=f;break}}while(0);j=c[l>>2]|0;if(!(j&16801792)){if(c[o>>2]&8404992|0){b=q;Ra=t;return b|0}h=d+12|0;if((a[q>>0]|0)==-86)c[q+12>>2]=c[h>>2];else{h=c[h>>2]|0;if(!h)h=0;else h=dk(b,h,0,0)|0;c[q+12>>2]=h}h=c[d+16>>2]|0;if(!h)h=0;else h=dk(b,h,0,0)|0;c[q+16>>2]=h;b=q;Ra=t;return b|0}if((!n?(a[d>>0]|0)!=-86:0)?(c[o>>2]&16777216|0)==0:0)if(!(c[d+12>>2]|0))i=(c[d+20>>2]|0)==0?12:28;else i=28;else i=52;h=c[o>>2]|0;if((h&1024|0)==0?(p=c[d+8>>2]|0,(p|0)!=0):0)i=((Eu(p)|0)&1073741823)+(i|1)|0;c[r>>2]=q+(i+7&-8);if(!(j&8404992)){h=c[d+12>>2]|0;if(!h)h=0;else h=dk(b,h,1,r)|0;c[q+12>>2]=h;h=c[d+16>>2]|0;if(!h)h=0;else h=dk(b,h,1,r)|0;c[q+16>>2]=h;h=c[o>>2]|0}if(h&16777216|0){b=hk(b,q,c[d+44>>2]|0)|0;c[q+44>>2]=b}if(!s){b=q;Ra=t;return b|0}c[g>>2]=c[r>>2];b=q;Ra=t;return b|0}function ek(b,d){b=b|0;d=d|0;var e=0,f=0;if(!b){d=0;return d|0}if(((d|0)!=0?(a[b>>0]|0)!=-86:0)?(c[b+4>>2]&16777216|0)==0:0)if(!(c[b+12>>2]|0))e=(c[b+20>>2]|0)==0?12:28;else e=28;else e=52;if((c[b+4>>2]&1024|0)==0?(f=c[b+8>>2]|0,(f|0)!=0):0)e=((Eu(f)|0)&1073741823)+(e|1)|0;e=e+7&-8;if(!(d&1)){d=e;return d|0}else{f=ek(c[b+12>>2]|0,d)|0;return f+e+(ek(c[b+16>>2]|0,d)|0)|0}return 0}function fk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+32|0;A=G+4|0;B=G;c[B>>2]=0;C=d+81|0;if(!f){F=0;Ra=G;return F|0}D=d+272|0;E=d+276|0;F=d+288|0;s=d+300|0;t=d+296|0;u=d+284|0;v=d+292|0;w=A+4|0;x=A+8|0;y=A+12|0;z=A+24|0;j=0;r=B;a:while(1){do if(c[D>>2]|0)if(!(a[C>>0]|0))q=11;else break a;else{if((e[E>>1]|0)>=76){h=c[s>>2]|0;if(h|0){c[s>>2]=c[h>>2];c[u>>2]=(c[u>>2]|0)+1;break}h=c[t>>2]|0;if(!h)h=v;else{c[t>>2]=c[h>>2];c[u>>2]=(c[u>>2]|0)+1;break}}else h=F;c[h>>2]=(c[h>>2]|0)+1;q=11}while(0);if((q|0)==11){q=0;h=_d(d,76,0)|0}if(!h)break;i=gk(d,c[f>>2]|0,g)|0;c[h>>2]=i;i=ik(d,c[f+32>>2]|0,g)|0;c[h+32>>2]=i;i=c[f+36>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+36>>2]=i;i=gk(d,c[f+40>>2]|0,g)|0;c[h+40>>2]=i;i=c[f+44>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+44>>2]=i;p=gk(d,c[f+48>>2]|0,g)|0;c[h+48>>2]=p;a[h+4>>0]=a[f+4>>0]|0;c[h+56>>2]=j;p=r;r=h+52|0;c[r>>2]=0;i=c[f+60>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+60>>2]=i;c[h+12>>2]=0;c[h+16>>2]=0;c[h+8>>2]=c[f+8>>2]&-33;c[h+24>>2]=-1;c[h+28>>2]=-1;b[h+6>>1]=b[f+6>>1]|0;o=c[f+64>>2]|0;b:do if(o){j=c[o>>2]<<4|8;do if(c[D>>2]|0)if(!(a[C>>0]|0))q=28;else{i=0;break b}else{if(!(0<0|(0==0?(e[E>>1]|0)>>>0<j>>>0:0))){i=c[s>>2]|0;if(i|0){c[s>>2]=c[i>>2];c[u>>2]=(c[u>>2]|0)+1;break}i=c[t>>2]|0;if(!i)i=v;else{c[t>>2]=c[i>>2];c[u>>2]=(c[u>>2]|0)+1;break}}else i=F;c[i>>2]=(c[i>>2]|0)+1;q=28}while(0);if((q|0)==28){q=0;i=_d(d,j,0)|0}if(i){gw(i|0,0,j|0)|0;c[i>>2]=c[o>>2];if((c[o>>2]|0)>0){n=i+8|0;m=0;do{k=fk(d,c[o+8+(m<<4)+8>>2]|0,0)|0;c[n+(m<<4)+8>>2]=k;k=gk(d,c[o+8+(m<<4)+4>>2]|0,0)|0;c[n+(m<<4)+4>>2]=k;k=c[o+8+(m<<4)>>2]|0;c:do if(k){l=(Eu(k)|0)+1|0;d:do if(c[D>>2]|0)if(!(a[C>>0]|0))q=41;else{j=0;break c}else{do if(0<0|(0==0?(e[E>>1]|0)>>>0<l>>>0:0))j=F;else{j=c[s>>2]|0;if(j|0){c[s>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break d}j=c[t>>2]|0;if(!j){j=v;break}c[t>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break d}while(0);c[j>>2]=(c[j>>2]|0)+1;q=41}while(0);if((q|0)==41){q=0;j=_d(d,l,0)|0}if(j)ew(j|0,k|0,l|0)|0;else j=0}else j=0;while(0);c[n+(m<<4)>>2]=j;m=m+1|0}while((m|0)<(c[o>>2]|0))}}else i=0}else i=0;while(0);c[h+64>>2]=i;c[h+68>>2]=0;i=c[f+72>>2]|0;c[A>>2]=0;if(!i)i=0;else{k=A;while(1){j=hk(d,0,i)|0;c[k>>2]=j;if(!j)break;i=c[i+32>>2]|0;if(!i)break;else k=j+32|0}i=c[A>>2]|0}c[h+72>>2]=i;if(c[f+68>>2]|0){c[w>>2]=137;c[x>>2]=138;c[y>>2]=0;c[A>>2]=0;c[z>>2]=h;$j(A,h)|0}c[h+20>>2]=c[f+20>>2];c[p>>2]=h;f=c[f+52>>2]|0;if(!f)break;else j=h}F=c[B>>2]|0;Ra=G;return F|0}function gk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if(!f){A=0;return A|0}A=(d|0)==0;if((!A?(h=f,(c[d+304>>2]|0)>>>0<=h>>>0):0)?(c[d+308>>2]|0)>>>0>h>>>0:0)j=e[d+276>>1]|0;else j=Wa[c[29352>>2]&127](f)|0;k=((j|0)<0)<<31>>31;z=d+272|0;a:do if(c[z>>2]|0)if(!(a[d+81>>0]|0))y=17;else{A=0;return A|0}else{do if(!(0<k>>>0|(0==(k|0)?(e[d+276>>1]|0)>>>0<j>>>0:0))){i=d+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];x=d+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}i=d+296|0;h=c[i>>2]|0;if(!h){h=d+292|0;break}else{c[i>>2]=c[h>>2];x=d+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}}else h=d+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;y=17}while(0);if((y|0)==17)h=_d(d,j,k)|0;if(!h){A=0;return A|0}c[h>>2]=c[f>>2];if((c[f>>2]|0)<=0){A=h;return A|0}r=d+276|0;s=d+81|0;t=d+288|0;u=d+300|0;v=d+296|0;w=d+284|0;x=d+292|0;o=h+4|0;i=0;p=0;q=f+4|0;while(1){j=c[q>>2]|0;do if(j){k=dk(d,j,g,0)|0;c[o>>2]=k;if(!((k|0)==0|(a[j>>0]|0)!=-86))if(!(b[k+32>>1]|0)){n=c[k+16>>2]|0;c[k+12>>2]=n;break}else{c[k+12>>2]=i;n=i;break}else n=i}else{c[o>>2]=0;n=i}while(0);l=c[q+4>>2]|0;b:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;do if(A){k=Sv(m|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&k>>>0>2147483390){i=0;break b}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;y=50;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){B=c[14978]|0;k=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break b}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[z>>2]|0){if(a[s>>0]|0){i=0;break b}}else{if(!(0<0|(0==0?(e[r>>1]|0)>>>0<m>>>0:0))){i=c[u>>2]|0;if(i|0){c[u>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=50;break}i=c[v>>2]|0;if(!i)i=x;else{c[v>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=50;break}}else i=t;c[i>>2]=(c[i>>2]|0)+1}i=_d(d,m,0)|0;y=50}while(0);if((y|0)==50){y=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[o+4>>2]=i;l=c[q+8>>2]|0;c:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;do if(A){B=Sv(m|0,0,-1,-1)|0;k=L()|0;if(k>>>0>0|(k|0)==0&B>>>0>2147483390){i=0;break c}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;y=75;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){B=c[14978]|0;k=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break c}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[z>>2]|0){if(a[s>>0]|0){i=0;break c}}else{if(!(0<0|(0==0?(e[r>>1]|0)>>>0<m>>>0:0))){i=c[u>>2]|0;if(i|0){c[u>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=75;break}i=c[v>>2]|0;if(!i)i=x;else{c[v>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=75;break}}else i=t;c[i>>2]=(c[i>>2]|0)+1}i=_d(d,m,0)|0;y=75}while(0);if((y|0)==75){y=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[o+8>>2]=i;a[o+12>>0]=a[q+12>>0]|0;B=o+13|0;l=a[B>>0]|0;a[B>>0]=l&-2;m=q+13|0;l=a[m>>0]&2|l&-4;a[B>>0]=l;a[B>>0]=l&-10|a[m>>0]&8;c[o+16>>2]=c[q+16>>2];p=p+1|0;if((p|0)>=(c[f>>2]|0))break;else{o=o+20|0;i=n;q=q+20|0}}return h|0}function hk(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!f){d=0;return d|0}j=(b|0)==0;a:do if(j){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](92)|0;m=25;break}g=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){l=c[14978]|0;k=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&k>>>0<=l>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){d=0;return d|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){d=0;return d|0}}else{do if((e[b+276>>1]|0)>=92){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=25;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=25;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,92,0)|0;m=25}while(0);if((m|0)==25)if(!g){d=0;return d|0}else h=g;g=h;i=g+92|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(i|0));k=c[f>>2]|0;b:do if(!k)g=0;else{l=(Eu(k)|0)+1|0;c:do if(j){j=Sv(l|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](l)|0;m=51;break}g=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){n=c[14978]|0;j=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}i=Wa[c[29352>>2]&127](g)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){g=0;break b}}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<l>>>0:0))){i=b+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=51;break c}i=b+296|0;g=c[i>>2]|0;if(!g){g=b+292|0;break}else{c[i>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=51;break c}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,l,0)|0;m=51}while(0);if((m|0)==51)if(!g){g=0;break}ew(g|0,k|0,l|0)|0}while(0);c[h>>2]=g;g=c[f+36>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+36>>2]=g;c[h+40>>2]=c[f+40>>2];g=gk(b,c[f+8>>2]|0,0)|0;c[h+8>>2]=g;g=gk(b,c[f+12>>2]|0,0)|0;c[h+12>>2]=g;a[h+16>>0]=a[f+16>>0]|0;a[h+18>>0]=a[f+18>>0]|0;a[h+17>>0]=a[f+17>>0]|0;a[h+20>>0]=a[f+20>>0]|0;g=c[f+24>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+24>>2]=g;g=c[f+28>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+28>>2]=g;c[h+68>>2]=d;n=h;return n|0}function ik(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!d){f=0;return f|0}i=c[d>>2]|0;v=(i|0)>0;i=(i*72|0)+8|0;j=v?i:80;i=v?((i|0)<0)<<31>>31:0;v=b+272|0;a:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))u=12;else{f=0;return f|0}else{do if(!(i>>>0>0|((i|0)==0?j>>>0>(e[b+276>>1]|0)>>>0:0))){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;u=12}while(0);if((u|0)==12)g=_d(b,j,i)|0;if(!g){f=0;return f|0}t=c[d>>2]|0;c[g+4>>2]=t;c[g>>2]=t;if((c[d>>2]|0)<=0){f=g;return f|0}m=g+8|0;n=b+276|0;o=b+81|0;p=b+288|0;q=b+300|0;r=b+296|0;s=b+284|0;t=b+292|0;l=0;do{c[m+(l*72|0)>>2]=c[d+8+(l*72|0)>>2];i=c[d+8+(l*72|0)+4>>2]|0;b:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=25;else{h=0;break b}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=25}while(0);if((u|0)==25){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+4>>2]=h;i=c[d+8+(l*72|0)+8>>2]|0;c:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=37;else{h=0;break c}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=37}while(0);if((u|0)==37){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+8>>2]=h;i=c[d+8+(l*72|0)+12>>2]|0;d:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=49;else{h=0;break d}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=49}while(0);if((u|0)==49){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+12>>2]=h;c[m+(l*72|0)+36>>2]=c[d+8+(l*72|0)+36>>2];c[m+(l*72|0)+40>>2]=c[d+8+(l*72|0)+40>>2];c[m+(l*72|0)+24>>2]=c[d+8+(l*72|0)+24>>2];c[m+(l*72|0)+28>>2]=c[d+8+(l*72|0)+28>>2];k=m+(l*72|0)+37|0;h=a[k>>0]|0;if(h&2){i=c[d+8+(l*72|0)+64>>2]|0;e:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=62;else{h=0;break e}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=62}while(0);if((u|0)==62){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+64>>2]=h;h=a[k>>0]|0}c[m+(l*72|0)+68>>2]=c[d+8+(l*72|0)+68>>2];if(h&4){k=gk(b,c[d+8+(l*72|0)+64>>2]|0,f)|0;c[m+(l*72|0)+64>>2]=k}h=c[d+8+(l*72|0)+16>>2]|0;c[m+(l*72|0)+16>>2]=h;if(h|0){k=h+32|0;c[k>>2]=(c[k>>2]|0)+1}h=fk(b,c[d+8+(l*72|0)+20>>2]|0,f)|0;c[m+(l*72|0)+20>>2]=h;h=c[d+8+(l*72|0)+44>>2]|0;if(!h)h=0;else h=dk(b,h,f,0)|0;c[m+(l*72|0)+44>>2]=h;i=jk(b,c[d+8+(l*72|0)+48>>2]|0)|0;c[m+(l*72|0)+48>>2]=i;i=d+8+(l*72|0)+56|0;j=c[i+4>>2]|0;k=m+(l*72|0)+56|0;c[k>>2]=c[i>>2];c[k+4>>2]=j;l=l+1|0}while((l|0)<(c[d>>2]|0));return g|0}function jk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!d){v=0;return v|0}v=b+272|0;a:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))t=12;else{v=0;return v|0}else{do if((e[b+276>>1]|0)>=8){g=b+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];u=b+284|0;c[u>>2]=(c[u>>2]|0)+1;break a}g=b+296|0;f=c[g>>2]|0;if(!f){f=b+292|0;break}else{c[g>>2]=c[f>>2];u=b+284|0;c[u>>2]=(c[u>>2]|0)+1;break a}}else f=b+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;t=12}while(0);if((t|0)==12)f=_d(b,8,0)|0;if(!f){v=0;return v|0}u=d+4|0;c[f+4>>2]=c[u>>2];i=c[u>>2]<<3;b:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))t=25;else c[f>>2]=0;else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<i>>>0:0))){g=b+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;t=26;break b}g=b+296|0;h=c[g>>2]|0;if(!h){g=b+292|0;break}else{c[g>>2]=c[h>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;t=26;break b}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;t=25}while(0);if((t|0)==25){h=_d(b,i,0)|0;t=26}if((t|0)==26?(c[f>>2]=h,h|0):0){if((c[u>>2]|0)<=0){v=f;return v|0}n=b+276|0;o=b+81|0;p=b+288|0;q=b+300|0;r=b+296|0;s=b+284|0;m=b+292|0;g=0;while(1){l=c[d>>2]|0;j=c[l+(g<<3)>>2]|0;c:do if(j){k=(Eu(j)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))t=46;else{i=0;break c}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<k>>>0:0))){i=c[q>>2]|0;if(i|0){c[q>>2]=c[i>>2];c[s>>2]=(c[s>>2]|0)+1;break}i=c[r>>2]|0;if(!i)i=m;else{c[r>>2]=c[i>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else i=p;c[i>>2]=(c[i>>2]|0)+1;t=46}while(0);if((t|0)==46){t=0;i=_d(b,k,0)|0}if(i)ew(i|0,j|0,k|0)|0;else i=0}else i=0;while(0);c[h+(g<<3)>>2]=i;c[h+(g<<3)+4>>2]=c[l+(g<<3)+4>>2];g=g+1|0;if((g|0)>=(c[u>>2]|0))break;h=c[f>>2]|0}return f|0}if(c[b+480>>2]|0){Xd(b,f);v=0;return v|0}v=f;if((c[b+304>>2]|0)>>>0<=v>>>0?(c[b+308>>2]|0)>>>0>v>>>0:0){v=b+300|0;c[f>>2]=c[v>>2];c[v>>2]=f;v=0;return v|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);v=0;return v|0}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);v=0;return v|0}return 0}function kk(b,d){b=b|0;d=d|0;var e=0;if((a[d>>0]|0)!=-95)return 0;d=d+44|0;e=c[d>>2]|0;if(!e)return 0;b=b+24|0;c[e+32>>2]=c[(c[b>>2]|0)+68>>2];c[(c[b>>2]|0)+68>>2]=c[d>>2];return 0}function lk(a,b){a=a|0;b=b|0;return (c[a+24>>2]|0)!=(b|0)|0}function mk(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=10-(c[b+56>>2]|0)|0;l=c[b>>2]|0;m=b+64|0;j=c[m>>2]|0;k=n<<2;a:do if(!j){b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))i=12;else{i=28;break a}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0))){g=l+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];l=l+284|0;c[l>>2]=(c[l>>2]|0)+1;break b}g=l+296|0;h=c[g>>2]|0;if(!h){g=l+292|0;break}else{c[g>>2]=c[h>>2];l=l+284|0;c[l>>2]=(c[l>>2]|0)+1;break b}}else g=l+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;i=12}while(0);if((i|0)==12)h=_d(l,k,0)|0;c[m>>2]=h;g=b+60|0;if(h)i=30}else{g=j;i=l+304|0;if(((c[i>>2]|0)>>>0<=g>>>0?(c[l+308>>2]|0)>>>0>g>>>0:0)?!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0)):0){h=j;g=b+60|0;i=30;break}h=Zd(l,j,k,0)|0;if(h|0){c[m>>2]=h;g=b+60|0;i=30;break}if(c[l+480>>2]|0){Xd(l,j);i=28;break}if((c[i>>2]|0)>>>0<=g>>>0?(c[l+308>>2]|0)>>>0>g>>>0:0){i=l+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;i=28;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);i=28;break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);i=28;break}}while(0);if((i|0)==28){c[m>>2]=0;g=b+60|0}else if((i|0)==30){c[g>>2]=n;c[h+(f<<2)>>2]=c[d+108>>2];return}c[g>>2]=0;return}function nk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=Ra;Ra=Ra+16|0;g=h;if((a[b+199>>0]|0)!=2){Ra=h;return}c[g>>2]=f;f=Me(c[b>>2]|0,e,g)|0;i=c[b+8>>2]|0;g=c[i+108>>2]|0;e=b+212|0;Fj(i,171,g,c[e>>2]|0,0,f,-7)|0;if(d<<24>>24)c[e>>2]=g;Ra=h;return}function ok(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+32|0;i=l+16|0;h=l+8|0;k=l;g=c[d+12>>2]|0;e=a[g>>0]|0;if(e<<24>>24==-88)e=a[g+38>>0]|0;switch(e<<24>>24){case -87:{e=g+20|0;j=6;break}case -125:{e=c[g+20>>2]|0;j=6;break}default:f=1}if((j|0)==6)f=c[c[e>>2]>>2]|0;if(c[d+4>>2]&2048|0){e=c[c[c[d+20>>2]>>2]>>2]|0;if((f|0)==(e|0)){k=0;Ra=l;return k|0}c[k>>2]=e;c[k+4>>2]=f;cd(b,39001,k);k=1;Ra=l;return k|0}if((f|0)==1){k=0;Ra=l;return k|0}if(!(c[g+4>>2]&2048)){cd(b,38899,i);k=1;Ra=l;return k|0}else{c[h>>2]=c[c[c[g+20>>2]>>2]>>2];c[h+4>>2]=1;cd(b,39001,h);k=1;Ra=l;return k|0}return 0}function pk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c[d+12>>2]|0;f=a[n>>0]|0;if(f<<24>>24==-88)f=a[n+38>>0]|0;switch(f<<24>>24){case -87:{f=n+20|0;l=6;break}case -125:{f=c[n+20>>2]|0;l=6;break}default:m=1}if((l|0)==6)m=c[c[f>>2]>>2]|0;if(!(c[d+4>>2]&2048))k=0;else k=c[d+20>>2]|0;b=c[b>>2]|0;h=m+1|0;g=((h|0)<0)<<31>>31;a:do if(!b){j=Sv(h|0,g|0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){n=0;return n|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;l=33;break}b=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;d=59064;f=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&f>>>0>0){j=c[14978]|0;i=Tv(f|0,d|0,b|0,((b|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](b)|0;if(!f){n=0;return n|0}d=Wa[c[29352>>2]&127](f)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){n=0;return n|0}}else{do if(!(0<g>>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0<h>>>0:0))){d=b+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];l=b+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break a}d=b+296|0;f=c[d>>2]|0;if(!f){f=b+292|0;break}else{c[d>>2]=c[f>>2];l=b+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break a}}else f=b+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(b,h,g)|0;l=33}while(0);if((l|0)==33)if(!f){n=0;return n|0}b:do if((m|0)>0){h=n+38|0;i=n+20|0;j=n+20|0;if(!k){g=0;while(1){b=a[n>>0]|0;if(b<<24>>24==-88)d=a[h>>0]|0;else d=b;switch(d<<24>>24){case -87:{d=i;l=42;break}case -125:{d=c[j>>2]|0;l=42;break}default:d=n}do if((l|0)==42){l=0;if((c[c[d>>2]>>2]|0)<2)d=n;else{if(b<<24>>24!=-125?(a[h>>0]|0)!=-125:0){d=c[(c[i>>2]|0)+4+(g*20|0)>>2]|0;break}d=c[(c[c[j>>2]>>2]|0)+4+(g*20|0)>>2]|0}}while(0);k=Xj(d)|0;a[f+g>>0]=k;g=g+1|0;if((g|0)==(m|0))break b}}g=0;while(1){b=a[n>>0]|0;if(b<<24>>24==-88)d=a[h>>0]|0;else d=b;switch(d<<24>>24){case -87:{d=i;l=52;break}case -125:{d=c[j>>2]|0;l=52;break}default:d=n}do if((l|0)==52){l=0;if((c[c[d>>2]>>2]|0)<2)d=n;else{if(b<<24>>24!=-125?(a[h>>0]|0)!=-125:0){d=c[(c[i>>2]|0)+4+(g*20|0)>>2]|0;break}d=c[(c[c[j>>2]>>2]|0)+4+(g*20|0)>>2]|0}}while(0);d=Xj(d)|0;b=Xj(c[(c[k>>2]|0)+4+(g*20|0)>>2]|0)|0;if(d<<24>>24==0|b<<24>>24==0)d=(b|d)<<24>>24==0?65:(b&255)+(d&255)&255;else d=d<<24>>24>66|b<<24>>24>66?67:65;a[f+g>>0]=d;g=g+1|0;if((g|0)==(m|0))break b}}while(0);a[f+m>>0]=0;n=f;return n|0}\nfunction gm(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;m=c[j>>2]|0;l=c[m+12>>2]|0;k=a[l>>0]|0;if(k<<24>>24==-88)k=a[l+38>>0]|0;switch(k<<24>>24){case -87:{k=l+20|0;v=6;break}case -125:{k=c[l+20>>2]|0;v=6;break}default:k=1}if((v|0)==6)k=c[c[k>>2]>>2]|0;r=(e[h+52>>1]|0)-i|0;r=(k|0)<(r|0)?k:r;s=h+28|0;if((r|0)<=1){v=1;return v|0}t=h+4|0;u=h+12|0;q=h+32|0;k=1;while(1){o=c[(c[l+20>>2]|0)+4+(k*20|0)>>2]|0;p=c[m+16>>2]|0;l=p+20|0;if(c[p+4>>2]&2048)l=c[l>>2]|0;n=c[(c[l>>2]|0)+4+(k*20|0)>>2]|0;if((a[o>>0]|0)!=-94){v=36;break}if((c[o+28>>2]|0)!=(g|0)){v=36;break}h=b[o+32>>1]|0;p=k+i|0;if(h<<16>>16!=(b[(c[t>>2]|0)+(p<<1)>>1]|0)){v=36;break}m=c[s>>2]|0;if((a[m+p>>0]|0)!=(a[m+i>>0]|0)){v=36;break}l=Xj(o)|0;m=Xj(n)|0;if(l<<24>>24==0|m<<24>>24==0)m=(m|l)<<24>>24==0?65:(m&255)+(l&255)&255;else m=l<<24>>24>66|m<<24>>24>66?67:65;if(h<<16>>16>-1)l=a[(c[(c[u>>2]|0)+4>>2]|0)+(h<<16>>16<<4)+13>>0]|0;else l=68;if(m<<24>>24!=l<<24>>24){v=36;break}do if(!(c[o+4>>2]&256)){if(n|0?c[n+4>>2]&256|0:0){l=Yi(f,n)|0;v=29;break}l=Yi(f,o)|0;if(!l){l=Yi(f,n)|0;v=29}}else{l=Yi(f,o)|0;v=29}while(0);if((v|0)==29){v=0;if(!l){v=36;break}}m=c[l>>2]|0;h=c[(c[q>>2]|0)+(p<<2)>>2]|0;p=a[m>>0]|0;l=(d[208+(p&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(p<<24>>24==0|(l|0)!=0))do{m=m+1|0;h=h+1|0;p=a[m>>0]|0;l=(d[208+(p&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(l|0)!=0));if(l|0){v=36;break}k=k+1|0;if((k|0)>=(r|0)){v=36;break}m=c[j>>2]|0;l=c[m+12>>2]|0}if((v|0)==36)return k|0;return 0}function hm(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;eb=Ra;Ra=Ra+96|0;$a=eb;ab=j&65535;if(j<<16>>16?b[(c[c[f>>2]>>2]|0)+76>>1]&64:0){db=0;Ra=eb;return db|0}Ea=c[g>>2]|0;j=Ea&65535;if(j>>>0>63){db=0;Ra=eb;return db|0}Fa=cw(1,0,j|0)|0;Fa=Sv(Fa|0,L()|0,-1,-1)|0;Ga=L()|0;i=i&65535;Ca=i&2048;Ba=(Ca|0)==0;Ca=Ca>>>11&65535|386;a:do if(!((Fa|0)==0&(Ga|0)==0)){ba=h+24|0;ca=f+4|0;da=(j|0)==0;ea=f+80|0;fa=Ca&65535;ga=$a+4|0;ha=$a+12|0;ia=$a+16|0;ja=$a+8|0;ka=$a+20|0;la=$a+24|0;ma=$a+28|0;na=$a+17|0;oa=$a+18|0;pa=$a+72|0;qa=$a+20|0;ra=$a+4|0;sa=$a+8|0;ta=$a+24|0;ua=f+488|0;xa=(j|0)!=0;ya=(i&192|0)==0;X=(i&64|0)==0;C=1;m=0;W=0;S=0;T=0;i=0;h=0;A=0;B=0;b:while(1){if(!W){U=i;V=h}else{V=m+8|0;U=c[V>>2]|i;V=c[V+4>>2]|h}if(W>>>0<ab>>>0){i=c[(c[ba>>2]|0)+(W<<2)>>2]|0;if(Ba){Na=i;za=10}else{r=C;s=i;q=B;p=A;o=S;n=T}}else{Na=k;za=10}if((za|0)==10){za=0;z=Na+36|0;i=c[z>>2]|0;P=Na+24|0;if(i&1024|0){za=11;break}Q=Na+30|0;b[Q>>1]=0;R=c[(c[ca>>2]|0)+8+((d[Na+16>>0]|0)*72|0)+40>>2]|0;if(da){o=A;p=B}else{v=~U;w=~V;x=Na+40|0;y=Na+48|0;u=0;h=A;m=B;do{s=cw(1,0,u|0)|0;t=L()|0;c:do if((s&h|0)==0&(t&m|0)==0){r=g+4+(u*20|0)|0;i=c[r>>2]|0;n=c[i+4>>2]|0;if(n&4096)do{if(!(n&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;n=c[i+4>>2]|0}while((n&4096|0)!=0);if((a[i>>0]|0)==-94?(c[i+28>>2]|0)==(R|0):0){q=i+32|0;i=b[q>>1]|0;c[$a>>2]=ea;c[ga>>2]=ea;c[ha>>2]=0;a[ia>>0]=0;c[ja>>2]=0;c[ka>>2]=fa;c[la>>2]=0;c[ma>>2]=R;a[na>>0]=1;a[oa>>0]=1;if(i<<16>>16!=-2?(b[pa>>1]=i,Qa=Tl($a)|0,Qa|0):0){o=0;p=Qa;while(1){n=p+32|0;i=c[n>>2]|0;n=c[n+4>>2]|0;if((i&v|0)==0&(n&w|0)==0){if((i|0)==0&(n|0)==0?(Sa=b[p+12>>1]|0,Sa&130):0){za=29;break}Ka=(o|0)==0?p:o}else Ka=o;i=Tl($a)|0;if(!i){za=33;break}else{o=Ka;p=i}}if((za|0)==29){za=0;Ha=p;Ta=Sa}else if((za|0)==33){za=0;if(!Ka)break;Ha=Ka;Ta=b[Ka+12>>1]|0}d:do if(Ta<<16>>16==1){i=b[x>>1]|0;if(!(i<<16>>16))break c;o=c[y>>2]|0;n=i&65535;i=0;while(1){if((Ha|0)==(c[o+(i<<2)>>2]|0))break d;i=i+1|0;if(i>>>0>=n>>>0)break c}}while(0);do if(Ta&130){if((b[q>>1]|0)<=-1)break;p=c[f>>2]|0;o=c[Ha>>2]|0;i=Yi(p,c[r>>2]|0)|0;if(!i)n=c[(c[p>>2]|0)+8>>2]|0;else n=i;i=Yi(p,o)|0;if(!i)i=c[(c[p>>2]|0)+8>>2]|0;n=c[n>>2]|0;o=c[i>>2]|0;O=a[n>>0]|0;i=(d[208+(O&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(O<<24>>24==0|(i|0)!=0))do{n=n+1|0;o=o+1|0;O=a[n>>0]|0;i=(d[208+(O&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(i|0)!=0));if(i|0)break c}while(0);h=s|h;m=t|m;break}}}while(0);u=u+1|0}while((u|0)!=(j|0));i=c[z>>2]|0;o=h;p=m}do if(!(i&4096)){if(!(i&256)){m=c[Na+32>>2]|0;if(!m){bb=0;za=135;break b}O=m+55|0;if((d[O>>0]|d[O+1>>0]<<8)&4){bb=0;za=135;break b}h=b[m+52>>1]|0;i=(a[m+54>>0]|0)!=0&1;if(!(h<<16>>16)){La=i;Va=o;Wa=p;za=117;break}else{n=m;O=b[m+50>>1]|0;N=h&65535}}else{n=0;O=0;i=C;N=1}F=Na+42|0;G=(n|0)==0;H=Na+48|0;I=n+4|0;J=n+28|0;K=n+12|0;M=n+40|0;C=n+32|0;D=cw(1,0,W|0)|0;E=L()|0;h=0;y=0;A=0;B=0;z=o;x=p;e:while(1){o=e[P>>1]|0;q=B>>>0<o>>>0;f:do if(q?B>>>0>=(e[F>>1]|0)>>>0:0){p=c[H>>2]|0;m=c[p+(B<<2)>>2]|0;w=b[m+12>>1]|0;n=w&65535;if((w&Ca)<<16>>16){Aa=h;Y=y;Z=A;$=(n&256|0)==0?i:0;aa=B+1|0;va=z;wa=x;break}if((n&1|0)!=0?(Ua=c[m>>2]|0,Oa=B+1|0,Oa>>>0<o>>>0):0){m=Oa;while(1){if((c[c[p+(m<<2)>>2]>>2]|0)==(Ua|0)){Da=0;za=68;break f}m=m+1|0;if(m>>>0>=o>>>0){Da=1;za=68;break}}}else{Da=1;za=68}}else{Da=1;za=68}while(0);if((za|0)==68){za=0;if(!G){o=b[(c[I>>2]|0)+(B<<1)>>1]|0;m=a[(c[J>>2]|0)+B>>0]|0;n=c[K>>2]|0;o=o<<16>>16==(b[n+40>>1]|0)?-1:o<<16>>16;if(q|(i<<24>>24==0|(o|0)<0)){u=o;_=i}else{u=o;_=(a[(c[n+4>>2]|0)+(o<<4)+12>>0]|0)==0?0:i}}else{m=0;u=-1;_=i}if(!(xa&Da<<24>>24!=0)){za=114;break}s=(u|0)>-2;t=(u|0)==-1;i=0;n=1;g:while(1){v=cw(1,0,i|0)|0;w=L()|0;do if((v&z|0)==0&(w&x|0)==0){r=g+4+(i*20|0)|0;o=c[r>>2]|0;h:do if(!o)o=0;else while(1){p=c[o+4>>2]|0;if(!(p&4096))break h;if(!(p&262144))o=o+12|0;else o=(c[o+20>>2]|0)+4|0;o=c[o>>2]|0;if(!o){o=0;break}}while(0);n=ya?0:n;if(s){if((a[o>>0]|0)!=-94)break;if((c[o+28>>2]|0)!=(R|0))break;if((u|0)!=(b[o+32>>1]|0))break}else{p=c[(c[M>>2]|0)+4+(B*20|0)>>2]|0;i:do if(!o)o=0;else while(1){q=c[o+4>>2]|0;if(!(q&4096))break i;if(!(q&262144))o=o+12|0;else o=(c[o+20>>2]|0)+4|0;o=c[o>>2]|0;if(!o){o=0;break}}while(0);j:do if(!p)p=0;else while(1){q=c[p+4>>2]|0;if(!(q&4096))break j;if(!(q&262144))p=p+12|0;else p=(c[p+20>>2]|0)+4|0;p=c[p>>2]|0;if(!p){p=0;break}}while(0);if(bk(0,o,p,R)|0)break}if(t){n=-1;break g}p=c[f>>2]|0;o=Yi(p,c[r>>2]|0)|0;if(!o)o=c[(c[p>>2]|0)+8>>2]|0;p=c[o>>2]|0;q=c[(c[C>>2]|0)+(B<<2)>>2]|0;r=a[p>>0]|0;o=(d[208+(r&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0;if(!(r<<24>>24==0|(o|0)!=0))do{p=p+1|0;q=q+1|0;r=a[p>>0]|0;o=(d[208+(r&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(o|0)!=0));if(!o){n=u;break g}}while(0);i=i+1|0;if(!(i>>>0<j>>>0&n<<24>>24!=0)){za=114;break e}}o=B+1|0;b[Q>>1]=o;do if(X){if(h<<24>>24)if((m^y)<<24>>24==(a[g+4+(i*20|0)+12>>0]|0)){i=y;break}else{za=114;break e}i=a[g+4+(i*20|0)+12>>0]^m;if(!(i<<24>>24)){h=1;i=0;break}wa=l;Aa=c[wa+4>>2]|E;h=l;c[h>>2]=c[wa>>2]|D;c[h+4>>2]=Aa;h=1}else i=y;while(0);Aa=h;Y=i;Z=(n|0)==-1?1:A;$=_;aa=o;va=v|z;wa=w|x}if(aa>>>0<N>>>0){h=Aa;y=Y;A=Z;B=aa;i=$;z=va;x=wa}else{Ja=Z;Pa=$;Xa=va;Ya=wa;break}}if((za|0)==114){za=0;Ja=A;Pa=(B|0)==0|B>>>0<(O&65535)>>>0?0:_;Xa=z;Ya=x}if(!(Ja<<24>>24)){La=Pa;Va=Xa;Wa=Ya;za=117}else{Ma=1;Za=Xa;_a=Ya}}else{La=C;Va=o;Wa=p;za=117}while(0);if((za|0)==117){za=0;if(!(La<<24>>24)){Ia=0;cb=Va;db=Wa;break a}else{Ma=La;Za=Va;_a=Wa}}v=Na+8|0;u=c[v>>2]|S;v=c[v+4>>2]|T;if(da){r=Ma;s=Na;q=_a;p=Za;o=u;n=v}else{s=~u;t=~v;r=0;q=Za;i=_a;while(1){o=cw(1,0,r|0)|0;p=L()|0;do if((o&q|0)==0&(p&i|0)==0){m=c[g+4+(r*20|0)>>2]|0;if(m){n=Pl(ua,m)|0;h=L()|0;if((n|0)==0&(h|0)==0){a[qa>>0]=1;c[ra>>2]=127;c[sa>>2]=128;c[ta>>2]=0;_j($a,m)|0;if(!(a[qa>>0]|0)){h=q;break}else{n=0;h=0}}}else{n=0;h=0}T=(n&s|0)==0&(h&t|0)==0;h=(T?o:0)|q;i=(T?p:0)|i}else h=q;while(0);r=r+1|0;if((r|0)==(j|0)){r=Ma;s=Na;q=i;p=h;o=u;n=v;break}else q=h}}}if(W>>>0>=ab>>>0|(q>>>0>Ga>>>0|(q|0)==(Ga|0)&p>>>0>=Fa>>>0|r<<24>>24==0)){Ia=r;cb=p;db=q;break a}else{C=r;m=s;W=W+1|0;S=o;T=n;i=U;h=V;A=p;B=q}}if((za|0)==11){db=(a[P+5>>0]|0)==0;Ia=C;cb=db?A:Fa;db=db?B:Ga;break}else if((za|0)==135){Ra=eb;return bb|0}}else{Ia=1;cb=0;db=0}while(0);if((cb|0)==(Fa|0)&(db|0)==(Ga|0)){db=Ea&255;Ra=eb;return db|0}if(Ia<<24>>24){db=-1;Ra=eb;return db|0}if(j>>>0<=1){db=0;Ra=eb;return db|0}while(1){i=j;j=j+-1|0;$a=cw(1,0,j|0)|0;$a=Sv($a|0,L()|0,-1,-1)|0;ab=L()|0;if(($a&cb|0)==($a|0)&(ab&db|0)==(ab|0))break;if((i|0)<=2){bb=0;za=135;break}}if((za|0)==135){Ra=eb;return bb|0}db=j&255;Ra=eb;return db|0}function im(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;do if(h|0){h=d+16|0;j=c[h>>2]|0;k=j+5|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;s=(c[d+4>>2]|0)+j|0;a[s>>0]=a[43977]|0;a[s+1>>0]=a[43978]|0;a[s+2>>0]=a[43979]|0;a[s+3>>0]=a[43980]|0;a[s+4>>0]=a[43981]|0;break}else{wb(d,43977,5);break}}while(0);s=(f|0)>1;do if(s){h=d+16|0;j=c[h>>2]|0;k=j+1|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;a[(c[d+4>>2]|0)+j>>0]=40;break}else{wb(d,44003,1);break}}else if((f|0)!=1){h=d+16|0;j=c[h>>2]|0;k=j+1|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;a[(c[d+4>>2]|0)+j>>0]=a[i>>0]|0;return}else{wb(d,i,1);return}}while(0);o=e+4|0;q=d+16|0;r=d+8|0;m=e+12|0;n=d+4|0;l=0;do{do if(l|0){h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[n>>2]|0)+h>>0]=44;break}else{wb(d,41685,1);break}}while(0);h=b[(c[o>>2]|0)+(l+g<<1)>>1]|0;switch(h<<16>>16){case -2:{h=43996;p=21;break}case -1:{h=38132;p=21;break}default:{h=c[(c[(c[m>>2]|0)+4>>2]|0)+(h<<16>>16<<4)>>2]|0;if(!h){e=0;h=0}else p=21}}if((p|0)==21){p=0;e=(Eu(h)|0)&1073741823}j=c[q>>2]|0;k=j+e|0;if(k>>>0<(c[r>>2]|0)>>>0){if(e|0){c[q>>2]=k;ew((c[n>>2]|0)+j|0,h|0,e|0)|0}}else wb(d,h,e);l=l+1|0}while((l|0)!=(f|0));h=c[q>>2]|0;j=h+1|0;k=j>>>0<(c[r>>2]|0)>>>0;do if(s){if(k){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=41}else wb(d,34066,1);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=a[i>>0]|0}else wb(d,i,1);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=40;break}else{wb(d,44003,1);break}}else if(k){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=a[i>>0]|0;break}else{wb(d,i,1);break}while(0);e=d+4|0;k=0;do{do if(k|0){h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[e>>2]|0)+h>>0]=44;break}else{wb(d,41685,1);break}}while(0);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[e>>2]|0)+h>>0]=63}else wb(d,35133,1);k=k+1|0}while((k|0)!=(f|0));if(!s)return;h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=41;return}else{wb(d,34066,1);return}}function jm(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+16|0;J=M;y=c[f>>2]|0;K=c[d+8>>2]|0;a:do switch(a[y>>0]|0){case 45:case 53:{j=Jj(d,c[y+16>>2]|0,j)|0;break}case 50:{k=K+108|0;i=c[k>>2]|0;if((c[K+112>>2]|0)>(i|0)){c[k>>2]=i+1;K=c[K+104>>2]|0;a[K+(i*20|0)>>0]=73;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=0;c[K+(i*20|0)+8>>2]=j;c[K+(i*20|0)+12>>2]=0;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0;break a}else{Di(K,73,0,j,0)|0;break a}}default:{D=c[g+64>>2]|0;H=D+36|0;if((c[H>>2]&1024|0)==0?(k=c[D+32>>2]|0,(k|0)!=0):0)i=(a[(c[k+28>>2]|0)+h>>0]|0)==0?i:(i|0)==0&1;G=(h|0)>0;b:do if(G){l=c[D+48>>2]|0;k=0;while(1){F=c[l+(k<<2)>>2]|0;if(F|0?(c[F>>2]|0)==(y|0):0)break;k=k+1|0;if((k|0)>=(h|0))break b}lm(g,f);g=j;Ra=M;return g|0}while(0);F=D+40|0;m=e[F>>1]|0;if((m|0)>(h|0)){n=c[D+48>>2]|0;k=0;l=h;do{k=k+((c[c[n+(l<<2)>>2]>>2]|0)==(y|0)&1)|0;l=l+1|0}while((l|0)<(m|0));C=k}else C=0;c[J>>2]=0;if((c[y+4>>2]&2048|0)!=0?(c[c[c[y+20>>2]>>2]>>2]|0)!=1:0){A=c[d>>2]|0;B=dk(A,y,0,0)|0;u=A+81|0;if(!(a[u>>0]|0)){s=B+20|0;q=c[c[s>>2]>>2]|0;t=B+12|0;r=c[(c[t>>2]|0)+20>>2]|0;m=b[F>>1]|0;if((m&65535|0)>(h|0)){p=D+48|0;k=0;o=h;l=0;do{n=c[(c[p>>2]|0)+(o<<2)>>2]|0;if((c[n>>2]|0)==(y|0)?(v=(c[n+24>>2]|0)+-1|0,w=q+4+(v*20|0)|0,x=c[w>>2]|0,(x|0)!=0):0){l=nj(c[d>>2]|0,l,x)|0;c[w>>2]=0;m=r+4+(v*20|0)|0;k=nj(c[d>>2]|0,k,c[m>>2]|0)|0;c[m>>2]=0;m=b[F>>1]|0}o=o+1|0}while((o|0)<(m&65535|0))}else{l=0;k=0}if(q|0)ri(A,q);if(r|0)ri(A,r);c[(c[t>>2]|0)+20>>2]=k;c[c[s>>2]>>2]=l;if(k|0?(c[k>>2]|0)==1:0){l=k+4|0;k=c[l>>2]|0;c[l>>2]=0;l=c[t>>2]|0;if(l|0)ni(A,l);c[t>>2]=k}l=c[(c[s>>2]|0)+48>>2]|0;if(l|0?(z=c[l>>2]|0,(z|0)>0):0){k=0;do{b[l+4+(k*20|0)+16>>1]=0;k=k+1|0}while((k|0)!=(z|0))}if(!(a[u>>0]|0)){m=c[d>>2]|0;n=C<<2;c:do if(!m){z=Sv(n|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390)k=0;else{if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;E=66;break}k=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){z=c[14978]|0;y=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){k=0;break}l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){E=67;break}c[14987]=l;E=67}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];E=m+284|0;c[E>>2]=(c[E>>2]|0)+1;E=66;break c}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];E=m+284|0;c[E>>2]=(c[E>>2]|0)+1;E=66;break c}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;E=66}while(0);if((E|0)==66)if(!k)k=0;else E=67;if((E|0)==67)gw(k|0,0,n|0)|0;m=qk(d,B,4,0,k,J)|0;n=c[J>>2]|0;c[(c[f>>2]|0)+28>>2]=n;l=k}else{l=0;m=5;n=0;k=0}}else{l=0;m=5;n=0;k=0}if(B|0)ni(A,B);y=c[f>>2]|0;B=k}else{m=qk(d,y,4,0,0,J)|0;l=0;n=c[J>>2]|0;B=0}x=(((m|0)==4?(i|0)==0&1:i)|0)!=0;k=x?32:36;z=K+108|0;i=c[z>>2]|0;A=K+112|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;w=c[K+104>>2]|0;a[w+(i*20|0)>>0]=k;b[w+(i*20|0)+2>>1]=0;c[w+(i*20|0)+4>>2]=n;c[w+(i*20|0)+8>>2]=0;c[w+(i*20|0)+12>>2]=0;c[w+(i*20|0)+16>>2]=0;a[w+(i*20|0)+1>>0]=0}else Di(K,k,n,0,0)|0;c[H>>2]=c[H>>2]|2048;t=g+56|0;k=c[t>>2]|0;if(!k){w=d+56|0;k=(c[w>>2]|0)+-1|0;c[w>>2]=k;c[g+16>>2]=k;k=c[t>>2]|0}q=k+C|0;c[t>>2]=q;r=c[d>>2]|0;s=g+60|0;i=c[s>>2]|0;q=q*20|0;d:do if(!i){e:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))E=88;else{E=126;break d}else{do if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0))){n=r+300|0;i=c[n>>2]|0;if(i|0){c[n>>2]=c[i>>2];C=r+284|0;c[C>>2]=(c[C>>2]|0)+1;break e}n=r+296|0;i=c[n>>2]|0;if(!i){i=r+292|0;break}else{c[n>>2]=c[i>>2];C=r+284|0;c[C>>2]=(c[C>>2]|0)+1;break e}}else i=r+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;E=88}while(0);if((E|0)==88)i=_d(r,q,0)|0;c[s>>2]=i;if(!i)E=127;else E=103}else{o=i;p=r+304|0;if(((c[p>>2]|0)>>>0<=o>>>0?(c[r+308>>2]|0)>>>0>o>>>0:0)?!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0)):0){E=103;break}n=Zd(r,i,q,0)|0;if(n|0){c[s>>2]=n;i=n;E=103;break}if(c[r+480>>2]|0){Xd(r,i);E=126;break}if((c[p>>2]|0)>>>0<=o>>>0?(c[r+308>>2]|0)>>>0>o>>>0:0){E=r+300|0;c[i>>2]=c[E>>2];c[E>>2]=i;E=126;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);E=126;break}else{E=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);E=126;break}}while(0);if((E|0)==103){n=b[F>>1]|0;if((n&65535|0)>(h|0)){v=D+48|0;w=j-h|0;s=(m|0)==1;t=(l|0)==0;u=K+104|0;r=x?4:5;o=0;m=i+(k*20|0)|0;q=h;i=n;while(1){if((c[c[(c[v>>2]|0)+(q<<2)>>2]>>2]|0)==(y|0)){p=w+q|0;do if(s){n=c[J>>2]|0;k=c[z>>2]|0;if((c[A>>2]|0)>(k|0)){c[z>>2]=k+1;i=c[u>>2]|0;a[i+(k*20|0)>>0]=-128;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=n;c[i+(k*20|0)+8>>2]=p;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;i=k;k=o;break}else{i=Di(K,128,n,p,0)|0;k=o;break}}else{if(t){k=o;n=0}else{k=o+1|0;n=c[l+(o<<2)>>2]|0}o=c[J>>2]|0;i=c[z>>2]|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;D=c[u>>2]|0;a[D+(i*20|0)>>0]=90;b[D+(i*20|0)+2>>1]=0;c[D+(i*20|0)+4>>2]=o;c[D+(i*20|0)+8>>2]=n;c[D+(i*20|0)+12>>2]=p;c[D+(i*20|0)+16>>2]=0;a[D+(i*20|0)+1>>0]=0;n=o;break}else{i=Di(K,90,o,n,p)|0;n=o;break}}while(0);c[m+4>>2]=i;i=c[z>>2]|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;D=c[u>>2]|0;a[D+(i*20|0)>>0]=50;b[D+(i*20|0)+2>>1]=0;c[D+(i*20|0)+4>>2]=p;c[D+(i*20|0)+8>>2]=0;c[D+(i*20|0)+12>>2]=0;c[D+(i*20|0)+16>>2]=0;a[D+(i*20|0)+1>>0]=0}else Di(K,50,p,0,0)|0;do if((q|0)==(h|0)){c[m>>2]=n;a[m+16>>0]=r;if(G?(I=c[H>>2]|0,(I&1024|0)==0):0){c[m+8>>2]=w;c[m+12>>2]=h;c[H>>2]=I|262144;break}c[m+12>>2]=0}else a[m+16>>0]=-86;while(0);m=m+20|0;i=b[F>>1]|0}else k=o;q=q+1|0;if((q|0)>=(i&65535|0))break;else o=k}}}else if((E|0)==126){c[s>>2]=0;E=127}if((E|0)==127)c[t>>2]=0;k=c[d>>2]|0;do if(B|0){if(k|0){if(c[k+480>>2]|0){Xd(k,B);break}K=B;if((c[k+304>>2]|0)>>>0<=K>>>0?(c[k+308>>2]|0)>>>0>K>>>0:0){K=k+300|0;c[B>>2]=c[K>>2];c[K>>2]=B;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{K=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}while(0)}}while(0);lm(g,f);g=j;Ra=M;return g|0}function km(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!e){k=Jj(d,0,f)|0;if((k|0)==(f|0))return;h=c[d+8>>2]|0;if(!h)return;i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[h+104>>2]|0;a[d+(j*20|0)>>0]=79;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(h,79,k,f,0)|0;return}}h=a[e>>0]|0;j=h<<24>>24==-88;if(j)h=a[e+38>>0]|0;switch(h<<24>>24){case -87:{i=e+20|0;q=7;break}case -125:{i=c[e+20>>2]|0;q=7;break}default:{}}if((q|0)==7?(c[c[i>>2]>>2]|0)>=2:0){if(c[e+4>>2]&2048|0){l=c[d+8>>2]|0;k=Qj(d,e)|0;h=g+-1|0;i=l+108|0;j=c[i>>2]|0;if((c[l+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[l+104>>2]|0;a[d+(j*20|0)>>0]=78;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=h;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(l,78,k,f,h)|0;return}}e=c[e+20>>2]|0;if((g|0)<=0)return;m=d+8|0;l=0;do{h=c[e+4+(l*20|0)>>2]|0;n=l+f|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(d,h,n)|0;q=21;break}k=c[m>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;k=c[k+104>>2]|0;a[k+(j*20|0)>>0]=78;b[k+(j*20|0)+2>>1]=0;c[k+(j*20|0)+4>>2]=h;c[k+(j*20|0)+8>>2]=n;c[k+(j*20|0)+12>>2]=0;c[k+(j*20|0)+16>>2]=0;a[k+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,n,0)|0;break}}else{p=Jj(d,0,n)|0;q=21}while(0);do if(((q|0)==21?(q=0,(p|0)!=(n|0)):0)?(o=c[m>>2]|0,o|0):0){h=o+108|0;i=c[h>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[h>>2]=i+1;k=c[o+104>>2]|0;a[k+(i*20|0)>>0]=79;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=p;c[k+(i*20|0)+8>>2]=n;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;break}else{Di(o,79,p,n,0)|0;break}}while(0);l=l+1|0}while((l|0)!=(g|0));return}if(j){k=c[d+8>>2]|0;h=c[e+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[k+104>>2]|0;a[d+(j*20|0)>>0]=78;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=h;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(k,78,h,f,0)|0;return}}k=Jj(d,e,f)|0;if((k|0)==(f|0))return;h=c[d+8>>2]|0;if(!h)return;i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[h+104>>2]|0;a[d+(j*20|0)>>0]=79;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(h,79,k,f,0)|0;return}}function lm(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=e+10|0;g=b[h>>1]|0;if(g&4)return;q=d+72|0;if(!(c[d>>2]|0)){m=q;l=c[m>>2]|0;m=c[m+4>>2]|0;f=e;k=0;i=g;n=h;while(1){j=f+40|0;if(!((c[j>>2]&l|0)==0?(c[j+4>>2]&m|0)==0:0)){d=22;break}if((k|0)!=0?(o=i&65535,(o&1024|0)!=0):0)d=(o|512)&65535;else d=i|4;b[n>>1]=d;j=c[f+16>>2]|0;if((j|0)<0){d=22;break}d=c[(c[f+4>>2]|0)+20>>2]|0;i=d+(j*48|0)+14|0;n=(a[i>>0]|0)+-1<<24>>24;a[i>>0]=n;if(n<<24>>24){d=22;break}n=d+(j*48|0)+10|0;i=b[n>>1]|0;if(i&4){d=22;break}else{f=d+(j*48|0)|0;k=k+1|0}}if((d|0)==22)return}i=0;while(1){if(!(c[(c[e>>2]|0)+4>>2]&1)){d=22;break}o=q;n=e+40|0;if(!((c[n>>2]&c[o>>2]|0)==0?(c[n+4>>2]&c[o+4>>2]|0)==0:0)){d=22;break}if((i|0)!=0?(p=g&65535,(p&1024|0)!=0):0)d=(p|512)&65535;else d=g|4;b[h>>1]=d;f=c[e+16>>2]|0;if((f|0)<0){d=22;break}d=c[(c[e+4>>2]|0)+20>>2]|0;n=d+(f*48|0)+14|0;o=(a[n>>0]|0)+-1<<24>>24;a[n>>0]=o;if(o<<24>>24){d=22;break}h=d+(f*48|0)+10|0;g=b[h>>1]|0;if(g&4){d=22;break}else{e=d+(f*48|0)|0;i=i+1|0}}if((d|0)==22)return}function mm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((a[d>>0]|0)==44)do{mm(c[d+12>>2]|0,e,f);d=c[d+16>>2]|0}while((a[d>>0]|0)==44);i=f+12|0;if((c[i>>2]|0)<=0)return;f=c[f+20>>2]|0;g=0;while(1){h=f+10|0;if((b[h>>1]&4)==0?(bk(0,c[f>>2]|0,d,e)|0)==0:0)b[h>>1]=b[h>>1]|4;g=g+1|0;if((g|0)>=(c[i>>2]|0))break;else f=f+48|0}return}function nm(d,e){d=d|0;e=e|0;d=c[d+24>>2]|0;if(bk(0,e,c[d>>2]|0,c[d+4>>2]|0)|0){e=0;return e|0}a[e>>0]=-94;c[e+28>>2]=c[d+8>>2];b[e+32>>1]=c[d+12>>2];c[e+44>>2]=0;e=1;return e|0}function om(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=c[c[c[a>>2]>>2]>>2]|0;d=c[a+12>>2]|0;o=a+20|0;if((d|0)>0){p=(q|0)==0;i=q+480|0;j=q+304|0;k=q+308|0;l=q+300|0;h=c[o>>2]|0;while(1){g=d;d=d+-1|0;f=h+10|0;e=b[f>>1]|0;if((e&1)!=0?(m=c[h>>2]|0,(m|0)!=0):0){ni(q,m);e=b[f>>1]|0}e=e&65535;do if(!(e&16)){if(e&32|0?(n=c[h+28>>2]|0,om(n),n|0):0){if(!p){if(c[i>>2]|0){Xd(q,n);break}f=n;if((c[j>>2]|0)>>>0<=f>>>0?(c[k>>2]|0)>>>0>f>>>0:0){c[n>>2]=c[l>>2];c[l>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}}else{e=c[h+28>>2]|0;om(e);if(e|0){if(!p){if(c[i>>2]|0){Xd(q,e);break}f=e;if((c[j>>2]|0)>>>0<=f>>>0?(c[k>>2]|0)>>>0>f>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}}while(0);if((g|0)<=1)break;else h=h+48|0}}d=c[o>>2]|0;if((d|0)==(a+24|0))return;if(!d)return;if(q|0){if(c[q+480>>2]|0){Xd(q,d);return}a=d;if((c[q+304>>2]|0)>>>0<=a>>>0?(c[q+308>>2]|0)>>>0>a>>>0:0){q=q+300|0;c[d>>2]=c[q>>2];c[q>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{q=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function pm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))j=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);p=d+19|0;i=a[p>>0]|0;if(!(i<<24>>24)){n=d+44|0;o=(c[n>>2]|0)+1|0;c[n>>2]=o}else{o=i+-1<<24>>24;a[p>>0]=o;o=c[d+148+((o&255)<<2)>>2]|0}m=h+108|0;i=c[m>>2]|0;n=h+112|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=70;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=0;c[l+(i*20|0)+8>>2]=o;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else Di(h,70,0,o,0)|0;do if((g|0)>2){i=a[p>>0]|0;if(!(i<<24>>24)){k=d+44|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l}else{l=i+-1<<24>>24;a[p>>0]=l;l=c[d+148+((l&255)<<2)>>2]|0}i=c[m>>2]|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;k=c[h+104>>2]|0;a[k+(i*20|0)>>0]=110;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=0;c[k+(i*20|0)+8>>2]=l;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else i=Di(h,110,0,l,0)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;j=c[h+104>>2]|0;k=j+(i*20|0)+1|0;if(!(a[k>>0]|0)){c[j+(i*20|0)+16>>2]=59952;a[k>>0]=-1;break}else{Ei(h,j+(i*20|0)|0,59952,-1);break}}while(0);i=c[m>>2]|0;j=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;k=c[h+104>>2]|0;a[k+(i*20|0)>>0]=57;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=l;c[k+(i*20|0)+8>>2]=j;c[k+(i*20|0)+12>>2]=f;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else Di(h,57,l,j,f)|0;i=c[m>>2]|0;if((i|0)>0)b[(c[h+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=83}else{i=c[m>>2]|0;j=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=15;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=f;c[l+(i*20|0)+8>>2]=j;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0;break}else{Di(h,15,f,j,0)|0;break}}while(0);j=c[18208+(g<<2)>>2]|0;i=c[m>>2]|0;k=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=j;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=o;c[l+(i*20|0)+8>>2]=k;c[l+(i*20|0)+12>>2]=f;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else Di(h,j,o,k,f)|0;i=c[d+116>>2]|0;a[((i|0)==0?d:i)+21>>0]=1;i=c[m>>2]|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[h+104>>2]|0;a[f+(i*20|0)>>0]=69;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=1;c[f+(i*20|0)+8>>2]=2;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(h,69,1,2,0)|0;if(!(a[(c[h>>2]|0)+81>>0]|0)){n=c[18176+(g<<2)>>2]|0;f=c[h+104>>2]|0;g=(c[m>>2]|0)+-1|0;a[f+(g*20|0)+1>>0]=-1;c[f+(g*20|0)+16>>2]=n}if(!o)return;h=a[p>>0]|0;if((h&255)>=8)return;a[p>>0]=h+1<<24>>24;c[d+148+((h&255)<<2)>>2]=o;return}function qm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))q=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;q=15}while(0);if((q|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);if(!f)return;n=f+84|0;o=h+108|0;p=h+112|0;g=(g|0)==0;m=h+104|0;do{if(((c[n>>2]|0)==0?(c[(c[f+40>>2]|0)+4>>2]&4096|0)!=0:0)?(a[f+17>>0]|0)!=87:0){d=f+52|0;i=c[d>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=73;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=i;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,73,0,i,0)|0;i=f+56|0;j=c[i>>2]|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;l=c[m>>2]|0;a[l+(k*20|0)>>0]=32;b[l+(k*20|0)+2>>1]=0;c[l+(k*20|0)+4>>2]=j;c[l+(k*20|0)+8>>2]=0;c[l+(k*20|0)+12>>2]=0;c[l+(k*20|0)+16>>2]=0;a[l+(k*20|0)+1>>0]=0}else Di(h,32,j,0,0)|0;k=c[i>>2]|0;i=c[d>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=90;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=0;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,90,k,0,i)|0;j=c[o>>2]|0;if(!(a[(c[h>>2]|0)+81>>0]|0))i=(c[m>>2]|0)+((((j|0)<2?-1:-2)+j|0)*20|0)|0;else i=59308;c[i+8>>2]=j}else q=37;do if((q|0)==37?(q=0,(c[f+60>>2]|0)==0):0){i=c[(c[f+68>>2]|0)+20>>2]|0;if(!i)d=0;else d=c[i>>2]|0;l=f+48|0;k=c[l>>2]|0;if(g){i=c[f+52>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=-100;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=d;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,156,k,d,i)|0;i=c[f+40>>2]|0;j=c[h>>2]|0;if(!(a[j+81>>0]|0)){d=c[m>>2]|0;l=(c[o>>2]|0)+-1|0;a[d+(l*20|0)+1>>0]=-8;c[d+(l*20|0)+16>>2]=i;break}if(!(c[i+4>>2]&16))break;if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}l=i;if((c[j+304>>2]|0)>>>0<=l>>>0?(c[j+308>>2]|0)>>>0>l>>>0:0){l=j+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}i=c[o>>2]|0;if((c[p>>2]|0)>(i|0)){c[o>>2]=i+1;j=c[m>>2]|0;a[j+(i*20|0)>>0]=-99;b[j+(i*20|0)+2>>1]=0;c[j+(i*20|0)+4>>2]=k;c[j+(i*20|0)+8>>2]=d;c[j+(i*20|0)+12>>2]=0;c[j+(i*20|0)+16>>2]=0;a[j+(i*20|0)+1>>0]=0}else Di(h,157,k,d,0)|0;i=c[f+40>>2]|0;j=c[h>>2]|0;do if(a[j+81>>0]|0){if(c[i+4>>2]&16|0){if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}d=i;if((c[j+304>>2]|0)>>>0<=d>>>0?(c[j+308>>2]|0)>>>0>d>>>0:0){d=j+300|0;c[i>>2]=c[d>>2];c[d>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}else{k=c[m>>2]|0;d=(c[o>>2]|0)+-1|0;a[k+(d*20|0)+1>>0]=-8;c[k+(d*20|0)+16>>2]=i}while(0);i=c[l>>2]|0;j=c[f+52>>2]|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;d=c[m>>2]|0;a[d+(k*20|0)>>0]=78;b[d+(k*20|0)+2>>1]=0;c[d+(k*20|0)+4>>2]=i;c[d+(k*20|0)+8>>2]=j;c[d+(k*20|0)+12>>2]=0;c[d+(k*20|0)+16>>2]=0;a[d+(k*20|0)+1>>0]=0}else Di(h,78,i,j,0)|0;i=c[l>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=73;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=i;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0;break}else{Di(h,73,0,i,0)|0;break}}while(0);f=c[f+32>>2]|0}while((f|0)!=0);return}function rm(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;J=d+4|0;K=c[J>>2]|0;M=c[d+8>>2]|0;l=K+84|0;L=c[d>>2]|0;do if(!(c[l>>2]|0)){if(!K){j=M+108|0;h=M+112|0;break}s=L+56|0;t=L+19|0;u=L+44|0;j=M+108|0;h=M+112|0;v=M+104|0;w=K+44|0;x=M+12|0;r=K;do{o=(c[r+40>>2]|0)+32|0;f=c[o>>2]|0;if((f|0)==43457|(f|0)==43467){m=c[r+56>>2]|0;p=c[s>>2]|0;k=p+-1|0;c[s>>2]=k;f=a[t>>0]|0;if(!(f<<24>>24)){n=(c[u>>2]|0)+1|0;c[u>>2]=n}else{n=f+-1<<24>>24;a[t>>0]=n;n=c[L+148+((n&255)<<2)>>2]|0}l=r+52|0;f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=73;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=0;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,73,0,f,0)|0;do if((c[o>>2]|0)!=43457){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=70;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=1;c[K+(f*20|0)+8>>2]=n;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0;break}else{Di(M,70,1,n,0)|0;break}}else{f=c[w>>2]|0;g=(c[r+76>>2]|0)+1|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=f;c[K+(i*20|0)+8>>2]=g;c[K+(i*20|0)+12>>2]=n;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,90,f,g,n)|0;pm(L,n,2)}while(0);f=r+60|0;g=c[f>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=100;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=g;c[K+(i*20|0)+12>>2]=n;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,100,n,g,n)|0;f=(c[f>>2]|0)+1|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=54;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=f;c[K+(g*20|0)+8>>2]=k;c[K+(g*20|0)+12>>2]=n;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,54,f,k,n)|0;f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=30;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=m;c[K+(f*20|0)+8>>2]=0;c[K+(f*20|0)+12>>2]=n;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,30,m,0,n)|0;i=c[r+76>>2]|0;f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=90;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=m;c[K+(g*20|0)+8>>2]=i;c[K+(g*20|0)+12>>2]=f;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,90,m,i,f)|0;g=c[x>>2]|0;f=0-p|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,M,f);else c[(c[g+64>>2]|0)+(f<<2)>>2]=c[j>>2];if(n|0?(y=a[t>>0]|0,(y&255)<8):0){a[t>>0]=y+1<<24>>24;c[L+148+((y&255)<<2)>>2]=n}}else if((f|0)==40587|(f|0)==40592){k=c[c[(c[r+68>>2]|0)+20>>2]>>2]|0;n=c[r+56>>2]|0;q=c[s>>2]|0;m=q+-1|0;c[s>>2]=m;f=a[t>>0]|0;if(!(f<<24>>24)){p=(c[u>>2]|0)+1|0;c[u>>2]=p}else{p=f+-1<<24>>24;a[t>>0]=p;p=c[L+148+((p&255)<<2)>>2]|0}l=c[w>>2]|0;do if((k|0)<3){f=c[r+52>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=73;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=0;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0;break}else{Di(M,73,0,f,0)|0;break}}else{f=(c[r+76>>2]|0)+2|0;g=c[r+52>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=l;c[K+(i*20|0)+8>>2]=f;c[K+(i*20|0)+12>>2]=g;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0;break}else{Di(M,90,l,f,g)|0;break}}while(0);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=-128;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=l;c[K+(f*20|0)+8>>2]=p;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,128,l,p,0)|0;f=(c[o>>2]|0)==40587;do if((k|0)<2){f=f?1:-1;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=83;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=p;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0;break}else{Di(M,83,p,f,0)|0;break}}else{k=f?100:101;f=a[t>>0]|0;if(!(f<<24>>24)){i=(c[u>>2]|0)+1|0;c[u>>2]=i}else{i=f+-1<<24>>24;a[t>>0]=i;i=c[L+148+((i&255)<<2)>>2]|0}f=(c[r+76>>2]|0)+1|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=90;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=l;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=i;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,90,l,f,i)|0;f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=k;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=i;c[K+(f*20|0)+8>>2]=p;c[K+(f*20|0)+12>>2]=p;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,k,i,p,p)|0;if(i|0?(z=a[t>>0]|0,(z&255)<8):0){a[t>>0]=z+1<<24>>24;c[L+148+((z&255)<<2)>>2]=i}}while(0);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=30;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=n;c[K+(f*20|0)+8>>2]=m;c[K+(f*20|0)+12>>2]=p;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,30,n,m,p)|0;f=c[r+76>>2]|0;g=c[r+52>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=f;c[K+(i*20|0)+12>>2]=g;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,90,n,f,g)|0;g=c[x>>2]|0;f=0-q|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,M,f);else c[(c[g+64>>2]|0)+(f<<2)>>2]=c[j>>2];if(p|0?(A=a[t>>0]|0,(A&255)<8):0){a[t>>0]=A+1<<24>>24;c[L+148+((A&255)<<2)>>2]=p}}r=c[r+32>>2]|0}while((r|0)!=0)}else{C=c[K+56>>2]|0;n=K+12|0;f=c[n>>2]|0;if(!f)E=0;else E=c[f>>2]|0;D=L+56|0;A=c[D>>2]|0;y=A+-1|0;m=A+-2|0;c[D>>2]=m;D=L+19|0;f=a[D>>0]|0;do if(f<<24>>24){B=f+-1<<24>>24;a[D>>0]=B;g=c[L+148+((B&255)<<2)>>2]|0;if(!(B<<24>>24)){h=L+44|0;f=h;h=c[h>>2]|0;t=8;break}else{f=f+-2<<24>>24;a[D>>0]=f;B=c[L+148+((f&255)<<2)>>2]|0;break}}else{f=L+44|0;h=(c[f>>2]|0)+1|0;c[f>>2]=h;g=h;t=8}while(0);if((t|0)==8){B=h+1|0;c[f>>2]=B;f=0}z=(E|0)!=0;a:do if(z)if((E|0)!=1){j=L+32|0;h=c[j>>2]|0;k=L+28|0;f=c[k>>2]|0;if((f|0)<(E|0)){x=L+44|0;i=c[x>>2]|0;c[x>>2]=i+E;i=i+1|0}else{x=h+E|0;c[j>>2]=x;f=f-E|0;c[k>>2]=f;i=h;h=x}if((f|0)<(E|0)){w=L+44|0;x=c[w>>2]|0;c[w>>2]=x+E;w=i;x=x+1|0;break}else{c[j>>2]=h+E;c[k>>2]=f-E;w=i;x=h;break}}else{do if(f<<24>>24){x=f+-1<<24>>24;a[D>>0]=x;h=c[L+148+((x&255)<<2)>>2]|0;if(!(x<<24>>24)){i=L+44|0;f=i;i=c[i>>2]|0;break}else{x=f+-2<<24>>24;a[D>>0]=x;w=h;x=c[L+148+((x&255)<<2)>>2]|0;break a}}else{f=L+44|0;i=(c[f>>2]|0)+1|0;c[f>>2]=i;h=i}while(0);x=i+1|0;c[f>>2]=x;w=h;break}else{w=0;x=0}while(0);k=K+44|0;f=c[k>>2]|0;j=M+108|0;i=c[j>>2]|0;h=M+112|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;v=M+104|0;u=c[v>>2]|0;a[u+(i*20|0)>>0]=-128;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=f;c[u+(i*20|0)+8>>2]=g;c[u+(i*20|0)+12>>2]=0;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0}else{Di(M,128,f,g,0)|0;v=M+104|0}vm(d,c[k>>2]|0,w);f=K;do{i=c[f+48>>2]|0;k=c[j>>2]|0;if((c[h>>2]|0)>(k|0)){c[j>>2]=k+1;u=c[v>>2]|0;a[u+(k*20|0)>>0]=73;b[u+(k*20|0)+2>>1]=0;c[u+(k*20|0)+4>>2]=0;c[u+(k*20|0)+8>>2]=i;c[u+(k*20|0)+12>>2]=0;c[u+(k*20|0)+16>>2]=0;a[u+(k*20|0)+1>>0]=0}else Di(M,73,0,i,0)|0;f=c[f+32>>2]|0}while((f|0)!=0);f=c[l>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;u=c[v>>2]|0;a[u+(i*20|0)>>0]=24;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=C;c[u+(i*20|0)+8>>2]=m;c[u+(i*20|0)+12>>2]=f;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0}else Di(M,24,C,m,f)|0;u=c[j>>2]|0;if((c[h>>2]|0)>(u|0)){c[j>>2]=u+1;s=c[v>>2]|0;a[s+(u*20|0)>>0]=-128;b[s+(u*20|0)+2>>1]=0;c[s+(u*20|0)+4>>2]=C;c[s+(u*20|0)+8>>2]=B;c[s+(u*20|0)+12>>2]=0;c[s+(u*20|0)+16>>2]=0;a[s+(u*20|0)+1>>0]=0}else Di(M,128,C,B,0)|0;f=c[K+88>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;s=c[v>>2]|0;a[s+(i*20|0)>>0]=54;b[s+(i*20|0)+2>>1]=0;c[s+(i*20|0)+4>>2]=f;c[s+(i*20|0)+8>>2]=m;c[s+(i*20|0)+12>>2]=B;c[s+(i*20|0)+16>>2]=0;a[s+(i*20|0)+1>>0]=0}else Di(M,54,f,m,B)|0;s=K+20|0;f=a[s>>0]|0;b:do switch(f<<24>>24){case 82:{f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=53;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=g;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=B;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break b}else{Di(M,53,g,y,B)|0;break b}}case 66:break;default:{p=c[n>>2]|0;if(!p){k=0;l=0}else{q=c[L>>2]|0;r=c[p>>2]|0;m=r+1|0;n=m*5|0;k=n+20|0;l=q+272|0;c:do if(c[l>>2]|0)if(!(a[q+81>>0]|0))t=56;else{f=0;i=0}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<k>>>0:0))){f=q+300|0;i=c[f>>2]|0;if(i|0){c[f>>2]=c[i>>2];o=q+284|0;c[o>>2]=(c[o>>2]|0)+1;o=i;t=57;break c}f=q+296|0;i=c[f>>2]|0;if(!i){f=q+292|0;break}else{c[f>>2]=c[i>>2];o=q+284|0;c[o>>2]=(c[o>>2]|0)+1;o=i;t=57;break c}}else f=q+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;t=56}while(0);if((t|0)==56){o=_d(q,k,0)|0;t=57}d:do if((t|0)==57){if(o|0){l=o+16|0;c[l>>2]=o+20+(m<<2);b[o+6>>1]=r;b[o+8>>1]=m;a[o+4>>0]=a[q+78>>0]|0;c[o+12>>2]=q;c[o>>2]=1;gw(o+24|0,0,n+-4|0)|0;if((r|0)<=0){f=o;i=o;break}i=p+4|0;k=0;while(1){f=Yi(L,c[i>>2]|0)|0;if(!f)f=c[(c[L>>2]|0)+8>>2]|0;c[o+20+(k<<2)>>2]=f;a[(c[l>>2]|0)+k>>0]=a[i+12>>0]|0;k=k+1|0;if((k|0)==(r|0)){f=o;i=o;break d}else i=i+20|0}}f=q+81|0;if((a[f>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[f>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[l>>2]=(c[l>>2]|0)+1;f=c[q+236>>2]|0;if(f){c[f+12>>2]=7;f=o;i=0}else{f=o;i=0}}else{f=o;i=0}}while(0);k=f;f=a[s>>0]|0;l=i}do if(f<<24>>24==91){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;m=c[v>>2]|0;a[m+(f*20|0)>>0]=53;b[m+(f*20|0)+2>>1]=0;c[m+(f*20|0)+4>>2]=g;c[m+(f*20|0)+8>>2]=0;c[m+(f*20|0)+12>>2]=B;c[m+(f*20|0)+16>>2]=0;a[m+(f*20|0)+1>>0]=0;m=f;break}else{m=Di(M,53,g,0,B)|0;break}}else m=0;while(0);do if(!k){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=11;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=0;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=0;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break}else{Di(M,11,0,y,0)|0;break}}else{vm(d,C,x);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=87;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=x;c[t+(f*20|0)+8>>2]=w;c[t+(f*20|0)+12>>2]=E;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0}else Di(M,87,x,w,E)|0;f=c[M>>2]|0;e:do if(a[f+81>>0]|0){if(!((l|0)==0|(c[f+480>>2]|0)!=0)?(t=(c[l>>2]|0)+-1|0,c[l>>2]=t,(t|0)==0):0){f=c[l+12>>2]|0;do if(f|0){if(c[f+480>>2]|0){Xd(f,l);break e}i=l;if((c[f+304>>2]|0)>>>0>i>>>0)break;if((c[f+308>>2]|0)>>>0<=i>>>0)break;t=f+300|0;c[l>>2]=c[t>>2];c[t>>2]=l;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else{s=c[v>>2]|0;t=(c[j>>2]|0)+-1|0;a[s+(t*20|0)+1>>0]=-9;c[s+(t*20|0)+16>>2]=l}while(0);f=c[j>>2]|0;i=f+1|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=i;t=c[v>>2]|0;a[t+(f*20|0)>>0]=16;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=i;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=i;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break}else{Di(M,16,i,y,i)|0;break}}while(0);if(m|0){i=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))f=(c[v>>2]|0)+(((m|0)<0?i+-1|0:m)*20|0)|0;else f=59308;c[f+8>>2]=i}}}while(0);wm(L,K,C,0,c[d+20>>2]|0);i=c[M+12>>2]|0;f=0-A|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,M,f);else c[(c[i+64>>2]|0)+(f<<2)>>2]=c[j>>2];f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=5;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=C;c[K+(f*20|0)+8>>2]=u;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,5,C,u,0)|0;i=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0)){f=c[v>>2]|0;c[f+((((u|0)<1?i:u)+-1|0)*20|0)+8>>2]=i;f=f+(((u|0)<-1?i+-1|0:u+1|0)*20|0)|0}else{c[14829]=i;f=59308}c[f+8>>2]=i;if(B|0?(F=a[D>>0]|0,(F&255)<8):0){a[D>>0]=F+1<<24>>24;c[L+148+((F&255)<<2)>>2]=B}if(g|0?(G=a[D>>0]|0,(G&255)<8):0){a[D>>0]=G+1<<24>>24;c[L+148+((G&255)<<2)>>2]=g}do if(z){if((E|0)!=1){f=L+28|0;if((c[f>>2]|0)>=(E|0))break;c[f>>2]=E;c[L+32>>2]=x;break}if(x|0?(H=a[D>>0]|0,(H&255)<8):0){a[D>>0]=H+1<<24>>24;c[L+148+((H&255)<<2)>>2]=x}if(w|0?(I=a[D>>0]|0,(I&255)<8):0){a[D>>0]=I+1<<24>>24;c[L+148+((I&255)<<2)>>2]=w}}while(0);qm(c[d>>2]|0,c[J>>2]|0,1)}while(0);i=c[d+12>>2]|0;f=c[d+16>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;M=c[M+104>>2]|0;a[M+(g*20|0)>>0]=12;b[M+(g*20|0)+2>>1]=0;c[M+(g*20|0)+4>>2]=i;c[M+(g*20|0)+8>>2]=f;c[M+(g*20|0)+12>>2]=0;c[M+(g*20|0)+16>>2]=0;a[M+(g*20|0)+1>>0]=0;return}else{Di(M,12,i,f,0)|0;return}}function sm(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;n=d+8|0;j=c[n>>2]|0;a:do if(!j){m=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))r=15;else{t=0;break a}else{do if((e[m+276>>1]|0)>=224){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];t=m+284|0;c[t>>2]=(c[t>>2]|0)+1;break b}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];t=m+284|0;c[t>>2]=(c[t>>2]|0)+1;break b}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;r=15}while(0);if((r|0)==15)k=_d(m,224,0)|0;if(!k)t=0;else{j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=m;j=m+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=d;c[n>>2]=k;Di(k,61,0,1,0)|0;t=k}}else t=j;while(0);if(!f){j=t+108|0;k=c[j>>2]|0;if((c[t+112>>2]|0)>(k|0)){c[j>>2]=k+1;h=c[t+104>>2]|0;a[h+(k*20|0)>>0]=11;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=0;c[h+(k*20|0)+8>>2]=i;c[h+(k*20|0)+12>>2]=0;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0;return}else{Di(t,11,0,i,0)|0;return}}s=c[f>>2]|0;o=c[d>>2]|0;m=s+1|0;n=m*5|0;l=n+20|0;p=o+272|0;c:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))r=31;else{l=0;k=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];q=o+284|0;c[q>>2]=(c[q>>2]|0)+1;q=k;r=32;break c}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];q=o+284|0;c[q>>2]=(c[q>>2]|0)+1;q=k;r=32;break c}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;r=31}while(0);if((r|0)==31){q=_d(o,l,0)|0;r=32}if((r|0)==32){if(!q){j=o+81|0;if((a[j>>0]|0)==0?(a[o+82>>0]|0)==0:0){a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(j){c[j+12>>2]=7;l=0;k=1}else{l=0;k=1}}else{l=0;k=1}}else{c[q+16>>2]=q+20+(m<<2);b[q+6>>1]=s;b[q+8>>1]=m;a[q+4>>0]=a[o+78>>0]|0;c[q+12>>2]=o;c[q>>2]=1;gw(q+24|0,0,n+-4|0)|0;l=q;k=0}if((s|0)>0&(q|0)!=0){o=q+16|0;m=f+4|0;n=0;while(1){j=Yi(d,c[m>>2]|0)|0;if(!j)j=c[(c[d>>2]|0)+8>>2]|0;c[q+20+(n<<2)>>2]=j;a[(c[o>>2]|0)+n>>0]=a[m+12>>0]|0;n=n+1|0;if((n|0)==(s|0))break;else m=m+20|0}}}m=t+108|0;j=c[m>>2]|0;n=t+112|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=j+1;d=c[t+104>>2]|0;a[d+(j*20|0)>>0]=87;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=h;c[d+(j*20|0)+8>>2]=g;c[d+(j*20|0)+12>>2]=s;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0}else Di(t,87,h,g,s)|0;j=c[t>>2]|0;do if(a[j+81>>0]|0){if(!(k|(c[j+480>>2]|0)!=0)?(d=(c[l>>2]|0)+-1|0,c[l>>2]=d,(d|0)==0):0){j=c[l+12>>2]|0;if(j|0){if(c[j+480>>2]|0){Xd(j,l);break}d=l;if((c[j+304>>2]|0)>>>0<=d>>>0?(c[j+308>>2]|0)>>>0>d>>>0:0){d=j+300|0;c[l>>2]=c[d>>2];c[d>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{d=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else{f=c[t+104>>2]|0;d=(c[m>>2]|0)+-1|0;a[f+(d*20|0)+1>>0]=-9;c[f+(d*20|0)+16>>2]=l}while(0);j=c[m>>2]|0;k=j+1|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=k;d=c[t+104>>2]|0;a[d+(j*20|0)>>0]=16;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=i;c[d+(j*20|0)+12>>2]=k;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0}else Di(t,16,k,i,k)|0;j=s+-1|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=78;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=g;c[i+(k*20|0)+8>>2]=h;c[i+(k*20|0)+12>>2]=j;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;return}else{Di(t,78,g,h,j)|0;return}}function tm(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;y=c[d>>2]|0;l=d+4|0;u=c[l>>2]|0;A=c[d+8>>2]|0;h=a[u+16>>0]|0;s=h<<24>>24!=76;m=y+56|0;z=c[m>>2]|0;i=z+-1|0;c[m>>2]=i;m=(e|0)==2;if(m?(a[u+17>>0]|0)==87:0){A=0;return A|0}do if((f|0)>0){k=A+108|0;j=c[k>>2]|0;if(h<<24>>24!=86)if((c[A+112>>2]|0)>(j|0)){c[k>>2]=j+1;n=c[A+104>>2]|0;a[n+(j*20|0)>>0]=47;b[n+(j*20|0)+2>>1]=0;c[n+(j*20|0)+4>>2]=f;c[n+(j*20|0)+8>>2]=0;c[n+(j*20|0)+12>>2]=1;c[n+(j*20|0)+16>>2]=0;a[n+(j*20|0)+1>>0]=0;n=0;f=j;r=14;break}else{n=0;f=Di(A,47,f,0,1)|0;r=14;break}if(!m){um(d,54,c[d+44>>2]|0,f,c[d+36>>2]|0,i);n=j;f=0;r=14;break}if((a[u+17>>0]|0)==83)um(d,55,c[d+36>>2]|0,f,c[d+28>>2]|0,i);else um(d,57,c[d+28>>2]|0,f,c[d+36>>2]|0,i);l=0;m=k;k=c[k>>2]|0;r=19}else{n=0;f=0;r=14}while(0);do if((r|0)==14){if((e|0)==1){if(!(c[u+84>>2]|0))qm(c[d>>2]|0,c[l>>2]|0,0);j=A+108|0;p=c[j>>2]|0;t=c[d+36>>2]|0;q=c[d+40>>2]|0;rm(d);v=f;break}o=A+108|0;k=c[o>>2]|0;if(!m){h=c[d+44>>2]|0;j=c[d+48>>2]|0;if(!(c[u+84>>2]|0)){wm(y,u,h,0,c[d+20>>2]|0);t=h;q=j;v=f;p=k;j=o;break}i=c[u+88>>2]|0;if((c[A+112>>2]|0)>(k|0)){c[o>>2]=k+1;t=c[A+104>>2]|0;a[t+(k*20|0)>>0]=83;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=i;c[t+(k*20|0)+8>>2]=1;c[t+(k*20|0)+12>>2]=0;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=h;q=j;v=f;p=k;j=o;break}else{Di(A,83,i,1,0)|0;t=h;q=j;v=f;p=k;j=o;break}}else{j=n;l=f;m=o;r=19}}while(0);do if((r|0)==19){h=c[d+28>>2]|0;f=c[d+32>>2]|0;i=c[u+84>>2]|0;if(!i){wm(y,u,h,1,c[d+20>>2]|0);t=h;n=j;q=f;v=l;p=k;j=m;break}if((c[A+112>>2]|0)>(k|0)){c[A+108>>2]=k+1;t=c[A+104>>2]|0;a[t+(k*20|0)>>0]=83;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=i;c[t+(k*20|0)+8>>2]=1;c[t+(k*20|0)+12>>2]=0;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=h;n=j;q=f;v=l;p=k;j=m;break}else{Di(A,83,i,1,0)|0;t=h;n=j;q=f;v=l;p=k;j=m;break}}while(0);if((c[d+24>>2]|0)==(e|0)){h=A+108|0;i=c[h>>2]|0;if((c[A+112>>2]|0)>(i|0)){c[h>>2]=i+1;e=c[A+104>>2]|0;a[e+(i*20|0)>>0]=123;b[e+(i*20|0)+2>>1]=0;c[e+(i*20|0)+4>>2]=t;c[e+(i*20|0)+8>>2]=0;c[e+(i*20|0)+12>>2]=0;c[e+(i*20|0)+16>>2]=0;a[e+(i*20|0)+1>>0]=0}else Di(A,123,t,0,0)|0;h=c[h>>2]|0;if((h|0)>0)b[(c[A+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=2}h=c[j>>2]|0;do if(!g){h=(s?2:1)+h|0;f=A+108|0;i=c[f>>2]|0;k=A+112|0;if((c[k>>2]|0)>(i|0)){c[f>>2]=i+1;g=c[A+104>>2]|0;a[g+(i*20|0)>>0]=5;b[g+(i*20|0)+2>>1]=0;c[g+(i*20|0)+4>>2]=t;c[g+(i*20|0)+8>>2]=h;c[g+(i*20|0)+12>>2]=0;c[g+(i*20|0)+16>>2]=0;a[g+(i*20|0)+1>>0]=0}else Di(A,5,t,h,0)|0;if(s){j=c[f>>2]|0;if((c[k>>2]|0)>(j|0)){c[f>>2]=j+1;i=c[A+104>>2]|0;a[i+(j*20|0)>>0]=11;i=i+(j*20|0)+1|0;f=i+19|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(f|0));f=0;r=50;break}else{f=0;j=Di(A,11,0,0,0)|0;r=50;break}}else{f=0;j=0}}else{h=h+2|0;j=A+108|0;i=c[j>>2]|0;f=A+112|0;if((c[f>>2]|0)>(i|0)){c[j>>2]=i+1;g=c[A+104>>2]|0;a[g+(i*20|0)>>0]=5;b[g+(i*20|0)+2>>1]=0;c[g+(i*20|0)+4>>2]=t;c[g+(i*20|0)+8>>2]=h;c[g+(i*20|0)+12>>2]=0;c[g+(i*20|0)+16>>2]=0;a[g+(i*20|0)+1>>0]=0}else Di(A,5,t,h,0)|0;h=c[j>>2]|0;if((c[f>>2]|0)>(h|0)){c[j>>2]=h+1;i=c[A+104>>2]|0;a[i+(h*20|0)>>0]=11;i=i+(h*20|0)+1|0;f=i+19|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(f|0))}else h=Di(A,11,0,0,0)|0;if(s){f=h;j=0;r=50}else{f=h;j=0}}while(0);do if((r|0)==50){o=u+12|0;h=c[o>>2]|0;a:do if(!h){k=0;i=0}else{i=c[h>>2]|0;switch(i|0){case 0:{k=i;break a}case 1:{h=y+19|0;i=a[h>>0]|0;if(!(i<<24>>24)){i=y+44|0;k=(c[i>>2]|0)+1|0;c[i>>2]=k;i=1;break a}else{k=i+-1<<24>>24;a[h>>0]=k;k=c[y+148+((k&255)<<2)>>2]|0;i=1;break a}}default:{h=y+32|0;k=c[h>>2]|0;l=y+28|0;m=c[l>>2]|0;if((m|0)<(i|0)){u=y+44|0;k=c[u>>2]|0;c[u>>2]=k+i;k=k+1|0;break a}else{c[h>>2]=k+i;c[l>>2]=m-i;break a}}}}while(0);vm(d,t,k);sm(y,c[o>>2]|0,k,q,p);if((i|0)!=1){h=y+28|0;if((c[h>>2]|0)>=(i|0))break;c[h>>2]=i;c[y+32>>2]=k;break}if((k|0)!=0?(w=y+19|0,x=a[w>>0]|0,(x&255)<8):0){a[w>>0]=x+1<<24>>24;c[y+148+((x&255)<<2)>>2]=k}}while(0);do if(n|0){h=A+108|0;i=c[h>>2]|0;if((c[A+112>>2]|0)>(i|0)){c[h>>2]=i+1;y=c[A+104>>2]|0;a[y+(i*20|0)>>0]=11;b[y+(i*20|0)+2>>1]=0;c[y+(i*20|0)+4>>2]=0;c[y+(i*20|0)+8>>2]=n;c[y+(i*20|0)+12>>2]=0;c[y+(i*20|0)+16>>2]=0;a[y+(i*20|0)+1>>0]=0;break}else{Di(A,11,0,n,0)|0;break}}while(0);i=c[A+12>>2]|0;h=0-z|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,A,h);else c[(c[i+64>>2]|0)+(h<<2)>>2]=c[A+108>>2];if(j|0){i=c[A+108>>2]|0;if(!(a[(c[A>>2]|0)+81>>0]|0))h=(c[A+104>>2]|0)+(((j|0)<0?i+-1|0:j)*20|0)|0;else h=59308;c[h+8>>2]=i}if(!v){A=f;return A|0}i=c[A+108>>2]|0;if(!(a[(c[A>>2]|0)+81>>0]|0))h=(c[A+104>>2]|0)+(((v|0)<0?i+-1|0:v)*20|0)|0;else h=59308;c[h+8>>2]=i;A=f;return A|0}function um(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=c[d>>2]|0;o=w+8|0;k=c[o>>2]|0;a:do if(!k){n=c[w>>2]|0;if((c[w+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[w+23>>0]=1;b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))p=15;else{t=0;break a}else{do if((e[n+276>>1]|0)>=224){k=n+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];u=n+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}k=n+296|0;l=c[k>>2]|0;if(!l){k=n+292|0;break}else{c[k>>2]=c[l>>2];u=n+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}}else k=n+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;p=15}while(0);if((p|0)==15)l=_d(n,224,0)|0;if(!l)t=0;else{k=l+104|0;m=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));c[l>>2]=n;k=n+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=w;c[o>>2]=l;Di(l,61,0,1,0)|0;t=l}}else t=k;while(0);u=w+19|0;l=a[u>>0]|0;if(l<<24>>24){s=l+-1<<24>>24;a[u>>0]=s;k=c[w+148+((s&255)<<2)>>2]|0;if(!(s<<24>>24))p=23;else{s=l+-2<<24>>24;a[u>>0]=s;q=w+44|0;r=k;s=c[w+148+((s&255)<<2)>>2]|0;l=q;k=c[q>>2]|0}}else{p=w+44|0;k=(c[p>>2]|0)+1|0;c[p>>2]=k;p=23}if((p|0)==23){l=w+44|0;q=(c[l>>2]|0)+1|0;c[l>>2]=q;r=k;s=q;k=q}p=k+1|0;c[l>>2]=p;n=(a[(c[(c[d+4>>2]|0)+12>>2]|0)+16>>0]|0)==0;q=n?100:101;f=n?f:(f|0)==57?55:(f|0)==54?56:57;vm(d,g,r);vm(d,i,s);n=t+108|0;k=c[n>>2]|0;o=t+112|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=110;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=0;c[i+(k*20|0)+8>>2]=p;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(t,110,0,p,0)|0;do if(!(a[(c[t>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;l=c[t+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=59952;a[m>>0]=-1;break}else{Ei(t,l+(k*20|0)|0,59952,-1);break}}while(0);k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=57;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=p;c[i+(k*20|0)+8>>2]=0;c[i+(k*20|0)+12>>2]=r;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(t,57,p,0,r)|0;l=c[n>>2]|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;i=c[t+104>>2]|0;a[i+(l*20|0)>>0]=q;b[i+(l*20|0)+2>>1]=0;c[i+(l*20|0)+4>>2]=h;c[i+(l*20|0)+8>>2]=r;c[i+(l*20|0)+12>>2]=r;c[i+(l*20|0)+16>>2]=0;a[i+(l*20|0)+1>>0]=0}else Di(t,q,h,r,r)|0;l=c[n>>2]|0;if(!(a[(c[t>>2]|0)+81>>0]|0))k=(c[t+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;h=c[t+104>>2]|0;a[h+(l*20|0)>>0]=f;b[h+(l*20|0)+2>>1]=0;c[h+(l*20|0)+4>>2]=s;c[h+(l*20|0)+8>>2]=j;c[h+(l*20|0)+12>>2]=r;c[h+(l*20|0)+16>>2]=0;a[h+(l*20|0)+1>>0]=0}else Di(t,f,s,j,r)|0;k=c[n>>2]|0;if((k|0)>0)b[(c[t+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=128;if(r|0?(v=a[u>>0]|0,(v&255)<8):0){a[u>>0]=v+1<<24>>24;c[w+148+((v&255)<<2)>>2]=r}if(!s)return;k=a[u>>0]|0;if((k&255)>=8)return;a[u>>0]=k+1<<24>>24;c[w+148+((k&255)<<2)>>2]=s;return}function vm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=c[d+4>>2]|0;o=c[g+12>>2]|0;if(!o)return;n=Ej(c[d>>2]|0)|0;d=c[g+8>>2]|0;if(!d)d=0;else d=c[d>>2]|0;g=d+(c[g+72>>2]|0)|0;if((c[o>>2]|0)<=0)return;h=n+108|0;i=n+112|0;j=n+104|0;d=0;do{k=g+d|0;l=d+f|0;m=c[h>>2]|0;if((c[i>>2]|0)>(m|0)){c[h>>2]=m+1;p=c[j>>2]|0;a[p+(m*20|0)>>0]=90;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=e;c[p+(m*20|0)+8>>2]=k;c[p+(m*20|0)+12>>2]=l;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0}else Di(n,90,e,k,l)|0;d=d+1|0}while((d|0)<(c[o>>2]|0));return}function wm(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;m=d+8|0;j=c[m>>2]|0;a:do if(!j){l=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[l+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))F=15;else{j=0;break a}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];E=l+284|0;c[E>>2]=(c[E>>2]|0)+1;break b}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];E=l+284|0;c[E>>2]=(c[E>>2]|0)+1;break b}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;F=15}while(0);if((F|0)==15)j=_d(l,224,0)|0;if(!j)j=0;else{n=j+104|0;o=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(o|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=d;c[m>>2]=j;Di(j,61,0,1,0)|0}}while(0);if(!f)return;t=f+84|0;u=j+108|0;v=j+112|0;w=f+44|0;x=j+104|0;y=1-h|0;z=(h|0)==0;A=d+19|0;B=z?154:153;C=d+44|0;D=B&255;E=i+1|0;s=f;do{r=c[s+40>>2]|0;q=s+68|0;k=c[(c[q>>2]|0)+20>>2]|0;if(k){o=c[k>>2]|0;if((o|0)>0){f=r+32|0;p=s+76|0;n=0;do{do if((n|0)==1?(c[f>>2]|0)==43457:0){k=c[w>>2]|0;l=(c[p>>2]|0)+1|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=90;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=k;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=E;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,90,k,l,E)|0;break}}else F=27;while(0);do if((F|0)==27){F=0;k=(c[p>>2]|0)+n|0;l=n+i|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=90;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=g;c[H+(m*20|0)+8>>2]=k;c[H+(m*20|0)+12>>2]=l;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,90,g,k,l)|0;break}}while(0);n=n+1|0}while((n|0)!=(o|0));p=o}else p=o}else p=0;if(((c[t>>2]|0)==0?(c[r+4>>2]&4096|0)!=0:0)?(a[s+17>>0]|0)!=87:0){k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;H=c[x>>2]|0;a[H+(k*20|0)>>0]=50;b[H+(k*20|0)+2>>1]=0;c[H+(k*20|0)+4>>2]=i;c[H+(k*20|0)+8>>2]=0;c[H+(k*20|0)+12>>2]=0;c[H+(k*20|0)+16>>2]=0;a[H+(k*20|0)+1>>0]=0}else k=Di(j,50,i,0,0)|0;do if(z){o=s+60|0;l=(c[o>>2]|0)+1|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=83;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=l;c[H+(m*20|0)+8>>2]=1;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,83,l,1,0)|0;l=c[o>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=79;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=i;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,79,i,l,0)|0;l=c[o>>2]|0;m=l+2|0;n=c[u>>2]|0;if((c[v>>2]|0)>(n|0)){c[u>>2]=n+1;H=c[x>>2]|0;a[H+(n*20|0)>>0]=92;b[H+(n*20|0)+2>>1]=0;c[H+(n*20|0)+4>>2]=l;c[H+(n*20|0)+8>>2]=2;c[H+(n*20|0)+12>>2]=m;c[H+(n*20|0)+16>>2]=0;a[H+(n*20|0)+1>>0]=0}else Di(j,92,l,2,m)|0;n=c[s+56>>2]|0;l=(c[o>>2]|0)+2|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=-124;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=n;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,132,n,l,0)|0;break}}else{n=s+56|0;m=c[n>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=24;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=m;c[H+(l*20|0)+8>>2]=0;c[H+(l*20|0)+12>>2]=i;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else l=Di(j,24,m,0,i)|0;if(!(a[(c[j>>2]|0)+81>>0]|0)){H=c[x>>2]|0;a[H+(l*20|0)+1>>0]=-3;c[H+(l*20|0)+16>>2]=1}l=c[n>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=123;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=l;c[H+(m*20|0)+8>>2]=0;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,123,l,0,0)|0;m=c[u>>2]|0;if(!(a[(c[j>>2]|0)+81>>0]|0))l=(c[x>>2]|0)+((((m|0)<2?-1:-2)+m|0)*20|0)|0;else l=59308;c[l+8>>2]=m}while(0);l=c[u>>2]|0;if(!(a[(c[j>>2]|0)+81>>0]|0))k=(c[x>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l}else F=67;do if((F|0)==67){F=0;k=c[s+60>>2]|0;if(k|0){k=y+k|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=83;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=k;c[H+(l*20|0)+8>>2]=1;c[H+(l*20|0)+12>>2]=0;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0;break}else{Di(j,83,k,1,0)|0;break}}if((c[r+16>>2]|0)!=110){if(c[s+36>>2]|0){k=a[A>>0]|0;if(!(k<<24>>24)){m=(c[C>>2]|0)+1|0;c[C>>2]=m}else{m=k+-1<<24>>24;a[A>>0]=m;m=c[d+148+((m&255)<<2)>>2]|0}k=(c[s+76>>2]|0)+p|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=90;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=g;c[H+(l*20|0)+8>>2]=k;c[H+(l*20|0)+12>>2]=m;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else Di(j,90,g,k,m)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;H=c[x>>2]|0;a[H+(k*20|0)>>0]=20;b[H+(k*20|0)+2>>1]=0;c[H+(k*20|0)+4>>2]=m;c[H+(k*20|0)+8>>2]=0;c[H+(k*20|0)+12>>2]=1;c[H+(k*20|0)+16>>2]=0;a[H+(k*20|0)+1>>0]=0}else k=Di(j,20,m,0,1)|0;if((m|0)!=0?(G=a[A>>0]|0,(G&255)<8):0){a[A>>0]=G+1<<24>>24;c[d+148+((G&255)<<2)>>2]=m;f=k}else f=k}else f=0;do if(c[r+4>>2]&32|0){k=Yi(d,c[(c[(c[q>>2]|0)+20>>2]|0)+4>>2]|0)|0;if(!k)k=c[(c[d>>2]|0)+8>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;n=c[x>>2]|0;a[n+(l*20|0)>>0]=82;n=n+(l*20|0)+1|0;o=n+19|0;do{a[n>>0]=0;n=n+1|0}while((n|0)<(o|0))}else l=Di(j,82,0,0,0)|0;if(!(a[(c[j>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[u>>2]|0)+-1|0;m=c[x>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(j,m+(l*20|0)|0,k,-2);break}if(k|0){c[m+(l*20|0)+16>>2]=k;a[n>>0]=-2}}}while(0);k=c[s+48>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=D;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=h;c[H+(l*20|0)+8>>2]=i;c[H+(l*20|0)+12>>2]=k;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else Di(j,B,h,i,k)|0;k=c[j>>2]|0;do if(a[k+81>>0]|0){if(c[r+4>>2]&16|0){if(k|0){if(c[k+480>>2]|0){Xd(k,r);break}H=r;if((c[k+304>>2]|0)>>>0<=H>>>0?(c[k+308>>2]|0)>>>0>H>>>0:0){H=k+300|0;c[r>>2]=c[H>>2];c[H>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{H=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}}else{q=c[x>>2]|0;H=(c[u>>2]|0)+-1|0;a[q+(H*20|0)+1>>0]=-8;c[q+(H*20|0)+16>>2]=r}while(0);l=c[u>>2]|0;if((l|0)>0)b[(c[x>>2]|0)+((l+-1|0)*20|0)+2>>1]=p&255;if(f|0){if(!(a[(c[j>>2]|0)+81>>0]|0))k=(c[x>>2]|0)+(((f|0)<0?l+-1|0:f)*20|0)|0;else k=59308;c[k+8>>2]=l}}}while(0);s=c[s+32>>2]|0}while((s|0)!=0);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;return}function ym(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=c[d+8>>2]|0;n=d+19|0;i=a[n>>0]|0;if(!(i<<24>>24)){k=d+44|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l}else{l=i+-1<<24>>24;a[n>>0]=l;l=c[d+148+((l&255)<<2)>>2]|0}k=m+108|0;i=c[k>>2]|0;j=m+112|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=29;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=e;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else i=Di(m,29,e,f,h)|0;if(!(a[(c[m>>2]|0)+81>>0]|0)){o=c[m+104>>2]|0;a[o+(i*20|0)+1>>0]=-3;c[o+(i*20|0)+16>>2]=g}i=c[k>>2]|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=92;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=g;c[o+(i*20|0)+12>>2]=l;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(m,92,h,g,l)|0;i=c[k>>2]|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=-124;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=e;c[o+(i*20|0)+8>>2]=l;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else i=Di(m,132,e,l,h)|0;if(!(a[(c[m>>2]|0)+81>>0]|0)){o=c[m+104>>2]|0;a[o+(i*20|0)+1>>0]=-3;c[o+(i*20|0)+16>>2]=g}i=c[k>>2]|0;if((i|0)>0)b[(c[m+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=16;if(!l)return;i=a[n>>0]|0;if((i&255)>=8)return;a[n>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=l;return}function zm(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;E=d+8|0;J=c[E>>2]|0;F=f+32|0;n=a[F>>0]&1;p=n<<24>>24==0;n=(n^1)&255;l=c[f>>2]|0;C=c[l>>2]|0;H=C+n+j|0;D=f+4|0;I=c[D>>2]|0;o=(k|0)==0;if(o){B=d+44|0;G=c[B>>2]|0;c[B>>2]=G+H;G=G+1|0}else G=h-k|0;k=c[g+16>>2]|0;if(!k)B=c[g+12>>2]|0;else B=k+1|0;z=d+56|0;y=(c[z>>2]|0)+-1|0;c[z>>2]=y;A=f+24|0;c[A>>2]=y;Oj(d,l,G,i,(i|0)==0?1:5);do if(p){k=c[f+8>>2]|0;l=G+C|0;i=J+108|0;m=c[i>>2]|0;if((c[J+112>>2]|0)>(m|0)){c[i>>2]=m+1;y=c[J+104>>2]|0;a[y+(m*20|0)>>0]=120;b[y+(m*20|0)+2>>1]=0;c[y+(m*20|0)+4>>2]=k;c[y+(m*20|0)+8>>2]=l;c[y+(m*20|0)+12>>2]=0;c[y+(m*20|0)+16>>2]=0;a[y+(m*20|0)+1>>0]=0;break}else{Di(J,120,k,l,0)|0;break}}while(0);do if((j|0)>0&o){l=G+C+n|0;k=c[E>>2]|0;i=k+108|0;m=c[i>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[i>>2]=m+1;y=c[k+104>>2]|0;a[y+(m*20|0)>>0]=77;b[y+(m*20|0)+2>>1]=0;c[y+(m*20|0)+4>>2]=h;c[y+(m*20|0)+8>>2]=l;c[y+(m*20|0)+12>>2]=j;c[y+(m*20|0)+16>>2]=0;a[y+(m*20|0)+1>>0]=0;break}else{Di(k,77,h,l,j)|0;break}}while(0);if((I|0)>0){l=c[D>>2]|0;n=c[E>>2]|0;w=d+44|0;o=(c[w>>2]|0)+1|0;c[w>>2]=o;k=c[f+36>>2]|0;if(k|0)Oj(d,c[g>>2]|0,c[k>>2]|0,0,a[k+4>>0]|0);m=l+G|0;k=H-l|0;l=n+108|0;i=c[l>>2]|0;if((c[n+112>>2]|0)>(i|0)){c[l>>2]=i+1;y=c[n+104>>2]|0;a[y+(i*20|0)>>0]=92;b[y+(i*20|0)+2>>1]=0;c[y+(i*20|0)+4>>2]=m;c[y+(i*20|0)+8>>2]=k;c[y+(i*20|0)+12>>2]=o;c[y+(i*20|0)+16>>2]=0;a[y+(i*20|0)+1>>0]=0}else Di(n,92,m,k,o)|0;v=c[w>>2]|0;y=v+1|0;n=c[D>>2]|0;c[w>>2]=n+v;do if(p){k=G+C|0;m=J+108|0;l=c[m>>2]|0;i=J+112|0;if((c[i>>2]|0)>(l|0)){c[m>>2]=l+1;u=c[J+104>>2]|0;a[u+(l*20|0)>>0]=20;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=0;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;v=m;break}else{u=Di(J,20,k,0,0)|0;v=m;break}}else{k=c[f+8>>2]|0;m=J+108|0;l=c[m>>2]|0;i=J+112|0;if((c[i>>2]|0)>(l|0)){c[m>>2]=l+1;u=c[J+104>>2]|0;a[u+(l*20|0)>>0]=115;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=0;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;v=m;break}else{u=Di(J,115,k,0,0)|0;v=m;break}}while(0);k=c[D>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;t=c[J+104>>2]|0;a[t+(l*20|0)>>0]=87;b[t+(l*20|0)+2>>1]=0;c[t+(l*20|0)+4>>2]=y;c[t+(l*20|0)+8>>2]=G;c[t+(l*20|0)+12>>2]=k;c[t+(l*20|0)+16>>2]=0;a[t+(l*20|0)+1>>0]=0}else Di(J,87,y,G,k)|0;k=c[f+20>>2]|0;if((k|0)<0)k=(c[v>>2]|0)+-1|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(k*20|0)|0;else k=59308;if(a[(c[d>>2]|0)+81>>0]|0)return;c[k+8>>2]=H-n;t=k+16|0;n=c[t>>2]|0;h=n+6|0;gw(c[n+16>>2]|0,0,e[h>>1]|0)|0;k=c[J>>2]|0;a:do if(!(a[k+81>>0]|0)){k=(c[v>>2]|0)+-1|0;l=c[J+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(J,l+(k*20|0)|0,n,-9);break}if(n|0){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9}}else if(!((n|0)==0|(c[k+480>>2]|0)!=0)?(s=(c[n>>2]|0)+-1|0,c[n>>2]=s,(s|0)==0):0){k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;s=k+300|0;c[n>>2]=c[s>>2];c[s>>2]=n;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);r=c[f>>2]|0;q=c[d>>2]|0;s=c[r>>2]|0;p=s-I|0;n=p+((e[n+8>>1]|0)-(e[h>>1]|0))|0;h=n*5|0;m=h+20|0;j=q+272|0;b:do if(c[j>>2]|0)if(!(a[q+81>>0]|0))x=62;else k=0;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){l=q+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;x=63;break b}l=q+296|0;k=c[l>>2]|0;if(!k){k=q+292|0;break}else{c[l>>2]=c[k>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;x=63;break b}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;x=62}while(0);if((x|0)==62){k=_d(q,m,0)|0;x=63}if((x|0)==63){do if(!k){l=q+81|0;if((a[l>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[j>>2]=(c[j>>2]|0)+1;l=c[q+236>>2]|0;if(!l)break;c[l+12>>2]=7}}else{c[k+16>>2]=k+20+(n<<2);b[k+6>>1]=p;b[k+8>>1]=n;a[k+4>>0]=a[q+78>>0]|0;c[k+12>>2]=q;c[k>>2]=1;gw(k+24|0,0,h+-4|0)|0}while(0);if((s|0)>(I|0)&(k|0)!=0){h=k+16|0;m=r+4+(I*20|0)|0;n=I;while(1){l=Yi(d,c[m>>2]|0)|0;if(!l)l=c[(c[d>>2]|0)+8>>2]|0;x=n-I|0;c[k+20+(x<<2)>>2]=l;a[(c[h>>2]|0)+x>>0]=a[m+12>>0]|0;n=n+1|0;if((n|0)==(s|0))break;else m=m+20|0}}}c[t>>2]=k;n=c[v>>2]|0;k=n+1|0;if((c[i>>2]|0)>(n|0)){c[v>>2]=k;x=c[J+104>>2]|0;a[x+(n*20|0)>>0]=16;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=k;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=k;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0}else Di(J,16,k,0,k)|0;m=(c[z>>2]|0)+-1|0;c[z>>2]=m;c[f+16>>2]=m;l=(c[w>>2]|0)+1|0;c[w>>2]=l;c[f+12>>2]=l;k=c[v>>2]|0;if((c[i>>2]|0)>(k|0)){c[v>>2]=k+1;z=c[J+104>>2]|0;a[z+(k*20|0)>>0]=12;b[z+(k*20|0)+2>>1]=0;c[z+(k*20|0)+4>>2]=l;c[z+(k*20|0)+8>>2]=m;c[z+(k*20|0)+12>>2]=0;c[z+(k*20|0)+16>>2]=0;a[z+(k*20|0)+1>>0]=0}else Di(J,12,l,m,0)|0;k=c[f+8>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;z=c[J+104>>2]|0;a[z+(l*20|0)>>0]=-118;b[z+(l*20|0)+2>>1]=0;c[z+(l*20|0)+4>>2]=k;c[z+(l*20|0)+8>>2]=0;c[z+(l*20|0)+12>>2]=0;c[z+(l*20|0)+16>>2]=0;a[z+(l*20|0)+1>>0]=0}else Di(J,138,k,0,0)|0;do if(B|0){k=c[A>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;A=c[J+104>>2]|0;a[A+(l*20|0)>>0]=20;b[A+(l*20|0)+2>>1]=0;c[A+(l*20|0)+4>>2]=B;c[A+(l*20|0)+8>>2]=k;c[A+(l*20|0)+12>>2]=0;c[A+(l*20|0)+16>>2]=0;a[A+(l*20|0)+1>>0]=0;break}else{Di(J,20,B,k,0)|0;break}}while(0);l=c[v>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((u|0)<0?l+-1|0:u)*20|0)|0;else k=59308;c[k+8>>2]=l;l=c[D>>2]|0;k=c[E>>2]|0;i=k+108|0;m=c[i>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[i>>2]=m+1;A=c[k+104>>2]|0;a[A+(m*20|0)>>0]=77;b[A+(m*20|0)+2>>1]=0;c[A+(m*20|0)+4>>2]=G;c[A+(m*20|0)+8>>2]=y;c[A+(m*20|0)+12>>2]=l;c[A+(m*20|0)+16>>2]=0;a[A+(m*20|0)+1>>0]=0}else Di(k,77,G,y,l)|0;l=c[v>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((n|0)<0?l+-1|0:n)*20|0)|0;else k=59308;c[k+8>>2]=l}else o=0;do if(B){m=c[f+8>>2]|0;i=J+108|0;k=c[i>>2]|0;l=k+4|0;n=J+112|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;A=c[J+104>>2]|0;a[A+(k*20|0)>>0]=48;b[A+(k*20|0)+2>>1]=0;c[A+(k*20|0)+4>>2]=B;c[A+(k*20|0)+8>>2]=l;c[A+(k*20|0)+12>>2]=0;c[A+(k*20|0)+16>>2]=0;a[A+(k*20|0)+1>>0]=0}else Di(J,48,B,l,0)|0;k=c[i>>2]|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;B=c[J+104>>2]|0;a[B+(k*20|0)>>0]=32;b[B+(k*20|0)+2>>1]=0;c[B+(k*20|0)+4>>2]=m;c[B+(k*20|0)+8>>2]=0;c[B+(k*20|0)+12>>2]=0;c[B+(k*20|0)+16>>2]=0;a[B+(k*20|0)+1>>0]=0}else Di(J,32,m,0,0)|0;l=G+I|0;k=c[i>>2]|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;B=c[J+104>>2]|0;a[B+(k*20|0)>>0]=37;b[B+(k*20|0)+2>>1]=0;c[B+(k*20|0)+4>>2]=m;c[B+(k*20|0)+8>>2]=0;c[B+(k*20|0)+12>>2]=l;c[B+(k*20|0)+16>>2]=0;a[B+(k*20|0)+1>>0]=0}else k=Di(J,37,m,0,l)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){B=c[J+104>>2]|0;a[B+(k*20|0)+1>>0]=-3;c[B+(k*20|0)+16>>2]=C-I}l=c[i>>2]|0;if((c[n>>2]|0)>(l|0)){c[i>>2]=l+1;C=c[J+104>>2]|0;a[C+(l*20|0)>>0]=123;b[C+(l*20|0)+2>>1]=0;c[C+(l*20|0)+4>>2]=m;c[C+(l*20|0)+8>>2]=0;c[C+(l*20|0)+12>>2]=0;c[C+(l*20|0)+16>>2]=0;a[C+(l*20|0)+1>>0]=0;break}else{Di(J,123,m,0,0)|0;break}}else k=0;while(0);do if(!o){i=c[D>>2]|0;h=c[E>>2]|0;l=d+44|0;o=(c[l>>2]|0)+1|0;c[l>>2]=o;l=c[f+36>>2]|0;if(l|0)Oj(d,c[g>>2]|0,c[l>>2]|0,0,a[l+4>>0]|0);n=i+G|0;l=H-i|0;i=h+108|0;m=c[i>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[i>>2]=m+1;g=c[h+104>>2]|0;a[g+(m*20|0)>>0]=92;b[g+(m*20|0)+2>>1]=0;c[g+(m*20|0)+4>>2]=n;c[g+(m*20|0)+8>>2]=l;c[g+(m*20|0)+12>>2]=o;c[g+(m*20|0)+16>>2]=0;a[g+(m*20|0)+1>>0]=0;break}else{Di(h,92,n,l,o)|0;break}}while(0);m=132-(a[F>>0]&1)|0;n=c[f+8>>2]|0;i=G+I|0;h=J+108|0;l=c[h>>2]|0;if((c[J+112>>2]|0)>(l|0)){c[h>>2]=l+1;G=c[J+104>>2]|0;a[G+(l*20|0)>>0]=m;b[G+(l*20|0)+2>>1]=0;c[G+(l*20|0)+4>>2]=n;c[G+(l*20|0)+8>>2]=o;c[G+(l*20|0)+12>>2]=i;c[G+(l*20|0)+16>>2]=0;a[G+(l*20|0)+1>>0]=0}else l=Di(J,m,n,o,i)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){G=c[J+104>>2]|0;a[G+(l*20|0)+1>>0]=-3;c[G+(l*20|0)+16>>2]=H-I}if(!k)return;l=c[f+28>>2]|0;if(!l){l=c[h>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;return}if((k|0)<0)k=(c[h>>2]|0)+-1|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(k*20|0)|0;else k=59308;c[k+8>>2]=l;return}function Am(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+64|0;l=m;if((a[d>>0]|0)==44){l=0;Ra=m;return l|0}e=c[b+24>>2]|0;j=c[b>>2]|0;i=c[e+40>>2]|0;k=l+20|0;a[k>>0]=1;c[l+4>>2]=149;c[l+8>>2]=0;c[l+24>>2]=i;c[l>>2]=j;_j(l,d)|0;if(!(a[k>>0]|0)){l=1;Ra=m;return l|0}j=c[c[b>>2]>>2]|0;k=oj(j,147,17144,0)|0;if(!k){l=1;Ra=m;return l|0}e=e+36|0;f=c[e>>2]|0;g=l;h=k;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=k;h=d;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=d;h=l;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=Xk(j,f,k)|0;c[e>>2]=l;a[b+20>>0]=1;l=1;Ra=m;return l|0}function Bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=c[b+24>>2]|0;a:do if((c[h>>2]|0)>0){g=0;while(1){e=c[h+4+(g*20|0)>>2]|0;if((bk(0,d,e,-1)|0)<2){f=c[b>>2]|0;e=Yi(f,e)|0;if(!e){e=c[(c[f>>2]|0)+8>>2]|0;if(!e){e=1;f=12;break}}if((c[e+12>>2]|0)==78?(c[e+8>>2]|0)==0:0){e=1;f=12;break}}g=g+1|0;if((g|0)>=(c[h>>2]|0))break a}if((f|0)==12)return e|0}while(0);if(!(c[d+4>>2]&2048)){d=Yj(b,d)|0;return d|0}else{a[b+20>>0]=0;d=2;return d|0}return 0}function Cm(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=c[f+24>>2]|0;s=c[h>>2]|0;j=c[h+4>>2]|0;t=c[h+8>>2]|0;switch(a[g>>0]|0){case -94:case -92:{if(!j){t=1;return t|0}i=c[j>>2]|0;if((i|0)<=0){t=1;return t|0}o=g+28|0;l=c[o>>2]|0;h=0;f=j+8|0;while(1){if((l|0)==(c[f+40>>2]|0))break;h=h+1|0;if((h|0)>=(i|0)){f=1;r=80;break}else f=f+72|0}if((r|0)==80)return f|0;j=t+28|0;n=t+32|0;p=c[n>>2]|0;a:do if((p|0)>0){k=c[j>>2]|0;i=g+32|0;h=k;f=0;while(1){if((c[h+4>>2]|0)==(l|0)?(c[h+8>>2]|0)==(b[i>>1]|0):0)break a;f=f+1|0;if((f|0)>=(p|0))break;else h=h+24|0}m=j;f=k;r=13}else{m=j;f=c[j>>2]|0;r=13}while(0);b:do if((r|0)==13){l=c[s>>2]|0;h=((p|0)<0)<<31>>31;k=Sv(p|0,h|0,-1,-1)|0;c:do if((k&p|0)==0&((L()|0)&h|0)==0){i=(p|0)==0;j=Yv(p|0,h|0,48,0)|0;k=L()|0;j=i?24:j;k=i?0:k;d:do if(!f){if(c[l+272>>2]|0){if(a[l+81>>0]|0){f=0;break}}else{do if(!(k>>>0>0|((k|0)==0?j>>>0>(e[l+276>>1]|0)>>>0:0))){i=l+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=l+284|0;c[r>>2]=(c[r>>2]|0)+1;r=31;break d}i=l+296|0;h=c[i>>2]|0;if(!h){h=l+292|0;break}else{c[i>>2]=c[h>>2];r=l+284|0;c[r>>2]=(c[r>>2]|0)+1;r=31;break d}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,j,k)|0;r=31}else{r=f;if((c[l+304>>2]|0)>>>0<=r>>>0?(c[l+308>>2]|0)>>>0>r>>>0:0){if(!(k>>>0>0|((k|0)==0?j>>>0>(e[l+276>>1]|0)>>>0:0)))break c;h=Zd(l,f,j,k)|0;r=31;break}h=Zd(l,f,j,k)|0;r=31}while(0);if((r|0)==31)if(h){f=h;break}c[m>>2]=f;f=-1;break b}while(0);h=f+(p*24|0)|0;j=h+24|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));c[n>>2]=(c[n>>2]|0)+1;c[m>>2]=f;if((p|0)>-1){c[f+(p*24|0)>>2]=c[g+44>>2];j=c[o>>2]|0;c[f+(p*24|0)+4>>2]=j;k=b[g+32>>1]|0;c[f+(p*24|0)+8>>2]=k<<16>>16;s=s+44|0;i=(c[s>>2]|0)+1|0;c[s>>2]=i;c[f+(p*24|0)+16>>2]=i;i=f+(p*24|0)+12|0;c[i>>2]=-1;c[f+(p*24|0)+20>>2]=g;f=c[t+24>>2]|0;e:do if(f|0?(q=c[f>>2]|0,(q|0)>0):0){h=f+4|0;f=0;while(1){s=c[h>>2]|0;if(((a[s>>0]|0)==-94?(c[s+28>>2]|0)==(j|0):0)?(b[s+32>>1]|0)==k<<16>>16:0)break;f=f+1|0;if((f|0)<(q|0))h=h+20|0;else break e}c[i>>2]=f;f=p;break b}while(0);s=t+12|0;f=c[s>>2]|0;c[s>>2]=f+1;c[i>>2]=f;f=p}else f=p}while(0);c[g+40>>2]=t;a[g>>0]=-92;b[g+34>>1]=f;t=1;return t|0}case -93:{if(b[h+24>>1]&8){t=0;return t|0}if((c[f+16>>2]|0)!=(d[g+38>>0]|0)){t=0;return t|0}p=t+40|0;o=t+44|0;h=c[o>>2]|0;f:do if((h|0)>0){h=c[p>>2]|0;f=0;while(1){if(!(bk(0,c[h>>2]|0,g,-1)|0))break;f=f+1|0;i=c[o>>2]|0;if((f|0)<(i|0))h=h+16|0;else break f}i=c[o>>2]|0}else{f=0;i=h}while(0);g:do if((f|0)>=(i|0)){m=c[s>>2]|0;n=a[m+78>>0]|0;f=c[p>>2]|0;h=((i|0)<0)<<31>>31;q=Sv(i|0,h|0,-1,-1)|0;h:do if((q&i|0)==0&((L()|0)&h|0)==0){q=(i|0)==0;k=cw(i|0,h|0,5)|0;l=L()|0;k=q?16:k;l=q?0:l;i:do if(!f){if(c[m+272>>2]|0){if(a[m+81>>0]|0){f=0;break}}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[m+276>>1]|0)>>>0:0))){j=m+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=71;break i}j=m+296|0;h=c[j>>2]|0;if(!h){h=m+292|0;break}else{c[j>>2]=c[h>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=71;break i}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(m,k,l)|0;r=71}else{r=f;if((c[m+304>>2]|0)>>>0<=r>>>0?(c[m+308>>2]|0)>>>0>r>>>0:0){if(!(l>>>0>0|((l|0)==0?k>>>0>(e[m+276>>1]|0)>>>0:0)))break h;h=Zd(m,f,k,l)|0;r=71;break}h=Zd(m,f,k,l)|0;r=71}while(0);if((r|0)==71)if(h){f=h;break}c[p>>2]=f;f=-1;break g}while(0);h=f+(i<<4)|0;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));c[o>>2]=(c[o>>2]|0)+1;c[p>>2]=f;if((i|0)>-1){c[f+(i<<4)>>2]=g;r=s+44|0;h=(c[r>>2]|0)+1|0;c[r>>2]=h;c[f+(i<<4)+8>>2]=h;h=c[g+20>>2]|0;if(!h)h=0;else h=c[h>>2]|0;r=Jd(c[s>>2]|0,c[g+8>>2]|0,h,n,0)|0;c[f+(i<<4)+4>>2]=r;if(!(c[g+4>>2]&2)){c[f+(i<<4)+12>>2]=-1;f=i;break}else{r=s+40|0;s=c[r>>2]|0;c[r>>2]=s+1;c[f+(i<<4)+12>>2]=s;f=i;break}}else f=i}while(0);b[g+34>>1]=f;c[g+40>>2]=t;t=1;return t|0}default:{t=0;return t|0}}return 0}function Dm(a,b){a=a|0;b=b|0;b=a+16|0;c[b>>2]=(c[b>>2]|0)+1;return 0}function Em(a,b){a=a|0;b=b|0;b=a+16|0;c[b>>2]=(c[b>>2]|0)+-1;return}function Fm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l+8|0;i=l;do if(!(c[d+56>>2]|0)){f=c[d+36>>2]|0;if(f&1025|0){g=c[b>>2]|0;h=c[g+32>>2]|0;if(f&1|0){if((h&268435457|0)==1&0==0)break;if(!(a[b+18>>0]|0)){k=12;break}else break}if((!((h&268435456|0)==0&0==0)?(c[g+352>>2]|0)==0:0)?(c[g+180>>2]|0)==0:0)k=12}}else{g=c[b>>2]|0;f=d+64|0;while(1){f=c[f>>2]|0;if((c[f>>2]|0)==(g|0))break;else f=f+24|0}if(!(c[(c[c[f+4>>2]>>2]|0)+52>>2]|0))k=12}while(0);if((k|0)==12){c[i>>2]=c[d>>2];cd(b,44627,i);k=1;Ra=l;return k|0}if(e|0){k=0;Ra=l;return k|0}if(!(c[d+12>>2]|0)){k=0;Ra=l;return k|0}c[j>>2]=c[d>>2];cd(b,44656,j);k=1;Ra=l;return k|0}function Gm(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+32|0;o=q;p=c[b>>2]|0;j=c[d+72>>2]|0;if(!j)k=-1e6;else{i=c[p+16>>2]|0;h=0;while(1)if((c[i+(h<<4)+12>>2]|0)==(j|0)){k=h;break}else h=h+1|0}if(!f)m=0;else m=dk(p,f,0,0)|0;n=pj(b,0,0,0)|0;if(!n)h=mj(b,0,0,m,0,0,0,131072,0)|0;else{f=c[d>>2]|0;a:do if(!f)h=0;else{d=(Eu(f)|0)+1|0;b:do if(!p){j=Sv(d|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){h=0;break a}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](d)|0;l=32;break}h=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=r>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){h=0;break a}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){h=0;break a}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<d>>>0:0))){i=p+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];l=p+284|0;c[l>>2]=(c[l>>2]|0)+1;l=32;break b}i=p+296|0;h=c[i>>2]|0;if(!h){h=p+292|0;break}else{c[i>>2]=c[h>>2];l=p+284|0;c[l>>2]=(c[l>>2]|0)+1;l=32;break b}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(p,d,0)|0;l=32}while(0);if((l|0)==32)if(!h){h=0;break}ew(h|0,f|0,d|0)|0}while(0);c[n+16>>2]=h;j=c[(c[p+16>>2]|0)+(k<<4)>>2]|0;c:do if(j){f=(Eu(j)|0)+1|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))l=45;else{h=0;break c}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<f>>>0:0))){i=p+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=p+284|0;c[r>>2]=(c[r>>2]|0)+1;break d}i=p+296|0;h=c[i>>2]|0;if(!h){h=p+292|0;break}else{c[i>>2]=c[h>>2];r=p+284|0;c[r>>2]=(c[r>>2]|0)+1;break d}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;l=45}while(0);if((l|0)==45)h=_d(p,f,0)|0;if(h)ew(h|0,j|0,f|0)|0;else h=0}else h=0;while(0);c[n+12>>2]=h;h=mj(b,0,n,m,0,0,0,131072,0)|0}a[o>>0]=12;c[o+4>>2]=g;c[o+16>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;kj(b,h,o)|0;if(!h){Ra=q;return}pi(p,h,1);Ra=q;return}function Hm(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;if(c[g+56>>2]|0){f=0;return f|0}q=c[f>>2]|0;o=c[g+72>>2]|0;if(!o)y=-1e6;else{p=c[q+16>>2]|0;n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0)){y=n;break}else n=n+1|0}z=f+8|0;n=c[z>>2]|0;a:do if(!n){if((c[f+116>>2]|0)==0?(b[q+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))r=19;else{n=0;break a}else{do if((e[q+276>>1]|0)>=224){o=q+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;break b}o=q+296|0;n=c[o>>2]|0;if(!n){n=q+292|0;break}else{c[o>>2]=c[n>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;break b}}else n=q+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;r=19}while(0);if((r|0)==19)n=_d(q,224,0)|0;if(!n)n=0;else{o=n+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[n>>2]=q;o=q+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=n;c[n+8>>2]=p;c[n+4>>2]=0;c[o>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[z>>2]=n;Di(n,61,0,1,0)|0}}while(0);if((j|0)<0)p=c[f+40>>2]|0;else p=j;o=p+1|0;q=(l|0)!=0;if(q)c[l>>2]=p;x=g+36|0;do if(!(c[x>>2]&32)){if(k|0?(a[k>>0]|0)==0:0){r=32;break}Gj(f,p,y,g,h)}else r=32;while(0);if((r|0)==32)Hj(f,y,c[g+28>>2]|0,(h|0)==109&1,c[g>>2]|0);if(m|0)c[m>>2]=o;p=c[g+8>>2]|0;if(!p)p=0;else{m=q^1;s=(k|0)==0;t=n+108|0;u=n+112|0;v=n+104|0;w=h&255;r=p;p=0;while(1){g=o+1|0;j=r+55|0;if(((d[j>>0]|d[j+1>>0]<<8)&3)==2){q=(c[x>>2]&32|0)==0;if(q|m)j=q?i:0;else{c[l>>2]=o;j=0}}else j=i;if(!(!s?!(a[k+(p+1)>>0]|0):0)){q=c[r+44>>2]|0;i=c[t>>2]|0;if((c[u>>2]|0)>(i|0)){c[t>>2]=i+1;A=c[v>>2]|0;a[A+(i*20|0)>>0]=w;b[A+(i*20|0)+2>>1]=0;c[A+(i*20|0)+4>>2]=o;c[A+(i*20|0)+8>>2]=q;c[A+(i*20|0)+12>>2]=y;c[A+(i*20|0)+16>>2]=0;a[A+(i*20|0)+1>>0]=0}else Di(n,h,o,q,y)|0;o=c[z>>2]|0;i=Ij(f,r)|0;c:do if(i|0){q=c[o>>2]|0;if(!(a[q+81>>0]|0)){q=c[o+104>>2]|0;A=(c[o+108>>2]|0)+-1|0;a[q+(A*20|0)+1>>0]=-9;c[q+(A*20|0)+16>>2]=i;break}if((c[q+480>>2]|0)==0?(A=(c[i>>2]|0)+-1|0,c[i>>2]=A,(A|0)==0):0){o=c[i+12>>2]|0;do if(o|0){if(c[o+480>>2]|0){Xd(o,i);break c}q=i;if((c[o+304>>2]|0)>>>0>q>>>0)break;if((c[o+308>>2]|0)>>>0<=q>>>0)break;A=o+300|0;c[i>>2]=c[A>>2];c[A>>2]=i;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{A=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);o=c[t>>2]|0;if((o|0)>0)b[(c[v>>2]|0)+((o+-1|0)*20|0)+2>>1]=j&255}p=p+1|0;r=c[r+20>>2]|0;if(!r){o=g;break}else{i=j;o=g}}}n=f+40|0;if((o|0)<=(c[n>>2]|0)){A=p;return A|0}c[n>>2]=o;A=p;return A|0}function Im(f,g,h,i,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0;N=f+8|0;Q=c[N>>2]|0;I=f+56|0;P=c[I>>2]|0;O=P+-1|0;c[I>>2]=O;I=(c[g+36>>2]&32|0)==0?31:28;J=o<<24>>24==0;if(J){r=Q+108|0;q=c[r>>2]|0;if((c[Q+112>>2]|0)>(q|0)){c[r>>2]=q+1;M=c[Q+104>>2]|0;a[M+(q*20|0)>>0]=I;b[M+(q*20|0)+2>>1]=0;c[M+(q*20|0)+4>>2]=i;c[M+(q*20|0)+8>>2]=O;c[M+(q*20|0)+12>>2]=k;c[M+(q*20|0)+16>>2]=0;a[M+(q*20|0)+1>>0]=0}else q=Di(Q,I&255,i,O,k)|0;if(!(a[(c[Q>>2]|0)+81>>0]|0)){M=c[Q+104>>2]|0;a[M+(q*20|0)+1>>0]=-3;c[M+(q*20|0)+16>>2]=l<<16>>16}}if(!(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)){w=c[g>>2]|0;t=c[g+72>>2]|0;u=c[t+68>>2]|0;if(!u){r=t+60|0;q=t+64|0}else{r=a[w>>0]|0;if(!(r<<24>>24))q=0;else{q=0;s=w;do{s=s+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[s>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[t+56>>2]|0)>>>0)|0;r=u+(q<<3)|0;q=u+(q<<3)+4|0}r=c[r>>2]|0;a:do if(!r)q=59292;else{v=d[208+(d[w>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;t=c[q+12>>2]|0;M=a[t>>0]|0;s=(d[208+(M&255)>>0]|0)-v|0;if(!(M<<24>>24==0|(s|0)!=0)){u=w;do{t=t+1|0;u=u+1|0;M=a[t>>0]|0;s=(d[208+(M&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(s|0)!=0))}if(!s)break a;if(!r){q=59292;break}}}while(0);if(!(c[q+8>>2]|0)){q=(c[g+16>>2]|0)!=0&1;M=23}else M=24}else{q=0;M=23}if((M|0)==23)if((h|0)!=0|(q|0)!=0)M=24;else F=0;if((M|0)==24){H=n&255;u=(h|0)==0;if(u)q=0;else{t=f+116|0;q=0;s=h;do{do if((a[s+8>>0]|0)==121?(a[s+9>>0]&3)!=0:0){r=c[t>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;b:do if(!r)M=33;else while(1){if((c[r>>2]|0)==(s|0)?(c[r+12>>2]|0)==(H|0):0)break b;r=c[r+4>>2]|0;if(!r){M=33;break}}while(0);if((M|0)==33){M=0;r=Nm(f,s,g,H)|0;if(!r)break}q=c[r+16>>2]|q}while(0);s=c[s+32>>2]|0}while((s|0)!=0)}s=Km(f,g)|0|q;C=f+44|0;F=(c[C>>2]|0)+1|0;t=g+42|0;c[C>>2]=F+(b[t>>1]|0);D=Q+108|0;q=c[D>>2]|0;E=Q+112|0;if((c[E>>2]|0)>(q|0)){c[D>>2]=q+1;B=c[Q+104>>2]|0;a[B+(q*20|0)>>0]=78;b[B+(q*20|0)+2>>1]=0;c[B+(q*20|0)+4>>2]=k;c[B+(q*20|0)+8>>2]=F;c[B+(q*20|0)+12>>2]=0;c[B+(q*20|0)+16>>2]=0;a[B+(q*20|0)+1>>0]=0}else Di(Q,78,k,F,0)|0;q=b[t>>1]|0;c:do if(q<<16>>16>0){if((s|0)==-1){q=0;while(1){B=q;q=q+1|0;Vj(Q,g,i,B,q+F|0);if((q|0)>=(b[t>>1]|0))break c}}r=0;do{if(r>>>0<32?(1<<r&s|0)!=0:0){Vj(Q,g,i,r,r+1+F|0);q=b[t>>1]|0}r=r+1|0}while((r|0)<(q<<16>>16|0))}while(0);A=c[D>>2]|0;if(u)q=A;else{y=f+116|0;z=f+23|0;x=h;do{do if((a[x+8>>0]|0)==121?(a[x+9>>0]|0)==1:0){q=c[N>>2]|0;d:do if(!q){s=c[f>>2]|0;if((c[y>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[z>>0]=1;e:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))M=66;else{q=0;break d}else{do if((e[s+276>>1]|0)>=224){r=s+300|0;q=c[r>>2]|0;if(q|0){c[r>>2]=c[q>>2];B=s+284|0;c[B>>2]=(c[B>>2]|0)+1;break e}r=s+296|0;q=c[r>>2]|0;if(!q){q=s+292|0;break}else{c[r>>2]=c[q>>2];B=s+284|0;c[B>>2]=(c[B>>2]|0)+1;break e}}else q=s+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;M=66}while(0);if((M|0)==66){M=0;q=_d(s,224,0)|0}if(!q)q=0;else{v=q+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[q>>2]=s;r=s+4|0;s=c[r>>2]|0;if(s|0)c[s+4>>2]=q;c[q+8>>2]=s;c[q+4>>2]=0;c[r>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[N>>2]=q;Di(q,61,0,1,0)|0}}while(0);r=c[y>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;f:do if(!r)M=76;else while(1){if((c[r>>2]|0)==(x|0)?(c[r+12>>2]|0)==(H|0):0)break f;r=c[r+4>>2]|0;if(!r){M=76;break}}while(0);if((M|0)==76){M=0;r=Nm(f,x,g,H)|0;if(!r)break}if(!(c[x>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}s=(c[C>>2]|0)+1|0;c[C>>2]=s;u=c[r+8>>2]|0;v=q+108|0;r=c[v>>2]|0;if((c[q+112>>2]|0)>(r|0)){c[v>>2]=r+1;B=c[q+104>>2]|0;a[B+(r*20|0)>>0]=45;b[B+(r*20|0)+2>>1]=0;c[B+(r*20|0)+4>>2]=F;c[B+(r*20|0)+8>>2]=O;c[B+(r*20|0)+12>>2]=s;c[B+(r*20|0)+16>>2]=0;a[B+(r*20|0)+1>>0]=0}else r=Di(q,45,F,O,s)|0;do if(!(a[(c[q>>2]|0)+81>>0]|0)){if((r|0)<0)r=(c[v>>2]|0)+-1|0;s=c[q+104>>2]|0;t=s+(r*20|0)+1|0;if(a[t>>0]|0){Ei(q,s+(r*20|0)|0,u,-4);break}if(!u)break;c[s+(r*20|0)+16>>2]=u;a[t>>0]=-4}while(0);r=c[v>>2]|0;if((r|0)>0)b[(c[q+104>>2]|0)+((r+-1|0)*20|0)+2>>1]=w}while(0);x=c[x+32>>2]|0}while((x|0)!=0);q=c[D>>2]|0}if((A|0)<(q|0)){if((c[E>>2]|0)>(q|0)){c[D>>2]=q+1;H=c[Q+104>>2]|0;a[H+(q*20|0)>>0]=I;b[H+(q*20|0)+2>>1]=0;c[H+(q*20|0)+4>>2]=i;c[H+(q*20|0)+8>>2]=O;c[H+(q*20|0)+12>>2]=k;c[H+(q*20|0)+16>>2]=0;a[H+(q*20|0)+1>>0]=0}else q=Di(Q,I&255,i,O,k)|0;if(!(a[(c[Q>>2]|0)+81>>0]|0)){k=c[Q+104>>2]|0;a[k+(q*20|0)+1>>0]=-3;c[k+(q*20|0)+16>>2]=l<<16>>16;q=-1}else q=-1}else q=p;Lm(f,g,F,0,0,0);p=q}if(!(c[g+12>>2]|0)){Mm(f,g,i,j,0,p);q=m<<24>>24!=0&1;t=Q+108|0;r=c[t>>2]|0;u=Q+112|0;if((c[u>>2]|0)>(r|0)){c[t>>2]=r+1;m=c[Q+104>>2]|0;a[m+(r*20|0)>>0]=123;b[m+(r*20|0)+2>>1]=0;c[m+(r*20|0)+4>>2]=i;c[m+(r*20|0)+8>>2]=q;c[m+(r*20|0)+12>>2]=0;c[m+(r*20|0)+16>>2]=0;a[m+(r*20|0)+1>>0]=0}else Di(Q,123,i,q,0)|0;if(a[f+18>>0]|0){r=c[g>>2]|0;if(r|0){m=a[r>>0]|0;q=(d[208+(m&255)>>0]|0)+-115|0;if(!(m<<24>>24==0|(q|0)!=0)){s=35174;do{r=r+1|0;s=s+1|0;m=a[r>>0]|0;q=(d[208+(m&255)>>0]|0)-(d[208+(d[s>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(q|0)!=0))}if(!q)M=110}}else M=110;if((M|0)==110?(a[(c[Q>>2]|0)+81>>0]|0)==0:0){j=c[Q+104>>2]|0;m=(c[t>>2]|0)+-1|0;a[j+(m*20|0)+1>>0]=-6;c[j+(m*20|0)+16>>2]=g}if(!J?(K=c[t>>2]|0,(K|0)>0):0)b[(c[Q+104>>2]|0)+((K+-1|0)*20|0)+2>>1]=4;do if(!((p|0)<0|(p|0)==(i|0))){q=c[t>>2]|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;K=c[Q+104>>2]|0;a[K+(q*20|0)>>0]=123;b[K+(q*20|0)+2>>1]=0;c[K+(q*20|0)+4>>2]=p;c[K+(q*20|0)+8>>2]=0;c[K+(q*20|0)+12>>2]=0;c[K+(q*20|0)+16>>2]=0;a[K+(q*20|0)+1>>0]=0;break}else{Di(Q,123,p,0,0)|0;break}}while(0);q=c[t>>2]|0;if((q|0)>0)b[(c[Q+104>>2]|0)+((q+-1|0)*20|0)+2>>1]=o<<24>>24==2?2:0}if(!(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)){v=c[g>>2]|0;t=c[g+72>>2]|0;u=c[t+68>>2]|0;if(!u){r=t+60|0;q=t+64|0}else{r=a[v>>0]|0;if(!(r<<24>>24))q=0;else{q=0;s=v;do{s=s+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[s>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[t+56>>2]|0)>>>0)|0;r=u+(q<<3)|0;q=u+(q<<3)+4|0}r=c[r>>2]|0;g:do if(!r)q=59292;else{p=d[208+(d[v>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;t=c[q+12>>2]|0;o=a[t>>0]|0;s=(d[208+(o&255)>>0]|0)-p|0;if(!(o<<24>>24==0|(s|0)!=0)){u=v;do{t=t+1|0;u=u+1|0;o=a[t>>0]|0;s=(d[208+(o&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(s|0)!=0))}if(!s)break g;if(!r){q=59292;break}}}while(0);q=c[q+8>>2]|0;if(q|0){x=f+116|0;y=f+23|0;z=f+44|0;do{u=Rm(f,g,q,0)|0;do if(u|0){r=c[N>>2]|0;h:do if(!r){t=c[f>>2]|0;if((c[x>>2]|0)==0?(b[t+76>>1]&8)==0:0)a[y>>0]=1;i:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))M=152;else{r=0;break h}else{do if((e[t+276>>1]|0)>=224){s=t+300|0;r=c[s>>2]|0;if(r|0){c[s>>2]=c[r>>2];o=t+284|0;c[o>>2]=(c[o>>2]|0)+1;break i}s=t+296|0;r=c[s>>2]|0;if(!r){r=t+292|0;break}else{c[s>>2]=c[r>>2];o=t+284|0;c[o>>2]=(c[o>>2]|0)+1;break i}}else r=t+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1;M=152}while(0);if((M|0)==152){M=0;r=_d(t,224,0)|0}if(!r)r=0;else{v=r+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[r>>2]=t;s=t+4|0;t=c[s>>2]|0;if(t|0)c[t+4>>2]=r;c[r+8>>2]=t;c[r+4>>2]=0;c[s>>2]=r;c[r+20>>2]=381479589;c[r+12>>2]=f;c[N>>2]=r;Di(r,61,0,1,0)|0}}while(0);s=c[x>>2]|0;s=c[((s|0)==0?f:s)+260>>2]|0;j:do if(!s)M=162;else while(1){if((c[s>>2]|0)==(u|0)?(c[s+12>>2]|0)==2:0)break j;s=c[s+4>>2]|0;if(!s){M=162;break}}while(0);if((M|0)==162){M=0;s=Nm(f,u,g,2)|0;if(!s)break}if(!(c[u>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}t=(c[z>>2]|0)+1|0;c[z>>2]=t;p=c[s+8>>2]|0;v=r+108|0;s=c[v>>2]|0;if((c[r+112>>2]|0)>(s|0)){c[v>>2]=s+1;o=c[r+104>>2]|0;a[o+(s*20|0)>>0]=45;b[o+(s*20|0)+2>>1]=0;c[o+(s*20|0)+4>>2]=F;c[o+(s*20|0)+8>>2]=0;c[o+(s*20|0)+12>>2]=t;c[o+(s*20|0)+16>>2]=0;a[o+(s*20|0)+1>>0]=0}else s=Di(r,45,F,0,t)|0;do if(!(a[(c[r>>2]|0)+81>>0]|0)){if((s|0)<0)s=(c[v>>2]|0)+-1|0;t=c[r+104>>2]|0;u=t+(s*20|0)+1|0;if(a[u>>0]|0){Ei(r,t+(s*20|0)|0,p,-4);break}if(p|0){c[t+(s*20|0)+16>>2]=p;a[u>>0]=-4}}while(0);s=c[v>>2]|0;if((s|0)>0)b[(c[r+104>>2]|0)+((s+-1|0)*20|0)+2>>1]=w}while(0);q=c[q+12>>2]|0}while((q|0)!=0)}}x=n&255;if(h|0){y=f+116|0;z=f+23|0;A=f+44|0;w=h;do{do if((a[w+8>>0]|0)==121?(a[w+9>>0]|0)==2:0){q=c[N>>2]|0;k:do if(!q){s=c[f>>2]|0;if((c[y>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[z>>0]=1;l:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))M=196;else{q=0;break k}else{do if((e[s+276>>1]|0)>=224){r=s+300|0;q=c[r>>2]|0;if(q|0){c[r>>2]=c[q>>2];h=s+284|0;c[h>>2]=(c[h>>2]|0)+1;break l}r=s+296|0;q=c[r>>2]|0;if(!q){q=s+292|0;break}else{c[r>>2]=c[q>>2];h=s+284|0;c[h>>2]=(c[h>>2]|0)+1;break l}}else q=s+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;M=196}while(0);if((M|0)==196){M=0;q=_d(s,224,0)|0}if(!q)q=0;else{v=q+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[q>>2]=s;r=s+4|0;s=c[r>>2]|0;if(s|0)c[s+4>>2]=q;c[q+8>>2]=s;c[q+4>>2]=0;c[r>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[N>>2]=q;Di(q,61,0,1,0)|0}}while(0);r=c[y>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;m:do if(!r)M=206;else while(1){if((c[r>>2]|0)==(w|0)?(c[r+12>>2]|0)==(x|0):0)break m;r=c[r+4>>2]|0;if(!r){M=206;break}}while(0);if((M|0)==206){M=0;r=Nm(f,w,g,x)|0;if(!r)break}if(!(c[w>>2]|0))v=0;else{v=(c[f>>2]|0)+32|0;v=bw(c[v>>2]|0,c[v+4>>2]|0,13)|0;L()|0;v=v&1^1}s=(c[A>>2]|0)+1|0;c[A>>2]=s;u=c[r+8>>2]|0;p=q+108|0;r=c[p>>2]|0;if((c[q+112>>2]|0)>(r|0)){c[p>>2]=r+1;h=c[q+104>>2]|0;a[h+(r*20|0)>>0]=45;b[h+(r*20|0)+2>>1]=0;c[h+(r*20|0)+4>>2]=F;c[h+(r*20|0)+8>>2]=O;c[h+(r*20|0)+12>>2]=s;c[h+(r*20|0)+16>>2]=0;a[h+(r*20|0)+1>>0]=0}else r=Di(q,45,F,O,s)|0;do if(!(a[(c[q>>2]|0)+81>>0]|0)){if((r|0)<0)r=(c[p>>2]|0)+-1|0;s=c[q+104>>2]|0;t=s+(r*20|0)+1|0;if(a[t>>0]|0){Ei(q,s+(r*20|0)|0,u,-4);break}if(u|0){c[s+(r*20|0)+16>>2]=u;a[t>>0]=-4}}while(0);r=c[p>>2]|0;if((r|0)>0)b[(c[q+104>>2]|0)+((r+-1|0)*20|0)+2>>1]=v}while(0);w=c[w+32>>2]|0}while((w|0)!=0)}r=c[Q+12>>2]|0;q=0-P|0;if(((c[r+56>>2]|0)+(c[r+60>>2]|0)|0)<0){mk(r,Q,q);return}else{c[(c[r+64>>2]|0)+(q<<2)>>2]=c[Q+108>>2];return}}function Jm(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=c[f+20>>2]|0;if((t|0)<=0){v=0;return v|0}q=b[e+42>>1]|0;u=q<<16>>16>0;s=e+4|0;r=e+40|0;n=(h|0)==0;o=q<<16>>16;p=q<<16>>16;q=q<<16>>16;m=0;a:while(1){l=c[f+36+(m<<3)+4>>2]|0;b:do if(u){k=(l|0)==0;if(!n){j=0;while(1){if(!((c[g+(j<<2)>>2]|0)<=-1?(j|0)!=(b[r>>1]|0):0))v=8;do if((v|0)==8){v=0;e=c[s>>2]|0;if(k)if(!(a[e+(j<<4)+15>>0]&1))break;else{e=1;v=28;break a}h=c[e+(j<<4)>>2]|0;i=a[h>>0]|0;e=(d[208+(i&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(e|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(e|0)!=0))}if(!e){e=1;v=28;break a}}while(0);j=j+1|0;if((j|0)>=(o|0))break b}}if(k){e=0;while(1){if((c[g+(e<<2)>>2]|0)>-1?a[(c[s>>2]|0)+(e<<4)+15>>0]&1:0){e=1;v=28;break a}e=e+1|0;if((e|0)>=(p|0))break b}}j=0;do{if((c[g+(j<<2)>>2]|0)>-1){h=c[(c[s>>2]|0)+(j<<4)>>2]|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(w<<24>>24==0|(e|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(e|0)!=0))}if(!e){e=1;v=28;break a}}j=j+1|0}while((j|0)<(q|0))}while(0);m=m+1|0;if((m|0)>=(t|0)){e=0;v=28;break}}if((v|0)==28)return e|0;return 0}function Km(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+16|0;o=q;if(0==0?(c[(c[e>>2]|0)+32>>2]&16384|0)==0:0){p=0;Ra=q;return p|0}g=c[f+16>>2]|0;if(!g)g=0;else{j=g;g=0;do{i=c[j+20>>2]|0;if((i|0)>0){h=0;do{n=c[j+36+(h<<3)>>2]|0;g=((n|0)>31?-1:1<<n)|g;h=h+1|0}while((h|0)<(i|0))}j=c[j+4>>2]|0}while((j|0)!=0)}n=c[f>>2]|0;k=c[f+72>>2]|0;l=c[k+68>>2]|0;if(!l){i=k+60|0;h=k+64|0}else{i=a[n>>0]|0;if(!(i<<24>>24))h=0;else{h=0;j=n;do{j=j+1|0;h=G(h+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[j>>0]|0}while(i<<24>>24!=0)}h=(h>>>0)%((c[k+56>>2]|0)>>>0)|0;i=l+(h<<3)|0;h=l+(h<<3)+4|0}i=c[i>>2]|0;a:do if(!i)h=59292;else{m=d[208+(d[n>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;i=i+-1|0;k=c[h+12>>2]|0;l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-m|0;if(!(l<<24>>24==0|(j|0)!=0)){l=n;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j)break a;if(!i){h=59292;break}}}while(0);h=c[h+8>>2]|0;if(!h){r=g;Ra=q;return r|0}do{c[o>>2]=0;Om(e,f,h,o,0)|0;i=c[o>>2]|0;if((i|0)!=0?(p=b[i+50>>1]|0,p<<16>>16!=0):0){j=c[i+4>>2]|0;k=p&65535;i=0;do{r=b[j+(i<<1)>>1]|0;g=(r<<16>>16>31?-1:1<<(r<<16>>16))|g;i=i+1|0}while(i>>>0<k>>>0)}h=c[h+12>>2]|0}while((h|0)!=0);Ra=q;return g|0}function Lm(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;_=Ra;Ra=Ra+16|0;X=_+8|0;Y=_+4|0;S=_;Z=c[f>>2]|0;R=f+146|0;V=a[R>>0]|0;W=Z+32|0;if((c[W>>2]&16384|0)==0&0==0){Ra=_;return}T=g+72|0;p=c[T>>2]|0;m=c[Z+16>>2]|0;if(!p)l=-1e6;else{l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(p|0))break;else l=l+1|0}Q=c[m+(l<<4)>>2]|0;m=c[g+16>>2]|0;do if(!m)l=g;else{x=(j|0)==0;y=V<<24>>24==0;z=g+40|0;A=(k|0)==0;B=Z+81|0;C=f+8|0;D=f+40|0;E=(h|0)==0;F=Z+312|0;H=f+116|0;I=(i|0)==0;J=h+1|0;K=f+23|0;L=(Z|0)==0;M=Z+480|0;N=Z+304|0;O=Z+308|0;P=Z+300|0;a:while(1){c[X>>2]=0;c[Y>>2]=0;b:do if(!x){p=c[g>>2]|0;n=c[m+8>>2]|0;if(p){if(n|0){U=a[p>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(U<<24>>24==0|(o|0)!=0)U=16;else{q=n;do{p=p+1|0;q=q+1|0;U=a[p>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(U<<24>>24==0|(o|0)!=0));U=16}}}else{o=((n|0)!=0)<<31>>31;U=16}if((U|0)==16?(U=0,(o|0)==0):0){U=26;break}r=c[m+20>>2]|0;if((r|0)>0){if(A){p=0;while(1){if((c[j+(c[m+36+(p<<3)>>2]<<2)>>2]|0)>-1){U=26;break b}p=p+1|0;if((p|0)>=(r|0))break b}}p=0;do{q=c[m+36+(p<<3)>>2]|0;if((c[j+(q<<2)>>2]|0)>-1){U=26;break b}p=p+1|0;if((q|0)==(b[z>>1]|0)){U=26;break b}}while((p|0)<(r|0))}}else{n=c[m+8>>2]|0;U=26}while(0);c:do if((U|0)==26){U=0;if(!(a[R>>0]|0))w=bd(f,0,n,Q)|0;else w=Sd(Z,n,Q)|0;n=(w|0)==0;if(!n?(Om(f,w,m,X,Y)|0)==0:0){n=c[Y>>2]|0;if(!n){c[S>>2]=c[m+36>>2];n=S}u=m+20|0;if((c[u>>2]|0)>0){v=w+4|0;r=c[X>>2]|0;s=w+40|0;t=r+4|0;if(!r){q=0;r=0;do{p=n+(r<<2)|0;if((c[p>>2]|0)==(b[z>>1]|0))c[p>>2]=-1;if(c[F>>2]|0)q=(Ik(f,c[w>>2]|0,c[(c[v>>2]|0)+(b[s>>1]<<4)>>2]|0,l)|0)==2&1;r=r+1|0}while((r|0)<(c[u>>2]|0));p=w}else{q=0;r=0;do{p=n+(r<<2)|0;if((c[p>>2]|0)==(b[z>>1]|0))c[p>>2]=-1;if(c[F>>2]|0)q=(Ik(f,c[w>>2]|0,c[(c[v>>2]|0)+(b[(c[t>>2]|0)+(r<<1)>>1]<<4)>>2]|0,l)|0)==2&1;r=r+1|0}while((r|0)<(c[u>>2]|0));p=w}}else{q=0;p=w}Hj(f,l,c[w+28>>2]|0,0,c[p>>2]|0);c[D>>2]=(c[D>>2]|0)+1;if(!E)Pm(f,l,w,c[X>>2]|0,m,n,h,-1,q);do if(!I){p=c[H>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;if(p|0){p=c[p>>2]|0;if((p|0)==(c[m+28>>2]|0)?(a[m+25>>0]|0)==8:0)break;if((p|0)==(c[m+32>>2]|0)?(a[m+26>>0]|0)==8:0)break}Pm(f,l,w,c[X>>2]|0,m,n,i,1,q)}while(0);n=c[Y>>2]|0;if(!n)break;do if(!L){if(c[M>>2]|0){Xd(Z,n);break c}p=n;if((c[N>>2]|0)>>>0<=p>>>0){if((c[O>>2]|0)>>>0<=p>>>0)break;c[n>>2]=c[P>>2];c[P>>2]=n;break c}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{w=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}if(y)break a;if(a[B>>0]|0)break a;if(n){n=c[C>>2]|0;d:do if(!n){r=c[f>>2]|0;if((c[H>>2]|0)==0?(b[r+76>>1]&8)==0:0)a[K>>0]=1;e:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))U=48;else{n=0;break d}else{do if((e[r+276>>1]|0)>=224){p=r+300|0;n=c[p>>2]|0;if(n|0){c[p>>2]=c[n>>2];w=r+284|0;c[w>>2]=(c[w>>2]|0)+1;break e}p=r+296|0;n=c[p>>2]|0;if(!n){n=r+292|0;break}else{c[p>>2]=c[n>>2];w=r+284|0;c[w>>2]=(c[w>>2]|0)+1;break e}}else n=r+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;U=48}while(0);if((U|0)==48){U=0;n=_d(r,224,0)|0}if(!n)n=0;else{p=n+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[n>>2]=r;p=r+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=n;c[n+8>>2]=q;c[n+4>>2]=0;c[p>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[C>>2]=n;Di(n,61,0,1,0)|0}}while(0);v=n+108|0;q=c[v>>2]|0;s=m+20|0;u=c[s>>2]|0;t=q+1+u|0;w=n+112|0;if((u|0)>0){u=n+104|0;r=0;do{p=J+(c[m+36+(r<<3)>>2]|0)|0;if((c[w>>2]|0)>(q|0)){c[v>>2]=q+1;$=c[u>>2]|0;a[$+(q*20|0)>>0]=50;b[$+(q*20|0)+2>>1]=0;c[$+(q*20|0)+4>>2]=p;c[$+(q*20|0)+8>>2]=t;c[$+(q*20|0)+12>>2]=0;c[$+(q*20|0)+16>>2]=0;a[$+(q*20|0)+1>>0]=0}else Di(n,50,p,t,0)|0;r=r+1|0;q=c[v>>2]|0}while((r|0)<(c[s>>2]|0))}p=d[m+24>>0]|0;if((c[w>>2]|0)>(q|0)){c[v>>2]=q+1;$=c[n+104>>2]|0;a[$+(q*20|0)>>0]=-106;b[$+(q*20|0)+2>>1]=0;c[$+(q*20|0)+4>>2]=p;c[$+(q*20|0)+8>>2]=-1;c[$+(q*20|0)+12>>2]=0;c[$+(q*20|0)+16>>2]=0;a[$+(q*20|0)+1>>0]=0;break}else{Di(n,150,p,-1,0)|0;break}}}while(0);m=c[m+4>>2]|0;if(!m){U=100;break}}if((U|0)==100){l=g;p=c[T>>2]|0;break}Ra=_;return}while(0);r=c[l>>2]|0;o=c[p+68>>2]|0;if(!o){m=p+60|0;l=p+64|0}else{m=a[r>>0]|0;if(!(m<<24>>24))l=0;else{l=0;n=r;do{n=n+1|0;l=G(l+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[n>>0]|0}while(m<<24>>24!=0)}l=(l>>>0)%((c[p+56>>2]|0)>>>0)|0;m=o+(l<<3)|0;l=o+(l<<3)+4|0}m=c[m>>2]|0;f:do if(!m)l=59292;else{q=d[208+(d[r>>0]|0)>>0]|0;while(1){l=c[l>>2]|0;m=m+-1|0;o=c[l+12>>2]|0;$=a[o>>0]|0;n=(d[208+($&255)>>0]|0)-q|0;if(!($<<24>>24==0|(n|0)!=0)){p=r;do{o=o+1|0;p=p+1|0;$=a[o>>0]|0;n=(d[208+($&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!($<<24>>24==0|(n|0)!=0))}if(!n)break f;if(!m){l=59292;break}}}while(0);l=c[l+8>>2]|0;if(!l){Ra=_;return}B=(j|0)!=0;C=f+116|0;p=V<<24>>24==0;q=f+20|0;r=f+40|0;s=(i|0)==0;t=Z+81|0;u=(Z|0)==0;v=(h|0)==0;w=Z+480|0;x=B&1;y=Z+304|0;z=Z+308|0;A=Z+300|0;g:while(1){c[X>>2]=0;c[Y>>2]=0;if(B?(Jm(g,l,j,k)|0)==0:0)U=142;else U=118;do if((U|0)==118){U=0;o=l+24|0;if((((a[o>>0]|0)==0?(c[W>>2]&524288|0)==0&0==0:0)?(c[C>>2]|0)==0:0)?(a[q>>0]|0)==0:0){U=142;break}if(Om(f,g,l,X,Y)|0){if(p){U=124;break g}if(!(a[t>>0]|0))break;else{U=145;break g}}m=pj(f,0,0,0)|0;if(m|0){$=c[l>>2]|0;c[m+24>>2]=$;n=m+16|0;c[n>>2]=c[$>>2];$=$+32|0;c[$>>2]=(c[$>>2]|0)+1;$=c[r>>2]|0;c[r>>2]=$+1;c[m+48>>2]=$;if(!s)Qm(f,m,g,c[X>>2]|0,l,c[Y>>2]|0,i,-1);if(!v?($=a[l+25+x>>0]|0,Qm(f,m,g,c[X>>2]|0,l,c[Y>>2]|0,h,1),($|2)<<24>>24!=10&(a[o>>0]|0)==0):0){$=c[C>>2]|0;a[(($|0)==0?f:$)+21>>0]=1}c[n>>2]=0;qi(Z,m)}m=c[Y>>2]|0;if(m){if(!u){if(c[w>>2]|0){Xd(Z,m);U=142;break}$=m;if((c[y>>2]|0)>>>0<=$>>>0?(c[z>>2]|0)>>>0>$>>>0:0){c[m>>2]=c[A>>2];c[A>>2]=m;U=142;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);U=142;break}else{U=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);U=142;break}}else U=142}while(0);l=c[l+12>>2]|0;if(!l){U=145;break}}if((U|0)==124){Ra=_;return}else if((U|0)==145){Ra=_;return}}function Mm(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;w=z;x=f+8|0;y=c[x>>2]|0;n=c[g+8>>2]|0;a:do if(!(c[g+36>>2]&32))g=0;else{if(!n){Ra=z;return}g=n;while(1){v=g+55|0;if(((d[v>>0]|d[v+1>>0]<<8)&3)==2)break a;g=c[g+20>>2]|0;if(!g){g=0;break}}}while(0);if(!n){Ra=z;return}t=y+108|0;u=y+112|0;v=y+104|0;if(!j){l=-1;m=0;p=n;q=0;while(1){do if((p|0)!=(g|0)?(r=q+i|0,(r|0)!=(k|0)):0){l=el(f,p,h,0,1,w,m,l)|0;m=p+55|0;m=e[(((d[m>>0]|d[m+1>>0]<<8)&8)==0?p+52|0:p+50|0)>>1]|0;n=c[t>>2]|0;if((c[u>>2]|0)>(n|0)){c[t>>2]=n+1;s=c[v>>2]|0;a[s+(n*20|0)>>0]=-123;b[s+(n*20|0)+2>>1]=0;c[s+(n*20|0)+4>>2]=r;c[s+(n*20|0)+8>>2]=l;c[s+(n*20|0)+12>>2]=m;c[s+(n*20|0)+16>>2]=0;a[s+(n*20|0)+1>>0]=0}else Di(y,133,r,l,m)|0;m=c[w>>2]|0;if(m){n=c[x>>2]|0;o=c[n+12>>2]|0;m=~m;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,n,m);m=p;break}else{c[(c[o+64>>2]|0)+(m<<2)>>2]=c[n+108>>2];m=p;break}}else m=p}while(0);p=c[p+20>>2]|0;if(!p)break;else q=q+1|0}Ra=z;return}else{l=-1;m=0;p=n;q=0;while(1){do if(!((p|0)==(g|0)?1:(c[j+(q<<2)>>2]|0)==0)?(s=q+i|0,(s|0)!=(k|0)):0){l=el(f,p,h,0,1,w,m,l)|0;m=p+55|0;m=e[(((d[m>>0]|d[m+1>>0]<<8)&8)==0?p+52|0:p+50|0)>>1]|0;n=c[t>>2]|0;if((c[u>>2]|0)>(n|0)){c[t>>2]=n+1;r=c[v>>2]|0;a[r+(n*20|0)>>0]=-123;b[r+(n*20|0)+2>>1]=0;c[r+(n*20|0)+4>>2]=s;c[r+(n*20|0)+8>>2]=l;c[r+(n*20|0)+12>>2]=m;c[r+(n*20|0)+16>>2]=0;a[r+(n*20|0)+1>>0]=0}else Di(y,133,s,l,m)|0;m=c[w>>2]|0;if(m){n=c[x>>2]|0;o=c[n+12>>2]|0;m=~m;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,n,m);m=p;break}else{c[(c[o+64>>2]|0)+(m<<2)>>2]=c[n+108>>2];m=p;break}}else m=p}while(0);p=c[p+20>>2]|0;if(!p)break;else q=q+1|0}Ra=z;return}}function Nm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;$=Ra;Ra=Ra+96|0;X=$+16|0;q=$+8|0;p=$;W=$+56|0;r=$+24|0;Y=c[f+116>>2]|0;Y=(Y|0)==0?f:Y;_=c[f>>2]|0;m=(_|0)==0;a:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](24)|0;P=24;break}j=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){Z=c[14978]|0;U=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;T=L()|0;c[14768]=((T|0)<0|(T|0)==0&U>>>0<=Z>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){_=0;Ra=$;return _|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;Z=k}else Z=k}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){_=0;Ra=$;return _|0}}else{do if((e[_+276>>1]|0)>=24){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=24;break a}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=24;break a}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,24,0)|0;P=24}while(0);if((P|0)==24)if(!j){_=0;Ra=$;return _|0}else Z=j;l=Z;n=l+24|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));U=Y+260|0;c[Z+4>>2]=c[U>>2];c[U>>2]=Z;b:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](28)|0;P=48;break}j=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){U=c[14978]|0;T=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;S=L()|0;c[14768]=((S|0)<0|(S|0)==0&T>>>0<=U>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(k){j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;Q=k}else Q=k}else P=49}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){P=49;break}}else{do if((e[_+276>>1]|0)>=28){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=48;break b}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=48;break b}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,28,0)|0;P=48}while(0);if((P|0)==48)if(!j)P=49;else Q=j;if((P|0)==49){c[Z+8>>2]=0;_=0;Ra=$;return _|0}l=Q;n=l+24|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));c[Z+8>>2]=Q;R=(c[Y+8>>2]|0)+212|0;c[Q+24>>2]=c[R>>2];c[R>>2]=Q;c[Z>>2]=g;c[Z+12>>2]=i;R=Z+16|0;c[R>>2]=-1;S=Z+20|0;c[S>>2]=-1;c:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](276)|0;P=73;break}j=Wa[c[29356>>2]&127](276)|0;if((c[14985]|0)>>>0<276)c[14985]=276;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){U=c[14978]|0;T=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&T>>>0<=U>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){_=0;Ra=$;return _|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;U=k}else U=k}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){_=0;Ra=$;return _|0}}else{do if((e[_+276>>1]|0)>=276){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=73;break c}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=73;break c}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,276,0)|0;P=73}while(0);if((P|0)==73)if(!j){_=0;Ra=$;return _|0}else U=j;O=U+4|0;gw(O|0,0,272)|0;k=r+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[r>>2]=U;c[U>>2]=_;c[U+120>>2]=h;c[U+116>>2]=Y;k=c[g>>2]|0;c[U+240>>2]=k;a[U+144>>0]=a[g+8>>0]|0;c[U+132>>2]=c[f+132>>2];a[U+25>>0]=a[f+25>>0]|0;o=U+8|0;j=c[o>>2]|0;T=U;d:do if(!j){e:do if(c[_+272>>2]|0)if(!(a[_+81>>0]|0))P=86;else k=_;else{do if((e[_+276>>1]|0)>=224){j=_+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=87;break e}j=_+296|0;k=c[j>>2]|0;if(!k){j=_+292|0;break}else{c[j>>2]=c[k>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=87;break e}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;P=86}while(0);if((P|0)==86){k=_d(_,224,0)|0;P=87}do if((P|0)==87){if(k|0){l=k+104|0;n=l+120|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));c[k>>2]=_;j=_+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=U;c[o>>2]=k;Di(k,61,0,1,0)|0;N=k;j=c[g>>2]|0;P=91;break d}j=c[U>>2]|0;k=c[U+64>>2]|0;if(k){if(j|0){if(c[j+480>>2]|0){Xd(j,k);k=j;break}Y=k;if((c[j+304>>2]|0)>>>0<=Y>>>0?(c[j+308>>2]|0)>>>0>Y>>>0:0){Y=j+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;k=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);k=j;break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);k=j;break}}else k=j}while(0);j=c[U+68>>2]|0;if(j|0)ri(k,j);j=U+24|0;if(k){Y=k+272|0;c[Y>>2]=(c[Y>>2]|0)-(d[j>>0]|0)}}else{N=j;j=k;P=91}while(0);if((P|0)==91){do if(j|0){c[p>>2]=j;m=dd(_,44694,p)|0;j=c[N>>2]|0;if(!(a[j+81>>0]|0)){j=(c[N+108>>2]|0)+-1|0;k=c[N+104>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(N,k+(j*20|0)|0,m,-7);break}if(!m)break;c[k+(j*20|0)+16>>2]=m;a[l>>0]=-7;break}if(m|0){if(j|0){if(c[j+480>>2]|0){Xd(j,m);break}M=m;if((c[j+304>>2]|0)>>>0<=M>>>0?(c[j+308>>2]|0)>>>0>M>>>0:0){M=j+300|0;c[m>>2]=c[M>>2];c[M>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{M=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}while(0);j=c[g+12>>2]|0;do if(!j)j=0;else{h=dk(_,j,0,0)|0;n=(h|0)==0;do if(n)P=115;else{k=r+24|0;l=e[k>>1]|0;b[k>>1]=l&28655;c[W>>2]=T;c[W+4>>2]=125;c[W+8>>2]=126;c[W+12>>2]=0;c[W+24>>2]=r;m=h+24|0;j=U+208|0;M=(c[j>>2]|0)+(c[m>>2]|0)|0;c[j>>2]=M;j=c[(c[U>>2]|0)+120>>2]|0;if((j|0)>=(M|0)){_j(W,h)|0;j=c[W>>2]|0;M=j+208|0;c[M>>2]=(c[M>>2]|0)-(c[m>>2]|0);M=b[k>>1]|0;K=h+4|0;c[K>>2]=c[K>>2]|M&-32752&65535;b[k>>1]=l&36880|M&65535;if((c[r+20>>2]|0)<=0)if((c[j+36>>2]|0)<1){P=115;break}else{j=0;break}}else{c[q>>2]=j;cd(U,41637,q)}j=0}while(0);if((P|0)==115){if(!(a[_+81>>0]|0)){M=U+56|0;j=(c[M>>2]|0)+-1|0;c[M>>2]=j;Tj(U,h,j,16)}else j=0;if(n)break}ni(_,h)}while(0);I=c[o>>2]|0;J=c[U>>2]|0;k=c[g+28>>2]|0;f:do if(k|0){K=(i|0)==11;M=U+145|0;u=i&255;v=I+108|0;w=I+112|0;x=W+4|0;y=I+104|0;z=(J|0)==0;A=J+272|0;B=J+276|0;C=J+81|0;D=J+288|0;E=J+300|0;F=J+296|0;G=J+284|0;H=J+292|0;while(1){if(K)l=d[k+1>>0]|0;else l=u;a[M>>0]=l;l=c[k+32>>2]|0;g:do if(l|0){c[X>>2]=l;h=dd(J,34793,X)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;t=c[y>>2]|0;a[t+(l*20|0)>>0]=-88;b[t+(l*20|0)+2>>1]=0;c[t+(l*20|0)+4>>2]=2147483647;c[t+(l*20|0)+8>>2]=1;c[t+(l*20|0)+12>>2]=0;c[t+(l*20|0)+16>>2]=0;a[t+(l*20|0)+1>>0]=0}else l=Di(I,168,2147483647,1,0)|0;m=c[I>>2]|0;if(!(a[m+81>>0]|0)){if((l|0)<0)l=(c[v>>2]|0)+-1|0;m=c[y>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(I,m+(l*20|0)|0,h,-7);break}if(!h)break;c[m+(l*20|0)+16>>2]=h;a[n>>0]=-7;break}if(h|0){do if(m|0){if(c[m+480>>2]|0){Xd(m,h);break g}l=h;if((c[m+304>>2]|0)>>>0<=l>>>0){if((c[m+308>>2]|0)>>>0<=l>>>0)break;t=m+300|0;c[h>>2]=c[t>>2];c[t>>2]=h;break g}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}while(0);switch(a[k>>0]|0){case 122:{p=c[U>>2]|0;q=pj(U,0,0,0)|0;if(q|0){h=c[k+12>>2]|0;h:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;i:do if(!p){t=Sv(o|0,0,-1,-1)|0;s=L()|0;if(s>>>0>0|(s|0)==0&t>>>0>2147483390){l=0;break h}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=171;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){t=c[14978]|0;s=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&s>>>0<=t>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break h}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break h}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=171;break i}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=171;break i}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=171}while(0);if((P|0)==171){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;j:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;k:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=188;else{l=0;break j}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];t=p+284|0;c[t>>2]=(c[t>>2]|0)+1;break k}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];t=p+284|0;c[t>>2]=(c[t>>2]|0)+1;break k}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=188}while(0);if((P|0)==188){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+4>>2]=l}}m=gk(J,c[k+20>>2]|0,0)|0;l=c[k+16>>2]|0;if(!l)l=0;else l=dk(J,l,0,0)|0;tj(U,q,m,l,d[M>>0]|0,0);break}case 120:{p=c[U>>2]|0;t=pj(U,0,0,0)|0;if(t|0){h=c[k+12>>2]|0;l:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;m:do if(!p){s=Sv(o|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&s>>>0>2147483390){l=0;break l}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=221;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){s=c[14978]|0;i=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;r=L()|0;c[14768]=((r|0)<0|(r|0)==0&i>>>0<=s>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break l}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break l}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=221;break m}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=221;break m}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=221}while(0);if((P|0)==221){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[t+8+(((c[t>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;n:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;o:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=238;else{l=0;break n}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];s=p+284|0;c[s>>2]=(c[s>>2]|0)+1;break o}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];s=p+284|0;c[s>>2]=(c[s>>2]|0)+1;break o}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=238}while(0);if((P|0)==238){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[t+8+(((c[t>>2]|0)+-1|0)*72|0)+4>>2]=l}}r=fk(J,c[k+8>>2]|0,0)|0;i=jk(J,c[k+24>>2]|0)|0;s=d[M>>0]|0;m=c[k+28>>2]|0;do if(!m)l=0;else{q=gk(J,c[m>>2]|0,0)|0;l=c[m+4>>2]|0;if(!l)p=0;else p=dk(J,l,0,0)|0;o=gk(J,c[m+8>>2]|0,0)|0;l=c[m+12>>2]|0;if(!l)h=0;else h=dk(J,l,0,0)|0;p:do if(z){if(!(c[7324]|0)){V=Wa[c[29340>>2]&127](36)|0;P=268;break}l=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){aa=c[14978]|0;n=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=aa>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l)break;m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){P=277;break}c[14987]=m;P=277}else{if(c[A>>2]|0){if(a[C>>0]|0)break}else{do if((e[B>>1]|0)<36)l=D;else{l=c[E>>2]|0;if(l|0){c[E>>2]=c[l>>2];c[G>>2]=(c[G>>2]|0)+1;V=l;P=268;break p}l=c[F>>2]|0;if(!l){l=H;break}c[F>>2]=c[l>>2];c[G>>2]=(c[G>>2]|0)+1;V=l;P=268;break p}while(0);c[l>>2]=(c[l>>2]|0)+1}V=_d(J,36,0)|0;P=268}while(0);if((P|0)==268?(P=0,V|0):0){l=V;P=277}if((P|0)==277){P=0;c[l>>2]=q;c[l+4>>2]=p;c[l+8>>2]=o;c[l+12>>2]=h;c[l+16>>2]=0;break}if(q|0)ri(J,q);if(p|0)ni(J,p);if(o|0)ri(J,o);if(!h){l=0;break}ni(J,h);l=0}while(0);vj(U,t,r,i,s,l);break}case 121:{p=c[U>>2]|0;q=pj(U,0,0,0)|0;if(q|0){h=c[k+12>>2]|0;q:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;r:do if(!p){aa=Sv(o|0,0,-1,-1)|0;t=L()|0;if(t>>>0>0|(t|0)==0&aa>>>0>2147483390){l=0;break q}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=305;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){aa=c[14978]|0;t=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;s=L()|0;c[14768]=((s|0)<0|(s|0)==0&t>>>0<=aa>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break q}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break q}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=305;break r}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=305;break r}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=305}while(0);if((P|0)==305){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;s:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;t:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=322;else{l=0;break s}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];aa=p+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break t}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];aa=p+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break t}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=322}while(0);if((P|0)==322){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+4>>2]=l}}l=c[k+16>>2]|0;if(!l)l=0;else l=dk(J,l,0,0)|0;sj(U,q,l);break}default:{l=fk(J,c[k+8>>2]|0,0)|0;a[W>>0]=4;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;kj(U,l,W)|0;if(l|0)pi(J,l,1)}}do if((a[k>>0]|0)!=-125){l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;n=c[y>>2]|0;a[n+(l*20|0)>>0]=124;l=n+(l*20|0)+1|0;n=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));break}else{Di(I,124,0,0,0)|0;break}}while(0);k=c[k+36>>2]|0;if(!k)break f}}while(0);do if(j|0){k=c[N+12>>2]|0;j=~j;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,N,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[N+108>>2];break}}while(0);m=N+108|0;j=c[m>>2]|0;if((c[N+112>>2]|0)>(j|0)){c[m>>2]=j+1;l=c[N+104>>2]|0;a[l+(j*20|0)>>0]=69;l=l+(j*20|0)+1|0;n=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0))}else Di(N,69,0,0,0)|0;l=f+36|0;do if(c[l>>2]|0){k=c[U>>2]|0;j=c[O>>2]|0;if(j|0){if(k|0){if(c[k+480>>2]|0){Xd(k,j);break}aa=j;if((c[k+304>>2]|0)>>>0<=aa>>>0?(c[k+308>>2]|0)>>>0>aa>>>0:0){aa=k+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}}else{c[f+4>>2]=c[O>>2];c[l>>2]=c[U+36>>2];c[f+12>>2]=c[U+12>>2]}while(0);if((a[_+81>>0]|0)==0?(c[l>>2]|0)==0:0){f=N+104|0;aa=c[f>>2]|0;Fi(N,Y+96|0);c[Q+4>>2]=c[m>>2];c[f>>2]=0;c[Q>>2]=aa}c[Q+8>>2]=c[U+44>>2];c[Q+12>>2]=c[U+40>>2];c[Q+20>>2]=g;c[R>>2]=c[U+136>>2];c[S>>2]=c[U+140>>2];l=c[N>>2]|0;kb(l,N);m=c[N+4>>2]|0;k=N+8|0;j=c[k>>2]|0;if(!m)c[l+4>>2]=j;else{c[m+8>>2]=j;j=c[k>>2]|0}if(j|0)c[j+4>>2]=m;c[N+20>>2]=1443283912;c[N>>2]=0;do if(l){if(c[l+480>>2]|0){Xd(l,N);break}aa=N;if((c[l+304>>2]|0)>>>0<=aa>>>0?(c[l+308>>2]|0)>>>0>aa>>>0:0){aa=l+300|0;c[N>>2]=c[aa>>2];c[aa>>2]=N}else P=370}else P=370;while(0);do if((P|0)==370)if(!(c[7324]|0)){ab[c[29344>>2]&127](N);break}else{aa=Wa[c[29352>>2]&127](N)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](N);break}while(0);l=c[U>>2]|0;j=c[U+64>>2]|0;u:do if(j|0){do if(l|0){if(c[l+480>>2]|0){Xd(l,j);break u}k=j;if((c[l+304>>2]|0)>>>0>k>>>0)break;if((c[l+308>>2]|0)>>>0<=k>>>0)break;aa=l+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[U+68>>2]|0;if(j|0)ri(l,j);j=U+24|0;if(l){aa=l+272|0;c[aa>>2]=(c[aa>>2]|0)-(d[j>>0]|0)}}a[j>>0]=0;if(c[_+480>>2]|0){Xd(_,U);aa=Z;Ra=$;return aa|0}if((c[_+304>>2]|0)>>>0<=T>>>0?(c[_+308>>2]|0)>>>0>T>>>0:0){aa=_+300|0;c[U>>2]=c[aa>>2];c[aa>>2]=U;aa=Z;Ra=$;return aa|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](U);aa=Z;Ra=$;return aa|0}else{aa=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);aa=Z;Ra=$;return aa|0}return 0}function Om(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;z=B;A=c[h+20>>2]|0;o=c[h+40>>2]|0;do if((A|0)==1){x=b[g+40>>1]|0;k=x<<16>>16;if(x<<16>>16>-1){if(!o){A=0;Ra=B;return A|0}l=c[(c[g+4>>2]|0)+(k<<4)>>2]|0;x=a[l>>0]|0;k=(d[208+(x&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(x<<24>>24==0|(k|0)!=0)){m=o;do{l=l+1|0;m=m+1|0;x=a[l>>0]|0;k=(d[208+(x&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(k|0)!=0))}if(!k){A=0;Ra=B;return A|0}else{x=0;w=0}}else{x=0;w=0}}else if(j){m=c[f>>2]|0;n=A<<2;a:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))y=19;else{A=1;Ra=B;return A|0}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];x=m+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];x=m+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;y=19}while(0);if((y|0)==19)k=_d(m,n,0)|0;if(!k){A=1;Ra=B;return A|0}else{c[j>>2]=k;x=k;w=k;break}}else{x=0;w=0}while(0);k=c[g+8>>2]|0;b:do if(k|0){u=(o|0)==0;v=(A|0)>0;s=g+4|0;t=(x|0)==0;r=k;c:while(1){do if(((A|0)==(e[r+50>>1]|0)?a[r+54>>0]|0:0)?(c[r+36>>2]|0)==0:0){if(u){q=r+55|0;if(((d[q>>0]|d[q+1>>0]<<8)&3)==2){y=29;break c}else break}d:do if(v){q=r+32|0;p=c[r+4>>2]|0;k=0;do{g=b[p+(k<<1)>>1]|0;j=g<<16>>16;if(g<<16>>16<0)break d;o=c[s>>2]|0;n=c[o+(j<<4)+8>>2]|0;n=(n|0)==0?34049:n;m=c[(c[q>>2]|0)+(k<<2)>>2]|0;g=a[m>>0]|0;l=(d[208+(g&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(g<<24>>24==0|(l|0)!=0))do{m=m+1|0;n=n+1|0;g=a[m>>0]|0;l=(d[208+(g&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(g<<24>>24==0|(l|0)!=0));if(l|0)break d;o=c[o+(j<<4)>>2]|0;g=d[208+(d[o>>0]|0)>>0]|0;l=0;do{n=c[h+36+(l<<3)+4>>2]|0;j=a[n>>0]|0;m=(d[208+(j&255)>>0]|0)-g|0;if(!(j<<24>>24==0|(m|0)!=0)){j=o;do{n=n+1|0;j=j+1|0;C=a[n>>0]|0;m=(d[208+(C&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(m|0)!=0))}if(!m){y=45;break}l=l+1|0}while((l|0)<(A|0));if((y|0)==45){y=0;if(!t)c[x+(k<<2)>>2]=c[h+36+(l<<3)>>2]}if((l|0)==(A|0))break d;k=k+1|0}while((k|0)<(A|0))}else k=0;while(0);if((k|0)==(A|0))break c}while(0);k=c[r+20>>2]|0;if(!k)break b;else r=k}if((y|0)==29?(x|0)!=0&v:0){k=0;do{c[x+(k<<2)>>2]=c[h+36+(k<<3)>>2];k=k+1|0}while((k|0)!=(A|0))}c[i>>2]=r;C=0;Ra=B;return C|0}while(0);if(!(a[f+146>>0]|0)){C=c[h+8>>2]|0;c[z>>2]=c[c[h>>2]>>2];c[z+4>>2]=C;cd(f,44708,z)}k=c[f>>2]|0;if(!w){C=1;Ra=B;return C|0}if(k|0){if(c[k+480>>2]|0){Xd(k,w);C=1;Ra=B;return C|0}C=w;if((c[k+304>>2]|0)>>>0<=C>>>0?(c[k+308>>2]|0)>>>0>C>>>0:0){C=k+300|0;c[w>>2]=c[C>>2];c[C>>2]=w;C=1;Ra=B;return C|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](w);C=1;Ra=B;return C|0}else{C=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);C=1;Ra=B;return C|0}return 0}function Pm(f,g,h,i,j,k,l,m,n){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;A=f+8|0;o=c[A>>2]|0;a:do if(!o){r=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[r+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))L=15;else{J=0;break a}else{do if((e[r+276>>1]|0)>=224){o=r+300|0;p=c[o>>2]|0;if(p|0){c[o>>2]=c[p>>2];K=r+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}o=r+296|0;p=c[o>>2]|0;if(!p){o=r+292|0;break}else{c[o>>2]=c[p>>2];K=r+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}}else o=r+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;L=15}while(0);if((L|0)==15)p=_d(r,224,0)|0;if(!p)J=0;else{o=p+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[p>>2]=r;o=r+4|0;q=c[o>>2]|0;if(q|0)c[q+4>>2]=p;c[p+8>>2]=q;c[p+4>>2]=0;c[o>>2]=p;c[p+20>>2]=381479589;c[p+12>>2]=f;c[A>>2]=p;Di(p,61,0,1,0)|0;J=p}}else J=o;while(0);K=(c[f+40>>2]|0)+-1|0;D=f+56|0;I=c[D>>2]|0;H=I+-1|0;c[D>>2]=H;do if((m|0)<0){o=d[j+24>>0]|0;p=J+108|0;q=c[p>>2]|0;if((c[J+112>>2]|0)>(q|0)){c[p>>2]=q+1;D=c[J+104>>2]|0;a[D+(q*20|0)>>0]=46;b[D+(q*20|0)+2>>1]=0;c[D+(q*20|0)+4>>2]=o;c[D+(q*20|0)+8>>2]=H;c[D+(q*20|0)+12>>2]=0;c[D+(q*20|0)+16>>2]=0;a[D+(q*20|0)+1>>0]=0;break}else{Di(J,46,o,H,0)|0;break}}while(0);v=j+20|0;o=c[v>>2]|0;if((o|0)>0){r=l+1|0;s=J+108|0;t=J+112|0;u=J+104|0;q=0;do{o=r+(c[k+(q<<2)>>2]|0)|0;p=c[s>>2]|0;if((c[t>>2]|0)>(p|0)){c[s>>2]=p+1;D=c[u>>2]|0;a[D+(p*20|0)>>0]=50;b[D+(p*20|0)+2>>1]=0;c[D+(p*20|0)+4>>2]=o;c[D+(p*20|0)+8>>2]=H;c[D+(p*20|0)+12>>2]=0;c[D+(p*20|0)+16>>2]=0;a[D+(p*20|0)+1>>0]=0}else Di(J,50,o,H,0)|0;q=q+1|0;o=c[v>>2]|0}while((q|0)<(o|0));D=o}else D=o;do if(!n){if(!i){u=f+19|0;o=a[u>>0]|0;if(!(o<<24>>24)){G=f+44|0;t=(c[G>>2]|0)+1|0;c[G>>2]=t}else{t=o+-1<<24>>24;a[u>>0]=t;t=c[f+148+((t&255)<<2)>>2]|0}o=l+1+(c[k>>2]|0)|0;r=J+108|0;p=c[r>>2]|0;s=J+112|0;if((c[s>>2]|0)>(p|0)){c[r>>2]=p+1;G=c[J+104>>2]|0;a[G+(p*20|0)>>0]=79;b[G+(p*20|0)+2>>1]=0;c[G+(p*20|0)+4>>2]=o;c[G+(p*20|0)+8>>2]=t;c[G+(p*20|0)+12>>2]=0;c[G+(p*20|0)+16>>2]=0;a[G+(p*20|0)+1>>0]=0}else Di(J,79,o,t,0)|0;o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;q=c[J+104>>2]|0;a[q+(o*20|0)>>0]=15;b[q+(o*20|0)+2>>1]=0;c[q+(o*20|0)+4>>2]=t;c[q+(o*20|0)+8>>2]=0;c[q+(o*20|0)+12>>2]=0;c[q+(o*20|0)+16>>2]=0;a[q+(o*20|0)+1>>0]=0;q=o}else q=Di(J,15,t,0,0)|0;if((m|0)==1?(c[j>>2]|0)==(h|0):0){o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;G=c[J+104>>2]|0;a[G+(o*20|0)>>0]=53;b[G+(o*20|0)+2>>1]=0;c[G+(o*20|0)+4>>2]=l;c[G+(o*20|0)+8>>2]=H;c[G+(o*20|0)+12>>2]=t;c[G+(o*20|0)+16>>2]=0;a[G+(o*20|0)+1>>0]=0}else Di(J,53,l,H,t)|0;o=c[r>>2]|0;if((o|0)>0)b[(c[J+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=144}Gj(f,K,g,h,108);o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=31;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=K;c[l+(o*20|0)+8>>2]=0;c[l+(o*20|0)+12>>2]=t;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else Di(J,31,K,0,t)|0;o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=11;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=0;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=0;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else Di(J,11,0,H,0)|0;p=c[r>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){o=c[J+104>>2]|0;c[o+((((p|0)<2?-1:-2)+p|0)*20|0)+8>>2]=p;o=o+(((q|0)<0?p+-1|0:q)*20|0)|0}else{c[14829]=p;o=59308}c[o+8>>2]=p;if(!t)break;o=a[u>>0]|0;if((o&255)>=8)break;a[u>>0]=o+1<<24>>24;c[f+148+((o&255)<<2)>>2]=t;break}C=(D|0)==1;do if(C){o=f+19|0;p=a[o>>0]|0;if(!(p<<24>>24)){z=f+44|0;B=(c[z>>2]|0)+1|0;c[z>>2]=B;break}else{B=p+-1<<24>>24;a[o>>0]=B;B=c[f+148+((B&255)<<2)>>2]|0;break}}else{o=f+32|0;p=c[o>>2]|0;q=f+28|0;r=c[q>>2]|0;if((r|0)<(D|0)){z=f+44|0;B=c[z>>2]|0;c[z>>2]=B+D;B=B+1|0;break}else{c[o>>2]=p+D;c[q>>2]=r-D;B=p;break}}while(0);z=f+19|0;o=a[z>>0]|0;if(!(o<<24>>24)){x=f+44|0;y=(c[x>>2]|0)+1|0;c[x>>2]=y}else{y=o+-1<<24>>24;a[z>>0]=y;y=c[f+148+((y&255)<<2)>>2]|0}o=c[i+44>>2]|0;w=J+108|0;p=c[w>>2]|0;x=J+112|0;if((c[x>>2]|0)>(p|0)){c[w>>2]=p+1;n=c[J+104>>2]|0;a[n+(p*20|0)>>0]=108;b[n+(p*20|0)+2>>1]=0;c[n+(p*20|0)+4>>2]=K;c[n+(p*20|0)+8>>2]=o;c[n+(p*20|0)+12>>2]=g;c[n+(p*20|0)+16>>2]=0;a[n+(p*20|0)+1>>0]=0}else Di(J,108,K,o,g)|0;o=c[A>>2]|0;q=Ij(f,i)|0;do if(q|0){p=c[o>>2]|0;if(!(a[p+81>>0]|0)){A=c[o+104>>2]|0;g=(c[o+108>>2]|0)+-1|0;a[A+(g*20|0)+1>>0]=-9;c[A+(g*20|0)+16>>2]=q;break}if((c[p+480>>2]|0)==0?(g=(c[q>>2]|0)+-1|0,c[q>>2]=g,(g|0)==0):0){o=c[q+12>>2]|0;if(o|0){if(c[o+480>>2]|0){Xd(o,q);break}g=q;if((c[o+304>>2]|0)>>>0<=g>>>0?(c[o+308>>2]|0)>>>0>g>>>0:0){g=o+300|0;c[q>>2]=c[g>>2];c[g>>2]=q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{g=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}}while(0);u=(D|0)>0;if(u){p=l+1|0;q=J+104|0;o=0;do{r=p+(c[k+(o<<2)>>2]|0)|0;s=o+B|0;t=c[w>>2]|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;g=c[q>>2]|0;a[g+(t*20|0)>>0]=78;b[g+(t*20|0)+2>>1]=0;c[g+(t*20|0)+4>>2]=r;c[g+(t*20|0)+8>>2]=s;c[g+(t*20|0)+12>>2]=0;c[g+(t*20|0)+16>>2]=0;a[g+(t*20|0)+1>>0]=0}else Di(J,78,r,s,0)|0;o=o+1|0}while((o|0)!=(D|0))}do if((m|0)==1?(c[j>>2]|0)==(h|0):0){o=c[w>>2]|0;n=D+1+o|0;if(u){u=l+1|0;v=i+4|0;s=h+40|0;t=J+104|0;r=0;do{p=u+(c[k+(r<<2)>>2]|0)|0;q=b[(c[v>>2]|0)+(r<<1)>>1]|0;q=(q<<16>>16==(b[s>>1]|0)?0:(q<<16>>16)+1|0)+l|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;h=c[t>>2]|0;a[h+(o*20|0)>>0]=52;b[h+(o*20|0)+2>>1]=0;c[h+(o*20|0)+4>>2]=p;c[h+(o*20|0)+8>>2]=n;c[h+(o*20|0)+12>>2]=q;c[h+(o*20|0)+16>>2]=0;a[h+(o*20|0)+1>>0]=0}else Di(J,52,p,n,q)|0;o=c[w>>2]|0;if((o|0)>0)b[(c[t>>2]|0)+((o+-1|0)*20|0)+2>>1]=16;r=r+1|0}while((r|0)!=(D|0))}if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=11;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=0;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=0;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0;break}else{Di(J,11,0,H,0)|0;break}}while(0);r=gl(c[f>>2]|0,i)|0;o=c[w>>2]|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=92;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=B;c[l+(o*20|0)+8>>2]=D;c[l+(o*20|0)+12>>2]=y;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else o=Di(J,92,B,D,y)|0;p=c[J>>2]|0;do if(a[p+81>>0]|0){if((D|0)!=-12)kg(p,D,r)}else{if((o|0)<0)o=(c[w>>2]|0)+-1|0;p=c[J+104>>2]|0;q=p+(o*20|0)|0;if((D|0)<=-1?(E=p+(o*20|0)+1|0,(a[E>>0]|0)==0):0){if((D|0)==-3){c[p+(o*20|0)+16>>2]=r;a[E>>0]=-3;break}if(!r)break;c[p+(o*20|0)+16>>2]=r;a[E>>0]=D;if((D|0)!=-12)break;l=r+12|0;c[l>>2]=(c[l>>2]|0)+1;break}Ei(J,q,r,D)}while(0);o=c[w>>2]|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=29;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=K;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=y;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else o=Di(J,29,K,H,y)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){H=c[J+104>>2]|0;a[H+(o*20|0)+1>>0]=-3;c[H+(o*20|0)+16>>2]=0}if(y|0?(F=a[z>>0]|0,(F&255)<8):0){a[z>>0]=F+1<<24>>24;c[f+148+((F&255)<<2)>>2]=y}if(!C){o=f+28|0;if((c[o>>2]|0)>=(D|0))break;c[o>>2]=D;c[f+32>>2]=B;break}if(B|0?(G=a[z>>0]|0,(G&255)<8):0){a[z>>0]=G+1<<24>>24;c[f+148+((G&255)<<2)>>2]=B}}while(0);o=a[j+24>>0]|0;p=o<<24>>24==0;do if(p){if(((0==0?(c[(c[f>>2]|0)+32>>2]&524288|0)==0:0)?(c[f+116>>2]|0)==0:0)?(a[f+20>>0]|0)==0:0){Uj(f,787,2,0,-1,4);break}if(!((m|0)<1|p^1)){L=c[f+116>>2]|0;a[((L|0)==0?f:L)+21>>0]=1;L=141}else L=141}else L=141;while(0);do if((L|0)==141){o=o&255;p=J+108|0;q=c[p>>2]|0;if((c[J+112>>2]|0)>(q|0)){c[p>>2]=q+1;f=c[J+104>>2]|0;a[f+(q*20|0)>>0]=-106;b[f+(q*20|0)+2>>1]=0;c[f+(q*20|0)+4>>2]=o;c[f+(q*20|0)+8>>2]=m;c[f+(q*20|0)+12>>2]=0;c[f+(q*20|0)+16>>2]=0;a[f+(q*20|0)+1>>0]=0;break}else{Di(J,150,o,m,0)|0;break}}while(0);p=c[J+12>>2]|0;o=0-I|0;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0){mk(p,J,o);o=J+108|0}else{m=J+108|0;c[(c[p+64>>2]|0)+(o<<2)>>2]=c[m>>2];o=m}p=c[o>>2]|0;if((c[J+112>>2]|0)>(p|0)){c[o>>2]=p+1;m=c[J+104>>2]|0;a[m+(p*20|0)>>0]=117;b[m+(p*20|0)+2>>1]=0;c[m+(p*20|0)+4>>2]=K;c[m+(p*20|0)+8>>2]=0;c[m+(p*20|0)+12>>2]=0;c[m+(p*20|0)+16>>2]=0;a[m+(p*20|0)+1>>0]=0;return}else{Di(J,117,K,0,0)|0;return}}function Qm(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+80|0;N=P;M=P+40|0;L=P+8|0;O=c[f>>2]|0;q=f+8|0;n=c[q>>2]|0;a:do if(!n){if((c[f+116>>2]|0)==0?(b[O+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[O+272>>2]|0)if(!(a[O+81>>0]|0))p=15;else{K=0;break a}else{do if((e[O+276>>1]|0)>=224){n=O+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];K=O+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}n=O+296|0;o=c[n>>2]|0;if(!o){n=O+292|0;break}else{c[n>>2]=c[o>>2];K=O+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}}else n=O+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;p=15}while(0);if((p|0)==15)o=_d(O,224,0)|0;if(!o)K=0;else{n=o+104|0;p=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(p|0));c[o>>2]=O;n=O+4|0;p=c[n>>2]|0;if(p|0)c[p+4>>2]=o;c[o+8>>2]=p;c[o+4>>2]=0;c[n>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[q>>2]=o;Di(o,61,0,1,0)|0;K=o}}else K=n;while(0);do if((m|0)<0){n=d[j+24>>0]|0;o=K+108|0;p=c[o>>2]|0;if((c[K+112>>2]|0)>(p|0)){c[o>>2]=p+1;H=c[K+104>>2]|0;a[H+(p*20|0)>>0]=46;b[H+(p*20|0)+2>>1]=0;c[H+(p*20|0)+4>>2]=n;c[H+(p*20|0)+8>>2]=0;c[H+(p*20|0)+12>>2]=0;c[H+(p*20|0)+16>>2]=0;a[H+(p*20|0)+1>>0]=0;H=p;break}else{H=Di(K,46,n,0,0)|0;break}}else H=0;while(0);t=j+20|0;if((c[t>>2]|0)>0){u=(i|0)==0;v=M+4|0;w=i+4|0;x=(k|0)==0;y=j+36|0;z=M+4|0;A=h+40|0;B=h+4|0;C=l+1|0;D=M+4|0;E=M+4|0;r=0;s=0;do{if(u)o=-1;else o=b[(c[w>>2]|0)+(s<<1)>>1]|0;p=o&65535;q=c[f>>2]|0;c[M>>2]=0;c[v>>2]=0;n=oj(q,168,M,0)|0;do if(!n)n=0;else{if(p<<16>>16>-1?(b[A>>1]|0)!=p<<16>>16:0){p=c[B>>2]|0;c[n+28>>2]=C+o;a[n+1>>0]=a[p+(o<<4)+13>>0]|0;o=c[p+(o<<4)+8>>2]|0;if(o|0){c[M>>2]=o;q=(Eu(o)|0)&1073741823;c[D>>2]=q;if((q|0)!=0?(F=oj(c[f>>2]|0,106,M,0)|0,(F|0)!=0):0){c[F+12>>2]=n;n=F+4|0;c[n>>2]=c[n>>2]|4352;n=F}break}o=c[c[q+8>>2]>>2]|0;c[M>>2]=o;if(o){q=(Eu(o)|0)&1073741823;c[E>>2]=q;if((q|0)!=0?(G=oj(c[f>>2]|0,106,M,0)|0,(G|0)!=0):0){c[G+12>>2]=n;n=G+4|0;c[n>>2]=c[n>>2]|4352;n=G}}else c[E>>2]=0;break}c[n+28>>2]=l;a[n+1>>0]=68}while(0);o=c[(c[(c[j>>2]|0)+4>>2]|0)+(c[(x?y:k+(s<<2)|0)>>2]<<16>>16<<4)>>2]|0;c[M>>2]=o;if(!o)o=0;else o=(Eu(o)|0)&1073741823;c[z>>2]=o;r=Xk(O,r,ej(f,53,n,oj(O,59,M,0)|0)|0)|0;s=s+1|0}while((s|0)<(c[t>>2]|0));n=j}else{r=0;n=j}if((m|0)>0?(c[n>>2]|0)==(h|0):0){if(!(c[h+36>>2]&32)){n=c[f>>2]|0;c[M>>2]=0;c[M+4>>2]=0;n=oj(n,168,M,0)|0;if(!n)n=0;else{c[n+28>>2]=l;a[n+1>>0]=68}o=c[g+48>>2]|0;c[M>>2]=0;c[M+4>>2]=0;p=oj(O,162,M,0)|0;if(p|0){c[p+44>>2]=h;c[p+28>>2]=o;b[p+32>>1]=-1}n=ej(f,52,n,p)|0}else{C=i+50|0;if(!(b[C>>1]|0))n=0;else{y=i+4|0;z=M+4|0;A=h+4|0;B=M+4|0;u=h+40|0;v=l+1|0;w=M+4|0;x=M+4|0;n=0;t=0;do{p=b[(c[y>>2]|0)+(t<<1)>>1]|0;q=c[f>>2]|0;c[M>>2]=0;c[z>>2]=0;o=oj(q,168,M,0)|0;s=p<<16>>16;do if(!o)p=0;else{if(p<<16>>16>-1?(b[u>>1]|0)!=p<<16>>16:0){p=c[A>>2]|0;c[o+28>>2]=v+s;a[o+1>>0]=a[p+(s<<4)+13>>0]|0;p=c[p+(s<<4)+8>>2]|0;if(p|0){c[M>>2]=p;h=(Eu(p)|0)&1073741823;c[w>>2]=h;if((h|0)!=0?(I=oj(c[f>>2]|0,106,M,0)|0,(I|0)!=0):0){c[I+12>>2]=o;o=I+4|0;c[o>>2]=c[o>>2]|4352;o=I}p=o;break}p=c[c[q+8>>2]>>2]|0;c[M>>2]=p;if(p){h=(Eu(p)|0)&1073741823;c[x>>2]=h;if((h|0)!=0?(J=oj(c[f>>2]|0,106,M,0)|0,(J|0)!=0):0){c[J+12>>2]=o;o=J+4|0;c[o>>2]=c[o>>2]|4352;o=J}}else c[x>>2]=0;p=o;break}c[o+28>>2]=l;a[o+1>>0]=68;p=o}while(0);o=c[(c[A>>2]|0)+(s<<4)>>2]|0;c[M>>2]=o;if(!o)o=0;else o=(Eu(o)|0)&1073741823;c[B>>2]=o;n=Xk(O,n,ej(f,45,p,oj(O,59,M,0)|0)|0)|0;t=t+1|0}while(t>>>0<(e[C>>1]|0)>>>0)}n=ej(f,19,n,0)|0}r=Xk(O,r,n)|0}s=L+8|0;c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=0;c[s+16>>2]=0;c[s+20>>2]=0;c[L+4>>2]=g;c[L>>2]=f;s=(r|0)==0;do if(!s){p=L+24|0;b[p>>1]=0;c[M>>2]=f;c[M+4>>2]=125;c[M+8>>2]=126;c[M+12>>2]=0;c[M+24>>2]=L;n=r+24|0;o=f+208|0;L=(c[o>>2]|0)+(c[n>>2]|0)|0;c[o>>2]=L;o=c[(c[f>>2]|0)+120>>2]|0;if((o|0)<(L|0)){c[N>>2]=o;cd(f,41637,N);break}else{_j(M,r)|0;N=(c[M>>2]|0)+208|0;c[N>>2]=(c[N>>2]|0)-(c[n>>2]|0);N=r+4|0;c[N>>2]=c[N>>2]|b[p>>1]&-32752&65535;break}}while(0);if(!(c[f+36>>2]|0)){q=ql(f,g,r,0,0,0,0)|0;n=d[j+24>>0]|0;o=K+108|0;p=c[o>>2]|0;if((c[K+112>>2]|0)>(p|0)){c[o>>2]=p+1;j=c[K+104>>2]|0;a[j+(p*20|0)>>0]=-106;b[j+(p*20|0)+2>>1]=0;c[j+(p*20|0)+4>>2]=n;c[j+(p*20|0)+8>>2]=m;c[j+(p*20|0)+12>>2]=0;c[j+(p*20|0)+16>>2]=0;a[j+(p*20|0)+1>>0]=0}else Di(K,150,n,m,0)|0;if(q|0)sl(q)}if(!s)ni(O,r);if(!H){Ra=P;return}o=c[K+108>>2]|0;if(!(a[(c[K>>2]|0)+81>>0]|0))n=(c[K+104>>2]|0)+(((H|0)<0?o+-1|0:H)*20|0)|0;else n=59308;c[n+8>>2]=o;Ra=P;return}function Rm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;aa=Ra;Ra=Ra+48|0;V=aa+16|0;Q=aa+36|0;T=aa+32|0;W=aa+8|0;R=aa;S=aa+24|0;$=c[f>>2]|0;_=(i|0)!=0;i=_&1;Y=a[h+25+i>>0]|0;U=Y<<24>>24==7;if(U?!(0==0?(c[$+32>>2]&524288|0)==0:0):0){$=0;Ra=aa;return $|0}Z=h+28+(i<<2)|0;i=c[Z>>2]|0;if(Y<<24>>24==0|(i|0)!=0){$=i;Ra=aa;return $|0}c[Q>>2]=0;c[T>>2]=0;a:do if(!(Om(f,g,h,Q,T)|0)){u=h+20|0;if((c[u>>2]|0)>0){w=29616;v=c[w>>2]|0;w=c[w+4>>2]|0;y=29624;x=c[y>>2]|0;y=c[y+4>>2]|0;z=h+36|0;A=g+4|0;B=g+40|0;C=S+4|0;D=R+4|0;P=Y<<24>>24!=7&(_|Y<<24>>24!=10);E=$+272|0;F=$+276|0;G=$+81|0;H=$+288|0;I=$+300|0;J=f+200|0;K=$+296|0;M=$+284|0;N=$+292|0;O=f+272|0;s=0;t=0;m=0;j=0;while(1){k=V;c[k>>2]=v;c[k+4>>2]=w;k=W;c[k>>2]=x;c[k+4>>2]=y;k=c[T>>2]|0;k=c[((k|0)==0?z:k+(t<<2)|0)>>2]|0;i=c[Q>>2]|0;if(!i)i=B;else i=(c[i+4>>2]|0)+(t<<1)|0;i=c[(c[A>>2]|0)+(b[i>>1]<<4)>>2]|0;c[S>>2]=i;if(!i)i=0;else i=(Eu(i)|0)&1073741823;c[C>>2]=i;i=c[(c[(c[h>>2]|0)+4>>2]|0)+(k<<4)>>2]|0;c[R>>2]=i;if(!i)i=0;else i=(Eu(i)|0)&1073741823;c[D>>2]=i;r=oj($,59,V,0)|0;r=ej(f,134,r,oj($,59,S,0)|0)|0;j=Xk($,j,ej(f,53,r,oj($,59,R,0)|0)|0)|0;if(_){q=oj($,59,V,0)|0;q=ej(f,134,q,oj($,59,S,0)|0)|0;r=oj($,59,W,0)|0;s=Xk($,s,ej(f,45,q,ej(f,134,r,oj($,59,S,0)|0)|0)|0)|0}b:do if(P){c:do switch(Y<<24>>24){case 10:{i=ej(f,134,oj($,59,W,0)|0,oj($,59,S,0)|0)|0;break}case 9:{i=c[(c[(c[h>>2]|0)+4>>2]|0)+(k<<4)+4>>2]|0;if(i|0){i=dk($,i,0,0)|0;break c}d:do if(c[E>>2]|0)if(!(a[G>>0]|0))X=28;else{i=0;break c}else{do if((e[F>>1]|0)<52)i=H;else{i=c[I>>2]|0;if(i|0){c[I>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break d}i=c[K>>2]|0;if(!i){i=N;break}c[K>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break d}while(0);c[i>>2]=(c[i>>2]|0)+1;X=28}while(0);if((X|0)==28){X=0;i=_d($,52,0)|0}if(i){k=i;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[i>>0]=114;b[i+34>>1]=-1;c[i+24>>2]=1}break}default:{do if(c[E>>2]|0)if(!(a[G>>0]|0))X=39;else{i=0;break c}else{if((e[F>>1]|0)>=52){i=c[I>>2]|0;if(i|0){c[I>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break}i=c[K>>2]|0;if(!i)i=N;else{c[K>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break}}else i=H;c[i>>2]=(c[i>>2]|0)+1;X=39}while(0);if((X|0)==39){X=0;i=_d($,52,0)|0}if(i){k=i;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[i>>0]=114;b[i+34>>1]=-1;c[i+24>>2]=1}}}while(0);r=nj(c[f>>2]|0,m,i)|0;if(r){q=(c[r>>2]|0)+-1|0;l=c[f>>2]|0;o=c[R>>2]|0;p=c[D>>2]|0;e:do if(o){m=Sv(p|0,0,1,0)|0;n=L()|0;f:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=54;else{m=0;break e}else{do if(0<0|(0==0?p>>>0<(e[l+276>>1]|0)>>>0:0)){k=l+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];n=l+284|0;c[n>>2]=(c[n>>2]|0)+1;break f}k=l+296|0;i=c[k>>2]|0;if(!i){i=l+292|0;break}else{c[k>>2]=c[i>>2];n=l+284|0;c[n>>2]=(c[n>>2]|0)+1;break f}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=54}while(0);if((X|0)==54){X=0;i=_d(l,m,n)|0}if(i){ew(i|0,o|0,p|0)|0;a[i+p>>0]=0;m=i}else m=0}else m=0;while(0);c[r+4+(q*20|0)+4>>2]=m;if((d[J>>0]|0)>1){l=c[f>>2]|0;g:do if(!l){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;X=81;break}i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){q=c[14978]|0;p=Tv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;o=L()|0;c[14768]=((o|0)<0|(o|0)==0&p>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=r;break b}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){i=r;break b}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=81;break g}k=l+296|0;i=c[k>>2]|0;if(!i){i=l+292|0;break}else{c[k>>2]=c[i>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=81;break g}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(l,16,0)|0;X=81}while(0);if((X|0)==81){X=0;if(!i){i=r;break}}o=i+4|0;p=o;a[p>>0]=0;a[p+1>>0]=0;a[p+2>>0]=0;a[p+3>>0]=0;o=o+4|0;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;c[i>>2]=m;o=R;p=c[o+4>>2]|0;q=i+4|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;c[i+12>>2]=c[O>>2];c[O>>2]=i;i=r}else i=r}else i=0}else i=m;while(0);t=t+1|0;if((t|0)>=(c[u>>2]|0)){t=i;break}else m=i}}else{s=0;t=0;j=0}i=c[T>>2]|0;do if(i|0){if($|0){if(c[$+480>>2]|0){Xd($,i);break}T=i;if((c[$+304>>2]|0)>>>0<=T>>>0?(c[$+308>>2]|0)>>>0>T>>>0:0){T=$+300|0;c[i>>2]=c[T>>2];c[T>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{T=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=c[c[h>>2]>>2]|0;if(!o)n=0;else n=(Eu(o)|0)&1073741823;if(U){c[W>>2]=o;c[W+4>>2]=n;c[V>>2]=32436;c[V+4>>2]=29;i=oj($,71,V,0)|0;if(!i)i=nj(c[f>>2]|0,0,0)|0;else{a[i+1>>0]=2;i=nj(c[f>>2]|0,0,i)|0}r=mj(f,i,pj(f,0,W,0)|0,j,0,0,0,0,0)|0;p=0}else{r=0;p=j}q=$+272|0;i=(c[q>>2]|0)+1|0;c[q>>2]=i;m=n+81|0;h:do if(!$){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;X=124;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){W=c[14978]|0;V=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;U=L()|0;c[14768]=((U|0)<0|(U|0)==0&V>>>0<=W>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(j){i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;l=j;X=125}else{l=j;X=125}}else{m=0;k=0;i=s;l=0}}else{if(i){if(a[$+81>>0]|0){m=0;k=0;i=s;l=0;break}}else{do if(!(0<0|(0==0?(e[$+276>>1]|0)>>>0<m>>>0:0))){j=$+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];X=$+284|0;c[X>>2]=(c[X>>2]|0)+1;X=124;break h}j=$+296|0;i=c[j>>2]|0;if(!i){i=$+292|0;break}else{c[j>>2]=c[i>>2];X=$+284|0;c[X>>2]=(c[X>>2]|0)+1;X=124;break h}}else i=$+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d($,m,0)|0;X=124}while(0);if((X|0)==124)if(!i){m=0;k=0;i=s;l=0}else{l=i;X=125}if((X|0)==125){gw(l|0,0,m|0)|0;k=l+36|0;c[l+28>>2]=k;W=l+80|0;c[l+48>>2]=W;ew(W|0,o|0,n|0)|0;if(!p)i=0;else i=dk($,p,1,0)|0;c[l+52>>2]=i;W=gk($,t,1)|0;c[l+56>>2]=W;W=fk($,r,1)|0;c[l+44>>2]=W;if(!s){m=l;i=0}else{j=ej(f,19,s,0)|0;if(!j)i=0;else i=dk($,j,1,0)|0;c[l+12>>2]=i;m=l;i=j}}c[q>>2]=(c[q>>2]|0)+-1;if(p|0)ni($,p);if(i|0)ni($,i);if(t|0)ri($,t);if(r|0)pi($,r,1);if((a[$+81>>0]|0)!=1){switch(Y<<24>>24){case 7:{i=-125;break}case 10:{if(_)X=159;else i=121;break}default:X=159}if((X|0)==159)i=122;a[k>>0]=i;c[k+4>>2]=m;$=c[g+72>>2]|0;c[m+20>>2]=$;c[m+24>>2]=$;c[Z>>2]=m;a[m+8>>0]=_?122:121;$=l;Ra=aa;return $|0}if(l|0){j=c[l+28>>2]|0;i=c[j+16>>2]|0;if(i|0)ni($,i);i=c[j+20>>2]|0;if(i|0)ri($,i);i=c[j+8>>2]|0;if(i|0)pi($,i,1);i=c[l+12>>2]|0;if(i|0)ni($,i);if(c[$+480>>2]|0){Xd($,m);break}i=l;do if((c[$+304>>2]|0)>>>0<=i>>>0){if((c[$+308>>2]|0)>>>0<=i>>>0)break;$=$+300|0;c[l>>2]=c[$>>2];c[$>>2]=l;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{$=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}while(0);$=0;Ra=aa;return $|0}\nfunction Sm(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;p=c[d+8>>2]|0;e=c[d+112>>2]|0;if(!e)return;r=(c[d>>2]|0)+16|0;s=d+19|0;t=d+44|0;n=p+108|0;u=p+112|0;o=p+104|0;while(1){j=c[r>>2]|0;k=e+8|0;l=c[k>>2]|0;m=c[e+12>>2]|0;f=a[s>>0]|0;if(!(f<<24>>24)){i=(c[t>>2]|0)+1|0;c[t>>2]=i}else{i=f+-1<<24>>24;a[s>>0]=i;i=c[d+148+((i&255)<<2)>>2]|0}g=m+2|0;f=c[n>>2]|0;h=f+7|0;if((c[u>>2]|0)>(f|0)){c[n>>2]=f+1;v=c[o>>2]|0;a[v+(f*20|0)>>0]=55;b[v+(f*20|0)+2>>1]=0;c[v+(f*20|0)+4>>2]=g;c[v+(f*20|0)+8>>2]=h;c[v+(f*20|0)+12>>2]=m;c[v+(f*20|0)+16>>2]=0;a[v+(f*20|0)+1>>0]=0}else Di(p,55,g,h,m)|0;Gj(d,0,c[k>>2]|0,c[(c[j+(l<<4)+12>>2]|0)+72>>2]|0,109);f=ed(p,5,18320)|0;if(!f){e=14;break}v=m+1|0;c[f+4>>2]=v;c[f+28>>2]=v;c[f+44>>2]=m+-1;c[f+52>>2]=i;c[f+68>>2]=i;c[f+72>>2]=v;b[f+62>>1]=8;if(i|0?(q=a[s>>0]|0,(q&255)<8):0){a[s>>0]=q+1<<24>>24;c[d+148+((q&255)<<2)>>2]=i}e=c[e>>2]|0;if(!e){e=14;break}}if((e|0)==14)return}function Tm(f,g,h,i,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;Ja=Ra;Ra=Ra+48|0;T=Ja+16|0;S=Ja+8|0;P=Ja;Q=Ja+20|0;Ha=(l|0)!=0;U=c[f>>2]|0;Ia=f+8|0;s=c[Ia>>2]|0;a:do if(!s){if((c[f+116>>2]|0)==0?(b[U+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[U+272>>2]|0)if(!(a[U+81>>0]|0))Ca=15;else{Ga=0;break a}else{do if((e[U+276>>1]|0)>=224){s=U+300|0;t=c[s>>2]|0;if(t|0){c[s>>2]=c[t>>2];Ga=U+284|0;c[Ga>>2]=(c[Ga>>2]|0)+1;break b}s=U+296|0;t=c[s>>2]|0;if(!t){s=U+292|0;break}else{c[s>>2]=c[t>>2];Ga=U+284|0;c[Ga>>2]=(c[Ga>>2]|0)+1;break b}}else s=U+288|0;while(0);c[s>>2]=(c[s>>2]|0)+1;Ca=15}while(0);if((Ca|0)==15)t=_d(U,224,0)|0;if(!t)Ga=0;else{y=t+104|0;z=y+120|0;do{c[y>>2]=0;y=y+4|0}while((y|0)<(z|0));c[t>>2]=U;s=U+4|0;u=c[s>>2]|0;if(u|0)c[u+4>>2]=t;c[t+8>>2]=u;c[t+4>>2]=0;c[s>>2]=t;c[t+20>>2]=381479589;c[t+12>>2]=f;c[Ia>>2]=t;Di(t,61,0,1,0)|0;Ga=t}}else Ga=s;while(0);t=b[g+42>>1]|0;M=t<<16>>16;Fa=g+36|0;if(!(c[Fa>>2]&32)){Ea=0;Da=1}else{s=g+8|0;while(1){s=c[s>>2]|0;Ea=s+55|0;if(((d[Ea>>0]|d[Ea+1>>0]<<8)&3)==2)break;else s=s+20|0}Ea=s;Da=e[s+50>>1]|0}if(t<<16>>16>0){A=g+40|0;B=(q|0)==0;C=g+4|0;D=n<<24>>24==11;E=k+1|0;F=Ga+108|0;H=Ga+112|0;I=f+56|0;J=f+116|0;K=Ga+104|0;L=Ga+12|0;z=0;do{c:do if((z|0)!=(b[A>>1]|0)){if(!B?(c[q+(z<<2)>>2]|0)<0:0)break;u=c[C>>2]|0;s=a[u+(z<<4)+12>>0]|0;if(s<<24>>24){Ba=D?(s<<24>>24==11?2:s):n;s=Ba&255;if(Ba<<24>>24==5)s=(c[u+(z<<4)+4>>2]|0)==0?2:s;switch((s&255)<<24>>24){case 5:{Ca=33;break}case 2:{t=0;Ca=51;break}case 3:case 1:{t=0;break}default:{s=z+E|0;t=c[F>>2]|0;if((c[H>>2]|0)>(t|0)){c[F>>2]=t+1;Ba=c[K>>2]|0;a[Ba+(t*20|0)>>0]=50;b[Ba+(t*20|0)+2>>1]=0;c[Ba+(t*20|0)+4>>2]=s;c[Ba+(t*20|0)+8>>2]=o;c[Ba+(t*20|0)+12>>2]=0;c[Ba+(t*20|0)+16>>2]=0;a[Ba+(t*20|0)+1>>0]=0;break c}else{Di(Ga,50,s,o,0)|0;break c}}}do if((Ca|0)==33){Ca=0;t=(c[I>>2]|0)+-1|0;c[I>>2]=t;y=z+E|0;s=c[F>>2]|0;if((c[H>>2]|0)>(s|0)){c[F>>2]=s+1;Ba=c[K>>2]|0;a[Ba+(s*20|0)>>0]=51;b[Ba+(s*20|0)+2>>1]=0;c[Ba+(s*20|0)+4>>2]=y;c[Ba+(s*20|0)+8>>2]=t;c[Ba+(s*20|0)+12>>2]=0;c[Ba+(s*20|0)+16>>2]=0;a[Ba+(s*20|0)+1>>0]=0}else Di(Ga,51,y,t,0)|0;s=c[(c[C>>2]|0)+(z<<4)+4>>2]|0;do if(s){if((a[s>>0]|0)!=-88){O=Jj(f,s,y)|0;Ca=43;break}w=c[Ia>>2]|0;s=c[s+28>>2]|0;u=w+108|0;v=c[u>>2]|0;if((c[w+112>>2]|0)>(v|0)){c[u>>2]=v+1;Ba=c[w+104>>2]|0;a[Ba+(v*20|0)>>0]=78;b[Ba+(v*20|0)+2>>1]=0;c[Ba+(v*20|0)+4>>2]=s;c[Ba+(v*20|0)+8>>2]=y;c[Ba+(v*20|0)+12>>2]=0;c[Ba+(v*20|0)+16>>2]=0;a[Ba+(v*20|0)+1>>0]=0;break}else{Di(w,78,s,y,0)|0;break}}else{O=Jj(f,0,y)|0;Ca=43}while(0);do if(((Ca|0)==43?(0,(O|0)!=(y|0)):0)?(N=c[Ia>>2]|0,N|0):0){s=N+108|0;u=c[s>>2]|0;if((c[N+112>>2]|0)>(u|0)){c[s>>2]=u+1;Ca=c[N+104>>2]|0;a[Ca+(u*20|0)>>0]=79;b[Ca+(u*20|0)+2>>1]=0;c[Ca+(u*20|0)+4>>2]=O;c[Ca+(u*20|0)+8>>2]=y;c[Ca+(u*20|0)+12>>2]=0;c[Ca+(u*20|0)+16>>2]=0;a[Ca+(u*20|0)+1>>0]=0;break}else{Di(N,79,O,y,0)|0;break}}while(0);s=c[F>>2]|0;if((c[H>>2]|0)>(s|0)){c[F>>2]=s+1;Ca=c[K>>2]|0;a[Ca+(s*20|0)>>0]=51;b[Ca+(s*20|0)+2>>1]=0;c[Ca+(s*20|0)+4>>2]=y;c[Ca+(s*20|0)+8>>2]=t;c[Ca+(s*20|0)+12>>2]=0;c[Ca+(s*20|0)+16>>2]=0;a[Ca+(s*20|0)+1>>0]=0;s=2;Ca=51;break}else{Di(Ga,51,y,t,0)|0;s=2;Ca=51;break}}while(0);if((Ca|0)==51){Ca=0;u=c[J>>2]|0;a[((u|0)==0?f:u)+21>>0]=1;u=c[C>>2]|0}w=c[u+(z<<4)>>2]|0;c[P>>2]=c[g>>2];c[P+4>>2]=w;w=dd(U,40358,P)|0;u=z+E|0;v=c[F>>2]|0;if((c[H>>2]|0)>(v|0)){c[F>>2]=v+1;Ba=c[K>>2]|0;a[Ba+(v*20|0)>>0]=68;b[Ba+(v*20|0)+2>>1]=0;c[Ba+(v*20|0)+4>>2]=1299;c[Ba+(v*20|0)+8>>2]=s;c[Ba+(v*20|0)+12>>2]=u;c[Ba+(v*20|0)+16>>2]=0;a[Ba+(v*20|0)+1>>0]=0}else Di(Ga,68,1299,s,u)|0;s=c[Ga>>2]|0;do if(a[s+81>>0]|0){if(w|0){if(s|0){if(c[s+480>>2]|0){Xd(s,w);break}Ba=w;if((c[s+304>>2]|0)>>>0<=Ba>>>0?(c[s+308>>2]|0)>>>0>Ba>>>0:0){Ba=s+300|0;c[w>>2]=c[Ba>>2];c[Ba>>2]=w;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](w);break}else{Ba=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);break}}}else{Aa=c[K>>2]|0;Ba=(c[F>>2]|0)+-1|0;a[Aa+(Ba*20|0)+1>>0]=-7;c[Aa+(Ba*20|0)+16>>2]=w}while(0);u=c[F>>2]|0;if((u|0)>0)b[(c[K>>2]|0)+((u+-1|0)*20|0)+2>>1]=1;if(t|0){v=c[L>>2]|0;s=~t;if(((c[v+56>>2]|0)+(c[v+60>>2]|0)|0)<0){mk(v,Ga,s);break}else{c[(c[v+64>>2]|0)+(s<<2)>>2]=u;break}}}}while(0);z=z+1|0}while((z|0)!=(M|0))}B=c[g+24>>2]|0;if(B|0?(0==0?(c[U+32>>2]&512|0)==0:0):0){C=f+52|0;c[C>>2]=~k;t=n<<24>>24==11?2:n&255;d:do if((c[B>>2]|0)>0){D=f+56|0;y=Q+20|0;z=Q+4|0;A=Q+24|0;E=Ga+108|0;F=Ga+112|0;H=Ga+12|0;I=Ga+104|0;if(!q){w=0;while(1){Aa=c[B+4+(w*20|0)>>2]|0;v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,Aa,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0)mk(u,Ga,s);else c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];w=w+1|0;if((w|0)>=(c[B>>2]|0))break d}}if(!(m<<24>>24)){w=0;do{s=c[B+4+(w*20|0)>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[z>>2]=136;c[A>>2]=q;do if((s|0)!=0?(_j(Q,s)|0,(a[y>>0]&-3)<<24>>24!=0):0){v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,s,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0){mk(u,Ga,s);break}else{c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];break}}while(0);w=w+1|0}while((w|0)<(c[B>>2]|0))}else{w=0;do{s=c[B+4+(w*20|0)>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[z>>2]=136;c[A>>2]=q;do if((s|0)!=0?(_j(Q,s)|0,(a[y>>0]|0)!=0):0){v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,s,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0){mk(u,Ga,s);break}else{c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];break}}while(0);w=w+1|0}while((w|0)<(c[B>>2]|0))}}while(0);c[C>>2]=0}do if(r)if(c[r>>2]|0){t=c[r+16>>2]|0;if(t){s=Ga+108|0;u=c[s>>2]|0;if((c[Ga+112>>2]|0)>(u|0)){c[s>>2]=u+1;y=c[Ga+104>>2]|0;a[y+(u*20|0)>>0]=11;y=y+(u*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));Ba=t;Aa=u;break}else{Ba=t;Aa=Di(Ga,11,0,0,0)|0;break}}else{Ba=0;Aa=0}}else{n=4;r=0;Ba=0;Aa=0}else{r=0;Ba=0;Aa=0}while(0);if(m<<24>>24!=0&(Ea|0)==0){t=f+56|0;D=c[t>>2]|0;v=D+-1|0;c[t>>2]=v;t=a[g+48>>0]|0;s=n&255;t=n<<24>>24==11?(t<<24>>24==11?2:t&255):s;if((r|0)!=0?(c[r+16>>2]|0)==0:0){E=0;t=(c[r+8>>2]|0)==0?4:6}else Ca=135;do if((Ca|0)==135)if(!((t|0)!=5|(t|0)==(s|0)))if(c[g+8>>2]|0){s=Ga+108|0;t=c[s>>2]|0;if((c[Ga+112>>2]|0)>(t|0)){u=t+1|0;c[s>>2]=u;y=c[Ga+104>>2]|0;a[y+(t*20|0)>>0]=11;y=y+(t*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));E=u;t=5;break}else{E=(Di(Ga,11,0,0,0)|0)+1|0;t=5;break}}else{E=0;t=5}else E=0;while(0);C=Ga+108|0;s=c[C>>2]|0;B=Ga+112|0;if(Ha){if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;za=c[Ga+104>>2]|0;a[za+(s*20|0)>>0]=53;b[za+(s*20|0)+2>>1]=0;c[za+(s*20|0)+4>>2]=k;c[za+(s*20|0)+8>>2]=v;c[za+(s*20|0)+12>>2]=l;c[za+(s*20|0)+16>>2]=0;a[za+(s*20|0)+1>>0]=0}else Di(Ga,53,k,v,l)|0;s=c[C>>2]|0;if((s|0)>0)b[(c[Ga+104>>2]|0)+((s+-1|0)*20|0)+2>>1]=144}if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;za=c[Ga+104>>2]|0;a[za+(s*20|0)>>0]=31;b[za+(s*20|0)+2>>1]=0;c[za+(s*20|0)+4>>2]=i;c[za+(s*20|0)+8>>2]=v;c[za+(s*20|0)+12>>2]=k;c[za+(s*20|0)+16>>2]=0;a[za+(s*20|0)+1>>0]=0}else Di(Ga,31,i,v,k)|0;e:do switch(t|0){case 3:case 2:case 1:{Ca=151;break}case 5:{s=c[f>>2]|0;A=c[s+32>>2]|0;do if(!((0==0?(c[U+32>>2]&8192|0)==0:0)|(A&262144|0)==0&0==0)?(R=c[(c[s+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){z=c[g+72>>2]|0;if((z|0)!=(R|0)?(x=c[R+48>>2]|0,(x|0)!=0):0){y=g+68|0;s=0;do{w=c[x+8>>2]|0;do if((c[w+24>>2]|0)==(z|0)){u=c[w+4>>2]|0;v=c[g>>2]|0;za=a[u>>0]|0;t=(d[208+(za&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0;if(!(za<<24>>24==0|(t|0)!=0))do{u=u+1|0;v=v+1|0;za=a[u>>0]|0;t=(d[208+(za&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(t|0)!=0));if(t|0)break;if(!s)s=c[y>>2]|0;c[w+32>>2]=s;s=w}while(0);x=c[x>>2]|0}while((x|0)!=0);if(!s)Ca=170}else Ca=170;if((Ca|0)==170){s=c[g+68>>2]|0;if(!s){Ca=176;break}}t=0;u=s;do{if((a[u+8>>0]|0)==121)t=t|d[u+9>>0];u=c[u+32>>2]|0}while((u|0)!=0);if((s|0)==0|(t|0)==0)Ca=176}else Ca=176;while(0);do if((Ca|0)==176){if(!((A&16384|0)==0&0==0)){y=c[g>>2]|0;v=c[g+72>>2]|0;w=c[v+68>>2]|0;if(!w){t=v+60|0;s=v+64|0}else{t=a[y>>0]|0;if(!(t<<24>>24))s=0;else{s=0;u=y;do{u=u+1|0;s=G(s+(d[208+(t&255)>>0]|0)|0,-1640531535)|0;t=a[u>>0]|0}while(t<<24>>24!=0)}s=(s>>>0)%((c[v+56>>2]|0)>>>0)|0;t=w+(s<<3)|0;s=w+(s<<3)+4|0}t=c[t>>2]|0;f:do if(!t)s=59292;else{x=d[208+(d[y>>0]|0)>>0]|0;while(1){s=c[s>>2]|0;t=t+-1|0;v=c[s+12>>2]|0;za=a[v>>0]|0;u=(d[208+(za&255)>>0]|0)-x|0;if(!(za<<24>>24==0|(u|0)!=0)){w=y;do{v=v+1|0;w=w+1|0;za=a[v>>0]|0;u=(d[208+(za&255)>>0]|0)-(d[208+(d[w>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(u|0)!=0))}if(!u)break f;if(!t){s=59292;break}}}while(0);if(c[s+8>>2]|0){s=0;break}if(c[g+16>>2]|0){s=0;break}}if(!(c[g+8>>2]|0)){u=1;break e}u=c[f+116>>2]|0;a[((u|0)==0?f:u)+20>>0]=1;Mm(f,g,i,j,0,-1);u=1;break e}while(0);u=c[f+116>>2]|0;a[((u|0)==0?f:u)+20>>0]=1;Im(f,g,s,i,j,k,1,0,5,1,-1);u=1;break}case 6:{za=r+8|0;Ca=r+12|0;tj(f,ik(c[f>>2]|0,c[r+20>>2]|0,0)|0,c[za>>2]|0,c[Ca>>2]|0,2,r);c[za>>2]=0;c[Ca>>2]=0;Ca=196;break}case 4:{Ca=196;break}default:{t=2;Ca=151}}while(0);do if((Ca|0)==151){s=b[g+40>>1]|0;v=c[f>>2]|0;u=c[g>>2]|0;if(s<<16>>16>-1){s=c[(c[g+4>>2]|0)+(s<<16>>16<<4)>>2]|0;c[S>>2]=u;c[S+4>>2]=s;u=1555;s=dd(v,40358,S)|0}else{c[T>>2]=u;u=2579;s=dd(v,44808,T)|0}Uj(f,u,t,s,-7,2);u=0}else if((Ca|0)==196){s=c[C>>2]|0;if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;u=c[Ga+104>>2]|0;a[u+(s*20|0)>>0]=11;b[u+(s*20|0)+2>>1]=0;c[u+(s*20|0)+4>>2]=0;c[u+(s*20|0)+8>>2]=o;c[u+(s*20|0)+12>>2]=0;c[u+(s*20|0)+16>>2]=0;a[u+(s*20|0)+1>>0]=0;u=0;break}else{Di(Ga,11,0,o,0)|0;u=0;break}}while(0);t=c[Ga+12>>2]|0;s=0-D|0;if(((c[t+56>>2]|0)+(c[t+60>>2]|0)|0)<0)mk(t,Ga,s);else c[(c[t+64>>2]|0)+(s<<2)>>2]=c[C>>2];if(!E){v=0;za=0}else{v=c[C>>2]|0;if((c[B>>2]|0)>(v|0)){c[C>>2]=v+1;y=c[Ga+104>>2]|0;a[y+(v*20|0)>>0]=11;y=y+(v*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0))}else v=Di(Ga,11,0,0,0)|0;t=c[C>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))s=(c[Ga+104>>2]|0)+((((E|0)<1?t:E)+-1|0)*20|0)|0;else s=59308;c[s+8>>2]=t;za=E}}else{u=0;v=0;za=0}na=g+8|0;s=c[na>>2]|0;if(s){oa=Aa+1|0;pa=Ga+108|0;qa=Ga+112|0;ra=(Ba|0)==0;sa=f+56|0;ta=Ga+104|0;ua=k+1|0;va=(Aa|0)<0;wa=g+40|0;xa=~k;ya=f+52|0;ja=m<<24>>24==0;ka=Ga+12|0;la=n<<24>>24==11;ma=r+8|0;U=U+32|0;V=g+16|0;T=f+146|0;W=(Da|0)==1;m=g+72|0;X=f+19|0;Y=f+32|0;Z=f+28|0;_=g+68|0;$=r+28|0;aa=f+44|0;ba=Ea+50|0;ca=Da&65535;da=f+116|0;ea=r+20|0;fa=r+12|0;ga=Ea+4|0;ha=Ea+32|0;ia=l+1|0;S=0;w=0;t=0;while(1){H=h+(S<<2)|0;g:do if(c[H>>2]|0){Q=(Ba|0)==(s|0);if(Q){w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;y=c[ta>>2]|0;a[y+(w*20|0)>>0]=11;y=y+(w*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));y=w}else y=Di(Ga,11,0,0,0)|0;x=c[pa>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))w=(c[ta>>2]|0)+((va?x+-1|0:Aa)*20|0)|0;else w=59308;c[w+8>>2]=x;q=oa}else{q=(c[sa>>2]|0)+-1|0;c[sa>>2]=q;y=w}if((ra|Q)&t<<24>>24==0){zk(Ga,g,ua);R=1}else R=t;O=S+j|0;t=s+36|0;if(c[t>>2]|0){w=c[H>>2]|0;x=c[pa>>2]|0;if((c[qa>>2]|0)>(x|0)){c[pa>>2]=x+1;P=c[ta>>2]|0;a[P+(x*20|0)>>0]=73;b[P+(x*20|0)+2>>1]=0;c[P+(x*20|0)+4>>2]=0;c[P+(x*20|0)+8>>2]=w;c[P+(x*20|0)+12>>2]=0;c[P+(x*20|0)+16>>2]=0;a[P+(x*20|0)+1>>0]=0}else Di(Ga,73,0,w,0)|0;c[ya>>2]=xa;t=c[t>>2]|0;w=c[f>>2]|0;if(!t)t=0;else t=dk(w,t,0,0)|0;if(!(a[w+81>>0]|0))Tj(f,t,q,16);if(t|0)ni(w,t);c[ya>>2]=0}t=c[H>>2]|0;P=t+1|0;N=s+52|0;if(!(b[N>>1]|0))x=0;else{E=s+4|0;F=s+40|0;D=0;do{t=b[(c[E>>2]|0)+(D<<1)>>1]|0;switch(t<<16>>16){case -2:{c[ya>>2]=xa;t=c[(c[F>>2]|0)+4+(D*20|0)>>2]|0;A=D+P|0;C=c[f>>2]|0;if(!t)B=0;else B=dk(C,t,0,0)|0;h:do if(!(a[C+81>>0]|0)){do if(B){if((a[B>>0]|0)!=-88){z=Jj(f,B,A)|0;break}t=c[Ia>>2]|0;w=c[B+28>>2]|0;x=t+108|0;z=c[x>>2]|0;if((c[t+112>>2]|0)>(z|0)){c[x>>2]=z+1;Ca=c[t+104>>2]|0;a[Ca+(z*20|0)>>0]=78;b[Ca+(z*20|0)+2>>1]=0;c[Ca+(z*20|0)+4>>2]=w;c[Ca+(z*20|0)+8>>2]=A;c[Ca+(z*20|0)+12>>2]=0;c[Ca+(z*20|0)+16>>2]=0;a[Ca+(z*20|0)+1>>0]=0;Ca=252;break h}else{Di(t,78,w,A,0)|0;Ca=252;break h}}else z=Jj(f,0,A)|0;while(0);if((z|0)==(A|0)){Ca=251;break}t=c[Ia>>2]|0;if(!t){Ca=251;break}w=t+108|0;x=c[w>>2]|0;if((c[t+112>>2]|0)>(x|0)){c[w>>2]=x+1;Ca=c[t+104>>2]|0;a[Ca+(x*20|0)>>0]=79;b[Ca+(x*20|0)+2>>1]=0;c[Ca+(x*20|0)+4>>2]=z;c[Ca+(x*20|0)+8>>2]=A;c[Ca+(x*20|0)+12>>2]=0;c[Ca+(x*20|0)+16>>2]=0;a[Ca+(x*20|0)+1>>0]=0;Ca=251;break}else{Di(t,79,z,A,0)|0;Ca=251;break}}else Ca=251;while(0);if((Ca|0)==251?(Ca=0,B|0):0)Ca=252;if((Ca|0)==252){Ca=0;ni(C,B)}c[ya>>2]=0;break}case -1:{z=k;Ca=255;break}default:{z=t<<16>>16==(b[wa>>1]|0)?k:ua+(t<<16>>16)|0;Ca=255}}do if((Ca|0)==255){Ca=0;x=((t&65535)>>>15)+79<<16>>16;t=D+P|0;w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;M=c[ta>>2]|0;a[M+(w*20|0)>>0]=x;b[M+(w*20|0)+2>>1]=0;c[M+(w*20|0)+4>>2]=z;c[M+(w*20|0)+8>>2]=t;c[M+(w*20|0)+12>>2]=0;c[M+(w*20|0)+16>>2]=0;a[M+(w*20|0)+1>>0]=0;break}else{Di(Ga,x&65535,z,t,0)|0;break}}while(0);D=D+1|0;t=b[N>>1]|0}while(D>>>0<(t&65535)>>>0);x=t&65535;t=c[H>>2]|0}w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;M=c[ta>>2]|0;a[M+(w*20|0)>>0]=92;b[M+(w*20|0)+2>>1]=0;c[M+(w*20|0)+4>>2]=P;c[M+(w*20|0)+8>>2]=x;c[M+(w*20|0)+12>>2]=t;c[M+(w*20|0)+16>>2]=0;a[M+(w*20|0)+1>>0]=0}else Di(Ga,92,P,x,t)|0;F=(Ea|0)==(s|0);if(ja&(Ha&F)){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break}}t=a[s+54>>0]|0;if(!(t<<24>>24)){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break}}if(Q)E=(c[ma>>2]|0)==0?4:6;else E=(la?(t<<24>>24==11?2:t):n)&255;i:do if(!S){if(!(F&(E|0)==5&(c[s+20>>2]|0)==0))break;D=c[U>>2]|0;do if(!((D&8192|0)==0&0==0)){t=c[f>>2]|0;if(0==0?(c[t+32>>2]&262144|0)==0:0)break;t=c[(c[t+16>>2]|0)+28>>2]|0;if(a[T>>0]|0)break;C=c[m>>2]|0;do if((C|0)!=(t|0)){t=c[t+48>>2]|0;if(!t){Ca=291;break}B=t;t=0;do{A=c[B+8>>2]|0;do if((c[A+24>>2]|0)==(C|0)){x=c[A+4>>2]|0;z=c[g>>2]|0;M=a[x>>0]|0;w=(d[208+(M&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0;if(!(M<<24>>24==0|(w|0)!=0))do{x=x+1|0;z=z+1|0;M=a[x>>0]|0;w=(d[208+(M&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(w|0)!=0));if(w|0)break;if(!t)t=c[_>>2]|0;c[A+32>>2]=t;t=A}while(0);B=c[B>>2]|0}while((B|0)!=0);if(!t)Ca=291}else Ca=291;while(0);if((Ca|0)==291){Ca=0;t=c[_>>2]|0;if(!t)break}w=0;x=t;do{if((a[x+8>>0]|0)==121)w=w|d[x+9>>0];x=c[x+32>>2]|0}while((x|0)!=0);if(!((t|0)==0|(w|0)==0))break i}while(0);if(!((D&16384|0)==0&0==0)){if(c[V>>2]|0)break;C=c[g>>2]|0;z=c[m>>2]|0;A=c[z+68>>2]|0;if(!A){w=z+60|0;t=z+64|0}else{w=a[C>>0]|0;if(!(w<<24>>24))t=0;else{t=0;x=C;do{x=x+1|0;t=G(t+(d[208+(w&255)>>0]|0)|0,-1640531535)|0;w=a[x>>0]|0}while(w<<24>>24!=0)}t=(t>>>0)%((c[z+56>>2]|0)>>>0)|0;w=A+(t<<3)|0;t=A+(t<<3)+4|0}w=c[w>>2]|0;j:do if(!w)t=59292;else{B=d[208+(d[C>>0]|0)>>0]|0;while(1){t=c[t>>2]|0;w=w+-1|0;z=c[t+12>>2]|0;M=a[z>>0]|0;x=(d[208+(M&255)>>0]|0)-B|0;if(!(M<<24>>24==0|(x|0)!=0)){A=C;do{z=z+1|0;A=A+1|0;M=a[z>>0]|0;x=(d[208+(M&255)>>0]|0)-(d[208+(d[A>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(x|0)!=0))}if(!x)break j;if(!w){t=59292;break}}}while(0);if(c[t+8>>2]|0)break}w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break g}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break g}}while(0);w=e[s+50>>1]|0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;M=c[ta>>2]|0;a[M+(t*20|0)>>0]=27;b[M+(t*20|0)+2>>1]=0;c[M+(t*20|0)+4>>2]=O;c[M+(t*20|0)+8>>2]=q;c[M+(t*20|0)+12>>2]=P;c[M+(t*20|0)+16>>2]=0;a[M+(t*20|0)+1>>0]=0}else t=Di(Ga,27,O,q,P)|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0)){M=c[ta>>2]|0;a[M+(t*20|0)+1>>0]=-3;c[M+(t*20|0)+16>>2]=w}do if(!F)if(W){t=a[X>>0]|0;if(!(t<<24>>24)){M=(c[aa>>2]|0)+1|0;c[aa>>2]=M;break}else{M=t+-1<<24>>24;a[X>>0]=M;M=c[f+148+((M&255)<<2)>>2]|0;break}}else{t=c[Y>>2]|0;w=c[Z>>2]|0;if((w|0)<(Da|0)){M=c[aa>>2]|0;c[aa>>2]=M+Da;M=M+1|0;break}else{c[Y>>2]=t+Da;c[Z>>2]=w-Da;M=t;break}}else M=P;while(0);do if(Ha|(E|0)==5){if(!(c[Fa>>2]&32)){t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=-121;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=O;c[L+(t*20|0)+8>>2]=M;c[L+(t*20|0)+12>>2]=0;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else Di(Ga,135,O,M,0)|0;if(!Ha)break;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=53;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=M;c[L+(t*20|0)+8>>2]=q;c[L+(t*20|0)+12>>2]=l;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else Di(Ga,53,M,q,l)|0;t=c[pa>>2]|0;if((t|0)<=0)break;b[(c[ta>>2]|0)+((t+-1|0)*20|0)+2>>1]=144;break}do if(!F){if(!(b[ba>>1]|0))break;B=s+4|0;A=0;do{x=b[(c[ga>>2]|0)+(A<<1)>>1]|0;t=b[N>>1]|0;k:do if(!(t<<16>>16))t=-1;else{z=c[B>>2]|0;w=t&65535;t=0;while(1){if((b[z+(t<<1)>>1]|0)==x<<16>>16)break k;t=t+1|0;if(t>>>0>=w>>>0){t=-1;break}}}while(0);t=t<<16>>16;w=A+M|0;x=c[pa>>2]|0;if((c[qa>>2]|0)>(x|0)){c[pa>>2]=x+1;L=c[ta>>2]|0;a[L+(x*20|0)>>0]=90;b[L+(x*20|0)+2>>1]=0;c[L+(x*20|0)+4>>2]=O;c[L+(x*20|0)+8>>2]=t;c[L+(x*20|0)+12>>2]=w;c[L+(x*20|0)+16>>2]=0;a[L+(x*20|0)+1>>0]=0}else Di(Ga,90,O,t,w)|0;A=A+1|0}while(A>>>0<(e[ba>>1]|0)>>>0)}while(0);if(!Ha)break;D=s+55|0;D=((d[D>>0]|d[D+1>>0]<<8)&3)==2?P:M;t=b[ba>>1]|0;if(!(t<<16>>16))break;C=52;A=(c[pa>>2]|0)+(t&65535)|0;B=0;do{t=c[(c[ha>>2]|0)+(B<<2)>>2]|0;x=c[f>>2]|0;w=a[x+78>>0]|0;L=a[x+165>>0]|0;x=Zi(x,w,t,L&255)|0;do if(!(L<<24>>24)){if(!x){x=_i(f,w,0,t)|0;break}if(c[x+12>>2]|0)break;x=_i(f,w,x,t)|0}while(0);w=(B|0)==((e[ba>>1]|0)+-1|0);A=w?q:A;C=w?53:C;w=ia+(b[(c[ga>>2]|0)+(B<<1)>>1]|0)|0;z=B+D|0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=C;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=w;c[L+(t*20|0)+8>>2]=A;c[L+(t*20|0)+12>>2]=z;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else t=Di(Ga,C,w,A,z)|0;do if(!(a[(c[Ga>>2]|0)+81>>0]|0)){if((t|0)<0)t=(c[pa>>2]|0)+-1|0;w=c[ta>>2]|0;z=w+(t*20|0)+1|0;if(a[z>>0]|0){Ei(Ga,w+(t*20|0)|0,x,-2);break}if(!x)break;c[w+(t*20|0)+16>>2]=x;a[z>>0]=-2}while(0);t=c[pa>>2]|0;if((t|0)>0)b[(c[ta>>2]|0)+((t+-1|0)*20|0)+2>>1]=144;B=B+1|0}while(B>>>0<(e[ba>>1]|0)>>>0)}while(0);switch((E&255)<<24>>24){case 3:case 2:case 1:{fl(f,E,s);break}case 6:{K=c[Ia>>2]|0;L=c[f>>2]|0;J=c[$>>2]|0;do if((J|0)!=(O|0)){if(!(c[Fa>>2]&32)){t=a[X>>0]|0;if(!(t<<24>>24)){z=(c[aa>>2]|0)+1|0;c[aa>>2]=z}else{z=t+-1<<24>>24;a[X>>0]=z;z=c[f+148+((z&255)<<2)>>2]|0}w=K+108|0;t=c[w>>2]|0;x=K+112|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=-121;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=O;c[Ca+(t*20|0)+8>>2]=z;c[Ca+(t*20|0)+12>>2]=0;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else Di(K,135,O,z,0)|0;t=c[w>>2]|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=30;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=J;c[Ca+(t*20|0)+8>>2]=0;c[Ca+(t*20|0)+12>>2]=z;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else Di(K,30,J,0,z)|0;if(!z)break;t=a[X>>0]|0;if((t&255)>=8)break;a[X>>0]=t+1<<24>>24;c[f+148+((t&255)<<2)>>2]=z;break}t=c[na>>2]|0;l:do if(!t)t=0;else while(1){Ca=t+55|0;if(((d[Ca>>0]|d[Ca+1>>0]<<8)&3)==2)break l;t=c[t+20>>2]|0;if(!t){t=0;break}}while(0);Ca=b[t+50>>1]|0;I=Ca&65535;F=c[aa>>2]|0;H=F+1|0;c[aa>>2]=F+I;if(!(Ca<<16>>16)){A=K+108|0;w=K+112|0}else{D=t+4|0;A=K+108|0;w=K+112|0;E=s+4|0;F=K+104|0;C=0;do{z=b[(c[D>>2]|0)+(C<<1)>>1]|0;t=b[N>>1]|0;m:do if(!(t<<16>>16))t=-1;else{B=c[E>>2]|0;x=t&65535;t=0;while(1){if((b[B+(t<<1)>>1]|0)==z<<16>>16)break m;t=t+1|0;if(t>>>0>=x>>>0){t=-1;break}}}while(0);t=t<<16>>16;x=C+H|0;z=c[A>>2]|0;if((c[w>>2]|0)>(z|0)){c[A>>2]=z+1;Ca=c[F>>2]|0;a[Ca+(z*20|0)>>0]=90;b[Ca+(z*20|0)+2>>1]=0;c[Ca+(z*20|0)+4>>2]=O;c[Ca+(z*20|0)+8>>2]=t;c[Ca+(z*20|0)+12>>2]=x;c[Ca+(z*20|0)+16>>2]=0;a[Ca+(z*20|0)+1>>0]=0}else Di(K,90,O,t,x)|0;C=C+1|0}while((C|0)!=(I|0))}t=c[A>>2]|0;if((c[w>>2]|0)>(t|0)){c[A>>2]=t+1;z=c[K+104>>2]|0;a[z+(t*20|0)>>0]=29;b[z+(t*20|0)+2>>1]=0;c[z+(t*20|0)+4>>2]=J;c[z+(t*20|0)+8>>2]=0;c[z+(t*20|0)+12>>2]=H;c[z+(t*20|0)+16>>2]=0;a[z+(t*20|0)+1>>0]=0;z=t}else z=Di(K,29,J,0,H)|0;if(!(a[(c[K>>2]|0)+81>>0]|0)){Ca=c[K+104>>2]|0;a[Ca+(z*20|0)+1>>0]=-3;c[Ca+(z*20|0)+16>>2]=I}t=c[A>>2]|0;if((c[w>>2]|0)>(t|0)){c[A>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=69;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=11;c[Ca+(t*20|0)+8>>2]=2;c[Ca+(t*20|0)+12>>2]=0;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else t=Di(K,69,11,2,0)|0;do if(!(a[(c[K>>2]|0)+81>>0]|0)){if((t|0)<0)t=(c[A>>2]|0)+-1|0;w=c[K+104>>2]|0;x=w+(t*20|0)+1|0;if(!(a[x>>0]|0)){c[w+(t*20|0)+16>>2]=39404;a[x>>0]=-1;break}else{Ei(K,w+(t*20|0)|0,39404,-1);break}}while(0);w=c[A>>2]|0;if(!(a[(c[K>>2]|0)+81>>0]|0))t=(c[K+104>>2]|0)+(((z|0)<0?w+-1|0:z)*20|0)|0;else t=59308;c[t+8>>2]=w}while(0);tj(f,ik(L,c[ea>>2]|0,0)|0,c[ma>>2]|0,c[fa>>2]|0,2,r);c[ma>>2]=0;c[fa>>2]=0;Ca=421;break}case 4:{Ca=421;break}default:{t=c[f>>2]|0;C=c[t+32>>2]|0;do if(!((c[U>>2]&8192|0)==0&0==0|(C&262144|0)==0&0==0)){t=c[(c[t+16>>2]|0)+28>>2]|0;if(a[T>>0]|0){Ca=445;break}B=c[m>>2]|0;do if((B|0)!=(t|0)){t=c[t+48>>2]|0;if(!t){Ca=439;break}A=t;t=0;do{z=c[A+8>>2]|0;do if((c[z+24>>2]|0)==(B|0)){w=c[z+4>>2]|0;x=c[g>>2]|0;N=a[w>>0]|0;u=(d[208+(N&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(N<<24>>24==0|(u|0)!=0))do{w=w+1|0;x=x+1|0;N=a[w>>0]|0;u=(d[208+(N&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(u|0)!=0));if(u|0)break;if(!t)t=c[_>>2]|0;c[z+32>>2]=t;t=z}while(0);A=c[A>>2]|0}while((A|0)!=0);if(!t)Ca=439}else Ca=439;while(0);if((Ca|0)==439){t=c[_>>2]|0;if(!t){Ca=445;break}}u=0;w=t;do{if((a[w+8>>0]|0)==121)u=u|d[w+9>>0];w=c[w+32>>2]|0}while((w|0)!=0);if(!((t|0)==0|(u|0)==0))Ca=461;else Ca=445}else Ca=445;while(0);do if((Ca|0)==445){Ca=0;if((C&16384|0)==0&0==0){t=0;break}B=c[g>>2]|0;x=c[m>>2]|0;z=c[x+68>>2]|0;if(!z){u=x+60|0;t=x+64|0}else{u=a[B>>0]|0;if(!(u<<24>>24))t=0;else{t=0;w=B;do{w=w+1|0;t=G(t+(d[208+(u&255)>>0]|0)|0,-1640531535)|0;u=a[w>>0]|0}while(u<<24>>24!=0)}t=(t>>>0)%((c[x+56>>2]|0)>>>0)|0;u=z+(t<<3)|0;t=z+(t<<3)+4|0}u=c[u>>2]|0;n:do if(!u)t=59292;else{A=d[208+(d[B>>0]|0)>>0]|0;while(1){t=c[t>>2]|0;u=u+-1|0;x=c[t+12>>2]|0;N=a[x>>0]|0;w=(d[208+(N&255)>>0]|0)-A|0;if(!(N<<24>>24==0|(w|0)!=0)){z=B;do{x=x+1|0;z=z+1|0;N=a[x>>0]|0;w=(d[208+(N&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(w|0)!=0))}if(!w)break n;if(!u){t=59292;break}}}while(0);if(c[t+8>>2]|0){t=0;Ca=461;break}if(!(c[V>>2]|0))t=0;else{t=0;Ca=461}}while(0);if((Ca|0)==461){Ca=0;N=c[da>>2]|0;a[((N|0)==0?f:N)+20>>0]=1}Im(f,g,t,i,j,M,ca,0,5,F&1,O);u=1}}do if((Ca|0)==421){Ca=0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;O=c[ta>>2]|0;a[O+(t*20|0)>>0]=11;b[O+(t*20|0)+2>>1]=0;c[O+(t*20|0)+4>>2]=0;c[O+(t*20|0)+8>>2]=o;c[O+(t*20|0)+12>>2]=0;c[O+(t*20|0)+16>>2]=0;a[O+(t*20|0)+1>>0]=0;break}else{Di(Ga,11,0,o,0)|0;break}}while(0);do if(!Q){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];break}}else{t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;Q=c[ta>>2]|0;a[Q+(t*20|0)>>0]=11;b[Q+(t*20|0)+2>>1]=0;c[Q+(t*20|0)+4>>2]=0;c[Q+(t*20|0)+8>>2]=oa;c[Q+(t*20|0)+12>>2]=0;c[Q+(t*20|0)+16>>2]=0;a[Q+(t*20|0)+1>>0]=0}else Di(Ga,11,0,oa,0)|0;w=c[pa>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))t=(c[ta>>2]|0)+(((y|0)<0?w+-1|0:y)*20|0)|0;else t=59308;c[t+8>>2]=w}while(0);if((M|0)==(P|0)){w=y;t=R;break}if(!W){if((c[Z>>2]|0)>=(Da|0)){w=y;t=R;break}c[Z>>2]=Da;c[Y>>2]=M;w=y;t=R;break}if(!M){w=y;t=R;break}t=a[X>>0]|0;if((t&255)>=8){w=y;t=R;break}a[X>>0]=t+1<<24>>24;c[f+148+((t&255)<<2)>>2]=M;w=y;t=R}while(0);s=c[s+20>>2]|0;if(!s)break;else S=S+1|0}}if(!za){c[p>>2]=u;Ra=Ja;return}s=Ga+108|0;t=c[s>>2]|0;if((c[Ga+112>>2]|0)>(t|0)){c[s>>2]=t+1;o=c[Ga+104>>2]|0;a[o+(t*20|0)>>0]=11;b[o+(t*20|0)+2>>1]=0;c[o+(t*20|0)+4>>2]=0;c[o+(t*20|0)+8>>2]=za;c[o+(t*20|0)+12>>2]=0;c[o+(t*20|0)+16>>2]=0;a[o+(t*20|0)+1>>0]=0}else Di(Ga,11,0,za,0)|0;t=c[s>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))s=(c[Ga+104>>2]|0)+(((v|0)<0?t+-1|0:v)*20|0)|0;else s=59308;c[s+8>>2]=t;c[p>>2]=u;Ra=Ja;return}function Um(f,g,h,i,j,k,l,m,n){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;t=f+8|0;o=c[t>>2]|0;a:do if(!o){s=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))r=15;else{C=0;break a}else{do if((e[s+276>>1]|0)>=224){o=s+300|0;p=c[o>>2]|0;if(p|0){c[o>>2]=c[p>>2];q=s+284|0;c[q>>2]=(c[q>>2]|0)+1;q=p;break b}o=s+296|0;p=c[o>>2]|0;if(!p){o=s+292|0;break}else{c[o>>2]=c[p>>2];q=s+284|0;c[q>>2]=(c[q>>2]|0)+1;q=p;break b}}else o=s+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;r=15}while(0);if((r|0)==15)q=_d(s,224,0)|0;if(!q)C=0;else{o=q+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[q>>2]=s;o=s+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=q;c[q+8>>2]=p;c[q+4>>2]=0;c[o>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[t>>2]=q;Di(q,61,0,1,0)|0;C=q}}else C=o;while(0);p=c[g+8>>2]|0;if(!p){u=0;o=g+36|0}else{y=(n|0)==0?0:16;x=C+108|0;z=C+112|0;o=g+36|0;A=C+104|0;B=(l&2|(y|1)&255)&255;w=0;u=0;while(1){t=k+(w<<2)|0;s=c[t>>2]|0;if(s){do if(c[p+36>>2]|0){q=c[x>>2]|0;r=q+2|0;if((c[z>>2]|0)>(q|0)){c[x>>2]=q+1;v=c[A>>2]|0;a[v+(q*20|0)>>0]=50;b[v+(q*20|0)+2>>1]=0;c[v+(q*20|0)+4>>2]=s;c[v+(q*20|0)+8>>2]=r;c[v+(q*20|0)+12>>2]=0;c[v+(q*20|0)+16>>2]=0;a[v+(q*20|0)+1>>0]=0;break}else{Di(C,50,s,r,0)|0;break}}while(0);q=p+55|0;q=d[q>>0]|d[q+1>>0]<<8;if((q&3)==2)v=(c[o>>2]&32|0)==0?y:B;else v=y;u=w+i|0;s=c[t>>2]|0;t=s+1|0;r=e[((q&8)==0?p+52|0:p+50|0)>>1]|0;q=c[x>>2]|0;if((c[z>>2]|0)>(q|0)){c[x>>2]=q+1;D=c[A>>2]|0;a[D+(q*20|0)>>0]=-124;b[D+(q*20|0)+2>>1]=0;c[D+(q*20|0)+4>>2]=u;c[D+(q*20|0)+8>>2]=s;c[D+(q*20|0)+12>>2]=t;c[D+(q*20|0)+16>>2]=0;a[D+(q*20|0)+1>>0]=0}else q=Di(C,132,u,s,t)|0;if(!(a[(c[C>>2]|0)+81>>0]|0)){D=c[A>>2]|0;a[D+(q*20|0)+1>>0]=-3;c[D+(q*20|0)+16>>2]=r}q=c[x>>2]|0;if((q|0)>0){b[(c[A>>2]|0)+((q+-1|0)*20|0)+2>>1]=v&255;u=1}else u=1}p=c[p+20>>2]|0;if(!p)break;else w=w+1|0}}if(c[o>>2]&32|0)return;q=j+1|0;o=f+19|0;p=a[o>>0]|0;if(!(p<<24>>24)){D=f+44|0;r=(c[D>>2]|0)+1|0;c[D>>2]=r}else{r=p+-1<<24>>24;a[o>>0]=r;r=c[f+148+((r&255)<<2)>>2]|0}o=b[g+42>>1]|0;s=C+108|0;p=c[s>>2]|0;t=C+112|0;if((c[t>>2]|0)>(p|0)){c[s>>2]=p+1;D=c[C+104>>2]|0;a[D+(p*20|0)>>0]=92;b[D+(p*20|0)+2>>1]=0;c[D+(p*20|0)+4>>2]=q;c[D+(p*20|0)+8>>2]=o;c[D+(p*20|0)+12>>2]=r;c[D+(p*20|0)+16>>2]=0;a[D+(p*20|0)+1>>0]=0}else Di(C,92,q,o,r)|0;if(!(u<<24>>24))zk(C,g,0);q=f+18|0;p=(a[q>>0]|0)==0?((l|0)==0?33:(l|1)&255):0;p=(m|0)==0?p:p|8;p=(n|0)==0?p:p|16;o=c[s>>2]|0;if((c[t>>2]|0)>(o|0)){c[s>>2]=o+1;D=c[C+104>>2]|0;a[D+(o*20|0)>>0]=122;b[D+(o*20|0)+2>>1]=0;c[D+(o*20|0)+4>>2]=h;c[D+(o*20|0)+8>>2]=r;c[D+(o*20|0)+12>>2]=j;c[D+(o*20|0)+16>>2]=0;a[D+(o*20|0)+1>>0]=0}else Di(C,122,h,r,j)|0;if((a[q>>0]|0)==0?(a[(c[C>>2]|0)+81>>0]|0)==0:0){j=c[C+104>>2]|0;D=(c[s>>2]|0)+-1|0;a[j+(D*20|0)+1>>0]=-6;c[j+(D*20|0)+16>>2]=g}o=c[s>>2]|0;if((o|0)<=0)return;b[(c[C+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=p&255;return}function Vm(d,e){d=d|0;e=e|0;if((a[e>>0]|0)!=-94)return 0;e=b[e+32>>1]|0;if(e<<16>>16<=-1){d=d+20|0;a[d>>0]=a[d>>0]|2;return 0}if((c[(c[d+24>>2]|0)+(e<<16>>16<<2)>>2]|0)<=-1)return 0;d=d+20|0;a[d>>0]=a[d>>0]|1;return 0}function Wm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(!(c[g+36>>2]&8)){l=0;return l|0}j=c[d>>2]|0;if(c[j+24>>2]&4|0){l=0;return l|0}k=c[d+116>>2]|0;k=(k|0)==0?d:k;i=c[(c[(c[j+16>>2]|0)+(f<<4)+12>>2]|0)+72>>2]|0;if(((i|0?(c[i+36>>2]&32|0)==0:0)?(c[i+56>>2]|0)==0:0)?(b[i+42>>1]|0)==2:0){i=k+112|0;d=c[i>>2]|0;a:do if(!d)l=12;else while(1){if((c[d+4>>2]|0)==(g|0))break a;d=c[d>>2]|0;if(!d){l=12;break}}while(0);do if((l|0)==12){b:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))l=22;else{l=0;return l|0}else{do if((e[j+276>>1]|0)>=16){h=j+300|0;d=c[h>>2]|0;if(d|0){c[h>>2]=c[d>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}h=j+296|0;d=c[h>>2]|0;if(!d){d=j+292|0;break}else{c[h>>2]=c[d>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}}else d=j+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;l=22}while(0);if((l|0)==22)d=_d(j,16,0)|0;if(!d){l=0;return l|0}else{c[d>>2]=c[i>>2];c[i>>2]=d;c[d+4>>2]=g;c[d+8>>2]=f;l=k+44|0;k=c[l>>2]|0;c[d+12>>2]=k+2;c[l>>2]=k+4;break}}while(0);l=c[d+12>>2]|0;return l|0}l=d+36|0;c[l>>2]=(c[l>>2]|0)+1;c[d+12>>2]=523;l=0;return l|0}function Xm(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;h=b[f+50>>1]|0;t=g+50|0;if(h<<16>>16!=(b[t>>1]|0)){g=0;return g|0}if((a[f+54>>0]|0)!=(a[g+54>>0]|0)){g=0;return g|0}a:do if(h<<16>>16){l=g+4|0;m=f+4|0;n=g+40|0;o=f+40|0;p=g+28|0;q=f+28|0;r=g+32|0;s=f+32|0;k=0;while(1){h=b[(c[l>>2]|0)+(k<<1)>>1]|0;if(h<<16>>16!=(b[(c[m>>2]|0)+(k<<1)>>1]|0)){h=0;i=18;break}if(h<<16>>16==-2?bk(0,c[(c[n>>2]|0)+4+(k*20|0)>>2]|0,c[(c[o>>2]|0)+4+(k*20|0)>>2]|0,-1)|0:0){h=0;i=18;break}if((a[(c[p>>2]|0)+k>>0]|0)!=(a[(c[q>>2]|0)+k>>0]|0)){h=0;i=18;break}i=c[(c[r>>2]|0)+(k<<2)>>2]|0;j=c[(c[s>>2]|0)+(k<<2)>>2]|0;if(i){if(!j){h=0;i=18;break}u=a[i>>0]|0;h=(d[208+(u&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(u<<24>>24==0|(h|0)!=0))do{i=i+1|0;j=j+1|0;u=a[i>>0]|0;h=(d[208+(u&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(h|0)!=0))}else h=((j|0)!=0)<<31>>31;k=k+1|0;if(h|0){h=0;i=18;break}if(k>>>0>=(e[t>>1]|0)>>>0)break a}if((i|0)==18)return h|0}while(0);u=(bk(0,c[g+36>>2]|0,c[f+36>>2]|0,-1)|0)==0&1;return u|0}function Ym(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=c[a+12>>2]|0;if(!b)b=0;else{b=c[b+24>>2]|0;b=(b|0)>0?b:0}d=c[a+16>>2]|0;if(d){k=c[d+24>>2]|0;b=(k|0)>(b|0)?k:b}j=a+4|0;k=c[j>>2]|0;d=a+20|0;if(!(k&2048)){h=c[d>>2]|0;if(!h){m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}i=c[h>>2]|0;g=(i|0)>0;if(g){f=0;e=i;while(1){d=c[h+4+(f*20|0)>>2]|0;if(!d)d=e;else{m=c[d+24>>2]|0;d=(m|0)>(b|0);b=d?m:b;d=d?i:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}if(g){d=0;e=0;do{d=c[(c[h+4+(e*20|0)>>2]|0)+4>>2]|d;e=e+1|0}while((e|0)!=(i|0));d=d&2097412}else d=0}else d=0;c[j>>2]=d|k;m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}d=c[d>>2]|0;if(!d){m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}do{e=c[d+36>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}e=c[d+44>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}e=c[d+60>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}h=c[d>>2]|0;if((h|0)!=0?(i=c[h>>2]|0,(i|0)>0):0){g=0;f=i;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?i:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}h=c[d+40>>2]|0;if((h|0)!=0?(l=c[h>>2]|0,(l|0)>0):0){g=0;f=l;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?l:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}h=c[d+48>>2]|0;if((h|0)!=0?(m=c[h>>2]|0,(m|0)>0):0){g=0;f=m;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?m:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}d=c[d+52>>2]|0}while((d|0)!=0);m=b+1|0;a=a+24|0;c[a>>2]=m;return}function Zm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Ra;Ra=Ra+16|0;g=i;a:do if(((d[b>>0]|0)+-48|0)>>>0<10){c[g>>2]=0;ii(b,g)|0;f=c[g>>2]&255}else{h=Eu(b)|0;g=(h&1073741823|0)==2;b:do if(!e){if(g){if(!(Ib(18544,b,2)|0)){f=0;break}if(!(Ib(18545,b,2)|0)){f=1;break}else break a}switch(h&1073741823|0){case 3:{if(!(Ib(18546,b,3)|0)){f=2;break b}if(!(Ib(18553,b,3)|0)){f=4;break b}else break a}case 5:{if(!(Ib(18548,b,5)|0)){f=3;break b}if(!(Ib(18559,b,5)|0)){f=6;break b}else break a}case 4:{if(!(Ib(18556,b,4)|0)){f=5;break b}if(!(Ib(18564,b,4)|0)){f=7;break b}else break a}default:break a}}else{if(g){if(!(Ib(18544,b,2)|0)){f=0;break}if(!(Ib(18545,b,2)|0)){f=1;break}else break a}switch(h&1073741823|0){case 3:{if(!(Ib(18546,b,3)|0)){f=2;break b}if(!(Ib(18553,b,3)|0)){f=4;break b}else break a}case 5:if(!(Ib(18548,b,5)|0)){f=3;break b}else break a;case 4:if(!(Ib(18556,b,4)|0)){f=5;break b}else break a;default:break a}}while(0);f=a[45920+f>>0]|0}while(0);Ra=i;return f|0}function _m(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=Ra;Ra=Ra+16|0;g=i;c[g>>2]=f;f=0;a:while(1){switch(a[e+f>>0]|0){case 0:break a;case 115:{k=(c[g>>2]|0)+(4-1)&~(4-1);j=c[k>>2]|0;c[g>>2]=k+4;Fj(b,(j|0)==0?73:110,0,f+d|0,0,j,0)|0;break}case 105:{j=(c[g>>2]|0)+(4-1)&~(4-1);k=c[j>>2]|0;c[g>>2]=j+4;Ci(b,70,k,f+d|0)|0;break}default:{h=7;break a}}f=f+1|0}if((h|0)==7){Ra=i;return}Ci(b,81,d,f)|0;Ra=i;return}function $m(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=c[(c[e>>2]|0)+32>>2]|0;o=c[(c[e+4>>2]|0)+8>>2]|0;h=c[g>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){n=c[h+16>>2]|0;break}if(!(i&1))n=Gg(h,1)|0;else n=0}else n=0;while(0);h=c[g+4>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){m=c[h+16>>2]|0;break}if(!(i&1))m=Gg(h,1)|0;else m=0}else m=0;while(0);j=c[g>>2]|0;h=b[j+8>>1]|0;if((h&2)!=0?(a[j+10>>0]|0)==1:0)h=c[j+12>>2]|0;else l=16;do if((l|0)==16){i=h&65535;if(!(i&16)){if(i&1|0){h=0;break}h=Fg(j,1)|0;break}else{h=c[j+12>>2]|0;if(!(i&16384))break;h=(c[j>>2]|0)+h|0;break}}while(0);if((h|0)>(c[k+140>>2]|0)){c[e+20>>2]=1;yc(c[e>>2]|0,45980,-1,1,-1)|0;return}do if((f|0)==3){h=c[g+8>>2]|0;if(!h)return;i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0)g=c[h+16>>2]|0;else l=28;do if((l|0)==28)if(!(i&1)){g=Gg(h,1)|0;break}else return;while(0);if(!g)return;k=a[g>>0]|0;if((g|0)!=(-1|0)&k<<24>>24!=0){h=g;f=0;j=k;while(1){i=h+1|0;if((j&255)>191){h=i;while(1){j=a[h>>0]|0;if((j&-64)<<24>>24==-128)h=h+1|0;else break}}else{h=i;j=a[i>>0]|0}if(j<<24>>24!=0&(h|0)!=(-1|0))f=f+1|0;else break}if(!f){j=g+1|0;h=k&255;if((k&255)<=191)break;h=d[2736+(h+-192)>>0]|0;i=a[j>>0]|0;if((i&-64)<<24>>24==-128)do{j=j+1|0;h=h<<6|i&63;i=a[j>>0]|0}while((i&-64)<<24>>24==-128);h=(h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)?65533:h;break}}c[e+20>>2]=1;yc(c[e>>2]|0,46013,-1,1,-1)|0;return}else h=d[o+2>>0]|0;while(0);if(!((n|0)!=0&(m|0)!=0))return;i=(md(n,m,o,h)|0)==0;h=c[e>>2]|0;i=i&1;j=h+8|0;if(!(b[j>>1]&9216)){o=h;c[o>>2]=i;c[o+4>>2]=0;b[j>>1]=4;return}else{Pg(h,i,0);return}}function an(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[b>>2]|0;o=g+4|0;m=(c[o>>2]|0)+45|0;a:do if(!p){r=Sv(m|0,0,-1,-1)|0;n=L()|0;if(n>>>0>0|(n|0)==0&r>>>0>2147483390){g=0;return g|0}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;q=25;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){r=c[14978]|0;n=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&n>>>0<=r>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){g=0;return g|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;r=k}else r=k}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){g=0;return g|0}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<m>>>0:0))){k=p+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];q=p+284|0;c[q>>2]=(c[q>>2]|0)+1;q=25;break a}k=p+296|0;j=c[k>>2]|0;if(!j){j=p+292|0;break}else{c[k>>2]=c[j>>2];q=p+284|0;c[q>>2]=(c[q>>2]|0)+1;q=25;break a}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,m,0)|0;q=25}while(0);if((q|0)==25)if(!j){g=0;return g|0}else r=j;gw(r|0,0,m|0)|0;n=r+44|0;ew(n|0,c[g>>2]|0,c[o>>2]|0)|0;j=a[n>>0]|0;if((a[880+(j&255)>>0]|0)<0){m=j<<24>>24==91?93:j;l=0;j=1;while(1){k=a[n+j>>0]|0;if(k<<24>>24==m<<24>>24){j=j+1|0;k=n+l|0;if((a[n+j>>0]|0)!=m<<24>>24)break;a[k>>0]=m}else a[n+l>>0]=k;l=l+1|0;j=j+1|0}a[k>>0]=0}o=r+12|0;c[o>>2]=n;a[r>>0]=f;while(1)if(!(a[880+(d[h>>0]|0)>>0]&1))break;else h=h+1|0;j=i-h|0;b:do if((j|0)<=0)if(!h)j=0;else{k=j;q=41}else while(1){k=j+-1|0;if(!(a[880+(d[h+k>>0]|0)>>0]&1)){k=j;q=41;break b}if((j|0)>1)j=k;else{q=41;break}}while(0);c:do if((q|0)==41){m=Sv(k|0,((k|0)<0)<<31>>31|0,1,0)|0;n=L()|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))q=51;else{j=0;break c}else{do if(!(n>>>0>0|((n|0)==0?m>>>0>(e[p+276>>1]|0)>>>0:0))){l=p+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break d}l=p+296|0;j=c[l>>2]|0;if(!j){j=p+292|0;break}else{c[l>>2]=c[j>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break d}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;q=51}while(0);if((q|0)==51)j=_d(p,m,n)|0;if(j){ew(j|0,h|0,k|0)|0;a[j+k>>0]=0;k=a[j>>0]|0;if(k<<24>>24){m=0;l=j;do{if(a[880+(k&255)>>0]&1)a[l>>0]=32;m=m+1|0;l=j+m|0;k=a[l>>0]|0}while(k<<24>>24!=0)}}else j=0}while(0);c[r+32>>2]=j;if((d[b+200>>0]|0)<=1){g=r;return g|0}m=c[o>>2]|0;l=c[b>>2]|0;e:do if(!l){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;q=82;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){p=c[14978]|0;i=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&i>>>0<=p>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){g=r;return g|0}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){g=r;return g|0}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];q=l+284|0;c[q>>2]=(c[q>>2]|0)+1;q=82;break e}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];q=l+284|0;c[q>>2]=(c[q>>2]|0)+1;q=82;break e}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(l,16,0)|0;q=82}while(0);if((q|0)==82)if(!j){g=r;return g|0}k=j+4|0;l=k+12|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[j>>2]=m;p=g;q=c[p+4>>2]|0;g=j+4|0;c[g>>2]=c[p>>2];c[g+4>>2]=q;g=b+272|0;c[j+12>>2]=c[g>>2];c[g>>2]=j;g=r;return g|0}function bn(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+64|0;D=H+40|0;E=H+32|0;w=H+24|0;v=H+16|0;n=H+8|0;k=H;x=H+60|0;t=H+56|0;r=H+52|0;F=H+48|0;s=H+44|0;G=c[(c[f>>2]|0)+32>>2]|0;c[x>>2]=0;c[t>>2]=0;c[F>>2]=0;g=c[h>>2]|0;do if(g){i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0){j=c[g+16>>2]|0;break}if(!(i&1))j=Gg(g,1)|0;else j=0}else j=0;while(0);g=c[h+4>>2]|0;do if(g){i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(i&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);A=(j|0)==0?59952:j;u=(g|0)==0?59952:g;z=G+20|0;m=c[z>>2]|0;g=c[G+136>>2]|0;a:do if((m|0)<(g+2|0)){y=G+16|0;l=c[y>>2]|0;b:do if((m|0)>0){k=d[208+(d[u>>0]|0)>>0]|0;h=0;while(1){i=c[l+(h<<4)>>2]|0;q=a[i>>0]|0;g=(d[208+(q&255)>>0]|0)-k|0;if(!(q<<24>>24==0|(g|0)!=0)){j=u;do{i=i+1|0;j=j+1|0;q=a[i>>0]|0;g=(d[208+(q&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(g|0)!=0))}h=h+1|0;if(!g)break;if((h|0)>=(m|0))break b}c[n>>2]=u;i=dd(G,46469,n)|0;c[F>>2]=i;g=0;C=142;break a}while(0);c:do if((l|0)==(G+412|0)){d:do if(c[G+272>>2]|0)if(!(a[G+81>>0]|0))C=34;else{Ra=H;return}else{do if((e[G+276>>1]|0)>=48){i=G+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break d}i=G+296|0;g=c[i>>2]|0;if(!g){g=G+292|0;break}else{c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break d}}else g=G+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;C=34}while(0);if((C|0)==34)g=_d(G,48,0)|0;if(!g){Ra=H;return}else{p=c[y>>2]|0;c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];c[g+16>>2]=c[p+16>>2];c[g+20>>2]=c[p+20>>2];c[g+24>>2]=c[p+24>>2];c[g+28>>2]=c[p+28>>2];p=g;break}}else{j=(m<<4)+16|0;e:do if(!l){if(c[G+272>>2]|0){if(a[G+81>>0]|0){Ra=H;return}}else{do if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<j>>>0:0))){i=G+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break e}i=G+296|0;g=c[i>>2]|0;if(!g){g=G+292|0;break}else{c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break e}}else g=G+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(G,j,0)|0}else{q=l;if((c[G+304>>2]|0)>>>0<=q>>>0?(c[G+308>>2]|0)>>>0>q>>>0:0){if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<j>>>0:0))){p=l;break c}g=Zd(G,l,j,0)|0;break}g=Zd(G,l,j,0)|0}while(0);if(!g){Ra=H;return}else p=g}while(0);c[y>>2]=p;q=c[z>>2]|0;o=p+(q<<4)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[r>>2]=c[G+60>>2];switch(dn(c[(c[G>>2]|0)+16>>2]|0,A,r,s,x,t)|0){case 0:{g=c[r>>2]|256;c[r>>2]=g;k=p+(q<<4)+4|0;g=Pe(c[s>>2]|0,c[x>>2]|0,G,k,0,g)|0;c[z>>2]=(c[z>>2]|0)+1;h=(Eu(u)|0)+1|0;r=G+272|0;f:do if(c[r>>2]|0)if(!(a[G+81>>0]|0))C=76;else i=0;else{do if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<h>>>0:0))){j=G+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];C=G+284|0;c[C>>2]=(c[C>>2]|0)+1;C=77;break f}j=G+296|0;i=c[j>>2]|0;if(!i){i=G+292|0;break}else{c[j>>2]=c[i>>2];C=G+284|0;c[C>>2]=(c[C>>2]|0)+1;C=77;break f}}else i=G+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;C=76}while(0);if((C|0)==76){i=_d(G,h,0)|0;C=77}if((C|0)==77)if(!i)i=0;else ew(i|0,u|0,h|0)|0;c[o>>2]=i;a[G+89>>0]=0;switch(g|0){case 19:{g=dd(G,46499,v)|0;c[F>>2]=g;g=1;C=98;break}case 0:{g=en(G,c[k>>2]|0)|0;c[p+(q<<4)+12>>2]=g;if(g)if((a[g+76>>0]|0)!=0?(a[g+77>>0]|0)!=(a[G+78>>0]|0):0){g=dd(G,34948,w)|0;c[F>>2]=g;g=1}else g=0;else g=7;j=c[k>>2]|0;k=c[j>>2]|0;h=c[j+4>>2]|0;l=h+4|0;c[l>>2]=k;m=c[h>>2]|0;i=a[G+83>>0]|0;n=(a[m+12>>0]|0)==0;do if(n){w=c[m+216>>2]|0;if(w|0?(a[w+43>>0]|0)==2:0)break;a[m+4>>0]=i}while(0);i=c[(c[y>>2]|0)+4>>2]|0;if(!i)i=0;else{w=c[i+4>>2]|0;c[w+4>>2]=c[i>>2];i=(e[w+22>>1]|0)>>>2&3}if(j|0){c[l>>2]=k;w=h+22|0;b[w>>1]=i<<2|b[w>>1]&-13&65535}h=c[G+32>>2]|0;c[l>>2]=k;j=n^1;a[m+7>>0]=j&1;a[m+8>>0]=n&1;a[m+9>>0]=0;do if(n){i=m+10|0;if(!(h&8)){a[i>>0]=2;i=2;break}else{a[i>>0]=3;i=3;break}}else{a[m+10>>0]=0;i=0}while(0);w=(i<<2|(n?i:0))&255;a[m+11>>0]=(h&16|0)==0|j?w:w|12;w=m+20|0;v=d[w>>0]|0;a[w>>0]=(h&32|0)==0?v|1:v&254;a[p+(q<<4)+8>>0]=3;if(!g)g=(c[o>>2]|0)==0?7:0;break}default:C=98}if((C|0)==98)a[p+(q<<4)+8>>0]=3;i=c[x>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{x=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);g:do if(!g){g=c[z>>2]|0;h=c[y>>2]|0;if((g|0)>0){i=0;do{j=c[h+(i<<4)+4>>2]|0;if(j|0)c[(c[j+4>>2]|0)+4>>2]=c[j>>2];i=i+1|0}while((i|0)!=(g|0))}a[G+164>>0]=0;j=G+24|0;k=c[j>>2]|0;c[j>>2]=k&-17;k=(k&1|0)==0;x=c[h+12>>2]|0;a[G+78>>0]=a[x+77>>0]|0;if(!(b[x+78>>1]&1)){g=eh(G,0,F,0)|0;if(g|0)break;g=c[z>>2]|0}if((g|0)>1)do{i=g;g=g+-1|0;if((b[(c[(c[y>>2]|0)+(g<<4)+12>>2]|0)+78>>1]&1)==0?(B=eh(G,g,F,0)|0,B|0):0){g=B;break g}}while((i|0)>2);if(!k){Ra=H;return}c[j>>2]=c[j>>2]&-2;Ra=H;return}while(0);i=(c[z>>2]|0)+-1|0;j=c[(c[y>>2]|0)+(i<<4)+4>>2]|0;if(j|0){ug(j);B=c[y>>2]|0;c[B+(i<<4)+4>>2]=0;c[B+(i<<4)+12>>2]=0}$b(G);c[z>>2]=i;if((g|0)<3082)switch(g|0){case 7:break;default:C=140}else switch(g|0){case 3082:break;default:C=140}if((C|0)==140){i=c[F>>2]|0;if(i|0){C=143;break a}c[D>>2]=A;i=dd(G,46528,D)|0;c[F>>2]=i;C=142;break a}i=G+81|0;if((a[i>>0]|0)==0?(a[G+82>>0]|0)==0:0){a[i>>0]=1;if((c[G+180>>2]|0)>0)c[G+264>>2]=1;c[r>>2]=(c[r>>2]|0)+1;i=c[G+236>>2]|0;if(i|0)c[i+12>>2]=7}i=c[F>>2]|0;do if(i|0){if(c[G+480>>2]|0){Xd(G,i);break}D=i;if((c[G+304>>2]|0)>>>0<=D>>>0?(c[G+308>>2]|0)>>>0>D>>>0:0){D=G+300|0;c[i>>2]=c[D>>2];c[D>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{D=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=dd(G,34831,E)|0;c[F>>2]=i;C=142;break a}case 7:{g=G+81|0;if((a[g>>0]|0)==0?(a[G+82>>0]|0)==0:0){a[g>>0]=1;if((c[G+180>>2]|0)>0)c[G+264>>2]=1;g=G+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[G+236>>2]|0;if(g|0)c[g+12>>2]=7}break}default:{}}g=c[t>>2]|0;c[f+20>>2]=1;yc(c[f>>2]|0,g,-1,1,-1)|0;if(!g){Ra=H;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=H;return}else{f=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=H;return}}else{c[k>>2]=g;i=dd(G,46432,k)|0;c[F>>2]=i;g=0;C=142}while(0);if((C|0)==142)if(i)C=143;do if((C|0)==143){c[f+20>>2]=1;yc(c[f>>2]|0,i,-1,1,-1)|0;i=c[F>>2]|0;if(i){if(G|0){if(c[G+480>>2]|0){Xd(G,i);break}F=i;if((c[G+304>>2]|0)>>>0<=F>>>0?(c[G+308>>2]|0)>>>0>F>>>0:0){G=G+300|0;c[i>>2]=c[G>>2];c[G>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{G=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);if(!g){Ra=H;return}c[f+20>>2]=g;i=c[f>>2]|0;if(!(b[i+8>>1]&1)){Ra=H;return}switch(g|0){case 516:{g=50738;break}case 100:{g=50760;break}case 101:{g=50782;break}default:{g=g&255;if(g>>>0<29?(520028155>>>g&1|0)!=0:0)g=c[22960+(g<<2)>>2]|0;else g=50724}}yc(i,g,-1,1,0)|0;Ra=H;return}function cn(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+112|0;x=J+32|0;w=J+24|0;t=J+16|0;r=J+8|0;n=J;s=J+72|0;u=J+40|0;I=c[f>>2]|0;a:do if(!(c[f+36>>2]|0)){z=u+4|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[u>>2]=f;z=(j|0)==0;m=f;do if(z)m=0;else{if((a[j>>0]|0)==59){a[j>>0]=110;m=0;break}p=u+24|0;b[p>>1]=0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;o=j+24|0;m=f+208|0;A=(c[m>>2]|0)+(c[o>>2]|0)|0;c[m>>2]=A;m=c[I+120>>2]|0;if((m|0)>=(A|0)){_j(s,j)|0;n=c[s>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[o>>2]|0);m=b[p>>1]|0;A=j+4|0;c[A>>2]=c[A>>2]|m&-32752&65535;if((c[u+20>>2]|0)<=0)if((c[n+36>>2]|0)<1)break;else{F=121;break a}}else{c[n>>2]=m;cd(f,41637,n)}F=121;break a}while(0);A=(k|0)==0;do if(!A){if((a[k>>0]|0)==59){a[k>>0]=110;break}q=u+24|0;o=m&65535;b[q>>1]=o&28655;m=c[u>>2]|0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;p=k+24|0;n=m+208|0;y=(c[n>>2]|0)+(c[p>>2]|0)|0;c[n>>2]=y;n=c[(c[m>>2]|0)+120>>2]|0;if((n|0)>=(y|0)){_j(s,k)|0;n=c[s>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);m=b[q>>1]|0;y=k+4|0;c[y>>2]=c[y>>2]|m&-32752&65535;m=(o&36880|m&65535)&65535;b[q>>1]=m;if((c[u+20>>2]|0)<=0)if((c[n+36>>2]|0)<1)break;else{F=120;break a}}else{c[r>>2]=n;cd(m,41637,r)}F=120;break a}while(0);y=(l|0)==0;do if(!y){if((a[l>>0]|0)==59){a[l>>0]=110;break}q=u+24|0;p=m&65535;b[q>>1]=p&28655;m=c[u>>2]|0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;o=l+24|0;n=m+208|0;r=(c[n>>2]|0)+(c[o>>2]|0)|0;c[n>>2]=r;n=c[(c[m>>2]|0)+120>>2]|0;if((n|0)>=(r|0)){_j(s,l)|0;m=c[s>>2]|0;t=m+208|0;c[t>>2]=(c[t>>2]|0)-(c[o>>2]|0);t=b[q>>1]|0;s=l+4|0;c[s>>2]=c[s>>2]|t&-32752&65535;b[q>>1]=p&36880|t&65535;if((c[u+20>>2]|0)<=0)if((c[m+36>>2]|0)<1)break;else{F=120;break a}}else{c[t>>2]=n;cd(m,41637,t)}F=120;break a}while(0);do if(i|0){if((a[i>>0]|0)==110)m=c[i+8>>2]|0;else m=0;n=c[f>>2]|0;if(((a[n+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(v=c[n+312>>2]|0,v|0):0){m=$a[v&127](c[n+316>>2]|0,g,m,0,0,c[f+240>>2]|0)|0;if((m|0)==1){cd(f,39216,w);c[f+12>>2]=23;F=120;break a}if((m|2|0)==2)if(!m)break;else{F=120;break a}else{cd(f,39231,x);c[f+12>>2]=1;F=120;break a}}}while(0);s=f+8|0;m=c[s>>2]|0;b:do if(!m){p=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[p+76>>1]&8)==0:0)a[f+23>>0]=1;c:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))F=51;else{t=0;break b}else{do if((e[p+276>>1]|0)>=224){m=p+300|0;n=c[m>>2]|0;if(n|0){c[m>>2]=c[n>>2];x=p+284|0;c[x>>2]=(c[x>>2]|0)+1;break c}m=p+296|0;n=c[m>>2]|0;if(!n){m=p+292|0;break}else{c[m>>2]=c[n>>2];x=p+284|0;c[x>>2]=(c[x>>2]|0)+1;break c}}else m=p+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;F=51}while(0);if((F|0)==51)n=_d(p,224,0)|0;if(!n)t=0;else{m=n+104|0;o=m+120|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(o|0));c[n>>2]=p;m=p+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=n;c[n+8>>2]=o;c[n+4>>2]=0;c[m>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[s>>2]=n;Di(n,61,0,1,0)|0;t=n}}else t=m;while(0);n=f+32|0;o=c[n>>2]|0;m=f+28|0;p=c[m>>2]|0;if((p|0)<4){m=f+44|0;n=c[m>>2]|0;r=n+1|0;n=n+4|0}else{c[n>>2]=o+4;r=o;n=p+-4|0}c[m>>2]=n;do if(!z){if((a[j>>0]|0)!=-88){C=Jj(f,j,r)|0;F=66;break}m=c[s>>2]|0;n=c[j+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;z=c[m+104>>2]|0;a[z+(p*20|0)>>0]=78;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=n;c[z+(p*20|0)+8>>2]=r;c[z+(p*20|0)+12>>2]=0;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,r,0)|0;break}}else{C=Jj(f,0,r)|0;F=66}while(0);do if(((F|0)==66?(C|0)!=(r|0):0)?(B=c[s>>2]|0,B|0):0){m=B+108|0;n=c[m>>2]|0;if((c[B+112>>2]|0)>(n|0)){c[m>>2]=n+1;B=c[B+104>>2]|0;a[B+(n*20|0)>>0]=79;b[B+(n*20|0)+2>>1]=0;c[B+(n*20|0)+4>>2]=C;c[B+(n*20|0)+8>>2]=r;c[B+(n*20|0)+12>>2]=0;c[B+(n*20|0)+16>>2]=0;a[B+(n*20|0)+1>>0]=0;break}else{Di(B,79,C,r,0)|0;break}}while(0);q=r+1|0;do if(!A){if((a[k>>0]|0)!=-88){E=Jj(f,k,q)|0;F=78;break}m=c[s>>2]|0;n=c[k+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;C=c[m+104>>2]|0;a[C+(p*20|0)>>0]=78;b[C+(p*20|0)+2>>1]=0;c[C+(p*20|0)+4>>2]=n;c[C+(p*20|0)+8>>2]=q;c[C+(p*20|0)+12>>2]=0;c[C+(p*20|0)+16>>2]=0;a[C+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,q,0)|0;break}}else{E=Jj(f,0,q)|0;F=78}while(0);do if(((F|0)==78?(E|0)!=(q|0):0)?(D=c[s>>2]|0,D|0):0){m=D+108|0;n=c[m>>2]|0;if((c[D+112>>2]|0)>(n|0)){c[m>>2]=n+1;D=c[D+104>>2]|0;a[D+(n*20|0)>>0]=79;b[D+(n*20|0)+2>>1]=0;c[D+(n*20|0)+4>>2]=E;c[D+(n*20|0)+8>>2]=q;c[D+(n*20|0)+12>>2]=0;c[D+(n*20|0)+16>>2]=0;a[D+(n*20|0)+1>>0]=0;break}else{Di(D,79,E,q,0)|0;break}}while(0);q=r+2|0;do if(!y){if((a[l>>0]|0)!=-88){H=Jj(f,l,q)|0;F=90;break}m=c[s>>2]|0;n=c[l+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;f=c[m+104>>2]|0;a[f+(p*20|0)>>0]=78;b[f+(p*20|0)+2>>1]=0;c[f+(p*20|0)+4>>2]=n;c[f+(p*20|0)+8>>2]=q;c[f+(p*20|0)+12>>2]=0;c[f+(p*20|0)+16>>2]=0;a[f+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,q,0)|0;break}}else{H=Jj(f,0,q)|0;F=90}while(0);do if(((F|0)==90?(H|0)!=(q|0):0)?(G=c[s>>2]|0,G|0):0){m=G+108|0;n=c[m>>2]|0;if((c[G+112>>2]|0)>(n|0)){c[m>>2]=n+1;G=c[G+104>>2]|0;a[G+(n*20|0)>>0]=79;b[G+(n*20|0)+2>>1]=0;c[G+(n*20|0)+4>>2]=H;c[G+(n*20|0)+8>>2]=q;c[G+(n*20|0)+12>>2]=0;c[G+(n*20|0)+16>>2]=0;a[G+(n*20|0)+1>>0]=0;break}else{Di(G,79,H,q,0)|0;break}}while(0);if(t){n=r+3|0;o=n-(a[h>>0]|0)|0;p=t+108|0;m=c[p>>2]|0;q=t+112|0;if((c[q>>2]|0)>(m|0)){c[p>>2]=m+1;H=c[t+104>>2]|0;a[H+(m*20|0)>>0]=63;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=0;c[H+(m*20|0)+8>>2]=o;c[H+(m*20|0)+12>>2]=n;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else m=Di(t,63,0,o,n)|0;n=c[t>>2]|0;d:do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[p>>2]|0)+-1|0;n=c[t+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=h;a[o>>0]=-8;break}else{Ei(t,n+(m*20|0)|0,h,-8);break}}else if(c[h+4>>2]&16|0){do if(n|0){if(c[n+480>>2]|0){Xd(n,h);break d}m=h;if((c[n+304>>2]|0)>>>0<=m>>>0){if((c[n+308>>2]|0)>>>0<=m>>>0)break;H=n+300|0;c[h>>2]=c[H>>2];c[H>>2]=h;break d}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{H=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);n=c[p>>2]|0;if((n|0)>0)b[(c[t+104>>2]|0)+((n+-1|0)*20|0)+2>>1]=d[h>>0]|0;m=(g|0)==24&1;if((c[q>>2]|0)>(n|0)){c[p>>2]=n+1;F=c[t+104>>2]|0;a[F+(n*20|0)>>0]=-98;b[F+(n*20|0)+2>>1]=0;c[F+(n*20|0)+4>>2]=m;c[F+(n*20|0)+8>>2]=0;c[F+(n*20|0)+12>>2]=0;c[F+(n*20|0)+16>>2]=0;a[F+(n*20|0)+1>>0]=0;F=120;break}else{Di(t,158,m,0,0)|0;F=120;break}}else F=120}else F=120;while(0);if((F|0)==120?j|0:0)F=121;if((F|0)==121)ni(I,j);if(k|0)ni(I,k);if(!l){Ra=J;return}ni(I,l);Ra=J;return}function dn(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+32|0;v=w+24|0;t=w+16|0;s=w+8|0;n=w;j=c[e>>2]|0;a:do if(d){i=(Eu(d)|0)&1073741823;if(i>>>0>4&(c[7327]|j&64|0)!=0?(Lu(d,46556,5)|0)==0:0){j=j|64;k=0;l=i+2|0;m=0;do{l=Sv(l|0,m|0,(a[d+k>>0]|0)==38|0,0)|0;m=L()|0;k=k+1|0}while((k|0)!=(i|0));k=pb(l,m)|0;if(!k){g=7;Ra=w;return g|0}b:do if((a[d+5>>0]|0)==47?(a[d+6>>0]|0)==47:0){l=7;c:while(1){switch(a[d+l>>0]|0){case 0:case 47:break c;default:{}}l=l+1|0}switch(l&2147483647|0){case 7:{l=7;break b}case 16:{i=d+7|0;if(!(Lu(46562,i,9)|0)){l=16;break b}break}default:i=d+7|0}c[n>>2]=l+-7;c[n+4>>2]=i;l=k;i=1;k=Bb(46572,n)|0;u=86;break a}else l=5;while(0);i=0;n=0;d:while(1){p=k+(i+-1)|0;e:while(1){m=a[d+l>>0]|0;switch(m<<24>>24){case 0:case 35:break d;default:{}}o=l+1|0;f:do if((m<<24>>24==37?(q=a[d+o>>0]|0,(a[880+(q&255)>>0]&8)!=0):0)?(r=a[d+(l+2)>>0]|0,(a[880+(r&255)>>0]&8)!=0):0){m=q<<24>>24;l=l+3|0;o=r<<24>>24;m=(0-(o>>>6&1)&9)+o&15|(0-(m>>>6&1)&9)+m<<4&240;if(m|0){u=37;break e}switch(n|0){case 0:while(1){switch(a[d+l>>0]|0){case 63:case 35:case 0:break f;default:{}}l=l+1|0}case 1:while(1){switch(a[d+l>>0]|0){case 38:case 61:case 35:case 0:break f;default:{}}l=l+1|0}case 2:while(1){switch(a[d+l>>0]|0){case 38:case 35:case 0:break f;default:{}}l=l+1|0}default:while(1){switch(a[d+l>>0]|0){case 35:case 0:break f;default:{}}l=l+1|0}}}else u=38;while(0);g:do if((u|0)==38){u=0;switch(n|0){case 0:{u=47;break e}case 2:{u=48;break e}case 1:break;default:{l=o;break e}}switch(m<<24>>24){case 38:case 61:break;default:{n=1;l=o;break e}}if(a[p>>0]|0){u=45;break e}l=o;while(1){switch(a[d+l>>0]|0){case 35:case 0:break g;default:{}}if((a[d+(l+-1)>>0]|0)==38)break g;l=l+1|0}}while(0)}if((u|0)==37){u=0;m=m&255}else if((u|0)==45){u=0;if(m<<24>>24==38){a[k+i>>0]=0;m=0;i=i+1|0;n=1;l=o}else{m=0;n=2;l=o}}else if((u|0)==47){u=0;if(m<<24>>24==63)u=49;else{n=0;l=o}}else if((u|0)==48){u=0;if(m<<24>>24==38)u=49;else{n=2;l=o}}if((u|0)==49){u=0;m=0;n=1;l=o}a[k+i>>0]=m;i=i+1|0}if((n|0)==1){a[k+i>>0]=0;i=i+1|0}a[k+i>>0]=0;a[k+(i+1)>>0]=0;i=k+(((Eu(k)|0)&1073741823)+1)|0;if(a[i>>0]|0){r=b;b=i;h:while(1){i:do if(!b){i=1;l=(Eu(1)|0)&1073741823;u=71}else{d=Eu(b)|0;i=b+((d&1073741823)+1)|0;l=(Eu(i)|0)&1073741823;switch(d&1073741823|0){case 3:if(!(Lu(46600,b,3)|0)){m=i;break i}else{u=71;break i}case 5:{if(!(Lu(46604,b,5)|0)){o=393216;p=-393217;q=46604;n=18576}else{u=71;break i}break}case 4:{if(!(Lu(58212,b,4)|0)){o=j&135;p=-136;q=31701;n=18608}else{u=71;break i}break}default:{u=71;break i}}b=c[n>>2]|0;if(!b){u=67;break h}m=0;while(1){if((l|0)==((Eu(b)|0)&1073741823|0)?(Lu(i,b,l)|0)==0:0)break;m=m+1|0;b=c[n+(m<<3)>>2]|0;if(!b){u=67;break h}}b=c[n+(m<<3)+4>>2]|0;if(!b){u=67;break h}if((b&-129|0)>(o|0)){u=69;break h}j=b|p&j;u=71}while(0);if((u|0)==71){u=0;m=r}b=i+(l+1)|0;if(!(a[b>>0]|0)){b=m;u=77;break a}else r=m}if((u|0)==67){c[s>>2]=q;c[s+4>>2]=i;l=k;i=1;k=Bb(46635,s)|0;u=86;break}else if((u|0)==69){c[t>>2]=q;c[t+4>>2]=i;l=k;i=3;k=Bb(46655,t)|0;u=86;break}}else u=77}else u=73}else{i=0;u=73}while(0);if((u|0)==73){k=pb(i+2|0,0)|0;if(!k){g=7;Ra=w;return g|0}if(i|0)ew(k|0,d|0,i|0)|0;a[k+i>>0]=0;a[k+(i+1)>>0]=0;j=j&-65;u=77}j:do if((u|0)==77){k:do if(!(mb()|0)){i=c[14770]|0;l=(i|0)==0;if((b|0)==0|l){c[f>>2]=i;if(l)break;else{i=0;break j}}while(1){if(!(Bu(b,c[i+16>>2]|0)|0))break;i=c[i+12>>2]|0;if(!i){u=83;break k}}c[f>>2]=i;i=0;break j}else u=83;while(0);if((u|0)==83)c[f>>2]=0;c[v>>2]=b;l=k;i=1;k=Bb(46679,v)|0;u=86}while(0);do if((u|0)==86){c[h>>2]=k;if(l)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);k=0;break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);k=0;break}else k=0}while(0);c[e>>2]=j;c[g>>2]=k;g=i;Ra=w;return g|0}function en(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;do if(d){i=c[d+4>>2]|0;c[i+4>>2]=c[d>>2];h=i+48|0;d=c[h>>2]|0;if(!d){if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](84)|0;if(!d)g=26;else g=27}else{d=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){g=c[14978]|0;f=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&f>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](d)|0;if(d){e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0){c[14987]=e;g=27}else g=27}else g=26}if((g|0)==26){c[h>>2]=0;c[i+52>>2]=95;break}else if((g|0)==27){f=d;g=f+84|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));c[h>>2]=d;c[i+52>>2]=95;g=34;break}}else g=34}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](84)|0;if(!d)break}else{d=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){i=c[14978]|0;h=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e)break;d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0){c[14987]=d;d=e}else d=e}f=d;g=f+84|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));g=34}while(0);if((g|0)==34){if(a[d+76>>0]|0){b=d;return b|0}e=d+77|0;f=d+8|0;g=f+64|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[e>>0]=1;b=d;return b|0}d=b+81|0;if(a[d>>0]|0){b=0;return b|0}if(a[b+82>>0]|0){b=0;return b|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){b=0;return b|0}c[d+12>>2]=7;b=0;return b|0}function fn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=Ra;Ra=Ra+160|0;r=w+144|0;q=w+136|0;p=w+128|0;o=w;f=c[g>>2]|0;do if(f){g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0){f=c[f+16>>2]|0;break}if(!(g&1))f=Gg(f,1)|0;else f=0}else f=0;while(0);v=c[(c[e>>2]|0)+32>>2]|0;n=(f|0)==0?59952:f;t=v+20|0;l=c[t>>2]|0;a:do if((l|0)>0){u=v+16|0;m=c[u>>2]|0;f=0;while(1){j=m+(f<<4)+4|0;k=c[j>>2]|0;if(k|0){h=c[m+(f<<4)>>2]|0;i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=n;do{h=h+1|0;i=i+1|0;x=a[h>>0]|0;g=(d[208+(x&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(g|0)!=0))}if(!g)break}f=f+1|0;if((f|0)>=(l|0)){s=15;break a}}if(f>>>0<2){c[q>>2]=n;Cb(128,o,46730,q)|0;break}if((a[k+8>>0]|0)==0?(c[k+16>>2]|0)==0:0){ug(k);c[j>>2]=0;c[m+(f<<4)+12>>2]=0;if((c[t>>2]|0)>2){j=v+480|0;k=v+304|0;l=v+308|0;m=v+300|0;i=2;f=2;do{g=c[u>>2]|0;h=g+(i<<4)|0;if(!(c[g+(i<<4)+4>>2]|0)){g=c[h>>2]|0;do if(g|0){if(c[j>>2]|0){Xd(v,g);break}x=g;if((c[k>>2]|0)>>>0<=x>>>0?(c[l>>2]|0)>>>0>x>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[h>>2]=0}else{if((f|0)<(i|0)){x=g+(f<<4)|0;c[x>>2]=c[h>>2];c[x+4>>2]=c[h+4>>2];c[x+8>>2]=c[h+8>>2];c[x+12>>2]=c[h+12>>2]}f=f+1|0}i=i+1|0}while((i|0)<(c[t>>2]|0));c[t>>2]=f;if((f|0)>=3){Ra=w;return}}else c[t>>2]=2;f=c[u>>2]|0;g=v+412|0;if((f|0)==(g|0)){Ra=w;return};c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];c[g+16>>2]=c[f+16>>2];c[g+20>>2]=c[f+20>>2];c[g+24>>2]=c[f+24>>2];c[g+28>>2]=c[f+28>>2];do if(f|0){if(c[v+480>>2]|0){Xd(v,f);break}x=f;if((c[v+304>>2]|0)>>>0<=x>>>0?(c[v+308>>2]|0)>>>0>x>>>0:0){x=v+300|0;c[f>>2]=c[x>>2];c[x>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[u>>2]=g;Ra=w;return}c[r>>2]=n;Cb(128,o,46756,r)|0}else s=15;while(0);if((s|0)==15){c[p>>2]=n;Cb(128,o,46709,p)|0}c[e+20>>2]=1;yc(c[e>>2]|0,o,-1,1,-1)|0;Ra=w;return}function gn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(c[f+56>>2]|0)return;h=c[f+8>>2]|0;if(!h)return;p=f+72|0;o=e+116|0;if(!g){do{i=c[p>>2]|0;if(!i)f=-1e6;else{j=c[(c[e>>2]|0)+16>>2]|0;f=0;while(1)if((c[j+(f<<4)+12>>2]|0)==(i|0))break;else f=f+1|0}l=c[o>>2]|0;l=(l|0)==0?e:l;i=l+84|0;j=c[i>>2]|0;k=1<<f;if((j&k|0)==0?(c[i>>2]=j|k,(f|0)==1):0)Oe(l)|0;g=l+80|0;c[g>>2]=c[g>>2]|k;bl(e,h,-1);h=c[h+20>>2]|0}while((h|0)!=0);return}do{f=b[h+52>>1]|0;a:do if(f<<16>>16){m=c[h+4>>2]|0;n=h+32|0;l=f&65535;k=0;while(1){if((b[m+(k<<1)>>1]|0)>-1){i=c[(c[n>>2]|0)+(k<<2)>>2]|0;j=a[i>>0]|0;f=(d[208+(j&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(j<<24>>24==0|(f|0)!=0)){j=g;do{i=i+1|0;j=j+1|0;q=a[i>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break}k=k+1|0;if(k>>>0>=l>>>0)break a}i=c[p>>2]|0;if(!i)f=-1e6;else{j=c[(c[e>>2]|0)+16>>2]|0;f=0;while(1)if((c[j+(f<<4)+12>>2]|0)==(i|0))break;else f=f+1|0}l=c[o>>2]|0;l=(l|0)==0?e:l;i=l+84|0;j=c[i>>2]|0;k=1<<f;if((j&k|0)==0?(c[i>>2]=j|k,(f|0)==1):0)Oe(l)|0;q=l+80|0;c[q>>2]=c[q>>2]|k;bl(e,h,-1)}while(0);h=c[h+20>>2]|0}while((h|0)!=0);return}function hn(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+96|0;t=A+64|0;r=A+48|0;q=A+32|0;p=A+16|0;o=A;y=A+80|0;z=A+92|0;x=c[d>>2]|0;m=d+8|0;j=c[m>>2]|0;do if(!j){if((c[d+116>>2]|0)==0?(b[x+76>>1]&8)==0:0)a[d+23>>0]=1;a:do if(c[x+272>>2]|0){if(!(a[x+81>>0]|0))l=15}else{do if((e[x+276>>1]|0)>=224){j=x+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=16;break a}j=x+296|0;k=c[j>>2]|0;if(!k){j=x+292|0;break}else{c[j>>2]=c[k>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=16;break a}}else j=x+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;l=15}while(0);if((l|0)==15){k=_d(x,224,0)|0;l=16}if((l|0)==16?k|0:0){j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=x;j=x+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=d;c[m>>2]=k;Di(k,61,0,1,0)|0;u=k;break}Ra=A;return}else u=j;while(0);n=(c[x+16>>2]|0)+(f<<4)|0;j=d+92|0;v=u+108|0;s=u+112|0;w=u+104|0;k=c[n>>2]|0;l=Sd(x,35174,k)|0;m=(l|0)==0;do if(!h){do if(!m){k=c[l+28>>2]|0;c[y>>2]=k;a[z>>0]=0;Hj(d,f,k,1,35174);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;l=c[w>>2]|0;a[l+(j*20|0)>>0]=-119;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=f;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0;l=0;break}else{Di(u,137,k,f,0)|0;l=0;break}}else{c[o>>2]=k;c[o+4>>2]=35174;c[o+8>>2]=46824;Ak(d,46863,o);k=c[j>>2]|0;c[y>>2]=k;a[z>>0]=16;l=16}while(0);j=Sd(x,46837,c[n>>2]|0)|0;do if(j|0){j=c[j+28>>2]|0;c[y+4>>2]=j;a[z+1>>0]=0;Hj(d,f,j,1,46837);m=c[v>>2]|0;if((c[s>>2]|0)>(m|0)){c[v>>2]=m+1;t=c[w>>2]|0;a[t+(m*20|0)>>0]=-119;b[t+(m*20|0)+2>>1]=0;c[t+(m*20|0)+4>>2]=j;c[t+(m*20|0)+8>>2]=f;c[t+(m*20|0)+12>>2]=0;c[t+(m*20|0)+16>>2]=0;a[t+(m*20|0)+1>>0]=0;break}else{Di(u,137,j,f,0)|0;break}}while(0);j=Sd(x,46850,c[n>>2]|0)|0;if(j){m=c[j+28>>2]|0;c[y+8>>2]=m;a[z+2>>0]=0;Hj(d,f,m,1,46850);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;z=c[w>>2]|0;a[z+(j*20|0)>>0]=-119;b[z+(j*20|0)+2>>1]=0;c[z+(j*20|0)+4>>2]=m;c[z+(j*20|0)+8>>2]=f;c[z+(j*20|0)+12>>2]=0;c[z+(j*20|0)+16>>2]=0;a[z+(j*20|0)+1>>0]=0;break}else{Di(u,137,m,f,0)|0;break}}}else{if(m){c[p>>2]=k;c[p+4>>2]=35174;c[p+8>>2]=46824;Ak(d,46863,p);k=c[j>>2]|0;c[y>>2]=k;a[z>>0]=16;l=16}else{k=c[l+28>>2]|0;c[y>>2]=k;a[z>>0]=0;Hj(d,f,k,1,35174);c[q>>2]=c[n>>2];c[q+4>>2]=35174;c[q+8>>2]=i;c[q+12>>2]=h;Ak(d,42751,q);l=0}j=c[n>>2]|0;m=Sd(x,46837,j)|0;if(m){j=c[m+28>>2]|0;c[y+4>>2]=j;a[z+1>>0]=0;Hj(d,f,j,1,46837);c[r>>2]=c[n>>2];c[r+4>>2]=46837;c[r+8>>2]=i;c[r+12>>2]=h;Ak(d,42751,r);j=c[n>>2]|0}j=Sd(x,46850,j)|0;if(j){x=c[j+28>>2]|0;c[y+8>>2]=x;a[z+2>>0]=0;Hj(d,f,x,1,46850);c[t>>2]=c[n>>2];c[t+4>>2]=46850;c[t+8>>2]=i;c[t+12>>2]=h;Ak(d,42751,t)}}while(0);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;z=c[w>>2]|0;a[z+(j*20|0)>>0]=109;b[z+(j*20|0)+2>>1]=0;c[z+(j*20|0)+4>>2]=g;c[z+(j*20|0)+8>>2]=k;c[z+(j*20|0)+12>>2]=f;c[z+(j*20|0)+16>>2]=0;a[z+(j*20|0)+1>>0]=0}else j=Di(u,109,g,k,f)|0;if(!(a[(c[u>>2]|0)+81>>0]|0)){g=c[w>>2]|0;a[g+(j*20|0)+1>>0]=-3;c[g+(j*20|0)+16>>2]=3}j=c[v>>2]|0;if((j|0)<=0){Ra=A;return}b[(c[w>>2]|0)+((j+-1|0)*20|0)+2>>1]=l&255;Ra=A;return}function jn(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=Ra;Ra=Ra+16|0;t=fa+8|0;s=fa;Z=c[f>>2]|0;_=j+1|0;$=j+2|0;ea=j+3|0;da=j+4|0;ca=j+5|0;ba=j+6|0;W=j+7|0;X=f+44|0;Y=c[X>>2]|0;c[X>>2]=(Y|0)>(W|0)?Y:W;Y=f+8|0;l=c[Y>>2]|0;if(!l){if((c[f+116>>2]|0)==0?(b[Z+76>>1]&8)==0:0)a[f+23>>0]=1;a:do if(c[Z+272>>2]|0)if(!(a[Z+81>>0]|0))V=15;else{Ra=fa;return}else{do if((e[Z+276>>1]|0)>=224){l=Z+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];aa=Z+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break a}l=Z+296|0;m=c[l>>2]|0;if(!m){l=Z+292|0;break}else{c[l>>2]=c[m>>2];aa=Z+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break a}}else l=Z+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;V=15}while(0);if((V|0)==15)m=_d(Z,224,0)|0;if(!m){Ra=fa;return}o=m+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[m>>2]=Z;l=Z+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[Y>>2]=m;Di(m,61,0,1,0)|0;aa=m}else aa=l;if((g|0)==0|(aa|0)==0){Ra=fa;return}q=g+28|0;m=c[q>>2]|0;if(!m){Ra=fa;return}l=c[g>>2]|0;if(!(md(46886,l,31415,92)|0)){Ra=fa;return}o=c[g+72>>2]|0;p=c[Z+16>>2]|0;if(!o)n=-1e6;else{n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0))break;else n=n+1|0}o=c[p+(n<<4)>>2]|0;p=c[f>>2]|0;do if(((a[p+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(r=c[p+312>>2]|0,(r|0)!=0):0){l=$a[r&127](c[p+316>>2]|0,28,l,0,o,c[f+240>>2]|0)|0;if((l|0)==1){cd(f,39216,s);c[f+12>>2]=23;Ra=fa;return}if((l|2|0)!=2){cd(f,39231,t);c[f+12>>2]=1;Ra=fa;return}if(!l){m=c[q>>2]|0;l=c[g>>2]|0;break}else{Ra=fa;return}}while(0);Hj(f,n,m,0,l);S=k+1|0;T=k+2|0;m=f+40|0;l=c[m>>2]|0;c[m>>2]=(l|0)>(T|0)?l:T;Gj(f,k,n,g,108);m=c[g>>2]|0;T=aa+108|0;l=c[T>>2]|0;U=aa+112|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;R=c[aa+104>>2]|0;a[R+(l*20|0)>>0]=110;b[R+(l*20|0)+2>>1]=0;c[R+(l*20|0)+4>>2]=0;c[R+(l*20|0)+8>>2]=da;c[R+(l*20|0)+12>>2]=0;c[R+(l*20|0)+16>>2]=0;a[R+(l*20|0)+1>>0]=0}else l=Di(aa,110,0,da,0)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[T>>2]|0)+-1|0;Ei(aa,(c[aa+104>>2]|0)+(l*20|0)|0,m,0)}m=c[g+8>>2]|0;R=(h|0)==0;if(!m)l=1;else{B=g+36|0;C=aa+104|0;D=f+56|0;E=Z+272|0;F=Z+276|0;G=Z+81|0;H=Z+288|0;I=Z+300|0;J=Z+296|0;K=Z+284|0;L=Z+292|0;M=aa+12|0;N=(Z|0)==0;O=Z+480|0;P=Z+304|0;Q=Z+308|0;l=1;do{b:do if(R|(m|0)==(h|0)){l=(c[m+36>>2]|0)==0?0:l;o=m+55|0;o=d[o>>0]|d[o+1>>0]<<8;if(!((c[B>>2]&32|0)!=0&(o&3)==2)){q=e[m+52>>1]|0;p=c[m>>2]|0;if(!(o&8))t=q;else t=e[m+50>>1]|0}else{q=e[m+50>>1]|0;t=q;p=c[g>>2]|0}A=t+-1|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=110;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=0;c[z+(o*20|0)+8>>2]=ca;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else o=Di(aa,110,0,ca,0)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(aa,(c[C>>2]|0)+(o*20|0)|0,p,0)}p=c[X>>2]|0;o=A+W|0;c[X>>2]=(p|0)>(o|0)?p:o;o=c[m+44>>2]|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;z=c[C>>2]|0;a[z+(p*20|0)>>0]=108;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=S;c[z+(p*20|0)+8>>2]=o;c[z+(p*20|0)+12>>2]=n;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0}else Di(aa,108,S,o,n)|0;o=c[Y>>2]|0;r=Ij(f,m)|0;c:do if(r|0){p=c[o>>2]|0;if(!(a[p+81>>0]|0)){y=c[o+104>>2]|0;z=(c[o+108>>2]|0)+-1|0;a[y+(z*20|0)+1>>0]=-9;c[y+(z*20|0)+16>>2]=r;break}if(c[p+480>>2]|0)break;z=(c[r>>2]|0)+-1|0;c[r>>2]=z;if(z|0)break;o=c[r+12>>2]|0;do if(o|0){if(c[o+480>>2]|0){Xd(o,r);break c}p=r;if((c[o+304>>2]|0)>>>0>p>>>0)break;if((c[o+308>>2]|0)>>>0<=p>>>0)break;z=o+300|0;c[r>>2]=c[z>>2];c[z>>2]=r;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{z=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=70;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=q;c[z+(o*20|0)+8>>2]=$;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else Di(aa,70,q,$,0)|0;s=m+50|0;o=e[s>>1]|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;z=c[C>>2]|0;a[z+(p*20|0)>>0]=70;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=o;c[z+(p*20|0)+8>>2]=ea;c[z+(p*20|0)+12>>2]=0;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0}else Di(aa,70,o,ea,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=63;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=0;c[z+(o*20|0)+8>>2]=$;c[z+(o*20|0)+12>>2]=_;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else o=Di(aa,63,0,$,_)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30184;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30184,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=2;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=36;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=S;c[z+(o*20|0)+8>>2]=0;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0;z=o}else z=Di(aa,36,S,0,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;y=c[C>>2]|0;a[y+(o*20|0)>>0]=70;b[y+(o*20|0)+2>>1]=0;c[y+(o*20|0)+4>>2]=0;c[y+(o*20|0)+8>>2]=$;c[y+(o*20|0)+12>>2]=0;c[y+(o*20|0)+16>>2]=0;a[y+(o*20|0)+1>>0]=0}else Di(aa,70,0,$,0)|0;o=c[T>>2]|0;d:do if(t>>>0>1){y=c[D>>2]|0;w=y+-1|0;c[D>>2]=w;p=A<<2;e:do if(c[E>>2]|0)if(!(a[G>>0]|0))V=105;else break b;else{do if(0<0|(0==0?(e[F>>1]|0)>>>0<p>>>0:0))o=H;else{o=c[I>>2]|0;if(o|0){c[I>>2]=c[o>>2];c[K>>2]=(c[K>>2]|0)+1;x=o;break e}o=c[J>>2]|0;if(!o){o=L;break}c[J>>2]=c[o>>2];c[K>>2]=(c[K>>2]|0)+1;x=o;break e}while(0);c[o>>2]=(c[o>>2]|0)+1;V=105}while(0);if((V|0)==105){V=0;x=_d(Z,p,0)|0}if(!x)break b;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;p=c[C>>2]|0;a[p+(o*20|0)>>0]=11;o=p+(o*20|0)+1|0;p=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(p|0))}else Di(aa,11,0,0,0)|0;r=c[T>>2]|0;do if((A|0)==1){if((b[s>>1]|0)!=1)break;if(!(a[m+54>>0]|0))break;if((c[U>>2]|0)>(r|0)){c[T>>2]=r+1;v=c[C>>2]|0;a[v+(r*20|0)>>0]=51;b[v+(r*20|0)+2>>1]=0;c[v+(r*20|0)+4>>2]=W;c[v+(r*20|0)+8>>2]=w;c[v+(r*20|0)+12>>2]=0;c[v+(r*20|0)+16>>2]=0;a[v+(r*20|0)+1>>0]=0;break}else{Di(aa,51,W,w,0)|0;break}}while(0);v=m+32|0;u=0;do{o=c[(c[v>>2]|0)+(u<<2)>>2]|0;q=c[f>>2]|0;p=a[q+78>>0]|0;t=a[q+165>>0]|0;q=Zi(q,p,o,t&255)|0;do if(!(t<<24>>24)){if(!q){q=_i(f,p,0,o)|0;break}if(c[q+12>>2]|0)break;q=_i(f,p,q,o)|0}while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;t=c[C>>2]|0;a[t+(o*20|0)>>0]=70;b[t+(o*20|0)+2>>1]=0;c[t+(o*20|0)+4>>2]=u;c[t+(o*20|0)+8>>2]=$;c[t+(o*20|0)+12>>2]=0;c[t+(o*20|0)+16>>2]=0;a[t+(o*20|0)+1>>0]=0}else Di(aa,70,u,$,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;t=c[C>>2]|0;a[t+(o*20|0)>>0]=90;b[t+(o*20|0)+2>>1]=0;c[t+(o*20|0)+4>>2]=S;c[t+(o*20|0)+8>>2]=u;c[t+(o*20|0)+12>>2]=ea;c[t+(o*20|0)+16>>2]=0;a[t+(o*20|0)+1>>0]=0}else Di(aa,90,S,u,ea)|0;o=u+W|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;t=c[C>>2]|0;a[t+(p*20|0)>>0]=52;b[t+(p*20|0)+2>>1]=0;c[t+(p*20|0)+4>>2]=ea;c[t+(p*20|0)+8>>2]=0;c[t+(p*20|0)+12>>2]=o;c[t+(p*20|0)+16>>2]=0;a[t+(p*20|0)+1>>0]=0}else p=Di(aa,52,ea,0,o)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((p|0)<0)o=(c[T>>2]|0)+-1|0;else o=p;s=c[C>>2]|0;t=s+(o*20|0)+1|0;if(a[t>>0]|0){Ei(aa,s+(o*20|0)|0,q,-2);break}if(!q)break;c[s+(o*20|0)+16>>2]=q;a[t>>0]=-2}while(0);c[x+(u<<2)>>2]=p;o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=128;u=u+1|0}while((u|0)<(A|0));if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;v=c[C>>2]|0;a[v+(o*20|0)>>0]=70;b[v+(o*20|0)+2>>1]=0;c[v+(o*20|0)+4>>2]=A;c[v+(o*20|0)+8>>2]=$;c[v+(o*20|0)+12>>2]=0;c[v+(o*20|0)+16>>2]=0;a[v+(o*20|0)+1>>0]=0}else Di(aa,70,A,$,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;v=c[C>>2]|0;a[v+(o*20|0)>>0]=11;b[v+(o*20|0)+2>>1]=0;c[v+(o*20|0)+4>>2]=0;c[v+(o*20|0)+8>>2]=w;c[v+(o*20|0)+12>>2]=0;c[v+(o*20|0)+16>>2]=0;a[v+(o*20|0)+1>>0]=0}else Di(aa,11,0,w,0)|0;q=c[T>>2]|0;p=a[(c[aa>>2]|0)+81>>0]|0;if(!(p<<24>>24))o=(c[C>>2]|0)+((((r|0)<1?q:r)+-1|0)*20|0)|0;else o=59308;c[o+8>>2]=q;o=0;s=q;while(1){q=c[x+(o<<2)>>2]|0;if(!(p<<24>>24))p=(c[C>>2]|0)+(((q|0)<0?s+-1|0:q)*20|0)|0;else p=59308;c[p+8>>2]=s;p=o+W|0;if((c[U>>2]|0)>(s|0)){c[T>>2]=s+1;w=c[C>>2]|0;a[w+(s*20|0)>>0]=90;b[w+(s*20|0)+2>>1]=0;c[w+(s*20|0)+4>>2]=S;c[w+(s*20|0)+8>>2]=o;c[w+(s*20|0)+12>>2]=p;c[w+(s*20|0)+16>>2]=0;a[w+(s*20|0)+1>>0]=0}else Di(aa,90,S,o,p)|0;o=o+1|0;if((o|0)>=(A|0))break;p=a[(c[aa>>2]|0)+81>>0]|0;s=c[T>>2]|0}p=c[M>>2]|0;o=0-y|0;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0)mk(p,aa,o);else c[(c[p+64>>2]|0)+(o<<2)>>2]=c[T>>2];do if(!N){if(c[O>>2]|0){Xd(Z,x);break d}o=x;if((c[P>>2]|0)>>>0>o>>>0)break;if((c[Q>>2]|0)>>>0<=o>>>0)break;c[x>>2]=c[I>>2];c[I>>2]=x;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{A=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}else r=o;while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=63;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=1;c[A+(o*20|0)+8>>2]=_;c[A+(o*20|0)+12>>2]=ea;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,63,1,_,ea)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30224;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30224,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=2;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=5;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=S;c[A+(o*20|0)+8>>2]=r;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,5,S,r,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=63;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=0;c[A+(o*20|0)+8>>2]=_;c[A+(o*20|0)+12>>2]=ba;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,63,0,_,ba)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30264;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30264,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=1;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=92;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=da;c[A+(o*20|0)+8>>2]=3;c[A+(o*20|0)+12>>2]=ea;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,92,da,3,ea)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(aa,(c[C>>2]|0)+(o*20|0)|0,46896,0)}o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=121;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=i;c[A+(o*20|0)+8>>2]=j;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,121,i,j,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=122;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=i;c[A+(o*20|0)+8>>2]=ea;c[A+(o*20|0)+12>>2]=j;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,122,i,ea,j)|0;p=c[T>>2]|0;if((p|0)>0)b[(c[C>>2]|0)+((p+-1|0)*20|0)+2>>1]=8;if(!(a[(c[aa>>2]|0)+81>>0]|0))o=(c[C>>2]|0)+(((z|0)<0?p+-1|0:z)*20|0)|0;else o=59308;c[o+8>>2]=p}while(0);m=c[m+20>>2]|0}while((m|0)!=0)}if(l<<24>>24==0|R^1){Ra=fa;return}l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;$=c[aa+104>>2]|0;a[$+(l*20|0)>>0]=93;b[$+(l*20|0)+2>>1]=0;c[$+(l*20|0)+4>>2]=k;c[$+(l*20|0)+8>>2]=ba;c[$+(l*20|0)+12>>2]=0;c[$+(l*20|0)+16>>2]=0;a[$+(l*20|0)+1>>0]=0}else Di(aa,93,k,ba,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;n=c[aa+104>>2]|0;a[n+(l*20|0)>>0]=20;b[n+(l*20|0)+2>>1]=0;c[n+(l*20|0)+4>>2]=ba;c[n+(l*20|0)+8>>2]=0;c[n+(l*20|0)+12>>2]=0;c[n+(l*20|0)+16>>2]=0;a[n+(l*20|0)+1>>0]=0;n=l}else n=Di(aa,20,ba,0,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;ba=c[aa+104>>2]|0;a[ba+(l*20|0)>>0]=73;b[ba+(l*20|0)+2>>1]=0;c[ba+(l*20|0)+4>>2]=0;c[ba+(l*20|0)+8>>2]=ca;c[ba+(l*20|0)+12>>2]=0;c[ba+(l*20|0)+16>>2]=0;a[ba+(l*20|0)+1>>0]=0}else Di(aa,73,0,ca,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;ca=c[aa+104>>2]|0;a[ca+(l*20|0)>>0]=92;b[ca+(l*20|0)+2>>1]=0;c[ca+(l*20|0)+4>>2]=da;c[ca+(l*20|0)+8>>2]=3;c[ca+(l*20|0)+12>>2]=ea;c[ca+(l*20|0)+16>>2]=0;a[ca+(l*20|0)+1>>0]=0}else l=Di(aa,92,da,3,ea)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[T>>2]|0)+-1|0;Ei(aa,(c[aa+104>>2]|0)+(l*20|0)|0,46896,0)}l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;da=c[aa+104>>2]|0;a[da+(l*20|0)>>0]=121;b[da+(l*20|0)+2>>1]=0;c[da+(l*20|0)+4>>2]=i;c[da+(l*20|0)+8>>2]=j;c[da+(l*20|0)+12>>2]=0;c[da+(l*20|0)+16>>2]=0;a[da+(l*20|0)+1>>0]=0}else Di(aa,121,i,j,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;da=c[aa+104>>2]|0;a[da+(l*20|0)>>0]=122;b[da+(l*20|0)+2>>1]=0;c[da+(l*20|0)+4>>2]=i;c[da+(l*20|0)+8>>2]=ea;c[da+(l*20|0)+12>>2]=j;c[da+(l*20|0)+16>>2]=0;a[da+(l*20|0)+1>>0]=0}else Di(aa,122,i,ea,j)|0;m=c[T>>2]|0;if((m|0)>0)b[(c[aa+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=8;if(!(a[(c[aa>>2]|0)+81>>0]|0))l=(c[aa+104>>2]|0)+(((n|0)<0?m+-1|0:n)*20|0)|0;else l=59308;c[l+8>>2]=m;Ra=fa;return}function kn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=c[h>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){o=Mg(+g[f>>3])|0;L()|0;break}if(!(i&18))o=0;else{o=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0}}else o=c[f>>2]|0;while(0);p=o+1&-2;f=c[h+4>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){l=Mg(+g[f>>3])|0;L()|0;break}if(!(i&18))l=0;else{l=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0}}else l=c[f>>2]|0;while(0);m=(p<<3)+60|0;n=c[(c[d>>2]|0)+32>>2]|0;h=((m|0)<0)<<31>>31;a:do if(!n){h=Sv(m|0,h|0,-1,-1)|0;i=L()|0;if(!(i>>>0>0|(i|0)==0&h>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;k=37;break}h=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){q=c[14978]|0;i=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&i>>>0<=q>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(f|0){i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;k=47}else k=47}}}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0)break}else{do if(!(0<h>>>0|(0==(h|0)?(e[n+276>>1]|0)>>>0<m>>>0:0))){f=n+300|0;i=c[f>>2]|0;if(i|0){c[f>>2]=c[i>>2];j=n+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;k=37;break a}f=n+296|0;i=c[f>>2]|0;if(!i){f=n+292|0;break}else{c[f>>2]=c[i>>2];j=n+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;k=37;break a}}else f=n+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}j=_d(n,m,h)|0;k=37}while(0);if((k|0)==37?j|0:0){f=j;k=47}if((k|0)==47){gw(f|0,0,m|0)|0;c[f+56>>2]=n;c[f>>2]=0;c[f+8>>2]=o;c[f+12>>2]=l;q=f+60|0;c[f+24>>2]=q;c[f+20>>2]=q+(p<<2);if((yc(c[d>>2]|0,f,60,0,96)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}f=c[d>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[d>>2]|0}c[d+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0)return;if(a[f+82>>0]|0)return;a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;q=f+272|0;c[q>>2]=(c[q>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function ln(a){a=a|0;var b=0,d=0;b=c[a+56>>2]|0;if(!a)return;if(b|0){if(c[b+480>>2]|0){Xd(b,a);return}d=a;if((c[b+304>>2]|0)>>>0<=d>>>0?(c[b+308>>2]|0)>>>0>d>>>0:0){d=b+300|0;c[a>>2]=c[d>>2];c[d>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function mn(b,d,f){b=b|0;d=d|0;f=f|0;var h=0,i=0,j=0;j=mc(c[f>>2]|0)|0;b=c[f+4>>2]|0;d=e[b+8>>1]|0;do if(!(d&4)){if(d&8|0){i=Mg(+g[b>>3])|0;L()|0;break}if(!(d&18))i=0;else{i=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;L()|0}}else i=c[b>>2]|0;while(0);if(!(c[j>>2]|0)){d=j+8|0;if((c[d>>2]|0)<=0){i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}f=c[j+20>>2]|0;b=0;do{c[f+(b<<2)>>2]=1;b=b+1|0}while((b|0)<(c[d>>2]|0));i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}if((i|0)>0){d=c[j+20>>2]|0;b=0;do{h=d+(b<<2)|0;c[h>>2]=(c[h>>2]|0)+1;b=b+1|0}while((b|0)!=(i|0))}d=j+8|0;if((i|0)>=(c[d>>2]|0)){i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}f=c[j+24>>2]|0;h=c[j+20>>2]|0;b=i;do{i=f+(b<<2)|0;c[i>>2]=(c[i>>2]|0)+1;c[h+(b<<2)>>2]=1;b=b+1|0}while((b|0)<(c[d>>2]|0));i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}function nn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=Ra;Ra=Ra+16|0;l=m+8|0;i=m;j=mc(c[f>>2]|0)|0;k=j+12|0;h=((c[k>>2]|0)*25|0)+25|0;g=Sv(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;f=L()|0;do if(!(f>>>0>0|(f|0)==0&g>>>0>2147483390)){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](h)|0;if(!e)break}else{e=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){n=c[14978]|0;g=Tv(f|0,g|0,e|0,((e|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=n>>>0)&1}e=Wa[c[29340>>2]&127](e)|0;if(!e)break;f=Wa[c[29352>>2]&127](e)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(e|0,0,h|0)|0;n=i;c[n>>2]=c[j>>2];c[n+4>>2]=0;Cb(24,e,46929,i)|0;if((c[k>>2]|0)>0){i=j+24|0;g=0;h=e+((Eu(e)|0)&1073741823)|0;while(1){o=(c[(c[i>>2]|0)+(g<<2)>>2]|0)+1|0;f=c[j>>2]|0;n=Sv(o|0,0,-1,-1)|0;f=Sv(n|0,L()|0,f|0,0)|0;o=_v(f|0,L()|0,o|0,0)|0;f=L()|0;n=l;c[n>>2]=o;c[n+4>>2]=f;Cb(24,h,46934,l)|0;if(!h)f=0;else f=(Eu(h)|0)&1073741823;g=g+1|0;if((g|0)>=(c[k>>2]|0))break;else h=h+f|0}}if((yc(c[d>>2]|0,e,-1,1,90)|0)!=18){Ra=m;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=m;return}while(0);e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0){Ra=m;return}if(a[e+82>>0]|0){Ra=m;return}a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;o=e+272|0;c[o>>2]=(c[o>>2]|0)+1;e=c[e+236>>2]|0;if(!e){Ra=m;return}c[e+12>>2]=7;Ra=m;return}function on(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;k=l;j=c[e>>2]|0;a:do if(j){f=a[j>>0]|0;do if(!(f<<24>>24)){f=39441;i=3}else{h=f&255;f=208+h|0;if((h|32|0)==115){f=a[j+1>>0]|0;if(!(f<<24>>24)){f=39442;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==113){f=a[j+2>>0]|0;if(!(f<<24>>24)){f=39443;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==108){f=a[j+3>>0]|0;if(!(f<<24>>24)){f=39444;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==105){f=a[j+4>>0]|0;if(!(f<<24>>24)){f=39445;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==116){f=a[j+5>>0]|0;if(!(f<<24>>24)){f=39446;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==101){f=a[j+6>>0]|0;if(!(f<<24>>24)){f=39447;i=3;break}if(f<<24>>24==95)break a;else{h=95;f=208+(f&255)|0}}else h=101}else h=116}else h=105}else h=108}else h=113}else h=115;g=d[f>>0]|0;f=h}while(0);if((i|0)==3){g=0;f=a[208+(d[f>>0]|0)>>0]|0}if((g|0)!=(f&255|0))i=8}else i=8;while(0);if((i|0)==8){if(!(c[e+36>>2]&1024)){k=0;Ra=l;return k|0}f=c[b>>2]|0;if(0==0?(c[f+32>>2]&268435456|0)==0:0){k=0;Ra=l;return k|0}if(c[f+180>>2]|0){k=0;Ra=l;return k|0}}c[k>>2]=j;cd(b,47776,k);k=1;Ra=l;return k|0}function pn(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+32|0;h=k;i=h+20|0;a[i>>0]=1;c[h+4>>2]=127;c[h+8>>2]=128;c[h+24>>2]=0;if(!g){j=0;Ra=k;return j|0}_j(h,g)|0;if(a[i>>0]|0){j=g;Ra=k;return j|0}if((d[f+200>>0]|0)>1){i=h+8|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[h>>2]=f;c[h+4>>2]=124;_j(h,g)|0}ni(c[f>>2]|0,g);g=c[f>>2]|0;a:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))j=15;else{j=0;Ra=k;return j|0}else{do if((e[g+276>>1]|0)>=52){f=g+300|0;h=c[f>>2]|0;if(h|0){c[f>>2]=c[h>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;break a}f=g+296|0;h=c[f>>2]|0;if(!h){f=g+292|0;break}else{c[f>>2]=c[h>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;break a}}else f=g+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(g,52,0)|0;if(!h){j=h;Ra=k;return j|0}f=h;g=f+52|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[h>>0]=114;b[h+34>>1]=-1;c[h+24>>2]=1;j=h;Ra=k;return j|0}function qn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0;e=c[f>>2]|0;if(!e)return;f=b[e+8>>1]|0;if((f&514)==514?(a[e+10>>0]|0)==1:0)e=c[e+16>>2]|0;else g=5;do if((g|0)==5)if(!(f&1)){e=Gg(e,1)|0;break}else return;while(0);if(!e)return;h=Wd(e)|0;e=c[d>>2]|0;f=((h|0)<0)<<31>>31;g=e+8|0;if(!(b[g>>1]&9216)){d=e;c[d>>2]=h;c[d+4>>2]=f;b[g>>1]=4;return}else{Pg(e,h,f);return}}function rn(b,d,f){b=b|0;d=d|0;f=f|0;d=c[f>>2]|0;f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){d=Mg(+g[d>>3])|0;L()|0;f=7;break}if(!(f&18)){d=26464;f=8}else{d=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0;f=7}}else{d=c[d>>2]|0;f=7}while(0);if((f|0)==7)if(d>>>0<7){d=26464+(d<<2)|0;f=8}else d=0;if((f|0)==8)d=c[d>>2]|0;if((yc(c[b>>2]|0,d,-1,1,0)|0)!=18)return;c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0;return}function sn(a,b,d){a=a|0;b=b|0;d=d|0;if((yc(c[a>>2]|0,31142,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function tn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=c[g>>2]|0;i=b[h+8>>1]|0;if((h|0)==0|(-1431655766>>>(i&31)&1|0)!=0)return;if((i&514)==514?(a[h+10>>0]|0)==1:0)i=c[h+16>>2]|0;else q=5;do if((q|0)==5)if(!(i&1)){i=Gg(h,1)|0;break}else return;while(0);if(!i)return;k=c[g>>2]|0;h=b[k+8>>1]|0;if((h&2)!=0?(a[k+10>>0]|0)==1:0)h=c[k+12>>2]|0;else q=11;do if((q|0)==11){j=h&65535;if(!(j&16)){if(j&1|0){h=0;break}h=Fg(k,1)|0;break}else{h=c[k+12>>2]|0;if(!(j&16384))break;h=(c[k>>2]|0)+h|0;break}}while(0);a:do if((f|0)!=1){j=c[g+4>>2]|0;if(!j)return;k=b[j+8>>1]|0;if((k&514)==514?(a[j+10>>0]|0)==1:0)p=c[j+16>>2]|0;else q=21;do if((q|0)==21)if(!(k&1)){p=Gg(j,1)|0;break}else return;while(0);if(!p)return;k=a[p>>0]|0;if(k<<24>>24){j=p;l=0;do{f=j+1|0;if((k&255)>191){j=f;while(1){k=a[j>>0]|0;if((k&-64)<<24>>24==-128)j=j+1|0;else break}}else{j=f;k=a[f>>0]|0}l=l+1|0}while(k<<24>>24!=0);f=Yv(l|0,0,5,0)|0;j=L()|0;k=c[e>>2]|0;o=c[(c[k+32>>2]|0)+108>>2]|0;n=((o|0)<0)<<31>>31;if((j|0)>(n|0)|(j|0)==(n|0)&f>>>0>o>>>0){c[e+20>>2]=18;yc(k,31223,-1,1,0)|0;return}o=Sv(f|0,j|0,-1,-1)|0;n=L()|0;do if(!(n>>>0>0|(n|0)==0&o>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](f)|0;if(!j)break}else{g=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){o=c[14978]|0;n=Tv(j|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}j=Wa[c[29340>>2]&127](g)|0;if(!j)break;k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}m=j+(l<<2)|0;if(!(a[p>>0]|0))break a;g=0;k=p;while(1){c[j+(g<<2)>>2]=k;f=k+1|0;l=k;if((d[k>>0]|0)>191){k=f;while(1)if((a[k>>0]&-64)<<24>>24==-128)k=k+1|0;else break}else k=f;a[m+g>>0]=k-l;f=g+1|0;if(!(a[k>>0]|0)){o=j;n=j;q=60;break a}else g=f}}while(0);h=c[e>>2]|0;i=h+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(h);h=c[e>>2]|0}c[e+20>>2]=7;h=c[h+32>>2]|0;i=h+81|0;if(a[i>>0]|0)return;if(a[h+82>>0]|0)return;a[i>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;e=h+272|0;c[e>>2]=(c[e>>2]|0)+1;h=c[h+236>>2]|0;if(!h)return;c[h+12>>2]=7;return}}else{p=0;o=30304;m=49513;f=1;n=30304;q=60}while(0);do if((q|0)==60){l=c[(c[e+4>>2]|0)+8>>2]|0;b:do if((l&1|0)!=0&(h|0)>0)do{j=0;while(1){k=a[m+j>>0]|0;g=k&255;if((h|0)>=(g|0)?(Lu(i,c[o+(j<<2)>>2]|0,g)|0)==0:0)break;j=j+1|0;if(j>>>0>=f>>>0){q=67;break b}}g=k&255;i=i+g|0;h=h-g|0}while((h|0)>0);else q=67;while(0);c:do if((q|0)==67)if((l&2|0)!=0&(h|0)>0)while(1){j=0;while(1){k=d[m+j>>0]|0;if((h|0)>=(k|0)?(r=h-k|0,(Lu(i+r|0,c[o+(j<<2)>>2]|0,k)|0)==0):0)break;j=j+1|0;if(j>>>0>=f>>>0)break c}if((r|0)>0)h=r;else{h=r;break}}while(0);if(!((n|0)==0|(p|0)==0))if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{r=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if((yc(c[e>>2]|0,i,h,1,-1)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}function un(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=((c[(c[a+4>>2]|0)+8>>2]|0)!=0)<<31>>31;i=c[(c[(c[a+12>>2]|0)+104>>2]|0)+(((c[a+16>>2]|0)+-1|0)*20|0)+16>>2]|0;f=c[e>>2]|0;if(-1431655766>>>(b[f+8>>1]&31)&1|0)return;do if((d|0)>1){h=0;f=1;while(1){g=c[e+(f<<2)>>2]|0;if(-1431655766>>>(b[g+8>>1]&31)&1|0){g=8;break}g=((Tg(c[e+(h<<2)>>2]|0,g,i)|0)^j|0)>-1;h=g?f:h;f=f+1|0;if((f|0)>=(d|0)){g=6;break}}if((g|0)==6){f=c[e+(h<<2)>>2]|0;break}else if((g|0)==8)return}while(0);Dc(a,f);return}function vn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[f>>2]|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))i=Ic(d,40)|0;else i=c[e+16>>2]|0;if(!i)return;h=g+8|0;j=i+8|0;e=(b[j>>1]|0)!=0;if(-1431655766>>>(b[h>>1]&31)&1|0){if(!e)return;c[d+20>>2]=-1;a[d+24>>0]=1;return}if(!e){c[i+32>>2]=c[(c[d>>2]|0)+32>>2];c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=49;do if((k|0)==49)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}e=(c[(c[d+4>>2]|0)+8>>2]|0)!=0;f=Tg(i,g,c[(c[(c[d+12>>2]|0)+104>>2]|0)+(((c[d+16>>2]|0)+-1|0)*20|0)+16>>2]|0)|0;if(e&(f|0)<0){if(b[j>>1]&9216)Dg(i);c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=22;do if((k|0)==22)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}if(!((f|0)>0&(e^1))){c[d+20>>2]=-1;a[d+24>>0]=1;return}if(b[j>>1]&9216)Dg(i);c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=36;do if((k|0)==36)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}function wn(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+8|0;if(!((b[e>>1]|0)!=0?(Dc(a,d),(b[e>>1]&9216)!=0):0))f=7;if((f|0)==7?(c[d+24>>2]|0)==0:0)return;Cg(d);return}function xn(a){a=a|0;var d=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;if(!(b[d+8>>1]|0))return;Dc(a,d);return}function yn(a,e,f){a=a|0;e=e|0;f=f|0;if((yc(c[a>>2]|0,c[21712+((d[816+(b[(c[f>>2]|0)+8>>1]&31)>>0]|0)+-1<<2)>>2]|0,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function zn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[f>>2]|0;e=b[g+8>>1]|0;switch(a[816+(e&31)>>0]|0){case 2:case 1:case 4:{if((e&2)!=0?(a[g+10>>0]|0)==1:0)f=c[g+12>>2]|0;else i=5;do if((i|0)==5){e=e&65535;if(!(e&16)){if(e&1|0){f=0;break}f=Fg(g,1)|0;break}else{f=c[g+12>>2]|0;if(!(e&16384))break;f=(c[g>>2]|0)+f|0;break}}while(0);e=c[d>>2]|0;g=((f|0)<0)<<31>>31;h=e+8|0;if(!(b[h>>1]&9216)){d=e;c[d>>2]=f;c[d+4>>2]=g;b[h>>1]=4;return}else{Pg(e,f,g);return}}case 3:{if(!g)return;if((e&514)==514?(a[g+10>>0]|0)==1:0)h=c[g+16>>2]|0;else i=17;do if((i|0)==17)if(!(e&1)){h=Gg(g,1)|0;break}else return;while(0);if(!h)return;g=a[h>>0]|0;if(!(g<<24>>24)){f=h;e=h}else{e=h;f=h;do{f=f+1|0;h=a[f>>0]|0;if((g&255)>191&(h&-64)<<24>>24==-128)do{f=f+1|0;e=e+1|0;g=a[f>>0]|0}while((g&-64)<<24>>24==-128);else g=h}while(g<<24>>24!=0)}h=f-e|0;e=c[d>>2]|0;f=((h|0)<0)<<31>>31;g=e+8|0;if(!(b[g>>1]&9216)){d=e;c[d>>2]=h;c[d+4>>2]=f;b[g>>1]=4;return}else{Pg(e,h,f);return}}default:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;return}else{Dg(e);return}}}}function An(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=c[f>>2]|0;e=b[g+8>>1]|0;m=e&31;n=f+4|0;i=c[n>>2]|0;j=b[i+8>>1]|0;l=j&31;if((-1431655766>>>l|-1431655766>>>m)&1|0)return;if((e&2)!=0?(a[g+10>>0]|0)==1:0){h=c[g+12>>2]|0;e=j}else k=5;do if((k|0)==5){e=e&65535;if(!(e&16)){if(e&1|0){h=0;e=j;break}h=Fg(g,1)|0;i=c[n>>2]|0;e=b[i+8>>1]|0;break}else{h=c[g+12>>2]|0;if(!(e&16384)){e=j;break}h=(c[g>>2]|0)+h|0;e=j;break}}while(0);if((e&2)!=0?(a[i+10>>0]|0)==1:0){o=c[i+12>>2]|0;k=18}else k=13;do if((k|0)==13){g=e&65535;if(!(g&16)){if(g&1|0){e=1;i=0;break}o=Fg(i,1)|0;k=18;break}else{e=c[i+12>>2]|0;if(!(g&16384)){o=e;k=18;break}o=(c[i>>2]|0)+e|0;k=18;break}}while(0);a:do if((k|0)==18)if((o|0)>0){g=c[f>>2]|0;do if(!((m|16|0)==16&(l|16|0)==16)){do if(g){e=b[g+8>>1]|0;if((e&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(e&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);i=c[n>>2]|0;if(!i)return;e=b[i+8>>1]|0;if((e&514)==514?(a[i+10>>0]|0)==1:0){e=1;k=c[i+16>>2]|0;break}if(!(e&1)){e=1;k=Gg(i,1)|0;break}else return}else{g=mc(g)|0;e=0;k=mc(c[n>>2]|0)|0}while(0);if(!k)return;if((h|0)!=0&(g|0)==0)return;l=a[k>>0]|0;if((o|0)>(h|0)){e=0;i=0}else{b:do if(!e){e=1;while(1){if((a[g>>0]|0)==l<<24>>24?(Lu(g,k,o)|0)==0:0)break b;if((o|0)<(h|0)){e=e+1|0;h=h+-1|0;g=g+1|0}else{e=0;i=0;break a}}}else{e=1;j=g;g=a[g>>0]|0;while(1){if(g<<24>>24==l<<24>>24?(Lu(j,k,o)|0)==0:0)break b;while(1){i=h+-1|0;j=j+1|0;g=a[j>>0]|0;if((g&-64)<<24>>24!=-128)break;else h=i}if((o|0)<(h|0)){e=e+1|0;h=i}else{e=0;i=0;break a}}}while(0);i=0}}else{e=1;i=0}while(0);g=c[d>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){d=g;c[d>>2]=e;c[d+4>>2]=i;b[h>>1]=4;return}else{Pg(g,e,i);return}}function Bn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;l=n;k=n+32|0;m=n+8|0;j=c[(c[d>>2]|0)+32>>2]|0;if((e|0)<=0){Ra=n;return}h=c[f>>2]|0;if(!h){Ra=n;return}g=b[h+8>>1]|0;if((g&514)==514?(a[h+10>>0]|0)==1:0)g=c[h+16>>2]|0;else i=6;do if((i|0)==6)if(!(g&1)){g=Gg(h,1)|0;break}else{Ra=n;return}while(0);if(!g){Ra=n;return}c[k>>2]=e+-1;c[k+4>>2]=0;c[k+8>>2]=f+4;h=c[j+108>>2]|0;i=m+4|0;c[i>>2]=0;c[m>>2]=j;c[m+8>>2]=0;e=m+12|0;c[e>>2]=h;h=m+16|0;c[h>>2]=0;a[m+20>>0]=0;f=m+21|0;a[f>>0]=2;c[l>>2]=k;Eb(m,g,l);h=c[h>>2]|0;g=c[i>>2]|0;if(((g|0)!=0?(a[g+h>>0]=0,(c[e>>2]|0)!=0):0)?(a[f>>0]&4)==0:0)g=$d(m)|0;else g=c[i>>2]|0;if((yc(c[d>>2]|0,g,h,1,116)|0)!=18){Ra=n;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=n;return}function Cn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0;f=c[g>>2]|0;if(!f)return;g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)f=c[f+16>>2]|0;else h=5;do if((h|0)==5)if(!(g&1)){f=Gg(f,1)|0;break}else return;while(0);if(!f)return;g=a[f>>0]|0;if(!(g<<24>>24))return;h=f+1|0;f=g&255;if((g&255)>191){f=d[2736+(f+-192)>>0]|0;g=a[h>>0]|0;if((g&-64)<<24>>24==-128)do{h=h+1|0;f=f<<6|g&63;g=a[h>>0]|0}while((g&-64)<<24>>24==-128);f=(f&-2|0)==65534|(f>>>0<128|(f&-2048|0)==55296)?65533:f}g=c[e>>2]|0;h=((f|0)<0)<<31>>31;e=g+8|0;if(!(b[e>>1]&9216)){c[g>>2]=f;c[g+4>>2]=h;b[e>>1]=4;return}else{Pg(g,f,h);return}}function Dn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=f<<2|1;q=pb(q,((q|0)<0)<<31>>31)|0;if(!q){i=c[d>>2]|0;j=i+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(i);i=c[d>>2]|0}c[d+20>>2]=7;i=c[i+32>>2]|0;j=i+81|0;if(a[j>>0]|0)return;if(a[i+82>>0]|0)return;a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;d=i+272|0;c[d>>2]=(c[d>>2]|0)+1;i=c[i+236>>2]|0;if(!i)return;c[i+12>>2]=7;return}if((f|0)>0){o=0;i=q;do{j=c[h+(o<<2)>>2]|0;k=e[j+8>>1]|0;do if(!(k&4)){if(k&8|0){k=Mg(+g[j>>3])|0;j=L()|0;p=19;break}if(!(k&18)){n=i;m=1;j=0}else{k=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;j=L()|0;p=19}}else{k=j;j=c[k+4>>2]|0;k=c[k>>2]|0;p=19}while(0);do if((p|0)==19){p=0;l=k&2097151;if(!(j>>>0>0|(j|0)==0&k>>>0>1114111)){if(l>>>0<128){n=i;m=1;j=l;break}if(l>>>0<2048){a[i>>0]=k>>>6&31|192;n=i+1|0;m=2;j=k&63|128;break}if(l>>>0<65536)j=l;else{a[i>>0]=l>>>18|240;a[i+1>>0]=k>>>12&63|128;a[i+2>>0]=k>>>6&63|128;n=i+3|0;m=4;j=k&63|128;break}}else j=65533;a[i>>0]=j>>>12&15|224;a[i+1>>0]=j>>>6&63|128;n=i+2|0;m=3;j=j&63|128}while(0);i=i+m|0;a[n>>0]=j;o=o+1|0}while((o|0)!=(f|0))}else i=q;i=i-q|0;if((i|0)>=0){if((yc(c[d>>2]|0,q,i,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}do if(90!=-1)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{p=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}function En(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;i=l+8|0;j=l;f=c[f>>2]|0;e=b[f+8>>1]|0;switch(a[816+(e&31)>>0]|0){case 1:{e=e&65535;do if(!(e&4)){if(e&8|0){e=Mg(+g[f>>3])|0;f=L()|0;k=8;break}if(!(e&18)){e=0;j=0}else{e=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;k=8}}else{e=f;f=c[e+4>>2]|0;e=c[e>>2]|0;k=8}while(0);do if((k|0)==8)if((f|0)<0){if(!((e|0)==0&(f|0)==-2147483648)){e=Tv(0,0,e|0,f|0)|0;j=L()|0;break}c[d+20>>2]=1;yc(c[d>>2]|0,49524,-1,1,-1)|0;Ra=l;return}else j=f;while(0);f=c[d>>2]|0;i=f+8|0;if(!(b[i>>1]&9216)){d=f;c[d>>2]=e;c[d+4>>2]=j;b[i>>1]=4;Ra=l;return}else{Pg(f,e,j);Ra=l;return}}case 5:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;Ra=l;return}else{Dg(e);Ra=l;return}}default:{e=e&65535;do if(!(e&8)){if(e&4|0){k=f;h=+((c[k>>2]|0)>>>0)+4294967296.0*+(c[k+4>>2]|0);break}if(!(e&18))h=0.0;else h=+Kg(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)}else h=+g[f>>3];while(0);h=h<0.0?-h:h;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(e);g[i>>3]=h;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){Ra=l;return}g[e>>3]=h;b[f>>1]=8;Ra=l;return}}}function Fn(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;j=n+24|0;l=n+16|0;m=n+8|0;k=n;a:do if((e|0)==2){h=c[f+4>>2]|0;e=b[h+8>>1]|0;if(-1431655766>>>(e&31)&1|0){Ra=n;return}e=e&65535;do if(!(e&4)){if(e&8|0){e=Mg(+g[h>>3])|0;L()|0;break}if(!(e&18)){e=0;break a}e=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}else e=c[h>>2]|0;while(0);if((e|0)<30){if((e|0)<=0){e=0;break}}else e=30}else e=0;while(0);f=c[f>>2]|0;h=b[f+8>>1]|0;if(-1431655766>>>(h&31)&1|0){Ra=n;return}h=h&65535;do if(!(h&8)){if(h&4|0){i=+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0);break}if(!(h&18))i=0.0;else i=+Kg(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)}else i=+g[f>>3];while(0);g[k>>3]=i;h=(e|0)==0;do if(i<9223372036854775808.0&(h&i>=0.0)){i=i+.5;i=+(~~i>>>0>>>0)+4294967296.0*+((+t(i)>=1.0?(i>0.0?~~+H(+s(i/4294967296.0),4294967295.0)>>>0:~~+F((i-+(~~i>>>0))/4294967296.0)>>>0):0)|0);g[k>>3]=i}else{if(i>-9223372036854775808.0&(h&i<0.0)){i=.5-i;i=-(+(~~i>>>0>>>0)+4294967296.0*+((+t(i)>=1.0?(i>0.0?~~+H(+s(i/4294967296.0),4294967295.0)>>>0:~~+F((i-+(~~i>>>0))/4294967296.0)>>>0):0)|0));g[k>>3]=i;break}c[j>>2]=e;g[j+8>>3]=i;e=Bb(49541,j)|0;if(e|0){Lg(e,k,(Eu(e)|0)&1073741823,1)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}e=c[d>>2]|0;h=e+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;h=e+81|0;if(a[h>>0]|0){Ra=n;return}if(a[e+82>>0]|0){Ra=n;return}a[h>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e){Ra=n;return}c[e+12>>2]=7;Ra=n;return}while(0);i=+g[k>>3];e=c[d>>2]|0;h=e+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else Dg(e);g[l>>3]=i;g[m>>3]=+g[l>>3];if(!(+g[l>>3]==+g[m>>3])){Ra=n;return}g[e>>3]=i;b[h>>1]=8;Ra=n;return}function Gn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=c[f>>2]|0;e=b[g+8>>1]|0;if((e&514)==514?(a[g+10>>0]|0)==1:0){j=c[g+16>>2]|0;f=g}else if(!(e&1)){j=Gg(g,1)|0;f=c[f>>2]|0}else{j=0;f=g}e=b[f+8>>1]|0;if((e&2)!=0?(a[f+10>>0]|0)==1:0)i=c[f+12>>2]|0;else h=9;do if((h|0)==9){e=e&65535;if(!(e&16)){if(e&1|0){i=0;break}i=Fg(f,1)|0;break}else{g=c[f+12>>2]|0;if(!(e&16384)){i=g;break}i=(c[f>>2]|0)+g|0;break}}while(0);if(!j)return;g=Sv(i|0,((i|0)<0)<<31>>31|0,1,0)|0;L()|0;e=c[d>>2]|0;if((i|0)>=(c[(c[e+32>>2]|0)+108>>2]|0)){c[d+20>>2]=18;yc(e,31223,-1,1,0)|0;return}do if(i>>>0<=2147483390){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](g)|0;if(!e)break}else{f=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){h=c[14978]|0;g=Tv(e|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&g>>>0<=h>>>0)&1}e=Wa[c[29340>>2]&127](f)|0;if(!e)break;g=Wa[c[29352>>2]&127](e)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}if((i|0)>0){g=0;do{h=a[j+g>>0]|0;a[e+g>>0]=h&~(a[880+(h&255)>>0]&32);g=g+1|0}while((g|0)!=(i|0))}if((yc(c[d>>2]|0,e,i,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;if(a[g>>0]|0)return;if(a[e+82>>0]|0)return;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Hn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=c[g>>2]|0;f=b[h+8>>1]|0;if((f&514)==514?(a[h+10>>0]|0)==1:0){k=c[h+16>>2]|0;g=h}else if(!(f&1)){k=Gg(h,1)|0;g=c[g>>2]|0}else{k=0;g=h}f=b[g+8>>1]|0;if((f&2)!=0?(a[g+10>>0]|0)==1:0)j=c[g+12>>2]|0;else i=9;do if((i|0)==9){f=f&65535;if(!(f&16)){if(f&1|0){j=0;break}j=Fg(g,1)|0;break}else{h=c[g+12>>2]|0;if(!(f&16384)){j=h;break}j=(c[g>>2]|0)+h|0;break}}while(0);if(!k)return;h=Sv(j|0,((j|0)<0)<<31>>31|0,1,0)|0;L()|0;f=c[e>>2]|0;if((j|0)>=(c[(c[f+32>>2]|0)+108>>2]|0)){c[e+20>>2]=18;yc(f,31223,-1,1,0)|0;return}do if(j>>>0<=2147483390){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;if(!f)break}else{g=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;h=59064;f=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&f>>>0>0){i=c[14978]|0;h=Tv(f|0,h|0,g|0,((g|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}f=Wa[c[29340>>2]&127](g)|0;if(!f)break;h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}if((j|0)>0){h=0;do{a[f+h>>0]=a[208+(d[k+h>>0]|0)>>0]|0;h=h+1|0}while((h|0)!=(j|0))}if((yc(c[e>>2]|0,f,j,1,90)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[e>>2]|0;h=f+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;h=f+81|0;if(a[h>>0]|0)return;if(a[f+82>>0]|0)return;a[h>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function In(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=mc(c[g>>2]|0)|0;h=c[g>>2]|0;f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)g=c[h+12>>2]|0;else i=4;do if((i|0)==4){f=f&65535;if(!(f&16)){if(f&1|0){g=0;break}g=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(f&16384))break;g=(c[h>>2]|0)+g|0;break}}while(0);i=cw(g|0,((g|0)<0)<<31>>31|0,1)|0;f=L()|0;i=i|1;h=c[e>>2]|0;k=c[(c[h+32>>2]|0)+108>>2]|0;j=((k|0)<0)<<31>>31;if((f|0)>(j|0)|(f|0)==(j|0)&i>>>0>k>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;return}k=Sv(i|0,f|0,-1,-1)|0;j=L()|0;do if(!(j>>>0>0|(j|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f)break;else h=f}else{j=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;f=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&f>>>0>0){k=c[14978]|0;i=Tv(f|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=k>>>0)&1}h=Wa[c[29340>>2]&127](j)|0;if(!h)break;f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}k=g<<1;if((g|0)>0){j=h;f=l;i=0;while(1){l=d[f>>0]|0;a[j>>0]=a[21744+(l>>>4)>>0]|0;a[j+1>>0]=a[21744+(l&15)>>0]|0;i=i+1|0;if((i|0)==(g|0))break;else{j=j+2|0;f=f+1|0}}f=h+k|0}else f=h;a[f>>0]=0;if((yc(c[e>>2]|0,h,k,1,90)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[e>>2]|0;g=f+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;g=f+81|0;if(a[g>>0]|0)return;if(a[f+82>>0]|0)return;a[g>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function Jn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;d=h;Fb(8,d);f=d;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)<0){g=Tv(0,0,e|0,f&2147483647|0)|0;f=L()|0;e=d;c[e>>2]=g;c[e+4>>2]=f}else g=e;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=g;c[a+4>>2]=f;b[e>>1]=4;Ra=h;return}else{Pg(d,g,f);Ra=h;return}}function Kn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){h=Mg(+g[f>>3])|0;f=L()|0;j=7;break}if(!(h&18)){i=0;f=1}else{h=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;j=7}}else{h=f;f=c[h+4>>2]|0;h=c[h>>2]|0;j=7}while(0);if((j|0)==7){j=(f|0)>0|(f|0)==0&h>>>0>1;i=j?f:0;f=j?h:1}h=c[d>>2]|0;j=c[(c[h+32>>2]|0)+108>>2]|0;k=((j|0)<0)<<31>>31;if((i|0)>(k|0)|(i|0)==(k|0)&f>>>0>j>>>0){c[d+20>>2]=18;yc(h,31223,-1,1,0)|0;return}k=Sv(f|0,i|0,-1,-1)|0;j=L()|0;do if(!(j>>>0>0|(j|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;if(!h)break}else{h=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){k=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=k>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h)break;i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}Fb(f,h);if((yc(c[d>>2]|0,h,f,0,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[d>>2]|0;h=f+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(f);f=c[d>>2]|0}c[d+20>>2]=7;f=c[f+32>>2]|0;h=f+81|0;if(a[h>>0]|0)return;if(a[f+82>>0]|0)return;a[h>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;k=f+272|0;c[k>>2]=(c[k>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function Ln(a,b,d){a=a|0;b=b|0;d=d|0;if(!(Tg(c[d>>2]|0,c[d+4>>2]|0,c[(c[(c[a+12>>2]|0)+104>>2]|0)+(((c[a+16>>2]|0)+-1|0)*20|0)+16>>2]|0)|0))return;Dc(a,c[d>>2]|0);return}function Mn(a,b,d){a=a|0;b=b|0;d=d|0;if((yc(c[a>>2]|0,31497,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function Nn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;j=k;d=c[h>>2]|0;f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){i=Mg(+g[d>>3])|0;L()|0;break}if(!(f&18))i=0;else{i=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0}}else i=c[d>>2]|0;while(0);d=c[h+4>>2]|0;do if(d){f=b[d+8>>1]|0;if((f&514)==514?(a[d+10>>0]|0)==1:0){d=c[d+16>>2]|0;break}if(!(f&1))d=Gg(d,1)|0;else d=0}else d=0;while(0);c[j>>2]=d;Db(i,31408,j);Ra=k;return}function On(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+80|0;n=q+72|0;m=q+64|0;k=q+56|0;l=q;i=c[h>>2]|0;f=b[i+8>>1]|0;switch(a[816+(f&31)>>0]|0){case 2:{f=f&65535;do if(!(f&8)){if(f&4|0){p=i;j=+((c[p>>2]|0)>>>0)+4294967296.0*+(c[p+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else j=+g[i>>3];while(0);g[m>>3]=j;Cb(50,l,32529,m)|0;Lg(l,k,20,1)|0;if(j!=+g[k>>3]){g[n>>3]=j;Cb(50,l,49546,n)|0}if((yc(c[e>>2]|0,l,-1,1,-1)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}Ra=q;return}case 1:{Dc(e,i);Ra=q;return}case 4:{m=mc(i)|0;h=c[h>>2]|0;f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)l=c[h+12>>2]|0;else o=17;do if((o|0)==17){f=f&65535;if(!(f&16)){if(f&1|0){l=0;break}l=Fg(h,1)|0;break}else{i=c[h+12>>2]|0;if(!(f&16384)){l=i;break}l=(c[h>>2]|0)+i|0;break}}while(0);f=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;i=L()|0;k=Sv(f|0,i|0,4,0)|0;n=L()|0;h=c[e>>2]|0;p=c[(c[h+32>>2]|0)+108>>2]|0;o=((p|0)<0)<<31>>31;if((n|0)>(o|0)|(n|0)==(o|0)&k>>>0>p>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;Ra=q;return}p=Sv(f|0,i|0,3,0)|0;o=L()|0;do if(!(o>>>0>0|(o|0)==0&p>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){p=c[14978]|0;o=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=p>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(!f)break;i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}if((l|0)>0){i=0;do{o=m+i|0;p=i<<1;a[f+(p+2)>>0]=a[21744+((d[o>>0]|0)>>>4)>>0]|0;a[f+(p+3)>>0]=a[21744+(a[o>>0]&15)>>0]|0;i=i+1|0}while((i|0)!=(l|0))}p=l<<1;a[f+(p+2)>>0]=39;a[f+(p+3)>>0]=0;a[f>>0]=88;a[f+1>>0]=39;if((yc(c[e>>2]|0,f,-1,1,-1)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=q;return}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=q;return}}while(0);f=c[e>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0){Ra=q;return}if(a[f+82>>0]|0){Ra=q;return}a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f){Ra=q;return}c[f+12>>2]=7;Ra=q;return}case 3:{if(!i){Ra=q;return}if((f&514)==514?(a[i+10>>0]|0)==1:0)p=c[i+16>>2]|0;else o=57;do if((o|0)==57)if(!(f&1)){p=Gg(i,1)|0;break}else{Ra=q;return}while(0);if(!p){Ra=q;return}h=0;f=0;i=0;a:while(1){switch(a[p+h>>0]|0){case 0:break a;case 39:{f=Sv(f|0,i|0,1,0)|0;i=L()|0;break}default:{}}h=h+1|0}f=Sv(f|0,i|0,h|0,0)|0;i=L()|0;k=Sv(f|0,i|0,3,0)|0;m=L()|0;h=c[e>>2]|0;o=c[(c[h+32>>2]|0)+108>>2]|0;n=((o|0)<0)<<31>>31;if((m|0)>(n|0)|(m|0)==(n|0)&k>>>0>o>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;Ra=q;return}o=Sv(f|0,i|0,2,0)|0;n=L()|0;do if(!(n>>>0>0|(n|0)==0&o>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){o=c[14978]|0;n=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(!f)break;i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}a[f>>0]=39;i=a[p>>0]|0;h=f+1|0;if(!(i<<24>>24))i=2;else{k=1;n=0;m=i;l=p;i=2;do{a[h>>0]=m;if((a[l>>0]|0)==39){a[f+i>>0]=39;k=k+2|0}else k=i;n=n+1|0;l=p+n|0;m=a[l>>0]|0;i=k+1|0;h=f+k|0}while(m<<24>>24!=0)}a[h>>0]=39;a[f+i>>0]=0;if((yc(c[e>>2]|0,f,i,1,90)|0)!=18){Ra=q;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=q;return}while(0);f=c[e>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0){Ra=q;return}if(a[f+82>>0]|0){Ra=q;return}a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f){Ra=q;return}c[f+12>>2]=7;Ra=q;return}default:{if((yc(c[e>>2]|0,31171,4,1,0)|0)!=18){Ra=q;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=q;return}}}function Pn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;e=c[a>>2]|0;a=(c[e+32>>2]|0)+40|0;f=c[a>>2]|0;a=c[a+4>>2]|0;d=e+8|0;if(!(b[d>>1]&9216)){c[e>>2]=f;c[e+4>>2]=a;b[d>>1]=4;return}else{Pg(e,f,a);return}}function Qn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a>>2]|0;e=c[(c[d+32>>2]|0)+100>>2]|0;f=((e|0)<0)<<31>>31;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function Rn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a>>2]|0;e=c[(c[d+32>>2]|0)+104>>2]|0;f=((e|0)<0)<<31>>31;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function Sn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;i=c[(c[d>>2]|0)+32>>2]|0;e=c[f>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)A=c[e+16>>2]|0;else B=5;do if((B|0)==5)if(!(g&1)){A=Gg(e,1)|0;break}else return;while(0);if(!A)return;h=c[f>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)z=c[h+12>>2]|0;else B=11;do if((B|0)==11){e=e&65535;if(!(e&16)){if(e&1|0){z=0;break}z=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){z=g;break}z=(c[h>>2]|0)+g|0;break}}while(0);h=f+4|0;e=c[h>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)y=c[e+16>>2]|0;else B=20;do if((B|0)==20)if(!(g&1)){y=Gg(e,1)|0;break}else return;while(0);if(!y)return;if(!(a[y>>0]|0)){Dc(d,c[f>>2]|0);return}h=c[h>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)x=c[h+12>>2]|0;else B=28;do if((B|0)==28){e=e&65535;if(!(e&16)){if(e&1|0){x=0;break}x=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){x=g;break}x=(c[h>>2]|0)+g|0;break}}while(0);h=f+8|0;e=c[h>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)w=c[e+16>>2]|0;else B=37;do if((B|0)==37)if(!(g&1)){w=Gg(e,1)|0;break}else return;while(0);if(!w)return;h=c[h>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)v=c[h+12>>2]|0;else B=43;do if((B|0)==43){e=e&65535;if(!(e&16)){if(e&1|0){v=0;break}v=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){v=g;break}v=(c[h>>2]|0)+g|0;break}}while(0);k=z+1|0;j=((k|0)<0)<<31>>31;e=c[d>>2]|0;if((c[(c[e+32>>2]|0)+108>>2]|0)<=(z|0)){c[d+20>>2]=18;yc(e,31223,-1,1,0)|0;return}u=Sv(k|0,j|0,-1,-1)|0;t=L()|0;a:do if(!(t>>>0>0|(t|0)==0&u>>>0>2147483390)){do if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h)break a}else{e=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){u=c[14978]|0;t=Tv(g|0,h|0,e|0,((e|0)<0)<<31>>31|0)|0;s=L()|0;c[14768]=((s|0)<0|(s|0)==0&t>>>0<=u>>>0)&1}h=Wa[c[29340>>2]&127](e)|0;if(!h)break a;e=Wa[c[29352>>2]&127](h)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0)break;c[14987]=e}while(0);u=z-x|0;b:do if((u|0)>=0){r=v-x|0;s=((r|0)<0)<<31>>31;o=i+108|0;t=x+-1|0;p=~z;q=((p|0)<0)<<31>>31;if((v|0)<=(x|0)){g=0;e=0;while(1){f=A+e|0;i=a[f>>0]|0;do if(i<<24>>24==(a[y>>0]|0)){if(Lu(f,y,x)|0){B=86;break}ew(h+g|0,w|0,v|0)|0;g=g+v|0;f=t+e|0}else B=86;while(0);if((B|0)==86){B=0;a[h+g>>0]=i;g=g+1|0;f=e}e=f+1|0;if((f|0)>=(u|0))break b}}n=0;g=0;e=0;c:while(1){f=A+e|0;i=a[f>>0]|0;do if(i<<24>>24==(a[y>>0]|0)){if(Lu(f,y,x)|0){B=77;break}j=Sv(k|0,j|0,r|0,s|0)|0;l=L()|0;k=Sv(j|0,l|0,-1,-1)|0;f=L()|0;m=c[o>>2]|0;i=((m|0)<0)<<31>>31;if((f|0)>(i|0)|(f|0)==(i|0)&k>>>0>m>>>0){B=87;break c}i=n+1|0;if(!(i&n)){if(mb()|0)break c;n=aw(0,j|0,32)|0;f=L()|0;m=Sv(j|0,l|0,p|0,q|0)|0;f=Sv(m|0,L()|0,n|0,f|0)|0;f=sb(h,f,L()|0)|0;if(!f)break c;else h=f}ew(h+g|0,w|0,v|0)|0;g=g+v|0;m=t+e|0;f=i;k=j;i=l}else B=77;while(0);if((B|0)==77){B=0;a[h+g>>0]=i;g=g+1|0;m=e;f=n;i=j}e=m+1|0;if((m|0)<(u|0)){n=f;j=i}else break b}if((B|0)==87){c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;if(!h)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;do if(!(a[g>>0]|0)){if(a[e+82>>0]|0)break;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)break;c[e+12>>2]=7}while(0);if(!h)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}else{g=0;e=0}while(0);B=z-e|0;ew(h+g|0,A+e|0,B|0)|0;B=g+B|0;a[h+B>>0]=0;if((yc(c[d>>2]|0,h,B,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;if(a[g>>0]|0)return;if(a[e+82>>0]|0)return;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Tn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){h=Mg(+g[f>>3])|0;f=L()|0;j=7;break}if(!(h&18)){f=0;i=0}else{h=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;j=7}}else{h=f;f=c[h+4>>2]|0;h=c[h>>2]|0;j=7}while(0);if((j|0)==7){i=(f|0)>0|(f|0)==0&h>>>0>0;f=i?f:0;i=i?h:0}h=c[d>>2]|0;j=c[(c[h+32>>2]|0)+108>>2]|0;k=((j|0)<0)<<31>>31;if(f>>>0>k>>>0|(f|0)==(k|0)&i>>>0>j>>>0){c[d+20>>2]=18;if(!(b[h+8>>1]&1))return;yc(h,31223,-1,1,0)|0;return}f=h+8|0;if(!((b[f>>1]&9216)==0?!(c[h+24>>2]|0):0))Cg(h);b[f>>1]=16400;c[h+12>>2]=0;c[h>>2]=(i|0)>0?i:0;a[h+10>>0]=1;c[h+16>>2]=0;return}function Un(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k=c[h+4>>2]|0;i=b[k+8>>1]|0;if(-1431655766>>>(i&31)&1|0)return;n=(f|0)==3;if(n?-1431655766>>>(b[(c[h+8>>2]|0)+8>>1]&31)&1|0:0)return;j=c[h>>2]|0;l=b[j+8>>1]&15;f=i&65535;do if(!(f&4)){if(f&8|0){r=Mg(+g[k>>3])|0;L()|0;break}if(!(f&18))r=0;else{r=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0;j=c[h>>2]|0}}else r=c[k>>2]|0;while(0);q=((r|0)<0)<<31>>31;t=(l|16)<<16>>16==16;if(t){f=b[j+8>>1]|0;if((f&2)!=0?(a[j+10>>0]|0)==1:0){i=c[j+12>>2]|0;f=j}else s=14;do if((s|0)==14){f=f&65535;if(!(f&16)){if(f&1|0){i=0;f=j;break}i=Fg(j,1)|0;f=c[h>>2]|0;break}else{i=c[j+12>>2]|0;if(!(f&16384)){f=j;break}i=(c[j>>2]|0)+i|0;f=j;break}}while(0);f=mc(f)|0;if(!f)return;else{p=f;o=i}}else{if(!j)return;f=b[j+8>>1]|0;if((f&514)==514?(a[j+10>>0]|0)==1:0)l=c[j+16>>2]|0;else s=24;do if((s|0)==24)if(!(f&1)){l=Gg(j,1)|0;break}else return;while(0);if(!l)return;if((r|0)<0?(m=a[l>>0]|0,m<<24>>24!=0):0){k=0;f=l;j=m;while(1){i=f+1|0;if((j&255)>191){f=i;while(1){j=a[f>>0]|0;if((j&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=i;j=a[i>>0]|0}i=k+1|0;if(!(j<<24>>24)){p=l;o=i;break}else k=i}}else{p=l;o=0}}if(n){f=c[h+8>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){f=Mg(+g[f>>3])|0;L()|0;s=42;break}if(!(i&18)){i=0;f=0;j=0}else{f=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0;s=42}}else{f=c[f>>2]|0;s=42}while(0);if((s|0)==42){j=((f|0)<0)<<31>>31;h=(f|0)<0;n=Tv(0,0,f|0,j|0)|0;s=L()|0;i=f;f=h?n:f;j=h?s:j}l=i>>>31;i=j}else{i=c[(c[(c[d>>2]|0)+32>>2]|0)+108>>2]|0;l=0;f=i;i=((i|0)<0)<<31>>31}do if((r|0)>=0)if(!r){j=((i|0)>0|(i|0)==0&f>>>0>0)<<31>>31;f=Sv(f|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;j=0;k=0;i=L()|0;break}else{j=Sv(r|0,q|0,-1,-1)|0;k=L()|0;break}else{j=Sv(o|0,((o|0)<0)<<31>>31|0,r|0,q|0)|0;k=L()|0;q=(k|0)<0;h=Sv(f|0,i|0,j|0,k|0)|0;s=L()|0;r=(s|0)>0|(s|0)==0&h>>>0>0;j=q?0:j;k=q?0:k;f=q?(r?h:0):f;i=q?(r?s:0):i}while(0);r=(l|0)==0;m=Tv(j|0,k|0,f|0,i|0)|0;l=L()|0;s=(l|0)<0;m=r?j:s?0:m;l=r?k:s?0:l;n=r?f:s?j:f;k=r?i:s?k:i;if(t){r=Sv(m|0,l|0,n|0,k|0)|0;t=L()|0;f=((o|0)<0)<<31>>31;r=(t|0)>(f|0)|(t|0)==(f|0)&r>>>0>o>>>0;f=Tv(o|0,f|0,m|0,l|0)|0;t=L()|0;s=(t|0)>0|(t|0)==0&f>>>0>0;f=r?(s?f:0):n;t=r?(s?t:0):k;if(t>>>0>0|(t|0)==0&f>>>0>2147483647){if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}else{if((yc(c[d>>2]|0,p+m|0,f,0,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}i=a[p>>0]|0;if(((m|0)!=0|(l|0)!=0)&i<<24>>24!=0){f=p;do{j=f+1|0;if((i&255)>191){f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=j;i=a[j>>0]|0}m=Sv(m|0,l|0,-1,-1)|0;l=L()|0}while(((m|0)!=0|(l|0)!=0)&i<<24>>24!=0);m=f}else m=p;if(i<<24>>24!=0&((n|0)!=0|(k|0)!=0)){f=m;l=n;do{j=f+1|0;if((i&255)>191){f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=j;i=a[j>>0]|0}l=Sv(l|0,k|0,-1,-1)|0;k=L()|0}while(i<<24>>24!=0&((l|0)!=0|(k|0)!=0))}else f=m;f=f-m|0;if((f|0)<0){if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}else{if((yc(c[d>>2]|0,m,f,1,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}function Vn(f,h,i){f=f|0;h=h|0;i=i|0;var j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=Ra;Ra=Ra+16|0;n=q+8|0;o=q;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))p=Ic(f,32)|0;else p=c[h+16>>2]|0;l=c[i>>2]|0;m=l+8|0;f=b[m>>1]&31;k=d[816+f>>0]|0;if((f|16|0)==18){h=a[l+10>>0]|0;f=l+16|0;k=l+12|0;if(!(Lg(c[f>>2]|0,n,c[k>>2]|0,h)|0))h=b[m>>1]|0;else{if(!(Og(c[f>>2]|0,o,c[k>>2]|0,h)|0)){n=o;o=c[n+4>>2]|0;h=l;c[h>>2]=c[n>>2];c[h+4>>2]=o;h=4}else{g[l>>3]=+g[n>>3];h=8}h=b[m>>1]&-3|h;b[m>>1]=h}k=d[816+(h&31)>>0]|0}if(!((p|0)!=0&(k|0)!=5)){Ra=q;return}h=p+16|0;o=h;o=Sv(c[o>>2]|0,c[o+4>>2]|0,1,0)|0;f=L()|0;c[h>>2]=o;c[h+4>>2]=f;h=c[i>>2]|0;f=e[h+8>>1]|0;if((k|0)!=1){do if(!(f&8)){if(f&4|0){i=h;j=+((c[i>>2]|0)>>>0)+4294967296.0*+(c[i+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else j=+g[h>>3];while(0);g[p>>3]=j+ +g[p>>3];a[p+25>>0]=1;Ra=q;return}do if(!(f&4)){if(f&8|0){m=Mg(+g[h>>3])|0;n=L()|0;break}if(!(f&18)){m=0;n=0}else{m=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;n=L()|0}}else{n=h;m=c[n>>2]|0;n=c[n+4>>2]|0}while(0);g[p>>3]=+g[p>>3]+(+(m>>>0)+4294967296.0*+(n|0));o=p+25|0;i=p+24|0;if((a[i>>0]|a[o>>0])<<24>>24){Ra=q;return}h=p+8|0;k=h;f=c[k>>2]|0;k=c[k+4>>2]|0;if((n|0)>-1|(n|0)==-1&m>>>0>4294967295){p=Tv(-1,2147483647,f|0,k|0)|0;l=L()|0;if(((k|0)>0|(k|0)==0&f>>>0>0)&((l|0)<(n|0)|(l|0)==(n|0)&p>>>0<m>>>0))l=26;else l=25}else if((k|0)<0?(l=Tv(1,-2147483648,f|0,k|0)|0,s=L()|0,p=Sv(m|0,n|0,1,0)|0,r=L()|0,(s|0)>(r|0)|(s|0)==(r|0)&l>>>0>p>>>0):0)l=26;else l=25;if((l|0)==25){p=Sv(f|0,k|0,m|0,n|0)|0;r=L()|0;s=h;c[s>>2]=p;c[s+4>>2]=r;Ra=q;return}else if((l|0)==26){a[i>>0]=1;a[o>>0]=1;Ra=q;return}}function Wn(d){d=d|0;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0;j=Ra;Ra=Ra+16|0;f=j+8|0;h=j;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e){Ra=j;return}k=e+16|0;l=c[k+4>>2]|0;if(!((l|0)>0|(l|0)==0&(c[k>>2]|0)>>>0>0)){Ra=j;return}if(a[e+24>>0]|0){c[d+20>>2]=1;yc(c[d>>2]|0,49524,-1,1,-1)|0;Ra=j;return}if(!(a[e+25>>0]|0)){h=e+8|0;f=c[h>>2]|0;h=c[h+4>>2]|0;e=c[d>>2]|0;d=e+8|0;if(!(b[d>>1]&9216)){l=e;c[l>>2]=f;c[l+4>>2]=h;b[d>>1]=4;Ra=j;return}else{Pg(e,f,h);Ra=j;return}}i=+g[e>>3];e=c[d>>2]|0;d=e+8|0;if(!(b[d>>1]&9216))b[d>>1]=1;else Dg(e);g[f>>3]=i;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=j;return}g[e>>3]=i;b[d>>1]=8;Ra=j;return}function Xn(f,h,i){f=f|0;h=h|0;i=i|0;var j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;n=q+8|0;o=q;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))p=Ic(f,32)|0;else p=c[h+16>>2]|0;l=c[i>>2]|0;m=l+8|0;k=b[m>>1]&31;h=d[816+k>>0]|0;if((k|16|0)==18){h=a[l+10>>0]|0;f=l+16|0;k=l+12|0;if(!(Lg(c[f>>2]|0,n,c[k>>2]|0,h)|0))h=b[m>>1]|0;else{if(!(Og(c[f>>2]|0,o,c[k>>2]|0,h)|0)){n=o;o=c[n+4>>2]|0;h=l;c[h>>2]=c[n>>2];c[h+4>>2]=o;h=4}else{g[l>>3]=+g[n>>3];h=8}h=b[m>>1]&-3|h;b[m>>1]=h}h=d[816+(h&31)>>0]|0}if(!((p|0)!=0&(h|0)!=5)){Ra=q;return}o=p+16|0;m=o;m=Sv(c[m>>2]|0,c[m+4>>2]|0,-1,-1)|0;n=L()|0;c[o>>2]=m;c[o+4>>2]=n;if((h|0)==1?(a[p+25>>0]|0)==0:0){h=c[i>>2]|0;f=e[h+8>>1]|0;do if(!(f&4)){if(f&8|0){h=Mg(+g[h>>3])|0;f=L()|0;break}if(!(f&18)){h=0;f=0}else{h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;f=L()|0}}else{f=h;h=c[f>>2]|0;f=c[f+4>>2]|0}while(0);g[p>>3]=+g[p>>3]-(+(h>>>0)+4294967296.0*+(f|0));p=p+8|0;o=p;o=Tv(c[o>>2]|0,c[o+4>>2]|0,h|0,f|0)|0;i=L()|0;c[p>>2]=o;c[p+4>>2]=i;Ra=q;return}h=c[i>>2]|0;f=e[h+8>>1]|0;do if(!(f&8)){if(f&4|0){i=h;j=+((c[i>>2]|0)>>>0)+4294967296.0*+(c[i+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else j=+g[h>>3];while(0);g[p>>3]=+g[p>>3]-j;Ra=q;return}function Yn(a){a=a|0;var d=0,e=0.0,f=0,h=0,i=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)e=0.0;else e=+g[d>>3];d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216))b[a>>1]=1;else Dg(d);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[d>>3]=e;b[a>>1]=8;Ra=i;return}function Zn(a){a=a|0;var d=0,e=0,f=0,h=0.0,i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;i=k+8|0;j=k;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){Ra=k;return}f=d+16|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if(!((f|0)>0|(f|0)==0&e>>>0>0)){Ra=k;return}h=+g[d>>3]/(+(e>>>0)+4294967296.0*+(f|0));d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[i>>3]=h;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){Ra=k;return}g[d>>3]=h;b[e>>1]=8;Ra=k;return}function _n(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=c[a+8>>2]|0;if(!(b[f+8>>1]&8192))a=Ic(a,8)|0;else a=c[f+16>>2]|0;if(!d){if(!a)return}else if(!(a|0?(1431655765>>>(b[(c[e>>2]|0)+8>>1]&31)&1|0)!=0:0))return;f=a;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;d=L()|0;e=a;c[e>>2]=f;c[e+4>>2]=d;return}function $n(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){e=0;f=0}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function ao(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=c[a+8>>2]|0;if(!(b[f+8>>1]&8192))a=Ic(a,8)|0;else a=c[f+16>>2]|0;if(!d){if(!a)return}else if(!(a|0?(1431655765>>>(b[(c[e>>2]|0)+8>>1]&31)&1|0)!=0:0))return;f=a;f=Sv(c[f>>2]|0,c[f+4>>2]|0,-1,-1)|0;d=L()|0;e=a;c[e>>2]=f;c[e+4>>2]=d;return}function bo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0)return;g=c[d+8>>2]|0;if(!(b[g+8>>1]&8192))k=Ic(d,24)|0;else k=c[g+16>>2]|0;if(!k)return;h=k+12|0;i=(c[h>>2]|0)==0;c[h>>2]=c[(c[(c[d>>2]|0)+32>>2]|0)+108>>2];do if(!i){if((e|0)==2){d=f+4|0;e=c[d>>2]|0;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)h=c[e+16>>2]|0;else if(!(g&1)){h=Gg(e,1)|0;e=c[d>>2]|0}else h=0;g=b[e+8>>1]|0;if((g&2)!=0?(a[e+10>>0]|0)==1:0)g=c[e+12>>2]|0;else j=16;do if((j|0)==16){d=g&65535;if(!(d&16)){if(d&1|0){g=0;break}g=Fg(e,1)|0;break}else{g=c[e+12>>2]|0;if(!(d&16384))break;g=(c[e>>2]|0)+g|0;break}}while(0);if(!h)break;else d=h}else{g=1;d=41685}e=k+16|0;h=c[e>>2]|0;i=h+g|0;if(i>>>0>=(c[k+8>>2]|0)>>>0){wb(k,d,g);break}if(g|0){c[e>>2]=i;ew((c[k+4>>2]|0)+h|0,d|0,g|0)|0}}while(0);d=c[f>>2]|0;g=b[d+8>>1]|0;if((g&514)==514?(a[d+10>>0]|0)==1:0){i=c[d+16>>2]|0;e=d}else if(!(g&1)){i=Gg(d,1)|0;e=c[f>>2]|0}else{i=0;e=d}g=b[e+8>>1]|0;if((g&2)!=0?(a[e+10>>0]|0)==1:0)d=c[e+12>>2]|0;else j=34;do if((j|0)==34){g=g&65535;if(!(g&16)){if(g&1|0){d=0;break}d=Fg(e,1)|0;break}else{d=c[e+12>>2]|0;if(!(g&16384))break;d=(c[e>>2]|0)+d|0;break}}while(0);if(!i)return;g=k+16|0;e=c[g>>2]|0;h=e+d|0;if(h>>>0>=(c[k+8>>2]|0)>>>0){wb(k,i,d);return}if(!d)return;c[g>>2]=h;ew((c[k+4>>2]|0)+e|0,i|0,d|0)|0;return}function co(d){d=d|0;var e=0,f=0,g=0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e)return;switch(a[e+20>>0]|0){case 18:{c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}case 7:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}default:{f=e+4|0;g=c[f>>2]|0;if(((g|0)!=0?(a[g+(c[e+16>>2]|0)>>0]=0,(c[e+12>>2]|0)!=0):0)?(a[e+21>>0]&4)==0:0)e=$d(e)|0;else e=c[f>>2]|0;if((yc(c[d>>2]|0,e,-1,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}}function eo(d){d=d|0;var e=0,f=0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e)return;switch(a[e+20>>0]|0){case 18:{c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}case 7:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}default:{f=c[e+16>>2]|0;if(!f)e=0;else{e=e+4|0;a[(c[e>>2]|0)+f>>0]=0;e=c[e>>2]|0}if((yc(c[d>>2]|0,e,-1,1,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}}function fo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0)return;g=c[d+8>>2]|0;if(!(b[g+8>>1]&8192))k=Ic(d,24)|0;else k=c[g+16>>2]|0;if(!k)return;h=c[f>>2]|0;d=b[h+8>>1]|0;if((d&2)!=0?(a[h+10>>0]|0)==1:0)j=c[h+12>>2]|0;else i=9;do if((i|0)==9){d=d&65535;if(!(d&16)){if(d&1|0){j=0;break}j=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(d&16384)){j=g;break}j=(c[h>>2]|0)+g|0;break}}while(0);do if((e|0)==2){h=c[f+4>>2]|0;d=b[h+8>>1]|0;if(d&2?(a[h+10>>0]|0)==1:0){d=c[h+12>>2]|0;break}g=d&65535;if(!(g&16)){if(g&1|0){d=0;break}d=Fg(h,1)|0;break}else{d=c[h+12>>2]|0;if(!(g&16384))break;d=(c[h>>2]|0)+d|0;break}}else d=1;while(0);d=d+j|0;g=k+16|0;h=c[g>>2]|0;if((h|0)>(d|0)){f=h-d|0;c[g>>2]=f;e=c[k+4>>2]|0;fw(e|0,e+d|0,f|0)|0;if(c[g>>2]|0)return}else c[g>>2]=0;c[k+12>>2]=0;return}function go(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=Ra;Ra=Ra+368|0;F=J+16|0;r=J;q=J+356|0;G=J+336|0;H=J+60|0;u=J+32|0;I=c[(c[f>>2]|0)+32>>2]|0;h=c[i>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){B=c[h+16>>2]|0;break}if(!(j&1))B=Gg(h,1)|0;else B=0}else B=0;while(0);h=c[i+12>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){t=c[h+16>>2]|0;break}if(!(j&1))t=Gg(h,1)|0;else t=0}else t=0;while(0);h=c[i+16>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){y=c[h+16>>2]|0;break}if(!(j&1))y=Gg(h,1)|0;else y=0}else y=0;while(0);h=c[i+20>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){x=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))x=0;else{x=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else x=c[h>>2]|0;while(0);h=c[i+24>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){A=c[h+16>>2]|0;break}if(!(j&1))A=Gg(h,1)|0;else A=0}else A=0;while(0);h=c[i+28>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){z=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))z=0;else{z=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else z=c[h>>2]|0;while(0);h=c[i+32>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){l=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))l=0;else{l=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else l=c[h>>2]|0;while(0);C=I+312|0;D=c[C>>2]|0;if((x|0)<0|((B|0)==0|(y|0)==0|(A|0)==0)){Ra=J;return}m=c[I+20>>2]|0;n=(m|0)>0;if(n){j=c[I+16>>2]|0;h=0;do{k=c[j+(h<<4)+4>>2]|0;if(k|0)c[(c[k+4>>2]|0)+4>>2]=c[k>>2];h=h+1|0}while((h|0)!=(m|0))}p=Sd(I,y,t)|0;if(!p){Ra=J;return}if((x|0)>=(b[p+42>>1]|0)){Ra=J;return}w=c[(c[p+4>>2]|0)+(x<<4)>>2]|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;s=G+8|0;c[s>>2]=(x|0)==(b[p+40>>1]|0)?-1:x;c[C>>2]=0;c[q>>2]=0;o=(l|0)==0;if(o){a:do if(t){j=m+-1|0;if(n){h=j;m=(c[I+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){v=a[k>>0]|0;j=(d[208+(v&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(j|0)!=0)){l=t;do{k=k+1|0;l=l+1|0;v=a[k>>0]|0;j=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!h)break;j=h+-1|0;if((h|0)>0){h=j;m=m+-16|0}else{h=j;break a}}h=109-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!h){j=t;k=50919;do{k=k+1|0;j=j+1|0;v=a[k>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=j}else h=-1;while(0);h=h&255}else h=1;j=I+164|0;a[j>>0]=h;v=H+4|0;gw(v|0,0,272)|0;a[H+200>>0]=2;c[H>>2]=I;c[H+132>>2]=1;h=ud(H,B,q)|0;c[v>>2]=c[q>>2];k=I+81|0;h=(a[k>>0]|0)==0?h:7;if(!h)if(((c[H+228>>2]|0)==0?(c[H+232>>2]|0)==0:0)?(c[H+236>>2]|0)==0:0){c[r>>2]=32306;c[r+4>>2]=103316;c[r+8>>2]=31517;Db(11,32001,r);h=11}else h=0;a[j>>0]=0;n=u+12|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[u>>2]=H;c[u+4>>2]=150;c[u+8>>2]=151;c[u+24>>2]=G;n=G+12|0;c[n>>2]=p;b:do if(!h){q=H+228|0;l=c[q>>2]|0;m=l;do if(l){j=c[l+12>>2]|0;if(j|0){h=H+12|0;c[h>>2]=0;Kk(H,j,0);h=(a[k>>0]|0)==0?c[h>>2]|0:7;if(h|0){E=171;break b}$j(u,j)|0;break}j=c[l>>2]|0;do if(!j){c[n>>2]=m;u=0}else{t=a[y>>0]|0;h=(d[208+(t&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(t<<24>>24==0|(h|0)!=0)){k=y;do{k=k+1|0;j=j+1|0;t=a[k>>0]|0;h=(d[208+(t&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(h|0)!=0))}c[n>>2]=m;if(h|0){u=0;break}m=c[(c[l+4>>2]|0)+(x<<4)>>2]|0;k=H+272|0;h=c[k>>2]|0;c:do if(h|0){l=k;while(1){j=h+12|0;if((c[h>>2]|0)==(m|0))break;h=c[j>>2]|0;if(!h)break c;else l=j}c[l>>2]=c[j>>2];c[j>>2]=c[G>>2];c[G>>2]=h;t=G+4|0;c[t>>2]=(c[t>>2]|0)+1}while(0);d:do if((c[s>>2]|0)<0){l=(c[q>>2]|0)+40|0;h=c[k>>2]|0;if(!h)break;while(1){j=h+12|0;if((c[h>>2]|0)==(l|0))break;h=c[j>>2]|0;if(!h)break d;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[G>>2];c[G>>2]=h;t=G+4|0;c[t>>2]=(c[t>>2]|0)+1}while(0);h=c[q>>2]|0;k=c[h+24>>2]|0;do if(k){j=c[k>>2]|0;if((j|0)<=0)break;h=k+4|0;while(1){k=c[h>>2]|0;if(k|0?_j(u,k)|0:0)break;if((j|0)>1){j=j+-1|0;h=h+20|0}else break}h=c[q>>2]|0}while(0);h=c[h+8>>2]|0;if(h|0)do{k=c[h+40>>2]|0;e:do if(k|0){j=c[k>>2]|0;if((j|0)<=0)break;k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(u,l)|0:0)break e;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}}while(0);h=c[h+20>>2]|0}while((h|0)!=0);h=c[H+232>>2]|0;if(!h){u=1;break}while(1){k=c[h+40>>2]|0;f:do if(k|0){j=c[k>>2]|0;if((j|0)<=0)break;k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(u,l)|0:0)break f;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}}while(0);h=c[h+20>>2]|0;if(!h){u=1;break}}}while(0);h=c[(c[q>>2]|0)+16>>2]|0;if(h|0){q=H+272|0;r=((w|0)!=0)<<31>>31;s=(w|0)==0;t=G+4|0;do{o=c[h+20>>2]|0;if((o|0)>0){p=h+8|0;n=0;do{g:do if(u){m=h+36+(n<<3)|0;if((c[m>>2]|0)!=(x|0))break;j=c[q>>2]|0;if(!j)break;l=q;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break g;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[G>>2];c[G>>2]=j;c[t>>2]=(c[t>>2]|0)+1}while(0);k=c[p>>2]|0;h:do if(k|0){m=a[k>>0]|0;j=(d[208+(m&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(j|0)!=0)){l=y;do{k=k+1|0;l=l+1|0;m=a[k>>0]|0;j=(d[208+(m&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(j|0)!=0))}if(j|0)break;m=c[h+36+(n<<3)+4>>2]|0;do if(!m)j=r;else{if(s)break h;l=a[m>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[208+(d[w>>0]|0)>>0]|0)|0;if(l<<24>>24==0|(j|0)!=0)break;k=w;l=m;do{l=l+1|0;k=k+1|0;K=a[l>>0]|0;j=(d[208+(K&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(K<<24>>24==0|(j|0)!=0))}while(0);if(j|0)break;j=c[q>>2]|0;if(!j)break;l=q;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break h;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[G>>2];c[G>>2]=j;c[t>>2]=(c[t>>2]|0)+1}while(0);n=n+1|0}while((n|0)<(o|0))}h=c[h+4>>2]|0}while((h|0)!=0)}}else{l=H+232|0;h=c[l>>2]|0;if(h|0){k=c[h+40>>2]|0;do if(k){j=c[k>>2]|0;if((j|0)<=0)break;h=k+4|0;while(1){k=c[h>>2]|0;if(k|0?_j(u,k)|0:0)break;if((j|0)>1){j=j+-1|0;h=h+20|0}else break}h=c[l>>2]|0}while(0);h=c[h+36>>2]|0;if(!h)break;_j(u,h)|0;break}h=lo(H,o?t:0)|0;if(h|0){E=171;break b}k=H+236|0;h=c[(c[k>>2]|0)+28>>2]|0;if(h|0)do{j=c[h+12>>2]|0;do if(j|0){if((bd(H,0,j,t)|0)!=(p|0))break;j=c[h+28>>2]|0;if(j|0)mo(H,G,c[j+8>>2]|0,w);no(H,G,c[h+24>>2]|0,w);mo(H,G,c[h+20>>2]|0,w)}while(0);h=c[h+36>>2]|0}while((h|0)!=0);if((c[H+120>>2]|0)==(p|0))no(H,G,c[(c[k>>2]|0)+16>>2]|0,w);oo(u,c[k>>2]|0)}while(0);h=po(f,G,B,A,z)|0;if(h|0)E=171}else E=171;while(0);do if((E|0)==171){if(!(c[v>>2]|0)){c[f+20>>2]=h;j=c[f>>2]|0;if(!(b[j+8>>1]&1))break;i:do switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29){if(!(520028155>>>h&1)){h=50724;break i}h=c[22960+(h<<2)>>2]|0}else h=50724}}while(0);yc(j,h,-1,1,0)|0;break}j=c[i+4>>2]|0;k=c[i+8>>2]|0;j:do if(j){h=b[j+8>>1]|0;do if((h&514)==514){if((a[j+10>>0]|0)!=1)break;j=c[j+16>>2]|0;break j}while(0);if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);k:do if(!k)h=0;else{h=b[k+8>>1]|0;do if((h&514)==514){if((a[k+10>>0]|0)!=1)break;h=c[k+16>>2]|0;break k}while(0);if(h&1){h=0;break}h=Gg(k,1)|0}while(0);K=c[v>>2]|0;c[F>>2]=j;c[F+4>>2]=h;c[F+8>>2]=59952;c[F+12>>2]=K;h=Bb(49618,F)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(H);ro(I,c[G>>2]|0);c[C>>2]=D;Ra=J;return}\nfunction oe(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+48|0;j=r+16|0;n=r+8|0;m=r;p=r+24|0;q=c[a+36>>2]|0;h=c[q>>2]|0;o=(1<<f+d)-(1<<d)|0;if(g&1|0){i=c[h+32>>2]|0;if(!i)h=0;else{h=0;do{if((i|0)!=(q|0))h=b[i+10>>1]|h;i=c[i+4>>2]|0}while((i|0)!=0)}i=o&65535;if(((o&(h&65535)|0)==0?(l=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0,(l|0)>-1):0)?(b[p>>1]=2,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[m>>2]=p,(Ya[f&127](l,13,m)|0)==-1):0){q=5;Ra=r;return q|0}p=~i;f=q+12|0;b[f>>1]=(e[f>>1]|0)&p;q=q+10|0;b[q>>1]=(e[q>>1]|0)&p;q=0;Ra=r;return q|0}h=c[h+32>>2]|0;i=(h|0)==0;if(!(g&4)){a:do if(!i){while(1){if(o&(e[h+12>>1]|0)|0){h=5;i=33;break}if(o&(e[h+10>>1]|0)|0){h=5;i=33;break}h=c[h+4>>2]|0;if(!h)break a}if((i|0)==33){Ra=r;return h|0}}while(0);h=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0;if((h|0)>-1?(b[p>>1]=1,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[j>>2]=p,(Ya[f&127](h,13,j)|0)==-1):0){q=5;Ra=r;return q|0}q=q+12|0;b[q>>1]=o|(e[q>>1]|0);q=0;Ra=r;return q|0}else{b:do if(i)h=0;else{i=0;while(1){if(o&(e[h+12>>1]|0)|0){h=5;break}i=b[h+10>>1]|i;h=c[h+4>>2]|0;if(!h){h=i;break b}}Ra=r;return h|0}while(0);if(((o&(h&65535)|0)==0?(k=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0,(k|0)>-1):0)?(b[p>>1]=0,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[n>>2]=p,(Ya[f&127](k,13,n)|0)==-1):0){q=5;Ra=r;return q|0}q=q+10|0;b[q>>1]=o|(e[q>>1]|0);q=0;Ra=r;return q|0}return 0}function pe(a){a=a|0;return}function qe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=a+36|0;f=c[e>>2]|0;if(!f)return 0;g=c[f>>2]|0;d=g+32|0;while(1){h=c[d>>2]|0;if((h|0)==(f|0))break;else d=h+4|0}c[d>>2]=c[f+4>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}c[e>>2]=0;f=g+28|0;h=(c[f>>2]|0)+-1|0;c[f>>2]=h;if(h|0)return 0;if(b|0?(c[g+12>>2]|0)>-1:0)Wa[c[2532>>2]&127](c[g+8>>2]|0)|0;Ae(a);return 0}function re(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=0;return 0}function se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function te(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+192|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;h=j+104|0;d=j+28|0;if(b[a+18>>1]&128){Ra=j;return}if(Xa[c[2400>>2]&255](c[a+12>>2]|0,d)|0){c[e>>2]=c[a+32>>2];Db(28,31582,e);Ra=j;return}switch(c[d+16>>2]|0){case 0:{c[f>>2]=c[a+32>>2];Db(28,31606,f);Ra=j;return}case 1:{e=a+8|0;if(!(c[e>>2]|0)){Ra=j;return}d=a+32|0;if(!(Xa[c[2388>>2]&255](c[d>>2]|0,h)|0)){a=(c[e>>2]|0)+8|0;if((c[a+4>>2]|0)==0?(c[a>>2]|0)==(c[h+72>>2]|0):0){Ra=j;return}}c[i>>2]=c[d>>2];Db(28,31662,i);Ra=j;return}default:{c[g>>2]=c[a+32>>2];Db(28,31635,g);Ra=j;return}}}function ue(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=d;d=Mu(a,b,f)|0;Ra=e;return d|0}function ve(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+576|0;g=j+552|0;h=j+536|0;e=j+528|0;k=j+520|0;f=j;c[k>>2]=b;Cb(512,f,31408,k)|0;b=Eu(f)|0;a:do if((b|0)>0)while(1){if((a[f+b>>0]|0)==47)break a;if((b|0)>1)b=b+-1|0;else{i=5;break}}else i=5;while(0);if((i|0)==5)if((a[f>>0]|0)==47)b=1;else{a[f>>0]=46;b=1}a[f+b>>0]=0;while(1){b=Ya[c[2340>>2]&127](f,524288,420)|0;if((b|0)<0){k=uu()|0;if((c[k>>2]|0)!=4){i=14;break}}else{if((b|0)>2){i=13;break}Wa[c[2352>>2]&127](b)|0;c[e>>2]=f;c[e+4>>2]=b;Db(28,31900,e);if((Ya[c[2340>>2]&127](31943,0,0)|0)<0){b=-1;i=14;break}}}if((i|0)==13){c[d>>2]=b;k=0;Ra=j;return k|0}else if((i|0)==14){c[d>>2]=b;c[h>>2]=31984;c[h+4>>2]=36187;c[h+8>>2]=31517;Db(14,32001,h);i=uu()|0;i=c[i>>2]|0;k=dv(i)|0;c[g>>2]=36187;c[g+4>>2]=i;c[g+8>>2]=31807;c[g+12>>2]=f;c[g+16>>2]=k;Db(14,31953,g);k=14;Ra=j;return k|0}return 0}function we(){return Ka(30)|0}function xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+96|0;h=k;i=k+8|0;j=(d|0)!=0;f=j?d:420;g=b|524288;while(1){e=Ya[c[2340>>2]&127](a,g,f)|0;if((e|0)<0){l=uu()|0;if((c[l>>2]|0)!=4){a=13;break}}else{if((e|0)>2){a=7;break}Wa[c[2352>>2]&127](e)|0;c[h>>2]=a;c[h+4>>2]=e;Db(28,31900,h);if((Ya[c[2340>>2]&127](31943,b,d)|0)<0){e=-1;a=13;break}}}if((a|0)==7){if(!j){l=e;Ra=k;return l|0}if(((Xa[c[2400>>2]&255](e,i)|0)==0?(c[i+36>>2]|0)==0:0)?(c[i+12>>2]&511|0)!=(d|0):0)Xa[c[2508>>2]&255](e,d)|0;l=e;Ra=k;return l|0}else if((a|0)==13){Ra=k;return e|0}return 0}function ye(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=Ra;Ra=Ra+112|0;j=k+80|0;i=k;a[d>>0]=0;e=c[14771]|0;if(!(c[672]|0)){g=Ca(32077)|0;c[672]=g}if(!(c[673]|0)){g=Ca(32091)|0;c[673]=g}f=i+12|0;g=e;e=0;while(1){if(((g|0?(Xa[c[2388>>2]&255](g,i)|0)==0:0)?(c[f>>2]&61440|0)==16384:0)?(Xa[c[2364>>2]&255](g,3)|0)==0:0)break;if(e>>>0>5){h=11;break}g=c[2688+(e<<2)>>2]|0;e=e+1|0}if((h|0)==11){j=6410;Ra=k;return j|0}f=d+(b+-2)|0;e=0;while(1){Fb(8,i);a[f>>0]=0;l=i;m=c[l>>2]|0;l=c[l+4>>2]|0;c[j>>2]=g;h=j+8|0;c[h>>2]=m;c[h+4>>2]=l;c[j+16>>2]=0;Cb(b,d,32037,j)|0;if(e>>>0>10|(a[f>>0]|0)!=0){e=1;h=16;break}if(!(Xa[c[2364>>2]&255](d,0)|0))e=e+1|0;else{e=0;h=16;break}}if((h|0)==16){Ra=k;return e|0}return 0}function ze(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=Ra;Ra=Ra+80|0;l=m+48|0;i=m+24|0;h=m+16|0;k=m;f=m+56|0;b[f+2>>1]=0;c[f+4>>2]=128;c[f+8>>2]=1;b[f>>1]=1;o=c[606]|0;g=e+12|0;n=c[g>>2]|0;c[k>>2]=f;if(Ya[o&127](n,12,k)|0){o=3850;Ra=m;return o|0}a:do switch(b[f>>1]|0){case 2:{if(a[e+22>>0]|0){a[e+23>>0]=1;o=1288;Ra=m;return o|0}d=d+8|0;f=c[(c[(c[d>>2]|0)+40>>2]|0)+12>>2]|0;if((f|0)>-1?(b[k>>1]=1,b[k+2>>1]=0,c[k+4>>2]=128,c[k+8>>2]=1,o=c[606]|0,c[h>>2]=k,(Ya[o&127](f,13,h)|0)==-1):0){o=5;Ra=m;return o|0}f=c[g>>2]|0;do{g=Xa[c[2412>>2]&255](f,3)|0;if((g|0)>=0){j=12;break}o=uu()|0}while((c[o>>2]|0)==4);if((j|0)==12?(g|0)==0:0)break a;n=c[e+8>>2]|0;l=uu()|0;l=c[l>>2]|0;o=dv(l)|0;c[i>>2]=36954;c[i+4>>2]=l;c[i+8>>2]=31726;c[i+12>>2]=(n|0)==0?59952:n;c[i+16>>2]=o;Db(4618,31953,i);o=4618;Ra=m;return o|0}case 1:{o=5;Ra=m;return o|0}default:d=d+8|0}while(0);d=c[(c[(c[d>>2]|0)+40>>2]|0)+12>>2]|0;if((d|0)>-1){b[k>>1]=0;b[k+2>>1]=0;c[k+4>>2]=128;c[k+8>>2]=1;o=c[606]|0;c[l>>2]=k;d=(Ya[o&127](d,13,l)|0)==-1;d=d?5:0}else d=0;o=d;Ra=m;return o|0}function Ae(a){a=a|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+32|0;m=n;l=c[(c[a+8>>2]|0)+40>>2]|0;if(!l){Ra=n;return}if(c[l+28>>2]|0){Ra=n;return}f=Va[c[2640>>2]&127]()|0;f=(f|0)<32768?1:(f|0)/32768|0;h=l+20|0;if(!(b[h>>1]|0))d=l+24|0;else{i=l+12|0;d=l+24|0;j=l+16|0;g=0;do{do if((c[i>>2]|0)<=-1){k=c[(c[d>>2]|0)+(g<<2)>>2]|0;if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{o=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xa[c[2616>>2]&255](c[(c[d>>2]|0)+(g<<2)>>2]|0,c[j>>2]|0)|0;while(0);g=g+f|0}while((g|0)<(e[h>>1]|0))}d=c[d>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);f=l+12|0;d=c[f>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){if(!a)d=0;else d=c[a+32>>2]|0;a=uu()|0;a=c[a>>2]|0;o=dv(a)|0;c[m>>2]=36897;c[m+4>>2]=a;c[m+8>>2]=31695;c[m+12>>2]=(d|0)==0?59952:d;c[m+16>>2]=o;Db(4106,31953,m)}c[f>>2]=-1}c[(c[l>>2]|0)+40>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);Ra=n;return}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);Ra=n;return}}function Be(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=Ra;Ra=Ra+32|0;e=f;b=a+12|0;d=c[b>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){g=c[a+32>>2]|0;h=uu()|0;h=c[h>>2]|0;d=dv(h)|0;c[e>>2]=34584;c[e+4>>2]=h;c[e+8>>2]=31695;c[e+12>>2]=(g|0)==0?59952:g;c[e+16>>2]=d;Db(4106,31953,e)}c[b>>2]=-1}b=c[a+28>>2]|0;if(!b){b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}return 0}function Ce(a,b){a=a|0;b=b|0;return 0}function De(a,b){a=a|0;b=b|0;return 0}function Ee(a,b){a=a|0;b=b|0;c[b>>2]=0;return 0}function Fe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=Ra;Ra=Ra+32|0;f=g;e=b+24|0;d=b+16|0;do if(a[d>>0]|0){if((Wa[c[2568>>2]&127](c[e>>2]|0)|0)>=0){a[d>>0]=0;break}d=uu()|0;d=c[d>>2]|0;if((d|0)!=2)c[b+20>>2]=d}while(0);d=c[e>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+12|0;e=c[d>>2]|0;if((e|0)>-1){if(Wa[c[2352>>2]&127](e)|0){h=c[b+32>>2]|0;i=uu()|0;i=c[i>>2]|0;e=dv(i)|0;c[f>>2]=34584;c[f+4>>2]=i;c[f+8>>2]=31695;c[f+12>>2]=(h|0)==0?59952:h;c[f+16>>2]=e;Db(4106,31953,f)}c[d>>2]=-1}d=c[b+28>>2]|0;if(!d){d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}return 0}function Ge(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+24>>2]|0;f=b+16|0;if(a[f>>0]|0){a[f>>0]=d;Oa(e|0,0)|0;b=0;return b|0}e=Xa[c[2556>>2]&255](e,511)|0;if((e|0)>=0){a[f>>0]=d;b=e;return b|0}d=uu()|0;d=c[d>>2]|0;switch(d|0){case 1:{e=3;break}case 37:case 4:case 16:case 110:case 11:case 13:case 17:{b=5;return b|0}default:e=3850}c[b+20>>2]=d;b=e;return b|0}function He(b,e){b=b|0;e=e|0;var f=0,g=0;f=c[b+24>>2]|0;g=b+16|0;if((d[g>>0]|0|0)==(e|0)){b=0;return b|0}if((e|0)==1){a[g>>0]=1;b=0;return b|0}if((Wa[c[2568>>2]&127](f)|0)>=0){a[g>>0]=0;b=0;return b|0}e=uu()|0;e=c[e>>2]|0;if((e|0)==2){b=0;return b|0}c[b+20>>2]=e;b=2058;return b|0}function Ie(a,b){a=a|0;b=b|0;a=(Xa[c[2364>>2]&255](c[a+24>>2]|0,0)|0)==0&1;c[b>>2]=a;return 0}function Je(a,b){a=a|0;b=b|0;return 29744}function Ke(a,b){a=a|0;b=b|0;return 29820}function Le(a,b){a=a|0;b=b|0;var d=0;if((b|0)==3082)return;if((b&251|4|0)!=14)return;b=c[a>>2]|0;d=c[b+68>>2]|0;if(!d)b=0;else b=Ya[d&127](b,0,0)|0;c[a+72>>2]=b;return}function Me(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=Ra;Ra=Ra+96|0;h=f+72|0;g=c[b+108>>2]|0;c[h+4>>2]=f;c[h>>2]=b;c[h+8>>2]=70;c[h+12>>2]=g;c[h+16>>2]=0;g=h+20|0;a[g>>0]=0;a[h+21>>0]=1;tb(h,d,e);e=yb(h)|0;if((a[g>>0]|0)!=7){Ra=f;return e|0}d=b+81|0;if(a[d>>0]|0){Ra=f;return e|0}if(a[b+82>>0]|0){Ra=f;return e|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){Ra=f;return e|0}c[d+12>>2]=7;Ra=f;return e|0}function Ne(a,d){a=a|0;d=d|0;var e=0,f=0;e=c[a+260>>2]|0;do if(e|0){f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;break}else{Dg(e);break}}while(0);if((d|0)==3082)return;if((d&251|4|0)!=14)return;d=c[a>>2]|0;e=c[d+68>>2]|0;if(!e)d=0;else d=Ya[e&127](d,0,0)|0;c[a+72>>2]=d;return}function Oe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;d=h+4|0;f=c[b>>2]|0;g=f+16|0;if(c[(c[g>>2]|0)+20>>2]|0){g=0;Ra=h;return g|0}if(a[b+199>>0]|0){g=0;Ra=h;return g|0}e=Pe(c[f>>2]|0,0,f,d,0,542)|0;if(e|0){cd(b,32157,h);c[b+12>>2]=e;g=1;Ra=h;return g|0}e=c[d>>2]|0;c[(c[g>>2]|0)+20>>2]=e;if((Ud(e,c[f+92>>2]|0,-1,0)|0)==7){Fc(f);g=1;Ra=h;return g|0}else{g=0;Ra=h;return g|0}return 0}function Pe(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+128|0;p=J+104|0;D=J+120|0;A=J+116|0;H=J;G=(f|0)==0;if(!G){k=(a[f>>0]|0)==0;if(Bu(f,32227)|0)if(k)B=4;else{k=0;B=5}else B=6}else B=4;if((B|0)==4)if((a[g+80>>0]|0)==2){k=1;B=6}else{k=1;B=5}if((B|0)==5)if(!(j&128)){F=0;E=i}else B=6;if((B|0)==6){F=1;E=i|2}C=(j&256|0)!=0&(F|k)?j&-769|512:j;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](48)|0;if(!i){h=7;Ra=J;return h|0}else I=i}else{i=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;l=59064;j=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&j>>>0>0){I=c[14978]|0;z=Tv(j|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&z>>>0<=I>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(!j){h=7;Ra=J;return h|0}i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;I=j}else I=j}l=I+4|0;s=l+44|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(s|0));c[I>>2]=g;c[I+32>>2]=I;c[I+36>>2]=1;a:do if(!k?!((C&131072|0)==0|F&(C&64|0)==0):0){if(G)k=0;else k=(Eu(f)|0)&1073741823;l=k+1|0;m=(c[e+8>>2]|0)+1|0;k=(m|0)>(l|0)?m:l;z=Sv(k|0,0,-1,-1)|0;y=L()|0;do if(!(y>>>0>0|(y|0)==0&z>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](k)|0;a[I+9>>0]=1;if(!k)break;else n=k}else{j=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;k=59064;i=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&i>>>0>0){z=c[14978]|0;y=Tv(i|0,k|0,j|0,((j|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(!i){B=33;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;a[I+9>>0]=1;n=i}if(!F){a[n>>0]=0;k=Za[c[e+36>>2]&127](e,f,m,n)|0;if(k|0){if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{h=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=k;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=k;Ra=J;return h|0}}}else ew(n|0,f|0,l|0)|0;j=c[14822]|0;b:do if(!j)j=0;else{while(1){k=c[j>>2]|0;if((Bu(n,c[k+168>>2]|0)|0)==0?(c[k>>2]|0)==(e|0):0)break;j=c[j+68>>2]|0;if(!j){j=0;break b}}k=c[g+20>>2]|0;c:do if((k|0)>0){l=c[g+16>>2]|0;while(1){i=k;k=k+-1|0;z=c[l+(k<<4)+4>>2]|0;if(z|0?(c[z+4>>2]|0)==(j|0):0)break;if((i|0)<=1)break c}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{h=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=19;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=19;Ra=J;return h|0}}while(0);c[I+4>>2]=j;z=j+64|0;c[z>>2]=(c[z>>2]|0)+1}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{z=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!j){B=69;break a}if(!(a[I+9>>0]|0))break a;else{B=213;break a}}else B=33;while(0);if((B|0)==33)a[I+9>>0]=1;if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=7;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=7;Ra=J;return h|0}}else B=69;while(0);d:do if((B|0)==69){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](84)|0;if(!j)k=7;else B=80}else{k=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){z=c[14978]|0;y=Tv(i|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}j=Wa[c[29340>>2]&127](k)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;B=80}else B=80}else k=7}do if((B|0)==80){l=j+4|0;s=l+80|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(s|0));y=E&1;z=(y|0)!=0;c[D>>2]=4096;s=e+4|0;u=c[s>>2]|0;u=((u|0)>72?u:72)+7&-8;c[j>>2]=0;do if(!(E&2))if(!G)if(a[f>>0]|0){o=e+8|0;m=(c[o>>2]|0)+1|0;k=m<<1;B=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;x=L()|0;if(!(x>>>0>0|(x|0)==0&B>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](k)|0;if(!k){k=7;B=229;break}else i=k}else{l=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;k=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&k>>>0>0){B=c[14978]|0;x=Tv(k|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&x>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](l)|0;if(!i){k=7;B=229;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}a[i>>0]=0;k=Za[c[e+36>>2]&127](e,f,m,i)|0;n=(Eu(i)|0)&1073741823;m=f+(((Eu(f)|0)&1073741823)+1)|0;if(!(a[m>>0]|0))l=m;else{l=m;do{l=l+(((Eu(l)|0)&1073741823)+1)|0;l=l+(((Eu(l)|0)&1073741823)+1)|0}while((a[l>>0]|0)!=0)}if(!k){if((n+8|0)<=(c[o>>2]|0)){x=0;r=l+1-m|0;p=m;q=1;B=119;break}c[p>>2]=31984;c[p+4>>2]=55390;c[p+8>>2]=31517;Db(14,32001,p);k=14}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);B=229;break}else{B=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);B=229;break}}else{k=7;B=229}}else{x=0;r=0;p=0;i=0;n=0;q=1;B=119}else{f=0;x=0;r=0;p=0;i=0;n=0;q=0;B=119}else if(!G)if(a[f>>0]|0){m=(Eu(f)|0)+1|0;B=Sv(m|0,0,-1,-1)|0;x=L()|0;if(x>>>0>0|(x|0)==0&B>>>0>2147483390){k=7;B=229}else{if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](m)|0;if(!k){k=7;B=229;break}}else{k=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){B=c[14978]|0;x=Tv(i|0,l|0,k|0,((k|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&x>>>0<=B>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){k=7;B=229;break}i=Wa[c[29352>>2]&127](k)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}ew(k|0,f|0,m|0)|0;f=0;x=1;r=0;p=0;i=k;n=(Eu(k)|0)&1073741823;q=0;B=119}}else{x=1;r=0;p=0;i=0;n=0;q=1;B=119}else{f=0;x=1;r=0;p=0;i=0;n=0;q=0;B=119}while(0);e:do if((B|0)==119){o=(u<<1)+17+(n*3|0)+r+((c[s>>2]|0)+279&-8)|0;w=Sv(o|0,0,-1,-1)|0;v=L()|0;do if(!(v>>>0>0|(v|0)==0&w>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;if(!k)break;else w=k}else{k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){w=c[14978]|0;v=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;t=L()|0;c[14768]=((t|0)<0|(t|0)==0&v>>>0<=w>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l)break;k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;w=l}else w=l}gw(w|0,0,o|0)|0;t=w+212|0;c[t>>2]=w+224;k=w+272|0;v=w+60|0;c[v>>2]=k;k=k+((c[s>>2]|0)+7&-8)|0;c[w+68>>2]=k;k=k+u|0;c[w+64>>2]=k;k=k+u|0;m=w+168|0;c[m>>2]=k;do if(i|0){l=n+1|0;o=w+172|0;c[o>>2]=k+(r+l);ew(k|0,i|0,n|0)|0;if(r|0)ew((c[m>>2]|0)+l|0,p|0,r|0)|0;ew(c[o>>2]|0,i|0,n|0)|0;l=(c[o>>2]|0)+n|0;k=32236;s=l+10|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(s|0));s=(c[o>>2]|0)+(n+9)|0;u=w+220|0;c[u>>2]=s;ew(s|0,i|0,n|0)|0;u=(c[u>>2]|0)+n|0;a[u>>0]=a[32246]|0;a[u+1>>0]=a[32247]|0;a[u+2>>0]=a[32248]|0;a[u+3>>0]=a[32249]|0;a[u+4>>0]=a[32250]|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{u=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[w>>2]=e;c[w+144>>2]=C;f:do if(q?(a[f>>0]|0)!=0:0){c[A>>2]=0;k=_a[c[e+24>>2]&127](e,c[m>>2]|0,c[v>>2]|0,C&556927,A)|0;m=c[A>>2]&1;if(k|0)break;l=c[v>>2]|0;l=Wa[c[(c[l>>2]|0)+48>>2]&127](l)|0;g:do if(!m){do if(!(a[w+12>>0]|0)){B=c[v>>2]|0;if((Wa[c[(c[B>>2]|0)+48>>2]&127](B)|0)&4096|0)break;k=c[v>>2]|0;i=c[(c[k>>2]|0)+44>>2]|0;do if(i){B=Wa[i&127](k)|0;k=(B|0)<65536?B:65536;if((B|0)<32){k=512;break}c[w+148>>2]=k;if(k>>>0<=4096)break g;if(k>>>0>8192){c[D>>2]=8192;break g}else{c[D>>2]=k;break g}}else k=4096;while(0);c[w+148>>2]=k;break g}while(0);c[w+148>>2]=512}while(0);k=f+(((Eu(f)|0)&1073741823)+1)|0;h:do if(!(a[k>>0]|0))k=0;else{while(1){B=Bu(k,32252)|0;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!B)break;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!(a[k>>0]|0)){k=0;break h}}k=(Zm(k,1,0)|0)<<24>>24!=0}while(0);a[w+13>>0]=k&1;i:do if(!(l&8192)){k=f+(((Eu(f)|0)&1073741823)+1)|0;j:do if(a[k>>0]|0){while(1){B=Bu(k,32259)|0;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!B)break;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!(a[k>>0]|0))break j}if((Zm(k,1,0)|0)<<24>>24)break i}while(0);q=m;f=0;B=170;break f}while(0);k=C|1;B=168}else{k=C;B=168}while(0);if((B|0)==168){a[w+16>>0]=1;a[w+17>>0]=4;a[w+13>>0]=1;q=k&1;f=1;B=170}if((B|0)==170){k=Se(w,D,-1)|0;if(!k){p=c[D>>2]|0;r=(x|0)==0;i=x^1;k=r?119:0;n=c[t>>2]|0;l=n;s=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(s|0));o=n+24|0;c[o>>2]=1;l=n+28|0;c[l>>2]=88;a[n+32>>0]=i;a[n+33>>0]=2;c[n+36>>2]=k;c[n+40>>2]=w;k=n+16|0;c[k>>2]=100;c[n+20>>2]=1;m=Ya[c[29424>>2]&127](p,128,i)|0;if(!m)k=7;else{i=c[7357]|0;k=c[k>>2]|0;if((k|0)<=-1){C=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;D=L()|0;k=(c[l>>2]|0)+(c[o>>2]|0)|0;k=Wv(C|0,D|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[i&127](m,k);k=n+44|0;i=c[k>>2]|0;if(i|0)ab[c[29452>>2]&127](i);c[k>>2]=m;c[o>>2]=p;a[w+6>>0]=y^1;c[w+156>>2]=1073741823;a[w+12>>0]=f;a[w+4>>0]=f;a[w+18>>0]=f;a[w+15>>0]=x;a[w+14>>0]=q;a[w+7>>0]=f;do if(!(f<<24>>24)){a[w+8>>0]=1;a[w+9>>0]=0;a[w+10>>0]=2;a[w+11>>0]=10;b[w+140>>1]=88;D=w+160|0;c[D>>2]=-1;c[D+4>>2]=-1;D=c[v>>2]|0;if((Wa[c[(c[D>>2]|0)+48>>2]&127](D)|0)&4096|0){k=512;break}k=c[v>>2]|0;i=c[(c[k>>2]|0)+44>>2]|0;if(!i){k=4096;break}k=Wa[i&127](k)|0;k=(k|0)<32?512:(k|0)<65536?k:65536}else{b[w+140>>1]=88;k=w+160|0;c[k>>2]=-1;c[k+4>>2]=-1;k=512}while(0);c[w+148>>2]=k;if(z|r^1)a[w+5>>0]=((y&255)<<1&255^2)+2<<24>>24;c[w+200>>2]=92;c[w+204>>2]=(c[w+40>>2]|0)==0?74:75;c[j>>2]=w;D=g+48|0;s=c[D+4>>2]|0;l=w+128|0;c[l>>2]=c[D>>2];c[l+4>>2]=s;l=H;s=l+100|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(s|0));k=c[v>>2]|0;i=c[k>>2]|0;if(i|0){k=_a[c[i+8>>2]&127](k,H,100,0,0)|0;switch(k|0){case 0:case 522:break;default:{B=230;break e}}}a[j+16>>0]=E;c[j+4>>2]=g;k=c[j>>2]|0;i=k+176|0;c[i>>2]=117;c[k+180>>2]=j;l=c[k+60>>2]|0;m=c[l>>2]|0;if(!m)l=k;else{Ya[c[m+40>>2]&127](l,15,i)|0;l=c[j>>2]|0}c[I+4>>2]=j;c[j+8>>2]=0;c[j+12>>2]=0;if(a[l+14>>0]|0){E=j+22|0;b[E>>1]=b[E>>1]|1}k=d[H+17>>0]<<16|d[H+16>>0]<<8;m=j+32|0;c[m>>2]=k;do if((k+-512|0)>>>0>65024)B=205;else{if(k+16777215&k|0){B=205;break}k=a[H+20>>0]|0;i=j+22|0;b[i>>1]=b[i>>1]|2;a[j+17>>0]=(d[H+53>>0]<<16|d[H+52>>0]<<24|d[H+54>>0]<<8|d[H+55>>0]|0)!=0&1;i=(d[H+65>>0]<<16|d[H+64>>0]<<24|d[H+66>>0]<<8|d[H+67>>0]|0)!=0&1;B=208}while(0);do if((B|0)==205){c[m>>2]=0;if(G|F){k=0;break}a[j+17>>0]=0;k=0;i=0;B=208}while(0);if((B|0)==208)a[j+18>>0]=i;i=k&255;k=Se(l,m,i)|0;if(k|0){B=230;break e}c[j+36>>2]=(c[m>>2]|0)-i;c[j+64>>2]=1;if(!(a[I+9>>0]|0))break d;c[j+68>>2]=c[14822];c[14822]=j;B=213;break d}}}i=c[v>>2]|0;l=c[i>>2]|0;if(l|0){Wa[c[l+4>>2]&127](i)|0;c[i>>2]=0}l=c[w+208>>2]|0;k:do if(l|0){i=l;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;break k}else{i=Wa[c[29352>>2]&127](l)|0;break}else i=Wa[c[29352>>2]&127](l)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{g=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](w);B=229;break e}else{B=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);B=229;break e}}while(0);if(i)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);k=7;B=229;break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);k=7;B=229;break}else{k=7;B=229}}while(0);if((B|0)==229)if(j)B=230;if((B|0)==230){i=c[j>>2]|0;if(i)Te(i,0)}if(j)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{g=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](I);else{g=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I)}c[h>>2]=0;h=k;Ra=J;return h|0}while(0);l:do if((B|0)==213){m=c[g+20>>2]|0;if((m|0)>0){l=c[g+16>>2]|0;k=0;while(1){i=c[l+(k<<4)+4>>2]|0;if(i|0?a[i+9>>0]|0:0)break;k=k+1|0;if((k|0)>=(m|0))break l}while(1){k=c[i+28>>2]|0;if(!k)break;else i=k}m=c[I+4>>2]|0;if(m>>>0<(c[i+4>>2]|0)>>>0){c[I+24>>2]=i;c[I+28>>2]=0;c[i+28>>2]=I;break}k=i+24|0;l=c[k>>2]|0;m:do if(!l)B=224;else{while(1){if((c[l+4>>2]|0)>>>0>=m>>>0)break;k=l+24|0;i=c[k>>2]|0;if(!i){i=l;B=224;break m}else{g=l;l=i;i=g}}c[I+24>>2]=l;c[I+28>>2]=i;c[l+28>>2]=I}while(0);if((B|0)==224){c[I+24>>2]=0;c[I+28>>2]=i}c[k>>2]=I}}while(0);c[h>>2]=I;k=c[I+4>>2]|0;c[k+4>>2]=c[I>>2];if(!(c[k+48>>2]|0)){h=c[(c[k>>2]|0)+212>>2]|0;c[h+16>>2]=-2e3;g=c[7357]|0;I=c[h+44>>2]|0;h=(c[h+28>>2]|0)+(c[h+24>>2]|0)|0;h=Wv(2048e3,0,h|0,((h|0)<0)<<31>>31|0)|0;L()|0;bb[g&127](I,h)}k=c[(c[j>>2]|0)+60>>2]|0;i=c[k>>2]|0;if(!i){h=0;Ra=J;return h|0}Ya[c[i+40>>2]&127](k,30,j+4|0)|0;h=0;Ra=J;return h|0}function Qe(d){d=d|0;var e=0;e=c[d+8>>2]|0;if(!(a[e>>0]|0))return;a[e>>0]=0;if((b[d+30>>1]|0)<=1)return;Gf(e)|0;return}function Re(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[b+4>>2]|0;b=c[(c[b>>2]|0)+60>>2]|0;d=c[f+396>>2]|0;if(!d){g=0;return g|0}g=f+404|0;e=c[g>>2]|0;if((e|0)<0){g=0;return g|0}if(!(a[f+408>>0]|0))b=Xa[d&255](c[f+400>>2]|0,e)|0;else b=Ya[d&127](c[f+400>>2]|0,e,b)|0;if(!b)d=-1;else d=(c[g>>2]|0)+1|0;c[g>>2]=d;g=b;return g|0}function Se(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+16|0;o=r;p=c[f>>2]|0;if(!((a[e+15>>0]|0)!=0?(c[e+24>>2]|0)!=0:0))l=3;a:do if(((l|0)==3?(m=e+212|0,p|0?(c[(c[m>>2]|0)+12>>2]|0)==0:0):0)?(q=e+152|0,(p|0)!=(c[q>>2]|0)):0){n=o;c[n>>2]=0;c[n+4>>2]=0;if(((a[e+16>>0]|0)!=0?(i=c[e+60>>2]|0,j=c[i>>2]|0,(j|0)!=0):0)?(k=Xa[c[j+24>>2]&255](i,o)|0,(k|0)!=0):0)g=k;else l=8;b:do if((l|0)==8){k=p+8|0;if((c[14813]|0)>=(k|0)?(h=c[14819]|0,(h|0)!=0):0){c[14819]=c[h>>2];n=c[14820]|0;c[14820]=n+-1;c[14821]=(n|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0)c[14983]=i}else{n=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;l=L()|0;if(l>>>0>0|(l|0)==0&n>>>0>2147483390){g=7;break}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h){g=7;break}}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){n=c[14978]|0;l=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&l>>>0<=n>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){g=7;break}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}i=Wa[c[29352>>2]&127](h)|0;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14980]|0)+i|0;c[14980]=i;if(i>>>0>(c[14984]|0)>>>0)c[14984]=i}k=h+p|0;n=k;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;Ff(e);k=c[m>>2]|0;m=k+24|0;do if(c[m>>2]|0){j=k+28|0;n=Ya[c[29424>>2]&127](p,(c[j>>2]|0)+40|0,d[k+32>>0]|0)|0;if(n|0){l=c[7357]|0;i=c[k+16>>2]|0;if((i|0)<=-1){t=Yv(i|0,((i|0)<0)<<31>>31|0,-1024,-1)|0;s=L()|0;i=(c[j>>2]|0)+(c[m>>2]|0)|0;i=Wv(t|0,s|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0}bb[l&127](n,i);i=k+44|0;j=c[i>>2]|0;if(j|0)ab[c[29452>>2]&127](j);c[i>>2]=n;c[m>>2]=p;break}g=h;do if((c[14816]|0)>>>0<=g>>>0)if((c[14817]|0)>>>0>g>>>0){c[14979]=(c[14979]|0)+-1;c[h>>2]=c[14819];c[14819]=h;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;g=7;break b}else{g=Wa[c[29352>>2]&127](h)|0;break}else g=Wa[c[29352>>2]&127](h)|0;while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);g=7;break b}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);g=7;break b}}while(0);j=e+208|0;k=c[j>>2]|0;c:do if(k|0){i=k;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break c}else{i=Wa[c[29352>>2]&127](k)|0;break}else i=Wa[c[29352>>2]&127](k)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[j>>2]=h;t=o;s=c[t>>2]|0;t=c[t+4>>2]|0;o=Sv(p|0,0,-1,-1)|0;t=Sv(o|0,L()|0,s|0,t|0)|0;t=Wv(t|0,L()|0,p|0,0)|0;L()|0;c[e+24>>2]=t;c[q>>2]=p;break a}while(0);c[f>>2]=c[q>>2];t=g;Ra=r;return t|0}while(0);c[f>>2]=c[e+152>>2];h=e+142|0;if((g|0)<0)g=b[h>>1]|0;b[h>>1]=g;t=0;Ra=r;return t|0}function Te(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;h=o;n=c[b+208>>2]|0;f=c[b+136>>2]|0;if(f|0)do{g=f;f=c[f+16>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);l=b+4|0;a[l>>0]=0;do if((e|0)!=0?(0==0?(c[e+32>>2]&2048|0)==0:0):0){c[h>>2]=0;if((((a[b+12>>0]|0)==0?(c[b+24>>2]|0)!=0:0)?(i=c[b+60>>2]|0,j=c[i>>2]|0,(j|0)!=0):0)?(k=Ya[c[j+40>>2]&127](i,20,h)|0,(k|0)!=12):0){if(c[h>>2]|k|0){f=0;break}}else m=14;f=n}else f=0;while(0);k=b+216|0;Pf(c[k>>2]|0,e,d[b+11>>0]|0,c[b+152>>2]|0,f)|0;c[k>>2]=0;Ff(b);if(!(a[b+15>>0]|0)){h=b+64|0;f=c[h>>2]|0;g=c[f>>2]|0;a:do if(g|0){if(!(a[b+7>>0]|0)){f=Xa[c[g+20>>2]&255](f,2)|0;if(!f){f=c[h>>2]|0;g=c[f>>2]|0;m=22}}else m=22;if((m|0)==22)f=Xa[c[g+24>>2]&255](f,b+80|0)|0;switch((f&255)<<24>>24){case 10:case 13:break;default:break a}c[b+40>>2]=f;a[b+16>>0]=6;c[b+204>>2]=(f|0)==0?74:75}while(0);switch(a[b+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[l>>0]|0))uf(b,0,0)|0;break}default:tf(b)|0}vf(b)}else vf(b);f=c[b+64>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}f=c[b+60>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}b:do if(n|0){f=n;do if((c[14816]|0)>>>0<=f>>>0)if((c[14817]|0)>>>0>f>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;n=(c[14820]|0)+1|0;c[14820]=n;c[14821]=(n|0)<(c[14815]|0)&1;break b}else{f=Wa[c[29352>>2]&127](n)|0;break}else f=Wa[c[29352>>2]&127](n)|0;while(0);c[14980]=(c[14980]|0)-f;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{m=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);ab[c[29452>>2]&127](c[(c[b+212>>2]|0)+44>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=o;return}else{n=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=o;return}}function Ue(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=d+40|0;if(c[h>>2]|0){e=0;return e|0}g=a[d+20>>0]|0;if(g<<24>>24){if(g&3){e=0;return e|0}if(b[e+28>>1]&8){e=0;return e|0}}j=d+196|0;c[j>>2]=(c[j>>2]|0)+1;c[e+16>>2]=0;do if(c[d+216>>2]|0){f=Ve(e)|0;if(!f){f=We(d,e,0,0)|0;i=12}}else{if(!((b[e+28>>1]&8)==0?(a[d+16>>0]|0)!=3:0))i=10;if((i|0)==10?(f=Xe(d,1)|0,f|0):0)break;f=Ye(d,e)|0;i=12}while(0);if((i|0)==12)if(!f){j=c[e+12>>2]|0;f=j+8|0;g=e+36|0;d=c[g>>2]|0;if((c[f>>2]|0)==(e|0))c[f>>2]=d;h=c[e+32>>2]|0;i=(h|0)==0;if(i){c[j+4>>2]=d;f=d}else{c[h+36>>2]=d;f=c[g>>2]|0}if(!f){c[j>>2]=h;if(i)a[j+33>>0]=2}else c[f+32>>2]=h;i=e+28|0;b[i>>1]=b[i>>1]&-16|1;if(b[e+30>>1]|0){e=0;return e|0}if(!(a[j+32>>0]|0)){e=0;return e|0}cb[c[29440>>2]&255](c[j+44>>2]|0,c[e>>2]|0,0);e=0;return e|0}switch((f&255)<<24>>24){case 10:case 13:break;default:{e=f;return e|0}}c[h>>2]=f;a[d+16>>0]=6;c[d+204>>2]=75;e=f;return e|0}function Ve(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;r=v;q=c[b+20>>2]|0;s=b+24|0;i=c[s>>2]|0;t=q+96|0;g=c[t>>2]|0;if((g|0)<=0){u=0;Ra=v;return u|0}u=q+92|0;m=c[u>>2]|0;n=i+-1|0;l=0;a:while(1){b:do if((c[m+(l*48|0)+20>>2]|0)>>>0>=i>>>0){h=c[m+(l*48|0)+16>>2]|0;e=c[h>>2]|0;if(n>>>0>=e>>>0)break a;f=c[h+8>>2]|0;if(!f)j=n;else{j=n;k=h;do{e=(j>>>0)/(f>>>0)|0;k=c[k+12+(e<<2)>>2]|0;if(!k)break a;j=j-(G(e,f)|0)|0;f=c[k+8>>2]|0}while((f|0)!=0);h=k;e=c[k>>2]|0}if(e>>>0<4001)if(!(1<<(j&7)&d[h+12+(j>>>3)>>0]))break a;else break;k=j+1|0;e=(j>>>0)%125|0;f=c[h+12+(e<<2)>>2]|0;if(!f)break a;while(1){if((f|0)==(k|0))break b;e=((e+1|0)>>>0)%125|0;f=c[h+12+(e<<2)>>2]|0;if(!f)break a}}while(0);l=l+1|0;if((l|0)>=(g|0)){e=0;p=35;break}}if((p|0)==35){Ra=v;return e|0}e=a[q+5>>0]|0;do if(e<<24>>24!=2){k=q+68|0;h=c[k>>2]|0;c:do if(!(c[h>>2]|0)){do if(e<<24>>24!=4?(o=c[7334]|0,(a[q+21>>0]|0)==0):0){e=c[q>>2]|0;f=h;g=f+72|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));if(o|0){g=o;f=(o|0)>0?o:1020;break}e=_a[c[e+24>>2]&127](e,0,h,8222,0)|0;if(!e)break c;Ra=v;return e|0}else p=22;while(0);if((p|0)==22){e=c[q>>2]|0;f=h;g=f+72|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));g=-1;f=1020}c[h+4>>2]=f;c[h>>2]=29896;c[h+8>>2]=g;c[h+56>>2]=8222;c[h+64>>2]=0;c[h+60>>2]=e}while(0);i=c[b+4>>2]|0;j=q+52|0;f=q+152|0;g=(c[f>>2]|0)+4|0;g=Yv(g|0,((g|0)<0)<<31>>31|0,c[j>>2]|0,0)|0;h=L()|0;e=c[k>>2]|0;q=c[s>>2]|0;a[r>>0]=q>>>24;a[r+1>>0]=q>>>16;a[r+2>>0]=q>>>8;a[r+3>>0]=q;e=_a[c[(c[e>>2]|0)+12>>2]&127](e,r,4,g,h)|0;if(e|0){u=e;Ra=v;return u|0}b=c[k>>2]|0;q=c[f>>2]|0;r=Sv(g|0,h|0,4,0)|0;e=L()|0;e=_a[c[(c[b>>2]|0)+12>>2]&127](b,i,q,r,e)|0;if(!e){e=j;g=c[t>>2]|0;i=c[s>>2]|0;break}else{u=e;Ra=v;return u|0}}else e=q+52|0;while(0);c[e>>2]=(c[e>>2]|0)+1;if((g|0)<=0){u=0;Ra=v;return u|0}e=0;h=0;while(1){f=c[u>>2]|0;if((c[f+(h*48|0)+20>>2]|0)>>>0<i>>>0)f=g;else{e=df(c[f+(h*48|0)+16>>2]|0,i)|0|e;f=c[t>>2]|0}h=h+1|0;if((h|0)>=(f|0))break;else g=f}Ra=v;return e|0}function We(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=Ra;Ra=Ra+48|0;sa=za+32|0;qa=za;k=za+36|0;c[k>>2]=f;R=(h|0)==0;if(!R){c[k>>2]=f;if(!f){ya=0;f=0}else{i=f;f=0;j=k;do{xa=(c[i+24>>2]|0)>>>0>g>>>0;ya=i+16|0;f=f+((xa^1)&1)|0;j=xa?j:ya;i=c[ya>>2]|0;c[j>>2]=i}while((i|0)!=0);ya=c[k>>2]|0}}else{ya=f;f=1}xa=e+192|0;c[xa>>2]=(c[xa>>2]|0)+f;if((c[ya+24>>2]|0)==1){va=c[ya+20>>2]|0;va=(d[va+105>>0]<<16|d[va+104>>0]<<24|d[va+106>>0]<<8|d[va+107>>0])+1|0;xa=ya+4|0;wa=c[xa>>2]|0;oa=va>>>24&255;a[wa+24>>0]=oa;ra=va>>>16&255;a[wa+25>>0]=ra;ua=va>>>8&255;a[wa+26>>0]=ua;va=va&255;a[wa+27>>0]=va;wa=c[xa>>2]|0;a[wa+92>>0]=oa;a[wa+93>>0]=ra;a[wa+94>>0]=ua;a[wa+95>>0]=va;xa=c[xa>>2]|0;a[xa+96>>0]=0;a[xa+97>>0]=46;a[xa+98>>0]=52;a[xa+99>>0]=32}wa=c[e+216>>2]|0;ua=c[e+152>>2]|0;U=d[e+11>>0]|0;va=wa+32|0;f=c[c[va>>2]>>2]|0;xa=wa+52|0;if(!(Lu(xa,f,48)|0))B=0;else B=(c[f+16>>2]|0)+1|0;o=wa+40|0;if(!(b[o>>1]|0)){a:do if(!(c[f+96>>2]|0)){l=wa+43|0;$=20}else{Fb(4,qa);k=wa+43|0;b:do if(!(a[k>>0]|0)){f=c[wa+4>>2]|0;f=Za[c[(c[f>>2]|0)+56>>2]&127](f,4,4,10)|0;switch(f|0){case 0:{$=15;break b}case 5:break b;default:{}}p=f;break a}else $=15;while(0);if(($|0)==15){m=c[qa>>2]|0;i=c[va>>2]|0;f=c[i>>2]|0;j=f+96|0;$=wa+84|0;oa=wa+112|0;c[oa>>2]=(c[oa>>2]|0)+1;c[wa+68>>2]=0;oa=$+1|0;ra=$+2|0;n=$+3|0;l=(d[oa>>0]<<16|d[$>>0]<<24|d[ra>>0]<<8|d[n>>0])+1|0;a[$>>0]=l>>>24;a[oa>>0]=l>>>16;a[ra>>0]=l>>>8;a[n>>0]=l;c[wa+88>>2]=m;i=c[i>>2]|0;a[wa+64>>0]=1;c[xa>>2]=3007e3;n=c[xa+4>>2]|0;l=n+6014e3+(c[xa+8>>2]|0)|0;n=n+3007e3+(c[xa+12>>2]|0)+l|0;l=n+l|0;n=n+(c[xa+20>>2]|0)+l|0;l=l+(c[xa+24>>2]|0)+n|0;n=n+(c[xa+28>>2]|0)+l|0;l=l+(c[xa+32>>2]|0)+n|0;c[wa+92>>2]=l;c[wa+96>>2]=n+m+l;l=i+48|0;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));if((a[k>>0]|0)!=2){ra=c[wa+4>>2]|0;ab[c[(c[ra>>2]|0)+60>>2]&127](ra)}l=i;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));c[j>>2]=0;c[f+128>>2]=0;c[f+104>>2]=0;c[f+108>>2]=-1;c[f+112>>2]=-1;c[f+116>>2]=-1;if(!(a[k>>0]|0)){ra=c[wa+4>>2]|0;Za[c[(c[ra>>2]|0)+56>>2]&127](ra,4,4,9)|0}}l=k;$=20}while(0);if(($|0)==20){if(!(a[l>>0]|0)){ra=c[wa+4>>2]|0;Za[c[(c[ra>>2]|0)+56>>2]&127](ra,3,1,5)|0}b[o>>1]=-1;f=0;do{f=f+1|0;i=gf(wa,qa,1,f)|0}while((i|0)==-1);p=i}if(p|0){g=p;Ra=za;return g|0}}ra=wa+68|0;l=c[ra>>2]|0;c:do if(!l){a[qa>>0]=55;a[qa+1>>0]=127;a[qa+2>>0]=6;a[qa+3>>0]=-126;f=qa+4|0;a[f>>0]=0;a[qa+5>>0]=45;a[qa+6>>0]=-30;a[qa+7>>0]=24;i=qa+8|0;a[i>>0]=ua>>>24;a[qa+9>>0]=ua>>>16;a[qa+10>>0]=ua>>>8;a[qa+11>>0]=ua;j=qa+12|0;oa=c[wa+112>>2]|0;a[j>>0]=oa>>>24;a[qa+13>>0]=oa>>>16;a[qa+14>>0]=oa>>>8;a[qa+15>>0]=oa;k=wa+84|0;if(!oa)Fb(8,k);oa=k;Y=c[oa>>2]|0;oa=c[oa+4>>2]|0;W=qa+16|0;c[W>>2]=Y;c[W+4>>2]=oa;W=c[qa>>2]|0;X=(c[f>>2]|0)+W|0;f=X+W+(c[i>>2]|0)|0;i=(c[j>>2]|0)+X+f|0;f=f+Y+i|0;i=i+oa+f|0;a[qa+24>>0]=f>>>24;a[qa+25>>0]=f>>>16;a[qa+26>>0]=f>>>8;a[qa+27>>0]=f;a[qa+28>>0]=i>>>24;a[qa+29>>0]=i>>>16;a[qa+30>>0]=i>>>8;a[qa+31>>0]=i;c[wa+36>>2]=ua;a[wa+65>>0]=0;c[wa+76>>2]=f;c[wa+80>>2]=i;a[wa+47>>0]=1;i=wa+8|0;f=c[i>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,qa,32,0,0)|0;do if(!f){if((a[wa+48>>0]|0?(q=c[i>>2]|0,r=U>>>2&3,r|0):0)?(s=Xa[c[(c[q>>2]|0)+20>>2]&255](q,r)|0,s|0):0){f=s;break}Y=i;break c}while(0);g=f;Ra=za;return g|0}else Y=wa+8|0;while(0);V=c[Y>>2]|0;W=ua+24|0;X=((W|0)<0)<<31>>31;i=Yv(l|0,0,W|0,X|0)|0;i=Sv(i|0,L()|0,32,0)|0;f=L()|0;oa=(ya|0)==0;d:do if(!oa){q=(B|0)==0;r=V;s=U&3;t=(s|0)==0;u=wa+104|0;v=((ua|0)<0)<<31>>31;p=ya;m=0;o=f;n=i;e:while(1){do if(q)$=47;else{j=p+16|0;if(!(R|(c[j>>2]|0)!=0)){K=0;S=l+1|0;$=49;break}c[qa>>2]=0;ef(wa,c[p+24>>2]|0,qa)|0;k=c[qa>>2]|0;if(k>>>0<B>>>0){$=47;break}f=Yv(k+-1|0,0,W|0,X|0)|0;f=Sv(f|0,L()|0,56,0)|0;i=L()|0;if(((c[u>>2]|0)+-1|0)>>>0>=k>>>0)c[u>>2]=k;C=c[Y>>2]|0;C=_a[c[(c[C>>2]|0)+12>>2]&127](C,c[p+4>>2]|0,ua,f,i)|0;if(C|0){$=45;break e}w=p+28|0;b[w>>1]=b[w>>1]&-65;w=l;x=m;y=j;z=n;A=o}while(0);if(($|0)==47){f=l+1|0;if(R){M=0;T=f;$=50}else{K=c[p+16>>2]|0;S=f;$=49}}if(($|0)==49){M=(K|0)==0?g:0;T=S;$=50}if(($|0)==50){$=0;m=c[p+4>>2]|0;mf(wa,c[p+24>>2]|0,M,m,qa);if(!(o>>>0<4294967295|(o|0)==-1&n>>>0<4294967272)){l=0-n|0;f=_a[c[(c[r>>2]|0)+12>>2]&127](r,qa,l,n,o)|0;if(f|0){E=f;$=63;break}f=Sv(n|0,o|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;j=n+24|0;if(t)k=0;else k=Xa[c[(c[r>>2]|0)+20>>2]&255](r,s)|0;if((j|0)!=0&(k|0)==0){H=j;J=qa+l|0;N=f;O=i;$=55}else F=k}else{H=24;J=qa;N=n;O=o;$=55}if(($|0)==55){$=0;F=_a[c[(c[r>>2]|0)+12>>2]&127](r,J,H,N,O)|0}if(F|0){E=F;$=63;break}f=Sv(n|0,o|0,24,0)|0;i=L()|0;Sv(f|0,i|0,ua|0,v|0)|0;if(!((o|0)>-1|(o|0)==-1&n>>>0>4294967271|(L()|0)<0)){l=-24-n|0;j=_a[c[(c[r>>2]|0)+12>>2]&127](r,m,l,f,i)|0;if(j|0){E=j;$=63;break}f=Sv(f|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;j=ua-l|0;if(t)k=0;else k=Xa[c[(c[r>>2]|0)+20>>2]&255](r,s)|0;if((j|0)!=0&(k|0)==0){G=j;I=m+l|0;P=f;Q=i;$=62}else D=k}else{G=ua;I=m;P=f;Q=i;$=62}if(($|0)==62){$=0;D=_a[c[(c[r>>2]|0)+12>>2]&127](r,I,G,P,Q)|0}f=p+28|0;if(D|0){da=D;$=127;break}z=Sv(n|0,o|0,W|0,X|0)|0;A=L()|0;b[f>>1]=b[f>>1]|64;w=T;x=p;y=p+16|0}p=c[y>>2]|0;if(!p){ma=w;ta=x;Z=z;_=A;break d}else{l=w;m=x;o=A;n=z}}if(($|0)==45){g=C;Ra=za;return g|0}else if(($|0)==63){g=E;Ra=za;return g|0}else if(($|0)==127){Ra=za;return da|0}}else{ma=l;ta=0;Z=i;_=f}while(0);A=(h|0)!=0;if(A){i=wa+104|0;if(c[i>>2]|0){m=(c[wa+36>>2]|0)+24|0;v=nb(m)|0;if(!v){g=7;Ra=za;return g|0}p=c[i>>2]|0;o=(p|0)==1;n=((m|0)<0)<<31>>31;p=Yv(p+-2|0,0,m|0,n|0)|0;p=Sv(p|0,L()|0,48,0)|0;f=L()|0;q=c[Y>>2]|0;f=_a[c[(c[q>>2]|0)+8>>2]&127](q,v,8,o?24:p,o?0:f)|0;o=v+1|0;p=v+2|0;q=v+3|0;c[wa+76>>2]=d[o>>0]<<16|d[v>>0]<<24|d[p>>0]<<8|d[q>>0];r=v+4|0;s=v+5|0;t=v+6|0;u=v+7|0;c[wa+80>>2]=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0];j=c[i>>2]|0;c[i>>2]=0;f:do if(!((f|0)!=0|j>>>0>ma>>>0)){l=v+24|0;do{i=Yv(j+-1|0,0,m|0,n|0)|0;i=Sv(i|0,L()|0,32,0)|0;k=L()|0;f=c[Y>>2]|0;f=_a[c[(c[f>>2]|0)+8>>2]&127](f,v,m,i,k)|0;if(f|0)break f;mf(wa,d[o>>0]<<16|d[v>>0]<<24|d[p>>0]<<8|d[q>>0],d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0],l,qa);f=c[Y>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,qa,24,i,k)|0;j=j+1|0}while(!(j>>>0>ma>>>0|(f|0)!=0))}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](v);else{T=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v)}if(f|0){g=f;Ra=za;return g|0}}z=U&3;do if(!z){i=0;k=0}else{if(a[wa+49>>0]|0){f=c[Y>>2]|0;i=c[(c[f>>2]|0)+44>>2]|0;if(!i){f=4096;i=0}else{i=Wa[i&127](f)|0;U=(i|0)<32;i=(i|0)<65536?i:65536;f=U?512:i;i=U?0:((i|0)<0)<<31>>31}y=Sv(Z|0,_|0,-1,-1)|0;y=Sv(y|0,L()|0,f|0,i|0)|0;v=L()|0;u=Zv(y|0,v|0,f|0,i|0)|0;u=Tv(y|0,v|0,u|0,L()|0)|0;v=L()|0;y=(u|0)==(Z|0)&(v|0)==(_|0);g:do if((v|0)>(_|0)|(v|0)==(_|0)&u>>>0>Z>>>0){s=ta+4|0;t=ta+24|0;w=V;x=((ua|0)<0)<<31>>31;k=0;r=Z;q=_;while(1){p=c[s>>2]|0;mf(wa,c[t>>2]|0,g,p,qa);n=Sv(r|0,q|0,24,0)|0;o=L()|0;if(!((v|0)>(o|0)|(v|0)==(o|0)&u>>>0>n>>>0)){m=Tv(u|0,v|0,r|0,q|0)|0;L()|0;f=_a[c[(c[w>>2]|0)+12>>2]&127](w,qa,m,r,q)|0;if(f|0){ba=f;break}f=Sv(r|0,q|0,m|0,((m|0)<0)<<31>>31|0)|0;i=L()|0;j=24-m|0;l=Xa[c[(c[w>>2]|0)+20>>2]&255](w,z)|0;if((j|0)!=0&(l|0)==0){fa=j;ha=qa+m|0;ia=f;ja=i;$=89}else ca=l}else{fa=24;ha=qa;ia=r;ja=q;$=89}if(($|0)==89){$=0;ca=_a[c[(c[w>>2]|0)+12>>2]&127](w,ha,fa,ia,ja)|0}if(ca|0){ba=ca;break}_=Sv(n|0,o|0,ua|0,x|0)|0;Z=L()|0;if(!((v|0)<(o|0)|(v|0)==(o|0)&u>>>0<=n>>>0|((Z|0)<(v|0)|(Z|0)==(v|0)&_>>>0<u>>>0))){m=Tv(u|0,v|0,n|0,o|0)|0;L()|0;f=_a[c[(c[w>>2]|0)+12>>2]&127](w,p,m,n,o)|0;if(f|0){ba=f;break}f=Sv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;i=L()|0;j=ua-m|0;l=Xa[c[(c[w>>2]|0)+20>>2]&255](w,z)|0;if((j|0)!=0&(l|0)==0){ea=j;ga=p+m|0;ka=f;la=i;$=94}else aa=l}else{ea=ua;ga=p;ka=n;la=o;$=94}if(($|0)==94){$=0;aa=_a[c[(c[w>>2]|0)+12>>2]&127](w,ga,ea,ka,la)|0}if(aa|0){da=aa;$=127;break}r=Sv(r|0,q|0,W|0,X|0)|0;q=L()|0;k=k+1|0;if(!((v|0)>(q|0)|(v|0)==(q|0)&u>>>0>r>>>0))break g}if(($|0)==127){Ra=za;return da|0}g=ba;Ra=za;return g|0}else k=0;while(0);if(!y){i=0;break}}else k=0;i=V;i=Xa[c[(c[i>>2]|0)+20>>2]&255](i,z)|0}while(0);m=wa+47|0;if((a[m>>0]|0)!=0?(pa=wa+16|0,na=c[pa>>2]|0,pa=c[pa+4>>2]|0,(pa|0)>-1|(pa|0)==-1&na>>>0>4294967295):0){l=Yv(k+ma|0,0,W|0,X|0)|0;l=Sv(l|0,L()|0,32,0)|0;j=L()|0;f=(j|0)>(pa|0)|(j|0)==(pa|0)&l>>>0>na>>>0;l=f?l:na;j=f?j:pa;f=c[Y>>2]|0;f=Xa[c[(c[f>>2]|0)+24>>2]&255](f,qa)|0;pa=c[qa+4>>2]|0;if((f|0)==0&((pa|0)>(j|0)|((pa|0)==(j|0)?(c[qa>>2]|0)>>>0>l>>>0:0))){f=c[Y>>2]|0;f=Ya[c[(c[f>>2]|0)+16>>2]&127](f,l,j)|0}if(f|0){c[sa>>2]=c[wa+108>>2];Db(f,32326,sa)}a[m>>0]=0}}else{i=0;k=0}f=c[ra>>2]|0;if((ya|0)!=0&(i|0)==0){l=ya;do{j=f+1|0;if(!(b[l+28>>1]&64))i=0;else{i=ff(wa,j,c[l+24>>2]|0)|0;f=j}l=c[l+16>>2]|0}while((i|0)==0&(l|0)!=0)}j=(i|0)==0;if((k|0)>0&j){l=ta+24|0;while(1){f=f+1|0;i=ff(wa,f,c[l>>2]|0)|0;j=(i|0)==0;if((k|0)>1&j)k=k+-1|0;else{k=f;break}}}else k=f;if(j){b[wa+66>>1]=ua&65280|ua>>>16;c[ra>>2]=k;if(A){f=wa+60|0;m=c[f>>2]|0;c[f>>2]=m+1;c[wa+72>>2]=g;f=c[c[va>>2]>>2]|0;a[wa+64>>0]=1;c[xa>>2]=3007e3;l=c[xa+4>>2]|0;m=m+6014001+l|0;l=l+3007e3+(c[xa+12>>2]|0)+m|0;m=m+k+l|0;l=l+g+m|0;m=m+(c[xa+24>>2]|0)+l|0;l=l+(c[xa+28>>2]|0)+m|0;m=m+(c[xa+32>>2]|0)+l|0;l=l+(c[xa+36>>2]|0)+m|0;c[wa+92>>2]=m;c[wa+96>>2]=l;l=f+48|0;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));if((a[wa+43>>0]|0)!=2){g=c[wa+4>>2]|0;ab[c[(c[g>>2]|0)+60>>2]&127](g)}l=f;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));c[wa+12>>2]=k}}else if(i|0){g=i;Ra=za;return g|0}j=e+88|0;i=c[j>>2]|0;if((i|0)==0|oa){g=0;Ra=za;return g|0}f=ya;while(1){if(i|0)nf(i,c[f+24>>2]|0,c[f+4>>2]|0);f=c[f+16>>2]|0;if(!f){da=0;break}i=c[j>>2]|0}Ra=za;return da|0}function Xe(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+32|0;l=t+16|0;p=t;f=c[d+40>>2]|0;if(f|0){d=f;Ra=t;return d|0}a:do if(!(c[d+216>>2]|0)){k=d+17|0;g=d+13|0;h=d+60|0;i=d+176|0;j=d+180|0;b:while(1){switch(a[k>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:break a}if(a[g>>0]|0){g=7;break}f=c[h>>2]|0;f=Xa[c[(c[f>>2]|0)+28>>2]&255](f,4)|0;switch(f|0){case 0:{g=7;break b}case 5:break;default:{g=36;break b}}if(!(Wa[c[i>>2]&127](c[j>>2]|0)|0)){f=5;g=36;break}}if((g|0)==7){a[k>>0]=4;break}else if((g|0)==36){Ra=t;return f|0}}while(0);do if(!(a[d+7>>0]|0)){j=d+64|0;if(c[c[j>>2]>>2]|0?(a[d+5>>0]|0)!=4:0){i=c[d+60>>2]|0;i=Wa[c[(c[i>>2]|0)+48>>2]&127](i)|0;k=(i&512|0)==0;c:do if(k){g=p;c[g>>2]=-117058087;c[g+4>>2]=-681336544;g=c[d+44>>2]|0;a[p+8>>0]=g>>>24;a[p+9>>0]=g>>>16;a[p+10>>0]=g>>>8;a[p+11>>0]=g;g=d+72|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((f|0)==0&(g|0)==0){g=0;h=0}else{f=Sv(f|0,g|0,-1,-1)|0;h=L()|0;g=c[d+148>>2]|0;h=Wv(f|0,h|0,g|0,0)|0;h=Sv(h|0,L()|0,1,0)|0;g=Yv(h|0,L()|0,g|0,0)|0;h=L()|0}f=c[j>>2]|0;f=_a[c[(c[f>>2]|0)+8>>2]&127](f,l,8,g,h)|0;if(!f)if(!(Lu(l,32352,8)|0)){f=c[j>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,59953,1,g,h)|0;g=19}else g=20;else g=19;if((g|0)==19)switch(f|0){case 0:case 522:{g=20;break}default:{}}do if((g|0)==20){g=i&1024;if(((g|0)==0&(a[d+8>>0]|0)!=0?(m=c[j>>2]|0,n=a[d+10>>0]|0,n<<24>>24):0)?(o=Xa[c[(c[m>>2]|0)+20>>2]&255](m,n&255)|0,o|0):0){f=o;break}o=c[j>>2]|0;f=d+80|0;f=_a[c[(c[o>>2]|0)+12>>2]&127](o,p,12,c[f>>2]|0,c[f+4>>2]|0)|0;if(!f){f=g;break c}}while(0);d=f;Ra=t;return d|0}else f=i&1024;while(0);if(((f|0)==0?(q=c[j>>2]|0,r=a[d+10>>0]|0,r=(r<<24>>24==3?16:0)|r&255,r|0):0)?(s=Xa[c[(c[q>>2]|0)+20>>2]&255](q,r)|0,s|0):0){d=s;Ra=t;return d|0}q=d+72|0;r=c[q+4>>2]|0;s=d+80|0;c[s>>2]=c[q>>2];c[s+4>>2]=r;if((e|0)==0|k^1)break;c[d+44>>2]=0;f=of(d)|0;if(!f)break;Ra=t;return f|0}q=d+72|0;r=c[q+4>>2]|0;s=d+80|0;c[s>>2]=c[q>>2];c[s+4>>2]=r}while(0);g=c[d+212>>2]|0;f=c[g>>2]|0;if(f|0)do{s=f+28|0;b[s>>1]=b[s>>1]&-9;f=c[f+32>>2]|0}while((f|0)!=0);c[g+8>>2]=c[g+4>>2];a[d+16>>0]=4;d=0;Ra=t;return d|0}function Ye(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=Ra;Ra=Ra+16|0;l=t;s=e+60|0;h=c[s>>2]|0;if((c[h>>2]|0)==0?(g=c[e>>2]|0,g=_a[c[g+24>>2]&127](g,0,h,c[e+144>>2]&556897|30,0)|0,g|0):0){s=g;Ra=t;return s|0}k=e+36|0;h=c[k>>2]|0;j=e+24|0;g=c[j>>2]|0;do if(h>>>0<g>>>0){if((c[f+16>>2]|0)==0?(c[f+24>>2]|0)>>>0<=h>>>0:0)break;r=c[e+152>>2]|0;r=Yv(r|0,((r|0)<0)<<31>>31|0,g|0,0)|0;i=L()|0;h=l;c[h>>2]=r;c[h+4>>2]=i;h=c[s>>2]|0;i=c[h>>2]|0;if(i){Ya[c[i+40>>2]&127](h,5,l)|0;g=c[j>>2]|0}c[k>>2]=g}while(0);if(!f){s=0;Ra=t;return s|0}n=e+24|0;o=e+152|0;p=e+104|0;q=e+32|0;r=e+192|0;m=e+88|0;do{e=c[f+24>>2]|0;if(e>>>0<=(c[n>>2]|0)>>>0?(b[f+28>>1]&16)==0:0){g=c[o>>2]|0;h=Yv(g|0,((g|0)<0)<<31>>31|0,e+-1|0,0)|0;i=L()|0;j=(e|0)==1;if(j){k=c[f+20>>2]|0;k=((d[k+105>>0]|0)<<16|(d[k+104>>0]|0)<<24|(d[k+106>>0]|0)<<8|(d[k+107>>0]|0))+1|0;l=f+4|0;g=c[l>>2]|0;w=k>>>24&255;a[g+24>>0]=w;v=k>>>16&255;a[g+25>>0]=v;u=k>>>8&255;a[g+26>>0]=u;k=k&255;a[g+27>>0]=k;g=c[l>>2]|0;a[g+92>>0]=w;a[g+93>>0]=v;a[g+94>>0]=u;a[g+95>>0]=k;g=c[l>>2]|0;a[g+96>>0]=0;a[g+97>>0]=46;a[g+98>>0]=52;a[g+99>>0]=32;g=c[o>>2]|0}else l=f+4|0;k=c[l>>2]|0;w=c[s>>2]|0;g=_a[c[(c[w>>2]|0)+12>>2]&127](w,k,g,h,i)|0;if(j){j=p;h=k+24|0;i=j+16|0;do{a[j>>0]=a[h>>0]|0;j=j+1|0;h=h+1|0}while((j|0)<(i|0))}if(e>>>0>(c[q>>2]|0)>>>0)c[q>>2]=e;c[r>>2]=(c[r>>2]|0)+1;h=c[m>>2]|0;if(h)nf(h,e,c[l>>2]|0)}else g=0;f=c[f+16>>2]|0}while((g|0)==0&(f|0)!=0);Ra=t;return g|0}function Ze(a){a=a|0;var b=0,d=0,e=0;d=a+16|0;a=c[d>>2]|0;if(!a){c[d>>2]=0;return 0}do{b=a;a=c[a>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}}while((a|0)!=0);c[d>>2]=0;return 0}function _e(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=a+40|0;k=l;a:do if((e|0)==0&(f|0)==0|((c[k>>2]|0)!=(e|0)?1:(c[k+4>>2]|0)!=(f|0))){g=c[a+16>>2]|0;if(!g)g=0;else{j=c[a+4>>2]|0;k=((j|0)<0)<<31>>31;h=0;i=0;while(1){h=Sv(h|0,i|0,j|0,k|0)|0;i=L()|0;if((i|0)>(f|0)|(i|0)==(f|0)&h>>>0>e>>>0)break a;g=c[g>>2]|0;if(!g){g=0;break}}}}else g=c[a+48>>2]|0;while(0);k=a+4|0;i=c[k>>2]|0;j=Zv(e|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0;i=i-j|0;h=(i|0)>(d|0)?d:i;ew(b|0,g+4+j|0,h|0)|0;i=d-i|0;b:do if((i|0)>-1){j=b;do{g=c[g>>2]|0;if(!((i|0)!=0&(g|0)!=0))break b;j=j+h|0;b=c[k>>2]|0;h=(i|0)<(b|0)?i:b;ew(j|0,g+4|0,h|0)|0;i=i-b|0}while((i|0)>-1)}while(0);b=(g|0)==0;e=Sv(d|0,((d|0)<0)<<31>>31|0,e|0,f|0)|0;f=L()|0;c[l>>2]=b?0:e;c[l+4>>2]=b?0:f;c[a+48>>2]=g;return 0}function $e(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;I=Ra;Ra=Ra+32|0;G=I;H=a+8|0;g=c[H>>2]|0;if((g|0)>0?(F=Sv(d|0,((d|0)<0)<<31>>31|0,e|0,f|0)|0,D=L()|0,E=((g|0)<0)<<31>>31,(D|0)>(E|0)|(D|0)==(E|0)&F>>>0>g>>>0):0){m=c[a>>2]|0;t=a+4|0;u=c[t>>2]|0;D=H;C=c[D>>2]|0;D=c[D+4>>2]|0;v=a+16|0;g=c[v>>2]|0;w=a+20|0;x=c[w>>2]|0;y=a+24|0;F=y;E=c[F>>2]|0;F=c[F+4>>2]|0;z=a+32|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[G+16>>2]=c[z+16>>2];c[G+20>>2]=c[z+20>>2];A=a+56|0;B=c[A>>2]|0;n=a+60|0;o=c[n>>2]|0;p=a+64|0;q=c[p>>2]|0;r=a+68|0;s=c[r>>2]|0;h=a;i=h+72|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));h=_a[c[o+24>>2]&127](o,q,a,B&556927,0)|0;a:do if(!h){if(g|0){i=u;j=g;k=0;l=0;do{J=Sv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;K=L()|0;h=Tv(E|0,F|0,k|0,l|0)|0;L()|0;i=(K|0)>(F|0)|(K|0)==(F|0)&J>>>0>E>>>0?h:i;h=_a[c[(c[a>>2]|0)+12>>2]&127](a,j+4|0,i,k,l)|0;if(h|0){i=a;break a}k=Sv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;l=L()|0;j=c[j>>2]|0}while((j|0)!=0);do{h=g;g=c[g>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0)}K=_a[c[(c[a>>2]|0)+12>>2]&127](a,b,d,e,f)|0;Ra=I;return K|0}else i=a;while(0);j=c[i>>2]|0;if(j|0){Wa[c[j+4>>2]&127](a)|0;c[i>>2]=0}c[a>>2]=m;c[t>>2]=u;K=H;c[K>>2]=C;c[K+4>>2]=D;c[v>>2]=g;c[w>>2]=x;K=y;c[K>>2]=E;c[K+4>>2]=F;c[z>>2]=c[G>>2];c[z+4>>2]=c[G+4>>2];c[z+8>>2]=c[G+8>>2];c[z+12>>2]=c[G+12>>2];c[z+16>>2]=c[G+16>>2];c[z+20>>2]=c[G+20>>2];c[A>>2]=B;c[n>>2]=o;c[p>>2]=q;c[r>>2]=s;K=h;Ra=I;return K|0}b:do if((d|0)>0){m=a+24|0;n=a+32|0;o=a+4|0;p=a+16|0;i=m;l=d;h=c[i>>2]|0;i=c[i+4>>2]|0;while(1){g=c[n>>2]|0;j=c[o>>2]|0;i=Zv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0;k=j-i|0;k=(l|0)<(k|0)?l:k;if(!i){h=nb(j+4|0)|0;if(!h){g=3082;break}c[h>>2]=0;if(!g)c[p>>2]=h;else c[g>>2]=h;c[n>>2]=h;g=h}ew(g+4+i|0,b|0,k|0)|0;l=l-k|0;h=m;h=Sv(c[h>>2]|0,c[h+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;i=L()|0;K=m;c[K>>2]=h;c[K+4>>2]=i;if((l|0)<=0)break b;else b=b+k|0}Ra=I;return g|0}while(0);c[a+12>>2]=e+d;K=0;Ra=I;return K|0}function af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((b|0)==0&(d|0)==0))return 0;e=a+16|0;b=c[e>>2]|0;if(b|0)do{d=b;b=c[b>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{f=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0);c[e>>2]=0;c[a+12>>2]=0;c[a+32>>2]=0;f=a+24|0;c[f>>2]=0;c[f+4>>2]=0;c[a+48>>2]=0;f=a+40|0;c[f>>2]=0;c[f+4>>2]=0;return 0}function bf(a,b){a=a|0;b=b|0;return 0}function cf(a,b){a=a|0;b=b|0;var d=0;d=a+24|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function df(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!b){m=0;return m|0}e=e+-1|0;a:do if((c[b>>2]|0)>>>0>4e3){l=b;j=b;while(1){i=c[l+8>>2]|0;if(!i)break;h=(e>>>0)/(i>>>0)|0;e=e-(G(h,i)|0)|0;h=l+12+(h<<2)|0;b=c[h>>2]|0;if(!b){if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](512)|0;if(!b){m=17;break}}else{b=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){l=c[14978]|0;k=Tv(f|0,g|0,b|0,((b|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=l>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){m=17;break}f=Wa[c[29352>>2]&127](b)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(b+4|0,0,508)|0;c[b>>2]=i;c[h>>2]=b}if((c[b>>2]|0)>>>0>4e3){l=b;j=b}else break a}if((m|0)==17){c[h>>2]=0;m=7;return m|0}i=l+8|0;k=e+1|0;b=(e>>>0)%125|0;h=l+12|0;f=l+12+(b<<2)|0;e=c[f>>2]|0;if(!e){b=l+4|0;e=c[b>>2]|0;if(e>>>0<124)m=46}else{f=b;do{if((e|0)==(k|0)){e=0;m=47;break}e=f+1|0;f=e>>>0>124?0:e;e=c[l+12+(f<<2)>>2]|0}while((e|0)!=0);if((m|0)==47)return e|0;b=l+4|0;e=c[b>>2]|0;if(e>>>0<=61){f=l+12+(f<<2)|0;m=46}}if((m|0)==46){c[b>>2]=e+1;c[f>>2]=k;m=0;return m|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](500)|0;if(!e){m=7;return m|0}else g=e}else{b=Wa[c[29356>>2]&127](500)|0;if((c[14985]|0)>>>0<500)c[14985]=500;e=59064;f=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&f>>>0>0){m=c[14978]|0;g=Tv(f|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=m>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){m=7;return m|0}e=Wa[c[29352>>2]&127](b)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0){c[14987]=e;g=b}else g=b}ew(g|0,h|0,500)|0;gw(h|0,0,500)|0;c[i>>2]=(((c[j>>2]|0)+124|0)>>>0)/125|0;e=df(l,k)|0;f=0;do{b=c[g+(f<<2)>>2]|0;if(b)e=df(l,b)|0|e;f=f+1|0}while((f|0)!=125);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);m=e;return m|0}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);m=e;return m|0}}while(0);m=b+12+(e>>>3)|0;a[m>>0]=1<<(e&7)|(d[m>>0]|0);m=0;return m|0}function ef(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+32|0;A=C;x=C+12|0;z=c[d+68>>2]|0;do if(z|0){if((b[d+40>>1]|0)==0?(a[d+50>>0]|0)==0:0)break;r=d+100|0;s=((c[r>>2]|0)+33|0)>>>12;h=(z+33|0)>>>12;a:do if(h>>>0<s>>>0)h=0;else{t=x+4|0;u=d+24|0;v=d+32|0;w=x+8|0;q=f*383&8191;p=h;b:while(1){if((c[u>>2]|0)>(p|0)?(y=c[(c[v>>2]|0)+(p<<2)>>2]|0,c[t>>2]=y,(y|0)!=0):0)h=y;else{h=kf(d,p,t)|0;if(h|0)break;h=c[t>>2]|0}n=h+16384|0;c[x>>2]=n;if(!p){h=h+136|0;c[t>>2]=h;o=0}else o=(p<<12)+-34|0;c[w>>2]=o;m=h+-4|0;c[t>>2]=m;i=n+(q<<1)|0;if(b[i>>1]|0){k=8192;l=q;h=0;while(1){j=o+(e[i>>1]|0)|0;if(j>>>0<=z>>>0?j>>>0>=(c[r>>2]|0)>>>0:0)h=(c[m+(e[i>>1]<<2)>>2]|0)==(f|0)?j:h;if(!k){B=22;break b}l=l+1&8191;i=n+(l<<1)|0;if(!(b[i>>1]|0))break;else k=k+-1|0}if(h|0)break a}if((p|0)>(s|0))p=p+-1|0;else{h=0;break a}}if((B|0)==22){c[A>>2]=32306;c[A+4>>2]=61232;c[A+8>>2]=31517;Db(11,32001,A);h=11}B=h;Ra=C;return B|0}while(0);c[g>>2]=h;B=0;Ra=C;return B|0}while(0);c[g>>2]=0;B=0;Ra=C;return B|0}function ff(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+48|0;r=s;p=s+24|0;l=s+12|0;j=d+33|0;k=j>>>12;m=l+4|0;n=a+24|0;if(!((c[n>>2]|0)>(k|0)?(g=c[(c[a+32>>2]|0)+(k<<2)>>2]|0,c[m>>2]=g,(g|0)!=0):0))i=3;do if((i|0)==3){g=kf(a,k,m)|0;if(!g){g=c[m>>2]|0;break}else{f=g;Ra=s;return f|0}}while(0);q=g+16384|0;c[l>>2]=q;if(!k){k=g+136|0;c[m>>2]=k;i=0}else{i=(j&-4096)+-34|0;k=g}c[l+8>>2]=i;j=k+-4|0;c[m>>2]=j;o=d-i|0;if((o|0)==1)gw(k|0,0,g+32768-k|0)|0;m=j+(o<<2)|0;if(c[m>>2]|0){d=a+68|0;g=c[d>>2]|0;do if(g|0){g=g+33|0;i=g>>>12;k=p+4|0;if(!((c[n>>2]|0)>(i|0)?(h=c[(c[a+32>>2]|0)+(i<<2)>>2]|0,c[k>>2]=h,(h|0)!=0):0)){if(kf(a,i,k)|0)break;h=c[k>>2]|0}l=h+16384|0;c[p>>2]=l;if(!i){j=h+136|0;c[k>>2]=j;g=0}else{g=(g&-4096)+-34|0;j=h}c[p+8>>2]=g;c[k>>2]=j+-4;h=(c[d>>2]|0)-g|0;g=0;do{i=l+(g<<1)|0;if((h|0)<(e[i>>1]|0))b[i>>1]=0;g=g+1|0}while((g|0)!=8192);p=j+(h<<2)|0;gw(p|0,0,l-p|0)|0}while(0)}h=f*383&8191;g=q+(h<<1)|0;a:do if(b[g>>1]|0){i=o;while(1){if(!i)break;h=h+1&8191;g=q+(h<<1)|0;if(!(b[g>>1]|0))break a;else i=i+-1|0}c[r>>2]=32306;c[r+4>>2]=59401;c[r+8>>2]=31517;Db(11,32001,r);f=11;Ra=s;return f|0}while(0);c[m>>2]=f;b[g>>1]=o;f=0;Ra=s;return f|0}function gf(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+64|0;u=A+32|0;k=A;j=A+48|0;v=A+44|0;w=A+40|0;do if((h|0)>5)if((h|0)>100){d=15;Ra=A;return d|0}else{z=h+-9|0;z=G(z*39|0,z)|0;y=c[d>>2]|0;Xa[c[y+60>>2]&255](y,(h|0)>9?z:1)|0;break}while(0);a:do if(!g){z=d+50|0;if(!(a[z>>0]|0)){g=hf(d,f)|0;b:do if((g|0)==5){if(!(c[c[d+32>>2]>>2]|0)){d=-1;Ra=A;return d|0}h=d+43|0;if(a[h>>0]|0){d=-1;Ra=A;return d|0}i=d+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,2,1,6)|0;switch(g|0){case 0:break;case 5:{d=261;Ra=A;return d|0}default:break b}if(a[h>>0]|0){d=-1;Ra=A;return d|0}d=c[i>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,2,1,5)|0;d=-1;Ra=A;return d|0}while(0);if(g|0){d=g;Ra=A;return d|0}if(!(a[z>>0]|0)){j=d+32|0;m=(c[c[j>>2]>>2]|0)+96|0;l=d+52|0;h=d+68|0;if((c[m>>2]|0)!=(c[h>>2]|0)){g=0;break}k=d+43|0;i=a[k>>0]|0;if(!(i<<24>>24)){g=c[d+4>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,3,1,6)|0;i=a[k>>0]|0}else g=0;if(i<<24>>24!=2){f=c[d+4>>2]|0;ab[c[(c[f>>2]|0)+60>>2]&127](f)}switch(g|0){case 5:break a;case 0:break;default:{d=g;Ra=A;return d|0}}if(!(Lu(c[c[j>>2]>>2]|0,l,48)|0)){b[d+40>>1]=0;d=0;Ra=A;return d|0}if(a[k>>0]|0){d=-1;Ra=A;return d|0}d=c[d+4>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,3,1,5)|0;d=-1;Ra=A;return d|0}}x=d+43|0;y=d+4|0;if(!(a[x>>0]|0)){g=c[y>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,3,1,6)|0;switch(g|0){case 0:{t=17;break}case 5:{g=-1;t=35;break}default:t=34}}else t=17;c:do if((t|0)==17){b[d+40>>1]=0;g=c[y>>2]|0;g=_a[c[(c[g>>2]|0)+52>>2]&127](g,0,32768,0,j)|0;switch(g|0){case 8:{g=-1;t=35;break c}case 1288:break;default:{t=34;break c}}g=d+52|0;h=c[c[d+32>>2]>>2]|0;i=g+48|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));t=d+8|0;g=c[t>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,u)|0;if(!g){s=u;r=c[s+4>>2]|0;if((r|0)<0|(r|0)==0&(c[s>>2]|0)>>>0<32){c[f>>2]=1;g=((c[d+68>>2]|0)!=0)<<31>>31;t=34;break}g=c[t>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,k,32,0,0)|0;if(!g)if(!(Lu(d+84|0,k+16|0,8)|0)){g=d+66|0;n=(e[g>>1]|0)+24|0;o=pb(n,0)|0;if(o){m=o+24|0;p=d+76|0;q=c[p>>2]|0;r=d+80|0;s=c[r>>2]|0;i=Yv((e[g>>1]|0)+24|0,0,c[d+68>>2]|0,0)|0;i=Sv(i|0,L()|0,32,0)|0;j=L()|0;g=Sv(i|0,j|0,n|0,0)|0;h=L()|0;l=u;k=c[l+4>>2]|0;d:do if((h|0)>(k|0)|((h|0)==(k|0)?g>>>0>(c[l>>2]|0)>>>0:0))g=0;else{l=g;k=h;h=i;g=j;while(1){j=c[t>>2]|0;g=_a[c[(c[j>>2]|0)+8>>2]&127](j,o,n,h,g)|0;if(g|0)break;if(!(lf(d,v,w,m,o)|0)){g=0;break}if(c[w>>2]|0){g=-1;break d}g=Sv(l|0,k|0,n|0,0)|0;h=L()|0;j=u;i=c[j+4>>2]|0;if((h|0)>(i|0)|((h|0)==(i|0)?g>>>0>(c[j>>2]|0)>>>0:0)){g=0;break d}else{i=k;j=l;l=g;k=h;g=i;h=j}}}while(0);c[p>>2]=q;c[r>>2]=s;if(!(c[7324]|0)){ab[c[29344>>2]&127](o);t=34;break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);t=34;break}}else{g=7;t=35}}else{g=-1;t=35}else t=35}else t=35}while(0);if((t|0)==34)if(!g)g=0;else t=35;if((t|0)==35){i=d+24|0;if((c[i>>2]|0)>0){j=d+32|0;h=0;do{k=c[(c[j>>2]|0)+(h<<2)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[(c[j>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)<(c[i>>2]|0))}a[z>>0]=0;h=d+44|0;if(a[h>>0]|0){if(!(a[x>>0]|0)){z=c[y>>2]|0;Za[c[(c[z>>2]|0)+56>>2]&127](z,0,1,9)|0}a[h>>0]=0;c[d+104>>2]=0;a[d+47>>0]=0}h=d+40|0;i=b[h>>1]|0;if(i<<16>>16>-1){if(!(a[x>>0]|0)){d=c[y>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,(i<<16>>16)+3|0,1,5)|0}b[h>>1]=-1}c[f>>2]=1}d=g;Ra=A;return d|0}else{g=0;l=d+52|0;h=d+68|0;m=(c[c[d+32>>2]>>2]|0)+96|0}while(0);s=c[h>>2]|0;i=m+8|0;o=c[i>>2]|0;k=o>>>0>s>>>0;o=k?0:o;n=m+12|0;p=c[n>>2]|0;y=o>>>0>p>>>0|p>>>0>s>>>0;p=y?o:p;o=m+16|0;f=c[o>>2]|0;x=p>>>0>f>>>0|f>>>0>s>>>0;f=x?p:f;p=m+20|0;j=c[p>>2]|0;z=f>>>0>j>>>0|j>>>0>s>>>0;k=z?(x?(y?(k^1)&1:2):3):4;j=z?f:j;e:do if(!(a[d+46>>0]&2)){if((k|0)==0|j>>>0<s>>>0){q=d+43|0;r=d+4|0;f:do if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,4,1,10)|0;switch(g|0){case 0:{k=1;h=4;g=i;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,5,1,10)|0;switch(g|0){case 0:{k=2;h=5;g=n;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,6,1,10)|0;switch(g|0){case 0:{k=3;h=6;g=o;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,7,1,10)|0;switch(g|0){case 5:{t=69;break e}case 0:{k=4;h=7;g=p;break f}default:{}}Ra=A;return g|0}else{k=4;h=7;g=p}}else{k=3;h=6;g=o}}else{k=2;h=5;g=n}}else{k=1;h=4;g=i}while(0);c[g>>2]=s;if(!(a[q>>0]|0)){j=c[r>>2]|0;Za[c[(c[j>>2]|0)+56>>2]&127](j,h,1,9)|0;j=s}else j=s}}else t=69;while(0);if((t|0)==69)if(!k){d=(g|0)==5?-1:1288;Ra=A;return d|0}h=k+3|0;i=d+43|0;g=a[i>>0]|0;do if(!(g<<24>>24)){g=c[d+4>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,h,1,6)|0;if(!g){g=a[i>>0]|0;break}d=(g|0)==5?-1:g;Ra=A;return d|0}while(0);c[d+100>>2]=(c[m>>2]|0)+1;if(g<<24>>24!=2){f=c[d+4>>2]|0;ab[c[(c[f>>2]|0)+60>>2]&127](f)}if((c[m+4+(k<<2)>>2]|0)==(j|0)?(Lu(c[c[d+32>>2]>>2]|0,l,48)|0)==0:0){b[d+40>>1]=k;d=0;Ra=A;return d|0}if(a[i>>0]|0){d=-1;Ra=A;return d|0}d=c[d+4>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,h,1,5)|0;d=-1;Ra=A;return d|0}function hf(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0;O=Ra;Ra=Ra+96|0;K=O+64|0;G=O+56|0;p=O+40|0;B=O+32|0;m=O;C=O+84|0;D=O+80|0;j=O+76|0;N=e+24|0;if((c[N>>2]|0)>0?(M=c[c[e+32>>2]>>2]|0,c[j>>2]=M,(M|0)!=0):0){g=0;M=6}else{g=kf(e,0,j)|0;switch(g|0){case 0:break;case 1288:{a[e+50>>0]=1;a[e+43>>0]=2;c[f>>2]=1;break}default:{N=g;Ra=O;return N|0}}if(!(c[j>>2]|0)){h=1;M=7}else M=6}if((M|0)==6){h=jf(e,f)|0;if(!h)M=67;else M=7}do if((M|0)==7){if((a[e+50>>0]|0)==0?a[e+46>>0]&2:0){h=e+43|0;if(a[h>>0]|0){g=264;break}i=e+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,0,1,6)|0;if(g|0)break;if(a[h>>0]|0){g=264;break}g=c[i>>2]|0;Za[c[(c[g>>2]|0)+56>>2]&127](g,0,1,5)|0;g=264;break}I=e+43|0;if((a[I>>0]|0)==0?(i=c[e+4>>2]|0,i=Za[c[(c[i>>2]|0)+56>>2]&127](i,0,1,10)|0,i|0):0){g=i;break}H=e+44|0;a[H>>0]=1;if((c[N>>2]|0)>0?(F=c[c[e+32>>2]>>2]|0,c[j>>2]=F,(F|0)!=0):0)M=18;else{g=kf(e,0,j)|0;if(!g)M=18}if((M|0)==18){h=jf(e,f)|0;if(!h){h=0;g=0}else{F=d[e+45>>0]|0;E=F+1|0;F=2-F|0;if(!(a[I>>0]|0)){i=e+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,E,F,10)|0;if(!g)if((a[I>>0]|0)==0?(k=c[i>>2]|0,k=Za[c[(c[k>>2]|0)+56>>2]&127](k,4,4,10)|0,(k|0)!=0):0)if(!(a[I>>0]|0)){g=c[i>>2]|0;Za[c[(c[g>>2]|0)+56>>2]&127](g,E,F,9)|0;g=k}else g=k;else M=25}else M=25;if((M|0)==25){A=e+52|0;i=A;l=i+48|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(l|0));z=e+8|0;g=c[z>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,B)|0;a:do if(!g){y=B;x=c[y+4>>2]|0;b:do if((x|0)>0|(x|0)==0&(c[y>>2]|0)>>>0>32){g=c[z>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,m,32,0,0)|0;c:do if(!g){g=d[m+3>>0]|0;i=m+8|0;n=d[m+9>>0]<<16|d[i>>0]<<24;o=d[m+10>>0]<<8;l=n|o|d[m+11>>0];if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|g&254|0)==931071618?!((l+-512|0)>>>0>65024|(l+-1&l|0)!=0):0){x=g&1;a[e+65>>0]=x;c[e+36>>2]=l;g=m+12|0;c[e+112>>2]=d[m+13>>0]<<16|d[g>>0]<<24|d[m+14>>0]<<8|d[m+15>>0];w=m+16|0;j=c[w>>2]|0;w=c[w+4>>2]|0;y=e+84|0;c[y>>2]=j;c[y+4>>2]=w;y=e+76|0;if(!x){x=c[m>>2]|0;k=c[m+4>>2]|0;w=k+x|0;x=w+x+(c[i>>2]|0)|0;i=(c[g>>2]|0)+w+x|0;g=i+(c[m+20>>2]|0)|0;i=x+j+i|0}else{w=dw(c[m>>2]|0)|0;k=c[m+4>>2]|0;x=(dw(k|0)|0)+w|0;i=x+w+(dw(c[i>>2]|0)|0)|0;g=(dw(c[g>>2]|0)|0)+x+i|0;i=i+(dw(j|0)|0)+g|0;g=g+(dw(c[m+20>>2]|0)|0)|0}g=g+i|0;c[y>>2]=i;x=e+80|0;c[x>>2]=g;do if((i|0)==(d[m+25>>0]<<16|d[m+24>>0]<<24|d[m+26>>0]<<8|d[m+27>>0]|0)){if((g|0)!=(d[m+29>>0]<<16|d[m+28>>0]<<24|d[m+30>>0]<<8|d[m+31>>0]|0))break;if((d[m+5>>0]<<16|k<<24|d[m+6>>0]<<8|d[m+7>>0]|0)!=3007e3){c[p>>2]=31984;c[p+4>>2]=59539;c[p+8>>2]=31517;Db(14,32001,p);g=14;break a}r=l+24|0;s=((r|0)<0)<<31>>31;w=pb(r,s)|0;if(!w){g=7;break c}t=w+24|0;g=Sv(r|0,s|0,32,0)|0;m=L()|0;v=B;u=c[v+4>>2]|0;d:do if((m|0)>(u|0)|((m|0)==(u|0)?g>>>0>(c[v>>2]|0)>>>0:0)){g=0;i=0;j=0}else{u=e+68|0;v=e+72|0;p=(n>>>16|o)&65535;q=e+66|0;o=0;i=0;j=0;k=32;l=0;n=g;while(1){o=o+1|0;g=c[z>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,w,r,k,l)|0;if(g|0)break;if(!(lf(e,C,D,t,w)|0)){g=0;break}g=ff(e,o,c[C>>2]|0)|0;if(g|0)break;g=c[D>>2]|0;if(g){c[u>>2]=o;c[v>>2]=g;b[q>>1]=p;i=c[y>>2]|0;j=c[x>>2]|0}g=Sv(n|0,m|0,r|0,s|0)|0;k=L()|0;l=B;P=c[l+4>>2]|0;if((k|0)>(P|0)|((k|0)==(P|0)?g>>>0>(c[l>>2]|0)>>>0:0)){g=0;break d}else{l=m;P=n;n=g;m=k;k=P}}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](w);else{P=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w)}if(!g){g=j;break b}else break a}while(0);i=0;g=0;break b}i=0;g=0;break b}while(0);break a}else{i=0;g=0}while(0);c[e+76>>2]=i;c[e+80>>2]=g;j=e+32|0;k=c[c[j>>2]>>2]|0;a[e+64>>0]=1;c[A>>2]=3007e3;P=c[A+4>>2]|0;l=P+6014e3+(c[A+8>>2]|0)|0;P=P+3007e3+(c[A+12>>2]|0)+l|0;l=(c[A+16>>2]|0)+l+P|0;P=(c[A+20>>2]|0)+P+l|0;l=l+i+P|0;i=P+g+l|0;g=l+(c[A+32>>2]|0)+i|0;i=i+(c[A+36>>2]|0)+g|0;c[e+92>>2]=g;c[e+96>>2]=i;i=k+48|0;g=A;l=i+48|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(l|0));if((a[I>>0]|0)!=2){P=c[e+4>>2]|0;ab[c[(c[P>>2]|0)+60>>2]&127](P)}i=k;g=A;l=i+48|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(l|0));j=c[c[j>>2]>>2]|0;c[j+96>>2]=0;g=e+68|0;c[j+128>>2]=c[g>>2];c[j+100>>2]=0;i=j+104|0;c[i>>2]=-1;c[j+108>>2]=-1;c[j+112>>2]=-1;c[j+116>>2]=-1;j=c[g>>2]|0;if(j|0)c[i>>2]=j;if(!(c[e+72>>2]|0))g=0;else{P=c[e+108>>2]|0;c[G>>2]=c[g>>2];c[G+4>>2]=P;Db(283,32269,G);g=0}}while(0);if((a[I>>0]|0)==0?(J=e+4|0,P=c[J>>2]|0,Za[c[(c[P>>2]|0)+56>>2]&127](P,E,F,9)|0,(a[I>>0]|0)==0):0){P=c[J>>2]|0;Za[c[(c[P>>2]|0)+56>>2]&127](P,4,4,9)|0}}c[f>>2]=1}}a[H>>0]=0;if(!(a[I>>0]|0)){P=c[e+4>>2]|0;Za[c[(c[P>>2]|0)+56>>2]&127](P,0,1,9)|0}if(!h)M=67}while(0);if((M|0)==67)if((c[e+52>>2]|0)!=3007e3){c[K>>2]=31984;c[K+4>>2]=60517;c[K+8>>2]=31517;Db(14,32001,K);g=14}i=e+50|0;if(!(a[i>>0]|0)){P=g;Ra=O;return P|0}l=e+43|0;if(!g)g=0;else{if((c[N>>2]|0)>0){j=e+32|0;h=0;do{k=c[(c[j>>2]|0)+(h<<2)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{P=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[(c[j>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)<(c[N>>2]|0))}if((a[l>>0]|0)!=2){P=c[e+4>>2]|0;Xa[c[(c[P>>2]|0)+64>>2]&255](P,0)|0}a[i>>0]=0;g=(g|0)==522?-1:g}a[l>>0]=0;P=g;Ra=O;return P|0}function jf(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+96|0;k=l+48|0;g=l;h=c[c[b+32>>2]>>2]|0;f=k;i=h;j=f+48|0;do{a[f>>0]=a[i>>0]|0;f=f+1|0;i=i+1|0}while((f|0)<(j|0));if((a[b+43>>0]|0)!=2){j=c[b+4>>2]|0;ab[c[(c[j>>2]|0)+60>>2]&127](j)}f=g;i=h+48|0;j=f+48|0;do{a[f>>0]=a[i>>0]|0;f=f+1|0;i=i+1|0}while((f|0)<(j|0));if(Lu(k,g,48)|0){k=1;Ra=l;return k|0}if(!(a[k+12>>0]|0)){k=1;Ra=l;return k|0}g=c[k>>2]|0;f=(c[k+4>>2]|0)+g|0;g=g+f+(c[k+8>>2]|0)|0;f=(c[k+12>>2]|0)+f+g|0;g=g+f+(c[k+16>>2]|0)|0;f=(c[k+20>>2]|0)+f+g|0;g=g+f+(c[k+24>>2]|0)|0;f=(c[k+28>>2]|0)+f+g|0;g=g+f+(c[k+32>>2]|0)|0;if((g|0)!=(c[k+40>>2]|0)){k=1;Ra=l;return k|0}if(((c[k+36>>2]|0)+f+g|0)!=(c[k+44>>2]|0)){k=1;Ra=l;return k|0}f=b+52|0;if(!(Lu(f,k,48)|0)){k=0;Ra=l;return k|0}c[d>>2]=1;i=k;j=f+48|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));k=e[b+66>>1]|0;c[b+36>>2]=k<<16&65536|k&65024;k=0;Ra=l;return k|0}function kf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;h=b+24|0;do if((c[h>>2]|0)<=(e|0)){i=e+1|0;j=b+32|0;k=c[j>>2]|0;if((mb()|0)==0?(g=sb(k,i<<2,0)|0,g|0):0){k=c[h>>2]|0;gw(g+(k<<2)|0,0,i-k<<2|0)|0;c[j>>2]=g;c[h>>2]=i;break}c[f>>2]=0;f=7;return f|0}while(0);if((a[b+43>>0]|0)!=2){h=c[b+4>>2]|0;g=b+32|0;h=_a[c[(c[h>>2]|0)+52>>2]&127](h,e,32768,d[b+44>>0]|0,(c[g>>2]|0)+(e<<2)|0)|0;i=b+46|0;if((h&255|0)==8){a[i>>0]=a[i>>0]|2;h=(h|0)==8?0:h}}else{if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](32768)|0;if(!g)g=0;else l=18}else{g=Wa[c[29356>>2]&127](32768)|0;if((c[14985]|0)>>>0<32768)c[14985]=32768;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){k=c[14978]|0;j=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=k>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=18}else l=18}else g=0}if((l|0)==18)gw(g|0,0,32768)|0;b=b+32|0;c[(c[b>>2]|0)+(e<<2)>>2]=g;h=(c[(c[b>>2]|0)+(e<<2)>>2]|0)==0?7:0;g=b}c[f>>2]=c[(c[g>>2]|0)+(e<<2)>>2];f=h;return f|0}function lf(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=b+76|0;if(Lu(b+84|0,h+8|0,8)|0){n=0;return n|0}l=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];if(!l){n=0;return n|0}i=c[n>>2]|0;m=b+80|0;j=c[m>>2]|0;if(!(a[b+65>>0]|0)){i=i+j+(c[h>>2]|0)|0;o=(c[h+4>>2]|0)+j+i|0;c[n>>2]=i;c[m>>2]=o;k=g+(c[b+36>>2]|0)|0;j=g;b=o;do{i=i+b+(c[j>>2]|0)|0;b=(c[j+4>>2]|0)+b+i|0;j=j+8|0}while(j>>>0<k>>>0)}else{i=i+j+(dw(c[h>>2]|0)|0)|0;o=(dw(c[h+4>>2]|0)|0)+j+i|0;c[n>>2]=i;c[m>>2]=o;k=g+(c[b+36>>2]|0)|0;j=g;b=o;do{i=i+b+(dw(c[j>>2]|0)|0)|0;b=(dw(c[j+4>>2]|0)|0)+b+i|0;j=j+8|0}while(j>>>0<k>>>0)}c[n>>2]=i;c[m>>2]=b;if((i|0)!=(d[h+17>>0]<<16|d[h+16>>0]<<24|d[h+18>>0]<<8|d[h+19>>0]|0)){o=0;return o|0}if((b|0)!=(d[h+21>>0]<<16|d[h+20>>0]<<24|d[h+22>>0]<<8|d[h+23>>0]|0)){o=0;return o|0}c[e>>2]=l;c[f>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];o=1;return o|0}function mf(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;j=b+76|0;a[h>>0]=e>>>24;a[h+1>>0]=e>>>16;a[h+2>>0]=e>>>8;a[h+3>>0]=e;a[h+4>>0]=f>>>24;a[h+5>>0]=f>>>16;a[h+6>>0]=f>>>8;a[h+7>>0]=f;e=h+8|0;if(c[b+104>>2]|0){f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));return}i=b+84|0;k=i;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;i=i+4|0;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;f=e;a[f>>0]=k;a[f+1>>0]=k>>8;a[f+2>>0]=k>>16;a[f+3>>0]=k>>24;e=e+4|0;a[e>>0]=i;a[e+1>>0]=i>>8;a[e+2>>0]=i>>16;a[e+3>>0]=i>>24;e=c[j>>2]|0;i=b+80|0;f=c[i>>2]|0;if(!(a[b+65>>0]|0)){k=e+f+(c[h>>2]|0)|0;e=(c[h+4>>2]|0)+f+k|0;c[j>>2]=k;c[i>>2]=e;b=g+(c[b+36>>2]|0)|0;f=k;do{f=f+e+(c[g>>2]|0)|0;e=(c[g+4>>2]|0)+e+f|0;g=g+8|0}while(g>>>0<b>>>0)}else{k=e+f+(dw(c[h>>2]|0)|0)|0;e=(dw(c[h+4>>2]|0)|0)+f+k|0;c[j>>2]=k;c[i>>2]=e;b=g+(c[b+36>>2]|0)|0;f=k;do{f=f+e+(dw(c[g>>2]|0)|0)|0;e=(dw(c[g+4>>2]|0)|0)+e+f|0;g=g+8|0}while(g>>>0<b>>>0)}c[j>>2]=f;c[i>>2]=e;a[h+16>>0]=f>>>24;a[h+17>>0]=f>>>16;a[h+18>>0]=f>>>8;a[h+19>>0]=f;k=c[i>>2]|0;a[h+20>>0]=k>>>24;a[h+21>>0]=k>>>16;a[h+22>>0]=k>>>8;a[h+23>>0]=k;return}function nf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;do{e=a+28|0;switch(c[e>>2]|0){case 6:case 0:case 5:{if((c[a+16>>2]|0)>>>0>b>>>0?(f=_b(a,b,d,1)|0,f|0):0)c[e>>2]=f;break}default:{}}a=c[a+44>>2]|0}while((a|0)!=0);return}function of(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;k=c[b+208>>2]|0;j=b+152|0;m=c[j>>2]|0;l=b+148|0;i=c[l>>2]|0;m=m>>>0>i>>>0?i:m;h=c[b+96>>2]|0;if((h|0)>0){e=c[b+92>>2]|0;f=b+72|0;d=0;do{g=e+(d*48|0)+8|0;n=g;if((c[n>>2]|0)==0&(c[n+4>>2]|0)==0){p=f;o=c[p+4>>2]|0;n=g;c[n>>2]=c[p>>2];c[n+4>>2]=o}d=d+1|0}while((d|0)<(h|0));g=f}else g=b+72|0;e=g;d=c[e>>2]|0;e=c[e+4>>2]|0;if((d|0)==0&(e|0)==0){d=0;e=0}else{d=Sv(d|0,e|0,-1,-1)|0;d=Wv(d|0,L()|0,i|0,0)|0;d=Sv(d|0,L()|0,1,0)|0;d=Yv(d|0,L()|0,i|0,0)|0;e=L()|0}p=g;c[p>>2]=d;c[p+4>>2]=e;p=b+80|0;c[p>>2]=d;c[p+4>>2]=e;if(((a[b+7>>0]|0)==0?(a[b+5>>0]|0)!=4:0)?(p=c[b+60>>2]|0,((Wa[c[(c[p>>2]|0)+48>>2]&127](p)|0)&512|0)==0):0){d=k;e=d+12|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(e|0))}else{p=k;o=p;a[o>>0]=-117058087;a[o+1>>0]=-117058087>>8;a[o+2>>0]=-117058087>>16;a[o+3>>0]=-117058087>>24;p=p+4|0;a[p>>0]=-681336544;a[p+1>>0]=-681336544>>8;a[p+2>>0]=-681336544>>16;a[p+3>>0]=-681336544>>24;p=k+8|0;a[p>>0]=-1;a[p+1>>0]=-1>>8;a[p+2>>0]=-1>>16;a[p+3>>0]=-1>>24}f=b+48|0;Fb(4,f);f=c[f>>2]|0;a[k+12>>0]=f>>>24;a[k+13>>0]=f>>>16;a[k+14>>0]=f>>>8;a[k+15>>0]=f;f=c[b+28>>2]|0;a[k+16>>0]=f>>>24;a[k+17>>0]=f>>>16;a[k+18>>0]=f>>>8;a[k+19>>0]=f;f=c[l>>2]|0;a[k+20>>0]=f>>>24;a[k+21>>0]=f>>>16;a[k+22>>0]=f>>>8;a[k+23>>0]=f;f=c[j>>2]|0;a[k+24>>0]=f>>>24;a[k+25>>0]=f>>>16;a[k+26>>0]=f>>>8;a[k+27>>0]=f;gw(k+28|0,0,m+-28|0)|0;f=b+64|0;e=0;while(1){if(e>>>0>=(c[l>>2]|0)>>>0){d=0;e=17;break}n=c[f>>2]|0;d=g;d=_a[c[(c[n>>2]|0)+12>>2]&127](n,k,m,c[d>>2]|0,c[d+4>>2]|0)|0;n=g;n=Sv(c[n>>2]|0,c[n+4>>2]|0,m|0,0)|0;o=L()|0;p=g;c[p>>2]=n;c[p+4>>2]=o;if(!d)e=e+m|0;else{e=17;break}}if((e|0)==17)return d|0;return 0}function pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[d>>2]=0;return c[a+40>>2]|0}function qf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+32|0;l=q+16|0;h=q;if(!e){c[h>>2]=32306;c[h+4>>2]=56058;c[h+8>>2]=31517;Db(11,32001,h);d=11;Ra=q;return d|0}p=d+212|0;h=c[p>>2]|0;h=Ya[c[29436>>2]&127](c[h+44>>2]|0,e,a[h+33>>0]&3)|0;a:do if(!h){j=c[p>>2]|0;if((a[j+33>>0]|0)!=2){k=j+44|0;n=Wa[c[29432>>2]&127](c[k>>2]|0)|0;b:do if((n|0)>(c[j+20>>2]|0)){i=j+8|0;h=c[i>>2]|0;c:do if(!h)m=12;else{while(1){if((b[h+30>>1]|0)==0?(b[h+28>>1]&8)==0:0)break;h=c[h+36>>2]|0;if(!h){m=12;break c}}c[i>>2]=h}while(0);d:do if((m|0)==12){c[i>>2]=0;h=c[j+4>>2]|0;if(!h)break b;while(1){if(!(b[h+30>>1]|0))break d;h=c[h+36>>2]|0;if(!h)break b}}while(0);h=Xa[c[j+36>>2]&255](c[j+40>>2]|0,h)|0;switch(h|0){case 0:case 5:break;default:break a}}while(0);h=Ya[c[29436>>2]&127](c[k>>2]|0,e,2)|0;if(h)m=18;else h=7}else h=7}else m=18;while(0);do if((m|0)==18){i=c[p>>2]|0;j=c[h+4>>2]|0;if(!(c[j>>2]|0))n=sf(i,e,h)|0;else{n=i+12|0;c[n>>2]=(c[n>>2]|0)+1;n=j+30|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;n=j}c[f>>2]=n;h=g&1;i=n+20|0;j=(h|0)!=0;if(!(j|(c[i>>2]|0)==0)){d=d+184|0;c[d>>2]=(c[d>>2]|0)+1;d=0;Ra=q;return d|0}do if((e|0)>=0?(o=d+152|0,((1073741824/(c[o>>2]|0)|0)+1|0)!=(e|0)):0){c[i>>2]=d;if(c[c[d+60>>2]>>2]|0?((h|0)==0?(c[d+24>>2]|0)>>>0>=e>>>0:0):0){h=d+188|0;c[h>>2]=(c[h>>2]|0)+1;h=rf(n)|0;if(!h)h=0;else break;Ra=q;return h|0}if((c[d+156>>2]|0)>>>0<e>>>0)h=13;else{if(j){if((c[d+28>>2]|0)>>>0>=e>>>0)df(c[d+56>>2]|0,e)|0;g=d+96|0;h=c[g>>2]|0;if((h|0)>0){k=d+92|0;j=0;do{i=c[k>>2]|0;if((c[i+(j*48|0)+20>>2]|0)>>>0>=e>>>0){df(c[i+(j*48|0)+16>>2]|0,e)|0;h=c[g>>2]|0}j=j+1|0}while((j|0)<(h|0))}}gw(c[n+4>>2]|0,0,c[o>>2]|0)|0;d=0;Ra=q;return d|0}}else m=38;while(0);if((m|0)==38){c[l>>2]=32306;c[l+4>>2]=56090;c[l+8>>2]=31517;Db(11,32001,l);if(!n){h=11;break}else h=11}m=c[n+12>>2]|0;do if(b[n+28>>1]&2){i=m+8|0;j=n+36|0;k=c[j>>2]|0;if((c[i>>2]|0)==(n|0))c[i>>2]=k;g=c[n+32>>2]|0;l=(g|0)==0;if(l){c[m+4>>2]=k;i=k}else{c[g+36>>2]=k;i=c[j>>2]|0}if(i|0){c[i+32>>2]=g;break}c[m>>2]=g;if(l)a[m+33>>0]=2}while(0);o=m+12|0;c[o>>2]=(c[o>>2]|0)+-1;cb[c[29440>>2]&255](c[m+44>>2]|0,c[n>>2]|0,1)}while(0);if(!(c[(c[p>>2]|0)+12>>2]|0)){switch(a[d+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[d+4>>0]|0))uf(d,0,0)|0;break}default:tf(d)|0}vf(d)}c[f>>2]=0;d=h;Ra=q;return d|0}function rf(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=Ra;Ra=Ra+16|0;f=k;i=c[b+20>>2]|0;c[f>>2]=0;g=i+216|0;d=c[g>>2]|0;h=b+24|0;if(d){d=ef(d,c[h>>2]|0,f)|0;if(d|0){b=d;Ra=k;return b|0}d=c[f>>2]|0;if(d){l=c[g>>2]|0;f=c[i+152>>2]|0;m=c[b+4>>2]|0;n=c[l+8>>2]|0;l=e[l+66>>1]|0;l=l<<16&65536|l&65024;g=Yv(l|24|0,0,d+-1|0,0)|0;g=Sv(g|0,L()|0,56,0)|0;d=L()|0;d=_a[c[(c[n>>2]|0)+8>>2]&127](n,m,(l|0)<(f|0)?l:f,g,d)|0}else j=5}else j=5;if((j|0)==5){m=c[i+152>>2]|0;n=Yv((c[h>>2]|0)+-1|0,0,m|0,((m|0)<0)<<31>>31|0)|0;d=L()|0;l=c[i+60>>2]|0;d=_a[c[(c[l>>2]|0)+8>>2]&127](l,c[b+4>>2]|0,m,n,d)|0;d=(d|0)==522?0:d}if((c[h>>2]|0)!=1){n=d;Ra=k;return n|0}if(!d){g=i+104|0;d=(c[b+4>>2]|0)+24|0;f=g+16|0;do{a[g>>0]=a[d>>0]|0;g=g+1|0;d=d+1|0}while((g|0)<(f|0));n=0;Ra=k;return n|0}else{n=i+104|0;c[n>>2]=-1;c[n+4>>2]=-1;c[n+8>>2]=-1;c[n+12>>2]=-1;n=d;Ra=k;return n|0}return 0}function sf(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=f+4|0;h=c[g>>2]|0;do{i=h+16|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[h>>2]=f;c[h+4>>2]=c[f>>2];i=h+40|0;c[h+8>>2]=i;j=i;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;i=i+4|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;c[h+12>>2]=d;c[h+24>>2]=e;b[h+28>>1]=1;h=c[g>>2]|0}while(!(c[h>>2]|0));j=d+12|0;c[j>>2]=(c[j>>2]|0)+1;j=h+30|0;b[j>>1]=(b[j>>1]|0)+1<<16>>16;return h|0}function tf(b){b=b|0;var e=0,f=0,g=0;g=b+16|0;f=a[g>>0]|0;if(f<<24>>24==6){g=c[b+40>>2]|0;return g|0}if((f&255)<2){g=0;return g|0}do if(!(c[b+216>>2]|0)){if(!(f<<24>>24==2?1:(c[c[b+64>>2]>>2]|0)==0)){e=xf(b,0)|0;break}e=uf(b,0,0)|0;if((f&255)>2&(a[b+15>>0]|0)==0){c[b+40>>2]=4;a[g>>0]=6;c[b+204>>2]=75;g=e;return g|0}}else{e=wf(b,2,-1)|0;f=uf(b,d[b+19>>0]|0,0)|0;e=(e|0)==0?f:e}while(0);switch((e&255)<<24>>24){case 10:case 13:break;default:{g=e;return g|0}}c[b+40>>2]=e;a[g>>0]=6;c[b+204>>2]=(e|0)==0?74:75;g=e;return g|0}function uf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+16|0;w=B;A=e+16|0;if((d[A>>0]|0)<2?(d[e+17>>0]|0)<2:0){A=0;Ra=B;return A|0}l=e+96|0;if((c[l>>2]|0)>0){k=e+92|0;i=0;do{yf(c[(c[k>>2]|0)+(i*48|0)+16>>2]|0);i=i+1|0}while((i|0)<(c[l>>2]|0))}z=e+4|0;k=c[e+68>>2]|0;i=c[k>>2]|0;if(!(a[z>>0]|0)){if(i|0)y=9}else if((i|0)==29896){i=29896;y=9}if((y|0)==9){Wa[c[i+4>>2]&127](k)|0;c[k>>2]=0}i=e+92|0;k=c[i>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[i>>2]=0;c[l>>2]=0;c[e+52>>2]=0;n=e+64|0;o=c[n>>2]|0;m=c[o>>2]|0;a:do if(!m)i=0;else{if((m|0)==29896){l=o+16|0;i=c[l>>2]|0;if(i|0)do{k=i;i=c[i>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((i|0)!=0);c[l>>2]=0;c[o>>2]=0;i=0;break}i=a[e+5>>0]|0;switch(i<<24>>24){case 3:{k=e+72|0;s=k;if(!((c[s>>2]|0)==0&(c[s+4>>2]|0)==0)){i=Ya[c[m+16>>2]&127](o,0,0)|0;if(!i)if((a[e+8>>0]|0)!=0?(p=c[n>>2]|0,q=a[e+10>>0]|0,q<<24>>24!=0):0)i=Xa[c[(c[p>>2]|0)+20>>2]&255](p,q&255)|0;else i=0}else i=0;s=k;c[s>>2]=0;c[s+4>>2]=0;break a}case 1:break;default:if(i<<24>>24==5|(a[z>>0]|0)==0){s=(a[e+12>>0]|0)==0;Wa[c[m+4>>2]&127](o)|0;c[o>>2]=0;if(!s){i=0;break a}i=c[e>>2]|0;i=Ya[c[i+28>>2]&127](i,c[e+172>>2]|0,d[e+9>>0]|0)|0;break a}}if(!f)i=(a[e+12>>0]|0)!=0&1;else i=1;f=e+72|0;s=f;if(!((c[s>>2]|0)==0&(c[s+4>>2]|0)==0)){l=e+160|0;k=c[l>>2]|0;l=c[l+4>>2]|0;if((i|0)!=0|(k|0)==0&(l|0)==0)i=Ya[c[m+16>>2]&127](o,0,0)|0;else i=_a[c[m+12>>2]&127](o,59008,28,0,0)|0;if(!i){if(!(a[e+7>>0]|0)){i=c[n>>2]|0;i=Xa[c[(c[i>>2]|0)+20>>2]&255](i,(a[e+10>>0]|16)&255)|0}else i=0;if(((l|0)>0|(l|0)==0&k>>>0>0)&(i|0)==0){i=c[n>>2]|0;i=Xa[c[(c[i>>2]|0)+24>>2]&255](i,w)|0;s=w;r=c[s+4>>2]|0;if((i|0)==0&((r|0)>(l|0)|((r|0)==(l|0)?(c[s>>2]|0)>>>0>k>>>0:0))){i=c[n>>2]|0;i=Ya[c[(c[i>>2]|0)+16>>2]&127](i,k,l)|0}}}}else i=0;s=f;c[s>>2]=0;c[s+4>>2]=0}while(0);s=e+56|0;yf(c[s>>2]|0);c[s>>2]=0;c[e+44>>2]=0;s=(i|0)==0;if(s){do if((a[e+15>>0]|0)==0?(a[e+12>>0]|0)!=0:0){if(g|0?c[c[e+60>>2]>>2]|0:0){l=c[e+212>>2]|0;k=c[l+16>>2]|0;if((k|0)<=-1){q=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;r=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(q|0,r|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}l=c[l>>2]|0;if(!l){l=0;f=0}else{f=0;do{f=f+1|0;l=c[l+32>>2]|0}while((l|0)!=0);l=Yv(f|0,0,100,0)|0;f=L()|0}if(k|0?(r=Wv(l|0,f|0,k|0,((k|0)<0)<<31>>31|0)|0,L()|0,(r|0)>=25):0){y=60;break}}l=c[e+212>>2]|0;k=c[l>>2]|0;if(k|0)do{r=k+28|0;b[r>>1]=b[r>>1]&-13;k=c[k+32>>2]|0}while((k|0)!=0);c[l+8>>2]=c[l+4>>2]}else y=60;while(0);if((y|0)==60){r=e+212|0;l=c[r>>2]|0;k=c[l>>2]|0;if(k){do{q=c[k+12>>2]|0;f=q+8|0;m=k+36|0;n=c[m>>2]|0;if((c[f>>2]|0)==(k|0))c[f>>2]=n;o=c[k+32>>2]|0;p=(o|0)==0;if(p){c[q+4>>2]=n;f=n}else{c[o+36>>2]=n;f=c[m>>2]|0}if(!f){c[q>>2]=o;if(p)a[q+33>>0]=2}else c[f+32>>2]=o;p=k+28|0;b[p>>1]=b[p>>1]&-16|1;if((b[k+30>>1]|0)==0?a[q+32>>0]|0:0)cb[c[29440>>2]&255](c[q+44>>2]|0,c[k>>2]|0,0);k=c[l>>2]|0}while((k|0)!=0);l=c[r>>2]|0}}k=c[e+24>>2]|0;r=l+44|0;if(c[r>>2]|0){f=c[l>>2]|0;if(f|0)do{p=f;f=c[f+32>>2]|0;if((c[p+24>>2]|0)>>>0>k>>>0){q=c[p+12>>2]|0;n=q+8|0;o=p+36|0;m=c[o>>2]|0;if((c[n>>2]|0)==(p|0))c[n>>2]=m;n=(f|0)==0;if(n)c[q+4>>2]=m;else{c[f+36>>2]=m;m=c[o>>2]|0}if(!m){c[q>>2]=f;if(n)a[q+33>>0]=2}else c[m+32>>2]=f;o=p+28|0;b[o>>1]=b[o>>1]&-16|1;if((b[p+30>>1]|0)==0?a[q+32>>0]|0:0)cb[c[29440>>2]&255](c[q+44>>2]|0,c[p>>2]|0,0)}}while((f|0)!=0);if(!k)if((c[l+12>>2]|0)!=0?(t=Ya[c[29436>>2]&127](c[r>>2]|0,1,0)|0,(t|0)!=0):0){gw(c[t>>2]|0,0,c[l+24>>2]|0)|0;k=1}else k=0;bb[c[29448>>2]&127](c[r>>2]|0,k+1|0)}}q=e+216|0;k=c[q>>2]|0;if(!k)if((g|0)!=0&s){n=e+32|0;o=c[e+24>>2]|0;if(((c[n>>2]|0)>>>0>o>>>0?(x=e+60|0,u=c[x>>2]|0,v=c[u>>2]|0,(v|0)!=0):0)?((a[A>>0]|0)+-1&255)>2:0){p=c[e+152>>2]|0;i=Xa[c[v+24>>2]&255](u,w)|0;l=((p|0)<0)<<31>>31;f=Yv(p|0,l|0,o|0,0)|0;m=L()|0;do if(!i){k=w;i=c[k>>2]|0;k=c[k+4>>2]|0;if((i|0)==(f|0)&(k|0)==(m|0))h=0;else{if(!((k|0)>(m|0)|(k|0)==(m|0)&i>>>0>f>>>0)){w=Sv(i|0,k|0,p|0,l|0)|0;v=L()|0;if(!((v|0)>(m|0)|(v|0)==(m|0)&w>>>0>f>>>0)){w=c[e+208>>2]|0;gw(w|0,0,p|0)|0;x=c[x>>2]|0;y=Tv(f|0,m|0,p|0,l|0)|0;h=L()|0;h=_a[c[(c[x>>2]|0)+12>>2]&127](x,w,p,y,h)|0;y=117}}else{h=c[x>>2]|0;h=Ya[c[(c[h>>2]|0)+16>>2]&127](h,f,m)|0;y=117}if((y|0)==117?h|0:0)break;c[n>>2]=o;h=0}}else h=i;while(0)}else h=0}else h=i;else{h=k+44|0;if(!(a[h>>0]|0))h=i;else{if(!(a[k+43>>0]|0)){y=c[k+4>>2]|0;Za[c[(c[y>>2]|0)+56>>2]&127](y,0,1,9)|0}a[h>>0]=0;c[k+104>>2]=0;a[k+47>>0]=0;h=i}}do if((g|0)!=0&(h|0)==0){h=c[e+60>>2]|0;i=c[h>>2]|0;if(i|0?(j=Ya[c[i+40>>2]&127](h,22,0)|0,(j|0)!=12):0)break;j=0}else j=h;while(0);b:do if(!(a[z>>0]|0)){h=c[q>>2]|0;do if(h|0){i=h+43|0;if(!(a[i>>0]|0)){h=0;break b}a[i>>0]=0;z=c[h+4>>2]|0;if(!(Za[c[(c[z>>2]|0)+56>>2]&127](z,(b[h+40>>1]|0)+3|0,1,6)|0))if(!(a[i>>0]|0))break;else{h=0;break b}else{a[i>>0]=1;h=0;break b}}while(0);h=c[e+60>>2]|0;i=c[h>>2]|0;if(i){if(!(a[e+13>>0]|0))h=Xa[c[i+32>>2]&255](h,1)|0;else h=0;i=e+17|0;if((a[i>>0]|0)!=5)a[i>>0]=1}else h=0;a[e+18>>0]=0}else h=0;while(0);a[A>>0]=1;a[e+19>>0]=0;A=(j|0)==0?h:j;Ra=B;return A|0}function vf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=d+56|0;yf(c[g>>2]|0);c[g>>2]=0;g=d+96|0;if((c[g>>2]|0)>0){f=d+92|0;e=0;do{yf(c[(c[f>>2]|0)+(e*48|0)+16>>2]|0);e=e+1|0}while((e|0)<(c[g>>2]|0))}h=d+4|0;f=c[d+68>>2]|0;e=c[f>>2]|0;if(!(a[h>>0]|0)){if(e|0)k=7}else if((e|0)==29896){e=29896;k=7}if((k|0)==7){Wa[c[e+4>>2]&127](f)|0;c[f>>2]=0}e=d+92|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[g>>2]=0;c[d+52>>2]=0;g=c[d+216>>2]|0;if(!g){if(!(a[h>>0]|0)){e=d+60|0;f=c[e>>2]|0;g=c[f>>2]|0;if(!(((g|0)!=0?((Wa[c[g+48>>2]&127](f)|0)&2048|0)!=0:0)?(a[d+5>>0]&5)==1:0))k=25;if((k|0)==25?(i=c[d+64>>2]|0,j=c[i>>2]|0,j|0):0){Wa[c[j+4>>2]&127](i)|0;c[i>>2]=0}e=c[e>>2]|0;f=c[e>>2]|0;if(f|0){if(!(a[d+13>>0]|0))f=Xa[c[f+32>>2]&255](e,0)|0;else f=0;e=d+17|0;if((a[e>>0]|0)!=5)a[e>>0]=0;if(f|0?(a[d+16>>0]|0)==6:0)a[e>>0]=5}a[d+18>>0]=0;k=36}}else{e=g+44|0;if(a[e>>0]|0){if(!(a[g+43>>0]|0)){l=c[g+4>>2]|0;Za[c[(c[l>>2]|0)+56>>2]&127](l,0,1,9)|0}a[e>>0]=0;c[g+104>>2]=0;a[g+47>>0]=0}e=g+40|0;f=b[e>>1]|0;if(f<<16>>16>-1){if(!(a[g+43>>0]|0)){l=c[g+4>>2]|0;Za[c[(c[l>>2]|0)+56>>2]&127](l,(f<<16>>16)+3|0,1,5)|0}b[e>>1]=-1;k=36}else k=36}if((k|0)==36)a[d+16>>0]=0;f=d+40|0;if(!(c[f>>2]|0)){l=d+72|0;d=d+19|0;a[d>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;return}if(!(a[d+12>>0]|0)){Ff(d);a[d+18>>0]=0;e=0}else e=(c[c[d+64>>2]>>2]|0)==0&1;a[d+16>>0]=e;c[f>>2]=0;c[d+204>>2]=74;l=d+72|0;d=d+19|0;a[d>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;return}function wf(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;x=y+8|0;w=y;h=c[d+40>>2]|0;if(h|0){d=h;Ra=y;return d|0}k=d+96|0;h=c[k>>2]|0;if((h|0)<=(g|0)){d=0;Ra=y;return d|0}j=(f|0)==1;g=((j^1)&1)+g|0;if((g|0)<(h|0)){f=d+92|0;h=g;do{yf(c[(c[f>>2]|0)+(h*48|0)+16>>2]|0);h=h+1|0}while((h|0)<(c[k>>2]|0))}c[k>>2]=g;if(j){if(g|0){d=0;Ra=y;return d|0}g=c[d+68>>2]|0;h=c[g>>2]|0;if(!h){d=0;Ra=y;return d|0}if((h|0)==29896){i=g+16|0;h=c[i>>2]|0;if(h|0)do{f=h;h=c[h>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}}while((h|0)!=0);c[i>>2]=0;c[g+12>>2]=0;c[g+32>>2]=0;x=g+24|0;c[x>>2]=0;c[x+4>>2]=0;c[g+48>>2]=0;x=g+40|0;c[x>>2]=0;c[x+4>>2]=0}c[d+52>>2]=0;d=0;Ra=y;return d|0}s=d+216|0;if((c[s>>2]|0)==0?(c[c[d+64>>2]>>2]|0)==0:0){d=0;Ra=y;return d|0}if((g|0)!=0?(l=g+-1|0,u=c[d+92>>2]|0,m=u+(l*48|0)|0,l=u+(l*48|0)+20|0,(m|0)!=0):0){j=c[l>>2]|0;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](512)|0;if(!h){d=7;Ra=y;return d|0}}else{h=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){u=c[14978]|0;r=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=u>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){d=7;Ra=y;return d|0}f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(h+4|0,0,508)|0;c[h>>2]=j;u=h;h=l;g=d+28|0;r=m;q=1}else{g=d+28|0;u=0;h=g;r=0;q=0}f=d+24|0;c[f>>2]=c[h>>2];a[d+18>>0]=a[d+12>>0]|0;a:do if(q){l=d+72|0;f=l;i=c[f>>2]|0;f=c[f+4>>2]|0;if(!(c[s>>2]|0)){j=r+8|0;g=c[j>>2]|0;j=c[j+4>>2]|0;h=(g|0)==0&(j|0)==0;g=h?i:g;j=h?f:j;h=r;k=c[h>>2]|0;h=c[h+4>>2]|0;p=l;c[p>>2]=k;c[p+4>>2]=h;if((h|0)<(j|0)|(h|0)==(j|0)&k>>>0<g>>>0)while(1){h=zf(d,l,u,1,1)|0;if(h|0){p=i;o=f;break a}h=l;k=c[h>>2]|0;h=c[h+4>>2]|0;if(!((h|0)<(j|0)|(h|0)==(j|0)&k>>>0<g>>>0)){p=i;t=71;break}}else{p=i;t=71}}else{h=l;t=70}}else{o=c[s>>2]|0;if(!o){h=d+72|0;f=h;i=c[f>>2]|0;f=c[f+4>>2]|0;t=70;break}c[f>>2]=c[g>>2];if(a[o+44>>0]|0){n=o+68|0;l=c[n>>2]|0;m=o+32|0;j=c[m>>2]|0;h=o+52|0;f=c[j>>2]|0;g=h+48|0;do{a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0}while((h|0)<(g|0));f=c[n>>2]|0;h=f+1|0;if(h>>>0>l>>>0)h=0;else{k=h;g=j;while(1){h=f+34|0;f=h>>>12;if(!f)h=(c[g>>2]|0)+(h<<2)|0;else h=(c[g+(f<<2)>>2]|0)+((h&4095)<<2)|0;h=Bf(d,c[h>>2]|0)|0;f=k+1|0;if(f>>>0>l>>>0|(h|0)!=0)break;w=k;k=f;g=c[m>>2]|0;f=w}f=c[n>>2]|0}if((l|0)!=(f|0))do if(f|0){f=f+33|0;g=f>>>12;k=x+4|0;if(!((c[o+24>>2]|0)>(g|0)?(i=c[(c[m>>2]|0)+(g<<2)>>2]|0,c[k>>2]=i,(i|0)!=0):0)){if(kf(o,g,k)|0)break;i=c[k>>2]|0}l=i+16384|0;c[x>>2]=l;if(!g){j=i+136|0;c[k>>2]=j;f=0}else{f=(f&-4096)+-34|0;j=i}c[x+8>>2]=f;c[k>>2]=j+-4;i=(c[n>>2]|0)-f|0;f=0;do{g=l+(f<<1)|0;if((i|0)<(e[g>>1]|0))b[g>>1]=0;f=f+1|0}while((f|0)!=8192);x=j+(i<<2)|0;gw(x|0,0,l-x|0)|0}while(0)}else h=0;f=Cf(c[d+212>>2]|0)|0;if(!((h|0)==0&(f|0)!=0)){d=h;Ra=y;return d|0}do{h=f;f=c[f+16>>2]|0;h=Bf(d,c[h+24>>2]|0)|0}while((f|0)!=0&(h|0)==0);Ra=y;return h|0}while(0);if((t|0)==70){l=h;c[l>>2]=0;c[l+4>>2]=0;l=h;h=0;k=0;p=i;t=71}b:do if((t|0)==71){m=d+80|0;n=d+148|0;o=d+152|0;if((h|0)<(f|0)|(h|0)==(f|0)&k>>>0<p>>>0)while(1){c[x>>2]=0;h=Af(d,0,p,f,x,w)|0;i=c[x>>2]|0;if(!i){i=m;i=Sv(c[i>>2]|0,c[i+4>>2]|0,c[n>>2]|0,0)|0;g=L()|0;t=l;if((i|0)==(c[t>>2]|0)?(g|0)==(c[t+4>>2]|0):0){k=Tv(p|0,f|0,i|0,g|0)|0;t=L()|0;i=(c[o>>2]|0)+8|0;i=Wv(k|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0;c[x>>2]=i;t=76}else t=81}else t=76;c:do if((t|0)==76){t=0;if((h|0)==0&(i|0)!=0){j=0;while(1){g=l;h=c[g>>2]|0;g=c[g+4>>2]|0;if(!((g|0)<(f|0)|(g|0)==(f|0)&h>>>0<p>>>0))break;h=zf(d,l,u,1,1)|0;j=j+1|0;if(!(j>>>0<i>>>0&(h|0)==0)){t=81;break c}}i=g}else t=81}while(0);if((t|0)==81){t=0;if(h|0){o=f;break b}h=l;i=c[h+4>>2]|0;h=c[h>>2]|0}if(!((i|0)<(f|0)|(i|0)==(f|0)&h>>>0<p>>>0)){h=0;o=f;break}}else{h=0;o=f}}while(0);if(q){n=r+24|0;f=c[n>>2]|0;m=(c[d+152>>2]|0)+4|0;m=Yv(m|0,((m|0)<0)<<31>>31|0,f|0,0)|0;q=L()|0;k=w;c[k>>2]=m;c[k+4>>2]=q;k=c[s>>2]|0;if(!k){if(!h)t=105}else{h=r+28|0;i=r+40|0;g=k+112|0;if((c[i>>2]|0)==(c[g>>2]|0))h=c[h>>2]|0;else{c[h>>2]=0;c[i>>2]=c[g>>2];h=0}m=k+68|0;if(h>>>0<(c[m>>2]|0)>>>0){c[m>>2]=h;c[k+76>>2]=c[r+32>>2];c[k+80>>2]=c[r+36>>2];do if(h|0){h=h+33|0;i=h>>>12;j=x+4|0;if((c[k+24>>2]|0)>(i|0)?(v=c[(c[k+32>>2]|0)+(i<<2)>>2]|0,c[j>>2]=v,(v|0)!=0):0)f=v;else{if(kf(k,i,j)|0)break;f=c[j>>2]|0}k=f+16384|0;c[x>>2]=k;if(!i){g=f+136|0;c[j>>2]=g;h=0}else{h=(h&-4096)+-34|0;g=f}c[x+8>>2]=h;c[j>>2]=g+-4;f=(c[m>>2]|0)-h|0;h=0;do{i=k+(h<<1)|0;if((f|0)<(e[i>>1]|0))b[i>>1]=0;h=h+1|0}while((h|0)!=8192);x=g+(f<<2)|0;gw(x|0,0,k-x|0)|0}while(0);f=c[n>>2]|0;t=105}else t=105}d:do if((t|0)==105){i=d+52|0;while(1){if(f>>>0>=(c[i>>2]|0)>>>0){h=0;break d}h=zf(d,w,u,0,1)|0;if(!h)f=f+1|0;else break}}while(0)}yf(u);if(h|0){d=h;Ra=y;return d|0}d=l;c[d>>2]=p;c[d+4>>2]=o;d=0;Ra=y;return d|0}function xf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+48|0;K=M+16|0;H=M+8|0;I=M+40|0;x=M;y=M+36|0;z=M+32|0;G=M+28|0;A=M+24|0;h=c[b>>2]|0;c[z>>2]=0;c[G>>2]=1;w=b+152|0;c[A>>2]=c[w>>2];C=b+64|0;g=c[C>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,x)|0;a:do if(!g){B=b+208|0;f=c[B>>2]|0;g=Ef(c[C>>2]|0,f,(c[(c[b>>2]|0)+8>>2]|0)+1|0)|0;if(!g){if(!(a[f>>0]|0))f=0;else f=Za[c[h+32>>2]&127](h,f,0,G)|0;b:do if((f|0)==0&(c[G>>2]|0)!=0){p=b+72|0;q=p;c[q>>2]=0;c[q+4>>2]=0;q=b+148|0;r=b+80|0;s=b+60|0;t=b+24|0;u=b+16|0;v=b+32|0;f=0;h=d;c:while(1){do{g=x;g=Af(b,d,c[g>>2]|0,c[g+4>>2]|0,y,z)|0;switch(g|0){case 101:{h=f;break b}case 0:break;default:{e=g;J=37;break b}}g=c[y>>2]|0;if((g|0)==-1){n=x;n=Tv(c[n>>2]|0,c[n+4>>2]|0,c[q>>2]|0,0)|0;o=L()|0;g=(c[w>>2]|0)+8|0;g=Wv(n|0,o|0,g|0,((g|0)<0)<<31>>31|0)|0;L()|0;c[y>>2]=g}if(!(g|d)){j=r;l=c[q>>2]|0;j=Sv(c[j>>2]|0,c[j+4>>2]|0,l|0,0)|0;i=L()|0;m=p;k=c[m>>2]|0;m=c[m+4>>2]|0;if((j|0)==(k|0)&(i|0)==(m|0)){o=x;o=Tv(c[o>>2]|0,c[o+4>>2]|0,j|0,i|0)|0;k=L()|0;g=(c[w>>2]|0)+8|0;g=Wv(o|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;L()|0;c[y>>2]=g;k=j;j=0}else{i=m;j=0}}else{i=p;k=c[i>>2]|0;l=c[q>>2]|0;i=c[i+4>>2]|0;j=0}if((k|0)==(l|0)&(i|0)==(j|0)){n=c[z>>2]|0;i=c[s>>2]|0;j=c[i>>2]|0;if(j|0?((a[u>>0]|0)+-1&255)>2:0){o=c[w>>2]|0;i=Xa[c[j+24>>2]&255](i,H)|0;k=((o|0)<0)<<31>>31;l=Yv(o|0,k|0,n|0,0)|0;m=L()|0;if(i|0){e=i;break c}j=H;i=c[j>>2]|0;j=c[j+4>>2]|0;if(!((i|0)==(l|0)&(j|0)==(m|0))){do if((j|0)>(m|0)|(j|0)==(m|0)&i>>>0>l>>>0){e=c[s>>2]|0;e=Ya[c[(c[e>>2]|0)+16>>2]&127](e,l,m)|0;J=24}else{j=Sv(i|0,j|0,o|0,k|0)|0;i=L()|0;if((i|0)>(m|0)|(i|0)==(m|0)&j>>>0>l>>>0)break;j=c[B>>2]|0;gw(j|0,0,o|0)|0;i=c[s>>2]|0;J=Tv(l|0,m|0,o|0,k|0)|0;e=L()|0;e=_a[c[(c[i>>2]|0)+12>>2]&127](i,j,o,J,e)|0;J=24}while(0);if((J|0)==24?(J=0,e|0):0)break c;c[v>>2]=n}}c[t>>2]=n}}while(!(g|0));i=0;d:while(1){if(h|0)Ff(b);h=zf(b,p,0,1,0)|0;switch(h|0){case 522:{h=f;break b}case 101:{J=35;break d}case 0:break;default:{e=h;J=37;break b}}f=f+1|0;i=i+1|0;if(i>>>0>=g>>>0)break;else h=0}if((J|0)==35){J=0;m=x;n=c[m+4>>2]|0;o=p;c[o>>2]=c[m>>2];c[o+4>>2]=n}h=0}J=38;break a}else{e=f;f=0;J=37}while(0);if((J|0)==37)if(!e)h=f;else{J=38;break}g=Se(b,A,-1)|0;e=b+12|0;a[b+18>>0]=a[e>>0]|0;if(!g){s=c[B>>2]|0;g=Ef(c[C>>2]|0,s,(c[(c[b>>2]|0)+8>>2]|0)+1|0)|0;if(!g){if(((a[b+16>>0]|0)+-1&255)>2){i=b+60|0;f=c[i>>2]|0;g=c[f>>2]|0;if(g|0){g=Ya[c[g+40>>2]&127](f,21,0)|0;switch(g|0){case 0:case 12:break;default:break a}}if(((a[b+7>>0]|0)==0?(D=c[i>>2]|0,E=a[b+10>>0]|0,E<<24>>24):0)?(F=Xa[c[(c[D>>2]|0)+20>>2]&255](D,E&255)|0,F|0):0){g=F;break}}g=uf(b,(a[s>>0]|0)!=0&1,0)|0;if(!g)if((a[s>>0]|0)!=0&(c[G>>2]|0)!=0){r=c[b>>2]|0;j=r+4|0;k=c[j>>2]<<1;G=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;F=L()|0;do if(!(F>>>0>0|(F|0)==0&G>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f){f=7;break}else q=f}else{f=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;g=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&g>>>0>0){G=c[14978]|0;F=Tv(g|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=G>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(!g){f=7;break}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;q=g}else q=g}gw(q|0,0,k|0)|0;o=q+(c[j>>2]|0)|0;p=r+24|0;f=_a[c[p>>2]&127](r,s,q,16385,0)|0;e:do if(!f){f=Xa[c[(c[q>>2]|0)+24>>2]&255](q,H)|0;if(!f){n=(c[r+8>>2]|0)+1|0;G=H;G=Sv(c[G>>2]|0,c[G+4>>2]|0,n|0,((n|0)<0)<<31>>31|0)|0;F=L()|0;f=Sv(G|0,F|0,1,0)|0;L()|0;if(!(F>>>0>0|(F|0)==0&G>>>0>2147483390)){do if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](f)|0;if(!f){f=7;break e}else g=f}else{i=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){G=c[14978]|0;F=Tv(f|0,g|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=G>>>0)&1}g=Wa[c[29340>>2]&127](i)|0;if(!g){f=7;break e}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0<=(c[14987]|0)>>>0)break;c[14987]=f}while(0);f=c[H>>2]|0;m=g+(f+1)|0;f=_a[c[(c[q>>2]|0)+8>>2]&127](q,g,f,0,0)|0;if(!f){a[g+(c[H>>2]|0)>>0]=0;k=g;G=H;F=c[G+4>>2]|0;f:do if((F|0)>0|(F|0)==0&(c[G>>2]|0)>>>0>0){l=r+32|0;j=g;g:while(1){f=Za[c[l>>2]&127](r,j,0,I)|0;if(f|0)break;do if(c[I>>2]|0){f=_a[c[p>>2]&127](r,j,o,2049,0)|0;if(f|0)break g;f=Ef(o,m,n)|0;i=c[o>>2]|0;if(i|0){Wa[c[i+4>>2]&127](o)|0;c[o>>2]=0}if(f|0)break g;if(!(a[m>>0]|0))break;if(!(Bu(m,s)|0)){f=0;break g}}while(0);j=j+(((Eu(j)|0)&1073741823)+1)|0;G=j-k|0;E=((G|0)<0)<<31>>31;F=H;D=c[F+4>>2]|0;if(!((D|0)>(E|0)|((D|0)==(E|0)?(c[F>>2]|0)>>>0>G>>>0:0))){J=88;break f}}}else J=88;while(0);if((J|0)==88){f=c[q>>2]|0;if(f|0){Wa[c[f+4>>2]&127](q)|0;c[q>>2]=0}f=Ya[c[r+28>>2]&127](r,s,0)|0}if(!g)break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{I=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else f=7}}while(0);g=c[q>>2]|0;if(g|0){Wa[c[g+4>>2]&127](q)|0;c[q>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{I=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else f=7;while(0);g=f}else g=0}}}else{f=0;e=g;J=38}}else{f=0;e=g;J=38}while(0);if((J|0)==38){J=b+12|0;a[b+18>>0]=a[J>>0]|0;h=f;g=e;e=J}if((d|0)!=0&(h|0)!=0){d=c[b+172>>2]|0;c[K>>2]=h;c[K+4>>2]=d;Db(539,32360,K)}if(a[e>>0]|0){K=512;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}e=b+60|0;K=c[e>>2]|0;if((Wa[c[(c[K>>2]|0)+48>>2]&127](K)|0)&4096|0){K=512;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}e=c[e>>2]|0;f=c[(c[e>>2]|0)+44>>2]|0;if(!f){K=4096;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}K=Wa[f&127](e)|0;K=(K|0)<32?512:(K|0)<65536?K:65536;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}function yf(a){a=a|0;var b=0,d=0;if(!a)return;if(c[a+8>>2]|0){d=a+12|0;b=0;do{yf(c[d+(b<<2)>>2]|0);b=b+1|0}while((b|0)!=125)}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function zf(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0;K=Ra;Ra=Ra+16|0;v=K+4|0;J=K;I=c[f+208>>2]|0;C=(i|0)!=0;r=c[(C?f+64|0:f+68|0)>>2]|0;k=g;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,v,4,c[k>>2]|0,c[k+4>>2]|0)|0;if(k|0){J=k;Ra=K;return J|0}s=v+1|0;t=v+2|0;u=v+3|0;D=d[s>>0]<<16|d[v>>0]<<24|d[t>>0]<<8|d[u>>0];H=f+152|0;q=c[H>>2]|0;w=g;w=Sv(c[w>>2]|0,c[w+4>>2]|0,4,0)|0;k=L()|0;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,I,q,w,k)|0;if(k|0){J=k;Ra=K;return J|0}k=c[H>>2]|0;p=(i<<2)+4+k|0;q=g;p=Sv(c[q>>2]|0,c[q+4>>2]|0,p|0,((p|0)<0)<<31>>31|0)|0;q=L()|0;w=g;c[w>>2]=p;c[w+4>>2]=q;if(!D){J=101;Ra=K;return J|0}if((D|0)==((1073741824/(k|0)|0)+1|0)){J=101;Ra=K;return J|0}if(D>>>0>(c[f+24>>2]|0)>>>0){J=0;Ra=K;return J|0}w=(h|0)==0;a:do if(!w?(m=D+-1|0,n=c[h>>2]|0,m>>>0<n>>>0):0){l=c[h+8>>2]|0;if(!l){o=h;k=n}else{n=h;do{k=(m>>>0)/(l>>>0)|0;n=c[n+12+(k<<2)>>2]|0;if(!n)break a;m=m-(G(k,l)|0)|0;l=c[n+8>>2]|0}while((l|0)!=0);o=n;k=c[n>>2]|0}if(k>>>0<4001){if(!(1<<(m&7)&d[o+12+(m>>>3)>>0]))break;else k=0;Ra=K;return k|0}n=m+1|0;k=(m>>>0)%125|0;l=c[o+12+(k<<2)>>2]|0;if(l|0){while(1){if((l|0)==(n|0)){k=0;break}k=((k+1|0)>>>0)%125|0;l=c[o+12+(k<<2)>>2]|0;if(!l)break a}Ra=K;return k|0}}while(0);if(C){q=Sv(p|0,q|0,-4,-1)|0;k=L()|0;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,v,4,q,k)|0;if(k|0){J=k;Ra=K;return J|0}m=d[s>>0]<<16|d[v>>0]<<24|d[t>>0]<<8|d[u>>0];if(!j){k=c[f+48>>2]|0;l=c[H>>2]|0;if((l|0)>200)do{j=l;l=l+-200|0;k=k+(d[I+l>>0]|0)|0}while((j|0)>400);if((k|0)!=(m|0)){J=101;Ra=K;return J|0}}}if(!w?(x=df(h,D)|0,x|0):0){J=x;Ra=K;return J|0}p=(D|0)==1;if(p?(y=f+142|0,z=a[I+20>>0]|0,(b[y>>1]|0)!=(z&255|0)):0)b[y>>1]=z&255;do if((c[f+216>>2]|0)==0?(A=f+212|0,B=Ya[c[29436>>2]&127](c[(c[A>>2]|0)+44>>2]|0,D,0)|0,(B|0)!=0):0){k=c[A>>2]|0;l=c[B+4>>2]|0;if(!(c[l>>2]|0)){l=sf(k,D,B)|0;break}else{B=k+12|0;c[B>>2]=(c[B>>2]|0)+1;B=l+30|0;b[B>>1]=(b[B>>1]|0)+1<<16>>16;break}}else l=0;while(0);c[J>>2]=l;if(C)if(!(a[f+7>>0]|0)){C=g;B=c[C+4>>2]|0;k=f+80|0;g=c[k+4>>2]|0;k=((B|0)<(g|0)|((B|0)==(g|0)?(c[C>>2]|0)>>>0<=(c[k>>2]|0)>>>0:0))&1}else k=1;else if(!l)k=1;else k=((e[l+28>>1]|0)>>>3&1^1)&65535;m=c[f+60>>2]|0;n=c[m>>2]|0;do if(n){o=a[f+16>>0]|0;if((o&255)>3){if(!k){F=51;break}}else if(!((k|0)!=0&o<<24>>24==0)){F=51;break}E=c[H>>2]|0;k=Yv(E|0,((E|0)<0)<<31>>31|0,D+-1|0,0)|0;l=L()|0;l=_a[c[n+12>>2]&127](m,I,E,k,l)|0;k=f+32|0;if(D>>>0>(c[k>>2]|0)>>>0)c[k>>2]=D;k=c[f+88>>2]|0;if(!k)n=l;else{nf(k,D,I);n=l}}else F=51;while(0);if((F|0)==51)if((i|0)==0&(l|0)==0){F=f+20|0;a[F>>0]=a[F>>0]|2;k=Za[c[f+204>>2]&127](f,D,J,1)|0;a[F>>0]=a[F>>0]&-3;if(k|0){J=k;Ra=K;return J|0}n=c[J>>2]|0;l=n+28|0;k=e[l>>1]|0;if((k&17|0)!=0?(E=k&65519,b[l>>1]=E,(k&1|0)!=0):0){m=(E^3)&65535;b[l>>1]=m;k=c[n+12>>2]|0;c[n+36>>2]=0;l=c[k>>2]|0;c[n+32>>2]=l;if(!l){c[k+4>>2]=n;if(a[k+32>>0]|0)a[k+33>>0]=1}else c[l+36>>2]=n;c[k>>2]=n;k=k+8|0;if((m&8)==0&(c[k>>2]|0)==0){c[k>>2]=n;n=0}else n=0}else n=0}else n=0;k=c[J>>2]|0;if(!k){J=n;Ra=K;return J|0}k=c[k+4>>2]|0;ew(k|0,I|0,c[H>>2]|0)|0;ab[c[f+200>>2]&127](c[J>>2]|0);if(p){m=f+104|0;k=k+24|0;l=m+16|0;do{a[m>>0]=a[k>>0]|0;m=m+1|0;k=k+1|0}while((m|0)<(l|0))}Df(c[J>>2]|0);J=n;Ra=K;return J|0}function Af(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+32|0;p=t+16|0;k=t+8|0;q=t;s=a+72|0;j=s;i=c[j>>2]|0;j=c[j+4>>2]|0;if((i|0)==0&(j|0)==0){i=a+148|0;r=i;n=0;o=0;i=c[i>>2]|0;j=0}else{o=Sv(i|0,j|0,-1,-1)|0;n=L()|0;r=a+148|0;i=c[r>>2]|0;n=Wv(o|0,n|0,i|0,0)|0;n=Sv(n|0,L()|0,1,0)|0;n=Yv(n|0,L()|0,i|0,0)|0;o=L()|0;j=0}m=s;c[m>>2]=n;c[m+4>>2]=o;m=Sv(n|0,o|0,i|0,j|0)|0;l=L()|0;if((l|0)>(f|0)|(l|0)==(f|0)&m>>>0>e>>>0){s=101;Ra=t;return s|0}if((b|0)==0?(m=a+80|0,(n|0)==(c[m>>2]|0)?(o|0)==(c[m+4>>2]|0):0):0)e=a+64|0;else{i=a+64|0;j=c[i>>2]|0;j=_a[c[(c[j>>2]|0)+8>>2]&127](j,k,8,n,o)|0;if(j|0){s=j;Ra=t;return s|0}if(!(Lu(k,32352,8)|0))e=i;else{s=101;Ra=t;return s|0}}l=c[e>>2]|0;m=Sv(n|0,o|0,8,0)|0;i=L()|0;i=_a[c[(c[l>>2]|0)+8>>2]&127](l,p,4,m,i)|0;if(i|0){s=i;Ra=t;return s|0}k=p+1|0;l=p+2|0;m=p+3|0;c[g>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);f=c[e>>2]|0;g=Sv(n|0,o|0,12,0)|0;i=L()|0;i=_a[c[(c[f>>2]|0)+8>>2]&127](f,p,4,g,i)|0;if(i|0){s=i;Ra=t;return s|0}c[a+48>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);f=c[e>>2]|0;g=Sv(n|0,o|0,16,0)|0;i=L()|0;i=_a[c[(c[f>>2]|0)+8>>2]&127](f,p,4,g,i)|0;if(i|0){s=i;Ra=t;return s|0}c[h>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);j=s;b=c[j>>2]|0;j=c[j+4>>2]|0;a:do if((b|0)==0&(j|0)==0){g=c[e>>2]|0;h=Sv(n|0,o|0,20,0)|0;i=L()|0;i=_a[c[(c[g>>2]|0)+8>>2]&127](g,p,4,h,i)|0;do if(!i){f=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);h=c[e>>2]|0;o=Sv(n|0,o|0,24,0)|0;i=L()|0;i=_a[c[(c[h>>2]|0)+8>>2]&127](h,p,4,o,i)|0;if(i|0)break;i=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);c[q>>2]=i;if(!i){i=c[a+152>>2]|0;c[q>>2]=i}if((!((f+-32|0)>>>0>65504|(i+-512|0)>>>0>65024)?(i+-1&i|0)==0:0)?(f+-1&f|0)==0:0){e=Se(a,q,-1)|0;c[r>>2]=f;j=s;b=c[j>>2]|0;j=c[j+4>>2]|0;i=f;break a}else i=101}while(0);s=i;Ra=t;return s|0}else{e=0;i=c[r>>2]|0}while(0);q=Sv(b|0,j|0,i|0,0)|0;r=L()|0;c[s>>2]=q;c[s+4>>2]=r;s=e;Ra=t;return s|0}function Bf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=d+212|0;h=Ya[c[29436>>2]&127](c[(c[f>>2]|0)+44>>2]|0,e,0)|0;do if(!h)g=0;else{f=c[f>>2]|0;g=c[h+4>>2]|0;if(!(c[g>>2]|0)){f=sf(f,e,h)|0;if(!f){g=0;break}g=f;f=b[f+30>>1]|0}else{k=f+12|0;c[k>>2]=(c[k>>2]|0)+1;k=g+30|0;f=(b[k>>1]|0)+1<<16>>16;b[k>>1]=f}if(f<<16>>16!=1){f=rf(g)|0;if(!f){ab[c[d+200>>2]&127](g);if(!(b[g+28>>1]&32)){Df(g);g=0;break}else{k=c[g+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[g+16>>2]=c[k>>2];c[k>>2]=g;g=0;break}}else if(!(b[g+28>>1]&32)){Df(g);g=f;break}else{k=c[g+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[g+16>>2]=c[k>>2];c[k>>2]=g;g=f;break}}k=c[g+12>>2]|0;do if(b[g+28>>1]&2){f=k+8|0;e=g+36|0;h=c[e>>2]|0;if((c[f>>2]|0)==(g|0))c[f>>2]=h;i=c[g+32>>2]|0;j=(i|0)==0;if(j){c[k+4>>2]=h;f=h}else{c[i+36>>2]=h;f=c[e>>2]|0}if(f|0){c[f+32>>2]=i;break}c[k>>2]=i;if(j)a[k+33>>0]=2}while(0);j=k+12|0;c[j>>2]=(c[j>>2]|0)+-1;cb[c[29440>>2]&255](c[k+44>>2]|0,c[g>>2]|0,1);g=0}while(0);f=c[d+88>>2]|0;if(!f)return g|0;do{c[f+16>>2]=1;f=c[f+44>>2]|0}while((f|0)!=0);return g|0}function Cf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+176|0;m=o+128|0;n=o;e=c[a>>2]|0;d=(e|0)==0;if(!d){a=e;do{l=a;a=c[a+32>>2]|0;c[l+16>>2]=a}while((a|0)!=0);a=n;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));if(d)a=0;else{l=m+16|0;j=m+16|0;k=n+124|0;do{h=e+16|0;a=e;e=c[h>>2]|0;c[h>>2]=0;h=0;while(1){i=n+(h<<2)|0;b=c[i>>2]|0;if(!b){b=9;break}d=m;g=b;a:while(1){f=c[g+24>>2]|0;b=d;while(1){b=b+16|0;if(f>>>0<(c[a+24>>2]|0)>>>0)break;c[b>>2]=a;b=c[a+16>>2]|0;if(!b){b=a;a=g;break a}else{d=a;a=b;b=d}}c[b>>2]=g;b=c[g+16>>2]|0;if(!b){b=g;break}else{d=g;g=b}}c[b+16>>2]=a;a=c[l>>2]|0;c[i>>2]=0;h=h+1|0;if(h>>>0>=31){b=16;break}}if((b|0)==9)c[i>>2]=a;else if((b|0)==16?(0,(h|0)==31):0){b=m;f=c[k>>2]|0;b:while(1){d=c[f+24>>2]|0;while(1){b=b+16|0;if(d>>>0<(c[a+24>>2]|0)>>>0)break;c[b>>2]=a;b=c[a+16>>2]|0;if(!b){b=a;a=f;break b}else{i=a;a=b;b=i}}c[b>>2]=f;b=c[f+16>>2]|0;if(!b){b=f;break}else{i=f;f=b;b=i}}c[b+16>>2]=a;c[k>>2]=c[j>>2]}}while((e|0)!=0);a=c[n>>2]|0}}else{a=n;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));a=0}g=m+16|0;f=1;do{b=c[n+(f<<2)>>2]|0;if(b)if(!a)a=b;else{d=m;c:while(1){e=c[a+24>>2]|0;while(1){d=d+16|0;if(e>>>0<(c[b+24>>2]|0)>>>0)break;c[d>>2]=b;d=c[b+16>>2]|0;if(!d){d=b;break c}else{l=b;b=d;d=l}}c[d>>2]=a;d=c[a+16>>2]|0;if(!d){d=a;a=b;break}else{l=a;a=d;d=l}}c[d+16>>2]=a;a=c[g>>2]|0}f=f+1|0}while((f|0)!=32);Ra=o;return a|0}function Df(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=c[d+12>>2]|0;m=k+12|0;c[m>>2]=(c[m>>2]|0)+-1;m=d+30|0;n=(b[m>>1]|0)+-1<<16>>16;b[m>>1]=n;if(n<<16>>16)return;m=b[d+28>>1]|0;if(m&1){if(!(a[k+32>>0]|0))return;cb[c[29440>>2]&255](c[k+44>>2]|0,c[d>>2]|0,0);return}n=k+8|0;e=c[n>>2]|0;j=d+36|0;g=c[j>>2]|0;if((e|0)==(d|0)){c[n>>2]=g;l=g}else l=e;i=d+32|0;f=c[i>>2]|0;h=(f|0)==0;if(h){c[k+4>>2]=g;e=g}else{c[f+36>>2]=g;e=c[j>>2]|0}do if(!e){c[k>>2]=f;if(h){a[k+33>>0]=2;c[j>>2]=0;c[i>>2]=0;e=k;g=16;break}else{c[j>>2]=0;e=k;g=15;break}}else{c[e+32>>2]=f;f=c[k>>2]|0;c[j>>2]=0;c[i>>2]=f;if(!f){e=k;g=16}else{e=k;g=15}}while(0);if((g|0)==15)c[f+36>>2]=d;else if((g|0)==16){c[k+4>>2]=d;if(a[k+32>>0]|0)a[k+33>>0]=1}c[e>>2]=d;if(!((m&8)==0&(l|0)==0))return;c[n>>2]=d;return}function Ef(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+32|0;l=p+16|0;n=p;o=p+8|0;a[e>>0]=0;i=Xa[c[(c[b>>2]|0)+24>>2]&255](b,n)|0;h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;if((i|0)!=0|((h|0)<0|(h|0)==0&g>>>0<16)){e=i;Ra=p;return e|0}m=Sv(g|0,h|0,-16,-1)|0;g=L()|0;g=_a[c[(c[b>>2]|0)+8>>2]&127](b,l,4,m,g)|0;if(g|0){e=g;Ra=p;return e|0}i=l+1|0;j=l+2|0;k=l+3|0;m=d[i>>0]<<16|d[l>>0]<<24|d[j>>0]<<8|d[k>>0];if(m>>>0>=f>>>0){e=0;Ra=p;return e|0}h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;f=Sv(g|0,h|0,-16,-1)|0;q=L()|0;if((m|0)==0|((q|0)<0|(q|0)==0&f>>>0<m>>>0)){q=0;Ra=p;return q|0}q=Sv(g|0,h|0,-12,-1)|0;g=L()|0;g=_a[c[(c[b>>2]|0)+8>>2]&127](b,l,4,q,g)|0;if(g|0){q=g;Ra=p;return q|0}g=d[i>>0]<<16|d[l>>0]<<24|d[j>>0]<<8|d[k>>0];q=n;q=Sv(c[q>>2]|0,c[q+4>>2]|0,-8,-1)|0;h=L()|0;h=_a[c[(c[b>>2]|0)+8>>2]&127](b,o,8,q,h)|0;if(h|0){q=h;Ra=p;return q|0}if(Lu(o,32352,8)|0){q=0;Ra=p;return q|0}q=n;h=c[q>>2]|0;q=c[q+4>>2]|0;o=Tv(-16,-1,m|0,0)|0;q=Sv(o|0,L()|0,h|0,q|0)|0;h=L()|0;h=_a[c[(c[b>>2]|0)+8>>2]&127](b,e,m,q,h)|0;if(h|0){q=h;Ra=p;return q|0}h=0;do{g=g-(a[e+h>>0]|0)|0;h=h+1|0}while((h|0)!=(m|0));a[e+((g|0)==0?m:0)>>0]=0;q=0;Ra=p;return q|0}function Ff(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=d+100|0;c[e>>2]=(c[e>>2]|0)+1;e=c[d+88>>2]|0;if(e|0)do{c[e+16>>2]=1;e=c[e+44>>2]|0}while((e|0)!=0);j=c[d+212>>2]|0;k=j+44|0;if(!(c[k>>2]|0))return;e=c[j>>2]|0;if(e|0)do{h=e;e=c[e+32>>2]|0;if(c[h+24>>2]|0){i=c[h+12>>2]|0;f=i+8|0;g=h+36|0;d=c[g>>2]|0;if((c[f>>2]|0)==(h|0))c[f>>2]=d;f=(e|0)==0;if(f)c[i+4>>2]=d;else{c[e+36>>2]=d;d=c[g>>2]|0}if(!d){c[i>>2]=e;if(f)a[i+33>>0]=2}else c[d+32>>2]=e;g=h+28|0;b[g>>1]=b[g>>1]&-16|1;if((b[h+30>>1]|0)==0?a[i+32>>0]|0:0)cb[c[29440>>2]&255](c[i+44>>2]|0,c[h>>2]|0,0)}}while((e|0)!=0);if((c[j+12>>2]|0)!=0?(l=Ya[c[29436>>2]&127](c[k>>2]|0,1,0)|0,(l|0)!=0):0){gw(c[l>>2]|0,0,c[j+24>>2]|0)|0;e=2}else e=1;bb[c[29448>>2]&127](c[k>>2]|0,e);return}function Gf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+48|0;o=p+32|0;g=p+16|0;f=p;k=c[e+52>>2]|0;l=c[e+56>>2]|0;m=d[e+9>>0]|0;n=l+m|0;q=d[n>>0]|0;j=q>>>3;h=j&255;a[e+8>>0]=h;j=4-(j<<2)|0;a[e+10>>0]=j;i=e+76|0;c[i>>2]=120;switch((q&247)<<24>>24){case 5:{a[e+2>>0]=1;f=e+3|0;if(!(h<<24>>24)){a[f>>0]=0;c[i>>2]=121;f=181}else{a[f>>0]=1;f=180}c[e+80>>2]=f;b[e+14>>1]=b[k+28>>1]|0;f=k+30|0;break}case 2:{a[e+2>>0]=0;a[e+3>>0]=0;c[e+80>>2]=179;b[e+14>>1]=b[k+24>>1]|0;f=k+26|0;break}default:{c[f>>2]=32306;c[f+4>>2]=65035;c[f+8>>2]=31517;Db(11,32001,f);c[g>>2]=32306;c[g+4>>2]=65185;c[g+8>>2]=31517;Db(11,32001,g);q=11;Ra=p;return q|0}}b[e+16>>1]=b[f>>1]|0;a[e+11>>0]=a[k+21>>0]|0;q=c[k+32>>2]|0;b[e+26>>1]=q+65535;a[e+12>>0]=0;j=j&252;b[e+18>>1]=m+8+j;c[e+64>>2]=n+j+8;c[e+60>>2]=l+(c[k+36>>2]|0);c[e+68>>2]=l+j;n=n+3|0;n=(d[n>>0]|0)<<8|(d[n+1>>0]|0);b[e+24>>1]=n;if(n>>>0>(((q+-8|0)>>>0)/6|0)>>>0){c[o>>2]=32306;c[o+4>>2]=65199;c[o+8>>2]=31517;Db(11,32001,o);q=11;Ra=p;return q|0}c[e+20>>2]=-1;a[e>>0]=1;if(0==0?(c[(c[k+4>>2]|0)+32>>2]&2097152|0)==0:0){q=0;Ra=p;return q|0}q=Hf(e)|0;Ra=p;return q|0}function Hf(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;q=r+16|0;p=r;k=e[f+18>>1]|0;m=f+24|0;l=b[m>>1]|0;n=((l&65535)<<1)+k|0;h=c[(c[f+52>>2]|0)+36>>2]|0;i=c[f+56>>2]|0;o=((a[f+8>>0]|0)==0?-5:-4)+h|0;if(!(l<<16>>16)){q=0;Ra=r;return q|0}j=f+76|0;g=0;while(1){l=i+((g<<1)+k)|0;l=d[l>>0]<<8|d[l+1>>0];if(l>>>0<n>>>0|(l|0)>(o|0)){f=5;break}g=g+1|0;if((l+((Xa[c[j>>2]&255](f,i+l|0)|0)&65535)|0)>(h|0)){f=7;break}if(g>>>0>=(e[m>>1]|0)>>>0){g=0;f=8;break}}if((f|0)==5){c[p>>2]=32306;c[p+4>>2]=65148;c[p+8>>2]=31517;Db(11,32001,p);q=11;Ra=r;return q|0}else if((f|0)==7){c[q>>2]=32306;c[q+4>>2]=65153;c[q+8>>2]=31517;Db(11,32001,q);q=11;Ra=r;return q|0}else if((f|0)==8){Ra=r;return g|0}return 0}function If(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0;i=f+(d[b+10>>0]|0)|0;j=a[i>>0]|0;h=j&255;if(j<<24>>24<0){g=0;h=h&127;do{g=g+1|0;j=a[i+g>>0]|0;h=h<<7|j&127}while(j<<24>>24<0&g>>>0<8);i=i+g|0;j=h}else j=h;if(!(a[b+2>>0]|0))g=i+1|0;else{g=1;do{h=g;g=g+1|0}while((a[i+h>>0]|0)<0&g>>>0<10);g=i+g|0}h=e[b+14>>1]|0;if(j>>>0>h>>>0){i=e[b+16>>1]|0;b=(((j-i|0)>>>0)%(((c[(c[b+52>>2]|0)+36>>2]|0)+-4|0)>>>0)|0)+i|0;f=(g-f&65535)+4+(b>>>0>h>>>0?i:b)|0;f=f&65535;return f|0}else{f=g-f+j|0;f=f>>>0>4?f:4;f=f&65535;return f|0}return 0}function Jf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=a[f>>0]|0;i=n&255;if(n<<24>>24<0){h=0;i=i&127;do{h=h+1|0;n=a[f+h>>0]|0;i=i<<7|n&127}while(n<<24>>24<0&h>>>0<8);n=f+h|0}else n=f;h=n+1|0;m=a[h>>0]|0;j=m&255;do if(m<<24>>24<0){j=cw(j|0,0,7)|0;L()|0;h=n+2|0;m=a[h>>0]|0;j=j&16256|m&127;if(m<<24>>24<=-1){k=2;h=1;l=0;while(1){if(h>>>0>6){m=10;break}j=cw(j|0,l|0,7)|0;l=L()|0;h=k+1|0;m=a[n+h>>0]|0;j=j|m&127;if(m<<24>>24>-1){m=11;break}else{m=k;k=h;h=m}}if((m|0)==10){m=cw(j|0,l|0,8)|0;l=L()|0;j=n+k+1|0;h=j;j=m|(d[j>>0]|0);break}else if((m|0)==11){h=n+h|0;break}}else l=0}else l=0;while(0);k=h+1|0;h=g;c[h>>2]=j;c[h+4>>2]=l;c[g+12>>2]=i;c[g+8>>2]=k;h=b[e+14>>1]|0;if(i>>>0>(h&65535)>>>0){Nf(h,b[e+16>>1]|0,c[(c[e+52>>2]|0)+36>>2]|0,f,g);return}else{f=k-f+i|0;b[g+18>>1]=(f&65532|0)==0?4:f&65535;b[g+16>>1]=i;return}}function Kf(b,c){b=b|0;c=c|0;var d=0;b=4;do{d=b;b=b+1|0}while((a[c+d>>0]|0)<0&b>>>0<13);return b&65535|0}function Lf(a,d,e){a=a|0;d=d|0;e=e|0;d=((Of(d+4|0,e)|0)&255)+4&65535;b[e+18>>1]=d;c[e+12>>2]=0;b[e+16>>1]=0;c[e+8>>2]=0;return}function Mf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f+(d[e+10>>0]|0)|0;i=a[k>>0]|0;j=i&255;if(i<<24>>24<0){h=0;i=j&127;do{h=h+1|0;j=a[k+h>>0]|0;i=i<<7|j&127}while(j<<24>>24<0&h>>>0<8);h=k+h|0;j=i}else h=k;h=h+1|0;i=g;c[i>>2]=j;c[i+4>>2]=0;c[g+12>>2]=j;c[g+8>>2]=h;i=b[e+14>>1]|0;if(j>>>0>(i&65535)>>>0){Nf(i,b[e+16>>1]|0,c[(c[e+52>>2]|0)+36>>2]|0,f,g);return}else{f=h-f+j|0;b[g+18>>1]=(f&65532|0)==0?4:f&65535;b[g+16>>1]=j;return}}function Nf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=d&65535;e=((((c[g+12>>2]|0)-h|0)>>>0)%((e+-4|0)>>>0)|0)+h|0;a=(e|0)>(a&65535|0);b[g+16>>1]=a?d:e&65535;b[g+18>>1]=4-f+((c[g+8>>2]|0)+(a?h:e&65535));return}function Of(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a[b>>0]|0;g=f&255;do if(g&128){f=d[b+1>>0]|0;if(!(f&128)){l=2;j=0;f=g<<7&16256|f;break}l=d[b+2>>0]|0;g=(g<<14|l)&2080895;if(!(l&128)){l=3;j=0;f=g|f<<7&16256;break}l=d[b+3>>0]|0;f=(f<<14|l)&2080895;if(!(l&128)){l=4;j=0;f=f|g<<7;break}k=a[b+4>>0]|0;l=k&255;h=g<<14|l;if(!(l&128)){l=5;j=g>>>18;f=h|f<<7;break}j=f|g<<7;l=d[b+5>>0]|0;i=f<<14|l;if(!(l&128)){l=6;j=j>>>18;f=i|h<<7&266354560;break}l=d[b+6>>0]|0;f=h<<14|l;if(!(l&128)){l=7;j=j>>>11;f=f&-266354561|i<<7&266354560;break}g=f&2080895;l=d[b+7>>0]|0;f=i<<14|l;if(!(l&128)){l=8;j=j>>>4;f=f&-266354561|g<<7;break}else{l=9;j=(k&120)>>>3|j<<4;f=f<<8&532709120|g<<15|(d[b+8>>0]|0);break}}else{l=1;j=0;f=f&255}while(0);c[e>>2]=f;c[e+4>>2]=j;return l|0}function Pf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;l=n+8|0;k=n;j=n+12|0;if(!b){b=0;Ra=n;return b|0}if(g){i=b+4|0;h=c[i>>2]|0;h=Xa[c[(c[h>>2]|0)+28>>2]&255](h,4)|0;if(!h){h=b+43|0;if(!(a[h>>0]|0))a[h>>0]=1;h=Qf(b,d,0,0,0,e,f,g,0,0)|0;if(!h){c[j>>2]=-1;h=c[i>>2]|0;d=c[h>>2]|0;if((d|0)!=0?(Ya[c[d+40>>2]&127](h,10,j)|0,(c[j>>2]|0)==1):0){j=b+16|0;i=c[j+4>>2]|0;if((i|0)>-1|(i|0)==-1&(c[j>>2]|0)>>>0>4294967295){d=b+8|0;h=c[d>>2]|0;h=Xa[c[(c[h>>2]|0)+24>>2]&255](h,k)|0;j=c[k+4>>2]|0;if((h|0)==0&((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)){h=c[d>>2]|0;h=Ya[c[(c[h>>2]|0)+16>>2]&127](h,0,0)|0}if(h|0){c[l>>2]=c[b+108>>2];Db(h,32326,l)}h=0}else h=0}else h=1;j=0}else{j=h;h=0}}else{j=h;h=0}}else{j=0;h=0}g=b+43|0;d=a[g>>0]|0;if(d<<24>>24!=2?(a[b+50>>0]|0)==0:0)m=27;else{i=b+24|0;if((c[i>>2]|0)>0){e=b+32|0;d=0;do{f=c[(c[e>>2]|0)+(d<<2)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[(c[e>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)<(c[i>>2]|0));d=a[g>>0]|0}if(d<<24>>24!=2)m=27}if((m|0)==27){m=c[b+4>>2]|0;Xa[c[(c[m>>2]|0)+64>>2]&255](m,h)|0}d=c[b+8>>2]|0;e=c[d>>2]|0;if(e|0){Wa[c[e+4>>2]&127](d)|0;c[d>>2]=0}if(h|0){m=c[b>>2]|0;Ya[c[m+28>>2]&127](m,c[b+108>>2]|0,0)|0}h=c[b+32>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=j;Ra=n;return b|0}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=j;Ra=n;return b|0}return 0}function Qf(f,g,h,i,j,k,l,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;la=Ra;Ra=Ra+144|0;r=la+120|0;fa=la;Z=la+104|0;ia=la+132|0;c[ia>>2]=0;if(a[f+46>>0]|0){h=8;Ra=la;return h|0}ka=f+43|0;if((a[ka>>0]|0)==0?(p=c[f+4>>2]|0,p=Za[c[(c[p>>2]|0)+56>>2]&127](p,1,1,10)|0,p|0):0){h=p;Ra=la;return h|0}ja=f+45|0;a[ja>>0]=1;a:do if(!h){p=0;ea=14}else{p=f+4|0;b:do if(!i){if(!(a[ka>>0]|0)){q=c[p>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,0,1,10)|0;ea=12}}else while(1){if(a[ka>>0]|0)break b;q=c[p>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,0,1,10)|0;if((q|0)!=5){ea=12;break b}if(!(Wa[i&127](j)|0)){p=0;i=0;ea=14;break a}}while(0);if((ea|0)==12)switch(q|0){case 5:{p=0;i=0;ea=14;break a}case 0:break;default:{ha=h;break a}}a[f+44>>0]=1;p=h;ea=14}while(0);if((ea|0)==14){ha=p;q=hf(f,ia)|0}c:do if(!q){ga=f+68|0;s=c[ga>>2]|0;aa=e[f+66>>1]|0;aa=aa<<16&65536|aa&65024;if(!((s|0)==0|(aa|0)==(l|0))){c[r>>2]=32306;c[r+4>>2]=61939;c[r+8>>2]=31517;Db(11,32001,r);q=11;break}da=f+32|0;S=c[c[da>>2]>>2]|0;ca=S+96|0;d:do if((c[ca>>2]|0)>>>0<s>>>0){_=f+72|0;$=c[_>>2]|0;ba=f+4|0;p=S+104|0;l=c[p>>2]|0;e:do if(s>>>0>l>>>0){f:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,10)|0;i=0}else{i=0;ea=28}else while(1){if(a[ka>>0]|0){ea=28;break f}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,10)|0;if((q|0)!=5)break f;if(!(Wa[i&127](j)|0)){i=0;q=5;break e}}while(0);if((ea|0)==28){c[p>>2]=s;q=0;l=s;break}switch(q|0){case 5:{i=0;break e}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=s;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,9)|0;q=0;l=s}else{q=0;l=s}}else{q=0;l=s}while(0);p=S+108|0;r=c[p>>2]|0;g:do if(l>>>0>r>>>0){h:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,10)|0}else ea=161;else while(1){if(a[ka>>0]|0){ea=161;break h}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,10)|0;if((q|0)!=5)break h;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break g}}while(0);if((ea|0)==161){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break g}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,9)|0;q=0}else q=0}while(0);p=S+112|0;r=c[p>>2]|0;i:do if(l>>>0>r>>>0){j:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,10)|0}else ea=173;else while(1){if(a[ka>>0]|0){ea=173;break j}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,10)|0;if((q|0)!=5)break j;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break i}}while(0);if((ea|0)==173){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break i}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,9)|0;q=0}else q=0}while(0);p=S+116|0;r=c[p>>2]|0;k:do if(l>>>0>r>>>0){l:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,10)|0}else ea=185;else while(1){if(a[ka>>0]|0){ea=185;break l}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,10)|0;if((q|0)!=5)break l;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break k}}while(0);if((ea|0)==185){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break k}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,9)|0;q=0}else q=0}while(0);m:do if((c[ca>>2]|0)>>>0<l>>>0){q=c[ca>>2]|0;P=c[ga>>2]|0;Q=(P+33|0)>>>12;p=(P<<1)+28+(Q*20|0)|0;W=pb(p,0)|0;if(!W){q=7;break c}gw(W|0,0,p|0)|0;R=W+4|0;c[R>>2]=Q+1;N=pb((P>>>0<4096?P:4096)<<1,0)|0;O=(N|0)==0;p=(q+34|0)>>>12;n:do if(p>>>0>Q>>>0|O)q=O?7:0;else{H=Z+4|0;I=f+24|0;J=Z+8|0;K=W+8|0;M=fa+4|0;while(1){if((c[I>>2]|0)>(p|0)?(T=c[(c[da>>2]|0)+(p<<2)>>2]|0,c[H>>2]=T,(T|0)!=0):0)q=T;else{q=kf(f,p,H)|0;if(q|0)break;q=c[H>>2]|0}r=q+16384|0;c[Z>>2]=r;if(!p){q=q+136|0;c[H>>2]=q;s=0}else s=(p<<12)+-34|0;c[H>>2]=q;G=q;E=(p|0)==(Q|0)?P-s|0:r-G>>2;F=K+((c[R>>2]|0)*20|0)+(s<<1)|0;D=s+1|0;c[J>>2]=D;if((E|0)>0){r=0;do{b[F+(r<<1)>>1]=r;r=r+1|0}while((r|0)!=(E|0));v=fa;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));C=0;do{t=F+(C<<1)|0;if(!(C&1)){u=0;r=1;s=M}else{r=1;A=0;s=M;while(1){B=c[s>>2]|0;z=c[fa+(A<<3)>>2]|0;u=(r|0)>0;s=(z|0)>0;if(u|s){w=0;y=0;v=0;while(1){do if(s){s=B+(v<<1)|0;if(u?(U=t+(w<<1)|0,(c[q+(e[s>>1]<<2)>>2]|0)>>>0>=(c[q+(e[U>>1]<<2)>>2]|0)>>>0):0){s=U;ea=57;break}u=v+1|0}else{s=t+(w<<1)|0;ea=57}while(0);if((ea|0)==57){ea=0;u=v;w=w+1|0}v=b[s>>1]|0;s=c[q+((v&65535)<<2)>>2]|0;x=y+1|0;b[N+(y<<1)>>1]=v;if((u|0)<(z|0))v=u+((c[q+(e[B+(u<<1)>>1]<<2)>>2]|0)==(s|0)&1)|0;else v=u;u=(w|0)<(r|0);s=(v|0)<(z|0);if(!(u|s)){r=x;break}else y=x}}else r=0;ew(B|0,N|0,r<<1|0)|0;t=A+1|0;s=fa+(t<<3)+4|0;if(!(1<<t&C)){u=t;t=B;break}else{A=t;t=B}}}c[s>>2]=t;c[fa+(u<<3)>>2]=r;C=C+1|0}while((C|0)!=(E|0));s=u+1|0;if(s>>>0<13)ea=64;else q=r}else{v=fa;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));r=0;s=1;t=0;ea=64}if((ea|0)==64){ea=0;do{if(1<<s&E){B=c[fa+(s<<3)+4>>2]|0;A=c[fa+(s<<3)>>2]|0;v=(r|0)>0;u=(A|0)>0;if(v|u){x=0;z=0;w=0;while(1){do if(u){u=B+(w<<1)|0;if(v?(V=t+(x<<1)|0,(c[q+(e[u>>1]<<2)>>2]|0)>>>0>=(c[q+(e[V>>1]<<2)>>2]|0)>>>0):0){u=V;ea=73;break}v=w+1|0}else{u=t+(x<<1)|0;ea=73}while(0);if((ea|0)==73){ea=0;v=w;x=x+1|0}C=b[u>>1]|0;u=c[q+((C&65535)<<2)>>2]|0;y=z+1|0;b[N+(z<<1)>>1]=C;if((v|0)<(A|0))w=v+((c[q+(e[B+(v<<1)>>1]<<2)>>2]|0)==(u|0)&1)|0;else w=v;v=(x|0)<(r|0);u=(w|0)<(A|0);if(!(v|u)){r=y;break}else z=y}}else r=0;ew(B|0,N|0,r<<1|0)|0;t=B}s=s+1|0}while((s|0)!=13);q=r}c[K+(p*20|0)+16>>2]=D;c[K+(p*20|0)+12>>2]=q;c[K+(p*20|0)+4>>2]=F;c[K+(p*20|0)+8>>2]=G;if(p>>>0<Q>>>0)p=p+1|0;else{q=0;break n}}}while(0);do if(!O)if(!(c[7324]|0)){ab[c[29344>>2]&127](N);break}else{V=Wa[c[29352>>2]&127](N)|0;c[14978]=(c[14978]|0)-V;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](N);break}while(0);if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](W);p=0;l=0;ea=129;break}else{p=Wa[c[29352>>2]&127](W)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](W);p=0;l=0;ea=129;break}o:do if(!i){if(a[ka>>0]|0)break;X=c[ba>>2]|0;X=Za[c[(c[X>>2]|0)+56>>2]&127](X,3,1,10)|0;ea=95}else while(1){if(a[ka>>0]|0)break o;p=c[ba>>2]|0;p=Za[c[(c[p>>2]|0)+56>>2]&127](p,3,1,10)|0;if((p|0)!=5){X=p;ea=95;break o}if(!(Wa[i&127](j)|0)){p=W;l=W;break m}}while(0);if((ea|0)==95?X|0:0){q=X;p=W;l=W;ea=129;break}F=c[ca>>2]|0;c[S+128>>2]=l;E=f+8|0;p=c[E>>2]|0;G=k>>>2&3;H=(G|0)==0;if(!H?(Y=Xa[c[(c[p>>2]|0)+20>>2]&255](p,G)|0,(Y|0)!=0):0)q=Y;else ea=98;p:do if((ea|0)==98){k=Yv($|0,0,aa|0,0)|0;Y=L()|0;q=fa;c[q>>2]=k;c[q+4>>2]=Y;q=c[ba>>2]|0;q=Xa[c[(c[q>>2]|0)+24>>2]&255](q,Z)|0;if(q|0)break;Y=Z;X=c[Y+4>>2]|0;Z=fa;k=c[Z+4>>2]|0;do if((X|0)<(k|0)|((X|0)==(k|0)?(c[Y>>2]|0)>>>0<(c[Z>>2]|0)>>>0:0)){p=c[ba>>2]|0;q=c[p>>2]|0;if(!q)break;Ya[c[q+40>>2]&127](p,5,fa)|0}while(0);C=g+264|0;D=aa|24;p=c[R>>2]|0;q:do if((p|0)>0){q=0;while(1){B=c[W>>2]|0;r=-1;A=p;while(1){z=A;A=A+-1|0;u=W+8+(A*20|0)|0;s=c[u>>2]|0;v=c[W+8+(A*20|0)+12>>2]|0;r:do if((s|0)<(v|0)){w=c[W+8+(A*20|0)+8>>2]|0;x=c[W+8+(A*20|0)+4>>2]|0;while(1){t=b[x+(s<<1)>>1]|0;y=c[w+((t&65535)<<2)>>2]|0;if(y>>>0>B>>>0)break;s=s+1|0;c[u>>2]=s;if((s|0)>=(v|0)){s=q;break r}}if(y>>>0>=r>>>0){s=q;break}s=(c[W+8+(A*20|0)+16>>2]|0)+(t&65535)|0;r=y}else s=q;while(0);if((z|0)<=1)break;else q=s}c[W>>2]=r;if((r|0)==-1)break q;if(c[C>>2]|0)break;if(!(s>>>0<=F>>>0|s>>>0>l>>>0|r>>>0>$>>>0)){Z=Yv(s+-1|0,0,D|0,0)|0;Z=Sv(Z|0,L()|0,56,0)|0;q=L()|0;Y=c[E>>2]|0;q=_a[c[(c[Y>>2]|0)+8>>2]&127](Y,m,aa,Z,q)|0;if(q|0)break p;Z=Yv(r+-1|0,0,aa|0,0)|0;q=L()|0;Y=c[ba>>2]|0;q=_a[c[(c[Y>>2]|0)+12>>2]&127](Y,m,aa,Z,q)|0;if(q|0)break p;p=c[R>>2]|0}if((p|0)>0)q=s;else{ea=105;break q}}q=(a[g+81>>0]|0)==0?9:7;break p}else ea=105;while(0);if((ea|0)==105)c[W>>2]=-1;do if((l|0)==(c[(c[c[da>>2]>>2]|0)+16>>2]|0)){ea=Yv(c[_>>2]|0,0,aa|0,0)|0;q=L()|0;m=c[ba>>2]|0;q=Ya[c[(c[m>>2]|0)+16>>2]&127](m,ea,q)|0;if(q|0)break p;p=c[ba>>2]|0;if(H)break;q=Xa[c[(c[p>>2]|0)+20>>2]&255](p,G)|0;if(q|0)break p}while(0);c[ca>>2]=l;q=0}while(0);if(a[ka>>0]|0){p=W;l=W;ea=129;break}p=c[ba>>2]|0;Za[c[(c[p>>2]|0)+56>>2]&127](p,3,1,9)|0;p=W;l=W;ea=129}else{p=0;l=0;ea=129}while(0);if((ea|0)==129)if((q|0)!=5){u=l;ea=131;break}q=0;u=l;ea=131}else{q=0;p=0;u=0;ea=131}while(0);do if((ea|0)==131){if((ha|0)!=0&(q|0)==0)if((c[ca>>2]|0)>>>0>=(c[ga>>2]|0)>>>0)if((ha|0)>1){Fb(4,fa);t=f+4|0;s:do if(!i)if(!(a[ka>>0]|0)){q=c[t>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,4,10)|0;ea=141}else ea=142;else while(1){if(a[ka>>0]|0){ea=142;break s}q=c[t>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,4,10)|0;if((q|0)!=5){ea=141;break s}if(!(Wa[i&127](j)|0)){q=5;break}}while(0);if((ea|0)==141)if(!q)ea=142;if((ea|0)==142){if((ha|0)==3){s=c[fa>>2]|0;i=c[da>>2]|0;q=c[i>>2]|0;l=q+96|0;ea=f+84|0;fa=f+112|0;c[fa>>2]=(c[fa>>2]|0)+1;c[ga>>2]=0;fa=ea+1|0;v=ea+2|0;r=ea+3|0;w=(d[fa>>0]<<16|d[ea>>0]<<24|d[v>>0]<<8|d[r>>0])+1|0;a[ea>>0]=w>>>24;a[fa>>0]=w>>>16;a[v>>0]=w>>>8;a[r>>0]=w;c[f+88>>2]=s;i=c[i>>2]|0;r=f+52|0;a[f+64>>0]=1;c[r>>2]=3007e3;w=c[r+4>>2]|0;v=w+6014e3+(c[r+8>>2]|0)|0;w=w+3007e3+(c[r+12>>2]|0)+v|0;v=w+v|0;w=w+(c[r+20>>2]|0)+v|0;v=v+(c[r+24>>2]|0)+w|0;w=w+(c[r+28>>2]|0)+v|0;v=v+(c[r+32>>2]|0)+w|0;c[f+92>>2]=v;c[f+96>>2]=w+s+v;v=i+48|0;s=r;w=v+48|0;do{a[v>>0]=a[s>>0]|0;v=v+1|0;s=s+1|0}while((v|0)<(w|0));if((a[ka>>0]|0)!=2){fa=c[t>>2]|0;ab[c[(c[fa>>2]|0)+60>>2]&127](fa)}v=i;s=r;w=v+48|0;do{a[v>>0]=a[s>>0]|0;v=v+1|0;s=s+1|0}while((v|0)<(w|0));c[l>>2]=0;c[q+128>>2]=0;c[q+104>>2]=0;c[q+108>>2]=-1;c[q+112>>2]=-1;c[q+116>>2]=-1;q=c[f+8>>2]|0;q=Ya[c[(c[q>>2]|0)+16>>2]&127](q,0,0)|0}else q=0;if(!(a[ka>>0]|0)){fa=c[t>>2]|0;Za[c[(c[fa>>2]|0)+56>>2]&127](fa,4,4,9)|0}}}else q=0;else q=5;if(p)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{fa=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);switch(q|0){case 0:case 5:break;default:break c}if(n|0)c[n>>2]=c[ga>>2];if(o)c[o>>2]=c[(c[c[da>>2]>>2]|0)+96>>2]}while(0);if(c[ia>>2]|0){v=f+52|0;w=v+48|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0))}p=f+44|0;if(a[p>>0]|0){if(!(a[ka>>0]|0)){ia=c[f+4>>2]|0;Za[c[(c[ia>>2]|0)+56>>2]&127](ia,0,1,9)|0}a[p>>0]=0;c[f+104>>2]=0;a[f+47>>0]=0}if(!(a[ka>>0]|0)){ka=c[f+4>>2]|0;Za[c[(c[ka>>2]|0)+56>>2]&127](ka,1,1,9)|0}a[ja>>0]=0;h=(ha|0)==(h|0)|(q|0)!=0?q:5;Ra=la;return h|0}function Rf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=e+44|0;if(c[l>>2]|0){n=0;return n|0}m=c[e+12>>2]|0;j=m+56|0;n=c[j>>2]|0;i=c[m+72>>2]|0;h=c[i+20>>2]|0;if((b[i+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[i+24>>2]|0)>>>0:0){if(c[h+96>>2]|0){f=Ve(i)|0;g=10}}else g=6;do if((g|0)==6){f=c[h+40>>2]|0;if(f|0){n=f;return n|0}if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(i)|0;g=10;break}else{f=Xf(i)|0;g=10;break}}while(0);if((g|0)==10?f|0:0){n=f;return n|0}f=n;g=2720;h=f+16|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(h|0));f=e+32|0;a[n+16>>0]=(c[f>>2]|0)>>>8;a[n+17>>0]=(c[f>>2]|0)>>>16;a[n+18>>0]=1;a[n+19>>0]=1;a[n+20>>0]=(c[f>>2]|0)-(c[e+36>>2]|0);a[n+21>>0]=64;a[n+22>>0]=32;a[n+23>>0]=32;f=n+24|0;h=f+76|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(h|0));h=c[j>>2]|0;i=m+52|0;j=c[i>>2]|0;k=d[m+9>>0]|0;if(!(b[j+22>>1]&12)){f=h+k|0;g=j+36|0}else{g=j+36|0;f=h+k|0;gw(f|0,0,(c[g>>2]|0)-k|0)|0}a[f>>0]=13;f=k+8|0;o=h+(k+1)|0;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;a[h+(k+7)>>0]=0;k=h+(k+5)|0;a[k>>0]=(c[g>>2]|0)>>>8;a[k+1>>0]=c[g>>2];c[m+20>>2]=(c[g>>2]|0)-f&65535;a[m+8>>0]=1;a[m+10>>0]=0;c[m+76>>2]=120;k=c[i>>2]|0;a[m+2>>0]=1;a[m+3>>0]=1;c[m+80>>2]=180;b[m+14>>1]=b[k+28>>1]|0;b[m+16>>1]=b[k+30>>1]|0;a[m+11>>0]=a[k+21>>0]|0;b[m+18>>1]=f;c[m+60>>2]=h+(c[g>>2]|0);c[m+64>>2]=h+f;c[m+68>>2]=h;a[m+12>>0]=0;b[m+26>>1]=(c[j+32>>2]|0)+65535;b[m+24>>1]=0;a[m>>0]=1;m=e+22|0;b[m>>1]=b[m>>1]|2;m=a[e+17>>0]|0;a[n+52>>0]=0;a[n+53>>0]=0;a[n+54>>0]=0;a[n+55>>0]=m;m=a[e+18>>0]|0;a[n+64>>0]=0;a[n+65>>0]=0;a[n+66>>0]=0;a[n+67>>0]=m;c[l>>2]=1;a[n+31>>0]=1;n=0;return n|0}function Sf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+48|0;p=F+16|0;D=F;u=F+32|0;h=F+28|0;B=d+216|0;f=c[B>>2]|0;a:do if(!f){A=d+16|0;b:do if(!(a[A>>0]|0)){q=d+17|0;z=d+13|0;y=d+60|0;f=d+176|0;g=d+180|0;c:while(1){e=a[q>>0]|0;switch(e<<24>>24){case 0:case 5:break;default:{t=11;break c}}if(a[z>>0]|0){t=8;break}e=c[y>>2]|0;e=Xa[c[(c[e>>2]|0)+28>>2]&255](e,1)|0;switch(e|0){case 0:{t=7;break c}case 5:break;default:{t=136;break a}}if(!(Wa[c[f>>2]&127](c[g>>2]|0)|0)){e=5;t=138;break a}}if((t|0)==7){e=a[q>>0]|0;t=8}else if((t|0)==11)if((e&255)<2)t=12;else t=48;if((t|0)==8)if(e<<24>>24==5)t=48;else{a[q>>0]=1;t=12}if((t|0)==12){g=c[d>>2]|0;c[u>>2]=1;j=d+64|0;k=(c[c[j>>2]>>2]|0)!=0;if(k){e=0;f=1}else{e=Za[c[g+32>>2]&127](g,c[d+172>>2]|0,0,u)|0;f=c[u>>2]|0}if((f|0)!=0&(e|0)==0){c[h>>2]=0;e=c[y>>2]|0;e=Xa[c[(c[e>>2]|0)+36>>2]&255](e,h)|0;d:do if(!(c[h>>2]|e)){e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(i=c[e+72>>2]|0,(i|0)!=0):0){e=i;t=22}else t=19;do if((t|0)==19){e=c[y>>2]|0;f=c[e>>2]|0;if(f){i=D;c[i>>2]=0;c[i+4>>2]=0;e=Xa[c[f+24>>2]&255](e,D)|0;if(!e){i=D;t=c[d+152>>2]|0;e=((t|0)<0)<<31>>31;i=Sv(c[i>>2]|0,c[i+4>>2]|0,-1,-1)|0;i=Sv(i|0,L()|0,t|0,e|0)|0;e=Wv(i|0,L()|0,t|0,e|0)|0;L()|0;t=22;break}else{f=0;break d}}else{l=0;t=25}}while(0);if((t|0)==22){f=d+156|0;if(e>>>0>(c[f>>2]|0)>>>0)c[f>>2]=e;else{l=e;t=25}}if((t|0)==25?!(k|(l|0)!=0):0){e=a[q>>0]|0;switch(e<<24>>24){case 0:case 1:case 5:{if(!(a[z>>0]|0)){n=c[y>>2]|0;if(Xa[c[(c[n>>2]|0)+28>>2]&255](n,2)|0){f=0;e=0;break d}e=a[q>>0]|0}if(e<<24>>24!=5)a[q>>0]=2;break}default:{}}Ya[c[g+28>>2]&127](g,c[d+172>>2]|0,0)|0;if(a[d+4>>0]|0){f=0;e=0;break}e=c[y>>2]|0;f=c[e>>2]|0;if(!f){f=0;e=0;break}if(!(a[z>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[q>>0]|0)==5){f=0;e=0;break}a[q>>0]=1;f=0;e=0;break}e:do if(!k){c[D>>2]=2049;e=_a[c[g+24>>2]&127](g,c[d+172>>2]|0,c[j>>2]|0,2049,D)|0;switch(e|0){case 0:break e;case 14:break;default:{f=0;break d}}f=1;e=0;break d}while(0);a[D>>0]=0;e=c[j>>2]|0;e=_a[c[(c[e>>2]|0)+8>>2]&127](e,D,1,0,0)|0;e=(e|0)==522?0:e;if(!k?(m=c[j>>2]|0,n=c[m>>2]|0,n|0):0){Wa[c[n+4>>2]&127](m)|0;c[m>>2]=0}f=(a[D>>0]|0)!=0&1}else f=0;while(0)}else f=0;if(e|0){t=138;break a}if(f|0)t=48}do if((t|0)==48){if(a[d+14>>0]|0){e=776;t=138;break a}switch(a[q>>0]|0){case 0:case 1:case 2:case 3:case 5:{if((a[z>>0]|0)==0?(o=c[y>>2]|0,o=Xa[c[(c[o>>2]|0)+28>>2]&255](o,4)|0,o|0):0){e=o;t=138;break a}a[q>>0]=4;break}default:{}}h=d+64|0;e=c[h>>2]|0;f=c[e>>2]|0;if(!f){f=c[d>>2]|0;g=d+172|0;e=Za[c[f+32>>2]&127](f,c[g>>2]|0,0,D)|0;if((e|0)==0&(c[D>>2]|0)!=0){c[u>>2]=0;e=_a[c[f+24>>2]&127](f,c[g>>2]|0,c[h>>2]|0,2050,u)|0;if(!e)if(c[u>>2]&1){c[p>>2]=31984;c[p+4>>2]=55845;c[p+8>>2]=31517;Db(14,32001,p);e=c[h>>2]|0;f=c[e>>2]|0;if(!f)e=14;else{Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0;e=14}}else e=0}g=c[h>>2]|0;f=c[g>>2]|0;if(!f)if((a[d+4>>0]|0)==0?(r=c[y>>2]|0,s=c[r>>2]|0,(s|0)!=0):0){if(!(a[z>>0]|0))Xa[c[s+32>>2]&255](r,1)|0;if((a[q>>0]|0)!=5){a[q>>0]=1;t=72}else t=72}else t=72;else{e=g;t=61}}else t=61;do if((t|0)==61){if(!(a[d+7>>0]|0)){e=Xa[c[f+20>>2]&255](e,2)|0;if(e|0)break;e=c[h>>2]|0;f=c[e>>2]|0}e=Xa[c[f+24>>2]&255](e,d+80|0)|0;if(!e){e=xf(d,(a[d+12>>0]|0)==0&1)|0;a[A>>0]=0;t=72}}while(0);if((t|0)==72)if(!e)break;switch((e&255)<<24>>24){case 10:case 13:break;default:{t=138;break a}}c[d+40>>2]=e;a[A>>0]=6;c[d+204>>2]=75;t=138;break a}while(0);h=d+12|0;if(!(a[h>>0]|0)){if(a[d+23>>0]|0){e=c[y>>2]|0;e=_a[c[(c[e>>2]|0)+8>>2]&127](e,D,16,24,0)|0;switch(e|0){case 0:break;case 522:{c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;c[D+12>>2]=0;break}default:{t=136;break a}}if(Lu(d+104|0,D,16)|0)Ff(d);if(a[h>>0]|0){e=0;break}}e=c[d>>2]|0;g=d+220|0;e=Za[c[e+32>>2]&127](e,c[g>>2]|0,0,u)|0;f:do if(!e){if(!(c[u>>2]|0)){e=d+5|0;if((a[e>>0]|0)!=5){e=0;break}a[e>>0]=0;e=0;break}e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(v=c[e+72>>2]|0,(v|0)!=0):0){f=v;t=91}else t=88;do if((t|0)==88?(w=c[y>>2]|0,x=c[w>>2]|0,x|0):0){e=D;c[e>>2]=0;c[e+4>>2]=0;e=Xa[c[x+24>>2]&255](w,D)|0;if(!e){x=D;t=c[d+152>>2]|0;f=((t|0)<0)<<31>>31;x=Sv(c[x>>2]|0,c[x+4>>2]|0,-1,-1)|0;x=Sv(x|0,L()|0,t|0,f|0)|0;f=Wv(x|0,L()|0,t|0,f|0)|0;L()|0;t=91;break}else break b}while(0);do if((t|0)==91){e=d+156|0;if(f>>>0<=(c[e>>2]|0)>>>0){if(!f)break}else c[e>>2]=f;if(a[h>>0]|0)Ga();if(c[B>>2]|0)Ga();e=c[c[y>>2]>>2]|0;if(a[z>>0]|0){e=14;break f}if(!(a[d+4>>0]|0)){if((c[e>>2]|0)<=1){e=14;break f}if(!(c[e+52>>2]|0)){e=14;break f}}e=c[d+64>>2]|0;f=c[e>>2]|0;if(f|0){Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0}e=Uf(d)|0;if(e|0)break f;a[d+5>>0]=5;a[A>>0]=0;e=0;break f}while(0);e=c[d>>2]|0;e=Ya[c[e+28>>2]&127](e,c[g>>2]|0,0)|0}while(0)}else e=0}else e=0;while(0);f=c[B>>2]|0;if(!f)t=124;else t=111}else t=111;while(0);if((t|0)==111){c[D>>2]=0;e=f+44|0;if(a[e>>0]|0){if(!(a[f+43>>0]|0)){A=c[f+4>>2]|0;Za[c[(c[A>>2]|0)+56>>2]&127](A,0,1,9)|0}a[e>>0]=0;c[f+104>>2]=0;a[f+47>>0]=0}e=f+40|0;g=b[e>>1]|0;if(g<<16>>16>-1){if(!(a[f+43>>0]|0)){A=c[f+4>>2]|0;Za[c[(c[A>>2]|0)+56>>2]&127](A,(g<<16>>16)+3|0,1,5)|0}b[e>>1]=-1}g=c[B>>2]|0;f=0;do{f=f+1|0;e=gf(g,D,0,f)|0}while((e|0)==-1);if(c[D>>2]|e|0)Ff(d);t=124}g:do if((t|0)==124)if((a[d+12>>0]|0)==0?(E=d+16|0,(e|0)==0&(a[E>>0]|0)==0):0){g=d+24|0;e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(C=c[e+72>>2]|0,(C|0)!=0):0){e=C;t=133}else t=129;do if((t|0)==129){e=c[d+60>>2]|0;f=c[e>>2]|0;if(f){C=D;c[C>>2]=0;c[C+4>>2]=0;e=Xa[c[f+24>>2]&255](e,D)|0;if(!e){t=c[d+152>>2]|0;e=((t|0)<0)<<31>>31;D=Sv(c[D>>2]|0,c[D+4>>2]|0,-1,-1)|0;D=Sv(D|0,L()|0,t|0,e|0)|0;e=Wv(D|0,L()|0,t|0,e|0)|0;L()|0;t=133;break}else{t=138;break g}}else e=0}while(0);if((t|0)==133){f=d+156|0;if(e>>>0>(c[f>>2]|0)>>>0)c[f>>2]=e}c[g>>2]=e;e=E;t=139}else t=136;while(0);if((t|0)==136)if(!e){e=d+16|0;t=139}else t=138;if((t|0)==138){vf(d);d=e;Ra=F;return d|0}else if((t|0)==139){a[e>>0]=1;a[d+23>>0]=1;d=0;Ra=F;return d|0}return 0}function Tf(a){a=a|0;var b=0,d=0,e=0;d=a+80|0;a=c[d>>2]|0;if(!a)return;b=a+-4|0;c[d>>2]=b;a=b;do if((c[14816]|0)>>>0<=a>>>0)if((c[14817]|0)>>>0>a>>>0){c[14979]=(c[14979]|0)+-1;c[b>>2]=c[14819];c[14819]=b;b=(c[14820]|0)+1|0;c[14820]=b;c[14821]=(b|0)<(c[14815]|0)&1;break}else{a=Wa[c[29352>>2]&127](b)|0;e=7;break}else{a=Wa[c[29352>>2]&127](b)|0;e=7}while(0);do if((e|0)==7){c[14980]=(c[14980]|0)-a;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}while(0);c[d>>2]=0;return}function Uf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;s=u;f=d+4|0;e=a[f>>0]|0;a:do if(!(e<<24>>24))e=0;else{i=d+17|0;switch(a[i>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:break a}h=d+13|0;do if(!(a[h>>0]|0)){e=d+60|0;g=c[e>>2]|0;g=Xa[c[(c[g>>2]|0)+28>>2]&255](g,4)|0;if(!g){e=a[f>>0]|0;break}e=c[e>>2]|0;f=c[e>>2]|0;if(!f){t=g;Ra=u;return t|0}if(!(a[h>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[i>>0]|0)==5){t=g;Ra=u;return t|0}a[i>>0]=1;t=g;Ra=u;return t|0}while(0);a[i>>0]=4}while(0);n=c[d>>2]|0;p=c[d+60>>2]|0;o=c[d+220>>2]|0;k=d+160|0;j=c[k>>2]|0;k=c[k+4>>2]|0;q=d+216|0;c[q>>2]=0;i=(c[n+4>>2]|0)+120|0;r=Sv(i|0,0,-1,-1)|0;m=L()|0;do if(!(m>>>0>0|(m|0)==0&r>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f){e=7;break}else r=f}else{f=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){r=c[14978]|0;m=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=r>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(!g){e=7;break}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;r=g}else r=g}gw(r|0,0,i|0)|0;c[r>>2]=n;i=r+120|0;l=r+8|0;c[l>>2]=i;m=r+4|0;c[m>>2]=p;b[r+40>>1]=-1;f=r+16|0;c[f>>2]=j;c[f+4>>2]=k;c[r+108>>2]=o;f=r+48|0;a[f>>0]=1;g=r+49|0;a[g>>0]=1;d=r+43|0;a[d>>0]=e<<24>>24==0?0:2;c[s>>2]=524294;e=_a[c[n+24>>2]&127](n,o,i,524294,s)|0;if(!e){if(c[s>>2]&1|0)a[r+46>>0]=1;e=Wa[c[(c[p>>2]|0)+48>>2]&127](p)|0;if(e&1024|0)a[f>>0]=0;if(e&4096|0)a[g>>0]=0;c[q>>2]=r;e=0;break}f=a[d>>0]|0;if(f<<24>>24!=2?(a[r+50>>0]|0)==0:0)t=38;else{i=r+24|0;if((c[i>>2]|0)>0){g=r+32|0;f=0;do{h=c[(c[g>>2]|0)+(f<<2)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[(c[g>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)<(c[i>>2]|0));f=a[d>>0]|0}if(f<<24>>24!=2)t=38}if((t|0)==38){t=c[m>>2]|0;Xa[c[(c[t>>2]|0)+64>>2]&255](t,0)|0}f=c[l>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{t=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else e=7;while(0);t=e;Ra=u;return t|0}function Vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;n=a+96|0;e=c[n>>2]|0;d=a+92|0;q=sb(c[d>>2]|0,b*48|0,0)|0;if(!q){r=7;return r|0}gw(q+(e*48|0)|0,0,(b-e|0)*48|0)|0;c[d>>2]=q;if((e|0)>=(b|0)){r=0;return r|0}i=a+24|0;j=a+64|0;k=a+148|0;l=a+52|0;m=a+72|0;h=a+216|0;d=e;while(1){g=c[i>>2]|0;c[q+(d*48|0)+20>>2]=g;if((c[c[j>>2]>>2]|0)!=0?(p=m,o=c[p>>2]|0,p=c[p+4>>2]|0,(p|0)>0|(p|0)==0&o>>>0>0):0){a=o;e=p}else{a=c[k>>2]|0;e=0}f=q+(d*48|0)|0;c[f>>2]=a;c[f+4>>2]=e;c[q+(d*48|0)+24>>2]=c[l>>2];if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](512)|0;if(!a)break}else{a=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){s=c[14978]|0;f=Tv(e|0,f|0,a|0,((a|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&f>>>0<=s>>>0)&1}a=Wa[c[29340>>2]&127](a)|0;if(!a)break;e=Wa[c[29352>>2]&127](a)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}gw(a+4|0,0,508)|0;c[a>>2]=g;c[q+(d*48|0)+16>>2]=a;a=c[h>>2]|0;if(a|0){c[q+(d*48|0)+28>>2]=c[a+68>>2];c[q+(d*48|0)+32>>2]=c[a+76>>2];c[q+(d*48|0)+36>>2]=c[a+80>>2];c[q+(d*48|0)+40>>2]=c[a+112>>2]}d=d+1|0;c[n>>2]=d;if((d|0)>=(b|0)){d=0;r=22;break}}if((r|0)==22)return d|0;c[q+(d*48|0)+16>>2]=0;s=7;return s|0}function Wf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;s=C;x=c[e+20>>2]|0;w=x+152|0;g=((c[x+148>>2]|0)>>>0)/((c[w>>2]|0)>>>0)|0;B=x+20|0;a[B>>0]=a[B>>0]|4;p=e+24|0;i=c[p>>2]|0;f=i+-1|0;e=0-g|0;q=f&e;A=q+1|0;e=~(f&e);f=c[x+24>>2]|0;if(i>>>0>f>>>0)z=i+1+e|0;else z=(q+g|0)>>>0>f>>>0?f+1+e|0:g;r=(z|0)>0;if(!r){A=0;z=a[B>>0]|0;z=z&-5;a[B>>0]=z;Ra=C;return A|0}m=x+56|0;n=x+204|0;o=x+212|0;h=0;g=0;e=i;a:while(1){l=h+A|0;b:do if(((l|0)!=(e|0)?(t=c[m>>2]|0,(t|0)!=0):0)?(u=h+q|0,v=c[t>>2]|0,u>>>0<v>>>0):0){e=c[t+8>>2]|0;if(!e){f=u;k=t;e=v}else{i=u;j=t;do{f=(i>>>0)/(e>>>0)|0;j=c[j+12+(f<<2)>>2]|0;if(!j){y=20;break b}i=i-(G(f,e)|0)|0;e=c[j+8>>2]|0}while((e|0)!=0);f=i;k=j;e=c[j>>2]|0}c:do if(e>>>0<4001){if(!(1<<(f&7)&(d[k+12+(f>>>3)>>0]|0))){y=20;break b}}else{i=f+1|0;e=(f>>>0)%125|0;f=c[k+12+(e<<2)>>2]|0;if(!f){y=20;break b}while(1){if((f|0)==(i|0))break c;e=((e+1|0)>>>0)%125|0;f=c[k+12+(e<<2)>>2]|0;if(!f){y=20;break b}}}while(0);f=Ya[c[29436>>2]&127](c[(c[o>>2]|0)+44>>2]|0,l,0)|0;if(!f){c[s>>2]=0;e=0;break}i=c[o>>2]|0;e=c[f+4>>2]|0;if(!(c[e>>2]|0)){e=sf(i,l,f)|0;c[s>>2]=e;if(!e){e=0;break}}else{l=i+12|0;c[l>>2]=(c[l>>2]|0)+1;l=e+30|0;b[l>>1]=(b[l>>1]|0)+1<<16>>16;c[s>>2]=e}l=b[e+28>>1]|0;g=(l&8)==0?g:1;if(!(l&32)){Df(e);e=0;break}else{l=c[e+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[e+16>>2]=c[l>>2];c[l>>2]=e;e=0;break}}else y=20;while(0);do if((y|0)==20){y=0;if((l|0)!=((1073741824/(c[w>>2]|0)|0)+1|0)){e=Za[c[n>>2]&127](x,l,s,0)|0;if(e|0){y=22;break a}e=Xf(c[s>>2]|0)|0;f=c[s>>2]|0;l=b[f+28>>1]|0;g=(l&8)==0?g:1;if(!(l&32)){Df(f);break}else{l=c[f+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[f+16>>2]=c[l>>2];c[l>>2]=f;break}}else e=0}while(0);h=h+1|0;f=(e|0)==0;if(!((h|0)<(z|0)&f))break;e=c[p>>2]|0}if((y|0)==22)f=0;if(!((g|0)!=0&f&r)){A=e;z=a[B>>0]|0;z=z&-5;a[B>>0]=z;Ra=C;return A|0}k=x+212|0;j=0;do{g=j+A|0;h=Ya[c[29436>>2]&127](c[(c[k>>2]|0)+44>>2]|0,g,0)|0;do if(h|0){i=c[k>>2]|0;f=c[h+4>>2]|0;if(!(c[f>>2]|0)){f=sf(i,g,h)|0;if(!f)break}else{y=i+12|0;c[y>>2]=(c[y>>2]|0)+1;y=f+30|0;b[y>>1]=(b[y>>1]|0)+1<<16>>16}x=f+28|0;y=b[x>>1]|0;b[x>>1]=y|8;if(!(y&32)){Df(f);break}else{y=c[f+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[f+16>>2]=c[y>>2];c[y>>2]=f;break}}while(0);j=j+1|0}while((j|0)!=(z|0));A=a[B>>0]|0;A=A&-5;a[B>>0]=A;Ra=C;return e|0}\nfunction Zc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!d){i=0;return i|0}h=(Eu(d)|0)&1073741823;if(!b){i=0;return i|0}g=c[b+128>>2]|0;if(!g){i=0;return i|0}f=c[g+4>>2]|0;b=2;while(1){e=g+(b+2<<2)|0;if((av(e,d,h)|0)==0?(a[e+h>>0]|0)==0:0)break;b=(c[g+(b+1<<2)>>2]|0)+b|0;if((b|0)>=(f|0)){b=0;i=9;break}}if((i|0)==9)return b|0;i=c[g+(b<<2)>>2]|0;return i|0}function _c(f,h){f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=Ra;Ra=Ra+224|0;D=N+184|0;C=N+176|0;F=N+168|0;E=N+160|0;B=N+152|0;A=N+144|0;w=N+220|0;x=N+216|0;I=N+192|0;y=N+104|0;i=N;c[x>>2]=0;z=c[f>>2]|0;L=c[z+108>>2]|0;K=I+4|0;c[K>>2]=i;c[I>>2]=0;J=I+8|0;c[J>>2]=100;H=I+12|0;c[H>>2]=L;L=I+16|0;c[L>>2]=0;G=I+20|0;a[G>>0]=0;M=I+21|0;a[M>>0]=0;a:do if((c[z+180>>2]|0)>1){f=a[h>>0]|0;if(f<<24>>24)while(1){i=h+1|0;b:do if(f<<24>>24!=10)do{f=a[i>>0]|0;if(!(f<<24>>24))break b;i=i+1|0}while(f<<24>>24!=10);while(0);f=c[L>>2]|0;j=f+3|0;if(j>>>0<(c[J>>2]|0)>>>0){c[L>>2]=j;F=(c[K>>2]|0)+f|0;a[F>>0]=a[36874]|0;a[F+1>>0]=a[36875]|0;a[F+2>>0]=a[36876]|0}else wb(I,36874,3);f=i-h|0;j=c[L>>2]|0;k=j+f|0;if(k>>>0<(c[J>>2]|0)>>>0){if(f|0){c[L>>2]=k;ew((c[K>>2]|0)+j|0,h|0,f|0)|0}}else wb(I,h,f);f=a[i>>0]|0;if(!(f<<24>>24))break;else h=i}}else{if(!(b[f+16>>1]|0)){if(!h)break;f=(Eu(h)|0)&1073741823;if(f>>>0>=100){wb(I,h,f);break}if(!f)break;c[L>>2]=f;ew(i|0,h|0,f|0)|0;break}if(a[h>>0]|0){v=f+100|0;n=f+128|0;o=z+78|0;p=y+32|0;q=y+8|0;r=y+12|0;s=y+16|0;t=y+10|0;u=y+24|0;m=1;do{f=0;i=h;while(1){j=Bi(i,w)|0;if((c[w>>2]|0)==148){l=j;break}f=j+f|0;i=i+j|0;if(!(a[i>>0]|0)){l=0;break}}i=c[L>>2]|0;j=i+f|0;if(j>>>0<(c[J>>2]|0)>>>0){if(f|0){c[L>>2]=j;ew((c[K>>2]|0)+i|0,h|0,f|0)|0}}else wb(I,h,f);h=h+f|0;if(!l)break a;do if((a[h>>0]|0)==63)if((l|0)>1){ii(h+1|0,x)|0;f=c[x>>2]|0;break}else{c[x>>2]=m;f=m;break}else{j=c[n>>2]|0;c:do if(!j)f=0;else{k=c[j+4>>2]|0;f=2;while(1){i=j+(f+2<<2)|0;if((av(i,h,l)|0)==0?(a[i+l>>0]|0)==0:0)break;f=(c[j+(f+1<<2)>>2]|0)+f|0;if((f|0)>=(k|0)){f=0;break c}}f=c[j+(f<<2)>>2]|0}while(0);c[x>>2]=f}while(0);h=h+l|0;m=f+1|0;l=c[v>>2]|0;k=f+-1|0;f=l+(k*40|0)|0;i=e[l+(k*40|0)+8>>1]|0;do if(!(i&1)){if(i&4|0){j=f;k=c[j+4>>2]|0;l=A;c[l>>2]=c[j>>2];c[l+4>>2]=k;Eb(I,32524,A);break}if(i&8|0){g[B>>3]=+g[f>>3];Eb(I,32529,B);break}if(i&2|0){f=a[o>>0]|0;if(f<<24>>24==1){j=c[l+(k*40|0)+16>>2]|0;c[F>>2]=c[l+(k*40|0)+12>>2];c[F+4>>2]=j;Eb(I,36878,F);break}i=y;j=i+40|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[p>>2]=z;yc(y,c[l+(k*40|0)+16>>2]|0,c[l+(k*40|0)+12>>2]|0,f,0)|0;if(!((b[q>>1]&2)==0|(a[t>>0]|0)==1)?(Ig(y,1)|0)==7:0){a[G>>0]=7;c[J>>2]=0}l=c[s>>2]|0;c[E>>2]=c[r>>2];c[E+4>>2]=l;Eb(I,36878,E);if((b[q>>1]&9216)==0&(c[u>>2]|0)==0)break;Cg(y);break}if(i&16384|0){c[C>>2]=c[f>>2];Eb(I,36885,C);break}f=c[L>>2]|0;i=f+2|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;j=(c[K>>2]|0)+f|0;a[j>>0]=120;a[j+1>>0]=39}else wb(I,36898,2);j=c[l+(k*40|0)+12>>2]|0;if((j|0)>0){i=l+(k*40|0)+16|0;f=0;do{c[D>>2]=d[(c[i>>2]|0)+f>>0];Eb(I,36901,D);f=f+1|0}while((f|0)!=(j|0))}f=c[L>>2]|0;i=f+1|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;a[(c[K>>2]|0)+f>>0]=39;break}else{wb(I,36906,1);break}}else{f=c[L>>2]|0;i=f+4|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;l=(c[K>>2]|0)+f|0;a[l>>0]=78;a[l+1>>0]=85;a[l+2>>0]=76;a[l+3>>0]=76;break}else{wb(I,31171,4);break}}while(0)}while((a[h>>0]|0)!=0)}}while(0);if(!(a[G>>0]|0)){f=c[K>>2]|0;if((f|0?(a[f+(c[L>>2]|0)>>0]=0,c[H>>2]|0):0)?(a[M>>0]&4)==0:0){M=$d(I)|0;Ra=N;return M|0}}else{if(a[M>>0]&4){f=c[I>>2]|0;i=c[K>>2]|0;do if(i|0){if(f|0){if(c[f+480>>2]|0){Xd(f,i);break}I=i;if((c[f+304>>2]|0)>>>0<=I>>>0?(c[f+308>>2]|0)>>>0>I>>>0:0){I=f+300|0;c[i>>2]=c[I>>2];c[I>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);a[M>>0]=a[M>>0]&-5}c[J>>2]=0;c[L>>2]=0;c[K>>2]=0}M=c[K>>2]|0;Ra=N;return M|0}function $c(e){e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;j=m+8|0;k=m;l=e+8|0;f=b[l>>1]&31;if((f|16|0)!=18){l=d[816+f>>0]|0;Ra=m;return l|0}f=a[e+10>>0]|0;h=e+16|0;i=e+12|0;if(!(Lg(c[h>>2]|0,j,c[i>>2]|0,f)|0))f=b[l>>1]|0;else{if(!(Og(c[h>>2]|0,k,c[i>>2]|0,f)|0)){j=k;k=c[j+4>>2]|0;f=e;c[f>>2]=c[j>>2];c[f+4>>2]=k;f=4}else{g[e>>3]=+g[j>>3];f=8}f=b[l>>1]&-3|f;b[l>>1]=f}l=d[816+(f&31)>>0]|0;Ra=m;return l|0}function ad(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;ea=Ra;Ra=Ra+336|0;ca=ea+40|0;Y=ea+32|0;_=ea+24|0;Z=ea+16|0;X=ea+8|0;W=ea;ba=ea+320|0;da=ea+44|0;c[ba>>2]=0;c[m>>2]=0;P=(l|0)!=0;Q=P&1;aa=(f|0)==0;a:do if(aa){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](32)|0;u=24;break}l=Wa[c[29356>>2]&127](32)|0;if((c[14985]|0)>>>0<32)c[14985]=32;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){$=c[14978]|0;V=Tv(n|0,o|0,l|0,((l|0)<0)<<31>>31|0)|0;U=L()|0;c[14768]=((U|0)<0|(U|0)==0&V>>>0<=$>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(l){n=Wa[c[29352>>2]&127](l)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0>(c[14987]|0)>>>0){c[14987]=n;u=25}else u=25}else O=0}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){O=0;break}}else{do if((e[f+276>>1]|0)>=32){n=f+300|0;l=c[n>>2]|0;if(l|0){c[n>>2]=c[l>>2];u=f+284|0;c[u>>2]=(c[u>>2]|0)+1;u=24;break a}n=f+296|0;l=c[n>>2]|0;if(!l){l=f+292|0;break}else{c[n>>2]=c[l>>2];u=f+284|0;c[u>>2]=(c[u>>2]|0)+1;u=24;break a}}else l=f+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(f,32,0)|0;u=24}while(0);if((u|0)==24)if(!l)O=0;else u=25;if((u|0)==25){n=l;p=n+32|0;do{a[n>>0]=0;n=n+1|0}while((n|0)<(p|0));O=l}M=(O|0)!=0;C=f+20|0;D=f+16|0;S=f+480|0;T=f+304|0;U=f+308|0;V=f+300|0;E=O+28|0;F=O+24|0;G=f+32|0;N=O+16|0;H=O+8|0;I=O+20|0;$=f+81|0;J=da+8|0;K=da+196|0;A=da+44|0;B=da+40|0;z=0;l=0;while(1){gw(da|0,0,276)|0;if(!M){u=117;break}c[da>>2]=f;n=c[ba>>2]|0;do if(n|0){if(!aa){if(c[S>>2]|0){Xd(f,n);break}y=n;if((c[T>>2]|0)>>>0<=y>>>0?(c[U>>2]|0)>>>0>y>>>0:0){c[n>>2]=c[V>>2];c[V>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{y=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[ba>>2]=0;o=c[C>>2]|0;if((o|0)>0){p=c[D>>2]|0;n=0;do{q=c[p+(n<<4)+4>>2]|0;if(q|0)c[(c[q+4>>2]|0)+4>>2]=c[q>>2];n=n+1|0}while((n|0)!=(o|0))}y=bd(da,0,h,g)|0;if(!y){u=50;break}if(c[y+56>>2]|0){u=45;break}if(c[y+36>>2]&32|0){u=47;break}if(c[y+12>>2]|0){u=49;break}c[E>>2]=y;p=c[D>>2]|0;w=y+72|0;o=c[w>>2]|0;if(!o)n=-1e6;else{n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0))break;else n=n+1|0}c[F>>2]=c[p+(n<<4)>>2];x=y+42|0;v=b[x>>1]|0;t=v<<16>>16;b:do if(v<<16>>16>0){r=c[y+4>>2]|0;s=d[208+(d[i>>0]|0)>>0]|0;n=0;while(1){p=c[r+(n<<4)>>2]|0;v=a[p>>0]|0;o=(d[208+(v&255)>>0]|0)-s|0;if(!(v<<24>>24==0|(o|0)!=0)){q=i;do{p=p+1|0;q=q+1|0;v=a[p>>0]|0;o=(d[208+(v&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(o|0)!=0))}if(!o){v=n;break b}n=n+1|0;if((n|0)>=(t|0)){v=n;break}}}else v=0;while(0);if((v|0)==(t|0)){u=63;break}if(P){if(!((c[G>>2]&16384|0)==0&0==0)?(R=c[y+16>>2]|0,(R|0)!=0):0){q=R;n=0;do{p=c[q+20>>2]|0;if((p|0)>0){o=0;do{n=(c[q+36+(o<<3)>>2]|0)==(v|0)?31354:n;o=o+1|0}while((o|0)<(p|0))}q=c[q+4>>2]|0}while((q|0)!=0);o=n}else o=0;n=c[y+8>>2]|0;if(!n)n=o;else{do{p=b[n+50>>1]|0;if(p<<16>>16){r=c[n+4>>2]|0;q=p&65535;p=0;do{u=b[r+(p<<1)>>1]|0;o=u<<16>>16==-2|(v|0)==(u<<16>>16|0)?31366:o;p=p+1|0}while(p>>>0<q>>>0)}n=c[n+20>>2]|0}while((n|0)!=0);n=o}if(n|0){u=79;break}}q=c[da>>2]|0;c:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))u=90;else u=94;else{do if((e[q+276>>1]|0)>=224){n=q+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];u=q+284|0;c[u>>2]=(c[u>>2]|0)+1;u=91;break c}n=q+296|0;o=c[n>>2]|0;if(!o){n=q+292|0;break}else{c[n>>2]=c[o>>2];u=q+284|0;c[u>>2]=(c[u>>2]|0)+1;u=91;break c}}else n=q+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;u=90}while(0);if((u|0)==90){o=_d(q,224,0)|0;u=91}do if((u|0)==91){u=0;if(!o)u=94;else{t=o+104|0;n=t;p=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(p|0));c[o>>2]=q;n=q+4|0;p=c[n>>2]|0;if(p|0)c[p+4>>2]=o;c[o+8>>2]=p;c[o+4>>2]=0;c[n>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=da;c[J>>2]=o;Di(o,61,0,1,0)|0;c[N>>2]=o;q=c[w>>2]|0;if(!q)s=-1e6;else{p=c[D>>2]|0;n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(q|0)){s=n;break}else n=n+1|0}p=c[q>>2]|0;q=c[q+4>>2]|0;r=o+108|0;n=c[r>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[r>>2]=n+1;w=c[t>>2]|0;a[w+(n*20|0)>>0]=2;b[w+(n*20|0)+2>>1]=0;c[w+(n*20|0)+4>>2]=s;c[w+(n*20|0)+8>>2]=Q;c[w+(n*20|0)+12>>2]=p;c[w+(n*20|0)+16>>2]=0;a[w+(n*20|0)+1>>0]=0}else n=Di(o,2,s,Q,p)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){w=c[t>>2]|0;a[w+(n*20|0)+1>>0]=-3;c[w+(n*20|0)+16>>2]=q}n=c[r>>2]|0;if((n|0)>0)b[(c[t>>2]|0)+((n+-1|0)*20|0)+2>>1]=1;p=ed(o,6,848)|0;n=1<<s;w=o+152|0;c[w>>2]=c[w>>2]|n;do if((s|0)!=1){if(!(a[(c[(c[(c[o>>2]|0)+16>>2]|0)+(s<<4)+4>>2]|0)+9>>0]|0))break;w=o+156|0;c[w>>2]=c[w>>2]|n}while(0);if(a[$>>0]|0)break;c[p+4>>2]=s;n=y+28|0;c[p+8>>2]=c[n>>2];c[p+12>>2]=Q;if((a[(c[o>>2]|0)+81>>0]|0)==0?(Ei(o,(c[t>>2]|0)+40|0,c[y>>2]|0,0),a[$>>0]|0):0)break;if(P)a[p+20>>0]=109;c[p+28>>2]=c[n>>2];c[p+32>>2]=s;a[p+21>>0]=-3;c[p+36>>2]=(b[x>>1]|0)+1;c[p+68>>2]=b[x>>1];b[K>>1]=0;c[A>>2]=1;c[B>>2]=1;hd(o,da)}}while(0);if((u|0)==94)c[N>>2]=0;b[H>>1]=v;c[I>>2]=f;if(a[$>>0]|0){u=116;break}l=id(O,j,k,ba)|0;z=z+1|0;if(!(z>>>0<50&(l|0)==17)){u=116;break}else l=17}if((u|0)==45){c[W>>2]=h;cd(da,31246,W);u=50}else if((u|0)==47){c[X>>2]=h;cd(da,31276,X);u=50}else if((u|0)==49){c[Z>>2]=h;cd(da,31312,Z);u=50}else if((u|0)==63){c[_>>2]=i;l=dd(f,31333,_)|0;c[ba>>2]=l;l=1;u=119}else if((u|0)==79){c[Y>>2]=n;l=dd(f,31374,Y)|0;c[ba>>2]=l;l=1;u=119}else if((u|0)==116)if(!l)u=117;else u=119;if((u|0)==50){l=da+4|0;n=c[l>>2]|0;if(!n){l=1;u=119}else{c[ba>>2]=n;c[l>>2]=0;l=1;u=119}}else if((u|0)==117)if(!(a[$>>0]|0)){c[m>>2]=O;o=0}else{l=0;u=119}do if((u|0)==119)if(M){r=c[N>>2]|0;do if(r|0){s=r+20|0;n=c[s>>2]|0;if((n|0)<832317811)switch(n|0){case 770837923:{u=122;break}default:{}}else switch(n|0){case 832317811:{u=122;break}default:{}}if((u|0)==122)kc(r)|0;p=c[r>>2]|0;kb(p,r);q=c[r+4>>2]|0;o=r+8|0;n=c[o>>2]|0;if(!q)c[p+4>>2]=n;else{c[q+8>>2]=n;n=c[o>>2]|0}if(n|0)c[n+4>>2]=q;c[s>>2]=1443283912;c[r>>2]=0;if(p|0){if(c[p+480>>2]|0){Xd(p,r);break}m=r;if((c[p+304>>2]|0)>>>0<=m>>>0?(c[p+308>>2]|0)>>>0>m>>>0:0){m=p+300|0;c[r>>2]=c[m>>2];c[m>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{m=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(!aa){if(c[S>>2]|0){Xd(f,O);o=l;break}m=O;if((c[T>>2]|0)>>>0<=m>>>0?(c[U>>2]|0)>>>0>m>>>0:0){c[O>>2]=c[V>>2];c[V>>2]=O;o=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](O);o=l;break}else{o=Wa[c[29352>>2]&127](O)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](O);o=l;break}}else o=l;while(0);l=c[ba>>2]|0;ba=(l|0)==0;c[ca>>2]=l;Vb(f,o,ba?0:31408,ca);do if(!ba){if(!aa){if(c[S>>2]|0){Xd(f,l);break}ca=l;if((c[T>>2]|0)>>>0<=ca>>>0?(c[U>>2]|0)>>>0>ca>>>0:0){c[l>>2]=c[V>>2];c[V>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);n=c[da>>2]|0;l=c[da+64>>2]|0;do if(l|0){if(n|0){if(c[n+480>>2]|0){Xd(n,l);break}ca=l;if((c[n+304>>2]|0)>>>0<=ca>>>0?(c[n+308>>2]|0)>>>0>ca>>>0:0){ca=n+300|0;c[l>>2]=c[ca>>2];c[ca>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[da+68>>2]|0;if(l|0)ri(n,l);l=da+24|0;if(n|0){da=n+272|0;c[da>>2]=(c[da>>2]|0)-(d[l>>0]|0)}a[l>>0]=0;if((o|0)==3082|(a[$>>0]|0)!=0){og(f);f=7;Ra=ea;return f|0}else{f=c[f+68>>2]&o;Ra=ea;return f|0}return 0}function bd(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+64|0;E=F+48|0;D=F+32|0;C=F+24|0;A=F+16|0;y=F+8|0;w=F;B=F+56|0;s=c[f>>2]|0;p=s+24|0;k=c[p>>2]|0;a:do if((k&16|0)==0?(a[s+165>>0]|0)==0:0){n=f+4|0;l=(k&1|0)==0;m=s+16|0;v=c[(c[m>>2]|0)+12>>2]|0;a[s+78>>0]=a[v+77>>0]|0;if(!((b[v+78>>1]&1)==0?(j=eh(s,0,n,0)|0,(j|0)!=0):0))x=5;b:do if((x|0)==5){j=c[s+20>>2]|0;if((j|0)>1)do{k=j;j=j+-1|0;if((b[(c[(c[m>>2]|0)+(j<<4)+12>>2]|0)+78>>1]&1)==0?(o=eh(s,j,n,0)|0,o|0):0){j=o;break b}}while((k|0)>2);if(l)c[p>>2]=c[p>>2]&-2;if(!(a[s+89>>0]|0))break a;c[p>>2]=c[p>>2]|16;break a}while(0);c[f+12>>2]=j;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;f=0;Ra=F;return f|0}while(0);j=Sd(s,h,i)|0;do if(!j){c:do if(!(a[f+25>>0]|0)){m=c[s+348>>2]|0;if(!m){k=s+340|0;j=s+344|0}else{k=a[h>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=h;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[s+336>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;d:do if(!k)j=59292;else{o=d[208+(d[h>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-o|0;if(!(v<<24>>24==0|(l|0)!=0)){n=h;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0))}if(!l)break d;if(!k){j=59292;break}}}while(0);l=c[j+8>>2]|0;do if((h|0)==0|(l|0)!=0)r=l;else{j=a[h>>0]|0;e:do if(!(j<<24>>24)){j=36975;x=32}else{v=j&255;j=208+v|0;do if((v|32|0)==112){j=a[h+1>>0]|0;if(!(j<<24>>24)){j=36976;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==114){j=a[h+2>>0]|0;if(!(j<<24>>24)){j=36977;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==97){j=a[h+3>>0]|0;if(!(j<<24>>24)){j=36978;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==103){j=a[h+4>>0]|0;if(!(j<<24>>24)){j=36979;x=32;break e}j=j&255;if((j|32|0)!=109){k=109;j=208+j|0;break}j=a[h+5>>0]|0;if(!(j<<24>>24)){j=36980;x=32;break e}j=j&255;if((j|32|0)!=97){k=97;j=208+j|0;break}j=a[h+6>>0]|0;if(!(j<<24>>24)){j=36981;x=32;break e}if(j<<24>>24==95)break e;else{k=95;j=208+(j&255)|0}}else k=103}else k=97}else k=114}else k=112;while(0);r=d[j>>0]|0;q=k;x=36}while(0);if((x|0)==32){r=0;q=a[208+(d[j>>0]|0)>>0]|0;x=36}if((x|0)==36?(r|0)!=(q&255|0):0){r=l;break}p=h+7|0;v=a[p>>0]|0;q=d[208+(v&255)>>0]|0;f:do if(!(v<<24>>24)){k=0;l=59;while(1){j=(k+l|0)/2|0;m=q-(d[208+(d[c[4544+(j<<4)>>2]>>0]|0)>>0]|0)|0;if(!m)break f;v=(m|0)<0;k=v?k:j+1|0;l=v?j+-1|0:l;if((k|0)>(l|0))break c}}else{n=0;o=59;while(1){j=(n+o|0)/2|0;l=c[4544+(j<<4)>>2]|0;k=q-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!k){m=p;do{m=m+1|0;l=l+1|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0));if(!k)break f}v=(k|0)<0;n=v?n:j+1|0;o=v?j+-1|0:o;if((n|0)>(o|0))break c}}while(0);if(!(a[4544+(j<<4)+5>>0]&48))break c;r=Hi(s,h,29972,4544+(j<<4)|0,0)|0}while(0);if(r|0){s=c[r>>2]|0;c[B>>2]=0;u=c[f>>2]|0;v=r+16|0;j=c[v>>2]|0;g:do if(!j){t=c[s+4>>2]|0;if(!((t|0)!=0?(t|0)!=(c[s+8>>2]|0):0))x=53;h:do if((x|0)==53){t=(u|0)==0;i:do if(t){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](80)|0;x=76;break}j=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){q=c[14978]|0;p=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;o=L()|0;c[14768]=((o|0)<0|(o|0)==0&p>>>0<=q>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k)break h;j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0)break h}else{do if((e[u+276>>1]|0)>=80){k=u+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=76;break i}k=u+296|0;j=c[k>>2]|0;if(!j){j=u+292|0;break}else{c[k>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=76;break i}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,80,0)|0;x=76}while(0);if((x|0)==76)if(!j)break;else k=j;j=k;l=j+80|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));n=c[r+4>>2]|0;j:do if(!n)x=105;else{o=(Eu(n)|0)+1|0;k:do if(t){q=Sv(o|0,0,-1,-1)|0;p=L()|0;do if(!(p>>>0>0|(p|0)==0&q>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;x=103;break k}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){q=c[14978]|0;p=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&p>>>0<=q>>>0)&1}l=Wa[c[29340>>2]&127](j)|0;if(!l)break;j=Wa[c[29352>>2]&127](l)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){p=l;break k}c[14987]=j;p=l;break k}while(0);c[k>>2]=0;break j}else{do if(!(c[u+272>>2]|0)){do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<o>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=103;break k}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=103;break k}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}else{if(!(a[u+81>>0]|0))break;c[k>>2]=0;x=106;break j}while(0);j=_d(u,o,0)|0;x=103}while(0);if((x|0)==103)if(!j){x=105;break}else p=j;ew(p|0,n|0,o|0)|0;c[k>>2]=p;c[v>>2]=k;c[k+32>>2]=1;c[k+72>>2]=c[(c[u+16>>2]|0)+12>>2];b[k+40>>1]=-1;n=(Eu(p)|0)+1|0;l:do if(t){q=Sv(n|0,0,-1,-1)|0;o=L()|0;if(o>>>0>0|(o|0)==0&q>>>0>2147483390)j=0;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](n)|0;x=138;break}j=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){q=c[14978]|0;o=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&o>>>0<=q>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break}l=Wa[c[29352>>2]&127](j)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){x=139;break}c[14987]=l;x=139}}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0){j=0;break}}else{do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<n>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=138;break l}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=138;break l}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,n,0)|0;x=138}while(0);if((x|0)==138)if(!j)j=0;else x=139;if((x|0)==139)ew(j|0,p|0,n|0)|0;q=k+56|0;x=c[q>>2]|0;n=(x<<2)+8|0;o=c[f>>2]|0;if((x+3|0)>=(c[o+116>>2]|0)){c[w>>2]=c[k>>2];cd(f,38221,w)}p=k+60|0;l=c[p>>2]|0;m:do if(!l){if(c[o+272>>2]|0){if(a[o+81>>0]|0){x=160;break}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<n>>>0:0))){m=o+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];x=o+284|0;c[x>>2]=(c[x>>2]|0)+1;x=159;break m}m=o+296|0;l=c[m>>2]|0;if(!l){l=o+292|0;break}else{c[m>>2]=c[l>>2];x=o+284|0;c[x>>2]=(c[x>>2]|0)+1;x=159;break m}}else l=o+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(o,n,0)|0;x=159}else{m=l;do if((c[o+304>>2]|0)>>>0<=m>>>0){if((c[o+308>>2]|0)>>>0<=m>>>0)break;if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<n>>>0:0))){x=169;break m}l=Zd(o,l,n,0)|0;x=159;break m}while(0);l=Zd(o,l,n,0)|0;x=159}while(0);if((x|0)==159)if(!l)x=160;else x=169;n:do if((x|0)==160){if(!j)break;if(c[o+480>>2]|0){Xd(o,j);break}l=j;do if((c[o+304>>2]|0)>>>0<=l>>>0){if((c[o+308>>2]|0)>>>0<=l>>>0)break;w=o+300|0;c[j>>2]=c[w>>2];c[w>>2]=j;break n}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{w=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else if((x|0)==169){o=c[q>>2]|0;w=o+1|0;c[q>>2]=w;c[l+(o<<2)>>2]=j;c[l+(w<<2)>>2]=0;c[p>>2]=l}while(0);w=c[q>>2]|0;m=(w<<2)+8|0;n=c[f>>2]|0;if((w+3|0)>=(c[n+116>>2]|0)){c[y>>2]=c[k>>2];cd(f,38221,y)}j=c[p>>2]|0;o:do if(!j){if(c[n+272>>2]|0){if(a[n+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){j=n+300|0;l=c[j>>2]|0;if(l|0){c[j>>2]=c[l>>2];z=n+284|0;c[z>>2]=(c[z>>2]|0)+1;z=l;x=189;break o}j=n+296|0;l=c[j>>2]|0;if(!l){j=n+292|0;break}else{c[j>>2]=c[l>>2];z=n+284|0;c[z>>2]=(c[z>>2]|0)+1;z=l;x=189;break o}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}z=_d(n,m,0)|0;x=189}else{l=j;do if((c[n+304>>2]|0)>>>0<=l>>>0){if((c[n+308>>2]|0)>>>0<=l>>>0)break;if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){x=190;break o}z=Zd(n,j,m,0)|0;x=189;break o}while(0);z=Zd(n,j,m,0)|0;x=189}while(0);if((x|0)==189?z|0:0){j=z;x=190}if((x|0)==190){y=c[q>>2]|0;z=y+1|0;c[q>>2]=z;c[j+(y<<2)>>2]=0;c[j+(z<<2)>>2]=0;c[p>>2]=j}n=c[k>>2]|0;p:do if(!n)o=0;else{o=(Eu(n)|0)+1|0;q:do if(t){z=Sv(o|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){o=0;break p}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;x=216;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){z=c[14978]|0;y=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&y>>>0<=z>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){o=0;break p}l=Wa[c[29352>>2]&127](j)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0){o=0;break p}}else{do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<o>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=216;break q}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=216;break q}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,o,0)|0;x=216}while(0);if((x|0)==216)if(!j){o=0;break}ew(j|0,n|0,o|0)|0;o=j}while(0);z=c[q>>2]|0;m=(z<<2)+8|0;n=c[f>>2]|0;if((z+3|0)>=(c[n+116>>2]|0)){c[A>>2]=c[k>>2];cd(f,38221,A)}j=c[p>>2]|0;r:do if(!j){if(c[n+272>>2]|0){if(a[n+81>>0]|0){x=238;break}}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){l=n+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=n+284|0;c[x>>2]=(c[x>>2]|0)+1;x=237;break r}l=n+296|0;j=c[l>>2]|0;if(!j){j=n+292|0;break}else{c[l>>2]=c[j>>2];x=n+284|0;c[x>>2]=(c[x>>2]|0)+1;x=237;break r}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(n,m,0)|0;x=237}else{l=j;do if((c[n+304>>2]|0)>>>0<=l>>>0){if((c[n+308>>2]|0)>>>0<=l>>>0)break;if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){x=247;break r}j=Zd(n,j,m,0)|0;x=237;break r}while(0);j=Zd(n,j,m,0)|0;x=237}while(0);if((x|0)==237)if(!j)x=238;else x=247;s:do if((x|0)==238){if(!o)break;if(c[n+480>>2]|0){Xd(n,o);break}j=o;do if((c[n+304>>2]|0)>>>0<=j>>>0){if((c[n+308>>2]|0)>>>0<=j>>>0)break;A=n+300|0;c[o>>2]=c[A>>2];c[A>>2]=o;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{A=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else if((x|0)==247){z=c[q>>2]|0;A=z+1|0;c[q>>2]=A;c[j+(z<<2)>>2]=o;c[j+(A<<2)>>2]=0;c[p>>2]=j}while(0);if(!(Ai(u,k,r,c[s+8>>2]|0,B)|0)){j=c[v>>2]|0;break g}k=c[B>>2]|0;c[C>>2]=k;cd(f,31408,C);t:do if(k|0){do if(!t){if(c[u+480>>2]|0){Xd(u,k);break t}j=k;if((c[u+304>>2]|0)>>>0>j>>>0)break;if((c[u+308>>2]|0)>>>0<=j>>>0)break;C=u+300|0;c[k>>2]=c[C>>2];c[C>>2]=k;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{C=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);j=c[v>>2]|0;if(!j)break h;C=j+36|0;c[C>>2]=c[C>>2]|2;do if(t)x=263;else{if(!(c[u+480>>2]|0)){x=263;break}Vi(u,j)}while(0);do if((x|0)==263){B=j+32|0;C=(c[B>>2]|0)+-1|0;c[B>>2]=C;if(C|0)break;Vi(u,j)}while(0);c[v>>2]=0;break h}while(0);if((x|0)==105?(c[k>>2]=0,!t):0)x=106;if((x|0)==106){if(c[u+480>>2]|0){Xd(u,k);break}C=k;if((c[u+304>>2]|0)>>>0<=C>>>0?(c[u+308>>2]|0)>>>0>C>>>0:0){C=u+300|0;c[k>>2]=c[C>>2];c[C>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{C=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);break c}while(0);f=j;Ra=F;return f|0}}while(0);if(!(g&2)){a[f+17>>0]=1;break}else{f=0;Ra=F;return f|0}}else{if(!(c[j+56>>2]|0)){f=j;Ra=F;return f|0}if(!(a[f+25>>0]|0)){f=j;Ra=F;return f|0}}while(0);j=(g&1|0)==0?36996:36983;if(!i){c[E>>2]=j;c[E+4>>2]=h;cd(f,37020,E);f=0;Ra=F;return f|0}else{c[D>>2]=j;c[D+4>>2]=i;c[D+8>>2]=h;cd(f,37010,D);f=0;Ra=F;return f|0}return 0}function cd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+112|0;k=n+88|0;o=n;m=c[b>>2]|0;c[o>>2]=e;g=c[m+108>>2]|0;i=k+4|0;c[i>>2]=n+16;c[k>>2]=m;c[k+8>>2]=70;f=k+12|0;c[f>>2]=g;g=k+16|0;c[g>>2]=0;j=k+20|0;a[j>>0]=0;h=k+21|0;a[h>>0]=1;tb(k,d,o);e=c[i>>2]|0;if(((e|0)!=0?(a[e+(c[g>>2]|0)>>0]=0,(c[f>>2]|0)!=0):0)?(a[h>>0]&4)==0:0)f=$d(k)|0;else f=c[i>>2]|0;if(((a[j>>0]|0)==7?(l=m+81|0,(a[l>>0]|0)==0):0)?(a[m+82>>0]|0)==0:0){a[l>>0]=1;if((c[m+180>>2]|0)>0)c[m+264>>2]=1;e=m+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[m+236>>2]|0;if(e|0)c[e+12>>2]=7}if(!(a[m+85>>0]|0)){e=b+36|0;c[e>>2]=(c[e>>2]|0)+1;e=b+4|0;d=c[e>>2]|0;do if(d|0){if(c[m+480>>2]|0){Xd(m,d);break}o=d;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);c[e>>2]=f;c[b+12>>2]=1;Ra=n;return}if(!f){Ra=n;return}if(c[m+480>>2]|0){Xd(m,f);Ra=n;return}o=f;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;Ra=n;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=n;return}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=n;return}}function dd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=Ra;Ra=Ra+112|0;h=f+88|0;i=f;c[i>>2]=e;g=c[b+108>>2]|0;c[h+4>>2]=f+16;c[h>>2]=b;c[h+8>>2]=70;c[h+12>>2]=g;c[h+16>>2]=0;g=h+20|0;a[g>>0]=0;a[h+21>>0]=1;tb(h,d,i);e=yb(h)|0;if((a[g>>0]|0)!=7){Ra=f;return e|0}d=b+81|0;if(a[d>>0]|0){Ra=f;return e|0}if(a[b+82>>0]|0){Ra=f;return e|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){Ra=f;return e|0}c[d+12>>2]=7;Ra=f;return e|0}function ed(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=d+108|0;h=c[o>>2]|0;n=d+112|0;i=c[n>>2]|0;if((h+f|0)>(i|0)){m=c[d+12>>2]|0;k=(i|0)==0;h=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;j=L()|0;h=k?51:h;j=k?0:j;k=c[m>>2]|0;l=c[k+128>>2]|0;i=((l|0)<0)<<31>>31;if((j|0)>(i|0)|(j|0)==(i|0)&h>>>0>l>>>0){h=k+81|0;if(a[h>>0]|0){o=0;return o|0}if(a[k+82>>0]|0){o=0;return o|0}a[h>>0]=1;if((c[k+180>>2]|0)>0)c[k+264>>2]=1;h=k+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[k+236>>2]|0;if(!h){o=0;return o|0}c[h+12>>2]=7;o=0;return o|0}l=d+104|0;i=c[l>>2]|0;d=Yv(h|0,j|0,20,0)|0;j=L()|0;a:do if(!i){if(c[k+272>>2]|0){if(a[k+81>>0]|0){o=0;return o|0}}else{do if(!(j>>>0>0|((j|0)==0?d>>>0>(e[k+276>>1]|0)>>>0:0))){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];d=k+284|0;c[d>>2]=(c[d>>2]|0)+1;d=27;break a}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];d=k+284|0;c[d>>2]=(c[d>>2]|0)+1;d=27;break a}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}i=_d(k,d,j)|0;d=27}else{h=i;if((c[k+304>>2]|0)>>>0<=h>>>0?(c[k+308>>2]|0)>>>0>h>>>0:0){if(!(j>>>0>0|((j|0)==0?d>>>0>(e[k+276>>1]|0)>>>0:0))){h=k;d=29;break}i=Zd(k,i,d,j)|0;d=27;break}i=Zd(k,i,d,j)|0;d=27}while(0);do if((d|0)==27)if(i){h=c[m>>2]|0;if(!h){h=i;d=31;break}else{d=29;break}}else{o=0;return o|0}while(0);if((d|0)==29){k=i;if((c[h+304>>2]|0)>>>0<=k>>>0?(c[h+308>>2]|0)>>>0>k>>>0:0)h=e[h+276>>1]|0;else{h=i;d=31}}if((d|0)==31){i=h;h=Wa[c[29352>>2]&127](h)|0}c[m+48>>2]=h;c[n>>2]=(h>>>0)/20|0;c[l>>2]=i;h=c[o>>2]|0}else i=c[d+104>>2]|0;l=i+(h*20|0)|0;if((f|0)>0){j=l;k=0;h=g;while(1){g=a[h>>0]|0;a[j>>0]=g;c[j+4>>2]=a[h+1>>0];n=a[h+2>>0]|0;i=n<<24>>24;d=j+8|0;c[d>>2]=i;if(n<<24>>24>0?(a[4368+(g&255)>>0]&1)!=0:0)c[d>>2]=(c[o>>2]|0)+i;c[j+12>>2]=a[h+3>>0];a[j+1>>0]=0;c[j+16>>2]=0;b[j+2>>1]=0;k=k+1|0;if((k|0)==(f|0))break;else{j=j+20|0;h=h+4|0}}h=c[o>>2]|0}c[o>>2]=h+f;o=l;return o|0}function fd(b,d){b=b|0;d=d|0;var e=0,f=0;e=1<<d;f=b+152|0;c[f>>2]=c[f>>2]|e;if((d|0)==1)return;if(!(a[(c[(c[(c[b>>2]|0)+16>>2]|0)+(d<<4)+4>>2]|0)+9>>0]|0))return;f=b+156|0;c[f>>2]=c[f>>2]|e;return}function gd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[b>>2]|0;if(a[g+81>>0]|0){if((f|0)==-12)return;kg(g,f,e);return}if((d|0)<0)d=(c[b+108>>2]|0)+-1|0;g=c[b+104>>2]|0;h=g+(d*20|0)|0;if((f|0)<=-1?(i=g+(d*20|0)+1|0,(a[i>>0]|0)==0):0){if((f|0)==-3){c[g+(d*20|0)+16>>2]=e;a[i>>0]=-3;return}if(!e)return;c[g+(d*20|0)+16>>2]=e;a[i>>0]=f;if((f|0)!=-12)return;f=e+12|0;c[f>>2]=(c[f>>2]|0)+1;return}Ei(b,h,e,f);return}function hd(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;m=F;E=c[f>>2]|0;D=b[g+196>>1]|0;j=D<<16>>16;i=c[g+44>>2]|0;B=c[g+40>>2]|0;c[m>>2]=c[g+96>>2];i=B+i|0;i=i+((B|0)==0&(i|0)>0&1)|0;k=((c[f+108>>2]|0)*20|0)+7&-8;n=(c[f+104>>2]|0)+k|0;k=(c[g+48>>2]|0)-k&-8;l=((k|0)<0)<<31>>31;Fi(f,m);if(!(a[g+20>>0]|0))h=0;else h=((a[g+21>>0]|0)!=0&1)<<7&65535;C=f+149|0;p=(d[C>>0]|d[C+1>>0]<<8)&-129|h;a[C>>0]=p;a[C+1>>0]=p>>8;y=g+199|0;i=(i|0)<10&(a[y>>0]|0)!=0?10:i;p=p&-4;a[C>>0]=p;a[C+1>>0]=p>>8;p=i*40|0;t=(l|0)<0|(l|0)==0&k>>>0<p>>>0;q=Tv(k|0,l|0,p|0,0)|0;z=L()|0;x=t?k:q;l=t?l:z;z=f+88|0;c[z>>2]=t?0:n+q|0;q=j*40|0;s=(l|0)<0|(l|0)==0&x>>>0<q>>>0;r=Tv(x|0,l|0,q|0,0)|0;v=L()|0;x=s?x:r;v=s?l:v;t=Sv((s?q:0)|0,(s?0:0)|0,(t?p:0)|0,(t?0:0)|0)|0;l=L()|0;w=f+100|0;c[w>>2]=s?0:n+r|0;r=Sv(c[m>>2]<<2|0,0,7,0)|0;r=r&-8;s=(L()|0)&1;u=(v|0)<(s|0)|(v|0)==(s|0)&x>>>0<r>>>0;A=Tv(x|0,v|0,r|0,s|0)|0;k=L()|0;x=u?x:A;k=u?v:k;m=Sv(t|0,l|0,(u?r:0)|0,(u?s:0)|0)|0;l=L()|0;t=f+92|0;c[t>>2]=u?0:n+A|0;A=B<<2;u=Sv(A|0,0,7,0)|0;u=u&-8;v=(L()|0)&1;h=(k|0)<(v|0)|(k|0)==(v|0)&x>>>0<u>>>0;k=Tv(x|0,k|0,u|0,v|0)|0;L()|0;l=Sv(m|0,l|0,(h?u:0)|0,(h?v:0)|0)|0;m=L()|0;x=f+96|0;c[x>>2]=h?0:n+k|0;if(!((l|0)==0&(m|0)==0)){a:do if(c[E+272>>2]|0)if(!(a[E+81>>0]|0))o=15;else n=0;else{do if(!(m>>>0>0|((m|0)==0?l>>>0>(e[E+276>>1]|0)>>>0:0))){h=E+300|0;k=c[h>>2]|0;if(k|0){c[h>>2]=c[k>>2];n=E+284|0;c[n>>2]=(c[n>>2]|0)+1;n=k;break a}h=E+296|0;k=c[h>>2]|0;if(!k){h=E+292|0;break}else{c[h>>2]=c[k>>2];n=E+284|0;c[n>>2]=(c[n>>2]|0)+1;n=k;break a}}else h=E+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;o=15}while(0);if((o|0)==15)n=_d(E,l,m)|0;c[f+192>>2]=n;h=E+81|0;if(!(a[h>>0]|0)){k=c[z>>2]|0;if(!k)if(m>>>0<0|(m|0)==0&l>>>0<p>>>0)k=0;else{l=Tv(l|0,m|0,p|0,0)|0;k=n+l|0;m=L()|0}c[z>>2]=k;k=c[w>>2]|0;if(!k)if((m|0)<0|(m|0)==0&l>>>0<q>>>0)k=0;else{l=Tv(l|0,m|0,q|0,0)|0;k=n+l|0;m=L()|0}c[w>>2]=k;k=c[t>>2]|0;if(!k)if((m|0)<(s|0)|(m|0)==(s|0)&l>>>0<r>>>0)k=0;else{l=Tv(l|0,m|0,r|0,s|0)|0;k=n+l|0;m=L()|0}c[t>>2]=k;k=c[x>>2]|0;if(!k)if((m|0)<(v|0)|(m|0)==(v|0)&l>>>0<u>>>0)k=0;else{k=Tv(l|0,m|0,u|0,v|0)|0;L()|0;k=n+k|0}c[x>>2]=k}}else h=E+81|0;g=g+216|0;c[f+128>>2]=c[g>>2];c[g>>2]=0;g=(d[C>>0]|d[C+1>>0]<<8)&-13|a[y>>0]<<2&12;a[C>>0]=g;a[C+1>>0]=g>>8;if(a[h>>0]|0){b[f+16>>1]=0;c[f+28>>2]=0;c[f+24>>2]=0;E=f+20|0;c[E>>2]=770837923;E=f+36|0;c[E>>2]=-1;E=f+40|0;c[E>>2]=0;E=f+146|0;a[E>>0]=2;E=f+44|0;c[E>>2]=0;E=f+32|0;c[E>>2]=1;E=f+147|0;a[E>>0]=-1;E=f+48|0;c[E>>2]=0;E=f+64|0;f=E;c[f>>2]=0;E=E+4|0;c[E>>2]=0;Ra=F;return}c[f+28>>2]=B;b[f+16>>1]=D;if(D<<16>>16>0){h=c[w>>2]|0;while(1){c[h+32>>2]=E;b[h+8>>1]=1;c[h+24>>2]=0;if((j|0)>1){j=j+-1|0;h=h+40|0}else break}}c[f+24>>2]=i;if((i|0)>0){h=c[z>>2]|0;while(1){c[h+32>>2]=E;b[h+8>>1]=128;c[h+24>>2]=0;if((i|0)>1){i=i+-1|0;h=h+40|0}else break}}gw(c[x>>2]|0,0,A|0)|0;E=f+20|0;c[E>>2]=770837923;E=f+36|0;c[E>>2]=-1;E=f+40|0;c[E>>2]=0;E=f+146|0;a[E>>0]=2;E=f+44|0;c[E>>2]=0;E=f+32|0;c[E>>2]=1;E=f+147|0;a[E>>0]=-1;E=f+48|0;c[E>>2]=0;E=f+64|0;f=E;c[f>>2]=0;E=E+4|0;c[E>>2]=0;Ra=F;return}function id(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;n=r+16|0;m=r+8|0;o=r;q=f+16|0;l=c[q>>2]|0;j=c[l+88>>2]|0;b[j+48>>1]=4;j=j+40|0;c[j>>2]=g;c[j+4>>2]=h;j=l+36|0;if((c[j>>2]|0)>4){c[j>>2]=4;k=Rg(l)|0}else k=Gc(c[q>>2]|0)|0;if((k|0)!=100){j=c[q>>2]|0;if(!j){p=0;q=k;c[i>>2]=p;Ra=r;return q|0}k=gc(j)|0;c[q>>2]=0;j=c[f+20>>2]|0;if(!k){p=m;c[p>>2]=g;c[p+4>>2]=h;p=dd(j,36955,m)|0;q=1;c[i>>2]=p;Ra=r;return q|0}else{p=pd(j)|0;c[n>>2]=p;p=dd(j,31408,n)|0;q=k;c[i>>2]=p;Ra=r;return q|0}}l=c[c[l+96>>2]>>2]|0;j=b[f+8>>1]|0;a:do if((e[l+58>>1]|0)>(j&65535)){j=j&65535;k=c[l+88+(j<<2)>>2]|0;if(k>>>0<12){j=c[f+20>>2]|0;switch(k|0){case 7:{k=36942;break a}case 0:{p=9;break a}default:{}}k=36947;break}c[f+4>>2]=c[l+88+((b[l+56>>1]|0)+j<<2)>>2];if(k>>>0>127)j=(k+-12|0)>>>1;else j=d[3520+k>>0]|0;c[f>>2]=j;p=c[l+40>>2]|0;c[f+12>>2]=p;q=p+1|0;a[q>>0]=a[q>>0]|16;a[(c[p+8>>2]|0)+11>>0]=1;p=0;q=0;c[i>>2]=p;Ra=r;return q|0}else{j=c[f+20>>2]|0;p=9}while(0);if((p|0)==9)k=36937;c[o>>2]=k;p=dd(j,36908,o)|0;gc(c[q>>2]|0)|0;c[q>>2]=0;q=1;c[i>>2]=p;Ra=r;return q|0}function jd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=Ra;Ra=Ra+16|0;h=m;if(!b){c[h>>2]=58063;c[h+4>>2]=91595;c[h+8>>2]=31517;Db(21,32001,h);l=21;Ra=m;return l|0}k=c[b+20>>2]|0;i=b+16|0;j=c[i>>2]|0;do if((f|e|0)>=0?(n=Sv(f|0,((f|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0,p=L()|0,h=c[b>>2]|0,o=((h|0)<0)<<31>>31,!((p|0)>(o|0)|(p|0)==(o|0)&n>>>0>h>>>0)):0)if(!j){h=4;l=24}else{h=c[b+12>>2]|0;p=c[h+8>>2]|0;c[(c[p+4>>2]|0)+4>>2]=c[p>>2];h=Za[g&127](h,(c[b+4>>2]|0)+f|0,e,d)|0;if((h|0)!=4){c[j+40>>2]=h;c[k+64>>2]=h;if(h|0){l=27;break}if(!(c[k+260>>2]|0)){h=0;break}Ne(k,0);h=0;break}f=j+20|0;h=c[f>>2]|0;if((h|0)<832317811)switch(h|0){case 770837923:{l=8;break}default:{}}else switch(h|0){case 832317811:{l=8;break}default:{}}if((l|0)==8)kc(j)|0;d=c[j>>2]|0;kb(d,j);e=c[j+4>>2]|0;b=j+8|0;h=c[b>>2]|0;if(!e)c[d+4>>2]=h;else{c[e+8>>2]=h;h=c[b>>2]|0}if(h|0)c[h+4>>2]=e;c[f>>2]=1443283912;c[j>>2]=0;do if(d){if(c[d+480>>2]|0){Xd(d,j);break}p=j;if((c[d+304>>2]|0)>>>0<=p>>>0?(c[d+308>>2]|0)>>>0>p>>>0:0){p=d+300|0;c[j>>2]=c[p>>2];c[p>>2]=j}else l=20}else l=20;while(0);do if((l|0)==20)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0;h=4;l=24}else{h=1;l=24}while(0);if((l|0)==24){c[k+64>>2]=h;l=27}if((l|0)==27)Ne(k,h);if((h|0)==3082|(a[k+81>>0]|0)!=0){og(k);p=7;Ra=m;return p|0}else{p=c[k+68>>2]&h;Ra=m;return p|0}return 0}function kd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(!(a[b>>0]|0)){e=cg(b,c,d,e,0)|0;return e|0}else{e=Gi(b,c,d,e)|0;return e|0}return 0}function ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+32|0;j=k+16|0;f=k;h=k+20|0;if(!b){c[f>>2]=58063;c[f+4>>2]=91693;c[f+8>>2]=31517;Db(21,32001,f);j=21;Ra=k;return j|0}i=c[b+20>>2]|0;if(!(c[b+16>>2]|0))f=4;else{f=id(b,d,e,h)|0;do if(f|0?(g=c[h>>2]|0,h=(g|0)==0,c[j>>2]=g,Vb(i,f,h?0:31408,j),!h):0){if(i|0){if(c[i+480>>2]|0){Xd(i,g);break}j=g;if((c[i+304>>2]|0)>>>0<=j>>>0?(c[i+308>>2]|0)>>>0>j>>>0:0){j=i+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);j=7;Ra=k;return j|0}else{j=c[i+68>>2]&f;Ra=k;return j|0}return 0}function md(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=Ra;Ra=Ra+16|0;I=M;C=d[e+1>>0]|0;D=d[e>>0]|0;B=e+2|0;G=(a[e+3>>0]|0)==0;r=0;a:while(1){x=c;c=b;while(1){j=a[c>>0]|0;c=c+1|0;b=j&255;if(j<<24>>24>-1)if(!(j<<24>>24)){E=124;break a}else{g=c;A=b;E=10}else if((j&255)>191){b=d[2736+(b+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);if((b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)){y=c;z=65533}else{g=c;A=b;E=10}}else{g=c;A=b;E=10}if((E|0)==10){E=0;if((A|0)==(D|0)){E=11;break a}else{y=g;z=A}}if((z|0)!=(f|0)){i=z;w=r;u=y;break}if(!(a[B>>0]|0)){E=66;break}c=x+1|0;b=a[x>>0]|0;j=b&255;if((b&255)<=191)if(!(b<<24>>24)){h=1;E=125;break a}else q=c;else{b=d[2736+(j+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);q=c;j=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}c=y+1|0;b=a[y>>0]|0;k=b&255;do if((b&255)<=191){if(b<<24>>24==94){l=y+2|0;p=a[c>>0]|0;c=p&255;if((p&255)>191){c=d[2736+(c+-192)>>0]|0;k=a[l>>0]|0;if((k&-64)<<24>>24==-128){b=c;c=l;do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128)}else{b=c;c=l}n=1;m=0;k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b;break}else{n=1;k=c;c=l}}else n=0;if((k|0)==93){m=(j|0)==93&1;l=c+1|0;p=a[c>>0]|0;k=p&255;if((p&255)>191){c=d[2736+(k+-192)>>0]|0;k=a[l>>0]|0;if((k&-64)<<24>>24==-128){b=c;c=l;do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128)}else{b=c;c=l}k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}else c=l}else m=0}else{b=d[2736+(k+-192)>>0]|0;k=a[c>>0]|0;if((k&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128);n=0;m=0;k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}while(0);p=0;o=m;b:while(1){switch(k|0){case 0:{h=1;E=125;break a}case 93:break b;case 45:{m=a[c>>0]|0;if(m<<24>>24!=93?(p|0)!=0&m<<24>>24!=0:0){b=c+1|0;l=m&255;if((m&255)>191){l=d[2736+(l+-192)>>0]|0;m=a[b>>0]|0;if((m&-64)<<24>>24==-128)do{b=b+1|0;l=l<<6|m&63;m=a[b>>0]|0}while((m&-64)<<24>>24==-128);l=(l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)?65533:l}v=0;t=b;s=j>>>0<p>>>0|j>>>0>l>>>0?o:1}else E=105;break}default:E=105}if((E|0)==105){E=0;v=k;t=c;s=(j|0)==(k|0)?1:o}c=t+1|0;p=a[t>>0]|0;k=p&255;if((p&255)>191){b=d[2736+(k+-192)>>0]|0;k=a[c>>0]|0;if((k&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128);k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}p=v;o=s}if((o|0)==(n|0)){h=1;E=125;break a}else x=q}do if((E|0)==66){E=0;b=y+1|0;c=a[y>>0]|0;i=c&255;if((c&255)<=191)if(!(c<<24>>24)){h=1;E=125;break a}else{w=b;u=b;break}c=d[2736+(i+-192)>>0]|0;i=a[b>>0]|0;if((i&-64)<<24>>24==-128)do{b=b+1|0;c=c<<6|i&63;i=a[b>>0]|0}while((i&-64)<<24>>24==-128);i=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c;w=b;u=b}while(0);r=a[x>>0]|0;c=x+1|0;b=r&255;if((r&255)>191){b=d[2736+(b+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);b=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}do if((i|0)!=(b|0)){if(!G?((b|i)>>>0<128?(a[208+(i&255)>>0]|0)==(a[208+(b&255)>>0]|0):0):0)break;if((i|0)!=(C|0)){h=1;E=125;break a}if(!((u|0)!=(w|0)&(b|0)!=0)){h=1;E=125;break a}}while(0);r=w;b=u}if((E|0)==11){j=x;c:while(1){while(1){A=a[g>>0]|0;g=g+1|0;c=A&255;if((A&255)>191){c=d[2736+(c+-192)>>0]|0;i=a[g>>0]|0;if((i&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|i&63;i=a[g>>0]|0}while((i&-64)<<24>>24==-128);b=g;c=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c}else b=g;g=(c|0)==(C|0);if(!((c|0)==(D|0)|g))break c;if(g)break;else g=b}g=j+1|0;i=a[j>>0]|0;if((i&255)>191){if((a[g>>0]&-64)<<24>>24==-128)do g=g+1|0;while((a[g>>0]&-64)<<24>>24==-128)}else if(!(i<<24>>24)){h=2;E=125;break}j=g;g=b}if((E|0)==125){Ra=M;return h|0}if(!c){f=0;Ra=M;return f|0}do if((c|0)==(f|0)){if(!(a[B>>0]|0)){g=b+1|0;c=a[b>>0]|0;h=c&255;if((c&255)<=191){if(!(c<<24>>24))h=2;else{F=h;H=g;E=43;break}Ra=M;return h|0}c=d[2736+(h+-192)>>0]|0;h=a[g>>0]|0;if((h&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|h&63;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);if((c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)){J=65533;K=g;break}else{F=c;H=g;E=43;break}}i=b+-1|0;c=a[j>>0]|0;if(!(c<<24>>24)){f=2;Ra=M;return f|0}g=j;while(1){h=md(i,g,e,f)|0;if((h|0)!=1){E=125;break}h=g+1|0;if((c&255)>191){g=h;while(1){c=a[g>>0]|0;if((c&-64)<<24>>24==-128)g=g+1|0;else break}}else{g=h;c=a[h>>0]|0}if(!(c<<24>>24)){h=2;E=125;break}}if((E|0)==125){Ra=M;return h|0}}else{F=c;H=b;E=43}while(0);if((E|0)==43)if(F>>>0<129){if(G){a[I>>0]=F;g=0}else{g=F&255;a[I>>0]=F&(~(a[880+g>>0]&32)&255);g=a[208+g>>0]|0;a[I+2>>0]=0}a[I+1>>0]=g;g=j+(Mv(j,I)|0)|0;d:do if(a[g>>0]|0){while(1){g=g+1|0;c=md(H,g,e,f)|0;if((c|0)!=1)break;g=g+(Mv(g,I)|0)|0;if(!(a[g>>0]|0))break d}f=c;Ra=M;return f|0}while(0);f=2;Ra=M;return f|0}else{J=F;K=H}g=j;while(1){h=a[g>>0]|0;g=g+1|0;c=h&255;if(h<<24>>24>-1){if(!(h<<24>>24)){h=2;E=125;break}}else if((h&255)>191){c=d[2736+(c+-192)>>0]|0;h=a[g>>0]|0;if((h&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|h&63;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);c=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c}if((c|0)==(J|0)?(L=md(K,g,e,f)|0,(L|0)!=1):0){h=L;E=125;break}}if((E|0)==125){Ra=M;return h|0}}else if((E|0)==124){f=(a[x>>0]|0)!=0&1;Ra=M;return f|0}else if((E|0)==125){Ra=M;return h|0}return 0}function nd(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+48|0;n=T+24|0;m=T+16|0;l=T+8|0;k=T;J=T+40|0;K=T+36|0;c[K>>2]=0;a:do if(!f){c[k>>2]=31171;Db(21,38253,k)}else{k=c[f+96>>2]|0;b:do if((k|0)<-264537850){switch(k|0){case -1607883113:break;default:break b}R=f+64|0;c[R>>2]=0;if(c[f+260>>2]|0)Ne(f,0);x=(h|0)==0;y=f+32|0;z=f+272|0;A=f+276|0;M=f+81|0;B=f+288|0;N=f+300|0;C=f+296|0;D=f+284|0;E=f+292|0;F=f+82|0;G=f+180|0;H=f+264|0;I=f+236|0;O=f+480|0;P=f+304|0;Q=f+308|0;l=(g|0)==0?59952:g;c:while(1){if(!(a[l>>0]|0)){k=0;w=135;break}c[K>>2]=0;k=qd(f,l,-1,128,0,K,J)|0;do if(!k){p=c[K>>2]|0;if(!p){k=0;l=c[J>>2]|0;break}o=0;m=0;n=0;g=0;l=0;q=0;while(1){k=Gc(p)|0;if(!x){v=(k|0)==100;if(v)if(!n)w=20;else{u=m;t=n;v=g;w=48}else{if((n|0)!=0|(k|0)!=101){w=105;break}if((c[y>>2]&256|0)==0&0==0){w=105;break}else w=20}if((w|0)==20){w=0;n=(p|0)==0;if(n)u=0;else u=e[p+144>>1]|0;m=u<<3|4;d:do if(c[z>>2]|0)if(!(a[M>>0]|0))w=30;else{l=0;w=136;break c}else{do if(0<0|(0==0?(e[A>>1]|0)>>>0<m>>>0:0))l=B;else{l=c[N>>2]|0;if(l|0){c[N>>2]=c[l>>2];c[D>>2]=(c[D>>2]|0)+1;break d}l=c[C>>2]|0;if(!l){l=E;break}c[C>>2]=c[l>>2];c[D>>2]=(c[D>>2]|0)+1;break d}while(0);c[l>>2]=(c[l>>2]|0)+1;w=30}while(0);if((w|0)==30){w=0;l=_d(f,m,0)|0}if(!l){l=0;w=136;break c}do if(u|0){s=p+144|0;t=p+116|0;if(n){gw(l|0,0,u<<2|0)|0;break}r=0;do{q=c[p>>2]|0;do if(r>>>0<(e[s>>1]|0)>>>0){m=c[t>>2]|0;n=m+(r*40|0)|0;e:do if(!n)m=0;else{g=b[m+(r*40|0)+8>>1]|0;do if((g&514)==514){if((a[m+(r*40|0)+10>>0]|0)!=1)break;m=c[m+(r*40|0)+16>>2]|0;break e}while(0);if(g&1){m=0;break}m=Gg(n,1)|0}while(0);n=q+81|0;if(!(a[n>>0]|0))break;if(c[q+180>>2]|0){m=0;break}a[n>>0]=0;c[q+264>>2]=0;m=q+272|0;c[m>>2]=(c[m>>2]|0)+-1;m=0}else m=0;while(0);c[l+(r<<2)>>2]=m;r=r+1|0}while((r|0)!=(u|0))}while(0);if(v){t=1;v=l;q=l;w=48}else{m=u;n=1;g=l;q=l}}if((w|0)==48){w=0;s=v+(u<<2)|0;f:do if((u|0)>0){m=0;while(1){o=(p|0)==0;g:do if(o)n=29576;else{n=c[p+120>>2]|0;do if(n|0){if(m>>>0>=(e[p+144>>1]|0)>>>0)break;n=n+(m*40|0)|0;break g}while(0);n=c[p>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576}while(0);g=b[n+8>>1]|0;do if((g&514)==514){if((a[n+10>>0]|0)!=1){w=58;break}r=c[n+16>>2]|0}else w=58;while(0);do if((w|0)==58){w=0;if(g&1){r=0;break}r=Gg(n,1)|0}while(0);if(!o){g=c[p>>2]|0;o=p+40|0;n=c[o>>2]|0;if((n|0)==3082|(a[g+81>>0]|0)!=0){og(g);n=7}else n=c[g+68>>2]&n;c[o>>2]=n}c[s+(m<<2)>>2]=r;if(!r){p=c[K>>2]|0;if(!p)n=1;else{n=c[p+120>>2]|0;do if(!n)w=70;else{if(m>>>0>=(e[p+144>>1]|0)>>>0){w=70;break}n=n+(m*40|0)|0;g=p}while(0);if((w|0)==70){w=0;n=c[p>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576;g=p}n=b[n+8>>1]&31;g=c[g>>2]|0;r=p+40|0;o=c[r>>2]|0;if((o|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7}else g=c[g+68>>2]&o;c[r>>2]=g}if(!(-1431655766>>>n&1)){w=76;break c}}m=m+1|0;if((m|0)>=(u|0))break f;p=c[K>>2]|0}}else m=0;while(0);c[s+(m<<2)>>2]=0;o=s;m=u;n=t;g=v}if(Za[h&127](i,m,o,g)|0){w=86;break c}}if((k|0)!=100){w=104;break}p=c[K>>2]|0}if((w|0)==104){w=0;p=c[K>>2]|0}else if((w|0)==105)w=0;o=p+20|0;k=c[o>>2]|0;if((k|0)<832317811)switch(k|0){case 770837923:{w=107;break}default:k=0}else switch(k|0){case 832317811:{w=107;break}default:k=0}if((w|0)==107){w=0;k=kc(p)|0}n=c[p>>2]|0;kb(n,p);g=c[p+4>>2]|0;m=p+8|0;l=c[m>>2]|0;if(!g)c[n+4>>2]=l;else{c[g+8>>2]=l;l=c[m>>2]|0}if(l|0)c[l+4>>2]=g;c[o>>2]=1443283912;c[p>>2]=0;do if(n){if(c[n+480>>2]|0){Xd(n,p);break}v=p;if((c[n+304>>2]|0)>>>0<=v>>>0?(c[n+308>>2]|0)>>>0>v>>>0:0){v=n+300|0;c[p>>2]=c[v>>2];c[v>>2]=p}else w=119}else w=119;while(0);do if((w|0)==119)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{w=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}while(0);c[K>>2]=0;l=c[J>>2]|0;while(1)if(!(a[880+(d[l>>0]|0)>>0]&1))break;else l=l+1|0;if(q){if(c[O>>2]|0){Xd(f,q);break}w=q;if((c[P>>2]|0)>>>0<=w>>>0?(c[Q>>2]|0)>>>0>w>>>0:0){c[q>>2]=c[N>>2];c[N>>2]=q;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{w=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}}while(0);if(k){w=135;break}}if((w|0)==76)if((a[M>>0]|0)==0?(a[F>>0]|0)==0:0){a[M>>0]=1;if((c[G>>2]|0)>0)c[H>>2]=1;c[z>>2]=(c[z>>2]|0)+1;m=c[I>>2]|0;if(m){c[m+12>>2]=7;w=136}else w=136}else w=136;else if((w|0)==86){o=c[K>>2]|0;p=o+20|0;k=c[p>>2]|0;if((k|0)<832317811)switch(k|0){case 770837923:{w=87;break}default:{}}else switch(k|0){case 832317811:{w=87;break}default:{}}if((w|0)==87)kc(o)|0;n=c[o>>2]|0;kb(n,o);g=c[o+4>>2]|0;m=o+8|0;k=c[m>>2]|0;if(!g)c[n+4>>2]=k;else{c[g+8>>2]=k;k=c[m>>2]|0}if(k|0)c[k+4>>2]=g;c[p>>2]=1443283912;c[o>>2]=0;do if(n){if(c[n+480>>2]|0){Xd(n,o);break}J=o;if((c[n+304>>2]|0)>>>0<=J>>>0?(c[n+308>>2]|0)>>>0>J>>>0:0){J=n+300|0;c[o>>2]=c[J>>2];c[J>>2]=o}else w=99}else w=99;while(0);do if((w|0)==99)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{J=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[K>>2]=0;c[R>>2]=4;Ne(f,4);k=4}else if((w|0)==135){l=0;p=c[K>>2]|0;w=136}do if((w|0)==136)if(p){q=p+20|0;m=c[q>>2]|0;if((m|0)<832317811)switch(m|0){case 770837923:{w=138;break}default:{}}else switch(m|0){case 832317811:{w=138;break}default:{}}if((w|0)==138)kc(p)|0;g=c[p>>2]|0;kb(g,p);o=c[p+4>>2]|0;n=p+8|0;m=c[n>>2]|0;if(!o)c[g+4>>2]=m;else{c[o+8>>2]=m;m=c[n>>2]|0}if(m|0)c[m+4>>2]=o;c[q>>2]=1443283912;c[p>>2]=0;if(g|0){if(c[g+480>>2]|0){Xd(g,p);break}K=p;if((c[g+304>>2]|0)>>>0<=K>>>0?(c[g+308>>2]|0)>>>0>K>>>0:0){K=g+300|0;c[p>>2]=c[K>>2];c[K>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{K=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if(l|0){if(c[O>>2]|0){Xd(f,l);break}O=l;if((c[P>>2]|0)>>>0<=O>>>0?(c[Q>>2]|0)>>>0>O>>>0:0){c[l>>2]=c[N>>2];c[N>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Q=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if((k|0)==3082|(a[M>>0]|0)!=0){og(f);g=7}else g=c[f+68>>2]&k;k=(j|0)!=0;if(!(k&(g|0)!=0)){if(!k){j=g;Ra=T;return j|0}c[j>>2]=0;j=g;Ra=T;return j|0}n=pd(f)|0;do if(n|0?(S=(Eu(n)|0)+1|0,Q=Sv(S|0,0,-1,-1)|0,P=L()|0,!(P>>>0>0|(P|0)==0&Q>>>0>2147483390)):0){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](S)|0;if(!k)break}else{k=Wa[c[29356>>2]&127](S)|0;if((c[14985]|0)>>>0<S>>>0)c[14985]=S;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){Q=c[14978]|0;P=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&P>>>0<=Q>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}ew(k|0,n|0,S|0)|0;c[j>>2]=k;j=g;Ra=T;return j|0}while(0);c[j>>2]=0;c[R>>2]=7;Ne(f,7);j=7;Ra=T;return j|0}else{if((k|0)<1266094736)switch(k|0){case -264537850:break;default:break b}else switch(k|0){case 1266094736:break;default:break b}c[m>>2]=38244;Db(21,38253,m);break a}while(0);c[l>>2]=50924;Db(21,38253,l)}while(0);c[n>>2]=58063;c[n+4>>2]=118947;c[n+8>>2]=31517;Db(21,32001,n);j=21;Ra=T;return j|0}function od(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return qd(a,b,c,128,0,d,e)|0}function pd(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;g=i+8|0;f=i;a:do if(d){e=c[d+96>>2]|0;b:do if((e|0)>=-264537850)if((e|0)<1266094736)switch(e|0){case -264537850:break b;default:{h=3;break b}}else switch(e|0){case 1266094736:break b;default:{h=3;break b}}else switch(e|0){case -1607883113:break;default:h=3}while(0);if((h|0)==3){c[f>>2]=50924;Db(21,38253,f);c[g>>2]=58063;c[g+4>>2]=157025;c[g+8>>2]=31517;Db(21,32001,g);e=50552;break}if(!(a[d+81>>0]|0)){h=d+64|0;e=c[h>>2]|0;c:do if(!e)e=0;else{g=c[d+260>>2]|0;do if(g){f=b[g+8>>1]|0;if((f&514)==514?(a[g+10>>0]|0)==1:0)e=c[g+16>>2]|0;else{if(f&1)break;e=Gg(g,1)|0}if(e|0)break a;e=c[h>>2]|0}while(0);switch(e|0){case 516:{e=50738;break a}case 100:{e=50760;break a}case 101:{e=50782;break a}default:{e=e&255;if(e>>>0<29)break c;else{e=50724;break a}}}}while(0);if(!(520028155>>>e&1))e=50724;else e=c[22960+(e<<2)>>2]|0}else e=34831}else e=34831;while(0);Ra=i;return e|0}function qd(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=Ra;Ra=Ra+352|0;ya=za+56|0;xa=za+48|0;wa=za+40|0;p=za+24|0;o=za+16|0;n=za+8|0;m=za;ta=za+336|0;ua=za+60|0;c[k>>2]=0;a:do if(!f){c[m>>2]=31171;Db(21,38253,m)}else{m=c[f+96>>2]|0;b:do if((m|0)<-264537850){switch(m|0){case -1607883113:break;default:break b}if(!g)break a;ma=f+20|0;n=c[ma>>2]|0;na=f+16|0;if((n|0)>0){o=c[na>>2]|0;m=0;do{p=c[o+(m<<4)+4>>2]|0;if(p|0)c[(c[p+4>>2]|0)+4>>2]=c[p>>2];m=m+1|0}while((m|0)!=(n|0))}D=ua+188|0;E=ua+220|0;F=(i&1|0)==0;G=i>>>2&1;H=ua+25|0;I=ua+24|0;J=f+272|0;K=f+360|0;M=ua+64|0;N=(h|0)>-1;O=f+4|0;P=ua+68|0;Q=(h|0)==0;R=ua+12|0;S=f+112|0;T=g+(h+-1)|0;U=ua+17|0;V=f+81|0;W=f+68|0;X=g+h|0;Y=ua+224|0;Z=Sv(h|0,((h|0)<0)<<31>>31|0,1,0)|0;_=L()|0;$=(l|0)==0;aa=f+276|0;ba=f+288|0;ca=f+300|0;da=f+480|0;ea=ua+8|0;fa=f+165|0;ga=f+296|0;ha=f+284|0;ia=f+304|0;ja=ua+199|0;ka=g;v=i&255;w=f+292|0;x=f+308|0;y=v<<24>>24>-1;z=f+64|0;A=ua+260|0;B=f+260|0;C=f+56|0;u=0;c:while(1){d:while(1){c[ta>>2]=0;gw(ua|0,0,148)|0;m=D;n=m+88|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));c[E>>2]=j;if(!F){a[I>>0]=1;c[J>>2]=(c[J>>2]|0)+1}a[H>>0]=G;i=c[ma>>2]|0;e:do if((i|0)>0){p=c[na>>2]|0;m=0;f:while(1){o=c[p+(m<<4)+4>>2]|0;if(o|0?(va=c[o+4>>2]|0,c[va+4>>2]=c[o>>2],a[o+9>>0]|0):0){if((c[va+76>>2]|0)!=(o|0)?b[va+22>>1]&64:0)break;n=c[va+72>>2]|0;if(n|0)do{do if((c[n>>2]|0)!=(o|0)){if((c[n+4>>2]|0)!=1)break;if((a[n+8>>0]|0)!=1)break f}while(0);n=c[n+12>>2]|0}while((n|0)!=0)}m=m+1|0;if((m|0)>=(i|0)){la=31;break e}}c[wa>>2]=c[p+(m<<4)>>2];Vb(f,262,38298,wa);n=262}else la=31;while(0);g:do if((la|0)==31){la=0;n=c[K>>2]|0;c[K>>2]=0;if(n|0){m=c[O>>2]|0;if(m|0)do{t=m+149|0;s=(d[t>>0]|d[t+1>>0]<<8)&-4|1;a[t>>0]=s;a[t+1>>0]=s>>8;m=c[m+8>>2]|0}while((m|0)!=0);do{o=n;n=c[n+24>>2]|0;p=c[o>>2]|0;s=o+12|0;t=(c[s>>2]|0)+-1|0;c[s>>2]=t;h:do if(!t){m=c[o+8>>2]|0;if(m|0)Wa[c[(c[m>>2]|0)+16>>2]&127](m)|0;do if(p|0){if(c[p+480>>2]|0){Xd(p,o);break h}m=o;if((c[p+304>>2]|0)>>>0>m>>>0)break;if((c[p+308>>2]|0)>>>0<=m>>>0)break;t=p+300|0;c[o>>2]=c[t>>2];c[t>>2]=o;break h}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0)}while((n|0)!=0)}c[ua>>2]=f;i:do if(N){if(!Q?(a[T>>0]|0)==0:0){la=75;break}if((c[S>>2]|0)<(h|0)){Vb(f,18,38328,xa);if(!(a[V>>0]|0)){n=c[W>>2]&18;break g}else{og(f);n=7;break g}}j:do if(c[J>>2]|0){if(!(a[V>>0]|0))la=64}else{do if(_>>>0>0|((_|0)==0?Z>>>0>(e[aa>>1]|0)>>>0:0))m=ba;else{m=c[ca>>2]|0;if(m|0){c[ca>>2]=c[m>>2];c[ha>>2]=(c[ha>>2]|0)+1;oa=m;la=65;break j}m=c[ga>>2]|0;if(!m){m=w;break}c[ga>>2]=c[m>>2];c[ha>>2]=(c[ha>>2]|0)+1;oa=m;la=65;break j}while(0);c[m>>2]=(c[m>>2]|0)+1;la=64}while(0);if((la|0)==64){oa=_d(f,Z,_)|0;la=65}if((la|0)==65?(la=0,oa|0):0){ew(oa|0,g|0,h|0)|0;a[oa+h>>0]=0;ud(ua,oa,ta)|0;m=oa;c[Y>>2]=g+((c[Y>>2]|0)-m);if(c[da>>2]|0){Xd(f,oa);break}do if((c[ia>>2]|0)>>>0<=m>>>0){if((c[x>>2]|0)>>>0<=m>>>0)break;c[oa>>2]=c[ca>>2];c[ca>>2]=oa;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](oa);break}else{t=Wa[c[29352>>2]&127](oa)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](oa);break}}c[Y>>2]=X}else la=75;while(0);if((la|0)==75){la=0;ud(ua,g,ta)|0}if((c[R>>2]|0)==101)c[R>>2]=0;k:do if(a[U>>0]|0?(pa=c[ua>>2]|0,qa=pa+20|0,(c[qa>>2]|0)>0):0){q=pa+16|0;r=pa+24|0;s=pa+56|0;i=0;l:while(1){m=c[q>>2]|0;t=c[m+(i<<4)+4>>2]|0;do if(t|0){if(!(a[t+8>>0]|0)){m=Zb(t,0,0)|0;if((m|0)>=7)break l;switch(m|0){case 0:break;default:break k}o=c[t+4>>2]|0;c[o+4>>2]=c[t>>2];o=c[(c[o+12>>2]|0)+56>>2]|0;p=1;o=d[o+41>>0]<<16|d[o+40>>0]<<24|d[o+42>>0]<<8|d[o+43>>0];m=c[q>>2]|0}else{o=c[t+4>>2]|0;c[o+4>>2]=c[t>>2];o=c[(c[o+12>>2]|0)+56>>2]|0;p=0;o=d[o+41>>0]<<16|d[o+40>>0]<<24|d[o+42>>0]<<8|d[o+43>>0]}n=c[m+(i<<4)+12>>2]|0;if((o|0)!=(c[n>>2]|0)){o=n+78|0;b[o>>1]=b[o>>1]|8;o=(c[m+28>>2]|0)+78|0;b[o>>1]=b[o>>1]|8;c[r>>2]=c[r>>2]&-17;m:do if(!(c[s>>2]|0)){n=c[qa>>2]|0;if((n|0)<=0)break;o=0;while(1){m=c[m+(o<<4)+12>>2]|0;if(b[m+78>>1]&8){dh(m);n=c[qa>>2]|0}m=o+1|0;if((m|0)>=(n|0))break m;o=m;m=c[q>>2]|0}}while(0);c[R>>2]=17}if(!p)break;c[(c[t+4>>2]|0)+4>>2]=c[t>>2];if(cc(t,0)|0)break;bc(t,0)|0}while(0);i=i+1|0;if((i|0)>=(c[qa>>2]|0))break k}if((m|0)<3082)switch(m|0){case 7:break;default:break k}else switch(m|0){case 3082:break;default:break k}m=pa+81|0;if((a[m>>0]|0)==0?(a[pa+82>>0]|0)==0:0){a[m>>0]=1;if((c[pa+180>>2]|0)>0)c[pa+264>>2]=1;m=pa+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[pa+236>>2]|0;if(!m)break;c[m+12>>2]=7}}while(0);if(a[V>>0]|0)c[R>>2]=7;if(!$)c[l>>2]=c[Y>>2];t=c[R>>2]|0;s=(t|0)==0;n:do if(s?(ra=c[ea>>2]|0,ra|0):0){switch(a[ja>>0]|0){case 0:break n;case 2:{Wi(ra,4);m=12;n=8;break}default:{Wi(ra,8);m=8;n=0}}o=n;do{p=c[ea>>2]|0;if(!(a[(c[p>>2]|0)+81>>0]|0))yc((c[p+116>>2]|0)+((o-n|0)*40|0)|0,c[5696+(o<<2)>>2]|0,-1,1,0)|0;o=o+1|0}while(o>>>0<m>>>0)}while(0);do if(!(a[fa>>0]|0)){r=c[ea>>2]|0;q=(c[Y>>2]|0)-ka|0;if(!r){m=0;la=155;break}a[r+148>>0]=v;if(y)c[r+208>>2]=0;o=c[r>>2]|0;p=Sv(q|0,((q|0)<0)<<31>>31|0,1,0)|0;i=L()|0;o:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))la=132;else m=0;else{do if(!(i>>>0>0|((i|0)==0?p>>>0>(e[o+276>>1]|0)>>>0:0))){n=o+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];la=o+284|0;c[la>>2]=(c[la>>2]|0)+1;la=133;break o}n=o+296|0;m=c[n>>2]|0;if(!m){m=o+292|0;break}else{c[n>>2]=c[m>>2];la=o+284|0;c[la>>2]=(c[la>>2]|0)+1;la=133;break o}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;la=132}while(0);if((la|0)==132){m=_d(o,p,i)|0;la=133}do if((la|0)==133){if(!m){m=0;break}ew(m|0,g|0,q|0)|0;a[m+q>>0]=0}while(0);c[r+188>>2]=m;la=136}else la=136;while(0);p:do if((la|0)==136){la=0;q=c[ea>>2]|0;m=q;if(!q){la=155;break}if(s?(a[V>>0]|0)==0:0){la=155;break}r=q+20|0;n=c[r>>2]|0;if((n|0)<832317811)switch(n|0){case 770837923:{la=140;break}default:{}}else switch(n|0){case 832317811:{la=140;break}default:{}}if((la|0)==140){la=0;kc(q)|0}p=c[q>>2]|0;kb(p,q);i=c[q+4>>2]|0;o=q+8|0;n=c[o>>2]|0;if(!i)c[p+4>>2]=n;else{c[i+8>>2]=n;n=c[o>>2]|0}if(n|0)c[n+4>>2]=i;c[r>>2]=1443283912;c[q>>2]=0;do if(p|0){if(c[p+480>>2]|0){Xd(p,q);break p}if((c[p+304>>2]|0)>>>0>m>>>0)break;if((c[p+308>>2]|0)>>>0<=m>>>0)break;r=p+300|0;c[q>>2]=c[r>>2];c[r>>2]=q;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{r=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);if((la|0)==155){la=0;c[k>>2]=m}n=c[ta>>2]|0;q:do if(n){c[ya>>2]=n;Vb(f,t,31408,ya);if(c[da>>2]|0){Xd(f,n);break}m=n;do if((c[ia>>2]|0)>>>0<=m>>>0){if((c[x>>2]|0)>>>0<=m>>>0)break;c[n>>2]=c[ca>>2];c[ca>>2]=n;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else{c[z>>2]=t;if(!s){Ne(f,t);break}if(!(c[B>>2]|0))break;Ne(f,0)}while(0);m=c[A>>2]|0;if(!m){n=t;break}while(1){c[A>>2]=c[m+4>>2];r:do if(!(c[da>>2]|0)){n=m;do if((c[ia>>2]|0)>>>0<=n>>>0){if((c[x>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[ca>>2];c[ca>>2]=m;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(f,m);while(0);m=c[A>>2]|0;if(!m){n=t;break}}}while(0);o=c[ua>>2]|0;m=c[M>>2]|0;do if(m|0){if(o|0){if(c[o+480>>2]|0){Xd(o,m);break}t=m;if((c[o+304>>2]|0)>>>0<=t>>>0?(c[o+308>>2]|0)>>>0>t>>>0:0){t=o+300|0;c[m>>2]=c[t>>2];c[t>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{t=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);m=c[P>>2]|0;if(m|0)ri(o,m);if(o|0){t=o+272|0;c[t>>2]=(c[t>>2]|0)-(d[I>>0]|0)}switch(n|0){case 513:break;case 17:break d;default:{la=205;break c}}}if((c[C>>2]|0)==0?(sa=c[ma>>2]|0,(sa|0)>0):0){o=0;m=sa;do{n=c[(c[na>>2]|0)+(o<<4)+12>>2]|0;if(b[n+78>>1]&8){dh(n);m=c[ma>>2]|0}o=o+1|0}while((o|0)<(m|0))}if(!u)u=1;else{la=202;break}}if((la|0)==202)if(!(a[V>>0]|0)){ya=c[W>>2]&17;Ra=za;return ya|0}else{og(f);ya=7;Ra=za;return ya|0}else if((la|0)==205)if((n|0)==3082|(a[V>>0]|0)!=0){og(f);ya=7;Ra=za;return ya|0}else{ya=c[W>>2]&n;Ra=za;return ya|0}}else{if((m|0)<1266094736)switch(m|0){case -264537850:break;default:break b}else switch(m|0){case 1266094736:break;default:break b}c[o>>2]=38244;Db(21,38253,o);break a}while(0);c[n>>2]=50924;Db(21,38253,n)}while(0);c[p>>2]=58063;c[p+4>>2]=124395;c[p+8>>2]=31517;Db(21,32001,p);ya=21;Ra=za;return ya|0}function rd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+16|0;n=o;k=c[b+348>>2]|0;if(!k){i=b+340|0;h=b+344|0}else{i=a[e>>0]|0;if(!(i<<24>>24))h=0;else{h=0;j=e;do{j=j+1|0;h=G(h+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[j>>0]|0}while(i<<24>>24!=0)}h=(h>>>0)%((c[b+336>>2]|0)>>>0)|0;i=k+(h<<3)|0;h=k+(h<<3)+4|0}i=c[i>>2]|0;a:do if(!i)h=59292;else{m=d[208+(d[e>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;i=i+-1|0;k=c[h+12>>2]|0;l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-m|0;if(!(l<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;p=a[k>>0]|0;j=(d[208+(p&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(j|0)!=0))}if(!j)break a;if(!i){h=59292;break}}}while(0);if(!(c[h+8>>2]|0)){Hi(b,e,f,g,0)|0;h=0}else{c[n>>2]=58063;c[n+4>>2]=134381;c[n+8>>2]=31517;Db(21,32001,n);h=21}if(!(a[b+81>>0]|0)){p=c[b+68>>2]&h;Ra=o;return p|0}else{og(b);p=7;Ra=o;return p|0}return 0}function sd(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;o=p;l=c[b+348>>2]|0;if(!l){j=b+340|0;i=b+344|0}else{j=a[e>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=e;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}i=(i>>>0)%((c[b+336>>2]|0)>>>0)|0;j=l+(i<<3)|0;i=l+(i<<3)+4|0}j=c[j>>2]|0;a:do if(!j)i=59292;else{n=d[208+(d[e>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=e;do{l=l+1|0;m=m+1|0;q=a[l>>0]|0;k=(d[208+(q&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!j){i=59292;break}}}while(0);if(!(c[i+8>>2]|0)){Hi(b,e,f,g,h)|0;i=0}else{c[o>>2]=58063;c[o+4>>2]=134381;c[o+8>>2]=31517;Db(21,32001,o);i=21}if(!(a[b+81>>0]|0))i=c[b+68>>2]&i;else{og(b);i=7}if(!((h|0)!=0&(i|0)!=0)){Ra=p;return i|0}ab[h&127](g);Ra=p;return i|0}function td(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+304|0;j=q+16|0;g=q;h=q+296|0;p=q+20|0;c[h>>2]=0;i=c[e+352>>2]|0;if(i|0?(m=i+12|0,(c[m>>2]|0)==0):0){l=c[i+4>>2]|0;gw(p+4|0,0,272)|0;n=p+200|0;a[n>>0]=1;c[p>>2]=e;c[p+132>>2]=1;if(((((ud(p,f,h)|0)==0?(k=c[p+228>>2]|0,(k|0)!=0):0)?(a[e+81>>0]|0)==0:0)?(c[k+12>>2]|0)==0:0)?(c[k+56>>2]|0)==0:0){g=l+4|0;if(!(c[g>>2]|0)){h=k+4|0;c[g>>2]=c[h>>2];f=k+42|0;b[l+42>>1]=b[f>>1]|0;j=k+36|0;g=l+36|0;c[g>>2]=c[g>>2]|c[j>>2]&96;b[f>>1]=0;c[h>>2]=0;if((c[j>>2]&32|0)!=0?(c[(c[c[(c[i>>2]|0)+4>>2]>>2]|0)+52>>2]|0)!=0:0){g=k+8|0;while(1){g=c[g>>2]|0;j=g+55|0;if(((d[j>>0]|d[j+1>>0]<<8)&3)==2)break;else g=g+20|0}g=(b[g+50>>1]|0)!=1&1}else g=0;f=k+8|0;h=c[f>>2]|0;if(h){c[l+8>>2]=h;c[f>>2]=0;c[h+12>>2]=l}}else g=0;c[m>>2]=1;l=g}else o=18;do if((o|0)==18){g=c[h>>2]|0;m=(g|0)==0;c[j>>2]=g;Vb(e,1,m?0:31408,j);if(!m){if(c[e+480>>2]|0){Xd(e,g);l=1;break}m=g;if((c[e+304>>2]|0)>>>0<=m>>>0?(c[e+308>>2]|0)>>>0>m>>>0:0){l=e+300|0;c[g>>2]=c[l>>2];c[l>>2]=g;l=1;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);l=1;break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);l=1;break}}else l=1}while(0);a[n>>0]=0;j=c[p+8>>2]|0;do if(j|0){k=j+20|0;g=c[k>>2]|0;if((g|0)<832317811)switch(g|0){case 770837923:{o=29;break}default:{}}else switch(g|0){case 832317811:{o=29;break}default:{}}if((o|0)==29)kc(j)|0;i=c[j>>2]|0;kb(i,j);h=c[j+4>>2]|0;f=j+8|0;g=c[f>>2]|0;if(!h)c[i+4>>2]=g;else{c[h+8>>2]=g;g=c[f>>2]|0}if(g|0)c[g+4>>2]=h;c[k>>2]=1443283912;c[j>>2]=0;if(i|0){if(c[i+480>>2]|0){Xd(i,j);break}o=j;if((c[i+304>>2]|0)>>>0<=o>>>0?(c[i+308>>2]|0)>>>0>o>>>0:0){o=i+300|0;c[j>>2]=c[o>>2];c[o>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{o=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);g=c[p+228>>2]|0;do if(g|0){if(e|0?c[e+480>>2]|0:0){Vi(e,g);break}n=g+32|0;o=(c[n>>2]|0)+-1|0;c[n>>2]=o;if(!o)Vi(e,g)}while(0);f=c[p>>2]|0;g=c[p+64>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}o=g;if((c[f+304>>2]|0)>>>0<=o>>>0?(c[f+308>>2]|0)>>>0>o>>>0:0){o=f+300|0;c[g>>2]=c[o>>2];c[o>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{o=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[p+68>>2]|0;if(g|0)ri(f,g);g=p+24|0;if(f|0){p=f+272|0;c[p>>2]=(c[p>>2]|0)-(d[g>>0]|0)}a[g>>0]=0;if(!(a[e+81>>0]|0)){e=c[e+68>>2]&l;Ra=q;return e|0}else{og(e);e=7;Ra=q;return e|0}}c[e+64>>2]=21;Ne(e,21);c[g>>2]=58063;c[g+4>>2]=135056;c[g+8>>2]=31517;Db(21,32001,g);e=21;Ra=q;return e|0}function ud(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=Ra;Ra=Ra+1280|0;O=V+48|0;M=V+40|0;I=V+32|0;H=V+24|0;G=V+16|0;F=V+8|0;C=V+1272|0;D=V;E=V+1268|0;i=V+56|0;S=c[d>>2]|0;j=c[S+112>>2]|0;if(!(c[S+168>>2]|0))c[S+264>>2]=0;N=d+12|0;c[N>>2]=0;P=d+224|0;c[P>>2]=f;J=i+4|0;c[J>>2]=d;h=i+8|0;c[i>>2]=h;b[h>>1]=0;b[i+10>>1]=0;B=i+1208|0;c[B>>2]=i+1196;T=S+236|0;U=d+124|0;c[U>>2]=c[T>>2];c[T>>2]=d;k=Bi(f,E)|0;j=j-k|0;a:do if((j|0)>=0){w=S+264|0;x=d+188|0;y=d+192|0;z=i+8|0;v=D+4|0;u=C+4|0;l=-1;b:while(1){m=k;t=j;while(1){j=c[E>>2]|0;if((j|0)<=155){s=m;break}if(c[w>>2]|0){Q=10;break b}if((j|0)!=174){Q=13;break}f=f+m|0;j=Bi(f,E)|0;k=t-j|0;if((k|0)<0){Q=7;break a}else{m=j;t=k}}c:do if((Q|0)==13){Q=0;if(!(a[f>>0]|0)){switch(l|0){case 0:{j=f;break a}case 1:{j=0;break}default:j=1}c[E>>2]=j;s=0;break}switch(j|0){case 156:{j=f+6|0;d:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=23;break d}default:{Q=20;break d}}}do if((Q|0)==20){Q=0;if((k|0)>=95){j=59;break}if((b[5744+(k<<1)>>1]|0)!=59)if((k|0)==59)Q=25;else j=59;else Q=23}while(0);if((Q|0)==23)Q=25;do if((Q|0)==25){e:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=29;break e}default:{Q=27;break e}}}if((Q|0)==27?(Q=0,(k|0)<95):0)if((b[5744+(k<<1)>>1]|0)==59)Q=29;else{j=(k|0)==24?156:59;break}if((Q|0)==29){Q=0;c[C>>2]=59}j=59}while(0);c[E>>2]=j;s=m;break c}case 157:{f:do if((l|0)==23){j=f+4|0;g:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:break g;default:{Q=36;break g}}}do if((Q|0)==36){Q=0;if((k|0)<95?(b[5744+(k<<1)>>1]|0)==59:0)break;switch(k|0){case 22:case 59:{j=157;break f}default:{}}j=59;break f}while(0);j=157}else j=59;while(0);c[E>>2]=j;s=m;break c}case 158:{do if((l|0)==23){j=f+6|0;h:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=47;break h}default:{Q=45;break h}}}if((Q|0)==45?(Q=0,(k|0)<95):0)if((b[5744+(k<<1)>>1]|0)!=59)if((k|0)==22){j=158;break}else{Q=50;break}else Q=47;if((Q|0)==47)c[C>>2]=59;Q=50}else Q=50;while(0);if((Q|0)==50){Q=0;j=59}c[E>>2]=j;s=m;break c}default:{Q=52;break b}}}while(0);c[x>>2]=f;c[y>>2]=s;q=f;p=c[J>>2]|0;o=c[i>>2]|0;r=j&65535;k=b[o>>1]|0;while(1){n=k&65535;if((k&65535)<=540){l=e[5936+(n<<1)>>1]|0;m=r;while(1){j=m&65535;k=j+l|0;if(k>>>0<=2168?(b[7024+(k<<1)>>1]|0)==m<<16>>16:0){Q=64;break}if((m&65535)>=95){Q=60;break}j=b[5744+(j<<1)>>1]|0;if(!(j<<16>>16)){Q=60;break}else m=j}do if((Q|0)==60){Q=0;j=l+95|0;if(j>>>0<2169?!(m<<16>>16==0?1:(b[7024+(j<<1)>>1]|0)!=95):0){j=11376+(j<<1)|0;break}j=15664+(n<<1)|0}else if((Q|0)==64){Q=0;j=11376+(k<<1)|0}while(0);k=b[j>>1]|0}if((k&65535)<=1161){Q=68;break}k=$i(i,(k&65535)+-1162|0,f,s,p)|0;j=c[i>>2]|0;if(j>>>0<=h>>>0)break;else o=j}do if((Q|0)==68){Q=0;if((k&65535)>=1159){if(k<<16>>16==1160){c[i>>2]=o+-12;break}c[D>>2]=q;c[v>>2]=s;c[C>>2]=f;c[u>>2]=s;j=c[J>>2]|0;if(!(a[f>>0]|0))cd(j,49148,I);else{c[H>>2]=C;cd(j,38502,H)}c[J>>2]=j;aj(j,r,D);break}j=o+12|0;c[i>>2]=j;if(j>>>0<=(c[B>>2]|0)>>>0){b[j>>1]=(k&65535)>540?(k&65535)+378&65535:k;b[o+14>>1]=r;c[o+16>>2]=q;c[o+20>>2]=s;break}c[i>>2]=o;k=c[J>>2]|0;if(o>>>0>z>>>0?(c[i>>2]=o+-12,aj(k,b[o+2>>1]|0,o+4|0),A=c[i>>2]|0,A>>>0>z>>>0):0){j=A;do{r=c[J>>2]|0;c[i>>2]=j+-12;aj(r,b[j+2>>1]|0,j+4|0);j=c[i>>2]|0}while(j>>>0>z>>>0)}cd(k,38790,G);c[J>>2]=k}while(0);f=f+s|0;if(c[N>>2]|0){j=f;break a}l=c[E>>2]|0;k=Bi(f,E)|0;j=t-k|0;if((j|0)<0){Q=7;break a}}if((Q|0)==10){c[N>>2]=9;j=f;break}else if((Q|0)==52){c[F>>2]=m;c[F+4>>2]=f;cd(d,38428,F);j=f;break}}else Q=7;while(0);if((Q|0)==7){c[N>>2]=18;j=f}f=c[i>>2]|0;if(f>>>0>h>>>0)do{c[i>>2]=f+-12;aj(c[J>>2]|0,b[f+2>>1]|0,f+4|0);f=c[i>>2]|0}while(f>>>0>h>>>0);if(!(a[S+81>>0]|0)){h=c[N>>2]|0;switch(h|0){case 101:case 0:break;default:{K=h;Q=90}}}else{c[N>>2]=7;K=7;Q=90}if((Q|0)==90?(L=d+4|0,(c[L>>2]|0)==0):0){switch(K|0){case 516:{h=50738;break}case 100:{h=50760;break}default:{h=K&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}c[M>>2]=h;M=dd(S,31408,M)|0;c[L>>2]=M}h=d+4|0;f=c[h>>2]|0;if(!f)p=0;else{c[g>>2]=f;p=c[N>>2]|0;g=c[P>>2]|0;c[O>>2]=f;c[O+4>>2]=g;Db(p,38455,O);c[h>>2]=0;p=1}c[P>>2]=j;i=d+8|0;j=c[i>>2]|0;if((j|0?(c[d+36>>2]|0)>0:0)?(a[d+18>>0]|0)==0:0){k=c[j>>2]|0;kb(k,j);l=c[j+4>>2]|0;f=j+8|0;h=c[f>>2]|0;if(!l)c[k+4>>2]=h;else{c[l+8>>2]=h;h=c[f>>2]|0}if(h|0)c[h+4>>2]=l;c[j+20>>2]=1443283912;c[j>>2]=0;do if(k){if(c[k+480>>2]|0){Xd(k,j);break}P=j;if((c[k+304>>2]|0)>>>0<=P>>>0?(c[k+308>>2]|0)>>>0>P>>>0:0){P=k+300|0;c[j>>2]=c[P>>2];c[P>>2]=j}else Q=113}else Q=113;while(0);do if((Q|0)==113)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{Q=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}if(!(a[d+18>>0]|0)){h=d+108|0;f=c[h>>2]|0;do if(f|0){if(c[S+480>>2]|0){Xd(S,f);break}Q=f;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[f>>2]=c[Q>>2];c[Q>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[h>>2]=0;c[d+104>>2]=0}h=c[d+252>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=d+200|0;h=a[f>>0]|0;if(!(h<<24>>24)){h=c[d+228>>2]|0;do if(h|0){if(c[S+480>>2]|0){Vi(S,h);break}P=h+32|0;Q=(c[P>>2]|0)+-1|0;c[P>>2]=Q;if(!Q)Vi(S,h)}while(0);h=a[f>>0]|0}do if((h&255)<=1?(R=c[d+236>>2]|0,R|0):0){Xi(S,c[R+28>>2]|0);h=c[R>>2]|0;do if(h|0){if(c[S+480>>2]|0){Xd(S,h);break}Q=h;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[R+4>>2]|0;do if(h|0){if(c[S+480>>2]|0){Xd(S,h);break}Q=h;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[R+12>>2]|0;if(h|0)ni(S,h);h=c[R+16>>2]|0;i:do if(h){k=h+4|0;f=c[h>>2]|0;if((c[k>>2]|0)>0){l=S+480|0;m=S+304|0;n=S+308|0;o=S+300|0;j=0;do{f=c[f+(j<<3)>>2]|0;j:do if(f|0){if(c[l>>2]|0){Xd(S,f);break}i=f;do if((c[m>>2]|0)>>>0<=i>>>0){if((c[n>>2]|0)>>>0<=i>>>0)break;c[f>>2]=c[o>>2];c[o>>2]=f;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);j=j+1|0;f=c[h>>2]|0}while((j|0)<(c[k>>2]|0))}k:do if(f){do if(S|0){i=S+480|0;if(!(c[i>>2]|0)){j=f;if((c[S+304>>2]|0)>>>0>j>>>0)break;if((c[S+308>>2]|0)>>>0<=j>>>0)break;Q=S+300|0;c[f>>2]=c[Q>>2];c[Q>>2]=f}else Xd(S,f);f=i;Q=187;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Q=185;break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Q=185;break}}else Q=185;while(0);do if((Q|0)==185){if(!S)break;f=S+480|0;Q=187}while(0);do if((Q|0)==187){if(c[f>>2]|0){Xd(S,h);Q=196;break i}f=h;if((c[S+304>>2]|0)>>>0>f>>>0)break;if((c[S+308>>2]|0)>>>0<=f>>>0)break;Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;Q=196;break i}while(0);do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{P=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);if(!S)h=R;else{h=R;Q=198}}else Q=196;while(0);if((Q|0)==196){h=R;Q=198}if((Q|0)==198){if(c[S+480>>2]|0){Xd(S,h);break}Q=R;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[R>>2]=c[Q>>2];c[Q>>2]=R;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);n=c[d+268>>2]|0;do if(n|0){l:do if((c[n>>2]|0)>0){j=S+480|0;k=S+304|0;l=S+308|0;m=S+300|0;if(!S){f=0;while(1){h=c[n+8+(f<<4)+4>>2]|0;if(h|0)ri(0,h);h=c[n+8+(f<<4)+8>>2]|0;if(h|0)pi(0,h,1);h=c[n+8+(f<<4)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=f+1|0;if((f|0)>=(c[n>>2]|0))break l}}i=0;do{h=c[n+8+(i<<4)+4>>2]|0;if(h|0)ri(S,h);h=c[n+8+(i<<4)+8>>2]|0;if(h|0)pi(S,h,1);h=c[n+8+(i<<4)>>2]|0;m:do if(h|0){if(c[j>>2]|0){Xd(S,h);break}f=h;do if((c[k>>2]|0)>>>0<=f>>>0){if((c[l>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[m>>2];c[m>>2]=h;break m}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0}while((i|0)<(c[n>>2]|0))}while(0);if(S|0){if(c[S+480>>2]|0){Xd(S,n);break}R=n;if((c[S+304>>2]|0)>>>0<=R>>>0?(c[S+308>>2]|0)>>>0>R>>>0:0){R=S+300|0;c[n>>2]=c[R>>2];c[R>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{R=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);h=c[d+216>>2]|0;do if(h|0){if(S|0){if(c[S+480>>2]|0){Xd(S,h);break}R=h;if((c[S+304>>2]|0)>>>0<=R>>>0?(c[S+308>>2]|0)>>>0>R>>>0:0){R=S+300|0;c[h>>2]=c[R>>2];c[R>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);m=d+112|0;h=c[m>>2]|0;n:do if(h|0){i=S+480|0;j=S+304|0;k=S+308|0;l=S+300|0;if(!S)while(1){c[m>>2]=c[h>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[m>>2]|0;if(!h)break n}do{c[m>>2]=c[h>>2];o:do if(!(c[i>>2]|0)){f=h;do if((c[j>>2]|0)>>>0<=f>>>0){if((c[k>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[l>>2];c[l>>2]=h;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(S,h);while(0);h=c[m>>2]|0}while((h|0)!=0)}while(0);i=d+256|0;h=c[i>>2]|0;if(!h){S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}f=S+480|0;if(!S){do{f=c[h+76>>2]|0;c[i>>2]=f;d=h+32|0;S=(c[d>>2]|0)+-1|0;c[d>>2]=S;if(!S){Vi(0,h);h=c[i>>2]|0}else h=f}while((h|0)!=0);S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}do{c[i>>2]=c[h+76>>2];if(!((c[f>>2]|0)==0?(R=h+32|0,d=(c[R>>2]|0)+-1|0,c[R>>2]=d,(d|0)!=0):0))Vi(S,h);h=c[i>>2]|0}while((h|0)!=0);S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}function vd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+48|0;f=i+32|0;h=i+16|0;g=i;c[g>>2]=e;do if((d|0)==1){d=c[b+352>>2]|0;if(!d){c[h>>2]=58063;c[h+4>>2]=135531;c[h+8>>2]=31517;Db(21,32001,h);break}b=(c[g>>2]|0)+(4-1)&~(4-1);h=c[b>>2]|0;c[g>>2]=b+4;a[(c[d>>2]|0)+16>>0]=h;h=0;Ra=i;return h|0}else{c[f>>2]=58063;c[f+4>>2]=135539;c[f+8>>2]=31517;Db(21,32001,f)}while(0);c[b+64>>2]=21;Ne(b,21);h=21;Ra=i;return h|0}function wd(d){d=d|0;var f=0,g=0,h=0;a:do if(!d)f=ob(40,0)|0;else{if(c[d+272>>2]|0){if(a[d+81>>0]|0){d=0;return d|0}}else{do if((e[d+276>>1]|0)>=40){g=d+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];h=d+284|0;c[h>>2]=(c[h>>2]|0)+1;break a}g=d+296|0;f=c[g>>2]|0;if(!f){f=d+292|0;break}else{c[g>>2]=c[f>>2];h=d+284|0;c[h>>2]=(c[h>>2]|0)+1;break a}}else f=d+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(d,40,0)|0}while(0);if(!f){d=0;return d|0}g=f;h=g+40|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));b[f+8>>1]=1;c[f+32>>2]=d;d=f;return d|0}function xd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+48|0;g=h+40|0;f=h+32|0;e=h+16|0;d=h;if(c[7380]|0){c[e>>2]=58063;c[e+4>>2]=154986;c[e+8>>2]=31517;Db(21,32001,e);b=21;Ra=h;return b|0}c[d>>2]=b;do switch(a|0){case 4:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7335]=c[a>>2];c[7336]=c[a+4>>2];c[7337]=c[a+8>>2];c[7338]=c[a+12>>2];c[7339]=c[a+16>>2];c[7340]=c[a+20>>2];c[7341]=c[a+24>>2];c[7342]=c[a+28>>2];a=0;break}case 5:{if(!(c[7335]|0)){c[f>>2]=30308;xd(4,f)|0}b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=c[7335];c[a+4>>2]=c[7336];c[a+8>>2]=c[7337];c[a+12>>2]=c[7338];c[a+16>>2]=c[7339];c[a+20>>2]=c[7340];c[a+24>>2]=c[7341];c[a+28>>2]=c[7342];a=0;break}case 9:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7324]=a;a=0;break}case 27:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7329]=a;a=0;break}case 7:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7374]=a;a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7375]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7376]=a;a=0;break}case 24:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=160;a=0;break}case 14:{a=0;break}case 15:{a=1;break}case 18:{a=(c[d>>2]|0)+(4-1)&~(4-1);e=c[a>>2]|0;c[d>>2]=a+4;a=29408;d=e;e=a+52|0;do{c[a>>2]=c[d>>2];a=a+4|0;d=d+4|0}while((a|0)<(e|0));a=0;break}case 19:{if(!(c[7354]|0)){c[g>>2]=30340;xd(18,g)|0}e=(c[d>>2]|0)+(4-1)&~(4-1);a=c[e>>2]|0;c[d>>2]=e+4;d=29408;e=a+52|0;do{c[a>>2]=c[d>>2];a=a+4|0;d=d+4|0}while((a|0)<(e|0));a=0;break}case 13:{a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7332]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7333]=a;a=0;break}case 16:{a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7387]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7388]=a;a=0;break}case 17:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7327]=a;a=0;break}case 20:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7328]=a;a=0;break}case 22:{c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;c[7370]=0;c[7371]=0;c[7372]=0;c[7373]=0;a=0;break}case 25:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7379]=a;a=0;break}case 26:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7334]=a;a=0;break}default:a=1}while(0);b=a;Ra=h;return b|0}function yd(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;h=n;c[h>>2]=f;do switch(e|0){case 1e3:{l=(c[h>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[h>>2]=l+4;c[c[b+16>>2]>>2]=m;m=0;Ra=n;return m|0}case 1001:{j=(c[h>>2]|0)+(4-1)&~(4-1);k=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);m=c[j>>2]|0;c[h>>2]=j+4;m=zd(b,k,l,m)|0;Ra=n;return m|0}case 1002:{k=0;break}case 1003:{k=1;break}case 1004:{k=2;break}case 1005:{k=3;break}case 1006:{k=4;break}case 1007:{k=5;break}case 1008:{k=6;break}case 1009:{k=7;break}case 1010:{k=8;break}case 1011:{k=9;break}default:{m=1;Ra=n;return m|0}}while(0);j=(c[h>>2]|0)+(4-1)&~(4-1);e=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[h>>2]=j+4;j=b+32|0;i=j;h=c[i>>2]|0;i=c[i+4>>2]|0;if((e|0)<=0)if(!e){e=h&~c[2208+(k<<3)+4>>2];f=i;m=17}else{e=h;f=i}else{e=h|c[2208+(k<<3)+4>>2];f=i;m=17}if((m|0)==17){m=j;c[m>>2]=e;c[m+4>>2]=f}if(!((h|0)==(e|0)&(i|0)==(f|0))?(g=c[b+4>>2]|0,g|0):0)do{m=g+149|0;b=(d[m>>0]|d[m+1>>0]<<8)&-4|1;a[m>>0]=b;a[m+1>>0]=b>>8;g=c[g+8>>2]|0}while((g|0)!=0);if(!l){m=0;Ra=n;return m|0}c[l>>2]=(0?1:(c[j>>2]&c[2208+(k<<3)+4>>2]|0)!=0)&1;m=0;Ra=n;return m|0}function zd(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d+296|0;h=c[q>>2]|0;if(!h)i=0;else{i=0;do{h=c[h>>2]|0;i=i+1|0}while((h|0)!=0)}p=d+300|0;h=c[p>>2]|0;if(!h)h=0;else{j=0;do{h=c[h>>2]|0;j=j+1|0}while((h|0)!=0);h=j}m=d+280|0;if(((c[m>>2]|0)-(h+i)|0)>0){e=5;return e|0}n=d+272|0;o=d+278|0;do if(a[o>>0]|0?(k=c[d+304>>2]|0,k|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=f&-8;k=(l|0)<5?0:l;i=(g|0)>0?g:0;if(!((g|0)<1|(k|0)==0))if(!e){h=Yv(k|0,((k|0)<0)<<31>>31|0,i|0,0)|0;g=Sv(h|0,L()|0,-1,-1)|0;f=L()|0;do if(!(f>>>0>0|(f|0)==0&g>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](h)|0;break}f=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){g=c[14978]|0;j=Tv(h|0,j|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=g>>>0)&1}j=Wa[c[29340>>2]&127](f)|0;if(j){h=Wa[c[29352>>2]&127](j)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else j=0}else j=0;while(0);if(!j)h=0;else{h=j;i=(Wa[c[29352>>2]&127](j)|0)/(l|0)|0}}else h=e;else{h=0;k=0}j=d+304|0;c[j>>2]=h;c[q>>2]=0;c[p>>2]=0;b[d+276>>1]=k;if(!h){c[j>>2]=d;c[d+308>>2]=d;c[n>>2]=1;a[o>>0]=0;c[m>>2]=0;e=0;return e|0}c[m>>2]=i;if((i|0)>0){j=0;while(1){c[h>>2]=j;f=h+k|0;j=h;if((i|0)<=1)break;else{h=f;i=i+-1|0}}c[q>>2]=h;h=f}c[d+308>>2]=h;c[n>>2]=0;a[o>>0]=(e|0)==0&1;e=0;return e|0}function Ad(a){a=a|0;return c[a+100>>2]|0}function Bd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;o=p+24|0;g=p+8|0;f=p;if(!b){o=0;Ra=p;return o|0}n=b+96|0;e=c[n>>2]|0;a:do if((e|0)>=-264537850)if((e|0)<1266094736)switch(e|0){case -264537850:break a;default:{h=3;break a}}else switch(e|0){case 1266094736:break a;default:{h=3;break a}}else switch(e|0){case -1607883113:break;default:h=3}while(0);if((h|0)==3){c[f>>2]=50924;Db(21,38253,f);c[g>>2]=58063;c[g+4>>2]=155713;c[g+8>>2]=31517;Db(21,32001,g);o=21;Ra=p;return o|0}if(!(a[b+88>>0]&8)){Bp(b);e=b+356|0;k=c[e>>2]|0;if(k|0){c[e>>2]=0;i=b+332|0;if((c[i>>2]|0)>0){h=0;do{j=c[k+(h<<2)>>2]|0;g=j+8|0;e=c[g>>2]|0;if(e|0?(m=c[(c[e>>2]|0)+68>>2]|0,m|0):0)Wa[m&127](e)|0;c[j+20>>2]=0;f=c[j>>2]|0;e=j+12|0;l=(c[e>>2]|0)+-1|0;c[e>>2]=l;do if(!l){e=c[g>>2]|0;if(e|0)Wa[c[(c[e>>2]|0)+16>>2]&127](e)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,j);break}l=j;if((c[f+304>>2]|0)>>>0<=l>>>0?(c[f+308>>2]|0)>>>0>l>>>0:0){l=f+300|0;c[j>>2]=c[l>>2];c[l>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);h=h+1|0}while((h|0)<(c[i>>2]|0))}do if(!(c[b+480>>2]|0)){m=k;if((c[b+304>>2]|0)>>>0<=m>>>0?(c[b+308>>2]|0)>>>0>m>>>0:0){m=b+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(b,k);while(0);c[i>>2]=0}}else{Za[c[b+196>>2]&127](8,c[b+200>>2]|0,b,0)|0;Bp(b);e=b+356|0;k=c[e>>2]|0;if(k|0){c[e>>2]=0;i=b+332|0;if((c[i>>2]|0)>0){h=0;do{j=c[k+(h<<2)>>2]|0;f=j+8|0;e=c[f>>2]|0;if(e|0?(l=c[(c[e>>2]|0)+68>>2]|0,l|0):0)Wa[l&127](e)|0;c[j+20>>2]=0;g=c[j>>2]|0;e=j+12|0;m=(c[e>>2]|0)+-1|0;c[e>>2]=m;do if(!m){e=c[f>>2]|0;if(e|0)Wa[c[(c[e>>2]|0)+16>>2]&127](e)|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}m=j;if((c[g+304>>2]|0)>>>0<=m>>>0?(c[g+308>>2]|0)>>>0>m>>>0:0){m=g+300|0;c[j>>2]=c[m>>2];c[m>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{m=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);h=h+1|0}while((h|0)<(c[i>>2]|0))}do if(!(c[b+480>>2]|0)){m=k;if((c[b+304>>2]|0)>>>0<=m>>>0?(c[b+308>>2]|0)>>>0>m>>>0:0){m=b+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(b,k);while(0);c[i>>2]=0}}b:do if(!d){c:do if(!(c[b+4>>2]|0)){f=c[b+20>>2]|0;if((f|0)<=0)break b;g=c[b+16>>2]|0;e=0;while(1){d=c[g+(e<<4)+4>>2]|0;if(d|0?c[d+16>>2]|0:0)break c;e=e+1|0;if((e|0)>=(f|0))break b}}while(0);Vb(b,5,50150,o);o=5;Ra=p;return o|0}while(0);c[n>>2]=1691352191;fc(b);o=0;Ra=p;return o|0}function Cd(a){a=a|0;return Bd(a,1)|0}function Dd(a,b,d){a=a|0;b=b|0;d=d|0;if(((b*1e3|0)+1e3|0)>(c[a+448>>2]|0)){d=0;return d|0}d=c[a>>2]|0;Xa[c[d+60>>2]&255](d,1e6)|0;d=1;return d|0}function Ed(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;d=Hd(b,d,e,f,g,h,i,j,0,0,0)|0;if((d|0)==3082|(a[b+81>>0]|0)!=0){og(b);b=7;return b|0}else{b=c[b+68>>2]&d;return b|0}return 0}function Fd(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0;do if(l){m=ob(12,0)|0;if(!m){Fc(a);ab[l&127](f);b=1;break}c[m>>2]=0;c[m+4>>2]=l;c[m+8>>2]=f;b=Hd(a,b,d,e,f,g,h,i,j,k,m)|0;if(!(c[m>>2]|0)){ab[l&127](f);qb(m)}}else b=Hd(a,b,d,e,f,g,h,i,j,k,0)|0;while(0);return ic(a,b)|0}function Gd(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return Fd(a,b,c,d,e,f,g,h,0,0,i)|0}function Hd(b,e,f,g,h,i,j,k,l,m,n){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+32|0;p=s+16|0;o=s;if((((e|0?(r=(i|0)!=0,!(r&(k|0)!=0)):0)?!((j|0)==0^(k|0)==0):0)?!((f+1|0)>>>0>128|(l|0)==0^(m|0)==0):0)?((Eu(e)|0)&1073741568|0)==0:0){q=g&2048;switch(g&7){case 4:{o=2;break}case 5:{o=Hd(b,e,f,q|1,h,i,j,k,l,m,n)|0;if(o|0){m=o;Ra=s;return m|0}o=Hd(b,e,f,q|2,h,i,j,k,l,m,n)|0;if(!o)o=3;else{m=o;Ra=s;return m|0}break}default:o=g&7}g=o&255;t=Jd(b,e,f,g,0)|0;if((t|0?(c[t+4>>2]&3|0)==(o|0):0)?(a[t>>0]|0)==(f|0):0){if(c[b+168>>2]|0){Vb(b,5,50805,p);t=5;Ra=s;return t|0}o=c[b+4>>2]|0;if(o|0)do{t=o+149|0;p=(d[t>>0]|d[t+1>>0]<<8)&-4|1;a[t>>0]=p;a[t+1>>0]=p>>8;o=c[o+8>>2]|0}while((o|0)!=0)}o=Jd(b,e,f,g,1)|0;if(!o){t=7;Ra=s;return t|0}g=o+36|0;p=c[g>>2]|0;do if(p|0?(t=(c[p>>2]|0)+-1|0,c[p>>2]=t,(t|0)==0):0){ab[c[p+4>>2]&127](c[p+8>>2]|0);if(b|0){if(c[b+480>>2]|0){Xd(b,p);break}t=p;if((c[b+304>>2]|0)>>>0<=t>>>0?(c[b+308>>2]|0)>>>0>t>>>0:0){t=b+300|0;c[p>>2]=c[t>>2];c[t>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{t=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);if(n|0)c[n>>2]=(c[n>>2]|0)+1;c[g>>2]=n;t=o+4|0;c[t>>2]=c[t>>2]&3|q;c[o+16>>2]=r?i:j;c[o+20>>2]=k;c[o+24>>2]=l;c[o+28>>2]=m;c[o+8>>2]=h;a[o>>0]=f;t=0;Ra=s;return t|0}c[o>>2]=58063;c[o+4>>2]=156338;c[o+8>>2]=31517;Db(21,32001,o);t=21;Ra=s;return t|0}function Id(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;if(Jd(b,d,e,1,0)|0){b=0;Ra=j;return b|0}i=Bb(d,j)|0;if(!i){b=7;Ra=j;return b|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](12)|0;if(!f)h=14;else{g=f;h=23}}else{f=Wa[c[29356>>2]&127](12)|0;if((c[14985]|0)>>>0<12)c[14985]=12;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){k=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=k>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(g){f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;h=23}else h=23}else h=14}do if((h|0)==14){f=b+81|0;if((a[f>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[f>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;f=b+272|0;c[f>>2]=(c[f>>2]|0)+1;f=c[b+236>>2]|0;if(f|0)c[f+12>>2]=7}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);f=1;break}else{f=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);f=1;break}}else if((h|0)==23){c[g>>2]=0;c[g+4>>2]=90;c[g+8>>2]=i;f=Hd(b,d,e,1,i,174,0,0,0,0,g)|0;if(!(c[g>>2]|0)){if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{k=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);if((f|0)==3082|(a[b+81>>0]|0)!=0){og(b);k=7;Ra=j;return k|0}else{k=c[b+68>>2]&f;Ra=j;return k|0}return 0}function Jd(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!f)t=0;else t=(Eu(f)|0)&1073741823;u=b+364|0;m=c[b+376>>2]|0;if(!m){k=b+368|0;j=b+372|0}else{k=a[f>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=f;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[u>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;a:do if(!k)j=59292;else{o=d[208+(d[f>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;n=a[m>>0]|0;l=(d[208+(n&255)>>0]|0)-o|0;if(!(n<<24>>24==0|(l|0)!=0)){n=f;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0))}if(!l)break a;if(!k){j=59292;break}}}while(0);j=c[j+8>>2]|0;b:do if(!j){l=0;j=0}else{o=h&255;if((g|0)==-2){l=0;k=0;while(1){o=(c[j+16>>2]|0)==0?0:6;v=(o|0)>(k|0);k=v?o:k;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;break b}}}l=0;n=0;while(1){v=a[j>>0]|0;k=v<<24>>24;do if(!(v<<24>>24>-1&(k|0)!=(g|0))){k=(k|0)==(g|0)?4:1;m=c[j+4>>2]|0;if((m&3|0)==(o|0)){k=k|2;break}else{k=((m&o)>>>1&1)+k|0;break}}else k=0;while(0);v=(k|0)>(n|0);k=v?k:n;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;break}else n=k}}while(0);c:do if(!(i<<24>>24)){if(l|0?(c[b+24>>2]&2|0)==0:0){q=l;r=0;o=94;break}o=d[208+(d[f>>0]|0)>>0]|0;j=c[59088+((((t+o|0)>>>0)%23|0)<<2)>>2]|0;if(j){while(1){m=c[j+32>>2]|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-o|0;if(!(v<<24>>24==0|(k|0)!=0)){n=f;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k)break;j=c[j+36>>2]|0;if(!j){j=0;o=46;break c}}if(!j){j=0;o=46}else{o=h&255;if((g|0)==-2){k=0;while(1){o=(c[j+16>>2]|0)==0?0:6;v=(o|0)>(k|0);k=v?o:k;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;o=46;break c}}}n=0;while(1){v=a[j>>0]|0;k=v<<24>>24;do if(!(v<<24>>24>-1&(k|0)!=(g|0))){k=(k|0)==(g|0)?4:1;m=c[j+4>>2]|0;if((m&3|0)==(o|0)){k=k|2;break}else{k=((m&o)>>>1&1)+k|0;break}}else k=0;while(0);v=(k|0)>(n|0);k=v?k:n;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;o=46;break}else n=k}}}else{p=l;s=0;o=93}}else o=46;while(0);d:do if((o|0)==46){k=i<<24>>24!=0;if(k&(j|0)<6){n=t+41|0;i=(b|0)==0;e:do if(i){v=Sv(n|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&v>>>0>2147483390)break d;if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](n)|0;o=71;break}j=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){v=c[14978]|0;m=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=v>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k)break d;j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;m=k}else m=k}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0)break d}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<n>>>0:0))){k=b+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=71;break e}k=b+296|0;j=c[k>>2]|0;if(!j){j=b+292|0;break}else{c[k>>2]=c[j>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=71;break e}}else j=b+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(b,n,0)|0;o=71}while(0);if((o|0)==71)if(!j)break;else m=j;gw(m|0,0,n|0)|0;j=m+40|0;l=m+32|0;c[l>>2]=j;a[m>>0]=g;c[m+4>>2]=h&255;ew(j|0,f|0,t+1|0)|0;k=a[j>>0]|0;if(k<<24>>24){do{a[j>>0]=a[208+(k&255)>>0]|0;j=j+1|0;k=a[j>>0]|0}while(k<<24>>24!=0);j=c[l>>2]|0}j=mi(u,j,m)|0;if((j|0)!=(m|0)){c[m+12>>2]=j;v=m;return v|0}do if(!i){if(c[b+480>>2]|0){Xd(b,m);break}v=m;if((c[b+304>>2]|0)>>>0<=v>>>0?(c[b+308>>2]|0)>>>0>v>>>0:0){v=b+300|0;c[m>>2]=c[v>>2];c[v>>2]=m}else o=83}else o=83;while(0);do if((o|0)==83)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{v=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);j=b+81|0;if(a[j>>0]|0){v=0;return v|0}if(a[b+82>>0]|0){v=0;return v|0}a[j>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;j=b+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[b+236>>2]|0;if(!j){v=0;return v|0}c[j+12>>2]=7;v=0;return v|0}else{p=l;s=k;o=93}}while(0);if((o|0)==93?p|0:0){q=p;r=s;o=94}if((o|0)==94?r|(c[q+16>>2]|0)!=0:0){v=q;return v|0}v=0;return v|0}function Kd(a,b,d){a=a|0;b=b|0;d=d|0;d=Ra;Ra=Ra+16|0;b=d;c[b>>2]=c[(c[a+4>>2]|0)+8>>2];b=Bb(50868,b)|0;c[a+20>>2]=1;yc(c[a>>2]|0,b,-1,1,-1)|0;if(!b){Ra=d;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=d;return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=d;return}}function Ld(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)>(d|0))return 0;Md(b,c,0,0,0)|0;return 0}function Md(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+16|0;o=q;if(g|0)c[g>>2]=-1;if(h|0)c[h>>2]=-1;if(f>>>0>3){b=21;Ra=q;return b|0}if((e|0)!=0?(i=a[e>>0]|0,i<<24>>24!=0):0){n=c[b+20>>2]|0;j=n+-1|0;a:do if((n|0)>0){n=208+(i&255)|0;i=j;m=(c[b+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[n>>0]|0)|0;if(!(l<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!i)break;j=i+-1|0;if((i|0)>0){i=j;m=m+-16|0}else{i=j;break a}}i=109-(d[n>>0]|0)|0;if(!i){j=e;k=50919;do{k=k+1|0;j=j+1|0;r=a[k>>0]|0;i=(d[208+(r&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(i|0)!=0))}i=((i|0)!=0)<<31>>31}else i=j;while(0);if((i|0)<0){c[o>>2]=e;Vb(b,1,31432,o);i=1}else p=23}else{i=10;p=23}do if((p|0)==23){c[b+404>>2]=0;i=Nd(b,i,f,g,h)|0;c[b+64>>2]=i;if(i|0){Ne(b,i);break}if(!(c[b+260>>2]|0))i=0;else{Ne(b,0);i=0}}while(0);if((i|0)==3082|(a[b+81>>0]|0)!=0){og(b);i=7}else i=c[b+68>>2]&i;if(c[b+168>>2]|0){r=i;Ra=q;return r|0}c[b+264>>2]=0;r=i;Ra=q;return r|0}function Nd(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+20|0;k=c[o>>2]|0;if((k|0)<=0){n=0;o=0;f=1;n=(n|0)!=0;n=f&n;o=n?5:o;return o|0}n=b+16|0;m=(f|0)==0;if((e|0)==10){b=c[(c[n>>2]|0)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){i=c[i>>2]|0;j=c[i+216>>2]|0;if(!j)b=0;else{if(m)b=0;else b=c[i+176>>2]|0;b=Qf(j,l,f,b,c[i+180>>2]|0,d[i+11>>0]|0,c[i+152>>2]|0,c[i+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;j=(b|0)==5;i=j?0:b;j=j&1;b=(i|0)==0;if(!(b&(k|0)>1)){n=j;o=i;f=b;n=(n|0)!=0;n=f&n;o=n?5:o;return o|0}h=1;do{b=c[(c[n>>2]|0)+(h<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;g=c[b>>2]|0;c[i+4>>2]=g;if(!(a[i+20>>0]|0)){i=c[i>>2]|0;l=c[i+216>>2]|0;if(!l)b=0;else{if(m)b=0;else b=c[i+176>>2]|0;b=Qf(l,g,f,b,c[i+180>>2]|0,d[i+11>>0]|0,c[i+152>>2]|0,c[i+208>>2]|0,0,0)|0;k=c[o>>2]|0}}else b=6}else b=0;e=(b|0)==5;i=e?0:b;j=e?1:j;h=h+1|0;b=(i|0)==0}while(b&(h|0)<(k|0));o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}if(m){m=0;j=0;while(1){if((m|0)==(e|0)){b=c[(c[n>>2]|0)+(e<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){b=c[i>>2]|0;i=c[b+216>>2]|0;if(!i)b=0;else{b=Qf(i,l,0,0,c[b+180>>2]|0,d[b+11>>0]|0,c[b+152>>2]|0,c[b+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;i=(b|0)==5;j=i?1:j;i=i?0:b;l=0;g=0}else{i=0;l=h}m=m+1|0;b=(i|0)==0;if(!(b&(m|0)<(k|0)))break;else h=l}o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}else{m=0;j=0;while(1){if((m|0)==(e|0)){b=c[(c[n>>2]|0)+(e<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){b=c[i>>2]|0;i=c[b+216>>2]|0;if(!i)b=0;else{b=Qf(i,l,f,c[b+176>>2]|0,c[b+180>>2]|0,d[b+11>>0]|0,c[b+152>>2]|0,c[b+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;i=(b|0)==5;j=i?1:j;i=i?0:b;l=0;g=0}else{i=0;l=h}m=m+1|0;b=(i|0)==0;if(!(b&(m|0)<(k|0)))break;else h=l}o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}return 0}function Od(a,b){a=a|0;b=b|0;return Pd(a,b,6,0)|0}function Pd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=Ra;Ra=Ra+128|0;F=H+88|0;E=H+80|0;z=H+64|0;y=H+56|0;x=H+48|0;v=H+32|0;u=H+24|0;t=H+16|0;q=H;w=H+112|0;r=H+104|0;G=H+108|0;s=H+100|0;c[r>>2]=f;c[G>>2]=0;c[s>>2]=0;c[e>>2]=0;h=mb()|0;if(h|0){G=h;Ra=H;return G|0}if((f&32768|0)==0&(c[7325]|0)!=0)k=(f&65536|0)==0?c[7326]|0:1;else k=0;if(!(f&262144)){if(c[7378]|0){f=f|131072;c[r>>2]=f}}else{f=f&-131073;c[r>>2]=f}p=f&-655129;c[r>>2]=p;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](488)|0;if(!h){h=0;B=148}else B=19}else{h=Wa[c[29356>>2]&127](488)|0;if((c[14985]|0)>>>0<488)c[14985]=488;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){D=c[14978]|0;C=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;B=L()|0;c[14768]=((B|0)<0|(B|0)==0&C>>>0<=D>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(h){i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;B=19}else B=19}else{h=0;B=148}}a:do if((B|0)==19){gw(h|0,0,488)|0;if(k|0)c[h+12>>2]=8;C=h+68|0;c[C>>2]=255;c[h+20>>2]=2;D=h+96|0;c[D>>2]=-264537850;n=h+16|0;c[n>>2]=h+412;o=h+272|0;c[o>>2]=1;i=h+108|0;j=2288;k=i+44|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[h+152>>2]=0;a[h+79>>0]=1;a[h+84>>0]=-1;m=29480;A=c[m+4>>2]|0;i=h+48|0;c[i>>2]=c[m>>2];c[i+4>>2]=A;c[h+92>>2]=0;c[h+156>>2]=2147483647;i=h+32|0;c[i>>2]=295008;c[i+4>>2]=0;i=h+380|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;A=h+336|0;c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;Qd(h,34049,1,0,78,0)|0;Qd(h,34049,3,0,78,0)|0;Qd(h,34049,2,0,78,0)|0;Qd(h,43602,1,0,79,0)|0;Qd(h,50932,1,1,78,0)|0;A=h+81|0;b:do if(!(a[A>>0]|0)){k=c[h+392>>2]|0;if(!k){j=h+384|0;i=h+388|0}else{i=783505461%((c[i>>2]|0)>>>0)|0;j=k+(i<<3)|0;i=k+(i<<3)+4|0}j=c[j>>2]|0;c:do if(!j)i=59292;else while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)+-98|0;if(!(m<<24>>24==0|(k|0)!=0)){m=34049;do{l=l+1|0;m=m+1|0;I=a[l>>0]|0;k=(d[208+(I&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(I<<24>>24==0|(k|0)!=0))}if(!k)break c;if(!j){i=59292;break}}while(0);c[h+8>>2]=c[i+8>>2];c[h+60>>2]=p;d:do if(!(1<<(f&7)&70)){c[q>>2]=58063;c[q+4>>2]=157776;c[q+8>>2]=31517;Db(21,32001,q);i=21}else{i=dn(g,b,r,h,G,s)|0;switch(i|0){case 0:break;case 7:{if(a[A>>0]|0){i=7;break d}if(a[h+82>>0]|0){i=7;break d}a[A>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;f=c[h+236>>2]|0;if(!f){i=7;break d}c[f+12>>2]=7;i=7;break d}default:break d}f=Pe(c[h>>2]|0,c[G>>2]|0,h,(c[n>>2]|0)+4|0,0,c[r>>2]|256)|0;e:do if((f|0)<3082){switch(f|0){case 0:break;default:{B=46;break e}}f=c[(c[n>>2]|0)+4>>2]|0;c[(c[f+4>>2]|0)+4>>2]=c[f>>2];f=en(h,f)|0;c[(c[n>>2]|0)+12>>2]=f;if(!(a[A>>0]|0))a[h+78>>0]=a[f+77>>0]|0;B=en(h,0)|0;I=c[n>>2]|0;c[I+28>>2]=B;c[I>>2]=50919;a[I+8>>0]=3;c[I+16>>2]=31427;a[I+24>>0]=1;c[D>>2]=-1607883113;if(a[A>>0]|0){B=148;break a}p=h+64|0;c[p>>2]=0;if(c[h+260>>2]|0)Ne(h,0);do if((Id(h,50938,2)|0)==7?(a[A>>0]|0)==0:0){if(a[h+82>>0]|0)break;a[A>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;f=c[h+236>>2]|0;if(!f)break;c[f+12>>2]=7}while(0);f=c[D>>2]|0;f:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:{B=62;break f}default:{B=61;break f}}else switch(f|0){case 1266094736:{B=62;break f}default:{B=61;break f}}else switch(f|0){case -1607883113:{B=62;break}default:B=61}while(0);g:do if((B|0)==61){c[u>>2]=50924;Db(21,38253,u);c[v>>2]=58063;c[v+4>>2]=157091;c[v+8>>2]=31517;Db(21,32001,v);f=21;B=142}else if((B|0)==62){if(a[A>>0]|0){f=7;B=142;break}f=c[C>>2]&c[p>>2];if(f|0){B=142;break}h:do if(0){f=1;k=0;i=0;do{j=c[0+(k<<2)>>2]|0;c[w>>2]=0;if(j){i=Ya[j&127](h,w,0)|0;if(i){c[x>>2]=c[w>>2];Vb(h,i,50944,x);f=0}i=c[w>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);if(!f)break h;else i=0}k=k+1|0}while(k>>>0<i>>>0)}while(0);f=c[D>>2]|0;i:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:break i;default:{B=78;break i}}else switch(f|0){case 1266094736:break i;default:{B=78;break i}}else switch(f|0){case -1607883113:break;default:B=78}while(0);if((B|0)==78){c[y>>2]=50924;Db(21,38253,y);c[z>>2]=58063;c[z+4>>2]=157091;c[z+8>>2]=31517;Db(21,32001,z);break b}if(a[A>>0]|0)break b;if(c[C>>2]&c[p>>2]|0)break b;f=rd(h,51142,30516,0)|0;if(f|0){B=142;break}if(mb()|0){f=7;B=142;break}do if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](20)|0;if(!f){f=7;B=142;break g}else i=f}else{f=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){I=c[14978]|0;z=Tv(i|0,j|0,f|0,((f|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&z>>>0<=I>>>0)&1}i=Wa[c[29340>>2]&127](f)|0;if(!i){f=7;B=142;break g}f=Wa[c[29352>>2]&127](i)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0<=(c[14987]|0)>>>0)break;c[14987]=f}while(0);a[i>>0]=1;m=i+1|0;a[m>>0]=1;n=i+4|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;do if(!(Ep(i,50983,7,30612)|0)){if(Ep(i,50990,7,30640)|0){f=7;B=111;break}if(Ep(i,50997,10,30488)|0){f=7;B=111;break}f=Hd(h,51007,1,5,i,175,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=111;break}f=c[C>>2]&f;if(f|0){B=111;break}f=Hd(h,51007,2,5,i,175,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=111;break}f=c[C>>2]&f;if(f|0){B=111;break}f=Id(h,51022,-1)|0;if(f|0){B=111;break}f=Id(h,51030,1)|0;if(f|0){B=111;break}f=Id(h,51038,1)|0;if(f|0){B=111;break}f=Id(h,51038,2)|0;if(f|0){B=111;break}f=Id(h,37598,1)|0;if(f|0){B=111;break}f=sd(h,51048,30392,i,91)|0;if(f|0){B=142;break g}f=sd(h,51053,30392,i,0)|0;if(f|0){B=142;break g}f=rd(h,55534,30668,i)|0}else{f=7;B=111}while(0);do if((B|0)==111){k=i+8|0;j=c[k>>2]|0;c[k>>2]=0;k=i+16|0;l=c[k>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[k>>2]=0;c[i+12>>2]=0;if(j|0)do{k=j;j=c[j>>2]|0;do if(a[m>>0]|0){l=c[k+12>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{I=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((j|0)!=0);c[n>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if((f|0)==0&(a[A>>0]|0)==0){f=Hd(h,55598,2,1,0,176,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=Hd(h,55608,1,1,0,177,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=Hd(h,55619,-1,1,0,178,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=sd(h,55630,30764,0,0)|0;if(f|0){B=142;break}f=sd(h,55636,30764,1,0)|0}if(f|0)B=142}while(0);if((B|0)==142){c[p>>2]=f;Ne(h,f)}zd(h,0,c[7332]|0,c[7333]|0)|0;c[h+240>>2]=76;c[h+244>>2]=1e3;break b}else switch(f|0){case 3082:{f=7;break}default:B=46}while(0);c[h+64>>2]=f;Ne(h,f);break b}while(0);f=c[s>>2]|0;I=(f|0)==0;c[t>>2]=f;Vb(h,i,I?0:31408,t);if(!I)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{I=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[D>>2]|0;j:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:{B=146;break j}default:{B=145;break j}}else switch(f|0){case 1266094736:{B=146;break j}default:{B=145;break j}}else switch(f|0){case -1607883113:{B=146;break}default:B=145}while(0);if((B|0)==145){c[E>>2]=50924;Db(21,38253,E);c[F>>2]=58063;c[F+4>>2]=157091;c[F+8>>2]=31517;Db(21,32001,F);f=21}else if((B|0)==146){if(a[A>>0]|0){B=148;break}f=c[C>>2]&c[h+64>>2];switch(f|0){case 7:{B=148;break a}case 0:break a;default:{}}}c[D>>2]=1266094736}while(0);if((B|0)==148){Bd(h,0)|0;f=7;h=0}c[e>>2]=h;h=c[G>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{I=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);I=f&255;Ra=H;return I|0}function Qd(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=Ra;Ra=Ra+32|0;k=t+16|0;j=t;s=f&255;switch(f<<24>>24){case 4:case 8:{r=2;break}default:if((s+-1|0)>>>0>2){c[j>>2]=58063;c[j+4>>2]=157148;c[j+8>>2]=31517;Db(21,32001,j);s=21;Ra=t;return s|0}else r=s}q=r&255;j=Zi(b,q,e,0)|0;if(j|0?c[j+12>>2]|0:0){if(c[b+168>>2]|0){Vb(b,5,57995,k);s=5;Ra=t;return s|0}f=c[b+4>>2]|0;if(f|0)do{p=f+149|0;o=(d[p>>0]|d[p+1>>0]<<8)&-4|1;a[p>>0]=o;a[p+1>>0]=o>>8;f=c[f+8>>2]|0}while((f|0)!=0);p=j+4|0;f=a[p>>0]|0;if((r|0)==(f&-9&255|0)){m=c[b+392>>2]|0;if(!m){k=b+384|0;j=b+388|0}else{k=a[e>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=e;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[b+380>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;a:do if(!k)j=59292;else{o=d[208+(d[e>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;n=a[m>>0]|0;l=(d[208+(n&255)>>0]|0)-o|0;if(!(n<<24>>24==0|(l|0)!=0)){n=e;do{m=m+1|0;n=n+1|0;u=a[m>>0]|0;l=(d[208+(u&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(l|0)!=0))}if(!l)break a;if(!k){j=59292;break}}}while(0);k=c[j+8>>2]|0;if((a[k+4>>0]|0)==f<<24>>24){j=c[k+16>>2]|0;if(j){ab[j&127](c[k+8>>2]|0);f=a[p>>0]|0}c[k+12>>2]=0}if((a[k+24>>0]|0)==f<<24>>24){j=c[k+36>>2]|0;if(j){ab[j&127](c[k+28>>2]|0);f=a[p>>0]|0}c[k+32>>2]=0}if((a[k+44>>0]|0)==f<<24>>24){f=c[k+56>>2]|0;if(f|0)ab[f&127](c[k+48>>2]|0);c[k+52>>2]=0}}}f=Zi(b,q,e,1)|0;if(!f){u=7;Ra=t;return u|0}c[f+12>>2]=h;c[f+8>>2]=g;c[f+16>>2]=i;a[f+4>>0]=r|s&8;c[b+64>>2]=0;if(!(c[b+260>>2]|0)){u=0;Ra=t;return u|0}Ne(b,0);u=0;Ra=t;return u|0}function Rd(e,f,g,h,i,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=Ra;Ra=Ra+16|0;y=z+8|0;w=z;x=z+12|0;c[x>>2]=0;r=e+20|0;n=c[r>>2]|0;t=e+16|0;q=c[t>>2]|0;if((n|0)>0){o=0;do{p=c[q+(o<<4)+4>>2]|0;if(p|0)c[(c[p+4>>2]|0)+4>>2]=c[p>>2];o=o+1|0}while((o|0)!=(n|0))}p=e+24|0;s=(c[p>>2]&1|0)==0;v=c[q+12>>2]|0;a[e+78>>0]=a[v+77>>0]|0;if(!(b[v+78>>1]&1)){n=eh(e,0,x,0)|0;if(!n){n=c[r>>2]|0;v=9}else v=16}else v=9;a:do if((v|0)==9){if((n|0)>1)do{o=n;n=n+-1|0;if((b[(c[(c[t>>2]|0)+(n<<4)+12>>2]|0)+78>>1]&1)==0?(u=eh(e,n,x,0)|0,u|0):0){n=u;v=16;break a}}while((o|0)>2);if(s)c[p>>2]=c[p>>2]&-2;u=Sd(e,g,f)|0;if((u|0)!=0?(c[u+12>>2]|0)==0:0){do if(h){f=b[u+42>>1]|0;t=f<<16>>16;b:do if(f<<16>>16>0){s=c[u+4>>2]|0;f=d[208+(d[h>>0]|0)>>0]|0;n=0;do{o=s+(n<<4)|0;q=c[o>>2]|0;r=a[q>>0]|0;p=(d[208+(r&255)>>0]|0)-f|0;if(!(r<<24>>24==0|(p|0)!=0)){r=h;do{q=q+1|0;r=r+1|0;A=a[q>>0]|0;p=(d[208+(A&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(p|0)!=0))}if(!p)break b;n=n+1|0}while((n|0)<(t|0))}else{n=0;o=0}while(0);if((n|0)==(t|0)){if(c[u+36>>2]&32|0){o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0;break a}r=a[h>>0]|0;q=d[208+(r&255)>>0]|0;n=q+-95|0;r=r<<24>>24==0;if(!(r|(n|0)!=0)){o=58070;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){n=q+-114|0;if(!(r|(n|0)!=0)){o=40352;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){n=q+-111|0;if(!(r|(n|0)!=0)){o=58078;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0;break a}}}A=b[u+40>>1]|0;n=A<<16>>16;if(A<<16>>16<=-1){q=0;n=1;s=0;r=0;p=31453;break}q=n;o=(c[u+4>>2]|0)+(n<<4)|0}else q=n;if(o){n=a[o+15>>0]|0;if(!(n&4))p=0;else{p=c[o>>2]|0;p=p+(Eu(p)|0)+1|0}r=c[o+8>>2]|0;o=(a[o+12>>0]|0)!=0&1;n=n&1;if((q|0)==(b[u+40>>1]|0)){q=(c[u+36>>2]|0)>>>3&1;s=o}else{q=0;s=o}}else{q=0;n=1;s=0;r=0;p=31453}}else{q=0;n=1;s=0;r=0;p=31453}while(0);o=0;t=q;f=n;r=(r|0)==0?34049:r;q=0}else{o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0}}while(0);if((v|0)==16){o=n;u=0;t=0;f=0;s=0;r=0;p=0;q=(n|0)!=0}if(i|0)c[i>>2]=p;if(j|0)c[j>>2]=r;if(k|0)c[k>>2]=s;if(l|0)c[l>>2]=f;if(m|0)c[m>>2]=t;n=c[x>>2]|0;if(!(q|(u|0)!=0)){do if(n|0){if(e|0){if(c[e+480>>2]|0){Xd(e,n);break}A=n;if((c[e+304>>2]|0)>>>0<=A>>>0?(c[e+308>>2]|0)>>>0>A>>>0:0){A=e+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[w>>2]=g;c[w+4>>2]=h;n=dd(e,31461,w)|0;c[x>>2]=n;o=1}c[y>>2]=n;Vb(e,o,(n|0)==0?0:31408,y);n=c[x>>2]|0;do if(n|0){if(e|0){if(c[e+480>>2]|0){Xd(e,n);break}A=n;if((c[e+304>>2]|0)>>>0<=A>>>0?(c[e+308>>2]|0)>>>0>A>>>0:0){A=e+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if((o|0)==3082|(a[e+81>>0]|0)!=0){og(e);A=7;Ra=z;return A|0}else{A=c[e+68>>2]&o;Ra=z;return A|0}return 0}function Sd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[a+20>>2]|0;l=(d|0)==0;e=a+16|0;if((k|0)<=0){a=b;while(1){if(Hb(a,34585)|0){h=0;a=18;break}if(!(Gb(d,c[(c[e>>2]|0)+16>>2]|0)|0))a=34855;else{h=0;a=18;break}}if((a|0)==18)return h|0}f=c[e>>2]|0;g=f+16|0;a:while(1){if(l){a=0;do{j=ji((c[f+((a^a>>>0<2)<<4)+12>>2]|0)+8|0,b)|0;if(j|0){a=16;break a}a=a+1|0}while((a|0)<(k|0))}else{a=0;do{e=a^a>>>0<2;if((Hb(d,c[f+(e<<4)>>2]|0)|0)==0?(i=ji((c[f+(e<<4)+12>>2]|0)+8|0,b)|0,i|0):0){a=17;break a}a=a+1|0}while((a|0)<(k|0))}if(Hb(b,34585)|0){h=0;a=18;break}if(!(Gb(d,c[g>>2]|0)|0))b=34855;else{h=0;a=18;break}}if((a|0)==16){l=j;return l|0}else if((a|0)==17){l=i;return l|0}else if((a|0)==18)return h|0;return 0}function Td(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(e){j=c[b+20>>2]|0;g=j+-1|0;a:do if((j|0)>0){f=g;j=(c[b+16>>2]|0)+(g<<4)|0;while(1){h=c[j>>2]|0;if(h|0){i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=e;do{h=h+1|0;i=i+1|0;k=a[h>>0]|0;g=(d[208+(k&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(g|0)!=0))}if(!g)break a}if(!f)break;g=f+-1|0;if((f|0)>0){f=g;j=j+-16|0}else{f=g;break a}}f=109-(d[208+(d[e>>0]|0)>>0]|0)|0;if(!f){g=50919;do{g=g+1|0;e=e+1|0;k=a[g>>0]|0;f=(d[208+(k&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(f|0)!=0))}f=((f|0)!=0)<<31>>31}else f=g;while(0);if((f|0)<0){k=0;return k|0}}else f=0;k=c[(c[b+16>>2]|0)+(f<<4)+4>>2]|0;return k|0}function Ud(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=c[a+4>>2]|0;c[h+4>>2]=c[a>>2];g=h+22|0;if(b[g>>1]&2){h=8;return h|0}if((e|0)<0)e=(c[h+32>>2]|0)-(c[h+36>>2]|0)|0;if((d+-512|0)>>>0<65025?(d+-1&d|0)==0:0){c[h+32>>2]=d;Tf(h)}d=h+32|0;a=Se(c[h>>2]|0,d,e)|0;c[h+36>>2]=(c[d>>2]|0)-(e&65535);if(!f){h=a;return h|0}b[g>>1]=b[g>>1]|2;h=a;return h|0}function Vd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if((a[b>>0]|0)!=48){i=xb(b)|0;d=Og(b,d,i,1)|0;return d|0}switch(a[b+1>>0]|0){case 88:case 120:break;default:{i=xb(b)|0;d=Og(b,d,i,1)|0;return d|0}}i=2;while(1){h=a[b+i>>0]|0;if(h<<24>>24==48)i=i+1|0;else break}if(!(a[880+(h&255)>>0]&8)){f=i;g=0;e=0}else{f=i;g=0;e=0;do{j=cw(g|0,e|0,4)|0;e=L()|0;g=h<<24>>24;g=j|(0-(g>>>6&1)&9)+g&15;f=f+1|0;h=a[b+f>>0]|0}while((a[880+(h&255)>>0]&8)!=0)}j=d;c[j>>2]=g;c[j+4>>2]=e;return ((a[b+f>>0]|0)==0?((f-i|0)>16?2:0):2)|0}function Wd(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if(!b){w=0;return w|0}c=a[b>>0]|0;do if(!(c<<24>>24)){c=31489;f=3}else{o=c&255;c=208+o|0;if((o|32|0)==115){c=a[b+1>>0]|0;if(!(c<<24>>24)){c=31490;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==113){c=a[b+2>>0]|0;if(!(c<<24>>24)){c=31491;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==108){c=a[b+3>>0]|0;if(!(c<<24>>24)){c=31492;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==105){c=a[b+4>>0]|0;if(!(c<<24>>24)){c=31493;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==116){c=a[b+5>>0]|0;if(!(c<<24>>24)){c=31494;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==101){c=a[b+6>>0]|0;if(!(c<<24>>24)){c=31495;f=3;break}if(c<<24>>24==95){e=b+7|0;break}else{f=95;c=208+(c&255)|0}}else f=101}else f=116}else f=105}else f=108}else f=113}else f=115;e=d[c>>0]|0;c=f;f=7}while(0);if((f|0)==3){e=0;c=a[208+(d[c>>0]|0)>>0]|0;f=7}if((f|0)==7)e=(e|0)==(c&255|0)?b+7|0:b;o=(Eu(e)|0)&1073741823;if(!o){w=0;return w|0}f=e;h=58082;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=11;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=13;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=16;break}}if((f|0)==11){i=0;j=a[208+(d[h>>0]|0)>>0]|0;f=15}else if((f|0)==13){i=c&255;j=g;f=15}if((f|0)==15?(i|0)==(j&255|0):0)f=16;if((f|0)==16?(a[880+(d[58082+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58103;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=23;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=21;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=25;break}}if((f|0)==21){k=c&255;l=g;f=24}else if((f|0)==23){k=0;l=a[208+(d[h>>0]|0)>>0]|0;f=24}if((f|0)==24?(k|0)==(l&255|0):0)f=25;if((f|0)==25?(a[880+(d[58103+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58115;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=31;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=29;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=33;break}}if((f|0)==29){m=c&255;n=g;f=32}else if((f|0)==31){m=0;n=a[208+(d[h>>0]|0)>>0]|0;f=32}if((f|0)==32?(m|0)==(n&255|0):0)f=33;if((f|0)==33?(a[880+(d[58115+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58127;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=39;break}g=a[208+(c&255)>>0]|0;c=a[208+(d[h>>0]|0)>>0]|0;if(g<<24>>24!=c<<24>>24){f=37;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=41;break}}if((f|0)==37){p=g&255;q=c;f=40}else if((f|0)==39){p=0;q=a[208+(d[h>>0]|0)>>0]|0;f=40}if((f|0)==40?(p|0)==(q&255|0):0)f=41;if((f|0)==41?(a[880+(d[58127+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58151;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=47;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=45;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=49;break}}if((f|0)==45){r=c&255;s=g;f=48}else if((f|0)==47){r=0;s=a[208+(d[h>>0]|0)>>0]|0;f=48}if((f|0)==48?(r|0)==(s&255|0):0)f=49;if((f|0)==49?(a[880+(d[58151+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58164;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=55;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=53;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=57;break}}if((f|0)==53){t=c&255;u=g;f=56}else if((f|0)==55){t=0;u=a[208+(d[h>>0]|0)>>0]|0;f=56}if((f|0)==56?(t|0)==(u&255|0):0)f=57;if((f|0)==57?(a[880+(d[58164+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}g=58184;f=o;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){f=63;break}c=a[208+(c&255)>>0]|0;b=a[208+(d[g>>0]|0)>>0]|0;if(c<<24>>24!=b<<24>>24){f=61;break}if((f|0)>1){e=e+1|0;g=g+1|0;f=f+-1|0}else{f=65;break}}if((f|0)==61){v=c&255;w=b;f=64}else if((f|0)==63){v=0;w=a[208+(d[g>>0]|0)>>0]|0;f=64}if((f|0)==64?(v|0)==(w&255|0):0)f=65;if((f|0)==65?(a[880+(d[58184+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}w=0;return w|0}function Xd(a,b){a=a|0;b=b|0;var d=0;if(((a|0)!=0?(d=b,(c[a+304>>2]|0)>>>0<=d>>>0):0)?(c[a+308>>2]|0)>>>0>d>>>0:0)b=e[a+276>>1]|0;else b=Wa[c[29352>>2]&127](b)|0;a=c[a+480>>2]|0;c[a>>2]=(c[a>>2]|0)+b;return}function Yd(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0;if(c[b+272>>2]|0){if(a[b+81>>0]|0){f=0;return f|0}}else{do if(0<f>>>0|(0==(f|0)?(e[b+276>>1]|0)>>>0<d>>>0:0))g=b+288|0;else{g=b+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];f=b+284|0;c[f>>2]=(c[f>>2]|0)+1;f=h;return f|0}g=b+296|0;h=c[g>>2]|0;if(!h){g=b+292|0;break}c[g>>2]=c[h>>2];f=b+284|0;c[f>>2]=(c[f>>2]|0)+1;f=h;return f|0}while(0);c[g>>2]=(c[g>>2]|0)+1}f=_d(b,d,f)|0;return f|0}function Zd(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=b+81|0;if(a[h>>0]|0){m=0;return m|0}l=d;m=b+304|0;if((c[m>>2]|0)>>>0<=l>>>0?(k=b+308|0,(c[k>>2]|0)>>>0>l>>>0):0){a:do if(!(c[b+272>>2]|0)){do if(!(0<g>>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0<f>>>0:0))){i=b+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];g=b+284|0;c[g>>2]=(c[g>>2]|0)+1;break a}i=b+296|0;h=c[i>>2]|0;if(!h){h=b+292|0;break}else{c[i>>2]=c[h>>2];g=b+284|0;c[g>>2]=(c[g>>2]|0)+1;break a}}else h=b+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=13}else j=13;while(0);if((j|0)==13)h=_d(b,f,g)|0;if(!h){m=0;return m|0}ew(h|0,d|0,e[b+276>>1]|0)|0;if(!d){m=h;return m|0}if(c[b+480>>2]|0){Xd(b,d);m=h;return m|0}if((c[m>>2]|0)>>>0<=l>>>0?(c[k>>2]|0)>>>0>l>>>0:0){m=b+300|0;c[d>>2]=c[m>>2];c[m>>2]=d;m=h;return m|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);m=h;return m|0}else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);m=h;return m|0}}if((mb()|0)==0?(i=sb(d,f,g)|0,i|0):0){m=i;return m|0}if(a[h>>0]|0){m=0;return m|0}if(a[b+82>>0]|0){m=0;return m|0}a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(!h){m=0;return m|0}c[h+12>>2]=7;m=0;return m|0}function _d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Sv(d|0,e|0,-1,-1)|0;e=L()|0;do if(!(e>>>0>0|(e|0)==0&f>>>0>2147483390)){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](d)|0;if(!e)break;return e|0}f=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;d=59064;e=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&e>>>0>0){g=c[14978]|0;d=Tv(e|0,d|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&d>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(d|0){e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0){g=d;return g|0}c[14987]=e;g=d;return g|0}}while(0);e=b+81|0;if(a[e>>0]|0){g=0;return g|0}if(a[b+82>>0]|0){g=0;return g|0}a[e>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;e=b+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[b+236>>2]|0;if(!e){g=0;return g|0}c[e+12>>2]=7;g=0;return g|0}function $d(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0;g=c[b>>2]|0;k=b+16|0;j=(c[k>>2]|0)+1|0;a:do if(!g){h=Sv(j|0,0,-1,-1)|0;g=L()|0;if(!(g>>>0>0|(g|0)==0&h>>>0>2147483390)){if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](j)|0;i=25;break}h=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){j=c[14978]|0;g=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(f|0){d=Wa[c[29352>>2]&127](f)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0){c[14987]=d;d=f;i=26}else{d=f;i=26}}}}else{if(c[g+272>>2]|0){if(a[g+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[g+276>>1]|0)>>>0<j>>>0:0))){f=g+300|0;d=c[f>>2]|0;if(d|0){c[f>>2]=c[d>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;i=25;break a}f=g+296|0;d=c[f>>2]|0;if(!d){d=g+292|0;break}else{c[f>>2]=c[d>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;i=25;break a}}else d=g+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(g,j,0)|0;i=25}while(0);if((i|0)==25?d|0:0)i=26;if((i|0)==26){ew(d|0,c[b+4>>2]|0,(c[k>>2]|0)+1|0)|0;k=b+21|0;a[k>>0]=a[k>>0]|4;k=d;b=b+4|0;c[b>>2]=k;return k|0}a[b+20>>0]=7;if(!(c[b+12>>2]|0)){k=0;b=b+4|0;c[b>>2]=k;return k|0}f=b+21|0;if(!(a[f>>0]&4))d=b+4|0;else{g=c[b>>2]|0;d=b+4|0;h=c[d>>2]|0;do if(h|0){if(g|0){if(c[g+480>>2]|0){Xd(g,h);break}j=h;if((c[g+304>>2]|0)>>>0<=j>>>0?(c[g+308>>2]|0)>>>0>j>>>0:0){j=g+300|0;c[h>>2]=c[j>>2];c[j>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{j=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);a[f>>0]=a[f>>0]&-5}c[b+8>>2]=0;c[k>>2]=0;c[d>>2]=0;k=0;b=b+4|0;c[b>>2]=k;return k|0}function ae(a,b){a=a|0;b=b|0;return 29668}function be(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=Ra;Ra=Ra+48|0;i=j+24|0;g=j;h=a+8|0;f=c[h>>2]|0;te(a);ie(a,0)|0;h=c[h>>2]|0;if(c[f+24>>2]|0){f=a+28|0;d=c[f>>2]|0;e=h+32|0;c[d+8>>2]=c[e>>2];c[e>>2]=d;c[a+12>>2]=-1;c[f>>2]=0}do if(h|0?(e=h+36|0,f=(c[e>>2]|0)+-1|0,c[e>>2]=f,(f|0)==0):0){e=h+32|0;b=c[e>>2]|0;if(b|0){f=a+32|0;do{d=b;b=c[b+8>>2]|0;if(Wa[c[2352>>2]&127](c[d>>2]|0)|0){l=c[f>>2]|0;m=uu()|0;m=c[m>>2]|0;k=dv(m)|0;c[g>>2]=33804;c[g+4>>2]=m;c[g+8>>2]=31695;c[g+12>>2]=(l|0)==0?59952:l;c[g+16>>2]=k;Db(4106,31953,g)}if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0)}c[e>>2]=0;e=c[h+48>>2]|0;d=h+44|0;b=c[d>>2]|0;if(!e)c[14795]=b;else{c[e+44>>2]=b;b=c[d>>2]|0}if(b|0)c[b+48>>2]=e;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);b=a+12|0;d=c[b>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){l=c[a+32>>2]|0;k=uu()|0;k=c[k>>2]|0;m=dv(k)|0;c[i>>2]=34584;c[i+4>>2]=k;c[i+8>>2]=31695;c[i+12>>2]=(l|0)==0?59952:l;c[i+16>>2]=m;Db(4106,31953,i)}c[b>>2]=-1}b=c[a+28>>2]|0;if(!b){b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}return 0}function ce(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=a+12|0;g=0;h=d;i=b;while(1){if((xv(c[l>>2]|0,e,0)|0)<0){f=3;break}j=Ya[c[2436>>2]&127](c[l>>2]|0,i,h)|0;if((h|0)==(j|0)){f=10;break}if((j|0)<0){k=uu()|0;if((c[k>>2]|0)==4)k=1;else{f=7;break}}else{e=Sv(e|0,f|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;k=j;g=j+g|0;h=h-j|0;i=(j|0)==0?i:i+j|0}if((k|0)<=0){h=0;f=10;break}}if((f|0)==3){g=uu()|0;c[a+20>>2]=c[g>>2];g=-1}else if((f|0)==7){h=uu()|0;c[a+20>>2]=c[h>>2];h=j;g=0;f=10}if((f|0)==10)g=g+h|0;if((g|0)==(d|0)){d=0;return d|0}if((g|0)<0){d=266;return d|0}c[a+20>>2]=0;gw(b+g|0,0,d-g|0)|0;d=522;return d|0}function de(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=a+12|0;j=d;h=f;a:while(1){d=c[i>>2]|0;g=j&131071;while(1){if((xv(d,e,0)|0)<0){f=-1;b=6;break a}f=Ya[c[2472>>2]&127](d,b,g)|0;if((f|0)>=0)break;k=uu()|0;if((c[k>>2]|0)!=4){b=6;break a}}d=(j|0)>(f|0);if(!(d&(f|0)!=0)){b=9;break}k=Sv(e|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;j=j-f|0;b=b+f|0;h=L()|0;e=k}if((b|0)==6){d=a+20|0;b=uu()|0;b=c[b>>2]|0;c[d>>2]=b;if((j|0)<=(f|0)){k=0;return k|0}if((b|0)!=28){k=778;return k|0}}else if((b|0)==9)if(d)d=a+20|0;else{k=0;return k|0}c[d>>2]=0;k=13;return k|0}function ee(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;h=j;f=c[a+40>>2]|0;g=((f|0)<0)<<31>>31;d=Sv(b|0,d|0,-1,-1)|0;d=Sv(d|0,L()|0,f|0,g|0)|0;e=L()|0;if((f|0)>0){b=Zv(d|0,e|0,f|0,g|0)|0;b=Tv(d|0,e|0,b|0,L()|0)|0;L()|0}d=c[a+12>>2]|0;do{e=Xa[c[2412>>2]&255](d,b)|0;if((e|0)>=0){i=6;break}g=uu()|0}while((c[g>>2]|0)==4);if((i|0)==6?(e|0)==0:0){i=0;Ra=j;return i|0}g=uu()|0;c[a+20>>2]=c[g>>2];a=c[a+32>>2]|0;g=uu()|0;g=c[g>>2]|0;i=dv(g)|0;c[h>>2]=36273;c[h+4>>2]=g;c[h+8>>2]=31726;c[h+12>>2]=(a|0)==0?59952:a;c[h+16>>2]=i;Db(1546,31953,h);i=1546;Ra=j;return i|0}function fe(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+48|0;g=h+24|0;d=h;f=h+44|0;if(zv(c[a+12>>2]|0)|0){f=uu()|0;c[a+20>>2]=c[f>>2];f=c[a+32>>2]|0;a=uu()|0;a=c[a>>2]|0;g=dv(a)|0;c[d>>2]=36228;c[d+4>>2]=a;c[d+8>>2]=32026;c[d+12>>2]=(f|0)==0?59952:f;c[d+16>>2]=g;Db(1034,31953,d);g=1034;Ra=h;return g|0}e=a+18|0;if(!(b[e>>1]&8)){g=0;Ra=h;return g|0}d=a+32|0;if((Xa[c[2544>>2]&255](c[d>>2]|0,f)|0)==0?(zv(c[f>>2]|0)|0,Wa[c[2352>>2]&127](c[f>>2]|0)|0):0){a=c[d>>2]|0;d=uu()|0;d=c[d>>2]|0;f=dv(d)|0;c[g>>2]=36242;c[g+4>>2]=d;c[g+8>>2]=31695;c[g+12>>2]=(a|0)==0?59952:a;c[g+16>>2]=f;Db(4106,31953,g)}b[e>>1]=b[e>>1]&-9;g=0;Ra=h;return g|0}function ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Ra;Ra=Ra+80|0;d=e;if(!(Xa[c[2400>>2]&255](c[a+12>>2]|0,d)|0)){a=c[d+36>>2]|0;f=(a|0)==1;d=b;c[d>>2]=f?0:a;c[d+4>>2]=f?0:((a|0)<0)<<31>>31;d=0;Ra=e;return d|0}else{f=uu()|0;c[a+20>>2]=c[f>>2];f=1802;Ra=e;return f|0}return 0}function he(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+96|0;r=C+56|0;t=C+48|0;q=C+40|0;s=C+32|0;l=C+24|0;m=C+16|0;h=C+8|0;j=C;y=C+80|0;x=C+64|0;B=d+16|0;g=a[B>>0]|0;if((g&255|0)>=(e|0)){d=0;Ra=C;return d|0}w=d+8|0;v=c[w>>2]|0;A=v+28|0;f=a[A>>0]|0;if(g<<24>>24!=f<<24>>24?(e|0)>1|(f&255)>2:0){d=5;Ra=C;return d|0}k=(e|0)==1;do if(!k){f=x+8|0;c[f>>2]=1;b[x+2>>1]=0;if((e|0)==4)if((g&255)<3){o=f;z=10}else z=43;else z=42}else{if((f+-1&255)>=2){o=x+8|0;c[o>>2]=1;b[x+2>>1]=0;z=10;break}a[B>>0]=1;d=v+20|0;c[d>>2]=(c[d>>2]|0)+1;d=v+24|0;c[d>>2]=(c[d>>2]|0)+1;d=0;Ra=C;return d|0}while(0);a:do if((z|0)==10){b[x>>1]=(k^1)&1;n=x+4|0;c[n>>2]=1073741824;p=d+18|0;do if((b[p>>1]&3)==1){g=v+29|0;if(!(a[g>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=1073741826;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;f=c[d+12>>2]|0;c[j>>2]=y;f=Ya[z&127](f,13,j)|0;if((f|0)<0){z=17;break}else{a[g>>0]=1;i=v+24|0;c[i>>2]=(c[i>>2]|0)+1;i=f;z=16;break}}}else{z=c[606]|0;i=c[d+12>>2]|0;c[h>>2]=x;i=Ya[z&127](i,13,h)|0;z=16}while(0);if((z|0)==16?i|0:0)z=17;if((z|0)==17){g=uu()|0;g=c[g>>2]|0;switch(g|0){case 1:{f=3;break}case 37:case 4:case 16:case 110:case 11:case 13:{d=5;Ra=C;return d|0}default:f=3850}c[d+20>>2]=g;d=f;Ra=C;return d|0}if(k){f=1073741826;c[n>>2]=f;c[o>>2]=510;h=c[w>>2]|0;do if((b[p>>1]&3)==1){g=h+29|0;if(!(a[g>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=f;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;f=c[d+12>>2]|0;c[m>>2]=y;f=Ya[z&127](f,13,m)|0;if((f|0)<0){z=28;break}else{a[g>>0]=1;z=h+24|0;c[z>>2]=(c[z>>2]|0)+1;z=27;break}}else{f=0;g=0}}else{z=c[606]|0;f=c[d+12>>2]|0;c[l>>2]=x;f=Ya[z&127](f,13,l)|0;z=27}while(0);if((z|0)==27)if(!f){f=0;g=0}else z=28;b:do if((z|0)==28){f=uu()|0;f=c[f>>2]|0;switch(f|0){case 37:case 4:case 16:case 110:case 11:case 13:{g=5;break b}case 1:{f=1;g=3;break b}default:{g=3850;break b}}}while(0);c[n>>2]=1073741824;c[o>>2]=1;b[x>>1]=2;j=c[w>>2]|0;do if((b[p>>1]&3)==1){i=j+29|0;if(!(a[i>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=1073741826;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;h=c[d+12>>2]|0;c[s>>2]=y;h=Ya[z&127](h,13,s)|0;if((h|0)<0){z=37;break}else{a[i>>0]=1;z=j+24|0;c[z>>2]=(c[z>>2]|0)+1;z=37;break}}else z=39}else{z=c[606]|0;h=c[d+12>>2]|0;c[q>>2]=x;h=Ya[z&127](h,13,q)|0;z=37}while(0);if((z|0)==37)if((g|0)==0&(h|0)!=0){f=uu()|0;g=2058;f=c[f>>2]|0}else z=39;c:do if((z|0)==39)switch(g&4095){case 0:{a[B>>0]=1;z=v+24|0;c[z>>2]=(c[z>>2]|0)+1;c[v+20>>2]=1;z=58;break a}case 5:{d=5;Ra=C;return d|0}default:break c}while(0);c[d+20>>2]=f;d=g;Ra=C;return d|0}else{f=o;z=42}}while(0);if((z|0)==42)if((e|0)!=4){b[x>>1]=1;if((e|0)==2){h=1073741825;i=1073741824;g=1;z=48}else{g=1073741824;z=47}}else z=43;if((z|0)==43)if((c[v+20>>2]|0)>1){f=5;z=60}else{b[x>>1]=1;g=1073741824;z=47}if((z|0)==47){h=g+2|0;i=g;g=510;z=48}d:do if((z|0)==48){c[x+4>>2]=h;c[f>>2]=g;h=c[w>>2]|0;do if((b[d+18>>1]&3)==1){g=h+29|0;if(a[g>>0]|0){z=58;break d}b[y+2>>1]=0;c[y+4>>2]=i+2;c[y+8>>2]=510;b[y>>1]=1;x=c[606]|0;f=c[d+12>>2]|0;c[t>>2]=y;f=Ya[x&127](f,13,t)|0;if((f|0)<0)break;else{a[g>>0]=1;u=h+24|0;c[u>>2]=(c[u>>2]|0)+1;u=f;z=54;break}}else{z=c[606]|0;u=c[d+12>>2]|0;c[r>>2]=x;u=Ya[z&127](u,13,r)|0;z=54}while(0);if((z|0)==54?(u|0)==0:0){z=58;break}g=uu()|0;g=c[g>>2]|0;switch(g|0){case 37:case 4:case 16:case 110:case 11:case 13:{f=5;break}case 1:{f=3;z=57;break}default:{f=3850;z=57}}if((z|0)==57)c[d+20>>2]=g;if((e|0)==4)z=60;else{d=f;Ra=C;return d|0}}while(0);if((z|0)==58){d=e&255;a[B>>0]=d;a[A>>0]=d;d=0;Ra=C;return d|0}else if((z|0)==60){a[B>>0]=3;a[A>>0]=3;d=f;Ra=C;return d|0}return 0}function ie(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=Ra;Ra=Ra+112|0;y=z+48|0;r=z+40|0;t=z+32|0;n=z+24|0;o=z+16|0;k=z+8|0;l=z;s=z+88|0;q=z+72|0;x=d+16|0;f=a[x>>0]|0;if((f&255|0)<=(e|0)){y=0;Ra=z;return y|0}v=d+8|0;w=c[v>>2]|0;do if((f&255)>1){a:do if((e|0)==1){b[q>>1]=0;j=q+2|0;b[j>>1]=0;i=1073741826;h=q+4|0;c[h>>2]=i;g=q+8|0;c[g>>2]=510;f=d+18|0;do if((b[f>>1]&3)==1){k=w+29|0;if(a[k>>0]|0){i=w;break a}b[s+2>>1]=0;c[s+4>>2]=i;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;i=c[d+12>>2]|0;c[l>>2]=s;i=Ya[A&127](i,13,l)|0;if((i|0)<0)break;else{a[k>>0]=1;m=w+24|0;c[m>>2]=(c[m>>2]|0)+1;m=i;u=11;break}}else{u=c[606]|0;m=c[d+12>>2]|0;c[k>>2]=q;m=Ya[u&127](m,13,k)|0;u=11}while(0);if((u|0)==11?(m|0)==0:0){i=c[v>>2]|0;break}A=uu()|0;c[d+20>>2]=c[A>>2];A=2314;Ra=z;return A|0}else{j=q+2|0;h=q+4|0;g=q+8|0;f=d+18|0;i=w}while(0);b[q>>1]=2;b[j>>1]=0;c[h>>2]=1073741824;c[g>>2]=2;do if((b[f>>1]&3)==1){g=i+29|0;if(!(a[g>>0]|0)){b[s+2>>1]=0;c[s+4>>2]=1073741826;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;f=c[d+12>>2]|0;c[o>>2]=s;f=Ya[A&127](f,13,o)|0;if((f|0)<0)break;else{a[g>>0]=1;p=i+24|0;c[p>>2]=(c[p>>2]|0)+1;p=f;u=20;break}}else u=21}else{u=c[606]|0;p=c[d+12>>2]|0;c[n>>2]=q;p=Ya[u&127](p,13,n)|0;u=20}while(0);if((u|0)==20?(p|0)==0:0)u=21;if((u|0)==21){a[w+28>>0]=1;break}A=uu()|0;c[d+20>>2]=c[A>>2];A=2058;Ra=z;return A|0}while(0);if(!e){u=w+20|0;A=(c[u>>2]|0)+-1|0;c[u>>2]=A;if(!A){b[q>>1]=2;b[q+2>>1]=0;c[q+8>>2]=0;c[q+4>>2]=0;h=c[v>>2]|0;do if((b[d+18>>1]&3)==1){g=h+29|0;if(!(a[g>>0]|0)){b[s+2>>1]=0;c[s+4>>2]=1073741826;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;f=c[d+12>>2]|0;c[t>>2]=s;f=Ya[A&127](f,13,t)|0;if((f|0)<0){u=33;break}else{a[g>>0]=1;u=h+24|0;c[u>>2]=(c[u>>2]|0)+1;u=31;break}}else u=32}else{u=c[606]|0;f=c[d+12>>2]|0;c[r>>2]=q;f=Ya[u&127](f,13,r)|0;u=31}while(0);if((u|0)==31)if(!f)u=32;else u=33;if((u|0)==32){f=0;g=w+28|0}else if((u|0)==33){f=uu()|0;c[d+20>>2]=c[f>>2];a[w+28>>0]=0;f=2058;g=x}a[g>>0]=0;j=f}else j=0;w=w+24|0;A=(c[w>>2]|0)+-1|0;c[w>>2]=A;if(!A){i=(c[v>>2]|0)+32|0;f=c[i>>2]|0;if(f|0){h=d+32|0;do{g=f;f=c[f+8>>2]|0;if(Wa[c[2352>>2]&127](c[g>>2]|0)|0){d=c[h>>2]|0;w=uu()|0;w=c[w>>2]|0;A=dv(w)|0;c[y>>2]=33804;c[y+4>>2]=w;c[y+8>>2]=31695;c[y+12>>2]=(d|0)==0?59952:d;c[y+16>>2]=A;Db(4106,31953,y)}if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{A=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0)}c[i>>2]=0}if(j|0){A=j;Ra=z;return A|0}}a[x>>0]=e;A=0;Ra=z;return A|0}function je(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+32|0;h=j;i=j+8|0;g=c[e+8>>2]|0;if((d[g+28>>0]|0)>1){i=0;h=1;c[f>>2]=h;Ra=j;return i|0}if(a[g+29>>0]|0){i=0;h=0;c[f>>2]=h;Ra=j;return i|0}b[i+2>>1]=0;c[i+4>>2]=1073741825;c[i+8>>2]=1;b[i>>1]=1;k=c[606]|0;g=c[e+12>>2]|0;c[h>>2]=i;if(!(Ya[k&127](g,12,h)|0)){g=0;e=(b[i>>1]|0)!=2&1}else{g=uu()|0;c[e+20>>2]=c[g>>2];g=3594;e=0}k=g;i=e;c[f>>2]=i;Ra=j;return k|0}function ke(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+80|0;h=v;m=v+4|0;do switch(f|0){case 1:{c[g>>2]=d[a+16>>0];a=0;Ra=v;return a|0}case 4:{c[g>>2]=c[a+20>>2];a=0;Ra=v;return a|0}case 6:{c[a+40>>2]=c[g>>2];a=0;Ra=v;return a|0}case 5:{h=g;f=c[h>>2]|0;h=c[h+4>>2]|0;i=a+40|0;if((c[i>>2]|0)<=0){a=0;Ra=v;return a|0}o=a+12|0;a:do if(!(Xa[c[2400>>2]&255](c[o>>2]|0,m)|0)){g=c[i>>2]|0;j=((g|0)<0)<<31>>31;f=Sv(f|0,h|0,-1,-1)|0;f=Sv(f|0,L()|0,g|0,j|0)|0;k=L()|0;j=Zv(f|0,k|0,g|0,j|0)|0;j=Tv(f|0,k|0,j|0,L()|0)|0;k=L()|0;f=c[m+36>>2]|0;g=((f|0)<0)<<31>>31;b:do if((k|0)>(g|0)|(k|0)==(g|0)&j>>>0>f>>>0?(p=c[m+40>>2]|0,n=f+-1+p-((f|0)%(p|0)|0)|0,l=((n|0)<0)<<31>>31,q=((p|0)<0)<<31>>31,r=Sv(j|0,k|0,-1,-1)|0,s=L()|0,t=Sv(r|0,s|0,p|0,q|0)|0,u=L()|0,(u|0)>(l|0)|(u|0)==(l|0)&t>>>0>n>>>0):0){h=l;f=n;c:while(1){n=(h|0)<(k|0)|(h|0)==(k|0)&f>>>0<j>>>0;i=n?f:r;f=n?h:s;h=c[o>>2]|0;while(1){if((xv(h,i,0)|0)<0)break c;g=Ya[c[2472>>2]&127](h,59952,1)|0;if((g|0)>=0)break;n=uu()|0;if((c[n>>2]|0)!=4)break c}f=Sv(i|0,f|0,p|0,q|0)|0;h=L()|0;if((g|0)!=1){f=778;break a}if(!((h|0)<(u|0)|(h|0)==(u|0)&f>>>0<t>>>0))break b}f=uu()|0;c[a+20>>2]=c[f>>2];f=778;break a}while(0);a=0;Ra=v;return a|0}else f=1802;while(0);a=f;Ra=v;return a|0}case 10:{i=c[g>>2]|0;if((i|0)<0){c[g>>2]=(e[a+18>>1]|0)>>>2&1;a=0;Ra=v;return a|0}f=a+18|0;h=e[f>>1]|0;if(!i){b[f>>1]=h&65531;a=0;Ra=v;return a|0}else{b[f>>1]=h|4;a=0;Ra=v;return a|0}}case 13:{i=c[g>>2]|0;if((i|0)<0){c[g>>2]=(e[a+18>>1]|0)>>>4&1;a=0;Ra=v;return a|0}f=a+18|0;h=e[f>>1]|0;if(!i){b[f>>1]=h&65519;a=0;Ra=v;return a|0}else{b[f>>1]=h|16;a=0;Ra=v;return a|0}}case 12:{c[h>>2]=c[(c[a+4>>2]|0)+16>>2];a=Bb(31408,h)|0;c[g>>2]=a;a=0;Ra=v;return a|0}case 16:{f=a+4|0;h=c[(c[f>>2]|0)+8>>2]|0;h=pb(h,((h|0)<0)<<31>>31)|0;if(!h){a=0;Ra=v;return a|0}ye(c[(c[f>>2]|0)+8>>2]|0,h)|0;c[g>>2]=h;a=0;Ra=v;return a|0}case 20:{f=a+8|0;if(c[f>>2]|0)if(!(Xa[c[2388>>2]&255](c[a+32>>2]|0,m)|0)){f=(c[f>>2]|0)+8|0;f=(c[f+4>>2]|0?1:(c[f>>2]|0)!=(c[m+72>>2]|0))&1}else f=1;else f=0;c[g>>2]=f;a=0;Ra=v;return a|0}default:{a=12;Ra=v;return a|0}}while(0);return 0}function le(a){a=a|0;var d=0,e=0;d=a+44|0;e=c[d>>2]|0;if(e|0)return e|0;if(b[a+18>>1]&16){e=a+48|0;c[e>>2]=c[e>>2]|4096}c[d>>2]=4096;e=4096;return e|0}function me(a){a=a|0;var d=0,e=0;d=a+44|0;if(!(c[d>>2]|0)){if(b[a+18>>1]&16){e=a+48|0;c[e>>2]=c[e>>2]|4096}c[d>>2]=4096}return c[a+48>>2]|0}function ne(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+176|0;C=D+72|0;y=D+48|0;v=D+24|0;u=D+8|0;r=D;x=D+92|0;B=Va[c[2640>>2]&127]()|0;B=(B|0)<32768?1:(B|0)/32768|0;w=d+36|0;j=c[w>>2]|0;if(!j){if(mb()|0){i=7;Ra=D;return i|0}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;if(!j){i=7;Ra=D;return i|0}else t=j}else{j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){t=c[14978]|0;q=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=t>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){i=7;Ra=D;return i|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;t=k}else t=k};c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;o=d+8|0;p=c[o>>2]|0;k=c[p+40>>2]|0;a:do if(!k){n=d+32|0;l=c[n>>2]|0;b:do if(!(Xa[c[2400>>2]&255](c[d+12>>2]|0,x)|0)){m=Eu(l)|0;j=m+42|0;k=pb(j,0)|0;if(!k)j=7;else{gw(k|0,0,j|0)|0;q=k+36|0;c[k+8>>2]=q;c[r>>2]=l;Cb(m+6|0,q,32098,r)|0;l=k+12|0;c[l>>2]=-1;r=c[o>>2]|0;c[r+40>>2]=k;c[k>>2]=r;if(c[7325]|0)c[k+4>>2]=8;if(!(a[p+29>>0]|0)){j=c[n>>2]|0;c:do if((j|0)!=0?(s=j+(((Eu(j)|0)&1073741823)+1)|0,(a[s>>0]|0)!=0):0){j=s;while(1){s=Bu(j,32105)|0;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!s)break;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!(a[j>>0]|0)){A=26;break c}}if((Zm(j,1,0)|0)<<24>>24)m=c[l>>2]|0;else A=26}else A=26;while(0);if((A|0)==26){m=xe(q,66,c[x+12>>2]&511)|0;c[l>>2]=m}do if((m|0)<0){m=xe(q,0,c[x+12>>2]&511)|0;c[l>>2]=m;if((m|0)<0){c[u>>2]=31984;c[u+4>>2]=37077;c[u+8>>2]=31517;Db(14,32001,u);i=uu()|0;i=c[i>>2]|0;j=dv(i)|0;c[v>>2]=37077;c[v+4>>2]=i;c[v+8>>2]=31690;c[v+12>>2]=q;c[v+16>>2]=j;Db(14,31953,v);j=14;break b}else{a[k+22>>0]=1;break}}while(0);j=c[x+20>>2]|0;l=c[x+24>>2]|0;if(!(Va[c[2592>>2]&127]()|0))Ya[c[2580>>2]&127](m,j,l)|0;j=ze(d,k)|0;switch(j|0){case 0:case 1288:break;default:break b}}else j=0;break a}}else j=1802;while(0);Ae(d);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=j;Ra=D;return i|0}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=j;Ra=D;return i|0}}else j=0;while(0);c[t>>2]=k;v=k+28|0;c[v>>2]=(c[v>>2]|0)+1;c[w>>2]=t;w=k+32|0;c[t+4>>2]=c[w>>2];c[w>>2]=t;if(!j)j=t;else{i=j;Ra=D;return i|0}}t=c[j>>2]|0;j=t+23|0;do if(a[j>>0]|0){k=ze(d,t)|0;if(!k){a[j>>0]=0;A=44;break}else{j=t+20|0;break}}else A=44;while(0);if((A|0)==44){q=B+f|0;q=q-((q|0)%(B|0)|0)|0;s=t+20|0;if((q|0)>(e[s>>1]|0)){k=G(q,g)|0;c[t+16>>2]=g;r=t+12|0;j=c[r>>2]|0;d:do if((j|0)>-1)if(!(Xa[c[2400>>2]&255](j,x)|0)){j=c[x+36>>2]|0;if((j|0)<(k|0))if(h){j=(j|0)/4096|0;n=(k|0)/4096|0;if((j|0)<(n|0)){e:while(1){k=c[r>>2]|0;l=j<<12|4095;while(1){if((xv(k,l,0)|0)<0){A=56;break e}m=Ya[c[2472>>2]&127](k,59952,1)|0;if((m|0)>=0)break;h=uu()|0;if((c[h>>2]|0)!=4){A=56;break e}}j=j+1|0;if((m|0)!=1)break;if((j|0)>=(n|0)){A=59;break d}}C=c[t+8>>2]|0;g=uu()|0;g=c[g>>2]|0;j=dv(g)|0;c[y>>2]=37221;c[y+4>>2]=g;c[y+8>>2]=31761;c[y+12>>2]=(C|0)==0?59952:C;c[y+16>>2]=j;Db(4874,31953,y);j=4874}else A=59}else j=0;else A=59}else j=4874;else A=59;while(0);f:do if((A|0)==59){m=t+24|0;j=c[m>>2]|0;k=q<<2;if((mb()|0)==0?(z=sb(j,(k|0)>0?k:0,0)|0,(z|0)!=0):0){c[m>>2]=z;j=e[s>>1]|0;if((q|0)>(j|0)){n=G(B,g)|0;o=t+22|0;p=((n|0)<0)<<31>>31;g:do if((B|0)>0)while(1){k=c[r>>2]|0;if((k|0)>-1){j=G(j,g)|0;j=$a[c[2604>>2]&127](0,n,(a[o>>0]|0)==0?3:1,1,k,j)|0;if((j|0)==(-1|0))break g}else{j=pb(n,p)|0;if(!j){j=7;break f}gw(j|0,0,n|0)|0}l=e[s>>1]|0;k=0;do{A=j+(G(k,g)|0)|0;c[(c[m>>2]|0)+(k+l<<2)>>2]=A;k=k+1|0}while((k|0)!=(B|0));j=B+l|0;b[s>>1]=j;j=j&65535;if((q|0)<=(j|0)){j=0;break f}}else while(1){k=c[r>>2]|0;if((k|0)>-1){A=G(j,g)|0;if(($a[c[2604>>2]&127](0,n,(a[o>>0]|0)==0?3:1,1,k,A)|0)==(-1|0))break g}else{j=pb(n,p)|0;if(!j){j=7;break f}gw(j|0,0,n|0)|0}j=B+(e[s>>1]|0)|0;b[s>>1]=j;j=j&65535;if((q|0)<=(j|0)){j=0;break f}}while(0);g=c[t+8>>2]|0;B=uu()|0;B=c[B>>2]|0;j=dv(B)|0;c[C>>2]=37248;c[C+4>>2]=B;c[C+8>>2]=31848;c[C+12>>2]=(g|0)==0?59952:g;c[C+16>>2]=j;Db(5386,31953,C);j=5386}else j=0}else j=3082}while(0);k=j;j=s}else{k=0;j=s}}if((e[j>>1]|0)>(f|0))j=c[(c[t+24>>2]|0)+(f<<2)>>2]|0;else j=0;c[i>>2]=j;i=(k|0)==0&(a[t+22>>0]|0)!=0?8:k;Ra=D;return i|0}\nfunction fb(a){a=a|0;var b=0;b=Ra;Ra=Ra+a|0;Ra=Ra+15&-16;return b|0}function gb(){return Ra|0}function hb(a){a=a|0;Ra=a}function ib(a,b){a=a|0;b=b|0;Ra=a;Sa=b}function jb(a){a=a|0;var b=0,d=0,e=0;e=c[a+20>>2]|0;if((e|0)<=0)return;b=c[a+16>>2]|0;a=0;do{d=c[b+(a<<4)+4>>2]|0;if(d|0)c[(c[d+4>>2]|0)+4>>2]=c[d>>2];a=a+1|0}while((a|0)<(e|0));return}function kb(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=e+116|0;f=c[s>>2]|0;g=b[e+144>>1]|0;a:do if((f|0)!=0&g<<16>>16!=0){o=f+(((g&65535)<<1)*40|0)|0;j=c[f+32>>2]|0;k=j+480|0;g=(j|0)==0;l=j+304|0;m=j+308|0;n=j+300|0;if(c[k>>2]|0){if(g)while(1){do if(c[f+24>>2]|0?(h=c[f+20>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{n=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=f+40|0;if(f>>>0>=o>>>0)break a}while(1){do if(c[f+24>>2]|0?(i=c[f+20>>2]|0,i|0):0){if(c[k>>2]|0){Xd(j,i);break}h=i;if((c[l>>2]|0)>>>0<=h>>>0?(c[m>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);f=f+40|0;if(f>>>0>=o>>>0)break a}}if(g)while(1){g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{n=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0;if(f>>>0>=o>>>0)break a}do{g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(!(c[k>>2]|0)){t=i;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(j,i);while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0}while(f>>>0<o>>>0)}while(0);f=c[e+212>>2]|0;if(f|0){k=(d|0)==0;l=d+480|0;m=d+304|0;n=d+308|0;o=d+300|0;do{i=f;f=c[f+24>>2]|0;j=c[i>>2]|0;g=c[i+4>>2]|0;if(j){if((g|0)>=1){g=j+((g+-1|0)*20|0)|0;do{h=a[g+1>>0]|0;if(h<<24>>24<-6)kg(d,h<<24>>24,c[g+16>>2]|0);g=g+-20|0}while(g>>>0>=j>>>0)}do if(!k){if(c[l>>2]|0){Xd(d,j);break}t=j;if((c[m>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j}else p=63}else p=63;while(0);do if((p|0)==63){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{t=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);if(i|0)p=67}else p=67;do if((p|0)==67){p=0;if(!k){if(c[l>>2]|0){Xd(d,i);break}t=i;if((c[m>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[o>>2];c[o>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0)}while((f|0)!=0)}do if((c[e+20>>2]|0)!=381479589){f=c[e+100>>2]|0;g=b[e+16>>1]|0;b:do if((f|0)!=0&g<<16>>16!=0){o=f+((g<<16>>16)*40|0)|0;j=c[f+32>>2]|0;k=j+480|0;g=(j|0)==0;l=j+304|0;m=j+308|0;n=j+300|0;if(c[k>>2]|0){if(g)while(1){do if(c[f+24>>2]|0?(q=c[f+20>>2]|0,q|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{t=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);f=f+40|0;if(f>>>0>=o>>>0)break b}while(1){do if(c[f+24>>2]|0?(r=c[f+20>>2]|0,r|0):0){if(c[k>>2]|0){Xd(j,r);break}t=r;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[r>>2]=c[n>>2];c[n>>2]=r;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{t=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);f=f+40|0;if(f>>>0>=o>>>0)break b}}if(g)while(1){g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0;if(f>>>0>=o>>>0)break b}do{g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(!(c[k>>2]|0)){t=i;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(j,i);while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0}while(f>>>0<o>>>0)}while(0);f=c[e+128>>2]|0;do if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+192>>2]|0;if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}}while(0);h=c[e+104>>2]|0;f=c[e+108>>2]|0;do if(h|0){if((f|0)>=1){f=h+((f+-1|0)*20|0)|0;do{g=a[f+1>>0]|0;if(g<<24>>24<-6)kg(d,g<<24>>24,c[f+16>>2]|0);f=f+-20|0}while(f>>>0>=h>>>0)}if(d|0){if(c[d+480>>2]|0){Xd(d,h);break}t=h;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[h>>2]=c[t>>2];c[t>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);f=c[s>>2]|0;do if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+188>>2]|0;if(!f)return;if(d|0){if(c[d+480>>2]|0){Xd(d,f);return}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);return}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);return}}function lb(a,b){a=a|0;b=b|0;var d=0;if(!b)return;if(a|0){if(c[a+480>>2]|0){Xd(a,b);return}d=b;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[b>>2]=c[d>>2];c[d>>2]=b;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function mb(){var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;n=p+8|0;b=p;if(c[7380]|0){o=0;Ra=p;return o|0}c[7382]=1;if(!(c[7383]|0)){if(!(c[7335]|0)){c[b>>2]=30308;xd(4,b)|0};c[14764]=0;c[14765]=0;c[14766]=0;c[14767]=0;c[14768]=0;c[14769]=0;c[14764]=8;if((c[7374]|0)==0|(c[7375]|0)<512|(c[7376]|0)<1){c[7374]=0;c[7375]=0}b=Wa[c[29360>>2]&127](c[7342]|0)|0;if(b|0){c[14764]=0;c[14765]=0;c[14766]=0;c[14767]=0;c[14768]=0;c[14769]=0;o=b;Ra=p;return o|0}}c[7383]=1;if(!(c[7386]|0))c[7386]=8;e=(c[7385]|0)+1|0;c[7385]=e;if(!(c[7381]|c[7380])){c[7381]=1;b=59088;e=b+92|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));k=c[5448]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;a:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=23;break a}}if(e){b=e+12|0;c[5443]=c[b>>2]}else o=23}else o=23;while(0);if((o|0)==23){c[5443]=0;c[5449]=j}c[b>>2]=21760;k=c[5458]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;b:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=35;break b}}if(e){b=e+12|0;c[5453]=c[b>>2]}else o=35}else o=35;while(0);if((o|0)==35){c[5453]=0;c[5459]=j}c[b>>2]=21800;k=c[5468]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;c:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=47;break c}}if(e){b=e+12|0;c[5463]=c[b>>2]}else o=47}else o=47;while(0);if((o|0)==47){c[5463]=0;c[5469]=j}c[b>>2]=21840;l=0;do{m=21888+(l*40|0)|0;k=c[21888+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;d:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;h=a[g>>0]|0;f=(d[208+(h&255)>>0]|0)-i|0;if(!(h<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=60;break d}}if(e){b=e+12|0;c[21888+(l*40|0)+12>>2]=c[b>>2]}else o=60}else o=60;while(0);if((o|0)==60){o=0;c[21888+(l*40|0)+12>>2]=0;c[21888+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=15);l=0;do{m=22496+(l*40|0)|0;k=c[22496+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;e:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-i|0;if(!(q<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=74;break e}}if(e){b=e+12|0;c[22496+(l*40|0)+12>>2]=c[b>>2]}else o=74}else o=74;while(0);if((o|0)==74){o=0;c[22496+(l*40|0)+12>>2]=0;c[22496+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=8);l=0;do{m=19424+(l*40|0)|0;k=c[19424+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;f:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-i|0;if(!(q<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=88;break f}}if(e){b=e+12|0;c[19424+(l*40|0)+12>>2]=c[b>>2]}else o=88}else o=88;while(0);if((o|0)==88){o=0;c[19424+(l*40|0)+12>>2]=0;c[19424+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=57);if(!(c[7384]|0)){b=c[7354]|0;if(!b){c[n>>2]=30340;xd(18,n)|0;b=c[7354]|0}b=Wa[b&127](c[7353]|0)|0;if(!b)o=94}else o=94;g:do if((o|0)==94){c[7384]=1;if(!(mb()|0)){do if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](10)|0;if(!b){b=7;break g}}else{b=Wa[c[29356>>2]&127](10)|0;if((c[14985]|0)>>>0<10)c[14985]=10;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){q=c[14978]|0;o=Tv(e|0,f|0,b|0,((b|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=q>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){b=7;break g}e=Wa[c[29352>>2]&127](b)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0)break;c[14987]=e}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{q=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==464){b=c[119]|0;c[14770]=b}else{if(!b){b=0;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=464&(f|0)!=0)e=f;else break}if((f|0)!=464)break;c[e+12>>2]=c[119]}while(0);c[119]=b;c[14770]=464}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==552){b=c[141]|0;c[14770]=b;o=138}else{if(!b){o=140;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=552&(f|0)!=0)e=f;else break}if((f|0)!=552){o=138;break}c[e+12>>2]=c[141];o=138}while(0);do if((o|0)==138){if(!b){o=140;break}b=b+12|0;c[141]=c[b>>2]}while(0);if((o|0)==140){c[141]=0;b=59080}c[b>>2]=552}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==640){b=c[163]|0;c[14770]=b;o=150}else{if(!b){o=152;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=640&(f|0)!=0)e=f;else break}if((f|0)!=640){o=150;break}c[e+12>>2]=c[163];o=150}while(0);do if((o|0)==150){if(!b){o=152;break}b=b+12|0;c[163]=c[b>>2]}while(0);if((o|0)==152){c[163]=0;b=59080}c[b>>2]=640}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==728){b=c[185]|0;c[14770]=b;o=162}else{if(!b){o=164;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=728&(f|0)!=0)e=f;else break}if((f|0)!=728){o=162;break}c[e+12>>2]=c[185];o=162}while(0);do if((o|0)==162){if(!b){o=164;break}b=b+12|0;c[185]=c[b>>2]}while(0);if((o|0)==164){c[185]=0;b=59080}c[b>>2]=728}b=c[7374]|0;if(c[14810]|0){i=(b|0)==0;j=i?0:c[7376]|0;e=(j|0)==0;i=i|e?0:c[7375]&-8;c[14813]=i;c[14820]=j;c[14814]=j;if((j|0)>90)f=10;else f=((j|0)/10|0)+1|0;c[14815]=f;c[14816]=b;c[14819]=0;c[14821]=0;if(!e){g=G(i,j+-1|0)|0;e=b;f=j;h=0;while(1){f=f+-1|0;c[e>>2]=h;h=e;if(!f)break;else e=e+i|0}q=G(i,j)|0;c[14819]=b+g;b=b+q|0}c[14817]=b}c[7380]=1;b=0}else b=7}while(0);c[7381]=0;e=c[7385]|0}else b=0;c[7385]=e+-1;if((e|0)>=2){q=b;Ra=p;return q|0}c[7386]=0;q=b;Ra=p;return q|0}function nb(a){a=a|0;var b=0,d=0,e=0;if((a|0)<1|(mb()|0)!=0){d=0;return d|0}d=Sv(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;b=L()|0;if(b>>>0>0|(b|0)==0&d>>>0>2147483390){d=0;return d|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](a)|0;return d|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;b=59064;a=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&a>>>0>0){e=c[14978]|0;b=Tv(a|0,b|0,d|0,((d|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&b>>>0<=e>>>0)&1}b=Wa[c[29340>>2]&127](d)|0;if(!b){e=0;return e|0}a=Wa[c[29352>>2]&127](b)|0;a=(c[14978]|0)+a|0;c[14978]=a;if(a>>>0>(c[14982]|0)>>>0)c[14982]=a;a=(c[14981]|0)+1|0;c[14981]=a;if(a>>>0<=(c[14987]|0)>>>0){e=b;return e|0}c[14987]=a;e=b;return e|0}function ob(a,b){a=a|0;b=b|0;var d=0,e=0;d=Sv(a|0,b|0,-1,-1)|0;b=L()|0;if(b>>>0>0|(b|0)==0&d>>>0>2147483390){d=0;return d|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](a)|0;return d|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;a=59064;b=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&b>>>0>0){e=c[14978]|0;a=Tv(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&a>>>0<=e>>>0)&1}a=Wa[c[29340>>2]&127](d)|0;if(!a){e=0;return e|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0<=(c[14987]|0)>>>0){e=a;return e|0}c[14987]=b;e=a;return e|0}function pb(a,b){a=a|0;b=b|0;var d=0,e=0;d=(mb()|0)!=0;b=Sv(a|0,b|0,-1,-1)|0;e=L()|0;if(e>>>0>0|(e|0)==0&b>>>0>2147483390|d){e=0;return e|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](a)|0;return e|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;a=59064;b=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&b>>>0>0){e=c[14978]|0;a=Tv(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&a>>>0<=e>>>0)&1}a=Wa[c[29340>>2]&127](d)|0;if(!a){e=0;return e|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0<=(c[14987]|0)>>>0){e=a;return e|0}c[14987]=b;e=a;return e|0}function qb(a){a=a|0;var b=0;if(!a)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function rb(a){a=a|0;return Wa[c[29352>>2]&127](a)|0}function sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if(!a){e=Sv(b|0,d|0,-1,-1)|0;a=L()|0;if(a>>>0>0|(a|0)==0&e>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](b)|0;return e|0}a=Wa[c[29356>>2]&127](b)|0;if((c[14985]|0)>>>0<b>>>0)c[14985]=b;b=59064;d=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&d>>>0>0){e=c[14978]|0;b=Tv(d|0,b|0,a|0,((a|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&b>>>0<=e>>>0)&1}b=Wa[c[29340>>2]&127](a)|0;if(!b){e=0;return e|0}d=Wa[c[29352>>2]&127](b)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0<=(c[14987]|0)>>>0){e=b;return e|0}c[14987]=d;e=b;return e|0}if((b|0)==0&(d|0)==0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);e=0;return e|0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);e=0;return e|0}if(d>>>0>0|(d|0)==0&b>>>0>2147483391){e=0;return e|0}e=Wa[c[29352>>2]&127](a)|0;d=Wa[c[29356>>2]&127](b)|0;if((d|0)==(e|0)){e=a;return e|0}if(!(c[7324]|0)){e=Xa[c[29348>>2]&255](a,d)|0;return e|0}if((c[14985]|0)>>>0<b>>>0)c[14985]=b;b=Xa[c[29348>>2]&255](a,d)|0;f=59064;g=c[f+4>>2]|0;if((b|0)==0&((g|0)>0|(g|0)==0&(c[f>>2]|0)>>>0>0))b=Xa[c[29348>>2]&255](a,d)|0;if(!b){g=0;return g|0}d=(Wa[c[29352>>2]&127](b)|0)-e|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0<=(c[14982]|0)>>>0){g=b;return g|0}c[14982]=d;g=b;return g|0}function tb(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=Ra;Ra=Ra+96|0;X=fa+80|0;Z=fa+72|0;_=fa;ba=f+21|0;if(!(a[ba>>0]&2)){I=1;J=0}else{I=(c[i>>2]|0)+(4-1)&~(4-1);J=c[I>>2]|0;c[i>>2]=I+4;I=0}Q=J+4|0;R=J+8|0;ca=f+16|0;da=f+8|0;ea=f+4|0;S=f+20|0;T=_+1|0;U=_+2|0;V=_+3|0;W=f+12|0;j=0;H=0;a:while(1){switch(a[h>>0]|0){case 0:{F=543;break a}case 37:{z=j;break}default:{j=h;b:while(1){j=j+1|0;switch(a[j>>0]|0){case 37:case 0:break b;default:{}}}k=j-h|0;l=c[ca>>2]|0;m=l+k|0;if(m>>>0<(c[da>>2]|0)>>>0){if(k|0){c[ca>>2]=m;ew((c[ea>>2]|0)+l|0,h|0,k|0)|0}}else wb(f,h,k);if(!(a[j>>0]|0)){F=543;break a}else{z=h;h=j}}}l=h+1|0;h=a[l>>0]|0;if(!(h<<24>>24)){F=13;break}k=h<<24>>24;m=-1;h=0;y=0;j=0;x=0;E=0;D=0;v=0;w=l;c:while(1){switch(k|0){case 108:{F=24;break c}case 45:{p=x;q=E;u=D;n=1;k=w;break}case 43:{j=43;p=x;q=E;u=D;n=y;k=w;break}case 32:{j=32;p=x;q=E;u=D;n=y;k=w;break}case 35:{p=1;q=E;u=D;n=y;k=w;break}case 33:{p=x;q=1;u=D;n=y;k=w;break}case 48:{p=x;q=E;u=1;n=y;k=w;break}case 44:{p=x;q=E;u=D;v=44;n=y;k=w;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{h=k+-48|0;n=w+1|0;p=a[n>>0]|0;l=p<<24>>24;if((p+-48&255)<10){k=n;while(1){h=l+(h*10|0)+-48|0;n=k+1|0;p=a[n>>0]|0;l=p<<24>>24;if((p+-48&255)<10)k=n;else break}}else k=w;h=h&2147483647;switch(p<<24>>24){case 46:case 108:{p=x;q=E;u=D;n=y;break}default:{G=n;n=0;k=l;break c}}break}case 42:{do if(!I){h=c[Q>>2]|0;if((c[J>>2]|0)>(h|0)){k=c[R>>2]|0;c[Q>>2]=h+1;h=c[k+(h<<2)>>2]|0;k=e[h+8>>1]|0;if(k&4|0){h=c[h>>2]|0;F=39;break}if(k&8|0){h=Mg(+g[h>>3])|0;L()|0;F=39;break}if(k&18){h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;F=39}else{h=0;F=40}}else{h=0;F=40}}else{F=(c[i>>2]|0)+(4-1)&~(4-1);h=c[F>>2]|0;c[i>>2]=F+4;F=39}while(0);if((F|0)==39){F=0;if((h|0)<0){l=1;h=(h|0)==-2147483648?0:0-h|0}else F=40}if((F|0)==40){F=0;l=y}k=a[w+1>>0]|0;switch(k<<24>>24){case 46:case 108:{p=x;q=E;u=D;n=l;k=w;break}default:{F=61;break c}}break}case 46:{l=w+1|0;k=a[l>>0]|0;if(k<<24>>24==42){do if(!I){k=c[Q>>2]|0;if((c[J>>2]|0)>(k|0)){l=c[R>>2]|0;c[Q>>2]=k+1;k=c[l+(k<<2)>>2]|0;l=e[k+8>>1]|0;if(l&4|0){k=c[k>>2]|0;F=52;break}if(l&8|0){k=Mg(+g[k>>3])|0;L()|0;F=52;break}if(l&18){k=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0;F=52}else k=0}else k=0}else{F=(c[i>>2]|0)+(4-1)&~(4-1);k=c[F>>2]|0;c[i>>2]=F+4;F=52}while(0);if((F|0)==52){F=0;k=(k|0)<0?((k|0)==-2147483648?-1:0-k|0):k}l=w+2|0;p=a[l>>0]|0}else{k=k<<24>>24;if((k+-48|0)>>>0<10){n=0;do{n=k+-48+(n*10|0)|0;l=l+1|0;m=a[l>>0]|0;k=m<<24>>24}while((k+-48|0)>>>0<10);k=m<<24>>24}else n=0;p=k;k=n&2147483647}if((p|0)==108){p=x;q=E;u=D;n=y;m=k;k=l+-1|0}else{G=l;n=0;m=k;k=p;break c}break}default:{G=w;n=0;break c}}l=k+1|0;k=a[l>>0]|0;if(!(k<<24>>24)){F=543;break a}else{k=k<<24>>24;y=n;x=p;E=q;D=u;w=l}}if((F|0)==24){F=0;k=w+1|0;l=a[k>>0]|0;if(l<<24>>24==108){k=w+2|0;G=k;n=2;k=a[k>>0]|0}else{G=k;n=1;k=l<<24>>24}}else if((F|0)==61){F=0;G=w+1|0;y=l;n=0;k=k<<24>>24}d:do switch(k|0){case 100:{C=0;break}case 115:{C=1;break}case 103:{C=2;break}case 122:{C=3;break}case 113:{C=4;break}case 81:{C=5;break}case 119:{C=6;break}case 99:{C=7;break}case 111:{C=8;break}case 117:{C=9;break}case 120:{C=10;break}case 88:{C=11;break}case 102:{C=12;break}case 101:{C=13;break}case 69:{C=14;break}case 71:{C=15;break}case 105:{C=16;break}case 110:{C=17;break}case 37:{C=18;break}case 112:{C=19;break}case 84:{C=20;break}default:{switch(k|0){case 83:{C=21;break d}case 114:break;default:{F=543;break a}}C=22}}while(0);k=a[16+(C*6|0)+3>>0]|0;e:do switch(k<<24>>24){case 13:{k=1;F=86;break}case 0:case 15:{k=n;F=86;break}case 16:{k=n;F=87;break}case 3:case 2:case 1:{do if(I){F=(c[i>>2]|0)+(8-1)&~(8-1);o=+g[F>>3];c[i>>2]=F+8;F=208}else{l=c[Q>>2]|0;if((c[J>>2]|0)>(l|0)){n=c[R>>2]|0;c[Q>>2]=l+1;l=c[n+(l<<2)>>2]|0;n=e[l+8>>1]|0;if(n&8|0){o=+g[l>>3];F=208;break}if(n&4|0){F=l;o=+((c[F>>2]|0)>>>0)+4294967296.0*+(c[F+4>>2]|0);F=208;break}if(n&18|0){o=+Kg(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0);F=208;break}}o=0.0;B=j;l=(m|0)<0?6:m}while(0);if((F|0)==208){F=0;l=(m|0)<0?6:m;if(o<0.0){o=-o;B=45}else B=j}q=(C|0)==2|(C|0)==15;p=l+((q&(l|0)>0)<<31>>31)|0;j=p&4095;if(!j)r=.5;else{r=.5;while(1){r=r*.1;if((j|0)>1)j=j+-1|0;else break}}n=(C|0)==12;o=n?o+r:o;g[X>>3]=o;g[Z>>3]=+g[X>>3];if(+g[X>>3]==+g[Z>>3]){if(o>0.0){s=1.0;m=0;while(1){t=s*1.e+100;if(m>>>0<351&o>=t){s=t;m=m+100|0}else break}while(1){t=s*1.0e10;if(m>>>0<351&o>=t){s=t;m=m+10|0}else break}while(1){t=s*10.0;if(m>>>0<351&o>=t){s=t;m=m+1|0}else break}o=o/s;if(o<1.0e-08)do{o=o*1.0e8;m=m+-8|0}while(o<1.0e-08);if(o<1.0)do{o=o*10.0;m=m+-1|0}while(o<1.0);j=B<<24>>24!=0;if((m|0)>350){n=_+(j&1)|0;a[_>>0]=B;a[n>>0]=73;a[n+1>>0]=110;a[n+2>>0]=102;a[n+3>>0]=0;n=j?4:3;j=_;m=H;q=0;break e}}else m=0;if(!n){o=r+o;if(o>=10.0){o=o*.1;m=m+1|0}}z=(m|0)<-4|(p|0)<(m|0);A=q?x<<24>>24==0&1:E;l=q?p-(z?0:m)|0:l;z=(q?(z?2:1):k)<<24>>24==2;p=z?0:m;j=Sv(l|0,((l|0)<0)<<31>>31|0,h|0,((h|0)<0)<<31>>31|0)|0;j=Sv(j|0,L()|0,((p|0)>0?p:0)|0,0)|0;k=L()|0;f:do if((k|0)>0|(k|0)==0&j>>>0>55){u=Sv(j|0,k|0,15,0)|0;n=L()|0;if(a[S>>0]|0){F=543;break a}if((n|0)>0|((n|0)==0?u>>>0>(c[da>>2]|0)>>>0:0)?($=c[W>>2]|0,(n|0)>0|(n|0)==0&u>>>0>$>>>0):0){F=236;break a}q=c[f>>2]|0;g:do if(!q){w=Sv(j|0,k|0,14,0)|0;v=L()|0;if(v>>>0>0|(v|0)==0&w>>>0>2147483390){F=278;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](u)|0;break}n=Wa[c[29356>>2]&127](u)|0;if((c[14985]|0)>>>0<u>>>0)c[14985]=u;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){w=c[14978]|0;v=Tv(j|0,k|0,n|0,((n|0)<0)<<31>>31|0)|0;u=L()|0;c[14768]=((u|0)<0|(u|0)==0&v>>>0<=w>>>0)&1}k=Wa[c[29340>>2]&127](n)|0;if(!k){F=278;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){j=k;q=k;break f}c[14987]=j;j=k;q=k;break f}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){F=278;break a}}else{do if(!(n>>>0>0|((n|0)==0?u>>>0>(e[q+276>>1]|0)>>>0:0))){j=q+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];w=q+284|0;c[w>>2]=(c[w>>2]|0)+1;break g}j=q+296|0;k=c[j>>2]|0;if(!k){j=q+292|0;break}else{c[j>>2]=c[k>>2];w=q+284|0;c[w>>2]=(c[w>>2]|0)+1;break g}}else j=q+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}k=_d(q,u,n)|0}while(0);if(!k){F=278;break a}else{j=k;q=k}}else{j=_;q=0}while(0);n=((E&255)*10|0)+16|0;v=(E|x)&255|(l|0)>0;if(!(B<<24>>24))k=j;else{a[j>>0]=B;k=j+1|0}if((p|0)<0){a[k>>0]=48;k=k+1|0}else{u=k;while(1){w=(n|0)<1;x=~~o;o=w?o:(o-+(x|0))*10.0;n=n+((w^1)<<31>>31)|0;k=u+1|0;a[u>>0]=w?48:x+48&255;if((p|0)>0){u=k;p=p+-1|0}else{p=-1;break}}}w=(v|0)==0;if(!w){a[k>>0]=46;k=k+1|0}if((p|0)<-1){gw(k|0,48,~p|0)|0;while(1){k=k+1|0;l=l+-1|0;if((p|0)<-2)p=p+1|0;else break}}if((l|0)>0){v=n;while(1){n=(v|0)<1;p=~~o;u=k+1|0;a[k>>0]=n?48:p+48&255;if((l|0)>1){l=l+-1|0;k=u;v=v+((n^1)<<31>>31)|0;o=n?o:(o-+(p|0))*10.0}else{k=u;break}}}h:do if(!(A<<24>>24==0|w)){i:while(1){l=k+-1|0;switch(a[l>>0]|0){case 46:break i;case 48:break;default:break h}a[l>>0]=0;k=l}if(!(E<<24>>24)){a[l>>0]=0;k=l;break}else{a[k>>0]=48;k=k+1|0;break}}while(0);if(z){n=k+1|0;a[k>>0]=a[160+(d[16+(C*6|0)+4>>0]|0)>>0]|0;l=k+2|0;if((m|0)<0){a[n>>0]=45;m=0-m|0}else a[n>>0]=43;if((m|0)>99){E=(m>>>0)/100|0;a[l>>0]=E+48;l=k+3|0;k=m-(E*100|0)|0}else k=m;E=(k|0)/10|0;a[l>>0]=E+48;a[l+1>>0]=k-(E*10|0)+48;k=l+2|0}a[k>>0]=0;k=k-j|0;if(y<<24>>24==0&D<<24>>24!=0&(h|0)>(k|0)){l=h-k|0;if((k|0)>=0){k=h;while(1){a[j+k>>0]=a[j+(k-l)>>0]|0;if((k|0)>(l|0))k=k+-1|0;else break}}if(!l){n=h;m=H}else{gw(j+(B<<24>>24!=0&1)|0,48,l|0)|0;n=h;m=H}}else{n=k;m=H}}else{n=3;j=31167;m=H;q=0}break}case 4:{if(I){h=c[ca>>2]|0;j=(c[i>>2]|0)+(4-1)&~(4-1);n=c[j>>2]|0;c[i>>2]=j+4;c[n>>2]=h;n=0;h=0;j=z;m=H;q=0}else{n=0;h=0;j=z;m=H;q=0}break}case 7:{a[_>>0]=37;n=1;j=_;m=H;q=0;break}case 8:{j:do if(I){F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4;if(j>>>0<128){a[_>>0]=j;n=1;break}if(j>>>0<2048){a[_>>0]=j>>>6&31|192;a[T>>0]=j&63|128;n=2;break}if(j>>>0<65536){a[_>>0]=j>>>12&15|224;a[T>>0]=j>>>6&63|128;a[U>>0]=j&63|128;n=3;break}else{a[_>>0]=j>>>18&7|240;a[T>>0]=j>>>12&63|128;a[U>>0]=j>>>6&63|128;a[V>>0]=j&63|128;n=4;break}}else{j=c[Q>>2]|0;do if((c[J>>2]|0)>(j|0)?(aa=c[R>>2]|0,c[Q>>2]=j+1,aa=c[aa+(j<<2)>>2]|0,aa|0):0){j=b[aa+8>>1]|0;if((j&514)==514?(a[aa+10>>0]|0)==1:0)k=c[aa+16>>2]|0;else{if(j&1)break;k=Gg(aa,1)|0}if(k|0){F=a[k>>0]|0;a[_>>0]=F;if((F&255)<=191){n=1;break j}j=a[k+1>>0]|0;if((j&-64)<<24>>24!=-128){n=1;break j}a[T>>0]=j;j=a[k+2>>0]|0;if((j&-64)<<24>>24!=-128){n=2;break j}a[U>>0]=j;j=a[k+3>>0]|0;if((j&-64)<<24>>24!=-128){n=3;break j}a[V>>0]=j;n=4;break j}}while(0);a[_>>0]=0;n=1}while(0);if((m|0)>1){h=1-m+h|0;do if(!((h|0)<2|y<<24>>24!=0)){h=h+-1|0;F=Sv(c[ca>>2]|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?F>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)<1){h=0;break}}while(1){E=c[ea>>2]|0;F=c[ca>>2]|0;c[ca>>2]=F+1;a[E+F>>0]=32;if((h|0)>1)h=h+-1|0;else{h=0;break}}}while(0);j=m;while(1){k=c[ca>>2]|0;l=k+n|0;if(l>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,_|0,n|0)|0}else wb(f,_,n);if((j|0)>2)j=j+-1|0;else{j=_;m=1;q=0;k=n;F=395;break}}}else{j=_;m=1;q=0;k=n;F=395}break}case 6:case 5:{do if(!I){j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)?(K=c[R>>2]|0,c[Q>>2]=j+1,K=c[K+(j<<2)>>2]|0,(K|0)!=0):0){j=b[K+8>>1]|0;if((j&514)==514?(a[K+10>>0]|0)==1:0){j=c[K+16>>2]|0;k=5;F=369;break}if(!(j&1)){j=Gg(K,1)|0;k=5;F=369}else{p=59952;k=0;F=380}}else{p=59952;k=0;F=380}}else{F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4;F=369}while(0);if((F|0)==369){F=0;if(j)if(k<<24>>24==6)if((c[ca>>2]|0)==0?(m|0)<0&((h|0)==0&(c[W>>2]|0)!=0):0)if(!(a[S>>0]|0)){c[ea>>2]=j;h=c[f>>2]|0;if(((h|0)!=0?(M=j,(c[h+304>>2]|0)>>>0<=M>>>0):0)?(c[h+308>>2]|0)>>>0>M>>>0:0)h=e[h+276>>1]|0;else h=Wa[c[29352>>2]&127](j)|0;c[da>>2]=h;n=(Eu(j)|0)&2147483647;c[ca>>2]=n;a[ba>>0]=a[ba>>0]|4;n=0;h=0;m=H;q=0;break e}else{l=j;h=0;k=j}else{p=j;k=j;F=380}else{p=j;k=0;F=380}else{p=59952;k=0;F=380}}if((F|0)==380){F=0;if((m|0)>-1){j=(m|0)!=0;if(!(E<<24>>24)){if(!j){n=0;j=p;m=H;q=k;break e}j=0;while(1){if(!(a[p+j>>0]|0)){n=j;j=p;m=H;q=k;break e}j=j+1|0;if((j|0)>=(m|0)){n=j;j=p;m=H;q=k;break e}}}k:do if(j){j=p;while(1){n=m;m=m+-1|0;l=a[j>>0]|0;if(!(l<<24>>24)){l=j;break k}j=j+1|0;if((l&255)>191)while(1)if((a[j>>0]&-64)<<24>>24==-128)j=j+1|0;else break;if((n|0)<=1){l=j;break}}}else l=p;while(0);j=p;m=E;q=k;k=l-p|0;F=395;break e}else l=p}j=l;m=E;q=k;k=(Eu(l)|0)&2147483647;F=395;break}case 14:case 10:case 9:{x=(C|0)==6?34:39;do if(!I){j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)?(N=c[R>>2]|0,c[Q>>2]=j+1,N=c[N+(j<<2)>>2]|0,(N|0)!=0):0){j=b[N+8>>1]|0;if((j&514)==514?(a[N+10>>0]|0)==1:0){j=c[N+16>>2]|0;break}if(!(j&1))j=Gg(N,1)|0;else j=0}else j=0}else{F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4}while(0);q=(j|0)==0;p=(C|0)==5;w=q?(p?31171:31176):j;l:do if(!m){l=0;v=0}else{n=x&255;if(!(E<<24>>24)){l=0;k=0;while(1){j=a[w+k>>0]|0;if(!(j<<24>>24)){v=k;break l}j=l+((j<<24>>24|0)==(n|0)&1)|0;k=k+1|0;m=m+-1|0;if(!m){l=j;v=k;break l}else l=j}}l=0;j=0;while(1){F=a[w+j>>0]|0;k=F<<24>>24;if(!(F<<24>>24)){v=j;break l}l=l+((k|0)==(n|0)&1)|0;if((k&192|0)==192)do j=j+1|0;while((a[w+j>>0]&-64)<<24>>24==-128);else j=j+1|0;m=m+-1|0;if(!m){v=j;break}}}while(0);u=p&(q^1);n=v+3+l|0;m:do if((n|0)>70){l=((n|0)<0)<<31>>31;if(a[S>>0]|0){F=543;break a}if(0<(l|0)|(0==(l|0)?(c[da>>2]|0)>>>0<n>>>0:0)?(O=c[W>>2]|0,0<(l|0)|0==(l|0)&O>>>0<n>>>0):0){F=423;break a}m=c[f>>2]|0;n:do if(!m){F=Sv(n|0,l|0,-1,-1)|0;D=L()|0;if(D>>>0>0|(D|0)==0&F>>>0>2147483390){F=465;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){F=c[14978]|0;D=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;C=L()|0;c[14768]=((C|0)<0|(C|0)==0&D>>>0<=F>>>0)&1}k=Wa[c[29340>>2]&127](l)|0;if(!k){F=465;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){j=k;q=k;break m}c[14987]=j;j=k;q=k;break m}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){F=465;break a}}else{do if(!(0<l>>>0|(0==(l|0)?(e[m+276>>1]|0)>>>0<n>>>0:0))){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];F=m+284|0;c[F>>2]=(c[F>>2]|0)+1;break n}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];F=m+284|0;c[F>>2]=(c[F>>2]|0)+1;break n}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}k=_d(m,n,l)|0}while(0);if(!k){F=465;break a}else{j=k;q=k}}else{j=_;q=0}while(0);if(u){a[j>>0]=x;k=1}else k=0;if((v|0)>0){p=x&255;n=0;do{l=a[w+n>>0]|0;m=k+1|0;a[j+k>>0]=l;if((l<<24>>24|0)==(p|0)){a[j+m>>0]=l;k=k+2|0}else k=m;n=n+1|0}while((n|0)!=(v|0))}if(u){a[j+k>>0]=x;k=k+1|0}a[j+k>>0]=0;m=E;F=395;break}case 11:{if(!(a[ba>>0]&1)){F=543;break a}E=(c[i>>2]|0)+(4-1)&~(4-1);h=c[E>>2]|0;c[i>>2]=E+4;if((h|0)!=0?(P=c[h+4>>2]|0,(P|0)!=0):0){h=c[h>>2]|0;j=c[ca>>2]|0;k=j+P|0;if(k>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=k;ew((c[ea>>2]|0)+j|0,h|0,P|0)|0;n=0;h=0;j=z;m=H;q=0;break e}else{wb(f,h,P);n=0;h=0;j=z;m=H;q=0;break e}}else{n=0;h=0;j=z;m=H;q=0}break}case 12:{if(!(a[ba>>0]&1)){F=543;break a}h=(c[i>>2]|0)+(4-1)&~(4-1);m=c[h>>2]|0;c[i>>2]=h+4;h=(c[i>>2]|0)+(4-1)&~(4-1);n=c[h>>2]|0;c[i>>2]=h+4;h=c[m+8+(n*72|0)+4>>2]|0;do if(h|0){j=(Eu(h)|0)&1073741823;k=c[ca>>2]|0;l=k+j|0;if(l>>>0<(c[da>>2]|0)>>>0){if(j|0){c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,h|0,j|0)|0}}else wb(f,h,j);h=c[ca>>2]|0;j=h+1|0;if(j>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=j;a[(c[ea>>2]|0)+h>>0]=46;break}else{wb(f,31183,1);break}}while(0);j=c[m+8+(n*72|0)+8>>2]|0;if(!j)h=0;else h=(Eu(j)|0)&1073741823;k=c[ca>>2]|0;l=k+h|0;if(l>>>0>=(c[da>>2]|0)>>>0){wb(f,j,h);n=0;h=0;j=z;m=H;q=0;break e}if(!h){n=0;h=0;j=z;m=H;q=0}else{c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,j|0,h|0)|0;n=0;h=0;j=z;m=H;q=0}break}default:{F=543;break a}}while(0);if((F|0)==86){v=0;F=87}else if((F|0)==395){F=0;if(m<<24>>24!=0&(h|0)>0&(k|0)>0){l=k;do{E=l;l=l+-1|0;h=h+((a[j+l>>0]&-64)<<24>>24==-128&1)|0}while((E|0)>1);n=k;m=H}else{n=k;m=H}}if((F|0)==87){F=0;o:do if(4067322>>>C&1){if(I)switch(k<<24>>24){case 0:{j=(c[i>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[i>>2]=j+4;j=0;k=0;F=113;break o}case 2:{j=(c[i>>2]|0)+(8-1)&~(8-1);k=j;l=c[k>>2]|0;k=c[k+4>>2]|0;c[i>>2]=j+8;j=0;F=113;break o}default:{j=(c[i>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[i>>2]=j+4;j=0;k=0;F=113;break o}}j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)){k=c[R>>2]|0;c[Q>>2]=j+1;j=c[k+(j<<2)>>2]|0;k=e[j+8>>1]|0;if(k&4|0){k=j;j=0;l=c[k>>2]|0;k=c[k+4>>2]|0;F=113;break}if(k&8|0){l=Mg(+g[j>>3])|0;j=0;k=L()|0;F=113;break}if(k&18){l=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;j=0;k=L()|0;F=113}else{j=0;F=114}}else{j=0;F=114}}else{do if(I)if(k<<24>>24!=2){p=(c[i>>2]|0)+(4-1)&~(4-1);n=c[p>>2]|0;c[i>>2]=p+4;p=((n|0)<0)<<31>>31;l=Tv(0,0,n|0,p|0)|0;k=L()|0;if((n|0)<0)break;else{l=n;k=p;F=113;break o}}else{F=(c[i>>2]|0)+(8-1)&~(8-1);k=F;l=c[k>>2]|0;k=c[k+4>>2]|0;c[i>>2]=F+8;F=99;break}else{k=c[Q>>2]|0;if((c[J>>2]|0)<=(k|0)){F=114;break o}l=c[R>>2]|0;c[Q>>2]=k+1;k=c[l+(k<<2)>>2]|0;l=e[k+8>>1]|0;if(l&4|0){l=k;k=c[l+4>>2]|0;l=c[l>>2]|0;F=99;break}if(l&8|0){l=Mg(+g[k>>3])|0;k=L()|0;F=99;break}if(!(l&18)){F=114;break o}l=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;k=L()|0;F=99}while(0);if((F|0)==99){p=(l|0)==0&(k|0)==-2147483648;n=Tv(0,0,l|0,k|0)|0;q=L()|0;if((k|0)<0){l=p?0:n;k=p?-2147483648:q}else{F=113;break}}j=45;F=113}while(0);if((F|0)==113){F=0;if((l|0)==0&(k|0)==0)F=114;else z=j}if((F|0)==114){F=0;z=j;l=0;k=0;x=0}u=h-(z<<24>>24!=0&1)|0;u=D<<24>>24==0?m:(m|0)<(u|0)?u:m;if((u|0)<37){n=_;q=0;w=70}else{m=Sv(u|0,((u|0)<0)<<31>>31|0,10,0)|0;j=L()|0;if(!(v<<24>>24))q=j;else{m=Sv(m|0,j|0,(u>>>0)/3|0|0,0)|0;q=L()|0}if(a[S>>0]|0){F=543;break}if((q|0)>0|((q|0)==0?m>>>0>(c[da>>2]|0)>>>0:0)?(Y=c[W>>2]|0,(q|0)>0|(q|0)==0&m>>>0>Y>>>0):0){F=121;break}p=c[f>>2]|0;p:do if(!p){E=Sv(m|0,q|0,-1,-1)|0;D=L()|0;if(D>>>0>0|(D|0)==0&E>>>0>2147483390){F=164;break a}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;F=162;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;p=59064;n=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&n>>>0>0){E=c[14978]|0;D=Tv(n|0,p|0,j|0,((j|0)<0)<<31>>31|0)|0;B=L()|0;c[14768]=((B|0)<0|(B|0)==0&D>>>0<=E>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){F=164;break a}n=Wa[c[29352>>2]&127](j)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0>(c[14987]|0)>>>0)c[14987]=n}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){F=164;break a}}else{do if(!(q>>>0>0|((q|0)==0?m>>>0>(e[p+276>>1]|0)>>>0:0))){n=p+300|0;j=c[n>>2]|0;if(j|0){c[n>>2]=c[j>>2];F=p+284|0;c[F>>2]=(c[F>>2]|0)+1;F=162;break p}n=p+296|0;j=c[n>>2]|0;if(!j){j=p+292|0;break}else{c[n>>2]=c[j>>2];F=p+284|0;c[F>>2]=(c[F>>2]|0)+1;F=162;break p}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,m,q)|0;F=162}while(0);if((F|0)==162){F=0;if(!j){F=164;break}}n=j;q=j;w=(j|0)==0?H:m}m=n+(w+-1)|0;if((C|0)==22){E=_v(l|0,k|0,10,0)|0;j=L()|0;H=Yv(E|0,j|0,10,0)|0;H=Tv(l|0,k|0,H|0,L()|0)|0;L()|0;j=$v(E|0,j|0,10,0)|0;j=(H|0)>3|(j|0)==1&(L()|0)==0;H=(j?0:H)<<1;j=m+-1|0;a[j>>0]=a[31151+(H|1)>>0]|0;j=j+-1|0;a[j>>0]=a[31151+H>>0]|0}else j=m;n=160+(d[16+(C*6|0)+4>>0]|0)|0;p=d[16+(C*6|0)+1>>0]|0;do{H=l;l=_v(l|0,k|0,p|0,0)|0;E=k;k=L()|0;D=Yv(l|0,k|0,p|0,0)|0;D=Tv(H|0,E|0,D|0,L()|0)|0;L()|0;j=j+-1|0;a[j>>0]=a[n+D>>0]|0}while(!(E>>>0<0|(E|0)==0&H>>>0<p>>>0));p=m;k=j;l=p-k|0;if((u|0)>(l|0)){j=j+(p-u-k)|0;gw(j|0,48,u+k-p|0)|0;l=u}if(v<<24>>24){k=l+-1|0;m=(k|0)/3|0;j=j+(0-m)|0;if((l|0)>3){k=k-(m*3|0)+1|0;l=0;do{a[j+l>>0]=a[j+(l+m)>>0]|0;k=k+-1|0;n=l+1|0;if(!k){a[j+n>>0]=v;k=3;m=m+-1|0;l=l+2|0}else l=n}while((m|0)>0)}}if(z<<24>>24){j=j+-1|0;a[j>>0]=z}if(x<<24>>24!=0?(7860991>>>C&1|0)==0:0){k=31160+(d[16+(C*6|0)+5>>0]|0)|0;l=k;k=a[k>>0]|0;do{j=j+-1|0;a[j>>0]=k;l=l+1|0;k=a[l>>0]|0}while(k<<24>>24!=0)}n=p-j|0;m=w}h=h-n|0;do if((h|0)>0){l=c[ca>>2]|0;if(!(y<<24>>24)){H=Sv(l|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?H>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)>=1)F=514}else F=514;if((F|0)==514){F=0;while(1){E=c[ea>>2]|0;H=c[ca>>2]|0;c[ca>>2]=H+1;a[E+H>>0]=32;if((h|0)>1)h=h+-1|0;else break}}h=c[ca>>2]|0;k=h+n|0;if(k>>>0>=(c[da>>2]|0)>>>0){wb(f,j,n);break}if(!n)break;c[ca>>2]=k;ew((c[ea>>2]|0)+h|0,j|0,n|0)|0;break}else{k=l+n|0;if(k>>>0<(c[da>>2]|0)>>>0){if(n|0){c[ca>>2]=k;ew((c[ea>>2]|0)+l|0,j|0,n|0)|0}}else wb(f,j,n);H=Sv(c[ca>>2]|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?H>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)<1)break}while(1){E=c[ea>>2]|0;H=c[ca>>2]|0;c[ca>>2]=H+1;a[E+H>>0]=32;if((h|0)>1)h=h+-1|0;else break}}}else{h=c[ca>>2]|0;k=h+n|0;if(k>>>0>=(c[da>>2]|0)>>>0){wb(f,j,n);break}if(n|0){c[ca>>2]=k;ew((c[ea>>2]|0)+h|0,j|0,n|0)|0}}while(0);do if(q|0){h=c[f>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,q);break}H=q;if((c[h+304>>2]|0)>>>0<=H>>>0?(c[h+308>>2]|0)>>>0>H>>>0:0){H=h+300|0;c[q>>2]=c[H>>2];c[H>>2]=q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{H=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);h=G+1|0;H=m}if((F|0)==13){h=c[ca>>2]|0;j=h+1|0;if(j>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=j;a[(c[ea>>2]|0)+h>>0]=37;Ra=fa;return}else{wb(f,31149,1);Ra=fa;return}}else if((F|0)==121){a[S>>0]=18;if(Y|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==164){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==236){a[S>>0]=18;if($|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==278){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==423){a[S>>0]=18;if(O|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==465){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==543){Ra=fa;return}}function ub(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+16|0;f=c[e>>2]|0;g=f+d|0;if(g>>>0>=(c[a+8>>2]|0)>>>0){wb(a,b,d);return}if(!d)return;c[e>>2]=g;ew((c[a+4>>2]|0)+f|0,b|0,d|0)|0;return}function vb(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;q=b+20|0;if(a[q>>0]|0){s=0;return s|0}p=b+12|0;i=c[p>>2]|0;if(!i){a[q>>0]=18;f=c[b>>2]|0;if(f|0?(g=c[f+236>>2]|0,g|0):0){c[g+12>>2]=18;s=g+36|0;c[s>>2]=(c[s>>2]|0)+1}s=(c[b+8>>2]|0)+-1-(c[b+16>>2]|0)|0;return s|0}s=b+21|0;g=a[s>>0]|0;f=(g&4)==0;if(f)j=0;else j=c[b+4>>2]|0;r=b+16|0;k=c[r>>2]|0;v=d+1|0;v=Sv(k|0,0,v|0,((v|0)<0)<<31>>31|0)|0;t=L()|0;k=Sv(v|0,t|0,k|0,0)|0;o=L()|0;u=(o|0)>0|(o|0)==0&k>>>0>i>>>0;k=u?v:k;o=u?t:o;if((o|0)>0|(o|0)==0&k>>>0>i>>>0){if(!f){f=c[b>>2]|0;h=b+4|0;g=c[h>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}v=g;if((c[f+304>>2]|0)>>>0<=v>>>0?(c[f+308>>2]|0)>>>0>v>>>0:0){v=f+300|0;c[g>>2]=c[v>>2];c[v>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{v=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=a[s>>0]&-5;a[s>>0]=g;v=c[p>>2]|0;f=b+8|0;c[f>>2]=0;c[r>>2]=0;c[h>>2]=0;a[q>>0]=18;if(v|0)n=23}else{f=b+8|0;c[f>>2]=0;c[r>>2]=0;c[b+4>>2]=0;a[q>>0]=18;n=23}if((n|0)==23){if(g&4)a[s>>0]=g&-5;c[f>>2]=0;c[r>>2]=0;c[b+4>>2]=0}f=c[b>>2]|0;if(!f){v=0;return v|0}f=c[f+236>>2]|0;if(!f){v=0;return v|0}c[f+12>>2]=18;v=f+36|0;c[v>>2]=(c[v>>2]|0)+1;v=0;return v|0}o=b+8|0;c[o>>2]=k;i=c[b>>2]|0;a:do if(!i){if(!(mb()|0)){h=sb(j,k,0)|0;n=49}}else{if(j|0){v=j;if((c[i+304>>2]|0)>>>0<=v>>>0?(c[i+308>>2]|0)>>>0>v>>>0:0){if(!(0>0|(0==0?k>>>0>(e[i+276>>1]|0)>>>0:0))){h=j;n=51;break}h=Zd(i,j,k,0)|0;n=49;break}h=Zd(i,j,k,0)|0;n=49;break}if(c[i+272>>2]|0){if(a[i+81>>0]|0)break}else{do if(!(0>0|(0==0?k>>>0>(e[i+276>>1]|0)>>>0:0))){f=i+300|0;h=c[f>>2]|0;if(h|0){c[f>>2]=c[h>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=49;break a}f=i+296|0;h=c[f>>2]|0;if(!h){f=i+292|0;break}else{c[f>>2]=c[h>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=49;break a}}else f=i+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}h=_d(i,k,0)|0;n=49}while(0);if((n|0)==49?h|0:0){g=a[s>>0]|0;n=51}if((n|0)==51){if((g&4)==0?(l=c[r>>2]|0,l|0):0)ew(h|0,c[b+4>>2]|0,l|0)|0;c[b+4>>2]=h;f=c[b>>2]|0;if(((f|0)!=0?(m=h,(c[f+304>>2]|0)>>>0<=m>>>0):0)?(c[f+308>>2]|0)>>>0>m>>>0:0)f=e[f+276>>1]|0;else f=Wa[c[29352>>2]&127](h)|0;c[o>>2]=f;a[s>>0]=a[s>>0]|4;v=d;return v|0}f=a[s>>0]|0;if(!(f&4))g=b+4|0;else{f=c[b>>2]|0;g=b+4|0;h=c[g>>2]|0;do if(h|0){if(f|0){if(c[f+480>>2]|0){Xd(f,h);break}v=h;if((c[f+304>>2]|0)>>>0<=v>>>0?(c[f+308>>2]|0)>>>0>v>>>0:0){v=f+300|0;c[h>>2]=c[v>>2];c[v>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{v=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);f=a[s>>0]&-5;a[s>>0]=f}c[o>>2]=0;c[r>>2]=0;c[g>>2]=0;a[q>>0]=7;if(!(c[p>>2]|0)){v=0;return v|0}if(f&4)a[s>>0]=f&-5;c[o>>2]=0;c[r>>2]=0;c[b+4>>2]=0;v=0;return v|0}function wb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;d=vb(a,d)|0;if((d|0)<=0)return;e=a+16|0;ew((c[a+4>>2]|0)+(c[e>>2]|0)|0,b|0,d|0)|0;c[e>>2]=(c[e>>2]|0)+d;return}function xb(a){a=a|0;if(!a){a=0;return a|0}a=(Eu(a)|0)&1073741823;return a|0}function yb(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0?(a[e+(c[b+16>>2]|0)>>0]=0,c[b+12>>2]|0):0)?(a[b+21>>0]&4)==0:0){e=$d(b)|0;return e|0}e=c[d>>2]|0;return e|0}function zb(b){b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){b=29632;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](24)|0;if(!d){b=29632;return b|0}}else{f=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=29632;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}if(!b){c[d+4>>2]=0;c[d>>2]=0;c[d+8>>2]=0;c[d+12>>2]=1e9;c[d+16>>2]=0;a[d+20>>0]=0;a[d+21>>0]=0;g=d;return g|0}else{g=c[b+108>>2]|0;c[d+4>>2]=0;c[d>>2]=0;c[d+8>>2]=0;c[d+12>>2]=g;c[d+16>>2]=0;a[d+20>>0]=0;a[d+21>>0]=0;g=d;return g|0}return 0}function Ab(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+96|0;f=j+72|0;if(mb()|0){i=0;Ra=j;return i|0}g=f+4|0;c[g>>2]=j;c[f>>2]=0;c[f+8>>2]=70;h=f+12|0;c[h>>2]=1e9;i=f+16|0;c[i>>2]=0;a[f+20>>0]=0;e=f+21|0;a[e>>0]=0;tb(f,b,d);b=c[g>>2]|0;if((b|0?(a[b+(c[i>>2]|0)>>0]=0,c[h>>2]|0):0)?(a[e>>0]&4)==0:0){i=$d(f)|0;Ra=j;return i|0}i=c[g>>2]|0;Ra=j;return i|0}function Bb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+112|0;j=k+88|0;h=k;if(mb()|0){j=0;Ra=k;return j|0}c[h>>2]=d;do if(!(mb()|0)){i=j+4|0;c[i>>2]=k+16;c[j>>2]=0;c[j+8>>2]=70;e=j+12|0;c[e>>2]=1e9;f=j+16|0;c[f>>2]=0;a[j+20>>0]=0;g=j+21|0;a[g>>0]=0;tb(j,b,h);d=c[i>>2]|0;if((d|0?(a[d+(c[f>>2]|0)>>0]=0,c[e>>2]|0):0)?(a[g>>0]&4)==0:0){d=$d(j)|0;break}d=c[i>>2]|0}else d=0;while(0);j=d;Ra=k;return j|0}function Cb(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=Ra;Ra=Ra+48|0;h=j+16|0;i=j;c[i>>2]=g;if((d|0)<1){Ra=j;return e|0}c[h+4>>2]=e;c[h>>2]=0;c[h+8>>2]=d;g=h+12|0;c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;tb(h,f,i);a[e+(c[h+16>>2]|0)>>0]=0;Ra=j;return e|0}function Db(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+256|0;k=l+232|0;g=l;if(!(c[7387]|0)){Ra=l;return}c[g>>2]=f;i=k+4|0;c[i>>2]=l+16;c[k>>2]=0;c[k+8>>2]=210;j=k+12|0;h=k+21|0;c[j>>2]=0;c[j+4>>2]=0;b[j+8>>1]=0;tb(k,e,g);e=c[7387]|0;g=c[7388]|0;f=c[i>>2]|0;if(((f|0)!=0?(a[f+(c[k+16>>2]|0)>>0]=0,(c[j>>2]|0)!=0):0)?(a[h>>0]&4)==0:0)f=$d(k)|0;else f=c[i>>2]|0;cb[e&255](g,d,f);Ra=l;return}function Eb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=d;tb(a,b,f);Ra=e;return}function Fb(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=Ra;Ra=Ra+256|0;h=i;if(mb()|0){Ra=i;return}if((b|0)<1|(e|0)==0){a[59955]=0;Ra=i;return}if(!(a[59955]|0)){a[59957]=0;a[59956]=0;f=(mb()|0)==0;f=f?c[14770]|0:0;Ya[c[f+56>>2]&127](f,256,h)|0;f=0;do{a[59958+f>>0]=f;f=f+1|0}while((f|0)!=256);f=0;g=a[59957]|0;do{j=59958+f|0;m=a[j>>0]|0;l=(d[h+f>>0]|0)+(m&255)+(g&255)|0;g=l&255;l=59958+(l&255)|0;k=a[l>>0]|0;a[l>>0]=m;a[j>>0]=k;f=f+1|0}while((f|0)!=256);a[59957]=g;a[59955]=1}while(1){l=(a[59956]|0)+1<<24>>24;a[59956]=l;l=59958+(l&255)|0;j=a[l>>0]|0;m=j&255;k=(d[59957]|0)+m|0;a[59957]=k;k=59958+(k&255)|0;a[l>>0]=a[k>>0]|0;a[k>>0]=j;a[e>>0]=a[59958+((d[l>>0]|0)+m&255)>>0]|0;b=b+-1|0;if(!b)break;else e=e+1|0}Ra=i;return}function Gb(b,c){b=b|0;c=c|0;var e=0,f=0;if(!b){e=((c|0)!=0)<<31>>31;return e|0}if(!c){e=1;return e|0}f=a[b>>0]|0;e=(d[208+(f&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(f<<24>>24==0|(e|0)!=0){f=e;return f|0}e=c;do{b=b+1|0;e=e+1|0;f=a[b>>0]|0;c=(d[208+(f&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(f<<24>>24==0|(c|0)!=0));return c|0}function Hb(b,c){b=b|0;c=c|0;var e=0,f=0;f=a[b>>0]|0;e=(d[208+(f&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(f<<24>>24==0|(e|0)!=0){f=e;return f|0}e=c;do{b=b+1|0;e=e+1|0;f=a[b>>0]|0;c=(d[208+(f&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(f<<24>>24==0|(c|0)!=0));return c|0}function Ib(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!b){g=((c|0)!=0)<<31>>31;return g|0}if(!c){g=1;return g|0}if((e|0)<=0){g=0;return g|0}f=e;while(1){e=a[b>>0]|0;if(!(e<<24>>24)){f=7;break}e=a[208+(e&255)>>0]|0;g=a[208+(d[c>>0]|0)>>0]|0;if(e<<24>>24!=g<<24>>24){f=9;break}if((f|0)>1){b=b+1|0;c=c+1|0;f=f+-1|0}else{b=0;f=12;break}}if((f|0)==7){e=0;b=a[208+(d[c>>0]|0)>>0]|0}else if((f|0)==9){e=e&255;b=g}else if((f|0)==12)return b|0;g=e-(b&255)|0;return g|0}function Jb(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+1232|0;E=H+1200|0;D=H+1192|0;F=H+1168|0;w=H+1144|0;v=H+1128|0;G=H+1048|0;C=H+528|0;n=H;m=g&-256;s=g&16;z=g&8;q=g&4;k=g&1;r=g&2;a:do if(!q)A=0;else{b:do if((m|0)>=16384)if((m|0)<524288)switch(m|0){case 16384:{A=1;break a}default:break b}else switch(m|0){case 524288:{A=1;break a}default:break b}else switch(m|0){case 2048:{A=1;break a}default:{}}while(0);A=0}while(0);y=c[14796]|0;if((y|0)!=(Ju()|0)?(y=Ju()|0,c[14796]=y,(mb()|0)==0):0)a[59955]=0;o=f;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));y=(m|0)==256;if(!y)if(!e){i=ye(c[d+8>>2]|0,n)|0;if(!i){u=n;i=-1}else{f=i;Ra=H;return f|0}}else{u=e;i=-1}else{c:do if(((c[14795]|0)!=0?(Xa[c[2388>>2]&255](e,G)|0)==0:0)?(i=c[14795]|0,(i|0)!=0):0){m=c[G>>2]|0;n=c[G+72>>2]|0;while(1){if((c[i>>2]|0)==(m|0)?(u=i+8|0,(c[u+4>>2]|0)==0?(c[u>>2]|0)==(n|0):0):0)break;i=c[i+44>>2]|0;if(!i){B=20;break c}}i=i+32|0;m=c[i>>2]|0;if(m){while(1){n=m+8|0;if((c[m+4>>2]|0)==(g|0))break;m=c[n>>2]|0;if(!m){B=20;break c}else i=n}c[i>>2]=c[n>>2];i=m;m=c[m>>2]|0}else B=20}else B=20;while(0);do if((B|0)==20){if(mb()|0){f=7;Ra=H;return f|0}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](12)|0;if(!i)i=7;else{m=-1;break}Ra=H;return i|0}i=Wa[c[29356>>2]&127](12)|0;if((c[14985]|0)>>>0<12)c[14985]=12;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){u=c[14978]|0;t=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&t>>>0<=u>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){f=7;Ra=H;return f|0}m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m;m=-1}while(0);c[f+28>>2]=i;u=e;i=m}t=(r|0)!=0;q=q<<4|r;q=(s|0)==0?q:q|131200;d:do if((i|0)<0){i=g&526336;e:do if(!i)if(!z)if(!((g&64|0)==0|(u|0)==0)?(l=u+(((Eu(u)|0)&1073741823)+1)|0,(a[l>>0]|0)!=0):0){while(1){s=Bu(l,32118)|0;l=l+(((Eu(l)|0)&1073741823)+1)|0;if(!s)break;l=l+(((Eu(l)|0)&1073741823)+1)|0;if(!(a[l>>0]|0)){p=0;n=0;m=0;break e}}if(!(Xa[c[2388>>2]&255](l,G)|0)){l=0;m=c[G+24>>2]|0;n=c[G+20>>2]|0;o=c[G+12>>2]&511}else{l=1802;m=0;n=0;o=0}B=57}else{p=0;n=0;m=0}else{p=0;n=0;m=384}else{if(!u)l=-1;else l=((Eu(u)|0)&1073741823)+-1|0;m=a[u+l>>0]|0;f:do if(m<<24>>24!=45){while(1){if(m<<24>>24==46|(l|0)==0)break;l=l+-1|0;m=a[u+l>>0]|0;if(m<<24>>24==45)break f}p=0;n=0;m=0;break e}while(0);ew(C|0,u|0,l|0)|0;a[C+l>>0]=0;if(!(Xa[c[2388>>2]&255](C,G)|0)){m=c[G+24>>2]|0;l=0;n=c[G+20>>2]|0;o=c[G+12>>2]&511}else{m=0;l=1802;n=0;o=0}B=57}while(0);if((B|0)==57)if(!l){p=m;m=o}else{f=l;Ra=H;return f|0}l=xe(u,q,m)|0;do if((l|0)<0){if((A?(s=uu()|0,(c[s>>2]|0)==13):0)?(Xa[c[2364>>2]&255](u,0)|0)!=0:0)i=1544;else{s=uu()|0;if(t&(c[s>>2]|0)!=21?(x=xe(u,q&131200,m)|0,(x|0)>=0):0){m=g&-8|1;k=1;l=x;i=g&526336;break}else i=0}c[v>>2]=31984;c[v+4>>2]=38565;c[v+8>>2]=31517;Db(14,32001,v);G=uu()|0;G=c[G>>2]|0;j=dv(G)|0;c[w>>2]=38565;c[w+4>>2]=G;c[w+8>>2]=31690;c[w+12>>2]=(u|0)==0?59952:u;c[w+16>>2]=j;Db(14,31953,w);j=(i|0)==0?14:i;i=f+28|0;break d}else m=g;while(0);if((i|0)!=0?(Va[c[2592>>2]&127]()|0)==0:0){Ya[c[2580>>2]&127](l,n,p)|0;o=l;B=69}else{o=l;B=69}}else{m=g;o=i;B=69}while(0);g:do if((B|0)==69){if(h|0)c[h>>2]=m;p=f+28|0;i=c[p>>2]|0;if(i|0){c[i>>2]=o;c[i+4>>2]=m}if(z|0)Wa[c[2532>>2]&127](u)|0;l=z<<2;l=(k|0)==0?l:l|2;l=y?l:l|128;l=A?l|8:l;A=l|m&64;m=f+12|0;c[m>>2]=o;c[f+4>>2]=d;n=f+32|0;c[n>>2]=e;i=A&255;k=f+18|0;b[k>>1]=i;h:do if(!((e|0)==0|(A&64|0)==0)?(j=e+(((Eu(e)|0)&1073741823)+1)|0,(a[j>>0]|0)!=0):0){while(1){A=Bu(j,32125)|0;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!A)break;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!(a[j>>0]|0)){B=82;break h}}if((Zm(j,1,1)|0)<<24>>24){i=b[k>>1]|0;B=82}}else B=82;while(0);if((B|0)==82)b[k>>1]=i|16;if(!(Bu(c[d+16>>2]|0,31213)|0))b[k>>1]=b[k>>1]|1;i:do if(!(l&128)){i=Xa[c[c[d+20>>2]>>2]&255](e,f)|0;if((i|0)!=29668){if((i|0)!=29820)break;i=(Eu(e)|0)+6|0;j=pb(i,((i|0)<0)<<31>>31)|0;if(j|0){c[D>>2]=e;Cb(i,j,32130,D)|0;c[f+24>>2]=j;i=29820;break}c[f+24>>2]=0;c[f+20>>2]=0;if((o|0)<=-1){j=7;i=p;break g}if(!(Wa[c[2352>>2]&127](o)|0)){j=7;i=p;break g}i=c[n>>2]|0;f=uu()|0;f=c[f>>2]|0;j=dv(f)|0;c[E>>2]=38152;c[E+4>>2]=f;c[E+8>>2]=31695;c[E+12>>2]=(i|0)==0?59952:i;c[E+16>>2]=j;Db(4106,31953,E);j=7;i=p;break g}l=f+8|0;j:do if(!(Xa[c[2400>>2]&255](c[m>>2]|0,C)|0)){i=G;c[i>>2]=0;c[i+4>>2]=0;c[G>>2]=c[C>>2];i=G+8|0;c[i>>2]=c[C+72>>2];c[i+4>>2]=0;i=c[14795]|0;k:do if(!i)B=93;else{while(1){if(!(Lu(G,i,16)|0))break;i=c[i+44>>2]|0;if(!i){B=93;break k}}G=i+36|0;c[G>>2]=(c[G>>2]|0)+1}while(0);if((B|0)==93){if(mb()|0){j=7;break}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](56)|0;if(!i){j=7;break j}}else{i=Wa[c[29356>>2]&127](56)|0;if((c[14985]|0)>>>0<56)c[14985]=56;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){E=c[14978]|0;D=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&D>>>0<=E>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){j=7;break j}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}while(0);j=i+16|0;o=j;p=o+40|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[i>>2]=c[G>>2];c[i+4>>2]=c[G+4>>2];c[i+8>>2]=c[G+8>>2];c[i+12>>2]=c[G+12>>2];if(c[7325]|0)c[j>>2]=8;c[i+36>>2]=1;j=c[14795]|0;c[i+44>>2]=j;c[i+48>>2]=0;if(j|0)c[j+48>>2]=i;c[14795]=i}c[l>>2]=i;i=29668;break i}else{j=uu()|0;j=c[j>>2]|0;c[f+20>>2]=j;j=(j|0)==75?22:10}while(0);if(Wa[c[2352>>2]&127](o)|0){if(!f)i=0;else i=c[n>>2]|0;E=uu()|0;E=c[E>>2]|0;G=dv(E)|0;c[F>>2]=38067;c[F+4>>2]=E;c[F+8>>2]=31695;c[F+12>>2]=(i|0)==0?59952:i;c[F+16>>2]=G;Db(4106,31953,F)}c[f+20>>2]=0;i=p;break g}else i=29744;while(0);c[f+20>>2]=0;c[f>>2]=i;te(f);f=0;Ra=H;return f|0}while(0);i=c[i>>2]|0;if(!i){f=j;Ra=H;return f|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);f=j;Ra=H;return f|0}else{f=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);f=j;Ra=H;return f|0}return 0}function Kb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+80|0;g=h+48|0;e=h+24|0;a=h;f=h+68|0;if((Wa[c[2532>>2]&127](b)|0)==-1){g=uu()|0;if((c[g>>2]|0)==2){g=5898;Ra=h;return g|0}f=uu()|0;f=c[f>>2]|0;g=dv(f)|0;c[a>>2]=38695;c[a+4>>2]=f;c[a+8>>2]=31800;c[a+12>>2]=(b|0)==0?59952:b;c[a+16>>2]=g;Db(2570,31953,a);g=2570;Ra=h;return g|0}if(!(d&1)){g=0;Ra=h;return g|0}if(!(Xa[c[2544>>2]&255](b,f)|0)){if(!(zv(c[f>>2]|0)|0))a=0;else{d=uu()|0;d=c[d>>2]|0;a=dv(d)|0;c[e>>2]=38705;c[e+4>>2]=d;c[e+8>>2]=32138;c[e+12>>2]=(b|0)==0?59952:b;c[e+16>>2]=a;Db(1290,31953,e);a=1290}if(Wa[c[2352>>2]&127](c[f>>2]|0)|0){d=uu()|0;d=c[d>>2]|0;f=dv(d)|0;c[g>>2]=38707;c[g+4>>2]=d;c[g+8>>2]=31695;c[g+12>>2]=59952;c[g+16>>2]=f;Db(4106,31953,g)}}else a=0;g=a;Ra=h;return g|0}function Lb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Ra;Ra=Ra+80|0;a=f;if(!d){d=(Xa[c[2388>>2]&255](b,a)|0)==0;c[e>>2]=d&(c[a+36>>2]|0)>0&1;Ra=f;return 0}else{d=(Xa[c[2364>>2]&255](b,6)|0)==0&1;c[e>>2]=d;Ra=f;return 0}return 0}function Mb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+256|0;z=B+168|0;y=B+152|0;x=B+128|0;w=B+112|0;u=B+96|0;t=B+72|0;s=B+56|0;r=B+40|0;v=B+16|0;q=B;l=B+172|0;m=l+12|0;n=e+-1|0;o=e+-2|0;p=(f|0)==0;b=0;g=1;while(1){if(!(Xa[c[2664>>2]&255](d,l)|0))if((c[m>>2]&61440|0)==40960){if(!b){b=nb(e)|0;if(!b){b=0;d=7;C=34;break}else j=g}else if((g|0)>99){C=9;break}else j=g+1|0;g=Ya[c[2652>>2]&127](d,b,n)|0;if((g|0)<0){C=11;break}do if((a[b>>0]|0)!=47){a:do if((d|0)!=0?(A=(Eu(d)|0)&1073741823,(A|0)!=0):0){h=A;while(1){i=h+-1|0;if((a[d+i>>0]|0)==47)break a;if((h|0)>1)h=i;else{h=i;break}}}else h=0;while(0);i=h+g|0;if((i|0)<(e|0)){fw(b+h|0,b|0,g+1|0)|0;ew(b|0,d|0,h|0)|0;g=i;d=0;break}else{c[u>>2]=31984;c[u+4>>2]=38842;c[u+8>>2]=31517;Db(14,32001,u);d=14;break}}else d=0;while(0);a[b+g>>0]=0;k=b;g=j;i=0}else{k=d;d=0;i=1}else{k=uu()|0;if((c[k>>2]|0)==2){k=d;d=0;i=1}else{C=4;break}}if((d|0)!=0|(k|0)==(f|0)){if(i){C=36;break}}else{d=(k|0)==0;if(d)h=0;else h=(Eu(k)|0)&1073741823;if((a[k>>0]|0)==47)d=0;else{if(!(Xa[c[2376>>2]&255](f,o)|0)){C=27;break}if(p)d=0;else d=(Eu(f)|0)&1073741823;a[f+d>>0]=47;d=d+1|0}if((d+h|0)>=(e|0)){C=32;break}c[z>>2]=k;Cb(e-d|0,f+d|0,31408,z)|0;if(i){d=0;C=36;break}else d=0}if(!d)d=f;else break}if((C|0)==4){c[q>>2]=31984;c[q+4>>2]=38819;c[q+8>>2]=31517;Db(14,32001,q);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[v>>2]=38819;c[v+4>>2]=f;c[v+8>>2]=31888;c[v+12>>2]=(d|0)==0?59952:d;c[v+16>>2]=A;Db(14,31953,v);d=14;C=36}else if((C|0)==9){c[r>>2]=31984;c[r+4>>2]=38830;c[r+8>>2]=31517;Db(14,32001,r);d=14;C=34}else if((C|0)==11){c[s>>2]=31984;c[s+4>>2]=38836;c[s+8>>2]=31517;Db(14,32001,s);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[t>>2]=38836;c[t+4>>2]=f;c[t+8>>2]=31879;c[t+12>>2]=(d|0)==0?59952:d;c[t+16>>2]=A;Db(14,31953,t);d=14;C=34}else if((C|0)==27){c[w>>2]=31984;c[w+4>>2]=38762;c[w+8>>2]=31517;Db(14,32001,w);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[x>>2]=38762;c[x+4>>2]=f;c[x+8>>2]=31708;c[x+12>>2]=d?59952:k;c[x+16>>2]=A;Db(14,31953,x);d=14;C=34}else if((C|0)==32){a[f+d>>0]=0;c[y>>2]=31984;c[y+4>>2]=38771;c[y+8>>2]=31517;Db(14,32001,y);d=14;C=34}if(!b){Ra=B;return d|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=B;return d|0}else{C=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=B;return d|0}return 0}function Nb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+32|0;h=i+8|0;g=i;b=i+28|0;gw(e|0,0,d|0)|0;f=Ju()|0;c[14796]=f;while(1){f=Ya[c[2340>>2]&127](32144,524288,420)|0;if((f|0)<0){f=uu()|0;if((c[f>>2]|0)!=4){j=8;break}}else{if((f|0)>2)break;Wa[c[2352>>2]&127](f)|0;c[g>>2]=32144;c[g+4>>2]=f;Db(28,31900,g);if((Ya[c[2340>>2]&127](31943,0,0)|0)<0){j=8;break}}}if((j|0)==8){La(b|0)|0;j=c[b>>2]|0;a[e>>0]=j;a[e+1>>0]=j>>8;a[e+2>>0]=j>>16;a[e+3>>0]=j>>24;j=e+4|0;e=c[14796]|0;a[j>>0]=e;a[j+1>>0]=e>>8;a[j+2>>0]=e>>16;a[j+3>>0]=e>>24;j=8;Ra=i;return j|0}do{if((Ya[c[2436>>2]&127](f,e,d)|0)>=0)break;j=uu()|0}while((c[j>>2]|0)==4);if(!(Wa[c[2352>>2]&127](f)|0)){j=d;Ra=i;return j|0}e=uu()|0;e=c[e>>2]|0;j=dv(e)|0;c[h>>2]=38966;c[h+4>>2]=e;c[h+8>>2]=31695;c[h+12>>2]=59952;c[h+16>>2]=j;Db(4106,31953,h);j=d;Ra=i;return j|0}function Ob(a,b){a=a|0;b=b|0;b=(b+999999|0)/1e6|0;Av(b)|0;return b*1e6|0}function Pb(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0;a=Ra;Ra=Ra+16|0;e=a;Da(e|0,0)|0;h=c[e>>2]|0;h=Yv(h|0,((h|0)<0)<<31>>31|0,1e3,0)|0;h=Sv(h|0,L()|0,1045635584,49096)|0;f=L()|0;e=(c[e+4>>2]|0)/1e3|0;e=Sv(h|0,f|0,e|0,((e|0)<0)<<31>>31|0)|0;d=(+(e>>>0)+4294967296.0*+(L()|0))/864.0e5;g[b>>3]=d;Ra=a;return 0}function Qb(a,b,d){a=a|0;b=b|0;d=d|0;d=uu()|0;return c[d>>2]|0}function Rb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=Ra;Ra=Ra+16|0;e=a;Da(e|0,0)|0;f=c[e>>2]|0;f=Yv(f|0,((f|0)<0)<<31>>31|0,1e3,0)|0;f=Sv(f|0,L()|0,1045635584,49096)|0;d=L()|0;e=(c[e+4>>2]|0)/1e3|0;e=Sv(f|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;d=L()|0;c[b>>2]=e;c[b+4>>2]=d;Ra=a;return 0}function Sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b|0){do if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(!(Bu(b,c[632]|0)|0))e=16;else{if(!(Bu(b,c[635]|0)|0)){e=17;break}if(!(Bu(b,c[638]|0)|0)){e=18;break}if(!(Bu(b,c[641]|0)|0)){e=19;break}if(!(Bu(b,c[644]|0)|0)){e=20;break}if(!(Bu(b,c[647]|0)|0)){e=21;break}if(!(Bu(b,c[650]|0)|0)){e=22;break}if(!(Bu(b,c[653]|0)|0)){e=23;break}if(!(Bu(b,c[656]|0)|0)){e=24;break}if(!(Bu(b,c[659]|0)|0)){e=25;break}if(!(Bu(b,c[662]|0)|0)){e=26;break}if(!(Bu(b,c[665]|0)|0)){e=27;break}if(!(Bu(b,c[668]|0)|0)){e=28;break}else a=12;return a|0}else e=15;else e=14;else e=13;else e=12;else e=11;else e=10;else e=9;else e=8;else e=7;else e=6;else e=5;else e=4;else e=3;else e=2;else e=1;else e=0;while(0);b=2336+(e*12|0)+8|0;a=c[b>>2]|0;if(!a){a=c[2336+(e*12|0)+4>>2]|0;c[b>>2]=a}c[2336+(e*12|0)+4>>2]=(d|0)==0?a:d;d=0;return d|0}a=c[586]|0;if(a|0)c[585]=a;a=c[589]|0;if(a|0)c[588]=a;a=c[592]|0;if(a|0)c[591]=a;a=c[595]|0;if(a|0)c[594]=a;a=c[598]|0;if(a|0)c[597]=a;a=c[601]|0;if(a|0)c[600]=a;a=c[604]|0;if(a|0)c[603]=a;a=c[607]|0;if(a|0)c[606]=a;a=c[610]|0;if(a|0)c[609]=a;a=c[613]|0;if(a|0)c[612]=a;a=c[616]|0;if(a|0)c[615]=a;a=c[619]|0;if(a|0)c[618]=a;a=c[622]|0;if(a|0)c[621]=a;a=c[625]|0;if(a|0)c[624]=a;a=c[628]|0;if(a|0)c[627]=a;a=c[631]|0;if(a|0)c[630]=a;a=c[634]|0;if(a|0)c[633]=a;a=c[637]|0;if(a|0)c[636]=a;a=c[640]|0;if(a|0)c[639]=a;a=c[643]|0;if(a|0)c[642]=a;a=c[646]|0;if(a|0)c[645]=a;a=c[649]|0;if(a|0)c[648]=a;a=c[652]|0;if(a|0)c[651]=a;a=c[655]|0;if(a|0)c[654]=a;a=c[658]|0;if(a|0)c[657]=a;a=c[661]|0;if(a|0)c[660]=a;a=c[664]|0;if(a|0)c[663]=a;a=c[667]|0;if(a|0)c[666]=a;a=c[670]|0;if(!a){d=0;return d|0}c[669]=a;d=0;return d|0}function Tb(a,b){a=a|0;b=b|0;do if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(Bu(b,c[632]|0)|0)if(Bu(b,c[635]|0)|0)if(!(Bu(b,c[638]|0)|0))a=18;else{if(!(Bu(b,c[641]|0)|0)){a=19;break}if(!(Bu(b,c[644]|0)|0)){a=20;break}if(!(Bu(b,c[647]|0)|0)){a=21;break}if(!(Bu(b,c[650]|0)|0)){a=22;break}if(!(Bu(b,c[653]|0)|0)){a=23;break}if(!(Bu(b,c[656]|0)|0)){a=24;break}if(!(Bu(b,c[659]|0)|0)){a=25;break}if(!(Bu(b,c[662]|0)|0)){a=26;break}if(!(Bu(b,c[665]|0)|0)){a=27;break}if(!(Bu(b,c[668]|0)|0)){a=28;break}else a=0;return a|0}else a=17;else a=16;else a=15;else a=14;else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;while(0);b=c[2336+(a*12|0)+4>>2]|0;return b|0}function Ub(a,b){a=a|0;b=b|0;var d=0;do if(b)if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(Bu(b,c[632]|0)|0)if(!(Bu(b,c[635]|0)|0))a=17;else{if(!(Bu(b,c[638]|0)|0)){a=18;break}if(!(Bu(b,c[641]|0)|0)){a=19;break}if(!(Bu(b,c[644]|0)|0)){a=20;break}if(!(Bu(b,c[647]|0)|0)){a=21;break}if(!(Bu(b,c[650]|0)|0)){a=22;break}if(!(Bu(b,c[653]|0)|0)){a=23;break}if(!(Bu(b,c[656]|0)|0)){a=24;break}if(!(Bu(b,c[659]|0)|0)){a=25;break}if(!(Bu(b,c[662]|0)|0)){a=26;break}if(!(Bu(b,c[665]|0)|0)){a=27;break}else a=0;return a|0}else a=16;else a=15;else a=14;else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;else a=-1;while(0);while(1){b=a;a=a+1|0;if(c[2336+(a*12|0)+4>>2]|0)break;if((b|0)>=27){a=0;d=8;break}}if((d|0)==8)return a|0;d=c[2336+(a*12|0)>>2]|0;return d|0}function Vb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=Ra;Ra=Ra+16|0;f=g;c[a+64>>2]=b;Le(a,b);if(!d){Xb(a,b);Ra=g;return}b=a+260|0;if((c[b>>2]|0)==0?(h=wd(a)|0,c[b>>2]=h,(h|0)==0):0){Ra=g;return}c[f>>2]=e;a=Me(a,d,f)|0;b=c[b>>2]|0;if(b|0)yc(b,a,-1,1,116)|0;Ra=g;return}function Wb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Sv(a|0,b|0,-1,-1)|0;d=L()|0;if(d>>>0>0|(d|0)==0&e>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](a)|0;if(!b){e=0;return e|0}}else{b=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){f=c[14978]|0;e=Tv(d|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=f>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){f=0;return f|0}d=Wa[c[29352>>2]&127](b)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}gw(b|0,0,a|0)|0;f=b;return f|0}function Xb(a,b){a=a|0;b=b|0;c[a+64>>2]=b;if(b|0){Ne(a,b);return}if(!(c[a+260>>2]|0))return;Ne(a,0);return}function Yb(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;v=F;D=d+24|0;i=c[D>>2]|0;h=c[i+4>>2]|0;c[h+4>>2]=c[i>>2];E=d+28|0;g=c[E>>2]|0;switch(g|0){case 6:case 0:case 5:break;default:{E=g;Ra=F;return E|0}}u=c[h>>2]|0;x=d+4|0;w=c[c[(c[x>>2]|0)+4>>2]>>2]|0;if((c[d>>2]|0)!=0?(a[h+20>>0]|0)==2:0){C=0;g=5}else if(!(a[i+8>>0]|0)){C=1;g=Zb(i,0,0)|0}else{C=0;g=0}o=d+12|0;if((c[o>>2]|g|0)==0?(t=c[x>>2]|0,j=c[(c[(c[D>>2]|0)+4>>2]|0)+32>>2]|0,p=c[t+4>>2]|0,c[p+4>>2]=c[t>>2],(b[p+22>>1]&2)==0):0){k=p+32|0;l=p+36|0;m=(c[k>>2]|0)-(c[l>>2]|0)|0;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[k>>2]=j,q=p+80|0,n=c[q>>2]|0,n|0):0){i=n+-4|0;c[q>>2]=i;h=i;do if((c[14816]|0)>>>0<=h>>>0)if((c[14817]|0)>>>0>h>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{h=Wa[c[29352>>2]&127](i)|0;B=16;break}else{h=Wa[c[29352>>2]&127](i)|0;B=16}while(0);do if((B|0)==16){c[14980]=(c[14980]|0)-h;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[q>>2]=0}t=Se(c[p>>2]|0,k,m)|0;c[l>>2]=(c[k>>2]|0)-(m&65535);if((t|0)==7)g=7;else B=21}else B=21;if((B|0)==21)if(!g)if(!(c[o>>2]|0)){g=Zb(c[x>>2]|0,2,d+8|0)|0;if(!g){c[o>>2]=1;g=0}}else g=0;l=c[(c[D>>2]|0)+4>>2]|0;t=c[l+32>>2]|0;n=c[(c[x>>2]|0)+4>>2]|0;s=c[n+32>>2]|0;n=(a[(c[n>>2]|0)+5>>0]|0)==5;g=(t|0)==(s|0)|(g|0)==0&n^1?g:8;l=c[l+44>>2]|0;a:do if(e){j=d+16|0;k=u+204|0;i=0;h=c[j>>2]|0;do{if(!((g|0)==0&h>>>0<=l>>>0))break a;if((h|0)==((1073741824/((c[(c[(c[D>>2]|0)+4>>2]|0)+32>>2]|0)>>>0)|0)+1|0))g=0;else{g=Za[c[k>>2]&127](u,h,v,2)|0;do if(!g){g=_b(d,h,c[(c[v>>2]|0)+4>>2]|0,0)|0;h=c[v>>2]|0;if(h)if(!(b[h+28>>1]&32)){Df(h);break}else{q=c[h+20>>2]|0;p=q+120|0;c[p>>2]=(c[p>>2]|0)+-1;q=q+136|0;c[h+16>>2]=c[q>>2];c[q>>2]=h;break}}while(0);h=c[j>>2]|0}h=h+1|0;c[j>>2]=h;i=i+1|0}while(i>>>0<e>>>0)}while(0);switch(g|0){case 0:{c[d+36>>2]=l;e=c[d+16>>2]|0;c[d+32>>2]=l+1-e;if(e>>>0<=l>>>0){f=d+40|0;if(!(c[f>>2]|0)){A=(c[c[(c[D>>2]|0)+4>>2]>>2]|0)+88|0;c[d+44>>2]=c[A>>2];c[A>>2]=d;c[f>>2]=1;f=0}else f=0}else B=40;break}case 101:{B=40;break}default:f=g}b:do if((B|0)==40){if(!l){e=c[x>>2]|0;g=c[e+4>>2]|0;c[g+4>>2]=c[e>>2];c[g+44>>2]=0;g=Rf(g)|0;switch(g|0){case 0:case 101:{m=1;break}default:{f=g;break b}}}else m=l;i=c[x>>2]|0;h=(c[d+8>>2]|0)+1|0;j=c[i+4>>2]|0;c[j+4>>2]=c[i>>2];j=c[j+12>>2]|0;i=c[j+56>>2]|0;j=c[j+72>>2]|0;k=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){r=Ve(j)|0;B=50}}else B=46;do if((B|0)==46){g=c[k+40>>2]|0;if(g|0){f=g;break b}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){r=Wf(j)|0;B=50;break}else{r=Xf(j)|0;B=50;break}}while(0);if((B|0)==50?r|0:0){f=r;break}a[i+40>>0]=h>>>24;a[i+41>>0]=h>>>16;a[i+42>>0]=h>>>8;a[i+43>>0]=h;g=c[d>>2]|0;if(g|0)$b(g);c:do if(n){i=c[x>>2]|0;g=c[i+4>>2]|0;l=g+22|0;b[l>>1]=b[l>>1]&-33;h=Zb(i,0,0)|0;d:do if(!h){h=g+12|0;j=c[(c[h>>2]|0)+56>>2]|0;k=j+18|0;if(!((a[k>>0]|0)==2?(a[j+19>>0]|0)==2:0)){g=Zb(i,2,0)|0;if(g|0){f=g;break}g=c[(c[h>>2]|0)+72>>2]|0;h=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[h+96>>2]|0){f=Ve(g)|0;B=66}}else B=62;do if((B|0)==62){f=c[h+40>>2]|0;if(f|0)break d;if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(g)|0;B=66;break}else{f=Xf(g)|0;B=66;break}}while(0);if((B|0)==66?f|0:0)break;a[k>>0]=2;a[j+19>>0]=2}b[l>>1]=b[l>>1]&-33;break c}else f=h;while(0);b[l>>1]=b[l>>1]&-33;break b}while(0);if((t|0)<(s|0)){f=(s|0)/(t|0)|0;f=(m+-1+f|0)/(f|0)|0;g=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0;f=f+(((f|0)==((1073741824/(g>>>0)|0)+1|0))<<31>>31)|0;n=((t|0)<0)<<31>>31;o=Yv(m|0,((m|0)<0)<<31>>31|0,t|0,n|0)|0;p=L()|0;q=w+60|0;m=c[q>>2]|0;j=c[w+24>>2]|0;if(f>>>0<=j>>>0){k=w+204|0;i=f;f=0;h=1073741824;while(1){if((i|0)!=(((h>>>0)/(g>>>0)|0)+1|0)){f=Za[c[k>>2]&127](w,i,v,0)|0;do if(!f){g=c[v>>2]|0;h=c[g+20>>2]|0;do if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(!(c[h+96>>2]|0)){f=0;break}f=Ve(g)|0}else B=79;while(0);do if((B|0)==79){B=0;f=c[h+40>>2]|0;if(!f)if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(g)|0;break}else{f=Xf(g)|0;break}}while(0);g=c[v>>2]|0;if(g)if(!(b[g+28>>1]&32)){Df(g);break}else{d=c[g+20>>2]|0;r=d+120|0;c[r>>2]=(c[r>>2]|0)+-1;d=d+136|0;c[g+16>>2]=c[d>>2];c[d>>2]=g;break}}while(0)}g=i+1|0;h=(f|0)==0;if(g>>>0>j>>>0|h^1)break;i=g;h=1073741824;g=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0}if(h)B=91}else B=91;if((B|0)==91)f=ac(w,0,1)|0;k=1073741824+s|0;l=((k|0)<0)<<31>>31;h=(p|0)>(l|0)|(p|0)==(l|0)&o>>>0>k>>>0;k=h?k:o;l=h?l:p;h=1073741824+t|0;i=((h|0)<0)<<31>>31;g=(f|0)==0;if(((l|0)>(i|0)|(l|0)==(i|0)&k>>>0>h>>>0)&g){j=u+204|0;do{c[v>>2]=0;f=Wv(h|0,i|0,t|0,n|0)|0;L()|0;f=Za[c[j>>2]&127](u,f+1|0,v,0)|0;if(!f)f=_a[c[(c[m>>2]|0)+12>>2]&127](m,c[(c[v>>2]|0)+4>>2]|0,t,h,i)|0;g=c[v>>2]|0;do if(g|0)if(!(b[g+28>>1]&32)){Df(g);break}else{s=c[g+20>>2]|0;d=s+120|0;c[d>>2]=(c[d>>2]|0)+-1;s=s+136|0;c[g+16>>2]=c[s>>2];c[s>>2]=g;break}while(0);h=Sv(h|0,i|0,t|0,n|0)|0;i=L()|0;g=(f|0)==0}while(((i|0)<(l|0)|(i|0)==(l|0)&h>>>0<k>>>0)&g)}if(!g)break;f=Xa[c[(c[m>>2]|0)+24>>2]&255](m,v)|0;u=c[v+4>>2]|0;if((f|0)==0&((u|0)>(p|0)|((u|0)==(p|0)?(c[v>>2]|0)>>>0>o>>>0:0)))f=Ya[c[(c[m>>2]|0)+16>>2]&127](m,o,p)|0;if(f|0)break;f=c[q>>2]|0;g=c[f>>2]|0;if(g|0){f=Ya[c[g+40>>2]&127](f,21,0)|0;switch(f|0){case 0:case 12:break;default:break b}}if((a[w+7>>0]|0)==0?(z=c[q>>2]|0,A=a[w+10>>0]|0,A<<24>>24):0){y=Xa[c[(c[z>>2]|0)+20>>2]&255](z,A&255)|0;B=111}}else{y=G((t|0)/(s|0)|0,m)|0;c[w+24>>2]=y;y=ac(w,0,0)|0;B=111}if((B|0)==111?y|0:0){f=y;break}f=bc(c[x>>2]|0,0)|0;f=(f|0)==0?101:f}while(0);if(C|0){cc(c[D>>2]|0,0)|0;bc(c[D>>2]|0,0)|0}D=(f|0)==3082?7:f;c[E>>2]=D;E=D;Ra=F;return E|0}function Zb(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;X=Ra;Ra=Ra+16|0;Q=X;K=X+12|0;W=c[e+4>>2]|0;m=c[e>>2]|0;P=W+4|0;c[P>>2]=m;U=e+8|0;n=a[U>>0]|0;do if(n<<24>>24!=2?(R=(f|0)!=0,R|n<<24>>24!=1):0){if(!(0==0?(c[m+32>>2]&33554432|0)==0:0)?(a[(c[W>>2]|0)+14>>0]|0)==0:0){T=W+22|0;b[T>>1]=b[T>>1]&-2}L=W+22|0;q=b[L>>1]|0;if(R&(q&1)!=0){e=8;Ra=X;return e|0}a:do if(R)if((q&128)==0&(a[W+20>>0]|0)!=2){if((f|0)>1?(o=c[W+72>>2]|0,o|0):0){m=o;do{n=c[m>>2]|0;if((n|0)!=(e|0)){p=n;J=16;break a}m=c[m+12>>2]|0}while((m|0)!=0)}}else J=10;else if(q&128)J=10;while(0);if((J|0)==10){p=c[W+76>>2]|0;J=16}if((J|0)==16?c[p>>2]|0:0){e=262;Ra=X;return e|0}I=e+9|0;b:do if(a[I>>0]|0){if(!((q&64)==0?1:(c[W+76>>2]|0)==(e|0))){e=262;Ra=X;return e|0}m=c[W+72>>2]|0;if(m|0){while(1){if(((c[m>>2]|0)!=(e|0)?(c[m+4>>2]|0)==1:0)?(a[m+8>>0]|0)!=1:0){h=262;break}m=c[m+12>>2]|0;if(!m)break b}Ra=X;return h|0}}while(0);b[L>>1]=q&-17;T=W+44|0;if(!(c[T>>2]|0))b[L>>1]=q|16;G=W+12|0;H=W+20|0;v=W+36|0;w=W+24|0;x=W+26|0;y=W+28|0;z=W+30|0;A=W+21|0;B=W+32|0;C=W+80|0;D=W+17|0;E=W+18|0;F=(f|0)<2;n=0;c:while(1){d:do if(!(c[G>>2]|0)){e:while(1){m=Sf(c[W>>2]|0)|0;if(m|0){J=135;break d}m=c[W>>2]|0;m=Za[c[m+204>>2]&127](m,1,K,0)|0;if(m|0){J=35;break}n=c[K>>2]|0;m=c[n+8>>2]|0;o=m+4|0;if((c[o>>2]|0)==1)s=c[m+56>>2]|0;else{s=c[n+4>>2]|0;c[m+56>>2]=s;c[m+72>>2]=n;c[m+52>>2]=W;c[o>>2]=1;a[m+9>>0]=100}t=m;n=d[s+29>>0]<<16|d[s+28>>0]<<24|d[s+30>>0]<<8|d[s+31>>0];u=c[W>>2]|0;r=c[u+24>>2]|0;if(!((n|0)!=0?(Lu(s+24|0,s+92|0,4)|0)==0:0))n=r;p=c[(c[P>>2]|0)+32>>2]|0;q=(p&33554432|0)==0&0==0?n:0;do if(!q){n=c[v>>2]|0;J=85}else{if(Lu(s,2720,16)|0){n=26;break e}if((d[s+18>>0]|0)>2)b[L>>1]=b[L>>1]|1;n=a[s+19>>0]|0;if((n&255)>2){n=26;break e}do if(n<<24>>24==2){if(b[L>>1]&32){J=62;break}if(a[u+12>>0]|0){J=62;break}if(c[u+216>>2]|0){J=62;break}n=c[c[u+60>>2]>>2]|0;if(a[u+13>>0]|0){n=14;break e}if(!(a[u+4>>0]|0)){if((c[n>>2]|0)<=1){n=14;break e}if(!(c[n+52>>2]|0)){n=14;break e}}n=c[u+64>>2]|0;o=c[n>>2]|0;if(o|0){Wa[c[o+4>>2]&127](n)|0;c[n>>2]=0}n=Uf(u)|0;if(n|0)break e;a[u+5>>0]=5;a[u+16>>0]=0;u=c[m+72>>2]|0;m=c[u+20>>2]|0;Df(u);if(c[(c[m+212>>2]|0)+12>>2]|0)break;f:do switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(a[m+4>>0]|0)break f;uf(m,0,0)|0;break}default:tf(m)|0}while(0);vf(m)}else J=62;while(0);if((J|0)==62){J=0;if(Lu(s+21|0,32387,3)|0){n=26;break e}o=d[s+17>>0]<<16|d[s+16>>0]<<8;if((o+-257|0)>>>0>65279|(o+16777215&o|0)!=0){n=26;break e}b[L>>1]=b[L>>1]|2;u=d[s+20>>0]|0;n=o-u|0;if((o|0)==(c[B>>2]|0)){if(((p&268435457|0)!=1|0!=0)&q>>>0>r>>>0){J=82;break e}if(n>>>0<480){n=26;break e}c[B>>2]=o;c[v>>2]=n;a[D>>0]=(d[s+53>>0]<<16|d[s+52>>0]<<24|d[s+54>>0]<<8|d[s+55>>0]|0)!=0&1;a[E>>0]=(d[s+65>>0]<<16|d[s+64>>0]<<24|d[s+66>>0]<<8|d[s+67>>0]|0)!=0&1;J=85;break}t=c[m+72>>2]|0;m=c[t+20>>2]|0;Df(t);if(!(c[(c[m+212>>2]|0)+12>>2]|0)){g:do switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(a[m+4>>0]|0)break g;uf(m,0,0)|0;break}default:tf(m)|0}while(0);vf(m)}c[v>>2]=n;c[B>>2]=o;m=c[C>>2]|0;if(m|0){n=m+-4|0;c[C>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;J=77;break}else{m=Wa[c[29352>>2]&127](n)|0;J=77}while(0);do if((J|0)==77){J=0;c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{t=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[C>>2]=0}m=Se(c[W>>2]|0,B,u)|0;if(m|0){J=135;break d}}m=c[G>>2]|0}while(0);if((J|0)==85){J=0;u=((((n<<6)+-768|0)>>>0)/255|0)+65513|0;s=u&65535;b[w>>1]=s;r=((((n<<5)+-384|0)>>>0)/255|0)+65513&65535;b[x>>1]=r;b[y>>1]=n+65501;b[z>>1]=r;a[A>>0]=(s&65535)>127?127:u&255;c[G>>2]=t;c[T>>2]=q}if(m|0){n=0;J=96;break d}}if((J|0)==35){J=135;break}else if((J|0)==82){c[Q>>2]=32306;c[Q+4>>2]=66365;c[Q+8>>2]=31517;Db(11,32001,Q);n=11}J=c[m+72>>2]|0;m=c[J+20>>2]|0;Df(J);if(!(c[(c[m+212>>2]|0)+12>>2]|0)){switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[m+4>>0]|0))uf(m,0,0)|0;break}default:tf(m)|0}vf(m)}c[G>>2]=0;m=n;J=135}else J=96;while(0);h:do if((J|0)==96){J=0;i:do if(R&(n|0)==0){if(b[L>>1]&1){m=8;J=135;break h}u=c[W>>2]|0;n=c[u+40>>2]|0;j:do if(!n){a[u+21>>0]=(a[(c[e>>2]|0)+80>>0]|0)==2&1;t=u+16|0;if((a[t>>0]|0)==1){p=u+216|0;m=c[p>>2]|0;k:do if(!m){s=u+17|0;m=a[s>>0]|0;l:do switch(m<<24>>24){case 0:case 1:case 5:{if(!(a[u+13>>0]|0)){n=c[u+60>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,2)|0;if(n|0){J=132;break j}m=a[s>>0]|0}if(m<<24>>24==5){m=5;break l}a[s>>0]=2;m=2;break}default:{}}while(0);if(!F){o=u+13|0;p=u+60|0;q=u+176|0;r=u+180|0;m:while(1){switch(m<<24>>24){case 0:case 1:case 2:case 3:case 5:break;default:break k}if(a[o>>0]|0)break;n=c[p>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,4)|0;switch(n|0){case 0:break m;case 5:break;default:{J=132;break j}}if(!(Wa[c[q>>2]&127](c[r>>2]|0)|0)){m=5;J=135;break h}m=a[s>>0]|0}a[s>>0]=4}}else{do if(a[u+4>>0]|0){n=m+43|0;if(a[n>>0]|0)break;o=u+17|0;n:do switch(a[o>>0]|0){case 0:case 1:case 2:case 3:case 5:{if(a[u+13>>0]|0){a[o>>0]=4;J=108;break n}n=c[u+60>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,4)|0;if(n|0){J=132;break j}m=c[p>>2]|0;n=m+43|0;s=a[n>>0]|0;a[o>>0]=4;if(!(s<<24>>24))J=108;break}default:J=108}while(0);if((J|0)==108){J=c[m+4>>2]|0;Za[c[(c[J>>2]|0)+56>>2]&127](J,(b[m+40>>1]|0)+3|0,1,5)|0;m=c[p>>2]|0}a[n>>0]=1}while(0);if(a[m+46>>0]|0){m=8;J=135;break h}n=m+43|0;if((a[n>>0]|0)==0?(M=c[m+4>>2]|0,M=Za[c[(c[M>>2]|0)+56>>2]&127](M,0,1,10)|0,M|0):0){n=M;J=132;break j}o=m+44|0;a[o>>0]=1;if(!(Lu(m+52|0,c[c[m+32>>2]>>2]|0,48)|0))break;if(!(a[n>>0]|0)){J=c[m+4>>2]|0;Za[c[(c[J>>2]|0)+56>>2]&127](J,0,1,9)|0}a[o>>0]=0;J=134;break j}while(0);a[t>>0]=2;J=c[u+24>>2]|0;c[u+36>>2]=J;c[u+32>>2]=J;c[u+28>>2]=J;J=u+72|0;c[J>>2]=0;c[J+4>>2]=0;J=133}else J=133}else J=132;while(0);if((J|0)==132){J=0;switch(n|0){case 0:{J=133;break}case 517:{J=134;break}default:break i}}if((J|0)==133){J=0;n=Rf(W)|0;break}else if((J|0)==134){m=(a[H>>0]|0)==0?5:517;J=135;break h}}while(0);if(!n){n=0;break c}else s=0}while(0);if((J|0)==135){J=0;n=m;s=(m|0)==0}if(((a[H>>0]|0)==0?(N=c[G>>2]|0,N|0):0)?(c[G>>2]=0,u=c[N+72>>2]|0,O=c[u+20>>2]|0,Df(u),(c[(c[O+212>>2]|0)+12>>2]|0)==0):0){switch(a[O+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[O+4>>0]|0))uf(O,0,0)|0;break}default:tf(O)|0}vf(O)}if((n&255|0)!=5){J=156;break}if(a[H>>0]|0){J=156;break}o=c[P>>2]|0;m=c[(c[W>>2]|0)+60>>2]|0;p=c[o+396>>2]|0;if(!p){J=154;break}r=o+404|0;q=c[r>>2]|0;if((q|0)<0){J=154;break}if(!(a[o+408>>0]|0))m=Xa[p&255](c[o+400>>2]|0,q)|0;else m=Ya[p&127](c[o+400>>2]|0,q,m)|0;if(!m){J=153;break}c[r>>2]=(c[r>>2]|0)+1}if((J|0)==153){c[r>>2]=-1;if(!s){e=n;Ra=X;return e|0}}else if((J|0)==154){if(!s){e=n;Ra=X;return e|0}}else if((J|0)==156)if(!s){e=n;Ra=X;return e|0}if((a[U>>0]|0)==0?(Q=W+40|0,c[Q>>2]=(c[Q>>2]|0)+1,a[I>>0]|0):0){a[e+40>>0]=1;Q=W+72|0;c[e+44>>2]=c[Q>>2];c[Q>>2]=e+32}m=R?2:1;a[U>>0]=m;if((m&255)>(d[H>>0]|0))a[H>>0]=m;if(R?(S=c[G>>2]|0,c[W+76>>2]=e,h=b[L>>1]|0,b[L>>1]=(f|0)>1?h|64:h&-65,h=c[T>>2]|0,V=S+56|0,j=c[V>>2]|0,i=j+28|0,l=j+29|0,k=j+30|0,j=j+31|0,(h|0)!=(d[l>>0]<<16|d[i>>0]<<24|d[k>>0]<<8|d[j>>0]|0)):0){m=c[S+72>>2]|0;n=c[m+20>>2]|0;if((b[m+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[m+24>>2]|0)>>>0:0){if(c[n+96>>2]|0){h=Ve(m)|0;J=172}}else J=168;do if((J|0)==168){h=c[n+40>>2]|0;if(h|0){e=h;Ra=X;return e|0}if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){h=Wf(m)|0;J=172;break}else{h=Xf(m)|0;J=172;break}}while(0);do if((J|0)==172)if(!h){i=c[V>>2]|0;l=i+29|0;k=i+30|0;j=i+31|0;i=i+28|0;h=c[T>>2]|0;break}else{e=h;Ra=X;return e|0}while(0);a[i>>0]=h>>>24;a[l>>0]=h>>>16;a[k>>0]=h>>>8;a[j>>0]=h;break}if(n|0){e=n;Ra=X;return e|0}}while(0);if(g|0){V=c[(c[W+12>>2]|0)+56>>2]|0;c[g>>2]=d[V+41>>0]<<16|d[V+40>>0]<<24|d[V+42>>0]<<8|d[V+43>>0]}if(!f){e=0;Ra=X;return e|0}i=c[W>>2]|0;h=c[(c[e>>2]|0)+452>>2]|0;if((c[i+96>>2]|0)>=(h|0)){e=0;Ra=X;return e|0}if(!(a[i+6>>0]|0)){e=0;Ra=X;return e|0}e=Vf(i,h)|0;Ra=X;return e|0}function _b(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;w=z;x=d+4|0;q=c[(c[x>>2]|0)+4>>2]|0;v=c[q>>2]|0;u=d+24|0;r=c[(c[(c[u>>2]|0)+4>>2]|0)+32>>2]|0;q=c[q+32>>2]|0;s=(r|0)<(q|0)?r:q;t=((r|0)<0)<<31>>31;o=Yv(r|0,t|0,e|0,0)|0;p=L()|0;if((r|0)==(q|0))d=0;else d=(a[v+12>>0]|0)==0?0:8;if(!((r|0)>0&(d|0)==0)){y=d;Ra=z;return y|0}e=Tv(o|0,p|0,r|0,t|0)|0;m=((q|0)<0)<<31>>31;n=v+204|0;l=(g|0)==0;g=L()|0;d=q;while(1){c[w>>2]=0;j=Wv(e|0,g|0,q|0,m|0)|0;k=L()|0;do if((1073741824/(d>>>0)|0|0)!=(j|0)){d=Za[c[n>>2]&127](v,j+1|0,w,0)|0;a:do if(!d){h=c[w>>2]|0;i=c[h+20>>2]|0;if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0))d=h;else{d=Ve(h)|0;y=15}else y=11;do if((y|0)==11){y=0;d=c[i+40>>2]|0;if(d|0)break a;if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){d=Wf(h)|0;y=15;break}else{d=Xf(h)|0;y=15;break}}while(0);if((y|0)==15){y=0;if(d|0)break;d=c[w>>2]|0}i=Zv(e|0,g|0,r|0,t|0)|0;L()|0;h=c[d+4>>2]|0;d=Yv(j|0,k|0,q|0,m|0)|0;d=Tv(e|0,g|0,d|0,L()|0)|0;L()|0;d=h+d|0;ew(d|0,f+i|0,s|0)|0;a[c[(c[w>>2]|0)+8>>2]>>0]=0;if(l&((e|0)==0&(g|0)==0)){d=d+28|0;k=c[(c[(c[u>>2]|0)+4>>2]|0)+44>>2]|0;a[d>>0]=k>>>24;a[d+1>>0]=k>>>16;a[d+2>>0]=k>>>8;a[d+3>>0]=k;d=0}else d=0}while(0);h=c[w>>2]|0;if(h)if(!(b[h+28>>1]&32)){Df(h);break}else{k=c[h+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[h+16>>2]=c[k>>2];c[k>>2]=h;break}}else d=0;while(0);e=Sv(e|0,g|0,q|0,m|0)|0;g=L()|0;if(!(((g|0)<(p|0)|(g|0)==(p|0)&e>>>0<o>>>0)&(d|0)==0))break;d=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0}Ra=z;return d|0}function $b(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=a+20|0;e=c[i>>2]|0;f=(e|0)>0;if(f){g=c[a+16>>2]|0;d=0;do{h=c[g+(d<<4)+4>>2]|0;if(h|0)c[(c[h+4>>2]|0)+4>>2]=c[h>>2];d=d+1|0}while((d|0)!=(e|0));if(f){h=a+16|0;d=a+56|0;g=0;do{f=c[(c[h>>2]|0)+(g<<4)+12>>2]|0;do if(f)if(!(c[d>>2]|0)){dh(f);e=c[i>>2]|0;break}else{f=f+78|0;b[f>>1]=b[f>>1]|8;break}while(0);g=g+1|0}while((g|0)<(e|0))}else j=7}else j=7;if((j|0)==7)d=a+56|0;j=a+24|0;c[j>>2]=c[j>>2]&-18;Ti(a);if(c[d>>2]|0)return;Ui(a);return}function ac(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=Ra;Ra=Ra+16|0;z=C+8|0;r=C;h=c[e+40>>2]|0;if(h|0){e=h;Ra=C;return e|0}h=c[7389]|0;if(h|0?Wa[h&127](400)|0:0){e=10;Ra=C;return e|0}B=e+16|0;if((d[B>>0]|0)<3){e=0;Ra=C;return e|0}do if(a[e+12>>0]|0){if(c[c[e+60>>2]>>2]|0){i=c[e+212>>2]|0;h=c[i+16>>2]|0;if((h|0)<=-1){n=Yv(h|0,((h|0)<0)<<31>>31|0,-1024,-1)|0;p=L()|0;h=(c[i+28>>2]|0)+(c[i+24>>2]|0)|0;h=Wv(n|0,p|0,h|0,((h|0)<0)<<31>>31|0)|0;L()|0}i=c[i>>2]|0;if(!i){i=0;j=0}else{j=0;do{j=j+1|0;i=c[i+32>>2]|0}while((i|0)!=0);i=Yv(j|0,0,100,0)|0;j=L()|0}if(h|0?(p=Wv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0,L()|0,(p|0)>=25):0){A=18;break}}h=c[e+88>>2]|0;if(h|0)do{c[h+16>>2]=1;h=c[h+44>>2]|0}while((h|0)!=0)}else A=18;while(0);do if((A|0)==18){if(!(c[e+216>>2]|0)){k=e+18|0;if((a[k>>0]|0)==0?c[e+24>>2]|0:0){h=Za[c[e+204>>2]&127](e,1,z,0)|0;a:do if(!h){j=c[z>>2]|0;i=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0))h=j;else{h=Ve(j)|0;A=53}else A=49;do if((A|0)==49){h=c[i+40>>2]|0;if(h|0)break a;if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){h=Wf(j)|0;A=53;break}else{h=Xf(j)|0;A=53;break}}while(0);if((A|0)==53){if(h|0)break;h=c[z>>2]|0;i=c[h+20>>2]|0}o=(d[i+105>>0]<<16|d[i+104>>0]<<24|d[i+106>>0]<<8|d[i+107>>0])+1|0;h=h+4|0;p=c[h>>2]|0;l=o>>>24&255;a[p+24>>0]=l;m=o>>>16&255;a[p+25>>0]=m;n=o>>>8&255;a[p+26>>0]=n;o=o&255;a[p+27>>0]=o;p=c[h>>2]|0;a[p+92>>0]=l;a[p+93>>0]=m;a[p+94>>0]=n;a[p+95>>0]=o;h=c[h>>2]|0;a[h+96>>0]=0;a[h+97>>0]=46;a[h+98>>0]=52;a[h+99>>0]=32;a[k>>0]=1;h=0}while(0);i=c[z>>2]|0;do if(i|0)if(!(b[i+28>>1]&32)){Df(i);break}else{p=c[i+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[i+16>>2]=c[p>>2];c[p>>2]=i;break}while(0);if(h|0){e=h;Ra=C;return e|0}}b:do if(((f|0)!=0?(a[e+5>>0]|0)!=4:0)?(s=e+64|0,q=c[s>>2]|0,(c[q>>2]|0)!=0):0){a[e+19>>0]=1;h=a[f>>0]|0;if(!(h<<24>>24)){i=0;j=0}else{j=0;i=0;do{i=i+(h<<24>>24)|0;j=j+1|0;h=a[f+j>>0]|0}while(h<<24>>24!=0)}p=e+72|0;k=p;h=c[k>>2]|0;k=c[k+4>>2]|0;if(!(a[e+8>>0]|0))l=h;else{if((h|0)==0&(k|0)==0){h=0;k=0}else{o=Sv(h|0,k|0,-1,-1)|0;k=L()|0;h=c[e+148>>2]|0;k=Wv(o|0,k|0,h|0,0)|0;k=Sv(k|0,L()|0,1,0)|0;h=Yv(k|0,L()|0,h|0,0)|0;k=L()|0}l=p;c[l>>2]=h;c[l+4>>2]=k;l=h}h=(1073741824/(c[e+152>>2]|0)|0)+1|0;a[z>>0]=h>>>24;m=z+1|0;a[m>>0]=h>>>16;n=z+2|0;a[n>>0]=h>>>8;o=z+3|0;a[o>>0]=h;h=_a[c[(c[q>>2]|0)+12>>2]&127](q,z,4,l,k)|0;do if(!h){h=c[s>>2]|0;k=Sv(l|0,k|0,4,0)|0;l=L()|0;h=_a[c[(c[h>>2]|0)+12>>2]&127](h,f,j,k,l)|0;if(!h){h=c[s>>2]|0;k=Sv(k|0,l|0,j|0,0)|0;l=L()|0;a[z>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;h=_a[c[(c[h>>2]|0)+12>>2]&127](h,z,4,k,l)|0;if(!h){D=c[s>>2]|0;q=Sv(k|0,l|0,4,0)|0;h=L()|0;a[z>>0]=i>>>24;a[m>>0]=i>>>16;a[n>>0]=i>>>8;a[o>>0]=i;h=_a[c[(c[D>>2]|0)+12>>2]&127](D,z,4,q,h)|0;if(!h){q=c[s>>2]|0;D=Sv(k|0,l|0,8,0)|0;h=L()|0;h=_a[c[(c[q>>2]|0)+12>>2]&127](q,32352,8,D,h)|0;if(!h){q=p;q=Sv(c[q>>2]|0,c[q+4>>2]|0,j+20|0,0)|0;D=L()|0;h=p;c[h>>2]=q;c[h+4>>2]=D;h=c[s>>2]|0;h=Xa[c[(c[h>>2]|0)+24>>2]&255](h,r)|0;if(h|0)break;D=r;r=c[D+4>>2]|0;i=p;h=c[i>>2]|0;i=c[i+4>>2]|0;if(!((r|0)>(i|0)|((r|0)==(i|0)?(c[D>>2]|0)>>>0>h>>>0:0))){A=79;break b}D=c[s>>2]|0;h=Ya[c[(c[D>>2]|0)+16>>2]&127](D,h,i)|0;if(!h)break b;Ra=C;return h|0}}}}}while(0);D=h;Ra=C;return D|0}else A=79;while(0);h=Xe(e,0)|0;if(h|0){D=h;Ra=C;return D|0}h=e+212|0;i=Ye(e,Cf(c[h>>2]|0)|0)|0;if(i|0){D=i;Ra=C;return D|0}o=c[h>>2]|0;h=c[o>>2]|0;if(h|0)do{n=c[h+12>>2]|0;i=n+8|0;j=h+36|0;k=c[j>>2]|0;if((c[i>>2]|0)==(h|0))c[i>>2]=k;l=c[h+32>>2]|0;m=(l|0)==0;if(m){c[n+4>>2]=k;i=k}else{c[l+36>>2]=k;i=c[j>>2]|0}if(!i){c[n>>2]=l;if(m)a[n+33>>0]=2}else c[i+32>>2]=l;D=h+28|0;b[D>>1]=b[D>>1]&-16|1;if((b[h+30>>1]|0)==0?a[n+32>>0]|0:0)cb[c[29440>>2]&255](c[n+44>>2]|0,c[h>>2]|0,0);h=c[o>>2]|0}while((h|0)!=0);h=c[e+24>>2]|0;m=e+32|0;c:do if((h>>>0>(c[m>>2]|0)>>>0?(w=c[e+152>>2]|0,x=h-((h|0)==((1073741824/(w|0)|0)+1|0)&1)|0,y=e+60|0,t=c[y>>2]|0,u=c[t>>2]|0,u|0):0)?((a[B>>0]|0)+-1&255)>2:0){h=Xa[c[u+24>>2]&255](t,z)|0;j=((w|0)<0)<<31>>31;k=Yv(x|0,0,w|0,j|0)|0;l=L()|0;do if(!h){i=z;h=c[i>>2]|0;i=c[i+4>>2]|0;if(!((h|0)==(k|0)&(i|0)==(l|0))){do if((i|0)>(l|0)|(i|0)==(l|0)&h>>>0>k>>>0){v=c[y>>2]|0;v=Ya[c[(c[v>>2]|0)+16>>2]&127](v,k,l)|0;A=107}else{D=Sv(h|0,i|0,w|0,j|0)|0;z=L()|0;if((z|0)>(l|0)|(z|0)==(l|0)&D>>>0>k>>>0)break;D=c[e+208>>2]|0;gw(D|0,0,w|0)|0;z=c[y>>2]|0;A=Tv(k|0,l|0,w|0,j|0)|0;v=L()|0;v=_a[c[(c[z>>2]|0)+12>>2]&127](z,D,w,A,v)|0;A=107}while(0);if((A|0)==107?v|0:0){h=v;break}c[m>>2]=x}break c}while(0);D=h;Ra=C;return D|0}while(0);if(g|0)break;j=e+60|0;h=c[j>>2]|0;i=c[h>>2]|0;d:do if(i|0){h=Ya[c[i+40>>2]&127](h,21,f)|0;switch(h|0){case 0:case 12:break d;default:{}}Ra=C;return h|0}while(0);if(a[e+7>>0]|0)break;h=c[j>>2]|0;i=a[e+10>>0]|0;if(!(i<<24>>24))break;h=Xa[c[(c[h>>2]|0)+20>>2]&255](h,i&255)|0}else{c[z>>2]=0;j=e+212|0;h=Cf(c[j>>2]|0)|0;if(!h){h=Za[c[e+204>>2]&127](e,1,z,0)|0;i=c[z>>2]|0;c[i+16>>2]=0;if(i){h=i;A=21}}else A=21;do if((A|0)==21){h=We(e,h,c[e+24>>2]|0,1)|0;i=c[z>>2]|0;if(i)if(!(b[i+28>>1]&32)){Df(i);break}else{D=c[i+20>>2]|0;A=D+120|0;c[A>>2]=(c[A>>2]|0)+-1;D=D+136|0;c[i+16>>2]=c[D>>2];c[D>>2]=i;break}}while(0);if((h|0)==0?(o=c[j>>2]|0,m=c[o>>2]|0,m|0):0)do{n=c[m+12>>2]|0;j=n+8|0;l=m+36|0;i=c[l>>2]|0;if((c[j>>2]|0)==(m|0))c[j>>2]=i;j=c[m+32>>2]|0;k=(j|0)==0;if(k)c[n+4>>2]=i;else{c[j+36>>2]=i;i=c[l>>2]|0}if(!i){c[n>>2]=j;if(k)a[n+33>>0]=2}else c[i+32>>2]=j;D=m+28|0;b[D>>1]=b[D>>1]&-16|1;if((b[m+30>>1]|0)==0?a[n+32>>0]|0:0)cb[c[29440>>2]&255](c[n+44>>2]|0,c[m>>2]|0,0);m=c[o>>2]|0}while((m|0)!=0)}if(h|0){D=h;Ra=C;return D|0}}while(0);if(c[e+216>>2]|0){D=0;Ra=C;return D|0}a[B>>0]=5;D=0;Ra=C;return D|0}function bc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a[b+8>>0]|0;if(!(f<<24>>24)){l=0;return l|0}l=c[b+4>>2]|0;c[l+4>>2]=c[b>>2];if(f<<24>>24==2){i=c[l>>2]|0;j=i+40|0;f=c[j>>2]|0;a:do if(!f){g=i+16|0;if(((a[g>>0]|0)==2?a[i+4>>0]|0:0)?(a[i+5>>0]|0)==1:0){a[g>>0]=1;break}f=i+100|0;c[f>>2]=(c[f>>2]|0)+1;f=uf(i,d[i+19>>0]|0,1)|0;switch((f&255)<<24>>24){case 10:case 13:break;default:{h=f;k=10;break a}}c[j>>2]=f;a[g>>0]=6;c[i+204>>2]=(f|0)==0?74:75;h=f;k=10}else{h=f;k=10}while(0);if((k|0)==10?(e|0)==0&(h|0)!=0:0){l=h;return l|0}e=b+20|0;c[e>>2]=(c[e>>2]|0)+-1;a[l+20>>0]=1;l=l+60|0;yf(c[l>>2]|0);c[l>>2]=0}Zf(b);l=0;return l|0}function cc(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+32|0;o=v+16|0;g=v;if((a[e+8>>0]|0)!=2){u=0;Ra=v;return u|0}u=c[e+4>>2]|0;c[u+4>>2]=c[e>>2];do if(a[u+17>>0]|0){t=c[u>>2]|0;k=c[u+8>>2]|0;l=(k|0)==0;if(!l){e=k;do{r=e+1|0;a[r>>0]=a[r>>0]&-5;e=c[e+24>>2]|0}while((e|0)!=0)}if(!(a[u+18>>0]|0)){r=u+44|0;h=c[r>>2]|0;i=h>>>0<2;if(i)e=0;else{e=h+-2|0;e=e-((e>>>0)%(((((c[u+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;e=((e+1|0)==(1073741824/((c[u+32>>2]|0)>>>0)|0|0)?3:2)+e|0}if((e|0)!=(h|0)?(m=1073741824/((c[u+32>>2]|0)>>>0)|0,n=m+1|0,(h|0)!=(n|0)):0){q=u+12|0;p=c[(c[q>>2]|0)+56>>2]|0;p=d[p+37>>0]<<16|d[p+36>>0]<<24|d[p+38>>0]<<8|d[p+39>>0];g=((c[u+36>>2]|0)>>>0)/5|0;j=g+1|0;if(i)e=0;else{e=h+-2|0;e=e-((e>>>0)%(j>>>0)|0)|0;e=((e+1|0)==(m|0)?3:2)+e|0}i=h-p-(((g-h+p+e|0)>>>0)/(g>>>0)|0)|0;i=i+((n>>>0<h>>>0&i>>>0<n>>>0)<<31>>31)|0;while(1){if(i>>>0<2)e=0;else{e=i+-2|0;e=e-((e>>>0)%(j>>>0)|0)|0;e=((e+1|0)==(m|0)?3:2)+e|0}if((i|0)==(n|0)|(e|0)==(i|0))i=i+-1|0;else break}if(i>>>0>h>>>0){c[o>>2]=32306;c[o+4>>2]=67104;c[o+8>>2]=31517;Db(11,32001,o);u=11;Ra=v;return u|0}if(l|i>>>0>=h>>>0)e=0;else e=$f(k,0,0)|0;g=(e|0)==0;if(h>>>0>i>>>0&g)do{e=_f(u,i,h,1)|0;h=h+-1|0;g=(e|0)==0}while(g&h>>>0>i>>>0);if((p|0)!=0&((e|0)==101|g)){g=c[(c[q>>2]|0)+72>>2]|0;h=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[h+96>>2]|0))e=0;else e=Ve(g)|0;else s=30;do if((s|0)==30){e=c[h+40>>2]|0;if(!e)if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){e=Wf(g)|0;break}else{e=Xf(g)|0;break}}while(0);s=(c[(c[q>>2]|0)+56>>2]|0)+32|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;s=(c[(c[q>>2]|0)+56>>2]|0)+36|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;s=c[(c[q>>2]|0)+56>>2]|0;a[s+28>>0]=i>>>24;a[s+29>>0]=i>>>16;a[s+30>>0]=i>>>8;a[s+31>>0]=i;a[u+19>>0]=1;c[r>>2]=i}if(!e)break;tf(t)|0;u=e;Ra=v;return u|0}c[g>>2]=32306;c[g+4>>2]=67099;c[g+8>>2]=31517;Db(11,32001,g);u=11;Ra=v;return u|0}}while(0);e=c[u>>2]|0;if(a[u+19>>0]|0)c[e+24>>2]=c[u+44>>2];u=ac(e,f,0)|0;Ra=v;return u|0}function dc(a){a=a|0;var b=0,d=0,e=0;if(!a){e=0;return e|0}e=c[a+20>>2]|0;b=c[a+24>>2]|0;d=c[b+4>>2]|0;c[d+4>>2]=c[b>>2];if(c[a>>2]|0){b=b+16|0;c[b>>2]=(c[b>>2]|0)+-1}if(c[a+40>>2]|0){b=(c[d>>2]|0)+88|0;while(1){d=c[b>>2]|0;if((d|0)==(a|0))break;else b=d+44|0}c[b>>2]=c[a+44>>2]}ec(c[a+4>>2]|0,0,0);d=c[a+28>>2]|0;d=(d|0)==101?0:d;b=c[a>>2]|0;do if(b|0){c[b+64>>2]=d;if(!d){if(c[b+260>>2]|0)Ne(b,0)}else Ne(b,d);fc(c[a>>2]|0);if(c[a>>2]|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);fc(e);e=d;return e|0}function ec(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;h=k;j=c[b+4>>2]|0;c[j+4>>2]=c[b>>2];if(!e){f=c[j+8>>2]|0;if(f|0?(g=$f(f,0,0)|0,g|0):0){e=g;f=0;i=4}}else i=4;if((i|0)==4)jg(b,e,f)|0;if((a[b+8>>0]|0)!=2){Zf(b);Ra=k;return}tf(c[j>>2]|0)|0;i=c[j>>2]|0;if(!(Za[c[i+204>>2]&127](i,1,h,0)|0)){f=c[h>>2]|0;g=c[f+8>>2]|0;e=g+4|0;if((c[e>>2]|0)==1)f=c[g+56>>2]|0;else{i=c[f+4>>2]|0;c[g+56>>2]=i;c[g+72>>2]=f;c[g+52>>2]=j;c[e>>2]=1;a[g+9>>0]=100;f=i}f=d[f+29>>0]<<16|d[f+28>>0]<<24|d[f+30>>0]<<8|d[f+31>>0];if(!f)f=c[(c[j>>2]|0)+24>>2]|0;c[j+44>>2]=f;i=c[g+72>>2]|0;f=c[i+20>>2]|0;Df(i);if(!(c[(c[f+212>>2]|0)+12>>2]|0)){switch(a[f+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[f+4>>0]|0))uf(f,0,0)|0;break}default:tf(f)|0}vf(f)}}a[j+20>>0]=1;j=j+60|0;yf(c[j>>2]|0);c[j>>2]=0;Zf(b);Ra=k;return}function fc(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=e+96|0;if((c[t>>2]|0)!=1691352191)return;l=e+4|0;if(c[l>>2]|0)return;p=e+20|0;h=c[p>>2]|0;a:do if((h|0)>0){g=c[e+16>>2]|0;f=0;while(1){r=c[g+(f<<4)+4>>2]|0;if(r|0?c[r+16>>2]|0:0)break;f=f+1|0;if((f|0)>=(h|0))break a}return}while(0);rg(e,0);g=e+444|0;f=c[g>>2]|0;if(f|0){h=e+480|0;i=e+304|0;j=e+308|0;k=e+300|0;do{c[g>>2]=c[f+24>>2];do if(!(c[h>>2]|0)){r=f;if((c[i>>2]|0)>>>0<=r>>>0?(c[j>>2]|0)>>>0>r>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{r=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}else Xd(e,f);while(0);f=c[g>>2]|0}while((f|0)!=0)}c[e+452>>2]=0;c[e+456>>2]=0;a[e+87>>0]=0;r=e+16|0;f=c[r>>2]|0;if((c[p>>2]|0)>0){i=0;do{g=f+(i<<4)+4|0;h=c[g>>2]|0;if(h|0?(ug(h),c[g>>2]=0,(i|0)!=1):0)c[f+(i<<4)+12>>2]=0;i=i+1|0;f=c[r>>2]|0}while((i|0)<(c[p>>2]|0))}f=c[f+28>>2]|0;if(f|0)dh(f);m=e+360|0;g=c[m>>2]|0;c[m>>2]=0;if(g|0){f=c[l>>2]|0;if(f|0)do{m=f+149|0;l=(d[m>>0]|d[m+1>>0]<<8)&-4|1;a[m>>0]=l;a[m+1>>0]=l>>8;f=c[f+8>>2]|0}while((f|0)!=0);f=g;do{g=f;f=c[f+24>>2]|0;h=c[g>>2]|0;l=g+12|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;do if(!m){i=c[g+8>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}m=g;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[g>>2]=c[m>>2];c[m>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}while((f|0)!=0)}if((c[p>>2]|0)>2){j=e+480|0;k=e+304|0;l=e+308|0;m=e+300|0;i=2;f=2;do{g=c[r>>2]|0;h=g+(i<<4)|0;if(!(c[g+(i<<4)+4>>2]|0)){g=c[h>>2]|0;do if(g|0){if(c[j>>2]|0){Xd(e,g);break}u=g;if((c[k>>2]|0)>>>0<=u>>>0?(c[l>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[h>>2]=0}else{if((f|0)<(i|0)){u=g+(f<<4)|0;c[u>>2]=c[h>>2];c[u+4>>2]=c[h+4>>2];c[u+8>>2]=c[h+8>>2];c[u+12>>2]=c[h+12>>2]}f=f+1|0}i=i+1|0}while((i|0)<(c[p>>2]|0));c[p>>2]=f;if((f|0)<3)q=64}else{c[p>>2]=2;q=64}if((q|0)==64?(n=c[r>>2]|0,o=e+412|0,(n|0)!=(o|0)):0){c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];c[o+20>>2]=c[n+20>>2];c[o+24>>2]=c[n+24>>2];c[o+28>>2]=c[n+28>>2];do if(n|0){if(c[e+480>>2]|0){Xd(e,n);break}u=n;if((c[e+304>>2]|0)>>>0<=u>>>0?(c[e+308>>2]|0)>>>0>u>>>0:0){u=e+300|0;c[n>>2]=c[u>>2];c[u>>2]=n;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{u=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[r>>2]=o}m=e+372|0;f=c[m>>2]|0;if(!f)f=0;else{i=e+480|0;j=e+304|0;k=e+308|0;l=e+300|0;do{h=c[f+8>>2]|0;do{g=c[h+36>>2]|0;do if(g|0?(u=(c[g>>2]|0)+-1|0,c[g>>2]=u,(u|0)==0):0){ab[c[g+4>>2]&127](c[g+8>>2]|0);if(c[i>>2]|0){Xd(e,g);break}u=g;if((c[j>>2]|0)>>>0<=u>>>0?(c[k>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[l>>2];c[l>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=h;h=c[h+12>>2]|0;do if(g|0){if(c[i>>2]|0){Xd(e,g);break}u=g;if((c[j>>2]|0)>>>0<=u>>>0?(c[k>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[l>>2];c[l>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}while((h|0)!=0);f=c[f>>2]|0}while((f|0)!=0);f=c[m>>2]|0}c[m>>2]=0;g=e+376|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+364>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+368>>2]=0;m=e+388|0;f=c[m>>2]|0;if(!f)f=0;else{i=e+480|0;j=e+304|0;k=e+308|0;l=e+300|0;do{h=c[f+8>>2]|0;g=c[h+16>>2]|0;if(g|0)ab[g&127](c[h+8>>2]|0);g=c[h+36>>2]|0;if(g|0)ab[g&127](c[h+28>>2]|0);g=c[h+56>>2]|0;if(g|0)ab[g&127](c[h+48>>2]|0);b:do if(!(c[i>>2]|0)){g=h;do if((c[j>>2]|0)>>>0<=g>>>0){if((c[k>>2]|0)>>>0<=g>>>0)break;c[h>>2]=c[l>>2];c[l>>2]=h;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(e,h);while(0);f=c[f>>2]|0}while((f|0)!=0);f=c[m>>2]|0}c[m>>2]=0;g=e+392|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+380>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+384>>2]=0;n=e+344|0;f=c[n>>2]|0;if(!f)f=0;else{j=e+480|0;k=e+304|0;l=e+308|0;m=e+300|0;do{i=c[f+8>>2]|0;g=c[i+12>>2]|0;if(g|0)ab[g&127](c[i+8>>2]|0);g=i+16|0;h=c[g>>2]|0;if(h|0){u=h+36|0;c[u>>2]=c[u>>2]|2;do if(!(c[j>>2]|0)){q=h+32|0;u=(c[q>>2]|0)+-1|0;c[q>>2]=u;if(u|0)break;Vi(e,h)}else Vi(e,h);while(0);c[g>>2]=0}c:do if(!(c[j>>2]|0)){g=i;do if((c[k>>2]|0)>>>0<=g>>>0){if((c[l>>2]|0)>>>0<=g>>>0)break;c[i>>2]=c[m>>2];c[m>>2]=i;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{u=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(e,i);while(0);f=c[f>>2]|0}while((f|0)!=0);f=c[n>>2]|0}c[n>>2]=0;g=e+348|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+336>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+340>>2]=0;c[e+64>>2]=0;f=e+260|0;d:do if(c[f>>2]|0?(Ne(e,0),s=c[f>>2]|0,s|0):0){if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);f=c[s+32>>2]|0;do if(f|0){if(c[f+480>>2]|0){Xd(f,s);break d}g=s;if((c[f+304>>2]|0)>>>0>g>>>0)break;if((c[f+308>>2]|0)>>>0<=g>>>0)break;u=f+300|0;c[s>>2]=c[u>>2];c[u>>2]=s;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{u=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);c[t>>2]=-1254786768;f=c[(c[r>>2]|0)+28>>2]|0;e:do if(f|0){if(c[e+480>>2]|0){Xd(e,f);break}g=f;do if((c[e+304>>2]|0)>>>0<=g>>>0){if((c[e+308>>2]|0)>>>0<=g>>>0)break;u=e+300|0;c[f>>2]=c[u>>2];c[u>>2]=f;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{u=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[t>>2]=-1623446221;do if(a[e+278>>0]|0){f=c[e+304>>2]|0;if(!f)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{u=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{u=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function gc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+32|0;d=l+8|0;if(!b){k=0;Ra=l;return k|0}k=c[b>>2]|0;if(!k){Db(21,32391,l);c[d>>2]=58063;c[d+4>>2]=81403;c[d+8>>2]=31517;Db(21,32001,d);k=21;Ra=l;return k|0}i=b+136|0;h=c[i+4>>2]|0;if((h|0)>0|(h|0)==0&(c[i>>2]|0)>>>0>0)hc(k,b);i=b+20|0;d=c[i>>2]|0;if((d|0)<832317811)switch(d|0){case 770837923:{j=6;break}default:f=0}else switch(d|0){case 832317811:{j=6;break}default:f=0}if((j|0)==6)f=kc(b)|0;g=c[b>>2]|0;kb(g,b);h=c[b+4>>2]|0;e=b+8|0;d=c[e>>2]|0;if(!h)c[g+4>>2]=d;else{c[h+8>>2]=d;d=c[e>>2]|0}if(d|0)c[d+4>>2]=h;c[i>>2]=1443283912;c[b>>2]=0;do if(g){if(c[g+480>>2]|0){Xd(g,b);break}i=b;if((c[g+304>>2]|0)>>>0<=i>>>0?(c[g+308>>2]|0)>>>0>i>>>0:0){i=g+300|0;c[b>>2]=c[i>>2];c[i>>2]=b}else j=18}else j=18;while(0);do if((j|0)==18)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if((f|0)==3082|(a[k+81>>0]|0)!=0){og(k);d=7}else d=c[k+68>>2]&f;fc(k);k=d;Ra=l;return k|0}function hc(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;k=Ra;Ra=Ra+32|0;e=k+16|0;f=k+8|0;j=k;h=c[b>>2]|0;if((c[h>>2]|0)>1?(i=c[h+72>>2]|0,(i|0)!=0):0){Xa[i&255](h,f)|0;e=c[f>>2]|0;f=c[f+4>>2]|0}else{Xa[c[h+64>>2]&255](h,e)|0;l=+g[e>>3]*864.0e5;e=~~l>>>0;i=+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0;c[f>>2]=e;c[f+4>>2]=i;f=i}i=d+136|0;h=i;e=Tv(e|0,f|0,c[h>>2]|0,c[h+4>>2]|0)|0;e=Yv(e|0,L()|0,1e6,0)|0;f=L()|0;h=j;c[h>>2]=e;c[h+4>>2]=f;h=c[b+204>>2]|0;if(h|0)db[h&127](c[b+208>>2]|0,c[d+188>>2]|0,e,f);if(!(a[b+88>>0]&2)){j=i;d=j;c[d>>2]=0;j=j+4|0;c[j>>2]=0;Ra=k;return}Za[c[b+196>>2]&127](2,c[b+200>>2]|0,d,j)|0;j=i;d=j;c[d>>2]=0;j=j+4|0;c[j>>2]=0;Ra=k;return}function ic(b,d){b=b|0;d=d|0;if((d|0)==3082|(a[b+81>>0]|0)!=0){og(b);d=7;return d|0}else{d=c[b+68>>2]&d;return d|0}return 0}function jc(b){b=b|0;var d=0,e=0,f=0;if(!b){e=0;return e|0}e=c[b>>2]|0;d=b+136|0;f=c[d+4>>2]|0;if((f|0)>0|(f|0)==0&(c[d>>2]|0)>>>0>0)hc(e,b);d=kc(b)|0;c[b+20>>2]=770837923;c[b+36>>2]=-1;c[b+40>>2]=0;a[b+146>>0]=2;c[b+44>>2]=0;c[b+32>>2]=1;a[b+147>>0]=-1;c[b+48>>2]=0;f=b+64|0;c[f>>2]=0;c[f+4>>2]=0;if((d|0)==3082|(a[e+81>>0]|0)!=0){og(e);f=7;return f|0}else{f=c[e+68>>2]&d;return f|0}return 0}function kc(b){b=b|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+16|0;f=h;g=c[b>>2]|0;pg(b)|0;if((c[b+36>>2]|0)>-1){qg(b)|0;e=b+149|0;f=d[e>>0]|d[e+1>>0]<<8;if(f&64){f=f&-4|1;a[e>>0]=f;a[e+1>>0]=f>>8}}else{e=c[b+40>>2]|0;if(e|0?(i=b+149|0,(d[i>>0]|d[i+1>>0]<<8)&3):0){i=c[b+124>>2]|0;c[f>>2]=i;Vb(g,e,(i|0)==0?0:31408,f)}}e=b+124|0;f=c[e>>2]|0;do if(f|0){if(g|0){if(c[g+480>>2]|0){Xd(g,f);break}i=f;if((c[g+304>>2]|0)>>>0<=i>>>0?(c[g+308>>2]|0)>>>0>i>>>0:0){i=g+300|0;c[f>>2]=c[i>>2];c[i>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[e>>2]=0;c[b+120>>2]=0;c[b+20>>2]=1224384374;Ra=h;return c[g+68>>2]&c[b+40>>2]|0}function lc(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+16|0;f=b[k>>1]|0;if(f<<16>>16>0){l=e+100|0;j=0;g=c[l>>2]|0;do{h=g+(j*40|0)|0;i=g+(j*40|0)+8|0;if(!((b[i>>1]&9216)==0?(c[g+(j*40|0)+24>>2]|0)==0:0)){Cg(h);g=c[l>>2]|0;i=g+(j*40|0)+8|0;f=b[k>>1]|0}b[i>>1]=1;j=j+1|0}while((j|0)<(f<<16>>16|0))}if(!(c[e+208>>2]|0))return 0;l=e+149|0;k=(d[l>>0]|d[l+1>>0]<<8)&-4|1;a[l>>0]=k;a[l+1>>0]=k>>8;return 0}function mc(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=d+8|0;f=b[i>>1]|0;e=f&65535;if(!(e&18)){if((f&514)==514?(a[d+10>>0]|0)==1:0){i=c[d+16>>2]|0;return i|0}if(f&1){i=0;return i|0}i=Gg(d,1)|0;return i|0}g=d+12|0;h=c[g>>2]|0;do if(e&16384){e=(c[d>>2]|0)+h|0;if((e|0)<1)if(!(f&16)){e=h;break}else e=1;if(!(Eg(d,e,1)|0)){gw((c[d+16>>2]|0)+(c[g>>2]|0)|0,0,c[d>>2]|0)|0;e=(c[g>>2]|0)+(c[d>>2]|0)|0;c[g>>2]=e;f=b[i>>1]&-16897;b[i>>1]=f;break}else{i=0;return i|0}}else e=h;while(0);b[i>>1]=f|16;if(!e){i=0;return i|0}i=c[d+16>>2]|0;return i|0}function nc(d){d=d|0;var e=0;if(!d){e=0;return e|0}e=b[d+8>>1]|0;if((e&514)==514?(a[d+10>>0]|0)==1:0){e=c[d+16>>2]|0;return e|0}if(e&1){e=0;return e|0}e=Gg(d,1)|0;return e|0}function oc(d){d=d|0;var e=0,f=0;e=b[d+8>>1]|0;if(e&2?(a[d+10>>0]|0)==1:0){d=c[d+12>>2]|0;return d|0}e=e&65535;if(!(e&16)){if(e&1|0){d=0;return d|0}d=Fg(d,1)|0;return d|0}else{f=c[d+12>>2]|0;if(!(e&16384)){d=f;return d|0}d=(c[d>>2]|0)+f|0;return d|0}return 0}function pc(b){b=b|0;var d=0,f=0.0;d=e[b+8>>1]|0;if(d&8|0){f=+g[b>>3];return +f}if(d&4|0){d=b;f=+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0);return +f}if(!(d&18)){f=0.0;return +f}f=+Kg(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0);return +f}function qc(b){b=b|0;var d=0;d=e[b+8>>1]|0;if(d&4|0){d=c[b>>2]|0;return d|0}if(d&8|0){d=Mg(+g[b>>3])|0;L()|0;return d|0}if(!(d&18)){d=0;return d|0}d=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;L()|0;return d|0}function rc(b){b=b|0;var d=0;d=e[b+8>>1]|0;if(d&4|0){d=b;b=c[d+4>>2]|0;d=c[d>>2]|0;K(b|0);return d|0}if(d&8|0){d=Mg(+g[b>>3])|0;b=L()|0;K(b|0);return d|0}if(!(d&18)){b=0;d=0;K(b|0);return d|0}d=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;b=L()|0;K(b|0);return d|0}function sc(a){a=a|0;return d[816+(b[a+8>>1]&31)>>0]|0|0}function tc(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!a){i=0;return i|0}if(mb()|0){i=0;return i|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](40)|0;if(!d){i=0;return i|0}else e=d}else{f=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){h=c[14978]|0;g=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&g>>>0<=h>>>0)&1}e=Wa[c[29340>>2]&127](f)|0;if(!e){i=0;return i|0}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}h=e+20|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];c[e+16>>2]=c[a+16>>2];h=e+8|0;d=b[h>>1]&-1025;b[h>>1]=d;g=e+32|0;c[g>>2]=0;d=d&65535;if(!(d&18)){i=e;return i|0}f=(d&58367|4096)&65535;b[h>>1]=f;do if(d&16384){a=e+12|0;d=(c[e>>2]|0)+(c[a>>2]|0)|0;if((d|0)<1)if(!(f&16)){i=21;break}else d=1;if(!(Eg(e,d,1)|0)){gw((c[e+16>>2]|0)+(c[a>>2]|0)|0,0,c[e>>2]|0)|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);d=b[h>>1]&-16897;b[h>>1]=d;if((c[e+24>>2]|0)!=0?(c[e+16>>2]|0)==(c[e+20>>2]|0):0)i=23;else i=21}}else i=21;while(0);if((i|0)==21?(Jg(e)|0)==0:0){d=b[h>>1]|0;i=23}if((i|0)==23){b[h>>1]=d&-4097;i=e;return i|0}if(!((b[h>>1]&9216)==0?!(c[e+24>>2]|0):0))Cg(e);d=c[g>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);i=0;return i|0}i=e;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[e>>2]=c[i>>2];c[i>>2]=e;i=0;return i|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);i=0;return i|0}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);i=0;return i|0}return 0}function uc(a){a=a|0;var d=0,e=0;if(!a)return;if(!((b[a+8>>1]&9216)==0?!(c[a+24>>2]|0):0))Cg(a);d=c[a+32>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,a);return}e=a;if((c[d+304>>2]|0)>>>0<=e>>>0?(c[d+308>>2]|0)>>>0>e>>>0:0){e=d+300|0;c[a>>2]=c[e>>2];c[e>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function vc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((yc(c[a>>2]|0,b,d,0,e)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function wc(a,d){a=a|0;d=+d;var e=0,f=0,h=0,i=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;a=c[a>>2]|0;e=a+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(a);g[f>>3]=d;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[a>>3]=d;b[e>>1]=8;Ra=i;return}function xc(a,b,d){a=a|0;b=b|0;d=d|0;c[a+20>>2]=1;yc(c[a>>2]|0,b,d,1,-1)|0;return}function yc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!f){g=d+8|0;if(!(b[g>>1]&9216)){b[g>>1]=1;s=0;return s|0}else{Dg(d);s=0;return s|0}}k=d+32|0;l=c[k>>2]|0;m=(l|0)==0;if(m)s=1e9;else s=c[l+108>>2]|0;p=h<<24>>24==0;j=p?16:2;if((g|0)<0){a:do if(h<<24>>24!=1)if((s|0)<0)g=0;else{g=0;do{if(!((a[f+(g|1)>>0]|a[f+g>>0])<<24>>24))break a;g=g+2|0}while((g|0)<=(s|0))}else g=(Eu(f)|0)&2147483647;while(0);o=j|512;q=g}else{o=j;q=g}do if((i|0)==(-1|0)){k=((o&512)==0?0:h<<24>>24==1?1:2)+q|0;if((q|0)>(s|0)){if(m){s=18;return s|0}g=c[l+236>>2]|0;if(!g){s=18;return s|0}c[g+12>>2]=18;s=g+36|0;c[s>>2]=(c[s>>2]|0)+1;s=18;return s|0}else{g=k>>>0>32?k:32;do if((c[d+24>>2]|0)<(g|0))if(!(Eg(d,g,0)|0)){j=d+8|0;g=c[d+16>>2]|0;break}else{s=7;return s|0}else{g=c[d+20>>2]|0;c[d+16>>2]=g;j=d+8|0;b[j>>1]=b[j>>1]&13}while(0);ew(g|0,f|0,k|0)|0;i=o;break}}else{j=d+8|0;if(!((b[j>>1]&9216)==0?!(c[d+24>>2]|0):0))Cg(d);c[d+16>>2]=f;if((i|0)!=116){c[d+36>>2]=i;i=(((i|0)==0?2048:1024)|o&65535)&65535;break}c[d+20>>2]=f;g=c[k>>2]|0;if(((g|0)!=0?(n=f,(c[g+304>>2]|0)>>>0<=n>>>0):0)?(c[g+308>>2]|0)>>>0>n>>>0:0)g=e[g+276>>1]|0;else g=Wa[c[29352>>2]&127](f)|0;c[d+24>>2]=g;i=o}while(0);f=d+12|0;c[f>>2]=q;b[j>>1]=i;h=p?1:h;n=d+10|0;a[n>>0]=h;do if(h<<24>>24!=1&(q|0)>1){o=d+16|0;g=c[o>>2]|0;l=a[g>>0]|0;k=a[g+1>>0]|0;if(!(l<<24>>24==-1&k<<24>>24==-2))if(l<<24>>24==-2&k<<24>>24==-1)m=3;else break;else m=2;k=i&65535;do if(k&18){do if(k&16384){g=(c[d>>2]|0)+q|0;if((g|0)<1)if(!(i&16)){k=q;g=i;break}else g=1;if(!(Eg(d,g,1)|0)){gw((c[o>>2]|0)+(c[f>>2]|0)|0,0,c[d>>2]|0)|0;k=(c[f>>2]|0)+(c[d>>2]|0)|0;c[f>>2]=k;g=b[j>>1]&-16897;b[j>>1]=g;break}else{s=7;return s|0}}else{k=q;g=i}while(0);if(c[d+24>>2]|0?(r=c[o>>2]|0,(r|0)==(c[d+20>>2]|0)):0){l=g;g=r;break}if(!(Jg(d)|0)){l=b[j>>1]|0;k=c[f>>2]|0;g=c[o>>2]|0;break}else{s=7;return s|0}}else{l=i;k=q}while(0);b[j>>1]=l&-4097;r=k+-2|0;c[f>>2]=r;fw(g|0,g+2|0,r|0)|0;a[(c[o>>2]|0)+(c[f>>2]|0)>>0]=0;a[(c[o>>2]|0)+((c[f>>2]|0)+1)>>0]=0;b[j>>1]=b[j>>1]|512;a[n>>0]=m}while(0);s=(q|0)>(s|0)?18:0;return s|0}function zc(a,d){a=a|0;d=d|0;var e=0,f=0;a=c[a>>2]|0;e=((d|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}else{Pg(a,d,e);return}}function Ac(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;a=c[a>>2]|0;f=a+8|0;if(!(b[f>>1]&9216)){c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}else{Pg(a,d,e);return}}function Bc(a){a=a|0;var d=0;a=c[a>>2]|0;d=a+8|0;if(!(b[d>>1]&9216)){b[d>>1]=1;return}else{Dg(a);return}}function Cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((yc(c[a>>2]|0,b,d,1,e)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function Dc(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;f=c[a>>2]|0;g=f+8|0;if(b[g>>1]&9216)Dg(f);c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];e=b[g>>1]&-1025;b[g>>1]=e;e=e&65535;if(!(e&18))return;if(b[d+8>>1]&2048)return;a=(e|4096)&65535;b[g>>1]=a;do if(e&16384){e=f+12|0;d=(c[f>>2]|0)+(c[e>>2]|0)|0;if((d|0)<1)if(!(a&16))break;else a=1;else a=d;if(!(Eg(f,a,1)|0)){gw((c[f+16>>2]|0)+(c[e>>2]|0)|0,0,c[f>>2]|0)|0;c[e>>2]=(c[e>>2]|0)+(c[f>>2]|0);a=b[g>>1]&-16897;b[g>>1]=a;break}else return}while(0);if(!((c[f+24>>2]|0)!=0?(c[f+16>>2]|0)==(c[f+20>>2]|0):0))h=12;do if((h|0)==12)if(!(Jg(f)|0)){a=b[g>>1]|0;break}else return;while(0);b[g>>1]=a&-4097;return}function Ec(d){d=d|0;var e=0,f=0;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;f=c[e+32>>2]|0;e=f+81|0;if(a[e>>0]|0)return;if(a[f+82>>0]|0)return;a[e>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[f+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Fc(b){b=b|0;var d=0;d=b+81|0;if(a[d>>0]|0)return;if(a[b+82>>0]|0)return;a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;b=c[b+236>>2]|0;if(!b)return;c[b+12>>2]=7;return}function Gc(f){f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0.0;Ga=Ra;Ra=Ra+384|0;Aa=Ga+368|0;za=Ga+360|0;ya=Ga+352|0;xa=Ga+344|0;wa=Ga+336|0;va=Ga+328|0;ua=Ga+320|0;ta=Ga+312|0;sa=Ga+304|0;ra=Ga+296|0;qa=Ga+288|0;pa=Ga+280|0;oa=Ga+272|0;Ca=Ga+264|0;Ba=Ga+256|0;i=Ga+240|0;h=Ga+232|0;fa=Ga;ia=Ga+372|0;do if(!f)Db(21,32555,Ga+224|0);else{Fa=c[f>>2]|0;if(!Fa){Db(21,32391,h);break}ba=f+149|0;ca=(d[ba>>0]|d[ba+1>>0]<<8)&-17;a[ba>>0]=ca;a[ba+1>>0]=ca>>8;ca=f+20|0;da=f+136|0;C=f+36|0;Ea=f+40|0;D=f+146|0;E=f+44|0;G=f+32|0;I=f+147|0;J=f+48|0;K=f+64|0;L=f+148|0;M=f+88|0;N=f+188|0;O=f+120|0;P=f+8|0;Q=f+4|0;R=f+208|0;S=f+160|0;T=f+180|0;U=f+108|0;V=f+100|0;W=f+104|0;X=fa+4|0;Y=fa+8|0;Z=fa+12|0;_=fa+16|0;$=fa+21|0;aa=f+144|0;B=0;a:while(1){if((c[ca>>2]|0)!=770837923){h=c[f>>2]|0;Da=da;A=c[Da+4>>2]|0;if((A|0)>0|(A|0)==0&(c[Da>>2]|0)>>>0>0)hc(h,f);Da=kc(f)|0;c[ca>>2]=770837923;c[C>>2]=-1;c[Ea>>2]=0;a[D>>0]=2;c[E>>2]=0;c[G>>2]=1;a[I>>0]=-1;c[J>>2]=0;A=K;c[A>>2]=0;c[A+4>>2]=0;if((Da|0)==3082|(a[h+81>>0]|0)!=0)og(h)}A=c[f>>2]|0;if(a[A+81>>0]|0){Da=13;break}do if((c[C>>2]|0)<0){if((d[ba>>0]|d[ba+1>>0]<<8)&3){c[Ea>>2]=17;h=1;Da=246;break}h=A+168|0;if(!(c[h>>2]|0))c[A+264>>2]=0;do if(((a[A+88>>0]&-126)<<24>>24?(a[A+165>>0]|0)==0:0)?c[N>>2]|0:0){i=c[A>>2]|0;if((c[i>>2]|0)>1?(na=c[i+72>>2]|0,na|0):0){Xa[na&255](i,da)|0;break}Xa[c[i+64>>2]&255](i,fa)|0;Ha=+g[fa>>3]*864.0e5;z=+t(Ha)>=1.0?(Ha>0.0?~~+H(+s(Ha/4294967296.0),4294967295.0)>>>0:~~+F((Ha-+(~~Ha>>>0))/4294967296.0)>>>0):0;Da=da;c[Da>>2]=~~Ha>>>0;c[Da+4>>2]=z}while(0);c[h>>2]=(c[h>>2]|0)+1;h=d[ba>>0]|d[ba+1>>0]<<8;if(!(h&256)){h=A+176|0;c[h>>2]=(c[h>>2]|0)+1;h=d[ba>>0]|d[ba+1>>0]<<8}if(h&512){Da=A+172|0;c[Da>>2]=(c[Da>>2]|0)+1}c[C>>2]=0;Da=31}else Da=31;while(0);if((Da|0)==31){Da=0;h=(d[ba>>0]|d[ba+1>>0]<<8)&12;b:do if(!(h<<16>>16)){z=A+180|0;c[z>>2]=(c[z>>2]|0)+1;h=Rg(f)|0;c[z>>2]=(c[z>>2]|0)+-1;if((h|0)==100)h=100;else Da=226}else{z=c[f>>2]|0;y=c[M>>2]|0;x=y+40|0;if(h<<16>>16==4)r=1;else r=0?1:(c[z+32>>2]&16777216|0)!=0;m=c[y+72>>2]|0;n=m+480|0;h=(m|0)==0;o=m+304|0;p=m+308|0;q=m+300|0;c:do if(c[n>>2]|0){if(!h){h=1;while(1){d:do if(c[y+(h*40|0)+24>>2]|0?(ha=c[y+(h*40|0)+20>>2]|0,ha|0):0){if(c[n>>2]|0){Xd(m,ha);break}i=ha;do if((c[o>>2]|0)>>>0<=i>>>0){if((c[p>>2]|0)>>>0<=i>>>0)break;c[ha>>2]=c[q>>2];c[q>>2]=ha;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](ha);break}else{w=Wa[c[29352>>2]&127](ha)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ha);break}}while(0);h=h+1|0;if((h|0)==9)break c}}do if(c[y+64>>2]|0?(ga=c[y+60>>2]|0,ga|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ga);break}else{w=Wa[c[29352>>2]&127](ga)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ga);break}while(0);do if(c[y+104>>2]|0?(ja=c[y+100>>2]|0,ja|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ja);break}else{w=Wa[c[29352>>2]&127](ja)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ja);break}while(0);do if(c[y+144>>2]|0?(ka=c[y+140>>2]|0,ka|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ka);break}else{w=Wa[c[29352>>2]&127](ka)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ka);break}while(0);do if(c[y+184>>2]|0?(la=c[y+180>>2]|0,la|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](la);break}else{w=Wa[c[29352>>2]&127](la)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](la);break}while(0);do if(c[y+224>>2]|0){h=c[y+220>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(c[y+264>>2]|0){h=c[y+260>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(c[y+304>>2]|0){h=c[y+300>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);if(!(c[y+344>>2]|0))break;h=c[y+340>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else{if(h){h=1;while(1){i=y+(h*40|0)+8|0;if(!(b[i>>1]&9216)){j=y+(h*40|0)+24|0;if(c[j>>2]|0){k=c[y+(h*40|0)+20>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[j>>2]=0}}else Cg(y+(h*40|0)|0);b[i>>1]=128;h=h+1|0;if((h|0)==9)break c}}h=1;do{i=y+(h*40|0)+8|0;if(!(b[i>>1]&9216)){j=y+(h*40|0)+24|0;if(c[j>>2]|0){k=c[y+(h*40|0)+20>>2]|0;e:do if(!(c[n>>2]|0)){l=k;do if((c[o>>2]|0)>>>0<=l>>>0){if((c[p>>2]|0)>>>0<=l>>>0)break;c[k>>2]=c[q>>2];c[q>>2]=k;break e}while(0);if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(m,k);while(0);c[j>>2]=0}}else Cg(y+(h*40|0)|0);b[i>>1]=128;h=h+1|0}while((h|0)!=9)}while(0);c[O>>2]=0;if((c[Ea>>2]|0)==7){h=z+81|0;if(a[h>>0]|0){h=1;Da=226;break}if(a[z+82>>0]|0){h=1;Da=226;break}a[h>>0]=1;if((c[z+180>>2]|0)>0)c[z+264>>2]=1;h=z+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[z+236>>2]|0;if(!h){h=1;Da=226;break}c[h+12>>2]=7;h=1;Da=226;break}o=c[U>>2]|0;if(r){h=c[M>>2]|0;j=h+360|0;if(b[h+368>>1]&16){k=(c[h+372>>2]|0)>>>2;l=c[h+376>>2]|0;if(!k){q=o;k=0}else{h=o;i=0;do{h=(c[(c[l+(i<<2)>>2]|0)+4>>2]|0)+h|0;i=i+1|0}while((i|0)!=(k|0));q=h}}else{q=o;k=0;l=0}}else{j=0;q=o;k=0;l=0}i=c[C>>2]|0;h=i+1|0;c[C>>2]=h;f:do if((i|0)<(q|0)){u=j+16|0;v=j+8|0;w=j+12|0;g:do if(r){h=o;while(1){if((i|0)<(h|0))p=(c[W>>2]|0)+(i*20|0)|0;else{i=i-h|0;h=c[l>>2]|0;m=c[h+4>>2]|0;if((i|0)>=(m|0)){n=0;do{i=i-m|0;n=n+1|0;h=c[l+(n<<2)>>2]|0;m=c[h+4>>2]|0}while((i|0)>=(m|0))}p=(c[h>>2]|0)+(i*20|0)|0}do if((a[p+1>>0]|0)==-4){o=k+1|0;n=o<<2;h:do if((k|0)>0){m=c[p+16>>2]|0;h=0;do{if((c[l+(h<<2)>>2]|0)==(m|0))break h;h=h+1|0}while((h|0)<(k|0))}else h=0;while(0);if((h|0)!=(k|0)){n=q;break}r=Eg(j,n,(k|0)!=0&1)|0;c[Ea>>2]=r;if(r|0){h=1;Da=226;break b}l=c[u>>2]|0;r=p+16|0;c[l+(k<<2)>>2]=c[r>>2];b[v>>1]=b[v>>1]|16;c[w>>2]=n;n=(c[(c[r>>2]|0)+4>>2]|0)+q|0;k=o}else n=q;while(0);h=d[ba>>0]|d[ba+1>>0]<<8;if(!(h&8))break g;switch(a[p>>0]|0){case -85:break g;case 61:{m=c[C>>2]|0;if((m|0)>1)break g;else i=m;break}default:i=c[C>>2]|0}c[C>>2]=i+1;if((i|0)>=(n|0))break f;q=n;h=c[U>>2]|0}}else{n=d[ba>>0]|d[ba+1>>0]<<8;if(!(n&8)){if((i|0)<(o|0)){p=(c[W>>2]|0)+(i*20|0)|0;h=n;break}i=i-o|0;h=c[l>>2]|0;j=c[h+4>>2]|0;if((i|0)>=(j|0)){k=0;do{i=i-j|0;k=k+1|0;h=c[l+(k<<2)>>2]|0;j=c[h+4>>2]|0}while((i|0)>=(j|0))}p=(c[h>>2]|0)+(i*20|0)|0;h=n;break}m=h;while(1){if((i|0)<(o|0))h=(c[W>>2]|0)+(i*20|0)|0;else{i=i-o|0;h=c[l>>2]|0;j=c[h+4>>2]|0;if((i|0)>=(j|0)){k=0;do{i=i-j|0;k=k+1|0;h=c[l+(k<<2)>>2]|0;j=c[h+4>>2]|0}while((i|0)>=(j|0))}h=(c[h>>2]|0)+(i*20|0)|0}switch(a[h>>0]|0){case -85:{p=h;h=n;break g}case 61:{if((m|0)>1){p=h;h=n;break g}break}default:{}}h=m+1|0;c[C>>2]=h;if((m|0)<(q|0)){i=m;m=h}else break f}}while(0);if(c[z+264>>2]|0){c[Ea>>2]=9;Ag(f,50367,Ba);h=1;Da=226;break b}if((h&12)==4){b[y+48>>1]=4;q=x;c[q>>2]=i;c[q+4>>2]=((i|0)<0)<<31>>31;b[y+88>>1]=2562;q=c[2800+(d[p>>0]<<2)>>2]|0;c[y+96>>2]=q;q=(Eu(q)|0)&1073741823;c[y+92>>2]=q;a[y+90>>0]=1;q=y+120|0}else q=x;b[q+8>>1]=4;i=c[p+4>>2]|0;o=q;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;b[q+48>>1]=4;o=c[p+8>>2]|0;i=q+40|0;c[i>>2]=o;c[i+4>>2]=((o|0)<0)<<31>>31;b[q+88>>1]=4;i=c[p+12>>2]|0;o=q+80|0;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;o=q+120|0;i=q+144|0;j=c[i>>2]|0;if((j|0)<100){if(Eg(o,100,0)|0){h=1;Da=226;break b}h=q+136|0;k=q+128|0;n=h;h=c[h>>2]|0;j=c[i>>2]|0}else{h=c[q+140>>2]|0;n=q+136|0;c[n>>2]=h;k=q+128|0;b[k>>1]=b[k>>1]&13}b[k>>1]=514;c[X>>2]=h;c[fa>>2]=0;c[Y>>2]=j;c[Z>>2]=0;c[Z+4>>2]=0;b[Z+8>>1]=0;i:do switch(a[p+1>>0]|0){case -9:{k=c[p+16>>2]|0;l=k+6|0;c[Ca>>2]=e[l>>1];Eb(fa,34044,Ca);if(b[l>>1]|0){m=k+16|0;j=0;do{i=c[k+20+(j<<2)>>2]|0;if(!i)i=59952;else i=c[i>>2]|0;z=(Bu(i,34049)|0)==0;c[oa>>2]=(a[(c[m>>2]|0)+j>>0]|0)==0?59952:34064;c[oa+4>>2]=z?34056:i;Eb(fa,34058,oa);j=j+1|0}while(j>>>0<(e[l>>1]|0)>>>0)}i=c[_>>2]|0;j=i+1|0;if(j>>>0<(c[Y>>2]|0)>>>0){c[_>>2]=j;a[(c[X>>2]|0)+i>>0]=41;break i}else{wb(fa,34066,1);break i}}case -2:{c[pa>>2]=c[c[p+16>>2]>>2];Eb(fa,34068,pa);break}case -8:{y=c[p+16>>2]|0;z=a[y>>0]|0;c[qa>>2]=c[y+32>>2];c[qa+4>>2]=z;Eb(fa,34076,qa);break}case -14:{x=c[p+16>>2]|0;y=c[x+4>>2]|0;z=ra;c[z>>2]=c[x>>2];c[z+4>>2]=y;Eb(fa,32524,ra);break}case -3:{c[sa>>2]=c[p+16>>2];Eb(fa,34083,sa);break}case -13:{g[ta>>3]=+g[c[p+16>>2]>>3];Eb(fa,34086,ta);break}case -11:{i=c[p+16>>2]|0;j=e[i+8>>1]|0;if(j&2|0){h=c[i+16>>2]|0;break i}if(j&4|0){x=i;y=c[x+4>>2]|0;z=ua;c[z>>2]=c[x>>2];c[z+4>>2]=y;Eb(fa,32524,ua);break i}if(!(j&8)){h=(j&1|0)==0?34092:31171;break i}else{g[va>>3]=+g[i>>3];Eb(fa,34086,va);break i}}case -12:{c[wa>>2]=c[(c[p+16>>2]|0)+8>>2];Eb(fa,34099,wa);break}case -15:{k=c[p+16>>2]|0;l=c[k>>2]|0;if((l|0)<1)k=0;else{i=1;while(1){c[xa>>2]=c[k+(i<<2)>>2];Eb(fa,34107,xa);if((i|0)==(l|0))break;else i=i+1|0}k=c[_>>2]|0;j=c[Y>>2]|0}a[h>>0]=91;i=k+1|0;if(i>>>0<j>>>0){c[_>>2]=i;a[(c[X>>2]|0)+k>>0]=93;break i}else{wb(fa,34111,1);break i}}case -4:{Eb(fa,34113,ya);break}case -5:case -17:{a[h>>0]=0;break}case -6:{c[za>>2]=c[c[p+16>>2]>>2];Eb(fa,31408,za);break}default:{i=c[p+16>>2]|0;if(i|0){h=i;break i}a[h>>0]=0}}while(0);i=c[X>>2]|0;do if(i|0){a[i+(c[_>>2]|0)>>0]=0;if(!(c[Z>>2]|0))break;if(a[$>>0]&4)break;$d(fa)|0}while(0);if((h|0)==(c[n>>2]|0)){if(!h)h=0;else h=(Eu(h)|0)&1073741823;c[q+132>>2]=h;a[q+130>>0]=1}else{c[q+132>>2]=0;yc(o,h,-1,1,0)|0}h=(d[ba>>0]|d[ba+1>>0]<<8)&12;if(h<<16>>16==4){if((c[q+184>>2]|0)<4){if(Eg(q+160|0,4,0)|0){h=1;Da=226;break b}h=q+168|0;i=c[q+176>>2]|0}else{i=c[q+180>>2]|0;c[q+176>>2]=i;h=q+168|0;b[h>>1]=b[h>>1]&13}b[h>>1]=514;c[q+172>>2]=2;c[Aa>>2]=e[p+2>>1];Cb(3,i,32595,Aa)|0;a[q+170>>0]=1;b[q+208>>1]=1;h=(d[ba>>0]|d[ba+1>>0]<<8)&12}b[aa>>1]=12-(h&65535);c[O>>2]=(c[M>>2]|0)+40;c[Ea>>2]=0;h=100;break b}while(0);c[Ea>>2]=0;h=101;Da=226}while(0);do if((Da|0)==226){Da=0;z=da;y=c[z+4>>2]|0;if((y|0)>0|(y|0)==0&(c[z>>2]|0)>>>0>0)hc(A,f);if((h|0)==101)if(!(a[A+79>>0]|0))h=101;else{m=A+20|0;h=c[m>>2]|0;if((h|0)>0){n=A+16|0;o=A+240|0;p=A+244|0;l=0;i=0;do{k=c[n>>2]|0;j=c[k+(l<<4)+4>>2]|0;do if(((j|0)!=0?(ea=c[j+4>>2]|0,c[ea+4>>2]=c[j>>2],ea=c[(c[ea>>2]|0)+216>>2]|0,(ea|0)!=0):0)?(z=ea+12|0,ma=c[z>>2]|0,c[z>>2]=0,(ma|0)>0):0){j=c[o>>2]|0;if(!((i|0)==0&(j|0)!=0))break;i=Za[j&127](c[p>>2]|0,A,c[k+(l<<4)>>2]|0,ma)|0;h=c[m>>2]|0}while(0);l=l+1|0}while((l|0)<(h|0));c[Ea>>2]=i;if(i|0){h=1;break}}else c[Ea>>2]=0;h=101}}while(0);c[A+64>>2]=h;i=c[f>>2]|0;j=c[Ea>>2]|0;if(!((j|0)==3082|(a[i+81>>0]|0)!=0)){if((c[i+68>>2]&j|0)==7)Da=244}else{og(i);Da=244}if((Da|0)==244){Da=0;c[Ea>>2]=7}if((h|1|0)!=101)Da=246}if((Da|0)==246){Da=0;if((a[L>>0]|0)<0)h=qg(f)|0}h=c[A+68>>2]&h;if((h|0)!=17){Da=322;break}u=B+1|0;if(B>>>0>=50){h=17;Da=322;break}r=c[C>>2]|0;i=c[f>>2]|0;n=qd(i,c[N>>2]|0,-1,d[L>>0]|0,f,ia,0)|0;switch(n|0){case 7:{Da=251;break a}case 0:break;default:{Da=281;break a}}q=c[ia>>2]|0;ew(fa|0,q|0,224)|0;ew(q|0,f|0,224)|0;ew(f|0,fa|0,224)|0;p=q+8|0;o=c[p>>2]|0;c[p>>2]=c[P>>2];c[P>>2]=o;o=q+4|0;B=c[o>>2]|0;c[o>>2]=c[Q>>2];c[Q>>2]=B;B=q+188|0;l=c[B>>2]|0;c[B>>2]=c[N>>2];c[N>>2]=l;c[R>>2]=c[q+208>>2];a[L>>0]=a[q+148>>0]|0;l=q+160|0;c[S>>2]=c[l>>2];c[S+4>>2]=c[l+4>>2];c[S+8>>2]=c[l+8>>2];c[S+12>>2]=c[l+12>>2];c[S+16>>2]=c[l+16>>2];c[S+20>>2]=c[l+20>>2];c[S+24>>2]=c[l+24>>2];c[T>>2]=(c[T>>2]|0)+1;l=q+16|0;if((b[l>>1]|0)>0){m=q+100|0;k=0;do{B=c[V>>2]|0;h=B+(k*40|0)|0;n=c[m>>2]|0;i=n+(k*40|0)|0;if(!((b[B+(k*40|0)+8>>1]&9216)==0?!(c[B+(k*40|0)+24>>2]|0):0))Cg(h);j=h+40|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));b[n+(k*40|0)+8>>1]=1;c[n+(k*40|0)+24>>2]=0;k=k+1|0}while((k|0)<(b[l>>1]|0))}c[q+40>>2]=0;k=q+20|0;h=c[k>>2]|0;if((h|0)<832317811)switch(h|0){case 770837923:{Da=264;break}default:{}}else switch(h|0){case 832317811:{Da=264;break}default:{}}if((Da|0)==264){Da=0;kc(q)|0}j=c[q>>2]|0;kb(j,q);i=c[o>>2]|0;h=c[p>>2]|0;if(!i)c[j+4>>2]=h;else{c[i+8>>2]=h;h=c[p>>2]|0}if(h|0)c[h+4>>2]=i;c[k>>2]=1443283912;c[q>>2]=0;do if(j){if(c[j+480>>2]|0){Xd(j,q);break}B=q;if((c[j+304>>2]|0)>>>0<=B>>>0?(c[j+308>>2]|0)>>>0>B>>>0:0){B=j+300|0;c[q>>2]=c[B>>2];c[B>>2]=q}else Da=276}else Da=276;while(0);do if((Da|0)==276)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Da=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);h=c[f>>2]|0;Da=da;B=c[Da+4>>2]|0;if((B|0)>0|(B|0)==0&(c[Da>>2]|0)>>>0>0)hc(h,f);Da=kc(f)|0;c[ca>>2]=770837923;c[C>>2]=-1;c[Ea>>2]=0;a[D>>0]=2;c[E>>2]=0;c[G>>2]=1;a[I>>0]=-1;c[J>>2]=0;B=K;c[B>>2]=0;c[B+4>>2]=0;if((Da|0)==3082|(a[h+81>>0]|0)!=0)og(h);if((r|0)>-1){Da=d[ba>>0]|d[ba+1>>0]<<8|16;a[ba>>0]=Da;a[ba+1>>0]=Da>>8}B=u}if((Da|0)==13){c[Ea>>2]=7;Fa=7;Ra=Ga;return Fa|0}else if((Da|0)==251){h=i+81|0;if((a[h>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[h>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;h=i+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i+236>>2]|0;if(h|0)c[h+12>>2]=7}n=7}else if((Da|0)!=281)if((Da|0)==322){Ra=Ga;return h|0}h=c[Fa+260>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){l=c[h+16>>2]|0;break}if(!(i&1))l=Gg(h,1)|0;else l=0}else l=0;while(0);m=f+124|0;h=c[m>>2]|0;do if(h|0){if(c[Fa+480>>2]|0){Xd(Fa,h);break}f=h;if((c[Fa+304>>2]|0)>>>0<=f>>>0?(c[Fa+308>>2]|0)>>>0>f>>>0:0){f=Fa+300|0;c[h>>2]=c[f>>2];c[f>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{f=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);k=Fa+81|0;if(a[k>>0]|0){c[m>>2]=0;c[Ea>>2]=7;Fa=7;Ra=Ga;return Fa|0}if(l){j=(Eu(l)|0)+1|0;j:do if(!(c[Fa+272>>2]|0)){do if(!(0<0|(0==0?(e[Fa+276>>1]|0)>>>0<j>>>0:0))){i=Fa+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=Fa+284|0;c[f>>2]=(c[f>>2]|0)+1;break j}i=Fa+296|0;h=c[i>>2]|0;if(!h){h=Fa+292|0;break}else{c[i>>2]=c[h>>2];f=Fa+284|0;c[f>>2]=(c[f>>2]|0)+1;break j}}else h=Fa+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Da=308}else Da=308;while(0);if((Da|0)==308)h=_d(Fa,j,0)|0;if(h)ew(h|0,l|0,j|0)|0;else h=0}else h=0;c[m>>2]=h;if((n|0)==3082|(a[k>>0]|0)!=0){og(Fa);h=7}else h=c[Fa+68>>2]&n;c[Ea>>2]=h;Fa=h;Ra=Ga;return Fa|0}while(0);c[i>>2]=58063;c[i+4>>2]=81990;c[i+8>>2]=31517;Db(21,32001,i);Fa=21;Ra=Ga;return Fa|0}function Hc(a,d){a=a|0;d=d|0;var e=0;e=c[a+8>>2]|0;if(!(b[e+8>>1]&8192)){e=Ic(a,d)|0;return e|0}else{e=c[e+16>>2]|0;return e|0}return 0}function Ic(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=c[a+8>>2]|0;if((d|0)<1){e=h+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(h);c[h+16>>2]=0;h=0;return h|0}if((c[h+24>>2]|0)<(d|0)){Eg(h,d,0)|0;g=h+16|0;e=h+8|0;f=g;g=c[g>>2]|0}else{g=c[h+20>>2]|0;f=h+16|0;c[f>>2]=g;e=h+8|0;b[e>>1]=b[e>>1]&13}b[e>>1]=8192;c[h>>2]=c[a+4>>2];if(!g){h=g;return h|0}gw(g|0,0,d|0)|0;h=c[f>>2]|0;return h|0}function Jc(a){a=a|0;if(!a){a=0;return a|0}if(!(c[a+120>>2]|0)){a=0;return a|0}a=e[a+144>>1]|0;return a|0}function Kc(b,d){b=b|0;d=d|0;var f=0,g=0;if(!b){g=mc(29576)|0;return g|0}f=c[b+120>>2]|0;if((f|0)!=0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;f=b}else{d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576;f=b}g=mc(d)|0;f=c[f>>2]|0;b=b+40|0;d=c[b>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[b>>2]=d;return g|0}function Lc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=(d|0)==0;do if(j)h=29576;else{g=c[d+120>>2]|0;if(g|0?(e[d+144>>1]|0)>>>0>f>>>0:0){h=g+(f*40|0)|0;break}h=c[d>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)g=c[h+12>>2]|0;else i=9;do if((i|0)==9){f=f&65535;if(!(f&16)){if(f&1|0){g=0;break}g=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(f&16384))break;g=(c[h>>2]|0)+g|0;break}}while(0);if(j)return g|0;h=c[d>>2]|0;i=d+40|0;f=c[i>>2]|0;if((f|0)==3082|(a[h+81>>0]|0)!=0){og(h);f=7}else f=c[h+68>>2]&f;c[i>>2]=f;return g|0}function Mc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0.0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&8)){if(f&4|0){f=d;i=+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0);break}if(!(f&18))i=0.0;else i=+Kg(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)}else i=+g[d>>3];while(0);if(h)return +i;f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;return +i}function Nc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){i=Mg(+g[d>>3])|0;L()|0;break}if(!(f&18))i=0;else{i=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0}}else i=c[d>>2]|0;while(0);if(h)return i|0;f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;return i|0}function Oc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0,j=0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){j=Mg(+g[d>>3])|0;i=L()|0;break}if(!(f&18)){i=0;j=0}else{j=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;i=L()|0}}else{j=d;i=c[j+4>>2]|0;j=c[j>>2]|0}while(0);if(h){K(i|0);return j|0}f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;K(i|0);return j|0}function Pc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0;h=(d|0)==0;do if(h)f=29576;else{g=c[d+120>>2]|0;if(g|0?(e[d+144>>1]|0)>>>0>f>>>0:0){f=g+(f*40|0)|0;break}f=c[d>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}while(0);g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)i=c[f+16>>2]|0;else if(!(g&1))i=Gg(f,1)|0;else i=0;if(h)return i|0;g=c[d>>2]|0;h=d+40|0;f=c[h>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[h>>2]=f;return i|0}function Qc(f,g){f=f|0;g=g|0;var h=0,i=0,j=0;i=(f|0)==0;do if(i)g=29576;else{h=c[f+120>>2]|0;if(h|0?(e[f+144>>1]|0)>>>0>g>>>0:0){g=h+(g*40|0)|0;break}g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);j=d[816+(b[g+8>>1]&31)>>0]|0;if(i)return j|0;h=c[f>>2]|0;i=f+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g;return j|0}function Rc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0;i=c[d>>2]|0;if(!d){i=0;return i|0}if((e[d+144>>1]|0)>>>0<=f>>>0){i=0;return i|0}h=c[d+116>>2]|0;d=h+(f*40|0)|0;do if(d){g=b[h+(f*40|0)+8>>1]|0;if((g&514)==514?(a[h+(f*40|0)+10>>0]|0)==1:0){d=c[h+(f*40|0)+16>>2]|0;break}if(!(g&1))d=Gg(d,1)|0;else d=0}else d=0;while(0);g=i+81|0;if(!(a[g>>0]|0)){i=d;return i|0}if(c[i+180>>2]|0){i=0;return i|0}a[g>>0]=0;c[i+264>>2]=0;i=i+272|0;c[i>>2]=(c[i>>2]|0)+-1;i=0;return i|0}function Sc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=Vc(b,d)|0;if(h|0){switch(g|0){case 0:case -1:{b=h;return b|0}default:{}}ab[g&127](e);b=h;return b|0}if(!e){b=0;return b|0}e=yc((c[b+100>>2]|0)+((d+-1|0)*40|0)|0,e,f,0,g)|0;if(!e){b=0;return b|0}d=c[b>>2]|0;c[d+64>>2]=e;Ne(d,e);d=c[b>>2]|0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);b=7;return b|0}else{b=c[d+68>>2]&e;return b|0}return 0}function Tc(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;j=Vc(d,e)|0;if(j|0){switch(h|0){case 0:case -1:{d=j;return d|0}default:{}}ab[h&127](f);d=j;return d|0}if(!f){d=0;return d|0}m=c[d+100>>2]|0;k=e+-1|0;l=m+(k*40|0)|0;e=yc(l,f,g,i,h)|0;do if(!(i<<24>>24==0|(e|0)!=0)){j=a[(c[d>>2]|0)+78>>0]|0;if(!(b[m+(k*40|0)+8>>1]&2)){d=0;return d|0}if((a[m+(k*40|0)+10>>0]|0)==j<<24>>24){d=0;return d|0}else{e=Ig(l,j)|0;break}}while(0);if(!e){d=0;return d|0}j=c[d>>2]|0;c[j+64>>2]=e;Ne(j,e);j=c[d>>2]|0;if((e|0)==3082|(a[j+81>>0]|0)!=0){og(j);d=7;return d|0}else{d=c[j+68>>2]&e;return d|0}return 0}function Uc(a,d,e){a=a|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;f=j+8|0;h=j;i=Vc(a,d)|0;if(i|0){Ra=j;return i|0}k=c[a+100>>2]|0;d=d+-1|0;a=k+(d*40|0)|0;d=k+(d*40|0)+8|0;if(!(b[d>>1]&9216))b[d>>1]=1;else Dg(a);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=j;return i|0}g[a>>3]=e;b[d>>1]=8;Ra=j;return i|0}function Vc(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+64|0;i=l+40|0;k=l+32|0;j=l+16|0;h=l+8|0;do if(!e)Db(21,32555,l);else{g=c[e>>2]|0;if(!g){Db(21,32391,h);break}if((c[e+20>>2]|0)==770837923?(c[e+36>>2]|0)<=-1:0){if((f|0)>=1?(b[e+16>>1]|0)>=(f|0):0){j=f+-1|0;k=c[e+100>>2]|0;h=k+(j*40|0)|0;i=k+(j*40|0)+8|0;if(!((b[i>>1]&9216)==0?(c[k+(j*40|0)+24>>2]|0)==0:0)){Cg(h);g=c[e>>2]|0}b[i>>1]=1;c[g+64>>2]=0;g=c[e+208>>2]|0;if(!g){f=0;Ra=l;return f|0}if(!(g&((f|0)>31?-2147483648:1<<j))){f=0;Ra=l;return f|0}f=e+149|0;e=(d[f>>0]|d[f+1>>0]<<8)&-4|1;a[f>>0]=e;a[f+1>>0]=e>>8;f=0;Ra=l;return f|0}c[g+64>>2]=25;Ne(g,25);f=25;Ra=l;return f|0}c[g+64>>2]=21;Ne(g,21);c[k>>2]=c[e+188>>2];Db(21,36834,k);c[i>>2]=58063;c[i+4>>2]=82575;c[i+8>>2]=31517;Db(21,32001,i);f=21;Ra=l;return f|0}while(0);c[j>>2]=58063;c[j+4>>2]=82567;c[j+8>>2]=31517;Db(21,32001,j);f=21;Ra=l;return f|0}function Wc(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=((e|0)<0)<<31>>31;g=Vc(a,d)|0;if(g|0)return g|0;h=c[a+100>>2]|0;d=d+-1|0;a=h+(d*40|0)|0;d=h+(d*40|0)+8|0;if(!(b[d>>1]&9216)){h=a;c[h>>2]=e;c[h+4>>2]=f;b[d>>1]=4;return g|0}else{Pg(a,e,f);return g|0}return 0}function Xc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Tc(a,b,c,d,e,1)|0}function Yc(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;i=t+8|0;j=t;h=b[f+8>>1]|0;switch(a[816+(h&31)>>0]|0){case 1:{j=f;i=c[j>>2]|0;j=c[j+4>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}d=c[d+100>>2]|0;f=e+-1|0;h=d+(f*40|0)|0;f=d+(f*40|0)+8|0;if(!(b[f>>1]&9216)){d=h;c[d>>2]=i;c[d+4>>2]=j;b[f>>1]=4;d=0;Ra=t;return d|0}else{Pg(h,i,j);d=0;Ra=t;return d|0}}case 2:{k=+g[f>>3];h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}d=c[d+100>>2]|0;f=e+-1|0;h=d+(f*40|0)|0;f=d+(f*40|0)+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(h);g[i>>3]=k;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){d=0;Ra=t;return d|0}g[h>>3]=k;b[f>>1]=8;d=0;Ra=t;return d|0}case 4:{if(h&16384){l=c[f>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}j=c[d+100>>2]|0;h=e+-1|0;f=j+(h*40|0)|0;i=j+(h*40|0)+8|0;if(!((b[i>>1]&9216)==0?!(c[j+(h*40|0)+24>>2]|0):0))Cg(f);b[i>>1]=16400;c[j+(h*40|0)+12>>2]=0;c[f>>2]=(l|0)>0?l:0;a[j+(h*40|0)+10>>0]=1;c[j+(h*40|0)+16>>2]=0;d=0;Ra=t;return d|0}r=c[f+16>>2]|0;f=c[f+12>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}if(!r){d=0;Ra=t;return d|0}q=c[d+100>>2]|0;p=e+-1|0;n=q+(p*40|0)|0;l=c[q+(p*40|0)+32>>2]|0;e=(l|0)==0;if(e)i=1e9;else i=c[l+108>>2]|0;a:do if((f|0)<0)if((i|0)<0){o=528;j=0}else{h=0;while(1){if(!((a[r+(h|1)>>0]|a[r+h>>0])<<24>>24)){o=528;j=h;break a}h=h+2|0;if((h|0)>(i|0)){o=528;j=h;break}}}else{o=16;j=f}while(0);m=j+((o&65535)>>>8&65535)|0;do if((j|0)>(i|0))if(!e?(s=c[l+236>>2]|0,(s|0)!=0):0){c[s+12>>2]=18;f=s+36|0;c[f>>2]=(c[f>>2]|0)+1;f=18}else f=18;else{h=m>>>0>32?m:32;if((c[q+(p*40|0)+24>>2]|0)<(h|0)){if(Eg(n,h,0)|0){f=7;break}h=q+(p*40|0)+8|0;f=c[q+(p*40|0)+16>>2]|0}else{f=c[q+(p*40|0)+20>>2]|0;c[q+(p*40|0)+16>>2]=f;h=q+(p*40|0)+8|0;b[h>>1]=b[h>>1]&13}ew(f|0,r|0,m|0)|0;c[q+(p*40|0)+12>>2]=j;b[h>>1]=o;a[q+(p*40|0)+10>>0]=1;d=0;Ra=t;return d|0}while(0);h=c[d>>2]|0;c[h+64>>2]=f;Ne(h,f);h=c[d>>2]|0;if(!(a[h+81>>0]|0)){d=c[h+68>>2]&f;Ra=t;return d|0}else{og(h);d=7;Ra=t;return d|0}}case 3:{d=Tc(d,e,c[f+16>>2]|0,c[f+12>>2]|0,-1,a[f+10>>0]|0)|0;Ra=t;return d|0}default:{d=Vc(d,e)|0;Ra=t;return d|0}}return 0}\nfunction ho(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+400|0;F=J+16|0;p=J;r=J+360|0;G=J+80|0;H=J+60|0;z=J+32|0;I=c[(c[f>>2]|0)+32>>2]|0;h=c[i>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){u=c[h+16>>2]|0;break}if(!(j&1))u=Gg(h,1)|0;else u=0}else u=0;while(0);h=c[i+12>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){B=c[h+16>>2]|0;break}if(!(j&1))B=Gg(h,1)|0;else B=0}else B=0;while(0);h=c[i+16>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){x=c[h+16>>2]|0;break}if(!(j&1))x=Gg(h,1)|0;else x=0}else x=0;while(0);h=c[i+20>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){A=c[h+16>>2]|0;break}if(!(j&1))A=Gg(h,1)|0;else A=0}else A=0;while(0);h=c[i+24>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){m=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))m=0;else{m=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else m=c[h>>2]|0;while(0);if(!((B|0)!=0&(x|0)!=0&(A|0)!=0)){Ra=J;return}C=I+312|0;D=c[C>>2]|0;c[C>>2]=0;n=I+20|0;l=c[n>>2]|0;if((l|0)>0){j=c[I+16>>2]|0;h=0;do{k=c[j+(h<<4)+4>>2]|0;if(k|0)c[(c[k+4>>2]|0)+4>>2]=c[k>>2];h=h+1|0}while((h|0)!=(l|0))};c[H>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;c[H+12>>2]=0;c[H+16>>2]=0;o=Sd(I,x,u)|0;w=H+12|0;c[w>>2]=o;o=z+12|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[z>>2]=G;c[z+4>>2]=152;c[z+8>>2]=153;c[z+24>>2]=H;c[r>>2]=0;o=(m|0)==0;if(o){a:do if(u){y=c[n>>2]|0;j=y+-1|0;if((y|0)>0){h=j;m=(c[I+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){y=a[k>>0]|0;j=(d[208+(y&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!(y<<24>>24==0|(j|0)!=0)){l=u;do{k=k+1|0;l=l+1|0;y=a[k>>0]|0;j=(d[208+(y&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!h)break;j=h+-1|0;if((h|0)>0){h=j;m=m+-16|0}else{h=j;break a}}h=109-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!h){j=u;k=50919;do{k=k+1|0;j=j+1|0;y=a[k>>0]|0;h=(d[208+(y&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=j}else h=-1;while(0);h=h&255}else h=1;j=I+164|0;a[j>>0]=h;y=G+4|0;gw(y|0,0,272)|0;a[G+200>>0]=3;c[G>>2]=I;c[G+132>>2]=1;h=ud(G,B,r)|0;c[y>>2]=c[r>>2];h=(a[I+81>>0]|0)==0?h:7;b:do if(!h){q=c[G+228>>2]|0;h=(q|0)==0;if((h?(c[G+232>>2]|0)==0:0)?(c[G+236>>2]|0)==0:0){c[p>>2]=32306;c[p+4>>2]=103316;c[p+8>>2]=31517;Db(11,32001,p);h=11;E=58;break}a[j>>0]=0;k=c[I+32>>2]|0;n=k&67108864;c:do if(h){m=G+232|0;h=c[m>>2]|0;if(h|0){l=c[h>>2]|0;h=G+272|0;j=c[h>>2]|0;d:do if(j|0){while(1){k=j+12|0;if((c[j>>2]|0)==(l|0))break;j=c[k>>2]|0;if(!j)break d;else h=k}c[h>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;x=H+4|0;c[x>>2]=(c[x>>2]|0)+1}while(0);if(n|0)break;h=c[(c[m>>2]|0)+36>>2]|0;if(!h)break;_j(z,h)|0;break}m=c[G+236>>2]|0;l=c[m+4>>2]|0;e:do if(l|0){s=a[l>>0]|0;h=(d[208+(s&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(h|0)!=0)){j=x;k=l;do{k=k+1|0;j=j+1|0;s=a[k>>0]|0;h=(d[208+(s&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(h|0)!=0))}if(((h|0)==0?(c[(c[w>>2]|0)+72>>2]|0)==(c[m+24>>2]|0):0)?(t=G+272|0,v=c[t>>2]|0,v|0):0){k=t;h=v;while(1){j=h+12|0;if((c[h>>2]|0)==(l|0))break;h=c[j>>2]|0;if(!h)break e;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[H>>2];c[H>>2]=h;w=H+4|0;c[w>>2]=(c[w>>2]|0)+1}}while(0);if(!n){h=lo(G,o?u:0)|0;if(h|0){E=131;break b}oo(z,m);h=c[m+28>>2]|0;if(h|0){n=G+272|0;o=H+4|0;do{m=c[h+12>>2]|0;f:do if(m|0){z=a[m>>0]|0;j=(d[208+(z&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(z<<24>>24==0|(j|0)!=0)){k=x;l=m;do{l=l+1|0;k=k+1|0;z=a[l>>0]|0;j=(d[208+(z&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(z<<24>>24==0|(j|0)!=0))}if(j|0)break;j=c[n>>2]|0;if(!j)break;l=n;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break f;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;c[o>>2]=(c[o>>2]|0)+1}while(0);h=c[h+36>>2]|0}while((h|0)!=0)}}}else{j=q+12|0;p=(n|0)==0;if(c[j>>2]|0){if(!p)break;x=r+4|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;c[x+24>>2]=0;c[r>>2]=G;Kk(G,c[j>>2]|0,r);x=(c[G+36>>2]|0)==0;h=c[G+12>>2]|0;$j(z,c[j>>2]|0)|0;if(x|(h|0)==0)break;else{E=131;break b}}if(!((k&16384|0)==0&0==0&(p^1))?(s=c[q+16>>2]|0,s|0):0){n=G+272|0;o=H+4|0;l=s;do{m=c[l+8>>2]|0;g:do if(m|0){v=a[m>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(h|0)!=0)){j=x;k=m;do{k=k+1|0;j=j+1|0;v=a[k>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(h|0)!=0))}if(h|0)break;h=c[n>>2]|0;if(!h)break;k=n;while(1){j=h+12|0;if((c[h>>2]|0)==(m|0))break;h=c[j>>2]|0;if(!h)break g;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[H>>2];c[H>>2]=h;c[o>>2]=(c[o>>2]|0)+1}while(0);l=c[l+4>>2]|0}while((l|0)!=0)}l=c[q>>2]|0;if(l|0){v=a[x>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(h|0)!=0)){k=l;j=x;do{j=j+1|0;k=k+1|0;x=a[j>>0]|0;h=(d[208+(x&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(h|0)!=0))}if(!h){c[w>>2]=q;do if(p){j=c[q+24>>2]|0;if(!j)break;h=c[j>>2]|0;if((h|0)<=0)break;k=h;h=j+4|0;while(1){j=c[h>>2]|0;if(j|0?_j(z,j)|0:0)break;if((k|0)>1){k=k+-1|0;h=h+20|0}else break}l=c[q>>2]|0}while(0);h=G+272|0;j=c[h>>2]|0;if(j|0){while(1){k=j+12|0;if((c[j>>2]|0)==(l|0))break;j=c[k>>2]|0;if(!j)break c;else h=k}c[h>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;z=H+4|0;c[z>>2]=(c[z>>2]|0)+1}}}}while(0);h=po(f,H,B,A,1)|0;if(h|0)E=131}else E=58;while(0);if((E|0)==58){a[j>>0]=0;E=131}do if((E|0)==131){if(!(c[y>>2]|0)){c[f+20>>2]=h;j=c[f>>2]|0;if(!(b[j+8>>1]&1))break;switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(j,h,-1,1,0)|0;break}j=c[i+4>>2]|0;k=c[i+8>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);do if(k){h=b[k+8>>1]|0;if((h&514)==514?(a[k+10>>0]|0)==1:0){h=c[k+16>>2]|0;break}if(!(h&1))h=Gg(k,1)|0;else h=0}else h=0;while(0);i=c[y>>2]|0;c[F>>2]=j;c[F+4>>2]=h;c[F+8>>2]=59952;c[F+12>>2]=i;h=Bb(49618,F)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{f=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(G);ro(I,c[H>>2]|0);c[C>>2]=D;Ra=J;return}function io(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=Ra;Ra=Ra+352|0;u=A+16|0;r=A;s=A+312|0;z=A+32|0;v=c[(c[f>>2]|0)+32>>2]|0;j=c[i>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);h=c[i+4>>2]|0;do if(h){k=b[h+8>>1]|0;if((k&514)==514?(a[h+10>>0]|0)==1:0){o=c[h+16>>2]|0;break}if(!(k&1))o=Gg(h,1)|0;else o=0}else o=0;while(0);h=c[i+16>>2]|0;k=e[h+8>>1]|0;do if(!(k&4)){if(k&8|0){h=Mg(+g[h>>3])|0;L()|0;break}if(!(k&18))h=0;else{h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else h=c[h>>2]|0;while(0);p=c[v+32>>2]|0;w=v+312|0;x=c[w>>2]|0;c[w>>2]=0;if(!((j|0)!=0&(o|0)!=0)){c[w>>2]=x;Ra=A;return}c[s>>2]=0;q=(h|0)==0;if(q){n=c[v+20>>2]|0;k=n+-1|0;a:do if((n|0)>0){h=k;n=(c[v+16>>2]|0)+(k<<4)|0;while(1){l=c[n>>2]|0;if(l|0){m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(k|0)!=0)){m=j;do{l=l+1|0;m=m+1|0;B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0))}if(!k)break a}if(!h)break;k=h+-1|0;if((h|0)>0){h=k;n=n+-16|0}else{h=k;break a}}h=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!h){k=j;l=50919;do{l=l+1|0;k=k+1|0;B=a[l>>0]|0;h=(d[208+(B&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=k;while(0);h=h&255}else h=1;l=v+164|0;a[l>>0]=h;m=z+4|0;gw(m|0,0,272)|0;a[z+200>>0]=3;c[z>>2]=v;c[z+132>>2]=1;B=ud(z,o,s)|0;c[m>>2]=c[s>>2];do if((B|0)==0&(a[v+81>>0]|0)==0){h=c[z+228>>2]|0;k=(h|0)==0;if((k?(c[z+232>>2]|0)==0:0)?(c[z+236>>2]|0)==0:0){c[r>>2]=32306;c[r+4>>2]=103316;c[r+8>>2]=31517;Db(11,32001,r);y=40;break}a[l>>0]=0;l=(p&67108864|0)==0&0==0;if(!(k|l^1)?(t=h+12|0,c[t>>2]|0):0){B=s+4|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[B+24>>2]=0;c[s>>2]=z;Kk(z,c[t>>2]|0,s);if((c[z+36>>2]|0)==0|(c[z+12>>2]|0)==0)break;else{y=68;break}}k=z+236|0;h=c[k>>2]|0;if(h|0){if(l){if(lo(z,q?j:0)|0){y=68;break}h=c[k>>2]|0}k=c[h+24>>2]|0;if(!k)o=-1e6;else{l=c[v+16>>2]|0;h=0;while(1)if((c[l+(h<<4)+12>>2]|0)==(k|0)){o=h;break}else h=h+1|0}B=c[v+20>>2]|0;k=B+-1|0;b:do if((B|0)>0){h=k;n=(c[v+16>>2]|0)+(k<<4)|0;while(1){l=c[n>>2]|0;if(l|0){B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(B<<24>>24==0|(k|0)!=0)){m=j;do{l=l+1|0;m=m+1|0;B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0))}if(!k)break b}if(!h)break;k=h+-1|0;if((h|0)>0){h=k;n=n+-16|0}else{h=k;break b}}h=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!h){k=50919;do{k=k+1|0;j=j+1|0;B=a[k>>0]|0;h=(d[208+(B&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=k;while(0);if((o|0)==(h|0)){h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216)){B=h;c[B>>2]=1;c[B+4>>2]=0;b[j>>1]=4;break}else{Pg(h,1,0);break}}}}else y=40;while(0);if((y|0)==40){a[l>>0]=0;y=68}do if((y|0)==68){j=c[i+8>>2]|0;k=c[i+12>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);do if(k){h=b[k+8>>1]|0;if((h&514)==514?(a[k+10>>0]|0)==1:0){h=c[k+16>>2]|0;break}if(!(h&1))h=Gg(k,1)|0;else h=0}else h=0;while(0);B=c[m>>2]|0;c[u>>2]=j;c[u+4>>2]=h;c[u+8>>2]=49639;c[u+12>>2]=B;h=Bb(49618,u)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{B=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(z);c[w>>2]=x;Ra=A;return}function jo(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=c[d+24>>2]|0;switch(a[e>>0]|0){case 77:{if((c[i+8>>2]|0)!=(b[e+32>>1]|0))return 0;d=c[d>>2]|0;if((c[d+120>>2]|0)!=(c[i+12>>2]|0))return 0;d=d+272|0;f=c[d>>2]|0;if(!f)return 0;while(1){h=f+12|0;if((c[f>>2]|0)==(e|0))break;g=c[h>>2]|0;if(!g){j=16;break}else{d=h;f=g}}if((j|0)==16)return 0;c[d>>2]=c[h>>2];c[h>>2]=c[i>>2];c[i>>2]=f;j=i+4|0;c[j>>2]=(c[j>>2]|0)+1;return 0}case -94:{if((c[i+8>>2]|0)!=(b[e+32>>1]|0))return 0;if((c[i+12>>2]|0)!=(c[e+44>>2]|0))return 0;d=(c[d>>2]|0)+272|0;f=c[d>>2]|0;if(!f)return 0;while(1){h=f+12|0;if((c[f>>2]|0)==(e|0))break;g=c[h>>2]|0;if(!g){j=16;break}else{d=h;f=g}}if((j|0)==16)return 0;c[d>>2]=c[h>>2];c[h>>2]=c[i>>2];c[i>>2]=f;j=i+4|0;c[j>>2]=(c[j>>2]|0)+1;return 0}default:return 0}return 0}function ko(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=Ra;Ra=Ra+32|0;g=h;e=b+64|0;b=c[e>>2]|0;if(!b){Ra=h;return 0}if((c[b>>2]|0)<=0){Ra=h;return 0}f=g+4|0;d=0;do{i=c[b+8+(d<<4)+8>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;j=c[a>>2]|0;c[g>>2]=j;Kk(j,i,g);$j(a,i)|0;d=d+1|0;b=c[e>>2]|0}while((d|0)<(c[b>>2]|0));Ra=h;return 0}function lo(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;ea=Ra;Ra=Ra+208|0;aa=ea+128|0;$=ea+120|0;_=ea+112|0;ca=ea+104|0;ba=ea+96|0;Z=ea+88|0;n=ea+80|0;W=ea+168|0;X=ea+136|0;Y=ea;k=c[d>>2]|0;o=c[d+236>>2]|0;i=X+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[X>>2]=d;i=c[o+4>>2]|0;j=c[k+16>>2]|0;h=c[o+24>>2]|0;m=d;if(!h)g=-1e6;else{g=0;while(1)if((c[j+(g<<4)+12>>2]|0)==(h|0))break;else g=g+1|0}g=Sd(k,i,c[j+(g<<4)>>2]|0)|0;c[d+120>>2]=g;a[d+144>>0]=a[o+8>>0]|0;if(g|0?(l=Sk(d,g)|0,l|0):0){da=l;Ra=ea;return da|0}i=c[o+12>>2]|0;if(!i)g=0;else{j=X+24|0;b[j>>1]=0;c[W>>2]=m;c[W+4>>2]=125;c[W+8>>2]=126;c[W+12>>2]=0;c[W+24>>2]=X;h=i+24|0;g=d+208|0;U=(c[g>>2]|0)+(c[h>>2]|0)|0;c[g>>2]=U;g=c[(c[d>>2]|0)+120>>2]|0;if((g|0)>=(U|0)){_j(W,i)|0;g=c[W>>2]|0;U=g+208|0;c[U>>2]=(c[U>>2]|0)-(c[h>>2]|0);U=i+4|0;c[U>>2]=c[U>>2]|b[j>>1]&-32752&65535;if((c[X+20>>2]|0)>0)g=1;else g=(c[g+36>>2]|0)>0&1}else{c[n>>2]=g;cd(d,41637,n);g=1}}h=c[o+28>>2]|0;if(!((g|0)==0&(h|0)!=0)){da=g;Ra=ea;return da|0}q=d+36|0;r=d+12|0;s=Y+16|0;t=Y+24|0;u=X+4|0;v=X+24|0;w=W+4|0;x=W+8|0;y=W+12|0;z=W+24|0;A=X+8|0;B=X+20|0;C=W+4|0;D=W+8|0;E=W+12|0;F=W+24|0;G=W+4|0;H=W+8|0;I=W+12|0;J=W+24|0;K=W+4|0;L=W+8|0;M=W+12|0;N=W+24|0;O=W+4|0;P=W+8|0;Q=W+12|0;R=W+24|0;S=W+4|0;T=W+8|0;U=W+12|0;p=W+24|0;while(1){g=c[h+8>>2]|0;if((g|0?(Kk(d,g,X),c[q>>2]|0):0)?(V=c[r>>2]|0,V|0):0){g=V;da=76;break}k=h+12|0;g=c[k>>2]|0;if(!g)g=0;else{j=bd(d,0,g,f)|0;if(!j){g=1;da=76;break}g=Sk(d,j)|0;if(g|0){da=76;break}g=Y;i=g+80|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(i|0));c[Y>>2]=1;c[s>>2]=c[k>>2];c[t>>2]=j;c[u>>2]=Y;j=c[h+16>>2]|0;do if(!j)da=26;else{k=e[v>>1]|0;b[v>>1]=k&28655;g=c[X>>2]|0;c[W>>2]=g;c[w>>2]=125;c[x>>2]=126;c[y>>2]=0;c[z>>2]=X;l=j+24|0;i=g+208|0;o=(c[i>>2]|0)+(c[l>>2]|0)|0;c[i>>2]=o;i=c[(c[g>>2]|0)+120>>2]|0;if((i|0)>=(o|0)){_j(W,j)|0;g=c[W>>2]|0;o=g+208|0;c[o>>2]=(c[o>>2]|0)-(c[l>>2]|0);o=b[v>>1]|0;n=j+4|0;c[n>>2]=c[n>>2]|o&-32752&65535;b[v>>1]=k&36880|o&65535;if((c[B>>2]|0)<=0)if((c[g+36>>2]|0)<1){da=26;break}else{g=1;break}}else{c[Z>>2]=i;cd(g,41637,Z)}g=1}while(0);a:do if((da|0)==26){da=0;k=c[h+20>>2]|0;if((k|0)!=0?(c[k>>2]|0)>0:0){j=0;while(1){l=c[k+4+(j*20|0)>>2]|0;if(l){m=e[v>>1]|0;b[v>>1]=m&28655;g=c[X>>2]|0;c[W>>2]=g;c[C>>2]=125;c[D>>2]=126;c[E>>2]=0;c[F>>2]=X;n=l+24|0;i=g;fa=i+208|0;o=(c[fa>>2]|0)+(c[n>>2]|0)|0;c[fa>>2]=o;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(o|0)){da=33;break}_j(W,l)|0;g=c[W>>2]|0;fa=g+208|0;c[fa>>2]=(c[fa>>2]|0)-(c[n>>2]|0);fa=b[v>>1]|0;o=l+4|0;c[o>>2]=c[o>>2]|fa&-32752&65535;b[v>>1]=m&36880|fa&65535;if((c[B>>2]|0)>0)break;if((c[g+36>>2]|0)>=1){g=2;break a}}j=j+1|0;if((j|0)>=(c[k>>2]|0)){g=0;break a}}if((da|0)==33){da=0;c[ba>>2]=i;cd(g,41637,ba)}g=2}else g=0}while(0);o=c[h+28>>2]|0;if(o){c[o+20>>2]=Y;c[A>>2]=o;b[v>>1]=512;n=c[o>>2]|0;b:do if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;g=512;while(1){l=c[n+4+(m*20|0)>>2]|0;if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=X;k=l+24|0;i=g;ga=i+208|0;fa=(c[ga>>2]|0)+(c[k>>2]|0)|0;c[ga>>2]=fa;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(fa|0)){da=45;break}_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)>=1){g=2;break b}}m=m+1|0;if((m|0)>=(c[n>>2]|0)){da=49;break b}}if((da|0)==45){da=0;c[ca>>2]=i;cd(g,41637,ca)}g=2}else{g=512;da=49}while(0);c:do if((da|0)==49){da=0;n=c[o+8>>2]|0;d:do if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;while(1){l=c[n+4+(m*20|0)>>2]|0;if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[O>>2]=125;c[P>>2]=126;c[Q>>2]=0;c[R>>2]=X;k=l+24|0;i=g;fa=i+208|0;ga=(c[fa>>2]|0)+(c[k>>2]|0)|0;c[fa>>2]=ga;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(ga|0)){da=56;break}_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)>=1){g=2;break c}}m=m+1|0;if((m|0)>=(c[n>>2]|0))break d}if((da|0)==56){da=0;c[_>>2]=i;cd(g,41637,_)}g=2;break c}while(0);l=c[o+12>>2]|0;e:do if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[K>>2]=125;c[L>>2]=126;c[M>>2]=0;c[N>>2]=X;k=l+24|0;i=g+208|0;ga=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=ga;i=c[(c[g>>2]|0)+120>>2]|0;do if((i|0)>=(ga|0)){_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)<1)break e;else{g=1;break c}}else{c[$>>2]=i;cd(g,41637,$)}while(0);g=1;break c}while(0);l=c[o+4>>2]|0;do if(!l)g=0;else{j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[S>>2]=125;c[T>>2]=126;c[U>>2]=0;c[p>>2]=X;k=l+24|0;i=g+208|0;ga=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=ga;i=c[(c[g>>2]|0)+120>>2]|0;if((i|0)<(ga|0)){c[aa>>2]=i;cd(g,41637,aa);g=1;break}_j(W,l)|0;g=c[W>>2]|0;ga=g+208|0;c[ga>>2]=(c[ga>>2]|0)-(c[k>>2]|0);ga=b[v>>1]|0;fa=l+4|0;c[fa>>2]=c[fa>>2]|ga&-32752&65535;b[v>>1]=j&36880|ga&65535;if((c[B>>2]|0)>0){g=1;break}g=(c[g+36>>2]|0)>0&1}while(0)}while(0);b[v>>1]=0}c[u>>2]=0}h=c[h+36>>2]|0;if(!((g|0)==0&(h|0)!=0)){da=76;break}}if((da|0)==76){Ra=ea;return g|0}return 0}function mo(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!f)return;p=c[f>>2]|0;if((p|0)<=0)return;m=((g|0)!=0)<<31>>31;n=b+272|0;o=e+4|0;if(!g){h=0;do{a:do if((c[f+4+(h*20|0)+4>>2]|0)==0?(k=c[n>>2]|0,k|0):0){i=n;b=k;while(1){j=b+12|0;if(!(c[b>>2]|0))break;b=c[j>>2]|0;if(!b)break a;else i=j}c[i>>2]=c[j>>2];c[j>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);h=h+1|0}while((h|0)<(p|0));return}j=0;do{k=c[f+4+(j*20|0)+4>>2]|0;if(k){i=a[k>>0]|0;b=(d[208+(i&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(b|0)!=0)){h=g;i=k;do{i=i+1|0;h=h+1|0;q=a[i>>0]|0;b=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(b|0)!=0))}}else b=m;b:do if((b|0)==0?(l=c[n>>2]|0,l|0):0){h=n;b=l;while(1){i=b+12|0;if((c[b>>2]|0)==(k|0))break;b=c[i>>2]|0;if(!b)break b;else h=i}c[h>>2]=c[i>>2];c[i>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);j=j+1|0}while((j|0)<(p|0));return}function no(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!f)return;p=c[f+4>>2]|0;if((p|0)<=0)return;m=((g|0)!=0)<<31>>31;n=b+272|0;o=e+4|0;if(!g){h=0;do{a:do if((c[(c[f>>2]|0)+(h<<3)>>2]|0)==0?(k=c[n>>2]|0,k|0):0){i=n;b=k;while(1){j=b+12|0;if(!(c[b>>2]|0))break;b=c[j>>2]|0;if(!b)break a;else i=j}c[i>>2]=c[j>>2];c[j>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);h=h+1|0}while((h|0)<(p|0));return}j=0;do{k=c[(c[f>>2]|0)+(j<<3)>>2]|0;if(k){i=a[k>>0]|0;b=(d[208+(i&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(b|0)!=0)){h=g;i=k;do{i=i+1|0;h=h+1|0;q=a[i>>0]|0;b=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(b|0)!=0))}}else b=m;b:do if((b|0)==0?(l=c[n>>2]|0,l|0):0){h=n;b=l;while(1){i=b+12|0;if((c[b>>2]|0)==(k|0))break;b=c[i>>2]|0;if(!b)break b;else h=i}c[h>>2]=c[i>>2];c[i>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);j=j+1|0}while((j|0)<(p|0));return}function oo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[b+12>>2]|0;if(d|0)_j(a,d)|0;b=c[b+28>>2]|0;if(!b)return;do{$j(a,c[b+8>>2]|0)|0;d=c[b+16>>2]|0;if(d|0)_j(a,d)|0;d=c[b+20>>2]|0;a:do if(d|0?(h=c[d>>2]|0,(h|0)>0):0){f=h;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break a;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);g=c[b+28>>2]|0;if(g|0){d=c[g>>2]|0;b:do if(d|0?(i=c[d>>2]|0,(i|0)>0):0){f=i;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break b;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);d=c[g+8>>2]|0;c:do if(d|0?(j=c[d>>2]|0,(j|0)>0):0){f=j;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break c;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);d=c[g+12>>2]|0;if(d|0)_j(a,d)|0;d=c[g+4>>2]|0;if(d|0)_j(a,d)|0}b=c[b+36>>2]|0}while((b|0)!=0);return}function po(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;j=z;if(!h)k=0;else k=(Eu(h)|0)&1073741823;if(!g)n=0;else n=(Eu(g)|0)&1073741823;x=c[(c[b>>2]|0)+32>>2]|0;c[j>>2]=h;y=dd(x,49613,j)|0;if(!y){y=7;Ra=z;return y|0}w=(Eu(y)|0)&1073741823;u=(i|0)==0;v=u?k:w;u=u?h:y;h=n+1+(G(c[f+4>>2]|0,w)|0)|0;i=((h|0)<0)<<31>>31;t=(x|0)==0;a:do if(t){s=Sv(h|0,i|0,-1,-1)|0;r=L()|0;if(!(r>>>0>0|(r|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](h)|0;l=30;break}j=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;k=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&k>>>0>0){s=c[14978]|0;r=Tv(k|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;l=31}else l=31}else j=7}else j=7}else{if(c[x+272>>2]|0){if(a[x+81>>0]|0){j=7;break}}else{do if(!(0<i>>>0|(0==(i|0)?(e[x+276>>1]|0)>>>0<h>>>0:0))){k=x+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=30;break a}k=x+296|0;j=c[k>>2]|0;if(!j){j=x+292|0;break}else{c[k>>2]=c[j>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=30;break a}}else j=x+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(x,h,i)|0;l=30}while(0);if((l|0)==30)if(!j)j=7;else l=31;do if((l|0)==31){gw(j+n|0,0,(h>>>0>n>>>0?h-n|0:0)|0)|0;ew(j|0,g|0,n|0)|0;l=c[f>>2]|0;b:do if(l|0){s=g;o=x+480|0;p=x+304|0;q=x+308|0;r=x+300|0;if(t)while(1){k=c[l+12>>2]|0;if(!k)m=l;else{h=k;i=l;do{i=(c[h+4>>2]|0)>>>0>(c[i+4>>2]|0)>>>0?h:i;h=c[h+12>>2]|0}while((h|0)!=0);m=i}if((l|0)==(m|0))k=f;else{if((k|0)==(m|0))k=l;else while(1){i=c[k+12>>2]|0;if((i|0)==(m|0))break;else k=i}k=k+12|0}c[k>>2]=c[m+12>>2];g=c[m+4>>2]|0;l=(a[880+(d[g>>0]|0)>>0]&70)==0;h=l?w:v;g=g-s|0;k=m+8|0;i=c[k>>2]|0;if((i|0)==(h|0))k=n;else{r=g+i|0;fw(j+(h+g)|0,j+r|0,n-r|0)|0;k=h-(c[k>>2]|0)+n|0;a[j+k>>0]=0}ew(j+g|0,(l?y:u)|0,h|0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{r=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}l=c[f>>2]|0;if(!l)break b;else n=k}while(1){k=c[l+12>>2]|0;if(!k)m=l;else{h=k;i=l;do{i=(c[h+4>>2]|0)>>>0>(c[i+4>>2]|0)>>>0?h:i;h=c[h+12>>2]|0}while((h|0)!=0);m=i}if((l|0)==(m|0))k=f;else{if((k|0)==(m|0))k=l;else while(1){i=c[k+12>>2]|0;if((i|0)==(m|0))break;else k=i}k=k+12|0}c[k>>2]=c[m+12>>2];g=c[m+4>>2]|0;l=(a[880+(d[g>>0]|0)>>0]&70)==0;h=l?w:v;g=g-s|0;k=m+8|0;i=c[k>>2]|0;if((i|0)==(h|0))k=n;else{i=g+i|0;fw(j+(h+g)|0,j+i|0,n-i|0)|0;k=h-(c[k>>2]|0)+n|0;a[j+k>>0]=0}ew(j+g|0,(l?y:u)|0,h|0)|0;do if(!(c[o>>2]|0)){n=m;if((c[p>>2]|0)>>>0<=n>>>0?(c[q>>2]|0)>>>0>n>>>0:0){c[m>>2]=c[r>>2];c[r>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(x,m);while(0);l=c[f>>2]|0;if(!l)break;else n=k}}while(0);if((yc(c[b>>2]|0,j,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}if(!t){if(c[x+480>>2]|0){Xd(x,j);j=0;break}f=j;if((c[x+304>>2]|0)>>>0<=f>>>0?(c[x+308>>2]|0)>>>0>f>>>0:0){x=x+300|0;c[j>>2]=c[x>>2];c[x>>2]=j;j=0;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=0;break}else{x=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=0;break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);y=j;Ra=z;return y|0}else{x=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);y=j;Ra=z;return y|0}return 0}function qo(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=c[b>>2]|0;i=c[b+8>>2]|0;do if(i|0){j=i+20|0;e=c[j>>2]|0;if((e|0)<832317811)switch(e|0){case 770837923:{m=3;break}default:{}}else switch(e|0){case 832317811:{m=3;break}default:{}}if((m|0)==3)kc(i)|0;g=c[i>>2]|0;kb(g,i);h=c[i+4>>2]|0;f=i+8|0;e=c[f>>2]|0;if(!h)c[g+4>>2]=e;else{c[h+8>>2]=e;e=c[f>>2]|0}if(e|0)c[e+4>>2]=h;c[j>>2]=1443283912;c[i>>2]=0;if(g|0){if(c[g+480>>2]|0){Xd(g,i);break}m=i;if((c[g+304>>2]|0)>>>0<=m>>>0?(c[g+308>>2]|0)>>>0>m>>>0:0){m=g+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);e=c[b+228>>2]|0;do if(e|0){if(o|0?c[o+480>>2]|0:0){Vi(o,e);break}l=e+32|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;if(!m)Vi(o,e)}while(0);g=b+232|0;e=c[g>>2]|0;if(e|0){h=(o|0)==0;i=o+480|0;j=o+304|0;k=o+308|0;l=o+300|0;do{c[g>>2]=c[e+20>>2];f=c[e+36>>2]|0;if(f|0)ni(o,f);f=c[e+40>>2]|0;if(f|0)ri(o,f);f=c[e+16>>2]|0;do if(f|0){if(!h){if(c[i>>2]|0){Xd(o,f);break}m=f;if((c[j>>2]|0)>>>0<=m>>>0?(c[k>>2]|0)>>>0>m>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{m=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);m=e+55|0;a:do if(((d[m>>0]|d[m+1>>0]<<8)&16)!=0?(n=c[e+32>>2]|0,(n|0)!=0):0){do if(!h){if(!(c[i>>2]|0)){f=n;if((c[j>>2]|0)>>>0>f>>>0)break;if((c[k>>2]|0)>>>0<=f>>>0)break;c[n>>2]=c[l>>2];c[l>>2]=n}else Xd(o,n);f=e;m=53;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);m=52;break}else{m=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);m=52;break}}else m=52;while(0);if((m|0)==52)if(h)m=58;else{f=e;m=53}do if((m|0)==53){m=0;if(c[i>>2]|0){Xd(o,f);break}p=e;if((c[j>>2]|0)>>>0<=p>>>0?(c[k>>2]|0)>>>0>p>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e}else{e=f;m=58}}while(0);do if((m|0)==58)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[g>>2]|0}while((e|0)!=0)}n=c[b+236>>2]|0;do if(n|0){Xi(o,c[n+28>>2]|0);e=c[n>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[n+4>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[n+12>>2]|0;if(e|0)ni(o,e);e=c[n+16>>2]|0;b:do if(e){l=e+4|0;f=c[e>>2]|0;c:do if((c[l>>2]|0)>0){h=o+480|0;i=o+304|0;j=o+308|0;k=o+300|0;if(!o){g=0;while(1){f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[e>>2]|0;if((g|0)>=(c[l>>2]|0))break c}}g=0;do{f=c[f+(g<<3)>>2]|0;do if(f|0){if(c[h>>2]|0){Xd(o,f);break}p=f;if((c[i>>2]|0)>>>0<=p>>>0?(c[j>>2]|0)>>>0>p>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);g=g+1|0;f=c[e>>2]|0}while((g|0)<(c[l>>2]|0))}while(0);d:do if(f){do if(o|0){g=o+480|0;if(!(c[g>>2]|0)){h=f;if((c[o+304>>2]|0)>>>0>h>>>0)break;if((c[o+308>>2]|0)>>>0<=h>>>0)break;p=o+300|0;c[f>>2]=c[p>>2];c[p>>2]=f}else Xd(o,f);f=g;g=e;m=118;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);m=116;break}else{m=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);m=116;break}}else m=116;while(0);if((m|0)==116)if(o){f=o+480|0;g=e;m=118}do if((m|0)==118){if(!(c[f>>2]|0)){e=g;if((c[o+304>>2]|0)>>>0>e>>>0){e=g;break}if((c[o+308>>2]|0)>>>0<=e>>>0){e=g;break}p=o+300|0;c[g>>2]=c[p>>2];c[p>>2]=g}else Xd(o,g);e=n;m=129;break b}while(0);if(e)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);m=128;break}else{m=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);m=128;break}else m=128}else m=128;while(0);if((m|0)==128)if(!o)e=n;else{e=n;m=129}if((m|0)==129){if(c[o+480>>2]|0){Xd(o,e);break}p=n;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[n>>2]=c[p>>2];c[p>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[b+4>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);ro(o,c[b+272>>2]|0);f=c[b>>2]|0;e=c[b+64>>2]|0;do if(e|0){if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}p=e;if((c[f+304>>2]|0)>>>0<=p>>>0?(c[f+308>>2]|0)>>>0>p>>>0:0){p=f+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[b+68>>2]|0;if(e|0)ri(f,e);e=b+24|0;if(!f){a[e>>0]=0;return}p=f+272|0;c[p>>2]=(c[p>>2]|0)-(d[e>>0]|0);a[e>>0]=0;return}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;e=a+480|0;f=a+304|0;g=a+308|0;h=a+300|0;if(!a){do{d=b;b=c[b+12>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0);return}do{d=b;b=c[b+12>>2]|0;do if(!(c[e>>2]|0)){i=d;if((c[f>>2]|0)>>>0<=i>>>0?(c[g>>2]|0)>>>0>i>>>0:0){c[d>>2]=c[h>>2];c[h>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}else Xd(a,d);while(0)}while((b|0)!=0);return}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=c[b+24>>2]|0;if((a[d>>0]|0)!=-94)return 0;f=d+44|0;if((c[g+12>>2]|0)!=(c[f>>2]|0))return 0;d=(c[b>>2]|0)+272|0;b=c[d>>2]|0;if(!b)return 0;while(1){e=b+12|0;if((c[b>>2]|0)==(f|0))break;b=c[e>>2]|0;if(!b){h=8;break}else d=e}if((h|0)==8)return 0;c[d>>2]=c[e>>2];c[e>>2]=c[g>>2];c[g>>2]=b;h=g+4|0;c[h>>2]=(c[h>>2]|0)+1;return 0}function to(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+32|0;p=q;m=c[a+24>>2]|0;n=c[b+32>>2]|0;if(!n){p=2;Ra=q;return p|0}o=c[n>>2]|0;if((o|0)>0){g=m+12|0;h=m+4|0;f=0;do{a:do if((c[n+8+(f*72|0)+16>>2]|0)==(c[g>>2]|0)?(i=c[n+8+(f*72|0)+8>>2]|0,j=(c[a>>2]|0)+272|0,k=c[j>>2]|0,k|0):0){e=j;d=k;while(1){l=d+12|0;if((c[d>>2]|0)==(i|0))break;d=c[l>>2]|0;if(!d)break a;else e=l}c[e>>2]=c[l>>2];c[l>>2]=c[m>>2];c[m>>2]=d;c[h>>2]=(c[h>>2]|0)+1}while(0);f=f+1|0}while((f|0)<(o|0))}f=b+64|0;d=c[f>>2]|0;if(!d){p=0;Ra=q;return p|0}if((c[d>>2]|0)<=0){p=0;Ra=q;return p|0}b=p+4|0;e=0;do{o=c[d+8+(e<<4)+8>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;n=c[a>>2]|0;c[p>>2]=n;Kk(n,o,p);$j(a,o)|0;e=e+1|0;d=c[f>>2]|0}while((e|0)<(c[d>>2]|0));d=0;Ra=q;return d|0}function uo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;f=d;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;e=L()|0;a=d;c[a>>2]=f;c[a+4>>2]=e;return}function vo(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d){e=0;f=0}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function wo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;return}function xo(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+8|0;h=e;g=d;f=c[g>>2]|0;g=c[g+4>>2]|0;if(!((c[h>>2]|0)==0&(c[h+4>>2]|0)==0)){f=Sv(f|0,g|0,1,0)|0;g=L()|0;h=d;c[h>>2]=f;c[h+4>>2]=g;h=e;c[h>>2]=0;c[h+4>>2]=0}d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){h=d;c[h>>2]=f;c[h+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}function yo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;f=d+8|0;e=f;e=Sv(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;a=L()|0;c[f>>2]=e;c[f+4>>2]=a;f=d;if(!((c[f>>2]|0)==0&(c[f+4>>2]|0)==0))return;f=d;c[f>>2]=e;c[f+4>>2]=a;return}function zo(a){a=a|0;var d=0,e=0,f=0,g=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))e=Ic(a,24)|0;else e=c[d+16>>2]|0;if(!e)return;g=e;f=c[g>>2]|0;g=c[g+4>>2]|0;d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=f;c[d+4>>2]=g;b[a>>1]=4}else Pg(d,f,g);g=e;c[g>>2]=0;c[g+4>>2]=0;return}function Ao(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Bo(a){a=a|0;var d=0,e=0,f=0.0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l+8|0;k=l;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d){Ra=l;return}i=d+8|0;h=c[i>>2]|0;i=c[i+4>>2]|0;e=d;c[e>>2]=h;c[e+4>>2]=i;e=d+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>1){d=Sv(d|0,e|0,-1,-1)|0;f=(+(h>>>0)+4294967296.0*+(i|0))/(+(d>>>0)+4294967296.0*+(L()|0));d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[j>>3]=f;g[k>>3]=+g[j>>3];if(!(+g[j>>3]==+g[k>>3])){Ra=l;return}g[d>>3]=f;b[e>>1]=8;Ra=l;return}else{d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[j>>3]=0.0;g[k>>3]=+g[j>>3];if(!(+g[j>>3]==+g[k>>3])){Ra=l;return}g[d>>3]=0.0;b[e>>1]=8;Ra=l;return}}function Co(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+8|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Do(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Eo(a){a=a|0;var d=0,e=0.0,f=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){Ra=i;return}j=d+8|0;d=d+16|0;e=(+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0))/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0));d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216))b[a>>1]=1;else Dg(d);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[d>>3]=e;b[a>>1]=8;Ra=i;return}function Fo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+8|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Go(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0;f=c[d+8>>2]|0;if(!(b[f+8>>1]&8192))i=Ic(d,24)|0;else i=c[f+16>>2]|0;if(!i)return;f=i;do if((c[f>>2]|0)==0&(c[f+4>>2]|0)==0){f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){j=Mg(+g[f>>3])|0;k=L()|0;l=13;break}if(!(h&18)){h=i+8|0;c[h>>2]=0;c[h+4>>2]=0;break}else{j=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;k=L()|0;l=13;break}}else{k=f;j=c[k>>2]|0;k=c[k+4>>2]|0;l=13}while(0);if((l|0)==13?(l=i+8|0,c[l>>2]=j,c[l+4>>2]=k,!((k|0)<0|(k|0)==0&j>>>0<1)):0)break;c[d+20>>2]=1;yc(c[d>>2]|0,49664,-1,1,-1)|0}while(0);j=i;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=L()|0;l=i;c[l>>2]=j;c[l+4>>2]=k;return}function Ho(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))l=Ic(a,24)|0;else l=c[d+16>>2]|0;if(!l)return;e=l+8|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if(!((e|0)>0|(e|0)==0&d>>>0>0))return;g=l;f=c[g>>2]|0;g=c[g+4>>2]|0;m=Wv(f|0,g|0,d|0,e|0)|0;L()|0;if(!m){f=l+16|0;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}n=((m|0)<0)<<31>>31;h=Yv(d|0,e|0,m|0,n|0)|0;f=Tv(f|0,g|0,h|0,L()|0)|0;g=L()|0;h=m+1|0;i=((h|0)<0)<<31>>31;j=Yv(f|0,g|0,h|0,i|0)|0;k=L()|0;e=l+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)<(k|0)|(e|0)==(k|0)&d>>>0<j>>>0){f=Wv(d|0,e|0,h|0,i|0)|0;f=Sv(f|0,L()|0,1,0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}else{l=Sv(f|0,g|0,1,0)|0;g=L()|0;f=Tv(d|0,e|0,j|0,k|0)|0;f=Wv(f|0,L()|0,m|0,n|0)|0;f=Sv(l|0,g|0,f|0,L()|0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}}function Io(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Jo(d,e,f){d=d|0;e=e|0;f=f|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,8)|0;else e=c[e+16>>2]|0;if(!e)return;uc(c[e>>2]|0);f=tc(c[f>>2]|0)|0;c[e>>2]=f;if(f|0){d=e+4|0;c[d>>2]=(c[d>>2]|0)+1;return}e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Ko(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function Lo(a){a=a|0;var d=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;d=c[d>>2]|0;if(!d)return;Dc(a,d);return}function Mo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+4|0;a=(c[e>>2]|0)+-1|0;c[e>>2]=a;if(a|0)return;uc(c[d>>2]|0);c[d>>2]=0;return}function No(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;o=x+8|0;p=x;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))r=Ic(f,16)|0;else r=c[h+16>>2]|0;if(!r){Ra=x;return}q=i+4|0;m=c[q>>2]|0;n=m+8|0;l=b[n>>1]&31;h=d[816+l>>0]|0;if((l|16|0)==18){h=a[m+10>>0]|0;j=m+16|0;l=m+12|0;if(!(Lg(c[j>>2]|0,o,c[l>>2]|0,h)|0))h=b[n>>1]|0;else{if(!(Og(c[j>>2]|0,p,c[l>>2]|0,h)|0)){o=p;p=c[o+4>>2]|0;h=m;c[h>>2]=c[o>>2];c[h+4>>2]=p;h=4}else{g[m>>3]=+g[o>>3];h=8}h=b[n>>1]&-3|h;b[n>>1]=h}h=d[816+(h&31)>>0]|0}a:do switch((h&255)<<24>>24){case 1:{h=c[q>>2]|0;j=e[h+8>>1]|0;if(j&4|0){v=h;u=c[v+4>>2]|0;v=c[v>>2]|0;w=27;break a}if(j&8|0){v=Mg(+g[h>>3])|0;u=L()|0;w=27;break a}if(j&18|0){v=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;u=L()|0;w=27}break}case 2:{h=c[q>>2]|0;j=e[h+8>>1]|0;do if(!(j&8)){if(j&4|0){q=h;k=+((c[q>>2]|0)>>>0)+4294967296.0*+(c[q+4>>2]|0);break}if(!(j&18))k=0.0;else k=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else k=+g[h>>3];while(0);h=~~k>>>0;j=+t(k)>=1.0?(k>0.0?~~+H(+s(k/4294967296.0),4294967295.0)>>>0:~~+F((k-+(~~k>>>0))/4294967296.0)>>>0):0;if(k==+(h>>>0)+4294967296.0*+(j|0)){u=j;v=h;w=27}break}default:{}}while(0);if((w|0)==27?!((u|0)<0|(u|0)==0&v>>>0<1):0){q=r;q=Sv(c[q>>2]|0,c[q+4>>2]|0,1,0)|0;w=L()|0;p=r;c[p>>2]=q;c[p+4>>2]=w;if(!((v|0)==(q|0)&(u|0)==(w|0))){Ra=x;return}w=tc(c[i>>2]|0)|0;c[r+8>>2]=w;if(w|0){Ra=x;return}h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(h);h=c[f>>2]|0}c[f+20>>2]=7;h=c[h+32>>2]|0;j=h+81|0;if(a[j>>0]|0){Ra=x;return}if(a[h+82>>0]|0){Ra=x;return}a[j>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;f=h+272|0;c[f>>2]=(c[f>>2]|0)+1;h=c[h+236>>2]|0;if(!h){Ra=x;return}c[h+12>>2]=7;Ra=x;return}c[f+20>>2]=1;yc(c[f>>2]|0,44153,-1,1,-1)|0;Ra=x;return}function Oo(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;d=d+8|0;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function Po(a){a=a|0;return}function Qo(d,e,f){d=d|0;e=e|0;f=f|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,16)|0;else e=c[e+16>>2]|0;if(!e)return;e=e+8|0;if(c[e>>2]|0)return;f=tc(c[f>>2]|0)|0;c[e>>2]=f;if(f|0)return;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Ro(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,16)|0;else d=c[d+16>>2]|0;if(!d)return;d=d+8|0;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function So(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+64|0;p=r+56|0;q=r+48|0;o=r;if(_o(d,e,f,o)|0){Ra=r;return}l=o+40|0;do if(!(a[l>>0]|0)){n=o+42|0;if(a[n>>0]|0){e=c[o+8>>2]|0;if((e+4713|0)>>>0<=14712){i=c[o+12>>2]|0;j=c[o+16>>2]|0;k=e;m=6}}else{i=1;j=1;k=2e3;m=6}if((m|0)==6?(a[o+41>>0]|0)==0:0){e=(i|0)<3;f=k+(e<<31>>31)|0;h=(+(j+2+((f|0)/-100|0)+((f|0)/400|0)+((((e?i+12|0:i)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;f=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;j=o;c[j>>2]=f;c[j+4>>2]=e;a[l>>0]=1;j=o+43|0;if(!(a[j>>0]|0))break;i=G(c[o+20>>2]|0,36e5)|0;i=((c[o+24>>2]|0)*6e4|0)+i|0;h=+g[o+32>>3]*1.0e3;f=Sv(~~h>>>0|0,(+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0)|0,f|0,e|0)|0;f=Sv(f|0,L()|0,i|0,((i|0)<0)<<31>>31|0)|0;e=L()|0;i=o;c[i>>2]=f;c[i+4>>2]=e;i=o+44|0;if(!(a[i>>0]|0))break;m=(c[o+28>>2]|0)*6e4|0;f=Tv(f|0,e|0,m|0,((m|0)<0)<<31>>31|0)|0;e=L()|0;c[o>>2]=f;c[o+4>>2]=e;a[n>>0]=0;a[j>>0]=0;a[i>>0]=0;break}e=o;f=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));a[o+46>>0]=1;f=0;e=0}else{e=o;f=c[e>>2]|0;e=c[e+4>>2]|0}while(0);h=(+(f>>>0)+4294967296.0*+(e|0))/864.0e5;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(e);g[p>>3]=h;g[q>>3]=+g[p>>3];if(!(+g[p>>3]==+g[q>>3])){Ra=r;return}g[e>>3]=h;b[f>>1]=8;Ra=r;return}function To(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+176|0;j=k+152|0;h=k+104|0;i=k;if(_o(b,d,e,h)|0){Ra=k;return}g=h+42|0;a:do if(!(a[g>>0]|0)){do if(a[h+40>>0]|0){e=h;d=c[e>>2]|0;e=c[e+4>>2]|0;if(e>>>0>108096|(e|0)==108096&d>>>0>275971583){d=h;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[h+46>>0]=1;e=0;f=0;d=0;break a}else{e=Sv(d|0,e|0,432e5,0)|0;e=Wv(e|0,L()|0,864e5,0)|0;L()|0;d=~~((+(e|0)+-1867216.25)/36524.25);d=e+1525+d+((d|0)/-4|0)|0;e=~~((+(d|0)+-122.1)/365.25);d=d-((((e&32767)*36525|0)>>>0)/100|0)|0;f=~~(+(d|0)/30.6001);d=d-~~(+(f|0)*30.6001)|0;c[h+16>>2]=d;f=((f|0)<14?-1:-13)+f|0;c[h+12>>2]=f;e=((f|0)>2?-4716:-4715)+e|0;c[h+8>>2]=e;break}}else{c[h+8>>2]=2e3;c[h+12>>2]=1;c[h+16>>2]=1;d=1;f=1;e=2e3}while(0);a[g>>0]=1}else{e=c[h+8>>2]|0;f=c[h+12>>2]|0;d=c[h+16>>2]|0}while(0);c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=d;Cb(100,i,49994,j)|0;if((yc(c[b>>2]|0,i,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}Ra=k;return}function Uo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+176|0;o=p+152|0;m=p+104|0;n=p;if(_o(b,d,e,m)|0){Ra=p;return}l=m+43|0;if(!(a[l>>0]|0)){d=m+40|0;do if(!(a[d>>0]|0)){if(a[m+42>>0]|0){e=c[m+8>>2]|0;if((e+4713|0)>>>0<=14712){h=c[m+12>>2]|0;i=c[m+16>>2]|0;j=e;k=8}}else{h=1;i=1;j=2e3;k=8}if((k|0)==8?(a[m+41>>0]|0)==0:0){e=(h|0)<3;k=j+(e<<31>>31)|0;f=(+(i+2+((k|0)/-100|0)+((k|0)/400|0)+((((e?h+12|0:h)*306001|0)+306001|0)/1e4|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~f>>>0;e=+t(f)>=1.0?(f>0.0?~~+H(+s(f/4294967296.0),4294967295.0)>>>0:~~+F((f-+(~~f>>>0))/4294967296.0)>>>0):0;j=m;c[j>>2]=k;c[j+4>>2]=e;a[d>>0]=1;d=k;break}d=m;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[m+46>>0]=1;d=0;e=0}else{e=m;d=c[e>>2]|0;e=c[e+4>>2]|0}while(0);j=Sv(d|0,e|0,432e5,0)|0;j=Zv(j|0,L()|0,864e5,0)|0;L()|0;f=+(j|0)/1.0e3;j=~~f;e=(j|0)/3600|0;c[m+20>>2]=e;k=(G(e,-3600)|0)+j|0;d=(k|0)/60|0;c[m+24>>2]=d;f=f-+(j|0)+ +((G(d,-60)|0)+k|0);g[m+32>>3]=f;a[m+41>>0]=0;a[l>>0]=1}else{f=+g[m+32>>3];e=c[m+20>>2]|0;d=c[m+24>>2]|0}c[o>>2]=e;c[o+4>>2]=d;c[o+8>>2]=~~f;Cb(100,n,50009,o)|0;if((yc(c[b>>2]|0,n,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}Ra=p;return}function Vo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0;i=Ra;Ra=Ra+176|0;h=i+152|0;e=i+104|0;f=i;if(_o(a,b,d,e)|0){Ra=i;return}dp(e);l=c[e+12>>2]|0;k=c[e+16>>2]|0;j=c[e+20>>2]|0;b=c[e+24>>2]|0;d=~~+g[e+32>>3];c[h>>2]=c[e+8>>2];c[h+4>>2]=l;c[h+8>>2]=k;c[h+12>>2]=j;c[h+16>>2]=b;c[h+20>>2]=d;Cb(100,f,50024,h)|0;if((yc(c[a>>2]|0,f,-1,1,-1)|0)==18){c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0}Ra=i;return}function Wo(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0.0;$=Ra;Ra=Ra+240|0;Y=$+232|0;X=$+224|0;W=$+216|0;V=$+208|0;U=$+200|0;T=$+192|0;S=$+184|0;_=$+176|0;Z=$+168|0;R=$+160|0;Q=$+152|0;O=$+104|0;P=$;if(!f){Ra=$;return}i=c[h>>2]|0;if(!i){Ra=$;return}j=b[i+8>>1]|0;if((j&514)==514?(a[i+10>>0]|0)==1:0)N=c[i+16>>2]|0;else M=6;do if((M|0)==6)if(!(j&1)){N=Gg(i,1)|0;break}else{Ra=$;return}while(0);if(!N){Ra=$;return}if(_o(d,f+-1|0,h+4|0,O)|0){Ra=$;return}i=c[d>>2]|0;k=c[i+32>>2]|0;j=0;h=1;f=0;a:while(1){b:do switch(a[N+j>>0]|0){case 0:break a;case 37:{j=j+1|0;switch(a[N+j>>0]|0){case 37:case 119:break b;case 87:case 83:case 77:case 109:case 72:case 100:{h=Sv(h|0,f|0,1,0)|0;f=L()|0;break b}case 102:{h=Sv(h|0,f|0,8,0)|0;f=L()|0;break b}case 106:{h=Sv(h|0,f|0,3,0)|0;f=L()|0;break b}case 89:{h=Sv(h|0,f|0,8,0)|0;f=L()|0;break b}case 74:case 115:{h=Sv(h|0,f|0,50,0)|0;f=L()|0;break b}default:{M=86;break a}}}default:{}}while(0);h=Sv(h|0,f|0,1,0)|0;j=j+1|0;f=L()|0}if((M|0)==86){Ra=$;return}do if(f>>>0<0|(f|0)==0&h>>>0<100)i=P;else{K=c[k+108>>2]|0;J=((K|0)<0)<<31>>31;if(f>>>0>J>>>0|(f|0)==(J|0)&h>>>0>K>>>0){c[d+20>>2]=18;yc(i,31223,-1,1,0)|0;Ra=$;return}f=aw(0,h|0,32)|0;h=L()|0;c:do if(c[k+272>>2]|0){if(!(a[k+81>>0]|0))M=32}else{do if(!(h>>>0>0|((h|0)==0?f>>>0>(e[k+276>>1]|0)>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];M=k+284|0;c[M>>2]=(c[M>>2]|0)+1;M=33;break c}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];M=k+284|0;c[M>>2]=(c[M>>2]|0)+1;M=33;break c}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;M=32}while(0);if((M|0)==32){i=_d(k,f,h)|0;M=33}if((M|0)==33){if(i|0)break;i=c[d>>2]|0}j=i+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(i);i=c[d>>2]|0}c[d+20>>2]=7;i=c[i+32>>2]|0;j=i+81|0;if(a[j>>0]|0){Ra=$;return}if(a[i+82>>0]|0){Ra=$;return}a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;d=i+272|0;c[d>>2]=(c[d>>2]|0)+1;i=c[i+236>>2]|0;if(!i){Ra=$;return}c[i+12>>2]=7;Ra=$;return}while(0);h=O+40|0;K=O+42|0;do if(!(a[h>>0]|0)){if(a[K>>0]|0){j=c[O+8>>2]|0;if((j+4713|0)>>>0<=14712){l=c[O+12>>2]|0;m=c[O+16>>2]|0;n=j;M=47}}else{l=1;m=1;n=2e3;M=47}if((M|0)==47?(a[O+41>>0]|0)==0:0){f=(l|0)<3;j=n+(f<<31>>31)|0;o=(+(m+2+((j|0)/-100|0)+((j|0)/400|0)+((((f?l+12|0:l)*306001|0)+306001|0)/1e4|0)+(((j*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;j=~~o>>>0;f=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0;k=O;c[k>>2]=j;c[k+4>>2]=f;a[h>>0]=1;k=O+43|0;if(!(a[k>>0]|0))break;h=G(c[O+20>>2]|0,36e5)|0;h=((c[O+24>>2]|0)*6e4|0)+h|0;o=+g[O+32>>3]*1.0e3;j=Sv(~~o>>>0|0,(+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0)|0,j|0,f|0)|0;j=Sv(j|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;h=O;c[h>>2]=j;c[h+4>>2]=f;h=O+44|0;if(!(a[h>>0]|0))break;E=(c[O+28>>2]|0)*6e4|0;E=Tv(j|0,f|0,E|0,((E|0)<0)<<31>>31|0)|0;I=L()|0;J=O;c[J>>2]=E;c[J+4>>2]=I;a[K>>0]=0;a[k>>0]=0;a[h>>0]=0;break}j=O;f=j+48|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(f|0));a[O+46>>0]=1}while(0);dp(O);D=O+16|0;E=O+32|0;I=O+20|0;C=O+8|0;x=O+24|0;y=O+28|0;z=O+41|0;A=O+43|0;B=O+44|0;J=O+12|0;w=0;j=0;d:while(1){f=a[N+j>>0]|0;e:do switch(f<<24>>24){case 0:break d;case 37:{v=j+1|0;u=a[N+v>>0]|0;do switch(u<<24>>24|0){case 100:{c[Q>>2]=c[D>>2];Cb(3,i+w|0,50054,Q)|0;f=w+2|0;j=v;break e}case 102:{o=+g[E>>3];j=i+w|0;g[R>>3]=o>59.999?59.999:o;Cb(7,j,50059,R)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 72:{c[Z>>2]=c[I>>2];Cb(3,i+w|0,50054,Z)|0;f=w+2|0;j=v;break e}case 106:case 87:{r=O;q=c[r>>2]|0;r=c[r+4>>2]|0;j=c[C>>2]|0;h=c[I>>2]|0;l=c[x>>2]|0;m=c[y>>2]|0;o=+g[E>>3];f=a[z>>0]|0;n=a[A>>0]|0;p=a[B>>0]|0;if(a[K>>0]|0)if((j+4713|0)>>>0>14712){k=0;j=0}else M=63;else{j=2e3;M=63}if((M|0)==63){M=0;if(!(f<<24>>24)){k=j+-1|0;aa=(+(((k|0)/-100|0)+431+((k|0)/400|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~aa>>>0;j=+t(aa)>=1.0?(aa>0.0?~~+H(+s(aa/4294967296.0),4294967295.0)>>>0:~~+F((aa-+(~~aa>>>0))/4294967296.0)>>>0):0;if(n<<24>>24){l=(l*6e4|0)+(G(h,36e5)|0)|0;aa=o*1.0e3;h=+t(aa)>=1.0?(aa>0.0?~~+H(+s(aa/4294967296.0),4294967295.0)>>>0:~~+F((aa-+(~~aa>>>0))/4294967296.0)>>>0):0;n=p<<24>>24==0;m=m*6e4|0;m=Tv(0,0,m|0,((m|0)<0)<<31>>31|0)|0;p=L()|0;l=Sv(~~aa>>>0|0,h|0,l|0,((l|0)<0)<<31>>31|0)|0;p=Sv(l|0,L()|0,(n?0:m)|0,(n?0:p)|0)|0;k=Sv(p|0,L()|0,k|0,j|0)|0;j=L()|0}}else{k=0;j=0}}f=Sv(q|0,r|0,432e5,0)|0;h=L()|0;j=Wv(Tv(f|0,h|0,k|0,j|0)|0,L()|0,864e5,0)|0;L()|0;if(u<<24>>24==87){f=Wv(f|0,h|0,864e5,0)|0;f=Zv(f|0,L()|0,7,0)|0;L()|0;c[_>>2]=(7-f+j|0)/7|0;Cb(3,i+w|0,50054,_)|0;f=w+2|0;j=v;break e}else{c[S>>2]=j+1;Cb(4,i+w|0,50066,S)|0;f=w+3|0;j=v;break e}}case 74:{j=i+w|0;u=O;g[T>>3]=(+((c[u>>2]|0)>>>0)+4294967296.0*+(c[u+4>>2]|0))/864.0e5;Cb(20,j,34086,T)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 109:{c[U>>2]=c[J>>2];Cb(3,i+w|0,50054,U)|0;f=w+2|0;j=v;break e}case 77:{c[V>>2]=c[x>>2];Cb(3,i+w|0,50054,V)|0;f=w+2|0;j=v;break e}case 115:{j=i+w|0;q=O;q=Sv(Wv(c[q>>2]|0,c[q+4>>2]|0,1e3,0)|0,L()|0,-413362496,-50)|0;r=L()|0;u=W;c[u>>2]=q;c[u+4>>2]=r;Cb(30,j,32524,W)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 83:{c[X>>2]=~~+g[E>>3];Cb(3,i+w|0,50054,X)|0;f=w+2|0;j=v;break e}case 119:{f=O;f=Zv(Wv(Sv(c[f>>2]|0,c[f+4>>2]|0,1296e5,0)|0,L()|0,864e5,0)|0,L()|0,7,0)|0;L()|0;a[i+w>>0]=f+48;f=w+1|0;j=v;break e}case 89:{j=i+w|0;c[Y>>2]=c[C>>2];Cb(5,j,50071,Y)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}default:{a[i+w>>0]=37;f=w+1|0;j=v;break e}}while(0)}default:{a[i+w>>0]=f;f=w+1|0}}while(0);w=f;j=j+1|0}a[i+w>>0]=0;if((yc(c[d>>2]|0,i,-1,1,(i|0)==(P|0)?-1:116)|0)!=18){Ra=$;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=$;return}function Xo(a,b,c){a=a|0;b=b|0;c=c|0;Uo(a,0,0);return}function Yo(a,b,c){a=a|0;b=b|0;c=c|0;Vo(a,0,0);return}function Zo(a,b,c){a=a|0;b=b|0;c=c|0;To(a,0,0);return}function _o(e,f,h,i){e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;ya=Ra;Ra=Ra+96|0;p=ya+72|0;xa=ya+64|0;va=ya+56|0;wa=ya+8|0;q=ya;l=i;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));if(!f){l=(c[e+12>>2]|0)+56|0;j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;do if((k|0)==0&(j|0)==0){j=c[c[(c[e>>2]|0)+32>>2]>>2]|0;if((c[j>>2]|0)>1?(n=c[j+72>>2]|0,(n|0)!=0):0)j=Xa[n&255](j,l)|0;else{j=Xa[c[j+64>>2]&255](j,xa)|0;u=+g[xa>>3]*864.0e5;e=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;xa=l;c[xa>>2]=~~u>>>0;c[xa+4>>2]=e}if(!j){j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;break}xa=l;c[xa>>2]=0;c[xa+4>>2]=0;c[i>>2]=0;c[i+4>>2]=0;i=1;Ra=ya;return i|0}while(0);xa=i;c[xa>>2]=k;c[xa+4>>2]=j;if(!((j|0)>0|(j|0)==0&k>>>0>0)){i=1;Ra=ya;return i|0}a[i+40>>0]=1;i=0;Ra=ya;return i|0}k=c[h>>2]|0;j=b[k+8>>1]|0;if(((d[816+(j&31)>>0]|0)+-1|0)>>>0<2){j=j&65535;do if(!(j&8)){if(j&4|0){aa=k;m=+((c[aa>>2]|0)>>>0)+4294967296.0*+(c[aa+4>>2]|0);break}if(!(j&18))m=0.0;else m=+Kg(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)}else m=+g[k>>3];while(0);g[i+32>>3]=m;a[i+41>>0]=1;if(m>=0.0&m<5373484.5){u=m*864.0e5+.5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=i;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$;a[i+40>>0]=1}}else{if(!k){i=1;Ra=ya;return i|0}if((j&514)==514?(a[k+10>>0]|0)==1:0)n=c[k+16>>2]|0;else v=25;do if((v|0)==25)if(!(j&1)){n=Gg(k,1)|0;break}else{i=1;Ra=ya;return i|0}while(0);if(!n){i=1;Ra=ya;return i|0}k=(a[n>>0]|0)==45;j=k?n+1|0:n;c[p>>2]=xa;c[p+4>>2]=va;c[p+8>>2]=wa;a:do if((bp(j,49795,p)|0)==3){j=j+10|0;while(1){aa=a[j>>0]|0;if(aa<<24>>24==84?1:(a[880+(aa&255)>>0]&1)!=0)j=j+1|0;else break}do if(ap(j,i)|0)if(!(a[j>>0]|0)){a[i+43>>0]=0;break}else{v=39;break a}while(0);a[i+40>>0]=0;a[i+42>>0]=1;aa=c[xa>>2]|0;c[i+8>>2]=k?0-aa|0:aa;c[i+12>>2]=c[va>>2];c[i+16>>2]=c[wa>>2];if(a[i+44>>0]|0)$o(i)}else v=39;while(0);b:do if((v|0)==39?ap(n,i)|0:0){aa=a[n>>0]|0;j=(d[208+(aa&255)>>0]|0)+-110|0;if(!(aa<<24>>24==0|(j|0)!=0)){k=49791;l=n;do{l=l+1|0;k=k+1|0;aa=a[l>>0]|0;j=(d[208+(aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(aa<<24>>24==0|(j|0)!=0))}c:do if(!j){j=c[e+12>>2]|0;if((a[(c[j+104>>2]|0)+((c[e+16>>2]|0)*20|0)>>0]|0)==64){c[e+20>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=56;break}l=j+56|0;j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;do if((k|0)==0&(j|0)==0){j=c[c[(c[e>>2]|0)+32>>2]>>2]|0;if((c[j>>2]|0)>1?(o=c[j+72>>2]|0,(o|0)!=0):0)j=Xa[o&255](j,l)|0;else{j=Xa[c[j+64>>2]&255](j,p)|0;u=+g[p>>3]*864.0e5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=l;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$}if(!j){j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;break}else{aa=l;c[aa>>2]=0;c[aa+4>>2]=0;aa=i;c[aa>>2]=0;c[aa+4>>2]=0;break c}}while(0);aa=i;c[aa>>2]=k;c[aa+4>>2]=j;if((j|0)>0|(j|0)==0&k>>>0>0){a[i+40>>0]=1;break b}}else v=56;while(0);if((v|0)==56?Lg(n,q,(Eu(n)|0)&1073741823,1)|0:0){m=+g[q>>3];g[i+32>>3]=m;a[i+41>>0]=1;if(!(m>=0.0&m<5373484.5))break;u=m*864.0e5+.5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=i;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$;a[i+40>>0]=1;break}i=1;Ra=ya;return i|0}while(0)}d:do if((f|0)>1){x=e+12|0;y=e+16|0;z=i+41|0;A=i+40|0;B=i+42|0;C=e+20|0;D=i+43|0;E=i+44|0;I=i+32|0;J=i+24|0;K=i+20|0;M=i+45|0;N=i+8|0;O=i+12|0;P=i+16|0;j=i+46|0;Q=wa+40|0;R=wa+42|0;S=wa+41|0;T=wa+46|0;U=wa+8|0;V=wa+12|0;W=wa+16|0;X=wa+43|0;Y=wa+20|0;Z=wa+24|0;_=wa+32|0;$=wa+44|0;aa=wa+28|0;w=1;e:while(1){l=h+(w<<2)|0;n=c[l>>2]|0;k=b[n+8>>1]|0;if((k&514)==514?(a[n+10>>0]|0)==1:0){q=c[n+16>>2]|0;k=n}else if(!(k&1)){q=Gg(n,1)|0;k=c[l>>2]|0}else{q=0;k=n}l=b[k+8>>1]|0;if(!(l&2)){if(!(l&17))v=72}else if((a[k+10>>0]|0)!=1&(l&17)==0)v=72;if((v|0)==72){v=0;Fg(k,1)|0}if(!q){j=1;v=197;break}c[xa>>2]=1;k=a[q>>0]|0;l=k&255;f:do switch(a[208+l>>0]|0){case 108:{if(!(k<<24>>24==0|(l|32|0)!=108)){n=49894;k=q;do{k=k+1|0;n=n+1|0;v=a[k>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0));if(l|0){v=193;break f}}if((a[(c[(c[x>>2]|0)+104>>2]|0)+((c[y>>2]|0)*20|0)>>0]|0)==64){c[C>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=193;break f}else{$o(i);r=cp(i,e,xa)|0;q=L()|0;v=i;q=Sv(c[v>>2]|0,c[v+4>>2]|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=193;break f}}case 117:{o=k<<24>>24==0;if(!(o|(l|32|0)!=117)){k=49904;l=q;do{l=l+1|0;k=k+1|0;r=a[l>>0]|0;n=(d[208+(r&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(n|0)!=0));if(!n)v=87}else v=87;if((v|0)==87?(0,a[z>>0]|0):0){m=+g[I>>3]*1.0e3+21086676.0e7;g[va>>3]=m;if(!(m>=0.0&m<4642690608.0e5)){v=193;break f}a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;r=+t(m)>=1.0?(m>0.0?~~+H(+s(m/4294967296.0),4294967295.0)>>>0:~~+F((m-+(~~m>>>0))/4294967296.0)>>>0):0;v=i;c[v>>2]=~~m>>>0;c[v+4>>2]=r;a[A>>0]=1;a[z>>0]=0;c[xa>>2]=0;v=192;break f}if(!o){n=49914;k=q;do{k=k+1|0;n=n+1|0;v=a[k>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0));if(l|0){v=193;break f}}if((a[(c[(c[x>>2]|0)+104>>2]|0)+((c[y>>2]|0)*20|0)>>0]|0)==64){c[C>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=193;break f}if(a[M>>0]|0){c[xa>>2]=0;v=192;break f}$o(i);k=cp(i,e,xa)|0;l=L()|0;if(!(c[xa>>2]|0)){q=i;q=Tv(c[q>>2]|0,c[q+4>>2]|0,k|0,l|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=cp(i,e,xa)|0;v=Tv(k|0,l|0,v|0,L()|0)|0;r=L()|0;q=i;q=Sv(v|0,r|0,c[q>>2]|0,c[q+4>>2]|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r}a[M>>0]=1;v=193;break}case 119:{g:do if(!(k<<24>>24)){k=49918;v=105}else{o=q;k=49918;l=8;p=7;while(1){o=o+1|0;if(l>>>0<=1)break g;k=k+1|0;l=a[o>>0]|0;if(!(l<<24>>24)){v=105;break g}l=a[208+(l&255)>>0]|0;n=a[208+(d[k>>0]|0)>>0]|0;if(l<<24>>24!=n<<24>>24)break;else{l=p;p=p+-1|0}}sa=l&255;ba=n;v=108}while(0);if((v|0)==105){sa=0;ba=a[208+(d[k>>0]|0)>>0]|0;v=108}if((v|0)==108?(0,(sa|0)!=(ba&255|0)):0){v=193;break f}v=q+8|0;if((Lg(v,va,(Eu(v)|0)&1073741823,1)|0)!=0?(u=+g[va>>3],ua=~~u,u<7.0&((ua|0)>-1&u==+(ua|0))):0){dp(i);a[E>>0]=0;a[A>>0]=0;$o(i);q=i;r=c[q>>2]|0;q=c[q+4>>2]|0;n=Sv(r|0,q|0,1296e5,0)|0;n=Wv(n|0,L()|0,864e5,0)|0;n=Zv(n|0,L()|0,7,0)|0;v=L()|0;k=((ua|0)<0)<<31>>31;o=(v|0)>(k|0)|(v|0)==(k|0)&n>>>0>ua>>>0;l=Sv(n|0,v|0,-7,-1)|0;p=L()|0;v=Tv(ua|0,k|0,(o?l:n)|0,(o?p:v)|0)|0;v=Yv(v|0,L()|0,864e5,0)|0;q=Sv(v|0,L()|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;c[xa>>2]=0;v=192}else v=193;break}case 115:{h:do if(!(k<<24>>24)){k=49927;v=116}else{o=q;k=49927;l=9;p=8;while(1){o=o+1|0;if(l>>>0<=1)break h;k=k+1|0;l=a[o>>0]|0;if(!(l<<24>>24)){v=116;break h}l=a[208+(l&255)>>0]|0;n=a[208+(d[k>>0]|0)>>0]|0;if(l<<24>>24!=n<<24>>24)break;else{l=p;p=p+-1|0}}ta=l&255;ca=n;v=119}while(0);if((v|0)==116){ta=0;ca=a[208+(d[k>>0]|0)>>0]|0;v=119}if((v|0)==119?(v=0,(ta|0)!=(ca&255|0)):0){v=193;break f}l=a[B>>0]|0;do if(a[A>>0]|0){k=q+9|0;if(!(l<<24>>24)){n=i;l=c[n>>2]|0;n=c[n+4>>2]|0;if(n>>>0>108096|(n|0)==108096&l>>>0>275971583){l=i;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));a[j>>0]=1;l=k;break}else{v=Sv(l|0,n|0,432e5,0)|0;v=Wv(v|0,L()|0,864e5,0)|0;L()|0;q=~~((+(v|0)+-1867216.25)/36524.25);q=v+1525+q+((q|0)/-4|0)|0;v=~~((+(q|0)+-122.1)/365.25);q=q-((((v&32767)*36525|0)>>>0)/100|0)|0;r=~~(+(q|0)/30.6001);c[P>>2]=q-~~(+(r|0)*30.6001);r=((r|0)<14?-1:-13)+r|0;c[O>>2]=r;c[N>>2]=((r|0)>2?-4716:-4715)+v;v=129;break}}else l=k}else{if(l<<24>>24){l=q+9|0;break}if(!(a[D>>0]|0)){v=193;break f}c[N>>2]=2e3;c[O>>2]=1;c[P>>2]=1;k=q+9|0;v=129}while(0);if((v|0)==129){a[B>>0]=1;l=k}a[D>>0]=1;c[J>>2]=0;c[K>>2]=0;g[I>>3]=0.0;a[z>>0]=0;a[E>>0]=0;a[A>>0]=0;q=a[l>>0]|0;p=d[208+(q&255)>>0]|0;k=p+-109|0;q=q<<24>>24==0;if(!(q|(k|0)!=0)){n=49937;o=l;do{o=o+1|0;n=n+1|0;v=a[o>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[P>>2]=1;c[xa>>2]=0;v=192;break f}k=p+-121|0;if(!(q|(k|0)!=0)){n=49943;o=l;do{o=o+1|0;n=n+1|0;v=a[o>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[O>>2]=1;c[P>>2]=1;c[xa>>2]=0;v=192;break f}k=p+-100|0;if(!(q|(k|0)!=0)){n=49948;do{l=l+1|0;n=n+1|0;v=a[l>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[xa>>2]=0;v=192}else v=193;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:case 45:case 43:{l=1;i:while(1){k=a[q+l>>0]|0;switch(k<<24>>24){case 58:case 0:break i;default:{}}if(a[880+(k&255)>>0]&1)break;l=l+1|0}k=q+l|0;if(!(Lg(q,va,l,1)|0)){v=149;break e}l=a[k>>0]|0;if(l<<24>>24==58){k=((d[q>>0]|0)+-48|0)>>>0<10?q:q+1|0;l=wa;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));if(!(ap(k,wa)|0)){do if(!(a[Q>>0]|0)){if(a[R>>0]|0){k=c[U>>2]|0;if((k+4713|0)>>>0<=14712){da=c[V>>2]|0;ea=c[W>>2]|0;fa=k;v=156}}else{da=1;ea=1;fa=2e3;v=156}if((v|0)==156?(0,(a[S>>0]|0)==0):0){l=(da|0)<3;k=fa+(l<<31>>31)|0;u=(+(ea+2+((k|0)/-100|0)+((k|0)/400|0)+((((l?da+12|0:da)*306001|0)+306001|0)/1e4|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~u>>>0;l=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;v=wa;c[v>>2]=k;c[v+4>>2]=l;a[Q>>0]=1;if(!(a[X>>0]|0))break;v=G(c[Y>>2]|0,36e5)|0;v=((c[Z>>2]|0)*6e4|0)+v|0;u=+g[_>>3]*1.0e3;k=Sv(~~u>>>0|0,(+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0)|0,k|0,l|0)|0;k=Sv(k|0,L()|0,v|0,((v|0)<0)<<31>>31|0)|0;l=L()|0;v=wa;c[v>>2]=k;c[v+4>>2]=l;if(!(a[$>>0]|0))break;v=(c[aa>>2]|0)*6e4|0;k=Tv(k|0,l|0,v|0,((v|0)<0)<<31>>31|0)|0;l=L()|0;v=wa;c[v>>2]=k;c[v+4>>2]=l;a[R>>0]=0;a[X>>0]=0;a[$>>0]=0;break}l=wa;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));a[T>>0]=1;k=0;l=0}else{l=wa;k=c[l>>2]|0;l=c[l+4>>2]|0}while(0);r=Sv(k|0,l|0,-432e5,-1)|0;r=Zv(r|0,L()|0,864e5,0)|0;v=L()|0;p=(a[q>>0]|0)==45;o=Tv(0,0,r|0,v|0)|0;q=L()|0;r=p?o:r;q=p?q:v;v=wa;c[v>>2]=r;c[v+4>>2]=q;$o(i);a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=i;q=Sv(c[v>>2]|0,c[v+4>>2]|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;c[xa>>2]=0}v=193;break f}if(a[880+(l&255)>>0]&1)do k=k+1|0;while((a[880+(d[k>>0]|0)>>0]&1)!=0);l=(Eu(k)|0)&1073741823;if((l+-3|0)>>>0>7)v=193;else{r=l+-1|0;l=(a[k+r>>0]|32)<<24>>24==115?r:l;$o(i);c[xa>>2]=1;m=+g[va>>3];u=m<0.0?-.5:.5;j:do if((l|0)>0){k:do switch(l|0){case 6:{v=d[k>>0]|0;l=208+v|0;do if((v|32|0)==115){v=d[k+1>>0]|0;l=208+v|0;if((v|32|0)==101){v=d[k+2>>0]|0;l=208+v|0;if((v|32|0)==99){l=d[k+3>>0]|0;if((l|32|0)!=111){ga=208+l|0;ha=111;v=170;break}l=d[k+4>>0]|0;if((l|32|0)!=110){ga=208+l|0;ha=110;v=170;break}l=d[k+5>>0]|0;if((l|32|0)==100)v=171;else{ga=208+l|0;ha=100;v=170}}else{ga=l;ha=99;v=170}}else{ga=l;ha=101;v=170}}else{ga=l;ha=115;v=170}while(0);if((v|0)==170?(v=0,(ha|0)==(d[ga>>0]|0)):0)v=171;if((v|0)==171?(v=0,m>-464269060800.0&m<464269060800.0):0){k=0;break k}r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==109){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==105){l=d[k+2>>0]|0;if((l|32|0)!=110){ia=208+l|0;ja=110;v=178;break}l=d[k+3>>0]|0;if((l|32|0)!=117){ia=208+l|0;ja=117;v=178;break}l=d[k+4>>0]|0;if((l|32|0)!=116){ia=208+l|0;ja=116;v=178;break}k=d[k+5>>0]|0;if((k|32|0)!=101){ia=208+k|0;ja=101;v=178}}else{ia=l;ja=105;v=178}}else{ia=l;ja=109;v=178}while(0);if((v|0)==178?(0,(ja|0)!=(d[ia>>0]|0)):0)break j;if(m>-7737817680.0&m<7737817680.0)k=1;else break j;break}case 4:{v=d[k>>0]|0;l=208+v|0;if((v|32|0)==104){v=d[k+1>>0]|0;l=208+v|0;if((v|32|0)==111){v=d[k+2>>0]|0;l=208+v|0;if((v|32|0)==117){l=d[k+3>>0]|0;if((l|32|0)==114)v=182;else{ka=208+l|0;la=114;v=181}}else{ka=l;la=117;v=181}}else{ka=l;la=111;v=181}}else{ka=l;la=104;v=181}if((v|0)==181?(v=0,(la|0)==(d[ka>>0]|0)):0)v=182;if((v|0)==182?(v=0,m>-128963628.0&m<128963628.0):0){k=2;break k}r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==121){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==101){l=d[k+2>>0]|0;if((l|32|0)!=97){qa=208+l|0;ra=97;v=190;break}k=d[k+3>>0]|0;if((k|32|0)!=114){qa=208+k|0;ra=114;v=190}}else{qa=l;ra=101;v=190}}else{qa=l;ra=121;v=190}while(0);if((v|0)==190?(0,(ra|0)!=(d[qa>>0]|0)):0)break j;if(m>-14713.0&m<14713.0)k=5;else break j;break}case 3:{r=d[k>>0]|0;l=208+r|0;if((r|32|0)==100){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==97){k=d[k+2>>0]|0;if((k|32|0)!=121){ma=208+k|0;na=121;v=184}}else{ma=l;na=97;v=184}}else{ma=l;na=100;v=184}if((v|0)==184?(0,(na|0)!=(d[ma>>0]|0)):0)break j;if(m>-5373485.0&m<5373485.0)k=3;else break j;break}case 5:{r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==109){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==111){r=d[k+2>>0]|0;l=208+r|0;if((r|32|0)==110){l=d[k+3>>0]|0;if((l|32|0)!=116){oa=208+l|0;pa=116;v=187;break}k=d[k+4>>0]|0;if((k|32|0)!=104){oa=208+k|0;pa=104;v=187}}else{oa=l;pa=110;v=187}}else{oa=l;pa=111;v=187}}else{oa=l;pa=109;v=187}while(0);if((v|0)==187?(0,(pa|0)!=(d[oa>>0]|0)):0)break j;if(m>-176546.0&m<176546.0)k=4;else break j;break}default:break j}while(0);switch(a[22816+(k*24|0)>>0]|0){case 1:{dp(i);v=~~m;r=(c[O>>2]|0)+v|0;q=(((r|0)>0?-1:-12)+r|0)/12|0;c[N>>2]=q+(c[N>>2]|0);r=(G(q,-12)|0)+r|0;c[O>>2]=r;a[A>>0]=0;m=m-+(v|0);g[va>>3]=m;break}case 2:{v=~~m;dp(i);c[N>>2]=(c[N>>2]|0)+v;a[A>>0]=0;m=m-+(v|0);g[va>>3]=m;break}default:{}}$o(i);u=u+m*+g[22816+(k*24|0)+16>>3];q=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;r=i;q=Sv(c[r>>2]|0,c[r+4>>2]|0,~~u>>>0|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;c[xa>>2]=0}while(0);a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=193}break}default:v=193}while(0);if((v|0)==192)v=0;else if((v|0)==193?(v=0,c[xa>>2]|0):0){j=1;v=197;break}w=w+1|0;if((w|0)>=(f|0))break d}if((v|0)==149){i=1;Ra=ya;return i|0}else if((v|0)==197){Ra=ya;return j|0}}else j=i+46|0;while(0);$o(i);if(!(a[j>>0]|0)){xa=c[i+4>>2]|0;Ra=ya;return (xa>>>0>108096|(xa|0)==108096&(c[i>>2]|0)>>>0>275971583)&1|0}else{i=1;Ra=ya;return i|0}return 0}function $o(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;j=b+40|0;if(a[j>>0]|0)return;k=b+42|0;if(a[k>>0]|0){h=c[b+8>>2]|0;if((h+4713|0)>>>0<=14712){d=c[b+12>>2]|0;e=c[b+16>>2]|0;f=h;i=4}}else{d=1;e=1;f=2e3;i=4}if((i|0)==4?(a[b+41>>0]|0)==0:0){i=(d|0)<3;h=f+(i<<31>>31)|0;l=(+(e+2+((h|0)/-100|0)+((h|0)/400|0)+((((i?d+12|0:d)*306001|0)+306001|0)/1e4|0)+(((h*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;d=~~l>>>0;e=+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0;h=b;c[h>>2]=d;c[h+4>>2]=e;a[j>>0]=1;h=b+43|0;if(!(a[h>>0]|0))return;f=G(c[b+20>>2]|0,36e5)|0;f=((c[b+24>>2]|0)*6e4|0)+f|0;l=+g[b+32>>3]*1.0e3;d=Sv(~~l>>>0|0,(+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0)|0,d|0,e|0)|0;d=Sv(d|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;f=b;c[f>>2]=d;c[f+4>>2]=e;f=b+44|0;if(!(a[f>>0]|0))return;i=(c[b+28>>2]|0)*6e4|0;i=Tv(d|0,e|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[b>>2]=i;c[b+4>>2]=j;a[k>>0]=0;a[h>>0]=0;a[f>>0]=0;return}d=b;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[b+46>>0]=1;return}function ap(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+48|0;r=t+16|0;h=t+8|0;q=t;p=t+36|0;m=t+32|0;n=t+28|0;o=t+24|0;c[q>>2]=m;c[q+4>>2]=n;if((bp(b,49807,q)|0)!=2){e=1;Ra=t;return e|0}l=b+5|0;if((a[l>>0]|0)==58){c[h>>2]=o;if((bp(b+6|0,49815,h)|0)!=1){e=1;Ra=t;return e|0}h=b+8|0;if((a[h>>0]|0)==46?(i=b+9|0,f=a[i>>0]|0,((f&255)+-48|0)>>>0<10):0){k=0.0;j=1.0;do{k=k*10.0+ +(f<<24>>24)+-48.0;j=j*10.0;i=i+1|0;f=a[i>>0]|0}while(((f&255)+-48|0)>>>0<10);j=k/j}else{j=0.0;i=h}}else{c[o>>2]=0;j=0.0;i=l}a[e+40>>0]=0;a[e+41>>0]=0;a[e+43>>0]=1;c[e+20>>2]=c[m>>2];c[e+24>>2]=c[n>>2];g[e+32>>3]=j+ +(c[o>>2]|0);while(1){f=i+1|0;if(!(a[880+(d[i>>0]|0)>>0]&1))break;else i=f}b=e+28|0;c[b>>2]=0;h=a[i>>0]|0;switch(h<<24>>24){case 45:{h=-1;s=15;break}case 43:{h=1;s=15;break}default:if((h|32)<<24>>24==122){i=0;s=18}else f=0}do if((s|0)==15){c[r>>2]=q;c[r+4>>2]=p;if((bp(f,49819,r)|0)==2){s=G(((c[q>>2]|0)*60|0)+(c[p>>2]|0)|0,h)|0;c[b>>2]=s;f=i+6|0;i=s;s=18;break}e=1;Ra=t;return e|0}while(0);if((s|0)==18){while(1)if(!(a[880+(d[f>>0]|0)>>0]&1))break;else f=f+1|0;a[e+45>>0]=1;h=a[f>>0]|0;f=i}if(h<<24>>24){e=1;Ra=t;return e|0}a[e+44>>0]=(f|0)!=0&1;e=0;Ra=t;return e|0}function bp(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;n=o;c[n>>2]=g;g=e;e=0;a:while(1){h=(d[f>>0]|0)+208&255;m=d[f+1>>0]|0;k=b[31130+((a[f+2>>0]|0)+-97<<1)>>1]|0;l=a[f+3>>0]|0;if(!(h<<24>>24))h=0;else{j=0;i=h;while(1){i=i+-1<<24>>24;h=a[g>>0]|0;if(((h&255)+-48|0)>>>0>=10){g=11;break a}h=(j*10|0)+-48+(h<<24>>24)|0;g=g+1|0;if(!(i<<24>>24))break;else j=h}}if((h|0)<((m<<24)+-805306368>>24|0)|(h|0)>(k&65535|0)){g=11;break}if(!(l<<24>>24)){g=8;break}if(l<<24>>24!=(a[g>>0]|0)){g=11;break}l=(c[n>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[n>>2]=l+4;c[m>>2]=h;g=g+1|0;f=f+4|0;e=e+1|0}if((g|0)==8){l=(c[n>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[n>>2]=l+4;c[m>>2]=h;n=e+1|0;Ra=o;return n|0}else if((g|0)==11){Ra=o;return e|0}return 0}function cp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;o=Ra;Ra=Ra+64|0;m=o;n=o+48|0;h=m;f=h+48|0;do{c[h>>2]=c[b>>2];h=h+4|0;b=b+4|0}while((h|0)<(f|0));dp(m);b=m+8|0;f=c[b>>2]|0;if((f+-1971|0)>>>0>66){c[b>>2]=2e3;c[m+12>>2]=1;c[m+16>>2]=1;c[m+20>>2]=0;c[m+24>>2]=0;g[m+32>>3]=0.0;f=2e3;j=0;k=0}else{j=m+32|0;p=+(~~(+g[j>>3]+.5)|0);g[j>>3]=p;p=p*1.0e3;j=~~p>>>0;k=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0}c[m+28>>2]=0;i=m+40|0;a[i>>0]=0;l=m+42|0;h=(a[l>>0]|0)==0;b=h?1:c[m+12>>2]|0;if(!(a[m+41>>0]|0)){q=(b|0)<3;f=(h?2e3:f)+(q<<31>>31)|0;p=(+((h?3:(c[m+16>>2]|0)+2|0)+((f|0)/-100|0)+((f|0)/400|0)+((((q?b+12|0:b)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;f=~~p>>>0;b=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0;h=m;c[h>>2]=f;c[h+4>>2]=b;a[i>>0]=1;i=m+43|0;if(a[i>>0]|0){h=G(c[m+20>>2]|0,36e5)|0;h=((c[m+24>>2]|0)*6e4|0)+h|0;f=Sv(j|0,k|0,f|0,b|0)|0;f=Sv(f|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;h=m;c[h>>2]=f;c[h+4>>2]=b;h=m+44|0;if(!(a[h>>0]|0))j=m;else{j=m;c[j>>2]=f;c[j+4>>2]=b;a[l>>0]=0;a[i>>0]=0;a[h>>0]=0;j=m}}else j=m}else{h=m;f=h+48|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(f|0));a[m+46>>0]=1;j=m;f=0;b=0}i=Wv(f|0,b|0,1e3,0)|0;L()|0;c[n>>2]=i+-413362496;i=Ha(n|0)|0;if((i|0)==0|(c[7390]|0)!=0){c[d+20>>2]=1;yc(c[d>>2]|0,49952,-1,1,-1)|0;c[e>>2]=1;e=0;q=0;K(e|0);Ra=o;return q|0}b=c[i+16>>2]|0;f=c[i+20>>2]|0;h=b+1|0;if((f+6613|0)>>>0>14712){b=0;f=0}else{d=c[i>>2]|0;d=Yv(d|0,((d|0)<0)<<31>>31|0,1e3,0)|0;q=L()|0;n=G(c[i+8>>2]|0,36e5)|0;m=(h|0)<3;f=f+1900+(m<<31>>31)|0;p=(+(((f|0)/-100|0)+((c[i+12>>2]|0)+2)+((f|0)/400|0)+((((m?b+13|0:h)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;b=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0;f=((c[i+4>>2]|0)*6e4|0)+n|0;f=Sv(d|0,q|0,f|0,((f|0)<0)<<31>>31|0)|0;b=Sv(f|0,L()|0,~~p>>>0|0,b|0)|0;f=L()|0}c[e>>2]=0;q=j;q=Tv(b|0,f|0,c[q>>2]|0,c[q+4>>2]|0)|0;e=L()|0;K(e|0);Ra=o;return q|0}function dp(b){b=b|0;var d=0,e=0,f=0,h=0,i=0.0;d=b+42|0;if(!(a[d>>0]|0)){do if(a[b+40>>0]|0){f=b;e=c[f>>2]|0;f=c[f+4>>2]|0;if(f>>>0>108096|(f|0)==108096&e>>>0>275971583){d=b;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));d=b+46|0;break}else{f=Sv(e|0,f|0,432e5,0)|0;f=Wv(f|0,L()|0,864e5,0)|0;L()|0;h=~~((+(f|0)+-1867216.25)/36524.25);h=f+1525+h+((h|0)/-4|0)|0;f=~~((+(h|0)+-122.1)/365.25);h=h-((((f&32767)*36525|0)>>>0)/100|0)|0;e=~~(+(h|0)/30.6001);c[b+16>>2]=h-~~(+(e|0)*30.6001);e=((e|0)<14?-1:-13)+e|0;c[b+12>>2]=e;c[b+8>>2]=((e|0)>2?-4716:-4715)+f;break}}else{c[b+8>>2]=2e3;c[b+12>>2]=1;c[b+16>>2]=1}while(0);a[d>>0]=1}d=b+43|0;if(a[d>>0]|0)return;$o(b);e=b;e=Sv(c[e>>2]|0,c[e+4>>2]|0,432e5,0)|0;e=Zv(e|0,L()|0,864e5,0)|0;L()|0;i=+(e|0)/1.0e3;e=~~i;h=(e|0)/3600|0;c[b+20>>2]=h;h=(G(h,-3600)|0)+e|0;f=(h|0)/60|0;c[b+24>>2]=f;i=i-+(e|0)+ +((G(f,-60)|0)+h|0);g[b+32>>3]=i;a[b+41>>0]=0;a[d>>0]=1;return}function ep(a){a=a|0;var b=0,d=0,e=0;e=Ra;Ra=Ra+16|0;d=e;b=lu(a+8|0)|0;if(!b){c[d>>2]=a;Db(7,50076,d);d=0;Ra=e;return d|0}else{d=b;c[d>>2]=a;c[d+4>>2]=((a|0)<0)<<31>>31;d=b+8|0;Ra=e;return d|0}return 0}function fp(a){a=a|0;mu(a+-8|0);return}function gp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=Ra;Ra=Ra+16|0;e=f;a=a+-8|0;d=ou(a,b+8|0)|0;if(!d){c[e>>2]=c[a>>2];c[e+4>>2]=b;Db(7,50114,e);e=0;Ra=f;return e|0}else{e=d;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;e=d+8|0;Ra=f;return e|0}return 0}function hp(a){a=a|0;return c[a+-8>>2]|0}function ip(a){a=a|0;return a+7&-8|0}function jp(a){a=a|0;return 0}function kp(a){a=a|0;return}function lp(a){a=a|0;var b=0;a=59188;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));a=(c[7374]|0)==0;c[14811]=a&1;b=c[7376]|0;c[14812]=a&(b|0)!=0?b:0;c[14800]=10;c[14810]=1;return 0}function mp(a){a=a|0;var b=0;a=59188;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function np(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=((c[14811]|0)*52|0)+68|0;h=Sv(i|0,((i|0)<0)<<31>>31|0,-1,-1)|0;g=L()|0;if(g>>>0>0|(g|0)==0&h>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f){e=0;return e|0}}else{f=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){j=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){j=0;return j|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}gw(f|0,0,i|0)|0;if(!(c[14811]|0))g=59188;else{c[f+80>>2]=10;g=f+68|0}h=g+20|0;i=g+34|0;if(!(b[i>>1]|0)){b[i>>1]=1;c[g+44>>2]=h;c[g+48>>2]=h}c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=d;c[f+16>>2]=a+32+d;j=(e|0)!=0;c[f+20>>2]=j&1;wp(f);if(j){c[f+24>>2]=10;e=g+8|0;j=c[e>>2]|0;c[e>>2]=j+10;c[g+12>>2]=-10-j+10+(c[g+4>>2]|0);c[f+4>>2]=g+16}else c[f+4>>2]=f+40;if(c[f+52>>2]|0){j=f;return j|0}up(f);j=0;return j|0}function op(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!(c[a+20>>2]|0))return;e=c[a>>2]|0;d=a+28|0;g=e+4|0;f=(c[g>>2]|0)+(b-(c[d>>2]|0))|0;c[g>>2]=f;c[e+12>>2]=f+10-(c[e+8>>2]|0);c[d>>2]=b;c[a+32>>2]=((b*9|0)>>>0)/10|0;xp(a);return}function pp(a){a=a|0;return c[a+48>>2]|0}function qp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[(c[a+56>>2]|0)+(((b>>>0)%((c[a+52>>2]|0)>>>0)|0)<<2)>>2]|0;a:do if(e|0){f=e;while(1){if((c[f+8>>2]|0)==(b|0))break;e=c[f+16>>2]|0;if(!e)break a;else f=e}e=f+24|0;a=c[e>>2]|0;if(!a){d=f;return d|0}d=c[f+28>>2]|0;c[d+24>>2]=a;c[(c[e>>2]|0)+28>>2]=d;c[e>>2]=0;d=(c[f+20>>2]|0)+44|0;c[d>>2]=(c[d>>2]|0)+-1;d=f;return d|0}while(0);if(!d){d=0;return d|0}d=Ap(a,b,d)|0;return d|0}function rp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;if((d|0)==0?(c[e+16>>2]|0)>>>0<=(c[e+4>>2]|0)>>>0:0){d=e+44|0;c[b+28>>2]=e+20;e=c[d>>2]|0;c[b+24>>2]=e;c[e+28>>2]=b;c[d>>2]=b;b=a+44|0;c[b>>2]=(c[b>>2]|0)+1;return}d=c[b+20>>2]|0;a=(c[d+56>>2]|0)+((((c[b+8>>2]|0)>>>0)%((c[d+52>>2]|0)>>>0)|0)<<2)|0;while(1){f=c[a>>2]|0;e=f+16|0;if((f|0)==(b|0))break;else a=e}c[a>>2]=c[e>>2];f=d+48|0;c[f>>2]=(c[f>>2]|0)+-1;zp(b);return}function sp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[a+52>>2]|0;h=a+56|0;d=(c[h>>2]|0)+(((d>>>0)%(g>>>0)|0)<<2)|0;while(1){f=c[d>>2]|0;if((f|0)==(b|0))break;else d=f+16|0}f=b+16|0;c[d>>2]=c[f>>2];c[b+8>>2]=e;d=(c[h>>2]|0)+(((e>>>0)%(g>>>0)|0)<<2)|0;c[f>>2]=c[d>>2];c[d>>2]=b;d=a+36|0;if((c[d>>2]|0)>>>0>=e>>>0)return;c[d>>2]=e;return}function tp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+36|0;d=c[k>>2]|0;if(d>>>0<b>>>0)return;l=a+52|0;e=c[l>>2]|0;if((d-b|0)>>>0<e>>>0){f=(b>>>0)%(e>>>0)|0;i=(d>>>0)%(e>>>0)|0}else{i=e>>>1;f=i;i=i+-1|0}j=a+56|0;h=a+48|0;while(1){d=(c[j>>2]|0)+(f<<2)|0;e=c[d>>2]|0;if(e|0)do{do if((c[e+8>>2]|0)>>>0>=b>>>0){c[h>>2]=(c[h>>2]|0)+-1;c[d>>2]=c[e+16>>2];a=e+24|0;g=c[a>>2]|0;if(!g){zp(e);break}else{m=c[e+28>>2]|0;c[m+24>>2]=g;c[(c[a>>2]|0)+28>>2]=m;c[a>>2]=0;g=(c[e+20>>2]|0)+44|0;c[g>>2]=(c[g>>2]|0)+-1;zp(e);break}}else d=e+16|0;while(0);e=c[d>>2]|0}while((e|0)!=0);if((f|0)==(i|0))break;f=((f+1|0)>>>0)%((c[l>>2]|0)>>>0)|0}c[k>>2]=b+-1;return}function up(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[a>>2]|0;k=a+48|0;a:do if(c[k>>2]|0){b=c[a+36>>2]|0;l=a+52|0;d=c[l>>2]|0;if(b>>>0<d>>>0){e=0;h=(b>>>0)%(d>>>0)|0}else{h=d>>>1;e=h;h=h+-1|0}i=a+56|0;while(1){g=(c[i>>2]|0)+(e<<2)|0;b=c[g>>2]|0;if(b|0)do{c[k>>2]=(c[k>>2]|0)+-1;c[g>>2]=c[b+16>>2];d=b+24|0;f=c[d>>2]|0;if(!f)zp(b);else{m=c[b+28>>2]|0;c[m+24>>2]=f;c[(c[d>>2]|0)+28>>2]=m;c[d>>2]=0;f=(c[b+20>>2]|0)+44|0;c[f>>2]=(c[f>>2]|0)+-1;zp(b)}b=c[g>>2]|0}while((b|0)!=0);if((e|0)==(h|0))break a;e=((e+1|0)>>>0)%((c[l>>2]|0)>>>0)|0}}while(0);l=j+4|0;m=(c[l>>2]|0)-(c[a+28>>2]|0)|0;c[l>>2]=m;l=j+8|0;b=(c[l>>2]|0)-(c[a+24>>2]|0)|0;c[l>>2]=b;c[j+12>>2]=m+10-b;xp(a);b=c[a+64>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+56>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{m=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function vp(a){a=a|0;var b=0,d=0;if(!(c[a+20>>2]|0))return;b=(c[a>>2]|0)+4|0;d=c[b>>2]|0;c[b>>2]=0;xp(a);c[b>>2]=d;return}function wp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=a+52|0;h=c[e>>2]<<1;h=h>>>0>256?h:256;f=Wb(h<<2,0)|0;if(!f)return;g=c[e>>2]|0;d=a+56|0;if(g|0){b=0;do{a=c[(c[d>>2]|0)+(b<<2)>>2]|0;if(a|0)do{k=a+16|0;j=a;a=c[k>>2]|0;i=f+((((c[j+8>>2]|0)>>>0)%(h>>>0)|0)<<2)|0;c[k>>2]=c[i>>2];c[i>>2]=j}while((a|0)!=0);b=b+1|0}while(b>>>0<g>>>0)}qb(c[d>>2]|0);c[d>>2]=f;c[e>>2]=h;return}function xp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=c[a>>2]|0;d=f+48|0;e=f+16|0;f=f+4|0;a:do if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0)do{g=c[d>>2]|0;if(b[g+14>>1]|0)break a;h=g+24|0;i=c[g+28>>2]|0;c[i+24>>2]=c[h>>2];c[(c[h>>2]|0)+28>>2]=i;c[h>>2]=0;h=(c[g+20>>2]|0)+44|0;c[h>>2]=(c[h>>2]|0)+-1;yp(g,1)}while((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0);while(0);if(c[a+48>>2]|0)return;d=a+64|0;e=c[d>>2]|0;if(!e)return;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}c[a+60>>2]=0;c[d>>2]=0;return}function yp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=c[a+20>>2]|0;d=(c[f+56>>2]|0)+((((c[a+8>>2]|0)>>>0)%((c[f+52>>2]|0)>>>0)|0)<<2)|0;while(1){g=c[d>>2]|0;e=g+16|0;if((g|0)==(a|0))break;else d=e}c[d>>2]=c[e>>2];g=f+48|0;c[g>>2]=(c[g>>2]|0)+-1;if(!b)return;zp(a);return}function zp(a){a=a|0;var d=0,e=0;e=c[a+20>>2]|0;a:do if(!(b[a+12>>1]|0)){d=c[a>>2]|0;if(d|0){a=d;do if((c[14816]|0)>>>0<=a>>>0)if((c[14817]|0)>>>0>a>>>0){c[14979]=(c[14979]|0)+-1;c[d>>2]=c[14819];c[14819]=d;d=(c[14820]|0)+1|0;c[14820]=d;c[14821]=(d|0)<(c[14815]|0)&1;break a}else{a=Wa[c[29352>>2]&127](d)|0;break}else a=Wa[c[29352>>2]&127](d)|0;while(0);c[14980]=(c[14980]|0)-a;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{a=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}}else{d=e+60|0;c[a+16>>2]=c[d>>2];c[d>>2]=a}while(0);e=c[e+4>>2]|0;c[e>>2]=(c[e>>2]|0)+-1;return}function Ap(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;m=c[a>>2]|0;q=a+48|0;j=c[q>>2]|0;g=c[a+44>>2]|0;i=j-g|0;if((e|0)==1){if(i>>>0>=(c[m+12>>2]|0)>>>0){d=0;return d|0}if(i>>>0>=(c[a+32>>2]|0)>>>0){d=0;return d|0}if((c[14814]|0)!=0?((c[a+12>>2]|0)+(c[a+8>>2]|0)|0)<=(c[14813]|0):0)e=59284;else e=59072;if(g>>>0<i>>>0&(c[e>>2]|0)!=0){d=0;return d|0}}p=a+52|0;if(j>>>0>=(c[p>>2]|0)>>>0)wp(a);k=c[a+20>>2]|0;do if((k|0)!=0?(h=c[m+48>>2]|0,(b[h+14>>1]|0)==0):0){if(((c[q>>2]|0)+1|0)>>>0<(c[a+28>>2]|0)>>>0){if((c[14814]|0)!=0?((c[a+12>>2]|0)+(c[a+8>>2]|0)|0)<=(c[14813]|0):0)e=59284;else e=59072;if(!(c[e>>2]|0)){r=22;break}}g=h+20|0;i=c[g>>2]|0;l=h+8|0;e=(c[i+56>>2]|0)+((((c[l>>2]|0)>>>0)%((c[i+52>>2]|0)>>>0)|0)<<2)|0;while(1){s=c[e>>2]|0;j=s+16|0;if((s|0)==(h|0))break;else e=j}c[e>>2]=c[j>>2];e=i+48|0;c[e>>2]=(c[e>>2]|0)+-1;e=h+24|0;i=c[h+28>>2]|0;c[i+24>>2]=c[e>>2];c[(c[e>>2]|0)+28>>2]=i;c[e>>2]=0;i=c[g>>2]|0;s=i+44|0;c[s>>2]=(c[s>>2]|0)+-1;if((c[i+16>>2]|0)==(c[a+16>>2]|0)){f=m+16|0;c[f>>2]=k-(c[i+20>>2]|0)+(c[f>>2]|0);f=l;break}else{zp(h);r=22;break}}else r=22;while(0);if((r|0)==22){m=a+60|0;e=c[m>>2]|0;do if(!e){if(((c[q>>2]|0)==0?(n=c[14812]|0,n|0):0)?(o=a+28|0,(c[o>>2]|0)>>>0>=3):0){if((n|0)>0){j=a+16|0;e=c[j>>2]|0;g=((e|0)<0)<<31>>31;h=Yv(e|0,g|0,n|0,((n|0)<0)<<31>>31|0)|0;i=L()|0}else{h=Yv(n|0,((n|0)<0)<<31>>31|0,-1024,-1)|0;i=L()|0;j=a+16|0;g=c[j>>2]|0;e=g;g=((g|0)<0)<<31>>31}e=Yv(e|0,g|0,c[o>>2]|0,0)|0;s=L()|0;o=(i|0)>(s|0)|(i|0)==(s|0)&h>>>0>e>>>0;e=o?e:h;s=Sv(e|0,(o?s:i)|0,-1,-1)|0;o=L()|0;do if(!(o>>>0>0|(o|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](e)|0;break}h=Wa[c[29356>>2]&127](e)|0;if((c[14985]|0)>>>0<e>>>0)c[14985]=e;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){s=c[14978]|0;o=Tv(e|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=s>>>0)&1}g=Wa[c[29340>>2]&127](h)|0;if(g){e=Wa[c[29352>>2]&127](g)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}else g=0}else g=0;while(0);c[a+64>>2]=g;if(!g)e=c[m>>2]|0;else{e=Wa[c[29352>>2]&127](g)|0;i=c[j>>2]|0;e=(e|0)/(i|0)|0;j=c[a+8>>2]|0;k=G(e+-1|0,i)|0;h=g;l=c[m>>2]|0;while(1){s=l;l=h+j|0;c[l>>2]=h;c[l+4>>2]=l+32;b[l+12>>1]=1;b[l+14>>1]=0;c[l+16>>2]=s;c[l+28>>2]=0;e=e+-1|0;if(!e)break;else h=h+i|0}e=g+(k+j)|0;c[m>>2]=e}if(e|0){f=e;r=47;break}}h=c[a+16>>2]|0;if((c[14813]|0)>=(h|0)?(f=c[14819]|0,(f|0)!=0):0){c[14819]=c[f>>2];s=c[14820]|0;c[14820]=s+-1;c[14821]=(s|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<h>>>0)c[14986]=h;e=(c[14979]|0)+1|0;c[14979]=e;if(e>>>0>(c[14983]|0)>>>0)c[14983]=e}else r=54;do if((r|0)==54){s=Sv(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;o=L()|0;if(!(o>>>0>0|(o|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;if(!f){f=0;break}}else{f=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){s=c[14978]|0;o=Tv(e|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=s>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){f=0;break}e=Wa[c[29352>>2]&127](f)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}e=Wa[c[29352>>2]&127](f)|0;if((c[14986]|0)>>>0<h>>>0)c[14986]=h;e=(c[14980]|0)+e|0;c[14980]=e;if(e>>>0>(c[14984]|0)>>>0)c[14984]=e}else f=0}while(0);e=f+(c[a+8>>2]|0)|0;if(!f){s=0;return s|0}else{c[e>>2]=f;c[e+4>>2]=e+32;b[e+12>>1]=0;b[e+14>>1]=0;f=e;break}}else{f=e;r=47}while(0);if((r|0)==47){s=f+16|0;c[m>>2]=c[s>>2];c[s>>2]=0}h=c[a+4>>2]|0;c[h>>2]=(c[h>>2]|0)+1;h=f;g=f+20|0;e=f+24|0;f=f+8|0}s=(d>>>0)%((c[p>>2]|0)>>>0)|0;c[q>>2]=(c[q>>2]|0)+1;c[f>>2]=d;f=a+56|0;c[h+16>>2]=c[(c[f>>2]|0)+(s<<2)>>2];c[g>>2]=a;c[e>>2]=0;c[c[h+4>>2]>>2]=0;c[(c[f>>2]|0)+(s<<2)>>2]=h;f=a+36|0;if((c[f>>2]|0)>>>0>=d>>>0){s=h;return s|0}c[f>>2]=d;s=h;return s|0}function Bp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;jb(a);g=a+20|0;if((c[g>>2]|0)>0){h=a+16|0;f=0;do{b=c[(c[h>>2]|0)+(f<<4)+12>>2]|0;if(b|0?(e=c[b+16>>2]|0,e|0):0){b=e;do{d=c[b+8>>2]|0;if(c[d+56>>2]|0)Cp(a,d);b=c[b>>2]|0}while((b|0)!=0)}f=f+1|0}while((f|0)<(c[g>>2]|0))}b=c[a+344>>2]|0;if(!b){Ti(a);return}do{d=c[(c[b+8>>2]|0)+16>>2]|0;if(d|0)Cp(a,d);b=c[b>>2]|0}while((b|0)!=0);Ti(a);return}function Cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;b=b+64|0;d=c[b>>2]|0;if(!d)return;while(1){e=d+24|0;if((c[d>>2]|0)==(a|0))break;d=c[e>>2]|0;if(!d){f=6;break}else b=e}if((f|0)==6)return;c[b>>2]=c[e>>2];ng(d);return}function Dp(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;b=(c|0)<(f|0)?c:f;a:do if(e){if(!g){k=1;return k|0}if((b|0)>0){i=g;h=b;while(1){b=a[e>>0]|0;if(!(b<<24>>24)){k=7;break}g=a[208+(b&255)>>0]|0;b=a[208+(d[i>>0]|0)>>0]|0;if(g<<24>>24!=b<<24>>24){k=9;break}if((h|0)>1){e=e+1|0;i=i+1|0;h=h+-1|0}else break a}if((k|0)==7){e=0;b=a[208+(d[i>>0]|0)>>0]|0}else if((k|0)==9)e=g&255;j=e-(b&255)|0;k=12}}else{j=((g|0)!=0)<<31>>31;k=12}while(0);if((k|0)==12?j|0:0){k=j;return k|0}k=c-f|0;return k|0}function Ep(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=Xa[(a[b>>0]<<24>>24==1?154:155)&255](d,e)|0;r=b+12|0;m=(c[r>>2]|0)+-1&q;s=b+16|0;i=c[s>>2]|0;a:do if(i|0?(h=c[i+(m<<3)>>2]|0,j=(a[b>>0]|0)==1?79:80,g=c[i+(m<<3)+4>>2]|0,(h|0)!=0&(g|0)!=0):0){l=g;while(1){h=h+-1|0;if(!(Za[j&127](c[l+12>>2]|0,c[l+16>>2]|0,d,e)|0))break;g=c[l>>2]|0;if(!((h|0)!=0&(g|0)!=0))break a;else l=g}g=l+8|0;k=c[g>>2]|0;if(f|0){c[g>>2]=f;b=k;return b|0}h=c[l+4>>2]|0;g=c[l>>2]|0;if(!h){c[b+8>>2]=g;i=g;j=g}else{c[h>>2]=g;j=c[l>>2]|0;i=j}if(i|0)c[i+4>>2]=h;g=c[s>>2]|0;h=g+(m<<3)+4|0;if((c[h>>2]|0)==(l|0))c[h>>2]=j;q=g+(m<<3)|0;f=c[q>>2]|0;c[q>>2]=f+-1;if((f|0)<2)c[h>>2]=0;j=b+1|0;do if(a[j>>0]|0?(n=c[l+12>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{f=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}i=b+4|0;f=c[i>>2]|0;c[i>>2]=f+-1;if((f|0)>=2){b=k;return b|0}h=b+8|0;g=c[h>>2]|0;c[h>>2]=0;h=c[s>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[s>>2]=0;c[r>>2]=0;if(g|0)do{h=g;g=c[g>>2]|0;do if(a[j>>0]|0?(o=c[h+12>>2]|0,o|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{b=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);c[i>>2]=0;b=k;return b|0}while(0);if(!f){b=0;return b|0}g=c[r>>2]|0;do if(!g){if(!(mb()|0)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](64)|0;if(!g)break}else{g=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){p=c[14978]|0;o=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=p>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h)break;g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;g=h}else g=h}i=g;j=i+64|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));h=c[s>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[s>>2]=g;c[r>>2]=8;n=(a[b>>0]|0)==1?154:155;m=b+8|0;h=c[m>>2]|0;c[m>>2]=0;if(!h){g=8;k=69}else{do{k=(Xa[n&255](c[h+12>>2]|0,c[h+16>>2]|0)|0)&7;j=h;h=c[h>>2]|0;l=g+(k<<3)+4|0;i=c[l>>2]|0;if(!i){i=c[m>>2]|0;c[j>>2]=i;if(i|0)c[i+4>>2]=j;c[j+4>>2]=0;i=m}else{c[j>>2]=i;i=i+4|0;c[j+4>>2]=c[i>>2];p=c[i>>2]|0;c[((p|0)==0?m:p)>>2]=j}c[i>>2]=j;p=g+(k<<3)|0;c[p>>2]=(c[p>>2]|0)+1;c[l>>2]=j}while((h|0)!=0);g=c[r>>2]|0;k=69}}}else k=69;while(0);do if((k|0)==69){p=b+4|0;if((c[p>>2]|0)>=(g|0)){h=g<<1;g=g<<4;o=pb(g,0)|0;if(!o)break;gw(o|0,0,g|0)|0;g=c[s>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{n=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[s>>2]=o;c[r>>2]=h;n=(a[b>>0]|0)==1?154:155;m=b+8|0;g=c[m>>2]|0;c[m>>2]=0;if(g|0){l=h+-1|0;do{j=(Xa[n&255](c[g+12>>2]|0,c[g+16>>2]|0)|0)&l;i=g;g=c[g>>2]|0;k=o+(j<<3)+4|0;h=c[k>>2]|0;if(!h){h=c[m>>2]|0;c[i>>2]=h;if(h|0)c[h+4>>2]=i;c[i+4>>2]=0;h=m}else{c[i>>2]=h;h=h+4|0;c[i+4>>2]=c[h>>2];t=c[h>>2]|0;c[((t|0)==0?m:t)>>2]=i}c[h>>2]=i;t=o+(j<<3)|0;c[t>>2]=(c[t>>2]|0)+1;c[k>>2]=i}while((g|0)!=0)}}if(mb()|0){t=f;return t|0}do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](20)|0;if(!g){t=f;return t|0}else{i=g;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));l=g;break}}else{g=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){t=c[14978]|0;o=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=t>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){t=f;return t|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g;i=h;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));l=h}while(0);do if((d|0)!=0&(a[b+1>>0]|0)!=0){g=pb(e,((e|0)<0)<<31>>31)|0;if(g|0){gw(g|0,0,e|0)|0;c[l+12>>2]=g;ew(g|0,d|0,e|0)|0;break}c[l+12>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);t=f;return t|0}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);t=f;return t|0}}else c[l+12>>2]=d;while(0);c[l+16>>2]=e;c[p>>2]=(c[p>>2]|0)+1;k=(c[r>>2]|0)+-1&q;i=c[s>>2]|0;j=i+(k<<3)+4|0;g=c[j>>2]|0;if(!g){g=b+8|0;h=c[g>>2]|0;c[l>>2]=h;if(h|0)c[h+4>>2]=l;c[l+4>>2]=0}else{c[l>>2]=g;g=g+4|0;c[l+4>>2]=c[g>>2];t=c[g>>2]|0;c[((t|0)==0?b+8|0:t)>>2]=l}c[g>>2]=l;t=i+(k<<3)|0;c[t>>2]=(c[t>>2]|0)+1;c[j>>2]=l;c[l+8>>2]=f;t=0;return t|0}while(0);c[b+4>>2]=0;t=f;return t|0}function Fp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;e=b+16|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[b+12>>2]=0;if(d|0){f=b+1|0;do{e=d;d=c[d>>2]|0;do if(a[f>>0]|0?(g=c[e+12>>2]|0,g|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{h=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0)}c[b+4>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{h=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function Gp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(mb()|0){d=7;return d|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](16)|0;if(!f){d=7;return d|0}}else{g=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){i=c[14978]|0;h=Tv(e|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}f=Wa[c[29340>>2]&127](g)|0;if(!f){d=7;return d|0}e=Wa[c[29352>>2]&127](f)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e};c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;i=f+4|0;c[i>>2]=1;do if((a|0)>0){h=0;a:while(1){e=c[b+(h<<2)>>2]|0;g=Eu(e)|0;do if((g|0)==19){if(!(Lu(51058,e,19)|0)){c[i>>2]=1;e=0;break}if(!(Lu(51078,e,19)|0)){c[i>>2]=0;e=0;break}if(!(Lu(51098,e,19)|0)){c[i>>2]=2;e=0}else j=23}else if((g|0)>10)j=23;else{e=1;break a}while(0);do if((j|0)==23){j=0;if(!(Lu(51118,e,11)|0)){e=Lp(f,1,e+11|0,g+-11|0)|0;break}if(Lu(51130,e,11)|0){e=1;break a}e=Lp(f,0,e+11|0,g+-11|0)|0}while(0);h=h+1|0;g=(e|0)==0;if(!((h|0)<(a|0)&g)){j=28;break}}if((j|0)==28)if(g){e=0;break}if(f){g=c[f+12>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);f=0;break}else{j=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);f=0;break}}else f=0}else e=0;while(0);c[d>>2]=f;d=e;return d|0}function Hp(a){a=a|0;var b=0,d=0;if(!a)return 0;b=c[a+12>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Ip(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f};c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=0;c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;c[e>>2]=a;h=0;return h|0}function Jp(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Kp(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;u=c[b>>2]|0;D=b+4|0;z=c[D>>2]|0;E=b+12|0;A=c[E>>2]|0;k=z+A|0;C=c[b+8>>2]|0;z=z+C|0;if((A|0)>=(C|0)){E=101;return E|0}A=u+8|0;x=c[A>>2]|0;C=u+12|0;s=x+-1|0;a:do if((x|0)>0){t=c[C>>2]|0;while(1){m=k+1|0;n=a[k>>0]|0;l=n&255;if((n&255)>191){l=d[2736+(l+-192)>>0]|0;b:do if((m|0)==(z|0))m=z;else while(1){n=a[m>>0]|0;if((n&-64)<<24>>24!=-128)break b;m=m+1|0;l=l<<6|n&63;if((m|0)==(z|0)){m=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=15;else n=1;else{l=65533;y=15}}else if(n<<24>>24>-1)n=(c[24720+(l>>>5<<2)>>2]&1<<(l&31)|0)==0;else y=15;if((y|0)==15){y=0;q=l<<10|1023;n=0;o=405;p=0;do{x=(o+n|0)/2|0;w=q>>>0<(c[23088+(x<<2)>>2]|0)>>>0;p=w?p:x;o=w?x+-1|0:o;n=w?n:x+1|0}while((o|0)>=(n|0));n=c[23088+(p<<2)>>2]|0;n=((n>>>10)+(n&1023)|0)>>>0<=l>>>0}r=n&1;n=s;o=0;while(1){p=(o+n|0)/2|0;x=c[t+(p<<2)>>2]|0;q=(x|0)<(l|0);if((x|0)==(l|0)){n=1;break}n=q?n:p+-1|0;o=q?p+1|0:o;if((n|0)<(o|0)){n=0;break}}if((n|0)!=(r|0)){x=k;break a}if(m>>>0<z>>>0)k=m;else{k=101;break}}return k|0}else{while(1){n=k+1|0;m=a[k>>0]|0;l=m&255;if((m&255)>191){l=d[2736+(l+-192)>>0]|0;c:do if((n|0)==(z|0))m=z;else while(1){m=a[n>>0]|0;if((m&-64)<<24>>24!=-128){m=n;break c}n=n+1|0;l=l<<6|m&63;if((n|0)==(z|0)){m=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=32;else{x=k;break a}else{l=65533;y=32}}else if(m<<24>>24>-1)if(!(c[24720+(l>>>5<<2)>>2]&1<<(l&31))){x=k;m=n;break a}else k=n;else{m=n;y=32}if((y|0)==32){y=0;q=l<<10|1023;n=0;o=405;p=0;do{x=(o+n|0)/2|0;w=q>>>0<(c[23088+(x<<2)>>2]|0)>>>0;p=w?p:x;o=w?x+-1|0:o;n=w?n:x+1|0}while((o|0)>=(n|0));x=c[23088+(p<<2)>>2]|0;if(((x>>>10)+(x&1023)|0)>>>0>l>>>0)k=m;else{x=k;break a}}if(k>>>0>=z>>>0){k=101;break}}return k|0}while(0);w=b+20|0;k=c[w>>2]|0;v=b+24|0;u=u+4|0;p=k;while(1){o=p;n=c[v>>2]|0;if((o-k|0)<(n+-4|0))t=p;else{if(mb()|0){k=7;y=86;break}y=n+64|0;k=sb(k,y,((y|0)<0)<<31>>31)|0;if(!k){k=7;y=86;break}t=k+(o-(c[w>>2]|0))|0;c[w>>2]=k;c[v>>2]=(c[v>>2]|0)+64}q=c[u>>2]|0;do if((l|0)>=128){if((l|0)>=65536)if((l+-66560|0)>>>0<40){l=l+40|0;y=58;break}else{y=61;break}k=162;o=-1;n=0;do{y=(n+k|0)/2|0;s=(l|0)<(e[24736+(y<<2)>>1]|0);n=s?n:y+1|0;o=s?o:y;k=s?y+-1|0:k}while((k|0)>=(n|0));k=e[24736+(o<<2)>>1]|0;if(((d[24736+(o<<2)+3>>0]|0)+k|0)>(l|0)?(B=d[24736+(o<<2)+2>>0]|0,((l^k)&1&B|0)==0):0)l=l+(e[25392+(B>>>1<<1)>>1]|0)&65535;if(q){p=l<<3|7;k=0;n=125;o=0;do{y=(n+k|0)/2|0;s=p>>>0<(e[25552+(y<<1)>>1]|0)>>>0;o=s?o:y;n=s?y+-1|0:n;k=s?k:y+1|0}while((n|0)>=(k|0));if((q|0)!=2?(a[25808+o>>0]|0)<0:0){y=57;break}y=e[25552+(o<<1)>>1]|0;if(((y>>>3)+(y&7)|0)>=(l|0)){l=a[25808+o>>0]&127;y=57}else y=57}else y=57}else{l=(l+-65|0)>>>0<26?l+32|0:l;y=57}while(0);if((y|0)==57){y=0;if(l)y=58}if((y|0)==58)if((l|0)>=128)if((l|0)>=2048)if((l|0)<65536){o=t;k=3;n=2;p=1;q=224;r=15;y=62}else y=61;else{q=t;k=2;n=1;o=192;p=31;y=63}else{n=t;k=1;y=64}if((y|0)==61){a[t>>0]=l>>>18&7|240;o=t+1|0;k=4;n=3;p=2;q=128;r=63;y=62}if((y|0)==62){a[o>>0]=l>>>12&r|q;q=t+p|0;o=128;p=63;y=63}if((y|0)==63){a[q>>0]=l>>>6&p|o;n=t+n|0;l=l&63|128;y=64}if((y|0)==64){y=0;a[n>>0]=l;t=t+k|0}if(m>>>0>=z>>>0){k=m;y=85;break}k=m+1|0;n=a[m>>0]|0;l=n&255;if((n&255)>191){l=d[2736+(l+-192)>>0]|0;d:do if((k|0)==(z|0))k=z;else while(1){n=a[k>>0]|0;if((n&-64)<<24>>24!=-128)break d;k=k+1|0;l=l<<6|n&63;if((k|0)==(z|0)){k=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=75;else n=1;else{l=65533;y=75}}else if(n<<24>>24>-1)n=(c[24720+(l>>>5<<2)>>2]&1<<(l&31)|0)==0;else y=75;if((y|0)==75){q=l<<10|1023;n=0;o=405;p=0;do{y=(o+n|0)/2|0;s=q>>>0<(c[23088+(y<<2)>>2]|0)>>>0;p=s?p:y;o=s?y+-1|0:o;n=s?n:y+1|0}while((o|0)>=(n|0));n=c[23088+(p<<2)>>2]|0;n=((n>>>10)+(n&1023)|0)>>>0<=l>>>0}s=n&1;n=c[A>>2]|0;e:do if((n|0)>0){r=c[C>>2]|0;n=n+-1|0;o=0;while(1){p=(o+n|0)/2|0;y=c[r+(p<<2)>>2]|0;q=(y|0)<(l|0);if((y|0)==(l|0)){n=1;break e}n=q?n:p+-1|0;o=q?p+1|0:o;if((n|0)<(o|0)){n=0;break}}}else n=0;while(0);if((n|0)==(s|0)){n=l+-768|0;if(n>>>0>49){y=85;break}y=(l|0)<800;if(!(1<<(y?n:l+-800|0)&(y?134389727:221688))){y=85;break}}p=t;m=k;k=c[w>>2]|0}if((y|0)==85){c[E>>2]=k-(c[D>>2]|0);c[f>>2]=c[w>>2];c[g>>2]=t-(c[w>>2]|0);D=c[D>>2]|0;c[h>>2]=x-D;c[i>>2]=m-D;D=b+16|0;E=c[D>>2]|0;c[D>>2]=E+1;c[j>>2]=E;E=0;return E|0}else if((y|0)==86)return k|0;return 0}function Lp(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=f+g|0;n=(g|0)>0;if(!n){q=0;return q|0}m=0;g=f;while(1){j=g+1|0;g=a[g>>0]|0;h=g&255;if((g&255)>191){g=d[2736+(h+-192)>>0]|0;a:do if((j|0)==(p|0)){h=g;g=p}else{h=g;g=j;while(1){i=a[g>>0]|0;if((i&-64)<<24>>24!=-128)break a;g=g+1|0;h=h<<6|i&63;if((g|0)==(p|0)){g=p;break}}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<4194304)q=12;else i=1;else{h=65533;q=12}}else if(g<<24>>24>-1){i=(c[24720+(h>>>5<<2)>>2]&1<<(h&31)|0)==0;g=j}else{g=j;q=12}if((q|0)==12){q=0;l=h<<10|1023;i=0;j=405;k=0;do{o=(j+i|0)/2|0;r=l>>>0<(c[23088+(o<<2)>>2]|0)>>>0;k=r?k:o;j=r?o+-1|0:j;i=r?i:o+1|0}while((j|0)>=(i|0));i=c[23088+(k<<2)>>2]|0;i=((i>>>10)+(i&1023)|0)>>>0<=h>>>0}do if((i&1|0)==(e|0))i=m;else{i=h+-768|0;if(i>>>0<=49?(r=(h|0)<800,1<<(r?i:h+-800|0)&(r?134389727:221688)|0):0){i=m;break}i=m+1|0}while(0);if(g>>>0<p>>>0)m=i;else break}if(!i){r=0;return r|0}o=b+12|0;h=c[o>>2]|0;b=b+8|0;g=c[b>>2]|0;if(mb()|0){r=7;return r|0}m=sb(h,g+i<<2,0)|0;if(!m){r=7;return r|0}g=c[b>>2]|0;if(n)do{j=f+1|0;f=a[f>>0]|0;h=f&255;if((f&255)>191){f=d[2736+(h+-192)>>0]|0;b:do if((j|0)==(p|0)){h=f;f=p}else{h=f;f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24!=-128)break b;f=f+1|0;h=h<<6|i&63;if((f|0)==(p|0)){f=p;break}}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<4194304)q=34;else i=1;else{h=65533;q=34}}else if(f<<24>>24>-1){i=(c[24720+(h>>>5<<2)>>2]&1<<(h&31)|0)==0;f=j}else{f=j;q=34}if((q|0)==34){q=0;l=h<<10|1023;i=0;j=405;k=0;do{r=(j+i|0)/2|0;n=l>>>0<(c[23088+(r<<2)>>2]|0)>>>0;k=n?k:r;j=n?r+-1|0:j;i=n?i:r+1|0}while((j|0)>=(i|0));i=c[23088+(k<<2)>>2]|0;i=((i>>>10)+(i&1023)|0)>>>0<=h>>>0}do if((i&1|0)!=(e|0)){i=h+-768|0;if(i>>>0<=49?(r=(h|0)<800,1<<(r?i:h+-800|0)&(r?134389727:221688)|0):0)break;c:do if((g|0)>0){i=0;do{if((c[m+(i<<2)>>2]|0)>=(h|0))break c;i=i+1|0}while((i|0)<(g|0))}else i=0;while(0);if((g|0)>(i|0)){j=g;do{r=j;j=j+-1|0;c[m+(r<<2)>>2]=c[m+(j<<2)>>2]}while((j|0)>(i|0))}c[m+(i<<2)>>2]=h;g=g+1|0}while(0)}while(f>>>0<p>>>0);c[o>>2]=m;c[b>>2]=g;r=0;return r|0}function Mp(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;j=p;do if((f|1|0)==5){l=c[g+4>>2]|0;k=Eu(l)|0;if((f|0)==5){if((l|0)==0|(k|0)!=4)break;k=d[l>>0]|0;e=208+k|0;if((k|32|0)==116){k=d[l+1>>0]|0;e=208+k|0;if((k|32|0)==101){k=d[l+2>>0]|0;e=208+k|0;if((k|32|0)==109){e=d[l+3>>0]|0;if((e|32|0)!=112){m=208+e|0;n=112;o=5}}else{m=e;n=109;o=5}}else{m=e;n=101;o=5}}else{m=e;n=116;o=5}if((o|0)==5?(n|0)!=(d[m>>0]|0):0)break;k=c[g+12>>2]|0;l=k;k=Eu(k)|0;e=4}else e=3;f=c[g+(e<<2)>>2]|0;j=Eu(f)|0;e=td(b,51150)|0;if(e|0){h=e;Ra=p;return h|0}e=k+306+j|0;n=pb(e,0)|0;if(!n){h=7;Ra=p;return h|0}gw(n|0,0,e|0)|0;m=n+12|0;c[m>>2]=n+16;g=n+304|0;c[n+32>>2]=g;e=g+(k+1)|0;c[n+36>>2]=e;c[n+28>>2]=b;c[n+268>>2]=1;ew(g|0,l|0,k|0)|0;ew(e|0,f|0,j|0)|0;m=c[(c[m>>2]|0)+20>>2]|0;e=a[m>>0]|0;switch(e<<24>>24){case 34:case 39:case 91:case 96:{l=e<<24>>24==91?93:e;f=a[m+1>>0]|0;a:do if(!(f<<24>>24))e=0;else{j=1;e=0;do{k=j+1|0;if(f<<24>>24==l<<24>>24){if((a[m+k>>0]|0)!=l<<24>>24)break a;a[m+e>>0]=l;j=j+2|0}else{a[m+e>>0]=f;j=k}e=e+1|0;f=a[m+j>>0]|0}while(f<<24>>24!=0)}while(0);a[m+e>>0]=0;break}default:{}}c[h>>2]=n;h=0;Ra=p;return h|0}while(0);Wp(i,51219,j);h=1;Ra=p;return h|0}function Np(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(((c[d+8>>2]|0)==1?(e=c[d+12>>2]|0,(c[e>>2]|0)==0):0)?(a[e+4>>0]|0)==0:0)c[d+32>>2]=1;m=c[d>>2]|0;if((m|0)<=0){c[d+20>>2]=0;g[d+40>>3]=2.0e4;return 0}n=c[d+4>>2]|0;b=-1;k=-1;h=-1;e=-1;l=0;while(1){if(!(a[n+(l*12|0)+5>>0]|0))j=h;else{i=a[n+(l*12|0)+4>>0]|0;j=c[n+(l*12|0)>>2]|0;if(!j){b=i<<24>>24==2?l:b;e=i<<24>>24==32|i<<24>>24==4?l:e;h=i<<24>>24==8|i<<24>>24==16?l:h}k=i<<24>>24==2&(j|0)==4?l:k;j=h}l=l+1|0;if((l|0)>=(m|0))break;else h=j}i=d+20|0;if((b|0)<=-1){c[i>>2]=0;h=d+40|0;g[h>>3]=2.0e4;if((e|0)>-1){c[i>>2]=2;c[(c[d+16>>2]|0)+(e<<3)>>2]=1;g[h>>3]=1.0e4;b=2;e=6;f=1.0e4}else{b=1;e=4;f=2.0e4}if((j|0)>-1){c[i>>2]=e;c[(c[d+16>>2]|0)+(j<<3)>>2]=b;f=f*.5;g[h>>3]=f;b=b+1|0}}else{c[i>>2]=1;c[(c[d+16>>2]|0)+(b<<3)>>2]=1;g[d+40>>3]=5.0;b=2;f=5.0}if((k|0)<=-1)return 0;c[(c[d+16>>2]|0)+(k<<3)>>2]=b;g[d+40>>3]=f+-1.0;return 0}function Op(a){a=a|0;var b=0,d=0;b=c[a+12>>2]|0;gc(c[b+56>>2]|0)|0;gc(c[b+60>>2]|0)|0;gc(c[b+64>>2]|0)|0;gc(c[b+68>>2]|0)|0;gc(c[b+72>>2]|0)|0;gc(c[b+76>>2]|0)|0;gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;gc(c[b+116>>2]|0)|0;gc(c[b+120>>2]|0)|0;gc(c[b+124>>2]|0)|0;gc(c[b+128>>2]|0)|0;gc(c[b+132>>2]|0)|0;gc(c[b+136>>2]|0)|0;gc(c[b+140>>2]|0)|0;gc(c[b+144>>2]|0)|0;gc(c[b+148>>2]|0)|0;gc(c[b+152>>2]|0)|0;gc(c[b+156>>2]|0)|0;gc(c[b+160>>2]|0)|0;gc(c[b+164>>2]|0)|0;gc(c[b+168>>2]|0)|0;gc(c[b+172>>2]|0)|0;gc(c[b+176>>2]|0)|0;gc(c[b+180>>2]|0)|0;gc(c[b+184>>2]|0)|0;gc(c[b+188>>2]|0)|0;gc(c[b+192>>2]|0)|0;gc(c[b+196>>2]|0)|0;gc(c[b+200>>2]|0)|0;gc(c[b+204>>2]|0)|0;gc(c[b+208>>2]|0)|0;gc(c[b+212>>2]|0)|0;b=c[b+244>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Pp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](120)|0;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](120)|0;if((c[14985]|0)>>>0<120)c[14985]=120;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}d=a;e=d+120|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b>>2]=a;f=0;return f|0}function Qp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=(c[(c[b>>2]|0)+12>>2]|0)+248|0;e=c[d>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}i=e;if((c[f+304>>2]|0)>>>0<=i>>>0?(c[f+308>>2]|0)>>>0>i>>>0:0){i=f+300|0;c[e>>2]=c[i>>2];c[i>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[d>>2]=0;h=b+4|0;i=b+8|0;d=c[h>>2]|0;if((c[i>>2]|0)>0){g=0;do{d=c[d+(g<<2)>>2]|0;do if(d|0){do if((c[d+56>>2]|0)==0?(j=c[d+64>>2]|0,j|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);do if((a[d+5>>0]|0)==0?(k=c[d+40>>2]|0,k|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);e=c[d+52>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}l=e;if((c[f+304>>2]|0)>>>0<=l>>>0?(c[f+308>>2]|0)>>>0>l>>>0:0){l=f+300|0;c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);g=g+1|0;d=c[h>>2]|0}while((g|0)<(c[i>>2]|0))}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+20|0;e=c[d>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[i>>2]=0;c[h>>2]=0;c[d>>2]=0;d=c[b+60>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+76>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+112>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return 0}else{l=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return 0}return 0}function Rp(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=Ra;Ra=Ra+16|0;u=y+8|0;s=y;x=c[(c[d>>2]|0)+12>>2]|0;if((f|0)==1){q=-1;o=0;w=0;h=1;p=-1}else{h=f&2;p=(h|0)==0;v=(p^1)&1;t=(f&4|0)==0;q=t?-1:v;o=-1;w=1;h=t?v:(h>>>1)+1|0;p=p<<31>>31}t=(h|0)<(i|0)?h:-1;v=d+4|0;l=d+8|0;h=c[v>>2]|0;if((c[l>>2]|0)>0){k=0;do{h=c[h+(k<<2)>>2]|0;do if(h|0){do if((c[h+56>>2]|0)==0?(m=c[h+64>>2]|0,m|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{i=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);do if((a[h+5>>0]|0)==0?(n=c[h+40>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{i=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);f=c[h+52>>2]|0;do if(f|0){i=c[f+20>>2]|0;gc(c[f+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,f);break}z=f;if((c[i+304>>2]|0)>>>0<=z>>>0?(c[i+308>>2]|0)>>>0>z>>>0:0){z=i+300|0;c[f>>2]=c[z>>2];c[z>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{z=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);k=k+1|0;h=c[v>>2]|0}while((k|0)<(c[l>>2]|0))}do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);h=d+20|0;f=c[h>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{z=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[l>>2]=0;c[v>>2]=0;c[h>>2]=0;n=d+60|0;h=c[n>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);h=c[d+112>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);l=v;m=l+116|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));c[d+72>>2]=(w|0)==0?3:19;do if((p&o|0)>-1?(r=c[j>>2]|0,r|0):0){h=b[r+8>>1]|0;if((h&514)==514?(a[r+10>>0]|0)==1:0)h=c[r+16>>2]|0;else{if(h&1)break;h=Gg(r,1)|0}if(h|0){c[s>>2]=h;h=Bb(31408,s)|0;c[n>>2]=h;if(!h){z=7;Ra=y;return z|0}else{z=Eu(h)|0;c[d+64>>2]=z;break}}}while(0);do if((q|0)>-1){h=c[j+(q<<2)>>2]|0;do if(h){f=b[h+8>>1]|0;if((f&514)==514?(a[h+10>>0]|0)==1:0){h=c[h+16>>2]|0;break}if(!(f&1))h=Gg(h,1)|0;else h=0}else h=0;while(0);c[u>>2]=h;h=Bb(31408,u)|0;c[d+76>>2]=h;if(!h){z=7;Ra=y;return z|0}else{z=Eu(h)|0;c[d+80>>2]=z;break}}while(0);a:do if((t|0)>-1){h=c[j+(t<<2)>>2]|0;f=e[h+8>>1]|0;do if(!(f&4)){if(f&8|0){h=Mg(+g[h>>3])|0;L()|0;break}if(!(f&18)){h=0;break a}h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}else h=c[h>>2]|0;while(0);h=(h|0)>0?h:0}else h=0;while(0);c[d+84>>2]=h;f=c[n>>2]|0;k=d+64|0;i=c[k>>2]|0;l=v;m=l+56|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));h=Xp(x,h,0,-2,f,i,0,w,v)|0;if(h|0){z=h;Ra=y;return z|0}c[d+16>>2]=n;h=eq(x,v,c[n>>2]|0,c[k>>2]|0)|0;if(h|0){z=h;Ra=y;return z|0}z=Sp(d)|0;Ra=y;return z|0}function Sp(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=c[(c[b>>2]|0)+12>>2]|0;o=b+96|0;p=o;p=Sv(c[p>>2]|0,c[p+4>>2]|0,1,0)|0;e=L()|0;c[o>>2]=p;c[o+4>>2]=e;o=b+104|0;e=(c[o>>2]|0)+1|0;c[o>>2]=e;p=b+108|0;f=c[p>>2]|0;a:do if((e|0)<(f|0)){g=c[b+112>>2]|0;while(1){n=g+(e<<4)|0;m=c[n+4>>2]|0;if((m|0)>0|(m|0)==0&(c[n>>2]|0)>>>0>0){e=0;break}e=e+1|0;c[o>>2]=e;if((e|0)>=(f|0))break a}return e|0}while(0);e=gq(h,b+4|0)|0;if((e|0)!=100){c[b+88>>2]=1;q=e;return q|0}m=c[b+56>>2]|0;n=c[b+52>>2]|0;e=c[b+76>>2]|0;do if(e|0){j=c[b+80>>2]|0;k=c[b+48>>2]|0;l=(j|0)<(k|0);k=Lu(e,c[b+44>>2]|0,l?j:k)|0;if((k|0)>=0?(k|0)!=0|l^1:0)break;c[b+88>>2]=1;q=0;return q|0}while(0);f=c[p>>2]|0;l=b+112|0;e=c[l>>2]|0;do if((f|0)<2){if(mb()|0){q=7;return q|0}e=sb(e,32,0)|0;if(!e){q=7;return q|0}else{f=c[p>>2]|0;gw(e+(f<<4)|0,0,32-(f<<4)|0)|0;c[l>>2]=e;c[p>>2]=2;f=32;break}}else f=f<<4;while(0);gw(e|0,0,f|0)|0;b:do if((m|0)>0){e=0;f=0;k=0;c:while(1){j=n+k|0;h=a[j>>0]|0;g=h&255;do if(!(g&128)){b=1;i=0;g=h&255}else{i=d[j+1>>0]|0;g=i<<7|g&127;if(!(i&128)){b=2;i=0;break}i=d[j+2>>0]|0;g=i<<14|g&16383;if(!(i&128)){b=3;i=0;break}i=d[j+3>>0]|0;g=i<<21|g&2097151;if(!(i&128)){b=4;i=0;break}h=28;b=j+4|0;g=g&268435455;i=0;do{r=b;b=b+1|0;r=d[r>>0]|0;s=cw(r&127|0,0,h|0)|0;g=Sv(s|0,L()|0,g|0,i|0)|0;i=L()|0;h=h+7|0}while(h>>>0<64&((r&128|0)!=0|0!=0));b=b-j|0}while(0);k=b+k|0;switch(e|0){case 0:{f=c[l>>2]|0;s=f;s=Sv(c[s>>2]|0,c[s+4>>2]|0,1,0)|0;e=L()|0;c[f>>2]=s;c[f+4>>2]=e;f=0;e=1;break}case 1:{if((i|0)>0|(i|0)==0&g>>>0>1){q=(c[l>>2]|0)+16|0;r=q;r=Sv(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;s=L()|0;c[q>>2]=r;c[q+4>>2]=s;q=32}else q=32;break}case 2:{q=32;break}default:{f=g+2|0;if((c[p>>2]|0)<(f|0)){e=c[l>>2]|0;if(mb()|0){e=7;q=46;break c}e=sb(e,f<<4,0)|0;if(!e){e=7;q=46;break c}s=c[p>>2]|0;gw(e+(s<<4)|0,0,f-s<<4|0)|0;c[l>>2]=e;c[p>>2]=f}else e=c[l>>2]|0;f=e+(g+1<<4)|0;s=f;s=Sv(c[s>>2]|0,c[s+4>>2]|0,1,0)|0;e=L()|0;c[f>>2]=s;c[f+4>>2]=e;f=g;e=2}}d:do if((q|0)==32){q=0;switch(g|0){case 0:{if(!i){e=0;break d}break}case 1:{if(!i){e=3;break d}break}default:{}}e=c[l>>2]|0;r=e+(f+1<<4)+8|0;j=r;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;s=L()|0;c[r>>2]=j;c[r+4>>2]=s;e=e+8|0;r=e;r=Sv(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;s=L()|0;c[e>>2]=r;c[e+4>>2]=s;e=2}while(0);if((k|0)>=(m|0))break b}if((q|0)==46)return e|0}while(0);c[o>>2]=0;s=0;return s|0}function Tp(a){a=a|0;return c[a+88>>2]|0}function Up(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,c[a+44>>2]|0,c[a+48>>2]|0,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 1:{a=c[a+104>>2]|0;if(!a){if((yc(c[d>>2]|0,40769,-1,1,0)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}g=a+-1|0;a=c[d>>2]|0;e=((g|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){d=a;c[d>>2]=g;c[d+4>>2]=e;b[f>>1]=4;return 0}else{Pg(a,g,e);return 0}}case 2:{g=(c[a+112>>2]|0)+(c[a+104>>2]<<4)|0;f=c[g>>2]|0;g=c[g+4>>2]|0;a=c[d>>2]|0;e=a+8|0;if(!(b[e>>1]&9216)){d=a;c[d>>2]=f;c[d+4>>2]=g;b[e>>1]=4;return 0}else{Pg(a,f,g);return 0}}case 3:{g=(c[a+112>>2]|0)+(c[a+104>>2]<<4)+8|0;f=c[g>>2]|0;g=c[g+4>>2]|0;a=c[d>>2]|0;e=a+8|0;if(!(b[e>>1]&9216)){d=a;c[d>>2]=f;c[d+4>>2]=g;b[e>>1]=4;return 0}else{Pg(a,f,g);return 0}}default:{g=c[a+84>>2]|0;a=c[d>>2]|0;e=((g|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){d=a;c[d>>2]=g;c[d+4>>2]=e;b[f>>1]=4;return 0}else{Pg(a,g,e);return 0}}}return 0}function Vp(a,b){a=a|0;b=b|0;var d=0;d=a+96|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Wp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+16|0;e=g;f=c[a>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=d;h=Ab(b,e)|0;c[a>>2]=h;Ra=g;return}function Xp(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+32|0;p=M+24|0;z=M+16|0;K=M+8|0;H=M;do if((h|0)<0){p=c[d+256>>2]|0;a:do if(p){v=(l|k|0)!=0;b:do if(v){o=c[p+(g*24|0)+12>>2]|0;c[K>>2]=o;if(!o){n=0;break a}if(!j){p=0;t=0;n=0;q=0;s=o;o=0;while(1){if((t|0)==(n|0)){o=t+16|0;n=o<<2;if(mb()|0){r=0;o=p;n=7;q=0;break b}n=sb(q,(n|0)>0?n:0,0)|0;if(!n){r=0;o=p;n=7;q=0;break b}else{r=o;p=n;o=n;q=n}}else r=n;n=t+1|0;c[p+(t<<2)>>2]=s;s=c[c[K>>2]>>2]|0;c[K>>2]=s;if(!s)break;else{t=n;n=r}}}else{p=0;n=0;s=0;u=o;t=0;o=0;while(1){q=u;r=u;if((c[r+16>>2]|0)>=(j|0)?(Lu(c[r+12>>2]|0,i,j)|0)==0:0){if((n|0)==(s|0)){q=n+16|0;o=q<<2;if(mb()|0){r=0;o=p;n=7;q=0;break b}r=sb(t,(o|0)>0?o:0,0)|0;if(!r){r=0;o=p;n=7;q=0;break b}else{p=r;o=r}}else{q=s;r=t}c[p+(n<<2)>>2]=u;s=q;n=n+1|0;q=c[K>>2]|0}else r=t;u=c[q>>2]|0;c[K>>2]=u;if(!u)break;else t=r}}if((n|0)<=1)if((n|0)==1){n=1;G=31;break}else{r=0;o=p;n=0;q=0;break}else{pv(o,n,4,156);G=31;break}}else{q=p+(g*24|0)+20|0;c:do if((c[q>>2]|0?(r=p+(g*24|0)+4|0,s=Xa[(a[r>>0]<<24>>24==1?154:155)&255](i,j)|0,s=(c[p+(g*24|0)+16>>2]|0)+-1&s,t=c[q>>2]|0,t|0):0)?(o=c[t+(s<<3)>>2]|0,u=(a[r>>0]|0)==1?79:80,n=c[t+(s<<3)+4>>2]|0,(o|0)!=0&(n|0)!=0):0){while(1){o=o+-1|0;if(!(Za[u&127](c[n+12>>2]|0,c[n+16>>2]|0,i,j)|0))break;n=c[n>>2]|0;if(!((o|0)!=0&(n|0)!=0))break c}c[K>>2]=n;n=1;p=K;G=31;break b}while(0);c[K>>2]=0;r=0;o=0;n=0;q=0}while(0);if((G|0)==31){n=n<<2;o=n+100|0;q=pb(o,0)|0;if(!q){r=q;o=p;n=7;q=0}else{gw(q|0,0,o|0)|0;c[q>>2]=2147483647;r=q+96|0;c[q+56>>2]=r;ew(r|0,p|0,n|0)|0;r=q;o=p;n=0}}do if(v?o|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{F=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if((n|0)==0&(r|0)!=0){p=m+4|0;o=c[p>>2]|0;do if(!(o&15)){n=c[m>>2]|0;if((mb()|0)==0?(y=sb(n,(o<<2)+64|0,0)|0,y|0):0){c[m>>2]=y;o=c[p>>2]|0;n=y;break}do if((c[r+56>>2]|0)==0?(w=c[r+64>>2]|0,w|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](w);break}else{F=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);break}while(0);do if((a[r+5>>0]|0)==0?(x=c[r+40>>2]|0,x|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{F=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}while(0);n=c[r+52>>2]|0;do if(n|0){o=c[n+20>>2]|0;gc(c[n+16>>2]|0)|0;if(o|0){if(c[o+480>>2]|0){Xd(o,n);break}F=n;if((c[o+304>>2]|0)>>>0<=F>>>0?(c[o+308>>2]|0)>>>0>F>>>0:0){F=o+300|0;c[n>>2]=c[F>>2];c[F>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{F=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if(!q){n=7;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);n=7;break a}else{n=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);n=7;break a}}else n=c[m>>2]|0;while(0);c[p>>2]=o+1;c[n+(o<<2)>>2]=q;n=0}}else n=0;while(0);if(!((h|0)!=-1&(n|0)==0)){m=0;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}q=d+108|0;F=c[q>>2]|0;c[K>>2]=F;o=F;if(!F){p=c[d+20>>2]|0;c[z>>2]=c[d+16>>2];c[z+4>>2]=p;p=Bb(51885,z)|0;if(!p){n=7;break}n=qd(c[d+12>>2]|0,p,-1,133,0,K,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{F=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}o=c[K>>2]|0;c[q>>2]=o;if(n)break}v=o;n=d+252|0;r=c[n>>2]|0;p=((f|0)<0)<<31>>31;r=Yv(r|0,((r|0)<0)<<31>>31|0,f|0,p|0)|0;q=((g|0)<0)<<31>>31;r=Sv(r|0,L()|0,g|0,q|0)|0;r=cw(r|0,L()|0,10)|0;s=L()|0;do if(!(Vc(v,1)|0)){t=c[v+100>>2]|0;u=t+8|0;if(!(b[u>>1]&9216)){G=t;c[G>>2]=r;c[G+4>>2]=s;b[u>>1]=4;break}else{Pg(t,r,s);break}}while(0);r=c[n>>2]|0;r=Yv(r|0,((r|0)<0)<<31>>31|0,f|0,p|0)|0;r=Sv(r|0,L()|0,g|0,q|0)|0;r=cw(r|0,L()|0,10)|0;q=L()|0;r=r|1023;if(!(Vc(v,2)|0)){p=c[v+100>>2]|0;n=p+40|0;p=p+48|0;if(!(b[p>>1]&9216)){G=n;c[G>>2]=r;c[G+4>>2]=q;b[p>>1]=4;G=98;break}else{Pg(n,r,q);G=98;break}}else G=98}else{q=d+104|0;F=c[q>>2]|0;c[K>>2]=F;o=F;if(!F){F=c[d+20>>2]|0;c[p>>2]=c[d+16>>2];c[p+4>>2]=F;p=Bb(51773,p)|0;if(!p){n=7;break}n=qd(c[d+12>>2]|0,p,-1,133,0,K,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{F=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}o=c[K>>2]|0;c[q>>2]=o;if(n)break}n=o;q=c[d+252>>2]|0;q=Yv(q|0,((q|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;q=Sv(q|0,L()|0,g|0,((g|0)<0)<<31>>31|0)|0;q=cw(q|0,L()|0,10)|0;q=Sv(q|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;r=L()|0;if(!(Vc(n,1)|0)){n=c[n+100>>2]|0;p=n+8|0;if(!(b[p>>1]&9216)){G=n;c[G>>2]=q;c[G+4>>2]=r;b[p>>1]=4;G=98;break}else{Pg(n,q,r);G=98;break}}else G=98}while(0);d:do if((G|0)==98){B=o;C=(o|0)==0;D=(i|0)!=0;E=B+120|0;A=(k|0)==0?0:H;F=m+4|0;f=(l|k|0)==0;g=B+40|0;k=B+144|0;l=f&1;n=Gc(B)|0;if((n|0)==100){while(1){y=Oc(B,1)|0;z=L()|0;h=K;c[h>>2]=y;c[h+4>>2]=z;h=Oc(B,2)|0;z=L()|0;y=H;c[y>>2]=h;c[y+4>>2]=z;y=Oc(B,3)|0;z=L()|0;h=Lc(B,4)|0;if(C)q=mc(29576)|0;else{n=c[E>>2]|0;if((n|0)!=0?(e[k>>1]|0)>4:0)n=n+160|0;else{n=c[B>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576}q=mc(n)|0;n=c[B>>2]|0;p=c[g>>2]|0;if((p|0)==3082|(a[n+81>>0]|0)!=0){og(n);n=7}else n=c[n+68>>2]&p;c[g>>2]=n}p=K;n=c[p>>2]|0;p=c[p+4>>2]|0;if((q|0)!=0&(D&((n|0)!=0|(p|0)!=0))){n=Yp(d,i,j,q,h,K,A)|0;if(n|0){G=152;break}p=K;n=c[p>>2]|0;p=c[p+4>>2]|0;if(f){w=H;c[w>>2]=n;c[w+4>>2]=p;w=n;v=p;u=n;r=p}else G=114}else G=114;if((G|0)==114){G=0;r=H;w=n;v=p;u=c[r>>2]|0;r=c[r+4>>2]|0}p=(c[F>>2]|0)+1|0;if((w|0)==0&(v|0)==0){if(!((u|0)==0&(r|0)==0)){n=267;G=152;break}n=h+20|0}else n=0;x=nb(n+96|0)|0;if(!x){n=7;G=152;break}s=x;t=s+96|0;do{c[s>>2]=0;s=s+4|0}while((s|0)<(t|0));c[x>>2]=p;a[x+4>>0]=l;t=x+8|0;c[t>>2]=w;c[t+4>>2]=v;t=x+16|0;c[t>>2]=u;c[t+4>>2]=r;u=x+24|0;c[u>>2]=y;c[u+4>>2]=z;if(!n){y=Sv(w|0,v|0,-1,-1)|0;z=L()|0;h=x+32|0;c[h>>2]=y;c[h+4>>2]=z}else{n=x+96|0;c[x+40>>2]=n;a[x+5>>0]=1;c[x+44>>2]=h;if(h|0)ew(n|0,q|0,h|0)|0;s=n+h|0;t=s+20|0;do{a[s>>0]=0;s=s+1|0}while((s|0)<(t|0))}n=c[F>>2]|0;if(!(n&15)){p=c[m>>2]|0;if(mb()|0)break;p=sb(p,(n<<2)+64|0,0)|0;if(!p)break;c[m>>2]=p;n=c[F>>2]|0}else p=c[m>>2]|0;c[F>>2]=n+1;c[p+(n<<2)>>2]=x;n=Gc(B)|0;if((n|0)!=100)break d}if((G|0)==152)break;do if((c[x+56>>2]|0)==0?(I=c[x+64>>2]|0,I|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](I);break}else{K=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);break}while(0);do if((a[x+5>>0]|0)==0?(J=c[x+40>>2]|0,J|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{K=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}while(0);n=c[x+52>>2]|0;do if(n|0){p=c[n+20>>2]|0;gc(c[n+16>>2]|0)|0;if(p|0){if(c[p+480>>2]|0){Xd(p,n);break}K=n;if((c[p+304>>2]|0)>>>0<=K>>>0?(c[p+308>>2]|0)>>>0>K>>>0:0){K=p+300|0;c[n>>2]=c[K>>2];c[K>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{K=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](x);else{K=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x)}n=7}}while(0);q=o;if(!o){m=0;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}o=c[q>>2]|0;K=q+136|0;m=c[K+4>>2]|0;if((m|0)>0|(m|0)==0&(c[K>>2]|0)>>>0>0)hc(o,q);p=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((p|0)==3082|(a[o+81>>0]|0)!=0){og(o);m=7;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}else{m=c[o+68>>2]&p;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}return 0}function Yp(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;E=F+4|0;C=F;l=a[g>>0]|0;k=l&255;if(k&128){z=d[g+1>>0]|0;k=z<<7|l&127;if(z&128){z=d[g+2>>0]|0;k=z<<14|k&16383;if(z&128){z=d[g+3>>0]|0;k=z<<21|k&2097151;if(!(z&128))z=k;else z=(a[g+4>>0]&7)<<28|k&268435455}else z=k}else z=k}else z=k;y=g+h|0;if(l<<24>>24<=-1)if((a[g+1>>0]|0)<=-1)if((a[g+2>>0]|0)<=-1)if((a[g+3>>0]|0)>-1)k=4;else{k=28;h=g+4|0;do{x=h;h=h+1|0;k=k+7|0}while(k>>>0<64&(a[x>>0]|0)<0);k=h-g|0}else k=3;else k=2;else k=1;n=g+k|0;h=a[n>>0]|0;k=h&255;do if(!(k&128)){m=1;l=h&255;h=0}else{x=d[n+1>>0]|0;k=x<<7|k&127;if(!(x&128)){m=2;l=k;h=0;break}x=d[n+2>>0]|0;k=x<<14|k&16383;if(!(x&128)){m=3;l=k;h=0;break}x=d[n+3>>0]|0;l=x<<21|k&2097151;if(!(x&128)){m=4;h=0;break}k=28;m=n+4|0;l=l&268435455;h=0;do{x=m;m=m+1|0;x=d[x>>0]|0;w=cw(x&127|0,0,k|0)|0;l=Sv(w|0,L()|0,l|0,h|0)|0;h=L()|0;k=k+7|0}while(k>>>0<64&((x&128|0)!=0|0!=0));m=m-n|0}while(0);o=n+m|0;if(o>>>0>y>>>0){E=267;Ra=F;return E|0}a:do if(o>>>0<y>>>0){w=g;x=y;n=i;m=j;g=1;k=0;r=0;t=0;while(1){u=(n|0)!=0;v=(m|0)!=0;if(!(u|v)){h=0;break a}if(!g){p=a[o>>0]|0;g=p&255;if(g&128){s=d[o+1>>0]|0;g=s<<7|p&127;if(s&128){s=d[o+2>>0]|0;g=s<<14|g&16383;if(s&128){s=d[o+3>>0]|0;g=s<<21|g&2097151;if(!(s&128))p=4;else{g=(a[o+4>>0]&7)<<28|g&268435455;p=5}}else p=3}else p=2}else p=1;o=o+p|0}else g=0;q=a[o>>0]|0;p=q&255;if(p&128){s=d[o+1>>0]|0;p=s<<7|q&127;if(s&128){s=d[o+2>>0]|0;p=s<<14|p&16383;if(s&128){s=d[o+3>>0]|0;p=s<<21|p&2097151;if(!(s&128))q=4;else{p=(a[o+4>>0]&7)<<28|p&268435455;q=5}}else q=3}else q=2}else q=1;s=o+q|0;o=s;if((g|0)>(o-w|0)){h=267;break a}if((p|0)==0|(p|0)>(x-o|0)){h=267;break a}o=Sv(p|0,((p|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;q=L()|0;if((q|0)>(r|0)|(q|0)==(r|0)&o>>>0>t>>>0){q=cw(o|0,q|0,1)|0;r=L()|0;if(mb()|0){h=7;break a}o=sb(k,q,r)|0;if(!o){h=7;break a}else k=o}else q=t;ew(k+g|0,s|0,p|0)|0;t=p+g|0;o=s+p|0;g=(t|0)>(f|0);p=Lu(e,k,g?f:t)|0;do if(u){if((p|0)>=0?(p|0)!=0|g^1:0)break;D=n;c[D>>2]=l;c[D+4>>2]=h;D=49}else D=49;while(0);if((D|0)==49){D=0;if(v&(p|0)<0){n=m;c[n>>2]=l;c[n+4>>2]=h;n=0;m=0}else n=0}l=Sv(l|0,h|0,1,0)|0;h=L()|0;if(o>>>0>=y>>>0){D=52;break}else{g=0;t=q}}}else{n=i;m=j;k=0;D=52}while(0);if((D|0)==52){if(n|0){y=n;c[y>>2]=l;c[y+4>>2]=h}if(!m)h=0;else{y=m;c[y>>2]=l;c[y+4>>2]=h;h=0}}do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);if(!((z|0)>1&(h|0)==0)){E=h;Ra=F;return E|0}c[E>>2]=0;c[C>>2]=0;if((i|0)!=0&(j|0)!=0?(B=i,A=c[B>>2]|0,B=c[B+4>>2]|0,z=j,!((A|0)==(c[z>>2]|0)?(B|0)==(c[z+4>>2]|0):0)):0){k=dq(b,A,B,E,C)|0;if(!k)k=Yp(b,e,f,c[E>>2]|0,c[C>>2]|0,i,0)|0;i=c[E>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{B=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[E>>2]=0;if(!k){k=j;i=0;D=71}}else{k=(i|0)==0?j:i;D=71}do if((D|0)==71){k=dq(b,c[k>>2]|0,c[k+4>>2]|0,E,C)|0;if(!k)k=Yp(b,e,f,c[E>>2]|0,c[C>>2]|0,i,j)|0;i=c[E>>2]|0;if(i)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{E=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);E=k;Ra=F;return E|0}function Zp(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[a>>2]|0;b=c[b>>2]|0;d=c[e+16>>2]|0;a=c[b+16>>2]|0;b=Lu(c[e+12>>2]|0,c[b+12>>2]|0,(d|0)<(a|0)?d:a)|0;return ((b|0)==0?d-a|0:b)|0}function _p(b,c){b=b|0;c=c|0;var d=0;if((c|0)<1){c=Eu(b)|0;if((c|0)<=0){d=0;return d|0}}d=0;while(1){d=d<<3^d^a[b>>0];if((c|0)<=1)break;else{b=b+1|0;c=c+-1|0}}d=d&2147483647;return d|0}function $p(b,c){b=b|0;c=c|0;var d=0;if((c|0)<=0){d=0;return d|0}d=0;while(1){d=d<<3^d^a[b>>0];if((c|0)<=1)break;else{b=b+1|0;c=c+-1|0}}d=d&2147483647;return d|0}function aq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((b|0)==(d|0))a=av(a,c,b)|0;else a=1;return a|0}function bq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((b|0)==(d|0))a=Lu(a,c,b)|0;else a=1;return a|0}function cq(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;k=n+24|0;h=n+16|0;g=n;l=n+32|0;m=a+56+(d<<2)|0;i=c[m>>2]|0;c[l>>2]=i;j=i;if(!i){switch(d|0){case 18:{k=c[a+20>>2]|0;d=c[a+224>>2]|0;c[g>>2]=c[a+16>>2];c[g+4>>2]=k;c[g+8>>2]=d;g=Bb(52240,g)|0;d=133;break}case 7:{c[h>>2]=c[a+220>>2];g=Bb(51509,h)|0;d=129;break}default:{g=c[25936+(d<<2)>>2]|0;d=c[a+20>>2]|0;c[k>>2]=c[a+16>>2];c[k+4>>2]=d;g=Bb(g,k)|0;d=133}}if(!g){d=7;i=0}else{d=qd(c[a+12>>2]|0,g,-1,d,0,l,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{a=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}j=c[l>>2]|0;c[m>>2]=j;i=j}}else d=0;if((f|0)==0|(i|0)==0){f=d;c[e>>2]=j;Ra=n;return f|0}m=b[i+16>>1]|0;h=m<<16>>16;if(!(m<<16>>16>0&(d|0)==0)){f=d;c[e>>2]=j;Ra=n;return f|0}g=0;do{d=g;g=g+1|0;d=Yc(i,g,c[f+(d<<2)>>2]|0)|0}while((g|0)<(h|0)&(d|0)==0);c[e>>2]=j;Ra=n;return d|0}function dq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l;k=b+248|0;h=c[k>>2]|0;if(!h){i=b+244|0;h=c[i>>2]|0;if(!h){c[j>>2]=c[b+20>>2];h=Bb(53537,j)|0;c[i>>2]=h;if(!h){f=7;Ra=l;return f|0}}h=ad(c[b+12>>2]|0,c[b+16>>2]|0,h,53549,d,e,0,k)|0}else h=ld(h,d,e)|0;if(h|0){f=h;Ra=l;return f|0}h=c[k>>2]|0;if((h|0)!=0?(c[h+16>>2]|0)!=0:0)j=c[h>>2]|0;else j=0;c[g>>2]=j;if(!f){f=0;Ra=l;return f|0}i=nb(j+20|0)|0;do if(i){h=jd(c[k>>2]|0,i,j,0,81)|0;j=i+j|0;b=j+20|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(b|0));if(h)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);i=0;break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);i=0;break}else h=0}else{i=0;h=7}while(0);c[f>>2]=i;f=h;Ra=l;return f|0}function eq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;m=d+4|0;p=c[m>>2]|0;n=d+28|0;a:do if((c[n>>2]|0)==0?(o=(e|0)==0,(p|0)>0):0){l=0;b:while(1){j=c[(c[d>>2]|0)+(l<<2)>>2]|0;k=j+40|0;h=j+60|0;i=j+64|0;c:do if(o){g=fq(b,j)|0;if(g|0){q=43;break b}}else{do{g=fq(b,j)|0;if(g|0){q=43;break b}if(!(c[k>>2]|0))break c;r=c[h>>2]|0;g=Lu(c[i>>2]|0,e,(r|0)>(f|0)?f:r)|0;g=(g|0)==0?r-f|0:g}while((g|0)<0);if((g|0)!=0&(a[j+4>>0]|0)!=0){if(!(a[j+5>>0]|0)){g=c[k>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{r=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=j+52|0;h=c[g>>2]|0;do if(h|0){i=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,h);break}r=h;if((c[i+304>>2]|0)>>>0<=r>>>0?(c[i+308>>2]|0)>>>0>r>>>0:0){r=i+300|0;c[h>>2]=c[r>>2];c[r>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{r=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[g>>2]=0}c[k>>2]=0}}while(0);if(c[n>>2]|0)break a;l=l+1|0;if((l|0)>=(c[m>>2]|0))break a}if((q|0)==43)return g|0}while(0);e=c[d>>2]|0;n=p+-1|0;if((p|0)<=1){r=0;return r|0}b=n;while(1){d=b;b=b+-1|0;d:do if((d|0)<(p|0)){k=b;j=c[e+(b<<2)>>2]|0;do{l=k;k=k+1|0;f=e+(k<<2)|0;i=c[f>>2]|0;h=(c[j+40>>2]|0)==0;m=i;g=c[i+40>>2]|0;if(!h)if(!g){g=0;q=37}else{o=c[j+60>>2]|0;g=c[i+60>>2]|0;r=o-g|0;g=Lu(c[j+64>>2]|0,c[i+64>>2]|0,(r|0)<0?o:g)|0;g=(g|0)==0?r:g}else q=37;if((q|0)==37){q=0;g=(h&1)-((g|0)==0&1)|0}if(!g)g=(c[i>>2]|0)-(c[j>>2]|0)|0;if((g|0)<0)break d;r=e+(l<<2)|0;j=c[r>>2]|0;c[f>>2]=j;c[r>>2]=m}while((k|0)<(n|0))}while(0);if((d|0)<=1){g=0;break}}return g|0}function fq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=e+72|0;f=c[s>>2]|0;if(!f)f=c[e+40>>2]|0;else f=f+(c[e+76>>2]|0)|0;if((f|0)!=0?(g=e+40|0,h=c[g>>2]|0,f>>>0<(h+(c[e+44>>2]|0)|0)>>>0):0){l=f;i=h;q=g}else r=6;do if((r|0)==6){k=e+56|0;f=c[k>>2]|0;if(f|0){g=c[f>>2]|0;j=e+40|0;f=c[j>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{r=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[j>>2]=0;if(!g){s=0;return s|0}h=c[g+8>>2]|0;i=(c[h>>2]|0)+1|0;c[e+64>>2]=c[g+12>>2];c[e+60>>2]=c[g+16>>2];f=nb(i)|0;if(!f){s=7;return s|0}ew(f|0,c[h+4>>2]|0,i|0)|0;c[e+76>>2]=i;c[e+44>>2]=i;c[s>>2]=f;c[j>>2]=f;c[k>>2]=(c[k>>2]|0)+4;s=0;return s|0}j=e+40|0;if(!(a[e+5>>0]|0)){f=c[j>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=e+52|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}q=g;if((c[h+304>>2]|0)>>>0<=q>>>0?(c[h+308>>2]|0)>>>0>q>>>0:0){q=h+300|0;c[g>>2]=c[q>>2];c[q>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0}c[j>>2]=0;h=e+32|0;g=h;f=c[g>>2]|0;g=c[g+4>>2]|0;q=e+16|0;o=c[q+4>>2]|0;if(!((g|0)<(o|0)|((g|0)==(o|0)?f>>>0<(c[q>>2]|0)>>>0:0))){s=0;return s|0}q=Sv(f|0,g|0,1,0)|0;f=L()|0;o=h;c[o>>2]=q;c[o+4>>2]=f;f=dq(b,q,f,j,e+44|0)|0;if(!f){i=c[j>>2]|0;l=i;q=j;break}else{s=f;return s|0}}while(0);o=e+52|0;h=c[o>>2]|0;a:do if(h){f=i;j=l+20|0;b=e+48|0;k=e+44|0;g=c[b>>2]|0;if((j-f|0)>(g|0)){while(1){i=(c[k>>2]|0)-g|0;i=(i|0)<4096?i:4096;f=jd(h,f+g|0,i,g,81)|0;if(f|0){p=f;r=94;break}h=(c[b>>2]|0)+i|0;c[b>>2]=h;h=(c[q>>2]|0)+h|0;i=h+20|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));g=c[b>>2]|0;m=c[o>>2]|0;if((g|0)==(c[k>>2]|0))break;if(!m){k=0;break a}f=c[q>>2]|0;if((j-f|0)<=(g|0)){k=m;break a}else h=m}if((r|0)==94)return p|0;do if(m|0){f=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,m);break}n=m;if((c[f+304>>2]|0)>>>0<=n>>>0?(c[f+308>>2]|0)>>>0>n>>>0:0){n=f+300|0;c[m>>2]=c[n>>2];c[n>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[o>>2]=0;c[b>>2]=0;k=0}else k=h}else k=0;while(0);g=a[l>>0]|0;f=g&255;if(f&128){n=d[l+1>>0]|0;f=n<<7|g&127;if(n&128){n=d[l+2>>0]|0;f=n<<14|f&16383;if(n&128){n=d[l+3>>0]|0;f=n<<21|f&2097151;if(!(n&128))g=4;else{f=(a[l+4>>0]&7)<<28|f&268435455;g=5}}else g=3}else g=2}else g=1;i=l+g|0;h=a[i>>0]|0;g=h&255;if(g&128){n=d[i+1>>0]|0;g=n<<7|h&127;if(n&128){n=d[i+2>>0]|0;g=n<<14|g&16383;if(n&128){n=d[i+3>>0]|0;g=n<<21|g&2097151;if(!(n&128))h=4;else{g=(a[i+4>>0]&7)<<28|g&268435455;h=5}}else h=3}else h=2}else h=1;m=i+h|0;if((g|0)<1){s=267;return s|0}n=e+44|0;l=m;if(((c[q>>2]|0)+(c[n>>2]|0)-l|0)<(g|0)){s=267;return s|0}b=e+68|0;h=c[b>>2]|0;if((f|0)>(h|0)){s=267;return s|0}i=Sv(g|0,((g|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;j=L()|0;t=((h|0)<0)<<31>>31;do if((j|0)>(t|0)|(j|0)==(t|0)&i>>>0>h>>>0){j=cw(i|0,j|0,1)|0;h=L()|0;k=e+64|0;i=c[k>>2]|0;if(mb()|0){t=7;return t|0}h=sb(i,j,h)|0;if(!h){t=7;return t|0}else{c[k>>2]=h;c[b>>2]=j;h=c[o>>2]|0;break}}else h=k;while(0);b:do if(h|0){b=g+10+l|0;l=e+48|0;i=c[l>>2]|0;k=h;while(1){h=c[q>>2]|0;if((b-h|0)<=(i|0))break b;j=(c[n>>2]|0)-i|0;j=(j|0)<4096?j:4096;h=jd(k,h+i|0,j,i,81)|0;if(h|0){p=h;r=94;break}h=(c[l>>2]|0)+j|0;c[l>>2]=h;h=(c[q>>2]|0)+h|0;i=h+20|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));i=c[l>>2]|0;k=c[o>>2]|0;if((i|0)==(c[n>>2]|0))break;if(!k)break b}if((r|0)==94)return p|0;do if(k|0){h=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,k);break}t=k;if((c[h+304>>2]|0)>>>0<=t>>>0?(c[h+308>>2]|0)>>>0>t>>>0:0){t=h+300|0;c[k>>2]=c[t>>2];c[t>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[o>>2]=0;c[l>>2]=0}while(0);ew((c[e+64>>2]|0)+f|0,m|0,g|0)|0;c[e+60>>2]=g+f;h=m+g|0;f=a[h>>0]|0;g=f&255;i=e+76|0;if(g&128){t=d[h+1>>0]|0;f=t<<7|f&127;if(t&128){t=d[h+2>>0]|0;f=t<<14|f&16383;if(t&128){t=d[h+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){g=f;f=4}else{g=(a[h+4>>0]&7)<<28|f&268435455;f=5}}else{g=f;f=3}}else{g=f;f=2}}else f=1;c[i>>2]=g;f=h+f|0;c[s>>2]=f;c[e+80>>2]=0;if((g|0)>((c[n>>2]|0)-f+(c[q>>2]|0)|0)){t=267;return t|0}if((c[e+48>>2]|0)==0?a[f+(g+-1)>>0]|0:0){t=267;return t|0}t=0;return t|0}\nfunction qk(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Y=Ra;Ra=Ra+96|0;R=Y+32|0;Q=Y+24|0;O=Y+16|0;w=Y+8|0;u=Y;S=Y+56|0;T=Y+84|0;P=f+40|0;X=c[P>>2]|0;c[P>>2]=X+1;P=f+8|0;l=c[P>>2]|0;a:do if(!l){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))W=15;else{V=0;break a}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];V=n+284|0;c[V>>2]=(c[V>>2]|0)+1;break b}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];V=n+284|0;c[V>>2]=(c[V>>2]|0)+1;break b}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;W=15}while(0);if((W|0)==15)m=_d(n,224,0)|0;if(!m)V=0;else{o=m+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[P>>2]=m;Di(m,61,0,1,0)|0;V=m}}else V=l;while(0);N=(h&4|0)!=0;if(i)if(!(c[g+4>>2]&2048))M=i;else{o=c[c[g+20>>2]>>2]|0;p=c[o>>2]|0;c:do if((p|0)>0){l=0;while(1){m=c[o+4+(l*20|0)>>2]|0;n=a[m>>0]|0;if((n+91&255)<2)do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2);if(n<<24>>24==-88)n=a[m+38>>0]|0;switch(n<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0)break c;n=c[m+44>>2]|0;if(!n)break c;M=b[m+32>>1]|0;if(M<<16>>16>-1?(a[(c[n+4>>2]|0)+(M<<16>>16<<4)+12>>0]|0)==0:0)break c;break}default:break c}l=l+1|0;if((l|0)>=(p|0))break c}}else l=0;while(0);M=(l|0)==(p|0)?0:i}else M=0;d:do if(((((((((c[f+36>>2]|0)==0?(c[g+4>>2]&2080|0)==2048:0)?(s=c[g+20>>2]|0,(c[s+52>>2]|0)==0):0)?(c[s+8>>2]&9|0)==0:0)?(c[s+60>>2]|0)==0:0)?(c[s+36>>2]|0)==0:0)?(r=c[s+32>>2]|0,(c[r>>2]|0)==1):0)?(c[r+28>>2]|0)==0:0)?(x=c[r+24>>2]|0,(c[x+56>>2]|0)==0):0){H=c[s>>2]|0;I=c[H>>2]|0;J=(I|0)>0;if(J){l=0;do{if((a[c[H+4+(l*20|0)>>2]>>0]|0)!=-94){W=191;break d}l=l+1|0}while((l|0)<(I|0));if(!s){W=191;break}}m=c[x+72>>2]|0;if(!m)l=-1e6;else{n=c[(c[f>>2]|0)+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}o=l<<16;K=o>>16;p=c[f+116>>2]|0;p=(p|0)==0?f:p;l=p+84|0;m=c[l>>2]|0;n=1<<K;e:do if((((n&m|0)==0?(c[l>>2]=n|m,(o|0)==65536):0)?(v=c[p>>2]|0,t=v+16|0,(c[(c[t>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){l=Pe(c[v>>2]|0,0,v,S,0,542)|0;if(l|0){cd(p,32157,u);c[p+12>>2]=l;break}G=c[S>>2]|0;c[(c[t>>2]|0)+20>>2]=G;l=c[v+92>>2]|0;o=c[G+4>>2]|0;c[o+4>>2]=c[G>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;i=o+36|0;q=(c[p>>2]|0)-(c[i>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;G=(c[14820]|0)+1|0;c[14820]=G;c[14821]=(G|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;W=68;break}else{l=Wa[c[29352>>2]&127](m)|0;W=68}while(0);do if((W|0)==68){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{G=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);G=Se(c[o>>2]|0,p,q)|0;c[i>>2]=(c[p>>2]|0)-(q&65535);if((G|0)!=7)break;l=v+81|0;do if(!(a[l>>0]|0)){if(a[v+82>>0]|0)break;a[l>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;l=v+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[v+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break e}while(0)}while(0);Hj(f,K,c[x+28>>2]|0,0,c[x>>2]|0);G=(I|0)==1;if(G?(b[(c[H+4>>2]|0)+32>>1]|0)<0:0){m=V+108|0;l=c[m>>2]|0;if((c[V+112>>2]|0)>(l|0)){c[m>>2]=l+1;o=c[V+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0))}else l=Di(V,17,0,0,0)|0;Gj(f,X,K,x,108);c[w>>2]=c[x>>2];nk(f,0,39096,w);m=c[m>>2]|0;if(!(a[(c[V>>2]|0)+81>>0]|0))l=(c[V+104>>2]|0)+(((l|0)<0?m+-1|0:l)*20|0)|0;else l=59308;c[l+8>>2]=m;n=1;break}if(J){r=c[g+12>>2]|0;i=a[r>>0]|0;q=r+38|0;s=r+20|0;t=r+20|0;u=x+4|0;v=i<<24>>24==-125;f:do if(i<<24>>24==-88){p=1;i=0;m=a[q>>0]|0;while(1){switch(m<<24>>24){case -87:{l=s;W=95;break}case -125:{l=c[t>>2]|0;W=95;break}default:o=r}g:do if((W|0)==95){W=0;if((c[c[l>>2]>>2]|0)<2){o=r;break}do if(v)l=m;else{if(m<<24>>24==-125){l=-125;break}o=c[(c[s>>2]|0)+4+(i*20|0)>>2]|0;break g}while(0);o=c[(c[c[t>>2]>>2]|0)+4+(i*20|0)>>2]|0;m=l}while(0);l=b[(c[H+4+(i*20|0)>>2]|0)+32>>1]|0;if(l<<16>>16>-1)n=a[(c[u>>2]|0)+(l<<16>>16<<4)+13>>0]|0;else n=68;l=Xj(o)|0;if(n<<24>>24==0|l<<24>>24==0)l=(l|n)<<24>>24==0?65:(l&255)+(n&255)|0;else l=n<<24>>24>66|l<<24>>24>66?67:65;p=((l<<24>>24)+-65|0)>>>0<2?p:n<<24>>24>66&1;i=i+1|0;l=(p|0)!=0;if(!((i|0)<(I|0)&l))break f}}else{o=1;p=0;while(1){switch(i<<24>>24){case -87:{l=s;W=108;break}case -125:{l=c[t>>2]|0;W=108;break}default:m=r}h:do if((W|0)==108){W=0;if((c[c[l>>2]>>2]|0)<2){m=r;break}do if(!v){if((a[q>>0]|0)==-125)break;m=c[(c[s>>2]|0)+4+(p*20|0)>>2]|0;break h}while(0);m=c[(c[c[t>>2]>>2]|0)+4+(p*20|0)>>2]|0}while(0);l=b[(c[H+4+(p*20|0)>>2]|0)+32>>1]|0;if(l<<16>>16>-1)n=a[(c[u>>2]|0)+(l<<16>>16<<4)+13>>0]|0;else n=68;l=Xj(m)|0;if(n<<24>>24==0|l<<24>>24==0)l=(l|n)<<24>>24==0?65:(l&255)+(n&255)|0;else l=n<<24>>24>66|l<<24>>24>66?67:65;o=((l<<24>>24)+-65|0)>>>0<2?o:n<<24>>24>66&1;p=p+1|0;l=(o|0)!=0;if(!((p|0)<(I|0)&l))break f}}while(0);if(!l){W=191;break}}l=c[x+8>>2]|0;if(l){w=cw(1,0,I|0)|0;w=Sv(w|0,L()|0,-1,-1)|0;x=L()|0;y=g+12|0;z=(j|0)==0;D=V+108|0;A=V+112|0;F=V+104|0;C=(M|0)==0;E=f+44|0;B=l;i:while(1){l=b[B+52>>1]|0;m=l&65535;j:do if((I|0)<=(m|0)){if((l&65535)>62|(c[B+36>>2]|0)!=0)break;do if(N){if((I|0)<(e[B+50>>1]|0))break j;if((I|0)>=(m|0))break;if(!(a[B+54>>0]|0))break j}while(0);k:do if(J){u=B+4|0;v=B+32|0;t=0;m=0;l=0;while(1){n=c[y>>2]|0;p=a[n>>0]|0;if(p<<24>>24==-88)o=a[n+38>>0]|0;else o=p;switch(o<<24>>24){case -87:{o=n+20|0;W=135;break}case -125:{o=c[n+20>>2]|0;W=135;break}default:{}}l:do if((W|0)==135){if((c[c[o>>2]>>2]|0)<2)break;do if(p<<24>>24!=-125){if((a[n+38>>0]|0)==-125)break;n=c[(c[n+20>>2]|0)+4+(t*20|0)>>2]|0;break l}while(0);n=c[(c[c[n+20>>2]>>2]|0)+4+(t*20|0)>>2]|0}while(0);o=c[H+4+(t*20|0)>>2]|0;m:do if(!(c[n+4>>2]&256)){do if(o|0){if(!(c[o+4>>2]&256))break;n=Yi(f,o)|0;W=148;break m}while(0);n=Yi(f,n)|0;if(!n){n=Yi(f,o)|0;W=148;break}else{s=c[u>>2]|0;r=b[o+32>>1]|0;W=152;break}}else{n=Yi(f,n)|0;W=148}while(0);n:do if((W|0)==148){W=0;p=c[u>>2]|0;o=b[o+32>>1]|0;if(n|0){s=p;r=o;W=152;break}n=0;do{if((b[p+(n<<1)>>1]|0)==o<<16>>16)break n;n=n+1|0}while((n|0)<(I|0))}while(0);o:do if((W|0)==152){W=0;o=0;while(1){if((b[s+(o<<1)>>1]|0)==r<<16>>16){i=c[n>>2]|0;q=c[(c[v>>2]|0)+(o<<2)>>2]|0;Z=a[i>>0]|0;p=(d[208+(Z&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0;if(!(Z<<24>>24==0|(p|0)!=0))do{i=i+1|0;q=q+1|0;Z=a[i>>0]|0;p=(d[208+(Z&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(Z<<24>>24==0|(p|0)!=0));if(!p){n=o;break o}}o=o+1|0;if((o|0)>=(I|0)){n=o;break}}}while(0);if((n|0)==(I|0))break k;o=cw(1,0,n|0)|0;p=L()|0;if(!((o&m|0)==0&(p&l|0)==0))break k;m=o|m;l=p|l;if(!z)c[j+(t<<2)>>2]=n;t=t+1|0;if((t|0)>=(I|0))break k}}else{m=0;l=0}while(0);if((m|0)==(w|0)&(l|0)==(x|0))break i}while(0);l=c[B+20>>2]|0;if(!l){W=191;break d}else B=l}l=c[D>>2]|0;if((c[A>>2]|0)>(l|0)){c[D>>2]=l+1;o=c[F>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));o=l}else o=Di(V,17,0,0,0)|0;c[O>>2]=c[B>>2];nk(f,0,39143,O);l=c[B+44>>2]|0;m=c[D>>2]|0;if((c[A>>2]|0)>(m|0)){c[D>>2]=m+1;Z=c[F>>2]|0;a[Z+(m*20|0)>>0]=108;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=X;c[Z+(m*20|0)+8>>2]=l;c[Z+(m*20|0)+12>>2]=K;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(V,108,X,l,K)|0;m=c[P>>2]|0;n=Ij(f,B)|0;p:do if(n|0){l=c[m>>2]|0;if(!(a[l+81>>0]|0)){f=c[m+104>>2]|0;Z=(c[m+108>>2]|0)+-1|0;a[f+(Z*20|0)+1>>0]=-9;c[f+(Z*20|0)+16>>2]=n;break}if(c[l+480>>2]|0)break;Z=(c[n>>2]|0)+-1|0;c[n>>2]=Z;if(Z|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break p}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[n>>2]=c[Z>>2];c[Z>>2]=n;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Z=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);n=(d[c[B+28>>2]>>0]|0)+3|0;do if(!C){l=(c[E>>2]|0)+1|0;c[E>>2]=l;c[M>>2]=l;if(!G)break;sk(V,X,l)}while(0);m=c[D>>2]|0;if(!(a[(c[V>>2]|0)+81>>0]|0))l=(c[F>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m}else W=191}else W=191;while(0);do if((W|0)==191){if(h&1|0?(c[g+4>>2]&2048|0)==0:0){O=g+12|0;h=c[O>>2]|0;c[O>>2]=0;Z=S+20|0;a[Z>>0]=1;c[S+4>>2]=127;c[S+8>>2]=128;c[S+24>>2]=0;_j(S,g)|0;Z=a[Z>>0]|0;c[O>>2]=h;if(!(Z<<24>>24)){n=5;break}if((c[c[g+20>>2]>>2]|0)<3){n=5;break}}F=f+132|0;G=c[F>>2]|0;if(!N)if(!M)E=0;else{Z=f+44|0;E=(c[Z>>2]|0)+1|0;c[Z>>2]=E;c[M>>2]=E}else{c[F>>2]=0;E=0}D=c[P>>2]|0;u=g+4|0;l=c[u>>2]|0;do if((l&32|0)==0?(c[f+52>>2]|0)==0:0){if(!(l&33554432)){c[u>>2]=l|33554432;n=f+44|0;l=(c[n>>2]|0)+1|0;c[n>>2]=l;c[g+48>>2]=l;n=D+108|0;m=c[n>>2]|0;o=D+112|0;if((c[o>>2]|0)>(m|0)){Z=m+1|0;c[n>>2]=Z;W=c[D+104>>2]|0;a[W+(m*20|0)>>0]=70;b[W+(m*20|0)+2>>1]=0;c[W+(m*20|0)+4>>2]=0;c[W+(m*20|0)+8>>2]=l;c[W+(m*20|0)+12>>2]=0;c[W+(m*20|0)+16>>2]=0;a[W+(m*20|0)+1>>0]=0;l=Z}else l=(Di(D,70,0,l,0)|0)+1|0;c[g+44>>2]=l;l=c[n>>2]|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;o=c[D+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));m=l;W=223;break}else{m=Di(D,17,0,0,0)|0;W=223;break}}p=D+108|0;l=c[p>>2]|0;i=D+112|0;if((c[i>>2]|0)>(l|0)){c[p>>2]=l+1;o=c[D+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));o=l}else o=Di(D,17,0,0,0)|0;if(c[u>>2]&2048|0){c[Q>>2]=c[(c[g+20>>2]|0)+20>>2];nk(f,0,39174,Q)}l=c[g+48>>2]|0;m=c[g+44>>2]|0;n=c[p>>2]|0;if((c[i>>2]|0)>(n|0)){c[p>>2]=n+1;Z=c[D+104>>2]|0;a[Z+(n*20|0)>>0]=12;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=l;c[Z+(n*20|0)+8>>2]=m;c[Z+(n*20|0)+12>>2]=0;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else Di(D,12,l,m,0)|0;l=c[g+28>>2]|0;m=c[p>>2]|0;if((c[i>>2]|0)>(m|0)){c[p>>2]=m+1;Z=c[D+104>>2]|0;a[Z+(m*20|0)>>0]=111;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=X;c[Z+(m*20|0)+8>>2]=l;c[Z+(m*20|0)+12>>2]=0;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(D,111,X,l,0)|0;m=c[p>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m}else{m=0;W=223}while(0);do if((W|0)==223){s=g+12|0;v=c[s>>2]|0;l=a[v>>0]|0;if(l<<24>>24==-88)l=a[v+38>>0]|0;switch(l<<24>>24){case -87:{l=v+20|0;W=228;break}case -125:{l=c[v+20>>2]|0;W=228;break}default:t=1}if((W|0)==228)t=c[c[l>>2]>>2]|0;c[g+28>>2]=X;C=D+108|0;l=c[C>>2]|0;B=D+112|0;if((c[B>>2]|0)>(l|0)){c[C>>2]=l+1;A=c[D+104>>2]|0;a[A+(l*20|0)>>0]=113;b[A+(l*20|0)+2>>1]=0;c[A+(l*20|0)+4>>2]=X;c[A+(l*20|0)+8>>2]=t;c[A+(l*20|0)+12>>2]=0;c[A+(l*20|0)+16>>2]=0;a[A+(l*20|0)+1>>0]=0;A=l}else A=Di(D,113,X,t,0)|0;q=c[f>>2]|0;p=t+1|0;i=p*5|0;o=i+20|0;r=q+272|0;q:do if(c[r>>2]|0)if(!(a[q+81>>0]|0))W=242;else{z=0;y=1;x=0}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<o>>>0:0))){l=q+300|0;n=c[l>>2]|0;if(n|0){c[l>>2]=c[n>>2];W=q+284|0;c[W>>2]=(c[W>>2]|0)+1;W=243;break q}l=q+296|0;n=c[l>>2]|0;if(!n){l=q+292|0;break}else{c[l>>2]=c[n>>2];W=q+284|0;c[W>>2]=(c[W>>2]|0)+1;W=243;break q}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;W=242}while(0);if((W|0)==242){n=_d(q,o,0)|0;W=243}do if((W|0)==243){if(n|0){c[n+16>>2]=n+20+(p<<2);b[n+6>>1]=t;b[n+8>>1]=p;a[n+4>>0]=a[q+78>>0]|0;c[n+12>>2]=q;c[n>>2]=1;gw(n+24|0,0,i+-4|0)|0;z=n;y=0;x=n;break}l=q+81|0;if((a[l>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[r>>2]=(c[r>>2]|0)+1;l=c[q+236>>2]|0;if(l){c[l+12>>2]=7;z=0;y=1;x=n}else{z=0;y=1;x=n}}else{z=0;y=1;x=n}}while(0);if(!(c[u>>2]&2048)){o=c[g+20>>2]|0;if(!o)o=m;else{Z=Xj(v)|0;a[T>>0]=Z<<24>>24==0?65:Z;if(x|0){Z=Yi(f,c[s>>2]|0)|0;c[x+20>>2]=Z}w=f+19|0;n=a[w>>0]|0;if(n<<24>>24){Z=n+-1<<24>>24;a[w>>0]=Z;l=c[f+148+((Z&255)<<2)>>2]|0;if(!(Z<<24>>24))W=302;else{v=n+-2<<24>>24;a[w>>0]=v;v=c[f+148+((v&255)<<2)>>2]|0}}else{W=f+44|0;l=(c[W>>2]|0)+1|0;c[W>>2]=l;W=302}if((W|0)==302){Z=f+44|0;v=(c[Z>>2]|0)+1|0;c[Z>>2]=v}n=c[o>>2]|0;if((n|0)>0){q=S+20|0;r=S+4|0;s=S+8|0;t=S+24|0;u=D+104|0;i=o+4|0;p=n;while(1){o=c[i>>2]|0;do if(!m)m=0;else{a[q>>0]=1;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(!o)break;_j(S,o)|0;if(a[q>>0]|0)break;n=c[D>>2]|0;if(a[n+81>>0]|0){m=0;break}Z=c[u>>2]|0;Q=Z+(m*20|0)+1|0;R=Z+(m*20|0)+16|0;kg(n,a[Q>>0]|0,c[R>>2]|0);a[Q>>0]=0;c[R>>2]=0;a[Z+(m*20|0)>>0]=-86;m=0}while(0);o=Jj(f,o,l)|0;n=c[C>>2]|0;if((c[B>>2]|0)>(n|0)){c[C>>2]=n+1;Z=c[u>>2]|0;a[Z+(n*20|0)>>0]=92;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=o;c[Z+(n*20|0)+8>>2]=1;c[Z+(n*20|0)+12>>2]=v;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else n=Di(D,92,o,1,v)|0;if(!(a[(c[D>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[C>>2]|0)+-1|0;Ei(D,(c[u>>2]|0)+(n*20|0)|0,T,1)}n=c[C>>2]|0;if((c[B>>2]|0)>(n|0)){c[C>>2]=n+1;Z=c[u>>2]|0;a[Z+(n*20|0)>>0]=-124;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=X;c[Z+(n*20|0)+8>>2]=v;c[Z+(n*20|0)+12>>2]=o;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else n=Di(D,132,X,v,o)|0;if(!(a[(c[D>>2]|0)+81>>0]|0)){Z=c[u>>2]|0;a[Z+(n*20|0)+1>>0]=-3;c[Z+(n*20|0)+16>>2]=1}if((p|0)>1){i=i+20|0;p=p+-1|0}else break}}if(l|0?(U=a[w>>0]|0,(U&255)<8):0){a[w>>0]=U+1<<24>>24;c[f+148+((U&255)<<2)>>2]=l}do if(v|0){l=a[w>>0]|0;if((l&255)>=8)break;a[w>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=v}while(0);o=m}}else{l=c[g+20>>2]|0;r=c[l>>2]|0;Z=c[l+20>>2]|0;c[R>>2]=(m|0)==0?39084:59952;c[R+4>>2]=Z;nk(f,1,39197,R);if((c[r>>2]|0)==(t|0)){a[R>>0]=11;c[R+4>>2]=X;o=R+16|0;c[R+8>>2]=0;c[R+12>>2]=0;n=pk(f,g)|0;c[o>>2]=n;c[l+12>>2]=0;l=(kj(f,l,R)|0)==0;n=c[f>>2]|0;o=c[o>>2]|0;r:do if(o|0){do if(n|0){if(c[n+480>>2]|0){Xd(n,o);break r}p=o;if((c[n+304>>2]|0)>>>0<=p>>>0){if((c[n+308>>2]|0)>>>0<=p>>>0)break;Z=n+300|0;c[o>>2]=c[Z>>2];c[Z>>2]=o;break r}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{Z=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);if(!l){s:do if(x|0?(Z=(c[x>>2]|0)+-1|0,c[x>>2]=Z,(Z|0)==0):0){l=c[x+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,z);break s}m=x;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[x>>2]=c[Z>>2];c[Z>>2]=x;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{Z=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);break}t:do if((t|0)>0){p=v+38|0;i=v+20|0;q=v+20|0;o=0;while(1){n=a[v>>0]|0;if(n<<24>>24==-88)l=a[p>>0]|0;else l=n;switch(l<<24>>24){case -87:{l=i;W=281;break}case -125:{l=c[q>>2]|0;W=281;break}default:l=v}u:do if((W|0)==281){W=0;if((c[c[l>>2]>>2]|0)<2){l=v;break}do if(n<<24>>24!=-125){if((a[p>>0]|0)==-125)break;l=c[(c[i>>2]|0)+4+(o*20|0)>>2]|0;break u}while(0);l=c[(c[c[q>>2]>>2]|0)+4+(o*20|0)>>2]|0}while(0);n=c[r+4+(o*20|0)>>2]|0;v:do if(!(c[l+4>>2]&256)){do if(n|0){if(!(c[n+4>>2]&256))break;l=Yi(f,n)|0;break v}while(0);l=Yi(f,l)|0;if(l|0)break;l=Yi(f,n)|0}else l=Yi(f,l)|0;while(0);c[x+20+(o<<2)>>2]=l;o=o+1|0;if((o|0)==(t|0))break t}}while(0);o=m}else o=m}w:do if(x|0){l=c[D>>2]|0;if(!(a[l+81>>0]|0)){if((A|0)<0)l=(c[C>>2]|0)+-1|0;else l=A;m=c[D+104>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(D,m+(l*20|0)|0,z,-9);break}if(y)break;c[m+(l*20|0)+16>>2]=z;a[n>>0]=-9;break}if(!(y|(c[l+480>>2]|0)!=0)?(Z=(c[z>>2]|0)+-1|0,c[z>>2]=Z,(Z|0)==0):0){l=c[z+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,z);break w}m=z;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[z>>2]=c[Z>>2];c[Z>>2]=z;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{Z=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}}while(0);if(o|0){m=c[C>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m;l=c[g+48>>2]|0;if((c[B>>2]|0)>(m|0)){c[C>>2]=m+1;Z=c[D+104>>2]|0;a[Z+(m*20|0)>>0]=66;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=l;c[Z+(m*20|0)+8>>2]=0;c[Z+(m*20|0)+12>>2]=0;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(D,66,l,0,0)|0;l=c[g+44>>2]|0;m=c[C>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+((((l|0)<1?m:l)+-1|0)*20|0)|0;else l=59308;c[l+4>>2]=m+-1}}while(0);if(E|0)sk(V,X,E);c[F>>2]=G;n=2}while(0);if(!((j|0)!=0&(n+-3|0)>>>0>1)){c[k>>2]=X;Ra=Y;return n|0}m=c[g+12>>2]|0;l=a[m>>0]|0;if(l<<24>>24==-88)l=a[m+38>>0]|0;switch(l<<24>>24){case -87:{l=m+20|0;W=369;break}case -125:{l=c[m+20>>2]|0;W=369;break}default:l=1}if((W|0)==369){l=c[c[l>>2]>>2]|0;if((l|0)<=0){c[k>>2]=X;Ra=Y;return n|0}}m=0;do{c[j+(m<<2)>>2]=m;m=m+1|0}while((m|0)!=(l|0));c[k>>2]=X;Ra=Y;return n|0}function rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a+116>>2]|0;f=(f|0)==0?a:f;a=f+84|0;d=c[a>>2]|0;e=1<<b;if(d&e|0)return;c[a>>2]=d|e;if((b|0)!=1)return;Oe(f)|0;return}function sk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=d+108|0;g=c[i>>2]|0;j=d+112|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=70;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=0;c[h+(g*20|0)+8>>2]=f;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0}else Di(d,70,0,f,0)|0;g=c[i>>2]|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=36;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=e;c[h+(g*20|0)+8>>2]=0;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0;h=g}else h=Di(d,36,e,0,0)|0;g=c[i>>2]|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;j=c[d+104>>2]|0;a[j+(g*20|0)>>0]=90;b[j+(g*20|0)+2>>1]=0;c[j+(g*20|0)+4>>2]=e;c[j+(g*20|0)+8>>2]=0;c[j+(g*20|0)+12>>2]=f;c[j+(g*20|0)+16>>2]=0;a[j+(g*20|0)+1>>0]=0}else Di(d,90,e,0,f)|0;g=c[i>>2]|0;if((g|0)>0)b[(c[d+104>>2]|0)+((g+-1|0)*20|0)+2>>1]=128;if(a[(c[d>>2]|0)+81>>0]|0){d=59308;d=d+8|0;c[d>>2]=g;return}d=(c[d+104>>2]|0)+(((h|0)<0?g+-1|0:h)*20|0)|0;d=d+8|0;c[d>>2]=g;return}function tk(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;m=t+8|0;p=t+4|0;s=t;o=c[d+8>>2]|0;c[p>>2]=0;c[s>>2]=0;if((e|0)==0|(o|0)==0){Ra=t;return}j=a[e>>0]|0;k=j&255;a:do switch(j<<24>>24){case 44:{l=d+56|0;m=c[l>>2]|0;h=m+-1|0;c[l>>2]=h;Tj(d,c[e+12>>2]|0,h,g^16);tk(d,c[e+16>>2]|0,f,g);h=c[o+12>>2]|0;g=0-m|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}case 43:{tk(d,c[e+12>>2]|0,f,g);tk(d,c[e+16>>2]|0,f,g);break}case 19:{Tj(d,c[e+12>>2]|0,f,g);break}case -89:{o=(a[e+38>>0]|0)==-96;h=c[e+12>>2]|0;g=o?16:0;if(o^(a[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>0]|0)==0){tk(d,h,f,g);break a}else{Tj(d,h,f,g);break a}}case -96:case 45:{g=128;i=j<<24>>24==45?53:52;n=12;break}case 53:case 52:case 57:case 54:case 55:case 56:{i=k;n=12;break}case 51:case 50:{h=Lj(d,c[e+12>>2]|0,p)|0;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=j;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break a}else{Di(o,k,h,f,0)|0;break a}}case 48:{Sj(d,c[e+12>>2]|0,c[e+20>>2]|0,f,67,g);break}case 49:{h=d+56|0;j=c[h>>2]|0;i=j+-1|0;c[h>>2]=i;Rj(d,e,i,(g|0)==0?i:f);i=o+108|0;h=c[i>>2]|0;if((c[o+112>>2]|0)>(h|0)){c[i>>2]=h+1;e=c[o+104>>2]|0;a[e+(h*20|0)>>0]=11;b[e+(h*20|0)+2>>1]=0;c[e+(h*20|0)+4>>2]=0;c[e+(h*20|0)+8>>2]=f;c[e+(h*20|0)+12>>2]=0;c[e+(h*20|0)+16>>2]=0;a[e+(h*20|0)+1>>0]=0}else Di(o,11,0,f,0)|0;g=c[o+12>>2]|0;h=0-j|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0){mk(g,o,h);break a}else{c[(c[g+64>>2]|0)+(h<<2)>>2]=c[i>>2];break a}}default:{c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)!=0&1;else h=0;n=37}}while(0);do if((n|0)==12){j=e+12|0;k=c[j>>2]|0;h=a[k>>0]|0;if(h<<24>>24==-88)h=a[k+38>>0]|0;switch(h<<24>>24){case -87:{l=k+20|0;n=17;break}case -125:{l=c[k+20>>2]|0;n=17;break}default:{}}if((n|0)==17?(c[c[l>>2]>>2]|0)>=2:0){c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)!=0&1;else h=0;n=37;break}m=Lj(d,k,p)|0;e=e+16|0;o=Lj(d,c[e>>2]|0,s)|0;Mj(d,c[j>>2]|0,c[e>>2]|0,i,m,o,f,g)}while(0);do if((n|0)==37){if(h|0){h=o+108|0;g=c[h>>2]|0;if((c[o+112>>2]|0)>(g|0)){c[h>>2]=g+1;o=c[o+104>>2]|0;a[o+(g*20|0)>>0]=11;b[o+(g*20|0)+2>>1]=0;c[o+(g*20|0)+4>>2]=0;c[o+(g*20|0)+8>>2]=f;c[o+(g*20|0)+12>>2]=0;c[o+(g*20|0)+16>>2]=0;a[o+(g*20|0)+1>>0]=0;break}else{Di(o,11,0,f,0)|0;break}}c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0){if(!(c[m>>2]|0))break}else n=43;j=Lj(d,e,p)|0;h=(g|0)!=0&1;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=18;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=j;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break}else{Di(o,18,j,f,h)|0;break}}while(0);h=c[p>>2]|0;if(h|0?(q=d+19|0,r=a[q>>0]|0,(r&255)<8):0){a[q>>0]=r+1<<24>>24;c[d+148+((r&255)<<2)>>2]=h}h=c[s>>2]|0;if(!h){Ra=t;return}g=d+19|0;i=a[g>>0]|0;if((i&255)>=8){Ra=t;return}a[g>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=h;Ra=t;return}function uk(b,d){b=b|0;d=d|0;var e=0,f=0;f=Ra;Ra=Ra+16|0;e=f;a:do if(!b)b=0;else{if(c[b+4>>2]&1024|0){c[d>>2]=c[b+8>>2];b=1;break}switch(a[b>>0]|0){case -90:{b=uk(c[b+12>>2]|0,d)|0;break a}case -91:break;default:{b=0;break a}}if(!(uk(c[b+12>>2]|0,e)|0))b=0;else{c[d>>2]=0-(c[e>>2]|0);b=1}}while(0);Ra=f;return b|0}function vk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;j=k;f=c[b>>2]|0;if(a[f+165>>0]|0){j=0;Ra=k;return j|0}if(a[b+18>>0]|0){j=0;Ra=k;return j|0}if((e|0)==0|(0==0?(c[f+32>>2]&268435457|0)==1:0)){j=0;Ra=k;return j|0}f=a[e>>0]|0;do if(!(f<<24>>24)){f=39441;h=5}else{l=f&255;f=208+l|0;if((l|32|0)==115){f=a[e+1>>0]|0;if(!(f<<24>>24)){f=39442;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==113){f=a[e+2>>0]|0;if(!(f<<24>>24)){f=39443;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==108){f=a[e+3>>0]|0;if(!(f<<24>>24)){f=39444;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==105){f=a[e+4>>0]|0;if(!(f<<24>>24)){f=39445;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==116){f=a[e+5>>0]|0;if(!(f<<24>>24)){f=39446;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==101){f=a[e+6>>0]|0;if(!(f<<24>>24)){f=39447;h=5;break}if(f<<24>>24==95)break;else{g=95;f=208+(f&255)|0}}else g=101}else g=116}else g=105}else g=108}else g=113}else g=115;i=d[f>>0]|0;h=9}while(0);if((h|0)==5){i=0;g=a[208+(d[f>>0]|0)>>0]|0;h=9}if((h|0)==9?(i|0)!=(g&255|0):0){l=0;Ra=k;return l|0}c[j>>2]=e;cd(b,39449,j);l=1;Ra=k;return l|0}function wk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=qj(b,e)|0;if(!j){k=-1;return k|0}i=c[b+20>>2]|0;e=i+-1|0;if((i|0)>0){i=e;h=(c[b+16>>2]|0)+(e<<4)|0;while(1){f=c[h>>2]|0;if(f|0){g=a[f>>0]|0;e=(d[208+(g&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(g<<24>>24==0|(e|0)!=0)){g=j;do{f=f+1|0;g=g+1|0;l=a[f>>0]|0;e=(d[208+(l&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0}while(!(l<<24>>24==0|(e|0)!=0))}if(!e){e=i;break}}if(!i){k=10;break}e=i+-1|0;if((i|0)>0){i=e;h=h+-16|0}else break}if((k|0)==10){e=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!e){f=j;g=50919;do{g=g+1|0;f=f+1|0;l=a[g>>0]|0;e=(d[208+(l&255)>>0]|0)-(d[208+(d[f>>0]|0)>>0]|0)|0}while(!(l<<24>>24==0|(e|0)!=0))}e=((e|0)!=0)<<31>>31}if(b)k=16}else k=16;if((k|0)==16){if(c[b+480>>2]|0){Xd(b,j);l=e;return l|0}l=j;if((c[b+304>>2]|0)>>>0<=l>>>0?(c[b+308>>2]|0)>>>0>l>>>0:0){l=b+300|0;c[j>>2]=c[l>>2];c[l>>2]=j;l=e;return l|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);l=e;return l|0}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);l=e;return l|0}return 0}function xk(a){a=a|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[(c[a+12>>2]|0)+4>>2]|0;f=b[a+52>>1]|0;if(!(f<<16>>16)){k=0;a=a+48|0;b[a>>1]=k;return}k=c[a+4>>2]|0;i=f&65535;g=0;h=0;do{f=b[k+(g<<1)>>1]|0;if(f<<16>>16<0)f=1;else f=d[j+(f<<16>>16<<4)+14>>0]|0;h=f+h|0;g=g+1|0}while(g>>>0<i>>>0);f=h<<2;if(f>>>0>=8){if(f>>>0>255){h=40;g=0;do{h=(h&65535)+40|0;k=f;f=bw(f|0,g|0,4)|0;j=g;g=L()|0}while(j>>>0>0|(j|0)==0&k>>>0>4095);h=h&65535}else{h=40;g=0}if(g>>>0>0|(g|0)==0&f>>>0>15)do{h=(h&65535)+10&65535;k=f;f=bw(f|0,g|0,1)|0;j=g;g=L()|0}while(j>>>0>0|(j|0)==0&k>>>0>31)}else{if(!f){k=0;a=a+48|0;b[a>>1]=k;return}h=40;g=0;do{h=(h&65535)+65526|0;f=cw(f|0,g|0,1)|0;g=L()|0}while(g>>>0<0|(g|0)==0&f>>>0<8);h=h&65535}k=(h&65535)+65526+(e[3648+((f&7)<<1)>>1]|0)&65535;a=a+48|0;b[a>>1]=k;return}function yk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=c[d>>2]|0;j=k+32|0;h=j;g=c[h>>2]|0;h=c[h+4>>2]|0;l=j;c[l>>2]=g&-69|64;c[l+4>>2]=h;Kk(d,f,0);c[j>>2]=g;c[j+4>>2]=h;if(c[d+36>>2]|0){l=0;return l|0}j=f;while(1){f=c[j+52>>2]|0;if(!f)break;else j=f}a:do if(!k){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](80)|0;i=27;break}f=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){l=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=l>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){l=0;return l|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){l=0;return l|0}}else{do if((e[k+276>>1]|0)>=80){g=k+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;i=27;break a}g=k+296|0;f=c[g>>2]|0;if(!f){f=k+292|0;break}else{c[g>>2]=c[f>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;i=27;break a}}else f=k+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(k,80,0)|0;i=27}while(0);if((i|0)==27)if(!f){l=0;return l|0}g=f+4|0;h=g+76|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));g=f+32|0;c[g>>2]=1;c[f>>2]=0;b[f+44>>1]=200;Tk(c[d>>2]|0,c[j>>2]|0,f+42|0,f+4|0);Uk(d,f,j);b[f+40>>1]=-1;if(!(a[k+81>>0]|0)){l=f;return l|0}if(c[k+480>>2]|0){Vi(k,f);l=0;return l|0}l=(c[g>>2]|0)+-1|0;c[g>>2]=l;if(l|0){l=0;return l|0}Vi(k,f);l=0;return l|0}function zk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=e+20|0;g=c[l>>2]|0;a:do if(!g){j=c[d>>2]|0;k=e+42|0;i=b[k>>1]|0;g=(i<<16>>16)+1|0;do if(i<<16>>16>=0){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](g)|0;if(!g)break;else j=g}else{i=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){m=c[14978]|0;h=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=m>>>0)&1}h=Wa[c[29340>>2]&127](i)|0;if(!h)break;g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;j=h}else j=h}if((b[k>>1]|0)>0){h=e+4|0;g=0;do{a[j+g>>0]=a[(c[h>>2]|0)+(g<<4)+13>>0]|0;g=g+1|0}while((g|0)<(b[k>>1]|0))}else g=0;do{a[j+g>>0]=0;if((g|0)<=0)break;g=g+-1|0}while((a[j+g>>0]|0)==65);c[l>>2]=j;break a}while(0);g=j+81|0;if(a[g>>0]|0)return;if(a[j+82>>0]|0)return;a[g>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;g=j+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[j+236>>2]|0;if(!g)return;c[g+12>>2]=7;return}else j=g;while(0);e=(Eu(j)|0)&1073741823;if(!e)return;if(!f){g=c[d>>2]|0;if(!(a[g+81>>0]|0)){Ei(d,(c[d+104>>2]|0)+(((c[d+108>>2]|0)+-1|0)*20|0)|0,j,e);return}else{kg(g,e,j);return}}i=d+108|0;g=c[i>>2]|0;if((c[d+112>>2]|0)>(g|0)){c[i>>2]=g+1;m=c[d+104>>2]|0;a[m+(g*20|0)>>0]=91;b[m+(g*20|0)+2>>1]=0;c[m+(g*20|0)+4>>2]=f;c[m+(g*20|0)+8>>2]=e;c[m+(g*20|0)+12>>2]=0;c[m+(g*20|0)+16>>2]=0;a[m+(g*20|0)+1>>0]=0}else g=Di(d,91,f,e,0)|0;h=c[d>>2]|0;if(a[h+81>>0]|0){kg(h,e,j);return}if((g|0)<0)g=(c[i>>2]|0)+-1|0;Ei(d,(c[d+104>>2]|0)+(g*20|0)|0,j,e);return}function Ak(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+224|0;l=r+192|0;j=r+96|0;o=r+184|0;p=r;c[o>>2]=0;q=c[b>>2]|0;n=b+36|0;if(c[n>>2]|0){Ra=r;return}c[j>>2]=e;h=c[q+108>>2]|0;f=l+4|0;c[f>>2]=r+112;c[l>>2]=q;c[l+8>>2]=70;g=l+12|0;c[g>>2]=h;h=l+16|0;c[h>>2]=0;k=l+20|0;a[k>>0]=0;i=l+21|0;a[i>>0]=1;tb(l,d,j);e=c[f>>2]|0;if(((e|0)!=0?(a[e+(c[h>>2]|0)>>0]=0,(c[g>>2]|0)!=0):0)?(a[i>>0]&4)==0:0)i=$d(l)|0;else i=c[f>>2]|0;if(((a[k>>0]|0)==7?(m=q+81|0,(a[m>>0]|0)==0):0)?(a[q+82>>0]|0)==0:0){a[m>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;e=q+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[q+236>>2]|0;if(e|0)c[e+12>>2]=7}if(!i){if(!(a[q+81>>0]|0))c[b+12>>2]=18;c[n>>2]=(c[n>>2]|0)+1;Ra=r;return}g=b+18|0;a[g>>0]=(a[g>>0]|0)+1<<24>>24;h=b+188|0;e=p;d=h;f=e+88|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));e=h;f=e+88|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));ud(b,i,o)|0;d=c[o>>2]|0;e=q+480|0;do if(d|0){if(c[e>>2]|0){Xd(q,d);break}o=d;if((c[q+304>>2]|0)>>>0<=o>>>0?(c[q+308>>2]|0)>>>0>o>>>0:0){o=q+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);do if(!(c[e>>2]|0)){o=i;if((c[q+304>>2]|0)>>>0<=o>>>0?(c[q+308>>2]|0)>>>0>o>>>0:0){q=q+300|0;c[i>>2]=c[q>>2];c[q>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{q=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(q,i);while(0);e=h;d=p;f=e+88|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));a[g>>0]=(a[g>>0]|0)+-1<<24>>24;Ra=r;return}function Bk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0;h=d+108|0;g=c[h>>2]|0;if((c[d+112>>2]|0)>(g|0)){c[h>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=-115;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=e;c[h+(g*20|0)+8>>2]=0;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0}else g=Di(d,141,e,0,0)|0;gd(d,g,f,-7);if((c[(c[d>>2]|0)+20>>2]|0)<=0)return;g=0;do{fd(d,g);g=g+1|0}while((g|0)<(c[(c[d>>2]|0)+20>>2]|0));return}function Ck(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+32|0;i=m;g=m+4|0;if(!d){l=0;Ra=m;return l|0}k=a+24|0;l=e[k>>1]|0;b[k>>1]=l&28655;f=c[a>>2]|0;c[g>>2]=f;c[g+4>>2]=125;c[g+8>>2]=126;c[g+12>>2]=0;c[g+24>>2]=a;j=d+24|0;h=f+208|0;n=(c[h>>2]|0)+(c[j>>2]|0)|0;c[h>>2]=n;h=c[(c[f>>2]|0)+120>>2]|0;if((h|0)<(n|0)){c[i>>2]=h;cd(f,41637,i);n=1;Ra=m;return n|0}_j(g,d)|0;f=c[g>>2]|0;n=f+208|0;c[n>>2]=(c[n>>2]|0)-(c[j>>2]|0);n=b[k>>1]|0;j=d+4|0;c[j>>2]=c[j>>2]|n&-32752&65535;b[k>>1]=l&36880|n&65535;if((c[a+20>>2]|0)>0){n=1;Ra=m;return n|0}n=(c[f+36>>2]|0)>0&1;Ra=m;return n|0}function Dk(f,h){f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0.0,qa=0;oa=Ra;Ra=Ra+272|0;r=oa+248|0;m=oa+240|0;p=oa+232|0;O=oa+224|0;N=oa+216|0;M=oa+208|0;J=oa+200|0;I=oa+192|0;H=oa+176|0;G=oa+160|0;D=oa+152|0;C=oa+144|0;B=oa+136|0;z=oa+128|0;y=oa+120|0;w=oa+112|0;ja=oa+104|0;ia=oa+88|0;ha=oa+72|0;ba=oa+64|0;ga=oa+56|0;da=oa+48|0;ca=oa+40|0;o=oa+32|0;R=oa;K=oa+252|0;i=c[f+24>>2]|0;na=c[i>>2]|0;a:do switch(a[h>>0]|0){case 55:case 56:case 52:case 53:case 48:case 54:case 57:{ma=385;break}case -95:{F=h+20|0;v=c[F>>2]|0;u=(v|0)==0;if(u)p=0;else p=c[v>>2]|0;j=c[na>>2]|0;m=a[j+78>>0]|0;P=i+24|0;Q=b[P>>1]&16385;t=c[h+8>>2]|0;if(!t)s=0;else s=(Eu(t)|0)&1073741823;r=Jd(j,t,p,m,0)|0;if(r){o=(c[r+20>>2]|0)!=0&1;q=r+4|0;do if(c[q>>2]&1024|0){la=h+4|0;c[la>>2]=c[la>>2]|266240;if((p|0)!=2){c[h+28>>2]=(a[c[r+32>>2]>>0]|0)==117?8388608:125829120;break}j=c[v+24>>2]|0;g[R>>3]=-1.0;if((a[j>>0]|0)==-111){m=c[j+8>>2]|0;if(!m)j=0;else j=(Eu(m)|0)&1073741823;Lg(m,R,j,1)|0;pa=+g[R>>3];j=~~(pa*134217728.0);if(!(pa>1.0)){c[h+28>>2]=j;if((j|0)>=0)break}else ma=247}else ma=247;if((ma|0)==247)c[h+28>>2]=-1;cd(na,39784,w);la=i+20|0;c[la>>2]=(c[la>>2]|0)+1}while(0);p=r+32|0;j=c[p>>2]|0;m=c[na>>2]|0;b:do if(((a[m+165>>0]|0)==0?(a[na+200>>0]|0)==0:0)?(x=c[m+312>>2]|0,x|0):0){j=$a[x&127](c[m+316>>2]|0,31,0,j,0,c[na+240>>2]|0)|0;do if((j|0)!=1)if((j|2|0)==2)if(!j)break b;else break;else{cd(na,39231,z);j=1;ma=259;break}else{cd(na,39216,y);j=23;ma=259}while(0);if((ma|0)==259){c[na+12>>2]=j;c[B>>2]=c[p>>2];cd(na,39855,B);na=i+20|0;c[na>>2]=(c[na>>2]|0)+1}a[h>>0]=114;na=1;Ra=oa;return na|0}while(0);j=c[q>>2]|0;if(j&10240|0){la=h+4|0;c[la>>2]=c[la>>2]|524288}if((j&2048|0)==0?(A=e[P>>1]|0,(A&34|0)!=0):0){c[C>>2]=39890;c[C+4>>2]=(A&32|0)==0?((A&4|0)==0?40098:40144):40126;cd(na,40162,C);j=c[q>>2]|0}if(!(j&262144)){q=0;w=r;p=0}else{w=(a[na+18>>0]|0)==0&(c[7391]|0)==0;q=w;w=w?0:r;p=0}}else{w=Jd(c[na>>2]|0,t,-2,m,0)|0;p=(w|0)==0;q=p;p=(p^1)&1;o=0}c:do if((d[na+200>>0]|0)<2){if(((w|0)!=0?(c[w+24>>2]|0)==0:0)?(c[h+4>>2]&16777216|0)!=0:0){c[D>>2]=s;c[D+4>>2]=t;cd(na,39918,D);ma=287}else ma=273;do if((ma|0)==273){do if(o|0){m=b[P>>1]|0;j=c[w+4>>2]|0;if((m&1?(E=c[h+44>>2]|0,!((j&65536|0)!=0&(E|0)==0)):0)?!((m&16384)==0&(E|0)!=0):0)break;if((j&65536|0)==0?(c[h+44>>2]|0)==0:0){c[G>>2]=39969;c[G+4>>2]=s;c[G+8>>2]=t;cd(na,39979,G)}else{c[H>>2]=39962;c[H+4>>2]=s;c[H+8>>2]=t;cd(na,39979,H)}o=i+20|0;c[o>>2]=(c[o>>2]|0)+1;o=0;break c}while(0);if(q?(a[(c[na>>2]|0)+165>>0]|0)==0:0){c[I>>2]=s;c[I+4>>2]=t;cd(na,40008,I);ma=287;break}if(p|0){c[J>>2]=s;c[J+4>>2]=t;cd(na,40031,J);ma=287}}while(0);if((ma|0)==287){la=i+20|0;c[la>>2]=(c[la>>2]|0)+1}if(!o)o=0;else{b[P>>1]=((c[h+44>>2]|0)==0^49151)&e[P>>1];o=1}}while(0);d:do if(!u?(n=c[v>>2]|0,(n|0)>0):0){j=v+4|0;while(1){m=c[j>>2]|0;if(m|0?_j(f,m)|0:0)break d;if((n|0)>1){n=n+-1|0;j=j+20|0}else break}}while(0);if(!o){na=1;Ra=oa;return na|0}t=h+44|0;r=c[t>>2]|0;e:do if(!r){a[h>>0]=-93;m=h+38|0;a[m>>0]=0;if(i|0){n=R+4|0;o=R+8|0;p=R+24|0;q=K+4|0;r=K+8|0;while(1){na=c[i+4>>2]|0;k=c[F>>2]|0;c[n>>2]=139;c[o>>2]=0;c[p>>2]=K;c[K>>2]=na;c[q>>2]=0;c[r>>2]=0;if(!k){ma=369;break}j=c[k>>2]|0;if((j|0)<=0){ma=369;break}k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(R,l)|0:0)break;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}if((c[r>>2]|0)==0|(c[q>>2]|0)>0)break;a[m>>0]=(a[m>>0]|0)+1<<24>>24;i=c[i+12>>2]|0;if(!i)break e}na=i+24|0;b[na>>1]=c[w+4>>2]&4096|e[na>>1]|16}}else{s=c[i+28>>2]|0;i=c[s+72>>2]|0;o=c[r>>2]|0;q=r+16|0;f:do if((o|0)!=0?(a[q>>0]|0)==0:0){g:do if(i|0){n=d[208+(d[o>>0]|0)>>0]|0;p=i;while(1){j=c[p>>2]|0;h=a[j>>0]|0;i=(d[208+(h&255)>>0]|0)-n|0;if(!(h<<24>>24==0|(i|0)!=0)){m=o;do{j=j+1|0;m=m+1|0;h=a[j>>0]|0;i=(d[208+(h&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(i|0)!=0))}if(!i)break;i=c[p+32>>2]|0;if(!i)break g;else p=i}if(!p)break f;i=gk(c[na>>2]|0,c[p+8>>2]|0,0)|0;c[r+8>>2]=i;i=gk(c[na>>2]|0,c[p+12>>2]|0,0)|0;c[r+12>>2]=i;i=c[p+24>>2]|0;if(!i)i=0;else i=dk(c[na>>2]|0,i,0,0)|0;c[r+24>>2]=i;i=c[p+28>>2]|0;if(!i)i=0;else i=dk(c[na>>2]|0,i,0,0)|0;c[r+28>>2]=i;a[r+17>>0]=a[p+17>>0]|0;a[r+18>>0]=a[p+18>>0]|0;i=a[p+16>>0]|0;a[q>>0]=i;a[r+20>>0]=a[p+20>>0]|0;ma=315;break f}while(0);c[M>>2]=o;cd(na,40596,M)}else ma=314;while(0);if((ma|0)==314){Cj(na,r,i);i=a[q>>0]|0;ma=315}if((ma|0)==315){do if(i<<24>>24==86){if((c[r+24>>2]|0)==0?(c[r+28>>2]|0)==0:0){ma=321;break}h=c[r+12>>2]|0;if(h|0?(c[h>>2]|0)==1:0){ma=321;break}cd(na,40397,N)}else ma=321;while(0);h:do if((ma|0)==321?c[w+4>>2]&65536|0:0){o=c[na>>2]|0;if(c[r+36>>2]|0){cd(na,40468,O);break}i=c[w+32>>2]|0;do if((i|0)!=40531)if((i|0)!=40542)if((i|0)!=40553)if((i|0)!=40558){if((i|0)==40571){m=4;break}if((i|0)==40581){m=5;break}if((i|0)==40587){m=6;break}if((i|0)==40592)m=7;else break h}else m=3;else m=2;else m=1;else m=0;while(0);n=r+24|0;i=c[n>>2]|0;if(i|0)ni(o,i);i=r+28|0;j=c[i>>2]|0;if(j|0)ni(o,j);c[n>>2]=0;c[i>>2]=0;a[q>>0]=c[17952+(m<<4)+4>>2];h=c[17952+(m<<4)+8>>2]&255;a[r+17>>0]=h;a[r+18>>0]=c[17952+(m<<4)+12>>2];a[r+20>>0]=0;if(h<<24>>24==83){c[R>>2]=34874;c[R+4>>2]=1;h=oj(o,147,R,0)|0;c[n>>2]=h}}while(0);c[r+40>>2]=w}i=c[t>>2]|0;j=c[i+8>>2]|0;if((j|0)!=0?(l=c[j>>2]|0,(l|0)>0):0){i=j+4|0;while(1){j=c[i>>2]|0;if(j|0?_j(f,j)|0:0)break;if((l|0)>1){l=l+-1|0;i=i+20|0}else break}i=c[t>>2]|0}j=c[i+12>>2]|0;if((j|0)!=0?(k=c[j>>2]|0,(k|0)>0):0){i=j+4|0;while(1){j=c[i>>2]|0;if(j|0?_j(f,j)|0:0)break;if((k|0)>1){k=k+-1|0;i=i+20|0}else break}i=c[t>>2]|0}i=c[i+36>>2]|0;if(i|0)_j(f,i)|0;k=s+68|0;i=c[k>>2]|0;if(i){if(!(ck(na,i,c[t>>2]|0)|0)){j=k;i=c[k>>2]|0;ma=359}}else{j=k;ma=359}if((ma|0)==359){c[(c[t>>2]|0)+32>>2]=i;c[j>>2]=c[t>>2]}b[P>>1]=b[P>>1]|-32768}while(0);b[P>>1]=b[P>>1]|Q;na=1;Ra=oa;return na|0}case 49:case 20:case -125:{k=h+4|0;if(c[k>>2]&2048|0){l=i+16|0;m=c[l>>2]|0;i=i+24|0;j=e[i>>1]|0;if(j&38|0){c[p>>2]=40076;c[p+4>>2]=(j&32|0)==0?((j&4|0)==0?40098:40144):40126;cd(na,40162,p)}$j(f,c[h+20>>2]|0)|0;if((m|0)!=(c[l>>2]|0)){c[k>>2]=c[k>>2]|32;b[i>>1]=b[i>>1]|64}}break}case -108:{i=e[i+24>>1]|0;if(i&38|0){c[m>>2]=40087;c[m+4>>2]=(i&32|0)==0?((i&4|0)==0?40098:40144):40126;cd(na,40162,m)}break}case -96:case 45:{i=c[h+16>>2]|0;if((a[i>>0]|0)==59){if((Dk(f,i)|0)==2){na=2;Ra=oa;return na|0}if((a[i>>0]|0)==-97){a[h+38>>0]=a[h>>0]|0;a[h>>0]=-89;na=0;Ra=oa;return na|0}else ma=385}else ma=385;break}case 59:{s=c[h+8>>2]|0;W=c[na>>2]|0;Z=h+28|0;c[Z>>2]=-1;t=0;u=0;l=0;v=na+200|0;X=na;ma=28;break}case -122:{l=c[h+12>>2]|0;n=i+24|0;if(b[n>>1]&32){c[o>>2]=39767;c[o+4>>2]=40126;cd(na,40162,o)}k=c[h+16>>2]|0;if((a[k>>0]|0)==59){u=0;m=k}else{u=c[l+8>>2]|0;m=c[k+16>>2]|0;l=c[k+12>>2]|0}t=c[l+8>>2]|0;s=c[m+8>>2]|0;v=na+200|0;i:do if((d[v>>0]|0)>1?(q=na+272|0,j=c[q>>2]|0,j|0):0){k=j;do{if((c[k>>2]|0)==(m|0)){ma=12;break}k=c[k+12>>2]|0}while((k|0)!=0);if((ma|0)==12){c[k>>2]=h;j=c[q>>2]|0}k=h+44|0;if(j|0){while(1){if((c[j>>2]|0)==(l|0))break;j=c[j+12>>2]|0;if(!j)break i}c[j>>2]=k}}while(0);r=c[na>>2]|0;q=h+28|0;c[q>>2]=-1;if((u|0)!=0?(b[n>>1]&6)==0:0){n=c[r+20>>2]|0;if((n|0)>0){p=c[r+16>>2]|0;o=d[208+(d[u>>0]|0)>>0]|0;j=0;while(1){l=c[p+(j<<4)>>2]|0;ma=a[l>>0]|0;k=(d[208+(ma&255)>>0]|0)-o|0;if(!(ma<<24>>24==0|(k|0)!=0)){m=u;do{l=l+1|0;m=m+1|0;ma=a[l>>0]|0;k=(d[208+(ma&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ma<<24>>24==0|(k|0)!=0))}if(!k)break;j=j+1|0;if((j|0)>=(n|0)){l=0;Z=q;W=r;X=na;ma=28;break a}}l=c[p+(j<<4)+12>>2]|0;Z=q;W=r;X=na;ma=28}else{l=0;Z=q;W=r;X=na;ma=28}}else{u=0;l=0;Z=q;W=r;X=na;ma=28}break}default:{}}while(0);if((ma|0)==28){U=(u|0)==0;V=(t|0)!=0;R=V&U;j=na+120|0;P=(t|0)==0;_=h+32|0;f=h+44|0;T=na+272|0;Q=na+144|0;Y=h+4|0;M=h+1|0;N=na+136|0;O=na+140|0;m=i;q=0;S=0;o=162;p=0;r=-1;j:while(1){k=c[m+4>>2]|0;if(k){K=c[k>>2]|0;if((K|0)>0){I=k+8|0;J=0;w=0;while(1){H=c[I+16>>2]|0;k=c[I+20>>2]|0;if((k|0)!=0?(c[k+8>>2]&2048|0)!=0:0){x=c[k>>2]|0;y=c[x>>2]|0;if((y|0)>0){n=0;k=0;do{if(Fk(c[x+4+(n*20|0)+8>>2]|0,s,t,u)|0){b[_>>1]=n;k=1;w=w+1|0;q=2;p=I}n=n+1|0}while((n|0)!=(y|0))}else k=0;if(V&(k|0)==0)ma=40}else ma=40;k:do if((ma|0)==40){ma=0;if(!U?(c[H+72>>2]|0)!=(l|0):0)break;l:do if(!P){n=c[I+12>>2]|0;y=(n|0)==0;if(y){n=c[H>>2]|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(G<<24>>24==0|(k|0)!=0)){x=t;do{n=n+1|0;x=x+1|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(G<<24>>24==0|(k|0)!=0))}}else{G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(G<<24>>24==0|(k|0)!=0)){x=t;do{n=n+1|0;x=x+1|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(G<<24>>24==0|(k|0)!=0))}}if(k|0)break k;if(!(y|(d[v>>0]|0)<2)?($=c[T>>2]|0,$|0):0){k=$;while(1){if((c[k>>2]|0)==(f|0))break;k=c[k+12>>2]|0;if(!k)break l}c[k>>2]=0}}while(0);G=q+1|0;p=(q|0)==0?I:p;n=c[H+4>>2]|0;k=b[H+42>>1]|0;if(k<<16>>16>0){F=d[208+(d[s>>0]|0)>>0]|0;C=I+36|0;D=I+48|0;E=k<<16>>16;m:do if((w|0)==1){k=0;while(1){x=c[n>>2]|0;B=a[x>>0]|0;q=(d[208+(B&255)>>0]|0)-F|0;if(!(B<<24>>24==0|(q|0)!=0)){y=s;do{x=x+1|0;y=y+1|0;B=a[x>>0]|0;q=(d[208+(B&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(q|0)!=0))}n:do if((q|0)==0?(a[C>>0]&4)==0:0){q=c[D>>2]|0;if(!q)break m;B=c[q+4>>2]|0;if((B|0)<=0)break m;A=c[q>>2]|0;z=0;while(1){x=c[A+(z<<3)>>2]|0;y=a[x>>0]|0;q=(d[208+(y&255)>>0]|0)-F|0;if(!(y<<24>>24==0|(q|0)!=0)){y=s;do{x=x+1|0;y=y+1|0;qa=a[x>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}z=z+1|0;if(!q)break n;if((z|0)>=(B|0))break m}}while(0);k=k+1|0;if((k|0)>=(E|0)){w=1;q=G;break k}else n=n+16|0}}else{y=n;k=0;while(1){q=c[y>>2]|0;qa=a[q>>0]|0;n=(d[208+(qa&255)>>0]|0)-F|0;if(!(qa<<24>>24==0|(n|0)!=0)){x=s;do{q=q+1|0;x=x+1|0;qa=a[q>>0]|0;n=(d[208+(qa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(n|0)!=0))}if(!n)break m;k=k+1|0;if((k|0)>=(E|0)){q=G;break k}else y=y+16|0}}while(0);b[_>>1]=(k|0)==(b[H+40>>1]|0)?-1:k&65535;w=w+1|0;q=G;p=I}else q=G}while(0);J=J+1|0;if((J|0)==(K|0))break;else I=I+72|0}}else w=0;if(!p){A=w;C=0}else{n=c[p+40>>2]|0;c[Z>>2]=n;k=c[p+16>>2]|0;c[f>>2]=k;if(a[p+36>>0]&8)c[Y>>2]=c[Y>>2]|1048576;l=c[k+72>>2]|0;A=w;C=p;r=n}}else{A=0;C=p}do if(R&(q|0)==0){q=c[j>>2]|0;do if(q){x=a[Q>>0]|0;w=a[t>>0]|0;k=w|32;if(x<<24>>24==121){if(k<<24>>24!=111){q=0;break}}else{if(k<<24>>24==110){k=t;n=40182;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){c[Z>>2]=1;r=1;break}}if(!(x<<24>>24!=120&(w|32)<<24>>24==111)){q=0;break}}k=t;n=40186;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){c[Z>>2]=0;r=0}else q=0}else q=0;while(0);w=b[m+24>>1]|0;if(((w&512)!=0?(aa=c[m+8>>2]|0,(aa|0)!=0):0)?(a[t>>0]|32)<<24>>24==101:0){k=t;n=40190;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){z=c[(c[aa+20>>2]|0)+24>>2]|0;c[Z>>2]=2;r=2}else z=q}else z=q;if(!z){B=o;q=0;o=A;n=(C|0)!=0;z=w;break}l=c[z+72>>2]|0;qa=b[z+42>>1]|0;y=qa<<16>>16;o:do if(qa<<16>>16>0){x=d[208+(d[s>>0]|0)>>0]|0;n=0;w=c[z+4>>2]|0;while(1){p=c[w>>2]|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-x|0;if(!(qa<<24>>24==0|(k|0)!=0)){q=s;do{p=p+1|0;q=q+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(!k)break;n=n+1|0;if((n|0)<(y|0))w=w+16|0;else break o}n=(n|0)==(b[z+40>>1]|0)?-1:n}else n=0;while(0);do if((n|0)>=(y|0)){x=a[s>>0]|0;w=d[208+(x&255)>>0]|0;k=w+-95|0;x=x<<24>>24==0;if(!(x|(k|0)!=0)){p=58070;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=w+-114|0;if(!(x|(k|0)!=0)){p=40352;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=w+-111|0;if(!(x|(k|0)!=0)){p=58078;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0)break}}n=(c[z+36>>2]&64|0)==0?-1:n}while(0);if((n|0)<(y|0)){p=A+1|0;if((r|0)==2)if((d[v>>0]|0)>1){b[_>>1]=n;c[f>>2]=z;o=162;q=1;r=2;ma=142;break}else{r=(c[(c[m+8>>2]|0)+24>>2]|0)+n|0;c[Z>>2]=r;c[Y>>2]=c[Y>>2]|4194304;o=168;q=1;ma=142;break}do if((n|0)>=0){k=(n|0)>31?-1:1<<n;if(!r){c[N>>2]=c[N>>2]|k;break}else{c[O>>2]=c[O>>2]|k;break}}else a[M>>0]=68;while(0);c[f>>2]=z;b[_>>1]=n;o=77;q=1;ma=142}else{q=1;p=A;ma=142}}else{p=A;ma=142}while(0);do if((ma|0)==142){ma=0;n=(C|0)!=0;z=b[m+24>>1]|0;if(n&((q|0)==1&(p|0)==0))if(!(z&32)){w=a[s>>0]|0;q=d[208+(w&255)>>0]|0;k=q+-95|0;w=w<<24>>24==0;if(!(w|(k|0)!=0)){n=58070;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-114|0;if(!(w|(k|0)!=0)){n=40352;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-111|0;if(!(w|(k|0)!=0)){n=58078;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){B=o;q=1;o=0;n=1;break}}}if(!(c[(c[C+16>>2]|0)+36>>2]&64)){ma=157;break j}else{B=o;q=1;o=0;n=1}}else{B=o;q=1;o=0;n=1}else{B=o;o=p}}while(0);k=(o|0)==0;if(P&(k&(z&128)!=0)){A=c[m+8>>2]|0;w=c[A>>2]|0;if((w|0)>0){y=0;while(1){x=c[A+4+(y*20|0)+4>>2]|0;if(x|0){qa=a[x>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[s>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(k|0)!=0)){o=s;p=x;do{p=p+1|0;o=o+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(!k){ma=166;break j}}k=y+1|0;if((k|0)<(w|0))y=k;else break}}}else if(!k){ma=201;break}m=c[m+12>>2]|0;if(!m){ma=188;break}else{S=S+1|0;o=B;p=C}}p:do if((ma|0)==157){b[_>>1]=-1;a[M>>0]=68;q=m;p=1;n=1;ma=208}else if((ma|0)==166){n=c[A+4+(y*20|0)>>2]|0;if((z&1)==0?c[n+4>>2]&16|0:0){c[ca>>2]=x;cd(na,40199,ca);qa=2;Ra=oa;return qa|0}if((z&16384)==0?c[n+4>>2]&32768|0:0){c[da>>2]=x;cd(na,40230,da);qa=2;Ra=oa;return qa|0}k=a[n>>0]|0;if(k<<24>>24==-88)k=a[n+38>>0]|0;switch(k<<24>>24){case -87:{fa=n+20|0;ma=177;break}case -125:{fa=c[n+20>>2]|0;ma=177;break}default:{}}if((ma|0)==177?(c[c[fa>>2]>>2]|0)!=1:0){cd(na,38899,ga);qa=2;Ra=oa;return qa|0}Gk(na,A,y,h,59952,S);if((d[v>>0]|0)>1?(ea=c[T>>2]|0,(ea|0)!=0):0){k=ea;while(1){if((c[k>>2]|0)==(h|0))break;k=c[k+12>>2]|0;if(!k){n=m;break p}}c[k>>2]=0;n=m}else n=m}else if((ma|0)==188)if(P){k=c[Y>>2]|0;if(k&64|0){c[ba>>2]=s;Db(28,40267,ba);a[h>>0]=110;c[f>>2]=0;qa=1;Ra=oa;return qa|0}if(!(k&67108864)){m=c[h+8>>2]|0;r=a[m>>0]|0;q=d[208+(r&255)>>0]|0;k=q+-116|0;r=r<<24>>24==0;if(!(r|(k|0)!=0)){o=41806;p=m;do{p=p+1|0;o=o+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-102|0;if(!(r|(k|0)!=0)){o=41811;do{m=m+1|0;o=o+1|0;qa=a[m>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){m=0;o=0;k=40302;ma=202;break}}a[h>>0]=-97;qa=1;Ra=oa;return qa|0}else{m=0;o=0;k=40302;ma=202}}else{m=0;o=0;k=40302;ma=202}else if((ma|0)==201)if((o|0)==1){q=m;p=1;o=B;ma=208}else{k=40317;ma=202}while(0);if((ma|0)==202){do if(U)if(V){c[ia>>2]=k;c[ia+4>>2]=t;c[ia+8>>2]=s;cd(na,37010,ia);break}else{c[ja>>2]=k;c[ja+4>>2]=s;cd(na,37020,ja);break}else{c[ha>>2]=k;c[ha+4>>2]=u;c[ha+8>>2]=t;c[ha+12>>2]=s;cd(na,40339,ha)}while(0);a[na+17>>0]=1;q=i+20|0;c[q>>2]=(c[q>>2]|0)+1;q=m;p=o;o=B;ma=208}if((ma|0)==208){qa=b[_>>1]|0;m=qa<<16>>16;k=C+56|0;if(n&qa<<16>>16>-1){ia=cw(1,0,((m|0)<63?m:63)|0)|0;ja=L()|0;ha=k;ja=c[ha+4>>2]|ja;qa=k;c[qa>>2]=c[ha>>2]|ia;c[qa+4>>2]=ja}k=h+12|0;m=c[k>>2]|0;if(m|0)ni(W,m);c[k>>2]=0;k=h+16|0;m=c[k>>2]|0;if(m|0)ni(W,m);c[k>>2]=0;a[h>>0]=o;c[Y>>2]=c[Y>>2]|8388608;if((p|0)==1)n=q;else{qa=2;Ra=oa;return qa|0}}q:do if((c[Y>>2]&4194304|0)==0?(la=c[n+4>>2]|0,ka=c[X>>2]|0,!((l|0)==0|(c[ka+312>>2]|0)==0)):0){k=c[ka+16>>2]|0;m=0;while(1)if((c[k+(m<<4)+12>>2]|0)==(l|0))break;else m=m+1|0;if((a[h>>0]|0)!=77){l=c[la>>2]|0;if((l|0)<=0)break;k=c[Z>>2]|0;j=0;while(1){if((k|0)==(c[la+8+(j*72|0)+40>>2]|0))break;j=j+1|0;if((j|0)>=(l|0))break q}j=la+8+(j*72|0)+16|0}l=c[j>>2]|0;k=b[_>>1]|0;j=k<<16>>16;if(l|0){if(k<<16>>16<=-1){j=b[l+40>>1]|0;if(j<<16>>16>-1){j=j<<16>>16;ma=229}else j=40352}else ma=229;if((ma|0)==229)j=c[(c[l+4>>2]|0)+(j<<4)>>2]|0;if((Ik(na,c[l>>2]|0,j,m)|0)==2)a[h>>0]=114}}while(0);qa=i+16|0;c[qa>>2]=(c[qa>>2]|0)+1;if((n|0)==(i|0)){qa=1;Ra=oa;return qa|0}do{i=c[i+12>>2]|0;qa=i+16|0;c[qa>>2]=(c[qa>>2]|0)+1}while((i|0)!=(n|0));i=1;Ra=oa;return i|0}else if((ma|0)==385?(a[(c[na>>2]|0)+81>>0]|0)==0:0){j=c[h+12>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;ma=391;break}case -125:{i=c[j+20>>2]|0;ma=391;break}default:l=1}if((ma|0)==391)l=c[c[i>>2]>>2]|0;r:do if((a[h>>0]|0)==48){k=c[h+20>>2]|0;j=c[k+4>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;ma=398;break}case -125:{i=c[j+20>>2]|0;ma=398;break}default:i=1}if((ma|0)==398)i=c[c[i>>2]>>2]|0;if((i|0)==(l|0)){j=c[k+24>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=c[c[j+20>>2]>>2]|0;break r}case -125:{i=c[c[c[j+20>>2]>>2]>>2]|0;break r}default:{i=1;break r}}}}else{j=c[h+16>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=c[c[j+20>>2]>>2]|0;break r}case -125:{i=c[c[c[j+20>>2]>>2]>>2]|0;break r}default:{i=1;break r}}}while(0);if((l|0)!=(i|0))cd(na,38899,r)}if(c[na+36>>2]|0){qa=2;Ra=oa;return qa|0}qa=(a[(c[na>>2]|0)+81>>0]|0)==0?0:2;Ra=oa;return qa|0}function Ek(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0;fb=Ra;Ra=Ra+240|0;eb=fb+120|0;bb=fb+112|0;ab=fb+96|0;Sa=fb+88|0;Pa=fb+80|0;La=fb+72|0;Ka=fb+64|0;Ja=fb+56|0;Ia=fb+48|0;Ha=fb+40|0;Oa=fb+32|0;Na=fb+24|0;Ma=fb+16|0;Ga=fb+8|0;Fa=fb;Xa=fb+200|0;Ya=fb+168|0;Za=fb+160|0;qa=fb+128|0;h=c[g+8>>2]|0;if(h&4|0){eb=1;Ra=fb;return eb|0}ma=c[f+24>>2]|0;db=c[f>>2]|0;f=c[db>>2]|0;if(!(h&64)){Kk(db,g,ma);if(c[db+36>>2]|0){eb=2;Ra=fb;return eb|0}eb=(a[f+81>>0]|0)==0?1:2;Ra=fb;return eb|0}Qa=g+52|0;oa=(c[Qa>>2]|0)!=0;W=oa&1;X=qa+28|0;Y=qa+24|0;Z=Xa+4|0;_=Xa+8|0;$=Xa+12|0;aa=Xa+24|0;ba=qa+20|0;ca=qa+4|0;da=qa+12|0;ea=db+240|0;fa=(ma|0)==0;ga=Xa+4|0;ha=Xa+8|0;ia=Xa+12|0;ja=Xa+24|0;ka=db+36|0;s=f+81|0;t=Xa+4|0;u=Xa+8|0;v=Xa+12|0;w=Xa+24|0;x=qa+8|0;y=Xa+4|0;z=Xa+8|0;A=Xa+12|0;B=Xa+24|0;C=Xa+4|0;D=Xa+8|0;E=Xa+12|0;F=Xa+24|0;G=Xa+4|0;H=Xa+8|0;I=Xa+12|0;J=Xa+24|0;K=db+200|0;L=Xa+4|0;M=Xa+8|0;N=Xa+12|0;O=Xa+24|0;P=Xa+4|0;Q=Xa+8|0;R=Xa+12|0;S=Xa+24|0;T=qa+4|0;U=db;V=db+208|0;q=g;r=0;f=h;a:while(1){p=q+8|0;c[p>>2]=f|4;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;c[T+16>>2]=0;c[T+20>>2]=0;c[qa>>2]=db;c[X>>2]=q;f=c[q+60>>2]|0;if(f){b[Y>>1]=0;c[Xa>>2]=U;c[Z>>2]=125;c[_>>2]=126;c[$>>2]=0;c[aa>>2]=qa;h=f+24|0;o=(c[V>>2]|0)+(c[h>>2]|0)|0;c[V>>2]=o;Ea=c[(c[db>>2]|0)+120>>2]|0;if((Ea|0)<(o|0)){K=9;break}_j(Xa,f)|0;i=c[Xa>>2]|0;o=i+208|0;c[o>>2]=(c[o>>2]|0)-(c[h>>2]|0);o=f+4|0;c[o>>2]=c[o>>2]|b[Y>>1]&-32752&65535;if((c[ba>>2]|0)>0){K=11;break}if((c[i+36>>2]|0)>=1){cb=2;K=206;break}}o=q+32|0;h=c[o>>2]|0;if(c[p>>2]&65536|0){n=q+48|0;c[(c[h+28>>2]|0)+48>>2]=c[n>>2];c[n>>2]=0}f=h;b:do if((c[h>>2]|0)>0){if(fa){k=0;while(1){j=c[h+8+(k*72|0)+20>>2]|0;if((j|0)!=0?(c[j+8>>2]&4|0)==0:0){f=c[ea>>2]|0;i=c[h+8+(k*72|0)+8>>2]|0;if(i|0)c[ea>>2]=i;c[ga>>2]=125;c[ha>>2]=126;c[ia>>2]=0;c[Xa>>2]=db;c[ja>>2]=0;$j(Xa,j)|0;c[ea>>2]=f;if(c[ka>>2]|0){cb=2;K=206;break a}if(a[s>>0]|0){cb=2;K=206;break a}f=h+8+(k*72|0)+37|0;a[f>>0]=a[f>>0]&-9;f=c[o>>2]|0;h=f}k=k+1|0;if((k|0)>=(c[h>>2]|0))break b}}l=0;k=h;while(1){j=c[k+8+(l*72|0)+20>>2]|0;if((j|0)!=0?(c[j+8>>2]&4|0)==0:0){i=c[ea>>2]|0;f=0;h=ma;do{f=(c[h+16>>2]|0)+f|0;h=c[h+12>>2]|0}while((h|0)!=0);h=c[k+8+(l*72|0)+8>>2]|0;if(h|0)c[ea>>2]=h;c[ga>>2]=125;c[ha>>2]=126;c[ia>>2]=0;c[Xa>>2]=db;c[ja>>2]=ma;$j(Xa,j)|0;c[ea>>2]=i;if(c[ka>>2]|0){cb=2;K=206;break a}if(a[s>>0]|0){cb=2;K=206;break a}h=ma;do{f=f-(c[h+16>>2]|0)|0;h=c[h+12>>2]|0}while((h|0)!=0);h=k+8+(l*72|0)+37|0;a[h>>0]=a[h>>0]&-9|((f|0)!=0&1)<<3&255;f=c[o>>2]|0;h=f}else h=k;l=l+1|0;if((l|0)>=(c[h>>2]|0))break;else k=h}}while(0);b[Y>>1]=16385;c[ca>>2]=f;c[da>>2]=ma;l=c[q>>2]|0;if((l|0)!=0?(c[l>>2]|0)>0:0){k=0;f=16385;do{i=c[l+4+(k*20|0)>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;ra=c[qa>>2]|0;c[Xa>>2]=ra;c[t>>2]=125;c[u>>2]=126;c[v>>2]=0;c[w>>2]=qa;h=i+24|0;sa=ra;m=sa+208|0;n=(c[m>>2]|0)+(c[h>>2]|0)|0;c[m>>2]=n;sa=c[(c[sa>>2]|0)+120>>2]|0;if((sa|0)<(n|0)){K=46;break a}_j(Xa,i)|0;j=c[Xa>>2]|0;n=j+208|0;c[n>>2]=(c[n>>2]|0)-(c[h>>2]|0);n=b[Y>>1]|0;m=i+4|0;c[m>>2]=c[m>>2]|n&-32752&65535;f=(f&36880|n&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=48;break a}if((c[j+36>>2]|0)>=1){cb=2;K=206;break a}}k=k+1|0}while((k|0)<(c[l>>2]|0))}else f=16385;h=f&-16385;b[Y>>1]=h;n=c[q+40>>2]|0;m=(n|0)!=0;if(!m?(na=h&65535,(na&16|0)==0):0){h=na&49150;b[Y>>1]=h}else c[p>>2]=c[p>>2]|(f&4096|8)&65535;j=c[q+44>>2]|0;i=(j|0)==0;if(!(m|i)){K=55;break}c[x>>2]=c[q>>2];f=h|128;b[Y>>1]=f;if(!i){f=f&65535;b[Y>>1]=f&28655;ta=c[qa>>2]|0;c[Xa>>2]=ta;c[y>>2]=125;c[z>>2]=126;c[A>>2]=0;c[B>>2]=qa;h=j+24|0;ua=ta;k=ua+208|0;l=(c[k>>2]|0)+(c[h>>2]|0)|0;c[k>>2]=l;ua=c[(c[ua>>2]|0)+120>>2]|0;if((ua|0)<(l|0)){K=59;break}_j(Xa,j)|0;i=c[Xa>>2]|0;l=i+208|0;c[l>>2]=(c[l>>2]|0)-(c[h>>2]|0);l=b[Y>>1]|0;k=j+4|0;c[k>>2]=c[k>>2]|l&-32752&65535;f=(f&36880|l&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=61;break}if((c[i+36>>2]|0)>=1){cb=2;K=206;break}}i=c[q+36>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;va=c[qa>>2]|0;c[Xa>>2]=va;c[C>>2]=125;c[D>>2]=126;c[E>>2]=0;c[F>>2]=qa;h=i+24|0;wa=va;k=wa+208|0;l=(c[k>>2]|0)+(c[h>>2]|0)|0;c[k>>2]=l;wa=c[(c[wa>>2]|0)+120>>2]|0;if((wa|0)<(l|0)){K=66;break}_j(Xa,i)|0;j=c[Xa>>2]|0;l=j+208|0;c[l>>2]=(c[l>>2]|0)-(c[h>>2]|0);l=b[Y>>1]|0;k=i+4|0;c[k>>2]=c[k>>2]|l&-32752&65535;f=(f&36880|l&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=68;break}if((c[j+36>>2]|0)>=1){cb=2;K=206;break}}h=c[o>>2]|0;if((c[h>>2]|0)>0){l=0;do{if(((a[h+8+(l*72|0)+37>>0]&4)!=0?(pa=c[h+8+(l*72|0)+64>>2]|0,(pa|0)!=0):0)?(c[pa>>2]|0)>0:0){k=0;do{i=c[pa+4+(k*20|0)>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;xa=c[qa>>2]|0;c[Xa>>2]=xa;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=qa;h=i+24|0;ya=xa;gb=ya+208|0;j=(c[gb>>2]|0)+(c[h>>2]|0)|0;c[gb>>2]=j;ya=c[(c[ya>>2]|0)+120>>2]|0;if((ya|0)<(j|0)){K=80;break a}_j(Xa,i)|0;j=c[Xa>>2]|0;gb=j+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[h>>2]|0);gb=b[Y>>1]|0;i=i+4|0;c[i>>2]=c[i>>2]|gb&-32752&65535;f=(f&36880|gb&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=82;break a}if((c[j+36>>2]|0)>=1){cb=2;K=206;break a}}k=k+1|0}while((k|0)<(c[pa>>2]|0))}l=l+1|0;h=c[o>>2]|0}while((l|0)<(c[h>>2]|0))}c[da>>2]=0;b[Y>>1]=f|16385;if(c[p>>2]&65536|0){gb=(c[h+28>>2]|0)+48|0;c[q+48>>2]=c[gb>>2];c[gb>>2]=0}if(r>>>0>=W>>>0?Lk(qa,q,c[q+48>>2]|0,40659)|0:0){cb=2;K=206;break}if(a[s>>0]|0){cb=2;K=206;break}b[Y>>1]=b[Y>>1]&-16385;if(m){if(Lk(qa,q,n,40665)|0){cb=2;K=206;break}if(a[s>>0]|0){cb=2;K=206;break}i=c[n>>2]|0;if((i|0)>0){f=n+4|0;h=0;while(1){if(c[(c[f>>2]|0)+4>>2]&16|0){K=96;break a}h=h+1|0;if((h|0)>=(i|0))break;else f=f+20|0}}}if((d[K>>0]|0)>1?(la=c[q+72>>2]|0,la|0):0){m=la;do{h=c[m+12>>2]|0;do if(h|0){if((c[h>>2]|0)<=0)break;f=0;do{i=c[h+4+(f*20|0)>>2]|0;if(i){j=e[Y>>1]|0;b[Y>>1]=j&28655;za=c[qa>>2]|0;c[Xa>>2]=za;c[L>>2]=125;c[M>>2]=126;c[N>>2]=0;c[O>>2]=qa;k=i+24|0;Aa=za;p=Aa+208|0;gb=(c[p>>2]|0)+(c[k>>2]|0)|0;c[p>>2]=gb;Aa=c[(c[Aa>>2]|0)+120>>2]|0;if((Aa|0)<(gb|0)){K=108;break a}_j(Xa,i)|0;l=c[Xa>>2]|0;gb=l+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[k>>2]|0);gb=b[Y>>1]|0;p=i+4|0;c[p>>2]=c[p>>2]|gb&-32752&65535;b[Y>>1]=j&36880|gb&65535;if((c[ba>>2]|0)>0){K=110;break a}if((c[l+36>>2]|0)>=1){cb=2;K=206;break a}}f=f+1|0}while((f|0)<(c[h>>2]|0))}while(0);h=c[m+8>>2]|0;do if(h|0){if((c[h>>2]|0)<=0)break;f=0;do{i=c[h+4+(f*20|0)>>2]|0;if(i){j=e[Y>>1]|0;b[Y>>1]=j&28655;Ba=c[qa>>2]|0;c[Xa>>2]=Ba;c[P>>2]=125;c[Q>>2]=126;c[R>>2]=0;c[S>>2]=qa;k=i+24|0;Ca=Ba;p=Ca+208|0;gb=(c[p>>2]|0)+(c[k>>2]|0)|0;c[p>>2]=gb;Ca=c[(c[Ca>>2]|0)+120>>2]|0;if((Ca|0)<(gb|0)){K=119;break a}_j(Xa,i)|0;l=c[Xa>>2]|0;gb=l+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[k>>2]|0);gb=b[Y>>1]|0;p=i+4|0;c[p>>2]=c[p>>2]|gb&-32752&65535;b[Y>>1]=j&36880|gb&65535;if((c[ba>>2]|0)>0){K=121;break a}if((c[l+36>>2]|0)>=1){cb=2;K=206;break a}}f=f+1|0}while((f|0)<(c[h>>2]|0))}while(0);m=c[m+32>>2]|0}while((m|0)!=0)}Da=c[q+56>>2]|0;if(Da|0?(c[c[q>>2]>>2]|0)!=(c[c[Da>>2]>>2]|0):0){K=126;break}f=c[q+52>>2]|0;if(!f){K=135;break}q=f;r=r+1|0;f=c[f+8>>2]|0}switch(K|0){case 9:{c[Fa>>2]=Ea;cd(db,41637,Fa);K=11;break}case 46:{c[Ga>>2]=sa;cd(ra,41637,Ga);K=48;break}case 55:{cd(db,40615,Ma);gb=2;Ra=fb;return gb|0}case 59:{c[Na>>2]=ua;cd(ta,41637,Na);K=61;break}case 66:{c[Oa>>2]=wa;cd(va,41637,Oa);K=68;break}case 80:{c[Ha>>2]=ya;cd(xa,41637,Ha);K=82;break}case 96:{cd(db,40671,Ia);gb=2;Ra=fb;return gb|0}case 108:{c[Ja>>2]=Aa;cd(za,41637,Ja);K=110;break}case 119:{c[Ka>>2]=Ca;cd(Ba,41637,Ka);K=121;break}case 126:{if(c[Da+8>>2]&512|0){cd(db,41381,La);gb=2;Ra=fb;return gb|0}switch(a[Da+4>>0]|0){case -128:{f=41509;break}case -126:{f=41519;break}case -127:{f=41529;break}default:f=41536}c[Pa>>2]=f;cd(db,41427,Pa);gb=2;Ra=fb;return gb|0}case 135:{if(!oa){gb=1;Ra=fb;return gb|0}J=c[g+48>>2]|0;if(!J){gb=1;Ra=fb;return gb|0}I=c[db>>2]|0;i=c[J>>2]|0;if((i|0)>(c[I+116>>2]|0)){cd(db,41542,Sa);gb=2;Ra=fb;return gb|0}if((i|0)>0){f=0;do{gb=J+4+(f*20|0)+13|0;a[gb>>0]=a[gb>>0]&-2;f=f+1|0}while((f|0)!=(i|0))}c[g+56>>2]=0;h=c[Qa>>2]|0;if(!h)h=g;else{f=g;while(1){c[h+56>>2]=f;f=c[h+52>>2]|0;if(!f)break;else{gb=h;h=f;f=gb}}}t=J+4|0;u=db+200|0;v=Xa+4|0;w=I+81|0;x=Ya+12|0;y=Ya+4|0;z=Ya+8|0;A=Ya+24|0;B=Ya+20|0;C=db;D=Xa+4|0;E=Xa+8|0;F=Xa+12|0;G=Xa+24|0;H=db+208|0;f=i;c:while(1){s=c[h>>2]|0;if((f|0)<=0){cb=1;K=206;break}r=h+32|0;q=t;p=0;Va=0;while(1){c[Za>>2]=-1;o=q+13|0;d:do if(!(a[o>>0]&1)){f=c[q>>2]|0;e:do if(!f)f=0;else while(1){i=c[f+4>>2]|0;if(!(i&4096))break e;if(!(i&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break}}while(0);f:do if(!(uk(f,Za)|0)){g:do if((a[f>>0]|0)==59?(_a=c[f+8>>2]|0,$a=c[s>>2]|0,($a|0)>0):0){i=0;while(1){k=c[s+4+(i*20|0)+4>>2]|0;if(k|0){gb=a[k>>0]|0;j=(d[208+(gb&255)>>0]|0)-(d[208+(d[_a>>0]|0)>>0]|0)|0;if(!(gb<<24>>24==0|(j|0)!=0)){l=_a;do{k=k+1|0;l=l+1|0;gb=a[k>>0]|0;j=(d[208+(gb&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(gb<<24>>24==0|(j|0)!=0))}if(!j)break}i=i+1|0;if((i|0)>=($a|0))break g}i=i+1|0;c[Za>>2]=i;break f}while(0);c[Za>>2]=0;if((d[u>>0]|0)<=1)if(!f)n=0;else n=dk(I,f,0,0)|0;else n=f;if(!(a[w>>0]|0)){m=c[h>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[Ya>>2]=db;c[y>>2]=c[r>>2];c[z>>2]=m;b[A>>1]=129;c[B>>2]=0;i=c[db>>2]|0;j=i+85|0;k=a[j>>0]|0;a[j>>0]=1;h:do if(!n){a[j>>0]=k;K=180}else{b[A>>1]=129;c[Xa>>2]=C;c[D>>2]=125;c[E>>2]=126;c[F>>2]=0;c[G>>2]=Ya;l=n+24|0;gb=(c[H>>2]|0)+(c[l>>2]|0)|0;c[H>>2]=gb;i=c[i+120>>2]|0;do if((i|0)>=(gb|0)){_j(Xa,n)|0;i=c[Xa>>2]|0;gb=i+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[l>>2]|0);gb=n+4|0;c[gb>>2]=c[gb>>2]|b[A>>1]&-32752&65535;if((c[B>>2]|0)>0)break;gb=(c[i+36>>2]|0)<1;a[j>>0]=k;if(gb){K=180;break h}else{Ua=0;break h}}else{c[bb>>2]=i;cd(db,41637,bb)}while(0);a[j>>0]=k;Ua=0}while(0);i:do if((K|0)==180){K=0;if((c[m>>2]|0)<=0){Ua=0;break}i=0;while(1){gb=i;i=i+1|0;if((bk(0,c[m+4+(gb*20|0)>>2]|0,n,-1)|0)<2){Ua=i;break i}if((i|0)>=(c[m>>2]|0)){Ua=0;break}}}while(0);c[Za>>2]=Ua;i=Ua}else i=0;if(!((n|0)==0|(d[u>>0]|0)>1))ni(I,n);if((i|0)<=0){f=1;break d}}else{i=c[Za>>2]|0;Wa=c[s>>2]|0;if((i|0)<1|(i|0)>(Wa|0)){K=158;break c}}while(0);if((d[u>>0]|0)<=1){c[Xa>>2]=0;c[v>>2]=0;l=oj(I,147,Xa,0)|0;if(!l)break c;j=l+4|0;c[j>>2]=c[j>>2]|1024;c[l+8>>2]=i;j=c[q>>2]|0;if((j|0)==(f|0))j=q;else{while(1){k=c[j+12>>2]|0;if((a[k>>0]|0)==106)j=k;else break}j=j+12|0}c[j>>2]=l;if(f|0)ni(I,f);b[q+16>>1]=i}a[o>>0]=a[o>>0]|1;f=p}else f=p;while(0);i=Va+1|0;Ta=c[J>>2]|0;if((i|0)<(Ta|0)){q=q+20|0;p=f;Va=i}else break}h=c[h+56>>2]|0;if((f|0)!=0&(h|0)!=0)f=Ta;else{K=201;break}}if((K|0)==158){c[ab>>2]=Va+1;c[ab+4>>2]=40659;c[ab+8>>2]=Wa;cd(db,41294,ab)}else if((K|0)==201){if((Ta|0)<=0){gb=1;Ra=fb;return gb|0}f=0;while(1){gb=f;f=f+1|0;if(!(a[J+4+(gb*20|0)+13>>0]&1))break;if((f|0)>=(Ta|0)){cb=1;K=206;break}}if((K|0)==206){Ra=fb;return cb|0}c[eb>>2]=f;cd(db,41576,eb);gb=2;Ra=fb;return gb|0}else if((K|0)==206){Ra=fb;return cb|0}gb=2;Ra=fb;return gb|0}case 206:{Ra=fb;return cb|0}}if((K|0)==11){gb=2;Ra=fb;return gb|0}else if((K|0)==48){gb=2;Ra=fb;return gb|0}else if((K|0)==61){gb=2;Ra=fb;return gb|0}else if((K|0)==68){gb=2;Ra=fb;return gb|0}else if((K|0)==82){gb=2;Ra=fb;return gb|0}else if((K|0)==110){gb=2;Ra=fb;return gb|0}else if((K|0)==121){gb=2;Ra=fb;return gb|0}return 0}function Fk(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=0;a:while(1){switch(a[b+l>>0]|0){case 46:case 0:break a;default:{}}l=l+1|0}if(f|0){b:do if(l|0){h=b;k=f;i=l;while(1){g=a[h>>0]|0;if(!(g<<24>>24)){i=8;break}j=a[208+(g&255)>>0]|0;g=a[208+(d[k>>0]|0)>>0]|0;if(j<<24>>24!=g<<24>>24){i=10;break}if((i|0)>1){h=h+1|0;k=k+1|0;i=i+-1|0}else break b}if((i|0)==8){h=0;g=a[208+(d[k>>0]|0)>>0]|0}else if((i|0)==10)h=j&255;if((h|0)!=(g&255|0)){e=0;return e|0}}while(0);if(a[f+l>>0]|0){e=0;return e|0}}b=b+(l+1)|0;l=0;c:while(1){switch(a[b+l>>0]|0){case 46:case 0:break c;default:{}}l=l+1|0}if(e|0){d:do if(l|0){h=b;k=e;i=l;while(1){g=a[h>>0]|0;if(!(g<<24>>24)){i=21;break}j=a[208+(g&255)>>0]|0;g=a[208+(d[k>>0]|0)>>0]|0;if(j<<24>>24!=g<<24>>24){i=23;break}if((i|0)>1){h=h+1|0;k=k+1|0;i=i+-1|0}else break d}if((i|0)==21){h=0;g=a[208+(d[k>>0]|0)>>0]|0}else if((i|0)==23)h=j&255;if((h|0)!=(g&255|0)){e=0;return e|0}}while(0);if(a[e+l>>0]|0){e=0;return e|0}}if(c|0){h=b+(l+1)|0;e=a[h>>0]|0;g=(d[208+(e&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(!(e<<24>>24==0|(g|0)!=0))do{h=h+1|0;c=c+1|0;e=a[h>>0]|0;g=(d[208+(e&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0}while(!(e<<24>>24==0|(g|0)!=0));if(g|0){e=0;return e|0}}e=1;return e|0}function Gk(b,d,f,g,h,i){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;k=p;d=c[d+4+(f*20|0)>>2]|0;m=c[b>>2]|0;if(!d){o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}d=dk(m,d,0,0)|0;if(!d){o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}if((i|0)>0&(a[h>>0]|0)!=71){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+4>>2]=140;c[k+24>>2]=i;_j(k,d)|0}if((a[g>>0]|0)==106){f=c[g+8>>2]|0;c[k>>2]=f;if(f){i=(Eu(f)|0)&1073741823;c[k+4>>2]=i;if((i|0)!=0?(j=oj(c[b>>2]|0,106,k,0)|0,(j|0)!=0):0){c[j+12>>2]=d;d=j+4|0;c[d>>2]=c[d>>2]|4352;d=j}}else c[k+4>>2]=0}j=g+4|0;c[j>>2]=c[j>>2]|134217728;ni(m,g);f=g;h=d;i=f+52|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));if((c[j>>2]&1024|0)==0?(o=g+8|0,n=c[o>>2]|0,n|0):0){b=(Eu(n)|0)+1|0;a:do if(!m){k=Sv(b|0,0,-1,-1)|0;i=L()|0;if(!(i>>>0>0|(i|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](b)|0;l=38;break}f=Wa[c[29356>>2]&127](b)|0;if((c[14985]|0)>>>0<b>>>0)c[14985]=b;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){k=c[14978]|0;i=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=k>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(f){h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=39}else l=39}else f=0}else f=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){f=0;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<b>>>0:0))){h=m+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];l=m+284|0;c[l>>2]=(c[l>>2]|0)+1;l=38;break a}h=m+296|0;f=c[h>>2]|0;if(!f){f=m+292|0;break}else{c[h>>2]=c[f>>2];l=m+284|0;c[l>>2]=(c[l>>2]|0)+1;l=38;break a}}else f=m+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(m,b,0)|0;l=38}while(0);if((l|0)==38)if(!f)f=0;else l=39;if((l|0)==39)ew(f|0,n|0,b|0)|0;c[o>>2]=f;c[j>>2]=c[j>>2]|65536}if(m|0){if(c[m+480>>2]|0){Xd(m,d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}o=d;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}}function Hk(b,e){b=b|0;e=e|0;if((a[e>>0]|0)!=-93)return 0;e=e+38|0;a[e>>0]=(c[b+24>>2]|0)+(d[e>>0]|0);return 0}function Ik(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+32|0;i=n+24|0;m=n+16|0;l=n+8|0;h=n;j=c[b>>2]|0;k=c[(c[j+16>>2]|0)+(f<<4)>>2]|0;if(a[j+165>>0]|0){m=0;Ra=n;return m|0}g=$a[c[j+312>>2]&127](c[j+316>>2]|0,20,d,e,k,c[b+240>>2]|0)|0;if((g|0)==1){c[h>>2]=d;c[h+4>>2]=e;d=Bb(40358,h)|0;if(f|0?1:(c[j+20>>2]|0)>2){c[l>>2]=k;c[l+4>>2]=d;d=Bb(40364,l)|0}c[m>>2]=d;cd(b,40370,m);c[b+12>>2]=23;m=1;Ra=n;return m|0}else{if((g|2|0)==2){m=g;Ra=n;return m|0}cd(b,39231,i);c[b+12>>2]=1;m=g;Ra=n;return m|0}return 0}function Jk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;switch(a[d>>0]|0){case -92:case -94:break;default:return 0}e=c[b+24>>2]|0;f=c[e>>2]|0;a:do if((f|0)!=0?(g=c[f>>2]|0,(g|0)>0):0){d=c[d+28>>2]|0;b=0;while(1){if((d|0)==(c[f+8+(b*72|0)+40>>2]|0))break;b=b+1|0;if((b|0)>=(g|0)){h=8;break a}}b=e+4|0}else h=8;while(0);if((h|0)==8)b=e+8|0;c[b>>2]=(c[b>>2]|0)+1;return 0}function Kk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;h=i;if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}if(c[d+8>>2]&128|0){Ra=i;return}c[h+4>>2]=141;c[h>>2]=b;f=h+8|0;if(!(a[b+22>>0]|0))g=h+12|0;else{c[f>>2]=142;g=h+12|0;c[g>>2]=0;$j(h,d)|0}c[f>>2]=143;c[g>>2]=68;$j(h,d)|0;f=b+36|0;if(c[f>>2]|0){Ra=i;return}if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}c[h+4>>2]=125;c[h+8>>2]=126;c[h+12>>2]=0;c[h>>2]=b;c[h+24>>2]=e;$j(h,d)|0;if(c[f>>2]|0){Ra=i;return}if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}c[h+8>>2]=132;c[h+12>>2]=69;c[h+4>>2]=141;c[h>>2]=b;$j(h,d)|0;Ra=i;return}function Lk(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=Ra;Ra=Ra+80|0;F=H+24|0;B=H+16|0;A=H;x=H+40|0;y=H+36|0;if(!g){G=0;Ra=H;return G|0}z=c[c[f>>2]>>2]|0;E=c[e>>2]|0;k=g+4|0;j=c[g>>2]|0;a:do if((j|0)>0){t=x+4|0;u=x+24|0;i=0;s=k;b:while(1){r=c[s>>2]|0;q=(r|0)==0;c:do if(q)j=0;else{j=r;while(1){l=c[j+4>>2]|0;if(!(l&4096))break c;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}}while(0);d:do if((a[h>>0]|0)==71)G=23;else{p=c[f>>2]|0;e:do if((a[j>>0]|0)==59?(v=c[j+8>>2]|0,w=c[p>>2]|0,(w|0)>0):0){l=0;while(1){n=c[p+4+(l*20|0)+4>>2]|0;if(n|0){o=a[n>>0]|0;m=(d[208+(o&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0;if(!(o<<24>>24==0|(m|0)!=0)){o=v;do{n=n+1|0;o=o+1|0;I=a[n>>0]|0;m=(d[208+(I&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(I<<24>>24==0|(m|0)!=0))}if(!m)break}l=l+1|0;if((l|0)>=(w|0))break e}I=l+1|0;c[y>>2]=I;b[s+16>>1]=I;break d}while(0);c[y>>2]=0;G=23}while(0);f:do if((G|0)==23){G=0;if(uk(j,y)|0){j=c[y>>2]|0;if((j+-1|0)>>>0>65534)break b;b[s+16>>1]=j;break}m=s+16|0;b[m>>1]=0;if(Ck(e,r)|0){C=1;G=50;break b}j=c[f>>2]|0;if((c[j>>2]|0)>0){if(q){l=0;while(1){I=l;l=l+1|0;if(!(bk(0,0,c[j+4+(I*20|0)>>2]|0,-1)|0))b[m>>1]=l;j=c[f>>2]|0;if((l|0)>=(c[j>>2]|0))break f}}l=0;do{if(!(bk(0,r,c[j+4+(l*20|0)>>2]|0,-1)|0)){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;c[t>>2]=144;c[u>>2]=f;_j(x,r)|0;l=l+1|0;b[m>>1]=l}else l=l+1|0;j=c[f>>2]|0}while((l|0)<(c[j>>2]|0))}}while(0);i=i+1|0;j=c[g>>2]|0;if((i|0)<(j|0))s=s+20|0;else break a}if((G|0)==50){Ra=H;return C|0}c[A>>2]=i+1;c[A+4>>2]=h;c[A+8>>2]=z;cd(E,41294,A);I=1;Ra=H;return I|0}while(0);i=c[E>>2]|0;if(a[i+81>>0]|0){I=0;Ra=H;return I|0}if((j|0)>(c[i+116>>2]|0)){c[B>>2]=h;cd(E,41350,B);I=1;Ra=H;return I|0}m=c[f>>2]|0;if((j|0)<=0){I=0;Ra=H;return I|0}l=0;while(1){i=b[k+16>>1]|0;if(i<<16>>16){i=i&65535;D=c[m>>2]|0;if((D|0)<(i|0))break;Gk(E,m,i+-1|0,c[k>>2]|0,h,0);j=c[g>>2]|0}i=l+1|0;if((i|0)<(j|0)){l=i;k=k+20|0}else{C=0;G=50;break}}if((G|0)==50){Ra=H;return C|0}c[F>>2]=l+1;c[F+4>>2]=h;c[F+8>>2]=D;cd(E,41294,F);I=1;Ra=H;return I|0}function Mk(a,b){a=a|0;b=b|0;return 0}function Nk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;n=p+8|0;m=p;o=d+52|0;if(!(c[o>>2]|0)){o=0;Ra=p;return o|0}k=c[d+48>>2]|0;if(!k){o=0;Ra=p;return o|0}f=d;a:while(1){switch(a[f+4>>0]|0){case -125:case -128:break;default:break a}f=c[f+52>>2]|0;if(!f){j=0;l=36;break}}if((l|0)==36){Ra=p;return j|0}f=c[k>>2]|0;if((f|0)<=0){o=0;Ra=p;return o|0}while(1){i=f;f=f+-1|0;if(c[(c[k+4+(f*20|0)>>2]|0)+4>>2]&256|0)break;if((i|0)<=1){j=0;l=36;break}}if((l|0)==36){Ra=p;return j|0}b=c[b>>2]|0;k=c[b>>2]|0;b:do if(!k){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](76)|0;l=33;break}f=Wa[c[29356>>2]&127](76)|0;if((c[14985]|0)>>>0<76)c[14985]=76;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){j=c[14978]|0;i=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=j>>>0)&1}h=Wa[c[29340>>2]&127](f)|0;if(!h){o=2;Ra=p;return o|0}f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){o=2;Ra=p;return o|0}}else{do if((e[k+276>>1]|0)>=76){f=k+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break b}f=k+296|0;g=c[f>>2]|0;if(!g){f=k+292|0;break}else{c[f>>2]=c[g>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break b}}else f=k+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}g=_d(k,76,0)|0;l=33}while(0);if((l|0)==33)if(!g){o=2;Ra=p;return o|0}else h=g;i=h;j=i+76|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));f=m;c[f>>2]=0;c[f+4>>2]=0;f=lj(b,0,0,0,m,h,0,0)|0;if(!f){o=2;Ra=p;return o|0}i=h;g=d;j=i+76|0;do{c[i>>2]=c[g>>2];i=i+4|0;g=g+4|0}while((i|0)<(j|0));c[d+32>>2]=f;c[n>>2]=0;c[n+4>>2]=0;n=oj(k,172,n,0)|0;n=nj(c[b>>2]|0,0,n)|0;c[d>>2]=n;a[d+4>>0]=-125;c[d+36>>2]=0;c[h+40>>2]=0;c[h+44>>2]=0;c[h+48>>2]=0;c[o>>2]=0;c[d+56>>2]=0;c[d+64>>2]=0;o=d+8|0;c[o>>2]=c[o>>2]&-65793|65536;c[(c[h+52>>2]|0)+56>>2]=h;c[h+60>>2]=0;o=0;Ra=p;return o|0}function Ok(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;qa=Ra;Ra=Ra+144|0;pa=qa+128|0;la=qa+120|0;ka=qa+112|0;ja=qa+96|0;ia=qa+88|0;P=qa+80|0;O=qa+72|0;N=qa+64|0;I=qa+56|0;H=qa+48|0;G=qa+40|0;K=qa+24|0;J=qa+16|0;F=qa+8|0;E=qa;ga=qa+136|0;ma=c[f>>2]|0;na=c[ma>>2]|0;oa=g+8|0;h=c[oa>>2]|0;c[oa>>2]=h|64;ha=na+81|0;if(a[ha>>0]|0){pa=2;Ra=qa;return pa|0}if(h&64|0){pa=1;Ra=qa;return pa|0}A=g+32|0;ea=c[A>>2]|0;fa=c[g>>2]|0;h=c[g+64>>2]|0;if(h|0){da=ma+264|0;c[h+4>>2]=c[da>>2];c[da>>2]=h}Qk(ma,ea);da=ea+8|0;a:do if((c[ea>>2]|0)>0){y=0;z=da;b:while(1){x=z+37|0;q=a[x>>0]|0;do if(!(q&32)){u=c[f>>2]|0;s=c[u>>2]|0;v=u+264|0;h=c[v>>2]|0;w=z+4|0;c:do if((c[w>>2]|0)==0?(D=c[z+8>>2]|0,!((h|0)==0|(D|0)==0)):0){d:while(1){o=c[h>>2]|0;e:do if((o|0)>0){ba=a[D>>0]|0;p=a[208+(ba&255)>>0]|0;if(!(ba<<24>>24)){i=0;while(1){j=h+8+(i<<4)|0;k=c[j>>2]|0;i=i+1|0;if(p<<24>>24==(a[208+(d[k>>0]|0)>>0]|0)){m=j;j=k;break d}if((i|0)>=(o|0))break e}}l=0;do{m=h+8+(l<<4)|0;j=c[m>>2]|0;if(p<<24>>24==(a[208+(d[j>>0]|0)>>0]|0)){i=j;k=D;do{k=k+1|0;i=i+1|0;ba=a[k>>0]|0;n=(d[208+(ba&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(n|0)!=0));if(!n)break d}l=l+1|0}while((l|0)<(o|0))}while(0);h=c[h+4>>2]|0;if(!h)break c}t=m+12|0;i=c[t>>2]|0;if(i|0){ca=24;break b}if(q&4){ca=26;break b}l=(s|0)==0;f:do if(l){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](80)|0;ca=50;break}i=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){ba=c[14978]|0;aa=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;$=L()|0;c[14768]=(($|0)<0|($|0)==0&aa>>>0<=ba>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){ca=51;break b}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[s+272>>2]|0){if(a[s+81>>0]|0){ca=51;break b}}else{do if((e[s+276>>1]|0)>=80){j=s+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=50;break f}j=s+296|0;i=c[j>>2]|0;if(!i){i=s+292|0;break}else{c[j>>2]=c[i>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=50;break f}}else i=s+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(s,80,0)|0;ca=50}while(0);if((ca|0)==50){ca=0;if(!i){ca=51;break b}}o=i;p=o+80|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(p|0));c[z+16>>2]=i;r=i+32|0;c[r>>2]=1;n=c[m>>2]|0;g:do if(!n)j=0;else{o=(Eu(n)|0)+1|0;h:do if(l){ba=Sv(o|0,0,-1,-1)|0;aa=L()|0;if(aa>>>0>0|(aa|0)==0&ba>>>0>2147483390){j=0;break g}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;ca=77;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){ba=c[14978]|0;aa=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;$=L()|0;c[14768]=(($|0)<0|($|0)==0&aa>>>0<=ba>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break g}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[s+272>>2]|0){if(a[s+81>>0]|0){j=0;break g}}else{do if(!(0<0|(0==0?(e[s+276>>1]|0)>>>0<o>>>0:0))){k=s+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=77;break h}k=s+296|0;j=c[k>>2]|0;if(!j){j=s+292|0;break}else{c[k>>2]=c[j>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=77;break h}}else j=s+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(s,o,0)|0;ca=77}while(0);if((ca|0)==77){ca=0;if(!j){j=0;break}}ew(j|0,n|0,o|0)|0}while(0);c[i>>2]=j;b[i+40>>1]=-1;b[i+44>>1]=200;q=i+36|0;c[q>>2]=c[q>>2]|66;q=fk(s,c[m+8>>2]|0,0)|0;c[z+20>>2]=q;if(a[s+81>>0]|0){h=2;ca=421;break b}p=((a[q+4>>0]|0)+-127&255)<2;if(p?(B=c[q+32>>2]|0,C=c[B>>2]|0,(C|0)>0):0){o=q+8|0;n=0;do{do if(!(c[B+8+(n*72|0)+4>>2]|0)){k=c[B+8+(n*72|0)+8>>2]|0;if(!k)break;l=c[m>>2]|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(ba<<24>>24==0|(j|0)!=0))do{k=k+1|0;l=l+1|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(j|0)!=0));if(j|0)break;c[B+8+(n*72|0)+16>>2]=i;ba=B+8+(n*72|0)+37|0;a[ba>>0]=a[ba>>0]|32;c[r>>2]=(c[r>>2]|0)+1;c[o>>2]=c[o>>2]|8192}while(0);n=n+1|0}while((n|0)!=(C|0))}if((c[r>>2]|0)>>>0>2){ca=92;break b}c[t>>2]=40892;l=c[v>>2]|0;c[v>>2]=h;if(p){aa=c[q+52>>2]|0;ba=aa+64|0;c[ba>>2]=c[q+64>>2];$j(f,aa)|0;c[ba>>2]=0}else $j(f,q)|0;c[v>>2]=h;h=q;while(1){j=c[h+52>>2]|0;if(!j)break;else h=j}h=c[h>>2]|0;k=c[m+4>>2]|0;do if(k){if(!h){h=k;break}h=c[h>>2]|0;j=c[k>>2]|0;if((h|0)==(j|0))h=k;else{ca=101;break b}}while(0);Tk(c[u>>2]|0,h,i+42|0,i+4|0);if(p){c[t>>2]=(c[q+8>>2]&8192|0)==0?40987:40953;$j(f,q)|0}c[t>>2]=0;c[v>>2]=l}while(0);l=z+16|0;h=c[l>>2]|0;if(!h){k=c[z+8>>2]|0;do if(!k){if($j(f,c[z+20>>2]|0)|0){h=2;ca=421;break b}if(Rk(ma,z)|0){h=2;ca=421;break b}}else{j=c[z>>2]|0;if(!j)h=w;else{i=c[(c[ma>>2]|0)+16>>2]|0;h=0;while(1)if((c[i+(h<<4)+12>>2]|0)==(j|0))break;else h=h+1|0;h=i+(h<<4)|0}h=bd(ma,0,k,c[h>>2]|0)|0;c[l>>2]=h;if(!h){h=2;ca=421;break b}i=h+32|0;j=c[i>>2]|0;if(j>>>0>65534){ca=115;break b}c[i>>2]=j+1;if(!(c[h+56>>2]|0)){if(a[x>>0]&4){ca=118;break b}if(!(c[h+12>>2]|0))break}if(Sk(ma,h)|0){h=2;ca=421;break b}$=fk(na,c[h+12>>2]|0,0)|0;c[z+20>>2]=$;ba=h+42|0;aa=b[ba>>1]|0;b[ba>>1]=-1;$j(f,$)|0;b[ba>>1]=aa}while(0);h=c[l>>2]|0;if(!h)break}if(a[x>>0]&2){m=c[z+64>>2]|0;h=c[h+8>>2]|0;if(!h){ca=132;break b}l=d[208+(d[m>>0]|0)>>0]|0;while(1){j=c[h>>2]|0;ba=a[j>>0]|0;i=(d[208+(ba&255)>>0]|0)-l|0;if(!(ba<<24>>24==0|(i|0)!=0)){k=m;do{j=j+1|0;k=k+1|0;ba=a[j>>0]|0;i=(d[208+(ba&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(i|0)!=0))}if(!i)break;h=c[h+20>>2]|0;if(!h){ca=132;break b}}c[z+68>>2]=h}}while(0);y=y+1|0;if((y|0)>=(c[ea>>2]|0))break a;else z=z+72|0}if((ca|0)==24){c[E>>2]=j;cd(u,i,E);pa=2;Ra=qa;return pa|0}else if((ca|0)==26){c[F>>2]=D;cd(u,41054,F);pa=2;Ra=qa;return pa|0}else if((ca|0)==51){c[z+16>>2]=0;pa=2;Ra=qa;return pa|0}else if((ca|0)==92){c[J>>2]=c[m>>2];cd(u,40849,J);pa=2;Ra=qa;return pa|0}else if((ca|0)==101){c[K>>2]=c[m>>2];c[K+4>>2]=h;c[K+8>>2]=j;cd(u,40915,K);c[v>>2]=l;pa=2;Ra=qa;return pa|0}else if((ca|0)==115){c[G>>2]=c[h>>2];cd(ma,40730,G);c[l>>2]=0;pa=2;Ra=qa;return pa|0}else if((ca|0)==118){c[H>>2]=c[z+8>>2];cd(ma,41054,H);pa=2;Ra=qa;return pa|0}else if((ca|0)==132){c[I>>2]=m;c[I+4>>2]=0;cd(ma,41107,I);a[ma+17>>0]=1;pa=2;Ra=qa;return pa|0}else if((ca|0)==421){Ra=qa;return h|0}}while(0);if(a[ha>>0]|0){pa=2;Ra=qa;return pa|0}G=c[A>>2]|0;i:do if((c[G>>2]|0)>1){H=g+36|0;D=0;E=G+8|0;F=G+80|0;j:while(1){B=c[F+16>>2]|0;if(!((B|0)==0|(c[E+16>>2]|0)==0)){ba=d[F+36>>0]|0;C=ba&32;A=(C|0)==0;f=F+44|0;if(ba&4){if(c[f>>2]|0){ca=142;break}i=F+48|0;if(c[i>>2]|0){ca=142;break}u=B+42|0;h=b[u>>1]|0;if(h<<16>>16>0){v=B+4|0;z=D+1|0;w=(C|0)!=0;x=G+8+(z*72|0)+16|0;y=G+8+(z*72|0)+40|0;z=G+8+(z*72|0)+56|0;t=0;do{p=c[(c[v>>2]|0)+(t<<4)>>2]|0;r=0;k:while(1){s=G+8+(r*72|0)+16|0;j=c[s>>2]|0;k=b[j+42>>1]|0;if(k<<16>>16>0){n=c[j+4>>2]|0;o=d[208+(d[p>>0]|0)>>0]|0;m=k<<16>>16;q=0;while(1){k=c[n+(q<<4)>>2]|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-o|0;if(!(ba<<24>>24==0|(j|0)!=0)){l=p;do{k=k+1|0;l=l+1|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(j|0)!=0))}if(!j){ca=154;break k}j=q+1|0;if((j|0)<(m|0))q=j;else break}}if(r>>>0<D>>>0)r=r+1|0;else break}if((ca|0)==154){ca=0;m=c[ma>>2]|0;l=m+272|0;l:do if(c[l>>2]|0)if(!(a[m+81>>0]|0))ca=164;else k=0;else{do if((e[m+276>>1]|0)>=52){h=m+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=165;break l}h=m+296|0;j=c[h>>2]|0;if(!j){h=m+292|0;break}else{c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=165;break l}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=164}while(0);if((ca|0)==164){j=_d(m,52,0)|0;ca=165}do if((ca|0)==165){ca=0;if(j){o=j;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[j>>0]=-94;b[j+34>>1]=-1;c[j+24>>2]=1;ba=c[s>>2]|0;c[j+44>>2]=ba;c[j+28>>2]=c[G+8+(r*72|0)+40>>2];if((q|0)==(b[ba+40>>1]|0)){b[j+32>>1]=-1;k=j;break}else{b[j+32>>1]=q;aa=cw(1,0,(q>>>0<63?q:63)|0)|0;ba=L()|0;k=G+8+(r*72|0)+56|0;$=k;ba=c[$+4>>2]|ba;c[k>>2]=c[$>>2]|aa;c[k+4>>2]=ba;k=j;break}}else k=0}while(0);m:do if(c[l>>2]|0)if(!(a[m+81>>0]|0))ca=179;else j=0;else{do if((e[m+276>>1]|0)>=52){h=m+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=180;break m}h=m+296|0;j=c[h>>2]|0;if(!j){h=m+292|0;break}else{c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=180;break m}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=179}while(0);if((ca|0)==179){j=_d(m,52,0)|0;ca=180}do if((ca|0)==180){ca=0;if(!j){j=0;break}o=j;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[j>>0]=-94;b[j+34>>1]=-1;c[j+24>>2]=1;ba=c[x>>2]|0;c[j+44>>2]=ba;c[j+28>>2]=c[y>>2];if((t|0)==(b[ba+40>>1]|0)){b[j+32>>1]=-1;break}else{b[j+32>>1]=t;$=cw(1,0,(t>>>0<63?t:63)|0)|0;aa=L()|0;_=z;aa=c[_+4>>2]|aa;ba=z;c[ba>>2]=c[_>>2]|$;c[ba+4>>2]=aa;break}}while(0);h=ej(ma,53,k,j)|0;if(w&(h|0)!=0){ba=h+4|0;c[ba>>2]=c[ba>>2]|1;b[h+36>>1]=c[j+28>>2]}h=Xk(m,c[H>>2]|0,h)|0;c[H>>2]=h;h=b[u>>1]|0}t=t+1|0}while((t|0)<(h<<16>>16|0))}}else i=F+48|0;h=c[f>>2]|0;if(h|0){if(c[i>>2]|0){ca=190;break}if(!A){Wk(h,c[F+40>>2]|0);h=c[f>>2]|0}ba=Xk(c[ma>>2]|0,c[H>>2]|0,h)|0;c[H>>2]=ba;c[f>>2]=0}y=c[i>>2]|0;if(y|0?(M=y+4|0,(c[M>>2]|0)>0):0){z=B+42|0;x=B+4|0;w=D+1|0;t=(C|0)!=0;u=G+8+(w*72|0)+16|0;v=G+8+(w*72|0)+40|0;w=G+8+(w*72|0)+56|0;s=0;do{o=c[(c[y>>2]|0)+(s<<3)>>2]|0;h=b[z>>1]|0;if(h<<16>>16<=0){ca=246;break j}l=c[x>>2]|0;p=d[208+(d[o>>0]|0)>>0]|0;k=h<<16>>16;r=0;while(1){i=c[l+(r<<4)>>2]|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-p|0;if(!(ba<<24>>24==0|(h|0)!=0)){j=o;do{i=i+1|0;j=j+1|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(h|0)!=0))}if(!h)break;h=r+1|0;if((h|0)<(k|0))r=h;else{ca=246;break j}}n=0;n:while(1){q=G+8+(n*72|0)+16|0;h=c[q>>2]|0;i=b[h+42>>1]|0;if(i<<16>>16>0){l=c[h+4>>2]|0;k=i<<16>>16;m=0;while(1){i=c[l+(m<<4)>>2]|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-p|0;if(!(ba<<24>>24==0|(h|0)!=0)){j=o;do{i=i+1|0;j=j+1|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(h|0)!=0))}if(!h)break n;h=m+1|0;if((h|0)<(k|0))m=h;else break}}if(n>>>0<D>>>0)n=n+1|0;else{ca=246;break j}}l=c[ma>>2]|0;k=l+272|0;o:do if(c[k>>2]|0)if(!(a[l+81>>0]|0))ca=223;else j=0;else{do if((e[l+276>>1]|0)>=52){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=224;break o}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=224;break o}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=223}while(0);if((ca|0)==223){i=_d(l,52,0)|0;ca=224}do if((ca|0)==224){ca=0;if(i){o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[i>>0]=-94;b[i+34>>1]=-1;c[i+24>>2]=1;ba=c[q>>2]|0;c[i+44>>2]=ba;c[i+28>>2]=c[G+8+(n*72|0)+40>>2];if((m|0)==(b[ba+40>>1]|0)){b[i+32>>1]=-1;j=i;break}else{b[i+32>>1]=m;aa=cw(1,0,(m>>>0<63?m:63)|0)|0;ba=L()|0;j=G+8+(n*72|0)+56|0;$=j;ba=c[$+4>>2]|ba;c[j>>2]=c[$>>2]|aa;c[j+4>>2]=ba;j=i;break}}else j=0}while(0);p:do if(c[k>>2]|0)if(!(a[l+81>>0]|0))ca=238;else i=0;else{do if((e[l+276>>1]|0)>=52){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=239;break p}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=239;break p}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=238}while(0);if((ca|0)==238){i=_d(l,52,0)|0;ca=239}do if((ca|0)==239){ca=0;if(i){o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[i>>0]=-94;b[i+34>>1]=-1;c[i+24>>2]=1;ba=c[u>>2]|0;c[i+44>>2]=ba;c[i+28>>2]=c[v>>2];if((r|0)==(b[ba+40>>1]|0)){b[i+32>>1]=-1;break}else{b[i+32>>1]=r;$=cw(1,0,(r>>>0<63?r:63)|0)|0;aa=L()|0;_=w;aa=c[_+4>>2]|aa;ba=w;c[ba>>2]=c[_>>2]|$;c[ba+4>>2]=aa;break}}else i=0}while(0);h=ej(ma,53,j,i)|0;if(t&(h|0)!=0){ba=h+4|0;c[ba>>2]=c[ba>>2]|1;b[h+36>>1]=c[i+28>>2]}ba=Xk(l,c[H>>2]|0,h)|0;c[H>>2]=ba;s=s+1|0}while((s|0)<(c[M>>2]|0))}}D=D+1|0;if((D|0)>=((c[G>>2]|0)+-1|0))break i;else{E=E+72|0;F=F+72|0}}if((ca|0)==142){c[N>>2]=0;cd(ma,41125,N);pa=2;Ra=qa;return pa|0}else if((ca|0)==190){cd(ma,41175,O);pa=2;Ra=qa;return pa|0}else if((ca|0)==246){c[P>>2]=o;cd(ma,41230,P);pa=2;Ra=qa;return pa|0}}while(0);k=c[fa>>2]|0;q:do if((k|0)>0){j=0;h=0;r:while(1){i=c[fa+4+(j*20|0)>>2]|0;switch(a[i>>0]|0){case -84:break r;case -122:{if((a[c[i+16>>2]>>0]|0)==-84)break r;break}default:{}}h=c[i+4>>2]|h;j=j+1|0;if((j|0)>=(k|0)){ca=415;break q}}M=0==0?(c[(c[ma>>2]|0)+32>>2]&68|0)==4:0;N=ga+4|0;O=ga+4|0;P=ga+4|0;Q=(na|0)==0;R=ma+200|0;S=na+480|0;T=na+304|0;U=ma+272|0;V=na+308|0;W=na+300|0;X=na+272|0;Y=na+276|0;Z=na+288|0;_=na+296|0;$=na+284|0;aa=na+292|0;ba=na+16|0;i=0;K=0;do{k=fa+4+(K*20|0)|0;j=c[k>>2]|0;h=c[j+4>>2]|h;switch(a[j>>0]|0){case -84:{J=0;ca=260;break}case -122:{if((a[c[j+16>>2]>>0]|0)==-84){J=c[(c[j+12>>2]|0)+8>>2]|0;ca=260}else ca=256;break}default:ca=256}do if((ca|0)==256){ca=0;i=nj(c[ma>>2]|0,i,j)|0;if(i|0){I=fa+4+(K*20|0)+4|0;H=(c[i>>2]|0)+-1|0;c[i+4+(H*20|0)+4>>2]=c[I>>2];J=fa+4+(K*20|0)+8|0;c[i+4+(H*20|0)+8>>2]=c[J>>2];c[I>>2]=0;c[J>>2]=0}c[k>>2]=0}else if((ca|0)==260){ca=0;if((c[ea>>2]|0)>0){H=(J|0)==0;I=(J|0)!=0;j=0;F=0;G=da;while(1){n=c[G+16>>2]|0;l=c[G+20>>2]|0;k=c[G+12>>2]|0;if(!k)E=c[n>>2]|0;else E=k;if(a[ha>>0]|0)break;if((l|0)!=0?(c[l+8>>2]&2048|0)!=0:0){D=0;ca=276}else ca=267;do if((ca|0)==267){ca=0;if(!H){D=a[J>>0]|0;k=(d[208+(D&255)>>0]|0)-(d[208+(d[E>>0]|0)>>0]|0)|0;if(!(D<<24>>24==0|(k|0)!=0)){l=E;m=J;do{m=m+1|0;l=l+1|0;D=a[m>>0]|0;k=(d[208+(D&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(D<<24>>24==0|(k|0)!=0))}if(k|0)break}l=c[n+72>>2]|0;if(!l){D=40769;l=0;ca=276}else{m=c[ba>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;D=c[m+(k<<4)>>2]|0;l=0;ca=276}}while(0);if((ca|0)==276){ca=0;C=n+42|0;if((b[C>>1]|0)>0){v=n+4|0;w=(l|0)!=0;f=I&w;B=H&(F|0)!=0;x=G+36|0;y=G+48|0;z=(E|0)==0;A=(D|0)==0;u=0;do{r=c[v>>2]|0;s=c[r+(u<<4)>>2]|0;s:do if(f){m=c[(c[l>>2]|0)+4+(u*20|0)+8>>2]|0;k=0;t:while(1){switch(a[m+k>>0]|0){case 46:case 0:break t;default:{}}k=k+1|0}k=m+(k+1)|0;q=0;u:while(1){switch(a[k+q>>0]|0){case 46:case 0:break u;default:{}}q=q+1|0}v:do if(q|0){p=J;n=q;while(1){m=a[k>>0]|0;if(!(m<<24>>24)){ca=288;break}m=a[208+(m&255)>>0]|0;o=a[208+(d[p>>0]|0)>>0]|0;if(m<<24>>24!=o<<24>>24){ca=290;break}if((n|0)>1){k=k+1|0;p=p+1|0;n=n+-1|0}else break v}if((ca|0)==288){ca=0;m=0;k=a[208+(d[p>>0]|0)>>0]|0}else if((ca|0)==290){ca=0;m=m&255;k=o}if((m|0)!=(k&255|0))break s}while(0);if(!(a[J+q>>0]|0))ca=294}else ca=294;while(0);w:do if((ca|0)==294){ca=0;if((c[oa>>2]&131072|0)==0?a[r+(u<<4)+15>>0]&2:0)break;do if(B){if(a[x>>0]&4){r=0;do{j=c[ea+8+(r*72|0)+16>>2]|0;k=b[j+42>>1]|0;if(k<<16>>16>0){p=c[j+4>>2]|0;q=d[208+(d[s>>0]|0)>>0]|0;o=k<<16>>16;n=0;do{k=c[p+(n<<4)>>2]|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-q|0;if(!(t<<24>>24==0|(j|0)!=0)){m=s;do{k=k+1|0;m=m+1|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){j=1;break w}n=n+1|0}while((n|0)<(o|0))}r=r+1|0}while(r>>>0<F>>>0)}j=c[y>>2]|0;if(!j)break;q=c[j+4>>2]|0;if((q|0)<=0)break;o=c[j>>2]|0;p=d[208+(d[s>>0]|0)>>0]|0;n=0;do{k=c[o+(n<<3)>>2]|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-p|0;if(!(t<<24>>24==0|(j|0)!=0)){m=s;do{k=k+1|0;m=m+1|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){j=1;break w}n=n+1|0}while((n|0)<(q|0))}while(0);c[ga>>2]=s;if(!s)j=0;else j=(Eu(s)|0)&1073741823;c[N>>2]=j;j=oj(na,59,ga,0)|0;if(!M?(c[ea>>2]|0)<=1:0){t=0;r=s}else ca=319;do if((ca|0)==319){ca=0;c[ga>>2]=E;if(z)k=0;else k=(Eu(E)|0)&1073741823;c[O>>2]=k;j=ej(ma,134,oj(na,59,ga,0)|0,j)|0;if(!A){c[ga>>2]=D;t=(Eu(D)|0)&1073741823;c[P>>2]=t;j=ej(ma,134,oj(na,59,ga,0)|0,j)|0}if(!M){t=0;r=s;break}c[ia>>2]=E;c[ia+4>>2]=s;r=dd(na,40358,ia)|0;t=r}while(0);i=nj(c[ma>>2]|0,i,j)|0;q=r;j=(r|0)==0;if(j)p=0;else p=(Eu(r)|0)&1073741823;do if(i|0){o=(c[i>>2]|0)+-1|0;n=c[ma>>2]|0;x:do if(j)n=0;else{m=p+1|0;y:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))ca=339;else{n=0;break x}else{do if(!(0>0|(0==0?m>>>0>(e[n+276>>1]|0)>>>0:0))){k=n+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];s=n+284|0;c[s>>2]=(c[s>>2]|0)+1;break y}k=n+296|0;j=c[k>>2]|0;if(!j){j=n+292|0;break}else{c[k>>2]=c[j>>2];s=n+284|0;c[s>>2]=(c[s>>2]|0)+1;break y}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;ca=339}while(0);if((ca|0)==339){ca=0;j=_d(n,m,0)|0}if(!j){n=0;break}ew(j|0,r|0,p|0)|0;a[j+p>>0]=0;n=j}while(0);c[i+4+(o*20|0)+4>>2]=n;z:do if((d[R>>0]|0)>1){m=c[ma>>2]|0;A:do if(!m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;ca=366;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){s=c[14978]|0;o=Tv(k|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&o>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j)break z;k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break z}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=366;break A}k=m+296|0;j=c[k>>2]|0;if(!j){j=m+292|0;break}else{c[k>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=366;break A}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(m,16,0)|0;ca=366}while(0);if((ca|0)==366){ca=0;if(!j)break}c[j>>2]=n;c[j+4>>2]=q;c[j+8>>2]=p;c[j+12>>2]=c[U>>2];c[U>>2]=j}while(0);if(!(c[oa>>2]&2048))break;p=(c[i>>2]|0)+-1|0;B:do if(w){n=c[(c[l>>2]|0)+4+(u*20|0)+8>>2]|0;if(!n){j=0;break}o=(Eu(n)|0)+1|0;C:do if(Q){s=Sv(o|0,0,-1,-1)|0;r=L()|0;if(r>>>0>0|(r|0)==0&s>>>0>2147483390){j=0;break B}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;ca=393;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){s=c[14978]|0;r=Tv(k|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break B}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[X>>2]|0){if(a[ha>>0]|0){j=0;break B}}else{do if(0<0|(0==0?(e[Y>>1]|0)>>>0<o>>>0:0))j=Z;else{j=c[W>>2]|0;if(j|0){c[W>>2]=c[j>>2];c[$>>2]=(c[$>>2]|0)+1;ca=393;break C}j=c[_>>2]|0;if(!j){j=aa;break}c[_>>2]=c[j>>2];c[$>>2]=(c[$>>2]|0)+1;ca=393;break C}while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(na,o,0)|0;ca=393}while(0);if((ca|0)==393){ca=0;if(!j){j=0;break}}ew(j|0,n|0,o|0)|0}else{c[ja>>2]=D;c[ja+4>>2]=E;c[ja+8>>2]=r;j=dd(na,40771,ja)|0}while(0);c[i+4+(p*20|0)+8>>2]=j;s=i+4+(p*20|0)+13|0;a[s>>0]=a[s>>0]|2}while(0);if(!t){j=1;break}do if(!Q){if(c[S>>2]|0){Xd(na,t);j=1;break w}j=t;if((c[T>>2]|0)>>>0>j>>>0)break;if((c[V>>2]|0)>>>0<=j>>>0)break;c[t>>2]=c[W>>2];c[W>>2]=t;j=1;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);j=1;break}else{j=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);j=1;break}}while(0);u=u+1|0}while((u|0)<(b[C>>1]|0))}}F=F+1|0;if((F|0)>=(c[ea>>2]|0))break;else G=G+72|0}if(j)break}if(!J){cd(ma,40798,la);break}else{c[ka>>2]=J;cd(ma,40780,ka);break}}while(0);K=K+1|0}while((K|0)<(c[fa>>2]|0));ri(na,fa);c[g>>2]=i}else{h=0;ca=415}while(0);if((ca|0)==415)i=c[g>>2]|0;if(!i){pa=0;Ra=qa;return pa|0}if((c[i>>2]|0)>(c[na+116>>2]|0)){cd(ma,40818,pa);pa=2;Ra=qa;return pa|0}if(!(h&2097156)){pa=0;Ra=qa;return pa|0}c[oa>>2]=c[oa>>2]|262144;pa=0;Ra=qa;return pa|0}function Pk(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+264|0;if(!(c[d>>2]|0))return;if(c[b+52>>2]|0)return;a=b;while(1){b=c[a+56>>2]|0;if(!b)break;else a=b}a=c[a+64>>2]|0;if(!a)return;c[d>>2]=c[a+4>>2];return}function Qk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;d=c[b>>2]|0;if((d|0)<=0)return;h=a+40|0;f=0;g=b+8|0;while(1){e=g+40|0;if((c[e>>2]|0)>-1){d=8;break}i=c[h>>2]|0;c[h>>2]=i+1;c[e>>2]=i;e=c[g+20>>2]|0;if(e){Qk(a,c[e+32>>2]|0);d=c[b>>2]|0}f=f+1|0;if((f|0)>=(d|0)){d=8;break}else g=g+72|0}if((d|0)==8)return}function Rk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;l=o;g=c[f+20>>2]|0;j=c[d>>2]|0;a:do if(!j){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](80)|0;n=24;break}h=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){m=c[14978]|0;k=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=m>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(i){h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;m=i}else m=i}else n=25}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){n=25;break}}else{do if((e[j+276>>1]|0)>=80){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=24;break a}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=24;break a}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,80,0)|0;n=24}while(0);if((n|0)==24)if(!h)n=25;else m=h;if((n|0)==25){c[f+16>>2]=0;d=7;Ra=o;return d|0}h=m;i=h+80|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));c[f+16>>2]=m;c[m+32>>2]=1;k=c[f+12>>2]|0;j=c[d>>2]|0;b:do if(!k){c[l>>2]=c[g+20>>2];h=dd(j,41042,l)|0}else{f=(Eu(k)|0)+1|0;c:do if(!j){l=Sv(f|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&l>>>0>2147483390){h=0;break b}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;n=51;break}h=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){l=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=l>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){h=0;break b}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){h=0;break b}}else{do if(!(0<0|(0==0?(e[j+276>>1]|0)>>>0<f>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=51;break c}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=51;break c}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,f,0)|0;n=51}while(0);if((n|0)==51)if(!h){h=0;break}ew(h|0,k|0,f|0)|0}while(0);c[m>>2]=h;while(1){h=c[g+52>>2]|0;if(!h)break;else g=h}Tk(c[d>>2]|0,c[g>>2]|0,m+42|0,m+4|0);b[m+40>>1]=-1;b[m+44>>1]=200;d=m+36|0;c[d>>2]=c[d>>2]|2;d=0;Ra=o;return d|0}function Sk(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=Ra;Ra=Ra+32|0;s=v+16|0;r=v+8|0;n=v;o=v+20|0;u=c[e>>2]|0;p=u+56|0;i=c[p>>2]|0;c[p>>2]=i+1;q=f+56|0;g=c[q>>2]|0;a:do if(g){h=c[f+64>>2]|0;if(h|0)do{if((c[h>>2]|0)==(u|0)){t=33;break a}h=c[h+24>>2]|0}while((h|0)!=0);m=c[c[f+60>>2]>>2]|0;j=c[u+348>>2]|0;if(!j){h=u+340|0;g=u+344|0}else{h=a[m>>0]|0;if(!(h<<24>>24))g=0;else{g=0;i=m;do{i=i+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[i>>0]|0}while(h<<24>>24!=0)}g=(g>>>0)%((c[u+336>>2]|0)>>>0)|0;h=j+(g<<3)|0;g=j+(g<<3)+4|0}h=c[h>>2]|0;b:do if(!h)g=59292;else{l=d[208+(d[m>>0]|0)>>0]|0;while(1){g=c[g>>2]|0;h=h+-1|0;j=c[g+12>>2]|0;k=a[j>>0]|0;i=(d[208+(k&255)>>0]|0)-l|0;if(!(k<<24>>24==0|(i|0)!=0)){k=m;do{j=j+1|0;k=k+1|0;w=a[j>>0]|0;i=(d[208+(w&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(i|0)!=0))}if(!i)break b;if(!h){g=59292;break}}}while(0);g=c[g+8>>2]|0;if(!g){c[n>>2]=m;cd(e,36690,n);c[p>>2]=(c[p>>2]|0)+-1;w=1;Ra=v;return w|0}c[o>>2]=0;h=Ai(u,f,g,c[(c[g>>2]|0)+8>>2]|0,o)|0;i=(h|0)==0;g=c[o>>2]|0;if(!i){c[r>>2]=g;cd(e,31408,r);c[e+12>>2]=h}do if(g|0){if(u|0){if(c[u+480>>2]|0){Xd(u,g);break}w=g;if((c[u+304>>2]|0)>>>0<=w>>>0?(c[u+308>>2]|0)>>>0>w>>>0:0){w=u+300|0;c[g>>2]=c[w>>2];c[w>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{w=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[p>>2]=(c[p>>2]|0)+-1;if(i){g=c[q>>2]|0;break}else{w=1;Ra=v;return w|0}}else t=33;while(0);if((t|0)==33)c[p>>2]=i;if(g|0){w=0;Ra=v;return w|0}p=f+42|0;g=b[p>>1]|0;if(g<<16>>16>0){w=0;Ra=v;return w|0}if(g<<16>>16<0){c[s>>2]=c[f>>2];cd(e,41077,s);w=1;Ra=v;return w|0}i=fk(u,c[f+12>>2]|0,0)|0;if(!i)o=1;else{j=e+200|0;k=a[j>>0]|0;a[j>>0]=0;h=e+40|0;w=c[h>>2]|0;Qk(e,c[i+32>>2]|0);b[p>>1]=-1;l=u+272|0;c[l>>2]=(c[l>>2]|0)+1;s=u+312|0;r=c[s>>2]|0;c[s>>2]=0;g=yk(e,i)|0;c[s>>2]=r;c[h>>2]=w;h=c[f+24>>2]|0;do if(!h)if(!g){b[p>>1]=0;g=1;break}else{w=g+42|0;b[p>>1]=b[w>>1]|0;t=g+4|0;c[f+4>>2]=c[t>>2];b[w>>1]=0;c[t>>2]=0;t=50;break}else{Tk(c[e>>2]|0,h,p,f+4|0);if(((a[u+81>>0]|0)==0?(c[e+36>>2]|0)==0:0)?(c[c[i>>2]>>2]|0)==(b[p>>1]|0):0)Uk(e,f,i);if(!g)g=0;else t=50}while(0);do if((t|0)==50){if(c[u+480>>2]|0){Vi(u,g);g=0;break}t=g+32|0;w=(c[t>>2]|0)+-1|0;c[t>>2]=w;if(!w){Vi(u,g);g=0}else g=0}while(0);pi(u,i,1);c[l>>2]=(c[l>>2]|0)+-1;a[j>>0]=k;o=g}w=(c[f+72>>2]|0)+78|0;b[w>>1]=b[w>>1]|2;if(!(a[u+81>>0]|0)){w=o;Ra=v;return w|0}n=f+4|0;g=c[n>>2]|0;do if(g|0){if((b[p>>1]|0)>0){j=u+480|0;k=u+304|0;l=u+308|0;m=u+300|0;i=0;while(1){h=c[g>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(u,h);break}w=h;if((c[k>>2]|0)>>>0<=w>>>0?(c[l>>2]|0)>>>0>w>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[g+4>>2]|0;if(h|0)ni(u,h);h=c[g+8>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(u,h);break}w=h;if((c[k>>2]|0)>>>0<=w>>>0?(c[l>>2]|0)>>>0>w>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;if((i|0)>=(b[p>>1]|0))break;else g=g+16|0}g=c[n>>2]|0}if(g|0){if(u|0){if(c[u+480>>2]|0){Xd(u,g);break}w=g;if((c[u+304>>2]|0)>>>0<=w>>>0?(c[u+308>>2]|0)>>>0>w>>>0:0){w=u+300|0;c[g>>2]=c[w>>2];c[w>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{w=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);c[n>>2]=0;b[p>>1]=0;w=o;Ra=v;return w|0}function Tk(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;R=Ra;Ra=Ra+48|0;P=R+8|0;O=R;N=R+40|0;Q=R+24|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;do if(g){n=c[g>>2]|0;m=n<<4;a:do if(!f){M=Sv(m|0,0,-1,-1)|0;K=L()|0;if(!(K>>>0>0|(K|0)==0&M>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;s=27;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){M=c[14978]|0;K=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;J=L()|0;c[14768]=((J|0)<0|(J|0)==0&K>>>0<=M>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;s=28}else s=28}else M=0}else M=0}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){M=0;break}}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<m>>>0:0))){k=f+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];s=f+284|0;c[s>>2]=(c[s>>2]|0)+1;s=27;break a}k=f+296|0;j=c[k>>2]|0;if(!j){j=f+292|0;break}else{c[k>>2]=c[j>>2];s=f+284|0;c[s>>2]=(c[s>>2]|0)+1;s=27;break a}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(f,m,0)|0;s=27}while(0);if((s|0)==27)if(!j)M=0;else s=28;if((s|0)==28){gw(j|0,0,m|0)|0;M=j}if((n|0)<32767){b[h>>1]=n;c[i>>2]=M;k=f+81|0;if((n|0)>0)K=k;else{j=M;l=M;s=32;break}}else{b[h>>1]=32767;c[i>>2]=M;n=32767;K=f+81|0}H=(f|0)==0;J=Q+12|0;I=Q+8|0;u=Q+4|0;v=f+272|0;w=f+276|0;x=f+288|0;y=f+300|0;z=f+296|0;A=f+284|0;B=f+292|0;C=f+82|0;D=f+180|0;E=f+264|0;F=f+236|0;t=M;l=0;while(1){if(a[K>>0]|0)break;j=c[g+4+(l*20|0)+4>>2]|0;do if(!j){j=c[g+4+(l*20|0)>>2]|0;b:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break b;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);c:while(1){switch(a[j>>0]|0){case -94:{s=46;break c}case 59:{s=50;break c}case -122:break;default:{s=51;break c}}j=c[j+16>>2]|0}if((s|0)==46){k=b[j+32>>1]|0;m=c[j+44>>2]|0;if(k<<16>>16<0)j=b[m+40>>1]|0;else j=k<<16>>16;if((j|0)<=-1){j=38132;s=53;break}j=(c[m+4>>2]|0)+(j<<4)|0}else if((s|0)==50)j=j+8|0;else if((s|0)==51)j=g+4+(l*20|0)+8|0;j=c[j>>2]|0;if(!j){c[O>>2]=l+1;j=dd(f,41025,O)|0;c[N>>2]=0;if(!j)s=107;else s=78}else s=53}else s=53;while(0);do if((s|0)==53){p=(Eu(j)|0)+1|0;do if(H){s=Sv(p|0,0,-1,-1)|0;r=L()|0;if(!(r>>>0>0|(r|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](p)|0;s=74;break}k=Wa[c[29356>>2]&127](p)|0;if((c[14985]|0)>>>0<p>>>0)c[14985]=p;o=59064;m=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&m>>>0>0){s=c[14978]|0;r=Tv(m|0,o|0,k|0,((k|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){m=Wa[c[29352>>2]&127](k)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;s=75}else s=75}else s=76}else s=76}else{if(!(c[v>>2]|0)){if(!(0<0|(0==0?(e[w>>1]|0)>>>0<p>>>0:0))){k=c[y>>2]|0;if(k|0){c[y>>2]=c[k>>2];c[A>>2]=(c[A>>2]|0)+1;s=74;break}k=c[z>>2]|0;if(!k)k=B;else{c[z>>2]=c[k>>2];c[A>>2]=(c[A>>2]|0)+1;s=74;break}}else k=x;c[k>>2]=(c[k>>2]|0)+1}k=_d(f,p,0)|0;s=74}while(0);if((s|0)==74)if(!k)s=76;else s=75;if((s|0)==75){ew(k|0,j|0,p|0)|0;c[N>>2]=0;j=k;s=78;break}else if((s|0)==76){c[N>>2]=0;s=107;break}}while(0);d:do if((s|0)==78){s=0;while(1){p=c[J>>2]|0;if(!p){m=u;k=I}else{m=a[j>>0]|0;if(!(m<<24>>24))k=0;else{k=0;o=j;do{o=o+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[o>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[Q>>2]|0)>>>0)|0;m=p+(k<<3)|0;k=p+(k<<3)+4|0}m=c[m>>2]|0;e:do if(!m)k=59292;else{r=d[208+(d[j>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;p=c[k+12>>2]|0;q=a[p>>0]|0;o=(d[208+(q&255)>>0]|0)-r|0;if(!(q<<24>>24==0|(o|0)!=0)){q=j;do{p=p+1|0;q=q+1|0;S=a[p>>0]|0;o=(d[208+(S&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(o|0)!=0))}if(!o)break e;if(!m){k=59292;break}}}while(0);if(!(c[k+8>>2]|0))break;S=Eu(j)|0;k=S&1073741823;f:do switch(S&1073741823|0){case 0:break;case 1:{m=0;s=96;break}default:{o=k+-1|0;while(1){if(((d[j+o>>0]|0)+-48|0)>>>0>=10){m=o;s=96;break f}m=o+-1|0;if((o|0)>1)o=m;else{s=96;break}}}}while(0);if((s|0)==96){s=0;k=(a[j+m>>0]|0)==58?m:k}S=(c[N>>2]|0)+1|0;c[N>>2]=S;c[P>>2]=k;c[P+4>>2]=j;c[P+8>>2]=S;j=dd(f,41034,P)|0;if((c[N>>2]|0)>>>0>3)Fb(4,N);if(!j){s=107;break d}}c[t>>2]=j;if(((mi(Q,j,t)|0)==(t|0)?(a[K>>0]|0)==0:0)?(a[C>>0]|0)==0:0){a[K>>0]=1;if((c[D>>2]|0)>0)c[E>>2]=1;c[v>>2]=(c[v>>2]|0)+1;j=c[F>>2]|0;if(j|0)c[j+12>>2]=7}}while(0);if((s|0)==107){s=0;c[t>>2]=0}l=l+1|0;if((l|0)<(n|0))t=t+16|0;else break}j=c[I>>2]|0;k=c[J>>2]|0;c[I>>2]=0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[J>>2]=0;c[Q>>2]=0;if(!j){r=M;q=l;j=K;l=M}else{do{k=j;j=c[j>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((j|0)!=0);r=M;q=l;j=K;l=M}}else{b[h>>1]=0;c[i>>2]=0;j=0;k=f+81|0;l=0;s=32}while(0);if((s|0)==32){c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q>>2]=0;r=j;q=0;j=k}c[Q+4>>2]=0;if(!(a[j>>0]|0)){Ra=R;return}g:do if(q|0){k=f+480|0;m=f+304|0;n=f+308|0;o=f+300|0;if(!f){j=0;while(1){k=c[r+(j<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);j=j+1|0;if((j|0)==(q|0))break g}}j=0;do{p=c[r+(j<<4)>>2]|0;do if(p|0){if(c[k>>2]|0){Xd(f,p);break}S=p;if((c[m>>2]|0)>>>0<=S>>>0?(c[n>>2]|0)>>>0>S>>>0:0){c[p>>2]=c[o>>2];c[o>>2]=p;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{S=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);j=j+1|0}while((j|0)!=(q|0))}while(0);do if(l|0){if(f|0){if(c[f+480>>2]|0){Xd(f,l);break}S=l;if((c[f+304>>2]|0)>>>0<=S>>>0?(c[f+308>>2]|0)>>>0>S>>>0:0){S=f+300|0;c[l>>2]=c[S>>2];c[S>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{S=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[i>>2]=0;b[h>>1]=0;Ra=R;return}function Uk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+32|0;F=I;G=c[d>>2]|0;H=G+81|0;if(a[H>>0]|0){Ra=I;return};c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;c[F+16>>2]=0;c[F+20>>2]=0;c[F+24>>2]=0;c[F+28>>2]=0;c[F+4>>2]=c[g+32>>2];r=c[g>>2]|0;s=f+42|0;if((b[s>>1]|0)>0){t=G+272|0;u=G+304|0;v=G+276|0;w=G+308|0;x=G+288|0;y=G+300|0;z=G+480|0;A=(G|0)==0;B=G+296|0;C=G+284|0;D=G+292|0;p=0;q=c[f+4>>2]|0;while(1){m=c[r+4+(p*20|0)>>2]|0;l=Vk(F,m)|0;g=Xj(m)|0;n=q+13|0;a[n>>0]=g;if(l){k=(Eu(l)|0)&1073741823;h=c[q>>2]|0;a:do if(!h){h=k+2|0;do if(c[t>>2]|0)if(!(a[H>>0]|0))o=15;else{c[q>>2]=0;break a}else{if(!(0<0|(0==0?(e[v>>1]|0)>>>0<h>>>0:0))){g=c[y>>2]|0;if(g|0){c[y>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;break}g=c[B>>2]|0;if(!g)g=D;else{c[B>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;break}}else g=x;c[g>>2]=(c[g>>2]|0)+1;o=15}while(0);if((o|0)==15){o=0;g=_d(G,h,0)|0}c[q>>2]=g;if(g|0){g=g+1|0;o=32}}else{i=(Eu(h)|0)&1073741823;g=k+2+i|0;j=h;if(((c[u>>2]|0)>>>0<=j>>>0?(c[w>>2]|0)>>>0>j>>>0:0)?!(0<0|(0==0?(e[v>>1]|0)>>>0<g>>>0:0)):0){g=h+(i+1)|0;o=32;break}g=Zd(G,h,g,0)|0;if(g|0){c[q>>2]=g;g=g+(i+1)|0;o=32;break}do if(!(c[z>>2]|0)){if((c[u>>2]|0)>>>0<=j>>>0?(c[w>>2]|0)>>>0>j>>>0:0){c[h>>2]=c[y>>2];c[y>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(G,h);while(0);c[q>>2]=0}while(0);if((o|0)==32){o=0;j=q+15|0;ew(g|0,l|0,k+1|0)|0;a[j>>0]=a[j>>0]|4}g=a[n>>0]|0}if(!(g<<24>>24))a[n>>0]=65;g=Yi(d,m)|0;if(g|0?(E=q+8|0,(c[E>>2]|0)==0):0){j=c[g>>2]|0;b:do if(!j)g=0;else{k=(Eu(j)|0)+1|0;do if(A){n=Sv(k|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&n>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](k)|0;o=61;break}g=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){n=c[14978]|0;m=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[t>>2]|0){if(a[H>>0]|0){g=0;break b}}else{if(!(0<0|(0==0?(e[v>>1]|0)>>>0<k>>>0:0))){g=c[y>>2]|0;if(g|0){c[y>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;o=61;break}g=c[B>>2]|0;if(!g)g=D;else{c[B>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;o=61;break}}else g=x;c[g>>2]=(c[g>>2]|0)+1}g=_d(G,k,0)|0;o=61}while(0);if((o|0)==61){o=0;if(!g){g=0;break}}ew(g|0,j|0,k|0)|0}while(0);c[E>>2]=g}p=p+1|0;if((p|0)>=(b[s>>1]|0))break;else q=q+16|0}}b[f+46>>1]=1;Ra=I;return}function Vk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;m=o;switch(a[e>>0]|0){case -94:{k=b[e+32>>1]|0;n=k<<16>>16;if(!d){n=0;Ra=o;return n|0}j=e+28|0;f=0;do{i=c[d+4>>2]|0;g=c[i>>2]|0;a:do if((g|0)>0){h=c[j>>2]|0;e=0;while(1){if((c[i+8+(e*72|0)+40>>2]|0)==(h|0))break;e=e+1|0;if((e|0)>=(g|0)){l=9;break a}}g=c[i+8+(e*72|0)+16>>2]|0;f=c[i+8+(e*72|0)+20>>2]|0}else l=9;while(0);if((l|0)==9){l=0;d=c[d+12>>2]|0;g=0}e=(g|0)==0}while(e&(d|0)!=0);if(e){n=0;Ra=o;return n|0}if(!f){if(k<<16>>16<0){n=31453;Ra=o;return n|0}e=c[g+4>>2]|0;if(!(a[e+(n<<4)+15>>0]&4)){n=0;Ra=o;return n|0}n=c[e+(n<<4)>>2]|0;n=n+(Eu(n)|0)+1|0;Ra=o;return n|0}else{if(k<<16>>16<=-1){n=0;Ra=o;return n|0}e=c[f>>2]|0;if((c[e>>2]|0)<=(n|0)){n=0;Ra=o;return n|0}n=c[e+4+(n*20|0)>>2]|0;c[m+4>>2]=c[f+32>>2];c[m+12>>2]=d;c[m>>2]=c[d>>2];n=Vk(m,n)|0;Ra=o;return n|0}}case -125:{l=c[e+20>>2]|0;n=c[(c[l>>2]|0)+4>>2]|0;c[m+4>>2]=c[l+32>>2];c[m+12>>2]=d;c[m>>2]=c[d>>2];n=Vk(m,n)|0;Ra=o;return n|0}default:{n=0;Ra=o;return n|0}}return 0}function Wk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!d)return;j=e&65535;do{g=d+4|0;c[g>>2]=c[g>>2]|1;b[d+36>>1]=j;if(((a[d>>0]|0)==-95?(h=d+20|0,i=c[h>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){f=0;g=i;do{Wk(c[g+4+(f*20|0)>>2]|0,e);f=f+1|0;g=c[h>>2]|0}while((f|0)<(c[g>>2]|0))}Wk(c[d+12>>2]|0,e);d=c[d+16>>2]|0}while((d|0)!=0);return}function Xk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;h=m;if(!f){l=g;Ra=m;return l|0}if(!g){l=f;Ra=m;return l|0}c[h>>2]=0;l=f+4|0;if((c[l>>2]&1|0)==0?(uk(f,h)|0)!=0:0)if(!(c[h>>2]|0)){ni(d,f);ni(d,g)}else j=7;else j=7;do if((j|0)==7){c[h>>2]=0;k=g+4|0;if((c[k>>2]&1|0)==0?(uk(g,h)|0)!=0:0){if(!(c[h>>2]|0)){ni(d,f);ni(d,g);break}}else j=9;a:do if(c[d+272>>2]|0){if(!(a[d+81>>0]|0))j=24}else{do if((e[d+276>>1]|0)>=52){h=d+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=d+284|0;c[j>>2]=(c[j>>2]|0)+1;j=25;break a}h=d+296|0;i=c[h>>2]|0;if(!i){h=d+292|0;break}else{c[h>>2]=c[i>>2];j=d+284|0;c[j>>2]=(c[j>>2]|0)+1;j=25;break a}}else h=d+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=24}while(0);if((j|0)==24){i=_d(d,52,0)|0;j=25}if((j|0)==25?i|0:0){h=i;j=h+52|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));a[i>>0]=44;b[i+34>>1]=-1;c[i+24>>2]=1;c[i+16>>2]=g;k=c[k>>2]&2097412;g=i+4|0;c[g>>2]=k;c[i+12>>2]=f;c[g>>2]=k|c[l>>2]&2097412;Ym(i);l=i;Ra=m;return l|0}ni(d,f);ni(d,g);l=0;Ra=m;return l|0}while(0);l=oj(d,147,17136,0)|0;Ra=m;return l|0}function Yk(a,b){a=a|0;b=b|0;return 0}function Zk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=b+8|0;e=c[d>>2]|0;if(e&128|0)return;c[d>>2]=e|128;h=c[a>>2]|0;g=c[b+32>>2]|0;a=c[g>>2]|0;if((a|0)<=0)return;b=0;f=g+8|0;while(1){e=c[f+16>>2]|0;if((c[e+36>>2]&2|0)!=0?(i=c[f+20>>2]|0,(i|0)!=0):0){a=i;while(1){d=c[a+52>>2]|0;if(!d)break;else a=d}Uk(h,e,a);a=c[g>>2]|0}b=b+1|0;if((b|0)>=(a|0))break;else f=f+72|0}return}function _k(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!(c[b+4>>2]&16777216))return 0;a=(c[a+24>>2]|0)+68|0;e=c[a>>2]|0;if(!e)return 0;f=c[b+44>>2]|0;d=a;b=e;while(1){a=b+32|0;if((b|0)==(f|0))break;b=c[a>>2]|0;if(!b){g=7;break}else d=a}if((g|0)==7)return 0;c[d>>2]=c[a>>2];return 0}function $k(a,b){a=a|0;b=b|0;var d=0;a=c[(c[a>>2]|0)+272>>2]|0;if(!a)return 0;while(1){if((c[a>>2]|0)==(b|0))break;a=c[a+12>>2]|0;if(!a){d=6;break}}if((d|0)==6)return 0;c[a>>2]=0;return 0}function al(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;q=r;if(!e){q=0;Ra=r;return q|0}m=c[b+12>>2]|0;if((c[e>>2]|0)<=0){q=0;Ra=r;return q|0}n=b+8|0;p=b+4|0;k=0;l=e+8|0;a:while(1){if(!(c[n>>2]|0)){i=l+4|0;j=c[i>>2]|0;do if(j|0){h=a[j>>0]|0;f=(d[208+(h&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(h<<24>>24==0|(f|0)!=0)){g=m;h=j;do{h=h+1|0;g=g+1|0;s=a[h>>0]|0;f=(d[208+(s&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(f|0)!=0))}h=c[b>>2]|0;if(f|0){g=10;break a}f=c[h>>2]|0;if(f|0){if(c[f+480>>2]|0){Xd(f,j);break}s=j;if((c[f+304>>2]|0)>>>0<=s>>>0?(c[f+308>>2]|0)>>>0>s>>>0:0){s=f+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[i>>2]=0;c[l>>2]=c[p>>2]}if(cl(b,c[l+20>>2]|0)|0){f=1;g=30;break}if(dl(b,c[l+44>>2]|0)|0){f=1;g=30;break}if((a[l+37>>0]&4?(o=c[l+64>>2]|0,o|0):0)?(c[o>>2]|0)>0:0){f=o+4|0;g=0;while(1){if(dl(b,c[f>>2]|0)|0){f=1;g=30;break a}g=g+1|0;if((g|0)>=(c[o>>2]|0))break;else f=f+20|0}}k=k+1|0;if((k|0)>=(c[e>>2]|0)){f=0;g=30;break}else l=l+72|0}if((g|0)==10){s=c[b+20>>2]|0;c[q>>2]=c[b+16>>2];c[q+4>>2]=s;c[q+8>>2]=j;cd(h,42344,q);s=1;Ra=r;return s|0}else if((g|0)==30){Ra=r;return f|0}return 0}function bl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+16|0;n=A+8|0;m=A;s=A+12|0;q=c[f+12>>2]|0;p=d+40|0;y=c[p>>2]|0;z=y+1|0;c[p>>2]=y+2;k=c[d>>2]|0;i=c[f+24>>2]|0;j=c[k+16>>2]|0;if(!i)t=-1e6;else{h=0;while(1)if((c[j+(h<<4)+12>>2]|0)==(i|0)){t=h;break}else h=h+1|0}i=c[f>>2]|0;h=c[j+(t<<4)>>2]|0;do if(((a[k+165>>0]|0)==0?(a[d+200>>0]|0)==0:0)?(l=c[k+312>>2]|0,l|0):0){h=$a[l&127](c[k+316>>2]|0,27,i,0,h,c[d+240>>2]|0)|0;if((h|0)==1){cd(d,39216,m);c[d+12>>2]=23;Ra=A;return}if((h|2|0)==2){if(!h)break;Ra=A;return}else{cd(d,39231,n);c[d+12>>2]=1;Ra=A;return}}while(0);Hj(d,t,c[q+28>>2]|0,1,c[q>>2]|0);n=d+8|0;h=c[n>>2]|0;if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;a:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))o=26;else{Ra=A;return}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break a}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break a}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;o=26}while(0);if((o|0)==26)j=_d(k,224,0)|0;if(!j){Ra=A;return}h=j+104|0;i=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=k;h=k+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;c[j+8>>2]=i;c[j+4>>2]=0;c[h>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=d;c[n>>2]=j;Di(j,61,0,1,0)|0;w=j}else w=h;if((g|0)>-1)l=g;else l=c[f+44>>2]|0;o=Ij(d,f)|0;x=c[p>>2]|0;c[p>>2]=x+1;r=f+50|0;i=e[r>>1]|0;m=(o|0)==0;if(!m)c[o>>2]=(c[o>>2]|0)+1;u=w+108|0;h=c[u>>2]|0;v=w+112|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;p=c[w+104>>2]|0;a[p+(h*20|0)>>0]=114;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=x;c[p+(h*20|0)+8>>2]=0;c[p+(h*20|0)+12>>2]=i;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0}else h=Di(w,114,x,0,i)|0;i=c[w>>2]|0;do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[u>>2]|0)+-1|0;i=c[w+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(w,i+(h*20|0)|0,o,-9);break}if(!m){c[i+(h*20|0)+16>>2]=o;a[j>>0]=-9}}else if(!(m|(c[i+480>>2]|0)!=0)?(p=(c[o>>2]|0)+-1|0,c[o>>2]=p,(p|0)==0):0){h=c[o+12>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,o);break}p=o;if((c[h+304>>2]|0)>>>0<=p>>>0?(c[h+308>>2]|0)>>>0>p>>>0:0){p=h+300|0;c[o>>2]=c[p>>2];c[p>>2]=o;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{p=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);Gj(d,y,t,q,108);h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;q=c[w+104>>2]|0;a[q+(h*20|0)>>0]=36;b[q+(h*20|0)+2>>1]=0;c[q+(h*20|0)+4>>2]=y;c[q+(h*20|0)+8>>2]=0;c[q+(h*20|0)+12>>2]=0;c[q+(h*20|0)+16>>2]=0;a[q+(h*20|0)+1>>0]=0}else h=Di(w,36,y,0,0)|0;q=d+19|0;i=a[q>>0]|0;if(!(i<<24>>24)){k=d+44|0;p=(c[k>>2]|0)+1|0;c[k>>2]=p}else{p=i+-1<<24>>24;a[q>>0]=p;p=c[d+148+((p&255)<<2)>>2]|0}i=c[d+116>>2]|0;a[((i|0)==0?d:i)+20>>0]=1;el(d,f,y,p,0,s,0,0)|0;i=c[u>>2]|0;if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;k=c[w+104>>2]|0;a[k+(i*20|0)>>0]=-125;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=x;c[k+(i*20|0)+8>>2]=p;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else Di(w,131,x,p,0)|0;i=c[s>>2]|0;do if(i|0){j=c[n>>2]|0;k=c[j+12>>2]|0;i=~i;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,j,i);break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[j+108>>2];break}}while(0);i=h+1|0;j=c[u>>2]|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;s=c[w+104>>2]|0;a[s+(j*20|0)>>0]=5;b[s+(j*20|0)+2>>1]=0;c[s+(j*20|0)+4>>2]=y;c[s+(j*20|0)+8>>2]=i;c[s+(j*20|0)+12>>2]=0;c[s+(j*20|0)+16>>2]=0;a[s+(j*20|0)+1>>0]=0}else Di(w,5,y,i,0)|0;i=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))h=(c[w+104>>2]|0)+(((h|0)<0?i+-1|0:h)*20|0)|0;else h=59308;c[h+8>>2]=i;do if((g|0)<0)if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;s=c[w+104>>2]|0;a[s+(i*20|0)>>0]=-119;b[s+(i*20|0)+2>>1]=0;c[s+(i*20|0)+4>>2]=l;c[s+(i*20|0)+8>>2]=t;c[s+(i*20|0)+12>>2]=0;c[s+(i*20|0)+16>>2]=0;a[s+(i*20|0)+1>>0]=0;break}else{Di(w,137,l,t,0)|0;break}while(0);h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;s=c[w+104>>2]|0;a[s+(h*20|0)>>0]=109;b[s+(h*20|0)+2>>1]=0;c[s+(h*20|0)+4>>2]=z;c[s+(h*20|0)+8>>2]=l;c[s+(h*20|0)+12>>2]=t;c[s+(h*20|0)+16>>2]=0;a[s+(h*20|0)+1>>0]=0}else h=Di(w,109,z,l,t)|0;i=c[w>>2]|0;b:do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[u>>2]|0)+-1|0;i=c[w+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(w,i+(h*20|0)|0,o,-9);break}if(!m){c[i+(h*20|0)+16>>2]=o;a[j>>0]=-9}}else if(!(m|(c[i+480>>2]|0)!=0)?(t=(c[o>>2]|0)+-1|0,c[o>>2]=t,(t|0)==0):0){h=c[o+12>>2]|0;do if(h|0){if(c[h+480>>2]|0){Xd(h,o);break b}i=o;if((c[h+304>>2]|0)>>>0>i>>>0)break;if((c[h+308>>2]|0)>>>0<=i>>>0)break;t=h+300|0;c[o>>2]=c[t>>2];c[t>>2]=o;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);h=c[u>>2]|0;if((h|0)>0)b[(c[w+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=(g>>31)+16&65520|1;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;l=c[w+104>>2]|0;a[l+(h*20|0)>>0]=34;b[l+(h*20|0)+2>>1]=0;c[l+(h*20|0)+4>>2]=x;c[l+(h*20|0)+8>>2]=0;c[l+(h*20|0)+12>>2]=0;c[l+(h*20|0)+16>>2]=0;a[l+(h*20|0)+1>>0]=0;l=h}else l=Di(w,34,x,0,0)|0;h=c[u>>2]|0;if(!(a[f+54>>0]|0))k=h;else{if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;j=c[w+104>>2]|0;a[j+(h*20|0)>>0]=11;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=0;c[j+(h*20|0)+8>>2]=1;c[j+(h*20|0)+12>>2]=0;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0;j=h}else j=Di(w,11,0,1,0)|0;k=c[u>>2]|0;i=e[r>>1]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;h=c[w+104>>2]|0;a[h+(k*20|0)>>0]=125;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=x;c[h+(k*20|0)+8>>2]=j;c[h+(k*20|0)+12>>2]=p;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0;h=k}else h=Di(w,125,x,j,p)|0;if(!(a[(c[w>>2]|0)+81>>0]|0)){g=c[w+104>>2]|0;a[g+(h*20|0)+1>>0]=-3;c[g+(h*20|0)+16>>2]=i}fl(d,2,f);h=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))i=(c[w+104>>2]|0)+(((j|0)<0?h+-1|0:j)*20|0)|0;else i=59308;c[i+8>>2]=h}if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=126;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=x;c[f+(h*20|0)+8>>2]=p;c[f+(h*20|0)+12>>2]=z;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,126,x,p,z)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=-126;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=z;c[f+(h*20|0)+8>>2]=0;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,130,z,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=-124;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=z;c[f+(h*20|0)+8>>2]=p;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,132,z,p,0)|0;h=c[u>>2]|0;if((h|0)>0)b[(c[w+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=16;do if(p){i=a[q>>0]|0;if((i&255)>=8)break;a[q>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=p;h=c[u>>2]|0}while(0);if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;d=c[w+104>>2]|0;a[d+(h*20|0)>>0]=3;b[d+(h*20|0)+2>>1]=0;c[d+(h*20|0)+4>>2]=x;c[d+(h*20|0)+8>>2]=k;c[d+(h*20|0)+12>>2]=0;c[d+(h*20|0)+16>>2]=0;a[d+(h*20|0)+1>>0]=0}else Di(w,3,x,k,0)|0;i=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))h=(c[w+104>>2]|0)+(((l|0)<0?i+-1|0:l)*20|0)|0;else h=59308;c[h+8>>2]=i;if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;d=c[w+104>>2]|0;a[d+(i*20|0)>>0]=117;b[d+(i*20|0)+2>>1]=0;c[d+(i*20|0)+4>>2]=y;c[d+(i*20|0)+8>>2]=0;c[d+(i*20|0)+12>>2]=0;c[d+(i*20|0)+16>>2]=0;a[d+(i*20|0)+1>>0]=0}else Di(w,117,y,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;y=c[w+104>>2]|0;a[y+(h*20|0)>>0]=117;b[y+(h*20|0)+2>>1]=0;c[y+(h*20|0)+4>>2]=z;c[y+(h*20|0)+8>>2]=0;c[y+(h*20|0)+12>>2]=0;c[y+(h*20|0)+16>>2]=0;a[y+(h*20|0)+1>>0]=0}else Di(w,117,z,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;z=c[w+104>>2]|0;a[z+(h*20|0)>>0]=117;b[z+(h*20|0)+2>>1]=0;c[z+(h*20|0)+4>>2]=x;c[z+(h*20|0)+8>>2]=0;c[z+(h*20|0)+12>>2]=0;c[z+(h*20|0)+16>>2]=0;a[z+(h*20|0)+1>>0]=0;Ra=A;return}else{Di(w,117,x,0,0)|0;Ra=A;return}}function cl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!b){a=0;return a|0}a:while(1){f=c[b>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(al(a,c[b+32>>2]|0)|0){b=1;d=28;break}if(dl(a,c[b+36>>2]|0)|0){b=1;d=28;break}f=c[b+40>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(dl(a,c[b+44>>2]|0)|0){b=1;d=28;break}f=c[b+48>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(dl(a,c[b+60>>2]|0)|0){b=1;d=28;break}f=b+64|0;d=c[f>>2]|0;if(d|0?(c[d>>2]|0)>0:0){e=0;do{if(cl(a,c[d+8+(e<<4)+8>>2]|0)|0){b=1;d=28;break a}e=e+1|0;d=c[f>>2]|0}while((e|0)<(c[d>>2]|0))}b=c[b+52>>2]|0;if(!b){b=0;d=28;break}}if((d|0)==28)return b|0;return 0}function dl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+16|0;h=i;if(!d){h=0;Ra=i;return h|0}a:while(1){if((a[d>>0]|0)==-108){e=c[b>>2]|0;if(!(a[(c[e>>2]|0)+165>>0]|0)){f=6;break}a[d>>0]=114}e=c[d+4>>2]|0;if(e&8404992|0){d=0;f=17;break}f=d+20|0;if(!(e&2048)){g=c[f>>2]|0;if(g|0?(c[g>>2]|0)>0:0){e=g+4|0;f=0;while(1){if(dl(b,c[e>>2]|0)|0){d=1;f=17;break a}f=f+1|0;if((f|0)>=(c[g>>2]|0))break;else e=e+20|0}}}else if(cl(b,c[f>>2]|0)|0){d=1;f=17;break}if(dl(b,c[d+16>>2]|0)|0){d=1;f=17;break}d=c[d+12>>2]|0;if(!d){d=0;f=17;break}}if((f|0)==6){c[h>>2]=c[b+16>>2];cd(e,42390,h);h=1;Ra=i;return h|0}else if((f|0)==17){Ra=i;return d|0}return 0}function el(e,f,g,h,i,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;I=e+8|0;K=c[I>>2]|0;if(j|0){n=c[f+36>>2]|0;if(n){o=e+56|0;m=(c[o>>2]|0)+-1|0;c[o>>2]=m;c[j>>2]=m;m=e+52|0;c[m>>2]=g+1;o=c[j>>2]|0;p=c[e>>2]|0;j=dk(p,n,0,0)|0;if(!(a[p+81>>0]|0))Tj(e,j,o,16);if(j)ni(p,j)}else m=j;c[m>>2]=0}if((i|0)!=0?(C=f+55|0,((d[C>>0]|d[C+1>>0]<<8)&8)!=0):0)m=f+50|0;else m=f+52|0;p=b[m>>1]|0;C=p&65535;B=p<<16>>16==1;do if(B){m=e+19|0;j=a[m>>0]|0;if(!(j<<24>>24)){y=e+44|0;z=(c[y>>2]|0)+1|0;c[y>>2]=z;break}else{z=j+-1<<24>>24;a[m>>0]=z;z=c[e+148+((z&255)<<2)>>2]|0;break}}else{m=e+32|0;j=c[m>>2]|0;n=e+28|0;o=c[n>>2]|0;if((o|0)<(C|0)){y=e+44|0;z=c[y>>2]|0;c[y>>2]=z+C;z=z+1|0;break}else{c[m>>2]=j+C;c[n>>2]=o-C;z=j;break}}while(0);do if(!k)m=0;else{if((z|0)==(l|0)?(c[k+36>>2]|0)==0:0){m=k;break}m=0}while(0);if(p<<16>>16){x=(m|0)==0;y=f+4|0;q=m+4|0;r=g+1|0;s=e+52|0;t=f+40|0;u=K+108|0;v=f+12|0;w=K+104|0;l=0;do{if(!x){k=b[(c[q>>2]|0)+(l<<1)>>1]|0;m=b[(c[y>>2]|0)+(l<<1)>>1]|0;if(k<<16>>16==-2?1:k<<16>>16!=m<<16>>16)A=28}else{m=b[(c[y>>2]|0)+(l<<1)>>1]|0;A=28}if((A|0)==28){A=0;k=l+z|0;if(m<<16>>16==-2){c[s>>2]=r;m=c[(c[t>>2]|0)+4+(l*20|0)>>2]|0;i=c[e>>2]|0;if(!m)p=0;else p=dk(i,m,0,0)|0;a:do if(!(a[i+81>>0]|0)){do if(p){if((a[p>>0]|0)!=-88){n=Jj(e,p,k)|0;break}m=c[I>>2]|0;j=c[p+28>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;A=c[m+104>>2]|0;a[A+(o*20|0)>>0]=78;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=j;c[A+(o*20|0)+8>>2]=k;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0;A=45;break a}else{Di(m,78,j,k,0)|0;A=45;break a}}else n=Jj(e,0,k)|0;while(0);if((n|0)!=(k|0)?(D=c[I>>2]|0,(D|0)!=0):0){m=D+108|0;j=c[m>>2]|0;if((c[D+112>>2]|0)>(j|0)){c[m>>2]=j+1;A=c[D+104>>2]|0;a[A+(j*20|0)>>0]=79;b[A+(j*20|0)+2>>1]=0;c[A+(j*20|0)+4>>2]=n;c[A+(j*20|0)+8>>2]=k;c[A+(j*20|0)+12>>2]=0;c[A+(j*20|0)+16>>2]=0;a[A+(j*20|0)+1>>0]=0;A=44;break}else{Di(D,79,n,k,0)|0;A=44;break}}else A=44}else A=44;while(0);if((A|0)==44?(A=0,p|0):0)A=45;if((A|0)==45){A=0;ni(i,p)}c[s>>2]=0}else Vj(c[I>>2]|0,c[v>>2]|0,g,m<<16>>16,k);m=c[u>>2]|0;if(((m|0)>0?(E=c[w>>2]|0,F=m+-1|0,G=E+(F*20|0)|0,(a[G>>0]|0)==84):0)?(H=c[K>>2]|0,(a[H+81>>0]|0)==0):0){i=E+(F*20|0)+1|0;k=E+(F*20|0)+16|0;kg(H,a[i>>0]|0,c[k>>2]|0);a[i>>0]=0;c[k>>2]=0;a[G>>0]=-86}}l=l+1|0}while((l|0)!=(C|0))}if(h|0){m=K+108|0;j=c[m>>2]|0;if((c[K+112>>2]|0)>(j|0)){c[m>>2]=j+1;I=c[K+104>>2]|0;a[I+(j*20|0)>>0]=92;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=z;c[I+(j*20|0)+8>>2]=C;c[I+(j*20|0)+12>>2]=h;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else Di(K,92,z,C,h)|0;if(c[(c[f+12>>2]|0)+12>>2]|0?(J=gl(c[e>>2]|0,f)|0,(a[(c[K>>2]|0)+81>>0]|0)==0):0)Ei(K,(c[K+104>>2]|0)+(((c[m>>2]|0)+-1|0)*20|0)|0,J,0)}if(!B){m=e+28|0;if((c[m>>2]|0)>=(C|0))return z|0;c[m>>2]=C;c[e+32>>2]=z;return z|0}if(!z)return z|0;m=e+19|0;j=a[m>>0]|0;if((j&255)>=8)return z|0;a[m>>0]=j+1<<24>>24;c[e+148+((j&255)<<2)>>2]=z;return z|0}function fl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;i=y;w=y+8|0;s=c[h+12>>2]|0;r=c[f>>2]|0;u=c[r+108>>2]|0;x=w+4|0;c[x>>2]=0;c[w>>2]=r;r=w+8|0;c[r>>2]=0;t=w+12|0;c[t>>2]=u;u=w+16|0;c[u>>2]=0;a[w+20>>0]=0;v=w+21|0;a[v>>0]=0;if(!(c[h+40>>2]|0)){n=h+50|0;if(b[n>>1]|0){o=s+4|0;p=h+4|0;m=0;do{q=c[(c[o>>2]|0)+(b[(c[p>>2]|0)+(m<<1)>>1]<<4)>>2]|0;do if(m|0){i=c[u>>2]|0;j=i+2|0;if(j>>>0<(c[r>>2]|0)>>>0){c[u>>2]=j;l=(c[x>>2]|0)+i|0;a[l>>0]=44;a[l+1>>0]=32;break}else{wb(w,42425,2);break}}while(0);j=c[s>>2]|0;if(!j)i=0;else i=(Eu(j)|0)&1073741823;k=c[u>>2]|0;l=k+i|0;if(l>>>0<(c[r>>2]|0)>>>0){if(i|0){c[u>>2]=l;ew((c[x>>2]|0)+k|0,j|0,i|0)|0}}else wb(w,j,i);i=c[u>>2]|0;j=i+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[u>>2]=j;a[(c[x>>2]|0)+i>>0]=46}else wb(w,31183,1);if(!q)i=0;else i=(Eu(q)|0)&1073741823;j=c[u>>2]|0;k=j+i|0;if(k>>>0<(c[r>>2]|0)>>>0){if(i|0){c[u>>2]=k;ew((c[x>>2]|0)+j|0,q|0,i|0)|0}}else wb(w,q,i);m=m+1|0}while(m>>>0<(e[n>>1]|0)>>>0)}}else{c[i>>2]=c[h>>2];Eb(w,42414,i)}i=c[x>>2]|0;if((i|0?(a[i+(c[u>>2]|0)>>0]=0,c[t>>2]|0):0)?(a[v>>0]&4)==0:0){x=$d(w)|0;w=h+55|0;w=d[w>>0]|d[w+1>>0]<<8;w=w&3;w=w<<16>>16==2;w=w?1555:2067;Uj(f,w,g,x,-7,2);Ra=y;return}x=c[x>>2]|0;w=h+55|0;w=d[w>>0]|d[w+1>>0]<<8;w=w&3;w=w<<16>>16==2;w=w?1555:2067;Uj(f,w,g,x,-7,2);Ra=y;return}function gl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=f+16|0;g=c[m>>2]|0;if(g|0){m=g;return m|0}k=c[f+12>>2]|0;l=f+52|0;h=e[l>>1]|0;g=h+1|0;do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](g)|0;c[m>>2]=g;if(!g)h=15;else h=21}else{i=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<=h>>>0)c[14985]=g;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){j=c[14978]|0;h=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=j>>>0)&1}g=Wa[c[29340>>2]&127](i)|0;if(!g){c[m>>2]=0;h=15;break}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h;c[m>>2]=g;h=21}while(0);if((h|0)==15){g=d+81|0;if(a[g>>0]|0){m=0;return m|0}if(a[d+82>>0]|0){m=0;return m|0}a[g>>0]=1;if((c[d+180>>2]|0)>0)c[d+264>>2]=1;g=d+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+236>>2]|0;if(!g){m=0;return m|0}c[g+12>>2]=7;m=0;return m|0}else if((h|0)==21){if(!(b[l>>1]|0))h=0;else{j=f+4|0;d=k+4|0;i=f+40|0;h=0;do{g=b[(c[j>>2]|0)+(h<<1)>>1]|0;if(g<<16>>16<=-1)if(g<<16>>16==-1)g=68;else{g=Xj(c[(c[i>>2]|0)+4+(h*20|0)>>2]|0)|0;g=g<<24>>24==0?65:g}else g=a[(c[d>>2]|0)+(g<<16>>16<<4)+13>>0]|0;a[(c[m>>2]|0)+h>>0]=g;h=h+1|0}while(h>>>0<(e[l>>1]|0)>>>0);g=c[m>>2]|0}a[g+h>>0]=0;m=c[m>>2]|0;return m|0}return 0}function hl(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=c[b>>2]|0;l=g+20|0;f=c[l>>2]|0;if((f|0)<=0)return;k=g+16|0;if(!e){g=0;do{if(c[(c[k>>2]|0)+(g<<4)+4>>2]|0){rk(b,g);f=c[l>>2]|0}g=g+1|0}while((g|0)<(f|0));return}j=0;do{g=c[k>>2]|0;if(c[g+(j<<4)+4>>2]|0){h=c[g+(j<<4)>>2]|0;i=a[e>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=e;do{i=i+1|0;h=h+1|0;m=a[i>>0]|0;g=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(g|0)!=0))}if(!g){rk(b,j);f=c[l>>2]|0}}j=j+1|0}while((j|0)<(f|0));return}function il(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+32|0;y=E+16|0;x=E+8|0;o=E;m=E+28|0;C=c[f>>2]|0;D=C+16|0;v=c[D>>2]|0;B=f+8|0;j=c[B>>2]|0;A=f+116|0;a:do if(!j){if((c[A>>2]|0)==0?(b[C+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[C+272>>2]|0)if(!(a[C+81>>0]|0))w=15;else{z=0;break a}else{do if((e[C+276>>1]|0)>=224){j=C+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];z=C+284|0;c[z>>2]=(c[z>>2]|0)+1;break b}j=C+296|0;k=c[j>>2]|0;if(!k){j=C+292|0;break}else{c[j>>2]=c[k>>2];z=C+284|0;c[z>>2]=(c[z>>2]|0)+1;break b}}else j=C+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;w=15}while(0);if((w|0)==15)k=_d(C,224,0)|0;if(!k)z=0;else{j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=C;j=C+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[B>>2]=k;Di(k,61,0,1,0)|0;z=k}}else z=j;while(0);q=c[A>>2]|0;q=(q|0)==0?f:q;j=q+84|0;k=c[j>>2]|0;p=1<<h;do if((((k&p|0)==0?(c[j>>2]=k|p,(h|0)==1):0)?(t=c[q>>2]|0,n=t+16|0,(c[(c[n>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){j=Pe(c[t>>2]|0,0,t,m,0,542)|0;if(j|0){cd(q,32157,o);c[q+12>>2]=j;break}o=c[m>>2]|0;c[(c[n>>2]|0)+20>>2]=o;j=c[t+92>>2]|0;l=c[o+4>>2]|0;c[l+4>>2]=c[o>>2];if(!(b[l+22>>1]&2)){m=l+32|0;n=l+36|0;o=(c[m>>2]|0)-(c[n>>2]|0)|0;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[m>>2]=j,s=l+80|0,r=c[s>>2]|0,r|0):0){k=r+-4|0;c[s>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;r=(c[14820]|0)+1|0;c[14820]=r;c[14821]=(r|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;w=35;break}else{j=Wa[c[29352>>2]&127](k)|0;w=35}while(0);do if((w|0)==35){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{r=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[s>>2]=0}s=Se(c[l>>2]|0,m,o)|0;c[n>>2]=(c[m>>2]|0)-(o&65535);if((s|0)==7){j=t+81|0;if((a[j>>0]|0)==0?(a[t+82>>0]|0)==0:0){a[j>>0]=1;if((c[t+180>>2]|0)>0)c[t+264>>2]=1;j=t+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[t+236>>2]|0;if(j|0)c[j+12>>2]=7}break}}}while(0);r=q+80|0;c[r>>2]=c[r>>2]|p;r=q+20|0;a[r>>0]=a[r>>0]|1;r=g+56|0;do if(c[r>>2]|0){j=z+108|0;k=c[j>>2]|0;if((c[z+112>>2]|0)>(k|0)){c[j>>2]=k+1;j=c[z+104>>2]|0;a[j+(k*20|0)>>0]=-96;j=j+(k*20|0)+1|0;l=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));break}else{Di(z,160,0,0,0)|0;break}}while(0);j=c[(c[(c[f>>2]|0)+16>>2]|0)+28>>2]|0;do if(!(a[f+146>>0]|0)){q=c[g+72>>2]|0;if((q|0)!=(j|0)?(u=c[j+48>>2]|0,(u|0)!=0):0){p=g+68|0;o=u;j=0;do{n=c[o+8>>2]|0;if((c[n+24>>2]|0)==(q|0)){l=c[n+4>>2]|0;m=c[g>>2]|0;u=a[l>>0]|0;k=(d[208+(u&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(u<<24>>24==0|(k|0)!=0))do{l=l+1|0;m=m+1|0;u=a[l>>0]|0;k=(d[208+(u&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(k|0)!=0));if(!k){if(!j)j=c[p>>2]|0;c[n+32>>2]=j;j=n}}o=c[o>>2]|0}while((o|0)!=0);if(!j)w=66}else w=66;if((w|0)==66){j=c[g+68>>2]|0;if(!j)break}do{jl(f,j);j=c[j+32>>2]|0}while((j|0)!=0)}while(0);j=v+(h<<4)|0;if(!(c[g+36>>2]&8))q=g;else{q=c[g>>2]|0;c[x>>2]=c[j>>2];c[x+4>>2]=q;Ak(f,42781,x);q=g}x=c[q>>2]|0;c[y>>2]=c[j>>2];c[y+4>>2]=34585;c[y+8>>2]=x;Ak(f,42826,y);c:do if(!i)if(!(c[r>>2]|0)){o=c[g+28>>2]|0;p=g+8|0;n=g+72|0;l=0;while(1){m=(l|0)==0;k=m|(o|0)<(l|0)?o:0;j=c[p>>2]|0;if(j)do{g=c[j+44>>2]|0;k=(g|0)>(k|0)&(m|(g|0)<(l|0))?g:k;j=c[j+20>>2]|0}while((j|0)!=0);if(!k){w=83;break c}l=c[n>>2]|0;if(!l)j=-1e6;else{m=c[(c[f>>2]|0)+16>>2]|0;j=0;while(1)if((c[m+(j<<4)+12>>2]|0)==(l|0))break;else j=j+1|0}kl(f,k,j);l=k}}else w=85;else w=83;while(0);if((w|0)==83)if(!(c[r>>2]|0)){m=z+108|0;k=z+112|0}else w=85;if((w|0)==85){l=c[q>>2]|0;m=z+108|0;j=c[m>>2]|0;k=z+112|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;g=c[z+104>>2]|0;a[g+(j*20|0)>>0]=-94;b[g+(j*20|0)+2>>1]=0;c[g+(j*20|0)+4>>2]=h;c[g+(j*20|0)+8>>2]=0;c[g+(j*20|0)+12>>2]=0;c[g+(j*20|0)+16>>2]=0;a[g+(j*20|0)+1>>0]=0}else j=Di(z,162,h,0,0)|0;if(!(a[(c[z>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;Ei(z,(c[z+104>>2]|0)+(j*20|0)|0,l,0)}A=c[A>>2]|0;a[((A|0)==0?f:A)+21>>0]=1}l=c[q>>2]|0;j=c[m>>2]|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;A=c[z+104>>2]|0;a[A+(j*20|0)>>0]=-113;b[A+(j*20|0)+2>>1]=0;c[A+(j*20|0)+4>>2]=h;c[A+(j*20|0)+8>>2]=0;c[A+(j*20|0)+12>>2]=0;c[A+(j*20|0)+16>>2]=0;a[A+(j*20|0)+1>>0]=0}else j=Di(z,143,h,0,0)|0;if(!(a[(c[z>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;Ei(z,(c[z+104>>2]|0)+(j*20|0)|0,l,0)}m=c[B>>2]|0;j=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(h<<4)+12>>2]>>2]|0)+1|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;f=c[m+104>>2]|0;a[f+(l*20|0)>>0]=95;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=h;c[f+(l*20|0)+8>>2]=1;c[f+(l*20|0)+12>>2]=j;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0}else Di(m,95,h,1,j)|0;l=c[(c[D>>2]|0)+(h<<4)+12>>2]|0;k=l+78|0;j=b[k>>1]|0;if(!(j&2)){Ra=E;return}l=c[l+16>>2]|0;if(l){q=C+480|0;r=C+304|0;s=C+308|0;t=C+300|0;do{j=c[l+8>>2]|0;if(c[j+12>>2]|0){p=j+4|0;k=c[p>>2]|0;d:do if(k){j=j+42|0;if((b[j>>1]|0)>0){o=0;while(1){m=c[k>>2]|0;e:do if(m|0){if(c[q>>2]|0){Xd(C,m);break}n=m;do if((c[r>>2]|0)>>>0<=n>>>0){if((c[s>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[t>>2];c[t>>2]=m;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{f=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);m=c[k+4>>2]|0;if(m|0)ni(C,m);m=c[k+8>>2]|0;f:do if(m|0){if(c[q>>2]|0){Xd(C,m);break}n=m;do if((c[r>>2]|0)>>>0<=n>>>0){if((c[s>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[t>>2];c[t>>2]=m;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{f=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);o=o+1|0;if((o|0)>=(b[j>>1]|0))break;else k=k+16|0}k=c[p>>2]|0}if(k){if(c[q>>2]|0){Xd(C,k);break}m=k;do if((c[r>>2]|0)>>>0<=m>>>0){if((c[s>>2]|0)>>>0<=m>>>0)break;c[k>>2]=c[t>>2];c[t>>2]=k;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}}else j=j+42|0;while(0);c[p>>2]=0;b[j>>1]=0}l=c[l>>2]|0}while((l|0)!=0);j=(c[(c[D>>2]|0)+(h<<4)+12>>2]|0)+78|0;k=j;j=b[j>>1]|0}b[k>>1]=j&-3;Ra=E;return}\nfunction ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](36)|0;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}d=a;e=d+36|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b>>2]=a;f=0;return f|0}function ms(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(d|0){Wa[c[(c[(c[a>>2]|0)+12>>2]|0)+16>>2]&127](d)|0;c[b>>2]=0}d=a+4|0;b=c[d>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[d>>2]=0;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function ns(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;k=c[d>>2]|0;n=d+8|0;f=c[n>>2]|0;if(f|0){Wa[c[(c[k+12>>2]|0)+16>>2]&127](f)|0;c[n>>2]=0}m=d+4|0;f=c[m>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[m>>2]=0;l=d+12|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;if((e|0)!=1){d=1;return d|0}g=c[h>>2]|0;f=b[g+8>>1]|0;if((f&514)==514?(a[g+10>>0]|0)==1:0){i=c[g+16>>2]|0;e=g}else if(!(f&1)){i=Gg(g,1)|0;e=c[h>>2]|0}else{i=0;e=g}f=b[e+8>>1]|0;if((f&2)!=0?(a[e+10>>0]|0)==1:0)e=c[e+12>>2]|0;else j=16;do if((j|0)==16){f=f&65535;if(!(f&16)){if(f&1|0){e=0;break}e=Fg(e,1)|0;break}else{g=c[e+12>>2]|0;if(!(f&16384)){e=g;break}e=(c[e>>2]|0)+g|0;break}}while(0);f=e+1|0;f=pb(f,((f|0)<0)<<31>>31)|0;c[m>>2]=f;if(!f){d=7;return d|0}ew(f|0,i|0,e|0)|0;a[(c[m>>2]|0)+e>>0]=0;g=k+16|0;f=Za[c[(c[k+12>>2]|0)+12>>2]&127](c[g>>2]|0,c[m>>2]|0,e,n)|0;if(f|0){d=f;return d|0}k=c[n>>2]|0;c[k>>2]=c[g>>2];g=c[d>>2]|0;c[l>>2]=(c[l>>2]|0)+1;g=$a[c[(c[g+12>>2]|0)+20>>2]&127](k,d+16|0,d+20|0,d+24|0,d+28|0,d+32|0)|0;if(!g){d=0;return d|0}f=c[n>>2]|0;if(f|0){Wa[c[(c[(c[d>>2]|0)+12>>2]|0)+16>>2]&127](f)|0;c[n>>2]=0}f=c[m>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{d=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[m>>2]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;d=(g|0)==101?0:g;return d|0}function os(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[a>>2]|0;f=a+12|0;c[f>>2]=(c[f>>2]|0)+1;d=a+8|0;e=$a[c[(c[e+12>>2]|0)+20>>2]&127](c[d>>2]|0,a+16|0,a+20|0,a+24|0,a+28|0,a+32|0)|0;if(!e)return 0;b=c[d>>2]|0;if(b|0){Wa[c[(c[(c[a>>2]|0)+12>>2]|0)+16>>2]&127](b)|0;c[d>>2]=0}a=a+4|0;b=c[a>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[a>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;return ((e|0)==101?0:e)|0}function ps(a){a=a|0;return (c[a+16>>2]|0)==0|0}function qs(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,c[a+4>>2]|0,-1,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 1:{if((yc(c[d>>2]|0,c[a+16>>2]|0,c[a+20>>2]|0,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 2:{f=c[a+24>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}case 3:{f=c[a+28>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}default:{f=c[a+32>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}}return 0}function rs(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;c[b>>2]=a;c[b+4>>2]=((a|0)<0)<<31>>31;return 0}function ss(h,i,j){h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;A=Ra;Ra=Ra+64|0;z=A+56|0;y=A+48|0;x=A;i=c[j>>2]|0;k=e[i+8>>1]|0;do if(!(k&4)){if(k&8|0){k=Mg(+g[i>>3])|0;L()|0;break}if(!(k&18)){Ra=A;return}else{k=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0;break}}else k=c[i>>2]|0;while(0);i=k&255;if((i+-1|0)>>>0>4){Ra=A;return}m=i<<1;l=(k<<3)+8|0;j=j+4|0;w=mc(c[j>>2]|0)|0;j=c[j>>2]|0;i=b[j+8>>1]|0;if((i&2)!=0?(a[j+10>>0]|0)==1:0)k=c[j+12>>2]|0;else n=11;do if((n|0)==11){i=i&65535;if(i&16|0){k=c[j+12>>2]|0;if(!(i&16384))break;k=(c[j>>2]|0)+k|0;break}if(!(i&1)){k=Fg(j,1)|0;break}else{Ra=A;return}}while(0);if((k|0)<4){Ra=A;return}u=w+2|0;t=w+3|0;s=l&248;if((k|0)<(G(d[u>>0]<<8|d[t>>0],s)|0)){Ra=A;return}v=zb(0)|0;if(!(d[u>>0]<<8|d[t>>0]))if(!v){i=0;j=7}else n=34;else{n=m&254;o=v+16|0;p=v+8|0;q=v+4|0;r=(n|0)==0;m=0;do{k=G(m,s)|0;j=w+(k|4)|0;E=cw(d[j>>0]|0,0,56)|0;l=L()|0;F=cw(d[j+1>>0]|0,0,48)|0;l=L()|0|l;D=cw(d[j+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[j+3>>0];C=cw(d[j+4>>0]|0,0,24)|0;l=l|(L()|0);B=cw(d[j+5>>0]|0,0,16)|0;l=l|(L()|0);i=cw(d[j+6>>0]|0,0,8)|0;l=l|(L()|0);j=Sv(F|E|D|C|B|i|0,l|0,d[j+7>>0]|0,0)|0;l=L()|0;i=x;c[i>>2]=j;c[i+4>>2]=l;i=0;k=w+(k+12)|0;while(1){c[x+8+(i<<2)>>2]=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];c[x+8+((i|1)<<2)>>2]=d[k+5>>0]<<16|d[k+4>>0]<<24|d[k+6>>0]<<8|d[k+7>>0];i=i+2|0;if(i>>>0>=n>>>0)break;else k=k+8|0}do if(m|0){i=c[o>>2]|0;k=i+1|0;if(k>>>0<(c[p>>2]|0)>>>0){c[o>>2]=k;a[(c[q>>2]|0)+i>>0]=32;break}else{wb(v,44513,1);break}}while(0);F=y;c[F>>2]=j;c[F+4>>2]=l;Eb(v,55646,y);if(!r){i=0;do{g[z>>3]=+f[x+8+(i<<2)>>2];Eb(v,55652,z);i=i+1|0}while((i|0)!=(n|0))}i=c[o>>2]|0;k=i+1|0;if(k>>>0<(c[p>>2]|0)>>>0){c[o>>2]=k;a[(c[q>>2]|0)+i>>0]=125}else wb(v,55656,1);m=m+1|0}while(m>>>0<(d[u>>0]<<8|d[t>>0])>>>0);n=34}do if((n|0)==34){j=d[v+20>>0]|0;if((v|0)!=29632){i=v+4|0;k=c[i>>2]|0;if(((k|0)!=0?(a[k+(c[v+16>>2]|0)>>0]=0,(c[v+12>>2]|0)!=0):0)?(a[v+21>>0]&4)==0:0)i=$d(v)|0;else i=c[i>>2]|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](v);break}else{F=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);break}}else i=0}while(0);k=h+20|0;if((yc(c[h>>2]|0,i,-1,1,90)|0)==18){c[k>>2]=18;yc(c[h>>2]|0,31223,-1,1,0)|0}c[k>>2]=(j|0)==0?-1:j;k=c[h>>2]|0;if(!(b[k+8>>1]&1)){Ra=A;return}switch((j&255)<<24>>24){case 101:{i=50782;break}case 100:{i=50760;break}default:if(j>>>0<29?(520028155>>>j&1|0)!=0:0)i=c[22960+(j<<2)>>2]|0;else i=50724}yc(k,i,-1,1,0)|0;Ra=A;return}function ts(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0;i=c[g>>2]|0;f=b[i+8>>1]|0;a:do if((f&15|16)<<16>>16==16){if((f&2)!=0?(a[i+10>>0]|0)==1:0)f=c[i+12>>2]|0;else h=5;do if((h|0)==5){h=f&65535;if(!(h&16)){if(h&1|0)break a;f=Fg(i,1)|0;break}else{f=c[i+12>>2]|0;if(!(h&16384))break;f=(c[i>>2]|0)+f|0;break}}while(0);if((f|0)>=2){i=mc(c[g>>2]|0)|0;i=d[i>>0]<<8|d[i+1>>0];f=c[e>>2]|0;h=f+8|0;if(!(b[h>>1]&9216)){e=f;c[e>>2]=i;c[e+4>>2]=0;b[h>>1]=4;return}else{Pg(f,i,0);return}}}while(0);c[e+20>>2]=1;yc(c[e>>2]|0,55658,-1,1,-1)|0;return}function us(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+80|0;o=t+16|0;m=t+8|0;k=t;s=t+20|0;if((f+-1|0)>>>0>1){c[d+20>>2]=1;yc(c[d>>2]|0,55691,-1,1,-1)|0;Ra=t;return}i=c[g>>2]|0;do if(i){h=b[i+8>>1]|0;if((h&514)==514?(a[i+10>>0]|0)==1:0){j=c[i+16>>2]|0;break}if(!(h&1))j=Gg(i,1)|0;else j=0}else j=0;while(0);do if((f|0)!=1){h=c[g+4>>2]|0;if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){g=c[h+16>>2]|0;break}if(!(i&1))g=Gg(h,1)|0;else g=0}else g=0}else{g=j;j=50919}while(0);r=c[(c[d>>2]|0)+32>>2]|0;q=s+12|0;h=q;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[s>>2]=r;c[s+4>>2]=j;c[s+8>>2]=g;if(a[r+79>>0]|0){n=nd(r,36223,0,0,0)|0;i=s+40|0;c[i>>2]=n;if(!n){f=1;p=19}else{n=1;h=0;l=i}}else{f=0;i=s+40|0;p=19}if((p|0)==19){c[k>>2]=j;c[k+4>>2]=g;h=vs(s,55742,k)|0;if(!h)h=0;else{p=(e[h+144>>1]|0)+-2|0;gc(h)|0;h=p}c[i>>2]=0;n=f;l=i}c[m>>2]=j;c[m+4>>2]=g;k=vs(s,53869,m)|0;if(k){f=k+144|0;p=(e[f>>1]|0)+~h|0;h=s+16|0;c[h>>2]=(p|0)/2|0;if((p|0)>=2){if((Gc(k)|0)==100){i=c[k+120>>2]|0;if((i|0)!=0?(e[f>>1]|0)>1:0){i=i+40|0;f=k}else{i=c[k>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;f=k}j=b[i+8>>1]&31;i=c[f>>2]|0;g=k+40|0;f=c[g>>2]|0;if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&f;c[g>>2]=i;c[q>>2]=1347440720>>>j&1}}else ws(s,55770,o);i=gc(k)|0;if((i|0)!=11)c[l>>2]=i}else h=s+16|0;if((c[h>>2]|0)>0){if(!(c[l>>2]|0))xs(s,0,0,1,0);q=c[s+32>>2]|0;ys(s,55801,q,((q|0)<0)<<31>>31);q=c[s+36>>2]|0;ys(s,55808,q,((q|0)<0)<<31>>31)}gc(c[s+20>>2]|0)|0;gc(c[s+24>>2]|0)|0;gc(c[s+28>>2]|0)|0;do if(n){h=nd(r,55816,0,0,0)|0;i=c[l>>2]|0;if(!i){c[l>>2]=h;p=46;break}else{h=i;i=c[s+44>>2]|0;p=49;break}}else{h=c[l>>2]|0;p=46}while(0);if((p|0)==46){i=c[s+44>>2]|0;if(!h){if((yc(c[d>>2]|0,(i|0)==0?45704:i,-1,1,-1)|0)==18){c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0}}else p=49}if((p|0)==49){c[d+20>>2]=h;f=c[d>>2]|0;if(b[f+8>>1]&1){switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(f,h,-1,1,0)|0}}h=i;if(!i){Ra=t;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);Ra=t;return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);Ra=t;return}}function vs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+32|0;e=h;f=h+16|0;c[f>>2]=0;c[e>>2]=d;b=Ab(b,e)|0;d=a+40|0;e=(b|0)==0;do if(!(c[d>>2]|0))if(e){c[d>>2]=7;break}else{g=qd(c[a>>2]|0,b,-1,128,0,f,0)|0;c[d>>2]=g;g=6;break}else if(!e)g=6;while(0);do if((g|0)==6)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{g=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);Ra=h;return c[f>>2]|0}function ws(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;h=i+16|0;e=i;c[e>>2]=d;f=a+40|0;if(c[f>>2]|0){Ra=i;return}g=a+48|0;if((c[g>>2]|0)>=100){Ra=i;return}d=Ab(b,e)|0;if(!((d|0)!=0?(a=a+44|0,e=c[a>>2]|0,c[h>>2]=e,c[h+4>>2]=(e|0)==0?59952:35594,c[h+8>>2]=d,h=Bb(55820,h)|0,c[a>>2]=h,(h|0)!=0):0))c[f>>2]=7;c[g>>2]=(c[g>>2]|0)+1;Ra=i;return}function xs(e,g,i,j,k){e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0.0;J=Ra;Ra=Ra+112|0;H=J+88|0;F=J+72|0;E=J+56|0;v=J+40|0;u=J+32|0;t=J+16|0;s=J+8|0;m=J;r=e+40|0;if(c[r>>2]|0){Ra=J;return}q=e+20|0;l=c[q>>2]|0;if(!l){l=c[e+8>>2]|0;c[m>>2]=c[e+4>>2];c[m+4>>2]=l;l=vs(e,55946,m)|0;c[q>>2]=l;if(c[r>>2]|0){Ra=J;return}}do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){D=l;c[D>>2]=j;c[D+4>>2]=k;b[m>>1]=4;break}else{Pg(l,j,k);break}}while(0);do if((Gc(c[q>>2]|0)|0)==100){p=Lc(c[q>>2]|0,0)|0;o=c[q>>2]|0;if(!o)m=mc(29576)|0;else{l=c[o+120>>2]|0;if((l|0)!=0?(b[o+144>>1]|0)!=0:0)n=o;else{l=c[o>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;n=o}m=mc(l)|0;n=c[n>>2]|0;o=o+40|0;l=c[o>>2]|0;if((l|0)==3082|(a[n+81>>0]|0)!=0){og(n);l=7}else l=c[n+68>>2]&l;c[o>>2]=l}l=pb(p,((p|0)<0)<<31>>31)|0;if(!l){c[r>>2]=7;D=0;o=0;break}else{ew(l|0,m|0,p|0)|0;D=l;o=p;break}}else{D=0;o=0}while(0);l=c[q>>2]|0;do if(l){m=c[l>>2]|0;C=l+136|0;B=c[C+4>>2]|0;if((B|0)>0|(B|0)==0&(c[C>>2]|0)>>>0>0)hc(m,l);n=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;C=l+64|0;c[C>>2]=0;c[C+4>>2]=0;if((n|0)==3082|(a[m+81>>0]|0)!=0){og(m);l=7;break}else{l=c[m+68>>2]&n;break}}else l=0;while(0);if((c[r>>2]|0)==0?(c[r>>2]=l,(D|0)==0&(l|0)==0):0){I=s;c[I>>2]=j;c[I+4>>2]=k;ws(e,55991,s);Ra=J;return}if(!D){Ra=J;return}if((o|0)<4){I=t;c[I>>2]=j;c[I+4>>2]=k;c[t+8>>2]=o;ws(e,55827,t);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}C=(i|0)==0;if(C){g=d[D>>0]<<8|d[D+1>>0];if(g>>>0>40){c[u>>2]=g;ws(e,55861,u);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}}A=d[D+2>>0]<<8|d[D+3>>0];B=e+16|0;l=c[B>>2]|0;a:do if((G((l<<3)+8|0,A)|0|4|0)<=(o|0)){if(A|0){y=e+12|0;z=(g|0)>0;v=g+-1|0;w=e+36|0;x=e+32|0;g=0;while(1){u=D+(G((l<<3)+8|0,g)|0|4)|0;o=cw(d[u>>0]|0,0,56)|0;s=L()|0;n=cw(d[u+1>>0]|0,0,48)|0;s=L()|0|s;p=cw(d[u+2>>0]|0,0,40)|0;s=s|(L()|0);s=s|d[u+3>>0];q=cw(d[u+4>>0]|0,0,24)|0;s=s|(L()|0);r=cw(d[u+5>>0]|0,0,16)|0;s=s|(L()|0);t=cw(d[u+6>>0]|0,0,8)|0;s=s|(L()|0);s=Sv(n|o|p|q|r|t|0,s|0,d[u+7>>0]|0,0)|0;t=L()|0;u=u+8|0;b:do if((l|0)>0){if(C){o=0;while(1){n=o<<3;m=u+n|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];n=u+(n|4)|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];if(!(c[y>>2]|0)){K=(c[h>>2]=m,+f[h>>2]);if(K>(c[h>>2]=n,+f[h>>2]))I=52}else if((m|0)>(n|0))I=52;if((I|0)==52){I=0;c[E>>2]=o;c[E+4>>2]=g;l=E+8|0;c[l>>2]=j;c[l+4>>2]=k;ws(e,56023,E);l=c[B>>2]|0}o=o+1|0;if((o|0)>=(l|0))break b}}p=0;do{m=p<<3;q=u+m|0;q=d[q+1>>0]<<16|d[q>>0]<<24|d[q+2>>0]<<8|d[q+3>>0];o=m|4;r=u+o|0;r=d[r+1>>0]<<16|d[r>>0]<<24|d[r+2>>0]<<8|d[r+3>>0];l=c[y>>2]|0;if(!l){K=(c[h>>2]=q,+f[h>>2]);if(K>(c[h>>2]=r,+f[h>>2]))I=57;else l=0}else if((q|0)>(r|0))I=57;if((I|0)==57){I=0;c[F>>2]=p;c[F+4>>2]=g;l=F+8|0;c[l>>2]=j;c[l+4>>2]=k;ws(e,56023,F);l=c[y>>2]|0}n=i+m|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];m=i+o|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];do if(!l){K=(c[h>>2]=q,+f[h>>2]);if(K<(c[h>>2]=n,+f[h>>2])){I=62;break}K=(c[h>>2]=r,+f[h>>2]);if(K>(c[h>>2]=m,+f[h>>2]))I=62}else if((q|0)<(n|0)|(r|0)>(m|0))I=62;while(0);if((I|0)==62){I=0;c[H>>2]=p;c[H+4>>2]=g;r=H+8|0;c[r>>2]=j;c[r+4>>2]=k;ws(e,56071,H)}p=p+1|0}while((p|0)<(c[B>>2]|0))}while(0);if(z){zs(e,0,s,t,j,k);xs(e,v,u,s,t);l=w}else{zs(e,1,s,t,j,k);l=x}c[l>>2]=(c[l>>2]|0)+1;g=g+1|0;if((g|0)==(A|0))break a;l=c[B>>2]|0}}}else{I=v;c[I>>2]=j;c[I+4>>2]=k;c[v+8>>2]=A;c[v+12>>2]=o;ws(e,55891,v)}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}function ys(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+48|0;j=k+16|0;f=k;i=a+40|0;if(c[i>>2]|0){Ra=k;return}l=c[a+8>>2]|0;c[f>>2]=c[a+4>>2];c[f+4>>2]=l;c[f+8>>2]=b;f=vs(a,56360,f)|0;if(!f){Ra=k;return}if((Gc(f)|0)==100?(g=Oc(f,0)|0,h=L()|0,!((g|0)==(d|0)&(h|0)==(e|0))):0){c[j>>2]=b;l=j+8|0;c[l>>2]=d;c[l+4>>2]=e;l=j+16|0;c[l>>2]=g;c[l+4>>2]=h;ws(a,56391,j)}l=gc(f)|0;c[i>>2]=l;Ra=k;return}function zs(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+80|0;o=p+32|0;m=p+8|0;l=p;j=d+24+(e<<2)|0;k=c[j>>2]|0;if(!k){n=c[30860+(e<<2)>>2]|0;k=c[d+8>>2]|0;c[l>>2]=c[d+4>>2];c[l+4>>2]=k;l=vs(d,n,l)|0;c[j>>2]=l}else l=k;n=d+40|0;if(c[n>>2]|0){Ra=p;return}do if(!(Vc(l,1)|0)){j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){c[j>>2]=f;c[j+4>>2]=g;b[k>>1]=4;break}else{Pg(j,f,g);break}}while(0);switch(Gc(l)|0){case 101:{o=m;c[o>>2]=f;c[o+4>>2]=g;o=m+8|0;c[o>>2]=h;c[o+4>>2]=i;c[m+16>>2]=(e|0)==0?56293:56285;ws(d,56240,m);break}case 100:{j=Oc(l,0)|0;k=L()|0;if(!((j|0)==(h|0)&(k|0)==(i|0))){m=o;c[m>>2]=f;c[m+4>>2]=g;m=o+8|0;c[m>>2]=j;c[m+4>>2]=k;c[o+16>>2]=(e|0)==0?56293:56285;e=o+24|0;c[e>>2]=f;c[e+4>>2]=g;g=o+32|0;c[g>>2]=h;c[g+4>>2]=i;ws(d,56302,o)}break}default:{}}do if(l){j=c[l>>2]|0;o=l+136|0;i=c[o+4>>2]|0;if((i|0)>0|(i|0)==0&(c[o>>2]|0)>>>0>0)hc(j,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;o=l+64|0;c[o>>2]=0;c[o+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}else j=0;while(0);if(c[n>>2]|0){Ra=p;return}c[n>>2]=j;Ra=p;return}function As(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Ss(a,b,c,d,e,f,1)|0}function Bs(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Ss(a,b,c,d,e,f,0)|0}function Cs(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+64|0;p=r+48|0;o=r;f=o;h=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));a[o+40>>0]=0;n=c[e>>2]|0;h=(n|0)>0;if(h){i=c[e+4>>2]|0;f=0;j=0;do{j=(a[i+(f*12|0)+4>>0]|0)==64?1:j;f=f+1|0}while((f|0)<(n|0));if(h){k=c[e+4>>2]|0;l=b+21|0;m=e+16|0;a:do if(!j){h=0;f=0;b:while(1){j=k+(f*12|0)|0;c:do if(a[k+(f*12|0)+5>>0]|0){if((c[j>>2]|0)==0?(a[k+(f*12|0)+4>>0]|0)==2:0)break b;i=c[j>>2]|0;d:do if((i|0)>0?(i|0)<=(d[l>>0]|0):0)switch(a[k+(f*12|0)+4>>0]|0){case 2:{i=65;break d}case 64:{q=15;break d}case 4:{i=69;break d}case 8:{i=66;break d}case 16:{i=67;break d}case 32:{i=68;break d}default:break c}else q=13;while(0);if((q|0)==13){q=0;if((a[k+(f*12|0)+4>>0]|0)==64)q=15;else break}if((q|0)==15){q=0;i=70}a[o+h>>0]=i;i=h+2|0;a[o+(h+1)>>0]=(c[j>>2]|0)+47;h=c[m>>2]|0;c[h+(f<<3)>>2]=(i|0)/2|0;a[h+(f<<3)+4>>0]=1;h=i}while(0);f=f+1|0;if(!((f|0)<(n|0)&(h|0)<40)){f=h;break a}}i=c[m>>2]|0;if(!f)f=0;else{h=0;do{c[i+(h<<3)>>2]=0;a[i+(h<<3)+4>>0]=0;h=h+1|0}while((h|0)!=(f|0))}c[e+20>>2]=1;c[i+(f<<3)>>2]=1;a[i+(f<<3)+4>>0]=1;g[e+40>>3]=30.0;q=e+48|0;c[q>>2]=1;c[q+4>>2]=0;c[e+56>>2]=1;e=0;Ra=r;return e|0}else{f=0;j=0;do{e:do if(a[k+(j*12|0)+5>>0]|0){i=k+(j*12|0)|0;h=c[i>>2]|0;f:do if((h|0)>0?(h|0)<=(d[l>>0]|0):0)switch(a[k+(j*12|0)+4>>0]|0){case 2:{h=65;break f}case 64:{q=34;break f}case 4:{h=69;break f}case 8:{h=66;break f}case 16:{h=67;break f}case 32:{h=68;break f}default:break e}else q=28;while(0);if((q|0)==28){q=0;if((a[k+(j*12|0)+4>>0]|0)==64)q=34;else break}if((q|0)==34){q=0;h=70}a[o+f>>0]=h;h=f+2|0;a[o+(f+1)>>0]=(c[i>>2]|0)+47;f=c[m>>2]|0;c[f+(j<<3)>>2]=(h|0)/2|0;a[f+(j<<3)+4>>0]=1;f=h}while(0);j=j+1|0}while((j|0)<(n|0)&(f|0)<40)}while(0);c[e+20>>2]=2;c[e+28>>2]=1;if((f|0)>0?(c[p>>2]=o,p=Bb(31408,p)|0,c[e+24>>2]=p,(p|0)==0):0){e=7;Ra=r;return e|0}}else q=38}else q=38;if((q|0)==38){c[e+20>>2]=2;c[e+28>>2]=1;f=0}b=b+48|0;b=aw(c[b>>2]|0,c[b+4>>2]|0,(f|0)/2|0|0)|0;q=L()|0;g[e+40>>3]=(+(b>>>0)+4294967296.0*+(q|0))*6.0;e=e+48|0;c[e>>2]=b;c[e+4>>2]=q;e=0;Ra=r;return e|0}function Ds(a){a=a|0;Ts(a);return 0}function Es(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+32|0;f=g;d=c[b+32>>2]|0;e=c[b+36>>2]|0;c[f>>2]=d;c[f+4>>2]=e;c[f+8>>2]=d;c[f+12>>2]=e;c[f+16>>2]=d;c[f+20>>2]=e;f=Bb(57667,f)|0;if(!f){f=7;Ra=g;return f|0}d=b+76|0;e=c[d>>2]|0;do if((e|0?(a[b+24>>0]|0)==0:0)?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=nd(c[b+12>>2]|0,f,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(d|0){h=d;Ra=g;return h|0}Ts(b);h=0;Ra=g;return h|0}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){a=7;f=0;c[b>>2]=f;return a|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](248)|0;if(!d){a=7;f=0;c[b>>2]=f;return a|0}}else{f=Wa[c[29356>>2]&127](248)|0;if((c[14985]|0)>>>0<248)c[14985]=248;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=7;a=0;c[b>>2]=a;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}gw(d|0,0,248)|0;c[d>>2]=a;g=a+56|0;c[g>>2]=(c[g>>2]|0)+1;g=0;a=d;c[b>>2]=a;return g|0}function Gs(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=c[b>>2]|0;h=b+16|0;d=c[h>>2]|0;if(d|0){g=b+12|0;if((c[g>>2]|0)>0){f=0;while(1){d=c[d+(f*24|0)+16>>2]|0;do if(d|0){e=c[d+16>>2]|0;if(e|0)ab[e&127](c[d+12>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);d=f+1|0;if((d|0)>=(c[g>>2]|0))break;f=d;d=c[h>>2]|0}d=c[h>>2]|0}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{g=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[h>>2]=0}gc(c[b+36>>2]|0)|0;d=c[b+32>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);Us(i,c[b+64>>2]|0)|0;Us(i,c[b+68>>2]|0)|0;Us(i,c[b+72>>2]|0)|0;Us(i,c[b+76>>2]|0)|0;Us(i,c[b+80>>2]|0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{h=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}e=i+56|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;e=i+76|0;f=c[e>>2]|0;if(!f)return 0;if(!((d|0)==0&(a[i+24>>0]|0)==0))return 0;c[e>>2]=0;d=c[f+20>>2]|0;gc(c[f+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,f);return 0}i=f;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[f>>2]=c[i>>2];c[i>>2]=f;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);return 0}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);return 0}return 0}function Hs(f,h,i,j,k){f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=Ra;Ra=Ra+16|0;w=y+4|0;t=y;x=c[f>>2]|0;c[w>>2]=0;v=x+40|0;c[v>>2]=(c[v>>2]|0)+1;v=f+16|0;l=c[v>>2]|0;if(l|0){o=f+12|0;if((c[o>>2]|0)>0){n=0;while(1){l=c[l+(n*24|0)+16>>2]|0;do if(l|0){m=c[l+16>>2]|0;if(m|0)ab[m&127](c[l+12>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=n+1|0;if((l|0)>=(c[o>>2]|0))break;n=l;l=c[v>>2]|0}l=c[v>>2]|0}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[v>>2]=0}l=c[f+32>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);u=f+36|0;s=c[u>>2]|0;gw(f|0,0,248)|0;c[f>>2]=x;c[u>>2]=s;c[f+8>>2]=h;a:do if((h|0)!=1){l=Xs(x,1,0,0,w)|0;if(!((j|0)>0&(l|0)==0)){if(l|0)break}else{l=j*24|0;m=pb(l,0)|0;c[v>>2]=m;c[f+12>>2]=j;if(!m){l=7;break}gw(m|0,0,l|0)|0;r=f+84|0;s=x+28|0;gw(r|0,0,(c[s>>2]<<2)+4|0)|0;t=x+21|0;q=0;do{u=c[v>>2]|0;m=q<<1;o=a[i+m>>0]|0;h=u+(q*24|0)+4|0;c[h>>2]=o<<24>>24;c[u+(q*24|0)>>2]=(a[i+(m|1)>>0]|0)+-48;m=c[k+(q<<2)>>2]|0;l=b[m+8>>1]|0;if(o<<24>>24>69){if((l&-15393)<<16>>16!=-32255){l=1;break a}if((a[m+11>>0]|0)!=112){l=1;break a}if(Bu(c[m>>2]|0,57762)|0){l=1;break a}l=c[m+16>>2]|0;if(!l){l=1;break a}o=pb((c[l>>2]|0)+80|0,0)|0;if(!o){l=7;break a}m=o;n=m+80|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));ew(o+80|0,l|0,c[l>>2]|0)|0;c[o>>2]=c[o+96>>2];c[o+4>>2]=c[o+100>>2];c[o+8>>2]=o+112;c[o+72>>2]=c[o+104>>2];l=c[o+84>>2]|0;if(!l){c[h>>2]=71;c[u+(q*24|0)+8>>2]=c[o+88>>2]}else c[u+(q*24|0)+8>>2]=l;c[u+(q*24|0)+16>>2]=o;c[o+28>>2]=d[t>>0];c[o+24>>2]=r;c[o+36>>2]=(c[s>>2]|0)+1}else{l=l&65535;do if(!(l&8)){if(l&4|0){h=m;p=+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0);break}if(!(l&18))p=0.0;else p=+Kg(a[m+10>>0]|0,c[m+12>>2]|0,c[m+16>>2]|0)}else p=+g[m>>3];while(0);g[u+(q*24|0)+8>>3]=p}q=q+1|0}while((q|0)<(j|0))}l=Ws(f,0.0,(c[x+28>>2]|0)+1&255)|0;if(!l){x=7;Ra=y;return x|0}else{k=l+8|0;c[k>>2]=1;c[k+4>>2]=0;a[l+18>>0]=0;a[l+17>>0]=1;c[f+64>>2]=c[w>>2];c[w>>2]=0;l=Ys(f)|0;break}}else{l=c[k>>2]|0;m=e[l+8>>1]|0;do if(!(m&4)){if(m&8|0){s=Mg(+g[l>>3])|0;r=L()|0;break}if(!(m&18)){r=0;s=0}else{s=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;r=L()|0}}else{s=l;r=c[s+4>>2]|0;s=c[s>>2]|0}while(0);c[t>>2]=0;q=x+88|0;l=c[q>>2]|0;do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){k=l;c[k>>2]=s;c[k+4>>2]=r;b[m>>1]=4;break}else{Pg(l,s,r);break}}while(0);k=(Gc(c[q>>2]|0)|0)==100;n=c[q>>2]|0;do if(k){o=Oc(n,0)|0;h=L()|0;l=Xs(x,o,h,0,t)|0;m=c[q>>2]|0;if(m){n=c[m>>2]|0;k=m+136|0;j=c[k+4>>2]|0;if((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)hc(n,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;j=m+64|0;c[j>>2]=0;c[j+4>>2]=0;if((k|0)==3082|(a[n+81>>0]|0)!=0){og(n);n=h;q=45}else{n=h;q=45}}else{n=h;q=45}}else if(n){l=c[n>>2]|0;k=n+136|0;j=c[k+4>>2]|0;if((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)hc(l,n);m=kc(n)|0;c[n+20>>2]=770837923;c[n+36>>2]=-1;c[n+40>>2]=0;a[n+146>>0]=2;c[n+44>>2]=0;c[n+32>>2]=1;a[n+147>>0]=-1;c[n+48>>2]=0;k=n+64|0;c[k>>2]=0;c[k+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);l=7;q=51;break}else{l=c[l+68>>2]&m;o=0;n=0;q=45;break}}else{l=0;o=0;n=0;q=45}while(0);if((q|0)==45){m=c[t>>2]|0;if((l|0)==0&(m|0)!=0){h=Ws(f,0.0,0)|0;c[f+64>>2]=m;l=h+8|0;c[l>>2]=o;c[l+4>>2]=n;a[h+17>>0]=1;l=c[m+24>>2]|0;n=d[l+2>>0]<<8|d[l+3>>0];b:do if(!n){l=267;m=0}else{o=d[x+23>>0]|0;m=0;while(1){f=l+((G(m,o)|0)+4)|0;t=cw(d[f>>0]|0,0,56)|0;k=L()|0;z=cw(d[f+1>>0]|0,0,48)|0;k=L()|0|k;u=cw(d[f+2>>0]|0,0,40)|0;k=k|(L()|0);k=k|d[f+3>>0];v=cw(d[f+4>>0]|0,0,24)|0;k=k|(L()|0);i=cw(d[f+5>>0]|0,0,16)|0;k=k|(L()|0);j=cw(d[f+6>>0]|0,0,8)|0;k=k|(L()|0);f=Sv(z|t|u|v|i|j|0,k|0,d[f+7>>0]|0,0)|0;if((f|0)==(s|0)&(L()|0)==(r|0)){l=0;break b}m=m+1|0;if(m>>>0>=n>>>0){l=267;m=0;break}}}while(0);a[h+18>>0]=m}else q=51}if((q|0)==51)a[f+4>>0]=1}while(0);Us(x,c[w>>2]|0)|0;Ts(x);z=l;Ra=y;return z|0}function Is(b){b=b|0;var d=0,e=0,f=0,g=0;d=b+6|0;if(!(a[d>>0]|0)){Zs(b);b=Ys(b)|0;return b|0}a[d>>0]=0;d=c[b+36>>2]|0;if(!d){Zs(b);b=Ys(b)|0;return b|0}e=c[d>>2]|0;f=d+136|0;g=c[f+4>>2]|0;if((g|0)>0|(g|0)==0&(c[f>>2]|0)>>>0>0)hc(e,d);g=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;f=d+64|0;c[f>>2]=0;c[f+4>>2]=0;if(!((g|0)==3082|(a[e+81>>0]|0)!=0)){Zs(b);g=Ys(b)|0;return g|0}og(e);Zs(b);g=Ys(b)|0;return g|0}function Js(a){a=a|0;return d[a+4>>0]|0|0}function Ks(i,j,k){i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=Ra;Ra=Ra+16|0;p=u+8|0;q=u;t=c[i>>2]|0;l=a[i+5>>0]|0;if(!(l<<24>>24))if(!(c[i+24>>2]|0))s=0;else s=c[i+32>>2]|0;else s=i+40|0;l=1-(l&255)|0;n=i+64+(l<<2)|0;m=c[n>>2]|0;if(!m){if(!l)l=i+48|0;else l=(c[i+32>>2]|0)+8|0;l=Xs(t,c[l>>2]|0,c[l+4>>2]|0,0,n)|0;if(!l)m=c[n>>2]|0;else{j=l;Ra=u;return j|0}}if(!s){j=0;Ra=u;return j|0}if(!k){n=(c[m+24>>2]|0)+((G(d[t+23>>0]|0,d[s+18>>0]|0)|0)+4)|0;s=cw(d[n>>0]|0,0,56)|0;i=L()|0;r=cw(d[n+1>>0]|0,0,48)|0;i=L()|0|i;t=cw(d[n+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[n+3>>0];k=cw(d[n+4>>0]|0,0,24)|0;i=i|(L()|0);m=cw(d[n+5>>0]|0,0,16)|0;i=i|(L()|0);l=cw(d[n+6>>0]|0,0,8)|0;i=i|(L()|0);n=Sv(r|s|t|k|m|l|0,i|0,d[n+7>>0]|0,0)|0;i=L()|0;l=c[j>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){j=l;c[j>>2]=n;c[j+4>>2]=i;b[m>>1]=4;j=0;Ra=u;return j|0}else{Pg(l,n,i);j=0;Ra=u;return j|0}}r=t+21|0;l=d[r>>0]|0;if((l|0)>=(k|0)){i=(c[m+24>>2]|0)+((k<<2)+8+(G(d[t+23>>0]|0,d[s+18>>0]|0)|0))|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];if(a[t+22>>0]|0){l=c[j>>2]|0;m=((i|0)<0)<<31>>31;n=l+8|0;if(!(b[n>>1]&9216)){j=l;c[j>>2]=i;c[j+4>>2]=m;b[n>>1]=4;j=0;Ra=u;return j|0}else{Pg(l,i,m);j=0;Ra=u;return j|0}}o=(c[h>>2]=i,+f[h>>2]);l=c[j>>2]|0;m=l+8|0;if(!(b[m>>1]&9216))b[m>>1]=1;else Dg(l);g[p>>3]=o;g[q>>3]=+g[p>>3];if(!(+g[p>>3]==+g[q>>3])){j=0;Ra=u;return j|0}g[l>>3]=o;b[m>>1]=8;j=0;Ra=u;return j|0}p=i+6|0;q=i+36|0;do if(!(a[p>>0]|0)){l=c[q>>2]|0;do if(!l){l=qd(c[t+12>>2]|0,c[t+64>>2]|0,-1,128,0,q,0)|0;if(!l){l=c[q>>2]|0;break}else{j=l;Ra=u;return j|0}}while(0);n=(c[m+24>>2]|0)+((G(d[t+23>>0]|0,d[s+18>>0]|0)|0)+4)|0;w=cw(d[n>>0]|0,0,56)|0;i=L()|0;x=cw(d[n+1>>0]|0,0,48)|0;i=L()|0|i;v=cw(d[n+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[n+3>>0];m=cw(d[n+4>>0]|0,0,24)|0;i=i|(L()|0);s=cw(d[n+5>>0]|0,0,16)|0;i=i|(L()|0);t=cw(d[n+6>>0]|0,0,8)|0;i=i|(L()|0);n=Sv(x|w|v|m|s|t|0,i|0,d[n+7>>0]|0,0)|0;i=L()|0;do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){x=l;c[x>>2]=n;c[x+4>>2]=i;b[m>>1]=4;break}else{Pg(l,n,i);break}}while(0);n=Gc(c[q>>2]|0)|0;if((n|0)==100){a[p>>0]=1;l=d[r>>0]|0;break}l=c[q>>2]|0;if(!l){x=(n|0)==101;x=x?0:n;Ra=u;return x|0}m=c[l>>2]|0;x=l+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(m,l);x=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;w=l+64|0;c[w>>2]=0;c[w+4>>2]=0;if(!((x|0)==3082|(a[m+81>>0]|0)!=0)){x=(n|0)==101;x=x?0:n;Ra=u;return x|0}og(m);x=(n|0)==101;x=x?0:n;Ra=u;return x|0}while(0);p=c[q>>2]|0;l=k-l+1|0;n=(p|0)==0;do if(n)i=29576;else{m=c[p+120>>2]|0;if(m|0?l>>>0<(e[p+144>>1]|0)>>>0:0){i=m+(l*40|0)|0;break}i=c[p>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576}while(0);l=i+8|0;m=e[l>>1]|0;if(m&2048|0)b[l>>1]=m&59391|4096;if(!n){m=c[p>>2]|0;n=p+40|0;l=c[n>>2]|0;if((l|0)==3082|(a[m+81>>0]|0)!=0){og(m);l=7}else l=c[m+68>>2]&l;c[n>>2]=l}Dc(j,i);x=0;Ra=u;return x|0}function Ls(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=a[b+5>>0]|0;if(!(f<<24>>24))if(!(c[b+24>>2]|0))i=0;else i=c[b+32>>2]|0;else i=b+40|0;g=1-(f&255)|0;h=b+64+(g<<2)|0;f=c[h>>2]|0;if(!f){if(!g)f=b+48|0;else f=(c[b+32>>2]|0)+8|0;g=f;g=Xs(c[b>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,h)|0;f=c[h>>2]|0}else g=0;if(!((i|0)!=0&(g|0)==0))return g|0;h=(c[f+24>>2]|0)+((G(d[(c[b>>2]|0)+23>>0]|0,d[i+18>>0]|0)|0)+4)|0;l=cw(d[h>>0]|0|0,0,56)|0;b=L()|0;m=cw(d[h+1>>0]|0|0,0,48)|0;b=L()|0|b;k=cw(d[h+2>>0]|0|0,0,40)|0;b=b|(L()|0);b=b|(d[h+3>>0]|0);j=cw(d[h+4>>0]|0|0,0,24)|0;b=b|(L()|0);f=cw(d[h+5>>0]|0|0,0,16)|0;b=b|(L()|0);i=cw(d[h+6>>0]|0|0,0,8)|0;b=b|(L()|0);h=Sv(m|l|k|j|f|i|0,b|0,d[h+7>>0]|0|0,0)|0;b=L()|0;i=e;c[i>>2]=h;c[i+4>>2]=b;return g|0}function Ms(h,i,j,k){h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=Ra;Ra=Ra+64|0;u=x;v=x+48|0;if(c[h+60>>2]|0){h=518;Ra=x;return h|0}t=h+40|0;c[t>>2]=(c[t>>2]|0)+1;t=u;c[t>>2]=0;c[t+4>>2]=0;t=(i|0)>1;a:do if(t){p=i+-4|0;i=d[h+21>>0]|0;p=(p|0)>(i|0)?i:p;i=(p|0)>0;b:do if(!(a[h+22>>0]|0)){if(i){m=0;while(1){i=c[j+(m+3<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&8)){if(l&4|0){s=i;o=+((c[s>>2]|0)>>>0)+4294967296.0*+(c[s+4>>2]|0);break}if(!(l&18))o=0.0;else o=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else o=+g[i>>3];while(0);r=o;r=o<r?o*(o<0.0?1.0000001192092896:.9999998807907104):r;f[u+8+(m<<2)>>2]=r;i=c[j+(m+4<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&8)){if(l&4|0){s=i;o=+((c[s>>2]|0)>>>0)+4294967296.0*+(c[s+4>>2]|0);break}if(!(l&18))o=0.0;else o=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else o=+g[i>>3];while(0);y=o;o=o>y?o*(o<0.0?.9999998807907104:1.0000001192092896):y;i=m|1;f[u+8+(i<<2)>>2]=o;m=m+2|0;if(r>o)break;if((m|0)>=(p|0))break b}i=_s(h,i)|0;break a}}else if(i){n=0;while(1){i=c[j+(n+3<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&4)){if(l&8|0){m=Mg(+g[i>>3])|0;L()|0;break}if(!(l&18))m=0;else{m=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0}}else m=c[i>>2]|0;while(0);c[u+8+(n<<2)>>2]=m;i=c[j+(n+4<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&4)){if(l&8|0){i=Mg(+g[i>>3])|0;L()|0;break}if(!(l&18))i=0;else{i=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0}}else i=c[i>>2]|0;while(0);l=n|1;c[u+8+(l<<2)>>2]=i;n=n+2|0;if((m|0)>(i|0))break;if((n|0)>=(p|0))break b}i=_s(h,l)|0;break a}while(0);l=c[j+8>>2]|0;i=b[l+8>>1]|0;if(!(-1431655766>>>(i&31)&1)){i=i&65535;do if(!(i&4)){if(i&8|0){p=Mg(+g[l>>3])|0;s=L()|0;break}if(!(i&18)){p=0;s=0}else{p=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;s=L()|0}}else{s=l;p=c[s>>2]|0;s=c[s+4>>2]|0}while(0);l=u;c[l>>2]=p;c[l+4>>2]=s;l=c[j>>2]|0;i=b[l+8>>1]|0;if(!(-1431655766>>>(i&31)&1)){i=i&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[l>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;l=L()|0}}else{i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);if((i|0)==(p|0)&(l|0)==(s|0)){q=1;i=0;n=s;w=67;break}}m=h+88|0;i=c[m>>2]|0;do if(!(Vc(i,1)|0)){i=c[i+100>>2]|0;l=i+8|0;if(!(b[l>>1]&9216)){q=i;c[q>>2]=p;c[q+4>>2]=s;b[l>>1]=4;break}else{Pg(i,p,s);break}}while(0);n=Gc(c[m>>2]|0)|0;i=c[m>>2]|0;do if(i){l=c[i>>2]|0;q=i+136|0;m=c[q+4>>2]|0;if((m|0)>0|(m|0)==0&(c[q>>2]|0)>>>0>0)hc(l,i);m=kc(i)|0;c[i+20>>2]=770837923;c[i+36>>2]=-1;c[i+40>>2]=0;a[i+146>>0]=2;c[i+44>>2]=0;c[i+32>>2]=1;a[i+147>>0]=-1;c[i+48>>2]=0;q=i+64|0;c[q>>2]=0;c[q+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);i=7;break}else{i=c[l+68>>2]&m;break}}else i=0;while(0);if((n|0)==100)if((a[(c[h+12>>2]|0)+86>>0]|0)==5){q=1;i=$s(h,p,s)|0;n=s;w=67;break}else{i=_s(h,0)|0;break}else{q=1;n=s;w=67}}else{q=0;i=0;p=0;n=0;w=67}}else{q=0;i=0;p=0;n=0;w=67}while(0);if((w|0)==67){m=c[j>>2]|0;l=b[m+8>>1]|0;if(!(-1431655766>>>(l&31)&1)){i=l&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[m>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[m+10>>0]|0,c[m+12>>2]|0,c[m+16>>2]|0)|0;l=L()|0}}else{l=m;i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);i=$s(h,i,l)|0}if(t&(i|0)==0){c[v>>2]=0;if(!q){i=h+92|0;Vc(c[i>>2]|0,1)|0;Vc(c[i>>2]|0,2)|0;Gc(c[i>>2]|0)|0;i=c[i>>2]|0;do if(i){l=c[i>>2]|0;t=i+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(l,i);m=kc(i)|0;c[i+20>>2]=770837923;c[i+36>>2]=-1;c[i+40>>2]=0;a[i+146>>0]=2;c[i+44>>2]=0;c[i+32>>2]=1;a[i+147>>0]=-1;c[i+48>>2]=0;t=i+64|0;c[t>>2]=0;c[t+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);i=7;break}else{i=c[l+68>>2]&m;break}}else i=0;while(0);s=(c[h+12>>2]|0)+40|0;q=c[s>>2]|0;s=c[s+4>>2]|0;t=u;c[t>>2]=q;c[t+4>>2]=s;t=k;c[t>>2]=q;c[t+4>>2]=s;if(!i)w=85}else{w=k;c[w>>2]=p;c[w+4>>2]=n;w=85}do if((w|0)==85){i=at(h,u,0,v)|0;if(!i){c[h+72>>2]=-1;w=c[v>>2]|0;i=bt(h,w,u,0)|0;w=Us(h,w)|0;i=(i|0)==0?w:i;if(!i){p=h+25|0;if(a[p>>0]|0){q=c[h+112>>2]|0;l=k;i=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(q,1)|0)){m=c[q+100>>2]|0;n=m+8|0;if(!(b[n>>1]&9216)){k=m;c[k>>2]=i;c[k+4>>2]=l;b[n>>1]=4;break}else{Pg(m,i,l);break}}while(0);if(a[p>>0]|0){l=h+21|0;i=0;do{Yc(q,i+2|0,c[j+(i+3+(d[l>>0]|0)<<2)>>2]|0)|0;i=i+1|0}while(i>>>0<(d[p>>0]|0)>>>0)}Gc(q)|0;if(q){i=c[q>>2]|0;j=q+136|0;k=c[j+4>>2]|0;if((k|0)>0|(k|0)==0&(c[j>>2]|0)>>>0>0)hc(i,q);l=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;j=q+64|0;c[j>>2]=0;c[j+4>>2]=0;if((l|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&l;break}}else i=0}else i=0}}}while(0)}}Ts(h);h=i;Ra=x;return h|0}function Ns(b){b=b|0;b=b+24|0;a[b>>0]=(a[b>>0]|0)+1<<24>>24;return 0}function Os(b){b=b|0;var d=0,e=0;a[b+24>>0]=0;d=b+76|0;e=c[d>>2]|0;if(!e)return 0;if(c[b+56>>2]|0)return 0;c[d>>2]=0;b=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,e);return 0}d=e;if((c[b+304>>2]|0)>>>0<=d>>>0?(c[b+308>>2]|0)>>>0>d>>>0:0){d=b+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return 0}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return 0}return 0}function Ps(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+48|0;f=g;h=c[b+32>>2]|0;e=c[b+36>>2]|0;c[f>>2]=h;c[f+4>>2]=e;c[f+8>>2]=d;c[f+12>>2]=h;c[f+16>>2]=e;c[f+20>>2]=d;c[f+24>>2]=h;c[f+28>>2]=e;c[f+32>>2]=d;f=Bb(57845,f)|0;if(!f){h=7;Ra=g;return h|0}d=b+76|0;e=c[d>>2]|0;do if((e|0?(a[b+24>>0]|0)==0:0)?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=nd(c[b+12>>2]|0,f,0,0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](f);h=d;Ra=g;return h|0}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);h=d;Ra=g;return h|0}return 0}function Qs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+24|0;f=a[e>>0]|0;a[e>>0]=0;d=b+76|0;g=c[d>>2]|0;if(!g){a[e>>0]=f;return 0}if(c[b+56>>2]|0){a[e>>0]=f;return 0}c[d>>2]=0;d=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,g);a[e>>0]=f;return 0}b=g;if((c[d+304>>2]|0)>>>0<=b>>>0?(c[d+308>>2]|0)>>>0>b>>>0:0){b=d+300|0;c[g>>2]=c[b>>2];c[b>>2]=g;a[e>>0]=f;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);a[e>>0]=f;return 0}else{b=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);a[e>>0]=f;return 0}return 0}function Rs(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0;if(!b){h=0;return h|0}h=a[b>>0]|0;g=d[208+(h&255)>>0]|0;c=g+-110|0;h=h<<24>>24==0;if(!(h|(c|0)!=0)){e=57990;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-112|0;if(!(h|(c|0)!=0)){e=38138;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-114|0;if(h|(c|0)!=0){i=c;i=(i|0)==0;i=i&1;return i|0}e=38132;do{b=b+1|0;e=e+1|0;i=a[b>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0));i=(c|0)==0;i=i&1;return i|0}function Ss(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+240|0;s=T+232|0;S=T+224|0;P=T+216|0;O=T+208|0;N=T+192|0;M=T+184|0;K=T+176|0;J=T+168|0;G=T+160|0;D=T+144|0;C=T+136|0;B=T+128|0;A=T+120|0;z=T+112|0;x=T+104|0;v=T+96|0;u=T+88|0;t=T+80|0;r=T+72|0;H=T+64|0;p=T+56|0;q=T+48|0;I=T;l=T+40|0;k=T+32|0;if((f|0)>103){c[k>>2]=56536;S=Bb(31408,k)|0;c[i>>2]=S;i=1;Ra=T;return i|0}c[l>>2]=1;vd(b,1,l)|0;w=g+4|0;l=Eu(c[w>>2]|0)|0;y=g+8|0;m=Eu(c[y>>2]|0)|0;k=l+506+m|0;R=pb(k,0)|0;if(!R){i=7;Ra=T;return i|0}gw(R|0,0,k|0)|0;c[R+40>>2]=1;c[R>>2]=30764;n=R+504|0;E=R+32|0;c[E>>2]=n;o=n+(l+1)|0;F=R+36|0;c[F>>2]=o;a[R+22>>0]=(e|0)!=0&1;ew(n|0,c[w>>2]|0,l|0)|0;ew(o|0,c[y>>2]|0,m|0)|0;o=zb(b)|0;c[I>>2]=c[g+12>>2];Eb(o,56609,I);a:do if((f|0)>4){l=R+25|0;m=R+21|0;k=4;while(1){e=c[g+(k<<2)>>2]|0;n=a[l>>0]|0;if((a[e>>0]|0)==43){a[l>>0]=n+1<<24>>24;c[q>>2]=e+1;Eb(o,56627,q)}else{if(n<<24>>24){m=1;break a}a[m>>0]=(a[m>>0]|0)+1<<24>>24;c[p>>2]=e;Eb(o,56627,p)}k=k+1|0;if((k|0)>=(f|0)){m=0;break}}}else m=0;while(0);Eb(o,56631,H);do if((o|0)!=0&(o|0)!=29632){k=o+4|0;l=c[k>>2]|0;if(((l|0)!=0?(a[l+(c[o+16>>2]|0)>>0]=0,(c[o+12>>2]|0)!=0):0)?(a[o+21>>0]&4)==0:0)e=$d(o)|0;else e=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{q=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}if(e){if(!m){k=td(b,e)|0;if(!k)k=0;else{l=pd(b)|0;Q=24}}else{k=1;l=56572;Q=24}if((Q|0)==24){c[r>>2]=l;r=Bb(31408,r)|0;c[i>>2]=r}if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{r=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}if(!k){k=a[R+21>>0]|0;r=(k&255)>>>1;a[R+20>>0]=r;if(r<<24>>24)if((k&255)<=10)if(!(k&1)){e=R+23|0;a[e>>0]=((k&255)<<2)+8;n=(j|0)==0;k=c[E>>2]|0;do if(n){l=c[F>>2]|0;c[u>>2]=k;c[u+4>>2]=l;l=Bb(56634,u)|0;m=R+16|0;if(!l){k=7;Q=48}else{c[u>>2]=0;k=qd(b,l,-1,128,0,u,0)|0;if(k|0){Q=48;break}k=c[u>>2]|0;if((Gc(k)|0)==100){u=Nc(k,0)|0;c[m>>2]=u}k=gc(k)|0;if(k|0){Q=48;break}if((c[m>>2]|0)>=448){k=0;break}c[v>>2]=c[F>>2];k=Bb(56691,v)|0;c[i>>2]=k;k=267}}else{c[t>>2]=k;l=Bb(54428,t)|0;if(!l){k=7;Q=48}else{c[t>>2]=0;k=qd(b,l,-1,128,0,t,0)|0;if(k|0){Q=48;break}k=c[t>>2]|0;if((Gc(k)|0)==100)m=(Nc(k,0)|0)+-64|0;else m=-64;k=gc(k)|0;if(k|0){Q=48;break}k=((d[e>>0]|0)*51|0)+4|0;c[R+16>>2]=(k|0)<(m|0)?k:m;k=0}}while(0);if((Q|0)==48){v=pd(b)|0;c[x>>2]=v;x=Bb(31408,x)|0;c[i>>2]=x;if(!l)break}if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{x=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}if(k|0)break;f=c[w>>2]|0;o=c[y>>2]|0;c[R+12>>2]=b;do if(!n){m=zb(b)|0;c[z>>2]=f;c[z+4>>2]=o;Eb(m,57135,z);l=R+25|0;if(a[l>>0]|0){k=0;do{c[A>>2]=k;Eb(m,57197,A);k=k+1|0}while(k>>>0<(d[l>>0]|0)>>>0)}c[B>>2]=f;c[B+4>>2]=o;Eb(m,57202,B);c[C>>2]=f;c[C+4>>2]=o;Eb(m,57266,C);C=c[R+16>>2]|0;c[D>>2]=f;c[D+4>>2]=o;c[D+8>>2]=C;Eb(m,57336,D);if(!((m|0)!=0&(m|0)!=29632)){k=7;Q=122;break}k=m+4|0;l=c[k>>2]|0;do if(!l)Q=62;else{a[l+(c[m+16>>2]|0)>>0]=0;if(!(c[m+12>>2]|0)){Q=62;break}if(a[m+21>>0]&4){Q=62;break}l=$d(m)|0}while(0);if((Q|0)==62)l=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{Q=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}if(!l){k=7;Q=122;break}k=nd(b,l,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{Q=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}if(k)Q=122;else Q=71}else Q=71;while(0);b:do if((Q|0)==71){c[I>>2]=R+80;c[I+4>>2]=R+84;c[I+8>>2]=R+88;c[I+12>>2]=R+92;c[I+16>>2]=R+96;c[I+20>>2]=R+100;c[I+24>>2]=R+104;c[I+28>>2]=R+108;k=Rd(b,c[E>>2]|0,35174,0,0,0,0,0,0)|0;do if(!k){e=c[F>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=e;e=Bb(57611,G)|0;if(!e){k=7;Q=85;break}k=qd(b,e,-1,128,0,H,0)|0;c:do switch(k|0){case 0:{k=c[H>>2]|0;if((Gc(k)|0)==100){l=Oc(k,0)|0;m=L()|0}else{l=0;m=0}k=gc(k)|0;if(k|0)break c;if((l|0)==0&(m|0)==0){Q=79;break c}H=(m|0)>0|(m|0)==0&l>>>0>100;k=R+48|0;c[k>>2]=H?l:100;c[k+4>>2]=H?m:0;k=0;break}case 7:break;default:Q=79}while(0);if((Q|0)==79){k=R+48|0;c[k>>2]=1048576;c[k+4>>2]=0;k=0}if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{Q=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}if(!k)Q=88;else Q=87}else{Q=R+48|0;c[Q>>2]=1048576;c[Q+4>>2]=0;if((k|0)!=1){Q=85;break}Q=88}while(0);d:do if((Q|0)==85)Q=87;else if((Q|0)==88){e=R+25|0;m=0;while(1){if((m|0)==3?(a[e>>0]|0)!=0:0)k=57385;else k=c[26432+(m<<2)>>2]|0;c[J>>2]=f;c[J+4>>2]=o;l=Bb(k,J)|0;if(!l){k=7;g=e;break d}k=qd(b,l,-1,133,0,c[I+(m<<2)>>2]|0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{H=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}m=m+1|0;if(!(m>>>0<8&(k|0)==0)){g=e;break}}}while(0);if((Q|0)==87)g=R+25|0;do if(a[g>>0]|0){c[K>>2]=f;c[K+4>>2]=o;K=Bb(57493,K)|0;c[R+64>>2]=K;if(!K){k=7;Q=122;break b}p=zb(b)|0;c[M>>2]=f;c[M+4>>2]=o;Eb(p,57538,M);if(a[g>>0]|0){e=R+26|0;n=p+16|0;o=p+8|0;f=p+4|0;m=0;do{do if(m|0){k=c[n>>2]|0;l=k+1|0;if(l>>>0<(c[o>>2]|0)>>>0){c[n>>2]=l;a[(c[f>>2]|0)+k>>0]=44;break}else{wb(p,41685,1);break}}while(0);k=m+2|0;if(m>>>0<(d[e>>0]|0)>>>0){c[N>>2]=m;c[N+4>>2]=k;c[N+8>>2]=m;Eb(p,57565,N)}else{c[O>>2]=m;c[O+4>>2]=k;Eb(p,57587,O)}m=m+1|0}while(m>>>0<(d[g>>0]|0)>>>0)}Eb(p,57595,P);if(!((p|0)!=0&(p|0)!=29632)){k=7;Q=122;break b}k=p+4|0;l=c[k>>2]|0;do if(!l)Q=114;else{a[l+(c[p+16>>2]|0)>>0]=0;if(!(c[p+12>>2]|0)){Q=114;break}if(a[p+21>>0]&4){Q=114;break}l=$d(p)|0}while(0);if((Q|0)==114)l=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{P=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}if(!l){k=7;Q=122;break b}k=qd(b,l,-1,133,0,R+112|0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{P=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(k|0)break;c[h>>2]=R;i=0;Ra=T;return i|0}while(0);b=pd(b)|0;c[S>>2]=b;S=Bb(31408,S)|0;c[i>>2]=S;break}else k=1;else k=3;else k=2;c[s>>2]=c[26400+(k<<2)>>2];k=Bb(31408,s)|0;c[i>>2]=k;k=1}}else k=7}else k=7;while(0);Ts(R);i=k;Ra=T;return i|0}function Ts(b){b=b|0;var d=0,e=0,f=0;d=b+40|0;e=(c[d>>2]|0)+-1|0;c[d>>2]=e;if(e|0)return;a[b+24>>0]=0;d=b+76|0;e=c[d>>2]|0;do if(e|0?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}f=e;if((c[d+304>>2]|0)>>>0<=f>>>0?(c[d+308>>2]|0)>>>0>f>>>0:0){f=d+300|0;c[e>>2]=c[f>>2];c[f>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;d=c[b+64>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{f=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{f=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function Us(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b){b=0;return b|0}f=b+16|0;g=(c[f>>2]|0)+-1|0;c[f>>2]=g;if(g|0){b=0;return b|0}f=a+60|0;c[f>>2]=(c[f>>2]|0)+-1;f=b+8|0;g=f;if((c[g>>2]|0)==1&(c[g+4>>2]|0)==0)c[a+28>>2]=-1;d=c[b>>2]|0;if((d|0)!=0?(e=Us(a,d)|0,(e|0)!=0):0)g=e;else g=Vs(a,b)|0;d=c[f>>2]|0;if(!((d|0)==0&(c[f+4>>2]|0)==0)){d=a+116+(((d>>>0)%97|0)<<2)|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;else d=e+28|0}a=b+28|0;c[d>>2]=c[a>>2];c[a>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=g;return b|0}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=g;return b|0}return 0}function Vs(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=e+20|0;if(!(c[j>>2]|0)){n=0;return n|0}m=c[d+80>>2]|0;n=e+8|0;g=n;f=c[g>>2]|0;g=c[g+4>>2]|0;do if(((f|0)!=0|(g|0)!=0)&(Vc(m,1)|0)==0){h=c[m+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){c[h>>2]=f;c[h+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);f=c[e+24>>2]|0;g=c[d+16>>2]|0;if((f|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;c[j>>2]=0;if(!m)f=0;else l=12}else{f=yc((c[m+100>>2]|0)+40|0,f,g,0,0)|0;if(f|0?(k=c[m>>2]|0,c[k+64>>2]=f,Ne(k,f),k=c[m>>2]|0,(f|0)==3082|(a[k+81>>0]|0)!=0):0)og(k);Gc(m)|0;c[j>>2]=0;l=12}do if((l|0)==12){f=c[m>>2]|0;l=m+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(f,m);g=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;l=m+64|0;c[l>>2]=0;c[l+4>>2]=0;if((g|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7;break}else{f=c[f+68>>2]&g;break}}while(0);Vc(m,2)|0;m=n;if(!((f|0)==0&((c[m>>2]|0)==0&(c[m+4>>2]|0)==0))){n=f;return n|0}l=(c[d+12>>2]|0)+40|0;m=c[l>>2]|0;l=c[l+4>>2]|0;c[n>>2]=m;c[n+4>>2]=l;n=d+116+(((m>>>0)%97|0)<<2)|0;c[e+28>>2]=c[n>>2];c[n>>2]=e;n=0;return n|0}function Ws(b,e,f){b=b|0;e=+e;f=f|0;var h=0,i=0,j=0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=Ra;Ra=Ra+32|0;t=u;s=b+5|0;i=(a[s>>0]|0)==0;do if(i)if(c[b+24>>2]|0){h=c[b+32>>2]|0;q=b+84+((f&255)<<2)|0;c[q>>2]=(c[q>>2]|0)+1;if(!h)break;else{r=6;break}}else{t=b+84+((f&255)<<2)|0;c[t>>2]=(c[t>>2]|0)+1;break}else{h=b+84+((f&255)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=b+40|0;r=6}while(0);if((r|0)==6){k=+g[h>>3];do if(!(k>e)){if(k==e?(d[h+16>>0]|0)>(f&255):0)break;m=b+24|0;i=c[m>>2]|0;l=b+20|0;h=c[l>>2]|0;do if((i|0)>=(h|0)){i=(h<<1)+8|0;j=b+32|0;h=c[j>>2]|0;if(mb()|0){b=0;Ra=u;return b|0}h=sb(h,i*24|0,0)|0;if(!h){b=0;Ra=u;return b|0}else{c[j>>2]=h;c[l>>2]=i;p=j;i=c[m>>2]|0;j=h;break}}else{j=b+32|0;p=j;j=c[j>>2]|0}while(0);c[m>>2]=i+1;h=j+(i*24|0)|0;g[h>>3]=e;a[j+(i*24|0)+16>>0]=f;if((i|0)<=0){b=h;Ra=u;return b|0}o=b+32|0;a:while(1){l=(i+-1|0)/2|0;m=j+(l*24|0)|0;k=+g[m>>3];if(!(e<k)){if(e>k){r=49;break}if((d[h+16>>0]|0)>=(d[j+(l*24|0)+16>>0]|0)){r=49;break}}h=j+(l*24|0)|0;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];c[t+8>>2]=c[h+8>>2];c[t+12>>2]=c[h+12>>2];c[t+16>>2]=c[h+16>>2];c[t+20>>2]=c[h+20>>2];j=j+(i*24|0)|0;c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[h+16>>2]=c[j+16>>2];c[h+20>>2]=c[j+20>>2];h=(c[o>>2]|0)+(i*24|0)|0;c[h>>2]=c[t>>2];c[h+4>>2]=c[t+4>>2];c[h+8>>2]=c[t+8>>2];c[h+12>>2]=c[t+12>>2];c[h+16>>2]=c[t+16>>2];c[h+20>>2]=c[t+20>>2];h=l+1|0;j=i+1|0;do if((i|0)<9)if((i|0)<=3){r=b+64+(h<<2)|0;s=c[r>>2]|0;f=b+64+(j<<2)|0;c[r>>2]=c[f>>2];c[f>>2]=s;if((i|0)==3)break;else{h=m;r=49;break a}}else{f=b+64+(h<<2)|0;Us(c[b>>2]|0,c[f>>2]|0)|0;c[f>>2]=0;break}while(0);i=l;h=m;j=c[p>>2]|0;e=+g[m>>3]}if((r|0)==49){Ra=u;return h|0}}while(0);if(!i){m=b+24|0;j=c[m>>2]|0;l=b+20|0;h=c[l>>2]|0;do if((j|0)>=(h|0)){i=(h<<1)+8|0;j=b+32|0;h=c[j>>2]|0;if(mb()|0){b=0;Ra=u;return b|0}h=sb(h,i*24|0,0)|0;if(!h){b=0;Ra=u;return b|0}else{c[j>>2]=h;c[l>>2]=i;q=j;i=h;j=c[m>>2]|0;l=h;break}}else{q=b+32|0;l=c[q>>2]|0;i=l}while(0);c[m>>2]=j+1;h=l+(j*24|0)|0;g[h>>3]=e;a[l+(j*24|0)+16>>0]=f;b:do if((j|0)>0){p=b+32|0;n=e;while(1){m=(j+-1|0)/2|0;o=l+(m*24|0)|0;k=+g[o>>3];if(!(n<k)){if(n>k){r=26;break b}if((d[h+16>>0]|0)>=(d[l+(m*24|0)+16>>0]|0))break b}h=l+(m*24|0)|0;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];c[t+8>>2]=c[h+8>>2];c[t+12>>2]=c[h+12>>2];c[t+16>>2]=c[h+16>>2];c[t+20>>2]=c[h+20>>2];i=l+(j*24|0)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];c[h+20>>2]=c[i+20>>2];h=(c[p>>2]|0)+(j*24|0)|0;c[h>>2]=c[t>>2];c[h+4>>2]=c[t+4>>2];c[h+8>>2]=c[t+8>>2];c[h+12>>2]=c[t+12>>2];c[h+16>>2]=c[t+16>>2];c[h+20>>2]=c[t+20>>2];h=m+1|0;i=j+1|0;do if((j|0)<9)if((j|0)<=3){v=b+64+(h<<2)|0;h=c[v>>2]|0;l=b+64+(i<<2)|0;c[v>>2]=c[l>>2];c[l>>2]=h;if((j|0)==3)break;else{h=o;r=26;break b}}else{v=b+64+(h<<2)|0;Us(c[b>>2]|0,c[v>>2]|0)|0;c[v>>2]=0;break}while(0);l=c[q>>2]|0;j=m;h=o;i=l;n=+g[o>>3]}}else r=26;while(0);do if((r|0)==26)if(!h){v=0;Ra=u;return v|0}else{i=c[b+32>>2]|0;break}while(0);i=h-i|0;if((i|0)<96){c[b+64+(((i|0)/24|0)+1<<2)>>2]=c[b+64>>2];i=b+64|0}else{i=b+64|0;Us(c[b>>2]|0,c[i>>2]|0)|0}c[i>>2]=0;v=b+40|0;c[h>>2]=c[v>>2];c[h+4>>2]=c[v+4>>2];c[h+8>>2]=c[v+8>>2];c[h+12>>2]=c[v+12>>2];c[h+16>>2]=c[v+16>>2];c[h+20>>2]=c[v+20>>2]}}v=b+40|0;g[v>>3]=e;a[b+56>>0]=f;a[s>>0]=1;Ra=u;return v|0}function Xs(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;m=p;i=c[b+116+(((e>>>0)%97|0)<<2)>>2]|0;a:do if(i|0){j=i;while(1){o=j+8|0;if((c[o>>2]|0)==(e|0)?(c[o+4>>2]|0)==(f|0):0)break;i=c[j+28>>2]|0;if(!i)break a;else j=i}do if(g|0?(c[j>>2]|0)==0:0){i=g;while(1){if((i|0)==(j|0)){i=267;n=63;break}i=c[i>>2]|0;if(!i){n=10;break}}if((n|0)==10){b=g+16|0;c[b>>2]=(c[b>>2]|0)+1;c[j>>2]=g;break}else if((n|0)==63){Ra=p;return i|0}}while(0);b=j+16|0;c[b>>2]=(c[b>>2]|0)+1;c[h>>2]=j;h=0;Ra=p;return h|0}while(0);o=b+76|0;k=c[o>>2]|0;do if(k){c[o>>2]=0;i=ld(k,e,f)|0;c[o>>2]=k;if(!i){l=b+16|0;i=c[l>>2]|0;n=48;break}j=b+24|0;do if((a[j>>0]|0)==0?(c[b+56>>2]|0)==0:0){c[o>>2]=0;l=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}n=k;if((c[l+304>>2]|0)>>>0<=n>>>0?(c[l+308>>2]|0)>>>0>n>>>0:0){n=l+300|0;c[k>>2]=c[n>>2];c[n>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if((i|0)!=7){k=c[o>>2]|0;if(!k){n=28;break}else{n=35;break}}else{h=7;Ra=p;return h|0}}else n=28;while(0);do if((n|0)==28){c[m>>2]=c[b+36>>2];j=Bb(57749,m)|0;if(!j){h=7;Ra=p;return h|0}i=ad(c[b+12>>2]|0,c[b+32>>2]|0,j,57757,e,f,0,o)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{n=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}k=c[o>>2]|0;if(!i){l=b+16|0;i=c[l>>2]|0;if(!k){j=0;k=l;n=50;break}else{n=48;break}}if(!k)n=46;else{j=b+24|0;n=35}}while(0);do if((n|0)==35)if((a[j>>0]|0)==0?(c[b+56>>2]|0)==0:0){c[o>>2]=0;j=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(j|0){if(c[j+480>>2]|0){Xd(j,k);n=46;break}b=k;if((c[j+304>>2]|0)>>>0<=b>>>0?(c[j+308>>2]|0)>>>0>b>>>0:0){n=j+300|0;c[k>>2]=c[n>>2];c[n>>2]=k;n=46;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);n=46;break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);n=46;break}}else n=46;else if((n|0)==48)if(!(c[k+16>>2]|0)){j=0;k=l;n=50}else{j=c[k>>2]|0;k=l;n=50}while(0);do if((n|0)==46){c[h>>2]=0;i=(i|0)==1?267:i;j=0}else if((n|0)==50)if((i|0)==(j|0)){j=pb(i+32|0,0)|0;if(j){c[j>>2]=g;i=j+32|0;c[j+24>>2]=i;c[j+16>>2]=1;n=b+60|0;c[n>>2]=(c[n>>2]|0)+1;n=j+8|0;c[n>>2]=e;c[n+4>>2]=f;c[j+20>>2]=0;c[j+28>>2]=0;i=jd(c[o>>2]|0,i,c[k>>2]|0,0,81)|0;if((e|0)==1&(f|0)==0){f=c[j+24>>2]|0;f=d[f>>0]<<8|d[f+1>>0];c[b+28>>2]=f;i=f>>>0>40?267:i}if(!i){f=c[j+24>>2]|0;if((d[f+2>>0]<<8|d[f+3>>0]|0)>(((c[b+16>>2]|0)+-4|0)/(d[b+23>>0]|0)|0|0))i=267;else{if(g|0){g=g+16|0;c[g>>2]=(c[g>>2]|0)+1}i=b+116+((((c[j+8>>2]|0)>>>0)%97|0)<<2)|0;c[j+28>>2]=c[i>>2];c[i>>2]=j;i=0;break}}b=b+60|0;c[b>>2]=(c[b>>2]|0)+-1;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=0;break}else{b=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=0;break}}else{i=7;j=0}}else{i=267;j=0}while(0);c[h>>2]=j;h=i;Ra=p;return h|0}function Ys(b){b=b|0;var e=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0;Pa=Ra;Ra=Ra+96|0;ua=Pa;Fa=Pa+80|0;za=c[b>>2]|0;Ma=c[b+12>>2]|0;Na=(a[za+22>>0]|0)==1;Oa=b+5|0;va=b+24|0;wa=b+40|0;xa=b+32|0;ya=b+48|0;za=za+23|0;Aa=(Ma|0)>0;Ba=b+16|0;Ca=ua+8|0;Da=ua+72|0;Ea=ua+64|0;Ga=ua+56|0;Ha=ua+48|0;Ia=ua+40|0;Ja=ua+32|0;Ka=ua+24|0;La=ua+16|0;m=0;e=0;a:while(1){j=a[Oa>>0]|0;if(!(j<<24>>24)){if(!(c[va>>2]|0)){e=1;ta=66;break}i=c[xa>>2]|0;if(!i){e=1;ta=66;break}}else i=wa;if(!(a[i+16>>0]|0)){e=0;ta=66;break}k=1-(j&255)|0;l=b+64+(k<<2)|0;j=c[l>>2]|0;if(!j){if(!k)e=ya;else e=(c[xa>>2]|0)+8|0;e=Xs(c[b>>2]|0,c[e>>2]|0,c[e+4>>2]|0,0,l)|0;j=c[l>>2]|0}if(e|0){ta=67;break}ra=j+24|0;sa=c[ra>>2]|0;sa=d[sa+2>>0]<<8|d[sa+3>>0];qa=i;j=m;e=0;b:while(1){oa=qa+18|0;k=a[oa>>0]|0;i=k&255;if(sa>>>0<=i>>>0)break;pa=(c[ra>>2]|0)+((G(d[za>>0]|0,i)|0)+4)|0;c:do if(Aa){O=qa+16|0;P=pa+8|0;Q=pa+1|0;R=pa+2|0;S=pa+3|0;T=pa+4|0;U=pa+5|0;V=pa+6|0;W=pa+7|0;X=pa+12|0;Y=pa+13|0;Z=pa+14|0;_=pa+15|0;$=pa+9|0;aa=pa+10|0;ba=pa+11|0;ca=pa+44|0;da=pa+45|0;ea=pa+46|0;fa=pa+47|0;ga=pa+40|0;ha=pa+41|0;ia=pa+42|0;ja=pa+43|0;ka=pa+36|0;la=pa+37|0;ma=pa+38|0;na=pa+39|0;r=pa+32|0;s=pa+33|0;t=pa+34|0;u=pa+35|0;v=pa+28|0;w=pa+29|0;x=pa+30|0;y=pa+31|0;z=pa+24|0;A=pa+25|0;B=pa+26|0;C=pa+27|0;D=pa+20|0;E=pa+21|0;F=pa+22|0;H=pa+23|0;I=pa+16|0;J=pa+17|0;K=pa+18|0;M=pa+19|0;N=qa+17|0;o=2;n=0;p=-1.0;d:do{l=c[Ba>>2]|0;m=c[l+(n*24|0)+4>>2]|0;e:do if((m|0)>69){e=c[l+(n*24|0)+16>>2]|0;i=c[e+28>>2]|0;if((m|0)==71?(a[O>>0]|0)==1:0){Va=cw(d[pa>>0]|0,0,56)|0;Sa=L()|0;Xa=cw(d[Q>>0]|0,0,48)|0;Sa=L()|0|Sa;Ua=cw(d[R>>0]|0,0,40)|0;Sa=Sa|(L()|0);Sa=Sa|d[S>>0];Ta=cw(d[T>>0]|0,0,24)|0;Sa=Sa|(L()|0);k=cw(d[U>>0]|0,0,16)|0;Sa=Sa|(L()|0);Qa=cw(d[V>>0]|0,0,8)|0;Sa=Sa|(L()|0);Sa=Sv(Xa|Va|Ua|Ta|k|Qa|0,Sa|0,d[W>>0]|0,0)|0;Qa=L()|0;k=e+40|0;c[k>>2]=Sa;c[k+4>>2]=Qa}if(Na){switch(i|0){case 10:{g[Da>>3]=+(d[da>>0]<<16|d[ca>>0]<<24|d[ea>>0]<<8|d[fa>>0]|0);g[Ea>>3]=+(d[ha>>0]<<16|d[ga>>0]<<24|d[ia>>0]<<8|d[ja>>0]|0);ta=29;break}case 8:{ta=29;break}case 6:{ta=30;break}case 4:{ta=31;break}default:{}}if((ta|0)==29){g[Ga>>3]=+(d[la>>0]<<16|d[ka>>0]<<24|d[ma>>0]<<8|d[na>>0]|0);g[Ha>>3]=+(d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0]|0);ta=30}if((ta|0)==30){g[Ia>>3]=+(d[w>>0]<<16|d[v>>0]<<24|d[x>>0]<<8|d[y>>0]|0);g[Ja>>3]=+(d[A>>0]<<16|d[z>>0]<<24|d[B>>0]<<8|d[C>>0]|0);ta=31}if((ta|0)==31){ta=0;g[Ka>>3]=+(d[E>>0]<<16|d[D>>0]<<24|d[F>>0]<<8|d[H>>0]|0);g[La>>3]=+(d[J>>0]<<16|d[I>>0]<<24|d[K>>0]<<8|d[M>>0]|0)}g[Ca>>3]=+(d[Y>>0]<<16|d[X>>0]<<24|d[Z>>0]<<8|d[_>>0]|0);q=+(d[$>>0]<<16|d[P>>0]<<24|d[aa>>0]<<8|d[ba>>0]|0)}else{switch(i|0){case 10:{g[Da>>3]=(c[h>>2]=d[da>>0]<<16|d[ca>>0]<<24|d[ea>>0]<<8|d[fa>>0],+f[h>>2]);g[Ea>>3]=(c[h>>2]=d[ha>>0]<<16|d[ga>>0]<<24|d[ia>>0]<<8|d[ja>>0],+f[h>>2]);ta=23;break}case 8:{ta=23;break}case 6:{ta=24;break}case 4:{ta=25;break}default:{}}if((ta|0)==23){g[Ga>>3]=(c[h>>2]=d[la>>0]<<16|d[ka>>0]<<24|d[ma>>0]<<8|d[na>>0],+f[h>>2]);g[Ha>>3]=(c[h>>2]=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0],+f[h>>2]);ta=24}if((ta|0)==24){g[Ia>>3]=(c[h>>2]=d[w>>0]<<16|d[v>>0]<<24|d[x>>0]<<8|d[y>>0],+f[h>>2]);g[Ja>>3]=(c[h>>2]=d[A>>0]<<16|d[z>>0]<<24|d[B>>0]<<8|d[C>>0],+f[h>>2]);ta=25}if((ta|0)==25){ta=0;g[Ka>>3]=(c[h>>2]=d[E>>0]<<16|d[D>>0]<<24|d[F>>0]<<8|d[H>>0],+f[h>>2]);g[La>>3]=(c[h>>2]=d[J>>0]<<16|d[I>>0]<<24|d[K>>0]<<8|d[M>>0],+f[h>>2])}g[Ca>>3]=(c[h>>2]=d[Y>>0]<<16|d[X>>0]<<24|d[Z>>0]<<8|d[_>>0],+f[h>>2]);q=(c[h>>2]=d[$>>0]<<16|d[P>>0]<<24|d[aa>>0]<<8|d[ba>>0],+f[h>>2])}g[ua>>3]=q;if((m|0)==70){c[Fa>>2]=0;e=Za[c[l+(n*24|0)+8>>2]&127](e,i,ua,Fa)|0;p=0.0;o=(c[Fa>>2]|0)==0?0:o}else{c[e+20>>2]=ua;c[e+32>>2]=(d[O>>0]|0)+-1;q=+g[qa>>3];g[e+48>>3]=q;Va=e+64|0;g[Va>>3]=q;Ua=d[N>>0]|0;c[e+56>>2]=Ua;Xa=e+60|0;c[Xa>>2]=Ua;e=Wa[c[l+(n*24|0)+8>>2]&127](e)|0;Xa=c[Xa>>2]|0;q=+g[Va>>3];p=p<0.0|q<p?q:p;o=(Xa|0)<(o|0)?Xa:o}if(!e){e=0;ta=49}else{k=1;j=e}}else{i=c[l+(n*24|0)>>2]<<2;if((a[O>>0]|0)!=1){k=pa+((i&1016)+8)|0;if((m+-65|0)>>>0<3){i=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];q=+g[l+(n*24|0)+8>>3];if(q>=(Na?+(i|0):(c[h>>2]=i,+f[h>>2]))){ta=49;break}if((m|0)!=65){ta=50;break}}else q=+g[l+(n*24|0)+8>>3];i=k+4|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];if(!(q<=(Na?+(i|0):(c[h>>2]=i,+f[h>>2])))){ta=50;break}else{ta=49;break}}i=pa+(i+8)|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];q=Na?+(i|0):(c[h>>2]=i,+f[h>>2]);switch(m|0){case 66:if(!(q<=+g[l+(n*24|0)+8>>3])){ta=50;break e}else{ta=49;break e}case 67:if(q<+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}case 68:if(!(q>=+g[l+(n*24|0)+8>>3])){ta=50;break e}else{ta=49;break e}case 69:if(q>+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}default:if(q==+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}}}while(0);if((ta|0)==49){ta=0;if(!o)ta=50;else k=0}if((ta|0)==50){ta=0;k=6;o=0}switch(k&7){case 6:break d;case 0:break;default:{i=qa;break c}}n=n+1|0}while((n|0)<(Ma|0));i=(a[oa>>0]|0)+1<<24>>24;a[oa>>0]=i;if(!o){i=qa;k=4}else ta=54}else{i=k+1<<24>>24;a[oa>>0]=i;p=-1.0;o=2;ta=54}while(0);if((ta|0)==54){ta=0;n=(d[qa+16>>0]|0)+255&255;if(!(n<<24>>24)){m=qa+8|0;k=i&255;i=k;k=k+255&255;l=c[m>>2]|0;m=c[m+4>>2]|0}else{Ua=cw(d[pa>>0]|0,0,56)|0;l=L()|0;Ta=cw(d[pa+1>>0]|0,0,48)|0;l=L()|0|l;Va=cw(d[pa+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[pa+3>>0];Xa=cw(d[pa+4>>0]|0,0,24)|0;l=l|(L()|0);m=cw(d[pa+5>>0]|0,0,16)|0;l=l|(L()|0);k=cw(d[pa+6>>0]|0,0,8)|0;l=l|(L()|0);l=Sv(Ta|Ua|Va|Xa|m|k|0,l|0,d[pa+7>>0]|0,0)|0;i=i&255;k=0;m=L()|0}if(sa>>>0<=i>>>0)Zs(b);i=Ws(b,p<0.0?0.0:p,n)|0;if(!i){e=7;ta=67;break a}a[i+17>>0]=o;Xa=i+8|0;c[Xa>>2]=l;c[Xa+4>>2]=m;a[i+18>>0]=k;k=5}switch(k|0){case 4:{qa=i;break}case 5:{ta=62;break b}default:{e=j;ta=67;break a}}}if((ta|0)==62){ta=0;i=d[i+18>>0]|0}if(sa>>>0<=i>>>0)Zs(b);m=j}if((ta|0)==66){a[b+4>>0]=e;Xa=0;Ra=Pa;return Xa|0}else if((ta|0)==67){Ra=Pa;return e|0}return 0}function Zs(b){b=b|0;var e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;p=r;i=b+5|0;e=a[i>>0]|0;f=b+64+(1-(e&255)<<2)|0;h=c[f>>2]|0;if(h){Us(c[b>>2]|0,h)|0;c[f>>2]=0;e=a[i>>0]|0}if(e<<24>>24){q=b+84+((d[b+56>>0]|0)<<2)|0;c[q>>2]=(c[q>>2]|0)+-1;a[i>>0]=0;Ra=r;return}e=b+24|0;f=c[e>>2]|0;if(!f){Ra=r;return}n=b+32|0;m=c[n>>2]|0;o=b+84+((d[m+16>>0]|0)<<2)|0;c[o>>2]=(c[o>>2]|0)+-1;o=f+-1|0;c[e>>2]=o;e=m+(o*24|0)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[m+16>>2]=c[e+16>>2];c[m+20>>2]=c[e+20>>2];e=b+64+(f<<2)|0;if((f|0)<5?(c[b+68>>2]=c[e>>2],c[e>>2]=0,(f|0)<=2):0){Ra=r;return}e=0;m=1;a:while(1){l=m+1|0;i=c[n>>2]|0;do if((l|0)<(o|0)){h=i+(l*24|0)|0;k=+g[h>>3];j=+g[i+(m*24|0)>>3];if(!(k<j)){if(k>j){q=21;break}if((d[i+(l*24|0)+16>>0]|0)>=(d[i+(m*24|0)+16>>0]|0)){q=21;break}}f=i+(e*24|0)|0;j=+g[f>>3];if(!(k<j)){if(k>j){q=30;break a}if((d[i+(l*24|0)+16>>0]|0)>=(d[i+(e*24|0)+16>>0]|0)){q=30;break a}};c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];c[p+16>>2]=c[f+16>>2];c[p+20>>2]=c[f+20>>2];c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];f=(c[n>>2]|0)+(l*24|0)|0;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];f=e+1|0;h=m+2|0;do if((e|0)<4)if((m|0)>2){m=b+64+(f<<2)|0;Us(c[b>>2]|0,c[m>>2]|0)|0;c[m>>2]=0;break}else{f=b+64+(f<<2)|0;i=c[f>>2]|0;m=b+64+(h<<2)|0;c[f>>2]=c[m>>2];c[m>>2]=i;break}while(0);e=l}else q=21;while(0);if((q|0)==21){q=0;f=i+(m*24|0)|0;h=i+(e*24|0)|0;j=+g[f>>3];k=+g[h>>3];if(!(j<k)){if(j>k){q=30;break}if((d[i+(m*24|0)+16>>0]|0)>=(d[i+(e*24|0)+16>>0]|0)){q=30;break}};c[p>>2]=c[h>>2];c[p+4>>2]=c[h+4>>2];c[p+8>>2]=c[h+8>>2];c[p+12>>2]=c[h+12>>2];c[p+16>>2]=c[h+16>>2];c[p+20>>2]=c[h+20>>2];c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=(c[n>>2]|0)+(m*24|0)|0;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];f=e+1|0;do if((e|0)<4)if((m|0)>3){l=b+64+(f<<2)|0;Us(c[b>>2]|0,c[l>>2]|0)|0;c[l>>2]=0;break}else{h=b+64+(f<<2)|0;i=c[h>>2]|0;l=b+64+(l<<2)|0;c[h>>2]=c[l>>2];c[l>>2]=i;break}while(0);e=m}m=e<<1|1;if((m|0)>=(o|0)){q=30;break}}if((q|0)==30){Ra=r;return}}function _s(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;l=o+16|0;j=o+8|0;g=o;i=o+28|0;c[i>>2]=0;n=d+36|0;m=c[n>>2]|0;c[g>>2]=c[d+32>>2];c[g+4>>2]=m;g=Bb(53869,g)|0;do if(!g){h=7;g=0}else{h=qd(c[d+12>>2]|0,g,-1,128,0,i,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}if(h|0){g=c[i>>2]|0;break}m=c[i>>2]|0;k=c[m>>2]|0;g=(m|0)==0;if(!f){if(!g?(b[m+144>>1]|0)!=0:0){g=c[m+116>>2]|0;do if(g){h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(h&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);h=k+81|0;if(a[h>>0]|0)if(!(c[k+180>>2]|0)){a[h>>0]=0;c[k+264>>2]=0;g=k+272|0;c[g>>2]=(c[g>>2]|0)+-1;g=0}else g=0}else g=0;c[j>>2]=c[n>>2];c[j+4>>2]=g;g=Bb(57776,j)|0}else{if(!g){j=m+144|0;if((e[j>>1]|0)>>>0>f>>>0){g=c[m+116>>2]|0;h=g+(f*40|0)|0;do if(h){i=b[g+(f*40|0)+8>>1]|0;if((i&514)==514?(a[g+(f*40|0)+10>>0]|0)==1:0){h=c[g+(f*40|0)+16>>2]|0;break}if(!(i&1))h=Gg(h,1)|0;else h=0}else h=0;while(0);g=k+81|0;if(a[g>>0]|0)if(!(c[k+180>>2]|0)){a[g>>0]=0;c[k+264>>2]=0;h=k+272|0;c[h>>2]=(c[h>>2]|0)+-1;h=0}else h=0}else h=0;f=f+1|0;k=c[m>>2]|0;if(f>>>0<(e[j>>1]|0)>>>0){g=c[m+116>>2]|0;i=g+(f*40|0)|0;do if(i){j=b[g+(f*40|0)+8>>1]|0;if((j&514)==514?(a[g+(f*40|0)+10>>0]|0)==1:0){g=c[g+(f*40|0)+16>>2]|0;break}if(!(j&1))g=Gg(i,1)|0;else g=0}else g=0;while(0);i=k+81|0;if(a[i>>0]|0)if(!(c[k+180>>2]|0)){a[i>>0]=0;c[k+264>>2]=0;g=k+272|0;c[g>>2]=(c[g>>2]|0)+-1;g=0}else g=0}else g=0}else{h=0;g=0}c[l>>2]=c[n>>2];c[l+4>>2]=h;c[l+8>>2]=g;g=Bb(57808,l)|0}c[d+8>>2]=g;gc(m)|0;d=19;Ra=o;return d|0}while(0);gc(g)|0;d=h;Ra=o;return d|0}function $s(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;x=Ra;Ra=Ra+64|0;t=x+56|0;u=x;v=x+52|0;w=x+48|0;c[v>>2]=0;c[w>>2]=0;i=Xs(e,1,0,0,w)|0;a:do if(!i){c[v>>2]=0;k=e+88|0;h=c[k>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){s=h;c[s>>2]=f;c[s+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);s=(Gc(c[k>>2]|0)|0)==100;j=c[k>>2]|0;do if(s){i=Oc(j,0)|0;i=Xs(e,i,L()|0,0,v)|0;h=c[k>>2]|0;if(h){j=c[h>>2]|0;s=h+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(j,h);s=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;r=h+64|0;c[r>>2]=0;c[r+4>>2]=0;if((s|0)==3082|(a[j+81>>0]|0)!=0)og(j)}}else if(j){h=c[j>>2]|0;s=j+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(h,j);i=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;s=j+64|0;c[s>>2]=0;c[s+4>>2]=0;if((i|0)==3082|(a[h+81>>0]|0)!=0){og(h);i=7;break a}else{i=c[h+68>>2]&i;break}}else i=0;while(0);l=c[v>>2]|0;b:do if((i|0)==0&(l|0)!=0){i=c[l+24>>2]|0;j=d[i+2>>0]<<8|d[i+3>>0];c:do if(j|0){k=d[e+23>>0]|0;h=0;while(1){s=i+((G(h,k)|0)+4)|0;A=cw(d[s>>0]|0,0,56)|0;r=L()|0;B=cw(d[s+1>>0]|0,0,48)|0;r=L()|0|r;z=cw(d[s+2>>0]|0,0,40)|0;r=r|(L()|0);r=r|d[s+3>>0];y=cw(d[s+4>>0]|0,0,24)|0;r=r|(L()|0);p=cw(d[s+5>>0]|0,0,16)|0;r=r|(L()|0);q=cw(d[s+6>>0]|0,0,8)|0;r=r|(L()|0);s=Sv(B|A|z|y|p|q|0,r|0,d[s+7>>0]|0,0)|0;if((s|0)==(f|0)&(L()|0)==(g|0))break;h=h+1|0;if(h>>>0>=j>>>0)break c}h=ct(e,l,h,0)|0;i=Us(e,l)|0;if(!h)break b;else{i=h;break a}}while(0);Us(e,l)|0;i=267;break a}while(0);if(!i){j=e+96|0;h=c[j>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){B=h;c[B>>2]=f;c[B+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;B=h+136|0;A=c[B+4>>2]|0;if((A|0)>0|(A|0)==0&(c[B>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;B=h+64|0;c[B>>2]=0;c[B+4>>2]=0;if(!((j|0)==3082|(a[i+81>>0]|0)!=0)){i=c[i+68>>2]&j;if(!i)break;else break a}else{og(i);i=7;break a}}while(0);j=e+28|0;if((c[j>>2]|0)>0?(n=c[w>>2]|0,o=n+24|0,m=c[o>>2]|0,(d[m+2>>0]<<8|d[m+3>>0]|0)==1):0){c[t>>2]=0;y=cw(d[m+4>>0]|0,0,56)|0;h=L()|0;s=cw(d[m+5>>0]|0,0,48)|0;h=L()|0|h;z=cw(d[m+6>>0]|0,0,40)|0;h=h|(L()|0);h=h|d[m+7>>0];A=cw(d[m+8>>0]|0,0,24)|0;h=h|(L()|0);B=cw(d[m+9>>0]|0,0,16)|0;h=h|(L()|0);i=cw(d[m+10>>0]|0,0,8)|0;h=h|(L()|0);h=Sv(s|y|z|A|B|i|0,h|0,d[m+11>>0]|0,0)|0;h=Xs(e,h,L()|0,n,t)|0;i=c[t>>2]|0;if(!h)h=dt(e,i,(c[j>>2]|0)+-1|0)|0;i=Us(e,i)|0;i=(h|0)==0?i:h;if(!i){A=(c[j>>2]|0)+-1|0;c[j>>2]=A;B=c[o>>2]|0;a[B>>0]=A>>>8;a[B+1>>0]=A;c[n+20>>2]=1}}else i=0}}while(0);q=e+68|0;j=c[q>>2]|0;c[v>>2]=j;h=(i|0)==0;if(!j){B=i;z=h;A=c[w>>2]|0;A=Us(e,A)|0;B=z?A:B;Ra=x;return B|0}r=e+60|0;p=e+23|0;s=e+21|0;do{o=j;n=j;d:do if(h){f=n+24|0;h=c[f>>2]|0;g=d[h+2>>0]<<8|d[h+3>>0];if(!g)i=0;else{m=n+8|0;l=0;while(1){B=G(l,d[p>>0]|0)|0;A=h+(B+4)|0;D=cw(d[A>>0]|0,0,56)|0;i=L()|0;E=cw(d[A+1>>0]|0,0,48)|0;i=L()|0|i;C=cw(d[A+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[A+3>>0];y=cw(d[A+4>>0]|0,0,24)|0;i=i|(L()|0);z=cw(d[A+5>>0]|0,0,16)|0;i=i|(L()|0);k=cw(d[A+6>>0]|0,0,8)|0;i=i|(L()|0);A=Sv(E|D|C|y|z|k|0,i|0,d[A+7>>0]|0,0)|0;i=L()|0;k=u;c[k>>2]=A;c[k+4>>2]=i;k=d[s>>0]|0;i=0;h=h+(B+12)|0;while(1){c[u+8+(i<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[u+8+((i|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];i=i+2|0;if(i>>>0>=k>>>0)break;else h=h+8|0}i=at(e,u,c[m>>2]|0,t)|0;if(!i){E=c[t>>2]|0;i=bt(e,E,u,c[m>>2]|0)|0;E=Us(e,E)|0;i=(i|0)==0?E:i}h=l+1|0;if(!(h>>>0<g>>>0&(i|0)==0))break d;l=h;h=c[f>>2]|0}}}while(0);h=c[n+28>>2]|0;c[q>>2]=h;c[r>>2]=(c[r>>2]|0)+-1;if(!j)j=h;else{if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{E=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}j=c[q>>2]|0}c[v>>2]=j;h=(i|0)==0}while((j|0)!=0);E=c[w>>2]|0;E=Us(e,E)|0;E=h?E:i;Ra=x;return E|0}function at(b,e,g,h){b=b|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;Ba=Ra;Ra=Ra+112|0;wa=Ba+48|0;za=Ba+96|0;xa=Ba;c[za>>2]=0;i=Xs(b,1,0,0,za)|0;ya=b+28|0;if(i|0){Aa=i;za=c[za>>2]|0;c[h>>2]=za;Ra=Ba;return Aa|0}D=b+23|0;H=b+21|0;E=b+20|0;F=b+22|0;I=wa+12|0;J=wa+8|0;K=wa+44|0;M=wa+40|0;N=wa+36|0;O=wa+32|0;P=wa+28|0;Q=wa+24|0;R=wa+20|0;S=wa+16|0;T=wa+12|0;U=wa+8|0;V=wa+44|0;W=wa+40|0;X=wa+36|0;Y=wa+32|0;Z=wa+28|0;_=wa+24|0;$=wa+20|0;aa=wa+16|0;ba=xa+12|0;ca=xa+8|0;da=xa+44|0;ea=xa+40|0;fa=xa+36|0;ga=xa+32|0;ha=xa+28|0;ia=xa+24|0;ja=xa+20|0;ka=xa+16|0;la=xa+12|0;ma=xa+8|0;na=xa+44|0;oa=xa+40|0;pa=xa+36|0;qa=xa+32|0;ra=xa+28|0;sa=xa+24|0;ta=xa+20|0;ua=xa+16|0;C=0;while(1){if((C|0)>=((c[ya>>2]|0)-g|0)){i=0;Aa=56;break}va=c[za>>2]|0;x=va+24|0;i=c[x>>2]|0;y=d[i+2>>0]<<8|d[i+3>>0];a:do if(!y){j=0;i=0}else{B=a[H>>0]|0;z=d[D>>0]|0;A=B&255;B=B&255;k=0;p=0.0;w=0.0;l=i;u=0;v=0;while(1){t=G(k,z)|0;j=l+(t+4)|0;Ea=cw(d[j>>0]|0,0,56)|0;i=L()|0;Fa=cw(d[j+1>>0]|0,0,48)|0;i=L()|0|i;Da=cw(d[j+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[j+3>>0];Ca=cw(d[j+4>>0]|0,0,24)|0;i=i|(L()|0);o=cw(d[j+5>>0]|0,0,16)|0;i=i|(L()|0);m=cw(d[j+6>>0]|0,0,8)|0;i=i|(L()|0);j=Sv(Fa|Ea|Da|Ca|o|m|0,i|0,d[j+7>>0]|0,0)|0;i=L()|0;m=xa;c[m>>2]=j;c[m+4>>2]=i;m=0;l=l+(t+12)|0;while(1){c[xa+8+(m<<2)>>2]=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];c[xa+8+((m|1)<<2)>>2]=d[l+5>>0]<<16|d[l+4>>0]<<24|d[l+6>>0]<<8|d[l+7>>0];m=m+2|0;if(m>>>0>=A>>>0)break;else l=l+8|0}l=wa;m=xa;o=l+48|0;do{c[l>>2]=c[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(o|0));t=a[E>>0]|0;o=(a[F>>0]|0)==0;if(o){switch(t<<24>>24){case 5:{n=+f[K>>2]-+f[M>>2];Aa=11;break}case 4:{n=1.0;Aa=11;break}case 3:{n=1.0;Aa=12;break}case 2:{n=1.0;Aa=13;break}default:q=1.0}if((Aa|0)==11){n=n*(+f[N>>2]-+f[O>>2]);Aa=12}if((Aa|0)==12){n=n*(+f[P>>2]-+f[Q>>2]);Aa=13}if((Aa|0)==13){Aa=0;q=n*(+f[R>>2]-+f[S>>2])}n=+f[J>>2];r=+f[I>>2]-n;m=0;while(1){s=+f[e+8+(m<<2)>>2];f[wa+8+(m<<2)>>2]=n<s?n:s;Fa=m|1;l=wa+8+(Fa<<2)|0;n=+f[l>>2];s=+f[e+8+(Fa<<2)>>2];f[l>>2]=n>s?n:s;l=m+2|0;if(l>>>0>=B>>>0)break;m=l;n=+f[wa+8+(l<<2)>>2]}s=q*r}else{switch(t<<24>>24){case 5:{Fa=c[V>>2]|0;Aa=c[W>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=16;break}case 4:{n=1.0;Aa=16;break}case 3:{n=1.0;Aa=17;break}case 2:{n=1.0;Aa=18;break}default:n=1.0}if((Aa|0)==16){Ea=c[X>>2]|0;Fa=c[Y>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=17}if((Aa|0)==17){Ea=c[Z>>2]|0;Fa=c[_>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=18}if((Aa|0)==18){Aa=0;Ea=c[$>>2]|0;Fa=c[aa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}m=c[T>>2]|0;l=c[U>>2]|0;m=Tv(m|0,((m|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;q=+(m>>>0)+4294967296.0*+(L()|0);m=0;while(1){Fa=c[e+8+(m<<2)>>2]|0;c[wa+8+(m<<2)>>2]=(l|0)<(Fa|0)?l:Fa;Fa=m|1;l=wa+8+(Fa<<2)|0;Ea=c[l>>2]|0;Fa=c[e+8+(Fa<<2)>>2]|0;c[l>>2]=(Ea|0)>(Fa|0)?Ea:Fa;l=m+2|0;if(l>>>0>=B>>>0)break;m=l;l=c[wa+8+(l<<2)>>2]|0}s=n*q}if(o){switch(t<<24>>24){case 5:{n=+f[K>>2]-+f[M>>2];Aa=30;break}case 4:{n=1.0;Aa=30;break}case 3:{n=1.0;Aa=31;break}case 2:{n=1.0;Aa=32;break}default:n=1.0}if((Aa|0)==30){n=n*(+f[N>>2]-+f[O>>2]);Aa=31}if((Aa|0)==31){n=n*(+f[P>>2]-+f[Q>>2]);Aa=32}if((Aa|0)==32){Aa=0;n=n*(+f[R>>2]-+f[S>>2])}r=n*(+f[I>>2]-+f[J>>2]);switch(t<<24>>24){case 5:{n=+f[da>>2]-+f[ea>>2];Aa=40;break}case 4:{n=1.0;Aa=40;break}case 3:{n=1.0;Aa=41;break}case 2:{n=1.0;Aa=42;break}default:n=1.0}if((Aa|0)==40){n=n*(+f[fa>>2]-+f[ga>>2]);Aa=41}if((Aa|0)==41){n=n*(+f[ha>>2]-+f[ia>>2]);Aa=42}if((Aa|0)==42){Aa=0;n=n*(+f[ja>>2]-+f[ka>>2])}q=n*(+f[ba>>2]-+f[ca>>2]);n=r}else{switch(t<<24>>24){case 5:{Fa=c[V>>2]|0;Aa=c[W>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=35;break}case 4:{n=1.0;Aa=35;break}case 3:{n=1.0;Aa=36;break}case 2:{n=1.0;Aa=37;break}default:n=1.0}if((Aa|0)==35){Ea=c[X>>2]|0;Fa=c[Y>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=36}if((Aa|0)==36){Ea=c[Z>>2]|0;Fa=c[_>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=37}if((Aa|0)==37){Aa=0;Ea=c[$>>2]|0;Fa=c[aa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}Ea=c[T>>2]|0;Fa=c[U>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;r=n*(+(Fa>>>0)+4294967296.0*+(L()|0));switch(t<<24>>24){case 5:{Fa=c[na>>2]|0;Aa=c[oa>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=46;break}case 4:{n=1.0;Aa=46;break}case 3:{n=1.0;Aa=47;break}case 2:{n=1.0;Aa=48;break}default:n=1.0}if((Aa|0)==46){Ea=c[pa>>2]|0;Fa=c[qa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=47}if((Aa|0)==47){Ea=c[ra>>2]|0;Fa=c[sa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=48}if((Aa|0)==48){Aa=0;Ea=c[ta>>2]|0;Fa=c[ua>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}Ea=c[la>>2]|0;Fa=c[ma>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;q=n*(+(Fa>>>0)+4294967296.0*+(L()|0));n=r}n=n-s;if(!((k|0)==0|n<w)?!(n==w&q<p):0){n=w;j=u;i=v}else p=q;k=k+1|0;if((k|0)==(y|0))break a;w=n;l=c[x>>2]|0;u=j;v=i}}while(0);i=Xs(b,j,i,va,za)|0;Us(b,va)|0;if(!i)C=C+1|0;else{Aa=56;break}}if((Aa|0)==56){Fa=c[za>>2]|0;c[h>>2]=Fa;Ra=Ba;return i|0}return 0}function bt(b,e,h,i){b=b|0;e=e|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0.0,H=0,I=0,J=0.0,K=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0.0;Sa=Ra;Ra=Ra+192|0;Ea=Sa;Ia=Sa+144|0;Fa=Sa+96|0;Ga=Sa+48|0;Ma=(i|0)>0;a:do if(Ma?(l=h,k=c[l>>2]|0,l=c[l+4>>2]|0,j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0,j|0):0){while(1){Qa=j+8|0;if((c[Qa>>2]|0)==(k|0)?(c[Qa+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break a}Us(b,c[j>>2]|0)|0;if(e|0){Qa=e+16|0;c[Qa>>2]=(c[Qa>>2]|0)+1}c[j>>2]=e}while(0);La=b+16|0;Qa=b+23|0;j=d[Qa>>0]|0;m=((c[La>>2]|0)+-4|0)/(j|0)|0;E=e+24|0;k=c[E>>2]|0;n=d[k+2>>0]<<8|d[k+3>>0];if((n|0)<(m|0)){j=k+((G(n,j)|0)+4)|0;Oa=h;l=c[Oa>>2]|0;Oa=c[Oa+4>>2]|0;Na=bw(l|0,Oa|0,56)|0;L()|0;a[j>>0]=Na;Na=bw(l|0,Oa|0,48)|0;L()|0;a[j+1>>0]=Na;Na=bw(l|0,Oa|0,40)|0;L()|0;a[j+2>>0]=Na;a[j+3>>0]=Oa;Na=bw(l|0,Oa|0,24)|0;L()|0;a[j+4>>0]=Na;Na=bw(l|0,Oa|0,16)|0;L()|0;a[j+5>>0]=Na;Oa=bw(l|0,Oa|0,8)|0;L()|0;a[j+6>>0]=Oa;a[j+7>>0]=l;l=b+21|0;if(a[l>>0]|0){k=0;j=j+8|0;while(1){Oa=c[h+8+(k<<2)>>2]|0;a[j>>0]=Oa>>>24;a[j+1>>0]=Oa>>>16;a[j+2>>0]=Oa>>>8;a[j+3>>0]=Oa;k=k+1|0;if(k>>>0>=(d[l>>0]|0)>>>0)break;else j=j+4|0}}Oa=c[E>>2]|0;Na=n+1|0;a[Oa+2>>0]=Na>>>8;a[Oa+3>>0]=Na;c[e+20>>2]=1}if((n|0)!=(m|0)){j=ft(b,e,h)|0;if(j|0){b=j;Ra=Sa;return b|0}m=h;l=c[m>>2]|0;m=c[m+4>>2]|0;k=e+8|0;j=c[k>>2]|0;k=c[k+4>>2]|0;if(!i){b=gt(b,l,m,j,k)|0;Ra=Sa;return b|0}else{b=ht(b,l,m,j,k)|0;Ra=Sa;return b|0}}j=b+72|0;if((c[j>>2]|0)<(i|0)?(D=e+8|0,Oa=D,!((c[Oa>>2]|0)==1&(c[Oa+4>>2]|0)==0)):0){c[j>>2]=i;m=Ea;I=m+40|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(I|0));z=c[E>>2]|0;z=d[z+2>>0]<<8|d[z+3>>0];w=z+1|0;u=z+2|0;j=u&131070;B=pb(j<<6,0)|0;do if(B){A=B+(j*48|0)|0;x=A+(j<<2)|0;v=x+(j<<2)|0;o=b+20|0;y=b+21|0;t=b+22|0;n=0;do{j=B+(n*48|0)|0;if((n|0)==(z|0)){m=j;H=h;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0))}else{Pa=c[E>>2]|0;k=G(n,d[Qa>>0]|0)|0;Na=Pa+(k+4)|0;Ga=cw(d[Na>>0]|0,0,56)|0;Oa=L()|0;Fa=cw(d[Na+1>>0]|0,0,48)|0;Oa=L()|0|Oa;Ha=cw(d[Na+2>>0]|0,0,40)|0;Oa=Oa|(L()|0);Oa=Oa|d[Na+3>>0];Ja=cw(d[Na+4>>0]|0,0,24)|0;Oa=Oa|(L()|0);Ka=cw(d[Na+5>>0]|0,0,16)|0;Oa=Oa|(L()|0);Ma=cw(d[Na+6>>0]|0,0,8)|0;Oa=Oa|(L()|0);Na=Sv(Fa|Ga|Ha|Ja|Ka|Ma|0,Oa|0,d[Na+7>>0]|0,0)|0;Oa=L()|0;c[j>>2]=Na;c[j+4>>2]=Oa;j=0;k=Pa+(k+12)|0;while(1){c[B+(n*48|0)+8+(j<<2)>>2]=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];c[B+(n*48|0)+8+((j|1)<<2)>>2]=d[k+5>>0]<<16|d[k+4>>0]<<24|d[k+6>>0]<<8|d[k+7>>0];j=j+2|0;if(j>>>0>=(d[y>>0]|0)>>>0)break;else k=k+8|0}}c[A+(n<<2)>>2]=n;m=a[o>>0]|0;l=m<<24>>24==0;if(!l){k=m&255;if(!(a[t>>0]|0)){j=0;do{Oa=j<<1;Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]+ +f[B+(n*48|0)+8+(Oa<<2)>>2]+ +f[B+(n*48|0)+8+((Oa|1)<<2)>>2];j=j+1|0}while(j>>>0<k>>>0)}else{j=0;do{Oa=j<<1;Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]+ +(c[B+(n*48|0)+8+(Oa<<2)>>2]|0)+ +(c[B+(n*48|0)+8+((Oa|1)<<2)>>2]|0);j=j+1|0}while(j>>>0<k>>>0)}}n=n+1|0}while((n|0)!=(w|0));q=m&255;if(!l){p=+(w|0)*2.0;j=0;do{Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]/p;j=j+1|0}while(j>>>0<q>>>0);if(m<<24>>24){n=(a[t>>0]|0)==0;l=0;do{o=v+(l<<3)|0;g[o>>3]=0.0;m=0;s=0.0;do{k=m<<1;j=B+(l*48|0)+8+((k|1)<<2)|0;if(n){r=+f[j>>2];p=+f[B+(l*48|0)+8+(k<<2)>>2]}else{r=+(c[j>>2]|0);p=+(c[B+(l*48|0)+8+(k<<2)>>2]|0)}K=r-p-+g[Ea+(m<<3)>>3];s=s+K*K;g[o>>3]=s;m=m+1|0}while((m|0)!=(q|0));l=l+1|0}while((l|0)!=(w|0))}else Ba=210}else Ba=210;if((Ba|0)==210)gw(B+((u>>>1)*112|0)|0,0,(z<<3)+8|0)|0;jt(A,w,v,x);gw((c[E>>2]|0)+2|0,0,(c[La>>2]|0)+-2|0)|0;t=e+20|0;c[t>>2]=1;u=(i|0)==0;l=0;while(1){k=d[Qa>>0]|0;m=((c[La>>2]|0)+-4|0)/(k|0)|0;if((l|0)>=(z+((m|0)/-3|0)|0)){Ba=224;break}o=c[A+(l<<2)>>2]|0;j=B+(o*48|0)|0;n=c[E>>2]|0;q=d[n+2>>0]<<8|d[n+3>>0];if((q|0)<(m|0)){k=n+((G(q,k)|0)+4)|0;Oa=j;Pa=c[Oa>>2]|0;Oa=c[Oa+4>>2]|0;Na=bw(Pa|0,Oa|0,56)|0;L()|0;a[k>>0]=Na;Na=bw(Pa|0,Oa|0,48)|0;L()|0;a[k+1>>0]=Na;Na=bw(Pa|0,Oa|0,40)|0;L()|0;a[k+2>>0]=Na;a[k+3>>0]=Oa;Na=bw(Pa|0,Oa|0,24)|0;L()|0;a[k+4>>0]=Na;Na=bw(Pa|0,Oa|0,16)|0;L()|0;a[k+5>>0]=Na;Oa=bw(Pa|0,Oa|0,8)|0;L()|0;a[k+6>>0]=Oa;a[k+7>>0]=Pa;if(a[y>>0]|0){m=0;k=k+8|0;while(1){Pa=c[B+(o*48|0)+8+(m<<2)>>2]|0;a[k>>0]=Pa>>>24;a[k+1>>0]=Pa>>>16;a[k+2>>0]=Pa>>>8;a[k+3>>0]=Pa;m=m+1|0;if(m>>>0>=(d[y>>0]|0)>>>0)break;else k=k+4|0}}Pa=c[E>>2]|0;Oa=q+1|0;a[Pa+2>>0]=Oa>>>8;a[Pa+3>>0]=Oa;c[t>>2]=1}k=j;j=c[k>>2]|0;k=c[k+4>>2]|0;Pa=h;do if((j|0)==(c[Pa>>2]|0)?(k|0)==(c[Pa+4>>2]|0):0){n=D;m=c[n>>2]|0;n=c[n+4>>2]|0;if(u){j=gt(b,j,k,m,n)|0;break}else{j=ht(b,j,k,m,n)|0;break}}else j=0;while(0);if(!j)l=l+1|0;else break}b:do if((Ba|0)==224){j=et(b,e)|0;if(!((j|0)!=0|l>>>0>z>>>0))while(1){k=B+((c[A+(l<<2)>>2]|0)*48|0)|0;j=at(b,k,i,Ia)|0;if(j|0)break;Qa=c[Ia>>2]|0;j=bt(b,Qa,k,i)|0;Qa=Us(b,Qa)|0;j=(j|0)==0?Qa:j;if((j|0)!=0|l>>>0>=z>>>0)break b;else l=l+1|0}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{b=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}else j=7;while(0);b=j;Ra=Sa;return b|0}Aa=c[E>>2]|0;Aa=d[Aa+2>>0]<<8|d[Aa+3>>0];Ca=Aa+1|0;Na=pb(Ca*52|0,0)|0;Oa=(Na|0)==0;c:do if(!Oa){n=Ca<<2;gw(Na+(Ca*48|0)|0,0,n|0)|0;o=(Aa|0)==0;if(!o){m=b+21|0;k=0;do{Ja=c[E>>2]|0;l=G(k,d[Qa>>0]|0)|0;Ba=Ja+(l+4)|0;wa=cw(d[Ba>>0]|0,0,56)|0;Ha=L()|0;va=cw(d[Ba+1>>0]|0,0,48)|0;Ha=L()|0|Ha;xa=cw(d[Ba+2>>0]|0,0,40)|0;Ha=Ha|(L()|0);Ha=Ha|d[Ba+3>>0];ya=cw(d[Ba+4>>0]|0,0,24)|0;Ha=Ha|(L()|0);za=cw(d[Ba+5>>0]|0,0,16)|0;Ha=Ha|(L()|0);j=cw(d[Ba+6>>0]|0,0,8)|0;Ha=Ha|(L()|0);Ba=Sv(va|wa|xa|ya|za|j|0,Ha|0,d[Ba+7>>0]|0,0)|0;Ha=L()|0;j=Na+(k*48|0)|0;c[j>>2]=Ba;c[j+4>>2]=Ha;j=0;l=Ja+(l+12)|0;while(1){c[Na+(k*48|0)+8+(j<<2)>>2]=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];c[Na+(k*48|0)+8+((j|1)<<2)>>2]=d[l+5>>0]<<16|d[l+4>>0]<<24|d[l+6>>0]<<8|d[l+7>>0];j=j+2|0;if(j>>>0>=(d[m>>0]|0)>>>0)break;else l=l+8|0}k=k+1|0}while((k|0)!=(Aa|0))}gw((c[E>>2]|0)+2|0,0,(c[La>>2]|0)+-2|0)|0;l=e+20|0;c[l>>2]=1;m=Na+(Aa*48|0)|0;H=h;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));Ha=e+8|0;Ja=Ha;if((c[Ja>>2]|0)==1&(c[Ja+4>>2]|0)==0){j=pb((c[La>>2]|0)+32|0,0)|0;if(j|0){gw(j|0,0,(c[La>>2]|0)+32|0)|0;c[j+24>>2]=j+32;c[j+16>>2]=1;Ja=b+60|0;c[Ja>>2]=(c[Ja>>2]|0)+1;c[j>>2]=e;c[j+20>>2]=1;Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}k=pb((c[La>>2]|0)+32|0,0)|0;if(k|0){gw(k|0,0,(c[La>>2]|0)+32|0)|0;c[k+24>>2]=k+32;c[k+16>>2]=1;Ja=b+60|0;c[Ja>>2]=(c[Ja>>2]|0)+1;c[k>>2]=e;c[k+20>>2]=1;Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}Ja=b+28|0;e=(c[Ja>>2]|0)+1|0;c[Ja>>2]=e;c[l>>2]=1;Ja=c[E>>2]|0;a[Ja>>0]=e>>>8;a[Ja+1>>0]=e;Ja=j;e=k}else{j=c[e>>2]|0;k=pb((c[La>>2]|0)+32|0,0)|0;if(k|0?(gw(k|0,0,(c[La>>2]|0)+32|0)|0,c[k+24>>2]=k+32,c[k+16>>2]=1,Ja=b+60|0,c[Ja>>2]=(c[Ja>>2]|0)+1,c[k>>2]=j,c[k+20>>2]=1,j|0):0){Ja=j+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1;Ja=k}if((e|0)!=0&(Ja|0)!=0?(Pa=e+24|0,gw(c[Pa>>2]|0,0,c[La>>2]|0)|0,Ka=Ja+24|0,gw(c[Ka>>2]|0,0,c[La>>2]|0)|0,t=b+20|0,q=G((d[t>>0]|0)+1|0,n+4|0)|0,Da=pb(q,0)|0,(Da|0)!=0):0){m=d[t>>0]|0;m=Da+(m<<2)+((G(Ca,m)|0)<<2)|0;gw(Da|0,0,q|0)|0;j=a[t>>0]|0;if(j<<24>>24){j=j&255;if(o){l=0;do{k=Da+(j<<2)+((G(l,Ca)|0)<<2)|0;c[Da+(l<<2)>>2]=k;c[k>>2]=0;it(b,k,Ca,l,Na,m);l=l+1|0;k=a[t>>0]|0;j=k&255}while(l>>>0<j>>>0);za=j}else{l=0;do{k=Da+(j<<2)+((G(l,Ca)|0)<<2)|0;c[Da+(l<<2)>>2]=k;c[k>>2]=0;j=1;do{c[k+(j<<2)>>2]=j;j=j+1|0}while((j|0)!=(Ca|0));it(b,k,Ca,l,Na,m);l=l+1|0;k=a[t>>0]|0;j=k&255}while(l>>>0<j>>>0);za=j}if(k<<24>>24){z=Aa>>>0>1;A=b+21|0;B=b+22|0;D=Ea+12|0;E=Ea+8|0;M=Ea+44|0;N=Ea+40|0;O=Ea+36|0;P=Ea+32|0;Q=Ea+28|0;R=Ea+24|0;S=Ea+20|0;T=Ea+16|0;U=Ea+12|0;V=Ea+8|0;W=Ea+44|0;X=Ea+40|0;Y=Ea+36|0;Z=Ea+32|0;_=Ea+28|0;$=Ea+24|0;aa=Ea+20|0;ba=Ea+16|0;ca=Ia+12|0;da=Ia+8|0;ea=Ia+44|0;fa=Ia+40|0;ga=Ia+36|0;ha=Ia+32|0;ia=Ia+28|0;ja=Ia+24|0;ka=Ia+20|0;la=Ia+16|0;ma=Ia+12|0;na=Ia+8|0;oa=Ia+44|0;pa=Ia+40|0;qa=Ia+36|0;ra=Ia+32|0;sa=Ia+28|0;ta=Ia+24|0;ua=Ia+20|0;va=Ia+16|0;wa=(((c[La>>2]|0)+-4|0)/(d[Qa>>0]|0)|0|0)/3|0;xa=Ca-wa|0;ya=(wa|0)>(xa|0);j=0;w=0;K=0.0;y=0;while(1){if(ya){l=0;p=0.0}else{x=Da+(y<<2)|0;v=wa;l=0;J=0.0;r=0.0;p=0.0;while(1){m=Ea;H=Na+((c[c[x>>2]>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));m=Ia;H=Na+((c[(c[x>>2]|0)+(Aa<<2)>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));if(z){o=a[B>>0]|0;u=a[A>>0]|0;t=u&255;if(!(o<<24>>24)){n=1;do{o=c[(c[x>>2]|0)+(n<<2)>>2]|0;if((n|0)<(v|0)){m=0;do{I=Ea+8+(m<<2)|0;F=+f[I>>2];C=+f[Na+(o*48|0)+8+(m<<2)>>2];f[I>>2]=F<C?F:C;I=m|1;Ba=Ea+8+(I<<2)|0;C=+f[Ba>>2];F=+f[Na+(o*48|0)+8+(I<<2)>>2];f[Ba>>2]=C>F?C:F;m=m+2|0}while(m>>>0<t>>>0)}else{m=0;do{I=Ia+8+(m<<2)|0;F=+f[I>>2];C=+f[Na+(o*48|0)+8+(m<<2)>>2];f[I>>2]=F<C?F:C;I=m|1;Ba=Ia+8+(I<<2)|0;C=+f[Ba>>2];F=+f[Na+(o*48|0)+8+(I<<2)>>2];f[Ba>>2]=C>F?C:F;m=m+2|0}while(m>>>0<t>>>0)}n=n+1|0}while((n|0)!=(Aa|0));n=t;o=u;Ba=66}else{n=1;do{q=c[(c[x>>2]|0)+(n<<2)>>2]|0;if((n|0)<(v|0)){m=0;do{I=Ea+8+(m<<2)|0;H=c[I>>2]|0;Ba=c[Na+(q*48|0)+8+(m<<2)>>2]|0;c[I>>2]=(H|0)<(Ba|0)?H:Ba;I=m|1;Ba=Ea+8+(I<<2)|0;H=c[Ba>>2]|0;I=c[Na+(q*48|0)+8+(I<<2)>>2]|0;c[Ba>>2]=(H|0)>(I|0)?H:I;m=m+2|0}while(m>>>0<t>>>0)}else{m=0;do{I=Ia+8+(m<<2)|0;H=c[I>>2]|0;Ba=c[Na+(q*48|0)+8+(m<<2)>>2]|0;c[I>>2]=(H|0)<(Ba|0)?H:Ba;I=m|1;Ba=Ia+8+(I<<2)|0;H=c[Ba>>2]|0;I=c[Na+(q*48|0)+8+(I<<2)>>2]|0;c[Ba>>2]=(H|0)>(I|0)?H:I;m=m+2|0}while(m>>>0<t>>>0)}n=n+1|0}while((n|0)!=(Aa|0));m=o;n=t;o=u;Ba=64}}else{o=a[A>>0]|0;m=a[B>>0]|0;n=o&255;Ba=64}do if((Ba|0)==64){Ba=0;q=m<<24>>24==0;if(q){Ba=66;break}m=n;s=0.0;do{I=m;m=m+-2|0;s=s+(+(c[Ea+8+(I+-1<<2)>>2]|0)-+(c[Ea+8+(m<<2)>>2]|0))}while((I|0)>3)}while(0);if((Ba|0)==66){Ba=0;m=n;s=0.0;do{I=m;m=m+-2|0;s=s+(+f[Ea+8+(I+-1<<2)>>2]-+f[Ea+8+(m<<2)>>2])}while((I|0)>3);q=1}s=p+s;if(q){m=n;p=0.0;do{I=m;m=m+-2|0;p=p+(+f[Ia+8+(I+-1<<2)>>2]-+f[Ia+8+(m<<2)>>2])}while((I|0)>3)}else{m=n;p=0.0;do{I=m;m=m+-2|0;p=p+(+(c[Ia+8+(I+-1<<2)>>2]|0)-+(c[Ia+8+(m<<2)>>2]|0))}while((I|0)>3)}p=s+p;d:do if(o<<24>>24)if(q){s=1.0;m=0;do{Ta=+f[Ea+8+(m<<2)>>2];F=+f[Ia+8+(m<<2)>>2];F=Ta>F?Ta:F;I=m|1;Ta=+f[Ea+8+(I<<2)>>2];C=+f[Ia+8+(I<<2)>>2];C=Ta<C?Ta:C;s=s*(C-F);m=m+2|0;if(C<F){s=0.0;break d}}while(m>>>0<n>>>0)}else{s=1.0;m=0;do{H=Ea+8+(m<<2)|0;I=Ia+8+(m<<2)|0;Ta=+(c[((c[H>>2]|0)>(c[I>>2]|0)?H:I)>>2]|0);I=m|1;C=+(c[Ea+8+(I<<2)>>2]|0);F=+(c[Ia+8+(I<<2)>>2]|0);F=C<F?C:F;s=s*(F-Ta);m=m+2|0;if(F<Ta){s=0.0;break d}}while(m>>>0<n>>>0)}else s=1.0;while(0);F=s+0.0;if(q){switch(k<<24>>24){case 5:{s=+f[M>>2]-+f[N>>2];Ba=85;break}case 4:{s=1.0;Ba=85;break}case 3:{s=1.0;Ba=86;break}case 2:{s=1.0;Ba=87;break}default:s=1.0}if((Ba|0)==85){s=s*(+f[O>>2]-+f[P>>2]);Ba=86}if((Ba|0)==86){s=s*(+f[Q>>2]-+f[R>>2]);Ba=87}if((Ba|0)==87){Ba=0;s=s*(+f[S>>2]-+f[T>>2])}s=s*(+f[D>>2]-+f[E>>2]);switch(k<<24>>24){case 5:{C=+f[ea>>2]-+f[fa>>2];Ba=95;break}case 4:{C=1.0;Ba=95;break}case 3:{C=1.0;Ba=96;break}case 2:{C=1.0;Ba=97;break}default:C=1.0}if((Ba|0)==95){C=C*(+f[ga>>2]-+f[ha>>2]);Ba=96}if((Ba|0)==96){C=C*(+f[ia>>2]-+f[ja>>2]);Ba=97}if((Ba|0)==97)C=C*(+f[ka>>2]-+f[la>>2]);C=C*(+f[ca>>2]-+f[da>>2])}else{switch(k<<24>>24){case 5:{I=c[W>>2]|0;Ba=c[X>>2]|0;s=+((Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Ba=90;break}case 4:{s=1.0;Ba=90;break}case 3:{s=1.0;Ba=91;break}case 2:{s=1.0;Ba=92;break}default:s=1.0}if((Ba|0)==90){H=c[Y>>2]|0;I=c[Z>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));Ba=91}if((Ba|0)==91){H=c[_>>2]|0;I=c[$>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));Ba=92}if((Ba|0)==92){Ba=0;H=c[aa>>2]|0;I=c[ba>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0))}H=c[U>>2]|0;I=c[V>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));switch(k<<24>>24){case 5:{I=c[oa>>2]|0;Ba=c[pa>>2]|0;C=+((Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Ba=101;break}case 4:{C=1.0;Ba=101;break}case 3:{C=1.0;Ba=102;break}case 2:{C=1.0;Ba=103;break}default:C=1.0}if((Ba|0)==101){H=c[qa>>2]|0;I=c[ra>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;C=C*(+(I>>>0)+4294967296.0*+(L()|0));Ba=102}if((Ba|0)==102){H=c[sa>>2]|0;I=c[ta>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;C=C*(+(I>>>0)+4294967296.0*+(L()|0));Ba=103}if((Ba|0)==103){I=c[ua>>2]|0;Ba=c[va>>2]|0;Ba=Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;C=C*(+(Ba>>>0)+4294967296.0*+(L()|0))}I=c[ma>>2]|0;Ba=c[na>>2]|0;Ba=Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;C=C*(+(Ba>>>0)+4294967296.0*+(L()|0))}s=s+C;if(!((v|0)==(wa|0)|F<r)?!(F==r&s<J):0)s=J;else{l=v;r=F}if((v|0)<(xa|0)){v=v+1|0;J=s}else break}}m=(y|0)==0|p<K;w=m?l:w;j=m?y:j;y=y+1|0;if((y|0)==(za|0))break;else K=m?p:K}}else{j=0;w=0}}else{j=0;w=0}v=Da+(j<<2)|0;j=c[v>>2]|0;k=c[j>>2]|0;m=Fa;H=Na+(k*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));m=Ga;H=Na+((c[j+(w<<2)>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));x=b+21|0;u=b+22|0;t=0;while(1){q=(t|0)<(w|0);m=q?e:Ja;q=q?Fa:Ga;j=d[Qa>>0]|0;n=m+24|0;l=c[n>>2]|0;o=d[l+2>>0]<<8|d[l+3>>0];if((o|0)<(((c[La>>2]|0)+-4|0)/(j|0)|0|0)){j=l+((G(o,j)|0)+4)|0;Ea=Na+(k*48|0)|0;Ia=c[Ea>>2]|0;Ea=c[Ea+4>>2]|0;Ba=bw(Ia|0,Ea|0,56)|0;L()|0;a[j>>0]=Ba;Ba=bw(Ia|0,Ea|0,48)|0;L()|0;a[j+1>>0]=Ba;Ba=bw(Ia|0,Ea|0,40)|0;L()|0;a[j+2>>0]=Ba;a[j+3>>0]=Ea;Ba=bw(Ia|0,Ea|0,24)|0;L()|0;a[j+4>>0]=Ba;Ba=bw(Ia|0,Ea|0,16)|0;L()|0;a[j+5>>0]=Ba;Ea=bw(Ia|0,Ea|0,8)|0;L()|0;a[j+6>>0]=Ea;a[j+7>>0]=Ia;if(a[x>>0]|0){l=0;j=j+8|0;while(1){Ia=c[Na+(k*48|0)+8+(l<<2)>>2]|0;a[j>>0]=Ia>>>24;a[j+1>>0]=Ia>>>16;a[j+2>>0]=Ia>>>8;a[j+3>>0]=Ia;l=l+1|0;if(l>>>0>=(d[x>>0]|0)>>>0)break;else j=j+4|0}}Ia=c[n>>2]|0;Ea=o+1|0;a[Ia+2>>0]=Ea>>>8;a[Ia+3>>0]=Ea;c[m+20>>2]=1}l=d[x>>0]|0;if(!(a[u>>0]|0)){j=0;do{Ea=q+8+(j<<2)|0;Ta=+f[Ea>>2];K=+f[Na+(k*48|0)+8+(j<<2)>>2];f[Ea>>2]=Ta<K?Ta:K;Ea=j|1;Ia=q+8+(Ea<<2)|0;K=+f[Ia>>2];Ta=+f[Na+(k*48|0)+8+(Ea<<2)>>2];f[Ia>>2]=K>Ta?K:Ta;j=j+2|0}while(j>>>0<l>>>0)}else{j=0;do{Ea=q+8+(j<<2)|0;Ba=c[Ea>>2]|0;Ia=c[Na+(k*48|0)+8+(j<<2)>>2]|0;c[Ea>>2]=(Ba|0)<(Ia|0)?Ba:Ia;Ea=j|1;Ia=q+8+(Ea<<2)|0;Ba=c[Ia>>2]|0;Ea=c[Na+(k*48|0)+8+(Ea<<2)>>2]|0;c[Ia>>2]=(Ba|0)>(Ea|0)?Ba:Ea;j=j+2|0}while(j>>>0<l>>>0)}j=t+1|0;if((j|0)==(Ca|0))break;t=j;k=c[(c[v>>2]|0)+(j<<2)>>2]|0}if(!(c[7324]|0))ab[c[29344>>2]&127](Da);else{La=Wa[c[29352>>2]&127](Da)|0;c[14978]=(c[14978]|0)-La;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Da)}j=Vs(b,Ja)|0;if(!j){u=e+8|0;k=u;j=c[k>>2]|0;k=c[k+4>>2]|0;if((j|0)==0&(k|0)==0){j=Vs(b,e)|0;if(j|0){l=e;k=Ja;break}k=u;j=c[k>>2]|0;k=c[k+4>>2]|0}t=Ja+8|0;Ia=t;q=c[Ia+4>>2]|0;La=Ga;c[La>>2]=c[Ia>>2];c[La+4>>2]=q;La=Fa;c[La>>2]=j;c[La+4>>2]=k;La=Ha;q=c[e>>2]|0;if((c[La>>2]|0)==1&(c[La+4>>2]|0)==0){k=i+1|0;j=bt(b,q,Fa,k)|0;if(!j)j=k;else{l=e;k=Ja;break}}else{e:do if(!q){m=-1;n=d[Qa>>0]|0;l=c[6]|0}else{l=c[q+24>>2]|0;o=d[l+2>>0]<<8|d[l+3>>0];if(!o){l=e;k=Ja;j=267;break c}n=d[Qa>>0]|0;m=0;while(1){La=l+((G(m,n)|0)+4)|0;Aa=cw(d[La>>0]|0,0,56)|0;Ia=L()|0;za=cw(d[La+1>>0]|0,0,48)|0;Ia=L()|0|Ia;Ba=cw(d[La+2>>0]|0,0,40)|0;Ia=Ia|(L()|0);Ia=Ia|d[La+3>>0];Ca=cw(d[La+4>>0]|0,0,24)|0;Ia=Ia|(L()|0);Da=cw(d[La+5>>0]|0,0,16)|0;Ia=Ia|(L()|0);Ea=cw(d[La+6>>0]|0,0,8)|0;Ia=Ia|(L()|0);La=Sv(za|Aa|Ba|Ca|Da|Ea|0,Ia|0,d[La+7>>0]|0,0)|0;if((La|0)==(j|0)&(L()|0)==(k|0))break e;m=m+1|0;if(m>>>0>=o>>>0){l=e;k=Ja;j=267;break c}}}while(0);l=l+((G(m,n)|0)+4)|0;La=bw(j|0,k|0,56)|0;L()|0;a[l>>0]=La;La=bw(j|0,k|0,48)|0;L()|0;a[l+1>>0]=La;La=bw(j|0,k|0,40)|0;L()|0;a[l+2>>0]=La;a[l+3>>0]=k;La=bw(j|0,k|0,24)|0;L()|0;a[l+4>>0]=La;La=bw(j|0,k|0,16)|0;L()|0;a[l+5>>0]=La;La=bw(j|0,k|0,8)|0;L()|0;a[l+6>>0]=La;a[l+7>>0]=j;if(a[x>>0]|0){k=0;j=l+8|0;while(1){La=c[Fa+8+(k<<2)>>2]|0;a[j>>0]=La>>>24;a[j+1>>0]=La>>>16;a[j+2>>0]=La>>>8;a[j+3>>0]=La;k=k+1|0;if(k>>>0>=(d[x>>0]|0)>>>0)break;else j=j+4|0}}c[q+20>>2]=1;j=ft(b,q,Fa)|0;if(j|0){l=e;k=Ja;break}j=i+1|0}j=bt(b,c[Ja>>2]|0,Ga,j)|0;if(!j){k=c[Ka>>2]|0;f:do if(!(d[k+2>>0]<<8|d[k+3>>0]))j=0;else{q=(i|0)==0?80:81;o=Ja+16|0;if(!Ma){m=0;n=0;while(1){k=k+((G(n,d[Qa>>0]|0)|0)+4)|0;Fa=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ea=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ga=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];Ia=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);La=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ea|Fa|Ga|Ia|La|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=t;j=_a[q&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}j=h;j=((k|0)==(c[j>>2]|0)?(l|0)==(c[j+4>>2]|0):0)?1:m;n=n+1|0;k=c[Ka>>2]|0;if(n>>>0>=(d[k+2>>0]<<8|d[k+3>>0])>>>0)break f;else m=j}}m=0;n=0;while(1){k=k+((G(n,d[Qa>>0]|0)|0)+4)|0;Fa=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ea=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ga=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];Ia=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);La=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ea|Fa|Ga|Ia|La|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0;g:do if(j|0){while(1){La=j+8|0;if((c[La>>2]|0)==(k|0)?(c[La+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break g}Us(b,c[j>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+1;c[j>>2]=Ja}while(0);j=t;j=_a[q&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}j=h;j=((k|0)==(c[j>>2]|0)?(l|0)==(c[j+4>>2]|0):0)?1:m;n=n+1|0;k=c[Ka>>2]|0;if(n>>>0>=(d[k+2>>0]<<8|d[k+3>>0])>>>0)break;else m=j}}while(0);La=Ha;h:do if((c[La>>2]|0)==1&(c[La+4>>2]|0)==0){j=c[Pa>>2]|0;if(d[j+2>>0]<<8|d[j+3>>0]|0){o=(i|0)==0?80:81;n=e+16|0;if(!Ma){k=0;while(1){h=j+((G(k,d[Qa>>0]|0)|0)+4)|0;Ia=cw(d[h>>0]|0,0,56)|0;i=L()|0;Ha=cw(d[h+1>>0]|0,0,48)|0;i=L()|0|i;Ka=cw(d[h+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[h+3>>0];La=cw(d[h+4>>0]|0,0,24)|0;i=i|(L()|0);Ma=cw(d[h+5>>0]|0,0,16)|0;i=i|(L()|0);j=cw(d[h+6>>0]|0,0,8)|0;i=i|(L()|0);h=Sv(Ha|Ia|Ka|La|Ma|j|0,i|0,d[h+7>>0]|0,0)|0;i=L()|0;j=u;j=_a[o&127](b,h,i,c[j>>2]|0,c[j+4>>2]|0)|0;k=k+1|0;if(j|0){l=e;k=Ja;break c}j=c[Pa>>2]|0;if(k>>>0>=(d[j+2>>0]<<8|d[j+3>>0])>>>0)break h}}m=0;do{k=j+((G(m,d[Qa>>0]|0)|0)+4)|0;La=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ka=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ma=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];h=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);i=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ka|La|Ma|h|i|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0;i:do if(j|0){while(1){i=j+8|0;if((c[i>>2]|0)==(k|0)?(c[i+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break i}Us(b,c[j>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+1;c[j>>2]=e}while(0);j=u;j=_a[o&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;m=m+1|0;if(j|0){l=e;k=Ja;break c}j=c[Pa>>2]|0}while(m>>>0<(d[j+2>>0]<<8|d[j+3>>0])>>>0)}}else if(!j){m=h;l=c[m>>2]|0;m=c[m+4>>2]|0;k=(i|0)==0?80:81;j:do if(Ma){j=c[b+116+(((l>>>0)%97|0)<<2)>>2]|0;if(!j)break;while(1){i=j+8|0;if((c[i>>2]|0)==(l|0)?(c[i+4>>2]|0)==(m|0):0)break;j=c[j+28>>2]|0;if(!j)break j}Us(b,c[j>>2]|0)|0;i=e+16|0;c[i>>2]=(c[i>>2]|0)+1;c[j>>2]=e}while(0);j=u;j=_a[k&127](b,l,m,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}}while(0);j=Us(b,Ja)|0;if(!j){l=0;k=0;j=Us(b,e)|0}else{l=e;k=0}}else{l=e;k=Ja}}else{l=e;k=Ja}}else{l=e;k=Ja;j=7}}else{l=0;k=0;j=7}while(0);Us(b,k)|0;Us(b,l)|0;do if(!Oa)if(!(c[7324]|0)){ab[c[29344>>2]&127](Na);break}else{b=Wa[c[29352>>2]&127](Na)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Na);break}while(0);b=j;Ra=Sa;return b|0}function ct(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=e+100|0;a:do if(f|0?(j=f+8|0,i=c[j>>2]|0,j=c[j+4>>2]|0,!((i|0)==1&(j|0)==0)):0){m=f;while(1){if(c[m>>2]|0)break a;k=c[n>>2]|0;do if(!(Vc(k,1)|0)){k=c[k+100>>2]|0;l=k+8|0;if(!(b[l>>1]&9216)){c[k>>2]=i;c[k+4>>2]=j;b[l>>1]=4;break}else{Pg(k,i,j);break}}while(0);b:do if((Gc(c[n>>2]|0)|0)==100){j=Oc(c[n>>2]|0,0)|0;k=L()|0;i=f;do{l=i+8|0;if((c[l>>2]|0)==(j|0)?(c[l+4>>2]|0)==(k|0):0){i=0;break b}i=c[i>>2]|0}while((i|0)!=0);i=Xs(e,j,k,0,m)|0}else i=0;while(0);j=c[n>>2]|0;if(j|0){l=c[j>>2]|0;k=j+136|0;o=c[k+4>>2]|0;if((o|0)>0|(o|0)==0&(c[k>>2]|0)>>>0>0)hc(l,j);k=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;o=j+64|0;c[o>>2]=0;c[o+4>>2]=0;if((k|0)==3082|(a[l+81>>0]|0)!=0){j=19;break}j=c[l+68>>2]&k;if(j|0){i=j;j=27;break}}if(i|0){j=27;break}m=c[m>>2]|0;if(!m){i=267;j=27;break}j=m+8|0;i=c[j>>2]|0;j=c[j+4>>2]|0;if((i|0)==1&(j|0)==0)break a}if((j|0)==19){og(l);o=7;return o|0}else if((j|0)==27)return i|0}while(0);i=e+23|0;j=f+24|0;n=c[j>>2]|0;o=d[i>>0]|0;m=n+((G(o,g)|0)+4)|0;fw(m|0,m+o|0,G((d[n+2>>0]<<8|d[n+3>>0])+~g|0,o)|0)|0;o=c[j>>2]|0;n=o+2|0;o=o+3|0;g=(d[n>>0]<<8|d[o>>0])+-1|0;a[n>>0]=g>>>8;a[o>>0]=g;c[f+20>>2]=1;if(!(c[f>>2]|0)){o=0;return o|0}o=c[j>>2]|0;if((d[o+2>>0]<<8|d[o+3>>0]|0)<((((c[e+16>>2]|0)+-4|0)/(d[i>>0]|0)|0|0)/3|0|0)){o=dt(e,f,h)|0;return o|0}else{o=et(e,f)|0;return o|0}return 0}function dt(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;n=c[f>>2]|0;a:do if(!n)h=-1;else{j=f+8|0;m=c[j>>2]|0;j=c[j+4>>2]|0;i=c[n+24>>2]|0;k=d[i+2>>0]<<8|d[i+3>>0];if(k|0){l=d[e+23>>0]|0;h=0;do{o=i+((G(h,l)|0)+4)|0;u=cw(d[o>>0]|0,0,56)|0;p=L()|0;v=cw(d[o+1>>0]|0,0,48)|0;p=L()|0|p;t=cw(d[o+2>>0]|0,0,40)|0;p=p|(L()|0);p=p|d[o+3>>0];s=cw(d[o+4>>0]|0,0,24)|0;p=p|(L()|0);r=cw(d[o+5>>0]|0,0,16)|0;p=p|(L()|0);q=cw(d[o+6>>0]|0,0,8)|0;p=p|(L()|0);o=Sv(v|u|t|s|r|q|0,p|0,d[o+7>>0]|0,0)|0;if((o|0)==(m|0)&(L()|0)==(j|0))break a;h=h+1|0}while(h>>>0<k>>>0)}Us(e,0)|0;v=267;return v|0}while(0);c[f>>2]=0;i=ct(e,n,h,g+1|0)|0;h=Us(e,n)|0;if(i|0){v=i;return v|0}if(h|0){v=h;return v|0}j=e+84|0;h=c[j>>2]|0;m=f+8|0;l=m;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){v=h;c[v>>2]=k;c[v+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;v=h+136|0;u=c[v+4>>2]|0;if((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;v=h+64|0;c[v>>2]=0;c[v+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);v=7;return v|0}else{h=c[i+68>>2]&j;if(!h)break;return h|0}}while(0);j=e+108|0;h=c[j>>2]|0;l=m;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){v=h;c[v>>2]=k;c[v+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;v=h+136|0;u=c[v+4>>2]|0;if((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;v=h+64|0;c[v>>2]=0;c[v+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);v=7;return v|0}else{h=c[i+68>>2]&j;if(!h)break;return h|0}}while(0);v=m;h=c[v>>2]|0;if((h|0)==0&(c[v+4>>2]|0)==0)h=f+28|0;else{h=e+116+(((h>>>0)%97|0)<<2)|0;while(1){i=c[h>>2]|0;if((i|0)==(f|0))break;else h=i+28|0}v=f+28|0;c[h>>2]=c[v>>2];c[v>>2]=0;h=v}v=m;c[v>>2]=g;c[v+4>>2]=((g|0)<0)<<31>>31;v=e+68|0;c[h>>2]=c[v>>2];u=f+16|0;c[u>>2]=(c[u>>2]|0)+1;c[v>>2]=f;v=0;return v|0}function et(b,e){b=b|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0;t=Ra;Ra=Ra+96|0;q=t+48|0;n=t;r=c[e>>2]|0;if(!r){s=0;Ra=t;return s|0}o=c[e+24>>2]|0;l=d[o+2>>0]|0;k=d[o+3>>0]|0;p=a[b+23>>0]|0;m=cw(d[o+4>>0]|0,0,56)|0;j=L()|0;u=cw(d[o+5>>0]|0,0,48)|0;j=L()|0|j;h=cw(d[o+6>>0]|0,0,40)|0;j=j|(L()|0);j=j|d[o+7>>0];g=cw(d[o+8>>0]|0,0,24)|0;j=j|(L()|0);s=cw(d[o+9>>0]|0,0,16)|0;j=j|(L()|0);i=cw(d[o+10>>0]|0,0,8)|0;j=j|(L()|0);j=Sv(u|m|h|g|s|i|0,j|0,d[o+11>>0]|0,0)|0;i=L()|0;s=q;c[s>>2]=j;c[s+4>>2]=i;s=b+21|0;i=a[s>>0]|0;j=i&255;g=0;h=o+12|0;while(1){c[q+8+(g<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[q+8+((g|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];g=g+2|0;if(g>>>0>=j>>>0)break;else h=h+8|0}m=i&255;i=l<<8|k;if(i>>>0>1){j=p&255;k=b+22|0;l=1;do{h=G(l,j)|0;v=o+(h+4)|0;z=cw(d[v>>0]|0,0,56)|0;u=L()|0;A=cw(d[v+1>>0]|0,0,48)|0;u=L()|0|u;y=cw(d[v+2>>0]|0,0,40)|0;u=u|(L()|0);u=u|d[v+3>>0];x=cw(d[v+4>>0]|0,0,24)|0;u=u|(L()|0);w=cw(d[v+5>>0]|0,0,16)|0;u=u|(L()|0);g=cw(d[v+6>>0]|0,0,8)|0;u=u|(L()|0);v=Sv(A|z|y|x|w|g|0,u|0,d[v+7>>0]|0,0)|0;u=L()|0;g=n;c[g>>2]=v;c[g+4>>2]=u;g=0;h=o+(h+12)|0;while(1){c[n+8+(g<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[n+8+((g|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];g=g+2|0;if(g>>>0>=m>>>0)break;else h=h+8|0}if(!(a[k>>0]|0)){g=0;do{z=q+8+(g<<2)|0;B=+f[z>>2];C=+f[n+8+(g<<2)>>2];f[z>>2]=B<C?B:C;z=g|1;A=q+8+(z<<2)|0;C=+f[A>>2];B=+f[n+8+(z<<2)>>2];f[A>>2]=C>B?C:B;g=g+2|0}while(g>>>0<m>>>0)}else{g=0;do{z=q+8+(g<<2)|0;y=c[z>>2]|0;A=c[n+8+(g<<2)>>2]|0;c[z>>2]=(y|0)<(A|0)?y:A;z=g|1;A=q+8+(z<<2)|0;y=c[A>>2]|0;z=c[n+8+(z<<2)>>2]|0;c[A>>2]=(y|0)>(z|0)?y:z;g=g+2|0}while(g>>>0<m>>>0)}l=l+1|0}while((l|0)!=(i|0))}k=e+8|0;j=c[k>>2]|0;k=c[k+4>>2]|0;i=q;c[i>>2]=j;c[i+4>>2]=k;i=c[r+24>>2]|0;l=d[i+2>>0]<<8|d[i+3>>0];a:do if(!l)g=267;else{h=p&255;g=0;while(1){m=i+((G(g,h)|0)+4)|0;v=cw(d[m>>0]|0,0,56)|0;A=L()|0;u=cw(d[m+1>>0]|0,0,48)|0;A=L()|0|A;w=cw(d[m+2>>0]|0,0,40)|0;A=A|(L()|0);A=A|d[m+3>>0];x=cw(d[m+4>>0]|0,0,24)|0;A=A|(L()|0);y=cw(d[m+5>>0]|0,0,16)|0;A=A|(L()|0);z=cw(d[m+6>>0]|0,0,8)|0;A=A|(L()|0);A=Sv(u|v|w|x|y|z|0,A|0,d[m+7>>0]|0,0)|0;if((A|0)==(j|0)&(L()|0)==(k|0))break;g=g+1|0;if(g>>>0>=l>>>0){g=267;break a}}A=bw(j|0,k|0,56)|0;L()|0;a[m>>0]=A;A=bw(j|0,k|0,48)|0;L()|0;a[m+1>>0]=A;A=bw(j|0,k|0,40)|0;L()|0;a[m+2>>0]=A;a[m+3>>0]=k;A=bw(j|0,k|0,24)|0;L()|0;a[m+4>>0]=A;A=bw(j|0,k|0,16)|0;L()|0;a[m+5>>0]=A;A=bw(j|0,k|0,8)|0;L()|0;a[m+6>>0]=A;a[m+7>>0]=j;if(a[s>>0]|0){h=0;g=m+8|0;while(1){A=c[q+8+(h<<2)>>2]|0;a[g>>0]=A>>>24;a[g+1>>0]=A>>>16;a[g+2>>0]=A>>>8;a[g+3>>0]=A;h=h+1|0;if(h>>>0>=(d[s>>0]|0)>>>0)break;else g=g+4|0}}c[r+20>>2]=1;g=et(b,r)|0}while(0);A=g;Ra=t;return A|0}function ft(b,e,g){b=b|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=Ra;Ra=Ra+48|0;z=C;h=c[e>>2]|0;if(!h){B=0;Ra=C;return B|0}y=b+23|0;A=b+21|0;x=b+22|0;w=0;b=e;a:while(1){if(w>>>0>999)break;w=w+1|0;u=b+8|0;t=c[u>>2]|0;u=c[u+4>>2]|0;j=c[h+24>>2]|0;e=d[j+2>>0]<<8|d[j+3>>0];if(!e)break;i=d[y>>0]|0;b=0;while(1){k=G(b,i)|0;v=j+(k+4)|0;n=cw(d[v>>0]|0,0,56)|0;s=L()|0;m=cw(d[v+1>>0]|0,0,48)|0;s=L()|0|s;o=cw(d[v+2>>0]|0,0,40)|0;s=s|(L()|0);s=s|d[v+3>>0];p=cw(d[v+4>>0]|0,0,24)|0;s=s|(L()|0);q=cw(d[v+5>>0]|0,0,16)|0;s=s|(L()|0);r=cw(d[v+6>>0]|0,0,8)|0;s=s|(L()|0);s=Sv(m|n|o|p|q|r|0,s|0,d[v+7>>0]|0,0)|0;if((s|0)==(t|0)&(L()|0)==(u|0))break;b=b+1|0;if(b>>>0>=e>>>0)break a}l=v+1|0;m=v+2|0;n=v+3|0;o=v+4|0;p=v+5|0;q=v+6|0;r=v+7|0;i=z;c[i>>2]=t;c[i+4>>2]=u;i=a[A>>0]|0;s=i&255;e=0;b=j+(k+12)|0;while(1){c[z+8+(e<<2)>>2]=d[b+1>>0]<<16|d[b>>0]<<24|d[b+2>>0]<<8|d[b+3>>0];c[z+8+((e|1)<<2)>>2]=d[b+5>>0]<<16|d[b+4>>0]<<24|d[b+6>>0]<<8|d[b+7>>0];e=e+2|0;if(e>>>0>=s>>>0)break;else b=b+8|0}b:do if(i<<24>>24){j=a[x>>0]|0;c:do if(j<<24>>24==1){b=0;while(1){e=z+8+(b<<2)|0;i=g+8+(b<<2)|0;if((c[i>>2]|0)<(c[e>>2]|0))break c;if((c[i+4>>2]|0)>(c[e+4>>2]|0))break c;b=b+2|0;if(b>>>0>=s>>>0)break b}}else{b=0;while(1){e=z+8+(b<<2)|0;i=g+8+(b<<2)|0;if(+f[i>>2]<+f[e>>2])break c;if(+f[i+4>>2]>+f[e+4>>2])break c;b=b+2|0;if(b>>>0>=s>>>0)break b}}while(0);if(!(j<<24>>24)){b=0;do{j=z+8+(b<<2)|0;D=+f[j>>2];E=+f[g+8+(b<<2)>>2];f[j>>2]=D<E?D:E;j=b|1;k=z+8+(j<<2)|0;E=+f[k>>2];D=+f[g+8+(j<<2)>>2];f[k>>2]=E>D?E:D;b=b+2|0}while(b>>>0<s>>>0)}else{b=0;do{j=z+8+(b<<2)|0;i=c[j>>2]|0;k=c[g+8+(b<<2)>>2]|0;c[j>>2]=(i|0)<(k|0)?i:k;j=b|1;k=z+8+(j<<2)|0;i=c[k>>2]|0;j=c[g+8+(j<<2)>>2]|0;c[k>>2]=(i|0)>(j|0)?i:j;b=b+2|0}while(b>>>0<s>>>0)}s=bw(t|0,u|0,56)|0;L()|0;a[v>>0]=s;s=bw(t|0,u|0,48)|0;L()|0;a[l>>0]=s;s=bw(t|0,u|0,40)|0;L()|0;a[m>>0]=s;a[n>>0]=u;s=bw(t|0,u|0,24)|0;L()|0;a[o>>0]=s;s=bw(t|0,u|0,16)|0;L()|0;a[p>>0]=s;u=bw(t|0,u|0,8)|0;L()|0;a[q>>0]=u;a[r>>0]=t;if(a[A>>0]|0){e=0;b=v+8|0;while(1){v=c[z+8+(e<<2)>>2]|0;a[b>>0]=v>>>24;a[b+1>>0]=v>>>16;a[b+2>>0]=v>>>8;a[b+3>>0]=v;e=e+1|0;if(e>>>0>=(d[A>>0]|0)>>>0)break;else b=b+4|0}}c[h+20>>2]=1}while(0);b=c[h>>2]|0;if(!b){b=0;B=31;break}else{v=h;h=b;b=v}}if((B|0)==31){Ra=C;return b|0}B=267;Ra=C;return B|0}function gt(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+92|0;d=c[j>>2]|0;do if(!(Vc(d,1)|0)){d=c[d+100>>2]|0;i=d+8|0;if(!(b[i>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[i>>1]=4;break}else{Pg(d,e,f);break}}while(0);d=c[j>>2]|0;do if(!(Vc(d,2)|0)){i=c[d+100>>2]|0;d=i+40|0;i=i+48|0;if(!(b[i>>1]&9216)){f=d;c[f>>2]=g;c[f+4>>2]=h;b[i>>1]=4;break}else{Pg(d,g,h);break}}while(0);Gc(c[j>>2]|0)|0;d=c[j>>2]|0;if(!d){h=0;return h|0}i=c[d>>2]|0;h=d+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,d);e=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((e|0)==3082|(a[i+81>>0]|0)!=0){og(i);h=7;return h|0}else{h=c[i+68>>2]&e;return h|0}return 0}function ht(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+104|0;d=c[j>>2]|0;do if(!(Vc(d,1)|0)){d=c[d+100>>2]|0;i=d+8|0;if(!(b[i>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[i>>1]=4;break}else{Pg(d,e,f);break}}while(0);d=c[j>>2]|0;do if(!(Vc(d,2)|0)){i=c[d+100>>2]|0;d=i+40|0;i=i+48|0;if(!(b[i>>1]&9216)){f=d;c[f>>2]=g;c[f+4>>2]=h;b[i>>1]=4;break}else{Pg(d,g,h);break}}while(0);Gc(c[j>>2]|0)|0;d=c[j>>2]|0;if(!d){h=0;return h|0}i=c[d>>2]|0;h=d+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,d);e=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((e|0)==3082|(a[i+81>>0]|0)!=0){og(i);h=7;return h|0}else{h=c[i+68>>2]&e;return h|0}return 0}function it(b,d,e,g,h,i){b=b|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if((e|0)<=1)return;t=e>>>1;r=e-t|0;s=d+(t<<2)|0;it(b,d,t,g,h,i);it(b,s,r,g,h,i);ew(i|0,d|0,t<<2|0)|0;if(!((r|0)>0|(t|0)!=0))return;p=g<<1;q=p|1;o=(a[b+22>>0]|0)==0;e=0;g=0;do{n=c[i+(g<<2)>>2]|0;b=h+(n*48|0)+8+(p<<2)|0;if(o){v=c[s+(e<<2)>>2]|0;j=+f[b>>2];k=+f[h+(v*48|0)+8+(p<<2)>>2];l=+f[h+(n*48|0)+8+(q<<2)>>2];m=+f[h+(v*48|0)+8+(q<<2)>>2];b=v}else{v=c[s+(e<<2)>>2]|0;j=+(c[b>>2]|0);k=+(c[h+(v*48|0)+8+(p<<2)>>2]|0);l=+(c[h+(n*48|0)+8+(q<<2)>>2]|0);m=+(c[h+(v*48|0)+8+(q<<2)>>2]|0);b=v}do if((g|0)==(t|0))u=11;else{if(!((e|0)==(r|0)|j<k)?!(j==k&l<m):0){u=11;break}c[d+(g+e<<2)>>2]=n;g=g+1|0}while(0);if((u|0)==11){u=0;c[d+(g+e<<2)>>2]=b;e=e+1|0}}while((e|0)<(r|0)|(g|0)<(t|0));return}function jt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;if((b|0)<=1)return;m=b>>>1;k=b-m|0;l=a+(m<<2)|0;jt(a,m,d,e);jt(l,k,d,e);ew(e|0,a|0,m<<2|0)|0;if(!((k|0)>0|(m|0)!=0))return;b=0;f=0;do do if((f|0)!=(m|0)){h=c[e+(f<<2)>>2]|0;if((b|0)==(k|0)){c[a+(f+k<<2)>>2]=h;f=f+1|0;b=k;break}i=c[l+(b<<2)>>2]|0;j=a+(f+b<<2)|0;if(+g[d+(h<<3)>>3]<+g[d+(i<<3)>>3]){c[j>>2]=h;f=f+1|0;break}else{c[j>>2]=i;b=b+1|0;break}}else{c[a+(m+b<<2)>>2]=c[l+(b<<2)>>2];f=m;b=b+1|0}while(0);while((b|0)<(k|0)|(f|0)<(m|0));return}function kt(b){b=b|0;var e=0,f=0;f=0;do{switch(a[26496+(f*12|0)+5>>0]|0){case 1:{e=b;break}case 2:{e=-1;break}default:e=0}Ed(b,c[26496+(f*12|0)>>2]|0,a[26496+(f*12|0)+4>>0]|0,d[26496+(f*12|0)+6>>0]|0,e,c[26496+(f*12|0)+8>>2]|0,0,0)|0;f=f+1|0}while((f|0)!=40);Ed(b,58197,1,1,0,0,182,99)|0;Ed(b,58203,1,1,0,0,182,100)|0;Ed(b,58212,1,1,0,0,183,101)|0;Ed(b,58217,1,1,0,0,183,102)|0;Ed(b,58224,1,1,0,0,183,103)|0;Ed(b,58239,1,1,0,0,183,104)|0;return 0}function lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0,k=0;if((b|0)!=1)Y(58254,58262,1395,58332);a=Hc(a,24)|0;if(($c(c[d>>2]|0)|0)==5)return;b=a+16|0;k=b;k=Sv(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;j=L()|0;i=b;c[i>>2]=k;c[i+4>>2]=j;f=+pc(c[d>>2]|0);e=+g[a>>3];h=f-e;d=b;e=e+h/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0));g[a>>3]=e;d=a+8|0;g[d>>3]=+g[d>>3]+h*(f-e);return}function mt(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=Hc(a,0)|0;if(b|0?(e=b+16|0,d=c[e>>2]|0,e=c[e+4>>2]|0,(e|0)>0|(e|0)==0&d>>>0>1):0){f=+g[b+8>>3];e=Sv(d|0,e|0,-1,-1)|0;wc(a,+u(+(f/(+(e>>>0)+4294967296.0*+(L()|0)))));return}wc(a,0.0);return}function nt(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=Hc(a,0)|0;if(b|0?(e=b+16|0,d=c[e>>2]|0,e=c[e+4>>2]|0,(e|0)>0|(e|0)==0&d>>>0>1):0){f=+g[b+8>>3];e=Sv(d|0,e|0,-1,-1)|0;wc(a,f/(+(e>>>0)+4294967296.0*+(L()|0)));return}wc(a,0.0);return}function ot(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0.0;if((b|0)!=1)Y(58254,58262,1418,58323);e=$c(c[d>>2]|0)|0;if((e|0)==5)return;a=Hc(a,64)|0;h=a+56|0;do if(!(c[h>>2]|0)){b=nu(1,12)|0;c[h>>2]=b;if((e|0)==1){c[b>>2]=0;c[b+4>>2]=159;b=a+48|0;c[b>>2]=0;c[b+4>>2]=0;b=a+16|0;a=b;a=Sv(c[a>>2]|0,c[a+4>>2]|0,1,0)|0;e=L()|0;c[b>>2]=a;c[b+4>>2]=e;b=c[d>>2]|0;break}else{f=a+48|0;e=f;c[e>>2]=1;c[e+4>>2]=0;c[b>>2]=0;c[b+4>>2]=160;b=f;f=9;break}}else{b=a+48|0;f=9}while(0);if((f|0)==9){f=b;e=c[f>>2]|0;f=c[f+4>>2]|0;b=a+16|0;i=b;i=Sv(c[i>>2]|0,c[i+4>>2]|0,1,0)|0;a=L()|0;c[b>>2]=i;c[b+4>>2]=a;b=c[d>>2]|0;if(!((e|0)==0&(f|0)==0)){j=+pc(b);d=nu(1,8)|0;g[d>>3]=j;b=c[h>>2]|0;e=c[b+4>>2]|0;a=c[b>>2]|0;a:do if(a){while(1){a=Xa[e&255](c[a+8>>2]|0,d)|0;if(!a)break;b=c[b>>2]|0;b=(a|0)>0?b:b+4|0;a=c[b>>2]|0;if(!a)break a}i=(c[b>>2]|0)+16|0;f=i;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;h=L()|0;c[i>>2]=f;c[i+4>>2]=h;mu(d);return}while(0);i=nu(1,24)|0;c[i+8>>2]=d;h=i+16|0;c[h>>2]=1;c[h+4>>2]=0;c[b>>2]=i;return}}a=rc(b)|0;e=L()|0;d=nu(1,8)|0;b=d;c[b>>2]=a;c[b+4>>2]=e;b=c[h>>2]|0;e=c[b+4>>2]|0;a=c[b>>2]|0;b:do if(a){while(1){a=Xa[e&255](c[a+8>>2]|0,d)|0;if(!a)break;b=c[b>>2]|0;b=(a|0)>0?b:b+4|0;a=c[b>>2]|0;if(!a)break b}i=(c[b>>2]|0)+16|0;f=i;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;h=L()|0;c[i>>2]=f;c[i+4>>2]=h;mu(d);return}while(0);i=nu(1,24)|0;c[i+8>>2]=d;h=i+16|0;c[h>>2]=1;c[h+4>>2]=0;c[b>>2]=i;return}function pt(a){a=a|0;var b=0,d=0,e=0;b=Hc(a,0)|0;if(!b)return;d=b+56|0;e=c[d>>2]|0;if(!e)return;vt(c[e>>2]|0,68,b);wt(c[c[d>>2]>>2]|0);mu(c[d>>2]|0);e=b+40|0;if(!((c[e>>2]|0)==1&(c[e+4>>2]|0)==0))return;e=b+48|0;if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0){e=b;Ac(a,c[e>>2]|0,c[e+4>>2]|0);return}else{wc(a,+g[b+8>>3]);return}}function qt(a){a=a|0;var b=0,d=0;b=Hc(a,0)|0;if(!b)return;d=b+16|0;g[b+24>>3]=(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0))*.5;tt(a);return}function rt(a){a=a|0;var b=0,d=0;b=Hc(a,0)|0;if(!b)return;d=b+16|0;g[b+24>>3]=(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0))*.25;tt(a);return}function st(a){a=a|0;var b=0,d=0.0,e=0;b=Hc(a,0)|0;if(!b)return;e=b+16|0;e=Yv(c[e>>2]|0,c[e+4>>2]|0,3,0)|0;d=(+(e>>>0)+4294967296.0*+(L()|0))*.25;g[b+24>>3]=d;tt(a);return}function tt(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;e=Hc(a,0)|0;if(!e)return;b=e+56|0;d=c[b>>2]|0;if(!d)return;c[e+60>>2]=0;vt(c[d>>2]|0,69,e);wt(c[c[b>>2]>>2]|0);mu(c[b>>2]|0);h=e+48|0;if(!((c[h>>2]|0)==0&(c[h+4>>2]|0)==0)){h=e+40|0;wc(a,+g[e+8>>3]/(+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0)));return}h=e+40|0;f=c[h>>2]|0;h=c[h+4>>2]|0;d=e;b=c[d>>2]|0;d=c[d+4>>2]|0;if((f|0)==1&(h|0)==0){Ac(a,b,d);return}else{wc(a,(+(b>>>0)+4294967296.0*+(d|0))/(+(f>>>0)+4294967296.0*+(h|0)));return}}function ut(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0.0;l=e+60|0;if((c[l>>2]|0)>0)return;m=+g[e+24>>3];h=e+16|0;f=c[h>>2]|0;h=c[h+4>>2]|0;i=e+32|0;k=i;j=c[k>>2]|0;k=c[k+4>>2]|0;b=Sv(j|0,k|0,b|0,d|0)|0;d=L()|0;do if(m<=+(b|0)){k=Tv(f|0,h|0,j|0,k|0)|0;L()|0;if(!(+(f>>>0)+4294967296.0*+(h|0)-m<=+(k|0))){c[l>>2]=1;break}l=e+40|0;j=l;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=L()|0;c[l>>2]=j;c[l+4>>2]=k;l=e+48|0;if((c[l>>2]|0)==0&(c[l+4>>2]|0)==0){j=c[a>>2]|0;k=e;j=Sv(c[k>>2]|0,c[k+4>>2]|0,j|0,((j|0)<0)<<31>>31|0)|0;k=L()|0;l=e;c[l>>2]=j;c[l+4>>2]=k;break}else{l=e+8|0;g[l>>3]=+g[a>>3]+ +g[l>>3];break}}while(0);l=i;c[l>>2]=b;c[l+4>>2]=d;return}function vt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(!a)return;do{e=c[a>>2]|0;if(e|0)vt(e,b,d);e=a+16|0;db[b&127](c[a+8>>2]|0,c[e>>2]|0,c[e+4>>2]|0,d);a=c[a+4>>2]|0}while((a|0)!=0);return}function wt(a){a=a|0;var b=0;if(!a)return;mu(c[a+8>>2]|0);b=c[a>>2]|0;if(b|0)wt(b);b=c[a+4>>2]|0;if(b|0)wt(b);mu(a);return}function xt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0;i=e+48|0;if((c[i>>2]|0)==0&(c[i+4>>2]|0)==0){a=c[a>>2]|0;f=e+32|0;i=f;h=c[i>>2]|0;i=c[i+4>>2]|0;if((h|0)==(b|0)&(i|0)==(d|0)){e=e+40|0;b=e;b=Sv(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;d=L()|0;c[e>>2]=b;c[e+4>>2]=d;return}if(!((i|0)<(d|0)|(i|0)==(d|0)&h>>>0<b>>>0))return;i=e;c[i>>2]=a;c[i+4>>2]=((a|0)<0)<<31>>31;i=f;c[i>>2]=b;c[i+4>>2]=d;e=e+40|0;c[e>>2]=1;c[e+4>>2]=0;return}else{j=+g[a>>3];a=e+32|0;h=a;f=c[h>>2]|0;h=c[h+4>>2]|0;if((f|0)==(b|0)&(h|0)==(d|0)){e=e+40|0;b=e;b=Sv(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;d=L()|0;c[e>>2]=b;c[e+4>>2]=d;return}if(!((h|0)<(d|0)|(h|0)==(d|0)&f>>>0<b>>>0))return;g[e+8>>3]=j;i=a;c[i>>2]=b;c[i+4>>2]=d;e=e+40|0;c[e>>2]=1;c[e+4>>2]=0;return}}function yt(a,b){a=a|0;b=b|0;var d=0,e=0;e=a;a=c[e>>2]|0;e=c[e+4>>2]|0;d=b;b=c[d>>2]|0;d=c[d+4>>2]|0;return ((a|0)==(b|0)&(e|0)==(d|0)?0:(e|0)<(d|0)|(e|0)==(d|0)&a>>>0<b>>>0?-1:1)|0}function zt(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[a>>3];c=+g[b>>3];return (d==c?0:d<c?-1:1)|0}function At(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,378,58977);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+z(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Bt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,379,58968);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+A(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ct(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,380,58959);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+B(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Dt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;if((b|0)!=2)Y(58580,58262,570,58950);if((sc(c[d>>2]|0)|0)!=5?(e=d+4|0,(sc(c[e>>2]|0)|0)!=5):0){f=+pc(c[d>>2]|0);wc(a,+C(+f,+(+pc(c[e>>2]|0))));return}Bc(a);return}function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,394,58940);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Hv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ft(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,402,58930);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Jv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Gt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,410,58920);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Fv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ht(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o+8|0;j=o;if((e|0)!=2)Y(58580,58262,1680,58900);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){h=nc(c[f>>2]|0)|0;i=nc(c[g>>2]|0)|0;e=a[h>>0]|0;a:do if(!(e<<24>>24))n=17;else{f=0;while(1){e=e&255;if(yu(e)|0)break;f=f+1|0;e=a[h+f>>0]|0;if(!(e<<24>>24)){n=17;break a}}e=(zu(e)|0)&255;a[k>>0]=e;e=1;while(1){g=a[h+f>>0]|0;if(!(g<<24>>24)){n=15;break}g=a[27264+(g&127)>>0]|0;if(g<<24>>24){a[k+e>>0]=(g&255)+48;e=e+1|0}if((e|0)<4)f=f+1|0;else break}if((n|0)==15)gw(k+e|0,48,4-e|0)|0;a[k+4>>0]=0}while(0);if((n|0)==17){a[k>>0]=a[58915]|0;a[k+1>>0]=a[58916]|0;a[k+2>>0]=a[58917]|0;a[k+3>>0]=a[58918]|0;a[k+4>>0]=a[58919]|0}e=a[i>>0]|0;b:do if(!(e<<24>>24))n=29;else{f=0;while(1){e=e&255;if(yu(e)|0)break;f=f+1|0;e=a[i+f>>0]|0;if(!(e<<24>>24)){n=29;break b}}e=(zu(e)|0)&255;a[j>>0]=e;e=1;while(1){g=a[i+f>>0]|0;if(!(g<<24>>24)){n=27;break}g=a[27264+(g&127)>>0]|0;if(g<<24>>24){a[j+e>>0]=(g&255)+48;e=e+1|0}if((e|0)<4)f=f+1|0;else break}if((n|0)==27)gw(j+e|0,48,4-e|0)|0;a[j+4>>0]=0}while(0);if((n|0)==29){a[j>>0]=a[58915]|0;a[j+1>>0]=a[58916]|0;a[j+2>>0]=a[58917]|0;a[j+3>>0]=a[58918]|0;a[j+4>>0]=a[58919]|0}g=j;m=0;f=0;h=k;e=a[k>>0]|0;while(1){i=h+1|0;e=e&255;l=a[26976+e>>0]|0;k=l&255;switch(l<<24>>24){case 4:{l=65533;break}case 3:{j=h+2|0;e=(e<<6)+(d[i>>0]|0)|0;n=34;break}case 2:{j=i;n=34;break}case 1:{n=35;break}default:l=e}if((n|0)==34){i=j+1|0;e=(e<<6)+(d[j>>0]|0)|0;n=35}if((n|0)==35){n=0;l=(e<<6)+(d[i>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;l=(l&-2|0)==65534|((l&-2048|0)==55296?1:(l&c[27248+(k<<2)>>2]|0)==0)?65533:l}i=g+1|0;e=d[g>>0]|0;j=a[26976+e>>0]|0;k=j&255;switch(j<<24>>24){case 4:{e=65533;break}case 3:{j=g+2|0;e=(e<<6)+(d[i>>0]|0)|0;n=39;break}case 2:{j=i;n=39;break}case 1:{n=40;break}default:{}}if((n|0)==39){i=j+1|0;e=(e<<6)+(d[j>>0]|0)|0;n=40}if((n|0)==40){n=0;e=(e<<6)+(d[i>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;e=(e&-2|0)==65534|((e&-2048|0)==55296?1:(e&c[27248+(k<<2)>>2]|0)==0)?65533:e}e=(l|0)==(e|0)&1;do{h=h+1|0;i=a[h>>0]|0}while((i&-64)<<24>>24==-128);do g=g+1|0;while((a[g>>0]&-64)<<24>>24==-128);f=f+e|0;e=m+1|0;if((e|0)==4)break;else{m=e;e=i}}zc(b,f);Ra=o;return}Bc(b);Ra=o;return}function It(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,498,58888);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,e*180.0/3.141592653589793);return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Jt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,499,58876);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,e*3.141592653589793/180.0);return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Kt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,420,58868);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+w(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,419,58860);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+x(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Mt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,421,58852);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+y(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,422,58844);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,1.0/+y(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ot(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,446,58835);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Pt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,438,58826);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+jv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Qt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,454,58817);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Rt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,456,58808);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,1.0/+Iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function St(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,474,58800);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+D(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Tt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,472,58792);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+E(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ut(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,473,58782);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Fa(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Vt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0;if((b|0)!=2)Y(58580,58262,546,58772);if((sc(c[d>>2]|0)|0)!=5?(g=d+4|0,(sc(c[g>>2]|0)|0)!=5):0){f=+pc(c[d>>2]|0);e=+pc(c[g>>2]|0);g=uu()|0;c[g>>2]=0;g=uu()|0;if(!(c[g>>2]|0)){wc(a,+v(+f,+e));return}else{d=uu()|0;d=dv(c[d>>2]|0)|0;g=uu()|0;xc(a,d,c[g>>2]|0);return}}Bc(a);return}function Wt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;if((b|0)!=1)Y(58254,58262,590,58763);switch(sc(c[d>>2]|0)|0){case 1:{e=rc(c[d>>2]|0)|0;d=L()|0;b=(d|0)>0|(d|0)==0&e>>>0>0;d=((e|0)!=0|(d|0)!=0)<<31>>31;Ac(a,b?1:d,b?0:((d|0)<0)<<31>>31);return}case 5:{Bc(a);return}default:{f=+pc(c[d>>2]|0);wc(a,f>0.0?1.0:+((f<0.0)<<31>>31));return}}}function Xt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,375,58754);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+u(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Yt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,514,58743);switch(sc(c[d>>2]|0)|0){case 1:{b=rc(c[d>>2]|0)|0;d=L()|0;Ac(a,Yv(b|0,d|0,b|0,d|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+pc(c[d>>2]|0);wc(a,e*e);return}}}function Zt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,620,58734);switch(sc(c[d>>2]|0)|0){case 1:{Ac(a,rc(c[d>>2]|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+F(+(+pc(c[d>>2]|0)));Ac(a,~~e>>>0,+t(e)>=1.0?(e>0.0?~~+H(+s(e/4294967296.0),4294967295.0)>>>0:~~+F((e-+(~~e>>>0))/4294967296.0)>>>0):0);return}}}function _t(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,645,58724);switch(sc(c[d>>2]|0)|0){case 1:{Ac(a,rc(c[d>>2]|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+s(+(+pc(c[d>>2]|0)));Ac(a,~~e>>>0,+t(e)>=1.0?(e>0.0?~~+H(+s(e/4294967296.0),4294967295.0)>>>0:~~+F((e-+(~~e>>>0))/4294967296.0)>>>0):0);return}}}function $t(a,b,c){a=a|0;b=b|0;c=c|0;wc(a,3.141592653589793);return}function au(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if((b|0)!=2)return;if((sc(c[d>>2]|0)|0)==5)return;j=rc(c[d+4>>2]|0)|0;f=L()|0;if((f|0)<0){xc(a,58611,-1);return}g=oc(c[d>>2]|0)|0;h=nb((G(g,j)|0)+1|0)|0;i=nb(g+1|0)|0;b=(h|0)!=0;e=(i|0)!=0;if(b&e){Su(i,nc(c[d>>2]|0)|0)|0;if((f|0)>0|(f|0)==0&j>>>0>0){b=0;e=0;do{Su(h+(G(g,b)|0)|0,i)|0;b=Sv(b|0,e|0,1,0)|0;e=L()|0}while((e|0)<(f|0)|(e|0)==(f|0)&b>>>0<j>>>0)}Cc(a,h,-1,-1);qb(h);qb(i);return}Ec(a);if(b)qb(h);if(!e)return;qb(i);return}function bu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(b|0)==3;if((b|1|0)!=3)Y(58692,58262,1038,58710);if((sc(c[d>>2]|0)|0)!=5?(e=d+4|0,(sc(c[e>>2]|0)|0)!=5):0){f=nc(c[d>>2]|0)|0;if(!f)return;e=nc(c[e>>2]|0)|0;if(g){b=(qc(c[d+8>>2]|0)|0)+-1|0;b=(b|0)>0?b:0}else b=0;zc(a,(ku(f,e,b)|0)+1|0);return}Bc(a);return}function cu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)!=2)Y(58580,58262,1073,58683);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){n=nc(c[f>>2]|0)|0;k=qc(c[g>>2]|0)|0;j=0;i=n;e=a[n>>0]|0;while(1){g=i+1|0;e=e&255;f=a[26976+e>>0]|0;h=f&255;switch(f<<24>>24){case 4:break;case 3:{f=i+2|0;e=(e<<6)+(d[g>>0]|0)|0;q=10;break}case 2:{f=g;q=10;break}case 1:{m=g;l=e;q=11;break}default:{p=e;q=12}}if((q|0)==10){m=f+1|0;l=(e<<6)+(d[f>>0]|0)|0;q=11}if((q|0)==11?(q=0,o=(l<<6)+(d[m>>0]|0)-(c[27232+(h<<2)>>2]|0)|0,!((o&-2|0)==65534|((o&-2048|0)==55296?1:(o&c[27248+(h<<2)>>2]|0)==0))):0){p=o;q=12}if((q|0)==12?(q=0,(p|0)==0):0)break;f=j+1|0;if((j|0)>=(k|0))break;e=i;do{e=e+1|0;g=a[e>>0]|0}while((g&-64)<<24>>24==-128);j=f;i=e;e=g}e=i-n|0;f=nb(e+1|0)|0;if(!f){Ec(b);return}else{nv(f,n,e)|0;a[f+e>>0]=0;Cc(b,f,-1,-1);qb(f);return}}Bc(b);return}function du(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)!=2)Y(58580,58262,1113,58673);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){f=nc(c[f>>2]|0)|0;k=qc(c[g>>2]|0)|0;j=0;q=f;e=a[f>>0]|0;while(1){h=q+1|0;e=e&255;g=a[26976+e>>0]|0;i=g&255;switch(g<<24>>24){case 4:break;case 3:{g=q+2|0;e=(e<<6)+(d[h>>0]|0)|0;p=9;break}case 2:{g=h;p=9;break}case 1:{m=h;l=e;p=10;break}default:{o=e;p=11}}if((p|0)==9){m=g+1|0;l=(e<<6)+(d[g>>0]|0)|0;p=10}if((p|0)==10?(p=0,n=(l<<6)+(d[m>>0]|0)-(c[27232+(i<<2)>>2]|0)|0,!((n&-2|0)==65534|((n&-2048|0)==55296?1:(n&c[27248+(i<<2)>>2]|0)==0))):0){o=n;p=11}if((p|0)==11?(p=0,(o|0)==0):0)break;e=q;do{e=e+1|0;g=a[e>>0]|0}while((g&-64)<<24>>24==-128);j=j+1|0;q=e;e=g}e=j-k|0;if((e|0)>0)while(1){do f=f+1|0;while((a[f>>0]&-64)<<24>>24==-128);if((e|0)>1)e=e+-1|0;else break}e=nb(q+1-f|0)|0;if(!e){Ec(b);return}else{Su(e,f)|0;Cc(b,e,-1,-1);qb(e);return}}Bc(b);return}function eu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((e|0)!=1)Y(58653,58262,1323,58661);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}e=nc(c[f>>2]|0)|0;f=Eu(e)|0;l=nb(f+1|0)|0;if(!l){Ec(b);return}j=l+f|0;a[j>>0]=0;j=j+-1|0;a:while(1){while(1){h=e+1|0;f=d[e>>0]|0;g=a[26976+f>>0]|0;i=g&255;switch(g<<24>>24){case 4:break;case 3:{g=e+2|0;f=(f<<6)+(d[h>>0]|0)|0;p=12;break}case 2:{g=h;p=12;break}case 1:{m=h;k=f;p=13;break}default:{o=f;p=14}}if((p|0)==12){m=g+1|0;k=(f<<6)+(d[g>>0]|0)|0;p=13}if((p|0)==13?(p=0,n=(k<<6)+(d[m>>0]|0)-(c[27232+(i<<2)>>2]|0)|0,!((n&-2|0)==65534|((n&-2048|0)==55296?1:(n&c[27248+(i<<2)>>2]|0)==0))):0){o=n;p=14}if((p|0)==14?(p=0,(o|0)==0):0)break a;f=e;while(1){i=f+1|0;if((a[i>>0]&-64)<<24>>24==-128)f=i;else break}if(f>>>0<e>>>0)e=i;else break}h=1;g=j;while(1){j=g;g=g+-1|0;a[j>>0]=a[f>>0]|0;f=i+~h|0;if(f>>>0<e>>>0)break;else h=h+1|0}j=g;e=i}Cc(b,l,-1,-1);qb(l);return}function fu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((d|0)!=1)Y(58254,58262,724,58642);if((sc(c[e>>2]|0)|0)==5){Bc(b);return}f=nc(c[e>>2]|0)|0;d=nb((Eu(f)|0)+1|0)|0;i=Su(d,f)|0;if(!i){Ec(b);return}e=a[f>>0]|0;if(e<<24>>24){h=1;g=e<<24>>24;while(1){f=f+1|0;if(!(wu(g)|0)){if((h|0)==1)e=zu(g)|0;else e=Du(g)|0;h=0;e=e&255}else h=1;g=d+1|0;a[d>>0]=e;e=a[f>>0]|0;if(!(e<<24>>24)){d=g;break}else{d=g;g=e<<24>>24}}}a[d>>0]=0;Cc(b,i,-1,-1);qb(i);return}function gu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)!=2)Y(58580,58262,771,58633);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}l=nc(c[f>>2]|0)|0;j=rc(c[f+4>>2]|0)|0;k=L()|0;if((k|0)<0){xc(b,58611,-1);return}e=a[l>>0]|0;if((l|0)==(-1|0)|e<<24>>24==0)f=0;else{f=0;g=l;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)))}i=((f|0)<0)<<31>>31;do if((k|0)>(i|0)|(k|0)==(i|0)&j>>>0>f>>>0){e=nb(j+1-f+(Eu(l)|0)|0)|0;if(!e){Ec(b);return}g=1;h=e;do{m=h;h=h+1|0;a[m>>0]=32;g=g+1|0;m=Sv(g|0,0,f|0,i|0)|0;n=L()|0}while(!((n|0)>(k|0)|(n|0)==(k|0)&m>>>0>j>>>0));Su(h,l)|0}else{e=nb((Eu(l)|0)+1|0)|0;f=Su(e,l)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function hu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if((e|0)!=2)Y(58580,58262,825,58624);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}h=nc(c[f>>2]|0)|0;j=rc(c[f+4>>2]|0)|0;k=L()|0;if((k|0)<0){xc(b,58611,-1);return}e=a[h>>0]|0;if((h|0)==(-1|0)|e<<24>>24==0)f=0;else{f=0;g=h;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)))}i=((f|0)<0)<<31>>31;do if((k|0)>(i|0)|(k|0)==(i|0)&j>>>0>f>>>0){g=Eu(h)|0;e=nb(j+1-f+g|0)|0;if(!e){Ec(b);return}Su(e,h)|0;h=1;g=e+g|0;do{l=g;g=g+1|0;a[l>>0]=32;h=h+1|0;l=Sv(h|0,0,f|0,i|0)|0;m=L()|0}while(!((m|0)>(k|0)|(m|0)==(k|0)&l>>>0>j>>>0));a[g>>0]=0}else{e=nb((Eu(h)|0)+1|0)|0;f=Su(e,h)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function iu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((e|0)!=2)Y(58580,58262,880,58602);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}l=nc(c[f>>2]|0)|0;m=rc(c[f+4>>2]|0)|0;n=L()|0;if((n|0)<0){xc(b,58611,-1);return}e=a[l>>0]|0;if((l|0)==(-1|0)|e<<24>>24==0)j=0;else{f=0;g=l;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)));j=f}k=((j|0)<0)<<31>>31;do if((n|0)>(k|0)|(n|0)==(k|0)&m>>>0>j>>>0){i=Eu(l)|0;e=nb(m+1-j+i|0)|0;if(!e){Ec(b);return}h=Sv(j|0,k|0,2,0)|0;g=L()|0;if((g|0)>(n|0)|(g|0)==(n|0)&h>>>0>m>>>0){f=e;h=1}else{h=1;g=e;while(1){f=g+1|0;a[g>>0]=32;h=h+1|0;g=Sv(h<<1|0,0,j|0,k|0)|0;o=L()|0;if((o|0)>(n|0)|(o|0)==(n|0)&g>>>0>m>>>0)break;else g=f}}Su(f,l)|0;f=f+i|0;o=Sv(h|0,0,j|0,k|0)|0;l=L()|0;if(!((l|0)>(n|0)|(l|0)==(n|0)&o>>>0>m>>>0))while(1){g=f+1|0;a[f>>0]=32;h=h+1|0;o=Sv(h|0,0,j|0,k|0)|0;l=L()|0;if((l|0)>(n|0)|(l|0)==(n|0)&o>>>0>m>>>0){f=g;break}else f=g}a[f>>0]=0}else{e=nb((Eu(l)|0)+1|0)|0;f=Su(e,l)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function ju(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((e|0)!=2)Y(58580,58262,939,58588);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){e=nc(c[f>>2]|0)|0;m=nc(c[g>>2]|0)|0;n=nb((Eu(e)|0)+1|0)|0;if(!n){Ec(b);return}l=n;f=e;e=a[e>>0]|0;while(1){g=f+1|0;e=e&255;k=a[26976+e>>0]|0;i=k&255;switch(k<<24>>24){case 4:{e=65533;break}case 3:{h=f+2|0;e=(e<<6)+(d[g>>0]|0)|0;o=12;break}case 2:{h=g;o=12;break}case 1:{o=13;break}default:o=14}if((o|0)==12){g=h+1|0;e=(e<<6)+(d[h>>0]|0)|0;o=13}if((o|0)==13){o=0;e=(e<<6)+(d[g>>0]|0)-(c[27232+(i<<2)>>2]|0)|0;if((e&-2|0)==65534|((e&-2048|0)==55296?1:(e&c[27248+(i<<2)>>2]|0)==0))e=65533;else o=14}if((o|0)==14){o=0;if(!e)break}g=m;h=a[m>>0]|0;while(1){j=g+1|0;i=h&255;h=a[26976+i>>0]|0;k=h&255;switch(h<<24>>24){case 4:{i=65533;break}case 3:{h=g+2|0;i=(i<<6)+(d[j>>0]|0)|0;o=20;break}case 2:{h=j;o=20;break}case 1:{o=21;break}default:{}}if((o|0)==20){j=h+1|0;i=(i<<6)+(d[h>>0]|0)|0;o=21}if((o|0)==21){o=0;i=(i<<6)+(d[j>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;i=(i&-2|0)==65534|((i&-2048|0)==55296?1:(i&c[27248+(k<<2)>>2]|0)==0)?65533:i}h=(i|0)!=0;if((i|0)==(e|0)|h^1)break;do{g=g+1|0;h=a[g>>0]|0}while((h&-64)<<24>>24==-128)}if(h){e=g;do e=e+1|0;while((a[e>>0]&-64)<<24>>24==-128);e=e-g|0;nv(l,g,e)|0;e=l+e|0}else e=l;do{f=f+1|0;g=a[f>>0]|0}while((g&-64)<<24>>24==-128);l=e;e=g}a[l>>0]=0;Cc(b,n,-1,-1);qb(n);return}Bc(b);return}function ku(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=a[b>>0]|0;if(!(t<<24>>24)){w=-1;return w|0}g=e;n=0;l=a[e>>0]|0;while(1){j=g+1|0;e=l&255;i=a[26976+e>>0]|0;k=i&255;switch(i<<24>>24){case 4:break;case 3:{h=g+2|0;e=(e<<6)+(d[j>>0]|0)|0;w=6;break}case 2:{h=j;w=6;break}case 1:{o=j;m=e;w=7;break}default:{q=e;w=8}}if((w|0)==6){o=h+1|0;m=(e<<6)+(d[h>>0]|0)|0;w=7}if((w|0)==7?(w=0,p=(m<<6)+(d[o>>0]|0)-(c[27232+(k<<2)>>2]|0)|0,!((p&-2|0)==65534|((p&-2048|0)==55296?1:(p&c[27248+(k<<2)>>2]|0)==0))):0){q=p;w=8}if((w|0)==8?(w=0,(q|0)==0):0)break;h=n+1|0;if((n|0)>=(f|0))break;do{g=g+1|0;e=a[g>>0]|0}while((e&-64)<<24>>24==-128);n=h;l=e}e=0;while(1){j=g+1|0;h=l&255;k=i&255;switch(i<<24>>24){case 4:break;case 3:{i=g+2|0;h=(h<<6)+(d[j>>0]|0)|0;w=15;break}case 2:{i=j;w=15;break}case 1:{s=j;r=h;w=16;break}default:{v=h;w=17}}if((w|0)==15){s=i+1|0;r=(h<<6)+(d[i>>0]|0)|0;w=16}if((w|0)==16?(w=0,u=(r<<6)+(d[s>>0]|0)-(c[27232+(k<<2)>>2]|0)|0,!((u&-2|0)==65534|((u&-2048|0)==55296?1:(u&c[27248+(k<<2)>>2]|0)==0))):0){v=u;w=17}if((w|0)==17?(w=0,(v|0)==0):0){e=-1;f=0;break}i=g;j=b;n=l;h=t;while(1){k=j+1|0;h=h&255;q=a[26976+h>>0]|0;m=q&255;switch(q<<24>>24){case 4:{o=65533;break}case 3:{l=j+2|0;h=(h<<6)+(d[k>>0]|0)|0;w=22;break}case 2:{l=k;w=22;break}case 1:{w=23;break}default:o=h}if((w|0)==22){k=l+1|0;h=(h<<6)+(d[l>>0]|0)|0;w=23}if((w|0)==23){w=0;o=(h<<6)+(d[k>>0]|0)-(c[27232+(m<<2)>>2]|0)|0;o=(o&-2|0)==65534|((o&-2048|0)==55296?1:(o&c[27248+(m<<2)>>2]|0)==0)?65533:o}k=i+1|0;h=n&255;q=a[26976+h>>0]|0;m=q&255;switch(q<<24>>24){case 4:{l=65533;break}case 3:{l=i+2|0;h=(h<<6)+(d[k>>0]|0)|0;w=27;break}case 2:{l=k;w=27;break}case 1:{w=28;break}default:l=h}if((w|0)==27){k=l+1|0;h=(h<<6)+(d[l>>0]|0)|0;w=28}if((w|0)==28){w=0;l=(h<<6)+(d[k>>0]|0)-(c[27232+(m<<2)>>2]|0)|0;l=(l&-2|0)==65534|((l&-2048|0)==55296?1:(l&c[27248+(m<<2)>>2]|0)==0)?65533:l}do{j=j+1|0;h=a[j>>0]|0}while((h&-64)<<24>>24==-128);do{i=i+1|0;k=a[i>>0]|0}while((k&-64)<<24>>24==-128);if((l|0)!=0&((o|0)!=0&(o|0)==(l|0)))n=k;else break}if(!o)break;do{g=g+1|0;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);e=e+1|0;l=h;i=a[26976+(h&255)>>0]|0}w=f+e|0;return w|0}\nfunction Mh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Ya=0,Za=0,_a=0,$a=0,bb=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;nb=Ra;Ra=Ra+560|0;lb=nb+416|0;kb=nb+400|0;jb=nb+384|0;ib=nb+368|0;hb=nb+352|0;fb=nb+336|0;eb=nb+320|0;bb=nb+304|0;$a=nb+288|0;mb=nb+272|0;gb=nb+256|0;_a=nb+240|0;da=nb+216|0;la=nb+524|0;va=nb+512|0;La=nb+192|0;Sa=nb+504|0;Ua=nb+160|0;Va=nb+96|0;Ya=nb+64|0;Za=nb+496|0;ea=nb+551|0;fa=nb+32|0;ga=nb;ha=nb+528|0;ia=nb+432|0;ja=nb+538|0;ka=f+20|0;ma=(c[(c[ka>>2]|0)+36>>2]<<1>>>0)/3|0;na=f+68|0;oa=f+116|0;pa=f+124|0;qa=f+70|0;ra=f+72|0;sa=f+120|0;ta=f+3|0;ua=ia+8|0;wa=ja+4|0;ya=Va+4|0;Ca=Va+8|0;Ea=Va+12|0;Fa=Va+16|0;Ga=Va+40|0;Ha=ia+12|0;Ia=ia+4|0;Ja=da+16|0;Ka=da+12|0;Ma=da+18|0;Na=ja;Oa=da+16|0;Pa=da+12|0;Qa=da+18|0;i=0;j=a[na>>0]|0;ca=c[oa>>2]|0;do{g=j<<24>>24;u=ca+20|0;if((c[u>>2]|0)<0?Jh(ca)|0:0){h=0;break}ba=ca+12|0;h=(a[ba>>0]|0)==0;if(!(j<<24>>24)){if(h){h=0;break}c[la>>2]=0;c[va>>2]=0;v=ca+52|0;l=c[v>>2]|0;g=c[ca+72>>2]|0;j=c[g+20>>2]|0;do if((b[g+28>>1]&4)!=0?(c[j+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[j+96>>2]|0)){c[da>>2]=0;aa=17;break}else{h=Ve(g)|0;aa=16;break}else aa=11;while(0);do if((aa|0)==11){h=c[j+40>>2]|0;if(h|0){c[da>>2]=h;aa=26;break}if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(g)|0;aa=16;break}else{h=Xf(g)|0;aa=16;break}}while(0);if((aa|0)==16){c[da>>2]=h;if(!h)aa=17;else aa=26}do if((aa|0)==17){aa=0;j=ca+4|0;h=fg(l,la,va,c[j>>2]|0,0)|0;c[da>>2]=h;k=c[la>>2]|0;w=k;do if(!h){g=c[v>>2]|0;$=c[ca+56>>2]|0;Z=c[k+56>>2]|0;h=d[ca+9>>0]|0;_=(c[k+4>>2]|0)==1?100:0;Y=$+(h+5)|0;Y=d[Y>>0]<<8|d[Y+1>>0];ew(Z+Y|0,$+Y|0,(c[g+36>>2]|0)-Y|0)|0;ew(Z+_|0,$+h|0,(e[ca+24>>1]<<1)+(e[ca+18>>1]|0)|0)|0;a[k>>0]=0;h=Gf(k)|0;if(!h){h=Jh(k)|0;if(!h){if(!(a[g+17>>0]|0)){h=0;break}h=hg(k)|0;c[da>>2]=h;break}}c[da>>2]=h}while(0);if(a[l+17>>0]|0){ig(l,c[va>>2]|0,5,c[j>>2]|0,da);h=c[da>>2]|0}if(h|0){c[pa>>2]=0;if(!k)break;g=c[k+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{ba=c[g+20>>2]|0;aa=ba+120|0;c[aa>>2]=(c[aa>>2]|0)+-1;ba=ba+136|0;c[g+16>>2]=c[ba>>2];c[ba>>2]=g;break}}ew(k+28|0,ca+28|0,d[ba>>0]<<1|0)|0;ew(k+36|0,ca+36|0,d[ba>>0]<<2|0)|0;a[k+12>>0]=a[ba>>0]|0;m=a[c[k+56>>2]>>0]&-9;q=ca+56|0;r=c[q>>2]|0;s=c[v>>2]|0;t=ca+9|0;h=d[t>>0]|0;if(!(b[s+22>>1]&12)){g=r+h|0;p=s+36|0}else{p=s+36|0;g=r+h|0;gw(g|0,0,(c[p>>2]|0)-h|0)|0}a[g>>0]=m;n=h+12|0;o=n&65535;g=r+(h+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[r+(h+7)>>0]=0;g=r+(h+5)|0;a[g>>0]=(c[p>>2]|0)>>>8;a[g+1>>0]=c[p>>2];c[u>>2]=(c[p>>2]|0)-n&65535;g=(m&255)>>>3;j=g&255;a[ca+8>>0]=j;g=4-(g<<2)&255;h=ca+10|0;a[h>>0]=g;k=ca+76|0;c[k>>2]=120;l=c[v>>2]|0;switch(m<<24>>24){case 5:{a[ca+2>>0]=1;h=ca+3|0;if(!(j<<24>>24)){a[h>>0]=0;c[k>>2]=121;h=181}else{a[h>>0]=1;h=180}c[ca+80>>2]=h;b[ca+14>>1]=b[l+28>>1]|0;h=l+30|0;aa=41;break}case 2:{a[ca+2>>0]=0;a[ca+3>>0]=0;c[ca+80>>2]=179;b[ca+14>>1]=b[l+24>>1]|0;h=l+26|0;aa=41;break}default:{c[_a>>2]=32306;c[_a+4>>2]=65035;c[_a+8>>2]=31517;Db(11,32001,_a);g=a[h>>0]|0}}if((aa|0)==41){b[ca+16>>1]=b[h>>1]|0;a[ca+11>>0]=a[l+21>>0]|0}b[ca+18>>1]=o;c[ca+60>>2]=r+(c[p>>2]|0);c[ca+64>>2]=r+n;c[ca+68>>2]=r+(g&255);a[ba>>0]=0;b[ca+26>>1]=(c[s+32>>2]|0)+65535;b[ca+24>>1]=0;a[ca>>0]=1;h=(c[q>>2]|0)+((d[t>>0]|0)+8)|0;ba=c[va>>2]|0;a[h>>0]=ba>>>24;a[h+1>>0]=ba>>>16;a[h+2>>0]=ba>>>8;a[h+3>>0]=ba;c[pa>>2]=w;h=0}else if((aa|0)==26)c[pa>>2]=0;while(0);if(h|0)break;a[na>>0]=1;b[qa>>1]=0;b[ra>>1]=0;c[sa>>2]=ca;h=0;j=1;g=pa}else{if(h?(c[u>>2]|0)<=(ma|0):0){h=0;break}m=g+-1|0;$=c[f+120+(m<<2)>>2]|0;m=b[f+72+(m<<1)>>1]|0;n=m&65535;g=c[$+72>>2]|0;k=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0))aa=56;else{h=Ve(g)|0;aa=55}else aa=51;do if((aa|0)==51){h=c[k+40>>2]|0;if(!h)if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){h=Wf(g)|0;aa=55;break}else{h=Xf(g)|0;aa=55;break}else aa=523}while(0);if((aa|0)==55)if(!h)aa=56;else aa=523;do if((aa|0)==56){aa=0;if((c[$+20>>2]|0)<0?(xa=Jh($)|0,xa|0):0){h=xa;aa=523;break}if(((((a[ca+3>>0]|0)!=0?(a[ba>>0]|0)==1:0)?(za=b[ca+28>>1]|0,Aa=ca+24|0,za<<16>>16==(b[Aa>>1]|0)):0)?(Ba=$+4|0,(c[Ba>>2]|0)!=1):0)?(Da=$+24|0,(b[Da>>1]|0)==m<<16>>16):0){q=c[ca+52>>2]|0;do if(za<<16>>16){h=fg(q,la,La,0,0)|0;c[va>>2]=h;if(!h){r=c[ca+36>>2]|0;c[Sa>>2]=r;r=Xa[c[ca+76>>2]&255](ca,r)|0;b[Ua>>1]=r;r=c[la>>2]|0;m=c[r+56>>2]|0;s=r+52|0;n=c[s>>2]|0;h=d[r+9>>0]|0;if(!(b[n+22>>1]&12)){g=m+h|0;l=n+36|0}else{l=n+36|0;g=m+h|0;gw(g|0,0,(c[l>>2]|0)-h|0)|0}a[g>>0]=13;_=h+8|0;g=m+(h+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[m+(h+7)>>0]=0;g=m+(h+5)|0;a[g>>0]=(c[l>>2]|0)>>>8;a[g+1>>0]=c[l>>2];g=r+20|0;c[g>>2]=(c[l>>2]|0)-_&65535;a[r+8>>0]=1;a[r+10>>0]=0;c[r+76>>2]=120;k=c[s>>2]|0;a[r+2>>0]=1;a[r+3>>0]=1;o=r+80|0;c[o>>2]=180;b[r+14>>1]=b[k+28>>1]|0;j=r+16|0;b[j>>1]=b[k+30>>1]|0;a[r+11>>0]=a[k+21>>0]|0;k=r+18|0;b[k>>1]=_;p=r+60|0;c[p>>2]=m+(c[l>>2]|0);c[r+64>>2]=m+_;c[r+68>>2]=m;a[r+12>>0]=0;b[r+26>>1]=(c[n+32>>2]|0)+65535;b[r+24>>1]=0;a[r>>0]=1;c[Va>>2]=1;c[ya>>2]=ca;c[Ca>>2]=Sa;c[Ea>>2]=Ua;c[Fa>>2]=c[ca+60>>2];c[Ga>>2]=2;h=Rh(Va,0,1,r)|0;c[va>>2]=h;if(h|0){g=c[r+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{$=c[g+20>>2]|0;_=$+120|0;c[_>>2]=(c[_>>2]|0)+-1;$=$+136|0;c[g+16>>2]=c[$>>2];c[$>>2]=g}break}c[g>>2]=(c[q+36>>2]|0)+-2-(e[k>>1]|0)-(e[Ua>>1]|0);do if(a[q+17>>0]|0){ig(q,c[La>>2]|0,5,c[Ba>>2]|0,va);if((e[Ua>>1]|0)<=(e[j>>1]|0))break;j=c[Sa>>2]|0;a:do if(!(c[va>>2]|0)){cb[c[o>>2]&255](r,j,da);h=e[Ja>>1]|0;if((c[Ka>>2]|0)>>>0<=h>>>0)break;g=c[p>>2]|0;do if(g>>>0>=j>>>0){if(g>>>0>=(j+h|0)>>>0)break;c[mb>>2]=32306;c[mb+4>>2]=64569;c[mb+8>>2]=31517;Db(11,32001,mb);c[va>>2]=11;break a}while(0);_=j+((e[Ma>>1]|0)+-4)|0;ig(c[s>>2]|0,d[_+1>>0]<<16|d[_>>0]<<24|d[_+2>>0]<<8|d[_+3>>0],3,c[r+4>>2]|0,va)}while(0)}while(0);k=(c[ca+64>>2]|0)+((e[Aa>>1]<<1)+-2)|0;k=(c[ca+56>>2]|0)+((d[k>>0]<<8|d[k+1>>0])&e[ca+26>>1])|0;c[Sa>>2]=k;g=0;while(1){j=g+1|0;c[Sa>>2]=k+j;if(j>>>0<9&(a[k+g>>0]|0)<0)g=j;else break}l=k+g+10|0;h=wa;g=k+j|0;do{c[Sa>>2]=g+1;_=a[g>>0]|0;Z=h;h=h+1|0;a[Z>>0]=_;g=c[Sa>>2]|0}while(_<<24>>24<0&g>>>0<l>>>0);if(!(c[va>>2]|0))Lh($,e[Da>>1]|0,ja,h-Na|0,0,c[ca+4>>2]|0,va);g=(c[$+56>>2]|0)+((d[$+9>>0]|0)+8)|0;$=c[La>>2]|0;a[g>>0]=$>>>24;a[g+1>>0]=$>>>16;a[g+2>>0]=$>>>8;a[g+3>>0]=$;g=c[la>>2]|0;do if(g|0){g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{$=c[g+20>>2]|0;_=$+120|0;c[_>>2]=(c[_>>2]|0)+-1;$=$+136|0;c[g+16>>2]=c[$>>2];c[$>>2]=g;break}}while(0);h=c[va>>2]|0}}else{c[gb>>2]=32306;c[gb+4>>2]=70410;c[gb+8>>2]=31517;Db(11,32001,gb);h=11}while(0)}else aa=95;b:do if((aa|0)==95){aa=0;l=c[(c[ka>>2]|0)+32>>2]|0;if((c[14813]|0)>=(l|0)?(Ta=c[14819]|0,(Ta|0)!=0):0){c[14819]=c[Ta>>2];_=c[14820]|0;c[14820]=_+-1;c[14821]=(_|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<l>>>0)c[14986]=l;g=(c[14979]|0)+1|0;c[14979]=g;if(g>>>0>(c[14983]|0)>>>0){c[14983]=g;_=Ta}else _=Ta}else aa=101;do if((aa|0)==101){aa=0;_=Sv(l|0,((l|0)<0)<<31>>31|0,-1,-1)|0;Z=L()|0;if(!(Z>>>0>0|(Z|0)==0&_>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](l)|0;if(!g){_=0;break}}else{g=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;k=59064;h=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&h>>>0>0){_=c[14978]|0;Z=Tv(h|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;Y=L()|0;c[14768]=((Y|0)<0|(Y|0)==0&Z>>>0<=_>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){_=0;break}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}h=Wa[c[29352>>2]&127](g)|0;if((c[14986]|0)>>>0<l>>>0)c[14986]=l;h=(c[14980]|0)+h|0;c[14980]=h;if(h>>>0>(c[14984]|0)>>>0){c[14984]=h;_=g}else _=g}else _=0}while(0);W=j<<24>>24==1;I=a[ta>>0]&1;j=I&255;c[la>>2]=0;a[ea>>0]=0;a[ea+1>>0]=0;a[ea+2>>0]=0;a[ea+3>>0]=0;a[ea+4>>0]=0;c[ia>>2]=0;c[ua>>2]=0;Y=c[$+52>>2]|0;if(!_)h=7;else{x=$+12|0;k=d[x>>0]|0;X=$+24|0;l=e[X>>1]|0;g=l+k|0;if(g>>>0<2)h=0;else{do if(m<<16>>16)if((g|0)==(n|0)){h=(j|-2)+n|0;break}else{h=n+-1|0;break}else h=0;while(0);g=2-j|0}Z=g+1|0;j=h-k+g|0;V=$+56|0;if((j|0)==(l|0))j=(d[$+9>>0]|0)+8|0;else{j=(c[$+64>>2]|0)+(j<<1)|0;j=(d[j>>0]<<8|d[j+1>>0])&e[$+26>>1]}K=(c[V>>2]|0)+j|0;M=K+1|0;N=K+2|0;O=K+3|0;k=d[M>>0]<<16|d[K>>0]<<24|d[N>>0]<<8|d[O>>0];c[Za>>2]=k;j=va+(g<<2)|0;U=yh(Y,k,j,0,0)|0;c[la>>2]=U;c:do if(!U){s=$+26|0;t=$+64|0;S=$+76|0;u=Y+22|0;v=$+28|0;D=Y+36|0;w=$+36|0;r=g;while(1){j=c[j>>2]|0;if((c[j+20>>2]|0)<0?(U=Jh(j)|0,c[la>>2]=U,U|0):0){aa=133;break}q=r+-1|0;if(!r){aa=144;break}j=a[x>>0]|0;p=q+h|0;do if(!(j<<24>>24))aa=138;else{if((p|0)!=(e[v>>1]|0)){aa=138;break}U=c[w>>2]|0;c[Sa+(q<<2)>>2]=U;k=d[U+1>>0]<<16|d[U>>0]<<24|d[U+2>>0]<<8|d[U+3>>0];U=(Xa[c[S>>2]&255]($,U)|0)&65535;c[Ya+(q<<2)>>2]=U;a[x>>0]=0}while(0);if((aa|0)==138){aa=0;j=(c[t>>2]|0)+(p-(j&255)<<1)|0;j=(c[V>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[s>>1])|0;l=Sa+(q<<2)|0;c[l>>2]=j;k=d[j+1>>0]<<16|d[j>>0]<<24|d[j+2>>0]<<8|d[j+3>>0];m=(Xa[c[S>>2]&255]($,j)|0)&65535;c[Ya+(q<<2)>>2]=m;n=j;if(b[u>>1]&12){o=n-(c[V>>2]|0)|0;if((o+m|0)>(c[D>>2]|0)){aa=141;break}ew(_+o|0,j|0,m|0)|0;c[l>>2]=_+(n-(c[V>>2]|0))}Kh($,p-(d[x>>0]|0)|0,m,la)}j=va+(q<<2)|0;U=yh(Y,k,j,0,0)|0;c[la>>2]=U;if(U|0){aa=129;break}else r=q}if((aa|0)==129){c[Za>>2]=k;g=q;aa=130;break}else if((aa|0)==133){aa=0;c[Za>>2]=k;gw(va|0,0,r<<2|0)|0;g=0;break}else if((aa|0)==141){aa=0;c[Za>>2]=k;c[$a>>2]=32306;c[$a+4>>2]=70767;c[$a+8>>2]=31517;Db(11,32001,$a);c[la>>2]=11;gw(va|0,0,r<<2|0)|0;g=0;break}else if((aa|0)==144){aa=0;c[Za>>2]=k;j=c[Y+32>>2]|0;m=(G((((j+-8|0)>>>0)/6|0)+4|0,Z)|0)+3&-4;j=(m*6|0)+j|0;U=Sv(j|0,((j|0)<0)<<31>>31|0,-1,-1)|0;T=L()|0;do if(T>>>0>0|(T|0)==0&U>>>0>2147483390)aa=155;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](j)|0;c[ua>>2]=j;if(!j)break}else{l=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){U=c[14978]|0;T=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;R=L()|0;c[14768]=((R|0)<0|(R|0)==0&T>>>0<=U>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){aa=155;break}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;c[ua>>2]=j}r=j+(m<<2)|0;c[Ha>>2]=r;A=r+(m<<1)|0;p=c[va>>2]|0;c[Ia>>2]=p;R=d[p+8>>0]<<2;U=R&65535;C=a[p+3>>0]|0;E=C&255;F=p+56|0;B=C<<24>>24!=0;w=c[F>>2]|0;u=p+18|0;m=e[u>>1]|0;j=0;z=0;y=p;l=w+m|0;x=F;while(1){t=y+24|0;v=b[y+26>>1]|0;k=c[ia>>2]|0;s=y+12|0;gw(r+(k<<1)|0,0,(d[s>>0]|0)+(e[t>>1]|0)<<1|0)|0;s=a[s>>0]|0;if(s<<24>>24){T=b[y+28>>1]|0;r=T&65535;if(T<<16>>16){q=v&65535;o=(r<<1)+m|0;n=0;m=k;while(1){c[(c[ua>>2]|0)+(m<<2)>>2]=w+((d[l>>0]<<8|d[l+1>>0])&q);m=m+1|0;c[ia>>2]=m;n=n+1|0;if((n|0)==(r|0))break;else l=l+2|0}l=w+o|0;k=k+r|0}n=s&255;m=0;o=k;while(1){c[(c[ua>>2]|0)+(o<<2)>>2]=c[y+36+(m<<2)>>2];m=m+1|0;if((m|0)==(n|0))break;else o=o+1|0}k=k+n|0;c[ia>>2]=k}n=e[u>>1]|0;m=e[t>>1]<<1;q=w+n+m|0;if(l>>>0<q>>>0){o=v&65535;n=(w+-1+(m+n-l)|0)>>>1;m=k;do{c[(c[ua>>2]|0)+(m<<2)>>2]=w+((d[l>>0]<<8|d[l+1>>0])&o);l=l+2|0;m=m+1|0;c[ia>>2]=m}while(l>>>0<q>>>0);k=k+1+n|0}c[Va+(z<<2)>>2]=k;if(!(B|(z|0)>=(g|0))){l=c[Ya+(z<<2)>>2]|0;b[(c[Ha>>2]|0)+(k<<1)>>1]=l;T=A+j|0;l=l&65535;j=l+j|0;ew(T|0,c[Sa+(z<<2)>>2]|0,l|0)|0;c[(c[ua>>2]|0)+(k<<2)>>2]=T+R;T=(c[Ha>>2]|0)+(k<<1)|0;l=(e[T>>1]|0)-R&65535;b[T>>1]=l;do if(!(a[y+8>>0]|0)){k=c[(c[ua>>2]|0)+(k<<2)>>2]|0;T=(c[x>>2]|0)+8|0;T=d[T>>0]|d[T+1>>0]<<8|d[T+2>>0]<<16|d[T+3>>0]<<24;a[k>>0]=T;a[k+1>>0]=T>>8;a[k+2>>0]=T>>16;a[k+3>>0]=T>>24;k=c[ia>>2]|0}else{if((l&65535)>=4)break;while(1){l=j+1|0;a[A+j>>0]=0;k=c[ia>>2]|0;Q=(c[Ha>>2]|0)+(k<<1)|0;T=(b[Q>>1]|0)+1<<16>>16;b[Q>>1]=T;if((T&65535)<4)j=l;else{j=l;break}}}while(0);c[ia>>2]=k+1}l=z+1|0;if((z|0)>=(g|0))break;k=c[va+(l<<2)>>2]|0;q=k+56|0;n=c[q>>2]|0;o=k+18|0;m=e[o>>1]|0;if((a[n>>0]|0)!=(a[c[F>>2]>>0]|0)){aa=179;break}z=l;y=k;l=n+m|0;r=c[Ha>>2]|0;w=n;u=o;x=q}if((aa|0)==179){aa=0;c[bb>>2]=32306;c[bb+4>>2]=70833;c[bb+8>>2]=31517;Db(11,32001,bb);c[la>>2]=11;g=0;break c}T=R+-12+(c[D>>2]|0)|0;J=C<<24>>24==0;s=$+60|0;d:do if(J){k=0;r=0;while(1){c[ia+16+(k<<2)>>2]=c[p+60>>2];q=c[Va+(r<<2)>>2]|0;c[ia+40+(k<<2)>>2]=q;j=k+-1|0;if(!k)o=0;else o=(q|0)==(c[ia+40+(j<<2)>>2]|0)?j:k;j=o+1|0;c[ia+16+(j<<2)>>2]=c[s>>2];c[ia+40+(j<<2)>>2]=q+1;j=T-(c[p+20>>2]|0)|0;l=Ya+(r<<2)|0;c[l>>2]=j;m=p+12|0;if(a[m>>0]|0){n=p+76|0;k=0;do{j=j+2+((Xa[c[n>>2]&255](p,c[p+36+(k<<2)>>2]|0)|0)&65535)|0;c[l>>2]=j;k=k+1|0}while(k>>>0<(d[m>>0]|0)>>>0)}c[Ua+(r<<2)>>2]=q;j=r+1|0;if((j|0)==(Z|0))break d;k=o+2|0;r=j;p=c[va+(j<<2)>>2]|0}}else{k=0;r=0;while(1){c[ia+16+(k<<2)>>2]=c[p+60>>2];q=c[Va+(r<<2)>>2]|0;c[ia+40+(k<<2)>>2]=q;j=k+-1|0;if(!k)o=0;else o=(q|0)==(c[ia+40+(j<<2)>>2]|0)?j:k;j=T-(c[p+20>>2]|0)|0;l=Ya+(r<<2)|0;c[l>>2]=j;m=p+12|0;if(a[m>>0]|0){n=p+76|0;k=0;do{j=j+2+((Xa[c[n>>2]&255](p,c[p+36+(k<<2)>>2]|0)|0)&65535)|0;c[l>>2]=j;k=k+1|0}while(k>>>0<(d[m>>0]|0)>>>0)}c[Ua+(r<<2)>>2]=q;j=r+1|0;if((j|0)==(Z|0))break d;k=o+1|0;r=j;p=c[va+(j<<2)>>2]|0}}while(0);e:do if((g|0)>-1){o=Z;j=0;f:while(1){u=Ya+(j<<2)|0;l=c[u>>2]|0;g:do if((l|0)>(T|0)){p=j+1|0;t=Ua+(j<<2)|0;q=j+2|0;s=Ya+(p<<2)|0;r=Ua+(p<<2)|0;if(q>>>0>5){if((p|0)>=(o|0)){aa=232;break f}k=c[t>>2]|0;if(!J){m=l;while(1){k=k+-1|0;l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;Q=(l&65535)+2|0;l=m-Q|0;c[u>>2]=l;c[s>>2]=(c[s>>2]|0)+Q;c[t>>2]=k;if((l|0)>(T|0))m=l;else{r=o;q=t;break g}}}n=k;m=l;while(1){k=n+-1|0;l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;m=m-((l&65535)+2)|0;c[u>>2]=m;if((n|0)<(c[ia>>2]|0)){l=b[(c[Ha>>2]|0)+(n<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,n)|0;l=(l&65535)+2|0}else l=0;c[s>>2]=(c[s>>2]|0)+l;c[t>>2]=k;if((m|0)>(T|0))n=k;else{r=o;q=t;l=m;break g}}}if(!J){k=o;while(1){if((p|0)<(k|0))n=k;else{c[s>>2]=0;c[r>>2]=c[ia>>2];n=q}k=(c[t>>2]|0)+-1|0;m=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,k)|0;Q=(m&65535)+2|0;l=l-Q|0;c[u>>2]=l;c[s>>2]=(c[s>>2]|0)+Q;c[t>>2]=k;if((l|0)>(T|0))k=n;else{r=n;q=t;break g}}}k=o;while(1){if((p|0)<(k|0))o=k;else{c[s>>2]=0;c[r>>2]=c[ia>>2];o=q}n=c[t>>2]|0;k=n+-1|0;m=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,k)|0;l=l+-2-(m&65535)|0;c[u>>2]=l;if((n|0)<(c[ia>>2]|0)){m=b[(c[Ha>>2]|0)+(n<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,n)|0;m=(m&65535)+2|0}else m=0;c[s>>2]=(c[s>>2]|0)+m;c[t>>2]=k;if((l|0)>(T|0))k=o;else{r=o;q=t;break}}}else{k=Ua+(j<<2)|0;r=o;q=k;k=c[k>>2]|0}while(0);h:do if((k|0)<(c[ia>>2]|0)){p=Ya+(j+1<<2)|0;if(!J){m=l;while(1){l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;l=(l&65535)+2|0;m=l+m|0;if((m|0)>(T|0))break h;c[u>>2]=m;k=k+1|0;c[q>>2]=k;c[p>>2]=(c[p>>2]|0)-l;if((k|0)>=(c[ia>>2]|0))break h}}o=l;do{l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;o=o+2+(l&65535)|0;if((o|0)>(T|0))break h;c[u>>2]=o;k=k+1|0;c[q>>2]=k;m=c[ia>>2]|0;if((k|0)<(m|0)){l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16)){l=Sh(ia,k)|0;m=c[ia>>2]|0}n=(l&65535)+2|0;l=m}else{n=0;l=m}c[p>>2]=(c[p>>2]|0)-n}while((k|0)<(l|0))}while(0);if((k|0)>=(c[ia>>2]|0)){aa=254;break}if(!j)l=0;else l=c[Ua+(j+-1<<2)>>2]|0;if((k|0)<=(l|0)){aa=258;break}j=j+1|0;if((j|0)<(r|0))o=r;else{H=r;break e}}if((aa|0)==232){aa=0;c[eb>>2]=32306;c[eb+4>>2]=70953;c[eb+8>>2]=31517;Db(11,32001,eb);c[la>>2]=11;g=0;break c}else if((aa|0)==254){aa=0;H=j+1|0;break}else if((aa|0)==258){aa=0;c[fb>>2]=32306;c[fb+4>>2]=70986;c[fb+8>>2]=31517;Db(11,32001,fb);c[la>>2]=11;g=0;break c}}else H=Z;while(0);t=H+-1|0;i:do if((H|0)>1){j=c[Ya+(t<<2)>>2]|0;j:do if(!(I<<24>>24)){x=t;m=c[Ha>>2]|0;while(1){u=Ya+(x<<2)|0;w=x;x=x+-1|0;v=Ya+(x<<2)|0;n=c[v>>2]|0;s=Ua+(x<<2)|0;l=c[s>>2]|0;k=l-E|0;if(!(b[m+(k<<1)>>1]|0)){Sh(ia,k)|0;m=c[Ha>>2]|0}r=(w|0)==(t|0)?0:-2;while(1){q=l+-1|0;if(!(b[m+(q<<1)>>1]|0)){Sh(ia,q)|0;m=c[Ha>>2]|0}o=b[m+(k<<1)>>1]|0;if(j){p=j+2+(o&65535)|0;o=e[m+(q<<1)>>1]|0;if((p|0)>(n+r-o|0))break;else j=p}else{j=(o&65535)+2|0;o=e[m+(q<<1)>>1]|0}n=n+-2-o|0;c[s>>2]=q;if((l|0)>1){k=k+-1|0;l=q}else{l=q;break}}c[u>>2]=j;c[v>>2]=n;k=(w|0)>1;if(k)j=c[Ua+(w+-2<<2)>>2]|0;else j=0;if((l|0)<=(j|0))break j;if(!k)break i;else j=n}}else while(1){q=Ya+(t<<2)|0;s=t;t=t+-1|0;r=Ya+(t<<2)|0;m=c[r>>2]|0;p=Ua+(t<<2)|0;n=c[p>>2]|0;l=n-E|0;k=c[Ha>>2]|0;if(!(b[k+(l<<1)>>1]|0)){Sh(ia,l)|0;k=c[Ha>>2]|0}o=l;while(1){l=n+-1|0;if(!(b[k+(l<<1)>>1]|0))Sh(ia,l)|0;if(j|0){l=n;break}k=c[Ha>>2]|0;j=(e[k+(o<<1)>>1]|0)+2|0;m=m+-2-(e[k+(l<<1)>>1]|0)|0;c[p>>2]=l;if((n|0)<=1)break;else{o=o+-1|0;n=l}}c[q>>2]=j;c[r>>2]=m;k=(s|0)>1;if(k)j=c[Ua+(s+-2<<2)>>2]|0;else j=0;if((l|0)<=(j|0))break j;if(!k)break i;else j=m}while(0);c[hb>>2]=32306;c[hb+4>>2]=71028;c[hb+8>>2]=31517;Db(11,32001,hb);c[la>>2]=11;g=0;break c}while(0);D=a[c[F>>2]>>0]|0;F=D&255;do if((H|0)>0){v=I<<24>>24==0;w=F>>>1&4^12;y=F>>>3;x=y&255;y=4-(y<<2)&255;C=F&247;z=Y+17|0;A=x<<24>>24==0;B=$+4|0;t=0;u=0;k:while(1){l:do if((u|0)>(g|0)){Q=fg(Y,da,Za,v?c[Za>>2]|0:1,0)|0;c[la>>2]=Q;if(Q|0){g=t;break k}s=c[da>>2]|0;p=c[s+56>>2]|0;l=s+52|0;q=c[l>>2]|0;k=d[s+9>>0]|0;r=s;if(!(b[q+22>>1]&12)){j=p+k|0;o=q+36|0}else{o=q+36|0;j=p+k|0;gw(j|0,0,(c[o>>2]|0)-k|0)|0}a[j>>0]=D;m=w+k|0;n=m&65535;j=p+(k+1)|0;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;a[p+(k+7)>>0]=0;j=p+(k+5)|0;a[j>>0]=(c[o>>2]|0)>>>8;a[j+1>>0]=c[o>>2];c[s+20>>2]=(c[o>>2]|0)-m&65535;a[s+8>>0]=x;j=s+10|0;a[j>>0]=y;k=s+76|0;c[k>>2]=120;l=c[l>>2]|0;switch(C<<24>>24){case 5:{a[s+2>>0]=1;j=s+3|0;if(A){a[j>>0]=0;c[k>>2]=121;j=181}else{a[j>>0]=1;j=180}c[s+80>>2]=j;b[s+14>>1]=b[l+28>>1]|0;j=l+30|0;aa=314;break}case 2:{a[s+2>>0]=0;a[s+3>>0]=0;c[s+80>>2]=179;b[s+14>>1]=b[l+24>>1]|0;j=l+26|0;aa=314;break}default:{c[ib>>2]=32306;c[ib+4>>2]=65035;c[ib+8>>2]=31517;Db(11,32001,ib);j=a[j>>0]|0}}if((aa|0)==314){aa=0;b[s+16>>1]=b[j>>1]|0;a[s+11>>0]=a[l+21>>0]|0;j=y}b[s+18>>1]=n;c[s+60>>2]=p+(c[o>>2]|0);c[s+64>>2]=p+m;c[s+68>>2]=p+(j&255);a[s+12>>0]=0;b[s+26>>1]=(c[q+32>>2]|0)+65535;b[s+24>>1]=0;a[s>>0]=1;c[La+(u<<2)>>2]=r;j=t+1|0;c[Va+(u<<2)>>2]=c[ia>>2];if(!(a[z>>0]|0)){E=j;break}ig(Y,c[s+4>>2]|0,5,c[B>>2]|0,la);if(!(c[la>>2]|0))E=j;else{g=j;break k}}else{k=va+(u<<2)|0;j=c[k>>2]|0;c[La+(u<<2)>>2]=j;c[da>>2]=j;c[k>>2]=0;j=c[j+72>>2]|0;k=c[j+20>>2]|0;do if(b[j+28>>1]&4){if((c[k+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){aa=297;break}if(!(c[k+96>>2]|0)){c[la>>2]=0;E=t+1|0;break l}else{k=Ve(j)|0;break}}else aa=297;while(0);do if((aa|0)==297){aa=0;l=c[k+40>>2]|0;if(l|0){aa=298;break k}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){k=Wf(j)|0;break}else{k=Xf(j)|0;break}}while(0);c[la>>2]=k;j=t+1|0;if(!k)E=j;else{g=j;break k}}while(0);u=u+1|0;if((u|0)>=(H|0)){aa=319;break}else t=E}if((aa|0)==298){aa=0;c[la>>2]=l;g=t+1|0}else if((aa|0)==319){aa=0;if((E|0)<=0){Q=0;break}k=0;m:do{Q=c[La+(k<<2)>>2]|0;l=c[Q+4>>2]|0;c[fa+(k<<2)>>2]=l;c[ga+(k<<2)>>2]=l;b[ha+(k<<1)>>1]=b[(c[Q+72>>2]|0)+28>>1]|0;if(k|0){j=0;do{if((c[fa+(j<<2)>>2]|0)==(l|0)){aa=325;break m}j=j+1|0}while(j>>>0<k>>>0)}k=k+1|0}while((k|0)<(E|0));if((aa|0)==325){aa=0;c[jb>>2]=32306;c[jb+4>>2]=71102;c[jb+8>>2]=31517;Db(11,32001,jb);c[la>>2]=11;g=E;break c}x=(E|0)==1;y=Y+44|0;w=0;do{if(x)j=0;else{j=0;k=1;do{j=(c[ga+(k<<2)>>2]|0)>>>0<(c[ga+(j<<2)>>2]|0)>>>0?k:j;k=k+1|0}while((k|0)<(E|0))}Q=ga+(j<<2)|0;v=c[Q>>2]|0;c[Q>>2]=-1;if((j|0)!=(w|0)){do if((j|0)>(w|0)){t=c[(c[La+(j<<2)>>2]|0)+72>>2]|0;P=j+1+(c[y>>2]|0)|0;u=t+28|0;b[u>>1]=0;k=t+12|0;Q=t+24|0;db[c[29444>>2]&127](c[(c[k>>2]|0)+44>>2]|0,c[t>>2]|0,c[Q>>2]|0,P);c[Q>>2]=P;u=b[u>>1]|0;if((u&10)!=10)break;q=c[k>>2]|0;s=q+8|0;k=c[s>>2]|0;p=t+36|0;m=c[p>>2]|0;if((k|0)==(t|0)){c[s>>2]=m;r=m}else r=k;o=t+32|0;l=c[o>>2]|0;n=(l|0)==0;if(n){c[q+4>>2]=m;k=m}else{c[l+36>>2]=m;k=c[p>>2]|0}do if(!k){c[q>>2]=l;if(n){a[q+33>>0]=2;c[p>>2]=0;c[o>>2]=0;k=q;aa=345;break}else{c[p>>2]=0;k=q;aa=344;break}}else{c[k+32>>2]=l;l=c[q>>2]|0;c[p>>2]=0;c[o>>2]=l;if(!l){k=q;aa=345}else{k=q;aa=344}}while(0);do if((aa|0)==344){aa=0;c[l+36>>2]=t}else if((aa|0)==345){aa=0;c[q+4>>2]=t;if(!(a[q+32>>0]|0))break;a[q+33>>0]=1}while(0);c[k>>2]=t;if(!((u&8)==0&(r|0)==0))break;c[s>>2]=t}while(0);t=La+(w<<2)|0;u=c[(c[t>>2]|0)+72>>2]|0;s=u+28|0;b[s>>1]=b[ha+(j<<1)>>1]|0;j=u+12|0;Q=u+24|0;db[c[29444>>2]&127](c[(c[j>>2]|0)+44>>2]|0,c[u>>2]|0,c[Q>>2]|0,v);c[Q>>2]=v;s=b[s>>1]|0;do if((s&10)==10){p=c[j>>2]|0;r=p+8|0;j=c[r>>2]|0;o=u+36|0;l=c[o>>2]|0;if((j|0)==(u|0)){c[r>>2]=l;q=l}else q=j;n=u+32|0;k=c[n>>2]|0;m=(k|0)==0;if(m){c[p+4>>2]=l;j=l}else{c[k+36>>2]=l;j=c[o>>2]|0}do if(!j){c[p>>2]=k;if(m){a[p+33>>0]=2;c[o>>2]=0;c[n>>2]=0;j=p;aa=361;break}else{c[o>>2]=0;j=p;aa=360;break}}else{c[j+32>>2]=k;k=c[p>>2]|0;c[o>>2]=0;c[n>>2]=k;if(!k){j=p;aa=361}else{j=p;aa=360}}while(0);do if((aa|0)==360){aa=0;c[k+36>>2]=u}else if((aa|0)==361){aa=0;c[p+4>>2]=u;if(!(a[p+32>>0]|0))break;a[p+33>>0]=1}while(0);c[j>>2]=u;if(!((s&8)==0&(q|0)==0))break;c[r>>2]=u}while(0);c[(c[t>>2]|0)+4>>2]=v}w=w+1|0}while((w|0)!=(E|0));c[Za>>2]=v;Q=1;break}break c}else{E=0;Q=0}while(0);v=E+-1|0;j=c[La+(v<<2)>>2]|0;P=c[j+4>>2]|0;a[K>>0]=P>>>24;a[M>>0]=P>>>16;a[N>>0]=P>>>8;a[O>>0]=P;if(!((F&8|0)!=0|(Z|0)==(E|0))){P=(c[j+56>>2]|0)+8|0;O=(c[(c[((E|0)>(Z|0)?La:va)+(g<<2)>>2]|0)+56>>2]|0)+8|0;O=d[O>>0]|d[O+1>>0]<<8|d[O+2>>0]<<16|d[O+3>>0]<<24;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24}P=Y+17|0;do if(a[P>>0]|0){j=c[La>>2]|0;k=c[ia>>2]|0;if((k|0)<=0)break;t=J&1;u=U<<16>>16==0;q=0;l=0;n=(e[j+24>>1]|0)+(d[j+12>>0]|0)|0;p=j;o=j;s=0;while(1){r=c[(c[ua>>2]|0)+(s<<2)>>2]|0;if((s|0)==(n|0)){n=s+t|0;j=q;do{j=j+1|0;o=c[((j|0)<(E|0)?La+(j<<2)|0:va+(j<<2)|0)>>2]|0;m=n+(e[o+24>>1]|0)+(d[o+12>>0]|0)|0}while((s|0)==(m|0));n=m}else j=q;if((s|0)==(c[Ua+(l<<2)>>2]|0)){l=l+1|0;m=c[La+(l<<2)>>2]|0;if(!J){p=m;aa=378}}else aa=378;n:do if((aa|0)==378){aa=0;do if((j|0)<(E|0)){if((c[p+4>>2]|0)!=(c[fa+(j<<2)>>2]|0))break;m=r;if((c[o+56>>2]|0)>>>0>m>>>0)break;if((c[o+60>>2]|0)>>>0>m>>>0){m=p;break n}}while(0);if(u)ig(Y,d[r+1>>0]<<16|d[r>>0]<<24|d[r+2>>0]<<8|d[r+3>>0],5,c[p+4>>2]|0,la);k=b[(c[Ha>>2]|0)+(s<<1)>>1]|0;if(!(k<<16>>16))k=Sh(ia,s)|0;if((k&65535)>(e[p+16>>1]|0))o:do if(!(c[la>>2]|0)){cb[c[p+80>>2]&255](p,r,da);k=e[Oa>>1]|0;if((c[Pa>>2]|0)>>>0<=k>>>0)break;m=c[o+60>>2]|0;do if(m>>>0>=r>>>0){if(m>>>0>=(r+k|0)>>>0)break;c[kb>>2]=32306;c[kb+4>>2]=64569;c[kb+8>>2]=31517;Db(11,32001,kb);c[la>>2]=11;break o}while(0);O=r+((e[Qa>>1]|0)+-4)|0;ig(c[p+52>>2]|0,d[O+1>>0]<<16|d[O>>0]<<24|d[O+2>>0]<<8|d[O+3>>0],3,c[p+4>>2]|0,la)}while(0);if(c[la>>2]|0){g=E;break c}m=p;k=c[ia>>2]|0}while(0);s=s+1|0;if((s|0)>=(k|0))break;else{q=j;p=m}}}while(0);p:do if((E|0)>1){if(J){m=0;n=0;while(1){o=c[La+(n<<2)>>2]|0;l=c[Ua+(n<<2)>>2]|0;j=c[(c[ua>>2]|0)+(l<<2)>>2]|0;l=b[(c[Ha>>2]|0)+(l<<1)>>1]|0;k=R+(l&65535)|0;p=_+m|0;do if(!(a[o+8>>0]|0)){O=(c[o+56>>2]|0)+8|0;N=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[O>>0]=N;a[O+1>>0]=N>>8;a[O+2>>0]=N>>16;a[O+3>>0]=N>>24}else{j=j+-4|0;if(l<<16>>16!=4)break;k=(Xa[c[S>>2]&255]($,j)|0)&65535}while(0);Lh($,n+h|0,j,k,p,c[o+4>>2]|0,la);if(c[la>>2]|0){g=E;break c}n=n+1|0;if((n|0)>=(v|0))break p;else m=k+m|0}}n=0;o=0;while(1){p=c[La+(o<<2)>>2]|0;k=c[Ua+(o<<2)>>2]|0;l=c[ua>>2]|0;j=c[l+(k<<2)>>2]|0;m=_+n|0;if(!(a[p+8>>0]|0)){k=R+(e[(c[Ha>>2]|0)+(k<<1)>>1]|0)|0;l=(c[p+56>>2]|0)+8|0;S=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[l>>0]=S;a[l+1>>0]=S>>8;a[l+2>>0]=S>>16;a[l+3>>0]=S>>24;l=m}else{cb[c[p+80>>2]&255](p,c[l+(k+-1<<2)>>2]|0,da);j=m+4|0;l=da;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(l>>>0<0|(l|0)==0&k>>>0<128))if(l>>>0<0|(l|0)==0&k>>>0<16384){S=bw(k|0,l|0,7)|0;L()|0;a[j>>0]=S&255|-128;a[j+1>>0]=k&127;j=2;break}else{j=wh(j,k,l)|0;break}else{a[j>>0]=k&127;j=1}while(0);k=j+4|0;l=0;j=m}Lh($,o+h|0,j,k,l,c[p+4>>2]|0,la);if(c[la>>2]|0){g=E;break c}o=o+1|0;if((o|0)>=(v|0))break;else n=k+n|0}}while(0);h=1-E|0;q:do if((h|0)<(E|0)){O=c[Ua>>2]|0;N=J&1;r:while(1){K=(h|0)<0?0-h|0:h;M=ea+K|0;do if(!(a[M>>0]|0)){if((h|0)<=-1?(S=K+-1|0,(c[Va+(S<<2)>>2]|0)<(c[Ua+(S<<2)>>2]|0)):0)break;if(!K){J=O;k=0;H=0}else{if((K|0)>(g|0)){j=K+-1|0;k=c[ia>>2]|0}else{k=K+-1|0;j=k;k=(c[Va+(k<<2)>>2]|0)+N|0}H=(c[Ua+(j<<2)>>2]|0)+N|0;J=(c[Ua+(K<<2)>>2]|0)-H|0}I=c[La+(K<<2)>>2]|0;w=I+56|0;z=c[w>>2]|0;x=I+9|0;A=d[x>>0]|0;B=I+64|0;C=(c[B>>2]|0)+(J<<1)|0;D=I+24|0;v=e[D>>1]|0;F=I+12|0;y=k+v+(d[F>>0]|0)|0;q=J+H|0;if((k|0)<(H|0)){s=z+(c[(c[I+52>>2]|0)+36>>2]|0)|0;t=z+(A+8+(d[I+10>>0]|0))|0;u=z;j=0;l=0;m=0;r=k;while(1){p=c[(c[ua>>2]|0)+(r<<2)>>2]|0;if(p>>>0>=t>>>0&p>>>0<s>>>0){n=e[(c[Ha>>2]|0)+(r<<1)>>1]|0;o=p+n|0;if((m|0)!=(o|0)){if(m|0)Oh(I,m-u&65535,l&65535)|0;if(o>>>0>s>>>0){j=0;break}else l=n}else l=l+n|0;j=j+1|0;m=p}r=r+1|0;if((r|0)>=(H|0)){aa=437;break}}if((aa|0)==437){aa=0;if(m|0)Oh(I,m-u&65535,l&65535)|0;if((j|0)>(v|0))break r}u=c[B>>2]|0;fw(u|0,u+(j<<1)|0,v<<1|0)|0;u=v-j|0}else u=v;if((y|0)>(q|0)){s=c[w>>2]|0;t=s+(c[(c[I+52>>2]|0)+36>>2]|0)|0;r=s+((d[x>>0]|0)+8+(d[I+10>>0]|0))|0;j=0;l=0;m=0;while(1){p=c[(c[ua>>2]|0)+(q<<2)>>2]|0;if(p>>>0>=r>>>0&p>>>0<t>>>0){n=e[(c[Ha>>2]|0)+(q<<1)>>1]|0;o=p+n|0;if((m|0)!=(o|0)){if(m|0)Oh(I,m-s&65535,l&65535)|0;if(o>>>0>t>>>0){j=0;break}else l=n}else l=l+n|0;j=j+1|0;m=p}q=q+1|0;if((q|0)>=(y|0)){aa=452;break}}do if((aa|0)==452){aa=0;if(!m)break;Oh(I,m-s&65535,l&65535)|0}while(0);j=u-j|0}else j=u;p=z+(A+5)|0;q=p+1|0;S=z+(((d[p>>0]<<8|d[q>>0])+65535&65535)+1)|0;c[da>>2]=S;s:do if(S>>>0<C>>>0)aa=468;else{if((k|0)>(H|0)){l=k-H|0;l=(l|0)>(J|0)?J:l;S=c[B>>2]|0;fw(S+(l<<1)|0,S|0,j<<1|0)|0;if(!(Th(I,C,da,S,H,l,ia)|0))j=j+l|0;else{aa=468;break}}l=a[F>>0]|0;if(l<<24>>24){o=0;do{m=k+(e[I+28+(o<<1)>>1]|0)|0;n=m-H|0;if((n|0)>-1&(n|0)<(J|0)){l=(c[B>>2]|0)+(n<<1)|0;if((j|0)>(n|0))fw(l+2|0,l|0,j-n<<1|0)|0;if(Th(I,C,da,l,m,1,ia)|0){aa=468;break s}j=j+1|0;l=a[F>>0]|0}o=o+1|0}while(o>>>0<(l&255)>>>0)}if(Th(I,C,da,(c[B>>2]|0)+(j<<1)|0,j+H|0,J-j|0,ia)|0){aa=468;break}b[D>>1]=J;a[F>>0]=0;S=z+(A+3)|0;a[S>>0]=J>>>8;a[S+1>>0]=b[D>>1];S=(c[da>>2]|0)-z|0;a[p>>0]=S>>>8;a[q>>0]=S;c[la>>2]=0}while(0);if((aa|0)==468){aa=0;if((J|0)>0){k=H;l=J;j=c[Ha>>2]|0;while(1){if(!(b[j+(k<<1)>>1]|0)){S=c[Ia>>2]|0;S=Xa[c[S+76>>2]&255](S,c[(c[ua>>2]|0)+(k<<2)>>2]|0)|0;j=c[Ha>>2]|0;b[j+(k<<1)>>1]=S}if((l|0)>1){k=k+1|0;l=l+-1|0}else break}}S=Rh(ia,H,J,I)|0;c[la>>2]=S;if(S|0){g=E;break c}}a[M>>0]=1;c[I+20>>2]=T-(c[Ya+(K<<2)>>2]|0)}while(0);h=h+1|0;if((h|0)>=(E|0))break q}c[lb>>2]=32306;c[lb+4>>2]=70299;c[lb+8>>2]=31517;Db(11,32001,lb);c[la>>2]=11;g=E;break c}while(0);t:do if(W){if(b[X>>1]|0){aa=488;break}l=c[La>>2]|0;if((c[l+20>>2]|0)<(d[$+9>>0]|0)){aa=488;break}Y=Qh(l,-1)|0;c[la>>2]=Y;if(Y|0)break;k=l+52|0;j=c[k>>2]|0;Y=c[l+56>>2]|0;W=c[V>>2]|0;h=d[l+9>>0]|0;X=(c[$+4>>2]|0)==1?100:0;V=Y+(h+5)|0;V=d[V>>0]<<8|d[V+1>>0];ew(W+V|0,Y+V|0,(c[j+36>>2]|0)-V|0)|0;ew(W+X|0,Y+h|0,(e[l+24>>1]<<1)+(e[l+18>>1]|0)|0)|0;a[$>>0]=0;h=Gf($)|0;do if(!h){h=Jh($)|0;if(h|0)break;if(!(a[j+17>>0]|0))h=c[la>>2]|0;else{h=hg($)|0;c[la>>2]=h}if(h|0)break t;$=Bh(c[k>>2]|0,l,c[l+4>>2]|0)|0;c[la>>2]=$;break t}while(0);c[la>>2]=h}else aa=488;while(0);do if((aa|0)==488){aa=0;if(!(Q&(U<<16>>16==0&(a[P>>0]|0)!=0)))break;h=0;do{$=c[La+(h<<2)>>2]|0;X=c[$+56>>2]|0;ig(Y,d[X+9>>0]<<16|d[X+8>>0]<<24|d[X+10>>0]<<8|d[X+11>>0],5,c[$+4>>2]|0,la);h=h+1|0}while((h|0)!=(E|0))}while(0);if((E|0)>(g|0)){g=E;break c}k=E;h=c[la>>2]|0;while(1){j=c[va+(k<<2)>>2]|0;if(!h){h=Bh(c[j+52>>2]|0,j,c[j+4>>2]|0)|0;c[la>>2]=h}if((k|0)<(g|0))k=k+1|0;else{g=E;break c}}}while(0);if((aa|0)==155){aa=0;c[ua>>2]=0}c[la>>2]=7;g=0;break}}else aa=130;while(0);if((aa|0)==130){aa=0;gw(va|0,0,(g<<2)+4|0)|0;g=0}h=c[ua>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{$=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);j=0;do{h=c[va+(j<<2)>>2]|0;do if(h|0){h=c[h+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);break}else{$=c[h+20>>2]|0;Y=$+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;$=$+136|0;c[h+16>>2]=c[$>>2];c[$>>2]=h;break}}while(0);j=j+1|0}while((j|0)!=(Z|0));if((g|0)>0){j=0;do{h=c[La+(j<<2)>>2]|0;do if(h|0){h=c[h+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);break}else{$=c[h+20>>2]|0;Z=$+120|0;c[Z>>2]=(c[Z>>2]|0)+-1;$=$+136|0;c[h+16>>2]=c[$>>2];c[$>>2]=h;break}}while(0);j=j+1|0}while((j|0)!=(g|0))}h=c[la>>2]|0}if(i){g=i;do if((c[14816]|0)>>>0<=g>>>0)if((c[14817]|0)>>>0>g>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;i=(c[14820]|0)+1|0;c[14820]=i;c[14821]=(i|0)<(c[14815]|0)&1;i=_;break b}else{g=Wa[c[29352>>2]&127](i)|0;break}else g=Wa[c[29352>>2]&127](i)|0;while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);i=_;break}else{$=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);i=_;break}}else i=_}while(0);a[ba>>0]=0;if(ca)aa=525}while(0);if((aa|0)==523){a[ba>>0]=0;aa=525}do if((aa|0)==525){g=c[ca+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{ca=c[g+20>>2]|0;ba=ca+120|0;c[ba>>2]=(c[ba>>2]|0)+-1;ca=ca+136|0;c[g+16>>2]=c[ca>>2];c[ca>>2]=g;break}}while(0);g=(a[na>>0]|0)+-1<<24>>24;a[na>>0]=g;j=g;g=f+120+(g<<24>>24<<2)|0}ca=c[g>>2]|0;c[oa>>2]=ca}while(!(h|0));if(!i){Ra=nb;return h|0}g=i;do if((c[14816]|0)>>>0>g>>>0)g=Wa[c[29352>>2]&127](i)|0;else{if((c[14817]|0)>>>0<=g>>>0){g=Wa[c[29352>>2]&127](i)|0;break}c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;mb=(c[14820]|0)+1|0;c[14820]=mb;c[14821]=(mb|0)<(c[14815]|0)&1;Ra=nb;return h|0}while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Ra=nb;return h|0}else{mb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Ra=nb;return h|0}return 0}function Nh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;i=c[f+28>>2]|0;j=i-g|0;if((j|0)<1){if((h|0)<=0){n=0;return n|0}i=0;while(1){if(a[e+i>>0]|0)break;i=i+1|0;if((i|0)>=(h|0)){i=0;n=30;break}}if((n|0)==30)return i|0;l=e+i|0;f=c[d+72>>2]|0;k=c[f+20>>2]|0;if((b[f+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[f+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){m=Ve(f)|0;n=14}}else n=10;do if((n|0)==10){j=c[k+40>>2]|0;if(j|0){n=j;return n|0}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){m=Wf(f)|0;n=14;break}else{m=Xf(f)|0;n=14;break}}while(0);if((n|0)==14?m|0:0){n=m;return n|0}gw(l|0,0,h-i|0)|0;n=0;return n|0}else{if((j|0)<(h|0)){i=Nh(d,e+j|0,f,i,h-j|0)|0;if(!i)l=j;else{n=i;return n|0}}else l=h;k=f+16|0;i=(c[k>>2]|0)+g|0;if(!(Lu(e,i,l)|0)){n=0;return n|0}j=c[d+72>>2]|0;f=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[f+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[f+96>>2]|0){i=Ve(j)|0;n=27}}else n=23;do if((n|0)==23){i=c[f+40>>2]|0;if(i|0){n=i;return n|0}if((c[f+148>>2]|0)>>>0>(c[f+152>>2]|0)>>>0){i=Wf(j)|0;n=27;break}else{i=Xf(j)|0;n=27;break}}while(0);do if((n|0)==27)if(!i){i=(c[k>>2]|0)+g|0;break}else{n=i;return n|0}while(0);fw(e|0,i|0,l|0)|0;n=0;return n|0}return 0}function Oh(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+112|0;B=E+96|0;y=E+80|0;v=E+64|0;t=E+48|0;s=E+32|0;r=E+16|0;q=E;k=f&65535;C=g&65535;u=C+k|0;D=c[e+56>>2]|0;z=d[e+9>>0]|0;A=z+1|0;o=A&65535;p=a[D+(z+2)>>0]|0;h=a[D+A>>0]|0;if(p<<24>>24==0?h<<24>>24==0:0){q=u;p=0;n=0;m=f&255;l=(f&65535)>>>8&255}else w=3;do if((w|0)==3){m=p&255;h=(h&255)<<8|m;i=h&65535;n=(i&65535)>>>8&255;do if(h>>>0<k>>>0){l=A;while(1){if(h>>>0<(l+4|0)>>>0)break;l=i&65535;h=D+l|0;p=a[h+1>>0]|0;m=p&255;h=(d[h>>0]|0)<<8|m;j=h&65535;if(h>>>0<k>>>0){o=i;i=j}else{w=10;break}}if((w|0)==10){o=i;n=(j&65535)>>>8&255;w=11;break}if(!h){n=(i&65535)>>>8&255;j=0;i=c[(c[e+52>>2]|0)+36>>2]|0;break}c[q>>2]=32306;c[q+4>>2]=64915;c[q+8>>2]=31517;Db(11,32001,q);D=11;Ra=E;return D|0}else{l=A;w=11}while(0);if((w|0)==11){i=c[(c[e+52>>2]|0)+36>>2]|0;if(h>>>0>(i+-4|0)>>>0){c[r>>2]=32306;c[r+4>>2]=64920;c[r+8>>2]=31517;Db(11,32001,r);D=11;Ra=E;return D|0}else j=h}do if((j+-1|0)>>>0<(u+3|0)>>>0){if(u>>>0>j>>>0){c[s>>2]=32306;c[s+4>>2]=64932;c[s+8>>2]=31517;Db(11,32001,s);D=11;Ra=E;return D|0}h=D+(j+2)|0;h=((d[h>>0]|0)<<8|(d[h+1>>0]|0))+j|0;if(h>>>0<=i>>>0){n=D+j|0;q=h;g=h-k&65535;h=m-u&255;p=a[n+1>>0]|0;n=a[n>>0]|0;break}c[t>>2]=32306;c[t+4>>2]=64935;c[t+8>>2]=31517;Db(11,32001,t);D=11;Ra=E;return D|0}else{q=u;h=0}while(0);do if(A>>>0<l>>>0?(x=D+(l+2)|0,x=((d[x>>0]|0)<<8|(d[x+1>>0]|0))+l|0,(x+3|0)>>>0>=k>>>0):0){if(x>>>0<=k>>>0){f=o;g=q-l&65535;h=(h&255)+k-x&255;break}c[v>>2]=32306;c[v+4>>2]=64948;c[v+8>>2]=31517;Db(11,32001,v);D=11;Ra=E;return D|0}while(0);i=D+(z+7)|0;j=a[i>>0]|0;if((j&255)>=(h&255)){a[i>>0]=(j&255)-(h&255);m=f&255;l=(f&65535)>>>8&255;k=f&65535;break}c[y>>2]=32306;c[y+4>>2]=64954;c[y+8>>2]=31517;Db(11,32001,y);D=11;Ra=E;return D|0}while(0);h=D+(z+5)|0;i=h+1|0;j=(d[h>>0]|0)<<8|(d[i>>0]|0);do if(j>>>0<k>>>0){B=D+(o&65535)|0;a[B>>0]=l;a[B+1>>0]=m}else{if((A|0)==(o&65535|0)&j>>>0<=k>>>0){B=D+A|0;a[B>>0]=n;a[B+1>>0]=p;a[h>>0]=q>>>8;a[i>>0]=q;break}c[B>>2]=32306;c[B+4>>2]=64962;c[B+8>>2]=31517;Db(11,32001,B);D=11;Ra=E;return D|0}while(0);if(!(b[(c[e+52>>2]|0)+22>>1]&12))h=D+k|0;else{h=D+k|0;gw(h|0,0,g&65535|0)|0}a[h>>0]=n;a[D+k+1>>0]=p;D=D+(k+2)|0;a[D>>0]=(g&65535)>>>8;a[D+1>>0]=g;D=e+20|0;c[D>>2]=(c[D>>2]|0)+C;D=0;Ra=E;return D|0}function Ph(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+48|0;r=t+32|0;o=t+16|0;s=t;n=b&255;i=n+1|0;b=f+i|0;b=(d[b>>0]|0)<<8|(d[b+1>>0]|0);q=e-g|0;a:do if((b|0)<=(q|0)){l=i;while(1){k=f+(b+2)|0;j=(d[k>>0]|0)<<8|(d[k+1>>0]|0);m=j-g|0;if((m|0)>-1)break;i=f+b|0;i=(d[i>>0]|0)<<8|(d[i+1>>0]|0);if((i|0)<=(j+b|0)){p=13;break}if((i|0)>(q|0)){b=i;break a}else{l=b;b=i}}if((p|0)==13){if(!i){f=0;Ra=t;return f|0}c[o>>2]=32306;c[o+4>>2]=64770;c[o+8>>2]=31517;Db(11,32001,o);c[h>>2]=11;f=0;Ra=t;return f|0}i=k+1|0;do if((m|0)<4){i=f+(n+7)|0;if((d[i>>0]|0)>57){f=0;Ra=t;return f|0}else{h=f+l|0;s=f+b|0;s=d[s>>0]|d[s+1>>0]<<8;a[h>>0]=s;a[h+1>>0]=s>>8;a[i>>0]=m+(d[i>>0]|0);b=m+b|0;break}}else{b=m+b|0;if((b|0)<=(q|0)){a[k>>0]=m>>>8;a[i>>0]=m;break}c[s>>2]=32306;c[s+4>>2]=64756;c[s+8>>2]=31517;Db(11,32001,s);c[h>>2]=11;f=0;Ra=t;return f|0}while(0);f=f+b|0;Ra=t;return f|0}while(0);if((b|0)<=(e+-4|0)){f=0;Ra=t;return f|0}c[r>>2]=32306;c[r+4>>2]=64777;c[r+8>>2]=31517;Db(11,32001,r);c[h>>2]=11;f=0;Ra=t;return f|0}function Qh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+144|0;F=G+128|0;x=G+112|0;w=G+96|0;o=G+80|0;p=G+64|0;l=G+48|0;k=G+32|0;i=G+16|0;h=G;D=c[f+56>>2]|0;E=d[f+9>>0]|0;z=e[f+18>>1]|0;q=b[f+24>>1]|0;u=q&65535;B=(u<<1)+z|0;v=f+52|0;y=c[(c[v>>2]|0)+36>>2]|0;C=D+(E+7)|0;do if((d[C>>0]|0)<=(g|0)){s=D+(E+1)|0;s=d[s>>0]<<8|d[s+1>>0];g=y+-4|0;if((s|0)>(g|0)){c[h>>2]=32306;c[h+4>>2]=64627;c[h+8>>2]=31517;Db(11,32001,h);F=11;Ra=G;return F|0}if(s){r=D+s|0;r=d[r>>0]<<8|d[r+1>>0];if((r|0)>(g|0)){c[i>>2]=32306;c[i+4>>2]=64630;c[i+8>>2]=31517;Db(11,32001,i);F=11;Ra=G;return F|0}j=(r|0)==0;if(!j){if(a[D+r>>0]|0){t=g;A=27;break}if(a[D+(r+1)>>0]|0){t=g;A=27;break}}n=D+B|0;m=D+(s+2)|0;m=d[m>>0]<<8|d[m+1>>0];i=D+(E+5)|0;i=d[i>>0]<<8|d[i+1>>0];if(s>>>0<=i>>>0){c[k>>2]=32306;c[k+4>>2]=64638;c[k+8>>2]=31517;Db(11,32001,k);F=11;Ra=G;return F|0}h=m+s|0;do if(j)if((h|0)>(y|0)){c[o>>2]=32306;c[o+4>>2]=64647;c[o+8>>2]=31517;Db(11,32001,o);F=11;Ra=G;return F|0}else l=0;else{if(r>>>0<h>>>0){c[l>>2]=32306;c[l+4>>2]=64641;c[l+8>>2]=31517;Db(11,32001,l);F=11;Ra=G;return F|0}g=D+(r+2)|0;g=d[g>>0]<<8|d[g+1>>0];if((g+r|0)<=(y|0)){fw(D+(g+h)|0,D+h|0,r-h|0)|0;m=g+m|0;l=g;break}c[p>>2]=32306;c[p+4>>2]=64643;c[p+8>>2]=31517;Db(11,32001,p);F=11;Ra=G;return F|0}while(0);g=m+i|0;fw(D+g|0,D+i|0,s-i|0)|0;if(q<<16>>16){i=D+z|0;do{j=i+1|0;k=d[i>>0]<<8|d[j>>0];if(k>>>0>=s>>>0){if(k>>>0<r>>>0){h=l;A=25}}else{h=m;A=25}if((A|0)==25){A=0;z=k+h|0;a[i>>0]=z>>>8;a[j>>0]=z}i=i+2|0}while(i>>>0<n>>>0)}}else{t=g;A=27}}else{t=y+-4|0;A=27}while(0);if((A|0)==27){a:do if(q<<16>>16){q=f+76|0;r=D+(E+5)|0;s=r+1|0;p=0;i=0;h=D;k=y;while(1){l=D+((p<<1)+z)|0;m=l+1|0;n=d[l>>0]<<8|d[m>>0];if(n>>>0<B>>>0|(n|0)>(t|0)){A=30;break}j=h+n|0;o=(Xa[c[q>>2]&255](f,j)|0)&65535;g=k-o|0;if((g|0)<(B|0)|(n+o|0)>(y|0)){A=32;break}a[l>>0]=g>>>8;a[m>>0]=g;if(!i)if((g|0)==(n|0))i=0;else{j=c[(c[c[v>>2]>>2]|0)+208>>2]|0;i=d[r>>0]<<8|d[s>>0];ew(j+i|0,D+i|0,k-i|0)|0;i=j;h=j;j=j+n|0;A=36}else A=36;if((A|0)==36){A=0;ew(D+g|0,j|0,o|0)|0}p=p+1|0;if(p>>>0>=u>>>0)break a;else k=g}if((A|0)==30){c[w>>2]=32306;c[w+4>>2]=64675;c[w+8>>2]=31517;Db(11,32001,w);F=11;Ra=G;return F|0}else if((A|0)==32){c[x>>2]=32306;c[x+4>>2]=64681;c[x+8>>2]=31517;Db(11,32001,x);F=11;Ra=G;return F|0}}else g=y;while(0);a[C>>0]=0}h=g-B|0;if((h+(d[C>>0]|0)|0)==(c[f+20>>2]|0)){F=D+(E+5)|0;a[F>>0]=g>>>8;a[F+1>>0]=g;a[D+(E+1)>>0]=0;a[D+(E+2)>>0]=0;gw(D+B|0,0,h|0)|0;F=0;Ra=G;return F|0}else{c[F>>2]=32306;c[F+4>>2]=64702;c[F+8>>2]=31517;Db(11,32001,F);F=11;Ra=G;return F|0}return 0}function Rh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+48|0;E=F+32|0;D=F+16|0;C=F;A=d[i+9>>0]|0;B=c[i+56>>2]|0;s=c[i+52>>2]|0;x=c[s+36>>2]|0;t=B+x|0;j=c[i+64>>2]|0;s=c[(c[s>>2]|0)+208>>2]|0;y=B+(A+5)|0;z=y+1|0;k=(d[y>>0]|0)<<8|(d[z>>0]|0);k=k>>>0>x>>>0?0:k;ew(s+k|0,B+k|0,x-k|0)|0;k=0;while(1)if(k>>>0<6?(c[f+40+(k<<2)>>2]|0)<=(g|0):0)k=k+1|0;else break;u=h+g|0;v=f+8|0;w=f+12|0;x=B;l=t;a:while(1){q=c[f+16+(k<<2)>>2]|0;r=f+40+(k<<2)|0;p=l;do{l=c[(c[v>>2]|0)+(g<<2)>>2]|0;m=l;o=e[(c[w>>2]|0)+(g<<1)>>1]|0;n=l+o|0;if(!(l>>>0>=B>>>0&l>>>0<t>>>0)){if(l>>>0<q>>>0&n>>>0>q>>>0){g=10;break a}}else{if(n>>>0>t>>>0){g=7;break a}l=s+(m-x)|0}p=p+(0-o)|0;n=p-x|0;m=n>>>8&255;a[j>>0]=m;n=n&255;a[j+1>>0]=n;j=j+2|0;if(p>>>0<j>>>0){g=12;break a}ew(p|0,l|0,o|0)|0;g=g+1|0;if((g|0)>=(u|0)){g=16;break a}}while((c[r>>2]|0)>(g|0));l=p;k=k+1|0}if((g|0)==7){c[C>>2]=32306;c[C+4>>2]=70094;c[C+8>>2]=31517;Db(11,32001,C);E=11;Ra=F;return E|0}else if((g|0)==10){c[D>>2]=32306;c[D+4>>2]=70099;c[D+8>>2]=31517;Db(11,32001,D);E=11;Ra=F;return E|0}else if((g|0)==12){c[E>>2]=32306;c[E+4>>2]=70105;c[E+8>>2]=31517;Db(11,32001,E);E=11;Ra=F;return E|0}else if((g|0)==16){D=i+24|0;b[D>>1]=h;a[i+12>>0]=0;E=B+(A+1)|0;a[E>>0]=0;a[E+1>>0]=0;E=B+(A+3)|0;a[E>>0]=(e[D>>1]|0)>>>8;a[E+1>>0]=b[D>>1];a[y>>0]=m;a[z>>0]=n;a[B+(A+7)>>0]=0;E=0;Ra=F;return E|0}return 0}function Sh(a,d){a=a|0;d=d|0;var e=0;e=c[a+4>>2]|0;e=Xa[c[e+76>>2]&255](e,c[(c[a+8>>2]|0)+(d<<2)>>2]|0)|0;b[(c[a+12>>2]|0)+(d<<1)>>1]=e;return e|0}function Th(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+16|0;y=A;w=A+12|0;x=d+56|0;k=c[x>>2]|0;l=c[f>>2]|0;v=i+h|0;if((i|0)<1){z=0;Ra=A;return z|0}i=0;while(1)if(i>>>0<6?(c[j+40+(i<<2)>>2]|0)<=(h|0):0)i=i+1|0;else break;s=j+12|0;t=k+1|0;u=k+2|0;r=j+8|0;q=d+9|0;p=d+52|0;o=c[j+16+(i<<2)>>2]|0;n=i;while(1){i=b[(c[s>>2]|0)+(h<<1)>>1]|0;if(!(i<<16>>16))i=Sh(j,h)|0;m=i&65535;if((a[t>>0]|0)==0?(a[u>>0]|0)==0:0)z=10;else{i=Ph(a[q>>0]|0,c[(c[p>>2]|0)+36>>2]|0,c[x>>2]|0,m,w)|0;if(!i)z=10}if((z|0)==10){z=0;if((l-e|0)<(m|0))break;l=l+(0-m)|0;i=l}d=c[(c[r>>2]|0)+(h<<2)>>2]|0;if(d>>>0<o>>>0&(d+m|0)>>>0>o>>>0){z=13;break}fw(i|0,d|0,m|0)|0;m=i-k|0;a[g>>0]=m>>>8;a[g+1>>0]=m;h=h+1|0;if((h|0)>=(v|0)){z=19;break}d=n+1|0;if((c[j+40+(n<<2)>>2]|0)>(h|0)){i=o;d=n}else i=c[j+16+(d<<2)>>2]|0;o=i;g=g+2|0;n=d}if((z|0)==13){c[y>>2]=32306;c[y+4>>2]=70190;c[y+8>>2]=31517;Db(11,32001,y)}else if((z|0)==19){c[f>>2]=l;z=0;Ra=A;return z|0}z=1;Ra=A;return z|0}function Uh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;t=w+4|0;u=w;v=f+12|0;n=f+8|0;h=c[n>>2]|0;do if(!(c[v>>2]|0)){m=c[h+28>>2]|0;l=((e[m+6>>1]|0)*40|0)+56|0;j=c[m+12>>2]|0;a:do if(!j){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;r=25;break}k=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){s=c[14978]|0;q=Tv(h|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=s>>>0)&1}h=Wa[c[29340>>2]&127](k)|0;if(h|0){i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;r=26}else r=26}}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[j+276>>1]|0)>>>0<l>>>0:0))){h=j+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];r=j+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break a}h=j+296|0;i=c[h>>2]|0;if(!i){h=j+292|0;break}else{c[h>>2]=c[i>>2];r=j+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break a}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}i=_d(j,l,0)|0;r=25}while(0);if((r|0)==25?i|0:0){h=i;r=26}if((r|0)==26){c[h+4>>2]=h+16;c[h>>2]=m;c[v>>2]=h;s=c[n>>2]|0;b[h+8>>1]=b[(c[s+28>>2]|0)+6>>1]|0;a[h+11>>0]=0;h=s;break}c[v>>2]=0;v=7;Ra=w;return v|0}while(0);l=c[g>>2]|0;r=a[h+60>>0]|0;s=f+32|0;c[s>>2]=r<<24>>24==1?78:r<<24>>24==2?76:77;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](256)|0;if(!h){v=7;Ra=w;return v|0}}else{h=Wa[c[29356>>2]&127](256)|0;if((c[14985]|0)>>>0<256)c[14985]=256;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;q=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=r>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){v=7;Ra=w;return v|0}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}gw(h|0,0,256)|0;if(l|0){q=g+4|0;k=l;j=l;while(1){i=c[q>>2]|0;if(i)if((j|0)==(i|0)){p=0;j=0}else{j=i+(c[k+4>>2]|0)|0;p=j}else{j=c[k+4>>2]|0;p=j}c[k+4>>2]=0;l=c[h>>2]|0;if(!l)i=h;else{o=0;i=h;do{c[t>>2]=0;c[u>>2]=0;m=t;b:while(1){n=l+8|0;while(1){if(($a[c[s>>2]&127](f,u,k+8|0,c[k>>2]|0,n,c[l>>2]|0)|0)>=1)break;c[m>>2]=k;m=k+4|0;k=c[m>>2]|0;if(!k){r=51;break b}}c[m>>2]=l;m=l+4|0;l=c[m>>2]|0;c[u>>2]=0;if(!l){r=53;break}}if((r|0)==51)c[m>>2]=l;else if((r|0)==53)c[m>>2]=k;k=c[t>>2]|0;c[i>>2]=0;o=o+1|0;i=h+(o<<2)|0;l=c[i>>2]|0}while((l|0)!=0)}c[i>>2]=k;if(!p)break;else k=p}}m=0;i=0;do{k=c[h+(m<<2)>>2]|0;if(k)if(!i)i=k;else{c[t>>2]=0;c[u>>2]=0;j=t;c:while(1){l=k+8|0;while(1){if(($a[c[s>>2]&127](f,u,i+8|0,c[i>>2]|0,l,c[k>>2]|0)|0)>=1)break;c[j>>2]=i;j=i+4|0;i=c[j>>2]|0;if(!i){r=63;break c}}c[j>>2]=k;j=k+4|0;k=c[j>>2]|0;c[u>>2]=0;if(!k){r=65;break}}if((r|0)==63)c[j>>2]=k;else if((r|0)==65)c[j>>2]=i;i=c[t>>2]|0}m=m+1|0}while((m|0)!=64);c[g>>2]=i;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}v=d[(c[v>>2]|0)+11>>0]|0;Ra=w;return v|0}function Vh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;t=x;a[b+56>>0]=1;e=b+64|0;w=b+36|0;g=b+72|0;f=b+104|0;if((c[f>>2]|0)==0?(d=Zh(c[(c[g>>2]|0)+24>>2]|0,f)|0,d|0):0){w=d;Ra=x;return w|0}d=Uh(e,w)|0;if(d|0){w=d;Ra=x;return w|0}k=c[f>>2]|0;j=c[(c[g>>2]|0)+12>>2]|0;v=b+112|0;h=v;g=c[h>>2]|0;h=c[h+4>>2]|0;i=((j|0)<0)<<31>>31;s=Sv(j|0,i|0,-1,-1)|0;r=L()|0;do if(r>>>0>0|(r|0)==0&s>>>0>2147483390){d=7;s=0;q=0;i=0;r=0;f=0;e=0}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](j)|0;if(!d){d=7;s=0;q=0;i=0;r=0;f=0;e=0;break}else e=d}else{d=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){s=c[14978]|0;r=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e){d=7;s=0;q=0;i=0;r=0;f=0;e=0;break}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}i=Zv(g|0,h|0,j|0,i|0)|0;L()|0;f=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;d=0;s=e;q=j;r=k;e=L()|0}while(0);g=b+92|0;c[g>>2]=(c[g>>2]|0)+1;g=c[b+44>>2]|0;h=((g|0)<0)<<31>>31;do if(g>>>0>=128)if(g>>>0>=16384){g=wh(t,g,h)|0;if((g|0)>0){u=22;break}else{h=i;g=i;break}}else{u=bw(g|0,h|0,7)|0;L()|0;a[t>>0]=u&255|-128;a[t+1>>0]=g&127;g=2;u=22;break}else{a[t>>0]=g&127;g=1;u=22}while(0);a:do if((u|0)==22){l=((q|0)<0)<<31>>31;k=g;h=i;while(1){if(d|0){g=i;break a}j=q-i|0;j=(k|0)>(j|0)?j:k;ew(s+i|0,t+(g-k)|0,j|0)|0;i=j+i|0;if((i|0)==(q|0)){i=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,l|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,i,d)|0;h=0;i=0}else d=0;k=k-j|0;if((k|0)<=0){g=i;break}}}while(0);i=c[w>>2]|0;if(i){p=((q|0)<0)<<31>>31;n=b+40|0;o=t+1|0;do{m=i;i=c[i+4>>2]|0;l=c[m>>2]|0;j=((l|0)<0)<<31>>31;do if(l>>>0>=128)if(l>>>0>=16384){j=wh(t,l,j)|0;if((j|0)>0){u=34;break}else break}else{j=bw(l|0,j|0,7)|0;L()|0;a[t>>0]=j&255|-128;j=2;k=o;u=33;break}else{j=1;k=t;u=33}while(0);if((u|0)==33){a[k>>0]=l&127;u=34}b:do if((u|0)==34){u=0;l=j;do{if(d|0)break b;k=q-g|0;k=(l|0)>(k|0)?k:l;ew(s+g|0,t+(j-l)|0,k|0)|0;g=k+g|0;if((g|0)==(q|0)){g=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,p|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,g,d)|0;h=0;g=0}else d=0;l=l-k|0}while((l|0)>0)}while(0);l=m+8|0;b=c[m>>2]|0;c:do if((b|0)>0){k=b;do{if(d|0)break c;j=q-g|0;j=(k|0)>(j|0)?j:k;ew(s+g|0,l+(b-k)|0,j|0)|0;g=j+g|0;if((g|0)==(q|0)){g=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,p|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,g,d)|0;h=0;g=0}else d=0;k=k-j|0}while((k|0)>0)}while(0);do if(!((m|0)==0|(c[n>>2]|0)!=0))if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{b=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0)}while((i|0)!=0)}c[w>>2]=0;if(d){t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u;if(!s){w=d;Ra=x;return w|0}}else{if(!s){t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u;w=0;Ra=x;return w|0}if((g|0)>(h|0)){w=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,g-h|0,w,d)|0}else d=0;t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u}if(!(c[7324]|0)){ab[c[29344>>2]&127](s);w=d;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);w=d;Ra=x;return w|0}return 0}function Wh(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=a[g+1>>0]|0;o=k&255;l=a[i+1>>0]|0;p=g+(d[g>>0]|0)|0;q=i+(d[i>>0]|0)|0;a:do if(k<<24>>24!=l<<24>>24){m=(k&255)>7;n=(l&255)>7;k=o-(l&255)|0;do if(!(m&n)){k=n?1:m?-1:k;if((k|0)<=0)if((a[q>>0]|0)<0){k=1;r=12;break a}else break;else{k=(a[p>>0]|0)<0?-1:k;break}}while(0);l=c[(c[b+8>>2]|0)+28>>2]|0;if(k){j=k;i=l;i=i+16|0;i=c[i>>2]|0;i=a[i>>0]|0;i=i<<24>>24==0;r=0-j|0;r=i?j:r;return r|0}}else{m=d[34845+o>>0]|0;b:do if((o+-1|0)>>>0<6){k=0;while(1){l=(d[p+k>>0]|0)-(d[q+k>>0]|0)|0;k=k+1|0;if(l|0)break;if(k>>>0>=m>>>0)break b}k=a[p>>0]|0;k=(a[q>>0]^k)<<24>>24<0?(((k&255)>>>6&2^2)&255)+-1|0:l;r=12;break a}while(0);l=c[(c[b+8>>2]|0)+28>>2]|0}while(0);if((r|0)==12){j=k;i=c[(c[b+8>>2]|0)+28>>2]|0;i=i+16|0;i=c[i>>2]|0;i=a[i>>0]|0;i=i<<24>>24==0;r=0-j|0;r=i?j:r;return r|0}if((e[l+6>>1]|0)<=1){r=0;return r|0}k=c[b+12>>2]|0;if(!(c[f>>2]|0)){_g(l,j,i,k);c[f>>2]=1}r=Fh(h,g,k,1)|0;return r|0}function Xh(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;p=s;r=g+(d[g>>0]|0)|0;q=i+(d[i>>0]|0)|0;k=g+1|0;o=a[k>>0]|0;l=o&255;do if(o<<24>>24<=-1){m=d[g+2>>0]|0;if(!(m&128)){o=l<<7&16256|m;break}n=d[g+3>>0]|0;if(!(n&128)){o=(l<<14|n)&2080895|m<<7&16256;break}else{Of(k,p)|0;n=p;o=c[n>>2]|0;o=((o|0)==(o|0)?0==(c[n+4>>2]|0):0)?o:-1;break}}else o=l;while(0);l=i+1|0;n=a[l>>0]|0;k=n&255;do if(n<<24>>24<=-1){m=d[i+2>>0]|0;if(!(m&128)){k=k<<7&16256|m;break}n=d[i+3>>0]|0;if(!(n&128)){k=(k<<14|n)&2080895|m<<7&16256;break}else{Of(l,p)|0;k=c[p>>2]|0;k=((k|0)==(k|0)?0==(c[p+4>>2]|0):0)?k:-1;break}}while(0);l=Lu(r,q,(((o|0)<(k|0)?o:k)+-13|0)/2|0)|0;m=o-k|0;if(!l){k=c[(c[b+8>>2]|0)+28>>2]|0;if(!m){if((e[k+6>>1]|0)<=1){j=0;Ra=s;return j|0}l=c[b+12>>2]|0;if(!(c[f>>2]|0)){_g(k,j,i,l);c[f>>2]=1}j=Fh(h,g,l,1)|0;Ra=s;return j|0}else l=m}else k=c[(c[b+8>>2]|0)+28>>2]|0;j=(a[c[k+16>>2]>>0]|0)==0?l:0-l|0;Ra=s;return j|0}function Yh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=c[a+12>>2]|0;if(!(c[b>>2]|0)){_g(c[(c[a+8>>2]|0)+28>>2]|0,g,f,h);c[b>>2]=1}return Fh(e,d,h,0)|0}function Zh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;i=j+8|0;h=j;d=c[7389]|0;if(d|0?Wa[d&127](202)|0:0){i=3338;Ra=j;return i|0}g=c[a>>2]|0;f=c[g+4>>2]|0;e=Sv(f|0,((f|0)<0)<<31>>31|0,-1,-1)|0;d=L()|0;do if(d>>>0>0|(d|0)==0&e>>>0>2147483390)a=7;else{if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](f)|0;if(!a){a=7;break}else d=a}else{a=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){k=c[14978]|0;e=Tv(d|0,e|0,a|0,((a|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=k>>>0)&1}d=Wa[c[29340>>2]&127](a)|0;if(!d){a=7;break}a=Wa[c[29352>>2]&127](d)|0;a=(c[14978]|0)+a|0;c[14978]=a;if(a>>>0>(c[14982]|0)>>>0)c[14982]=a;a=(c[14981]|0)+1|0;c[14981]=a;if(a>>>0>(c[14987]|0)>>>0)c[14987]=a}gw(d|0,0,f|0)|0;a=_a[c[g+24>>2]&127](g,0,d,4126,i)|0;if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}c[b>>2]=d;c[i>>2]=0;a=h;c[a>>2]=0;c[a+4>>2]=0;a=c[d>>2]|0;if(!a)a=0;else{Ya[c[a+40>>2]&127](d,18,h)|0;a=c[i>>2]|0}k=a;Ra=j;return k|0}while(0);c[i>>2]=a;k=a;Ra=j;return k|0}function _h(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;o=q;p=b+4|0;c[p>>2]=a;m=c[b>>2]|0;a:do if((m|0)>0){n=b+12|0;l=0;while(1){j=c[n>>2]|0;k=j+(l*56|0)|0;j=c[j+(l*56|0)+48>>2]|0;if(j|0){f=c[j>>2]|0;g=c[(c[f+8>>2]|0)+24>>2]|0;e=_h(f,c[j+4>>2]|0)|0;if(e|0){f=22;break}i=c[j+16>>2]|0;h=f+56|0;e=c[h>>2]|0;if(!e){f=f+64|0;e=Zh(g,h)|0;g=f;c[g>>2]=0;c[g+4>>2]=0;if(e|0){f=22;break}e=c[h>>2]|0;g=0;h=0}else{f=f+64|0;h=f;g=c[h>>2]|0;h=c[h+4>>2]|0}c[j+48>>2]=e;j=j+8|0;c[j>>2]=g;c[j+4>>2]=h;i=Sv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;e=f;c[e>>2]=i;c[e+4>>2]=j;e=ci(k)|0;if(e|0){f=22;break}}l=l+1|0;if((l|0)>=(m|0)){f=11;break}}if((f|0)==11){e=c[b>>2]|0;if((e|0)<=1)break;j=b+12|0;k=b+8|0;i=e;while(1){h=i+-1|0;e=(e|0)/2|0;if((i|0)>(e|0)){f=h-e<<1;e=f;f=f|1}else{n=c[k>>2]|0;f=h<<1;e=c[n+(f<<2)>>2]|0;f=c[n+((f|1)<<2)>>2]|0}g=c[j>>2]|0;if(c[g+(e*56|0)+24>>2]|0){if(c[g+(f*56|0)+24>>2]|0){n=c[p>>2]|0;c[o>>2]=0;n=($a[c[n+32>>2]&127](n,o,c[g+(e*56|0)+32>>2]|0,c[g+(e*56|0)+20>>2]|0,c[g+(f*56|0)+32>>2]|0,c[g+(f*56|0)+20>>2]|0)|0)<1;e=n?e:f}}else e=f;c[(c[k>>2]|0)+(h<<2)>>2]=e;if((i|0)<=2)break a;i=h;e=c[b>>2]|0}}else if((f|0)==22){Ra=q;return e|0}}while(0);p=d[(c[a+12>>2]|0)+11>>0]|0;Ra=q;return p|0}function $h(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;o=r;f=d;h=c[f>>2]|0;f=c[f+4>>2]|0;l=2;while(1)if((l|0)<(b|0))l=l<<1;else break;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](100)|0)!=0:0)q=17;else q=5;a:do if((q|0)==5){k=(l*60|0)+16|0;p=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;n=L()|0;if(!(n>>>0>0|(n|0)==0&p>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](k)|0;if(!g){q=17;break}else p=g}else{g=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){p=c[14978]|0;n=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=p>>>0)&1}i=Wa[c[29340>>2]&127](g)|0;if(!i){q=17;break}g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;p=i}else p=i}gw(p|0,0,k|0)|0;n=p+16|0;c[p>>2]=l;c[p+4>>2]=0;c[p+12>>2]=n;c[p+8>>2]=n+(l*56|0);c[e>>2]=p;n=(p|0)==0;g=n?7:0;i=n^1;b:do if((b|0)>0&i){l=p+12|0;m=a+40|0;j=0;while(1){i=c[l>>2]|0;k=i+(j*56|0)|0;g=ai(a,k,m,h,f)|0;if(g|0){q=21;break}g=o;c[g>>2]=0;c[g+4>>2]=0;g=bi(k,o)|0;s=k;h=o;s=Sv(c[h>>2]|0,c[h+4>>2]|0,c[s>>2]|0,c[s+4>>2]|0)|0;h=L()|0;f=i+(j*56|0)+8|0;i=f;c[i>>2]=s;c[i+4>>2]=h;if(g|0)break;g=ci(k)|0;h=c[f>>2]|0;f=c[f+4>>2]|0;j=j+1|0;i=(g|0)==0;if(!((j|0)<(b|0)&i)){q=25;break b}}if((q|0)==21)f=i+(j*56|0)+8|0;h=c[f>>2]|0;f=c[f+4>>2]|0}else q=25;while(0);do if((q|0)==25)if(!i)if(n)break a;else break;else{s=g;p=h;q=f;e=d;d=e;c[d>>2]=p;e=e+4|0;c[e>>2]=q;Ra=r;return s|0}while(0);if((c[p>>2]|0)>0){m=p+12|0;l=0;do{j=c[m>>2]|0;k=j+(l*56|0)|0;i=c[j+(l*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[j+(l*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[j+(l*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=k;j=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));l=l+1|0}while((l|0)<(c[p>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{s=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else q=17}while(0);if((q|0)==17){c[e>>2]=0;g=7}c[e>>2]=0;s=g;p=h;q=f;e=d;d=e;c[d>>2]=p;e=e+4|0;c[e>>2]=q;Ra=r;return s|0}function ai(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[7389]|0;if(g|0?Wa[g&127](201)|0:0){b=266;return b|0}h=b+44|0;if(c[h>>2]|0)c[h>>2]=0;n=b;c[n>>2]=e;c[n+4>>2]=f;n=d+8|0;l=c[n>>2]|0;n=c[n+4>>2]|0;k=b+8|0;i=k;c[i>>2]=l;c[i+4>>2]=n;i=c[d>>2]|0;j=b+24|0;c[j>>2]=i;d=a+8|0;g=c[d>>2]|0;a=c[(c[g+24>>2]|0)+156>>2]|0;m=((a|0)<0)<<31>>31;if(!((n|0)>(m|0)|(n|0)==(m|0)&l>>>0>a>>>0)?(c[c[i>>2]>>2]|0)>2:0){c[h>>2]=0;g=c[d>>2]|0}i=c[g+12>>2]|0;d=((i|0)<0)<<31>>31;e=Zv(e|0,f|0,i|0,d|0)|0;L()|0;h=b+36|0;g=c[h>>2]|0;if(!g){n=Sv(i|0,d|0,-1,-1)|0;m=L()|0;do if(!(m>>>0>0|(m|0)==0&n>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](i)|0;break}g=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;a=59064;d=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&d>>>0>0){n=c[14978]|0;m=Tv(d|0,a|0,g|0,((g|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){d=Wa[c[29352>>2]&127](g)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}else g=0}else g=0;while(0);c[h>>2]=g;c[b+40>>2]=i;d=(g|0)==0?7:0}else d=0;if(!((e|0)!=0&(d|0)==0)){n=d;return n|0}l=i-e|0;n=b;m=c[n>>2]|0;n=c[n+4>>2]|0;i=Sv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;h=L()|0;f=k;k=c[f>>2]|0;f=c[f+4>>2]|0;b=Tv(k|0,f|0,m|0,n|0)|0;L()|0;j=c[j>>2]|0;n=_a[c[(c[j>>2]|0)+8>>2]&127](j,g+e|0,(h|0)>(f|0)|(h|0)==(f|0)&i>>>0>k>>>0?b:l,m,n)|0;return n|0}function bi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;i=j;h=j+16|0;f=c[b+44>>2]|0;e=b;g=c[e>>2]|0;e=c[e+4>>2]|0;if(f|0){h=(Of(f+g|0,d)|0)&255;d=b;h=Sv(c[d>>2]|0,c[d+4>>2]|0,h|0,0)|0;d=L()|0;i=b;c[i>>2]=h;c[i+4>>2]=d;i=0;Ra=j;return i|0}f=c[b+40>>2]|0;e=Zv(g|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;L()|0;if((e|0)!=0&(f-e|0)>8){h=(Of((c[b+36>>2]|0)+e|0,d)|0)&255;d=b;h=Sv(c[d>>2]|0,c[d+4>>2]|0,h|0,0)|0;d=L()|0;i=b;c[i>>2]=h;c[i+4>>2]=d;i=0;Ra=j;return i|0}e=0;while(1){f=di(b,1,h)|0;if(f|0){e=9;break}g=a[c[h>>2]>>0]|0;a[i+(e&15)>>0]=g;if(g<<24>>24<0)e=e+1|0;else{e=8;break}}if((e|0)==8){Of(i,d)|0;i=0;Ra=j;return i|0}else if((e|0)==9){i=f;Ra=j;return i|0}return 0}function ci(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;g=i;f=g;c[f>>2]=0;c[f+4>>2]=0;f=a;d=c[f+4>>2]|0;h=a+8|0;e=c[h+4>>2]|0;do if(!((d|0)<(e|0)|((d|0)==(e|0)?(c[f>>2]|0)>>>0<(c[h>>2]|0)>>>0:0))){h=a+48|0;b=c[h>>2]|0;if(b){d=ei(b)|0;j=b+32|0;f=b+48|0;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];j=b+40|0;f=b+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if((c[j>>2]|0)==(e|0)?(c[j+4>>2]|0)==(f|0):0)c[b+20>>2]=1;if(!d)if(!(c[b+20>>2]|0)){b=ai(c[b>>2]|0,a,b+32|0,e,f)|0;if(!b)break;Ra=i;return b|0}else g=0;else g=d}else g=0;b=c[a+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+36>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);d=c[h>>2]|0;do if(d|0){e=c[d+4>>2]|0;do if(e|0){if((c[e>>2]|0)>0){f=e+12|0;b=0;do{yg((c[f>>2]|0)+(b*56|0)|0);b=b+1|0}while((b|0)<(c[e>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{j=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);b=a;d=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));j=g;Ra=i;return j|0}while(0);b=bi(a,g)|0;if(b|0){j=b;Ra=i;return j|0}j=c[g>>2]|0;c[a+20>>2]=j;j=di(a,j,a+32|0)|0;Ra=i;return j|0}function di(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;n=o;e=c[a+44>>2]|0;g=a;h=c[g>>2]|0;g=c[g+4>>2]|0;if(e|0){c[d>>2]=e+h;b=Sv(h|0,g|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;n=a;c[n>>2]=b;c[n+4>>2]=d;n=0;Ra=o;return n|0}m=a+40|0;e=c[m>>2]|0;f=((e|0)<0)<<31>>31;l=Zv(h|0,g|0,e|0,f|0)|0;L()|0;do if(!l){k=a+8|0;k=Tv(c[k>>2]|0,c[k+4>>2]|0,h|0,g|0)|0;j=L()|0;i=c[a+24>>2]|0;e=_a[c[(c[i>>2]|0)+8>>2]&127](i,c[a+36>>2]|0,(j|0)>(f|0)|(j|0)==(f|0)&k>>>0>e>>>0?e:k,h,g)|0;if(!e){e=c[m>>2]|0;break}else{n=e;Ra=o;return n|0}}while(0);k=e-l|0;if((k|0)>=(b|0)){c[d>>2]=(c[a+36>>2]|0)+l;d=a;b=Sv(c[d>>2]|0,c[d+4>>2]|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;n=a;c[n>>2]=b;c[n+4>>2]=d;n=0;Ra=o;return n|0}j=a+16|0;e=c[j>>2]|0;do if((e|0)<(b|0)){g=(e|0)<64;i=cw(e|0,((e|0)<0)<<31>>31|0,1)|0;h=L()|0;e=((b|0)<0)<<31>>31;h=g?0:h;i=g?128:i;while(1){f=cw(i|0,h|0,1)|0;g=L()|0;if((h|0)<(e|0)|(h|0)==(e|0)&i>>>0<b>>>0){h=g;i=f}else break}f=a+28|0;e=sb(c[f>>2]|0,i,h)|0;if(!e){n=7;Ra=o;return n|0}else{c[j>>2]=i;c[f>>2]=e;h=f;break}}else{e=a+28|0;h=e;e=c[e>>2]|0}while(0);ew(e|0,(c[a+36>>2]|0)+l|0,k|0)|0;j=a;j=Sv(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;l=L()|0;e=a;c[e>>2]=j;c[e+4>>2]=l;e=b-k|0;a:do if((e|0)>0){while(1){g=c[m>>2]|0;g=(e|0)>(g|0)?g:e;f=di(a,g,n)|0;if(f|0)break;ew((c[h>>2]|0)+(b-e)|0,c[n>>2]|0,g|0)|0;e=e-g|0;if((e|0)<=0)break a}n=f;Ra=o;return n|0}while(0);c[d>>2]=c[h>>2];n=0;Ra=o;return n|0}function ei(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+16|0;y=E+4|0;A=E;C=b+8|0;B=c[C>>2]|0;C=c[C+4>>2]|0;z=b+4|0;j=c[z>>2]|0;i=c[b+48>>2]|0;h=c[(c[(c[b>>2]|0)+8>>2]|0)+12>>2]|0;g=((h|0)<0)<<31>>31;x=Sv(h|0,g|0,-1,-1)|0;w=L()|0;do if(w>>>0>0|(w|0)==0&x>>>0>2147483390){d=7;x=0;v=0;e=0;w=0;g=0;f=0}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](h)|0;if(!d){d=7;x=0;v=0;e=0;w=0;g=0;f=0;break}else e=d}else{d=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){x=c[14978]|0;w=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=x>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e){d=7;x=0;v=0;e=0;w=0;g=0;f=0;break}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}w=Zv(B|0,C|0,h|0,g|0)|0;L()|0;g=Tv(B|0,C|0,w|0,((w|0)<0)<<31>>31|0)|0;d=0;x=e;v=h;e=w;w=i;f=L()|0}while(0);u=j+12|0;q=j+8|0;r=b+16|0;s=((v|0)<0)<<31>>31;t=y+1|0;i=e;h=e;while(1){n=c[u>>2]|0;o=c[(c[q>>2]|0)+4>>2]|0;p=c[n+(o*56|0)+20>>2]|0;if(!(c[n+(o*56|0)+24>>2]|0)){D=35;break}j=((h|0)<0)<<31>>31;k=((p|0)<0)<<31>>31;e=1;l=p;m=k;while(1){l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else e=e+1|0}l=Sv(g|0,f|0,h|0,j|0)|0;l=Sv(l|0,L()|0,p|0,k|0)|0;l=Sv(l|0,L()|0,e|0,0)|0;e=L()|0;m=c[r>>2]|0;m=Sv(B|0,C|0,m|0,((m|0)<0)<<31>>31|0)|0;j=L()|0;if((e|0)>(j|0)|(e|0)==(j|0)&l>>>0>m>>>0){D=35;break}do if(p>>>0>=128)if(p>>>0>=16384){e=wh(y,p,k)|0;if((e|0)>0){D=24;break}else break}else{e=bw(p|0,k|0,7)|0;L()|0;a[y>>0]=e&255|-128;e=2;j=t;D=23;break}else{e=1;j=y;D=23}while(0);if((D|0)==23){a[j>>0]=p&127;D=24}a:do if((D|0)==24){D=0;k=e;do{if(d|0)break a;j=v-h|0;j=(k|0)>(j|0)?j:k;ew(x+h|0,y+(e-k)|0,j|0)|0;h=j+h|0;if((h|0)==(v|0)){l=Sv(g|0,f|0,v|0,s|0)|0;m=L()|0;h=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,v-i|0,h,d)|0;i=0;h=0;g=l;f=m}else d=0;k=k-j|0}while((k|0)>0)}while(0);k=c[n+(o*56|0)+32>>2]|0;b:do if((p|0)>0){j=p;do{if(d|0)break b;e=v-h|0;e=(j|0)>(e|0)?e:j;ew(x+h|0,k+(p-j)|0,e|0)|0;h=e+h|0;if((h|0)==(v|0)){n=Sv(g|0,f|0,v|0,s|0)|0;o=L()|0;h=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,v-i|0,h,d)|0;i=0;h=0;g=n;f=o}else d=0;j=j-e|0}while((j|0)>0)}while(0);e=fi(c[z>>2]|0,A)|0;if(e){j=e;break}}if((D|0)==35)j=0;e=b+56|0;if(d){C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b;if(!x){D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}}else{if(!x){C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b;D=0;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}if((h|0)>(i|0)){D=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,h-i|0,D,d)|0}else d=0;C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b}if(!(c[7324]|0)){ab[c[29344>>2]&127](x);D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}else{D=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}return 0}function fi(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;k=q;l=a+8|0;f=c[(c[l>>2]|0)+4>>2]|0;p=c[a+4>>2]|0;n=a+12|0;e=ci((c[n>>2]|0)+(f*56|0)|0)|0;if(e|0){p=e;Ra=q;return p|0}c[k>>2]=0;e=c[n>>2]|0;a=(c[a>>2]|0)+f|0;if((a|0)>1){j=p+32|0;g=e+((f|1)*56|0)|0;f=e+((f&65534)*56|0)|0;h=a;do{i=h;h=(h|0)/2|0;e=f+24|0;do if(!(c[e>>2]|0))o=12;else{if((c[g+24>>2]|0?(m=$a[c[j>>2]&127](p,k,c[f+32>>2]|0,c[f+20>>2]|0,c[g+32>>2]|0,c[g+20>>2]|0)|0,(m|0)>=0):0)?!(f>>>0<g>>>0&(m|0)==0):0){if(!(c[e>>2]|0)){o=12;break}c[k>>2]=0;o=12;break}e=c[n>>2]|0;a=c[l>>2]|0;c[a+(h<<2)>>2]=(f-e|0)/56|0;g=e+((c[a+((h^1)<<2)>>2]|0)*56|0)|0;c[k>>2]=0}while(0);if((o|0)==12){o=0;e=c[n>>2]|0;a=c[l>>2]|0;c[a+(h<<2)>>2]=(g-e|0)/56|0;f=e+((c[a+((h^1)<<2)>>2]|0)*56|0)|0}}while((i|0)>3)}else a=c[l>>2]|0;c[b>>2]=(c[e+((c[a+4>>2]|0)*56|0)+24>>2]|0)==0&1;p=d[(c[p+12>>2]|0)+11>>0]|0;Ra=q;return p|0}function gi(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;j=n+32|0;i=n+24|0;h=n+16|0;g=n;k=c[b>>2]|0;do if(!(a[k+81>>0]|0)){m=b+4|0;if(c[c[m>>2]>>2]|0){Ra=n;return}if(!(c[b+16>>2]&1)){if(!(0==0?(c[k+32>>2]&1|0)==0:0)){c[g>>2]=32306;c[g+4>>2]=123725;c[g+8>>2]=31517;Db(11,32001,g);d=11;break}c[h>>2]=(d|0)==0?35133:d;d=dd(k,35135,h)|0;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[i>>2]=d;c[i+4>>2]=f;d=dd(k,35166,i)|0}c[c[m>>2]>>2]=d;c[j>>2]=32306;c[j+4>>2]=123732;c[j+8>>2]=31517;Db(11,32001,j);d=11;break}a:do if(!f)d=0;else{i=(Eu(f)|0)+1|0;b:do if(!k){k=Sv(i|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&k>>>0>2147483390){d=0;break a}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](i)|0;l=28;break}d=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){k=c[14978]|0;j=Tv(g|0,h|0,d|0,((d|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=k>>>0)&1}d=Wa[c[29340>>2]&127](d)|0;if(!d){d=0;break a}g=Wa[c[29352>>2]&127](d)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(!(c[k+272>>2]|0)){do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<i>>>0:0))){g=k+300|0;d=c[g>>2]|0;if(d|0){c[g>>2]=c[d>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=28;break b}g=k+296|0;d=c[g>>2]|0;if(!d){d=k+292|0;break}else{c[g>>2]=c[d>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=28;break b}}else d=k+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(k,i,0)|0;l=28}while(0);if((l|0)==28)if(!d){d=0;break}ew(d|0,f|0,i|0)|0}while(0);c[c[m>>2]>>2]=d;d=1}else d=7;while(0);c[b+12>>2]=d;Ra=n;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=c[b+20>>2]|0;if((q|0)<=0){r=0;return r|0}o=c[b+16>>2]|0;if(!f){b=0;while(1){g=ji((c[o+((b^b>>>0<2)<<4)+12>>2]|0)+24|0,e)|0;if(g|0)break;b=b+1|0;if((b|0)>=(q|0)){p=0;r=15;break}}if((r|0)==15)return p|0;r=g;return r|0}m=a[f>>0]|0;l=d[208+(m&255)>>0]|0;m=m<<24>>24==0;b=0;k=0;while(1){h=k^k>>>0<2;j=c[o+(h<<4)+12>>2]|0;h=c[o+(h<<4)>>2]|0;g=l-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(m|(g|0)!=0)){i=f;do{i=i+1|0;h=h+1|0;s=a[i>>0]|0;g=(d[208+(s&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(g|0)!=0))}if(!g){n=ji(j+24|0,e)|0;if(!n)b=n;else break}k=k+1|0;if((k|0)>=(q|0)){p=b;r=15;break}}if((r|0)==15)return p|0;s=n;return s|0}function ii(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;a:do switch(e<<24>>24){case 45:{e=1;f=b+1|0;g=15;break}case 43:{e=0;f=b+1|0;g=15;break}case 48:{switch(a[b+1>>0]|0){case 88:case 120:break;default:{h=0;e=48;break a}}e=b+2|0;f=a[e>>0]|0;if(!(a[880+(f&255)>>0]&8)){e=0;f=b;g=15}else{if(f<<24>>24==48){b=b+3|0;while(1){e=a[b>>0]|0;if(e<<24>>24==48)b=b+1|0;else{f=e;break}}}else b=e;if(!(a[880+(f&255)>>0]&8)){e=0;b=1}else{g=0;e=0;do{h=f<<24>>24;e=(0-(h>>>6&1)&9)+h&15|e<<4;g=g+1|0;f=a[b+g>>0]|0;h=a[880+(f&255)>>0]&8}while(g>>>0<8&h<<24>>24!=0);b=h<<24>>24==0}if(!((e|0)>-1&b)){d=0;return d|0}c[d>>2]=e;d=1;return d|0}break}default:h=0}while(0);if((g|0)==15){h=e;b=f;e=a[f>>0]|0}if(((e&255)+-48|0)>>>0>=10){d=0;return d|0}if(e<<24>>24==48)do{b=b+1|0;e=a[b>>0]|0}while(e<<24>>24==48);if((e+-48&255)<10){e=(e<<24>>24)+-48|0;g=((e|0)<0)<<31>>31;f=a[b+1>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+2>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+3>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+4>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+5>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+6>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+7>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+8>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+9>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;f=L()|0;if(((a[b+10>>0]|0)+-48&255)<10){d=0;return d|0}else b=f}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else{e=0;b=0}g=Tv(e|0,b|0,h|0,0)|0;f=L()|0;if((f|0)>0|(f|0)==0&g>>>0>2147483647){d=0;return d|0}c[d>>2]=(h|0)==0?e:0-e|0;d=1;return d|0}function ji(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=c[b+12>>2]|0;if(!i){g=b+4|0;f=b+8|0}else{g=a[e>>0]|0;if(!(g<<24>>24))f=0;else{f=0;h=e;do{h=h+1|0;f=G(f+(d[208+(g&255)>>0]|0)|0,-1640531535)|0;g=a[h>>0]|0}while(g<<24>>24!=0)}f=(f>>>0)%((c[b>>2]|0)>>>0)|0;g=i+(f<<3)|0;f=i+(f<<3)+4|0}g=c[g>>2]|0;if(!g){e=59292;e=e+8|0;e=c[e>>2]|0;return e|0}j=d[208+(d[e>>0]|0)>>0]|0;while(1){f=c[f>>2]|0;g=g+-1|0;b=c[f+12>>2]|0;i=a[b>>0]|0;h=(d[208+(i&255)>>0]|0)-j|0;if(!(i<<24>>24==0|(h|0)!=0)){i=e;do{b=b+1|0;i=i+1|0;k=a[b>>0]|0;h=(d[208+(k&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(h|0)!=0))}if(!h){g=14;break}if(!g){f=59292;g=14;break}}if((g|0)==14){k=f+8|0;k=c[k>>2]|0;return k|0}return 0}function ki(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+80|0;l=o;if(!h){Ra=o;return 0}i=c[h>>2]|0;if(!i){Ra=o;return 0}n=c[h+8>>2]|0;if(!n){Ra=o;return 0}k=c[f>>2]|0;j=c[f+4>>2]|0;m=Sd(k,i,j)|0;if(!m){Ra=o;return 0}h=c[h+4>>2]|0;a:do if(h|0){f=a[i>>0]|0;g=(d[208+(f&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(f<<24>>24==0|(g|0)!=0)){f=h;do{i=i+1|0;f=f+1|0;p=a[i>>0]|0;g=(d[208+(p&255)>>0]|0)-(d[208+(d[f>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(g|0)!=0))}if(!g){g=c[m+8>>2]|0;if(!g)break;while(1){f=g+55|0;f=d[f>>0]|d[f+1>>0]<<8;if((f&3)==2)break;g=c[g+20>>2]|0;if(!g)break a}h=g;i=g+55|0;g=f}else{g=hi(k,h,j)|0;if(!g)break;p=g+55|0;h=g;i=p;g=d[p>>0]|d[p+1>>0]<<8}p=(e[h+50>>1]|0)+1|0;g=g&-5;a[i>>0]=g;a[i+1>>0]=g>>8;g=h+8|0;li(n,p,c[g>>2]|0,h);p=d[i>>0]|d[i+1>>0]<<8|128;a[i>>0]=p;a[i+1>>0]=p>>8;if(c[h+36>>2]|0){Ra=o;return 0}b[m+44>>1]=b[c[g>>2]>>1]|0;p=m+36|0;c[p>>2]=c[p>>2]|16;Ra=o;return 0}while(0);p=m+46|0;k=l+48|0;b[k>>1]=b[p>>1]|0;li(n,1,m+44|0,l);b[p>>1]=b[k>>1]|0;p=m+36|0;c[p>>2]=c[p>>2]|16;Ra=o;return 0}function li(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=Ra;Ra=Ra+16|0;o=p;k=a[f>>0]|0;if((g|0)>0&k<<24>>24!=0){m=0;do{do if((k+-48&255)<10){j=0;do{j=(j*10|0)+-48+(k<<24>>24)|0;f=f+1|0;k=a[f>>0]|0}while((k+-48&255)<10);if(j>>>0>=8){if(j>>>0>255){l=40;k=0;do{l=(l&65535)+40|0;q=j;j=bw(j|0,k|0,4)|0;r=k;k=L()|0}while(r>>>0>0|(r|0)==0&q>>>0>4095);l=l&65535}else{l=40;k=0}if(k>>>0>0|(k|0)==0&j>>>0>15)do{l=(l&65535)+10&65535;r=j;j=bw(j|0,k|0,1)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>31)}else{if(j>>>0<2){j=0;break}l=40;k=0;do{l=(l&65535)+65526|0;j=cw(j|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&j>>>0<8);l=l&65535}j=(l&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535}else j=0;while(0);b[h+(m<<1)>>1]=j;f=(a[f>>0]|0)==32?f+1|0:f;m=m+1|0;k=a[f>>0]|0}while((m|0)<(g|0)&k<<24>>24!=0)}g=i+55|0;r=(d[g>>0]|d[g+1>>0]<<8)&-69;a[g>>0]=r;a[g+1>>0]=r>>8;if(!(a[f>>0]|0)){Ra=p;return}m=i+48|0;do{do if(!(md(35228,f,31411,91)|0)){r=d[g>>0]|d[g+1>>0]<<8|4;a[g>>0]=r;a[g+1>>0]=r>>8}else{if(md(35239,f,31411,91)|0){if(md(35249,f,31411,91)|0)break;r=d[g>>0]|d[g+1>>0]<<8|64;a[g>>0]=r;a[g+1>>0]=r>>8;break}c[o>>2]=0;ii(f+3|0,o)|0;j=c[o>>2]|0;k=((j|0)<0)<<31>>31;if(j>>>0<8)if(j>>>0<2)j=0;else{l=40;do{l=(l&65535)+65526|0;j=cw(j|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&j>>>0<8);l=l&65535;n=39}else{if(j>>>0>255){l=40;do{l=(l&65535)+40|0;r=j;j=bw(j|0,k|0,4)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>4095);l=l&65535}else l=40;if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;r=j;j=bw(j|0,k|0,1)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>31);n=39}else n=39}if((n|0)==39){n=0;j=(l&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535}b[m>>1]=j}while(0);a:while(1){j=a[f>>0]|0;switch(j<<24>>24){case 32:{n=45;break a}case 0:break a;default:{}}f=f+1|0}if((n|0)==45){n=0;do{f=f+1|0;j=a[f>>0]|0}while(j<<24>>24==32)}}while(j<<24>>24!=0);Ra=p;return}function mi(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=b+12|0;o=c[t>>2]|0;n=(o|0)==0;if(n){h=0;g=b+4|0;i=b+8|0}else{h=a[e>>0]|0;if(!(h<<24>>24))g=0;else{g=0;i=e;do{i=i+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[i>>0]|0}while(h<<24>>24!=0)}i=(g>>>0)%((c[b>>2]|0)>>>0)|0;h=i;g=o+(i<<3)|0;i=o+(i<<3)+4|0}g=c[g>>2]|0;a:do if(!g)k=59292;else{m=d[208+(d[e>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;g=g+-1|0;k=c[i+12>>2]|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-m|0;if(!(r<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j){k=i;break a}if(!g){k=59292;break}}}while(0);g=k+8|0;l=c[g>>2]|0;i=(f|0)==0;if(l|0){if(!i){c[g>>2]=f;c[k+12>>2]=e;b=l;return b|0}e=c[k+4>>2]|0;g=c[k>>2]|0;if(!e){c[b+8>>2]=g;i=g;j=g}else{c[e>>2]=g;j=c[k>>2]|0;i=j}if(i|0)c[i+4>>2]=e;if(!n){g=o+(h<<3)+4|0;if((c[g>>2]|0)==(k|0))c[g>>2]=j;s=o+(h<<3)|0;c[s>>2]=(c[s>>2]|0)+-1}if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}e=b+4|0;s=(c[e>>2]|0)+-1|0;c[e>>2]=s;if(s|0){b=l;return b|0}h=b+8|0;g=c[h>>2]|0;c[h>>2]=0;h=c[t>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[t>>2]=0;c[b>>2]=0;if(g|0)do{h=g;g=c[g>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);c[e>>2]=0;b=l;return b|0}if(i){b=0;return b|0}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](16)|0;if(!g){b=f;return b|0}else r=g}else{g=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;o=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=r>>>0)&1}i=Wa[c[29340>>2]&127](g)|0;if(!i){b=f;return b|0}g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;r=i}else r=i}c[r+12>>2]=e;c[r+8>>2]=f;f=b+4|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if((g>>>0>9?(p=c[b>>2]|0,g>>>0>p<<1>>>0):0)?(q=g<<4>>>0>1024?128:g<<1,(q|0)!=(p|0)):0){g=q<<3;q=Sv(g|0,0,-1,-1)|0;p=L()|0;do if(!(p>>>0>0|(p|0)==0&q>>>0>2147483390)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](g)|0;break}j=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;i=59064;g=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&g>>>0>0){q=c[14978]|0;p=Tv(g|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&p>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(i){g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else i=0}else i=0;while(0);if(i){g=c[t>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[t>>2]=i;o=Wa[c[29352>>2]&127](i)|0;n=o>>>3;c[b>>2]=n;gw(i|0,0,o&-8|0)|0;o=b+8|0;g=c[o>>2]|0;c[o>>2]=0;if(g|0){j=0;while(1){k=c[g+12>>2]|0;l=a[k>>0]|0;if(!(l<<24>>24))h=0;else{h=0;do{k=k+1|0;h=G(h+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[k>>0]|0}while(l<<24>>24!=0)}k=(h>>>0)%(n>>>0)|0;h=g;g=c[g>>2]|0;l=i+(k<<3)|0;do if(l){m=c[l>>2]|0;if(!m){c[l>>2]=1;c[i+(k<<3)+4>>2]=h;s=86;break}q=i+(k<<3)+4|0;k=c[q>>2]|0;c[l>>2]=m+1;c[q>>2]=h;if(k){c[h>>2]=k;l=k+4|0;c[h+4>>2]=c[l>>2];k=c[l>>2]|0;if(!k){c[o>>2]=h;j=h}else c[k>>2]=h;c[l>>2]=h;h=j}else s=86}else s=86;while(0);if((s|0)==86){s=0;c[h>>2]=j;if(j|0)c[j+4>>2]=h;c[h+4>>2]=0;c[o>>2]=h}if(!g)break;else j=h}}h=a[e>>0]|0;if(!(h<<24>>24))g=0;else{g=0;do{e=e+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[e>>0]|0}while(h<<24>>24!=0)}h=(g>>>0)%((c[b>>2]|0)>>>0)|0}}g=c[t>>2]|0;e=g+(h<<3)|0;do if(!((g|0)==0|(e|0)==0)){i=c[e>>2]|0;if(!i){c[e>>2]=1;c[g+(h<<3)+4>>2]=r;break}t=g+(h<<3)+4|0;g=c[t>>2]|0;c[e>>2]=i+1;c[t>>2]=r;if(g|0){c[r>>2]=g;t=g+4|0;c[r+4>>2]=c[t>>2];s=c[t>>2]|0;c[((s|0)==0?b+8|0:s)>>2]=r;c[t>>2]=r;b=0;return b|0}}while(0);g=b+8|0;h=c[g>>2]|0;c[r>>2]=h;if(h|0)c[h+4>>2]=r;c[r+4>>2]=0;c[g>>2]=r;b=0;return b|0}function ni(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+4|0;e=c[f>>2]|0;if(!(e&8404992)){e=c[d+12>>2]|0;if(e|0?(a[d>>0]|0)!=-86:0)ni(b,e);e=c[d+16>>2]|0;do if(!e){e=d+20|0;if(!(c[f>>2]&2048)){e=c[e>>2]|0;if(!e)break;ri(b,e);break}else{e=c[e>>2]|0;if(!e)break;pi(b,e,1);break}}else ni(b,e);while(0);e=c[f>>2]|0;if(e&16777216){oi(b,c[d+44>>2]|0);e=c[f>>2]|0}}do if(e&65536|0?(g=c[d+8>>2]|0,g|0):0){if(b|0){if(c[b+480>>2]|0){Xd(b,g);break}e=g;if((c[b+304>>2]|0)>>>0<=e>>>0?(c[b+308>>2]|0)>>>0>e>>>0:0){e=b+300|0;c[g>>2]=c[e>>2];c[e>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{e=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);if(c[f>>2]&134217728|0)return;if(b|0){if(c[b+480>>2]|0){Xd(b,d);return}g=d;if((c[b+304>>2]|0)>>>0<=g>>>0?(c[b+308>>2]|0)>>>0>g>>>0:0){g=b+300|0;c[d>>2]=c[g>>2];c[g>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{g=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function oi(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)return;d=c[b+36>>2]|0;if(d|0)ni(a,d);d=c[b+8>>2]|0;if(d|0)ri(a,d);d=c[b+12>>2]|0;if(d|0)ri(a,d);d=c[b+28>>2]|0;if(d|0)ni(a,d);d=c[b+24>>2]|0;if(d|0)ni(a,d);d=c[b>>2]|0;do if(d|0){if(a|0){if(c[a+480>>2]|0){Xd(a,d);break}e=d;if((c[a+304>>2]|0)>>>0<=e>>>0?(c[a+308>>2]|0)>>>0>e>>>0:0){e=a+300|0;c[d>>2]=c[e>>2];c[e>>2]=d;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);d=c[b+4>>2]|0;a:do if(d){do if(a|0){if(!(c[a+480>>2]|0)){e=d;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[d>>2]=c[e>>2];c[e>>2]=d}else Xd(a,d);d=b;e=34;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);e=33;break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);e=33;break}}else e=33;while(0);if((e|0)==33)if(a){d=b;e=34}if((e|0)==34){if(c[a+480>>2]|0){Xd(a,d);return}e=b;if((c[a+304>>2]|0)>>>0<=e>>>0?(c[a+308>>2]|0)>>>0>e>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}else b=d}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function pi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!b)return;j=(a|0)==0;k=a+480|0;l=a+304|0;m=a+308|0;n=a+300|0;while(1){i=b;b=c[b+52>>2]|0;e=c[i>>2]|0;if(e|0)ri(a,e);qi(a,c[i+32>>2]|0);e=c[i+36>>2]|0;if(e|0)ni(a,e);e=c[i+40>>2]|0;if(e|0)ri(a,e);e=c[i+44>>2]|0;if(e|0)ni(a,e);e=c[i+48>>2]|0;if(e|0)ri(a,e);e=c[i+60>>2]|0;if(e|0)ni(a,e);e=c[i+72>>2]|0;if(e|0)do{h=e;e=c[e+32>>2]|0;oi(a,h)}while((e|0)!=0);h=c[i+64>>2]|0;do if(h|0){a:do if((c[h>>2]|0)>0){if(j){f=0;while(1){e=c[h+8+(f<<4)+4>>2]|0;if(e|0)ri(0,e);e=c[h+8+(f<<4)+8>>2]|0;if(e|0)pi(0,e,1);e=c[h+8+(f<<4)>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{g=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);f=f+1|0;if((f|0)>=(c[h>>2]|0))break a}}g=0;do{e=c[h+8+(g<<4)+4>>2]|0;if(e|0)ri(a,e);e=c[h+8+(g<<4)+8>>2]|0;if(e|0)pi(a,e,1);e=c[h+8+(g<<4)>>2]|0;b:do if(e|0){if(c[k>>2]|0){Xd(a,e);break}f=e;do if((c[l>>2]|0)>>>0<=f>>>0){if((c[m>>2]|0)>>>0<=f>>>0)break;c[e>>2]=c[n>>2];c[n>>2]=e;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);g=g+1|0}while((g|0)<(c[h>>2]|0))}while(0);if(!j){if(c[k>>2]|0){Xd(a,h);break}g=h;if((c[l>>2]|0)>>>0<=g>>>0?(c[m>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[n>>2];c[n>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(d|0){if(!j){if(c[k>>2]|0){Xd(a,i);break}h=i;if((c[l>>2]|0)>>>0<=h>>>0?(c[m>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!b)break;else d=1}return}function qi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(!d)return;if((c[d>>2]|0)>0){n=(b|0)==0;o=b+480|0;q=b+304|0;r=b+308|0;l=b+300|0;j=0;k=d+8|0;while(1){e=c[k+4>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[k+8>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[k+12>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=k+37|0;do if(a[e>>0]&2?(p=c[k+64>>2]|0,p|0):0){if(!n){if(c[o>>2]|0){Xd(b,p);break}i=p;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[p>>2]=c[l>>2];c[l>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{i=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);if(a[e>>0]&4?(m=c[k+64>>2]|0,m|0):0)ri(b,m);e=c[k+16>>2]|0;do if(e|0){if(!n?c[o>>2]|0:0){Vi(b,e);break}h=e+32|0;i=(c[h>>2]|0)+-1|0;c[h>>2]=i;if(!i)Vi(b,e)}while(0);e=c[k+20>>2]|0;if(e|0)pi(b,e,1);e=c[k+44>>2]|0;if(e|0)ni(b,e);e=c[k+48>>2]|0;do if(e|0){i=e+4|0;f=c[e>>2]|0;a:do if((c[i>>2]|0)>0){if(n){g=0;while(1){f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[e>>2]|0;if((g|0)>=(c[i>>2]|0))break a}}h=0;do{f=c[f+(h<<3)>>2]|0;b:do if(f|0){if(c[o>>2]|0){Xd(b,f);break}g=f;do if((c[q>>2]|0)>>>0<=g>>>0){if((c[r>>2]|0)>>>0<=g>>>0)break;c[f>>2]=c[l>>2];c[l>>2]=f;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{g=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);h=h+1|0;f=c[e>>2]|0}while((h|0)<(c[i>>2]|0))}while(0);c:do if(f){do if(!n){if(!(c[o>>2]|0)){g=f;if((c[q>>2]|0)>>>0>g>>>0)break;if((c[r>>2]|0)>>>0<=g>>>0)break;c[f>>2]=c[l>>2];c[l>>2]=f}else Xd(b,f);f=90;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);f=89;break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);f=89;break}}else f=89;while(0);if((f|0)==89){f=0;if(!n)f=90}if((f|0)==90){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);j=j+1|0;if((j|0)>=(c[d>>2]|0))break;else k=k+72|0}}if(b|0){if(c[b+480>>2]|0){Xd(b,d);return}r=d;if((c[b+304>>2]|0)>>>0<=r>>>0?(c[b+308>>2]|0)>>>0>r>>>0:0){r=b+300|0;c[d>>2]=c[r>>2];c[r>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{r=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function ri(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[b>>2]|0;d=b+4|0;g=(a|0)==0;h=a+480|0;i=a+304|0;j=a+308|0;k=a+300|0;if(g){f=e;while(1){e=c[d>>2]|0;if(e|0)ni(0,e);e=c[d+4>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[d+8>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);if((f|0)>1){d=d+20|0;f=f+-1|0}else break}}else{f=e;while(1){e=c[d>>2]|0;if(e|0)ni(a,e);e=c[d+4>>2]|0;do if(e|0){if(c[h>>2]|0){Xd(a,e);break}l=e;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[e>>2]=c[k>>2];c[k>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[d+8>>2]|0;do if(e|0){if(c[h>>2]|0){Xd(a,e);break}l=e;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[e>>2]=c[k>>2];c[k>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if((f|0)>1){d=d+20|0;f=f+-1|0}else break}}if(!g){if(c[h>>2]|0){Xd(a,b);return}l=b;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{l=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function si(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+176|0;O=P+144|0;I=P+120|0;H=P+112|0;G=P+104|0;F=P+96|0;E=P+72|0;D=P+64|0;C=P+56|0;B=P+32|0;K=P+24|0;J=P+16|0;A=P+8|0;z=P;w=P+164|0;x=P+160|0;y=P+156|0;M=e+20|0;N=c[M>>2]|0;a:do if(!g)i=h;else{r=e+16|0;s=e+12|0;q=e+8|0;t=e+4|0;u=(f|0)==0;v=e+24|0;i=h;while(1){if(!(c[r>>2]|0))break a;if((g+-1|0)>>>0>=(c[s>>2]|0)>>>0){L=5;break}j=(c[q>>2]|0)+(g>>>3)|0;k=d[j>>0]|0;l=1<<(g&7);if(l&k|0){L=7;break}a[j>>0]=l|k;o=i+-1|0;p=c[t>>2]|0;if(Za[c[p+204>>2]&127](p,g,y,0)|0){L=9;break}p=c[(c[y>>2]|0)+4>>2]|0;do if(u){i=c[e>>2]|0;if((o|0)!=0&(a[i+17>>0]|0)!=0){k=d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0];i=eg(i,k,w,x)|0;b:do if((i|0)<7){switch(i|0){case 0:break;default:{L=40;break b}}i=a[w>>0]|0;j=c[x>>2]|0;if(!(i<<24>>24==4&(j|0)==(g|0))){c[I>>2]=k;c[I+4>>2]=4;c[I+8>>2]=g;c[I+12>>2]=i&255;c[I+16>>2]=j;ti(e,35625,I)}}else{if((i|0)<3082)switch(i|0){case 7:break;default:{L=40;break b}}else switch(i|0){case 3082:break;default:{L=40;break b}}c[v>>2]=1;L=40}while(0);if((L|0)==40){L=0;c[H>>2]=k;ti(e,35596,H)}i=o}else i=o}else{n=d[p+5>>0]<<16|d[p+4>>0]<<24|d[p+6>>0]<<8|d[p+7>>0];j=c[e>>2]|0;if(a[j+17>>0]|0){j=eg(j,g,w,x)|0;c:do if((j|0)<7){switch(j|0){case 0:break;default:{L=14;break c}}j=a[w>>0]|0;k=c[x>>2]|0;if(!(j<<24>>24==2&(k|0)==0)){c[B>>2]=g;c[B+4>>2]=2;c[B+8>>2]=0;c[B+12>>2]=j&255;c[B+16>>2]=k;ti(e,35625,B)}}else{if((j|0)<3082)switch(j|0){case 7:break;default:{L=14;break c}}else switch(j|0){case 3082:break;default:{L=14;break c}}c[v>>2]=1;L=14}while(0);if((L|0)==14){L=0;c[K>>2]=g;ti(e,35596,K)}j=c[e>>2]|0}if(n>>>0>(((c[j+36>>2]|0)>>>2)+-2|0)>>>0){c[C>>2]=g;ti(e,35455,C);i=i+-2|0;break}d:do if((n|0)>0){i=0;while(1){m=p+((i<<2)+8)|0;l=d[m+3>>0]|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|l;if(a[j+17>>0]|0){g=eg(j,m,w,x)|0;e:do if((g|0)<7){switch(g|0){case 0:break;default:{L=25;break e}}j=a[w>>0]|0;g=c[x>>2]|0;if(!(j<<24>>24==2&(g|0)==0)){c[E>>2]=m;c[E+4>>2]=2;c[E+8>>2]=0;c[E+12>>2]=j&255;c[E+16>>2]=g;ti(e,35625,E)}}else{if((g|0)<3082)switch(g|0){case 7:break;default:{L=25;break e}}else switch(g|0){case 3082:break;default:{L=25;break e}}c[v>>2]=1;L=25}while(0);if((L|0)==25){L=0;c[D>>2]=m;ti(e,35596,D)}}do if((m+-1|0)>>>0<(c[s>>2]|0)>>>0){j=(c[q>>2]|0)+(m>>>3)|0;k=d[j>>0]|0;g=1<<(l&7);if(!(g&k)){a[j>>0]=g|k;break}else{c[G>>2]=m;ti(e,35569,G);break}}else{c[F>>2]=m;ti(e,35546,F)}while(0);i=i+1|0;if((i|0)==(n|0))break d;j=c[e>>2]|0}}while(0);i=o-n|0}while(0);g=d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0];j=c[y>>2]|0;do if(j|0)if(!(b[j+28>>1]&32)){Df(j);break}else{p=c[j+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[j+16>>2]=c[p>>2];c[p>>2]=j;break}while(0);if(!g)break a}if((L|0)==5){c[z>>2]=g;ti(e,35546,z)}else if((L|0)==7){c[A>>2]=g;ti(e,35569,A)}else if((L|0)==9){c[J>>2]=g;ti(e,35433,J);i=o}}while(0);if(!i){Ra=P;return}if((N|0)!=(c[M>>2]|0)){Ra=P;return}c[O>>2]=(f|0)==0?35525:35520;c[O+4>>2]=h-i;c[O+8>>2]=h;ti(e,35494,O);Ra=P;return}function ti(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;i=j+16|0;h=j;f=b+16|0;g=c[f>>2]|0;if(!g){Ra=j;return}c[f>>2]=g+-1;f=b+20|0;c[f>>2]=(c[f>>2]|0)+1;c[h>>2]=e;f=b+40|0;if(c[b+56>>2]|0)ub(f,35594,1);g=c[b+28>>2]|0;if(g|0){e=c[b+36>>2]|0;c[i>>2]=c[b+32>>2];c[i+4>>2]=e;Eb(f,g,i)}tb(f,d,h);if((a[b+60>>0]|0)!=7){Ra=j;return}c[b+24>>2]=1;Ra=j;return}function ui(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;ma=Ra;Ra=Ra+240|0;fa=ma+216|0;da=ma+208|0;U=ma+200|0;T=ma+176|0;S=ma+168|0;R=ma+144|0;Q=ma+136|0;P=ma+128|0;O=ma+120|0;N=ma+104|0;t=ma+80|0;s=ma+72|0;q=ma+64|0;p=ma+56|0;o=ma+48|0;n=ma+40|0;k=ma+32|0;K=ma+232|0;L=ma+228|0;W=ma+24|0;M=ma;ga=W;c[ga>>2]=i;c[ga+4>>2]=j;ga=f+28|0;ha=c[ga>>2]|0;ia=f+32|0;ja=c[ia>>2]|0;ka=f+36|0;la=c[ka>>2]|0;u=c[f>>2]|0;ea=c[u+36>>2]|0;if(!g){la=0;Ra=ma;return la|0}if((g+-1|0)>>>0>=(c[f+12>>2]|0)>>>0){c[k>>2]=g;ti(f,35546,k);la=0;Ra=ma;return la|0}k=(c[f+8>>2]|0)+(g>>>3)|0;l=d[k>>0]|0;m=1<<(g&7);if(m&l|0){c[n>>2]=g;ti(f,35569,n);la=0;Ra=ma;return la|0}a[k>>0]=m|l;c[ga>>2]=35679;c[ia>>2]=g;k=c[u>>2]|0;k=Za[c[k+204>>2]&127](k,g,K,0)|0;a:do if(!k){k=c[K>>2]|0;ca=c[k+8>>2]|0;l=ca+4|0;if((c[l>>2]|0)!=(g|0)){c[ca+56>>2]=c[k+4>>2];c[ca+72>>2]=k;c[ca+52>>2]=u;c[l>>2]=g;a[ca+9>>0]=(g|0)==1?100:0}J=a[ca>>0]|0;a[ca>>0]=0;k=Gf(ca)|0;do if(!k){k=Jh(ca)|0;if(k|0){c[q>>2]=k;ti(f,35765,q);k=-1;break}aa=c[ca+56>>2]|0;ba=d[ca+9>>0]|0;c[ga>>2]=35787;l=aa+(ba+5)|0;l=(d[l>>0]<<8|d[l+1>>0])+65535&65535;H=l+1|0;o=aa+(ba+3)|0;o=d[o>>0]<<8|d[o+1>>0];I=ca+8|0;G=a[I>>0]|0;X=ba+12-((G&255)<<2)|0;r=o+-1|0;p=aa+(X+(r<<1))|0;if(!(G<<24>>24)){n=aa+(ba+8)|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];if(a[u+17>>0]|0){c[ga>>2]=35813;k=eg(c[f>>2]|0,n,K,L)|0;b:do if((k|0)<7){switch(k|0){case 0:break;default:{V=18;break b}}k=a[K>>0]|0;m=c[L>>2]|0;if(!(k<<24>>24==5&(m|0)==(g|0))){c[t>>2]=n;c[t+4>>2]=5;c[t+8>>2]=g;c[t+12>>2]=k&255;c[t+16>>2]=m;ti(f,35625,t)}}else{if((k|0)<3082)switch(k|0){case 7:break;default:{V=18;break b}}else switch(k|0){case 3082:break;default:{V=18;break b}}c[f+24>>2]=1;V=18}while(0);if((V|0)==18){c[s>>2]=n;ti(f,35596,s)}}k=ui(f,n,W,i,j)|0;n=0;i=0}else{i=c[f+64>>2]|0;c[i>>2]=0;k=-1;n=1}F=f+16|0;G=(o|0)==0;if(!G){y=ea+-4|0;z=ca+80|0;A=M+18|0;B=ca+2|0;C=M+12|0;D=M+16|0;E=ea+-5|0;w=u+17|0;x=f+24|0;v=r;m=1;u=p;while(1){if(!(c[F>>2]|0))break;c[ka>>2]=v;j=d[u>>0]<<8|d[u+1>>0];u=u+-2|0;c:do if(j>>>0<=l>>>0|j>>>0>y>>>0){c[N>>2]=j;c[N+4>>2]=H;c[N+8>>2]=y;ti(f,35841,N);m=0}else{t=aa+j|0;cb[c[z>>2]&255](ca,t,M);if((j+(e[A>>1]|0)|0)>>>0>ea>>>0){ti(f,35871,O);m=0;break}if(a[B>>0]|0){s=M;o=c[s>>2]|0;s=c[s+4>>2]|0;q=W;p=c[q>>2]|0;q=c[q+4>>2]|0;if(!n)if((s|0)<(q|0)|(s|0)==(q|0)&o>>>0<p>>>0)n=s;else V=36;else if((s|0)>(q|0)|(s|0)==(q|0)&o>>>0>p>>>0)V=36;else n=s;if((V|0)==36){V=0;n=P;c[n>>2]=o;c[n+4>>2]=s;ti(f,35895,P);n=M;o=c[n>>2]|0;n=c[n+4>>2]|0}s=W;c[s>>2]=o;c[s+4>>2]=n;n=0}o=c[C>>2]|0;p=e[D>>1]|0;if(o>>>0>p>>>0){q=((E+o-p|0)>>>0)/(y>>>0)|0;s=t+((e[A>>1]|0)+-4)|0;s=d[s+1>>0]<<16|d[s>>0]<<24|d[s+2>>0]<<8|d[s+3>>0];if(a[w>>0]|0){o=eg(c[f>>2]|0,s,K,L)|0;d:do if((o|0)<7){switch(o|0){case 0:break;default:{V=42;break d}}o=a[K>>0]|0;p=c[L>>2]|0;if(o<<24>>24==3&(p|0)==(g|0))break;c[R>>2]=s;c[R+4>>2]=3;c[R+8>>2]=g;c[R+12>>2]=o&255;c[R+16>>2]=p;ti(f,35625,R)}else{if((o|0)<3082)switch(o|0){case 7:break;default:{V=42;break d}}else switch(o|0){case 3082:break;default:{V=42;break d}}c[x>>2]=1;V=42}while(0);if((V|0)==42){V=0;c[Q>>2]=s;ti(f,35596,Q)}}si(f,0,s,q)}if(a[I>>0]|0){p=j+-1+(e[A>>1]|0)|j<<16;o=(c[i>>2]|0)+1|0;c[i>>2]=o;c[i+(o<<2)>>2]=p;q=o>>>1;if(!q)break;s=i+(q<<2)|0;j=c[s>>2]|0;if(j>>>0<=p>>>0)break;while(1){c[s>>2]=p;c[i+(o<<2)>>2]=j;o=q>>>1;if(!o)break c;p=c[s>>2]|0;s=i+(o<<2)|0;j=c[s>>2]|0;if(j>>>0<=p>>>0)break c;else{t=q;q=o;o=t}}}p=d[t+1>>0]<<16|d[t>>0]<<24|d[t+2>>0]<<8|d[t+3>>0];if(a[w>>0]|0){n=eg(c[f>>2]|0,p,K,L)|0;e:do if((n|0)<7){switch(n|0){case 0:break;default:{V=51;break e}}n=a[K>>0]|0;o=c[L>>2]|0;if(n<<24>>24==5&(o|0)==(g|0))break;c[T>>2]=p;c[T+4>>2]=5;c[T+8>>2]=g;c[T+12>>2]=n&255;c[T+16>>2]=o;ti(f,35625,T)}else{if((n|0)<3082)switch(n|0){case 7:break;default:{V=51;break e}}else switch(n|0){case 3082:break;default:{V=51;break e}}c[x>>2]=1;V=51}while(0);if((V|0)==51){V=0;c[S>>2]=p;ti(f,35596,S)}}n=W;n=ui(f,p,W,c[n>>2]|0,c[n+4>>2]|0)|0;if((n|0)==(k|0)){n=0;break}ti(f,35919,U);k=n;n=0}while(0);if((v|0)<=0)break;else v=v+-1|0}U=W;V=c[U+4>>2]|0;W=h;c[W>>2]=c[U>>2];c[W+4>>2]=V;c[ga>>2]=0;if(!m){a[ca>>0]=J;break}}else{U=W;V=c[U+4>>2]|0;W=h;c[W>>2]=c[U>>2];c[W+4>>2]=V;c[ga>>2]=0}f:do if((c[F>>2]|0)>0){if(!(a[I>>0]|0)){i=c[f+64>>2]|0;c[i>>2]=0;if(!G){s=ca+76|0;while(1){n=aa+((r<<1)+X)|0;n=d[n>>0]<<8|d[n+1>>0];n=n+-1+((Xa[c[s>>2]&255](ca,aa+n|0)|0)&65535)|n<<16;m=(c[i>>2]|0)+1|0;c[i>>2]=m;c[i+(m<<2)>>2]=n;o=m>>>1;g:do if(o|0?(Y=i+(o<<2)|0,Z=c[Y>>2]|0,Z>>>0>n>>>0):0){p=Y;q=Z;while(1){c[p>>2]=n;c[i+(m<<2)>>2]=q;m=o>>>1;if(!m)break g;n=c[p>>2]|0;p=i+(m<<2)|0;q=c[p>>2]|0;if(q>>>0<=n>>>0)break;else{W=o;o=m;m=W}}}while(0);if((r|0)>0)r=r+-1|0;else break}}}m=aa+(ba+1)|0;m=d[m>>0]<<8|d[m+1>>0];if(m|0)do{o=aa+(m+2)|0;o=m+-1+(d[o>>0]<<8|d[o+1>>0])|m<<16;n=(c[i>>2]|0)+1|0;c[i>>2]=n;c[i+(n<<2)>>2]=o;p=n>>>1;h:do if(p|0?(_=i+(p<<2)|0,$=c[_>>2]|0,$>>>0>o>>>0):0){q=_;r=$;while(1){c[q>>2]=o;c[i+(n<<2)>>2]=r;n=p>>>1;if(!n)break h;o=c[q>>2]|0;q=i+(n<<2)|0;r=c[q>>2]|0;if(r>>>0<=o>>>0)break;else{Z=p;p=n;n=Z}}}while(0);Z=aa+m|0;m=d[Z>>0]<<8|d[Z+1>>0]}while((m|0)!=0);n=c[i>>2]|0;i:do if(n){t=i+4|0;m=0;while(1){j=c[t>>2]|0;n=i+(n<<2)|0;c[t>>2]=c[n>>2];c[n>>2]=-1;n=(c[i>>2]|0)+-1|0;c[i>>2]=n;j:do if(n>>>0>=2){s=c[t>>2]|0;r=1;o=2;do{p=o|1;q=r;r=(c[i+(o<<2)>>2]|0)>>>0>(c[i+(p<<2)>>2]|0)>>>0?p:o;o=i+(r<<2)|0;p=c[o>>2]|0;if(s>>>0<p>>>0)break j;c[i+(q<<2)>>2]=p;c[o>>2]=s;o=r<<1;n=c[i>>2]|0}while(o>>>0<=n>>>0)}while(0);o=l&65535;p=j>>>16;if(p>>>0<=o>>>0)break;m=m+-1-o+p|0;if(!n){l=j;break i}else l=j}c[da>>2]=p;c[da+4>>2]=g;ti(f,35944,da);if(c[i>>2]|0)break f}else m=0;while(0);m=m+-1+ea-(l&65535)|0;l=d[aa+(ba+7)>>0]|0;if((m|0)!=(l|0)){c[fa>>2]=m;c[fa+4>>2]=l;c[fa+8>>2]=g;ti(f,35981,fa)}}while(0);if(!ca)break a}else{c[p>>2]=k;ti(f,35727,p);k=-1}while(0);l=c[ca+72>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{fa=c[l+20>>2]|0;g=fa+120|0;c[g>>2]=(c[g>>2]|0)+-1;fa=fa+136|0;c[l+16>>2]=c[fa>>2];c[fa>>2]=l;break}}else{c[o>>2]=k;ti(f,35689,o);k=-1}while(0);c[ga>>2]=ha;c[ia>>2]=ja;c[ka>>2]=la;la=k+1|0;Ra=ma;return la|0}function vi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[a>>2]|0;g=a+4|0;if(d|0)do{e=d;d=c[d>>2]|0;f=c[g>>2]|0;do if(f){if(c[f+480>>2]|0){Xd(f,e);break}i=e;if((c[f+304>>2]|0)>>>0<=i>>>0?(c[f+308>>2]|0)>>>0>i>>>0:0){i=f+300|0;c[e>>2]=c[i>>2];c[i>>2]=e}else h=9}else h=9;while(0);do if((h|0)==9){h=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0)}while((d|0)!=0);c[a>>2]=0;b[a+24>>1]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+20>>2]=0;b[a+26>>1]=1;d=c[g>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,a);return}i=a;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[a>>2]=c[i>>2];c[i>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{i=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function wi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;e=g;f=c[a+12>>2]|0;if(!f)c[b>>2]=a;else{wi(f,b,e);c[(c[e>>2]|0)+8>>2]=a}e=a+8|0;b=c[e>>2]|0;if(!b){c[d>>2]=a;Ra=g;return}else{wi(b,e,d);Ra=g;return}}function xi(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if(!d){a=0;return a|0}if((b|0)<=1){e=d+8|0;c[a>>2]=c[e>>2];c[e>>2]=0;c[d+12>>2]=0;a=d;return a|0}b=b+-1|0;d=xi(a,b)|0;e=c[a>>2]|0;if(!e){a=d;return a|0}else{c[e+12>>2]=d;d=e+8|0;c[a>>2]=c[d>>2];a=xi(a,b)|0;c[d>>2]=a;return e|0}return 0}function yi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Ra;Ra=Ra+16|0;g=f;c[g>>2]=e;d=Me(a,d,g)|0;if(!d){g=7;Ra=f;return g|0}g=zi(a,b,d)|0;lb(a,d);Ra=f;return g|0}function zi(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;h=o;g=qd(d,g,-1,128,0,h,0)|0;if(g|0){f=g;Ra=o;return f|0}n=c[h>>2]|0;g=Gc(n)|0;a:do if((g|0)==100){j=n+120|0;k=n+144|0;l=n+40|0;if(!n)while(1){g=Gc(0)|0;if((g|0)!=100)break a}do{g=c[j>>2]|0;if(!((g|0)!=0?(b[k>>1]|0)!=0:0)){g=c[n>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0)i=c[g+16>>2]|0;else if(!(h&1))i=Gg(g,1)|0;else i=0;g=c[n>>2]|0;h=c[l>>2]|0;if((h|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7}else g=c[g+68>>2]&h;c[l>>2]=g;do if(i|0){if(av(i,36682,3)|0?av(i,36686,3)|0:0)break;g=zi(d,f,i)|0;if(g|0)break a}while(0);g=Gc(n)|0}while((g|0)==100)}while(0);l=(g|0)==101?0:g;if(l|0){k=pd(d)|0;g=c[f>>2]|0;do if(g|0){if(d|0){if(c[d+480>>2]|0){Xd(d,g);break}j=g;if((c[d+304>>2]|0)>>>0<=j>>>0?(c[d+308>>2]|0)>>>0>j>>>0:0){j=d+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);b:do if(!k)g=0;else{j=(Eu(k)|0)+1|0;c:do if(!d){d=Sv(j|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&d>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](j)|0;m=59;break}g=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){d=c[14978]|0;i=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=d>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[d+272>>2]|0){if(a[d+81>>0]|0){g=0;break b}}else{do if(!(0<0|(0==0?(e[d+276>>1]|0)>>>0<j>>>0:0))){h=d+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];m=d+284|0;c[m>>2]=(c[m>>2]|0)+1;m=59;break c}h=d+296|0;g=c[h>>2]|0;if(!g){g=d+292|0;break}else{c[h>>2]=c[g>>2];m=d+284|0;c[m>>2]=(c[m>>2]|0)+1;m=59;break c}}else g=d+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(d,j,0)|0;m=59}while(0);if((m|0)==59)if(!g){g=0;break}ew(g|0,k|0,j|0)|0}while(0);c[f>>2]=g}gc(n)|0;f=l;Ra=o;return f|0}function Ai(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+48|0;u=D+24|0;x=D+16|0;w=D+8|0;l=D;q=D+32|0;v=D+28|0;p=g+60|0;s=c[p>>2]|0;r=c[g+56>>2]|0;c[v>>2]=0;t=f+352|0;k=c[t>>2]|0;a:do if(k|0){while(1){if((c[k+4>>2]|0)==(g|0))break;k=c[k+8>>2]|0;if(!k)break a}c[l>>2]=c[g>>2];f=dd(f,36709,l)|0;c[j>>2]=f;f=6;Ra=D;return f|0}while(0);n=c[g>>2]|0;if(!n){f=7;Ra=D;return f|0}o=(Eu(n)|0)+1|0;z=(f|0)==0;b:do if(z){y=Sv(o|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&y>>>0>2147483390){f=7;Ra=D;return f|0}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;A=31;break}k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){y=c[14978]|0;m=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=y>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l){f=7;Ra=D;return f|0}k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;y=l}else y=l}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){f=7;Ra=D;return f|0}}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<o>>>0:0))){l=f+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];A=f+284|0;c[A>>2]=(c[A>>2]|0)+1;A=31;break b}l=f+296|0;k=c[l>>2]|0;if(!k){k=f+292|0;break}else{c[l>>2]=c[k>>2];A=f+284|0;c[A>>2]=(c[A>>2]|0)+1;A=31;break b}}else k=f+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(f,o,0)|0;A=31}while(0);if((A|0)==31)if(!k){f=7;Ra=D;return f|0}else y=k;ew(y|0,n|0,o|0)|0;if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](28)|0;if(!k)A=43;else n=k}else{k=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){o=c[14978]|0;n=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;n=l}else n=l}else A=43}if((A|0)==43){k=f+81|0;if((a[k>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[k>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;k=f+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[f+236>>2]|0;if(k|0)c[k+12>>2]=7}if(c[f+480>>2]|0){Xd(f,y);f=7;Ra=D;return f|0}C=y;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){f=f+300|0;c[y>>2]=c[f>>2];c[f>>2]=y;f=7;Ra=D;return f|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](y);f=7;Ra=D;return f|0}else{f=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);f=7;Ra=D;return f|0}}k=n+8|0;l=k+20|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[n>>2]=f;c[n+4>>2]=h;l=c[g+72>>2]|0;m=c[f+16>>2]|0;if(!l)k=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0}c[(c[p>>2]|0)+4>>2]=c[m+(k<<4)>>2];c[q+4>>2]=g;c[q>>2]=n;p=q+8|0;c[p>>2]=c[t>>2];l=q+12|0;c[l>>2]=0;c[t>>2]=q;m=n+8|0;k=$a[i&127](f,c[h+8>>2]|0,r,s,m,v)|0;c[t>>2]=c[p>>2];c:do switch(k|0){case 7:{l=f+81|0;if((a[l>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[l>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;l=f+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[f+236>>2]|0;if(l){c[l+12>>2]=7;A=67}else A=67}else A=67;break}case 0:{k=c[m>>2]|0;if(k){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[c[m>>2]>>2]=c[h>>2];k=n+12|0;c[k>>2]=1;if(!(c[l>>2]|0)){c[u>>2]=c[g>>2];l=dd(f,36781,u)|0;c[j>>2]=l;l=c[n>>2]|0;C=(c[k>>2]|0)+-1|0;c[k>>2]=C;if(C|0){k=1;A=117;break c}k=c[m>>2]|0;if(k|0)Wa[c[(c[k>>2]|0)+16>>2]&127](k)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,n);k=1;A=117;break c}C=n;if((c[l+304>>2]|0)>>>0<=C>>>0?(c[l+308>>2]|0)>>>0>C>>>0:0){k=l+300|0;c[n>>2]=c[k>>2];c[k>>2]=n;k=1;A=117;break c}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);k=1;A=117;break c}else{k=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);k=1;A=117;break c}}h=g+64|0;c[n+24>>2]=c[h>>2];c[h>>2]=n;h=g+42|0;k=b[h>>1]|0;if(k<<16>>16>0){u=g+4|0;t=g+36|0;m=0;s=0;l=c[u>>2]|0;do{if(!(a[l+(s<<4)+15>>0]&4))i=59952;else{i=c[l+(s<<4)>>2]|0;i=i+(Eu(i)|0)+1|0}q=(Eu(i)|0)&1073741823;d:do if(!q)A=114;else{n=0;e:while(1){r=i+n|0;do if(r|0){j=d[r>>0]|0;o=208+j|0;do if((j|32|0)==104){o=r+1|0;j=d[o>>0]|0;p=208+j|0;if((j|32|0)==105){o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=100){B=208+p|0;C=100;A=103;break}o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=100){B=208+p|0;C=100;A=103;break}o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=101){B=208+p|0;C=101;A=103;break}o=d[o+1>>0]|0;if((o|32|0)!=110){B=208+o|0;C=110;A=103}}else{B=p;C=105;A=103}}else{B=o;C=104;A=103}while(0);if((A|0)==103?(A=0,(C|0)!=(d[B>>0]|0)):0)break;if(n|0?(a[i+(n+-1)>>0]|0)!=32:0)break;o=a[i+(n+6)>>0]|0;switch(o<<24>>24){case 32:case 0:break e;default:{}}}while(0);n=n+1|0;if(n>>>0>=q>>>0){A=114;break d}}o=o<<24>>24==0?6:7;k=n+o|0;if(k>>>0<=q>>>0){m=q+1-o|0;l=n;while(1){a[i+l>>0]=a[i+k>>0]|0;k=l+1|0;if((k|0)==(m|0))break;else{l=k;k=k+o|0}}}if((n|0)!=0&(a[r>>0]|0)==0)a[i+(n+-1)>>0]=0;l=c[u>>2]|0;m=l+(s<<4)+15|0;a[m>>0]=a[m>>0]|2;m=-128;k=b[h>>1]|0}while(0);if((A|0)==114){A=0;c[t>>2]=c[t>>2]|m&255}s=s+1|0}while((s|0)<(k<<16>>16|0))}if(z)k=0;else{k=0;A=117}}else{k=0;A=117}break}default:A=67}while(0);do if((A|0)==67){l=c[v>>2]|0;do if(l){c[x>>2]=l;l=dd(f,31408,x)|0;c[j>>2]=l;l=c[v>>2]|0;if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{C=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else{c[w>>2]=y;C=dd(f,36751,w)|0;c[j>>2]=C}while(0);if(c[f+480>>2]|0){Xd(f,n);A=117;break}C=n;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){A=f+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;A=117;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);A=117;break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);A=117;break}}while(0);if((A|0)==117){if(c[f+480>>2]|0){Xd(f,y);f=k;Ra=D;return f|0}C=y;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){f=f+300|0;c[y>>2]=c[f>>2];c[f>>2]=y;f=k;Ra=D;return f|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](y);f=k;Ra=D;return f|0}else{f=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);f=k;Ra=D;return f|0}return 0}function Bi(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=a[b>>0]|0;do switch(a[3696+(i&255)>>0]|0){case 7:{g=1;while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&1))break;else g=g+1|0;c[f>>2]=174;f=g;return f|0}case 11:{if((a[b+1>>0]|0)!=45){c[f>>2]=101;f=1;return f|0}g=2;a:while(1){switch(a[b+g>>0]|0){case 0:case 10:break a;default:{}}g=g+1|0}c[f>>2]=174;f=g;return f|0}case 17:{c[f>>2]=22;f=1;return f|0}case 18:{c[f>>2]=23;f=1;return f|0}case 19:{c[f>>2]=1;f=1;return f|0}case 20:{c[f>>2]=100;f=1;return f|0}case 21:{c[f>>2]=102;f=1;return f|0}case 16:{if((a[b+1>>0]|0)==42?(g=a[b+2>>0]|0,g<<24>>24):0){h=a[b+3>>0]|0;b:do if(g<<24>>24==42&h<<24>>24==47){h=1;g=3}else{g=3;while(1){if(!(h<<24>>24)){h=0;break b}g=g+1|0;k=h;h=a[b+g>>0]|0;if(k<<24>>24==42&h<<24>>24==47){h=1;break}}}while(0);c[f>>2]=174;f=h+g|0;return f|0}c[f>>2]=103;f=1;return f|0}case 22:{c[f>>2]=104;f=1;return f|0}case 14:{c[f>>2]=53;f=(a[b+1>>0]|0)==61?2:1;return f|0}case 12:switch(a[b+1>>0]|0){case 61:{c[f>>2]=55;f=2;return f|0}case 62:{c[f>>2]=52;f=2;return f|0}case 60:{c[f>>2]=98;f=2;return f|0}default:{c[f>>2]=56;f=1;return f|0}}case 13:switch(a[b+1>>0]|0){case 61:{c[f>>2]=57;f=2;return f|0}case 62:{c[f>>2]=99;f=2;return f|0}default:{c[f>>2]=54;f=1;return f|0}}case 15:if((a[b+1>>0]|0)==61){c[f>>2]=52;f=2;return f|0}else{c[f>>2]=175;f=1;return f|0}case 10:if((a[b+1>>0]|0)==124){c[f>>2]=105;f=2;return f|0}else{c[f>>2]=97;f=1;return f|0}case 23:{c[f>>2]=26;f=1;return f|0}case 24:{c[f>>2]=96;f=1;return f|0}case 25:{c[f>>2]=107;f=1;return f|0}case 8:{h=a[b+1>>0]|0;c:do if(h<<24>>24){g=1;while(1){if(h<<24>>24==i<<24>>24){g=g+1|0;if((a[b+g>>0]|0)!=i<<24>>24)break}g=g+1|0;h=a[b+g>>0]|0;if(!(h<<24>>24))break c}if(i<<24>>24==39){c[f>>2]=110;f=g;return f|0}else{c[f>>2]=59;f=g;return f|0}}else g=1;while(0);c[f>>2]=175;f=g;return f|0}case 26:{if(((d[b+1>>0]|0)+-48|0)>>>0>=10){c[f>>2]=134;f=1;return f|0}break}case 3:break;case 9:{d:do if(i<<24>>24==93){g=1;h=59}else{g=1;while(1){h=a[b+g>>0]|0;if(!(h<<24>>24)){h=175;break d}g=g+1|0;if(h<<24>>24==93){h=59;break}}}while(0);c[f>>2]=h;f=g;return f|0}case 6:{c[f>>2]=148;g=1;while(1)if(((d[b+g>>0]|0)+-48|0)>>>0<10)g=g+1|0;else break;return g|0}case 5:case 4:{c[f>>2]=148;h=a[b+1>>0]|0;if(h<<24>>24){j=0;g=1;while(1){if(!(a[880+(h&255)>>0]&70)){if((j|0)>0&h<<24>>24==40){k=91;break}if(h<<24>>24!=58){h=j;break}h=g+1|0;if((a[b+h>>0]|0)==58){i=j;g=h}else{h=j;break}}else i=j+1|0;g=g+1|0;h=a[b+g>>0]|0;if(!(h<<24>>24)){h=i;break}else j=i}do if((k|0)==91){while(1){i=g+1|0;h=a[b+i>>0]|0;if(!(h<<24>>24))break;if(h<<24>>24!=41?(a[880+(h&255)>>0]&1)==0:0)g=i;else{k=94;break}}if((k|0)==94?h<<24>>24==41:0){h=j;g=g+2|0;break}c[f>>2]=175;h=j;g=i}while(0);if(h){f=g;return f|0}}else g=1;c[f>>2]=175;f=g;return f|0}case 1:{g=1;while(1){h=a[b+g>>0]|0;i=g+1|0;if((d[3696+(h&255)>>0]|0)<2)g=i;else break}if(!(a[880+(h&255)>>0]&70)){c[f>>2]=59;if(g>>>0<=1){f=g;return f|0}h=a[3952+(((d[208+(d[b>>0]|0)>>0]<<2^g^(d[208+(d[b+(g+-1)>>0]|0)>>0]|0)*3)>>>0)%127|0)>>0]|0;if(!(h<<24>>24)){f=g;return f|0}h=h&255;e:while(1){i=h+-1|0;f:do if((g|0)==(d[2064+i>>0]|0)){j=1136+(e[1776+(i<<1)>>1]|0)|0;h=0;while(1){if((a[b+h>>0]&-33)<<24>>24!=(a[j+h>>0]|0))break f;h=h+1|0;if(h>>>0>=g>>>0)break e}}while(0);h=a[4224+i>>0]|0;if(!(h<<24>>24)){k=127;break}else h=h&255}if((k|0)==127)return g|0;c[f>>2]=d[4080+i>>0];f=g;return f|0}else{g=i;k=114}break}case 0:{if((a[b+1>>0]|0)==39){c[f>>2]=146;g=2;while(1){h=a[b+g>>0]|0;if(!(a[880+(h&255)>>0]&8))break;else g=g+1|0}if(h<<24>>24==39&(g&1|0)==0){h=g;g=1}else{c[f>>2]=175;g:while(1){i=a[b+g>>0]|0;switch(i<<24>>24){case 39:case 0:break g;default:{}}g=g+1|0}h=g;g=i<<24>>24!=0&1}f=h+g|0;return f|0}else{g=1;k=114}break}case 2:{g=1;k=114;break}case 28:{c[f>>2]=175;f=0;return f|0}default:{c[f>>2]=175;f=1;return f|0}}while(0);if((k|0)==114){while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&70))break;else g=g+1|0;c[f>>2]=59;f=g;return f|0}c[f>>2]=147;h=a[b>>0]|0;h:do if(h<<24>>24==48){switch(a[b+1>>0]|0){case 88:case 120:break;default:break h}if(a[880+(d[b+2>>0]|0)>>0]&8){g=3;while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&8))break;else g=g+1|0;return g|0}}while(0);if(((h&255)+-48|0)>>>0<10){g=1;while(1){h=a[b+g>>0]|0;if(((h&255)+-48|0)>>>0<10)g=g+1|0;else break}}else g=0;if(h<<24>>24==46){h=g;do h=h+1|0;while(((d[b+h>>0]|0)+-48|0)>>>0<10);c[f>>2]=145;g=h;h=a[b+h>>0]|0}i:do switch(h<<24>>24){case 69:case 101:{i=a[b+(g+1)>>0]|0;if(((i&255)+-48|0)>>>0>=10){switch(i<<24>>24){case 45:case 43:break;default:break i}i=g+2|0;if(((d[b+i>>0]|0)+-48|0)>>>0<10)g=i;else break i}else g=g+2|0;h=g;while(1)if(((d[b+h>>0]|0)+-48|0)>>>0<10)h=h+1|0;else break;c[f>>2]=145;g=h;h=a[b+h>>0]|0;break}default:{}}while(0);if(!(a[880+(h&255)>>0]&70)){f=g;return f|0}do{c[f>>2]=175;g=g+1|0}while((a[880+(d[b+g>>0]|0)>>0]&70)!=0);return g|0}function Ci(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=d+108|0;i=c[h>>2]|0;if((c[d+112>>2]|0)>(i|0)){c[h>>2]=i+1;h=c[d+104>>2]|0;a[h+(i*20|0)>>0]=e;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=f;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=0;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0;return i|0}else{i=Di(d,e,f,g,0)|0;return i|0}return 0}function Di(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=d+12|0;k=c[r>>2]|0;s=d+112|0;l=c[s>>2]|0;j=(l|0)==0;l=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;m=L()|0;l=j?51:l;m=j?0:m;j=c[k>>2]|0;q=c[j+128>>2]|0;p=((q|0)<0)<<31>>31;a:do if(!((m|0)>(p|0)|(m|0)==(p|0)&l>>>0>q>>>0)){q=d+104|0;p=d+108|0;o=k;n=k;d=c[q>>2]|0;b:while(1){l=Yv(l|0,m|0,20,0)|0;m=L()|0;c:do if(!d){if(c[j+272>>2]|0){if(a[j+81>>0]|0){d=1;k=35;break b}}else{do if(!(m>>>0>0|((m|0)==0?l>>>0>(e[j+276>>1]|0)>>>0:0))){k=j+300|0;d=c[k>>2]|0;if(d|0){c[k>>2]=c[d>>2];k=j+284|0;c[k>>2]=(c[k>>2]|0)+1;k=27;break c}k=j+296|0;d=c[k>>2]|0;if(!d){d=j+292|0;break}else{c[k>>2]=c[d>>2];k=j+284|0;c[k>>2]=(c[k>>2]|0)+1;k=27;break c}}else d=j+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(j,l,m)|0;k=27}else{k=d;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){if(!(m>>>0>0|((m|0)==0?l>>>0>(e[j+276>>1]|0)>>>0:0))){k=29;break}d=Zd(j,d,l,m)|0;k=27;break}d=Zd(j,d,l,m)|0;k=27}while(0);if((k|0)==27){if(!d){d=1;k=35;break}j=c[o>>2]|0;if(!j)k=31;else k=29}if((k|0)==29){k=0;o=d;if((c[j+304>>2]|0)>>>0<=o>>>0?(c[j+308>>2]|0)>>>0>o>>>0:0)l=e[j+276>>1]|0;else k=31}if((k|0)==31)l=Wa[c[29352>>2]&127](d)|0;c[n+48>>2]=l;k=(l>>>0)/20|0;c[s>>2]=k;c[q>>2]=d;j=c[p>>2]|0;if((k|0)>(j|0)){k=34;break}n=c[r>>2]|0;m=l>>>0<20;l=m?51:k<<1;m=m?0:0;j=c[n>>2]|0;o=c[j+128>>2]|0;k=((o|0)<0)<<31>>31;if((m|0)>(k|0)|(m|0)==(k|0)&l>>>0>o>>>0)break a;else o=n}if((k|0)==34){c[p>>2]=j+1;a[d+(j*20|0)>>0]=f;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=g;c[d+(j*20|0)+8>>2]=h;c[d+(j*20|0)+12>>2]=i;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;s=j;return s|0}else if((k|0)==35)return d|0}while(0);d=j+81|0;if(a[d>>0]|0){s=1;return s|0}if(a[j+82>>0]|0){s=1;return s|0}a[d>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;d=j+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[j+236>>2]|0;if(!d){s=1;return s|0}c[d+12>>2]=7;s=1;return s|0}function Ei(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=b+104|0;l=b+108|0;if((g|0)<0){while(1){h=d+1|0;i=a[h>>0]|0;if(i<<24>>24){m=d+16|0;kg(c[b>>2]|0,i<<24>>24,c[m>>2]|0);a[h>>0]=0;c[m>>2]=0}h=c[k>>2]|0;i=d-h|0;d=c[b>>2]|0;j=h;if(a[d+81>>0]|0){n=12;break}if((i|0)<0)i=(c[l>>2]|0)+-1|0;else i=(i|0)/20|0;d=j+(i*20|0)+1|0;if(!(a[d>>0]|0))break;d=j+(i*20|0)|0}if((n|0)==12){if((g|0)==-12)return;kg(d,g,f);return}if((g|0)==-3){c[h+(i*20|0)+16>>2]=f;a[d>>0]=-3;return}if(!f)return;c[h+(i*20|0)+16>>2]=f;a[d>>0]=g;if((g|0)!=-12)return;f=f+12|0;c[f>>2]=(c[f>>2]|0)+1;return}else{m=d+1|0;h=a[m>>0]|0;if(h<<24>>24){l=d+16|0;kg(c[b>>2]|0,h<<24>>24,c[l>>2]|0);a[m>>0]=0;c[l>>2]=0}h=(f|0)==0;if(!g)if(h)h=0;else{g=(Eu(f)|0)&1073741823;n=23}else if(h)h=0;else n=23;a:do if((n|0)==23){j=c[b>>2]|0;k=Sv(g|0,((g|0)<0)<<31>>31|0,1,0)|0;l=L()|0;b:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))n=33;else{h=0;break a}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[j+276>>1]|0)>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];b=j+284|0;c[b>>2]=(c[b>>2]|0)+1;break b}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];b=j+284|0;c[b>>2]=(c[b>>2]|0)+1;break b}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=33}while(0);if((n|0)==33)h=_d(j,k,l)|0;if(!h)h=0;else{ew(h|0,f|0,g|0)|0;a[h+g>>0]=0}}while(0);c[d+16>>2]=h;a[m>>0]=-7;return}}function Fi(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=c[e>>2]|0;n=c[b+12>>2]|0;o=n+64|0;k=c[o>>2]|0;l=b+149|0;j=(d[l>>0]|d[l+1>>0]<<8)&-769|256;a[l>>0]=j;a[l+1>>0]=j>>8;j=b+104|0;i=(c[j>>2]|0)+(((c[b+108>>2]|0)+-1|0)*20|0)|0;while(1){g=a[i>>0]|0;a:do if((g&255)<62){switch(g<<24>>24){case 2:{if(!(c[i+8>>2]|0))m=6;else{m=(d[l>>0]|d[l+1>>0]<<8)&-257;a[l>>0]=m;a[l+1>>0]=m>>8;m=6}break}case 0:case 1:{m=6;break}case 7:case 8:case 6:{h=(d[l>>0]|d[l+1>>0]<<8)&-769|512;a[l>>0]=h;a[l+1>>0]=h>>8;h=f;break a}case 3:case 5:{c[i+16>>2]=122;a[i+1>>0]=-5;h=f;break a}case 4:{c[i+16>>2]=123;a[i+1>>0]=-5;h=f;break a}case 10:{h=c[i+8>>2]|0;h=(h|0)>(f|0)?h:f;break a}case 9:{h=c[i+-16>>2]|0;f=(h|0)>(f|0)?h:f;break}default:{}}if((m|0)==6){m=0;h=d[l>>0]|d[l+1>>0]<<8|512;a[l>>0]=h;a[l+1>>0]=h>>8;h=f;break}g=i+8|0;h=c[g>>2]|0;if((h|0)<0){c[g>>2]=c[k+(~h<<2)>>2];h=f}else h=f}else h=f;while(0);if((i|0)==(c[j>>2]|0))break;else{f=h;i=i+-20|0}}f=c[b>>2]|0;g=c[o>>2]|0;if(!g){c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}if(f|0){if(c[f+480>>2]|0){Xd(f,g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}m=g;if((c[f+304>>2]|0)>>>0<=m>>>0?(c[f+308>>2]|0)>>>0>m>>>0:0){m=f+300|0;c[g>>2]=c[m>>2];c[m>>2]=g;c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}}function Gi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;i=k;g=a[b>>0]|0;if(g<<24>>24==1){f=4;Ra=k;return f|0}c[i>>2]=0;do if(g<<24>>24==4){g=c[b+4>>2]|0;if(g|0){f=g;Ra=k;return f|0}}else{a[b>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=b+16|0;g=b+56|0;g=th(b,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=b+4|0;if(!h){if(c[g>>2]|0)j=13}else{c[g>>2]=h;j=13}if((j|0)==13?(a[b>>0]|0)==0:0)a[b>>0]=2;break}}l=g;Ra=k;return l|0}while(0);l=cg(b,d,e,f,0)|0;Ra=k;return l|0}function Hi(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(d){h=(Eu(d)|0)&1073741823;if((h+20|0)>>>0>2147483390)i=0;else{k=h;h=h+21|0;j=3}}else{k=0;h=21;j=3}do if((j|0)==3){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](h)|0;if(!i)break;else{j=i;h=i}}else{j=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){l=c[14978]|0;i=Tv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=l>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(!i){i=0;break}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h;j=i;h=i}i=j+20|0;ew(i|0,d|0,k+1|0)|0;c[j+4>>2]=i;c[j>>2]=e;c[j+8>>2]=f;c[j+12>>2]=g;c[j+16>>2]=0;i=mi(b+336|0,i,j)|0;if(!i){l=h;return l|0}h=b+81|0;if((a[h>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(h|0)c[h+12>>2]=7}if(c[b+480>>2]|0){Xd(b,i);l=0;return l|0}l=i;if((c[b+304>>2]|0)>>>0<=l>>>0?(c[b+308>>2]|0)>>>0>l>>>0:0){l=b+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;l=0;return l|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);l=0;return l|0}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);l=0;return l|0}}while(0);h=b+81|0;if(a[h>>0]|0){l=i;return l|0}if(a[b+82>>0]|0){l=i;return l|0}a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(!h){l=i;return l|0}c[h+12>>2]=7;l=i;return l|0}function Ii(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+256|0;w=y+224|0;g=y+216|0;o=y+208|0;h=y+200|0;u=y+232|0;v=y;p=u+4|0;c[p>>2]=v;c[u>>2]=0;q=u+8|0;c[q>>2]=200;r=u+12|0;s=u+16|0;t=u+21|0;c[r>>2]=0;c[r+4>>2]=0;b[r+8>>1]=0;c[s>>2]=14;l=v;m=37929;n=l+14|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));k=f+7|0;if(a[k>>0]|0){g=d[f+6>>0]|0;x=c[5504+(g<<2)>>2]|0;c[h>>2]=40;c[h+4>>2]=x;Eb(u,37944,h);if((d[k>>0]|0)>1){h=1;do{g=g+1|0;x=c[5504+(g<<2)>>2]|0;c[o>>2]=44;c[o+4>>2]=x;Eb(u,37944,o);h=h+1|0}while(h>>>0<(d[k>>0]|0)>>>0);x=h&255}else x=1}else{c[g>>2]=c[f>>2];Eb(u,37951,g);x=1}k=f+5|0;g=a[k>>0]|0;if(!(g&32))o=0;else{g=c[s>>2]|0;h=g+11|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;l=(c[p>>2]|0)+g|0;m=37957;n=l+11|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0))}else wb(u,37957,11);o=1;g=a[k>>0]|0}if((g&255)>63){g=c[s>>2]|0;h=g+14|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;l=(c[p>>2]|0)+g|0;m=37969;n=l+14|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0))}else wb(u,37969,14);o=o+1|0}g=c[s>>2]|0;h=g+1|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;a[(c[p>>2]|0)+g>>0]=41}else wb(u,34066,1);g=c[p>>2]|0;if((g|0?(a[g+(c[s>>2]|0)>>0]=0,c[r>>2]|0):0)?(a[t>>0]&4)==0:0)$d(u)|0;g=td(e,v)|0;if(g|0){f=pd(e)|0;c[w>>2]=f;f=Bb(31408,w)|0;c[j>>2]=f;f=g;e=0;c[i>>2]=e;Ra=y;return f|0}if(mb()|0){f=7;e=0;c[i>>2]=e;Ra=y;return f|0}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](24)|0;if(!g){f=7;e=g;c[i>>2]=e;Ra=y;return f|0}else h=g}else{g=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;k=59064;h=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&h>>>0>0){j=c[14978]|0;w=Tv(h|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](g)|0;if(!k){f=7;e=0;c[i>>2]=e;Ra=y;return f|0}g=Wa[c[29352>>2]&127](k)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g;h=k;g=k};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+16>>2]=f;c[h+12>>2]=e;a[h+21>>0]=x;a[h+20>>0]=o;f=0;e=g;c[i>>2]=e;Ra=y;return f|0}function Ji(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o;n=e+40|0;g[n>>3]=1.0;if(!(a[b+20>>0]|0)){Ra=o;return 0}f=c[e+4>>2]|0;c[k>>2]=0;m=k+4|0;c[m>>2]=0;i=c[e>>2]|0;if((i|0)>0){h=b+21|0;b=f;f=0;while(1){if((a[b+5>>0]|0?(a[b+4>>0]|0)==2:0)?(j=c[b>>2]|0,l=d[h>>0]|0,(j|0)>=(l|0)):0)c[k+(j-l<<2)>>2]=f+1;f=f+1|0;if((f|0)>=(i|0))break;else b=b+12|0}b=c[k>>2]|0;if(b|0){b=b+-1|0;f=c[e+16>>2]|0;c[f+(b<<3)>>2]=1;a[f+(b<<3)+4>>0]=1;m=c[m>>2]|0;b=m+-1|0;if(!m){Ra=o;return 0}g[n>>3]=20.0;n=e+48|0;c[n>>2]=20;c[n+4>>2]=0;c[f+(b<<3)>>2]=2;a[f+(b<<3)+4>>0]=1;Ra=o;return 0}}g[n>>3]=2147483647.0;n=e+48|0;c[n>>2]=2147483647;c[n+4>>2]=0;Ra=o;return 0}function Ki(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Li(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](24)|0;if(!d){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=7;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e};c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d>>2]=a;c[b>>2]=d;g=0;return g|0}function Mi(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;gc(c[b>>2]|0)|0;c[b>>2]=0;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;b=a+20|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Ni(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+64|0;u=y+24|0;r=y+16|0;q=y+8|0;l=y;s=y+32|0;t=c[e>>2]|0;v=e+4|0;gc(c[v>>2]|0)|0;c[v>>2]=0;x=e+16|0;f=c[x>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{w=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[x>>2]=0;w=e+20|0;f=c[w>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;o=t+16|0;a:do if((h|0)>0){j=0;k=((d[(c[o>>2]|0)+5>>0]|0)>>>5&1^1)&255;b:while(1){f=c[i+(j<<2)>>2]|0;do if(f|0){g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)f=c[f+16>>2]|0;else{if(g&1)break;f=Gg(f,1)|0}if(f|0?(c[l>>2]=f,p=Bb(31408,l)|0,c[x+(k<<2)>>2]=p,(p|0)==0):0){f=7;break b}}while(0);j=j+1|0;if((j|0)>=(h|0))break a;else k=k+1|0}Ra=y;return f|0}while(0);p=t+12|0;m=c[(c[p>>2]|0)+112>>2]|0;h=s+4|0;c[h>>2]=0;c[s>>2]=0;l=s+8|0;c[l>>2]=0;i=s+12|0;c[i>>2]=m;m=s+16|0;c[m>>2]=0;a[s+20>>0]=0;n=s+21|0;a[n>>0]=0;wb(s,38205,7);f=c[w>>2]|0;if(f|0){c[q>>2]=f;Eb(s,38213,q)}g=c[c[o>>2]>>2]|0;if(!g)f=0;else f=(Eu(g)|0)&1073741823;j=c[m>>2]|0;k=j+f|0;if(k>>>0<(c[l>>2]|0)>>>0){if(f|0){c[m>>2]=k;ew((c[h>>2]|0)+j|0,g|0,f|0)|0}}else wb(s,g,f);f=c[x>>2]|0;if(f|0){c[r>>2]=f;Eb(s,38217,r)}f=c[h>>2]|0;if(((f|0)!=0?(a[f+(c[m>>2]|0)>>0]=0,(c[i>>2]|0)!=0):0)?(a[n>>0]&4)==0:0)f=$d(s)|0;else f=c[h>>2]|0;if(!f){x=7;Ra=y;return x|0}g=qd(c[p>>2]|0,f,-1,128,0,v,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{s=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(g|0){x=pd(c[p>>2]|0)|0;c[u>>2]=x;x=Bb(31408,u)|0;c[t+8>>2]=x;x=g;Ra=y;return x|0}e=e+8|0;t=e;t=Sv(c[t>>2]|0,c[t+4>>2]|0,1,0)|0;u=L()|0;c[e>>2]=t;c[e+4>>2]=u;if((Gc(c[v>>2]|0)|0)==100){x=0;Ra=y;return x|0}g=gc(c[v>>2]|0)|0;c[v>>2]=0;gc(0)|0;c[v>>2]=0;f=c[x>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[x>>2]=0;f=c[w>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;x=g;Ra=y;return x|0}function Oi(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;e=b;e=Sv(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;d=L()|0;c[b>>2]=e;c[b+4>>2]=d;b=a+4|0;if((Gc(c[b>>2]|0)|0)==100){e=0;return e|0}e=gc(c[b>>2]|0)|0;c[b>>2]=0;Si(a);return e|0}function Pi(a){a=a|0;return (c[a+4>>2]|0)==0|0}function Qi(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;i=d[(c[f>>2]|0)+21>>0]|0;if((i|0)<=(h|0)){if((yc(c[g>>2]|0,c[f+16+(h-i<<2)>>2]|0,-1,1,-1)|0)!=18)return 0;c[g+20>>2]=18;yc(c[g>>2]|0,31223,-1,1,0)|0;return 0}k=c[f+4>>2]|0;j=(k|0)==0;do if(j)l=29576;else{f=c[k+120>>2]|0;if(f|0?(e[k+144>>1]|0)>>>0>h>>>0:0){l=f+(h*40|0)|0;break}l=c[k>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576}while(0);f=l+8|0;i=e[f>>1]|0;if(i&2048|0)b[f>>1]=i&59391|4096;if(!j){i=c[k>>2]|0;h=k+40|0;f=c[h>>2]|0;if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7}else f=c[i+68>>2]&f;c[h>>2]=f}Dc(g,l);return 0}function Ri(a,b){a=a|0;b=b|0;var d=0;d=a+8|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Si(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;gc(c[b>>2]|0)|0;c[b>>2]=0;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;a=a+20|0;b=c[a>>2]|0;if(!b){c[a>>2]=0;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);c[a>>2]=0;return}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);c[a>>2]=0;return}}function Ti(b){b=b|0;var e=0,f=0,g=0;f=b+360|0;e=c[f>>2]|0;c[f>>2]=0;if(!e)return;b=c[b+4>>2]|0;if(b|0)do{f=b+149|0;g=(d[f>>0]|d[f+1>>0]<<8)&-4|1;a[f>>0]=g;a[f+1>>0]=g>>8;b=c[b+8>>2]|0}while((b|0)!=0);do{g=e;e=c[e+24>>2]|0;ng(g)}while((e|0)!=0);return}function Ui(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=a+20|0;if((c[g>>2]|0)>2){h=a+16|0;f=2;b=2;do{d=c[h>>2]|0;e=d+(f<<4)|0;if(!(c[d+(f<<4)+4>>2]|0)){lb(a,c[e>>2]|0);c[e>>2]=0}else{if((b|0)<(f|0)){d=d+(b<<4)|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2]}b=b+1|0}f=f+1|0}while((f|0)<(c[g>>2]|0));c[g>>2]=b;if((b|0)>=3)return}else c[g>>2]=2;b=a+16|0;d=c[b>>2]|0;e=a+412|0;if((d|0)==(e|0))return;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[e+16>>2]=c[d+16>>2];c[e+20>>2]=c[d+20>>2];c[e+24>>2]=c[d+24>>2];c[e+28>>2]=c[d+28>>2];lb(a,d);c[b>>2]=e;return}\nfunction jl(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=Ra;Ra=Ra+48|0;v=x+32|0;t=x+24|0;s=x+16|0;q=x+8|0;p=x;h=c[f>>2]|0;j=c[g+20>>2]|0;if(!j)w=-1e6;else{k=c[h+16>>2]|0;i=0;while(1)if((c[k+(i<<4)+12>>2]|0)==(j|0)){w=i;break}else i=i+1|0}o=c[g+4>>2]|0;l=c[g+24>>2]|0;m=c[l+20>>2]|0;if(!m){i=l+12|0;j=l+16|0}else{j=a[o>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=o;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}j=(i>>>0)%((c[l+8>>2]|0)>>>0)|0;i=m+(j<<3)|0;j=m+(j<<3)+4|0}i=c[i>>2]|0;a:do if(!i)j=59292;else{n=d[208+(d[o>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;i=i+-1|0;l=c[j+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=o;do{l=l+1|0;m=m+1|0;y=a[l>>0]|0;k=(d[208+(y&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!i){j=59292;break}}}while(0);o=h+16|0;m=c[(c[o>>2]|0)+(w<<4)>>2]|0;l=(w|0)==1;n=l?34855:34585;l=l?14:16;k=c[g>>2]|0;i=c[c[j+8>>2]>>2]|0;do if((a[h+165>>0]|0)==0?(r=f+200|0,(a[r>>0]|0)==0):0){j=c[h+312>>2]|0;if(j){h=$a[j&127](c[h+316>>2]|0,l,k,i,m,c[f+240>>2]|0)|0;if((h|0)==1){cd(f,39216,p);c[f+12>>2]=23;Ra=x;return}if((h|2|0)!=2){cd(f,39231,q);c[f+12>>2]=1;Ra=x;return}if(h|0){Ra=x;return}h=c[f>>2]|0;if(a[h+165>>0]|0)break;if(a[r>>0]|0)break}i=c[h+312>>2]|0;if(i|0){h=$a[i&127](c[h+316>>2]|0,9,n,0,m,c[f+240>>2]|0)|0;if((h|0)==1){cd(f,39216,s);c[f+12>>2]=23;Ra=x;return}if((h|2|0)==2){if(!h)break;Ra=x;return}else{cd(f,39231,t);c[f+12>>2]=1;Ra=x;return}}}while(0);m=f+8|0;h=c[m>>2]|0;if(!h){k=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))u=47;else{Ra=x;return}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break b}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;u=47}while(0);if((u|0)==47)j=_d(k,224,0)|0;if(!j){Ra=x;return}h=j+104|0;i=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=k;h=k+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;c[j+8>>2]=i;c[j+4>>2]=0;c[h>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[m>>2]=j;Di(j,61,0,1,0)|0;l=j}else l=h;k=c[g>>2]|0;c[v>>2]=c[(c[o>>2]|0)+(w<<4)>>2];c[v+4>>2]=34585;c[v+8>>2]=k;Ak(f,42882,v);k=c[m>>2]|0;h=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(w<<4)+12>>2]>>2]|0)+1|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;y=c[k+104>>2]|0;a[y+(j*20|0)>>0]=95;b[y+(j*20|0)+2>>1]=0;c[y+(j*20|0)+4>>2]=w;c[y+(j*20|0)+8>>2]=1;c[y+(j*20|0)+12>>2]=h;c[y+(j*20|0)+16>>2]=0;a[y+(j*20|0)+1>>0]=0}else Di(k,95,w,1,h)|0;j=c[g>>2]|0;i=l+108|0;h=c[i>>2]|0;if((c[l+112>>2]|0)>(h|0)){c[i>>2]=h+1;y=c[l+104>>2]|0;a[y+(h*20|0)>>0]=-110;b[y+(h*20|0)+2>>1]=0;c[y+(h*20|0)+4>>2]=w;c[y+(h*20|0)+8>>2]=0;c[y+(h*20|0)+12>>2]=0;c[y+(h*20|0)+16>>2]=0;a[y+(h*20|0)+1>>0]=0}else h=Di(l,146,w,0,0)|0;if(a[(c[l>>2]|0)+81>>0]|0){Ra=x;return}if((h|0)<0)h=(c[i>>2]|0)+-1|0;Ei(l,(c[l+104>>2]|0)+(h*20|0)|0,j,0);Ra=x;return}function kl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;n=o+8|0;m=o;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))j=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);l=d+19|0;i=a[l>>0]|0;if(!(i<<24>>24)){j=d+44|0;k=(c[j>>2]|0)+1|0;c[j>>2]=k}else{k=i+-1<<24>>24;a[l>>0]=k;k=c[d+148+((k&255)<<2)>>2]|0}if((f|0)<2)cd(d,42933,m);i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;m=c[h+104>>2]|0;a[m+(j*20|0)>>0]=-120;b[m+(j*20|0)+2>>1]=0;c[m+(j*20|0)+4>>2]=f;c[m+(j*20|0)+8>>2]=k;c[m+(j*20|0)+12>>2]=g;c[m+(j*20|0)+16>>2]=0;a[m+(j*20|0)+1>>0]=0}else Di(h,136,f,k,g)|0;m=c[d+116>>2]|0;a[((m|0)==0?d:m)+21>>0]=1;c[n>>2]=c[(c[(c[d>>2]|0)+16>>2]|0)+(g<<4)>>2];c[n+4>>2]=34585;c[n+8>>2]=f;c[n+12>>2]=k;c[n+16>>2]=k;Ak(d,42948,n);if(!k){Ra=o;return}h=a[l>>0]|0;if((h&255)>=8){Ra=o;return}a[l>>0]=h+1<<24>>24;c[d+148+((h&255)<<2)>>2]=k;Ra=o;return}function ll(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+32|0;g=h;a:do if(!b){b=0;e=1}else{while(1){e=c[b+4>>2]|0;if(!(e&4096))break;if(!(e&262144))b=b+12|0;else b=(c[b+20>>2]|0)+4|0;b=c[b>>2]|0;if(!b){b=0;e=1;break a}}b:while(1){switch(a[b>>0]|0){case 51:{b=b+12|0;break}case 44:{if(ll(c[b+12>>2]|0,d)|0){b=1;break b}b=b+16|0;break}default:{e=0;break a}}b=c[b>>2]|0;if(!b){b=0;e=1;break a}}Ra=h;return b|0}while(0);c[g+4>>2]=145;c[g+8>>2]=0;c[g+12>>2]=0;f=g+20|0;a[f>>0]=0;c[g+24>>2]=d;if(e)b=0;else{_j(g,b)|0;b=a[f>>0]|0}g=b&255;Ra=h;return g|0}function ml(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d)return;if((e|0)<0){g=d;do{d=g+4|0;f=c[d>>2]|0;if(f&1|0)c[d>>2]=f&-2;if(((a[g>>0]|0)==-95?(h=g+20|0,i=c[h>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){d=0;f=i;do{ml(c[f+4+(d*20|0)>>2]|0,e);d=d+1|0;f=c[h>>2]|0}while((d|0)<(c[f>>2]|0))}ml(c[g+12>>2]|0,e);g=c[g+16>>2]|0}while((g|0)!=0);return}g=d;do{d=g+4|0;f=c[d>>2]|0;if(f&1|0?(b[g+36>>1]|0)==(e|0):0)c[d>>2]=f&-2;if(((a[g>>0]|0)==-95?(j=g+20|0,k=c[j>>2]|0,k|0):0)?(c[k>>2]|0)>0:0){d=0;f=k;do{ml(c[f+4+(d*20|0)>>2]|0,e);d=d+1|0;f=c[j>>2]|0}while((d|0)<(c[f>>2]|0))}ml(c[g+12>>2]|0,e);g=c[g+16>>2]|0}while((g|0)!=0);return}function nl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!a){j=0;return j|0}b=0;do{d=c[a+36>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}d=c[a+44>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}d=c[a+60>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}g=c[a>>2]|0;if((g|0)!=0?(h=c[g>>2]|0,(h|0)>0):0){f=0;e=h;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?h:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}g=c[a+40>>2]|0;if((g|0)!=0?(i=c[g>>2]|0,(i|0)>0):0){f=0;e=i;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?i:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}g=c[a+48>>2]|0;if((g|0)!=0?(j=c[g>>2]|0,(j|0)>0):0){f=0;e=j;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?j:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}a=c[a+52>>2]|0}while((a|0)!=0);return b|0}function ol(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=Ra;Ra=Ra+32|0;n=o;if(!f){n=0;Ra=o;return n|0}if(c[e+8>>2]&8192|0){n=0;Ra=o;return n|0}if(c[e+68>>2]|0){n=0;Ra=o;return n|0}if(c[e+60>>2]|0){n=0;Ra=o;return n|0}if((a[f>>0]|0)==44){i=0;do{i=(ol(d,e,c[f+16>>2]|0,g,h)|0)+i|0;f=c[f+12>>2]|0}while((a[f>>0]|0)==44)}else i=0;j=(c[f+4>>2]&1|0)==0;if(!h){if(!j)k=12}else{if(j){n=0;Ra=o;return n|0}if((b[f+36>>1]|0)==(g|0))k=12;else{n=0;Ra=o;return n|0}}if((k|0)==12?(b[f+36>>1]|0)!=(g|0):0){n=0;Ra=o;return n|0}m=n+20|0;a[m>>0]=3;c[n+4>>2]=127;c[n+8>>2]=128;c[n+24>>2]=g;_j(n,f)|0;if(!(a[m>>0]|0)){n=i;Ra=o;return n|0}i=i+1|0;if(!e){n=i;Ra=o;return n|0}h=n+4|0;k=n+8|0;l=n+12|0;m=n+16|0;j=e;do{r=dk(c[d>>2]|0,f,0,0)|0;ml(r,-1);c[n>>2]=d;c[h>>2]=g;c[k>>2]=g;c[l>>2]=0;c[m>>2]=c[j>>2];r=zl(n,r)|0;q=(c[j+8>>2]&8|0)==0;p=j+36|0;e=j+44|0;r=Xk(c[d>>2]|0,c[(q?p:e)>>2]|0,r)|0;c[(q?p:e)>>2]=r;j=c[j+52>>2]|0}while((j|0)!=0);Ra=o;return i|0}function pl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;l=w;q=c[f+60>>2]|0;h=f+12|0;if((q|0)==0|(c[h>>2]|0)!=0){Ra=w;return}s=d+44|0;v=(c[s>>2]|0)+1|0;c[s>>2]=v;c[h>>2]=v;t=d+8|0;h=c[t>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))p=16;else{r=0;break a}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;break b}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;p=16}while(0);if((p|0)==16)i=_d(k,224,0)|0;if(!i)r=0;else{h=i+104|0;j=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));c[i>>2]=k;h=k+4|0;j=c[h>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[h>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=d;c[t>>2]=i;Di(i,61,0,1,0)|0;r=i}}else r=h;while(0);h=q+12|0;do if(!(uk(c[h>>2]|0,l)|0)){h=c[h>>2]|0;do if(h){if((a[h>>0]|0)!=-88){n=Jj(d,h,v)|0;p=67;break}k=c[t>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;o=c[k+104>>2]|0;a[o+(j*20|0)>>0]=78;b[o+(j*20|0)+2>>1]=0;c[o+(j*20|0)+4>>2]=h;c[o+(j*20|0)+8>>2]=v;c[o+(j*20|0)+12>>2]=0;c[o+(j*20|0)+16>>2]=0;a[o+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,v,0)|0;break}}else{n=Jj(d,0,v)|0;p=67}while(0);do if(((p|0)==67?(n|0)!=(v|0):0)?(m=c[t>>2]|0,m|0):0){h=m+108|0;i=c[h>>2]|0;if((c[m+112>>2]|0)>(i|0)){c[h>>2]=i+1;p=c[m+104>>2]|0;a[p+(i*20|0)>>0]=79;b[p+(i*20|0)+2>>1]=0;c[p+(i*20|0)+4>>2]=n;c[p+(i*20|0)+8>>2]=v;c[p+(i*20|0)+12>>2]=0;c[p+(i*20|0)+16>>2]=0;a[p+(i*20|0)+1>>0]=0;break}else{Di(m,79,n,v,0)|0;break}}while(0);i=r+108|0;h=c[i>>2]|0;j=r+112|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=15;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=v;c[p+(h*20|0)+8>>2]=0;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0}else Di(r,15,v,0,0)|0;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=20;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=v;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(r,20,v,g,0)|0;break}}else{h=c[l>>2]|0;j=r+108|0;i=c[j>>2]|0;k=r+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;o=c[r+104>>2]|0;a[o+(i*20|0)>>0]=70;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=v;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(r,70,h,v,0)|0;if(!h){h=c[j>>2]|0;if((c[k>>2]|0)>(h|0)){c[j>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=11;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=0;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(r,11,0,g,0)|0;break}}if((h|0)>-1){o=f+6|0;n=b[o>>1]|0;i=((h|0)<0)<<31>>31;g=h>>>0<8;if(g)if(h>>>0<2)j=0;else{j=40;l=h;k=i;do{j=(j&65535)+65526|0;l=cw(l|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&l>>>0<8);k=j&65535;j=l;p=43}else{if(h>>>0>255){j=40;m=h;k=i;do{j=(j&65535)+40|0;p=m;m=bw(m|0,k|0,4)|0;l=k;k=L()|0}while(l>>>0>0|(l|0)==0&p>>>0>4095);l=j&65535;j=m}else{l=40;k=i;j=h}if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;p=j;j=bw(j|0,k|0,1)|0;m=k;k=L()|0}while(m>>>0>0|(m|0)==0&p>>>0>31);k=l;p=43}else{k=l;p=43}}if((p|0)==43)j=(k&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535;if(n<<16>>16>j<<16>>16){if(g)if(h>>>0<2)h=0;else{j=40;do{j=(j&65535)+65526|0;h=cw(h|0,i|0,1)|0;i=L()|0}while(i>>>0<0|(i|0)==0&h>>>0<8);j=j&65535;p=58}else{if(h>>>0>255){j=40;do{j=(j&65535)+40|0;p=h;h=bw(h|0,i|0,4)|0;g=i;i=L()|0}while(g>>>0>0|(g|0)==0&p>>>0>4095);j=j&65535}else j=40;if(i>>>0>0|(i|0)==0&h>>>0>15){do{j=(j&65535)+10&65535;p=h;h=bw(h|0,i|0,1)|0;g=i;i=L()|0}while(g>>>0>0|(g|0)==0&p>>>0>31);p=58}else p=58}if((p|0)==58)h=(j&65535)+65526+(e[3648+((h&7)<<1)>>1]|0)&65535;b[o>>1]=h;p=f+8|0;c[p>>2]=c[p>>2]|16384}}}while(0);h=c[q+16>>2]|0;if(!h){Ra=w;return}l=c[s>>2]|0;m=l+1|0;c[f+16>>2]=m;l=l+2|0;c[s>>2]=l;do if((a[h>>0]|0)==-88){k=c[t>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;u=c[k+104>>2]|0;a[u+(j*20|0)>>0]=78;b[u+(j*20|0)+2>>1]=0;c[u+(j*20|0)+4>>2]=h;c[u+(j*20|0)+8>>2]=m;c[u+(j*20|0)+12>>2]=0;c[u+(j*20|0)+16>>2]=0;a[u+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,m,0)|0;break}}else{j=Jj(d,h,m)|0;if((j|0)!=(m|0)?(u=c[t>>2]|0,u|0):0){h=u+108|0;i=c[h>>2]|0;if((c[u+112>>2]|0)>(i|0)){c[h>>2]=i+1;u=c[u+104>>2]|0;a[u+(i*20|0)>>0]=79;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=j;c[u+(i*20|0)+8>>2]=m;c[u+(i*20|0)+12>>2]=0;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0;break}else{Di(u,79,j,m,0)|0;break}}}while(0);i=r+108|0;h=c[i>>2]|0;j=r+112|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;u=c[r+104>>2]|0;a[u+(h*20|0)>>0]=15;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=m;c[u+(h*20|0)+8>>2]=0;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else Di(r,15,m,0,0)|0;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;u=c[r+104>>2]|0;a[u+(h*20|0)>>0]=-104;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=v;c[u+(h*20|0)+8>>2]=l;c[u+(h*20|0)+12>>2]=m;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0;Ra=w;return}else{Di(r,152,v,l,m)|0;Ra=w;return}}function ql(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;Ba=Ra;Ra=Ra+176|0;xa=Ba+40|0;ja=Ba+32|0;V=Ba+24|0;y=Ba+16|0;q=Ba+8|0;m=Ba;va=Ba+80|0;U=Ba+48|0;wa=f+8|0;ua=c[wa>>2]|0;Aa=c[f>>2]|0;c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;c[U+16>>2]=0;c[U+20>>2]=0;c[U+24>>2]=0;if(!i)I=0;else I=(c[i>>2]|0)>63?0:i;$=U+8|0;c[$>>2]=I;_=Aa+76|0;ta=(b[_>>1]&16)==0?k:k&-257;i=c[g>>2]|0;if((i|0)>64){c[m>>2]=64;cd(f,43479,m);Aa=0;Ra=Ba;return Aa|0}da=ta&65535;ia=da&32;ea=(ia|0)!=0;o=ea?1:i;n=o*80|0;p=n+759&-16;m=p+72|0;a:do if(c[Aa+272>>2]|0)if(!(a[Aa+81>>0]|0))ka=15;else i=0;else{do if(!(0<0|(0==0?(e[Aa+276>>1]|0)>>>0<m>>>0:0))){k=Aa+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];za=Aa+284|0;c[za>>2]=(c[za>>2]|0)+1;break a}k=Aa+296|0;i=c[k>>2]|0;if(!i){i=Aa+292|0;break}else{c[k>>2]=c[i>>2];za=Aa+284|0;c[za>>2]=(c[za>>2]|0)+1;break a}}else i=Aa+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;ka=15}while(0);if((ka|0)==15)i=_d(Aa,m,0)|0;ra=Aa+81|0;if(a[ra>>0]|0){if(!i){Aa=0;Ra=Ba;return Aa|0}if(c[Aa+480>>2]|0){Xd(Aa,i);Aa=0;Ra=Ba;return Aa|0}za=i;if((c[Aa+304>>2]|0)>>>0<=za>>>0?(c[Aa+308>>2]|0)>>>0>za>>>0:0){Aa=Aa+300|0;c[i>>2]=c[Aa>>2];c[Aa>>2]=i;Aa=0;Ra=Ba;return Aa|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}else{Aa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}}c[i>>2]=f;ca=i+4|0;c[ca>>2]=g;X=i+8|0;c[X>>2]=I;c[i+16>>2]=h;c[i+12>>2]=j;ga=i+24|0;ha=i+28|0;c[ha>>2]=-1;c[ga>>2]=-1;za=i+46|0;a[za>>0]=o;sa=f+56|0;fa=(c[sa>>2]|0)+-1|0;c[sa>>2]=fa;na=i+32|0;c[na>>2]=fa;z=i+36|0;c[z>>2]=fa;fa=i+44|0;b[fa>>1]=ta;b[i+20>>1]=l;oa=f+132|0;pa=i+40|0;c[pa>>2]=c[oa>>2];k=i+47|0;A=k;B=A+33|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0));qa=i+752|0;gw(qa|0,0,n+72|0)|0;aa=i+488|0;c[U>>2]=i;ya=i+80|0;ba=U+4|0;c[ba>>2]=ya;u=i+p|0;O=U+12|0;c[O>>2]=u;c[u+48>>2]=u+56;b[u+40>>1]=0;b[u+44>>1]=3;c[u+36>>2]=0;u=i+492|0;c[u>>2]=0;c[ya>>2]=i;a[i+89>>0]=0;c[i+84>>2]=0;la=i+92|0;c[la>>2]=0;c[i+96>>2]=8;ma=i+100|0;c[ma>>2]=i+104;Il(ya,h,44);v=(o|0)==0;if(v){if(I|0)a[k>>0]=c[I>>2];if(da&256|0)a[i+51>>0]=1;nk(f,0,43507,q)}else{q=0;do{r=g+8+(q*72|0)+40|0;K=c[r>>2]|0;T=c[u>>2]|0;c[u>>2]=T+1;c[aa+8+(T<<2)>>2]=K;b:do if((a[g+8+(q*72|0)+37>>0]&4?(w=c[g+8+(q*72|0)+16>>2]|0,x=c[g+8+(q*72|0)+64>>2]|0,x|0):0)?(c[x>>2]|0)>0:0){s=w+42|0;t=w+4|0;m=0;h=0;c:while(1){n=b[s>>1]|0;if((m|0)>=(n|0))break;p=c[t>>2]|0;while(1){if(a[p+(m<<4)+15>>0]&2)break;k=m+1|0;if((k|0)<(n|0))m=k;else break c}p=c[f>>2]|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))ka=52;else break b;else{do if((e[p+276>>1]|0)>=52){k=p+300|0;n=c[k>>2]|0;if(n|0){c[k>>2]=c[n>>2];T=p+284|0;c[T>>2]=(c[T>>2]|0)+1;break d}k=p+296|0;n=c[k>>2]|0;if(!n){k=p+292|0;break}else{c[k>>2]=c[n>>2];T=p+284|0;c[T>>2]=(c[T>>2]|0)+1;break d}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;ka=52}while(0);if((ka|0)==52){ka=0;n=_d(p,52,0)|0}if(!n)break b;A=n;B=A+52|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));a[n>>0]=-94;b[n+34>>1]=-1;c[n+24>>2]=1;c[n+28>>2]=c[r>>2];b[n+32>>1]=m;c[n+44>>2]=w;k=c[x+4+(h*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;Ml(ya,ej(f,53,n,ej(f,166,k,0)|0)|0,1)|0;k=h+1|0;if((k|0)<(c[x>>2]|0)){m=m+1|0;h=k}else break b}c[y>>2]=c[w>>2];c[y+4>>2]=h;cd(f,43525,y)}while(0);q=q+1|0}while((q|0)<(c[g>>2]|0))}k=c[la>>2]|0;if((k|0)>0)do{T=k;k=k+-1|0;Nl(g,ya,k)}while((T|0)>1);e:do if(!(a[ra>>0]|0)){f:do if((c[i+92>>2]|0)>0){h=va+20|0;q=va+4|0;r=va+8|0;if(v){p=0;k=ya;while(1){m=c[k+20>>2]|0;n=m+(p*48|0)+10|0;if((b[n>>1]&2)==0?(T=m+(p*48|0)+40|0,(c[T>>2]|0)==0&(c[T+4>>2]|0)==0):0){Tj(f,c[m+(p*48|0)>>2]|0,c[z>>2]|0,16);b[n>>1]=b[n>>1]|4;k=c[ba>>2]|0}p=p+1|0;if((p|0)>=(c[k+12>>2]|0))break f}}p=0;k=ya;do{k=c[k+20>>2]|0;n=k+(p*48|0)+10|0;do if((b[n>>1]&2)==0?(T=k+(p*48|0)+40|0,(c[T>>2]|0)==0&(c[T+4>>2]|0)==0):0){k=k+(p*48|0)|0;m=c[k>>2]|0;c[va>>2]=0;c[va+4>>2]=0;c[va+8>>2]=0;c[va+12>>2]=0;c[va+16>>2]=0;c[va+20>>2]=0;c[va+24>>2]=0;a[h>>0]=1;c[q>>2]=146;c[r>>2]=128;if(m){_j(va,m)|0;if(!(a[h>>0]|0))break}Tj(f,c[k>>2]|0,c[z>>2]|0,16);b[n>>1]=b[n>>1]|4}while(0);p=p+1|0;k=c[ba>>2]|0}while((p|0)<(c[k+12>>2]|0))}while(0);T=(da&256|0)==0;g:do if(!T){h:do if((c[g>>2]|0)==1){H=c[g+48>>2]|0;p=c[g+24>>2]|0;h=c[j>>2]|0;i:do if((h|0)>0){n=0;while(1){k=c[j+4+(n*20|0)>>2]|0;j:do if(!k)k=0;else while(1){m=c[k+4>>2]|0;if(!(m&4096))break j;if(!(m&262144))k=k+12|0;else k=(c[k+20>>2]|0)+4|0;k=c[k>>2]|0;if(!k){k=0;break}}while(0);if(((a[k>>0]|0)==-94?(c[k+28>>2]|0)==(H|0):0)?(b[k+32>>1]|0)<0:0)break i;n=n+1|0;if((n|0)>=(h|0)){ka=92;break}}}else ka=92;while(0);k:do if((ka|0)==92){k=c[p+8>>2]|0;if(!k)break h;x=va+4|0;y=va+12|0;z=va+16|0;A=va+8|0;B=va+20|0;C=va+24|0;D=va+28|0;E=va+17|0;F=va+18|0;G=va+72|0;while(1){if(a[k+54>>0]|0){w=k+50|0;l:do if(!(b[w>>1]|0))m=0;else{s=k+4|0;t=k+40|0;u=k+32|0;v=k+12|0;m=0;do{c[va>>2]=ya;c[x>>2]=ya;c[y>>2]=0;a[z>>0]=0;c[A>>2]=0;c[B>>2]=2;c[C>>2]=0;c[D>>2]=H;a[E>>0]=1;a[F>>0]=1;p=b[(c[s>>2]|0)+(m<<1)>>1]|0;n=p<<16>>16;if(p<<16>>16==-2){c[y>>2]=c[(c[t>>2]|0)+4+(m*20|0)>>2];c[A>>2]=c[(c[u>>2]|0)+(m<<2)>>2];b[G>>1]=-2;n=Ul(va)|0}else{h=c[v>>2]|0;do if(p<<16>>16==(b[h+40>>1]|0))n=-1;else{if(p<<16>>16<=-1)break;a[z>>0]=a[(c[h+4>>2]|0)+(n<<4)+13>>0]|0;c[A>>2]=c[(c[u>>2]|0)+(m<<2)>>2]}while(0);b[G>>1]=n;n=Tl(va)|0}do if(n){p=0;while(1){ka=n+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0){if(b[n+12>>1]&2){ka=108;break}p=(p|0)==0?n:p}n=Tl(va)|0;if(!n){ka=111;break}}if((ka|0)==108){ka=0;break}else if((ka|0)==111){ka=0;if(!p){ka=112;break}else break}}else ka=112;while(0);if((ka|0)==112){r=c[(c[u>>2]|0)+(m<<2)>>2]|0;if((c[j>>2]|0)<=0)break l;q=0;m:while(1){h=c[j+4+(q*20|0)>>2]|0;n:do if(!h)n=0;else{n=h;while(1){p=c[n+4>>2]|0;if(!(p&4096))break n;if(!(p&262144))n=n+12|0;else n=(c[n+20>>2]|0)+4|0;n=c[n>>2]|0;if(!n){n=0;break}}}while(0);do if((a[n>>0]|0)==-94){if((b[n+32>>1]|0)!=(b[(c[s>>2]|0)+(m<<1)>>1]|0))break;if((c[n+28>>2]|0)!=(H|0))break;n=Yi(f,h)|0;if(!n)n=c[(c[f>>2]|0)+8>>2]|0;p=c[n>>2]|0;ka=a[p>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(n|0)!=0)){h=r;do{p=p+1|0;h=h+1|0;ka=a[p>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(n|0)!=0))}if(!n)break m}while(0);q=q+1|0;if((q|0)>=(c[j>>2]|0))break l}n=b[(c[s>>2]|0)+(m<<1)>>1]|0;if(n<<16>>16>-1)n=d[(c[(c[v>>2]|0)+4>>2]|0)+(n<<16>>16<<4)+12>>0]|0;else n=n<<16>>16==-1&1;if(!n)break l}m=m+1|0}while(m>>>0<(e[w>>1]|0)>>>0)}while(0);if((m|0)==(e[w>>1]|0))break k}k=c[k+20>>2]|0;if(!k)break h}}while(0);a[i+51>>0]=1;break g}while(0);if(!I){b[fa>>1]=b[fa>>1]|128;c[X>>2]=j}}while(0);if((((o|0)==1?(R=c[U>>2]|0,P=c[O>>2]|0,S=R+44|0,(b[S>>1]&32)==0):0)?(Q=c[R+4>>2]|0,M=c[Q+24>>2]|0,(c[M+56>>2]|0)==0):0)?(a[Q+45>>0]&2)==0:0){I=c[Q+48>>2]|0;J=R+80|0;K=P+36|0;c[K>>2]=0;b[P+42>>1]=0;c[va>>2]=J;c[va+4>>2]=J;c[va+12>>2]=0;a[va+16>>0]=0;c[va+8>>2]=0;c[va+20>>2]=130;c[va+24>>2]=0;c[va+28>>2]=I;a[va+17>>0]=1;a[va+18>>0]=1;b[va+72>>1]=-1;m=Tl(va)|0;do if(!m)ka=154;else{k=0;while(1){ka=m+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?b[m+12>>1]&130:0){ka=150;break}k=(k|0)==0?m:k;m=Tl(va)|0;if(!m){ka=152;break}}if((ka|0)==150)k=m;else if((ka|0)==152)if(!k){ka=154;break}c[K>>2]=4353;c[c[P+48>>2]>>2]=k;b[P+40>>1]=1;b[P+24>>1]=1;b[P+20>>1]=33}while(0);o:do if((ka|0)==154?(N=c[M+8>>2]|0,N|0):0){x=va+4|0;y=va+12|0;z=va+16|0;A=va+8|0;B=va+20|0;C=va+24|0;D=va+28|0;E=va+17|0;F=va+18|0;G=va+72|0;H=P+48|0;k=N;p:while(1){do if(a[k+54>>0]|0){if(c[k+36>>2]|0)break;w=k+50|0;m=b[w>>1]|0;if((m&65535)>3)break;u=k+55|0;u=(d[u>>0]|d[u+1>>0]<<8)<<4&128|2;v=u&65535;q:do if(!(m<<16>>16))m=0;else{q=k+4|0;r=k+40|0;s=k+32|0;t=k+12|0;m=0;while(1){c[va>>2]=J;c[x>>2]=J;c[y>>2]=0;a[z>>0]=0;c[A>>2]=0;c[B>>2]=v;c[C>>2]=0;c[D>>2]=I;a[E>>0]=1;a[F>>0]=1;p=b[(c[q>>2]|0)+(m<<1)>>1]|0;n=p<<16>>16;if(p<<16>>16==-2){c[y>>2]=c[(c[r>>2]|0)+4+(m*20|0)>>2];c[A>>2]=c[(c[s>>2]|0)+(m<<2)>>2];b[G>>1]=-2;p=Ul(va)|0}else{h=c[t>>2]|0;do if(p<<16>>16==(b[h+40>>1]|0))n=-1;else{if(p<<16>>16<=-1)break;a[z>>0]=a[(c[h+4>>2]|0)+(n<<4)+13>>0]|0;c[A>>2]=c[(c[s>>2]|0)+(m<<2)>>2]}while(0);b[G>>1]=n;p=Tl(va)|0}if(!p)break;n=0;while(1){ka=p+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?(b[p+12>>1]&u)<<16>>16:0){ka=172;break}n=(n|0)==0?p:n;p=Tl(va)|0;if(!p){ka=174;break}}if((ka|0)==172)n=p;else if((ka|0)==174)if(!n)break q;c[(c[H>>2]|0)+(m<<2)>>2]=n;m=m+1|0;if(m>>>0>=(e[w>>1]|0)>>>0)break q}}while(0);if((m|0)==(e[w>>1]|0))break p}while(0);k=c[k+20>>2]|0;if(!k)break o}ka=k+55|0;c[K>>2]=4609;if(!(((d[ka>>0]|d[ka+1>>0]<<8)&32)==0?(ka=Q+64|0,Q=k+64|0,!((c[Q>>2]&c[ka>>2]|0)==0?(c[Q+4>>2]&c[ka+4>>2]|0)==0:0)):0))c[K>>2]=4673;ka=m&65535;b[P+40>>1]=ka;b[P+24>>1]=ka;c[P+32>>2]=k;b[P+20>>1]=39}while(0);if(c[K>>2]|0){b[P+22>>1]=1;c[R+816>>2]=P;k=P+8|0;c[k>>2]=1;c[k+4>>2]=0;c[R+756>>2]=I;b[R+72>>1]=1;k=c[R+8>>2]|0;if(k|0)a[R+47>>0]=c[k>>2];if(!(b[S>>1]&256))ka=264;else{a[R+51>>0]=1;ka=264}}else ka=187}else ka=187;if((ka|0)==187){E=c[U>>2]|0;k=c[E+4>>2]|0;S=a[E+46>>0]|0;F=k+8+((S&255)*72|0)|0;H=c[c[E>>2]>>2]|0;G=c[O>>2]|0;I=G+56|0;J=G+48|0;c[J>>2]=I;K=G+40|0;b[K>>1]=0;M=G+44|0;b[M>>1]=3;N=G+36|0;c[N>>2]=0;z=U+24|0;c[z>>2]=2e4;do if(S<<24>>24){A=G+16|0;B=E+492|0;C=G+8|0;D=H+81|0;s=0;y=0;m=k+8|0;p=2e4;r=0;n=0;q=0;x=0;r:while(1){a[A>>0]=y;c[z>>2]=p+1e3;p=c[m+40>>2]|0;t=c[B>>2]|0;h=(t|0)>0;s:do if(h){k=0;while(1){if((c[E+496+(k<<2)>>2]|0)==(p|0))break;k=k+1|0;if((k|0)>=(t|0)){k=0;p=0;break s}}k=cw(1,0,k|0)|0;p=L()|0}else{k=0;p=0}while(0);u=C;c[u>>2]=k;c[u+4>>2]=p;u=a[m+36>>0]|0;w=((u|s)&10)==0;v=w?r:n;w=w?q:x;if(!(c[(c[m+16>>2]|0)+56>>2]|0)){k=Xl(U,v,w)|0;h=0;p=0}else{k=m+72|0;if(k>>>0>=F>>>0|h^1){h=0;p=0}else{q=m;h=0;p=0;while(1){if((h|0)==0&(p|0)==0?(a[q+108>>0]&10)==0:0){h=0;p=0}else{r=c[q+112>>2]|0;q=0;while(1){if((c[E+496+(q<<2)>>2]|0)==(r|0)){ka=202;break}q=q+1|0;if((q|0)>=(t|0)){q=0;r=0;break}}if((ka|0)==202){ka=0;q=cw(1,0,q|0)|0;r=L()|0}h=q|h;p=r|p}q=k+72|0;if(q>>>0<F>>>0){S=k;k=q;q=S}else break}}k=Wl(U,v,w,h,p)|0}do if(!k)if(!(a[(c[ba>>2]|0)+9>>0]|0)){k=C;n=c[k>>2]|n;k=c[k+4>>2]|x;ka=212;break}else{k=Yl(U,v,w,h,p)|0;ka=211;break}else ka=211;while(0);t:do if((ka|0)==211){ka=0;p=C;n=c[p>>2]|n;p=c[p+4>>2]|x;switch(k|0){case 0:{k=p;ka=212;break t}case 101:break;default:break r}Db(28,43626,V);k=p}while(0);if((ka|0)==212){ka=0;if(a[D>>0]|0){k=0;break}}m=m+72|0;if(m>>>0>=F>>>0){k=0;break}s=u;y=y+1|0;p=c[z>>2]|0;r=v;q=w;x=k}m=c[J>>2]|0;if((m|0)!=(I|0)){if(H|0){if(c[H+480>>2]|0){Xd(H,m);p=k;break}V=m;if((c[H+304>>2]|0)>>>0<=V>>>0?(c[H+308>>2]|0)>>>0>V>>>0:0){p=H+300|0;c[m>>2]=c[p>>2];c[p>>2]=m;p=k;break}}if(m)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);p=k;break}else{p=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);p=k;break}else p=k}else p=k}else p=0;while(0);k=c[N>>2]|0;do if(k&17408|0){if(k&1024|0?(Y=G+28|0,a[Y>>0]|0):0){k=G+32|0;m=c[k>>2]|0;do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Z=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);a[Y>>0]=0;c[k>>2]=0;break}if(k&16384|0?(Z=G+32|0,W=c[Z>>2]|0,W|0):0){k=c[W+16>>2]|0;u:do if(k){do if(H|0){m=H+480|0;if(!(c[m>>2]|0)){n=k;if((c[H+304>>2]|0)>>>0>n>>>0)break;if((c[H+308>>2]|0)>>>0<=n>>>0)break;ka=H+300|0;c[k>>2]=c[ka>>2];c[ka>>2]=k}else Xd(H,k);k=c[Z>>2]|0;ka=250;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);ka=248;break}else{ka=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);ka=248;break}}else ka=248;while(0);do if((ka|0)==248){k=c[Z>>2]|0;if(!H){ka=255;break}m=H+480|0;ka=250}while(0);do if((ka|0)==250){if(c[m>>2]|0){Xd(H,k);break}m=k;if((c[H+304>>2]|0)>>>0>m>>>0){ka=255;break}if((c[H+308>>2]|0)>>>0<=m>>>0){ka=255;break}Y=H+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k}while(0);do if((ka|0)==255){if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[Z>>2]=0}}while(0);c[J>>2]=I;b[K>>1]=0;b[M>>1]=3;c[N>>2]=0;if(p|0){ka=625;break}Jl(i,0);if(a[ra>>0]|0){ka=625;break}if(c[X>>2]|0){Jl(i,(e[i+72>>1]|0)+1&65535);if(!(a[ra>>0]|0))ka=264;else break}else ka=265}if((ka|0)==264?(c[X>>2]|0)==0:0)ka=265;if((ka|0)==265?!(0==0?(c[Aa+32>>2]&4096|0)==0:0):0){Z=i+64|0;c[Z>>2]=-1;c[Z+4>>2]=-1}if((c[f+36>>2]|0)==0?(a[ra>>0]|0)==0:0){v:do if((j|0)!=0&(d[za>>0]|0)>1?(b[_>>1]&256)==0:0){k=c[j>>2]|0;if((k|0)>0){q=0;h=0;n=0;while(1){m=c[j+4+(q*20|0)>>2]|0;if(!m){m=0;p=0}else{m=Pl(aa,m)|0;p=L()|0;k=c[j>>2]|0}m=m|h;n=p|n;q=q+1|0;if((q|0)>=(k|0)){t=m;s=n;break}else h=m}}else{t=0;s=0}r=c[$>>2]|0;if(!r)A=t;else{k=c[r>>2]|0;if((k|0)>0){q=0;h=k;m=0;k=0;do{n=c[r+4+(q*20|0)>>2]|0;if(!n){n=0;p=0}else{n=Pl(aa,n)|0;p=L()|0;h=c[r>>2]|0}m=n|m;k=p|k;q=q+1|0}while((q|0)<(h|0))}else{m=0;k=0}s=k|s;A=m|t}k=a[za>>0]|0;m=k&255;n=m+-1|0;if((k&255)>1){if(!T){z=n;x=-1;n=-1;while(1){y=qa+(z*80|0)|0;p=c[qa+(z*80|0)+64>>2]|0;h=c[ca>>2]|0;q=d[p+16>>0]|0;w:do if(!(a[h+8+(q*72|0)+36>>0]&8))m=x;else{w=p+8|0;u=c[w>>2]|0;w=c[w+4>>2]|0;if(!((u&A|0)==0&(w&s|0)==0)){m=x;break}t=c[ba>>2]|0;r=c[t+20>>2]|0;t=c[t+12>>2]|0;v=r+(t*48|0)|0;t=(t|0)>0;do if(t){h=h+8+(q*72|0)+40|0;p=r;do{aa=p+40|0;if(!((c[aa>>2]&u|0)==0?(c[aa+4>>2]&w|0)==0:0)){q=c[p>>2]|0;if(!(c[q+4>>2]&1)){m=x;break w}if((c[h>>2]|0)!=(b[q+36>>1]|0)){m=x;break w}}p=p+48|0}while(p>>>0<v>>>0);h=x&~u;p=n&~w;if(!t)break;n=r;do{aa=n+40|0;if(!((c[aa>>2]&u|0)==0?(c[aa+4>>2]&w|0)==0:0)){aa=n+10|0;b[aa>>1]=b[aa>>1]|4}n=n+48|0}while(n>>>0<v>>>0)}else{h=x&~u;p=n&~w}while(0);n=(k&255)+-1|0;if((n|0)!=(z|0)){fw(y|0,qa+(m*80|0)|0,(n-z|0)*80|0)|0;k=a[za>>0]|0}k=k+-1<<24>>24;a[za>>0]=k;o=o+-1|0;m=h;n=p}while(0);if((z|0)>1){aa=z;z=z+-1|0;x=m;m=aa}else{ba=o;J=m;I=n;break v}}}z=n;x=-1;n=-1;while(1){y=qa+(z*80|0)|0;p=c[qa+(z*80|0)+64>>2]|0;h=c[ca>>2]|0;q=d[p+16>>0]|0;x:do if(!(a[h+8+(q*72|0)+36>>0]&8))m=x;else{if(!(c[p+36>>2]&4096)){m=x;break}w=p+8|0;v=c[w>>2]|0;w=c[w+4>>2]|0;if(!((v&A|0)==0&(w&s|0)==0)){m=x;break}t=c[ba>>2]|0;r=c[t+20>>2]|0;t=c[t+12>>2]|0;u=r+(t*48|0)|0;t=(t|0)>0;do if(t){q=h+8+(q*72|0)+40|0;p=r;do{aa=p+40|0;if(!((c[aa>>2]&v|0)==0?(c[aa+4>>2]&w|0)==0:0)){h=c[p>>2]|0;if(!(c[h+4>>2]&1)){m=x;break x}if((c[q>>2]|0)!=(b[h+36>>1]|0)){m=x;break x}}p=p+48|0}while(p>>>0<u>>>0);h=x&~v;p=n&~w;if(!t)break;n=r;do{aa=n+40|0;if(!((c[aa>>2]&v|0)==0?(c[aa+4>>2]&w|0)==0:0)){aa=n+10|0;b[aa>>1]=b[aa>>1]|4}n=n+48|0}while(n>>>0<u>>>0)}else{h=x&~v;p=n&~w}while(0);n=(k&255)+-1|0;if((n|0)!=(z|0)){fw(y|0,qa+(m*80|0)|0,(n-z|0)*80|0)|0;k=a[za>>0]|0}k=k+-1<<24>>24;a[za>>0]=k;o=o+-1|0;m=h;n=p}while(0);if((z|0)>1){aa=z;z=z+-1|0;x=m;m=aa}else{ba=o;J=m;I=n;break}}}else{ba=o;J=-1;I=-1}}else{ba=o;J=-1;I=-1}while(0);ca=(c[i>>2]|0)+132|0;c[ca>>2]=(c[ca>>2]|0)+(b[i+72>>1]|0);do if(da&4){m=(c[i+816>>2]|0)+36|0;n=c[m>>2]|0;o=n&4096;if(!o){if(!(da&8)){D=0;break}k=c[g+24>>2]|0;if(c[k+56>>2]|0){D=0;break}if((da&16|0)==0&(n&8192|0)!=0){D=0;break}}else k=c[g+24>>2]|0;a[i+49>>0]=2-(o>>>12);if(!((n&64|0)==0?1:(c[k+36>>2]&32|0)!=0)){c[m>>2]=n&-65;D=ta&8}else D=0}else D=0;while(0);H=(ba|0)>0;if(H){E=Aa+16|0;F=f+116|0;G=i+49|0;w=ea^1;x=ua+108|0;y=ua+112|0;C=(l|0)==0|w;z=ua+104|0;A=f+40|0;B=i+51|0;u=qa;v=0;while(1){p=d[u+44>>0]|0;s=g+8+(p*72|0)+16|0;o=c[s>>2]|0;m=c[o+72>>2]|0;if(!m)t=-1e6;else{n=c[E>>2]|0;k=0;while(1)if((c[n+(k<<4)+12>>2]|0)==(m|0)){t=k;break}else k=k+1|0}q=c[u+64>>2]|0;r=o+36|0;do if(!(c[r>>2]&2)){if(c[o+12>>2]|0)break;k=c[q+36>>2]|0;if(k&1024|0){k=c[o+64>>2]|0;y:do if(!k)o=0;else while(1){if((c[k>>2]|0)==(Aa|0)){o=k;break y}k=c[k+24>>2]|0;if(!k){o=0;break}}while(0);m=c[g+8+(p*72|0)+40>>2]|0;k=c[x>>2]|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;ea=c[z>>2]|0;a[ea+(k*20|0)>>0]=-93;b[ea+(k*20|0)+2>>1]=0;c[ea+(k*20|0)+4>>2]=m;c[ea+(k*20|0)+8>>2]=0;c[ea+(k*20|0)+12>>2]=0;c[ea+(k*20|0)+16>>2]=0;a[ea+(k*20|0)+1>>0]=0}else k=Di(ua,163,m,0,0)|0;if(a[(c[ua>>2]|0)+81>>0]|0)break;if((k|0)<0)k=(c[x>>2]|0)+-1|0;m=c[z>>2]|0;n=m+(k*20|0)+1|0;if(a[n>>0]|0){Ei(ua,m+(k*20|0)|0,o,-12);break}if(!o)break;c[m+(k*20|0)+16>>2]=o;a[n>>0]=-12;ea=o+12|0;c[ea>>2]=(c[ea>>2]|0)+1;break}if(c[o+56>>2]|0)break;if(k&64|ia|0){Hj(f,t,c[o+28>>2]|0,0,c[o>>2]|0);break}m=g+8+(p*72|0)+40|0;if(!(a[G>>0]|0))k=108;else{c[ga>>2]=c[m>>2];k=109}Gj(f,c[m>>2]|0,t,o,k);do if(!(a[G>>0]|0)){if((b[o+42>>1]|0)>=64)break;if(c[r>>2]&32|0)break;n=g+8+(p*72|0)+56|0;k=c[n>>2]|0;n=c[n+4>>2]|0;if((k|0)==0&(n|0)==0)m=0;else{m=0;do{k=bw(k|0,n|0,1)|0;n=L()|0;m=m+1|0}while(!((k|0)==0&(n|0)==0))}if(a[(c[ua>>2]|0)+81>>0]|0)break;k=(c[x>>2]|0)+-1|0;n=c[z>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=m;a[o>>0]=-3;break}else{Ei(ua,n+(k*20|0)|0,m,-3);break}}while(0);k=c[x>>2]|0;if((k|0)<=0)break;b[(c[z>>2]|0)+((k+-1|0)*20|0)+2>>1]=D}while(0);h=q+36|0;z:do if(c[h>>2]&512|0){p=c[q+32>>2]|0;do if(c[r>>2]&32|0){ea=p+55|0;if(((d[ea>>0]|d[ea+1>>0]<<8)&3)!=2|w)break;c[u+8>>2]=c[u+4>>2];break z}while(0);do if(!(a[G>>0]|0)){if(!C){o=106;k=l;break}k=c[A>>2]|0;c[A>>2]=k+1;o=108}else{k=c[(c[s>>2]|0)+8>>2]|0;if((k|0)==0|(k|0)==(p|0))k=l;else{m=l;do{m=m+1|0;k=c[k+20>>2]|0}while(!((k|0)==0|(k|0)==(p|0)));k=m}c[ha>>2]=k;o=109}while(0);c[u+8>>2]=k;m=c[p+44>>2]|0;n=c[x>>2]|0;if((c[y>>2]|0)>(n|0)){c[x>>2]=n+1;ea=c[z>>2]|0;a[ea+(n*20|0)>>0]=o;b[ea+(n*20|0)+2>>1]=0;c[ea+(n*20|0)+4>>2]=k;c[ea+(n*20|0)+8>>2]=m;c[ea+(n*20|0)+12>>2]=t;c[ea+(n*20|0)+16>>2]=0;a[ea+(n*20|0)+1>>0]=0}else Di(ua,o,k,m,t)|0;m=c[wa>>2]|0;n=Ij(f,p)|0;A:do if(n|0){k=c[m>>2]|0;if(!(a[k+81>>0]|0)){da=c[m+104>>2]|0;ea=(c[m+108>>2]|0)+-1|0;a[da+(ea*20|0)+1>>0]=-9;c[da+(ea*20|0)+16>>2]=n;break}if(c[k+480>>2]|0)break;ea=(c[n>>2]|0)+-1|0;c[n>>2]=ea;if(ea|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break A}m=n;if((c[k+304>>2]|0)>>>0>m>>>0)break;if((c[k+308>>2]|0)>>>0<=m>>>0)break;ea=k+300|0;c[n>>2]=c[ea>>2];c[ea>>2]=n;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ea=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);ea=c[h>>2]|0;if(!((ea&15|0)!=0&(ea&32770|0)==0))break;if(b[fa>>1]&1)break;if((a[B>>0]|0)==2)break;k=c[x>>2]|0;if((k|0)<=0)break;b[(c[z>>2]|0)+((k+-1|0)*20|0)+2>>1]=2}while(0);B:do if((t|0)>-1){o=c[F>>2]|0;o=(o|0)==0?f:o;k=o+84|0;m=c[k>>2]|0;n=1<<t;if(m&n|0)break;c[k>>2]=m|n;if((t|0)!=1)break;r=c[o>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[r>>2]|0,0,r,va,0,542)|0;if(m|0){cd(o,32157,ja);c[o+12>>2]=m;break}ea=c[va>>2]|0;c[(c[k>>2]|0)+20>>2]=ea;k=c[r+92>>2]|0;o=c[ea+4>>2]|0;c[o+4>>2]=c[ea>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;h=o+36|0;q=(c[p>>2]|0)-(c[h>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[p>>2]=k;n=o+80|0;k=c[n>>2]|0;if(!k)break;m=k+-4|0;c[n>>2]=m;k=m;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ea=(c[14820]|0)+1|0;c[14820]=ea;c[14821]=(ea|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](m)|0;ka=421;break}else{k=Wa[c[29352>>2]&127](m)|0;ka=421}while(0);do if((ka|0)==421){ka=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ea=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ea=Se(c[o>>2]|0,p,q)|0;c[h>>2]=(c[p>>2]|0)-(q&65535);if((ea|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break B}while(0)}while(0);v=v+1|0;if((v|0)==(ba|0)){aa=x;break}else u=u+80|0}}else aa=ua+108|0;c[i+56>>2]=c[aa>>2];if(!(a[ra>>0]|0)){if(!H){Aa=i;Ra=Ba;return Aa|0}W=va+20|0;X=va+4|0;Y=va+8|0;Z=va+24|0;_=f+40|0;j=f+19|0;$=f+44|0;V=0;U=I;do{T=qa+(V*80|0)|0;m=qa+(V*80|0)+64|0;if(c[(c[m>>2]|0)+36>>2]&16384|0){O=qa+(V*80|0)+44|0;I=d[O>>0]|0;S=c[wa>>2]|0;R=S+108|0;k=c[R>>2]|0;P=S+112|0;if((c[P>>2]|0)>(k|0)){c[R>>2]=k+1;A=c[S+104>>2]|0;a[A+(k*20|0)>>0]=17;A=A+(k*20|0)+1|0;B=A+19|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0));Q=k}else Q=Di(S,17,0,0,0)|0;M=g+8+(I*72|0)+16|0;H=c[M>>2]|0;k=c[ma>>2]|0;ja=c[la>>2]|0;N=k+(ja*48|0)|0;G=c[m>>2]|0;C:do if((ja|0)>0){y=g+8+(I*72|0)+40|0;z=g+8+(I*72|0)+36|0;A=H+4|0;B=G+44|0;C=G+48|0;D=G+56|0;w=0;x=k;p=0;k=0;m=0;n=0;while(1){o=c[x>>2]|0;ja=G;do if((c[ja>>2]|0)==0&(c[ja+4>>2]|0)==0){if(b[x+10>>1]&2)break;if(c[o+4>>2]&1|0)break;ja=c[y>>2]|0;a[W>>0]=3;c[X>>2]=127;c[Y>>2]=128;c[Z>>2]=ja;_j(va,o)|0;if(!(a[W>>0]|0))break;ja=c[f>>2]|0;k=Xk(ja,k,dk(ja,o,0,0)|0)|0}while(0);do if((c[x+20>>2]|0)==(c[y>>2]|0)){o=e[x+12>>1]|0;if(!(o&130)){o=w;break}if(a[z>>0]&8?!((o&128|0)==0?1:(c[(c[x>>2]|0)+4>>2]&1|0)!=0):0){o=w;break}ja=x+32|0;if(!((c[ja>>2]&J|0)==0?(c[ja+4>>2]&U|0)==0:0)){o=w;break}o=c[x+28>>2]|0;if((o|0)<0){o=w;break}if(!(Vl(c[x>>2]|0,a[(c[(c[M>>2]|0)+4>>2]|0)+(o<<4)+13>>0]|0)|0)){o=w;break}ja=(o|0)>63;u=cw(1,0,o|0)|0;v=L()|0;u=ja?0:u;v=ja?-2147483648:v;if(!(p<<24>>24)){t=c[(c[A>>2]|0)+(o<<4)>>2]|0;c[xa>>2]=c[H>>2];c[xa+4>>2]=t;Db(284,43705,xa);t=1}else t=p;if(!((u&m|0)==0&(v&n|0)==0)){p=t;o=w;break}r=c[f>>2]|0;o=w+1|0;if((w|0)<(e[B>>1]|0))p=c[C>>2]|0;else{s=w+8&-8;q=s<<2;D:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))ka=471;else break C;else{do if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0))){h=r+300|0;p=c[h>>2]|0;if(p|0){c[h>>2]=c[p>>2];ja=r+284|0;c[ja>>2]=(c[ja>>2]|0)+1;break D}h=r+296|0;p=c[h>>2]|0;if(!p){p=r+292|0;break}else{c[h>>2]=c[p>>2];ja=r+284|0;c[ja>>2]=(c[ja>>2]|0)+1;break D}}else p=r+288|0;while(0);c[p>>2]=(c[p>>2]|0)+1;ka=471}while(0);if((ka|0)==471){ka=0;p=_d(r,q,0)|0}if(!p)break C;ew(p|0,c[C>>2]|0,e[B>>1]<<2|0)|0;h=c[C>>2]|0;E:do if((h|0)!=(D|0)){if(c[r+480>>2]|0){Xd(r,h);break}q=h;do if((c[r+304>>2]|0)>>>0<=q>>>0){if((c[r+308>>2]|0)>>>0<=q>>>0)break;ja=r+300|0;c[h>>2]=c[ja>>2];c[ja>>2]=h;break E}while(0);if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{ja=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[C>>2]=p;b[B>>1]=s}c[p+(w<<2)>>2]=x;p=t;m=u|m;n=v|n}else o=w;while(0);x=x+48|0;if(x>>>0>=N>>>0){ka=486;break}else w=o}}else{o=0;k=0;n=0;m=0;ka=486}while(0);F:do if((ka|0)==486){ka=0;K=o&65535;b[G+40>>1]=K;b[G+24>>1]=K;K=G+36|0;c[K>>2]=16961;D=g+8+(I*72|0)+56|0;B=D;h=c[B+4>>2]|0;B=c[B>>2]&~m;z=h&((n|-2147483648)^2147483647);E=H+42|0;y=b[E>>1]|0;p=y<<16>>16;A=(y<<16>>16<63?y:63)<<16>>16;y=y<<16>>16>0;if(y){n=0;m=o;do{ja=cw(1,0,n|0)|0;m=m+(((ja&B|0)!=0|((L()|0)&z|0)!=0)&1)|0;n=n+1|0}while((n|0)<(A|0))}else m=o;q=c[f>>2]|0;C=((h|0)<0?p+-62|0:1)+m|0;s=C&65535;u=C<<16;t=u>>16;h=(u>>14)+7&-8;u=u>>15;r=u+2|0;p=h+72+(t+7+u+r&-8)|0;o=((p|0)<0)<<31>>31;G:do if(!q){ja=Sv(p|0,o|0,-1,-1)|0;l=L()|0;if(l>>>0>0|(l|0)==0&ja>>>0>2147483390)break F;if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](p)|0;ka=513;break}m=Wa[c[29356>>2]&127](p)|0;if((c[14985]|0)>>>0<p>>>0)c[14985]=p;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){ja=c[14978]|0;l=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;ia=L()|0;c[14768]=((ia|0)<0|(ia|0)==0&l>>>0<=ja>>>0)&1}n=Wa[c[29340>>2]&127](m)|0;if(!n)break F;m=Wa[c[29352>>2]&127](n)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){F=n;break}c[14987]=m;F=n}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0)break F}else{do if(!(0<o>>>0|(0==(o|0)?(e[q+276>>1]|0)>>>0<p>>>0:0))){n=q+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ka=q+284|0;c[ka>>2]=(c[ka>>2]|0)+1;ka=513;break G}n=q+296|0;m=c[n>>2]|0;if(!m){m=q+292|0;break}else{c[n>>2]=c[m>>2];ka=q+284|0;c[ka>>2]=(c[ka>>2]|0)+1;ka=513;break G}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(q,p,o)|0;ka=513}while(0);if((ka|0)==513){ka=0;if(!m)break;else F=m}gw(F|0,0,p|0)|0;n=F+72|0;x=F+32|0;c[x>>2]=n;n=n+h|0;c[F+8>>2]=n;n=n+r|0;w=F+4|0;c[w>>2]=n;c[F+28>>2]=n+u;b[F+52>>1]=s;b[F+50>>1]=t+65535;c[G+32>>2]=F;c[F>>2]=43731;c[F+12>>2]=H;n=c[ma>>2]|0;if(n>>>0<N>>>0){v=g+8+(I*72|0)+40|0;u=g+8+(I*72|0)+36|0;m=0;p=0;s=0;while(1){do if((c[n+20>>2]|0)==(c[v>>2]|0)){o=e[n+12>>1]|0;if(!(o&130)){o=s;break}if(a[u>>0]&8?!((o&128|0)==0?1:(c[(c[n>>2]|0)+4>>2]&1|0)!=0):0){o=s;break}ja=n+32|0;if(!((c[ja>>2]&J|0)==0?(c[ja+4>>2]&U|0)==0:0)){o=s;break}q=c[n+28>>2]|0;if((q|0)<0){o=s;break}r=c[n>>2]|0;if(!(Vl(r,a[(c[(c[M>>2]|0)+4>>2]|0)+(q<<4)+13>>0]|0)|0)){o=s;break}ja=(q|0)>63;o=cw(1,0,q|0)|0;h=L()|0;o=ja?0:o;h=ja?-2147483648:h;if(!((o&p|0)==0&(h&s|0)==0)){o=s;break}t=o|p;h=h|s;b[(c[w>>2]|0)+(m<<1)>>1]=q;o=c[r+12>>2]|0;p=c[r+16>>2]|0;H:do if(!(c[o+4>>2]&256)){do if(p|0){if(!(c[p+4>>2]&256))break;o=Yi(f,p)|0;ka=531;break H}while(0);o=Yi(f,o)|0;if(o|0){ka=532;break}o=Yi(f,p)|0;ka=531}else{o=Yi(f,o)|0;ka=531}while(0);if((ka|0)==531){ka=0;if(!o)o=34049;else ka=532}if((ka|0)==532){ka=0;o=c[o>>2]|0}c[(c[x>>2]|0)+(m<<2)>>2]=o;m=m+1|0;p=t;o=h}else o=s;while(0);n=n+48|0;if(n>>>0>=N>>>0)break;else s=o}}else m=0;if(y){n=0;do{ja=cw(1,0,n|0)|0;if(!((ja&B|0)==0&((L()|0)&z|0)==0)){b[(c[w>>2]|0)+(m<<1)>>1]=n;c[(c[x>>2]|0)+(m<<2)>>2]=34049;m=m+1|0}n=n+1|0}while((n|0)<(A|0))}do if((c[D+4>>2]|0)<0){if((b[E>>1]|0)<=63){z=m;break}n=63;do{b[(c[w>>2]|0)+(m<<1)>>1]=n;c[(c[x>>2]|0)+(m<<2)>>2]=34049;m=m+1|0;n=n+1|0}while((n|0)<(b[E>>1]|0));z=m}else z=m;while(0);b[(c[w>>2]|0)+(z<<1)>>1]=-1;c[(c[x>>2]|0)+(z<<2)>>2]=34049;m=c[_>>2]|0;c[_>>2]=m+1;u=qa+(V*80|0)+8|0;c[u>>2]=m;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;ja=c[S+104>>2]|0;a[ja+(n*20|0)>>0]=112;b[ja+(n*20|0)+2>>1]=0;c[ja+(n*20|0)+4>>2]=m;c[ja+(n*20|0)+8>>2]=C;c[ja+(n*20|0)+12>>2]=0;c[ja+(n*20|0)+16>>2]=0;a[ja+(n*20|0)+1>>0]=0}else Di(S,112,m,C,0)|0;m=c[wa>>2]|0;o=Ij(f,F)|0;I:do if(o|0){n=c[m>>2]|0;if(!(a[n+81>>0]|0)){l=c[m+104>>2]|0;ja=(c[m+108>>2]|0)+-1|0;a[l+(ja*20|0)+1>>0]=-9;c[l+(ja*20|0)+16>>2]=o;break}if(c[n+480>>2]|0)break;ja=(c[o>>2]|0)+-1|0;c[o>>2]=ja;if(ja|0)break;m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break I}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;ja=m+300|0;c[o>>2]=c[ja>>2];c[ja>>2]=o;break I}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ja=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);v=c[(c[ya>>2]|0)+4>>2]|0;t=d[O>>0]|0;y=v+8+(t*72|0)+37|0;do if(!(a[y>>0]&16)){m=c[qa+(V*80|0)+4>>2]|0;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;x=c[S+104>>2]|0;a[x+(n*20|0)>>0]=36;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=m;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=0;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0;x=n;m=0;break}else{x=Di(S,36,m,0,0)|0;m=0;break}}else{p=c[v+8+(t*72|0)+28>>2]|0;m=c[R>>2]|0;if((c[P>>2]|0)>(m|0)){c[R>>2]=m+1;A=c[S+104>>2]|0;a[A+(m*20|0)>>0]=70;A=A+(m*20|0)+1|0;B=A+19|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}else m=Di(S,70,0,0,0)|0;n=c[v+8+(t*72|0)+24>>2]|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=13;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=p;c[ja+(o*20|0)+8>>2]=0;c[ja+(o*20|0)+12>>2]=n;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0}else Di(S,13,p,0,n)|0;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;x=c[S+104>>2]|0;a[x+(n*20|0)>>0]=14;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=p;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=0;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0;x=n;break}else{x=Di(S,14,p,0,0)|0;break}}while(0);q=(k|0)!=0;if(q){h=(c[sa>>2]|0)+-1|0;c[sa>>2]=h;Tj(f,k,h,16);c[K>>2]=c[K>>2]|131072}else h=0;n=a[j>>0]|0;if(!(n<<24>>24)){w=(c[$>>2]|0)+1|0;c[$>>2]=w}else{w=n+-1<<24>>24;a[j>>0]=w;w=c[f+148+((w&255)<<2)>>2]|0}s=qa+(V*80|0)+4|0;r=el(f,F,c[s>>2]|0,w,0,0,0,0)|0;n=c[u>>2]|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=-124;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=n;c[ja+(o*20|0)+8>>2]=w;c[ja+(o*20|0)+12>>2]=0;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0}else Di(S,132,n,w,0)|0;p=c[R>>2]|0;if((p|0)>0)b[(c[S+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=16;do if(q){o=c[S+12>>2]|0;n=~h;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,S,n);break}else{c[(c[o+64>>2]|0)+(n<<2)>>2]=p;break}}while(0);do if(!(a[y>>0]&16)){m=c[s>>2]|0;n=x+1|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=5;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=m;c[ja+(o*20|0)+8>>2]=n;c[ja+(o*20|0)+12>>2]=0;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0;break}else{Di(S,5,m,n,0)|0;break}}else{if((m|0)<0)m=(c[R>>2]|0)+-1|0;if(!(a[(c[S>>2]|0)+81>>0]|0))m=(c[S+104>>2]|0)+(m*20|0)|0;else m=59308;c[m+8>>2]=r+z;q=c[s>>2]|0;h=c[v+8+(t*72|0)+32>>2]|0;n=c[wa>>2]|0;if((x|0)<0)m=(c[n+108>>2]|0)+-1|0;else m=x;if(!(a[(c[n>>2]|0)+81>>0]|0))m=(c[n+104>>2]|0)+(m*20|0)|0;else m=59308;p=c[n+108>>2]|0;if((p|0)>(x|0)?(a[(c[f>>2]|0)+81>>0]|0)==0:0){n=x;while(1){o=m+4|0;J:do if((c[o>>2]|0)==(q|0))switch(a[m>>0]|0){case 90:{a[m>>0]=78;l=m+8|0;c[o>>2]=(c[l>>2]|0)+h;ja=m+12|0;c[l>>2]=c[ja>>2];c[ja>>2]=0;break J}case -128:{a[m>>0]=83;ja=m+8|0;c[o>>2]=c[ja>>2];c[ja>>2]=1;break J}default:break J}while(0);n=n+1|0;if((n|0)==(p|0))break;else m=m+20|0}}m=c[R>>2]|0;if((c[P>>2]|0)>(m|0)){c[R>>2]=m+1;ja=c[S+104>>2]|0;a[ja+(m*20|0)>>0]=11;b[ja+(m*20|0)+2>>1]=0;c[ja+(m*20|0)+4>>2]=0;c[ja+(m*20|0)+8>>2]=x;c[ja+(m*20|0)+12>>2]=0;c[ja+(m*20|0)+16>>2]=0;a[ja+(m*20|0)+1>>0]=0}else Di(S,11,0,x,0)|0;a[y>>0]=a[y>>0]&-17}while(0);n=c[R>>2]|0;if((n|0)>0)b[(c[S+104>>2]|0)+((n+-1|0)*20|0)+2>>1]=3;o=(a[(c[S>>2]|0)+81>>0]|0)==0;if(o)m=(c[S+104>>2]|0)+(((x|0)<0?n+-1|0:x)*20|0)|0;else m=59308;c[m+8>>2]=n;do if(w){m=a[j>>0]|0;if((m&255)>=8)break;a[j>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=w;n=c[R>>2]|0}while(0);if(o)m=(c[S+104>>2]|0)+(((Q|0)<0?n+-1|0:Q)*20|0)|0;else m=59308;c[m+8>>2]=n}while(0);if(k|0)ni(c[f>>2]|0,k);if(a[ra>>0]|0){ka=625;break e}}Kl(f,g,T,ta);c[qa+(V*80|0)+32>>2]=c[aa>>2];J=Ll(f,ua,i,V,T,J,U)|0;U=L()|0;c[na>>2]=c[qa+(V*80|0)+24>>2];V=V+1|0}while((V|0)<(ba|0));Ra=Ba;return i|0}}}else ka=625;while(0);if((ka|0)==625?(i|0)==0:0){Aa=0;Ra=Ba;return Aa|0}c[oa>>2]=c[pa>>2];k=a[za>>0]|0;K:do if(k<<24>>24){n=Aa+480|0;o=Aa+304|0;p=Aa+308|0;h=Aa+300|0;if(!Aa){m=0;while(1){xa=c[i+752+(m*80|0)+64>>2]|0;if((xa|0)!=0?(c[xa+36>>2]&2048|0)!=0:0){k=c[i+752+(m*80|0)+60>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{xa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-xa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);k=a[za>>0]|0}m=m+1|0;if(m>>>0>=(k&255)>>>0)break K}}m=0;do{xa=c[i+752+(m*80|0)+64>>2]|0;if((xa|0)!=0?(c[xa+36>>2]&2048|0)!=0:0){k=c[i+752+(m*80|0)+60>>2]|0;do if(k|0){if(c[n>>2]|0){Xd(Aa,k);break}xa=k;if((c[o>>2]|0)>>>0<=xa>>>0?(c[p>>2]|0)>>>0>xa>>>0:0){c[k>>2]=c[h>>2];c[h>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{xa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-xa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=a[za>>0]|0}m=m+1|0}while(m>>>0<(k&255)>>>0)}while(0);om(ya);m=i+60|0;k=c[m>>2]|0;if(k|0)do{c[m>>2]=c[k+52>>2];$l(Aa,k);k=c[m>>2]|0}while((k|0)!=0);if(Aa|0){if(c[Aa+480>>2]|0){Xd(Aa,i);Aa=0;Ra=Ba;return Aa|0}za=i;if((c[Aa+304>>2]|0)>>>0<=za>>>0?(c[Aa+308>>2]|0)>>>0>za>>>0:0){Aa=Aa+300|0;c[i>>2]=c[Aa>>2];c[Aa>>2]=i;Aa=0;Ra=Ba;return Aa|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}else{Aa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}return 0}function rl(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+16|0;u=P;O=c[f+8>>2]|0;K=a[k>>0]|0;y=k+4|0;M=c[y>>2]|0;if(!j)s=0;else s=d[j+1>>0]|0;if(!i)N=0;else N=(c[i>>2]|0)==0?0:i;F=(N|0)!=0;v=(s|0)!=0;do if(!(v|F)?(o=c[g+16>>2]|0,(o|0)>0):0){i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;L=c[O+104>>2]|0;a[L+(n*20|0)>>0]=47;b[L+(n*20|0)+2>>1]=0;c[L+(n*20|0)+4>>2]=o;c[L+(n*20|0)+8>>2]=l;c[L+(n*20|0)+12>>2]=1;c[L+(n*20|0)+16>>2]=0;a[L+(n*20|0)+1>>0]=0;break}else{Di(O,47,o,l,1)|0;break}}while(0);n=c[g>>2]|0;t=c[n>>2]|0;q=k+8|0;r=c[q>>2]|0;if(r){p=f+44|0;o=c[p>>2]|0;if((r+t|0)>(o|0)){i=0;E=16}else{C=0;L=r}}else{if(F){i=(c[c[N>>2]>>2]|0)+((a[N+32>>0]&1^1)&255)|0;p=f+44|0;o=i+(c[p>>2]|0)|0;c[p>>2]=o}else{o=f+44|0;i=0;p=o;o=c[o>>2]|0}r=o+1|0;c[q>>2]=r;E=16}if((E|0)==16){c[p>>2]=o+t;C=i;L=r}c[k+12>>2]=t;a:do if((h|0)>-1)if((t|0)>0){n=O+108|0;o=O+112|0;p=O+104|0;i=0;do{q=i+L|0;r=c[n>>2]|0;if((c[o>>2]|0)>(r|0)){c[n>>2]=r+1;G=c[p>>2]|0;a[G+(r*20|0)>>0]=90;b[G+(r*20|0)+2>>1]=0;c[G+(r*20|0)+4>>2]=h;c[G+(r*20|0)+8>>2]=i;c[G+(r*20|0)+12>>2]=q;c[G+(r*20|0)+16>>2]=0;a[G+(r*20|0)+1>>0]=0}else Di(O,90,h,i,q)|0;i=i+1|0}while((i|0)!=(t|0));G=t;x=L}else{G=t;x=L}else{switch(K<<24>>24){case 3:{G=t;x=L;break a}case 9:case 10:case 13:{i=1;break}default:i=0}if((K|2)<<24>>24!=14&((s|0)==0&F)){i=i|12;q=N+4|0;p=c[q>>2]|0;o=c[N>>2]|0;if((p|0)<(c[o>>2]|0)){n=p;do{p=b[o+4+(n*20|0)+16>>1]|0;if(!(p<<16>>16))n=n+1|0;else{n=n+1|0;b[(c[g>>2]|0)+4+(((p&65535)+-1|0)*20|0)+16>>1]=n-(c[q>>2]|0);o=c[N>>2]|0}}while((n|0)<(c[o>>2]|0));n=c[g>>2]|0;r=c[n>>2]|0}else r=t;if((r|0)>0){p=t;o=L;q=0;do{G=(b[n+4+(q*20|0)+16>>1]|0)==0;o=G?o:0;p=p+((G^1)<<31>>31)|0;q=q+1|0}while((q|0)<(r|0))}else{p=t;o=L}}else{p=t;o=L}c[u>>2]=L;a[u+4>>0]=i;if(c[g+12>>2]|0?(C|0)>0&(i&8)!=0:0){c[N+36>>2]=u;G=p;x=0;break}Oj(f,n,L,0,i);G=p;x=o}while(0);do if(v){b:do switch(a[j+1>>0]|0){case 2:{n=f+44|0;i=c[n>>2]|0;w=i+1|0;c[n>>2]=i+G;n=j+8|0;i=c[n>>2]|0;o=c[O>>2]|0;if(!(a[o+81>>0]|0)){j=c[O+104>>2]|0;u=j+(i*20|0)+1|0;v=j+(i*20|0)+16|0;kg(o,a[u>>0]|0,c[v>>2]|0);a[u>>0]=0;c[v>>2]=0;a[j+(i*20|0)>>0]=-86;i=c[n>>2]|0}if((i|0)<0)i=(c[O+108>>2]|0)+-1|0;if(!(a[(c[O>>2]|0)+81>>0]|0))i=(c[O+104>>2]|0)+(i*20|0)|0;else i=59308;a[i>>0]=73;c[i+4>>2]=1;c[i+8>>2]=w;t=O+108|0;i=c[t>>2]|0;h=i+G|0;u=G+-1|0;v=O+112|0;if((G|0)>0){s=O+104|0;r=0;do{q=Yi(f,c[(c[g>>2]|0)+4+(r*20|0)>>2]|0)|0;i=r+L|0;n=r+w|0;o=c[t>>2]|0;p=(c[v>>2]|0)>(o|0);do if((r|0)<(u|0))if(p){c[t>>2]=o+1;j=c[s>>2]|0;a[j+(o*20|0)>>0]=52;b[j+(o*20|0)+2>>1]=0;c[j+(o*20|0)+4>>2]=i;c[j+(o*20|0)+8>>2]=h;c[j+(o*20|0)+12>>2]=n;c[j+(o*20|0)+16>>2]=0;a[j+(o*20|0)+1>>0]=0;break}else{Di(O,52,i,h,n)|0;break}else if(p){c[t>>2]=o+1;j=c[s>>2]|0;a[j+(o*20|0)>>0]=53;b[j+(o*20|0)+2>>1]=0;c[j+(o*20|0)+4>>2]=i;c[j+(o*20|0)+8>>2]=l;c[j+(o*20|0)+12>>2]=n;c[j+(o*20|0)+16>>2]=0;a[j+(o*20|0)+1>>0]=0;break}else{Di(O,53,i,l,n)|0;break}while(0);do if(!(a[(c[O>>2]|0)+81>>0]|0)){i=(c[t>>2]|0)+-1|0;n=c[s>>2]|0;o=n+(i*20|0)+1|0;if(a[o>>0]|0){Ei(O,n+(i*20|0)|0,q,-2);break}if(q|0){c[n+(i*20|0)+16>>2]=q;a[o>>0]=-2}}while(0);i=c[t>>2]|0;if((i|0)>0)b[(c[s>>2]|0)+((i+-1|0)*20|0)+2>>1]=128;r=r+1|0}while((r|0)!=(G|0))}if((c[v>>2]|0)>(i|0)){c[t>>2]=i+1;j=c[O+104>>2]|0;a[j+(i*20|0)>>0]=78;b[j+(i*20|0)+2>>1]=0;c[j+(i*20|0)+4>>2]=L;c[j+(i*20|0)+8>>2]=w;c[j+(i*20|0)+12>>2]=u;c[j+(i*20|0)+16>>2]=0;a[j+(i*20|0)+1>>0]=0;break b}else{Di(O,78,L,w,u)|0;break b}}case 1:{i=c[j+8>>2]|0;n=c[O>>2]|0;if(!(a[n+81>>0]|0)){j=c[O+104>>2]|0;v=j+(i*20|0)+1|0;w=j+(i*20|0)+16|0;kg(n,a[v>>0]|0,c[w>>2]|0);a[v>>0]=0;c[w>>2]=0;a[j+(i*20|0)>>0]=-86}break}default:ym(f,c[j+4>>2]|0,l,G,L)}while(0);if((N|0)==0?(z=c[g+16>>2]|0,(z|0)>0):0){i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;j=c[O+104>>2]|0;a[j+(n*20|0)>>0]=47;b[j+(n*20|0)+2>>1]=0;c[j+(n*20|0)+4>>2]=z;c[j+(n*20|0)+8>>2]=l;c[j+(n*20|0)+12>>2]=1;c[j+(n*20|0)+16>>2]=0;a[j+(n*20|0)+1>>0]=0;break}else{Di(O,47,z,l,1)|0;break}}}while(0);c:do switch(K<<24>>24){case 1:{q=f+19|0;i=a[q>>0]|0;if(!(i<<24>>24)){K=f+44|0;p=(c[K>>2]|0)+1|0;c[K>>2]=p}else{p=i+-1<<24>>24;a[q>>0]=p;p=c[f+148+((p&255)<<2)>>2]|0}n=O+108|0;i=c[n>>2]|0;o=O+112|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=p;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(O,92,L,G,p)|0;i=c[n>>2]|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=M;c[K+(i*20|0)+8>>2]=p;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,M,p,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=G}if((p|0)!=0?(A=a[q>>0]|0,(A&255)<8):0){a[q>>0]=A+1<<24>>24;c[f+148+((A&255)<<2)>>2]=p;E=237}else E=237;break}case 2:{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;E=c[O+104>>2]|0;a[E+(n*20|0)>>0]=-123;b[E+(n*20|0)+2>>1]=0;c[E+(n*20|0)+4>>2]=M;c[E+(n*20|0)+8>>2]=L;c[E+(n*20|0)+12>>2]=G;c[E+(n*20|0)+16>>2]=0;a[E+(n*20|0)+1>>0]=0;E=237;break c}else{Di(O,133,M,L,G)|0;E=237;break c}}case 12:case 14:case 6:case 5:{t=C+1|0;h=(C|0)==0;do if(h){i=f+19|0;n=a[i>>0]|0;if(!(n<<24>>24)){E=f+44|0;s=(c[E>>2]|0)+1|0;c[E>>2]=s;break}else{s=n+-1<<24>>24;a[i>>0]=s;s=c[f+148+((s&255)<<2)>>2]|0;break}}else{i=f+32|0;n=c[i>>2]|0;o=f+28|0;p=c[o>>2]|0;if((p|0)>(C|0)){c[i>>2]=n+t;c[o>>2]=p-t;s=n;break}else{E=f+44|0;s=c[E>>2]|0;c[E>>2]=s+t;s=s+1|0;break}}while(0);p=s+C|0;q=O+108|0;i=c[q>>2]|0;r=O+112|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;E=c[O+104>>2]|0;a[E+(i*20|0)>>0]=92;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=L;c[E+(i*20|0)+8>>2]=G;c[E+(i*20|0)+12>>2]=p;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0}else Di(O,92,L,G,p)|0;if(K<<24>>24==6){i=c[q>>2]|0;n=i+4|0;o=M+1|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=29;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=o;c[K+(i*20|0)+8>>2]=n;c[K+(i*20|0)+12>>2]=s;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,29,o,n,s)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){K=c[O+104>>2]|0;a[K+(i*20|0)+1>>0]=-3;c[K+(i*20|0)+16>>2]=0}i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=o;c[K+(i*20|0)+8>>2]=s;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,o,s,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){L=c[O+104>>2]|0;a[L+(i*20|0)+1>>0]=-3;c[L+(i*20|0)+16>>2]=G}}if(!F){o=f+19|0;i=a[o>>0]|0;if(!(i<<24>>24)){L=f+44|0;n=(c[L>>2]|0)+1|0;c[L>>2]=n}else{n=i+-1<<24>>24;a[o>>0]=n;n=c[f+148+((n&255)<<2)>>2]|0}i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=121;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=n;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,121,M,n,0)|0;i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=122;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=s;c[L+(i*20|0)+12>>2]=n;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,122,M,s,n)|0;i=c[q>>2]|0;if((i|0)>0)b[(c[O+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=8;if(n|0?(H=a[o>>0]|0,(H&255)<8):0){a[o>>0]=H+1<<24>>24;c[f+148+((H&255)<<2)>>2]=n}}else zm(f,N,g,p,x,1,C);if(!h){i=f+28|0;if((c[i>>2]|0)>(C|0)){E=237;break c}c[i>>2]=t;c[f+32>>2]=s;E=237;break c}if((s|0)!=0?(I=f+19|0,J=a[I>>0]|0,(J&255)<8):0){a[I>>0]=J+1<<24>>24;c[f+148+((J&255)<<2)>>2]=s;E=237}else E=237;break}case 11:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}h=f+19|0;i=a[h>>0]|0;if(!(i<<24>>24)){K=f+44|0;s=(c[K>>2]|0)+1|0;c[K>>2]=s}else{s=i+-1<<24>>24;a[h>>0]=s;s=c[f+148+((s&255)<<2)>>2]|0}p=c[k+16>>2]|0;q=O+108|0;i=c[q>>2]|0;r=O+112|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=s;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,92,L,G,s)|0;n=c[O>>2]|0;do if(a[n+81>>0]|0){if((G|0)!=-12)kg(n,G,p)}else{if((i|0)<0)i=(c[q>>2]|0)+-1|0;n=c[O+104>>2]|0;o=n+(i*20|0)|0;if((G|0)<=-1?(B=n+(i*20|0)+1|0,(a[B>>0]|0)==0):0){if((G|0)==-3){c[n+(i*20|0)+16>>2]=p;a[B>>0]=-3;break}if(!p)break;c[n+(i*20|0)+16>>2]=p;a[B>>0]=G;if((G|0)!=-12)break;K=p+12|0;c[K>>2]=(c[K>>2]|0)+1;break}Ei(O,o,p,G)}while(0);i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=M;c[K+(i*20|0)+8>>2]=s;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,M,s,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=G}if(s|0?(D=a[h>>0]|0,(D&255)<8):0){a[h>>0]=D+1<<24>>24;c[f+148+((D&255)<<2)>>2]=s}break}case 3:{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;E=c[O+104>>2]|0;a[E+(n*20|0)>>0]=70;b[E+(n*20|0)+2>>1]=0;c[E+(n*20|0)+4>>2]=1;c[E+(n*20|0)+8>>2]=M;c[E+(n*20|0)+12>>2]=0;c[E+(n*20|0)+16>>2]=0;a[E+(n*20|0)+1>>0]=0;E=237;break c}else{Di(O,70,1,M,0)|0;E=237;break c}}case 10:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}break}case 9:case 13:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}if(K<<24>>24==13){i=c[y>>2]|0;n=O+108|0;o=c[n>>2]|0;if((c[O+112>>2]|0)>(o|0)){c[n>>2]=o+1;f=c[O+104>>2]|0;a[f+(o*20|0)>>0]=14;b[f+(o*20|0)+2>>1]=0;c[f+(o*20|0)+4>>2]=i;c[f+(o*20|0)+8>>2]=0;c[f+(o*20|0)+12>>2]=0;c[f+(o*20|0)+16>>2]=0;a[f+(o*20|0)+1>>0]=0;break c}else{Di(O,14,i,0,0)|0;break c}}else{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;f=c[O+104>>2]|0;a[f+(n*20|0)>>0]=81;b[f+(n*20|0)+2>>1]=0;c[f+(n*20|0)+4>>2]=L;c[f+(n*20|0)+8>>2]=G;c[f+(n*20|0)+12>>2]=0;c[f+(n*20|0)+16>>2]=0;a[f+(n*20|0)+1>>0]=0;break c}else{Di(O,81,L,G,0)|0;break c}}}case 7:case 8:{v=c[k+20>>2]|0;w=c[v>>2]|0;l=f+19|0;i=a[l>>0]|0;if(!(i<<24>>24)){i=f+44|0;j=(c[i>>2]|0)+1|0;c[i>>2]=j;i=0}else{i=i+-1<<24>>24;a[l>>0]=i;j=c[f+148+((i&255)<<2)>>2]|0}z=w+2|0;y=(z|0)==1;do if(y)if(!(i<<24>>24)){J=f+44|0;x=(c[J>>2]|0)+1|0;c[J>>2]=x;break}else{x=i+-1<<24>>24;a[l>>0]=x;x=c[f+148+((x&255)<<2)>>2]|0;break}else{i=f+32|0;n=c[i>>2]|0;o=f+28|0;p=c[o>>2]|0;if((p|0)<(z|0)){J=f+44|0;x=c[J>>2]|0;c[J>>2]=x+z;x=x+1|0;break}else{c[i>>2]=n+z;c[o>>2]=p-z;x=n;break}}while(0);u=x+w|0;r=u+1|0;q=K<<24>>24==8;if(q){n=M+1|0;o=O+108|0;i=c[o>>2]|0;p=O+112|0;if((c[p>>2]|0)>(i|0)){c[o>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=29;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=0;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,29,n,0,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){t=c[O+104>>2]|0;a[t+(i*20|0)+1>>0]=-3;c[t+(i*20|0)+16>>2]=G;t=i;h=o;s=p}else{t=i;h=o;s=p}}else{t=0;h=O+108|0;s=O+112|0}i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=r;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(O,92,L,G,r)|0;if(q){i=M+1|0;n=c[h>>2]|0;if((c[s>>2]|0)>(n|0)){c[h>>2]=n+1;K=c[O+104>>2]|0;a[K+(n*20|0)>>0]=-124;b[K+(n*20|0)+2>>1]=0;c[K+(n*20|0)+4>>2]=i;c[K+(n*20|0)+8>>2]=r;c[K+(n*20|0)+12>>2]=0;c[K+(n*20|0)+16>>2]=0;a[K+(n*20|0)+1>>0]=0}else Di(O,132,i,r,0)|0;i=c[h>>2]|0;if((i|0)>0)b[(c[O+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=16}if((w|0)>0){n=L+-1|0;o=O+104|0;i=0;do{p=n+(e[v+4+(i*20|0)+16>>1]|0)|0;q=i+x|0;r=c[h>>2]|0;if((c[s>>2]|0)>(r|0)){c[h>>2]=r+1;L=c[o>>2]|0;a[L+(r*20|0)>>0]=79;b[L+(r*20|0)+2>>1]=0;c[L+(r*20|0)+4>>2]=p;c[L+(r*20|0)+8>>2]=q;c[L+(r*20|0)+12>>2]=0;c[L+(r*20|0)+16>>2]=0;a[L+(r*20|0)+1>>0]=0}else Di(O,79,p,q,0)|0;i=i+1|0}while((i|0)!=(w|0))}i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=120;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=u;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,120,M,u,0)|0;i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=92;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=x;c[L+(i*20|0)+8>>2]=z;c[L+(i*20|0)+12>>2]=j;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,92,x,z,j)|0;i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=-124;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=j;c[L+(i*20|0)+12>>2]=x;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else i=Di(O,132,M,j,x)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=z}if(t|0){n=c[h>>2]|0;if(!(a[(c[O>>2]|0)+81>>0]|0))i=(c[O+104>>2]|0)+(((t|0)<0?n+-1|0:t)*20|0)|0;else i=59308;c[i+8>>2]=n}do if(j|0){i=a[l>>0]|0;if((i&255)>=8)break;a[l>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=j}while(0);if(!y){i=f+28|0;if((c[i>>2]|0)>=(z|0)){E=237;break c}c[i>>2]=z;c[f+32>>2]=x;E=237;break c}if(!x){E=237;break c}i=a[l>>0]|0;if((i&255)>=8){E=237;break c}a[l>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=x;E=237;break}default:E=237}while(0);if((E|0)==237?N|0:0){Ra=P;return}i=c[g+12>>2]|0;if(!i){Ra=P;return}n=O+108|0;o=c[n>>2]|0;if((c[O+112>>2]|0)>(o|0)){c[n>>2]=o+1;O=c[O+104>>2]|0;a[O+(o*20|0)>>0]=49;b[O+(o*20|0)+2>>1]=0;c[O+(o*20|0)+4>>2]=i;c[O+(o*20|0)+8>>2]=m;c[O+(o*20|0)+12>>2]=0;c[O+(o*20|0)+16>>2]=0;a[O+(o*20|0)+1>>0]=0;Ra=P;return}else{Di(O,49,i,m,0)|0;Ra=P;return}}function sl(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;D=c[e>>2]|0;E=D+8|0;F=c[E>>2]|0;G=c[e+4>>2]|0;I=c[D>>2]|0;H=e+46|0;g=a[H>>0]|0;if(!(g<<24>>24))f=F+12|0;else{f=F+12|0;u=e+51|0;v=F+108|0;w=F+112|0;x=F+104|0;y=D+44|0;s=g&255;do{t=s;s=s+-1|0;m=c[e+752+(s*80|0)+64>>2]|0;r=e+752+(s*80|0)+45|0;do if((a[r>>0]|0)==-86){g=c[f>>2]|0;h=~c[e+752+(s*80|0)+24>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0){mk(g,F,h);break}else{c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];break}}else{do if((((((a[u>>0]|0)==2?(t|0)==(d[H>>0]|0):0)?(c[m+36>>2]&512|0)!=0:0)?(A=c[m+32>>2]|0,q=A+55|0,((d[q>>0]|d[q+1>>0]<<8)&128)!=0):0)?(q=b[m+30>>1]|0,B=q&65535,q<<16>>16!=0):0)?(b[(c[A+8>>2]|0)+(B<<1)>>1]|0)>35:0){l=(c[y>>2]|0)+1|0;k=e+752+(s*80|0)+8|0;g=0;do{h=c[k>>2]|0;i=g+l|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;q=c[x>>2]|0;a[q+(j*20|0)>>0]=90;b[q+(j*20|0)+2>>1]=0;c[q+(j*20|0)+4>>2]=h;c[q+(j*20|0)+8>>2]=g;c[q+(j*20|0)+12>>2]=i;c[q+(j*20|0)+16>>2]=0;a[q+(j*20|0)+1>>0]=0}else Di(F,90,h,g,i)|0;g=g+1|0}while((g|0)!=(B|0));i=a[r>>0]|0;c[y>>2]=B+1+(c[y>>2]|0);i=i<<24>>24==4?22:25;h=c[k>>2]|0;g=c[v>>2]|0;if((c[w>>2]|0)>(g|0)){c[v>>2]=g+1;q=c[x>>2]|0;a[q+(g*20|0)>>0]=i;b[q+(g*20|0)+2>>1]=0;c[q+(g*20|0)+4>>2]=h;c[q+(g*20|0)+8>>2]=0;c[q+(g*20|0)+12>>2]=l;c[q+(g*20|0)+16>>2]=0;a[q+(g*20|0)+1>>0]=0}else g=Di(F,i,h,0,l)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){q=c[x>>2]|0;a[q+(g*20|0)+1>>0]=-3;c[q+(g*20|0)+16>>2]=B}h=c[e+752+(s*80|0)+52>>2]|0;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;q=c[x>>2]|0;a[q+(i*20|0)>>0]=11;b[q+(i*20|0)+2>>1]=0;c[q+(i*20|0)+4>>2]=1;c[q+(i*20|0)+8>>2]=h;c[q+(i*20|0)+12>>2]=0;c[q+(i*20|0)+16>>2]=0;a[q+(i*20|0)+1>>0]=0;break}else{Di(F,11,1,h,0)|0;break}}else g=0;while(0);h=c[f>>2]|0;i=~c[e+752+(s*80|0)+24>>2];if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0)mk(h,F,i);else c[(c[h+64>>2]|0)+(i<<2)>>2]=c[v>>2];h=a[r>>0]|0;i=c[e+752+(s*80|0)+48>>2]|0;j=c[e+752+(s*80|0)+52>>2]|0;k=d[e+752+(s*80|0)+46>>0]|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;q=c[x>>2]|0;a[q+(l*20|0)>>0]=h;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=i;c[q+(l*20|0)+8>>2]=j;c[q+(l*20|0)+12>>2]=k;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0}else Di(F,h&255,i,j,k)|0;h=c[v>>2]|0;if((h|0)>0)b[(c[x>>2]|0)+((h+-1|0)*20|0)+2>>1]=d[e+752+(s*80|0)+47>>0]|0;if(g|0){if(!(a[(c[F>>2]|0)+81>>0]|0))g=(c[x>>2]|0)+(((g|0)<0?h+-1|0:g)*20|0)|0;else g=59308;c[g+8>>2]=h}}while(0);q=m+36|0;if(c[q>>2]&2048|0?(z=e+752+(s*80|0)+56|0,(c[z>>2]|0)>0):0){g=c[f>>2]|0;h=~c[e+752+(s*80|0)+16>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,F,h);else c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];g=c[z>>2]|0;if((g|0)>0){p=e+752+(s*80|0)+8|0;o=g;n=(c[e+752+(s*80|0)+60>>2]|0)+((g+-1|0)*20|0)|0;l=c[v>>2]|0;h=a[(c[F>>2]|0)+81>>0]|0;while(1){m=n+4|0;g=c[m>>2]|0;if(!(h<<24>>24))g=(c[x>>2]|0)+(((g|0)<-1?l+-1|0:g+1|0)*20|0)|0;else g=59308;c[g+8>>2]=l;j=n+16|0;do if((a[j>>0]|0)!=-86){k=c[n+12>>2]|0;if(k|0){g=c[p>>2]|0;h=l+2|0;i=c[n+8>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;J=c[x>>2]|0;a[J+(l*20|0)>>0]=26;b[J+(l*20|0)+2>>1]=0;c[J+(l*20|0)+4>>2]=g;c[J+(l*20|0)+8>>2]=h;c[J+(l*20|0)+12>>2]=i;c[J+(l*20|0)+16>>2]=0;a[J+(l*20|0)+1>>0]=0;g=l}else g=Di(F,26,g,h,i)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){J=c[x>>2]|0;a[J+(g*20|0)+1>>0]=-3;c[J+(g*20|0)+16>>2]=k}}g=a[j>>0]|0;h=c[n>>2]|0;i=c[m>>2]|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;J=c[x>>2]|0;a[J+(j*20|0)>>0]=g;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=h;c[J+(j*20|0)+8>>2]=i;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0;break}else{Di(F,g&255,h,i,0)|0;break}}while(0);g=c[m>>2]|0;l=c[v>>2]|0;h=a[(c[F>>2]|0)+81>>0]|0;if(!(h<<24>>24))g=(c[x>>2]|0)+((((g|0)<1?l:g)+-1|0)*20|0)|0;else g=59308;c[g+8>>2]=l;if((o|0)<=1)break;else{o=o+-1|0;n=n+-20|0}}}}g=c[f>>2]|0;h=~c[e+752+(s*80|0)+12>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,F,h);else c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];g=e+752+(s*80|0)+20|0;h=c[g>>2]|0;if(h|0){i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=11;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=0;c[J+(i*20|0)+8>>2]=h;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else Di(F,11,0,h,0)|0;g=c[g>>2]|0;h=c[v>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){J=h+-1|0;p=c[x>>2]|0;c[p+(((g|0)<0?J:g)*20|0)+8>>2]=h;g=p+(((g|0)<2?J:g+-2|0)*20|0)|0}else{c[14829]=h;g=59308}c[g+8>>2]=h}g=c[e+752+(s*80|0)+40>>2]|0;do if(g|0){h=(c[e+752+(s*80|0)+36>>2]|0)>>>1;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=49;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=h;c[J+(i*20|0)+8>>2]=g;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0;break}else{Di(F,49,h,g,0)|0;break}}while(0);h=c[e+752+(s*80|0)>>2]|0;if(h|0){i=c[q>>2]|0;g=c[v>>2]|0;if((c[w>>2]|0)>(g|0)){c[v>>2]=g+1;j=c[x>>2]|0;a[j+(g*20|0)>>0]=47;b[j+(g*20|0)+2>>1]=0;c[j+(g*20|0)+4>>2]=h;c[j+(g*20|0)+8>>2]=0;c[j+(g*20|0)+12>>2]=0;c[j+(g*20|0)+16>>2]=0;a[j+(g*20|0)+1>>0]=0;j=g}else j=Di(F,47,h,0,0)|0;do if(!(i&64)){g=c[e+752+(s*80|0)+4>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=-127;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=g;c[J+(h*20|0)+8>>2]=0;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,129,g,0,0)|0;break}}while(0);if(!(i&512)){if(i&8192|0?c[e+752+(s*80|0)+56>>2]|0:0)C=87}else C=87;do if((C|0)==87){C=0;g=c[e+752+(s*80|0)+8>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=-127;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=g;c[J+(h*20|0)+8>>2]=0;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,129,g,0,0)|0;break}}while(0);do if((a[r>>0]|0)==66){g=c[e+752+(s*80|0)+48>>2]|0;h=c[e+752+(s*80|0)+28>>2]|0;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=g;c[J+(i*20|0)+8>>2]=h;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0;break}else{Di(F,12,g,h,0)|0;break}}else{g=c[e+752+(s*80|0)+28>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=11;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=0;c[J+(h*20|0)+8>>2]=g;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,11,0,g,0)|0;break}}while(0);h=c[v>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))g=(c[x>>2]|0)+(((j|0)<0?h+-1|0:j)*20|0)|0;else g=59308;c[g+8>>2]=h}}while((t|0)>1)}f=c[f>>2]|0;g=~c[e+36>>2];if(((c[f+56>>2]|0)+(c[f+60>>2]|0)|0)<0)mk(f,F,g);else c[(c[f+64>>2]|0)+(g<<2)>>2]=c[F+108>>2];f=a[H>>0]|0;a:do if(f<<24>>24){y=e+49|0;z=I+81|0;x=F+108|0;A=F+104|0;B=f&255;v=e+752|0;w=0;while(1){g=d[v+44>>0]|0;i=c[G+8+(g*72|0)+16>>2]|0;h=c[v+64>>2]|0;do if(!(a[G+8+(g*72|0)+37>>0]&16)){g=c[h+36>>2]|0;if(!(g&576)){if(!(g&8192))break;g=v+56|0}else g=h+32|0;g=c[g>>2]|0;if(g|0){if(a[y>>0]|0?(c[(c[g+12>>2]|0)+36>>2]&32|0)==0:0)break;if(!(a[z>>0]|0)){r=c[x>>2]|0;j=c[v+32>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))h=(c[A>>2]|0)+(((j|0)<0?r+-1|0:j)*20|0)|0;else h=59308;if((j|0)<(r|0)){s=i+36|0;t=v+8|0;u=g+52|0;q=i+8|0;p=g+4|0;o=c[v+4>>2]|0;while(1){m=h+4|0;b:do if((c[m>>2]|0)==(o|0))switch(a[h>>0]|0){case 90:{n=h+8|0;g=c[n>>2]|0;if(c[s>>2]&32){i=q;while(1){i=c[i>>2]|0;J=i+55|0;if(((d[J>>0]|d[J+1>>0]<<8)&3)==2)break;else i=i+20|0}g=b[(c[i+4>>2]|0)+(g<<1)>>1]|0}k=g&65535;g=b[u>>1]|0;if(!(g<<16>>16))break b;l=c[p>>2]|0;i=g&65535;g=0;while(1){if((b[l+(g<<1)>>1]|0)==k<<16>>16)break;g=g+1|0;if(g>>>0>=i>>>0)break b}if((g&65535)<<16>>16<=-1)break b;c[n>>2]=g<<16>>16;c[m>>2]=c[t>>2];break b}case -128:{c[m>>2]=c[t>>2];a[h>>0]=-121;break b}case 21:{c[m>>2]=c[t>>2];break b}default:break b}while(0);j=j+1|0;if((j|0)==(r|0))break;else h=h+20|0}}}}}else{k=c[v+32>>2]|0;m=c[v+4>>2]|0;l=c[G+8+(g*72|0)+32>>2]|0;h=c[E>>2]|0;if((k|0)<0)g=(c[h+108>>2]|0)+-1|0;else g=k;if(!(a[(c[h>>2]|0)+81>>0]|0))g=(c[h+104>>2]|0)+(g*20|0)|0;else g=59308;j=c[h+108>>2]|0;if((j|0)>(k|0)?(a[(c[D>>2]|0)+81>>0]|0)==0:0){i=g;g=k;while(1){h=i+4|0;c:do if((c[h>>2]|0)==(m|0))switch(a[i>>0]|0){case 90:{a[i>>0]=78;C=i+8|0;c[h>>2]=(c[C>>2]|0)+l;J=i+12|0;c[C>>2]=c[J>>2];c[J>>2]=0;break c}case -128:{a[i>>0]=73;c[h>>2]=0;c[i+12>>2]=0;break c}default:break c}while(0);g=g+1|0;if((g|0)==(j|0))break;else i=i+20|0}}}while(0);w=w+1|0;if(w>>>0>=B>>>0)break;else v=v+80|0}c[D+132>>2]=c[e+40>>2];if(f<<24>>24){h=I+480|0;i=I+304|0;j=I+308|0;k=I+300|0;if(!I){g=0;while(1){J=c[e+752+(g*80|0)+64>>2]|0;if((J|0)!=0?(c[J+36>>2]&2048|0)!=0:0){f=c[e+752+(g*80|0)+60>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{J=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=a[H>>0]|0}g=g+1|0;if(g>>>0>=(f&255)>>>0)break a}}g=0;do{J=c[e+752+(g*80|0)+64>>2]|0;if((J|0)!=0?(c[J+36>>2]&2048|0)!=0:0){f=c[e+752+(g*80|0)+60>>2]|0;do if(f|0){if(c[h>>2]|0){Xd(I,f);break}J=f;if((c[i>>2]|0)>>>0<=J>>>0?(c[j>>2]|0)>>>0>J>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{J=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=a[H>>0]|0}g=g+1|0}while(g>>>0<(f&255)>>>0)}}else c[D+132>>2]=c[e+40>>2];while(0);om(e+80|0);g=e+60|0;f=c[g>>2]|0;if(f|0)do{c[g>>2]=c[f+52>>2];$l(I,f);f=c[g>>2]|0}while((f|0)!=0);if(I|0){if(c[I+480>>2]|0){Xd(I,e);return}J=e;if((c[I+304>>2]|0)>>>0<=J>>>0?(c[I+308>>2]|0)>>>0>J>>>0:0){J=I+300|0;c[e>>2]=c[J>>2];c[J>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{J=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function tl(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;E=d+8|0;H=c[E>>2]|0;a[f>>0]=1;C=f+44|0;if((c[C>>2]|0)>0){r=d+56|0;s=d+19|0;t=d+32|0;u=d+28|0;v=H+108|0;w=H+112|0;y=d+44|0;z=H+104|0;A=f+36|0;B=H+12|0;p=c[f+40>>2]|0;g=0;q=0;while(1){k=c[(c[p>>2]|0)+20>>2]|0;if(!k){h=0;o=0}else{j=c[k>>2]|0;do if((j|0)==1){h=a[s>>0]|0;if(!(h<<24>>24)){h=(c[y>>2]|0)+1|0;c[y>>2]=h;break}else{h=h+-1<<24>>24;a[s>>0]=h;h=c[d+148+((h&255)<<2)>>2]|0;break}}else{h=c[t>>2]|0;i=c[u>>2]|0;if((i|0)<(j|0)){h=c[y>>2]|0;c[y>>2]=h+j;h=h+1|0;break}else{c[t>>2]=h+j;c[u>>2]=i-j;break}}while(0);Oj(d,k,h,0,1);o=j}i=c[p+12>>2]|0;if((i|0)>-1){n=(c[r>>2]|0)+-1|0;c[r>>2]=n;ym(d,i,n,1,h)}else n=0;m=p+4|0;do if(c[(c[m>>2]|0)+4>>2]&32){if((o|0)>0){l=0;i=k+4|0;while(1){j=Yi(d,c[i>>2]|0)|0;l=l+1|0;k=(j|0)!=0;if(!((l|0)<(o|0)&(k^1)))break;else i=i+20|0}if(!k)G=19}else G=19;if((G|0)==19){G=0;j=c[(c[d>>2]|0)+8>>2]|0}if(!g)if(!(c[A>>2]|0))g=0;else{g=(c[y>>2]|0)+1|0;c[y>>2]=g}i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;l=c[z>>2]|0;a[l+(i*20|0)>>0]=82;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=g;c[l+(i*20|0)+8>>2]=0;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else i=Di(H,82,g,0,0)|0;if(!(a[(c[H>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[v>>2]|0)+-1|0;k=c[z>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(H,k+(i*20|0)|0,j,-2);break}if(j){c[k+(i*20|0)+16>>2]=j;a[l>>0]=-2}}}while(0);i=c[p+8>>2]|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;l=c[z>>2]|0;a[l+(j*20|0)>>0]=-102;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=h;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(H,154,0,h,i)|0;i=c[m>>2]|0;j=c[H>>2]|0;do if(a[j+81>>0]|0){if(c[i+4>>2]&16|0){if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}m=i;if((c[j+304>>2]|0)>>>0<=m>>>0?(c[j+308>>2]|0)>>>0>m>>>0:0){m=j+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}else{l=c[z>>2]|0;m=(c[v>>2]|0)+-1|0;a[l+(m*20|0)+1>>0]=-8;c[l+(m*20|0)+16>>2]=i}while(0);i=c[v>>2]|0;if((i|0)>0)b[(c[z>>2]|0)+((i+-1|0)*20|0)+2>>1]=o&255;if((o|0)==1){if(h|0?(x=a[s>>0]|0,(x&255)<8):0){a[s>>0]=x+1<<24>>24;c[d+148+((x&255)<<2)>>2]=h}}else if((c[u>>2]|0)<(o|0)){c[u>>2]=o;c[t>>2]=h}do if(n|0){i=c[B>>2]|0;h=~n;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0){mk(i,H,h);break}else{c[(c[i+64>>2]|0)+(h<<2)>>2]=c[v>>2];break}}while(0);q=q+1|0;if((q|0)>=(c[C>>2]|0))break;else p=p+16|0}if(g)G=63;else G=62}else G=62;if((G|0)==62)if((e|0)==0|(c[f+36>>2]|0)==0)i=0;else{g=e;G=63}do if((G|0)==63){h=H+108|0;i=c[h>>2]|0;if((c[H+112>>2]|0)>(i|0)){c[h>>2]=i+1;C=c[H+104>>2]|0;a[C+(i*20|0)>>0]=18;b[C+(i*20|0)+2>>1]=0;c[C+(i*20|0)+4>>2]=g;c[C+(i*20|0)+8>>2]=0;c[C+(i*20|0)+12>>2]=0;c[C+(i*20|0)+16>>2]=0;a[C+(i*20|0)+1>>0]=0;break}else{i=Di(H,18,g,0,0)|0;break}}while(0);n=f+36|0;if((c[n>>2]|0)>0){l=c[f+28>>2]|0;m=0;while(1){g=c[l+20>>2]|0;o=c[l+16>>2]|0;do if(g){if((a[g>>0]|0)!=-88){F=Jj(d,g,o)|0;G=75;break}k=c[E>>2]|0;g=c[g+28>>2]|0;h=k+108|0;j=c[h>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[h>>2]=j+1;C=c[k+104>>2]|0;a[C+(j*20|0)>>0]=78;b[C+(j*20|0)+2>>1]=0;c[C+(j*20|0)+4>>2]=g;c[C+(j*20|0)+8>>2]=o;c[C+(j*20|0)+12>>2]=0;c[C+(j*20|0)+16>>2]=0;a[C+(j*20|0)+1>>0]=0;break}else{Di(k,78,g,o,0)|0;break}}else{F=Jj(d,0,o)|0;G=75}while(0);do if(((G|0)==75?(G=0,(F|0)!=(o|0)):0)?(D=c[E>>2]|0,D|0):0){g=D+108|0;h=c[g>>2]|0;if((c[D+112>>2]|0)>(h|0)){c[g>>2]=h+1;C=c[D+104>>2]|0;a[C+(h*20|0)>>0]=79;b[C+(h*20|0)+2>>1]=0;c[C+(h*20|0)+4>>2]=F;c[C+(h*20|0)+8>>2]=o;c[C+(h*20|0)+12>>2]=0;c[C+(h*20|0)+16>>2]=0;a[C+(h*20|0)+1>>0]=0;break}else{Di(D,79,F,o,0)|0;break}}while(0);m=m+1|0;if((m|0)>=(c[n>>2]|0))break;else l=l+24|0}}a[f>>0]=0;if(!i)return;h=c[H+108>>2]|0;if(!(a[(c[H>>2]|0)+81>>0]|0))g=(c[H+104>>2]|0)+(((i|0)<0?h+-1|0:i)*20|0)|0;else g=59308;c[g+8>>2]=h;return}function ul(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;t=u;r=c[d+8>>2]|0;s=f+44|0;if((c[s>>2]|0)==(0-(c[f+32>>2]|0)|0)){Ra=u;return}g=c[f+16>>2]|0;h=c[f+20>>2]|0;p=r+108|0;i=c[p>>2]|0;q=r+112|0;if((c[q>>2]|0)>(i|0)){c[p>>2]=i+1;o=c[r+104>>2]|0;a[o+(i*20|0)>>0]=73;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=0;c[o+(i*20|0)+8>>2]=g;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(r,73,0,g,h)|0;if((c[s>>2]|0)<=0){Ra=u;return}o=r+104|0;m=c[f+40>>2]|0;n=0;while(1){k=m+12|0;do if((c[k>>2]|0)>-1){j=c[(c[m>>2]|0)+20>>2]|0;if(j|0?(c[j>>2]|0)==1:0){i=c[d>>2]|0;f=i+272|0;a:do if(c[f>>2]|0)if(!(a[i+81>>0]|0))l=21;else{j=0;f=1}else{do if((e[i+276>>1]|0)>=30){g=i+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];l=i+284|0;c[l>>2]=(c[l>>2]|0)+1;l=22;break a}g=i+296|0;h=c[g>>2]|0;if(!h){g=i+292|0;break}else{c[g>>2]=c[h>>2];l=i+284|0;c[l>>2]=(c[l>>2]|0)+1;l=22;break a}}else g=i+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;l=21}while(0);if((l|0)==21){h=_d(i,30,0)|0;l=22}do if((l|0)==22){l=0;if(!h){g=i+81|0;if((a[g>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[g>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;c[f>>2]=(c[f>>2]|0)+1;g=c[i+236>>2]|0;if(g|0)c[g+12>>2]=7}if(!h){j=0;f=1;break}else{i=0;f=1}}else{c[h+16>>2]=h+28;b[h+6>>1]=1;b[h+8>>1]=2;a[h+4>>0]=a[i+78>>0]|0;c[h+12>>2]=i;c[h>>2]=1;i=h+24|0;c[i>>2]=0;b[i+4>>1]=0;i=h;f=0}g=Yi(d,c[j+4>>2]|0)|0;if(!g)g=c[(c[d>>2]|0)+8>>2]|0;c[h+20>>2]=g;a[c[h+16>>2]>>0]=a[j+16>>0]|0;j=i}while(0);h=c[k>>2]|0;g=c[p>>2]|0;if((c[q>>2]|0)>(g|0)){c[p>>2]=g+1;k=c[o>>2]|0;a[k+(g*20|0)>>0]=113;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=h;c[k+(g*20|0)+8>>2]=0;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0}else g=Di(r,113,h,0,0)|0;h=c[r>>2]|0;if(!(a[h+81>>0]|0)){if((g|0)<0)g=(c[p>>2]|0)+-1|0;h=c[o>>2]|0;i=h+(g*20|0)+1|0;if(a[i>>0]|0){Ei(r,h+(g*20|0)|0,j,-9);break}if(f)break;c[h+(g*20|0)+16>>2]=j;a[i>>0]=-9;break}if(f|(c[h+480>>2]|0)!=0)break;k=(c[j>>2]|0)+-1|0;c[j>>2]=k;if(k|0)break;g=c[j+12>>2]|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}k=j;if((c[g+304>>2]|0)>>>0<=k>>>0?(c[g+308>>2]|0)>>>0>k>>>0:0){k=g+300|0;c[j>>2]=c[k>>2];c[k>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{k=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}cd(d,44342,t);c[k>>2]=-1}while(0);n=n+1|0;if((n|0)>=(c[s>>2]|0))break;else m=m+16|0}Ra=u;return}function vl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[d+24>>2]|0;i=c[d>>2]|0;d=a[e>>0]|0;a:do if(!(c[j+12>>2]|0)){switch(d<<24>>24){case -94:case -93:break a;case -95:break;default:{j=0;return j|0}}if(!(c[e+4>>2]&16777216)){j=0;return j|0}d=c[j>>2]|0;if(d|0){f=c[e+44>>2]|0;while(1){if((f|0)==(d|0)){d=1;break}d=c[d+32>>2]|0;if(!d)break a}return d|0}}else{if(d<<24>>24!=-94){j=0;return j|0}f=c[j+4>>2]|0;h=c[f>>2]|0;b:do if((h|0)>0){g=c[e+28>>2]|0;d=0;do{if((g|0)==(c[f+8+(d*72|0)+40>>2]|0))break b;d=d+1|0}while((d|0)<(h|0))}else d=0;while(0);if((d|0)==(h|0)){j=0;return j|0}}while(0);h=dk(c[i>>2]|0,e,0,0)|0;g=j+8|0;h=nj(c[i>>2]|0,c[g>>2]|0,h)|0;c[g>>2]=h;if(!h){j=0;return j|0}d=e+4|0;c[d>>2]=c[d>>2]|134217728;ni(c[i>>2]|0,e);c[d>>2]=c[d>>2]&-134217729;d=e;f=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));a[e>>0]=-94;b[e+32>>1]=(c[c[g>>2]>>2]|0)+65535;c[e+28>>2]=c[(c[j>>2]|0)+44>>2];j=0;return j|0}function wl(a,b){a=a|0;b=b|0;var d=0,e=0;d=(c[a+24>>2]|0)+12|0;e=c[d>>2]|0;if((e|0)==(b|0)){e=0;return e|0}c[d>>2]=b;$j(a,b)|0;c[d>>2]=e;e=1;return e|0}function xl(b,d){b=b|0;d=d|0;if(c[d+4>>2]&1|0){d=1;return d|0}switch(a[d>>0]|0){case -94:{if((c[b+24>>2]|0)!=(c[d+28>>2]|0)){d=1;return d|0}a[b+20>>0]=1;d=2;return d|0}case 57:case 54:case 55:case 56:case 52:case 53:{b=c[d+12>>2]|0;if((a[b>>0]|0)==-94?c[(c[b+44>>2]|0)+56>>2]|0:0){d=1;return d|0}d=c[d+16>>2]|0;if((a[d>>0]|0)==-94?c[(c[d+44>>2]|0)+56>>2]|0:0){d=1;return d|0}break}case -95:case 49:case -107:case 43:case 45:case 51:case 50:case 19:case -96:{d=1;return d|0}default:{}}d=0;return d|0}function yl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d)return;h=(e|0)==0;while(1){f=c[d>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{g=f+4+(e*20|0)|0;j=zl(b,c[g>>2]|0)|0;c[g>>2]=j;e=e+1|0}while((e|0)<(c[f>>2]|0))}f=c[d+40>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{j=f+4+(e*20|0)|0;g=zl(b,c[j>>2]|0)|0;c[j>>2]=g;e=e+1|0}while((e|0)<(c[f>>2]|0))}f=c[d+48>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{j=f+4+(e*20|0)|0;g=zl(b,c[j>>2]|0)|0;c[j>>2]=g;e=e+1|0}while((e|0)<(c[f>>2]|0))}e=d+44|0;f=zl(b,c[e>>2]|0)|0;c[e>>2]=f;e=d+36|0;f=zl(b,c[e>>2]|0)|0;c[e>>2]=f;e=c[d+32>>2]|0;f=c[e>>2]|0;if((f|0)>0){g=e+8|0;while(1){yl(b,c[g+20>>2]|0,1);if((a[g+37>>0]&4?(i=c[g+64>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){e=0;do{j=i+4+(e*20|0)|0;k=zl(b,c[j>>2]|0)|0;c[j>>2]=k;e=e+1|0}while((e|0)<(c[i>>2]|0))}if((f|0)>1){g=g+72|0;f=f+-1|0}else break}}if(h){e=25;break}d=c[d+52>>2]|0;if(!d){e=25;break}}if((e|0)==25)return}function zl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+64|0;j=o+8|0;i=o;f=o+12|0;if(!e){n=0;Ra=o;return n|0}n=e+4|0;if(c[n>>2]&1|0?(g=e+36|0,(c[d+4>>2]|0)==(b[g>>1]|0)):0)b[g>>1]=c[d+8>>2];switch(a[e>>0]|0){case -94:{if((c[e+28>>2]|0)==(c[d+4>>2]|0)){g=b[e+32>>1]|0;if(g<<16>>16<0){a[e>>0]=114;n=e;Ra=o;return n|0}l=c[(c[d+16>>2]|0)+4+((g<<16>>16)*20|0)>>2]|0;k=a[l>>0]|0;if(k<<24>>24==-88)g=a[l+38>>0]|0;else g=k;switch(g<<24>>24){case -87:{h=l+20|0;m=15;break}case -125:{h=c[l+20>>2]|0;m=15;break}default:{g=c[d>>2]|0;m=19}}do if((m|0)==15){g=c[d>>2]|0;if((c[c[h>>2]>>2]|0)>=2)if(!(c[l+4>>2]&2048)){cd(g,38899,j);break}else{c[i>>2]=c[c[c[l+20>>2]>>2]>>2];c[i+4>>2]=1;cd(g,39001,i);break}else m=19}while(0);if((m|0)==19){j=c[g>>2]|0;i=d+12|0;if(k<<24>>24==-94|(c[i>>2]|0)==0)if(!l)f=0;else{f=l;m=22}else{g=f;h=g+52|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));a[f>>0]=-85;c[f+12>>2]=l;c[f+28>>2]=c[d+8>>2];m=22}if((m|0)==22){f=dk(j,f,0,0)|0;if(f){if(c[i>>2]|0){d=f+4|0;c[d>>2]=c[d>>2]|1048576}if(c[n>>2]&1){b[f+36>>1]=b[e+36>>1]|0;n=f+4|0;c[n>>2]=c[n>>2]|1}}else f=0}ni(j,e);e=f}n=e;Ra=o;return n|0}break}case -85:{f=e+28|0;if((c[f>>2]|0)==(c[d+4>>2]|0))c[f>>2]=c[d+8>>2];break}default:{}}f=e+12|0;m=zl(d,c[f>>2]|0)|0;c[f>>2]=m;f=e+16|0;m=zl(d,c[f>>2]|0)|0;c[f>>2]=m;f=e+20|0;if(c[n>>2]&2048|0){yl(d,c[f>>2]|0,1);n=e;Ra=o;return n|0}g=c[f>>2]|0;if(!g){n=e;Ra=o;return n|0}if((c[g>>2]|0)<=0){n=e;Ra=o;return n|0}f=0;do{n=g+4+(f*20|0)|0;m=zl(d,c[n>>2]|0)|0;c[n>>2]=m;f=f+1|0}while((f|0)<(c[g>>2]|0));Ra=o;return e|0}function Al(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+80|0;G=I+40|0;F=I+32|0;p=I+24|0;j=I+16|0;i=I+8|0;E=I+48|0;k=c[e+32>>2]|0;l=c[c[e>>2]>>2]|0;H=c[d+8>>2]|0;C=e+52|0;D=c[C>>2]|0;if(c[e+68>>2]|0){cd(d,43323,I);Ra=I;return}g=c[d>>2]|0;do if(((a[g+165>>0]|0)==0?(a[d+200>>0]|0)==0:0)?(h=c[g+312>>2]|0,h|0):0){g=$a[h&127](c[g+316>>2]|0,33,0,0,0,c[d+240>>2]|0)|0;if((g|0)==1){cd(d,39216,i);c[d+12>>2]=23;Ra=I;return}if((g|2|0)==2){if(!g)break;Ra=I;return}else{cd(d,39231,j);c[d+12>>2]=1;Ra=I;return}}while(0);s=d+56|0;x=c[s>>2]|0;v=x+-1|0;c[s>>2]=v;b[e+6>>1]=320;pl(d,e,v);y=e+60|0;z=c[y>>2]|0;A=e+12|0;w=c[A>>2]|0;B=e+16|0;t=c[B>>2]|0;c[y>>2]=0;c[B>>2]=0;c[A>>2]=0;A=e+48|0;B=c[A>>2]|0;h=c[k>>2]|0;a:do if((h|0)>0){g=0;while(1){if(a[k+8+(g*72|0)+37>>0]&32)break;g=g+1|0;if((g|0)>=(h|0)){q=0;break a}}q=c[k+8+(g*72|0)+40>>2]|0}else q=0;while(0);g=d+40|0;o=c[g>>2]|0;h=o+1|0;c[g>>2]=h;m=(B|0)!=0;if((a[e+4>>0]|0)==127){c[g>>2]=o+2;g=m?8:6}else{h=0;g=m?7:5}a[E>>0]=g;c[E+4>>2]=o;c[E+16>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;u=d+44|0;n=(c[u>>2]|0)+1|0;c[u>>2]=n;u=H+108|0;g=c[u>>2]|0;r=H+112|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=116;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=q;c[k+(g*20|0)+8>>2]=n;c[k+(g*20|0)+12>>2]=l;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0}else Di(H,116,q,n,l)|0;do if(!m){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=113;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=o;c[k+(g*20|0)+8>>2]=l;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0;break}else{Di(H,113,o,l,0)|0;break}}else{k=Dl(d,e)|0;i=(c[B>>2]|0)+2|0;g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;l=c[H+104>>2]|0;a[l+(g*20|0)>>0]=113;b[l+(g*20|0)+2>>1]=0;c[l+(g*20|0)+4>>2]=o;c[l+(g*20|0)+8>>2]=i;c[l+(g*20|0)+12>>2]=0;c[l+(g*20|0)+16>>2]=0;a[l+(g*20|0)+1>>0]=0}else g=Di(H,113,o,i,0)|0;i=c[H>>2]|0;do if(!(a[i+81>>0]|0)){if((g|0)<0)g=(c[u>>2]|0)+-1|0;i=c[H+104>>2]|0;j=i+(g*20|0)+1|0;if(a[j>>0]|0){Ei(H,i+(g*20|0)|0,k,-9);break}if(k|0){c[i+(g*20|0)+16>>2]=k;a[j>>0]=-9}}else if(!((k|0)==0|(c[i+480>>2]|0)!=0)?(l=(c[k>>2]|0)+-1|0,c[k>>2]=l,(l|0)==0):0){g=c[k+12>>2]|0;if(g|0){if(c[g+480>>2]|0){Xd(g,k);break}l=k;if((c[g+304>>2]|0)>>>0<=l>>>0?(c[g+308>>2]|0)>>>0>l>>>0:0){l=g+300|0;c[k>>2]=c[l>>2];c[l>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[E+20>>2]=B}while(0);if(h|0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;l=c[H+104>>2]|0;a[l+(g*20|0)>>0]=113;b[l+(g*20|0)+2>>1]=0;c[l+(g*20|0)+4>>2]=h;c[l+(g*20|0)+8>>2]=0;c[l+(g*20|0)+12>>2]=0;c[l+(g*20|0)+16>>2]=0;a[l+(g*20|0)+1>>0]=0}else g=Di(H,113,h,0,0)|0;c[e+24>>2]=g;l=e+8|0;c[l>>2]=c[l>>2]|32}c[A>>2]=0;l=D+56|0;c[l>>2]=0;nk(d,1,43372,p);p=kj(d,D,E)|0;c[l>>2]=e;do if(!p){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=36;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=o;c[k+(g*20|0)+8>>2]=v;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0;k=g}else k=Di(H,36,o,v,0)|0;g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=-127;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=q;c[p+(g*20|0)+8>>2]=0;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0}else Di(H,129,q,0,0)|0;do if(m){g=(c[B>>2]|0)+1|0;h=c[u>>2]|0;if((c[r>>2]|0)>(h|0)){c[u>>2]=h+1;p=c[H+104>>2]|0;a[p+(h*20|0)>>0]=90;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=o;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=n;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(H,90,o,g,n)|0;break}}else{g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=127;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=o;c[p+(g*20|0)+8>>2]=n;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0;break}else{Di(H,127,o,n,0)|0;break}}while(0);g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=123;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=o;c[p+(g*20|0)+8>>2]=0;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0}else Di(H,123,o,0,0)|0;j=c[s>>2]|0;h=j+-1|0;c[s>>2]=h;do if((t|0)>0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;s=c[H+104>>2]|0;a[s+(g*20|0)>>0]=47;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=t;c[s+(g*20|0)+8>>2]=h;c[s+(g*20|0)+12>>2]=1;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0;break}else{Di(H,47,t,h,1)|0;break}}while(0);rl(d,e,q,0,0,f,h,v);do if(w|0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;f=c[H+104>>2]|0;a[f+(g*20|0)>>0]=49;b[f+(g*20|0)+2>>1]=0;c[f+(g*20|0)+4>>2]=w;c[f+(g*20|0)+8>>2]=v;c[f+(g*20|0)+12>>2]=0;c[f+(g*20|0)+16>>2]=0;a[f+(g*20|0)+1>>0]=0;break}else{Di(H,49,w,v,0)|0;break}}while(0);i=H+12|0;h=c[i>>2]|0;g=0-j|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0)mk(h,H,g);else c[(c[h+64>>2]|0)+(g<<2)>>2]=c[u>>2];if(!(c[e+8>>2]&8)){c[C>>2]=0;nk(d,1,43420,G);kj(d,e,E)|0;c[C>>2]=D}else cd(d,43378,F);g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;G=c[H+104>>2]|0;a[G+(g*20|0)>>0]=11;b[G+(g*20|0)+2>>1]=0;c[G+(g*20|0)+4>>2]=0;c[G+(g*20|0)+8>>2]=k;c[G+(g*20|0)+12>>2]=0;c[G+(g*20|0)+16>>2]=0;a[G+(g*20|0)+1>>0]=0}else Di(H,11,0,k,0)|0;h=c[i>>2]|0;g=0-x|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,H,g);break}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[u>>2];break}}while(0);g=c[A>>2]|0;if(g|0)ri(c[d>>2]|0,g);c[A>>2]=B;c[y>>2]=z;Ra=I;return}function Bl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+128|0;G=Z+64|0;F=Z+56|0;D=Z+48|0;B=Z+32|0;x=Z+24|0;v=Z+8|0;u=Z;p=Z+120|0;H=Z+96|0;I=Z+72|0;X=c[f>>2]|0;Y=f+8|0;U=c[Y>>2]|0;C=f+56|0;T=c[C>>2]|0;L=T+-1|0;R=T+-2|0;c[C>>2]=R;C=g+4|0;J=a[C>>0]|0;V=g+52|0;W=c[V>>2]|0;t=g+48|0;i=c[t>>2]|0;j=c[i>>2]|0;P=J<<24>>24==-128;a:do if(!P?(n=X+81|0,(a[n>>0]|0)==0):0){o=p+4|0;m=1;l=j;while(1){if((m|0)>(c[c[g>>2]>>2]|0)){m=i;S=l;break a}b:do if((l|0)>0){k=i+4|0;j=0;while(1){if((m|0)==(e[k+16>>1]|0))break b;j=j+1|0;if((j|0)<(l|0))k=k+20|0;else break}}else j=0;while(0);if((j|0)==(l|0)){c[p>>2]=0;c[o>>2]=0;j=oj(X,147,p,0)|0;if(!j){i=7;break}S=j+4|0;c[S>>2]=c[S>>2]|1024;c[j+8>>2]=m;i=nj(c[f>>2]|0,i,j)|0;c[t>>2]=i;if(!i){i=0;j=l}else{b[i+4+(l*20|0)+16>>1]=m;j=l+1|0}}else j=l;if(!(a[n>>0]|0)){m=m+1|0;l=j}else{m=i;S=j;break a}}Ra=Z;return i|0}else{m=i;S=j}while(0);k=(S<<2)+4|0;q=X+272|0;c:do if(c[q>>2]|0)if(!(a[X+81>>0]|0))r=24;else{O=0;Q=0;M=0;N=1}else{do if(!(0<0|(0==0?(e[X+276>>1]|0)>>>0<k>>>0:0))){i=X+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];r=X+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break c}i=X+296|0;j=c[i>>2]|0;if(!j){i=X+292|0;break}else{c[i>>2]=c[j>>2];r=X+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break c}}else i=X+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;r=24}while(0);if((r|0)==24){j=_d(X,k,0)|0;r=25}if((r|0)==25)if(!j){O=0;Q=0;M=j;N=1}else{c[j>>2]=S;if((S|0)>=1){i=m+4|0;k=1;while(1){c[j+(k<<2)>>2]=(e[i+16>>1]|0)+-1;if((k|0)==(S|0))break;else{i=i+20|0;k=k+1|0}}}O=j;Q=Dl(f,g)|0;M=j;N=0}c[t>>2]=m;K=gk(c[f>>2]|0,m,0)|0;s=W+48|0;c[s>>2]=K;d:do if(!P){o=c[c[g>>2]>>2]|0;i=f+44|0;j=c[i>>2]|0;p=j+1|0;n=o+1|0;c[i>>2]=j+n;i=U+108|0;j=c[i>>2]|0;if((c[U+112>>2]|0)>(j|0)){c[i>>2]=j+1;K=c[U+104>>2]|0;a[K+(j*20|0)>>0]=70;b[K+(j*20|0)+2>>1]=0;c[K+(j*20|0)+4>>2]=0;c[K+(j*20|0)+8>>2]=p;c[K+(j*20|0)+12>>2]=0;c[K+(j*20|0)+16>>2]=0;a[K+(j*20|0)+1>>0]=0}else Di(U,70,0,p,0)|0;m=n*5|0;k=m+20|0;e:do if(c[q>>2]|0)if(!(a[X+81>>0]|0))r=44;else{z=0;y=0;break d}else{do if(!(0<0|(0==0?(e[X+276>>1]|0)>>>0<k>>>0:0))){i=X+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];l=X+284|0;c[l>>2]=(c[l>>2]|0)+1;l=j;break e}i=X+296|0;j=c[i>>2]|0;if(!j){i=X+292|0;break}else{c[i>>2]=c[j>>2];l=X+284|0;c[l>>2]=(c[l>>2]|0)+1;l=j;break e}}else i=X+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;r=44}while(0);if((r|0)==44)l=_d(X,k,0)|0;if(!l){i=X+81|0;if((a[i>>0]|0)==0?(a[X+82>>0]|0)==0:0){a[i>>0]=1;if((c[X+180>>2]|0)>0)c[X+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;i=c[X+236>>2]|0;if(i|0)c[i+12>>2]=7}if(!l){z=0;y=0;break}else k=0}else{c[l+16>>2]=l+20+(n<<2);b[l+6>>1]=o;b[l+8>>1]=n;a[l+4>>0]=a[X+78>>0]|0;c[l+12>>2]=X;c[l>>2]=1;gw(l+24|0,0,m+-4|0)|0;k=l}if((o|0)>0){j=l+16|0;i=0;do{K=Cl(f,g,i)|0;c[l+20+(i<<2)>>2]=K;a[(c[j>>2]|0)+i>>0]=0;i=i+1|0}while((i|0)!=(o|0));z=l;y=k}else{z=l;y=k}}else{z=0;p=0;y=0}while(0);c[V>>2]=0;K=W+56|0;c[K>>2]=0;n=c[t>>2]|0;i=c[f>>2]|0;f:do if(n|0?(a[i+81>>0]|0)==0:0){k=c[n>>2]|0;if((k|0)>(c[i+116>>2]|0)){c[u>>2]=40659;cd(f,41350,u);break}m=c[g>>2]|0;if((k|0)>0){i=0;l=n+4|0;while(1){j=b[l+16>>1]|0;if(!(j<<16>>16))j=k;else{j=j&65535;k=c[m>>2]|0;if((k|0)<(j|0))break;Gk(f,m,j+-1|0,c[l>>2]|0,40659,0);j=c[n>>2]|0}i=i+1|0;if((i|0)<(j|0)){l=l+20|0;k=j}else break f}c[v>>2]=i+1;c[v+4>>2]=40659;c[v+8>>2]=k;cd(f,41294,v)}}while(0);g:do if(((c[W+52>>2]|0)==0?(A=c[s>>2]|0,w=c[f>>2]|0,A|0):0)?(a[w+81>>0]|0)==0:0){k=c[A>>2]|0;if((k|0)>(c[w+116>>2]|0)){c[x>>2]=40659;cd(f,41350,x);break}m=c[W>>2]|0;if((k|0)>0){i=0;l=A+4|0;while(1){j=b[l+16>>1]|0;if(!(j<<16>>16))j=k;else{j=j&65535;k=c[m>>2]|0;if((k|0)<(j|0))break;Gk(f,m,j+-1|0,c[l>>2]|0,40659,0);j=c[A>>2]|0}i=i+1|0;if((i|0)<(j|0)){l=l+20|0;k=j}else break g}c[B>>2]=i+1;c[B+4>>2]=40659;c[B+8>>2]=k;cd(f,41294,B)}}while(0);pl(f,g,L);o=g+12|0;i=c[o>>2]|0;do if(P&(i|0)!=0){j=f+44|0;m=c[j>>2]|0;n=m+1|0;m=m+2|0;c[j>>2]=m;j=c[g+16>>2]|0;j=(j|0)==0?i:j+1|0;k=U+108|0;i=c[k>>2]|0;l=U+112|0;if((c[l>>2]|0)>(i|0)){c[k>>2]=i+1;E=c[U+104>>2]|0;a[E+(i*20|0)>>0]=78;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=j;c[E+(i*20|0)+8>>2]=n;c[E+(i*20|0)+12>>2]=0;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0}else Di(U,78,j,n,0)|0;i=c[k>>2]|0;if((c[l>>2]|0)>(i|0)){c[k>>2]=i+1;E=c[U+104>>2]|0;a[E+(i*20|0)>>0]=78;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=n;c[E+(i*20|0)+8>>2]=m;c[E+(i*20|0)+12>>2]=0;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0;break}else{Di(U,78,n,m,0)|0;break}}else{m=0;n=0}while(0);i=g+60|0;j=c[i>>2]|0;if(j|0)ni(X,j);c[i>>2]=0;A=f+44|0;v=c[A>>2]|0;w=v+1|0;x=v+2|0;u=v+3|0;v=v+4|0;c[A>>2]=v;a[H>>0]=13;c[H+4>>2]=w;c[H+16>>2]=0;A=H+8|0;c[A>>2]=0;c[H+12>>2]=0;a[I>>0]=13;c[I+4>>2]=x;c[I+16>>2]=0;B=I+8|0;c[B>>2]=0;c[I+12>>2]=0;switch(a[C>>0]|0){case -128:{i=41509;break}case -126:{i=41519;break}case -127:{i=41529;break}default:i=41536}c[D>>2]=i;nk(f,1,43435,D);E=U+108|0;i=c[E>>2]|0;j=i+1|0;D=U+112|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=j;k=c[U+104>>2]|0;a[k+(i*20|0)>>0]=13;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=w;c[k+(i*20|0)+8>>2]=0;c[k+(i*20|0)+12>>2]=j;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;k=i}else k=Di(U,13,w,0,j)|0;c[W+12>>2]=n;nk(f,1,43446,F);kj(f,W,H)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;F=c[U+104>>2]|0;a[F+(i*20|0)>>0]=67;b[F+(i*20|0)+2>>1]=0;c[F+(i*20|0)+4>>2]=w;c[F+(i*20|0)+8>>2]=0;c[F+(i*20|0)+12>>2]=0;c[F+(i*20|0)+16>>2]=0;a[F+(i*20|0)+1>>0]=0}else Di(U,67,w,0,0)|0;C=U+12|0;j=c[C>>2]|0;a[j+19>>0]=0;c[j+28>>2]=0;j=c[E>>2]|0;if(!(a[(c[U>>2]|0)+81>>0]|0))i=(c[U+104>>2]|0)+(((k|0)<0?j+-1|0:k)*20|0)|0;else i=59308;c[i+8>>2]=j;i=j+1|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=i;t=c[U+104>>2]|0;a[t+(j*20|0)>>0]=13;b[t+(j*20|0)+2>>1]=0;c[t+(j*20|0)+4>>2]=x;c[t+(j*20|0)+8>>2]=0;c[t+(j*20|0)+12>>2]=i;c[t+(j*20|0)+16>>2]=0;a[t+(j*20|0)+1>>0]=0;t=j}else t=Di(U,13,x,0,i)|0;s=c[o>>2]|0;i=g+16|0;F=c[i>>2]|0;c[o>>2]=m;c[i>>2]=0;nk(f,1,43451,G);kj(f,g,I)|0;c[o>>2]=s;c[i>>2]=F;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;G=c[U+104>>2]|0;a[G+(i*20|0)>>0]=67;b[G+(i*20|0)+2>>1]=0;c[G+(i*20|0)+4>>2]=x;c[G+(i*20|0)+8>>2]=0;c[G+(i*20|0)+12>>2]=0;c[G+(i*20|0)+16>>2]=0;a[G+(i*20|0)+1>>0]=0}else Di(U,67,x,0,0)|0;q=c[C>>2]|0;a[q+19>>0]=0;c[q+28>>2]=0;q=El(f,g,H,h,u,p,z,L)|0;s=(J+-127&255)<2;if(s)r=El(f,g,I,h,v,p,z,L)|0;else r=0;h:do if(z|0?(I=(c[z>>2]|0)+-1|0,c[z>>2]=I,(I|0)==0):0){i=c[z+12>>2]|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,y);break h}j=z;if((c[i+304>>2]|0)>>>0<=j>>>0){if((c[i+308>>2]|0)>>>0<=j>>>0)break;I=i+300|0;c[z>>2]=c[I>>2];c[I>>2]=y;break h}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{I=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);p=J<<24>>24==-126;if((J+127&255)<2){l=L;n=L}else{i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;J=c[U+104>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=v;c[J+(i*20|0)+8>>2]=r;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else i=Di(U,12,v,r,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;J=c[U+104>>2]|0;a[J+(j*20|0)>>0]=14;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=x;c[J+(j*20|0)+8>>2]=L;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0}else j=Di(U,14,x,L,0)|0;k=c[E>>2]|0;if((c[D>>2]|0)>(k|0)){c[E>>2]=k+1;J=c[U+104>>2]|0;a[J+(k*20|0)>>0]=11;b[J+(k*20|0)+2>>1]=0;c[J+(k*20|0)+4>>2]=0;c[J+(k*20|0)+8>>2]=i;c[J+(k*20|0)+12>>2]=0;c[J+(k*20|0)+16>>2]=0;a[J+(k*20|0)+1>>0]=0}else Di(U,11,0,i,0)|0;o=g+6|0;k=b[o>>1]|0;l=b[W+6>>1]|0;m=k<<16>>16;n=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(n|0)){k=l;break}if((m+31|0)<(n|0)){k=n+1&65535;break}else{k=(d[18112+(n-m)>>0]|0)+n&65535;break}}else{if((n+49|0)<(m|0))break;if((n+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-n)>>0]|0)+m&65535;break}}while(0);b[o>>1]=k;l=i;n=j}do if(p){i=g+6|0;j=b[W+6>>1]|0;if((b[i>>1]|0)>j<<16>>16){b[i>>1]=j;m=l}else m=l}else{i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;J=c[U+104>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=u;c[J+(i*20|0)+8>>2]=q;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else i=Di(U,12,u,q,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;J=c[U+104>>2]|0;a[J+(j*20|0)>>0]=14;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=w;c[J+(j*20|0)+8>>2]=L;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0}else Di(U,14,w,L,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;m=c[U+104>>2]|0;a[m+(j*20|0)>>0]=11;b[m+(j*20|0)+2>>1]=0;c[m+(j*20|0)+4>>2]=0;c[m+(j*20|0)+8>>2]=i;c[m+(j*20|0)+12>>2]=0;c[m+(j*20|0)+16>>2]=0;a[m+(j*20|0)+1>>0]=0;m=i;break}else{Di(U,11,0,i,0)|0;m=i;break}}while(0);i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;k=c[U+104>>2]|0;a[k+(i*20|0)>>0]=12;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=u;c[k+(i*20|0)+8>>2]=q;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;k=i}else k=Di(U,12,u,q,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;L=c[U+104>>2]|0;a[L+(i*20|0)>>0]=14;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=w;c[L+(i*20|0)+8>>2]=l;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(U,14,w,l,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;L=c[U+104>>2]|0;a[L+(i*20|0)>>0]=11;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=0;c[L+(i*20|0)+8>>2]=R;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(U,11,0,R,0)|0;do if(!P){if(p){p=k+1|0;l=k;break}i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=14;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=w;c[P+(i*20|0)+8>>2]=l;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else i=Di(U,14,w,l,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;p=c[U+104>>2]|0;a[p+(j*20|0)>>0]=11;b[p+(j*20|0)+2>>1]=0;c[p+(j*20|0)+4>>2]=0;c[p+(j*20|0)+8>>2]=R;c[p+(j*20|0)+12>>2]=0;c[p+(j*20|0)+16>>2]=0;a[p+(j*20|0)+1>>0]=0;p=k;l=i;break}else{Di(U,11,0,R,0)|0;p=k;l=i;break}}else{p=k;l=k}while(0);o=c[E>>2]|0;do if(s)if((c[D>>2]|0)>(o|0)){c[E>>2]=o+1;P=c[U+104>>2]|0;a[P+(o*20|0)>>0]=12;b[P+(o*20|0)+2>>1]=0;c[P+(o*20|0)+4>>2]=v;c[P+(o*20|0)+8>>2]=r;c[P+(o*20|0)+12>>2]=0;c[P+(o*20|0)+16>>2]=0;a[P+(o*20|0)+1>>0]=0;break}else{Di(U,12,v,r,0)|0;break}while(0);i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=14;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=x;c[P+(i*20|0)+8>>2]=m;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else Di(U,14,x,m,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=11;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=0;c[P+(i*20|0)+8>>2]=R;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else Di(U,11,0,R,0)|0;j=c[E>>2]|0;if(!(a[(c[U>>2]|0)+81>>0]|0))i=(c[U+104>>2]|0)+(((t|0)<0?j+-1|0:t)*20|0)|0;else i=59308;c[i+8>>2]=j;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;R=c[U+104>>2]|0;a[R+(j*20|0)>>0]=14;b[R+(j*20|0)+2>>1]=0;c[R+(j*20|0)+4>>2]=w;c[R+(j*20|0)+8>>2]=n;c[R+(j*20|0)+12>>2]=0;c[R+(j*20|0)+16>>2]=0;a[R+(j*20|0)+1>>0]=0}else Di(U,14,w,n,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;R=c[U+104>>2]|0;a[R+(i*20|0)>>0]=14;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=x;c[R+(i*20|0)+8>>2]=m;c[R+(i*20|0)+12>>2]=0;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else Di(U,14,x,m,0)|0;i=c[C>>2]|0;j=1-T|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,U,j);else c[(c[i+64>>2]|0)+(j<<2)>>2]=c[E>>2];i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;j=c[U+104>>2]|0;a[j+(i*20|0)>>0]=86;j=j+(i*20|0)+1|0;k=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}else i=Di(U,86,0,0,0)|0;j=c[U>>2]|0;i:do if(a[j+81>>0]|0){if(N)break;do if(j|0){if(c[j+480>>2]|0){Xd(j,O);break i}i=O;if((c[j+304>>2]|0)>>>0>i>>>0)break;if((c[j+308>>2]|0)>>>0<=i>>>0)break;R=j+300|0;c[M>>2]=c[R>>2];c[R>>2]=O;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](O);break}else{R=Wa[c[29352>>2]&127](O)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](O);break}}else{if((i|0)<0)i=(c[E>>2]|0)+-1|0;j=c[U+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(U,j+(i*20|0)|0,O,-15);break}if(N)break;c[j+(i*20|0)+16>>2]=O;a[k>>0]=-15}while(0);k=c[A>>2]|0;j=c[B>>2]|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;R=c[U+104>>2]|0;a[R+(i*20|0)>>0]=87;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=k;c[R+(i*20|0)+8>>2]=j;c[R+(i*20|0)+12>>2]=S;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else i=Di(U,87,k,j,S)|0;j=c[U>>2]|0;j:do if(a[j+81>>0]|0){if((Q|0)==0|(c[j+480>>2]|0)!=0)break;S=(c[Q>>2]|0)+-1|0;c[Q>>2]=S;if(S|0)break;i=c[Q+12>>2]|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,Q);break j}j=Q;if((c[i+304>>2]|0)>>>0>j>>>0)break;if((c[i+308>>2]|0)>>>0<=j>>>0)break;S=i+300|0;c[Q>>2]=c[S>>2];c[S>>2]=Q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{S=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}else{if((i|0)<0)i=(c[E>>2]|0)+-1|0;j=c[U+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(U,j+(i*20|0)|0,Q,-9);break}if(!Q)break;c[j+(i*20|0)+16>>2]=Q;a[k>>0]=-9}while(0);i=c[E>>2]|0;if((i|0)>0)b[(c[U+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=1;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;S=c[U+104>>2]|0;a[S+(i*20|0)>>0]=16;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=p;c[S+(i*20|0)+8>>2]=l;c[S+(i*20|0)+12>>2]=o;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(U,16,p,l,o)|0;j=c[C>>2]|0;i=0-T|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,U,i);else c[(c[j+64>>2]|0)+(i<<2)>>2]=c[E>>2];i=c[V>>2]|0;if(i|0)pi(X,i,1);c[V>>2]=W;c[K>>2]=g;k=f+212|0;i=c[k>>2]|0;if(!i)i=0;else{j=c[Y>>2]|0;if((i|0)<0)i=(c[j+108>>2]|0)+-1|0;if(!(a[(c[j>>2]|0)+81>>0]|0))i=(c[j+104>>2]|0)+(i*20|0)|0;else i=59308;i=c[i+8>>2]|0}c[k>>2]=i;f=(c[f+36>>2]|0)!=0&1;Ra=Z;return f|0}function Cl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[b+52>>2]|0;if(e|0?(f=Cl(a,e,d)|0,f|0):0){d=f;return d|0}b=c[b>>2]|0;if((c[b>>2]|0)<=(d|0)){d=0;return d|0}d=Yi(a,c[b+4+(d*20|0)>>2]|0)|0;return d|0}function Dl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;q=u;r=c[f+48>>2]|0;s=c[r>>2]|0;p=c[d>>2]|0;k=s+1|0;l=s+2|0;m=l*5|0;i=m+20|0;n=p+272|0;a:do if(c[n>>2]|0)if(!(a[p+81>>0]|0))j=11;else{t=0;Ra=u;return t|0}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<i>>>0:0))){h=p+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;break a}h=p+296|0;g=c[h>>2]|0;if(!g){g=p+292|0;break}else{c[h>>2]=c[g>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;break a}}else g=p+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;j=11}while(0);if((j|0)==11)g=_d(p,i,0)|0;if(!g){h=p+81|0;if((a[h>>0]|0)==0?(a[p+82>>0]|0)==0:0){a[h>>0]=1;if((c[p+180>>2]|0)>0)c[p+264>>2]=1;c[n>>2]=(c[n>>2]|0)+1;h=c[p+236>>2]|0;if(h|0)c[h+12>>2]=7}if(!g){t=0;Ra=u;return t|0}}else{c[g+16>>2]=g+20+(l<<2);b[g+6>>1]=k;b[g+8>>1]=l;a[g+4>>0]=a[p+78>>0]|0;c[g+12>>2]=p;c[g>>2]=1;gw(g+24|0,0,m+-4|0)|0}if((s|0)<=0){t=g;Ra=u;return t|0}o=g+16|0;m=p+8|0;n=q+4|0;l=0;do{k=r+4+(l*20|0)|0;i=c[k>>2]|0;if(!(c[i+4>>2]&256)){h=Cl(d,f,(e[r+4+(l*20|0)+16>>1]|0)+-1|0)|0;if(!h)h=c[m>>2]|0;j=c[h>>2]|0;c[q>>2]=j;if(j){p=(Eu(j)|0)&1073741823;c[n>>2]=p;if((p|0)!=0?(t=oj(c[d>>2]|0,106,q,0)|0,(t|0)!=0):0){c[t+12>>2]=i;i=t+4|0;c[i>>2]=c[i>>2]|4352;i=t}}else c[n>>2]=0;c[k>>2]=i}else h=Yi(d,i)|0;c[g+20+(l<<2)>>2]=h;a[(c[o>>2]|0)+l>>0]=a[r+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)!=(s|0));Ra=u;return g|0}function El(d,e,f,g,h,i,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;A=d+8|0;F=c[A>>2]|0;D=F+108|0;E=c[D>>2]|0;u=d+56|0;C=c[u>>2]|0;v=C+-1|0;c[u>>2]=v;do if(i|0){u=F+112|0;if((c[u>>2]|0)>(E|0)){c[D>>2]=E+1;q=c[F+104>>2]|0;a[q+(E*20|0)>>0]=20;b[q+(E*20|0)+2>>1]=0;c[q+(E*20|0)+4>>2]=i;c[q+(E*20|0)+8>>2]=0;c[q+(E*20|0)+12>>2]=0;c[q+(E*20|0)+16>>2]=0;a[q+(E*20|0)+1>>0]=0;q=E}else q=Di(F,20,i,0,0)|0;r=f+8|0;l=c[r>>2]|0;t=i+1|0;s=f+12|0;m=c[s>>2]|0;p=(j|0)==0;if(!p)c[j>>2]=(c[j>>2]|0)+1;n=c[D>>2]|0;if((c[u>>2]|0)>(n|0)){c[D>>2]=n+1;o=c[F+104>>2]|0;a[o+(n*20|0)>>0]=87;b[o+(n*20|0)+2>>1]=0;c[o+(n*20|0)+4>>2]=l;c[o+(n*20|0)+8>>2]=t;c[o+(n*20|0)+12>>2]=m;c[o+(n*20|0)+16>>2]=0;a[o+(n*20|0)+1>>0]=0}else n=Di(F,87,l,t,m)|0;l=c[F>>2]|0;do if(!(a[l+81>>0]|0)){if((n|0)<0)l=(c[D>>2]|0)+-1|0;else l=n;m=c[F+104>>2]|0;o=m+(l*20|0)+1|0;if(a[o>>0]|0){Ei(F,m+(l*20|0)|0,j,-9);break}if(!p){c[m+(l*20|0)+16>>2]=j;a[o>>0]=-9}}else if(!(p|(c[l+480>>2]|0)!=0)?(p=(c[j>>2]|0)+-1|0,c[j>>2]=p,(p|0)==0):0){l=c[j+12>>2]|0;if(l|0){if(c[l+480>>2]|0){Xd(l,j);break}p=j;if((c[l+304>>2]|0)>>>0<=p>>>0?(c[l+308>>2]|0)>>>0>p>>>0:0){p=l+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);l=n+2|0;m=c[D>>2]|0;if((c[u>>2]|0)>(m|0)){c[D>>2]=m+1;j=c[F+104>>2]|0;a[j+(m*20|0)>>0]=16;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=l;c[j+(m*20|0)+8>>2]=v;c[j+(m*20|0)+12>>2]=l;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(F,16,l,v,l)|0;n=c[D>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))l=(c[F+104>>2]|0)+(((q|0)<0?n+-1|0:q)*20|0)|0;else l=59308;c[l+8>>2]=n;m=c[r>>2]|0;l=(c[s>>2]|0)+-1|0;if((c[u>>2]|0)>(n|0)){c[D>>2]=n+1;s=c[F+104>>2]|0;a[s+(n*20|0)>>0]=78;b[s+(n*20|0)+2>>1]=0;c[s+(n*20|0)+4>>2]=m;c[s+(n*20|0)+8>>2]=t;c[s+(n*20|0)+12>>2]=l;c[s+(n*20|0)+16>>2]=0;a[s+(n*20|0)+1>>0]=0}else Di(F,78,m,t,l)|0;l=c[D>>2]|0;if((c[u>>2]|0)>(l|0)){c[D>>2]=l+1;u=c[F+104>>2]|0;a[u+(l*20|0)>>0]=70;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=1;c[u+(l*20|0)+8>>2]=i;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;break}else{Di(F,70,1,i,0)|0;break}}while(0);if(a[(c[d>>2]|0)+81>>0]|0){F=0;return F|0}l=c[e+16>>2]|0;do if((l|0)>0){m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;i=c[F+104>>2]|0;a[i+(m*20|0)>>0]=47;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=l;c[i+(m*20|0)+8>>2]=v;c[i+(m*20|0)+12>>2]=1;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break}else{Di(F,47,l,v,1)|0;break}}while(0);a:do switch(a[g>>0]|0){case 12:{q=d+19|0;m=a[q>>0]|0;if(m<<24>>24){B=m+-1<<24>>24;a[q>>0]=B;l=c[d+148+((B&255)<<2)>>2]|0;if(!(B<<24>>24))w=48;else{j=m+-2<<24>>24;a[q>>0]=j;p=l;j=c[d+148+((j&255)<<2)>>2]|0}}else{w=d+44|0;l=(c[w>>2]|0)+1|0;c[w>>2]=l;w=48}if((w|0)==48){p=d+44|0;j=(c[p>>2]|0)+1|0;c[p>>2]=j;p=l}n=c[f+8>>2]|0;l=c[f+12>>2]|0;m=c[D>>2]|0;o=F+112|0;if((c[o>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[F+104>>2]|0;a[f+(m*20|0)>>0]=92;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=n;c[f+(m*20|0)+8>>2]=l;c[f+(m*20|0)+12>>2]=p;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(F,92,n,l,p)|0;l=g+4|0;m=c[l>>2]|0;n=c[D>>2]|0;if((c[o>>2]|0)>(n|0)){c[D>>2]=n+1;g=c[F+104>>2]|0;a[g+(n*20|0)>>0]=121;b[g+(n*20|0)+2>>1]=0;c[g+(n*20|0)+4>>2]=m;c[g+(n*20|0)+8>>2]=j;c[g+(n*20|0)+12>>2]=0;c[g+(n*20|0)+16>>2]=0;a[g+(n*20|0)+1>>0]=0}else Di(F,121,m,j,0)|0;l=c[l>>2]|0;m=c[D>>2]|0;if((c[o>>2]|0)>(m|0)){c[D>>2]=m+1;g=c[F+104>>2]|0;a[g+(m*20|0)>>0]=122;b[g+(m*20|0)+2>>1]=0;c[g+(m*20|0)+4>>2]=l;c[g+(m*20|0)+8>>2]=p;c[g+(m*20|0)+12>>2]=j;c[g+(m*20|0)+16>>2]=0;a[g+(m*20|0)+1>>0]=0}else Di(F,122,l,p,j)|0;l=c[D>>2]|0;if((l|0)>0)b[(c[F+104>>2]|0)+((l+-1|0)*20|0)+2>>1]=8;if(j|0?(y=a[q>>0]|0,(y&255)<8):0){a[q>>0]=y+1<<24>>24;c[d+148+((y&255)<<2)>>2]=j}if(p|0?(z=a[q>>0]|0,(z&255)<8):0){a[q>>0]=z+1<<24>>24;c[d+148+((z&255)<<2)>>2]=p}break}case 11:{t=d+19|0;l=a[t>>0]|0;if(!(l<<24>>24)){A=d+44|0;s=(c[A>>2]|0)+1|0;c[A>>2]=s}else{s=l+-1<<24>>24;a[t>>0]=s;s=c[d+148+((s&255)<<2)>>2]|0}j=f+8|0;m=c[j>>2]|0;q=f+12|0;o=c[q>>2]|0;p=c[g+16>>2]|0;l=c[D>>2]|0;r=F+112|0;if((c[r>>2]|0)>(l|0)){c[D>>2]=l+1;f=c[F+104>>2]|0;a[f+(l*20|0)>>0]=92;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=m;c[f+(l*20|0)+8>>2]=o;c[f+(l*20|0)+12>>2]=s;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0}else l=Di(F,92,m,o,s)|0;m=c[F>>2]|0;do if(a[m+81>>0]|0){if((o|0)!=-12)kg(m,o,p)}else{if((l|0)<0)l=(c[D>>2]|0)+-1|0;m=c[F+104>>2]|0;n=m+(l*20|0)|0;if((o|0)<=-1?(x=m+(l*20|0)+1|0,(a[x>>0]|0)==0):0){if((o|0)==-3){c[m+(l*20|0)+16>>2]=p;a[x>>0]=-3;break}if(!p)break;c[m+(l*20|0)+16>>2]=p;a[x>>0]=o;if((o|0)!=-12)break;f=p+12|0;c[f>>2]=(c[f>>2]|0)+1;break}Ei(F,n,p,o)}while(0);o=c[g+4>>2]|0;m=c[j>>2]|0;n=c[q>>2]|0;l=c[D>>2]|0;if((c[r>>2]|0)>(l|0)){c[D>>2]=l+1;g=c[F+104>>2]|0;a[g+(l*20|0)>>0]=-124;b[g+(l*20|0)+2>>1]=0;c[g+(l*20|0)+4>>2]=o;c[g+(l*20|0)+8>>2]=s;c[g+(l*20|0)+12>>2]=m;c[g+(l*20|0)+16>>2]=0;a[g+(l*20|0)+1>>0]=0}else l=Di(F,132,o,s,m)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){g=c[F+104>>2]|0;a[g+(l*20|0)+1>>0]=-3;c[g+(l*20|0)+16>>2]=n}if(s|0?(B=a[t>>0]|0,(B&255)<8):0){a[t>>0]=B+1<<24>>24;c[d+148+((B&255)<<2)>>2]=s}break}case 10:{p=c[f+8>>2]|0;o=c[g+4>>2]|0;l=c[A>>2]|0;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;d=c[l+104>>2]|0;a[d+(n*20|0)>>0]=77;b[d+(n*20|0)+2>>1]=0;c[d+(n*20|0)+4>>2]=p;c[d+(n*20|0)+8>>2]=o;c[d+(n*20|0)+12>>2]=1;c[d+(n*20|0)+16>>2]=0;a[d+(n*20|0)+1>>0]=0;break a}else{Di(l,77,p,o,1)|0;break a}}case 13:{j=g+8|0;l=c[j>>2]|0;q=f+12|0;if(!l){p=c[q>>2]|0;do if((p|0)==1){l=d+19|0;m=a[l>>0]|0;if(!(m<<24>>24)){d=d+44|0;l=(c[d>>2]|0)+1|0;c[d>>2]=l;break}else{B=m+-1<<24>>24;a[l>>0]=B;l=c[d+148+((B&255)<<2)>>2]|0;break}}else{m=d+32|0;l=c[m>>2]|0;n=d+28|0;o=c[n>>2]|0;if((o|0)<(p|0)){d=d+44|0;l=c[d>>2]|0;c[d>>2]=l+p;l=l+1|0;break}else{c[m>>2]=l+p;c[n>>2]=o-p;break}}while(0);c[j>>2]=l;c[g+12>>2]=p}j=c[f+8>>2]|0;p=c[q>>2]|0;m=c[A>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;d=c[m+104>>2]|0;a[d+(o*20|0)>>0]=77;b[d+(o*20|0)+2>>1]=0;c[d+(o*20|0)+4>>2]=j;c[d+(o*20|0)+8>>2]=l;c[d+(o*20|0)+12>>2]=p;c[d+(o*20|0)+16>>2]=0;a[d+(o*20|0)+1>>0]=0}else Di(m,77,j,l,p)|0;l=c[g+4>>2]|0;m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;d=c[F+104>>2]|0;a[d+(m*20|0)>>0]=14;b[d+(m*20|0)+2>>1]=0;c[d+(m*20|0)+4>>2]=l;c[d+(m*20|0)+8>>2]=0;c[d+(m*20|0)+12>>2]=0;c[d+(m*20|0)+16>>2]=0;a[d+(m*20|0)+1>>0]=0;break a}else{Di(F,14,l,0,0)|0;break a}}default:{n=c[f+8>>2]|0;l=c[f+12>>2]|0;m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;d=c[F+104>>2]|0;a[d+(m*20|0)>>0]=81;b[d+(m*20|0)+2>>1]=0;c[d+(m*20|0)+4>>2]=n;c[d+(m*20|0)+8>>2]=l;c[d+(m*20|0)+12>>2]=0;c[d+(m*20|0)+16>>2]=0;a[d+(m*20|0)+1>>0]=0;break a}else{Di(F,81,n,l,0)|0;break a}}}while(0);l=c[e+12>>2]|0;do if(l|0){m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;e=c[F+104>>2]|0;a[e+(m*20|0)>>0]=49;b[e+(m*20|0)+2>>1]=0;c[e+(m*20|0)+4>>2]=l;c[e+(m*20|0)+8>>2]=k;c[e+(m*20|0)+12>>2]=0;c[e+(m*20|0)+16>>2]=0;a[e+(m*20|0)+1>>0]=0;break}else{Di(F,49,l,k,0)|0;break}}while(0);m=c[F+12>>2]|0;l=0-C|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,F,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[D>>2];l=c[D>>2]|0;if((c[F+112>>2]|0)>(l|0)){c[D>>2]=l+1;F=c[F+104>>2]|0;a[F+(l*20|0)>>0]=66;b[F+(l*20|0)+2>>1]=0;c[F+(l*20|0)+4>>2]=h;c[F+(l*20|0)+8>>2]=0;c[F+(l*20|0)+12>>2]=0;c[F+(l*20|0)+16>>2]=0;a[F+(l*20|0)+1>>0]=0;F=E;return F|0}else{Di(F,66,h,0,0)|0;F=E;return F|0}return 0}function Fl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+32|0;o=A;if(!f){Ra=A;return}if(c[f+4>>2]&1|0){Ra=A;return}switch(a[f>>0]|0){case 44:{Fl(d,c[f+16>>2]|0);Fl(d,c[f+12>>2]|0);Ra=A;return}case 53:{g=c[f+16>>2]|0;f=c[f+12>>2]|0;do if((a[g>>0]|0)==-94?(j=g+4|0,(c[j>>2]&8|0)==0):0){i=o+20|0;a[i>>0]=1;c[o+4>>2]=127;c[o+8>>2]=128;c[o+24>>2]=0;if(f){_j(o,f)|0;if(!(a[i>>0]|0))break}i=c[d>>2]|0;t=f+4|0;if(!(c[t>>2]&256))if((c[j>>2]&256|0)==0?(k=Yi(i,f)|0,(k|0)!=0):0){l=k;u=14}else{m=g;u=13}else{m=f;u=13}if((u|0)==13?(n=Yi(i,m)|0,n|0):0){l=n;u=14}if((u|0)==14){if((c[l+12>>2]|0)!=78)break;if(c[l+8>>2]|0)break}m=d+4|0;k=c[m>>2]|0;n=d+12|0;do if((k|0)>0){l=c[n>>2]|0;i=c[g+28>>2]|0;j=g+32|0;h=0;while(1){z=c[l+(h<<1<<2)>>2]|0;if((c[z+28>>2]|0)==(i|0)?(b[z+32>>1]|0)==(b[j>>1]|0):0){u=107;break}h=h+1|0;if((h|0)>=(k|0)){u=22;break}}if((u|0)==22){x=n;r=l;break}else if((u|0)==107){Ra=A;return}}else{x=n;r=c[n>>2]|0}while(0);k=k+1|0;c[m>>2]=k;l=c[c[d>>2]>>2]|0;k=k<<3;a:do if(!r){b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))u=34;else{u=48;break a}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0))){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];s=l+284|0;c[s>>2]=(c[s>>2]|0)+1;s=i;break b}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];s=l+284|0;c[s>>2]=(c[s>>2]|0)+1;s=i;break b}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;u=34}while(0);if((u|0)==34)s=_d(l,k,0)|0;c[x>>2]=s;if(s|0){w=s;u=51}}else{i=r;j=l+304|0;if(((c[j>>2]|0)>>>0<=i>>>0?(c[l+308>>2]|0)>>>0>i>>>0:0)?!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0)):0)h=r;else{h=Zd(l,r,k,0)|0;if(!h){if(c[l+480>>2]|0){Xd(l,r);u=48;break}if((c[j>>2]|0)>>>0<=i>>>0?(c[l+308>>2]|0)>>>0>i>>>0:0){u=l+300|0;c[r>>2]=c[u>>2];c[u>>2]=r;u=48;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);u=48;break}else{u=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);u=48;break}}}c[x>>2]=h;w=h;u=51}while(0);if((u|0)==48)c[x>>2]=0;else if((u|0)==51){if(c[t>>2]&8)f=c[f+12>>2]|0;z=c[m>>2]<<1;c[w+(z+-2<<2)>>2]=g;c[(c[n>>2]|0)+(z+-1<<2)>>2]=f;Ra=A;return}c[m>>2]=0;Ra=A;return}while(0);if((a[f>>0]|0)!=-94){Ra=A;return}k=f+4|0;if(c[k>>2]&8|0){Ra=A;return}i=o+20|0;a[i>>0]=1;c[o+4>>2]=127;c[o+8>>2]=128;c[o+24>>2]=0;l=(g|0)==0;if(!l){_j(o,g)|0;if(!(a[i>>0]|0)){Ra=A;return}}j=c[d>>2]|0;do if(!(c[k>>2]&256)){if(!l?c[g+4>>2]&256|0:0){p=Yi(j,g)|0;u=66;break}i=Yi(j,f)|0;if(!i){p=Yi(j,g)|0;u=66}else{q=i;u=67}}else{p=Yi(j,f)|0;u=66}while(0);if((u|0)==66?p|0:0){q=p;u=67}if((u|0)==67){if((c[q+12>>2]|0)!=78){Ra=A;return}if(c[q+8>>2]|0){Ra=A;return}}n=d+4|0;l=c[n>>2]|0;o=d+12|0;do if((l|0)>0){m=c[o>>2]|0;j=c[f+28>>2]|0;k=f+32|0;i=0;while(1){x=c[m+(i<<1<<2)>>2]|0;if((c[x+28>>2]|0)==(j|0)?(b[x+32>>1]|0)==(b[k>>1]|0):0){u=107;break}i=i+1|0;if((i|0)>=(l|0)){u=75;break}}if((u|0)==75){z=o;v=m;break}else if((u|0)==107){Ra=A;return}}else{z=o;v=c[o>>2]|0}while(0);l=l+1|0;c[n>>2]=l;m=c[c[d>>2]>>2]|0;l=l<<3;c:do if(!v){d:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))u=87;else{u=101;break c}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<l>>>0:0))){i=m+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];y=m+284|0;c[y>>2]=(c[y>>2]|0)+1;y=j;break d}i=m+296|0;j=c[i>>2]|0;if(!j){i=m+292|0;break}else{c[i>>2]=c[j>>2];y=m+284|0;c[y>>2]=(c[y>>2]|0)+1;y=j;break d}}else i=m+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;u=87}while(0);if((u|0)==87)y=_d(m,l,0)|0;c[z>>2]=y;if(y|0){h=y;u=104}}else{j=v;k=m+304|0;if(((c[k>>2]|0)>>>0<=j>>>0?(c[m+308>>2]|0)>>>0>j>>>0:0)?!(0<0|(0==0?(e[m+276>>1]|0)>>>0<l>>>0:0)):0)h=v;else{i=Zd(m,v,l,0)|0;if(!i){if(c[m+480>>2]|0){Xd(m,v);u=101;break}if((c[k>>2]|0)>>>0<=j>>>0?(c[m+308>>2]|0)>>>0>j>>>0:0){u=m+300|0;c[v>>2]=c[u>>2];c[u>>2]=v;u=101;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](v);u=101;break}else{u=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);u=101;break}}else h=i}c[z>>2]=h;u=104}while(0);if((u|0)==101)c[z>>2]=0;else if((u|0)==104){if(c[g+4>>2]&8)g=c[g+12>>2]|0;z=c[n>>2]<<1;c[h+(z+-2<<2)>>2]=f;c[(c[o>>2]|0)+(z+-1<<2)>>2]=g;Ra=A;return}c[n>>2]=0;Ra=A;return}default:{Ra=A;return}}}function Gl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((a[e>>0]|0)!=-94){e=0;return e|0}k=e+4|0;l=c[k>>2]|0;if(l&8|0){e=0;return e|0}m=c[d+24>>2]|0;f=c[m+4>>2]|0;if((f|0)<=0){e=1;return e|0}g=c[m+12>>2]|0;h=e+28|0;i=e+32|0;d=0;while(1){j=d<<1;o=c[g+(j<<2)>>2]|0;if(((o|0)!=(e|0)?(c[o+28>>2]|0)==(c[h>>2]|0):0)?(b[o+32>>1]|0)==(b[i>>1]|0):0)break;d=d+1|0;if((d|0)>=(f|0)){d=1;n=12;break}}if((n|0)==12)return d|0;d=m+8|0;c[d>>2]=(c[d>>2]|0)+1;c[k>>2]=l&-8388617|8;d=c[g+((j|1)<<2)>>2]|0;if(!d)d=0;else d=dk(c[c[m>>2]>>2]|0,d,0,0)|0;c[e+12>>2]=d;o=1;return o|0}function Hl(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=(c|0)<(e|0)?c:e;g=Lu(d,f,h)|0;if(g|0){e=g;return e|0}if(b|0){g=d+h|0;b=c-h|0;a:do if((b|0)>0)while(1){d=b+-1|0;if((a[g+d>>0]|0)!=32)break a;if((b|0)>1)b=d;else{b=d;break}}while(0);if(!b){g=f+h|0;b=e-h|0;b:do if((b|0)>0)while(1){d=b+-1|0;if((a[g+d>>0]|0)!=32)break b;if((b|0)>1)b=d;else{b=d;break}}while(0);if(!b){e=0;return e|0}}}e=c-e|0;return e|0}function Il(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=b+8|0;a:do if(d|0){while(1){f=d;while(1){g=c[f+4>>2]|0;if(!(g&4096))break;if(!(g&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f)break a}a[h>>0]=e;if((a[f>>0]|0)!=e<<24>>24)break;Il(b,c[f+12>>2]|0,e);d=c[f+16>>2]|0;if(!d)break a}Ml(b,d,0)|0;return}while(0);a[h>>0]=e;return}function Jl(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;na=Ra;Ra=Ra+16|0;ba=na+8|0;ja=na;aa=c[f>>2]|0;ka=c[aa>>2]|0;la=a[f+46>>0]|0;ma=la&255;Y=(la&255)<2?1:la<<24>>24==2?5:10;ia=f+8|0;h=c[ia>>2]|0;da=g<<16>>16==0;if(da|(h|0)==0)W=0;else W=c[h>>2]|0;l=Y<<1;m=W<<1;j=m+(G(l,(ma<<2)+32|0)|0)|0;k=((j|0)<0)<<31>>31;a:do if(c[ka+272>>2]|0)if(!(a[ka+81>>0]|0))V=13;else{Ra=na;return}else{do if(!(0<k>>>0|(0==(k|0)?(e[ka+276>>1]|0)>>>0<j>>>0:0))){h=ka+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];fa=ka+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=i;break a}h=ka+296|0;i=c[h>>2]|0;if(!i){h=ka+292|0;break}else{c[h>>2]=c[i>>2];fa=ka+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=i;break a}}else h=ka+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;V=13}while(0);if((V|0)==13)fa=_d(ka,j,k)|0;if(!fa){Ra=na;return}o=fa+(Y<<5)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=0;h=l;j=o+(Y<<5)|0;i=fa;while(1){c[i+24>>2]=j;j=j+(ma<<2)|0;if((h|0)<=1)break;else{h=h+-1|0;i=i+32|0}}h=(W|0)!=0;if(h)gw(j|0,0,m|0)|0;else j=0;ca=c[aa+132>>2]|0;b[fa+(Y<<5)+16>>1]=ca>>>0<48?ca:48;if(h)a[fa+(Y<<5)+22>>0]=la<<24>>24==0?W&255:-1;ca=la<<24>>24==0;b:do if(!ca){Q=f+60|0;R=f+44|0;S=Y>>>0>1;T=f+20|0;U=((g&65535)<<16)+1048576|0;P=0;l=0;k=0;h=0;i=fa;m=1;while(1){if((m|0)>0){K=P&65535;M=P<<2;N=i+18|0;O=i+16|0;p=0;J=0;I=o;while(1){n=c[Q>>2]|0;if(!n)n=p;else{C=I+22|0;D=I+16|0;E=I+20|0;F=I+8|0;H=I+24|0;x=p;while(1){w=a[C>>0]|0;B=ja;c[B>>2]=0;c[B+4>>2]=0;B=n;v=I;u=c[v>>2]|0;v=c[v+4>>2]|0;c:do if((((c[B>>2]&~u|0)==0?(c[B+4>>2]&~v|0)==0:0)?(Z=n+8|0,$=Z,_=c[$>>2]|0,$=c[$+4>>2]|0,(_&u|0)==0&($&v|0)==0):0)?(X=b[D>>1]|0,!(X<<16>>16<3?(c[n+36>>2]&16384|0)!=0:0)):0){p=b[n+18>>1]|0;t=X&65535;s=t+(e[n+20>>1]|0)|0;q=s&65535;r=p<<16>>16;s=s<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0)){p=q;break}if((r+31|0)<(s|0)){p=s+1&65535;break}else{p=s+(d[18112+(s-r)>>0]|0)&65535;break}}else{if((s+49|0)<(r|0))break;if((s+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);q=b[E>>1]|0;r=p<<16>>16;s=q<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0)){p=q;break}if((r+31|0)<(s|0)){p=s+1&65535;break}else{p=(d[18112+(s-r)>>0]|0)+s&65535;break}}else{if((s+49|0)<(r|0))break;if((s+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);A=(e[n+22>>1]|0)+t|0;B=A&65535;z=_|u;y=$|v;if(w<<24>>24<0)w=hm(f,c[ia>>2]|0,I,b[R>>1]|0,K,n,ja)|0;else{t=F;u=c[t+4>>2]|0;v=ja;c[v>>2]=c[t>>2];c[v+4>>2]=u}r=w<<24>>24;if(w<<24>>24>-1&(W|0)>(r|0)){v=j+(r<<1)|0;q=b[v>>1]|0;if(!(q<<16>>16)){q=((W-r|0)*100|0)/(W|0)|0;r=((q|0)<0)<<31>>31;do if(q>>>0<8){if(q>>>0<2){u=-4325376;break}s=40;do{s=(s&65535)+65526|0;q=cw(q|0,r|0,1)|0;r=L()|0}while(r>>>0<0|(r|0)==0&q>>>0<8);s=s&65535;V=66}else{if(q>>>0>255){s=40;do{s=(s&65535)+40|0;V=q;q=bw(q|0,r|0,4)|0;u=r;r=L()|0}while(u>>>0>0|(u|0)==0&V>>>0>4095);s=s&65535}else s=40;if(!(r>>>0>0|(r|0)==0&q>>>0>15)){V=66;break}do{s=(s&65535)+10&65535;V=q;q=bw(q|0,r|0,1)|0;u=r;r=L()|0}while(u>>>0>0|(u|0)==0&V>>>0>31);V=66}while(0);if((V|0)==66){V=0;u=((s&65535)+65526+(e[3648+((q&7)<<1)>>1]|0)<<16)+-4325376|0}if(!(b[R>>1]&16384))r=g;else{r=b[T>>1]|0;r=r<<16>>16<g<<16>>16?r:g}if(r<<16>>16<11)q=0;else{q=r<<16>>16;t=((q|0)<0)<<31>>31;if((r&65535)>255){s=40;r=t;do{s=(s&65535)+40|0;t=q;q=bw(q|0,r|0,4)|0;oa=r;r=L()|0}while(oa>>>0>0|(oa|0)==0&t>>>0>4095);s=s&65535}else{s=40;r=t}if(r>>>0>0|(r|0)==0&q>>>0>15){do{s=(s&65535)+10&65535;oa=q;q=bw(q|0,r|0,1)|0;t=r;r=L()|0}while(t>>>0>0|(t|0)==0&oa>>>0>31);r=s}else r=s;q=(r&65535)+65493+(e[3648+((q&7)<<1)>>1]|0)&65535}q=q+((U+u|0)>>>16)&65535;b[v>>1]=q}r=p<<16>>16;s=q<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0))break;if((r+31|0)<(s|0)){q=s+1&65535;break}else{q=(d[18112+(s-r)>>0]|0)+s&65535;break}}else{if((s+49|0)<(r|0)){q=p;break}if((s+31|0)<(r|0)){q=r+1&65535;break}else{q=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);v=p;u=(q&65535)+5&65535}else{v=(p&65535)+65534&65535;u=p}d:do if((x|0)>0){p=0;t=i;while(1){oa=t;if(((c[oa>>2]|0)==(z|0)?(c[oa+4>>2]|0)==(y|0):0)?(a[t+22>>0]^w)<<24>>24>-1:0)break;p=p+1|0;if((p|0)>=(x|0)){V=96;break d}else t=t+32|0}q=t+22|0;r=t+18|0;p=b[r>>1]|0;if(p<<16>>16<u<<16>>16){p=x;break c}if(p<<16>>16!=u<<16>>16){s=t;p=t;break}s=b[t+16>>1]|0;p=A<<16>>16;if((p|0)>(s|0)){p=x;break c}if((p|0)!=(s|0)){s=t;p=t;break}if((b[t+20>>1]|0)>v<<16>>16){s=t;p=t}else{p=x;break c}}else V=96;while(0);if((V|0)==96){V=0;p=(x|0)<(Y|0);if(!p){if(u<<16>>16>k<<16>>16){p=x;break}if(!(u<<16>>16!=k<<16>>16?1:v<<16>>16<h<<16>>16)){p=x;break}}q=p?x:l;oa=i+(q<<5)|0;s=oa;x=x+(p&1)|0;r=i+(q<<5)+18|0;q=i+(q<<5)+22|0;p=oa}oa=I;y=Z;A=c[y+4>>2]|c[oa+4>>2];z=p;c[z>>2]=c[y>>2]|c[oa>>2];c[z+4>>2]=A;z=ja;A=c[z+4>>2]|0;oa=s+8|0;c[oa>>2]=c[z>>2];c[oa+4>>2]=A;b[s+16>>1]=B;b[r>>1]=u;b[s+20>>1]=v;a[q>>0]=w;oa=s+24|0;ew(c[oa>>2]|0,c[H>>2]|0,M|0)|0;c[(c[oa>>2]|0)+(P<<2)>>2]=n;if((x|0)<(Y|0)){p=x;break}k=b[N>>1]|0;h=b[O>>1]|0;if(!S){p=x;l=0;break}r=i;s=1;l=0;do{q=b[r+50>>1]|0;do if(q<<16>>16<=k<<16>>16){if(q<<16>>16!=k<<16>>16)break;p=b[r+52>>1]|0;if(p<<16>>16>h<<16>>16){h=p;V=112}}else{h=b[r+52>>1]|0;V=112}while(0);r=r+32|0;if((V|0)==112){V=0;l=s;k=q}s=s+1|0}while((s|0)!=(Y|0));p=x}else p=x;while(0);n=c[n+52>>2]|0;if(!n){n=p;break}else x=p}}J=J+1|0;if((J|0)==(m|0)){m=n;break}else{p=n;I=I+32|0}}}else m=0;P=P+1|0;if((P|0)==(ma|0))break;else{oa=o;o=i;i=oa}}if(m|0){if((m|0)>1){j=1;h=i;do{h=(b[h+18>>1]|0)>(b[i+(j<<5)+18>>1]|0)?i+(j<<5)|0:h;j=j+1|0}while((j|0)!=(m|0));i=h}if(ca){o=i;break}j=c[i+24>>2]|0;k=c[f+4>>2]|0;h=0;while(1){oa=c[j+(h<<2)>>2]|0;c[f+752+(h*80|0)+64>>2]=oa;oa=a[oa+16>>0]|0;a[f+752+(h*80|0)+44>>0]=oa;c[f+752+(h*80|0)+4>>2]=c[k+8+((oa&255)*72|0)+40>>2];h=h+1|0;if((h|0)==(ma|0)){o=i;break b}}}cd(aa,43687,ba);if(ka|0){if(c[ka+480>>2]|0){Xd(ka,fa);Ra=na;return}oa=fa;if((c[ka+304>>2]|0)>>>0<=oa>>>0?(c[ka+308>>2]|0)>>>0>oa>>>0:0){oa=ka+300|0;c[fa>>2]=c[oa>>2];c[oa>>2]=fa;Ra=na;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](fa);Ra=na;return}else{oa=Wa[c[29352>>2]&127](fa)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](fa);Ra=na;return}}while(0);n=f+44|0;if(((b[n>>1]&384)==256?(ea=f+51|0,!(da|(a[ea>>0]|0)!=0)):0)?(da=f+12|0,oa=ma+-1|0,oa=(hm(f,c[da>>2]|0,o,128,oa&65535,c[(c[o+24>>2]|0)+(oa<<2)>>2]|0,ja)|0)<<24>>24,(c[c[da>>2]>>2]|0)==(oa|0)):0)a[ea>>0]=2;l=f+52|0;a[l>>0]=0;h=c[ia>>2]|0;if(h|0){i=b[n>>1]|0;j=a[o+22>>0]|0;if(!(i&128)){k=f+47|0;a[k>>0]=j;da=o+8|0;ea=c[da+4>>2]|0;m=f+64|0;oa=m;c[oa>>2]=c[da>>2];c[oa+4>>2]=ea;if((j<<24>>24<1?(a[k>>0]=0,!ca):0)?(ga=ma+-1|0,ha=c[(c[o+24>>2]|0)+(ga<<2)>>2]|0,oa=c[ha+36>>2]|0,!((oa&4096|0)!=0|(oa&260|0)==260)):0){oa=ja;c[oa>>2]=0;c[oa+4>>2]=0;oa=(hm(f,h,o,2048,ga&65535,ha,ja)|0)<<24>>24;h=c[ia>>2]|0;if((c[h>>2]|0)==(oa|0)){a[l>>0]=1;ga=ja;ha=c[ga+4>>2]|0;oa=m;c[oa>>2]=c[ga>>2];c[oa+4>>2]=ha}i=b[n>>1]|0}}else if((c[h>>2]|0)==(j<<24>>24|0))a[f+51>>0]=2;if((i&512?(la<<24>>24?(c[h>>2]|0)==(a[f+47>>0]|0):0):0)?(oa=ja,c[oa>>2]=0,c[oa+4>>2]=0,oa=ma+-1|0,oa=(hm(f,h,o,0,oa&65535,c[(c[o+24>>2]|0)+(oa<<2)>>2]|0,ja)|0)<<24>>24,(c[c[ia>>2]>>2]|0)==(oa|0)):0){a[f+48>>0]=1;la=ja;ma=c[la+4>>2]|0;oa=f+64|0;c[oa>>2]=c[la>>2];c[oa+4>>2]=ma}}b[f+72>>1]=b[o+16>>1]|0;if(ka|0){if(c[ka+480>>2]|0){Xd(ka,fa);Ra=na;return}oa=fa;if((c[ka+304>>2]|0)>>>0<=oa>>>0?(c[ka+308>>2]|0)>>>0>oa>>>0:0){oa=ka+300|0;c[fa>>2]=c[oa>>2];c[oa>>2]=fa;Ra=na;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](fa);Ra=na;return}else{oa=Wa[c[29352>>2]&127](fa)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](fa);Ra=na;return}}function Kl(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+192|0;o=E+152|0;r=E+144|0;u=E+136|0;t=E+128|0;p=E+120|0;n=E+112|0;m=E+104|0;C=E+160|0;l=E;D=c[f+116>>2]|0;if((a[((D|0)==0?f:D)+199>>0]|0)!=2){Ra=E;return}s=d[h+44>>0]|0;D=c[f+8>>2]|0;k=c[f>>2]|0;x=c[h+64>>2]|0;v=x+36|0;q=c[v>>2]|0;if((q&8192|0)==0?(j=i&65535,(j&32|0)==0):0){i=q&48;do if(!i){if((q&1024|0)==0?b[x+24>>1]|0:0){j=1;break}j=(j&3|0)!=0}else j=1;while(0);B=C+4|0;c[B>>2]=l;c[C>>2]=k;w=C+8|0;c[w>>2]=100;y=C+12|0;c[y>>2]=1e9;z=C+16|0;c[z>>2]=0;a[C+20>>0]=0;A=C+21|0;a[A>>0]=0;h=j?6:4;c[z>>2]=h;ew(l|0,(j?43742:43749)|0,h|0)|0;h=c[g+8+(s*72|0)+20>>2]|0;if(!h){c[n>>2]=c[g+8+(s*72|0)+8>>2];Eb(C,43767,n)}else{c[m>>2]=c[h+20>>2];Eb(C,43754,m)}h=c[g+8+(s*72|0)+12>>2]|0;if(h|0){c[p>>2]=h;Eb(C,43777,p)}do if(!(q&1280)){k=x+32|0;l=c[k>>2]|0;if((c[(c[g+8+(s*72|0)+16>>2]|0)+36>>2]&32|0)!=0?(s=l+55|0,((d[s>>0]|d[s+1>>0]<<8)&3)==2):0)if(j)h=43784;else break;else if(!(q&131072))h=(q&16384|0)==0?((q&64|0)==0?43872:43854):43829;else h=43796;i=c[z>>2]|0;j=i+7|0;if(j>>>0<(c[w>>2]|0)>>>0){c[z>>2]=j;s=(c[B>>2]|0)+i|0;a[s>>0]=a[43881]|0;a[s+1>>0]=a[43882]|0;a[s+2>>0]=a[43883]|0;a[s+3>>0]=a[43884]|0;a[s+4>>0]=a[43885]|0;a[s+5>>0]=a[43886]|0;a[s+6>>0]=a[43887]|0}else wb(C,43881,7);c[t>>2]=c[l>>2];Eb(C,h,t);p=c[k>>2]|0;h=b[x+24>>1]|0;l=b[x+42>>1]|0;i=h&65535;h=h<<16>>16==0;if(h?(c[v>>2]&48|0)==0:0)break;j=c[z>>2]|0;k=j+2|0;if(k>>>0<(c[w>>2]|0)>>>0){c[z>>2]=k;t=(c[B>>2]|0)+j|0;a[t>>0]=32;a[t+1>>0]=40}else wb(C,43974,2);a:do if(h)i=0;else{n=p+4|0;o=p+12|0;m=l&65535;l=0;while(1){h=b[(c[n>>2]|0)+(l<<1)>>1]|0;switch(h<<16>>16){case -2:{h=43996;break}case -1:{h=38132;break}default:h=c[(c[(c[o>>2]|0)+4>>2]|0)+(h<<16>>16<<4)>>2]|0}do if(l|0){j=c[z>>2]|0;k=j+5|0;if(k>>>0<(c[w>>2]|0)>>>0){c[z>>2]=k;t=(c[B>>2]|0)+j|0;a[t>>0]=a[43977]|0;a[t+1>>0]=a[43978]|0;a[t+2>>0]=a[43979]|0;a[t+3>>0]=a[43980]|0;a[t+4>>0]=a[43981]|0;break}else{wb(C,43977,5);break}}while(0);c[u>>2]=h;Eb(C,l>>>0<m>>>0?43988:43983,u);l=l+1|0;if((l|0)==(i|0))break a}}while(0);h=c[v>>2]|0;if(!(h&32))j=i;else{im(C,p,e[x+26>>1]|0,i,i,43905);j=1;h=c[v>>2]|0}if(h&16|0)im(C,p,e[x+28>>1]|0,i,j,43907);h=c[z>>2]|0;i=h+1|0;if(i>>>0<(c[w>>2]|0)>>>0){c[z>>2]=i;a[(c[B>>2]|0)+h>>0]=41;break}else{wb(C,34066,1);break}}else{if((q&256|0)==0|(q&15|0)==0){if(!(q&1024))break;w=c[x+32>>2]|0;c[o>>2]=c[x+24>>2];c[o+4>>2]=w;Eb(C,43947,o);break}if(!(q&5))h=(i|0)==48?43891:(q&32|0)==0?43907:43905;else h=43889;c[r>>2]=h;Eb(C,43909,r)}while(0);h=c[B>>2]|0;if(((h|0)!=0?(a[h+(c[z>>2]|0)>>0]=0,(c[y>>2]|0)!=0):0)?(a[A>>0]&4)==0:0)k=$d(C)|0;else k=c[B>>2]|0;j=D+108|0;h=c[j>>2]|0;i=c[f+212>>2]|0;if((c[D+112>>2]|0)>(h|0)){c[j>>2]=h+1;f=c[D+104>>2]|0;a[f+(h*20|0)>>0]=-85;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=h;c[f+(h*20|0)+8>>2]=i;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else h=Di(D,171,h,i,0)|0;i=c[D>>2]|0;do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[j>>2]|0)+-1|0;i=c[D+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(D,i+(h*20|0)|0,k,-7);break}if(k|0){c[i+(h*20|0)+16>>2]=k;a[j>>0]=-7}}else if(k|0){if(i|0){if(c[i+480>>2]|0){Xd(i,k);break}D=k;if((c[i+304>>2]|0)>>>0<=D>>>0?(c[i+308>>2]|0)>>>0>D>>>0:0){D=i+300|0;c[k>>2]=c[D>>2];c[D>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{D=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);Ra=E;return}Ra=E;return}\nfunction cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r+4|0;j=r;d=c[a>>2]|0;n=c[d>>2]|0;do if(b){if((n+-3|0)>>>0<2){e=b<<2;q=pb(e,0)|0;if(!q){e=7;break}gw(q|0,0,e|0)|0;c[p>>2]=d;if((c[d>>2]|0)==(n|0)){e=d;do e=c[e+12>>2]|0;while((c[e>>2]|0)==(n|0));c[p>>2]=e}else e=d;m=b+-1|0;o=(b|0)>0;a:do if(o){f=0;b:while(1){k=e+8|0;l=c[k>>2]|0;c[k>>2]=0;k=(l|0)==0;if(k)d=0;else c[l+12>>2]=0;e=cr(p,m)|0;if(e|0){k=46;break a}g=c[p>>2]|0;if(g){j=0;e=f;h=c[p>>2]|0;while(1){i=q+(j<<2)|0;f=c[i>>2]|0;if(!f)break;c[e+12>>2]=f;c[e+16>>2]=g;c[f+8>>2]=e;c[g+8>>2]=e;h=e+8|0;f=c[h>>2]|0;c[h>>2]=0;c[i>>2]=0;j=j+1|0;if(!((j|0)<(b|0)&(e|0)!=0))break b;else{g=e;h=e;e=f}}c[p>>2]=h;c[i>>2]=g;c[p>>2]=0;f=e}if(k){k=37;break a}h=l+16|0;e=h;while(1){e=c[e>>2]|0;g=e;if((c[g>>2]|0)==(n|0))e=g+12|0;else break}c[p>>2]=e;i=l+8|0;g=c[h>>2]|0;c[g+8>>2]=c[i>>2];h=c[i>>2]|0;if(!h)d=g;else c[h+12>>2]=g;c[i>>2]=f;f=l}c[p>>2]=e;k=30}else{f=0;while(1){g=e+8|0;j=c[g>>2]|0;c[g>>2]=0;g=(j|0)==0;if(g)d=0;else c[j+12>>2]=0;e=cr(p,m)|0;if(e|0){k=46;break a}e=c[p>>2]|0;if(e|0){k=30;break a}if(g){k=37;break a}h=j+16|0;e=h;while(1){e=c[e>>2]|0;g=e;if((c[g>>2]|0)==(n|0))e=g+12|0;else break}c[p>>2]=e;i=j+8|0;g=c[h>>2]|0;c[g+8>>2]=c[i>>2];h=c[i>>2]|0;if(!h)d=g;else c[h+12>>2]=g;c[i>>2]=f;f=j}}while(0);if((k|0)==30){ar(e);e=18;k=46}else if((k|0)==37){c[p>>2]=0;if(o){h=0;d=0;do{e=q+(h<<2)|0;g=c[e>>2]|0;if(g){if(!d){d=g;e=g+8|0}else{c[f+16>>2]=d;e=c[e>>2]|0;c[f+12>>2]=e;c[e+8>>2]=f;c[d+8>>2]=f;e=f+8|0;d=f;f=c[e>>2]|0}c[e>>2]=0}h=h+1|0}while((h|0)!=(b|0));c[p>>2]=d;e=0}else{e=0;d=0}}if((k|0)==46){if(o){g=0;do{ar(c[q+(g<<2)>>2]|0);g=g+1|0}while((g|0)!=(b|0))}if(f)do{g=f;f=c[f+8>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{b=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0)}if(!(c[7324]|0))ab[c[29344>>2]&127](q);else{b=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q)}}else{if((n|0)!=2){q=0;b=d;c[a>>2]=b;Ra=r;return q|0}h=d+12|0;g=c[h>>2]|0;c[p>>2]=g;i=d+16|0;f=c[i>>2]|0;c[j>>2]=f;c[h>>2]=0;c[i>>2]=0;c[g+8>>2]=0;c[f+8>>2]=0;g=b+-1|0;e=cr(p,g)|0;do if(!e){e=cr(j,g)|0;if(!e){e=c[p>>2]|0;c[h>>2]=e;c[e+8>>2]=d;e=c[j>>2]|0;c[i>>2]=e;c[e+8>>2]=d;e=0;break}else{f=c[j>>2]|0;k=63;break}}else k=63;while(0);if((k|0)==63){ar(f);ar(c[p>>2]|0)}}if(!e){q=0;b=d;c[a>>2]=b;Ra=r;return q|0}}else e=1;while(0);ar(d);q=e;b=0;c[a>>2]=b;Ra=r;return q|0}function dr(a,b){a=a|0;b=b|0;var d=0;if(!a){d=0;return d|0}d=b;while(1){if((d|0)<0){b=18;a=6;break}d=d+-1|0;b=dr(c[a+12>>2]|0,d)|0;if(b|0){a=6;break}a=c[a+16>>2]|0;if(!a){b=0;a=6;break}}if((a|0)==6)return b|0;return 0}function er(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=Ra;Ra=Ra+32|0;R=W+20|0;S=W+16|0;T=W+12|0;U=W+8|0;V=W+4|0;E=W;F=b+24|0;H=b+20|0;I=b+16|0;J=b+32|0;K=b+8|0;M=b+4|0;N=b+12|0;m=0;j=f;l=1;D=e;e=0;a:while(1){c[E>>2]=0;c[F>>2]=0;b:do if((j|0)>0){n=j;k=D;while(1){switch(a[k>>0]|0){case 12:case 11:case 13:case 10:case 9:case 32:break;default:{C=k;break b}}i=n+-1|0;k=k+1|0;if((n|0)>1)n=i;else{w=6;break b}}}else{i=j;k=D;w=6}while(0);if((w|0)==6){w=0;if(!i){k=101;i=0;w=171;break}else{n=i;C=k}}i=C+4|0;k=C+5|0;c:do if((n|0)<2)w=187;else{if(!(Lu(C,54896,2)|0))switch(a[C+2>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=0;q=2;o=10;break}default:w=25}else w=25;d:do if((w|0)==25){w=0;if((n|0)<3){w=187;break c}if(!(Lu(C,54899,3)|0))switch(a[C+3>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=1;q=3;o=10;break d}default:{}}if(!(Lu(C,54903,3)|0))switch(a[C+3>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=2;q=3;o=10;break d}default:{}}if((n|0)<4){w=187;break c}if(Lu(C,54907,4)|0){w=187;break c}i=a[i>>0]|0;if(i<<24>>24==47){i=a[k>>0]|0;if((i+-48&255)>=10){w=187;break c}k=5;o=0;do{o=(o*10|0)+-48+(i<<24>>24)|0;k=k+1|0;i=a[C+k>>0]|0}while((i+-48&255)<10)}else{k=4;o=10}switch(i<<24>>24){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=3;q=k;break}default:{w=187;break c}}}while(0);p=26336+(i<<3)+6|0;if(mb()|0){k=7;i=0;w=171;break a}if(!(c[7324]|0)){n=Wa[c[29340>>2]&127](48)|0;if(!n){k=7;i=0;w=171;break a}t=n;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0))}else{i=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;n=59064;k=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&k>>>0>0){B=c[14978]|0;A=Tv(k|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;z=L()|0;c[14768]=((z|0)<0|(z|0)==0&A>>>0<=B>>>0)&1}n=Wa[c[29340>>2]&127](i)|0;if(!n){k=7;i=0;w=171;break a}i=Wa[c[29352>>2]&127](n)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i;t=n;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0))}c[n>>2]=d[p>>0];c[n+4>>2]=o;c[E>>2]=n;k=0;i=C-D+q|0}while(0);e:do if((w|0)==187){w=0;switch(a[C>>0]|0){case 41:{w=87;break a}case 34:{f:do if((n|0)>1){i=1;while(1){if((a[C+i>>0]|0)==34){k=i;break f}i=i+1|0;if((i|0)>=(n|0)){k=i;break}}}else k=1;while(0);i=k+1-D+C|0;if((k|0)==(n|0)){k=1;w=171;break a}A=C+1|0;z=k+-1|0;o=c[b>>2]|0;B=c[o>>2]|0;n=c[M>>2]|0;c[R>>2]=0;k=Za[c[B+12>>2]&127](o,A,z,R)|0;g:do if(!k){c[c[R>>2]>>2]=o;if((c[B>>2]|0)>0?(G=Xa[c[B+24>>2]&255](c[R>>2]|0,n)|0,G|0):0){Wa[c[B+16>>2]&127](c[R>>2]|0)|0;c[R>>2]=0;k=G;o=0;w=36;break}o=c[R>>2]|0;w=B+20|0;y=o;t=0;r=0;s=0;q=0;n=0;u=0;p=0;while(1){c[S>>2]=0;c[T>>2]=0;c[U>>2]=0;c[V>>2]=0;k=$a[c[w>>2]&127](y,R,S,T,U,V)|0;x=(k|0)==0;if(x){if(mb()|0){w=42;break}v=sb(u,(t*24|0)+144|0,0)|0;if(!v){w=42;break}n=c[S>>2]|0;if(mb()|0){w=48;break}u=n+s|0;u=sb(q,u,((u|0)<0)<<31>>31)|0;if(!u){w=48;break}p=v+120|0;q=p+(t*24|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;ew(u+s|0,c[R>>2]|0,c[S>>2]|0)|0;q=c[S>>2]|0;c[p+(t*24|0)+4>>2]=q;n=c[U>>2]|0;if((n|0)<(z|0))n=(a[A+n>>0]|0)==42;else n=0;c[p+(t*24|0)+8>>2]=n&1;n=c[T>>2]|0;if((n|0)>0)n=(a[C+n>>0]|0)==94;else n=0;c[p+(t*24|0)+12>>2]=n&1;t=t+1|0;n=v;r=t;s=q+s|0;q=u;p=v;u=v}else t=t+1|0;if(!x){w=58;break}}do if((w|0)==42)if(u)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);n=q;k=0;break}else{n=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);n=q;k=0;break}else{n=q;k=0}else if((w|0)==48)if(q)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);n=0;k=v;break}else{n=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);n=0;k=v;break}else{n=0;k=v}else if((w|0)==58){Wa[c[B+16>>2]&127](y)|0;o=0;w=59;break g}while(0);w=75}else{o=c[R>>2]|0;w=36}while(0);if((w|0)==36){n=0;r=0;s=0;q=0;p=0;w=59}h:do if((w|0)==59){w=0;if((k|0)==101){if((mb()|0)==0?(O=sb(p,s+144+(r*24|0)|0,0)|0,O|0):0){n=O+48|0;t=O;u=t+112|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[O>>2]=5;k=O+20|0;c[k>>2]=n;c[O+116>>2]=c[H>>2];c[O+112>>2]=r;n=n+72+(r*24|0)|0;do if(q|0){ew(n|0,q|0,s|0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{C=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);p=c[k>>2]|0;q=c[p+64>>2]|0;if((q|0)<=0){k=0;n=O;break}c[p+72>>2]=n;if((q|0)==1){k=0;n=O;break}k=n+(c[p+76>>2]|0)|0;n=1;while(1){c[p+72+(n*24|0)>>2]=k;o=n+1|0;if((o|0)<(q|0)){k=k+(c[p+72+(n*24|0)+4>>2]|0)|0;n=o}else{k=0;n=O;break h}}}if(p)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);n=q;k=0;w=75;break}else{n=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);n=q;k=0;w=75;break}else{n=q;k=0;w=75}}}while(0);do if((w|0)==75){w=0;if(o|0)Wa[c[B+16>>2]&127](o)|0;do if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{C=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(k)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);k=7;n=0;break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);k=7;n=0;break}else{k=7;n=0}}while(0);c[E>>2]=n;break e}case 40:{c[R>>2]=0;c[J>>2]=(c[J>>2]|0)+1;k=er(b,C+1|0,n+-1|0,E,R)|0;i=1-D+C+(c[R>>2]|0)|0;n=c[E>>2]|0;break e}default:{s=c[H>>2]|0;t=c[I>>2]|0;i:do if((t|0)>0){u=c[K>>2]|0;i=0;j:while(1){k=c[u+(i<<2)>>2]|0;v=Eu(k)|0;if((n|0)>(v|0)?!((k|0)==0?1:(a[C+v>>0]|0)!=58):0){if((v|0)<=0){w=99;break}r=C;p=v;while(1){o=a[k>>0]|0;if(!(o<<24>>24)){w=95;break}o=a[208+(o&255)>>0]|0;q=a[208+(d[r>>0]|0)>>0]|0;if(o<<24>>24!=q<<24>>24){w=97;break}if((p|0)>1){k=k+1|0;r=r+1|0;p=p+-1|0}else{w=99;break j}}if((w|0)==95){w=0;o=0;k=a[208+(d[r>>0]|0)>>0]|0}else if((w|0)==97){w=0;o=o&255;k=q}if((o|0)==(k&255|0)){w=102;break}}i=i+1|0;if((i|0)>=(t|0)){q=s;u=0;break i}}if((w|0)==99){w=0;q=i;u=v+1-D+C|0;break}else if((w|0)==102){w=0;q=i;u=v+1-D+C|0;break}}else{q=s;u=0}while(0);s=D+u|0;p=j-u|0;o=c[b>>2]|0;t=c[o>>2]|0;k:do if((p|0)>0){i=0;while(1){switch(a[s+i>>0]|0){case 34:case 41:case 40:break k;default:{}}i=i+1|0;if((i|0)>=(p|0))break k}}else i=0;while(0);n=c[M>>2]|0;c[R>>2]=0;k=Za[c[t+12>>2]&127](o,s,i,R)|0;do if(!k){c[c[R>>2]>>2]=o;if((c[t>>2]|0)>0?(P=Xa[c[t+24>>2]&255](c[R>>2]|0,n)|0,P|0):0){Wa[c[t+16>>2]&127](c[R>>2]|0)|0;c[R>>2]=0;k=P;w=111;break}r=c[R>>2]|0;c[S>>2]=0;c[T>>2]=0;c[U>>2]=0;c[V>>2]=0;k=$a[c[t+20>>2]&127](r,R,S,T,U,V)|0;l:do if(!k){i=(c[S>>2]|0)+144|0;n=pb(i,0)|0;if(!n){n=0;k=7;i=c[U>>2]|0;break}gw(n|0,0,i|0)|0;c[n>>2]=5;c[n+20>>2]=n+48;c[n+112>>2]=1;c[n+116>>2]=q;i=c[S>>2]|0;c[n+124>>2]=i;C=n+144|0;c[n+120>>2]=C;ew(C|0,c[R>>2]|0,i|0)|0;i=c[U>>2]|0;if((i|0)<(p|0)?(Q=i+1|0,(a[s+i>>0]|0)==42):0){c[n+128>>2]=1;c[U>>2]=Q;i=Q}k=c[T>>2]|0;if((c[N>>2]|0)!=0&(k|0)>0){p=n+132|0;while(1){o=k;k=k+-1|0;if((a[s+k>>0]|0)!=94){k=0;break l}c[p>>2]=1;c[T>>2]=k;if((o|0)<=1){k=0;break}}}else k=0}else{n=0;k=(i|0)!=0&(k|0)==101?0:k}while(0);Wa[c[t+16>>2]&127](r)|0}else w=111;while(0);if((w|0)==111){w=0;n=0}c[E>>2]=n;i=i+u|0;break e}}}while(0);if((k|0)==0&(n|0)!=0){r=c[n>>2]|0;if((r|0)!=5){p=(c[n+12>>2]|0)!=0;o=p^1;k=(l|0)!=0;if(k&o){w=129;break}else q=p}else{k=(l|0)!=0;o=0;q=1}if(k|o)if(!m)m=0;else w=154;else{if(mb()|0){w=152;break}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](48)|0;if(!k){w=152;break}t=k;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0));p=k}else{k=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;p=59064;l=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&l>>>0>0){C=c[14978]|0;B=Tv(l|0,p|0,k|0,((k|0)<0)<<31>>31|0)|0;A=L()|0;c[14768]=((A|0)<0|(A|0)==0&B>>>0<=C>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l){w=152;break}k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;t=l;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0));p=l}c[p>>2]=3;k=m+8|0;l=c[k>>2]|0;m:do if(!l)w=150;else{n=l;while(1){if((c[n>>2]|0)>3)break;k=n+8|0;l=c[k>>2]|0;if(!l){m=n;w=150;break m}else{m=n;n=l}}c[n+16>>2]=p;c[p+8>>2]=c[k>>2]}while(0);if((w|0)==150)e=p;c[p+12>>2]=m;c[k>>2]=p;m=p;w=154}if((w|0)==154){w=0;if(!((r|0)!=1|q)?(c[m>>2]|0)!=5:0){w=158;break}if((r|0)!=5&q?(c[m>>2]|0)==1:0){w=158;break}}if(q){k=c[E>>2]|0;l=k;if(!e){e=k;m=l}else{c[m+16>>2]=k;c[l+8>>2]=m;m=l}}else{q=c[E>>2]|0;k=m+8|0;l=c[k>>2]|0;n:do if(!l)w=167;else{p=c[q>>2]|0;n=l;while(1){if((c[n>>2]|0)>(p|0))break;k=n+8|0;l=c[k>>2]|0;if(!l){m=n;w=167;break n}else{m=n;n=l}}c[n+16>>2]=q;c[q+8>>2]=c[k>>2]}while(0);if((w|0)==167){w=0;e=q}c[q+12>>2]=m;c[k>>2]=q;m=c[E>>2]|0}l=o&1;k=0}j=j-i|0;if(!k)D=D+i|0;else{w=173;break}}if((w|0)==87){c[J>>2]=(c[J>>2]|0)+-1;c[E>>2]=0;k=101;i=1-D+C|0;w=171}else if((w|0)==129){ar(n);i=1;w=170}else if((w|0)==152){ar(n);i=7;w=170}else if((w|0)==158){ar(c[E>>2]|0);i=1;w=170}if((w|0)!=170)if((w|0)==171){j=j-i|0;w=173}if((w|0)==173){i=(e|0)!=0&(k|0)==101&(l|0)!=0?1:k;c[h>>2]=f-j;if((i|0)==101){h=0;f=e;c[g>>2]=f;Ra=W;return h|0}}ar(e);h=i;f=0;c[g>>2]=f;Ra=W;return h|0}function fr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!b)return;while(1){if(c[f>>2]|0){v=38;break}g=c[b>>2]|0;if((g|0)==5){v=5;break}c[e>>2]=(c[e>>2]|0)+((g|0)==4&1);fr(a,c[b+12>>2]|0,d,e,f);b=c[b+16>>2]|0;if(!b){v=38;break}}if((v|0)==5){t=b+20|0;b=c[t>>2]|0;u=c[b+64>>2]|0;c[d>>2]=(c[d>>2]|0)+u;a:do if((u|0)>0){s=a+20|0;r=0;b:while(1){o=c[b+72+(r*24|0)>>2]|0;p=c[b+72+(r*24|0)+4>>2]|0;n=c[b+72+(r*24|0)+8>>2]|0;q=b+72+(r*24|0)+20|0;if(mb()|0){g=0;b=7;v=34;break}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](56)|0;if(!g){g=0;b=7;v=34;break}}else{b=Wa[c[29356>>2]&127](56)|0;if((c[14985]|0)>>>0<56)c[14985]=56;e=59064;g=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&g>>>0>0){m=c[14978]|0;l=Tv(g|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;k=L()|0;c[14768]=((k|0)<0|(k|0)==0&l>>>0<=m>>>0)&1}g=Wa[c[29340>>2]&127](b)|0;if(!g){g=0;b=7;v=34;break}b=Wa[c[29352>>2]&127](g)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0>(c[14987]|0)>>>0)c[14987]=b}m=c[a>>2]|0;l=(n|0)!=0;c:do if(l){h=m+256|0;d=g+36|0;k=c[m+252>>2]|0;i=(k|0)>1;if(i){e=c[h>>2]|0;j=1;while(1){if((c[e+(j*24|0)>>2]|0)==(p|0)){v=25;break}b=j+1|0;if((b|0)<(k|0))j=b;else break}if((v|0)==25){v=0;b=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));b=Xp(m,b,j,-2,o,p,0,0,g)|0;c[d>>2]=1;break}j=p+1|0;if(i){e=c[h>>2]|0;h=1;while(1){if((c[e+(h*24|0)>>2]|0)==(j|0))break;b=h+1|0;if((b|0)<(k|0))h=b;else{v=33;break c}}b=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));b=Xp(m,b,h,-2,o,p,1,0,g)|0;if(b|0){v=34;break b}b=Xp(m,c[s>>2]|0,0,-2,o,p,0,0,g)|0}else v=33}else v=33}else{d=g+36|0;v=33}while(0);if((v|0)==33){v=0;b=(l^1)&1;e=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));p=Xp(m,e,0,-2,o,p,n,0,g)|0;c[d>>2]=b;b=p}c[q>>2]=g;r=r+1|0;if(b|0)break;b=c[t>>2]|0;if((r|0)>=(u|0))break a}if((v|0)==34)c[q>>2]=g;c[f>>2]=b;return}while(0);c[b+44>>2]=-1;return}else if((v|0)==38)return}function gr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;D=Ra;Ra=Ra+16|0;C=D;if(c[h>>2]|0){Ra=D;return}j=e;a:while(1){switch(c[j>>2]|0){case 5:{e=5;break a}case 2:{e=31;break a}case 4:{i=j+12|0;e=c[i>>2]|0;c[c[g>>2]>>2]=e;c[g>>2]=(c[g>>2]|0)+4;break}default:{e=d;i=j+12|0}}gr(b,e,c[i>>2]|0,f,g,h);i=j+16|0;if((c[j>>2]|0)==4){e=c[i>>2]|0;c[c[g>>2]>>2]=e;c[g>>2]=(c[g>>2]|0)+4}if(!(c[h>>2]|0)){d=e;j=c[i>>2]|0}else{e=31;break}}if((e|0)==5){v=c[j+20>>2]|0;w=v+64|0;x=v+68|0;u=0;while(1){if((u|0)>=(c[w>>2]|0)){e=31;break}y=c[f>>2]|0;c[f>>2]=y+24;c[y>>2]=v;c[y+4>>2]=u;c[y+12>>2]=d;c[y+8>>2]=v+72+(u*24|0);c[y+20>>2]=c[x>>2];m=c[v+72+(u*24|0)+20>>2]|0;y=y+16|0;t=c[b>>2]|0;n=c[t+240>>2]|0;o=m+4|0;p=t+20|0;q=t+248|0;r=t+244|0;s=t+12|0;t=t+16|0;i=0;l=0;while(1){if((l|0)>=(c[o>>2]|0)){e=0;break}e=c[(c[m>>2]|0)+(l<<2)>>2]|0;b:do if(((c[e+56>>2]|0)==0?(a[e+5>>0]|0)==0:0)?(A=e+8|0,z=c[A>>2]|0,A=c[A+4>>2]|0,B=e+16|0,k=B,g=c[k+4>>2]|0,!((A|0)>(g|0)|((A|0)==(g|0)?z>>>0>(c[k>>2]|0)>>>0:0))):0){j=c[q>>2]|0;g=z;k=A;while(1){if(!j){e=c[r>>2]|0;if(!e){c[C>>2]=c[p>>2];e=Bb(53537,C)|0;c[r>>2]=e;if(!e){e=7;break b}}e=ad(c[s>>2]|0,c[t>>2]|0,e,53549,g,k,0,q)|0}else e=ld(j,g,k)|0;if(e|0)break b;j=c[q>>2]|0;if((j|0)!=0?(c[j+16>>2]|0)!=0:0)e=c[j>>2]|0;else e=0;if((e+35|0)>(n|0))i=((e+34|0)/(n|0)|0)+i|0;E=g;g=Sv(g|0,k|0,1,0)|0;G=k;k=L()|0;e=B;F=c[e+4>>2]|0;if(!((G|0)<(F|0)|((G|0)==(F|0)?E>>>0<(c[e>>2]|0)>>>0:0))){e=0;break}}}else e=0;while(0);if(!e)l=l+1|0;else break}c[y>>2]=i;c[h>>2]=e;if(!e)u=u+1|0;else{e=31;break}}if((e|0)==31){Ra=D;return}}else if((e|0)==31){Ra=D;return}}function hr(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;x=B+4|0;y=B;z=c[e>>2]|0;if(c[z+40>>2]|0){A=0;Ra=B;return A|0}v=(h|0)>0;if(!v){A=0;Ra=B;return A|0}i=0;j=0;k=0;while(1){if((c[g+(k*24|0)+12>>2]|0)==(f|0)){u=i+1|0;j=(c[g+(k*24|0)+16>>2]|0)+j|0}else u=i;k=k+1|0;if((k|0)==(h|0))break;else i=u}if((j|0)==0|(u|0)<2){A=0;Ra=B;return A|0}s=e+60|0;i=c[s>>2]|0;do if(!i){i=lr(z,x)|0;if(!i){r=c[x>>2]|0;q=(r|0)==0;if(q)l=mc(29576)|0;else{i=c[r+120>>2]|0;if((i|0)!=0?(b[r+144>>1]|0)!=0:0)j=r;else{i=c[r>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;j=r}l=mc(i)|0;i=c[j>>2]|0;k=r+40|0;j=c[k>>2]|0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&j;c[k>>2]=i}n=Lc(r,0)|0;p=l+n|0;j=a[l>>0]|0;i=j&255;do if(!(i&128)){k=1;i=j&255;o=0}else{t=d[l+1>>0]|0;i=t<<7|i&127;if(!(t&128)){k=2;o=0;break}t=d[l+2>>0]|0;i=t<<14|i&16383;if(!(t&128)){k=3;o=0;break}t=d[l+3>>0]|0;i=t<<21|i&2097151;if(!(t&128)){k=4;o=0;break}j=28;k=l+4|0;i=i&268435455;m=0;do{t=k;k=k+1|0;t=d[t>>0]|0;o=cw(t&127|0,0,j|0)|0;i=Sv(o|0,L()|0,i|0,m|0)|0;m=L()|0;j=j+7|0}while(j>>>0<64&((t&128|0)!=0|0!=0));k=k-l|0;o=m}while(0);if((k|0)<(n|0)){n=l+k|0;do{k=a[n>>0]|0;j=k&255;do if(!(j&128)){l=1;j=k&255;k=0}else{t=d[n+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;k=0;break}t=d[n+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;k=0;break}t=d[n+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;k=0;break}l=28;m=n+4|0;j=j&268435455;k=0;do{t=m;m=m+1|0;t=d[t>>0]|0;C=cw(t&127|0,0,l|0)|0;j=Sv(C|0,L()|0,j|0,k|0)|0;k=L()|0;l=l+7|0}while(l>>>0<64&((t&128|0)!=0|0!=0));l=m-n|0}while(0);n=n+l|0}while(n>>>0<p>>>0);if(!((i|0)==0&(o|0)==0|(j|0)==0&(k|0)==0)){p=e+64|0;c[p>>2]=i;c[p+4>>2]=o;o=Wv(j|0,k|0,i|0,o|0)|0;p=L()|0;t=c[z+240>>2]|0;C=((t|0)<0)<<31>>31;p=Sv(o|0,p|0,t|0,C|0)|0;C=Wv(p|0,L()|0,t|0,C|0)|0;L()|0;c[s>>2]=C;do if(!q){i=c[r>>2]|0;C=r+136|0;t=c[C+4>>2]|0;if((t|0)>0|(t|0)==0&(c[C>>2]|0)>>>0>0)hc(i,r);j=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;C=r+64|0;c[C>>2]=0;c[C+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}else i=0;while(0);t=c[s>>2]|0;break}}if(!q){i=c[r>>2]|0;C=r+136|0;A=c[C+4>>2]|0;if((A|0)>0|(A|0)==0&(c[C>>2]|0)>>>0>0)hc(i,r);C=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;A=r+64|0;c[A>>2]=0;c[A+4>>2]=0;if((C|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=267}else i=267}else i=267}C=i;Ra=B;return C|0}else{t=i;i=0}while(0);if(!((u|0)>0&(i|0)==0)){C=i;Ra=B;return C|0}s=u+-1|0;r=e+28|0;p=0;o=1;q=0;while(1){if(v){i=0;k=0;do{j=g+(k*24|0)|0;do if((c[g+(k*24|0)+8>>2]|0)!=0?(c[g+(k*24|0)+12>>2]|0)==(f|0):0){if(i|0?(c[g+(k*24|0)+16>>2]|0)>=(c[i+16>>2]|0):0)break;i=j}while(0);k=k+1|0}while((k|0)!=(h|0));m=i}else m=0;n=(q|0)==0;do if(n){o=o<<2;A=88}else{C=(o|0)/4|0;if((c[m+16>>2]|0)<(G((p+-1+C|0)/(C|0)|0,t)|0)){j=q>>>0<12?o<<2:o;if(!((q|0)==(s|0)?1:(c[(c[m>>2]|0)+64>>2]|0)<2)){o=j;A=88;break}i=0;l=j;k=p;j=m+8|0;break}j=m+8|0;n=c[j>>2]|0;m=c[m+20>>2]|0;do if(!(mb()|0)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;if(!i){i=7;break}}else{i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){C=c[14978]|0;e=Tv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&e>>>0<=C>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=7;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}c[i+12>>2]=0;c[i>>2]=n;c[i+8>>2]=c[r>>2];c[i+4>>2]=m;c[r>>2]=i;c[n+16>>2]=i;i=0}else i=7;while(0);l=n+20|0;br(c[l>>2]|0);c[l>>2]=0;l=o;k=p}while(0);if((A|0)==88){A=0;j=m+8|0;i=c[j>>2]|0;c[x>>2]=0;c[y>>2]=0;i=jr(z,i,c[m+20>>2]|0,x,y)|0;if(!i){i=kr(z,c[m>>2]|0,c[m+4>>2]|0,c[y>>2]|0,c[x>>2]|0)|0;if(!i){k=c[m>>2]|0;i=c[k>>2]|0;k=c[k+4>>2]|0;if((i|0)!=0?(w=i+k|0,(k|0)>0):0){k=0;do{do{C=i;i=i+1|0}while((a[C>>0]|0)<0);l=0;while(1){m=a[i>>0]|0;i=i+1|0;if(!(l<<24>>24|m))break;else l=m&128}k=k+1|0}while(i>>>0<w>>>0)}else k=0;i=0;k=n|(k|0)<(p|0)?k:p}else k=p}else k=p;l=o}c[j>>2]=0;q=q+1|0;if(!((q|0)<(u|0)&(i|0)==0))break;else{p=k;o=l}}Ra=B;return i|0}function ir(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!d)return;if(c[e>>2]|0)return;if((c[d>>2]|0)!=5){h=d+12|0;ir(b,c[h>>2]|0,e);f=d+16|0;ir(b,c[f>>2]|0,e);if(!(a[(c[h>>2]|0)+34>>0]|0))f=0;else f=(a[(c[f>>2]|0)+34>>0]|0)!=0&1;a[d+34>>0]=f;return}h=c[d+20>>2]|0;g=c[h+64>>2]|0;if(g|0){a:do if((g|0)>0){f=0;do{if(!(c[h+72+(f*24|0)+16>>2]|0))break a;f=f+1|0}while((f|0)<(g|0))}else f=0;while(0);a[d+34>>0]=(f|0)==(g|0)&1}d=pr(b,1,h)|0;c[e>>2]=d;return}function jr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+160|0;r=x+148|0;s=x+144|0;u=x+16|0;i=x;w=e+20|0;v=c[w>>2]|0;j=u;k=j+128|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[i+12>>2]=((c[e+12>>2]|0)==0?0:32)|((c[e+8>>2]|0)==0?3:11)|((c[b+24>>2]|0)>(f|0)?4:0);c[i+8>>2]=f;q=c[e>>2]|0;c[i>>2]=q;e=c[e+4>>2]|0;c[i+4>>2]=e;c[v+12>>2]=i;e=eq(b,v,q,e)|0;a:do if(!e){n=v+48|0;o=v+52|0;p=u+64|0;q=b+235|0;b:while(1){e=gq(b,v)|0;switch(e|0){case 0:break b;case 100:break;default:break a}m=c[n>>2]|0;f=c[o>>2]|0;e=c[u>>2]|0;c:do if(!e){e=nb(f+11|0)|0;c[u>>2]=e;c[p>>2]=f;if(!e)e=7;else{ew(e|0,m|0,f|0)|0;j=e+f|0;k=j+10|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));e=0}}else{l=0;j=m;i=u;while(1){k=u+64+(l<<2)|0;e=mr(d[q>>0]|0,j,f,e,c[k>>2]|0,r,s)|0;f=(j|0)==(m|0)|(j|0)==0;if(e|0){t=10;break}do if(!f)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);e=c[i>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[i>>2]=0;j=c[r>>2]|0;f=c[s>>2]|0;if((l|0)==15){t=23;break}l=l+1|0;if(l>>>0>=16){e=0;break c}i=u+(l<<2)|0;e=c[i>>2]|0;if(!e){t=8;break}}if((t|0)==8){t=0;c[i>>2]=j;c[u+64+(l<<2)>>2]=f;e=0;break}else if((t|0)==10){t=0;do if(!f)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{m=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);break}else if((t|0)==23){t=0;c[i>>2]=j;c[k>>2]=f;e=0;break}}while(0);if(e|0)break a}l=0;f=0;j=0;d:while(1){i=u+(l<<2)|0;k=c[i>>2]|0;do if(!k)e=j;else{if(!j){f=c[u+64+(l<<2)>>2]|0;c[i>>2]=0;e=k;break}e=mr(d[q>>0]|0,k,c[u+64+(l<<2)>>2]|0,j,f,s,r)|0;f=(c[7324]|0)==0;if(e|0)break d;if(f)ab[c[29344>>2]&127](k);else{b=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{b=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}c[i>>2]=0;f=c[r>>2]|0;e=c[s>>2]|0}while(0);l=l+1|0;if(l>>>0>=16){t=45;break}else j=e}if((t|0)==45){c[u>>2]=e;c[p>>2]=f;c[h>>2]=e;c[g>>2]=f;u=0;br(v);c[w>>2]=0;Ra=x;return u|0}if(f)ab[c[29344>>2]&127](j);else{t=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}}while(0);f=0;do{i=c[u+(f<<2)>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);f=f+1|0}while((f|0)!=16);br(v);c[w>>2]=0;Ra=x;return e|0}function kr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;M=Ra;Ra=Ra+16|0;F=M+8|0;G=M+4|0;H=M;do if(!g){i=c[e>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{K=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[e>>2]=0;c[e+4>>2]=0;j=0;i=e+44|0}else{i=e+44|0;j=c[i>>2]|0;if((j|0)<0){c[e>>2]=g;c[e+4>>2]=h;j=0;break}l=c[e>>2]|0;if(!l)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);j=0;break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);j=0;break}K=e+4|0;k=c[K>>2]|0;if((j|0)<(f|0)){D=f-j|0;m=k;J=l;l=g}else{D=j-f|0;m=h;J=g;h=k}E=l;p=a[b+235>>0]|0;A=J+m|0;B=l+h|0;c[F>>2]=J;c[G>>2]=l;C=p<<24>>24!=0;if(C){j=Sv(h|0,((h|0)<0)<<31>>31|0,10,0)|0;j=pb(j,L()|0)|0;if(!j){j=7;k=E}else{g=j;k=j;I=19}}else{g=l;k=E;I=19}do if((I|0)==19){c[H>>2]=g;if((m|0)>0){g=a[J>>0]|0;j=g&255;do if(!(j&128)){b=1;j=g&255;g=0}else{z=d[J+1>>0]|0;j=z<<7|j&127;if(!(z&128)){b=2;g=0;break}z=d[J+2>>0]|0;j=z<<14|j&16383;if(!(z&128)){b=3;g=0;break}z=d[J+3>>0]|0;j=z<<21|j&2097151;if(!(z&128)){b=4;g=0;break}g=28;b=J+4|0;j=j&268435455;m=0;do{z=b;b=b+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,g|0)|0;j=Sv(y|0,L()|0,j|0,m|0)|0;m=L()|0;g=g+7|0}while(g>>>0<64&((z&128|0)!=0|0!=0));b=b-J|0;g=m}while(0);o=J+b|0;n=g}else{o=0;j=0;n=0}c[F>>2]=o;if((h|0)>0){g=a[l>>0]|0;h=g&255;do if(!(h&128)){b=1;h=g&255;m=0}else{z=d[l+1>>0]|0;h=z<<7|h&127;if(!(z&128)){b=2;m=0;break}z=d[l+2>>0]|0;h=z<<14|h&16383;if(!(z&128)){b=3;m=0;break}z=d[l+3>>0]|0;h=z<<21|h&2097151;if(!(z&128)){b=4;m=0;break}g=28;b=l+4|0;h=h&268435455;m=0;do{z=b;b=b+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,g|0)|0;h=Sv(y|0,L()|0,h|0,m|0)|0;m=L()|0;g=g+7|0}while(g>>>0<64&((z&128|0)!=0|0!=0));b=b-E|0}while(0);g=l+b|0;c[G>>2]=g;if((o|0)!=0&(g|0)!=0){y=C?-1:1;z=C?-1:0;x=p<<24>>24==0;w=0;s=n;v=0;u=0;t=g;r=o;a:while(1){q=Tv(j|0,s|0,h|0,m|0)|0;q=Yv(q|0,L()|0,y|0,z|0)|0;g=L()|0;do if(!((q|0)==0&(g|0)==0))if((g|0)<0){n=r;g=0;while(1){b=a[n>>0]|0;q=n+1|0;if(!(g<<24>>24|b))break;else{n=q;g=b&128}}p=q;c[F>>2]=q;if(q>>>0>=A>>>0){I=85;break a}b=a[q>>0]|0;g=b&255;do if(!(g&128)){n=1;b=b&255;g=0}else{r=d[n+2>>0]|0;g=r<<7|g&127;if(!(r&128)){n=2;b=g;g=0;break}r=d[n+3>>0]|0;g=r<<14|g&16383;if(!(r&128)){n=3;b=g;g=0;break}r=d[n+4>>0]|0;b=r<<21|g&2097151;if(!(r&128)){n=4;g=0;break}o=28;n=n+5|0;b=b&268435455;g=0;do{r=n;n=n+1|0;r=d[r>>0]|0;N=cw(r&127|0,0,o|0)|0;b=Sv(N|0,L()|0,b|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((r&128|0)!=0|0!=0));n=n-p|0}while(0);p=q+n|0;c[F>>2]=p;o=Tv(0,0,b|0,g|0)|0;q=L()|0;j=Sv((x?b:o)|0,(x?g:q)|0,j|0,s|0)|0;q=w;o=t;n=L()|0;b=v;g=u;break}else{n=t;g=0;while(1){b=a[n>>0]|0;q=n+1|0;if(!(g<<24>>24|b))break;else{n=q;g=b&128}}p=q;c[G>>2]=q;if(q>>>0>=B>>>0){I=100;break a}b=a[q>>0]|0;g=b&255;do if(!(g&128)){n=1;b=b&255;g=0}else{N=d[n+2>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=g;g=0;break}N=d[n+3>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=g;g=0;break}N=d[n+4>>0]|0;b=N<<21|g&2097151;if(!(N&128)){n=4;g=0;break}o=28;n=n+5|0;b=b&268435455;g=0;do{N=n;n=n+1|0;N=d[N>>0]|0;t=cw(N&127|0,0,o|0)|0;b=Sv(t|0,L()|0,b|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((N&128|0)!=0|0!=0));n=n-p|0}while(0);o=q+n|0;c[G>>2]=o;p=Tv(0,0,b|0,g|0)|0;q=L()|0;h=Sv((x?b:p)|0,(x?g:q)|0,h|0,m|0)|0;q=w;p=r;n=s;m=L()|0;b=v;g=u;break}else{b=c[H>>2]|0;t=x|(w|0)==0;r=Tv(j|0,s|0,v|0,u|0)|0;N=L()|0;o=Tv(v|0,u|0,j|0,s|0)|0;q=L()|0;g=b;o=t?r:o;q=t?N:q;while(1){n=o&255;p=g+1|0;a[g>>0]=n|-128;o=bw(o|0,q|0,7)|0;q=L()|0;if((o|0)==0&(q|0)==0)break;else g=p}a[g>>0]=n&127;c[H>>2]=(c[H>>2]|0)+(p-b);if(!(or(H,D,0,1,F,G)|0)){c[H>>2]=b;q=w;t=v}else{q=1;t=j;u=s}p=c[F>>2]|0;if(p>>>0<A>>>0){b=a[p>>0]|0;g=b&255;do if(!(g&128)){n=1;g=b&255;b=0}else{N=d[p+1>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=0;break}N=d[p+2>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=0;break}N=d[p+3>>0]|0;g=N<<21|g&2097151;if(!(N&128)){n=4;b=0;break}n=28;o=p+4|0;g=g&268435455;b=0;do{N=o;o=o+1|0;N=d[N>>0]|0;w=cw(N&127|0,0,n|0)|0;g=Sv(w|0,L()|0,g|0,b|0)|0;b=L()|0;n=n+7|0}while(n>>>0<64&((N&128|0)!=0|0!=0));n=o-p|0}while(0);r=p+n|0;c[F>>2]=r;w=Tv(0,0,g|0,b|0)|0;N=L()|0;j=Sv((x?g:w)|0,(x?b:N)|0,j|0,s|0)|0;s=L()|0}else{c[F>>2]=0;r=0}p=c[G>>2]|0;if(p>>>0>=B>>>0){I=67;break a}b=a[p>>0]|0;g=b&255;do if(!(g&128)){n=1;g=b&255;b=0}else{N=d[p+1>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=0;break}N=d[p+2>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=0;break}N=d[p+3>>0]|0;g=N<<21|g&2097151;if(!(N&128)){n=4;b=0;break}n=28;o=p+4|0;g=g&268435455;b=0;do{N=o;o=o+1|0;N=d[N>>0]|0;w=cw(N&127|0,0,n|0)|0;g=Sv(w|0,L()|0,g|0,b|0)|0;b=L()|0;n=n+7|0}while(n>>>0<64&((N&128|0)!=0|0!=0));n=o-p|0}while(0);o=p+n|0;c[G>>2]=o;n=Tv(0,0,g|0,b|0)|0;p=L()|0;h=Sv((x?g:n)|0,(x?b:p)|0,h|0,m|0)|0;p=r;n=s;m=L()|0;b=t;g=u}while(0);if((o|0)!=0&(p|0)!=0){w=q;s=n;v=b;u=g;t=o;r=p}else break}if((I|0)==67)c[G>>2]=0;else if((I|0)==85)c[F>>2]=0;else if((I|0)==100)c[G>>2]=0;j=c[H>>2]|0}else j=k}else{c[G>>2]=0;j=k}h=j-k|0;if(C)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);j=0;break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);j=0;break}else{j=0;k=E}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](J);else{N=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-N;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J)}c[e>>2]=k;c[K>>2]=h}while(0);if((c[i>>2]|0)>=(f|0)){Ra=M;return j|0}c[i>>2]=f;Ra=M;return j|0}function lr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;f=l;h=l+8|0;i=d+144|0;k=c[i>>2]|0;c[h>>2]=k;g=k;if(!k){k=c[d+20>>2]|0;c[f>>2]=c[d+16>>2];c[f+4>>2]=k;f=Bb(52411,f)|0;if(!f){k=7;j=g;c[e>>2]=j;Ra=l;return k|0}d=qd(c[d+12>>2]|0,f,-1,133,0,h,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}f=c[h>>2]|0;c[i>>2]=f;if(!d)i=f;else{k=d;j=f;c[e>>2]=j;Ra=l;return k|0}}else i=g;k=i;do if(!(Vc(k,1)|0)){f=c[k+100>>2]|0;d=f+8|0;if(!(b[d>>1]&9216)){h=f;c[h>>2]=0;c[h+4>>2]=0;b[d>>1]=4;break}else{Pg(f,0,0);break}}while(0);if((Gc(k)|0)==100){if(i|0){f=c[k+120>>2]|0;if(!((f|0)!=0?(b[k+144>>1]|0)!=0:0)){f=c[k>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}g=b[f+8>>1]&15;f=c[k>>2]|0;h=k+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&d;c[h>>2]=f;if((g|16)<<16>>16==16){k=0;j=i;c[e>>2]=j;Ra=l;return k|0}else j=22}}else j=22;do if((j|0)==22?i|0:0){f=c[k>>2]|0;j=k+136|0;i=c[j+4>>2]|0;if((i|0)>0|(i|0)==0&(c[j>>2]|0)>>>0>0)hc(f,k);d=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;k=k+64|0;c[k>>2]=0;c[k+4>>2]=0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);k=7;j=0;c[e>>2]=j;Ra=l;return k|0}else{f=c[f+68>>2]&d;if(!f)break;else d=0;c[e>>2]=d;Ra=l;return f|0}}while(0);k=267;j=0;c[e>>2]=j;Ra=l;return k|0}function mr(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;y=C+8|0;z=C+4|0;A=C;w=e+f|0;x=g+h|0;c[y>>2]=e;c[z>>2]=g;c[i>>2]=0;c[j>>2]=0;l=Sv(f|0,((f|0)<0)<<31>>31|0,17,0)|0;l=Sv(l|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=pb(l,L()|0)|0;if(!l){B=7;Ra=C;return B|0}c[A>>2]=l;if((f|0)>0){k=a[e>>0]|0;f=k&255;do if(!(f&128)){m=1;f=k&255;k=0}else{v=d[e+1>>0]|0;f=v<<7|f&127;if(!(v&128)){m=2;k=0;break}v=d[e+2>>0]|0;f=v<<14|f&16383;if(!(v&128)){m=3;k=0;break}v=d[e+3>>0]|0;f=v<<21|f&2097151;if(!(v&128)){m=4;k=0;break}m=28;n=e+4|0;f=f&268435455;k=0;do{v=n;n=n+1|0;v=d[v>>0]|0;u=cw(v&127|0,0,m|0)|0;f=Sv(u|0,L()|0,f|0,k|0)|0;k=L()|0;m=m+7|0}while(m>>>0<64&((v&128|0)!=0|0!=0));m=n-e|0}while(0);p=k;o=e+m|0}else{f=0;p=0;o=0}c[y>>2]=o;if((h|0)>0){m=a[g>>0]|0;k=m&255;do if(!(k&128)){n=1;k=m&255;m=0}else{v=d[g+1>>0]|0;k=v<<7|k&127;if(!(v&128)){n=2;m=0;break}v=d[g+2>>0]|0;k=v<<14|k&16383;if(!(v&128)){n=3;m=0;break}v=d[g+3>>0]|0;k=v<<21|k&2097151;if(!(v&128)){n=4;m=0;break}n=28;e=g+4|0;k=k&268435455;m=0;do{v=e;e=e+1|0;v=d[v>>0]|0;u=cw(v&127|0,0,n|0)|0;k=Sv(u|0,L()|0,k|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((v&128|0)!=0|0!=0));n=e-g|0}while(0);e=m;m=g+n|0}else{k=0;e=0;m=0}c[z>>2]=m;n=(o|0)!=0;m=(m|0)!=0;a:do if(n|m){t=(b|0)==0;u=t?1:-1;v=t?0:-1;g=0;s=f;r=p;q=e;b=n;p=m;n=0;m=0;b:while(1){o=Tv(s|0,r|0,k|0,q|0)|0;o=Yv(o|0,L()|0,u|0,v|0)|0;f=L()|0;do if(!((o|0)==0&(f|0)==0&(b&p))){g=t|(g|0)==0;if((f|0)<0&b|p^1){p=Tv(s|0,r|0,n|0,m|0)|0;b=L()|0;o=Tv(n|0,m|0,s|0,r|0)|0;n=L()|0;h=c[A>>2]|0;e=h;o=g?p:o;n=g?b:n;while(1){f=o&255;m=e+1|0;a[e>>0]=f|-128;o=bw(o|0,n|0,7)|0;n=L()|0;if((o|0)==0&(n|0)==0)break;else e=m}a[e>>0]=f&127;n=(c[A>>2]|0)+(m-h)|0;c[A>>2]=n;e=c[y>>2]|0;h=e;f=0;while(1){m=a[h>>0]|0;g=h+1|0;if(!(f<<24>>24|m))break;else{h=g;f=m&128}}o=g;b=o-e|0;ew(n|0,e|0,b|0)|0;c[A>>2]=n+b;c[y>>2]=g;if(g>>>0>=w>>>0){c[y>>2]=0;o=s;f=r;e=k;h=q;n=s;m=r;break}m=a[g>>0]|0;f=m&255;do if(!(f&128)){n=1;m=m&255;f=0}else{b=d[h+2>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=f;f=0;break}b=d[h+3>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=f;f=0;break}b=d[h+4>>0]|0;m=b<<21|f&2097151;if(!(b&128)){n=4;f=0;break}e=28;n=h+5|0;m=m&268435455;f=0;do{b=n;n=n+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,e|0)|0;m=Sv(p|0,L()|0,m|0,f|0)|0;f=L()|0;e=e+7|0}while(e>>>0<64&((b&128|0)!=0|0!=0));n=n-o|0}while(0);c[y>>2]=g+n;e=Tv(0,0,m|0,f|0)|0;o=L()|0;o=Sv((t?m:e)|0,(t?f:o)|0,s|0,r|0)|0;f=L()|0;e=k;h=q;n=s;m=r;break}else{p=Tv(k|0,q|0,n|0,m|0)|0;b=L()|0;o=Tv(n|0,m|0,k|0,q|0)|0;n=L()|0;h=c[A>>2]|0;e=h;o=g?p:o;n=g?b:n;while(1){f=o&255;m=e+1|0;a[e>>0]=f|-128;o=bw(o|0,n|0,7)|0;n=L()|0;if((o|0)==0&(n|0)==0)break;else e=m}a[e>>0]=f&127;n=(c[A>>2]|0)+(m-h)|0;c[A>>2]=n;e=c[z>>2]|0;h=e;f=0;while(1){m=a[h>>0]|0;g=h+1|0;if(!(f<<24>>24|m))break;else{h=g;f=m&128}}o=g;b=o-e|0;ew(n|0,e|0,b|0)|0;c[A>>2]=n+b;c[z>>2]=g;if(g>>>0>=x>>>0){c[z>>2]=0;o=s;f=r;e=k;h=q;n=k;m=q;break}m=a[g>>0]|0;f=m&255;do if(!(f&128)){n=1;m=m&255;f=0}else{b=d[h+2>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=f;f=0;break}b=d[h+3>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=f;f=0;break}b=d[h+4>>0]|0;m=b<<21|f&2097151;if(!(b&128)){n=4;f=0;break}e=28;n=h+5|0;m=m&268435455;f=0;do{b=n;n=n+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,e|0)|0;m=Sv(p|0,L()|0,m|0,f|0)|0;f=L()|0;e=e+7|0}while(e>>>0<64&((b&128|0)!=0|0!=0));n=n-o|0}while(0);c[z>>2]=g+n;o=Tv(0,0,m|0,f|0)|0;e=L()|0;e=Sv((t?m:o)|0,(t?f:e)|0,k|0,q|0)|0;o=s;f=r;h=L()|0;n=k;m=q;break}}else{p=t|(g|0)==0;g=Tv(s|0,r|0,n|0,m|0)|0;b=L()|0;e=Tv(n|0,m|0,s|0,r|0)|0;o=L()|0;m=c[A>>2]|0;f=m;e=p?g:e;o=p?b:o;while(1){n=e&255;h=f+1|0;a[f>>0]=n|-128;e=bw(e|0,o|0,7)|0;o=L()|0;if((e|0)==0&(o|0)==0)break;else f=h}a[f>>0]=n&127;c[A>>2]=(c[A>>2]|0)+(h-m);f=nr(A,y,z)|0;if(f|0)break b;h=c[y>>2]|0;if(h>>>0<w>>>0){m=a[h>>0]|0;f=m&255;do if(!(f&128)){n=1;f=m&255;m=0}else{b=d[h+1>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=0;break}b=d[h+2>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=0;break}b=d[h+3>>0]|0;f=b<<21|f&2097151;if(!(b&128)){n=4;m=0;break}n=28;e=h+4|0;f=f&268435455;m=0;do{b=e;e=e+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,n|0)|0;f=Sv(p|0,L()|0,f|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((b&128|0)!=0|0!=0));n=e-h|0}while(0);c[y>>2]=h+n;g=Tv(0,0,f|0,m|0)|0;o=L()|0;o=Sv((t?f:g)|0,(t?m:o)|0,s|0,r|0)|0;g=L()|0}else{c[y>>2]=0;o=s;g=r}h=c[z>>2]|0;if(h>>>0>=x>>>0){c[z>>2]=0;f=g;e=k;h=q;n=s;m=r;break}m=a[h>>0]|0;f=m&255;do if(!(f&128)){n=1;f=m&255;m=0}else{b=d[h+1>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=0;break}b=d[h+2>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=0;break}b=d[h+3>>0]|0;f=b<<21|f&2097151;if(!(b&128)){n=4;m=0;break}n=28;e=h+4|0;f=f&268435455;m=0;do{b=e;e=e+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,n|0)|0;f=Sv(p|0,L()|0,f|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((b&128|0)!=0|0!=0));n=e-h|0}while(0);c[z>>2]=h+n;h=Tv(0,0,f|0,m|0)|0;e=L()|0;e=Sv((t?f:h)|0,(t?m:e)|0,k|0,q|0)|0;f=g;h=L()|0;n=s;m=r}while(0);b=(c[y>>2]|0)!=0;p=(c[z>>2]|0)!=0;if(!(b|p)){B=104;break a}else{g=1;s=o;r=f;k=e;q=h}}if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{z=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}c[A>>2]=0;l=0;k=0}else B=104;while(0);if((B|0)==104){k=c[A>>2]|0;f=k;B=f;a[B>>0]=0;a[B+1>>0]=0;a[B+2>>0]=0;a[B+3>>0]=0;f=f+4|0;a[f>>0]=0;a[f+1>>0]=0;a[f+2>>0]=0;a[f+3>>0]=0;f=0}c[i>>2]=l;c[j>>2]=k-l;B=f;Ra=C;return B|0}function nr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;g=c[f>>2]|0;p=c[e>>2]|0;h=c[b>>2]|0;a:while(1){r=h;q=p;n=a[q>>0]|0;switch(n<<24>>24){case 0:{if(!(a[g>>0]|0)){i=123;break a}else i=2147483647;break}case 1:{j=a[q+1>>0]|0;i=j&255;if(i&128){y=d[q+2>>0]|0;i=y<<7|j&127;if(y&128){y=d[q+3>>0]|0;i=y<<14|i&16383;if(y&128){y=d[q+4>>0]|0;i=y<<21|i&2097151;if(y&128)i=(a[q+5>>0]&7)<<28|i&268435455}}}if(!i){g=267;i=124;break a}break}default:i=0}o=g;l=a[o>>0]|0;switch(l<<24>>24){case 1:{k=a[o+1>>0]|0;j=k&255;if(j&128){y=d[o+2>>0]|0;j=y<<7|k&127;if(y&128){y=d[o+3>>0]|0;j=y<<14|j&16383;if(y&128){y=d[o+4>>0]|0;j=y<<21|j&2097151;if(y&128)j=(a[o+5>>0]&7)<<28|j&268435455}}}if(!j){g=267;i=124;break a}else m=j;break}case 0:{m=2147483647;break}default:m=0}do if((i|0)!=(m|0))if((i|0)<(m|0)){if(!i){h=0;l=r;i=n}else{l=r+1|0;k=l;m=i;j=((i|0)<0)<<31>>31;while(1){h=m&255;i=k+1|0;a[k>>0]=h|-128;m=bw(m|0,j|0,7)|0;j=L()|0;if((m|0)==0&(j|0)==0)break;else k=i}a[k>>0]=h&127;i=i-l+1|0;a[r>>0]=1;h=i;l=r+i|0;i=a[q+i>>0]|0}j=q+h|0;k=j;i=i<<24>>24;if(!(i&254))h=k;else{h=j;do{h=h+1|0;y=i;i=a[h>>0]|0}while((i&254|y&128|0)!=0)}y=h-k|0;ew(l|0,j|0,y|0)|0;i=h;h=l+y|0;break}else{if(!m){g=0;k=r;h=l}else{k=r+1|0;j=k;l=m;i=((m|0)<0)<<31>>31;while(1){g=l&255;h=j+1|0;a[j>>0]=g|-128;l=bw(l|0,i|0,7)|0;i=L()|0;if((l|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;h=h-k+1|0;a[r>>0]=1;g=h;k=r+h|0;h=a[o+h>>0]|0}i=o+g|0;j=i;h=h<<24>>24;if(!(h&254))g=j;else{g=i;do{g=g+1|0;y=h;h=a[g>>0]|0}while((h&254|y&128|0)!=0)}h=g-j|0;ew(k|0,i|0,h|0)|0;i=p;h=k+h|0;break}else{if(!i){g=0;i=n}else{k=r+1|0;j=k;l=i;i=((i|0)<0)<<31>>31;while(1){g=l&255;h=j+1|0;a[j>>0]=g|-128;l=bw(l|0,i|0,7)|0;i=L()|0;if((l|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;i=h-k+1|0;a[r>>0]=1;g=i;h=r+i|0;i=a[q+i>>0]|0}m=q+g|0;l=m;q=o+g|0;p=q;g=i&255;do if(!(g&128)){j=1;o=i&255;n=0}else{y=d[m+1>>0]|0;g=y<<7|g&127;if(!(y&128)){j=2;o=g;n=0;break}y=d[m+2>>0]|0;g=y<<14|g&16383;if(!(y&128)){j=3;o=g;n=0;break}y=d[m+3>>0]|0;g=y<<21|g&2097151;if(!(y&128)){j=4;o=g;n=0;break}i=28;j=m+4|0;g=g&268435455;k=0;do{y=j;j=j+1|0;y=d[y>>0]|0;x=cw(y&127|0,0,i|0)|0;g=Sv(x|0,L()|0,g|0,k|0)|0;k=L()|0;i=i+7|0}while(i>>>0<64&((y&128|0)!=0|0!=0));j=j-l|0;o=g;n=k}while(0);i=m+j|0;j=a[q>>0]|0;g=j&255;do if(!(g&128)){k=1;j=j&255;l=0}else{y=d[q+1>>0]|0;g=y<<7|g&127;if(!(y&128)){k=2;j=g;l=0;break}y=d[q+2>>0]|0;g=y<<14|g&16383;if(!(y&128)){k=3;j=g;l=0;break}y=d[q+3>>0]|0;g=y<<21|g&2097151;if(!(y&128)){k=4;j=g;l=0;break}j=28;k=q+4|0;g=g&268435455;l=0;do{y=k;k=k+1|0;y=d[y>>0]|0;x=cw(y&127|0,0,j|0)|0;g=Sv(x|0,L()|0,g|0,l|0)|0;l=L()|0;j=j+7|0}while(j>>>0<64&((y&128|0)!=0|0!=0));k=k-p|0;j=g}while(0);g=q+k|0;y=n;x=o;t=j;u=0;v=0;while(1){q=(y|0)<(l|0)|(y|0)==(l|0)&x>>>0<t>>>0;r=q?x:t;s=q?y:l;p=h;m=Tv(r|0,s|0,u|0,v|0)|0;j=p;o=L()|0;while(1){k=m&255;n=j+1|0;a[j>>0]=k|-128;m=bw(m|0,o|0,7)|0;o=L()|0;if((m|0)==0&(o|0)==0)break;else j=n}a[j>>0]=k&127;w=p+(n-h)|0;h=w;u=Sv(r|0,s|0,-2,-1)|0;v=L()|0;do if((x|0)==(t|0)&(y|0)==(l|0)){n=i;k=a[n>>0]|0;if((k&255)>1){j=k&255;do if(!(j&128)){l=1;j=k&255;i=0}else{t=d[n+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;i=0;break}t=d[n+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;i=0;break}t=d[n+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;i=0;break}k=28;l=n+4|0;j=j&268435455;m=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;j=Sv(s|0,L()|0,j|0,m|0)|0;m=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));l=l-i|0;i=m}while(0);m=Sv(x|0,y|0,-2,-1)|0;m=Sv(m|0,L()|0,j|0,i|0)|0;i=n+l|0;p=L()|0}else{m=2147483647;p=0}o=g;k=a[o>>0]|0;if((k&255)>1){j=k&255;do if(!(j&128)){l=1;j=k&255;g=0}else{t=d[o+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;g=0;break}t=d[o+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;g=0;break}t=d[o+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;g=0;break}k=28;l=o+4|0;j=j&268435455;n=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;j=Sv(s|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));l=l-g|0;g=n}while(0);k=Sv(x|0,y|0,-2,-1)|0;k=Sv(k|0,L()|0,j|0,g|0)|0;g=o+l|0;j=p;l=L()|0}else{j=p;k=2147483647;l=0}}else if(q){o=i;k=a[o>>0]|0;if((k&255)<=1){m=2147483647;j=0;k=t;break}j=k&255;do if(!(j&128)){m=1;j=k&255;i=0}else{s=d[o+1>>0]|0;j=s<<7|j&127;if(!(s&128)){m=2;i=0;break}s=d[o+2>>0]|0;j=s<<14|j&16383;if(!(s&128)){m=3;i=0;break}s=d[o+3>>0]|0;j=s<<21|j&2097151;if(!(s&128)){m=4;i=0;break}k=28;m=o+4|0;j=j&268435455;n=0;do{s=m;m=m+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((s&128|0)!=0|0!=0));m=m-i|0;i=n}while(0);k=Sv(x|0,y|0,-2,-1)|0;j=Sv(k|0,L()|0,j|0,i|0)|0;i=o+m|0;m=j;j=L()|0;k=t;break}else{o=g;k=a[o>>0]|0;if((k&255)<=1){m=x;j=y;k=2147483647;l=0;break}j=k&255;do if(!(j&128)){m=1;j=k&255;g=0}else{s=d[o+1>>0]|0;j=s<<7|j&127;if(!(s&128)){m=2;g=0;break}s=d[o+2>>0]|0;j=s<<14|j&16383;if(!(s&128)){m=3;g=0;break}s=d[o+3>>0]|0;j=s<<21|j&2097151;if(!(s&128)){m=4;g=0;break}k=28;m=o+4|0;j=j&268435455;n=0;do{s=m;m=m+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((s&128|0)!=0|0!=0));m=m-g|0;g=n}while(0);k=Sv(t|0,l|0,-2,-1)|0;k=Sv(k|0,L()|0,j|0,g|0)|0;g=o+m|0;m=x;j=y;l=L()|0;break}while(0);if(!((m|0)!=2147483647|(j|0)!=0|((k|0)!=2147483647|(l|0)!=0))){h=w;break}else{y=j;x=m;t=k}}}while(0);p=i}if((i|0)==123){y=h;a[y>>0]=0;c[b>>2]=y+1;c[e>>2]=p+1;c[f>>2]=g+1;f=0;return f|0}else if((i|0)==124)return g|0;return 0}function or(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;j=c[b>>2]|0;k=c[h>>2]|0;n=c[i>>2]|0;m=k;if((a[m>>0]|0)==1){o=m+1|0;l=a[o>>0]|0;k=l&255;if(k&128){D=d[m+2>>0]|0;k=D<<7|l&127;if(D&128){D=d[m+3>>0]|0;k=D<<14|k&16383;if(D&128){D=d[m+4>>0]|0;k=D<<21|k&2097151;if(!(D&128))l=4;else{k=(a[m+5>>0]&7)<<28|k&268435455;l=5}}else l=3}else l=2}else l=1;p=k;k=o+l|0}else p=0;o=n;if((a[o>>0]|0)==1){n=o+1|0;m=a[n>>0]|0;l=m&255;if(l&128){D=d[o+2>>0]|0;l=D<<7|m&127;if(D&128){D=d[o+3>>0]|0;l=D<<14|l&16383;if(D&128){D=d[o+4>>0]|0;l=D<<21|l&2097151;if(!(D&128))m=4;else{l=(a[o+5>>0]&7)<<28|l&268435455;m=5}}else m=3}else m=2}else m=1;n=n+m|0}else l=0;C=((e|0)<0)<<31>>31;D=(f|0)==0;B=(f|0)!=0;A=(g|0)!=0;m=p;a:while(1){b:while(1){while(1){if((m|0)==(l|0))break b;if((m|0)<(l|0))break;l=a[n>>0]|0;o=l<<24>>24;if(o&254)do{n=n+1|0;l=a[n>>0]|0;z=o;o=l<<24>>24}while((o&254|z&128|0)!=0);if(!(l<<24>>24)){l=123;break a}p=n+1|0;o=a[p>>0]|0;l=o&255;if(l&128){z=d[n+2>>0]|0;l=z<<7|o&127;if(z&128){z=d[n+3>>0]|0;l=z<<14|l&16383;if(z&128){z=d[n+4>>0]|0;l=z<<21|l&2097151;if(!(z&128))n=4;else{l=(a[n+5>>0]&7)<<28|l&268435455;n=5}}else n=3}else n=2}else n=1;n=p+n|0}m=a[k>>0]|0;o=m<<24>>24;if(o&254)do{k=k+1|0;m=a[k>>0]|0;z=o;o=m<<24>>24}while((o&254|z&128|0)!=0);if(!(m<<24>>24)){l=124;break a}p=k+1|0;o=a[p>>0]|0;m=o&255;if(m&128){z=d[k+2>>0]|0;m=z<<7|o&127;if(z&128){z=d[k+3>>0]|0;m=z<<14|m&16383;if(z&128){z=d[k+4>>0]|0;m=z<<21|m&2097151;if(!(z&128))k=4;else{m=(a[k+5>>0]&7)<<28|m&268435455;k=5}}else k=3}else k=2}else k=1;k=p+k|0}t=j;if(m){a[t>>0]=1;o=t+1|0;p=m;m=((m|0)<0)<<31>>31;while(1){l=p&255;j=o+1|0;a[o>>0]=l|-128;p=bw(p|0,m|0,7)|0;m=L()|0;if((p|0)==0&(m|0)==0)break;else o=j}a[o>>0]=l&127}f=k;m=a[f>>0]|0;l=m&255;do if(!(l&128)){k=1;l=m&255;p=0}else{z=d[f+1>>0]|0;l=z<<7|l&127;if(!(z&128)){k=2;p=0;break}z=d[f+2>>0]|0;l=z<<14|l&16383;if(!(z&128)){k=3;p=0;break}z=d[f+3>>0]|0;l=z<<21|l&2097151;if(!(z&128)){k=4;p=0;break}m=28;o=f+4|0;l=l&268435455;p=0;do{z=o;o=o+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,m|0)|0;l=Sv(y|0,L()|0,l|0,p|0)|0;p=L()|0;m=m+7|0}while(m>>>0<64&((z&128|0)!=0|0!=0));k=o-k|0}while(0);k=f+k|0;r=Sv(l|0,p|0,-2,-1)|0;s=L()|0;q=n;o=a[q>>0]|0;m=o&255;do if(!(m&128)){n=1;g=0;m=o&255}else{z=d[q+1>>0]|0;m=z<<7|m&127;if(!(z&128)){n=2;g=0;break}z=d[q+2>>0]|0;m=z<<14|m&16383;if(!(z&128)){n=3;g=0;break}z=d[q+3>>0]|0;m=z<<21|m&2097151;if(!(z&128)){n=4;g=0;break}o=28;f=q+4|0;m=m&268435455;g=0;do{z=f;f=f+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,o|0)|0;m=Sv(y|0,L()|0,m|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((z&128|0)!=0|0!=0));n=f-n|0}while(0);n=q+n|0;if((p|0)<0|(p|0)==0&l>>>0<2|((g|0)<0|(g|0)==0&m>>>0<2)){l=120;break}l=Sv(m|0,g|0,-2,-1)|0;f=t;z=r;o=0;p=0;m=L()|0;c:while(1){w=k;u=Sv(z|0,s|0,e|0,C|0)|0;v=L()|0;x=l;y=m;l=p;while(1){if(!((x|0)==(u|0)&(y|0)==(v|0))?(y|0)>(v|0)|(y|0)==(v|0)&x>>>0>u>>>0|(A|((y|0)<(s|0)|(y|0)==(s|0)&x>>>0<=z>>>0)):0){t=f;q=o;r=l}else{q=D?x:z;r=D?y:s;g=j;o=Tv(2,0,o|0,l|0)|0;o=Sv(o|0,L()|0,q|0,r|0)|0;l=g;p=L()|0;while(1){m=o&255;f=l+1|0;a[l>>0]=m|-128;o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else l=f}a[l>>0]=m&127;t=0;j=g+(f-j)|0}if(((y|0)>(s|0)|(y|0)==(s|0)&x>>>0>z>>>0)&(B|((y|0)>(v|0)|(y|0)==(v|0)&x>>>0>u>>>0)))break;g=n;m=a[g>>0]|0;if((m&255)<2)break c;l=m&255;do if(!(l&128)){n=1;l=m&255;m=0}else{f=d[g+1>>0]|0;l=f<<7|l&127;if(!(f&128)){n=2;m=0;break}f=d[g+2>>0]|0;l=f<<14|l&16383;if(!(f&128)){n=3;m=0;break}f=d[g+3>>0]|0;l=f<<21|l&2097151;if(!(f&128)){n=4;m=0;break}o=28;p=g+4|0;l=l&268435455;m=0;do{f=p;p=p+1|0;f=d[f>>0]|0;E=cw(f&127|0,0,o|0)|0;l=Sv(E|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((f&128|0)!=0|0!=0));n=p-n|0}while(0);o=Sv(x|0,y|0,-2,-1)|0;o=Sv(o|0,L()|0,l|0,m|0)|0;f=t;n=g+n|0;x=o;y=L()|0;o=q;l=r}m=a[k>>0]|0;if((m&255)<2)break;l=m&255;do if(!(l&128)){o=1;l=m&255;m=0}else{E=d[k+1>>0]|0;l=E<<7|l&127;if(!(E&128)){o=2;m=0;break}E=d[k+2>>0]|0;l=E<<14|l&16383;if(!(E&128)){o=3;m=0;break}E=d[k+3>>0]|0;l=E<<21|l&2097151;if(!(E&128)){o=4;m=0;break}o=28;p=k+4|0;l=l&268435455;m=0;do{E=p;p=p+1|0;E=d[E>>0]|0;v=cw(E&127|0,0,o|0)|0;l=Sv(v|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((E&128|0)!=0|0!=0));o=p-w|0}while(0);p=Sv(z|0,s|0,-2,-1)|0;p=Sv(p|0,L()|0,l|0,m|0)|0;f=t;k=k+o|0;z=p;s=L()|0;o=q;p=r;l=x;m=y}j=(t|0)==0?j:t;l=a[k>>0]|0;m=l<<24>>24;if(!(m&254))o=l;else{do{k=k+1|0;l=a[k>>0]|0;E=m;m=l<<24>>24}while((m&254|E&128|0)!=0);o=l}l=a[n>>0]|0;m=l<<24>>24;if(m&254)do{n=n+1|0;l=a[n>>0]|0;E=m;m=l<<24>>24}while((m&254|E&128|0)!=0);if(!(o<<24>>24)){l=122;break}if(!(l<<24>>24)){l=121;break}o=k+1|0;l=a[o>>0]|0;m=l&255;if(m&128){E=d[k+2>>0]|0;l=E<<7|l&127;if(E&128){E=d[k+3>>0]|0;l=E<<14|l&16383;if(E&128){E=d[k+4>>0]|0;l=E<<21|l&2097151;if(!(E&128)){m=l;k=4}else{m=(a[k+5>>0]&7)<<28|l&268435455;k=5}}else{m=l;k=3}}else{m=l;k=2}}else k=1;k=o+k|0;p=n+1|0;o=a[p>>0]|0;l=o&255;if(l&128){E=d[n+2>>0]|0;l=E<<7|o&127;if(E&128){E=d[n+3>>0]|0;l=E<<14|l&16383;if(E&128){E=d[n+4>>0]|0;l=E<<21|l&2097151;if(!(E&128))n=4;else{l=(a[n+5>>0]&7)<<28|l&268435455;n=5}}else n=3}else n=2}else n=1;n=p+n|0}l=0;while(1){m=a[n>>0]|0;n=n+1|0;if(!(l<<24>>24|m))break;else l=m&128}l=0;while(1){m=a[k>>0]|0;k=k+1|0;if(!(l<<24>>24|m))break;else l=m&128}c[h>>2]=k;c[i>>2]=n;if((c[b>>2]|0)==(j|0)){E=0;return E|0}a[j>>0]=0;c[b>>2]=j+1;E=1;return E|0}function pr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;z=C+4|0;A=C;B=c[b>>2]|0;a:do if(((e|0)!=0?(a[b+52>>0]|0)==(a[B+235>>0]|0):0)?((c[f+64>>2]|0)+-1|0)>>>0<4:0){v=f+64|0;h=c[v>>2]|0;if((h|0)>0){e=0;g=0;do{if(c[f+72+(e*24|0)+12>>2]|0){y=v;break a}b=c[f+72+(e*24|0)+20>>2]|0;if(b){if(!(c[b+36>>2]|0)){y=v;break a}}else b=0;g=(b|0)==0?g:1;e=e+1|0}while((e|0)<(h|0));if(g){u=c[f+68>>2]|0;u=(u|0)<(c[B+24>>2]|0)?u:-1;t=B+235|0;if((h|0)<=0){B=0;z=1;A=f+40|0;c[A>>2]=z;Ra=C;return B|0}q=0;b:while(1){r=c[f+72+(q*24|0)+20>>2]|0;if(r|0){e=c[f+72+(q*24|0)>>2]|0;g=c[f+72+(q*24|0)+4>>2]|0;h=c[r+4>>2]|0;s=(a[t>>0]|0)==0?157:158;b=eq(B,r,e,g)|0;if(b|0){e=1;k=74;break}do if((h|0)>0){j=c[r>>2]|0;i=0;while(1){b=c[j+(i<<2)>>2]|0;if(!(c[b+40>>2]|0)){k=23;break}o=c[b+60>>2]|0;p=Lu(c[b+64>>2]|0,e,(o|0)>(g|0)?g:o)|0;if(((p|0)==0?o-g|0:p)|0){k=23;break}x=i+1|0;if((x|0)<(h|0))i=x;else{k=22;break}}if((k|0)==22){w=r+8|0;c[w>>2]=x}else if((k|0)==23){b=r+8|0;c[b>>2]=i;if(!i)break;else w=b}p=0;k=j;while(1){o=c[k+(p<<2)>>2]|0;if((a[t>>0]|0)!=0?(c[o+56>>2]|0)!=0:0){a[z>>0]=0;m=o+88|0;n=m;c[n>>2]=0;c[n+4>>2]=0;n=o+84|0;c[n>>2]=0;kq(0,c[o+72>>2]|0,c[o+76>>2]|0,o+80|0,m,n,z)}else{l=o+72|0;j=o+40|0;m=o+52|0;b=c[m>>2]|0;c:do if(b|0){k=(c[l>>2]|0)+10|0;n=o+48|0;i=o+44|0;e=c[n>>2]|0;h=b;while(1){b=c[j>>2]|0;if((k-b|0)<=(e|0))break c;g=(c[i>>2]|0)-e|0;g=(g|0)<4096?g:4096;b=jd(h,b+e|0,g,e,81)|0;if(b|0){e=1;k=74;break b}b=(c[n>>2]|0)+g|0;c[n>>2]=b;b=(c[j>>2]|0)+b|0;e=b+20|0;do{a[b>>0]=0;b=b+1|0}while((b|0)<(e|0));e=c[n>>2]|0;h=c[m>>2]|0;if((e|0)==(c[i>>2]|0))break;if(!h)break c}d:do if(h|0){b=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;do if(b|0){if(c[b+480>>2]|0){Xd(b,h);break d}e=h;if((c[b+304>>2]|0)>>>0>e>>>0)break;if((c[b+308>>2]|0)>>>0<=e>>>0)break;k=b+300|0;c[h>>2]=c[k>>2];c[k>>2]=h;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{k=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[m>>2]=0;c[n>>2]=0}while(0);j=c[l>>2]|0;i=o+88|0;b=a[j>>0]|0;e=b&255;do if(!(e&128)){n=i;c[n>>2]=b&255;c[n+4>>2]=0;b=1}else{n=d[j+1>>0]|0;b=n<<7|e&127;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=2;break}n=d[j+2>>0]|0;b=n<<14|b&16383;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=3;break}n=d[j+3>>0]|0;b=n<<21|b&2097151;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=4;break}g=28;h=j+4|0;b=b&268435455;e=0;do{n=h;h=h+1|0;n=d[n>>0]|0;m=cw(n&127|0,0,g|0)|0;b=Sv(m|0,L()|0,b|0,e|0)|0;e=L()|0;g=g+7|0}while(g>>>0<64&((n&128|0)!=0|0!=0));n=i;c[n>>2]=b;c[n+4>>2]=e;b=h-j|0}while(0);c[o+80>>2]=j+b}b=p+1|0;k=c[r>>2]|0;if((b|0)>=(c[w>>2]|0))break;else p=b}if(p|0){g=p;do{h=g;g=g+-1|0;e:do if((h|0)<=(p|0)){b=g;j=c[k+(g<<2)>>2]|0;do{e=b;b=b+1|0;i=k+(b<<2)|0;if((Xa[s&255](j,c[i>>2]|0)|0)<0)break e;o=k+(e<<2)|0;n=c[i>>2]|0;j=c[o>>2]|0;c[i>>2]=j;c[o>>2]=n}while((b|0)<(p|0))}while(0)}while((h|0)>1)}}else c[r+8>>2]=0;while(0);c[r+24>>2]=u}q=q+1|0;if((q|0)>=(c[v>>2]|0)){b=0;e=1;k=74;break}}if((k|0)==74){B=f+40|0;c[B>>2]=e;Ra=C;return b|0}}else y=v}else y=v}else k=4;while(0);if((k|0)==4)y=f+64|0;g=f+68|0;e=0;while(1){if((e|0)>=(c[y>>2]|0)){b=0;e=0;k=74;break}if(!(c[f+72+(e*24|0)+20>>2]|0))b=0;else{c[z>>2]=0;c[A>>2]=0;b=jr(B,f+72+(e*24|0)|0,c[g>>2]|0,z,A)|0;if(!b)b=kr(B,f,e,c[A>>2]|0,c[z>>2]|0)|0}if(!b)e=e+1|0;else{e=0;k=74;break}}if((k|0)==74){B=f+40|0;c[B>>2]=e;Ra=C;return b|0}return 0}function qr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+112|0;B=F+108|0;x=F;y=F+104|0;z=F+100|0;A=F+96|0;if(c[e>>2]|0){Ra=F;return}h=b+52|0;q=a[h>>0]|0;a[d+33>>0]=1;switch(c[d>>2]|0){case 3:case 1:{n=c[d+12>>2]|0;m=c[d+16>>2]|0;if(a[n+34>>0]|0){qr(b,m,e);D=m+24|0;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=a[m+32>>0]|0;Ra=F;return}D=(a[m+34>>0]|0)==0;qr(b,n,e);if(!D){D=n+24|0;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=a[n+32>>0]|0;Ra=F;return}qr(b,m,e);o=n+32|0;a:do if(!(a[o>>0]|0)){l=m+32|0;h=q<<24>>24==0;g=h?1:-1;h=h?0:-1;f=n+24|0;i=m+24|0;while(1){j=a[l>>0]|0;if(j<<24>>24)break;if(c[e>>2]|0)break;k=f;D=i;D=Tv(c[k>>2]|0,c[k+4>>2]|0,c[D>>2]|0,c[D+4>>2]|0)|0;D=Yv(D|0,L()|0,g|0,h|0)|0;k=L()|0;if((D|0)==0&(k|0)==0)break;if((k|0)<0)qr(b,n,e);else qr(b,m,e);if(a[o>>0]|0){E=17;break a}}C=f;D=c[C+4>>2]|0;f=d+24|0;c[f>>2]=c[C>>2];c[f+4>>2]=D;f=j<<24>>24!=0&1}else{f=n+24|0;E=17}while(0);if((E|0)==17){D=f;E=c[D+4>>2]|0;f=d+24|0;c[f>>2]=c[D>>2];c[f+4>>2]=E;f=1}a[d+32>>0]=f;if(f<<24>>24==0|(c[d>>2]|0)!=1){Ra=F;return}f=c[m+20>>2]|0;b:do if(c[f>>2]|0?(r=m+32|0,(c[e>>2]|0)==0):0){g=f+28|0;f=f+32|0;do{if(a[r>>0]|0)break b;gw(c[g>>2]|0,0,c[f>>2]|0)|0;qr(b,m,e)}while(!(c[e>>2]|0))}while(0);f=c[n+20>>2]|0;if(!f){Ra=F;return}if(!(c[f>>2]|0)){Ra=F;return}if(c[e>>2]|0){Ra=F;return}g=f+28|0;f=f+32|0;while(1){if(a[o>>0]|0){E=120;break}gw(c[g>>2]|0,0,c[f>>2]|0)|0;qr(b,n,e);if(c[e>>2]|0){E=120;break}}if((E|0)==120){Ra=F;return}break}case 4:{h=c[d+12>>2]|0;i=c[d+16>>2]|0;m=q<<24>>24==0;l=m?1:-1;m=m?0:-1;k=h+24|0;g=k;j=i+24|0;f=j;f=Tv(c[g>>2]|0,c[g+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;f=Yv(f|0,L()|0,l|0,m|0)|0;g=L()|0;n=i+32|0;o=h+32|0;do if((a[n>>0]|0)==0?(p=a[o>>0]|0,!((g|0)<0&p<<24>>24==0)):0)if((g|0)>0|(g|0)==0&f>>>0>0|p<<24>>24!=0){qr(b,i,e);break}else{qr(b,h,e);qr(b,i,e);break}else E=33;while(0);if((E|0)==33)qr(b,h,e);if(!(a[o>>0]|0))f=0;else f=(a[n>>0]|0)!=0&1;a[d+32>>0]=f;i=j;h=c[i>>2]|0;i=c[i+4>>2]|0;g=k;f=c[g>>2]|0;g=c[g+4>>2]|0;if((a[n>>0]|0)==0?(e=Tv(f|0,g|0,h|0,i|0)|0,Yv(e|0,L()|0,l|0,m|0)|0,e=L()|0,!((a[o>>0]|0)==0&(e|0)<0)):0){d=d+24|0;c[d>>2]=h;c[d+4>>2]=i;Ra=F;return}d=d+24|0;c[d>>2]=f;c[d+4>>2]=g;Ra=F;return}case 2:{g=c[d+12>>2]|0;k=c[d+16>>2]|0;if(!(a[k+33>>0]|0))qr(b,k,e);qr(b,g,e);l=g+32|0;f=a[l>>0]|0;if(!(f<<24>>24)){j=k+32|0;i=q<<24>>24==0;h=i?1:-1;i=i?0:-1;g=g+24|0;if(!(c[e>>2]|0)){f=k+24|0;do{if(a[j>>0]|0)break;D=g;E=f;E=Tv(c[D>>2]|0,c[D+4>>2]|0,c[E>>2]|0,c[E+4>>2]|0)|0;E=Yv(E|0,L()|0,h|0,i|0)|0;D=L()|0;if(!((D|0)>0|(D|0)==0&E>>>0>0))break;qr(b,k,e)}while(!(c[e>>2]|0));f=a[l>>0]|0}else f=0}else g=g+24|0;D=g;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=f;Ra=F;return}default:{D=c[d+20>>2]|0;u=D+24|0;w=D+28|0;do if(c[u>>2]|0?(f=c[w>>2]|0,f|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{C=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;v=D+32|0;c[v>>2]=0;c[u>>2]=0;C=d+32|0;t=c[b>>2]|0;do if(!(c[D+40>>2]|0)){E=a[t+235>>0]|0;f=E&255;if((a[h>>0]|0)!=E<<24>>24?(g=c[D+4>>2]|0,g|0):0){E=D+8|0;kq(f,c[D>>2]|0,g,E,D+16|0,v,C);c[w>>2]=c[E>>2];f=0;break}sr(t,D,C);f=0}else{a[B>>0]=0;s=D+64|0;do if((c[s>>2]|0)==1){f=tr(t,c[D+92>>2]|0,D+16|0,w,v)|0;if(!(c[w>>2]|0)){a[B>>0]=1;g=1;E=113}else{g=0;E=113}}else{h=a[h>>0]|0;f=x;g=f+96|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));r=D+44|0;b=D+16|0;q=h<<24>>24==0;p=q?1:-1;q=q?0:-1;f=0;while(1){c:do if(!f){g=c[s>>2]|0;if((g|0)>0){k=0;l=0;i=0;j=0;while(1){g=x+(l*24|0)|0;do if((c[r>>2]|0)!=(l|0)){f=c[D+72+(l*24|0)+20>>2]|0;if(!f){c[g>>2]=1;f=0;break}E=x+(l*24|0)+16|0;f=tr(t,f,x+(l*24|0)+8|0,E,x+(l*24|0)+20|0)|0;if(!(c[E>>2]|0))a[B>>0]=1}else{sr(t,D,B);c[x+(l*24|0)+16>>2]=c[w>>2];c[x+(l*24|0)+20>>2]=c[v>>2];o=b;E=c[o+4>>2]|0;f=x+(l*24|0)+8|0;c[f>>2]=c[o>>2];c[f+4>>2]=E;f=0}while(0);do if(!(c[g>>2]|0)){h=x+(l*24|0)+8|0;g=c[h>>2]|0;h=c[h+4>>2]|0;if(k|0?(E=Tv(i|0,j|0,g|0,h|0)|0,Yv(E|0,L()|0,p|0,q|0)|0,(L()|0)>=0):0)break;k=1;i=g;j=h}while(0);if(f|0)break;l=l+1|0;g=a[B>>0]|0;h=c[s>>2]|0;if(!(g<<24>>24==0&(l|0)<(h|0))){f=0;E=81;break c}}g=a[B>>0]|0;E=80}else{f=0;i=0;j=0}}else{g=0;i=0;j=0;E=80}while(0);if((E|0)==80){h=c[s>>2]|0;E=81}if((E|0)==81){E=0;if((h|0)>0){m=0;k=g;o=g;l=g;while(1){if(k<<24>>24==0&(f|0)==0){g=o;while(1){f=x+(m*24|0)|0;if(c[f>>2]|0){h=m;f=0;m=l;k=0;break}k=x+(m*24|0)+8|0;o=k;o=Tv(c[o>>2]|0,c[o+4>>2]|0,i|0,j|0)|0;Yv(o|0,L()|0,p|0,q|0)|0;if((L()|0)>=0){h=m;f=0;m=l;k=0;break}do if((c[r>>2]|0)==(m|0)){sr(t,D,B);c[x+(m*24|0)+16>>2]=c[w>>2];c[x+(m*24|0)+20>>2]=c[v>>2];l=b;f=c[l+4>>2]|0;g=k;c[g>>2]=c[l>>2];c[g+4>>2]=f;g=a[B>>0]|0;f=0;l=g}else{h=c[D+72+(m*24|0)+20>>2]|0;if(!h){c[f>>2]=1;f=0;break}o=x+(m*24|0)+16|0;f=tr(t,h,k,o,x+(m*24|0)+20|0)|0;if(c[o>>2]|0)break;a[B>>0]=1;l=1;g=1}while(0);o=k;k=c[o>>2]|0;o=c[o+4>>2]|0;n=Tv(k|0,o|0,i|0,j|0)|0;n=Yv(n|0,L()|0,p|0,q|0)|0;h=L()|0;n=(h|0)>0|(h|0)==0&n>>>0>0;h=n?0:m;i=n?k:i;j=n?o:j;if(l<<24>>24==0&(f|0)==0){m=h;l=0}else{m=l;k=l;break}}n=h;h=c[s>>2]|0;l=m}else{n=m;g=o}m=n+1|0;if((m|0)>=(h|0))break;else o=g}}if(!(g<<24>>24))g=h;else break}g=c[x+((g+-1|0)*24|0)+20>>2]|0;n=nb(g+8|0)|0;if(!n){E=112;break}ew(n|0,c[x+(((c[s>>2]|0)+-1|0)*24|0)+16>>2]|0,g+1|0)|0;g=n+g|0;o=g;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;g=g+4|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;g=c[s>>2]|0;d:do if((g|0)>1){l=n;k=0;h=0;m=g+-1|0;while(1){if(!(c[x+(h*24|0)>>2]|0)){c[y>>2]=c[x+(h*24|0)+16>>2];c[z>>2]=n;c[A>>2]=n;o=(or(A,m-h|0,0,1,y,z)|0)==0;if(o)break;k=(c[A>>2]|0)-l|0;g=c[s>>2]|0}h=h+1|0;m=g+-1|0;if((m|0)<=(h|0))break d}g=c[s>>2]|0}else{k=0;h=0}while(0);if((h|0)==(g+-1|0)){E=110;break}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{o=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}}if((E|0)==110){g=b;c[g>>2]=i;c[g+4>>2]=j;c[w>>2]=n;c[v>>2]=k;c[u>>2]=1;g=0}else if((E|0)==112){f=7;break}E=113}while(0);if((E|0)==113)a[C>>0]=g}while(0);c[e>>2]=f;E=D+16|0;e=c[E+4>>2]|0;d=d+24|0;c[d>>2]=c[E>>2];c[d+4>>2]=e;Ra=F;return}}}function rr(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;I=Ra;Ra=Ra+32|0;y=I+24|0;F=I+20|0;z=I+16|0;A=I+12|0;B=I+8|0;C=I+4|0;H=I;g=c[f>>2]|0;c[H>>2]=g;if(g|0){f=0;H=g;H=(H|0)==0;H=f&H;H=H&1;Ra=I;return H|0}G=d+28|0;if(c[G>>2]|0?(x=ur(0,d)|0,c[H>>2]=x,(x|0)==0):0){c[F>>2]=0;a:do if(c[G>>2]|0){g=c[d>>2]|0;t=c[g+36>>2]|0;h=c[t>>2]|0;u=d+12|0;v=Oc(c[u>>2]|0,0)|0;w=L()|0;x=g+24|0;i=c[x>>2]|0;if((i|0)>0){q=g+32|0;r=d+20|0;s=h+20|0;p=h+16|0;n=0;h=i;while(1){if(!(a[(c[q>>2]|0)+n>>0]|0)){j=c[u>>2]|0;o=n+1|0;i=(j|0)==0;do if(i)g=29576;else{g=c[j+120>>2]|0;if(g|0?o>>>0<(e[j+144>>1]|0)>>>0:0){g=g+(o*40|0)|0;break}g=c[j>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0)k=c[g+16>>2]|0;else if(!(h&1))k=Gg(g,1)|0;else k=0;if(!i){h=c[j>>2]|0;i=j+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g}h=c[r>>2]|0;i=c[t>>2]|0;c[y>>2]=0;g=Za[c[i+12>>2]&127](t,k,-1,y)|0;do if(!g){c[c[y>>2]>>2]=t;if((c[i>>2]|0)>0?(D=Xa[c[i+24>>2]&255](c[y>>2]|0,h)|0,D|0):0){Wa[c[i+16>>2]&127](c[y>>2]|0)|0;c[y>>2]=0;g=D;h=0;E=29;break}h=c[y>>2]|0;c[F>>2]=0;m=h;do{c[z>>2]=0;c[A>>2]=0;c[B>>2]=0;c[C>>2]=0;g=$a[c[s>>2]&127](m,y,z,A,B,C)|0;c[F>>2]=g;i=c[G>>2]|0;if((g|0)==0&(i|0)!=0){g=0;do{l=c[i>>2]|0;k=c[i+4>>2]|0;do if((k|0)==(n|0)?1:(k|0)>=(c[x>>2]|0)){j=c[C>>2]|0;if(!((c[l+12>>2]|0)==0|(j|0)==0)){j=0;break}k=c[l+4>>2]|0;J=c[z>>2]|0;if((k|0)!=(J|0)?!((k|0)<(J|0)&(c[l+8>>2]|0)!=0):0){j=0;break}if(Lu(c[y>>2]|0,c[l>>2]|0,k)|0){j=0;break}wr(i+12|0,v,w,n,0,j,((j|0)<0)<<31>>31,F)|0;j=c[F>>2]|0;g=j}else j=0;while(0);i=c[i+8>>2]|0}while((j|0)==0&(i|0)!=0)}}while(!(g|0))}else{h=c[y>>2]|0;E=29}while(0);if((E|0)==29){E=0;c[F>>2]=g}if(h|0)Wa[c[p>>2]&127](h)|0;if((g|0)!=101)break a;c[F>>2]=0;g=o;h=c[x>>2]|0}else g=n+1|0;if((g|0)<(h|0))n=g;else break}}g=c[G>>2]|0;if(g){i=g;g=0;do{h=i+12|0;if(!(c[h>>2]|0))h=0;else{g=xr(h,0,0)|0;c[F>>2]=g;h=g}i=c[i+8>>2]|0}while((h|0)==0&(i|0)!=0)}else g=0}else g=0;while(0);c[H>>2]=g}j=(vr(d,c[d+16>>2]|0,H)|0)==0;g=c[G>>2]|0;if(g|0)do{h=g+12|0;i=c[h>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{J=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0;g=c[g+8>>2]|0}while((g|0)!=0);J=c[H>>2]|0;c[f>>2]=J;H=j;J=(J|0)==0;J=H&J;J=J&1;Ra=I;return J|0}function sr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=c[e>>2]|0;n=k+(c[e+4>>2]|0)|0;o=e+8|0;l=c[o>>2]|0;m=(l|0)==0;l=m?k:l;k=l;if(l>>>0>=n>>>0){o=1;a[f>>0]=o;return}h=a[l>>0]|0;g=h&255;do if(!(g&128)){i=1;g=h&255;h=0}else{j=d[l+1>>0]|0;g=j<<7|g&127;if(!(j&128)){i=2;h=0;break}j=d[l+2>>0]|0;g=j<<14|g&16383;if(!(j&128)){i=3;h=0;break}j=d[l+3>>0]|0;g=j<<21|g&2097151;if(!(j&128)){i=4;h=0;break}i=28;j=l+4|0;g=g&268435455;h=0;do{p=j;j=j+1|0;p=d[p>>0]|0;q=cw(p&127|0,0,i|0)|0;g=Sv(q|0,L()|0,g|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((p&128|0)!=0|0!=0));i=j-k|0}while(0);q=l+i|0;j=q;b=m|(a[b+235>>0]|0)==0;m=e+16|0;k=m;i=c[k>>2]|0;k=c[k+4>>2]|0;l=Tv(0,0,g|0,h|0)|0;p=L()|0;p=Sv(i|0,k|0,(b?g:l)|0,(b?h:p)|0)|0;h=L()|0;g=m;c[g>>2]=p;c[g+4>>2]=h;c[e+28>>2]=j;g=q;h=0;while(1){i=a[g>>0]|0;g=g+1|0;if(!(h<<24>>24|i))break;else h=i&128}c[e+32>>2]=g-j;a:do if(g>>>0<n>>>0)do{if(a[g>>0]|0)break a;g=g+1|0}while(g>>>0<n>>>0);while(0);c[o>>2]=g;q=0;a[f>>0]=q;return}function tr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+16|0;y=D+4|0;z=D;A=c[e+8>>2]|0;B=c[e>>2]|0;t=(a[b+235>>0]|0)==0?157:158;if(!A){c[g>>2]=0;C=0;Ra=D;return C|0}i=c[B>>2]|0;a:do if(c[i+80>>2]|0){u=(A|0)>1;v=A+-1|0;w=e+24|0;x=e+20|0;s=e+16|0;while(1){r=i+88|0;q=c[r>>2]|0;r=c[r+4>>2]|0;i=jq(b,i,y,z)|0;k=(i|0)==0;b:do if(k&u){j=1;while(1){i=c[B+(j<<2)>>2]|0;if(!(c[i+80>>2]|0)){i=j;break b}p=i+88|0;if(!((c[p>>2]|0)==(q|0)?(c[p+4>>2]|0)==(r|0):0)){i=j;break b}i=jq(b,i,0,0)|0;j=j+1|0;k=(i|0)==0;if(!(k&(j|0)<(A|0))){C=11;break}}}else{j=1;C=11}while(0);if((C|0)==11){C=0;if(k)i=j;else{C=45;break}}o=c[e>>2]|0;i=i+(((i|0)==(A|0))<<31>>31)|0;if((i|0)>0)do{l=i;i=i+-1|0;c:do if((l|0)<(A|0)){j=i;n=c[o+(i<<2)>>2]|0;do{k=j;j=j+1|0;m=o+(j<<2)|0;if((Xa[t&255](n,c[m>>2]|0)|0)<0)break c;p=o+(k<<2)|0;k=c[m>>2]|0;n=c[p>>2]|0;c[m>>2]=n;c[p>>2]=k}while((j|0)<(v|0))}while(0)}while((l|0)>1);i=c[z>>2]|0;if((i|0)>0?c[(c[B>>2]|0)+56>>2]|0:0){l=c[y>>2]|0;m=i+1|0;if((c[x>>2]|0)>(i|0))j=c[s>>2]|0;else{j=m<<1;c[x>>2]=j;k=c[s>>2]|0;if(mb()|0){i=7;C=45;break}j=sb(k,(j|0)>0?j:0,0)|0;if(!j){i=7;C=45;break}c[s>>2]=j}ew(j|0,l|0,m|0)|0;c[y>>2]=c[s>>2]}o=c[w>>2]|0;if((o|0)>-1){k=c[y>>2]|0;p=k+i|0;j=k;n=i;m=0;while(1){d:do if(j>>>0<p>>>0){l=0;i=j;while(1){j=a[i>>0]|0;if(!(j&254|l)){l=i;break d}i=i+1|0;if(i>>>0<p>>>0)l=j&128;else{l=i;break}}}else l=j;while(0);i=l-k|0;if((m|0)==(o|0))break;n=n-i|0;if(!n){k=l;i=0;break}k=l+1|0;j=a[k>>0]|0;i=j&255;if(i&128){m=d[l+2>>0]|0;i=m<<7|j&127;if(m&128){m=d[l+3>>0]|0;i=m<<14|i&16383;if(m&128){m=d[l+4>>0]|0;i=m<<21|i&2097151;if(!(m&128))j=4;else{i=(a[l+5>>0]&7)<<28|i&268435455;j=5}}else j=3}else j=2}else j=1;j=k+j|0;k=l;m=i}j=k+i|0;if((j|0)!=(p|0))gw(j|0,0,p-j|0)|0;c[y>>2]=k;c[z>>2]=i}if((i|0)>0){C=46;break}if(!(c[(c[c[e>>2]>>2]|0)+80>>2]|0))break a;i=c[B>>2]|0}if((C|0)==45){C=i;Ra=D;return C|0}else if((C|0)==46){c[g>>2]=c[y>>2];C=f;c[C>>2]=q;c[C+4>>2]=r;c[h>>2]=i;C=0;Ra=D;return C|0}}while(0);c[g>>2]=0;C=0;Ra=D;return C|0}function ur(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;i=m;k=e+7|0;if(!(a[k>>0]|0)){d=0;Ra=m;return d|0}l=e+12|0;f=c[l>>2]|0;do if(!f){h=c[e>>2]|0;g=h+216|0;f=c[g>>2]|0;if(!f){c[i>>2]=c[h+220>>2];f=Bb(54912,i)|0;if(!f){h=7;break}h=qd(c[h+12>>2]|0,f,-1,129,0,l,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(h|0)break;f=c[l>>2]|0}else{c[l>>2]=f;c[g>>2]=0}a[e+8>>0]=1;j=13}else j=13;while(0);a:do if((j|0)==13){i=e+32|0;h=c[i>>2]|0;i=c[i+4>>2]|0;do if(!(Vc(f,1)|0)){f=c[f+100>>2]|0;g=f+8|0;if(!(b[g>>1]&9216)){j=f;c[j>>2]=h;c[j+4>>2]=i;b[g>>1]=4;break}else{Pg(f,h,i);break}}while(0);a[k>>0]=0;if((Gc(c[l>>2]|0)|0)==100){d=0;Ra=m;return d|0}f=c[l>>2]|0;do if(f|0){g=c[f>>2]|0;l=f+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(g,f);h=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;l=f+64|0;c[l>>2]=0;c[l+4>>2]=0;if(!((h|0)==3082|(a[g+81>>0]|0)!=0)){f=c[g+68>>2]&h;if(!f)break;else{h=f;break a}}else{og(g);h=7;break a}}while(0);if(!(c[(c[e>>2]|0)+40>>2]|0)){a[e+6>>0]=1;h=267;break}else{d=0;Ra=m;return d|0}}while(0);if(!((d|0)!=0&(h|0)!=0)){d=h;Ra=m;return d|0}c[d+20>>2]=h;g=c[d>>2]|0;if(!(b[g+8>>1]&1)){d=h;Ra=m;return d|0}switch(h|0){case 516:{f=50738;break}case 100:{f=50760;break}case 101:{f=50782;break}default:{f=h&255;if(f>>>0<29?(520028155>>>f&1|0)!=0:0)f=c[22960+(f<<2)>>2]|0;else f=50724}}yc(g,f,-1,1,0)|0;d=h;Ra=m;return d|0}function vr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=Ra;Ra=Ra+16|0;s=u+8|0;t=u+4|0;p=u;if(c[e>>2]|0){t=1;t=t&1;Ra=u;return t|0}switch(c[d>>2]|0){case 3:case 1:{k=d+12|0;do if(vr(b,c[k>>2]|0,e)|0?(l=d+16|0,vr(b,c[l>>2]|0,e)|0):0){if(c[e>>2]|0){t=1;t=t&1;Ra=u;return t|0}if((c[d>>2]|0)!=1){t=1;t=t&1;Ra=u;return t|0}r=c[d+8>>2]|0;if(r|0?(c[r>>2]|0)==1:0){t=1;t=t&1;Ra=u;return t|0}f=c[k>>2]|0;if(!f){f=d;h=0;g=0}else{h=d;j=0;g=0;while(1){h=c[(c[(c[h+16>>2]|0)+20>>2]|0)+32>>2]|0;h=Sv(j|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;g=L()|0;i=c[f+12>>2]|0;if(!i)break;else{r=f;j=h;f=i;h=r}}}i=f+20|0;r=c[(c[i>>2]|0)+32>>2]|0;h=Sv(h|0,g|0,r|0,((r|0)<0)<<31>>31|0)|0;h=cw(h|0,L()|0,1)|0;h=pb(h,L()|0)|0;if(!h){c[e>>2]=7;break}g=c[i>>2]|0;c[s>>2]=c[g+28>>2];c[t>>2]=c[g+64>>2];g=c[f+8>>2]|0;a:do if(!g)f=1;else{f=1;do{if((c[g>>2]|0)!=1)break a;f=yr(c[g+4>>2]|0,h,s,t,c[(c[g+16>>2]|0)+20>>2]|0)|0;g=c[g+8>>2]|0}while((f|0)!=0&(g|0)!=0)}while(0);g=c[(c[l>>2]|0)+20>>2]|0;c[s>>2]=c[g+28>>2];c[t>>2]=c[g+64>>2];g=c[k>>2]|0;if((f|0)!=0&(g|0)!=0)do{if((c[g>>2]|0)==1)f=c[g+16>>2]|0;else f=g;f=yr(c[(c[g+8>>2]|0)+4>>2]|0,h,s,t,c[f+20>>2]|0)|0;g=c[g+12>>2]|0}while((f|0)!=0&(g|0)!=0);if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}if(f|0){t=1;t=t&1;Ra=u;return t|0}}while(0);if((c[d>>2]|0)!=1){t=0;t=t&1;Ra=u;return t|0}t=c[d+8>>2]|0;if(t|0?(c[t>>2]|0)==1:0){t=0;t=t&1;Ra=u;return t|0}g=c[d+20>>2]|0;i=b+32|0;if(!g){h=d;while(1){d=c[h+16>>2]|0;s=d+24|0;t=i;if((c[s>>2]|0)==(c[t>>2]|0)?(c[s+4>>2]|0)==(c[t+4>>2]|0):0){f=c[d+20>>2]|0;g=f+24|0;d=f+28|0;do if(c[g>>2]|0?(n=c[d>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{t=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);c[d>>2]=0;c[f+32>>2]=0;c[g>>2]=0}d=c[h+12>>2]|0;g=c[d+20>>2]|0;if(!g)h=d;else break}}s=d+24|0;t=i;if(!((c[s>>2]|0)==(c[t>>2]|0)?(c[s+4>>2]|0)==(c[t+4>>2]|0):0)){t=0;t=t&1;Ra=u;return t|0}f=g+24|0;d=g+28|0;do if(c[f>>2]|0?(o=c[d>>2]|0,o|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[d>>2]=0;c[g+32>>2]=0;c[f>>2]=0;t=0;t=t&1;Ra=u;return t|0}case 4:{t=vr(b,c[d+12>>2]|0,e)|0;t=(vr(b,c[d+16>>2]|0,e)|0|t|0)!=0;t=t&1;Ra=u;return t|0}case 2:{if(!(vr(b,c[d+12>>2]|0,e)|0)){t=0;t=t&1;Ra=u;return t|0}t=(vr(b,c[d+16>>2]|0,e)|0)==0;t=t&1;Ra=u;return t|0}default:{do if(c[b+28>>2]|0){q=d+24|0;n=q;r=b+32|0;o=r;f=a[d+34>>0]|0;if((c[n>>2]|0)==(c[o>>2]|0)?(c[n+4>>2]|0)==(c[o+4>>2]|0):0){d=c[d+20>>2]|0;if(!(f<<24>>24))g=d;else{g=d;m=55}}else{if(!(f<<24>>24))break;g=c[d+20>>2]|0;m=55}if((m|0)==55){f=g+24|0;d=g+28|0;do if(c[f>>2]|0?(h=c[d>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{o=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[d>>2]=0;c[g+32>>2]=0;c[f>>2]=0}n=g+64|0;b:do if((c[n>>2]|0)>0){d=g+28|0;o=g+32|0;m=0;b=0;h=0;j=-1;while(1){f=c[g+72+(m*24|0)+16>>2]|0;if(f){h=f+12|0;f=c[h>>2]|0;if(!f){m=66;break}l=nb(c[f>>2]|0)|0;if(!l){f=7;break b}i=c[h>>2]|0;k=c[i+4>>2]|0;if((a[k>>0]|0)<=-1)if((a[k+1>>0]|0)<=-1)if((a[k+2>>0]|0)<=-1)if((a[k+3>>0]|0)>-1)h=4;else{f=28;h=k+4|0;do{v=h;h=h+1|0;f=f+7|0}while(f>>>0<64&(a[v>>0]|0)<0);h=h-k|0}else h=3;else h=2;else h=1;i=(c[i>>2]|0)-h|0;f=l;ew(l|0,k+h|0,i|0)|0;if(!b){j=m;k=l}else{c[s>>2]=f;c[t>>2]=b;c[p>>2]=f;or(s,m-j|0,0,1,t,p)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{v=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}f=(c[s>>2]|0)-f|0;if(!f){m=85;break}j=m;k=l;i=f}}else{k=b;i=h}m=m+1|0;if((m|0)>=(c[n>>2]|0)){m=90;break}else{b=k;h=i}}if((m|0)==66){do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{v=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[d>>2]=0;c[o>>2]=0;f=0;break}else if((m|0)==85){if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{v=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}c[d>>2]=0;c[o>>2]=0;f=0;break}else if((m|0)==90){if((j|0)<=-1){f=0;break}f=c[g+44>>2]|0;if((f|0)<0){c[d>>2]=k;c[o>>2]=i;t=r;v=c[t+4>>2]|0;f=g+16|0;c[f>>2]=c[t>>2];c[f+4>>2]=v;c[g+24>>2]=1;f=0;break}if((f|0)>(j|0)){c[s>>2]=k;c[t>>2]=c[d>>2];h=f-j|0}else{c[s>>2]=c[d>>2];c[t>>2]=k;h=j-f|0}f=nb(i+8|0)|0;c[p>>2]=f;if(!f){do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{v=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);f=7;break}c[d>>2]=f;if(!(or(p,h,0,1,s,t)|0)){f=c[p>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[d>>2]=0;f=0}else{c[g+24>>2]=1;f=(c[p>>2]|0)-(c[d>>2]|0)|0}c[o>>2]=f;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{v=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);f=0;break}}else{f=0;d=g+28|0}while(0);c[e>>2]=f;v=(c[d>>2]|0)!=0;e=r;s=c[e+4>>2]|0;t=q;c[t>>2]=c[e>>2];c[t+4>>2]=s;v=v&1;Ra=u;return v|0}while(0);if(a[d+32>>0]|0){v=0;v=v&1;Ra=u;return v|0}t=d+24|0;v=b+32|0;v=(c[t>>2]|0)==(c[v>>2]|0)?(c[t+4>>2]|0)==(c[v+4>>2]|0):0;v=v&1;Ra=u;return v|0}}return 0}function wr(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;m=n;j=c[a>>2]|0;c[m>>2]=j;if(j){l=j+16|0;k=c[l>>2]|0;l=c[l+4>>2]|0;if((k|0)==(b|0)&(l|0)==(d|0))l=6;else{l=Tv(b|0,d|0,k|0,l|0)|0;k=L()|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=4}}else{j=b;k=d;l=4}if((l|0)==4){j=xr(m,j,k)|0;if(!j){j=c[m>>2]|0;l=j+24|0;c[l>>2]=-1;c[l+4>>2]=-1;l=j+32|0;c[l>>2]=0;c[l+4>>2]=0;l=j+16|0;c[l>>2]=b;c[l+4>>2]=d;l=6}}do if((l|0)==6){if((f|0)>0|(f|0)==0&e>>>0>0){d=j+24|0;if(!((c[d>>2]|0)==(e|0)?(c[d+4>>2]|0)==(f|0):0)){j=xr(m,1,0)|0;if(j|0)break;j=xr(m,e,f)|0;if(j|0)break;j=c[m>>2]|0;d=j+24|0;c[d>>2]=e;c[d+4>>2]=f;f=j+32|0;c[f>>2]=0;c[f+4>>2]=0}}else if(!((f|0)>-1|(f|0)==-1&e>>>0>4294967295)){j=0;break}e=Sv(g|0,h|0,2,0)|0;f=L()|0;j=j+32|0;j=Tv(e|0,f|0,c[j>>2]|0,c[j+4>>2]|0)|0;j=xr(m,j,L()|0)|0;if(!j){j=(c[m>>2]|0)+32|0;c[j>>2]=g;c[j+4>>2]=h;j=0}}while(0);c[i>>2]=j;j=c[m>>2]|0;if((j|0)==(c[a>>2]|0)){a=0;Ra=n;return a|0}c[a>>2]=j;a=1;Ra=n;return a|0}function xr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[b>>2]|0;do if(f){g=c[f+8>>2]|0;if(((c[f>>2]|0)+11|0)>(g|0)){g=g<<1;h=g+40|0;if((mb()|0)==0?(i=sb(f,(h|0)>0?h:0,0)|0,i|0):0){c[i+8>>2]=g;c[i+4>>2]=i+40;f=i;break}f=c[b>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[b>>2]=0;b=7;return b|0}}else{if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](140)|0;if(!f){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](140)|0;if((c[14985]|0)>>>0<140)c[14985]=140;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){l=c[14978]|0;k=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=l>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){b=7;return b|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}c[f+8>>2]=100;c[f+4>>2]=f+40;c[f>>2]=0}while(0);k=f+4|0;l=(c[k>>2]|0)+(c[f>>2]|0)|0;j=l;i=e;while(1){g=d&255;h=j+1|0;a[j>>0]=g|-128;d=bw(d|0,i|0,7)|0;i=L()|0;if((d|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;e=(c[f>>2]|0)+(h-l)|0;c[f>>2]=e;a[(c[k>>2]|0)+e>>0]=0;c[b>>2]=f;b=0;return b|0}function yr(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+32|0;l=r+20|0;k=r+16|0;h=r+12|0;m=r+8|0;i=r+4|0;p=r;q=g+64|0;t=(c[q>>2]|0)+b|0;b=(c[f>>2]|0)+b|0;o=g+28|0;n=c[o>>2]|0;c[p>>2]=n;c[i>>2]=n;c[l>>2]=d;s=c[e>>2]|0;j=d;c[k>>2]=j;or(k,t,0,0,e,i)|0;k=c[k>>2]|0;c[h>>2]=k;c[m>>2]=k;c[e>>2]=s;c[i>>2]=n;or(h,b,1,0,i,e)|0;i=k;b=(c[h>>2]|0)==(i|0);do if((i|0)==(d|0))if(b)b=0;else{b=d;h=0;while(1){i=a[b>>0]|0;b=b+1|0;if(!(h<<24>>24|i))break;else h=i&128}t=b-k|0;ew(n|0,d|0,t|0)|0;c[p>>2]=n+t;c[m>>2]=b;b=1}else{if(!b){nr(p,l,m)|0;b=1;break}b=d;h=0;while(1){i=a[b>>0]|0;b=b+1|0;if(!(h<<24>>24|i))break;else h=i&128}t=b-j|0;ew(n|0,d|0,t|0)|0;c[p>>2]=n+t;c[l>>2]=b;b=1}while(0);if(!b){Ra=r;return b|0}d=c[o>>2]|0;s=(c[p>>2]|0)-d+-1|0;t=g+32|0;gw(d+s|0,0,(c[t>>2]|0)-s|0)|0;c[t>>2]=s;c[e>>2]=c[o>>2];c[f>>2]=c[q>>2];Ra=r;return b|0}function zr(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;w=x+8|0;t=x;v=x+4|0;c[v>>2]=f;c[w>>2]=f;i=cq(d,7,t,w)|0;s=c[t>>2]|0;a:do if(!i){b:do if((Gc(s)|0)==100){if(!(c[d+44>>2]|0))r=0;else r=Nc(s,(c[d+24>>2]|0)+1|0)|0;j=Oc(s,0)|0;k=L()|0;l=d+272|0;i=l;f=c[i>>2]|0;i=c[i+4>>2]|0;do if(!((i|0)>(k|0)|(i|0)==(k|0)&f>>>0>j>>>0)){if((f|0)==(j|0)&(i|0)==(k|0)?(c[d+284>>2]|0)==0:0){u=10;break}f=d+280|0;if((c[f>>2]|0)==(r|0)?(c[d+264>>2]|0)<=(c[d+260>>2]|0):0)u=12;else u=10}else u=10;while(0);if((u|0)==10){f=Sr(d)|0;if(!f){f=d+280|0;u=12}}if((u|0)==12){q=l;c[q>>2]=j;c[q+4>>2]=k;c[f>>2]=r;c[d+284>>2]=1;q=d+24|0;p=d+32|0;m=s+120|0;n=s+144|0;o=s+40|0;if(!s){f=c[q>>2]|0;if((f|0)<1){i=0;f=1;break a}k=c[p>>2]|0;j=1;while(1){i=j+-1|0;if(!(a[k+i>>0]|0)){c[h+(i<<2)>>2]=0;f=c[q>>2]|0}if((j|0)<(f|0))j=j+1|0;else{f=1;break b}}}l=1;while(1){if((l|0)>(c[q>>2]|0)){f=1;break b}k=l+-1|0;if(!(a[(c[p>>2]|0)+k>>0]|0)){f=c[m>>2]|0;if((f|0)!=0?l>>>0<(e[n>>1]|0)>>>0:0)f=f+(l*40|0)|0;else{f=c[s>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}i=b[f+8>>1]|0;if((i&514)==514?(a[f+10>>0]|0)==1:0)j=c[f+16>>2]|0;else if(!(i&1))j=Gg(f,1)|0;else j=0;f=c[s>>2]|0;i=c[o>>2]|0;if((i|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&i;c[o>>2]=f;f=Mr(d,r,j,-1,h+(k<<2)|0)|0;j=Lc(s,l)|0;k=h+(c[q>>2]<<2)|0;c[k>>2]=(c[k>>2]|0)+j}else f=0;if(!f)l=l+1|0;else break}}if(!s){i=f;f=0;break a}i=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(i,s);r=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if(!((r|0)==3082|(a[i+81>>0]|0)!=0)){i=f;f=0;break a}og(i);i=f;f=0;break a}else f=0;while(0);if(s){i=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(i,s);j=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}else i=0}else if(s){f=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(f,s);r=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if((r|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=0}else f=0}else f=0;while(0);if(!((i|0)==0&(f|0)!=0)){w=i;Ra=x;return w|0}c[w>>2]=c[v>>2];l=d+40|0;c:do if(!(c[l>>2]|0)){f=cq(d,1,t,w)|0;do if(!f){f=c[t>>2]|0;if((Gc(f)|0)==100)k=Nc(f,0)|0;else k=0;if(!f){f=k;u=61;break c}i=c[f>>2]|0;t=f+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;t=f+64|0;c[t>>2]=0;c[t+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}f=c[i+68>>2]&j;if(!f){f=k;break c}Ra=x;return f|0}while(0);w=f;Ra=x;return w|0}else{f=0;u=61}while(0);if(f|0){w=Lr(d,1)|0;c[g>>2]=0;gw(h|0,0,(c[d+24>>2]<<3)+8|0)|0;Ra=x;return w|0}c[g>>2]=(c[g>>2]|0)+-1;if(!(c[l>>2]|0)){f=cq(d,0,w,v)|0;do if(!f){f=c[w>>2]|0;Gc(f)|0;if(f){i=c[f>>2]|0;h=f+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;h=f+64|0;c[h>>2]=0;c[h+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}else{f=c[i+68>>2]&j;break}}else f=0}while(0)}else f=0;if(!(a[d+234>>0]|0)){w=f;Ra=x;return w|0}do if(!f){f=cq(d,19,w,v)|0;if(!f){f=c[w>>2]|0;Gc(f)|0;if(f){i=c[f>>2]|0;w=f+136|0;v=c[w+4>>2]|0;if((v|0)>0|(v|0)==0&(c[w>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;w=f+64|0;c[w>>2]=0;c[w+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}else{f=c[i+68>>2]&j;break}}else f=0}}while(0);w=f;Ra=x;return w|0}function Ar(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;q=s;if(c[d+40>>2]|0){k=c[f+((c[d+24>>2]|0)+3<<2)>>2]|0;i=b[k+8>>1]|0;j=i&31;if(-1431655766>>>j&1){k=c[f+4>>2]|0;i=b[k+8>>1]|0;j=i&31}if(!(1347440720>>>j&1)){h=19;Ra=s;return h|0}i=i&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[k>>3])|0;j=L()|0;break}if(!(i&18)){i=0;j=0}else{i=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;j=L()|0}}else{j=k;i=c[j>>2]|0;j=c[j+4>>2]|0}while(0);c[h>>2]=i;c[h+4>>2]=j;h=0;Ra=s;return h|0}r=f+4|0;i=cq(d,18,q,r)|0;if(i|0){h=i;Ra=s;return h|0}do if(c[d+44>>2]|0){n=c[q>>2]|0;i=d+24|0;o=c[i>>2]|0;l=o+2|0;j=c[f+(o+4<<2)>>2]|0;k=e[j+8>>1]|0;do if(!(k&4)){if(k&8|0){m=Mg(+g[j>>3])|0;L()|0;break}if(!(k&18))m=0;else{m=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;L()|0}}else m=c[j>>2]|0;while(0);p=((m|0)<0)<<31>>31;j=Vc(n,l)|0;if(j|0){h=j;Ra=s;return h|0}n=c[n+100>>2]|0;k=o+1|0;j=n+(k*40|0)|0;k=n+(k*40|0)+8|0;if(!(b[k>>1]&9216)){o=j;c[o>>2]=m;c[o+4>>2]=p;b[k>>1]=4;break}else{Pg(j,m,p);break}}else i=d+24|0;while(0);i=c[f+((c[i>>2]|0)+3<<2)>>2]|0;if(!(-1431655766>>>(b[i+8>>1]&31)&1)){if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0?(-1431655766>>>(b[(c[r>>2]|0)+8>>1]&31)&1|0)==0:0){h=1;Ra=s;return h|0}j=c[q>>2]|0;i=Yc(j,1,i)|0;if(i){h=i;Ra=s;return h|0}}else j=c[q>>2]|0;Gc(j)|0;do if(j){i=c[j>>2]|0;f=j+136|0;r=c[f+4>>2]|0;if((r|0)>0|(r|0)==0&(c[f>>2]|0)>>>0>0)hc(i,j);k=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;f=j+64|0;c[f>>2]=0;c[f+4>>2]=0;if((k|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&k;break}}else i=0;while(0);f=(c[d+12>>2]|0)+40|0;d=c[f+4>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=d;h=i;Ra=s;return h|0}function Br(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;p=t;q=t+8|0;if(c[d>>2]|0){Ra=t;return}g=e+24|0;s=c[g>>2]|0;s=Yv(s|0,((s|0)<0)<<31>>31|0,10,0)|0;s=pb(s,L()|0)|0;a:do if(s){o=c[g>>2]|0;if((o|0)>0){n=0;g=0;do{i=s+g|0;h=i;k=c[f+(n<<2)>>2]|0;m=0;while(1){j=k&255;l=h+1|0;a[h>>0]=j|-128;k=bw(k|0,m|0,7)|0;m=L()|0;if((k|0)==0&(m|0)==0)break;else h=l}a[h>>0]=j&127;g=g-i+l|0;n=n+1|0}while((n|0)!=(o|0));m=g}else m=0;i=e+136|0;h=c[i>>2]|0;c[q>>2]=h;do if(!h){h=c[e+20>>2]|0;c[p>>2]=c[e+16>>2];c[p+4>>2]=h;h=Bb(52323,p)|0;if(h){g=qd(c[e+12>>2]|0,h,-1,133,0,q,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[q>>2]|0;c[i>>2]=h;if(!g)break}else g=7;if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break a}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break a}}while(0);l=h;i=e+272|0;g=c[i>>2]|0;i=c[i+4>>2]|0;do if(!(Vc(l,1)|0)){j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){e=j;c[e>>2]=g;c[e+4>>2]=i;b[k>>1]=4;break}else{Pg(j,g,i);break}}while(0);if(Vc(l,2)|0){do if(90!=-1)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);Gc(l)|0;if(!h){g=0;break}}else{g=yc((c[l+100>>2]|0)+40|0,s,m,0,90)|0;if(g|0?(r=c[l>>2]|0,c[r+64>>2]=g,Ne(r,g),r=c[l>>2]|0,(g|0)==3082|(a[r+81>>0]|0)!=0):0)og(r);Gc(l)|0}g=c[l>>2]|0;s=l+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(g,l);h=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;s=l+64|0;c[s>>2]=0;c[s+4>>2]=0;if((h|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7;break}else{g=c[g+68>>2]&h;break}}else g=7;while(0);c[d>>2]=g;Ra=t;return}function Cr(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;D=Ra;Ra=Ra+32|0;x=D+8|0;k=D;y=D+16|0;u=f+24|0;v=c[u>>2]|0;w=v+2|0;if(c[e>>2]|0){Ra=D;return}C=Yv(w|0,((w|0)<0)<<31>>31|0,14,0)|0;C=pb(C,L()|0)|0;if(!C){c[e>>2]=7;Ra=D;return}z=C+(w<<2)|0;l=f+144|0;j=c[l>>2]|0;c[y>>2]=j;do if(!j){t=c[f+20>>2]|0;c[k>>2]=c[f+16>>2];c[k+4>>2]=t;k=Bb(52411,k)|0;if(k){j=qd(c[f+12>>2]|0,k,-1,133,0,y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[y>>2]|0;c[l>>2]=k;if(!j)break}else j=7;if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{B=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}else k=j;while(0);t=k;do if(!(Vc(t,1)|0)){j=c[t+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){s=j;c[s>>2]=0;c[s+4>>2]=0;b[l>>1]=4;break}else{Pg(j,0,0);break}}while(0);if((Gc(t)|0)==100){if(!k)n=mc(29576)|0;else{j=c[t+120>>2]|0;if((j|0)!=0?(b[t+144>>1]|0)!=0:0)l=t;else{j=c[t>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;l=t}n=mc(j)|0;j=c[l>>2]|0;m=t+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j}s=Lc(t,0)|0;if(((s|0)!=0?(a[n+(s+-1)>>0]|0)>-1:0)?(v|0)>-2&(s|0)>0:0){j=0;r=0;do{q=n+r|0;l=d[q>>0]|0;if(l&128){p=d[q+1>>0]|0;l=p<<7|l&127;if(p&128){p=d[q+2>>0]|0;l=p<<14|l&16383;if(p&128){p=d[q+3>>0]|0;l=p<<21|l&2097151;if(!(p&128))m=4;else{o=28;p=q+4|0;l=l&268435455;m=0;do{E=p;p=p+1|0;E=d[E>>0]|0;F=cw(E&127|0,0,o|0)|0;l=Sv(F|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((E&128|0)!=0|0!=0));m=p-q|0}}else m=3}else m=2}else m=1;r=m+r|0;c[C+(j<<2)>>2]=l;j=j+1|0}while((j|0)<(w|0)&(r|0)<(s|0))}else j=0;if((w|0)>(j|0))gw(C+(j<<2)|0,0,w-j<<2|0)|0}else gw(C|0,0,w<<2|0)|0;do if(k|0){j=c[t>>2]|0;F=t+136|0;E=c[F+4>>2]|0;if((E|0)>0|(E|0)==0&(c[F>>2]|0)>>>0>0)hc(j,t);k=kc(t)|0;c[t+20>>2]=770837923;c[t+36>>2]=-1;c[t+40>>2]=0;a[t+146>>0]=2;c[t+44>>2]=0;c[t+32>>2]=1;a[t+147>>0]=-1;c[t+48>>2]=0;F=t+64|0;c[F>>2]=0;c[F+4>>2]=0;if(!((k|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&k;if(!j)break}else{og(j);j=7}if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}while(0);k=c[C>>2]|0;k=(i|0)<0&k>>>0<(0-i|0)>>>0?0:k+i|0;c[C>>2]=k;if((c[u>>2]|0)>=0){j=0;do{F=j;j=j+1|0;E=C+(j<<2)|0;t=(c[g+(F<<2)>>2]|0)+(c[E>>2]|0)|0;i=c[h+(F<<2)>>2]|0;c[E>>2]=t>>>0<i>>>0?0:t-i|0}while((F|0)<(c[u>>2]|0))}a:do if((v|0)>-2){q=0;j=0;while(1){p=z+j|0;o=p;n=0;while(1){l=k&255;m=o+1|0;a[o>>0]=l|-128;k=bw(k|0,n|0,7)|0;n=L()|0;if((k|0)==0&(n|0)==0)break;else o=m}a[o>>0]=l&127;j=j-p+m|0;k=q+1|0;if((k|0)==(w|0)){n=j;break a}q=k;k=c[C+(k<<2)>>2]|0}}else n=0;while(0);l=f+148|0;k=c[l>>2]|0;c[y>>2]=k;do if(!k){k=c[f+20>>2]|0;c[x>>2]=c[f+16>>2];c[x+4>>2]=k;k=Bb(52453,x)|0;if(k){j=qd(c[f+12>>2]|0,k,-1,133,0,y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{F=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[y>>2]|0;c[l>>2]=k;if(!j)break}else j=7;if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}while(0);m=k;do if(!(Vc(m,1)|0)){j=c[m+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){F=j;c[F>>2]=0;c[F+4>>2]=0;b[l>>1]=4;break}else{Pg(j,0,0);break}}while(0);if((z|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;if(!k)j=0;else B=87}else{j=yc((c[m+100>>2]|0)+40|0,z,n,0,0)|0;if(j|0?(A=c[m>>2]|0,c[A+64>>2]=j,Ne(A,j),A=c[m>>2]|0,(j|0)==3082|(a[A+81>>0]|0)!=0):0)og(A);Gc(m)|0;B=87}do if((B|0)==87){j=c[m>>2]|0;F=m+136|0;E=c[F+4>>2]|0;if((E|0)>0|(E|0)==0&(c[F>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;F=m+64|0;c[F>>2]=0;c[F+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}while(0);c[e>>2]=j;Vc(m,2)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](C);Ra=D;return}else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C);Ra=D;return}}function Dr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+16|0;g=m;h=m+8|0;j=d+164|0;f=c[j>>2]|0;c[h>>2]=f;do if(!f){f=c[d+20>>2]|0;c[g>>2]=c[d+16>>2];c[g+4>>2]=f;f=Bb(52546,g)|0;if(!f){j=0;i=7;break}i=qd(c[d+12>>2]|0,f,-1,133,0,h,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}f=c[h>>2]|0;c[j>>2]=f;if(!i)k=9;else j=0}else k=9;while(0);if((k|0)==9){l=f;g=c[d+280>>2]|0;h=((g|0)<0)<<31>>31;do if(!(Vc(l,1)|0)){i=c[l+100>>2]|0;j=i+8|0;if(!(b[j>>1]&9216)){k=i;c[k>>2]=g;c[k+4>>2]=h;b[j>>1]=4;break}else{Pg(i,g,h);break}}while(0);k=d+252|0;g=c[k>>2]|0;h=((g|0)<0)<<31>>31;do if(!(Vc(l,2)|0)){j=c[l+100>>2]|0;i=j+40|0;j=j+48|0;if(!(b[j>>1]&9216)){c[i>>2]=g;c[i+4>>2]=h;b[j>>1]=4;break}else{Pg(i,g,h);break}}while(0);if((Gc(l)|0)==100){g=0;h=0;while(1){j=Nc(l,0)|0;a:do if(!g){i=0;while(1){if((i|0)>=(c[k>>2]|0)){g=0;break a}g=Er(d,j,i,-2)|0;n=(g|0)==101;g=n?0:g;h=n?1:h;if(!g)i=i+1|0;else break}}while(0);if((Gc(l)|0)!=100){i=g;break}}}else{h=0;i=0}do if(f){f=c[l>>2]|0;n=l+136|0;k=c[n+4>>2]|0;if((k|0)>0|(k|0)==0&(c[n>>2]|0)>>>0>0)hc(f,l);g=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;n=l+64|0;c[n>>2]=0;c[n+4>>2]=0;if((g|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7;break}else{f=c[f+68>>2]&g;break}}else f=0;while(0);j=h;i=(i|0)==0?f:i}f=d+248|0;g=c[f>>2]|0;if(!g){c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}n=g;if((c[h+304>>2]|0)>>>0<=n>>>0?(c[h+308>>2]|0)>>>0>n>>>0:0){n=h+300|0;c[g>>2]=c[n>>2];c[n>>2]=g;c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}else{n=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}return 0}function Er(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ca=Ra;Ra=Ra+128|0;R=ca+40|0;Q=ca+32|0;P=ca+24|0;O=ca+16|0;w=ca+8|0;i=ca;S=ca+120|0;x=ca+104|0;aa=ca+48|0;h=aa;j=h+56|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));h=Xp(d,e,f,g,0,0,1,0,aa)|0;ba=aa+4|0;a:do if(!h){q=c[ba>>2]|0;if(!q){h=0;j=c[aa>>2]|0;i=aa;Z=264;break}N=(g|0)!=-1;if(N){j=d+116|0;h=c[j>>2]|0;c[S>>2]=h;if(!h){Y=c[d+20>>2]|0;c[i>>2]=c[d+16>>2];c[i+4>>2]=Y;i=Bb(52072,i)|0;if(!i){h=7;Z=237;break}h=qd(c[d+12>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{Y=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[S>>2]|0;c[j>>2]=i;if(!h)h=i;else{Z=237;break}}n=h;o=d+252|0;i=c[o>>2]|0;p=((e|0)<0)<<31>>31;i=Yv(i|0,((i|0)<0)<<31>>31|0,e|0,p|0)|0;m=((f|0)<0)<<31>>31;i=Sv(i|0,L()|0,f|0,m|0)|0;i=cw(i|0,L()|0,10)|0;j=L()|0;do if(!(Vc(n,1)|0)){k=c[n+100>>2]|0;l=k+8|0;if(!(b[l>>1]&9216)){Y=k;c[Y>>2]=i;c[Y+4>>2]=j;b[l>>1]=4;break}else{Pg(k,i,j);break}}while(0);j=c[o>>2]|0;j=Yv(j|0,((j|0)<0)<<31>>31|0,e|0,p|0)|0;j=Sv(j|0,L()|0,f|0,m|0)|0;j=cw(j|0,L()|0,10)|0;i=L()|0;j=j|1023;do if(!(Vc(n,2)|0)){l=c[n+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){Y=k;c[Y>>2]=j;c[Y+4>>2]=i;b[l>>1]=4;break}else{Pg(k,j,i);break}}while(0);if((Gc(n)|0)==100){k=Oc(n,0)|0;j=L()|0}else{k=0;j=0}do if(h|0){i=c[n>>2]|0;Y=n+136|0;X=c[Y+4>>2]|0;if((X|0)>0|(X|0)==0&(c[Y>>2]|0)>>>0>0)hc(i,n);h=kc(n)|0;c[n+20>>2]=770837923;c[n+36>>2]=-1;c[n+40>>2]=0;a[n+146>>0]=2;c[n+44>>2]=0;c[n+32>>2]=1;a[n+147>>0]=-1;c[n+48>>2]=0;Y=n+64|0;c[Y>>2]=0;c[Y+4>>2]=0;if(!((h|0)==3082|(a[i+81>>0]|0)!=0)){h=c[i+68>>2]&h;if(!h)break;else{Z=237;break a}}else{og(i);h=7;Z=237;break a}}while(0);if((g|0)==-2){if((q|0)==1?(c[(c[c[aa>>2]>>2]|0)+56>>2]|0)==0:0){h=101;Z=237;break};c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;W=0;Y=k;X=j;V=j;U=k;K=1;i=3;h=x+12|0}else{q=e;n=p;p=f;u=j;v=k;Z=33}}else{o=d+252|0;q=e;n=((e|0)<0)<<31>>31;p=f;m=((f|0)<0)<<31>>31;u=0;v=0;Z=33}do if((Z|0)==33){r=g+1|0;s=c[o>>2]|0;s=Yv(q|0,n|0,s|0,((s|0)<0)<<31>>31|0)|0;s=Sv(s|0,L()|0,p|0,m|0)|0;s=cw(s|0,L()|0,10)|0;j=((r|0)<0)<<31>>31;s=Sv(s|0,L()|0,r|0,j|0)|0;t=L()|0;k=d+88|0;l=c[k>>2]|0;c[S>>2]=l;if(!l){i=c[d+20>>2]|0;c[w>>2]=c[d+16>>2];c[w+4>>2]=i;i=Bb(51533,w)|0;if(!i){h=7;Z=237;break a}h=qd(c[d+12>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{Y=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}l=c[S>>2]|0;c[k>>2]=l;if(h|0){Z=237;break a}k=c[o>>2]|0;k=Yv(q|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;k=Sv(k|0,L()|0,p|0,m|0)|0;k=cw(k|0,L()|0,10)|0;j=Sv(k|0,L()|0,r|0,j|0)|0;k=L()|0}else{j=s;k=t}m=l;do if(!(Vc(m,1)|0)){h=c[m+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){Y=h;c[Y>>2]=j;c[Y+4>>2]=k;b[i>>1]=4;break}else{Pg(h,j,k);break}}while(0);if((Gc(m)|0)==100)j=Nc(m,0)|0;else j=0;do if(l|0){h=c[m>>2]|0;Y=m+136|0;X=c[Y+4>>2]|0;if((X|0)>0|(X|0)==0&(c[Y>>2]|0)>>>0>0)hc(h,m);i=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;Y=m+64|0;c[Y>>2]=0;c[Y+4>>2]=0;if(!((i|0)==3082|(a[h+81>>0]|0)!=0)){h=c[h+68>>2]&i;if(!h)break;else{Z=237;break a}}else{og(h);h=7;Z=237;break a}}while(0);if((j|0)>15){h=Er(d,e,f,r)|0;if(!h){i=N&((t|0)>(u|0)|(t|0)==(u|0)&s>>>0>v>>>0);h=0;Z=59}else{Z=237;break a}}else if(N){i=(t|0)>(u|0)|(t|0)==(u|0)&s>>>0>v>>>0;h=j;Z=59}else{c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;h=j;j=x+12|0}if((Z|0)==59){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;j=x+12|0;if(i){W=h;Y=s;X=t;V=u;U=v;K=0;i=3;h=j;break}}W=h;Y=s;X=t;V=u;U=v;K=0;i=1;h=j}while(0);c[h>>2]=i;c[aa+12>>2]=x;h=eq(d,aa,0,0)|0;if(!h){C=aa+40|0;D=aa+44|0;E=aa+48|0;F=aa+52|0;G=d+228|0;H=d+96|0;I=d+16|0;J=d+20|0;M=d+12|0;T=d+52|0;i=0;j=0;b:while(1){h=gq(d,aa)|0;switch(h|0){case 0:{Z=130;break b}case 100:break;default:{Z=223;break b}}A=c[C>>2]|0;B=c[D>>2]|0;y=c[E>>2]|0;z=c[F>>2]|0;if(!i){if(mb()|0){h=7;Z=237;break a}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](64)|0;if(!h){h=7;Z=237;break a}else l=h}else{h=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){x=c[14978]|0;w=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=x>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(!i){h=7;Z=237;break a}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=i}else l=i}h=l;j=h+64|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));x=nb(c[G>>2]|0)|0;c[l+48>>2]=x;if(!x){Z=222;break}c[l+40>>2]=c[G>>2];h=c[H>>2]|0;c[S>>2]=h;if(!h){i=c[J>>2]|0;c[O>>2]=c[I>>2];c[O+4>>2]=i;i=Bb(51657,O)|0;if(!i){Z=81;break}h=qd(c[M>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{x=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[S>>2]|0;c[H>>2]=i;if(!h)h=i;else{Z=224;break}}j=h;if((Gc(j)|0)==100){v=Oc(j,0)|0;w=L()|0;x=l+16|0;c[x>>2]=v;c[x+4>>2]=w;x=l+8|0;c[x>>2]=v;c[x+4>>2]=w}if(h){h=c[j>>2]|0;x=j+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(h,j);i=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;x=j+64|0;c[x>>2]=0;c[x+4>>2]=0;if((i|0)==3082|(a[h+81>>0]|0)!=0){Z=92;break}h=c[h+68>>2]&i;if(h){Z=225;break}else{i=l;j=l}}else{i=l;j=l}}v=i+44|0;q=c[v>>2]|0;w=i+24|0;k=c[w>>2]|0;x=i+28|0;l=c[x>>2]|0;c:do if((l|0)>0){h=0;while(1){if((a[k+h>>0]|0)!=(a[A+h>>0]|0)){o=h;break c}h=h+1|0;if((h|0)>=(l|0)){o=h;break}}}else o=0;while(0);p=B-o|0;if((p|0)<1){h=267;Z=223;break}n=0;h=o;k=((o|0)<0)<<31>>31;do{n=n+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));m=0;h=p;k=((p|0)<0)<<31>>31;do{m=m+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));u=((z|0)<0)<<31>>31;h=0;k=z;l=u;do{h=h+1|0;k=bw(k|0,l|0,7)|0;l=L()|0}while(!((k|0)==0&(l|0)==0));h=p+z+n+m+h|0;if((q|0)>0?(h+q|0)>(c[G>>2]|0):0){s=i+16|0;h=s;t=c[h>>2]|0;h=c[h+4>>2]|0;p=Sv(t|0,h|0,1,0)|0;r=L()|0;c[s>>2]=p;c[s+4>>2]=r;h=Hr(d,t,h,c[i+48>>2]|0,q)|0;if(h|0){k=i;break}c[T>>2]=(c[T>>2]|0)+1;h=Ir(d,i,A,o+1|0)|0;if(h|0){k=i;break}c[x>>2]=0;m=0;h=B;k=((B|0)<0)<<31>>31;while(1){h=bw(h|0,k|0,7)|0;k=L()|0;if((h|0)==0&(k|0)==0)break;else m=m+1|0}l=0;h=z;k=u;do{l=l+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));s=0;q=0;l=B+2+z+m+l|0;r=B}else{s=o;l=h;r=p}k=i+56|0;h=k;h=Sv(c[h>>2]|0,c[h+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;t=L()|0;c[k>>2]=h;c[k+4>>2]=t;k=i+40|0;t=i+48|0;h=c[t>>2]|0;if((l|0)>(c[k>>2]|0)){if(mb()|0){k=i;h=7;break}h=sb(h,(l|0)>0?l:0,0)|0;if(!h){k=i;h=7;break}c[t>>2]=h;c[k>>2]=l}k=h+q|0;h=k;m=s;o=((s|0)<0)<<31>>31;while(1){l=m&255;n=h+1|0;a[h>>0]=l|-128;m=bw(m|0,o|0,7)|0;o=L()|0;if((m|0)==0&(o|0)==0)break;else h=n}a[h>>0]=l&127;k=n-k+q|0;l=(c[t>>2]|0)+k|0;h=l;n=r;p=((r|0)<0)<<31>>31;while(1){m=n&255;o=h+1|0;a[h>>0]=m|-128;n=bw(n|0,p|0,7)|0;p=L()|0;if((n|0)==0&(p|0)==0)break;else h=o}a[h>>0]=m&127;n=o-l+k|0;ew((c[t>>2]|0)+n|0,A+s|0,r|0)|0;n=n+r|0;o=(c[t>>2]|0)+n|0;m=o;p=z;l=u;while(1){h=p&255;k=m+1|0;a[m>>0]=h|-128;p=bw(p|0,l|0,7)|0;l=L()|0;if((p|0)==0&(l|0)==0)break;else m=k}a[m>>0]=h&127;k=k-o+n|0;ew((c[t>>2]|0)+k|0,y|0,z|0)|0;c[v>>2]=k+z;k=i+32|0;if((c[k>>2]|0)<(B|0)){l=i+36|0;h=c[l>>2]|0;m=B<<1;if(mb()|0){k=i;h=7;break}h=sb(h,(m|0)>0?m:0,0)|0;if(!h){k=i;h=7;break}c[k>>2]=m;c[l>>2]=h;c[w>>2]=h}else h=c[w>>2]|0;ew(h|0,A|0,B|0)|0;c[x>>2]=B}d:do if((Z|0)==81){k=l;h=7;j=l}else if((Z|0)==92){og(h);k=l;h=7;j=l}else if((Z|0)==130){if(N){s=c[aa>>2]|0;t=c[ba>>2]|0;do if((t|0)>0){r=d+124|0;q=0;e:while(1){p=c[s+(q<<2)>>2]|0;m=p+8|0;l=m;h=c[l>>2]|0;l=c[l+4>>2]|0;do if((h|0)==0&(l|0)==0)h=0;else{k=c[r>>2]|0;c[S>>2]=k;if(!k){k=c[J>>2]|0;c[P>>2]=c[I>>2];c[P+4>>2]=k;k=Bb(52181,P)|0;if(!k){Z=137;break e}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{Z=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[r>>2]=k;if(h|0){Z=223;break d}l=m;h=c[l>>2]|0;l=c[l+4>>2]|0}o=k;do if(!(Vc(o,1)|0)){m=c[o+100>>2]|0;n=m+8|0;if(!(b[n>>1]&9216)){Z=m;c[Z>>2]=h;c[Z+4>>2]=l;b[n>>1]=4;break}else{Pg(m,h,l);break}}while(0);m=p+24|0;l=c[m>>2]|0;m=c[m+4>>2]|0;if(Vc(o,2)|0){Gc(o)|0;if(!k){h=0;break}}else{k=c[o+100>>2]|0;h=k+40|0;k=k+48|0;if(!(b[k>>1]&9216)){Z=h;c[Z>>2]=l;c[Z+4>>2]=m;b[k>>1]=4}else Pg(h,l,m);Gc(o)|0}k=c[o>>2]|0;Z=o+136|0;O=c[Z+4>>2]|0;if((O|0)>0|(O|0)==0&(c[Z>>2]|0)>>>0>0)hc(k,o);h=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;Z=o+64|0;c[Z>>2]=0;c[Z+4>>2]=0;if((h|0)==3082|(a[k+81>>0]|0)!=0){Z=156;break e}h=c[k+68>>2]&h}while(0);q=q+1|0;k=(h|0)==0;if(!((q|0)<(t|0)&k)){Z=159;break}}if((Z|0)==137){h=7;Z=223;break d}else if((Z|0)==156){og(k);h=7;Z=223;break d}else if((Z|0)==159)if(k)break;else{Z=223;break d}}while(0);do if(K){l=d+160|0;h=c[l>>2]|0;c[S>>2]=h;if(!h){k=c[J>>2]|0;c[Q>>2]=c[I>>2];c[Q+4>>2]=k;k=Bb(52491,Q)|0;if(!k){h=7;Z=223;break d}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[l>>2]=k;if(!h)h=k;else{Z=223;break d}}l=h;k=d+252|0;o=c[k>>2]|0;m=((e|0)<0)<<31>>31;o=Yv(o|0,((o|0)<0)<<31>>31|0,e|0,m|0)|0;n=((f|0)<0)<<31>>31;o=Sv(o|0,L()|0,f|0,n|0)|0;o=cw(o|0,L()|0,10)|0;p=L()|0;do if(!(Vc(l,1)|0)){q=c[l+100>>2]|0;r=q+8|0;if(!(b[r>>1]&9216)){S=q;c[S>>2]=o;c[S+4>>2]=p;b[r>>1]=4;break}else{Pg(q,o,p);break}}while(0);k=c[k>>2]|0;m=Yv(k|0,((k|0)<0)<<31>>31|0,e|0,m|0)|0;m=Sv(m|0,L()|0,f|0,n|0)|0;m=cw(m|0,L()|0,10)|0;k=L()|0;m=m|1023;if(!(Vc(l,2)|0)){o=c[l+100>>2]|0;n=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){f=n;c[f>>2]=m;c[f+4>>2]=k;b[o>>1]=4;break}else{Pg(n,m,k);break}}}else{l=d+120|0;h=c[l>>2]|0;c[S>>2]=h;if(!h){k=c[J>>2]|0;c[R>>2]=c[I>>2];c[R+4>>2]=k;k=Bb(52138,R)|0;if(!k){h=7;Z=223;break d}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[l>>2]=k;if(!h)h=k;else{Z=223;break d}}l=h;k=c[d+252>>2]|0;k=Yv(k|0,((k|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;k=Sv(k|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;k=cw(k|0,L()|0,10)|0;k=Sv(k|0,L()|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;if(!(Vc(l,1)|0)){n=c[l+100>>2]|0;o=n+8|0;if(!(b[o>>1]&9216)){f=n;c[f>>2]=k;c[f+4>>2]=m;b[o>>1]=4;break}else{Pg(n,k,m);break}}}while(0);Gc(l)|0;do if(h){h=c[l>>2]|0;f=l+136|0;e=c[f+4>>2]|0;if((e|0)>0|(e|0)==0&(c[f>>2]|0)>>>0>0)hc(h,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;f=l+64|0;c[f>>2]=0;c[f+4>>2]=0;if((k|0)==3082|(a[h+81>>0]|0)!=0){og(h);h=7;Z=223;break d}else{h=c[h+68>>2]&k;break}}else h=0;while(0);if(!((i|0)!=0&(h|0)==0)){Z=223;break}}else if(!i){h=0;Z=237;break a}f:do if(!(c[i>>2]|0)){h=i+56|0;h=Jr(d,Y,X,W,0,0,0,0,0,0,c[h>>2]|0,c[h+4>>2]|0,c[i+48>>2]|0,c[i+44>>2]|0)|0}else{k=i+16|0;B=k;A=c[B>>2]|0;B=c[B+4>>2]|0;e=Sv(A|0,B|0,1,0)|0;f=L()|0;h=k;c[h>>2]=e;c[h+4>>2]=f;h=Hr(d,A,B,c[i+48>>2]|0,c[i+44>>2]|0)|0;g:do if(!h){m=c[i>>2]|0;z=i+8|0;o=z;r=c[o>>2]|0;o=c[o+4>>2]|0;q=k;l=c[q>>2]|0;q=c[q+4>>2]|0;h=c[m>>2]|0;if(!h){k=m;s=1;u=l;t=q;q=o}else{p=m;y=1;x=m;while(1){k=c[p+8>>2]|0;if(!k){m=l;n=q;k=h}else{w=y&255;m=l;n=q;v=o;do{h=0;o=r;p=v;while(1){o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else h=h+1|0}o=9-h|0;p=k+36|0;a[(c[p>>2]|0)+o>>0]=w;h=(c[p>>2]|0)+(o+1)|0;t=r;u=v;while(1){s=t&255;a[h>>0]=s|-128;t=bw(t|0,u|0,7)|0;u=L()|0;if((t|0)==0&(u|0)==0)break;else h=h+1|0}a[h>>0]=s&127;h=Hr(d,m,n,(c[p>>2]|0)+o|0,(c[k+32>>2]|0)-o|0)|0;m=Sv(m|0,n|0,1,0)|0;n=L()|0;o=(c[k+12>>2]|0)+1|0;r=Sv(r|0,v|0,o|0,((o|0)<0)<<31>>31|0)|0;v=L()|0;k=c[k+4>>2]|0;o=(h|0)==0}while(o&(k|0)!=0);if(!o)break g;k=c[x>>2]|0}y=y+1|0;h=c[k>>2]|0;if(!h)break;else{o=q;r=l;p=k;l=m;q=n;x=k}}s=y&255;u=m;t=n;r=l}h=0;l=r;m=q;while(1){l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else h=h+1|0}o=9-h|0;p=k+36|0;a[(c[p>>2]|0)+o>>0]=s;n=(c[p>>2]|0)+(o+1)|0;m=r;l=q;while(1){h=m&255;a[n>>0]=h|-128;m=bw(m|0,l|0,7)|0;l=L()|0;if((m|0)==0&(l|0)==0)break;else n=n+1|0}a[n>>0]=h&127;e=Sv(u|0,t|0,-1,-1)|0;f=L()|0;S=z;h=i+56|0;h=Jr(d,Y,X,W,c[S>>2]|0,c[S+4>>2]|0,A,B,e,f,c[h>>2]|0,c[h+4>>2]|0,(c[p>>2]|0)+o|0,(c[k+32>>2]|0)-o|0)|0;break f}while(0);c[T>>2]=(c[T>>2]|0)+1;Z=223;break d}while(0);c[T>>2]=(c[T>>2]|0)+1;if(!h)if((g|0)==-1|((X|0)<(V|0)|(X|0)==(V|0)&Y>>>0<U>>>0)){h=i+56|0;k=i;h=Gr(d,Y,X,c[h>>2]|0,c[h+4>>2]|0)|0}else{k=i;h=0}else k=i}else if((Z|0)==222){i=l;h=7;j=l;Z=223}else if((Z|0)==224){k=l;j=l}else if((Z|0)==225){k=l;j=l}while(0);if((Z|0)==223)if(!i){Z=237;break}else k=i;i=c[k+48>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[k+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);Kr(c[k>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);Z=237;break}else{Z=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);Z=237;break}}else Z=237}else Z=237;while(0);if((Z|0)==237){k=c[ba>>2]|0;j=c[aa>>2]|0;if((k|0)>0){i=0;do{l=c[j+(i<<2)>>2]|0;do if(l|0){do if((c[l+56>>2]|0)==0?(_=c[l+64>>2]|0,_|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](_);break}else{d=Wa[c[29352>>2]&127](_)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](_);break}while(0);do if((a[l+5>>0]|0)==0?($=c[l+40>>2]|0,$|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127]($);break}else{d=Wa[c[29352>>2]&127]($)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127]($);break}while(0);m=c[l+52>>2]|0;do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(n|0){if(c[n+480>>2]|0){Xd(n,m);break}d=m;if((c[n+304>>2]|0)>>>0<=d>>>0?(c[n+308>>2]|0)>>>0>d>>>0:0){d=n+300|0;c[m>>2]=c[d>>2];c[d>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{d=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{d=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);i=i+1|0}while((i|0)!=(k|0));i=aa;Z=265}else{i=aa;Z=264}}if((Z|0)==264)if(!j)j=h;else Z=265;do if((Z|0)==265)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=h;break}else{$=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=h;break}while(0);h=c[aa+16>>2]|0;if(!h){c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}return 0}function Fr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=b+252|0;if((c[h>>2]|0)<=0){k=b+264|0;c[k>>2]=0;return}i=b+256|0;g=0;do{k=c[i>>2]|0;f=k+(g*24|0)+12|0;d=c[f>>2]|0;if(!d)d=0;else{do{e=c[d+8>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);d=c[d>>2]|0}while((d|0)!=0);d=c[f>>2]|0}c[f>>2]=0;e=k+(g*24|0)+20|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[k+(g*24|0)+16>>2]=0;if(d|0){f=k+(g*24|0)+5|0;do{e=d;d=c[d>>2]|0;do if(a[f>>0]|0?(j=c[e+12>>2]|0,j|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0)}c[k+(g*24|0)+8>>2]=0;g=g+1|0}while((g|0)<(c[h>>2]|0));l=b+264|0;c[l>>2]=0;return}function Gr(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+32|0;w=A+16|0;v=A+8|0;k=A;x=A+24|0;l=d+204|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[k>>2]=c[d+16>>2];c[k+4>>2]=j;j=Bb(53301,k)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{z=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(k){g=k;Ra=A;return g|0}}n=Wv(f|0,g|0,1024,0)|0;n=cw(n|0,L()|0,10)|0;m=L()|0;n=n|1023;s=Yv(h|0,i|0,3,0)|0;s=Wv(s|0,L()|0,2,0)|0;t=L()|0;z=j;k=Sv(f|0,g|0,1,0)|0;l=L()|0;do if(!(Vc(z,1)|0)){h=c[z+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){y=h;c[y>>2]=k;c[y+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);do if(!(Vc(z,2)|0)){l=c[z+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){y=k;c[y>>2]=n;c[y+4>>2]=m;b[l>>1]=4;break}else{Pg(k,n,m);break}}while(0);a:do if((Gc(z)|0)==100){p=z+120|0;q=z+144|0;r=z+40|0;if(!j){g=0;Ra=A;return g|0}while(1){k=c[p>>2]|0;if((k|0)!=0?(e[q>>1]|0)>2:0)k=k+80|0;else{k=c[z>>2]|0;c[k+64>>2]=25;Ne(k,25);k=29576}l=b[k+8>>1]|0;if((l&514)==514?(a[k+10>>0]|0)==1:0)o=c[k+16>>2]|0;else if(!(l&1))o=Gg(k,1)|0;else o=0;k=c[z>>2]|0;l=c[r>>2]|0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7}else k=c[k+68>>2]&l;c[r>>2]=k;if(!o){l=0;break a}if(((a[o>>0]|0)+-48&255)<10){k=0;do k=k+1|0;while(((a[o+k>>0]|0)+-48&255)<10)}else k=0;b:while(1){l=a[o+k>>0]|0;switch(l<<24>>24){case 45:{u=40;break b}case 32:break;default:{m=1;n=0;break b}}k=k+1|0}if((u|0)==40){u=0;l=k+1|0;k=l;l=a[o+l>>0]|0;m=-1;n=-1}if((l+-48&255)<10){h=0;i=0;do{i=Yv(h|0,i|0,10,0)|0;h=(l&255)+-48|0;h=Sv(i|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;k=k+1|0;l=a[o+k>>0]|0}while((l+-48&255)<10);l=h;k=i}else{l=0;k=0}l=Yv(l|0,k|0,m|0,n|0)|0;y=L()|0;k=(y|0)<0|(y|0)==0&l>>>0<1;l=(y|0)>(t|0)|(y|0)==(t|0)&l>>>0>s>>>0;if(k|l){u=45;break}if((Gc(z)|0)!=100){u=46;break}}if((u|0)==45){l=(k|l)^1;break}else if((u|0)==46){l=(k|l)^1;break}}else l=0;while(0);do if(!j){j=0;y=1}else{j=c[z>>2]|0;y=z+136|0;u=c[y+4>>2]|0;if((u|0)>0|(u|0)==0&(c[y>>2]|0)>>>0>0)hc(j,z);k=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;y=z+64|0;c[y>>2]=0;c[y+4>>2]=0;if(!((k|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&k;y=0;break}og(j);g=7;Ra=A;return g|0}while(0);if(!(l&(j|0)==0)){g=j;Ra=A;return g|0}l=d+208|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[v>>2]=c[d+16>>2];c[v+4>>2]=j;j=Bb(53407,v)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{v=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(!k)h=j;else{g=k;Ra=A;return g|0}}else h=j;l=d+212|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[w>>2]=c[d+16>>2];c[w+4>>2]=j;j=Bb(53480,w)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{d=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(!k)x=j;else{g=k;Ra=A;return g|0}}else x=j;do if(!(Vc(z,1)|0)){j=c[z+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){d=j;c[d>>2]=f;c[d+4>>2]=g;b[k>>1]=4;break}else{Pg(j,f,g);break}}while(0);c:do if((Gc(z)|0)==100){m=h;n=m+100|0;o=m+136|0;p=m+20|0;q=m+36|0;r=m+40|0;s=m+146|0;t=m+44|0;u=m+32|0;v=m+147|0;w=m+48|0;d=m+64|0;d:do if(!h){i=0;while(1){do if(!(Vc(m,1)|0)){j=c[n>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){h=j;c[h>>2]=i;c[h+4>>2]=0;b[k>>1]=4;break}else{Pg(j,i,0);break}}while(0);j=Nc(z,0)|0;k=((j|0)<0)<<31>>31;do if(!(Vc(m,2)|0)){h=c[n>>2]|0;l=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4;break}else{Pg(l,j,k);break}}while(0);j=Nc(z,1)|0;k=((j|0)<0)<<31>>31;if(!(Vc(m,3)|0)){h=c[n>>2]|0;l=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4}else Pg(l,j,k);Gc(m)|0;j=c[m>>2]|0;h=o;l=c[h+4>>2]|0;if((l|0)>0|(l|0)==0&(c[h>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[p>>2]=770837923;c[q>>2]=-1;c[r>>2]=0;a[s>>0]=2;c[t>>2]=0;c[u>>2]=1;a[v>>0]=-1;c[w>>2]=0;h=d;c[h>>2]=0;c[h+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){u=113;break d}j=c[j+68>>2]&k;if(j|0){u=115;break d}}else Gc(m)|0;if((Gc(z)|0)==100)i=i+1|0;else break c}}else{i=0;while(1){do if(!(Vc(m,1)|0)){j=c[n>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){h=j;c[h>>2]=i;c[h+4>>2]=0;b[k>>1]=4;break}else{Pg(j,i,0);break}}while(0);j=Nc(z,0)|0;k=((j|0)<0)<<31>>31;do if(!(Vc(m,2)|0)){h=c[n>>2]|0;l=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4;break}else{Pg(l,j,k);break}}while(0);j=Nc(z,1)|0;k=((j|0)<0)<<31>>31;if(!(Vc(m,3)|0)){h=c[n>>2]|0;l=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4}else Pg(l,j,k);Gc(m)|0}else Gc(m)|0;j=c[m>>2]|0;h=o;l=c[h+4>>2]|0;if((l|0)>0|(l|0)==0&(c[h>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[p>>2]=770837923;c[q>>2]=-1;c[r>>2]=0;a[s>>0]=2;c[t>>2]=0;c[u>>2]=1;a[v>>0]=-1;c[w>>2]=0;h=d;c[h>>2]=0;c[h+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){u=113;break d}j=c[j+68>>2]&k;if(j|0){u=115;break d}if((Gc(z)|0)==100)i=i+1|0;else break c}}while(0);if((u|0)==113){og(j);if(y){g=7;Ra=A;return g|0}else k=7}else if((u|0)==115)if(y){g=j;Ra=A;return g|0}else k=j;j=c[z>>2]|0;g=z+136|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&(c[g>>2]|0)>>>0>0)hc(j,z);g=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;f=z+64|0;c[f>>2]=0;c[f+4>>2]=0;if(!((g|0)==3082|(a[j+81>>0]|0)!=0)){g=k;Ra=A;return g|0}og(j);g=k;Ra=A;return g|0}while(0);do if(!y){j=c[z>>2]|0;y=z+136|0;d=c[y+4>>2]|0;if((d|0)>0|(d|0)==0&(c[y>>2]|0)>>>0>0)hc(j,z);k=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;z=z+64|0;c[z>>2]=0;c[z+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);g=7;Ra=A;return g|0}else{j=c[j+68>>2]&k;if(!j)break;Ra=A;return j|0}}while(0);l=x;if(Vc(l,1)|0){Gc(l)|0;if(!x){g=0;Ra=A;return g|0}}else{j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){z=j;c[z>>2]=f;c[z+4>>2]=g;b[k>>1]=4}else Pg(j,f,g);Gc(l)|0}j=c[l>>2]|0;g=l+136|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&(c[g>>2]|0)>>>0>0)hc(j,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;g=l+64|0;c[g>>2]=0;c[g+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);g=7;Ra=A;return g|0}else{g=c[j+68>>2]&k;Ra=A;return g|0}return 0}function Hr(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;j=o;k=o+8|0;l=d+92|0;i=c[l>>2]|0;c[k>>2]=i;if(!i){i=c[d+20>>2]|0;c[j>>2]=c[d+16>>2];c[j+4>>2]=i;i=Bb(51598,j)|0;if(!i){n=7;Ra=o;return n|0}j=qd(c[d+12>>2]|0,i,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[k>>2]|0;c[l>>2]=i;if(j){n=j;Ra=o;return n|0}}k=i;do if(!(Vc(k,1)|0)){j=c[k+100>>2]|0;d=j+8|0;if(!(b[d>>1]&9216)){l=j;c[l>>2]=e;c[l+4>>2]=f;b[d>>1]=4;break}else{Pg(j,e,f);break}}while(0);if((g|0)==0|(Vc(k,2)|0)!=0){Gc(k)|0;if(!i)i=0;else n=19}else{i=yc((c[k+100>>2]|0)+40|0,g,h,0,0)|0;if(i|0?(m=c[k>>2]|0,c[m+64>>2]=i,Ne(m,i),m=c[k>>2]|0,(i|0)==3082|(a[m+81>>0]|0)!=0):0)og(m);Gc(k)|0;n=19}do if((n|0)==19){i=c[k>>2]|0;n=k+136|0;m=c[n+4>>2]|0;if((m|0)>0|(m|0)==0&(c[n>>2]|0)>>>0>0)hc(i,k);j=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;n=k+64|0;c[n>>2]=0;c[n+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}while(0);Vc(k,2)|0;n=i;Ra=o;return n|0}function Ir(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;p=x+4|0;q=x;w=c[d>>2]|0;o=(w|0)!=0;a:do if(o){t=w+32|0;j=c[t>>2]|0;u=w+16|0;n=c[u>>2]|0;v=w+20|0;h=c[v>>2]|0;b:do if((h|0)>0){g=0;while(1){if((a[n+g>>0]|0)!=(a[e+g>>0]|0)){s=g;break b}g=g+1|0;if((g|0)>=(h|0)){s=g;break}}}else s=0;while(0);k=((s|0)<0)<<31>>31;m=0;g=s;h=k;do{m=m+1|0;g=bw(g|0,h|0,7)|0;h=L()|0}while(!((g|0)==0&(h|0)==0));r=f-s|0;i=((r|0)<0)<<31>>31;g=0;h=r;l=i;do{g=g+1|0;h=bw(h|0,l|0,7)|0;l=L()|0}while(!((h|0)==0&(l|0)==0));h=r+j+m+g|0;g=c[b+228>>2]|0;do if((h|0)>(g|0)){if(n|0)break a;d=nb(h)|0;c[w+36>>2]=d;if(!d){f=7;Ra=x;return f|0}else{g=c[u>>2]|0;break}}else g=n;while(0);b=w+36|0;if(g){m=(c[b>>2]|0)+j|0;l=m;n=s;while(1){g=n&255;h=l+1|0;a[l>>0]=g|-128;n=bw(n|0,k|0,7)|0;k=L()|0;if((n|0)==0&(k|0)==0)break;else l=h}a[l>>0]=g&127;j=j-m+h|0}l=(c[b>>2]|0)+j|0;k=l;m=r;while(1){g=m&255;h=k+1|0;a[k>>0]=g|-128;m=bw(m|0,i|0,7)|0;i=L()|0;if((m|0)==0&(i|0)==0)break;else k=h}a[k>>0]=g&127;j=h-l+j|0;ew((c[b>>2]|0)+j|0,e+s|0,r|0)|0;c[t>>2]=j+r;j=w+12|0;c[j>>2]=(c[j>>2]|0)+1;j=w+24|0;i=w+28|0;g=c[i>>2]|0;do if((c[j>>2]|0)<(f|0)){h=f<<1;if(mb()|0){f=7;Ra=x;return f|0}g=sb(g,(h|0)>0?h:0,0)|0;if(!g){f=7;Ra=x;return f|0}else{c[j>>2]=h;c[i>>2]=g;break}}while(0);c[u>>2]=g;ew(g|0,e|0,f|0)|0;c[v>>2]=f;f=0;Ra=x;return f|0}else g=c[b+228>>2]|0;while(0);j=nb(g+40|0)|0;c[p>>2]=j;g=j;if(!j){f=7;Ra=x;return f|0};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[j+32>>2]=11;c[j+36>>2]=j+40;if(o){c[q>>2]=c[w>>2];h=Ir(b,q,e,f)|0;i=c[q>>2]|0;if(!(c[w>>2]|0))c[w>>2]=i;c[w+4>>2]=g;c[j+8>>2]=c[w+8>>2];c[j>>2]=i;f=w+28|0;c[j+28>>2]=c[f>>2];c[j+24>>2]=c[w+24>>2];c[f>>2]=0}else{c[j+8>>2]=j;h=Ir(b,p,e,f)|0;g=c[p>>2]|0}c[d>>2]=g;f=h;Ra=x;return f|0}function Jr(d,e,f,g,h,i,j,k,l,m,n,o,p,q){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;v=y+8|0;s=y;t=y+24|0;u=d+100|0;r=c[u>>2]|0;c[t>>2]=r;if(!r){r=c[d+20>>2]|0;c[s>>2]=c[d+16>>2];c[s+4>>2]=r;r=Bb(51725,s)|0;if(!r){x=7;Ra=y;return x|0}s=qd(c[d+12>>2]|0,r,-1,133,0,t,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](r);else{d=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r)}r=c[t>>2]|0;c[u>>2]=r;if(!s)t=r;else{x=s;Ra=y;return x|0}}else t=r;u=t;do if(!(Vc(u,1)|0)){r=c[u+100>>2]|0;s=r+8|0;if(!(b[s>>1]&9216)){d=r;c[d>>2]=e;c[d+4>>2]=f;b[s>>1]=4;break}else{Pg(r,e,f);break}}while(0);r=((g|0)<0)<<31>>31;do if(!(Vc(u,2)|0)){d=c[u+100>>2]|0;s=d+40|0;d=d+48|0;if(!(b[d>>1]&9216)){f=s;c[f>>2]=g;c[f+4>>2]=r;b[d>>1]=4;break}else{Pg(s,g,r);break}}while(0);do if(!(Vc(u,3)|0)){s=c[u+100>>2]|0;r=s+80|0;s=s+88|0;if(!(b[s>>1]&9216)){g=r;c[g>>2]=h;c[g+4>>2]=i;b[s>>1]=4;break}else{Pg(r,h,i);break}}while(0);do if(!(Vc(u,4)|0)){s=c[u+100>>2]|0;r=s+120|0;s=s+128|0;if(!(b[s>>1]&9216)){i=r;c[i>>2]=j;c[i+4>>2]=k;b[s>>1]=4;break}else{Pg(r,j,k);break}}while(0);do if((n|0)==0&(o|0)==0){if(!(Vc(u,5)|0)){s=c[u+100>>2]|0;r=s+160|0;s=s+168|0;if(!(b[s>>1]&9216)){v=r;c[v>>2]=l;c[v+4>>2]=m;b[s>>1]=4;break}else{Pg(r,l,m);break}}}else{r=v;c[r>>2]=l;c[r+4>>2]=m;r=v+8|0;c[r>>2]=n;c[r+4>>2]=o;r=Bb(54991,v)|0;if(!r){x=7;Ra=y;return x|0}else{Tc(u,5,r,-1,90,1)|0;break}}while(0);if((p|0)==0|(Vc(u,6)|0)!=0){Gc(u)|0;if(!t)r=0;else x=38}else{r=yc((c[u+100>>2]|0)+200|0,p,q,0,0)|0;if(r|0?(w=c[u>>2]|0,c[w+64>>2]=r,Ne(w,r),w=c[u>>2]|0,(r|0)==3082|(a[w+81>>0]|0)!=0):0)og(w);Gc(u)|0;x=38}do if((x|0)==38){r=c[u>>2]|0;x=u+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(r,u);s=kc(u)|0;c[u+20>>2]=770837923;c[u+36>>2]=-1;c[u+40>>2]=0;a[u+146>>0]=2;c[u+44>>2]=0;c[u+32>>2]=1;a[u+147>>0]=-1;c[u+48>>2]=0;x=u+64|0;c[x>>2]=0;c[x+4>>2]=0;if((s|0)==3082|(a[r+81>>0]|0)!=0){og(r);r=7;break}else{r=c[r+68>>2]&s;break}}while(0);Vc(u,6)|0;x=r;Ra=y;return x|0}function Kr(a){a=a|0;var b=0,d=0,e=0;if(!a)return;a=c[a+8>>2]|0;Kr(c[a>>2]|0);if(!a)return;do{d=a;a=c[a+4>>2]|0;b=c[d+36>>2]|0;do if(!((b|0)==(d+40|0)|(b|0)==0))if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[d+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((a|0)!=0);return}function Lr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=Ra;Ra=Ra+48|0;j=l+32|0;i=l+24|0;h=l+16|0;g=l+8|0;e=l;k=l+40|0;Fr(b);do if(d|0){f=b+64|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[e>>2]=c[b+16>>2];c[e+4>>2]=d;d=Bb(51372,e)|0;if(!d){k=7;Ra=l;return k|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(d|0){d=c[f>>2]|0;m=f+136|0;e=c[m+4>>2]|0;if((e|0)>0|(e|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);m=7;Ra=l;return m|0}else{d=c[d+68>>2]&e;if(!d)break;Ra=l;return d|0}}}while(0);f=b+68|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[g>>2]=c[b+16>>2];c[g+4>>2]=d;d=Bb(51400,g)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;do if(d|0){e=c[f>>2]|0;m=f+136|0;g=c[m+4>>2]|0;if((g|0)>0|(g|0)==0&(c[m>>2]|0)>>>0>0)hc(e,f);d=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((d|0)==3082|(a[e+81>>0]|0)!=0){og(e);m=7;Ra=l;return m|0}else{d=c[e+68>>2]&d;if(!d)break;Ra=l;return d|0}}while(0);f=b+72|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[h>>2]=c[b+16>>2];c[h+4>>2]=d;d=Bb(51429,h)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;do if(!d)d=0;else{d=c[f>>2]|0;m=f+136|0;h=c[m+4>>2]|0;if((h|0)>0|(h|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if(!((e|0)==3082|(a[d+81>>0]|0)!=0)){d=c[d+68>>2]&e;break}og(d);m=7;Ra=l;return m|0}while(0);do if((d|0)==0&(a[b+234>>0]|0)!=0){f=b+76|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[i>>2]=c[b+16>>2];c[i+4>>2]=d;d=Bb(51456,i)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(!d)d=0;else{d=c[f>>2]|0;m=f+136|0;i=c[m+4>>2]|0;if((i|0)>0|(i|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if(!((e|0)==3082|(a[d+81>>0]|0)!=0)){d=c[d+68>>2]&e;break}og(d);m=7;Ra=l;return m|0}}while(0);if(!((d|0)==0&(a[b+233>>0]|0)!=0)){m=d;Ra=l;return m|0}f=b+80|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[j>>2]=c[b+16>>2];c[j+4>>2]=d;d=Bb(51484,j)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(!d){m=0;Ra=l;return m|0}d=c[f>>2]|0;m=f+136|0;k=c[m+4>>2]|0;if((k|0)>0|(k|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);m=7;Ra=l;return m|0}else{m=c[d+68>>2]&e;Ra=l;return m|0}return 0}function Mr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+32|0;i=s+20|0;n=s+16|0;o=s+12|0;p=s+8|0;q=s+4|0;m=s;c[n>>2]=0;c[o>>2]=0;c[p>>2]=0;c[m>>2]=0;g=c[a+36>>2]|0;r=c[g>>2]|0;if(!d){c[f>>2]=0;f=0;Ra=s;return f|0}c[i>>2]=0;d=Za[c[r+12>>2]&127](g,d,-1,i)|0;do if(!d){c[c[i>>2]>>2]=g;if((c[r>>2]|0)>0?(h=Xa[c[r+24>>2]&255](c[i>>2]|0,b)|0,h|0):0){Wa[c[r+16>>2]&127](c[i>>2]|0)|0;c[i>>2]=0;d=h;break}l=c[i>>2]|0;i=c[r+20>>2]|0;j=a+256|0;k=a+252|0;d=$a[i&127](l,q,m,n,o,p)|0;a:do if(!d){b=0;do{h=c[p>>2]|0;b=(h|0)<(b|0)?b:h+1|0;d=c[q>>2]|0;g=c[m>>2]|0;if((h|0)<0|(d|0)==0|(g|0)<1){d=1;break a}d=Nr(a,e,h,(c[j>>2]|0)+4|0,d,g)|0;if(d|0)break a;h=1;while(1){if((h|0)>=(c[k>>2]|0))break;d=c[j>>2]|0;g=c[d+(h*24|0)>>2]|0;if((c[m>>2]|0)<(g|0))d=0;else d=Nr(a,e,c[p>>2]|0,d+(h*24|0)+4|0,c[q>>2]|0,g)|0;if(!d)h=h+1|0;else break a}d=$a[i&127](l,q,m,n,o,p)|0}while((d|0)==0)}else b=0;while(0);Wa[c[r+16>>2]&127](l)|0;c[f>>2]=(c[f>>2]|0)+b;f=(d|0)==101?0:d;Ra=s;return f|0}while(0);f=d;Ra=s;return f|0}function Nr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r+4|0;q=r;c[q>>2]=0;a:do if((((f|0)!=0?(m=f+16|0,(c[m>>2]|0)!=0):0)?(k=Xa[(a[f>>0]<<24>>24==1?154:155)&255](g,h)|0,k=(c[f+12>>2]|0)+-1&k,l=c[m>>2]|0,(l|0)!=0):0)?(j=c[l+(k<<3)>>2]|0,n=(a[f>>0]|0)==1?79:80,i=c[l+(k<<3)+4>>2]|0,(j|0)!=0&(i|0)!=0):0){while(1){j=j+-1|0;if(!(Za[n&127](c[i+12>>2]|0,c[i+16>>2]|0,g,h)|0))break;i=c[i>>2]|0;if(!((j|0)!=0&(i|0)!=0)){o=8;break a}}i=c[i+8>>2]|0;c[p>>2]=i;if(!i)i=p;else{n=b+264|0;c[n>>2]=-20-h-(c[i>>2]|0)+(c[n>>2]|0);i=p}}else o=8;while(0);if((o|0)==8){c[p>>2]=0;i=p}o=b+272|0;if(wr(p,c[o>>2]|0,c[o+4>>2]|0,d,((d|0)<0)<<31>>31,e,((e|0)<0)<<31>>31,q)|0?(o=c[p>>2]|0,(o|0)==(Ep(f,g,h,o)|0)):0){i=c[i>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{p=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[q>>2]=7;q=7;Ra=r;return q|0}i=c[q>>2]|0;if(i|0){q=i;Ra=r;return q|0}q=b+264|0;c[q>>2]=h+20+(c[c[p>>2]>>2]|0)+(c[q>>2]|0);q=0;Ra=r;return q|0}\nfunction Ll(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;ra=Ra;Ra=Ra+160|0;ba=ra+8|0;A=ra;ma=ra+64|0;na=ra+12|0;oa=h+80|0;da=c[f>>2]|0;y=j+64|0;_=c[y>>2]|0;v=h+4|0;ea=c[v>>2]|0;p=a[j+44>>0]|0;fa=p&255;n=ea+8+(fa*72|0)|0;ia=c[ea+8+(fa*72|0)+40>>2]|0;o=c[h+492>>2]|0;a:do if((o|0)>0){m=0;while(1){if((c[h+496+(m<<2)>>2]|0)==(ia|0))break;m=m+1|0;if((m|0)>=(o|0)){m=0;o=0;break a}}m=cw(1,0,m|0)|0;o=L()|0}else{m=0;o=0}while(0);qa=j+72|0;w=qa;c[w>>2]=~m&k;c[w+4>>2]=~o&l;w=h+64|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,i|0)|0;L()|0;aa=w&1;q=f+56|0;pa=c[q>>2]|0;z=pa+-1|0;Q=j+16|0;c[Q>>2]=z;ca=j+12|0;c[ca>>2]=z;pa=pa+-2|0;c[q>>2]=pa;D=j+24|0;c[D>>2]=pa;do if(p<<24>>24?a[ea+8+(fa*72|0)+36>>0]&8:0){o=f+44|0;m=(c[o>>2]|0)+1|0;c[o>>2]=m;c[j>>2]=m;o=g+108|0;p=c[o>>2]|0;if((c[g+112>>2]|0)>(p|0)){c[o>>2]=p+1;$=c[g+104>>2]|0;a[$+(p*20|0)>>0]=70;b[$+(p*20|0)+2>>1]=0;c[$+(p*20|0)+4>>2]=0;c[$+(p*20|0)+8>>2]=m;c[$+(p*20|0)+12>>2]=0;c[$+(p*20|0)+16>>2]=0;a[$+(p*20|0)+1>>0]=0;break}else{Di(g,70,0,m,0)|0;break}}while(0);b:do if((i|0)>0){m=i;while(1){if(c[h+752+(m*80|0)>>2]|0)break b;o=m+-1|0;if((m|0)>1)m=o;else{m=o;break}}}else m=i;while(0);p=c[h+752+(m*80|0)+12>>2]|0;m=a[ea+8+(fa*72|0)+37>>0]|0;c:do if(!(m&16)){$=_+36|0;o=c[$>>2]|0;if(o&1024|0){r=b[_+40>>1]|0;t=r&65535;m=t+2|0;n=f+32|0;o=c[n>>2]|0;p=f+28|0;q=c[p>>2]|0;if((q|0)<(m|0)){ba=f+44|0;u=c[ba>>2]|0;c[ba>>2]=u+m;u=u+1|0}else{c[n>>2]=m+o;c[p>>2]=q-m;u=o}m=c[ca>>2]|0;i=r<<16>>16==0;if(i)p=m;else{q=u+2|0;r=_+48|0;p=0;do{n=q+p|0;o=c[(c[r>>2]|0)+(p<<2)>>2]|0;do if(o)if(!(b[o+12>>1]&1)){km(f,c[(c[o>>2]|0)+16>>2]|0,n,1);break}else{jm(f,o,j,p,aa,n)|0;m=c[Q>>2]|0;break}while(0);p=p+1|0}while((p|0)!=(t|0));p=m}m=c[_+24>>2]|0;o=g+108|0;n=c[o>>2]|0;C=g+112|0;if((c[C>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=70;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=m;c[ca+(n*20|0)+8>>2]=u;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,70,m,u,0)|0;m=u+1|0;n=c[o>>2]|0;if((c[C>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=70;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=t;c[ca+(n*20|0)+8>>2]=m;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,70,t,m,0)|0;q=c[_+32>>2]|0;r=_+28|0;s=(a[r>>0]|0)==0?-1:-7;m=c[o>>2]|0;if((c[C>>2]|0)>(m|0)){c[o>>2]=m+1;ca=c[g+104>>2]|0;a[ca+(m*20|0)>>0]=9;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=ia;c[ca+(m*20|0)+8>>2]=p;c[ca+(m*20|0)+12>>2]=u;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(g,9,ia,p,u)|0;n=c[g>>2]|0;do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[o>>2]|0)+-1|0;n=c[g+104>>2]|0;p=n+(m*20|0)+1|0;if(a[p>>0]|0){Ei(g,n+(m*20|0)|0,q,s);break}if(q|0){c[n+(m*20|0)+16>>2]=q;a[p>>0]=s}}else kg(n,s,q);while(0);a[r>>0]=0;c[j+48>>2]=ia;a[j+45>>0]=(a[h+49>>0]|0)==0?60:-86;c[j+52>>2]=c[o>>2];if(i){E=0;break}B=_+48|0;w=_+30|0;x=da+81|0;y=j+60|0;z=ma+4|0;A=g+104|0;v=u+2|0;m=c[j+56>>2]|0;while(1){u=t;t=t+-1|0;i=c[(c[B>>2]|0)+(t<<2)>>2]|0;if((u|0)<17?(1<<t&e[w>>1]|0)!=0:0)lm(j,i);else if(b[i+12>>1]&1){do if(!(a[x>>0]|0)){m=m+-1|0;n=c[(c[y>>2]|0)+(m*20|0)+4>>2]|0;if((n|0)<0)n=(c[o>>2]|0)+-1|0;if(!(a[(c[g>>2]|0)+81>>0]|0))n=(c[A>>2]|0)+(n*20|0)|0;else n=59308;q=a[n>>0]|0;r=c[n+4>>2]|0;s=c[n+8>>2]|0;n=c[n+12>>2]|0;p=c[o>>2]|0;if((c[C>>2]|0)>(p|0)){c[o>>2]=p+1;ca=c[A>>2]|0;a[ca+(p*20|0)>>0]=q;b[ca+(p*20|0)+2>>1]=0;c[ca+(p*20|0)+4>>2]=r;c[ca+(p*20|0)+8>>2]=s;c[ca+(p*20|0)+12>>2]=n;c[ca+(p*20|0)+16>>2]=0;a[ca+(p*20|0)+1>>0]=0;break}else{Di(g,q&255,r,s,n)|0;break}}while(0);p=ej(f,53,0,0)|0;if(p){q=p+12|0;c[q>>2]=c[(c[i>>2]|0)+12>>2];c[ma>>2]=0;c[z>>2]=0;n=oj(da,168,ma,0)|0;c[p+16>>2]=n;if(n|0){c[n+28>>2]=v+t;Tj(f,p,c[D>>2]|0,0)}c[q>>2]=0;ni(da,p)}}if((u|0)<=1){E=0;break c}}}if(!((o&256|0)==0|(o&5|0)==0)){q=c[c[_+48>>2]>>2]|0;p=f+44|0;m=(c[p>>2]|0)+1|0;c[p>>2]=m;p=jm(f,q,j,0,aa,m)|0;if(!((m|0)==0|(p|0)==(m|0))?(r=f+19|0,s=a[r>>0]|0,(s&255)<8):0){a[r>>0]=s+1<<24>>24;c[f+148+((s&255)<<2)>>2]=m}m=c[Q>>2]|0;o=g+108|0;n=c[o>>2]|0;if((c[g+112>>2]|0)>(n|0)){c[o>>2]=n+1;da=c[g+104>>2]|0;a[da+(n*20|0)>>0]=30;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=ia;c[da+(n*20|0)+8>>2]=m;c[da+(n*20|0)+12>>2]=p;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(g,30,ia,m,p)|0;a[j+45>>0]=-86;da=q+40|0;ca=qa;if(!((c[ca>>2]&c[da>>2]|0)==0?(c[ca+4>>2]&c[da+4>>2]|0)==0:0)){E=0;break}E=q+10|0;b[E>>1]=b[E>>1]|4;E=0;break}if((o&258|0)==258){if(!(o&32)){n=0;m=0}else{n=c[c[_+48>>2]>>2]|0;m=1}if(!(o&16))m=0;else m=c[(c[_+48>>2]|0)+(m<<2)>>2]|0;da=(aa|0)==0;i=da?m:n;n=da?n:m;do if(!n){m=aa<<2^36;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;da=c[g+104>>2]|0;a[da+(o*20|0)>>0]=m;b[da+(o*20|0)+2>>1]=0;c[da+(o*20|0)+4>>2]=ia;c[da+(o*20|0)+8>>2]=p;c[da+(o*20|0)+12>>2]=0;c[da+(o*20|0)+16>>2]=0;a[da+(o*20|0)+1>>0]=0;break}else{Di(g,m,ia,p,0)|0;break}}else{q=c[n>>2]|0;o=c[q+16>>2]|0;m=a[o>>0]|0;if(m<<24>>24==-88)m=a[o+38>>0]|0;switch(m<<24>>24){case -87:{m=o+20|0;ga=90;break}case -125:{m=c[o+20>>2]|0;ga=90;break}default:ga=95}if((ga|0)==90)if((c[c[m>>2]>>2]|0)<2)ga=95;else{m=f+19|0;n=a[m>>0]|0;if(!(n<<24>>24)){da=f+44|0;m=(c[da>>2]|0)+1|0;c[da>>2]=m}else{da=n+-1<<24>>24;a[m>>0]=da;m=c[f+148+((da&255)<<2)>>2]|0}c[ma>>2]=m;km(f,o,m,1);p=m;m=((a[q>>0]|0)+1&2|1)&255}if((ga|0)==95){p=Lj(f,o,ma)|0;lm(j,n);m=(d[q>>0]|0)+-54|0}m=a[44005+m>>0]|0;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;da=c[g+104>>2]|0;a[da+(o*20|0)>>0]=m;b[da+(o*20|0)+2>>1]=0;c[da+(o*20|0)+4>>2]=ia;c[da+(o*20|0)+8>>2]=z;c[da+(o*20|0)+12>>2]=p;c[da+(o*20|0)+16>>2]=0;a[da+(o*20|0)+1>>0]=0}else Di(g,m&255,ia,z,p)|0;m=c[ma>>2]|0;if(m|0?(t=f+19|0,u=a[t>>0]|0,(u&255)<8):0){a[t>>0]=u+1<<24>>24;c[f+148+((u&255)<<2)>>2]=m}}while(0);do if(!i){r=0;q=170}else{o=c[i>>2]|0;s=f+44|0;r=(c[s>>2]|0)+1|0;c[s>>2]=r;s=o+16|0;km(f,c[s>>2]|0,r,1);s=c[s>>2]|0;m=a[s>>0]|0;p=m<<24>>24==-88;if(p)n=a[s+38>>0]|0;else n=m;switch(n<<24>>24){case -87:{n=s+20|0;ga=112;break}case -125:{n=c[s+20>>2]|0;ga=112;break}default:ga=113}if((ga|0)==112)if((c[c[n>>2]>>2]|0)<2)ga=113;else ga=115;d:do if((ga|0)==113){switch(a[o>>0]|0){case 54:case 56:break;default:{ga=115;break d}}q=(aa<<1^2)+55|0}while(0);if((ga|0)==115)q=(aa<<1)+54|0;if(p)m=a[s+38>>0]|0;switch(m<<24>>24){case -87:{x=s+20|0;ga=121;break}case -125:{x=c[s+20>>2]|0;ga=121;break}default:{}}if((ga|0)==121?(c[c[x>>2]>>2]|0)>=2:0)break;lm(j,i)}while(0);o=g+108|0;m=c[o>>2]|0;a[j+45>>0]=5-aa;c[j+48>>2]=ia;c[j+52>>2]=m;if((q|0)==170){E=0;break}p=f+44|0;n=(c[p>>2]|0)+1|0;c[p>>2]=n;p=g+112|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=-128;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=ia;c[da+(m*20|0)+8>>2]=n;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,128,ia,n,0)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=q;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=r;c[da+(m*20|0)+8>>2]=z;c[da+(m*20|0)+12>>2]=n;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,q,r,z,n)|0;m=c[o>>2]|0;if((m|0)<=0){E=0;break}b[(c[g+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=83;E=0;break}if(!(o&512)){if(!(o&8192)){if(m&32){a[j+45>>0]=-86;E=0;o=g+108|0;break}a[j+45>>0]=a[44045+aa>>0]|0;c[j+48>>2]=ia;m=a[44047+aa>>0]|0;o=g+108|0;n=c[o>>2]|0;if((c[g+112>>2]|0)>(n|0)){da=n+1|0;c[o>>2]=da;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=m;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=ia;c[ca+(n*20|0)+8>>2]=p;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0;m=da}else m=(Di(g,m&255,ia,p,0)|0)+1|0;c[j+52>>2]=m;a[j+47>>0]=1;E=0;break}s=f+40|0;Z=c[s>>2]|0;c[s>>2]=Z+1;W=f+44|0;X=(c[W>>2]|0)+1|0;c[W>>2]=X;$=c[q>>2]|0;Y=$+-1|0;c[q>>2]=Y;V=c[ea+8+(fa*72|0)+16>>2]|0;aa=c[c[_+48>>2]>>2]|0;u=c[aa+28>>2]|0;a[j+45>>0]=66;c[j+48>>2]=X;_=h+46|0;m=a[_>>0]|0;if((m&255)>1){r=(m&255)-i|0;q=(r*72|0)+8|0;e:do if(!da){U=Sv(q|0,0,-1,-1)|0;T=L()|0;if(T>>>0>0|(T|0)==0&U>>>0>2147483390){qa=l;f=k;K(qa|0);Ra=ra;return f|0}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](q)|0;ga=627;break}p=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;o=59064;m=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&m>>>0>0){U=c[14978]|0;T=Tv(m|0,o|0,p|0,((p|0)<0)<<31>>31|0)|0;S=L()|0;c[14768]=((S|0)<0|(S|0)==0&T>>>0<=U>>>0)&1}m=Wa[c[29340>>2]&127](p)|0;if(!m){qa=l;f=k;K(qa|0);Ra=ra;return f|0}o=Wa[c[29352>>2]&127](m)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[da+272>>2]|0){if(a[da+81>>0]|0){qa=l;f=k;K(qa|0);Ra=ra;return f|0}}else{do if(!(0<0|(0==0?(e[da+276>>1]|0)>>>0<q>>>0:0))){o=da+300|0;m=c[o>>2]|0;if(m|0){c[o>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=627;break e}o=da+296|0;m=c[o>>2]|0;if(!m){m=da+292|0;break}else{c[o>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=627;break e}}else m=da+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(da,q,0)|0;ga=627}while(0);if((ga|0)==627)if(!m){qa=l;f=k;K(qa|0);Ra=ra;return f|0}q=r&255;c[m+4>>2]=q;c[m>>2]=q;q=m+8|0;E=q;D=E+72|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));p=c[v>>2]|0;if((r|0)>1){o=1;do{E=q+(o*72|0)|0;n=p+8+((d[j+(o*80|0)+44>>0]|0)*72|0)|0;D=E+72|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));o=o+1|0}while((o|0)!=(r|0));T=m;U=m}else{T=m;U=m}}else{U=c[v>>2]|0;T=U}S=h+44|0;if(!(b[S>>1]&16)){f:do if(!(c[V+36>>2]&32)){m=(c[W>>2]|0)+1|0;c[W>>2]=m;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;R=c[g+104>>2]|0;a[R+(o*20|0)>>0]=73;b[R+(o*20|0)+2>>1]=0;c[R+(o*20|0)+4>>2]=0;c[R+(o*20|0)+8>>2]=m;c[R+(o*20|0)+12>>2]=0;c[R+(o*20|0)+16>>2]=0;a[R+(o*20|0)+1>>0]=0;break}else{Di(g,73,0,m,0)|0;break}}else{m=c[V+8>>2]|0;g:do if(!m)m=0;else while(1){R=m+55|0;if(((d[R>>0]|d[R+1>>0]<<8)&3)==2)break g;m=c[m+20>>2]|0;if(!m){m=0;break}}while(0);q=c[s>>2]|0;c[s>>2]=q+1;n=e[m+50>>1]|0;o=g+108|0;p=c[o>>2]|0;if((c[g+112>>2]|0)>(p|0)){c[o>>2]=p+1;R=c[g+104>>2]|0;a[R+(p*20|0)>>0]=113;b[R+(p*20|0)+2>>1]=0;c[R+(p*20|0)+4>>2]=q;c[R+(p*20|0)+8>>2]=n;c[R+(p*20|0)+12>>2]=0;c[R+(p*20|0)+16>>2]=0;a[R+(p*20|0)+1>>0]=0}else Di(g,113,q,n,0)|0;n=c[f+8>>2]|0;o=Ij(f,m)|0;if(o){m=c[n>>2]|0;if(!(a[m+81>>0]|0)){R=c[n+104>>2]|0;m=(c[n+108>>2]|0)+-1|0;a[R+(m*20|0)+1>>0]=-9;c[R+(m*20|0)+16>>2]=o;m=q;break}if(c[m+480>>2]|0){m=q;break}R=(c[o>>2]|0)+-1|0;c[o>>2]=R;if(R|0){m=q;break}m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);m=q;break f}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;m=m+300|0;c[o>>2]=c[m>>2];c[m>>2]=o;m=q;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);m=q;break}else{m=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);m=q;break}}else m=q}while(0);P=(c[W>>2]|0)+1|0;c[W>>2]=P}else{P=0;m=0}o=g+108|0;n=c[o>>2]|0;R=g+112|0;if((c[R>>2]|0)>(n|0)){c[o>>2]=n+1;Q=c[g+104>>2]|0;a[Q+(n*20|0)>>0]=70;b[Q+(n*20|0)+2>>1]=0;c[Q+(n*20|0)+4>>2]=0;c[Q+(n*20|0)+8>>2]=X;c[Q+(n*20|0)+12>>2]=0;c[Q+(n*20|0)+16>>2]=0;a[Q+(n*20|0)+1>>0]=0;Q=n}else Q=Di(g,70,0,X,0)|0;i=h+92|0;n=c[i>>2]|0;if((n|0)>1){t=h+100|0;s=0;p=0;do{q=c[t>>2]|0;O=q+(s*48|0)|0;r=c[O>>2]|0;do if((O|0)!=(aa|0)?(b[q+(s*48|0)+10>>1]&6)==0:0){if(!(b[q+(s*48|0)+12>>1]&8191))break;if(!r)n=0;else n=dk(da,r,0,0)|0;p=Xk(da,p,n)|0;n=c[i>>2]|0}while(0);s=s+1|0}while((s|0)<(n|0));if(p)O=ej(f,65580,0,p)|0;else O=0}else O=0;N=b[S>>1]&1024|32;nk(f,1,44021,A);M=u+12|0;if((c[M>>2]|0)>0){A=u+20|0;B=(O|0)==0;C=O+12|0;D=V+36|0;E=V+8|0;F=g+104|0;G=f+19|0;H=f+32|0;I=f+28|0;p=f+212|0;J=f+8|0;n=0;r=0;q=0;do{s=c[A>>2]|0;do if((c[s+(n*48|0)+20>>2]|0)==(ia|0))ga=679;else{if(b[s+(n*48|0)+12>>1]&1024){ga=679;break}n=n+1|0}while(0);do if((ga|0)==679){ga=0;s=c[s+(n*48|0)>>2]|0;if(!B){c[C>>2]=s;s=O}z=n+1|0;c[ba>>2]=z;nk(f,1,44036,ba);y=ql(f,T,s,0,0,N,Z)|0;if(!y){n=z;break}Kl(f,T,y+752|0,0);do if(!(b[S>>1]&16)){v=(n|0)==((c[M>>2]|0)+-1|0)?-1:n;if(!(c[D>>2]&32)){Vj(g,V,ia,-1,P);s=c[o>>2]|0;if((c[R>>2]|0)>(s|0)){c[o>>2]=s+1;x=c[F>>2]|0;a[x+(s*20|0)>>0]=42;b[x+(s*20|0)+2>>1]=0;c[x+(s*20|0)+4>>2]=m;c[x+(s*20|0)+8>>2]=0;c[x+(s*20|0)+12>>2]=P;c[x+(s*20|0)+16>>2]=0;a[x+(s*20|0)+1>>0]=0}else s=Di(g,42,m,0,P)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;x=c[F>>2]|0;a[x+(s*20|0)+1>>0]=-3;c[x+(s*20|0)+16>>2]=v;break}s=c[E>>2]|0;h:do if(!s)s=0;else while(1){x=s+55|0;if(((d[x>>0]|d[x+1>>0]<<8)&3)==2)break h;s=c[s+20>>2]|0;if(!s){s=0;break}}while(0);u=b[s+50>>1]|0;w=u&65535;x=u<<16>>16==1;do if(x){i=a[G>>0]|0;if(!(i<<24>>24)){i=(c[W>>2]|0)+1|0;c[W>>2]=i;ga=701;break}else{i=i+-1<<24>>24;a[G>>0]=i;i=c[f+148+((i&255)<<2)>>2]|0;ga=701;break}}else{i=c[H>>2]|0;t=c[I>>2]|0;if((t|0)<(w|0)){i=c[W>>2]|0;c[W>>2]=i+w;i=i+1|0}else{c[H>>2]=i+w;c[I>>2]=t-w}if(!(u<<16>>16))u=i;else ga=701}while(0);if((ga|0)==701){ga=0;t=s+4|0;s=0;do{Vj(g,V,ia,b[(c[t>>2]|0)+(s<<1)>>1]|0,s+i|0);s=s+1|0}while((s|0)!=(w|0));u=i}t=(v|0)!=0;if(t){s=c[o>>2]|0;if((c[R>>2]|0)>(s|0)){c[o>>2]=s+1;i=c[F>>2]|0;a[i+(s*20|0)>>0]=29;b[i+(s*20|0)+2>>1]=0;c[i+(s*20|0)+4>>2]=m;c[i+(s*20|0)+8>>2]=0;c[i+(s*20|0)+12>>2]=u;c[i+(s*20|0)+16>>2]=0;a[i+(s*20|0)+1>>0]=0}else s=Di(g,29,m,0,u)|0;if(!(a[(c[g>>2]|0)+81>>0]|0)){i=c[F>>2]|0;a[i+(s*20|0)+1>>0]=-3;c[i+(s*20|0)+16>>2]=w}if((v|0)>-1)ga=710}else{s=0;ga=710}do if((ga|0)==710){ga=0;i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;v=c[F>>2]|0;a[v+(i*20|0)>>0]=92;b[v+(i*20|0)+2>>1]=0;c[v+(i*20|0)+4>>2]=u;c[v+(i*20|0)+8>>2]=w;c[v+(i*20|0)+12>>2]=P;c[v+(i*20|0)+16>>2]=0;a[v+(i*20|0)+1>>0]=0}else Di(g,92,u,w,P)|0;i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;v=c[F>>2]|0;a[v+(i*20|0)>>0]=-124;b[v+(i*20|0)+2>>1]=0;c[v+(i*20|0)+4>>2]=m;c[v+(i*20|0)+8>>2]=P;c[v+(i*20|0)+12>>2]=u;c[v+(i*20|0)+16>>2]=0;a[v+(i*20|0)+1>>0]=0}else i=Di(g,132,m,P,u)|0;if(!(a[(c[g>>2]|0)+81>>0]|0)){v=c[F>>2]|0;a[v+(i*20|0)+1>>0]=-3;c[v+(i*20|0)+16>>2]=w}if(!t)break;i=c[o>>2]|0;if((i|0)<=0)break;b[(c[F>>2]|0)+((i+-1|0)*20|0)+2>>1]=16}while(0);if(!x){if((c[I>>2]|0)>=(w|0))break;c[I>>2]=w;c[H>>2]=u;break}if(!u)break;i=a[G>>0]|0;if((i&255)>=8)break;a[G>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=u}else s=0;while(0);i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;x=c[F>>2]|0;a[x+(i*20|0)>>0]=12;b[x+(i*20|0)+2>>1]=0;c[x+(i*20|0)+4>>2]=X;c[x+(i*20|0)+8>>2]=Y;c[x+(i*20|0)+12>>2]=0;c[x+(i*20|0)+16>>2]=0;a[x+(i*20|0)+1>>0]=0}else Di(g,12,X,Y,0)|0;if(s|0){i=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))s=(c[F>>2]|0)+(((s|0)<0?i+-1|0:s)*20|0)|0;else s=59308;c[s+8>>2]=i}r=(a[y+50>>0]|0)==0?r:1;s=c[y+816>>2]|0;do if(!(c[s+36>>2]&512))q=0;else{if(n|0?(c[s+32>>2]|0)!=(q|0):0){q=0;break}q=c[s+32>>2]|0;if(c[D>>2]&32|0?(x=q+55|0,((d[x>>0]|d[x+1>>0]<<8)&3)==2):0){q=0;break}}while(0);sl(y);n=c[p>>2]|0;if(!n)n=0;else{s=c[J>>2]|0;if((n|0)<0)n=(c[s+108>>2]|0)+-1|0;if(!(a[(c[s>>2]|0)+81>>0]|0))n=(c[s+104>>2]|0)+(n*20|0)|0;else n=59308;n=c[n+8>>2]|0}c[p>>2]=n;n=z}while(0)}while((n|0)<(c[M>>2]|0))}else{r=0;q=0;p=f+212|0}m=c[p>>2]|0;if(!m)m=0;else{n=c[f+8>>2]|0;if((m|0)<0)m=(c[n+108>>2]|0)+-1|0;if(!(a[(c[n>>2]|0)+81>>0]|0))m=(c[n+104>>2]|0)+(m*20|0)|0;else m=59308;m=c[m+8>>2]|0}c[p>>2]=m;c[j+56>>2]=q;if(q|0)c[j+8>>2]=Z;if(O|0){c[O+12>>2]=0;ni(da,O)}n=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((Q|0)<0?n+-1|0:Q)*20|0)|0;else m=59308;c[m+4>>2]=n;m=c[ca>>2]|0;if((c[R>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=11;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=0;c[ca+(n*20|0)+8>>2]=m;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,11,0,m,0)|0;n=c[g+12>>2]|0;m=0-$|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0)mk(n,g,m);else c[(c[n+64>>2]|0)+(m<<2)>>2]=c[o>>2];i:do if(!((U|0)==0|(d[_>>0]|0)<2)){do if(da|0){if(c[da+480>>2]|0){Xd(da,U);break i}m=U;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;da=da+300|0;c[U>>2]=c[da>>2];c[da>>2]=U;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](U);break}else{da=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);break}}while(0);if(r|0){E=0;break}lm(j,aa);E=0;break}M=b[_+24>>1]|0;t=b[_+26>>1]|0;u=b[_+28>>1]|0;Y=c[_+32>>2]|0;x=j+8|0;Z=c[x>>2]|0;X=h+44|0;if((b[X>>1]&1)!=0?(a[h+47>>0]|0)>0:0){i=(e[Y+50>>1]|0)>(M&65535);m=i&1;i=i&1}else{m=0;i=0}p=M&65535;n=t&65535;if(!(o&32)){v=0;n=p}else{v=c[(c[_+48>>2]|0)+(p<<2)>>2]|0;m=m>>>0>n>>>0?m:n;n=p+1|0}do if(o&16){s=c[(c[_+48>>2]|0)+(n<<2)>>2]|0;ba=u&65535;m=(m|0)>(ba|0)?m:ba;if(b[s+10>>1]&256){o=f+44|0;n=(c[o>>2]|0)+1|0;c[o>>2]=n;o=j+36|0;c[o>>2]=n;q=g+108|0;r=c[q>>2]|0;if((c[g+112>>2]|0)>(r|0)){c[q>>2]=r+1;ba=c[g+104>>2]|0;a[ba+(r*20|0)>>0]=70;b[ba+(r*20|0)+2>>1]=0;c[ba+(r*20|0)+4>>2]=1;c[ba+(r*20|0)+8>>2]=n;c[ba+(r*20|0)+12>>2]=0;c[ba+(r*20|0)+16>>2]=0;a[ba+(r*20|0)+1>>0]=0}else Di(g,70,1,n,0)|0;c[j+40>>2]=c[q>>2];ba=c[o>>2]<<1;c[o>>2]=ba;c[o>>2]=aa^(a[(c[Y+28>>2]|0)+p>>0]|0)==1|ba}if(!v){n=b[(c[Y+4>>2]|0)+(p<<1)>>1]|0;if(n<<16>>16>-1){if(a[(c[(c[Y+12>>2]|0)+4>>2]|0)+(n<<16>>16<<4)+12>>0]|0){o=i;break}}else if(n<<16>>16!=-2){o=i;break}o=1}else o=i}else{s=0;o=i}while(0);n=b[Y+50>>1]|0;if((M&65535)<(n&65535)?!(((w&1|0)!=0|0!=0)^(a[(c[Y+28>>2]|0)+p>>0]|0)==0):0)ga=152;else if(aa|0?n<<16>>16==M<<16>>16:0)ga=152;else{N=t;R=0;P=v;v=s;J=o}if((ga|0)==152){N=u;u=t&255;R=o;P=s;J=0}T=f+8|0;I=c[T>>2]|0;w=c[y>>2]|0;y=b[w+24>>1]|0;G=b[w+42>>1]|0;q=c[w+32>>2]|0;V=f+44|0;o=c[V>>2]|0;F=o+1|0;H=y&65535;z=m+H|0;c[V>>2]=o+z;o=c[f>>2]|0;q=gl(o,q)|0;j:do if(!q)U=0;else{r=(Eu(q)|0)+1|0;k:do if(!o){ba=Sv(r|0,0,-1,-1)|0;U=L()|0;if(U>>>0>0|(U|0)==0&ba>>>0>2147483390){U=0;break j}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](r)|0;ga=178;break}m=Wa[c[29356>>2]&127](r)|0;if((c[14985]|0)>>>0<r>>>0)c[14985]=r;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){ba=c[14978]|0;U=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&U>>>0<=ba>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){U=0;break j}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){U=0;break j}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<r>>>0:0))){n=o+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=o+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=178;break k}n=o+296|0;m=c[n>>2]|0;if(!m){m=o+292|0;break}else{c[n>>2]=c[m>>2];ga=o+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=178;break k}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(o,r,0)|0;ga=178}while(0);if((ga|0)==178)if(!m){U=0;break}ew(m|0,q|0,r|0)|0;U=m}while(0);l:do if(G<<16>>16){s=c[x>>2]|0;q=(aa|0)==0;m=aa<<2^36;i=I+108|0;n=c[i>>2]|0;t=I+112|0;if((c[t>>2]|0)>(n|0)){c[i>>2]=n+1;ba=c[I+104>>2]|0;a[ba+(n*20|0)>>0]=m;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=s;c[ba+(n*20|0)+8>>2]=0;c[ba+(n*20|0)+12>>2]=0;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0}else Di(I,m,s,0,0)|0;m=c[i>>2]|0;if((c[t>>2]|0)>(m|0)){c[i>>2]=m+1;E=c[I+104>>2]|0;a[E+(m*20|0)>>0]=11;E=E+(m*20|0)+1|0;D=E+19|0;do{a[E>>0]=0;E=E+1|0}while((E|0)<(D|0));o=m}else o=Di(I,11,0,0,0)|0;n=q?25:22;r=G&65535;m=c[i>>2]|0;if((c[t>>2]|0)>(m|0)){c[i>>2]=m+1;ba=c[I+104>>2]|0;a[ba+(m*20|0)>>0]=n;b[ba+(m*20|0)+2>>1]=0;c[ba+(m*20|0)+4>>2]=s;c[ba+(m*20|0)+8>>2]=0;c[ba+(m*20|0)+12>>2]=F;c[ba+(m*20|0)+16>>2]=0;a[ba+(m*20|0)+1>>0]=0}else m=Di(I,n,s,0,F)|0;do if(!(a[(c[I>>2]|0)+81>>0]|0)){ba=c[I+104>>2]|0;a[ba+(m*20|0)+1>>0]=-3;c[ba+(m*20|0)+16>>2]=r;ba=a[(c[I>>2]|0)+81>>0]|0;c[j+20>>2]=m;n=c[i>>2]|0;if(ba<<24>>24){m=59308;break}m=(c[I+104>>2]|0)+(((o|0)<0?n+-1|0:o)*20|0)|0}else{c[j+20>>2]=m;m=59308;n=c[i>>2]|0}while(0);c[m+8>>2]=n;q=I+104|0;m=0;while(1){o=m+F|0;if((c[t>>2]|0)>(n|0)){c[i>>2]=n+1;ba=c[q>>2]|0;a[ba+(n*20|0)>>0]=90;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=s;c[ba+(n*20|0)+8>>2]=m;c[ba+(n*20|0)+12>>2]=o;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0}else Di(I,90,s,m,o)|0;m=m+1|0;if((m|0)==(r|0))break l;n=c[i>>2]|0}}while(0);if((G&65535)<(y&65535)){C=w+48|0;t=(z|0)==1;w=(U|0)!=0;x=I+108|0;y=I+112|0;z=f+19|0;A=I+104|0;B=(U|0)==0;q=F;i=G&65535;while(1){r=c[(c[C>>2]|0)+(i<<2)>>2]|0;m=i+q|0;o=jm(f,r,j,i,aa,m)|0;do if((o|0)!=(m|0))if(!t){n=c[x>>2]|0;if((c[y>>2]|0)>(n|0)){c[x>>2]=n+1;ba=c[A>>2]|0;a[ba+(n*20|0)>>0]=79;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=o;c[ba+(n*20|0)+8>>2]=m;c[ba+(n*20|0)+12>>2]=0;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0;break}else{Di(I,79,o,m,0)|0;break}}else{if(!q){q=o;break}m=a[z>>0]|0;if((m&255)>=8){q=o;break}a[z>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=q;q=o;break}while(0);m=e[r+12>>1]|0;m:do if(!(m&1)){if(m&256|0)break;s=c[(c[r>>2]|0)+16>>2]|0;n:do if(!(b[r+10>>1]&2048)){n=a[s>>0]|0;if((n+91&255)<2){m=s;do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2)}else m=s;if(n<<24>>24==-88)n=a[m+38>>0]|0;o:do switch(n<<24>>24){case -110:case -111:case 110:case -109:break n;case -94:{if(c[m+4>>2]&1048576|0)break o;n=c[m+44>>2]|0;if(!n)break o;m=b[m+32>>1]|0;if(m<<16>>16<=-1)break n;if(a[(c[n+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0)break n;break}default:{}}while(0);m=q+i|0;n=c[ca>>2]|0;o=c[x>>2]|0;if((c[y>>2]|0)>(o|0)){c[x>>2]=o+1;ba=c[A>>2]|0;a[ba+(o*20|0)>>0]=50;b[ba+(o*20|0)+2>>1]=0;c[ba+(o*20|0)+4>>2]=m;c[ba+(o*20|0)+8>>2]=n;c[ba+(o*20|0)+12>>2]=0;c[ba+(o*20|0)+16>>2]=0;a[ba+(o*20|0)+1>>0]=0;break}else{Di(I,50,m,n,0)|0;break}}while(0);if(B)break;o=U+i|0;r=a[o>>0]|0;m=Xj(s)|0;if(r<<24>>24==0|m<<24>>24==0)if((m|r)<<24>>24==0?1:((m&255)+(r&255)&255)<<24>>24==65)ga=232;else ga=233;else if(r<<24>>24>66|m<<24>>24>66)ga=233;else ga=232;p:do if((ga|0)==232){ga=0;a[o>>0]=65}else if((ga|0)==233){ga=0;if(r<<24>>24==65)break;n=a[s>>0]|0;if((n+91&255)<2){m=s;do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2)}else m=s;if(n<<24>>24==-88)n=a[m+38>>0]|0;switch(n<<24>>24){case -110:break p;case -109:if((r+-67&255)<2)break p;else break m;case -111:switch(r<<24>>24){case 67:case 69:break p;default:break m}case 110:if(r<<24>>24==66)break p;else break m;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0)break p;else break m;default:break m}}while(0);a[o>>0]=65}else{if(!(w&(c[(c[r>>2]|0)+4>>2]&2048|0)!=0))break;a[U+i>>0]=65}while(0);i=i+1|0;if((i|0)==(H|0)){F=q;break}}}G=(U|0)==0;q:do if(!(u<<16>>16==0|G)?(O=U+p|0,(O|0)!=0):0){q=(Eu(O)|0)+1|0;r:do if(!da){ca=Sv(q|0,0,-1,-1)|0;ba=L()|0;if(ba>>>0>0|(ba|0)==0&ca>>>0>2147483390){D=0;break q}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](q)|0;ga=272;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){ca=c[14978]|0;ba=Tv(m|0,n|0,o|0,((o|0)<0)<<31>>31|0)|0;I=L()|0;c[14768]=((I|0)<0|(I|0)==0&ba>>>0<=ca>>>0)&1}m=Wa[c[29340>>2]&127](o)|0;if(!m){D=0;break q}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n}else{if(c[da+272>>2]|0){if(a[da+81>>0]|0){D=0;break q}}else{do if(!(0<0|(0==0?(e[da+276>>1]|0)>>>0<q>>>0:0))){n=da+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=272;break r}n=da+296|0;m=c[n>>2]|0;if(!m){m=da+292|0;break}else{c[n>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=272;break r}}else m=da+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(da,q,0)|0;ga=272}while(0);if((ga|0)==272)if(!m){D=0;break}ew(m|0,O|0,q|0)|0;D=m}else D=0;while(0);E=c[Q>>2]|0;o=(P|0)!=0;if(o)m=(b[P+12>>1]&40)!=0;else m=1;B=m&1;C=(v|0)!=0;if(C)m=(b[v+12>>1]&40)!=0;else m=1;n=m&1;A=(M<<16>>16!=0|o)&1;do if(o){z=c[(c[P>>2]|0)+16>>2]|0;q=F+p|0;y=N&65535;km(f,z,q,y);if(b[P+10>>1]&256){if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((c[g+108>>2]|0)+-1|0)*20|0)|0;else m=59308;ca=c[j+36>>2]|0;c[m+12>>2]=ca>>>1;b[m+2>>1]=ca&1}o=a[z>>0]|0;if((o+91&255)<2){m=z;do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2)}else m=z;if(o<<24>>24==-88)o=a[m+38>>0]|0;s:do switch(o<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0){ga=293;break s}o=c[m+44>>2]|0;if(!o){ga=293;break s}m=b[m+32>>1]|0;if(m<<16>>16<=-1)break s;if(!(a[(c[o+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0))ga=293;break}default:ga=293}while(0);do if((ga|0)==293){m=g+108|0;o=c[m>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[m>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=50;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=q;c[ca+(o*20|0)+8>>2]=E;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0;break}else{Di(g,50,q,E,0)|0;break}}while(0);t:do if(!G){x=U+p|0;if(!(N<<16>>16))break;i=z+38|0;t=z+20|0;w=z+20|0;s=0;while(1){o=a[z>>0]|0;if(o<<24>>24==-88)m=a[i>>0]|0;else m=o;switch(m<<24>>24){case -87:{m=t;ga=303;break}case -125:{m=c[w>>2]|0;ga=303;break}default:m=z}u:do if((ga|0)==303){if((c[c[m>>2]>>2]|0)<2){m=z;break}do if(o<<24>>24!=-125){if((a[i>>0]|0)==-125)break;m=c[(c[t>>2]|0)+4+(s*20|0)>>2]|0;break u}while(0);m=c[(c[c[w>>2]>>2]|0)+4+(s*20|0)>>2]|0}while(0);q=x+s|0;r=a[q>>0]|0;o=Xj(m)|0;if(r<<24>>24==0|o<<24>>24==0)if(r<<24>>24==65|((o|r)<<24>>24==0?1:((o&255)+(r&255)&255)<<24>>24==65))ga=321;else ga=311;else if(r<<24>>24==65|r<<24>>24<67&o<<24>>24<67)ga=321;else ga=311;v:do if((ga|0)==311){ga=0;o=a[m>>0]|0;if((o+91&255)<2)do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2);if(o<<24>>24==-88)o=a[m+38>>0]|0;switch(o<<24>>24){case -110:{ga=321;break v}case -109:if((r+-67&255)<2){ga=321;break v}else break v;case -111:switch(r<<24>>24){case 67:case 69:{ga=321;break v}default:break v}case 110:if(r<<24>>24==66){ga=321;break v}else break v;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0){ga=321;break v}else break v;default:break v}}while(0);if((ga|0)==321){ga=0;a[q>>0]=65}s=s+1|0;if((s|0)==(y|0))break t}}while(0);o=y+p|0;m=a[z>>0]|0;if(m<<24>>24==-88)m=a[z+38>>0]|0;switch(m<<24>>24){case -87:{S=z+20|0;ga=328;break}case -125:{S=c[z+20>>2]|0;ga=328;break}default:{}}if((ga|0)==328?(c[c[S>>2]>>2]|0)>=2:0){x=A;y=o;w=1;m=0;break}lm(j,P);x=A;y=o;w=B;m=0}else{if(!(J<<24>>24)){x=A;y=p;w=B;m=0;break}m=F+p|0;o=g+108|0;q=c[o>>2]|0;if((c[g+112>>2]|0)>(q|0)){c[o>>2]=q+1;ca=c[g+104>>2]|0;a[ca+(q*20|0)>>0]=73;b[ca+(q*20|0)+2>>1]=0;c[ca+(q*20|0)+4>>2]=0;c[ca+(q*20|0)+8>>2]=m;c[ca+(q*20|0)+12>>2]=0;c[ca+(q*20|0)+16>>2]=0;a[ca+(q*20|0)+1>>0]=0}else Di(g,73,0,m,0)|0;x=1;y=p+1|0;w=0;m=J}while(0);m=y-(m&255)|0;t=c[T>>2]|0;w:do if((U|0)!=0&(m|0)>0){q=U;o=F;while(1){if((a[q>>0]|0)!=65){i=q;break}r=m+-1|0;o=o+1|0;q=q+1|0;if((m|0)>1)m=r;else{i=q;m=r;break}}x:do if((m|0)>1){q=m;while(1){m=q+-1|0;if((a[i+m>>0]|0)!=65)break x;if((q|0)>2)q=m;else{ga=343;break}}}else ga=343;while(0);if((ga|0)==343)if((m|0)==1)q=1;else break;r=t+108|0;m=c[r>>2]|0;if((c[t+112>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[t+104>>2]|0;a[ca+(m*20|0)>>0]=91;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=o;c[ca+(m*20|0)+8>>2]=q;c[ca+(m*20|0)+12>>2]=0;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(t,91,o,q,0)|0;o=c[t>>2]|0;if(a[o+81>>0]|0){if((q|0)==-12)break;kg(o,q,i);break}if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[t+104>>2]|0;r=o+(m*20|0)|0;do if((q|0)<=-1){s=o+(m*20|0)+1|0;if(a[s>>0]|0)break;if((q|0)==-3){c[o+(m*20|0)+16>>2]=i;a[s>>0]=-3;break w}c[o+(m*20|0)+16>>2]=i;a[s>>0]=q;if((q|0)!=-12)break w;ca=i+12|0;c[ca>>2]=(c[ca>>2]|0)+1;break w}while(0);Ei(t,r,i,q)}while(0);ca=b[_+42>>1]|0;do if(!(ca<<16>>16!=0&(y|0)==(ca&65535|0))){r=g+108|0;do if(c[$>>2]&262144){m=c[r>>2]|0;o=g+112|0;if((c[o>>2]|0)>(m|0)){c[r>>2]=m+1;q=c[g+104>>2]|0;a[q+(m*20|0)>>0]=119;b[q+(m*20|0)+2>>1]=0;c[q+(m*20|0)+4>>2]=Z;c[q+(m*20|0)+8>>2]=0;c[q+(m*20|0)+12>>2]=0;c[q+(m*20|0)+16>>2]=0;a[q+(m*20|0)+1>>0]=0;q=o;break}else{Di(g,119,Z,0,0)|0;q=o;break}}else q=g+112|0;while(0);o=a[44009+(x<<2|aa|w<<1)>>0]|0;m=c[r>>2]|0;if((c[q>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[g+104>>2]|0;a[ca+(m*20|0)>>0]=o;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=Z;c[ca+(m*20|0)+8>>2]=E;c[ca+(m*20|0)+12>>2]=F;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(g,o&255,Z,E,F)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;ca=c[g+104>>2]|0;a[ca+(m*20|0)+1>>0]=-3;c[ca+(m*20|0)+16>>2]=y}while(0);do if(C){y=c[(c[v>>2]|0)+16>>2]|0;w=F+p|0;x=u&65535;km(f,y,w,x);if(b[v+10>>1]&256){if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((c[g+108>>2]|0)+-1|0)*20|0)|0;else m=59308;ca=c[j+36>>2]|0;c[m+12>>2]=ca>>>1;b[m+2>>1]=ca&1}o=a[y>>0]|0;if((o+91&255)<2){m=y;do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2)}else m=y;if(o<<24>>24==-88)o=a[m+38>>0]|0;y:do switch(o<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0){ga=385;break y}o=c[m+44>>2]|0;if(!o){ga=385;break y}m=b[m+32>>1]|0;if(m<<16>>16<=-1)break y;if(!(a[(c[o+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0))ga=385;break}default:ga=385}while(0);do if((ga|0)==385){m=g+108|0;o=c[m>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[m>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=50;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=w;c[ca+(o*20|0)+8>>2]=E;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0;break}else{Di(g,50,w,E,0)|0;break}}while(0);z:do if(!((D|0)==0|u<<16>>16==0)){i=y+38|0;t=y+20|0;u=y+20|0;s=0;do{o=a[y>>0]|0;if(o<<24>>24==-88)m=a[i>>0]|0;else m=o;switch(m<<24>>24){case -87:{m=t;ga=394;break}case -125:{m=c[u>>2]|0;ga=394;break}default:m=y}A:do if((ga|0)==394){if((c[c[m>>2]>>2]|0)<2){m=y;break}do if(o<<24>>24!=-125){if((a[i>>0]|0)==-125)break;m=c[(c[t>>2]|0)+4+(s*20|0)>>2]|0;break A}while(0);m=c[(c[c[u>>2]>>2]|0)+4+(s*20|0)>>2]|0}while(0);q=D+s|0;r=a[q>>0]|0;o=Xj(m)|0;if(r<<24>>24==0|o<<24>>24==0)if(r<<24>>24==65|((o|r)<<24>>24==0?1:((o&255)+(r&255)&255)<<24>>24==65))ga=412;else ga=402;else if(r<<24>>24==65|r<<24>>24<67&o<<24>>24<67)ga=412;else ga=402;B:do if((ga|0)==402){ga=0;o=a[m>>0]|0;if((o+91&255)<2)do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2);if(o<<24>>24==-88)o=a[m+38>>0]|0;switch(o<<24>>24){case -110:{ga=412;break B}case -109:if((r+-67&255)<2){ga=412;break B}else break B;case -111:switch(r<<24>>24){case 67:case 69:{ga=412;break B}default:break B}case 110:if(r<<24>>24==66){ga=412;break B}else break B;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0){ga=412;break B}else break B;default:break B}}while(0);if((ga|0)==412){ga=0;a[q>>0]=65}s=s+1|0}while((s|0)!=(x|0));t=c[T>>2]|0;q=D;m=x;o=w;while(1){if((a[q>>0]|0)!=65){i=q;break}r=m+-1|0;o=o+1|0;q=q+1|0;if((m|0)>1)m=r;else{i=q;m=r;break}}C:do if((m|0)>1){q=m;while(1){m=q+-1|0;if((a[i+m>>0]|0)!=65)break C;if((q|0)>2)q=m;else{ga=421;break}}}else ga=421;while(0);if((ga|0)==421)if((m|0)==1)q=1;else break;r=t+108|0;m=c[r>>2]|0;if((c[t+112>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[t+104>>2]|0;a[ca+(m*20|0)>>0]=91;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=o;c[ca+(m*20|0)+8>>2]=q;c[ca+(m*20|0)+12>>2]=0;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(t,91,o,q,0)|0;o=c[t>>2]|0;if(a[o+81>>0]|0){if((q|0)==-12)break;kg(o,q,i);break}if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[t+104>>2]|0;r=o+(m*20|0)|0;do if((q|0)<=-1){s=o+(m*20|0)+1|0;if(a[s>>0]|0)break;if((q|0)==-3){c[o+(m*20|0)+16>>2]=i;a[s>>0]=-3;break z}c[o+(m*20|0)+16>>2]=i;a[s>>0]=q;if((q|0)!=-12)break z;ca=i+12|0;c[ca>>2]=(c[ca>>2]|0)+1;break z}while(0);Ei(t,r,i,q)}while(0);p=x+p|0;m=a[y>>0]|0;if(m<<24>>24==-88)m=a[y+38>>0]|0;switch(m<<24>>24){case -87:{W=y+20|0;ga=442;break}case -125:{W=c[y+20>>2]|0;ga=442;break}default:{}}if((ga|0)==442?(c[c[W>>2]>>2]|0)>=2:0){n=1;break}lm(j,v)}else{if(!(R<<24>>24))break;m=F+p|0;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=73;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=0;c[ca+(o*20|0)+8>>2]=m;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0}else Di(g,73,0,m,0)|0;n=0;p=p+1|0}while(0);D:do if(!G){do if(da|0){if(c[da+480>>2]|0){Xd(da,U);break D}m=U;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;ca=da+300|0;c[U>>2]=c[ca>>2];c[ca>>2]=U;break D}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](U);break}else{ca=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);break}}while(0);E:do if(D|0){do if(da|0){if(c[da+480>>2]|0){Xd(da,D);break E}m=D;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;da=da+300|0;c[D>>2]=c[da>>2];c[da>>2]=D;break E}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{da=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);o=g+108|0;m=c[o>>2]|0;c[j+52>>2]=m;do if(p|0){n=a[44017+(n|aa<<1)>>0]|0;if((c[g+112>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=n;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=E;c[da+(m*20|0)+12>>2]=F;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,n&255,Z,E,F)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;da=c[g+104>>2]|0;a[da+(m*20|0)+1>>0]=-3;c[da+(m*20|0)+16>>2]=p}while(0);do if(c[$>>2]&262144|0){m=c[o>>2]|0;if((c[g+112>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=119;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=1;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0;break}else{Di(g,119,Z,1,0)|0;break}}while(0);if((c[$>>2]&64|0)!=0?(b[X>>1]&32)==0:0)w=1;else ga=481;F:do if((ga|0)==481){p=Y+12|0;m=c[p>>2]|0;if(c[m+36>>2]&32|0){if((ia|0)==(Z|0)){w=0;break}m=c[m+8>>2]|0;G:do if(!m)m=0;else while(1){da=m+55|0;if(((d[da>>0]|d[da+1>>0]<<8)&3)==2)break G;m=c[m+20>>2]|0;if(!m){m=0;break}}while(0);x=m+50|0;i=b[x>>1]|0;p=i&65535;do if(i<<16>>16==1){n=f+19|0;p=a[n>>0]|0;if(!(p<<24>>24)){n=(c[V>>2]|0)+1|0;c[V>>2]=n;ga=554;break}else{ga=p+-1<<24>>24;a[n>>0]=ga;n=c[f+148+((ga&255)<<2)>>2]|0;ga=554;break}}else{q=f+32|0;n=c[q>>2]|0;r=f+28|0;s=c[r>>2]|0;if((s|0)<(p|0)){n=c[V>>2]|0;c[V>>2]=n+p;n=n+1|0}else{c[q>>2]=n+p;c[r>>2]=s-p}if(i<<16>>16){ga=554;break}q=0;p=g+112|0}while(0);if((ga|0)==554){t=m+4|0;u=Y+52|0;p=g+112|0;v=Y+4|0;w=g+104|0;i=0;do{r=b[(c[t>>2]|0)+(i<<1)>>1]|0;m=b[u>>1]|0;H:do if(!(m<<16>>16))m=-1;else{s=c[v>>2]|0;q=m&65535;m=0;while(1){if((b[s+(m<<1)>>1]|0)==r<<16>>16)break H;m=m+1|0;if(m>>>0>=q>>>0){m=-1;break}}}while(0);m=m<<16>>16;q=i+n|0;r=c[o>>2]|0;if((c[p>>2]|0)>(r|0)){c[o>>2]=r+1;da=c[w>>2]|0;a[da+(r*20|0)>>0]=90;b[da+(r*20|0)+2>>1]=0;c[da+(r*20|0)+4>>2]=Z;c[da+(r*20|0)+8>>2]=m;c[da+(r*20|0)+12>>2]=q;c[da+(r*20|0)+16>>2]=0;a[da+(r*20|0)+1>>0]=0}else Di(g,90,Z,m,q)|0;i=i+1|0;m=b[x>>1]|0}while(i>>>0<(m&65535)>>>0);q=m&65535}m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=28;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=ia;c[da+(m*20|0)+8>>2]=pa;c[da+(m*20|0)+12>>2]=n;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,28,ia,pa,n)|0;if(a[(c[g>>2]|0)+81>>0]|0){w=0;break}w=c[g+104>>2]|0;a[w+(m*20|0)+1>>0]=-3;c[w+(m*20|0)+16>>2]=q;w=0;break}m=e[X>>1]|0;do if(!(m&1024)){if(m&4096|0?(a[h+49>>0]|0)==1:0)break;m=c[h>>2]|0;u=c[m+8>>2]|0;t=u+108|0;n=c[t>>2]|0;if((c[u+112>>2]|0)>(n|0)){c[t>>2]=n+1;da=c[u+104>>2]|0;a[da+(n*20|0)>>0]=-122;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=Z;c[da+(n*20|0)+8>>2]=0;c[da+(n*20|0)+12>>2]=ia;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(u,134,Z,0,ia)|0;if(!(b[X>>1]&32)){w=0;break F}da=c[m+116>>2]|0;if(c[((da|0)==0?m:da)+80>>2]|0){w=0;break F}q=c[m>>2]|0;s=(c[p>>2]|0)+42|0;i=(b[s>>1]<<2)+4|0;I:do if(!q){da=Sv(i|0,0,-1,-1)|0;ca=L()|0;if(ca>>>0>0|(ca|0)==0&da>>>0>2147483390){w=0;break F}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](i)|0;ga=520;break}m=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;p=59064;n=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&n>>>0>0){da=c[14978]|0;ca=Tv(n|0,p|0,m|0,((m|0)<0)<<31>>31|0)|0;ba=L()|0;c[14768]=((ba|0)<0|(ba|0)==0&ca>>>0<=da>>>0)&1}n=Wa[c[29340>>2]&127](m)|0;if(!n){w=0;break F}m=Wa[c[29352>>2]&127](n)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){r=n;break}c[14987]=m;r=n}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){w=0;break F}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<i>>>0:0))){n=q+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=q+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=520;break I}n=q+296|0;m=c[n>>2]|0;if(!m){m=q+292|0;break}else{c[n>>2]=c[m>>2];ga=q+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=520;break I}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(q,i,0)|0;ga=520}while(0);if((ga|0)==520)if(!m){w=0;break F}else r=m;gw(r|0,0,i|0)|0;c[r>>2]=b[s>>1];m=b[Y+52>>1]|0;if((m&65535)>1){q=c[Y+4>>2]|0;p=(m&65535)+-1|0;m=0;do{n=b[q+(m<<1)>>1]|0;if(n<<16>>16>-1){m=m+1|0;c[r+((n<<16>>16)+1<<2)>>2]=m}else m=m+1|0}while((m|0)<(p|0))}n=c[u>>2]|0;if(!(a[n+81>>0]|0)){m=(c[t>>2]|0)+-1|0;n=c[u+104>>2]|0;p=n+(m*20|0)+1|0;if(!(a[p>>0]|0)){c[n+(m*20|0)+16>>2]=r;a[p>>0]=-15;w=0;break F}else{Ei(u,n+(m*20|0)|0,r,-15);w=0;break F}}do if(n|0){if(c[n+480>>2]|0){Xd(n,r);w=0;break F}m=r;if((c[n+304>>2]|0)>>>0>m>>>0)break;if((c[n+308>>2]|0)>>>0<=m>>>0)break;w=n+300|0;c[r>>2]=c[w>>2];c[w>>2]=r;w=0;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);w=0;break F}else{w=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);w=0;break F}}while(0);p=(c[V>>2]|0)+1|0;c[V>>2]=p;m=c[o>>2]|0;n=g+112|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=-121;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=p;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,135,Z,p,0)|0;m=c[o>>2]|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;w=c[g+104>>2]|0;a[w+(m*20|0)>>0]=31;b[w+(m*20|0)+2>>1]=0;c[w+(m*20|0)+4>>2]=ia;c[w+(m*20|0)+8>>2]=0;c[w+(m*20|0)+12>>2]=p;c[w+(m*20|0)+16>>2]=0;a[w+(m*20|0)+1>>0]=0;w=0;break}else{Di(g,31,ia,0,p)|0;w=0;break}}while(0);do if(!(c[j>>2]|0)){if(b[X>>1]&32)break;r=c[Y+40>>2]|0;do if(r|0){c[ma>>2]=0;c[ma+4>>2]=0;c[ma+8>>2]=0;c[ma+12>>2]=0;c[ma+16>>2]=0;c[ma+20>>2]=0;c[ma+4>>2]=147;c[ma+24>>2]=na;c[na+4>>2]=ia;c[na+8>>2]=Z;if((c[r>>2]|0)<=0)break;s=Y+4|0;i=na+12|0;t=h+16|0;u=h+8|0;v=h+12|0;q=0;do{J:do if((b[(c[s>>2]|0)+(q<<1)>>1]|0)==-2){c[i>>2]=q;c[na>>2]=c[r+4+(q*20|0)>>2];m=c[t>>2]|0;if(m|0)_j(ma,m)|0;n=c[u>>2]|0;K:do if(n|0){m=c[n>>2]|0;if((m|0)<=0)break;n=n+4|0;while(1){p=c[n>>2]|0;if(p|0?_j(ma,p)|0:0)break K;if((m|0)>1){m=m+-1|0;n=n+20|0}else break}}while(0);n=c[v>>2]|0;if(!n)break;m=c[n>>2]|0;if((m|0)<=0)break;n=n+4|0;while(1){p=c[n>>2]|0;if(p|0?_j(ma,p)|0:0)break J;if((m|0)>1){m=m+-1|0;n=n+20|0}else break}}while(0);q=q+1|0}while((q|0)<(c[r>>2]|0))}while(0)}while(0);m=c[Y+36>>2]|0;if(m|0)mm(m,ia,oa);m=c[$>>2]|0;do if(!(m&4096)){n=j+45|0;if(!aa){a[n>>0]=5;break}else{a[n>>0]=4;break}}else a[j+45>>0]=-86;while(0);c[j+48>>2]=Z;a[j+46>>0]=m>>>16&1;if(!(m&15))a[j+47>>0]=1;E=w?0:Y}else{q=c[ea+8+(fa*72|0)+28>>2]|0;m=c[ea+8+(fa*72|0)+24>>2]|0;o=g+108|0;n=c[o>>2]|0;p=g+112|0;if((c[p>>2]|0)>(n|0)){c[o>>2]=n+1;da=c[g+104>>2]|0;a[da+(n*20|0)>>0]=13;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=q;c[da+(n*20|0)+8>>2]=0;c[da+(n*20|0)+12>>2]=m;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(g,13,q,0,m)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=14;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=q;c[da+(m*20|0)+8>>2]=z;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,14,q,z,0)|0;c[j+52>>2]=m;a[j+45>>0]=11;E=0}while(0);H=h+100|0;I=h+92|0;D=ea+8+(fa*72|0)+36|0;w=h+50|0;x=j+4|0;y=na+4|0;z=ma+4|0;A=ma+24|0;v=ma+20|0;B=j+36|0;F=g+112|0;G=g+104|0;m=(E|0)==0?2:1;while(1){n=c[I>>2]|0;if((n|0)<=0){ga=813;break}C=(m|0)==1;u=(m|0)<3;m=0;t=c[H>>2]|0;while(1){i=t+10|0;p=b[i>>1]|0;L:do if(!(p&6)){h=t+40|0;fa=qa;if(!((c[fa>>2]&c[h>>2]|0)==0?(c[fa+4>>2]&c[h+4>>2]|0)==0:0)){a[w>>0]=1;break}s=c[t>>2]|0;if(a[D>>0]&8?(c[s+4>>2]&1|0)==0:0)break;do if(C){h=c[x>>2]|0;c[ma>>2]=0;c[ma+4>>2]=0;c[ma+8>>2]=0;c[ma+12>>2]=0;c[ma+16>>2]=0;c[ma+20>>2]=0;c[y>>2]=h;c[na>>2]=E;c[z>>2]=148;c[A>>2]=na;if((s|0)!=0?(_j(ma,s)|0,(a[v>>0]|0)!=0):0){m=2;break L}else{ga=797;break}}else if(u)ga=797;while(0);if((ga|0)==797){ga=0;p=b[i>>1]|0;if(p&4096){m=(m|0)==0?3:m;break}}if((p&512)!=0?(ha=c[B>>2]|0,(ha|0)!=0):0){q=(ha<<1&2)+18|0;r=ha>>>1;p=c[o>>2]|0;if((c[F>>2]|0)>(p|0)){c[o>>2]=p+1;h=c[G>>2]|0;a[h+(p*20|0)>>0]=q;b[h+(p*20|0)+2>>1]=0;c[h+(p*20|0)+4>>2]=r;c[h+(p*20|0)+8>>2]=0;c[h+(p*20|0)+12>>2]=0;c[h+(p*20|0)+16>>2]=0;a[h+(p*20|0)+1>>0]=0}else p=Di(g,q,r,0,0)|0;Tj(f,s,pa,16);if(p|0){q=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))p=(c[G>>2]|0)+(((p|0)<0?q+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=q}}else Tj(f,s,pa,16);b[i>>1]=b[i>>1]|4}while(0);if((n|0)>1){t=t+48|0;n=n+-1|0}else break}if((m|0)<=0){ga=812;break}}if((ga|0)==812){m=c[I>>2]|0;if((m|0)>0){i=ma+4|0;t=ma+12|0;u=ma+16|0;v=ma+8|0;w=ma+20|0;x=ma+24|0;y=ma+28|0;z=ma+17|0;A=ma+18|0;B=ma+72|0;C=na+12|0;s=c[H>>2]|0;while(1){do if((((((b[s+10>>1]&6)==0?(ha=e[s+12>>1]|0,!((ha&130|0)==0|(ha&2048|0)==0)):0)?(c[s+20>>2]|0)==(ia|0):0)?(c[j>>2]|0)==0:0)?(ja=c[s>>2]|0,ka=c[s+28>>2]|0,c[ma>>2]=oa,c[i>>2]=oa,c[t>>2]=0,a[u>>0]=0,c[v>>2]=0,c[w>>2]=131,c[x>>2]=0,c[y>>2]=ia,a[z>>0]=1,a[A>>0]=1,(ka|0)!=-2):0)?(b[B>>1]=ka,la=Tl(ma)|0,la|0):0){p=0;n=la;while(1){r=n+32|0;q=c[r>>2]|0;r=c[r+4>>2]|0;if((q&k|0)==0&(r&l|0)==0){if((q|0)==0&(r|0)==0?b[n+12>>1]&130:0){ga=825;break}p=(p|0)==0?n:p}n=Tl(ma)|0;if(!n){ga=829;break}}if((ga|0)==825)ga=0;else if((ga|0)==829){ga=0;if(!p)break;else n=p}if(b[n+10>>1]&4)break;if(b[n+12>>1]&1){n=c[n>>2]|0;if((c[n+4>>2]&2048|0)!=0?(c[c[c[n+20>>2]>>2]>>2]|0)>1:0)break}else n=c[n>>2]|0;E=na;D=E+52|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));c[C>>2]=c[ja+12>>2];Tj(f,na,pa,16);break}while(0);if((m|0)>1){s=s+48|0;m=m+-1|0}else{m=j;break}}}else ga=813}if((ga|0)==813)m=j;n=c[m>>2]|0;if(n|0){m=c[o>>2]|0;c[j+28>>2]=m;if((c[F>>2]|0)>(m|0)){c[o>>2]=m+1;j=c[G>>2]|0;a[j+(m*20|0)>>0]=70;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=1;c[j+(m*20|0)+8>>2]=n;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(g,70,1,n,0)|0;m=c[I>>2]|0;if((m|0)>0){o=c[H>>2]|0;p=0;while(1){n=o+10|0;if((b[n>>1]&6)==0?(j=o+40|0,g=qa,(c[g>>2]&c[j>>2]|0)==0?(c[g+4>>2]&c[j+4>>2]|0)==0:0):0){Tj(f,c[o>>2]|0,pa,16);b[n>>1]=b[n>>1]|4;m=c[I>>2]|0}p=p+1|0;if((p|0)>=(m|0))break;else o=o+48|0}}}f=qa;qa=c[f+4>>2]|0;f=c[f>>2]|0;K(qa|0);Ra=ra;return f|0}function Ml(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=d+12|0;h=c[o>>2]|0;m=d+16|0;j=c[m>>2]|0;n=d+20|0;do if((h|0)<(j|0))m=h;else{k=c[n>>2]|0;l=c[c[c[d>>2]>>2]>>2]|0;j=j*96|0;a:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))p=13;else c[n>>2]=0;else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<j>>>0:0))){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=14;break a}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=14;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;p=13}while(0);if((p|0)==13){i=_d(l,j,0)|0;p=14}if((p|0)==14?(c[n>>2]=i,i|0):0){ew(i|0,k|0,(c[o>>2]|0)*48|0)|0;do if(!((k|0)==(d+24|0)|(k|0)==0)){if(c[l+480>>2]|0){Xd(l,k);break}j=k;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);h=c[n>>2]|0;k=h;if((c[l+304>>2]|0)>>>0<=k>>>0?(c[l+308>>2]|0)>>>0>k>>>0:0)h=e[l+276>>1]|0;else h=Wa[c[29352>>2]&127](h)|0;c[m>>2]=(h>>>0)/48|0;m=c[o>>2]|0;break}if(!((f|0)==0|(g&1)==0))ni(l,f);c[n>>2]=k;g=0;return g|0}while(0);l=c[n>>2]|0;c[o>>2]=m+1;b:do if(f){h=c[f+4>>2]|0;if(!(h&262144)){b[l+(m*48|0)+8>>1]=1;if(!(h&4096))break;while(1){if(!(h&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break b}h=c[f+4>>2]|0;if(!(h&4096))break b}}i=c[f+28>>2]|0;j=((i|0)<0)<<31>>31;if(i>>>0<8)if(i>>>0<2)i=-270;else{k=40;do{k=(k&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);k=k&65535;p=48}else{if(i>>>0>255){k=40;do{k=(k&65535)+40|0;p=i;i=bw(i|0,j|0,4)|0;o=j;j=L()|0}while(o>>>0>0|(o|0)==0&p>>>0>4095);k=k&65535}else k=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{k=(k&65535)+10&65535;p=i;i=bw(i|0,j|0,1)|0;o=j;j=L()|0}while(o>>>0>0|(o|0)==0&p>>>0>31);p=48}else p=48}if((p|0)==48)i=(k&65535)+65256+(e[3648+((i&7)<<1)>>1]|0)&65535;b[l+(m*48|0)+8>>1]=i;if(h&4096)do{if(!(h&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break b}h=c[f+4>>2]|0}while((h&4096|0)!=0)}else{b[l+(m*48|0)+8>>1]=1;f=0}while(0);c[l+(m*48|0)>>2]=f;b[l+(m*48|0)+10>>1]=g;c[l+(m*48|0)+4>>2]=d;c[l+(m*48|0)+16>>2]=-1;f=l+(m*48|0)+12|0;h=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));g=m;return g|0}function Nl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;qa=Ra;Ra=Ra+16|0;q=qa;da=qa+8|0;ea=qa+4|0;p=c[g>>2]|0;la=c[p>>2]|0;ha=c[la>>2]|0;_=ha+81|0;if(a[_>>0]|0){Ra=qa;return}na=g+20|0;t=c[na>>2]|0;w=t+(h*48|0)|0;ga=p+488|0;oa=c[w>>2]|0;pa=oa+12|0;i=c[pa>>2]|0;if(!i){z=0;A=0}else{z=Pl(ga,i)|0;A=L()|0}u=a[oa>>0]|0;s=u&255;a:do switch(u<<24>>24){case 49:{if(ok(la,oa)|0){Ra=qa;return}i=oa+20|0;if(c[oa+4>>2]&2048|0){j=Ol(ga,c[i>>2]|0)|0;i=L()|0;break a}o=c[i>>2]|0;if((o|0)!=0?(j=c[o>>2]|0,(j|0)>0):0){n=0;m=j;j=0;i=0;do{k=c[o+4+(n*20|0)>>2]|0;if(!k){k=0;l=0}else{k=Pl(ga,k)|0;l=L()|0;m=c[o>>2]|0}j=k|j;i=l|i;n=n+1|0}while((n|0)<(m|0))}else{j=0;i=0}break}case 50:{j=0;i=0;break}default:{i=c[oa+16>>2]|0;if(!i){j=0;i=0}else{j=Pl(ga,i)|0;i=L()|0}}}while(0);m=t+(h*48|0)+32|0;c[m>>2]=j;c[m+4>>2]=i;c[ga>>2]=0;m=Pl(ga,oa)|0;n=L()|0;r=t+(h*48|0)+10|0;if(c[ga>>2]|0)b[r>>1]=b[r>>1]|4096;ka=oa+4|0;if(c[ka>>2]&1){j=b[oa+36>>1]|0;k=c[p+492>>2]|0;b:do if((k|0)>0){i=0;while(1){if((c[p+496+(i<<2)>>2]|0)==(j|0))break;i=i+1|0;if((i|0)>=(k|0)){k=0;l=0;break b}}k=cw(1,0,i|0)|0;l=L()|0}else{k=0;l=0}while(0);i=k|m;j=l|n;m=Sv(k|0,l|0,-1,-1)|0;n=L()|0;ja=bw(i|0,j|0,1)|0;ia=L()|0;if(ia>>>0<l>>>0|(ia|0)==(l|0)&ja>>>0<k>>>0){y=i;x=j;ja=m;ia=n}else{cd(la,43561,q);Ra=qa;return}}else{y=m;x=n;ja=0;ia=0}o=t+(h*48|0)+40|0;c[o>>2]=y;c[o+4>>2]=x;o=t+(h*48|0)+20|0;c[o>>2]=-1;c[t+(h*48|0)+16>>2]=-1;m=t+(h*48|0)+12|0;b[m>>1]=0;c:do switch(u<<24>>24){case 45:case 50:case 53:case 54:case 55:case 56:case 57:case 49:{i=c[pa>>2]|0;d:do if(!i)i=0;else while(1){j=c[i+4>>2]|0;if(!(j&4096))break d;if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);j=c[oa+16>>2]|0;e:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break e;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);l=t+(h*48|0)+32|0;v=l;v=((c[v>>2]&z|0)==0?(c[v+4>>2]&A|0)==0:0)?8191:2048;k=c[t+(h*48|0)+24>>2]|0;if((k|0)>0)i=c[(c[i+20>>2]|0)+4+((k+-1|0)*20|0)>>2]|0;k=a[i>>0]|0;n=(s+-54|0)>>>0<4;if(n&k<<24>>24==-87){k=c[(c[i+20>>2]|0)+4>>2]|0;i=k;k=a[k>>0]|0}if(k<<24>>24!=-94){if((!((z|0)==0&(A|0)==0)?(R=Sv(z|0,A|0,-1,-1)|0,(R&z|0)==0&((L()|0)&A|0)==0):0)?Ql(f,z,A,da,i)|0:0){i=c[da>>2]|0;k=c[da+4>>2]|0;fa=51}}else{fa=c[i+28>>2]|0;c[da>>2]=fa;k=b[i+32>>1]|0;c[da+4>>2]=k;i=fa;fa=51}if((fa|0)==51){c[o>>2]=i;c[t+(h*48|0)+28>>2]=k;switch(u<<24>>24){case 49:{i=1;break}case 50:{i=256;break}case 45:{i=128;break}default:i=2<<s+-53&65535}b[m>>1]=i&v}m=u<<24>>24==45;if(m)b[r>>1]=b[r>>1]|2048;do if(!j)i=w;else{k=c[l>>2]|0;l=c[l+4>>2]|0;i=a[j>>0]|0;if(n&i<<24>>24==-87){i=c[(c[j+20>>2]|0)+4>>2]|0;j=i;i=a[i>>0]|0}if(i<<24>>24!=-94){if((k|0)==0&(l|0)==0){i=w;break}R=Sv(k|0,l|0,-1,-1)|0;if(!((R&k|0)==0&((L()|0)&l|0)==0)){i=w;break}if(!(Ql(f,k,l,da,j)|0)){i=w;break}}else{c[da>>2]=c[j+28>>2];c[da+4>>2]=b[j+32>>1]}f:do if((c[o>>2]|0)>-1){if(!oa)s=0;else s=dk(ha,oa,0,0)|0;do if(!(a[_>>0]|0)){i=Ml(g,s,3)|0;if(!i)break;n=c[na>>2]|0;q=n+(i*48|0)|0;c[n+(i*48|0)+16>>2]=h;b[n+(i*48|0)+8>>1]=b[n+(h*48|0)+8>>1]|0;R=n+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;i=n+(i*48|0)+10|0;if(m)b[i>>1]=b[i>>1]|2048;i=n+(h*48|0)|0;R=n+(h*48|0)+10|0;b[R>>1]=b[R>>1]|8;if(b[(c[la>>2]|0)+76>>1]&128){r=0;break f}switch(a[s>>0]|0){case 45:case 53:break;default:{r=0;break f}}if(c[s+4>>2]&1|0){r=0;break f}m=s+12|0;j=c[m>>2]|0;Q=Xj(j)|0;l=s+16|0;k=c[l>>2]|0;R=Xj(k)|0;if(Q<<24>>24!=R<<24>>24?!(Q<<24>>24>66&R<<24>>24>66):0){r=0;break f}g:do if(!(c[j+4>>2]&256)){do if(k|0){if(!(c[k+4>>2]&256))break;j=Yi(la,k)|0;fa=87;break g}while(0);j=Yi(la,j)|0;if(j|0){fa=88;break}j=Yi(la,k)|0;fa=87}else{j=Yi(la,j)|0;fa=87}while(0);if((fa|0)==87?j|0:0)fa=88;do if((fa|0)==88){if((c[j+12>>2]|0)==78?(c[j+8>>2]|0)==0:0)break;k=c[l>>2]|0;j=Yi(la,c[m>>2]|0)|0;if(!j)j=c[(c[la>>2]|0)+8>>2]|0;k=Yi(la,k)|0;if(!k)k=c[(c[la>>2]|0)+8>>2]|0;m=c[j>>2]|0;k=c[k>>2]|0;R=a[m>>0]|0;j=(d[208+(R&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0;if(!(R<<24>>24==0|(j|0)!=0)){l=k;k=m;do{k=k+1|0;l=l+1|0;R=a[k>>0]|0;j=(d[208+(R&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(R<<24>>24==0|(j|0)!=0))}if(j|0){r=0;break f}}while(0);r=n+(h*48|0)+12|0;b[r>>1]=b[r>>1]|2048;r=2048;break f}else{if(!s)break;ni(ha,s)}while(0);Ra=qa;return}else{s=oa;i=w;q=w;r=0}while(0);o=s+16|0;k=(c[o>>2]|0)+4|0;l=c[k>>2]|0;m=l&256;p=s+12|0;n=c[p>>2]|0;j=n;do if((m|0)==(c[n+4>>2]&256|0)){if(m|0){c[k>>2]=l&-257;break}if(!(Yi(la,n)|0)){j=c[p>>2]|0;break}else{j=c[p>>2]|0;R=j+4|0;c[R>>2]=c[R>>2]|256;break}}while(0);R=c[o>>2]|0;c[o>>2]=j;c[p>>2]=R;j=a[s>>0]|0;if((j&255)>53)a[s>>0]=((j&255)+202^2)+54;c[q+20>>2]=c[da>>2];c[q+28>>2]=c[da+4>>2];j=q+32|0;c[j>>2]=ja|z;c[j+4>>2]=ia|A;j=q+40|0;c[j>>2]=y;c[j+4>>2]=x;j=a[s>>0]|0;switch(j<<24>>24){case 49:{j=1;break}case 50:{j=256;break}case 45:{j=128;break}default:j=2<<(j&255)+-53}b[q+12>>1]=j+r&(v&65535)}while(0);break}default:{switch(a[oa>>0]|0){case 48:{if((a[g+8>>0]|0)!=44){i=w;break c}k=c[oa+20>>2]|0;l=oa+36|0;i=c[pa>>2]|0;if(!i)j=0;else j=dk(ha,i,0,0)|0;i=c[k+4>>2]|0;if(!i)i=0;else i=dk(ha,i,0,0)|0;i=ej(la,57,j,i)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[ka>>2]&1;b[i+36>>1]=b[l>>1]|0}R=Ml(g,i,3)|0;Nl(f,g,R);i=c[na>>2]|0;c[i+(R*48|0)+16>>2]=h;b[i+(R*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;i=i+(h*48|0)+14|0;a[i>>0]=(a[i>>0]|0)+1<<24>>24;i=c[pa>>2]|0;if(!i)j=0;else j=dk(ha,i,0,0)|0;i=c[k+24>>2]|0;if(!i)i=0;else i=dk(ha,i,0,0)|0;i=ej(la,55,j,i)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[ka>>2]&1;b[i+36>>1]=b[l>>1]|0}R=Ml(g,i,3)|0;Nl(f,g,R);i=c[na>>2]|0;c[i+(R*48|0)+16>>2]=h;b[i+(R*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;R=i+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;i=i+(h*48|0)|0;break c}case 43:break;default:{i=w;break c}}N=c[g>>2]|0;O=c[N>>2]|0;P=c[O>>2]|0;H=c[na>>2]|0;Q=c[H+(h*48|0)>>2]|0;h:do if(!P){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](416)|0;fa=146;break}i=Wa[c[29356>>2]&127](416)|0;if((c[14985]|0)>>>0<416)c[14985]=416;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){fa=c[14978]|0;J=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;I=L()|0;c[14768]=((I|0)<0|(I|0)==0&J>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;fa=148}else fa=148}else fa=147}else{if(c[P+272>>2]|0){if(a[P+81>>0]|0){fa=147;break}}else{do if((e[P+276>>1]|0)>=416){j=P+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];fa=P+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=146;break h}j=P+296|0;i=c[j>>2]|0;if(!i){i=P+292|0;break}else{c[j>>2]=c[i>>2];fa=P+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=146;break h}}else i=P+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(P,416,0)|0;fa=146}while(0);if((fa|0)==146)if(!i)fa=147;else fa=148;i:do if((fa|0)==147)c[H+(h*48|0)+28>>2]=0;else if((fa|0)==148){gw(i+8|0,0,408)|0;c[H+(h*48|0)+28>>2]=i;j=H+(h*48|0)+10|0;b[j>>1]=b[j>>1]|16;j=i+24|0;gw(j|0,0,384)|0;c[i>>2]=N;a[i+9>>0]=0;c[i+4>>2]=0;I=i+12|0;c[I>>2]=0;c[i+16>>2]=8;J=i+20|0;c[J>>2]=j;Il(i,Q,43);j=c[I>>2]|0;if((j|0)>0)do{G=j;j=j+-1|0;Nl(f,i,j)}while((G|0)>1);y=P+81|0;if(!(a[y>>0]|0)){j=c[I>>2]|0;if((j|0)>0){z=P+272|0;A=P+276|0;B=N+492|0;C=P+288|0;D=P+300|0;E=P+296|0;F=P+284|0;G=P+292|0;x=c[J>>2]|0;v=-1;l=-1;n=-1;o=-1;while(1){w=j;j=j+-1|0;m=x+12|0;u=b[m>>1]|0;j:do if(!(u&511)){do if(c[z>>2]|0)if(!(a[y>>0]|0))fa=164;else{n=0;o=0;p=v;break j}else{if((e[A>>1]|0)>=408){k=c[D>>2]|0;if(k|0){c[D>>2]=c[k>>2];c[F>>2]=(c[F>>2]|0)+1;break}k=c[E>>2]|0;if(!k)k=G;else{c[E>>2]=c[k>>2];c[F>>2]=(c[F>>2]|0)+1;break}}else k=C;c[k>>2]=(c[k>>2]|0)+1;fa=164}while(0);if((fa|0)==164){fa=0;k=_d(P,408,0)|0}if(!k){n=0;o=0;p=v}else{c[x+28>>2]=k;n=x+10|0;b[n>>1]=b[n>>1]|32;b[m>>1]=1024;m=k+24|0;gw(m|0,0,384)|0;c[k>>2]=c[g>>2];a[k+9>>0]=0;n=k+4|0;c[n>>2]=0;o=k+12|0;c[o>>2]=0;c[k+16>>2]=8;p=k+20|0;c[p>>2]=m;Il(k,c[x>>2]|0,44);m=c[o>>2]|0;if((m|0)>0)do{u=m;m=m+-1|0;Nl(f,k,m)}while((u|0)>1);c[n>>2]=g;k:do if((a[y>>0]|0)==0?(K=c[o>>2]|0,(K|0)>0):0){q=c[p>>2]|0;r=0;k=0;m=0;while(1){switch(a[c[q>>2]>>0]|0){case 45:case 50:case 53:case 54:case 55:case 56:case 57:case 49:{fa=174;break}default:if((b[q+12>>1]|0)==64)fa=174}if((fa|0)==174){fa=0;o=c[q+20>>2]|0;p=c[B>>2]|0;l:do if((p|0)>0){n=0;while(1){if((c[N+496+(n<<2)>>2]|0)==(o|0))break;n=n+1|0;if((n|0)>=(p|0)){n=0;o=0;break l}}n=cw(1,0,n|0)|0;o=L()|0}else{n=0;o=0}while(0);k=n|k;m=o|m}r=r+1|0;if((r|0)>=(K|0))break k;else q=q+48|0}}else{k=0;m=0}while(0);n=0;o=0;p=k&v;l=m&l}}else{q=b[x+10>>1]|0;if(!(q&8)){m=c[x+20>>2]|0;s=c[B>>2]|0;r=(s|0)>0;m:do if(r){k=0;while(1){if((c[N+496+(k<<2)>>2]|0)==(m|0))break;k=k+1|0;if((k|0)>=(s|0)){p=0;t=0;break m}}p=cw(1,0,k|0)|0;t=L()|0}else{p=0;t=0}while(0);if(!(q&2))k=t;else{m=c[(c[J>>2]|0)+((c[x+16>>2]|0)*48|0)+20>>2]|0;n:do if(r){k=0;while(1){if((c[N+496+(k<<2)>>2]|0)==(m|0))break;k=k+1|0;if((k|0)>=(s|0)){k=0;m=0;break n}}k=cw(1,0,k|0)|0;m=L()|0}else{k=0;m=0}while(0);p=k|p;k=m|t}u=(u&2)==0;n=u?0:p&n;o=u?0:k&o;p=p&v;l=k&l}else p=v}while(0);k=(p|0)!=0|(l|0)!=0;if(!(k&(w|0)>1))break;else{x=x+48|0;v=p}}K=i+408|0;c[K>>2]=p;c[K+4>>2]=l;b[H+(h*48|0)+12>>1]=512;if(k)fa=198;else r=n}else{n=i+408|0;c[n>>2]=-1;c[n+4>>2]=-1;b[H+(h*48|0)+12>>1]=512;n=-1;o=-1;fa=198}o:do if((fa|0)==198){a[g+9>>0]=1;if((c[I>>2]|0)==2){j=0;k=c[J>>2]|0;while(1){m=j+1|0;if((b[k+12>>1]|0)!=1024)if(!j)j=k;else{r=n;break o}else{i=c[k+28>>2]|0;if((c[i+12>>2]|0)<=(j|0)){r=n;break o}j=(c[i+20>>2]|0)+(j*48|0)|0}if(!j){r=n;break o}l=0;while(1){if((b[k+60>>1]|0)==1024){i=c[k+76>>2]|0;if((c[i+12>>2]|0)<=(l|0))break;i=(c[i+20>>2]|0)+(l*48|0)|0;if(!i)break}else if(!l)i=k+48|0;else break;Rl(f,g,j,i);l=l+1|0;k=c[J>>2]|0}j=m}}else r=n}while(0);if(!((r|0)==0&(o|0)==0)?(R=N+492|0,M=c[I>>2]|0,(M|0)>0):0){n=M;i=c[J>>2]|0;while(1){k=n+-1|0;q=i+10|0;b[q>>1]=b[q>>1]&-65;q=c[i+20>>2]|0;if((q|0)!=-1){l=c[R>>2]|0;p:do if((l|0)>0){j=0;while(1){if((c[N+496+(j<<2)>>2]|0)==(q|0))break;j=j+1|0;if((j|0)>=(l|0)){j=0;l=0;break p}}j=cw(1,0,j|0)|0;l=L()|0}else{j=0;l=0}while(0);if(!((j&r|0)==0&(l&o|0)==0))break}if((n|0)>1){n=k;i=i+48|0}else break i}l=c[i+28>>2]|0;m=c[(c[i>>2]|0)+12>>2]|0;if((n|0)>=1){q:do if((l|0)==-2){j=q;while(1){if((j|0)==(q|0)){if((c[i+28>>2]|0)!=-2){fa=242;break q}if(bk(O,c[(c[i>>2]|0)+12>>2]|0,m,-1)|0){fa=242;break q}M=c[i>>2]|0;K=Xj(c[M+16>>2]|0)|0;if(!(K<<24>>24==0|K<<24>>24==(Xj(c[M+12>>2]|0)|0)<<24>>24)){fa=242;break q}M=i+10|0;b[M>>1]=b[M>>1]|64}else{M=i+10|0;b[M>>1]=b[M>>1]&-65}if((k|0)<=0)break q;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}else{j=q;while(1){if((j|0)==(q|0)){if((c[i+28>>2]|0)!=(l|0)){fa=242;break q}M=c[i>>2]|0;K=Xj(c[M+16>>2]|0)|0;if(!(K<<24>>24==0|K<<24>>24==(Xj(c[M+12>>2]|0)|0)<<24>>24)){fa=242;break q}M=i+10|0;b[M>>1]=b[M>>1]|64}else{M=i+10|0;b[M>>1]=b[M>>1]&-65}if((k|0)<=0)break q;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}while(0);r:do if((fa|0)==242){i=c[I>>2]|0;if((i|0)<=0)break i;n=i;i=c[J>>2]|0;while(1){k=n+-1|0;p=i+10|0;b[p>>1]=b[p>>1]&-65;p=c[i+20>>2]|0;if((p|0)!=(q|0)){l=c[R>>2]|0;s:do if((l|0)>0){j=0;while(1){if((c[N+496+(j<<2)>>2]|0)==(p|0))break;j=j+1|0;if((j|0)>=(l|0)){j=0;l=0;break s}}j=cw(1,0,j|0)|0;l=L()|0}else{j=0;l=0}while(0);if(!((j&r|0)==0&(l&o|0)==0))break}if((n|0)>1){n=k;i=i+48|0}else break i}l=c[i+28>>2]|0;m=c[(c[i>>2]|0)+12>>2]|0;if((n|0)<1)break i;if((l|0)!=-2){j=p;while(1){if((j|0)==(p|0)){if((c[i+28>>2]|0)!=(l|0))break i;R=c[i>>2]|0;M=Xj(c[R+16>>2]|0)|0;if(!(M<<24>>24==0|M<<24>>24==(Xj(c[R+12>>2]|0)|0)<<24>>24))break i;R=i+10|0;b[R>>1]=b[R>>1]|64}else{R=i+10|0;b[R>>1]=b[R>>1]&-65}if((k|0)<=0)break r;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}j=p;while(1){if((j|0)==(p|0)){if((c[i+28>>2]|0)!=-2)break i;if(bk(O,c[(c[i>>2]|0)+12>>2]|0,m,-1)|0)break i;R=c[i>>2]|0;M=Xj(c[R+16>>2]|0)|0;if(!(M<<24>>24==0|M<<24>>24==(Xj(c[R+12>>2]|0)|0)<<24>>24))break i;R=i+10|0;b[R>>1]=b[R>>1]|64}else{R=i+10|0;b[R>>1]=b[R>>1]&-65}if((k|0)<=0)break r;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}while(0);i=c[I>>2]|0;if((i|0)>0){k=0;j=0;m=c[J>>2]|0;while(1){l=i;i=i+-1|0;if(b[m+10>>1]&64){k=c[(c[m>>2]|0)+16>>2]|0;if(!k)k=0;else k=dk(P,k,0,0)|0;j=nj(c[c[N>>2]>>2]|0,j,k)|0;k=c[(c[m>>2]|0)+12>>2]|0}if((l|0)<=1)break;else m=m+48|0}if(!k)i=0;else i=dk(P,k,0,0)|0}else{j=0;i=0}i=ej(O,49,i,0)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[Q+4>>2]&1;b[i+36>>1]=b[Q+36>>1]|0;c[i+20>>2]=j;Q=Ml(g,i,3)|0;Nl(f,g,Q);R=c[na>>2]|0;c[R+(Q*48|0)+16>>2]=h;b[R+(Q*48|0)+8>>1]=b[R+(h*48|0)+8>>1]|0;R=R+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;break}if(j|0)ri(P,j)}}}}while(0);i=(c[na>>2]|0)+(h*48|0)|0}}while(0);C=g+8|0;t:do if((a[C>>0]|0)==44){A=c[la>>2]|0;u:do if((((a[oa>>0]|0)==-95?(Z=oa+20|0,S=c[Z>>2]|0,(S|0)!=0):0)?(T=c[S>>2]|0,U=Jd(A,c[oa+8>>2]|0,T,1,0)|0,(U|0)!=0):0)?(V=c[U+4>>2]|0,(V&4|0)!=0):0){l=c[Z>>2]|0;if((T|0)>=3){j=c[l+44>>2]|0;if((a[j>>0]|0)!=110)break;j=c[j+8>>2]|0;k=a[j>>0]|0;if(!(k<<24>>24))break;if(a[j+1>>0]|0)break}else k=0;w=c[U+8>>2]|0;u=a[w>>0]|0;v=a[w+1>>0]|0;w=a[w+2>>0]|0;B=V&8;y=c[l+24>>2]|0;j=c[l+4>>2]|0;v:do if(!j)z=0;else while(1){l=c[j+4>>2]|0;if(!(l&4096)){z=j;break v}if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){z=0;break}}while(0);j=a[z>>0]|0;x=j<<24>>24==-108;do if(x){if(!(0==0?(c[A+32>>2]&8388608|0)==0:0))break u;j=c[la+220>>2]|0;q=b[z+32>>1]|0;r=q<<16>>16;w:do if((j|0)!=0?(V=c[j+100>>2]|0,X=r+-1|0,W=V+(X*40|0)|0,X=V+(X*40|0)+8|0,(b[X>>1]&1)==0):0){p=c[j>>2]|0;x:do if(!p){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](40)|0;fa=300;break}j=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){V=c[14978]|0;U=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;T=L()|0;c[14768]=((T|0)<0|(T|0)==0&U>>>0<=V>>>0)&1}l=Wa[c[29340>>2]&127](j)|0;if(!l){j=0;m=0;n=0;break w}j=Wa[c[29352>>2]&127](l)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){o=l;break}c[14987]=j;o=l}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){j=0;m=0;n=0;break w}}else{do if((e[p+276>>1]|0)>=40){l=p+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];fa=p+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=300;break x}l=p+296|0;j=c[l>>2]|0;if(!j){j=p+292|0;break}else{c[l>>2]=c[j>>2];fa=p+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=300;break x}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,40,0)|0;fa=300}while(0);if((fa|0)==300)if(!j){j=0;m=0;n=0;break}else o=j;j=o;l=j+40|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));n=o+8|0;b[n>>1]=1;c[o+32>>2]=p;c[o>>2]=c[W>>2];c[o+4>>2]=c[W+4>>2];c[o+8>>2]=c[W+8>>2];c[o+12>>2]=c[W+12>>2];c[o+16>>2]=c[W+16>>2];j=b[n>>1]&-1025;b[n>>1]=j;j=j&65535;y:do if(j&18|0){if(b[X>>1]&2048)break;l=(j|4096)&65535;b[n>>1]=l;do if(j&16384){m=o+12|0;j=(c[o>>2]|0)+(c[m>>2]|0)|0;if((j|0)<1)if(!(l&16)){fa=309;break}else j=1;if(Eg(o,j,1)|0)break y;gw((c[o+16>>2]|0)+(c[m>>2]|0)|0,0,c[o>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+(c[o>>2]|0);j=b[n>>1]&-16897;b[n>>1]=j;if(!(c[o+24>>2]|0)){fa=309;break}if((c[o+16>>2]|0)!=(c[o+20>>2]|0))fa=309}else fa=309;while(0);if((fa|0)==309){if(Jg(o)|0)break;j=b[n>>1]|0}b[n>>1]=j&-4097}while(0);j=b[n>>1]|0;if((j&15|16)<<16>>16!=18){j=0;m=o;n=o;break}do if((j&514)==514){if((a[o+10>>0]|0)!=1)break;j=c[o+16>>2]|0;m=o;n=o;break w}while(0);if(j&1){j=0;m=o;n=o;break}j=Gg(o,1)|0;m=o;n=o}else{j=0;m=0;n=0}while(0);l=c[la+8>>2]|0;if(q<<16>>16>31){s=l+208|0;c[s>>2]=c[s>>2]|-2147483648;s=m;t=n;break}else{s=l+208|0;c[s>>2]=c[s>>2]|1<<r+-1;s=m;t=n;break}}else{if(j<<24>>24!=110)break u;s=0;j=c[z+8>>2]|0;t=0}while(0);do if((j|0)!=0?(Y=a[j>>0]|0,Y<<24>>24!=w<<24>>24&((Y<<24>>24==v<<24>>24|(Y<<24>>24==0?1:Y<<24>>24==u<<24>>24))^1)):0){l=0;n=Y;do{m=l+1|0;if(n<<24>>24==k<<24>>24)l=(a[j+m>>0]|0)==0?m:l+2|0;else l=m;n=a[j+l>>0]|0;m=n<<24>>24==u<<24>>24}while(n<<24>>24!=w<<24>>24&((n<<24>>24==v<<24>>24|(n<<24>>24==0|m))^1));if(((l|0)!=0?(a[j+(l+-1)>>0]|0)!=-1:0)?!((l|0)<2?Y<<24>>24==k<<24>>24:0):0){if(m)q=(a[j+(l+1)>>0]|0)==0&1;else q=0;c[da>>2]=j;r=(Eu(j)|0)&1073741823;c[da+4>>2]=r;r=oj(A,110,da,0)|0;z:do if(r|0){p=c[r+8>>2]|0;a[p+l>>0]=0;if((l|0)>0){o=k&255;m=0;n=0;while(1){Y=n+((a[p+n>>0]|0)==(o|0)&1)|0;k=m+1|0;a[p+m>>0]=a[p+Y>>0]|0;n=Y+1|0;if((n|0)>=(l|0))break;else m=k}}else k=0;a[p+k>>0]=0;Y=a[p>>0]|0;if(!(Y<<24>>24==45|((Y&255)+-48|0)>>>0<10)?!((k|0)==1&Y<<24>>24==47):0)break;do if((a[y>>0]|0)==-94){if((Xj(y)|0)<<24>>24!=66)break;if(!(c[(c[y+44>>2]|0)+56>>2]|0))break z}while(0);ni(A,r);if(!s)break u;if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,t);break u}k=t;if((c[j+304>>2]|0)>>>0>k>>>0)break;if((c[j+308>>2]|0)>>>0<=k>>>0)break;_=j+300|0;c[t>>2]=c[_>>2];c[_>>2]=t;break u}while(0);if(!t)break u;if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break u}else{_=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-_;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break u}}while(0);if(!x){n=q;break}m=c[la+8>>2]|0;k=b[z+32>>1]|0;if(k<<16>>16>31)k=-2147483648;else k=1<<(k<<16>>16)+-1;Y=m+208|0;c[Y>>2]=c[Y>>2]|k;if(!q){n=0;break}if(!(a[(c[z+8>>2]|0)+1>>0]|0)){n=q;break}n=la+19|0;k=a[n>>0]|0;if(!(k<<24>>24)){Y=la+44|0;l=(c[Y>>2]|0)+1|0;c[Y>>2]=l}else{l=k+-1<<24>>24;a[n>>0]=l;l=c[la+148+((l&255)<<2)>>2]|0}Jj(la,z,l)|0;if(!(a[(c[m>>2]|0)+81>>0]|0))k=(c[m+104>>2]|0)+(((c[m+108>>2]|0)+-1|0)*20|0)|0;else k=59308;c[k+12>>2]=0;if(!l){n=q;break}k=a[n>>0]|0;if((k&255)>=8){n=q;break}a[n>>0]=k+1<<24>>24;c[la+148+((k&255)<<2)>>2]=l;n=q}else{n=0;r=0;j=0}}else{n=0;r=0;j=0}while(0);l=(j|0)==0;A:do if(s|0){if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,t);break A}k=t;if((c[j+304>>2]|0)>>>0>k>>>0)break;if((c[j+308>>2]|0)>>>0<=k>>>0)break;Y=j+300|0;c[t>>2]=c[Y>>2];c[Y>>2]=t;break A}while(0);if(t|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{Y=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!l){p=c[(c[Z>>2]|0)+24>>2]|0;if(!r)q=0;else q=dk(ha,r,0,0)|0;o=(B|0)!=0;do if(!o){if(a[(c[la>>2]|0)+81>>0]|0)break;l=i+10|0;b[l>>1]=b[l>>1]|1024;l=r+8|0;j=c[l>>2]|0;i=a[j>>0]|0;if(!(i<<24>>24))break;m=q+8|0;k=0;do{Z=i&255;a[j>>0]=i&~(a[880+Z>>0]&32);a[(c[m>>2]|0)+k>>0]=a[208+Z>>0]|0;k=k+1|0;j=(c[l>>2]|0)+k|0;i=a[j>>0]|0}while(i<<24>>24!=0)}while(0);if(!(a[_>>0]|0)){j=c[q+8>>2]|0;if(!j)i=0;else i=(Eu(j)|0)&1073741823;k=j+(i+-1)|0;i=a[k>>0]|0;if(o){j=i;i=n}else{j=a[208+(i&255)>>0]|0;i=i<<24>>24==64?0:n}a[k>>0]=(j&255)+1;n=i}l=o?34049:43602;k=(p|0)==0;if(k)j=0;else j=dk(ha,p,0,0)|0;c[da>>2]=l;c[da+4>>2]=6;i=oj(c[la>>2]|0,106,da,0)|0;if(!i)i=j;else{c[i+12>>2]=j;_=i+4|0;c[_>>2]=c[_>>2]|4352}i=ej(la,57,i,r)|0;if(i|0){_=i+4|0;c[_>>2]=c[_>>2]|c[ka>>2]&1;b[i+36>>1]=b[oa+36>>1]|0}m=Ml(g,i,259)|0;Nl(f,g,m);if(k)j=0;else j=dk(ha,p,0,0)|0;c[da>>2]=l;c[da+4>>2]=6;i=oj(c[la>>2]|0,106,da,0)|0;if(!i)i=j;else{c[i+12>>2]=j;_=i+4|0;c[_>>2]=c[_>>2]|4352}i=ej(la,56,i,q)|0;if(i|0){_=i+4|0;c[_>>2]=c[_>>2]|c[ka>>2]&1;b[i+36>>1]=b[oa+36>>1]|0}j=Ml(g,i,259)|0;Nl(f,g,j);k=c[na>>2]|0;i=k+(h*48|0)|0;if(!n)break;c[k+(m*48|0)+16>>2]=h;Y=k+(h*48|0)+8|0;b[k+(m*48|0)+8>>1]=b[Y>>1]|0;_=k+(h*48|0)+14|0;Z=a[_>>0]|0;c[k+(j*48|0)+16>>2]=h;b[k+(j*48|0)+8>>1]=b[Y>>1]|0;a[_>>0]=Z+2<<24>>24}}while(0);if((a[C>>0]|0)==44){j=a[oa>>0]|0;B:do switch(j<<24>>24){case -95:{j=c[oa+20>>2]|0;if((j|0)!=0?(c[j>>2]|0)==2:0){o=j+4|0;p=j+24|0;k=c[p>>2]|0;C:do if(((a[k>>0]|0)==-94?c[(c[k+44>>2]|0)+56>>2]|0:0)?(aa=c[oa+8>>2]|0,_=a[aa>>0]|0,$=_&255,_<<24>>24):0){j=(d[208+$>>0]|0)+-109|0;if(!j){l=38025;m=aa;do{m=m+1|0;l=l+1|0;_=a[m>>0]|0;j=(d[208+(_&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(_<<24>>24==0|(j|0)!=0))}D:do if(j){n=$|32;switch((n&255)<<24>>24){case 103:{m=43609;j=aa;do{j=j+1|0;m=m+1|0;fa=a[j>>0]|0;l=(d[208+(fa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(l|0)!=0));if(!l){j=1;break D}else break C}case 108:{fa=425;break}case 114:break;default:break C}if((fa|0)==425){j=43614;l=aa;do{l=l+1|0;j=j+1|0;fa=a[l>>0]|0;m=(d[208+(fa&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(m|0)!=0));if(!m){j=2;break}if((n|0)!=114)break C}m=43619;j=aa;do{j=j+1|0;m=m+1|0;fa=a[j>>0]|0;l=(d[208+(fa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(l|0)!=0));if(!l)j=3;else break C}else j=0;while(0);j=a[18144+(j<<3)+4>>0]|0;m=1;n=c[o>>2]|0;fa=453;break B}while(0);k=c[o>>2]|0;if((a[k>>0]|0)==-94?(ba=c[k+44>>2]|0,(c[ba+56>>2]|0)!=0):0){j=ba+64|0;while(1){j=c[j>>2]|0;if((c[j>>2]|0)==(ha|0))break;else j=j+24|0}j=c[j+8>>2]|0;l=c[(c[j>>2]|0)+72>>2]|0;if(l|0?(ca=_a[l&127](j,2,c[oa+8>>2]|0,da,ea)|0,(ca|0)>149):0){j=ca&255;m=1;n=c[p>>2]|0;fa=453;break B}fa=465}else fa=465}else fa=465;break}case 51:case -96:case 52:{k=c[pa>>2]|0;l=c[oa+16>>2]|0;if((a[k>>0]|0)==-94)m=(c[(c[k+44>>2]|0)+56>>2]|0)!=0&1;else m=0;if(l)if((a[l>>0]|0)==-94){fa=(c[(c[l+44>>2]|0)+56>>2]|0)==0;n=fa?l:k;k=fa?k:l;m=m+((fa^1)&1)|0}else n=l;else n=0;switch(j<<24>>24){case 52:{j=68;break}case -96:{j=69;break}case 51:{j=70;break}default:j=0}if((m|0)>0)fa=453;else fa=465;break}default:{}}while(0);if((fa|0)==453)while(1){u=m;m=m+-1|0;l=n;o=(n|0)==0;if(o){s=0;t=0}else{s=Pl(ga,l)|0;t=L()|0}r=k;if(!k){p=0;q=0}else{p=Pl(ga,r)|0;q=L()|0}if((p&s|0)==0&(q&t|0)==0){if(o)i=0;else i=dk(ha,l,0,0)|0;i=ej(la,46,0,i)|0;if((i|0)!=0&(c[ka>>2]&1|0)!=0){fa=i+4|0;c[fa>>2]=c[fa>>2]|1}fa=Ml(g,i,3)|0;ca=c[na>>2]|0;i=ca+(fa*48|0)+32|0;c[i>>2]=s;c[i+4>>2]=t;c[ca+(fa*48|0)+20>>2]=c[r+28>>2];c[ca+(fa*48|0)+28>>2]=b[r+32>>1];b[ca+(fa*48|0)+12>>1]=64;a[ca+(fa*48|0)+15>>0]=j;i=c[na>>2]|0;c[i+(fa*48|0)+16>>2]=h;b[i+(fa*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;da=i+(h*48|0)+14|0;a[da>>0]=(a[da>>0]|0)+1<<24>>24;da=i+(h*48|0)+10|0;b[da>>1]=b[da>>1]|8;da=i+(h*48|0)+40|0;ea=c[da+4>>2]|0;fa=ca+(fa*48|0)+40|0;c[fa>>2]=c[da>>2];c[fa+4>>2]=ea;i=i+(h*48|0)|0}if((u|0)<=1){fa=465;break}else{fa=n;n=k;k=fa}}if((fa|0)==465){if((a[C>>0]|0)!=44)break;j=a[oa>>0]|0}switch(j<<24>>24){case 45:case 53:{m=c[pa>>2]|0;l=a[m>>0]|0;if(l<<24>>24==-88)j=a[m+38>>0]|0;else j=l;switch(j<<24>>24){case -87:{j=m+20|0;fa=473;break}case -125:{j=c[m+20>>2]|0;fa=473;break}default:{}}do if((fa|0)==473){q=c[c[j>>2]>>2]|0;if((q|0)>1){r=oa+16|0;k=c[r>>2]|0;j=a[k>>0]|0;if(j<<24>>24==-88)j=a[k+38>>0]|0;switch(j<<24>>24){case -87:{j=k+20|0;fa=479;break}case -125:{j=c[k+20>>2]|0;fa=479;break}default:j=1}if((fa|0)==479)j=c[c[j>>2]>>2]|0;if((j|0)==(q|0)){if(c[m+4>>2]&2048|0?c[k+4>>2]&2048|0:0)break;o=la+272|0;p=oa+36|0;n=0;j=l;i=m;while(1){switch(j<<24>>24){case -125:{j=ej(la,170,0,0)|0;if(!j)j=0;else{b[j+32>>1]=n;c[j+12>>2]=i}break}case -87:{i=c[(c[i+20>>2]|0)+4+(n*20|0)>>2]|0;if(!i){k=0;j=0;fa=489}else fa=488;break}default:fa=488}if((fa|0)==488){k=i;j=dk(c[la>>2]|0,i,0,0)|0;fa=489}E:do if((fa|0)==489){fa=0;i=c[o>>2]|0;if(i){while(1){if((c[i>>2]|0)==(k|0))break;i=c[i+12>>2]|0;if(!i)break E}c[i>>2]=j}}while(0);i=c[r>>2]|0;switch(a[i>>0]|0){case -125:{k=ej(la,170,0,0)|0;if(!k)i=0;else{b[k+32>>1]=n;c[k+12>>2]=i;i=k}break}case -87:{i=c[(c[i+20>>2]|0)+4+(n*20|0)>>2]|0;if(!i){l=0;i=0;fa=499}else fa=498;break}default:fa=498}if((fa|0)==498){l=i;i=dk(c[la>>2]|0,i,0,0)|0;fa=499}F:do if((fa|0)==499){fa=0;k=c[o>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break F}c[k>>2]=i}}while(0);i=ej(la,d[oa>>0]|0,j,i)|0;if(i|0){ha=i+4|0;c[ha>>2]=c[ha>>2]|c[ka>>2]&1;b[i+36>>1]=b[p>>1]|0}Nl(f,g,Ml(g,i,1)|0);i=n+1|0;if((i|0)==(q|0))break;ha=c[pa>>2]|0;n=i;j=a[ha>>0]|0;i=ha}la=a[C>>0]|0;i=c[na>>2]|0;ka=i+(h*48|0)+10|0;b[ka>>1]=b[ka>>1]|6;b[i+(h*48|0)+12>>1]=0;if(la<<24>>24==44)i=i+(h*48|0)|0;else break t}}}while(0);j=a[oa>>0]|0;break}default:{}}if(((j<<24>>24==49?(c[i+24>>2]|0)==0:0)?(ma=c[pa>>2]|0,(a[ma>>0]|0)==-87):0)?(c[(c[oa+20>>2]|0)+52>>2]|0)==0:0){k=0;i=-87;j=ma;while(1){if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;fa=520;break}case -125:{i=c[j+20>>2]|0;fa=520;break}default:i=1}if((fa|0)==520){fa=0;i=c[c[i>>2]>>2]|0}if((k|0)>=(i|0))break t;ma=Ml(g,oa,2)|0;i=k+1|0;c[(c[na>>2]|0)+(ma*48|0)+24>>2]=i;Nl(f,g,ma);j=c[na>>2]|0;c[j+(ma*48|0)+16>>2]=h;b[j+(ma*48|0)+8>>1]=b[j+(h*48|0)+8>>1]|0;j=j+(h*48|0)+14|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;j=c[pa>>2]|0;k=i;i=a[j>>0]|0}}}}while(0);h=(c[na>>2]|0)+(h*48|0)+32|0;oa=h;pa=c[oa+4>>2]|ia;c[h>>2]=c[oa>>2]|ja;c[h+4>>2]=pa;Ra=qa;return}function Ol(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!d){r=0;s=0;K(r|0);return s|0}o=d;d=0;e=0;do{n=c[o+32>>2]|0;l=c[o>>2]|0;if((l|0)!=0?(s=c[l>>2]|0,(s|0)>0):0){k=0;j=s;f=0;g=0;do{h=c[l+4+(k*20|0)>>2]|0;if(!h){h=0;i=0}else{h=Pl(b,h)|0;i=L()|0;j=c[l>>2]|0}f=h|f;g=i|g;k=k+1|0}while((k|0)<(j|0))}else{f=0;g=0}l=f|d;k=g|e;j=c[o+40>>2]|0;if((j|0)!=0?(q=c[j>>2]|0,(q|0)>0):0){i=0;h=q;d=0;e=0;do{f=c[j+4+(i*20|0)>>2]|0;if(!f){f=0;g=0}else{f=Pl(b,f)|0;g=L()|0;h=c[j>>2]|0}d=f|d;e=g|e;i=i+1|0}while((i|0)<(h|0))}else{d=0;e=0}l=l|d;k=k|e;j=c[o+48>>2]|0;if((j|0)!=0?(r=c[j>>2]|0,(r|0)>0):0){i=0;g=r;h=0;e=0;while(1){d=c[j+4+(i*20|0)>>2]|0;if(!d){d=0;f=0}else{d=Pl(b,d)|0;f=L()|0;g=c[j>>2]|0}d=d|h;e=f|e;i=i+1|0;if((i|0)>=(g|0)){h=d;i=e;break}else h=d}}else{h=0;i=0}d=c[o+36>>2]|0;if(!d){e=0;g=0}else{e=Pl(b,d)|0;g=L()|0}d=c[o+44>>2]|0;if(!d){d=0;f=0}else{d=Pl(b,d)|0;f=L()|0}d=l|h|e|d;e=k|i|g|f;if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;do{h=Ol(b,c[n+8+(m*72|0)+20>>2]|0)|0;g=L()|0|e;e=c[n+8+(m*72|0)+44>>2]|0;if(!e){e=0;f=0}else{e=Pl(b,e)|0;f=L()|0}d=h|d|e;e=g|f;if(a[n+8+(m*72|0)+37>>0]&4){l=c[n+8+(m*72|0)+64>>2]|0;if((l|0)!=0?(p=c[l>>2]|0,(p|0)>0):0){k=0;f=0;g=0;i=p;do{h=c[l+4+(k*20|0)>>2]|0;if(!h){h=0;j=0}else{h=Pl(b,h)|0;j=L()|0;i=c[l>>2]|0}f=h|f;g=j|g;k=k+1|0}while((k|0)<(i|0))}else{f=0;g=0}d=f|d;e=g|e}m=m+1|0}while((m|0)<(c[n>>2]|0))}o=c[o+52>>2]|0}while((o|0)!=0);K(e|0);return d|0}function Pl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=a[d>>0]|0;j=d+4|0;f=c[j>>2]|0;if(e<<24>>24==-94&(f&8|0)==0){g=c[d+28>>2]|0;f=c[b+4>>2]|0;if((f|0)<=0){o=0;b=0;K(o|0);return b|0}e=0;while(1){if((c[b+8+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(f|0)){e=0;f=0;i=45;break}}if((i|0)==45){K(e|0);return f|0}b=cw(1,0,e|0)|0;o=L()|0;K(o|0);return b|0}if(f&8404992|0){o=0;b=0;K(o|0);return b|0}a:do if(e<<24>>24==-85?(g=c[d+28>>2]|0,h=c[b+4>>2]|0,(h|0)>0):0){e=0;while(1){if((c[b+8+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(h|0)){f=0;g=0;break a}}f=cw(1,0,e|0)|0;g=L()|0}else{f=0;g=0}while(0);e=c[d+12>>2]|0;if(e){n=Pl(b,e)|0;f=n|f;g=L()|0|g}e=c[d+16>>2]|0;do if(!e){e=c[j>>2]|0;if(e&2048|0){if(e&32|0)c[b>>2]=1;n=Ol(b,c[d+20>>2]|0)|0;f=n|f;g=L()|0|g;break}n=c[d+20>>2]|0;if(n){e=c[n>>2]|0;if((e|0)>0){m=0;k=0;h=0;while(1){i=c[n+4+(m*20|0)>>2]|0;if(!i){i=0;j=0}else{i=Pl(b,i)|0;j=L()|0;e=c[n>>2]|0}i=i|k;h=j|h;m=m+1|0;if((m|0)>=(e|0)){e=i;break}else k=i}}else{e=0;h=0}f=e|f;g=h|g}}else{n=Pl(b,e)|0;f=n|f;g=L()|0|g}while(0);if((a[d>>0]|0)!=-95){o=g;b=f;K(o|0);return b|0}d=d+44|0;e=c[d>>2]|0;if(!e){o=g;b=f;K(o|0);return b|0}n=c[e+8>>2]|0;if((n|0)!=0?(l=c[n>>2]|0,(l|0)>0):0){m=0;h=0;i=0;while(1){e=c[n+4+(m*20|0)>>2]|0;if(!e){j=0;k=0;e=l}else{j=Pl(b,e)|0;k=L()|0;e=c[n>>2]|0}h=j|h;i=k|i;m=m+1|0;if((m|0)>=(e|0))break;else l=e}e=c[d>>2]|0}else{h=0;i=0}m=h|f;l=i|g;k=c[e+12>>2]|0;if((k|0)!=0?(o=c[k>>2]|0,(o|0)>0):0){j=0;f=0;e=0;h=o;do{g=c[k+4+(j*20|0)>>2]|0;if(!g){g=0;i=0}else{g=Pl(b,g)|0;i=L()|0;h=c[k>>2]|0}f=g|f;e=i|e;j=j+1|0}while((j|0)<(h|0))}else{f=0;e=0}o=l|e;b=m|f;K(o|0);return b|0}function Ql(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(e>>>0>0|(e|0)==0&d>>>0>1){h=0;do{h=h+1|0;m=d;d=bw(d|0,e|0,1)|0;l=e;e=L()|0}while(l>>>0>0|(l|0)==0&m>>>0>3)}else h=0;m=c[a+8+(h*72|0)+40>>2]|0;h=c[(c[a+8+(h*72|0)+16>>2]|0)+8>>2]|0;if(!h){p=0;return p|0}l=(g|0)==0;a:while(1){j=h+40|0;b:do if(c[j>>2]|0?(n=h+50|0,o=b[n>>1]|0,o<<16>>16):0){k=h+4|0;if(l){a=0;d=o;while(1){if((b[(c[k>>2]|0)+(a<<1)>>1]|0)==-2){d=c[(c[j>>2]|0)+4+(a*20|0)>>2]|0;c:do if(!d)d=0;else while(1){e=c[d+4>>2]|0;if(!(e&4096))break c;if(!(e&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){d=0;break}}while(0);if(!(bk(0,0,d,m)|0))break a;d=b[n>>1]|0}a=a+1|0;if(a>>>0>=(d&65535)>>>0)break b}}i=0;d=o;do{if((b[(c[k>>2]|0)+(i<<1)>>1]|0)==-2){d=c[(c[j>>2]|0)+4+(i*20|0)>>2]|0;e=g;while(1){a=c[e+4>>2]|0;if(!(a&4096))break;if(!(a&262144))e=e+12|0;else e=(c[e+20>>2]|0)+4|0;e=c[e>>2]|0;if(!e){e=0;break}}d:do if(!d)d=0;else while(1){a=c[d+4>>2]|0;if(!(a&4096))break d;if(!(a&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){d=0;break}}while(0);if(!(bk(0,e,d,m)|0))break a;d=b[n>>1]|0}i=i+1|0}while(i>>>0<(d&65535)>>>0)}while(0);h=c[h+20>>2]|0;if(!h){h=0;p=41;break}}if((p|0)==41)return h|0;c[f>>2]=m;c[f+4>>2]=-2;p=1;return p|0}function Rl(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=b[f+12>>1]|0;i=b[g+12>>1]|0;j=i|h;if((h&62)==0|(i&62)==0)return;i=j&65535;if(!((i&26|0)==(i|0)|(i&38|0)==(i|0)))return;if(bk(0,c[(c[f>>2]|0)+12>>2]|0,c[(c[g>>2]|0)+12>>2]|0,-1)|0)return;if(bk(0,c[(c[f>>2]|0)+16>>2]|0,c[(c[g>>2]|0)+16>>2]|0,-1)|0)return;f=c[f>>2]|0;if(!f)return;h=dk(c[c[c[e>>2]>>2]>>2]|0,f,0,0)|0;if(!h)return;g=((i+65535&i|0)==0?j:(i&24|0)==0?32:8)&65535;f=53;while(1)if((2<<f+-53|0)==(g|0))break;else f=f+1|0;a[h>>0]=f;Nl(d,e,Ml(e,h,3)|0);return}function Sl(b,d){b=b|0;d=d|0;if((a[d>>0]|0)!=-95){d=0;return d|0}if(c[d+4>>2]&524288|0){d=0;return d|0}a[b+20>>0]=0;d=2;return d|0}function Tl(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;t=e+24|0;x=e+4|0;y=e+18|0;z=e+12|0;A=e+20|0;C=e+17|0;D=e+8|0;u=e+16|0;v=e+28|0;w=e+72|0;g=c[t>>2]|0;h=c[x>>2]|0;f=a[y>>0]|0;a:while(1){q=(f&255)+-1|0;s=b[e+72+(q<<1)>>1]|0;q=c[e+28+(q<<2)>>2]|0;r=s<<16>>16;s=s<<16>>16==-2;f=h;while(1){p=f+12|0;if((g|0)<(c[p>>2]|0)){o=(c[f+20>>2]|0)+(g*48|0)|0;while(1){do if((c[o+20>>2]|0)==(q|0)?(c[o+28>>2]|0)==(r|0):0){if(s){i=c[(c[o>>2]|0)+12>>2]|0;h=c[z>>2]|0;b:do if(!i)i=0;else while(1){j=c[i+4>>2]|0;if(!(j&4096))break b;if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);c:do if(!h)h=0;else while(1){j=c[h+4>>2]|0;if(!(j&4096))break c;if(!(j&262144))h=h+12|0;else h=(c[h+20>>2]|0)+4|0;h=c[h>>2]|0;if(!h){h=0;break}}while(0);if(bk(0,i,h,q)|0)break}if((d[y>>0]|0)>=2?c[(c[o>>2]|0)+4>>2]&1|0:0)break;n=o+12|0;h=b[n>>1]|0;if((h&2048)!=0?(B=a[C>>0]|0,(B&255)<11):0){i=c[(c[o>>2]|0)+16>>2]|0;j=c[i+4>>2]|0;if(j&4096)do{if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;j=c[i+4>>2]|0}while((j&4096|0)!=0);if((a[i>>0]|0)==-94){m=B&255;d:do if(!(B<<24>>24))j=0;else{l=c[i+28>>2]|0;k=i+32|0;j=0;do{if((c[e+28+(j<<2)>>2]|0)==(l|0)?(b[e+72+(j<<1)>>1]|0)==(b[k>>1]|0):0)break d;j=j+1|0}while(j>>>0<m>>>0)}while(0);if((j|0)==(m|0)){c[e+28+(m<<2)>>2]=c[i+28>>2];b[e+72+(m<<1)>>1]=b[i+32>>1]|0;a[C>>0]=B+1<<24>>24;h=b[n>>1]|0}}}i=h&65535;if(c[A>>2]&i|0){if((i&256|0)==0&(c[D>>2]|0)!=0){k=c[c[f>>2]>>2]|0;h=c[o>>2]|0;if(!(Vl(h,a[u>>0]|0)|0))break;i=c[h+12>>2]|0;j=c[h+16>>2]|0;do if(!(c[i+4>>2]&256)){if(j|0?c[j+4>>2]&256|0:0){h=Yi(k,j)|0;E=51;break}h=Yi(k,i)|0;if(!h){h=Yi(k,j)|0;E=51}}else{h=Yi(k,i)|0;E=51}while(0);if((E|0)==51){E=0;if(!h)h=c[(c[k>>2]|0)+8>>2]|0}i=c[h>>2]|0;j=c[D>>2]|0;m=a[i>>0]|0;h=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(h|0)!=0))do{i=i+1|0;j=j+1|0;m=a[i>>0]|0;h=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(h|0)!=0));if(h|0)break;h=b[n>>1]|0}if(!(h&130))break a;h=c[(c[o>>2]|0)+16>>2]|0;if((a[h>>0]|0)!=-94)break a;if((c[h+28>>2]|0)!=(c[v>>2]|0))break a;if((b[h+32>>1]|0)!=(b[w>>1]|0))break a}}while(0);g=g+1|0;if((g|0)<(c[p>>2]|0))o=o+48|0;else break}}f=c[f+4>>2]|0;if(!f)break;else g=0}f=a[y>>0]|0;if((f&255)>=(d[C>>0]|0)){f=0;E=67;break}h=c[e>>2]|0;f=f+1<<24>>24;a[y>>0]=f;g=0}if((E|0)==67)return f|0;c[x>>2]=f;c[t>>2]=g+1;E=o;return E|0}function Ul(b){b=b|0;var d=0;d=Xj(c[b+12>>2]|0)|0;a[b+16>>0]=d;return Tl(b)|0}function Vl(a,b){a=a|0;b=b|0;var d=0,e=0;e=Xj(c[a+12>>2]|0)|0;d=c[a+16>>2]|0;do if(!d){if(!(c[a+4>>2]&2048)){a=e<<24>>24==0?65:e;break}a=Xj(c[(c[c[a+20>>2]>>2]|0)+4>>2]|0)|0;if(e<<24>>24==0|a<<24>>24==0){a=(a|e)<<24>>24==0?65:(a&255)+(e&255)&255;break}else{a=e<<24>>24>66|a<<24>>24>66?67:65;break}}else{a=Xj(d)|0;if(e<<24>>24==0|a<<24>>24==0){a=(a|e)<<24>>24==0?65:(a&255)+(e&255)&255;break}else{a=e<<24>>24>66|a<<24>>24>66?67:65;break}}while(0);switch(a<<24>>24|0){case 66:{b=b<<24>>24==66;b=b&1;return b|0}case 65:{b=1;b=b&1;return b|0}default:{b=b<<24>>24>66;b=b&1;return b|0}}return 0}function Wl(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=Ra;Ra=Ra+16|0;p=K;H=K+4|0;s=c[f>>2]|0;J=c[s>>2]|0;r=c[f+4>>2]|0;F=c[f+12>>2]|0;s=c[s+4>>2]|0;x=d[F+16>>0]|0;B=c[f+8>>2]|0;G=r+20|0;q=r+12|0;n=c[q>>2]|0;if((n|0)>0){o=c[s+8+(x*72|0)+40>>2]|0;l=0;k=0;m=c[G>>2]|0;while(1){if((c[m+20>>2]|0)==(o|0)?(E=m+32|0,(c[E>>2]&i|0)==0?(c[E+4>>2]&j|0)==0:0):0)k=k+((b[m+12>>1]&-2049)<<16>>16!=0&1)|0;l=l+1|0;if((l|0)==(n|0)){o=k;break}else m=m+48|0}}else o=0;if(!B)y=0;else{n=c[B>>2]|0;a:do if((n|0)>0){m=s+8+(x*72|0)+40|0;k=0;do{l=c[B+4+(k*20|0)>>2]|0;if((a[l>>0]|0)!=-94)break a;if((c[l+28>>2]|0)!=(c[m>>2]|0))break a;k=k+1|0}while((k|0)<(n|0))}else k=0;while(0);y=(k|0)==(n|0)?n:0}m=c[J>>2]|0;n=(o*20|0)+80+(y<<3)|0;b:do if(!m){E=Sv(n|0,0,-1,-1)|0;C=L()|0;if(!(C>>>0>0|(C|0)==0&E>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;D=38;break}k=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){E=c[14978]|0;C=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&C>>>0<=E>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;E=l}else E=l}else D=39}else D=39}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){D=39;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];D=m+284|0;c[D>>2]=(c[D>>2]|0)+1;D=38;break b}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];D=m+284|0;c[D>>2]=(c[D>>2]|0)+1;D=38;break b}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;D=38}while(0);if((D|0)==38)if(!k)D=39;else E=k;if((D|0)==39){cd(J,34831,p);J=7;Ra=K;return J|0}gw(E|0,0,n|0)|0;v=E+80|0;w=v+(o*12|0)|0;c[E>>2]=o;c[E+8>>2]=y;C=E+4|0;c[C>>2]=v;c[E+12>>2]=w;c[E+16>>2]=w+(y<<3);c[E+72>>2]=r;c[E+76>>2]=J;t=c[q>>2]|0;if((t|0)>0){u=s+8+(x*72|0)+36|0;s=c[s+8+(x*72|0)+40>>2]|0;l=0;k=0;q=c[G>>2]|0;r=0;while(1){do if(((c[q+20>>2]|0)==(s|0)?(x=q+32|0,(c[x>>2]&i|0)==0?(c[x+4>>2]&j|0)==0:0):0)?(z=b[q+12>>1]|0,A=z&65535,(A&63487|0)!=0):0){if(a[u>>0]&8?!((A&384|0)==0?1:(c[(c[q>>2]|0)+4>>2]&1|0)!=0):0)break;c[v+(l*12|0)>>2]=c[q+28>>2];c[v+(l*12|0)+8>>2]=r;p=z&8191;p=p<<16>>16==1?2:p;m=p&65535;c:do if(p<<16>>16!=64){if(m&384|0){m=v+(l*12|0)+4|0;if(p<<16>>16==256){a[m>>0]=71;break}else{a[m>>0]=72;break}}o=v+(l*12|0)+4|0;a[o>>0]=p;if(m&60){n=c[(c[q>>2]|0)+16>>2]|0;m=a[n>>0]|0;if(m<<24>>24==-88)m=a[n+38>>0]|0;switch(m<<24>>24){case -87:{m=n+20|0;break}case -125:{m=c[n+20>>2]|0;break}default:break c}if((c[c[m>>2]>>2]|0)>=2){k=r>>>0<16?(1<<r|k&65535)&65535:k;switch(p&8191){case 16:{a[o>>0]=8;break c}case 4:{a[o>>0]=32;break c}default:break c}}}}else a[v+(l*12|0)+4>>0]=a[q+15>>0]|0;while(0);l=l+1|0}while(0);r=r+1|0;if((r|0)==(t|0)){i=k;break}else q=q+48|0}}else i=0;if((y|0)<=0){if(!E){J=7;Ra=K;return J|0}}else{k=0;do{c[w+(k<<3)>>2]=b[(c[B+4+(k*20|0)>>2]|0)+32>>1];a[w+(k<<3)+4>>0]=a[B+4+(k*20|0)+12>>0]|0;k=k+1|0}while((k|0)!=(y|0))}b[F+18>>1]=0;c[F+36>>2]=1024;b[F+40>>1]=0;a[F+28>>0]=0;A=c[E>>2]|0;k=c[J>>2]|0;o=F+44|0;d:do if((A|0)>(e[o>>1]|0)){p=A+7&-8;n=p<<2;e:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))D=80;else D=94;else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<n>>>0:0))){l=k+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];D=k+284|0;c[D>>2]=(c[D>>2]|0)+1;D=81;break e}l=k+296|0;m=c[l>>2]|0;if(!m){l=k+292|0;break}else{c[l>>2]=c[m>>2];D=k+284|0;c[D>>2]=(c[D>>2]|0)+1;D=81;break e}}else l=k+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;D=80}while(0);if((D|0)==80){m=_d(k,n,0)|0;D=81}do if((D|0)==81){if(!m){k=c[J>>2]|0;if(!k)break;else{D=94;break}}l=F+48|0;ew(m|0,c[l>>2]|0,e[o>>1]<<2|0)|0;n=c[l>>2]|0;do if((n|0)!=(F+56|0)){if(c[k+480>>2]|0){Xd(k,n);break}B=n;if((c[k+304>>2]|0)>>>0<=B>>>0?(c[k+308>>2]|0)>>>0>B>>>0:0){B=k+300|0;c[n>>2]=c[B>>2];c[B>>2]=n;break}if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{B=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[l>>2]=m;b[o>>1]=p;break d}while(0);if((D|0)==94){if(c[k+480>>2]|0){Xd(k,E);J=7;Ra=K;return J|0}J=E;if((c[k+304>>2]|0)>>>0<=J>>>0?(c[k+308>>2]|0)>>>0>J>>>0:0){J=k+300|0;c[E>>2]=c[J>>2];c[J>>2]=E;J=7;Ra=K;return J|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);J=7;Ra=K;return J|0}else{J=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);J=7;Ra=K;return J|0}}while(0);l=Zl(f,g,h,-1,-1,0,E,i,H)|0;if(!l){z=F;w=~g;x=~h;y=c[z>>2]&w;z=c[z+4>>2]&x;k=(c[H>>2]|0)!=0;if((y|0)!=0|(z|0)!=0|k){if(k){l=Zl(f,g,h,-1,-1,1,E,i,H)|0;n=F;k=c[n>>2]&w;n=c[n+4>>2]&x;m=(k|0)==0&(n|0)==0&1;if(!l){v=k;D=106}else k=m}else{m=0;v=0;n=0;D=106}f:do if((D|0)==106){u=(A|0)>0;k=m;o=0;l=0;while(1){if(!u){l=0;break f}q=c[G>>2]|0;r=c[C>>2]|0;while(1){p=0;t=-1;s=-1;do{D=q+((c[r+(p*12|0)+8>>2]|0)*48|0)+32|0;j=c[D>>2]&w;D=c[D+4>>2]&x;B=(D>>>0>l>>>0|(D|0)==(l|0)&j>>>0>o>>>0)&(D>>>0<t>>>0|(D|0)==(t|0)&j>>>0<s>>>0);s=B?j:s;t=B?D:t;p=p+1|0}while((p|0)!=(A|0));if((s|0)==-1&(t|0)==-1){l=0;break f}if((s|0)==(y|0)&(t|0)==(z|0)|(s|0)==(v|0)&(t|0)==(n|0)){l=t;o=s}else break}l=Zl(f,g,h,s|g,t|h,0,E,i,H)|0;D=F;if((c[D>>2]|0)==(g|0)?(c[D+4>>2]|0)==(h|0):0){k=(c[H>>2]|0)==0?1:k;m=1}if(!l){o=s;l=t}else break}}while(0);if(!(m|l)){l=Zl(f,g,h,g,h,0,E,i,H)|0;k=(c[H>>2]|0)==0?1:k}if(!(k|l))l=Zl(f,g,h,g,h,1,E,i,H)|0}else l=0}do if(c[E+28>>2]|0?(I=c[E+24>>2]|0,I|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](I);break}else{H=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);break}while(0);k=c[J>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,E);J=l;Ra=K;return J|0}J=E;if((c[k+304>>2]|0)>>>0<=J>>>0?(c[k+308>>2]|0)>>>0>J>>>0:0){J=k+300|0;c[E>>2]=c[J>>2];c[J>>2]=E;J=l;Ra=K;return J|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);J=l;Ra=K;return J|0}else{J=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);J=l;Ra=K;return J|0}return 0}function Xl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;ja=Ra;Ra=Ra+128|0;ca=ja+80|0;fa=ja+72|0;k=ja;l=ja+112|0;m=ja+108|0;b[m>>1]=-1;ha=c[f+12>>2]|0;_=c[f>>2]|0;P=c[_+4>>2]|0;Q=d[ha+16>>0]|0;$=P+8+(Q*72|0)|0;O=P+8+(Q*72|0)+16|0;R=c[O>>2]|0;aa=c[f+4>>2]|0;ba=P+8+(Q*72|0)+68|0;i=c[ba>>2]|0;o=(i|0)==0;do if(o){if(c[R+36>>2]&32|0){k=c[R+8>>2]|0;break}i=k;j=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));b[k+50>>1]=1;b[k+52>>1]=1;c[k+4>>2]=m;c[k+8>>2]=l;a[k+54>>0]=5;c[k+12>>2]=R;b[k+48>>1]=b[R+46>>1]|0;Z=k+55|0;a[Z>>0]=3;a[Z+1>>0]=0;b[l>>1]=b[R+44>>1]|0;b[l+2>>1]=0;if(!(a[P+8+(Q*72|0)+37>>0]&1))c[k+20>>2]=c[(c[O>>2]|0)+8>>2]}else k=i;while(0);m=b[R+44>>1]|0;if(m<<16>>16<11)i=0;else{i=m<<16>>16;j=((i|0)<0)<<31>>31;if((m&65535)>255){l=40;do{l=(l&65535)+40|0;Z=i;i=bw(i|0,j|0,4)|0;Y=j;j=L()|0}while(Y>>>0>0|(Y|0)==0&Z>>>0>4095);l=l&65535}else l=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{l=(l&65535)+10&65535;Z=i;i=bw(i|0,j|0,1)|0;Y=j;j=L()|0}while(Y>>>0>0|(Y|0)==0&Z>>>0>31);j=l}else j=l;i=(j&65535)+65493+(e[3648+((i&7)<<1)>>1]|0)&65535}a:do if((((((c[f+16>>2]|0)==0?(b[_+44>>1]&32)==0:0)?!((0==0?(c[(c[c[_>>2]>>2]|0)+32>>2]&32768|0)==0:0)|o^1):0)?(n=a[P+8+(Q*72|0)+37>>0]|0,(n&1)==0):0)?(M=R+36|0,(n&40)==0&(c[M>>2]&32|0)==0):0)?(I=c[aa+20>>2]|0,Z=c[aa+12>>2]|0,N=I+(Z*48|0)|0,(Z|0)>0):0){A=ha+8|0;B=P+8+(Q*72|0)+40|0;C=P+8+(Q*72|0)+36|0;D=ha+24|0;E=ha+42|0;F=ha+32|0;G=ha+40|0;H=ha+48|0;x=(i&65535)+(m&65535)|0;s=x&65535;t=ha+18|0;u=R+12|0;v=ha+22|0;n=i<<16>>16;w=(x&65535)+65526|0;x=(x<<16>>16)+28|0;y=ha+20|0;z=ha+36|0;o=i<<16>>16<12;p=i<<16>>16>74;q=18112+(43-n)|0;r=18112+(n+-43)|0;if(i<<16>>16<43){m=i<<16>>16<-6?43:44;l=I;while(1){j=l+32|0;Z=j;Y=A;do if((((c[Y>>2]&c[Z>>2]|0)==0?(c[Y+4>>2]&c[Z+4>>2]|0)==0:0)?(c[l+20>>2]|0)==(c[B>>2]|0):0)?(J=e[l+12>>1]|0,(J&130|0)!=0):0){if(a[C>>0]&8?!((J&128|0)==0?1:(c[(c[l>>2]|0)+4>>2]&1|0)!=0):0){i=0;break}i=c[l+28>>2]|0;if((i|0)>=0?(Vl(c[l>>2]|0,a[(c[(c[O>>2]|0)+4>>2]|0)+(i<<4)+13>>0]|0)|0)!=0:0){b[D>>1]=1;b[E>>1]=0;c[F>>2]=0;b[G>>1]=1;c[c[H>>2]>>2]=l;b[t>>1]=s;if(!(c[u>>2]|0))i=(c[M>>2]&2|0)==0?x:w;else i=w;b[t>>1]=(i&32768|0)==0?i&65535:0;b[v>>1]=43;if(o)i=m;else i=(d[q>>0]|0)+43&65535;b[y>>1]=i;c[z>>2]=16384;Y=j;Z=c[Y+4>>2]|h;i=ha;c[i>>2]=c[Y>>2]|g;c[i+4>>2]=Z;i=_l(f,ha)|0}else i=0}else i=0;while(0);l=l+48|0;if(!(l>>>0<N>>>0&(i|0)==0))break a}}m=i<<16>>16>92?i:n+1&65535;l=I;do{j=l+32|0;Z=j;Y=A;do if((((c[Y>>2]&c[Z>>2]|0)==0?(c[Y+4>>2]&c[Z+4>>2]|0)==0:0)?(c[l+20>>2]|0)==(c[B>>2]|0):0)?(K=e[l+12>>1]|0,(K&130|0)!=0):0){if(a[C>>0]&8?!((K&128|0)==0?1:(c[(c[l>>2]|0)+4>>2]&1|0)!=0):0){i=0;break}i=c[l+28>>2]|0;if((i|0)>=0?(Vl(c[l>>2]|0,a[(c[(c[O>>2]|0)+4>>2]|0)+(i<<4)+13>>0]|0)|0)!=0:0){b[D>>1]=1;b[E>>1]=0;c[F>>2]=0;b[G>>1]=1;c[c[H>>2]>>2]=l;b[t>>1]=s;if((c[u>>2]|0)==0?(c[M>>2]&2|0)==0:0)i=x;else i=w;b[t>>1]=(i&32768|0)==0?i&65535:0;b[v>>1]=43;if(p)i=m;else i=(d[r>>0]|0)+n&65535;b[y>>1]=i;c[z>>2]=16384;Y=j;Z=c[Y+4>>2]|h;i=ha;c[i>>2]=c[Y>>2]|g;c[i+4>>2]=Z;i=_l(f,ha)|0}else i=0}else i=0;while(0);l=l+48|0}while(l>>>0<N>>>0&(i|0)==0)}else i=0;while(0);Z=ha+36|0;if(!((i|0)==0&(k|0)!=0)){ia=i;Ra=ja;return ia|0}I=P+8+(Q*72|0)+40|0;J=ha+24|0;K=ha+26|0;M=ha+28|0;N=ha+42|0;O=ha+40|0;S=ha+17|0;T=ha+18|0;U=ha+22|0;V=ha+32|0;W=ha+20|0;X=f+20|0;Y=R+36|0;H=P+8+(Q*72|0)+56|0;A=R+46|0;B=_+92|0;C=_+100|0;D=fa+4|0;E=ca+4|0;F=ca+24|0;z=ca+20|0;G=_+44|0;y=1;b:while(1){w=k+36|0;i=c[w>>2]|0;if((i|0)!=0?(bm(c[I>>2]|0,aa,i)|0)==0:0)i=0;else{v=k+55|0;if(!((d[v>>0]|d[v+1>>0]<<8)&256)){x=b[c[k+8>>2]>>1]|0;b[J>>1]=0;b[K>>1]=0;b[M>>1]=0;b[N>>1]=0;b[O>>1]=0;a[S>>0]=0;b[T>>1]=0;r=ha;c[r>>2]=g;c[r+4>>2]=h;b[U>>1]=x;c[V>>2]=k;r=c[I>>2]|0;c:do if((((d[v>>0]|d[v+1>>0]<<8)&4)==0?(da=c[(c[f>>2]|0)+8>>2]|0,(da|0)!=0):0)?(ea=c[da>>2]|0,(ea|0)>0):0){s=k+40|0;t=k+50|0;u=k+4|0;q=0;i=ea;while(1){j=c[da+4+(q*20|0)>>2]|0;d:do if(!j)j=0;else while(1){l=c[j+4>>2]|0;if(!(l&4096))break d;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);if((a[j>>0]|0)==-94?(c[j+28>>2]|0)==(r|0):0){m=b[j+32>>1]|0;if(m<<16>>16<0){j=1;break c}j=b[t>>1]|0;if(j<<16>>16){n=c[u>>2]|0;l=j&65535;j=0;do{if(m<<16>>16==(b[n+(j<<1)>>1]|0)){j=1;break c}j=j+1|0}while(j>>>0<l>>>0)}}else ia=75;e:do if((ia|0)==75){ia=0;p=c[s>>2]|0;if((p|0)!=0?(ga=b[t>>1]|0,ga<<16>>16!=0):0){if(!j){n=c[u>>2]|0;o=ga&65535;m=0;while(1){f:do if((b[n+(m<<1)>>1]|0)==-2){j=c[p+4+(m*20|0)>>2]|0;if(!j){j=1;break c}while(1){l=c[j+4>>2]|0;if(!(l&4096))break f;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=1;break c}}}while(0);m=m+1|0;if(m>>>0>=o>>>0)break e}}n=0;i=ga;do{if((b[(c[u>>2]|0)+(n<<1)>>1]|0)==-2){i=c[p+4+(n*20|0)>>2]|0;l=j;while(1){m=c[l+4>>2]|0;if(!(m&4096))break;if(!(m&262144))l=l+12|0;else l=(c[l+20>>2]|0)+4|0;l=c[l>>2]|0;if(!l){l=0;break}}g:do if(!i)i=0;else while(1){m=c[i+4>>2]|0;if(!(m&4096))break g;if(!(m&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);if(!(bk(0,l,i,r)|0)){j=1;break c}i=b[t>>1]|0}n=n+1|0}while(n>>>0<(i&65535)>>>0);i=c[da>>2]|0}}while(0);q=q+1|0;if((q|0)>=(i|0)){j=0;break}}}else j=0;while(0);i=d[v>>0]|d[v+1>>0]<<8;do if((i&3)==3){c[Z>>2]=256;a[S>>0]=(j|0)==0?0:y&255;b[W>>1]=(x&65535)+16;cm(aa,ha,x);i=_l(f,ha)|0;b[U>>1]=x;if(i|0){ia=147;break b}}else{if(!(i&32)){i=H;m=k+64|0;R=c[m>>2]&c[i>>2];i=c[m+4>>2]&c[i+4>>2];m=R;n=i;i=(R|0)==0&(i|0)==0?576:512}else{m=0;n=0;i=576}c[Z>>2]=i;i=(j|0)!=0;if((!i?(c[Y>>2]&32|0)==0:0)?(c[w>>2]|0)==0:0){if(!((m|0)==0&(n|0)==0))break;if((d[v>>0]|d[v+1>>0]<<8)&4)break;if((b[k+48>>1]|0)>=(b[A>>1]|0))break;if(!((b[G>>1]&4)==0&(c[7328]|0)!=0))break;if(b[(c[c[_>>2]>>2]|0)+76>>1]&32)break}a[S>>0]=i?y&255:0;i=x<<16>>16;l=i+1+(((b[k+48>>1]|0)*15|0)/(b[A>>1]|0)|0)&65535;b[W>>1]=l;if(!((m|0)==0&(n|0)==0)){i=i+16&65535;n=c[I>>2]|0;if((c[B>>2]|0)>0){m=0;do{l=c[C>>2]|0;j=c[l+(m*48|0)>>2]|0;c[ca>>2]=0;c[ca+4>>2]=0;c[ca+8>>2]=0;c[ca+12>>2]=0;c[ca+16>>2]=0;c[ca+20>>2]=0;c[D>>2]=n;c[fa>>2]=k;c[E>>2]=148;c[F>>2]=fa;if(j){_j(ca,j)|0;if(a[z>>0]|0)break}j=b[l+(m*48|0)+8>>1]|0;do if(j<<16>>16<1)i=(j&65535)+(i&65535)&65535;else{i=i+-1<<16>>16;if(!(b[l+(m*48|0)+12>>1]&130))break;i=(i&65535)+65517&65535}while(0);m=m+1|0}while((m|0)<(c[B>>2]|0));l=b[W>>1]|0}j=l<<16>>16;m=i<<16>>16;do if(l<<16>>16<i<<16>>16){if((j+49|0)>=(m|0))if((j+31|0)<(m|0)){i=m+1&65535;break}else{i=(d[18112+(m-j)>>0]|0)+m&65535;break}}else if((m+49|0)>=(j|0))if((m+31|0)<(j|0)){i=j+1&65535;break}else{i=(d[18112+(j-m)>>0]|0)+j&65535;break}else i=l;while(0);b[W>>1]=i}cm(aa,ha,x);i=_l(f,ha)|0;b[U>>1]=x;if(i|0){ia=147;break b}}while(0);c[X>>2]=0;i=dm(f,$,k,0)|0;if((c[X>>2]|0)==1)c[Y>>2]=c[Y>>2]|256}else i=0}if(c[ba>>2]|0){ia=147;break}k=c[k+20>>2]|0;if(!((i|0)==0&(k|0)!=0)){ia=147;break}else y=y+1|0}if((ia|0)==147){Ra=ja;return i|0}return 0}function Yl(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;ia=Ra;Ra=Ra+608|0;ba=ia+168|0;da=ia+576|0;ha=ia+112|0;ea=ia+56|0;fa=ia;k=c[f>>2]|0;_=c[f+4>>2]|0;o=c[_+20>>2]|0;n=c[_+12>>2]|0;$=o+(n*48|0)|0;aa=c[f+12>>2]|0;l=ha;m=l+56|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k=c[k+4>>2]|0;l=d[aa+16>>0]|0;Z=c[k+8+(l*72|0)+40>>2]|0;if((n|0)<=0){ha=0;Ra=ia;return ha|0}W=aa+8|0;X=da+8|0;Y=da+16|0;E=k+8+(l*72|0)+16|0;F=da+4|0;G=ba+4|0;H=ba+8|0;I=ba+12|0;J=ba+20|0;K=fa+8|0;L=ha+8|0;M=ea+8|0;N=ha+16|0;O=aa+40|0;P=aa+48|0;Q=aa+36|0;R=aa+18|0;S=aa+17|0;T=aa+24|0;U=aa+20|0;V=aa+22|0;k=0;a:while(1){b:do if((b[o+12>>1]&512)!=0?(ca=c[o+28>>2]|0,D=ca+408|0,C=W,!((c[C>>2]&c[D>>2]|0)==0?(c[C+4>>2]&c[D+4>>2]|0)==0:0)):0){l=ca+20|0;D=(c[l>>2]|0)+((c[ca+12>>2]|0)*48|0)|0;c[da>>2]=c[f>>2];c[da+4>>2]=c[f+4>>2];c[da+8>>2]=c[f+8>>2];c[da+12>>2]=c[f+12>>2];c[da+16>>2]=c[f+16>>2];c[da+20>>2]=c[f+20>>2];c[da+24>>2]=c[f+24>>2];c[X>>2]=0;c[Y>>2]=ea;l=c[l>>2]|0;c:do if(l>>>0<D>>>0){n=1;C=l;l=0;do{if(!(b[C+12>>1]&1024)){if((c[C+20>>2]|0)==(Z|0)){c[ba>>2]=c[_>>2];c[G>>2]=_;a[H>>0]=44;c[I>>2]=1;c[J>>2]=C;l=ba;ga=11}}else{l=c[C+28>>2]|0;ga=11}do if((ga|0)==11){ga=0;c[F>>2]=l;b[ea>>1]=0;if(!(c[(c[E>>2]|0)+56>>2]|0))l=Xl(da,g,h)|0;else l=Wl(da,g,h,i,j)|0;if(!l)l=Yl(da,g,h,i,j)|0;m=b[ea>>1]|0;if(!(m<<16>>16)){k=0;break c}if(n|0){ew(L|0,M|0,(m&65535)<<4|0)|0;n=0;k=m;break}b[fa>>1]=k;B=k&65535;ew(K|0,L|0,B<<4|0)|0;if(!(k<<16>>16))k=0;else{x=m&65535;w=0;k=0;do{y=fa+8+(w<<4)|0;z=fa+8+(w<<4)+8|0;A=fa+8+(w<<4)+10|0;v=0;do{u=y;m=ea+8+(v<<4)|0;t=c[m>>2]|c[u>>2];u=c[m+4>>2]|c[u+4>>2];m=b[z>>1]|0;n=b[ea+8+(v<<4)+8>>1]|0;p=m<<16>>16;q=n<<16>>16;do if(m<<16>>16<n<<16>>16){if((p+49|0)<(q|0)){m=n;break}if((p+31|0)<(q|0)){m=q+1&65535;break}else{m=(d[18112+(q-p)>>0]|0)+q&65535;break}}else{if((q+49|0)<(p|0))break;if((q+31|0)<(p|0)){m=p+1&65535;break}else{m=(d[18112+(p-q)>>0]|0)+p&65535;break}}while(0);n=b[A>>1]|0;p=b[ea+8+(v<<4)+10>>1]|0;q=n<<16>>16;r=p<<16>>16;do if(n<<16>>16<p<<16>>16){if((q+49|0)<(r|0))break;if((q+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-q)>>0]|0)+r&65535;break}}else{if((r+49|0)<(q|0)){p=n;break}if((r+31|0)<(q|0)){p=q+1&65535;break}else{p=(d[18112+(q-r)>>0]|0)+q&65535;break}}while(0);d:do if(k<<16>>16){n=k;r=L;while(1){q=b[r+8>>1]|0;if(q<<16>>16>=m<<16>>16?(s=r,(c[s>>2]&t|0)==(t|0)?(c[s+4>>2]&u|0)==(u|0):0):0){ga=52;break}if(q<<16>>16<=m<<16>>16?(s=r,q=c[s>>2]|0,s=c[s+4>>2]|0,(q&t|0)==(q|0)&(s&u|0)==(s|0)):0)break d;n=n+-1<<16>>16;if(!(n<<16>>16))break;else r=r+16|0}if((ga|0)==52){q=r;n=r+8|0;ga=53;break}if((k&65535)<3){ga=48;break}r=k&65535;s=L;n=b[N>>1]|0;q=1;do{s=n<<16>>16>(b[ha+8+(q<<4)+8>>1]|0)?ha+8+(q<<4)|0:s;q=q+1|0;n=b[s+8>>1]|0}while((q|0)!=(r|0));if(n<<16>>16>m<<16>>16){q=s;n=s+8|0;ga=53}}else ga=48;while(0);if((ga|0)==48){n=k&65535;b[ha+8+(n<<4)+10>>1]=p;q=ha+8+(n<<4)|0;n=ha+8+(n<<4)+8|0;k=k+1<<16>>16;ga=53}do if((ga|0)==53){ga=0;s=q;c[s>>2]=t;c[s+4>>2]=u;b[n>>1]=m;m=q+10|0;if((b[m>>1]|0)<=p<<16>>16)break;b[m>>1]=p}while(0);v=v+1|0}while((v|0)!=(x|0));w=w+1|0}while((w|0)!=(B|0))}n=0}while(0);C=C+48|0}while(C>>>0<D>>>0)}else l=0;while(0);b[O>>1]=1;c[c[P>>2]>>2]=o;c[Q>>2]=8192;b[R>>1]=0;a[S>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;if(l|0)break a;n=k&65535;m=0;while(1){if(m>>>0>=n>>>0)break b;b[U>>1]=(e[ha+8+(m<<4)+8>>1]|0)+1;b[V>>1]=b[ha+8+(m<<4)+10>>1]|0;C=ha+8+(m<<4)|0;D=c[C+4>>2]|0;l=aa;c[l>>2]=c[C>>2];c[l+4>>2]=D;l=_l(f,aa)|0;if(!l)m=m+1|0;else break a}}while(0);o=o+48|0;if(o>>>0>=$>>>0){l=0;break}}b[ha>>1]=k;ha=l;Ra=ia;return ha|0}function Zl(f,i,j,k,l,m,n,o,p){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=Ra;Ra=Ra+32|0;P=U+24|0;M=U+16|0;x=U+8|0;y=U;B=c[f+4>>2]|0;G=c[n+16>>2]|0;T=c[f+12>>2]|0;v=c[f>>2]|0;O=c[v>>2]|0;v=c[v+4>>2]|0;w=d[T+16>>0]|0;I=c[n>>2]|0;c[p>>2]=0;C=T;c[C>>2]=i;c[C+4>>2]=j;C=n+4|0;z=(I|0)>0;if(z){q=c[B+20>>2]|0;i=c[C>>2]|0;j=0;while(1){S=c[i+8>>2]|0;u=i+5|0;a[u>>0]=0;Q=q+(S*48|0)+32|0;N=c[Q>>2]|0;Q=c[Q+4>>2]|0;if((N&k|0)==(N|0)&(Q&l|0)==(Q|0)?(b[q+(S*48|0)+12>>1]&m)<<16>>16==0:0)a[u>>0]=1;j=j+1|0;if((j|0)==(I|0))break;else i=i+12|0}}gw(G|0,0,I<<3|0)|0;J=n+24|0;c[J>>2]=0;E=n+20|0;c[E>>2]=0;K=n+32|0;c[K>>2]=0;N=n+40|0;g[N>>3]=5.e+98;Q=n+48|0;S=Q;c[S>>2]=25;c[S+4>>2]=0;S=n+56|0;c[S>>2]=0;j=v+8+(w*72|0)+56|0;i=c[j+4>>2]|0;D=n+64|0;c[D>>2]=c[j>>2];c[D+4>>2]=i;D=v+8+(w*72|0)+16|0;i=c[(c[D>>2]|0)+64>>2]|0;j=c[O>>2]|0;if((c[i>>2]|0)!=(j|0))do i=c[i+24>>2]|0;while((c[i>>2]|0)!=(j|0));q=c[i+8>>2]|0;u=Xa[c[(c[q>>2]|0)+12>>2]&255](q,n)|0;a:do switch(u|0){case 0:case 19:break;case 7:{i=c[O>>2]|0;j=i+81|0;if((a[j>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;A=i+272|0;c[A>>2]=(c[A>>2]|0)+1;i=c[i+236>>2]|0;if(i|0)c[i+12>>2]=7}break}default:{i=c[q+8>>2]|0;if(i|0){c[x>>2]=i;cd(O,31408,x);break a}switch(u|0){case 516:{i=50738;break}case 100:{i=50760;break}case 101:{i=50782;break}default:{i=u&255;if(i>>>0<29?(520028155>>>i&1|0)!=0:0)i=c[22960+(i<<2)>>2]|0;else i=50724}}c[y>>2]=i;cd(O,31408,y)}}while(0);i=q+8|0;j=c[i>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0;switch(u|0){case 0:{do if(z){j=T+48|0;i=0;do{c[(c[j>>2]|0)+(i<<2)>>2]=0;i=i+1|0}while((i|0)!=(I|0));A=T+24|0;i=T+30|0;b[i>>1]=0;if(z){y=B+12|0;z=T+48|0;x=B+20|0;u=-1;v=c[C>>2]|0;w=0;while(1){q=c[G+(w<<3)>>2]|0;k=q+-1|0;if((q|0)>0){l=c[v+8>>2]|0;if((q|0)>(I|0)|(l|0)<0)break;if((l|0)>=(c[y>>2]|0))break;j=(c[z>>2]|0)+(k<<2)|0;if(c[j>>2]|0)break;if(!(a[v+5>>0]|0))break;m=c[x>>2]|0;V=m+(l*48|0)+32|0;W=T;B=c[W+4>>2]|c[V+4>>2];C=T;c[C>>2]=c[W>>2]|c[V>>2];c[C+4>>2]=B;c[j>>2]=m+(l*48|0);u=(k|0)>(u|0)?k:u;if((q|0)<17?a[G+(w<<3)+4>>0]|0:0)b[i>>1]=1<<k|e[i>>1];if(b[m+(l*48|0)+12>>1]&1){c[K>>2]=0;c[S>>2]=c[S>>2]&-2;c[p>>2]=1}}w=w+1|0;if((w|0)>=(I|0)){R=50;break}else v=v+12|0}if((R|0)==50){j=b[i>>1]|0;q=A;k=A;break}c[M>>2]=c[c[D>>2]>>2];cd(O,43661,M);W=1;Ra=U;return W|0}else{u=-1;j=0;q=A;k=A}}else{k=T+24|0;i=T+30|0;b[i>>1]=0;u=-1;j=0;q=k}while(0);b[i>>1]=j&~o;b[T+40>>1]=u+1;b:do if((u|0)>=0){j=c[T+48>>2]|0;i=0;while(1){if(!(c[j+(i<<2)>>2]|0))break;if((i|0)<(u|0))i=i+1|0;else break b}c[P>>2]=c[c[D>>2]>>2];cd(O,43661,P);W=1;Ra=U;return W|0}while(0);c[q>>2]=c[E>>2];u=n+28|0;l=T+28|0;a[l>>0]=c[u>>2];c[u>>2]=0;u=T+32|0;c[u>>2]=c[J>>2];if(!(c[K>>2]|0))i=0;else i=c[n+8>>2]&255;a[k+5>>0]=i;b[T+18>>1]=0;r=+g[N>>3];g[h>>3]=r;i=c[h>>2]|0;j=c[h+4>>2]|0;do if(!(r<=1.0)){if(!(r<=2.0e9)){i=bw(i|0,j|0,52)|0;L()|0;i=(i*10|0)+55316&65535;break}i=~~r>>>0;j=+t(r)>=1.0?(r>0.0?~~+H(+s(r/4294967296.0),4294967295.0)>>>0:~~+F((r-+(~~r>>>0))/4294967296.0)>>>0):0;if(!(j>>>0<0|(j|0)==0&i>>>0<8)){if(j>>>0>0|(j|0)==0&i>>>0>255){q=40;do{q=(q&65535)+40|0;W=i;i=bw(i|0,j|0,4)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>4095);q=q&65535}else q=40;if(j>>>0>0|(j|0)==0&i>>>0>15)do{q=(q&65535)+10&65535;W=i;i=bw(i|0,j|0,1)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>31)}else{if(j>>>0<0|(j|0)==0&i>>>0<2){i=0;break}q=40;do{q=(q&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);q=q&65535}i=(q&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)&65535}else i=0;while(0);b[T+20>>1]=i;j=Q;i=c[j>>2]|0;j=c[j+4>>2]|0;if(j>>>0<0|(j|0)==0&i>>>0<8)if(j>>>0<0|(j|0)==0&i>>>0<2)i=0;else{q=40;do{q=(q&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);q=q&65535;R=88}else{if(j>>>0>0|(j|0)==0&i>>>0>255){q=40;do{q=(q&65535)+40|0;W=i;i=bw(i|0,j|0,4)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>4095);q=q&65535}else q=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{q=(q&65535)+10&65535;W=i;i=bw(i|0,j|0,1)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>31);R=88}else R=88}if((R|0)==88)i=(q&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)&65535;b[T+22>>1]=i;j=T+36|0;W=c[j>>2]|0;c[j>>2]=(c[S>>2]&1|0)==0?W&-4097:W|4096;j=_l(f,T)|0;if(!(a[l>>0]|0)){W=j;Ra=U;return W|0}i=c[u>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{W=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-W;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);a[l>>0]=0;W=j;Ra=U;return W|0}case 19:{W=0;Ra=U;return W|0}default:{W=u;Ra=U;return W|0}}return 0}function _l(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;k=c[f>>2]|0;B=c[c[k>>2]>>2]|0;h=f+24|0;i=c[h>>2]|0;if(!i){f=c[f+16>>2]|0;if(!f){g=101;return g|0}b[f>>1]=0;g=101;return g|0}c[h>>2]=i+-1;p=c[f+16>>2]|0;if(p|0){if(!(b[g+40>>1]|0)){g=0;return g|0}m=g;l=c[m>>2]|0;m=c[m+4>>2]|0;n=b[g+20>>1]|0;o=b[g+22>>1]|0;j=b[p>>1]|0;i=p+8|0;do if(j<<16>>16){f=j;k=i;while(1){h=b[k+8>>1]|0;if(h<<16>>16>=n<<16>>16?(g=k,(c[g>>2]&l|0)==(l|0)?(c[g+4>>2]&m|0)==(m|0):0):0){v=18;break}if(h<<16>>16<=n<<16>>16?(g=k,B=c[g>>2]|0,g=c[g+4>>2]|0,(B&l|0)==(B|0)&(g&m|0)==(g|0)):0){f=0;v=157;break}f=f+-1<<16>>16;if(!(f<<16>>16)){v=13;break}else k=k+16|0}if((v|0)==13){if((j&65535)<3){v=14;break}j=j&65535;f=b[p+16>>1]|0;h=1;do{i=f<<16>>16>(b[p+8+(h<<4)+8>>1]|0)?p+8+(h<<4)|0:i;h=h+1|0;f=b[i+8>>1]|0}while((h|0)!=(j|0));if(f<<16>>16>n<<16>>16){h=i;f=i+8|0;break}else f=0;return f|0}else if((v|0)==18){h=k;f=k+8|0;break}else if((v|0)==157)return f|0}else v=14;while(0);if((v|0)==14){f=j&65535;b[p>>1]=j+1<<16>>16;b[p+8+(f<<4)+10>>1]=o;h=p+8+(f<<4)|0;f=p+8+(f<<4)+8|0}g=h;c[g>>2]=l;c[g+4>>2]=m;b[f>>1]=n;f=h+10|0;if((b[f>>1]|0)<=o<<16>>16){g=0;return g|0}b[f>>1]=o;g=0;return g|0}f=k+60|0;p=c[f>>2]|0;A=g+36|0;n=c[A>>2]|0;k=(p|0)==0;if(!(k|(n&512|0)==0)){l=g+20|0;m=g+22|0;i=a[g+16>>0]|0;h=p;do{do if((a[h+16>>0]|0)==i<<24>>24?c[h+36>>2]&512|0:0){if(am(h,g)|0){b[l>>1]=b[h+20>>1]|0;b[m>>1]=(e[h+22>>1]|0)+65535;break}if(am(g,h)|0){b[l>>1]=b[h+20>>1]|0;b[m>>1]=(e[h+22>>1]|0)+1}}while(0);h=c[h+52>>2]|0}while((h|0)!=0)}a:do if(k)v=57;else{q=a[g+16>>0]|0;r=g+17|0;o=g+42|0;s=g+18|0;t=g+20|0;u=g+22|0;if((n&513|0)!=513){m=p;while(1){if((a[m+16>>0]|0)==q<<24>>24?(a[m+17>>0]|0)==(a[r>>0]|0):0){v=m;p=c[v>>2]|0;v=c[v+4>>2]|0;i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;k=h&p;l=i&v;if((((k|0)==(p|0)&(l|0)==(v|0)?(b[m+18>>1]|0)<=(b[s>>1]|0):0)?(b[m+20>>1]|0)<=(b[t>>1]|0):0)?(b[m+22>>1]|0)<=(b[u>>1]|0):0){f=0;break}if(((k|0)==(h|0)&(l|0)==(i|0)?(b[m+20>>1]|0)>=(b[t>>1]|0):0)?(b[m+22>>1]|0)>=(b[u>>1]|0):0){v=57;break a}}f=m+52|0;m=c[f>>2]|0;if(!m){i=f;v=58;break a}}return f|0}m=p;while(1){if((a[m+16>>0]|0)==q<<24>>24?(a[m+17>>0]|0)==(a[r>>0]|0):0){if((c[m+36>>2]&16384|0?(b[o>>1]|0)==0:0)?(p=m,v=g,n=c[v>>2]|0,v=c[v+4>>2]|0,(n&c[p>>2]|0)==(n|0)?(v&c[p+4>>2]|0)==(v|0):0):0){v=57;break a}v=m;p=c[v>>2]|0;v=c[v+4>>2]|0;i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;k=h&p;l=i&v;if((((k|0)==(p|0)&(l|0)==(v|0)?(b[m+18>>1]|0)<=(b[s>>1]|0):0)?(b[m+20>>1]|0)<=(b[t>>1]|0):0)?(b[m+22>>1]|0)<=(b[u>>1]|0):0){f=0;break}if(((k|0)==(h|0)&(l|0)==(i|0)?(b[m+20>>1]|0)>=(b[t>>1]|0):0)?(b[m+22>>1]|0)>=(b[u>>1]|0):0){v=57;break a}}f=m+52|0;m=c[f>>2]|0;if(!m){i=f;v=58;break a}}return f|0}while(0);b:do if((v|0)==57){u=c[f>>2]|0;if(u){f=u+52|0;h=c[f>>2]|0;if(h){o=g+16|0;p=g+17|0;q=g+42|0;r=g+18|0;s=g+20|0;t=g+22|0;do{n=a[o>>0]|0;while(1){if((a[h+16>>0]|0)==n<<24>>24?(a[h+17>>0]|0)==(a[p>>0]|0):0){if(((c[h+36>>2]&16384|0?(b[q>>1]|0)==0:0)?(c[A>>2]&513|0)==513:0)?(l=h,m=g,k=c[m>>2]|0,m=c[m+4>>2]|0,(k&c[l>>2]|0)==(k|0)?(m&c[l+4>>2]|0)==(m|0):0):0)break;C=h;D=c[C>>2]|0;C=c[C+4>>2]|0;k=g;i=c[k>>2]|0;k=c[k+4>>2]|0;l=i&D;m=k&C;if((((l|0)==(D|0)&(m|0)==(C|0)?(b[h+18>>1]|0)<=(b[r>>1]|0):0)?(b[h+20>>1]|0)<=(b[s>>1]|0):0)?(b[h+22>>1]|0)<=(b[t>>1]|0):0)break b;if(((l|0)==(i|0)&(m|0)==(k|0)?(b[h+20>>1]|0)>=(b[s>>1]|0):0)?(b[h+22>>1]|0)>=(b[t>>1]|0):0)break}f=h+52|0;h=c[f>>2]|0;if(!h)break b}c[f>>2]=c[h+52>>2];$l(B,h);h=c[f>>2]|0}while((h|0)!=0)}}else{i=f;v=58}}while(0);do if((v|0)==58){c:do if(c[B+272>>2]|0)if(!(a[B+81>>0]|0))v=69;else{c[i>>2]=0;D=7;return D|0}else{do if((e[B+276>>1]|0)>=72){h=B+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];D=B+284|0;c[D>>2]=(c[D>>2]|0)+1;break c}h=B+296|0;f=c[h>>2]|0;if(!f){f=B+292|0;break}else{c[h>>2]=c[f>>2];D=B+284|0;c[D>>2]=(c[D>>2]|0)+1;break c}}else f=B+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;v=69}while(0);if((v|0)==69)f=_d(B,72,0)|0;c[i>>2]=f;if(!f){D=7;return D|0}else{c[f+48>>2]=f+56;b[f+40>>1]=0;b[f+44>>1]=3;c[f+36>>2]=0;c[f+52>>2]=0;u=f;break}}while(0);l=u+36|0;f=c[l>>2]|0;do if(f&17408|0){if(f&1024|0?(x=u+28|0,a[x>>0]|0):0){f=u+32|0;h=c[f>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{D=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);a[x>>0]=0;c[f>>2]=0;break}if(f&16384|0?(y=u+32|0,w=c[y>>2]|0,w|0):0){f=c[w+16>>2]|0;d:do if(f){do if(B|0){h=B+480|0;if(!(c[h>>2]|0)){i=f;if((c[B+304>>2]|0)>>>0>i>>>0)break;if((c[B+308>>2]|0)>>>0<=i>>>0)break;D=B+300|0;c[f>>2]=c[D>>2];c[D>>2]=f}else Xd(B,f);f=c[y>>2]|0;v=113;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);v=111;break}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);v=111;break}}else v=111;while(0);if((v|0)==111){f=c[y>>2]|0;if(!B){z=f;v=118}else{h=B+480|0;v=113}}do if((v|0)==113){if(c[h>>2]|0){Xd(B,f);break}D=f;if((c[B+304>>2]|0)>>>0<=D>>>0?(c[B+308>>2]|0)>>>0>D>>>0:0){D=B+300|0;c[f>>2]=c[D>>2];c[D>>2]=f}else{z=f;v=118}}while(0);do if((v|0)==118?z|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{D=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}while(0);c[y>>2]=0}}while(0);f=b[g+40>>1]|0;k=u+44|0;do if((e[k>>1]|0)<(f&65535)){i=(f&65535)+7&131064;h=i<<2;e:do if(c[B+272>>2]|0){if(!(a[B+81>>0]|0))v=135}else{do if(!(0<0|(0==0?(e[B+276>>1]|0)>>>0<h>>>0:0))){f=B+300|0;j=c[f>>2]|0;if(j|0){c[f>>2]=c[j>>2];v=B+284|0;c[v>>2]=(c[v>>2]|0)+1;v=136;break e}f=B+296|0;j=c[f>>2]|0;if(!j){f=B+292|0;break}else{c[f>>2]=c[j>>2];v=B+284|0;c[v>>2]=(c[v>>2]|0)+1;v=136;break e}}else f=B+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;v=135}while(0);if((v|0)==135){j=_d(B,h,0)|0;v=136}if((v|0)==136?j|0:0){f=u+48|0;ew(j|0,c[f>>2]|0,e[k>>1]<<2|0)|0;h=c[f>>2]|0;do if((h|0)!=(u+56|0)){if(c[B+480>>2]|0){Xd(B,h);break}D=h;if((c[B+304>>2]|0)>>>0<=D>>>0?(c[B+308>>2]|0)>>>0>D>>>0:0){D=B+300|0;c[h>>2]=c[D>>2];c[D>>2]=h;break}if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{D=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[f>>2]=j;b[k>>1]=i;v=149;break}i=u+24|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;i=7}else{j=c[u+48>>2]|0;v=149}while(0);do if((v|0)==149){f=u;h=g;i=f+44|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));ew(j|0,c[g+48>>2]|0,e[u+40>>1]<<2|0)|0;f=c[A>>2]|0;if(f&1024|0){a[g+28>>0]=0;i=0;break}if(!(f&16384))i=0;else{c[g+32>>2]=0;i=0}}while(0);if(c[l>>2]&1024|0){D=i;return D|0}f=u+32|0;h=c[f>>2]|0;if(!h){D=i;return D|0}D=h+55|0;if(((d[D>>0]|d[D+1>>0]<<8)&3)!=3){D=i;return D|0}c[f>>2]=0;D=i;return D|0}function $l(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=e+48|0;f=c[l>>2]|0;m=e+56|0;do if((f|0)!=(m|0)){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}k=f;if((c[d+304>>2]|0)>>>0<=k>>>0?(c[d+308>>2]|0)>>>0>k>>>0:0){k=d+300|0;c[f>>2]=c[k>>2];c[k>>2]=f;break}}if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);k=e+36|0;f=c[k>>2]|0;do if(f&17408|0){if(f&1024|0?(h=e+28|0,a[h>>0]|0):0){f=e+32|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);a[h>>0]=0;c[f>>2]=0;break}if(f&16384|0?(i=e+32|0,g=c[i>>2]|0,g|0):0){f=c[g+16>>2]|0;a:do if(f){do if(d|0){g=d+480|0;if(!(c[g>>2]|0)){h=f;if((c[d+304>>2]|0)>>>0>h>>>0)break;if((c[d+308>>2]|0)>>>0<=h>>>0)break;h=d+300|0;c[f>>2]=c[h>>2];c[h>>2]=f}else Xd(d,f);f=c[i>>2]|0;h=35;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);h=33;break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);h=33;break}}else h=33;while(0);if((h|0)==33){f=c[i>>2]|0;if(!d){j=f;h=40}else{g=d+480|0;h=35}}do if((h|0)==35){if(c[g>>2]|0){Xd(d,f);break}g=f;if((c[d+304>>2]|0)>>>0<=g>>>0?(c[d+308>>2]|0)>>>0>g>>>0:0){g=d+300|0;c[f>>2]=c[g>>2];c[g>>2]=f}else{j=f;h=40}}while(0);do if((h|0)==40?j|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{h=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}}while(0);c[l>>2]=m;b[e+40>>1]=0;b[e+44>>1]=3;c[k>>2]=0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);return}m=e;if((c[d+304>>2]|0)>>>0<=m>>>0?(c[d+308>>2]|0)>>>0>m>>>0:0){m=d+300|0;c[e>>2]=c[m>>2];c[m>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{m=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function am(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=b[a+40>>1]|0;g=h&65535;j=b[a+42>>1]|0;i=b[d+40>>1]|0;l=i&65535;k=b[d+42>>1]|0;if((k&65535)>(j&65535)?1:(g-(j&65535)|0)>=(l-(k&65535)|0)){d=0;return d|0}e=b[a+20>>1]|0;f=b[d+20>>1]|0;if(e<<16>>16>=f<<16>>16){if(e<<16>>16>f<<16>>16){d=0;return d|0}if((b[a+22>>1]|0)>(b[d+22>>1]|0)){d=0;return d|0}}e=g+-1|0;a:do if(h<<16>>16){k=c[a+48>>2]|0;j=d+48|0;if(!(i<<16>>16)){while(1){if(c[k+(e<<2)>>2]|0){e=0;break}if((e|0)>0)e=e+-1|0;else break a}return e|0}b:while(1){h=c[k+(e<<2)>>2]|0;c:do if(h|0){i=c[j>>2]|0;f=l;while(1){g=f;f=f+-1|0;if((c[i+(f<<2)>>2]|0)==(h|0))break c;if((g|0)<=1){e=0;break b}}}while(0);if((e|0)>0)e=e+-1|0;else break a}return e|0}while(0);if(c[a+36>>2]&64|0?(c[d+36>>2]&64|0)==0:0){d=0;return d|0}d=1;return d|0}function bm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[c[e>>2]>>2]|0;a:do if((a[f>>0]|0)==44){while(1){if(!(bm(d,e,c[f+12>>2]|0)|0)){f=0;break}f=c[f+16>>2]|0;if((a[f>>0]|0)!=44)break a}return f|0}while(0);k=(0==0?(c[(c[g>>2]|0)+32>>2]&8388608|0)==0:0)?g:0;j=e+12|0;g=c[j>>2]|0;if((g|0)<=0){d=0;return d|0}h=c[e+20>>2]|0;i=0;while(1){e=c[h>>2]|0;if(!((c[e+4>>2]&1|0)!=0?(b[e+36>>1]|0)!=(d|0):0)){if(em(k,e,f,d)|0){f=1;g=12;break}g=c[j>>2]|0}i=i+1|0;if((i|0)>=(g|0)){f=0;g=12;break}else h=h+48|0}if((g|0)==12)return f|0;return 0}function cm(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;s=t;r=d;p=d+8|0;g=p;q=~(c[g>>2]|c[r>>2]);r=~(c[g+4>>2]|c[r+4>>2]);g=c[a+12>>2]|0;m=a+20|0;a:do if((g|0)>0){n=d+40|0;o=d+48|0;d=d+22|0;a=0;l=c[m>>2]|0;while(1){if(b[l+10>>1]&2)break a;k=l+40|0;i=c[k>>2]|0;k=c[k+4>>2]|0;j=p;b:do if((i&q|0)==0&(k&r|0)==0&(c[j>>2]&i|0?1:(c[j+4>>2]&k|0)!=0)){h=b[n>>1]|0;if(h<<16>>16){k=c[o>>2]|0;h=h&65535;do{i=h;h=h+-1|0;j=c[k+(h<<2)>>2]|0;if(j|0){if((j|0)==(l|0))break b;j=c[j+16>>2]|0;if((j|0)>-1?((c[m>>2]|0)+(j*48|0)|0)==(l|0):0)break b}}while((i|0)>1)}h=b[l+8>>1]|0;if(h<<16>>16<1){b[d>>1]=(e[d>>1]|0)+(h&65535);break}b[d>>1]=(b[d>>1]|0)+-1<<16>>16;if(b[l+12>>1]&130){k=(uk(c[(c[l>>2]|0)+16>>2]|0,s)|0)!=0;k=k&((c[s>>2]|0)+1|0)>>>0<3?10:20;c[s>>2]=k;a=(k|0)>(a<<16>>16|0)?k&65535:a}}while(0);if((g|0)>1){g=g+-1|0;l=l+48|0}else break}}else{a=0;d=d+22|0}while(0);a=(f<<16>>16)-(a<<16>>16)|0;if((a|0)>=(b[d>>1]|0)){Ra=t;return}b[d>>1]=a;Ra=t;return}function dm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;Fa=Ra;Ra=Ra+96|0;ga=Fa;ja=c[c[f>>2]>>2]|0;ua=c[ja>>2]|0;va=c[f+12>>2]|0;sa=ua+81|0;if(a[sa>>0]|0){Ea=7;Ra=Fa;return Ea|0}wa=va+36|0;xa=c[wa>>2]|0;da=(xa&32|0)==0?447:24;ra=h+55|0;da=((d[ra>>0]|d[ra+1>>0]<<8)&4)==0?da:da&387;ya=va+24|0;za=b[ya>>1]|0;ka=va+26|0;la=b[ka>>1]|0;ma=va+28|0;na=b[ma>>1]|0;Aa=va+42|0;oa=b[Aa>>1]|0;Ba=va+40|0;m=b[Ba>>1]|0;qa=va;pa=c[qa>>2]|0;qa=c[qa+4>>2]|0;Ca=va+22|0;Da=b[Ca>>1]|0;ha=f+4|0;k=c[ha>>2]|0;ia=g+40|0;ta=c[ia>>2]|0;Ea=za&65535;c[ga>>2]=k;c[ga+4>>2]=k;k=ga+12|0;c[k>>2]=0;l=ga+16|0;a[l>>0]=0;n=ga+8|0;c[n>>2]=0;c[ga+20>>2]=da;c[ga+24>>2]=0;c[ga+28>>2]=ta;a[ga+17>>0]=1;a[ga+18>>0]=1;do if(h){o=b[(c[h+4>>2]|0)+(Ea<<1)>>1]|0;j=o<<16>>16;if(o<<16>>16==-2){c[k>>2]=c[(c[h+40>>2]|0)+4+(Ea*20|0)>>2];c[n>>2]=c[(c[h+32>>2]|0)+(Ea<<2)>>2];b[ga+72>>1]=-2;n=Ul(ga)|0;break}k=c[h+12>>2]|0;if(o<<16>>16!=(b[k+40>>1]|0))if(o<<16>>16>-1){a[l>>0]=a[(c[k+4>>2]|0)+(j<<4)+13>>0]|0;c[n>>2]=c[(c[h+32>>2]|0)+(Ea<<2)>>2];ca=8}else ca=8;else{j=-1;ca=8}}else{j=Ea;ca=8}while(0);if((ca|0)==8){b[ga+72>>1]=j;n=Tl(ga)|0}b[va+18>>1]=0;ta=h+8|0;da=b[c[ta>>2]>>1]|0;if(da<<16>>16<11)M=0;else{j=da<<16>>16;k=((j|0)<0)<<31>>31;if((da&65535)>255){l=40;do{l=(l&65535)+40|0;ba=j;j=bw(j|0,k|0,4)|0;aa=k;k=L()|0}while(aa>>>0>0|(aa|0)==0&ba>>>0>4095);l=l&65535}else l=40;if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;ba=j;j=bw(j|0,k|0,1)|0;aa=k;k=L()|0}while(aa>>>0>0|(aa|0)==0&ba>>>0>31);k=l}else k=l;M=(k&65535)+65493+(e[3648+((j&7)<<1)>>1]|0)&65535}a:do if(!n)j=0;else{v=h+4|0;w=va+8|0;x=h+12|0;y=g+36|0;z=h+54|0;A=f+20|0;B=va+44|0;C=h+50|0;D=va+48|0;E=m&65535;V=E+8&131064;F=V<<2;G=ua+272|0;H=ua+276|0;I=h+48|0;J=g+16|0;K=M<<16>>16;N=ua+288|0;O=ua+300|0;P=va+56|0;Q=i<<16>>16==0;R=K+49|0;S=va+20|0;T=ua+296|0;U=ua+284|0;V=V&65535;W=ua+480|0;X=K+31|0;Y=i<<16>>16;Z=ua+292|0;_=ua+304|0;$=h+52|0;aa=K+1&65535;ba=ua+308|0;t=n;l=0;k=0;do{s=b[t+12>>1]|0;u=s&65535;if(s<<16>>16==256){j=b[(c[v>>2]|0)+(Ea<<1)>>1]|0;if(j<<16>>16>-1)j=d[(c[(c[x>>2]|0)+4>>2]|0)+(j<<16>>16<<4)+12>>0]|0;else j=j<<16>>16==-1&1;if(j)j=0;else ca=26}else ca=26;b:do if((ca|0)==26){ca=0;r=t+32|0;q=r;o=w;n=c[o>>2]|0;o=c[o+4>>2]|0;if(((n&c[q>>2]|0)==0?(o&c[q+4>>2]|0)==0:0)?(ea=t+10|0,!(s<<16>>16==16&(b[ea>>1]&256)!=0)):0){if(a[y>>0]&8?(c[(c[t>>2]|0)+4>>2]&1|0)==0:0){j=0;break}if((a[z>>0]|0)!=0?((e[C>>1]|0)+-1|0)==(Ea|0):0)j=2;else j=1;c[A>>2]=c[A>>2]|j;c[wa>>2]=xa;b[ya>>1]=za;b[ka>>1]=la;b[ma>>1]=na;b[Ba>>1]=m;if((m&65535)<(e[B>>1]|0)){q=E;p=m;j=c[D>>2]|0}else{do if(c[G>>2]|0)if(!(a[sa>>0]|0))ca=43;else{j=0;break a}else{if(!(0<0|(0==0?(e[H>>1]|0)>>>0<F>>>0:0))){j=c[O>>2]|0;if(j|0){c[O>>2]=c[j>>2];c[U>>2]=(c[U>>2]|0)+1;break}j=c[T>>2]|0;if(!j)j=Z;else{c[T>>2]=c[j>>2];c[U>>2]=(c[U>>2]|0)+1;break}}else j=N;c[j>>2]=(c[j>>2]|0)+1;ca=43}while(0);if((ca|0)==43){ca=0;j=_d(ua,F,0)|0}if(!j){j=0;break a}ew(j|0,c[D>>2]|0,e[B>>1]<<2|0)|0;n=c[D>>2]|0;c:do if((n|0)!=(P|0)){if(c[W>>2]|0){Xd(ua,n);break}o=n;do if((c[_>>2]|0)>>>0<=o>>>0){if((c[ba>>2]|0)>>>0<=o>>>0)break;c[n>>2]=c[O>>2];c[O>>2]=n;break c}while(0);if(!n)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{q=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[D>>2]=j;b[B>>1]=V;p=b[Ba>>1]|0;o=w;q=p&65535;n=c[o>>2]|0;o=c[o+4>>2]|0}p=p+1<<16>>16;b[Ba>>1]=p;c[j+(q<<2)>>2]=t;j=r;q=(c[j+4>>2]|qa)&~o;r=va;c[r>>2]=(c[j>>2]|pa)&~n;c[r+4>>2]=q;d:do if(!(u&1)){if(u&130|0){j=b[(c[v>>2]|0)+(Ea<<1)>>1]|0;n=c[wa>>2]|0;o=n|1;c[wa>>2]=o;do if(j<<16>>16!=-1){if(!(Q&j<<16>>16>-1)){s=0;p=o;break d}j=b[C>>1]|0;if(((j&65535)+-1|0)!=(Ea|0)){s=0;p=o;break d}if((d[ra>>0]|d[ra+1>>0]<<8)&8)break;if(j<<16>>16==1?s<<16>>16==2&(a[z>>0]|0)!=0:0)break;p=n|65537;c[wa>>2]=p;s=0;break d}while(0);p=n|4097;c[wa>>2]=p;s=0;break}if(u&256|0){p=c[wa>>2]|8;c[wa>>2]=p;s=0;break}j=c[wa>>2]|0;if(!(u&36)){c[wa>>2]=j|18;j=(gm(ja,c[ia>>2]|0,h,Ea,t)|0)&65535;b[ma>>1]=j;j=c[wa>>2]|0;if(!(j&32)){l=t;k=0;s=0;p=j;break}l=t;k=c[(c[D>>2]|0)+((e[Ba>>1]|0)+-2<<2)>>2]|0;s=0;p=j;break}c[wa>>2]=j|34;s=(gm(ja,c[ia>>2]|0,h,Ea,t)|0)&65535;b[ka>>1]=s;if(!(b[ea>>1]&256)){l=0;k=t;s=0;p=c[wa>>2]|0;break}l=t+48|0;j=b[Ba>>1]|0;if((j&65535)<(e[B>>1]|0))k=c[D>>2]|0;else{o=(j&65535)+8&131064;n=o<<2;e:do if(c[G>>2]|0)if(!(a[sa>>0]|0))ca=117;else{j=0;break a}else{do if(0<0|(0==0?(e[H>>1]|0)>>>0<n>>>0:0))j=N;else{k=c[O>>2]|0;if(k|0){c[O>>2]=c[k>>2];c[U>>2]=(c[U>>2]|0)+1;break e}k=c[T>>2]|0;if(!k){j=Z;break}c[T>>2]=c[k>>2];c[U>>2]=(c[U>>2]|0)+1;break e}while(0);c[j>>2]=(c[j>>2]|0)+1;ca=117}while(0);if((ca|0)==117){ca=0;k=_d(ua,n,0)|0}if(!k){j=0;break a}ew(k|0,c[D>>2]|0,e[B>>1]<<2|0)|0;j=c[D>>2]|0;f:do if((j|0)!=(P|0)){if(c[W>>2]|0){Xd(ua,j);break}n=j;do if((c[_>>2]|0)>>>0<=n>>>0){if((c[ba>>2]|0)>>>0<=n>>>0)break;c[j>>2]=c[O>>2];c[O>>2]=j;break f}while(0);if(!j)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[D>>2]=k;b[B>>1]=o;j=b[Ba>>1]|0}b[Ba>>1]=j+1<<16>>16;c[k+((j&65535)<<2)>>2]=l;p=c[wa>>2]|16;c[wa>>2]=p;b[ma>>1]=1;k=t;s=0}else{q=c[t>>2]|0;if(!(c[q+4>>2]&2048)){j=c[q+20>>2]|0;if((j|0)!=0?(fa=c[j>>2]|0,(fa|0)!=0):0){n=((fa|0)<0)<<31>>31;do if(fa>>>0<8){if(fa>>>0<2){j=0;break}o=40;j=fa;do{o=(o&65535)+65526|0;j=cw(j|0,n|0,1)|0;n=L()|0}while(n>>>0<0|(n|0)==0&j>>>0<8);o=o&65535;ca=78}else{if(fa>>>0>255){o=40;j=fa;do{o=(o&65535)+40|0;ca=j;j=bw(j|0,n|0,4)|0;s=n;n=L()|0}while(s>>>0>0|(s|0)==0&ca>>>0>4095);o=o&65535}else{o=40;j=fa}if(!(n>>>0>0|(n|0)==0&j>>>0>15)){ca=78;break}do{o=(o&65535)+10&65535;ca=j;j=bw(j|0,n|0,1)|0;s=n;n=L()|0}while(s>>>0>0|(s|0)==0&ca>>>0>31);ca=78}while(0);if((ca|0)==78){ca=0;j=(o&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)|0}r=j<<16>>16}else r=0}else{r=(p&65535)+-1|0;if((p&65535)>1){p=c[D>>2]|0;o=0;j=46;do{n=c[p+(o<<2)>>2]|0;if(n)j=(c[n>>2]|0)==(q|0)?0:j;o=o+1|0}while((o|0)!=(r|0));r=j}else r=46}if((d[ra>>0]|d[ra+1>>0]<<8)&128){q=b[(c[ta>>2]|0)+(Ea<<1)>>1]|0;n=r&65535;if(n<<16>>16<11)j=0;else{j=n<<16>>16;p=((j|0)<0)<<31>>31;if((n&65535)>255){o=40;n=p;do{o=(o&65535)+40|0;s=j;j=bw(j|0,n|0,4)|0;p=n;n=L()|0}while(p>>>0>0|(p|0)==0&s>>>0>4095);o=o&65535}else{o=40;n=p}if(n>>>0>0|(n|0)==0&j>>>0>15){do{o=(o&65535)+10&65535;s=j;j=bw(j|0,n|0,1)|0;p=n;n=L()|0}while(p>>>0>0|(p|0)==0&s>>>0>31);n=o}else n=o;j=(n&65535)+65493+(e[3648+((j&7)<<1)>>1]|0)|0}if(((q<<16>>16)+10+(j<<16>>16)|0)<(r+K|0)){j=0;break b}}p=c[wa>>2]|4;c[wa>>2]=p;s=r}while(0);do if(!(p&2)){n=(b[ya>>1]|0)+1<<16>>16;b[ya>>1]=n;n=n&65535;t=b[t+8>>1]|0;j=t&65535;if(t<<16>>16<1?(b[(c[v>>2]|0)+(Ea<<1)>>1]|0)>-1:0){j=j-s+(e[Ca>>1]|0)&65535;ca=152;break}j=c[ta>>2]|0;j=(e[j+(n<<1)>>1]|0)-(e[j+(n+-1<<1)>>1]|0)+(e[Ca>>1]|0)|0;n=j&65535;b[Ca>>1]=n;if(u&256){j=j+10&65535;ca=152}}else{j=b[Ca>>1]|0;o=j<<16>>16;do if(k){n=b[k+8>>1]|0;if(n<<16>>16<1){j=(n&65535)+(j&65535)&65535;break}else{j=(j&65535)+65516&65535;break}}while(0);do if(l){n=b[l+8>>1]|0;if(n<<16>>16<1){j=(n&65535)+(j&65535)&65535;break}else{j=(j&65535)+65516&65535;break}}while(0);n=(k|0)!=0;do if(n){if(!((l|0)!=0&(b[k+8>>1]|0)>0))break;if((b[l+8>>1]|0)<=0)break;j=(j&65535)+65516&65535}while(0);ca=(((l|0)!=0)<<31>>31)+(n<<31>>31)+o|0;j=(j<<16>>16>10?j:10)&65535;j=((ca|0)>(j|0)?j:ca)&65535;ca=152}while(0);if((ca|0)==152){ca=0;b[Ca>>1]=j;n=j}r=n&65535;o=r+1+(((b[I>>1]|0)*15|0)/(b[(c[J>>2]|0)+46>>1]|0)|0)|0;j=o&65535;o=o<<16>>16;do if(M<<16>>16<j<<16>>16){if((R|0)>=(o|0))if((X|0)<(o|0)){j=o+1&65535;break}else{j=o+(d[18112+(o-K)>>0]|0)&65535;break}}else if((o+49|0)>=(K|0))if((o+31|0)<(K|0))j=aa;else j=(d[18112+(K-o)>>0]|0)+K&65535;else j=M;while(0);b[S>>1]=j;if(!(p&320)){q=r+16|0;o=q&65535;p=j<<16>>16;q=q<<16>>16;do if(j<<16>>16<o<<16>>16){if((p+49|0)<(q|0)){j=o;break}if((p+31|0)<(q|0)){j=q+1&65535;break}else{j=q+(d[18112+(q-p)>>0]|0)&65535;break}}else{if((q+49|0)<(p|0))break;if((q+31|0)<(p|0)){j=p+1&65535;break}else{j=(d[18112+(p-q)>>0]|0)+p&65535;break}}while(0);b[S>>1]=j}o=s+Y|0;b[S>>1]=o+(j&65535);b[Ca>>1]=o+r;cm(c[ha>>2]|0,va,da);j=_l(f,va)|0;u=c[wa>>2]|0;b[Ca>>1]=(u&2|0)==0?n:Da;if((u&16|0)==0?(e[ya>>1]|0)<(e[$>>1]|0):0)dm(f,g,h,o&65535)|0;b[Ca>>1]=Da}else j=0}while(0);t=Tl(ga)|0}while((j|0)==0&(t|0)!=0)}while(0);ja=va;c[ja>>2]=pa;c[ja+4>>2]=qa;b[ya>>1]=za;b[ka>>1]=la;b[ma>>1]=na;b[Aa>>1]=oa;c[wa>>2]=xa;b[Ca>>1]=Da;b[Ba>>1]=m;if(za<<16>>16!=oa<<16>>16){Ea=j;Ra=Fa;return Ea|0}p=Ea+1|0;if(p>>>0>=(e[h+50>>1]|0)>>>0){Ea=j;Ra=Fa;return Ea|0}if((d[ra>>0]|d[ra+1>>0]<<8)&64){Ea=j;Ra=Fa;return Ea|0}if(b[ua+76>>1]&16384){Ea=j;Ra=Fa;return Ea|0}if((b[(c[ta>>2]|0)+(p<<1)>>1]|0)<=41){Ea=j;Ra=Fa;return Ea|0}n=va+44|0;if((m&65535)<(e[n>>1]|0)){n=za;o=za;j=c[va+48>>2]|0;k=xa;l=Da}else{m=(m&65535)+8&131064;l=m<<2;g:do if(c[ua+272>>2]|0)if(!(a[sa>>0]|0))ca=194;else{Ea=7;Ra=Fa;return Ea|0}else{do if(!(0<0|(0==0?(e[ua+276>>1]|0)>>>0<l>>>0:0))){k=ua+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];sa=ua+284|0;c[sa>>2]=(c[sa>>2]|0)+1;break g}k=ua+296|0;j=c[k>>2]|0;if(!j){j=ua+292|0;break}else{c[k>>2]=c[j>>2];sa=ua+284|0;c[sa>>2]=(c[sa>>2]|0)+1;break g}}else j=ua+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;ca=194}while(0);if((ca|0)==194)j=_d(ua,l,0)|0;if(!j){Ea=7;Ra=Fa;return Ea|0}k=va+48|0;ew(j|0,c[k>>2]|0,e[n>>1]<<2|0)|0;l=c[k>>2]|0;do if((l|0)!=(va+56|0)){if(c[ua+480>>2]|0){Xd(ua,l);break}va=l;if((c[ua+304>>2]|0)>>>0<=va>>>0?(c[ua+308>>2]|0)>>>0>va>>>0:0){va=ua+300|0;c[l>>2]=c[va>>2];c[va>>2]=l;break}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{va=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-va;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[k>>2]=j;b[n>>1]=m;n=b[ya>>1]|0;o=b[Aa>>1]|0;m=b[Ba>>1]|0;k=c[wa>>2]|0;l=b[Ca>>1]|0}b[ya>>1]=n+1<<16>>16;b[Aa>>1]=o+1<<16>>16;b[Ba>>1]=m+1<<16>>16;c[j+((m&65535)<<2)>>2]=0;c[wa>>2]=k|32768;Ba=c[ta>>2]|0;Ea=(e[Ba+(Ea<<1)>>1]|0)-(e[Ba+(p<<1)>>1]|0)|0;b[Ca>>1]=(l&65535)-Ea;dm(f,g,h,(((Ea<<16)+327680|0)>>>16)+(i&65535)&65535)|0;b[Ca>>1]=Da;b[ya>>1]=za;b[Aa>>1]=za;c[wa>>2]=xa;Ea=0;Ra=Fa;return Ea|0}function em(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if(!(bk(b,d,e,f)|0)){f=1;return f|0}g=a[e>>0]|0;do if(g<<24>>24==43){if(em(b,d,c[e+12>>2]|0,f)|0){f=1;return f|0}if(!(em(b,d,c[e+16>>2]|0,f)|0)){g=a[e>>0]|0;break}else{f=1;return f|0}}while(0);a:do if(g<<24>>24==51){switch(a[d>>0]|0){case 45:case 50:break a;default:{}}g=c[d+12>>2]|0;b:do if(!g)g=0;else while(1){d=c[g+4>>2]|0;if(!(d&4096))break b;if(!(d&262144))g=g+12|0;else g=(c[g+20>>2]|0)+4|0;g=c[g>>2]|0;if(!g){g=0;break}}while(0);if(!(bk(b,g,c[e+12>>2]|0,f)|0)){f=1;return f|0}}while(0);f=0;return f|0}function fm(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;if((a[e>>0]|0)!=-94){d=0;return d|0}f=c[d+24>>2]|0;if((c[e+28>>2]|0)!=(c[f+4>>2]|0)){d=0;return d|0}f=c[f>>2]|0;h=b[e+32>>1]|0;e=b[f+52>>1]|0;a:do if(e<<16>>16){g=c[f+4>>2]|0;e=e&65535;f=0;while(1){if((b[g+(f<<1)>>1]|0)==h<<16>>16)break;f=f+1|0;if(f>>>0>=e>>>0)break a}if((f&65535)<<16>>16>=0){d=0;return d|0}}while(0);a[d+20>>0]=1;d=2;return d|0}\nfunction gq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;$=Ra;Ra=Ra+16|0;H=$+4|0;Q=$;W=c[e+12>>2]|0;f=c[W+12>>2]|0;X=c[e>>2]|0;E=c[e+4>>2]|0;F=b+235|0;G=(a[F>>0]|0)==0?157:158;if(!E){_=0;Ra=$;return _|0}_=e+8|0;I=E+-1|0;J=e+44|0;K=e+40|0;M=(f&16|0)!=0;N=(E|0)>1;O=W+4|0;P=(f&32|0)==0;R=(f&34|0)!=0;S=(f&8|0)==0;T=(f&4|0)==0;U=(f&2|0)==0;V=W+8|0;C=(f&1|0)!=0;Y=e+20|0;Z=e+16|0;f=c[_>>2]|0;a:while(1){if((f|0)>0){j=0;do{f=c[X+(j<<2)>>2]|0;if(!(a[f+4>>0]|0)){f=fq(b,f)|0;if(f|0){D=186;break a}}else{i=f+40|0;if(!(a[f+5>>0]|0)){g=c[i>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{B=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);f=f+52|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}B=g;if((c[h+304>>2]|0)>>>0<=B>>>0?(c[h+308>>2]|0)>>>0>B>>>0:0){B=h+300|0;c[g>>2]=c[B>>2];c[B>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{B=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0}c[i>>2]=0}j=j+1|0;f=c[_>>2]|0}while((j|0)<(f|0))}f=f+(((f|0)==(E|0))<<31>>31)|0;if((f|0)>0)do{m=f;f=f+-1|0;b:do if((m|0)<(E|0)){k=f;j=c[X+(f<<2)>>2]|0;do{l=k;k=k+1|0;n=X+(k<<2)|0;i=c[n>>2]|0;h=(c[j+40>>2]|0)==0;o=i;g=c[i+40>>2]|0;if(!h)if(!g){g=0;D=32}else{A=c[j+60>>2]|0;g=c[i+60>>2]|0;B=A-g|0;g=Lu(c[j+64>>2]|0,c[i+64>>2]|0,(B|0)<0?A:g)|0;g=(g|0)==0?B:g}else D=32;if((D|0)==32){D=0;g=(h&1)-((g|0)==0&1)|0}if(!g)g=(c[i>>2]|0)-(c[j>>2]|0)|0;if((g|0)<0)break b;B=X+(l<<2)|0;j=c[B>>2]|0;c[n>>2]=j;c[B>>2]=o}while((k|0)<(I|0))}while(0)}while((m|0)>1);c[_>>2]=0;f=c[X>>2]|0;if(!(c[f+40>>2]|0)){f=0;D=186;break}i=c[f+60>>2]|0;c[J>>2]=i;h=c[f+64>>2]|0;c[K>>2]=h;f=c[W>>2]|0;if(!(M|(f|0)==0)){g=c[O>>2]|0;if((i|0)<(g|0)|S&(i|0)>(g|0)){f=0;D=186;break}if(Lu(h,f,g)|0){f=0;D=186;break}}c:do if(N){f=1;do{g=c[X+(f<<2)>>2]|0;if(!(c[g+40>>2]|0)){D=48;break c}if((c[g+60>>2]|0)!=(i|0)){D=48;break c}if(Lu(h,c[g+64>>2]|0,i)|0){D=48;break c}f=f+1|0}while((f|0)<(E|0))}else{f=1;D=48}while(0);if((D|0)==48){D=0;if(!(R|(f|0)!=1)){f=c[X>>2]|0;g=(c[f+56>>2]|0)==0;if(!(a[F>>0]|0)){D=52;break}if(g){D=51;break}else f=1}}q=0;do{r=c[X+(q<<2)>>2]|0;if((a[F>>0]|0)!=0?(c[r+56>>2]|0)!=0:0){a[H>>0]=0;A=r+88|0;B=A;c[B>>2]=0;c[B+4>>2]=0;B=r+84|0;c[B>>2]=0;kq(0,c[r+72>>2]|0,c[r+76>>2]|0,r+80|0,A,B,H)}else D=64;d:do if((D|0)==64){D=0;n=r+72|0;k=r+40|0;o=r+52|0;g=c[o>>2]|0;e:do if(g|0){l=(c[n>>2]|0)+10|0;p=r+48|0;m=r+44|0;i=c[p>>2]|0;j=g;while(1){g=c[k>>2]|0;if((l-g|0)<=(i|0))break e;h=(c[m>>2]|0)-i|0;h=(h|0)<4096?h:4096;if(jd(j,g+i|0,h,i,81)|0)break d;g=(c[p>>2]|0)+h|0;c[p>>2]=g;g=(c[k>>2]|0)+g|0;h=g+20|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));i=c[p>>2]|0;j=c[o>>2]|0;if((i|0)==(c[m>>2]|0))break;if(!j)break e}do if(j|0){g=c[j+20>>2]|0;gc(c[j+16>>2]|0)|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}B=j;if((c[g+304>>2]|0)>>>0<=B>>>0?(c[g+308>>2]|0)>>>0>B>>>0:0){B=g+300|0;c[j>>2]=c[B>>2];c[B>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{B=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[o>>2]=0;c[p>>2]=0}while(0);l=c[n>>2]|0;k=r+88|0;g=a[l>>0]|0;h=g&255;do if(!(h&128)){B=k;c[B>>2]=g&255;c[B+4>>2]=0;g=1}else{B=d[l+1>>0]|0;g=B<<7|h&127;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=2;break}B=d[l+2>>0]|0;g=B<<14|g&16383;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=3;break}B=d[l+3>>0]|0;g=B<<21|g&2097151;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=4;break}i=28;j=l+4|0;g=g&268435455;h=0;do{B=j;j=j+1|0;B=d[B>>0]|0;A=cw(B&127|0,0,i|0)|0;g=Sv(A|0,L()|0,g|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((B&128|0)!=0|0!=0));B=k;c[B>>2]=g;c[B+4>>2]=h;g=j-l|0}while(0);c[r+80>>2]=l+g}while(0);q=q+1|0}while(q>>>0<f>>>0);B=f+-1|0;A=f>>>0>1;if(A){i=B;do{j=i;i=i+-1|0;f:do if((j|0)<(f|0)){g=i;l=c[X+(i<<2)>>2]|0;do{h=g;g=g+1|0;k=X+(g<<2)|0;if((Xa[G&255](l,c[k>>2]|0)|0)<0)break f;z=X+(h<<2)|0;y=c[k>>2]|0;l=c[z>>2]|0;c[k>>2]=l;c[z>>2]=y}while((g|0)<(B|0))}while(0)}while((j|0)>1)}if(c[(c[X>>2]|0)+80>>2]|0){g=0;y=0;z=0;while(1){c[H>>2]=0;c[Q>>2]=0;x=c[X>>2]|0;n=x+88|0;o=c[n>>2]|0;n=c[n+4>>2]|0;jq(b,x,H,Q)|0;g:do if(A){h=1;do{i=c[X+(h<<2)>>2]|0;if(!(c[i+80>>2]|0))break g;x=i+88|0;if(!((c[x>>2]|0)==(o|0)?(c[x+4>>2]|0)==(n|0):0))break g;jq(b,i,0,0)|0;h=h+1|0}while(h>>>0<f>>>0)}else h=1;while(0);if(T)i=c[Q>>2]|0;else{q=c[V>>2]|0;j=c[H>>2]|0;p=c[Q>>2]|0;r=j+p|0;k=j;m=0;while(1){h:do if(k>>>0<r>>>0){l=0;i=k;while(1){k=a[i>>0]|0;if(!(k&254|l)){l=i;break h}i=i+1|0;if(i>>>0<r>>>0)l=k&128;else{l=i;break}}}else l=k;while(0);i=l-j|0;if((m|0)==(q|0))break;p=p-i|0;if(!p){j=l;i=0;break}k=l+1|0;j=a[k>>0]|0;i=j&255;do if(!(i&128))j=1;else{x=d[l+2>>0]|0;i=x<<7|j&127;if(!(x&128)){j=2;break}x=d[l+3>>0]|0;i=x<<14|i&16383;if(!(x&128)){j=3;break}x=d[l+4>>0]|0;i=x<<21|i&2097151;if(!(x&128)){j=4;break}i=(a[l+5>>0]&7)<<28|i&268435455;j=5}while(0);k=k+j|0;j=l;m=i}c[H>>2]=j;c[Q>>2]=i}do if(U|(i|0)>0){w=(g|0)>0;u=w&(a[F>>0]|0)!=0;t=Tv(y|0,z|0,o|0,n|0)|0;v=L()|0;x=Tv(o|0,n|0,y|0,z|0)|0;k=L()|0;x=u?t:x;k=u?v:k;if((k|0)<0|(k|0)==0&x>>>0<1?!((x|0)==(o|0)&(k|0)==(n|0)&(w^1)):0){f=267;D=184;break a}j=0;l=x;m=k;do{j=j+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));j=(C?i+1|0:0)+g+j|0;if((j|0)>(c[Y>>2]|0)){j=j<<1;c[Y>>2]=j;l=c[Z>>2]|0;if(mb()|0){f=7;D=184;break a}j=sb(l,(j|0)>0?j:0,0)|0;if(!j){f=7;D=184;break a}c[Z>>2]=j}else j=c[Z>>2]|0;w=j+g|0;if(P){m=w;l=x;while(1){i=l&255;j=m+1|0;a[m>>0]=i|-128;l=bw(l|0,k|0,7)|0;k=L()|0;if((l|0)==0&(k|0)==0)break;else m=j}a[m>>0]=i&127;g=j-w+g|0;if(!C)break;z=c[Q>>2]|0;ew((c[Z>>2]|0)+g|0,c[H>>2]|0,z|0)|0;g=z+g|0;a[(c[Z>>2]|0)+g>>0]=0;g=g+1|0;break}l=c[H>>2]|0;v=l+i|0;m=a[l>>0]|0;switch(m<<24>>24){case 1:{i=0;j=0;break}case 2:{i=w;m=x;q=k;while(1){j=m&255;p=i+1|0;a[i>>0]=j|-128;m=bw(m|0,q|0,7)|0;q=L()|0;if((m|0)==0&(q|0)==0)break;else i=p}a[i>>0]=j&127;a[p>>0]=2;i=1-w+p|0;j=1;m=a[l>>0]|0;D=140;break}default:{i=0;j=0;D=140}}if((D|0)==140){D=0;m=m<<24>>24;if(m&254)do{l=l+1|0;u=m;m=a[l>>0]|0}while((m&254|u&128|0)!=0)}if(l>>>0<v>>>0)do{r=l+1|0;p=a[r>>0]|0;m=p&255;do if(!(m&128)){l=1;u=p&255;q=0}else{u=d[l+2>>0]|0;m=u<<7|m&127;if(!(u&128)){l=2;u=m;q=0;break}u=d[l+3>>0]|0;m=u<<14|m&16383;if(!(u&128)){l=3;u=m;q=0;break}u=d[l+4>>0]|0;m=u<<21|m&2097151;if(!(u&128)){l=4;u=m;q=0;break}p=28;l=l+5|0;m=m&268435455;q=0;do{u=l;l=l+1|0;u=d[u>>0]|0;t=cw(u&127|0,0,p|0)|0;m=Sv(t|0,L()|0,m|0,q|0)|0;q=L()|0;p=p+7|0}while(p>>>0<64&((u&128|0)!=0|0!=0));l=l-r|0;u=m}while(0);l=r+l|0;m=a[l>>0]|0;if(m<<24>>24==2){if(!j){m=w+i|0;j=m;r=x;t=k;while(1){p=r&255;s=j+1|0;a[j>>0]=p|-128;r=bw(r|0,t|0,7)|0;t=L()|0;if((r|0)==0&(t|0)==0)break;else j=s}a[j>>0]=p&127;i=i-m+s|0;j=1}t=i+1|0;a[w+i>>0]=1;s=w+t|0;r=s;p=u;while(1){i=p&255;m=r+1|0;a[r>>0]=i|-128;p=bw(p|0,q|0,7)|0;q=L()|0;if((p|0)==0&(q|0)==0)break;else r=m}a[r>>0]=i&127;i=m-s+t|0;a[w+i>>0]=2;i=i+1|0;m=a[l>>0]|0}m=m<<24>>24;if(m&254)do{l=l+1|0;u=m;m=a[l>>0]|0}while((m&254|u&128|0)!=0)}while(l>>>0<v>>>0);if(j){a[w+i>>0]=0;i=i+1|0}x=(i|0)==0;g=i+g|0;o=x?y:o;n=x?z:n}else{o=y;n=z}while(0);h=h+(((h|0)==(f|0))<<31>>31)|0;if((h|0)>0)do{k=h;h=h+-1|0;i:do if((k|0)<(f|0)){i=h;m=c[X+(h<<2)>>2]|0;do{j=i;i=i+1|0;l=X+(i<<2)|0;if((Xa[G&255](m,c[l>>2]|0)|0)<0)break i;z=X+(j<<2)|0;y=c[l>>2]|0;m=c[z>>2]|0;c[l>>2]=m;c[z>>2]=y}while((i|0)<(B|0))}while(0)}while((k|0)>1);if(!(c[(c[X>>2]|0)+80>>2]|0))break;else{y=o;z=n}}if((g|0)>0){D=183;break}}c[_>>2]=f}do if((D|0)==51){c[e+52>>2]=c[f+76>>2];f=f+72|0;g=100}else if((D|0)==52){i=c[f+76>>2]|0;c[e+52>>2]=i;f=f+72|0;if(g)g=100;else{h=c[f>>2]|0;if((c[Y>>2]|0)<(i|0)){g=i<<1;c[Y>>2]=g;f=c[Z>>2]|0;if(mb()|0){f=Z;g=7;break}f=sb(f,(g|0)>0?g:0,0)|0;if(!f){f=Z;g=7;break}c[Z>>2]=f}else f=c[Z>>2]|0;ew(f|0,h|0,i|0)|0;f=Z;g=100}}else if((D|0)==183){c[e+48>>2]=c[Z>>2];c[e+52>>2]=g;c[_>>2]=f;_=100;Ra=$;return _|0}else if((D|0)==184){_=f;Ra=$;return _|0}else if((D|0)==186){Ra=$;return f|0}while(0);c[e+48>>2]=c[f>>2];c[_>>2]=1;_=g;Ra=$;return _|0}function hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=((c[a+80>>2]|0)==0&1)-((c[b+80>>2]|0)==0&1)|0;if(d|0){b=d;return b|0}e=a+88|0;d=c[e>>2]|0;e=c[e+4>>2]|0;g=b+88|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(f|0)&(e|0)==(g|0)){b=(c[b>>2]|0)-(c[a>>2]|0)|0;return b|0}else{b=(e|0)<(g|0)|(e|0)==(g|0)&d>>>0<f>>>0?1:-1;return b|0}return 0}function iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=((c[a+80>>2]|0)==0&1)-((c[b+80>>2]|0)==0&1)|0;if(d|0){b=d;return b|0}e=a+88|0;d=c[e>>2]|0;e=c[e+4>>2]|0;g=b+88|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(f|0)&(e|0)==(g|0)){b=(c[b>>2]|0)-(c[a>>2]|0)|0;return b|0}else{b=(e|0)>(g|0)|(e|0)==(g|0)&d>>>0>f>>>0?1:-1;return b|0}return 0}function jq(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;n=v;i=v+4|0;u=e+80|0;h=c[u>>2]|0;c[n>>2]=h;t=b+235|0;b=h;if(a[t>>0]|0?c[e+56>>2]|0:0){a[i>>0]=0;if(!f)b=e+84|0;else{c[f>>2]=h;b=e+84|0;c[g>>2]=(c[b>>2]|0)+-1}kq(0,c[e+72>>2]|0,c[e+76>>2]|0,n,e+88|0,b,i);if(!(a[i>>0]|0))c[u>>2]=c[n>>2];else c[u>>2]=0;u=0;Ra=v;return u|0}m=(c[e+72>>2]|0)+(c[e+76>>2]|0)|0;q=e+52|0;o=e+40|0;r=e+48|0;p=e+44|0;h=0;while(1){i=a[b>>0]|0;if((i|h)<<24>>24)do{b=b+1|0;h=i&-128;i=a[b>>0]|0}while((i|h)<<24>>24!=0);i=c[q>>2]|0;if(!i)break;j=c[r>>2]|0;k=(c[o>>2]|0)+j|0;if(b>>>0<k>>>0)break;l=(c[p>>2]|0)-j|0;l=(l|0)<4096?l:4096;i=jd(i,k,l,j,81)|0;if(i|0){s=67;break}i=(c[r>>2]|0)+l|0;c[r>>2]=i;i=(c[o>>2]|0)+i|0;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));if((c[r>>2]|0)==(c[p>>2]|0)){i=c[q>>2]|0;do if(i|0){j=c[i+20>>2]|0;gc(c[i+16>>2]|0)|0;if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}l=i;if((c[j+304>>2]|0)>>>0<=l>>>0?(c[j+308>>2]|0)>>>0>l>>>0:0){l=j+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[q>>2]=0;c[r>>2]=0}}if((s|0)==67){c[n>>2]=b;u=i;Ra=v;return u|0}b=b+1|0;c[n>>2]=b;if(f|0){c[f>>2]=c[u>>2];c[g>>2]=b+-1-(c[u>>2]|0)}do if(b>>>0<m>>>0){l=b;while(1){if(a[l>>0]|0)break;b=l+1|0;if(b>>>0<m>>>0)l=b;else{s=36;break}}if((s|0)==36){c[n>>2]=b;break}c[n>>2]=l;b=c[q>>2]|0;a:do if(b|0){k=l+10|0;i=c[r>>2]|0;j=b;while(1){b=c[o>>2]|0;if((k-b|0)<=(i|0))break a;h=(c[p>>2]|0)-i|0;h=(h|0)<4096?h:4096;if(jd(j,b+i|0,h,i,81)|0){b=0;s=68;break}i=(c[r>>2]|0)+h|0;c[r>>2]=i;i=(c[o>>2]|0)+i|0;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));i=c[r>>2]|0;j=c[q>>2]|0;if((i|0)==(c[p>>2]|0))break;if(!j)break a}if((s|0)==68){Ra=v;return b|0}do if(j|0){b=c[j+20>>2]|0;gc(c[j+16>>2]|0)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,j);break}s=j;if((c[b+304>>2]|0)>>>0<=s>>>0?(c[b+308>>2]|0)>>>0>s>>>0:0){s=b+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[q>>2]=0;c[r>>2]=0}while(0);h=a[l>>0]|0;b=h&255;do if(!(b&128)){i=1;b=h&255;h=0}else{s=d[l+1>>0]|0;b=s<<7|b&127;if(!(s&128)){i=2;h=0;break}s=d[l+2>>0]|0;b=s<<14|b&16383;if(!(s&128)){i=3;h=0;break}s=d[l+3>>0]|0;b=s<<21|b&2097151;if(!(s&128)){i=4;h=0;break}i=28;j=l+4|0;b=b&268435455;h=0;do{s=j;j=j+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,i|0)|0;b=Sv(r|0,L()|0,b|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((s&128|0)!=0|0!=0));i=j-l|0}while(0);c[u>>2]=l+i;r=(a[t>>0]|0)==0;u=e+88|0;t=u;e=c[t>>2]|0;t=c[t+4>>2]|0;q=Tv(0,0,b|0,h|0)|0;s=L()|0;t=Sv((r?b:q)|0,(r?h:s)|0,e|0,t|0)|0;e=L()|0;c[u>>2]=t;c[u+4>>2]=e;u=0;Ra=v;return u|0}while(0);c[u>>2]=0;u=0;Ra=v;return u|0}function kq(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=c[g>>2]|0;if(!k){p=e+f|0;if((f|0)>0){o=(b|0)==0?1:-1;j=1;f=0;b=0;while(1){l=a[e>>0]|0;k=l&255;do if(!(k&128)){n=1;m=l&255;l=0}else{n=d[e+1>>0]|0;k=n<<7|k&127;if(!(n&128)){n=2;m=k;l=0;break}n=d[e+2>>0]|0;k=n<<14|k&16383;if(!(n&128)){n=3;m=k;l=0;break}n=d[e+3>>0]|0;k=n<<21|k&2097151;if(!(n&128)){n=4;m=k;l=0;break}m=28;n=e+4|0;k=k&268435455;l=0;do{q=n;n=n+1|0;q=d[q>>0]|0;r=cw(q&127|0,0,m|0)|0;k=Sv(r|0,L()|0,k|0,l|0)|0;l=L()|0;m=m+7|0}while(m>>>0<64&((q&128|0)!=0|0!=0));n=n-e|0;m=k}while(0);k=e+n|0;m=Yv(m|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;n=L()|0;e=k;l=0;while(1){j=a[e>>0]|0;e=e+1|0;if(!(l<<24>>24|j))break;else l=j&128}f=Sv(m|0,n|0,f|0,b|0)|0;b=L()|0;a:do if(e>>>0<p>>>0)do{if(a[e>>0]|0)break a;e=e+1|0}while(e>>>0<p>>>0);while(0);if(e>>>0<p>>>0)j=o;else break}}else{k=0;f=0;b=0}c[i>>2]=p-k;c[g>>2]=k;r=h;c[r>>2]=f;c[r+4>>2]=b;return}n=(b|0)==0;b=k+-2|0;b:do if(b>>>0<e>>>0)o=b;else while(1){if((a[b>>0]|0)>=0){o=b;break b}b=b+-1|0;if(b>>>0<e>>>0){o=b;break}}while(0);m=o+1|0;p=m;b=a[m>>0]|0;f=b&255;do if(!(f&128)){b=b&255;f=0}else{r=d[o+2>>0]|0;b=r<<7|f&127;if(!(r&128)){f=0;break}r=d[o+3>>0]|0;b=r<<14|b&16383;if(!(r&128)){f=0;break}r=d[o+4>>0]|0;b=r<<21|b&2097151;if(!(r&128)){f=0;break}k=28;l=o+5|0;b=b&268435455;f=0;while(1){r=d[l>>0]|0;q=cw(r&127|0,0,k|0)|0;b=Sv(q|0,L()|0,b|0,f|0)|0;f=L()|0;k=k+7|0;if(!(k>>>0<64&((r&128|0)!=0|0!=0)))break;else l=l+1|0}}while(0);q=Yv(b|0,f|0,(n?1:-1)|0,(n?0:-1)|0)|0;n=L()|0;r=h;n=Tv(c[r>>2]|0,c[r+4>>2]|0,q|0,n|0)|0;q=L()|0;r=h;c[r>>2]=n;c[r+4>>2]=q;if((m|0)==(e|0)){a[j>>0]=1;b=p}else{b=o+-1|0;c:do if(b>>>0>e>>>0){b=-1;while(1){k=b+-1|0;f=a[o+b>>0]|0;b=o+k|0;if(f<<24>>24)break c;if(b>>>0>e>>>0)b=k;else{f=0;break}}}else{f=0;k=-1}while(0);d:do if(b>>>0>e>>>0){b=f;while(1){f=a[o+k>>0]|0;if(!(f&-128&255|b<<24>>24))break;k=k+-1|0;b=o+k|0;if(b>>>0>e>>>0)b=f;else{e=47;break d}}b=o+k+2|0;e=49}else e=47;while(0);if((e|0)==47)if((k|0)<-1&f<<24>>24==0){b=o+(k+2)|0;e=49}do{r=b;b=b+1|0}while((a[r>>0]|0)<0);c[i>>2]=p-b}c[g>>2]=b;return}function lq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](132)|0;if(!f){e=7;return e|0}else i=f}else{h=Wa[c[29356>>2]&127](132)|0;if((c[14985]|0)>>>0<132)c[14985]=132;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){i=c[14978]|0;g=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=i>>>0)&1}g=Wa[c[29340>>2]&127](h)|0;if(!g){e=7;return e|0}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;i=g}else i=g}gw(i|0,0,132)|0;a:do if((b|0)>1){h=d+4|0;f=c[h>>2]|0;b=Eu(f)|0;if((b|0)>0){d=i+4|0;f=a[f>>0]|0;if(f<<24>>24>=0){g=0;do{a[d+(f&255)>>0]=1;g=g+1|0;if((g|0)>=(b|0))break a;f=a[(c[h>>2]|0)+g>>0]|0}while(f<<24>>24>=0)}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);e=1;return e|0}else{e=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);e=1;return e|0}}}else{g=i+4|0;f=1;do{a[g+f>>0]=((f+-48|0)>>>0>9&((f&2147483615)+-65|0)>>>0>25)<<31>>31;f=f+1|0}while((f|0)!=128)}while(0);c[e>>2]=i;e=0;return e|0}function mq(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function nq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;h=a+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e>>2]=a;h=0;return h|0}function oq(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function pq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=c[b>>2]|0;o=c[b+4>>2]|0;p=b+12|0;i=c[p>>2]|0;k=c[b+8>>2]|0;if((i|0)>=(k|0)){p=101;return p|0}while(1){a:do if((i|0)<(k|0))while(1){j=a[o+i>>0]|0;if(j<<24>>24<=-1){n=i;break a}if(!(a[(j&255)+(l+4)>>0]|0)){n=i;break a}i=i+1|0;c[p>>2]=i;if((i|0)>=(k|0)){n=i;break}}else n=i;while(0);if((n|0)<(k|0)){i=n;do{j=a[o+i>>0]|0;if(j<<24>>24>-1?a[(j&255)+(l+4)>>0]|0:0)break;i=i+1|0;c[p>>2]=i}while((i|0)<(k|0));if((i|0)>(n|0))break}else i=n;if((i|0)>=(k|0)){i=101;m=23;break}}if((m|0)==23)return i|0;l=i-n|0;i=b+24|0;do if((l|0)>(c[i>>2]|0)){j=l+20|0;c[i>>2]=j;k=b+20|0;i=c[k>>2]|0;if(mb()|0){p=7;return p|0}i=sb(i,(j|0)>0?j:0,0)|0;if(!i){p=7;return p|0}else{c[k>>2]=i;break}}while(0);j=b+20|0;if((l|0)>0){i=0;do{k=a[o+(i+n)>>0]|0;m=k&255;a[(c[j>>2]|0)+i>>0]=(k+-65&255)<26?m+32|0:m;i=i+1|0}while((i|0)!=(l|0))}c[d>>2]=c[j>>2];c[e>>2]=l;c[f>>2]=n;c[g>>2]=c[p>>2];o=b+16|0;p=c[o>>2]|0;c[o>>2]=p+1;c[h>>2]=p;p=0;return p|0}function qq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(mb()|0){d=7;return d|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](4)|0;if(!a){d=7;return d|0}}else{e=Wa[c[29356>>2]&127](4)|0;if((c[14985]|0)>>>0<4)c[14985]=4;b=59064;a=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&a>>>0>0){f=c[14978]|0;b=Tv(a|0,b|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&b>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0>(c[14987]|0)>>>0)c[14987]=b}c[a>>2]=0;c[d>>2]=a;f=0;return f|0}function rq(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function sq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;h=a+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e>>2]=a;h=0;return h|0}function tq(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function uq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;ka=Ra;Ra=Ra+32|0;q=ka;p=c[b+4>>2]|0;ja=b+12|0;i=c[ja>>2]|0;o=c[b+8>>2]|0;if((i|0)>=(o|0)){ja=101;Ra=ka;return ja|0}while(1){a:do if((i|0)<(o|0))while(1){l=a[p+i>>0]|0;n=l<<24>>24;if(n&128|0){ia=i;break a}if(l<<24>>24>=48?a[26096+(n+-48)>>0]|0:0){ia=i;break a}i=i+1|0;c[ja>>2]=i;if((i|0)>=(o|0)){ia=i;break}}else ia=i;while(0);if((ia|0)<(o|0)){i=ia;do{l=a[p+i>>0]|0;n=l<<24>>24;if(!(n&128)){if(l<<24>>24<48)break;if(!(a[26096+(n+-48)>>0]|0))break}i=i+1|0;c[ja>>2]=i}while((i|0)<(o|0));if((i|0)>(ia|0))break}else i=ia;if((i|0)>=(o|0)){i=101;fa=564;break}}if((fa|0)==564){Ra=ka;return i|0}r=i-ia|0;i=b+24|0;do if((r|0)>(c[i>>2]|0)){l=r+20|0;c[i>>2]=l;n=b+20|0;i=c[n>>2]|0;if(mb()|0){ja=7;Ra=ka;return ja|0}i=sb(i,(l|0)>0?l:0,0)|0;if(!i){ja=7;Ra=ka;return ja|0}else{c[n>>2]=i;ha=n;ga=i;break}}else{ga=b+20|0;ha=ga;ga=c[ga>>2]|0}while(0);o=p+ia|0;do if((r+-3|0)>>>0<=17){l=22;n=0;while(1){i=a[o+n>>0]|0;if((i+-65&255)>=26){if((i+-97&255)>=26){fa=39;break}}else i=(i&255)+32&255;a[q+l>>0]=i;n=n+1|0;if((n|0)>=(r|0))break;else l=l+-1|0}if((fa|0)==39){i=0;k=0;do{j=a[o+k>>0]|0;if((j+-65&255)<26)j=(j&255)+32&255;else i=(j+-48&255)<10?1:i;a[ga+k>>0]=j;k=k+1|0}while((k|0)!=(r|0));j=(i|0)==0?10:3;if((j<<1|0)<(r|0)){i=j;j=r-j|0;do{a[ga+i>>0]=a[ga+j>>0]|0;j=j+1|0;i=i+1|0}while((j|0)<(r|0))}else i=r;a[ga+i>>0]=0;c[e>>2]=i;break}i=q+23|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;a[i+4>>0]=0;i=q+l|0;l=a[i>>0]|0;b:do if(l<<24>>24==115){l=i+1|0;n=a[l>>0]|0;switch(n<<24>>24){case 101:break;case 115:{a[l>>0]=115;a[i>>0]=115;l=115;break b}default:{i=l;l=n;fa=51;break b}}n=i+2|0;switch(a[n>>0]|0){case 115:break;case 105:{a[n>>0]=105;i=n;l=105;break b}default:{fa=82;break b}}i=i+3|0;if((a[i>>0]|0)==115){a[i>>0]=115;a[n>>0]=115;i=n;l=115}else fa=82}else fa=51;while(0);c:do if((fa|0)==51){d:do switch(l<<24>>24){case 100:{p=i+1|0;if((a[p>>0]|0)!=101){l=i;fa=82;break c}o=i+2|0;l=a[o>>0]|0;if(l<<24>>24!=101){n=o;while(1)if(!(yq(n)|0))break;else n=n+1|0;if(!(a[n>>0]|0)){l=i;fa=82;break c}else break d}l=i+3|0;n=a[l>>0]|0;if(!(n<<24>>24)){l=i;fa=82;break c}while(1){n=(n<<24>>24)+-97|0;if((n|0)==24)n=yq(l+1|0)|0;else n=1-(a[26176+n>>0]|0)|0;if(!n)break;l=l+1|0;n=a[l>>0]|0;if(!(n<<24>>24)){l=i;fa=82;break c}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=i;fa=82;break c}a[o>>0]=101;a[p>>0]=101;i=p;l=101;break c}case 103:{if((a[i+1>>0]|0)!=110){l=i;fa=82;break c}if((a[i+2>>0]|0)!=105){l=i;fa=82;break c}n=i+3|0;l=n;while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=i;fa=82;break c}o=n;l=a[n>>0]|0;break}default:{l=i;fa=82;break c}}while(0);switch(l<<24>>24){case 116:{i=o+1|0;if((a[i>>0]|0)==97){a[i>>0]=97;a[o>>0]=116;i=o+-1|0;a[i>>0]=101;l=101;break c}break}case 108:{i=o+1|0;if((a[i>>0]|0)==98){a[i>>0]=98;a[o>>0]=108;i=o+-1|0;a[i>>0]=101;l=101;break c}break}case 122:{i=o+1|0;if((a[i>>0]|0)==105){a[i>>0]=105;a[o>>0]=122;i=o+-1|0;a[i>>0]=101;l=101;break c}break}default:{}}if(yq(o)|0){i=o+1|0;n=a[i>>0]|0;if(l<<24>>24==n<<24>>24)switch(l<<24>>24){case 122:case 115:case 108:break;default:{fa=83;break c}}if(!(n<<24>>24==0|((l+-119&255)<3|(vq(o)|0)==0))){i=(n<<24>>24)+-97|0;if((i|0)==24)i=yq(o+2|0)|0;else i=1-(a[26176+i>>0]|0)|0;if((i|0)!=0?(yq(o+2|0)|0)!=0:0){i=o+-1|0;a[i>>0]=101;l=101}else{l=o;fa=82}}else{l=o;fa=82}}else{l=o;fa=82}}while(0);if((fa|0)==82){i=l;l=a[l>>0]|0;fa=83}if((fa|0)==83)if(l<<24>>24==121){l=i;do l=l+1|0;while((yq(l)|0)!=0);if(!(a[l>>0]|0))l=121;else{a[i>>0]=105;l=105}}q=i+1|0;n=a[q>>0]|0;e:do switch(n<<24>>24|0){case 97:{if(l<<24>>24==108)if((n<<24>>24==97?(J=i+2|0,(a[J>>0]|0)==110):0)?(I=i+3|0,(a[I>>0]|0)==111):0){n=i+4|0;if(((a[n>>0]|0)==105?(N=i+5|0,(a[N>>0]|0)==116):0)?(M=i+6|0,(a[M>>0]|0)==97):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=108;break e}a[M>>0]=97;a[N>>0]=116;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if(((a[n>>0]|0)==105?(H=i+5|0,(a[H>>0]|0)==116):0)?(v=i+6|0,x=a[v>>0]|0,x<<24>>24!=0):0){l=v;m=x;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[H>>0]=116;a[n>>0]=105;a[I>>0]=111;a[J>>0]=110;i=J;l=110}else l=108}else l=108}else l=108;break}case 99:{if(l<<24>>24==105)if(n<<24>>24==99?(Y=i+2|0,(a[Y>>0]|0)==110):0){n=i+3|0;switch(a[n>>0]|0){case 101:{l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=101;a[Y>>0]=110;a[q>>0]=99;a[i>>0]=101;l=101;break e}case 97:{l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[Y>>0]=110;a[q>>0]=99;a[i>>0]=101;l=101;break e}default:{l=105;break e}}}else l=105;break}case 101:{if(l<<24>>24==114)if(((n<<24>>24==101?(E=i+2|0,(a[E>>0]|0)==122):0)?(D=i+3|0,(a[D>>0]|0)==105):0)?(s=i+4|0,m=a[s>>0]|0,m<<24>>24!=0):0){l=s;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[D>>0]=105;a[E>>0]=122;a[q>>0]=101;i=q;l=101}else l=114}else l=114;break}case 103:{if(l<<24>>24==105)if(((n<<24>>24==103?(G=i+2|0,(a[G>>0]|0)==111):0)?(F=i+3|0,(a[F>>0]|0)==108):0)?(t=i+4|0,u=a[t>>0]|0,u<<24>>24!=0):0){l=t;m=u;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[F>>0]=108;a[G>>0]=111;a[q>>0]=103;i=q;l=103}else l=105}else l=105;break}case 108:{if(l<<24>>24==105)if(n<<24>>24==108){p=i+2|0;switch(a[p>>0]|0){case 98:{l=i+3|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[p>>0]=98;a[q>>0]=108;a[i>>0]=101;l=101;break e}case 108:{n=i+3|0;if((a[n>>0]|0)!=97){l=105;break e}l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[p>>0]=108;i=p;l=108;break e}case 116:{o=i+3|0;if((a[o>>0]|0)!=110){l=105;break e}n=i+4|0;if((a[n>>0]|0)!=101){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=101;a[o>>0]=110;a[p>>0]=116;i=p;l=116;break e}case 101:{l=i+3|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[p>>0]=101;i=p;l=101;break e}case 115:{o=i+3|0;if((a[o>>0]|0)!=117){l=105;break e}n=i+4|0;if((a[n>>0]|0)!=111){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=111;a[o>>0]=117;a[p>>0]=115;i=p;l=115;break e}default:{l=105;break e}}}else l=105;break}case 111:{switch(l<<24>>24){case 110:break;case 114:{if(n<<24>>24!=111){l=114;break e}o=i+2|0;if((a[o>>0]|0)!=116){l=114;break e}n=i+3|0;if((a[n>>0]|0)!=97){l=114;break e}l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=114;break e}a[n>>0]=97;a[o>>0]=116;a[q>>0]=101;i=q;l=101;break e}default:break e}if((n<<24>>24==111?(L=i+2|0,(a[L>>0]|0)==105):0)?(K=i+3|0,(a[K>>0]|0)==116):0){n=i+4|0;if(((a[n>>0]|0)==97?(P=i+5|0,(a[P>>0]|0)==122):0)?(O=i+6|0,(a[O>>0]|0)==105):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=110;break e}a[O>>0]=105;a[P>>0]=122;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if((a[n>>0]|0)==97?(w=i+5|0,y=a[w>>0]|0,y<<24>>24!=0):0){l=w;m=y;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[n>>0]=97;a[K>>0]=116;a[L>>0]=101;i=L;l=101}else l=110}else l=110}else l=110;break}case 115:{switch(l<<24>>24){case 109:{if(n<<24>>24!=115){l=109;break e}if((a[i+2>>0]|0)!=105){l=109;break e}o=i+3|0;if((a[o>>0]|0)!=108){l=109;break e}n=i+4|0;if((a[n>>0]|0)!=97){l=109;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=109;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=109;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=109;break e}a[n>>0]=97;a[o>>0]=108;i=o;l=108;break e}case 115:break;default:break e}if((n<<24>>24==115?(a[i+2>>0]|0)==101:0)?(a[i+3>>0]|0)==110:0){n=i+4|0;if(((a[n>>0]|0)==101?(R=i+5|0,(a[R>>0]|0)==118):0)?(Q=i+6|0,(a[Q>>0]|0)==105):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=115;break e}a[Q>>0]=105;a[R>>0]=118;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if(((a[n>>0]|0)==108?(W=i+5|0,(a[W>>0]|0)==117):0)?(V=i+6|0,(a[V>>0]|0)==102):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=115;break e}a[V>>0]=102;a[W>>0]=117;a[n>>0]=108;i=n;l=108;break e}n=i+4|0;if((((a[n>>0]|0)==115?(T=i+5|0,(a[T>>0]|0)==117):0)?(S=i+6|0,(a[S>>0]|0)==111):0)?(z=i+7|0,B=a[z>>0]|0,B<<24>>24!=0):0){l=z;m=B;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[S>>0]=111;a[T>>0]=117;a[n>>0]=115;i=n;l=115}else l=115}else l=115}else l=115;break}case 116:{if(l<<24>>24==105)if(n<<24>>24==116?(X=i+2|0,(a[X>>0]|0)==105):0){o=i+3|0;switch(a[o>>0]|0){case 108:break;case 118:{n=i+4|0;if((a[n>>0]|0)!=105){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=105;a[o>>0]=118;a[X>>0]=101;i=X;l=101;break e}default:{l=105;break e}}n=i+4|0;if((a[n>>0]|0)==97){l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[o>>0]=108;i=o;l=108;break e}n=i+4|0;if(((a[n>>0]|0)==105?(U=i+5|0,(a[U>>0]|0)==98):0)?(A=i+6|0,C=a[A>>0]|0,C<<24>>24!=0):0){l=A;m=C;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[U>>0]=98;a[n>>0]=108;a[o>>0]=101;i=o;l=101}else l=105}else l=105}else l=105;break}default:{}}while(0);f:do switch(l<<24>>24|0){case 101:{if(l<<24>>24==101)switch(a[i+1>>0]|0){case 116:{if((a[i+2>>0]|0)!=97)break f;m=i+3|0;if((a[m>>0]|0)!=99)break f;l=i+4|0;if((a[l>>0]|0)!=105)break f;j=i+5|0;k=a[j>>0]|0;if(!(k<<24>>24))break f;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(!(a[j>>0]|0))break f;a[l>>0]=105;a[m>>0]=99;i=m;break f}case 118:{if((a[i+2>>0]|0)!=105)break f;if((a[i+3>>0]|0)!=116)break f;if((a[i+4>>0]|0)!=97)break f;l=i+5|0;k=a[l>>0]|0;if(!(k<<24>>24))break f;j=l;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:l;break f}case 122:{if((a[i+2>>0]|0)!=105)break f;m=i+3|0;if((a[m>>0]|0)!=108)break f;l=i+4|0;if((a[l>>0]|0)!=97)break f;j=i+5|0;k=a[j>>0]|0;if(!(k<<24>>24))break f;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(!(a[j>>0]|0))break f;a[l>>0]=97;a[m>>0]=108;i=m;break f}default:break f}break}case 105:{if(((((l<<24>>24==105?(a[i+1>>0]|0)==116:0)?(a[i+2>>0]|0)==105:0)?(ba=i+3|0,(a[ba>>0]|0)==99):0)?(aa=i+4|0,(a[aa>>0]|0)==105):0)?(j=i+5|0,Z=a[j>>0]|0,Z<<24>>24!=0):0){k=Z;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(a[j>>0]|0){a[aa>>0]=105;a[ba>>0]=99;i=ba}}break}case 108:{if(l<<24>>24==108){switch(a[i+1>>0]|0){case 97:break;case 117:{if((a[i+2>>0]|0)!=102)break f;l=i+3|0;k=a[l>>0]|0;if(!(k<<24>>24))break f;j=l;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:l;break f}default:break f}l=i+2|0;if(((a[l>>0]|0)==99?(da=i+3|0,(a[da>>0]|0)==105):0)?(_=i+4|0,$=a[_>>0]|0,$<<24>>24!=0):0){j=_;k=$;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(a[j>>0]|0){a[da>>0]=105;a[l>>0]=99;i=l}}}break}case 115:{if((((l<<24>>24==115?(a[i+1>>0]|0)==115:0)?(a[i+2>>0]|0)==101:0)?(a[i+3>>0]|0)==110:0)?(ca=i+4|0,k=a[ca>>0]|0,k<<24>>24!=0):0){j=ca;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:ca}break}default:{}}while(0);l=a[i+1>>0]|0;g:do switch(l<<24>>24|0){case 97:{j=a[i>>0]|0;if(j<<24>>24==108){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 99:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==110){switch(a[i+3>>0]|0){case 101:case 97:break;default:{j=i;fa=399;break g}}j=i+4|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}case 101:{j=a[i>>0]|0;if(j<<24>>24==114){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 105:{j=a[i>>0]|0;if(j<<24>>24==99){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 108:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==98){switch(a[i+3>>0]|0){case 105:case 97:break;default:{j=i;fa=399;break g}}j=i+4|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}case 110:{j=a[i>>0]|0;if(j<<24>>24==116){switch(a[i+2>>0]|0){case 97:{j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}case 101:break;default:break g}if(l<<24>>24==110){j=i+3|0;if((a[j>>0]|0)!=109){fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}j=i+4|0;if((a[j>>0]|0)==101){j=i+5|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}else{fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}}else{j=i;fa=399}}else fa=400;break}case 111:{j=a[i>>0]|0;if(j<<24>>24==117){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}k=i+3|0;if(l<<24>>24==111&(j<<24>>24==110?((a[k>>0]|0)+-115&255)<2:0)?(a[i+2>>0]|0)==105:0){j=(wq(k)|0)==0;j=j?i:k;fa=399}else{j=i;fa=399}break}case 115:{j=a[i>>0]|0;if(j<<24>>24==109)if((a[i+2>>0]|0)==105){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}else fa=400;break}case 116:switch(a[i>>0]|0){case 101:{if(l<<24>>24!=116){j=i;fa=399;break g}if((a[i+2>>0]|0)!=97){j=i;fa=399;break g}j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}case 105:{if(l<<24>>24!=116){j=i;fa=399;break g}if((a[i+2>>0]|0)!=105){j=i;fa=399;break g}j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}default:{j=i;fa=399;break g}}case 117:{j=a[i>>0]|0;if(j<<24>>24==115)if((a[i+2>>0]|0)==111){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}else fa=400;break}case 122:case 118:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==105){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}default:{j=i;fa=399}}while(0);if((fa|0)==399){i=j;j=a[j>>0]|0;fa=400}do if((fa|0)==400)if(j<<24>>24==101){k=i+1|0;if(!(wq(k)|0)){if(vq(k)|0){if((yq(k)|0?((a[k>>0]|0)+-119&255)>=3:0)?(ea=a[i+2>>0]|0,ea<<24>>24):0){j=(ea<<24>>24)+-97|0;if((j|0)==24)j=yq(i+3|0)|0;else j=1-(a[26176+j>>0]|0)|0;if(j|0?yq(i+3|0)|0:0)break}i=k}}else i=k}while(0);if((wq(i)|0)!=0?(a[i>>0]|0)==108:0){fa=i+1|0;i=(a[fa>>0]|0)==108?fa:i}k=Eu(i)|0;c[e>>2]=k;a[ga+k>>0]=0;j=a[i>>0]|0;if(j<<24>>24)do{i=i+1|0;k=k+-1|0;a[ga+k>>0]=j;j=a[i>>0]|0}while(j<<24>>24!=0)}else{if((r|0)>0){i=0;k=0;do{j=a[o+k>>0]|0;if((j+-65&255)<26)j=(j&255)+32&255;else i=(j+-48&255)<10?1:i;a[ga+k>>0]=j;k=k+1|0}while((k|0)!=(r|0));if(!i){i=r;fa=31}else{i=r;j=3}}else{i=0;fa=31}if((fa|0)==31)j=10;if((j<<1|0)<(r|0)){i=j;j=r-j|0;do{a[ga+i>>0]=a[ga+j>>0]|0;j=j+1|0;i=i+1|0}while((j|0)<(r|0))}a[ga+i>>0]=0;c[e>>2]=i}while(0);c[d>>2]=c[ha>>2];c[f>>2]=ia;c[g>>2]=c[ja>>2];g=b+16|0;ja=c[g>>2]|0;c[g>>2]=ja+1;c[h>>2]=ja;ja=0;Ra=ka;return ja|0}function vq(b){b=b|0;var c=0,d=0;c=a[b>>0]|0;if(!(c<<24>>24)){d=0;return d|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;b=b+1|0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;d=17;break}}if((d|0)==17)return b|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;if(!(a[b>>0]|0)){d=0;return d|0}while(1)if(!(xq(b)|0))break;else b=b+1|0;if(!(a[b>>0]|0)){d=1;return d|0}while(1)if(!(yq(b)|0))break;else b=b+1|0;d=(a[b>>0]|0)==0&1;return d|0}function wq(b){b=b|0;var c=0,d=0,e=0,f=0;c=a[b>>0]|0;if(!(c<<24>>24)){f=0;return f|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;d=b+1|0;c=a[d>>0]|0;if(!(c<<24>>24)){e=0;f=20;break}else b=d}if((f|0)==20)return e|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;c=a[b>>0]|0;if(!(c<<24>>24)){f=0;return f|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;d=b+1|0;c=a[d>>0]|0;if(!(c<<24>>24)){e=0;f=20;break}else b=d}if((f|0)==20)return e|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;f=(a[b>>0]|0)!=0&1;return f|0}function xq(b){b=b|0;var c=0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;return b|0}c=(c<<24>>24)+-97|0;if((c|0)==24){b=yq(b+1|0)|0;return b|0}else{b=1-(a[26176+c>>0]|0)|0;return b|0}return 0}function yq(b){b=b|0;var c=0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;return b|0}c=(c<<24>>24)+-97|0;if((c|0)!=24){b=a[26176+c>>0]|0;return b|0}c=a[b+1>>0]|0;if(!(c<<24>>24)){b=1;return b|0}c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+2|0)|0;else c=1-(a[26176+c>>0]|0)|0;b=(c|0)!=0&1;return b|0}function zq(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+32|0;w=x+16|0;s=x+8|0;o=x;v=x+24|0;t=c[(c[d+4>>2]|0)+8>>2]|0;j=c[f>>2]|0;i=b[j+8>>1]|0;if((i&514)==514?(a[j+10>>0]|0)==1:0){u=c[j+16>>2]|0;k=j}else if(!(i&1)){u=Gg(j,1)|0;k=c[f>>2]|0}else{u=0;k=j}i=b[k+8>>1]|0;if((i&2)!=0?(a[k+10>>0]|0)==1:0)i=c[k+12>>2]|0;else p=9;do if((p|0)==9){j=i&65535;if(!(j&16)){if(j&1|0){i=0;break}i=Fg(k,1)|0;break}else{i=c[k+12>>2]|0;if(!(j&16384))break;i=(c[k>>2]|0)+i|0;break}}while(0);k=i+1|0;a:do if((e|0)!=2){b:do if(((!((u|0)==0|(t|0)==0)?(l=t+16|0,c[l>>2]|0):0)?(m=Xa[(a[t>>0]<<24>>24==1?154:155)&255](u,k)|0,m=(c[t+12>>2]|0)+-1&m,n=c[l>>2]|0,n|0):0)?(h=c[n+(m<<3)>>2]|0,q=(a[t>>0]|0)==1?79:80,g=c[n+(m<<3)+4>>2]|0,(h|0)!=0&(g|0)!=0):0){while(1){h=h+-1|0;if(!(Za[q&127](c[g+12>>2]|0,c[g+16>>2]|0,u,k)|0))break;g=c[g>>2]|0;if(!((h|0)!=0&(g|0)!=0))break b}h=c[g+8>>2]|0;if(h|0){g=d;j=h;break a}}while(0);c[s>>2]=u;g=Bb(53600,s)|0;c[d+20>>2]=1;yc(c[d>>2]|0,g,-1,1,-1)|0;if(!g){Ra=x;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=x;return}else{d=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=x;return}}else{i=c[(c[d>>2]|0)+32>>2]|0;c[v>>2]=0;c[o>>2]=-1;c[o+4>>2]=v;yd(i,1004,o)|0;i=f+4|0;j=c[i>>2]|0;g=b[j+8>>1]|0;if((c[v>>2]|0)==0&(g&32)==0){c[d+20>>2]=1;yc(c[d>>2]|0,53578,-1,1,-1)|0;Ra=x;return}if((g&2)!=0?(a[j+10>>0]|0)==1:0){r=c[j+12>>2]|0;p=24}else p=19;do if((p|0)==19){h=g&65535;if(!(h&16)){if(h&1|0)break;r=Fg(j,1)|0;p=24;break}else{g=c[j+12>>2]|0;if(!(h&16384)){r=g;p=24;break}r=(c[j>>2]|0)+g|0;p=24;break}}while(0);if((p|0)==24?!((u|0)==0|(r|0)!=4):0){s=mc(c[i>>2]|0)|0;s=c[s>>2]|0;h=s;if((Ep(t,u,k,s)|0)!=(s|0)){g=d;j=h;break}c[d+20>>2]=1;yc(c[d>>2]|0,34831,-1,1,-1)|0;g=d;j=h;break}c[d+20>>2]=1;yc(c[d>>2]|0,53555,-1,1,-1)|0;Ra=x;return}while(0);u=c[(c[g>>2]|0)+32>>2]|0;c[v>>2]=0;c[w>>2]=-1;c[w+4>>2]=v;yd(u,1004,w)|0;if((c[v>>2]|0)==0?(b[(c[f>>2]|0)+8>>1]&32)==0:0){Ra=x;return}i=c[g>>2]|0;g=c[i+32>>2]|0;if(g|0?(c[g+108>>2]|0)<4:0){g=c[g+236>>2]|0;if(g|0){c[g+12>>2]=18;w=g+36|0;c[w>>2]=(c[w>>2]|0)+1}c[d+20>>2]=18;yc(i,31223,-1,1,0)|0;Ra=x;return}do if((c[i+24>>2]|0)<32)if(!(Eg(i,32,0)|0)){g=i+8|0;h=c[i+16>>2]|0;break}else{Ra=x;return}else{h=c[i+20>>2]|0;c[i+16>>2]=h;g=i+8|0;b[g>>1]=b[g>>1]&13}while(0);a[h>>0]=j;a[h+1>>0]=j>>8;a[h+2>>0]=j>>16;a[h+3>>0]=j>>24;c[i+12>>2]=4;b[g>>1]=16;a[i+10>>0]=1;Ra=x;return}function Aq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Xq(1,a,b,c,d,e,f)|0}function Bq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Xq(0,a,b,c,d,e,f)|0}function Cq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=d+20|0;c[t>>2]=0;o=d+40|0;g[o>>3]=5.0e6;p=c[d>>2]|0;if((p|0)>0){q=c[d+4>>2]|0;r=b+24|0;m=-1;j=-1;n=0;f=-1;l=-1;e=0;a:while(1){b:do if(!(a[q+(n*12|0)+5>>0]|0))if((a[q+(n*12|0)+4>>0]|0)==64){s=18;break a}else{h=m;i=j}else{i=c[q+(n*12|0)>>2]|0;if((i|0)<0)k=1;else k=(i|0)==((c[r>>2]|0)+1|0);h=a[q+(n*12|0)+4>>0]|0;c:do if(!((f|0)<0&(k&h<<24>>24==2))){switch(h<<24>>24){case 2:{s=13;break c}case 64:break;default:{i=j;break c}}if((i|0)>-1?(i|0)<=(c[r>>2]|0):0){e=i+2|0;c[t>>2]=e;g[o>>3]=2.0;i=j;f=n;h=64}else{i=j;h=64}}else{c[t>>2]=1;g[o>>3]=1.0;f=n;e=1;s=13}while(0);if((s|0)==13){s=0;i=(i|0)==((c[r>>2]|0)+2|0)?n:j;h=2}if(k){k=(h&255)+-4|0;switch(k>>>2|k<<30|0){case 0:case 7:{h=n;break b}case 3:case 1:{h=m;l=n;break b}default:{h=m;break b}}}else h=m}while(0);n=n+1|0;if((n|0)>=(p|0))break;else{m=h;j=i}}if((s|0)==18){c[t>>2]=0;g[o>>3]=1.e+50;d=d+48|0;c[d>>2]=0;c[d+4>>2]=262144;return 0}if((e|0)==1){e=d+56|0;c[e>>2]=c[e>>2]|1;e=1}if((f|0)>-1){s=c[d+16>>2]|0;c[s+(f<<3)>>2]=1;a[s+(f<<3)+4>>0]=1;f=2}else f=1;if((i|0)>-1){e=e|65536;c[t>>2]=e;c[(c[d+16>>2]|0)+(i<<3)>>2]=f;f=f+1|0}if((h|0)>-1){e=e|131072;c[t>>2]=e;c[(c[d+16>>2]|0)+(h<<3)>>2]=f;f=f+1|0}if((l|0)>-1){c[t>>2]=e|262144;c[(c[d+16>>2]|0)+(l<<3)>>2]=f}}if((c[d+8>>2]|0)!=1)return 0;e=c[d+12>>2]|0;t=c[e>>2]|0;if((t|0)>=0?(t|0)!=((c[b+24>>2]|0)+1|0):0)return 0;c[d+24>>2]=(a[e+4>>0]|0)==0?54528:54523;c[d+32>>2]=1;return 0}function Dq(a){a=a|0;var b=0,d=0;gc(c[a+216>>2]|0)|0;b=a+56|0;gc(c[b>>2]|0)|0;gc(c[b+4>>2]|0)|0;gc(c[b+8>>2]|0)|0;gc(c[b+12>>2]|0)|0;gc(c[b+16>>2]|0)|0;gc(c[b+20>>2]|0)|0;gc(c[b+24>>2]|0)|0;gc(c[b+28>>2]|0)|0;gc(c[b+32>>2]|0)|0;gc(c[b+36>>2]|0)|0;gc(c[b+40>>2]|0)|0;gc(c[b+44>>2]|0)|0;gc(c[b+48>>2]|0)|0;gc(c[b+52>>2]|0)|0;gc(c[b+56>>2]|0)|0;gc(c[b+60>>2]|0)|0;gc(c[b+64>>2]|0)|0;gc(c[b+68>>2]|0)|0;gc(c[b+72>>2]|0)|0;gc(c[b+76>>2]|0)|0;gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;gc(c[b+116>>2]|0)|0;gc(c[b+120>>2]|0)|0;gc(c[b+124>>2]|0)|0;gc(c[b+128>>2]|0)|0;gc(c[b+132>>2]|0)|0;gc(c[b+136>>2]|0)|0;gc(c[b+140>>2]|0)|0;gc(c[b+144>>2]|0)|0;gc(c[b+148>>2]|0)|0;gc(c[b+152>>2]|0)|0;gc(c[b+156>>2]|0)|0;b=c[a+244>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+220>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+224>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+40>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+44>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);d=c[a+36>>2]|0;Wa[c[(c[d>>2]|0)+8>>2]&127](d)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Eq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;d=Ra;Ra=Ra+48|0;e=d;b=d+44|0;c[b>>2]=0;h=c[a+16>>2]|0;f=c[a+12>>2]|0;g=c[a+20>>2]|0;i=(c[a+40>>2]|0)==0?59952:54718;c[e>>2]=h;c[e+4>>2]=g;c[e+8>>2]=h;c[e+12>>2]=g;c[e+16>>2]=h;c[e+20>>2]=g;c[e+24>>2]=h;c[e+28>>2]=g;c[e+32>>2]=i;c[e+36>>2]=h;c[e+40>>2]=g;_q(b,f,54532,e);b=c[b>>2]|0;if(b|0){i=b;Ra=d;return i|0}Dq(a)|0;i=0;Ra=d;return i|0}function Fq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;do if(!(mb()|0)){if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](96)|0;c[b>>2]=a;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](96)|0;if((c[14985]|0)>>>0<96)c[14985]=96;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a)break;d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d;c[b>>2]=a}d=a+96|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(d|0));f=0;return f|0}while(0);c[b>>2]=0;f=7;return f|0}function Gq(a){a=a|0;var b=0;$q(a);if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Hq(f,h,i,j,k){f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;K=Ra;Ra=Ra+128|0;I=K+104|0;E=K+96|0;F=K+64|0;w=K+56|0;v=K+48|0;z=K+40|0;A=K;B=K+116|0;x=K+112|0;y=K+108|0;G=c[f>>2]|0;r=h&65535;if(!r){j=0;J=0}else{j=1;J=c[k>>2]|0}if(!(h&65536)){t=0;s=0}else{s=c[k+(j<<2)>>2]|0;t=s;j=j+1|0}if(!(h&131072)){D=0;o=0}else{o=c[k+(j<<2)>>2]|0;D=o;j=j+1|0}if(!(h&262144)){C=0;p=0}else{p=c[k+(j<<2)>>2]|0;C=p}$q(f);do if(D){n=D+8|0;j=b[n>>1]|0;u=j&31;k=d[816+u>>0]|0;if((u|16|0)==18){j=a[D+10>>0]|0;k=D+16|0;m=D+12|0;if(!(Lg(c[k>>2]|0,z,c[m>>2]|0,j)|0))j=b[n>>1]|0;else{if(!(Og(c[k>>2]|0,A,c[m>>2]|0,j)|0)){q=A;u=c[q+4>>2]|0;j=D;c[j>>2]=c[q>>2];c[j+4>>2]=u;j=4}else{g[D>>3]=+g[z>>3];j=8}j=b[n>>1]&-3|j;b[n>>1]=j}k=d[816+(j&31)>>0]|0}if((k|0)==1){j=j&65535;if(j&4|0){k=o;j=c[k>>2]|0;k=c[k+4>>2]|0;break}if(j&8|0){j=Mg(+g[D>>3])|0;k=L()|0;break}if(!(j&18)){j=0;k=0}else{j=Ng(a[D+10>>0]|0,c[D+12>>2]|0,c[D+16>>2]|0)|0;k=L()|0}}else{j=0;k=-2147483648}}else{j=0;k=-2147483648}while(0);u=f+72|0;q=u;c[q>>2]=j;c[q+4>>2]=k;do if(C){n=C+8|0;j=b[n>>1]|0;q=j&31;k=d[816+q>>0]|0;if((q|16|0)==18){j=a[C+10>>0]|0;k=C+16|0;m=C+12|0;if(!(Lg(c[k>>2]|0,z,c[m>>2]|0,j)|0))j=b[n>>1]|0;else{if(!(Og(c[k>>2]|0,A,c[m>>2]|0,j)|0)){o=A;q=c[o+4>>2]|0;j=C;c[j>>2]=c[o>>2];c[j+4>>2]=q;j=4}else{g[C>>3]=+g[z>>3];j=8}j=b[n>>1]&-3|j;b[n>>1]=j}k=d[816+(j&31)>>0]|0}if((k|0)==1){j=j&65535;if(j&4|0){k=p;j=c[k>>2]|0;k=c[k+4>>2]|0;break}if(j&8|0){j=Mg(+g[C>>3])|0;k=L()|0;break}if(!(j&18)){j=0;k=0}else{j=Ng(a[C+10>>0]|0,c[C+12>>2]|0,c[C+16>>2]|0)|0;k=L()|0}}else{j=-1;k=2147483647}}else{j=-1;k=2147483647}while(0);q=f+80|0;p=q;c[p>>2]=j;c[p+4>>2]=k;if(!i)j=a[G+235>>0]|0;else j=(a[i>>0]|0)==68&1;a[f+52>>0]=j;h=h&65535;b[f+4>>1]=h;do if(r>>>0>1){o=r+-2|0;k=J+8|0;do if(J){j=b[k>>1]|0;if((j&514)==514?(a[J+10>>0]|0)==1:0)j=c[J+16>>2]|0;else{if(j&1){H=52;break}j=Gg(J,1)|0}if(j){p=j;m=0}else H=52}else H=52;while(0);if((H|0)==52)if(!(-1431655766>>>(b[k>>1]&31)&1)){f=7;Ra=K;return f|0}else{p=0;m=1}k=f+20|0;c[k>>2]=0;if(!t)j=0;else{j=e[t+8>>1]|0;do if(!(j&4)){if(j&8|0){j=Mg(+g[t>>3])|0;L()|0;break}if(!(j&18))j=0;else{j=Ng(a[t+10>>0]|0,c[t+12>>2]|0,c[t+16>>2]|0)|0;L()|0}}else j=c[s>>2]|0;while(0);c[k>>2]=j}k=c[G+36>>2]|0;r=c[G+28>>2]|0;t=d[G+232>>0]|0;s=c[G+24>>2]|0;i=f+16|0;n=G+8|0;M=A+24|0;c[M>>2]=0;c[M+4>>2]=0;c[M+8>>2]=0;c[A>>2]=k;c[A+4>>2]=j;c[A+8>>2]=r;c[A+16>>2]=s;c[A+20>>2]=o;c[A+12>>2]=t;a:do if(m){c[i>>2]=0;j=0}else{j=er(A,p,Eu(p)|0,i,z)|0;do if(!j){j=c[i>>2]|0;if(c[A+32>>2]|0){ar(j);c[i>>2]=0;break}if(!j){j=0;break a}j=cr(i,12)|0;if(!j){j=c[i>>2]|0;k=dr(j,12)|0;if(!k)break a;else{l=k;H=70}}else{l=j;H=70}}else{l=j;H=70}while(0);b:do if((H|0)==70){ar(c[i>>2]|0);c[i>>2]=0;switch(l|0){case 1:break b;case 18:break;default:{M=l;Ra=K;return M|0}}c[v>>2]=12;Wp(n,54811,v);M=1;Ra=K;return M|0}while(0);c[w>>2]=p;Wp(n,54863,w);M=1;Ra=K;return M|0}while(0);M=c[f>>2]|0;c[z>>2]=0;c[A>>2]=0;c[B>>2]=0;fr(f,j,A,B,z);j=c[A>>2]|0;do if((c[z>>2]|0)==0&(j|0)>1?a[M+232>>0]|0:0){k=pb((c[B>>2]<<3)+(j*24|0)|0,0)|0;m=k+((c[A>>2]|0)*24|0)|0;if(!k){c[z>>2]=7;break}c[x>>2]=k;c[y>>2]=m;gr(f,0,c[i>>2]|0,x,y,z);j=((c[x>>2]|0)-k|0)/24|0;c[A>>2]=j;c[B>>2]=(c[y>>2]|0)-m>>2;if((c[z>>2]|0)==0?(M=hr(f,0,k,j)|0,c[z>>2]=M,(M|0)==0&(c[B>>2]|0)>0):0){j=0;do{M=hr(f,c[m+(j<<2)>>2]|0,k,c[A>>2]|0)|0;c[z>>2]=M;j=j+1|0}while((M|0)==0?(j|0)<(c[B>>2]|0):0)}if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{M=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while(0);ir(f,c[i>>2]|0,z);j=c[z>>2]|0;k=G+248|0;m=c[k>>2]|0;do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(n|0){if(c[n+480>>2]|0){Xd(n,m);break}M=m;if((c[n+304>>2]|0)>>>0<=M>>>0?(c[n+308>>2]|0)>>>0>M>>>0:0){M=n+300|0;c[m>>2]=c[M>>2];c[M>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{M=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[k>>2]=0;if(!j){c[f+40>>2]=c[f+44>>2];M=f+32|0;c[M>>2]=0;c[M+4>>2]=0;break}else{M=j;Ra=K;return M|0}}while(0);c:do switch(h<<16>>16){case 0:{l=c[G+220>>2]|0;if((D|0)!=0|(C|0)!=0){H=u;E=c[H>>2]|0;H=c[H+4>>2]|0;J=q;I=c[J>>2]|0;J=c[J+4>>2]|0;j=(a[f+52>>0]|0)==0?54528:54523;c[F>>2]=l;M=F+8|0;c[M>>2]=E;c[M+4>>2]=H;M=F+16|0;c[M>>2]=I;c[M+4>>2]=J;c[F+24>>2]=j;j=Bb(54721,F)|0}else{j=(a[f+52>>0]|0)==0?54528:54523;c[E>>2]=l;c[E+4>>2]=j;j=Bb(54783,E)|0}if(!j){M=7;Ra=K;return M|0}l=qd(c[G+12>>2]|0,j,-1,129,0,f+12|0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);H=116;break c}else{H=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);H=116;break c}}case 1:{m=f+12|0;l=c[m>>2]|0;if(!l){k=c[f>>2]|0;j=k+216|0;l=c[j>>2]|0;do if(!l){c[I>>2]=c[k+220>>2];j=Bb(54912,I)|0;if(!j){M=7;Ra=K;return M|0}l=qd(c[k+12>>2]|0,j,-1,129,0,m,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{M=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}if(!l){l=c[m>>2]|0;break}else{M=l;Ra=K;return M|0}}else{c[m>>2]=l;c[j>>2]=0}while(0);a[f+8>>0]=1}l=Yc(l,1,J)|0;H=116;break}default:{}}while(0);if((H|0)==116?l|0:0){M=l;Ra=K;return M|0}M=Iq(f)|0;Ra=K;return M|0}function Iq(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=Ra;Ra=Ra+16|0;d=q;if((e[b+4>>1]|0)<2){d=b+12|0;if((Gc(c[d>>2]|0)|0)==100){o=Oc(c[d>>2]|0,0)|0;p=L()|0;b=b+32|0;c[b>>2]=o;c[b+4>>2]=p;b=0;Ra=q;return b|0}a[b+6>>0]=1;g=c[d>>2]|0;if(!g){b=0;Ra=q;return b|0}d=c[g>>2]|0;b=g+136|0;p=c[b+4>>2]|0;if((p|0)>0|(p|0)==0&(c[b>>2]|0)>>>0>0)hc(d,g);f=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;b=g+64|0;c[b>>2]=0;c[b+4>>2]=0;if((f|0)==3082|(a[d+81>>0]|0)!=0){og(d);b=7;Ra=q;return b|0}else{b=c[d+68>>2]&f;Ra=q;return b|0}}c[d>>2]=0;f=c[b+16>>2]|0;if(f){g=b+7|0;h=b+12|0;i=f+32|0;j=b+6|0;k=b+88|0;l=f+24|0;o=b+32|0;do{if((a[g>>0]|0)==0?(m=c[h>>2]|0,m|0):0){n=c[m>>2]|0;r=m+136|0;s=c[r+4>>2]|0;if((s|0)>0|(s|0)==0&(c[r>>2]|0)>>>0>0)hc(n,m);s=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;r=m+64|0;c[r>>2]=0;c[r+4>>2]=0;if((s|0)==3082|(a[n+81>>0]|0)!=0)og(n)}qr(b,f,d);s=a[i>>0]|0;a[j>>0]=s;a[g>>0]=1;c[k>>2]=1;t=l;n=c[t+4>>2]|0;r=o;c[r>>2]=c[t>>2];c[r+4>>2]=n;if(s<<24>>24)break}while((rr(b,d)|0)!=0);d=c[d>>2]|0;if(!d){d=o;p=22}}else{a[b+6>>0]=1;d=b+32|0;p=22}do if((p|0)==22){f=d;d=c[f>>2]|0;f=c[f+4>>2]|0;if(!(a[b+52>>0]|0)){t=b+80|0;s=c[t+4>>2]|0;if(!((f|0)>(s|0)|((f|0)==(s|0)?d>>>0>(c[t>>2]|0)>>>0:0))){d=0;break}}else{t=b+72|0;s=c[t+4>>2]|0;if(!((f|0)<(s|0)|((f|0)==(s|0)?d>>>0<(c[t>>2]|0)>>>0:0))){d=0;break}}a[b+6>>0]=1;d=0}while(0);t=d;Ra=q;return t|0}function Jq(b){b=b|0;var c=0;c=b+6|0;if(!(a[c>>0]|0)){c=0;return c|0}$q(b);a[c>>0]=1;c=1;return c|0}function Kq(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=c[d>>2]|0;i=c[h+24>>2]|0;switch(g-i|0){case 0:{g=c[f>>2]|0;h=g+8|0;if(!((b[h>>1]&9216)==0?!(c[g+24>>2]|0):0))Cg(g);c[g>>2]=54938;c[g+16>>2]=d;b[h>>1]=-31231;a[g+11>>0]=112;c[g+36>>2]=97;f=0;return f|0}case 1:{d=d+32|0;i=c[d>>2]|0;d=c[d+4>>2]|0;g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=i;c[f+4>>2]=d;b[h>>1]=4;f=0;return f|0}else{Pg(g,i,d);f=0;return f|0}}case 2:{if(c[d+16>>2]|0){i=c[d+20>>2]|0;d=((i|0)<0)<<31>>31;g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=i;c[f+4>>2]=d;b[h>>1]=4;f=0;return f|0}else{Pg(g,i,d);f=0;return f|0}}if(!(c[h+44>>2]|0)){g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=0;c[f+4>>2]=0;b[h>>1]=4;f=0;return f|0}else{Pg(g,0,0);f=0;return f|0}}break}default:i=g}g=ur(0,d)|0;if(g|0){f=g;return f|0}k=c[d+12>>2]|0;j=(k|0)==0;if(!j?(c[k+120>>2]|0)!=0:0)g=(e[k+144>>1]|0)+-1|0;else g=-1;if((g|0)<=(i|0)){f=0;return f|0}g=i+1|0;do if(j)d=29576;else{h=c[k+120>>2]|0;if(h|0?g>>>0<(e[k+144>>1]|0)>>>0:0){d=h+(g*40|0)|0;break}d=c[k>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);g=d+8|0;h=e[g>>1]|0;if(h&2048|0)b[g>>1]=h&59391|4096;if(!j){h=c[k>>2]|0;i=k+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g}Dc(f,d);f=0;return f|0}function Lq(a,b){a=a|0;b=b|0;var d=0;d=a+32|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Mq(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;ca=Ra;Ra=Ra+160|0;q=ca+48|0;E=ca+40|0;D=ca+32|0;C=ca+24|0;Z=ca+16|0;y=ca+8|0;u=ca;O=ca+136|0;$=ca+80|0;W=ca+72|0;X=ca+68|0;Y=ca+64|0;ba=ca+60|0;z=ca+56|0;c[ba>>2]=0;c[z>>2]=0;x=(h|0)>1;a:do if(x){_=f+24|0;h=c[_>>2]|0;if(-1431655766>>>(b[(c[i>>2]|0)+8>>1]&31)&1|0?(p=c[i+(h+2<<2)>>2]|0,o=p+8|0,k=b[o>>1]|0,(-1431655766>>>(k&31)&1|0)==0):0){do if(p){if((k&514)==514?(a[p+10>>0]|0)==1:0){q=c[p+16>>2]|0;break}if(!(k&1)){q=Gg(p,1)|0;k=b[o>>1]|0}else q=0}else q=0;while(0);if((k&2)!=0?(a[p+10>>0]|0)==1:0)h=c[p+12>>2]|0;else aa=14;do if((aa|0)==14){k=k&65535;if(!(k&16)){if(k&1|0){h=0;break}h=Fg(p,1)|0;break}else{h=c[p+12>>2]|0;if(!(k&16384))break;h=(c[p>>2]|0)+h|0;break}}while(0);b:do if(!q)k=7;else{c:do switch(h|0){case 8:{o=a[q>>0]|0;d:do if(!(o<<24>>24)){k=37598;aa=22}else{_=o&255;k=208+_|0;do if((_|32|0)==111){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=37599;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==112){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=37600;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==116){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=37601;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==105){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=37602;aa=22;break d}k=k&255;if((k|32|0)!=109){n=109;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=37603;aa=22;break d}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=37604;aa=22;break d}k=k&255;if((k|32|0)!=122){n=122;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=37605;aa=22;break d}k=k&255;if((k|32|0)==101)break d;else{n=101;k=208+k|0}}else n=105}else n=116}else n=112}else n=111;while(0);t=d[k>>0]|0;aa=26}while(0);if((aa|0)==22){t=0;n=a[208+(d[k>>0]|0)>>0]|0;aa=26}if((aa|0)==26?(t|0)!=(n&255|0):0)break c;k=Dr(f,0)|0;break b}case 7:{o=a[q>>0]|0;e:do if(!(o<<24>>24)){k=54949;aa=29}else{Z=o&255;k=208+Z|0;do if((Z|32|0)==114){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54950;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==101){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54951;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==98){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54952;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==117){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54953;aa=29;break e}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54954;aa=29;break e}k=k&255;if((k|32|0)!=108){n=108;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54955;aa=29;break e}k=k&255;if((k|32|0)==100)break e;else{n=100;k=208+k|0}}else n=117}else n=98}else n=101}else n=114;while(0);s=d[k>>0]|0;r=n;aa=33}while(0);if((aa|0)==29){s=0;r=a[208+(d[k>>0]|0)>>0]|0;aa=33}if((aa|0)==33?(s|0)!=(r&255|0):0)break c;k=Lr(f,0)|0;c[O>>2]=k;if(!k){c[$>>2]=0;c[u>>2]=c[f+220>>2];k=Bb(55001,u)|0;do if(k){l=qd(c[f+12>>2]|0,k,-1,128,0,$,0)|0;c[O>>2]=l;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{Z=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}if(!l){k=c[_>>2]|0;k=Yv(k|0,((k|0)<0)<<31>>31|0,12,0)|0;k=Sv(k|0,L()|0,12,0)|0;C=pb(k,L()|0)|0;if(!C){c[O>>2]=7;n=0;m=0;l=0;k=0;break}gw(C|0,0,k|0)|0;l=(c[_>>2]|0)+1|0;m=C+(l<<2)|0;l=m+(l<<2)|0;w=f+44|0;x=f+272|0;y=f+284|0;j=f+280|0;i=f+234|0;z=f+32|0;A=f+264|0;B=f+260|0;n=0;v=c[$>>2]|0;while(1){if((Gc(v)|0)!=100){aa=89;break}if(!(c[w>>2]|0))u=0;else u=Nc(v,(c[_>>2]|0)+1|0)|0;o=Oc(v,0)|0;p=L()|0;h=x;k=c[h>>2]|0;h=c[h+4>>2]|0;do if(!((h|0)>(p|0)|(h|0)==(p|0)&k>>>0>o>>>0)){if((k|0)==(o|0)&(h|0)==(p|0)?(c[y>>2]|0)==0:0){aa=52;break}if((c[j>>2]|0)!=(u|0)){aa=52;break}if((c[A>>2]|0)<=(c[B>>2]|0))aa=53;else aa=52}else aa=52;while(0);if((aa|0)==52){aa=0;k=Sr(f)|0;if(!k)aa=53}if((aa|0)==53){aa=0;k=x;c[k>>2]=o;c[k+4>>2]=p;c[j>>2]=u;c[y>>2]=0;k=0}c[O>>2]=k;gw(C|0,0,(c[_>>2]<<2)+4|0)|0;f:do if(!k){r=v+120|0;s=v+144|0;t=v+40|0;g:do if(!v){k=c[_>>2]|0;if((k|0)<=0)break;o=c[z>>2]|0;h=0;do{if(!(a[o+h>>0]|0)){c[C+(h<<2)>>2]=0;k=c[_>>2]|0}h=h+1|0}while((h|0)<(k|0))}else{q=0;do{if((q|0)>=(c[_>>2]|0))break g;p=q;q=q+1|0;if(!(a[(c[z>>2]|0)+p>>0]|0)){k=c[r>>2]|0;do if(!k)aa=66;else{if(q>>>0>=(e[s>>1]|0)>>>0){aa=66;break}k=k+(q*40|0)|0}while(0);if((aa|0)==66){aa=0;k=c[v>>2]|0;c[k+64>>2]=25;Ne(k,25);k=29576}h=b[k+8>>1]|0;do if((h&514)==514){if((a[k+10>>0]|0)!=1){aa=71;break}o=c[k+16>>2]|0}else aa=71;while(0);do if((aa|0)==71){aa=0;if(h&1){o=0;break}o=Gg(k,1)|0}while(0);k=c[v>>2]|0;h=c[t>>2]|0;if((h|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7}else k=c[k+68>>2]&h;c[t>>2]=k;k=Mr(f,u,o,p,C+(p<<2)|0)|0;Y=Lc(v,q)|0;Z=C+(c[_>>2]<<2)|0;c[Z>>2]=(c[Z>>2]|0)+Y}else k=0}while(!(k|0));c[O>>2]=k;break f}while(0);c[O>>2]=0;k=0}while(0);if(a[i>>0]|0){Br(O,f,C);k=c[O>>2]|0}h=(k|0)==0;do if(h){n=n+1|0;if((c[_>>2]|0)<0){k=v;break}k=0;while(1){aa=m+(k<<2)|0;c[aa>>2]=(c[aa>>2]|0)+(c[C+(k<<2)>>2]|0);if((k|0)<(c[_>>2]|0))k=k+1|0;else{k=v;break}}}else{gc(v)|0;k=0}while(0);if(h)v=k;else{aa=88;break}}if((aa|0)==88){c[$>>2]=k;k=C;break}else if((aa|0)==89){c[$>>2]=v;k=C;break}}else{n=0;m=0;l=0;k=0}}else{c[O>>2]=7;n=0;m=0;l=0;k=0}while(0);if(a[f+232>>0]|0)Cr(O,f,m,l,n);do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{_=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-_;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);k=c[$>>2]|0;if(k){k=gc(k)|0;l=c[O>>2]|0;if(!l)c[O>>2]=k;else k=l}else k=c[O>>2]|0}break b}case 15:{o=a[q>>0]|0;h:do if(!(o<<24>>24)){k=54957;aa=103}else{V=o&255;k=208+V|0;do if((V|32|0)==105){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54958;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==110){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54959;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==116){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54960;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==101){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54961;aa=103;break h}k=k&255;if((k|32|0)!=103){n=103;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54962;aa=103;break h}k=k&255;if((k|32|0)!=114){n=114;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54963;aa=103;break h}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=54964;aa=103;break h}k=k&255;if((k|32|0)!=116){n=116;k=208+k|0;break}k=a[q+8>>0]|0;if(!(k<<24>>24)){k=54965;aa=103;break h}k=k&255;if((k|32|0)!=121){n=121;k=208+k|0;break}k=a[q+9>>0]|0;if(!(k<<24>>24)){k=54966;aa=103;break h}if(k<<24>>24!=45){n=45;k=208+(k&255)|0;break}k=a[q+10>>0]|0;if(!(k<<24>>24)){k=54967;aa=103;break h}k=k&255;if((k|32|0)!=99){n=99;k=208+k|0;break}k=a[q+11>>0]|0;if(!(k<<24>>24)){k=54968;aa=103;break h}k=k&255;if((k|32|0)!=104){n=104;k=208+k|0;break}k=a[q+12>>0]|0;if(!(k<<24>>24)){k=54969;aa=103;break h}k=k&255;if((k|32|0)!=101){n=101;k=208+k|0;break}k=a[q+13>>0]|0;if(!(k<<24>>24)){k=54970;aa=103;break h}k=k&255;if((k|32|0)!=99){n=99;k=208+k|0;break}k=a[q+14>>0]|0;if(!(k<<24>>24)){k=54971;aa=103;break h}k=k&255;if((k|32|0)==107)break h;else{n=107;k=208+k|0}}else n=101}else n=116}else n=110}else n=105;while(0);w=d[k>>0]|0;v=n;aa=107}while(0);if((aa|0)==103){w=0;v=a[208+(d[k>>0]|0)>>0]|0;aa=107}if((aa|0)==107?(w|0)!=(v&255|0):0)break c;l=f+164|0;k=c[l>>2]|0;c[O>>2]=k;do if(!k){k=c[f+20>>2]|0;c[y>>2]=c[f+16>>2];c[y+4>>2]=k;k=Bb(52546,y)|0;if(!k){h=7;n=0;m=0;l=0;k=0;break}h=qd(c[f+12>>2]|0,k,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{V=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-V;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[O>>2]|0;c[l>>2]=k;if(!h)aa=116;else{n=0;m=0;l=0;k=0}}else aa=116;while(0);if((aa|0)==116){N=k;l=c[f+280>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(N,1)|0)){n=c[N+100>>2]|0;h=n+8|0;if(!(b[h>>1]&9216)){V=n;c[V>>2]=l;c[V+4>>2]=m;b[h>>1]=4;break}else{Pg(n,l,m);break}}while(0);V=f+252|0;l=c[V>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(N,2)|0)){h=c[N+100>>2]|0;n=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){U=n;c[U>>2]=l;c[U+4>>2]=m;b[h>>1]=4;break}else{Pg(n,l,m);break}}while(0);E=O+12|0;F=$+12|0;G=$+4|0;H=$+16|0;I=$+48|0;J=$+52|0;K=$+40|0;M=$+44|0;n=0;l=0;while(1){if((Gc(N)|0)!=100){m=0;o=1;U=l;break}C=Nc(N,0)|0;if((c[V>>2]|0)>0){D=((C|0)<0)<<31>>31;B=0;do{c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[E>>2]=19;m=$;h=m+56|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(h|0));m=Xp(f,C,B,-2,0,0,0,1,$)|0;do if(!m){c[F>>2]=O;m=eq(f,$,0,0)|0;if(m|0){v=0;o=0;break}m=gq(f,$)|0;if((m|0)!=100){v=0;o=0;break}h=0;o=0;do{t=c[I>>2]|0;s=c[J>>2]|0;A=t+s|0;p=a[t>>0]|0;m=p&255;do if(!(m&128)){q=1;m=p&255;r=0}else{U=d[t+1>>0]|0;m=U<<7|m&127;if(!(U&128)){q=2;r=0;break}U=d[t+2>>0]|0;m=U<<14|m&16383;if(!(U&128)){q=3;r=0;break}U=d[t+3>>0]|0;m=U<<21|m&2097151;if(!(U&128)){q=4;r=0;break}p=28;q=t+4|0;m=m&268435455;r=0;do{U=q;q=q+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,p|0)|0;m=Sv(T|0,L()|0,m|0,r|0)|0;r=L()|0;p=p+7|0}while(p>>>0<64&((U&128|0)!=0|0!=0));q=q-t|0}while(0);if((q|0)<(s|0)){j=c[K>>2]|0;i=c[M>>2]|0;z=(i|0)>0;y=t+q|0;p=0;w=0;x=0;while(1){s=a[y>>0]|0;q=s&255;do if(!(q&128)){v=1;u=0;t=s&255}else{U=d[y+1>>0]|0;q=U<<7|q&127;if(!(U&128)){v=2;u=0;t=q;break}U=d[y+2>>0]|0;q=U<<14|q&16383;if(!(U&128)){v=3;u=0;t=q;break}U=d[y+3>>0]|0;t=U<<21|q&2097151;if(!(U&128)){v=4;u=0;break}q=28;s=y+4|0;t=t&268435455;u=0;do{U=s;s=s+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,q|0)|0;t=Sv(T|0,L()|0,t|0,u|0)|0;u=L()|0;q=q+7|0}while(q>>>0<64&((U&128|0)!=0|0!=0));v=s-y|0}while(0);y=y+v|0;do if(y>>>0<A>>>0){if(!(u>>>0<0|(u|0)==0&t>>>0<2)){v=Sv(w|0,x|0,-2,-1)|0;u=Sv(v|0,L()|0,t|0,u|0)|0;v=L()|0;q=cw(m|0,r|0,3)|0;T=L()|0;U=Sv(m|0,r|0,C|0,D|0)|0;T=Sv(U|0,L()|0,q|0,T|0)|0;q=L()|0;U=cw(T|0,q|0,3)|0;s=L()|0;q=Sv(T|0,q|0,B|0,0)|0;s=Sv(q|0,L()|0,U|0,s|0)|0;U=L()|0;q=cw(s|0,U|0,3)|0;T=L()|0;U=Sv(s|0,U|0,p|0,((p|0)<0)<<31>>31|0)|0;T=Sv(U|0,L()|0,q|0,T|0)|0;q=L()|0;U=aw(0,u|0,32)|0;s=L()|0;q=Yv(T|0,q|0,9,0)|0;q=Sv(U|0,s|0,q|0,L()|0)|0;s=L()|0;if(z){t=0;do{U=a[j+t>>0]|0;q=Yv(q|0,s|0,9,0)|0;q=Sv(q|0,L()|0,U|0,((U|0)<0)<<31>>31|0)|0;s=L()|0;t=t+1|0}while((t|0)!=(i|0))}t=y;h=q^h;o=s^o;s=u;q=v;break}s=a[y>>0]|0;p=s&255;q=(p&128|0)==0;if(!((t|0)==0&(u|0)==0)){do if(q)q=1;else{U=d[y+1>>0]|0;p=U<<7|p&127;if(!(U&128)){q=2;break}U=d[y+2>>0]|0;p=U<<14|p&16383;if(!(U&128)){q=3;break}U=d[y+3>>0]|0;p=U<<21|p&2097151;if(!(U&128)){q=4;break}s=28;t=y+4|0;p=p&268435455;q=0;do{U=t;t=t+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,s|0)|0;p=Sv(T|0,L()|0,p|0,q|0)|0;q=L()|0;s=s+7|0}while(s>>>0<64&((U&128|0)!=0|0!=0));q=t-y|0}while(0);t=y+q|0;s=0;q=0;break}do if(q){t=1;p=s&255;q=0}else{U=d[y+1>>0]|0;p=U<<7|p&127;if(!(U&128)){t=2;q=0;break}U=d[y+2>>0]|0;p=U<<14|p&16383;if(!(U&128)){t=3;q=0;break}U=d[y+3>>0]|0;p=U<<21|p&2097151;if(!(U&128)){t=4;q=0;break}s=28;t=y+4|0;p=p&268435455;q=0;do{U=t;t=t+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,s|0)|0;p=Sv(T|0,L()|0,p|0,q|0)|0;q=L()|0;s=s+7|0}while(s>>>0<64&((U&128|0)!=0|0!=0));t=t-y|0}while(0);m=Sv(p|0,q|0,m|0,r|0)|0;t=y+t|0;p=0;r=L()|0;s=0;q=0}else{t=y;s=w;q=x}while(0);if(t>>>0<A>>>0){y=t;w=s;x=q}else break}}m=gq(f,$)|0}while((m|0)==100);v=h}else{v=0;o=0}while(0);t=c[G>>2]|0;u=c[$>>2]|0;if((t|0)<=0){if(u|0)aa=213}else{r=0;while(1){s=c[u+(r<<2)>>2]|0;do if(s|0){do if(!(c[s+56>>2]|0)){h=c[s+64>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(!(a[s+5>>0]|0)){h=c[s+40>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[s+52>>2]|0;i:do if(h|0){p=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;do if(p|0){if(c[p+480>>2]|0){Xd(p,h);break i}q=h;if((c[p+304>>2]|0)>>>0>q>>>0)break;if((c[p+308>>2]|0)>>>0<=q>>>0)break;aa=p+300|0;c[h>>2]=c[aa>>2];c[aa>>2]=h;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{aa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);r=r+1|0;if((r|0)==(t|0)){aa=213;break}}}do if((aa|0)==213){aa=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{U=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);h=c[H>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{U=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);n=v^n;l=o^l;B=B+1|0}while((B|0)<(c[V>>2]|0))}else m=0;if(m){o=0;U=l;break}}do if(k){k=c[N>>2]|0;T=N+136|0;S=c[T+4>>2]|0;if((S|0)>0|(S|0)==0&(c[T>>2]|0)>>>0>0)hc(k,N);l=kc(N)|0;c[N+20>>2]=770837923;c[N+36>>2]=-1;c[N+40>>2]=0;a[N+146>>0]=2;c[N+44>>2]=0;c[N+32>>2]=1;a[N+147>>0]=-1;c[N+48>>2]=0;T=N+64|0;c[T>>2]=0;c[T+4>>2]=0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);h=7;break}else{h=c[k+68>>2]&l;break}}else h=0;while(0);if(o)if(!h){T=f+36|0;m=c[c[T>>2]>>2]|0;c[O>>2]=0;c[Z>>2]=c[f+220>>2];k=Bb(55001,Z)|0;j:do if(!k){h=7;m=0;k=0;l=0}else{h=qd(c[f+12>>2]|0,k,-1,128,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}l=c[O>>2]|0;if(h|0){m=0;k=0;break}K=f+44|0;M=f+32|0;N=(l|0)==0;O=l+120|0;P=l+144|0;Q=l+40|0;R=m+20|0;S=f+256|0;J=m+16|0;m=0;k=0;do{if((Gc(l)|0)!=100){h=0;break j}h=Oc(l,0)|0;o=L()|0;if(!(c[K>>2]|0))I=0;else I=Nc(l,(c[_>>2]|0)+1|0)|0;H=Yv(h|0,o|0,9,0)|0;H=Sv(H|0,L()|0,I|0,((I|0)<0)<<31>>31|0)|0;G=L()|0;E=Yv(H|0,G|0,81,0)|0;F=L()|0;G=Yv(H|0,G|0,9,0)|0;H=L()|0;D=0;do{if((D|0)>=(c[_>>2]|0)){h=0;break}C=D;D=D+1|0;if(!(a[(c[M>>2]|0)+C>>0]|0)){k:do if(N)h=29576;else{h=c[O>>2]|0;do if(h|0){if(D>>>0>=(e[P>>1]|0)>>>0)break;h=h+(D*40|0)|0;break k}while(0);h=c[l>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);o=b[h+8>>1]|0;do if((o&514)==514){if((a[h+10>>0]|0)!=1){aa=250;break}q=c[h+16>>2]|0}else aa=250;while(0);do if((aa|0)==250){aa=0;if(o&1){q=0;break}q=Gg(h,1)|0}while(0);if(!N){h=c[l>>2]|0;o=c[Q>>2]|0;if((o|0)==3082|(a[h+81>>0]|0)!=0){og(h);h=7}else h=c[h+68>>2]&o;c[Q>>2]=h}h=Lc(l,D)|0;o=c[T>>2]|0;p=c[o>>2]|0;c[Z>>2]=0;h=Za[c[p+12>>2]&127](o,q,h,Z)|0;l:do if(!h){c[c[Z>>2]>>2]=o;do if((c[p>>2]|0)>0){h=Xa[c[p+24>>2]&255](c[Z>>2]|0,I)|0;if(!h)break;Wa[c[p+16>>2]&127](c[Z>>2]|0)|0;c[Z>>2]=0;o=0;aa=262;break l}while(0);o=c[Z>>2]|0;z=o;A=Sv(E|0,F|0,C|0,0)|0;A=Yv(A|0,L()|0,9,0)|0;B=L()|0;do{c[$>>2]=0;c[W>>2]=0;c[X>>2]=0;c[Y>>2]=0;h=$a[c[R>>2]&127](z,Z,$,W,X,Y)|0;i=(h|0)==0;do if(i){w=c[Z>>2]|0;x=c[$>>2]|0;y=c[Y>>2]|0;j=((y|0)<0)<<31>>31;p=Sv(A|0,B|0,y|0,j|0)|0;q=L()|0;if((x|0)>0){r=0;do{v=a[w+r>>0]|0;p=Yv(p|0,q|0,9,0)|0;p=Sv(p|0,L()|0,v|0,((v|0)<0)<<31>>31|0)|0;q=L()|0;r=r+1|0}while((r|0)!=(x|0))}m=p^m;k=q^k;u=c[V>>2]|0;if((u|0)<=1)break;v=c[S>>2]|0;t=1;do{s=c[v+(t*24|0)>>2]|0;if((s|0)<=(x|0)){q=Sv(G|0,H|0,t|0,0)|0;p=L()|0;r=cw(q|0,p|0,3)|0;da=L()|0;p=Sv(q|0,p|0,C|0,0)|0;da=Sv(p|0,L()|0,r|0,da|0)|0;r=L()|0;p=cw(da|0,r|0,3)|0;q=L()|0;r=Sv(da|0,r|0,y|0,j|0)|0;q=Sv(r|0,L()|0,p|0,q|0)|0;p=L()|0;if((s|0)>0){r=0;do{da=a[w+r>>0]|0;q=Yv(q|0,p|0,9,0)|0;q=Sv(q|0,L()|0,da|0,((da|0)<0)<<31>>31|0)|0;p=L()|0;r=r+1|0}while((r|0)!=(s|0))}m=q^m;k=p^k}t=t+1|0}while((t|0)!=(u|0))}while(0)}while(i)}else{o=c[Z>>2]|0;aa=262}while(0);if((aa|0)==262)aa=0;if(o|0)Wa[c[J>>2]&127](o)|0;h=(h|0)==101?0:h}else h=0}while(!(h|0))}while((h|0)==0)}while(0);gc(l)|0;l=U}else{m=0;l=U;k=0}else{h=m;m=0;l=U;k=0}}k=(h|(n|0)==(m|0)&(l|0)==(k|0)&1|0)==0?267:h;break b}default:{if((h|0)<=6){k=1;break b}o=a[q>>0]|0}}while(0);n=o<<24>>24==0;m:do if(n){k=54973;aa=287}else{da=o&255;k=208+da|0;do if((da|32|0)==109){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54974;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==101){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54975;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==114){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54976;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==103){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54977;aa=287;break m}k=k&255;if((k|32|0)!=101){m=101;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54978;aa=287;break m}if(k<<24>>24==61)break m;else{m=61;k=208+(k&255)|0}}else m=103}else m=114}else m=101}else m=109;while(0);A=d[k>>0]|0;aa=291}while(0);if((aa|0)==287){A=0;m=a[208+(d[k>>0]|0)>>0]|0;aa=291}if((aa|0)==291?(A|0)!=(m&255|0):0){if((h|0)<=10){k=1;break}n:do if(n){k=54980;aa=321}else{da=o&255;k=208+da|0;do if((da|32|0)==97){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54981;aa=321;break n}da=k&255;k=208+da|0;if((da|32|0)==117){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54982;aa=321;break n}k=k&255;if((k|32|0)!=116){l=116;k=208+k|0;break}k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54983;aa=321;break n}k=k&255;if((k|32|0)!=111){l=111;k=208+k|0;break}k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54984;aa=321;break n}k=k&255;if((k|32|0)!=109){l=109;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54985;aa=321;break n}k=k&255;if((k|32|0)!=101){l=101;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54986;aa=321;break n}k=k&255;if((k|32|0)!=114){l=114;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=54987;aa=321;break n}k=k&255;if((k|32|0)!=103){l=103;k=208+k|0;break}k=a[q+8>>0]|0;if(!(k<<24>>24)){k=54988;aa=321;break n}k=k&255;if((k|32|0)!=101){l=101;k=208+k|0;break}k=a[q+9>>0]|0;if(!(k<<24>>24)){k=54989;aa=321;break n}if(k<<24>>24==61)break n;else{l=61;k=208+(k&255)|0}}else l=117}else l=97;while(0);B=d[k>>0]|0;aa=325}while(0);if((aa|0)==321){B=0;l=a[208+(d[k>>0]|0)>>0]|0;aa=325}if((aa|0)==325?(B|0)!=(l&255|0):0){k=1;break}k=q+10|0;c[$>>2]=0;l=a[k>>0]|0;o:do if(l<<24>>24>47){n=k;k=0;m=l;l=l<<24>>24;while(1){if(!(m<<24>>24<58&(k|0)<214748363))break o;n=n+1|0;k=l+-48+(k*10|0)|0;l=a[n>>0]|0;if(l<<24>>24<=47)break;else{m=l;l=l<<24>>24}}}else k=0;while(0);n=f+48|0;c[n>>2]=(k|0)==1|(k|0)>16?8:k;l=f+233|0;if(!(a[l>>0]|0)){k=c[f+12>>2]|0;da=c[f+20>>2]|0;c[D>>2]=c[f+16>>2];c[D+4>>2]=da;_q($,k,54351,D);k=c[$>>2]|0;if(!k){a[l>>0]=1;aa=333}}else aa=333;do if((aa|0)==333){m=f+148|0;l=c[m>>2]|0;c[O>>2]=l;if(!l){l=c[f+20>>2]|0;c[E>>2]=c[f+16>>2];c[E+4>>2]=l;l=Bb(52453,E)|0;if(!l){c[$>>2]=7;k=7;break}k=qd(c[f+12>>2]|0,l,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[O>>2]|0;c[m>>2]=l;c[$>>2]=k;if(k)break}else c[$>>2]=0;h=l;do if(!(Vc(h,1)|0)){k=c[h+100>>2]|0;m=k+8|0;if(!(b[m>>1]&9216)){da=k;c[da>>2]=2;c[da+4>>2]=0;b[m>>1]=4;break}else{Pg(k,2,0);break}}while(0);m=c[n>>2]|0;n=((m|0)<0)<<31>>31;if(Vc(h,2)|0){Gc(h)|0;if(!l)k=0;else aa=351}else{l=c[h+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){da=k;c[da>>2]=m;c[da+4>>2]=n;b[l>>1]=4}else Pg(k,m,n);Gc(h)|0;aa=351}do if((aa|0)==351){k=c[h>>2]|0;da=h+136|0;_=c[da+4>>2]|0;if((_|0)>0|(_|0)==0&(c[da>>2]|0)>>>0>0)hc(k,h);l=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;da=h+64|0;c[da>>2]=0;c[da+4>>2]=0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7;break}else{k=c[k+68>>2]&l;break}}while(0);c[$>>2]=k}while(0);break}k=q+6|0;m=a[k>>0]|0;p:do if(m<<24>>24>47){l=0;n=m;m=m<<24>>24;while(1){if(!(n<<24>>24<58&(l|0)<214748363)){aa=302;break p}k=k+1|0;l=m+-48+(l*10|0)|0;m=a[k>>0]|0;if(m<<24>>24>47){n=m;m=m<<24>>24}else{aa=296;break}}}else{l=0;aa=296}while(0);q:do if((aa|0)==296){if(m<<24>>24==44){k=k+1|0;n=a[k>>0]|0;if(n<<24>>24<=47){aa=302;break}m=0;h=n;n=n<<24>>24;while(1){if(!(h<<24>>24<58&(m|0)<214748363)){aa=302;break q}k=k+1|0;m=n+-48+(m*10|0)|0;o=a[k>>0]|0;if(o<<24>>24<=47){n=m;k=o;break}else{h=o;n=o<<24>>24}}}else{n=8;k=m}if(k<<24>>24!=0|(n|0)<2)aa=302;else{c[O>>2]=0;m=f+233|0;if(!(a[m>>0]|0)){k=c[f+12>>2]|0;da=c[f+20>>2]|0;c[C>>2]=c[f+16>>2];c[C+4>>2]=da;_q(O,k,54351,C);k=c[O>>2]|0;if(!k){a[m>>0]=1;aa=306}}else aa=306;if((aa|0)==306){k=Or(f,l,n)|0;c[O>>2]=k}l=f+248|0;m=c[l>>2]|0;r:do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;do if(n|0){if(c[n+480>>2]|0){Xd(n,m);break r}h=m;if((c[n+304>>2]|0)>>>0>h>>>0)break;if((c[n+308>>2]|0)>>>0<=h>>>0)break;da=n+300|0;c[m>>2]=c[da>>2];c[da>>2]=m;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{da=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[l>>2]=0}}while(0);if((aa|0)==302){c[O>>2]=1;k=1}}while(0);c[ba>>2]=k;break}k=c[i+(h+4<<2)>>2]|0;l=e[k+8>>1]|0;do if(!(l&4)){if(l&8|0){k=Mg(+g[k>>3])|0;L()|0;break}if(!(l&18)){r=_;aa=444;break a}k=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0}else k=c[k>>2]|0;while(0);if((k|0)<0)c[ba>>2]=19;else{r=_;aa=444}}else{r=f+24|0;aa=444}while(0);do if((aa|0)==444){t=c[r>>2]|0;t=cw(t|0,((t|0)<0)<<31>>31|0,3)|0;t=Sv(t|0,L()|0,8,0)|0;t=pb(t,L()|0)|0;if(!t){c[ba>>2]=7;break}o=(c[r>>2]|0)+1|0;s=t+(o<<2)|0;gw(t|0,0,o<<3|0)|0;o=f+264|0;s:do if(!(c[o>>2]|0)){m=f+120|0;k=c[m>>2]|0;c[O>>2]=k;do if(!k){l=c[f+20>>2]|0;c[q>>2]=c[f+16>>2];c[q+4>>2]=l;l=Bb(52138,q)|0;if(!l){k=7;break}k=qd(c[f+12>>2]|0,l,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[O>>2]|0;c[m>>2]=l;if(!k){k=l;aa=455}}else aa=455;while(0);do if((aa|0)==455){m=k;Vc(m,1)|0;Gc(m)|0;if(!k){aa=461;break s}k=c[m>>2]|0;da=m+136|0;$=c[da+4>>2]|0;if(($|0)>0|($|0)==0&(c[da>>2]|0)>>>0>0)hc(k,m);l=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;da=m+64|0;c[da>>2]=0;c[da+4>>2]=0;if(!((l|0)==3082|(a[k+81>>0]|0)!=0)){da=c[k+68>>2]&l;c[ba>>2]=da;if(!da){aa=463;break s}else break s}else{og(k);k=7;break}}while(0);c[ba>>2]=k}else aa=461;while(0);if((aa|0)==461){c[ba>>2]=0;aa=463}t:do if((aa|0)==463){do if(x?(c[f+40>>2]|0)==0:0){k=c[i+((c[r>>2]|0)+3<<2)>>2]|0;n=k+8|0;l=b[n>>1]|0;m=-1431655766>>>(l&31);if(m&1){k=c[i+4>>2]|0;n=k+8|0;l=b[n>>1]|0;m=-1431655766>>>(l&31)}if(!(m&1)){h=c[i>>2]|0;m=b[h+8>>1]|0;if(!(-1431655766>>>(m&31)&1)){m=m&65535;do if(!(m&4)){if(m&8|0){n=Mg(+g[h>>3])|0;h=L()|0;break}if(!(m&18)){n=0;h=0}else{da=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;h=L()|0;l=b[n>>1]|0;n=da}}else{n=c[h>>2]|0;h=c[h+4>>2]|0}while(0);l=l&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[k>>3])|0;m=L()|0;break}if(!(l&18)){l=0;m=0}else{l=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;m=L()|0}}else{m=k;l=c[m>>2]|0;m=c[m+4>>2]|0}while(0);if((n|0)==(l|0)&(h|0)==(m|0)){m=0;break}}if((a[(c[f+12>>2]|0)+86>>0]|0)==5){l=0;k=zr(f,k,z,t)|0}else{l=1;k=Ar(f,i,j)|0}c[ba>>2]=k;if(!k)m=l;else break t}else m=0}else m=0;while(0);k=c[i>>2]|0;if(!(-1431655766>>>(b[k+8>>1]&31)&1)){k=zr(f,k,z,t)|0;c[ba>>2]=k}else k=0;if(x&(k|0)==0){k=c[i+((c[r>>2]|0)+4<<2)>>2]|0;l=e[k+8>>1]|0;do if(!(l&4)){if(l&8|0){p=Mg(+g[k>>3])|0;L()|0;break}if(!(l&18))p=0;else{p=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0}}else p=c[k>>2]|0;while(0);u:do if(!m){da=Ar(f,i,j)|0;c[ba>>2]=da;switch(da|0){case 0:{aa=499;break u}case 19:break;default:break u}if(!(c[f+40>>2]|0))c[ba>>2]=267}else aa=499;while(0);v:do if((aa|0)==499){n=j;m=c[n>>2]|0;n=c[n+4>>2]|0;h=f+272|0;l=h;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!((l|0)>(n|0)|(l|0)==(n|0)&k>>>0>m>>>0)){if((k|0)==(m|0)&(l|0)==(n|0)?(c[f+284>>2]|0)==0:0){aa=504;break}k=f+280|0;if(!((c[k>>2]|0)==(p|0)?(c[o>>2]|0)<=(c[f+260>>2]|0):0))aa=504}else aa=504;while(0);do if((aa|0)==504){k=Sr(f)|0;if(!k){k=f+280|0;break}else{c[ba>>2]=k;break v}}while(0);da=h;c[da>>2]=m;c[da+4>>2]=n;c[k>>2]=p;c[f+284>>2]=0;c[ba>>2]=0;k=c[r>>2]|0;w:do if((k|0)>0){o=f+32|0;h=2;while(1){m=h+-2|0;if(!(a[(c[o>>2]|0)+m>>0]|0)){n=i+(h<<2)|0;k=c[n>>2]|0;x:do if(!k)k=0;else{l=b[k+8>>1]|0;do if((l&514)==514){if((a[k+10>>0]|0)!=1)break;k=c[k+16>>2]|0;break x}while(0);if(l&1){k=0;break}k=Gg(k,1)|0}while(0);k=Mr(f,p,k,m,s+(m<<2)|0)|0;if(k|0)break w;m=c[n>>2]|0;k=b[m+8>>1]|0;do if(!(k&2))aa=520;else{if((a[m+10>>0]|0)!=1){aa=520;break}k=c[m+12>>2]|0}while(0);do if((aa|0)==520){aa=0;l=k&65535;if(!(l&16)){if(l&1|0){k=0;break}k=Fg(m,1)|0;break}else{k=c[m+12>>2]|0;if(!(l&16384))break;k=(c[m>>2]|0)+k|0;break}}while(0);da=s+(c[r>>2]<<2)|0;c[da>>2]=(c[da>>2]|0)+k;k=c[r>>2]|0}if((h|0)>(k|0)){k=0;break}else h=h+1|0}}else k=0;while(0);c[ba>>2]=k}while(0);if(a[f+234>>0]|0)Br(ba,f,s);c[z>>2]=(c[z>>2]|0)+1}if(a[f+232>>0]|0)Cr(ba,f,s,t,c[z>>2]|0)}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{da=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);k=f+248|0;l=c[k>>2]|0;if(!l){c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}m=c[l+20>>2]|0;gc(c[l+16>>2]|0)|0;if(m|0){if(c[m+480>>2]|0){Xd(m,l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}da=l;if((c[m+304>>2]|0)>>>0<=da>>>0?(c[m+308>>2]|0)>>>0>da>>>0:0){da=m+300|0;c[l>>2]=c[da>>2];c[da>>2]=l;c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}return 0}function Nq(b){b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;d=g;c[b+52>>2]=0;f=b+233|0;if((a[f>>0]|0)!=2){f=0;Ra=g;return f|0}c[d>>2]=c[b+20>>2];e=Bb(55011,d)|0;if(!e){f=7;Ra=g;return f|0}d=Rd(c[b+12>>2]|0,c[b+16>>2]|0,e,0,0,0,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{b=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}a[f>>0]=(d|0)==0&1;f=0;Ra=g;return f|0}function Oq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;d=o;f=o+8|0;m=b+12|0;l=(c[m>>2]|0)+40|0;n=c[l>>2]|0;l=c[l+4>>2]|0;g=Sr(b)|0;a:do if(!g){j=b+52|0;if((c[j>>2]|0)>>>0>4){k=b+48|0;switch(c[k>>2]|0){case 255:case 0:{g=0;break a}default:{}}h=b+200|0;e=c[h>>2]|0;c[f>>2]=e;do if(!e){g=c[b+20>>2]|0;c[d>>2]=c[b+16>>2];c[d+4>>2]=g;d=Bb(53253,d)|0;if(!d){g=7;d=0;break}g=qd(c[m>>2]|0,d,-1,133,0,f,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[f>>2]|0;c[h>>2]=d;if(!g){e=d;i=12}else d=0}else i=12;while(0);do if((i|0)==12){g=e;if((Gc(g)|0)==100)d=Nc(g,0)|0;else d=0;if(e){e=c[g>>2]|0;i=g+136|0;h=c[i+4>>2]|0;if((h|0)>0|(h|0)==0&(c[i>>2]|0)>>>0>0)hc(e,g);f=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;i=g+64|0;c[i>>2]=0;c[i+4>>2]=0;if((f|0)==3082|(a[e+81>>0]|0)!=0){og(e);g=7;break}else{g=c[e+68>>2]&f;break}}else g=0}while(0);d=G(c[j>>2]|0,d)|0;d=((d|0)/2|0)+d|0;if((d|0)>64)g=Or(b,d,c[k>>2]|0)|0}else g=0}while(0);d=b+248|0;e=c[d>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}b=e;if((c[f+304>>2]|0)>>>0<=b>>>0?(c[f+308>>2]|0)>>>0>b>>>0:0){b=f+300|0;c[e>>2]=c[b>>2];c[b>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{b=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[d>>2]=0;m=(c[m>>2]|0)+40|0;c[m>>2]=n;c[m+4>>2]=l;Ra=o;return g|0}function Pq(a){a=a|0;return 0}function Qq(a){a=a|0;Fr(a);return 0}function Rq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(Bu(d,51022)|0)if(Bu(d,51030)|0)if(Bu(d,37598)|0)if(!(Bu(d,51038)|0))a=3;else{e=0;return e|0}else a=2;else a=1;else a=0;c[e>>2]=c[26368+(a<<3)+4>>2];e=1;return e|0}function Sq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+96|0;p=q+72|0;o=q+56|0;l=q+40|0;j=q+24|0;i=q+8|0;e=q;m=q+84|0;g=b+12|0;n=c[g>>2]|0;k=b+233|0;if((a[k>>0]|0)==2){c[e>>2]=c[b+20>>2];f=Bb(55011,e)|0;if(!f)e=7;else{e=Rd(c[g>>2]|0,c[b+16>>2]|0,f,0,0,0,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}a[k>>0]=(e|0)==0&1;h=7}}else h=7;if((h|0)==7){c[m>>2]=0;e=Sr(b)|0}c[m>>2]=e;if(!(c[b+40>>2]|0)){h=c[b+20>>2]|0;c[i>>2]=c[b+16>>2];c[i+4>>2]=h;c[i+8>>2]=d;_q(m,n,55251,i)}if(a[b+234>>0]|0){i=c[b+20>>2]|0;c[j>>2]=c[b+16>>2];c[j+4>>2]=i;c[j+8>>2]=d;_q(m,n,55304,j)}f=b+16|0;if(!(a[k>>0]|0))e=b+20|0;else{e=b+20|0;k=c[e>>2]|0;c[l>>2]=c[f>>2];c[l+4>>2]=k;c[l+8>>2]=d;_q(m,n,55357,l)}l=c[e>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=l;c[o+8>>2]=d;_q(m,n,55404,o);o=c[e>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=o;c[p+8>>2]=d;_q(m,n,55458,p);Ra=q;return c[m>>2]|0}function Tq(b,c){b=b|0;c=c|0;if(a[b+236>>0]|0){c=0;return c|0}c=Oq(b)|0;return c|0}function Uq(a,b){a=a|0;b=b|0;return 0}function Vq(a,b){a=a|0;b=b|0;Fr(a);return 0}function Wq(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0;if(!b){i=0;return i|0}i=a[b>>0]|0;g=d[208+(i&255)>>0]|0;c=g+-99|0;i=i<<24>>24==0;if(!(i|(c|0)!=0)){e=53664;f=b;do{f=f+1|0;e=e+1|0;h=a[f>>0]|0;c=(d[208+(h&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-100|0;if(!(i|(c|0)!=0)){e=55510;f=b;do{f=f+1|0;e=e+1|0;h=a[f>>0]|0;c=(d[208+(h&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}h=g+-115|0;g=i|(h|0)!=0;if(g)c=h;else{e=55518;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}if(g)c=h;else{e=55525;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}if(g){i=h;i=(i|0)==0;i=i&1;return i|0}e=31715;do{b=b+1|0;e=e+1|0;i=a[b>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0));i=(c|0)==0;i=i&1;return i|0}function Xq(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;Ia=Ra;Ra=Ra+320|0;Fa=Ia+296|0;Da=Ia+288|0;Ca=Ia+280|0;Ba=Ia+272|0;za=Ia+264|0;xa=Ia+256|0;wa=Ia+248|0;va=Ia+240|0;ua=Ia+232|0;ta=Ia+216|0;sa=Ia+200|0;ra=Ia+192|0;qa=Ia+176|0;pa=Ia+168|0;oa=Ia+160|0;na=Ia+152|0;Aa=Ia+144|0;ma=Ia+128|0;ha=Ia+120|0;ga=Ia+112|0;fa=Ia+104|0;ka=Ia+96|0;ja=Ia+80|0;ia=Ia+72|0;ea=Ia+64|0;da=Ia+56|0;W=Ia+48|0;R=Ia+40|0;O=Ia+32|0;Q=Ia+24|0;P=Ia+16|0;N=Ia+8|0;M=Ia;la=Ia+316|0;Ha=Ia+312|0;Ga=Ia+308|0;c[Ha>>2]=0;ya=(a[(c[j>>2]|0)+3>>0]|0)==52;c[Ga>>2]=0;_=j+4|0;X=Eu(c[_>>2]|0)|0;$=X+1|0;Y=j+8|0;Z=(Eu(c[Y>>2]|0)|0)+1|0;o=(i<<2)+-8|0;n=pb(o,0)|0;if((n|0)!=0?(gw(n|0,0,o|0)|0,m=pb(o,0)|0,(m|0)!=0):0){gw(m|0,0,o|0)|0;a:do if((i|0)>3){w=3;y=0;v=0;t=0;s=0;r=0;q=0;u=0;F=0;x=0;p=0;o=0;while(1){H=c[j+(w<<2)>>2]|0;do if((o|0)==0?!((H|0)==0|(Eu(H)|0)>>>0<9):0){o=a[H>>0]|0;b:do if(!(o<<24>>24)){o=53622;Ea=9}else{I=o&255;o=208+I|0;do if((I|32|0)==116){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53623;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==111){o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53624;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==107){o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53625;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==101){o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53626;Ea=9;break b}o=o&255;if((o|32|0)!=110){z=110;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53627;Ea=9;break b}o=o&255;if((o|32|0)!=105){z=105;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53628;Ea=9;break b}o=o&255;if((o|32|0)!=122){z=122;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53629;Ea=9;break b}o=o&255;if((o|32|0)==101)break b;else{z=101;o=208+o|0}}else z=101}else z=107}else z=111}else z=116;while(0);K=d[o>>0]|0;J=z;Ea=13}while(0);if((Ea|0)==9){K=0;J=a[208+(d[o>>0]|0)>>0]|0;Ea=13}if((Ea|0)==13?(Ea=0,(K|0)!=(J&255|0)):0){Ea=17;break}I=a[H+8>>0]|0;if((I&128|0)==0?(a[26208+I>>0]|0)==0:0){E=Yq(h,H+9|0,Ga,l)|0;c[Ha>>2]=E;E=y}else Ea=17}else Ea=17;while(0);c:do if((Ea|0)==17){Ea=0;d:do if(ya){o=H;e:while(1){switch(a[o>>0]|0){case 0:break d;case 61:break e;default:{}}o=o+1|0}E=o-H|0;c[M>>2]=o+1;I=Bb(31408,M)|0;if(!I){c[Ha>>2]=7;E=y;break c}o=a[I>>0]|0;switch(o<<24>>24){case 34:case 39:case 91:case 96:{C=o<<24>>24==91?93:o;z=a[I+1>>0]|0;f:do if(!(z<<24>>24))o=0;else{A=1;o=0;do{B=A+1|0;if(z<<24>>24==C<<24>>24){if((a[I+B>>0]|0)!=C<<24>>24)break f;a[I+o>>0]=C;A=A+2|0}else{a[I+o>>0]=z;A=B}o=o+1|0;z=a[I+A>>0]|0}while(z<<24>>24!=0)}while(0);a[I+o>>0]=0;break}default:{}}G=I;g:do if(!H)o=8;else{switch(E|0){case 9:{A=H;C=51038;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=36;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=38;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=0;break g}}if((Ea|0)==36){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}else if((Ea|0)==38){Ea=0;z=z&255}if((z|0)==(o&255|0)){o=0;break g}switch(E|0){case 6:{Ea=42;break}case 8:{o=E;Ea=415;break}default:{}}break}case 6:{Ea=42;break}case 8:{o=E;Ea=415;break}default:{}}if((Ea|0)==42){Ea=0;A=H;C=53631;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=412;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=410;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=1;break g}}if((Ea|0)==410){Ea=0;z=z&255}else if((Ea|0)==412){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=1;break}if((E|0)==8){o=8;Ea=415}}if((Ea|0)==415){Ea=0;B=H;C=53638;A=o;while(1){o=a[B>>0]|0;if(!(o<<24>>24)){Ea=420;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=418;break}if((A|0)>1){B=B+1|0;C=C+1|0;A=A+-1|0}else{o=2;break g}}if((Ea|0)==418){Ea=0;z=z&255}else if((Ea|0)==420){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=2;break}}D=(E|0)==10;if(D){o=a[H>>0]|0;h:do if(!(o<<24>>24)){o=53647;Ea=427}else{C=o&255;o=208+C|0;do if((C|32|0)==117){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53648;Ea=427;break h}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53649;Ea=427;break h}o=o&255;if((o|32|0)!=99){A=99;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53650;Ea=427;break h}o=o&255;if((o|32|0)!=111){A=111;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53651;Ea=427;break h}o=o&255;if((o|32|0)!=109){A=109;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53652;Ea=427;break h}o=o&255;if((o|32|0)!=112){A=112;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53653;Ea=427;break h}o=o&255;if((o|32|0)!=114){A=114;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53654;Ea=427;break h}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53655;Ea=427;break h}o=o&255;if((o|32|0)!=115){A=115;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53656;Ea=427;break h}o=o&255;if((o|32|0)==115){o=3;break g}else{A=115;o=208+o|0}}else A=117;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==427){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=3;break}}switch(E|0){case 5:{A=H;C=53658;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=435;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=433;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=4;break g}}if((Ea|0)==433){Ea=0;z=z&255}else if((Ea|0)==435){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=4;break g}if((E|0)==7){o=7;Ea=438}break}case 7:{o=E;Ea=438;break}default:{}}if((Ea|0)==438){Ea=0;B=H;C=53664;A=o;while(1){o=a[B>>0]|0;if(!(o<<24>>24)){Ea=443;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=441;break}if((A|0)>1){B=B+1|0;C=C+1|0;A=A+-1|0}else{o=5;break g}}if((Ea|0)==441){Ea=0;z=z&255}else if((Ea|0)==443){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=5;break}}if(D){o=a[H>>0]|0;i:do if(!(o<<24>>24)){o=53672;Ea=450}else{E=o&255;o=208+E|0;do if((E|32|0)==108){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53673;Ea=450;break i}o=o&255;if((o|32|0)!=97){A=97;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53674;Ea=450;break i}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53675;Ea=450;break i}o=o&255;if((o|32|0)!=103){A=103;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53676;Ea=450;break i}o=o&255;if((o|32|0)!=117){A=117;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53677;Ea=450;break i}o=o&255;if((o|32|0)!=97){A=97;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53678;Ea=450;break i}o=o&255;if((o|32|0)!=103){A=103;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53679;Ea=450;break i}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53680;Ea=450;break i}o=o&255;if((o|32|0)!=105){A=105;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53681;Ea=450;break i}o=o&255;if((o|32|0)==100){o=6;break g}else{A=100;o=208+o|0}}else A=108;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==450){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=6;break}if(D){o=a[H>>0]|0;j:do if(!(o<<24>>24)){o=53683;Ea=457}else{E=o&255;o=208+E|0;do if((E|32|0)==110){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53684;Ea=457;break j}o=o&255;if((o|32|0)!=111){A=111;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53685;Ea=457;break j}o=o&255;if((o|32|0)!=116){A=116;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53686;Ea=457;break j}o=o&255;if((o|32|0)!=105){A=105;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53687;Ea=457;break j}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53688;Ea=457;break j}o=o&255;if((o|32|0)!=100){A=100;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53689;Ea=457;break j}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53690;Ea=457;break j}o=o&255;if((o|32|0)!=120){A=120;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53691;Ea=457;break j}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53692;Ea=457;break j}o=o&255;if((o|32|0)==100){o=7;break g}else{A=100;o=208+o|0}}else A=110;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==457){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=7;break}}}o=8}while(0);k:do switch(o&15){case 0:{if((Eu(I)|0)==4){o=a[I>>0]|0;l:do if(!(o<<24>>24)){o=51048;Ea=46}else{H=o&255;o=208+H|0;do if((H|32|0)==102){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=51049;Ea=46;break l}o=o&255;if((o|32|0)!=116){z=116;o=208+o|0;break}o=a[I+2>>0]|0;if(!(o<<24>>24)){o=51050;Ea=46;break l}o=o&255;if((o|32|0)!=115){z=115;o=208+o|0;break}o=a[I+3>>0]|0;if(!(o<<24>>24)){o=51051;Ea=46;break l}if(o<<24>>24==51){y=1;o=F;break k}else{z=51;o=208+(o&255)|0}}else z=102;while(0);y=d[o>>0]|0;o=z}while(0);if((Ea|0)==46){Ea=0;y=0;o=a[208+(d[o>>0]|0)>>0]|0}if((y|0)==(o&255|0)){y=1;o=F;break k}}c[N>>2]=I;Wp(l,53694,N);c[Ha>>2]=1;y=1;o=F;break}case 1:{if(!u){E=y;u=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);E=y;u=I;break c}else{E=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);E=y;u=I;break c}}case 2:{if(!q){E=y;q=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);E=y;q=I;break c}else{E=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);E=y;q=I;break c}}case 3:{if(!r){E=y;r=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);E=y;r=I;break c}else{E=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);E=y;r=I;break c}}case 4:{m:do switch(Eu(I)|0){case 3:{B=a[I>>0]|0;do if(!(B<<24>>24)){o=53721;Ea=66}else{H=B&255;o=208+H|0;if((H|32|0)==97){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=53722;Ea=66;break}H=o&255;o=208+H|0;if((H|32|0)==115){o=a[I+2>>0]|0;if(!(o<<24>>24)){o=53723;Ea=66;break}o=o&255;if((o|32|0)==99){o=B;break m}else{A=99;o=208+o|0}}else A=115}else A=97;z=d[o>>0]|0;o=A}while(0);if((Ea|0)==66){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0))o=B;else Ea=77;break}case 4:{B=a[I>>0]|0;n:do if(!(B<<24>>24)){o=38073;Ea=72}else{H=B&255;o=208+H|0;do if((H|32|0)==100){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=38074;Ea=72;break n}H=o&255;o=208+H|0;if((H|32|0)==101){o=a[I+2>>0]|0;if(!(o<<24>>24)){o=38075;Ea=72;break n}o=o&255;if((o|32|0)!=115){A=115;o=208+o|0;break}o=a[I+3>>0]|0;if(!(o<<24>>24)){o=38076;Ea=72;break n}o=o&255;if((o|32|0)==99){o=B;break m}else{A=99;o=208+o|0}}else A=101}else A=100;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==72){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0))o=B;else Ea=77;break}default:Ea=77}while(0);if((Ea|0)==77){Ea=0;c[P>>2]=I;Wp(l,53725,P);c[Ha>>2]=1;o=a[I>>0]|0}o=(o|32)<<24>>24==100&1;break}case 5:{if(!s){E=y;s=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](s);E=y;s=I;break c}else{E=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);E=y;s=I;break c}}case 6:{if(!t){E=y;t=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);E=y;t=I;break c}else{E=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);E=y;t=I;break c}}case 7:{c[m+(v<<2)>>2]=G;E=y;v=v+1|0;break c}default:{c[Q>>2]=H;Wp(l,53748,Q);c[Ha>>2]=1;o=F}}while(0);if(!I){E=y;F=o;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);E=y;F=o;break c}else{E=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);E=y;F=o;break c}}while(0);p=p+1+(Eu(H)|0)|0;c[n+(x<<2)>>2]=H;x=x+1|0;E=y}while(0);w=w+1|0;o=c[Ha>>2]|0;y=(o|0)==0;if(!((w|0)<(i|0)&y))break;y=E;o=c[Ga>>2]|0}o:do if((s|0)!=0&y){do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Q=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Q=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);if(x|0){w=n;r=0;q=0;o=c[Ha>>2]|0;Ea=162;break}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{Q=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}o=c[_>>2]|0;c[la>>2]=0;c[O>>2]=o;c[O+4>>2]=s;o=Bb(53869,O)|0;if(o){n=qd(g,o,-1,0,0,la,0)|0;p=(n|0)==0;if(!p){Q=pd(g)|0;c[R>>2]=Q;Wp(l,31408,R)}if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{R=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}if(p){C=c[la>>2]|0;A=(C|0)==0;p:do if(!A?(T=C+144|0,S=b[T>>1]|0,U=S&65535,S<<16>>16!=0):0){y=C+116|0;o=0;q=S;x=0;n=0;while(1){w=c[C>>2]|0;do if(o>>>0<(q&65535)>>>0){p=c[y>>2]|0;q=p+(o*40|0)|0;q:do if(!q)p=0;else{r=b[p+(o*40|0)+8>>1]|0;do if((r&514)==514){if((a[p+(o*40|0)+10>>0]|0)!=1)break;p=c[p+(o*40|0)+16>>2]|0;break q}while(0);if(r&1){p=0;break}p=Gg(q,1)|0}while(0);q=w+81|0;if(!(a[q>>0]|0))break;if(c[w+180>>2]|0){p=0;break}a[q>>0]=0;c[w+264>>2]=0;p=w+272|0;c[p>>2]=(c[p>>2]|0)+-1;p=0}else p=0;while(0);p=Sv(x|0,n|0,(Eu(p)|0)+1|0,0)|0;n=L()|0;o=o+1|0;if((o|0)==(U|0)){x=U;B=p;o=0;break p}q=b[T>>1]|0;x=p}}else{x=0;B=0;n=0;o=1}while(0);D=Sv(B|0,n|0,x<<2|0,0)|0;D=pb(D,L()|0)|0;n=(D|0)==0;r:do if(o|n)o=n?7:0;else{n=D+(x<<2)|0;y=C+144|0;z=C+116|0;if(A){p=(Eu(0)|0)+1|0;o=0;while(1){ew(n|0,0,p|0)|0;c[D+(o<<2)>>2]=n;o=o+1|0;if((o|0)==(x|0)){o=0;break r}else n=n+p|0}}w=0;while(1){r=c[C>>2]|0;do if(w>>>0<(e[y>>1]|0)>>>0){o=c[z>>2]|0;p=o+(w*40|0)|0;s:do if(!p)o=0;else{q=b[o+(w*40|0)+8>>1]|0;do if((q&514)==514){if((a[o+(w*40|0)+10>>0]|0)!=1)break;o=c[o+(w*40|0)+16>>2]|0;break s}while(0);if(q&1){o=0;break}o=Gg(p,1)|0}while(0);p=r+81|0;if(!(a[p>>0]|0))break;if(c[r+180>>2]|0){o=0;break}a[p>>0]=0;c[r+264>>2]=0;o=r+272|0;c[o>>2]=(c[o>>2]|0)+-1;o=0}else o=0;while(0);p=(Eu(o)|0)+1|0;ew(n|0,o|0,p|0)|0;c[D+(w<<2)>>2]=n;w=w+1|0;if((w|0)==(x|0)){o=0;break}else n=n+p|0}}while(0);gc(C)|0;c[Ha>>2]=o;if(!((t|0)!=0&(o|0)==0)){w=D;p=B;r=0;q=0;n=D;Ea=162;break}if(!x){o=E;p=F;w=D;r=0;q=0;n=D;Ea=164;break a}n=0;while(1){p=c[D+(n<<2)>>2]|0;if(p|0){U=a[t>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0;if(!(U<<24>>24==0|(o|0)!=0)){q=t;do{q=q+1|0;p=p+1|0;U=a[q>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(U<<24>>24==0|(o|0)!=0))}if(!o)break}n=n+1|0;if(n>>>0>=x>>>0){w=D;p=B;r=0;q=0;n=D;break o}}if(n>>>0<x>>>0)do{U=n;n=n+1|0;c[D+(U<<2)>>2]=c[D+(n<<2)>>2]}while((n|0)!=(x|0));w=D;x=x+-1|0;p=B;r=0;q=0;n=D;break}}else n=7;c[Ha>>2]=n;o=0;r=0;q=0;n=0;p=0;break a}else{w=n;Ea=162}while(0);if((Ea|0)==162)if(o){o=0;p=0;break}if(!x){o=E;p=F;Ea=164}else{C=E;B=F;D=w;H=x;A=p;Ea=165}}else{o=0;v=0;t=0;s=0;u=0;p=0;w=n;r=0;q=0;Ea=164}while(0);if((Ea|0)==164){c[w>>2]=53664;C=o;B=p;D=w;H=1;A=8;Ea=165}do if((Ea|0)==165){if((c[Ga>>2]|0)==0?(h=Yq(h,50983,Ga,l)|0,c[Ha>>2]=h,h|0):0){o=0;p=0;break}x=(u|0)!=0;t:do if(x?(V=a[u>>0]|0,V<<24>>24!=0):0){w=u;o=2;p=V;while(1){switch(p<<24>>24){case 0:break t;case 44:{o=o+1|0;break}default:{}}p=w+1|0;w=p;p=a[p>>0]|0}}else o=1;while(0);p=o*24|0;O=pb(p,0)|0;u:do if(O){gw(O|0,0,p|0)|0;if(x&(o|0)>1){z=u;p=1;while(1){x=a[z>>0]|0;if((x+-48&255)>=10)break;y=z;w=0;do{w=(x<<24>>24)+-48+(w*10|0)|0;if((w|0)>1e7){w=0;break}y=y+1|0;x=a[y>>0]|0}while((x+-48&255)<10);if((y|0)==(z|0))break;if(!w){p=p+-1|0;o=o+-1|0}else c[O+(p*24|0)>>2]=w;p=p+1|0;if((p|0)>=(o|0)){p=0;Ea=185;break u}else z=y+1|0}c[Ha>>2]=1;c[W>>2]=u;Wp(l,53775,W);x=0;o=c[Ha>>2]|0}else{p=0;Ea=185}}else{o=0;p=7;Ea=185}while(0);if((Ea|0)==185){c[Ha>>2]=p;x=o;o=p}if(!o){w=x*24|0;p=X+289+Z+A+H+(H<<2)+w|0;o=pb(p,0)|0;if(!o){c[Ha>>2]=7;p=O;break}gw(o|0,0,p|0)|0;N=o+12|0;c[N>>2]=g;j=o+24|0;c[j>>2]=H;c[o+264>>2]=0;p=o+288|0;M=o+28|0;c[M>>2]=p;c[o+36>>2]=c[Ga>>2];c[o+260>>2]=1048576;I=o+234|0;a[I>>0]=ya&(C|0)==0&1;G=ya&1;K=o+233|0;a[K>>0]=G;a[o+232>>0]=G;a[o+235>>0]=B;c[o+48>>2]=255;G=o+40|0;c[G>>2]=s;i=o+44|0;c[i>>2]=t;p=p+(H<<2)|0;t=o+256|0;c[t>>2]=p;ew(p|0,O|0,w|0)|0;c[o+252>>2]=x;p=c[t>>2]|0;if((x|0)>0){s=0;do{a[p+(s*24|0)+4>>0]=1;a[p+(s*24|0)+5>>0]=1;p=p+(s*24|0)+8|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;s=s+1|0;p=c[t>>2]|0}while((s|0)!=(x|0))}p=p+(x*24|0)|0;E=o+32|0;c[E>>2]=p;p=p+H|0;J=o+20|0;c[J>>2]=p;ew(p|0,c[Y>>2]|0,Z|0)|0;p=p+Z|0;F=o+16|0;c[F>>2]=p;ew(p|0,c[_>>2]|0,$|0)|0;B=(H|0)>0;if(B){A=0;z=p+$|0;while(1){y=c[D+(A<<2)>>2]|0;v:while(1){x=a[y>>0]|0;s=x<<24>>24;switch(s|0){case 0:break v;case 96:case 34:case 39:{Ea=198;break v}case 91:{Ea=197;break v}default:{}}if(s&128|0){Ea=206;break}p=y+1|0;if(!(a[26208+s>>0]|0))y=p;else{Ea=208;break}}w:do if((Ea|0)==197){p=y;while(1){s=p+1|0;Ea=a[s>>0]|0;t=Ea<<24>>24==0;if(t^Ea<<24>>24!=93)p=s;else break}p=t?s:p+2|0;Ea=212}else if((Ea|0)==198){p=y+1|0;s=a[p>>0]|0;if(!(s<<24>>24))Ea=212;else{w=y;while(1){if(s<<24>>24==x<<24>>24){p=w+2|0;if((a[p>>0]|0)!=x<<24>>24){Ea=212;break w}}t=p+1|0;s=a[t>>0]|0;if(!(s<<24>>24)){p=t;Ea=212;break}else{w=p;p=t}}}}else if((Ea|0)==206){p=y+1|0;Ea=208}while(0);x:do if((Ea|0)==208)while(1){Ea=a[p>>0]|0;if((Ea&128|0)==0?(a[26208+Ea>>0]|0)==0:0){Ea=212;break x}p=p+1|0}while(0);if((Ea|0)==212){Ea=0;p=p-y|0;if((p|0)>0){ew(z|0,y|0,p|0)|0;s=p}else s=p}a[z+s>>0]=0;p=a[z>>0]|0;switch(p<<24>>24){case 34:case 39:case 91:case 96:{y=p<<24>>24==91?93:p;t=a[z+1>>0]|0;y:do if(!(t<<24>>24))p=0;else{w=1;p=0;do{x=w+1|0;if(t<<24>>24==y<<24>>24){if((a[z+x>>0]|0)!=y<<24>>24)break y;a[z+p>>0]=y;w=w+2|0}else{a[z+p>>0]=t;w=x}p=p+1|0;t=a[z+w>>0]|0}while(t<<24>>24!=0)}while(0);a[z+p>>0]=0;break}default:{}}c[(c[M>>2]|0)+(A<<2)>>2]=z;A=A+1|0;if((A|0)>=(H|0))break;else z=z+(s+1)|0}if(B){C=(v|0)>0;B=0;do{D=Eu(c[(c[M>>2]|0)+(B<<2)>>2]|0)|0;z:do if(C){if((D|0)<=0){p=0;while(1){s=m+(p<<2)|0;t=c[s>>2]|0;do if(t|0){if((D|0)!=(Eu(t)|0))break;if(!(c[(c[M>>2]|0)+(B<<2)>>2]|0))break;a[(c[E>>2]|0)+B>>0]=1;if(!(c[7324]|0))ab[c[29344>>2]&127](t);else{$=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t)}c[s>>2]=0}while(0);p=p+1|0;if((p|0)==(v|0))break z}}y=0;do{z=m+(y<<2)|0;A=c[z>>2]|0;do if(A|0){if((D|0)!=(Eu(A)|0))break;p=c[(c[M>>2]|0)+(B<<2)>>2]|0;if(!p)break;w=A;x=D;while(1){s=a[p>>0]|0;if(!(s<<24>>24)){Ea=238;break}s=a[208+(s&255)>>0]|0;t=a[208+(d[w>>0]|0)>>0]|0;if(s<<24>>24!=t<<24>>24){Ea=236;break}if((x|0)>1){p=p+1|0;w=w+1|0;x=x+-1|0}else break}if((Ea|0)==236){aa=s&255;ba=t;Ea=239}else if((Ea|0)==238){aa=0;ba=a[208+(d[w>>0]|0)>>0]|0;Ea=239}if((Ea|0)==239?(Ea=0,(aa|0)!=(ba&255|0)):0)break;a[(c[E>>2]|0)+B>>0]=1;if(!(c[7324]|0))ab[c[29344>>2]&127](A);else{$=Wa[c[29352>>2]&127](A)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](A)}c[z>>2]=0}while(0);y=y+1|0}while((y|0)!=(v|0))}while(0);B=B+1|0}while((B|0)<(H|0))}}if((v|0)>0){p=0;do{s=c[m+(p<<2)>>2]|0;if(s|0){c[da>>2]=s;Wp(l,44776,da);c[Ha>>2]=1}p=p+1|0}while((p|0)!=(v|0))}if((c[Ha>>2]|0)==0?(ca=(q|0)==0,ca^(r|0)==0):0){c[Ha>>2]=1;c[ea>>2]=ca?53638:53647;Wp(l,53810,ea)}c[la>>2]=0;do if(!(c[G>>2]|0)){if(r){y=((Eu(r)|0)<<1)+3|0;y=pb(y,((y|0)<0)<<31>>31)|0;if(!y){t=0;s=0}else{a[y>>0]=34;x=0;t=y;A:while(1){s=t+1|0;w=r+x|0;p=a[w>>0]|0;switch(p<<24>>24){case 0:break A;case 34:{a[s>>0]=34;s=t+2|0;p=a[w>>0]|0;break}default:{}}a[s>>0]=p;x=x+1|0;t=s}a[s>>0]=34;a[t+2>>0]=0;t=y;s=y}}else{t=59952;s=0;r=0}Zq(Ha,la,53889,ia);if((c[j>>2]|0)>0){p=0;do{ia=c[(c[M>>2]|0)+(p<<2)>>2]|0;c[ja>>2]=t;c[ja+4>>2]=p;c[ja+8>>2]=ia;Zq(Ha,la,53895,ja);p=p+1|0}while((p|0)<(c[j>>2]|0))}if(c[i>>2]|0){c[ka>>2]=53917;Zq(Ha,la,53910,ka)}if(s)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);y=r;break}else{y=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);y=r;break}else y=r}else{Zq(Ha,la,38132,fa);if((c[j>>2]|0)>0){p=0;do{c[ga>>2]=c[(c[M>>2]|0)+(p<<2)>>2];Zq(Ha,la,53924,ga);p=p+1|0}while((p|0)<(c[j>>2]|0))}p=c[i>>2]|0;if(!p)y=r;else{c[ha>>2]=p;Zq(Ha,la,53910,ha);y=r}}while(0);p=c[G>>2]|0;r=(p|0)==0;if(r)p=c[J>>2]|0;c[ma>>2]=c[F>>2];c[ma+4>>2]=p;c[ma+8>>2]=r?53956:59952;Zq(Ha,la,53933,ma);c[o+220>>2]=c[la>>2];c[ma>>2]=0;if(q){x=((Eu(q)|0)<<1)+3|0;x=pb(x,((x|0)<0)<<31>>31)|0;if(!x){s=0;r=0}else{a[x>>0]=34;w=0;s=x;B:while(1){r=s+1|0;t=q+w|0;p=a[t>>0]|0;switch(p<<24>>24){case 0:break B;case 34:{a[r>>0]=34;r=s+2|0;p=a[t>>0]|0;break}default:{}}a[r>>0]=p;w=w+1|0;s=r}a[r>>0]=34;a[s+2>>0]=0;s=x;r=x}}else{s=59952;r=0;q=0}Zq(Ha,ma,35133,Aa);if((c[j>>2]|0)>0){p=0;do{c[na>>2]=s;Zq(Ha,ma,53965,na);p=p+1|0}while((p|0)<(c[j>>2]|0))}if(c[i>>2]|0)Zq(Ha,ma,53972,oa);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{oa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);c[o+224>>2]=c[ma>>2];if(c[Ha>>2]|0){t=0;s=0;r=y;p=O;break}w=(f|0)!=0;if(w){c[Aa>>2]=0;t=c[N>>2]|0;C:do if(!(c[G>>2]|0)){s=c[i>>2]|0;p=Bb(53976,pa)|0;D:do if(p|0){r=0;while(1){if((r|0)>=(c[j>>2]|0))break;pa=c[(c[M>>2]|0)+(r<<2)>>2]|0;c[qa>>2]=p;c[qa+4>>2]=r;c[qa+8>>2]=pa;p=Bb(54002,qa)|0;if(!p)break D;else r=r+1|0}if(s){c[ra>>2]=p;c[ra+4>>2]=s;p=Bb(54014,ra)|0;if(!p)break}sa=c[J>>2]|0;c[ta>>2]=c[F>>2];c[ta+4>>2]=sa;c[ta+8>>2]=p;_q(Aa,t,54025,ta);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break C}else{ta=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break C}}while(0);c[Aa>>2]=7;ta=c[J>>2]|0;c[sa>>2]=c[F>>2];c[sa+4>>2]=ta;c[sa+8>>2]=0;_q(Aa,t,54025,sa)}while(0);ta=c[J>>2]|0;c[ua>>2]=c[F>>2];c[ua+4>>2]=ta;_q(Aa,t,54058,ua);ua=c[J>>2]|0;c[va>>2]=c[F>>2];c[va+4>>2]=ua;_q(Aa,t,54130,va);if(a[I>>0]|0){va=c[J>>2]|0;c[wa>>2]=c[F>>2];c[wa+4>>2]=va;_q(Aa,t,54283,wa)}do if(!(a[K>>0]|0))p=c[Aa>>2]|0;else{p=c[N>>2]|0;wa=c[J>>2]|0;c[xa>>2]=c[F>>2];c[xa+4>>2]=wa;_q(Aa,p,54351,xa);p=c[Aa>>2]|0;if(p|0)break;a[K>>0]=1;p=0}while(0);c[Ha>>2]=p}else p=0;if(!(w|ya))a[K>>0]=2;if(p|0){c[o+228>>2]=(c[o+240>>2]|0)+-35;t=0;s=0;r=y;p=O;break}c[za>>2]=c[F>>2];r=Bb(54428,za)|0;do if(r){p=qd(c[N>>2]|0,r,-1,0,0,Aa,0)|0;switch(p|0){case 0:{p=c[Aa>>2]|0;Gc(p)|0;Aa=Nc(p,0)|0;c[o+240>>2]=Aa;p=gc(p)|0;break}case 23:{c[o+240>>2]=1024;p=0;break}default:{}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Aa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else p=7;while(0);c[Ha>>2]=p;c[o+228>>2]=(c[o+240>>2]|0)+-35;if(p|0){t=0;s=0;r=y;p=O;break}t=c[i>>2]|0;t=(t|0)==0?54448:t;p=c[N>>2]|0;c[Ba>>2]=1;vd(p,1,Ba)|0;c[Ca>>2]=c[c[M>>2]>>2];p=Bb(54457,Ca)|0;E:do if(!p){s=0;p=0}else{r=1;while(1){if((r|0)>=(c[j>>2]|0)){s=p;p=1;break E}Ca=c[(c[M>>2]|0)+(r<<2)>>2]|0;c[Da>>2]=p;c[Da+4>>2]=Ca;p=Bb(54462,Da)|0;if(!p){s=0;p=0;break}else r=r+1|0}}while(0);r=c[J>>2]|0;c[Fa>>2]=s;c[Fa+4>>2]=r;c[Fa+8>>2]=t;r=Bb(54469,Fa)|0;if(!(p&(r|0)!=0))if(!r)p=7;else{p=7;Ea=341}else{p=td(c[N>>2]|0,r)|0;Ea=341}do if((Ea|0)==341)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);do if(s|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{Fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);c[Ha>>2]=p;t=0;s=0;r=y;p=O}else{o=0;p=O}}while(0);do if(u|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Fa=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}while(0);do if(p|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{Fa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}while(0);do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Fa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);do if(s|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{Fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);do if(t|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{Fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}while(0);if((v|0)>0){p=0;do{q=c[m+(p<<2)>>2]|0;do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Fa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);p=p+1|0}while((p|0)!=(v|0))}}else{c[Ha>>2]=7;o=0;m=0}do if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Fa=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Fa=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);if(!(c[Ha>>2]|0)){c[k>>2]=o;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}if(o|0){Dq(o)|0;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}m=c[Ga>>2]|0;if(!m){Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}Wa[c[(c[m>>2]|0)+8>>2]&127](m)|0;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}function Yq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+32|0;w=x+16|0;s=x+8|0;v=x;c[v>>2]=d;v=Bb(31408,v)|0;if(!v){w=7;Ra=x;return w|0}u=v+(Eu(v)|0)|0;l=v;a:while(1){k=a[l>>0]|0;h=k<<24>>24;switch(h|0){case 0:{d=0;break a}case 96:case 34:case 39:{t=5;break a}case 91:{t=4;break a}default:{}}if(h&128|0){t=13;break}d=l+1|0;if(!(a[26208+h>>0]|0))l=d;else{t=15;break}}b:do if((t|0)==4){d=l;while(1){h=d+1|0;t=a[h>>0]|0;i=t<<24>>24==0;if(i^t<<24>>24!=93)d=h;else break}d=i?h:d+2|0;t=19}else if((t|0)==5){d=l+1|0;h=a[d>>0]|0;if(!(h<<24>>24))t=19;else{j=l;while(1){if(h<<24>>24==k<<24>>24){d=j+2|0;if((a[d>>0]|0)!=k<<24>>24){t=19;break b}}i=d+1|0;h=a[i>>0]|0;if(!(h<<24>>24)){d=i;t=19;break}else{j=d;d=i}}}}else if((t|0)==13){d=l+1|0;t=15}while(0);c:do if((t|0)==15)while(1){t=a[d>>0]|0;if((t&128|0)==0?(a[26208+t>>0]|0)==0:0){t=19;break c}d=d+1|0}while(0);if((t|0)==19){h=d-l|0;d=l}m=(d|0)==0?v:d;a[m+h>>0]=0;d=a[m>>0]|0;switch(d<<24>>24){case 34:case 39:case 91:case 96:{l=d<<24>>24==91?93:d;i=a[m+1>>0]|0;d:do if(!(i<<24>>24))d=0;else{j=1;d=0;do{k=j+1|0;if(i<<24>>24==l<<24>>24){if((a[m+k>>0]|0)!=l<<24>>24)break d;a[m+d>>0]=l;j=j+2|0}else{a[m+d>>0]=i;j=k}d=d+1|0;i=a[m+j>>0]|0}while(i<<24>>24!=0)}while(0);a[m+d>>0]=0;break}default:{}}i=(Eu(m)|0)+1|0;e:do if((((b|0)!=0?(n=b+16|0,(c[n>>2]|0)!=0):0)?(o=Xa[(a[b>>0]<<24>>24==1?154:155)&255](m,i)|0,o=(c[b+12>>2]|0)+-1&o,p=c[n>>2]|0,(p|0)!=0):0)?(q=c[p+(o<<3)>>2]|0,r=(a[b>>0]|0)==1?79:80,g=c[p+(o<<3)+4>>2]|0,(q|0)!=0&(g|0)!=0):0){d=q;while(1){d=d+-1|0;if(!(Za[r&127](c[g+12>>2]|0,c[g+16>>2]|0,m,i)|0))break;g=c[g>>2]|0;if(!((d|0)!=0&(g|0)!=0)){t=37;break e}}n=c[g+8>>2]|0;if(n){g=m+(h+1)|0;f:do if(g>>>0<u>>>0){b=0;l=0;d=0;while(1){g:while(1){k=a[g>>0]|0;i=k<<24>>24;switch(i|0){case 0:{h=b;g=l;break f}case 96:case 34:case 39:{t=43;break g}case 91:{t=42;break g}default:{}}if(i&128|0){t=51;break}h=g+1|0;if(!(a[26208+i>>0]|0))g=h;else{t=53;break}}h:do if((t|0)==42){h=g;while(1){i=h+1|0;t=a[i>>0]|0;j=t<<24>>24==0;if(j^t<<24>>24!=93)h=i;else break}h=j?i:h+2|0;t=57}else if((t|0)==43){t=0;i=g+1|0;j=a[i>>0]|0;if(!(j<<24>>24))l=1;else{h=g;while(1){if(j<<24>>24==k<<24>>24){h=h+2|0;if((a[h>>0]|0)!=k<<24>>24){t=57;break h}}else h=i;i=h+1|0;j=a[i>>0]|0;if(!(j<<24>>24)){h=i;t=57;break}}}}else if((t|0)==51){h=g+1|0;t=53}while(0);i:do if((t|0)==53)while(1){t=a[h>>0]|0;if((t&128|0)==0?(a[26208+t>>0]|0)==0:0){t=57;break i}h=h+1|0}while(0);if((t|0)==57){t=0;if(!g){h=b;g=l;break f}else l=h-g|0}h=b;b=b+1|0;if(mb()|0)break;m=sb(d,b<<2,0)|0;if(!m)break;c[m+(h<<2)>>2]=g;a[g+l>>0]=0;d=a[g>>0]|0;switch(d<<24>>24){case 34:case 39:case 91:case 96:{k=d<<24>>24==91?93:d;h=a[g+1>>0]|0;j:do if(!(h<<24>>24))d=0;else{i=1;d=0;do{j=i+1|0;if(h<<24>>24==k<<24>>24){if((a[g+j>>0]|0)!=k<<24>>24)break j;a[g+d>>0]=k;i=i+2|0}else{a[g+d>>0]=h;i=j}d=d+1|0;h=a[g+i>>0]|0}while(h<<24>>24!=0)}while(0);a[g+d>>0]=0;break}default:{}}g=g+(l+1)|0;if(g>>>0>=u>>>0){t=77;break}else{l=m;d=m}}if((t|0)==77){h=b;g=m;d=m;break}if(!(c[7324]|0))ab[c[29344>>2]&127](v);else{w=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v)}if(!d){w=7;Ra=x;return w|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);w=7;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);w=7;Ra=x;return w|0}}else{h=0;g=0;d=0}while(0);g=Ya[c[n+4>>2]&127](h,g,e)|0;if(!g)c[c[e>>2]>>2]=n;else Wp(f,53851,w);if(d)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{w=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}else t=37}else t=37;while(0);if((t|0)==37){c[s>>2]=m;Wp(f,53600,s);g=1}if(!(c[7324]|0)){ab[c[29344>>2]&127](v);w=g;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);w=g;Ra=x;return w|0}return 0}function Zq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;g=i+16|0;f=i;if(c[a>>2]|0){Ra=i;return}c[f>>2]=e;f=Ab(d,f)|0;if(f){d=c[b>>2]|0;if(d){c[g>>2]=d;c[g+4>>2]=f;d=Bb(38967,g)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{g=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(!d)h=8}else d=f}else h=8;if((h|0)==8){c[a>>2]=7;d=0}qb(c[b>>2]|0);c[b>>2]=d;Ra=i;return}function _q(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=Ra;Ra=Ra+16|0;f=g;if(c[a>>2]|0){Ra=g;return}c[f>>2]=e;d=Ab(d,f)|0;if(!d){c[a>>2]=7;Ra=g;return}b=nd(b,d,0,0,0)|0;c[a>>2]=b;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);Ra=g;return}else{b=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);Ra=g;return}}function $q(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=b+8|0;if(a[f>>0]|0){d=(c[b>>2]|0)+216|0;if(!(c[d>>2]|0)){g=b+12|0;e=c[g>>2]|0;c[d>>2]=e;d=e;if(e|0){e=c[d>>2]|0;h=d+136|0;i=c[h+4>>2]|0;if((i|0)>0|(i|0)==0&(c[h>>2]|0)>>>0>0)hc(e,d);i=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((i|0)==3082|(a[e+81>>0]|0)!=0)og(e)}c[g>>2]=0}a[f>>0]=0}gc(c[b+12>>2]|0)|0;g=b+28|0;d=c[g>>2]|0;if(d|0)do{e=d;d=c[d+8>>2]|0;f=c[e+12>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);c[g>>2]=0;d=c[b+44>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+92>>2]|0;do if((d|0?(a[d>>0]=0,(a[d+1>>0]|0)==0):0)?(a[d+2>>0]|0)==0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);ar(c[b+16>>2]|0);d=b+4|0;e=d+92|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));return}function ar(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!a)return;while(1){b=c[a+12>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b)break;else a=b}else a=b}do{g=c[a+8>>2]|0;f=c[a+20>>2]|0;if(f|0){b=c[f>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);do if(c[f+24>>2]|0?(h=c[f+28>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{e=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);e=f+64|0;b=f;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));if((c[e>>2]|0)>0){b=0;do{d=f+72+(b*24|0)+20|0;br(c[d>>2]|0);c[d>>2]=0;b=b+1|0}while((b|0)<(c[e>>2]|0))}}b=c[a+40>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{f=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](a);else{f=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a)}a:do if(g)if((a|0)==(c[g+12>>2]|0)?(i=c[g+16>>2]|0,(i|0)!=0):0){a=i;while(1){b=c[a+12>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b)break a;else a=b}else a=b}}else a=g;else a=0;while(0)}while((a|0)!=0);return}function br(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!b)return;j=b+4|0;d=c[b>>2]|0;if((c[j>>2]|0)>0){g=0;do{f=c[d+(g<<2)>>2]|0;do if(f|0){do if((c[f+56>>2]|0)==0?(h=c[f+64>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{e=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);do if((a[f+5>>0]|0)==0?(i=c[f+40>>2]|0,i|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{e=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);d=c[f+52>>2]|0;do if(d|0){e=c[d+20>>2]|0;gc(c[d+16>>2]|0)|0;if(e|0){if(c[e+480>>2]|0){Xd(e,d);break}k=d;if((c[e+304>>2]|0)>>>0<=k>>>0?(c[e+308>>2]|0)>>>0>k>>>0:0){k=e+300|0;c[d>>2]=c[k>>2];c[k>>2]=d;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);g=g+1|0;d=c[b>>2]|0}while((g|0)<(c[j>>2]|0))}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+16|0;e=c[d>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{k=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[j>>2]=0;c[b>>2]=0;c[d>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}\nfunction kj(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;Pa=Ra;Ra=Ra+400|0;Ia=Pa+200|0;Ha=Pa+192|0;Ca=Pa+176|0;ya=Pa+168|0;Aa=Pa+160|0;ra=Pa+152|0;qa=Pa+144|0;pa=Pa+136|0;oa=Pa+128|0;ja=Pa+120|0;ha=Pa+112|0;ia=Pa+104|0;fa=Pa+96|0;ea=Pa+88|0;ga=Pa+80|0;ba=Pa+72|0;$=Pa+64|0;_=Pa+56|0;Z=Pa+48|0;aa=Pa+32|0;D=Pa+24|0;C=Pa+16|0;o=Pa+8|0;n=Pa;Da=Pa+360|0;Ea=Pa+308|0;Ga=Pa+296|0;La=Pa+256|0;Ma=Pa+208|0;Na=c[f>>2]|0;Oa=f+8|0;j=c[Oa>>2]|0;a:do if(!j){if((c[f+116>>2]|0)==0?(b[Na+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[Na+272>>2]|0)if(!(a[Na+81>>0]|0))Fa=15;else{Ja=0;break a}else{do if((e[Na+276>>1]|0)>=224){j=Na+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ka=Na+284|0;c[Ka>>2]=(c[Ka>>2]|0)+1;break b}j=Na+296|0;k=c[j>>2]|0;if(!k){j=Na+292|0;break}else{c[j>>2]=c[k>>2];Ka=Na+284|0;c[Ka>>2]=(c[Ka>>2]|0)+1;break b}}else j=Na+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=15}while(0);if((Fa|0)==15)k=_d(Na,224,0)|0;if(!k)Ja=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=Na;j=Na+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;Ja=k}}else Ja=j;while(0);if(!h){Oa=1;Ra=Pa;return Oa|0}xa=Na+81|0;if(a[xa>>0]|0){Oa=1;Ra=Pa;return Oa|0}Ka=f+36|0;if(c[Ka>>2]|0){Oa=1;Ra=Pa;return Oa|0}j=c[f>>2]|0;do if(((a[j+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(m=c[j+312>>2]|0,m|0):0){j=$a[m&127](c[j+316>>2]|0,21,0,0,0,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,n);c[f+12>>2]=23;Oa=1;Ra=Pa;return Oa|0}if((j|2|0)==2){if(!j)break;else j=1;Ra=Pa;return j|0}else{cd(f,39231,o);c[f+12>>2]=1;Oa=1;Ra=Pa;return Oa|0}}while(0);T=Ma;U=T+48|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));if((d[i>>0]|0)<9){j=h+48|0;k=c[j>>2]|0;if(k|0)ri(Na,k);c[j>>2]=0;Ba=h+8|0;c[Ba>>2]=c[Ba>>2]&-2;Kk(f,h,0)}else Kk(f,h,0);c:do if((c[Ka>>2]|0)==0?(a[xa>>0]|0)==0:0){if(((a[i>>0]|0)==9?(A=c[Oa>>2]|0,B=c[f>>2]|0,(a[f+199>>0]|0)==0):0)?(p=f+16|0,(a[p>>0]|0)==0):0){k=h;while(1){j=c[k+52>>2]|0;if(!j)break;else k=j}y=c[k+32>>2]|0;z=c[k>>2]|0;a[p>>0]=1;x=c[B+32>>2]|0;w=(x&4|0)==0&0==0;x=(x&68|0)==0&0==0;Wi(A,c[z>>2]|0);j=c[z>>2]|0;if((j|0)>0){n=A+116|0;o=B+272|0;p=B+276|0;q=B+81|0;r=B+288|0;s=B+300|0;t=B+296|0;u=B+284|0;v=B+292|0;m=0;do{k=c[z+4+(m*20|0)>>2]|0;j=c[z+4+(m*20|0)+4>>2]|0;d:do if(j){if(!(a[(c[A>>2]|0)+81>>0]|0))yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,-1)|0}else{do if(!x){if((a[k>>0]|0)!=-94)break;j=b[k+32>>1]|0;k=c[k+44>>2]|0;if(j<<16>>16<0)j=b[k+40>>1]|0;else j=j<<16>>16;if((j|0)<0)j=38132;else j=c[(c[k+4>>2]|0)+(j<<4)>>2]|0;if(w){if(a[(c[A>>2]|0)+81>>0]|0)break d;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,-1)|0;break d}else{c[C>>2]=c[k>>2];c[C+4>>2]=j;j=dd(B,40358,C)|0;if(a[(c[A>>2]|0)+81>>0]|0)break d;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,116)|0;break d}}while(0);k=c[z+4+(m*20|0)+8>>2]|0;e:do if(!k){c[D>>2]=m+1;j=dd(B,41025,D)|0}else{l=(Eu(k)|0)+1|0;f:do if(c[o>>2]|0)if(!(a[q>>0]|0))Fa=69;else{j=0;break e}else{do if(0<0|(0==0?(e[p>>1]|0)>>>0<l>>>0:0))j=r;else{j=c[s>>2]|0;if(j|0){c[s>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break f}j=c[t>>2]|0;if(!j){j=v;break}c[t>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break f}while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=69}while(0);if((Fa|0)==69){Fa=0;j=_d(B,l,0)|0}if(!j){j=0;break}ew(j|0,k|0,l|0)|0}while(0);if(a[(c[A>>2]|0)+81>>0]|0)break;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,116)|0}while(0);m=m+1|0;j=c[z>>2]|0}while((m|0)<(j|0))}n=c[Oa>>2]|0;c[Da+4>>2]=y;c[Da>>2]=f;c[Da+12>>2]=0;if((j|0)>0){l=n+116|0;m=n+144|0;k=0;do{if(!(a[(c[n>>2]|0)+81>>0]|0)){j=Vk(Da,c[z+4+(k*20|0)>>2]|0)|0;yc((c[l>>2]|0)+((k+(e[m>>1]|0)|0)*40|0)|0,j,-1,1,-1)|0;j=c[z>>2]|0}k=k+1|0}while((k|0)<(j|0))}}wa=h+68|0;ca=h+52|0;if(c[wa>>2]|0?(c[ca>>2]|0)==0:0){j=c[Oa>>2]|0;g:do if(!j){l=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[l+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=97;else{A=0;break g}else{do if((e[l+276>>1]|0)>=224){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ba=l+284|0;c[Ba>>2]=(c[Ba>>2]|0)+1;break h}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];Ba=l+284|0;c[Ba>>2]=(c[Ba>>2]|0)+1;break h}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=97}while(0);if((Fa|0)==97)k=_d(l,224,0)|0;if(!k)A=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=l;j=l+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;A=k}}else A=j;while(0);B=c[f>>2]|0;z=h+32|0;u=c[z>>2]|0;v=c[h+36>>2]|0;w=c[h+40>>2]|0;x=c[h+44>>2]|0;o=c[wa>>2]|0;p=o+8|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;j=gk(B,c[p>>2]|0,0)|0;q=o+12|0;m=c[q>>2]|0;if(m){if(!j)n=0;else n=c[j>>2]|0;if((c[m>>2]|0)>0){l=0;do{k=c[m+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+n|0)*20|0)+12>>0]=a[m+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[m>>2]|0));t=j}else t=j}else t=j;i:do if((t|0?(G=h+48|0,F=c[G>>2]|0,F|0):0)?(E=c[t>>2]|0,(E|0)==(c[F>>2]|0)):0){if((E|0)>0){j=0;do{if((a[t+4+(j*20|0)+12>>0]|0)!=(a[F+4+(j*20|0)+12>>0]|0))break i;if(bk(0,c[t+4+(j*20|0)>>2]|0,c[F+4+(j*20|0)>>2]|0,-1)|0)break i;j=j+1|0}while((j|0)<(c[t>>2]|0));j=c[G>>2]|0;if(j|0)Fa=121}else{j=F;Fa=121}if((Fa|0)==121)ri(B,j);c[G>>2]=0}while(0);j=f+40|0;m=c[j>>2]|0;y=o+44|0;c[y>>2]=m;c[j>>2]=m+4;j=c[h>>2]|0;m=Da+12|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[Ea+12>>2]=0;m=Ea+8|0;c[m>>2]=0;c[Ea>>2]=o;c[Ea+4>>2]=u;c[Da>>2]=f;c[Da+4>>2]=129;c[Da+8>>2]=130;c[Da+24>>2]=Ea;if((j|0)!=0?(H=c[j>>2]|0,(H|0)>0):0){l=H;j=j+4|0;while(1){k=c[j>>2]|0;if(k|0?_j(Da,k)|0:0)break;if((l|0)>1){l=l+-1|0;j=j+20|0}else break}k=c[m>>2]|0}else k=0;j=c[h+48>>2]|0;m=Da+12|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[Ea+12>>2]=0;m=Ea+8|0;c[m>>2]=k;c[Ea>>2]=o;c[Ea+4>>2]=u;c[Da>>2]=f;c[Da+4>>2]=129;c[Da+8>>2]=130;c[Da+24>>2]=Ea;if((j|0)!=0?(I=c[j>>2]|0,(I|0)>0):0){l=I;j=j+4|0;while(1){k=c[j>>2]|0;if(k|0?_j(Da,k)|0:0)break;if((l|0)>1){l=l+-1|0;j=j+20|0}else break}k=c[m>>2]|0}j=k;l=(k|0)==0;if(l)k=0;else k=c[j>>2]|0;c[o+72>>2]=k;n=c[p>>2]|0;do if(n){if(l)m=0;else m=c[j>>2]|0;if((c[n>>2]|0)<=0)break;l=0;do{k=c[n+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+m|0)*20|0)+12>>0]=a[n+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);m=c[q>>2]|0;do if(m){if(!j)n=0;else n=c[j>>2]|0;if((c[m>>2]|0)<=0){Fa=159;break}l=0;do{k=c[m+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;k=(j|0)==0;if(!k)a[j+4+((l+n|0)*20|0)+12>>0]=a[m+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[m>>2]|0));if(o){l=j;Fa=161}}else Fa=159;while(0);if((Fa|0)==159){l=j;k=(j|0)==0;Fa=161}if((Fa|0)==161){p=f+44|0;q=A+108|0;r=A+112|0;s=A+104|0;j=l;do{if(k)l=0;else l=c[j>>2]|0;c[o+76>>2]=l;n=c[(c[o+68>>2]|0)+20>>2]|0;do if(n){if(k)m=0;else m=c[j>>2]|0;if((c[n>>2]|0)<=0)break;l=0;do{k=c[n+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+m|0)*20|0)+12>>0]=a[n+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);k=c[o+36>>2]|0;if(k){Ba=dk(B,k,0,0)|0;j=nj(c[f>>2]|0,j,Ba)|0}l=c[p>>2]|0;k=l+1|0;c[o+48>>2]=k;l=l+2|0;c[p>>2]=l;c[o+52>>2]=l;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Ba=c[s>>2]|0;a[Ba+(l*20|0)>>0]=73;b[Ba+(l*20|0)+2>>1]=0;c[Ba+(l*20|0)+4>>2]=0;c[Ba+(l*20|0)+8>>2]=k;c[Ba+(l*20|0)+12>>2]=0;c[Ba+(l*20|0)+16>>2]=0;a[Ba+(l*20|0)+1>>0]=0}else Di(A,73,0,k,0)|0;o=c[o+32>>2]|0;k=(j|0)==0}while((o|0)!=0)}if(k){l=oj(B,147,17136,0)|0;l=nj(c[f>>2]|0,0,l)|0}else l=j;j=mj(f,l,u,v,w,x,t,0,0)|0;k=pj(f,0,0,0)|0;c[z>>2]=k;do if(k){c[k+28>>2]=j;Qk(f,k);if(!(Rk(f,(c[z>>2]|0)+8|0)|0)){Ba=j+8|0;c[Ba>>2]=c[Ba>>2]|64;Ba=h+8|0;c[Ba>>2]=c[Ba>>2]&-9;Kk(f,j,0);j=0}else j=7;m=c[y>>2]|0;k=c[l>>2]|0;n=A+108|0;l=c[n>>2]|0;o=A+112|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;Ba=c[A+104>>2]|0;a[Ba+(l*20|0)>>0]=113;b[Ba+(l*20|0)+2>>1]=0;c[Ba+(l*20|0)+4>>2]=m;c[Ba+(l*20|0)+8>>2]=k;c[Ba+(l*20|0)+12>>2]=0;c[Ba+(l*20|0)+16>>2]=0;a[Ba+(l*20|0)+1>>0]=0}else Di(A,113,m,k,0)|0;k=c[y>>2]|0;l=k+1|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0}else Di(A,111,l,k,0)|0;k=c[y>>2]|0;l=k+2|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0}else Di(A,111,l,k,0)|0;k=c[y>>2]|0;l=k+3|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0;break}else{Di(A,111,l,k,0)|0;break}}else{if(!j){j=0;break}pi(B,j,1);j=0}while(0);if(!((j|0)==0&(a[B+81>>0]|0)==0)){m=1;break}}va=h+32|0;l=c[va>>2]|0;za=h+8|0;da=(c[za>>2]|0)>>>3&1;T=La+4|0;U=T+36|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));S=h+48|0;c[La>>2]=c[S>>2];j=c[ca>>2]|0;j:do if(!j){sa=h+36|0;ua=Na+76|0;V=f+240|0;K=h+60|0;M=(da|0)!=0;W=f+200|0;N=h+4|0;X=f+12|0;O=Da+4|0;P=Da+8|0;Q=Da+12|0;R=Da+16|0;Ba=f+116|0;k=0;ta=l;k:while(1){j=c[ta>>2]|0;if((k|0)>=(j|0))break;m=c[ta+8+(k*72|0)+20>>2]|0;n=c[ta+8+(k*72|0)+16>>2]|0;j=ta+8+(k*72|0)+36|0;if((a[j>>0]&8?(Y=ta+8+(k*72|0)+40|0,ll(c[sa>>2]|0,c[Y>>2]|0)|0):0)?(b[ua>>1]&8192)==0:0){a[j>>0]=a[j>>0]&-41;ml(c[sa>>2]|0,c[Y>>2]|0)}l:do if(m){j=b[n+42>>1]|0;l=c[c[m>>2]>>2]|0;if((l|0)!=(j<<16>>16|0)){Fa=209;break k}if(!(c[m+8>>2]&8)){do if((k|0)==0&(c[m+48>>2]|0)!=0){if(!(c[za>>2]&262144))break;if((c[ta>>2]|0)==1){j=ta;k=0;break l}if(a[ta+116>>0]&10){j=ta;k=0;break l}}while(0);s=c[V>>2]|0;I=c[f>>2]|0;m:do if(!(b[I+76>>1]&1)){t=c[va>>2]|0;J=c[t+8+(k*72|0)+40>>2]|0;u=t+8+(k*72|0)+20|0;m=c[u>>2]|0;if(c[wa>>2]|0)break;if(c[m+68>>2]|0)break;o=c[m+32>>2]|0;j=c[m+60>>2]|0;n=(j|0)==0;if(!n){if(c[K>>2]|0)break;if(c[j+16>>2]|0)break;j=c[za>>2]|0;if(j&256)break}else j=c[za>>2]|0;l=c[o>>2]|0;if(!l)break;p=c[m+8>>2]|0;if(p&1|0)break;if(!n?M|(c[t>>2]|0)>1:0)break;r=c[S>>2]|0;q=(r|0)==0;if(!q?c[m+48>>2]|0:0)break;if(M?c[m+48>>2]|0:0)break;if(n){if(p&8192|0)break}else if(!((p&8192|j&1|0)==0&(c[sa>>2]|0)==0))break;H=t+8+(k*72|0)+36|0;if(a[H>>0]&32){if(M|(l|0)>1)break;if(!(c[(c[o+24>>2]|0)+56>>2]|0))G=1;else break}else G=0;n=m+52|0;l=c[n>>2]|0;do if(l|0){if(!((j&1|0)==0&((M|(c[m+48>>2]|0)!=0)^1)))break m;if(!((c[t>>2]|0)==1&(p&9|0)==0))break m;j=l;while(1){l=(j|0)==0;if(!l?(a[m+4>>0]|0)!=-128:0)break m;if((c[c[m+32>>2]>>2]|0)<1)break m;if(l)break;if(c[j+8>>2]&9|0)break m;m=j;j=c[j+52>>2]|0}if(q)break;l=c[r>>2]|0;if((l|0)<=0)break;j=0;do{if(!(b[r+4+(j*20|0)+16>>1]|0))break m;j=j+1|0}while((j|0)<(l|0))}while(0);q=t+8+(k*72|0)+8|0;j=c[q>>2]|0;c[V>>2]=j;do if(!(a[I+165>>0]|0)){if(a[W>>0]|0)break;l=c[I+312>>2]|0;if(!l)break;j=$a[l&127](c[I+316>>2]|0,21,0,0,0,j)|0;if((j|0)==1){cd(f,39216,Z);c[X>>2]=23;break}if((j|2|0)==2)break;cd(f,39231,_);c[X>>2]=1}while(0);c[V>>2]=s;j=c[n>>2]|0;n:do if(!j)Fa=267;else{p=I+81|0;o=c[S>>2]|0;n=c[K>>2]|0;m=c[ca>>2]|0;while(1){c[S>>2]=0;c[va>>2]=0;c[ca>>2]=0;c[K>>2]=0;l=fk(I,h,0)|0;c[K>>2]=n;c[S>>2]=o;c[va>>2]=t;a[N>>0]=-128;if(!l)l=m;else{c[l+52>>2]=m;if(m|0)c[m+56>>2]=l;c[l+56>>2]=h}c[ca>>2]=l;if(a[p>>0]|0)break n;j=c[j+52>>2]|0;if(!j){Fa=267;break}else m=l}}while(0);do if((Fa|0)==267){Fa=0;F=c[u>>2]|0;n=t+8+(k*72|0)+4|0;j=c[n>>2]|0;o:do if(j|0){if(c[I+480>>2]|0){Xd(I,j);break}l=j;do if((c[I+304>>2]|0)>>>0<=l>>>0){if((c[I+308>>2]|0)>>>0<=l>>>0)break;ta=I+300|0;c[j>>2]=c[ta>>2];c[ta>>2]=j;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{ta=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[q>>2]|0;p:do if(j|0){if(c[I+480>>2]|0){Xd(I,j);break}l=j;do if((c[I+304>>2]|0)>>>0<=l>>>0){if((c[I+308>>2]|0)>>>0<=l>>>0)break;ta=I+300|0;c[j>>2]=c[ta>>2];c[ta>>2]=j;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{ta=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=t+8+(k*72|0)+12|0;l=c[j>>2]|0;q:do if(l|0){if(c[I+480>>2]|0){Xd(I,l);break}m=l;do if((c[I+304>>2]|0)>>>0<=m>>>0){if((c[I+308>>2]|0)>>>0<=m>>>0)break;ta=I+300|0;c[l>>2]=c[ta>>2];c[ta>>2]=l;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[n>>2]=0;c[q>>2]=0;c[j>>2]=0;c[u>>2]=0;j=t+8+(k*72|0)+16|0;l=c[j>>2]|0;if(l|0){m=l+32|0;n=c[m>>2]|0;if((n|0)==1){ta=c[Ba>>2]|0;ta=((ta|0)==0?f:ta)+256|0;c[l+76>>2]=c[ta>>2];c[ta>>2]=l}else c[m>>2]=n+-1;c[j>>2]=0}y=k+1|0;z=I+480|0;A=I+304|0;B=I+308|0;C=I+300|0;D=(G|0)==0;E=I+81|0;w=h;o=-1;x=F;while(1){t=c[x+32>>2]|0;u=c[t>>2]|0;s=w+32|0;j=c[s>>2]|0;if(!j){j=pj(f,0,0,0)|0;if(!j)break;c[s>>2]=j;v=0}else v=a[H>>0]|0;if((u|0)>1){r=u+-1|0;l=c[j>>2]|0;m=l+r|0;if(m>>>0>(c[j+4>>2]|0)>>>0){l=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;l=Sv(l|0,L()|0,r|0,((r|0)<0)<<31>>31|0)|0;n=L()|0;if((m|0)>199){Fa=307;break}p=c[f>>2]|0;m=(n|0)<0|(n|0)==0&l>>>0<200;q=m?l:200;l=Yv(q|0,(m?n:0)|0,72,0)|0;l=Sv(l|0,L()|0,8,0)|0;m=L()|0;n=j;do if((c[p+304>>2]|0)>>>0<=n>>>0){if((c[p+308>>2]|0)>>>0<=n>>>0){Fa=311;break}if(m>>>0>0|((m|0)==0?l>>>0>(e[p+276>>1]|0)>>>0:0))Fa=311}else Fa=311;while(0);if((Fa|0)==311){Fa=0;j=Zd(p,j,l,m)|0;if(!j)break}c[j+4>>2]=q;n=j;m=j;j=c[j>>2]|0}else{n=j;m=j;j=l}if((j|0)>(y|0)){do{j=j+-1|0;T=n+8+((j+r|0)*72|0)|0;l=n+8+(j*72|0)|0;U=T+72|0;do{c[T>>2]=c[l>>2];T=T+4|0;l=l+4|0}while((T|0)<(U|0))}while((j|0)>(y|0));j=c[m>>2]|0}c[m>>2]=j+r;gw(n+8+(y*72|0)|0,0,r*72|0)|0;l=u+k|0;j=y;do{c[n+8+(j*72|0)+40>>2]=-1;j=j+1|0}while((j|0)<(l|0));c[s>>2]=n;j=n}if((u|0)>0){r=0;while(1){p=r+k|0;q=j+8+(p*72|0)|0;p=c[j+8+(p*72|0)+48>>2]|0;r:do if(p|0){o=p+4|0;l=c[p>>2]|0;if((c[o>>2]|0)>0){n=0;do{l=c[l+(n<<3)>>2]|0;s:do if(l|0){if(c[z>>2]|0){Xd(I,l);break}m=l;do if((c[A>>2]|0)>>>0<=m>>>0){if((c[B>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[C>>2];c[C>>2]=l;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);n=n+1|0;l=c[p>>2]|0}while((n|0)<(c[o>>2]|0))}t:do if(l|0){if(c[z>>2]|0){Xd(I,l);break}m=l;do if((c[A>>2]|0)>>>0<=m>>>0){if((c[B>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[C>>2];c[C>>2]=l;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(c[z>>2]|0){Xd(I,p);break}l=p;do if((c[A>>2]|0)>>>0<=l>>>0){if((c[B>>2]|0)>>>0<=l>>>0)break;c[p>>2]=c[C>>2];c[C>>2]=p;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ta=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);m=t+8+(r*72|0)|0;T=q;l=m;U=T+72|0;do{c[T>>2]=c[l>>2];T=T+4|0;l=l+4|0}while((T|0)<(U|0));l=c[t+8+(r*72|0)+40>>2]|0;T=m;U=T+72|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));r=r+1|0;if((r|0)==(u|0)){o=l;break}}}a[j+8+(k*72|0)+36>>0]=v;l=x+48|0;m=c[l>>2]|0;if(m|0){n=c[m>>2]|0;if((n|0)>0){j=0;do{b[m+4+(j*20|0)+16>>1]=0;j=j+1|0}while((j|0)!=(n|0))}c[w+48>>2]=m;c[l>>2]=0}ta=x+36|0;j=c[ta>>2]|0;c[ta>>2]=0;if(!D)Wk(j,o);ta=w+36|0;U=Xk(I,j,c[ta>>2]|0)|0;c[ta>>2]=U;if(!(a[E>>0]|0)){c[Da>>2]=f;c[O>>2]=J;c[P>>2]=o;c[Q>>2]=G;c[R>>2]=c[x>>2];yl(Da,w,0)}j=w+8|0;c[j>>2]=c[j>>2]|c[x+8>>2]&1;j=x+60|0;l=c[j>>2]|0;if(l|0){c[w+60>>2]=l;c[j>>2]=0}w=c[w+52>>2]|0;if(!w)break;else x=c[x+52>>2]|0}if((Fa|0)==307){Fa=0;c[$>>2]=200;cd(f,43159,$)}if(!F)break;pi(I,F,1)}while(0);if(!(c[Ka>>2]|0))k=-1;else{m=1;break c}}while(0);j=c[va>>2]|0;if(a[xa>>0]|0){m=1;break c}if((d[i>>0]|0)<9)break;c[La>>2]=c[S>>2]}else j=ta}else j=ta;while(0);l=c[ca>>2]|0;if(!l){k=k+1|0;ta=j}else{w=l;break j}}if((Fa|0)==209){m=c[n>>2]|0;c[aa>>2]=j<<16>>16;c[aa+4>>2]=m;c[aa+8>>2]=l;cd(f,43040,aa);m=1;break c}if((j|0)>1)if((b[ua>>1]|0)>-1){c[Da>>2]=f;m=Da+4|0;n=Da+8|0;o=Da+12|0;p=Ea+4|0;q=Ea+8|0;r=Ea+12|0;s=Ea+16|0;t=Ea+24|0;u=Ea+20|0;do{c[m>>2]=0;c[n>>2]=0;c[o>>2]=0;Fl(Da,c[sa>>2]|0);u:do if(c[m>>2]|0){c[u>>2]=0;c[Ea>>2]=f;c[p>>2]=131;c[q>>2]=132;c[r>>2]=0;c[s>>2]=0;c[t>>2]=Da;j=c[sa>>2]|0;if(j|0)_j(Ea,j)|0;j=c[c[Da>>2]>>2]|0;k=c[o>>2]|0;if(!k)break;do if(j|0){if(c[j+480>>2]|0){Xd(j,k);break u}l=k;if((c[j+304>>2]|0)>>>0>l>>>0)break;if((c[j+308>>2]|0)>>>0<=l>>>0)break;Fa=j+300|0;c[k>>2]=c[Fa>>2];c[Fa>>2]=k;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Fa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0)}while((c[n>>2]|0)!=0);j=c[ta>>2]|0;Fa=668}else Fa=669;else Fa=668;if((Fa|0)==668?(j|0)>0:0)Fa=669;v:do if((Fa|0)==669){z=f+208|0;A=f+44|0;B=Ja+108|0;C=Ja+112|0;D=ta+116|0;E=Ja+104|0;F=Da+4|0;G=Da+16|0;H=Da+8|0;I=Da+12|0;J=Ja+12|0;K=ta+8|0;M=f+19|0;N=f+28|0;O=ta+36|0;P=ta+32|0;Q=ta+24|0;R=ta+45|0;S=ta+40|0;y=0;while(1){u=ta+8+(y*72|0)|0;ka=ta+8+(y*72|0)+56|0;do if(((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?(la=c[ta+8+(y*72|0)+8>>2]|0,ma=c[ta+8+(y*72|0)+4>>2]|0,na=c[f>>2]|0,(a[na+165>>0]|0)==0):0)?(a[W>>0]|0)==0:0){j=c[na+312>>2]|0;if(!j)break;j=$a[j&127](c[na+316>>2]|0,20,la,59952,ma,c[V>>2]|0)|0;if((j|0)==1){cd(f,39216,oa);c[X>>2]=23;break}if((j|2|0)==2)break;cd(f,39231,pa);c[X>>2]=1}while(0);s=ta+8+(y*72|0)+20|0;v=c[s>>2]|0;if(v|0){ka=nl(h)|0;c[z>>2]=(c[z>>2]|0)+ka;if(!(b[ua>>1]&4096))ol(f,v,c[sa>>2]|0,c[ta+8+(y*72|0)+40>>2]|0,(d[ta+8+(y*72|0)+36>>0]|0)>>>5&1)|0;x=c[V>>2]|0;t=ta+8+(y*72|0)+8|0;c[V>>2]=c[t>>2];l=(y|0)==0;do if(l){if((c[ta>>2]|0)!=1?(a[D>>0]&10)==0:0){Fa=693;break}l=c[B>>2]|0;j=l+1|0;k=(c[A>>2]|0)+1|0;c[A>>2]=k;c[O>>2]=k;if((c[C>>2]|0)>(l|0)){c[B>>2]=j;ka=c[E>>2]|0;a[ka+(l*20|0)>>0]=13;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=k;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=j;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(Ja,13,k,0,j)|0;c[P>>2]=j;j=c[O>>2]|0;a[Da>>0]=13;c[F>>2]=j;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[qa>>2]=c[v+20>>2];nk(f,1,43080,qa);kj(f,v,Da)|0;b[(c[Q>>2]|0)+44>>1]=b[v+6>>1]|0;a[R>>0]=a[R>>0]|16;c[S>>2]=c[H>>2];j=c[O>>2]|0;k=c[B>>2]|0;if((c[C>>2]|0)>(k|0)){c[B>>2]=k+1;ka=c[E>>2]|0;a[ka+(k*20|0)>>0]=67;b[ka+(k*20|0)+2>>1]=0;c[ka+(k*20|0)+4>>2]=j;c[ka+(k*20|0)+8>>2]=0;c[ka+(k*20|0)+12>>2]=0;c[ka+(k*20|0)+16>>2]=0;a[ka+(k*20|0)+1>>0]=0}else Di(Ja,67,j,0,0)|0;k=c[J>>2]|0;a[k+19>>0]=0;c[k+28>>2]=0;k=c[B>>2]|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[E>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else j=59308;c[j+8>>2]=k}else Fa=693;while(0);if((Fa|0)==693){Fa=0;k=(c[A>>2]|0)+1|0;c[A>>2]=k;w=ta+8+(y*72|0)+28|0;c[w>>2]=k;j=c[B>>2]|0;if((c[C>>2]|0)>(j|0)){ka=j+1|0;c[B>>2]=ka;ja=c[E>>2]|0;a[ja+(j*20|0)>>0]=70;b[ja+(j*20|0)+2>>1]=0;c[ja+(j*20|0)+4>>2]=0;c[ja+(j*20|0)+8>>2]=k;c[ja+(j*20|0)+12>>2]=0;c[ja+(j*20|0)+16>>2]=0;a[ja+(j*20|0)+1>>0]=0;k=ka}else{k=Di(Ja,70,0,k,0)|0;j=k;k=k+1|0}c[ta+8+(y*72|0)+24>>2]=k;do if(!(a[ta+8+(y*72|0)+37>>0]&8)){k=c[B>>2]|0;if((c[C>>2]|0)>(k|0)){c[B>>2]=k+1;T=c[E>>2]|0;a[T+(k*20|0)>>0]=17;T=T+(k*20|0)+1|0;U=T+19|0;do{a[T>>0]=0;T=T+1|0}while((T|0)<(U|0));r=k;break}else{r=Di(Ja,17,0,0,0)|0;break}}else r=0;while(0);w:do if(l)Fa=724;else{p=ta+8+(y*72|0)+4|0;q=K;x:while(1){o=c[q+20>>2]|0;y:do if(o|0){if(a[q+37>>0]&16)break;l=c[q+8>>2]|0;if(!l)break;m=c[q+4>>2]|0;n=c[p>>2]|0;do if(!m)k=((n|0)!=0)<<31>>31;else{if(!n)break y;ka=a[m>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(ka<<24>>24==0|(k|0)!=0)break;do{m=m+1|0;n=n+1|0;ka=a[m>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(k|0)!=0))}while(0);if(k|0)break;m=c[t>>2]|0;if(!m)break;ka=a[l>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(k|0)!=0))do{l=l+1|0;m=m+1|0;ka=a[l>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(k|0)!=0));if(k|0)break;k=c[s>>2]|0;if((c[k+20>>2]|0)!=(c[o+20>>2]|0))break;if(!(bk(0,c[k+36>>2]|0,c[o+36>>2]|0,-1)|0))break x}while(0);k=q+72|0;if(k>>>0<u>>>0)q=k;else{Fa=724;break w}}k=c[ta+8+(y*72|0)+40>>2]|0;l=c[q+40>>2]|0;m=c[B>>2]|0;if((c[C>>2]|0)>(m|0)){c[B>>2]=m+1;ka=c[E>>2]|0;a[ka+(m*20|0)>>0]=111;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=k;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(Ja,111,k,l,0)|0;k=b[(c[q+20>>2]|0)+6>>1]|0;b[v+6>>1]=k}while(0);if((Fa|0)==724){Fa=0;k=c[ta+8+(y*72|0)+40>>2]|0;a[Da>>0]=12;c[F>>2]=k;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[ra>>2]=c[v+20>>2];nk(f,1,43094,ra);kj(f,v,Da)|0;k=b[v+6>>1]|0}b[(c[ta+8+(y*72|0)+16>>2]|0)+44>>1]=k;l=c[B>>2]|0;if(r|0){if(!(a[(c[Ja>>2]|0)+81>>0]|0))k=(c[E>>2]|0)+(((r|0)<0?l+-1|0:r)*20|0)|0;else k=59308;c[k+8>>2]=l}k=c[w>>2]|0;if((c[C>>2]|0)>(l|0)){c[B>>2]=l+1;ka=c[E>>2]|0;a[ka+(l*20|0)>>0]=66;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=k;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;k=l}else k=Di(Ja,66,k,0,0)|0;if((j|0)<0)j=(c[B>>2]|0)+-1|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[E>>2]|0)+(j*20|0)|0;else j=59308;c[j+4>>2]=k}a[M>>0]=0;c[N>>2]=0;if(a[xa>>0]|0)break;ka=nl(h)|0;c[z>>2]=(c[z>>2]|0)-ka;c[V>>2]=x}y=y+1|0;if((y|0)>=(c[ta>>2]|0))break v}m=1;break c}while(0);$=c[h>>2]|0;D=c[sa>>2]|0;t=h+40|0;m=c[t>>2]|0;u=h+44|0;X=c[u>>2]|0;j=c[za>>2]|0;a[Ga>>0]=j&1;z:do if((j&9|0)==1){n=c[La>>2]|0;k=(n|0)==0;l=($|0)==0;do if(!(l&k)){if(l|k){U=m;break z}k=c[n>>2]|0;if((k|0)!=(c[$>>2]|0)){U=m;break z}if((k|0)<=0)break;j=0;do{if((a[n+4+(j*20|0)+12>>0]|0)!=(a[$+4+(j*20|0)+12>>0]|0)){U=m;break z}if(bk(0,c[n+4+(j*20|0)>>2]|0,c[$+4+(j*20|0)>>2]|0,-1)|0){U=m;break z}j=j+1|0}while((j|0)<(c[n>>2]|0));j=c[za>>2]|0}while(0);c[za>>2]=j&-2;U=gk(Na,$,0)|0;c[t>>2]=U}else U=m;while(0);q=c[La>>2]|0;A:do if(q){o=c[f>>2]|0;r=c[q>>2]|0;m=(c[$>>2]|0)+1+r|0;n=m*5|0;l=n+20|0;p=o+272|0;B:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=763;else{n=0;o=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=764;break B}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=764;break B}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=763}while(0);if((Fa|0)==763){k=_d(o,l,0)|0;Fa=764}do if((Fa|0)==764){do if(!k){j=o+81|0;if(a[j>>0]|0){n=0;p=1;break}if(a[o+82>>0]|0){n=0;p=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){n=0;p=1;break}c[j+12>>2]=7;n=0;p=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;n=k;p=0}while(0);if(!((r|0)>0&(k|0)!=0)){o=p;break}o=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[o>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0)){o=p;break}else l=l+20|0}}while(0);l=f+40|0;k=c[l>>2]|0;c[l>>2]=k+1;c[La+8>>2]=k;l=(c[c[La>>2]>>2]|0)+1+(c[$>>2]|0)|0;m=Ja+108|0;j=c[m>>2]|0;if((c[Ja+112>>2]|0)>(j|0)){c[m>>2]=j+1;ra=c[Ja+104>>2]|0;a[ra+(j*20|0)>>0]=113;b[ra+(j*20|0)+2>>1]=0;c[ra+(j*20|0)+4>>2]=k;c[ra+(j*20|0)+8>>2]=l;c[ra+(j*20|0)+12>>2]=0;c[ra+(j*20|0)+16>>2]=0;a[ra+(j*20|0)+1>>0]=0}else j=Di(Ja,113,k,l,0)|0;k=c[Ja>>2]|0;if(!(a[k+81>>0]|0)){if((j|0)<0)k=(c[m>>2]|0)+-1|0;else k=j;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,n,-9);break}if(o)break;c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9;break}if(o|(c[k+480>>2]|0)!=0)break;ra=(c[n>>2]|0)+-1|0;c[n>>2]=ra;if(ra|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break A}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;ra=k+300|0;c[n>>2]=c[ra>>2];c[ra>>2]=n;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ra=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ra;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else j=-1;while(0);c[La+20>>2]=j;do if((a[i>>0]|0)==12){j=c[i+4>>2]|0;k=c[$>>2]|0;l=Ja+108|0;m=c[l>>2]|0;if((c[Ja+112>>2]|0)>(m|0)){c[l>>2]=m+1;ra=c[Ja+104>>2]|0;a[ra+(m*20|0)>>0]=113;b[ra+(m*20|0)+2>>1]=0;c[ra+(m*20|0)+4>>2]=j;c[ra+(m*20|0)+8>>2]=k;c[ra+(m*20|0)+12>>2]=0;c[ra+(m*20|0)+16>>2]=0;a[ra+(m*20|0)+1>>0]=0;break}else{Di(Ja,113,j,k,0)|0;break}}while(0);_=f+56|0;aa=c[_>>2]|0;j=aa+-1|0;c[_>>2]=j;if(!(c[za>>2]&16384))b[h+6>>1]=320;pl(f,h,j);do if(!(c[h+12>>2]|0)){j=c[La+20>>2]|0;if((j|0)<=-1)break;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[Ja+104>>2]|0)+(j*20|0)|0;else j=59308;a[j>>0]=114;ra=La+32|0;a[ra>>0]=a[ra>>0]|1}while(0);do if(!(c[za>>2]&1))j=0;else{q=f+40|0;s=c[q>>2]|0;c[q>>2]=s+1;c[Ga+4>>2]=s;q=c[h>>2]|0;o=c[f>>2]|0;r=c[q>>2]|0;m=r+1|0;n=m*5|0;l=n+20|0;p=o+272|0;C:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=820;else{o=0;n=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=821;break C}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=821;break C}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=820}while(0);if((Fa|0)==820){k=_d(o,l,0)|0;Fa=821}do if((Fa|0)==821){do if(!k){j=o+81|0;if(a[j>>0]|0){o=0;n=1;break}if(a[o+82>>0]|0){o=0;n=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){o=0;n=1;break}c[j+12>>2]=7;o=0;n=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;o=k;n=0}while(0);if(!((r|0)>0&(k|0)!=0))break;p=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[p>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0))break;else l=l+20|0}}while(0);p=Ja+108|0;j=c[p>>2]|0;if((c[Ja+112>>2]|0)>(j|0)){c[p>>2]=j+1;ra=c[Ja+104>>2]|0;a[ra+(j*20|0)>>0]=113;b[ra+(j*20|0)+2>>1]=0;c[ra+(j*20|0)+4>>2]=s;c[ra+(j*20|0)+8>>2]=0;c[ra+(j*20|0)+12>>2]=0;c[ra+(j*20|0)+16>>2]=0;a[ra+(j*20|0)+1>>0]=0}else j=Di(Ja,113,s,0,0)|0;k=c[Ja>>2]|0;D:do if(a[k+81>>0]|0){if(n|(c[k+480>>2]|0)!=0)break;ra=(c[o>>2]|0)+-1|0;c[o>>2]=ra;if(ra|0)break;k=c[o+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,o);break D}l=o;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;ra=k+300|0;c[o>>2]=c[ra>>2];c[ra>>2]=o;break D}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ra=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ra;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else{if((j|0)<0)k=(c[p>>2]|0)+-1|0;else k=j;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,o,-9);break}if(n)break;c[l+(k*20|0)+16>>2]=o;a[m>>0]=-9}while(0);c[Ga+8>>2]=j;j=c[p>>2]|0;if((j|0)<=0){j=3;break}b[(c[Ja+104>>2]|0)+((j+-1|0)*20|0)+2>>1]=8;j=3}while(0);a[Ga+1>>0]=j;l=(U|0)==0;E:do if((da|0)==0&l){B=(((a[Ga>>0]|0)==0?0:256)|c[za>>2]&16384)&65535;q=c[wa>>2]|0;C=(q|0)!=0;do if(C){j=c[Oa>>2]|0;F:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);G:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=873;else{j=0;break F}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break G}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break G}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=873}while(0);if((Fa|0)==873)j=_d(l,224,0)|0;if(!j){j=0;break}T=j+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[Oa>>2]=j;Di(j,61,0,1,0)|0}while(0);k=c[q+8>>2]|0;do if(k){m=c[k>>2]|0;k=f+44|0;o=c[k>>2]|0;l=o+1|0;c[q+64>>2]=l;m=o+m|0;c[k>>2]=m;o=j+108|0;n=c[o>>2]|0;p=j+112|0;if((c[p>>2]|0)>(n|0)){c[o>>2]=n+1;A=c[j+104>>2]|0;a[A+(n*20|0)>>0]=73;b[A+(n*20|0)+2>>1]=0;c[A+(n*20|0)+4>>2]=0;c[A+(n*20|0)+8>>2]=l;c[A+(n*20|0)+12>>2]=m;c[A+(n*20|0)+16>>2]=0;a[A+(n*20|0)+1>>0]=0;A=k;break}else{Di(j,73,0,l,m)|0;A=k;break}}else{A=f+44|0;o=j+108|0;p=j+112|0}while(0);k=(c[A>>2]|0)+1|0;c[A>>2]=k;c[q+80>>2]=k;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=1;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,1,k,0)|0;if(a[q+20>>0]|0){n=c[A>>2]|0;m=n+1|0;c[q+84>>2]=m;n=n+2|0;c[A>>2]=n;k=q+88|0;c[k>>2]=n;n=f+40|0;l=c[n>>2]|0;c[n>>2]=l+1;n=q+56|0;c[n>>2]=l;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=1;c[Ca+(l*20|0)+8>>2]=m;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,1,m,0)|0;k=c[k>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=0;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,0,k,0)|0;m=c[n>>2]|0;k=c[q+44>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=111;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=m;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0;break}else{Di(j,111,m,k,0)|0;break}}x=f+40|0;y=q+44|0;z=j+104|0;w=q;do{v=w+40|0;k=c[v>>2]|0;do if(c[k+4>>2]&4096){if((a[w+17>>0]|0)==87){Fa=944;break}n=c[(c[w+68>>2]|0)+20>>2]|0;t=c[f>>2]|0;u=c[n>>2]|0;r=u+1|0;s=r*5|0;l=s+20|0;q=t+272|0;H:do if(c[q>>2]|0)if(!(a[t+81>>0]|0))Fa=909;else{r=0;m=0;n=1}else{do if(!(0<0|(0==0?(e[t+276>>1]|0)>>>0<l>>>0:0))){k=t+300|0;m=c[k>>2]|0;if(m|0){c[k>>2]=c[m>>2];Fa=t+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=910;break H}k=t+296|0;m=c[k>>2]|0;if(!m){k=t+292|0;break}else{c[k>>2]=c[m>>2];Fa=t+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=910;break H}}else k=t+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=909}while(0);if((Fa|0)==909){m=_d(t,l,0)|0;Fa=910}I:do if((Fa|0)==910){Fa=0;if(m|0){q=m+16|0;c[q>>2]=m+20+(r<<2);b[m+6>>1]=u;b[m+8>>1]=r;a[m+4>>0]=a[t+78>>0]|0;c[m+12>>2]=t;c[m>>2]=1;gw(m+24|0,0,s+-4|0)|0;if((u|0)<=0){r=m;n=0;break}l=n+4|0;n=0;while(1){k=Yi(f,c[l>>2]|0)|0;if(!k)k=c[(c[f>>2]|0)+8>>2]|0;c[m+20+(n<<2)>>2]=k;a[(c[q>>2]|0)+n>>0]=a[l+12>>0]|0;n=n+1|0;if((n|0)==(u|0)){r=m;n=0;break I}else l=l+20|0}}k=t+81|0;if(a[k>>0]|0){r=0;n=1;break}if(a[t+82>>0]|0){r=0;n=1;break}a[k>>0]=1;if((c[t+180>>2]|0)>0)c[t+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[t+236>>2]|0;if(!k){r=0;n=1;break}c[k+12>>2]=7;r=0;n=1}while(0);l=c[x>>2]|0;c[x>>2]=l+1;k=w+56|0;c[k>>2]=l;Ca=c[A>>2]|0;q=w+60|0;c[q>>2]=Ca+1;c[A>>2]=Ca+3;do if(m){if((a[(c[(c[v>>2]|0)+32>>2]|0)+1>>0]|0)!=105)break;a[c[m+16>>2]>>0]=1;l=c[k>>2]|0}while(0);k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ca=c[z>>2]|0;a[Ca+(k*20|0)>>0]=113;b[Ca+(k*20|0)+2>>1]=0;c[Ca+(k*20|0)+4>>2]=l;c[Ca+(k*20|0)+8>>2]=2;c[Ca+(k*20|0)+12>>2]=0;c[Ca+(k*20|0)+16>>2]=0;a[Ca+(k*20|0)+1>>0]=0}else Di(j,113,l,2,0)|0;k=c[j>>2]|0;J:do if(a[k+81>>0]|0){if(n|(c[k+480>>2]|0)!=0)break;Ca=(c[r>>2]|0)+-1|0;c[r>>2]=Ca;if(Ca|0)break;k=c[r+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,r);break J}l=r;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Ca=k+300|0;c[r>>2]=c[Ca>>2];c[Ca>>2]=r;break J}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Ca=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else{Aa=c[z>>2]|0;Ca=(c[o>>2]|0)+-1|0;a[Aa+(Ca*20|0)+1>>0]=-9;c[Aa+(Ca*20|0)+16>>2]=r}while(0);k=(c[q>>2]|0)+1|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[z>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=0;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}else Fa=944;while(0);do if((Fa|0)==944){Fa=0;k=c[k+32>>2]|0;if((k|0)==43457|(k|0)==43467){l=c[A>>2]|0;c[w+60>>2]=l+1;k=c[x>>2]|0;c[x>>2]=k+1;c[w+56>>2]=k;c[A>>2]=l+2;l=c[y>>2]|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;Ca=c[z>>2]|0;a[Ca+(m*20|0)>>0]=111;b[Ca+(m*20|0)+2>>1]=0;c[Ca+(m*20|0)+4>>2]=k;c[Ca+(m*20|0)+8>>2]=l;c[Ca+(m*20|0)+12>>2]=0;c[Ca+(m*20|0)+16>>2]=0;a[Ca+(m*20|0)+1>>0]=0;break}else{Di(j,111,k,l,0)|0;break}}if(!((k|0)==40587|(k|0)==40592))break;k=c[x>>2]|0;c[x>>2]=k+1;c[w+56>>2]=k;l=c[y>>2]|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;Ca=c[z>>2]|0;a[Ca+(m*20|0)>>0]=111;b[Ca+(m*20|0)+2>>1]=0;c[Ca+(m*20|0)+4>>2]=k;c[Ca+(m*20|0)+8>>2]=l;c[Ca+(m*20|0)+12>>2]=0;c[Ca+(m*20|0)+16>>2]=0;a[Ca+(m*20|0)+1>>0]=0;break}else{Di(j,111,k,l,0)|0;break}}while(0);w=c[w+32>>2]|0}while((w|0)!=0)}while(0);k=h+6|0;Q=ql(f,ta,D,c[La>>2]|0,c[h>>2]|0,B,b[k>>1]|0)|0;if(!Q){m=1;break c}j=b[Q+72>>1]|0;if(j<<16>>16<(b[k>>1]|0))b[k>>1]=j;do if(a[Ga>>0]|0){j=a[Q+51>>0]|0;if(!(j<<24>>24))break;a[Ga+1>>0]=j}while(0);k=c[La>>2]|0;do if(!k)Fa=965;else{l=a[Q+47>>0]|0;c[La+4>>2]=l;if(!(a[Q+52>>0]|0))j=Q+32|0;else j=Q+752+(((d[Q+46>>0]|0)+-1|0)*80|0)+16|0;c[La+28>>2]=c[j>>2];if((c[k>>2]|0)!=(l|0))break;c[La>>2]=0;Fa=965}while(0);do if((Fa|0)==965){j=c[La+20>>2]|0;if((j|0)<=-1)break;k=c[Ja>>2]|0;if(a[k+81>>0]|0)break;Ca=c[Ja+104>>2]|0;za=Ca+(j*20|0)+1|0;Aa=Ca+(j*20|0)+16|0;kg(k,a[za>>0]|0,c[Aa>>2]|0);a[za>>0]=0;c[Aa>>2]=0;a[Ca+(j*20|0)>>0]=-86}while(0);if(!C){rl(f,h,-1,La,Ga,i,c[Q+32>>2]|0,c[Q+36>>2]|0);sl(Q);j=0;Fa=1796;break}Z=c[_>>2]|0;m=Z+-1|0;W=Z+-2|0;X=Z+-3|0;c[_>>2]=X;w=f+44|0;Y=(c[w>>2]|0)+1|0;c[w>>2]=Y;V=c[wa>>2]|0;J=c[V+12>>2]|0;j=c[Oa>>2]|0;K:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);L:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=983;else{S=0;break K}else{do if((e[l+276>>1]|0)>=224){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break L}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break L}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=983}while(0);if((Fa|0)==983)k=_d(l,224,0)|0;if(!k){S=0;break}T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=l;j=l+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;S=k}else S=j;while(0);o=c[va>>2]|0;p=c[o+48>>2]|0;o=b[(c[o+24>>2]|0)+42>>1]|0;q=o<<16>>16;K=c[_>>2]|0;E=K+-1|0;c[_>>2]=E;z=Ea+20|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;c[Ea>>2]=f;z=Ea+4|0;c[z>>2]=V;c[Ea+8>>2]=S;c[Ea+12>>2]=Y;c[Ea+16>>2]=m;P=c[V+44>>2]|0;R=Ea+36|0;c[R>>2]=P;O=P+1|0;B=Ea+28|0;c[B>>2]=P+2;H=Ea+44|0;c[H>>2]=P+3;P=V+17|0;M:do switch(a[P>>0]|0){case 83:{if((a[V+16>>0]|0)==86)break M;k=c[V+24>>2]|0;j=c[f>>2]|0;c[Da>>2]=0;do if(k|0){Wj(j,k,a[j+78>>0]|0,67,Da)|0;n=c[Da>>2]|0;if(!n)break;l=n+8|0;m=b[l>>1]|0;j=m&65535;do if(!(j&4)){if(j&8|0){k=Mg(+g[n>>3])|0;L()|0;j=m;break}if(!(j&18)){k=0;j=m;break}k=Ng(a[n+10>>0]|0,c[n+12>>2]|0,c[n+16>>2]|0)|0;L()|0;j=b[l>>1]|0}else{k=c[n>>2]|0;j=m}while(0);l=(k|0)<1;if(!((j&9216)==0?!(c[n+24>>2]|0):0))Cg(n);j=c[n+32>>2]|0;do if(!j)Fa=1007;else{if(c[j+480>>2]|0){Xd(j,n);break}k=n;if((c[j+304>>2]|0)>>>0>k>>>0){Fa=1007;break}if((c[j+308>>2]|0)>>>0<=k>>>0){Fa=1007;break}Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n}while(0);do if((Fa|0)==1007)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(l)break M;c[Ea+24>>2]=1;break M}while(0);break}case 87:{if(c[V+84>>2]|0)break M;j=V;do{Ca=c[(c[j+40>>2]|0)+32>>2]|0;if((Ca|0)==40592|((Ca|0)==40587|((Ca|0)==43457|(Ca|0)==43467)))break M;j=c[j+32>>2]|0}while((j|0)!=0);if((a[V+18>>0]|0)!=85){c[Ea+24>>2]=1;break M}if((a[V+16>>0]|0)==86)break M;k=c[V+28>>2]|0;j=c[f>>2]|0;c[Da>>2]=0;do if(k|0){Wj(j,k,a[j+78>>0]|0,67,Da)|0;n=c[Da>>2]|0;if(!n)break;l=n+8|0;m=b[l>>1]|0;j=m&65535;do if(!(j&4)){if(j&8|0){k=Mg(+g[n>>3])|0;L()|0;j=m;break}if(!(j&18)){k=0;j=m;break}k=Ng(a[n+10>>0]|0,c[n+12>>2]|0,c[n+16>>2]|0)|0;L()|0;j=b[l>>1]|0}else{k=c[n>>2]|0;j=m}while(0);l=(k|0)<1;if(!((j&9216)==0?!(c[n+24>>2]|0):0))Cg(n);j=c[n+32>>2]|0;do if(!j)Fa=1036;else{if(c[j+480>>2]|0){Xd(j,n);break}k=n;if((c[j+304>>2]|0)>>>0>k>>>0){Fa=1036;break}if((c[j+308>>2]|0)>>>0<=k>>>0){Fa=1036;break}Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n}while(0);do if((Fa|0)==1036)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(l)break M;c[Ea+24>>2]=3;break M}while(0);break}default:c[Ea+24>>2]=2}while(0);j=c[w>>2]|0;n=j+1|0;j=j+q|0;t=j+1|0;u=j+2|0;c[w>>2]=u;switch(a[P>>0]|0){case 83:case 85:{j=j+3|0;c[w>>2]=j;G=j;break}default:{G=0;j=u}}F=V+18|0;switch(a[F>>0]|0){case 83:case 85:{j=j+1|0;c[w>>2]=j;D=j;break}default:D=0}C=V+16|0;if((a[C>>0]|0)==76){y=0;x=0}else{if(!J)m=0;else m=c[J>>2]|0;k=(c[V+72>>2]|0)+n|0;l=c[V+8>>2]|0;if(l)k=(c[l>>2]|0)+k|0;y=j+m|0;c[Ea+32>>2]=y+1;y=y+m|0;c[Ea+40>>2]=y+1;y=y+m|0;c[Ea+48>>2]=y+1;c[w>>2]=y+m;y=j+1|0;x=k}M=S+108|0;N=S+112|0;if(o<<16>>16>0){k=S+104|0;j=0;do{l=j+n|0;m=c[M>>2]|0;if((c[N>>2]|0)>(m|0)){c[M>>2]=m+1;Da=c[k>>2]|0;a[Da+(m*20|0)>>0]=90;b[Da+(m*20|0)+2>>1]=0;c[Da+(m*20|0)+4>>2]=p;c[Da+(m*20|0)+8>>2]=j;c[Da+(m*20|0)+12>>2]=l;c[Da+(m*20|0)+16>>2]=0;a[Da+(m*20|0)+1>>0]=0}else Di(S,90,p,j,l)|0;j=j+1|0}while((j|0)!=(q|0))}j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=92;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=n;c[Da+(j*20|0)+8>>2]=q;c[Da+(j*20|0)+12>>2]=t;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,92,n,q,t)|0;I=V+8|0;q=c[I>>2]|0;do if(q){r=c[q>>2]|0;s=(c[V+72>>2]|0)+n|0;o=c[f>>2]|0;m=r+1|0;n=m*5|0;l=n+20|0;p=o+272|0;N:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=1074;else{n=0;l=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1075;break N}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1075;break N}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=1074}while(0);if((Fa|0)==1074){k=_d(o,l,0)|0;Fa=1075}do if((Fa|0)==1075){do if(!k){j=o+81|0;if(a[j>>0]|0){n=0;p=1;break}if(a[o+82>>0]|0){n=0;p=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){n=0;p=1;break}c[j+12>>2]=7;n=0;p=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;n=k;p=0}while(0);if(!((r|0)>0&(k|0)!=0)){l=p;break}o=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[o>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0)){l=p;break}else l=l+20|0}}while(0);o=(c[w>>2]|0)+1|0;c[w>>2]=o;m=V+64|0;j=c[m>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Da=c[S+104>>2]|0;a[Da+(k*20|0)>>0]=87;b[Da+(k*20|0)+2>>1]=0;c[Da+(k*20|0)+4>>2]=s;c[Da+(k*20|0)+8>>2]=j;c[Da+(k*20|0)+12>>2]=r;c[Da+(k*20|0)+16>>2]=0;a[Da+(k*20|0)+1>>0]=0}else k=Di(S,87,s,j,r)|0;j=c[S>>2]|0;O:do if(a[j+81>>0]|0){if(l|(c[j+480>>2]|0)!=0)break;Da=(c[n>>2]|0)+-1|0;c[n>>2]=Da;if(Da|0)break;j=c[n+12>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,n);break O}l=n;if((c[j+304>>2]|0)>>>0>l>>>0)break;if((c[j+308>>2]|0)>>>0<=l>>>0)break;Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n;break O}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else{Ca=c[S+104>>2]|0;Da=(c[M>>2]|0)+-1|0;a[Ca+(Da*20|0)+1>>0]=-9;c[Ca+(Da*20|0)+16>>2]=n}while(0);l=k+2|0;j=k+4|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Da=c[S+104>>2]|0;a[Da+(k*20|0)>>0]=16;b[Da+(k*20|0)+2>>1]=0;c[Da+(k*20|0)+4>>2]=l;c[Da+(k*20|0)+8>>2]=j;c[Da+(k*20|0)+12>>2]=l;c[Da+(k*20|0)+16>>2]=0;a[Da+(k*20|0)+1>>0]=0}else Di(S,16,l,j,l)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=12;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=o;c[Da+(j*20|0)+8>>2]=0;c[Da+(j*20|0)+12>>2]=0;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else j=Di(S,12,o,0,0)|0;m=c[m>>2]|0;k=r+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;v=c[S+104>>2]|0;a[v+(l*20|0)>>0]=78;b[v+(l*20|0)+2>>1]=0;c[v+(l*20|0)+4>>2]=s;c[v+(l*20|0)+8>>2]=m;c[v+(l*20|0)+12>>2]=k;c[v+(l*20|0)+16>>2]=0;a[v+(l*20|0)+1>>0]=0;v=j;A=o;break}else{Di(S,78,s,m,k)|0;v=j;A=o;break}}else{v=0;A=0}while(0);j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=121;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=O;c[Da+(j*20|0)+8>>2]=u;c[Da+(j*20|0)+12>>2]=0;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,121,O,u,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=122;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=O;c[Da+(j*20|0)+8>>2]=t;c[Da+(j*20|0)+12>>2]=u;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,122,O,t,u)|0;j=c[V+80>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;t=c[S+104>>2]|0;a[t+(k*20|0)>>0]=52;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=j;c[t+(k*20|0)+8>>2]=0;c[t+(k*20|0)+12>>2]=u;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=k}else t=Di(S,52,j,0,u)|0;j=c[Oa>>2]|0;P:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);Q:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=1136;else{j=0;break P}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];Da=l+284|0;c[Da>>2]=(c[Da>>2]|0)+1;break Q}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];Da=l+284|0;c[Da>>2]=(c[Da>>2]|0)+1;break Q}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=1136}while(0);if((Fa|0)==1136)j=_d(l,224,0)|0;if(!j){j=0;break}T=j+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[Oa>>2]=j;Di(j,61,0,1,0)|0}while(0);q=j+108|0;r=j+112|0;s=j+104|0;u=V+84|0;o=V;p=0;do{n=c[o+40>>2]|0;k=c[o+48>>2]|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=73;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0}else Di(j,73,0,k,0)|0;k=c[(c[o+68>>2]|0)+20>>2]|0;if(!k)k=0;else k=c[k>>2]|0;p=(p|0)>(k|0)?p:k;do if(!(c[u>>2]|0)){Da=c[n+32>>2]|0;do if((Da|0)==43457|(Da|0)==43467){k=o+60|0;l=c[k>>2]|0;m=c[q>>2]|0;if((c[r>>2]|0)>(m|0)){c[q>>2]=m+1;Da=c[s>>2]|0;a[Da+(m*20|0)>>0]=70;b[Da+(m*20|0)+2>>1]=0;c[Da+(m*20|0)+4>>2]=0;c[Da+(m*20|0)+8>>2]=l;c[Da+(m*20|0)+12>>2]=0;c[Da+(m*20|0)+16>>2]=0;a[Da+(m*20|0)+1>>0]=0}else Di(j,70,0,l,0)|0;k=(c[k>>2]|0)+1|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=70;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}while(0);if(!(c[n+4>>2]&4096))break;k=c[o+56>>2]|0;if(!k)break;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=-118;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=k;c[Da+(l*20|0)+8>>2]=0;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0}else Di(j,138,k,0,0)|0;k=(c[o+60>>2]|0)+1|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=70;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}while(0);o=c[o+32>>2]|0}while((o|0)!=0);n=c[w>>2]|0;c[w>>2]=n+p;c[Ea+20>>2]=n+1;n=(G|0)!=0;if(n){j=c[V+24>>2]|0;do if(j){if((a[j>>0]|0)!=-88){m=Jj(f,j,G)|0;Fa=1172;break}m=c[Oa>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[m+104>>2]|0;a[Da+(l*20|0)>>0]=78;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=j;c[Da+(l*20|0)+8>>2]=G;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,G,0)|0;break}}else{m=Jj(f,0,G)|0;Fa=1172}while(0);do if((Fa|0)==1172){if((m|0)==(G|0))break;j=c[Oa>>2]|0;if(!j)break;k=j+108|0;l=c[k>>2]|0;if((c[j+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[j+104>>2]|0;a[Da+(l*20|0)>>0]=79;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=m;c[Da+(l*20|0)+8>>2]=G;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,79,m,G,0)|0;break}}while(0);pm(f,G,(a[C>>0]|0)==86?3:0)}o=(D|0)!=0;if(o){j=c[V+28>>2]|0;do if(j){if((a[j>>0]|0)!=-88){m=Jj(f,j,D)|0;Fa=1186;break}m=c[Oa>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[m+104>>2]|0;a[Da+(l*20|0)>>0]=78;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=j;c[Da+(l*20|0)+8>>2]=D;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,D,0)|0;break}}else{m=Jj(f,0,D)|0;Fa=1186}while(0);do if((Fa|0)==1186){if((m|0)==(D|0))break;j=c[Oa>>2]|0;if(!j)break;k=j+108|0;l=c[k>>2]|0;if((c[j+112>>2]|0)>(l|0)){c[k>>2]=l+1;Fa=c[j+104>>2]|0;a[Fa+(l*20|0)>>0]=79;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=m;c[Fa+(l*20|0)+8>>2]=D;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(j,79,m,D,0)|0;break}}while(0);pm(f,D,(a[C>>0]|0)==86?4:1)}j=a[P>>0]|0;if(n&j<<24>>24==(a[F>>0]|0)){j=j<<24>>24==83?57:55;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=j;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=G;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=D;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else k=Di(S,j,G,0,D)|0;qm(c[Ea>>2]|0,c[z>>2]|0,0);j=c[R>>2]|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=36;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=1;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;rm(Ea);j=c[R>>2]|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=-118;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,138,j,0,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=E;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,E,0)|0;l=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else j=59308;c[j+8>>2]=l;j=a[P>>0]|0}do if(j<<24>>24==83){if(!(o&(a[C>>0]|0)!=86))break;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=101;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=G;c[Fa+(j*20|0)+8>>2]=D;c[Fa+(j*20|0)+12>>2]=G;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0;break}else{Di(S,101,G,D,G)|0;break}}while(0);do if((a[P>>0]|0)!=87){j=c[B>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,36,j,1,0)|0;break}}while(0);j=c[R>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;j=c[H>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;m=(y|0)!=0;do if((J|0)!=0&m){j=(c[J>>2]|0)+-1|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=78;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=x;c[Fa+(k*20|0)+8>>2]=y;c[Fa+(k*20|0)+12>>2]=j;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,78,x,y,j)|0;j=c[Ea+32>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,78,y,j,k)|0;j=c[Ea+40>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,78,y,j,k)|0;j=c[Ea+48>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(S,78,y,j,k)|0;break}}while(0);j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=E;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,E,0)|0;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((t|0)<0?k+-1|0:t)*20|0)|0;else j=59308;c[j+8>>2]=k;if(m)sm(f,J,x,y,E);j=a[P>>0]|0;R:do if(j<<24>>24==83){tm(Ea,3,0,0)|0;if((a[F>>0]|0)==87)break;if((a[C>>0]|0)!=86){tm(Ea,1,D,0)|0;tm(Ea,2,G,0)|0;break}l=c[_>>2]|0;j=l+-1|0;c[_>>2]=j;k=c[M>>2]|0;um(Ea,57,c[R>>2]|0,D,c[H>>2]|0,j);tm(Ea,2,G,0)|0;tm(Ea,1,0,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;k=c[S+12>>2]|0;j=0-l|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,S,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];break}}else{if((a[F>>0]|0)==85){do if(j<<24>>24==85){Fa=(a[C>>0]|0)==86;tm(Ea,3,D,0)|0;if(!Fa)break;tm(Ea,2,G,0)|0;tm(Ea,1,0,0)|0;break R}else tm(Ea,3,D,0)|0;while(0);tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;break}tm(Ea,3,0,0)|0;if((a[F>>0]|0)==87)break;if((a[C>>0]|0)!=86){do if(o){j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=47;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=D;c[Fa+(j*20|0)+8>>2]=0;c[Fa+(j*20|0)+12>>2]=1;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0;break}else{j=Di(S,47,D,0,1)|0;break}}else j=0;while(0);tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;if(!o)break;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((j|0)<0?k+-1|0:j)*20|0)|0;else j=59308;c[j+8>>2]=k;break}k=c[M>>2]|0;if(o){l=(c[_>>2]|0)+-1|0;c[_>>2]=l;um(Ea,57,c[R>>2]|0,D,c[H>>2]|0,l)}else l=0;tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;if(!o)break;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;k=c[S+12>>2]|0;j=~l;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,S,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];break}}while(0);k=c[S+12>>2]|0;j=0-K|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,S,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];sl(Q);j=c[M>>2]|0;if(!(c[I>>2]|0))p=0;else{if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=70;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=A;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else j=Di(S,70,0,A,0)|0;l=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))k=(c[S+104>>2]|0)+(((v|0)<0?l+-1|0:v)*20|0)|0;else k=59308;c[k+8>>2]=l;p=j;j=l}if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;o=c[S+104>>2]|0;a[o+(j*20|0)>>0]=36;b[o+(j*20|0)+2>>1]=0;c[o+(j*20|0)+4>>2]=O;c[o+(j*20|0)+8>>2]=0;c[o+(j*20|0)+12>>2]=0;c[o+(j*20|0)+16>>2]=0;a[o+(j*20|0)+1>>0]=0;o=j}else o=Di(S,36,O,0,0)|0;j=a[P>>0]|0;do if((a[F>>0]|0)==85){do if(j<<24>>24==85){Fa=(a[C>>0]|0)==86;tm(Ea,3,D,0)|0;if(!Fa)break;tm(Ea,2,G,0)|0}else tm(Ea,3,D,0)|0;while(0);tm(Ea,1,0,0)|0;k=a[(c[S>>2]|0)+81>>0]|0;l=c[M>>2]|0}else{tm(Ea,3,0,0)|0;if(j<<24>>24!=83){k=c[M>>2]|0;m=tm(Ea,1,0,1)|0;tm(Ea,2,G,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;l=c[M>>2]|0;k=a[(c[S>>2]|0)+81>>0]|0;if(!(k<<24>>24))j=(c[S+104>>2]|0)+(((m|0)<0?l+-1|0:m)*20|0)|0;else j=59308;c[j+8>>2]=l;break}do if((a[C>>0]|0)!=86){j=c[M>>2]|0;if((a[F>>0]|0)==87){n=tm(Ea,1,G,1)|0;l=tm(Ea,2,0,1)|0;break}else{n=tm(Ea,1,D,1)|0;l=tm(Ea,2,G,1)|0;break}}else{j=c[M>>2]|0;l=tm(Ea,2,G,1)|0;n=tm(Ea,1,0,1)|0}while(0);k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=11;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,11,0,j,0)|0;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else j=59308;c[j+8>>2]=k;m=tm(Ea,1,0,1)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;l=c[M>>2]|0;k=a[(c[S>>2]|0)+81>>0]|0;if(!(k<<24>>24)){j=l+-1|0;Fa=c[S+104>>2]|0;c[Fa+(((n|0)<0?j:n)*20|0)+8>>2]=l;j=Fa+(((m|0)<0?j:m)*20|0)|0}else{c[14829]=l;j=59308}c[j+8>>2]=l}while(0);if(!(k<<24>>24))j=(c[S+104>>2]|0)+(((o|0)<0?l+-1|0:o)*20|0)|0;else j=59308;c[j+8>>2]=l;j=c[R>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=-118;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,138,j,0,0)|0;do if(c[I>>2]|0){j=c[u>>2]|0;do if(j|0){k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=1;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,70,1,j,0)|0;j=c[V+88>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,70,0,j,0)|0;break}}while(0);k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((p|0)<0?k+-1|0:p)*20|0)|0;else j=59308;c[j+4>>2]=k;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=66;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=A;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,66,A,0,0)|0;break}}while(0);n=Ja+108|0;j=c[n>>2]|0;m=Ja+112|0;if((c[m>>2]|0)>(j|0)){c[n>>2]=j+1;Fa=c[Ja+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=X;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(Ja,11,0,X,0)|0;l=Ja+12|0;j=c[l>>2]|0;k=0-Z|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,Ja,k);else c[(c[j+64>>2]|0)+(k<<2)>>2]=c[n>>2];c[La+28>>2]=0;rl(f,h,-1,La,Ga,i,W,X);j=c[l>>2]|0;k=1-Z|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,Ja,k);else c[(c[j+64>>2]|0)+(k<<2)>>2]=c[n>>2];j=c[n>>2]|0;if((c[m>>2]|0)>(j|0)){c[n>>2]=j+1;Fa=c[Ja+104>>2]|0;a[Fa+(j*20|0)>>0]=66;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=Y;c[Fa+(j*20|0)+8>>2]=0;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(Ja,66,Y,0,0)|0;k=c[l>>2]|0;j=2-Z|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Ja,j);j=0;Fa=1796;break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[n>>2];j=0;Fa=1796;break}}else{z=(U|0)!=0;do if(z){k=c[h>>2]|0;j=c[k>>2]|0;if((j|0)>0){k=k+4|0;while(1){b[k+16+2>>1]=0;if((j|0)>1){k=k+20|0;j=j+-1|0}else break}}j=c[U>>2]|0;if((j|0)>0){k=U+4|0;while(1){b[k+16+2>>1]=0;if((j|0)>1){k=k+20|0;j=j+-1|0}else break}}j=h+6|0;if((b[j>>1]|0)<=66)break;b[j>>1]=66}else b[h+6>>1]=0;while(0);k=c[La>>2]|0;j=(k|0)==0;S:do if(l&j)R=1;else{if(l|j){R=0;break}j=c[U>>2]|0;if((j|0)!=(c[k>>2]|0)){R=0;break}if((j|0)<=0){R=1;break}j=0;while(1){if((a[U+4+(j*20|0)+12>>0]|0)!=(a[k+4+(j*20|0)+12>>0]|0)){R=0;break S}if(bk(0,c[U+4+(j*20|0)>>2]|0,c[k+4+(j*20|0)>>2]|0,-1)|0){R=0;break S}j=j+1|0;if((j|0)>=(c[U>>2]|0)){R=1;break}}}while(0);W=c[_>>2]|0;V=W+-1|0;c[_>>2]=V;S=Ea+12|0;c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;c[Ea>>2]=f;c[Ea+4>>2]=ta;c[Ea+8>>2]=Ma;S=f+44|0;c[Ma+16>>2]=(c[S>>2]|0)+1;if(z)j=c[U>>2]|0;else j=0;A=Ma+12|0;c[A>>2]=j;c[Ma+24>>2]=U;do if($|0){j=c[$>>2]|0;if((j|0)<=0)break;n=Da+4|0;o=Da+8|0;p=Da+12|0;q=Da+16|0;r=Da+24|0;l=$+4|0;m=0;while(1){k=c[l>>2]|0;c[n>>2]=133;c[o>>2]=134;c[p>>2]=67;c[q>>2]=0;c[r>>2]=Ea;c[Da>>2]=0;if(k){_j(Da,k)|0;j=c[$>>2]|0}m=m+1|0;if((m|0)>=(j|0))break;else l=l+20|0}}while(0);n=c[La>>2]|0;do if(n|0){j=c[n>>2]|0;if((j|0)<=0)break;o=Da+4|0;p=Da+8|0;q=Da+12|0;r=Da+16|0;s=Da+24|0;l=n+4|0;m=0;while(1){k=c[l>>2]|0;c[o>>2]=133;c[p>>2]=134;c[q>>2]=67;c[r>>2]=0;c[s>>2]=Ea;c[Da>>2]=0;if(k){_j(Da,k)|0;j=c[n>>2]|0}m=m+1|0;if((m|0)>=(j|0))break;else l=l+20|0}}while(0);do if(!X)C=D;else{if(!z){c[Da+4>>2]=133;c[Da+8>>2]=134;c[Da+12>>2]=67;c[Da+16>>2]=0;c[Da+24>>2]=Ea;c[Da>>2]=0;_j(Da,X)|0;C=D;break}j=Da+8|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[Da>>2]=f;c[Da+4>>2]=135;c[Da+24>>2]=h;j=c[u>>2]|0;if(j|0)_j(Da,j)|0;C=c[sa>>2]|0;c[Da+4>>2]=133;c[Da+8>>2]=134;c[Da+12>>2]=67;c[Da+16>>2]=0;c[Da+24>>2]=Ea;c[Da>>2]=0;_j(Da,X)|0}while(0);I=Ma+32|0;y=Ma+36|0;c[y>>2]=c[I>>2];do if(!(c[t>>2]|0)){if(c[u>>2]|0){x=0;j=0;break}if((c[Ma+44>>2]|0)!=1){x=0;j=0;break}j=c[c[Ma+40>>2]>>2]|0;p=c[j+20>>2]|0;do if(!p){j=0;k=0}else{if((c[p>>2]|0)!=1){j=0;k=0;break}k=c[j+8>>2]|0;o=a[k>>0]|0;j=(d[208+(o&255)>>0]|0)+-109|0;o=o<<24>>24==0|(j|0)!=0;if(o)l=j;else{m=44311;n=k;do{n=n+1|0;m=m+1|0;wa=a[n>>0]|0;l=(d[208+(wa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(l|0)!=0))}if(l){if(!o){l=44315;do{k=k+1|0;l=l+1|0;wa=a[k>>0]|0;j=(d[208+(wa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(j|0)!=0))}if(!j){l=1;k=2}else{j=0;k=0;break}}else{l=0;k=1}j=gk(Na,p,0)|0;if(!j){j=0;break}a[j+16>>0]=l}while(0);x=k&255}else{x=0;j=0}while(0);T=Ma+44|0;n=c[T>>2]|0;if((n|0)>0){q=Ea+24|0;r=Ma+40|0;s=Da+4|0;t=Da+8|0;u=Da+12|0;v=Da+16|0;w=Da+24|0;p=0;k=b[q>>1]|0;do{k=k|8;b[q>>1]=k;o=c[(c[(c[r>>2]|0)+(p<<4)>>2]|0)+20>>2]|0;do if(o){l=c[o>>2]|0;if((l|0)<=0)break;m=o+4|0;n=0;k=l;while(1){l=c[m>>2]|0;c[s>>2]=133;c[t>>2]=134;c[u>>2]=67;c[v>>2]=0;c[w>>2]=Ea;c[Da>>2]=0;if(l){_j(Da,l)|0;k=c[o>>2]|0}n=n+1|0;if((n|0)>=(k|0))break;else m=m+20|0}k=b[q>>1]|0;n=c[T>>2]|0}while(0);k=k&-9;b[q>>1]=k;p=p+1|0}while((p|0)<(n|0))}o=c[S>>2]|0;c[Ma+20>>2]=o;T:do if(!(a[xa>>0]|0)){do if(z){y=f+40|0;p=c[y>>2]|0;c[y>>2]=p+1;O=Ma+4|0;c[O>>2]=p;p=c[f>>2]|0;r=c[U>>2]|0;n=(c[I>>2]|0)+1+r|0;o=n*5|0;m=o+20|0;q=p+272|0;U:do if(c[q>>2]|0)if(!(a[p+81>>0]|0))Fa=1431;else{E=0;q=1;z=0}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<m>>>0:0))){k=p+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Fa=p+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1432;break U}k=p+296|0;l=c[k>>2]|0;if(!l){k=p+292|0;break}else{c[k>>2]=c[l>>2];Fa=p+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1432;break U}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=1431}while(0);if((Fa|0)==1431){l=_d(p,m,0)|0;Fa=1432}do if((Fa|0)==1432){do if(!l){k=p+81|0;if(a[k>>0]|0){m=0;q=1;break}if(a[p+82>>0]|0){m=0;q=1;break}a[k>>0]=1;if((c[p+180>>2]|0)>0)c[p+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[p+236>>2]|0;if(!k){m=0;q=1;break}c[k+12>>2]=7;m=0;q=1}else{c[l+16>>2]=l+20+(n<<2);b[l+6>>1]=r;b[l+8>>1]=n;a[l+4>>0]=a[p+78>>0]|0;c[l+12>>2]=p;c[l>>2]=1;gw(l+24|0,0,o+-4|0)|0;m=l;q=0}while(0);if(!((r|0)>0&(l|0)!=0)){E=m;z=l;break}p=l+16|0;n=U+4|0;o=0;while(1){k=Yi(f,c[n>>2]|0)|0;if(!k)k=c[(c[f>>2]|0)+8>>2]|0;c[l+20+(o<<2)>>2]=k;a[(c[p>>2]|0)+o>>0]=a[n+12>>0]|0;o=o+1|0;if((o|0)==(r|0)){E=m;z=l;break}else n=n+20|0}}while(0);m=c[O>>2]|0;k=c[A>>2]|0;P=Ja+108|0;l=c[P>>2]|0;Q=Ja+112|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;H=c[Ja+104>>2]|0;a[H+(l*20|0)>>0]=114;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=m;c[H+(l*20|0)+8>>2]=k;c[H+(l*20|0)+12>>2]=0;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0;H=l}else H=Di(Ja,114,m,k,0)|0;k=c[Ja>>2]|0;V:do if(a[k+81>>0]|0){if(q|(c[k+480>>2]|0)!=0)break;Ea=(c[E>>2]|0)+-1|0;c[E>>2]=Ea;if(Ea|0){q=0;break}k=c[E+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,E);q=0;break V}l=E;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;q=k+300|0;c[E>>2]=c[q>>2];c[q>>2]=E;q=0;break V}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](E);q=0;break}else{q=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);q=0;break}}else{if((H|0)<0)k=(c[P>>2]|0)+-1|0;else k=H;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,E,-9);break}if(q){q=1;break}c[l+(k*20|0)+16>>2]=E;a[m>>0]=-9;q=0}while(0);A=c[S>>2]|0;M=A+1|0;G=A+2|0;J=A+3|0;K=c[_>>2]|0;F=K+-1|0;N=A+4|0;D=K+-2|0;c[_>>2]=D;A=A+5|0;k=c[U>>2]|0;Ea=k+N|0;B=Ea+1|0;c[S>>2]=Ea+k;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=70;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=0;c[Ea+(k*20|0)+8>>2]=G;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,70,0,G,0)|0;k=(c[U>>2]|0)+N|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=73;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=0;c[Ea+(l*20|0)+8>>2]=A;c[Ea+(l*20|0)+12>>2]=k;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,73,0,A,k)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=12;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=N;c[Ea+(k*20|0)+8>>2]=D;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,12,N,D,0)|0;C=ql(f,ta,C,U,0,R?576:64,0)|0;if(!C)break T;if((c[U>>2]|0)==(a[C+47>>0]|0)){n=0;o=0;m=0}else{if(!(a[Ga>>0]|0))k=43118;else k=(c[za>>2]&1|0)==0?43109:43118;c[Aa>>2]=k;nk(f,0,44319,Aa);u=c[U>>2]|0;p=c[I>>2]|0;if((p|0)>0){n=c[Ma+28>>2]|0;l=u;k=u;m=0;while(1){o=(c[n+(m*24|0)+12>>2]|0)>=(l|0)&1;k=k+o|0;m=m+1|0;if((m|0)>=(p|0)){x=k;break}else l=l+o|0}}else x=u;w=(x|0)==1;do if(w){k=f+19|0;l=a[k>>0]|0;if(!(l<<24>>24)){v=(c[S>>2]|0)+1|0;c[S>>2]=v;break}else{v=l+-1<<24>>24;a[k>>0]=v;v=c[f+148+((v&255)<<2)>>2]|0;break}}else{k=f+32|0;l=c[k>>2]|0;m=f+28|0;n=c[m>>2]|0;if((n|0)<(x|0)){v=c[S>>2]|0;c[S>>2]=v+x;v=v+1|0;break}else{c[k>>2]=l+x;c[m>>2]=n-x;v=l;break}}while(0);t=c[Oa>>2]|0;if((u|0)>0){m=t+108|0;n=t+112|0;o=t+104|0;k=U+4|0;l=0;while(1){p=l+v|0;r=Jj(f,c[k>>2]|0,p)|0;do if((r|0)!=(p|0)){s=c[m>>2]|0;if((c[n>>2]|0)>(s|0)){c[m>>2]=s+1;Ea=c[o>>2]|0;a[Ea+(s*20|0)>>0]=79;b[Ea+(s*20|0)+2>>1]=0;c[Ea+(s*20|0)+4>>2]=r;c[Ea+(s*20|0)+8>>2]=p;c[Ea+(s*20|0)+12>>2]=0;c[Ea+(s*20|0)+16>>2]=0;a[Ea+(s*20|0)+1>>0]=0;break}else{Di(t,79,r,p,0)|0;break}}while(0);l=l+1|0;if((l|0)==(u|0))break;else k=k+20|0}l=c[I>>2]|0}else l=p;if((l|0)>0){o=Ma+28|0;k=u;n=0;do{m=c[o>>2]|0;if((c[m+(n*24|0)+12>>2]|0)>=(k|0)){Vj(Ja,c[m+(n*24|0)>>2]|0,c[m+(n*24|0)+4>>2]|0,c[m+(n*24|0)+8>>2]|0,k+v|0);k=k+1|0;l=c[I>>2]|0}n=n+1|0}while((n|0)<(l|0))}n=f+19|0;k=a[n>>0]|0;if(!(k<<24>>24)){m=(c[S>>2]|0)+1|0;c[S>>2]=m}else{m=k+-1<<24>>24;a[n>>0]=m;m=c[f+148+((m&255)<<2)>>2]|0}k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=92;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=x;c[Ea+(k*20|0)+12>>2]=m;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,92,v,x,m)|0;k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=-125;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=k;c[Ea+(l*20|0)+8>>2]=m;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,131,k,m,0)|0;do if(m|0){k=a[n>>0]|0;if((k&255)>=8)break;a[n>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=m}while(0);do if(w){if(!v)break;k=a[n>>0]|0;if((k&255)>=8)break;a[n>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=v}else{k=f+28|0;if((c[k>>2]|0)>=(x|0))break;c[k>>2]=x;c[f+32>>2]=v}while(0);sl(C);o=c[y>>2]|0;c[y>>2]=o+1;c[Ma+8>>2]=o;k=a[n>>0]|0;if(!(k<<24>>24)){m=(c[S>>2]|0)+1|0;c[S>>2]=m}else{m=k+-1<<24>>24;a[n>>0]=m;m=c[f+148+((m&255)<<2)>>2]|0}k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=116;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=o;c[Ea+(k*20|0)+8>>2]=m;c[Ea+(k*20|0)+12>>2]=x;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,116,o,m,x)|0;k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=34;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=k;c[Ea+(l*20|0)+8>>2]=V;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,34,k,V,0)|0;a[Ma+1>>0]=1;n=1}W:do if(R){if(b[ua>>1]&4){Fa=1537;break}do if(!n){if(a[C+48>>0]|0)break;u=c[P>>2]|0;t=0;break W}while(0);c[La>>2]=0;k=c[La+20>>2]|0;l=c[Ja>>2]|0;if(a[l+81>>0]|0){Fa=1537;break}Fa=c[Ja+104>>2]|0;Da=Fa+(k*20|0)+1|0;Ea=Fa+(k*20|0)+16|0;kg(l,a[Da>>0]|0,c[Ea>>2]|0);a[Da>>0]=0;c[Ea>>2]=0;a[Fa+(k*20|0)>>0]=-86;Fa=1537}else Fa=1537;while(0);do if((Fa|0)==1537){l=c[P>>2]|0;if(!n){u=l;t=0;break}k=c[O>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;u=c[Ja+104>>2]|0;a[u+(l*20|0)>>0]=126;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=m;c[u+(l*20|0)+12>>2]=o;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;t=1;break}else{Di(Ja,126,k,m,o)|0;u=l;t=1;break}}while(0);l=c[U>>2]|0;if((l|0)>0){s=Ja+104|0;r=0;do{X:do if(t){k=r+B|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[s>>2]|0;a[Fa+(l*20|0)>>0]=90;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=o;c[Fa+(l*20|0)+8>>2]=r;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,90,o,r,k)|0;break}}else{a[Ma>>0]=1;k=c[U+4+(r*20|0)>>2]|0;p=r+B|0;do if(k){if((a[k>>0]|0)!=-88){n=Jj(f,k,p)|0;break}n=c[Oa>>2]|0;k=c[k+28>>2]|0;l=n+108|0;m=c[l>>2]|0;if((c[n+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[n+104>>2]|0;a[Fa+(m*20|0)>>0]=78;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=k;c[Fa+(m*20|0)+8>>2]=p;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break X}else{Di(n,78,k,p,0)|0;break X}}else n=Jj(f,0,p)|0;while(0);if((n|0)==(p|0))break;k=c[Oa>>2]|0;if(!k)break;l=k+108|0;m=c[l>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[k+104>>2]|0;a[Fa+(m*20|0)>>0]=79;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=n;c[Fa+(m*20|0)+8>>2]=p;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break}else{Di(k,79,n,p,0)|0;break}}while(0);r=r+1|0;l=c[U>>2]|0}while((r|0)<(l|0))}if(z|0)c[z>>2]=(c[z>>2]|0)+1;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=87;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=A;c[Fa+(k*20|0)+8>>2]=B;c[Fa+(k*20|0)+12>>2]=l;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else k=Di(Ja,87,A,B,l)|0;l=c[Ja>>2]|0;Y:do if(a[l+81>>0]|0){if(q|(c[l+480>>2]|0)!=0)break;Fa=(c[E>>2]|0)+-1|0;c[E>>2]=Fa;if(Fa|0)break;k=c[E+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,E);break Y}l=E;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Fa=k+300|0;c[E>>2]=c[Fa>>2];c[Fa>>2]=E;break Y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{Fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}else{if((k|0)<0)k=(c[P>>2]|0)+-1|0;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,E,-9);break}if(q)break;c[l+(k*20|0)+16>>2]=E;a[m>>0]=-9}while(0);o=c[P>>2]|0;k=o+1|0;if((c[Q>>2]|0)>(o|0)){c[P>>2]=k;Fa=c[Ja+104>>2]|0;a[Fa+(o*20|0)>>0]=16;b[Fa+(o*20|0)+2>>1]=0;c[Fa+(o*20|0)+4>>2]=k;c[Fa+(o*20|0)+8>>2]=0;c[Fa+(o*20|0)+12>>2]=k;c[Fa+(o*20|0)+16>>2]=0;a[Fa+(o*20|0)+1>>0]=0}else Di(Ja,16,k,0,k)|0;l=c[U>>2]|0;k=c[Oa>>2]|0;m=k+108|0;n=c[m>>2]|0;if((c[k+112>>2]|0)>(n|0)){c[m>>2]=n+1;Fa=c[k+104>>2]|0;a[Fa+(n*20|0)>>0]=77;b[Fa+(n*20|0)+2>>1]=0;c[Fa+(n*20|0)+4>>2]=B;c[Fa+(n*20|0)+8>>2]=A;c[Fa+(n*20|0)+12>>2]=l;c[Fa+(n*20|0)+16>>2]=0;a[Fa+(n*20|0)+1>>0]=0}else Di(k,77,B,A,l)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=F;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,J,F,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=47;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=G;c[Fa+(k*20|0)+8>>2]=V;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,47,G,V,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=N;c[Fa+(k*20|0)+8>>2]=D;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,N,D,0)|0;l=c[P>>2]|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))k=(c[Ja+104>>2]|0)+(((o|0)<0?l+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=l;tl(f,M,Ma);k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=1;c[Fa+(k*20|0)+8>>2]=M;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,70,1,M,0)|0;do if(t){k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=3;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=k;c[Fa+(l*20|0)+8>>2]=u;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,3,k,u,0)|0;break}}else{sl(C);k=c[Ja>>2]|0;if(a[k+81>>0]|0)break;Fa=c[Ja+104>>2]|0;Da=Fa+(H*20|0)+1|0;Ea=Fa+(H*20|0)+16|0;kg(k,a[Da>>0]|0,c[Ea>>2]|0);a[Da>>0]=0;c[Ea>>2]=0;a[Fa+(H*20|0)>>0]=-86}while(0);k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=F;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,J,F,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=11;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=V;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,11,0,V,0)|0;v=c[P>>2]|0;if((c[Q>>2]|0)>(v|0)){c[P>>2]=v+1;Fa=c[Ja+104>>2]|0;a[Fa+(v*20|0)>>0]=70;b[Fa+(v*20|0)+2>>1]=0;c[Fa+(v*20|0)+4>>2]=1;c[Fa+(v*20|0)+8>>2]=G;c[Fa+(v*20|0)+12>>2]=0;c[Fa+(v*20|0)+16>>2]=0;a[Fa+(v*20|0)+1>>0]=0}else Di(Ja,70,1,G,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=66;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;k=Ja+12|0;l=c[k>>2]|0;m=0-K|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,m);else c[(c[l+64>>2]|0)+(m<<2)>>2]=c[P>>2];u=c[P>>2]|0;l=u+2|0;if((c[Q>>2]|0)>(u|0)){c[P>>2]=u+1;Fa=c[Ja+104>>2]|0;a[Fa+(u*20|0)>>0]=47;b[Fa+(u*20|0)+2>>1]=0;c[Fa+(u*20|0)+4>>2]=M;c[Fa+(u*20|0)+8>>2]=l;c[Fa+(u*20|0)+12>>2]=0;c[Fa+(u*20|0)+16>>2]=0;a[Fa+(u*20|0)+1>>0]=0}else Di(Ja,47,M,l,0)|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=J;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;q=c[Oa>>2]|0;if((c[T>>2]|0)>0){r=q+108|0;s=q+112|0;t=q+104|0;o=c[Ma+40>>2]|0;p=0;while(1){l=c[(c[o>>2]|0)+20>>2]|0;n=c[o+8>>2]|0;if(!l)m=0;else m=c[l>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;Fa=c[t>>2]|0;a[Fa+(l*20|0)>>0]=-99;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=n;c[Fa+(l*20|0)+8>>2]=m;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(q,157,n,m,0)|0;l=c[o+4>>2]|0;m=c[q>>2]|0;Z:do if(a[m+81>>0]|0){if(!(c[l+4>>2]&16))break;do if(m|0){if(c[m+480>>2]|0){Xd(m,l);break Z}n=l;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;Fa=m+300|0;c[l>>2]=c[Fa>>2];c[Fa>>2]=l;break Z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else{Ea=c[t>>2]|0;Fa=(c[r>>2]|0)+-1|0;a[Ea+(Fa*20|0)+1>>0]=-8;c[Ea+(Fa*20|0)+16>>2]=l}while(0);p=p+1|0;if((p|0)>=(c[T>>2]|0))break;else o=o+16|0}}l=u+1|0;Tj(f,X,l,16);rl(f,h,-1,La,Ga,i,l,v);l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=J;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;m=c[k>>2]|0;l=1-K|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Ja,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[P>>2];ul(f,Ma);l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=70;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=0;c[Fa+(l*20|0)+8>>2]=M;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,70,0,M,0)|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=N;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,66,N,0,0)|0;break}}else{z=Ma+40|0;m=c[z>>2]|0;do if(!(c[sa>>2]|0)){l=c[h>>2]|0;if((c[l>>2]|0)!=1){Fa=1752;break}k=c[va>>2]|0;if((c[k>>2]|0)!=1){Fa=1752;break}if(c[k+28>>2]|0){Fa=1752;break}w=c[k+24>>2]|0;k=c[l+4>>2]|0;if(c[w+56>>2]|0){Fa=1752;break}if((n|0)==0|(a[k>>0]|0)!=-93){Fa=1752;break}if(!(c[(c[m+4>>2]|0)+4>>2]&256)){Fa=1752;break}if((w|0)==0?1:(c[k+4>>2]&2|0)!=0){Fa=1752;break}l=c[w+72>>2]|0;if(!l)u=-1e6;else{m=c[(c[f>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){u=k;break}else k=k+1|0}s=f+40|0;v=c[s>>2]|0;c[s>>2]=v+1;s=w+28|0;t=c[s>>2]|0;n=c[Ba>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<u;_:do if(!(l&m)){c[k>>2]=l|m;if((u|0)!=1)break;r=c[n>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[n+199>>0]|0)break;l=Pe(c[r>>2]|0,0,r,Da,0,542)|0;if(l|0){cd(n,32157,ya);c[n+12>>2]=l;break}Ea=c[Da>>2]|0;c[(c[k>>2]|0)+20>>2]=Ea;k=c[r+92>>2]|0;n=c[Ea+4>>2]|0;c[n+4>>2]=c[Ea>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Ea=(c[14820]|0)+1|0;c[14820]=Ea;c[14821]=(Ea|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;Fa=1688;break}else{k=Wa[c[29352>>2]&127](l)|0;Fa=1688}while(0);do if((Fa|0)==1688){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Ea=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);Ea=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((Ea|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break _}while(0)}while(0);Hj(f,u,c[s>>2]|0,0,c[w>>2]|0);s=w+36|0;l=c[w+8>>2]|0;$:do if(!(c[s>>2]&32)){k=0;Fa=1706}else{if(!l){l=t;n=0;r=0;q=1;break}k=l;while(1){Fa=k+55|0;if(((d[Fa>>0]|d[Fa+1>>0]<<8)&3)==2){Fa=1706;break $}k=c[k+20>>2]|0;if(!k){k=0;Fa=1706;break}}}while(0);do if((Fa|0)==1706){if(l){n=w+46|0;do{Ea=l+55|0;do if(!((d[Ea>>0]|d[Ea+1>>0]<<8)&4)){m=b[l+48>>1]|0;if(m<<16>>16>=(b[n>>1]|0))break;if(c[l+36>>2]|0)break;if(k|0?m<<16>>16>=(b[k+48>>1]|0):0)break;k=l}while(0);l=c[l+20>>2]|0}while((l|0)!=0)}if(!k){l=t;n=0;r=0;q=1;break}l=c[k+44>>2]|0;n=Ij(f,k)|0;r=k;q=0}while(0);o=Ja+108|0;k=c[o>>2]|0;p=Ja+112|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=108;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=l;c[Ea+(k*20|0)+12>>2]=u;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else k=Di(Ja,108,v,l,u)|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0)){Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)+1>>0]=-3;c[Ea+(k*20|0)+16>>2]=1}aa:do if(n|0){k=c[Ja>>2]|0;if(!(a[k+81>>0]|0)){k=(c[o>>2]|0)+-1|0;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9;break}else{Ei(Ja,l+(k*20|0)|0,n,-9);break}}if(c[k+480>>2]|0)break;Ea=(c[n>>2]|0)+-1|0;c[n>>2]=Ea;if(Ea|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break aa}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Ea=k+300|0;c[n>>2]=c[Ea>>2];c[Ea>>2]=n;break aa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Ea=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);k=c[(c[z>>2]|0)+8>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=93;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=v;c[Ea+(l*20|0)+8>>2]=k;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,93,v,k,0)|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=117;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=0;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,117,v,0,0)|0;if((a[f+199>>0]|0)!=2)break;do if(q){k=c[w>>2]|0;m=59952;l=59952}else{if(c[s>>2]&32){Ea=r+55|0;k=c[w>>2]|0;if(((d[Ea>>0]|d[Ea+1>>0]<<8)&3)==2){m=59952;l=59952;break}}else k=c[w>>2]|0;m=44411;l=c[r>>2]|0}while(0);c[Ca>>2]=k;c[Ca+4>>2]=m;c[Ca+8>>2]=l;nk(f,0,44393,Ca)}else Fa=1752;while(0);do if((Fa|0)==1752){do if(c[y>>2]|0){ba:do if((n|0)>0){k=0;do{if(c[(c[m+(k<<4)+4>>2]|0)+4>>2]&32|0)break ba;k=k+1|0}while((k|0)<(n|0))}else k=0;while(0);if((k|0)!=(n|0)){m=0;break}m=o+1|0;c[S>>2]=m;k=Ja+108|0;l=c[k>>2]|0;if((c[Ja+112>>2]|0)>(l|0)){c[k>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=70;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=0;c[Ea+(l*20|0)+8>>2]=m;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0;break}else{Di(Ja,70,0,m,0)|0;break}}else m=0;while(0);ul(f,Ma);n=ql(f,ta,C,j,0,x,0)|0;if(!n)break T;tl(f,m,Ma);do if(m|0){k=Ja+108|0;l=c[k>>2]|0;if((c[Ja+112>>2]|0)>(l|0)){c[k>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=70;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=1;c[Fa+(l*20|0)+8>>2]=m;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,70,1,m,0)|0;break}}while(0);do if((a[n+47>>0]|0)>0){k=c[n+36>>2]|0;l=Ja+108|0;m=c[l>>2]|0;if((c[Ja+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[Ja+104>>2]|0;a[Fa+(m*20|0)>>0]=11;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=0;c[Fa+(m*20|0)+8>>2]=k;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break}else{Di(Ja,11,0,k,0)|0;break}}while(0);sl(n);p=c[Oa>>2]|0;if((c[T>>2]|0)<=0)break;q=p+108|0;r=p+112|0;s=p+104|0;n=c[z>>2]|0;o=0;while(1){k=c[(c[n>>2]|0)+20>>2]|0;m=c[n+8>>2]|0;if(!k)l=0;else l=c[k>>2]|0;k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Fa=c[s>>2]|0;a[Fa+(k*20|0)>>0]=-99;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=m;c[Fa+(k*20|0)+8>>2]=l;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(p,157,m,l,0)|0;k=c[n+4>>2]|0;l=c[p>>2]|0;ca:do if(a[l+81>>0]|0){if(!(c[k+4>>2]&16))break;do if(l|0){if(c[l+480>>2]|0){Xd(l,k);break ca}m=k;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Fa=l+300|0;c[k>>2]=c[Fa>>2];c[Fa>>2]=k;break ca}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Fa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else{Ea=c[s>>2]|0;Fa=(c[q>>2]|0)+-1|0;a[Ea+(Fa*20|0)+1>>0]=-8;c[Ea+(Fa*20|0)+16>>2]=k}while(0);o=o+1|0;if((o|0)>=(c[T>>2]|0))break;else n=n+16|0}}while(0);c[La>>2]=0;Tj(f,X,V,16);rl(f,h,-1,0,0,i,V,V);k=Ja+12|0}while(0);l=c[k>>2]|0;k=0-W|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[Ja+108>>2];Fa=1796;break E}while(0);k=1}while(0);if((Fa|0)==1796){if((a[Ga+1>>0]|0)==3){c[Ha>>2]=43109;nk(f,0,44319,Ha)}do if(c[La>>2]|0){r=La+4|0;c[Ia>>2]=(c[r>>2]|0)>0?43127:43150;nk(f,0,44319,Ia);p=c[$>>2]|0;I=c[Oa>>2]|0;H=c[La+24>>2]|0;G=c[_>>2]|0;t=G+-1|0;c[_>>2]=t;q=c[La>>2]|0;E=a[i>>0]|0;x=i+4|0;C=c[x>>2]|0;y=c[h>>2]|0;s=La+16|0;k=c[s>>2]|0;do if(k|0){l=c[La+12>>2]|0;o=I+108|0;m=c[o>>2]|0;n=I+112|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;Ia=c[I+104>>2]|0;a[Ia+(m*20|0)>>0]=12;b[Ia+(m*20|0)+2>>1]=0;c[Ia+(m*20|0)+4>>2]=l;c[Ia+(m*20|0)+8>>2]=k;c[Ia+(m*20|0)+12>>2]=0;c[Ia+(m*20|0)+16>>2]=0;a[Ia+(m*20|0)+1>>0]=0}else Di(I,12,l,k,0)|0;k=c[o>>2]|0;if((c[n>>2]|0)>(k|0)){c[o>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=11;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=0;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else Di(I,11,0,H,0)|0;k=c[I+12>>2]|0;l=~c[s>>2];if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,I,l);break}else{c[(c[k+64>>2]|0)+(l<<2)>>2]=c[o>>2];break}}while(0);F=c[La+8>>2]|0;da:do switch(E<<24>>24){case 9:case 10:case 13:{z=p;A=c[i+8>>2]|0;B=0;break}default:{l=f+19|0;k=a[l>>0]|0;if(!(k<<24>>24)){k=f+44|0;o=(c[k>>2]|0)+1|0;c[k>>2]=o;k=0}else{k=k+-1<<24>>24;a[l>>0]=k;o=c[f+148+((k&255)<<2)>>2]|0}if((E|2)<<24>>24==14)if(!(k<<24>>24)){z=f+44|0;A=(c[z>>2]|0)+1|0;c[z>>2]=A;z=0;B=o;break da}else{A=k+-1<<24>>24;a[l>>0]=A;z=0;A=c[f+148+((A&255)<<2)>>2]|0;B=o;break da}if((p|0)==1)if(!(k<<24>>24)){z=f+44|0;A=(c[z>>2]|0)+1|0;c[z>>2]=A;z=1;B=o;break da}else{A=k+-1<<24>>24;a[l>>0]=A;z=1;A=c[f+148+((A&255)<<2)>>2]|0;B=o;break da}else{k=f+32|0;n=c[k>>2]|0;l=f+28|0;m=c[l>>2]|0;if((m|0)<(p|0)){z=f+44|0;A=c[z>>2]|0;c[z>>2]=A+p;z=p;A=A+1|0;B=o;break da}else{c[k>>2]=n+p;c[l>>2]=m-p;z=p;A=n;B=o;break da}}}}while(0);q=(c[q>>2]|0)-(c[r>>2]|0)|0;D=La+32|0;do if(!(a[D>>0]&1)){n=I+108|0;k=c[n>>2]|0;o=I+112|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=35;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=F;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else k=Di(I,35,F,H,0)|0;l=c[h+16>>2]|0;if((l|0)<=0){l=1;v=F;break}m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;v=c[I+104>>2]|0;a[v+(m*20|0)>>0]=47;b[v+(m*20|0)+2>>1]=0;c[v+(m*20|0)+4>>2]=l;c[v+(m*20|0)+8>>2]=t;c[v+(m*20|0)+12>>2]=1;c[v+(m*20|0)+16>>2]=0;a[v+(m*20|0)+1>>0]=0;l=1;v=F;break}else{Di(I,47,l,t,1)|0;l=1;v=F;break}}else{o=f+44|0;p=(c[o>>2]|0)+1|0;c[o>>2]=p;o=f+40|0;v=c[o>>2]|0;c[o>>2]=v+1;o=I+108|0;do if(c[s>>2]|0){k=c[o>>2]|0;l=I+112|0;if((c[l>>2]|0)>(k|0)){c[o>>2]=k+1;T=c[I+104>>2]|0;a[T+(k*20|0)>>0]=17;T=T+(k*20|0)+1|0;U=T+19|0;do{a[T>>0]=0;T=T+1|0}while((T|0)<(U|0));m=k;n=l;break}else{m=Di(I,17,0,0,0)|0;n=l;break}}else{m=0;n=I+112|0}while(0);k=z+1+q|0;l=c[o>>2]|0;if((c[n>>2]|0)>(l|0)){c[o>>2]=l+1;Ia=c[I+104>>2]|0;a[Ia+(l*20|0)>>0]=116;b[Ia+(l*20|0)+2>>1]=0;c[Ia+(l*20|0)+4>>2]=v;c[Ia+(l*20|0)+8>>2]=p;c[Ia+(l*20|0)+12>>2]=k;c[Ia+(l*20|0)+16>>2]=0;a[Ia+(l*20|0)+1>>0]=0}else Di(I,116,v,p,k)|0;k=c[o>>2]|0;if(m|0){if(!(a[(c[I>>2]|0)+81>>0]|0))l=(c[I+104>>2]|0)+(((m|0)<0?k+-1|0:m)*20|0)|0;else l=59308;c[l+8>>2]=k}if((c[n>>2]|0)>(k|0)){c[o>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=34;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=F;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else k=Di(I,34,F,H,0)|0;l=c[h+16>>2]|0;do if((l|0)>0){m=c[o>>2]|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;h=c[I+104>>2]|0;a[h+(m*20|0)>>0]=47;b[h+(m*20|0)+2>>1]=0;c[h+(m*20|0)+4>>2]=l;c[h+(m*20|0)+8>>2]=t;c[h+(m*20|0)+12>>2]=1;c[h+(m*20|0)+16>>2]=0;a[h+(m*20|0)+1>>0]=0;break}else{Di(I,47,l,t,1)|0;break}}while(0);l=c[o>>2]|0;if((c[n>>2]|0)>(l|0)){c[o>>2]=l+1;h=c[I+104>>2]|0;a[h+(l*20|0)>>0]=126;b[h+(l*20|0)+2>>1]=0;c[h+(l*20|0)+4>>2]=F;c[h+(l*20|0)+8>>2]=p;c[h+(l*20|0)+12>>2]=v;c[h+(l*20|0)+16>>2]=0;a[h+(l*20|0)+1>>0]=0;l=0;break}else{Di(I,126,F,p,v)|0;l=0;break}}while(0);w=k+1|0;u=l+q|0;if((z|0)>0){k=0;l=u+-1|0;do{l=l+((b[y+4+(k*20|0)+16>>1]|0)==0&1)|0;k=k+1|0}while((k|0)!=(z|0));r=I+108|0;s=I+112|0;t=I+104|0;q=z;while(1){m=q;q=q+-1|0;k=b[y+4+(q*20|0)+16>>1]|0;n=k<<16>>16==0;k=n?l:(k&65535)+-1|0;o=q+A|0;p=c[r>>2]|0;if((c[s>>2]|0)>(p|0)){c[r>>2]=p+1;h=c[t>>2]|0;a[h+(p*20|0)>>0]=90;b[h+(p*20|0)+2>>1]=0;c[h+(p*20|0)+4>>2]=v;c[h+(p*20|0)+8>>2]=k;c[h+(p*20|0)+12>>2]=o;c[h+(p*20|0)+16>>2]=0;a[h+(p*20|0)+1>>0]=0}else Di(I,90,v,k,o)|0;if((m|0)<=1)break;else l=l+(n<<31>>31)|0}}ea:do switch(E<<24>>24){case 12:case 14:{l=I+108|0;k=c[l>>2]|0;m=I+112|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=90;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=v;c[i+(k*20|0)+8>>2]=u;c[i+(k*20|0)+12>>2]=A;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,90,v,u,A)|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=121;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=B;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,121,C,B,0)|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=122;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=A;c[i+(k*20|0)+12>>2]=B;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,122,C,A,B)|0;k=c[l>>2]|0;if((k|0)<=0)break ea;b[(c[I+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=8;break}case 11:{o=c[i+16>>2]|0;p=I+108|0;k=c[p>>2]|0;q=I+112|0;if((c[q>>2]|0)>(k|0)){c[p>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=92;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=A;c[i+(k*20|0)+8>>2]=z;c[i+(k*20|0)+12>>2]=B;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(I,92,A,z,B)|0;l=c[I>>2]|0;fa:do if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[p>>2]|0)+-1|0;l=c[I+104>>2]|0;m=l+(k*20|0)|0;do if((z|0)<=-1){n=l+(k*20|0)+1|0;if(a[n>>0]|0)break;if((z|0)==-3){c[l+(k*20|0)+16>>2]=o;a[n>>0]=-3;break fa}if(!o)break fa;c[l+(k*20|0)+16>>2]=o;a[n>>0]=z;if((z|0)!=-12)break fa;i=o+12|0;c[i>>2]=(c[i>>2]|0)+1;break fa}while(0);Ei(I,m,o,z)}else{if((z|0)==-12)break;kg(l,z,o)}while(0);k=c[p>>2]|0;if((c[q>>2]|0)>(k|0)){c[p>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=-124;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=B;c[i+(k*20|0)+12>>2]=A;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(I,132,C,B,A)|0;if(a[(c[I>>2]|0)+81>>0]|0)break ea;i=c[I+104>>2]|0;a[i+(k*20|0)+1>>0]=-3;c[i+(k*20|0)+16>>2]=z;break}case 10:break;case 9:{k=c[i+8>>2]|0;l=I+108|0;m=c[l>>2]|0;if((c[I+112>>2]|0)>(m|0)){c[l>>2]=m+1;i=c[I+104>>2]|0;a[i+(m*20|0)>>0]=81;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=k;c[i+(m*20|0)+8>>2]=z;c[i+(m*20|0)+12>>2]=0;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break ea}else{Di(I,81,k,z,0)|0;break ea}}default:{k=c[x>>2]|0;l=I+108|0;m=c[l>>2]|0;if((c[I+112>>2]|0)>(m|0)){c[l>>2]=m+1;i=c[I+104>>2]|0;a[i+(m*20|0)>>0]=14;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=k;c[i+(m*20|0)+8>>2]=0;c[i+(m*20|0)+12>>2]=0;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break ea}else{Di(I,14,k,0,0)|0;break ea}}}while(0);do if(B|0){if(E<<24>>24!=11){l=f+19|0;k=a[l>>0]|0;if(A){if((k&255)>=8)break;i=k+1<<24>>24;a[l>>0]=i;c[f+148+((k&255)<<2)>>2]=A;k=i}if((k&255)>=8)break;a[l>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=B;break}do if((z|0)==1){if(!A)break;k=f+19|0;l=a[k>>0]|0;if((l&255)>=8)break;a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=A}else{k=f+28|0;if((c[k>>2]|0)>=(z|0))break;c[k>>2]=z;c[f+32>>2]=A}while(0);k=f+19|0;l=a[k>>0]|0;if((l&255)>=8)break;a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=B}while(0);o=I+12|0;l=c[o>>2]|0;k=0-G|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0){mk(l,I,k);n=I+108|0}else{n=I+108|0;c[(c[l+64>>2]|0)+(k<<2)>>2]=c[n>>2]}k=c[n>>2]|0;m=I+112|0;l=(c[m>>2]|0)>(k|0);do if(!(a[D>>0]&1))if(l){c[n>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=5;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=F;c[i+(k*20|0)+8>>2]=w;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;break}else{Di(I,5,F,w,0)|0;break}else if(l){c[n>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=3;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=F;c[i+(k*20|0)+8>>2]=w;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;break}else{Di(I,3,F,w,0)|0;break}while(0);k=c[La+12>>2]|0;do if(k|0){l=c[n>>2]|0;if((c[m>>2]|0)>(l|0)){c[n>>2]=l+1;i=c[I+104>>2]|0;a[i+(l*20|0)>>0]=66;b[i+(l*20|0)+2>>1]=0;c[i+(l*20|0)+4>>2]=k;c[i+(l*20|0)+8>>2]=0;c[i+(l*20|0)+12>>2]=0;c[i+(l*20|0)+16>>2]=0;a[i+(l*20|0)+1>>0]=0;break}else{Di(I,66,k,0,0)|0;break}}while(0);l=c[o>>2]|0;k=~H;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0){mk(l,I,k);break}else{c[(c[l+64>>2]|0)+(k<<2)>>2]=c[n>>2];break}}while(0);l=c[Ja+12>>2]|0;k=0-aa|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[Ja+108>>2];k=(c[Ka>>2]|0)>0&1}if(!j){m=k;break c}ri(Na,j);m=k;break c}else w=j;while(0);y=c[f>>2]|0;c[Da>>2]=c[i>>2];c[Da+4>>2]=c[i+4>>2];c[Da+8>>2]=c[i+8>>2];c[Da+12>>2]=c[i+12>>2];c[Da+16>>2]=c[i+16>>2];c[Da+20>>2]=c[i+20>>2];j=(c[w+48>>2]|0)==0;ga:do if(j?(ka=w+60|0,(c[ka>>2]|0)==0):0){j=c[Oa>>2]|0;ha:do if(!j){if((c[f+116>>2]|0)==0?(b[y+76>>1]&8)==0:0)a[f+23>>0]=1;ia:do if(c[y+272>>2]|0)if(!(a[y+81>>0]|0))Fa=393;else{x=0;break ha}else{do if((e[y+276>>1]|0)>=224){j=y+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Na=y+284|0;c[Na>>2]=(c[Na>>2]|0)+1;break ia}j=y+296|0;k=c[j>>2]|0;if(!k){j=y+292|0;break}else{c[j>>2]=c[k>>2];Na=y+284|0;c[Na>>2]=(c[Na>>2]|0)+1;break ia}}else j=y+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=393}while(0);if((Fa|0)==393)k=_d(y,224,0)|0;if(!k)x=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=y;j=y+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;x=k}}else x=j;while(0);if((a[Da>>0]|0)==12){j=c[Da+4>>2]|0;k=c[c[h>>2]>>2]|0;l=x+108|0;m=c[l>>2]|0;if((c[x+112>>2]|0)>(m|0)){c[l>>2]=m+1;Na=c[x+104>>2]|0;a[Na+(m*20|0)>>0]=113;b[Na+(m*20|0)+2>>1]=0;c[Na+(m*20|0)+4>>2]=j;c[Na+(m*20|0)+8>>2]=k;c[Na+(m*20|0)+12>>2]=0;c[Na+(m*20|0)+16>>2]=0;a[Na+(m*20|0)+1>>0]=0}else Di(x,113,j,k,0)|0;a[Da>>0]=14}j=c[za>>2]|0;if(j&1024|0){n=(c[h+60>>2]|0)==0;l=n&1;j=h;k=1;while(1){m=c[j+52>>2]|0;if(!m)break;else{j=m;k=k+l|0}}c[ga>>2]=k;c[ga+4>>2]=(k|0)==1?59952:43321;nk(f,0,43298,ga);k=k&65535;if(!n){rl(f,j,-1,0,0,Da,1,1);k=0;j=0;Fa=640;break}while(1){rl(f,j,-1,0,0,Da,1,1);b[j+6>>1]=k;j=c[j+56>>2]|0;if(!j){k=0;j=0;Fa=640;break ga}}}do if(!(j&8192)){if(c[S>>2]|0){m=Bl(f,h,i)|0;break ga}if(!(c[w+52>>2]|0)){nk(f,1,43243,ea);nk(f,1,43258,fa)}p=h+4|0;switch(a[p>>0]|0){case -128:{o=h+12|0;k=w+12|0;c[k>>2]=c[o>>2];m=h+16|0;l=w+16|0;c[l>>2]=c[m>>2];Na=h+60|0;c[ka>>2]=c[Na>>2];j=kj(f,w,Da)|0;c[Na>>2]=0;if(j|0){k=0;Fa=640;break ga}c[ca>>2]=0;k=c[k>>2]|0;c[o>>2]=k;c[m>>2]=c[l>>2];do if(k){p=x+108|0;j=c[p>>2]|0;q=x+112|0;if((c[q>>2]|0)>(j|0)){c[p>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=20;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=k;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,20,k,0,0)|0;n=c[m>>2]|0;if(!n){u=j;break}k=c[o>>2]|0;l=n+1|0;m=c[p>>2]|0;if((c[q>>2]|0)>(m|0)){c[p>>2]=m+1;u=c[x+104>>2]|0;a[u+(m*20|0)>>0]=-104;b[u+(m*20|0)+2>>1]=0;c[u+(m*20|0)+4>>2]=k;c[u+(m*20|0)+8>>2]=l;c[u+(m*20|0)+12>>2]=n;c[u+(m*20|0)+16>>2]=0;a[u+(m*20|0)+1>>0]=0;u=j;break}else{Di(x,152,k,l,n)|0;u=j;break}}else u=0;while(0);nk(f,1,41509,ia);j=kj(f,h,Da)|0;n=c[ca>>2]|0;c[ca>>2]=w;t=h+6|0;k=b[t>>1]|0;l=b[w+6>>1]|0;m=k<<16>>16;o=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(o|0)){k=l;break}if((m+31|0)<(o|0)){k=o+1&65535;break}else{k=(d[18112+(o-m)>>0]|0)+o&65535;break}}else{if((o+49|0)<(m|0))break;if((o+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-o)>>0]|0)+m&65535;break}}while(0);b[t>>1]=k;k=c[ka>>2]|0;do if(k|0){Na=(uk(c[k+12>>2]|0,Ea)|0)!=0;k=c[Ea>>2]|0;if(!(Na&(k|0)>0))break;r=b[t>>1]|0;l=((k|0)<0)<<31>>31;s=k>>>0<8;do if(s){if(k>>>0<2){m=0;break}m=40;p=k;o=l;do{m=(m&65535)+65526|0;p=cw(p|0,o|0,1)|0;o=L()|0}while(o>>>0<0|(o|0)==0&p>>>0<8);o=m&65535;m=p;Fa=450}else{if(k>>>0>255){m=40;q=k;o=l;do{m=(m&65535)+40|0;Na=q;q=bw(q|0,o|0,4)|0;Ma=o;o=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>4095);p=m&65535;m=q}else{p=40;o=l;m=k}if(!(o>>>0>0|(o|0)==0&m>>>0>15)){o=p;Fa=450;break}do{p=(p&65535)+10&65535;Na=m;m=bw(m|0,o|0,1)|0;Ma=o;o=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>31);o=p;Fa=450}while(0);if((Fa|0)==450)m=(o&65535)+65526+(e[3648+((m&7)<<1)>>1]|0)&65535;if(r<<16>>16<=m<<16>>16)break;do if(s){if(k>>>0<2){k=0;break}m=40;do{m=(m&65535)+65526|0;k=cw(k|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&k>>>0<8);m=m&65535;Fa=465}else{if(k>>>0>255){m=40;do{m=(m&65535)+40|0;Na=k;k=bw(k|0,l|0,4)|0;Ma=l;l=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>4095);m=m&65535}else m=40;if(!(l>>>0>0|(l|0)==0&k>>>0>15)){Fa=465;break}do{m=(m&65535)+10&65535;Na=k;k=bw(k|0,l|0,1)|0;Ma=l;l=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>31);Fa=465}while(0);if((Fa|0)==465)k=(m&65535)+65526+(e[3648+((k&7)<<1)>>1]|0)&65535;b[t>>1]=k}while(0);if(u|0){l=c[x+108>>2]|0;if(!(a[(c[x>>2]|0)+81>>0]|0))k=(c[x+104>>2]|0)+(((u|0)<0?l+-1|0:u)*20|0)|0;else k=59308;c[k+8>>2]=l}break}case 127:case -127:{if((a[Da>>0]|0)==1)s=c[Da+4>>2]|0;else{k=f+40|0;l=c[k>>2]|0;c[k>>2]=l+1;k=x+108|0;j=c[k>>2]|0;if((c[x+112>>2]|0)>(j|0)){c[k>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=l;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,l,0,0)|0;c[h+24>>2]=j;j=h;while(1){k=c[j+56>>2]|0;if(!k)break;else j=k}s=j+8|0;c[s>>2]=c[s>>2]|32;s=l}a[Ea>>0]=1;c[Ea+4>>2]=s;c[Ea+16>>2]=0;c[Ea+8>>2]=0;c[Ea+12>>2]=0;j=kj(f,w,Ea)|0;if(j|0){k=0;Fa=640;break ga}Na=a[p>>0]|0;c[ca>>2]=0;q=h+60|0;r=c[q>>2]|0;c[q>>2]=0;a[Ea>>0]=Na<<24>>24==-127?2:1;switch(Na<<24>>24){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ha>>2]=j;nk(f,1,43277,ha);j=kj(f,h,Ea)|0;k=c[S>>2]|0;if(k|0)ri(y,k);n=c[ca>>2]|0;c[ca>>2]=w;c[S>>2]=0;if((a[p>>0]|0)==127){p=h+6|0;k=b[p>>1]|0;l=b[w+6>>1]|0;m=k<<16>>16;o=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(o|0)){k=l;break}if((m+31|0)<(o|0)){k=o+1&65535;break}else{k=(d[18112+(o-m)>>0]|0)+o&65535;break}}else{if((o+49|0)<(m|0))break;if((o+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-o)>>0]|0)+m&65535;break}}while(0);b[p>>1]=k}k=c[q>>2]|0;if(k|0)ni(y,k);c[q>>2]=r;c[h+12>>2]=0;c[h+16>>2]=0;do if((a[Da>>0]|0)!=1){q=f+56|0;p=c[q>>2]|0;l=p+-1|0;m=p+-2|0;c[q>>2]=m;pl(f,h,l);q=x+108|0;k=c[q>>2]|0;r=x+112|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=36;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=l;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,36,s,l,0)|0;o=c[q>>2]|0;rl(f,h,s,0,0,Da,m,l);m=x+12|0;k=c[m>>2]|0;l=1-p|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,x,l);else c[(c[k+64>>2]|0)+(l<<2)>>2]=c[q>>2];k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=5;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=o;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,5,s,o,0)|0;l=c[m>>2]|0;k=0-p|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,x,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[q>>2];k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0;break}else{Di(x,117,s,0,0)|0;break}}while(0);break}default:{u=f+40|0;t=c[u>>2]|0;s=t+1|0;c[u>>2]=t+2;u=x+108|0;j=c[u>>2]|0;v=x+112|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=t;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,t,0,0)|0;c[h+24>>2]=j;j=h;while(1){k=c[j+56>>2]|0;if(!k)break;else j=k}k=j+8|0;c[k>>2]=c[k>>2]|32;a[Ea>>0]=1;k=Ea+4|0;c[k>>2]=t;c[Ea+16>>2]=0;c[Ea+8>>2]=0;c[Ea+12>>2]=0;j=kj(f,w,Ea)|0;if(j|0){k=0;Fa=640;break ga}j=c[u>>2]|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=s;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,s,0,0)|0;c[h+28>>2]=j;c[ca>>2]=0;m=h+60|0;o=c[m>>2]|0;c[m>>2]=0;c[k>>2]=s;switch(a[p>>0]|0){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ja>>2]=j;nk(f,1,43277,ja);j=kj(f,h,Ea)|0;n=c[ca>>2]|0;c[ca>>2]=w;l=h+6|0;k=b[w+6>>1]|0;if((b[l>>1]|0)>k<<16>>16)b[l>>1]=k;k=c[m>>2]|0;if(k|0)ni(y,k);c[m>>2]=o;k=f+56|0;r=c[k>>2]|0;o=r+-1|0;p=r+-2|0;c[k>>2]=p;pl(f,h,o);k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=36;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=o;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,36,t,o,0)|0;m=f+19|0;k=a[m>>0]|0;if(!(k<<24>>24)){Na=f+44|0;l=(c[Na>>2]|0)+1|0;c[Na>>2]=l}else{l=k+-1<<24>>24;a[m>>0]=l;l=c[f+148+((l&255)<<2)>>2]|0}k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;q=c[x+104>>2]|0;a[q+(k*20|0)>>0]=127;b[q+(k*20|0)+2>>1]=0;c[q+(k*20|0)+4>>2]=t;c[q+(k*20|0)+8>>2]=l;c[q+(k*20|0)+12>>2]=0;c[q+(k*20|0)+16>>2]=0;a[q+(k*20|0)+1>>0]=0;q=k}else q=Di(x,127,t,l,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=28;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=p;c[Na+(k*20|0)+12>>2]=l;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else k=Di(x,28,s,p,l)|0;if(!(a[(c[x>>2]|0)+81>>0]|0)){Na=c[x+104>>2]|0;a[Na+(k*20|0)+1>>0]=-3;c[Na+(k*20|0)+16>>2]=0}do if(l|0){k=a[m>>0]|0;if((k&255)>=8)break;a[m>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=l}while(0);rl(f,h,t,0,0,Da,p,o);m=x+12|0;k=c[m>>2]|0;l=1-r|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,x,l);else c[(c[k+64>>2]|0)+(l<<2)>>2]=c[u>>2];k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=5;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=q;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,5,t,q,0)|0;l=c[m>>2]|0;k=0-r|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,x,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[u>>2];k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,117,s,0,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,117,t,0,0)|0}}if(c[h+56>>2]|0)break;m=f+212|0;k=c[m>>2]|0;if(!k)k=0;else{l=c[Oa>>2]|0;if((k|0)<0)k=(c[l+108>>2]|0)+-1|0;if(!(a[(c[l>>2]|0)+81>>0]|0))k=(c[l+104>>2]|0)+(k*20|0)|0;else k=59308;k=c[k+8>>2]|0}c[m>>2]=k}else{Al(f,h,Da);j=0;n=0}while(0);if(c[za>>2]&32){w=c[c[h>>2]>>2]|0;o=w+1|0;p=o*5|0;m=p+20|0;q=y+272|0;ja:do if(c[q>>2]|0)if(!(a[y+81>>0]|0))Fa=589;else{k=n;j=7;Fa=640;break ga}else{do if(!(0<0|(0==0?(e[y+276>>1]|0)>>>0<m>>>0:0))){k=y+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];v=y+284|0;c[v>>2]=(c[v>>2]|0)+1;v=l;break ja}k=y+296|0;l=c[k>>2]|0;if(!l){k=y+292|0;break}else{c[k>>2]=c[l>>2];v=y+284|0;c[v>>2]=(c[v>>2]|0)+1;v=l;break ja}}else k=y+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=589}while(0);if((Fa|0)==589)v=_d(y,m,0)|0;if(!v){k=y+81|0;do if(!(a[k>>0]|0)){if(a[y+82>>0]|0)break;a[k>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[y+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);if(!v){k=n;j=7;Fa=640;break}else{u=0;t=1}}else{c[v+16>>2]=v+20+(o<<2);b[v+6>>1]=w;b[v+8>>1]=o;a[v+4>>0]=a[y+78>>0]|0;c[v+12>>2]=y;c[v>>2]=1;gw(v+24|0,0,p+-4|0)|0;u=v;t=0}if((w|0)>0){m=y+8|0;k=v+20|0;l=0;while(1){Na=Cl(f,h,l)|0;c[k>>2]=Na;if(!Na)c[k>>2]=c[m>>2];l=l+1|0;if((l|0)==(w|0))break;else k=k+4|0}}q=x+104|0;r=u+12|0;s=u;p=h;do{o=p+24|0;m=c[o>>2]|0;k=(m|0)<0;do if(t){if(k)break;do if(!(a[(c[x>>2]|0)+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;if(!(a[k+(m*20|0)+1>>0]|0))break;Ei(x,k+(m*20|0)|0,u,-9)}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1}while(0);c[o>>2]=-1;k=p+28|0;l=c[k>>2]|0;if((l|0)<0)break;do if(!(a[(c[x>>2]|0)+81>>0]|0)){m=c[q>>2]|0;c[m+(l*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;if(!(a[m+(l*20|0)+1>>0]|0))break;Ei(x,m+(l*20|0)|0,u,-9)}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1}while(0);c[k>>2]=-1}else{if(k)break;k=c[x>>2]|0;ka:do if(!(a[k+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;l=k+(m*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(m*20|0)+16>>2]=u;a[l>>0]=-9;break}else{Ei(x,k+(m*20|0)|0,u,-9);break}}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1;if(c[k+480>>2]|0)break;Na=(c[u>>2]|0)+-1|0;c[u>>2]=Na;if(Na|0)break;k=c[r>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);break ka}if((c[k+304>>2]|0)>>>0>s>>>0)break;if((c[k+308>>2]|0)>>>0<=s>>>0)break;Na=k+300|0;c[u>>2]=c[Na>>2];c[Na>>2]=u;break ka}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Na=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);c[o>>2]=-1;o=p+28|0;m=c[o>>2]|0;if((m|0)<0)break;k=c[x>>2]|0;la:do if(!(a[k+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;l=k+(m*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(m*20|0)+16>>2]=u;a[l>>0]=-9;break}else{Ei(x,k+(m*20|0)|0,u,-9);break}}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1;if(c[k+480>>2]|0)break;Na=(c[u>>2]|0)+-1|0;c[u>>2]=Na;if(Na|0)break;k=c[r>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);break la}if((c[k+304>>2]|0)>>>0>s>>>0)break;if((c[k+308>>2]|0)>>>0<=s>>>0)break;Na=k+300|0;c[u>>2]=c[Na>>2];c[Na>>2]=u;break la}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Na=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);c[o>>2]=-1}while(0);p=c[p+52>>2]|0}while((p|0)!=0);Na=(c[v>>2]|0)+-1|0;c[v>>2]=Na;if(Na|0){k=n;Fa=640;break}k=c[v+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);k=n;Fa=640;break ga}l=v;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;k=k+300|0;c[v>>2]=c[k>>2];c[k>>2]=v;k=n;Fa=640;break ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);k=n;Fa=640;break}else{k=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);k=n;Fa=640;break}}else{k=n;Fa=640}}else Fa=374;while(0);if((Fa|0)==374){k=j?43237:43150;switch(a[h+4>>0]|0){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ba>>2]=k;c[ba+4>>2]=j;cd(f,43195,ba);k=0;j=1;Fa=640}if((Fa|0)==640){c[i+8>>2]=c[Da+8>>2];c[i+12>>2]=c[Da+12>>2];if(!k)m=j;else{pi(y,k,1);m=j}}if(c[h+56>>2]|0){Oa=m;Ra=Pa;return Oa|0}l=f+212|0;j=c[l>>2]|0;if(!j)j=0;else{k=c[Oa>>2]|0;if((j|0)<0)j=(c[k+108>>2]|0)+-1|0;if(!(a[(c[k>>2]|0)+81>>0]|0))j=(c[k+104>>2]|0)+(j*20|0)|0;else j=59308;j=c[j+8>>2]|0}c[l>>2]=j;Oa=m;Ra=Pa;return Oa|0}else m=1;while(0);j=c[Ma+28>>2]|0;do if(j|0){if(Na|0){if(c[Na+480>>2]|0){Xd(Na,j);break}i=j;if((c[Na+304>>2]|0)>>>0<=i>>>0?(c[Na+308>>2]|0)>>>0>i>>>0:0){i=Na+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[Ma+40>>2]|0;do if(j|0){if(Na|0){if(c[Na+480>>2]|0){Xd(Na,j);break}i=j;if((c[Na+304>>2]|0)>>>0<=i>>>0?(c[Na+308>>2]|0)>>>0>i>>>0:0){i=Na+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);l=f+212|0;j=c[l>>2]|0;if(!j)j=0;else{k=c[Oa>>2]|0;if((j|0)<0)j=(c[k+108>>2]|0)+-1|0;if(!(a[(c[k>>2]|0)+81>>0]|0))j=(c[k+104>>2]|0)+(j*20|0)|0;else j=59308;j=c[j+8>>2]|0}c[l>>2]=j;Oa=m;Ra=Pa;return Oa|0}function lj(b,f,g,h,i,j,k,l){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;m=s;r=c[b>>2]|0;do if(!f){f=(k|0)!=0;if(f|(l|0)!=0){c[m>>2]=f?44504:44507;cd(b,44468,m);break}else{q=pj(b,0,g,h)|0;n=6;break}}else{q=pj(b,f,g,h)|0;n=6}while(0);if((n|0)==6?q|0:0){o=(c[q>>2]|0)+-1|0;a:do if((d[b+200>>0]|0)>1?(p=c[q+8+(o*72|0)+8>>2]|0,p|0):0){if(!((h|0)!=0?(c[h>>2]|0)!=0:0))h=g;g=c[b>>2]|0;b:do if(!g){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](16)|0;n=35;break}f=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;g=59064;m=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&m>>>0>0){t=c[14978]|0;g=Tv(m|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&g>>>0<=t>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f)break a;m=Wa[c[29352>>2]&127](f)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}else{if(c[g+272>>2]|0){if(a[g+81>>0]|0)break a}else{do if((e[g+276>>1]|0)>=16){m=g+300|0;f=c[m>>2]|0;if(f|0){c[m>>2]=c[f>>2];n=g+284|0;c[n>>2]=(c[n>>2]|0)+1;n=35;break b}m=g+296|0;f=c[m>>2]|0;if(!f){f=g+292|0;break}else{c[m>>2]=c[f>>2];n=g+284|0;c[n>>2]=(c[n>>2]|0)+1;n=35;break b}}else f=g+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(g,16,0)|0;n=35}while(0);if((n|0)==35)if(!f)break;m=f+4|0;g=m+12|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(g|0));c[f>>2]=p;n=h;p=c[n+4>>2]|0;t=f+4|0;c[t>>2]=c[n>>2];c[t+4>>2]=p;t=b+272|0;c[f+12>>2]=c[t>>2];c[t>>2]=f}while(0);if(c[i+4>>2]|0){t=qj(r,i)|0;c[q+8+(o*72|0)+12>>2]=t}c[q+8+(o*72|0)+20>>2]=j;c[q+8+(o*72|0)+44>>2]=k;c[q+8+(o*72|0)+48>>2]=l;t=q;Ra=s;return t|0}if(k|0)ni(r,k);do if(l|0){b=l+4|0;f=c[l>>2]|0;c:do if((c[b>>2]|0)>0){g=r+480|0;h=r+304|0;n=r+308|0;o=r+300|0;if(!r){m=0;while(1){f=c[f+(m<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);m=m+1|0;f=c[l>>2]|0;if((m|0)>=(c[b>>2]|0))break c}}m=0;do{f=c[f+(m<<3)>>2]|0;do if(f|0){if(c[g>>2]|0){Xd(r,f);break}t=f;if((c[h>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[f>>2]=c[o>>2];c[o>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);m=m+1|0;f=c[l>>2]|0}while((m|0)<(c[b>>2]|0))}while(0);d:do if(f){do if(r|0){m=r+480|0;if(!(c[m>>2]|0)){g=f;if((c[r+304>>2]|0)>>>0>g>>>0)break;if((c[r+308>>2]|0)>>>0<=g>>>0)break;t=r+300|0;c[f>>2]=c[t>>2];c[t>>2]=f}else Xd(r,f);f=m;n=75;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);n=73;break}else{n=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);n=73;break}}else n=73;while(0);if((n|0)==73)if(r){f=r+480|0;n=75}if((n|0)==75){if(c[f>>2]|0){Xd(r,l);break}t=l;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){t=r+300|0;c[l>>2]=c[t>>2];c[t>>2]=l;break}}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!j){t=0;Ra=s;return t|0}pi(r,j,1);t=0;Ra=s;return t|0}function mj(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+96|0;q=t+80|0;s=t;p=c[d>>2]|0;a:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))r=11;else n=0;else{do if((e[p+276>>1]|0)>=76){o=p+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}o=p+296|0;n=c[o>>2]|0;if(!n){n=p+292|0;break}else{c[o>>2]=c[n>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}}else n=p+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;r=11}while(0);if((r|0)==11)n=_d(p,76,0)|0;o=(n|0)==0?s:n;if(!f){f=c[d>>2]|0;c[q>>2]=0;c[q+4>>2]=0;f=oj(f,172,q,0)|0;f=nj(c[d>>2]|0,0,f)|0}c[o>>2]=f;a[o+4>>0]=-125;c[o+8>>2]=l;c[o+12>>2]=0;c[o+16>>2]=0;q=d+100|0;l=(c[q>>2]|0)+1|0;c[q>>2]=l;c[o+20>>2]=l;c[o+24>>2]=-1;c[o+28>>2]=-1;b[o+6>>1]=0;if(!g){n=c[d>>2]|0;b:do if(!n){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](80)|0;r=38;break}g=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;n=59064;f=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&f>>>0>0){l=c[14978]|0;q=Tv(f|0,n|0,g|0,((g|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=l>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;r=39}else r=39}else g=0}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0){g=0;break}}else{do if((e[n+276>>1]|0)>=80){f=n+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=38;break b}f=n+296|0;g=c[f>>2]|0;if(!g){g=n+292|0;break}else{c[f>>2]=c[g>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=38;break b}}else g=n+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(n,80,0)|0;r=38}while(0);if((r|0)==38)if(!g)g=0;else r=39;if((r|0)==39){f=g;n=f+80|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(n|0))}}c[o+32>>2]=g;c[o+36>>2]=h;c[o+40>>2]=i;c[o+44>>2]=j;c[o+48>>2]=k;c[o+52>>2]=0;c[o+56>>2]=0;c[o+60>>2]=m;c[o+64>>2]=0;c[o+68>>2]=0;c[o+72>>2]=0;g=c[d>>2]|0;if(!(a[g+81>>0]|0)){s=o;Ra=t;return s|0}pi(g,o,(o|0)!=(s|0)&1);s=0;Ra=t;return s|0}function nj(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;a:do if(!d){b:do if(c[b+272>>2]|0)if(!(a[b+81>>0]|0))i=12;else{d=0;break a}else{do if((e[b+276>>1]|0)>=24){g=b+300|0;d=c[g>>2]|0;if(d|0){c[g>>2]=c[d>>2];h=b+284|0;c[h>>2]=(c[h>>2]|0)+1;break b}g=b+296|0;d=c[g>>2]|0;if(!d){d=b+292|0;break}else{c[g>>2]=c[d>>2];h=b+284|0;c[h>>2]=(c[h>>2]|0)+1;break b}}else d=b+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;i=12}while(0);if((i|0)==12)d=_d(b,24,0)|0;if(d){c[d>>2]=0;i=20}}else{g=c[d>>2]|0;if(!(g+-1&g)){h=Yv(g|0,((g|0)<0)<<31>>31|0,40,0)|0;g=L()|0;h=h|4;j=d;if(((c[b+304>>2]|0)>>>0<=j>>>0?(c[b+308>>2]|0)>>>0>j>>>0:0)?!(g>>>0>0|((g|0)==0?h>>>0>(e[b+276>>1]|0)>>>0:0)):0){i=20;break}g=Zd(b,d,h,g)|0;if(g){d=g;i=20}}else i=20}while(0);if((i|0)==20){j=c[d>>2]|0;c[d>>2]=j+1;i=d+4+(j*20|0)+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[d+4+(j*20|0)>>2]=f;j=d;return j|0}if(f|0)ni(b,f);if(!d){j=0;return j|0}ri(b,d);j=0;return j|0}function oj(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;n=t;c[n>>2]=0;o=(g|0)!=0;do if(o){if(((f|0)==147?(i=c[g>>2]|0,i|0):0)?ii(i,n)|0:0){m=0;break}m=(c[g+4>>2]|0)+1|0}else m=0;while(0);k=m+52|0;a:do if(c[d+272>>2]|0)if(!(a[d+81>>0]|0))l=16;else{s=0;Ra=t;return s|0}else{do if(!(0<0|(0==0?(e[d+276>>1]|0)>>>0<k>>>0:0))){i=d+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];p=d+284|0;c[p>>2]=(c[p>>2]|0)+1;p=j;break a}i=d+296|0;j=c[i>>2]|0;if(!j){i=d+292|0;break}else{c[i>>2]=c[j>>2];p=d+284|0;c[p>>2]=(c[p>>2]|0)+1;p=j;break a}}else i=d+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;l=16}while(0);if((l|0)==16)p=_d(d,k,0)|0;if(!p){s=p;Ra=t;return s|0}i=p;j=i+52|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));a[p>>0]=f;b[p+34>>1]=-1;do if(o){if(!m){c[p+4>>2]=8389632;c[p+8>>2]=c[n>>2];break}k=p+52|0;d=p+8|0;c[d>>2]=k;i=g+4|0;j=c[i>>2]|0;if(!j)i=0;else{ew(k|0,c[g>>2]|0,j|0)|0;i=c[i>>2]|0}a[k+i>>0]=0;if(((h|0?(s=c[d>>2]|0,q=a[s>>0]|0,(a[880+(q&255)>>0]|0)<0):0)?(h=p+4|0,c[h>>2]=(q<<24>>24==34?67108928:67108864)|c[h>>2],s|0):0)?(r=a[s>>0]|0,(a[880+(r&255)>>0]|0)<0):0){d=r<<24>>24==91?93:r;k=0;i=1;while(1){j=a[s+i>>0]|0;if(j<<24>>24==d<<24>>24){i=i+1|0;j=s+k|0;if((a[s+i>>0]|0)!=d<<24>>24)break;a[j>>0]=d}else a[s+k>>0]=j;k=k+1|0;i=i+1|0}a[j>>0]=0}}while(0);c[p+24>>2]=1;s=p;Ra=t;return s|0}function pj(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o;n=c[b>>2]|0;do if(!d){a:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))j=12;else{n=0;Ra=o;return n|0}else{do if((e[n+276>>1]|0)>=80){h=n+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;break a}h=n+296|0;i=c[h>>2]|0;if(!i){h=n+292|0;break}else{c[h>>2]=c[i>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=12}while(0);if((j|0)==12)i=_d(n,80,0)|0;if(!i){n=0;Ra=o;return n|0}else{c[i+4>>2]=1;c[i>>2]=1;j=i+8|0;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));b=i;h=i+48|0;break}}else{m=c[d>>2]|0;h=m+1|0;b:do if(h>>>0>(c[d+4>>2]|0)>>>0){i=cw(m|0,((m|0)<0)<<31>>31|0,1)|0;j=L()|0;i=i|1;do if((h|0)>199){c[k>>2]=200;cd(b,43159,k)}else{h=(j|0)<0|(j|0)==0&i>>>0<200;b=h?i:200;h=Yv(b|0,(h?j:0)|0,72,0)|0;h=Sv(h|0,L()|0,8,0)|0;i=L()|0;l=d;if(((c[n+304>>2]|0)>>>0<=l>>>0?(c[n+308>>2]|0)>>>0>l>>>0:0)?!(i>>>0>0|((i|0)==0?h>>>0>(e[n+276>>1]|0)>>>0:0)):0)h=d;else{h=Zd(n,d,h,i)|0;if(!h)break}c[h+4>>2]=b;i=c[h>>2]|0;if((i|0)<=(m|0)){l=h;b=h;h=i;break b}do{j=h+8+(i*72|0)|0;i=i+-1|0;b=h+8+(i*72|0)|0;k=j+72|0;do{c[j>>2]=c[b>>2];j=j+4|0;b=b+4|0}while((j|0)<(k|0))}while((i|0)>(m|0));l=h;b=h;h=c[h>>2]|0;break b}while(0);qi(n,d);n=0;Ra=o;return n|0}else{l=d;b=d;h=m}while(0);c[b>>2]=h+1;j=l+8+(m*72|0)|0;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));b=l;h=l+8+(m*72|0)+40|0}while(0);c[h>>2]=-1;h=(c[b>>2]|0)+-1|0;if(g|0?c[g>>2]|0:0){g=qj(n,g)|0;c[b+8+(h*72|0)+8>>2]=g;n=qj(n,f)|0;c[b+8+(h*72|0)+4>>2]=n;n=b;Ra=o;return n|0}n=qj(n,f)|0;c[b+8+(h*72|0)+8>>2]=n;c[b+8+(h*72|0)+4>>2]=0;n=b;Ra=o;return n|0}function qj(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d){k=0;return k|0}k=c[d>>2]|0;i=c[d+4>>2]|0;if(!k){k=0;return k|0}g=Sv(i|0,0,1,0)|0;h=L()|0;a:do if(c[b+272>>2]|0)if(!(a[b+81>>0]|0))j=13;else{k=0;return k|0}else{do if(0<0|(0==0?i>>>0<(e[b+276>>1]|0)>>>0:0)){d=b+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];b=b+284|0;c[b>>2]=(c[b>>2]|0)+1;b=f;break a}d=b+296|0;f=c[d>>2]|0;if(!f){d=b+292|0;break}else{c[d>>2]=c[f>>2];b=b+284|0;c[b>>2]=(c[b>>2]|0)+1;b=f;break a}}else d=b+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;j=13}while(0);if((j|0)==13)b=_d(b,g,h)|0;if(!b){k=0;return k|0}ew(b|0,k|0,i|0)|0;a[b+i>>0]=0;d=a[b>>0]|0;if((a[880+(d&255)>>0]|0)>=0){k=b;return k|0}h=d<<24>>24==91?93:d;g=0;d=1;while(1){f=a[b+d>>0]|0;if(f<<24>>24==h<<24>>24){d=d+1|0;f=b+g|0;if((a[b+d>>0]|0)!=h<<24>>24)break;a[f>>0]=h}else a[b+g>>0]=f;g=g+1|0;d=d+1|0}a[f>>0]=0;k=b;return k|0}\nfunction yj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;Ea=Ra;Ra=Ra+448|0;ha=Ea+424|0;ca=Ea+416|0;ta=Ea+408|0;sa=Ea+400|0;ra=Ea+392|0;qa=Ea+384|0;ma=Ea+376|0;na=Ea+368|0;da=Ea+336|0;W=Ea+328|0;M=Ea+320|0;U=Ea+304|0;ba=Ea+280|0;V=Ea+272|0;ga=Ea+256|0;fa=Ea+240|0;ea=Ea+224|0;Z=Ea+216|0;ja=Ea+184|0;ia=Ea+152|0;X=Ea+144|0;J=Ea+136|0;N=Ea+128|0;K=Ea+120|0;I=Ea+112|0;_=Ea+104|0;T=Ea+96|0;Q=Ea+88|0;S=Ea+80|0;A=Ea+72|0;y=Ea+64|0;z=Ea+56|0;w=Ea+48|0;q=Ea+40|0;o=Ea+32|0;n=Ea+24|0;wa=Ea+16|0;B=Ea;oa=Ea+440|0;va=Ea+436|0;pa=Ea+432|0;Da=c[f>>2]|0;ua=f+8|0;k=c[ua>>2]|0;if(!k){if((c[f+116>>2]|0)==0?(b[Da+76>>1]&8)==0:0)a[f+23>>0]=1;a:do if(c[Da+272>>2]|0)if(!(a[Da+81>>0]|0))za=15;else{Ra=Ea;return}else{do if((e[Da+276>>1]|0)>=224){k=Da+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Ca=Da+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break a}k=Da+296|0;l=c[k>>2]|0;if(!l){k=Da+292|0;break}else{c[k>>2]=c[l>>2];Ca=Da+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break a}}else k=Da+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=15}while(0);if((za|0)==15)l=_d(Da,224,0)|0;if(!l){Ra=Ea;return}$=l+104|0;aa=$+120|0;do{c[$>>2]=0;$=$+4|0}while(($|0)<(aa|0));c[l>>2]=Da;k=Da+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[ua>>2]=l;Di(l,61,0,1,0)|0;Aa=l}else Aa=k;F=Aa+149|0;xa=d[F>>0]|d[F+1>>0]<<8|64;a[F>>0]=xa;a[F+1>>0]=xa>>8;xa=f+44|0;c[xa>>2]=2;k=c[f>>2]|0;ka=h+4|0;if(c[ka>>2]|0){if(a[k+165>>0]|0){cd(f,39404,n);Ra=Ea;return}r=wk(k,g)|0;if((r|0)<0){c[o>>2]=g;cd(f,39421,o);Ra=Ea;return}else g=h}else r=d[k+164>>0]|0;ya=Da+16|0;aa=c[ya>>2]|0;$=(r|0)==1;if(($?(v=c[f>>2]|0,p=v+16|0,(c[(c[p>>2]|0)+20>>2]|0)==0):0)?(a[f+199>>0]|0)==0:0){k=Pe(c[v>>2]|0,0,v,wa,0,542)|0;if(k|0){cd(f,32157,q);c[f+12>>2]=k;Ra=Ea;return}Ca=c[wa>>2]|0;c[(c[p>>2]|0)+20>>2]=Ca;k=c[v+92>>2]|0;p=c[Ca+4>>2]|0;c[p+4>>2]=c[Ca>>2];if(!(b[p+22>>1]&2)){m=p+32|0;n=p+36|0;o=(c[m>>2]|0)-(c[n>>2]|0)|0;if(((k+-512|0)>>>0<65025?(k+-1&k|0)==0:0)?(c[m>>2]=k,t=p+80|0,s=c[t>>2]|0,s|0):0){l=s+-4|0;c[t>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Ca=(c[14820]|0)+1|0;c[14820]=Ca;c[14821]=(Ca|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=40;break}else{k=Wa[c[29352>>2]&127](l)|0;za=40}while(0);do if((za|0)==40){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[t>>2]=0}Ca=Se(c[p>>2]|0,m,o)|0;c[n>>2]=(c[m>>2]|0)-(o&65535);if((Ca|0)==7){k=v+81|0;if((a[k>>0]|0)==0?(a[v+82>>0]|0)==0:0){a[k>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;k=v+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[v+236>>2]|0;if(k|0)c[k+12>>2]=7}Ra=Ea;return}}}Ca=qj(Da,g)|0;if(!Ca){Ra=Ea;return}if(!j)Ba=qj(Da,i)|0;else{c[w>>2]=i;Ba=dd(Da,45384,w)|0}if(!(c[ka>>2]|0))la=0;else la=c[aa+(r<<4)>>2]|0;k=c[f>>2]|0;do if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(x=c[k+312>>2]|0,(x|0)!=0):0){k=$a[x&127](c[k+316>>2]|0,19,Ca,Ba,la,c[f+240>>2]|0)|0;if((k|0)==1){cd(f,39216,z);c[f+12>>2]=23;za=2020;break}if((k|2|0)==2)if(!k){za=67;break}else{za=2020;break}else{cd(f,39231,y);c[f+12>>2]=1;za=2020;break}}else za=67;while(0);b:do if((za|0)==67){c[B>>2]=0;c[B+4>>2]=Ca;c[B+8>>2]=Ba;c[B+12>>2]=0;t=Da+404|0;c[t>>2]=0;k=Td(Da,la)|0;c:do if(k){l=c[k+4>>2]|0;c[l+4>>2]=c[k>>2];k=c[(c[l>>2]|0)+60>>2]|0;l=c[k>>2]|0;d:do if(l|0){k=Ya[c[l+40>>2]&127](k,14,B)|0;switch(k|0){case 12:break d;case 0:break;default:{l=c[B>>2]|0;if(!l)break c;c[A>>2]=l;cd(f,31408,A);l=c[B>>2]|0;if(!l)break c;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break c}else{Aa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break c}}}Wi(Aa,1);if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc(c[Aa+116>>2]|0,c[B>>2]|0,-1,1,-1)|0;l=c[B>>2]|0;if(!l){za=2020;break b}m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;k=c[B>>2]|0;if(!k){za=2020;break b}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);za=2020;break b}else{za=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);za=2020;break b}}while(0);B=a[Ca>>0]|0;q=d[208+(B&255)>>0]|0;e:do if(!(B<<24>>24)){k=0;l=59;do{o=k+l|0;m=(o|0)/2|0;n=q-(d[208+(d[c[4544+(m<<4)>>2]>>0]|0)>>0]|0)|0;if(!n){j=m;za=103;break e}B=(n|0)<0;k=B?k:m+1|0;l=B?m+-1|0:l}while((k|0)<=(l|0))}else{n=0;p=59;do{o=n+p|0;g=(o|0)/2|0;l=c[4544+(g<<4)>>2]|0;k=q-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!k){m=Ca;do{m=m+1|0;l=l+1|0;B=a[m>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0));if(!k){j=g;za=103;break e}}B=(k|0)<0;n=B?n:g+1|0;p=B?g+-1|0:p}while((n|0)<=(p|0))}while(0);f:do if((za|0)==103){s=4544+(j<<4)|0;m=a[4544+(j<<4)+5>>0]|0;g:do if(m&1?(D=c[f>>2]|0,(a[D+165>>0]|0)==0):0){n=f+4|0;p=D+24|0;g=(c[p>>2]&1|0)==0;q=D+16|0;B=c[(c[q>>2]|0)+12>>2]|0;a[D+78>>0]=a[B+77>>0]|0;if((b[B+78>>1]&1)==0?(C=eh(D,0,n,0)|0,(C|0)!=0):0)k=C;else za=107;h:do if((za|0)==107){k=c[D+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[q>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(E=eh(D,k,n,0)|0,E|0):0){k=E;break h}}while((l|0)>2);if(g)c[p>>2]=c[p>>2]&-2;if(!(a[D+89>>0]|0))break g;c[p>>2]=c[p>>2]|16;break g}while(0);c[f+12>>2]=k;Aa=f+36|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break f}while(0);E=m&255;do if((E&2|0)==0?(Ba|0)==0|(E&4|0)==0:0){E=a[4544+(j<<4)+7>>0]|0;m=E&255;E=E<<24>>24==0;Wi(Aa,E?1:m);if(E){if(a[(c[Aa>>2]|0)+81>>0]|0)break;yc(c[Aa+116>>2]|0,c[s>>2]|0,-1,1,0)|0;break}n=Aa+116|0;k=0;l=d[4544+(j<<4)+6>>0]|0;while(1){if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc((c[n>>2]|0)+(k*40|0)|0,c[5504+(l<<2)>>2]|0,-1,1,0)|0;k=k+1|0;if((k|0)==(m|0))break;else l=l+1|0}}while(0);do switch(a[4544+(j<<4)+4>>0]|0){case 11:{u=1<<r;ya=Aa+152|0;c[ya>>2]=c[ya>>2]|u;if(!$?a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0:0){ya=Aa+156|0;c[ya>>2]=c[ya>>2]|u}if(!Ba){c[xa>>2]=(c[xa>>2]|0)+2;Aa=ed(Aa,9,18352)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+124>>2]=-2e3;break f}c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;k=(k|0)>-1?k:(k|0)==-2147483648?2147483647:0-k|0;t=c[f+116>>2]|0;t=(t|0)==0?f:t;l=t+84|0;m=c[l>>2]|0;i:do if(!(m&u)){c[l>>2]=m|u;if(!$)break;s=c[t>>2]|0;l=s+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;m=Pe(c[s>>2]|0,0,s,wa,0,542)|0;if(m|0){cd(t,32157,S);c[t+12>>2]=m;break}ya=c[wa>>2]|0;c[(c[l>>2]|0)+20>>2]=ya;l=c[s+92>>2]|0;o=c[ya+4>>2]|0;c[o+4>>2]=c[ya>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;g=o+36|0;q=(c[p>>2]|0)-(c[g>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;za=147;break}else{l=Wa[c[29352>>2]&127](m)|0;za=147}while(0);do if((za|0)==147){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{za=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);za=Se(c[o>>2]|0,p,q)|0;c[g>>2]=(c[p>>2]|0)-(q&65535);if((za|0)!=7)break;l=s+81|0;do if(!(a[l>>0]|0)){if(a[s+82>>0]|0)break;a[l>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;l=s+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[s+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break i}while(0)}while(0);l=t+80|0;c[l>>2]=c[l>>2]|u;l=Aa+108|0;m=c[l>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[l>>2]=m+1;Aa=c[Aa+104>>2]|0;a[Aa+(m*20|0)>>0]=95;b[Aa+(m*20|0)+2>>1]=0;c[Aa+(m*20|0)+4>>2]=r;c[Aa+(m*20|0)+8>>2]=3;c[Aa+(m*20|0)+12>>2]=k;c[Aa+(m*20|0)+16>>2]=0;a[Aa+(m*20|0)+1>>0]=0}else Di(Aa,95,r,3,k)|0;c[(c[aa+(r<<4)+12>>2]|0)+80>>2]=k;m=c[aa+(r<<4)+4>>2]|0;l=c[m+4>>2]|0;c[l+4>>2]=c[m>>2];l=c[(c[l>>2]|0)+212>>2]|0;c[l+16>>2]=k;m=c[7357]|0;n=c[l+44>>2]|0;if((k|0)<=-1){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(za|0,Aa|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[m&127](n,k);break f}case 28:{k=c[aa+(r<<4)+4>>2]|0;if(Ba|0){c[wa>>2]=0;ii(Ba,wa)|0;l=c[wa>>2]|0;c[Da+92>>2]=l;g=c[k+4>>2]|0;c[g+4>>2]=c[k>>2];if(b[g+22>>1]&2){za=2020;break b}n=g+32|0;o=g+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[n>>2]=l;m=g+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Aa=(c[14820]|0)+1|0;c[14820]=Aa;c[14821]=(Aa|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=219;break}else{k=Wa[c[29352>>2]&127](l)|0;za=219}while(0);do if((za|0)==219){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Aa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);Aa=Se(c[g>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((Aa|0)!=7){za=2020;break b}k=Da+81|0;if(a[k>>0]|0){za=2020;break b}if(a[Da+82>>0]|0){za=2020;break b}a[k>>0]=1;if((c[Da+180>>2]|0)>0)c[Da+264>>2]=1;k=Da+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Da+236>>2]|0;if(!k){za=2020;break b}c[k+12>>2]=7;za=2020;break b}if(!k){n=0;o=0}else{o=c[(c[k+4>>2]|0)+32>>2]|0;n=o;o=((o|0)<0)<<31>>31}m=c[Aa>>2]|0;j:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=179;else za=199;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=180;break j}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=180;break j}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=179}while(0);if((za|0)==179){p=_d(m,8,0)|0;za=180}k:do if((za|0)==180){if(!p){za=199;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break k}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==199){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 30:{g=c[aa+(r<<4)+4>>2]|0;do if(!Ba){m=-1;n=0}else{za=a[Ba>>0]|0;k=(d[208+(za&255)>>0]|0)+-102|0;if(!(za<<24>>24==0|(k|0)!=0)){l=45388;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)m=2;else m=(Zm(Ba,1,0)|0)<<24>>24!=0&1;if(c[ka>>2]|0){n=1;break}p=c[Da+20>>2]|0;if((p|0)<=0){n=1;break}l=c[ya>>2]|0;n=m<<2;k=0;do{o=c[l+(k<<4)+4>>2]|0;if(o|0){za=c[o+4>>2]|0;c[za+4>>2]=c[o>>2];za=za+22|0;b[za>>1]=n|b[za>>1]&-13&65535}k=k+1|0}while((k|0)!=(p|0));n=1}while(0);if(!g)n=0;else{l=c[g+4>>2]|0;c[l+4>>2]=c[g>>2];l=l+22|0;k=b[l>>1]|0;if(n){k=(m<<2|k&-13&65535)&65535;b[l>>1]=k}n=(k&65535)>>>2&3}m=c[Aa>>2]|0;l:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=256;else za=276;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=257;break l}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=257;break l}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=256}while(0);if((za|0)==256){p=_d(m,8,0)|0;za=257}m:do if((za|0)==257){if(!p){za=276;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break m}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break m}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==276){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 24:{n=c[f+116>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<r;n:do if(((l&m|0)==0?(c[k>>2]=l|m,$):0)?(Y=c[n>>2]|0,O=Y+16|0,(c[(c[O>>2]|0)+20>>2]|0)==0):0){if(a[n+199>>0]|0)break;k=Pe(c[Y>>2]|0,0,Y,wa,0,542)|0;if(k|0){cd(n,32157,Q);c[n+12>>2]=k;break}ya=c[wa>>2]|0;c[(c[O>>2]|0)+20>>2]=ya;k=c[Y+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=302;break}else{k=Wa[c[29352>>2]&127](l)|0;za=302}while(0);do if((za|0)==302){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);ya=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((ya|0)!=7)break;k=Y+81|0;do if(!(a[k>>0]|0)){if(a[Y+82>>0]|0)break;a[k>>0]=1;if((c[Y+180>>2]|0)>0)c[Y+264>>2]=1;k=Y+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Y+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break n}while(0)}while(0);o=(c[xa>>2]|0)+1|0;c[xa>>2]=o;do if((a[Ca>>0]|32)<<24>>24==112){l=Aa+108|0;m=c[l>>2]|0;k=Aa+112|0;if((c[k>>2]|0)>(m|0)){c[l>>2]=m+1;za=c[Aa+104>>2]|0;a[za+(m*20|0)>>0]=-90;b[za+(m*20|0)+2>>1]=0;c[za+(m*20|0)+4>>2]=r;c[za+(m*20|0)+8>>2]=o;c[za+(m*20|0)+12>>2]=0;c[za+(m*20|0)+16>>2]=0;a[za+(m*20|0)+1>>0]=0;m=l;break}else{Di(Aa,166,r,o,0)|0;m=l;break}}else{c[wa>>2]=0;if(Ba){ii(Ba,wa)|0;k=c[wa>>2]|0;if((k|0)<0)k=(k|0)==-2147483648?2147483647:0-k|0;else za=322}else{k=0;za=322}m=Aa+108|0;l=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=-89;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=r;c[za+(l*20|0)+8>>2]=o;c[za+(l*20|0)+12>>2]=k;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0;k=n;break}else{Di(Aa,167,r,o,k)|0;k=n;break}}while(0);l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;Aa=c[Aa+104>>2]|0;a[Aa+(l*20|0)>>0]=81;b[Aa+(l*20|0)+2>>1]=0;c[Aa+(l*20|0)+4>>2]=o;c[Aa+(l*20|0)+8>>2]=1;c[Aa+(l*20|0)+12>>2]=0;c[Aa+(l*20|0)+16>>2]=0;a[Aa+(l*20|0)+1>>0]=0;break f}else{Di(Aa,81,o,1,0)|0;break f}}case 23:{do if(!Ba)za=339;else{o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-101|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45400;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(k){k=n+-110|0;if(!(o|(k|0)!=0)){l=45393;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)l=0;else{za=339;break}}else l=1;if(c[ka>>2]|0){za=350;break}p=c[Da+20>>2]|0;if((p|0)>2){o=c[ya>>2]|0;k=l&255;m=2;do{n=c[c[(c[o+(m<<4)+4>>2]|0)+4>>2]>>2]|0;do if(!(a[n+12>>0]|0)){za=c[n+216>>2]|0;if(za|0?(a[za+43>>0]|0)==2:0)break;a[n+4>>0]=k}while(0);m=m+1|0}while((m|0)!=(p|0))}else k=l&255;a[Da+83>>0]=k;za=350}while(0);if((za|0)==339)if(!(c[ka>>2]|0))m=Da+83|0;else{l=-1;za=350}if((za|0)==350){k=c[c[(c[aa+(r<<4)+4>>2]|0)+4>>2]>>2]|0;do if((l|0)>-1){if(a[k+12>>0]|0)break;za=c[k+216>>2]|0;if(za|0?(a[za+43>>0]|0)==2:0)break;a[k+4>>0]=l}while(0);m=k+4|0}n=Aa+108|0;k=c[n>>2]|0;o=Aa+112|0;l=(c[o>>2]|0)>(k|0);if((a[m>>0]|0)==1){if(l){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,45400,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}else{if(l){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,45393,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}}case 20:{o:do if(Ba){m=(Eu(Ba)|0)&1073741823;if(m){n=Ba;p=36033;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=381;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=383;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=0;break o}}if((za|0)==381){l=0;k=a[208+(d[p>>0]|0)>>0]|0}else if((za|0)==383)l=l&255;if((l|0)!=(k&255|0)){n=Ba;p=36040;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2043;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2041;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=1;break o}}if((za|0)==2041)l=l&255;else if((za|0)==2043){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=1;break}n=Ba;p=36048;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2050;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2048;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=2;break o}}if((za|0)==2048)l=l&255;else if((za|0)==2050){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=2;break}n=Ba;p=36052;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2057;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2055;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=3;break o}}if((za|0)==2055)l=l&255;else if((za|0)==2057){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=3;break}n=Ba;p=36061;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2064;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2062;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=4;break o}}if((za|0)==2062)l=l&255;else if((za|0)==2064){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=4;break}n=Ba;o=36068;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2071;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[o>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2069;break}if((m|0)>1){n=n+1|0;o=o+1|0;m=m+-1|0}else{s=5;break o}}if((za|0)==2069)l=l&255;else if((za|0)==2071){l=0;k=a[208+(d[o>>0]|0)>>0]|0}if((l|0)==(k&255|0))s=5;else za=387}else s=0}else s=0}else za=387;while(0);if((za|0)==387)if(!(c[ka>>2]|0)){c[ka>>2]=1;r=0;s=-1}else s=-1;l=c[Da+20>>2]|0;if((l|0)>0){p=Aa+152|0;m=Aa+108|0;k=Aa+112|0;g=Aa+104|0;q=Aa+156|0;do{o=l;l=l+-1|0;do if(c[(c[ya>>2]|0)+(l<<4)+4>>2]|0){if((l|0)!=(r|0)?c[ka>>2]|0:0)break;n=1<<l;c[p>>2]=c[p>>2]|n;do if((l|0)!=1){if(!(a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(l<<4)+4>>2]|0)+9>>0]|0))break;c[q>>2]=c[q>>2]|n}while(0);n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;za=c[g>>2]|0;a[za+(n*20|0)>>0]=7;b[za+(n*20|0)+2>>1]=0;c[za+(n*20|0)+4>>2]=l;c[za+(n*20|0)+8>>2]=1;c[za+(n*20|0)+12>>2]=s;c[za+(n*20|0)+16>>2]=0;a[za+(n*20|0)+1>>0]=0;break}else{Di(Aa,7,l,1,s)|0;break}}while(0)}while((o|0)>1)}else{m=Aa+108|0;k=Aa+112|0}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=1;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 21:{m=c[c[(c[aa+(r<<4)+4>>2]|0)+4>>2]>>2]|0;za=wa;c[za>>2]=-2;c[za+4>>2]=-1;if(Ba){Vd(Ba,wa)|0;l=wa;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)<-1|(l|0)==-1&k>>>0<4294967295){k=wa;c[k>>2]=-1;c[k+4>>2]=-1;k=-1;n=-1}else n=l;l=m+160|0;c[l>>2]=k;c[l+4>>2]=n;l=c[m+216>>2]|0;if(!l)o=k;else{o=l+16|0;c[o>>2]=k;c[o+4>>2]=n;o=k}}else{n=m+160|0;o=c[n>>2]|0;n=c[n+4>>2]|0}m=wa;c[m>>2]=o;c[m+4>>2]=n;m=c[Aa>>2]|0;p:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=421;else za=441;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=422;break p}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=422;break p}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=421}while(0);if((za|0)==421){p=_d(m,8,0)|0;za=422}q:do if((za|0)==422)if(p){m=p;k=m;a[k>>0]=o;a[k+1>>0]=o>>8;a[k+2>>0]=o>>16;a[k+3>>0]=o>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break q}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=441;while(0);do if((za|0)==441){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;break f}case 1:{p=c[aa+(r<<4)+4>>2]|0;if(Ba|0){o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-110|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45841;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}do if(!k)m=0;else{k=n+-102|0;if(!(o|(k|0)!=0)){l=45810;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){m=1;break}k=n+-105|0;if(!(o|(k|0)!=0)){l=45846;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){m=2;break}c[wa>>2]=0;ii(Ba,wa)|0;m=c[wa>>2]|0;m=m>>>0<3?m&255:0}while(0);a[Da+84>>0]=m;n=c[p+4>>2]|0;c[n+4>>2]=c[p>>2];l=m&255;if(b[n+22>>1]&2){k=n+17|0;if(((l|0)!=0|0)!=(d[k>>0]|0)){za=2020;break b}}else k=n+17|0;a[k>>0]=(l|0)!=0&1;a[n+18>>0]=(l|0)==2&1;k=m+-1|0;if(k>>>0>=2){za=2020;break b}ya=c[Aa+108>>2]|0;za=ed(Aa,5,18400)|0;c[za+4>>2]=r;c[za+24>>2]=r;c[za+48>>2]=ya+4;c[za+84>>2]=r;c[za+92>>2]=k;k=1<<r;za=Aa+152|0;c[za>>2]=c[za>>2]|k;if($){za=2020;break b}if(!(a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0)){za=2020;break b}za=Aa+156|0;c[za>>2]=c[za>>2]|k;za=2020;break b}k=c[p+4>>2]|0;c[k+4>>2]=c[p>>2];if(!(a[k+17>>0]|0))n=0;else n=(a[k+18>>0]|0)==0?1:2;m=c[Aa>>2]|0;r:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=466;else za=486;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=467;break r}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=467;break r}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=466}while(0);if((za|0)==466){p=_d(m,8,0)|0;za=467}s:do if((za|0)==467){if(!p){za=486;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break s}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==486){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 16:{if(!((Ba|0)!=0?(ya=(ii(Ba,oa)|0)==0,u=c[oa>>2]|0,!(ya|(u|0)<1)):0)){c[oa>>2]=2147483647;u=2147483647}t=c[f+116>>2]|0;t=(t|0)==0?f:t;k=t+84|0;l=c[k>>2]|0;s=1<<r;t:do if((l&s|0)==0?(c[k>>2]=l|s,$):0){q=c[t>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(t,32157,T);c[t+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=535;break}else{k=Wa[c[29352>>2]&127](l)|0;za=535}while(0);do if((za|0)==535){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break t}while(0)}while(0);m=t+80|0;c[m>>2]=c[m>>2]|s;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=70;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=u;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,70,u,1,0)|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=59;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=r;c[za+(k*20|0)+8>>2]=0;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,59,r,0,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=0;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,0,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=83;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=-1;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,83,1,-1,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=47;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,47,1,k,0)|0;l=c[m>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=(c[Aa+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;break f}case 4:{if(Ba|0){c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;c[(c[aa+(r<<4)+12>>2]|0)+80>>2]=k;m=c[aa+(r<<4)+4>>2]|0;l=c[m+4>>2]|0;c[l+4>>2]=c[m>>2];l=c[(c[l>>2]|0)+212>>2]|0;c[l+16>>2]=k;m=c[7357]|0;n=c[l+44>>2]|0;if((k|0)<=-1){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(za|0,Aa|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[m&127](n,k);break f}n=c[(c[aa+(r<<4)+12>>2]|0)+80>>2]|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;u:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=577;else za=597;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=578;break u}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=578;break u}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=577}while(0);if((za|0)==577){p=_d(m,8,0)|0;za=578}v:do if((za|0)==578)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break v}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break v}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=597;while(0);do if((za|0)==597){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 5:{if(Ba|0){c[wa>>2]=1;do if(!(ii(Ba,wa)|0))k=c[wa>>2]|0;else{Aa=c[aa+(r<<4)+4>>2]|0;k=c[wa>>2]|0;m=c[Aa+4>>2]|0;c[m+4>>2]=c[Aa>>2];m=c[(c[m>>2]|0)+212>>2]|0;if(!k){k=0;break}if((k|0)<0){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;l=(c[m+28>>2]|0)+(c[m+24>>2]|0)|0;l=Wv(za|0,Aa|0,l|0,((l|0)<0)<<31>>31|0)|0;L()|0}else l=k;c[m+20>>2]=l}while(0);f=(Zm(Ba,1,(k|0)!=0&1)|0)<<24>>24==0;r=Da+32|0;za=r;xa=c[za>>2]|0;za=c[za+4>>2]|0;Aa=r;c[Aa>>2]=f?xa&-33:xa|32;c[Aa+4>>2]=f?za:za;do if(a[Da+79>>0]|0){k=c[Da+20>>2]|0;if((k|0)<=0)break;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break;else q=q+16|0}}while(0);break f}if(0==0?(c[Da+32>>2]&32|0)==0:0){n=0;o=0}else{k=c[aa+(r<<4)+4>>2]|0;l=c[k+4>>2]|0;c[l+4>>2]=c[k>>2];l=c[(c[l>>2]|0)+212>>2]|0;k=c[l+16>>2]|0;if((k|0)<=-1){ya=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;za=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(ya|0,za|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}o=c[l+20>>2]|0;o=(k|0)<(o|0)?o:k;n=o;o=((o|0)<0)<<31>>31}m=c[Aa>>2]|0;w:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=626;else za=646;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=627;break w}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=627;break w}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=626}while(0);if((za|0)==626){p=_d(m,8,0)|0;za=627}x:do if((za|0)==627){if(!p){za=646;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break x}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break x}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==646){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 25:{m=c[Aa>>2]|0;y:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=685;else za=705;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];za=m+284|0;c[za>>2]=(c[za>>2]|0)+1;za=686;break y}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];za=m+284|0;c[za>>2]=(c[za>>2]|0)+1;za=686;break y}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=685}while(0);if((za|0)==685){l=_d(m,8,0)|0;za=686}z:do if((za|0)==686)if(l){m=l;k=m;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=l;a[o>>0]=-14;l=p;break}else{Ei(Aa,n+(k*20|0)|0,l,-14);l=p;break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,l);l=p;break z}k=l;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[l>>2]=c[ya>>2];c[ya>>2]=l;l=p;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);l=p;break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);l=p;break}}else za=705;while(0);do if((za|0)==705){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}else m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 35:{if(Ba|0){l=a[Ba>>0]|0;do if((l+-48&255)<3)k=(l<<24>>24)+-48|0;else{n=d[208+(l&255)>>0]|0;k=n+-102|0;o=l<<24>>24==0;if(!(o|(k|0)!=0)){l=38150;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}if(!k){k=1;break}k=n+-109|0;if(!(o|(k|0)!=0)){l=36061;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}k=(k|0)==0?2:0}while(0);l=c[f>>2]|0;m=l+80|0;if((k|0)==(d[m>>0]|0))break f;n=l+16|0;o=c[(c[n>>2]|0)+20>>2]|0;A:do if(o|0){do if(a[l+79>>0]|0){if(a[o+8>>0]|0)break;ug(o);c[(c[n>>2]|0)+20>>2]=0;$b(l);break A}while(0);cd(f,45858,_);break f}while(0);a[m>>0]=k;break f}n=d[Da+80>>0]|0;m=c[Aa>>2]|0;B:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=727;else za=747;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=728;break B}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=728;break B}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=727}while(0);if((za|0)==727){p=_d(m,8,0)|0;za=728}C:do if((za|0)==728)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break C}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=747;while(0);do if((za|0)==747){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 36:{if(!Ba){l=c[14771]|0;if(!l)break f;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}do if(a[Ba>>0]|0){Aa=c[Da>>2]|0;Aa=(Za[c[Aa+32>>2]&127](Aa,Ba,1,wa)|0)!=0;if(Aa|(c[wa>>2]|0)==0){cd(f,45410,I);za=2020;break b}else break}while(0);D:do if((d[Da+80>>0]|0)<2){k=c[f>>2]|0;l=k+16|0;m=c[(c[l>>2]|0)+20>>2]|0;if(!m)break;do if(a[k+79>>0]|0){if(a[m+8>>0]|0)break;ug(m);c[(c[l>>2]|0)+20>>2]=0;$b(k);break D}while(0);cd(f,45858,K)}while(0);k=c[14771]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Aa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);if(!(a[Ba>>0]|0)){c[14771]=0;za=2020;break b}else{c[N>>2]=Ba;za=Bb(31408,N)|0;c[14771]=za;za=2020;break b}}case 33:{if(Ba|0){k=Da+79|0;if(!(a[k>>0]|0)){cd(f,45435,J);za=2020;break b}if($){za=2020;break b}Aa=(Zm(Ba,0,1)|0)+1&7;a[aa+(r<<4)+8>>0]=Aa<<24>>24==0?1:Aa;a[aa+(r<<4)+9>>0]=1;if(!(a[k>>0]|0)){za=2020;break b}k=c[Da+20>>2]|0;if((k|0)<=0){za=2020;break b}r=Da+32|0;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break f;else q=q+16|0}}n=(d[aa+(r<<4)+8>>0]|0)+-1|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;E:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=815;else za=835;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=816;break E}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=816;break E}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=815}while(0);if((za|0)==815){p=_d(m,8,0)|0;za=816}F:do if((za|0)==816)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break F}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=835;while(0);do if((za|0)==835){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 2:{if(Ba|0){l=4544+(j<<4)+8|0;k=c[l>>2]|0;l=c[l+4>>2]|0;m=Da+79|0;za=(a[m>>0]|0)==0;k=za?k&-16385:k;l=za?l:l;do if(!((Zm(Ba,1,0)|0)<<24>>24)){za=Da+32|0;xa=za;f=c[xa+4>>2]&~l;c[za>>2]=c[xa>>2]&~k;c[za+4>>2]=f;if(!((k|0)==524288&(l|0)==0))break;za=Da+472|0;c[za>>2]=0;c[za+4>>2]=0}else{za=Da+32|0;xa=za;f=c[xa+4>>2]|l;c[za>>2]=c[xa>>2]|k;c[za+4>>2]=f}while(0);k=Aa+108|0;l=c[k>>2]|0;if((c[Aa+112>>2]|0)>(l|0)){c[k>>2]=l+1;$=c[Aa+104>>2]|0;a[$+(l*20|0)>>0]=-98;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,158,0,0,0)|0;if(!(a[m>>0]|0)){za=2020;break b}k=c[Da+20>>2]|0;if((k|0)<=0){za=2020;break b}r=Da+32|0;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break f;else q=q+16|0}}za=a[4544+(j<<4)+7>>0]|0;n=za&255;za=za<<24>>24==0;Wi(Aa,za?1:n);if(za)if(!(a[(c[Aa>>2]|0)+81>>0]|0)){yc(c[Aa+116>>2]|0,c[s>>2]|0,-1,1,0)|0;o=Aa}else o=Aa;else{m=Aa+116|0;k=0;l=d[4544+(j<<4)+6>>0]|0;while(1){if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc((c[m>>2]|0)+(k*40|0)|0,c[5504+(l<<2)>>2]|0,-1,1,0)|0;k=k+1|0;if((k|0)==(n|0)){o=Aa;break}else l=l+1|0}}n=Da+32|0;m=4544+(j<<4)+8|0;n=(c[m>>2]&c[n>>2]|0?1:(c[m+4>>2]&c[n+4>>2]|0)!=0)&1;m=c[o>>2]|0;G:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=878;else za=898;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=879;break G}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=879;break G}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=878}while(0);if((za|0)==878){p=_d(m,8,0)|0;za=879}H:do if((za|0)==879){if(!p){za=898;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[o>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break H}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break H}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==898){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[o>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 34:{if(!Ba)break f;s=bd(f,2,Ba,la)|0;if(!s)break f;m=c[s+72>>2]|0;if(!m)n=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0)){n=k;break}else k=k+1|0}k=c[s+8>>2]|0;I:do if(!k)r=0;else while(1){ya=k+55|0;if(((d[ya>>0]|d[ya+1>>0]<<8)&3)==2){r=k;break I}k=c[k+20>>2]|0;if(!k){r=0;break}}while(0);c[xa>>2]=7;o=c[f+116>>2]|0;o=(o|0)==0?f:o;k=o+84|0;l=c[k>>2]|0;m=1<<n;J:do if(!(l&m)){c[k>>2]=l|m;if((n|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,X);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=951;break}else{k=Wa[c[29352>>2]&127](l)|0;za=951}while(0);do if((za|0)==951){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);ya=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((ya|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break J}while(0)}while(0);Sk(f,s)|0;i=s+42|0;l=b[i>>1]|0;if(l<<16>>16<=0)break f;m=c[s+4>>2]|0;t=4544+(j<<4)+8|0;u=r+4|0;if(!r){r=c[t>>2]|0;t=c[t+4>>2]|0;s=(r|0)==0&(t|0)==0;t=(r|0)==0&(t|0)==0?45496:45488;r=0;k=0;q=m;while(1){p=a[q+15>>0]|0;za=p&2;g=(za&255)>>>1&255;if(za<<24>>24!=0&s)k=k+1|0;else{n=c[q>>2]|0;if(!(p&4))m=59952;else m=n+(Eu(n)|0)+1|0;o=(a[q+12>>0]|0)!=0&1;l=c[q+4>>2]|0;if(!l)l=0;else l=c[l+8>>2]|0;c[ia>>2]=r-k;c[ia+4>>2]=n;c[ia+8>>2]=m;c[ia+12>>2]=o;c[ia+16>>2]=l;c[ia+20>>2]=p&1;c[ia+24>>2]=g;_m(Aa,1,t,ia);l=b[i>>1]|0}r=r+1|0;if((r|0)>=(l<<16>>16|0))break f;else q=q+16|0}}s=0;k=0;r=m;p=l<<16>>16;while(1){o=a[r+15>>0]|0;ya=o&2;q=(ya&255)>>>1&255;do if(!(ya<<24>>24))za=979;else{ya=t;if(!((c[ya>>2]|0)==0&(c[ya+4>>2]|0)==0)){za=979;break}k=k+1|0}while(0);if((za|0)==979){za=0;l=(o&1)==0;K:do if(l)l=(l^1)&1;else{if((p|0)<1){l=1;break}m=c[u>>2]|0;l=1;while(1){if((s|0)==(b[m+(l+-1<<1)>>1]|0))break K;n=l+1|0;if((l|0)<(p|0))l=n;else{l=n;break}}}while(0);p=t;p=(c[p>>2]|0)==0&(c[p+4>>2]|0)==0?45496:45488;g=c[r>>2]|0;if(!(o&4))n=59952;else n=g+(Eu(g)|0)+1|0;o=(a[r+12>>0]|0)!=0&1;m=c[r+4>>2]|0;if(!m)m=0;else m=c[m+8>>2]|0;c[ja>>2]=s-k;c[ja+4>>2]=g;c[ja+8>>2]=n;c[ja+12>>2]=o;c[ja+16>>2]=m;c[ja+20>>2]=l;c[ja+24>>2]=q;_m(Aa,1,p,ja);l=b[i>>1]|0}s=s+1|0;p=l<<16>>16;if((s|0)>=(p|0))break;else r=r+16|0}break}case 17:{if(!Ba)break f;i=hi(Da,Ba,la)|0;if(!i)break f;m=c[i+24>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}u=4544+(j<<4)+8|0;u=(c[u>>2]|0)==0&(c[u+4>>2]|0)==0;r=b[(u?i+50|0:i+52|0)>>1]|0;j=r&65535;c[xa>>2]=u?3:6;s=c[i+12>>2]|0;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;L:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,Z);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1010;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1010}while(0);do if((za|0)==1010){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break L}while(0)}while(0);if(!(r<<16>>16))break f;t=i+4|0;q=s+4|0;r=Aa+108|0;s=Aa+112|0;o=i+28|0;p=i+32|0;n=i+50|0;g=Aa+104|0;if(u){m=0;do{za=b[(c[t>>2]|0)+(m<<1)>>1]|0;k=za<<16>>16;if(za<<16>>16<0)l=0;else l=c[(c[q>>2]|0)+(k<<4)>>2]|0;c[ea>>2]=m;c[ea+4>>2]=k;c[ea+8>>2]=l;_m(Aa,1,45503,ea);k=c[xa>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;za=c[g>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,k,0)|0;m=m+1|0}while((m|0)!=(j|0))}else{m=0;do{za=b[(c[t>>2]|0)+(m<<1)>>1]|0;k=za<<16>>16;if(za<<16>>16<0)l=0;else l=c[(c[q>>2]|0)+(k<<4)>>2]|0;c[fa>>2]=m;c[fa+4>>2]=k;c[fa+8>>2]=l;_m(Aa,1,45503,fa);l=c[(c[p>>2]|0)+(m<<2)>>2]|0;k=m>>>0<(e[n>>1]|0)>>>0&1;c[ga>>2]=d[(c[o>>2]|0)+m>>0];c[ga+4>>2]=l;c[ga+8>>2]=k;_m(Aa,4,45508,ga);k=c[xa>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;za=c[g>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,k,0)|0;m=m+1|0}while((m|0)!=(j|0))}break}case 18:{if(!Ba)break f;r=Sd(Da,Ba,la)|0;if(!r)break f;m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}c[xa>>2]=5;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;M:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,V);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1059;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1059}while(0);do if((za|0)==1059){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break M}while(0)}while(0);k=c[r+8>>2]|0;if(!k)break f;l=0;while(1){xa=c[k>>2]|0;f=(a[k+54>>0]|0)!=0&1;ya=k+55|0;ya=c[30092+(((d[ya>>0]|d[ya+1>>0]<<8)&3)<<2)>>2]|0;za=(c[k+36>>2]|0)!=0&1;c[ba>>2]=l;c[ba+4>>2]=xa;c[ba+8>>2]=f;c[ba+12>>2]=ya;c[ba+16>>2]=za;_m(Aa,1,45517,ba);k=c[k+20>>2]|0;if(!k)break;else l=l+1|0}break}case 10:{c[xa>>2]=3;o=Da+20|0;k=c[o>>2]|0;if((k|0)<=0){za=2020;break b}n=0;while(1){l=c[ya>>2]|0;m=c[l+(n<<4)+4>>2]|0;if(m){l=c[l+(n<<4)>>2]|0;k=c[c[m+4>>2]>>2]|0;if(!(a[k+15>>0]|0))k=c[k+168>>2]|0;else k=59952;c[U>>2]=n;c[U+4>>2]=l;c[U+8>>2]=k;_m(Aa,1,45523,U);k=c[o>>2]|0}n=n+1|0;if((n|0)>=(k|0)){za=2020;break b}}}case 7:{c[xa>>2]=2;k=c[Da+388>>2]|0;if(!k){za=2020;break b}l=0;while(1){za=c[c[k+8>>2]>>2]|0;c[M>>2]=l;c[M+4>>2]=za;_m(Aa,1,45527,M);k=c[k>>2]|0;if(!k)break;else l=l+1|0}break}case 14:{if(!Ba)break f;r=Sd(Da,Ba,la)|0;if(!r)break f;s=c[r+16>>2]|0;if(!s)break f;m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}c[xa>>2]=8;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;N:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,W);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1106;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1106}while(0);do if((za|0)==1106){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break N}while(0)}while(0);i=r+4|0;m=s;n=0;while(1){p=m+20|0;O:do if((c[p>>2]|0)>0){g=m+8|0;q=m+26|0;r=m+25|0;o=0;while(1){s=c[g>>2]|0;t=c[(c[i>>2]|0)+(c[m+36+(o<<3)>>2]<<4)>>2]|0;u=c[m+36+(o<<3)+4>>2]|0;switch(a[q>>0]|0){case 8:{k=45928;break}case 9:{k=45937;break}case 10:{k=45949;break}case 7:{k=45957;break}default:k=45966}switch(a[r>>0]|0){case 8:{l=45928;break}case 9:{l=45937;break}case 10:{l=45949;break}case 7:{l=45957;break}default:l=45966}c[da>>2]=n;c[da+4>>2]=o;c[da+8>>2]=s;c[da+12>>2]=t;c[da+16>>2]=u;c[da+20>>2]=k;c[da+24>>2]=l;c[da+28>>2]=45539;_m(Aa,1,45530,da);o=o+1|0;if((o|0)>=(c[p>>2]|0))break O}}while(0);m=c[m+4>>2]|0;if(!m)break;else n=n+1|0}break}case 13:{k=c[xa>>2]|0;J=k+1|0;K=k+5|0;M=k+6|0;c[xa>>2]=M;l=c[(c[(c[ya>>2]|0)+(r<<4)+12>>2]|0)+16>>2]|0;P:do if(l|0){C=(Ba|0)==0;D=f+116|0;E=Aa+108|0;F=Aa+112|0;G=Aa+104|0;H=f+40|0;I=f+56|0;h=k+2|0;w=k+3|0;x=Aa+12|0;y=Da+480|0;z=Da+304|0;A=Da+308|0;B=Da+300|0;k=l;do{if(C){v=c[k+8>>2]|0;k=c[k>>2]|0}else{v=bd(f,0,Ba,la)|0;k=0}do if(v|0){t=v+16|0;if(!(c[t>>2]|0))break;m=c[v+72>>2]|0;if(!m)s=-1e6;else{n=c[ya>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0)){s=l;break}else l=l+1|0}o=c[D>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<s;Q:do if(!(m&n)){c[l>>2]=m|n;if((s|0)!=1)break;r=c[o>>2]|0;l=r+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[r>>2]|0,0,r,wa,0,542)|0;if(m|0){cd(o,32157,na);c[o+12>>2]=m;break}ta=c[wa>>2]|0;c[(c[l>>2]|0)+20>>2]=ta;l=c[r+92>>2]|0;o=c[ta+4>>2]|0;c[o+4>>2]=c[ta>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;g=o+36|0;q=(c[p>>2]|0)-(c[g>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ta=(c[14820]|0)+1|0;c[14820]=ta;c[14821]=(ta|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;za=1159;break}else{l=Wa[c[29352>>2]&127](m)|0;za=1159}while(0);do if((za|0)==1159){za=0;c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ta=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ta=Se(c[o>>2]|0,p,q)|0;c[g>>2]=(c[p>>2]|0)-(q&65535);if((ta|0)!=7)break;l=r+81|0;do if(!(a[l>>0]|0)){if(a[r+82>>0]|0)break;a[l>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;l=r+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[r+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break Q}while(0)}while(0);Hj(f,s,c[v+28>>2]|0,0,c[v>>2]|0);l=M+(b[v+42>>1]|0)|0;if((l|0)>(c[xa>>2]|0)){c[xa>>2]=l;Gj(f,0,s,v,108)}else Gj(f,0,s,v,108);m=c[v>>2]|0;l=c[E>>2]|0;if((c[F>>2]|0)>(l|0)){c[E>>2]=l+1;ta=c[G>>2]|0;a[ta+(l*20|0)>>0]=110;b[ta+(l*20|0)+2>>1]=0;c[ta+(l*20|0)+4>>2]=0;c[ta+(l*20|0)+8>>2]=J;c[ta+(l*20|0)+12>>2]=0;c[ta+(l*20|0)+16>>2]=0;a[ta+(l*20|0)+1>>0]=0}else l=Di(Aa,110,0,J,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[E>>2]|0)+-1|0;Ei(Aa,(c[G>>2]|0)+(l*20|0)|0,m,0)}l=c[t>>2]|0;if(!l)l=1;else{p=l;l=1;do{m=Sd(Da,c[p+8>>2]|0,la)|0;R:do if(m|0){c[oa>>2]=0;Hj(f,s,c[m+28>>2]|0,0,c[m>>2]|0);if(Om(f,m,p,oa,0)|0)break P;o=c[oa>>2]|0;if(!o){Gj(f,l,s,m,108);break}m=c[o+44>>2]|0;n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=108;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=l;c[ta+(n*20|0)+8>>2]=m;c[ta+(n*20|0)+12>>2]=s;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0}else Di(Aa,108,l,m,s)|0;n=c[ua>>2]|0;o=Ij(f,o)|0;if(!o)break;m=c[n>>2]|0;if(!(a[m+81>>0]|0)){sa=c[n+104>>2]|0;ta=(c[n+108>>2]|0)+-1|0;a[sa+(ta*20|0)+1>>0]=-9;c[sa+(ta*20|0)+16>>2]=o;break}if(c[m+480>>2]|0)break;ta=(c[o>>2]|0)+-1|0;c[o>>2]=ta;if(ta|0)break;m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break R}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;ta=m+300|0;c[o>>2]=c[ta>>2];c[ta>>2]=o;break R}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ta=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);l=l+1|0;p=c[p+4>>2]|0}while((p|0)!=0)}if((c[H>>2]|0)<(l|0))c[H>>2]=l;l=c[E>>2]|0;if((c[F>>2]|0)>(l|0)){c[E>>2]=l+1;$=c[G>>2]|0;a[$+(l*20|0)>>0]=36;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0));j=l}else j=Di(Aa,36,0,0,0)|0;l=c[t>>2]|0;if(l|0){i=v+36|0;u=1;while(1){s=l+8|0;m=Sd(Da,c[s>>2]|0,la)|0;c[oa>>2]=0;c[va>>2]=0;p=(m|0)!=0;if(p)Om(f,m,l,oa,va)|0;t=c[I>>2]|0;r=t+-1|0;c[I>>2]=r;g=l+20|0;m=c[g>>2]|0;if((m|0)>0){o=0;do{n=c[va>>2]|0;m=o+M|0;Vj(Aa,v,0,c[((n|0)==0?l+36+(o<<3)|0:n+(o<<2)|0)>>2]|0,m);n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=50;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=m;c[ta+(n*20|0)+8>>2]=r;c[ta+(n*20|0)+12>>2]=0;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0}else Di(Aa,50,m,r,0)|0;o=o+1|0;m=c[g>>2]|0}while((o|0)<(m|0))}n=c[oa>>2]|0;do if(!n){if(!p)break;m=c[E>>2]|0;n=m+2|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=30;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=u;c[ta+(m*20|0)+8>>2]=n;c[ta+(m*20|0)+12>>2]=M;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,30,u,n,M)|0;m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=11;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=r;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,11,0,r,0)|0;break}}else{q=gl(Da,n)|0;g=c[g>>2]|0;n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=92;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=M;c[ta+(n*20|0)+8>>2]=m;c[ta+(n*20|0)+12>>2]=K;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0;m=n}else m=Di(Aa,92,M,m,K)|0;n=c[Aa>>2]|0;S:do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[E>>2]|0)+-1|0;n=c[G>>2]|0;o=n+(m*20|0)|0;do if((g|0)<=-1){p=n+(m*20|0)+1|0;if(a[p>>0]|0)break;if((g|0)==-3){c[n+(m*20|0)+16>>2]=q;a[p>>0]=-3;break S}if(!q)break S;c[n+(m*20|0)+16>>2]=q;a[p>>0]=g;if((g|0)!=-12)break S;ta=q+12|0;c[ta>>2]=(c[ta>>2]|0)+1;break S}while(0);Ei(Aa,o,q,g)}else{if((g|0)==-12)break;kg(n,g,q)}while(0);m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=29;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=u;c[ta+(m*20|0)+8>>2]=r;c[ta+(m*20|0)+12>>2]=K;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else m=Di(Aa,29,u,r,K)|0;if(a[(c[Aa>>2]|0)+81>>0]|0)break;ta=c[G>>2]|0;a[ta+(m*20|0)+1>>0]=-3;c[ta+(m*20|0)+16>>2]=0}while(0);m=c[E>>2]|0;n=(c[F>>2]|0)>(m|0);do if(!(c[i>>2]&32))if(n){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=-128;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=h;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,128,0,h,0)|0;break}else if(n){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=73;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=h;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,73,0,h,0)|0;break}while(0);c[ma>>2]=c[s>>2];c[ma+4>>2]=u+-1;_m(Aa,w,45544,ma);m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=81;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=J;c[ta+(m*20|0)+8>>2]=4;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,81,J,4,0)|0;n=c[x>>2]|0;m=0-t|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0)mk(n,Aa,m);else c[(c[n+64>>2]|0)+(m<<2)>>2]=c[E>>2];m=c[va>>2]|0;T:do if(m|0){if(c[y>>2]|0){Xd(Da,m);break}n=m;do if((c[z>>2]|0)>>>0<=n>>>0){if((c[A>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[B>>2];c[B>>2]=m;break T}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ta=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);l=c[l+4>>2]|0;if(!l)break;else u=u+1|0}}l=j+1|0;m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=5;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=l;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,5,0,l,0)|0;m=c[E>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[G>>2]|0)+(((j|0)<0?m+-1|0:j)*20|0)|0;else l=59308;c[l+8>>2]=m}while(0)}while((k|0)!=0)}while(0);break f}case 6:{if(!Ba)break f;l=(Zm(Ba,1,0)|0)<<24>>24!=0;Aa=l?45976:31415;Hd(Da,43614,2,1,Aa,105,0,0,0,0,0)|0;Hd(Da,43614,3,1,Aa,105,0,0,0,0,0)|0;Hd(Da,43609,2,1,31411,105,0,0,0,0,0)|0;Aa=Jd(Da,43609,2,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|12;Aa=Jd(Da,43609,3,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|12;l=l?12:4;Aa=Jd(Da,43614,2,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|l&255;Aa=Jd(Da,43614,3,1,0)|0;k=Aa+4|0;if(!Aa)break f;c[k>>2]=c[k>>2]|l&255;break f}case 19:{V=(a[Ca>>0]|32)<<24>>24==113;U=(c[h>>2]|0)==0?-1:r;c[xa>>2]=6;c[oa>>2]=100;if(Ba){ii(Ba,oa)|0;k=c[oa>>2]|0;if((k|0)<1){c[oa>>2]=100;S=100}else S=k}else S=100;k=S+-1|0;T=Aa+108|0;l=c[T>>2]|0;R=Aa+112|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[Aa+104>>2]|0;a[oa+(l*20|0)>>0]=70;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=k;c[oa+(l*20|0)+8>>2]=1;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,70,k,1,0)|0;z=Da+81|0;A=Da+20|0;U:do if((c[A>>2]|0)>0){B=(U|0)<0;C=f+116|0;D=Da+272|0;E=Da+276|0;F=Da+288|0;G=Da+300|0;H=Da+296|0;I=Da+284|0;h=f+19|0;J=f+28|0;K=Da+292|0;M=Aa+104|0;N=Da+32|0;O=f+56|0;P=Aa+12|0;Q=f+52|0;y=0;do{do if(B|(y|0)==(U|0)){n=c[C>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<y;V:do if(!(l&m)){c[k>>2]=l|m;if((y|0)!=1)break;q=c[n>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[n+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(n,32157,qa);c[n+12>>2]=l;break}oa=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=oa;k=c[q+92>>2]|0;n=c[oa+4>>2]|0;c[n+4>>2]=c[oa>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;oa=(c[14820]|0)+1|0;c[14820]=oa;c[14821]=(oa|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1314;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1314}while(0);do if((za|0)==1314){za=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);oa=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((oa|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break V}while(0)}while(0);g=(c[(c[ya>>2]|0)+(y<<4)+12>>2]|0)+16|0;l=c[g>>2]|0;if(!l){m=0;k=0}else{m=0;k=0;do{n=c[l+8>>2]|0;k=((c[n+36>>2]|0)>>>5&1^1)+k|0;n=c[n+8>>2]|0;if(!n)o=0;else{o=0;do{k=k+1|0;o=o+1|0;n=c[n+20>>2]|0}while((n|0)!=0)}m=(o|0)>(m|0)?o:m;l=c[l>>2]|0}while((l|0)!=0)}l=(k<<2)+4|0;W:do if(c[D>>2]|0)if(!(a[z>>0]|0))za=1341;else break U;else{do if(0<0|(0==0?(e[E>>1]|0)>>>0<l>>>0:0))k=F;else{k=c[G>>2]|0;if(k|0){c[G>>2]=c[k>>2];c[I>>2]=(c[I>>2]|0)+1;p=k;break W}k=c[H>>2]|0;if(!k){k=K;break}c[H>>2]=c[k>>2];c[I>>2]=(c[I>>2]|0)+1;p=k;break W}while(0);c[k>>2]=(c[k>>2]|0)+1;za=1341}while(0);if((za|0)==1341){za=0;p=_d(Da,l,0)|0}if(!p)break U;k=c[g>>2]|0;if(!k)l=0;else{l=0;do{o=c[k+8>>2]|0;n=l+1|0;if(!(c[o+36>>2]&32)){c[p+(n<<2)>>2]=c[o+28>>2];l=n}n=c[o+8>>2]|0;if(n)do{l=l+1|0;c[p+(l<<2)>>2]=c[n+44>>2];n=c[n+20>>2]|0}while((n|0)!=0);k=c[k>>2]|0}while((k|0)!=0)}c[p>>2]=l;oa=c[xa>>2]|0;k=m+8|0;c[xa>>2]=(oa|0)>(k|0)?oa:k;a[h>>0]=0;c[J>>2]=0;k=c[T>>2]|0;if((c[R>>2]|0)>(k|0)){c[T>>2]=k+1;oa=c[M>>2]|0;a[oa+(k*20|0)>>0]=-109;b[oa+(k*20|0)+2>>1]=0;c[oa+(k*20|0)+4>>2]=2;c[oa+(k*20|0)+8>>2]=l;c[oa+(k*20|0)+12>>2]=1;c[oa+(k*20|0)+16>>2]=0;a[oa+(k*20|0)+1>>0]=0}else k=Di(Aa,147,2,l,1)|0;l=c[Aa>>2]|0;X:do if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[T>>2]|0)+-1|0;l=c[M>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=p;a[m>>0]=-15;break}else{Ei(Aa,l+(k*20|0)|0,p,-15);break}}else{do if(l|0){if(c[l+480>>2]|0){Xd(l,p);break X}k=p;if((c[l+304>>2]|0)>>>0>k>>>0)break;if((c[l+308>>2]|0)>>>0<=k>>>0)break;oa=l+300|0;c[p>>2]=c[oa>>2];c[oa>>2]=p;break X}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{oa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);k=c[T>>2]|0;if((k|0)>0)b[(c[M>>2]|0)+((k+-1|0)*20|0)+2>>1]=y&255;if((c[R>>2]|0)>(k|0)){c[T>>2]=k+1;oa=c[M>>2]|0;a[oa+(k*20|0)>>0]=50;b[oa+(k*20|0)+2>>1]=0;c[oa+(k*20|0)+4>>2]=2;c[oa+(k*20|0)+8>>2]=0;c[oa+(k*20|0)+12>>2]=0;c[oa+(k*20|0)+16>>2]=0;a[oa+(k*20|0)+1>>0]=0}else k=Di(Aa,50,2,0,0)|0;c[ra>>2]=c[(c[ya>>2]|0)+(y<<4)>>2];o=dd(Da,45548,ra)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=110;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=0;c[oa+(l*20|0)+8>>2]=3;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else l=Di(Aa,110,0,3,0)|0;m=c[Aa>>2]|0;Y:do if(a[m+81>>0]|0){if(!o)break;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break Y}l=o;if((c[m+304>>2]|0)>>>0>l>>>0)break;if((c[m+308>>2]|0)>>>0<=l>>>0)break;oa=m+300|0;c[o>>2]=c[oa>>2];c[oa>>2]=o;break Y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{oa=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else{if((l|0)<0)l=(c[T>>2]|0)+-1|0;m=c[M>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(Aa,m+(l*20|0)|0,o,-7);break}if(!o)break;c[m+(l*20|0)+16>>2]=o;a[n>>0]=-7}while(0);l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=105;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=2;c[oa+(l*20|0)+8>>2]=3;c[oa+(l*20|0)+12>>2]=3;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,105,2,3,3)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=81;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=3;c[oa+(l*20|0)+8>>2]=1;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;l=c[T>>2]|0;m=l+2|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=47;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=1;c[oa+(l*20|0)+8>>2]=m;c[oa+(l*20|0)+12>>2]=1;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,47,1,m,1)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;$=c[M>>2]|0;a[$+(l*20|0)>>0]=69;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;l=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=(c[M>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;k=c[g>>2]|0;if(!k)break;do{u=c[k+8>>2]|0;do if((c[u+28>>2]|0)>=1){Z:do if(!(c[u+36>>2]&32))l=0;else{l=c[u+8>>2]|0;if(!l){l=0;break}while(1){oa=l+55|0;if(((d[oa>>0]|d[oa+1>>0]<<8)&3)==2)break Z;l=c[l+20>>2]|0;if(!l){l=0;break}}}while(0);Hm(f,u,108,0,1,0,wa,va)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=70;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=7;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,70,0,7,0)|0;x=u+8|0;m=c[x>>2]|0;if(m|0){n=0;while(1){o=n+8|0;p=c[T>>2]|0;if((c[R>>2]|0)>(p|0)){c[T>>2]=p+1;oa=c[M>>2]|0;a[oa+(p*20|0)>>0]=70;b[oa+(p*20|0)+2>>1]=0;c[oa+(p*20|0)+4>>2]=0;c[oa+(p*20|0)+8>>2]=o;c[oa+(p*20|0)+12>>2]=0;c[oa+(p*20|0)+16>>2]=0;a[oa+(p*20|0)+1>>0]=0}else Di(Aa,70,0,o,0)|0;m=c[m+20>>2]|0;if(!m)break;else n=n+1|0}}m=c[wa>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=36;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=m;c[oa+(n*20|0)+8>>2]=0;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,36,m,0,0)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;w=c[M>>2]|0;a[w+(m*20|0)>>0]=83;b[w+(m*20|0)+2>>1]=0;c[w+(m*20|0)+4>>2]=7;c[w+(m*20|0)+8>>2]=1;c[w+(m*20|0)+12>>2]=0;c[w+(m*20|0)+16>>2]=0;a[w+(m*20|0)+1>>0]=0;w=m}else w=Di(Aa,83,7,1,0)|0;do if(V)p=u+42|0;else{m=c[wa>>2]|0;p=u+42|0;n=(b[p>>1]|0)+-1|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=90;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=m;c[oa+(o*20|0)+8>>2]=n;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,90,m,n,3)|0;m=c[T>>2]|0;if((m|0)<=0)break;b[(c[M>>2]|0)+((m+-1|0)*20|0)+2>>1]=128}while(0);m=b[p>>1]|0;if(m<<16>>16>0){s=u+40|0;t=u+4|0;r=0;do{do if((r|0)!=(b[s>>1]|0)){if(!(a[(c[t>>2]|0)+(r<<4)+12>>0]|0))break;Vj(Aa,u,c[wa>>2]|0,r,3);m=c[T>>2]|0;if((m|0)>0)b[(c[M>>2]|0)+((m+-1|0)*20|0)+2>>1]=128;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=51;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=3;c[oa+(m*20|0)+8>>2]=0;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,51,3,0,0)|0;q=c[(c[t>>2]|0)+(r<<4)>>2]|0;c[sa>>2]=c[u>>2];c[sa+4>>2]=q;q=dd(Da,45572,sa)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,3,0)|0;o=c[Aa>>2]|0;_:do if(a[o+81>>0]|0){if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break _}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;oa=o+300|0;c[q>>2]=c[oa>>2];c[oa>>2]=q;break _}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{oa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else{if((n|0)<0)n=(c[T>>2]|0)+-1|0;o=c[M>>2]|0;g=o+(n*20|0)+1|0;if(a[g>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[g>>0]=-7}while(0);n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=81;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=3;c[oa+(n*20|0)+8>>2]=1;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;n=c[T>>2]|0;o=n+2|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=47;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=1;c[oa+(n*20|0)+8>>2]=o;c[oa+(n*20|0)+12>>2]=1;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,47,1,o,1)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;$=c[M>>2]|0;a[$+(n*20|0)>>0]=69;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;n=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))m=(c[M>>2]|0)+(((m|0)<0?n+-1|0:m)*20|0)|0;else m=59308;c[m+8>>2]=n;m=b[p>>1]|0}while(0);r=r+1|0}while((r|0)<(m<<16>>16|0))}m=c[u+24>>2]|0;$:do if(m|0){if(!((c[N>>2]&512|0)==0&0==0))break;q=gk(Da,m,0)|0;do if(!(a[z>>0]|0)){g=c[O>>2]|0;n=g+-1|0;o=g+-2|0;c[O>>2]=o;c[Q>>2]=(c[wa>>2]|0)+1;m=c[q>>2]|0;if((m|0)>1)do{oa=m;m=m+-1|0;Tj(f,c[q+4+(m*20|0)>>2]|0,n,0)}while((oa|0)>2);tk(f,c[q+4>>2]|0,o,16);m=c[P>>2]|0;n=0-g|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Aa,n);else c[(c[m+64>>2]|0)+(n<<2)>>2]=c[T>>2];c[Q>>2]=0;c[ta>>2]=c[u>>2];p=dd(Da,45592,ta)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=110;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=3;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,110,0,3,0)|0;n=c[Aa>>2]|0;aa:do if(a[n+81>>0]|0){if(!p)break;do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break aa}m=p;if((c[n+304>>2]|0)>>>0>m>>>0)break;if((c[n+308>>2]|0)>>>0<=m>>>0)break;oa=n+300|0;c[p>>2]=c[oa>>2];c[oa>>2]=p;break aa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{oa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else{if((m|0)<0)m=(c[T>>2]|0)+-1|0;n=c[M>>2]|0;o=n+(m*20|0)+1|0;if(a[o>>0]|0){Ei(Aa,n+(m*20|0)|0,p,-7);break}if(!p)break;c[n+(m*20|0)+16>>2]=p;a[o>>0]=-7}while(0);m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=81;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=3;c[oa+(m*20|0)+8>>2]=1;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;m=c[T>>2]|0;n=m+2|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=47;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=1;c[oa+(m*20|0)+8>>2]=n;c[oa+(m*20|0)+12>>2]=1;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,47,1,n,1)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;$=c[M>>2]|0;a[$+(m*20|0)>>0]=69;$=$+(m*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;n=c[P>>2]|0;m=1-g|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0){mk(n,Aa,m);break}else{c[(c[n+64>>2]|0)+(m<<2)>>2]=c[T>>2];break}}else if(!q)break $;while(0);ri(Da,q)}while(0);if(V){l=c[wa>>2]|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=5;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=l;c[oa+(m*20|0)+8>>2]=w;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,5,l,w,0)|0;m=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[M>>2]|0)+((((w|0)<1?m:w)+-1|0)*20|0)|0;else l=59308;c[l+8>>2]=m;break}m=c[x>>2]|0;if(m|0){v=u+4|0;n=-1;o=0;j=0;while(1){g=(c[O>>2]|0)+-1|0;c[O>>2]=g;do if((l|0)!=(m|0)){i=el(f,m,c[wa>>2]|0,0,0,pa,o,n)|0;n=j+8|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=83;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=1;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,83,n,1,0)|0;n=(c[va>>2]|0)+j|0;p=e[m+52>>1]|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=29;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=g;c[oa+(o*20|0)+12>>2]=i;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0;g=o}else g=Di(Aa,29,n,g,i)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){oa=c[M>>2]|0;a[oa+(g*20|0)+1>>0]=-3;c[oa+(g*20|0)+16>>2]=p}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,3,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,45622,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=7;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,7,3,3)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,45627,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=4;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,4,3,3)|0;p=c[m>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)o=(c[T>>2]|0)+-1|0;else o=n;Ei(Aa,(c[M>>2]|0)+(o*20|0)|0,p,0)}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=105;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=4;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,105,4,3,3)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=81;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=3;c[oa+(o*20|0)+8>>2]=1;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;o=c[T>>2]|0;p=o+2|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;u=c[M>>2]|0;a[u+(o*20|0)>>0]=47;b[u+(o*20|0)+2>>1]=0;c[u+(o*20|0)+4>>2]=1;c[u+(o*20|0)+8>>2]=p;c[u+(o*20|0)+12>>2]=1;c[u+(o*20|0)+16>>2]=0;a[u+(o*20|0)+1>>0]=0;u=o}else u=Di(Aa,47,1,p,1)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;$=c[M>>2]|0;a[$+(o*20|0)>>0]=69;$=$+(o*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;p=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))o=(c[M>>2]|0)+(((g|0)<0?p+-1|0:g)*20|0)|0;else o=59308;c[o+8>>2]=p;do if(a[m+54>>0]|0){t=c[O>>2]|0;s=t+-1|0;c[O>>2]=s;r=m+50|0;if(b[r>>1]|0){p=m+4|0;o=0;do{oa=b[(c[p>>2]|0)+(o<<1)>>1]|0;if(!(oa<<16>>16>-1?(a[(c[v>>2]|0)+(oa<<16>>16<<4)+12>>0]|0)!=0:0))za=1581;do if((za|0)==1581){za=0;g=o+i|0;q=c[T>>2]|0;if((c[R>>2]|0)>(q|0)){c[T>>2]=q+1;oa=c[M>>2]|0;a[oa+(q*20|0)>>0]=50;b[oa+(q*20|0)+2>>1]=0;c[oa+(q*20|0)+4>>2]=g;c[oa+(q*20|0)+8>>2]=s;c[oa+(q*20|0)+12>>2]=0;c[oa+(q*20|0)+16>>2]=0;a[oa+(q*20|0)+1>>0]=0;break}else{Di(Aa,50,g,s,0)|0;break}}while(0);o=o+1|0}while(o>>>0<(e[r>>1]|0)>>>0);p=c[T>>2]|0}o=(c[va>>2]|0)+j|0;if((c[R>>2]|0)>(p|0)){c[T>>2]=p+1;oa=c[M>>2]|0;a[oa+(p*20|0)>>0]=5;b[oa+(p*20|0)+2>>1]=0;c[oa+(p*20|0)+4>>2]=o;c[oa+(p*20|0)+8>>2]=0;c[oa+(p*20|0)+12>>2]=0;c[oa+(p*20|0)+16>>2]=0;a[oa+(p*20|0)+1>>0]=0}else p=Di(Aa,5,o,0,0)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=11;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=s;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,11,0,s,0)|0;o=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))p=(c[M>>2]|0)+(((p|0)<0?o+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=o;p=(c[va>>2]|0)+j|0;g=e[r>>1]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=38;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=p;c[oa+(o*20|0)+8>>2]=s;c[oa+(o*20|0)+12>>2]=i;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,38,p,s,i)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){oa=c[M>>2]|0;a[oa+(o*20|0)+1>>0]=-3;c[oa+(o*20|0)+16>>2]=g}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=110;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,110,0,3,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(o*20|0)|0,45648,0)}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=11;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=n;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,11,0,n,0)|0;o=c[P>>2]|0;n=0-t|0;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,Aa,n);break}else{c[(c[o+64>>2]|0)+(n<<2)>>2]=c[T>>2];break}}while(0);o=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+(((u|0)<0?o+-1|0:u)*20|0)|0;else n=59308;c[n+8>>2]=o;n=c[pa>>2]|0;if(!n){n=i;o=m;break}o=c[ua>>2]|0;p=c[o+12>>2]|0;n=~n;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0){mk(p,o,n);n=i;o=m;break}else{c[(c[p+64>>2]|0)+(n<<2)>>2]=c[o+108>>2];n=i;o=m;break}}while(0);m=c[m+20>>2]|0;if(!m)break;else j=j+1|0}}m=c[wa>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=5;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=m;c[oa+(n*20|0)+8>>2]=w;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,5,m,w,0)|0;m=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+((((w|0)<1?m:w)+-1|0)*20|0)|0;else n=59308;c[n+8>>2]=m;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=110;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=2;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,110,0,2,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(m*20|0)|0,45675,0)}m=c[x>>2]|0;if(!m)break;g=0;while(1){if((l|0)!=(m|0)){n=(c[va>>2]|0)+g|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=93;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,93,n,3,0)|0;n=g+8|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=53;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=0;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,53,n,0,3)|0;n=c[T>>2]|0;if((n|0)>0)b[(c[M>>2]|0)+((n+-1|0)*20|0)+2>>1]=144;p=c[m>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,p,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=4;c[oa+(n*20|0)+8>>2]=2;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,4,2,3)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=81;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=3;c[oa+(n*20|0)+8>>2]=1;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;n=c[T>>2]|0;p=n+2|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=47;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=1;c[oa+(n*20|0)+8>>2]=p;c[oa+(n*20|0)+12>>2]=1;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,47,1,p,1)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;$=c[M>>2]|0;a[$+(n*20|0)>>0]=69;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;p=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+(((o|0)<0?p+-1|0:o)*20|0)|0;else n=59308;c[n+8>>2]=p}m=c[m+20>>2]|0;if(!m)break;else g=g+1|0}}while(0);k=c[k>>2]|0}while((k|0)!=0)}while(0);y=y+1|0}while((y|0)<(c[A>>2]|0))}while(0);k=ed(Aa,7,18432)|0;if(k|0){c[k+8>>2]=1-S;a[k+41>>0]=-1;c[k+56>>2]=45704;a[k+101>>0]=-1;c[k+116>>2]=50394}if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=c[Aa+104>>2]|0;else k=59308;c[k+12>>2]=(c[T>>2]|0)+-2;za=2020;break b}case 12:{if(!Ba){m=c[f>>2]|0;ba:do if(!(a[m+165>>0]|0)){n=f+4|0;o=m+24|0;p=(c[o>>2]&1|0)==0;g=m+16|0;ya=c[(c[g>>2]|0)+12>>2]|0;a[m+78>>0]=a[ya+77>>0]|0;if((b[ya+78>>1]&1)==0?(P=eh(m,0,n,0)|0,(P|0)!=0):0)k=P;else za=1682;ca:do if((za|0)==1682){k=c[m+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[g>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(R=eh(m,k,n,0)|0,R|0):0){k=R;break ca}}while((l|0)>2);if(p)c[o>>2]=c[o>>2]&-2;if(!(a[m+89>>0]|0))break ba;c[o>>2]=c[o>>2]|16;break ba}while(0);c[f+12>>2]=k;Aa=f+36|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break f}while(0);za=a[(c[f>>2]|0)+78>>0]|0;l=c[18464+((za&255)<<3)>>2]|0;if(za<<24>>24==8)break f;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}o=c[(c[ya>>2]|0)+12>>2]|0;if((b[o+78>>1]&5)==1){za=2020;break b}k=a[Ba>>0]|0;da:do if(k<<24>>24){k=(d[208+(k&255)>>0]|0)+-117|0;n=(k|0)==0;if(n){l=45707;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}do if(k){if(!n)break da;k=45712;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18472;break}k=45718;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18480;break}k=45727;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18488;break}k=45736;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18496;break}k=45744;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18504;break}k=45752;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18512;break}k=45759;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m)k=18520;else break da}else k=18464;while(0);za=a[k+4>>0]|0;za=za<<24>>24==0?2:za;a[Da+78>>0]=za;a[o+77>>0]=za;za=2020;break b}while(0);c[ca>>2]=Ba;cd(f,45765,ca);break f}case 0:{k=c[4544+(j<<4)+8>>2]|0;l=1<<r;za=Aa+152|0;c[za>>2]=c[za>>2]|l;if(!$?a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0:0){za=Aa+156|0;c[za>>2]=c[za>>2]|l}ea:do if(Ba|0){switch(o|0){case 24:case 25:case 42:case 43:break ea;default:{}}Aa=ed(Aa,2,45790)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+28>>2]=k;c[wa>>2]=0;ii(Ba,wa)|0;c[Aa+32>>2]=c[wa>>2];break f}while(0);Aa=ed(Aa,3,45798)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+32>>2]=k;Aa=(d[F>>0]|d[F+1>>0]<<8)&-65;a[F>>0]=Aa;a[F+1>>0]=Aa>>8;break f}case 8:{c[xa>>2]=1;n=Aa+108|0;o=Aa+112|0;p=Aa+104|0;m=0;do{l=c[26464+(m<<2)>>2]|0;m=m+1|0;k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[p>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[p>>2]|0)+(k*20|0)|0,l,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[p>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0}while((m|0)!=7);Aa=(d[F>>0]|d[F+1>>0]<<8)&-65;a[F>>0]=Aa;a[F+1>>0]=Aa>>8;break f}case 39:{p=(c[h>>2]|0)==0?10:r;do if(Ba){o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-102|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45810;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)l=1;else{k=n+-114|0;if(!(o|(k|0)!=0)){l=45815;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){l=2;break}k=n+-116|0;if(!(o|(k|0)!=0)){l=36052;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}l=(k|0)==0?3:0}}else l=0;while(0);c[xa>>2]=3;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=6;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=p;c[za+(k*20|0)+8>>2]=l;c[za+(k*20|0)+12>>2]=1;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,6,p,l,1)|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=3;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,3,0)|0;break f}}case 38:{if(!Ba)k=c[Da+240>>2]|0;else{c[wa>>2]=0;ii(Ba,wa)|0;za=c[wa>>2]|0;ya=(za|0)>0;k=ya?76:0;c[Da+240>>2]=k;c[Da+244>>2]=ya?za:0}if((k|0)==76){o=c[Da+244>>2]|0;n=o;o=((o|0)<0)<<31>>31}else{n=0;o=0}m=c[Aa>>2]|0;fa:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1767;else za=1787;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1768;break fa}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1768;break fa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1767}while(0);if((za|0)==1767){p=_d(m,8,0)|0;za=1768}ga:do if((za|0)==1768){if(!p){za=1787;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break ga}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==1787){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 31:{o=Da+20|0;m=c[o>>2]|0;if((m|0)<=0){za=2020;break b}n=c[ya>>2]|0;k=0;do{l=c[n+(k<<4)+4>>2]|0;if(l|0)c[(c[l+4>>2]|0)+4>>2]=c[l>>2];k=k+1|0}while((k|0)!=(m|0));k=0;while(1){l=c[n+(k<<4)+4>>2]|0;if(!l)l=m;else{ab[c[29456>>2]&127](c[(c[(c[c[l+4>>2]>>2]|0)+212>>2]|0)+44>>2]|0);l=c[o>>2]|0}k=k+1|0;if((k|0)>=(l|0)){za=2020;break b}n=c[ya>>2]|0;m=l}}case 27:{if(Ba){c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;if(!(k&2))break f}else k=65534;wa=f+40|0;w=c[wa>>2]|0;c[wa>>2]=w+1;if(!la)j=(c[Da+20>>2]|0)+-1|0;else j=r;if((r|0)>(j|0)){m=Aa+108|0;k=Aa+112|0}else{v=f+116|0;t=k&1;s=(t|0)==0;m=Aa+108|0;t=t|2;k=Aa+112|0;u=f+19|0;i=Aa+104|0;while(1){do if((r|0)!=1){l=c[v>>2]|0;l=((l|0)==0?f:l)+84|0;n=c[l>>2]|0;o=1<<r;if(!(n&o))c[l>>2]=n|o;l=c[(c[(c[ya>>2]|0)+(r<<4)+12>>2]|0)+16>>2]|0;if(!l)break;do{q=c[l+8>>2]|0;ha:do if(c[q+36>>2]&256|0){g=(e[q+44>>1]|0)+46|0;o=g&65535;n=c[q+8>>2]|0;ia:do if(!n)za=1825;else while(1){wa=n+55|0;if(!((d[wa>>0]|d[wa+1>>0]<<8)&128))break ia;n=c[n+20>>2]|0;if(!n){za=1825;break}}while(0);do if((za|0)==1825){za=0;if(!(o<<16>>16))break;Gj(f,w,r,q,108);o=c[m>>2]|0;p=o+t|0;n=g<<16>>16;if((c[k>>2]|0)>(o|0)){c[m>>2]=o+1;wa=c[i>>2]|0;a[wa+(o*20|0)>>0]=33;b[wa+(o*20|0)+2>>1]=0;c[wa+(o*20|0)+4>>2]=w;c[wa+(o*20|0)+8>>2]=p;c[wa+(o*20|0)+12>>2]=n;c[wa+(o*20|0)+16>>2]=0;a[wa+(o*20|0)+1>>0]=0;break}else{Di(Aa,33,w,p,n)|0;break}}while(0);q=c[q>>2]|0;c[ha>>2]=c[(c[ya>>2]|0)+(r<<4)>>2];c[ha+4>>2]=q;q=dd(Da,45823,ha)|0;if(s){n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;$=c[i>>2]|0;a[$+(n*20|0)>>0]=-116;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else n=Di(Aa,140,0,0,0)|0;o=c[Aa>>2]|0;if(!(a[o+81>>0]|0)){if((n|0)<0)n=(c[m>>2]|0)+-1|0;o=c[i>>2]|0;p=o+(n*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[p>>0]=-7;break}if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break ha}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;wa=o+300|0;c[q>>2]=c[wa>>2];c[wa>>2]=q;break ha}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{wa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}n=a[u>>0]|0;if(!(n<<24>>24)){g=(c[xa>>2]|0)+1|0;c[xa>>2]=g}else{g=n+-1<<24>>24;a[u>>0]=g;g=c[f+148+((g&255)<<2)>>2]|0}n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;wa=c[i>>2]|0;a[wa+(n*20|0)>>0]=110;b[wa+(n*20|0)+2>>1]=0;c[wa+(n*20|0)+4>>2]=0;c[wa+(n*20|0)+8>>2]=g;c[wa+(n*20|0)+12>>2]=0;c[wa+(n*20|0)+16>>2]=0;a[wa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,g,0)|0;o=c[Aa>>2]|0;ja:do if(a[o+81>>0]|0){if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break ja}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;wa=o+300|0;c[q>>2]=c[wa>>2];c[wa>>2]=q;break ja}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{wa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else{if((n|0)<0)n=(c[m>>2]|0)+-1|0;o=c[i>>2]|0;p=o+(n*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[p>>0]=-7}while(0);n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;wa=c[i>>2]|0;a[wa+(n*20|0)>>0]=81;b[wa+(n*20|0)+2>>1]=0;c[wa+(n*20|0)+4>>2]=g;c[wa+(n*20|0)+8>>2]=1;c[wa+(n*20|0)+12>>2]=0;c[wa+(n*20|0)+16>>2]=0;a[wa+(n*20|0)+1>>0]=0;break}else{Di(Aa,81,g,1,0)|0;break}}while(0);l=c[l>>2]|0}while((l|0)!=0)}while(0);if((r|0)<(j|0))r=r+1|0;else break}}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;$=c[Aa+104>>2]|0;a[$+(l*20|0)>>0]=-98;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0));break f}else{Di(Aa,158,0,0,0)|0;break f}}case 32:{if((Ba|0?(Vd(Ba,wa)|0)==0:0)?(H=wa,G=c[H>>2]|0,H=c[H+4>>2]|0,!((H|0)<0|(mb()|0)!=0)):0){za=59064;c[za>>2]=G;c[za+4>>2]=H;c[14768]=((G|0)!=0|(H|0)!=0)&((H|0)<0|(H|0)==0&G>>>0<=(c[14978]|0)>>>0)&1}m=(mb()|0)==0;o=59064;n=m?c[o>>2]|0:-1;o=m?c[o+4>>2]|0:-1;m=c[Aa>>2]|0;ka:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1942;else za=1962;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1943;break ka}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1943;break ka}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1942}while(0);if((za|0)==1942){p=_d(m,8,0)|0;za=1943}la:do if((za|0)==1943)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break la}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break la}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=1962;while(0);do if((za|0)==1962){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;break f}case 37:{if(Ba|0?(f=(Vd(Ba,wa)|0)==0,za=wa,ya=c[za+4>>2]|0,f&((ya|0)>-1|(ya|0)==-1&(c[za>>2]|0)>>>0>4294967295)):0)c[Da+152>>2]=0;n=c[Da+152>>2]|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;ma:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1987;else za=2007;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1988;break ma}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1988;break ma}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1987}while(0);if((za|0)==1987){p=_d(m,8,0)|0;za=1988}na:do if((za|0)==1988)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break na}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break na}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=2007;while(0);do if((za|0)==2007){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;za=2020;break b}default:{if(!Ba)k=c[Da+448>>2]|0;else{c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;l=Da+396|0;if((k|0)>0){c[l>>2]=91;c[Da+400>>2]=Da;c[t>>2]=0;a[Da+408>>0]=1}else{c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;a[l+12>>0]=0;k=0}c[Da+448>>2]=k}o=((k|0)<0)<<31>>31;n=c[Aa>>2]|0;oa:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))za=1897;else za=1917;else{do if((e[n+276>>1]|0)>=8){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];za=n+284|0;c[za>>2]=(c[za>>2]|0)+1;za=1898;break oa}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];za=n+284|0;c[za>>2]=(c[za>>2]|0)+1;za=1898;break oa}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;za=1897}while(0);if((za|0)==1897){m=_d(n,8,0)|0;za=1898}pa:do if((za|0)==1898)if(m){p=m;l=p;a[l>>0]=k;a[l+1>>0]=k>>8;a[l+2>>0]=k>>16;a[l+3>>0]=k>>24;p=p+4|0;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;p=Aa+108|0;k=c[p>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[p>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[p>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=m;a[o>>0]=-14;m=p;break}else{Ei(Aa,n+(k*20|0)|0,m,-14);m=p;break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,m);m=p;break pa}k=m;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[m>>2]=c[ya>>2];c[ya>>2]=m;m=p;break pa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);m=p;break}else{ya=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);m=p;break}}else za=1917;while(0);do if((za|0)==1917){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}}while(0)}while(0);if(!Da){za=2025;break b}else{za=2020;break b}}else k=1;while(0);za=f+36|0;c[za>>2]=(c[za>>2]|0)+1;c[f+12>>2]=k;za=2020}while(0);do if((za|0)==2020){if(c[Da+480>>2]|0){Xd(Da,Ca);break}Aa=Ca;if((c[Da+304>>2]|0)>>>0<=Aa>>>0?(c[Da+308>>2]|0)>>>0>Aa>>>0:0){Aa=Da+300|0;c[Ca>>2]=c[Aa>>2];c[Aa>>2]=Ca}else za=2025}while(0);do if((za|0)==2025)if(!(c[7324]|0)){ab[c[29344>>2]&127](Ca);break}else{Aa=Wa[c[29352>>2]&127](Ca)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Ca);break}while(0);if(!Ba){Ra=Ea;return}if(Da|0){if(c[Da+480>>2]|0){Xd(Da,Ba);Ra=Ea;return}Ca=Ba;if((c[Da+304>>2]|0)>>>0<=Ca>>>0?(c[Da+308>>2]|0)>>>0>Ca>>>0:0){Da=Da+300|0;c[Ba>>2]=c[Da>>2];c[Da>>2]=Ba;Ra=Ea;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](Ba);Ra=Ea;return}else{Da=Wa[c[29352>>2]&127](Ba)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Ba);Ra=Ea;return}}\nfunction Or(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,ob=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0;Nb=Ra;Ra=Ra+256|0;Jb=Nb+232|0;Hb=Nb+224|0;Gb=Nb+216|0;Fb=Nb+208|0;Eb=Nb+200|0;Db=Nb+192|0;Cb=Nb+184|0;Ab=Nb+176|0;zb=Nb+168|0;yb=Nb+160|0;xb=Nb+152|0;vb=Nb+144|0;ub=Nb+136|0;tb=Nb+128|0;Ib=Nb+120|0;wb=Nb+112|0;l=Nb+104|0;Kb=Nb+56|0;lb=Nb+244|0;ob=Nb+8|0;qb=Nb;rb=Nb+240|0;if(mb()|0){Mb=7;Ra=Nb;return Mb|0}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](640)|0;if(!i){Mb=7;Ra=Nb;return Mb|0}else Lb=i}else{i=Wa[c[29356>>2]&127](640)|0;if((c[14985]|0)>>>0<640)c[14985]=640;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){Lb=c[14978]|0;jb=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;ib=L()|0;c[14768]=((ib|0)<0|(ib|0)==0&jb>>>0<=Lb>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(!j){Mb=7;Ra=Nb;return Mb|0}i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;Lb=j}else Lb=j}ib=Lb+568|0;jb=Lb+584|0;k=f+144|0;i=c[k>>2]|0;c[Kb>>2]=i;do if(!i){i=c[f+20>>2]|0;c[l>>2]=c[f+16>>2];c[l+4>>2]=i;i=Bb(52411,l)|0;if(!i){j=7;i=0;break}j=qd(c[f+12>>2]|0,i,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{hb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-hb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[Kb>>2]|0;c[k>>2]=i;if(!j){m=i;M=21}else i=0}else{m=i;M=21}while(0);do if((M|0)==21){o=m;do if(!(Vc(o,1)|0)){i=c[o+100>>2]|0;j=i+8|0;if(!(b[j>>1]&9216)){hb=i;c[hb>>2]=1;c[hb+4>>2]=0;b[j>>1]=4;break}else{Pg(i,1,0);break}}while(0);do if((Gc(o)|0)==100){if(!m)j=mc(29576)|0;else{i=c[o+120>>2]|0;if((i|0)!=0?(b[o+144>>1]|0)!=0:0)j=o;else{i=c[o>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;j=o}l=mc(i)|0;i=c[j>>2]|0;k=o+40|0;j=c[k>>2]|0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&j;c[k>>2]=i;j=l}n=Lc(o,0)|0;if(j){if((n|0)>0){if(mb()|0){l=7;i=0;n=0;p=0;break}i=sb(0,n,0)|0;if(!i){l=7;i=0;n=0;p=0;break}else k=n}else{i=0;k=0}ew(i|0,j|0,n|0)|0;l=0;p=k}else{l=0;i=0;n=0;p=0}}else{l=0;i=0;n=0;p=0}while(0);do if(m){j=c[o>>2]|0;hb=o+136|0;gb=c[hb+4>>2]|0;if((gb|0)>0|(gb|0)==0&(c[hb>>2]|0)>>>0>0)hc(j,o);k=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;hb=o+64|0;c[hb>>2]=0;c[hb+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}else j=0;while(0);j=(l|0)==0?j:l;if((j|0)==0&(g|0)>0){eb=f+252|0;fb=f+168|0;gb=f+16|0;hb=f+20|0;Q=(h|0)>2?h:2;R=f+12|0;S=Lb+580|0;T=f+88|0;U=Lb+588|0;V=f+116|0;W=Lb+600|0;X=f+104|0;Y=Lb+596|0;Z=Lb+572|0;_=Lb+624|0;$=Lb+628|0;aa=f+184|0;ba=Lb+40|0;ca=f+172|0;da=Lb+632|0;ea=Lb+636|0;fa=Lb+64|0;ga=Lb+68|0;ha=Lb+76|0;ia=Lb+80|0;ja=f+228|0;ka=Lb+56|0;la=Lb+4|0;ma=Lb+84|0;na=Lb+48|0;oa=Lb+116|0;pa=Lb+108|0;qa=Lb+8|0;ra=Lb+16|0;sa=Lb+24|0;ta=Lb+32|0;ua=f+96|0;va=Lb+112|0;wa=Lb+88|0;xa=Lb+120|0;ya=Lb+152|0;za=Lb+184|0;Aa=Lb+216|0;Ba=Lb+248|0;Ca=Lb+280|0;Da=Lb+312|0;Ea=Lb+344|0;Fa=Lb+376|0;Ga=Lb+408|0;Ha=Lb+440|0;Ia=Lb+472|0;Ja=Lb+504|0;Ka=Lb+536|0;La=f+192|0;Ma=f+176|0;Na=f+124|0;Oa=ob+4|0;Pa=f+188|0;Qa=lb+4|0;Sa=f+196|0;Ta=ob+8|0;Ua=ob+4|0;Va=f+236|0;Xa=ob+16|0;Ya=ob+24|0;Za=ob+28|0;_a=Kb+8|0;$a=Kb+4|0;bb=Kb+16|0;cb=Kb+28|0;P=Kb+24|0;db=f+180|0;K=g;k=0;o=0;h=0;while(1){u=c[eb>>2]<<10;v=((u|0)<0)<<31>>31;O=c[fb>>2]|0;c[Kb>>2]=O;j=O;if((O|0)==0?(kb=c[hb>>2]|0,c[wb>>2]=c[gb>>2],c[wb+4>>2]=kb,kb=Bb(52607,wb)|0,(kb|0)!=0):0){qd(c[R>>2]|0,kb,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](kb);else{O=Wa[c[29352>>2]&127](kb)|0;c[14978]=(c[14978]|0)-O;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](kb)}j=c[Kb>>2]|0;c[fb>>2]=j}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){O=l;c[O>>2]=Q;c[O+4>>2]=0;b[m>>1]=4;break}else{Pg(l,Q,0);break}}while(0);if((Gc(g)|0)==100){o=Oc(g,0)|0;h=L()|0;t=Nc(g,1)|0}else t=-1;do if(j){j=c[g>>2]|0;O=g+136|0;N=c[O+4>>2]|0;if((N|0)>0|(N|0)==0&(c[O>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;O=g+64|0;c[O>>2]=0;c[O+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j){M=67;break}else{M=94;break}}else{og(j);j=7;M=94;break}}else M=67;while(0);if((M|0)==67){M=0;if(n){j=n+-2|0;a:do if((n|0)>2)while(1){l=j+-1|0;if((a[i+l>>0]|0)>=0)break a;if((j|0)>1)j=l;else{j=l;break}}while(0);b:do if((j|0)>0)while(1){l=j+-1|0;if((a[i+l>>0]|0)>=0){l=j;break b}if((j|0)>1)j=l;else break}else l=j;while(0);r=i+l|0;m=a[r>>0]|0;j=m&255;do if(!(j&128)){g=1;s=m&255;q=0}else{O=d[r+1>>0]|0;j=O<<7|j&127;if(!(O&128)){g=2;s=j;q=0;break}O=d[r+2>>0]|0;j=O<<14|j&16383;if(!(O&128)){g=3;s=j;q=0;break}O=d[r+3>>0]|0;j=O<<21|j&2097151;if(!(O&128)){g=4;s=j;q=0;break}m=28;g=r+4|0;j=j&268435455;q=0;do{O=g;g=g+1|0;O=d[O>>0]|0;N=cw(O&127|0,0,m|0)|0;j=Sv(N|0,L()|0,j|0,q|0)|0;q=L()|0;m=m+7|0}while(m>>>0<64&((O&128|0)!=0|0!=0));g=g-r|0;s=j}while(0);r=g+l|0;g=i+r|0;j=a[g>>0]|0;m=j&255;do if(!(m&128))j=1;else{O=d[g+1>>0]|0;j=O<<7|j&127;if(!(O&128)){m=j;j=2;break}O=d[g+2>>0]|0;j=O<<14|j&16383;if(!(O&128)){m=j;j=3;break}O=d[g+3>>0]|0;j=O<<21|j&2097151;if(!(O&128)){m=j;j=4;break}m=(a[g+4>>0]&7)<<28|j&268435455;j=5}while(0);j=(j+r|0)==(n|0)?0:267;if((t|0)<0){E=1;J=m;k=1;n=l;O=s;N=q}else{E=Zv(o|0,h|0,u|0,v|0)|0;O=L()|0;N=Zv(s|0,q|0,u|0,v|0)|0;J=L()|0;N=(O|0)<(J|0)|(O|0)==(J|0)&E>>>0<N>>>0;E=(N^1)&1;J=N?t:m;k=N?k:1;n=N?n:l;O=N?o:s;N=N?h:q}}else{j=0;n=0;M=94}}if((M|0)==94){M=0;if((t|0)<0)break;else{E=0;J=t;O=o;N=h}}gw(Lb|0,0,640)|0;c[S>>2]=1;c:do if(!j){j=c[T>>2]|0;c[Kb>>2]=j;do if(!j){j=c[hb>>2]|0;c[Ib>>2]=c[gb>>2];c[Ib+4>>2]=j;j=Bb(51533,Ib)|0;if(!j){s=0;M=116;break}l=qd(c[R>>2]|0,j,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{M=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[Kb>>2]|0;c[T>>2]=j;if(!l)M=104;else{s=0;M=116}}else M=104;while(0);if((M|0)==104){M=0;g=j;l=Sv(O|0,N|0,1,0)|0;m=L()|0;do if(!(Vc(g,1)|0)){o=c[g+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);Gc(g)|0;m=Nc(g,0)|0;do if(j){j=c[g>>2]|0;I=g+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;I=g+64|0;c[I>>2]=0;c[I+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);if(m)if((E|0)!=0&(m|0)==1){s=1;M=116}else D=m;else{s=0;M=116}}do if((M|0)==116){M=0;g=Sv(O|0,N|0,1,0)|0;q=L()|0;j=c[V>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[tb>>2]=c[gb>>2];c[tb+4>>2]=l;l=Bb(52072,tb)|0;if(!l){m=K;j=7;l=p;M=801;break c}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[V>>2]=l;if(!j)j=l;else{m=K;l=p;M=801;break c}}r=j;l=Sv(O|0,N|0,2,0)|0;m=L()|0;do if(!(Vc(r,1)|0)){o=c[r+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);l=Wv(g|0,q|0,1024,0)|0;l=cw(l|0,L()|0,10)|0;l=Sv(l|0,L()|0,1024,0)|0;m=L()|0;do if(!(Vc(r,2)|0)){h=c[r+100>>2]|0;o=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);if((Gc(r)|0)==100){if(!j)l=1;else{l=c[r+120>>2]|0;do if(!l)M=137;else{if(!(b[r+144>>1]|0)){M=137;break}m=r}while(0);if((M|0)==137){M=0;l=c[r>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;m=r}l=b[l+8>>1]&31;m=c[m>>2]|0;h=r+40|0;o=c[h>>2]|0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);m=7}else m=c[m+68>>2]&o;c[h>>2]=m}m=-1431655766>>>l&1}else m=0;do if(j){j=c[r>>2]|0;I=r+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(j,r);l=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;I=r+64|0;c[I>>2]=0;c[I+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);if(!m){D=s;break}c[S>>2]=c[S>>2]|2;D=s}while(0);if(!j){A=jb;B=A+56|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));j=J<<2;l=pb(j,0)|0;c[jb>>2]=l;if(!l){m=K;j=7;l=p;M=801}else{gw(l|0,0,j|0)|0;j=c[X>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[ub>>2]=c[gb>>2];c[ub+4>>2]=l;l=Bb(51773,ub)|0;if(!l){m=K;j=7;l=p;M=801;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[X>>2]=l;if(!j)j=l;else{m=K;l=p;M=801;break}}C=j;do if(!(Vc(C,1)|0)){l=c[C+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){I=l;c[I>>2]=O;c[I+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);y=(j|0)==0;w=C+120|0;z=C+40|0;x=C+144|0;j=(J|0)>0&(Gc(C)|0)==100;d:do if(y){if(!j){j=0;M=206;break}r=0;while(1){l=Oc(C,1)|0;m=L()|0;o=Oc(C,2)|0;h=L()|0;g=Oc(C,3)|0;q=L()|0;s=mc(29576)|0;t=Lc(C,4)|0;u=(c[jb>>2]|0)+(r<<2)|0;if((l|0)==0&(m|0)==0){if(!((o|0)==0&(h|0)==0)){j=267;break}j=t+20|0}else j=0;v=nb(j+96|0)|0;if(!v){j=7;break}A=v;B=A+96|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[v>>2]=r;a[v+4>>0]=0;M=v+8|0;c[M>>2]=l;c[M+4>>2]=m;M=v+16|0;c[M>>2]=o;c[M+4>>2]=h;M=v+24|0;c[M>>2]=g;c[M+4>>2]=q;if(!j){H=Sv(l|0,m|0,-1,-1)|0;I=L()|0;M=v+32|0;c[M>>2]=H;c[M+4>>2]=I}else{j=v+96|0;c[v+40>>2]=j;a[v+5>>0]=1;c[v+44>>2]=t;if(t|0)ew(j|0,s|0,t|0)|0;A=j+t|0;B=A+20|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}c[u>>2]=v;c[U>>2]=(c[U>>2]|0)+1;r=r+1|0;if(!((r|0)<(J|0)&(Gc(C)|0)==100)){j=0;l=1;M=199;break d}}c[U>>2]=(c[U>>2]|0)+1;l=0;M=199}else{if(!j){j=0;l=1;M=200;break}v=0;while(1){g=Oc(C,1)|0;q=L()|0;r=Oc(C,2)|0;s=L()|0;t=Oc(C,3)|0;u=L()|0;j=c[w>>2]|0;do if(!j)M=184;else{if((e[x>>1]|0)<=4){M=184;break}j=j+160|0}while(0);if((M|0)==184){M=0;j=c[C>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576}h=mc(j)|0;j=c[C>>2]|0;l=c[z>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[z>>2]=j;l=Lc(C,4)|0;m=(c[jb>>2]|0)+(v<<2)|0;if((g|0)==0&(q|0)==0){if(!((r|0)==0&(s|0)==0)){j=267;break}j=l+20|0}else j=0;o=nb(j+96|0)|0;if(!o){j=7;break}A=o;B=A+96|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[o>>2]=v;a[o+4>>0]=0;I=o+8|0;c[I>>2]=g;c[I+4>>2]=q;I=o+16|0;c[I>>2]=r;c[I+4>>2]=s;I=o+24|0;c[I>>2]=t;c[I+4>>2]=u;if(!j){F=Sv(g|0,q|0,-1,-1)|0;H=L()|0;I=o+32|0;c[I>>2]=F;c[I+4>>2]=H}else{j=o+96|0;c[o+40>>2]=j;a[o+5>>0]=1;c[o+44>>2]=l;if(l|0)ew(j|0,h|0,l|0)|0;A=j+l|0;B=A+20|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}c[m>>2]=o;c[U>>2]=(c[U>>2]|0)+1;v=v+1|0;if(!((v|0)<(J|0)&(Gc(C)|0)==100)){j=0;l=1;M=199;break d}}c[U>>2]=(c[U>>2]|0)+1;l=0;M=199}while(0);do if((M|0)==199){M=0;if(!y){M=200;break}if(l){j=0;M=206}}while(0);do if((M|0)==200){M=0;m=c[C>>2]|0;I=C+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(m,C);o=kc(C)|0;c[C+20>>2]=770837923;c[C+36>>2]=-1;c[z>>2]=0;a[C+146>>0]=2;c[C+44>>2]=0;c[C+32>>2]=1;a[C+147>>0]=-1;c[C+48>>2]=0;I=C+64|0;c[I>>2]=0;c[I+4>>2]=0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);if(l){j=7;M=206;break}else break}else if(l){j=c[m+68>>2]&o;M=206;break}else break}while(0);if((M|0)==206)M=0;if(j|0){m=K;l=p;M=801;break}m=c[U>>2]|0;if((m|0)!=(J|0)){q=K;j=0;break}c[Y>>2]=ib;j=eq(f,jb,c[ib>>2]|0,c[Z>>2]|0)|0;if(j|0){m=K;l=p;M=801;break}j=gq(f,jb)|0;if((j|0)!=100){m=K;l=p;M=801;break}e:do if((E|0)!=0&(D|0)>0){x=c[_>>2]|0;y=c[$>>2]|0;z=D+-1|0;j=c[aa>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[vb>>2]=c[gb>>2];c[vb+4>>2]=l;l=Bb(52942,vb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[aa>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}D=j;l=Sv(O|0,N|0,1,0)|0;m=L()|0;do if(!(Vc(D,1)|0)){o=c[D+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);l=((z|0)<0)<<31>>31;do if(!(Vc(D,2)|0)){o=c[D+100>>2]|0;m=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){I=m;c[I>>2]=z;c[I+4>>2]=l;b[o>>1]=4;break}else{Pg(m,z,l);break}}while(0);do if((Gc(D)|0)!=100){if(!j){M=421;break e}j=c[D>>2]|0;M=D+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,D);l=kc(D)|0;c[D+20>>2]=770837923;c[D+36>>2]=-1;c[D+40>>2]=0;a[D+146>>0]=2;c[D+44>>2]=0;c[D+32>>2]=1;a[D+147>>0]=-1;c[D+48>>2]=0;M=D+64|0;c[M>>2]=0;c[M+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);m=K;g=J;j=7;l=p;M=750;break e}else{j=c[j+68>>2]&l;break}}else{v=Oc(D,1)|0;w=L()|0;t=Oc(D,2)|0;u=L()|0;C=(j|0)==0;f:do if(C)j=29576;else{j=c[D+120>>2]|0;do if(j|0){if((e[D+144>>1]|0)<=3)break;j=j+120|0;break f}while(0);j=c[D>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576}while(0);l=b[j+8>>1]|0;do if((l&514)==514){if((a[j+10>>0]|0)!=1){M=237;break}s=c[j+16>>2]|0}else M=237;while(0);do if((M|0)==237){M=0;if(l&1){s=0;break}s=Gg(j,1)|0}while(0);if(!C){j=c[D>>2]|0;m=D+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j}if(!s){h=ba;j=c[h+4>>2]|0;h=c[h>>2]|0;o=0;r=0}else{l=a[s>>0]|0;if((l+-48&255)<10){j=0;o=0;m=0;do{m=Yv(o|0,m|0,10,0)|0;o=(l&255)+-48|0;o=Sv(m|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;m=L()|0;j=j+1|0;l=a[s+j>>0]|0}while((l+-48&255)<10)}else{j=0;o=0;m=0}g:while(1){l=a[s+j>>0]|0;switch(l<<24>>24){case 45:{M=251;break g}case 32:break;default:{q=1;r=0;break g}}j=j+1|0}if((M|0)==251){M=0;l=j+1|0;j=l;l=a[s+l>>0]|0;q=-1;r=-1}if((l+-48&255)<10){h=0;g=0;do{g=Yv(h|0,g|0,10,0)|0;h=(l&255)+-48|0;h=Sv(g|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;g=L()|0;j=j+1|0;l=a[s+j>>0]|0}while((l+-48&255)<10);l=h;j=g}else{l=0;j=0}h=Yv(l|0,j|0,q|0,r|0)|0;j=L()|0;r=ba;c[r>>2]=h;c[r+4>>2]=j;r=m}l=Tv(0,0,h|0,j|0)|0;m=L()|0;if((j|0)<0){j=ba;c[j>>2]=l;c[j+4>>2]=m;j=m}else l=h;a[na>>0]=(l|0)==0&(j|0)==0&1;s=Lc(D,4)|0;if(C)q=mc(29576)|0;else{j=c[D+120>>2]|0;do if(!j)M=263;else{if((e[D+144>>1]|0)<=4){M=263;break}j=j+160|0;l=D}while(0);if((M|0)==263){M=0;j=c[D>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;l=D}h=mc(j)|0;j=c[l>>2]|0;m=D+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j;q=h}j=c[La>>2]|0;c[Kb>>2]=j;do if(!j){j=c[hb>>2]|0;c[xb>>2]=c[gb>>2];c[xb+4>>2]=j;j=Bb(53128,xb)|0;if(!j){m=7;break}m=qd(c[R>>2]|0,j,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{I=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[Kb>>2]|0;c[La>>2]=j;if(!m){m=j;M=277}}else{m=j;M=277}while(0);h:do if((M|0)==277){M=0;g=m;do if(!(Vc(g,1)|0)){j=c[g+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){I=j;c[I>>2]=o;c[I+4>>2]=r;b[l>>1]=4;break}else{Pg(j,o,r);break}}while(0);h=(Gc(g)|0)==100;j=h&1;do if(m){l=c[g>>2]|0;I=g+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(l,g);m=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;I=g+64|0;c[I>>2]=0;c[I+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);m=7;break h}else{m=c[l+68>>2]&m;break}}else m=0;while(0);if(h&(m|0)==0){c[Kb>>2]=0;c[lb>>2]=0;m=dq(f,t,u,Kb,lb)|0;if(!m){m=c[Kb>>2]|0;j=c[lb>>2]|0;A=Ta;B=A+40|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[ob>>2]=m;c[Ua>>2]=j;do if(!(a[m>>0]|0))j=1;else{g=m+1|0;j=a[g>>0]|0;l=j&255;if(!(l&128)){I=Xa;c[I>>2]=j&255;c[I+4>>2]=0;j=2;break}I=d[m+2>>0]|0;j=I<<7|l&127;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=3;break}I=d[m+3>>0]|0;j=I<<14|j&16383;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=4;break}I=d[m+4>>0]|0;j=I<<21|j&2097151;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=5;break}h=28;m=m+5|0;j=j&268435455;l=0;do{I=m;m=m+1|0;I=d[I>>0]|0;H=cw(I&127|0,0,h|0)|0;j=Sv(H|0,L()|0,j|0,l|0)|0;l=L()|0;h=h+7|0}while(h>>>0<64&((I&128|0)!=0|0!=0));I=Xa;c[I>>2]=j;c[I+4>>2]=l;j=1-g+m|0}while(0);c[Ta>>2]=j;m=Pr(ob)|0;if((m|0)==0&(c[ob>>2]|0)!=0)do m=Pr(ob)|0;while((m|0)==0&(c[ob>>2]|0)!=0);l=c[Ya>>2]|0;I=c[Za>>2]|0;j=Lu(x,l,(y|0)<(I|0)?y:I)|0;j=(((j|0)==0?y-I|0:j)|0)>0&1;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0)}else j=1;l=c[Kb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0)}if(!((m|0)==0&(j|0)!=0))break;h=a[q>>0]|0;g=h<<24>>24;l=Tv(o|0,r|0,v|0,w|0)|0;L()|0;l=(l+1|0)/16|0;c[Lb>>2]=l;I=sa;c[I>>2]=v;c[I+4>>2]=w;I=ta;c[I>>2]=o;c[I+4>>2]=r;I=qa;c[I>>2]=O;c[I+4>>2]=N;c[ra>>2]=z;if(h<<24>>24<15){j=g;do{I=j;j=j+1|0;E=G(j,l)|0;E=Sv(v|0,w|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Lb+56+(j<<5)|0;c[H>>2]=E;c[H+4>>2]=F}while((I|0)<14)}o=G(l,g)|0;o=Sv(v|0,w|0,o|0,((o|0)<0)<<31>>31|0)|0;m=L()|0;l=Lb+56+(g<<5)|0;c[l>>2]=o;c[l+4>>2]=m;l=c[ja>>2]|0;l=(s|0)>(l|0)?s:l;m=Lb+56+(g<<5)+28|0;o=Lb+56+(g<<5)+20|0;j=c[o>>2]|0;if((c[m>>2]|0)<(l|0)){if(mb()|0){m=7;break}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){m=7;break}c[m>>2]=l;c[o>>2]=j}ew(j|0,q|0,s|0)|0;c[Lb+56+(g<<5)+24>>2]=s;if(h<<24>>24<=-1){m=0;break}q=g;j=s;while(1){m=c[Lb+56+(q<<5)+20>>2]|0;A=_a;B=A+40|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[Kb>>2]=m;c[$a>>2]=j;if(!(a[m>>0]|0))j=1;else{h=m+1|0;j=a[h>>0]|0;l=j&255;do if(!(l&128)){I=bb;c[I>>2]=j&255;c[I+4>>2]=0;j=1}else{I=d[m+2>>0]|0;j=I<<7|l&127;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=2;break}I=d[m+3>>0]|0;j=I<<14|j&16383;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=3;break}I=d[m+4>>0]|0;j=I<<21|j&2097151;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=4;break}o=28;m=m+5|0;j=j&268435455;l=0;do{I=m;m=m+1|0;I=d[I>>0]|0;H=cw(I&127|0,0,o|0)|0;j=Sv(H|0,L()|0,j|0,l|0)|0;l=L()|0;o=o+7|0}while(o>>>0<64&((I&128|0)!=0|0!=0));I=bb;c[I>>2]=j;c[I+4>>2]=l;j=m-h|0}while(0);j=j+1|0}c[_a>>2]=j;j=Pr(Kb)|0;l=(j|0)==0;if(l&(c[Kb>>2]|0)!=0)do{j=Pr(Kb)|0;l=(j|0)==0}while(l&(c[Kb>>2]|0)!=0);o=c[cb>>2]|0;do if(l){l=Lb+56+(q<<5)+16|0;m=Lb+56+(q<<5)+8|0;if((c[l>>2]|0)<(o|0)){j=c[m>>2]|0;if(mb()|0){j=7;M=364;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;M=364;break}c[l>>2]=o;c[m>>2]=j}else j=c[m>>2]|0;l=c[P>>2]|0;ew(j|0,l|0,o|0)|0;c[Lb+56+(q<<5)+12>>2]=o;if((q|0)<=0){j=0;break}c[lb>>2]=0;c[ob>>2]=0;h=q+-1|0;j=bb;g=c[j>>2]|0;j=c[j+4>>2]|0;o=Lb+56+(h<<5)|0;c[o>>2]=g;c[o+4>>2]=j;j=dq(f,g,j,lb,ob)|0;g=c[ob>>2]|0;o=c[ja>>2]|0;o=(g|0)>(o|0)?g:o;do if(!j){l=Lb+56+(h<<5)+28|0;m=Lb+56+(h<<5)+20|0;j=c[m>>2]|0;if((c[l>>2]|0)<(o|0)){if(mb()|0){j=7;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;break}c[l>>2]=o;c[m>>2]=j}ew(j|0,c[lb>>2]|0,g|0)|0;c[Lb+56+(h<<5)+24>>2]=g;j=0}while(0);l=c[lb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);M=364}else M=364;while(0);if((M|0)==364){M=0;l=c[P>>2]|0}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=q+-1|0;if(!((q|0)>0&(j|0)==0)){m=j;break h}q=l;j=c[Lb+56+(l<<5)+24>>2]|0}}while(0);do if(!C){j=c[D>>2]|0;M=D+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,D);l=kc(D)|0;c[D+20>>2]=770837923;c[D+36>>2]=-1;c[D+40>>2]=0;a[D+146>>0]=2;c[D+44>>2]=0;c[D+32>>2]=1;a[D+147>>0]=-1;c[D+48>>2]=0;M=D+64|0;c[M>>2]=0;c[M+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);j=(m|0)==0?j:m}while(0);if(!j)M=421;else{m=K;g=J;l=p;M=750}}else{j=c[ca>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[yb>>2]=c[gb>>2];c[yb+4>>2]=l;l=Bb(52726,yb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[ca>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){M=l;c[M>>2]=O;c[M+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);l=c[U>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(g,2)|0)){h=c[g+100>>2]|0;o=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){M=o;c[M>>2]=l;c[M+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);if((Gc(g)|0)==100)o=Nc(g,0)|0;else o=0;do if(j|0){j=c[g>>2]|0;M=g+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;M=g+64|0;c[M>>2]=0;c[M+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j)break;else{m=K;g=J;l=p;M=750;break e}}else{og(j);m=K;g=J;j=7;l=p;M=750;break e}}while(0);j=c[ua>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[zb>>2]=c[gb>>2];c[zb+4>>2]=l;l=Bb(51657,zb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[ua>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}m=j;if((Gc(m)|0)==100){F=o<<4;F=Sv(F|0,((F|0)<0)<<31>>31|0,-1,-1)|0;M=L()|0;I=Oc(m,0)|0;H=L()|0;E=sa;c[E>>2]=I;c[E+4>>2]=H;H=Sv(F|0,M|0,I|0,H|0)|0;I=L()|0;M=ta;c[M>>2]=H;c[M+4>>2]=I}do if(j|0){j=c[m>>2]|0;M=m+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,m);l=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;M=m+64|0;c[M>>2]=0;c[M+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j)break;else{m=K;g=J;l=p;M=750;break e}}else{og(j);m=K;g=J;j=7;l=p;M=750;break e}}while(0);j=ta;j=Hr(f,c[j>>2]|0,c[j+4>>2]|0,0,0)|0;if(j|0){m=K;g=J;l=p;M=750;break}I=qa;c[I>>2]=O;c[I+4>>2]=N;c[Lb>>2]=o;c[ra>>2]=D;I=sa;M=c[I>>2]|0;I=c[I+4>>2]|0;H=ka;c[H>>2]=M;c[H+4>>2]=I;H=Sv(M|0,I|0,o|0,((o|0)<0)<<31>>31|0)|0;F=L()|0;E=wa;c[E>>2]=H;c[E+4>>2]=F;E=o<<1;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=xa;c[H>>2]=E;c[H+4>>2]=F;H=o*3|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=ya;c[E>>2]=H;c[E+4>>2]=F;E=o<<2;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=za;c[H>>2]=E;c[H+4>>2]=F;H=o*5|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Aa;c[E>>2]=H;c[E+4>>2]=F;E=o*6|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ba;c[H>>2]=E;c[H+4>>2]=F;H=o*7|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ca;c[E>>2]=H;c[E+4>>2]=F;E=o<<3;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Da;c[H>>2]=E;c[H+4>>2]=F;H=o*9|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ea;c[E>>2]=H;c[E+4>>2]=F;E=o*10|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Fa;c[H>>2]=E;c[H+4>>2]=F;H=o*11|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ga;c[E>>2]=H;c[E+4>>2]=F;E=o*12|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ha;c[H>>2]=E;c[H+4>>2]=F;H=o*13|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ia;c[E>>2]=H;c[E+4>>2]=F;E=o*14|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ja;c[H>>2]=E;c[H+4>>2]=F;H=o*15|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;I=L()|0;M=Ka;c[M>>2]=H;c[M+4>>2]=I;M=421}while(0);i:do if((M|0)==421){M=0;if(!(c[Lb>>2]|0)){m=K;g=J;j=0;l=p;M=750;break}j:while(1){E=c[_>>2]|0;F=c[$>>2]|0;H=c[da>>2]|0;I=c[ea>>2]|0;l=c[fa>>2]|0;m=c[ga>>2]|0;k:do if((m|0)>0){j=0;while(1){if((a[l+j>>0]|0)!=(a[E+j>>0]|0)){A=j;break k}j=j+1|0;if((j|0)>=(m|0)){A=j;break}}}else A=0;while(0);g=0;j=A;l=((A|0)<0)<<31>>31;do{g=g+1|0;j=bw(j|0,l|0,7)|0;l=L()|0}while(!((j|0)==0&(l|0)==0));h=F-A|0;o=0;j=h;l=((h|0)<0)<<31>>31;do{o=o+1|0;j=bw(j|0,l|0,7)|0;l=L()|0}while(!((j|0)==0&(l|0)==0));D=((I|0)<0)<<31>>31;j=0;l=I;m=D;do{j=j+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));l=h+I+g+o+j|0;j=c[ia>>2]|0;do if((j|0)>0){if((j+l|0)<=(c[ja>>2]|0)){M=480;break}C=ka;j=Hr(f,c[C>>2]|0,c[C+4>>2]|0,c[ha>>2]|0,j)|0;c[la>>2]=(c[la>>2]|0)+1;l:do if(!j){C=A+1|0;m=ka;v=1;l=c[m>>2]|0;m=c[m+4>>2]|0;while(1){z=Lb+56+(v<<5)+8|0;o=c[z>>2]|0;B=Lb+56+(v<<5)+12|0;q=c[B>>2]|0;m:do if((q|0)>0){j=0;while(1){if((a[o+j>>0]|0)!=(a[E+j>>0]|0)){x=j;break m}j=j+1|0;if((j|0)>=(q|0)){x=j;break}}}else x=0;while(0);t=((x|0)<0)<<31>>31;g=0;j=x;o=t;do{g=g+1|0;j=bw(j|0,o|0,7)|0;o=L()|0}while(!((j|0)==0&(o|0)==0));w=C-x|0;u=((w|0)<0)<<31>>31;j=0;o=w;h=u;do{j=j+1|0;o=bw(o|0,h|0,7)|0;h=L()|0}while(!((o|0)==0&(h|0)==0));s=g+w+j|0;y=Lb+56+(v<<5)+24|0;j=c[y>>2]|0;if(!q)break;if((j+s|0)<=(c[ja>>2]|0))break;r=Lb+56+(v<<5)|0;o=r;q=Lb+56+(v<<5)+20|0;j=Hr(f,c[o>>2]|0,c[o+4>>2]|0,c[q>>2]|0,j)|0;a[c[q>>2]>>0]=v;q=(c[q>>2]|0)+1|0;o=Sv(l|0,m|0,1,0)|0;l=q;g=L()|0;while(1){m=o&255;h=l+1|0;a[l>>0]=m|-128;o=bw(o|0,g|0,7)|0;g=L()|0;if((o|0)==0&(g|0)==0)break;else l=h}a[l>>0]=m&127;c[y>>2]=1-q+h;m=r;l=c[m>>2]|0;m=c[m+4>>2]|0;x=Sv(l|0,m|0,1,0)|0;y=L()|0;z=r;c[z>>2]=x;c[z+4>>2]=y;c[B>>2]=0;if((j|0)!=0|(l|0)==0&(m|0)==0)break l;j=v+1|0;if(j>>>0<16)v=j;else{j=0;break l}}q=Lb+56+(v<<5)+20|0;if(!j){o=c[ja>>2]|0;r=Lb+56+(v<<5)+28|0;j=c[q>>2]|0;if((c[r>>2]|0)<(o|0)){if(mb()|0){j=7;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;break}c[r>>2]=o;c[q>>2]=j}a[j>>0]=v;g=(c[q>>2]|0)+1|0;h=g;while(1){j=l&255;o=h+1|0;a[h>>0]=j|-128;l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else h=o}a[h>>0]=j&127;j=1-g+o|0;c[y>>2]=j;m=r}else m=Lb+56+(v<<5)+28|0;l=j+s|0;if((c[m>>2]|0)<(l|0)){j=c[q>>2]|0;if(mb()|0){j=7;break}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){j=7;break}c[m>>2]=l;c[q>>2]=j}l=Lb+56+(v<<5)+16|0;if((c[l>>2]|0)<=(A|0)){j=c[z>>2]|0;if(mb()|0){j=7;break}j=sb(j,(C|0)>0?C:0,0)|0;if(!j){j=7;break}c[l>>2]=C;c[z>>2]=j}if(!(c[B>>2]|0))j=c[y>>2]|0;else{h=(c[q>>2]|0)+(c[y>>2]|0)|0;o=h;g=x;m=t;while(1){j=g&255;l=o+1|0;a[o>>0]=j|-128;g=bw(g|0,m|0,7)|0;m=L()|0;if((g|0)==0&(m|0)==0)break;else o=l}a[o>>0]=j&127;j=(c[y>>2]|0)+(l-h)|0;c[y>>2]=j}h=(c[q>>2]|0)+j|0;o=h;g=w;m=u;while(1){j=g&255;l=o+1|0;a[o>>0]=j|-128;g=bw(g|0,m|0,7)|0;m=L()|0;if((g|0)==0&(m|0)==0)break;else o=l}a[o>>0]=j&127;j=(c[y>>2]|0)+(l-h)|0;c[y>>2]=j;ew((c[q>>2]|0)+j|0,E+x|0,w|0)|0;c[y>>2]=(c[y>>2]|0)+w;ew(c[z>>2]|0,E|0,C|0)|0;c[B>>2]=C;j=0}while(0);m=ka;m=Sv(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;l=L()|0;h=ka;c[h>>2]=m;c[h+4>>2]=l;c[ga>>2]=0;c[ia>>2]=0;h=0;l=F;m=((F|0)<0)<<31>>31;do{h=h+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));o=0;m=I;l=D;do{o=o+1|0;m=bw(m|0,l|0,7)|0;l=L()|0}while(!((m|0)==0&(l|0)==0));l=F+1+I+h|0;B=l+o|0;C=ba;B=Sv(c[C>>2]|0,c[C+4>>2]|0,B|0,((B|0)<0)<<31>>31|0)|0;C=L()|0;D=ba;c[D>>2]=B;c[D+4>>2]=C;if(!j){l=l+o|0;j=0;M=482}}else M=480;while(0);if((M|0)==480){B=ba;B=Sv(c[B>>2]|0,c[B+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;C=L()|0;D=ba;c[D>>2]=B;c[D+4>>2]=C;l=l+j|0;M=482}do if((M|0)==482){M=0;if((c[ma>>2]|0)<(l|0)){j=c[ha>>2]|0;if(mb()|0){m=K;g=J;j=7;l=p;M=750;break i}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){m=K;g=J;j=7;l=p;M=750;break i}c[ma>>2]=l;c[ha>>2]=j;j=c[ia>>2]|0}if(!j){c[ia>>2]=1;a[c[ha>>2]>>0]=0}j=Qr(ha,fa,E,F,H,I)|0;if(j|0)break;j=gq(f,jb)|0}while(0);l=c[la>>2]|0;if((j|0)==100&(l|0)>=(K|0))break;switch(j|0){case 100:break;case 0:break j;default:{m=K;g=J;l=p;M=750;break i}}}F=K+-1-l|0;j=c[U>>2]|0;n:do if((j|0)>0){w=0;y=j;l=j;o:while(1){x=y+-1|0;if((l|0)>0){m=c[jb>>2]|0;j=0;do{o=c[m+(j<<2)>>2]|0;j=j+1|0}while((j|0)<(l|0)?(c[o>>2]|0)!=(x|0):0)}else o=0;do if(!(c[o+40>>2]|0)){h=o+8|0;m=h;j=c[m>>2]|0;m=c[m+4>>2]|0;do if(!((j|0)==0&(m|0)==0)){l=c[Na>>2]|0;c[Kb>>2]=l;if(!l){l=c[hb>>2]|0;c[Ab>>2]=c[gb>>2];c[Ab+4>>2]=l;l=Bb(52181,Ab)|0;if(!l){M=502;break o}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Na>>2]=l;if(j|0){g=w;break n}m=h;j=c[m>>2]|0;m=c[m+4>>2]|0}q=l;do if(!(Vc(q,1)|0)){h=c[q+100>>2]|0;g=h+8|0;if(!(b[g>>1]&9216)){K=h;c[K>>2]=j;c[K+4>>2]=m;b[g>>1]=4;break}else{Pg(h,j,m);break}}while(0);h=o+24|0;m=c[h>>2]|0;h=c[h+4>>2]|0;if(Vc(q,2)|0){Gc(q)|0;if(!l)break}else{l=c[q+100>>2]|0;j=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){K=j;c[K>>2]=m;c[K+4>>2]=h;b[l>>1]=4}else Pg(j,m,h);Gc(q)|0}j=c[q>>2]|0;K=q+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,q);l=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){M=521;break o}j=c[j+68>>2]&l;if(j|0){g=w;break n}}while(0);h=c[o>>2]|0;j=c[Ma>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[Cb>>2]=c[gb>>2];c[Cb+4>>2]=l;l=Bb(52829,Cb)|0;if(!l){M=526;break o}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Ma>>2]=l;if(!j)j=l;else{g=w;break n}}o=j;do if(!(Vc(o,1)|0)){l=c[o+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);m=((h|0)<0)<<31>>31;if(Vc(o,2)|0){Gc(o)|0;if(!j){m=w;j=0;break}}else{l=c[o+100>>2]|0;j=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){K=j;c[K>>2]=h;c[K+4>>2]=m;b[l>>1]=4}else Pg(j,h,m);Gc(o)|0}j=c[o>>2]|0;K=o+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,o);l=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;K=o+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){M=544;break o}m=w;j=c[j+68>>2]&l}else{q=c[o+64>>2]|0;t=c[o+60>>2]|0;v=c[o>>2]|0;c[lb>>2]=0;c[lb+4>>2]=0;c[lb+8>>2]=0;c[ob>>2]=0;c[ob+4>>2]=0;c[ob+8>>2]=0;j=qb;c[j>>2]=0;c[j+4>>2]=0;j=c[aa>>2]|0;c[Kb>>2]=j;do if(!j){l=c[hb>>2]|0;c[Db>>2]=c[gb>>2];c[Db+4>>2]=l;l=Bb(52942,Db)|0;if(!l){j=7;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[aa>>2]=l;if(!j){j=l;M=554}}else M=554;while(0);p:do if((M|0)==554){M=0;g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);u=((v|0)<0)<<31>>31;do if(!(Vc(g,2)|0)){m=c[g+100>>2]|0;l=m+40|0;m=m+48|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=v;c[K+4>>2]=u;b[m>>1]=4;break}else{Pg(l,v,u);break}}while(0);if((Gc(g)|0)==100){if(!j)l=mc(29576)|0;else{l=c[g+120>>2]|0;do if(!l)M=567;else{if((e[g+144>>1]|0)<=4){M=567;break}l=l+160|0;m=g}while(0);if((M|0)==567){M=0;l=c[g>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;m=g}l=mc(l)|0;m=c[m>>2]|0;h=g+40|0;o=c[h>>2]|0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);m=7}else m=c[m+68>>2]&o;c[h>>2]=m}m=Lc(g,4)|0;r=Oc(g,1)|0;s=L()|0;m=Rr(l,m,lb,q,t,qb)|0}else{m=0;r=0;s=0}do if(j){j=c[g>>2]|0;K=g+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;K=g+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);j=(m|0)==0?j:m;m=qb;l=c[m>>2]|0;m=c[m+4>>2]|0;do if((j|0)==0&((l|0)!=0|(m|0)!=0)){while(1){c[Kb>>2]=0;c[rb>>2]=0;j=dq(f,l,m,Kb,rb)|0;do if(!j){j=Rr(c[Kb>>2]|0,c[rb>>2]|0,ob,q,t,qb)|0;if(j|0)break;j=Hr(f,l,m,c[ob>>2]|0,c[Oa>>2]|0)|0}while(0);o=c[Kb>>2]|0;do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{K=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);o=(j|0)==0;g=qb;h=c[g>>2]|0;g=c[g+4>>2]|0;if(o&((h|0)!=0|(g|0)!=0)){l=h;m=g}else break}if(!o)break p;j=c[Na>>2]|0;c[Kb>>2]=j;if(!j){o=c[hb>>2]|0;c[Eb>>2]=c[gb>>2];c[Eb+4>>2]=o;o=Bb(52181,Eb)|0;if(!o){j=7;break p}j=qd(c[R>>2]|0,o,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{K=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}o=c[Kb>>2]|0;c[Na>>2]=o;if(!j)j=o;else break p}q=j;do if(!(Vc(q,1)|0)){o=c[q+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=r;c[K+4>>2]=s;b[h>>1]=4;break}else{Pg(o,r,s);break}}while(0);h=Sv(l|0,m|0,-1,-1)|0;g=L()|0;if(Vc(q,2)|0){Gc(q)|0;if(!j){h=l;break}}else{o=c[q+100>>2]|0;j=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){K=j;c[K>>2]=h;c[K+4>>2]=g;b[o>>1]=4}else Pg(j,h,g);Gc(q)|0}j=c[q>>2]|0;K=q+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,q);o=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((o|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break p}else{j=c[j+68>>2]&o;M=614;break}}else{l=0;m=0;M=614}while(0);if((M|0)==614){M=0;if(!j)h=l;else break}j=c[Pa>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[Fb>>2]=c[gb>>2];c[Fb+4>>2]=l;l=Bb(53049,Fb)|0;if(!l){j=7;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Pa>>2]=l;if(!j)j=l;else break}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;o=l+8|0;if(!(b[o>>1]&9216)){K=l;c[K>>2]=h;c[K+4>>2]=m;b[o>>1]=4;break}else{Pg(l,h,m);break}}while(0);l=c[lb>>2]|0;m=c[Qa>>2]|0;do if(!((l|0)==0|(Vc(g,2)|0)!=0)){l=yc((c[g+100>>2]|0)+40|0,l,m,0,0)|0;if(!l)break;m=c[g>>2]|0;c[m+64>>2]=l;Ne(m,l);m=c[g>>2]|0;if(!((l|0)==3082|(a[m+81>>0]|0)!=0))break;og(m)}while(0);do if(!(Vc(g,3)|0)){m=c[g+100>>2]|0;l=m+80|0;m=m+88|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);if(Vc(g,4)|0){Gc(g)|0;if(!j)j=0;else M=641}else{l=c[g+100>>2]|0;j=l+120|0;l=l+128|0;if(!(b[l>>1]&9216)){M=j;c[M>>2]=v;c[M+4>>2]=u;b[l>>1]=4}else Pg(j,v,u);Gc(g)|0;M=641}do if((M|0)==641){M=0;j=c[g>>2]|0;K=g+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;K=g+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}while(0);Vc(g,2)|0}while(0);l=c[lb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[ob>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=w+1|0}while(0);l=(j|0)==0;if(!((y|0)>1&l)){M=658;break}w=m;y=x;l=c[U>>2]|0}if((M|0)==502){M=0;g=w;j=7;break}else if((M|0)==521){M=0;og(j);g=w;j=7;break}else if((M|0)==526){M=0;g=w;j=7;break}else if((M|0)==544){M=0;og(j);g=w;j=7;break}else if((M|0)==658){M=0;if(!l){g=m;break}E=m;j=c[U>>2]|0;M=660;break}}else{E=0;M=660}while(0);do if((M|0)==660){M=0;if((E|0)==(j|0)){g=j;j=0;break}j=c[Sa>>2]|0;c[Kb>>2]=j;do if(!j){l=c[hb>>2]|0;c[Gb>>2]=c[gb>>2];c[Gb+4>>2]=l;l=Bb(53193,Gb)|0;if(!l){j=7;l=0;M=698;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Sa>>2]=l;if(!j){j=l;M=669}else{l=0;M=698}}else M=669;while(0);q:do if((M|0)==669){M=0;r=j;do if(!(Vc(r,1)|0)){l=c[r+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);r:do if((Gc(r)|0)==100){g=0;o=0;q=0;h=0;l=0;while(1){if((q|0)>=(o|0)){o=o+16|0;m=o<<2;if(mb()|0){o=7;break r}m=sb(h,(m|0)>0?m:0,0)|0;if(!m){o=7;break r}else{g=m;l=m;h=m}}K=Nc(r,0)|0;m=q+1|0;c[g+(q<<2)>>2]=K;if((Gc(r)|0)==100)q=m;else{q=m;o=0;break}}}else{q=0;o=0;g=0;l=0}while(0);do if(j){j=c[r>>2]|0;K=r+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,r);m=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;K=r+64|0;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&m;break}}else j=0;while(0);j=(o|0)==0?j:o;if(j|0){M=698;break}j=c[db>>2]|0;c[Kb>>2]=j;if(!j){m=c[hb>>2]|0;c[Hb>>2]=c[gb>>2];c[Hb+4>>2]=m;m=Bb(52884,Hb)|0;if(!m){j=7;M=698;break}j=qd(c[R>>2]|0,m,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{K=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}m=c[Kb>>2]|0;c[db>>2]=m;if(!j)j=m;else{M=698;break}}D=j;do if(!(Vc(D,2)|0)){o=c[D+100>>2]|0;m=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){K=m;c[K>>2]=O;c[K+4>>2]=N;b[o>>1]=4;break}else{Pg(m,O,N);break}}while(0);a[Va>>0]=1;if(!q){j=0;break}s=D+100|0;t=D+136|0;u=D+20|0;v=D+36|0;w=D+40|0;x=D+146|0;y=D+44|0;z=D+32|0;A=D+147|0;B=D+48|0;C=D+64|0;if(!j){r=0;s:while(1){j=c[g+(r<<2)>>2]|0;do if((j|0)==(r|0))j=0;else{m=((j|0)<0)<<31>>31;do if(!(Vc(D,3)|0)){h=c[s>>2]|0;o=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=j;c[K+4>>2]=m;b[h>>1]=4;break}else{Pg(o,j,m);break}}while(0);if(Vc(D,1)|0){Gc(D)|0;j=0;break}j=c[s>>2]|0;m=j+8|0;if(!(b[m>>1]&9216)){K=j;c[K>>2]=r;c[K+4>>2]=0;b[m>>1]=4}else Pg(j,r,0);Gc(D)|0;j=c[D>>2]|0;K=t;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,D);m=kc(D)|0;c[u>>2]=770837923;c[v>>2]=-1;c[w>>2]=0;a[x>>0]=2;c[y>>2]=0;c[z>>2]=1;a[A>>0]=-1;c[B>>2]=0;K=C;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0)break s;j=c[j+68>>2]&m}while(0);r=r+1|0;if(!(r>>>0<q>>>0&(j|0)==0))break q}og(j);j=7;break}r=0;while(1){j=c[g+(r<<2)>>2]|0;if((j|0)==(r|0))j=0;else{m=((j|0)<0)<<31>>31;do if(!(Vc(D,3)|0)){h=c[s>>2]|0;o=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=j;c[K+4>>2]=m;b[h>>1]=4;break}else{Pg(o,j,m);break}}while(0);if(!(Vc(D,1)|0)){j=c[s>>2]|0;m=j+8|0;if(!(b[m>>1]&9216)){K=j;c[K>>2]=r;c[K+4>>2]=0;b[m>>1]=4}else Pg(j,r,0);Gc(D)|0}else Gc(D)|0;j=c[D>>2]|0;K=t;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,D);m=kc(D)|0;c[u>>2]=770837923;c[v>>2]=-1;c[w>>2]=0;a[x>>0]=2;c[y>>2]=0;c[z>>2]=1;a[A>>0]=-1;c[B>>2]=0;K=C;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0)break;j=c[j+68>>2]&m}r=r+1|0;if(!(r>>>0<q>>>0&(j|0)==0))break q}og(j);j=7}while(0);if((M|0)==698){M=0;a[Va>>0]=1}a[Va>>0]=0;if(!l){g=E;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);g=E;break}else{g=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);g=E;break}}while(0);if(!g){t=F;s=p;r=1;break}k=n+20|0;if(j|0){m=F;k=1;l=p;M=751;break}if((p|0)<(k|0)){if(mb()|0){m=F;k=1;j=7;l=p;M=751;break}j=sb(i,(k|0)>0?k:0,0)|0;if(!j){m=F;k=1;j=7;l=p;M=751;break}else{i=j;p=k}}k=i+n|0;j=k;m=O;h=N;while(1){l=m&255;o=j+1|0;a[j>>0]=l|-128;m=bw(m|0,h|0,7)|0;h=L()|0;if((m|0)==0&(h|0)==0)break;else j=o}a[j>>0]=l&127;n=o-k+n|0;o=i+n|0;j=o;l=g;m=((g|0)<0)<<31>>31;while(1){k=l&255;h=j+1|0;a[j>>0]=k|-128;l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else j=h}a[j>>0]=k&127;m=F;k=1;j=0;n=n-o+h|0;l=p;M=750}while(0);if((M|0)==750){M=0;if(!g){t=m;s=l;r=1}else M=751}if((M|0)==751){M=0;r=ba;r=Tv(0,0,c[r>>2]|0,c[r+4>>2]|0)|0;s=L()|0;t=ba;c[t>>2]=r;c[t+4>>2]=s;t=m;s=l;r=0}m=15;while(1){if((c[Lb+56+(m<<5)+24>>2]|0)>0){M=763;break}l=c[Lb+56+(m<<5)+20>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(m<<5)+8>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);if(!m)break;else m=m+-1|0}do if((M|0)==763){M=0;do if(m){if((m|0)>0)M=773}else{if(j|0){m=1;M=773;break}j=c[pa>>2]|0;if((c[oa>>2]|0)<11){if(mb()|0){j=7;m=1;M=773;break}j=sb(j,11,0)|0;if(!j){j=7;m=1;M=773;break}c[oa>>2]=11;c[pa>>2]=j}a[j>>0]=1;l=(c[pa>>2]|0)+1|0;p=ka;j=l;o=c[p>>2]|0;p=c[p+4>>2]|0;while(1){m=o&255;h=j+1|0;a[j>>0]=m|-128;o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else j=h}a[j>>0]=m&127;c[va>>2]=1-l+h;j=0;m=1;M=773}while(0);if((M|0)==773){h=0;do{l=c[Lb+56+(h<<5)+24>>2]|0;o=Lb+56+(h<<5)+20|0;if((j|0)==0&(l|0)>0){j=Lb+56+(h<<5)|0;j=Hr(f,c[j>>2]|0,c[j+4>>2]|0,c[o>>2]|0,l)|0}l=c[o>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(h<<5)+8>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);h=h+1|0}while((h|0)!=(m|0))}if(!j){j=qa;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;l=L()|0;o=sa;h=ka;p=ta;if(!(a[na>>0]|0)){q=ba;g=c[q>>2]|0;q=c[q+4>>2]|0}else{g=0;q=0}M=Lb+56+(m<<5)+20|0;j=Jr(f,j,l,c[ra>>2]|0,c[o>>2]|0,c[o+4>>2]|0,c[h>>2]|0,c[h+4>>2]|0,c[p>>2]|0,c[p+4>>2]|0,g,q,c[M>>2]|0,c[Lb+56+(m<<5)+24>>2]|0)|0;l=M}else l=Lb+56+(m<<5)+20|0;l=c[l>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(m<<5)+8>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!r){m=t;l=s;M=801;break}if(a[na>>0]|0){m=t;l=s;M=801;break}M=Sv(O|0,N|0,1,0)|0;l=L()|0;m=ba;Gr(f,M,l,c[m>>2]|0,c[m+4>>2]|0)|0;m=t;l=s;M=801}}else{m=K;l=p;M=801}}else{m=K;l=p;M=801}while(0);if((M|0)==801){M=0;q=m;p=l;m=c[U>>2]|0}l=c[jb>>2]|0;if((m|0)>0){g=0;do{h=c[l+(g<<2)>>2]|0;do if(h|0){do if(!(c[h+56>>2]|0)){l=c[h+64>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);do if(!(a[h+5>>0]|0)){l=c[h+40>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[h+52>>2]|0;t:do if(l|0){m=c[l+20>>2]|0;gc(c[l+16>>2]|0)|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,l);break t}o=l;if((c[m+304>>2]|0)>>>0>o>>>0)break;if((c[m+308>>2]|0)>>>0<=o>>>0)break;K=m+300|0;c[l>>2]=c[K>>2];c[K>>2]=l;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);g=g+1|0;l=c[jb>>2]|0}while((g|0)<(c[U>>2]|0))}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[W>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[U>>2]=0;c[jb>>2]=0;c[W>>2]=0;if((j|0)==0&(q|0)>0){K=q;o=O;h=N}else break}if((k|0)!=0&(j|0)==0){l=f+148|0;k=c[l>>2]|0;c[Kb>>2]=k;if(!k){k=c[f+20>>2]|0;c[Jb>>2]=c[f+16>>2];c[Jb+4>>2]=k;k=Bb(52453,Jb)|0;if(!k){j=7;break}j=qd(c[f+12>>2]|0,k,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[Kb>>2]|0;c[l>>2]=k;if(j)break}m=k;do if(!(Vc(m,1)|0)){j=c[m+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){Kb=j;c[Kb>>2]=1;c[Kb+4>>2]=0;b[l>>1]=4;break}else{Pg(j,1,0);break}}while(0);if((i|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;if(!k)j=0;else M=857}else{j=yc((c[m+100>>2]|0)+40|0,i,n,0,0)|0;if(j|0?(Mb=c[m>>2]|0,c[Mb+64>>2]=j,Ne(Mb,j),Mb=c[m>>2]|0,(j|0)==3082|(a[Mb+81>>0]|0)!=0):0)og(Mb);Gc(m)|0;M=857}do if((M|0)==857){j=c[m>>2]|0;Mb=m+136|0;Kb=c[Mb+4>>2]|0;if((Kb|0)>0|(Kb|0)==0&(c[Mb>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;Mb=m+64|0;c[Mb>>2]=0;c[Mb+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}while(0);Vc(m,2)|0}}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](Lb);else{Mb=Wa[c[29352>>2]&127](Lb)|0;c[14978]=(c[14978]|0)-Mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Lb)}if(!i){Mb=j;Ra=Nb;return Mb|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Mb=j;Ra=Nb;return Mb|0}else{Mb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Mb=j;Ra=Nb;return Mb|0}return 0}function Pr(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=b+28|0;g=(c[m>>2]|0)!=0;n=b+16|0;e=n;f=c[e>>2]|0;e=c[e+4>>2]|0;if(g&((f|0)!=0|(e|0)!=0)){l=Sv(f|0,e|0,1,0)|0;o=L()|0;p=n;c[p>>2]=l;c[p+4>>2]=o}o=b+8|0;j=c[o>>2]|0;p=b+4|0;k=c[p>>2]|0;if((j|0)>=(k|0)){c[b>>2]=0;b=0;return b|0}h=c[b>>2]|0;if(g){g=h+j|0;f=a[g>>0]|0;e=f&255;if(e&128){l=d[g+1>>0]|0;e=l<<7|f&127;if(l&128){l=d[g+2>>0]|0;e=l<<14|e&16383;if(l&128){l=d[g+3>>0]|0;e=l<<21|e&2097151;if(!(l&128))f=4;else{e=(a[g+4>>0]&7)<<28|e&268435455;f=5}}else f=3}else f=2}else f=1;j=f+j|0;c[o>>2]=j}else e=0;i=h+j|0;f=a[i>>0]|0;g=f&255;if(g&128){l=d[i+1>>0]|0;f=l<<7|f&127;if(l&128){l=d[i+2>>0]|0;f=l<<14|f&16383;if(l&128){l=d[i+3>>0]|0;f=l<<21|f&2097151;if(!(l&128)){l=f;f=4}else{l=(a[i+4>>0]&7)<<28|f&268435455;f=5}}else{l=f;f=3}}else{l=f;f=2}}else{l=g;f=1}g=f+j|0;c[o>>2]=g;if((e|0)>(g|0)|(l|0)>(k-g|0)){b=267;return b|0}k=l+e|0;i=b+32|0;j=b+24|0;do if((c[i>>2]|0)<(k|0)){f=c[j>>2]|0;if(mb()|0){b=7;return b|0}f=sb(f,(k|0)>0?k:0,0)|0;if(!f){b=7;return b|0}else{c[i>>2]=k;c[j>>2]=f;h=c[b>>2]|0;g=c[o>>2]|0;break}}else f=c[j>>2]|0;while(0);ew(f+e|0,h+g|0,l|0)|0;c[m>>2]=k;i=(c[o>>2]|0)+l|0;c[o>>2]=i;if(!((c[n>>2]|0)==0&(c[n+4>>2]|0)==0)){b=0;return b|0}j=c[b>>2]|0;g=j+i|0;e=a[g>>0]|0;f=e&255;h=b+40|0;do if(f&128){n=d[g+1>>0]|0;f=n<<7|e&127;if(!(n&128)){c[h>>2]=f;e=2;break}n=d[g+2>>0]|0;f=n<<14|f&16383;if(!(n&128)){c[h>>2]=f;e=3;break}n=d[g+3>>0]|0;f=n<<21|f&2097151;if(!(n&128)){c[h>>2]=f;e=4;break}else{f=(a[g+4>>0]&7)<<28|f&268435455;c[h>>2]=f;e=5;break}}else{c[h>>2]=f;e=1}while(0);e=e+i|0;c[o>>2]=e;if(((c[p>>2]|0)-e|0)<(f|0)){b=267;return b|0}c[b+36>>2]=j+e;c[o>>2]=f+e;b=0;return b|0}function Qr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=d+4|0;k=c[m>>2]|0;j=d+8|0;i=c[d>>2]|0;do if((c[j>>2]|0)<(f|0)){if(mb()|0){h=7;return h|0}i=sb(i,(f|0)>0?f:0,0)|0;if(!i){h=7;return h|0}else{c[j>>2]=f;c[d>>2]=i;l=c[m>>2]|0;break}}else l=k;while(0);j=(k|0)==0;a:do if((l|0)>0){d=0;while(1){if((a[i+d>>0]|0)!=(a[e+d>>0]|0)){n=d;break a}d=d+1|0;if((d|0)>=(l|0)){n=d;break}}}else n=0;while(0);o=f-n|0;ew(i|0,e|0,f|0)|0;c[m>>2]=f;if(j){d=b+4|0;m=d;d=c[d>>2]|0}else{m=b+4|0;i=(c[b>>2]|0)+(c[m>>2]|0)|0;d=i;k=n;f=((n|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;d=l-i+(c[m>>2]|0)|0;c[m>>2]=d}i=(c[b>>2]|0)+d|0;d=i;k=o;f=((o|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;d=(c[m>>2]|0)+(l-i)|0;c[m>>2]=d;ew((c[b>>2]|0)+d|0,e+n|0,o|0)|0;d=(c[m>>2]|0)+o|0;c[m>>2]=d;if(!g){h=0;return h|0}i=(c[b>>2]|0)+d|0;d=i;k=h;f=((h|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;e=(c[m>>2]|0)+(l-i)|0;c[m>>2]=e;ew((c[b>>2]|0)+e|0,g|0,h|0)|0;c[m>>2]=(c[m>>2]|0)+h;h=0;return h|0}function Rr(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+64|0;x=z;y=z+48|0;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;v=(a[b>>0]|0)!=0;k=f+8|0;do if((c[k>>2]|0)<(e|0)){j=c[f>>2]|0;if(mb()|0){y=7;Ra=z;return y|0}j=sb(j,(e|0)>0?e:0,0)|0;if(!j){y=7;Ra=z;return y|0}else{c[k>>2]=e;c[f>>2]=j;break}}while(0);w=f+4|0;c[w>>2]=0;o=x+8|0;j=o;k=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[x>>2]=b;c[x+4>>2]=e;do if(!(a[b>>0]|0))j=1;else{m=b+1|0;n=x+16|0;j=a[m>>0]|0;k=j&255;if(!(k&128)){t=n;c[t>>2]=j&255;c[t+4>>2]=0;j=2;break}t=d[b+2>>0]|0;j=t<<7|k&127;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=3;break}t=d[b+3>>0]|0;j=t<<14|j&16383;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=4;break}t=d[b+4>>0]|0;j=t<<21|j&2097151;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=5;break}e=28;l=b+5|0;j=j&268435455;k=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,e|0)|0;j=Sv(s|0,L()|0,j|0,k|0)|0;k=L()|0;e=e+7|0}while(e>>>0<64&((t&128|0)!=0|0!=0));t=n;c[t>>2]=j;c[t+4>>2]=k;j=1-m+l|0}while(0);c[o>>2]=j;j=Pr(x)|0;a:do if((j|0)==0&(c[x>>2]|0)!=0){o=x+24|0;q=x+28|0;r=x+36|0;s=x+40|0;t=x+16|0;while(1){if(!(c[w>>2]|0)){m=c[q>>2]|0;n=Lu(c[o>>2]|0,g,(m|0)<(h|0)?m:h)|0;n=(n|0)==0?m-h|0:n;if(!((n|0)<0|v&(n|0)==0)){k=t;j=c[k>>2]|0;k=c[k+4>>2]|0;a[c[f>>2]>>0]=a[b>>0]|0;if((j|0)==0&(k|0)==0){k=0;e=0;j=1}else{n=(c[f>>2]|0)+1|0;l=n;while(1){e=j&255;m=l+1|0;a[l>>0]=e|-128;j=bw(j|0,k|0,7)|0;k=L()|0;if((j|0)==0&(k|0)==0)break;else l=m}a[l>>0]=e&127;e=t;k=c[e>>2]|0;e=c[e+4>>2]|0;j=1-n+m|0}c[w>>2]=j;u=i;c[u>>2]=k;c[u+4>>2]=e;u=26}}else u=26;if((u|0)==26?(u=0,p=Qr(f,y,c[o>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0,p|0):0)break a;j=Pr(x)|0;if(!((j|0)==0&(c[x>>2]|0)!=0)){p=j;break}}}else p=j;while(0);if(!(c[w>>2]|0)){n=x+16|0;e=n;j=c[e>>2]|0;e=c[e+4>>2]|0;a[c[f>>2]>>0]=a[b>>0]|0;if((j|0)==0&(e|0)==0){k=0;e=0;j=1}else{o=(c[f>>2]|0)+1|0;l=o;while(1){k=j&255;m=l+1|0;a[l>>0]=k|-128;j=bw(j|0,e|0,7)|0;e=L()|0;if((j|0)==0&(e|0)==0)break;else l=m}a[l>>0]=k&127;e=n;k=c[e>>2]|0;e=c[e+4>>2]|0;j=1-o+m|0}c[w>>2]=j;c[i>>2]=k;c[i+4>>2]=e}j=c[x+24>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{x=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);j=c[y>>2]|0;if(!j){y=p;Ra=z;return y|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);y=p;Ra=z;return y|0}else{y=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);y=p;Ra=z;return y|0}return 0}function Sr(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;i=m;j=m+8|0;f=d+252|0;g=d+280|0;a:do if((c[f>>2]|0)>0){e=0;b:while(1){h=Er(d,c[g>>2]|0,e,-1)|0;e=e+1|0;switch(h|0){case 0:case 101:break;default:break b}if((e|0)>=(c[f>>2]|0))break a}Fr(d);l=h;Ra=m;return l|0}while(0);Fr(d);if(!(a[d+233>>0]|0)){l=0;Ra=m;return l|0}k=d+48|0;if((c[k>>2]|0)!=255){l=0;Ra=m;return l|0}if(!(c[d+52>>2]|0)){l=0;Ra=m;return l|0}g=d+144|0;e=c[g>>2]|0;c[j>>2]=e;if(!e){e=c[d+20>>2]|0;c[i>>2]=c[d+16>>2];c[i+4>>2]=e;e=Bb(52411,i)|0;if(!e){l=7;Ra=m;return l|0}f=qd(c[d+12>>2]|0,e,-1,133,0,j,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}e=c[j>>2]|0;c[g>>2]=e;if(f){l=f;Ra=m;return l|0}}h=e;do if(!(Vc(h,1)|0)){f=c[h+100>>2]|0;g=f+8|0;if(!(b[g>>1]&9216)){j=f;c[j>>2]=2;c[j+4>>2]=0;b[g>>1]=4;break}else{Pg(f,2,0);break}}while(0);switch(Gc(h)|0){case 100:{f=Nc(h,0)|0;f=(f|0)==1?8:f;l=22;break}case 101:{f=0;l=22;break}default:{}}if((l|0)==22)c[k>>2]=f;if(!e){l=0;Ra=m;return l|0}e=c[h>>2]|0;l=h+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(e,h);f=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;l=h+64|0;c[l>>2]=0;c[l+4>>2]=0;if((f|0)==3082|(a[e+81>>0]|0)!=0){og(e);l=7;Ra=m;return l|0}else{l=c[e+68>>2]&f;Ra=m;return l|0}return 0}function Tr(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;Aa=Ra;Ra=Ra+176|0;m=Aa+96|0;sa=Aa+164|0;ta=Aa+152|0;ua=Aa+128|0;va=Aa+124|0;xa=Aa+120|0;ya=Aa+116|0;za=Aa+112|0;na=Aa+108|0;oa=Aa+104|0;pa=Aa+100|0;qa=Aa;if((h|0)>6){c[f+20>>2]=1;yc(c[f>>2]|0,55039,-1,1,-1)|0;Ra=Aa;return}j=c[i>>2]|0;if((((b[j+8>>1]&-15393)<<16>>16==-32255?(a[j+11>>0]|0)==112:0)?(Bu(c[j>>2]|0,54938)|0)==0:0)?(ra=c[j+16>>2]|0,ra|0):0){a:do switch(h|0){case 6:{h=c[i+20>>2]|0;j=e[h+8>>1]|0;if(j&4|0){k=c[h>>2]|0;ga=18;break a}if(j&8|0){k=Mg(+g[h>>3])|0;L()|0;ga=18;break a}if(!(j&18)){k=0;ga=18}else{k=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;ga=18}break}case 5:{k=15;ga=18;break}case 4:{l=-1;k=15;ga=24;break}case 3:{m=55028;l=-1;k=15;ga=30;break}case 2:{o=55023;n=55028;l=-1;k=15;ga=36;break}default:{ka=55019;la=55023;ma=55028;fa=-1;q=15;ga=42}}while(0);do if((ga|0)==18){h=c[i+16>>2]|0;j=e[h+8>>1]|0;if(j&4|0){l=c[h>>2]|0;ga=24;break}if(j&8|0){l=Mg(+g[h>>3])|0;L()|0;ga=24;break}if(!(j&18)){l=0;ga=24}else{l=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;ga=24}}while(0);do if((ga|0)==24){h=c[i+12>>2]|0;if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){m=c[h+16>>2]|0;ga=30;break}if(!(j&1)){m=Gg(h,1)|0;ga=30}else{m=0;ga=30}}else{m=0;ga=30}}while(0);do if((ga|0)==30){h=c[i+8>>2]|0;if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){o=c[h+16>>2]|0;n=m;ga=36;break}if(!(j&1)){o=Gg(h,1)|0;n=m;ga=36}else{o=0;n=m;ga=36}}else{o=0;n=m;ga=36}}while(0);do if((ga|0)==36?(p=c[i+4>>2]|0,p|0):0){h=b[p+8>>1]|0;if((h&514)==514?(a[p+10>>0]|0)==1:0){ka=c[p+16>>2]|0;la=o;ma=n;fa=l;q=k;ga=42;break}if(!(h&1)){ka=Gg(p,1)|0;la=o;ma=n;fa=l;q=k;ga=42}}while(0);if((ga|0)==42?(ka|0)!=0&((la|0)!=0&(ma|0)!=0):0){if(!q){if((yc(c[f>>2]|0,59952,-1,1,0)|0)!=18){Ra=Aa;return}c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;Ra=Aa;return}if(ur(f,ra)|0){Ra=Aa;return}ja=c[ra>>2]|0;ea=ra+16|0;b:do if(!(c[ea>>2]|0)){if((yc(c[f>>2]|0,59952,0,1,0)|0)==18){c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0}}else{V=(q|0)>-64?q:-64;V=(V|0)<64?V:64;W=(V|0)>-1;X=ja+24|0;Y=(fa|0)<0;Z=ta+4|0;_=ua+16|0;$=ua+4|0;aa=ua+8|0;ba=ua+12|0;ca=ua+20|0;da=0-V|0;ia=1;h=0;c:while(1){if(W)ha=(ia+-1+V|0)/(ia|0)|0;else ha=da;U=0;k=0;j=0;T=0;l=0;d:while(1){S=qa+(U*24|0)|0;c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;c[S+20>>2]=0;e:do if((c[X>>2]|0)>0){Q=qa+(U*24|0)+4|0;m=qa+(U*24|0)+8|0;R=qa+(U*24|0)+16|0;P=0;O=-1;s=j;f:while(1){g:do if(Y|(P|0)==(fa|0)){c[ua>>2]=0;c[ua+4>>2]=0;c[ua+8>>2]=0;c[ua+12>>2]=0;c[ua+16>>2]=0;c[ua+20>>2]=0;h=Z;c[h>>2]=0;c[h+4>>2]=0;c[ta>>2]=ra;h=c[ea>>2]|0;c[sa>>2]=0;h=Zr(h,sa,92,ta)|0;i=c[Z>>2]|0;do if(!h){h=i*24|0;j=pb(h,0)|0;c[_>>2]=j;if(!j){h=7;break}gw(j|0,0,h|0)|0;c[ua>>2]=ra;c[$>>2]=P;c[aa>>2]=ha;c[ba>>2]=i;c[ca>>2]=-1;h=c[ea>>2]|0;c[sa>>2]=0;h=Zr(h,sa,93,ua)|0;N=(h|0)==0;h:do if(N){if((i|0)>0){o=c[_>>2]|0;n=0;j=s;do{K=(c[o+(n*24|0)+12>>2]|0)==0;J=cw(1,0,n|0)|0;M=L()|0;k=(K?0:J)|k;j=(K?0:M)|j;n=n+1|0}while((n|0)!=(i|0))}else j=s;n=-1;I=0;o=c[ca>>2]|0;J=0;p=0;K=0;M=0;while(1){i:do if((o|0)<0){c[ca>>2]=0;o=c[ba>>2]|0;if((o|0)<=0){s=0;t=0;r=0;q=0;i=0;o=0;break}v=0;while(1){u=c[_>>2]|0;t=u+(v*24|0)+12|0;u=u+(v*24|0)+8|0;s=c[aa>>2]|0;q=c[t>>2]|0;if(q){i=c[u>>2]|0;o=q;j:do if((i|0)<(s|0)){o=q;do{r=a[o>>0]|0;if((r&255)<2){i=-1;o=0;break j}q=r&255;do if(!(q&128))r=1;else{ga=d[o+1>>0]|0;q=ga<<7|r&127;if(!(ga&128)){r=2;break}ga=d[o+2>>0]|0;q=ga<<14|q&16383;if(!(ga&128)){r=3;break}ga=d[o+3>>0]|0;q=ga<<21|q&2097151;if(!(ga&128)){r=4;break}q=(a[o+4>>0]&7)<<28|q&268435455;r=5}while(0);o=o+r|0;i=i+-2+q|0}while((i|0)<(s|0))}while(0);c[u>>2]=i;c[t>>2]=o;o=c[ba>>2]|0}v=v+1|0;if((v|0)>=(o|0)){ga=123;break}}}else{q=c[ba>>2]|0;if((q|0)<=0){t=P;r=I;s=j;q=J;i=K;o=M;break h}r=c[_>>2]|0;o=2147483647;i=0;while(1){if(!(c[r+(i*24|0)+12>>2]|0))x=o;else{x=c[r+(i*24|0)+8>>2]|0;x=(x|0)<(o|0)?x:o}i=i+1|0;if((i|0)==(q|0))break;else o=x}if((x|0)==2147483647){t=P;r=I;s=j;q=J;i=K;o=M;break h}w=x-(c[aa>>2]|0)|0;c[ca>>2]=w+1;i=0;while(1){u=r+(i*24|0)+12|0;v=r+(i*24|0)+8|0;o=c[u>>2]|0;if(o|0){q=c[v>>2]|0;k:do if((q|0)<=(x|0))do{t=a[o>>0]|0;if((t&255)<2){q=-1;o=0;break k}s=t&255;do if(!(s&128))t=1;else{ga=d[o+1>>0]|0;s=ga<<7|t&127;if(!(ga&128)){t=2;break}ga=d[o+2>>0]|0;s=ga<<14|s&16383;if(!(ga&128)){t=3;break}ga=d[o+3>>0]|0;s=ga<<21|s&2097151;if(!(ga&128)){t=4;break}s=(a[o+4>>0]&7)<<28|s&268435455;t=5}while(0);o=o+t|0;q=q+-2+s|0}while((q|0)<=(x|0));while(0);c[v>>2]=q;c[u>>2]=o}u=r+(i*24|0)+20|0;t=r+(i*24|0)+16|0;o=c[u>>2]|0;if(o|0){q=c[t>>2]|0;l:do if((q|0)<=(w|0))do{s=a[o>>0]|0;if((s&255)<2){q=-1;o=0;break l}r=s&255;do if(!(r&128))s=1;else{ga=d[o+1>>0]|0;r=ga<<7|s&127;if(!(ga&128)){s=2;break}ga=d[o+2>>0]|0;r=ga<<14|r&16383;if(!(ga&128)){s=3;break}ga=d[o+3>>0]|0;r=ga<<21|r&2097151;if(!(ga&128)){s=4;break}r=(a[o+4>>0]&7)<<28|r&268435455;s=5}while(0);o=o+s|0;q=q+-2+r|0}while((q|0)<=(w|0));while(0);c[t>>2]=q;c[u>>2]=o}i=i+1|0;o=c[ba>>2]|0;if((i|0)>=(o|0)){ga=123;break i}r=c[_>>2]|0}}while(0);do if((ga|0)==123){ga=0;H=c[ca>>2]|0;if((o|0)<=0){s=0;t=0;r=0;q=0;i=0;o=H;break}F=c[_>>2]|0;G=(c[aa>>2]|0)+H|0;s=0;E=0;t=0;r=0;q=0;i=0;while(1){v=c[F+(E*24|0)+20>>2]|0;m:do if(v){u=c[F+(E*24|0)+16>>2]|0;if((u|0)<(H|0)|(u|0)>=(G|0))break;C=cw(1,0,E|0)|0;D=L()|0;B=c[F+(E*24|0)>>2]|0;if((B|0)<=0){x=v;while(1){s=(((t|T)&C|0)==0&((r|l)&D|0)==0?1e3:1)+s|0;t=t|C;r=r|D;w=a[x>>0]|0;if((w&255)<2)break m;v=w&255;do if(!(v&128))w=1;else{B=d[x+1>>0]|0;v=B<<7|w&127;if(!(B&128)){w=2;break}B=d[x+2>>0]|0;v=B<<14|v&16383;if(!(B&128)){w=3;break}B=d[x+3>>0]|0;v=B<<21|v&2097151;if(!(B&128)){w=4;break}v=(a[x+4>>0]&7)<<28|v&268435455;w=5}while(0);u=u+-2+v|0;if((u|0)<(H|0)|(u|0)>=(G|0))break m;else x=x+w|0}}A=v;while(1){w=cw(1,0,u-H|0)|0;x=L()|0;y=(t|T)&C;z=(r|l)&D;v=0;do{Ba=bw(w|0,x|0,v|0)|0;q=Ba|q;i=L()|0|i;v=v+1|0}while((v|0)!=(B|0));s=((y|0)==0&(z|0)==0?1e3:1)+s|0;t=t|C;r=r|D;w=a[A>>0]|0;if((w&255)<2)break m;v=w&255;do if(!(v&128))w=1;else{Ba=d[A+1>>0]|0;v=Ba<<7|w&127;if(!(Ba&128)){w=2;break}Ba=d[A+2>>0]|0;v=Ba<<14|v&16383;if(!(Ba&128)){w=3;break}Ba=d[A+3>>0]|0;v=Ba<<21|v&2097151;if(!(Ba&128)){w=4;break}v=(a[A+4>>0]&7)<<28|v&268435455;w=5}while(0);u=u+-2+v|0;if((u|0)<(H|0)|(u|0)>=(G|0))break;else A=A+w|0}}while(0);E=E+1|0;if((E|0)==(o|0)){o=H;break}}}while(0);Ba=(s|0)>(n|0);n=Ba?s:n;I=Ba?o:I;J=Ba?t:J;p=Ba?r:p;K=Ba?q:K;M=Ba?i:M}}else{n=0;t=0;r=0;q=0;p=0;i=0;o=0}while(0);j=c[_>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{Ba=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);if(!N){j=11;n=O;o=s;break g}if((n|0)<=(O|0)){j=0;n=O;h=0;o=s;break g}c[S>>2]=t;c[Q>>2]=r;j=m;c[j>>2]=q;c[j+4>>2]=p;j=R;c[j>>2]=i;c[j+4>>2]=o;j=0;h=0;o=s;break g}while(0);j=11;n=O;o=s}else{j=10;n=O;o=s}while(0);switch(j&15){case 10:case 0:break;default:break f}P=P+1|0;if((P|0)>=(c[X>>2]|0)){j=o;ga=158;break e}else{O=n;s=o}}if(!j){m=T;j=o}else break d}else{m=qa+(U*24|0)+8|0;ga=158}while(0);if((ga|0)==158){ga=0;Ba=m;m=c[Ba>>2]|T;l=c[Ba+4>>2]|l}U=U+1|0;if(U>>>0>=ia>>>0){ga=161;break}else T=m}if((ga|0)==161){ga=0;j=(ia|0)==4|(k|0)==(m|0)&(j|0)==(l|0)?2:0}switch(j|0){case 2:{ga=164;break c}case 11:{m=0;break c}case 0:break;default:break b}ia=ia+1|0}n:do if((ga|0)==164)if(!h){F=ia+-1|0;G=ra+12|0;H=ra+20|0;I=ha+-1|0;E=0;m=0;k=0;s=0;while(1){B=(E|0)==(F|0);i=c[qa+(E*24|0)>>2]|0;p=c[qa+(E*24|0)+4>>2]|0;r=qa+(E*24|0)+16|0;q=c[r>>2]|0;r=c[r+4>>2]|0;o=c[ra>>2]|0;c[ya>>2]=0;i=i+1|0;n=c[G>>2]|0;l=(n|0)==0;do if(l)h=29576;else{h=c[n+120>>2]|0;if(h|0?i>>>0<(e[n+144>>1]|0)>>>0:0){h=h+(i*40|0)|0;break}h=c[n>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0)A=c[h+16>>2]|0;else if(!(j&1))A=Gg(h,1)|0;else A=0;if(!l){j=c[n>>2]|0;l=n+40|0;h=c[l>>2]|0;if((h|0)==3082|(a[j+81>>0]|0)!=0){og(j);h=7}else h=c[j+68>>2]&h;c[l>>2]=h}n=c[G>>2]|0;if(!A){if(!n)h=1;else{h=c[n+120>>2]|0;do if(!h)ga=186;else{if(i>>>0>=(e[n+144>>1]|0)>>>0){ga=186;break}h=h+(i*40|0)|0;j=n}while(0);if((ga|0)==186){ga=0;h=c[n>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576;j=n}h=b[h+8>>1]&31;l=c[j>>2]|0;n=n+40|0;j=c[n>>2]|0;if((j|0)==3082|(a[l+81>>0]|0)!=0){og(l);j=7}else j=c[l+68>>2]&j;c[n>>2]=j}h=(-1431655766>>>h&1|0)==0?7:0;j=s}else{z=Lc(n,i)|0;y=o+36|0;j=c[y>>2]|0;D=c[j>>2]|0;l=c[H>>2]|0;c[sa>>2]=0;h=Za[c[D+12>>2]&127](j,A,z,sa)|0;if(h|0)break;c[c[sa>>2]>>2]=j;if((c[D>>2]|0)>0?(wa=Xa[c[D+24>>2]&255](c[sa>>2]|0,l)|0,wa|0):0){ga=195;break}C=c[sa>>2]|0;w=D+20|0;x=(E|0)!=0;t=p;v=0;o=0;j=s;s=q;o:while(1){c[na>>2]=-1;c[oa>>2]=0;c[pa>>2]=0;h=$a[c[w>>2]&127](C,za,na,oa,pa,ya)|0;switch(h|0){case 101:{ga=199;break o}case 0:break;default:{ga=274;break o}}h=c[ya>>2]|0;p:do if((h|0)<(t|0)){p=v;i=t;h=0;n=s;l=r}else{if(!o){o=c[oa>>2]|0;n=z-o|0;i=c[H>>2]|0;o=A+o|0;q:do if((s|0)==0&(r|0)==0){i=t;q=0;r=0}else{h=0;while(1){Ba=cw(1,0,h|0)|0;if((Ba&s|0)==0&((L()|0)&r|0)==0)h=h+1|0;else break}l=0;while(1){Ba=cw(1,0,I-l|0)|0;if((Ba&s|0)==0&((L()|0)&r|0)==0)l=l+1|0;else break}Ba=h-l|0;p=(Ba|0)/2|0;if((Ba|0)<=1){i=t;q=s;break}c[ta>>2]=0;l=c[y>>2]|0;q=c[l>>2]|0;c[sa>>2]=0;h=Za[c[q+12>>2]&127](l,o,n,sa)|0;r:do if(!h){c[c[sa>>2]>>2]=l;do if((c[q>>2]|0)>0){h=Xa[c[q+24>>2]&255](c[sa>>2]|0,i)|0;if(!h)break;Wa[c[q+16>>2]&127](c[sa>>2]|0)|0;c[sa>>2]=0;ga=216;break r}while(0);o=c[sa>>2]|0;l=p+ha|0;n=q+20|0;while(1){if((c[ta>>2]|0)>=(l|0)){ga=219;break}c[ua>>2]=0;c[va>>2]=0;c[xa>>2]=0;h=$a[c[n>>2]&127](o,sa,ua,va,xa,ta)|0;if(h|0){ga=221;break}}if((ga|0)==219){ga=0;Wa[c[q+16>>2]&127](o)|0;h=0}else if((ga|0)==221){ga=0;Wa[c[q+16>>2]&127](o)|0;if((h|0)==101)h=1;else break}i=h-ha+(c[ta>>2]|0)|0;Ba=(i|0)>0;q=bw(s|0,r|0,(Ba?i:0)|0)|0;r=L()|0;i=(Ba?i:0)+t|0;break q}else ga=216;while(0);if((ga|0)==216)ga=0;p=v;o=1;i=t;n=s;l=r;break p}while(0);do if(x|(i|0)>0){n=Eu(ma)|0;if((k+1+n|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){p=v;o=1;h=7;n=q;l=r;break p}h=sb(m,l,h)|0;if(!h){p=v;o=1;h=7;n=q;l=r;break p}m=h;j=l}ew(m+k|0,ma|0,n|0)|0;k=n+k|0;h=m+k|0;ga=238}else{h=c[oa>>2]|0;if(!h)break;if((h|0)<0)h=Eu(A)|0;if((k+1+h|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){p=v;o=1;h=7;n=q;l=r;break p}l=sb(m,n,l)|0;if(!l){p=v;o=1;h=7;n=q;l=r;break p}m=l;j=n}ew(m+k|0,A|0,h|0)|0;k=h+k|0;h=m+k|0;ga=238}while(0);if((ga|0)==238){ga=0;a[h>>0]=0}h=c[ya>>2]|0;if((h|0)<(i|0)){p=v;o=1;h=0;n=q;l=r;break}else{u=1;t=i}}else{u=o;q=s}if((h|0)>=(t+ha|0)){ga=241;break o}p=cw(1,0,h-t|0)|0;p=(p&q|0)!=0|((L()|0)&r|0)!=0;do if((h|0)>(t|0)){o=A+v|0;h=(c[oa>>2]|0)-v|0;if((h|0)<0)h=Eu(o)|0;if((k+1+h|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){h=7;break}l=sb(m,n,l)|0;if(!l){h=7;break}m=l;j=n}ew(m+k|0,o|0,h|0)|0;k=h+k|0;a[m+k>>0]=0;ga=255}else ga=255;while(0);do if((ga|0)==255){ga=0;if(p){n=Eu(ka)|0;o=n+k|0;if((o+1|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;break}h=sb(m,l,h)|0;if(!h){h=7;break}m=h;j=l}ew(m+k|0,ka|0,n|0)|0;a[m+o>>0]=0;k=o}h=c[oa>>2]|0;o=A+h|0;h=(c[pa>>2]|0)-h|0;if((h|0)<0)h=Eu(o)|0;i=h+k|0;if((i+1|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){h=7;break}l=sb(m,n,l)|0;if(!l){h=7;break}m=l;j=n}ew(m+k|0,o|0,h|0)|0;h=m+i|0;a[h>>0]=0;if(!p){h=0;k=i;break}o=Eu(la)|0;k=o+i|0;if((k+1|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;k=i;break}l=sb(m,n,h)|0;if(!l){h=7;k=i;break}h=l+i|0;m=l;j=n}ew(h|0,la|0,o|0)|0;a[m+k>>0]=0;h=0}while(0);p=c[pa>>2]|0;o=u;i=t;n=q;l=r}while(0);if(!h){t=i;v=p;s=n;r=l}else break}do if((ga|0)==199){n=A+v|0;o=Eu(n)|0;if((k+1+o|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;ga=274;break}h=sb(m,l,h)|0;if(!h){h=7;ga=274;break}m=h;j=l}ew(m+k|0,n|0,o|0)|0;k=o+k|0;a[m+k>>0]=0;h=0;ga=274}else if((ga|0)==241){if(!B){h=0;ga=274;break}n=Eu(ma)|0;if((k+1+n|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;ga=274;break}h=sb(m,l,h)|0;if(!h){h=7;ga=274;break}m=h;j=l}ew(m+k|0,ma|0,n|0)|0;k=n+k|0;a[m+k>>0]=0;h=0;ga=274}while(0);if((ga|0)==274)ga=0;Wa[c[D+16>>2]&127](C)|0}E=E+1|0;if(!(E>>>0<ia>>>0&(h|0)==0))break n;else s=j}if((ga|0)==195){Wa[c[D+16>>2]&127](c[sa>>2]|0)|0;c[sa>>2]=0;h=wa}}else m=0;while(0);j=ja+248|0;k=c[j>>2]|0;do if(k|0){l=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Ba=k;if((c[l+304>>2]|0)>>>0<=Ba>>>0?(c[l+308>>2]|0)>>>0>Ba>>>0:0){Ba=l+300|0;c[k>>2]=c[Ba>>2];c[Ba>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Ba=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[j>>2]=0;if(!h){if((yc(c[f>>2]|0,m,-1,1,90)|0)!=18)break;c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;break}c[f+20>>2]=h;j=c[f>>2]|0;if(b[j+8>>1]&1){switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(j,h,-1,1,0)|0}if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Ba=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);Ra=Aa;return}h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(h);h=c[f>>2]|0}c[f+20>>2]=7;h=c[h+32>>2]|0;j=h+81|0;if(a[j>>0]|0){Ra=Aa;return}if(a[h+82>>0]|0){Ra=Aa;return}a[j>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;Ba=h+272|0;c[Ba>>2]=(c[Ba>>2]|0)+1;h=c[h+236>>2]|0;if(!h){Ra=Aa;return}c[h+12>>2]=7;Ra=Aa;return}c[m>>2]=51022;h=Bb(55087,m)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(!h){Ra=Aa;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);Ra=Aa;return}else{Ba=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);Ra=Aa;return}}function Ur(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=Ra;Ra=Ra+160|0;M=R+104|0;i=R+96|0;E=R;F=R+136|0;O=R+64|0;G=R+132|0;I=R+128|0;J=R+124|0;K=R+120|0;g=c[h>>2]|0;if((((b[g+8>>1]&-15393)<<16>>16==-32255?(a[g+11>>0]|0)==112:0)?(Bu(c[g>>2]|0,54938)|0)==0:0)?(j=c[g+16>>2]|0,j|0):0){if(ur(f,j)|0){Ra=R;return}P=c[j>>2]|0;C=P+36|0;h=c[c[C>>2]>>2]|0;D=j+16|0;g=c[D>>2]|0;do if(!g){if((yc(c[f>>2]|0,59952,0,1,0)|0)==18){c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0}}else{c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[O+24>>2]=0;c[O+28>>2]=0;k=F+4|0;c[k>>2]=0;c[k+4>>2]=0;c[F>>2]=j;c[E>>2]=0;k=Zr(g,E,92,F)|0;B=c[F+8>>2]|0;a:do if(!k){A=pb(B*12|0,0)|0;H=O+24|0;c[H>>2]=A;if(A){z=j+32|0;A=c[z+4>>2]|0;x=O+16|0;c[x>>2]=c[z>>2];c[x+4>>2]=A;c[O>>2]=j;x=P+24|0;if((c[x>>2]|0)>0){y=O+4|0;z=O+8|0;A=j+12|0;t=j+20|0;u=h+20|0;v=(B|0)>0;w=P+40|0;s=h+16|0;r=0;h=0;j=0;n=0;b:while(1){c[G>>2]=0;c[I>>2]=0;c[J>>2]=0;c[K>>2]=0;c[y>>2]=r;c[z>>2]=0;l=c[D>>2]|0;c[E>>2]=0;Zr(l,E,94,O)|0;l=c[A>>2]|0;q=r;r=r+1|0;k=(l|0)==0;do if(k)g=29576;else{g=c[l+120>>2]|0;if(g|0?r>>>0<(e[l+144>>1]|0)>>>0:0){g=g+(r*40|0)|0;break}g=c[l>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0)m=c[g+16>>2]|0;else if(!(i&1))m=Gg(g,1)|0;else m=0;if(!k){i=c[l>>2]|0;k=l+40|0;g=c[k>>2]|0;if((g|0)==3082|(a[i+81>>0]|0)!=0){og(i);g=7}else g=c[i+68>>2]&g;c[k>>2]=g}g=Lc(c[A>>2]|0,r)|0;if(!m){l=c[A>>2]|0;if(!l)g=1;else{g=c[l+120>>2]|0;do if(!g)Q=38;else{if(r>>>0>=(e[l+144>>1]|0)>>>0){Q=38;break}g=g+(r*40|0)|0;i=l}while(0);if((Q|0)==38){Q=0;g=c[l>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;i=l}g=b[g+8>>1]&31;k=c[i>>2]|0;l=l+40|0;i=c[l>>2]|0;if((i|0)==3082|(a[k+81>>0]|0)!=0){og(k);i=7}else i=c[k+68>>2]&i;c[l>>2]=i}if(!(-1431655766>>>g&1)){k=7;g=H;Q=83;break a}else g=n}else{i=c[C>>2]|0;k=c[t>>2]|0;l=c[i>>2]|0;c[E>>2]=0;g=Za[c[l+12>>2]&127](i,m,g,E)|0;if(g|0){Q=47;break}c[c[E>>2]>>2]=i;if((c[l>>2]|0)>0?(N=Xa[c[l+24>>2]&255](c[E>>2]|0,k)|0,N|0):0){Q=46;break}p=c[E>>2]|0;g=$a[c[u>>2]&127](p,F,G,I,J,K)|0;i=n;c:while(1){d:while(1){switch(g|0){case 101:break c;case 0:break;default:{Q=79;break b}}do if(v){n=c[H>>2]|0;k=0;l=2147483647;m=0;while(1){g=n+(m*12|0)|0;if(!(c[g>>2]|0))o=k;else{S=(c[n+(m*12|0)+4>>2]|0)-(c[n+(m*12|0)+8>>2]|0)|0;T=(S|0)<(l|0);o=T?g:k;l=T?S:l}m=m+1|0;if((m|0)==(B|0))break;else k=o}if(!o){g=101;break}m=c[o>>2]|0;k=a[m>>0]|0;if((k&255)<2)c[o>>2]=0;else{n=o+4|0;g=k&255;do if(!(g&128))k=1;else{T=d[m+1>>0]|0;g=T<<7|k&127;if(!(T&128)){k=2;break}T=d[m+2>>0]|0;g=T<<14|g&16383;if(!(T&128)){k=3;break}T=d[m+3>>0]|0;g=T<<21|g&2097151;if(!(T&128)){k=4;break}g=(a[m+4>>0]&7)<<28|g&268435455;k=5}while(0);c[o>>2]=m+k;c[n>>2]=g+-2+(c[n>>2]|0)}if((c[K>>2]|0)>=(l|0))break d;do{g=$a[c[u>>2]&127](p,F,G,I,J,K)|0;k=(g|0)==0}while(k&(c[K>>2]|0)<(l|0));if(k)break d;if((g|0)!=101)break;g=(c[w>>2]|0)==0?267:101}else g=101;while(0)}T=(o-(c[H>>2]|0)|0)/12|0;m=c[I>>2]|0;l=(c[J>>2]|0)-m|0;c[M>>2]=q;c[M+4>>2]=T;c[M+8>>2]=m;c[M+12>>2]=l;Cb(64,E,55116,M)|0;l=Eu(E)|0;m=l+j|0;do if((m+1|0)<(i|0))Q=73;else{k=Sv(i|0,((i|0)<0)<<31>>31|0,100,0)|0;k=Sv(k|0,L()|0,l|0,((l|0)<0)<<31>>31|0)|0;g=L()|0;if(mb()|0){g=7;break}g=sb(h,k,g)|0;if(!g){g=7;break}h=g;i=k;Q=73}while(0);if((Q|0)==73){Q=0;ew(h+j|0,E|0,l|0)|0;a[h+m>>0]=0;g=0;j=m}}Wa[c[s>>2]&127](p)|0;g=i}if((r|0)>=(c[x>>2]|0)){k=0;g=H;Q=83;break a}else n=g}if((Q|0)==46){Wa[c[l+16>>2]&127](c[E>>2]|0)|0;c[E>>2]=0;g=N;Q=47}else if((Q|0)==79)Wa[c[s>>2]&127](p)|0;k=g;g=H;Q=83}else{k=0;g=H;h=0;j=0;Q=83}}else{k=7;l=0;j=0}}else{g=O+24|0;h=0;j=0;Q=83}while(0);do if((Q|0)==83){g=c[g>>2]|0;if(g)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);l=h;break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);l=h;break}else l=h}while(0);g=P+248|0;h=c[g>>2]|0;do if(h|0){i=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,h);break}T=h;if((c[i+304>>2]|0)>>>0<=T>>>0?(c[i+308>>2]|0)>>>0>T>>>0:0){T=i+300|0;c[h>>2]=c[T>>2];c[T>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{T=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[g>>2]=0;if(!k){if((yc(c[f>>2]|0,l,j+-1|0,1,90)|0)!=18)break;c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;break}c[f+20>>2]=k;h=c[f>>2]|0;if(b[h+8>>1]&1){switch(k|0){case 516:{g=50738;break}case 100:{g=50760;break}case 101:{g=50782;break}default:{g=k&255;if(g>>>0<29?(520028155>>>g&1|0)!=0:0)g=c[22960+(g<<2)>>2]|0;else g=50724}}yc(h,g,-1,1,0)|0}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{T=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);Ra=R;return}c[i>>2]=51030;g=Bb(55087,i)|0;c[f+20>>2]=1;yc(c[f>>2]|0,g,-1,1,-1)|0;if(!g){Ra=R;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=R;return}else{T=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=R;return}}function Vr(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;g=i;e=c[f>>2]|0;if((((b[e+8>>1]&-15393)<<16>>16==-32255?(a[e+11>>0]|0)==112:0)?(Bu(c[e>>2]|0,54938)|0)==0:0)?(h=c[e+16>>2]|0,h|0):0){g=c[h>>2]|0;f=g+12|0;e=nd(c[f>>2]|0,55167,0,0,0)|0;a:do if(!e){e=Dr(g,1)|0;switch(e|0){case 0:case 101:{h=nd(c[f>>2]|0,55182,0,0,0)|0;e=(h|0)==0?e:h;break a}default:{nd(c[f>>2]|0,55195,0,0,0)|0;nd(c[f>>2]|0,55182,0,0,0)|0;break a}}}while(0);f=g+248|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}j=g;if((c[h+304>>2]|0)>>>0<=j>>>0?(c[h+308>>2]|0)>>>0>j>>>0:0){j=h+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,55129,-1,1,0)|0)!=18){Ra=i;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=i;return}case 101:{if((yc(c[d>>2]|0,55145,-1,1,0)|0)!=18){Ra=i;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=i;return}default:{c[d+20>>2]=(e|0)==0?-1:e;f=c[d>>2]|0;if(!(b[f+8>>1]&1)){Ra=i;return}switch(e|0){case 516:{e=50738;break}case 100:{e=50760;break}default:{e=e&255;if(e>>>0<29?(520028155>>>e&1|0)!=0:0)e=c[22960+(e<<2)>>2]|0;else e=50724}}yc(f,e,-1,1,0)|0;Ra=i;return}}}c[g>>2]=37598;e=Bb(55087,g)|0;c[d+20>>2]=1;yc(c[d>>2]|0,e,-1,1,-1)|0;if(!e){Ra=i;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);Ra=i;return}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);Ra=i;return}}function Wr(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;$=Ra;Ra=Ra+80|0;X=$+48|0;o=$+40|0;i=$+32|0;Y=$+76|0;U=$+64|0;V=$+60|0;Z=$+56|0;W=$;h=c[g>>2]|0;if((((b[h+8>>1]&-15393)<<16>>16==-32255?(a[h+11>>0]|0)==112:0)?(Bu(c[h>>2]|0,54938)|0)==0:0)?(T=c[h+16>>2]|0,T|0):0){do if((f|0)>1?(j=c[g+4>>2]|0,(j|0)!=0):0){f=b[j+8>>1]|0;if((f&514)==514?(a[j+10>>0]|0)==1:0){f=c[j+16>>2]|0;break}if(!(f&1))f=Gg(j,1)|0;else f=0}else f=0;while(0);_=c[T>>2]|0;O=(f|0)==0?55212:f;P=T+16|0;f=c[P>>2]|0;if(!f){if((yc(c[e>>2]|0,59952,0,0,0)|0)!=18){Ra=$;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=$;return}Q=W+8|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[W>>2]=T;R=W+4|0;c[R>>2]=c[_+24>>2];S=T+92|0;g=c[S>>2]|0;if(g)if(!(Bu(c[g+12>>2]|0,O)|0)){j=0;u=47}else{a[g>>0]=0;do if((a[g+1>>0]|0)==0?(a[g+2>>0]|0)==0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{N=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-N;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[S>>2]=0;f=c[P>>2]|0;u=27}else u=27;a:do if((u|0)==27){c[U>>2]=0;c[Y>>2]=0;Zr(f,Y,95,U)|0;g=c[U>>2]|0;c[T+24>>2]=g;c[Q>>2]=g;f=a[O>>0]|0;b:do if(!(f<<24>>24))f=0;else{j=_+232|0;k=_+234|0;l=c[R>>2]|0;m=G(l,g)|0;n=m*3|0;i=G((l+31|0)/32|0,g)|0;h=0;g=0;c:while(1){c[Y>>2]=0;switch(f<<24>>24){case 98:case 121:case 120:case 115:case 99:case 112:break;case 110:{if(!(a[j>>0]|0)){f=110;break c}break}case 97:{if(!(a[j>>0]|0)){f=97;break c}break}case 108:{if(!(a[k>>0]|0)){f=108;break c}break}default:break c}switch(f<<24>>24|0){case 99:case 112:case 110:{f=1;break}case 115:case 108:case 97:{f=l;break}case 121:{f=m;break}case 98:{f=i;break}default:f=n}g=f+g|0;h=h+1|0;f=a[O+h>>0]|0;if(!(f<<24>>24)){f=g;break b}}c[o>>2]=f<<24>>24;Wp(Y,55216,o);f=c[Y>>2]|0;c[e+20>>2]=1;yc(c[e>>2]|0,f,-1,1,-1)|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);break a}while(0);g=cw(f|0,0,3)|0;i=L()|0;g=g|4;h=Eu(O)|0;N=Sv(h|0,0,21,0)|0;i=Sv(N|0,L()|0,g|0,i|0)|0;i=pb(i,L()|0)|0;if(!i){c[S>>2]=0;c[T+88>>2]=1;i=0;f=7;h=0;u=303;break}else{j=g+20|0;gw(i|0,0,j|0)|0;u=i+16|0;c[u>>2]=20;g=f+1|0;c[u+(g<<2)>>2]=(g<<2)+20;c[i+4>>2]=f;j=i+j|0;c[i+12>>2]=j;ew(j|0,O|0,h+1|0)|0;a[i>>0]=1;c[S>>2]=i;c[T+88>>2]=1;j=1;g=i;u=47;break}}while(0);d:do if((u|0)==47){f=g+1|0;do if(a[f>>0]|0){f=g+2|0;if(!(a[f>>0]|0)){a[f>>0]=1;N=g+16+((c[g+4>>2]|0)+2<<2)|0;i=98;break}f=g+4|0;h=pb(c[f>>2]<<2,0)|0;if(!h){i=0;f=7;h=0;u=303;break d}if(!(c[g+8>>2]|0)){N=h;i=90}else{ew(h|0,g+20|0,c[f>>2]<<2|0)|0;N=h;i=90}}else{a[f>>0]=1;N=g+20|0;i=98}while(0);h=N;F=W+28|0;c[F>>2]=h;H=T+24|0;c[Q>>2]=c[H>>2];c[V>>2]=0;I=c[T>>2]|0;c[Z>>2]=0;J=W+24|0;K=U+4|0;M=(j|0)==0;x=T+32|0;y=I+140|0;z=U+4|0;A=I+16|0;B=I+20|0;C=T+28|0;D=I+12|0;E=W+16|0;w=0;g=N;while(1){v=O+w|0;f=a[v>>0]|0;if(!(f<<24>>24)){f=0;break}a[J>>0]=f;e:do switch(f<<24>>24|0){case 112:{if(M)f=0;else{c[g>>2]=c[Q>>2];f=0}break}case 99:{if(M)f=0;else{c[g>>2]=c[R>>2];f=0}break}case 110:{if(M)f=0;else{f=c[Z>>2]|0;if(!f){f=lr(I,Z)|0;if(!f){f=c[Z>>2]|0;if(!f){k=mc(29576)|0;u=74}else u=65}else j=0}else u=65;if((u|0)==65){g=c[f+120>>2]|0;if((g|0)!=0?(b[f+144>>1]|0)!=0:0)j=f;else{g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;u=74}if((u|0)==74){u=0;f=a[k>>0]|0;g=f&255;do if(!(g&128)){f=f&255;g=0}else{t=d[k+1>>0]|0;f=t<<7|g&127;if(!(t&128)){g=0;break}t=d[k+2>>0]|0;f=t<<14|f&16383;if(!(t&128)){g=0;break}t=d[k+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){g=0;break}l=28;j=k+4|0;f=f&268435455;g=0;while(1){t=d[j>>0]|0;s=cw(t&127|0,0,l|0)|0;f=Sv(s|0,L()|0,f|0,g|0)|0;g=L()|0;l=l+7|0;if(!(l>>>0<64&((t&128|0)!=0|0!=0)))break;else j=j+1|0}}while(0);j=f;f=(f|0)==0&(g|0)==0?267:0}c[V>>2]=f;c[c[F>>2]>>2]=j}break}case 97:{if(M)f=0;else{f=c[Z>>2]|0;if(!f){f=lr(I,Z)|0;if(!f){f=c[Z>>2]|0;if(!f){l=mc(29576)|0;u=99}else u=90}}else u=90;if((u|0)==90){g=c[f+120>>2]|0;if((g|0)!=0?(b[f+144>>1]|0)!=0:0)j=f;else{g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;l=k;u=99}if((u|0)==99){u=0;g=a[l>>0]|0;f=g&255;do if(!(f&128)){j=1;f=g&255;g=0}else{t=d[l+1>>0]|0;f=t<<7|f&127;if(!(t&128)){j=2;g=0;break}t=d[l+2>>0]|0;f=t<<14|f&16383;if(!(t&128)){j=3;g=0;break}t=d[l+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){j=4;g=0;break}j=28;k=l+4|0;f=f&268435455;g=0;do{t=k;k=k+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,j|0)|0;f=Sv(s|0,L()|0,f|0,g|0)|0;g=L()|0;j=j+7|0}while(j>>>0<64&((t&128|0)!=0|0!=0));j=k-l|0}while(0);if((f|0)==0&(g|0)==0)f=267;else{c[V>>2]=0;if((c[R>>2]|0)<=0){f=0;break e}o=bw(f|0,0,1)|0;p=L()|0;n=0;m=l+j|0;while(1){j=a[m>>0]|0;g=j&255;do if(!(g&128)){k=1;g=j&255}else{t=d[m+1>>0]|0;g=t<<7|g&127;if(!(t&128)){k=2;break}t=d[m+2>>0]|0;g=t<<14|g&16383;if(!(t&128)){k=3;break}t=d[m+3>>0]|0;g=t<<21|g&2097151;if(!(t&128)){k=4;break}k=28;l=m+4|0;g=g&268435455;j=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;g=Sv(s|0,L()|0,g|0,j|0)|0;j=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));k=l-m|0}while(0);t=Sv(g|0,0,o|0,p|0)|0;t=_v(t|0,L()|0,f|0,0)|0;L()|0;c[(c[F>>2]|0)+(n<<2)>>2]=t;n=n+1|0;if((n|0)>=(c[R>>2]|0)){f=0;break e}else m=m+k|0}}}c[V>>2]=f}break}case 108:{l=x;k=c[l>>2]|0;l=c[l+4>>2]|0;u=c[y>>2]|0;c[Y>>2]=u;g=u;do if(!u){j=c[B>>2]|0;c[X>>2]=c[A>>2];c[X+4>>2]=j;j=Bb(52364,X)|0;if(!j){f=7;u=156;break}f=qd(c[D>>2]|0,j,-1,133,0,Y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{u=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}g=c[Y>>2]|0;c[y>>2]=g;if(!f)u=134;else u=156}else u=134;while(0);f:do if((u|0)==134){u=0;o=g;do if(!(Vc(o,1)|0)){f=c[o+100>>2]|0;j=f+8|0;if(!(b[j>>1]&9216)){t=f;c[t>>2]=k;c[t+4>>2]=l;b[j>>1]=4;break}else{Pg(f,k,l);break}}while(0);f=(g|0)==0;do if((Gc(o)|0)==100){if(!f){m=o+120|0;f=c[m>>2]|0;do if(!f)u=143;else{if(!(b[o+144>>1]|0)){u=143;break}j=f;f=o}while(0);if((u|0)==143){u=0;j=c[o>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;f=o}l=b[j+8>>1]&15;j=c[f>>2]|0;n=o+40|0;k=c[n>>2]|0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&k;c[n>>2]=j;if((l|16)<<16>>16!=16){u=150;break}c[V>>2]=0;f=c[m>>2]|0;do if(!f)u=160;else{if(!(b[o+144>>1]|0)){u=160;break}j=o}while(0);if((u|0)==160){u=0;f=c[o>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576;j=o}k=mc(f)|0;f=c[j>>2]|0;j=c[n>>2]|0;if((j|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&j;c[n>>2]=f;if((c[R>>2]|0)<=0){k=o;g=o;f=0;break f}m=k;n=0;while(1){f=d[m>>0]|0;do if(!(f&128))j=1;else{u=d[m+1>>0]|0;f=u<<7|f&127;if(!(u&128)){j=2;break}u=d[m+2>>0]|0;f=u<<14|f&16383;if(!(u&128)){j=3;break}u=d[m+3>>0]|0;f=u<<21|f&2097151;if(!(u&128)){j=4;break}k=28;l=m+4|0;f=f&268435455;j=0;do{u=l;l=l+1|0;u=d[u>>0]|0;t=cw(u&127|0,0,k|0)|0;f=Sv(t|0,L()|0,f|0,j|0)|0;j=L()|0;k=k+7|0}while(k>>>0<64&((u&128|0)!=0|0!=0));j=l-m|0}while(0);c[(c[F>>2]|0)+(n<<2)>>2]=f;n=n+1|0;if((n|0)>=(c[R>>2]|0)){j=o;f=0;u=174;break f}else m=m+j|0}}}else if(!f){f=o;u=150}while(0);do if((u|0)==150){f=c[f>>2]|0;u=o+136|0;t=c[u+4>>2]|0;if((t|0)>0|(t|0)==0&(c[u>>2]|0)>>>0>0)hc(f,o);g=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;u=o+64|0;c[u>>2]=0;c[u+4>>2]=0;if(!((g|0)==3082|(a[f+81>>0]|0)!=0)){f=c[f+68>>2]&g;if(!f)break;else{g=0;u=156;break f}}else{og(f);f=7;g=0;u=156;break f}}while(0);f=267;g=0;u=156}while(0);if((u|0)==156){c[V>>2]=f;j=g;u=174}if((u|0)==174){u=0;if(!g)break e;k=j;g=j}g=c[g>>2]|0;t=k+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(g,k);t=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;s=k+64|0;c[s>>2]=0;c[s+4>>2]=0;if((t|0)==3082|(a[g+81>>0]|0)!=0)og(g);break}case 115:{f=z;c[f>>2]=0;c[f+4>>2]=0;c[U>>2]=T;f=c[P>>2]|0;c[Y>>2]=0;f=Zr(f,Y,92,U)|0;c[V>>2]=f;if(!f){t=pb(c[H>>2]<<4,0)|0;do if(t){gw(t|0,0,c[H>>2]<<4|0)|0;f=c[P>>2]|0;c[Y>>2]=0;Zr(f,Y,96,t)|0;f=c[Q>>2]|0;if((f|0)>0){g=0;j=0;do{g=g-(c[(c[(c[t+(j<<4)>>2]|0)+20>>2]|0)+64>>2]|0)|0;c[t+(j<<4)+4>>2]=g;j=j+1|0}while((j|0)!=(f|0))}g:do if((c[R>>2]|0)>0){s=0;h:while(1){i:do if((f|0)>0){g=0;q=0;do{p=t+(q<<4)+8|0;f=_r(T,c[t+(q<<4)>>2]|0,s,p)|0;if(f|0)break g;m=c[p>>2]|0;if(m){n=c[t+(q<<4)+4>>2]|0;o=t+(q<<4)+12|0;c[o>>2]=n;j=a[m>>0]|0;f=j&255;do if(!(f&128)){k=1;l=0;f=j&255}else{r=d[m+1>>0]|0;f=r<<7|f&127;if(!(r&128)){k=2;l=0;break}r=d[m+2>>0]|0;f=r<<14|f&16383;if(!(r&128)){k=3;l=0;break}r=d[m+3>>0]|0;f=r<<21|f&2097151;if(!(r&128)){k=4;l=0;break}j=28;k=m+4|0;f=f&268435455;l=0;do{r=k;k=k+1|0;r=d[r>>0]|0;aa=cw(r&127|0,0,j|0)|0;f=Sv(aa|0,L()|0,f|0,l|0)|0;l=L()|0;j=j+7|0}while(j>>>0<64&((r&128|0)!=0|0!=0));k=k-m|0}while(0);if(l>>>0<0|(l|0)==0&f>>>0<2)break h;c[o>>2]=n+-2+f;c[p>>2]=m+k;g=g+1|0}q=q+1|0;r=c[Q>>2]|0}while((q|0)<(r|0));if((g|0)<=0){f=0;break}if((r|0)<=0){f=g;g=c[2]|0;while(1){k=a[g>>0]|0;j=k&255;do if(!(j&128)){l=1;m=0;j=k&255}else{aa=d[g+1>>0]|0;j=aa<<7|j&127;if(!(aa&128)){l=2;m=0;break}aa=d[g+2>>0]|0;j=aa<<14|j&16383;if(!(aa&128)){l=3;m=0;break}aa=d[g+3>>0]|0;j=aa<<21|j&2097151;if(!(aa&128)){l=4;m=0;break}k=28;l=g+4|0;j=j&268435455;m=0;do{aa=l;l=l+1|0;aa=d[aa>>0]|0;r=cw(aa&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,m|0)|0;m=L()|0;k=k+7|0}while(k>>>0<64&((aa&128|0)!=0|0!=0));l=l-g|0}while(0);if(m>>>0<0|(m|0)==0&j>>>0<2){c[2]=0;g=0;f=f+-1|0}else{g=g+l|0;c[3]=j+-2+(c[3]|0);c[2]=g}if((f|0)<=0){f=0;break i}}}f=0;do{l=0;k=0;m=0;do{j=t+(m<<4)|0;if(!(c[t+(m<<4)+8>>2]|0))l=0;else{if(!((k|0)!=0?(c[t+(m<<4)+12>>2]|0)>=(c[k+12>>2]|0):0))k=j;if((l|0)!=0?(c[t+(m<<4)+12>>2]|0)!=(c[j+-16+12>>2]|0):0)j=1;else j=l+1|0;l=j;f=(j|0)>(f|0)?j:f}m=m+1|0}while((m|0)!=(r|0));p=k+8|0;o=c[p>>2]|0;l=a[o>>0]|0;j=l&255;do if(!(j&128)){m=1;n=0;j=l&255}else{aa=d[o+1>>0]|0;j=aa<<7|j&127;if(!(aa&128)){m=2;n=0;break}aa=d[o+2>>0]|0;j=aa<<14|j&16383;if(!(aa&128)){m=3;n=0;break}aa=d[o+3>>0]|0;j=aa<<21|j&2097151;if(!(aa&128)){m=4;n=0;break}l=28;m=o+4|0;j=j&268435455;n=0;do{aa=m;m=m+1|0;aa=d[aa>>0]|0;q=cw(aa&127|0,0,l|0)|0;j=Sv(q|0,L()|0,j|0,n|0)|0;n=L()|0;l=l+7|0}while(l>>>0<64&((aa&128|0)!=0|0!=0));m=m-o|0}while(0);if(n>>>0<0|(n|0)==0&j>>>0<2){c[p>>2]=0;g=g+-1|0}else{aa=k+12|0;c[aa>>2]=j+-2+(c[aa>>2]|0);c[p>>2]=o+m}}while((g|0)>0)}else f=0;while(0);c[(c[F>>2]|0)+(s<<2)>>2]=f;f=s+1|0;if((f|0)>=(c[R>>2]|0)){f=0;break g}s=f;f=c[Q>>2]|0}c[p>>2]=0;f=267}else f=0;while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{aa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else f=7;while(0);c[V>>2]=f}break}case 98:{f=G(((c[R>>2]|0)+31|0)/32|0,c[Q>>2]|0)|0;u=258;break}case 121:{f=G(c[Q>>2]|0,c[R>>2]|0)|0;u=258;break}default:{m=c[P>>2]|0;f=K;c[f>>2]=0;c[f+4>>2]=0;c[U>>2]=T;c[Y>>2]=0;f=Zr(m,Y,92,U)|0;c[V>>2]=f;if(!f){if(!M){j:do if(c[C>>2]|0){f=c[Z>>2]|0;do if(!f){f=lr(I,Z)|0;if(f|0)break;f=c[Z>>2]|0;if(f|0){u=265;break}k=mc(29576)|0;u=274}else u=265;while(0);if((u|0)==265){u=0;g=c[f+120>>2]|0;do if(!g)u=268;else{if(!(b[f+144>>1]|0)){u=268;break}j=f}while(0);if((u|0)==268){g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;u=274}do if((u|0)==274){u=0;f=a[k>>0]|0;g=f&255;do if(!(g&128)){f=f&255;g=0}else{aa=d[k+1>>0]|0;f=aa<<7|g&127;if(!(aa&128)){g=0;break}aa=d[k+2>>0]|0;f=aa<<14|f&16383;if(!(aa&128)){g=0;break}aa=d[k+3>>0]|0;f=aa<<21|f&2097151;if(!(aa&128)){g=0;break}l=28;j=k+4|0;f=f&268435455;g=0;while(1){aa=d[j>>0]|0;t=cw(aa&127|0,0,l|0)|0;f=Sv(t|0,L()|0,f|0,g|0)|0;g=L()|0;l=l+7|0;if(!(l>>>0<64&((aa&128|0)!=0|0!=0)))break;else j=j+1|0}}while(0);if((f|0)==0&(g|0)==0){f=267;break}aa=E;c[aa>>2]=f;c[aa+4>>2]=0;c[V>>2]=0;break j}while(0);c[V>>2]=f;break e}while(0);c[Y>>2]=0;f=Zr(m,Y,97,W)|0;c[V>>2]=f;rr(T,V)|0;f=c[V>>2]|0;if(f|0)break e}c[Y>>2]=0;Zr(m,Y,98,W)|0;f=0}}}while(0);if((u|0)==258){u=0;gw(g|0,0,f<<2|0)|0;f=ds(c[P>>2]|0,W)|0;c[V>>2]=f}switch(a[v>>0]|0){case 99:case 112:case 110:{g=1;break}case 115:case 108:case 97:{g=c[R>>2]|0;break}case 121:{g=G(c[Q>>2]|0,c[R>>2]|0)|0;break}case 98:{g=G(((c[R>>2]|0)+31|0)/32|0,c[Q>>2]|0)|0;break}default:g=G((c[R>>2]|0)*3|0,c[Q>>2]|0)|0}g=(c[F>>2]|0)+(g<<2)|0;c[F>>2]=g;if(f|0)break;else w=w+1|0}g=c[Z>>2]|0;if(g|0){j=c[g>>2]|0;aa=g+136|0;Z=c[aa+4>>2]|0;if((Z|0)>0|(Z|0)==0&(c[aa>>2]|0)>>>0>0)hc(j,g);aa=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;Z=g+64|0;c[Z>>2]=0;c[Z+4>>2]=0;if((aa|0)==3082|(a[j+81>>0]|0)!=0)og(j)}if(!M){Z=c[S>>2]|0;c[Z+8>>2]=1;aa=c[Z+4>>2]|0;ew(Z+16+(aa+2<<2)|0,Z+20|0,aa<<2|0)|0}if(!f){if((yc(c[e>>2]|0,N,c[(c[S>>2]|0)+4>>2]<<2,0,i)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}}else u=303}while(0);if((u|0)==303){c[e+20>>2]=f;g=c[e>>2]|0;if(b[g+8>>1]&1){switch(f|0){case 516:{f=50738;break}case 100:{f=50760;break}case 101:{f=50782;break}default:{f=f&255;if(f>>>0<29?(520028155>>>f&1|0)!=0:0)f=c[22960+(f<<2)>>2]|0;else f=50724}}yc(g,f,-1,1,0)|0}if(i|0)ab[i&127](h)}f=_+248|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}aa=g;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[g>>2]=c[aa>>2];c[aa>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{aa=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0;Ra=$;return}c[i>>2]=51038;f=Bb(55087,i)|0;c[e+20>>2]=1;yc(c[e>>2]|0,f,-1,1,-1)|0;if(!f){Ra=$;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=$;return}else{aa=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=$;return}}function Xr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;i=k;j=c[f+16>>2]|0;c[j+(e*24|0)>>2]=c[(c[b+20>>2]|0)+64>>2];h=_r(c[f>>2]|0,b,c[f+4>>2]|0,i)|0;g=c[i>>2]|0;if(!g){j=h;Ra=k;return j|0}c[j+(e*24|0)+4>>2]=g;f=a[g>>0]|0;b=f&255;if(b&128){l=d[g+1>>0]|0;b=l<<7|f&127;if(l&128){l=d[g+2>>0]|0;b=l<<14|b&16383;if(l&128){l=d[g+3>>0]|0;b=l<<21|b&2097151;if(!(l&128))f=4;else{b=(a[g+4>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;g=g+f|0;c[i>>2]=g;f=b+-2|0;if((b|0)<2){l=267;Ra=k;return l|0}c[j+(e*24|0)+12>>2]=g;c[j+(e*24|0)+20>>2]=g;c[j+(e*24|0)+8>>2]=f;c[j+(e*24|0)+16>>2]=f;l=h;Ra=k;return l|0}function Yr(a,b,d){a=a|0;b=b|0;d=d|0;b=c[a+20>>2]|0;a=d+4|0;c[a>>2]=(c[a>>2]|0)+1;d=d+8|0;c[d>>2]=(c[d>>2]|0)+(c[b+64>>2]|0);return 0}function Zr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[a>>2]|0;a:do if((f|0)!=5){g=a;while(1){a=Zr(c[g+12>>2]|0,b,d,e)|0;if(!((f|0)!=2&(a|0)==0))break;a=c[g+16>>2]|0;f=c[a>>2]|0;if((f|0)==5)break a;else g=a}return a|0}while(0);e=Ya[d&127](a,c[b>>2]|0,e)|0;c[b>>2]=(c[b>>2]|0)+1;return e|0}function _r(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;G=Ra;Ra=Ra+32|0;F=G+16|0;C=G;o=G+12|0;D=G+20|0;E=G+8|0;A=c[e+20>>2]|0;i=c[b>>2]|0;c[g>>2]=0;B=c[A+68>>2]|0;if(!((B|0)==(f|0)?1:(B|0)>=(c[i+24>>2]|0))){g=0;Ra=G;return g|0}n=e+24|0;m=c[n>>2]|0;n=c[n+4>>2]|0;h=C;c[h>>2]=m;c[h+4>>2]=n;h=c[A+28>>2]|0;c[F>>2]=h;B=b+32|0;z=B;if(!(((m|0)==(c[z>>2]|0)?(n|0)==(c[z+4>>2]|0):0)?(a[e+32>>0]|0)==0:0))x=4;a:do if((x|0)==4){c[o>>2]=0;y=a[i+235>>0]|0;z=y&255;h=c[e+8>>2]|0;b:do if(h){i=0;l=0;do{x=c[h>>2]|0;i=(x|0)==4?1:i;e=(x|0)==1?h:e;l=(a[h+32>>0]|0)==0?l:1;h=c[h+8>>2]|0}while((h|0)!=0);if(i){c:do if(c[A+40>>2]|0){k=e+32|0;i=a[k>>0]|0;$r(b,e,o);j=e+24|0;h=c[o>>2]|0;if(!h)if(!(i<<24>>24))do{if(a[k>>0]|0){h=0;break c}qr(b,e,o);x=j;h=c[o>>2]|0}while(((c[x>>2]|0)!=(m|0)?1:(c[x+4>>2]|0)!=(n|0))&(h|0)==0);else do{if(a[k>>0]|0){h=0;break c}qr(b,e,o);h=c[o>>2]|0}while(!(h|0))}else h=0;while(0);i=(h|0)==0;d:do if(!(l<<24>>24)){if(!i)break b;if(!e)x=81;else x=24}else{if(!i)break b;i=e+32|0;while(1){if(a[i>>0]|0){x=24;break d}qr(b,e,o);h=c[o>>2]|0;if(h|0)break b}}while(0);if((x|0)==24){u=b+52|0;w=y<<24>>24==0;v=w?1:-1;w=w?0:-1;h=1;do{a[D>>0]=0;if((c[e>>2]|0)==1)i=c[e+16>>2]|0;else i=e;r=c[i+20>>2]|0;s=r+48|0;j=c[s>>2]|0;c[F>>2]=j;t=r+56|0;m=t;i=c[m>>2]|0;m=c[m+4>>2]|0;b=C;c[b>>2]=i;c[b+4>>2]=m;b=r+4|0;q=c[b>>2]|0;k=(q|0)!=0;l=j;e:do if((a[u>>0]|0)==y<<24>>24){if(k)k=((c[r>>2]|0)+q|0)>>>0<=l>>>0;else k=1;n=k&1;a[D>>0]=n;p=n;b=l;while(1){f:do if(!b){if(p<<24>>24){h=m;x=76;break e}n=c[r>>2]|0;l=n;i=a[n>>0]|0;j=i&255;do if(!(j&128)){i=i&255;j=C;c[j>>2]=i;c[j+4>>2]=0;j=1;m=0}else{p=d[n+1>>0]|0;i=p<<7|j&127;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=2;m=0;break}p=d[n+2>>0]|0;i=p<<14|i&16383;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=3;m=0;break}p=d[n+3>>0]|0;i=p<<21|i&2097151;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=4;m=0;break}j=28;k=n+4|0;i=i&268435455;m=0;do{p=k;k=k+1|0;p=d[p>>0]|0;o=cw(p&127|0,0,j|0)|0;i=Sv(o|0,L()|0,i|0,m|0)|0;m=L()|0;j=j+7|0}while(j>>>0<64&((p&128|0)!=0|0!=0));j=C;c[j>>2]=i;c[j+4>>2]=m;j=k-l|0}while(0);k=0;j=n+j|0;n=0}else{k=B;l=c[k>>2]|0;k=c[k+4>>2]|0;o=Tv(i|0,m|0,l|0,k|0)|0;Yv(o|0,L()|0,v|0,w|0)|0;if(!(n<<24>>24==0&(L()|0)<0)){x=77;break e}n=c[r>>2]|0;l=b;j=0;while(1){k=a[l>>0]|0;l=l+1|0;if(!(j<<24>>24|k))break;else j=k&128}j=l;k=n+q|0;do if(l>>>0<k>>>0){while(1){n=a[l>>0]|0;if(n<<24>>24)break;j=l+1|0;if(j>>>0<k>>>0)l=j;else{x=52;break}}if((x|0)==52){x=0;break}k=n&255;do if(!(k&128)){b=1;k=n&255;j=0}else{o=d[l+1>>0]|0;k=o<<7|k&127;if(!(o&128)){b=2;j=0;break}o=d[l+2>>0]|0;k=o<<14|k&16383;if(!(o&128)){b=3;j=0;break}o=d[l+3>>0]|0;k=o<<21|k&2097151;if(!(o&128)){b=4;j=0;break}n=28;b=l+4|0;k=k&268435455;o=0;do{H=b;b=b+1|0;H=d[H>>0]|0;I=cw(H&127|0,0,n|0)|0;k=Sv(I|0,L()|0,k|0,o|0)|0;o=L()|0;n=n+7|0}while(n>>>0<64&((H&128|0)!=0|0!=0));b=b-j|0;j=o}while(0);k=Yv(k|0,j|0,v|0,w|0)|0;i=Sv(i|0,m|0,k|0,L()|0)|0;m=L()|0;k=C;c[k>>2]=i;c[k+4>>2]=m;k=p;j=l+b|0;n=0;break f}while(0);a[D>>0]=1;k=1;n=1}while(0);c[F>>2]=j;p=k;b=j}}else{if(k)if(!j)i=0;else i=(c[r>>2]|0)>>>0>=l>>>0;else i=1;a[D>>0]=i&1;i=l;while(1){if(!i){if(a[D>>0]|0)break}else{m=C;i=c[m>>2]|0;m=c[m+4>>2]|0;k=B;l=c[k>>2]|0;k=c[k+4>>2]|0;I=Tv(i|0,m|0,l|0,k|0)|0;I=Yv(I|0,L()|0,v|0,w|0)|0;H=L()|0;n=a[D>>0]|0;if(!(n<<24>>24==0&((H|0)>0|(H|0)==0&I>>>0>0))){x=77;break e}}kq(z,c[r>>2]|0,c[b>>2]|0,F,C,E,D);j=c[F>>2]|0;i=j}h=C;i=c[h>>2]|0;h=c[h+4>>2]|0;x=76}while(0);if((x|0)==76){c[s>>2]=j;I=t;c[I>>2]=i;c[I+4>>2]=h;x=78}else if((x|0)==77){x=0;c[s>>2]=j;I=t;c[I>>2]=i;c[I+4>>2]=m;if(!(n<<24>>24==0&((i|0)==(l|0)&(m|0)==(k|0))))x=78}if((x|0)==78){x=0;h=0}e=c[e+12>>2]|0}while((e|0)!=0);if(!h)h=0;else x=81}if((x|0)==81)h=c[A+48>>2]|0;c[F>>2]=h;break a}else h=0}else h=0;while(0);I=h;Ra=G;return I|0}while(0);if(!h){I=0;Ra=G;return I|0}if((a[h>>0]|0)==1){j=h+1|0;c[F>>2]=j;i=a[j>>0]|0;e=i&255;if(e&128){I=d[h+2>>0]|0;i=I<<7|i&127;if(I&128){I=d[h+3>>0]|0;i=I<<14|i&16383;if(I&128){I=d[h+4>>0]|0;i=I<<21|i&2097151;if(!(I&128)){h=i;i=4}else{h=(a[h+5>>0]&7)<<28|i&268435455;i=5}}else{h=i;i=3}}else{h=i;i=2}}else{h=e;i=1}I=j+i|0;c[F>>2]=I;i=h;h=I}else i=0;e=a[h>>0]|0;g:do if((i|0)<(f|0)){while(1){i=e<<24>>24;if(i&254)do{h=h+1|0;I=i;i=a[h>>0]|0}while((i&254|I&128|0)!=0);c[F>>2]=h;if(!(a[h>>0]|0)){h=0;break}j=h+1|0;c[F>>2]=j;e=a[j>>0]|0;i=e&255;if(i&128){I=d[h+2>>0]|0;i=I<<7|e&127;if(I&128){I=d[h+3>>0]|0;i=I<<14|i&16383;if(I&128){I=d[h+4>>0]|0;i=I<<21|i&2097151;if(!(I&128))h=4;else{i=(a[h+5>>0]&7)<<28|i&268435455;h=5}}else h=3}else h=2}else h=1;h=j+h|0;c[F>>2]=h;e=a[h>>0]|0;if((i|0)>=(f|0))break g}Ra=G;return h|0}while(0);if(!(e<<24>>24)){c[F>>2]=0;h=0}c[g>>2]=(i|0)==(f|0)?h:0;I=0;Ra=G;return I|0}function $r(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;m=p+4|0;n=p;if(!d){Ra=p;return}if(c[e>>2]|0){Ra=p;return}o=c[d+20>>2]|0;if(o|0){g=o+24|0;f=o+28|0;do if(c[g>>2]|0?(h=c[f>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[f>>2]=0;c[o+32>>2]=0;c[g>>2]=0;l=o+40|0;if(c[l>>2]|0){k=o+64|0;j=c[k>>2]|0;if((j|0)>0){h=0;do{f=c[o+72+(h*24|0)+20>>2]|0;if(f|0?(c[f+8>>2]=0,c[f+28>>2]=1,i=c[f+4>>2]|0,(i|0)>0):0){g=c[f>>2]|0;f=0;do{q=g+(f<<2)|0;c[(c[q>>2]|0)+80>>2]=0;q=c[q>>2]|0;c[q+84>>2]=0;q=q+88|0;c[q>>2]=0;c[q+4>>2]=0;f=f+1|0}while((f|0)!=(i|0))}h=h+1|0}while((h|0)<(j|0))}h=c[b>>2]|0;i=o+68|0;a:do if((j|0)>0){g=0;while(1){if(c[o+72+(g*24|0)+20>>2]|0){c[m>>2]=0;c[n>>2]=0;f=jr(h,o+72+(g*24|0)|0,c[i>>2]|0,m,n)|0;if(f|0)break;f=kr(h,o,g,c[n>>2]|0,c[m>>2]|0)|0;if(f|0)break a}g=g+1|0;if((g|0)>=(c[k>>2]|0)){f=0;break a}}}else f=0;while(0);c[l>>2]=0;c[e>>2]=f}c[o+8>>2]=0;q=o+16|0;c[q>>2]=0;c[q+4>>2]=0;c[o+48>>2]=0}q=d+24|0;c[q>>2]=0;c[q+4>>2]=0;a[d+32>>0]=0;a[d+33>>0]=0;$r(b,c[d+12>>2]|0,e);$r(b,c[d+16>>2]|0,e);Ra=p;return}function as(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;h=n;m=_r(c[f>>2]|0,b,c[f+4>>2]|0,h)|0;l=c[(c[b+20>>2]|0)+64>>2]|0;g=c[h>>2]|0;if(!g){i=0;j=0}else{b=a[g>>0]|0;e=b&255;if(e&128){k=d[g+1>>0]|0;e=k<<7|b&127;if(k&128){k=d[g+2>>0]|0;e=k<<14|e&16383;if(k&128){k=d[g+3>>0]|0;e=k<<21|e&2097151;if(!(k&128))b=4;else{e=(a[g+4>>0]&7)<<28|e&268435455;b=5}}else b=3}else b=2}else b=1;j=g+b|0;c[h>>2]=j;i=e+-2|0}if((l|0)<=0){Ra=n;return m|0}k=c[f+24>>2]|0;g=f+8|0;h=l+-1|0;b=c[g>>2]|0;e=0;f=b;while(1){c[k+(f*12|0)+8>>2]=h-e;c[k+(f*12|0)>>2]=j;c[k+(f*12|0)+4>>2]=i;e=e+1|0;if((e|0)==(l|0))break;else f=f+1|0}c[g>>2]=b+l;Ra=n;return m|0}function bs(a,b,d){a=a|0;b=b|0;d=d|0;c[d>>2]=(c[d>>2]|0)+1;c[a+36>>2]=b;return 0}function cs(b){b=b|0;var d=0;d=b+(0-(c[b+-4>>2]|0))|0;if((d+16+4|0)==(b|0))a[d+1>>0]=0;else a[d+2>>0]=0;if(a[d>>0]|0)return;if(a[d+1>>0]|0)return;if(a[d+2>>0]|0)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{b=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function ds(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(a[b+32>>0]|0){n=0;return n|0}while(1){m=b+24|0;h=c[e>>2]|0;n=h+32|0;if(!((c[m>>2]|0)==(c[n>>2]|0)?(c[m+4>>2]|0)==(c[n+4>>2]|0):0)){g=0;f=36;break}f=c[b+12>>2]|0;if(!f){f=7;break}f=ds(f,e)|0;if(f|0){g=f;f=36;break}f=c[b+16>>2]|0;if(!(a[f+32>>0]|0))b=f;else{g=0;f=36;break}}if((f|0)==7){m=c[b+20>>2]|0;f=c[m+28>>2]|0;i=(a[e+24>>0]|0)==121;n=e+4|0;l=c[n>>2]|0;l=G(i?l:(l+31|0)/32|0,c[b+36>>2]|0)|0;m=m+68|0;k=(c[h>>2]|0)+24|0;j=e+28|0;if(i){i=0;while(1){b=a[f>>0]|0;g=b<<24>>24;if(!(g&254)){h=0;e=f}else{b=0;while(1){f=f+1|0;e=g&128;h=(e>>>7^1)+b|0;b=a[f>>0]|0;g=b<<24>>24;if(!(g&254|e)){e=f;break}else b=h}}g=c[m>>2]|0;if((g|0)==(i|0)?1:(g|0)>=(c[k>>2]|0)){c[(c[j>>2]|0)+(i+l<<2)>>2]=h;b=a[e>>0]|0}if(b<<24>>24!=1){g=0;f=36;break}g=e+1|0;f=a[g>>0]|0;b=f&255;if(b&128){i=d[e+2>>0]|0;b=i<<7|f&127;if(i&128){i=d[e+3>>0]|0;b=i<<14|b&16383;if(i&128){i=d[e+4>>0]|0;b=i<<21|b&2097151;if(!(i&128))f=4;else{b=(a[e+5>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;if((b|0)>=(c[n>>2]|0)){g=267;f=36;break}i=b;f=g+f|0}if((f|0)==36)return g|0}else{i=0;while(1){b=a[f>>0]|0;g=b<<24>>24;if(!(g&254)){h=0;e=f}else{b=0;while(1){f=f+1|0;e=g&128;h=(e>>>7^1)+b|0;b=a[f>>0]|0;g=b<<24>>24;if(!(g&254|e)){e=f;break}else b=h}}g=c[m>>2]|0;if(!((h|0)==0|((g|0)!=(i|0)?(g|0)<(c[k>>2]|0):0))){b=(c[j>>2]|0)+(((i+1|0)/32|0)+l<<2)|0;c[b>>2]=c[b>>2]|1<<(i&31);b=a[e>>0]|0}if(b<<24>>24!=1){g=0;f=36;break}g=e+1|0;f=a[g>>0]|0;b=f&255;if(b&128){i=d[e+2>>0]|0;b=i<<7|f&127;if(i&128){i=d[e+3>>0]|0;b=i<<14|b&16383;if(i&128){i=d[e+4>>0]|0;b=i<<21|b&2097151;if(!(i&128))f=4;else{b=(a[e+5>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;if((b|0)>=(c[n>>2]|0)){g=267;f=36;break}i=b;f=g+f|0}if((f|0)==36)return g|0}}else if((f|0)==36)return g|0;return 0}function es(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=Ra;Ra=Ra+16|0;s=w;u=c[e>>2]|0;v=(c[e+28>>2]|0)+((G(d*3|0,c[e+4>>2]|0)|0)<<2)|0;f=c[u>>2]|0;if(a[b+34>>0]|0?(c[c[b+8>>2]>>2]|0)!=1:0){b=f+24|0;if((c[b>>2]|0)<=0){v=0;Ra=w;return v|0}e=c[u+64>>2]|0;d=0;do{u=d*3|0;c[v+(u+1<<2)>>2]=e;c[v+(u+2<<2)>>2]=e;d=d+1|0}while((d|0)<(c[b>>2]|0));d=0;Ra=w;return d|0}c[s>>2]=0;t=b+40|0;if(!(c[t>>2]|0)){o=u+32|0;q=o;p=c[q>>2]|0;q=c[q+4>>2]|0;e=c[b+8>>2]|0;a:do if(!e)e=b;else{d=b;while(1){if((c[e>>2]|0)!=1){e=d;break a}d=c[e+8>>2]|0;if(!d)break;else{n=e;e=d;d=n}}}while(0);l=e+24|0;n=l;m=c[n>>2]|0;n=c[n+4>>2]|0;j=e+32|0;k=a[j>>0]|0;b=f+24|0;d=e;do{if((c[d>>2]|0)==5)g=d;else g=c[d+16>>2]|0;f=pb((c[b>>2]|0)*12|0,0)|0;c[g+40>>2]=f;if(!f){h=16;break}gw(f|0,0,(c[b>>2]|0)*12|0)|0;d=c[d+12>>2]|0}while((d|0)!=0);if((h|0)==16){v=7;Ra=w;return v|0}$r(u,e,s);i=u+6|0;d=c[s>>2]|0;b:do if((a[i>>0]|0)==0&(d|0)==0){f=u+7|0;g=u+12|0;h=u+88|0;while(1){if((a[f>>0]|0)==0?(r=c[g>>2]|0,r|0):0){d=c[r>>2]|0;x=r+136|0;y=c[x+4>>2]|0;if((y|0)>0|(y|0)==0&(c[x>>2]|0)>>>0>0)hc(d,r);y=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;x=r+64|0;c[x>>2]=0;c[x+4>>2]=0;if((y|0)==3082|(a[d+81>>0]|0)!=0)og(d)}qr(u,e,s);y=a[j>>0]|0;a[i>>0]=y;a[f>>0]=1;c[h>>2]=1;z=l;d=c[z+4>>2]|0;x=o;c[x>>2]=c[z>>2];c[x+4>>2]=d;if(!((y<<24>>24==0?(c[e>>2]|0)==1:0)?(rr(u,s)|0)!=0:0)){d=c[s>>2]|0;if(d|0)break b;if(a[i>>0]|0){d=0;break b}hs(e,c[b>>2]|0);d=c[s>>2]|0;if(!((d|0)==0&(a[i>>0]|0)==0))break b}}}while(0);a[i>>0]=0;z=o;c[z>>2]=p;c[z+4>>2]=q;if(!(k<<24>>24)){$r(u,e,s);do{qr(u,e,s);z=l;d=c[s>>2]|0}while(((c[z>>2]|0)!=(m|0)?1:(c[z+4>>2]|0)!=(n|0))&(d|0)==0)}else a[j>>0]=k;if(d){z=d;Ra=w;return z|0}}else b=f+24|0;if((c[b>>2]|0)<=0){z=0;Ra=w;return z|0}e=c[t>>2]|0;d=0;do{z=d*3|0;y=z+1|0;c[v+(y<<2)>>2]=c[e+(y<<2)>>2];z=z+2|0;c[v+(z<<2)>>2]=c[e+(z<<2)>>2];d=d+1|0}while((d|0)<(c[b>>2]|0));d=0;Ra=w;return d|0}function fs(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+16|0;l=n;m=e+4|0;k=c[m>>2]|0;j=G(d*3|0,k)|0;if((k|0)<=0){m=0;Ra=n;return m|0}k=e+28|0;i=0;do{d=_r(c[e>>2]|0,b,i,l)|0;g=c[l>>2]|0;if(!g)f=0;else{h=a[g>>0]|0;if(!(h&254))f=0;else{f=0;do{g=g+1|0;o=h&128;f=(o>>>7^1)+f|0;h=a[g>>0]|0}while((h&254|o|0)!=0)}c[l>>2]=g}c[(c[k>>2]|0)+((i*3|0)+j<<2)>>2]=f;i=i+1|0}while((d|0)==0?(i|0)<(c[m>>2]|0):0);Ra=n;return d|0}function gs(a,b,d){a=a|0;b=b|0;d=d|0;c[d+(b<<4)>>2]=a;return 0}function hs(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!b)return;do{f=c[b+20>>2]|0;a:do if(f|0?(m=c[f+28>>2]|0,m|0):0){l=b+40|0;i=m;f=0;while(1){h=a[i>>0]|0;if((h&255)<2)g=0;else{g=0;j=0;while(1){g=g+((j|0)==0&1)|0;k=i+1|0;i=h&-128;h=a[k>>0]|0;if(!((h&-2|i)<<24>>24)){i=k;break}else{j=i&255;i=k}}}j=c[l>>2]|0;k=f*3|0;h=j+(k+1<<2)|0;c[h>>2]=(c[h>>2]|0)+g;k=j+(k+2<<2)|0;c[k>>2]=(c[k>>2]|0)+((g|0)!=0&1);if(!(a[i>>0]|0))break a;h=i+1|0;g=a[h>>0]|0;f=g&255;if(f&128){k=d[i+2>>0]|0;f=k<<7|g&127;if(k&128){k=d[i+3>>0]|0;f=k<<14|f&16383;if(k&128){k=d[i+4>>0]|0;f=k<<21|f&2097151;if(!(k&128))g=4;else{f=(a[i+5>>0]&7)<<28|f&268435455;g=5}}else g=3}else g=2}else g=1;if((f|0)<(e|0))i=h+g|0;else break}}while(0);hs(c[b+12>>2]|0,e);b=c[b+16>>2]|0}while((b|0)!=0);return}function is(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;x=z;y=z+4|0;c[y>>2]=0;b=td(b,55547)|0;if(b|0){y=b;Ra=z;return y|0}s=e+-3|0;r=f+12|0;a:do if(s){k=(e|0)>3;if(k){f=0;b=0;do{b=b+1+(Eu(c[r+(f<<2)>>2]|0)|0)|0;f=f+1|0}while((f|0)!=(s|0))}else b=0;q=pb(b+(s<<2)|0,0)|0;b=(q|0)==0;b:do if(b|k^1){if(b){f=7;j=0;b=0;m=44;break a}}else{n=q+(s<<2)|0;o=0;while(1){b=r+(o<<2)|0;p=Eu(c[b>>2]|0)|0;c[q+(o<<2)>>2]=n;p=p+1|0;ew(n|0,c[b>>2]|0,p|0)|0;b=a[n>>0]|0;switch(b<<24>>24){case 34:case 39:case 91:case 96:{m=b<<24>>24==91?93:b;f=a[n+1>>0]|0;c:do if(!(f<<24>>24))b=0;else{k=1;b=0;do{l=k+1|0;if(f<<24>>24==m<<24>>24){if((a[n+l>>0]|0)!=m<<24>>24)break c;a[n+b>>0]=m;k=k+2|0}else{a[n+b>>0]=f;k=l}b=b+1|0;f=a[n+k>>0]|0}while(f<<24>>24!=0)}while(0);a[n+b>>0]=0;break}default:{}}o=o+1|0;if((o|0)==(s|0))break b;else n=n+p|0}}while(0);if((e|0)<4){k=50983;l=q;b=q;m=21}else{k=c[q>>2]|0;l=q;b=q;m=21}}else{k=50983;l=0;b=0;m=21}while(0);d:do if((m|0)==21){f=(Eu(k)|0)+1|0;e:do if(((d|0?(t=d+16|0,c[t>>2]|0):0)?(u=Xa[(a[d>>0]<<24>>24==1?154:155)&255](k,f)|0,u=(c[d+12>>2]|0)+-1&u,v=c[t>>2]|0,v|0):0)?(j=c[v+(u<<3)>>2]|0,w=(a[d>>0]|0)==1?79:80,i=c[v+(u<<3)+4>>2]|0,(j|0)!=0&(i|0)!=0):0){while(1){j=j+-1|0;if(!(Za[w&127](c[i+12>>2]|0,c[i+16>>2]|0,k,f)|0))break;i=c[i>>2]|0;if(!((j|0)!=0&(i|0)!=0))break e}i=c[i+8>>2]|0;if(i|0){j=i;i=Ya[c[i+4>>2]&127]((e|0)>4?e+-4|0:0,l+4|0,y)|0;if(i|0){f=i;m=44;break d}if(mb()|0){f=7;m=44;break d}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](20)|0;if(!i){f=7;m=44;break d}}else{i=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;k=59064;f=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&f>>>0>0){e=c[14978]|0;x=Tv(f|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&x>>>0<=e>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){f=7;m=44;break d}f=Wa[c[29352>>2]&127](i)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f};c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=j;c[i+16>>2]=c[y>>2];c[g>>2]=i;i=0;break d}}while(0);c[x>>2]=k;Wp(h,53600,x);f=1;j=0;m=44}while(0);if((m|0)==44){i=c[y>>2]|0;if(!i)i=f;else{Wa[c[j+8>>2]&127](i)|0;i=f}}if(!b){y=i;Ra=z;return y|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);y=i;Ra=z;return y|0}else{y=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);y=i;Ra=z;return y|0}return 0}function js(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[d>>2]|0;a:do if((e|0)>0){f=c[d+4>>2]|0;b=0;while(1){if((a[f+(b*12|0)+5>>0]|0?(c[f+(b*12|0)>>2]|0)==0:0)?(a[f+(b*12|0)+4>>0]|0)==2:0)break;b=b+1|0;if((b|0)>=(e|0))break a}c[d+20>>2]=1;f=c[d+16>>2]|0;c[f+(b<<3)>>2]=1;a[f+(b<<3)+4>>0]=1;g[d+40>>3]=1.0;return 0}while(0);c[d+20>>2]=0;return 0}function ks(a){a=a|0;var b=0;Wa[c[(c[a+12>>2]|0)+8>>2]&127](c[a+16>>2]|0)|0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}\nfunction Xf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;o=u;t=c[e+20>>2]|0;s=t+16|0;f=a[s>>0]|0;if(f<<24>>24==2){r=c[t>>2]|0;f=c[t+40>>2]|0;if(f|0){e=f;Ra=u;return e|0}do if((c[t+216>>2]|0)==0?(l=t+5|0,(a[l>>0]|0)!=2):0){k=t+24|0;i=c[k>>2]|0;if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](512)|0;if(!f)q=16}else{f=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){p=c[14978]|0;j=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=p>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(f){g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else q=16}if((q|0)==16){c[t+56>>2]=0;e=7;Ra=u;return e|0}gw(f+4|0,0,508)|0;c[f>>2]=i;p=t+56|0;c[p>>2]=f;j=t+64|0;f=c[j>>2]|0;a:do if(!(c[f>>2]|0)){if((a[l>>0]|0)==4){j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[f+4>>2]=1020;c[f>>2]=29896;c[f+8>>2]=-1;c[f+56>>2]=0;c[f+64>>2]=0;c[f+60>>2]=0;q=33;break}do if(!(a[t+12>>0]|0)){c[o>>2]=0;if((c[k>>2]|0)!=0?(m=c[t+60>>2]|0,n=c[m>>2]|0,(n|0)!=0):0){f=Ya[c[n+40>>2]&127](m,20,o)|0;if((f|0)==12){h=2054;i=0;f=c[j>>2]|0;q=29;break}g=(f|0)==0;if(g&(c[o>>2]|0)!=0){f=1032;break a}if(g){g=c[t+172>>2]|0;f=c[j>>2]|0;j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));h=2054;q=30}}else{h=2054;i=0;q=29}}else{i=c[7334]|0;c[o>>2]=0;h=4110;q=29}while(0);if((q|0)==29){g=c[t+172>>2]|0;j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));if(!i)q=30;else{c[f+4>>2]=(i|0)>0?i:1020;c[f>>2]=29896;c[f+8>>2]=i;c[f+56>>2]=h;c[f+64>>2]=g;c[f+60>>2]=r;q=33;break}}if((q|0)==30)f=_a[c[r+24>>2]&127](r,g,f,h&556927,0)|0;if(!f)q=33}else q=33;while(0);if((q|0)==33){c[t+44>>2]=0;f=t+72|0;a[t+19>>0]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;f=of(t)|0;if(!f)break}yf(c[p>>2]|0);c[p>>2]=0;e=f;Ra=u;return e|0}while(0);a[s>>0]=3;m=3}else m=f;n=e+28|0;f=b[n>>1]|0;h=f&65535;if(h&17){g=h&65519;f=g&65535;b[n>>1]=f;if(h&1){f=(g^3)&65535;b[n>>1]=f;g=c[e+12>>2]|0;c[e+36>>2]=0;h=c[g>>2]|0;c[e+32>>2]=h;if(!h){c[g+4>>2]=e;if(a[g+32>>0]|0)a[g+33>>0]=1}else c[h+36>>2]=e;c[g>>2]=e;g=g+8|0;if((f&8)==0&(c[g>>2]|0)==0)c[g>>2]=e}}j=c[t+56>>2]|0;b:do if(j){l=c[e+24>>2]|0;h=l+-1|0;g=c[j>>2]|0;c:do if(h>>>0<g>>>0){i=c[j+8>>2]|0;if(i){k=j;do{g=(h>>>0)/(i>>>0)|0;k=c[k+12+(g<<2)>>2]|0;if(!k)break c;h=h-(G(g,i)|0)|0;i=c[k+8>>2]|0}while((i|0)!=0);j=k;g=c[k>>2]|0}if(g>>>0<4001)if(!(1<<(h&7)&d[j+12+(h>>>3)>>0]))break;else break b;i=h+1|0;g=(h>>>0)%125|0;h=c[j+12+(g<<2)>>2]|0;if(h|0)do{if((h|0)==(i|0))break b;g=((g+1|0)>>>0)%125|0;h=c[j+12+(g<<2)>>2]|0}while((h|0)!=0)}while(0);if(l>>>0>(c[t+28>>2]|0)>>>0){if(m<<24>>24==4)break;f=f|8;b[n>>1]=f;break}f=Yf(e)|0;if(!f){f=b[n>>1]|0;break}else{e=f;Ra=u;return e|0}}while(0);b[n>>1]=f|4;if((c[t+96>>2]|0)>0)h=Ve(e)|0;else h=0;g=t+24|0;f=c[e+24>>2]|0;if((c[g>>2]|0)>>>0>=f>>>0){e=h;Ra=u;return e|0}c[g>>2]=f;e=h;Ra=u;return e|0}function Yf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=Ra;Ra=Ra+16|0;p=t;s=c[e+20>>2]|0;r=s+72|0;h=r;n=c[h>>2]|0;h=c[h+4>>2]|0;o=c[e+4>>2]|0;f=c[s+48>>2]|0;q=s+152|0;g=c[q>>2]|0;if((g|0)>200)do{m=g;g=g+-200|0;f=f+(d[o+g>>0]|0)|0}while((m|0)>400);l=e+28|0;b[l>>1]=b[l>>1]|8;l=s+64|0;g=c[l>>2]|0;m=e+24|0;e=c[m>>2]|0;a[p>>0]=e>>>24;i=p+1|0;a[i>>0]=e>>>16;j=p+2|0;a[j>>0]=e>>>8;k=p+3|0;a[k>>0]=e;g=_a[c[(c[g>>2]|0)+12>>2]&127](g,p,4,n,h)|0;if(g|0){s=g;Ra=t;return s|0}u=c[l>>2]|0;g=c[q>>2]|0;e=Sv(n|0,h|0,4,0)|0;h=L()|0;g=_a[c[(c[u>>2]|0)+12>>2]&127](u,o,g,e,h)|0;if(g|0){u=g;Ra=t;return u|0}n=c[l>>2]|0;o=c[q>>2]|0;o=Sv(e|0,h|0,o|0,((o|0)<0)<<31>>31|0)|0;u=L()|0;a[p>>0]=f>>>24;a[i>>0]=f>>>16;a[j>>0]=f>>>8;a[k>>0]=f;f=_a[c[(c[n>>2]|0)+12>>2]&127](n,p,4,o,u)|0;if(f|0){u=f;Ra=t;return u|0}k=(c[q>>2]|0)+8|0;j=r;k=Sv(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;j=L()|0;l=r;c[l>>2]=k;c[l+4>>2]=j;l=s+44|0;c[l>>2]=(c[l>>2]|0)+1;l=df(c[s+56>>2]|0,c[m>>2]|0)|0;j=c[m>>2]|0;k=s+96|0;g=c[k>>2]|0;if((g|0)>0){i=s+92|0;f=0;h=0;do{e=c[i>>2]|0;if((c[e+(h*48|0)+20>>2]|0)>>>0>=j>>>0){f=df(c[e+(h*48|0)+16>>2]|0,j)|0|f;g=c[k>>2]|0}h=h+1|0}while((h|0)<(g|0))}else f=0;u=f|l;Ra=t;return u|0}function Zf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+4>>2]|0;f=c[d>>2]|0;a[j+19>>0]=0;k=d+8|0;do if(a[k>>0]|0){if((c[f+172>>2]|0)>1){f=j+76|0;if((c[f>>2]|0)==(d|0)?(c[f>>2]=0,e=j+22|0,b[e>>1]=b[e>>1]&-193,e=c[j+72>>2]|0,e|0):0)do{a[e+8>>0]=1;e=c[e+12>>2]|0}while((e|0)!=0);a[k>>0]=1;return}e=j+72|0;f=c[e>>2]|0;if(f|0)while(1){g=f+12|0;do if((c[f>>2]|0)==(d|0)){h=c[g>>2]|0;c[e>>2]=h;if((c[f+4>>2]|0)!=1)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);i=15;break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);i=15;break}else{g=e;f=h}}else{e=g;i=15}while(0);if((i|0)==15){i=0;g=e;f=c[e>>2]|0}if(!f)break;else e=g}e=j+76|0;if((c[e>>2]|0)!=(d|0)){e=j+40|0;f=c[e>>2]|0;if((f|0)==2){d=j+22|0;b[d>>1]=b[d>>1]&-129;c[e>>2]=1;break}}else{c[e>>2]=0;f=j+22|0;b[f>>1]=b[f>>1]&-193;f=j+40|0;e=f;f=c[f>>2]|0}d=f+-1|0;c[e>>2]=d;if(!d)a[j+20>>0]=0}while(0);a[k>>0]=0;if(a[j+20>>0]|0)return;e=j+12|0;f=c[e>>2]|0;if(!f)return;c[e>>2]=0;k=c[f+72>>2]|0;e=c[k+20>>2]|0;Df(k);if(c[(c[e+212>>2]|0)+12>>2]|0)return;switch(a[e+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[e+4>>0]|0))uf(e,0,0)|0;break}default:tf(e)|0}vf(e);return}function _f(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+32|0;k=r;m=r+20|0;j=r+24|0;o=r+16|0;p=r+12|0;if(g>>>0<2)i=0;else{i=g+-2|0;i=i-((i>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+i|0}a:do if((i|0)!=(g|0)?((1073741824/((c[e+32>>2]|0)>>>0)|0)+1|0)!=(g|0):0){n=c[(c[e+12>>2]|0)+56>>2]|0;b:do if((d[n+37>>0]|0)<<16|(d[n+36>>0]|0)<<24|(d[n+38>>0]|0)<<8|(d[n+39>>0]|0)){i=eg(e,g,j,o)|0;if(!i){n=a[j>>0]|0;c:do switch(n<<24>>24){case 1:{c[k>>2]=32306;c[k+4>>2]=66936;c[k+8>>2]=31517;Db(11,32001,k);i=11;break b}case 2:{if(!h){i=fg(e,p,m,g,1)|0;if(i|0)break b;i=c[p>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{q=c[i+20>>2]|0;p=q+120|0;c[p>>2]=(c[p>>2]|0)+-1;q=q+136|0;c[i+16>>2]=c[q>>2];c[q>>2]=i;break}}while(0)}break}default:{i=c[e>>2]|0;i=Za[c[i+204>>2]&127](i,g,m,0)|0;do if(!i){i=c[m>>2]|0;l=c[i+8>>2]|0;j=l+4|0;if((c[j>>2]|0)!=(g|0)){c[l+56>>2]=c[i+4>>2];c[l+72>>2]=i;c[l+52>>2]=e;c[j>>2]=g;a[l+9>>0]=(g|0)==1?100:0}i=(h|0)==0;j=i?2:0;k=i?f:0;d:do if(i){i=fg(e,m,p,k,j)|0;if(!i){i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{m=c[i+20>>2]|0;f=m+120|0;c[f>>2]=(c[f>>2]|0)+-1;m=m+136|0;c[i+16>>2]=c[m>>2];c[m>>2]=i;break}}while(0);i=c[p>>2]|0}else q=30}else do{i=fg(e,m,p,k,j)|0;if(i|0){q=30;break d}i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{s=c[i+20>>2]|0;t=s+120|0;c[t>>2]=(c[t>>2]|0)+-1;s=s+136|0;c[i+16>>2]=c[s>>2];c[s>>2]=i;break}}while(0);i=c[p>>2]|0}while(i>>>0>f>>>0);while(0);if((q|0)==30){do if(l|0){j=c[l+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{t=c[j+20>>2]|0;s=t+120|0;c[s>>2]=(c[s>>2]|0)+-1;t=t+136|0;c[j+16>>2]=c[t>>2];c[t>>2]=j;break}}while(0);break}i=gg(e,l,n,c[o>>2]|0,i,h)|0;do if(l|0){j=c[l+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{t=c[j+20>>2]|0;s=t+120|0;c[s>>2]=(c[s>>2]|0)+-1;t=t+136|0;c[j+16>>2]=c[t>>2];c[t>>2]=j;break}}while(0);if(!i)break c}while(0);break b}}while(0);break a}}else i=101;while(0);t=i;Ra=r;return t|0}while(0);if(h|0){t=0;Ra=r;return t|0}k=1073741824/((c[e+32>>2]|0)>>>0)|0;f=k+1|0;l=e+36|0;i=g;while(1){j=i+-1|0;if((j|0)!=(f|0)){if(j>>>0<2)i=0;else{i=i+-3|0;i=i-((i>>>0)%(((((c[l>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(k|0)?3:2)+i|0}if((i|0)!=(j|0))break}i=j}a[e+19>>0]=1;c[e+44>>2]=j;t=0;Ra=r;return t|0}function $f(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=(e|0)==0;a:while(1){b:do if((d|0)!=(f|0)){if(!k?(c[d+64>>2]|0)!=(e|0):0)break;switch(a[d>>0]|0){case 2:{a[d>>0]=0;break}case 0:{c[d+4>>2]=0;break}default:{j=d+68|0;g=a[j>>0]|0;if(g<<24>>24<=-1)break b;if(g<<24>>24){i=0;do{h=c[(c[d+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{m=c[h+20>>2]|0;n=m+120|0;c[n>>2]=(c[n>>2]|0)+-1;m=m+136|0;c[h+16>>2]=c[m>>2];c[m>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{n=c[g+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[g+16>>2]=c[n>>2];c[n>>2]=g}a[j>>0]=-1;break b}}g=ag(d)|0;if(g|0)break a;j=d+68|0;g=a[j>>0]|0;if(g<<24>>24>-1){if(g<<24>>24){i=0;do{h=c[(c[d+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{n=c[h+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[h+16>>2]=c[n>>2];c[n>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{n=c[g+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[g+16>>2]=c[n>>2];c[n>>2]=g}a[j>>0]=-1}a[d>>0]=3;n=d+1|0;a[n>>0]=a[n>>0]&-15}while(0);d=c[d+24>>2]|0;if(!d){d=0;l=34;break}}if((l|0)==34)return d|0;n=d+1|0;a[n>>0]=a[n>>0]&-15;n=g;return n|0}function ag(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(a[b+69>>0]|0)==0;bg(b);if(!g){f=b+32|0;g=c[f+4>>2]|0;b=b+56|0;c[b>>2]=c[f>>2];c[b+4>>2]=g;b=0;return b|0}f=c[b+44>>2]|0;g=b+56|0;d=g;c[d>>2]=f;c[d+4>>2]=0;d=Sv(f|0,0,17,0)|0;L()|0;f=Sv(f|0,0,16,0)|0;e=L()|0;if(e>>>0>0|(e|0)==0&f>>>0>2147483390){b=7;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](d)|0;if(!d){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){h=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=h>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){h=7;return h|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}e=cg(b,0,c[g>>2]|0,d,0)|0;if(!e){e=d+(c[g>>2]|0)|0;f=e+17|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));c[b+16>>2]=d;h=0;return h|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);h=e;return h|0}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);h=e;return h|0}return 0}function bg(f){f=f|0;var g=0,h=0;if(b[f+50>>1]|0)return;g=f+1|0;a[g>>0]=a[g>>0]|2;g=c[f+116>>2]|0;h=(c[g+64>>2]|0)+(e[f+70>>1]<<1)|0;cb[c[g+80>>2]&255](g,(c[g+56>>2]|0)+((d[h>>0]<<8|d[h+1>>0])&e[g+26>>1])|0,f+32|0);return}function cg(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+48|0;z=A+16|0;m=A;w=A+32|0;x=A+28|0;n=c[f+116>>2]|0;v=c[f+20>>2]|0;bg(f);r=c[f+40>>2]|0;p=v+36|0;q=f+48|0;l=e[q>>1]|0;if((r-(c[n+56>>2]|0)|0)>>>0>((c[p>>2]|0)-l|0)>>>0){c[m>>2]=32306;c[m+4>>2]=67944;c[m+8>>2]=31517;Db(11,32001,m);z=11;Ra=A;return z|0}if(l>>>0>g>>>0){o=(h+g|0)>>>0>l>>>0?l-g|0:h;g=r+g|0;l=c[n+72>>2]|0;a:do if(!j){ew(i|0,g|0,o|0)|0;k=0}else{m=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){k=Ve(l)|0;y=13}}else y=9;do if((y|0)==9){k=c[m+40>>2]|0;if(k|0)break a;if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){k=Wf(l)|0;y=13;break}else{k=Xf(l)|0;y=13;break}}while(0);if((y|0)==13?k|0:0)break;ew(g|0,i|0,o|0)|0;k=0}while(0);s=0;h=h-o|0;i=i+o|0}else{s=g-l|0;k=0}do if((k|0)==0&(h|0)!=0){l=c[p>>2]|0;t=l+-4|0;k=e[q>>1]|0;o=r+k|0;o=(d[o+1>>0]|0)<<16|(d[o>>0]|0)<<24|(d[o+2>>0]|0)<<8|(d[o+3>>0]|0);c[w>>2]=o;n=f+1|0;do if(a[n>>0]&4){k=(s>>>0)/(t>>>0)|0;l=c[(c[f+12>>2]|0)+(k<<2)>>2]|0;if(!l)y=28;else{c[w>>2]=l;g=k;m=s-(G(k,t)|0)|0;y=29}}else{g=((l+-5-k+(c[f+44>>2]|0)|0)>>>0)/(t>>>0)|0;m=f+12|0;k=c[m>>2]|0;if(k){l=g<<2;r=(l|0)>(Wa[c[29352>>2]&127](k)|0);k=c[m>>2]|0;if(r)y=23}else y=23;if((y|0)==23){k=sb(k,g<<3,0)|0;if(!k){k=7;break}c[m>>2]=k;l=g<<2}gw(k|0,0,l|0)|0;a[n>>0]=a[n>>0]|4;y=28}while(0);if((y|0)==28)if(!o){k=0;y=55}else{g=0;m=s;l=o;y=29}b:do if((y|0)==29){r=f+12|0;p=(j|0)==0;q=p?2:0;o=g;while(1){k=c[r>>2]|0;c[k+(o<<2)>>2]=l;if(m>>>0<t>>>0){n=(m+h|0)>>>0>t>>>0?t-m|0:h;k=c[v>>2]|0;k=Za[c[k+204>>2]&127](k,l,x,q)|0;do if(!k){g=c[x>>2]|0;l=c[g+4>>2]|0;c[w>>2]=(d[l+1>>0]|0)<<16|(d[l>>0]|0)<<24|(d[l+2>>0]|0)<<8|(d[l+3>>0]|0);l=l+(m+4)|0;c:do if(p){ew(i|0,l|0,n|0)|0;k=0}else{m=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){u=Ve(g)|0;y=46}}else y=42;do if((y|0)==42){y=0;k=c[m+40>>2]|0;if(k|0)break c;if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){u=Wf(g)|0;y=46;break}else{u=Xf(g)|0;y=46;break}}while(0);if((y|0)==46?(y=0,u|0):0){k=u;break}ew(l|0,i|0,n|0)|0;k=0}while(0);l=c[x>>2]|0;if(l)if(!(b[l+28>>1]&32)){Df(l);m=0;break}else{m=c[l+20>>2]|0;j=m+120|0;c[j>>2]=(c[j>>2]|0)+-1;m=m+136|0;c[l+16>>2]=c[m>>2];c[m>>2]=l;m=0;break}else m=0}while(0);h=h-n|0;if(!h)break b;else g=i+n|0}else{k=c[k+(o+1<<2)>>2]|0;if(!k)k=dg(v,l,0,w)|0;else{c[w>>2]=k;k=0}g=i;m=m-t|0}if(k|0){y=55;break b}l=c[w>>2]|0;if(!l){k=0;y=55;break}else{i=g;o=o+1|0}}}while(0);if((y|0)==55)break;z=k;Ra=A;return z|0}while(0);if(!((k|0)==0&(h|0)!=0)){z=k;Ra=A;return z|0}c[z>>2]=32306;c[z+4>>2]=68089;c[z+8>>2]=31517;Db(11,32001,z);z=11;Ra=A;return z|0}function dg(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;o=s;l=s+4|0;do if(a[e+17>>0]|0){m=e+36|0;k=1073741824/((c[e+32>>2]|0)>>>0)|0;p=f;do{i=p;p=p+1|0;if(p>>>0<2)j=0;else{j=i+-1|0;j=j-((j>>>0)%(((((c[m>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;j=((j+1|0)==(k|0)?3:2)+j|0}}while((j|0)==(p|0)|(i|0)==(k|0));if(p>>>0<=(c[e+44>>2]|0)>>>0?(n=eg(e,p,l,o)|0,m=(n|0)==0,q=m&(a[l>>0]|0)==4&(c[o>>2]|0)==(f|0),q|m^1):0){k=0;j=q?101:n;i=q?p:0;break}else{r=9;break}}else r=9;while(0);do if((r|0)==9){i=c[e>>2]|0;i=Za[c[i+204>>2]&127](i,f,o,(g|0)==0?2:0)|0;if(i|0){k=0;j=i;i=0;break}i=c[o>>2]|0;k=c[i+8>>2]|0;j=k+4|0;if((c[j>>2]|0)==(f|0))i=c[k+56>>2]|0;else{r=c[i+4>>2]|0;c[k+56>>2]=r;c[k+72>>2]=i;c[k+52>>2]=e;c[j>>2]=f;a[k+9>>0]=(f|0)==1?100:0;i=r}j=0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0]}while(0);c[h>>2]=i;if(g|0){c[g>>2]=k;h=(j|0)==101;h=h?0:j;Ra=s;return h|0}if(!k){h=(j|0)==101;h=h?0:j;Ra=s;return h|0}i=c[k+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);h=(j|0)==101;h=h?0:j;Ra=s;return h|0}else{h=c[i+20>>2]|0;g=h+120|0;c[g>>2]=(c[g>>2]|0)+-1;h=h+136|0;c[i+16>>2]=c[h>>2];c[h>>2]=i;h=(j|0)==101;h=h?0:j;Ra=s;return h|0}return 0}function eg(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;n=o+16|0;m=o;i=o+28|0;if(f>>>0<2)l=0;else{l=f+-2|0;l=l-((l>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;l=((l+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+l|0}e=c[e>>2]|0;e=Za[c[e+204>>2]&127](e,l,i,0)|0;if(e|0){n=e;Ra=o;return n|0}k=c[i>>2]|0;j=c[k+4>>2]|0;e=(f-l|0)*5|0;i=e+-5|0;if((i|0)<0){do if(k|0)if(!(b[k+28>>1]&32)){Df(k);break}else{n=c[k+20>>2]|0;h=n+120|0;c[h>>2]=(c[h>>2]|0)+-1;n=n+136|0;c[k+16>>2]=c[n>>2];c[n>>2]=k;break}while(0);c[m>>2]=32306;c[m+4>>2]=64247;c[m+8>>2]=31517;Db(11,32001,m);n=11;Ra=o;return n|0}a[g>>0]=a[j+i>>0]|0;if(h|0){m=j+(e+-4)|0;c[h>>2]=(d[m+1>>0]|0)<<16|(d[m>>0]|0)<<24|(d[m+2>>0]|0)<<8|(d[m+3>>0]|0)}do if(k|0)if(!(b[k+28>>1]&32)){Df(k);break}else{m=c[k+20>>2]|0;h=m+120|0;c[h>>2]=(c[h>>2]|0)+-1;m=m+136|0;c[k+16>>2]=c[m>>2];c[m>>2]=k;break}while(0);if(((a[g>>0]|0)+-1&255)<=4){n=0;Ra=o;return n|0}c[n>>2]=32306;c[n+4>>2]=64255;c[n+8>>2]=31517;Db(11,32001,n);n=11;Ra=o;return n|0}function fg(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+160|0;r=Z+144|0;o=Z+128|0;T=Z+112|0;R=Z+96|0;U=Z+80|0;Q=Z+64|0;P=Z+48|0;V=Z+32|0;S=Z+16|0;j=Z;Y=Z+156|0;q=e+12|0;k=c[q>>2]|0;p=e+44|0;W=c[p>>2]|0;O=k+56|0;N=c[O>>2]|0;N=d[N+37>>0]<<16|d[N+36>>0]<<24|d[N+38>>0]<<8|d[N+39>>0];if(N>>>0>=W>>>0){c[j>>2]=32306;c[j+4>>2]=69057;c[j+8>>2]=31517;Db(11,32001,j);f=11;Ra=Z;return f|0}if(!N){i=(a[e+19>>0]|0)==0&1;k=c[k+72>>2]|0;l=c[k+20>>2]|0;if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0))k=W;else{j=Ve(k)|0;X=190}else X=186;do if((X|0)==186){j=c[l+40>>2]|0;if(j|0){f=j;Ra=Z;return f|0}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(k)|0;X=190;break}else{j=Xf(k)|0;X=190;break}}while(0);do if((X|0)==190)if(!j){k=c[p>>2]|0;break}else{f=j;Ra=Z;return f|0}while(0);j=k+1|0;c[p>>2]=j;n=e+32|0;l=1073741824/((c[n>>2]|0)>>>0)|0;if((k|0)==(l|0)){j=k+2|0;c[p>>2]=j}if(a[e+17>>0]|0){if(j>>>0<2)k=0;else{k=j+-2|0;k=k-((k>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(l|0)?3:2)+k|0}if((k|0)==(j|0)){k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,j,Y,i)|0;if(k|0){f=k;Ra=Z;return f|0}k=c[Y>>2]|0;m=c[k+8>>2]|0;l=m+4|0;if((c[l>>2]|0)==(j|0))j=c[m+72>>2]|0;else{c[m+56>>2]=c[k+4>>2];c[m+72>>2]=k;c[m+52>>2]=e;c[l>>2]=j;a[m+9>>0]=(j|0)==1?100:0;j=k}if((b[j+30>>1]|0)>1){j=c[m+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[o>>2]=32306;c[o+4>>2]=65442;c[o+8>>2]=31517;Db(11,32001,o);f=11;Ra=Z;return f|0}a[m>>0]=0;m=m+72|0;j=c[m>>2]|0;l=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0))k=0;else k=Ve(j)|0;else X=212;do if((X|0)==212){k=c[l+40>>2]|0;if(!k)if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){k=Wf(j)|0;break}else{k=Xf(j)|0;break}}while(0);j=c[m>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{X=c[j+20>>2]|0;W=X+120|0;c[W>>2]=(c[W>>2]|0)+-1;X=X+136|0;c[j+16>>2]=c[X>>2];c[X>>2]=j}if(k|0){f=k;Ra=Z;return f|0}k=c[p>>2]|0;j=k+1|0;c[p>>2]=j;if((k|0)==(1073741824/((c[n>>2]|0)>>>0)|0|0)){j=k+2|0;c[p>>2]=j}}}m=c[(c[q>>2]|0)+56>>2]|0;a[m+28>>0]=j>>>24;a[m+29>>0]=j>>>16;a[m+30>>0]=j>>>8;a[m+31>>0]=j;m=c[p>>2]|0;c[g>>2]=m;j=c[e>>2]|0;j=Za[c[j+204>>2]&127](j,m,Y,i)|0;if(j|0){c[f>>2]=0;f=j;Ra=Z;return f|0}j=c[Y>>2]|0;k=c[j+8>>2]|0;l=k+4|0;if((c[l>>2]|0)==(m|0))j=k+72|0;else{c[k+56>>2]=c[j+4>>2];Y=k+72|0;c[Y>>2]=j;c[k+52>>2]=e;c[l>>2]=m;a[k+9>>0]=(m|0)==1?100:0;j=Y}c[f>>2]=k;m=c[j>>2]|0;if((b[m+30>>1]|0)>1){do if(k|0)if(!(b[m+28>>1]&32)){Df(m);break}else{e=c[m+20>>2]|0;Y=e+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;e=e+136|0;c[m+16>>2]=c[e>>2];c[e>>2]=m;break}while(0);c[f>>2]=0;c[r>>2]=32306;c[r+4>>2]=65442;c[r+8>>2]=31517;Db(11,32001,r);f=11;Ra=Z;return f|0}a[k>>0]=0;l=c[m+20>>2]|0;do if((b[m+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[m+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){f=0;Ra=Z;return f|0}else{j=Ve(m)|0;X=241;break}else X=237;while(0);do if((X|0)==237){j=c[l+40>>2]|0;if(!j)if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(m)|0;X=241;break}else{j=Xf(m)|0;X=241;break}else X=243}while(0);do if((X|0)==241)if(j){k=c[f>>2]|0;if(!k)break;else{X=243;break}}else{f=0;Ra=Z;return f|0}while(0);do if((X|0)==243){k=c[k+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);break}else{e=c[k+20>>2]|0;Y=e+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;e=e+136|0;c[k+16>>2]=c[e>>2];c[e>>2]=k;break}}while(0);c[f>>2]=0;f=j;Ra=Z;return f|0}a:do switch(i<<24>>24){case 1:{if(W>>>0<h>>>0)n=0;else{j=eg(e,h,Y,0)|0;if(!j){n=(a[Y>>0]|0)==2&1;break a}f=j;Ra=Z;return f|0}break}case 2:{n=1;break}default:n=0}while(0);k=c[k+72>>2]|0;l=c[k+20>>2]|0;if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0){if(c[l+96>>2]|0){m=Ve(k)|0;X=18}}else X=14;do if((X|0)==14){j=c[l+40>>2]|0;if(j|0){f=j;Ra=Z;return f|0}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){m=Wf(k)|0;X=18;break}else{m=Xf(k)|0;X=18;break}}while(0);if((X|0)==18?m|0:0){f=m;Ra=Z;return f|0}F=c[O>>2]|0;H=N+-1|0;a[F+36>>0]=H>>>24;a[F+37>>0]=H>>>16;a[F+38>>0]=H>>>8;a[F+39>>0]=H;F=e+36|0;H=(h|0)==0;E=i<<24>>24==2;D=e+60|0;C=0;l=0;b:while(1){B=l;x=(l|0)!=0;if(x){k=c[B+56>>2]|0;j=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8;k=k+3|0}else{k=c[O>>2]|0;j=d[k+33>>0]<<16|d[k+32>>0]<<24|d[k+34>>0]<<8;k=k+35|0}i=j|d[k>>0];if(i>>>0>W>>>0){X=25;break}if(C>>>0>N>>>0){X=25;break}C=C+1|0;k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,i,Y,0)|0;if(k|0){X=35;break}j=c[Y>>2]|0;A=c[j+8>>2]|0;k=A+4|0;if((c[k>>2]|0)==(i|0))v=c[A+72>>2]|0;else{c[A+56>>2]=c[j+4>>2];c[A+72>>2]=j;c[A+52>>2]=e;c[k>>2]=i;a[A+9>>0]=(i|0)==1?100:0;v=j}j=A;if((b[v+30>>1]|0)>1){X=31;break}a[A>>0]=0;y=A+56|0;w=c[y>>2]|0;r=w+4|0;s=w+5|0;t=w+6|0;u=w+7|0;z=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0];q=n<<24>>24!=0;c:do if(q|(z|0)!=0){if(z>>>0>(((c[F>>2]|0)>>>2)+-2|0)>>>0){X=49;break b}if(n<<24>>24?(i|0)==(h|0)|E&i>>>0<h>>>0:0){c[g>>2]=i;c[f>>2]=j;j=c[A+72>>2]|0;m=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){I=Ve(j)|0;X=60}}else X=56;do if((X|0)==56){k=c[m+40>>2]|0;if(k|0){X=251;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){I=Wf(j)|0;X=60;break}else{I=Xf(j)|0;X=60;break}}while(0);if((X|0)==60?(X=0,I|0):0){X=248;break b}if(!z){if(!x){X=63;break b}i=B+72|0;j=c[i>>2]|0;m=c[j+20>>2]|0;do if(!(b[j+28>>1]&4))X=68;else{if((c[m+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){X=68;break}if(!(c[m+96>>2]|0))break;J=Ve(j)|0;X=72}while(0);do if((X|0)==68){k=c[m+40>>2]|0;if(k|0){X=252;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){J=Wf(j)|0;X=72;break}else{J=Xf(j)|0;X=72;break}}while(0);if((X|0)==72?(0,J|0):0){X=249;break b}n=c[B+56>>2]|0;k=c[y>>2]|0;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;n=0;k=0;l=i;j=0;X=178;break}s=c[y>>2]|0;p=a[s+8>>0]|0;q=a[s+9>>0]|0;r=a[s+10>>0]|0;s=a[s+11>>0]|0;m=(q&255)<<16|(p&255)<<24|(r&255)<<8|s&255;if(m>>>0>W>>>0){X=75;break b}k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,m,Y,0)|0;if(k|0){X=85;break b}j=c[Y>>2]|0;o=c[j+8>>2]|0;k=o+4|0;if((c[k>>2]|0)==(m|0))j=c[o+72>>2]|0;else{c[o+56>>2]=c[j+4>>2];c[o+72>>2]=j;c[o+52>>2]=e;c[k>>2]=m;a[o+9>>0]=(m|0)==1?100:0}if((b[j+30>>1]|0)>1){X=81;break b}a[o>>0]=0;j=o+72|0;n=c[j>>2]|0;i=c[n+20>>2]|0;m=b[n+28>>1]|0;do if(!(m&4))X=90;else{if((c[i+24>>2]|0)>>>0<(c[n+24>>2]|0)>>>0){X=90;break}if(!(c[i+96>>2]|0))break;K=Ve(n)|0;X=94}while(0);do if((X|0)==90){k=c[i+40>>2]|0;if(k|0){X=96;break b}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){K=Wf(n)|0;X=94;break}else{K=Xf(n)|0;X=94;break}}while(0);if((X|0)==94?(X=0,K|0):0){X=95;break b}w=o+56|0;v=c[w>>2]|0;u=c[y>>2]|0;u=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;a[v>>0]=u;a[v+1>>0]=u>>8;a[v+2>>0]=u>>16;a[v+3>>0]=u>>24;v=c[w>>2]|0;z=z+-1|0;a[v+4>>0]=z>>>24;a[v+5>>0]=z>>>16;a[v+6>>0]=z>>>8;a[v+7>>0]=z;ew((c[w>>2]|0)+8|0,(c[y>>2]|0)+12|0,z<<2|0)|0;j=c[j>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{z=c[j+20>>2]|0;y=z+120|0;c[y>>2]=(c[y>>2]|0)+-1;z=z+136|0;c[j+16>>2]=c[z>>2];c[z>>2]=j}if(!x){X=103;break b}i=B+72|0;j=c[i>>2]|0;m=c[j+20>>2]|0;do if(!(b[j+28>>1]&4))X=108;else{if((c[m+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){X=108;break}if(!(c[m+96>>2]|0))break;L=Ve(j)|0;X=112}while(0);do if((X|0)==108){k=c[m+40>>2]|0;if(k|0){X=254;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){L=Wf(j)|0;X=112;break}else{L=Xf(j)|0;X=112;break}}while(0);if((X|0)==112?(0,L|0):0){X=253;break b}n=c[B+56>>2]|0;a[n>>0]=p;a[n+1>>0]=q;a[n+2>>0]=r;a[n+3>>0]=s;n=0;k=0;l=i;j=0;X=178;break}if(z){d:do if(!H)if(E){k=0;while(1){y=w+((k<<2)+8)|0;if((d[y+1>>0]<<16|d[y>>0]<<24|d[y+2>>0]<<8|d[y+3>>0])>>>0<=h>>>0){i=k;break d}k=k+1|0;if(k>>>0>=z>>>0){i=0;break}}}else{k=(d[w+9>>0]<<16|d[w+8>>0]<<24|d[w+10>>0]<<8|d[w+11>>0])-h|0;if(z>>>0<=1){i=0;break}m=(k|0)>-1?k:(k|0)==-2147483648?2147483647:0-k|0;k=0;i=1;while(1){p=w+((i<<2)+8)|0;p=(d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0])-h|0;p=(p|0)>-1?p:(p|0)==-2147483648?2147483647:0-p|0;o=(p|0)<(m|0);k=o?i:k;i=i+1|0;if((i|0)==(z|0)){i=k;break}else m=o?p:m}}else i=0;while(0);o=w+((i<<2)+8)|0;k=d[o+1>>0]<<16|d[o>>0]<<24|d[o+2>>0]<<8|d[o+3>>0];if(k>>>0>W>>>0){X=124;break b}if((k|0)==(h|0)|q^1|E&k>>>0<h>>>0){c[g>>2]=k;m=c[v+20>>2]|0;do if(!(b[v+28>>1]&4))X=130;else{if((c[m+24>>2]|0)>>>0<(c[v+24>>2]|0)>>>0){X=130;break}if(!(c[m+96>>2]|0))break;M=Ve(v)|0;X=134}while(0);do if((X|0)==130){k=c[m+40>>2]|0;if(k|0){X=256;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){M=Wf(v)|0;X=134;break}else{M=Xf(v)|0;X=134;break}}while(0);if((X|0)==134?(0,M|0):0){X=255;break b}k=z+-1|0;if(i>>>0<k>>>0){X=w+((z<<2)+4)|0;X=d[X>>0]|d[X+1>>0]<<8|d[X+2>>0]<<16|d[X+3>>0]<<24;a[o>>0]=X;a[o+1>>0]=X>>8;a[o+2>>0]=X>>16;a[o+3>>0]=X>>24}a[r>>0]=k>>>24;a[s>>0]=k>>>16;a[t>>0]=k>>>8;a[u>>0]=k;p=c[g>>2]|0;i=c[D>>2]|0;e:do if(!i)k=0;else{k=c[i>>2]|0;if(k>>>0<p>>>0){k=1;break}m=p+-1|0;if(m>>>0>=k>>>0){k=0;break}n=c[i+8>>2]|0;if(n){o=i;do{k=(m>>>0)/(n>>>0)|0;o=c[o+12+(k<<2)>>2]|0;if(!o){k=0;break e}m=m-(G(k,n)|0)|0;n=c[o+8>>2]|0}while((n|0)!=0);i=o;k=c[o>>2]|0}if(k>>>0<4001){k=(1<<(m&7)&d[i+12+(m>>>3)>>0]|0)!=0&1;break}n=m+1|0;k=(m>>>0)%125|0;m=c[i+12+(k<<2)>>2]|0;if(!m){k=0;break}while(1){if((m|0)==(n|0)){k=1;break e}k=((k+1|0)>>>0)%125|0;m=c[i+12+(k<<2)>>2]|0;if(!m){k=0;break}}}while(0);X=c[e>>2]|0;k=Za[c[X+204>>2]&127](X,p,Y,k^1)|0;if(k|0){c[f>>2]=0;n=0;X=176;break}k=c[Y>>2]|0;m=c[k+8>>2]|0;n=m+4|0;if((c[n>>2]|0)==(p|0))k=m+72|0;else{c[m+56>>2]=c[k+4>>2];X=m+72|0;c[X>>2]=k;c[m+52>>2]=e;c[n>>2]=p;a[m+9>>0]=(p|0)==1?100:0;k=X}c[f>>2]=m;if((b[(c[k>>2]|0)+30>>1]|0)>1){do if(m|0){k=c[m+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);break}else{X=c[k+20>>2]|0;A=X+120|0;c[A>>2]=(c[A>>2]|0)+-1;X=X+136|0;c[k+16>>2]=c[X>>2];c[X>>2]=k;break}}while(0);c[f>>2]=0;c[T>>2]=32306;c[T+4>>2]=65442;c[T+8>>2]=31517;Db(11,32001,T);n=0;k=11;X=176;break}a[m>>0]=0;n=c[m+72>>2]|0;i=c[n+20>>2]|0;do if(!(b[n+28>>1]&4))X=166;else{if((c[i+24>>2]|0)>>>0<(c[n+24>>2]|0)>>>0){X=166;break}if(!(c[i+96>>2]|0)){n=0;k=0;X=176;break c}k=Ve(n)|0;X=170}while(0);do if((X|0)==166){k=c[i+40>>2]|0;if(k|0){X=172;break}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){k=Wf(n)|0;X=170;break}else{k=Xf(n)|0;X=170;break}}while(0);if((X|0)==170){X=0;if(!k){n=0;k=0;X=176;break}m=c[f>>2]|0;if(m)X=172}do if((X|0)==172){m=c[m+72>>2]|0;if(!(b[m+28>>1]&32)){Df(m);break}else{X=c[m+20>>2]|0;A=X+120|0;c[A>>2]=(c[A>>2]|0)+-1;X=X+136|0;c[m+16>>2]=c[X>>2];c[X>>2]=m;break}}while(0);c[f>>2]=0;n=0;X=176}else{k=0;X=176}}else{k=0;X=176}}else{m=c[v+20>>2]|0;if((b[v+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[v+24>>2]|0)>>>0:0)if(!(c[m+96>>2]|0))k=w;else{k=Ve(v)|0;X=45}else X=41;do if((X|0)==41){k=c[m+40>>2]|0;if(k|0){X=250;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){k=Wf(v)|0;X=45;break}else{k=Xf(v)|0;X=45;break}}while(0);if((X|0)==45){if(k|0){X=247;break b}k=c[y>>2]|0}c[g>>2]=i;n=(c[O>>2]|0)+32|0;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;c[f>>2]=j;n=0;k=0;j=0;X=176}while(0);if((X|0)==176){X=0;if(l){l=B+72|0;X=178}}do if((X|0)==178){X=0;l=c[l>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{B=c[l+20>>2]|0;A=B+120|0;c[A>>2]=(c[A>>2]|0)+-1;B=B+136|0;c[l+16>>2]=c[B>>2];c[B>>2]=l;break}}while(0);if(!(n<<24>>24)){l=0;X=257;break}else l=j}switch(X|0){case 25:{c[S>>2]=32306;c[S+4>>2]=69113;c[S+8>>2]=31517;Db(11,32001,S);j=l;k=11;break}case 31:{j=c[A+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[V>>2]=32306;c[V+4>>2]=65442;c[V+8>>2]=31517;Db(11,32001,V);j=l;k=11;break}case 35:{j=l;break}case 49:{c[P>>2]=32306;c[P+4>>2]=69142;c[P+8>>2]=31517;Db(11,32001,P);k=11;j=A;X=257;break}case 63:{f=(c[O>>2]|0)+32|0;e=c[y>>2]|0;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;a[f>>0]=e;a[f+1>>0]=e>>8;a[f+2>>0]=e>>16;a[f+3>>0]=e>>24;f=0;Ra=Z;return f|0}case 75:{c[Q>>2]=32306;c[Q+4>>2]=69176;c[Q+8>>2]=31517;Db(11,32001,Q);k=11;j=A;X=257;break}case 81:{j=c[o+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[U>>2]=32306;c[U+4>>2]=65442;c[U+8>>2]=31517;Db(11,32001,U);k=11;j=A;X=257;break}case 85:{j=A;X=257;break}case 95:{m=c[j>>2]|0;k=K;n=m;m=b[m+28>>1]|0;X=96;break}case 103:{f=c[O>>2]|0;a[f+32>>0]=p;a[f+33>>0]=q;a[f+34>>0]=r;a[f+35>>0]=s;f=0;Ra=Z;return f|0}case 124:{c[R>>2]=32306;c[R+4>>2]=69241;c[R+8>>2]=31517;Db(11,32001,R);k=11;j=A;X=257;break}case 247:{j=A;X=257;break}case 248:{k=I;j=A;X=257;break}case 249:{k=J;j=A;X=257;break}case 250:{j=A;X=257;break}case 251:{j=A;X=257;break}case 252:{j=A;X=257;break}case 253:{k=L;j=A;X=257;break}case 254:{j=A;X=257;break}case 255:{k=M;j=A;X=257;break}case 256:{j=A;X=257;break}}do if((X|0)==96){j=A;if(!(m&32)){Df(n);X=257;break}else{X=c[n+20>>2]|0;f=X+120|0;c[f>>2]=(c[f>>2]|0)+-1;X=X+136|0;c[n+16>>2]=c[X>>2];c[X>>2]=n;X=257;break}}while(0);do if((X|0)==257)if(j){j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);j=l;break}else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;j=l;break}}else j=l;while(0);if(!j){f=k;Ra=Z;return f|0}j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);f=k;Ra=Z;return f|0}else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;f=k;Ra=Z;return f|0}return 0}function gg(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=Ra;Ra=Ra+112|0;P=S+88|0;N=S+72|0;L=S+56|0;q=S+40|0;l=S+24|0;M=S;R=S+100|0;H=g+4|0;Q=c[H>>2]|0;F=c[f>>2]|0;if(Q>>>0<3){c[l>>2]=32306;c[l+4>>2]=66838;c[l+8>>2]=31517;Db(11,32001,l);R=11;Ra=S;return R|0}C=c[g+72>>2]|0;D=F+12|0;a:do if(a[D>>0]|0){n=c[C+20>>2]|0;p=C+28|0;if((b[p>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[C+24>>2]|0)>>>0:0){if(!(c[n+96>>2]|0)){O=14;break}l=Ve(C)|0}else O=9;do if((O|0)==9){l=c[n+40>>2]|0;if(l|0)break a;if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){l=Wf(C)|0;break}else{l=Xf(C)|0;break}}while(0);if(!l)O=14}else{p=C+28|0;O=14}while(0);b:do if((O|0)==14){l=b[p>>1]|0;if(l&2){l=Ve(C)|0;if(l|0)break;l=b[p>>1]|0}if((k|0)!=0|(l&8)==0)E=0;else E=c[C+24>>2]|0;b[p>>1]=l&-9;l=F+212|0;n=Ya[c[29436>>2]&127](c[(c[l>>2]|0)+44>>2]|0,j,0)|0;do if(n){l=c[l>>2]|0;k=c[n+4>>2]|0;if(!(c[k>>2]|0)){l=sf(l,j,n)|0;if(!l){A=0;y=0;break}x=l;y=1;l=b[l+30>>1]|0}else{x=l+12|0;c[x>>2]=(c[x>>2]|0)+1;x=k+30|0;l=(b[x>>1]|0)+1<<16>>16;b[x>>1]=l;x=k;y=(k|0)!=0}k=x+28|0;n=b[k>>1]|0;if(l<<16>>16>1){if(!(n&32))Df(x);else{j=c[x+20>>2]|0;i=j+120|0;c[i>>2]=(c[i>>2]|0)+-1;j=j+136|0;c[x+16>>2]=c[j>>2];c[j>>2]=x}c[q>>2]=32306;c[q+4>>2]=57762;c[q+8>>2]=31517;Db(11,32001,q);l=11;break b}b[p>>1]=b[p>>1]|n&8;if(!(a[D>>0]|0)){s=c[x+12>>2]|0;do if(b[k>>1]&2){l=s+8|0;n=x+36|0;k=c[n>>2]|0;if((c[l>>2]|0)==(x|0))c[l>>2]=k;q=c[x+32>>2]|0;r=(q|0)==0;if(r){c[s+4>>2]=k;l=k}else{c[q+36>>2]=k;l=c[n>>2]|0}if(l|0){c[l+32>>2]=q;break}c[s>>2]=q;if(r)a[s+33>>0]=2}while(0);A=s+12|0;c[A>>2]=(c[A>>2]|0)+-1;cb[c[29440>>2]&255](c[s+44>>2]|0,c[x>>2]|0,1);A=x;break}A=(c[F+24>>2]|0)+1|0;l=x+12|0;w=x+24|0;db[c[29444>>2]&127](c[(c[l>>2]|0)+44>>2]|0,c[x>>2]|0,c[w>>2]|0,A);c[w>>2]=A;w=b[k>>1]|0;if((w&10)==10){t=c[l>>2]|0;v=t+8|0;l=c[v>>2]|0;s=x+36|0;k=c[s>>2]|0;if((l|0)==(x|0)){c[v>>2]=k;u=k}else u=l;r=x+32|0;n=c[r>>2]|0;q=(n|0)==0;if(q){c[t+4>>2]=k;l=k}else{c[n+36>>2]=k;l=c[s>>2]|0}do if(!l){c[t>>2]=n;if(q){a[t+33>>0]=2;c[s>>2]=0;c[r>>2]=0;l=t;O=42;break}else{c[s>>2]=0;l=t;O=41;break}}else{c[l+32>>2]=n;n=c[t>>2]|0;c[s>>2]=0;c[r>>2]=n;if(!n){l=t;O=42}else{l=t;O=41}}while(0);if((O|0)==41)c[n+36>>2]=x;else if((O|0)==42){c[t+4>>2]=x;if(a[t+32>>0]|0)a[t+33>>0]=1}c[l>>2]=x;if((w&8)==0&(u|0)==0){c[v>>2]=x;A=x}else A=x}else A=x}else{A=0;y=0}while(0);v=C+24|0;z=c[v>>2]|0;x=C+12|0;db[c[29444>>2]&127](c[(c[x>>2]|0)+44>>2]|0,c[C>>2]|0,z,j);c[v>>2]=j;v=b[p>>1]|0;if((v&10)==10){t=c[x>>2]|0;w=t+8|0;l=c[w>>2]|0;s=C+36|0;k=c[s>>2]|0;if((l|0)==(C|0)){c[w>>2]=k;u=k}else u=l;r=C+32|0;n=c[r>>2]|0;q=(n|0)==0;if(q){c[t+4>>2]=k;l=k}else{c[n+36>>2]=k;l=c[s>>2]|0}do if(!l){c[t>>2]=n;if(q){a[t+33>>0]=2;c[s>>2]=0;c[r>>2]=0;l=t;O=69;break}else{c[s>>2]=0;l=t;O=68;break}}else{c[l+32>>2]=n;n=c[t>>2]|0;c[s>>2]=0;c[r>>2]=n;if(!n){l=t;O=69}else{l=t;O=68}}while(0);if((O|0)==68)c[n+36>>2]=C;else if((O|0)==69){c[t+4>>2]=C;if(a[t+32>>0]|0)a[t+33>>0]=1}c[l>>2]=C;if((v&8)==0&(u|0)==0)c[w>>2]=C}l=v&65535;if(l&17|0?(B=l&65519,b[p>>1]=B,l&1|0):0){k=(B^3)&65535;b[p>>1]=k;l=c[x>>2]|0;c[C+36>>2]=0;n=c[l>>2]|0;c[C+32>>2]=n;if(!n){c[l+4>>2]=C;if(a[l+32>>0]|0)a[l+33>>0]=1}else c[n+36>>2]=C;c[l>>2]=C;l=l+8|0;if((k&8)==0&(c[l>>2]|0)==0)c[l>>2]=C}do if(y&(a[D>>0]|0)!=0){l=A+12|0;v=A+24|0;db[c[29444>>2]&127](c[(c[l>>2]|0)+44>>2]|0,c[A>>2]|0,c[v>>2]|0,z);c[v>>2]=z;v=b[A+28>>1]|0;if((v&10)==10){s=c[l>>2]|0;u=s+8|0;l=c[u>>2]|0;r=A+36|0;p=c[r>>2]|0;if((l|0)==(A|0)){c[u>>2]=p;t=p}else t=l;q=A+32|0;n=c[q>>2]|0;k=(n|0)==0;if(k){c[s+4>>2]=p;l=p}else{c[n+36>>2]=p;l=c[r>>2]|0}do if(!l){c[s>>2]=n;if(k){a[s+33>>0]=2;c[r>>2]=0;c[q>>2]=0;l=s;O=94;break}else{c[r>>2]=0;l=s;O=93;break}}else{c[l+32>>2]=n;n=c[s>>2]|0;c[r>>2]=0;c[q>>2]=n;if(!n){l=s;O=94}else{l=s;O=93}}while(0);if((O|0)==93)c[n+36>>2]=A;else if((O|0)==94){c[s+4>>2]=A;if(a[s+32>>0]|0)a[s+33>>0]=1}c[l>>2]=A;if((v&8)==0&(t|0)==0)c[u>>2]=A}if(!(v&32)){Df(A);break}else{D=c[A+20>>2]|0;C=D+120|0;c[C>>2]=(c[C>>2]|0)+-1;D=D+136|0;c[A+16>>2]=c[D>>2];c[D>>2]=A;break}}while(0);do if(E|0){r=Za[c[F+204>>2]&127](F,E,M,0)|0;if(!r){l=c[M>>2]|0;p=l+28|0;n=b[p>>1]|8;b[p>>1]=n;k=n&65535;if(k&17){o=k&65519;n=o&65535;b[p>>1]=n;if(k&1){b[p>>1]=o^3;n=c[l+12>>2]|0;c[l+36>>2]=0;o=c[n>>2]|0;c[l+32>>2]=o;if(!o){c[n+4>>2]=l;if(a[n+32>>0]|0)a[n+33>>0]=1}else c[o+36>>2]=l;c[n>>2]=l;l=c[M>>2]|0;n=b[l+28>>1]|0}}if(!(n&32))Df(l);else{J=c[l+20>>2]|0;F=J+120|0;c[F>>2]=(c[F>>2]|0)+-1;J=J+136|0;c[l+16>>2]=c[J>>2];c[J>>2]=l}break}if(E>>>0<=(c[F+28>>2]|0)>>>0?(o=c[F+56>>2]|0,J=c[F+208>>2]|0,o|0):0){l=E+-1|0;m=c[o+8>>2]|0;c:do if(!m)O=109;else while(1){n=(l>>>0)/(m>>>0)|0;o=c[o+12+(n<<2)>>2]|0;if(!o)break c;l=l-(G(n,m)|0)|0;m=c[o+8>>2]|0;if(!m){O=109;break}}while(0);do if((O|0)==109){if((c[o>>2]|0)>>>0<4001){j=o+12+(l>>>3)|0;a[j>>0]=(1<<(l&7)^255)&d[j>>0];break}q=o+12|0;ew(J|0,q|0,500)|0;gw(q|0,0,500)|0;q=o+4|0;c[q>>2]=0;p=l+1|0;n=0;do{k=J+(n<<2)|0;l=c[k>>2]|0;if(!((l|0)==0|(l|0)==(p|0))){m=((l+-1|0)>>>0)%125|0;c[q>>2]=(c[q>>2]|0)+1;l=o+12+(m<<2)|0;if(c[l>>2]|0)do{l=m+1|0;m=l>>>0>124?0:l;l=o+12+(m<<2)|0}while((c[l>>2]|0)!=0);c[l>>2]=c[k>>2]}n=n+1|0}while((n|0)!=125)}while(0);c[R>>2]=r;R=r;Ra=S;return R|0}c[R>>2]=r;R=r;Ra=S;return R|0}while(0);c[R>>2]=0;c[H>>2]=j;switch(h<<24>>24){case 1:case 5:{l=hg(g)|0;c[R>>2]=l;if(l|0){R=l;Ra=S;return R|0}if(h<<24>>24==1){R=0;Ra=S;return R|0}break}default:{l=c[g+56>>2]|0;l=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];if(l|0?(ig(f,l,4,j,R),I=c[R>>2]|0,I|0):0){R=I;Ra=S;return R|0}}}l=c[f>>2]|0;l=Za[c[l+204>>2]&127](l,i,M,0)|0;if(l|0){c[R>>2]=l;R=l;Ra=S;return R|0}l=c[M>>2]|0;v=c[l+8>>2]|0;n=v+4|0;if((c[n>>2]|0)==(i|0))w=v+72|0;else{c[v+56>>2]=c[l+4>>2];w=v+72|0;c[w>>2]=l;c[v+52>>2]=f;c[n>>2]=i;a[v+9>>0]=(i|0)==1?100:0}c[R>>2]=0;l=c[w>>2]|0;n=c[l+20>>2]|0;do if((b[l+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[n+96>>2]|0)){c[R>>2]=0;break}else{m=Ve(l)|0;O=152;break}else O=147;while(0);do if((O|0)==147){m=c[n+40>>2]|0;if(m|0){c[R>>2]=m;O=153;break}if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){m=Wf(l)|0;O=152;break}else{m=Xf(l)|0;O=152;break}}while(0);if((O|0)==152?(c[R>>2]=m,m|0):0)O=153;if((O|0)==153){if(!v){R=m;Ra=S;return R|0}l=c[w>>2]|0;if(!(b[l+28>>1]&32)){Df(l);R=m;Ra=S;return R|0}else{R=c[l+20>>2]|0;j=R+120|0;c[j>>2]=(c[j>>2]|0)+-1;R=R+136|0;c[l+16>>2]=c[R>>2];c[R>>2]=l;R=m;Ra=S;return R|0}}d:do if(h<<24>>24==4){l=c[v+56>>2]|0;m=l+1|0;n=l+2|0;o=l+3|0;if((d[m>>0]<<16|d[l>>0]<<24|d[n>>0]<<8|d[o>>0]|0)==(Q|0)){a[l>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;l=0;O=181;break}else{c[L>>2]=32306;c[L+4>>2]=66766;c[L+8>>2]=31517;Db(11,32001,L);l=11;O=181;break}}else{if((a[v>>0]|0)==0?(K=Gf(v)|0,K|0):0){l=K;O=181;break}L=b[v+24>>1]|0;u=L&65535;e:do if(L<<16>>16){n=v+56|0;t=v+26|0;s=v+64|0;o=v+80|0;p=M+16|0;k=M+12|0;q=M+18|0;r=v+52|0;if(h<<24>>24!=3){p=c[n>>2]|0;o=c[s>>2]|0;n=e[t>>1]|0;l=0;while(1){m=o+(l<<1)|0;m=p+((d[m>>0]<<8|d[m+1>>0])&n)|0;if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(Q|0))break;l=l+1|0;if(l>>>0>=u>>>0)break e}a[m>>0]=j>>>24;a[m+1>>0]=j>>>16;a[m+2>>0]=j>>>8;a[m+3>>0]=j;break}l=0;while(1){m=(c[s>>2]|0)+(l<<1)|0;m=(c[n>>2]|0)+((d[m>>0]<<8|d[m+1>>0])&e[t>>1])|0;cb[c[o>>2]&255](v,m,M);if((c[k>>2]|0)>>>0>(e[p>>1]|0)>>>0){m=m+(e[q>>1]|0)|0;if(m>>>0>((c[n>>2]|0)+(c[(c[r>>2]|0)+36>>2]|0)|0)>>>0){O=172;break}m=m+-4|0;if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(Q|0)){O=174;break}}l=l+1|0;if(l>>>0>=u>>>0)break e}if((O|0)==172){c[N>>2]=32306;c[N+4>>2]=66785;c[N+8>>2]=31517;Db(11,32001,N);l=11;O=181;break d}else if((O|0)==174){a[m>>0]=j>>>24;a[m+1>>0]=j>>>16;a[m+2>>0]=j>>>8;a[m+3>>0]=j;break}}else l=0;while(0);if((l|0)==(u|0)){do if(h<<24>>24==5){l=(c[v+56>>2]|0)+((d[v+9>>0]|0)+8)|0;m=l+1|0;n=l+2|0;o=l+3|0;if((d[m>>0]<<16|d[l>>0]<<24|d[n>>0]<<8|d[o>>0]|0)!=(Q|0))break;a[l>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;l=0;O=181;break d}while(0);c[P>>2]=32306;c[P+4>>2]=66803;c[P+8>>2]=31517;Db(11,32001,P);l=11}else l=0;c[R>>2]=l;if(v)O=183}while(0);if((O|0)==181){c[R>>2]=l;O=183}do if((O|0)==183){m=c[w>>2]|0;if(!(b[m+28>>1]&32)){Df(m);break}else{Q=c[m+20>>2]|0;P=Q+120|0;c[P>>2]=(c[P>>2]|0)+-1;Q=Q+136|0;c[m+16>>2]=c[Q>>2];c[Q>>2]=m;break}}while(0);if(l|0){R=l;Ra=S;return R|0}ig(f,j,h,i,R);R=c[R>>2]|0;Ra=S;return R|0}while(0);c[R>>2]=l;R=l;Ra=S;return R|0}function hg(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+48|0;x=B+24|0;t=B;y=B+36|0;u=f+52|0;z=c[u>>2]|0;w=f+4|0;A=c[w>>2]|0;if(!(a[f>>0]|0)){g=Gf(f)|0;c[y>>2]=g;if(g|0){A=g;Ra=B;return A|0}}else c[y>>2]=0;s=b[f+24>>1]|0;k=s&65535;a:do if(!(s<<16>>16))g=f+8|0;else{l=f+56|0;m=f+26|0;n=f+64|0;o=f+80|0;p=t+16|0;q=t+12|0;g=f+8|0;r=f+60|0;s=t+18|0;h=0;j=0;while(1){i=(c[n>>2]|0)+(h<<1)|0;i=(c[l>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[m>>1])|0;do if((j|0)==0?(cb[c[o>>2]&255](f,i,t),v=e[p>>1]|0,(c[q>>2]|0)>>>0>v>>>0):0){j=c[r>>2]|0;if(j>>>0>=i>>>0?j>>>0<(i+v|0)>>>0:0){c[x>>2]=32306;c[x+4>>2]=64569;c[x+8>>2]=31517;Db(11,32001,x);c[y>>2]=11;break}j=i+((e[s>>1]|0)+-4)|0;ig(c[u>>2]|0,d[j+1>>0]<<16|d[j>>0]<<24|d[j+2>>0]<<8|d[j+3>>0],3,c[w>>2]|0,y)}while(0);if(!(a[g>>0]|0))ig(z,d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0],5,A,y);h=h+1|0;if((h|0)==(k|0))break a;j=c[y>>2]|0}}while(0);if(!(a[g>>0]|0)){f=(c[f+56>>2]|0)+((d[f+9>>0]|0)+8)|0;ig(z,d[f+1>>0]<<16|d[f>>0]<<24|d[f+2>>0]<<8|d[f+3>>0],5,A,y)}A=c[y>>2]|0;Ra=B;return A|0}function ig(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+48|0;m=r+32|0;l=r+16|0;j=r;q=r+44|0;if(c[i>>2]|0){Ra=r;return}switch(f|0){case 0:{c[j>>2]=32306;c[j+4>>2]=64184;c[j+8>>2]=31517;Db(11,32001,j);c[i>>2]=11;Ra=r;return}case 1:{k=0;break}default:{k=f+-2|0;k=k-((k>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+k|0}}j=c[e>>2]|0;j=Za[c[j+204>>2]&127](j,k,q,0)|0;if(j|0){c[i>>2]=j;Ra=r;return}n=c[q>>2]|0;a:do if(!(a[c[n+8>>2]>>0]|0)){l=(f-k|0)*5|0;j=l+-5|0;if((j|0)<0){c[m>>2]=32306;c[m+4>>2]=64202;c[m+8>>2]=31517;Db(11,32001,m);c[i>>2]=11;break}f=c[n+4>>2]|0;e=f+j|0;if((a[e>>0]|0)==g<<24>>24?(m=f+(l+-4)|0,(d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(h|0)):0)break;k=c[n+20>>2]|0;do if((b[n+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[n+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[i>>2]=0;break}else{o=Ve(n)|0;p=23;break}else p=18;while(0);do if((p|0)==18){j=c[k+40>>2]|0;if(j|0){c[i>>2]=j;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){o=Wf(n)|0;p=23;break}else{o=Xf(n)|0;p=23;break}}while(0);if((p|0)==23?(c[i>>2]=o,o|0):0)break;a[e>>0]=g;i=f+(l+-4)|0;a[i>>0]=h>>>24;a[i+1>>0]=h>>>16;a[i+2>>0]=h>>>8;a[i+3>>0]=h}else{c[l>>2]=32306;c[l+4>>2]=64197;c[l+8>>2]=31517;Db(11,32001,l);c[i>>2]=11}while(0);j=c[q>>2]|0;if(!j){Ra=r;return}if(!(b[j+28>>1]&32)){Df(j);Ra=r;return}else{q=c[j+20>>2]|0;i=q+120|0;c[i>>2]=(c[i>>2]|0)+-1;q=q+136|0;c[j+16>>2]=c[q>>2];c[q>>2]=j;Ra=r;return}}function jg(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!d){n=0;return n|0}n=d+4|0;g=c[n>>2]|0;c[g+4>>2]=c[d>>2];g=c[g+8>>2]|0;if(!g){n=0;return n|0}k=(f|0)==0;a:while(1){b:do if(k){f=g+16|0;h=c[f>>2]|0;if(h)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);m=58;break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);m=58;break}else m=58}else{l=g+1|0;if(a[l>>0]&1){f=g+16|0;h=c[f>>2]|0;if(!h){m=58;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);m=58;break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);m=58;break}}switch(a[g>>0]|0){case 0:{c[g+4>>2]=0;f=ag(g)|0;if(f|0){k=f;break a}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{o=c[h+20>>2]|0;p=o+120|0;c[p>>2]=(c[p>>2]|0)+-1;o=o+136|0;c[h+16>>2]=c[o>>2];c[o>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}break}case 2:{a[g>>0]=0;f=ag(g)|0;if(f|0){k=f;break a}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}break}default:break b}a[g>>0]=3;a[l>>0]=a[l>>0]&-15}while(0);if((m|0)==58){m=0;c[f>>2]=0;a[g>>0]=4;c[g+4>>2]=e}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}g=c[g+24>>2]|0;if(!g){f=0;m=71;break}}if((m|0)==71)return f|0;a[l>>0]=a[l>>0]&-15;f=c[n>>2]|0;c[f+4>>2]=c[d>>2];f=c[f+8>>2]|0;if(!f){p=k;return p|0}do{g=f+16|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;a[f>>0]=4;c[f+4>>2]=k;j=f+68|0;g=a[j>>0]|0;if(g<<24>>24>-1){if(g<<24>>24){i=0;do{h=c[(c[f+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[f+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{p=c[g+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[g+16>>2]=c[p>>2];c[p>>2]=g}a[j>>0]=-1}f=c[f+24>>2]|0}while((f|0)!=0);f=k;return f|0}function kg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;switch(d|0){case -16:{lg(a,e);return}case -15:case -17:case -7:case -14:case -13:{if(!e)return;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -9:{if((e|0)==0|(c[a+480>>2]|0)!=0)return;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(d|0)return;a=c[e+12>>2]|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -8:{if(!(c[e+4>>2]&16))return;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -11:{if(c[a+480>>2]|0){mg(a,e);return}if(!e)return;if(!((b[e+8>>1]&9216)==0?!(c[e+24>>2]|0):0))Cg(e);a=c[e+32>>2]|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -12:{if(c[a+480>>2]|0)return;a=c[e>>2]|0;f=e+12|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if(d|0)return;d=c[e+8>>2]|0;if(d|0)Wa[c[(c[d>>2]|0)+16>>2]&127](d)|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}f=e;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){f=a+300|0;c[e>>2]=c[f>>2];c[f>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}default:return}}function lg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b+4>>2]|0;a:do if(c[f+4>>2]&16){do if(a|0){d=a+480|0;if(!(c[d>>2]|0)){e=f;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[f>>2]=c[e>>2];c[e>>2]=f}else Xd(a,f);e=14;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);e=12;break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);e=12;break}}else e=12;while(0);if((e|0)==12)if(a){d=a+480|0;e=14}if((e|0)==14){if(c[d>>2]|0){Xd(a,b);return}f=b;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:do if((c[b+24>>2]|0)!=0?(f=c[b+20>>2]|0,(f|0)!=0):0){do if(a|0){d=a+480|0;if(!(c[d>>2]|0)){e=f;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[f>>2]=c[e>>2];c[e>>2]=f}else Xd(a,f);e=15;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);e=13;break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);e=13;break}}else e=13;while(0);if((e|0)==13)if(a){d=a+480|0;e=15}if((e|0)==15){if(c[d>>2]|0){Xd(a,b);return}f=b;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function ng(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;e=a+12|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(d|0)return;d=c[a+8>>2]|0;if(d|0)Wa[c[(c[d>>2]|0)+16>>2]&127](d)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,a);return}e=a;if((c[b+304>>2]|0)>>>0<=e>>>0?(c[b+308>>2]|0)>>>0>e>>>0:0){e=b+300|0;c[a>>2]=c[e>>2];c[e>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function og(b){b=b|0;var d=0;d=b+81|0;if(a[d>>0]|0?(c[b+180>>2]|0)==0:0){a[d>>0]=0;c[b+264>>2]=0;d=b+272|0;c[d>>2]=(c[d>>2]|0)+-1}c[b+64>>2]=7;Ne(b,7);return}function pg(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;N=Ra;Ra=Ra+64|0;C=N+40|0;F=N+32|0;E=N+24|0;D=N+16|0;z=N+8|0;y=N;B=N+48|0;J=c[f>>2]|0;K=f+20|0;if((c[K>>2]|0)!=770837923){M=0;Ra=N;return M|0}M=J+81|0;if(a[M>>0]|0)c[f+40>>2]=7;i=f+196|0;g=c[i>>2]|0;if(g|0){while(1){h=c[g+4>>2]|0;if(!h)break;else g=h}sg(g)|0;c[i>>2]=0;c[f+204>>2]=0}k=f+96|0;h=c[k>>2]|0;a:do if(h|0?(l=f+28|0,j=c[l>>2]|0,(j|0)>0):0){g=0;i=j;while(1){h=c[h+(g<<2)>>2]|0;if(!h)h=i;else{tg(f,h);c[(c[k>>2]|0)+(g<<2)>>2]=0;h=c[l>>2]|0}g=g+1|0;if((g|0)>=(h|0))break a;i=h;h=c[k>>2]|0}}while(0);g=c[f+88>>2]|0;b:do if(g|0?(m=c[f+24>>2]|0,m|0):0){p=g+(m*40|0)|0;k=c[g+32>>2]|0;l=k+480|0;h=(k|0)==0;m=k+304|0;n=k+308|0;o=k+300|0;if(c[l>>2]|0){if(h)while(1){do if(c[g+24>>2]|0?(q=c[g+20>>2]|0,q|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{G=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);g=g+40|0;if(g>>>0>=p>>>0)break b}while(1){do if(c[g+24>>2]|0?(r=c[g+20>>2]|0,r|0):0){if(c[l>>2]|0){Xd(k,r);break}G=r;if((c[m>>2]|0)>>>0<=G>>>0?(c[n>>2]|0)>>>0>G>>>0:0){c[r>>2]=c[o>>2];c[o>>2]=r;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{G=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);g=g+40|0;if(g>>>0>=p>>>0)break b}}if(h)while(1){i=g+8|0;if(!(b[i>>1]&9216)){j=g+24|0;if(c[j>>2]|0){h=c[g+20>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[j>>2]=0}}else Cg(g);b[i>>1]=128;g=g+40|0;if(g>>>0>=p>>>0)break b}do{h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(!(c[l>>2]|0)){G=j;if((c[m>>2]|0)>>>0<=G>>>0?(c[n>>2]|0)>>>0>G>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{G=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else Xd(k,j);while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0}while(g>>>0<p>>>0)}while(0);s=f+200|0;g=c[s>>2]|0;if(g|0)do{c[s>>2]=c[g+4>>2];h=g+80|0;j=g+60|0;i=c[j>>2]|0;k=h+(i*40|0)|0;l=g+64|0;if((c[l>>2]|0)>0){i=0;do{tg(c[g>>2]|0,c[k+(i<<2)>>2]|0);i=i+1|0}while((i|0)<(c[l>>2]|0));i=c[j>>2]|0}c:do if(i|0){r=h+(i*40|0)|0;m=c[g+112>>2]|0;n=m+480|0;i=(m|0)==0;o=m+304|0;p=m+308|0;q=m+300|0;if(c[n>>2]|0){if(i)while(1){do if(c[h+24>>2]|0?(t=c[h+20>>2]|0,t|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{G=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}while(0);h=h+40|0;if(h>>>0>=r>>>0)break c}while(1){d:do if(c[h+24>>2]|0?(u=c[h+20>>2]|0,u|0):0){if(c[n>>2]|0){Xd(m,u);break}i=u;do if((c[o>>2]|0)>>>0<=i>>>0){if((c[p>>2]|0)>>>0<=i>>>0)break;c[u>>2]=c[q>>2];c[q>>2]=u;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{G=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);h=h+40|0;if(h>>>0>=r>>>0)break c}}if(i)while(1){i=h+8|0;if(!(b[i>>1]&9216)){j=h+24|0;if(c[j>>2]|0){k=c[h+20>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{G=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[j>>2]=0}}else Cg(h);b[i>>1]=128;h=h+40|0;if(h>>>0>=r>>>0)break c}do{i=h+8|0;if(!(b[i>>1]&9216)){j=h+24|0;if(c[j>>2]|0){k=c[h+20>>2]|0;e:do if(!(c[n>>2]|0)){l=k;do if((c[o>>2]|0)>>>0<=l>>>0){if((c[p>>2]|0)>>>0<=l>>>0)break;c[k>>2]=c[q>>2];c[q>>2]=k;break e}while(0);if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{G=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(m,k);while(0);c[j>>2]=0}}else Cg(h);b[i>>1]=128;h=h+40|0}while(h>>>0<r>>>0)}while(0);j=c[c[g>>2]>>2]|0;o=g+40|0;h=c[o>>2]|0;f:do if(h|0){k=j+480|0;l=j+304|0;m=j+308|0;n=j+300|0;if(!j)while(1){i=c[h+12>>2]|0;if(i|0)ab[i&127](c[h+8>>2]|0);c[o>>2]=c[h+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[o>>2]|0;if(!h)break f}do{i=c[h+12>>2]|0;if(i|0)ab[i&127](c[h+8>>2]|0);c[o>>2]=c[h+16>>2];do if(!(c[k>>2]|0)){G=h;if((c[l>>2]|0)>>>0<=G>>>0?(c[m>>2]|0)>>>0>G>>>0:0){c[h>>2]=c[n>>2];c[n>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(j,h);while(0);h=c[o>>2]|0}while((h|0)!=0)}while(0);h=c[c[g>>2]>>2]|0;do if(h){if(c[h+480>>2]|0){Xd(h,g);break}G=g;if((c[h+304>>2]|0)>>>0<=G>>>0?(c[h+308>>2]|0)>>>0>G>>>0:0){G=h+300|0;c[g>>2]=c[G>>2];c[G>>2]=g}else H=145}else H=145;while(0);do if((H|0)==145){H=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[s>>2]|0}while((g|0)!=0);n=f+216|0;g=c[n>>2]|0;g:do if(g|0){i=c[f>>2]|0;j=i+480|0;k=i+304|0;l=i+308|0;m=i+300|0;if(!i)while(1){h=c[g+12>>2]|0;if(h|0)ab[h&127](c[g+8>>2]|0);c[n>>2]=c[g+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}g=c[n>>2]|0;if(!g)break g}do{h=c[g+12>>2]|0;if(h|0)ab[h&127](c[g+8>>2]|0);c[n>>2]=c[g+16>>2];do if(!(c[j>>2]|0)){G=g;if((c[k>>2]|0)>>>0<=G>>>0?(c[l>>2]|0)>>>0>G>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else Xd(i,g);while(0);g=c[n>>2]|0}while((g|0)!=0)}while(0);u=f+36|0;if((c[u>>2]|0)>-1){G=f+149|0;if((d[G>>0]|d[G+1>>0]<<8)&512){h=c[f+156>>2]|0;if(h|0?(w=c[f>>2]|0,v=c[w+16>>2]|0,w=c[w+20>>2]|0,(w|0)>0):0){g=0;do{if(((g|0)!=1?1<<g&h|0:0)?(x=c[v+(g<<4)+4>>2]|0,x|0):0)c[(c[x+4>>2]|0)+4>>2]=c[x>>2];g=g+1|0}while((g|0)!=(w|0))}t=f+40|0;h=c[t>>2]|0;i=h&255;h:do switch(i<<24>>24){case 13:case 7:case 9:case 10:{g=d[G>>0]|d[G+1>>0]<<8;if((h&255|0)!=9|(g&256)==0){switch(i<<24>>24){case 7:case 13:{if(g&128){g=2;i=1;break h}break}default:{}}rg(J,516);i=J+444|0;g=c[i>>2]|0;if(g|0){j=J+480|0;k=J+304|0;l=J+308|0;m=J+300|0;do{c[i>>2]=c[g+24>>2];i:do if(!(c[j>>2]|0)){h=g;do if((c[k>>2]|0)>>>0<=h>>>0){if((c[l>>2]|0)>>>0<=h>>>0)break;c[g>>2]=c[m>>2];c[m>>2]=g;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else Xd(J,g);while(0);g=c[i>>2]|0}while((g|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0;g=0;h=c[t>>2]|0;i=1}else{g=0;i=1}break}default:{g=0;i=0}}while(0);if((h|0)==0?(x=f+64|0,w=c[x+4>>2]|0,(w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0):0){c[t>>2]=787;a[f+146>>0]=2;Ag(f,32436,y)}s=J+332|0;h=c[s>>2]|0;if((h|0)>0?(c[J+356>>2]|0)==0:0)H=460;else if((a[J+79>>0]|0)!=0?(c[J+176>>2]|0)==((((d[G>>0]|d[G+1>>0]<<8)&65535)>>>8&1^1)&65535|0):0){if((c[t>>2]|0)!=0?i|(a[f+146>>0]|0)!=3:0){rg(J,0);c[f+44>>2]=0}else H=205;j:do if((H|0)==205){x=c[f>>2]|0;y=x+464|0;x=x+472|0;y=Sv(c[x>>2]|0,c[x+4>>2]|0,c[y>>2]|0,c[y+4>>2]|0)|0;x=L()|0;k:do if((x|0)>0|(x|0)==0&y>>>0>0){c[t>>2]=787;a[f+146>>0]=2;Ag(f,32436,z);if(!((d[G>>0]|d[G+1>>0]<<8)&256)){h=787;break}else g=1;Ra=N;return g|0}else{r=J+356|0;p=c[r>>2]|0;c[r>>2]=0;q=f+124|0;l:do if((h|0)>0){o=0;m:while(1){i=c[(c[p+(o<<2)>>2]|0)+8>>2]|0;do if(i|0){h=c[(c[i>>2]|0)+60>>2]|0;if(!h)break;h=Wa[h&127](i)|0;n=i+8|0;if(c[n>>2]|0){k=c[f>>2]|0;i=c[q>>2]|0;n:do if(i|0){do if(k|0){if(c[k+480>>2]|0){Xd(k,i);break n}j=i;if((c[k+304>>2]|0)>>>0>j>>>0)break;if((c[k+308>>2]|0)>>>0<=j>>>0)break;z=k+300|0;c[i>>2]=c[z>>2];c[z>>2]=i;break n}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{z=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);l=c[n>>2]|0;o:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;p:do if(!k){z=Sv(m|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){i=0;break o}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;H=247;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){z=c[14978]|0;y=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break o}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){i=0;break o}}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<m>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];H=k+284|0;c[H>>2]=(c[H>>2]|0)+1;H=247;break p}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];H=k+284|0;c[H>>2]=(c[H>>2]|0)+1;H=247;break p}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(k,m,0)|0;H=247}while(0);if((H|0)==247){H=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[q>>2]=i;i=c[n>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{z=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[n>>2]=0}if(h|0)break m}while(0);o=o+1|0;if((o|0)>=(c[s>>2]|0)){H=257;break l}}c[r>>2]=p;H=454}else H=257;while(0);q:do if((H|0)==257){c[r>>2]=p;p=J+20|0;q=J+16|0;o=0;i=0;j=0;while(1){if((o|0)>=(c[p>>2]|0))break;k=c[q>>2]|0;h=c[k+(o<<4)+4>>2]|0;r:do if(!h)h=0;else{if((a[h+8>>0]|0)!=2){h=0;break}j=c[h+4>>2]|0;c[j+4>>2]=c[h>>2];j=c[j>>2]|0;do if((a[k+(o<<4)+8>>0]|0)!=1){if(!(11>>>(d[j+5>>0]|0)&1))break;i=i+((a[j+12>>0]|0)==0&1)|0}while(0);h=c[j+40>>2]|0;if(h|0){j=1;break}if(c[j+216>>2]|0){h=0;j=1;break}k=j+17|0;l=j+13|0;m=j+60|0;n=j+176|0;j=j+180|0;s:while(1){switch(a[k>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:{h=0;j=1;break r}}if(a[l>>0]|0)break;h=c[m>>2]|0;h=Xa[c[(c[h>>2]|0)+28>>2]&255](h,4)|0;switch(h|0){case 0:break s;case 5:break;default:{j=1;break r}}if(!(Wa[c[n>>2]&127](c[j>>2]|0)|0)){h=5;j=1;break r}}a[k>>0]=4;h=0;j=1}while(0);if(!h)o=o+1|0;else{H=454;break q}}do if(j|0){h=c[J+216>>2]|0;if(!h)break;if(Wa[h&127](c[J+212>>2]|0)|0){h=531;break k}}while(0);j=c[c[(c[(c[q>>2]|0)+4>>2]|0)+4>>2]>>2]|0;k=(a[j+15>>0]|0)==0;if(k){h=c[j+168>>2]|0;if(h|0)H=278}else{h=59952;H=278}do if((H|0)==278){if((i|0)<2|((Eu(h)|0)&1073741823|0)==0)break;n=c[J>>2]|0;if(k){h=c[j+168>>2]|0;if(!h){i=0;h=0}else H=320}else{h=59952;H=320}if((H|0)==320)i=(Eu(h)|0)&1073741823;c[D>>2]=h;o=dd(J,32466,D)|0;t:do if(o){j=o+i|0;k=n+32|0;i=0;u:while(1){do if(i|0){if(i>>>0>100){H=327;break u}if((i|0)!=1)break;c[E>>2]=o;Db(13,32496,E)}while(0);Fb(4,D);h=c[D>>2]|0;c[C>>2]=h>>>8;c[C+4>>2]=h&255;Cb(13,j,32511,C)|0;h=Za[c[k>>2]&127](n,o,0,B)|0;l=(h|0)==0;if(l&(c[B>>2]|0)!=0)i=i+1|0;else{H=329;break}}if((H|0)==327){c[F>>2]=o;Db(13,32482,F);Ya[c[n+28>>2]&127](n,o,0)|0;H=330}else if((H|0)==329)if(l)H=330;v:do if((H|0)==330){k=c[n+4>>2]|0;F=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;E=L()|0;if(E>>>0>0|(E|0)==0&F>>>0>2147483390){h=7;break}do if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h){h=7;break v}else m=h}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){F=c[14978]|0;E=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;D=L()|0;c[14768]=((D|0)<0|(D|0)==0&E>>>0<=F>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(!i){h=7;break v}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0<=(c[14987]|0)>>>0){m=i;break}c[14987]=h;m=i}while(0);gw(m|0,0,k|0)|0;h=_a[c[n+24>>2]&127](n,o,m,16406,0)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}h=c[p>>2]|0;w:do if((h|0)>0){l=0;k=0;j=0;x:while(1){i=c[(c[q>>2]|0)+(l<<4)+4>>2]|0;do if(!i)i=k;else{if((a[i+8>>0]|0)!=2){i=k;break}i=c[(c[c[i+4>>2]>>2]|0)+172>>2]|0;if(!i){i=k;break}h=((Eu(i)|0)&1073741823)+1|0;h=_a[c[(c[m>>2]|0)+12>>2]&127](m,i,h,k,j)|0;if(h|0)break x;i=Sv(k|0,j|0,((Eu(i)|0)&1073741823)+1|0,0)|0;j=L()|0;h=c[p>>2]|0}while(0);l=l+1|0;if((l|0)>=(h|0))break w;else k=i}i=c[m>>2]|0;if(i|0){Wa[c[i+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}Ya[c[n+28>>2]&127](n,o,0)|0;if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}while(0);do if(!((Wa[c[(c[m>>2]|0)+48>>2]&127](m)|0)&1024)){h=Xa[c[(c[m>>2]|0)+20>>2]&255](m,2)|0;if(!h)break;i=c[m>>2]|0;if(i|0){Wa[c[i+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}Ya[c[n+28>>2]&127](n,o,0)|0;if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}while(0);i=0;while(1){if((i|0)>=(c[p>>2]|0)){h=0;i=1;break}h=c[(c[q>>2]|0)+(i<<4)+4>>2]|0;if(!h)h=0;else h=cc(h,o)|0;if(!h)i=i+1|0;else{i=0;break}}j=c[m>>2]|0;if(j|0){Wa[c[j+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}if(!i){if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}h=Ya[c[n+28>>2]&127](n,o,1)|0;n=J+480|0;y:do if(!(c[n>>2]|0)){i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;F=J+300|0;c[o>>2]=c[F>>2];c[F>>2]=o;break y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{F=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else Xd(J,o);while(0);if(h|0)break t;h=c[p>>2]|0;if((h|0)>0){j=0;do{i=c[(c[q>>2]|0)+(j<<4)+4>>2]|0;if(i){bc(i,1)|0;h=c[p>>2]|0}j=j+1|0}while((j|0)<(h|0))}m=c[r>>2]|0;if(m|0){c[r>>2]=0;if((c[s>>2]|0)>0){k=0;do{l=c[m+(k<<2)>>2]|0;j=l+8|0;h=c[j>>2]|0;do if(h|0){i=c[(c[h>>2]|0)+64>>2]|0;if(!i)break;Wa[i&127](h)|0}while(0);c[l+20>>2]=0;i=c[l>>2]|0;E=l+12|0;F=(c[E>>2]|0)+-1|0;c[E>>2]=F;z:do if(!F){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break z}h=l;if((c[i+304>>2]|0)>>>0>h>>>0)break;if((c[i+308>>2]|0)>>>0<=h>>>0)break;F=i+300|0;c[l>>2]=c[F>>2];c[F>>2]=l;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{F=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);k=k+1|0}while((k|0)<(c[s>>2]|0))}A:do if(!(c[n>>2]|0)){h=m;do if((c[J+304>>2]|0)>>>0<=h>>>0){if((c[J+308>>2]|0)>>>0<=h>>>0)break;F=J+300|0;c[m>>2]=c[F>>2];c[F>>2]=m;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(J,m);while(0);c[s>>2]=0}break q}while(0);do if(J|0){if(c[J+480>>2]|0){Xd(J,o);break t}i=o;if((c[J+304>>2]|0)>>>0>i>>>0)break;if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else h=7;while(0);H=454;break q}while(0);i=0;while(1){h=c[p>>2]|0;if((i|0)>=(h|0))break;h=c[(c[q>>2]|0)+(i<<4)+4>>2]|0;if(!h)h=0;else h=cc(h,0)|0;if(!h)i=i+1|0;else{H=454;break q}}if((h|0)>0){h=0;do{i=c[(c[q>>2]|0)+(h<<4)+4>>2]|0;if(i|0?(A=bc(i,0)|0,A|0):0){h=A;H=454;break q}h=h+1|0}while((h|0)<(c[p>>2]|0))}m=c[r>>2]|0;if(!m)break;c[r>>2]=0;if((c[s>>2]|0)>0){k=0;do{l=c[m+(k<<2)>>2]|0;j=l+8|0;h=c[j>>2]|0;do if(h|0){i=c[(c[h>>2]|0)+64>>2]|0;if(!i)break;Wa[i&127](h)|0}while(0);c[l+20>>2]=0;i=c[l>>2]|0;E=l+12|0;F=(c[E>>2]|0)+-1|0;c[E>>2]=F;B:do if(!F){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break B}h=l;if((c[i+304>>2]|0)>>>0>h>>>0)break;if((c[i+308>>2]|0)>>>0<=h>>>0)break;F=i+300|0;c[l>>2]=c[F>>2];c[F>>2]=l;break B}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{F=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);k=k+1|0}while((k|0)<(c[s>>2]|0))}C:do if(!(c[J+480>>2]|0)){h=m;do if((c[J+304>>2]|0)>>>0<=h>>>0){if((c[J+308>>2]|0)>>>0<=h>>>0)break;F=J+300|0;c[m>>2]=c[F>>2];c[F>>2]=m;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(J,m);while(0);c[s>>2]=0}while(0);D:do if((H|0)==454){switch(h|0){case 0:break D;case 5:break;default:break k}if(!((d[G>>0]|d[G+1>>0]<<8)&256)){h=5;break k}else g=5;Ra=N;return g|0}while(0);E=J+464|0;H=J+32|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;E=H;F=c[E+4>>2]|0;c[H>>2]=c[E>>2]&-524289;c[H+4>>2]=F;H=J+24|0;c[H>>2]=c[H>>2]&-2;break j}while(0);c[t>>2]=h;rg(J,0);c[f+44>>2]=0}while(0);c[J+456>>2]=0;H=476}else H=460;E:do if((H|0)==460)if(!g)if(!(c[t>>2]|0)){g=1;H=477}else{switch(a[f+146>>0]|0){case 3:{g=1;H=477;break E}case 2:{g=2;H=477;break E}default:{}}rg(J,516);j=J+444|0;h=c[j>>2]|0;if(h|0){k=J+480|0;l=J+304|0;m=J+308|0;n=J+300|0;do{c[j>>2]=c[h+24>>2];F:do if(!(c[k>>2]|0)){i=h;do if((c[l>>2]|0)>>>0<=i>>>0){if((c[m>>2]|0)>>>0<=i>>>0)break;c[h>>2]=c[n>>2];c[n>>2]=h;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{H=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(J,h);while(0);h=c[j>>2]|0}while((h|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0;H=476}else H=477;while(0);if((H|0)==476)if(!g)g=0;else H=477;if((H|0)==477)if(((c[(c[f>>2]|0)+456>>2]|0)!=0?(c[f+48>>2]|0)!=0:0)?(I=Bg(f,g)|0,(I|0)!=0):0){H=c[t>>2]|0;if((H|0)==0|(H&255|0)==19){c[t>>2]=I;h=f+124|0;i=c[h>>2]|0;G:do if(i|0){if(c[J+480>>2]|0){Xd(J,i);break}j=i;do if((c[J+304>>2]|0)>>>0<=j>>>0){if((c[J+308>>2]|0)>>>0<=j>>>0)break;I=J+300|0;c[i>>2]=c[I>>2];c[I>>2]=i;break G}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[h>>2]=0}rg(J,516);j=J+444|0;h=c[j>>2]|0;if(h|0){k=J+480|0;l=J+304|0;m=J+308|0;n=J+300|0;do{c[j>>2]=c[h+24>>2];H:do if(!(c[k>>2]|0)){i=h;do if((c[l>>2]|0)>>>0<=i>>>0){if((c[m>>2]|0)>>>0<=i>>>0)break;c[h>>2]=c[n>>2];c[n>>2]=h;break H}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{I=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(J,h);while(0);h=c[j>>2]|0}while((h|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0}if((d[G>>0]|d[G+1>>0]<<8)&32){h=f+44|0;if((g|0)==2)g=0;else{g=c[h>>2]|0;I=J+104|0;c[I>>2]=(c[I>>2]|0)+g}c[J+100>>2]=g;c[h>>2]=0}}if((c[u>>2]|0)>-1){g=J+168|0;c[g>>2]=(c[g>>2]|0)+-1;g=d[G>>0]|d[G+1>>0]<<8;if(!(g&256)){g=J+176|0;c[g>>2]=(c[g>>2]|0)+-1;g=d[G>>0]|d[G+1>>0]<<8}if(g&512){J=J+172|0;c[J>>2]=(c[J>>2]|0)+-1}}}c[K>>2]=832317811;g=f+40|0;if(!(a[M>>0]|0)){M=(c[g>>2]|0)==5?5:0;Ra=N;return M|0}else{c[g>>2]=7;M=0;Ra=N;return M|0}return 0}function qg(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[d>>2]|0;l=c[d+40>>2]|0;i=d+124|0;if(!(c[i>>2]|0)){d=c[k+260>>2]|0;if(!d){k=k+64|0;c[k>>2]=l;return l|0}f=d+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;k=k+64|0;c[k>>2]=l;return l|0}else{Dg(d);k=k+64|0;c[k>>2]=l;return l|0}}j=k+82|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;h=k+260|0;d=c[h>>2]|0;do if(!d){a:do if(c[k+272>>2]|0){if(!(a[k+81>>0]|0))g=13}else{do if((e[k+276>>1]|0)>=40){d=k+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];g=k+284|0;c[g>>2]=(c[g>>2]|0)+1;g=14;break a}d=k+296|0;f=c[d>>2]|0;if(!f){d=k+292|0;break}else{c[d>>2]=c[f>>2];g=k+284|0;c[g>>2]=(c[g>>2]|0)+1;g=14;break a}}else d=k+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;g=13}while(0);if((g|0)==13){f=_d(k,40,0)|0;g=14}if((g|0)==14?f|0:0){d=f;g=d+40|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(g|0));b[f+8>>1]=1;c[f+32>>2]=k;c[h>>2]=f;d=f;g=17;break}c[h>>2]=0}else g=17;while(0);if((g|0)==17)yc(d,c[i>>2]|0,-1,1,-1)|0;a[j>>0]=(a[j>>0]|0)+-1<<24>>24;k=k+64|0;c[k>>2]=l;return l|0}function rg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+20|0;l=c[m>>2]|0;i=(l|0)>0;if(i){g=c[b+16>>2]|0;f=0;do{h=c[g+(f<<4)+4>>2]|0;if(h|0)c[(c[h+4>>2]|0)+4>>2]=c[h>>2];f=f+1|0}while((f|0)!=(l|0))}if(!(c[b+24>>2]&1))n=0;else n=(a[b+165>>0]|0)==0;if(i){j=b+16|0;k=(n^1)&1;f=0;i=0;h=l;while(1){g=c[(c[j>>2]|0)+(i<<4)+4>>2]|0;if(!g)g=h;else{f=(a[g+8>>0]|0)==2?1:f;ec(g,e,k);g=c[m>>2]|0}i=i+1|0;if((i|0)>=(g|0)){e=f;break}else h=g}}else e=0;f=b+356|0;l=c[f>>2]|0;if(l|0){c[f>>2]=0;j=b+332|0;if((c[j>>2]|0)>0){i=0;do{k=c[l+(i<<2)>>2]|0;g=k+8|0;f=c[g>>2]|0;if(f|0?(o=c[(c[f>>2]|0)+68>>2]|0,o|0):0)Wa[o&127](f)|0;c[k+20>>2]=0;h=c[k>>2]|0;f=k+12|0;m=(c[f>>2]|0)+-1|0;c[f>>2]=m;do if(!m){f=c[g>>2]|0;if(f|0)Wa[c[(c[f>>2]|0)+16>>2]&127](f)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,k);break}m=k;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);i=i+1|0}while((i|0)<(c[j>>2]|0))}do if(!(c[b+480>>2]|0)){o=l;if((c[b+304>>2]|0)>>>0<=o>>>0?(c[b+308>>2]|0)>>>0>o>>>0:0){o=b+300|0;c[l>>2]=c[o>>2];c[o>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(b,l);while(0);c[j>>2]=0}if(n){f=c[b+4>>2]|0;if(f|0)do{o=f+149|0;n=(d[o>>0]|d[o+1>>0]<<8)&-4|1;a[o>>0]=n;a[o+1>>0]=n>>8;f=c[f+8>>2]|0}while((f|0)!=0);$b(b)}n=b+464|0;f=b+32|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=f;o=c[n+4>>2]|0;c[f>>2]=c[n>>2]&-524289;c[f+4>>2]=o;f=c[b+224>>2]|0;if(!f)return;if((e|0)==0?a[b+79>>0]|0:0)return;ab[f&127](c[b+220>>2]|0);return}function sg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=c[a>>2]|0;g=h+96|0;e=c[g>>2]|0;f=h+28|0;a:do if(e|0?(d=c[f>>2]|0,(d|0)>0):0){b=0;while(1){e=c[e+(b<<2)>>2]|0;if(e){tg(h,e);c[(c[g>>2]|0)+(b<<2)>>2]=0;d=c[f>>2]|0}b=b+1|0;if((b|0)>=(d|0))break a;e=c[g>>2]|0}}while(0);c[h+104>>2]=c[a+8>>2];c[h+108>>2]=c[a+52>>2];c[h+88>>2]=c[a+16>>2];c[h+24>>2]=c[a+56>>2];c[g>>2]=c[a+20>>2];c[f>>2]=c[a+44>>2];g=a+32|0;b=c[g+4>>2]|0;i=c[h>>2]|0;j=i+40|0;c[j>>2]=c[g>>2];c[j+4>>2]=b;c[h+44>>2]=c[a+68>>2];c[i+100>>2]=c[a+72>>2];j=h+216|0;b=c[j>>2]|0;if(!b){i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}e=i+480|0;f=i+304|0;g=i+308|0;h=i+300|0;if(!i){do{d=c[b+12>>2]|0;if(d|0)ab[d&127](c[b+8>>2]|0);c[j>>2]=c[b+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{i=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}b=c[j>>2]|0}while((b|0)!=0);i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}do{d=c[b+12>>2]|0;if(d|0)ab[d&127](c[b+8>>2]|0);c[j>>2]=c[b+16>>2];do if(!(c[e>>2]|0)){d=b;if((c[f>>2]|0)>>>0<=d>>>0?(c[g>>2]|0)>>>0>d>>>0:0){c[b>>2]=c[h>>2];c[h>>2]=b;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}else Xd(i,b);while(0);b=c[j>>2]|0}while((b|0)!=0);i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}function tg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if(!d)return;switch(a[d>>0]|0){case 1:{f=c[b>>2]|0;b=d+40|0;d=c[b>>2]|0;if(!d)return;wg(f,d);e=c[d+40>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);do if(f){if(c[f+480>>2]|0){Xd(f,d);break}h=d;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[d>>2]=c[h>>2];c[h>>2]=d}else g=14}else g=14;while(0);do if((g|0)==14)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;return}case 0:{if(!(a[d+5>>0]&1)){vg(c[d+40>>2]|0);return}b=c[d+8>>2]|0;if(!b)return;ug(b);return}case 2:{h=c[d+40>>2]|0;f=c[h>>2]|0;g=c[f>>2]|0;f=f+4|0;c[f>>2]=(c[f>>2]|0)+-1;Wa[c[g+28>>2]&127](h)|0;return}default:return}}function ug(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=c[b+4>>2]|0;c[i+4>>2]=c[b>>2];d=c[i+8>>2]|0;if(d|0)do{e=d;d=c[d+24>>2]|0;if((c[e+8>>2]|0)==(b|0))vg(e)}while((d|0)!=0);ec(b,0,0);a:do if(a[b+9>>0]|0){e=i+64|0;f=c[e>>2]|0;c[e>>2]=f+-1;if((f|0)<2){d=c[14822]|0;if((d|0)==(i|0)){c[14822]=c[i+68>>2];h=15;break}if(!d)h=15;else{while(1){e=c[d+68>>2]|0;if((e|0)==(i|0))break;if(!e){h=15;break a}else d=e}c[d+68>>2]=c[i+68>>2];h=15}}}else h=15;while(0);do if((h|0)==15){Te(c[i>>2]|0,c[b>>2]|0);e=c[i+52>>2]|0;d=i+48|0;if(e){f=c[d>>2]|0;if(f|0){ab[e&127](f);h=18}}else h=18;do if((h|0)==18?(g=c[d>>2]|0,g|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{f=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);f=i+80|0;d=c[f>>2]|0;if(d|0){e=d+-4|0;c[f>>2]=e;d=e;do if((c[14816]|0)>>>0<=d>>>0)if((c[14817]|0)>>>0>d>>>0){c[14979]=(c[14979]|0)+-1;c[e>>2]=c[14819];c[14819]=e;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;break}else{d=Wa[c[29352>>2]&127](e)|0;h=28;break}else{d=Wa[c[29352>>2]&127](e)|0;h=28}while(0);do if((h|0)==28){c[14980]=(c[14980]|0)-d;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[f>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);e=c[b+28>>2]|0;d=b+24|0;if(e|0)c[e+24>>2]=c[d>>2];d=c[d>>2]|0;if(d|0)c[d+28>>2]=e;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{i=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function vg(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=d+8|0;e=c[m>>2]|0;if(!e)return;i=c[d+20>>2]|0;c[(c[e+4>>2]|0)+4>>2]=c[e>>2];f=i+8|0;e=c[f>>2]|0;a:do if((e|0)==(d|0))c[f>>2]=c[d+24>>2];else{while(1){f=c[e+24>>2]|0;if((f|0)==(d|0))break;if(!f)break a;else e=f}c[e+24>>2]=c[d+24>>2]}while(0);h=d+68|0;e=a[h>>0]|0;if(e<<24>>24>-1){if(e<<24>>24){g=0;do{f=c[(c[d+120+(g<<2)>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32)){Df(f);e=a[h>>0]|0}else{n=c[f+20>>2]|0;o=n+120|0;c[o>>2]=(c[o>>2]|0)+-1;n=n+136|0;c[f+16>>2]=c[n>>2];c[n>>2]=f}g=g+1|0}while((g|0)<(e<<24>>24|0))}e=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[e+28>>1]&32))Df(e);else{o=c[e+20>>2]|0;n=o+120|0;c[n>>2]=(c[n>>2]|0)+-1;o=o+136|0;c[e+16>>2]=c[o>>2];c[o>>2]=e}a[h>>0]=-1}if(((a[i+20>>0]|0)==0?(j=i+12|0,k=c[j>>2]|0,k|0):0)?(c[j>>2]=0,o=c[k+72>>2]|0,l=c[o+20>>2]|0,Df(o),(c[(c[l+212>>2]|0)+12>>2]|0)==0):0){switch(a[l+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[l+4>>0]|0))uf(l,0,0)|0;break}default:tf(l)|0}vf(l)}e=c[d+12>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{o=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[d+16>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{o=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[m>>2]=0;return}function wg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=e+20|0;l=c[k>>2]|0;do if(l|0){if((c[l>>2]|0)>0){m=l+12|0;j=0;do{h=c[m>>2]|0;i=h+(j*56|0)|0;g=c[h+(j*56|0)+28>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=c[h+(j*56|0)+36>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=c[h+(j*56|0)+48>>2]|0;do if(g|0){xg(c[g+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(g|0));j=j+1|0}while((j|0)<(c[l>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{p=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[k>>2]=0;k=e+59|0;if(a[k>>0]|0){l=(b|0)==0;m=b+480|0;n=b+304|0;o=b+308|0;p=b+300|0;j=0;do{i=e+64+(j*72|0)|0;g=c[e+64+(j*72|0)+12>>2]|0;do if(g|0){if(!l){if(c[m>>2]|0){Xd(b,g);break}h=g;if((c[n>>2]|0)>>>0<=h>>>0?(c[o>>2]|0)>>>0>h>>>0:0){c[g>>2]=c[p>>2];c[p>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{h=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[e+64+(j*72|0)+16>>2]|0;if(g|0)do{h=g;g=c[g+4>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);g=c[e+64+(j*72|0)+40>>2]|0;do if(g|0){h=c[g>>2]|0;if(h|0){Wa[c[h+4>>2]&127](g)|0;c[g>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[e+64+(j*72|0)+56>>2]|0;do if(g|0){h=c[g>>2]|0;if(h|0){Wa[c[h+4>>2]&127](g)|0;c[g>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(g|0));c[e+64+(j*72|0)+8>>2]=e;j=j+1|0}while(j>>>0<(d[k>>0]|0)>>>0)}h=e+36|0;if((c[e+40>>2]|0)==0?(f=c[h>>2]|0,f|0):0)do{g=f;f=c[f+4>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[h>>2]=0;c[e+44>>2]=0;a[e+56>>0]=0;c[e+48>>2]=0;c[e+8>>2]=0;f=e+32|0;g=c[f>>2]|0;if(!g){c[f>>2]=0;return}if(b|0){if(c[b+480>>2]|0){Xd(b,g);c[f>>2]=0;return}q=g;if((c[b+304>>2]|0)>>>0<=q>>>0?(c[b+308>>2]|0)>>>0>q>>>0:0){q=b+300|0;c[g>>2]=c[q>>2];c[q>>2]=g;c[f>>2]=0;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[f>>2]=0;return}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[f>>2]=0;return}}function xg(a){a=a|0;var b=0,d=0;if(!a)return;if((c[a>>2]|0)>0){d=a+12|0;b=0;do{yg((c[d>>2]|0)+(b*56|0)|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function yg(a){a=a|0;var b=0,d=0;b=c[a+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+36>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);zg(c[a+48>>2]|0);b=a;a=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function zg(a){a=a|0;var b=0;if(!a)return;xg(c[a+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function Ag(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+112|0;h=n+16|0;l=n+88|0;k=n;f=c[b>>2]|0;m=b+124|0;g=c[m>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}j=g;if((c[f+304>>2]|0)>>>0<=j>>>0?(c[f+308>>2]|0)>>>0>j>>>0:0){j=f+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[k>>2]=e;j=c[b>>2]|0;g=c[j+108>>2]|0;i=l+4|0;c[i>>2]=h;c[l>>2]=j;c[l+8>>2]=70;f=l+12|0;c[f>>2]=g;g=l+16|0;c[g>>2]=0;h=l+20|0;a[h>>0]=0;e=l+21|0;a[e>>0]=1;tb(l,d,k);b=c[i>>2]|0;if(((b|0)!=0?(a[b+(c[g>>2]|0)>>0]=0,(c[f>>2]|0)!=0):0)?(a[e>>0]&4)==0:0)f=$d(l)|0;else f=c[i>>2]|0;if((a[h>>0]|0)!=7){c[m>>2]=f;Ra=n;return}b=j+81|0;if(a[b>>0]|0){c[m>>2]=f;Ra=n;return}if(a[j+82>>0]|0){c[m>>2]=f;Ra=n;return}a[b>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;b=j+272|0;c[b>>2]=(c[b>>2]|0)+1;b=c[j+236>>2]|0;if(!b){c[m>>2]=f;Ra=n;return}c[b+12>>2]=7;c[m>>2]=f;Ra=n;return}function Bg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=c[e>>2]|0;q=e+48|0;r=c[q>>2]|0;s=r+-1|0;p=t+20|0;h=c[p>>2]|0;if((h|0)>0){n=t+16|0;o=(r|0)<1;if((f|0)==2){l=0;g=0;do{k=c[(c[n>>2]|0)+(l<<4)+4>>2]|0;if(k){i=k+8|0;do if((a[i>>0]|0)==2){j=c[k+4>>2]|0;c[j+4>>2]=c[k>>2];h=c[j+8>>2]|0;if(h|0?(m=$f(h,0,0)|0,m|0):0){h=m;break}h=wf(c[j>>2]|0,2,s)|0;if(!h){if(o?b[j+22>>1]&16:0)c[j+44>>2]=0;h=Rf(j)|0;u=c[(c[j+12>>2]|0)+56>>2]|0;c[j+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0];if(!h)if((a[i>>0]|0)==2){i=c[k+4>>2]|0;c[i+4>>2]=c[k>>2];h=wf(c[i>>2]|0,1,s)|0;if(!h){if(o?b[i+22>>1]&16:0)c[i+44>>2]=0;h=Rf(i)|0;u=c[(c[i+12>>2]|0)+56>>2]|0;c[i+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0]}}else h=0}}else h=0;while(0);g=(g|0)==0?h:g;h=c[p>>2]|0}l=l+1|0}while((l|0)<(h|0))}else{k=0;g=0;do{i=c[(c[n>>2]|0)+(k<<4)+4>>2]|0;if(i){if((a[i+8>>0]|0)==2){j=c[i+4>>2]|0;c[j+4>>2]=c[i>>2];h=wf(c[j>>2]|0,1,s)|0;if(!h){if(o?b[j+22>>1]&16:0)c[j+44>>2]=0;h=Rf(j)|0;u=c[(c[j+12>>2]|0)+56>>2]|0;c[j+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0]}}else h=0;g=(g|0)==0?h:g;h=c[p>>2]|0}k=k+1|0}while((k|0)<(h|0))}u=t+456|0;c[u>>2]=(c[u>>2]|0)+-1;c[q>>2]=0;if(!g)h=33;else h=76}else{h=t+456|0;c[h>>2]=(c[h>>2]|0)+-1;c[q>>2]=0;h=33}a:do if((h|0)==33){o=t+356|0;b:do if((f|0)==2){if(!(c[o>>2]|0)){g=0;break a}n=t+332|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break b;l=c[(c[o>>2]|0)+(m<<2)>>2]|0;g=c[c[l+4>>2]>>2]|0;j=l+8|0;i=c[j>>2]|0;do if((i|0)!=0?(c[g>>2]|0)>1:0){k=l+12|0;h=(c[k>>2]|0)+1|0;c[k>>2]=h;g=c[g+88>>2]|0;if((g|0)!=0?(c[l+20>>2]|0)>=(r|0):0){g=Xa[g&255](i,s)|0;h=c[k>>2]|0}else g=0;i=c[l>>2]|0;u=h+-1|0;c[k>>2]=u;if(!u){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,l);break}u=l;if((c[i+304>>2]|0)>>>0<=u>>>0?(c[i+308>>2]|0)>>>0>u>>>0:0){u=i+300|0;c[l>>2]=c[u>>2];c[u>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else g=0;while(0);if(!g)m=m+1|0;else{h=76;break a}}}while(0);if(!(c[o>>2]|0)){g=0;h=76}else{n=t+332|0;m=0;while(1){if((m|0)>=(c[n>>2]|0)){g=0;h=76;break a}l=c[(c[o>>2]|0)+(m<<2)>>2]|0;g=c[c[l+4>>2]>>2]|0;j=l+8|0;i=c[j>>2]|0;do if((i|0)!=0?(c[g>>2]|0)>1:0){k=l+12|0;h=(c[k>>2]|0)+1|0;c[k>>2]=h;g=c[g+84>>2]|0;if((g|0)!=0?(c[l+20>>2]|0)>=(r|0):0){g=Xa[g&255](i,s)|0;h=c[k>>2]|0}else g=0;i=c[l>>2]|0;u=h+-1|0;c[k>>2]=u;if(!u){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,l);break}u=l;if((c[i+304>>2]|0)>>>0<=u>>>0?(c[i+308>>2]|0)>>>0>u>>>0:0){u=i+300|0;c[l>>2]=c[u>>2];c[u>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else g=0;while(0);if(!g)m=m+1|0;else{h=76;break}}}}while(0);if((h|0)==76)if((f|0)!=2){u=g;return u|0}s=e+72|0;u=c[s+4>>2]|0;f=t+464|0;c[f>>2]=c[s>>2];c[f+4>>2]=u;f=e+80|0;e=c[f+4>>2]|0;u=t+472|0;c[u>>2]=c[f>>2];c[u+4>>2]=e;u=g;return u|0}function Cg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;if(b[a+8>>1]&9216)Dg(a);e=a+24|0;if(!(c[e>>2]|0)){g=a+16|0;c[g>>2]=0;return}f=c[a+32>>2]|0;d=c[a+20>>2]|0;do if(f){if(c[f+480>>2]|0){Xd(f,d);break}h=d;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[d>>2]=c[h>>2];c[h>>2]=d}else g=10}else g=10;while(0);do if((g|0)==10?d|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[e>>2]=0;h=a+16|0;c[h>>2]=0;return}function Dg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+80|0;h=k+40|0;i=k;j=a+8|0;d=b[j>>1]|0;if(d&8192){e=c[a>>2]|0;f=h+12|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;f=i;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));b[i+8>>1]=1;d=a+32|0;c[i+32>>2]=c[d>>2];c[h>>2]=i;c[h+8>>2]=a;c[h+4>>2]=e;ab[c[e+20>>2]&127](h);do if((c[a+24>>2]|0)>0){d=c[d>>2]|0;e=c[a+20>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);f=a;d=i;g=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(g|0));d=b[j>>1]|0}if(!(d&1024)){b[j>>1]=1;Ra=k;return}ab[c[a+36>>2]&127](c[a+16>>2]|0);b[j>>1]=1;Ra=k;return}function Eg(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=d+24|0;h=(c[p>>2]|0)>0;if((g|0)!=0&h?(m=d+16|0,j=c[m>>2]|0,k=d+20|0,(j|0)==(c[k>>2]|0)):0){l=c[d+32>>2]|0;g=((f|0)<0)<<31>>31;i=(j|0)==0;a:do if(!i){h=j;if(((c[l+304>>2]|0)>>>0<=h>>>0?(c[l+308>>2]|0)>>>0>h>>>0:0)?!(0<g>>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0<f>>>0:0)):0){h=j;break}h=Zd(l,j,f,g)|0;if(!(i|(h|0)!=0)){if(c[l+480>>2]|0){Xd(l,j);h=0;break}f=j;if((c[l+304>>2]|0)>>>0<=f>>>0?(c[l+308>>2]|0)>>>0>f>>>0:0){h=l+300|0;c[j>>2]=c[h>>2];c[h>>2]=j;h=0;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);h=0;break}else{h=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);h=0;break}}}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){h=0;break}}else{do if(!(0<g>>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0<f>>>0:0))){i=l+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=l+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}i=l+296|0;h=c[i>>2]|0;if(!h){h=l+292|0;break}else{c[i>>2]=c[h>>2];f=l+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,f,g)|0}while(0);c[k>>2]=h;c[m>>2]=h;j=0}else{j=d+32|0;do if(h){h=c[j>>2]|0;i=c[d+20>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,i);break}m=i;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);j=c[j>>2]|0;k=((f|0)<0)<<31>>31;b:do if(!j){m=Sv(f|0,k|0,-1,-1)|0;l=L()|0;if(!(l>>>0>0|(l|0)==0&m>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;break}j=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){f=c[14978]|0;m=Tv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=f>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(i){h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;h=i}else h=i}else h=0}else h=0}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){h=0;break}}else{do if(!(0<k>>>0|(0==(k|0)?(e[j+276>>1]|0)>>>0<f>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=j+284|0;c[f>>2]=(c[f>>2]|0)+1;break b}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];f=j+284|0;c[f>>2]=(c[f>>2]|0)+1;break b}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,f,k)|0}while(0);k=d+20|0;c[k>>2]=h;j=g}if(!h){h=d+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else Dg(d);c[d+16>>2]=0;c[p>>2]=0;d=7;return d|0}i=c[d+32>>2]|0;if(((i|0)!=0?(n=h,(c[i+304>>2]|0)>>>0<=n>>>0):0)?(c[i+308>>2]|0)>>>0>n>>>0:0)h=e[i+276>>1]|0;else h=Wa[c[29352>>2]&127](h)|0;c[p>>2]=h;if(j|0?(o=c[d+16>>2]|0,o|0):0)ew(c[k>>2]|0,o|0,c[d+12>>2]|0)|0;j=d+8|0;h=b[j>>1]|0;if(!(h&1024))i=d+16|0;else{i=d+16|0;ab[c[d+36>>2]&127](c[i>>2]|0);h=b[j>>1]|0}c[i>>2]=c[k>>2];b[j>>1]=h&-7169;d=0;return d|0}function Fg(a,b){a=a|0;b=b|0;if(!(Gg(a,b)|0)){b=0;return b|0}b=c[a+12>>2]|0;return b|0}function Gg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=e+8|0;g=b[l>>1]|0;h=g&65535;if(h&18){do if(h&16384){i=e+12|0;h=(c[e>>2]|0)+(c[i>>2]|0)|0;if((h|0)<1)if(!(g&16))break;else g=1;else g=h;if(!(Eg(e,g,1)|0)){gw((c[e+16>>2]|0)+(c[i>>2]|0)|0,0,c[e>>2]|0)|0;c[i>>2]=(c[i>>2]|0)+(c[e>>2]|0);g=b[l>>1]&-16897;b[l>>1]=g;break}else{f=0;return f|0}}while(0);b[l>>1]=g|2;g=e+10|0;h=f&255;i=h&247;if((i|0)!=(d[g>>0]|0))Ig(e,i&255)|0;if(h&8|0?(k=e+16|0,c[k>>2]&1|0):0){h=b[l>>1]|0;i=h&65535;do if(i&18){do if(i&16384){j=e+12|0;i=(c[e>>2]|0)+(c[j>>2]|0)|0;if((i|0)<1)if(!(h&16))break;else h=1;else h=i;if(!(Eg(e,h,1)|0)){gw((c[k>>2]|0)+(c[j>>2]|0)|0,0,c[e>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[e>>2]|0);h=b[l>>1]&-16897;b[l>>1]=h;break}else{f=0;return f|0}}while(0);if(c[e+24>>2]|0?(c[k>>2]|0)==(c[e+20>>2]|0):0)break;if(!(Jg(e)|0)){h=b[l>>1]|0;break}else{f=0;return f|0}}while(0);b[l>>1]=h&-4097}if((b[l>>1]&514)==2)Jg(e)|0}else{Hg(e,f,0)|0;g=e+10|0}if((a[g>>0]|0)!=(f&-9)<<24>>24){f=0;return f|0}f=c[e+16>>2]|0;return f|0}function Hg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+16|0;m=n+8|0;l=n;j=d+8|0;k=b[j>>1]|0;do if((c[d+24>>2]|0)<32){if(!(Eg(d,32,0)|0)){i=d+16|0;h=i;i=c[i>>2]|0;break}a[d+10>>0]=0;m=7;Ra=n;return m|0}else{i=c[d+20>>2]|0;h=d+16|0;c[h>>2]=i;b[j>>1]=k&13}while(0);if(!(k&4)){g[m>>3]=+g[d>>3];Cb(32,i,32529,m)|0}else{o=d;k=c[o+4>>2]|0;m=l;c[m>>2]=c[o>>2];c[m+4>>2]=k;Cb(32,i,32524,l)|0}o=(Eu(c[h>>2]|0)|0)&1073741823;c[d+12>>2]=o;a[d+10>>0]=1;o=b[j>>1]|514;b[j>>1]=f<<24>>24==0?o:o&-13;if(e<<24>>24==1){o=0;Ra=n;return o|0}Ig(d,e)|0;o=0;Ra=n;return o|0}function Ig(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=f+10|0;h=g<<24>>24==1;if(!(h|(a[w>>0]|0)==1)){k=f+8|0;h=b[k>>1]|0;i=h&65535;do if(i&18){do if(i&16384){j=f+12|0;i=(c[f>>2]|0)+(c[j>>2]|0)|0;if((i|0)<1)if(!(h&16))break;else h=1;else h=i;if(!(Eg(f,h,1)|0)){gw((c[f+16>>2]|0)+(c[j>>2]|0)|0,0,c[f>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[f>>2]|0);h=b[k>>1]&-16897;b[k>>1]=h;break}else{w=7;return w|0}}while(0);if(c[f+24>>2]|0?(c[f+16>>2]|0)==(c[f+20>>2]|0):0)break;if(!(Jg(f)|0)){h=b[k>>1]|0;break}else{w=7;return w|0}}while(0);b[k>>1]=h&-4097;h=c[f+16>>2]|0;f=c[f+12>>2]&-2;i=h+f|0;if((f|0)>0)do{v=a[h>>0]|0;f=h+1|0;a[h>>0]=a[f>>0]|0;h=h+2|0;a[f>>0]=v}while(h>>>0<i>>>0);a[w>>0]=g;w=0;return w|0}s=f+12|0;i=c[s>>2]|0;if(h){i=i&-2;c[s>>2]=i;n=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;m=L()|0;n=n|1}else{n=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;n=Sv(n|0,L()|0,2,0)|0;m=L()|0}t=f+16|0;k=c[t>>2]|0;r=k+i|0;u=f+32|0;l=c[u>>2]|0;a:do if(!l){q=Sv(n|0,m|0,-1,-1)|0;p=L()|0;if(p>>>0>0|(p|0)==0&q>>>0>2147483390){w=7;return w|0}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](n)|0;o=43;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){q=c[14978]|0;p=Tv(h|0,j|0,l|0,((l|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&p>>>0<=q>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){w=7;return w|0}h=Wa[c[29352>>2]&127](j)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;q=j}else q=j}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){w=7;return w|0}}else{do if(!(m>>>0>0|((m|0)==0?n>>>0>(e[l+276>>1]|0)>>>0:0))){j=l+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=43;break a}j=l+296|0;h=c[j>>2]|0;if(!h){h=l+292|0;break}else{c[j>>2]=c[h>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=43;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,n,m)|0;o=43}while(0);if((o|0)==43)if(!h){w=7;return w|0}else q=h;switch(a[w>>0]|0){case 1:{h=(i|0)>0;if(g<<24>>24==2)if(h){h=q;i=k;do{k=i+1|0;p=a[i>>0]|0;i=p&255;if((p&255)>191){i=d[2736+(i+-192)>>0]|0;b:do if((k|0)==(r|0)){j=i;i=r}else{j=i;i=k;while(1){k=a[i>>0]|0;if((k&-64)<<24>>24!=-128)break b;i=i+1|0;j=j<<6|k&63;if((i|0)==(r|0)){i=r;break}}}while(0);if(!((j&-2|0)==65534|(j>>>0<128|(j&-2048|0)==55296)))if(j>>>0<65536)o=55;else{l=j+-65536|0;a[h>>0]=l>>>10&192|j>>>10&63;a[h+1>>0]=l>>>18&3|216;a[h+2>>0]=j;l=h+3|0;k=4;j=j>>>8&3|220}else{j=65533;o=55}}else{j=i;i=k;o=55}if((o|0)==55){o=0;a[h>>0]=j;l=h+1|0;k=2;j=j>>>8}h=h+k|0;a[l>>0]=j}while(i>>>0<r>>>0)}else h=q;else if(h){n=q;h=k;while(1){i=h+1|0;p=a[h>>0]|0;h=p&255;if((p&255)>191){h=d[2736+(h+-192)>>0]|0;c:do if((i|0)==(r|0))i=r;else while(1){j=a[i>>0]|0;if((j&-64)<<24>>24!=-128)break c;i=i+1|0;h=h<<6|j&63;if((i|0)==(r|0)){i=r;break}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<65536)o=67;else{m=h+-65536|0;a[n>>0]=m>>>18&3|216;a[n+1>>0]=m>>>10&192|h>>>10&63;m=h;j=4;k=n+2|0;l=3;h=h>>>8&3|220}else{h=65533;o=67}}else o=67;if((o|0)==67){o=0;m=h;j=2;k=n;l=1;h=h>>>8}a[k>>0]=h;h=n+j|0;a[n+l>>0]=m;if(i>>>0<r>>>0){n=h;h=i}else break}}else h=q;c[s>>2]=h-q;a[h>>0]=0;h=h+1|0;break}case 2:{if((i|0)>0){h=q;do{i=d[k>>0]|0;l=k+2|0;p=d[k+1>>0]|0;j=p<<8|i;if(l>>>0<r>>>0&(p&248|0)==216){j=(j<<10&983040)+65536|i<<10&64512|d[l>>0]|d[k+3>>0]<<8&768;k=k+4|0}else k=l;if(j>>>0<128){l=h;i=1}else{if(j>>>0<2048){o=h;i=2;l=1;m=192;n=31}else{if(j>>>0<65536){m=h;i=3;l=2;n=1;o=224;p=15}else{a[h>>0]=j>>>18&7|240;m=h+1|0;i=4;l=3;n=2;o=128;p=63}a[m>>0]=j>>>12&p|o;o=h+n|0;m=128;n=63}a[o>>0]=j>>>6&n|m;l=h+l|0;j=j&63|128}h=h+i|0;a[l>>0]=j}while(k>>>0<r>>>0);o=93}else{h=q;o=93}break}default:if((i|0)>0){h=q;while(1){p=d[k>>0]|0;i=k+2|0;l=d[k+1>>0]|0;j=p<<8|l;if(i>>>0<r>>>0&(p&248|0)==216){p=k+4|0;j=(j<<10&983040)+65536|l<<10&64512|d[k+3>>0]|d[i>>0]<<8&768}else p=i;if(j>>>0<128){k=h;i=1}else{if(j>>>0<2048){n=h;i=2;k=1;l=192;m=31}else{if(j>>>0<65536){l=h;i=3;k=2;m=1;n=224;o=15}else{a[h>>0]=j>>>18&7|240;l=h+1|0;i=4;k=3;m=2;n=128;o=63}a[l>>0]=j>>>12&o|n;n=h+m|0;l=128;m=63}a[n>>0]=j>>>6&m|l;k=h+k|0;j=j&63|128}h=h+i|0;a[k>>0]=j;if(p>>>0<r>>>0)k=p;else{o=93;break}}}else{h=q;o=93}}if((o|0)==93)c[s>>2]=h-q;a[h>>0]=0;h=f+8|0;i=b[h>>1]|0;if(!((i&9216)==0?!(c[f+24>>2]|0):0))Cg(f);b[h>>1]=i&-32739|514;a[w>>0]=g;c[t>>2]=q;c[f+20>>2]=q;h=c[u>>2]|0;if(((h|0)!=0?(v=q,(c[h+304>>2]|0)>>>0<=v>>>0):0)?(c[h+308>>2]|0)>>>0>v>>>0:0)h=e[h+276>>1]|0;else h=Wa[c[29352>>2]&127](q)|0;c[f+24>>2]=h;w=0;return w|0}function Jg(d){d=d|0;var e=0,f=0;e=d+12|0;if(Eg(d,(c[e>>2]|0)+2|0,1)|0){e=7;return e|0}f=d+16|0;a[(c[f>>2]|0)+(c[e>>2]|0)>>0]=0;a[(c[f>>2]|0)+((c[e>>2]|0)+1)>>0]=0;e=d+8|0;b[e>>1]=b[e>>1]|512;e=0;return e|0}function Kg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=Ra;Ra=Ra+16|0;d=e;g[d>>3]=0.0;Lg(c,d,b,a)|0;Ra=e;return +(+g[d>>3])}function Lg(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;g[c>>3]=0.0;j=f&255;if(f<<24>>24==1){j=b;i=1;q=1;f=e}else{f=3-j|0;a:do if((f|0)<(e|0))while(1){if(a[b+f>>0]|0){i=0;break a}f=f+2|0;if((f|0)>=(e|0)){i=1;break}}else i=1;while(0);j=b+(j&1)|0;q=2;f=f^1}u=b+f|0;if(j>>>0>=u>>>0){c=0;return c|0}f=j;while(1){j=a[f>>0]|0;if(!(a[880+(j&255)>>0]&1))break;f=f+q|0;if(f>>>0>=u>>>0){f=0;t=69;break}}if((t|0)==69)return f|0;switch(j<<24>>24){case 45:{s=-1;f=f+q|0;break}case 43:{s=1;f=f+q|0;break}default:s=1}b:do if(f>>>0<u>>>0){j=0;m=0;b=0;do{e=a[f>>0]|0;if(!(((m|0)<214748364|(m|0)==214748364&b>>>0<3435973835)&((e&255)+-48|0)>>>0<10))break b;m=Yv(b|0,m|0,10,0)|0;b=(e<<24>>24)+-48|0;b=Sv(m|0,L()|0,b|0,((b|0)<0)<<31>>31|0)|0;m=L()|0;f=f+q|0;j=j+1|0}while(f>>>0<u>>>0)}else{j=0;b=0;m=0}while(0);c:do if(f>>>0<u>>>0){l=0;while(1){e=a[f>>0]|0;if(((e&255)+-48|0)>>>0>=10)break;f=f+q|0;j=j+1|0;e=l+1|0;if(f>>>0<u>>>0)l=e;else{q=1;l=0;p=1;break c}}d:do if(e<<24>>24==46){f=f+q|0;if(f>>>0<u>>>0)while(1){e=a[f>>0]|0;if(((e&255)+-48|0)>>>0>=10){e=l;break d}p=(m|0)<214748364|(m|0)==214748364&b>>>0<3435973835;n=Yv(b|0,m|0,10,0)|0;o=(e<<24>>24)+-48|0;o=Sv(n|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;e=L()|0;b=p?o:b;m=p?e:m;e=l+(p<<31>>31)|0;j=j+1|0;f=f+q|0;if(f>>>0<u>>>0)l=e;else break}else e=l}else e=l;while(0);if(f>>>0<u>>>0){e:do switch(a[f>>0]|0){case 69:case 101:{f=f+q|0;if(f>>>0>=u>>>0){q=0;l=0;p=1;break c}switch(a[f>>0]|0){case 45:{p=-1;f=f+q|0;break}case 43:{p=1;f=f+q|0;break}default:p=1}if(f>>>0<u>>>0){n=0;o=0;while(1){l=a[f>>0]|0;if(((l&255)+-48|0)>>>0>=10){l=o;break e}l=(o|0)<1e4?(o*10|0)+-48+(l<<24>>24)|0:1e4;f=f+q|0;if(f>>>0<u>>>0){n=1;o=l}else{n=1;break}}}else{n=0;l=0}break}default:{n=1;l=0;p=1}}while(0);if(f>>>0<u>>>0)while(1){if(!(a[880+(d[f>>0]|0)>>0]&1)){q=n;break c}f=f+q|0;if(f>>>0>=u>>>0){q=n;break}}else q=n}else{q=1;l=0;p=1}}else{q=1;l=0;p=1;e=0}while(0);e=(G(l,p)|0)+e|0;p=(e|0)<0;l=e>>31|1;f:do if((b|0)==0&(m|0)==0)h=(s|0)<0?-0.0:0.0;else{e=p?0-e|0:e;g:do if((e|0)>0){h:do if((l|0)>0)while(1){if((m|0)>214748364|(m|0)==214748364&b>>>0>3435973835){l=e;break h}b=Yv(b|0,m|0,10,0)|0;m=L()|0;l=e+-1|0;if((e|0)>1)e=l;else{t=51;break g}}else while(1){n=Wv(b|0,m|0,10,0)|0;o=L()|0;l=Yv(n|0,o|0,10,0)|0;l=Tv(b|0,m|0,l|0,L()|0)|0;if(!((l|0)==0&(L()|0)==0)){l=e;break h}l=e+-1|0;if((e|0)>1){e=l;b=n;m=o}else{b=n;m=o;t=51;break g}}while(0);o=(s|0)<0;e=Tv(0,0,b|0,m|0)|0;s=L()|0;e=o?e:b;b=o?s:m;if((l|0)>307){if((l|0)>=342){h=+(e>>>0)+4294967296.0*+(b|0);if(p){h=h*0.0;break f}else{h=h*r;break f}}l=l+-308|0;k=(l&1|0)==0?1.0:10.0;l=l>>1;if(l){h=10.0;do{h=h*h;k=(l&1|0)==0?k:k*h;l=l>>1}while((l|0)!=0)}h=+(e>>>0)+4294967296.0*+(b|0);if(p){h=h/k/1.e+308;break f}else{h=k*h*1.e+308;break f}}}else{l=e;t=51}while(0);if((t|0)==51){s=(s|0)<0;e=Tv(0,0,b|0,m|0)|0;t=L()|0;e=s?e:b;b=s?t:m;if(!l){h=+(e>>>0)+4294967296.0*+(b|0);break}}h=(l&1|0)==0?1.0:10.0;l=l>>1;if(l){k=10.0;do{k=k*k;h=(l&1|0)==0?h:h*k;l=l>>1}while((l|0)!=0)}k=+(e>>>0)+4294967296.0*+(b|0);h=p?k/h:h*k}while(0);g[c>>3]=h;c=(q|0)!=0&((j|0)>0&(f|0)==(u|0))?i:0;return c|0}function Mg(a){a=+a;var b=0,c=0;if(!(a<=-9223372036854775808.0))if(!(a>=9223372036854775808.0)){c=+t(a)>=1.0?(a>0.0?~~+H(+s(a/4294967296.0),4294967295.0)>>>0:~~+F((a-+(~~a>>>0))/4294967296.0)>>>0):0;b=~~a>>>0}else{c=2147483647;b=-1}else{c=-2147483648;b=0}K(c|0);return b|0}function Ng(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=Ra;Ra=Ra+16|0;f=e;g=f;c[g>>2]=0;c[g+4>>2]=0;Og(d,f,b,a)|0;b=f;d=c[b>>2]|0;K(c[b+4>>2]|0);Ra=e;return d|0}function Og(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;i=g&255;if(g<<24>>24==1){h=0;o=1;i=b;g=f}else{g=3-i|0;a:do if((g|0)<(f|0))while(1){if(a[b+g>>0]|0){h=1;break a}g=g+2|0;if((g|0)>=(f|0)){h=0;break}}else h=0;while(0);o=2;i=b+(i&1)|0;g=g^1}n=b+g|0;b:do if(i>>>0<n>>>0){while(1){g=a[i>>0]|0;if(!(a[880+(g&255)>>0]&1))break;g=i+o|0;if(g>>>0<n>>>0)i=g;else{m=0;break b}}switch(g<<24>>24){case 45:{m=1;g=i+o|0;break b}case 43:{m=0;g=i+o|0;break b}default:{m=0;g=i;break b}}}else{m=0;g=i}while(0);c:do if(g>>>0<n>>>0){i=g;do{if((a[i>>0]|0)!=48)break c;i=i+o|0}while(i>>>0<n>>>0)}else i=g;while(0);do if(i>>>0<n>>>0){k=0;l=i;j=0;f=0;while(1){b=a[l>>0]|0;if((b+-48&255)>=10){b=k;k=1;break}f=Yv(j|0,f|0,10,0)|0;j=b<<24>>24;f=Sv(f|0,L()|0,-48,-1)|0;j=Sv(f|0,L()|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;b=k+o|0;l=i+b|0;if(l>>>0>=n>>>0){k=0;break}else k=b}l=(m|0)!=0;if((f|0)>=0)if(l){p=26;break}else{l=0;break}else{j=l?0:-1;f=l?-2147483648:2147483647;break}}else if(!m){b=0;k=0;j=0;f=0;l=0}else{b=0;k=0;j=0;f=0;p=26}while(0);if((p|0)==26){j=Tv(0,0,j|0,f|0)|0;f=L()|0;l=1}m=e;c[m>>2]=j;c[m+4>>2]=f;if(!b){g=(g|0)==(i|0);if((h|0)!=0|g|k^1)h=h|g&1;else p=30}else if(!((h|0)!=0|k^1))p=30;d:do if((p|0)==30){g=b;while(1){if(!(a[880+(d[i+g>>0]|0)>>0]&1)){h=1;break d}g=g+o|0;if((i+g|0)>>>0>=n>>>0){h=0;break}}}while(0);g=o*19|0;if(b>>>0<g>>>0){e=h;return e|0}if(b>>>0>g>>>0){c[e>>2]=l?0:-1;c[e+4>>2]=l?-2147483648:2147483647;e=2;return e|0}g=0;do{f=i+(G(g,o)|0)|0;f=(a[f>>0]|0)-(a[32536+g>>0]|0)|0;g=g+1|0;b=(f|0)==0}while(g>>>0<18&b);if(b)g=(a[i+(o*18|0)>>0]|0)+-56|0;else g=f*10|0;if((g|0)<0){e=h;return e|0}else{c[e>>2]=l?0:-1;c[e+4>>2]=l?-2147483648:2147483647;return ((g|0)==0?(l?h:3):2)|0}return 0}function Pg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=a+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(a);c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}function Qg(a){a=a|0;return}\nfunction Sg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0;k=d+8|0;h=b[k>>1]|0;j=h&65535;if(j&1|0)return;switch(e<<24>>24){case 65:{if(j&16|0){b[k>>1]=j&15920;return}if(!((j&2|0)!=0|(j&12|0)==0)){Hg(d,f,1)|0;h=b[k>>1]|0}h=h&-13;b[k>>1]=h;h=h&65535;if(!(h&2))return;b[k>>1]=h&15904|16;return}case 67:{oh(d);return}case 68:{do if(!(j&4)){if(j&8|0){e=Mg(+g[d>>3])|0;f=L()|0;break}if(!(j&18)){e=0;f=0}else{e=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;f=L()|0;h=b[k>>1]|0}}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}while(0);c[d>>2]=e;c[d+4>>2]=f;b[k>>1]=h&15904|4;return}case 69:{do if(!(j&8)){if(j&4|0){j=d;i=+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0);break}if(!(j&18))i=0.0;else{i=+Kg(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0);h=b[k>>1]|0}}else i=+g[d>>3];while(0);g[d>>3]=i;b[k>>1]=h&15904|8;return}default:{e=j>>>3&2|j;h=e&65535;b[k>>1]=h;if(!((j&12|0)==0|(e&2|0)!=0)){Hg(d,f,1)|0;h=b[k>>1]|0}b[k>>1]=h&-16413;return}}}function Tg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,l=0,m=0;j=b[a+8>>1]|0;l=j&65535;k=b[d+8>>1]|0;m=k&65535;i=(k|j)&65535;if(i&1|0){d=(m&1)-(l&1)|0;return d|0}if(!(i&12)){if(i&2|0){if(!(l&2)){d=1;return d|0}if(!(m&2)){d=-1;return d|0}if(e|0){d=ph(a,d,e,0)|0;return d|0}}d=qh(a,d)|0;return d|0}i=k&j&65535;if(i&4|0){l=a;a=c[l>>2]|0;l=c[l+4>>2]|0;m=d;d=c[m>>2]|0;m=c[m+4>>2]|0;return ((l|0)<(m|0)|(l|0)==(m|0)&a>>>0<d>>>0?-1:((l|0)>(m|0)|(l|0)==(m|0)&a>>>0>d>>>0)&1)|0}if(i&8|0){h=+g[a>>3];f=+g[d>>3];if(h<f){d=-1;return d|0}d=h>f&1;return d|0}if(l&4|0){if(!(m&8)){d=-1;return d|0}k=a;j=c[k>>2]|0;k=c[k+4>>2]|0;h=+g[d>>3];if(h<-9223372036854775808.0){d=1;return d|0}if(h>=9223372036854775808.0){d=-1;return d|0}i=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;if((k|0)<(e|0)|(k|0)==(e|0)&j>>>0<i>>>0){d=-1;return d|0}if((k|0)>(e|0)|(k|0)==(e|0)&j>>>0>i>>>0){d=1;return d|0}f=+(j>>>0)+4294967296.0*+(k|0);if(h>f){d=-1;return d|0}d=h<f&1;return d|0}if(!(l&8)){d=1;return d|0}if(!(m&4)){d=-1;return d|0}k=d;j=c[k>>2]|0;k=c[k+4>>2]|0;h=+g[a>>3];if(h<-9223372036854775808.0){d=-1;return d|0}if(h>=9223372036854775808.0){d=1;return d|0}i=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;if((k|0)<(e|0)|(k|0)==(e|0)&j>>>0<i>>>0){d=1;return d|0}if((k|0)>(e|0)|(k|0)==(e|0)&j>>>0>i>>>0){d=-1;return d|0}f=+(j>>>0)+4294967296.0*+(k|0);if(h>f){d=1;return d|0}d=(h<f)<<31>>31;return d|0}function Ug(e,f,g){e=e|0;f=f|0;g=g|0;var h=0;do switch(f|0){case 10:{b[g+8>>1]=16385;c[g+12>>2]=0;c[g>>2]=0;g=0;return g|0}case 0:case 11:{b[g+8>>1]=1;g=0;return g|0}case 1:{e=a[e>>0]|0;f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=1;return g|0}case 2:{e=a[e>>0]<<8|d[e+1>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=2;return g|0}case 3:{e=d[e+1>>0]<<8|a[e>>0]<<16|d[e+2>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=3;return g|0}case 4:{e=d[e+1>>0]<<16|a[e>>0]<<24|d[e+2>>0]<<8|d[e+3>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=4;return g|0}case 5:{h=a[e>>0]<<8|d[e+1>>0];f=g;c[f>>2]=d[e+3>>0]<<16|d[e+2>>0]<<24|d[e+4>>0]<<8|d[e+5>>0];c[f+4>>2]=h;b[g+8>>1]=4;g=6;return g|0}case 7:case 6:{vh(e,f,g);h=8;return h|0}case 9:case 8:{h=g;c[h>>2]=f+-8;c[h+4>>2]=0;b[g+8>>1]=4;h=0;return h|0}default:{c[g+16>>2]=e;h=(f+-12|0)>>>1;c[g+12>>2]=h;b[g+8>>1]=b[31116+((f&1)<<1)>>1]|0;return h|0}}while(0);return 0}function Vg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;i=o;if((d|0)<1){c[i>>2]=32306;c[i+4>>2]=67596;c[i+8>>2]=31517;Db(11,32001,i);g=11;Ra=o;return g|0}n=c[b+4>>2]|0;c[n+4>>2]=c[b>>2];l=(e|0)!=0;if(l?(m=n+80|0,(c[m>>2]|0)==0):0){k=c[n+32>>2]|0;if((c[14813]|0)>=(k|0)?(h=c[14819]|0,(h|0)!=0):0){c[14819]=c[h>>2];e=c[14820]|0;c[14820]=e+-1;c[14821]=(e|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0)c[14983]=i}else j=11;a:do if((j|0)==11){j=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;e=L()|0;do if(!(e>>>0>0|(e|0)==0&j>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;e=59064;i=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&i>>>0>0){j=c[14978]|0;e=Tv(i|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&e>>>0<=j>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h)break;i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}i=Wa[c[29352>>2]&127](h)|0;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14980]|0)+i|0;c[14980]=i;if(i>>>0<=(c[14984]|0)>>>0)break a;c[14984]=i;break a}while(0);c[m>>2]=0;g=7;Ra=o;return g|0}while(0);c[m>>2]=h;k=h;j=k;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;c[m>>2]=(c[m>>2]|0)+4}if((d|0)==1)d=(c[n+44>>2]|0)!=0&1;c[g+64>>2]=d;a[g+68>>0]=-1;c[g+112>>2]=f;c[g+8>>2]=b;c[g+20>>2]=n;j=g+1|0;a[j>>0]=l&1;a[g+2>>0]=l?0:2;i=n+8|0;h=c[i>>2]|0;e=h;if(h|0)do{if((c[h+64>>2]|0)==(d|0)){n=h+1|0;a[n>>0]=a[n>>0]|32;a[j>>0]=a[j>>0]|32}h=c[h+24>>2]|0}while((h|0)!=0);c[g+24>>2]=e;c[i>>2]=g;a[g>>0]=1;g=0;Ra=o;return g|0}function Wg(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+64|0;y=A+16|0;p=A;r=A+52|0;s=A+48|0;z=A+44|0;x=A+40|0;l=A+36|0;m=A+32|0;n=A+56|0;o=A+28|0;i=c[e>>2]|0;v=e+4|0;u=c[v>>2]|0;j=u+4|0;c[j>>2]=i;a:do if(!(a[u+17>>0]|0)){h=fg(u,s,z,1,0)|0;c[x>>2]=h;if(!h){q=c[s>>2]|0;break}else{z=h;Ra=A;return z|0}}else{k=u+8|0;h=c[k>>2]|0;if(h|0)do{w=h+1|0;a[w>>0]=a[w>>0]&-5;h=c[h+24>>2]|0}while((h|0)!=0);c[j>>2]=i;q=c[(c[u+12>>2]|0)+56>>2]|0;q=d[q+53>>0]<<16|d[q+52>>0]<<24|d[q+54>>0]<<8|d[q+55>>0];c[z>>2]=q;i=u+36|0;j=1073741824/((c[u+32>>2]|0)>>>0)|0;while(1){w=q+1|0;if(w>>>0<2)h=0;else{h=q+-1|0;h=h-((h>>>0)%(((((c[i>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;h=((h+1|0)==(j|0)?3:2)+h|0}if((q|0)==(j|0)|(w|0)==(h|0))q=w;else break}c[z>>2]=w;h=fg(u,m,l,w,1)|0;c[x>>2]=h;b:do if(!h){l=c[l>>2]|0;c:do if((l|0)==(w|0)){l=c[m>>2]|0;c[s>>2]=l}else{a[n>>0]=0;c[o>>2]=0;h=c[k>>2]|0;if(!h)h=0;else h=$f(h,0,0)|0;c[x>>2]=h;i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{t=c[i+20>>2]|0;m=t+120|0;c[m>>2]=(c[m>>2]|0)+-1;t=t+136|0;c[i+16>>2]=c[t>>2];c[t>>2]=i;break}}while(0);do if(!h){h=c[u>>2]|0;h=Za[c[h+204>>2]&127](h,w,r,0)|0;if(h|0){c[x>>2]=h;break}h=c[r>>2]|0;j=c[h+8>>2]|0;i=j+4|0;if((c[i>>2]|0)!=(w|0)){c[j+56>>2]=c[h+4>>2];c[j+72>>2]=h;c[j+52>>2]=u;c[i>>2]=w;a[j+9>>0]=(q|0)==0?100:0}c[s>>2]=j;h=eg(u,w,n,o)|0;c[x>>2]=h;i=a[n>>0]|0;if((i+-1&255)>=2){if(!h){h=gg(u,j,i,c[o>>2]|0,l,0)|0;c[x>>2]=h;do if(j|0){i=c[j+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{t=c[i+20>>2]|0;p=t+120|0;c[p>>2]=(c[p>>2]|0)+-1;t=t+136|0;c[i+16>>2]=c[t>>2];c[t>>2]=i;break}}while(0);if(h|0)break;h=c[u>>2]|0;h=Za[c[h+204>>2]&127](h,w,r,0)|0;if(h|0){c[x>>2]=h;break}h=c[r>>2]|0;l=c[h+8>>2]|0;i=l+4|0;if((c[i>>2]|0)==(w|0))k=l+72|0;else{c[l+56>>2]=c[h+4>>2];k=l+72|0;c[k>>2]=h;c[l+52>>2]=u;c[i>>2]=w;a[l+9>>0]=(q|0)==0?100:0}c[s>>2]=l;c[x>>2]=0;i=c[k>>2]|0;j=c[i+20>>2]|0;do if(b[i+28>>1]&4){if((c[j+24>>2]|0)>>>0<(c[i+24>>2]|0)>>>0){t=44;break}if(!(c[j+96>>2]|0)){c[x>>2]=0;t=55;break}else{h=Ve(i)|0;t=49;break}}else t=44;while(0);do if((t|0)==44){h=c[j+40>>2]|0;if(h|0){c[x>>2]=h;break}if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(i)|0;t=49;break}else{h=Xf(i)|0;t=49;break}}while(0);if((t|0)==49){c[x>>2]=h;if(!h)t=55}if((t|0)==55)break c;if(!l)break;i=c[k>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}else{c[p>>2]=32306;c[p+4>>2]=72254;c[p+8>>2]=31517;Db(11,32001,p);c[x>>2]=11;h=11}if(j){i=c[j+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}while(0);break b}while(0);ig(u,w,1,0,x);h=c[x>>2]|0;if(h|0){if(!l)break;i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}i=c[v>>2]|0;c[i+4>>2]=c[e>>2];i=c[i+12>>2]|0;k=c[i+56>>2]|0;i=c[i+72>>2]|0;j=c[i+20>>2]|0;if((b[i+28>>1]&4)!=0?(c[j+24>>2]|0)>>>0>=(c[i+24>>2]|0)>>>0:0)if(!(c[j+96>>2]|0))t=76;else{h=Ve(i)|0;t=70}else t=66;do if((t|0)==66){h=c[j+40>>2]|0;if(!h)if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(i)|0;t=70;break}else{h=Xf(i)|0;t=70;break}}while(0);if((t|0)==70)if(!h)t=76;if((t|0)==76){a[k+52>>0]=w>>>24;a[k+53>>0]=w>>>16;a[k+54>>0]=w>>>8;a[k+55>>0]=w;c[x>>2]=0;q=l;break a}c[x>>2]=h;if(l){i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}while(0);z=h;Ra=A;return z|0}while(0);k=(g&1|0)==0?10:13;o=c[q+56>>2]|0;j=q+52|0;p=c[j>>2]|0;i=d[q+9>>0]|0;if(!(b[p+22>>1]&12)){h=o+i|0;n=p+36|0}else{n=p+36|0;h=o+i|0;gw(h|0,0,(c[n>>2]|0)-i|0)|0}a[h>>0]=k;l=i+8|0;m=l&65535;h=o+(i+1)|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;a[o+(i+7)>>0]=0;h=o+(i+5)|0;a[h>>0]=(c[n>>2]|0)>>>8;a[h+1>>0]=c[n>>2];c[q+20>>2]=(c[n>>2]|0)-l&65535;a[q+8>>0]=1;h=q+10|0;a[h>>0]=0;c[q+76>>2]=120;i=c[j>>2]|0;switch(k&7){case 5:{a[q+2>>0]=1;a[q+3>>0]=1;c[q+80>>2]=180;b[q+14>>1]=b[i+28>>1]|0;h=i+30|0;t=86;break}case 2:{a[q+2>>0]=0;a[q+3>>0]=0;c[q+80>>2]=179;b[q+14>>1]=b[i+24>>1]|0;h=i+26|0;t=86;break}default:{c[y>>2]=32306;c[y+4>>2]=65035;c[y+8>>2]=31517;Db(11,32001,y);h=a[h>>0]|0}}if((t|0)==86){b[q+16>>1]=b[h>>1]|0;a[q+11>>0]=a[i+21>>0]|0;h=0}b[q+18>>1]=m;c[q+60>>2]=o+(c[n>>2]|0);c[q+64>>2]=o+l;c[q+68>>2]=o+(h&255);a[q+12>>0]=0;b[q+26>>1]=(c[p+32>>2]|0)+65535;b[q+24>>1]=0;a[q>>0]=1;h=c[q+72>>2]|0;do if(h|0)if(!(b[h+28>>1]&32)){Df(h);break}else{y=c[h+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[h+16>>2]=c[y>>2];c[y>>2]=h;break}while(0);c[f>>2]=c[z>>2];z=0;Ra=A;return z|0}function Xg(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;V=Ra;Ra=Ra+80|0;R=V+56|0;T=V+40|0;S=V+24|0;Q=V+8|0;P=V;a:do if(!g)if((a[f>>0]|0)==0?(l=d[f+1>>0]|0,(l&2|0)!=0):0){o=f+32|0;n=o;m=c[n>>2]|0;n=c[n+4>>2]|0;if((m|0)==(h|0)&(n|0)==(i|0)){c[k>>2]=0;U=0;Ra=V;return U|0}if((n|0)<(i|0)|(n|0)==(i|0)&m>>>0<h>>>0){if(l&8|0){c[k>>2]=-1;U=0;Ra=V;return U|0}N=Sv(m|0,n|0,1,0)|0;if((N|0)==(h|0)&(L()|0)==(i|0)){c[k>>2]=0;l=Yg(f,0)|0;switch(l|0){case 101:{N=0;break a}case 0:break;default:{U=l;Ra=V;return U|0}}bg(f);N=o;if((c[N>>2]|0)==(h|0)?(c[N+4>>2]|0)==(i|0):0){U=0;Ra=V;return U|0}else N=0}else N=0}else N=0}else N=0;else{l=c[g>>2]|0;do if((e[l+8>>1]|0)<14){m=e[(c[g+4>>2]|0)+8>>1]|0;N=(a[c[l+16>>2]>>0]|0)==0;a[g+12>>0]=N?-1:1;a[g+13>>0]=N?1:-1;if(!(m&4)){if(m&25|0){l=88;break}if(!(c[l+20>>2]|0))l=90;else{l=88;break}}else l=89}else l=88;while(0);a[g+11>>0]=0;N=l}while(0);l=xh(f)|0;switch(l|0){case 0:{K=f+116|0;B=1-j|0;C=f+70|0;D=(N|0)==0;E=f+1|0;F=f+32|0;M=f+50|0;G=f+32|0;H=f+20|0;I=f+68|0;J=f+2|0;l=0;m=0;b:while(1){A=c[K>>2]|0;x=A+24|0;o=(e[x>>1]|0)+-1|0;j=o>>B;b[C>>1]=j;w=A+68|0;y=A+26|0;z=A+64|0;c:do if(D){t=A+3|0;u=A+60|0;n=A+8|0;s=j;r=o;o=0;d:while(1){j=(c[z>>2]|0)+(s<<1)|0;j=(c[w>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[y>>1])|0;e:do if(a[t>>0]|0){p=j+1|0;if((a[j>>0]|0)<0){q=c[u>>2]|0;while(1){if(p>>>0>=q>>>0)break;j=p+1|0;if((a[p>>0]|0)<0)p=j;else{U=29;break e}}c[Q>>2]=32306;c[Q+4>>2]=68640;c[Q+8>>2]=31517;Db(11,32001,Q);q=1;j=s;l=11;p=r}else{j=p;U=29}}else U=29;while(0);f:do if((U|0)==29){U=0;Of(j,P)|0;p=P;j=c[p>>2]|0;p=c[p+4>>2]|0;do if((p|0)<(i|0)|(p|0)==(i|0)&j>>>0<h>>>0){o=s+1|0;if((s|0)<(r|0))p=r;else{q=4;j=s;m=-1;p=r;break f}}else{if((p|0)>(i|0)|(p|0)==(i|0)&j>>>0>h>>>0){p=s+-1|0;if((o|0)<(s|0))break;else{q=4;j=s;m=1;break f}}b[C>>1]=s;if(!(a[n>>0]|0)){q=8;j=s;p=r;o=s;break f}a[E>>0]=a[E>>0]|2;q=F;c[q>>2]=j;c[q+4>>2]=p;b[M>>1]=0;c[k>>2]=0;q=1;j=s;l=0;p=r;break f}while(0);q=0;j=p+o>>1}while(0);switch(q&15){case 4:{U=74;break c}case 8:{U=76;break c}case 0:{s=j;r=p;break}default:break d}}if(q){U=85;break b}}else{s=A+11|0;t=A+14|0;u=A+10|0;v=A+80|0;n=o;o=0;while(1){p=(c[z>>2]|0)+(j<<1)|0;p=(c[w>>2]|0)+((d[p>>0]<<8|d[p+1>>0])&e[y>>1])|0;r=a[p>>0]|0;q=r&255;m=p+1|0;do if((r&255)>(d[s>>0]|0)){m=d[m>>0]|0;if((m&128|0)==0?(O=(q<<7&16256)+m|0,O>>>0<=(e[t>>1]|0)>>>0):0){m=Ya[N&127](O,p+2|0,g)|0;break}cb[c[v>>2]&255](A,p+(0-(d[u>>0]|0))|0,G);r=c[G>>2]|0;if((r|0)<2){U=45;break b}q=c[H>>2]|0;if(((r>>>0)/((c[q+36>>2]|0)>>>0)|0)>>>0>(c[q+44>>2]|0)>>>0){U=45;break b}m=r+18|0;q=Sv(m|0,((m|0)<0)<<31>>31|0,-1,-1)|0;p=L()|0;if(p>>>0>0|(p|0)==0&q>>>0>2147483390){l=7;break b}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](m)|0;if(!m){l=7;break b}else p=m}else{q=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;p=59064;m=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&m>>>0>0){W=c[14978]|0;p=Tv(m|0,p|0,q|0,((q|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&p>>>0<=W>>>0)&1}p=Wa[c[29340>>2]&127](q)|0;if(!p){l=7;break b}m=Wa[c[29352>>2]&127](p)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}b[C>>1]=j;m=cg(f,0,r,p,0)|0;a[E>>0]=a[E>>0]&-5;if(m|0){U=59;break b}m=Fh(r,p,g,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{W=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-W;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else m=Ya[N&127](q,m,g)|0;while(0);if((m|0)<0)o=j+1|0;else{if(!m){U=69;break b}n=j+-1|0}if((o|0)>(n|0))break;j=n+o>>1}n=A+8|0;U=74}while(0);if((U|0)==74)if(!(a[n>>0]|0))U=76;else{U=75;break}if((U|0)==76){U=0;if((o|0)<(e[x>>1]|0)){n=(c[z>>2]|0)+(o<<1)|0;n=(d[n>>0]<<8|d[n+1>>0])&e[y>>1]}else n=(d[A+9>>0]|0)+8|0;r=(c[A+56>>2]|0)+n|0;j=a[r>>0]|0;p=a[r+1>>0]|0;q=a[r+2>>0]|0;r=a[r+3>>0]|0;n=o&65535;b[C>>1]=n;o=a[I>>0]|0;if(o<<24>>24>18){U=80;break}W=c[H>>2]|0;b[M>>1]=0;a[E>>0]=a[E>>0]&-7;A=o<<24>>24;b[f+72+(A<<1)>>1]=n;c[f+120+(A<<2)>>2]=c[K>>2];b[C>>1]=0;a[I>>0]=o+1<<24>>24;n=yh(W,(p&255)<<16|(j&255)<<24|(q&255)<<8|r&255,K,f,d[J>>0]|0)|0;if(n){l=n;break}}}do if((U|0)==45){c[S>>2]=32306;c[S+4>>2]=68714;c[S+8>>2]=31517;Db(11,32001,S);l=11}else if((U|0)==59)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);l=m;break}else{l=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);l=m;break}else if((U|0)==69){c[k>>2]=0;b[C>>1]=j;if(!(a[g+11>>0]|0))l=0;else{c[T>>2]=32306;c[T+4>>2]=68745;c[T+8>>2]=31517;Db(11,32001,T);l=11}}else if((U|0)==75){b[C>>1]=j;c[k>>2]=m;l=0}else if((U|0)==80){c[R>>2]=32306;c[R+4>>2]=68229;c[R+8>>2]=31517;Db(11,32001,R);l=11}else if((U|0)==85){Ra=V;return l|0}while(0);b[M>>1]=0;W=l;Ra=V;return W|0}case 16:{c[k>>2]=-1;W=0;Ra=V;return W|0}default:{W=l;Ra=V;return W|0}}return 0}function Yg(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=Ra;Ra=Ra+16|0;r=s;o=f+50|0;b[o>>1]=0;p=f+1|0;a[p>>0]=a[p>>0]&-7;if(a[f>>0]|0){r=Gh(f)|0;Ra=s;return r|0}q=f+116|0;h=c[q>>2]|0;n=f+70|0;g=b[n>>1]|0;m=g+1<<16>>16;b[n>>1]=m;if((m&65535)>=(e[h+24>>1]|0)){b[n>>1]=g;r=Gh(f)|0;Ra=s;return r|0}if(a[h+8>>0]|0){r=0;Ra=s;return r|0}k=f+68|0;l=f+20|0;m=f+2|0;while(1){g=b[n>>1]|0;i=(c[h+64>>2]|0)+((g&65535)<<1)|0;i=(c[h+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[h+26>>1])|0;j=a[k>>0]|0;if(j<<24>>24>18){h=8;break}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];t=c[l>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;u=j<<24>>24;b[f+72+(u<<1)>>1]=g;c[f+120+(u<<2)>>2]=h;b[n>>1]=0;a[k>>0]=j+1<<24>>24;g=yh(t,i,q,f,d[m>>0]|0)|0;if(g|0){h=11;break}h=c[q>>2]|0;if(a[h+8>>0]|0){g=0;h=11;break}}if((h|0)==8){c[r>>2]=32306;c[r+4>>2]=68229;c[r+8>>2]=31517;Db(11,32001,r);u=11;Ra=s;return u|0}else if((h|0)==11){Ra=s;return g|0}return 0}function Zg(d,e){d=d|0;e=e|0;var f=0,g=0;e=d+1|0;a[e>>0]=a[e>>0]&-15;b[d+50>>1]=0;if(((a[d>>0]|0)==0?(f=d+70|0,g=b[f>>1]|0,g<<16>>16):0)?a[(c[d+116>>2]|0)+8>>0]|0:0){b[f>>1]=g+-1<<16>>16;g=0;return g|0}g=Hh(d)|0;return g|0}function _g(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;u=v;m=c[i+4>>2]|0;a[i+10>>0]=0;t=a[h>>0]|0;j=t&255;do if(t<<24>>24<=-1){k=d[h+1>>0]|0;if(!(k&128)){t=j<<7&16256|k;j=2;break}l=d[h+2>>0]|0;if(!(l&128)){t=(j<<14|l)&2080895|k<<7&16256;j=3;break}else{j=Of(h,u)|0;s=u;t=c[s>>2]|0;t=((t|0)==(t|0)?0==(c[s+4>>2]|0):0)?t:-1;break}}else{t=j;j=1}while(0);j=j&255;if(t>>>0>g>>>0|t>>>0<=j>>>0){u=0;i=i+8|0;b[i>>1]=u;Ra=v;return}s=f+4|0;q=f+12|0;r=i+8|0;p=0;o=t;while(1){l=h+j|0;n=a[l>>0]|0;k=n&255;if(n<<24>>24>-1)l=1;else{f=d[l+1>>0]|0;do if(f&128){n=d[l+2>>0]|0;if(!(n&128)){k=(k<<14|n)&2080895|f<<7&16256;l=3;break}else{l=Of(l,u)|0;n=u;k=c[n>>2]|0;k=((k|0)==(k|0)?0==(c[n+4>>2]|0):0)?k:-1;break}}else{k=k<<7&16256|f;l=2}while(0);l=l&255}a[m+10>>0]=a[s>>0]|0;c[m+32>>2]=c[q>>2];c[m+24>>2]=0;c[m+16>>2]=0;o=(Ug(h+o|0,k,m)|0)+o|0;p=p+1<<16>>16;j=l+j|0;if((p&65535)>=(e[r>>1]|0))break;if(o>>>0>g>>>0|j>>>0>=t>>>0)break;else m=m+40|0}if(o>>>0<=g>>>0|p<<16>>16==0){u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}j=m+8|0;if(!(b[j>>1]&9216)){b[j>>1]=1;u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}else{Dg(m);u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}}function $g(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=Ra;Ra=Ra+16|0;u=w;if((a[f>>0]|0)==0?a[f+1>>0]&8:0){v=0;Ra=w;return v|0}h=xh(f)|0;switch(h|0){case 0:{c[g>>2]=0;r=f+116|0;h=c[r>>2]|0;s=f+70|0;a:do if(!(a[h+8>>0]|0)){n=f+68|0;o=f+20|0;p=f+50|0;t=f+1|0;q=f+2|0;while(1){k=(c[h+56>>2]|0)+((d[h+9>>0]|0)+8)|0;g=a[k>>0]|0;i=a[k+1>>0]|0;j=a[k+2>>0]|0;k=a[k+3>>0]|0;l=b[h+24>>1]|0;b[s>>1]=l;m=a[n>>0]|0;if(m<<24>>24>18){v=9;break}x=c[o>>2]|0;b[p>>1]=0;a[t>>0]=a[t>>0]&-7;y=m<<24>>24;b[f+72+(y<<1)>>1]=l;c[f+120+(y<<2)>>2]=h;b[s>>1]=0;a[n>>0]=m+1<<24>>24;g=yh(x,(i&255)<<16|(g&255)<<24|(j&255)<<8|k&255,r,f,d[q>>0]|0)|0;if(g|0)break;h=c[r>>2]|0;if(a[h+8>>0]|0){g=t;break a}}if((v|0)==9){c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);g=11}a[t>>0]=a[t>>0]&-9;y=g;Ra=w;return y|0}else g=f+1|0;while(0);b[s>>1]=(e[h+24>>1]|0)+65535;a[g>>0]=a[g>>0]|8;y=0;Ra=w;return y|0}case 16:{c[g>>2]=1;y=0;Ra=w;return y|0}default:{y=h;Ra=w;return y|0}}return 0}function ah(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;N=Ra;Ra=Ra+80|0;H=N+40|0;G=N;A=N+64|0;B=N+60|0;M=N+56|0;C=N+52|0;c[C>>2]=i;o=c[f+8>>2]|0;q=o+4|0;F=c[q>>2]|0;if((a[f>>0]|0)==4){M=c[f+4>>2]|0;Ra=N;return M|0}I=f+1|0;l=a[I>>0]|0;a:do if(l&32){m=c[f+64>>2]|0;j=c[F+8>>2]|0;b:do if(!j)K=14;else{c:do if(m){do{if((j|0)!=(f|0)?(c[j+64>>2]|0)==(m|0):0)break c;j=c[j+24>>2]|0}while((j|0)!=0);if(!f)break b;else{K=14;break b}}else{k=f+24|0;while(1){if((j|0)!=(f|0))break c;j=c[k>>2]|0;if(!j){K=14;break b}}}while(0);j=$f(j,m,f)|0;c[M>>2]=j;if(!j)break a;Ra=N;return j|0}while(0);if((K|0)==14)a[I>>0]=l&-33;c[M>>2]=0}while(0);J=f+112|0;z=c[J>>2]|0;k=z;do if(!z){l=c[f+64>>2]|0;n=g+8|0;m=c[n>>2]|0;n=c[n+4>>2]|0;k=o+11|0;if(a[k>>0]|0?(a[k>>0]=0,p=c[(c[q>>2]|0)+8>>2]|0,p|0):0){j=p;do{if((a[j+1>>0]&16?(a[k>>0]=1,(c[j+64>>2]|0)==(l|0)):0)?(z=j+32|0,(c[z>>2]|0)==(m|0)?(c[z+4>>2]|0)==(n|0):0):0)a[j>>0]=1;j=c[j+24>>2]|0}while((j|0)!=0)}if(a[I>>0]&2?(z=f+32|0,(m|0)==(c[z>>2]|0)?(n|0)==(c[z+4>>2]|0):0):0){if(!(b[f+50>>1]|0))break;if((c[f+44>>2]|0)!=((c[g+32>>2]|0)+(c[g+28>>2]|0)|0))break;M=Ih(f,g)|0;Ra=N;return M|0}if((i|0)==0?(r=Xg(f,0,m,n,(h|0)!=0&1,C)|0,c[M>>2]=r,r|0):0){M=r;Ra=N;return M|0}}else{do if(!(h&2|i)){j=b[g+24>>1]|0;if(!(j<<16>>16)){j=g+8|0;j=th(f,c[g>>2]|0,c[j>>2]|0,c[j+4>>2]|0,(h|0)!=0&1,C)|0;c[M>>2]=j}else{c[G>>2]=k;c[G+4>>2]=c[g+20>>2];b[G+8>>1]=j;j=G+10|0;b[j>>1]=0;b[j+2>>1]=0;a[j+4>>0]=0;j=Xg(f,G,0,0,(h|0)!=0&1,C)|0;c[M>>2]=j}if(!j){j=c[C>>2]|0;break}else{M=j;Ra=N;return M|0}}else j=i;while(0);if((j|0)==0?(bg(f),y=f+32|0,n=c[y>>2]|0,z=g+8|0,(n|0)==(c[z>>2]|0)?(c[y+4>>2]|0)==(c[z+4>>2]|0):0):0){c[G+16>>2]=c[g>>2];c[G+28>>2]=n;c[G+32>>2]=0;M=Ih(f,G)|0;Ra=N;return M|0}}while(0);z=f+116|0;y=c[z>>2]|0;if((c[y+20>>2]|0)<0?(s=Jh(y)|0,c[M>>2]=s,s|0):0){M=s;Ra=N;return M|0}x=c[F+80>>2]|0;o=d[y+10>>0]|0;if(!(a[y+2>>0]|0)){m=c[g+8>>2]|0;l=c[g>>2]|0;do if(m>>>0>=128){j=x+o|0;k=((m|0)<0)<<31>>31;if(m>>>0<16384){w=bw(m|0,k|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=m&127;j=2;break}else{j=(wh(j,m,k)|0)&255;break}}else{a[x+o>>0]=m;j=1}while(0);r=m;n=j+o|0;q=m}else{q=c[g+28>>2]|0;n=(c[g+32>>2]|0)+q|0;p=c[g+16>>2]|0;do if(n>>>0>=128){j=x+o|0;k=((n|0)<0)<<31>>31;if(n>>>0<16384){w=bw(n|0,k|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=n&127;j=2;break}else{j=(wh(j,n,k)|0)&255;break}}else{a[x+o>>0]=n;j=1}while(0);m=j+o|0;j=x+m|0;l=g+8|0;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(l>>>0<0|(l|0)==0&k>>>0<128))if(l>>>0<0|(l|0)==0&k>>>0<16384){w=bw(k|0,l|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=k&127;j=2;break}else{j=wh(j,k,l)|0;break}else{a[j>>0]=k&127;j=1}while(0);r=n;n=j+m|0;l=p}k=x+n|0;j=e[y+14>>1]|0;d:do if((r|0)>(j|0)){i=e[y+16>>1]|0;v=c[y+52>>2]|0;w=v+36|0;m=(((r-i|0)>>>0)%(((c[w>>2]|0)+-4|0)>>>0)|0)+i|0;m=(m|0)>(j|0)?i:m;i=m+n|0;n=i+4|0;c[A>>2]=0;s=v+17|0;t=v+32|0;i=x+i|0;u=0;j=r;e:while(1){r=j;while(1){j=(r|0)>(m|0)?m:r;do if((q|0)<(j|0))if((q|0)>0){ew(k|0,l|0,q|0)|0;j=q;break}else{gw(k|0,0,j|0)|0;break}else ew(k|0,l|0,j|0)|0;while(0);r=r-j|0;if((r|0)<1){K=96;break e}l=l+j|0;q=q-j|0;m=m-j|0;if(!m)break;else k=k+j|0}c[B>>2]=0;p=c[A>>2]|0;if(!(a[s>>0]|0))j=p;else{m=1073741824/((c[t>>2]|0)>>>0)|0;j=p;do{o=j;j=j+1|0;if(j>>>0<2)k=0;else{k=o+-1|0;k=k-((k>>>0)%(((((c[w>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(m|0)?3:2)+k|0}}while((o|0)==(m|0)|(k|0)==(j|0));c[A>>2]=j}k=fg(v,B,A,j,0)|0;c[G>>2]=k;j=(k|0)==0;if(j&(a[s>>0]|0)!=0){j=c[A>>2]|0;ig(v,j,(p|0)==0?3:4,p,G);k=c[G>>2]|0;if(k){K=81;break}}else{if(!j)break;j=c[A>>2]|0}a[i>>0]=j>>>24;a[i+1>>0]=j>>>16;a[i+2>>0]=j>>>8;a[i+3>>0]=j;do if(u|0){j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{u=c[j+20>>2]|0;i=u+120|0;c[i>>2]=(c[i>>2]|0)+-1;u=u+136|0;c[j+16>>2]=c[u>>2];c[u>>2]=j;break}}while(0);u=c[B>>2]|0;k=u+56|0;i=c[k>>2]|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;k=(c[k>>2]|0)+4|0;m=(c[w>>2]|0)+-4|0;j=r}do if((K|0)==81){j=c[B>>2]|0;if(j){j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{f=c[j+20>>2]|0;g=f+120|0;c[g>>2]=(c[g>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;break}}}else if((K|0)==96){if(!u)break d;j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break d}else{B=c[j+20>>2]|0;A=B+120|0;c[A>>2]=(c[A>>2]|0)+-1;B=B+136|0;c[j+16>>2]=c[B>>2];c[B>>2]=j;break d}}while(0);do if(u|0){j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{f=c[j+20>>2]|0;g=f+120|0;c[g>>2]=(c[g>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;break}}while(0);c[M>>2]=k;M=k;Ra=N;return M|0}else{n=r+n|0;ew(k|0,l|0,q|0)|0;gw(k+q|0,0,r-q|0)|0;n=(n|0)>4?n:4}while(0);c[M>>2]=0;k=f+70|0;l=b[k>>1]|0;m=l&65535;j=c[C>>2]|0;if(!j){k=c[y+72>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[M>>2]=0;break}else{E=Ve(k)|0;K=112;break}else K=107;while(0);do if((K|0)==107){j=c[l+40>>2]|0;if(j|0){c[M>>2]=j;K=123;break}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){E=Wf(k)|0;K=112;break}else{E=Xf(k)|0;K=112;break}}while(0);if((K|0)==112?(c[M>>2]=E,E|0):0){j=E;K=123}if((K|0)==123){M=j;Ra=N;return M|0}j=(c[y+64>>2]|0)+(m<<1)|0;j=(c[y+56>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[y+26>>1])|0;if(!(a[y+8>>0]|0)){E=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[x>>0]=E;a[x+1>>0]=E>>8;a[x+2>>0]=E>>16;a[x+3>>0]=E>>24}k=Ah(y,j,G)|0;c[M>>2]=k;k=e[G+18>>1]|0;do if((n|0)==(k|0)?(c[G+12>>2]|0)==(e[G+16>>1]|0):0){if(a[F+17>>0]|0?(n|0)>=(e[y+16>>1]|0):0)break;if((j+n|0)>>>0>(c[y+60>>2]|0)>>>0){c[H>>2]=32306;c[H+4>>2]=71903;c[H+8>>2]=31517;Db(11,32001,H);j=11}else{ew(j|0,x|0,n|0)|0;j=0}M=j;Ra=N;return M|0}while(0);Kh(y,m,k,M);j=c[M>>2]|0;if(!j)j=m;else{M=j;Ra=N;return M|0}}else if((j|0)<0?(D=l+1<<16>>16,(b[y+24>>1]|0)!=0):0){b[k>>1]=D;a[I>>0]=a[I>>0]&-3;j=D&65535}else j=m;Lh(y,j,x,n,0,0,M);b[f+50>>1]=0;if(!(a[y+12>>0]|0)){M=c[M>>2]|0;Ra=N;return M|0}a[I>>0]=a[I>>0]&-3;k=Mh(f)|0;c[M>>2]=k;j=c[z>>2]|0;a[j+12>>0]=0;a[f>>0]=1;if(!((h&2|0)!=0&(k|0)==0)){M=k;Ra=N;return M|0}m=f+68|0;k=a[m>>0]|0;if(k<<24>>24>-1){if(k<<24>>24){l=0;j=k;do{k=c[(c[f+120+(l<<2)>>2]|0)+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);j=a[m>>0]|0}else{h=c[k+20>>2]|0;I=h+120|0;c[I>>2]=(c[I>>2]|0)+-1;h=h+136|0;c[k+16>>2]=c[h>>2];c[h>>2]=k}l=l+1|0}while((l|0)<(j<<24>>24|0));j=c[z>>2]|0}j=c[j+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{h=c[j+20>>2]|0;I=h+120|0;c[I>>2]=(c[I>>2]|0)+-1;h=h+136|0;c[j+16>>2]=c[h>>2];c[h>>2]=j}a[m>>0]=-1}m=g+8|0;f:do if(!(c[J>>2]|0))j=0;else{J=m;j=c[J>>2]|0;J=Sv(j|0,c[J+4>>2]|0,-1,-1)|0;h=L()|0;do if(h>>>0>0|(h|0)==0&J>>>0>2147483390)K=155;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](j)|0;c[f+16>>2]=j;if(!j)break}else{l=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){K=c[14978]|0;J=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&J>>>0<=K>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){K=155;break}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;c[f+16>>2]=j}ew(j|0,c[g>>2]|0,c[m>>2]|0)|0;j=0;break f}while(0);if((K|0)==155)c[f+16>>2]=0;c[M>>2]=7;j=7}while(0);a[f>>0]=3;K=m;g=c[K+4>>2]|0;M=f+56|0;c[M>>2]=c[K>>2];c[M+4>>2]=g;M=j;Ra=N;return M|0}function bh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=Ra;Ra=Ra+48|0;B=N+24|0;i=N+40|0;M=N+36|0;x=N;q=c[f+8>>2]|0;r=q+4|0;C=c[r>>2]|0;j=g&2;do if((a[f>>0]|0)==3){c[i>>2]=0;a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{L=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-L;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=f+4|0;if(!h){if(c[g>>2]|0)D=12}else{c[g>>2]=h;D=12}if((D|0)==12?(a[f>>0]|0)==0:0)a[f>>0]=2;c[M>>2]=0;break}}c[M>>2]=g;M=g;Ra=N;return M|0}while(0);L=f+68|0;F=a[L>>0]|0;p=F<<24>>24;I=f+70|0;J=b[I>>1]|0;z=J&65535;K=f+116|0;G=c[K>>2]|0;m=(c[G+64>>2]|0)+(z<<1)|0;m=(c[G+56>>2]|0)+((d[m>>0]<<8|d[m+1>>0])&e[G+26>>1])|0;g=G+20|0;if((c[g>>2]|0)<0?Jh(G)|0:0){M=11;Ra=N;return M|0}H=j<<24>>24!=0;n=G+8|0;do if(H){if(a[n>>0]|0){k=c[g>>2]|0;i=m+(d[G+10>>0]|0)|0;A=a[i>>0]|0;h=A&255;if(A<<24>>24<0){g=0;h=h&127;do{g=g+1|0;A=a[i+g>>0]|0;h=h<<7|A&127}while(A<<24>>24<0&g>>>0<8);i=i+g|0;j=h}else j=h;if(!(a[G+2>>0]|0))g=i+1|0;else{g=1;do{A=g;g=g+1|0}while((a[i+A>>0]|0)<0&g>>>0<10);g=i+g|0}h=e[G+14>>1]|0;if(j>>>0>h>>>0){i=e[G+16>>1]|0;A=(((j-i|0)>>>0)%(((c[(c[G+52>>2]|0)+36>>2]|0)+-4|0)>>>0)|0)+i|0;g=(g-m&65535)+4+(A>>>0>h>>>0?i:A)|0}else{g=g-m+j|0;g=g>>>0>4?g:4}if((k+2+(g&65535)|0)<=((c[C+36>>2]<<1>>>0)/3|0|0)?(b[G+24>>1]|0)!=1:0){A=1;break}}g=ag(f)|0;c[M>>2]=g;if(g){M=g;Ra=N;return M|0}else A=0}else A=0;while(0);k=f+1|0;do if(!(a[n>>0]|0)){a[k>>0]=a[k>>0]&-15;b[f+50>>1]=0;if(((a[f>>0]|0)==0?(l=b[I>>1]|0,l<<16>>16):0)?a[(c[K>>2]|0)+8>>0]|0:0){b[I>>1]=l+-1<<16>>16;c[M>>2]=0;break}g=Hh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}}while(0);i=a[k>>0]|0;a:do if(i&32){j=c[f+64>>2]|0;g=c[C+8>>2]|0;b:do if(!g)D=51;else{c:do if(j){do{if((g|0)!=(f|0)?(c[g+64>>2]|0)==(j|0):0)break c;g=c[g+24>>2]|0}while((g|0)!=0);if(!f)break b;else{D=51;break b}}else{h=f+24|0;while(1){if((g|0)!=(f|0))break c;g=c[h>>2]|0;if(!g){D=51;break b}}}while(0);g=$f(g,j,f)|0;c[M>>2]=g;if(!g)break a;Ra=N;return g|0}while(0);if((D|0)==51)a[k>>0]=i&-33;c[M>>2]=0}while(0);if(((c[f+112>>2]|0)==0?(s=c[f+64>>2]|0,u=f+32|0,t=c[u>>2]|0,u=c[u+4>>2]|0,v=q+11|0,a[v>>0]|0):0)?(a[v>>0]=0,o=c[(c[r>>2]|0)+8>>2]|0,o|0):0){g=o;do{if((a[g+1>>0]&16?(a[v>>0]=1,(c[g+64>>2]|0)==(s|0)):0)?(r=g+32|0,(c[r>>2]|0)==(t|0)?(c[r+4>>2]|0)==(u|0):0):0)a[g>>0]=1;g=c[g+24>>2]|0}while((g|0)!=0)}h=c[G+72>>2]|0;i=c[h+20>>2]|0;do if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0)){c[M>>2]=0;break}else{w=Ve(h)|0;D=73;break}else D=68;while(0);do if((D|0)==68){g=c[i+40>>2]|0;if(g|0){c[M>>2]=g;M=g;Ra=N;return M|0}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){w=Wf(h)|0;D=73;break}else{w=Xf(h)|0;D=73;break}}while(0);if((D|0)==73?(c[M>>2]=w,w|0):0){M=w;Ra=N;return M|0}g=Ah(G,m,x)|0;c[M>>2]=g;Kh(G,z,e[x+18>>1]|0,M);g=c[M>>2]|0;if(g|0){M=g;Ra=N;return M|0}if(!(a[n>>0]|0)){o=c[K>>2]|0;if((c[o+20>>2]|0)<0?(y=Jh(o)|0,c[M>>2]=y,y|0):0){M=y;Ra=N;return M|0}l=c[(c[(((a[L>>0]|0)+-1|0)>(p|0)?f+120+(p+1<<2)|0:K)>>2]|0)+4>>2]|0;m=o+24|0;D=(c[o+64>>2]|0)+((e[m>>1]<<1)+-2)|0;D=(d[D>>0]<<8|d[D+1>>0])&e[o+26>>1];n=(c[o+56>>2]|0)+D|0;if(D>>>0<4){c[B>>2]=32306;c[B+4>>2]=72100;c[B+8>>2]=31517;Db(11,32001,B);M=11;Ra=N;return M|0}k=(Xa[c[o+76>>2]&255](o,n)|0)&65535;g=c[C+80>>2]|0;h=c[o+72>>2]|0;i=c[h+20>>2]|0;do if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0)){c[M>>2]=0;D=91;break}else{E=Ve(h)|0;D=90;break}else D=85;while(0);do if((D|0)==85){j=c[i+40>>2]|0;if(j|0){c[M>>2]=j;break}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){E=Wf(h)|0;D=90;break}else{E=Xf(h)|0;D=90;break}}while(0);if((D|0)==90?(c[M>>2]=E,(E|0)==0):0)D=91;if((D|0)==91)Lh(G,z,n+-4|0,k+4|0,g,l,M);Kh(o,(e[m>>1]|0)+-1|0,k,M);g=c[M>>2]|0;if(g|0){M=g;Ra=N;return M|0}}g=Mh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}g=a[L>>0]|0;if(g<<24>>24>F<<24>>24){h=c[(c[K>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[L>>0]|0}else{E=c[h+20>>2]|0;D=E+120|0;c[D>>2]=(c[D>>2]|0)+-1;E=E+136|0;c[h+16>>2]=c[E>>2];c[E>>2]=h}h=g+-1<<24>>24;a[L>>0]=h;g=h<<24>>24;if(h<<24>>24>F<<24>>24)do{h=h+-1<<24>>24;a[L>>0]=h;g=c[f+120+(g<<2)>>2]|0;do if(g){g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);h=a[L>>0]|0;break}else{E=c[g+20>>2]|0;D=E+120|0;c[D>>2]=(c[D>>2]|0)+-1;E=E+136|0;c[g+16>>2]=c[E>>2];c[E>>2]=g;break}}while(0);g=h<<24>>24}while(h<<24>>24>F<<24>>24);c[K>>2]=c[f+120+(g<<2)>>2];g=Mh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}}if(A|0){a[f>>0]=2;h=b[G+24>>1]|0;g=f+4|0;if((J&65535)<(h&65535)){c[g>>2]=1;M=0;Ra=N;return M|0}else{c[g>>2]=-1;b[I>>1]=(h&65535)+65535;M=0;Ra=N;return M|0}}g=xh(f)|0;c[M>>2]=g;if(H){h=a[L>>0]|0;if(h<<24>>24>-1){if(h<<24>>24){i=0;g=h;do{h=c[(c[f+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[L>>0]|0}else{J=c[h+20>>2]|0;I=J+120|0;c[I>>2]=(c[I>>2]|0)+-1;J=J+136|0;c[h+16>>2]=c[J>>2];c[J>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[K>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{K=c[g+20>>2]|0;J=K+120|0;c[J>>2]=(c[J>>2]|0)+-1;K=K+136|0;c[g+16>>2]=c[K>>2];c[K>>2]=g}a[L>>0]=-1;g=c[M>>2]|0}a[f>>0]=3}if((g|0)!=16){M=g;Ra=N;return M|0}c[M>>2]=0;M=0;Ra=N;return M|0}function ch(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=Ra;Ra=Ra+16|0;r=s;h=xh(f)|0;switch(h|0){case 0:{c[g>>2]=0;k=f+116|0;l=f+70|0;m=f+68|0;n=f+20|0;o=f+50|0;p=f+1|0;q=f+2|0;while(1){g=c[k>>2]|0;if(a[g+8>>0]|0){g=0;h=8;break}h=b[l>>1]|0;i=(c[g+64>>2]|0)+((h&65535)<<1)|0;i=(c[g+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[g+26>>1])|0;j=a[m>>0]|0;if(j<<24>>24>18){h=5;break}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];t=c[n>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;u=j<<24>>24;b[f+72+(u<<1)>>1]=h;c[f+120+(u<<2)>>2]=g;b[l>>1]=0;a[m>>0]=j+1<<24>>24;g=yh(t,i,k,f,d[q>>0]|0)|0;if(g|0){h=8;break}}if((h|0)==5){c[r>>2]=32306;c[r+4>>2]=68229;c[r+8>>2]=31517;Db(11,32001,r);u=11;Ra=s;return u|0}else if((h|0)==8){Ra=s;return g|0}break}case 16:{c[g>>2]=1;u=0;Ra=s;return u|0}default:{u=h;Ra=s;return u|0}}return 0}function dh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=a+8|0;d=c[a+16>>2]|0;o=c[a+20>>2]|0;g=a+40|0;e=c[a+48>>2]|0;m=c[a+52>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;g=a+24|0;h=a+32|0;f=c[h>>2]|0;c[h>>2]=0;h=a+36|0;i=c[h>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0;c[g>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[a+28>>2]=0;k=(e|0)==0;if(!k){j=e;do{l=c[j+8>>2]|0;do if(l|0){Xi(0,c[l+28>>2]|0);f=c[l>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[l+4>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[l+12>>2]|0;if(f|0)ni(0,f);i=c[l+16>>2]|0;do if(i|0){h=i+4|0;f=c[i>>2]|0;if((c[h>>2]|0)>0){g=0;do{f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[i>>2]|0}while((g|0)<(c[h>>2]|0))}do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{p=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{p=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);j=c[j>>2]|0}while((j|0)!=0)}do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{p=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);if(!k)do{f=e;e=c[e>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}}while((e|0)!=0);c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;f=(d|0)==0;if(!f){e=d;do{g=c[e+8>>2]|0;if(g|0?(n=g+32|0,p=(c[n>>2]|0)+-1|0,c[n>>2]=p,(p|0)==0):0)Vi(0,g);e=c[e>>2]|0}while((e|0)!=0)}do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{p=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if(!f)do{e=d;d=c[d>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);e=a+56|0;f=a+64|0;d=c[f>>2]|0;c[f>>2]=0;f=a+68|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[f>>2]=0;c[e>>2]=0;if(d|0)do{e=d;d=c[d>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);c[a+60>>2]=0;c[a+72>>2]=0;d=a+78|0;e=b[d>>1]|0;if(!(e&1)){p=e&-10;b[d>>1]=p;return}p=a+4|0;c[p>>2]=(c[p>>2]|0)+1;p=e&-10;b[d>>1]=p;return}function eh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+48|0;x=G+16|0;C=G;A=G+24|0;F=f+165|0;a[F>>0]=1;w=(g|0)==1?34855:34585;c[C>>2]=w;c[C+4>>2]=34874;c[C+8>>2]=34876;c[C+12>>2]=0;c[A>>2]=f;c[A+8>>2]=g;y=A+12|0;c[y>>2]=0;c[A+4>>2]=h;c[A+16>>2]=i;c[A+20>>2]=0;fh(A,3,C,0)|0;i=c[y>>2]|0;a:do if(!i){z=f+16|0;u=c[z>>2]|0;C=u+(g<<4)+4|0;i=c[C>>2]|0;if(!i){f=(c[u+28>>2]|0)+78|0;b[f>>1]=b[f>>1]|1;f=0;a[F>>0]=0;Ra=G;return f|0}l=c[i>>2]|0;m=c[i+4>>2]|0;k=m+4|0;c[k>>2]=l;b:do if(!(a[i+8>>0]|0)){m=Zb(i,0,0)|0;switch(m|0){case 0:{l=c[C>>2]|0;m=c[l+4>>2]|0;B=1;k=m+4|0;l=c[l>>2]|0;break b}case 516:{l=50738;break}case 100:{l=50760;break}case 101:{l=50782;break}default:{j=m&255;if(j>>>0<29?(520028155>>>j&1|0)!=0:0)l=c[22960+(j<<2)>>2]|0;else l=50724}}j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}E=j;if((c[f+304>>2]|0)>>>0<=E>>>0?(c[f+308>>2]|0)>>>0>E>>>0:0){E=f+300|0;c[j>>2]=c[E>>2];c[E>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{E=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c:do if(l){k=(Eu(l)|0)+1|0;d:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=32;else{j=0;break c}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<k>>>0:0))){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];E=f+284|0;c[E>>2]=(c[E>>2]|0)+1;break d}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];E=f+284|0;c[E>>2]=(c[E>>2]|0)+1;break d}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=32}while(0);if((D|0)==32)j=_d(f,k,0)|0;if(j)ew(j|0,l|0,k|0)|0;else j=0}else j=0;while(0);c[h>>2]=j;j=m;break a}else B=0;while(0);c[k>>2]=l;t=c[(c[m+12>>2]|0)+56>>2]|0;p=a[t+40>>0]|0;q=a[t+41>>0]|0;r=a[t+42>>0]|0;s=a[t+43>>0]|0;c[k>>2]=l;o=d[t+45>>0]<<16|d[t+44>>0]<<24|d[t+46>>0]<<8|d[t+47>>0];c[k>>2]=l;n=d[t+49>>0]<<16|d[t+48>>0]<<24|d[t+50>>0]<<8|d[t+51>>0];c[k>>2]=l;k=d[t+59>>0]|0;t=d[t+57>>0]<<16|d[t+56>>0]<<24|d[t+58>>0]<<8|k;v=f+32|0;u=u+(g<<4)+12|0;i=c[u>>2]|0;do if((c[v>>2]&33554432|0)==0&0==0){c[i>>2]=(q&255)<<16|(p&255)<<24|(r&255)<<8|s&255;if(t){if(!g){k=k&3;k=(k|0)==0?1:k&255;a[f+78>>0]=k;D=66;break}k=a[f+78>>0]|0;if((t|0)==(k&255|0))D=66;else{j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}A=j;if((c[f+304>>2]|0)>>>0<=A>>>0?(c[f+308>>2]|0)>>>0>A>>>0:0){A=f+300|0;c[j>>2]=c[A>>2];c[A>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);e:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=61;else j=0;else{do if((e[f+276>>1]|0)>=68){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=62;break e}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=62;break e}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=61}while(0);if((D|0)==61){j=_d(f,68,0)|0;D=62}if((D|0)==62)if(!j)j=0;else{i=j;k=34948;l=i+68|0;do{a[i>>0]=a[k>>0]|0;i=i+1|0;k=k+1|0}while((i|0)<(l|0))}c[h>>2]=j;j=1}}else D=65}else{c[i>>2]=0;n=0;o=0;D=65}while(0);if((D|0)==65){k=(c[(c[z>>2]|0)+(g<<4)+12>>2]|0)+78|0;b[k>>1]=b[k>>1]|4;k=a[f+78>>0]|0;D=66}do if((D|0)==66){a[i+77>>0]=k;k=i+80|0;if(!(c[k>>2]|0)){i=(n|0)>-1?n:(n|0)==-2147483648?2147483647:0-n|0;i=(i|0)==0?-2e3:i;c[k>>2]=i;c[m+4>>2]=l;k=c[(c[m>>2]|0)+212>>2]|0;c[k+16>>2]=i;l=c[7357]|0;m=c[k+44>>2]|0;if((i|0)<=-1){s=Yv(i|0,((i|0)<0)<<31>>31|0,-1024,-1)|0;t=L()|0;i=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;i=Wv(s|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0}bb[l&127](m,i);i=c[u>>2]|0}k=o&255;i=i+76|0;a[i>>0]=k;if(k<<24>>24){if((k&255)>4){j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}A=j;if((c[f+304>>2]|0)>>>0<=A>>>0?(c[f+308>>2]|0)>>>0>A>>>0:0){A=f+300|0;c[j>>2]=c[A>>2];c[A>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);f:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=92;else j=0;else{do if((e[f+276>>1]|0)>=24){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=93;break f}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=93;break f}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=92}while(0);if((D|0)==92){j=_d(f,24,0)|0;D=93}if((D|0)==93)if(!j)j=0;else{i=j;k=35016;l=i+24|0;do{a[i>>0]=a[k>>0]|0;i=i+1|0;k=k+1|0}while((i|0)<(l|0))}c[h>>2]=j;j=1;break}}else a[i>>0]=1;if((g|0)==0&(o|0)>3){t=v;u=c[t+4>>2]|0;h=v;c[h>>2]=c[t>>2]&-3;c[h+4>>2]=u}c[x>>2]=c[(c[z>>2]|0)+(g<<4)>>2];c[x+4>>2]=w;i=dd(f,35040,x)|0;h=f+312|0;x=c[h>>2]|0;c[h>>2]=0;k=nd(f,i,77,A,0)|0;c[h>>2]=x;k=(k|0)==0?c[y>>2]|0:k;do if(i|0){if(c[f+480>>2]|0){Xd(f,i);break}h=i;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[i>>2]=c[h>>2];c[h>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=(k|0)==0;if(i)gh(f,g)|0;if(!(a[f+81>>0]|0)){if(!i){j=k;D=112}}else{$b(f);j=7;D=112}if((D|0)==112?(c[v>>2]&134217728|0)==0&0==0:0)break;j=(c[(c[z>>2]|0)+(g<<4)+12>>2]|0)+78|0;b[j>>1]=b[j>>1]|1;j=0}while(0);if((B|0)!=0?(E=c[C>>2]|0,c[(c[E+4>>2]|0)+4>>2]=c[E>>2],(cc(E,0)|0)==0):0)bc(E,0)|0}else j=i;while(0);g:do if((j|0)>=7){if((j|0)<3082)switch(j|0){case 7:break;default:break g}else switch(j|0){case 3082:break;default:break g}i=f+81|0;if((a[i>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;i=f+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[f+236>>2]|0;if(i|0)c[i+12>>2]=7}}else{switch(j|0){case 0:break;default:break g}a[F>>0]=0;Ra=G;return j|0}while(0);if((g|0)>-1){h=c[f+16>>2]|0;g=(c[h+(g<<4)+12>>2]|0)+78|0;b[g>>1]=b[g>>1]|8;g=(c[h+28>>2]|0)+78|0;b[g>>1]=b[g>>1]|8;g=f+24|0;c[g>>2]=c[g>>2]&-17}if(c[f+56>>2]|0){f=j;a[F>>0]=0;Ra=G;return f|0}n=f+20|0;i=c[n>>2]|0;if((i|0)<=0){f=j;a[F>>0]=0;Ra=G;return f|0}m=f+16|0;l=0;do{k=c[(c[m>>2]|0)+(l<<4)+12>>2]|0;if(b[k+78>>1]&8){dh(k);i=c[n>>2]|0}l=l+1|0}while((l|0)<(i|0));a[F>>0]=0;Ra=G;return j|0}function fh(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+96|0;x=B+64|0;w=B+56|0;v=B+40|0;l=B+24|0;k=B+16|0;j=B;n=B+80|0;s=B+76|0;A=c[e>>2]|0;t=c[e+8>>2]|0;r=c[A+16>>2]|0;q=(c[r+(t<<4)+12>>2]|0)+78|0;b[q>>1]=b[q>>1]&-5;q=e+20|0;c[q>>2]=(c[q>>2]|0)+1;q=A+81|0;if(a[q>>0]|0){c[e+12>>2]=7;e=1;Ra=B;return e|0}if(!g){e=0;Ra=B;return e|0}u=c[g+4>>2]|0;if(!u){f=c[g>>2]|0;h=e+4|0;i=c[h>>2]|0;if(c[i>>2]|0){e=0;Ra=B;return e|0}if(c[e+16>>2]&1|0){c[i>>2]=0;c[e+12>>2]=1;e=0;Ra=B;return e|0}if(0==0?(c[A+32>>2]&1|0)==0:0){c[k>>2]=(f|0)==0?35133:f;g=dd(A,35135,k)|0;c[c[h>>2]>>2]=g;c[l>>2]=32306;c[l+4>>2]=123732;c[l+8>>2]=31517;Db(11,32001,l);c[e+12>>2]=11;e=0;Ra=B;return e|0}else{c[j>>2]=32306;c[j+4>>2]=123725;c[j+8>>2]=31517;Db(11,32001,j);c[e+12>>2]=11;e=0;Ra=B;return e|0}}i=g+8|0;k=c[i>>2]|0;l=(k|0)==0;do if(!l){f=a[k>>0]|0;do if(!(f<<24>>24)){f=35095;o=13}else{j=f&255;f=208+j|0;if((j|32|0)==99){f=a[k+1>>0]|0;if(!(f<<24>>24)){f=35096;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==114){f=a[k+2>>0]|0;if(!(f<<24>>24)){f=35097;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==101){f=a[k+3>>0]|0;if(!(f<<24>>24)){f=35098;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==97){f=a[k+4>>0]|0;if(!(f<<24>>24)){f=35099;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==116){f=a[k+5>>0]|0;if(!(f<<24>>24)){f=35100;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==101){f=a[k+6>>0]|0;if(!(f<<24>>24)){f=35101;o=13;break}if(f<<24>>24==32)break;else{h=32;f=208+(f&255)|0}}else h=101}else h=116}else h=97}else h=101}else h=114}else h=99;p=d[f>>0]|0;m=h;o=17}while(0);if((o|0)==13){p=0;m=a[208+(d[f>>0]|0)>>0]|0;o=17}if((o|0)==17?(p|0)!=(m&255|0):0)break;y=A+164|0;x=a[y>>0]|0;a[y>>0]=t;c[n>>2]=0;ii(u,n)|0;c[A+160>>2]=c[n>>2];z=A+166|0;a[z>>0]=a[z>>0]&-2;qd(A,c[i>>2]|0,-1,0,0,s,0)|0;f=c[A+64>>2]|0;a[y>>0]=x;a:do if(f|0?(a[z>>0]&1)==0:0){c[e+12>>2]=f;switch(f|0){case 9:break a;case 7:break;default:{if((f&255|0)==6)break a;gi(e,c[g>>2]|0,pd(A)|0);break a}}if((a[q>>0]|0)==0?(a[A+82>>0]|0)==0:0){a[q>>0]=1;if((c[A+180>>2]|0)>0)c[A+264>>2]=1;f=A+272|0;c[f>>2]=(c[f>>2]|0)+1;f=c[A+236>>2]|0;if(f|0)c[f+12>>2]=7}}while(0);gc(c[s>>2]|0)|0;e=0;Ra=B;return e|0}while(0);i=c[g>>2]|0;j=(i|0)==0;do if(!j){if(!l?a[k>>0]|0:0)break;h=hi(A,i,c[r+(t<<4)>>2]|0)|0;i=(h|0)==0;b:do if((!i?(y=h+44|0,ii(u,y)|0):0)?(z=c[y>>2]|0,(z|0)>=2):0){f=c[(c[h+12>>2]|0)+8>>2]|0;if(!f){e=0;Ra=B;return e|0}while(1){if(!((f|0)==(h|0)?1:(c[f+44>>2]|0)!=(z|0)))break b;f=c[f+20>>2]|0;if(!f){f=0;break}}Ra=B;return f|0}while(0);gi(e,c[g>>2]|0,i?35120:35103);e=0;Ra=B;return e|0}while(0);f=e+4|0;h=c[f>>2]|0;if(c[h>>2]|0){e=0;Ra=B;return e|0}if(c[e+16>>2]&1|0){c[h>>2]=0;c[e+12>>2]=1;e=0;Ra=B;return e|0}if(0==0?(c[A+32>>2]&1|0)==0:0){c[w>>2]=j?35133:i;g=dd(A,35135,w)|0;c[c[f>>2]>>2]=g;c[x>>2]=32306;c[x+4>>2]=123732;c[x+8>>2]=31517;Db(11,32001,x);c[e+12>>2]=11;e=0;Ra=B;return e|0}else{c[v>>2]=32306;c[v+4>>2]=123725;c[v+8>>2]=31517;Db(11,32001,v);c[e+12>>2]=11;e=0;Ra=B;return e|0}return 0}function gh(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+16|0;k=m;l=m+8|0;j=e+16|0;g=c[j>>2]|0;i=c[g+(f<<4)+12>>2]|0;h=c[i+16>>2]|0;if(h|0)do{n=(c[h+8>>2]|0)+36|0;c[n>>2]=c[n>>2]&-17;h=c[h>>2]|0}while((h|0)!=0);i=i+32|0;h=c[i>>2]|0;if(h){g=h;do{n=(c[g+8>>2]|0)+55|0;h=(d[n>>0]|d[n+1>>0]<<8)&-129;a[n>>0]=h;a[n+1>>0]=h>>8;g=c[g>>2]|0}while((g|0)!=0);g=c[j>>2]|0}c[l>>2]=e;g=c[g+(f<<4)>>2]|0;c[l+4>>2]=g;do if(Sd(e,35174,g)|0){c[k>>2]=g;h=dd(e,35187,k)|0;if(h){g=nd(e,h,78,l,0)|0;if(c[e+480>>2]|0){Xd(e,h);l=g;break}n=h;if((c[e+304>>2]|0)>>>0<=n>>>0?(c[e+308>>2]|0)>>>0>n>>>0:0){l=e+300|0;c[h>>2]=c[l>>2];c[l>>2]=h;l=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);l=g;break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);l=g;break}}else l=7}else l=0;while(0);g=c[i>>2]|0;if(g|0)do{f=c[g+8>>2]|0;n=f+55|0;if(!((d[n>>0]|d[n+1>>0]<<8)&128)){k=c[f+8>>2]|0;j=f+50|0;i=b[j>>1]|0;i=(i&65535)<5?i:5;h=b[(c[f+12>>2]|0)+44>>1]|0;b[k>>1]=h;if(c[f+36>>2]|0){h=(h&65535)+65526&65535;b[k>>1]=h}if(h<<16>>16<33)b[k>>1]=33;ew(k+2|0,31120,i<<1&65535|0)|0;n=b[j>>1]|0;h=n&65535;if((i&65535)<(n&65535)){h=i&65535;do{h=h+1|0;b[k+(h<<1)>>1]=23;i=b[j>>1]|0}while(h>>>0<(i&65535)>>>0);h=i&65535}if(a[f+54>>0]|0)b[k+(h<<1)>>1]=0}g=c[g>>2]|0}while((g|0)!=0);if((l|0)!=7){Ra=m;return l|0}g=e+81|0;if(a[g>>0]|0){Ra=m;return l|0}if(a[e+82>>0]|0){Ra=m;return l|0}a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;g=e+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[e+236>>2]|0;if(!g){Ra=m;return l|0}c[g+12>>2]=7;Ra=m;return l|0}function hh(d){d=d|0;var f=0,g=0,h=0,i=0,j=0;i=c[d+32>>2]|0;j=d+8|0;if(!((b[j>>1]&9216)==0?!(c[d+24>>2]|0):0))Cg(d);a:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))h=14;else{j=7;return j|0}else{do if((e[i+276>>1]|0)>=32){f=i+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];f=i+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}f=i+296|0;g=c[f>>2]|0;if(!g){f=i+292|0;break}else{c[f>>2]=c[g>>2];f=i+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}}else f=i+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;h=14}while(0);if((h|0)==14)g=_d(i,32,0)|0;if(!g){j=7;return j|0}h=g;if((c[i+304>>2]|0)>>>0<=h>>>0?(c[i+308>>2]|0)>>>0>h>>>0:0)f=e[i+276>>1]|0;else f=Wa[c[29352>>2]&127](g)|0;c[g>>2]=0;c[g+4>>2]=i;c[g+8>>2]=0;c[g+12>>2]=0;c[g+20>>2]=0;c[g+16>>2]=g+32;b[g+24>>1]=(f+1048544|0)>>>4;b[g+26>>1]=1;c[g+28>>2]=0;c[d+16>>2]=g;b[j>>1]=1040;c[d+36>>2]=94;j=0;return j|0}function ih(a){a=a|0;var b=0;b=(c[a>>2]|0)+200|0;c[a+4>>2]=c[b>>2];c[b>>2]=a;return}function jh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=b+5|0;f=a[k>>0]|0;if(!(a[b+15>>0]|0))j=3;else switch(e|0){case 2:case 4:{j=3;break}default:{}}do if((j|0)==3?(g=f&255,(g|0)!=(e|0)):0){a[k>>0]=e;if(!((e&1|0)==0&((g&5|0)==1&(a[b+4>>0]|0)==0))){if((e|0)!=2)break;e=c[b+64>>2]|0;f=c[e>>2]|0;if(!f)break;Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0;break}e=c[b+64>>2]|0;f=c[e>>2]|0;if(f|0){Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0}i=b+17|0;if((d[i>>0]|0)>1){j=c[b>>2]|0;Ya[c[j+28>>2]&127](j,c[b+172>>2]|0,0)|0;break}e=b+16|0;g=a[e>>0]|0;h=g<<24>>24==0;if(h){f=Sf(b)|0;e=a[e>>0]|0}else{f=0;e=g}a:do if(e<<24>>24==1){e=a[i>>0]|0;switch(e<<24>>24){case 0:case 1:case 5:break;default:{j=19;break a}}if(!(a[b+13>>0]|0)){f=c[b+60>>2]|0;if(Xa[c[(c[f>>2]|0)+28>>2]&255](f,2)|0)break;e=a[i>>0]|0}if(e<<24>>24==5)j=19;else{a[i>>0]=2;j=19}}else if(!f)j=19;while(0);if((j|0)==19?(j=c[b>>2]|0,Ya[c[j+28>>2]&127](j,c[b+172>>2]|0,0)|0,g<<24>>24==1):0){e=c[b+60>>2]|0;f=c[e>>2]|0;if(!f)break;if(!(a[b+13>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[i>>0]|0)==5)break;a[i>>0]=1;break}if(h)vf(b)}while(0);return d[k>>0]|0}function kh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+80|0;A=T+32|0;y=T+24|0;x=T+16|0;w=T+8|0;q=T;S=g+79|0;if(!(a[S>>0]|0)){j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=21;else j=0;else{do if((e[g+276>>1]|0)>=40){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=22;break a}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=22;break a}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=21}while(0);if((R|0)==21){j=_d(g,40,0)|0;R=22}if((R|0)==22)if(!j)j=0;else{l=j;k=36072;n=l+40|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}if((c[g+168>>2]|0)>1){j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);b:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=45;else j=0;else{do if((e[g+276>>1]|0)>=43){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=46;break b}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=46;break b}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=45}while(0);if((R|0)==45){j=_d(g,43,0)|0;R=46}if((R|0)==46)if(!j)j=0;else{l=j;k=36112;n=l+43|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}m=g+60|0;n=c[m>>2]|0;p=(i|0)!=0;do if(p){j=b[i+8>>1]|0;if((j&15|16)<<16>>16==18){if((j&514)==514?(a[i+10>>0]|0)==1:0){j=c[i+16>>2]|0;k=n}else if(!(j&1)){j=Gg(i,1)|0;k=c[m>>2]|0}else{j=0;k=n}c[m>>2]=k&-8|6;break}j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=70;else j=0;else{do if((e[g+276>>1]|0)>=18){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=71;break c}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=71;break c}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=70}while(0);if((R|0)==70){j=_d(g,18,0)|0;R=71}if((R|0)==71)if(!j)j=0;else{l=j;k=36155;n=l+18|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}else j=59952;while(0);E=g+32|0;G=E;F=c[G>>2]|0;G=c[G+4>>2]|0;H=g+24|0;I=c[H>>2]|0;J=g+100|0;K=c[J>>2]|0;M=g+104|0;N=c[M>>2]|0;O=g+88|0;P=a[O>>0]|0;c[H>>2]=I|6;o=E;c[o>>2]=F&-268456578|513;c[o+4>>2]=G;a[O>>0]=0;o=g+16|0;Q=c[o>>2]|0;v=c[Q+(h<<4)>>2]|0;Q=c[Q+(h<<4)+4>>2]|0;D=Q+4|0;r=a[(c[c[D>>2]>>2]|0)+12>>0]|0;u=c[g+20>>2]|0;c[q>>2]=j;j=yi(g,f,36173,q)|0;c[m>>2]=n;d:do if(!j){j=c[o>>2]|0;C=j+(u<<4)|0;z=c[j+(u<<4)+4>>2]|0;B=z+4|0;if(p){k=c[(c[c[B>>2]>>2]|0)+60>>2]|0;m=q;c[m>>2]=0;c[m+4>>2]=0;m=c[k>>2]|0;do if(m){n=(Xa[c[m+24>>2]&255](k,q)|0)!=0;p=c[q+4>>2]|0;if(!(n|((p|0)>0|(p|0)==0&(c[q>>2]|0)>>>0>0))){j=c[o>>2]|0;break}j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}B=j;if((c[g+304>>2]|0)>>>0<=B>>>0?(c[g+308>>2]|0)>>>0>B>>>0:0){B=g+300|0;c[j>>2]=c[B>>2];c[B>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{B=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);e:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=104;else j=0;else{do if((e[g+276>>1]|0)>=27){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=105;break e}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=105;break e}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=104}while(0);if((R|0)==104){j=_d(g,27,0)|0;R=105}if((R|0)==105)if(!j)j=0;else{l=j;k=36196;n=l+27|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;m=C;l=1;break d}while(0);c[H>>2]=c[H>>2]|8}m=c[D>>2]|0;c[m+4>>2]=c[Q>>2];m=(c[m+32>>2]|0)-(c[m+36>>2]|0)|0;j=c[(c[j+(h<<4)+12>>2]|0)+80>>2]|0;k=c[B>>2]|0;c[k+4>>2]=c[z>>2];k=c[(c[k>>2]|0)+212>>2]|0;c[k+16>>2]=j;n=c[7357]|0;o=c[k+44>>2]|0;if((j|0)<=-1){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}bb[n&127](o,j);k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];k=c[(c[k>>2]|0)+212>>2]|0;j=c[k+16>>2]|0;if((j|0)<=-1){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}p=c[k+20>>2]|0;j=(j|0)<(p|0)?p:j;p=c[B>>2]|0;n=c[z>>2]|0;o=p+4|0;c[o>>2]=n;p=c[p>>2]|0;k=c[p+212>>2]|0;if(j|0){if((j|0)<0){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}c[k+20>>2]=j}c[o>>2]=n;a[p+7>>0]=1;j=p+20|0;c[p+8>>2]=0;a[j>>0]=a[j>>0]&-2;j=zi(g,f,36223)|0;if(!j){h=(i|0)==0;j=Zb(Q,h?2:0,0)|0;if(!j){j=c[D>>2]|0;if((a[(c[j>>2]|0)+5>>0]|0)==5)c[g+92>>2]=0;j=c[j+32>>2]|0;o=c[B>>2]|0;c[o+4>>2]=c[z>>2];if(!(b[o+22>>1]&2)){i=(m|0)<0;if(i)n=(c[o+32>>2]|0)-(c[o+36>>2]|0)|0;else n=m;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[o+32>>2]=j,t=o+80|0,s=c[t>>2]|0,s|0):0){k=s+-4|0;c[t>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;s=(c[14820]|0)+1|0;c[14820]=s;c[14821]=(s|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=132;break}else{j=Wa[c[29352>>2]&127](k)|0;R=132}while(0);do if((R|0)==132){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[t>>2]=0}s=o+32|0;t=Se(c[o>>2]|0,s,n)|0;c[o+36>>2]=(c[s>>2]|0)-(n&65535);if(!t){if(!(r<<24>>24)){j=c[g+92>>2]|0;p=c[B>>2]|0;c[p+4>>2]=c[z>>2];if(b[p+22>>1]&2){m=C;l=7;break}if(i)o=(c[p+32>>2]|0)-(c[p+36>>2]|0)|0;else o=m;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[p+32>>2]=j;n=p+80|0;j=c[n>>2]|0;if(!j)break;k=j+-4|0;c[n>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=149;break}else{j=Wa[c[29352>>2]&127](k)|0;R=149}while(0);do if((R|0)==149){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[n>>2]=0}while(0);s=p+32|0;t=Se(c[p>>2]|0,s,o)|0;c[p+36>>2]=(c[s>>2]|0)-(o&65535);if(t|0){m=C;l=7;break}}if(!(a[g+81>>0]|0)){j=a[g+84>>0]|0;do if(j<<24>>24>-1)j=j<<24>>24;else{j=c[D>>2]|0;c[j+4>>2]=c[Q>>2];if(!(a[j+17>>0]|0)){j=0;break}j=(a[j+18>>0]|0)==0?1:2}while(0);n=c[B>>2]|0;c[n+4>>2]=c[z>>2];k=j&255;if(b[n+22>>1]&2){j=n+17|0;if(((k|0)!=0|0)==(d[j>>0]|0))R=162}else{j=n+17|0;R=162}if((R|0)==162){a[j>>0]=(k|0)!=0&1;a[n+18>>0]=(k|0)==2&1}k=g+164|0;a[k>>0]=u;c[w>>2]=v;j=yi(g,f,36229,w)|0;if(j|0){m=C;l=j;break}c[x>>2]=v;j=yi(g,f,36337,x)|0;if(j|0){m=C;l=j;break}a[k>>0]=0;c[y>>2]=v;j=yi(g,f,36391,y)|0;c[H>>2]=c[H>>2]&-5;if(j|0){m=C;l=j;break}c[A>>2]=v;j=yi(g,f,36542,A)|0;if(j|0){m=C;l=j;break}j=0;do{k=d[36672+j>>0]|0;n=c[D>>2]|0;c[n+4>>2]=c[Q>>2];k=(k<<2)+36|0;n=(c[(c[n+12>>2]|0)+56>>2]|0)+k|0;n=(d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0])+(d[36672+(j|1)>>0]|0)|0;p=c[B>>2]|0;c[p+4>>2]=c[z>>2];p=c[p+12>>2]|0;o=c[p+56>>2]|0;p=c[p+72>>2]|0;q=c[p+20>>2]|0;do if(!(b[p+28>>1]&4))R=172;else{if((c[q+24>>2]|0)>>>0<(c[p+24>>2]|0)>>>0){R=172;break}if(!(c[q+96>>2]|0))break;l=Ve(p)|0;R=176}while(0);do if((R|0)==172){l=c[q+40>>2]|0;if(l|0){m=C;break d}if((c[q+148>>2]|0)>>>0>(c[q+152>>2]|0)>>>0){l=Wf(p)|0;R=176;break}else{l=Xf(p)|0;R=176;break}}while(0);if((R|0)==176?(R=0,l|0):0){m=C;break d}f=o+k|0;a[f>>0]=n>>>24;a[f+1>>0]=n>>>16;a[f+2>>0]=n>>>8;a[f+3>>0]=n;j=j+2|0}while(j>>>0<10);f:do if(h){k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];j=c[z>>2]|0;l=c[B>>2]|0;c[l+4>>2]=j;k=c[(c[k>>2]|0)+60>>2]|0;n=c[k>>2]|0;do if(!n)R=182;else{x=c[l+32>>2]|0;x=Yv(c[l+44>>2]|0,0,x|0,((x|0)<0)<<31>>31|0)|0;f=L()|0;j=y;c[j>>2]=x;c[j+4>>2]=f;j=Ya[c[n+40>>2]&127](k,11,y)|0;j=(j|0)==12?0:j;if(j|0)break;j=c[z>>2]|0;R=182}while(0);do if((R|0)==182){l=A;n=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));c[A+20>>2]=j;c[A+24>>2]=z;j=A+4|0;c[j>>2]=Q;c[A+16>>2]=1;Yb(A,2147483647)|0;k=dc(A)|0;if(!k){f=(c[D>>2]|0)+22|0;b[f>>1]=b[f>>1]&-3;break f}j=c[c[(c[j>>2]|0)+4>>2]>>2]|0;if(a[j+12>>0]|0){j=k;break}Ff(j);j=k}while(0);m=C;l=j;break d}while(0);c[(c[B>>2]|0)+4>>2]=c[z>>2];l=cc(z,0)|0;if(l|0){m=C;break}l=bc(z,0)|0;k=(l|0)!=0;j=h^1;do if(k|j)k=k?2:0;else{j=c[B>>2]|0;c[j+4>>2]=c[z>>2];if(!(a[j+17>>0]|0))l=0;else l=(a[j+18>>0]|0)==0?1:2;k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];if(b[k+22>>1]&2){j=k+17|0;if(((l|0)!=0|0)!=(d[j>>0]|0)){k=0;l=0;j=0;break}}else j=k+17|0;a[j>>0]=(l|0)!=0&1;a[k+18>>0]=(l|0)==2&1;k=0;l=0;j=0}while(0);if(j|(k&3)!=0){m=C;break}j=c[(c[B>>2]|0)+32>>2]|0;n=c[D>>2]|0;c[n+4>>2]=c[Q>>2];o=n+22|0;if(b[o>>1]&2){m=C;l=8;break}if(i)m=(c[n+32>>2]|0)-(c[n+36>>2]|0)|0;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[n+32>>2]=j;l=n+80|0;j=c[l>>2]|0;if(!j)break;k=j+-4|0;c[l>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;f=(c[14820]|0)+1|0;c[14820]=f;c[14821]=(f|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=207;break}else{j=Wa[c[29352>>2]&127](k)|0;R=207}while(0);do if((R|0)==207){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[l>>2]=0}while(0);R=n+32|0;l=Se(c[n>>2]|0,R,m)|0;c[n+36>>2]=(c[R>>2]|0)-(m&65535);b[o>>1]=b[o>>1]|2;m=C}else{m=C;l=7}}else{m=C;l=7}}else{m=C;l=7}}else{m=C;l=j}}else{m=C;l=j}}else{m=0;l=j}while(0);a[g+164>>0]=0;c[H>>2]=I;k=E;c[k>>2]=F;c[k+4>>2]=G;c[J>>2]=K;c[M>>2]=N;a[O>>0]=P;k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];j=k+22|0;if(!(b[j>>1]&2)){P=k+32|0;R=k+36|0;Q=(c[P>>2]|0)-(c[R>>2]|0)|0;Se(c[k>>2]|0,P,Q)|0;c[R>>2]=(c[P>>2]|0)-(Q&65535);b[j>>1]=b[j>>1]|2}a[S>>0]=1;if(m|0){S=m+4|0;ug(c[S>>2]|0);c[S>>2]=0;c[m+12>>2]=0}$b(g);g=l;Ra=T;return g|0}function lh(a){a=a|0;var c=0;c=a+8|0;if(!(b[c>>1]&9216)){b[c>>1]=1;b[c>>1]=4;return a|0}else{Dg(a);b[c>>1]=4;return a|0}return 0}function mh(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=a+8|0;do Dg(a);while((b[f>>1]&9216)!=0);c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];if(b[d+8>>1]&2048)return;b[f>>1]=b[f>>1]&-7169&65535|e;return}function nh(d){d=d|0;var e=0,f=0,g=0,h=0;g=d+8|0;f=b[g>>1]|0;h=d+12|0;do if(f&16384){e=(c[d>>2]|0)+(c[h>>2]|0)|0;if((e|0)<1)if(!(f&16))break;else e=1;if(!(Eg(d,e,1)|0)){gw((c[d+16>>2]|0)+(c[h>>2]|0)|0,0,c[d>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+(c[d>>2]|0);b[g>>1]=b[g>>1]&-16897}}while(0);e=d+16|0;f=d+10|0;if(!(Lg(c[e>>2]|0,d,c[h>>2]|0,a[f>>0]|0)|0)){d=0;return d|0}d=(Og(c[e>>2]|0,d,c[h>>2]|0,a[f>>0]|0)|0)==0;d=d?4:8;return d|0}function oh(d){d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;l=o+8|0;m=o;n=d+8|0;e=b[n>>1]|0;if(e&13){m=e;m=m&-16403;b[n>>1]=m;Ra=o;return}j=d+16|0;k=d+12|0;e=d+10|0;f=Og(c[j>>2]|0,d,c[k>>2]|0,a[e>>0]|0)|0;if(f){i=d;h=c[i>>2]|0;i=c[i+4>>2]|0;Lg(c[j>>2]|0,d,c[k>>2]|0,a[e>>0]|0)|0;if((f|0)==1?(g[l>>3]=+g[d>>3],g[m>>3]=+(h>>>0)+4294967296.0*+(i|0),(Lu(l,m,8)|0)==0):0){e=d;c[e>>2]=h;c[e+4>>2]=i;e=4}else e=8}else e=4;m=b[n>>1]&15904|e;b[n>>1]=m;m=m&-16403;b[n>>1]=m;Ra=o;return}function ph(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+80|0;n=p+40|0;o=p;i=f+4|0;h=a[i>>0]|0;if((a[d+10>>0]|0)==h<<24>>24){o=_a[c[f+12>>2]&127](c[f+8>>2]|0,c[d+12>>2]|0,c[d+16>>2]|0,c[e+12>>2]|0,c[e+16>>2]|0)|0;Ra=p;return o|0}m=c[d+32>>2]|0;j=n+8|0;c[n+32>>2]=m;k=n+24|0;c[k>>2]=0;l=o+8|0;b[l>>1]=1;c[o+32>>2]=m;m=o+24|0;c[m>>2]=0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[n+16>>2]=c[d+16>>2];if(!(b[d+8>>1]&2048))b[j>>1]=b[j>>1]&-7169|4096;c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];c[o+16>>2]=c[e+16>>2];if(!(b[e+8>>1]&2048))b[l>>1]=b[l>>1]&-7169|4096;d=b[j>>1]|0;if((d&514)==514?(a[n+10>>0]|0)==h<<24>>24:0)e=c[n+16>>2]|0;else if(!(d&1)){e=Gg(n,h)|0;h=a[i>>0]|0}else e=0;d=b[l>>1]|0;if((d&514)==514?(a[o+10>>0]|0)==h<<24>>24:0){d=c[o+16>>2]|0;h=17}else if(!(d&1)){d=Gg(o,h)|0;h=17}else h=18;if((h|0)==17)if((e|0)==0|(d|0)==0)h=18;else d=_a[c[f+12>>2]&127](c[f+8>>2]|0,c[n+12>>2]|0,e,c[o+12>>2]|0,d)|0;if((h|0)==18)if(!g)d=0;else{a[g>>0]=7;d=0}if(!((b[j>>1]&9216)==0&(c[k>>2]|0)==0))Cg(n);if(!((b[l>>1]&9216)==0&(c[m>>2]|0)==0))Cg(o);o=d;Ra=p;return o|0}function qh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=c[d+12>>2]|0;i=c[e+12>>2]|0;f=b[d+8>>1]|0;g=b[e+8>>1]|0;if(!((g|f)&16384)){e=Lu(c[d+16>>2]|0,c[e+16>>2]|0,(h|0)>(i|0)?i:h)|0;return ((e|0)==0?h-i|0:e)|0}f=f&16384;if((f&g)<<16>>16){i=(c[d>>2]|0)-(c[e>>2]|0)|0;return i|0}if(!(f<<16>>16)){g=c[d+16>>2]|0;a:do if((h|0)>0){f=0;while(1){if(a[g+f>>0]|0){f=1;break}f=f+1|0;if((f|0)>=(h|0))break a}return f|0}while(0);i=h-(c[e>>2]|0)|0;return i|0}else{g=c[e+16>>2]|0;b:do if((i|0)>0){f=0;while(1){if(a[g+f>>0]|0){f=-1;break}f=f+1|0;if((f|0)>=(i|0))break b}return f|0}while(0);i=(c[d>>2]|0)-i|0;return i|0}return 0}function rh(b){b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;f=g;d=g+12|0;e=b+64|0;e=Xg(c[b+40>>2]|0,0,c[e>>2]|0,c[e+4>>2]|0,0,d)|0;if(e|0){f=e;Ra=g;return f|0}if(!(c[d>>2]|0)){a[b+3>>0]=0;c[b+28>>2]=0;f=0;Ra=g;return f|0}else{c[f>>2]=32306;c[f+4>>2]=79626;c[f+8>>2]=31517;Db(11,32001,f);f=11;Ra=g;return f|0}return 0}function sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;f=i;g=c[b+40>>2]|0;d=a[g>>0]|0;do if((d&255)>2){c[f>>2]=0;if(d<<24>>24==4){d=c[g+4>>2]|0;if(!d)d=0;else h=19}else{a[g>>0]=1;d=c[7389]|0;if((d|0)!=0?(Wa[d&127](410)|0)!=0:0)d=10;else{e=g+16|0;d=g+56|0;d=th(g,c[e>>2]|0,c[d>>2]|0,c[d+4>>2]|0,0,f)|0;if(!d){d=c[e>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{j=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[e>>2]=0;e=c[f>>2]|0;d=g+4|0;if(!e)if(!(c[d>>2]|0))d=a[g>>0]|0;else h=14;else{c[d>>2]=e;h=14}if((h|0)==14){d=a[g>>0]|0;if(!(d<<24>>24)){a[g>>0]=2;d=2}}h=20;break}}h=19}c[b+28>>2]=0}else h=20;while(0);if((h|0)==20){c[b+28>>2]=0;if(!(d<<24>>24)){j=0;Ra=i;return j|0}else d=0}a[b+2>>0]=1;j=d;Ra=i;return j|0}function th(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;r=t;if(!f){s=Xg(d,0,g,h,i,j)|0;Ra=t;return s|0}s=d+112|0;q=c[s>>2]|0;p=q+6|0;n=((e[p>>1]|0)*40|0)+56|0;m=c[q+12>>2]|0;a:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;o=26;break}m=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){n=c[14978]|0;l=Tv(k|0,l|0,m|0,((m|0)<0)<<31>>31|0)|0;k=L()|0;c[14768]=((k|0)<0|(k|0)==0&l>>>0<=n>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){s=7;Ra=t;return s|0}k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){s=7;Ra=t;return s|0}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];o=m+284|0;c[o>>2]=(c[o>>2]|0)+1;o=26;break a}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];o=m+284|0;c[o>>2]=(c[o>>2]|0)+1;o=26;break a}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;o=26}while(0);if((o|0)==26)if(!k){s=7;Ra=t;return s|0}else m=k;c[m+4>>2]=m+16;c[m>>2]=q;o=m+8|0;b[o>>1]=(e[p>>1]|0)+1;_g(q,g,f,m);p=b[o>>1]|0;if(p<<16>>16!=0?(p&65535)<=(e[q+8>>1]|0):0)l=Xg(d,m,g,h,i,j)|0;else{c[r>>2]=32306;c[r+4>>2]=64001;c[r+8>>2]=31517;Db(11,32001,r);l=11}k=c[(c[s>>2]|0)+12>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,m);s=l;Ra=t;return s|0}s=m;if((c[k+304>>2]|0)>>>0<=s>>>0?(c[k+308>>2]|0)>>>0>s>>>0:0){s=k+300|0;c[m>>2]=c[s>>2];c[s>>2]=m;s=l;Ra=t;return s|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);s=l;Ra=t;return s|0}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);s=l;Ra=t;return s|0}return 0}function uh(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;h=l;k=g+8|0;b[k>>1]=1;j=c[d+20>>2]|0;j=Yv(c[j+44>>2]|0,0,c[j+32>>2]|0,0)|0;i=L()|0;if(i>>>0<0|(i|0)==0&j>>>0<(f+e|0)>>>0){c[h>>2]=32306;c[h+4>>2]=75549;c[h+8>>2]=31517;Db(11,32001,h);k=11;Ra=l;return k|0}h=f+1|0;j=g+24|0;do if((c[j>>2]|0)<(h|0)){h=Eg(g,h,0)|0;if(!h){h=g+16|0;i=h;h=c[h>>2]|0;break}else{k=h;Ra=l;return k|0}}else{h=c[g+20>>2]|0;i=g+16|0;c[i>>2]=h;b[k>>1]=1}while(0);h=cg(d,e,f,h,0)|0;if(!h){a[(c[i>>2]|0)+f>>0]=0;b[k>>1]=16;c[g+12>>2]=f;k=0;Ra=l;return k|0}if((b[k>>1]&9216)==0?(c[j>>2]|0)==0:0){k=h;Ra=l;return k|0}Cg(g);k=h;Ra=l;return k|0}function vh(a,e,f){a=a|0;e=e|0;f=f|0;var i=0,j=0,k=0,l=0,m=0;l=Ra;Ra=Ra+16|0;j=l+8|0;k=l;i=(d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0);a=(d[a+5>>0]|0)<<16|(d[a+4>>0]|0)<<24|(d[a+6>>0]|0)<<8|(d[a+7>>0]|0);m=f;c[m>>2]=a;c[m+4>>2]=i;if((e|0)==6){k=4;m=f+8|0;b[m>>1]=k;Ra=l;return}c[h>>2]=a;c[h+4>>2]=i;g[j>>3]=+g[h>>3];g[k>>3]=+g[j>>3];k=+g[j>>3]==+g[k>>3]?8:1;m=f+8|0;b[m>>1]=k;Ra=l;return}function wh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;g=h;if(d>>>0>16777215|(d|0)==16777215&c>>>0>4294967295){a[b+8>>0]=c;g=bw(c|0,d|0,8)|0;L()|0;a[b+7>>0]=g&255|-128;g=bw(c|0,d|0,15)|0;L()|0;a[b+6>>0]=g&255|-128;g=bw(c|0,d|0,22)|0;L()|0;a[b+5>>0]=g&255|-128;g=bw(c|0,d|0,29)|0;L()|0;a[b+4>>0]=g&255|-128;g=bw(c|0,d|0,36)|0;L()|0;a[b+3>>0]=g&255|-128;g=bw(c|0,d|0,43)|0;L()|0;a[b+2>>0]=g&255|-128;g=bw(c|0,d|0,50)|0;L()|0;a[b+1>>0]=g&255|-128;g=bw(c|0,d|0,57)|0;L()|0;a[b>>0]=g&255|-128;g=9;Ra=h;return g|0}e=0;f=c;while(1){c=e+1|0;a[g+e>>0]=f&255|-128;f=bw(f|0,d|0,7)|0;d=L()|0;if((f|0)==0&(d|0)==0)break;else e=c}a[g>>0]=a[g>>0]&127;d=0;while(1){a[b+d>>0]=a[g+e>>0]|0;if((e|0)>0){e=e+-1|0;d=d+1|0}else break}Ra=h;return c|0}function xh(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=Ra;Ra=Ra+32|0;n=o+16|0;i=o;m=e+68|0;f=a[m>>0]|0;do if(f<<24>>24>-1){h=e+116|0;g=c[h>>2]|0;if(!(f<<24>>24)){f=h;j=26}else{g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);f=a[m>>0]|0}else{l=c[g+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[g+16>>2]=c[l>>2];c[l>>2]=g}f=f+-1<<24>>24;a[m>>0]=f;if(f<<24>>24)do{g=c[(c[e+120+(f<<24>>24<<2)>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);f=a[m>>0]|0}else{l=c[g+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[g+16>>2]=c[l>>2];c[l>>2]=g}f=f+-1<<24>>24;a[m>>0]=f}while(f<<24>>24!=0);k=c[e+120>>2]|0;c[h>>2]=k;f=h;l=k}}else{h=e+64|0;f=c[h>>2]|0;if(!f){a[e>>0]=1;n=16;Ra=o;return n|0}g=a[e>>0]|0;if((g&255)>2){if(g<<24>>24==4){n=c[e+4>>2]|0;Ra=o;return n|0}f=e+16|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[f>>2]=0;a[e>>0]=1;f=c[h>>2]|0}h=e+116|0;f=yh(c[(c[e+8>>2]|0)+4>>2]|0,f,h,0,d[e+2>>0]|0)|0;if(!f){a[m>>0]=0;g=c[h>>2]|0;a[e+69>>0]=a[g+2>>0]|0;f=h;j=26;break}a[e>>0]=1;n=f;Ra=o;return n|0}while(0);do if((j|0)==26){if(a[g>>0]|0?((c[e+112>>2]|0)==0|0)==(d[g+2>>0]|0):0){l=g;k=g;break}c[i>>2]=32306;c[i+4>>2]=68367;c[i+8>>2]=31517;Db(11,32001,i);n=11;Ra=o;return n|0}while(0);g=e+70|0;b[g>>1]=0;h=e+50|0;b[h>>1]=0;i=e+1|0;j=a[i>>0]&-15;a[i>>0]=j;if(b[k+24>>1]|0){a[e>>0]=0;n=0;Ra=o;return n|0}if(a[k+8>>0]|0){a[e>>0]=1;n=16;Ra=o;return n|0}if((c[k+4>>2]|0)==1){n=(c[k+56>>2]|0)+((d[k+9>>0]|0)+8)|0;p=a[n>>0]|0;q=a[n+1>>0]|0;k=a[n+2>>0]|0;n=a[n+3>>0]|0;a[e>>0]=0;r=c[e+20>>2]|0;b[h>>1]=0;a[i>>0]=j;b[e+72>>1]=0;c[e+120>>2]=l;b[g>>1]=0;a[m>>0]=1;n=yh(r,(q&255)<<16|(p&255)<<24|(k&255)<<8|n&255,f,e,d[e+2>>0]|0)|0;Ra=o;return n|0}else{c[n>>2]=32306;c[n+4>>2]=68380;c[n+8>>2]=31517;Db(11,32001,n);r=11;Ra=o;return r|0}return 0}function yh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+32|0;l=n+16|0;i=n;j=n+28|0;do if((c[d+44>>2]|0)>>>0>=e>>>0){k=c[d>>2]|0;h=Za[c[k+204>>2]&127](k,e,j,h)|0;if(!h){k=c[j>>2]|0;i=k+8|0;h=c[i>>2]|0;c[f>>2]=h;if(!(a[h>>0]|0)){i=c[i>>2]|0;j=i+4|0;if((c[j>>2]|0)!=(e|0)){c[i+56>>2]=c[k+4>>2];c[i+72>>2]=k;c[i+52>>2]=d;c[j>>2]=e;a[i+9>>0]=(e|0)==1?100:0;h=c[f>>2]|0}h=Gf(h)|0;if(!h)m=8}else m=8;if((m|0)==8){if(!g){g=0;Ra=n;return g|0}m=c[f>>2]|0;if(b[m+24>>1]|0?(a[m+2>>0]|0)==(a[g+69>>0]|0):0){g=0;Ra=n;return g|0}c[l>>2]=32306;c[l+4>>2]=65376;c[l+8>>2]=31517;Db(11,32001,l);h=11}i=c[f>>2]|0;if(i){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{m=c[i+20>>2]|0;f=m+120|0;c[f>>2]=(c[f>>2]|0)+-1;m=m+136|0;c[i+16>>2]=c[m>>2];c[m>>2]=i;break}}}}else{c[i>>2]=32306;c[i+4>>2]=65355;c[i+8>>2]=31517;Db(11,32001,i);h=11}while(0);if(!g){g=h;Ra=n;return g|0}f=g+68|0;m=(a[f>>0]|0)+-1<<24>>24;a[f>>0]=m;c[g+116>>2]=c[g+120+(m<<24>>24<<2)>>2];g=h;Ra=n;return g|0}function zh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+80|0;m=z+56|0;x=z+40|0;k=z+24|0;l=z+68|0;p=z;if((c[f+44>>2]|0)>>>0<g>>>0){c[k>>2]=32306;c[k+4>>2]=72344;c[k+8>>2]=31517;Db(11,32001,k);y=11;Ra=z;return y|0}g=yh(f,g,l,0,0)|0;if(g|0){y=g;Ra=z;return y|0}w=c[l>>2]|0;v=w+1|0;if(a[v>>0]|0){c[m>>2]=32306;c[m+4>>2]=72349;c[m+8>>2]=31517;Db(11,32001,m);a[v>>0]=0;if(!w){y=11;Ra=z;return y|0}else j=11}else{a[v>>0]=1;t=w+9|0;s=d[t>>0]|0;u=w+24|0;a:do if(!(b[u>>1]|0)){g=0;r=w+8|0;y=13}else{l=w+56|0;m=w+26|0;n=w+64|0;o=w+8|0;k=0;do{g=(c[n>>2]|0)+(k<<1)|0;g=(c[l>>2]|0)+((d[g>>0]<<8|d[g+1>>0])&e[m>>1])|0;if((a[o>>0]|0)==0?(q=zh(f,d[g+1>>0]<<16|d[g>>0]<<24|d[g+2>>0]<<8|d[g+3>>0],1,i)|0,q|0):0){j=q;break a}g=Ah(w,g,p)|0;k=k+1|0;if(g|0){j=g;break a}g=b[u>>1]|0}while(k>>>0<(g&65535)>>>0);g=g&65535;r=o;y=13}while(0);b:do if((y|0)==13){if(!(a[r>>0]|0)){g=(c[w+56>>2]|0)+(s+8)|0;g=zh(f,d[g+1>>0]<<16|d[g>>0]<<24|d[g+2>>0]<<8|d[g+3>>0],1,i)|0;if(g|0){j=g;break}}else if(i|0)c[i>>2]=(c[i>>2]|0)+g;if(h|0){j=Bh(c[w+52>>2]|0,w,c[w+4>>2]|0)|0;break}g=c[w+72>>2]|0;k=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){j=Ve(g)|0;y=27}}else y=23;do if((y|0)==23){j=c[k+40>>2]|0;if(j|0)break b;if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){j=Wf(g)|0;y=27;break}else{j=Xf(g)|0;y=27;break}}while(0);if((y|0)==27?j|0:0)break;f=c[w+56>>2]|0;j=a[f+s>>0]|8;o=j&255;l=w+52|0;q=c[l>>2]|0;k=d[t>>0]|0;if(!(b[q+22>>1]&12)){g=f+k|0;p=q+36|0}else{p=q+36|0;g=f+k|0;gw(g|0,0,(c[p>>2]|0)-k|0)|0}a[g>>0]=j;m=k+8|0;n=m&65535;g=f+(k+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[f+(k+7)>>0]=0;g=f+(k+5)|0;a[g>>0]=(c[p>>2]|0)>>>8;a[g+1>>0]=c[p>>2];c[w+20>>2]=(c[p>>2]|0)-m&65535;g=o>>>3;a[r>>0]=g;g=4-(g<<2)&255;j=w+10|0;a[j>>0]=g;c[w+76>>2]=120;k=c[l>>2]|0;switch((o&247)<<24>>24){case 5:{a[w+2>>0]=1;a[w+3>>0]=1;c[w+80>>2]=180;b[w+14>>1]=b[k+28>>1]|0;j=k+30|0;y=35;break}case 2:{a[w+2>>0]=0;a[w+3>>0]=0;c[w+80>>2]=179;b[w+14>>1]=b[k+24>>1]|0;j=k+26|0;y=35;break}default:{c[x>>2]=32306;c[x+4>>2]=65035;c[x+8>>2]=31517;Db(11,32001,x);g=a[j>>0]|0}}if((y|0)==35){b[w+16>>1]=b[j>>1]|0;a[w+11>>0]=a[k+21>>0]|0}b[w+18>>1]=n;c[w+60>>2]=f+(c[p>>2]|0);c[w+64>>2]=f+m;c[w+68>>2]=f+(g&255);a[w+12>>0]=0;b[w+26>>1]=(c[q+32>>2]|0)+65535;b[u>>1]=0;a[w>>0]=1;j=0}while(0);a[v>>0]=0}g=c[w+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);y=j;Ra=z;return y|0}else{y=c[g+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[g+16>>2]=c[y>>2];c[y>>2]=g;y=j;Ra=z;return y|0}return 0}function Ah(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+64|0;s=t+32|0;r=t+16|0;i=t;o=t+48|0;p=t+44|0;cb[c[f+80>>2]&255](f,g,h);k=e[h+16>>1]|0;j=c[h+12>>2]|0;if((j|0)==(k|0)){s=0;Ra=t;return s|0}g=g+(e[h+18>>1]|0)|0;if(g>>>0>(c[f+60>>2]|0)>>>0){c[i>>2]=32306;c[i+4>>2]=69515;c[i+8>>2]=31517;Db(11,32001,i);s=11;Ra=t;return s|0}h=g+-4|0;n=c[f+52>>2]|0;i=(c[n+36>>2]|0)+-4|0;g=j+~k+i|0;if(i>>>0>g>>>0){s=0;Ra=t;return s|0}l=n+44|0;f=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];j=(g>>>0)/(i>>>0)|0;while(1){j=j+-1|0;c[o>>2]=0;c[p>>2]=0;if(f>>>0<2){m=8;break}if(f>>>0>(c[l>>2]|0)>>>0){m=8;break}k=(j|0)==0;if(!k){g=dg(n,f,p,o)|0;if(g|0)break;g=c[p>>2]|0;if(g)m=20;else m=12}else m=12;a:do if((m|0)==12){g=(c[n>>2]|0)+212|0;i=Ya[c[29436>>2]&127](c[(c[g>>2]|0)+44>>2]|0,f,0)|0;do if(i|0){g=c[g>>2]|0;h=c[i+4>>2]|0;if(!(c[h>>2]|0)){g=sf(g,f,i)|0;if(!g)break;else h=g}else{m=g+12|0;c[m>>2]=(c[m>>2]|0)+1;m=h+30|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16}g=c[h+8>>2]|0;i=g+4|0;if((c[i>>2]|0)==(f|0)){c[p>>2]=g;if(!g){m=22;break a}else{m=20;break a}}else{c[g+56>>2]=c[h+4>>2];c[g+72>>2]=h;c[g+52>>2]=n;c[i>>2]=f;a[g+9>>0]=0;c[p>>2]=g;m=20;break a}}while(0);c[p>>2]=0;g=0;m=22}while(0);if((m|0)==20){m=0;if((b[(c[g+72>>2]|0)+30>>1]|0)==1)m=22;else{c[s>>2]=32306;c[s+4>>2]=69552;c[s+8>>2]=31517;Db(11,32001,s);g=11}}if((m|0)==22){m=0;g=Bh(n,g,f)|0}h=c[p>>2]|0;do if(h|0?(q=c[h+72>>2]|0,q|0):0)if(!(b[q+28>>1]&32)){Df(q);break}else{f=c[q+20>>2]|0;i=f+120|0;c[i>>2]=(c[i>>2]|0)+-1;f=f+136|0;c[q+16>>2]=c[f>>2];c[f>>2]=q;break}while(0);if((g|0)!=0|k){m=30;break}else f=c[o>>2]|0}if((m|0)==8){c[r>>2]=32306;c[r+4>>2]=69532;c[r+8>>2]=31517;Db(11,32001,r);g=11}else if((m|0)==30){Ra=t;return g|0}s=g;Ra=t;return s|0}function Bh(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+48|0;r=B+16|0;j=B;s=B+32|0;A=B+28|0;m=c[f+12>>2]|0;if(h>>>0>=2?(x=f+44|0,(c[x>>2]|0)>>>0>=h>>>0):0){do if(!g){g=(c[f>>2]|0)+212|0;k=Ya[c[29436>>2]&127](c[(c[g>>2]|0)+44>>2]|0,h,0)|0;if(k){g=c[g>>2]|0;j=c[k+4>>2]|0;if(!(c[j>>2]|0)){g=sf(g,h,k)|0;if(!g){g=0;break}else j=g}else{z=g+12|0;c[z>>2]=(c[z>>2]|0)+1;z=j+30|0;b[z>>1]=(b[z>>1]|0)+1<<16>>16}g=c[j+8>>2]|0;k=g+4|0;if((c[k>>2]|0)!=(h|0)){c[g+56>>2]=c[j+4>>2];c[g+72>>2]=j;c[g+52>>2]=f;c[k>>2]=h;a[g+9>>0]=0}}else g=0}else{z=c[g+72>>2]|0;q=z+30|0;b[q>>1]=(b[q>>1]|0)+1<<16>>16;z=(c[z+12>>2]|0)+12|0;c[z>>2]=(c[z>>2]|0)+1}while(0);k=c[m+72>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[A>>2]=0;z=23;break}else{j=Ve(k)|0;z=22;break}else z=17;while(0);do if((z|0)==17){j=c[l+40>>2]|0;if(j|0){c[A>>2]=j;i=0;z=105;break}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(k)|0;z=22;break}else{j=Xf(k)|0;z=22;break}}while(0);if((z|0)==22){c[A>>2]=j;if(!j)z=23;else{i=0;z=105}}a:do if((z|0)==23){q=m+56|0;p=c[q>>2]|0;j=p+36|0;k=p+37|0;m=p+38|0;p=p+39|0;l=d[k>>0]<<16|d[j>>0]<<24|d[m>>0]<<8|d[p>>0];o=l+1|0;a[j>>0]=o>>>24;a[k>>0]=o>>>16;a[m>>0]=o>>>8;a[p>>0]=o;p=f+22|0;if(!(b[p>>1]&4))m=g;else{if(!g){g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,h,s,0)|0;if(g|0){c[A>>2]=g;break}i=c[s>>2]|0;g=c[i+8>>2]|0;j=g+4|0;if((c[j>>2]|0)!=(h|0)){c[g+56>>2]=c[i+4>>2];c[g+72>>2]=i;c[g+52>>2]=f;c[j>>2]=h;a[g+9>>0]=0}c[A>>2]=0}j=c[g+72>>2]|0;k=c[j+20>>2]|0;do if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[A>>2]=0;break}else{n=Ve(j)|0;z=40;break}else z=35;while(0);do if((z|0)==35){i=c[k+40>>2]|0;if(i|0){c[A>>2]=i;i=0;z=105;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){n=Wf(j)|0;z=40;break}else{n=Xf(j)|0;z=40;break}}while(0);if((z|0)==40?(c[A>>2]=n,n|0):0){i=0;z=105;break}gw(c[g+56>>2]|0,0,c[(c[g+52>>2]|0)+32>>2]|0)|0;m=g}if(a[f+17>>0]|0?(ig(f,h,2,0,A),c[A>>2]|0):0){i=0;g=m;z=105;break}if(l){n=c[q>>2]|0;n=d[n+33>>0]<<16|d[n+32>>0]<<24|d[n+34>>0]<<8|d[n+35>>0];g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,n,s,0)|0;if(g|0){c[A>>2]=g;i=0;g=m;z=105;break}g=c[s>>2]|0;i=c[g+8>>2]|0;j=i+4|0;if((c[j>>2]|0)==(n|0)){g=i+56|0;l=g;g=c[g>>2]|0}else{o=c[g+4>>2]|0;l=i+56|0;c[l>>2]=o;c[i+72>>2]=g;c[i+52>>2]=f;c[j>>2]=n;a[i+9>>0]=(n|0)==1?100:0;g=o}c[A>>2]=0;o=d[g+5>>0]<<16|d[g+4>>0]<<24|d[g+6>>0]<<8|d[g+7>>0];j=(c[f+36>>2]|0)>>>2;if(o>>>0>(j+-2|0)>>>0){c[r>>2]=32306;c[r+4>>2]=69422;c[r+8>>2]=31517;Db(11,32001,r);c[A>>2]=11;g=m;z=105;break}if(o>>>0<(j+-8|0)>>>0){j=c[i+72>>2]|0;k=c[j+20>>2]|0;do if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[A>>2]=0;break}else{g=Ve(j)|0;z=63;break}else z=58;while(0);do if((z|0)==58){g=c[k+40>>2]|0;if(g|0){c[A>>2]=g;g=m;z=105;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){g=Wf(j)|0;z=63;break}else{g=Xf(j)|0;z=63;break}}while(0);if((z|0)==63){c[A>>2]=g;if(g|0){g=m;z=105;break}g=c[l>>2]|0}z=o+1|0;a[g+4>>0]=z>>>24;a[g+5>>0]=z>>>16;a[g+6>>0]=z>>>8;a[g+7>>0]=z;z=(c[l>>2]|0)+((o<<2)+8)|0;a[z>>0]=h>>>24;a[z+1>>0]=h>>>16;a[z+2>>0]=h>>>8;a[z+3>>0]=h;do if(((m|0?(b[p>>1]&4)==0:0)?(t=c[m+72>>2]|0,u=c[t+20>>2]|0,(a[u+12>>0]|0)==0):0)?(v=t+28|0,w=e[v>>1]|0,w&2|0):0){if(c[u+96>>2]|0)break;b[v>>1]=w&65515|16}while(0);n=f+60|0;g=c[n>>2]|0;do if(!g){l=c[x>>2]|0;do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](512)|0;if(!g)z=83;else z=84}else{g=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){z=c[14978]|0;f=Tv(j|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&f>>>0<=z>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){z=83;break}j=Wa[c[29352>>2]&127](g)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){z=84;break}c[14987]=j;z=84}while(0);if((z|0)==83){c[n>>2]=0;g=7;break}else if((z|0)==84){gw(g+4|0,0,508)|0;c[g>>2]=l;c[n>>2]=g;z=85;break}}else z=85;while(0);if((z|0)==85)if((c[g>>2]|0)>>>0<h>>>0)g=0;else g=df(g,h)|0;c[A>>2]=g;g=m;z=105;break}}else{n=0;i=0}if(!m){g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,h,s,0)|0;if(g|0){c[A>>2]=g;z=111;break}j=c[s>>2]|0;g=c[j+8>>2]|0;k=g+4|0;if((c[k>>2]|0)!=(h|0)){c[g+56>>2]=c[j+4>>2];c[g+72>>2]=j;c[g+52>>2]=f;c[k>>2]=h;a[g+9>>0]=0}c[A>>2]=0;m=g}g=m+72|0;k=c[g>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[A>>2]=0;break}else{y=Ve(k)|0;z=104;break}else z=99;while(0);do if((z|0)==99){j=c[l+40>>2]|0;if(j|0){c[A>>2]=j;g=m;z=105;break a}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){y=Wf(k)|0;z=104;break}else{y=Xf(k)|0;z=104;break}}while(0);if((z|0)==104?(c[A>>2]=y,y|0):0){g=m;z=105;break}z=m+56|0;f=c[z>>2]|0;a[f>>0]=n>>>24;a[f+1>>0]=n>>>16;a[f+2>>0]=n>>>8;a[f+3>>0]=n;z=(c[z>>2]|0)+4|0;a[z>>0]=0;a[z+1>>0]=0;a[z+2>>0]=0;a[z+3>>0]=0;z=c[q>>2]|0;a[z+32>>0]=h>>>24;a[z+33>>0]=h>>>16;a[z+34>>0]=h>>>8;a[z+35>>0]=h;a[m>>0]=0;if(!m)z=111;else z=108}while(0);if((z|0)==105)if(!g)z=111;else{a[g>>0]=0;g=g+72|0;z=108}do if((z|0)==108){g=c[g>>2]|0;if(!(b[g+28>>1]&32)){Df(g);z=111;break}else{z=c[g+20>>2]|0;h=z+120|0;c[h>>2]=(c[h>>2]|0)+-1;z=z+136|0;c[g+16>>2]=c[z>>2];c[z>>2]=g;z=111;break}}while(0);do if((z|0)==111?i|0:0){g=c[i+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{h=c[g+20>>2]|0;z=h+120|0;c[z>>2]=(c[z>>2]|0)+-1;h=h+136|0;c[g+16>>2]=c[h>>2];c[h>>2]=g;break}}while(0);A=c[A>>2]|0;Ra=B;return A|0}c[j>>2]=32306;c[j+4>>2]=69368;c[j+8>>2]=31517;Db(11,32001,j);A=11;Ra=B;return A|0}function Ch(a,b,c){a=a|0;b=b|0;c=c|0;return Fh(a,b,c,0)|0}function Dh(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=f+(a[f>>0]&63)|0;switch(a[f+1>>0]|0){case 1:{k=a[h>>0]|0;j=((k|0)<0)<<31>>31;break}case 2:{k=a[h>>0]<<8|d[h+1>>0];j=((k|0)<0)<<31>>31;break}case 3:{k=d[h+1>>0]<<8|a[h>>0]<<16|d[h+2>>0];j=((k|0)<0)<<31>>31;break}case 4:{k=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];j=((k|0)<0)<<31>>31;break}case 5:{k=h+2|0;j=a[h>>0]<<8|d[h+1>>0];k=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];break}case 6:{k=h+4|0;j=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];k=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];break}case 8:{j=0;k=0;break}case 9:{j=0;k=1;break}case 7:case 0:{g=Fh(b,f,g,0)|0;return g|0}default:{g=Fh(b,f,g,0)|0;return g|0}}i=c[g+4>>2]|0;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>(j|0)|(i|0)==(j|0)&h>>>0>k>>>0){g=a[g+12>>0]|0;return g|0}if((i|0)<(j|0)|(i|0)==(j|0)&h>>>0<k>>>0){g=a[g+13>>0]|0;return g|0}if((e[g+8>>1]|0)>1){g=Fh(b,f,g,1)|0;return g|0}else{f=a[g+10>>0]|0;a[g+14>>0]=1;g=f;return g|0}return 0}function Eh(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;o=p+8|0;j=p;k=f+1|0;i=a[k>>0]|0;l=i&255;do if(i<<24>>24<=-1){h=d[f+2>>0]|0;if(!(h&128)){n=l<<7&16256|h;m=7;break}i=d[f+3>>0]|0;if(i&128){Of(k,j)|0;l=j;h=c[l>>2]|0;if((h|0)==(h|0)?0==(c[l+4>>2]|0):0){n=h;m=7;break}else break}else{n=(l<<14|i)&2080895|h<<7&16256;m=7;break}}else{n=l;m=7}while(0);if((m|0)==7?(n|0)>=12:0){if(!(n&1)){g=a[g+13>>0]|0;Ra=p;return g|0}h=d[f>>0]|0;j=(n+-12|0)/2|0;if((j+h|0)>(b|0)){c[o>>2]=32306;c[o+4>>2]=80874;c[o+8>>2]=31517;Db(11,32001,o);a[g+11>>0]=11;g=0;Ra=p;return g|0}o=c[g+4>>2]|0;i=c[o+12>>2]|0;h=Lu(f+h|0,c[o+16>>2]|0,(j|0)>(i|0)?i:j)|0;if(h|0)if((h|0)>0){g=a[g+13>>0]|0;Ra=p;return g|0}else{g=a[g+12>>0]|0;Ra=p;return g|0}h=j-i|0;if(!h)if((e[g+8>>1]|0)>1){g=Fh(b,f,g,1)|0;Ra=p;return g|0}else{f=a[g+10>>0]|0;a[g+14>>0]=1;g=f;Ra=p;return g|0}else if((h|0)>0){g=a[g+13>>0]|0;Ra=p;return g|0}else{g=a[g+12>>0]|0;Ra=p;return g|0}}g=a[g+12>>0]|0;Ra=p;return g|0}function Fh(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+96|0;O=P+80|0;N=P+64|0;q=P+48|0;K=P+40|0;M=P;p=c[i+4>>2]|0;if(!j){G=a[h>>0]|0;j=G&255;do if(G<<24>>24<=-1){k=d[h+1>>0]|0;if(!(k&128)){j=j<<7&16256|k;k=2;break}l=d[h+2>>0]|0;if(!(l&128)){j=(j<<14|l)&2080895|k<<7&16256;k=3;break}else{k=Of(h,K)|0;G=K;j=c[G>>2]|0;j=((j|0)==(j|0)?0==(c[G+4>>2]|0):0)?j:-1;break}}else k=1;while(0);m=j;r=0;k=k&255;l=j}else{m=h+1|0;G=a[m>>0]|0;j=G&255;do if(G<<24>>24>-1){l=d[h>>0]|0;k=2;w=12}else{k=d[h+2>>0]|0;do if(k&128){l=d[h+3>>0]|0;if(!(l&128)){j=(j<<14|l)&2080895|k<<7&16256;k=3;w=10;break}k=Of(m,K)|0;G=K;j=c[G>>2]|0;if((j|0)==(j|0)?0==(c[G+4>>2]|0):0)w=10;else{j=-1;l=d[h>>0]|0;k=(k&255)+1|0}}else{j=j<<7&16256|k;k=2;w=10}while(0);if((w|0)==10){k=(k&255)+1|0;l=d[h>>0]|0;if(j>>>0<=127){w=12;break}}j=(j+-12|0)>>>1}while(0);if((w|0)==12)j=d[3520+j>>0]|0;m=j+l|0;r=1;p=p+40|0}if(m>>>0>f>>>0){c[q>>2]=32306;c[q+4>>2]=80583;c[q+8>>2]=31517;Db(11,32001,q);a[i+11>>0]=11;i=0;Ra=P;return i|0}E=i+8|0;G=M+12|0;z=M+10|0;A=M+32|0;B=M+8|0;C=M+16|0;D=i+11|0;y=m;x=p;a:while(1){v=x+8|0;j=e[v>>1]|0;b:do if(j&4){j=a[h+k>>0]|0;q=j&255;if((j&255)>9){j=1;w=88;break a}switch(j<<24>>24){case 0:{j=-1;w=88;break a}case 7:{Ug(h+y|0,q,M)|0;m=x;j=c[m>>2]|0;m=c[m+4>>2]|0;o=+g[M>>3];if(!(o<-9223372036854775808.0))if(!(o>=9223372036854775808.0)?(I=~~o>>>0,J=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0,!((m|0)<(J|0)|(m|0)==(J|0)&j>>>0<I>>>0)):0)if(!((m|0)>(J|0)|(m|0)==(J|0)&j>>>0>I>>>0)){n=+(j>>>0)+4294967296.0*+(m|0);if(o>n)j=-1;else j=o<n&1}else j=1;else j=-1;else j=1;q=7;j=0-j|0;w=87;break b}default:{}}m=h+y|0;switch(j<<24>>24){case 6:{u=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];p=d[m+5>>0]<<16|d[m+4>>0]<<24|d[m+6>>0]<<8|d[m+7>>0];break}case 1:{p=a[m>>0]|0;u=((p|0)<0)<<31>>31;break}case 2:{p=a[m>>0]<<8|d[m+1>>0];u=((p|0)<0)<<31>>31;break}case 3:{p=d[m+1>>0]<<8|a[m>>0]<<16|d[m+2>>0];u=((p|0)<0)<<31>>31;break}case 4:{p=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];u=((p|0)<0)<<31>>31;break}case 5:{u=a[m>>0]<<8|d[m+1>>0];p=d[m+3>>0]<<16|d[m+2>>0]<<24|d[m+4>>0]<<8|d[m+5>>0];break}default:{u=0;p=q+-8|0}}m=x;j=c[m>>2]|0;m=c[m+4>>2]|0;if((u|0)<(m|0)|(u|0)==(m|0)&p>>>0<j>>>0){j=-1;w=88;break a}else{j=((u|0)>(m|0)|(u|0)==(m|0)&p>>>0>j>>>0)&1;w=87}}else{if(j&8|0){j=a[h+k>>0]|0;u=j&255;if((j&255)>9){j=1;w=88;break a}if(!(j<<24>>24)){j=-1;w=88;break a}Ug(h+y|0,u,M)|0;if(j<<24>>24==7){n=+g[M>>3];o=+g[x>>3];if(n<o){j=-1;w=88;break a}if(n>o){j=1;w=88;break a}else{j=7;break}}m=M;j=c[m>>2]|0;m=c[m+4>>2]|0;o=+g[x>>3];if(o<-9223372036854775808.0){j=1;w=88;break a}if(o>=9223372036854775808.0){j=-1;w=88;break a}p=~~o>>>0;q=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0;if((m|0)<(q|0)|(m|0)==(q|0)&j>>>0<p>>>0){j=-1;w=88;break a}if((m|0)>(q|0)|(m|0)==(q|0)&j>>>0>p>>>0){j=1;w=88;break a}n=+(j>>>0)+4294967296.0*+(m|0);if(o>n){j=-1;w=88;break a}else{q=u;j=o<n&1;w=87;break}}if(j&2|0){m=h+k|0;v=a[m>>0]|0;j=v&255;do if(v<<24>>24<=-1){p=d[m+1>>0]|0;if(!(p&128)){j=j<<7&16256|p;w=61;break}q=d[m+2>>0]|0;if(q&128){Of(m,K)|0;v=K;j=c[v>>2]|0;if((j|0)==(j|0)?0==(c[v+4>>2]|0):0){w=61;break}else{p=-1;break}}else{j=(j<<14|q)&2080895|p<<7&16256;w=61;break}}else w=61;while(0);if((w|0)==61){if(j>>>0<12){j=-1;w=88;break a}if(!(j&1)){j=1;w=88;break a}else p=j}u=(p+-12|0)>>>1;c[G>>2]=u;if((u+y|0)>>>0>f>>>0){w=65;break a}j=c[i>>2]|0;if(r>>>0>=(e[j+8>>1]|0)>>>0){w=65;break a}m=c[j+20+(r<<2)>>2]|0;if(!m){m=c[x+12>>2]|0;j=Lu(h+y|0,c[x+16>>2]|0,(u|0)<(m|0)?u:m)|0;if(!j){q=p;j=u-m|0;w=87;break}else{w=88;break a}}else{a[z>>0]=a[j+4>>0]|0;c[A>>2]=c[j+12>>2];b[B>>1]=2;c[C>>2]=h+y;q=p;j=ph(M,x,m,D)|0;w=87;break}}q=h+k|0;m=a[q>>0]|0;p=m&255;if(!(j&16)){q=p;j=m<<24>>24!=0&1;w=87;break}do if(m<<24>>24<=-1){j=d[q+1>>0]|0;if(!(j&128)){p=p<<7&16256|j;break}m=d[q+2>>0]|0;if(!(m&128)){p=(p<<14|m)&2080895|j<<7&16256;break}else{Of(q,K)|0;w=K;p=c[w>>2]|0;p=((p|0)==(p|0)?0==(c[w+4>>2]|0):0)?p:-1;break}}while(0);if(!(p>>>0>11&(p&1|0)==0)){j=-1;w=88;break a}u=(p+-12|0)>>>1;if((u+y|0)>>>0>f>>>0){w=85;break a}if(!(b[v>>1]&16384)){m=c[x+12>>2]|0;j=Lu(h+y|0,c[x+16>>2]|0,(u|0)<(m|0)?u:m)|0;if(!j){q=p;j=u-m|0;w=87;break}else{w=88;break a}}m=h+y|0;if(u|0){j=0;do{if(a[m+j>>0]|0){j=1;w=88;break a}j=j+1|0}while(j>>>0<u>>>0)}q=p;j=u-(c[x>>2]|0)|0;w=87}while(0);if((w|0)==87){w=0;if(!j)j=q;else{w=88;break}}r=r+1|0;if((r|0)==(e[E>>1]|0)){w=96;break}x=x+40|0;if(j>>>0>127)q=(j+-12|0)>>>1;else q=d[3520+j>>0]|0;p=1;m=0;while(1){j=bw(j|0,m|0,7)|0;m=L()|0;if((j|0)==0&(m|0)==0)break;else p=p+1|0}y=q+y|0;k=p+k|0;if(y>>>0>f>>>0|k>>>0>=l>>>0){w=96;break}}if((w|0)==65){c[N>>2]=32306;c[N+4>>2]=80658;c[N+8>>2]=31517;Db(11,32001,N);a[D>>0]=11;i=0;Ra=P;return i|0}else if((w|0)==85){c[O>>2]=32306;c[O+4>>2]=80688;c[O+8>>2]=31517;Db(11,32001,O);a[D>>0]=11;i=0;Ra=P;return i|0}else if((w|0)==88){i=(a[(c[(c[i>>2]|0)+16>>2]|0)+r>>0]|0)==0?j:0-j|0;Ra=P;return i|0}else if((w|0)==96){a[i+14>>0]=1;i=a[i+10>>0]|0;Ra=P;return i|0}return 0}function Gh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;A=Ra;Ra=Ra+64|0;u=A+48|0;z=A+32|0;v=A+16|0;l=A;j=A+60|0;g=a[f>>0]|0;a:do if(g<<24>>24){do if((g&255)>2){c[j>>2]=0;if(g<<24>>24==4){g=c[f+4>>2]|0;if(!g)break a;else y=g;Ra=A;return y|0}a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,j)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[j>>2]|0;g=f+4|0;if(!h)if(!(c[g>>2]|0))k=a[f>>0]|0;else n=15;else{c[g>>2]=h;n=15}if((n|0)==15){g=a[f>>0]|0;if(!(g<<24>>24)){a[f>>0]=2;k=2}else k=g}g=k;break}}f=g;Ra=A;return f|0}while(0);switch(g<<24>>24){case 2:break;case 1:{f=101;Ra=A;return f|0}default:break a}a[f>>0]=0;if((c[f+4>>2]|0)>0){f=0;Ra=A;return f|0}}while(0);w=f+116|0;j=c[w>>2]|0;x=f+70|0;s=(b[x>>1]|0)+1<<16>>16;b[x>>1]=s;t=j;if(!(a[j>>0]|0)){c[l>>2]=32306;c[l+4>>2]=68870;c[l+8>>2]=31517;Db(11,32001,l);f=11;Ra=A;return f|0}r=(a[j+8>>0]|0)!=0;if((s&65535)<(e[j+24>>1]|0)){if(r){f=0;Ra=A;return f|0}m=f+68|0;n=f+20|0;o=f+50|0;p=f+1|0;q=f+2|0;h=j;l=t;while(1){k=b[x>>1]|0;g=(c[h+64>>2]|0)+((k&65535)<<1)|0;g=(c[h+56>>2]|0)+((d[g>>0]<<8|d[g+1>>0])&e[h+26>>1])|0;h=a[m>>0]|0;if(h<<24>>24>18){n=46;break}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];B=c[n>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;C=h<<24>>24;b[f+72+(C<<1)>>1]=k;c[f+120+(C<<2)>>2]=l;b[x>>1]=0;a[m>>0]=h+1<<24>>24;g=yh(B,g,w,f,d[q>>0]|0)|0;if(g|0){y=g;n=49;break}g=c[w>>2]|0;if(!(a[g+8>>0]|0)){h=g;l=g}else{y=0;n=49;break}}if((n|0)==46){c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);C=11;Ra=A;return C|0}else if((n|0)==49){Ra=A;return y|0}}if(r){k=f+68|0;l=f+50|0;m=f+1|0;while(1){h=a[k>>0]|0;if(!(h<<24>>24)){n=36;break}b[l>>1]=0;a[m>>0]=a[m>>0]&-7;g=b[f+72+((h<<24>>24)+-1<<1)>>1]|0;b[x>>1]=g;i=h+-1<<24>>24;a[k>>0]=i;i=c[f+120+(i<<24>>24<<2)>>2]|0;c[w>>2]=i;h=c[j+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);i=c[w>>2]|0;g=b[x>>1]|0}else{C=c[h+20>>2]|0;B=C+120|0;c[B>>2]=(c[B>>2]|0)+-1;C=C+136|0;c[h+16>>2]=c[C>>2];c[C>>2]=h}if((g&65535)<(e[i+24>>1]|0))break;else j=i}if((n|0)==36){a[f>>0]=1;C=101;Ra=A;return C|0}if(!(a[i+2>>0]|0)){C=0;Ra=A;return C|0}C=Yg(f,0)|0;Ra=A;return C|0}g=(c[j+56>>2]|0)+((d[j+9>>0]|0)+8)|0;o=f+68|0;h=a[o>>0]|0;if(h<<24>>24>18){c[v>>2]=32306;c[v+4>>2]=68229;c[v+8>>2]=31517;Db(11,32001,v);C=11;Ra=A;return C|0}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];l=f+20|0;C=c[l>>2]|0;m=f+50|0;b[m>>1]=0;n=f+1|0;a[n>>0]=a[n>>0]&-7;k=h<<24>>24;b[f+72+(k<<1)>>1]=s;c[f+120+(k<<2)>>2]=t;b[x>>1]=0;a[o>>0]=h+1<<24>>24;k=f+2|0;g=yh(C,g,w,f,d[k>>0]|0)|0;if(g|0){C=g;Ra=A;return C|0}while(1){g=c[w>>2]|0;if(a[g+8>>0]|0){y=0;n=49;break}h=b[x>>1]|0;i=(c[g+64>>2]|0)+((h&65535)<<1)|0;i=(c[g+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[g+26>>1])|0;j=a[o>>0]|0;if(j<<24>>24>18){n=32;break}C=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];B=c[l>>2]|0;b[m>>1]=0;a[n>>0]=a[n>>0]&-7;v=j<<24>>24;b[f+72+(v<<1)>>1]=h;c[f+120+(v<<2)>>2]=g;b[x>>1]=0;a[o>>0]=j+1<<24>>24;g=yh(B,C,w,f,d[k>>0]|0)|0;if(g|0){y=g;n=49;break}}if((n|0)==32){c[z>>2]=32306;c[z+4>>2]=68229;c[z+8>>2]=31517;Db(11,32001,z);C=11;Ra=A;return C|0}else if((n|0)==49){Ra=A;return y|0}return 0}function Hh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=Ra;Ra=Ra+32|0;u=w+16|0;k=w;i=w+28|0;g=a[f>>0]|0;a:do if(g<<24>>24){do if((g&255)>2){c[i>>2]=0;if(g<<24>>24==4){g=c[f+4>>2]|0;if(!g)break a;Ra=w;return g|0}a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{t=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=f+4|0;if(!h)if(!(c[g>>2]|0))g=a[f>>0]|0;else v=15;else{c[g>>2]=h;v=15}if((v|0)==15){g=a[f>>0]|0;if(!(g<<24>>24)){a[f>>0]=2;g=2}}break}}f=g;Ra=w;return f|0}while(0);switch(g<<24>>24){case 2:break;case 1:{f=101;Ra=w;return f|0}default:break a}a[f>>0]=0;if((c[f+4>>2]|0)<0){f=0;Ra=w;return f|0}}while(0);s=f+116|0;g=c[s>>2]|0;t=f+70|0;h=b[t>>1]|0;j=g;if(!(a[g+8>>0]|0)){r=(c[g+64>>2]|0)+((h&65535)<<1)|0;g=(c[g+56>>2]|0)+((d[r>>0]<<8|d[r+1>>0])&e[g+26>>1])|0;r=f+68|0;i=a[r>>0]|0;if(i<<24>>24>18){c[k>>2]=32306;c[k+4>>2]=68229;c[k+8>>2]=31517;Db(11,32001,k);f=11;Ra=w;return f|0}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];o=f+20|0;m=c[o>>2]|0;p=f+50|0;b[p>>1]=0;q=f+1|0;a[q>>0]=a[q>>0]&-7;n=i<<24>>24;b[f+72+(n<<1)>>1]=h;c[f+120+(n<<2)>>2]=j;b[t>>1]=0;a[r>>0]=i+1<<24>>24;n=f+2|0;g=yh(m,g,s,f,d[n>>0]|0)|0;if(g|0){f=g;Ra=w;return f|0}g=c[s>>2]|0;b:do if(!(a[g+8>>0]|0)){while(1){k=(c[g+56>>2]|0)+((d[g+9>>0]|0)+8)|0;h=a[k>>0]|0;i=a[k+1>>0]|0;j=a[k+2>>0]|0;k=a[k+3>>0]|0;l=b[g+24>>1]|0;b[t>>1]=l;m=a[r>>0]|0;if(m<<24>>24>18)break;x=c[o>>2]|0;b[p>>1]=0;a[q>>0]=a[q>>0]&-7;y=m<<24>>24;b[f+72+(y<<1)>>1]=l;c[f+120+(y<<2)>>2]=g;b[t>>1]=0;a[r>>0]=m+1<<24>>24;g=yh(x,(i&255)<<16|(h&255)<<24|(j&255)<<8|k&255,s,f,d[n>>0]|0)|0;if(g|0){v=45;break}g=c[s>>2]|0;if(a[g+8>>0]|0)break b}if((v|0)==45){Ra=w;return g|0}c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);y=11;Ra=w;return y|0}while(0);b[t>>1]=(e[g+24>>1]|0)+65535;y=0;Ra=w;return y|0}do if(!(h<<16>>16)){i=f+68|0;j=f+50|0;k=f+1|0;while(1){g=a[i>>0]|0;if(!(g<<24>>24))break;b[j>>1]=0;a[k>>0]=a[k>>0]&-7;h=b[f+72+((g<<24>>24)+-1<<1)>>1]|0;b[t>>1]=h;y=c[s>>2]|0;g=g+-1<<24>>24;a[i>>0]=g;c[s>>2]=c[f+120+(g<<24>>24<<2)>>2];g=c[y+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);h=b[t>>1]|0}else{y=c[g+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[g+16>>2]=c[y>>2];c[y>>2]=g}if(h<<16>>16){v=41;break}}if((v|0)==41){g=c[s>>2]|0;break}a[f>>0]=1;y=101;Ra=w;return y|0}while(0);b[t>>1]=h+-1<<16>>16;if(!(a[g+2>>0]|0)){y=0;Ra=w;return y|0}if(a[g+8>>0]|0){y=0;Ra=w;return y|0}y=f+1|0;a[y>>0]=a[y>>0]&-15;b[f+50>>1]=0;y=Hh(f)|0;Ra=w;return y|0}function Ih(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;q=r+16|0;j=r;o=r+28|0;p=(c[g+32>>2]|0)+(c[g+28>>2]|0)|0;l=c[f+116>>2]|0;k=f+40|0;h=c[k>>2]|0;i=f+48|0;f=e[i>>1]|0;if((h+f|0)>>>0>(c[l+60>>2]|0)>>>0){c[j>>2]=32306;c[j+4>>2]=71650;c[j+8>>2]=31517;Db(11,32001,j);q=11;Ra=r;return q|0}f=Nh(l,h,g,0,f)|0;if(f|0){q=f;Ra=r;return q|0}f=e[i>>1]|0;if((p|0)==(f|0)){q=0;Ra=r;return q|0}i=(c[k>>2]|0)+f|0;n=c[l+52>>2]|0;j=(c[n+36>>2]|0)+-4|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];m=f;while(1){f=c[n>>2]|0;f=Za[c[f+204>>2]&127](f,i,o,0)|0;if(f|0){h=10;break}h=c[o>>2]|0;k=c[h+8>>2]|0;f=k+4|0;if((c[f>>2]|0)==(i|0)){f=k+72|0;l=f;f=c[f>>2]|0}else{c[k+56>>2]=c[h+4>>2];l=k+72|0;c[l>>2]=h;c[k+52>>2]=n;c[f>>2]=i;a[k+9>>0]=(i|0)==1?100:0;f=h}if((b[f+30>>1]|0)==1){if((j+m|0)>>>0<p>>>0){f=c[k+56>>2]|0;h=j;i=d[f+1>>0]<<16|d[f>>0]<<24|d[f+2>>0]<<8|d[f+3>>0]}else{h=p-m|0;f=c[k+56>>2]|0}f=Nh(k,f+4|0,g,m,h)|0;j=h}else{c[q>>2]=32306;c[q+4>>2]=71669;c[q+8>>2]=31517;Db(11,32001,q);f=11}h=c[l>>2]|0;do if(h|0)if(!(b[h+28>>1]&32)){Df(h);break}else{l=c[h+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[h+16>>2]=c[l>>2];c[l>>2]=h;break}while(0);if(f|0){h=23;break}m=j+m|0;if((m|0)>=(p|0)){f=0;h=23;break}}if((h|0)==10){q=f;Ra=r;return q|0}else if((h|0)==23){Ra=r;return f|0}return 0}function Jh(a){a=a|0;var b=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+80|0;o=p+64|0;j=p+48|0;l=p+32|0;k=p+16|0;g=p;n=c[(c[a+52>>2]|0)+36>>2]|0;i=c[a+56>>2]|0;b=d[a+9>>0]|0;q=i+(b+5)|0;m=b+8+(d[a+10>>0]|0)+((e[a+24>>1]|0)<<1)|0;h=n+-4|0;f=i+(b+1)|0;f=(d[f>>0]|0)<<8|(d[f+1>>0]|0);b=(((d[q>>0]|0)<<8|(d[q+1>>0]|0))+65535&65535)+1+(d[i+(b+7)>>0]|0)|0;a:do if(f){if(f>>>0<m>>>0){c[g>>2]=32306;c[g+4>>2]=65086;c[g+8>>2]=31517;Db(11,32001,g);q=11;Ra=p;return q|0}b:do if((f|0)<=(h|0)){while(1){q=i+f|0;g=f;f=(d[q>>0]|0)<<8|(d[q+1>>0]|0);q=i+(g+2)|0;q=(d[q>>0]|0)<<8|(d[q+1>>0]|0);b=q+b|0;g=q+g|0;if(f>>>0<=(g+3|0)>>>0)break;if((f|0)>(h|0))break b}if(f|0){c[l>>2]=32306;c[l+4>>2]=65101;c[l+8>>2]=31517;Db(11,32001,l);q=11;Ra=p;return q|0}if(g>>>0<=n>>>0)break a;c[j>>2]=32306;c[j+4>>2]=65105;c[j+8>>2]=31517;Db(11,32001,j);q=11;Ra=p;return q|0}while(0);c[k>>2]=32306;c[k+4>>2]=65091;c[k+8>>2]=31517;Db(11,32001,k);q=11;Ra=p;return q|0}while(0);if((b|0)>(n|0)){c[o>>2]=32306;c[o+4>>2]=65117;c[o+8>>2]=31517;Db(11,32001,o);q=11;Ra=p;return q|0}else{c[a+20>>2]=b-m&65535;q=0;Ra=p;return q|0}return 0}function Kh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;k=q;if(c[i>>2]|0){Ra=q;return}p=c[f+56>>2]|0;l=(c[f+64>>2]|0)+(g<<1)|0;j=(d[l>>0]|0)<<8|(d[l+1>>0]|0);m=f+9|0;n=d[m>>0]|0;o=f+52|0;if((j+h|0)>>>0>(c[(c[o>>2]|0)+36>>2]|0)>>>0){c[k>>2]=32306;c[k+4>>2]=69788;c[k+8>>2]=31517;Db(11,32001,k);c[i>>2]=11;Ra=q;return}j=Oh(f,j&65535,h&65535)|0;if(j|0){c[i>>2]=j;Ra=q;return}j=f+24|0;h=(b[j>>1]|0)+-1<<16>>16;b[j>>1]=h;if(!(h<<16>>16)){l=p+(n+1)|0;a[l>>0]=0;a[l+1>>0]=0;a[l+2>>0]=0;a[l+3>>0]=0;a[p+(n+7)>>0]=0;p=p+(n+5)|0;a[p>>0]=(c[(c[o>>2]|0)+36>>2]|0)>>>8;a[p+1>>0]=c[(c[o>>2]|0)+36>>2];c[f+20>>2]=(c[(c[o>>2]|0)+36>>2]|0)+-8-(d[m>>0]|0)-(d[f+10>>0]|0);Ra=q;return}else{fw(l|0,l+2|0,(h&65535)-g<<1|0)|0;p=p+(n+3)|0;a[p>>0]=(e[j>>1]|0)>>>8;a[p+1>>0]=b[j>>1];p=f+20|0;c[p>>2]=(c[p>>2]|0)+2;Ra=q;return}}function Lh(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+64|0;A=B+40|0;o=B+24|0;z=B;n=f+12|0;if((a[n>>0]|0)==0?(w=i+2|0,x=f+20|0,(w|0)<=(c[x>>2]|0)):0){j=c[f+72>>2]|0;n=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[n+96>>2]|0){m=Ve(j)|0;v=16}}else v=12;do if((v|0)==12){m=c[n+40>>2]|0;if(!m)if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){m=Wf(j)|0;v=16;break}else{m=Xf(j)|0;v=16;break}else v=17}while(0);if((v|0)==16?m|0:0)v=17;if((v|0)==17){c[l>>2]=m;Ra=B;return}s=c[f+56>>2]|0;t=f+9|0;n=a[t>>0]|0;j=n&255;c[z>>2]=0;u=f+24|0;p=(e[u>>1]<<1)+(e[f+18>>1]|0)|0;q=s+(j+5)|0;r=q+1|0;m=d[q>>0]<<8|d[r>>0];do if(p>>>0>m>>>0){if((m|0)==0?(c[(c[f+52>>2]|0)+36>>2]|0)==65536:0){o=65536;v=22;break}c[o>>2]=32306;c[o+4>>2]=64824;c[o+8>>2]=31517;Db(11,32001,o);m=11}else{o=m;v=22}while(0);a:do if((v|0)==22){if(!(a[s+(j+2)>>0]|0)){m=p+2|0;if((m|0)>(o|0)?1:(a[s+(j+1)>>0]|0)==0)v=29;else v=25}else{m=p+2|0;if((m|0)>(o|0))v=29;else v=25}do if((v|0)==25){m=Ph(n,c[(c[f+52>>2]|0)+36>>2]|0,s,i,z)|0;if(m|0){m=m-s|0;break}m=c[z>>2]|0;if(m|0)break a;m=p+2|0;v=29}while(0);if((v|0)==29){if((m+i|0)>(o|0)){m=(c[x>>2]|0)+(-2-i)|0;m=Qh(f,(m|0)<4?m:4)|0;c[z>>2]=m;if(m|0)break;m=((d[q>>0]<<8|d[r>>0])+65535&65535)+1|0}else m=o;m=m-i|0;a[q>>0]=m>>>8;a[r>>0]=m}c[x>>2]=(c[x>>2]|0)-(w&65535);if(!k)ew(s+m|0,h|0,i|0)|0;else{ew(s+(m+4)|0,h+4|0,i+-4|0)|0;i=s+m|0;a[i>>0]=k>>>24;a[i+1>>0]=k>>>16;a[i+2>>0]=k>>>8;a[i+3>>0]=k}k=(c[f+64>>2]|0)+(g<<1)|0;fw(k+2|0,k|0,(e[u>>1]|0)-g<<1|0)|0;a[k>>0]=m>>>8;a[k+1>>0]=m;b[u>>1]=(b[u>>1]|0)+1<<16>>16;g=s+((d[t>>0]|0)+4)|0;k=(a[g>>0]|0)+1<<24>>24;a[g>>0]=k;if(!(k<<24>>24)){k=s+((d[t>>0]|0)+3)|0;a[k>>0]=(a[k>>0]|0)+1<<24>>24}m=f+52|0;if(!(a[(c[m>>2]|0)+17>>0]|0)){Ra=B;return}do if((c[l>>2]|0)==0?(cb[c[f+80>>2]&255](f,h,z),y=e[z+16>>1]|0,(c[z+12>>2]|0)>>>0>y>>>0):0){k=c[f+60>>2]|0;if(k>>>0>=h>>>0?k>>>0<(h+y|0)>>>0:0){c[A>>2]=32306;c[A+4>>2]=64569;c[A+8>>2]=31517;Db(11,32001,A);c[l>>2]=11;break}A=h+((e[z+18>>1]|0)+-4)|0;ig(c[m>>2]|0,d[A+1>>0]<<16|d[A>>0]<<24|d[A+2>>0]<<8|d[A+3>>0],3,c[f+4>>2]|0,l)}while(0);Ra=B;return}while(0);c[l>>2]=m;Ra=B;return}if(!j)m=h;else{ew(j|0,h|0,i|0)|0;m=j}if(k|0){a[m>>0]=k>>>24;a[m+1>>0]=k>>>16;a[m+2>>0]=k>>>8;a[m+3>>0]=k}l=a[n>>0]|0;a[n>>0]=l+1<<24>>24;l=l&255;c[f+36+(l<<2)>>2]=m;b[f+28+(l<<1)>>1]=g;Ra=B;return}\nfunction lu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=c[14832]|0;d=m>>>a;if(d&3|0){b=(d&1^1)+a|0;a=59368+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[14832]=m&~(1<<b);else{c[g+12>>2]=a;c[d>>2]=g}v=b<<3;c[e+4>>2]=v|3;v=e+v+4|0;c[v>>2]=c[v>>2]|1;v=f;Ra=w;return v|0}l=c[14834]|0;if(k>>>0>l>>>0){if(d|0){b=2<<a;b=d<<a&(b|0-b);b=(b&0-b)+-1|0;i=b>>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=59368+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=m&~(1<<e);c[14832]=a}else{c[d+12>>2]=b;c[a>>2]=d;a=m}v=e<<3;h=v-k|0;c[g+4>>2]=k|3;f=g+k|0;c[f+4>>2]=h|1;c[g+v>>2]=h;if(l|0){e=c[14837]|0;b=l>>>3;d=59368+(b<<1<<2)|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[14834]=h;c[14837]=f;v=i;Ra=w;return v|0}g=c[14833]|0;if(g){d=(g&0-g)+-1|0;f=d>>>12&16;d=d>>>f;e=d>>>5&8;d=d>>>e;h=d>>>2&4;d=d>>>h;i=d>>>1&2;d=d>>>i;j=d>>>1&1;j=c[59632+((e|f|h|i|j)+(d>>>j)<<2)>>2]|0;d=j;i=j;j=(c[j+4>>2]&-8)-k|0;while(1){a=c[d+16>>2]|0;if(!a){a=c[d+20>>2]|0;if(!a)break}h=(c[a+4>>2]&-8)-k|0;f=h>>>0<j>>>0;d=a;i=f?a:i;j=f?h:j}h=i+k|0;if(h>>>0>i>>>0){f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[i+28>>2]|0;a=59632+(b<<2)|0;if((i|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14833]=g&~(1<<b);break}}else{v=f+16|0;c[((c[v>>2]|0)==(i|0)?v:f+20|0)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[i+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[i+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(j>>>0<16){v=j+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[h+4>>2]=j|1;c[h+j>>2]=j;if(l|0){e=c[14837]|0;b=l>>>3;d=59368+(b<<1<<2)|0;b=1<<b;if(!(b&m)){c[14832]=b|m;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[14834]=j;c[14837]=h}v=i+8|0;Ra=w;return v|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;e=c[14833]|0;if(e){f=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;q=a<<m;i=(q+520192|0)>>>16&4;q=q<<i;j=(q+245760|0)>>>16&2;j=14-(i|m|j)+(q<<j>>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;d=c[59632+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;q=61}else{a=0;i=k<<((j|0)==31?0:25-(j>>>1)|0);g=0;while(1){h=(c[d+4>>2]&-8)-k|0;if(h>>>0<f>>>0)if(!h){a=d;f=0;q=65;break a}else{a=d;f=h}q=c[d+20>>2]|0;d=c[d+16+(i>>>31<<2)>>2]|0;g=(q|0)==0|(q|0)==(d|0)?g:q;if(!d){d=g;q=61;break}else i=i<<1}}while(0);if((q|0)==61){if((d|0)==0&(a|0)==0){a=2<<j;a=(a|0-a)&e;if(!a){m=k;break}m=(a&0-a)+-1|0;h=m>>>12&16;m=m>>>h;g=m>>>5&8;m=m>>>g;i=m>>>2&4;m=m>>>i;j=m>>>1&2;m=m>>>j;d=m>>>1&1;a=0;d=c[59632+((g|h|i|j|d)+(m>>>d)<<2)>>2]|0}if(!d){i=a;h=f}else q=65}if((q|0)==65){g=d;while(1){m=(c[g+4>>2]&-8)-k|0;d=m>>>0<f>>>0;f=d?m:f;a=d?g:a;d=c[g+16>>2]|0;if(!d)d=c[g+20>>2]|0;if(!d){i=a;h=f;break}else g=d}}if(((i|0)!=0?h>>>0<((c[14834]|0)-k|0)>>>0:0)?(l=i+k|0,l>>>0>i>>>0):0){g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){f=b+20|0;d=c[f>>2]|0;if(!d){f=b+16|0;d=c[f>>2]|0;if(!d)break;else{b=d;a=f}}else{b=d;a=f}}c[a>>2]=0}else{v=c[i+8>>2]|0;c[v+12>>2]=b;c[b+8>>2]=v}while(0);do if(g){a=c[i+28>>2]|0;d=59632+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=e&~(1<<a);c[14833]=e;break}}else{v=g+16|0;c[((c[v>>2]|0)==(i|0)?v:g+20|0)>>2]=b;if(!b)break}c[b+24>>2]=g;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);b:do if(h>>>0<16){v=h+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[l+4>>2]=h|1;c[l+h>>2]=h;b=h>>>3;if(h>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=l;c[b+12>>2]=l;c[l+8>>2]=b;c[l+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)d=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;d=(v+245760|0)>>>16&2;d=14-(t|u|d)+(v<<d>>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;b=59632+(d<<2)|0;c[l+28>>2]=d;a=l+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<d;if(!(e&a)){c[14833]=e|a;c[b>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(h|0)){e=h<<((d|0)==31?0:25-(d>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(h|0)){b=a;break c}else{e=e<<1;b=a}}c[d>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break b}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=l;c[u>>2]=l;c[l+8>>2]=v;c[l+12>>2]=b;c[l+24>>2]=0}while(0);v=i+8|0;Ra=w;return v|0}else m=k}else m=k}else m=-1;while(0);d=c[14834]|0;if(d>>>0>=m>>>0){b=d-m|0;a=c[14837]|0;if(b>>>0>15){v=a+m|0;c[14837]=v;c[14834]=b;c[v+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=m|3}else{c[14834]=0;c[14837]=0;c[a+4>>2]=d|3;v=a+d+4|0;c[v>>2]=c[v>>2]|1}v=a+8|0;Ra=w;return v|0}h=c[14835]|0;if(h>>>0>m>>>0){t=h-m|0;c[14835]=t;v=c[14838]|0;u=v+m|0;c[14838]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;Ra=w;return v|0}if(!(c[14950]|0)){c[14952]=4096;c[14951]=4096;c[14953]=-1;c[14954]=-1;c[14955]=0;c[14943]=0;c[14950]=n&-16^1431655768;a=4096}else a=c[14952]|0;i=m+48|0;j=m+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=m>>>0){v=0;Ra=w;return v|0}a=c[14942]|0;if(a|0?(l=c[14940]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){v=0;Ra=w;return v|0}d:do if(!(c[14943]&4)){d=c[14838]|0;e:do if(d){e=59776;while(1){n=c[e>>2]|0;if(n>>>0<=d>>>0?(n+(c[e+4>>2]|0)|0)>>>0>d>>>0:0)break;a=c[e+8>>2]|0;if(!a){q=128;break e}else e=a}b=g-h&f;if(b>>>0<2147483647){a=hw(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[e+4>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;q=145;break d}}else{e=a;q=136}}else b=0}else q=128;while(0);do if((q|0)==128){d=hw(0)|0;if((d|0)!=(-1|0)?(b=d,o=c[14951]|0,p=o+-1|0,b=((p&b|0)==0?0:(p+b&0-o)-b|0)+k|0,o=c[14940]|0,p=b+o|0,b>>>0>m>>>0&b>>>0<2147483647):0){n=c[14942]|0;if(n|0?p>>>0<=o>>>0|p>>>0>n>>>0:0){b=0;break}a=hw(b|0)|0;if((a|0)==(d|0)){h=b;g=d;q=145;break d}else{e=a;q=136}}else b=0}while(0);do if((q|0)==136){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;q=145;break d}a=c[14952]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;q=145;break d}if((hw(a|0)|0)==(-1|0)){hw(d|0)|0;b=0;break}else{h=a+b|0;g=e;q=145;break d}}while(0);c[14943]=c[14943]|4;q=143}else{b=0;q=143}while(0);if(((q|0)==143?k>>>0<2147483647:0)?(t=hw(k|0)|0,p=hw(0)|0,r=p-t|0,s=r>>>0>(m+40|0)>>>0,!((t|0)==(-1|0)|s^1|t>>>0<p>>>0&((t|0)!=(-1|0)&(p|0)!=(-1|0))^1)):0){h=s?r:b;g=t;q=145}if((q|0)==145){b=(c[14940]|0)+h|0;c[14940]=b;if(b>>>0>(c[14941]|0)>>>0)c[14941]=b;j=c[14838]|0;f:do if(j){b=59776;while(1){a=c[b>>2]|0;d=c[b+4>>2]|0;if((g|0)==(a+d|0)){q=154;break}e=c[b+8>>2]|0;if(!e)break;else b=e}if(((q|0)==154?(u=b+4|0,(c[b+12>>2]&8|0)==0):0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[u>>2]=d+h;v=(c[14835]|0)+h|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;u=j+t|0;t=v-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[j+v+4>>2]=40;c[14839]=c[14954];break}if(g>>>0<(c[14836]|0)>>>0)c[14836]=g;d=g+h|0;b=59776;while(1){if((c[b>>2]|0)==(d|0)){q=162;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((q|0)==162?(c[b+12>>2]&8|0)==0:0){c[b>>2]=g;l=b+4|0;c[l>>2]=(c[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;k=l+m|0;i=b-l-m|0;c[l+4>>2]=m|3;g:do if((j|0)==(b|0)){v=(c[14835]|0)+i|0;c[14835]=v;c[14838]=k;c[k+4>>2]=v|1}else{if((c[14837]|0)==(b|0)){v=(c[14834]|0)+i|0;c[14834]=v;c[14837]=k;c[k+4>>2]=v|1;c[k+v>>2]=v;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;h:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14832]=c[14832]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){d=b+16|0;e=d+4|0;a=c[e>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}}else d=e;while(1){f=a+20|0;e=c[f>>2]|0;if(!e){f=a+16|0;e=c[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}c[d>>2]=0}else{v=c[b+8>>2]|0;c[v+12>>2]=a;c[a+8>>2]=v}while(0);if(!g)break;d=c[b+28>>2]|0;e=59632+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){v=g+16|0;c[((c[v>>2]|0)==(b|0)?v:g+20|0)>>2]=a;if(!a)break h}else{c[e>>2]=a;if(a|0)break;c[14833]=c[14833]&~(1<<d);break h}while(0);c[a+24>>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=59632+(e<<2)|0;c[k+28>>2]=e;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14833]|0;d=1<<e;if(!(a&d)){c[14833]=a|d;c[b>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break}b=c[b>>2]|0;i:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break i}else{e=e<<1;b=a}}c[d>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break g}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=k;c[u>>2]=k;c[k+8>>2]=v;c[k+12>>2]=b;c[k+24>>2]=0}while(0);v=l+8|0;Ra=w;return v|0}b=59776;while(1){a=c[b>>2]|0;if(a>>>0<=j>>>0?(v=a+(c[b+4>>2]|0)|0,v>>>0>j>>>0):0)break;b=c[b+8>>2]|0}f=v+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0<f>>>0?j:a;b=a+8|0;d=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=d-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[g+d+4>>2]=40;c[14839]=c[14954];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14944];c[b+4>>2]=c[14945];c[b+8>>2]=c[14946];c[b+12>>2]=c[14947];c[14944]=g;c[14945]=h;c[14947]=0;c[14946]=b;b=a+24|0;do{u=b;b=b+4|0;c[b>>2]=7}while((u+8|0)>>>0<v>>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=59632+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[f>>2]=0;b=c[14833]|0;a=1<<e;if(!(b&a)){c[14833]=b|a;c[d>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}b=c[d>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(g|0)){b=a;break j}else{e=e<<1;b=a}}c[d>>2]=j;c[j+24>>2]=b;c[j+12>>2]=j;c[j+8>>2]=j;break f}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=j;c[u>>2]=j;c[j+8>>2]=v;c[j+12>>2]=b;c[j+24>>2]=0}}else{v=c[14836]|0;if((v|0)==0|g>>>0<v>>>0)c[14836]=g;c[14944]=g;c[14945]=h;c[14947]=0;c[14841]=c[14950];c[14840]=-1;c[14845]=59368;c[14844]=59368;c[14847]=59376;c[14846]=59376;c[14849]=59384;c[14848]=59384;c[14851]=59392;c[14850]=59392;c[14853]=59400;c[14852]=59400;c[14855]=59408;c[14854]=59408;c[14857]=59416;c[14856]=59416;c[14859]=59424;c[14858]=59424;c[14861]=59432;c[14860]=59432;c[14863]=59440;c[14862]=59440;c[14865]=59448;c[14864]=59448;c[14867]=59456;c[14866]=59456;c[14869]=59464;c[14868]=59464;c[14871]=59472;c[14870]=59472;c[14873]=59480;c[14872]=59480;c[14875]=59488;c[14874]=59488;c[14877]=59496;c[14876]=59496;c[14879]=59504;c[14878]=59504;c[14881]=59512;c[14880]=59512;c[14883]=59520;c[14882]=59520;c[14885]=59528;c[14884]=59528;c[14887]=59536;c[14886]=59536;c[14889]=59544;c[14888]=59544;c[14891]=59552;c[14890]=59552;c[14893]=59560;c[14892]=59560;c[14895]=59568;c[14894]=59568;c[14897]=59576;c[14896]=59576;c[14899]=59584;c[14898]=59584;c[14901]=59592;c[14900]=59592;c[14903]=59600;c[14902]=59600;c[14905]=59608;c[14904]=59608;c[14907]=59616;c[14906]=59616;v=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=v-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[g+v+4>>2]=40;c[14839]=c[14954]}while(0);b=c[14835]|0;if(b>>>0>m>>>0){t=b-m|0;c[14835]=t;v=c[14838]|0;u=v+m|0;c[14838]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;Ra=w;return v|0}}v=uu()|0;c[v>>2]=12;v=0;Ra=w;return v|0}function mu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[14836]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0<f>>>0)return;if((c[14837]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14834]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[14832]=c[14832]&~(1<<d);i=h;b=g;break}else{c[a+12>>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){b=h+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){a=0;break}}else b=d;while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=59632+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14833]=c[14833]&~(1<<b);i=h;b=g;break}}else{i=f+16|0;c[((c[i>>2]|0)==(h|0)?i:f+20|0)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[14838]|0)==(j|0)){j=(c[14835]|0)+b|0;c[14835]=j;c[14838]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14837]|0))return;c[14837]=0;c[14834]=0;return}if((c[14837]|0)==(j|0)){j=(c[14834]|0)+b|0;c[14834]=j;c[14837]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[14832]=c[14832]&~(1<<d);break}else{c[b+12>>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){b=j+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){d=0;break}}else b=d;while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0;d=a}else{d=c[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=59632+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14833]=c[14833]&~(1<<a);break}}else{e=g+16|0;c[((c[e>>2]|0)==(j|0)?e:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[14837]|0)){c[14834]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=59368+(a<<1<<2)|0;b=c[14832]|0;a=1<<a;if(!(b&a)){c[14832]=b|a;a=d;b=d+8|0}else{b=d+8|0;a=c[b>>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)e=31;else{h=(a+1048320|0)>>>16&8;j=a<<h;g=(j+520192|0)>>>16&4;j=j<<g;e=(j+245760|0)>>>16&2;e=14-(g|h|e)+(j<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;a=59632+(e<<2)|0;c[i+28>>2]=e;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14833]|0;d=1<<e;a:do if(!(b&d)){c[14833]=b|d;c[a>>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i}else{a=c[a>>2]|0;b:do if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){a=b;break b}else{e=e<<1;a=b}}c[d>>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i;break a}while(0);h=a+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=a;c[i+24>>2]=0}while(0);j=(c[14840]|0)+-1|0;c[14840]=j;if(j|0)return;a=59784;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14840]=-1;return}function nu(a,b){a=a|0;b=b|0;var d=0;if(a){d=G(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=lu(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;gw(a|0,0,d|0)|0;return a|0}function ou(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=lu(b)|0;return b|0}if(b>>>0>4294967231){b=uu()|0;c[b>>2]=12;b=0;return b|0}d=pu(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=lu(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;ew(d|0,a|0,(e>>>0<b>>>0?e:b)|0)|0;mu(a);b=d;return b|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[14952]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;qu(k,d);return a|0}if((c[14838]|0)==(i|0)){k=(c[14835]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[14838]=e;c[14835]=d;return a|0}if((c[14837]|0)==(i|0)){e=(c[14834]|0)+d|0;if(e>>>0<b>>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[14834]=d;c[14837]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0<b>>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[14832]=c[14832]&~(1<<f);break}else{c[e+12>>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){e=i+16|0;f=e+4|0;d=c[f>>2]|0;if(!d){d=c[e>>2]|0;if(!d){f=0;break}}else e=f;while(1){g=d+20|0;f=c[g>>2]|0;if(!f){g=d+16|0;f=c[g>>2]|0;if(!f)break;else{d=f;e=g}}else{d=f;e=g}}c[e>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=59632+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14833]=c[14833]&~(1<<d);break}}else{g=h+16|0;c[((c[g>>2]|0)==(i|0)?g:h+20|0)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=m&1|j|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;qu(i,k);return a|0}return 0}function qu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[14837]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14834]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[14832]=c[14832]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;e=d+4|0;a=c[e>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}}else d=e;while(1){f=a+20|0;e=c[f>>2]|0;if(!e){f=a+16|0;e=c[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}c[d>>2]=0}else{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=59632+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14833]=c[14833]&~(1<<d);break}}else{f=g+16|0;c[((c[f>>2]|0)==(h|0)?f:g+20|0)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[14838]|0)==(i|0)){i=(c[14835]|0)+b|0;c[14835]=i;c[14838]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14837]|0))return;c[14837]=0;c[14834]=0;return}if((c[14837]|0)==(i|0)){i=(c[14834]|0)+b|0;c[14834]=i;c[14837]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[14832]=c[14832]&~(1<<d);break}else{c[a+12>>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+16|0;d=a+4|0;b=c[d>>2]|0;if(!b){b=c[a>>2]|0;if(!b){d=0;break}}else a=d;while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=59632+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14833]=c[14833]&~(1<<b);break}}else{e=g+16|0;c[((c[e>>2]|0)==(i|0)?e:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[14837]|0)){c[14834]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)e=31;else{g=(b+1048320|0)>>>16&8;i=b<<g;d=(i+520192|0)>>>16&4;i=i<<d;e=(i+245760|0)>>>16&2;e=14-(d|g|e)+(i<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;b=59632+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14833]|0;d=1<<e;if(!(a&d)){c[14833]=a|d;c[b>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;return}b=c[b>>2]|0;a:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break a}else{e=e<<1;b=a}}c[d>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;return}while(0);g=b+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=b;c[h+24>>2]=0;return}function ru(a,b){a=a|0;b=b|0;if(a>>>0<9){b=lu(b)|0;return b|0}else{b=su(a,b)|0;return b|0}return 0}function su(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a>>>0>16?a:16;if(!(d+-1&d))a=d;else{a=16;while(1)if(a>>>0<d>>>0)a=a<<1;else break}if((-64-a|0)>>>0<=b>>>0){h=uu()|0;c[h>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=lu(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;qu(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;qu(f,i)}i=b+8|0;return i|0}function tu(a){a=a|0;var b=0;if(a>>>0>4294963200){b=uu()|0;c[b>>2]=0-a;a=-1}return a|0}function uu(){return 59888}function vu(a){a=a|0;return a|0}function wu(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function xu(){return 30868}function yu(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function zu(a){a=a|0;var b=0;b=(Au(a)|0)==0;return (b?a:a&95)|0}function Au(a){a=a|0;return (a+-97|0)>>>0<26|0}function Bu(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)b=e;else{do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));b=e}return (d&255)-(b&255)|0}function Cu(a){a=a|0;return (a+-65|0)>>>0<26|0}function Du(a){a=a|0;var b=0;b=(Cu(a)|0)==0;return (b?a:a|32)|0}function Eu(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=5;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=5;break}}}while(0);if((e|0)==5){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function Fu(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Gu(c[b>>2]|0,c[b+4>>2]|0,a)|0;return ((b|0)==0?a:b)|0}function Gu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=Hu(c[b+8>>2]|0,o)|0;f=Hu(c[b+12>>2]|0,o)|0;g=Hu(c[b+16>>2]|0,o)|0;a:do if((h>>>0<d>>>2>>>0?(n=d-(h<<2)|0,f>>>0<n>>>0&g>>>0<n>>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=Hu(c[b+(g<<2)>>2]|0,o)|0;g=Hu(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0<d>>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=Bu(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}l=f?l:k;h=f?j:h-j|0}f=i+m|0;g=Hu(c[b+(f<<2)>>2]|0,o)|0;f=Hu(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0<d>>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function Hu(a,b){a=a|0;b=b|0;var c=0;c=dw(a|0)|0;return ((b|0)==0?a:c)|0}function Iu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+192|0;i=r+168|0;h=r+152|0;q=r+136|0;p=r+120|0;o=r+112|0;l=r+96|0;k=r+80|0;f=r+64|0;m=r+48|0;g=r+32|0;e=r+16|0;s=r;j=r+184|0;c[s>>2]=d;d=(c[s>>2]|0)+(4-1)&~(4-1);n=c[d>>2]|0;c[s>>2]=d+4;n=(b|0)==4?n|32768:n;a:do switch(b|0){case 14:{c[e>>2]=a;c[e+4>>2]=14;c[e+8>>2]=n;d=tu(oa(221,e|0)|0)|0;break}case 9:{c[g>>2]=a;c[g+4>>2]=16;c[g+8>>2]=j;d=oa(221,g|0)|0;switch(d|0){case -22:{c[m>>2]=a;c[m+4>>2]=9;c[m+8>>2]=n;d=oa(221,m|0)|0;break}case 0:{d=c[j+4>>2]|0;d=(c[j>>2]|0)==2?0-d|0:d;break}default:d=tu(d)|0}break}case 1030:{c[f>>2]=a;c[f+4>>2]=1030;c[f+8>>2]=n;d=oa(221,f|0)|0;if((d|0)!=-22){if((d|0)>-1){c[k>>2]=d;c[k+4>>2]=2;c[k+8>>2]=1;oa(221,k|0)|0}d=tu(d)|0;break a}c[l>>2]=a;c[l+4>>2]=1030;c[l+8>>2]=0;d=oa(221,l|0)|0;if((d|0)==-22){c[p>>2]=a;c[p+4>>2]=0;c[p+8>>2]=n;d=oa(221,p|0)|0;if((d|0)>-1){c[q>>2]=d;c[q+4>>2]=2;c[q+8>>2]=1;oa(221,q|0)|0}d=tu(d)|0;break a}else{if((d|0)>-1){c[o>>2]=d;va(6,o|0)|0}d=tu(-22)|0;break a}}case 15:case 16:case 12:case 13:{c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=n;d=tu(oa(221,h|0)|0)|0;break}default:{c[i>>2]=a;c[i+4>>2]=b;c[i+8>>2]=n;d=tu(oa(221,i|0)|0)|0}}while(0);Ra=r;return d|0}function Ju(){var a=0,b=0;b=Ra;Ra=Ra+16|0;a=ja(20,b|0)|0;Ra=b;return a|0}function Ku(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(Eu(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=G(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function Lu(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function Mu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+48|0;g=h+32|0;f=h+16|0;e=h;if(!(b&4194368))e=0;else{c[e>>2]=d;i=(c[e>>2]|0)+(4-1)&~(4-1);d=c[i>>2]|0;c[e>>2]=i+4;e=d}c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=e;e=ua(5,f|0)|0;if(!((b&524288|0)==0|(e|0)<0)){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;oa(221,g|0)|0}i=tu(e)|0;Ra=h;return i|0}function Nu(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;a=vu(a)|0;c[d>>2]=a;a=va(6,d|0)|0;a=tu((a|0)==-4?0:a)|0;Ra=b;return a|0}function Ou(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ha(196,e|0)|0)|0;Ra=d;return b|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ga(195,e|0)|0)|0;Ra=d;return b|0}function Qu(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(qa(33,e|0)|0)|0;Ra=d;return b|0}function Ru(a,b){a=a|0;b=b|0;return Uu(a,b,(Eu(a)|0)+1|0)|0}function Su(a,b){a=a|0;b=b|0;Tu(a,b)|0;return a|0}function Tu(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=10}else f=10;while(0);if((f|0)==10){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function Uu(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(!d)d=0;else{c=c&255;while(1){d=d+-1|0;if((a[b+d>>0]|0)==c<<24>>24)break;if(!d){d=0;break a}}d=b+d|0}while(0);return d|0}function Vu(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=58986;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;do{f=c;c=(c>>>0)/10|0;d=d+-1|0;a[b+d>>0]=f-(c*10|0)|48}while(f>>>0>=10)}return}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(wa(85,f|0)|0)|0;Ra=e;return d|0}function Xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+48|0;f=g+40|0;e=g;d=g+32|0;c[d>>2]=a;c[d+4>>2]=b;d=ia(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(oa(221,e|0)|0)>=0):0){Vu(e,a);c[f>>2]=e;c[f+4>>2]=b;b=tu(ga(195,f|0)|0)|0}else b=tu(d)|0;Ra=g;return b|0}function Yu(a){a=a|0;var b=0,c=0;b=(Eu(a)|0)+1|0;c=lu(b)|0;if(!c)a=0;else a=ew(c|0,a|0,b|0)|0;return a|0}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+4112|0;e=g+4096|0;d=g;if(a)if(!b){a=uu()|0;c[a>>2]=22;a=0}else f=4;else{b=4096;a=d;f=4}if((f|0)==4){c[e>>2]=a;c[e+4>>2]=b;if((tu(da(183,e|0)|0)|0)>=0){if((a|0)==(d|0))a=Yu(d)|0}else a=0}Ra=g;return a|0}function _u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(sa(4,f|0)|0)|0;Ra=e;return d|0}function $u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(pa(3,f|0)|0)|0;Ra=e;return d|0}function av(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function bv(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[27392+f>>0]|0)==(b|0)){g=4;break}f=f+1|0;if((f|0)==87){b=87;g=5;break}}if((g|0)==4)if(!f)f=27488;else{b=f;g=5}if((g|0)==5){f=27488;do{do{g=f;f=f+1|0}while((a[g>>0]|0)!=0);b=b+-1|0}while((b|0)!=0)}return cv(f,c[e+20>>2]|0)|0}function cv(a,b){a=a|0;b=b|0;return Fu(a,b)|0}function dv(a){a=a|0;var b=0;b=(ev()|0)+188|0;return bv(a,c[b>>2]|0)|0}function ev(){return xu()|0}function fv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ra(39,e|0)|0)|0;Ra=d;return b|0}function gv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(xa(91,e|0)|0)|0;Ra=d;return b|0}function hv(){return}function iv(a){a=+a;var b=0;g[h>>3]=a;b=c[h+4>>2]&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=b;a=+g[h>>3];do if(b>>>0<1072049730)if(b>>>0<1045430272)a=1.0;else{a=+kv(a);a=a*a/((a+1.0)*2.0)+1.0}else if(b>>>0<1082535490){a=+D(+a);a=(a+1.0/a)*.5;break}else{a=+lv(a);break}while(0);return +a}function jv(a){a=+a;var b=0.0,d=0,e=0.0;g[h>>3]=a;d=c[h+4>>2]|0;e=(d|0)<0?-.5:.5;d=d&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=d;b=+g[h>>3];do if(d>>>0<1082535490){b=+kv(b);if(d>>>0>=1072693248){a=e*(b+b/(b+1.0));break}if(d>>>0>=1045430272)a=e*(b*2.0-b*b/(b+1.0))}else a=e*2.0*+lv(b);while(0);return +a}function kv(a){a=+a;var b=0,d=0,e=0.0,f=0.0,i=0.0,j=0,k=0,l=0.0;g[h>>3]=a;d=c[h+4>>2]|0;b=d&2147483647;d=bw(c[h>>2]|0,d|0,63)|0;L()|0;do if(b>>>0>1078159481){j=mv(a)|0;b=(L()|0)&2147483647;if(!(b>>>0>2146435072|(b|0)==2146435072&j>>>0>0))if(!d)if(a>709.782712893384)a=a*8988465674311579538646525.0e283;else k=11;else a=-1.0}else{if(b>>>0<=1071001154)if(b>>>0<1016070144)break;else{i=0.0;j=0;k=14;break}if(b>>>0<1072734898)if(!d){b=1;e=a+-.6931471803691238;f=1.9082149292705877e-10;k=12;break}else{b=-1;e=a+.6931471803691238;f=-1.9082149292705877e-10;k=12;break}else k=11}while(0);if((k|0)==11){b=~~(a*1.4426950408889634+((d|0)==0?.5:-.5));f=+(b|0);e=a-f*.6931471803691238;f=f*1.9082149292705877e-10;k=12}if((k|0)==12){i=e-f;a=i;i=e-i-f;j=b;k=14}a:do if((k|0)==14){f=a*.5;e=a*f;l=e*(e*(e*(e*(4.008217827329362e-06-e*2.0109921818362437e-07)+-7.93650757867488e-05)+1.5873015872548146e-03)+-.03333333333333313)+1.0;f=3.0-f*l;f=e*((l-f)/(6.0-a*f));if(!j){a=a-(a*f-e);break}f=a*(f-i)-i-e;switch(j|0){case -1:{a=(a-f)*.5+-.5;break a}case 1:if(a<-.25){a=(f-(a+.5))*-2.0;break a}else{a=(a-f)*2.0+1.0;break a}default:{d=cw(j+1023|0,0,52)|0;k=L()|0;c[h>>2]=d;c[h+4>>2]=k;i=+g[h>>3];if(j>>>0>56){a=a-f+1.0;a=((j|0)==1024?a*2.0*8988465674311579538646525.0e283:a*i)+-1.0;break a}b=cw(1023-j|0,0,52)|0;d=L()|0;if((j|0)<20){c[h>>2]=b;c[h+4>>2]=d;e=1.0-+g[h>>3];a=a-f}else{c[h>>2]=b;c[h+4>>2]=d;e=a-(f+ +g[h>>3]);a=1.0}a=(e+a)*i;break a}}}while(0);return +a}function lv(a){a=+a;return +(+D(+(a+-1416.0996898839683))*2247116418577894884661631.0e283*2247116418577894884661631.0e283)}function mv(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;K(c[h+4>>2]|0);return b|0}function nv(a,b,c){a=a|0;b=b|0;c=c|0;ov(a,b,c)|0;return a|0}function ov(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=13}}else e=0}else h=13;while(0);c:do if((h|0)==13)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);gw(b|0,0,e|0)|0;return b|0}function pv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+208|0;j=m;k=m+192|0;h=G(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0<h>>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)qv(a,d,e,f,j);else sv(a,d,e,k,f,0,j);if((f|0)==1){tv(k,1);f=0;break}else{tv(k,b);f=1;break}}else{qv(a,d,e,f,j);rv(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0<g>>>0)}else{f=1;b=1}sv(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1)if(!(c[g>>2]|0))break a;else l=19;else if((f|0)<2)l=19;else{tv(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;rv(k,1);sv(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);tv(k,1);b=c[k>>2]|1;c[k>>2]=b;a=a+i|0;sv(a,d,e,k,n,1,j);f=n}if((l|0)==19){l=0;b=uv(k)|0;rv(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}}while(0);Ra=m;return}function qv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+240|0;l=m;c[l>>2]=a;a:do if((e|0)>1){k=0-b|0;i=a;g=e;e=1;h=a;while(1){i=i+k|0;j=g+-2|0;a=i+(0-(c[f+(j<<2)>>2]|0))|0;if((Xa[d&255](h,a)|0)>-1?(Xa[d&255](h,i)|0)>-1:0)break a;h=l+(e<<2)|0;if((Xa[d&255](a,i)|0)>-1){c[h>>2]=a;g=g+-1|0}else{c[h>>2]=i;a=i;g=j}e=e+1|0;if((g|0)<=1)break a;i=a;h=c[l>>2]|0}}else e=1;while(0);wv(b,l,e);Ra=m;return}function rv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function sv(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+240|0;m=o+232|0;n=o;p=c[e>>2]|0;c[m>>2]=p;j=c[e+4>>2]|0;k=m+4|0;c[k>>2]=j;c[n>>2]=a;a:do if((p|0)!=1|(j|0)!=0?(l=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Xa[d&255](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+l|0;i=c[h+(f+-2<<2)>>2]|0;if((Xa[d&255](g,j)|0)>-1){i=10;break a}if((Xa[d&255](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[n+(e<<2)>>2]=j;p=uv(m)|0;rv(m,p);f=p+f|0;if(!((c[m>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((Xa[d&255](a,c[n>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{p=j;e=g;g=1;j=a;a=p}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){wv(b,n,e);qv(a,b,d,f,h)}Ra=o;return}function tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<<b;c[a>>2]=d<<b;return}function uv(a){a=a|0;var b=0;b=vv((c[a>>2]|0)+-1|0)|0;if(!b){b=vv(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function vv(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;while(1){a=a+1|0;if(!(b&2))b=b>>>1;else break}}else a=0;else a=32;return a|0}function wv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;ew(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;ew(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);Ra=h;return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=Ra;Ra=Ra+32|0;g=f;e=f+20|0;c[g>>2]=a;c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;d=(tu(ba(140,g|0)|0)|0)==0;Ra=f;return (d?c[e>>2]|0:-1)|0}function yv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=0;c[e+8>>2]=b;c[e+12>>2]=b>>31;b=tu(fa(194,e|0)|0)|0;Ra=d;return b|0}function zv(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu(aa(118,d|0)|0)|0;Ra=b;return a|0}function Av(a){a=a|0;var b=0,d=0;d=Ra;Ra=Ra+16|0;b=d;c[b>>2]=a;c[b+4>>2]=0;a=(Ja(b|0,b|0)|0)==0;Ra=d;return (a?0:c[b>>2]|0)|0}function Bv(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu($(10,d|0)|0)|0;Ra=b;return a|0}function Cv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+64|0;g=h+48|0;f=h;e=h+32|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;e=ma(207,e|0)|0;if((e|0)==-9?(c[f>>2]=a,c[f+4>>2]=1,(oa(221,f|0)|0)>=0):0){Vu(f,a);c[g>>2]=f;c[g+4>>2]=b;c[g+8>>2]=d;a=tu(na(212,g|0)|0)|0}else a=tu(e)|0;Ra=h;return a|0}function Dv(){var a=0,b=0;b=Ra;Ra=Ra+16|0;a=ka(201,b|0)|0;Ra=b;return a|0}function Ev(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu(ta(40,d|0)|0)|0;Ra=b;return a|0}function Fv(a){a=+a;var b=0,d=0,e=0,f=0,i=0.0;g[h>>3]=a;f=c[h>>2]|0;d=c[h+4>>2]|0;b=bw(f|0,d|0,52)|0;L()|0;b=b&2047;c[h>>2]=f;c[h+4>>2]=d&2147483647;a=+g[h>>3];if(b>>>0<1022){if(b>>>0>=991){i=a*2.0;a=i+i*a/(1.0-a);e=5}}else{a=a/(1.0-a)*2.0;e=5}if((e|0)==5)a=+Gv(a)*.5;return +((d|0)<0?-a:a)}function Gv(a){a=+a;var b=0.0,d=0,e=0.0,f=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0;g[h>>3]=a;d=c[h+4>>2]|0;do if((d|0)<0|d>>>0<1071284858)if(d>>>0<=3220176895){i=cw(d|0,0,1)|0;L()|0;if(i>>>0<2034237440)break;if(d>>>0<3218259653){e=0.0;b=0.0;f=11;break}else{f=8;break}}else{if(a==-1.0){a=-r;break}a=(a-a)/0.0;break}else if(d>>>0<=2146435071)f=8;while(0);if((f|0)==8){b=a+1.0;g[h>>3]=b;d=(c[h+4>>2]|0)+614242|0;if(d>>>0<1129316352)b=(d>>>0>1074790399?1.0-(b-a):a-(b+-1.0))/b;else b=0.0;c[h>>2]=c[h>>2];c[h+4>>2]=(d&1048575)+1072079006;e=+((d>>>20)+-1023|0);a=+g[h>>3]+-1.0;f=11}if((f|0)==11){j=a*(a*.5);m=a/(a+2.0);l=m*m;k=l*l;a=e*.6931471803691238+(a+(b+e*1.9082149292705877e-10+m*(j+(k*(k*(k*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(k*(k*(k*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))-j))}return +a}function Hv(a){a=+a;var b=0;g[h>>3]=a;b=bw(c[h>>2]|0,c[h+4>>2]|0,52)|0;L()|0;b=b&2047;do if(b>>>0>=1024)if(b>>>0<1049){a=+E(+(a*2.0-1.0/(+u(+(a*a+-1.0))+a)));break}else{a=+E(+a)+.6931471805599453;break}else{a=a+-1.0;a=+Gv(a+ +u(+(a*a+a*2.0)))}while(0);return +a}function Iv(a){a=+a;var b=0,d=0;g[h>>3]=a;d=c[h+4>>2]|0;b=d&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=b;a=+g[h>>3];do if(b>>>0>1071748074)if(b>>>0>1077149696){a=1.0-0.0/a;break}else{a=1.0-2.0/(+kv(a*2.0)+2.0);break}else{if(b>>>0>1070618798){a=+kv(a*2.0);a=a/(a+2.0);break}if(b>>>0>1048575){a=+kv(a*-2.0);a=-a/(a+2.0)}}while(0);return +((d|0)<0?-a:a)}function Jv(a){a=+a;var b=0,d=0,e=0,f=0.0;g[h>>3]=a;e=c[h>>2]|0;d=c[h+4>>2]|0;b=bw(e|0,d|0,52)|0;L()|0;b=b&2047;c[h>>2]=e;c[h+4>>2]=d&2147483647;a=+g[h>>3];do if(b>>>0<=1048){if(b>>>0>1023){a=+E(+(a*2.0+1.0/(+u(+(a*a+1.0))+a)));break}if(b>>>0>996){f=a*a;a=+Gv(f/(+u(+(f+1.0))+1.0)+a)}}else a=+E(+a)+.6931471805599453;while(0);return +((d|0)<0?-a:a)}function Kv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+48|0;f=g+40|0;e=g;d=g+32|0;c[d>>2]=a;c[d+4>>2]=b;d=ya(94,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(oa(221,e|0)|0)>=0):0){Vu(e,a);c[f>>2]=e;c[f+4>>2]=b;a=tu(ca(15,f|0)|0)|0}else a=tu(d)|0;Ra=g;return a|0}function Lv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=Ra;Ra=Ra+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){a=uu()|0;c[a>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=tu(ea(192,h|0)|0)|0}else{a=uu()|0;c[a>>2]=22;a=-1}while(0);Ra=i;return a|0}function Mv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=Ra;Ra=Ra+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){gw(f|0,0,32)|0;e=a[d>>0]|0;if(e<<24>>24)do{j=e&255;i=f+(j>>>5<<2)|0;c[i>>2]=c[i>>2]|1<<(j&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;if(!(d<<24>>24))e=b;else{e=b;do{j=d&255;if(c[f+(j>>>5<<2)>>2]&1<<(j&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=Ku(b,e<<24>>24)|0;Ra=h;return e-b|0}function Nv(){Z(59908);return}function Ov(){return 59892}function Pv(){return 59900}function Qv(){return 59904}function Rv(){return 59908}function Sv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (K(b+d+(c>>>0<a>>>0|0)>>>0|0),c|0)|0}function Tv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (K(d|0),a-c>>>0|0)|0}function Uv(a){a=a|0;return (a?31-(I(a^a-1)|0)|0:32)|0}function Vv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (K(n|0),f)|0}else{if(!g){n=0;f=0;return (K(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (K(n|0),f)|0}}g=(i|0)==0;do if(h){if(!g){g=(I(i|0)|0)-(I(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return (K(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (K(n|0),f)|0}g=h-1|0;if(g&h|0){i=(I(h|0)|0)+33-(I(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (K(o|0),p)|0}else{p=Uv(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (K(o|0),p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (K(o|0),p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (K(o|0),p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((Uv(i|0)|0)>>>0);return (K(o|0),p)|0}g=(I(i|0)|0)-(I(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return (K(o|0),p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (K(o|0),p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Sv(m|0,l|0,-1,-1)|0;d=L()|0;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;Tv(k|0,d|0,e|0,n|0)|0;p=L()|0;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Tv(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=L()|0;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (K(o|0),p)|0}function Wv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=Tv(j^a|0,i^b|0,j|0,i|0)|0;g=L()|0;a=f^j;b=e^i;return Tv((Vv(h,g,Tv(f^c|0,e^d|0,f|0,e|0)|0,L()|0,0)|0)^a|0,(L()|0)^b|0,a|0,b|0)|0}function Xv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=G(e,f)|0;d=a>>>16;a=(c>>>16)+(G(e,d)|0)|0;e=b>>>16;b=G(e,f)|0;return (K((a>>>16)+(G(e,d)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|c&65535|0)|0}function Yv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Xv(e,f)|0;a=L()|0;return (K((G(b,f)|0)+(G(d,e)|0)+a|a&0|0),c|0|0)|0}function Zv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=Ra;Ra=Ra+16|0;i=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;j=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=Tv(h^a|0,g^b|0,h|0,g|0)|0;b=L()|0;Vv(a,b,Tv(k^d|0,j^e|0,k|0,j|0)|0,L()|0,i)|0;e=Tv(c[i>>2]^h|0,c[i+4>>2]^g|0,h|0,g|0)|0;d=L()|0;Ra=f;return (K(d|0),e)|0}function _v(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Vv(a,b,c,d,0)|0}function $v(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=Ra;Ra=Ra+16|0;f=g|0;Vv(a,b,d,e,f)|0;Ra=g;return (K(c[f+4>>2]|0),c[f>>2]|0)|0}function aw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}K(((b|0)<0?-1:0)|0);return b>>c-32|0}function bw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b>>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}K(0);return b>>>c-32|0}function cw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b<<c|(a&(1<<c)-1<<32-c)>>>32-c|0);return a<<c}K(a<<c-32|0);return 0}function dw(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function ew(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){Aa(b|0,d|0,e|0)|0;return b|0}h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function fw(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else ew(b,c,d)|0;return b|0}function gw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;i=d|d<<8|d<<16|d<<24;g=f-64|0;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function hw(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){Pa(b|0)|0;_(12);return -1}if((b|0)>(za()|0)?(Ba(b|0)|0)==0:0){_(12);return -1}c[i>>2]=b;return d|0}function iw(a){a=a|0;return Va[a&127]()|0}function jw(){return M(0)|0}function kw(){return M(1)|0}function lw(){return M(2)|0}function mw(){return M(3)|0}function nw(){return M(4)|0}function ow(){return M(5)|0}function pw(){return M(6)|0}function qw(){return M(7)|0}function rw(){return M(8)|0}function sw(){return M(9)|0}function tw(){return M(10)|0}function uw(){return M(11)|0}function vw(){return M(12)|0}function ww(){return M(13)|0}function xw(){return M(14)|0}function yw(){return M(15)|0}function zw(){return M(16)|0}function Aw(){return M(17)|0}function Bw(){return M(18)|0}function Cw(){return M(19)|0}function Dw(){return M(20)|0}function Ew(){return M(21)|0}function Fw(){return M(22)|0}function Gw(){return M(23)|0}function Hw(){return M(24)|0}function Iw(){return M(25)|0}function Jw(){return M(26)|0}function Kw(){return M(27)|0}function Lw(){return M(28)|0}function Mw(){return M(29)|0}function Nw(){return M(30)|0}function Ow(){return M(31)|0}function Pw(){return M(32)|0}function Qw(){return M(33)|0}function Rw(){return M(34)|0}function Sw(){return M(35)|0}function Tw(){return M(36)|0}function Uw(){return M(37)|0}function Vw(){return M(38)|0}function Ww(){return M(39)|0}function Xw(){return M(40)|0}function Yw(){return M(41)|0}function Zw(){return M(42)|0}function _w(){return M(43)|0}function $w(){return M(44)|0}function ax(){return M(45)|0}function bx(){return M(46)|0}function cx(){return M(47)|0}function dx(){return M(48)|0}function ex(){return M(49)|0}function fx(){return M(50)|0}function gx(){return M(51)|0}function hx(){return M(52)|0}function ix(){return M(53)|0}function jx(){return M(54)|0}function kx(){return M(55)|0}function lx(){return M(56)|0}function mx(){return M(57)|0}function nx(){return M(58)|0}function ox(){return M(59)|0}function px(){return M(60)|0}function qx(){return M(61)|0}function rx(){return M(62)|0}function sx(){return M(63)|0}function tx(a,b){a=a|0;b=b|0;return Wa[a&127](b|0)|0}function ux(a){a=a|0;return N(0,a|0)|0}function vx(a){a=a|0;return N(1,a|0)|0}function wx(a){a=a|0;return N(2,a|0)|0}function xx(a){a=a|0;return N(3,a|0)|0}function yx(a){a=a|0;return N(4,a|0)|0}function zx(a){a=a|0;return N(5,a|0)|0}function Ax(a){a=a|0;return N(6,a|0)|0}function Bx(a){a=a|0;return N(7,a|0)|0}function Cx(a){a=a|0;return N(8,a|0)|0}function Dx(a){a=a|0;return N(9,a|0)|0}function Ex(a){a=a|0;return N(10,a|0)|0}function Fx(a){a=a|0;return N(11,a|0)|0}function Gx(a){a=a|0;return N(12,a|0)|0}function Hx(a){a=a|0;return N(13,a|0)|0}function Ix(a){a=a|0;return N(14,a|0)|0}function Jx(a){a=a|0;return N(15,a|0)|0}function Kx(a){a=a|0;return N(16,a|0)|0}function Lx(a){a=a|0;return N(17,a|0)|0}function Mx(a){a=a|0;return N(18,a|0)|0}function Nx(a){a=a|0;return N(19,a|0)|0}function Ox(a){a=a|0;return N(20,a|0)|0}function Px(a){a=a|0;return N(21,a|0)|0}function Qx(a){a=a|0;return N(22,a|0)|0}function Rx(a){a=a|0;return N(23,a|0)|0}function Sx(a){a=a|0;return N(24,a|0)|0}function Tx(a){a=a|0;return N(25,a|0)|0}function Ux(a){a=a|0;return N(26,a|0)|0}function Vx(a){a=a|0;return N(27,a|0)|0}function Wx(a){a=a|0;return N(28,a|0)|0}function Xx(a){a=a|0;return N(29,a|0)|0}function Yx(a){a=a|0;return N(30,a|0)|0}function Zx(a){a=a|0;return N(31,a|0)|0}function _x(a){a=a|0;return N(32,a|0)|0}function $x(a){a=a|0;return N(33,a|0)|0}function ay(a){a=a|0;return N(34,a|0)|0}function by(a){a=a|0;return N(35,a|0)|0}function cy(a){a=a|0;return N(36,a|0)|0}function dy(a){a=a|0;return N(37,a|0)|0}function ey(a){a=a|0;return N(38,a|0)|0}function fy(a){a=a|0;return N(39,a|0)|0}function gy(a){a=a|0;return N(40,a|0)|0}function hy(a){a=a|0;return N(41,a|0)|0}function iy(a){a=a|0;return N(42,a|0)|0}function jy(a){a=a|0;return N(43,a|0)|0}function ky(a){a=a|0;return N(44,a|0)|0}function ly(a){a=a|0;return N(45,a|0)|0}function my(a){a=a|0;return N(46,a|0)|0}function ny(a){a=a|0;return N(47,a|0)|0}function oy(a){a=a|0;return N(48,a|0)|0}function py(a){a=a|0;return N(49,a|0)|0}function qy(a){a=a|0;return N(50,a|0)|0}function ry(a){a=a|0;return N(51,a|0)|0}function sy(a){a=a|0;return N(52,a|0)|0}function ty(a){a=a|0;return N(53,a|0)|0}function uy(a){a=a|0;return N(54,a|0)|0}function vy(a){a=a|0;return N(55,a|0)|0}function wy(a){a=a|0;return N(56,a|0)|0}function xy(a){a=a|0;return N(57,a|0)|0}function yy(a){a=a|0;return N(58,a|0)|0}function zy(a){a=a|0;return N(59,a|0)|0}function Ay(a){a=a|0;return N(60,a|0)|0}function By(a){a=a|0;return N(61,a|0)|0}function Cy(a){a=a|0;return N(62,a|0)|0}function Dy(a){a=a|0;return N(63,a|0)|0}function Ey(a,b,c){a=a|0;b=b|0;c=c|0;return Xa[a&255](b|0,c|0)|0}function Fy(a,b){a=a|0;b=b|0;return O(0,a|0,b|0)|0}function Gy(a,b){a=a|0;b=b|0;return O(1,a|0,b|0)|0}function Hy(a,b){a=a|0;b=b|0;return O(2,a|0,b|0)|0}function Iy(a,b){a=a|0;b=b|0;return O(3,a|0,b|0)|0}function Jy(a,b){a=a|0;b=b|0;return O(4,a|0,b|0)|0}function Ky(a,b){a=a|0;b=b|0;return O(5,a|0,b|0)|0}function Ly(a,b){a=a|0;b=b|0;return O(6,a|0,b|0)|0}function My(a,b){a=a|0;b=b|0;return O(7,a|0,b|0)|0}function Ny(a,b){a=a|0;b=b|0;return O(8,a|0,b|0)|0}function Oy(a,b){a=a|0;b=b|0;return O(9,a|0,b|0)|0}function Py(a,b){a=a|0;b=b|0;return O(10,a|0,b|0)|0}function Qy(a,b){a=a|0;b=b|0;return O(11,a|0,b|0)|0}function Ry(a,b){a=a|0;b=b|0;return O(12,a|0,b|0)|0}function Sy(a,b){a=a|0;b=b|0;return O(13,a|0,b|0)|0}function Ty(a,b){a=a|0;b=b|0;return O(14,a|0,b|0)|0}function Uy(a,b){a=a|0;b=b|0;return O(15,a|0,b|0)|0}function Vy(a,b){a=a|0;b=b|0;return O(16,a|0,b|0)|0}function Wy(a,b){a=a|0;b=b|0;return O(17,a|0,b|0)|0}function Xy(a,b){a=a|0;b=b|0;return O(18,a|0,b|0)|0}function Yy(a,b){a=a|0;b=b|0;return O(19,a|0,b|0)|0}function Zy(a,b){a=a|0;b=b|0;return O(20,a|0,b|0)|0}function _y(a,b){a=a|0;b=b|0;return O(21,a|0,b|0)|0}function $y(a,b){a=a|0;b=b|0;return O(22,a|0,b|0)|0}function az(a,b){a=a|0;b=b|0;return O(23,a|0,b|0)|0}function bz(a,b){a=a|0;b=b|0;return O(24,a|0,b|0)|0}function cz(a,b){a=a|0;b=b|0;return O(25,a|0,b|0)|0}function dz(a,b){a=a|0;b=b|0;return O(26,a|0,b|0)|0}function ez(a,b){a=a|0;b=b|0;return O(27,a|0,b|0)|0}function fz(a,b){a=a|0;b=b|0;return O(28,a|0,b|0)|0}function gz(a,b){a=a|0;b=b|0;return O(29,a|0,b|0)|0}function hz(a,b){a=a|0;b=b|0;return O(30,a|0,b|0)|0}function iz(a,b){a=a|0;b=b|0;return O(31,a|0,b|0)|0}function jz(a,b){a=a|0;b=b|0;return O(32,a|0,b|0)|0}function kz(a,b){a=a|0;b=b|0;return O(33,a|0,b|0)|0}function lz(a,b){a=a|0;b=b|0;return O(34,a|0,b|0)|0}function mz(a,b){a=a|0;b=b|0;return O(35,a|0,b|0)|0}function nz(a,b){a=a|0;b=b|0;return O(36,a|0,b|0)|0}function oz(a,b){a=a|0;b=b|0;return O(37,a|0,b|0)|0}function pz(a,b){a=a|0;b=b|0;return O(38,a|0,b|0)|0}function qz(a,b){a=a|0;b=b|0;return O(39,a|0,b|0)|0}function rz(a,b){a=a|0;b=b|0;return O(40,a|0,b|0)|0}function sz(a,b){a=a|0;b=b|0;return O(41,a|0,b|0)|0}function tz(a,b){a=a|0;b=b|0;return O(42,a|0,b|0)|0}function uz(a,b){a=a|0;b=b|0;return O(43,a|0,b|0)|0}function vz(a,b){a=a|0;b=b|0;return O(44,a|0,b|0)|0}function wz(a,b){a=a|0;b=b|0;return O(45,a|0,b|0)|0}function xz(a,b){a=a|0;b=b|0;return O(46,a|0,b|0)|0}function yz(a,b){a=a|0;b=b|0;return O(47,a|0,b|0)|0}function zz(a,b){a=a|0;b=b|0;return O(48,a|0,b|0)|0}function Az(a,b){a=a|0;b=b|0;return O(49,a|0,b|0)|0}function Bz(a,b){a=a|0;b=b|0;return O(50,a|0,b|0)|0}function Cz(a,b){a=a|0;b=b|0;return O(51,a|0,b|0)|0}function Dz(a,b){a=a|0;b=b|0;return O(52,a|0,b|0)|0}function Ez(a,b){a=a|0;b=b|0;return O(53,a|0,b|0)|0}function Fz(a,b){a=a|0;b=b|0;return O(54,a|0,b|0)|0}function Gz(a,b){a=a|0;b=b|0;return O(55,a|0,b|0)|0}function Hz(a,b){a=a|0;b=b|0;return O(56,a|0,b|0)|0}function Iz(a,b){a=a|0;b=b|0;return O(57,a|0,b|0)|0}function Jz(a,b){a=a|0;b=b|0;return O(58,a|0,b|0)|0}function Kz(a,b){a=a|0;b=b|0;return O(59,a|0,b|0)|0}function Lz(a,b){a=a|0;b=b|0;return O(60,a|0,b|0)|0}function Mz(a,b){a=a|0;b=b|0;return O(61,a|0,b|0)|0}function Nz(a,b){a=a|0;b=b|0;return O(62,a|0,b|0)|0}function Oz(a,b){a=a|0;b=b|0;return O(63,a|0,b|0)|0}function Pz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ya[a&127](b|0,c|0,d|0)|0}function Qz(a,b,c){a=a|0;b=b|0;c=c|0;return P(0,a|0,b|0,c|0)|0}function Rz(a,b,c){a=a|0;b=b|0;c=c|0;return P(1,a|0,b|0,c|0)|0}function Sz(a,b,c){a=a|0;b=b|0;c=c|0;return P(2,a|0,b|0,c|0)|0}function Tz(a,b,c){a=a|0;b=b|0;c=c|0;return P(3,a|0,b|0,c|0)|0}function Uz(a,b,c){a=a|0;b=b|0;c=c|0;return P(4,a|0,b|0,c|0)|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;return P(5,a|0,b|0,c|0)|0}function Wz(a,b,c){a=a|0;b=b|0;c=c|0;return P(6,a|0,b|0,c|0)|0}function Xz(a,b,c){a=a|0;b=b|0;c=c|0;return P(7,a|0,b|0,c|0)|0}function Yz(a,b,c){a=a|0;b=b|0;c=c|0;return P(8,a|0,b|0,c|0)|0}function Zz(a,b,c){a=a|0;b=b|0;c=c|0;return P(9,a|0,b|0,c|0)|0}function _z(a,b,c){a=a|0;b=b|0;c=c|0;return P(10,a|0,b|0,c|0)|0}function $z(a,b,c){a=a|0;b=b|0;c=c|0;return P(11,a|0,b|0,c|0)|0}function aA(a,b,c){a=a|0;b=b|0;c=c|0;return P(12,a|0,b|0,c|0)|0}function bA(a,b,c){a=a|0;b=b|0;c=c|0;return P(13,a|0,b|0,c|0)|0}function cA(a,b,c){a=a|0;b=b|0;c=c|0;return P(14,a|0,b|0,c|0)|0}function dA(a,b,c){a=a|0;b=b|0;c=c|0;return P(15,a|0,b|0,c|0)|0}function eA(a,b,c){a=a|0;b=b|0;c=c|0;return P(16,a|0,b|0,c|0)|0}function fA(a,b,c){a=a|0;b=b|0;c=c|0;return P(17,a|0,b|0,c|0)|0}function gA(a,b,c){a=a|0;b=b|0;c=c|0;return P(18,a|0,b|0,c|0)|0}function hA(a,b,c){a=a|0;b=b|0;c=c|0;return P(19,a|0,b|0,c|0)|0}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return P(20,a|0,b|0,c|0)|0}function jA(a,b,c){a=a|0;b=b|0;c=c|0;return P(21,a|0,b|0,c|0)|0}function kA(a,b,c){a=a|0;b=b|0;c=c|0;return P(22,a|0,b|0,c|0)|0}function lA(a,b,c){a=a|0;b=b|0;c=c|0;return P(23,a|0,b|0,c|0)|0}function mA(a,b,c){a=a|0;b=b|0;c=c|0;return P(24,a|0,b|0,c|0)|0}function nA(a,b,c){a=a|0;b=b|0;c=c|0;return P(25,a|0,b|0,c|0)|0}function oA(a,b,c){a=a|0;b=b|0;c=c|0;return P(26,a|0,b|0,c|0)|0}function pA(a,b,c){a=a|0;b=b|0;c=c|0;return P(27,a|0,b|0,c|0)|0}function qA(a,b,c){a=a|0;b=b|0;c=c|0;return P(28,a|0,b|0,c|0)|0}function rA(a,b,c){a=a|0;b=b|0;c=c|0;return P(29,a|0,b|0,c|0)|0}function sA(a,b,c){a=a|0;b=b|0;c=c|0;return P(30,a|0,b|0,c|0)|0}function tA(a,b,c){a=a|0;b=b|0;c=c|0;return P(31,a|0,b|0,c|0)|0}function uA(a,b,c){a=a|0;b=b|0;c=c|0;return P(32,a|0,b|0,c|0)|0}function vA(a,b,c){a=a|0;b=b|0;c=c|0;return P(33,a|0,b|0,c|0)|0}function wA(a,b,c){a=a|0;b=b|0;c=c|0;return P(34,a|0,b|0,c|0)|0}function xA(a,b,c){a=a|0;b=b|0;c=c|0;return P(35,a|0,b|0,c|0)|0}function yA(a,b,c){a=a|0;b=b|0;c=c|0;return P(36,a|0,b|0,c|0)|0}function zA(a,b,c){a=a|0;b=b|0;c=c|0;return P(37,a|0,b|0,c|0)|0}function AA(a,b,c){a=a|0;b=b|0;c=c|0;return P(38,a|0,b|0,c|0)|0}function BA(a,b,c){a=a|0;b=b|0;c=c|0;return P(39,a|0,b|0,c|0)|0}function CA(a,b,c){a=a|0;b=b|0;c=c|0;return P(40,a|0,b|0,c|0)|0}function DA(a,b,c){a=a|0;b=b|0;c=c|0;return P(41,a|0,b|0,c|0)|0}function EA(a,b,c){a=a|0;b=b|0;c=c|0;return P(42,a|0,b|0,c|0)|0}function FA(a,b,c){a=a|0;b=b|0;c=c|0;return P(43,a|0,b|0,c|0)|0}function GA(a,b,c){a=a|0;b=b|0;c=c|0;return P(44,a|0,b|0,c|0)|0}function HA(a,b,c){a=a|0;b=b|0;c=c|0;return P(45,a|0,b|0,c|0)|0}function IA(a,b,c){a=a|0;b=b|0;c=c|0;return P(46,a|0,b|0,c|0)|0}function JA(a,b,c){a=a|0;b=b|0;c=c|0;return P(47,a|0,b|0,c|0)|0}function KA(a,b,c){a=a|0;b=b|0;c=c|0;return P(48,a|0,b|0,c|0)|0}function LA(a,b,c){a=a|0;b=b|0;c=c|0;return P(49,a|0,b|0,c|0)|0}function MA(a,b,c){a=a|0;b=b|0;c=c|0;return P(50,a|0,b|0,c|0)|0}function NA(a,b,c){a=a|0;b=b|0;c=c|0;return P(51,a|0,b|0,c|0)|0}function OA(a,b,c){a=a|0;b=b|0;c=c|0;return P(52,a|0,b|0,c|0)|0}function PA(a,b,c){a=a|0;b=b|0;c=c|0;return P(53,a|0,b|0,c|0)|0}function QA(a,b,c){a=a|0;b=b|0;c=c|0;return P(54,a|0,b|0,c|0)|0}function RA(a,b,c){a=a|0;b=b|0;c=c|0;return P(55,a|0,b|0,c|0)|0}function SA(a,b,c){a=a|0;b=b|0;c=c|0;return P(56,a|0,b|0,c|0)|0}function TA(a,b,c){a=a|0;b=b|0;c=c|0;return P(57,a|0,b|0,c|0)|0}function UA(a,b,c){a=a|0;b=b|0;c=c|0;return P(58,a|0,b|0,c|0)|0}function VA(a,b,c){a=a|0;b=b|0;c=c|0;return P(59,a|0,b|0,c|0)|0}function WA(a,b,c){a=a|0;b=b|0;c=c|0;return P(60,a|0,b|0,c|0)|0}function XA(a,b,c){a=a|0;b=b|0;c=c|0;return P(61,a|0,b|0,c|0)|0}function YA(a,b,c){a=a|0;b=b|0;c=c|0;return P(62,a|0,b|0,c|0)|0}function ZA(a,b,c){a=a|0;b=b|0;c=c|0;return P(63,a|0,b|0,c|0)|0}function _A(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Za[a&127](b|0,c|0,d|0,e|0)|0}function $A(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(0,a|0,b|0,c|0,d|0)|0}function aB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(1,a|0,b|0,c|0,d|0)|0}function bB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(2,a|0,b|0,c|0,d|0)|0}function cB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(3,a|0,b|0,c|0,d|0)|0}function dB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(4,a|0,b|0,c|0,d|0)|0}function eB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(5,a|0,b|0,c|0,d|0)|0}function fB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(6,a|0,b|0,c|0,d|0)|0}function gB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(7,a|0,b|0,c|0,d|0)|0}function hB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(8,a|0,b|0,c|0,d|0)|0}function iB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(9,a|0,b|0,c|0,d|0)|0}function jB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(10,a|0,b|0,c|0,d|0)|0}function kB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(11,a|0,b|0,c|0,d|0)|0}function lB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(12,a|0,b|0,c|0,d|0)|0}function mB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(13,a|0,b|0,c|0,d|0)|0}function nB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(14,a|0,b|0,c|0,d|0)|0}function oB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(15,a|0,b|0,c|0,d|0)|0}function pB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(16,a|0,b|0,c|0,d|0)|0}function qB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(17,a|0,b|0,c|0,d|0)|0}function rB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(18,a|0,b|0,c|0,d|0)|0}function sB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(19,a|0,b|0,c|0,d|0)|0}function tB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(20,a|0,b|0,c|0,d|0)|0}function uB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(21,a|0,b|0,c|0,d|0)|0}function vB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(22,a|0,b|0,c|0,d|0)|0}function wB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(23,a|0,b|0,c|0,d|0)|0}function xB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(24,a|0,b|0,c|0,d|0)|0}function yB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(25,a|0,b|0,c|0,d|0)|0}function zB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(26,a|0,b|0,c|0,d|0)|0}function AB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(27,a|0,b|0,c|0,d|0)|0}function BB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(28,a|0,b|0,c|0,d|0)|0}function CB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(29,a|0,b|0,c|0,d|0)|0}function DB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(30,a|0,b|0,c|0,d|0)|0}function EB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(31,a|0,b|0,c|0,d|0)|0}function FB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(32,a|0,b|0,c|0,d|0)|0}function GB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(33,a|0,b|0,c|0,d|0)|0}function HB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(34,a|0,b|0,c|0,d|0)|0}function IB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(35,a|0,b|0,c|0,d|0)|0}function JB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(36,a|0,b|0,c|0,d|0)|0}function KB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(37,a|0,b|0,c|0,d|0)|0}function LB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(38,a|0,b|0,c|0,d|0)|0}function MB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(39,a|0,b|0,c|0,d|0)|0}function NB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(40,a|0,b|0,c|0,d|0)|0}function OB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(41,a|0,b|0,c|0,d|0)|0}function PB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(42,a|0,b|0,c|0,d|0)|0}function QB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(43,a|0,b|0,c|0,d|0)|0}function RB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(44,a|0,b|0,c|0,d|0)|0}function SB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(45,a|0,b|0,c|0,d|0)|0}function TB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(46,a|0,b|0,c|0,d|0)|0}function UB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(47,a|0,b|0,c|0,d|0)|0}function VB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(48,a|0,b|0,c|0,d|0)|0}function WB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(49,a|0,b|0,c|0,d|0)|0}function XB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(50,a|0,b|0,c|0,d|0)|0}function YB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(51,a|0,b|0,c|0,d|0)|0}function ZB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(52,a|0,b|0,c|0,d|0)|0}function _B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(53,a|0,b|0,c|0,d|0)|0}function $B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(54,a|0,b|0,c|0,d|0)|0}function aC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(55,a|0,b|0,c|0,d|0)|0}function bC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(56,a|0,b|0,c|0,d|0)|0}function cC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(57,a|0,b|0,c|0,d|0)|0}function dC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(58,a|0,b|0,c|0,d|0)|0}function eC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(59,a|0,b|0,c|0,d|0)|0}function fC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(60,a|0,b|0,c|0,d|0)|0}function gC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(61,a|0,b|0,c|0,d|0)|0}function hC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(62,a|0,b|0,c|0,d|0)|0}function iC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(63,a|0,b|0,c|0,d|0)|0}function jC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return _a[a&127](b|0,c|0,d|0,e|0,f|0)|0}function kC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(0,a|0,b|0,c|0,d|0,e|0)|0}function lC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(1,a|0,b|0,c|0,d|0,e|0)|0}function mC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(2,a|0,b|0,c|0,d|0,e|0)|0}function nC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(3,a|0,b|0,c|0,d|0,e|0)|0}function oC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(4,a|0,b|0,c|0,d|0,e|0)|0}function pC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(5,a|0,b|0,c|0,d|0,e|0)|0}function qC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(6,a|0,b|0,c|0,d|0,e|0)|0}function rC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(7,a|0,b|0,c|0,d|0,e|0)|0}function sC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(8,a|0,b|0,c|0,d|0,e|0)|0}function tC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(9,a|0,b|0,c|0,d|0,e|0)|0}function uC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(10,a|0,b|0,c|0,d|0,e|0)|0}function vC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(11,a|0,b|0,c|0,d|0,e|0)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(12,a|0,b|0,c|0,d|0,e|0)|0}function xC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(13,a|0,b|0,c|0,d|0,e|0)|0}function yC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(14,a|0,b|0,c|0,d|0,e|0)|0}function zC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(15,a|0,b|0,c|0,d|0,e|0)|0}function AC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(16,a|0,b|0,c|0,d|0,e|0)|0}function BC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(17,a|0,b|0,c|0,d|0,e|0)|0}function CC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(18,a|0,b|0,c|0,d|0,e|0)|0}function DC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(19,a|0,b|0,c|0,d|0,e|0)|0}function EC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(20,a|0,b|0,c|0,d|0,e|0)|0}function FC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(21,a|0,b|0,c|0,d|0,e|0)|0}function GC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(22,a|0,b|0,c|0,d|0,e|0)|0}function HC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(23,a|0,b|0,c|0,d|0,e|0)|0}function IC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(24,a|0,b|0,c|0,d|0,e|0)|0}function JC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(25,a|0,b|0,c|0,d|0,e|0)|0}function KC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(26,a|0,b|0,c|0,d|0,e|0)|0}function LC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(27,a|0,b|0,c|0,d|0,e|0)|0}function MC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(28,a|0,b|0,c|0,d|0,e|0)|0}function NC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(29,a|0,b|0,c|0,d|0,e|0)|0}function OC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(30,a|0,b|0,c|0,d|0,e|0)|0}function PC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(31,a|0,b|0,c|0,d|0,e|0)|0}function QC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(32,a|0,b|0,c|0,d|0,e|0)|0}function RC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(33,a|0,b|0,c|0,d|0,e|0)|0}function SC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(34,a|0,b|0,c|0,d|0,e|0)|0}function TC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(35,a|0,b|0,c|0,d|0,e|0)|0}function UC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(36,a|0,b|0,c|0,d|0,e|0)|0}function VC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(37,a|0,b|0,c|0,d|0,e|0)|0}function WC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(38,a|0,b|0,c|0,d|0,e|0)|0}function XC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(39,a|0,b|0,c|0,d|0,e|0)|0}function YC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(40,a|0,b|0,c|0,d|0,e|0)|0}function ZC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(41,a|0,b|0,c|0,d|0,e|0)|0}function _C(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(42,a|0,b|0,c|0,d|0,e|0)|0}function $C(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(43,a|0,b|0,c|0,d|0,e|0)|0}function aD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(44,a|0,b|0,c|0,d|0,e|0)|0}function bD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(45,a|0,b|0,c|0,d|0,e|0)|0}function cD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(46,a|0,b|0,c|0,d|0,e|0)|0}function dD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(47,a|0,b|0,c|0,d|0,e|0)|0}function eD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(48,a|0,b|0,c|0,d|0,e|0)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(49,a|0,b|0,c|0,d|0,e|0)|0}function gD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(50,a|0,b|0,c|0,d|0,e|0)|0}function hD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(51,a|0,b|0,c|0,d|0,e|0)|0}function iD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(52,a|0,b|0,c|0,d|0,e|0)|0}function jD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(53,a|0,b|0,c|0,d|0,e|0)|0}function kD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(54,a|0,b|0,c|0,d|0,e|0)|0}function lD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(55,a|0,b|0,c|0,d|0,e|0)|0}function mD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(56,a|0,b|0,c|0,d|0,e|0)|0}function nD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(57,a|0,b|0,c|0,d|0,e|0)|0}function oD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(58,a|0,b|0,c|0,d|0,e|0)|0}function pD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(59,a|0,b|0,c|0,d|0,e|0)|0}function qD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(60,a|0,b|0,c|0,d|0,e|0)|0}function rD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(61,a|0,b|0,c|0,d|0,e|0)|0}function sD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(62,a|0,b|0,c|0,d|0,e|0)|0}function tD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(63,a|0,b|0,c|0,d|0,e|0)|0}function uD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return $a[a&127](b|0,c|0,d|0,e|0,f|0,g|0)|0}function vD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(0,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(1,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(2,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(3,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(4,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(5,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(6,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(7,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(8,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ED(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(9,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(10,a|0,b|0,c|0,d|0,e|0,f|0)|0}function GD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(11,a|0,b|0,c|0,d|0,e|0,f|0)|0}function HD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(12,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ID(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(13,a|0,b|0,c|0,d|0,e|0,f|0)|0}function JD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(14,a|0,b|0,c|0,d|0,e|0,f|0)|0}function KD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(15,a|0,b|0,c|0,d|0,e|0,f|0)|0}function LD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(16,a|0,b|0,c|0,d|0,e|0,f|0)|0}function MD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(17,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ND(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(18,a|0,b|0,c|0,d|0,e|0,f|0)|0}function OD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(19,a|0,b|0,c|0,d|0,e|0,f|0)|0}function PD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(20,a|0,b|0,c|0,d|0,e|0,f|0)|0}function QD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(21,a|0,b|0,c|0,d|0,e|0,f|0)|0}function RD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(22,a|0,b|0,c|0,d|0,e|0,f|0)|0}function SD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(23,a|0,b|0,c|0,d|0,e|0,f|0)|0}function TD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(24,a|0,b|0,c|0,d|0,e|0,f|0)|0}function UD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(25,a|0,b|0,c|0,d|0,e|0,f|0)|0}function VD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(26,a|0,b|0,c|0,d|0,e|0,f|0)|0}function WD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(27,a|0,b|0,c|0,d|0,e|0,f|0)|0}function XD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(28,a|0,b|0,c|0,d|0,e|0,f|0)|0}function YD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(29,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ZD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(30,a|0,b|0,c|0,d|0,e|0,f|0)|0}function _D(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(31,a|0,b|0,c|0,d|0,e|0,f|0)|0}function $D(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(32,a|0,b|0,c|0,d|0,e|0,f|0)|0}function aE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(33,a|0,b|0,c|0,d|0,e|0,f|0)|0}function bE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(34,a|0,b|0,c|0,d|0,e|0,f|0)|0}function cE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(35,a|0,b|0,c|0,d|0,e|0,f|0)|0}function dE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(36,a|0,b|0,c|0,d|0,e|0,f|0)|0}function eE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(37,a|0,b|0,c|0,d|0,e|0,f|0)|0}function fE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(38,a|0,b|0,c|0,d|0,e|0,f|0)|0}function gE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(39,a|0,b|0,c|0,d|0,e|0,f|0)|0}function hE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(40,a|0,b|0,c|0,d|0,e|0,f|0)|0}function iE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(41,a|0,b|0,c|0,d|0,e|0,f|0)|0}function jE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(42,a|0,b|0,c|0,d|0,e|0,f|0)|0}function kE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(43,a|0,b|0,c|0,d|0,e|0,f|0)|0}function lE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(44,a|0,b|0,c|0,d|0,e|0,f|0)|0}function mE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(45,a|0,b|0,c|0,d|0,e|0,f|0)|0}function nE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(46,a|0,b|0,c|0,d|0,e|0,f|0)|0}function oE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(47,a|0,b|0,c|0,d|0,e|0,f|0)|0}function pE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(48,a|0,b|0,c|0,d|0,e|0,f|0)|0}function qE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(49,a|0,b|0,c|0,d|0,e|0,f|0)|0}function rE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(50,a|0,b|0,c|0,d|0,e|0,f|0)|0}function sE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(51,a|0,b|0,c|0,d|0,e|0,f|0)|0}function tE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(52,a|0,b|0,c|0,d|0,e|0,f|0)|0}function uE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(53,a|0,b|0,c|0,d|0,e|0,f|0)|0}function vE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(54,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(55,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(56,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(57,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(58,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(59,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(60,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(61,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(62,a|0,b|0,c|0,d|0,e|0,f|0)|0}function EE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(63,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FE(a,b){a=a|0;b=b|0;ab[a&127](b|0)}function GE(a){a=a|0;T(0,a|0)}function HE(a){a=a|0;T(1,a|0)}function IE(a){a=a|0;T(2,a|0)}function JE(a){a=a|0;T(3,a|0)}function KE(a){a=a|0;T(4,a|0)}function LE(a){a=a|0;T(5,a|0)}function ME(a){a=a|0;T(6,a|0)}function NE(a){a=a|0;T(7,a|0)}function OE(a){a=a|0;T(8,a|0)}function PE(a){a=a|0;T(9,a|0)}function QE(a){a=a|0;T(10,a|0)}function RE(a){a=a|0;T(11,a|0)}function SE(a){a=a|0;T(12,a|0)}function TE(a){a=a|0;T(13,a|0)}function UE(a){a=a|0;T(14,a|0)}function VE(a){a=a|0;T(15,a|0)}function WE(a){a=a|0;T(16,a|0)}function XE(a){a=a|0;T(17,a|0)}function YE(a){a=a|0;T(18,a|0)}function ZE(a){a=a|0;T(19,a|0)}function _E(a){a=a|0;T(20,a|0)}function $E(a){a=a|0;T(21,a|0)}function aF(a){a=a|0;T(22,a|0)}function bF(a){a=a|0;T(23,a|0)}function cF(a){a=a|0;T(24,a|0)}function dF(a){a=a|0;T(25,a|0)}function eF(a){a=a|0;T(26,a|0)}function fF(a){a=a|0;T(27,a|0)}function gF(a){a=a|0;T(28,a|0)}function hF(a){a=a|0;T(29,a|0)}function iF(a){a=a|0;T(30,a|0)}function jF(a){a=a|0;T(31,a|0)}function kF(a){a=a|0;T(32,a|0)}function lF(a){a=a|0;T(33,a|0)}function mF(a){a=a|0;T(34,a|0)}function nF(a){a=a|0;T(35,a|0)}function oF(a){a=a|0;T(36,a|0)}function pF(a){a=a|0;T(37,a|0)}function qF(a){a=a|0;T(38,a|0)}function rF(a){a=a|0;T(39,a|0)}function sF(a){a=a|0;T(40,a|0)}function tF(a){a=a|0;T(41,a|0)}function uF(a){a=a|0;T(42,a|0)}function vF(a){a=a|0;T(43,a|0)}function wF(a){a=a|0;T(44,a|0)}function xF(a){a=a|0;T(45,a|0)}function yF(a){a=a|0;T(46,a|0)}function zF(a){a=a|0;T(47,a|0)}function AF(a){a=a|0;T(48,a|0)}function BF(a){a=a|0;T(49,a|0)}function CF(a){a=a|0;T(50,a|0)}function DF(a){a=a|0;T(51,a|0)}function EF(a){a=a|0;T(52,a|0)}function FF(a){a=a|0;T(53,a|0)}function GF(a){a=a|0;T(54,a|0)}function HF(a){a=a|0;T(55,a|0)}function IF(a){a=a|0;T(56,a|0)}function JF(a){a=a|0;T(57,a|0)}function KF(a){a=a|0;T(58,a|0)}function LF(a){a=a|0;T(59,a|0)}function MF(a){a=a|0;T(60,a|0)}function NF(a){a=a|0;T(61,a|0)}function OF(a){a=a|0;T(62,a|0)}function PF(a){a=a|0;T(63,a|0)}function QF(a,b,c){a=a|0;b=b|0;c=c|0;bb[a&127](b|0,c|0)}function RF(a,b){a=a|0;b=b|0;U(0,a|0,b|0)}function SF(a,b){a=a|0;b=b|0;U(1,a|0,b|0)}function TF(a,b){a=a|0;b=b|0;U(2,a|0,b|0)}function UF(a,b){a=a|0;b=b|0;U(3,a|0,b|0)}function VF(a,b){a=a|0;b=b|0;U(4,a|0,b|0)}function WF(a,b){a=a|0;b=b|0;U(5,a|0,b|0)}function XF(a,b){a=a|0;b=b|0;U(6,a|0,b|0)}function YF(a,b){a=a|0;b=b|0;U(7,a|0,b|0)}function ZF(a,b){a=a|0;b=b|0;U(8,a|0,b|0)}function _F(a,b){a=a|0;b=b|0;U(9,a|0,b|0)}function $F(a,b){a=a|0;b=b|0;U(10,a|0,b|0)}function aG(a,b){a=a|0;b=b|0;U(11,a|0,b|0)}function bG(a,b){a=a|0;b=b|0;U(12,a|0,b|0)}function cG(a,b){a=a|0;b=b|0;U(13,a|0,b|0)}function dG(a,b){a=a|0;b=b|0;U(14,a|0,b|0)}function eG(a,b){a=a|0;b=b|0;U(15,a|0,b|0)}function fG(a,b){a=a|0;b=b|0;U(16,a|0,b|0)}function gG(a,b){a=a|0;b=b|0;U(17,a|0,b|0)}function hG(a,b){a=a|0;b=b|0;U(18,a|0,b|0)}function iG(a,b){a=a|0;b=b|0;U(19,a|0,b|0)}function jG(a,b){a=a|0;b=b|0;U(20,a|0,b|0)}function kG(a,b){a=a|0;b=b|0;U(21,a|0,b|0)}function lG(a,b){a=a|0;b=b|0;U(22,a|0,b|0)}function mG(a,b){a=a|0;b=b|0;U(23,a|0,b|0)}function nG(a,b){a=a|0;b=b|0;U(24,a|0,b|0)}function oG(a,b){a=a|0;b=b|0;U(25,a|0,b|0)}function pG(a,b){a=a|0;b=b|0;U(26,a|0,b|0)}function qG(a,b){a=a|0;b=b|0;U(27,a|0,b|0)}function rG(a,b){a=a|0;b=b|0;U(28,a|0,b|0)}function sG(a,b){a=a|0;b=b|0;U(29,a|0,b|0)}function tG(a,b){a=a|0;b=b|0;U(30,a|0,b|0)}function uG(a,b){a=a|0;b=b|0;U(31,a|0,b|0)}function vG(a,b){a=a|0;b=b|0;U(32,a|0,b|0)}function wG(a,b){a=a|0;b=b|0;U(33,a|0,b|0)}function xG(a,b){a=a|0;b=b|0;U(34,a|0,b|0)}function yG(a,b){a=a|0;b=b|0;U(35,a|0,b|0)}function zG(a,b){a=a|0;b=b|0;U(36,a|0,b|0)}function AG(a,b){a=a|0;b=b|0;U(37,a|0,b|0)}function BG(a,b){a=a|0;b=b|0;U(38,a|0,b|0)}function CG(a,b){a=a|0;b=b|0;U(39,a|0,b|0)}function DG(a,b){a=a|0;b=b|0;U(40,a|0,b|0)}function EG(a,b){a=a|0;b=b|0;U(41,a|0,b|0)}function FG(a,b){a=a|0;b=b|0;U(42,a|0,b|0)}function GG(a,b){a=a|0;b=b|0;U(43,a|0,b|0)}function HG(a,b){a=a|0;b=b|0;U(44,a|0,b|0)}function IG(a,b){a=a|0;b=b|0;U(45,a|0,b|0)}function JG(a,b){a=a|0;b=b|0;U(46,a|0,b|0)}function KG(a,b){a=a|0;b=b|0;U(47,a|0,b|0)}function LG(a,b){a=a|0;b=b|0;U(48,a|0,b|0)}function MG(a,b){a=a|0;b=b|0;U(49,a|0,b|0)}function NG(a,b){a=a|0;b=b|0;U(50,a|0,b|0)}function OG(a,b){a=a|0;b=b|0;U(51,a|0,b|0)}function PG(a,b){a=a|0;b=b|0;U(52,a|0,b|0)}function QG(a,b){a=a|0;b=b|0;U(53,a|0,b|0)}function RG(a,b){a=a|0;b=b|0;U(54,a|0,b|0)}function SG(a,b){a=a|0;b=b|0;U(55,a|0,b|0)}function TG(a,b){a=a|0;b=b|0;U(56,a|0,b|0)}function UG(a,b){a=a|0;b=b|0;U(57,a|0,b|0)}function VG(a,b){a=a|0;b=b|0;U(58,a|0,b|0)}function WG(a,b){a=a|0;b=b|0;U(59,a|0,b|0)}function XG(a,b){a=a|0;b=b|0;U(60,a|0,b|0)}function YG(a,b){a=a|0;b=b|0;U(61,a|0,b|0)}function ZG(a,b){a=a|0;b=b|0;U(62,a|0,b|0)}function _G(a,b){a=a|0;b=b|0;U(63,a|0,b|0)}function $G(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cb[a&255](b|0,c|0,d|0)}function aH(a,b,c){a=a|0;b=b|0;c=c|0;V(0,a|0,b|0,c|0)}function bH(a,b,c){a=a|0;b=b|0;c=c|0;V(1,a|0,b|0,c|0)}function cH(a,b,c){a=a|0;b=b|0;c=c|0;V(2,a|0,b|0,c|0)}function dH(a,b,c){a=a|0;b=b|0;c=c|0;V(3,a|0,b|0,c|0)}function eH(a,b,c){a=a|0;b=b|0;c=c|0;V(4,a|0,b|0,c|0)}function fH(a,b,c){a=a|0;b=b|0;c=c|0;V(5,a|0,b|0,c|0)}function gH(a,b,c){a=a|0;b=b|0;c=c|0;V(6,a|0,b|0,c|0)}function hH(a,b,c){a=a|0;b=b|0;c=c|0;V(7,a|0,b|0,c|0)}function iH(a,b,c){a=a|0;b=b|0;c=c|0;V(8,a|0,b|0,c|0)}function jH(a,b,c){a=a|0;b=b|0;c=c|0;V(9,a|0,b|0,c|0)}function kH(a,b,c){a=a|0;b=b|0;c=c|0;V(10,a|0,b|0,c|0)}function lH(a,b,c){a=a|0;b=b|0;c=c|0;V(11,a|0,b|0,c|0)}function mH(a,b,c){a=a|0;b=b|0;c=c|0;V(12,a|0,b|0,c|0)}function nH(a,b,c){a=a|0;b=b|0;c=c|0;V(13,a|0,b|0,c|0)}function oH(a,b,c){a=a|0;b=b|0;c=c|0;V(14,a|0,b|0,c|0)}function pH(a,b,c){a=a|0;b=b|0;c=c|0;V(15,a|0,b|0,c|0)}function qH(a,b,c){a=a|0;b=b|0;c=c|0;V(16,a|0,b|0,c|0)}function rH(a,b,c){a=a|0;b=b|0;c=c|0;V(17,a|0,b|0,c|0)}function sH(a,b,c){a=a|0;b=b|0;c=c|0;V(18,a|0,b|0,c|0)}function tH(a,b,c){a=a|0;b=b|0;c=c|0;V(19,a|0,b|0,c|0)}function uH(a,b,c){a=a|0;b=b|0;c=c|0;V(20,a|0,b|0,c|0)}function vH(a,b,c){a=a|0;b=b|0;c=c|0;V(21,a|0,b|0,c|0)}function wH(a,b,c){a=a|0;b=b|0;c=c|0;V(22,a|0,b|0,c|0)}function xH(a,b,c){a=a|0;b=b|0;c=c|0;V(23,a|0,b|0,c|0)}function yH(a,b,c){a=a|0;b=b|0;c=c|0;V(24,a|0,b|0,c|0)}function zH(a,b,c){a=a|0;b=b|0;c=c|0;V(25,a|0,b|0,c|0)}function AH(a,b,c){a=a|0;b=b|0;c=c|0;V(26,a|0,b|0,c|0)}function BH(a,b,c){a=a|0;b=b|0;c=c|0;V(27,a|0,b|0,c|0)}function CH(a,b,c){a=a|0;b=b|0;c=c|0;V(28,a|0,b|0,c|0)}function DH(a,b,c){a=a|0;b=b|0;c=c|0;V(29,a|0,b|0,c|0)}function EH(a,b,c){a=a|0;b=b|0;c=c|0;V(30,a|0,b|0,c|0)}function FH(a,b,c){a=a|0;b=b|0;c=c|0;V(31,a|0,b|0,c|0)}function GH(a,b,c){a=a|0;b=b|0;c=c|0;V(32,a|0,b|0,c|0)}function HH(a,b,c){a=a|0;b=b|0;c=c|0;V(33,a|0,b|0,c|0)}function IH(a,b,c){a=a|0;b=b|0;c=c|0;V(34,a|0,b|0,c|0)}function JH(a,b,c){a=a|0;b=b|0;c=c|0;V(35,a|0,b|0,c|0)}function KH(a,b,c){a=a|0;b=b|0;c=c|0;V(36,a|0,b|0,c|0)}function LH(a,b,c){a=a|0;b=b|0;c=c|0;V(37,a|0,b|0,c|0)}function MH(a,b,c){a=a|0;b=b|0;c=c|0;V(38,a|0,b|0,c|0)}function NH(a,b,c){a=a|0;b=b|0;c=c|0;V(39,a|0,b|0,c|0)}function OH(a,b,c){a=a|0;b=b|0;c=c|0;V(40,a|0,b|0,c|0)}function PH(a,b,c){a=a|0;b=b|0;c=c|0;V(41,a|0,b|0,c|0)}function QH(a,b,c){a=a|0;b=b|0;c=c|0;V(42,a|0,b|0,c|0)}function RH(a,b,c){a=a|0;b=b|0;c=c|0;V(43,a|0,b|0,c|0)}function SH(a,b,c){a=a|0;b=b|0;c=c|0;V(44,a|0,b|0,c|0)}function TH(a,b,c){a=a|0;b=b|0;c=c|0;V(45,a|0,b|0,c|0)}function UH(a,b,c){a=a|0;b=b|0;c=c|0;V(46,a|0,b|0,c|0)}function VH(a,b,c){a=a|0;b=b|0;c=c|0;V(47,a|0,b|0,c|0)}function WH(a,b,c){a=a|0;b=b|0;c=c|0;V(48,a|0,b|0,c|0)}function XH(a,b,c){a=a|0;b=b|0;c=c|0;V(49,a|0,b|0,c|0)}function YH(a,b,c){a=a|0;b=b|0;c=c|0;V(50,a|0,b|0,c|0)}function ZH(a,b,c){a=a|0;b=b|0;c=c|0;V(51,a|0,b|0,c|0)}function _H(a,b,c){a=a|0;b=b|0;c=c|0;V(52,a|0,b|0,c|0)}function $H(a,b,c){a=a|0;b=b|0;c=c|0;V(53,a|0,b|0,c|0)}function aI(a,b,c){a=a|0;b=b|0;c=c|0;V(54,a|0,b|0,c|0)}function bI(a,b,c){a=a|0;b=b|0;c=c|0;V(55,a|0,b|0,c|0)}function cI(a,b,c){a=a|0;b=b|0;c=c|0;V(56,a|0,b|0,c|0)}function dI(a,b,c){a=a|0;b=b|0;c=c|0;V(57,a|0,b|0,c|0)}function eI(a,b,c){a=a|0;b=b|0;c=c|0;V(58,a|0,b|0,c|0)}function fI(a,b,c){a=a|0;b=b|0;c=c|0;V(59,a|0,b|0,c|0)}function gI(a,b,c){a=a|0;b=b|0;c=c|0;V(60,a|0,b|0,c|0)}function hI(a,b,c){a=a|0;b=b|0;c=c|0;V(61,a|0,b|0,c|0)}function iI(a,b,c){a=a|0;b=b|0;c=c|0;V(62,a|0,b|0,c|0)}function jI(a,b,c){a=a|0;b=b|0;c=c|0;V(63,a|0,b|0,c|0)}function kI(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;db[a&127](b|0,c|0,d|0,e|0)}function lI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(0,a|0,b|0,c|0,d|0)}function mI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(1,a|0,b|0,c|0,d|0)}function nI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(2,a|0,b|0,c|0,d|0)}function oI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(3,a|0,b|0,c|0,d|0)}function pI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(4,a|0,b|0,c|0,d|0)}function qI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(5,a|0,b|0,c|0,d|0)}function rI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(6,a|0,b|0,c|0,d|0)}function sI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(7,a|0,b|0,c|0,d|0)}function tI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(8,a|0,b|0,c|0,d|0)}function uI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(9,a|0,b|0,c|0,d|0)}function vI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(10,a|0,b|0,c|0,d|0)}function wI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(11,a|0,b|0,c|0,d|0)}function xI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(12,a|0,b|0,c|0,d|0)}function yI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(13,a|0,b|0,c|0,d|0)}function zI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(14,a|0,b|0,c|0,d|0)}function AI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(15,a|0,b|0,c|0,d|0)}function BI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(16,a|0,b|0,c|0,d|0)}function CI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(17,a|0,b|0,c|0,d|0)}function DI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(18,a|0,b|0,c|0,d|0)}function EI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(19,a|0,b|0,c|0,d|0)}function FI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(20,a|0,b|0,c|0,d|0)}function GI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(21,a|0,b|0,c|0,d|0)}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(22,a|0,b|0,c|0,d|0)}function II(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(23,a|0,b|0,c|0,d|0)}function JI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(24,a|0,b|0,c|0,d|0)}function KI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(25,a|0,b|0,c|0,d|0)}function LI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(26,a|0,b|0,c|0,d|0)}function MI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(27,a|0,b|0,c|0,d|0)}function NI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(28,a|0,b|0,c|0,d|0)}function OI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(29,a|0,b|0,c|0,d|0)}function PI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(30,a|0,b|0,c|0,d|0)}function QI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(31,a|0,b|0,c|0,d|0)}function RI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(32,a|0,b|0,c|0,d|0)}function SI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(33,a|0,b|0,c|0,d|0)}function TI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(34,a|0,b|0,c|0,d|0)}function UI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(35,a|0,b|0,c|0,d|0)}function VI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(36,a|0,b|0,c|0,d|0)}function WI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(37,a|0,b|0,c|0,d|0)}function XI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(38,a|0,b|0,c|0,d|0)}function YI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(39,a|0,b|0,c|0,d|0)}function ZI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(40,a|0,b|0,c|0,d|0)}function _I(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(41,a|0,b|0,c|0,d|0)}function $I(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(42,a|0,b|0,c|0,d|0)}function aJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(43,a|0,b|0,c|0,d|0)}function bJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(44,a|0,b|0,c|0,d|0)}function cJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(45,a|0,b|0,c|0,d|0)}function dJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(46,a|0,b|0,c|0,d|0)}function eJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(47,a|0,b|0,c|0,d|0)}function fJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(48,a|0,b|0,c|0,d|0)}function gJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(49,a|0,b|0,c|0,d|0)}function hJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(50,a|0,b|0,c|0,d|0)}function iJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(51,a|0,b|0,c|0,d|0)}function jJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(52,a|0,b|0,c|0,d|0)}function kJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(53,a|0,b|0,c|0,d|0)}function lJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(54,a|0,b|0,c|0,d|0)}function mJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(55,a|0,b|0,c|0,d|0)}function nJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(56,a|0,b|0,c|0,d|0)}function oJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(57,a|0,b|0,c|0,d|0)}function pJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(58,a|0,b|0,c|0,d|0)}function qJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(59,a|0,b|0,c|0,d|0)}function rJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(60,a|0,b|0,c|0,d|0)}function sJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(61,a|0,b|0,c|0,d|0)}function tJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(62,a|0,b|0,c|0,d|0)}function uJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(63,a|0,b|0,c|0,d|0)}function vJ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;eb[a&127](b|0,c|0,d|0,e|0,f|0,g|0)}function wJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(0,a|0,b|0,c|0,d|0,e|0,f|0)}function xJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(1,a|0,b|0,c|0,d|0,e|0,f|0)}function yJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(2,a|0,b|0,c|0,d|0,e|0,f|0)}function zJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(3,a|0,b|0,c|0,d|0,e|0,f|0)}function AJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(4,a|0,b|0,c|0,d|0,e|0,f|0)}function BJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(5,a|0,b|0,c|0,d|0,e|0,f|0)}function CJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(6,a|0,b|0,c|0,d|0,e|0,f|0)}function DJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(7,a|0,b|0,c|0,d|0,e|0,f|0)}function EJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(8,a|0,b|0,c|0,d|0,e|0,f|0)}function FJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(9,a|0,b|0,c|0,d|0,e|0,f|0)}function GJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(10,a|0,b|0,c|0,d|0,e|0,f|0)}function HJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(11,a|0,b|0,c|0,d|0,e|0,f|0)}function IJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(12,a|0,b|0,c|0,d|0,e|0,f|0)}function JJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(13,a|0,b|0,c|0,d|0,e|0,f|0)}function KJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(14,a|0,b|0,c|0,d|0,e|0,f|0)}function LJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(15,a|0,b|0,c|0,d|0,e|0,f|0)}function MJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(16,a|0,b|0,c|0,d|0,e|0,f|0)}function NJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(17,a|0,b|0,c|0,d|0,e|0,f|0)}function OJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(18,a|0,b|0,c|0,d|0,e|0,f|0)}function PJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(19,a|0,b|0,c|0,d|0,e|0,f|0)}function QJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(20,a|0,b|0,c|0,d|0,e|0,f|0)}function RJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(21,a|0,b|0,c|0,d|0,e|0,f|0)}function SJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(22,a|0,b|0,c|0,d|0,e|0,f|0)}function TJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(23,a|0,b|0,c|0,d|0,e|0,f|0)}function UJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(24,a|0,b|0,c|0,d|0,e|0,f|0)}function VJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(25,a|0,b|0,c|0,d|0,e|0,f|0)}function WJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(26,a|0,b|0,c|0,d|0,e|0,f|0)}function XJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(27,a|0,b|0,c|0,d|0,e|0,f|0)}function YJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(28,a|0,b|0,c|0,d|0,e|0,f|0)}function ZJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(29,a|0,b|0,c|0,d|0,e|0,f|0)}function _J(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(30,a|0,b|0,c|0,d|0,e|0,f|0)}function $J(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(31,a|0,b|0,c|0,d|0,e|0,f|0)}function aK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(32,a|0,b|0,c|0,d|0,e|0,f|0)}function bK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(33,a|0,b|0,c|0,d|0,e|0,f|0)}function cK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(34,a|0,b|0,c|0,d|0,e|0,f|0)}function dK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(35,a|0,b|0,c|0,d|0,e|0,f|0)}function eK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(36,a|0,b|0,c|0,d|0,e|0,f|0)}function fK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(37,a|0,b|0,c|0,d|0,e|0,f|0)}function gK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(38,a|0,b|0,c|0,d|0,e|0,f|0)}function hK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(39,a|0,b|0,c|0,d|0,e|0,f|0)}function iK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(40,a|0,b|0,c|0,d|0,e|0,f|0)}function jK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(41,a|0,b|0,c|0,d|0,e|0,f|0)}function kK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(42,a|0,b|0,c|0,d|0,e|0,f|0)}function lK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(43,a|0,b|0,c|0,d|0,e|0,f|0)}function mK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(44,a|0,b|0,c|0,d|0,e|0,f|0)}function nK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(45,a|0,b|0,c|0,d|0,e|0,f|0)}function oK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(46,a|0,b|0,c|0,d|0,e|0,f|0)}function pK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(47,a|0,b|0,c|0,d|0,e|0,f|0)}function qK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(48,a|0,b|0,c|0,d|0,e|0,f|0)}function rK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(49,a|0,b|0,c|0,d|0,e|0,f|0)}function sK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(50,a|0,b|0,c|0,d|0,e|0,f|0)}function tK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(51,a|0,b|0,c|0,d|0,e|0,f|0)}function uK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(52,a|0,b|0,c|0,d|0,e|0,f|0)}function vK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(53,a|0,b|0,c|0,d|0,e|0,f|0)}function wK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(54,a|0,b|0,c|0,d|0,e|0,f|0)}function xK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(55,a|0,b|0,c|0,d|0,e|0,f|0)}function yK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(56,a|0,b|0,c|0,d|0,e|0,f|0)}function zK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(57,a|0,b|0,c|0,d|0,e|0,f|0)}function AK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(58,a|0,b|0,c|0,d|0,e|0,f|0)}function BK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(59,a|0,b|0,c|0,d|0,e|0,f|0)}function CK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(60,a|0,b|0,c|0,d|0,e|0,f|0)}function DK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(61,a|0,b|0,c|0,d|0,e|0,f|0)}function EK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(62,a|0,b|0,c|0,d|0,e|0,f|0)}function FK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(63,a|0,b|0,c|0,d|0,e|0,f|0)}function GK(){J(0);return 0}function HK(a){a=a|0;J(1);return 0}function IK(a,b){a=a|0;b=b|0;J(2);return 0}function JK(a,b,c){a=a|0;b=b|0;c=c|0;J(3);return 0}function KK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J(4);return 0}function LK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;J(5);return 0}function MK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;J(6);return 0}function NK(a){a=a|0;J(7)}function OK(a,b){a=a|0;b=b|0;J(8)}function PK(a,b,c){a=a|0;b=b|0;c=c|0;J(9)}function QK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J(10)}function RK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;J(11)}\nfunction aj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;do switch(b<<16>>16){case 240:case 228:case 227:case 195:{b=c[d>>2]|0;if(!b)return;pi(c[a>>2]|0,b,1);return}case 294:case 280:case 275:case 268:case 265:case 263:case 248:case 236:case 234:case 206:case 205:{b=c[d>>2]|0;if(!b)return;ni(c[a>>2]|0,b);return}case 293:case 264:case 262:case 254:case 250:case 242:case 241:case 237:case 235:case 232:case 220:case 219:case 210:{b=c[d>>2]|0;if(!b)return;ri(c[a>>2]|0,b);return}case 251:case 245:case 244:case 233:case 226:{qi(c[a>>2]|0,c[d>>2]|0);return}case 229:{i=c[a>>2]|0;h=c[d>>2]|0;if(!h)return;a:do if((c[h>>2]|0)>0){d=i+480|0;e=i+304|0;f=i+308|0;g=i+300|0;if(!i){a=0;while(1){b=c[h+8+(a<<4)+4>>2]|0;if(b|0)ri(0,b);b=c[h+8+(a<<4)+8>>2]|0;if(b|0)pi(0,b,1);b=c[h+8+(a<<4)>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);a=a+1|0;if((a|0)>=(c[h>>2]|0))break a}}a=0;do{b=c[h+8+(a<<4)+4>>2]|0;if(b|0)ri(i,b);b=c[h+8+(a<<4)+8>>2]|0;if(b|0)pi(i,b,1);b=c[h+8+(a<<4)>>2]|0;do if(b|0){if(c[d>>2]|0){Xd(i,b);break}j=b;if((c[e>>2]|0)>>>0<=j>>>0?(c[f>>2]|0)>>>0>j>>>0:0){c[b>>2]=c[g>>2];c[g>>2]=b;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}while(0);a=a+1|0}while((a|0)<(c[h>>2]|0))}while(0);if(i|0){if(c[i+480>>2]|0){Xd(i,h);return}j=h;if((c[i+304>>2]|0)>>>0<=j>>>0?(c[i+308>>2]|0)>>>0>j>>>0:0){j=i+300|0;c[h>>2]=c[j>>2];c[j>>2]=h;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{j=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}case 289:case 239:{a=c[a>>2]|0;b=c[d>>2]|0;if(!b)return;do{j=b;b=c[b+32>>2]|0;oi(a,j)}while((b|0)!=0);return}case 256:case 252:case 249:{j=c[a>>2]|0;b=c[d>>2]|0;if(!b)return;i=b+4|0;a=c[b>>2]|0;b:do if((c[i>>2]|0)>0){e=j+480|0;f=j+304|0;g=j+308|0;h=j+300|0;if(!j){d=0;while(1){a=c[a+(d<<3)>>2]|0;do if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{h=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}while(0);d=d+1|0;a=c[b>>2]|0;if((d|0)>=(c[i>>2]|0))break b}}d=0;do{a=c[a+(d<<3)>>2]|0;do if(a|0){if(c[e>>2]|0){Xd(j,a);break}k=a;if((c[f>>2]|0)>>>0<=k>>>0?(c[g>>2]|0)>>>0>k>>>0:0){c[a>>2]=c[h>>2];c[h>>2]=a;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);d=d+1|0;a=c[b>>2]|0}while((d|0)<(c[i>>2]|0))}while(0);c:do if(a){do if(j|0){d=j+480|0;if(!(c[d>>2]|0)){e=a;if((c[j+304>>2]|0)>>>0>e>>>0)break;if((c[j+308>>2]|0)>>>0<=e>>>0)break;k=j+300|0;c[a>>2]=c[k>>2];c[k>>2]=a}else Xd(j,a);a=d;d=82;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);d=80;break}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);d=80;break}}else d=80;while(0);if((d|0)==80)if(j){a=j+480|0;d=82}if((d|0)==82){if(c[a>>2]|0){Xd(j,b);return}k=b;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){k=j+300|0;c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}case 292:case 291:case 290:case 258:{oi(c[a>>2]|0,c[d>>2]|0);return}case 276:case 271:{Xi(c[a>>2]|0,c[d>>2]|0);return}case 273:{j=c[a>>2]|0;b=c[d+4>>2]|0;if(!b)return;i=b+4|0;a=c[b>>2]|0;d:do if((c[i>>2]|0)>0){e=j+480|0;f=j+304|0;g=j+308|0;h=j+300|0;if(!j){d=0;while(1){a=c[a+(d<<3)>>2]|0;do if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}while(0);d=d+1|0;a=c[b>>2]|0;if((d|0)>=(c[i>>2]|0))break d}}d=0;do{a=c[a+(d<<3)>>2]|0;do if(a|0){if(c[e>>2]|0){Xd(j,a);break}k=a;if((c[f>>2]|0)>>>0<=k>>>0?(c[g>>2]|0)>>>0>k>>>0:0){c[a>>2]=c[h>>2];c[h>>2]=a;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);d=d+1|0;a=c[b>>2]|0}while((d|0)<(c[i>>2]|0))}while(0);e:do if(a){do if(j|0){d=j+480|0;if(!(c[d>>2]|0)){e=a;if((c[j+304>>2]|0)>>>0>e>>>0)break;if((c[j+308>>2]|0)>>>0<=e>>>0)break;k=j+300|0;c[a>>2]=c[k>>2];c[k>>2]=a}else Xd(j,a);a=d;d=126;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);d=124;break}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);d=124;break}}else d=124;while(0);if((d|0)==124)if(j){a=j+480|0;d=126}if((d|0)==126){if(c[a>>2]|0){Xd(j,b);return}k=b;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){k=j+300|0;c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}case 298:case 297:case 296:{b=c[d+4>>2]|0;if(!b)return;ni(c[a>>2]|0,b);return}default:return}while(0)}function bj(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0;Q=Ra;Ra=Ra+96|0;J=Q+80|0;D=Q+72|0;G=Q+64|0;C=Q+56|0;z=Q+48|0;A=Q+40|0;v=Q+32|0;u=Q+24|0;s=Q+16|0;q=Q+8|0;p=Q;K=Q+84|0;P=c[f>>2]|0;H=P+165|0;n=(a[H>>0]|0)==0;do if(!n?(c[P+160>>2]|0)==1:0){h=a[P+164>>0]|0;q=h&255;h=h<<24>>24==1;p=h?34855:34585;h=h?19:14;a:do if(c[P+272>>2]|0){if(!(a[P+81>>0]|0))O=13}else{do if(!(0<0|(0==0?(e[P+276>>1]|0)>>>0<h>>>0:0))){n=P+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=14;break a}n=P+296|0;o=c[n>>2]|0;if(!o){n=P+292|0;break}else{c[n>>2]=c[o>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=14;break a}}else n=P+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;O=13}while(0);if((O|0)==13){o=_d(P,h,0)|0;O=14}if((O|0)==14?o|0:0){ew(o|0,p|0,h|0)|0;F=g;M=c[F+4>>2]|0;E=f+180|0;c[E>>2]=c[F>>2];c[E+4>>2]=M;E=o;M=q;break}O=g;P=c[O+4>>2]|0;f=f+180|0;c[f>>2]=c[O>>2];c[f+4>>2]=P;Ra=Q;return}else O=16;while(0);if((O|0)==16){r=h+4|0;if(c[r>>2]|0){if(!n){cd(f,39404,p);Ra=Q;return}n=wk(P,g)|0;if((n|0)<0){c[q>>2]=g;cd(f,39421,q);Ra=Q;return}}else{h=g;n=d[P+164>>0]|0}o=(i|0)!=0;if(o?(n|0)!=1&(c[r>>2]|0)!=0:0){cd(f,39278,s);Ra=Q;return}r=o?1:n;q=qj(P,h)|0;b:do if((d[f+200>>0]|0)>1){p=c[f>>2]|0;c:do if(!p){if(!(c[7324]|0)){n=Wa[c[29340>>2]&127](16)|0;O=49;break}n=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;p=59064;o=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&o>>>0>0){M=c[14978]|0;F=Tv(o|0,p|0,n|0,((n|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=M>>>0)&1}n=Wa[c[29340>>2]&127](n)|0;if(!n)break b;o=Wa[c[29352>>2]&127](n)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0>(c[14987]|0)>>>0)c[14987]=o}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0)break b}else{do if((e[p+276>>1]|0)>=16){o=p+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];O=p+284|0;c[O>>2]=(c[O>>2]|0)+1;O=49;break c}o=p+296|0;n=c[o>>2]|0;if(!n){n=p+292|0;break}else{c[o>>2]=c[n>>2];O=p+284|0;c[O>>2]=(c[O>>2]|0)+1;O=49;break c}}else n=p+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1}n=_d(p,16,0)|0;O=49}while(0);if((O|0)==49)if(!n)break;o=n+4|0;p=o;s=p+12|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));c[n>>2]=q;E=h;F=c[E+4>>2]|0;M=o;c[M>>2]=c[E>>2];c[M+4>>2]=F;M=f+272|0;c[n+12>>2]=c[M>>2];c[M>>2]=n}while(0);E=h;F=c[E+4>>2]|0;M=f+180|0;c[M>>2]=c[E>>2];c[M+4>>2]=F;if(!q){Ra=Q;return}else{E=q;g=h;M=r}}d:do if(!(vk(f,E)|0)){h=(a[P+164>>0]|0)==1?1:i;i=P+16|0;p=c[(c[i>>2]|0)+(M<<4)>>2]|0;n=(h|0)==1?34855:34585;o=c[f>>2]|0;do if(((a[o+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(t=c[o+312>>2]|0,t|0):0){n=$a[t&127](c[o+316>>2]|0,18,n,0,p,c[f+240>>2]|0)|0;if((n|0)==1){cd(f,39216,u);c[f+12>>2]=23;O=271;break d}if((n|2|0)==2)if(!n)break;else{O=271;break d}else{cd(f,39231,v);c[f+12>>2]=1;O=271;break d}}while(0);F=(k|0)==0;do if(((F?(w=d[39319+(h+(j<<1))>>0]|0,x=c[f>>2]|0,(a[x+165>>0]|0)==0):0)?(a[f+200>>0]|0)==0:0)?(y=c[x+312>>2]|0,y|0):0){n=$a[y&127](c[x+316>>2]|0,w,E,0,p,c[f+240>>2]|0)|0;if((n|0)==1){cd(f,39216,A);c[f+12>>2]=23;O=271;break d}if((n|2|0)==2)if(!n)break;else{O=271;break d}else{cd(f,39231,z);c[f+12>>2]=1;O=271;break d}}while(0);do if(!(a[f+200>>0]|0)){o=c[(c[i>>2]|0)+(M<<4)>>2]|0;p=c[f>>2]|0;e:do if(!(a[p+165>>0]|0)){h=f+4|0;q=p+24|0;r=(c[q>>2]&1|0)==0;s=p+16|0;A=c[(c[s>>2]|0)+12>>2]|0;a[p+78>>0]=a[A+77>>0]|0;if(!((b[A+78>>1]&1)==0?(m=eh(p,0,h,0)|0,(m|0)!=0):0))O=75;f:do if((O|0)==75){m=c[p+20>>2]|0;if((m|0)>1)do{n=m;m=m+-1|0;if((b[(c[(c[s>>2]|0)+(m<<4)+12>>2]|0)+78>>1]&1)==0?(B=eh(p,m,h,0)|0,B|0):0){m=B;break f}}while((n|0)>2);if(r)c[q>>2]=c[q>>2]&-2;if(!(a[p+89>>0]|0))break e;c[q>>2]=c[q>>2]|16;break e}while(0);c[f+12>>2]=m;O=f+36|0;c[O>>2]=(c[O>>2]|0)+1;O=270;break d}while(0);if(!(Sd(P,E,o)|0)){if(hi(P,E,o)|0){c[D>>2]=E;cd(f,39347,D);O=270;break d}if(P|0){O=119;break}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](80)|0;O=141;break}m=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){G=c[14978]|0;D=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;C=L()|0;c[14768]=((C|0)<0|(C|0)==0&D>>>0<=G>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){O=142;break}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n;break}if(!l){c[C>>2]=g;cd(f,39323,C);O=270;break d}p=c[f+116>>2]|0;p=(p|0)==0?f:p;m=p+84|0;n=c[m>>2]|0;o=1<<M;if(n&o|0){O=270;break d}c[m>>2]=n|o;if((M|0)!=1){O=270;break d}s=c[p>>2]|0;m=s+16|0;if(c[(c[m>>2]|0)+20>>2]|0){O=270;break d}if(a[p+199>>0]|0){O=270;break d}n=Pe(c[s>>2]|0,0,s,K,0,542)|0;if(n|0){cd(p,32157,G);c[p+12>>2]=n;O=270;break d}f=c[K>>2]|0;c[(c[m>>2]|0)+20>>2]=f;m=c[s+92>>2]|0;p=c[f+4>>2]|0;c[p+4>>2]=c[f>>2];if(!(b[p+22>>1]&2)){h=p+32|0;q=p+36|0;r=(c[h>>2]|0)-(c[q>>2]|0)|0;do if((m+-512|0)>>>0<65025?(m+-1&m|0)==0:0){c[h>>2]=m;o=p+80|0;m=c[o>>2]|0;if(!m)break;n=m+-4|0;c[o>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;f=(c[14820]|0)+1|0;c[14820]=f;c[14821]=(f|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;O=103;break}else{m=Wa[c[29352>>2]&127](n)|0;O=103}while(0);do if((O|0)==103){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[o>>2]=0}while(0);f=Se(c[p>>2]|0,h,r)|0;c[q>>2]=(c[h>>2]|0)-(r&65535);if((f|0)==7){m=s+81|0;do if(!(a[m>>0]|0)){if(a[s+82>>0]|0)break;a[m>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;m=s+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[s+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);O=270;break d}}O=270;break d}else O=119;while(0);g:do if((O|0)==119){if(c[P+272>>2]|0){if(a[P+81>>0]|0){O=142;break}}else{do if((e[P+276>>1]|0)>=80){n=P+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=141;break g}n=P+296|0;m=c[n>>2]|0;if(!m){m=P+292|0;break}else{c[n>>2]=c[m>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=141;break g}}else m=P+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(P,80,0)|0;O=141}while(0);if((O|0)==141)if(!m)O=142;if((O|0)==142){c[f+12>>2]=7;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;O=270;break}p=m+4|0;s=p+76|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));c[m>>2]=E;b[m+40>>1]=-1;n=c[(c[i>>2]|0)+(M<<4)+12>>2]|0;c[m+72>>2]=n;c[m+32>>2]=1;b[m+44>>1]=200;c[f+228>>2]=m;if((a[f+18>>0]|0)==0?(Bu(E,39382)|0)==0:0)c[n+72>>2]=m;if(a[H>>0]|0){Ra=Q;return}u=f+8|0;m=c[u>>2]|0;t=f+116|0;if(!m){o=c[f>>2]|0;if((c[t>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))O=161;else{Ra=Q;return}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;n=c[m>>2]|0;if(n|0){c[m>>2]=c[n>>2];H=o+284|0;c[H>>2]=(c[H>>2]|0)+1;break h}m=o+296|0;n=c[m>>2]|0;if(!n){m=o+292|0;break}else{c[m>>2]=c[n>>2];H=o+284|0;c[H>>2]=(c[H>>2]|0)+1;break h}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;O=161}while(0);if((O|0)==161)n=_d(o,224,0)|0;if(!n){Ra=Q;return}p=n+104|0;s=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(s|0));c[n>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=n;c[n+8>>2]=o;c[n+4>>2]=0;c[m>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[u>>2]=n;Di(n,61,0,1,0)|0;v=n}else v=m;s=c[t>>2]|0;s=(s|0)==0?f:s;m=s+84|0;n=c[m>>2]|0;g=1<<M;do if((((n&g|0)==0?(c[m>>2]=n|g,(M|0)==1):0)?(N=c[s>>2]|0,I=N+16|0,(c[(c[I>>2]|0)+20>>2]|0)==0):0)?(a[s+199>>0]|0)==0:0){m=Pe(c[N>>2]|0,0,N,K,0,542)|0;if(m|0){cd(s,32157,J);c[s+12>>2]=m;break}K=c[K>>2]|0;c[(c[I>>2]|0)+20>>2]=K;m=c[N+92>>2]|0;p=c[K+4>>2]|0;c[p+4>>2]=c[K>>2];if(!(b[p+22>>1]&2)){h=p+32|0;q=p+36|0;r=(c[h>>2]|0)-(c[q>>2]|0)|0;do if((m+-512|0)>>>0<65025?(m+-1&m|0)==0:0){c[h>>2]=m;o=p+80|0;m=c[o>>2]|0;if(!m)break;n=m+-4|0;c[o>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;K=(c[14820]|0)+1|0;c[14820]=K;c[14821]=(K|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;O=181;break}else{m=Wa[c[29352>>2]&127](n)|0;O=181}while(0);do if((O|0)==181){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{K=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[o>>2]=0}while(0);K=Se(c[p>>2]|0,h,r)|0;c[q>>2]=(c[h>>2]|0)-(r&65535);if((K|0)==7){m=N+81|0;do if(!(a[m>>0]|0)){if(a[N+82>>0]|0)break;a[m>>0]=1;if((c[N+180>>2]|0)>0)c[N+264>>2]=1;m=N+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[N+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);break}}}while(0);i=s+80|0;c[i>>2]=c[i>>2]|g;i=s+20|0;a[i>>0]=a[i>>0]|1;i=v+108|0;do if(!F){m=c[i>>2]|0;n=v+112|0;if((c[n>>2]|0)>(m|0)){c[i>>2]=m+1;p=c[v+104>>2]|0;a[p+(m*20|0)>>0]=-96;p=p+(m*20|0)+1|0;s=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));r=n;break}else{Di(v,160,0,0,0)|0;r=n;break}}else r=v+112|0;while(0);m=f+44|0;q=c[m>>2]|0;h=q+1|0;c[f+88>>2]=h;p=q+2|0;c[f+92>>2]=p;q=q+3|0;c[m>>2]=q;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;N=c[v+104>>2]|0;a[N+(m*20|0)>>0]=94;b[N+(m*20|0)+2>>1]=0;c[N+(m*20|0)+4>>2]=M;c[N+(m*20|0)+8>>2]=q;c[N+(m*20|0)+12>>2]=2;c[N+(m*20|0)+16>>2]=0;a[N+(m*20|0)+1>>0]=0}else Di(v,94,M,q,2)|0;N=v+152|0;c[N>>2]=c[N>>2]|g;if((M|0)!=1?a[(c[(c[(c[v>>2]|0)+16>>2]|0)+(M<<4)+4>>2]|0)+9>>0]|0:0){N=v+156|0;c[N>>2]=c[N>>2]|g}m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;o=c[v+104>>2]|0;a[o+(m*20|0)>>0]=18;b[o+(m*20|0)+2>>1]=0;c[o+(m*20|0)+4>>2]=q;c[o+(m*20|0)+8>>2]=0;c[o+(m*20|0)+12>>2]=0;c[o+(m*20|0)+16>>2]=0;a[o+(m*20|0)+1>>0]=0;o=m}else o=Di(v,18,q,0,0)|0;m=(0==0?(c[P+32>>2]&2|0)==0:0)?4:1;n=c[i>>2]|0;if((c[r>>2]|0)>(n|0)){c[i>>2]=n+1;N=c[v+104>>2]|0;a[N+(n*20|0)>>0]=95;b[N+(n*20|0)+2>>1]=0;c[N+(n*20|0)+4>>2]=M;c[N+(n*20|0)+8>>2]=2;c[N+(n*20|0)+12>>2]=m;c[N+(n*20|0)+16>>2]=0;a[N+(n*20|0)+1>>0]=0}else Di(v,95,M,2,m)|0;m=d[P+78>>0]|0;n=c[i>>2]|0;if((c[r>>2]|0)>(n|0)){c[i>>2]=n+1;P=c[v+104>>2]|0;a[P+(n*20|0)>>0]=95;b[P+(n*20|0)+2>>1]=0;c[P+(n*20|0)+4>>2]=M;c[P+(n*20|0)+8>>2]=5;c[P+(n*20|0)+12>>2]=m;c[P+(n*20|0)+16>>2]=0;a[P+(n*20|0)+1>>0]=0}else Di(v,95,M,5,m)|0;m=c[i>>2]|0;if(!(a[(c[v>>2]|0)+81>>0]|0))n=(c[v+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else n=59308;c[n+8>>2]=m;n=(c[r>>2]|0)>(m|0);do if(k|j)if(n){c[i>>2]=m+1;P=c[v+104>>2]|0;a[P+(m*20|0)>>0]=70;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=0;c[P+(m*20|0)+8>>2]=p;c[P+(m*20|0)+12>>2]=0;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0;break}else{Di(v,70,0,p,0)|0;break}else{if(n){c[i>>2]=m+1;P=c[v+104>>2]|0;a[P+(m*20|0)>>0]=-117;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=M;c[P+(m*20|0)+8>>2]=p;c[P+(m*20|0)+12>>2]=1;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0}else m=Di(v,139,M,p,1)|0;c[f+128>>2]=m}while(0);o=c[u>>2]|0;i:do if(!o){n=c[f>>2]|0;do if(!(c[t>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);j:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))O=238;else{o=0;break i}else{do if((e[n+276>>1]|0)>=224){m=n+300|0;o=c[m>>2]|0;if(o|0){c[m>>2]=c[o>>2];P=n+284|0;c[P>>2]=(c[P>>2]|0)+1;break j}m=n+296|0;o=c[m>>2]|0;if(!o){m=n+292|0;break}else{c[m>>2]=c[o>>2];P=n+284|0;c[P>>2]=(c[P>>2]|0)+1;break j}}else m=n+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;O=238}while(0);if((O|0)==238)o=_d(n,224,0)|0;if(!o){o=0;break}p=o+104|0;s=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(s|0));c[o>>2]=n;m=n+4|0;n=c[m>>2]|0;if(n|0)c[n+4>>2]=o;c[o+8>>2]=n;c[o+4>>2]=0;c[m>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[u>>2]=o;Di(o,61,0,1,0)|0}while(0);Hj(f,M,1,1,34585);n=o+108|0;m=c[n>>2]|0;if((c[o+112>>2]|0)>(m|0)){c[n>>2]=m+1;P=c[o+104>>2]|0;a[P+(m*20|0)>>0]=109;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=0;c[P+(m*20|0)+8>>2]=1;c[P+(m*20|0)+12>>2]=M;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0}else m=Di(o,109,0,1,M)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){P=c[o+104>>2]|0;a[P+(m*20|0)+1>>0]=-3;c[P+(m*20|0)+16>>2]=5}m=f+40|0;if(!(c[m>>2]|0))c[m>>2]=1;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=121;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=0;c[f+(m*20|0)+8>>2]=h;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(v,121,0,h,0)|0;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=75;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=6;c[f+(m*20|0)+8>>2]=q;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else m=Di(v,75,6,q,0)|0;do if(!(a[(c[v>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[i>>2]|0)+-1|0;n=c[v+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=39398;a[o>>0]=-1;break}else{Ei(v,n+(m*20|0)|0,39398,-1);break}}while(0);m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=122;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=0;c[f+(m*20|0)+8>>2]=q;c[f+(m*20|0)+12>>2]=h;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(v,122,0,q,h)|0;m=c[i>>2]|0;if((m|0)>0)b[(c[v+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=8;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;p=c[v+104>>2]|0;a[p+(m*20|0)>>0]=117;p=p+(m*20|0)+1|0;s=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));Ra=Q;return}else{Di(v,117,0,0,0)|0;Ra=Q;return}}else O=270;while(0);if((O|0)==270?P|0:0)O=271;if((O|0)==271){if(c[P+480>>2]|0){Xd(P,E);Ra=Q;return}f=E;if((c[P+304>>2]|0)>>>0<=f>>>0?(c[P+308>>2]|0)>>>0>f>>>0:0){f=P+300|0;c[E>>2]=c[f>>2];c[f>>2]=E;Ra=Q;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);Ra=Q;return}else{f=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);Ra=Q;return}}function cj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;da=Ra;Ra=Ra+272|0;$=da+192|0;_=da+184|0;Y=da+152|0;R=da+136|0;X=da+128|0;W=da+120|0;T=da+112|0;P=da+104|0;w=da+96|0;v=da+88|0;u=da+80|0;S=da+232|0;N=da;O=da+200|0;ba=c[f>>2]|0;Q=(j|0)==0;if((h|0)==0&Q){Ra=da;return}aa=f+228|0;ca=c[aa>>2]|0;if(!ca){Ra=da;return}if(((Q?(k=c[ca>>2]|0,r=Ru(k,95)|0,r|0):0)?(a[r>>0]=0,l=Sd(ba,k,0)|0,a[r>>0]=95,l|0):0)?c[l+56>>2]|0:0){q=c[c[l+60>>2]>>2]|0;n=c[ba+348>>2]|0;if(!n){l=ba+340|0;k=ba+344|0}else{l=a[q>>0]|0;if(!(l<<24>>24))k=0;else{k=0;m=q;do{m=m+1|0;k=G(k+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[m>>0]|0}while(l<<24>>24!=0)}k=(k>>>0)%((c[ba+336>>2]|0)>>>0)|0;l=n+(k<<3)|0;k=n+(k<<3)+4|0}l=c[l>>2]|0;a:do if(!l)k=59292;else{p=d[208+(d[q>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;l=l+-1|0;n=c[k+12>>2]|0;V=a[n>>0]|0;m=(d[208+(V&255)>>0]|0)-p|0;if(!(V<<24>>24==0|(m|0)!=0)){o=q;do{n=n+1|0;o=o+1|0;V=a[n>>0]|0;m=(d[208+(V&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(V<<24>>24==0|(m|0)!=0))}if(!m)break a;if(!l){k=59292;break}}}while(0);k=c[k+8>>2]|0;if(((k|0?(s=c[k>>2]|0,(c[s>>2]|0)>=3):0)?(t=c[s+92>>2]|0,t|0):0)?Wa[t&127](r+1|0)|0:0){V=ca+36|0;c[V>>2]=c[V>>2]|1024}}V=ba+165|0;do if(a[V>>0]|0)if(Q){M=c[ba+160>>2]|0;c[ca+28>>2]=M;if((M|0)!=1)break;M=ca+36|0;c[M>>2]=c[M>>2]|1;break}else{cd(f,59952,u);Ra=da;return}while(0);b:do if(i&32){k=ca+36|0;l=c[k>>2]|0;if(l&8|0){cd(f,39491,v);Ra=da;return}if(!(l&4)){c[w>>2]=c[ca>>2];cd(f,39541,w);break}c[k>>2]=l|96;M=c[f>>2]|0;v=c[f+8>>2]|0;u=M+166|0;if((a[u>>0]&2)==0?(x=b[ca+42>>1]|0,x<<16>>16>0):0){m=c[ca+4>>2]|0;l=x<<16>>16;k=0;do{if(a[m+(k<<4)+15>>0]&1)a[m+(k<<4)+12>>0]=2;k=k+1|0}while((k|0)!=(l|0))}k=c[f+128>>2]|0;if(k|0){if((k|0)<0)k=(c[v+108>>2]|0)+-1|0;if(!(a[(c[v>>2]|0)+81>>0]|0))k=(c[v+104>>2]|0)+(k*20|0)|0;else k=59308;c[k+12>>2]=2}l=ca+40|0;k=b[l>>1]|0;do if(k<<16>>16>-1){k=c[(c[ca+4>>2]|0)+(k<<16>>16<<4)>>2]|0;c[S>>2]=k;if(!k)k=0;else k=(Eu(k)|0)&1073741823;c[S+4>>2]=k;k=oj(M,59,S,0)|0;k=nj(c[f>>2]|0,0,k)|0;if((k|0?(a[k+16>>0]=a[f+198>>0]|0,hj(f,0,0,0,k,d[ca+48>>0]|0,0,0,0,0,2),(a[M+81>>0]|0)==0):0)?(c[f+36>>2]|0)==0:0){k=c[ca+8>>2]|0;c:do if(!k)k=0;else while(1){K=k+55|0;if(((d[K>>0]|d[K+1>>0]<<8)&3)==2)break c;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);b[l>>1]=-1;K=k;break}break b}else{k=c[ca+8>>2]|0;d:do if(!k)k=0;else while(1){K=k+55|0;if(((d[K>>0]|d[K+1>>0]<<8)&3)==2)break d;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);t=k+50|0;m=b[t>>1]|0;if((m&65535)>1){r=c[k+4>>2]|0;s=k+52|0;l=1;q=1;do{p=b[r+(q<<1)>>1]|0;e:do if((l|0)>0){n=r;o=l;while(1){if((b[n>>1]|0)==p<<16>>16)break;if((o|0)>1){n=n+2|0;o=o+-1|0}else{U=70;break e}}b[s>>1]=(b[s>>1]|0)+-1<<16>>16}else U=70;while(0);if((U|0)==70){U=0;b[r+(l<<1)>>1]=p;l=l+1|0;m=b[t>>1]|0}q=q+1|0}while(q>>>0<(m&65535)>>>0)}else l=1;b[t>>1]=l;K=k}while(0);I=K+55|0;k=d[I>>0]|d[I+1>>0]<<8;J=k|32;a[I>>0]=J;a[I+1>>0]=J>>8;if(!(a[u>>0]&2)){J=k|40;a[I>>0]=J;a[I+1>>0]=J>>8}m=b[K+50>>1]|0;J=m&65535;l=K+44|0;if(v|0?(y=c[l>>2]|0,(y|0)>0):0){if(!(a[(c[v>>2]|0)+81>>0]|0))k=(c[v+104>>2]|0)+(y*20|0)|0;else k=59308;a[k>>0]=11}c[l>>2]=c[ca+28>>2];k=c[ca+8>>2]|0;if(k|0){w=m<<16>>16==0;x=K+4|0;y=M+272|0;z=K+32|0;A=M+276|0;B=M+81|0;C=M+288|0;D=M+300|0;E=M+296|0;F=M+284|0;H=M+292|0;do{u=k+55|0;f:do if(((d[u>>0]|d[u+1>>0]<<8)&3)!=2){v=k+50|0;l=b[v>>1]|0;do if(!w){s=c[x>>2]|0;t=l&65535;if(!(l<<16>>16)){m=J;n=0}else{r=c[k+4>>2]|0;m=0;q=0;do{p=b[s+(q<<1)>>1]|0;n=r;o=t;while(1){if((b[n>>1]|0)==p<<16>>16)break;if((o|0)>1){n=n+2|0;o=o+-1|0}else{U=89;break}}if((U|0)==89){U=0;m=m+1|0}q=q+1|0}while((q|0)!=(J|0));n=l}if(!m){l=n;break}o=m+(n&65535)|0;p=k+52|0;if((o|0)>(e[p>>1]|0)){n=o*7|0;m=((n|0)<0)<<31>>31;g:do if(c[y>>2]|0)if(!(a[B>>0]|0))U=103;else break b;else{do if(0<m>>>0|(0==(m|0)?(e[A>>1]|0)>>>0<n>>>0:0))l=C;else{l=c[D>>2]|0;if(l|0){c[D>>2]=c[l>>2];c[F>>2]=(c[F>>2]|0)+1;break g}l=c[E>>2]|0;if(!l){l=H;break}c[E>>2]=c[l>>2];c[F>>2]=(c[F>>2]|0)+1;break g}while(0);c[l>>2]=(c[l>>2]|0)+1;U=103}while(0);if((U|0)==103){U=0;l=_d(M,n,m)|0}if(!l)break b;gw(l|0,0,n|0)|0;s=k+32|0;ew(l|0,c[s>>2]|0,e[p>>1]<<2|0)|0;c[s>>2]=l;m=l+(o<<2)|0;r=k+4|0;ew(m|0,c[r>>2]|0,e[p>>1]<<1|0)|0;c[r>>2]=m;m=m+(o<<1)|0;l=k+28|0;ew(m|0,c[l>>2]|0,e[p>>1]|0)|0;c[l>>2]=m;b[p>>1]=o;l=d[u>>0]|d[u+1>>0]<<8|16;a[u>>0]=l;a[u+1>>0]=l>>8;l=b[v>>1]|0;m=l&65535}else{m=t;r=k+4|0;s=k+32|0}n=0;while(1){p=c[r>>2]|0;q=b[(c[x>>2]|0)+(n<<1)>>1]|0;h:do if(!(l<<16>>16))U=111;else{o=p;l=l&65535;while(1){if((b[o>>1]|0)==q<<16>>16){l=m;break h}if((l|0)>1){o=o+2|0;l=l+-1|0}else{U=111;break}}}while(0);if((U|0)==111){U=0;b[p+(m<<1)>>1]=q;c[(c[s>>2]|0)+(m<<2)>>2]=c[(c[z>>2]|0)+(n<<2)>>2];l=m+1|0}n=n+1|0;if((n|0)==(J|0))break f;m=l;l=b[v>>1]|0}}while(0);b[k+52>>1]=l}while(0);k=c[k+20>>2]|0}while((k|0)!=0)}s=ca+42|0;l=b[s>>1]|0;p=l<<16>>16;t=K+52|0;if((J|0)<(p|0)){k=b[t>>1]|0;if((k&65535|0)<(p|0)){o=p*7|0;n=((o|0)<0)<<31>>31;i:do if(!M){M=Sv(o|0,n|0,-1,-1)|0;H=L()|0;if(H>>>0>0|(H|0)==0&M>>>0>2147483390)break b;if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;U=141;break}k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){M=c[14978]|0;H=Tv(m|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;F=L()|0;c[14768]=((F|0)<0|(F|0)==0&H>>>0<=M>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break b;m=Wa[c[29352>>2]&127](k)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[M+272>>2]|0){if(a[M+81>>0]|0)break b}else{do if(!(0<n>>>0|(0==(n|0)?(e[M+276>>1]|0)>>>0<o>>>0:0))){m=M+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];U=M+284|0;c[U>>2]=(c[U>>2]|0)+1;U=141;break i}m=M+296|0;k=c[m>>2]|0;if(!k){k=M+292|0;break}else{c[m>>2]=c[k>>2];U=M+284|0;c[U>>2]=(c[U>>2]|0)+1;U=141;break i}}else k=M+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(M,o,n)|0;U=141}while(0);if((U|0)==141)if(!k)break;gw(k|0,0,o|0)|0;M=K+32|0;ew(k|0,c[M>>2]|0,e[t>>1]<<2|0)|0;c[M>>2]=k;M=k+(p<<2)|0;k=K+4|0;ew(M|0,c[k>>2]|0,e[t>>1]<<1|0)|0;c[k>>2]=M;M=M+(p<<1)|0;k=K+28|0;ew(M|0,c[k>>2]|0,e[t>>1]|0)|0;c[k>>2]=M;b[t>>1]=l;k=d[I>>0]|d[I+1>>0]<<8|16;a[I>>0]=k;a[I+1>>0]=k>>8;k=l;l=b[s>>1]|0}if(l<<16>>16>0){q=K+4|0;r=K+32|0;p=0;k=J;do{o=c[q>>2]|0;j:do if((k|0)>0){m=o;n=k;while(1){if((p|0)==(b[m>>1]|0))break j;if((n|0)>1){m=m+2|0;n=n+-1|0}else{U=149;break}}}else U=149;while(0);if((U|0)==149){U=0;b[o+(k<<1)>>1]=p;c[(c[r>>2]|0)+(k<<2)>>2]=34049;k=k+1|0;l=b[s>>1]|0}p=p+1|0}while((p|0)<(l<<16>>16|0));k=b[t>>1]|0}}else{b[t>>1]=l;k=l}if(!(k<<16>>16)){l=-1;k=-1}else{m=c[K+4>>2]|0;k=k&65535;l=0;n=0;do{M=k;k=k+-1|0;H=b[m+(k<<1)>>1]|0;I=(H&65535)<63;H=cw(1,0,H<<16>>16|0)|0;J=L()|0;l=(I?H:0)|l;n=(I?J:0)|n}while((M|0)>1);l=~l;k=~n}M=K+64|0;c[M>>2]=l;c[M+4>>2]=k}while(0);F=ca+72|0;l=c[F>>2]|0;if(!l)E=-1e6;else{m=c[ba+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){E=k;break}else k=k+1|0}w=c[ca+24>>2]|0;if(w|0){k=O+8|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;k=N;n=k+80|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));c[N>>2]=1;c[N+16>>2]=c[ca>>2];c[N+24>>2]=ca;c[N+48>>2]=-1;c[O>>2]=f;c[O+4>>2]=N;q=O+24|0;b[q>>1]=4;k:do if((c[w>>2]|0)>0){r=S+4|0;s=S+8|0;t=S+12|0;u=S+24|0;v=O+20|0;p=0;k=4;while(1){o=c[w+4+(p*20|0)>>2]|0;if(o){m=k&65535;b[q>>1]=m&28655;k=c[O>>2]|0;c[S>>2]=k;c[r>>2]=125;c[s>>2]=126;c[t>>2]=0;c[u>>2]=O;n=o+24|0;l=k;M=l+208|0;N=(c[M>>2]|0)+(c[n>>2]|0)|0;c[M>>2]=N;l=c[(c[l>>2]|0)+120>>2]|0;if((l|0)<(N|0)){U=168;break}_j(S,o)|0;l=c[S>>2]|0;k=l+208|0;c[k>>2]=(c[k>>2]|0)-(c[n>>2]|0);k=b[q>>1]|0;N=o+4|0;c[N>>2]=c[N>>2]|k&-32752&65535;k=(m&36880|k&65535)&65535;b[q>>1]=k;if((c[v>>2]|0)>0)break;if((c[l+36>>2]|0)>=1)break k}p=p+1|0;if((p|0)>=(c[w>>2]|0))break k}if((U|0)==168){c[P>>2]=l;cd(k,41637,P)}}while(0)}D=ca+42|0;l=b[D>>1]|0;if(l<<16>>16>0){m=c[ca+4>>2]|0;k=0;l=l<<16>>16;while(1){k=k+(d[m+14>>0]|0)|0;if((l|0)>1){m=m+16|0;l=l+-1|0}else break}}else k=0;k=k+((e[ca+40>>1]|0)>>>15&65535)<<2;if(k>>>0<8)if(!k)k=0;else{m=40;l=0;do{m=(m&65535)+65526|0;k=cw(k|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&k>>>0<8);m=m&65535;U=189}else{if(k>>>0>255){m=40;l=0;do{m=(m&65535)+40|0;U=k;k=bw(k|0,l|0,4)|0;P=l;l=L()|0}while(P>>>0>0|(P|0)==0&U>>>0>4095);m=m&65535}else{m=40;l=0}if(l>>>0>0|(l|0)==0&k>>>0>15){do{m=(m&65535)+10&65535;U=k;k=bw(k|0,l|0,1)|0;P=l;l=L()|0}while(P>>>0>0|(P|0)==0&U>>>0>31);U=189}else U=189}if((U|0)==189)k=(m&65535)+65526+(e[3648+((k&7)<<1)>>1]|0)&65535;b[ca+46>>1]=k;k=c[ca+8>>2]|0;if(k|0)do{xk(k);k=c[k+20>>2]|0}while((k|0)!=0);if(!(a[V>>0]|0)){C=f+8|0;k=c[C>>2]|0;if(!k){m=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;l:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))U=209;else{Ra=da;return}else{do if((e[m+276>>1]|0)>=224){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];P=m+284|0;c[P>>2]=(c[P>>2]|0)+1;break l}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];P=m+284|0;c[P>>2]=(c[P>>2]|0)+1;break l}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;U=209}while(0);if((U|0)==209)l=_d(m,224,0)|0;if(!l){Ra=da;return}k=l+104|0;n=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));c[l>>2]=m;k=m+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[C>>2]=l;Di(l,61,0,1,0)|0;B=l}else B=k;u=B+108|0;k=c[u>>2]|0;v=B+112|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;n=c[B+104>>2]|0;a[n+(k*20|0)>>0]=117;k=n+(k*20|0)+1|0;n=k+19|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(n|0))}else Di(B,117,0,0,0)|0;A=(c[ca+12>>2]|0)==0;n=A?39573:39584;A=A?37991:39579;m:do if(Q){l=i<<24>>24==0?h:f+188|0;X=c[l>>2]|0;m=c[f+180>>2]|0;k=X-m|0;if((a[X>>0]|0)!=59)k=(c[l+4>>2]|0)+k|0;c[R>>2]=n;c[R+4>>2]=k;c[R+8>>2]=m;m=dd(ba,39589,R)|0;l=f+92|0;k=ca}else{l=f+44|0;t=c[l>>2]|0;p=t+1|0;s=t+2|0;t=t+3|0;c[l>>2]=t;l=c[f+116>>2]|0;a[((l|0)==0?f:l)+21>>0]=1;l=f+92|0;k=c[l>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;R=c[B+104>>2]|0;a[R+(m*20|0)>>0]=109;b[R+(m*20|0)+2>>1]=0;c[R+(m*20|0)+4>>2]=1;c[R+(m*20|0)+8>>2]=k;c[R+(m*20|0)+12>>2]=E;c[R+(m*20|0)+16>>2]=0;a[R+(m*20|0)+1>>0]=0}else Di(B,109,1,k,E)|0;o=c[u>>2]|0;if((o|0)>0)b[(c[B+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=16;c[f+40>>2]=2;k=o+1|0;if((c[v>>2]|0)>(o|0)){c[u>>2]=k;R=c[B+104>>2]|0;a[R+(o*20|0)>>0]=13;b[R+(o*20|0)+2>>1]=0;c[R+(o*20|0)+4>>2]=p;c[R+(o*20|0)+8>>2]=0;c[R+(o*20|0)+12>>2]=k;c[R+(o*20|0)+16>>2]=0;a[R+(o*20|0)+1>>0]=0}else Di(B,13,p,0,k)|0;m=f+36|0;do if(!(c[m>>2]|0)){k=yk(f,j)|0;if(!k)break;i=k+42|0;b[D>>1]=b[i>>1]|0;R=k+4|0;w=ca+4|0;c[w>>2]=c[R>>2];b[i>>1]=0;c[R>>2]=0;do if(!(c[ba+480>>2]|0)){i=k+32|0;R=(c[i>>2]|0)+-1|0;c[i>>2]=R;if(R|0)break;Vi(ba,k)}else Vi(ba,k);while(0);a[S>>0]=13;n=S+4|0;c[n>>2]=p;c[S+16>>2]=0;q=S+8|0;c[q>>2]=0;r=S+12|0;c[r>>2]=0;kj(f,j,S)|0;if(c[m>>2]|0)break;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=67;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=p;c[S+(k*20|0)+8>>2]=0;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,67,p,0,0)|0;m=c[B+12>>2]|0;a[m+19>>0]=0;c[m+28>>2]=0;m=c[u>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))k=(c[B+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=m;k=c[n>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;o=c[B+104>>2]|0;a[o+(m*20|0)>>0]=14;b[o+(m*20|0)+2>>1]=0;c[o+(m*20|0)+4>>2]=k;c[o+(m*20|0)+8>>2]=0;c[o+(m*20|0)+12>>2]=0;c[o+(m*20|0)+16>>2]=0;a[o+(m*20|0)+1>>0]=0;o=m}else o=Di(B,14,k,0,0)|0;n=c[q>>2]|0;k=c[r>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;S=c[B+104>>2]|0;a[S+(m*20|0)>>0]=92;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=n;c[S+(m*20|0)+8>>2]=k;c[S+(m*20|0)+12>>2]=s;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0}else Di(B,92,n,k,s)|0;zk(B,ca,0);k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=121;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=1;c[S+(k*20|0)+8>>2]=t;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,121,1,t,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=122;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=1;c[S+(k*20|0)+8>>2]=s;c[S+(k*20|0)+12>>2]=t;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,122,1,s,t)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=o;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,11,0,o,0)|0;m=c[u>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))k=(c[B+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=m;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;S=c[B+104>>2]|0;a[S+(m*20|0)>>0]=117;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=1;c[S+(m*20|0)+8>>2]=0;c[S+(m*20|0)+12>>2]=0;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0}else Di(B,117,1,0,0)|0;S=b[D>>1]|0;r=S<<16>>16;if(S<<16>>16>0){o=0;p=c[w>>2]|0;k=0;while(1){m=0;n=c[p>>2]|0;n:while(1){switch(a[n>>0]|0){case 0:break n;case 34:{m=m+1|0;break}default:{}}m=m+1|0;n=n+1|0}k=k+7+m|0;o=o+1|0;if((o|0)==(r|0)){n=k;break}else p=p+16|0}}else n=0;k=0;m=c[ca>>2]|0;o:while(1){switch(a[m>>0]|0){case 0:break o;case 34:{k=k+1|0;break}default:{}}k=k+1|0;m=m+1|0}x=n+2+k|0;z=(x|0)<50;q=z?59952:41687;y=z?41685:41691;z=z?34066:41696;x=(r*6|0)+35+x|0;S=Sv(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;j=L()|0;p:do if(!(j>>>0>0|(j|0)==0&S>>>0>2147483390)){do if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](x)|0;if(!m)break p}else{k=Wa[c[29356>>2]&127](x)|0;if((c[14985]|0)>>>0<x>>>0)c[14985]=x;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){S=c[14978]|0;j=Tv(m|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;R=L()|0;c[14768]=((R|0)<0|(R|0)==0&j>>>0<=S>>>0)&1}m=Wa[c[29340>>2]&127](k)|0;if(!m)break p;k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}while(0);Cb(x,m,41699,T)|0;k=(Eu(m)|0)&1073741823;u=c[ca>>2]|0;t=a[u>>0]|0;q:do if(!(t<<24>>24)){n=0;s=0}else{n=0;o=t;while(1){if(!(o<<24>>24==95?1:(a[880+(o&255)>>0]&6)!=0)){s=1;break q}n=n+1|0;o=a[u+n>>0]|0;if(!(o<<24>>24)){s=0;break}}}while(0);o=t&255;r:do if((o+-48|0)>>>0>=10){do if((n|0)>1){o=a[3952+((d[208+o>>0]<<2^n^(d[208+(d[u+(n+-1)>>0]|0)>>0]|0)*3|0)%127|0)>>0]|0;if(!(o<<24>>24))break;o=o&255;while(1){p=o+-1|0;s:do if((n|0)==(d[2064+p>>0]|0)){r=1136+(e[1776+(p<<1)>>1]|0)|0;o=0;while(1){if((a[u+o>>0]&-33)<<24>>24!=(a[r+o>>0]|0))break s;o=o+1|0;if((o|0)>=(n|0)){U=302;break r}}}while(0);o=a[4224+p>>0]|0;if(!(o<<24>>24))break;else o=o&255}}while(0);if(!((n|0)==0|s)){p=t;t=0}else U=302}else U=302;while(0);if((U|0)==302){a[m+k>>0]=34;k=k+1|0;p=a[u>>0]|0;t=1}n=k+1|0;o=m+k|0;if(p<<24>>24){s=0;r=u;do{a[o>>0]=p;if((a[r>>0]|0)==34){a[m+n>>0]=34;k=k+2|0}else k=n;s=s+1|0;r=u+s|0;p=a[r>>0]|0;n=k+1|0;o=m+k|0}while(p<<24>>24!=0)}if(t){a[o>>0]=34;k=n}o=k+1|0;a[m+k>>0]=40;k=x-o|0;n=m+o|0;if((b[D>>1]|0)>0){p=0;v=c[w>>2]|0;while(1){Cb(k,n,q,W)|0;k=((Eu(n)|0)&1073741823)+o|0;u=c[v>>2]|0;t=a[u>>0]|0;t:do if(!(t<<24>>24)){n=0;s=0}else{n=0;o=t;while(1){if(!(o<<24>>24==95?1:(a[880+(o&255)>>0]&6)!=0)){s=1;break t}n=n+1|0;o=a[u+n>>0]|0;if(!(o<<24>>24)){s=0;break}}}while(0);o=t&255;u:do if((o+-48|0)>>>0>=10){do if((n|0)>1){o=a[3952+((d[208+o>>0]<<2^n^(d[208+(d[u+(n+-1)>>0]|0)>>0]|0)*3|0)%127|0)>>0]|0;if(!(o<<24>>24))break;o=o&255;while(1){q=o+-1|0;v:do if((n|0)==(d[2064+q>>0]|0)){r=1136+(e[1776+(q<<1)>>1]|0)|0;o=0;while(1){if((a[u+o>>0]&-33)<<24>>24!=(a[r+o>>0]|0))break v;o=o+1|0;if((o|0)>=(n|0)){U=326;break u}}}while(0);o=a[4224+q>>0]|0;if(!(o<<24>>24))break;else o=o&255}}while(0);if(!((n|0)==0|s)){q=t;t=0}else U=326}else U=326;while(0);if((U|0)==326){U=0;a[m+k>>0]=34;k=k+1|0;q=a[u>>0]|0;t=1}n=k+1|0;o=m+k|0;if(q<<24>>24){s=0;r=u;do{a[o>>0]=q;if((a[r>>0]|0)==34){a[m+n>>0]=34;k=k+2|0}else k=n;s=s+1|0;r=u+s|0;q=a[r>>0]|0;n=k+1|0;o=m+k|0}while(q<<24>>24!=0)}if(t){a[o>>0]=34;k=n}T=m+k|0;a[T>>0]=0;n=c[18080+((a[v+13>>0]|0)+-65<<2)>>2]|0;o=(Eu(n)|0)&1073741823;ew(T|0,n|0,o|0)|0;o=o+k|0;p=p+1|0;k=x-o|0;n=m+o|0;if((p|0)<(b[D>>1]|0)){v=v+16|0;q=y}else break}}c[X>>2]=z;Cb(k,n,31408,X)|0;k=ca;break m}while(0);k=ba+81|0;if(a[k>>0]|0){m=0;k=ca;break m}if(a[ba+82>>0]|0){m=0;k=ca;break m}a[k>>0]=1;if((c[ba+180>>2]|0)>0)c[ba+264>>2]=1;k=ba+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[ba+236>>2]|0;if(!k){m=0;k=ca;break m}c[k+12>>2]=7;m=0;k=ca;break m}while(0);Ra=da;return}while(0);p=ba+16|0;U=c[k>>2]|0;W=c[l>>2]|0;X=c[f+88>>2]|0;c[Y>>2]=c[(c[p>>2]|0)+(E<<4)>>2];c[Y+4>>2]=34585;c[Y+8>>2]=A;c[Y+12>>2]=U;c[Y+16>>2]=U;c[Y+20>>2]=W;c[Y+24>>2]=m;c[Y+28>>2]=X;Ak(f,39604,Y);w:do if(m|0){if(c[ba+480>>2]|0){Xd(ba,m);break}l=m;do if((c[ba+304>>2]|0)>>>0<=l>>>0){if((c[ba+308>>2]|0)>>>0<=l>>>0)break;Y=ba+300|0;c[m>>2]=c[Y>>2];c[Y>>2]=m;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Y=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);l=c[C>>2]|0;m=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(E<<4)+12>>2]>>2]|0)+1|0;n=l+108|0;o=c[n>>2]|0;if((c[l+112>>2]|0)>(o|0)){c[n>>2]=o+1;Y=c[l+104>>2]|0;a[Y+(o*20|0)>>0]=95;b[Y+(o*20|0)+2>>1]=0;c[Y+(o*20|0)+4>>2]=E;c[Y+(o*20|0)+8>>2]=1;c[Y+(o*20|0)+12>>2]=m;c[Y+(o*20|0)+16>>2]=0;a[Y+(o*20|0)+1>>0]=0}else Di(l,95,E,1,m)|0;if(c[ca+36>>2]&8|0?(Z=c[p>>2]|0,(c[(c[Z+(E<<4)+12>>2]|0)+72>>2]|0)==0):0){c[_>>2]=c[Z+(E<<4)>>2];Ak(f,39691,_)}c[$>>2]=c[k>>2];Bk(B,E,dd(ba,39733,$)|0);if(!(a[V>>0]|0)){Ra=da;return}}else k=ca;if(mi((c[F>>2]|0)+8|0,c[k>>2]|0,ca)|0){k=ba+81|0;if(a[k>>0]|0){Ra=da;return}if(a[ba+82>>0]|0){Ra=da;return}a[k>>0]=1;if((c[ba+180>>2]|0)>0)c[ba+264>>2]=1;k=ba+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[ba+236>>2]|0;if(!k){Ra=da;return}c[k+12>>2]=7;Ra=da;return}c[aa>>2]=0;ba=ba+24|0;c[ba>>2]=c[ba>>2]|1;if(c[ca+12>>2]|0){Ra=da;return}k=c[f+180>>2]|0;o=(c[((c[g>>2]|0)==0?h:g)>>2]|0)-k|0;o=(o|0)>-1?k+o|0:-1;l=a[k>>0]|0;if(l<<24>>24!=0&o>>>0>k>>>0){n=0;while(1){m=k+1|0;if((l&255)>191){k=m;while(1){l=a[k>>0]|0;if((l&-64)<<24>>24==-128)k=k+1|0;else break}}else{k=m;l=a[m>>0]|0}if(l<<24>>24!=0&k>>>0<o>>>0)n=n+1|0;else break}k=n+14|0}else k=13;c[ca+52>>2]=k;Ra=da;return}function dj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+64|0;n=s;q=s+4|0;r=c[f>>2]|0;j=c[f+228>>2]|0;do if(j|0){m=c[j+4>>2]|0;l=(b[j+42>>1]|0)+-1|0;j=(d[r+165>>0]|0)+4&255;k=q+20|0;a[k>>0]=j;c[q+4>>2]=127;c[q+8>>2]=128;c[q+24>>2]=0;if(g){_j(q,g)|0;j=a[k>>0]|0}if(!(j<<24>>24)){c[n>>2]=c[m+(l<<4)>>2];cd(f,41761,n);break}o=m+(l<<4)+4|0;j=c[o>>2]|0;if(j|0)ni(r,j);j=q;k=j+52|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));a[q>>0]=-83;while(1)if(!(a[880+(d[h>>0]|0)>>0]&1))break;else h=h+1|0;j=i-h|0;a:do if((j|0)<=0)if(!h)j=0;else{k=j;p=15}else while(1){k=j+-1|0;if(!(a[880+(d[h+k>>0]|0)>>0]&1)){k=j;p=15;break a}if((j|0)>1)j=k;else{p=15;break}}while(0);b:do if((p|0)==15){m=Sv(k|0,((k|0)<0)<<31>>31|0,1,0)|0;n=L()|0;c:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))p=25;else{j=0;break b}else{do if(!(n>>>0>0|((n|0)==0?m>>>0>(e[r+276>>1]|0)>>>0:0))){l=r+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];i=r+284|0;c[i>>2]=(c[i>>2]|0)+1;break c}l=r+296|0;j=c[l>>2]|0;if(!j){j=r+292|0;break}else{c[l>>2]=c[j>>2];i=r+284|0;c[i>>2]=(c[i>>2]|0)+1;break c}}else j=r+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;p=25}while(0);if((p|0)==25)j=_d(r,m,n)|0;if(!j)j=0;else{ew(j|0,h|0,k|0)|0;a[j+k>>0]=0}}while(0);p=q+8|0;c[p>>2]=j;c[q+12>>2]=g;c[q+4>>2]=4096;j=dk(r,q,1,0)|0;c[o>>2]=j;j=c[p>>2]|0;do if(j|0){if(r|0){if(c[r+480>>2]|0){Xd(r,j);break}p=j;if((c[r+304>>2]|0)>>>0<=p>>>0?(c[r+308>>2]|0)>>>0>p>>>0:0){p=r+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0)}while(0);if((d[f+200>>0]|0)>1?(p=q+8|0,c[p>>2]=0,c[p+4>>2]=0,c[p+8>>2]=0,c[p+12>>2]=0,c[p+16>>2]=0,c[q>>2]=f,c[q+4>>2]=124,g|0):0)_j(q,g)|0;if(!g){Ra=s;return}ni(r,g);Ra=s;return}function ej(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;m=n;if(((g|0)==44?(c[f+36>>2]|0)==0:0)?(d[f+200>>0]|0)<=1:0){j=Xk(c[f>>2]|0,h,i)|0;if(!j){m=0;Ra=n;return m|0}else k=f}else l=4;a:do if((l|0)==4){j=c[f>>2]|0;b:do if(c[j+272>>2]|0){if(!(a[j+81>>0]|0))l=14}else{do if((e[j+276>>1]|0)>=52){k=j+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=15;break b}k=j+296|0;l=c[k>>2]|0;if(!l){k=j+292|0;break}else{c[k>>2]=c[l>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=15;break b}}else k=j+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;l=14}while(0);if((l|0)==14){j=_d(j,52,0)|0;l=15}do if((l|0)==15){if(!j){j=c[f>>2]|0;break}k=j;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[j>>0]=g;b[j+34>>1]=-1;if(!i)k=0;else{c[j+16>>2]=i;k=c[i+4>>2]&2097412;c[j+4>>2]=k}if(h|0){c[j+12>>2]=h;c[j+4>>2]=k|c[h+4>>2]&2097412}Ym(j);k=f;break a}while(0);if(h|0)ni(j,h);if(!i){m=0;Ra=n;return m|0}ni(j,i);m=0;Ra=n;return m|0}while(0);k=c[(c[k>>2]|0)+120>>2]|0;if((k|0)>=(c[j+24>>2]|0)){m=j;Ra=n;return m|0}c[m>>2]=k;cd(f,41637,m);m=j;Ra=n;return m|0}function fj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=h;l=c[f>>2]|0;m=i+53|0;a:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))p=11;else{q=0;return q|0}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<m>>>0:0))){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=k;break a}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=k;break a}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;p=11}while(0);if((p|0)==11)o=_d(l,m,0)|0;if(!o){q=o;return q|0}a[o>>0]=g;a[o+1>>0]=0;k=o+4|0;c[k>>2]=8388608;b[o+34>>1]=-1;c[o+16>>2]=0;c[o+12>>2]=0;c[o+20>>2]=0;c[o+40>>2]=0;c[o+44>>2]=0;a[o+38>>0]=0;c[o+28>>2]=0;b[o+32>>1]=0;j=o+52|0;g=o+8|0;c[g>>2]=j;ew(j|0,h|0,i|0)|0;a[j+i>>0]=0;g=c[g>>2]|0;j=a[g>>0]|0;if(((a[880+(j&255)>>0]|0)<0?(c[k>>2]=(j<<24>>24==34?67108928:67108864)|c[k>>2],g|0):0)?(n=a[g>>0]|0,(a[880+(n&255)>>0]|0)<0):0){m=n<<24>>24==91?93:n;l=0;j=1;while(1){k=a[g+j>>0]|0;if(k<<24>>24==m<<24>>24){j=j+1|0;k=g+l|0;if((a[g+j>>0]|0)!=m<<24>>24)break;a[k>>0]=m}else a[g+l>>0]=k;l=l+1|0;j=j+1|0}a[k>>0]=0}c[o+24>>2]=1;if((d[f+200>>0]|0)<=1){q=o;return q|0}l=c[f>>2]|0;b:do if(!l){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;p=47;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){n=c[14978]|0;h=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=n>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){q=o;return q|0}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){q=o;return q|0}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=47;break b}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=47;break b}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(l,16,0)|0;p=47}while(0);if((p|0)==47)if(!j){q=o;return q|0}c[j>>2]=o;c[j+4>>2]=q;c[j+8>>2]=i;q=f+272|0;c[j+12>>2]=c[q>>2];c[q>>2]=j;q=o;return q|0}function gj(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;w=B+8|0;k=B;y=c[e+228>>2]|0;do if(!y)A=60;else{z=y+36|0;j=c[z>>2]|0;if(j&4|0){c[k>>2]=c[y>>2];cd(e,41817,k);A=60;break}x=j|4;c[z>>2]=x;if(f){v=c[f>>2]|0;if((v|0)>0){t=y+42|0;u=y+4|0;l=0;m=-1;s=0;while(1){j=c[f+4+(s*20|0)>>2]|0;a:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break a;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);k=a[j>>0]|0;switch(k<<24>>24){case 110:{a[j>>0]=59;A=20;break}case 106:{k=c[j+12>>2]|0;if((a[k>>0]|0)==110){a[k>>0]=59;k=a[j>>0]|0;A=19}else j=m;break}default:A=19}if((A|0)==19){A=0;if(k<<24>>24==59)A=20;else j=m}b:do if((A|0)==20){A=0;o=c[j+8>>2]|0;j=b[t>>1]|0;if(j<<16>>16>0){r=c[u>>2]|0;n=a[o>>0]|0;q=a[208+(n&255)>>0]|0;p=j<<16>>16;c:do if(!(n<<24>>24)){j=0;while(1){if(q<<24>>24==(a[208+(d[c[r+(j<<4)>>2]>>0]|0)>>0]|0))break c;j=j+1|0;if((j|0)>=(p|0))break b}}else{j=0;while(1){k=c[r+(j<<4)>>2]|0;if(q<<24>>24==(a[208+(d[k>>0]|0)>>0]|0)){m=o;do{m=m+1|0;k=k+1|0;C=a[m>>0]|0;n=(d[208+(C&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(n|0)!=0));if(!n)break c}j=j+1|0;if((j|0)>=(p|0))break b}}while(0);l=r+(j<<4)+15|0;a[l>>0]=a[l>>0]|1;l=r+(j<<4)|0}else j=0}while(0);s=s+1|0;if((s|0)==(v|0))break;else m=j}m=(v|0)==1;n=j;A=34}}else{n=(b[y+42>>1]|0)+-1|0;l=c[y+4>>2]|0;m=l+(n<<4)+15|0;a[m>>0]=a[m>>0]|1;m=1;l=l+(n<<4)|0;A=34}if((A|0)==34?m&(l|0)!=0:0){if(!(a[l+15>>0]&4))k=59952;else{k=c[l>>2]|0;k=k+(Eu(k)|0)+1|0}C=a[k>>0]|0;j=(d[208+(C&255)>>0]|0)+-105|0;if(!(C<<24>>24==0|(j|0)!=0)){l=31453;do{k=k+1|0;l=l+1|0;C=a[k>>0]|0;j=(d[208+(C&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(j|0)!=0))}if((i|0)!=1&(j|0)==0){m=(f|0)!=0;d:do if(m&(d[e+200>>0]|0)>1){j=c[f+4>>2]|0;e:do if(!j)l=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096)){l=j;break e}if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){l=0;break}}while(0);j=y+40|0;k=c[e+272>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break d}c[k>>2]=j}}else j=y+40|0;while(0);b[j>>1]=n;a[y+48>>0]=g;c[z>>2]=x|h<<3;if(m){a[e+198>>0]=a[f+16>>0]|0;break}else{Ra=B;return}}}if(h|0){cd(e,41858,w);A=60;break}hj(e,0,0,0,f,g,0,0,i,0,2);Ra=B;return}while(0);if((A|0)==60?(f|0)==0:0){Ra=B;return}ri(c[e>>2]|0,f);Ra=B;return}function hj(f,g,h,i,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;ya=Ra;Ra=Ra+416|0;ta=ya+320|0;sa=ya+296|0;ra=ya+280|0;oa=ya+272|0;na=ya+256|0;ma=ya+248|0;ga=ya+240|0;fa=ya+232|0;ba=ya+224|0;aa=ya+216|0;Y=ya+208|0;U=ya+200|0;T=ya+192|0;S=ya+184|0;Q=ya+176|0;P=ya+168|0;M=ya+160|0;N=ya+152|0;K=ya+144|0;J=ya+136|0;I=ya+128|0;H=ya+120|0;G=ya+112|0;D=ya+104|0;A=ya+96|0;y=ya+88|0;x=ya+80|0;pa=ya+384|0;_=ya;$=ya+352|0;B=ya+328|0;xa=c[f>>2]|0;la=xa+81|0;a:do if(((a[la>>0]|0)==0?(ca=f+36|0,(c[ca>>2]|0)<=0):0)?(ua=f+200|0,da=p<<24>>24==2,da|(a[ua>>0]|0)!=1):0){va=xa+165|0;b:do if(!(a[va>>0]|0)){s=f+4|0;t=xa+24|0;u=(c[t>>2]&1|0)==0;v=xa+16|0;qa=c[(c[v>>2]|0)+12>>2]|0;a[xa+78>>0]=a[qa+77>>0]|0;if(!((b[qa+78>>1]&1)==0?(q=eh(xa,0,s,0)|0,(q|0)!=0):0))wa=7;c:do if((wa|0)==7){q=c[xa+20>>2]|0;if((q|0)>1)do{r=q;q=q+-1|0;if((b[(c[(c[v>>2]|0)+(q<<4)+12>>2]|0)+78>>1]&1)==0?(w=eh(xa,q,s,0)|0,w|0):0){q=w;break c}}while((r|0)>2);if(u)c[t>>2]=c[t>>2]&-2;if(!(a[xa+89>>0]|0))break b;c[t>>2]=c[t>>2]|16;break b}while(0);c[f+12>>2]=q;c[ca>>2]=(c[ca>>2]|0)+1;r=m;q=0;wa=468;break a}while(0);qa=(i|0)!=0;d:do if(qa){q=c[f>>2]|0;z=h+4|0;if(c[z>>2]|0){if(a[q+165>>0]|0){cd(f,39404,x);r=m;q=0;wa=468;break a}q=wk(q,g)|0;if((q|0)<0){c[y>>2]=g;cd(f,39421,y);r=m;q=0;wa=468;break a}else{u=q;g=h}}else u=d[q+164>>0]|0;y=i+8|0;e:do if(!(a[va>>0]|0)){r=c[y>>2]|0;if(!r)q=i+12|0;else{s=c[(c[f>>2]|0)+16>>2]|0;q=0;while(1)if((c[s+(q<<4)+12>>2]|0)==(r|0))break;else q=q+1|0;q=s+(q<<4)|0}x=bd(f,0,c[i+16>>2]|0,c[q>>2]|0)|0;q=c[f>>2]|0;r=i+24|0;s=c[r>>2]|0;do if(s|0){if(q|0?c[q+480>>2]|0:0){Vi(q,s);break}ja=s+32|0;ka=(c[ja>>2]|0)+-1|0;c[ja>>2]=ka;if(!ka)Vi(q,s)}while(0);c[r>>2]=x;if(x){ka=x+32|0;c[ka>>2]=(c[ka>>2]|0)+1;f:do if(a[i+45>>0]&2){v=c[i+72>>2]|0;q=c[x+8>>2]|0;g:do if(q|0){w=d[208+(d[v>>0]|0)>>0]|0;while(1){s=c[q>>2]|0;ka=a[s>>0]|0;r=(d[208+(ka&255)>>0]|0)-w|0;if(!(ka<<24>>24==0|(r|0)!=0)){t=v;do{s=s+1|0;t=t+1|0;ka=a[s>>0]|0;r=(d[208+(ka&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(r|0)!=0))}if(!r)break;q=c[q+20>>2]|0;if(!q)break g}c[i+76>>2]=q;break f}while(0);c[A>>2]=v;c[A+4>>2]=0;cd(f,41107,A);a[f+17>>0]=1;break e}while(0);if(!(c[z>>2]|0))u=(c[x+72>>2]|0)==(c[(c[xa+16>>2]|0)+28>>2]|0)?1:u}}while(0);t=c[f>>2]|0;c[B>>2]=f;t=c[t+16>>2]|0;c[B+12>>2]=c[t+(u<<4)>>2];c[B+4>>2]=c[t+(u<<4)+12>>2];c[B+16>>2]=41914;c[B+20>>2]=g;t=(u|0)==1;c[B+8>>2]=t&1;al(B,i)|0;r=c[y>>2]|0;if(!r)q=i+12|0;else{s=c[(c[f>>2]|0)+16>>2]|0;q=0;while(1)if((c[s+(q<<4)+12>>2]|0)==(r|0))break;else q=q+1|0;q=s+(q<<4)|0}r=bd(f,0,c[i+16>>2]|0,c[q>>2]|0)|0;if(!r){r=m;q=0;wa=468;break a}if(t?(c[(c[xa+16>>2]|0)+28>>2]|0)!=(c[r+72>>2]|0):0){c[D>>2]=c[r>>2];cd(f,41920,D);r=m;q=0;wa=468;break a}if((c[r+36>>2]&32|0)!=0?(C=c[r+8>>2]|0,(C|0)!=0):0){q=C;while(1){ka=q+55|0;if(((d[ka>>0]|d[ka+1>>0]<<8)&3)==2){ka=r;Z=q;ja=u;ha=g;break d}q=c[q+20>>2]|0;if(!q){ka=r;Z=0;ja=u;ha=g;break}}}else{ka=r;Z=0;ja=u;ha=g}}else{q=c[f+228>>2]|0;if(!q){r=m;q=0;wa=468;break a}r=c[q+72>>2]|0;if(!r){ka=q;Z=0;ja=-1e6;ha=0}else{s=c[xa+16>>2]|0;t=0;while(1)if((c[s+(t<<4)+12>>2]|0)==(r|0)){ka=q;Z=0;ja=t;ha=0;break}else t=t+1|0}}while(0);ia=xa+16|0;A=c[ia>>2]|0;t=A+(ja<<4)|0;s=c[ka>>2]|0;do if(s|0){q=a[s>>0]|0;h:do if(!(q<<24>>24)){q=39441;wa=69}else{ea=q&255;q=208+ea|0;do if((ea|32|0)==115){q=a[s+1>>0]|0;if(!(q<<24>>24)){q=39442;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==113){q=a[s+2>>0]|0;if(!(q<<24>>24)){q=39443;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==108){q=a[s+3>>0]|0;if(!(q<<24>>24)){q=39444;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==105){q=a[s+4>>0]|0;if(!(q<<24>>24)){q=39445;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==116){q=a[s+5>>0]|0;if(!(q<<24>>24)){q=39446;wa=69;break h}q=q&255;if((q|32|0)!=101){r=101;q=208+q|0;break}q=a[s+6>>0]|0;if(!(q<<24>>24)){q=39447;wa=69;break h}if(q<<24>>24==95)break h;else{r=95;q=208+(q&255)|0}}else r=116}else r=105}else r=108}else r=113}else r=115;while(0);F=d[q>>0]|0;E=r;wa=73}while(0);if((wa|0)==69){F=0;E=a[208+(d[q>>0]|0)>>0]|0;wa=73}if((wa|0)==73?(F|0)!=(E&255|0):0)break;if(qa&(a[va>>0]|0)==0){c[G>>2]=s;cd(f,41970,G);r=m;q=0;wa=468;break a}}while(0);if(c[ka+12>>2]|0){cd(f,41998,H);r=m;q=0;wa=468;break}if(c[ka+56>>2]|0){cd(f,42023,I);r=m;q=0;wa=468;break}if(!ha){q=c[ka+8>>2]|0;if(!q)q=1;else{r=1;do{r=r+1|0;q=c[q+20>>2]|0}while((q|0)!=0);q=r}c[M>>2]=s;c[M+4>>2]=q;q=dd(xa,42115,M)|0;if(!q){r=m;q=0;wa=468;break}if(a[ua>>0]|0){r=q+7|0;a[r>>0]=(a[r>>0]|0)+1<<24>>24;r=a[ua>>0]|0;if((r&255)<=1)wa=124}else{r=0;wa=124}}else{y=qj(xa,ha)|0;if(!y){r=m;q=0;wa=468;break}if(vk(f,y)|0){r=m;q=y;wa=468;break}r=a[ua>>0]|0;if((r&255)<=1){if((a[va>>0]|0)==0?Sd(xa,y,0)|0:0){c[J>>2]=y;cd(f,42057,J);r=m;q=y;wa=468;break}if(!(hi(xa,y,c[t>>2]|0)|0)){q=y;wa=124}else{if(!o){c[K>>2]=y;cd(f,42091,K);r=m;q=y;wa=468;break}t=c[f+116>>2]|0;t=(t|0)==0?f:t;q=t+84|0;r=c[q>>2]|0;s=1<<ja;if(r&s|0){r=m;q=y;wa=468;break}c[q>>2]=r|s;if((ja|0)!=1){r=m;q=y;wa=468;break}x=c[t>>2]|0;q=x+16|0;if(c[(c[q>>2]|0)+20>>2]|0){r=m;q=y;wa=468;break}if(a[t+199>>0]|0){r=m;q=y;wa=468;break}r=Pe(c[x>>2]|0,0,x,pa,0,542)|0;if(r|0){cd(t,32157,N);c[t+12>>2]=r;r=m;q=y;wa=468;break}k=c[pa>>2]|0;c[(c[q>>2]|0)+20>>2]=k;q=c[x+92>>2]|0;t=c[k+4>>2]|0;c[t+4>>2]=c[k>>2];do if(!(b[t+22>>1]&2)){u=t+32|0;v=t+36|0;w=(c[u>>2]|0)-(c[v>>2]|0)|0;do if((q+-512|0)>>>0<65025){if(q+-1&q|0)break;c[u>>2]=q;s=t+80|0;q=c[s>>2]|0;if(!q)break;r=q+-4|0;c[s>>2]=r;q=r;do if((c[14816]|0)>>>0<=q>>>0)if((c[14817]|0)>>>0>q>>>0){c[14979]=(c[14979]|0)+-1;c[r>>2]=c[14819];c[14819]=r;k=(c[14820]|0)+1|0;c[14820]=k;c[14821]=(k|0)<(c[14815]|0)&1;break}else{q=Wa[c[29352>>2]&127](r)|0;wa=105;break}else{q=Wa[c[29352>>2]&127](r)|0;wa=105}while(0);do if((wa|0)==105){c[14980]=(c[14980]|0)-q;if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);c[s>>2]=0}while(0);wa=Se(c[t>>2]|0,u,w)|0;c[v>>2]=(c[u>>2]|0)-(w&65535);if((wa|0)!=7)break;q=x+81|0;do if(!(a[q>>0]|0)){if(a[x+82>>0]|0)break;a[q>>0]=1;if((c[x+180>>2]|0)>0)c[x+264>>2]=1;q=x+272|0;c[q>>2]=(c[q>>2]|0)+1;q=c[x+236>>2]|0;if(!q)break;c[q+12>>2]=7}while(0);r=m;q=y;wa=468;break a}while(0);r=m;q=y;wa=468;break}}else q=y}do if((wa|0)==124){w=c[t>>2]|0;v=(ja|0)==1;s=v?34855:34585;t=c[f>>2]|0;u=a[t+165>>0]|0;if((u|r)<<24>>24==0?(O=c[t+312>>2]|0,(O|0)!=0):0){r=$a[O&127](c[t+316>>2]|0,18,s,0,w,c[f+240>>2]|0)|0;if((r|0)==1){cd(f,39216,P);c[f+12>>2]=23;r=m;wa=468;break a}if((r|2|0)!=2){cd(f,39231,Q);c[f+12>>2]=1;r=m;wa=468;break a}if(r|0){r=m;wa=468;break a}t=c[f>>2]|0;u=a[t+165>>0]|0}s=v?3:1;r=c[ka>>2]|0;if((u<<24>>24==0?(a[ua>>0]|0)==0:0)?(R=c[t+312>>2]|0,(R|0)!=0):0){r=$a[R&127](c[t+316>>2]|0,s,q,r,w,c[f+240>>2]|0)|0;if((r|0)==1){cd(f,39216,S);c[f+12>>2]=23;r=m;wa=468;break a}if((r|2|0)==2)if(!r)break;else{r=m;wa=468;break a}else{cd(f,39231,T);c[f+12>>2]=1;r=m;wa=468;break a}}}while(0);if(j){if((c[j>>2]|0)>(c[(c[f>>2]|0)+116>>2]|0)){c[U>>2]=41914;cd(f,44753,U)}if(!(c[ca>>2]|0))T=j;else{r=m;wa=468;break}}else{ea=c[ka+4>>2]|0;j=(b[ka+42>>1]|0)+-1|0;X=ea+(j<<4)+15|0;a[X>>0]=a[X>>0]|8;j=c[ea+(j<<4)>>2]|0;c[pa>>2]=j;if(!j)j=0;else j=(Eu(j)|0)&1073741823;c[pa+4>>2]=j;r=oj(xa,59,pa,0)|0;r=nj(c[f>>2]|0,0,r)|0;if(!r){r=m;j=0;wa=468;break}if((n|0)<0)j=r;else{a[r+4+(((c[r>>2]|0)+-1|0)*20|0)+12>>0]=n;j=r}T=r}u=c[j>>2]|0;if((u|0)>0){t=0;r=0;do{s=c[T+4+(t*20|0)>>2]|0;if((a[s>>0]|0)==106){s=c[s+8>>2]|0;if(!s)s=0;else s=(Eu(s)|0)&1073741823;r=r+1+s|0}t=t+1|0}while((t|0)!=(u|0));if(!q)t=0;else wa=160}else{r=0;wa=160}if((wa|0)==160)t=(Eu(q)|0)&1073741823;V=(Z|0)!=0;if(V)s=e[Z+50>>1]|0;else s=1;y=s+u|0;v=y&65535;y=y<<16;w=y>>16;x=(y>>14)+7&-8;y=y>>15;g=y+2|0;h=x+72+(w+7+y+g&-8)|0;z=t+1|0;u=z+r+h|0;t=((u|0)<0)<<31>>31;ea=(xa|0)==0;i:do if(ea){X=Sv(u|0,t|0,-1,-1)|0;W=L()|0;if(!(W>>>0>0|(W|0)==0&X>>>0>2147483390)){if(!(c[7324]|0)){r=Wa[c[29340>>2]&127](u)|0;wa=187;break}r=Wa[c[29356>>2]&127](u)|0;if((c[14985]|0)>>>0<u>>>0)c[14985]=u;t=59064;s=c[t>>2]|0;t=c[t+4>>2]|0;if((t|0)>0|(t|0)==0&s>>>0>0){X=c[14978]|0;W=Tv(s|0,t|0,r|0,((r|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&W>>>0<=X>>>0)&1}r=Wa[c[29340>>2]&127](r)|0;if(r){s=Wa[c[29352>>2]&127](r)|0;s=(c[14978]|0)+s|0;c[14978]=s;if(s>>>0>(c[14982]|0)>>>0)c[14982]=s;s=(c[14981]|0)+1|0;c[14981]=s;if(s>>>0<=(c[14987]|0)>>>0){wa=188;break}c[14987]=s;wa=188}else{s=0;t=0;r=0}}else{s=0;t=0;r=0}}else{if(c[xa+272>>2]|0){if(a[la>>0]|0){r=m;j=T;wa=468;break a}}else{do if(!(0<t>>>0|(0==(t|0)?(e[xa+276>>1]|0)>>>0<u>>>0:0))){s=xa+300|0;r=c[s>>2]|0;if(r|0){c[s>>2]=c[r>>2];wa=xa+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=187;break i}s=xa+296|0;r=c[s>>2]|0;if(!r){r=xa+292|0;break}else{c[s>>2]=c[r>>2];wa=xa+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=187;break i}}else r=xa+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1}r=_d(xa,u,t)|0;wa=187}while(0);if((wa|0)==187)if(!r){s=0;t=0;r=0}else wa=188;if((wa|0)==188){gw(r|0,0,u|0)|0;s=r+72|0;c[r+32>>2]=s;s=s+x|0;c[r+8>>2]=s;s=s+g|0;c[r+4>>2]=s;c[r+28>>2]=s+y;b[r+52>>1]=v;b[r+50>>1]=w+65535;s=r;t=r+h|0}j:do if(!(a[la>>0]|0)){c[s>>2]=t;U=t;x=U+z|0;ew(U|0,q|0,z|0)|0;U=s+12|0;c[U>>2]=ka;W=s+54|0;a[W>>0]=k;X=s+55|0;p=p&3;n=((k|0)!=0&1)<<3&65535|p|(d[X>>0]|d[X+1>>0]<<8)&-12;a[X>>0]=n;a[X+1>>0]=n>>8;c[s+24>>2]=c[(c[ia>>2]|0)+(ja<<4)+12>>2];n=s+50|0;b[n>>1]=c[j>>2];if(m|0){c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;c[$+16>>2]=0;c[$+20>>2]=0;c[$+24>>2]=0;c[$+28>>2]=0;h=_;z=h+80|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));if(ka|0){c[_>>2]=1;c[_+16>>2]=c[ka>>2];c[_+24>>2]=ka;c[_+48>>2]=-1}c[$>>2]=f;c[$+4>>2]=_;j=$+24|0;b[j>>1]=2;c[pa>>2]=f;c[pa+4>>2]=125;c[pa+8>>2]=126;c[pa+12>>2]=0;c[pa+24>>2]=$;t=m+24|0;u=f+208|0;S=(c[u>>2]|0)+(c[t>>2]|0)|0;c[u>>2]=S;u=c[(c[f>>2]|0)+120>>2]|0;if((u|0)<(S|0)){c[Y>>2]=u;cd(f,41637,Y)}else{_j(pa,m)|0;Y=(c[pa>>2]|0)+208|0;c[Y>>2]=(c[Y>>2]|0)-(c[t>>2]|0);Y=m+4|0;c[Y>>2]=c[Y>>2]|b[j>>1]&-32752&65535}c[s+36>>2]=m}g=(d[(c[A+(ja<<4)+12>>2]|0)+76>>0]|0)>3;if((d[ua>>0]|0)>1){c[s+40>>2]=T;j=0}else j=T;k:do if(!(b[n>>1]|0)){u=0;w=0}else{A=(ka|0)==0;B=$+4|0;C=$+24|0;D=_+16|0;E=_+24|0;F=_+48|0;G=pa+4|0;H=pa+8|0;I=pa+12|0;o=pa+24|0;J=f+228|0;K=ka+40|0;M=s+4|0;N=ka+4|0;O=s+40|0;P=s+32|0;Q=s+28|0;R=f;S=f+208|0;y=T+4|0;u=0;while(1){w=c[y>>2]|0;l:do switch(a[w>>0]|0){case 110:{a[w>>0]=59;break}case 106:{t=c[w+12>>2]|0;if((a[t>>0]|0)!=110)break l;a[t>>0]=59;break}default:{}}while(0);c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;c[$+16>>2]=0;c[$+20>>2]=0;c[$+24>>2]=0;c[$+28>>2]=0;h=_;z=h+80|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));if(!A){c[_>>2]=1;c[D>>2]=c[ka>>2];c[E>>2]=ka;c[F>>2]=-1}c[$>>2]=f;c[B>>2]=_;b[C>>1]=32;do if(w|0){b[C>>1]=32;c[pa>>2]=R;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[o>>2]=$;t=w+24|0;m=(c[S>>2]|0)+(c[t>>2]|0)|0;c[S>>2]=m;v=c[(c[f>>2]|0)+120>>2]|0;if((v|0)<(m|0)){c[aa>>2]=v;cd(f,41637,aa);break}else{_j(pa,w)|0;m=(c[pa>>2]|0)+208|0;c[m>>2]=(c[m>>2]|0)-(c[t>>2]|0);m=w+4|0;c[m>>2]=c[m>>2]|b[C>>1]&-32752&65535;break}}while(0);if(c[ca>>2]|0){u=0;v=s;t=r;break j}t=c[y>>2]|0;m:do if(!t)t=0;else while(1){v=c[t+4>>2]|0;if(!(v&4096))break m;if(!(v&262144))t=t+12|0;else t=(c[t+20>>2]|0)+4|0;t=c[t>>2]|0;if(!t){t=0;break}}while(0);if((a[t>>0]|0)==-94){m=b[t+32>>1]|0;t=m<<16>>16;do if(m<<16>>16<0)t=b[K>>1]|0;else{if(a[(c[N>>2]|0)+(t<<4)+12>>0]|0)break;m=(d[X>>0]|d[X+1>>0]<<8)&-9;a[X>>0]=m;a[X+1>>0]=m>>8}while(0);b[(c[M>>2]|0)+(u<<1)>>1]=t}else{if((ka|0)==(c[J>>2]|0))break;if(!(c[O>>2]|0)){c[O>>2]=j;j=0}b[(c[M>>2]|0)+(u<<1)>>1]=-2;t=(d[X>>0]|d[X+1>>0]<<8)&-9;a[X>>0]=t;a[X+1>>0]=t>>8;t=-2}v=c[y>>2]|0;do if((a[v>>0]|0)==106){v=c[v+8>>2]|0;if(!v)t=0;else t=(Eu(v)|0)&1073741823;m=t+1|0;ew(x|0,v|0,m|0)|0;t=x;x=x+m|0}else{if((t|0)<=-1){t=0;break}t=c[(c[N>>2]|0)+(t<<4)+8>>2]|0}while(0);w=(t|0)==0?34049:t;n:do if(!(a[va>>0]|0)){t=c[f>>2]|0;v=a[t+78>>0]|0;m=a[t+165>>0]|0;t=Zi(t,v,w,m&255)|0;do if(!(m<<24>>24)){if(!t){t=_i(f,v,0,w)|0;break}if(c[t+12>>2]|0)break n;t=_i(f,v,t,w)|0}while(0);if(!t){u=0;v=s;t=r;break j}}while(0);c[(c[P>>2]|0)+(u<<2)>>2]=w;a[(c[Q>>2]|0)+u>>0]=g?a[y+12>>0]|0:0;u=u+1|0;w=b[n>>1]|0;if(u>>>0<(w&65535)>>>0)y=y+20|0;else break k}cd(f,42138,ba);u=0;wa=432;break j}while(0);o:do if(V){B=Z+50|0;v=b[B>>1]|0;if(!(v<<16>>16))break;C=Z+4|0;D=s+4|0;E=Z+32|0;F=s+32|0;h=Z+28|0;z=s+28|0;A=s+52|0;t=0;while(1){y=b[(c[C>>2]|0)+(t<<1)>>1]|0;g=c[D>>2]|0;p:do if(!(w<<16>>16))wa=252;else{x=g;w=w&65535;while(1){if((b[x>>1]|0)==y<<16>>16)break;if((w|0)>1){x=x+2|0;w=w+-1|0}else{wa=252;break p}}b[A>>1]=(b[A>>1]|0)+-1<<16>>16}while(0);if((wa|0)==252){wa=0;b[g+(u<<1)>>1]=y;c[(c[F>>2]|0)+(u<<2)>>2]=c[(c[E>>2]|0)+(t<<2)>>2];a[(c[z>>2]|0)+u>>0]=a[(c[h>>2]|0)+t>>0]|0;u=u+1|0;v=b[B>>1]|0}t=t+1|0;if(t>>>0>=(v&65535)>>>0)break o;w=b[n>>1]|0}}else{b[(c[s+4>>2]|0)+(u<<1)>>1]=-1;c[(c[s+32>>2]|0)+(u<<2)>>2]=34049}while(0);v=c[s+8>>2]|0;u=b[n>>1]|0;u=(u&65535)<5?u:5;t=b[(c[U>>2]|0)+44>>1]|0;b[v>>1]=t;if(c[s+36>>2]|0){t=(t&65535)+65526&65535;b[v>>1]=t}if(t<<16>>16<33)b[v>>1]=33;ew(v+2|0,31120,u<<1&65535|0)|0;ca=b[n>>1]|0;t=ca&65535;if((u&65535)<(ca&65535)){t=u&65535;do{t=t+1|0;b[v+(t<<1)>>1]=23;u=b[n>>1]|0}while(t>>>0<(u&65535)>>>0);t=u&65535}if(a[W>>0]|0)b[v+(t<<1)>>1]=0;B=f+228|0;if(!(c[B>>2]|0))xk(s);x=b[s+52>>1]|0;A=x<<16>>16==0;if(A){u=-1;t=-1}else{u=c[s+4>>2]|0;t=x&65535;v=0;w=0;do{ca=t;t=t+-1|0;$=b[u+(t<<1)>>1]|0;aa=($&65535)<63;$=cw(1,0,$<<16>>16|0)|0;ba=L()|0;v=(aa?$:0)|v;w=(aa?ba:0)|w}while((ca|0)>1);u=~v;t=~w}ca=s+64|0;c[ca>>2]=u;c[ca+4>>2]=t;q:do if(qa){h=x&65535;t=ka+42|0;if((h|0)<(b[t>>1]|0))break;z=d[X>>0]|d[X+1>>0]<<8;ca=z|32;a[X>>0]=ca;a[X+1>>0]=ca>>8;t=b[t>>1]|0;if(t<<16>>16<=0)break;u=b[ka+40>>1]|0;y=u<<16>>16;g=s+4|0;r:do if(A){if(!((y+1|0)<(t<<16>>16|0)|u<<16>>16==0^1))break q}else{v=t<<16>>16;u=0;while(1){if((u|0)!=(y|0)){w=u&65535;x=c[g>>2]|0;t=0;while(1){if((b[x+(t<<1)>>1]|0)==w<<16>>16)break;t=t+1|0;if(t>>>0>=h>>>0)break r}if((t&65535)<<16>>16<=-1)break r}u=u+1|0;if((u|0)>=(v|0))break q}}while(0);ca=z&-33;a[X>>0]=ca;a[X+1>>0]=ca>>8}while(0);s:do if((ka|0)==(c[B>>2]|0)){t=c[ka+8>>2]|0;if(!t){v=s;E=r;t=r;break}C=f+232|0;t:do if(da){B=t;t=r;while(1){u=b[B+50>>1]|0;do if(u<<16>>16==(b[s+50>>1]|0)){A=u&65535;u:do if(!(u<<16>>16))u=0;else{y=c[B+4>>2]|0;g=c[s+4>>2]|0;h=B+32|0;z=s+32|0;u=0;do{if((b[y+(u<<1)>>1]|0)!=(b[g+(u<<1)>>1]|0))break u;w=c[(c[h>>2]|0)+(u<<2)>>2]|0;x=c[(c[z>>2]|0)+(u<<2)>>2]|0;ga=a[w>>0]|0;v=(d[208+(ga&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(ga<<24>>24==0|(v|0)!=0))do{w=w+1|0;x=x+1|0;ga=a[w>>0]|0;v=(d[208+(ga&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(ga<<24>>24==0|(v|0)!=0));if(v|0)break u;u=u+1|0}while(u>>>0<A>>>0)}while(0);if((u|0)!=(A|0)){u=0;break}w=B+54|0;u=a[w>>0]|0;x=s+54|0;v=a[x>>0]|0;do if(u<<24>>24!=v<<24>>24){if(!(u<<24>>24==11|v<<24>>24==11)){c[fa>>2]=0;cd(f,42199,fa);u=a[w>>0]|0}if(u<<24>>24!=11)break;a[w>>0]=a[x>>0]|0}while(0);ga=B+55|0;da=(d[ga>>0]|d[ga+1>>0]<<8)&-4|p;a[ga>>0]=da;a[ga+1>>0]=da>>8;if((d[ua>>0]|0)<=1){u=2;break}c[s+20>>2]=c[C>>2];c[C>>2]=s;s=0;u=2;r=0;t=0}else u=20;while(0);switch(u&31){case 20:case 0:break;default:break t}B=c[B+20>>2]|0;if(!B){v=s;E=t;t=r;break s}}}else{B=t;t=r;while(1){u=b[B+50>>1]|0;do if(u<<16>>16==(b[s+50>>1]|0)){A=u&65535;v:do if(!(u<<16>>16))u=0;else{y=c[B+4>>2]|0;g=c[s+4>>2]|0;h=B+32|0;z=s+32|0;u=0;do{if((b[y+(u<<1)>>1]|0)!=(b[g+(u<<1)>>1]|0))break v;w=c[(c[h>>2]|0)+(u<<2)>>2]|0;x=c[(c[z>>2]|0)+(u<<2)>>2]|0;fa=a[w>>0]|0;v=(d[208+(fa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(fa<<24>>24==0|(v|0)!=0))do{w=w+1|0;x=x+1|0;fa=a[w>>0]|0;v=(d[208+(fa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(v|0)!=0));if(v|0)break v;u=u+1|0}while(u>>>0<A>>>0)}while(0);if((u|0)!=(A|0)){u=0;break}w=B+54|0;u=a[w>>0]|0;x=s+54|0;v=a[x>>0]|0;do if(u<<24>>24!=v<<24>>24){if(!(u<<24>>24==11|v<<24>>24==11)){c[ga>>2]=0;cd(f,42199,ga);u=a[w>>0]|0}if(u<<24>>24!=11)break;a[w>>0]=a[x>>0]|0}while(0);if((d[ua>>0]|0)<=1){u=2;break}c[s+20>>2]=c[C>>2];c[C>>2]=s;s=0;u=2;r=0;t=0}else u=20;while(0);switch(u&31){case 20:case 0:break;default:break t}B=c[B+20>>2]|0;if(!B){v=s;E=t;t=r;break s}}}while(0);if(!u){v=s;E=t;t=r}else{u=0;wa=432;break j}}else{v=s;E=r;t=r}while(0);do if((d[ua>>0]|0)>1)wa=420;else{if(a[va>>0]|0){w:do if(qa){s=c[xa+160>>2]|0;c[v+44>>2]=s;r=c[(c[v+12>>2]|0)+8>>2]|0;if(!r)break;while(1){if(!((r|0)==(v|0)?1:(c[r+44>>2]|0)!=(s|0)))break;r=c[r+20>>2]|0;if(!r)break w}cd(f,35103,ma);c[na>>2]=32306;c[na+4>>2]=110349;c[na+8>>2]=31517;Db(11,32001,na);c[f+12>>2]=11;u=0;s=v;r=t;wa=432;break j}while(0);if(!(mi((c[v+24>>2]|0)+24|0,c[v>>2]|0,E)|0)){wa=xa+24|0;c[wa>>2]=c[wa>>2]|1;wa=420;break}if(a[la>>0]|0){u=0;break j}if(a[xa+82>>0]|0){u=0;break j}a[la>>0]=1;if((c[xa+180>>2]|0)>0)c[xa+264>>2]=1;r=xa+272|0;c[r>>2]=(c[r>>2]|0)+1;r=c[xa+236>>2]|0;if(!r){u=0;break j}c[r+12>>2]=7;u=0;break j}if(!(qa|(c[ka+36>>2]&32|0)==0))break;D=f+44|0;C=(c[D>>2]|0)+1|0;c[D>>2]=C;D=f+8|0;r=c[D>>2]|0;w=f+116|0;if(!r){u=c[f>>2]|0;do if(!(c[w>>2]|0)){if(b[u+76>>1]&8)break;a[f+23>>0]=1}while(0);x:do if(c[u+272>>2]|0)if(!(a[u+81>>0]|0))wa=360;else{u=0;s=v;r=t;wa=432;break j}else{do if((e[u+276>>1]|0)>=224){r=u+300|0;s=c[r>>2]|0;if(s|0){c[r>>2]=c[s>>2];na=u+284|0;c[na>>2]=(c[na>>2]|0)+1;break x}r=u+296|0;s=c[r>>2]|0;if(!s){r=u+292|0;break}else{c[r>>2]=c[s>>2];na=u+284|0;c[na>>2]=(c[na>>2]|0)+1;break x}}else r=u+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1;wa=360}while(0);if((wa|0)==360)s=_d(u,224,0)|0;if(!s){u=0;s=v;r=t;wa=432;break j}h=s+104|0;z=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));c[s>>2]=u;r=u+4|0;u=c[r>>2]|0;if(u|0)c[u+4>>2]=s;c[s+8>>2]=u;c[s+4>>2]=0;c[r>>2]=s;c[s+20>>2]=381479589;c[s+12>>2]=f;c[D>>2]=s;Di(s,61,0,1,0)|0;B=s}else B=r;A=c[w>>2]|0;A=(A|0)==0?f:A;r=A+84|0;s=c[r>>2]|0;z=1<<ja;y:do if(!(s&z)){c[r>>2]=s|z;if((ja|0)!=1)break;h=c[A>>2]|0;r=h+16|0;if(c[(c[r>>2]|0)+20>>2]|0)break;if(a[A+199>>0]|0)break;s=Pe(c[h>>2]|0,0,h,pa,0,542)|0;if(s|0){cd(A,32157,oa);c[A+12>>2]=s;break}pa=c[pa>>2]|0;c[(c[r>>2]|0)+20>>2]=pa;r=c[h+92>>2]|0;w=c[pa+4>>2]|0;c[w+4>>2]=c[pa>>2];do if(!(b[w+22>>1]&2)){x=w+32|0;y=w+36|0;g=(c[x>>2]|0)-(c[y>>2]|0)|0;do if((r+-512|0)>>>0<65025){if(r+-1&r|0)break;c[x>>2]=r;u=w+80|0;r=c[u>>2]|0;if(!r)break;s=r+-4|0;c[u>>2]=s;r=s;do if((c[14816]|0)>>>0<=r>>>0)if((c[14817]|0)>>>0>r>>>0){c[14979]=(c[14979]|0)+-1;c[s>>2]=c[14819];c[14819]=s;pa=(c[14820]|0)+1|0;c[14820]=pa;c[14821]=(pa|0)<(c[14815]|0)&1;break}else{r=Wa[c[29352>>2]&127](s)|0;wa=380;break}else{r=Wa[c[29352>>2]&127](s)|0;wa=380}while(0);do if((wa|0)==380){c[14980]=(c[14980]|0)-r;if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{wa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);c[u>>2]=0}while(0);wa=Se(c[w>>2]|0,x,g)|0;c[y>>2]=(c[x>>2]|0)-(g&65535);if((wa|0)!=7)break;r=h+81|0;do if(!(a[r>>0]|0)){if(a[h+82>>0]|0)break;a[r>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;r=h+272|0;c[r>>2]=(c[r>>2]|0)+1;r=c[h+236>>2]|0;if(!r)break;c[r+12>>2]=7}while(0);break y}while(0)}while(0);g=A+80|0;c[g>>2]=c[g>>2]|z;g=A+20|0;a[g>>0]=a[g>>0]|1;g=B+108|0;r=c[g>>2]|0;y=B+112|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;h=c[B+104>>2]|0;a[h+(r*20|0)>>0]=-86;h=h+(r*20|0)+1|0;z=h+19|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(z|0))}else r=Di(B,170,0,0,0)|0;x=v+44|0;c[x>>2]=r;r=c[g>>2]|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;wa=c[B+104>>2]|0;a[wa+(r*20|0)>>0]=-117;b[wa+(r*20|0)+2>>1]=0;c[wa+(r*20|0)+4>>2]=ja;c[wa+(r*20|0)+8>>2]=C;c[wa+(r*20|0)+12>>2]=2;c[wa+(r*20|0)+16>>2]=0;a[wa+(r*20|0)+1>>0]=0}else Di(B,139,ja,C,2)|0;if(!l)s=0;else{s=c[ha>>2]|0;wa=(c[f+188>>2]|0)-s+(c[f+192>>2]|0)|0;l=wa+-1|0;wa=(a[s+l>>0]|0)==59?l:wa;c[ra>>2]=(k|0)==0?59952:42261;c[ra+4>>2]=wa;c[ra+8>>2]=s;s=dd(xa,42241,ra)|0}ra=c[v>>2]|0;wa=c[ka>>2]|0;c[sa>>2]=c[(c[ia>>2]|0)+(ja<<4)>>2];c[sa+4>>2]=34585;c[sa+8>>2]=ra;c[sa+12>>2]=wa;c[sa+16>>2]=C;c[sa+20>>2]=s;Ak(f,42269,sa);z:do if(s|0){if(c[xa+480>>2]|0){Xd(xa,s);break}r=s;do if((c[xa+304>>2]|0)>>>0<=r>>>0){if((c[xa+308>>2]|0)>>>0<=r>>>0)break;wa=xa+300|0;c[s>>2]=c[wa>>2];c[wa>>2]=s;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{wa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);do if(qa){bl(f,v,C);r=c[D>>2]|0;s=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(ja<<4)+12>>2]>>2]|0)+1|0;u=r+108|0;w=c[u>>2]|0;if((c[r+112>>2]|0)>(w|0)){c[u>>2]=w+1;wa=c[r+104>>2]|0;a[wa+(w*20|0)>>0]=95;b[wa+(w*20|0)+2>>1]=0;c[wa+(w*20|0)+4>>2]=ja;c[wa+(w*20|0)+8>>2]=1;c[wa+(w*20|0)+12>>2]=s;c[wa+(w*20|0)+16>>2]=0;a[wa+(w*20|0)+1>>0]=0}else Di(r,95,ja,1,s)|0;c[ta>>2]=c[v>>2];Bk(B,ja,dd(xa,42317,ta)|0);r=c[g>>2]|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;wa=c[B+104>>2]|0;a[wa+(r*20|0)>>0]=-98;b[wa+(r*20|0)+2>>1]=0;c[wa+(r*20|0)+4>>2]=0;c[wa+(r*20|0)+8>>2]=1;c[wa+(r*20|0)+12>>2]=0;c[wa+(r*20|0)+16>>2]=0;a[wa+(r*20|0)+1>>0]=0;break}else{Di(B,158,0,1,0)|0;break}}while(0);r=c[x>>2]|0;s=c[g>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))r=(c[B+104>>2]|0)+(((r|0)<0?s+-1|0:r)*20|0)|0;else r=59308;c[r+8>>2]=s;wa=420}while(0);do if((wa|0)==420){if((i|0)==0|(a[va>>0]|0)!=0)break;if((d[ua>>0]|0)<=1){u=0;s=v;r=t;wa=432;break j}c[f+232>>2]=E;break a}while(0);s=ka+8|0;do if((k|0)==5){r=c[s>>2]|0;if(!r)break;if((a[r+54>>0]|0)==5)break;r=r+20|0;s=c[r>>2]|0;A:do if(!s)s=0;else while(1){if((a[s+54>>0]|0)==5)break A;r=s+20|0;s=c[r>>2]|0;if(!s){s=0;break}}while(0);c[v+20>>2]=s;c[r>>2]=v;break a}while(0);c[v+20>>2]=c[s>>2];c[s>>2]=v;break a}else{u=m;j=T;wa=432}while(0);if((wa|0)==432)if(!s){r=u;wa=468;break}else{v=s;t=r}r=c[v+36>>2]|0;if(r|0)ni(xa,r);r=c[v+40>>2]|0;if(r|0)ri(xa,r);r=c[v+16>>2]|0;B:do if(r|0){do if(!ea){if(c[xa+480>>2]|0){Xd(xa,r);break B}s=r;if((c[xa+304>>2]|0)>>>0>s>>>0)break;if((c[xa+308>>2]|0)>>>0<=s>>>0)break;wa=xa+300|0;c[r>>2]=c[wa>>2];c[wa>>2]=r;break B}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);wa=v+55|0;C:do if((d[wa>>0]|d[wa+1>>0]<<8)&16){r=c[v+32>>2]|0;if(!r)break;do if(!ea){if(c[xa+480>>2]|0){Xd(xa,r);break C}s=r;if((c[xa+304>>2]|0)>>>0>s>>>0)break;if((c[xa+308>>2]|0)>>>0<=s>>>0)break;wa=xa+300|0;c[r>>2]=c[wa>>2];c[wa>>2]=r;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(t){do if(!ea){if(c[xa+480>>2]|0){Xd(xa,t);r=u;wa=468;break a}r=t;if((c[xa+304>>2]|0)>>>0>r>>>0)break;if((c[xa+308>>2]|0)>>>0<=r>>>0)break;r=xa+300|0;c[t>>2]=c[r>>2];c[r>>2]=t;r=u;wa=468;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);r=u;wa=468;break}else{r=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);r=u;wa=468;break}}else{r=u;wa=468}}else{r=m;q=0;wa=468}while(0);if((wa|0)==468)if(r)ni(xa,r);if(j|0)ri(xa,j);qi(xa,i);if(!q){Ra=ya;return}if(xa|0){if(c[xa+480>>2]|0){Xd(xa,q);Ra=ya;return}i=q;if((c[xa+304>>2]|0)>>>0<=i>>>0?(c[xa+308>>2]|0)>>>0>i>>>0:0){i=xa+300|0;c[q>>2]=c[i>>2];c[i>>2]=q;Ra=ya;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);Ra=ya;return}else{i=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);Ra=ya;return}}function ij(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;M=Ra;Ra=Ra+32|0;G=M+16|0;m=M+8|0;l=M;K=c[f>>2]|0;I=c[f+228>>2]|0;a:do if((I|0)!=0?(J=f+200|0,(a[J>>0]|0)!=1):0){r=(g|0)==0;do if(r){D=b[I+42>>1]|0;k=(D<<16>>16)+-1|0;if(D<<16>>16<1){C=130;break a}if(i)if((c[i>>2]|0)==1){k=1;C=13}else{c[l>>2]=c[(c[I+4>>2]|0)+(k<<4)>>2];c[l+4>>2]=h;cd(f,42428,l);break a}else{k=1;C=12}}else{if(!i){k=c[g>>2]|0;C=12;break}k=c[i>>2]|0;if((k|0)==(c[g>>2]|0))C=13;else{cd(f,42491,m);C=129;break a}}while(0);if((C|0)==12){p=h+4|0;l=(k<<3)+37+(c[p>>2]|0)|0;D=k;A=0}else if((C|0)==13){p=h+4|0;l=(k<<3)+37+(c[p>>2]|0)|0;o=c[i>>2]|0;if((o|0)>0){n=0;do{m=c[i+4+(n*20|0)+4>>2]|0;if(!m)m=0;else m=(Eu(m)|0)&1073741823;l=l+1+m|0;n=n+1|0}while((n|0)<(o|0));D=k;A=1}else{D=k;A=1}}n=((l|0)<0)<<31>>31;B=(K|0)==0;b:do if(B){z=Sv(l|0,n|0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){C=128;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](l)|0;C=42;break}n=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){z=c[14978]|0;y=Tv(k|0,m|0,n|0,((n|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}m=Wa[c[29340>>2]&127](n)|0;if(!m){C=128;break a}k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;z=m}else z=m}else{if(c[K+272>>2]|0){if(a[K+81>>0]|0){C=128;break a}}else{do if(!(0<n>>>0|(0==(n|0)?(e[K+276>>1]|0)>>>0<l>>>0:0))){m=K+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];C=K+284|0;c[C>>2]=(c[C>>2]|0)+1;C=42;break b}m=K+296|0;k=c[m>>2]|0;if(!k){k=K+292|0;break}else{c[m>>2]=c[k>>2];C=K+284|0;c[C>>2]=(c[C>>2]|0)+1;C=42;break b}}else k=K+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(K,l,n)|0;C=42}while(0);if((C|0)==42)if(!k){C=128;break}else z=k;gw(z|0,0,l|0)|0;c[z>>2]=I;y=I+16|0;c[z+4>>2]=c[y>>2];w=z+36|0;o=w+(D<<3)|0;x=z+8|0;c[x>>2]=o;c:do if((d[J>>0]|0)>1){m=c[f>>2]|0;d:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;C=67;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){v=c[14978]|0;u=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;t=L()|0;c[14768]=((t|0)<0|(t|0)==0&u>>>0<=v>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break c;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break c}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];C=m+284|0;c[C>>2]=(c[C>>2]|0)+1;C=67;break d}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];C=m+284|0;c[C>>2]=(c[C>>2]|0)+1;C=67;break d}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;C=67}while(0);if((C|0)==67)if(!k)break;l=k+4|0;m=l+12|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));c[k>>2]=o;t=h;u=c[t+4>>2]|0;v=k+4|0;c[v>>2]=c[t>>2];c[v+4>>2]=u;v=f+272|0;c[k+12>>2]=c[v>>2];c[v>>2]=k}while(0);ew(o|0,c[h>>2]|0,c[p>>2]|0)|0;a[o+(c[p>>2]|0)>>0]=0;if(o|0?(q=a[o>>0]|0,(a[880+(q&255)>>0]|0)<0):0){n=q<<24>>24==91?93:q;m=0;k=1;while(1){l=a[o+k>>0]|0;if(l<<24>>24==n<<24>>24){k=k+1|0;l=o+m|0;if((a[o+k>>0]|0)!=n<<24>>24)break;a[l>>0]=n}else a[o+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0}m=o+((c[p>>2]|0)+1)|0;c[z+20>>2]=D;e:do if(!r)if((D|0)>0){s=I+4|0;t=f+272|0;v=b[I+42>>1]|0;u=v<<16>>16>0;v=v<<16>>16;r=0;f:while(1){if(!u){C=117;break}h=c[s>>2]|0;k=c[g+4+(r*20|0)+4>>2]|0;q=d[208+(d[k>>0]|0)>>0]|0;l=0;while(1){o=c[h+(l<<4)>>2]|0;p=a[o>>0]|0;n=(d[208+(p&255)>>0]|0)-q|0;if(!(p<<24>>24==0|(n|0)!=0)){p=k;do{o=o+1|0;p=p+1|0;N=a[o>>0]|0;n=(d[208+(N&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(n|0)!=0))}if(!n)break;l=l+1|0;if((l|0)>=(v|0))break f}c[w+(r<<3)>>2]=l;g:do if((d[J>>0]|0)>1?(F=w+(r<<3)|0,E=c[t>>2]|0,E|0):0){l=E;while(1){if((c[l>>2]|0)==(k|0))break;l=c[l+12>>2]|0;if(!l)break g}c[l>>2]=F}while(0);k=r+1|0;if((k|0)<(D|0))r=k;else{C=96;break e}}if((C|0)==117)k=c[g+4+(r*20|0)+4>>2]|0;c[G>>2]=k;cd(f,42585,G);if(!z){C=129;break a}if(!B)C=120}else C=107;else{c[w>>2]=(b[I+42>>1]|0)+-1;C=96}while(0);if((C|0)==96)if(A&(D|0)>0){p=f+272|0;n=0;while(1){o=c[i+4+(n*20|0)+4>>2]|0;if(!o)l=0;else l=(Eu(o)|0)&1073741823;c[w+(n<<3)+4>>2]=m;h:do if((d[J>>0]|0)>1?(H=c[p>>2]|0,H|0):0){k=H;while(1){if((c[k>>2]|0)==(o|0))break;k=c[k+12>>2]|0;if(!k)break h}c[k>>2]=m}while(0);ew(m|0,o|0,l|0)|0;a[m+l>>0]=0;n=n+1|0;if((n|0)==(D|0)){C=107;break}else m=m+(l+1)|0}}else C=107;if((C|0)==107){a[z+24>>0]=0;a[z+25>>0]=j;a[z+26>>0]=j>>>8;k=mi((c[I+72>>2]|0)+56|0,c[x>>2]|0,z)|0;if((k|0)!=(z|0)){if(k|0){c[z+12>>2]=k;c[k+16>>2]=z}c[y>>2]=z;C=128;break}k=K+81|0;if((a[k>>0]|0)==0?(a[K+82>>0]|0)==0:0){a[k>>0]=1;if((c[K+180>>2]|0)>0)c[K+264>>2]=1;k=K+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[K+236>>2]|0;if(k){c[k+12>>2]=7;C=120}else C=120}else C=120}if((C|0)==120){if(c[K+480>>2]|0){Xd(K,z);C=128;break}N=z;if((c[K+304>>2]|0)>>>0<=N>>>0?(c[K+308>>2]|0)>>>0>N>>>0:0){C=K+300|0;c[z>>2]=c[C>>2];c[C>>2]=z;C=128;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);C=128;break}else{C=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);C=128;break}}else C=128;while(0);if((C|0)==128)if(!g)C=130;else C=129;if((C|0)==129){ri(K,g);C=130}if((C|0)==130?(i|0)==0:0){Ra=M;return}ri(K,i);Ra=M;return}function jj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+208|0;Q=U+184|0;O=U+176|0;N=U+160|0;M=U+152|0;L=U+136|0;K=U+128|0;J=U+112|0;I=U+104|0;D=U+96|0;A=U+88|0;z=U+80|0;y=U+72|0;x=U+64|0;w=U+56|0;u=U+48|0;t=U+40|0;s=U+32|0;r=U+24|0;P=U;T=c[f>>2]|0;if(a[T+81>>0]|0){qi(T,g);Ra=U;return}a:do if(!(a[T+165>>0]|0)){l=f+4|0;m=T+24|0;n=(c[m>>2]&1|0)==0;o=T+16|0;S=c[(c[o>>2]|0)+12>>2]|0;a[T+78>>0]=a[S+77>>0]|0;if(!((b[S+78>>1]&1)==0?(j=eh(T,0,l,0)|0,(j|0)!=0):0))E=5;b:do if((E|0)==5){j=c[T+20>>2]|0;if((j|0)>1)do{k=j;j=j+-1|0;if((b[(c[(c[o>>2]|0)+(j<<4)+12>>2]|0)+78>>1]&1)==0?(p=eh(T,j,l,0)|0,p|0):0){j=p;break b}}while((k|0)>2);if(n)c[m>>2]=c[m>>2]&-2;if(!(a[T+89>>0]|0))break a;c[m>>2]=c[m>>2]|16;break a}while(0);c[f+12>>2]=j;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;qi(T,g);Ra=U;return}while(0);m=(i|0)!=0;if(m){S=T+85|0;a[S>>0]=(a[S>>0]|0)+1<<24>>24}k=c[g+8>>2]|0;if(!k)j=g+12|0;else{l=c[(c[f>>2]|0)+16>>2]|0;j=0;while(1)if((c[l+(j<<4)+12>>2]|0)==(k|0))break;else j=j+1|0;j=l+(j<<4)|0}S=bd(f,h,c[g+16>>2]|0,c[j>>2]|0)|0;if(m){R=T+85|0;a[R>>0]=(a[R>>0]|0)+-1<<24>>24}if(!S){if(!m){qi(T,g);Ra=U;return}hl(f,c[g+12>>2]|0);qi(T,g);Ra=U;return}H=S+72|0;k=c[H>>2]|0;if(!k)R=-1e6;else{l=c[T+16>>2]|0;j=0;while(1)if((c[l+(j<<4)+12>>2]|0)==(k|0)){R=j;break}else j=j+1|0}B=S+56|0;if(c[B>>2]|0?Sk(f,S)|0:0){qi(T,g);Ra=U;return}i=(R|0)==1;j=i?34855:34585;o=c[(c[T+16>>2]|0)+(R<<4)>>2]|0;k=c[f>>2]|0;do if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(q=c[k+312>>2]|0,q|0):0){j=$a[q&127](c[k+316>>2]|0,9,j,0,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,r);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)==2){if(!j)break;qi(T,g);Ra=U;return}else{cd(f,39231,s);c[f+12>>2]=1;qi(T,g);Ra=U;return}}while(0);do if(!h){if(!(c[B>>2]|0)){l=0;m=i?13:11;break}j=S+64|0;while(1){j=c[j>>2]|0;if((c[j>>2]|0)==(T|0))break;else j=j+24|0}l=c[(c[j+4>>2]|0)+4>>2]|0;m=30}else{l=0;m=i?15:17}while(0);j=c[S>>2]|0;k=c[f>>2]|0;do if((a[k+165>>0]|0)==0?(v=f+200|0,(a[v>>0]|0)==0):0){n=c[k+312>>2]|0;if(n){j=$a[n&127](c[k+316>>2]|0,m,j,l,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,t);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)!=2){cd(f,39231,u);c[f+12>>2]=1;qi(T,g);Ra=U;return}if(j|0){qi(T,g);Ra=U;return}j=c[S>>2]|0;k=c[f>>2]|0;if(a[k+165>>0]|0){o=j;break}if(a[v>>0]|0){o=j;break}}l=c[k+312>>2]|0;if(l){j=$a[l&127](c[k+316>>2]|0,9,j,0,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,w);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)!=2){cd(f,39231,x);c[f+12>>2]=1;qi(T,g);Ra=U;return}if(!j){o=c[S>>2]|0;break}else{qi(T,g);Ra=U;return}}else o=j}else o=j;while(0);c:do if(o|0){m=a[o>>0]|0;n=m<<24>>24==0;d:do if(n){j=39441;E=66}else{E=m&255;j=208+E|0;do if((E|32|0)==115){j=a[o+1>>0]|0;if(!(j<<24>>24)){j=39442;E=66;break d}E=j&255;j=208+E|0;if((E|32|0)==113){j=a[o+2>>0]|0;if(!(j<<24>>24)){j=39443;E=66;break d}j=j&255;if((j|32|0)!=108){l=108;j=208+j|0;break}j=a[o+3>>0]|0;if(!(j<<24>>24)){j=39444;E=66;break d}j=j&255;if((j|32|0)!=105){l=105;j=208+j|0;break}j=a[o+4>>0]|0;if(!(j<<24>>24)){j=39445;E=66;break d}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;break}j=a[o+5>>0]|0;if(!(j<<24>>24)){j=39446;E=66;break d}j=j&255;if((j|32|0)!=101){l=101;j=208+j|0;break}j=a[o+6>>0]|0;if(!(j<<24>>24)){j=39447;E=66;break d}if(j<<24>>24==95){E=75;break d}else{l=95;j=208+(j&255)|0}}else l=113}else l=115;while(0);k=d[j>>0]|0;j=l;E=70}while(0);if((E|0)==66){k=0;j=a[208+(d[j>>0]|0)>>0]|0;E=70}if((E|0)==70){if((k|0)!=(j&255|0))break;if(!n){j=m&255;if((j|32|0)==115)E=75;else{l=115;j=208+j|0;E=74}}else{j=42631;E=72}}do if((E|0)==75){j=a[o+1>>0]|0;if(j<<24>>24){x=j&255;j=208+x|0;if((x|32|0)==113){j=a[o+2>>0]|0;if(j<<24>>24){x=j&255;j=208+x|0;if((x|32|0)==108){j=a[o+3>>0]|0;if(j<<24>>24){j=j&255;if((j|32|0)!=105){l=105;j=208+j|0;E=74;break}j=a[o+4>>0]|0;if(!(j<<24>>24)){j=42635;E=72;break}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;E=74;break}j=a[o+5>>0]|0;if(!(j<<24>>24)){j=42636;E=72;break}j=j&255;if((j|32|0)!=101){l=101;j=208+j|0;E=74;break}j=a[o+6>>0]|0;if(!(j<<24>>24)){j=42637;E=72;break}if(j<<24>>24!=95){l=95;j=208+(j&255)|0;E=74;break}j=a[o+7>>0]|0;if(!(j<<24>>24)){j=42638;E=72;break}j=j&255;if((j|32|0)!=115){l=115;j=208+j|0;E=74;break}j=a[o+8>>0]|0;if(!(j<<24>>24)){j=42639;E=72;break}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;E=74;break}j=a[o+9>>0]|0;if(!(j<<24>>24)){j=42640;E=72;break}j=j&255;if((j|32|0)!=97){l=97;j=208+j|0;E=74;break}j=a[o+10>>0]|0;if(!(j<<24>>24)){j=42641;E=72;break}j=j&255;if((j|32|0)==116)break c;else{l=116;j=208+j|0;E=74}}else{j=42634;E=72}}else{l=108;E=74}}else{j=42633;E=72}}else{l=113;E=74}}else{j=42632;E=72}}while(0);if((E|0)==72){k=0;j=a[208+(d[j>>0]|0)>>0]|0}else if((E|0)==74){k=d[j>>0]|0;j=l}if((k|0)!=(j&255|0)){c[y>>2]=o;cd(f,42643,y);qi(T,g);Ra=U;return}}while(0);r=(h|0)!=0;j=(c[S+12>>2]|0)==0;if(r){if(j){c[z>>2]=o;cd(f,42671,z);qi(T,g);Ra=U;return}}else if(!j){c[A>>2]=o;cd(f,42705,A);qi(T,g);Ra=U;return}t=f+8|0;s=f+116|0;if(!(c[t>>2]|0)){m=c[f>>2]|0;if((c[s>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;e:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))E=97;else{qi(T,g);Ra=U;return}else{do if((e[m+276>>1]|0)>=224){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];A=m+284|0;c[A>>2]=(c[A>>2]|0)+1;break e}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];A=m+284|0;c[A>>2]=(c[A>>2]|0)+1;break e}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;E=97}while(0);if((E|0)==97)k=_d(m,224,0)|0;if(!k){qi(T,g);Ra=U;return}j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=m;j=m+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[t>>2]=k;Di(k,61,0,1,0)|0}q=c[s>>2]|0;q=(q|0)==0?f:q;j=q+84|0;k=c[j>>2]|0;p=1<<R;f:do if((((k&p|0)==0?(c[j>>2]=k|p,i):0)?(F=c[q>>2]|0,C=F+16|0,(c[(c[C>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){j=Pe(c[F>>2]|0,0,F,P,0,542)|0;if(j|0){cd(q,32157,D);c[q+12>>2]=j;break}D=c[P>>2]|0;c[(c[C>>2]|0)+20>>2]=D;j=c[F+92>>2]|0;m=c[D+4>>2]|0;c[m+4>>2]=c[D>>2];do if(!(b[m+22>>1]&2)){n=m+32|0;o=m+36|0;i=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[n>>2]=j;l=m+80|0;j=c[l>>2]|0;if(!j)break;k=j+-4|0;c[l>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;D=(c[14820]|0)+1|0;c[14820]=D;c[14821]=(D|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;E=117;break}else{j=Wa[c[29352>>2]&127](k)|0;E=117}while(0);do if((E|0)==117){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{D=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[l>>2]=0}while(0);D=Se(c[m>>2]|0,n,i)|0;c[o>>2]=(c[n>>2]|0)-(i&65535);if((D|0)!=7)break;j=F+81|0;do if(!(a[j>>0]|0)){if(a[F+82>>0]|0)break;a[j>>0]=1;if((c[F+180>>2]|0)>0)c[F+264>>2]=1;j=F+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[F+236>>2]|0;if(!j)break;c[j+12>>2]=7}while(0);break f}while(0)}while(0);F=q+80|0;c[F>>2]=c[F>>2]|p;F=q+20|0;a[F>>0]=a[F>>0]|1;if(r){il(f,S,R,h);qi(T,g);Ra=U;return}k=c[S>>2]|0;l=c[(c[(c[f>>2]|0)+16>>2]|0)+(R<<4)>>2]|0;c[I>>2]=1;Cb(24,P,42737,I)|0;if(Sd(c[f>>2]|0,P,l)|0){c[J>>2]=l;c[J+4>>2]=P;c[J+8>>2]=38087;c[J+12>>2]=k;Ak(f,42751,J)}c[K>>2]=2;Cb(24,P,42737,K)|0;if(Sd(c[f>>2]|0,P,l)|0){c[L>>2]=l;c[L+4>>2]=P;c[L+8>>2]=38087;c[L+12>>2]=k;Ak(f,42751,L)}c[M>>2]=3;Cb(24,P,42737,M)|0;if(Sd(c[f>>2]|0,P,l)|0){c[N>>2]=l;c[N+4>>2]=P;c[N+8>>2]=38087;c[N+12>>2]=k;Ak(f,42751,N)}c[O>>2]=4;Cb(24,P,42737,O)|0;j=c[f>>2]|0;if(!(Sd(j,P,l)|0))q=j;else{c[Q>>2]=l;c[Q+4>>2]=P;c[Q+8>>2]=38087;c[Q+12>>2]=k;Ak(f,42751,Q);q=c[f>>2]|0}r=q+32|0;g:do if(!((c[r>>2]&16384|0)==0&0==0)){if(c[B>>2]|0)break;j=c[t>>2]|0;h:do if(!j){do if(!(c[s>>2]|0)){if(b[q+76>>1]&8)break;a[f+23>>0]=1}while(0);i:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))E=149;else{p=0;break h}else{do if((e[q+276>>1]|0)>=224){j=q+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Q=q+284|0;c[Q>>2]=(c[Q>>2]|0)+1;break i}j=q+296|0;k=c[j>>2]|0;if(!k){j=q+292|0;break}else{c[j>>2]=c[k>>2];Q=q+284|0;c[Q>>2]=(c[Q>>2]|0)+1;break i}}else j=q+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;E=149}while(0);if((E|0)==149)k=_d(q,224,0)|0;if(!k){p=0;break}j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=q;j=q+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[t>>2]=k;Di(k,61,0,1,0)|0;p=k}else p=j;while(0);i=c[S>>2]|0;m=c[H>>2]|0;n=c[m+68>>2]|0;if(!n){k=m+60|0;j=m+64|0}else{k=a[i>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=i;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[m+56>>2]|0)>>>0)|0;k=n+(j<<3)|0;j=n+(j<<3)+4|0}k=c[k>>2]|0;j:do if(!k)j=59292;else{o=d[208+(d[i>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;Q=a[m>>0]|0;l=(d[208+(Q&255)>>0]|0)-o|0;if(!(Q<<24>>24==0|(l|0)!=0)){n=i;do{m=m+1|0;n=n+1|0;Q=a[m>>0]|0;l=(d[208+(Q&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Q<<24>>24==0|(l|0)!=0))}if(!l)break j;if(!k){j=59292;break}}}while(0);do if(!(c[j+8>>2]|0)){j=c[S+16>>2]|0;if(!j)break g;while(1){if(a[j+24>>0]|0)break;if(!((c[r>>2]&524288|0)==0&0==0))break;j=c[j+4>>2]|0;if(!j)break g}k=f+56|0;j=(c[k>>2]|0)+-1|0;c[k>>2]=j;k=p+108|0;l=c[k>>2]|0;if((c[p+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[p+104>>2]|0;a[m+(l*20|0)>>0]=46;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=1;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;m=j;break}else{Di(p,46,1,j,0)|0;m=j;break}}else m=0;while(0);Q=f+146|0;a[Q>>0]=1;sj(f,ik(q,g,0)|0,0);a[Q>>0]=0;if((c[r>>2]&524288|0)==0&0==0){j=p+108|0;k=c[j>>2]|0;l=k+2|0;if((c[p+112>>2]|0)>(k|0)){c[j>>2]=k+1;Q=c[p+104>>2]|0;a[Q+(k*20|0)>>0]=46;b[Q+(k*20|0)+2>>1]=0;c[Q+(k*20|0)+4>>2]=0;c[Q+(k*20|0)+8>>2]=l;c[Q+(k*20|0)+12>>2]=0;c[Q+(k*20|0)+16>>2]=0;a[Q+(k*20|0)+1>>0]=0}else Di(p,46,0,l,0)|0;Uj(f,787,2,0,-1,4)}if(!m)break;k=c[p+12>>2]|0;j=~m;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,p,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[p+108>>2];break}}while(0);il(f,S,R,0);qi(T,g);Ra=U;return}\nfunction rj(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+48|0;s=u+32|0;t=u+16|0;r=u;p=u+36|0;c[p>>2]=e;c[p+4>>2]=f;c[p+8>>2]=g;a:do if(!e)h=0;else{o=0;h=0;n=e;b:while(1){m=c[n+4>>2]|0;if((m|0)<=0)break;c:do if((m|0)==7){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;d:do if(!(i<<24>>24)){i=18240;q=10}else{l=i&255;i=208+l|0;do if((l|32|0)==110){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18241;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==97){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18242;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==116){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18243;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==117){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18244;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==114){i=a[j+5>>0]|0;if(!(i<<24>>24)){i=18245;q=10;break d}i=i&255;if((i|32|0)!=97){k=97;i=208+i|0;break}i=a[j+6>>0]|0;if(!(i<<24>>24)){i=18246;q=10;break d}i=i&255;if((i|32|0)==108){i=0;break c}else{k=108;i=208+i|0}}else k=114}else k=117}else k=116}else k=97}else k=110;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==10){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0))i=0;else q=12}else q=12;while(0);e:do if((q|0)==12){q=0;l=(m|0)==4;if(l){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18246;q=28}else{k=i&255;i=208+k|0;if((k|32|0)==108){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18247;q=28;break}k=i&255;i=208+k|0;if((k|32|0)==101){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18248;q=28;break}k=i&255;i=208+k|0;if((k|32|0)==102){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18249;q=28;break}i=i&255;if((i|32|0)==116){i=1;break e}else{k=116;i=208+i|0}}else k=102}else k=101}else k=108;j=d[i>>0]|0;i=k}while(0);if((q|0)==28){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=1;break}}else l=0;m=(m|0)==5;if(m){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18250;q=37}else{k=i&255;i=208+k|0;if((k|32|0)==111){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18251;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==117){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18252;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==116){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18253;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==101){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18254;q=37;break}i=i&255;if((i|32|0)==114){i=2;break e}else{k=114;i=208+i|0}}else k=101}else k=116}else k=117}else k=111;j=d[i>>0]|0;i=k}while(0);if((q|0)==37){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=2;break}if(m){j=c[n>>2]|0;if(j){i=a[j>>0]|0;f:do if(!(i<<24>>24)){i=18254;q=45}else{m=i&255;i=208+m|0;do if((m|32|0)==114){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18255;q=45;break f}i=i&255;if((i|32|0)!=105){k=105;i=208+i|0;break}i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18256;q=45;break f}i=i&255;if((i|32|0)!=103){k=103;i=208+i|0;break}i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18257;q=45;break f}i=i&255;if((i|32|0)!=104){k=104;i=208+i|0;break}i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18258;q=45;break f}i=i&255;if((i|32|0)==116){i=3;break e}else{k=116;i=208+i|0}}else k=114;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==45){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=3;break}else i=1}else i=1}else i=0;if(l){l=i;q=48}else l=i}else if(l){l=0;q=48}else break b;if((q|0)==48){q=0;j=c[n>>2]|0;if(j){i=a[j>>0]|0;do if(!(i<<24>>24)){i=18259;q=53}else{m=i&255;i=208+m|0;if((m|32|0)==102){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18260;q=53;break}m=i&255;i=208+m|0;if((m|32|0)==117){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18261;q=53;break}m=i&255;i=208+m|0;if((m|32|0)==108){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18262;q=53;break}i=i&255;if((i|32|0)==108){i=4;break e}else{k=108;i=208+i|0}}else k=108}else k=117}else k=102;j=d[i>>0]|0;i=k}while(0);if((q|0)==53){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=4;break}}}if(!l)break b;j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18263;q=61}else{m=i&255;i=208+m|0;if((m|32|0)==105){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18264;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==110){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18265;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==110){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18266;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==101){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18267;q=61;break}i=i&255;if((i|32|0)==114){i=5;break e}else{k=114;i=208+i|0}}else k=101}else k=110}else k=110}else k=105;j=d[i>>0]|0;i=k}while(0);if((q|0)==61){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)!=(i&255|0)){if(!l)break b;j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;g:do if(!(i<<24>>24)){i=18268;q=69}else{n=i&255;i=208+n|0;do if((n|32|0)==99){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18269;q=69;break g}n=i&255;i=208+n|0;if((n|32|0)==114){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18270;q=69;break g}i=i&255;if((i|32|0)!=111){k=111;i=208+i|0;break}i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18271;q=69;break g}i=i&255;if((i|32|0)!=115){k=115;i=208+i|0;break}i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18272;q=69;break g}i=i&255;if((i|32|0)==115){i=6;break e}else{k=115;i=208+i|0}}else k=114}else k=99;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==69){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0))i=6;else break b}else i=5}while(0);h=h|(d[18288+(i*3|0)+2>>0]|0);o=o+1|0;if(o>>>0>=3)break a;n=c[p+(o<<2)>>2]|0;if(!n)break a}h=h|64}while(0);if((h&33|0)!=33&(h&64|0)==0){if((h&32|0)==0|(h&24|0)==8){t=h;Ra=u;return t|0}cd(b,44559,s);t=1;Ra=u;return t|0}if(!g){c[t>>2]=e;c[t+4>>2]=f;c[t+8>>2]=44514;c[t+12>>2]=0;cd(b,44515,t);t=1;Ra=u;return t|0}else{c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=44513;c[r+12>>2]=g;cd(b,44515,r);t=1;Ra=u;return t|0}return 0}function sj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+112|0;E=U+32|0;C=U+24|0;w=U+16|0;v=U+8|0;o=U;D=U+80|0;P=U+76|0;Q=U+72|0;F=U+40|0;c[P>>2]=0;c[Q>>2]=0;T=c[f>>2]|0;a:do if((c[f+36>>2]|0)==0?(K=T+81|0,(a[K>>0]|0)==0):0){j=c[g+8>>2]|0;if(!j)i=g+12|0;else{k=c[T+16>>2]|0;i=0;while(1)if((c[k+(i<<4)+12>>2]|0)==(j|0))break;else i=i+1|0;i=k+(i<<4)|0}R=bd(f,0,c[g+16>>2]|0,c[i>>2]|0)|0;i=c[f>>2]|0;j=g+24|0;k=c[j>>2]|0;do if(k|0){if(i|0?c[i+480>>2]|0:0){Vi(i,k);break}N=k+32|0;O=(c[N>>2]|0)+-1|0;c[N>>2]=O;if(!O)Vi(i,k)}while(0);c[j>>2]=R;if(R){O=R+32|0;c[O>>2]=(c[O>>2]|0)+1;b:do if(a[g+45>>0]&2){m=c[g+72>>2]|0;i=c[R+8>>2]|0;c:do if(i|0){n=d[208+(d[m>>0]|0)>>0]|0;while(1){k=c[i>>2]|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-n|0;if(!(O<<24>>24==0|(j|0)!=0)){l=m;do{k=k+1|0;l=l+1|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(j|0)!=0))}if(!j)break;i=c[i+20>>2]|0;if(!i)break c}c[g+76>>2]=i;break b}while(0);c[o>>2]=m;c[o+4>>2]=0;cd(f,41107,o);a[f+17>>0]=1;i=0;break a}while(0);i=c[f>>2]|0;s=c[i+32>>2]|0;do if(!((s&262144|0)==0&0==0)?(q=c[(c[i+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){p=c[R+72>>2]|0;if((p|0)!=(q|0)?(r=c[q+48>>2]|0,(r|0)!=0):0){o=R+68|0;n=r;i=0;do{m=c[n+8>>2]|0;if((c[m+24>>2]|0)==(p|0)){k=c[m+4>>2]|0;l=c[R>>2]|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(O<<24>>24==0|(j|0)!=0))do{k=k+1|0;l=l+1|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(j|0)!=0));if(!j){if(!i)i=c[o>>2]|0;c[m+32>>2]=i;i=m}}n=c[n>>2]|0}while((n|0)!=0);if(!i)S=40}else S=40;if((S|0)==40){i=c[R+68>>2]|0;if(!i){S=46;break}}j=0;k=i;do{if((a[k+8>>0]|0)==121)j=j|d[k+9>>0];k=c[k+32>>2]|0}while((k|0)!=0);if(j){j=(c[R+12>>2]|0)!=0;if(!i)S=48;else{I=i;x=1;i=1}}else S=46}else S=46;while(0);if((S|0)==46){j=(c[R+12>>2]|0)!=0;S=48}if((S|0)==48){if(!((s&16384|0)==0&0==0)){p=c[R>>2]|0;m=c[R+72>>2]|0;n=c[m+68>>2]|0;if(!n){k=m+60|0;i=m+64|0}else{k=a[p>>0]|0;if(!(k<<24>>24))i=0;else{i=0;l=p;do{l=l+1|0;i=G(i+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}i=(i>>>0)%((c[m+56>>2]|0)>>>0)|0;k=n+(i<<3)|0;i=n+(i<<3)+4|0}k=c[k>>2]|0;d:do if(!k)i=59292;else{o=d[208+(d[p>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;k=k+-1|0;m=c[i+12>>2]|0;O=a[m>>0]|0;l=(d[208+(O&255)>>0]|0)-o|0;if(!(O<<24>>24==0|(l|0)!=0)){n=p;do{m=m+1|0;n=n+1|0;O=a[m>>0]|0;l=(d[208+(O&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(l|0)!=0))}if(!l)break d;if(!k){i=59292;break}}}while(0);if(!(c[i+8>>2]|0))i=(c[R+16>>2]|0)!=0&1;else i=1}else i=0;I=0;x=(i|0)!=0;i=0}u=x&1;if((Sk(f,R)|0)==0?(Fm(f,R,i)|0)==0:0){k=c[R+72>>2]|0;l=c[T+16>>2]|0;if(!k)z=-1e6;else{i=0;while(1)if((c[l+(i<<4)+12>>2]|0)==(k|0)){z=i;break}else i=i+1|0}m=c[R>>2]|0;i=c[l+(z<<4)>>2]|0;k=c[f>>2]|0;if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(t=c[k+312>>2]|0,(t|0)!=0):0){i=$a[t&127](c[k+316>>2]|0,9,m,0,i,c[f+240>>2]|0)|0;if((i|0)==1){cd(f,39216,v);c[f+12>>2]=23;i=0;break}if((i|2|0)!=2){cd(f,39231,w);c[f+12>>2]=1;i=0;break}}else i=0;w=f+40|0;J=c[w>>2]|0;A=J+1|0;c[w>>2]=A;c[g+48>>2]=J;y=R+8|0;k=c[y>>2]|0;if(!k)B=0;else{l=0;m=A;do{m=m+1|0;l=l+1|0;k=c[k+20>>2]|0}while((k|0)!=0);c[w>>2]=m;B=l}if(j){O=f+240|0;N=c[O>>2]|0;c[O>>2]=c[R>>2];O=f}else{N=0;O=0}v=f+8|0;k=c[v>>2]|0;e:do if(!k){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;f:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))S=97;else{i=0;break e}else{do if((e[n+276>>1]|0)>=224){k=n+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break f}k=n+296|0;l=c[k>>2]|0;if(!l){k=n+292|0;break}else{c[k>>2]=c[l>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break f}}else k=n+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;S=97}while(0);if((S|0)==97)m=_d(n,224,0)|0;if(!m)i=0;else{o=m+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[m>>2]=n;k=n+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[v>>2]=m;Di(m,61,0,1,0)|0;M=m;S=102}}else{M=k;S=102}while(0);g:do if((S|0)==102){L=f+18|0;if(!(a[L>>0]|0)){H=M+149|0;t=d[H>>0]|d[H+1>>0]<<8|32;a[H>>0]=t;a[H+1>>0]=t>>8}H=f+116|0;t=c[H>>2]|0;t=(t|0)==0?f:t;k=t+84|0;l=c[k>>2]|0;s=1<<z;h:do if((l&s|0)==0?(c[k>>2]=l|s,(z|0)==1):0){r=c[t>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;l=Pe(c[r>>2]|0,0,r,D,0,542)|0;if(l|0){cd(t,32157,C);c[t+12>>2]=l;break}C=c[D>>2]|0;c[(c[k>>2]|0)+20>>2]=C;k=c[r+92>>2]|0;n=c[C+4>>2]|0;c[n+4>>2]=c[C>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;C=(c[14820]|0)+1|0;c[14820]=C;c[14821]=(C|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;S=119;break}else{k=Wa[c[29352>>2]&127](l)|0;S=119}while(0);do if((S|0)==119){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{C=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);C=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((C|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break h}while(0)}while(0);C=t+80|0;c[C>>2]=c[C>>2]|s;C=t+20|0;a[C>>0]=d[C>>0]|u;if(j){Gm(f,R,h,J);c[Q>>2]=J;c[P>>2]=J}C=F+8|0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;c[C+20>>2]=0;c[F>>2]=f;c[F+4>>2]=g;i:do if(h){l=F+24|0;b[l>>1]=0;c[D>>2]=f;c[D+4>>2]=125;c[D+8>>2]=126;c[D+12>>2]=0;c[D+24>>2]=F;m=h+24|0;k=f+208|0;C=(c[k>>2]|0)+(c[m>>2]|0)|0;c[k>>2]=C;k=c[(c[f>>2]|0)+120>>2]|0;do if((k|0)>=(C|0)){_j(D,h)|0;k=c[D>>2]|0;E=k+208|0;c[E>>2]=(c[E>>2]|0)-(c[m>>2]|0);E=h+4|0;c[E>>2]=c[E>>2]|b[l>>1]&-32752&65535;if((c[F+20>>2]|0)>0)break;if((c[k+36>>2]|0)<1)break i;else{i=0;break g}}else{c[E>>2]=k;cd(f,41637,E)}while(0);i=0;break g}while(0);do if(!(0==0?(c[T+32>>2]&128|0)==0:0)){if(a[L>>0]|0){D=0;break}if(c[f+120>>2]|0){D=0;break}l=f+44|0;k=(c[l>>2]|0)+1|0;c[l>>2]=k;l=M+108|0;m=c[l>>2]|0;if((c[M+112>>2]|0)>(m|0)){c[l>>2]=m+1;D=c[M+104>>2]|0;a[D+(m*20|0)>>0]=70;b[D+(m*20|0)+2>>1]=0;c[D+(m*20|0)+4>>2]=0;c[D+(m*20|0)+8>>2]=k;c[D+(m*20|0)+12>>2]=0;c[D+(m*20|0)+16>>2]=0;a[D+(m*20|0)+1>>0]=0;D=k;break}else{Di(M,70,0,k,0)|0;D=k;break}}else D=0;while(0);do if(x|((h|0)!=0|(i|0)!=0))S=166;else{if(c[R+56>>2]|0){S=166;break}i=R+28|0;Hj(f,z,c[i>>2]|0,1,c[R>>2]|0);do if(!(c[R+36>>2]&32)){j=c[i>>2]|0;k=(D|0)==0?-1:D;m=c[R>>2]|0;l=M+108|0;i=c[l>>2]|0;if((c[M+112>>2]|0)>(i|0)){c[l>>2]=i+1;R=c[M+104>>2]|0;a[R+(i*20|0)>>0]=-119;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=j;c[R+(i*20|0)+8>>2]=z;c[R+(i*20|0)+12>>2]=k;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else i=Di(M,137,j,z,k)|0;if(a[(c[M>>2]|0)+81>>0]|0)break;if((i|0)<0)i=(c[l>>2]|0)+-1|0;j=c[M+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(M,j+(i*20|0)|0,m,-1);break}if(!m)break;c[j+(i*20|0)+16>>2]=m;a[k>>0]=-1}while(0);i=c[y>>2]|0;if(!i){i=0;break}l=M+108|0;m=M+112|0;n=M+104|0;do{j=c[i+44>>2]|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;R=c[n>>2]|0;a[R+(k*20|0)>>0]=-119;b[R+(k*20|0)+2>>1]=0;c[R+(k*20|0)+4>>2]=j;c[R+(k*20|0)+8>>2]=z;c[R+(k*20|0)+12>>2]=0;c[R+(k*20|0)+16>>2]=0;a[R+(k*20|0)+1>>0]=0}else Di(M,137,j,z,0)|0;i=c[i+20>>2]|0}while((i|0)!=0);i=0}while(0);do if((S|0)==166){r=x|(b[F+24>>1]&64)!=0?1044:1052;j:do if(!(c[R+36>>2]&32)){i=f+44|0;l=(c[i>>2]|0)+1|0;c[i>>2]=l;i=M+108|0;k=c[i>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[i>>2]=k+1;s=c[M+104>>2]|0;a[s+(k*20|0)>>0]=73;b[s+(k*20|0)+2>>1]=0;c[s+(k*20|0)+4>>2]=0;c[s+(k*20|0)+8>>2]=l;c[s+(k*20|0)+12>>2]=0;c[s+(k*20|0)+16>>2]=0;a[s+(k*20|0)+1>>0]=0;s=0;C=0;p=1;u=0;i=0;break}else{Di(M,73,0,l,0)|0;s=0;C=0;p=1;u=0;i=0;break}}else{i=c[y>>2]|0;k:do if(!i)i=0;else while(1){F=i+55|0;if(((d[F>>0]|d[F+1>>0]<<8)&3)==2)break k;i=c[i+20>>2]|0;if(!i){i=0;break}}while(0);p=b[i+50>>1]|0;o=f+44|0;k=c[o>>2]|0;q=k+1|0;m=p<<16>>16;c[o>>2]=k+m;o=c[w>>2]|0;c[w>>2]=o+1;k=M+108|0;l=c[k>>2]|0;if((c[M+112>>2]|0)>(l|0)){c[k>>2]=l+1;F=c[M+104>>2]|0;a[F+(l*20|0)>>0]=113;b[F+(l*20|0)+2>>1]=0;c[F+(l*20|0)+4>>2]=o;c[F+(l*20|0)+8>>2]=m;c[F+(l*20|0)+12>>2]=0;c[F+(l*20|0)+16>>2]=0;a[F+(l*20|0)+1>>0]=0}else l=Di(M,113,o,m,0)|0;k=c[v>>2]|0;n=Ij(f,i)|0;if(!n){s=l;l=0;C=o;u=q;break}m=c[k>>2]|0;if(!(a[m+81>>0]|0)){C=c[k+104>>2]|0;s=(c[k+108>>2]|0)+-1|0;a[C+(s*20|0)+1>>0]=-9;c[C+(s*20|0)+16>>2]=n;s=l;l=0;C=o;u=q;break}if(c[m+480>>2]|0){s=l;l=0;C=o;u=q;break}F=(c[n>>2]|0)+-1|0;c[n>>2]=F;if(F|0){s=l;l=0;C=o;u=q;break}k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);s=l;l=0;C=o;u=q;break j}m=n;if((c[k+304>>2]|0)>>>0>m>>>0)break;if((c[k+308>>2]|0)>>>0<=m>>>0)break;s=k+300|0;c[n>>2]=c[s>>2];c[s>>2]=n;s=l;l=0;C=o;u=q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);s=l;l=0;C=o;u=q;break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);s=l;l=0;C=o;u=q;break}}while(0);A=ql(f,g,h,0,0,r,A)|0;if(!A){i=0;break g}v=A+24|0;o=c[v>>2]|0;v=c[v+4>>2]|0;w=a[A+49>>0]|0;x=w<<24>>24==1;if(!x){F=c[H>>2]|0;a[((F|0)==0?f:F)+20>>0]=1}do if(D|0){k=M+108|0;m=c[k>>2]|0;if((c[M+112>>2]|0)>(m|0)){c[k>>2]=m+1;F=c[M+104>>2]|0;a[F+(m*20|0)>>0]=83;b[F+(m*20|0)+2>>1]=0;c[F+(m*20|0)+4>>2]=D;c[F+(m*20|0)+8>>2]=1;c[F+(m*20|0)+12>>2]=0;c[F+(m*20|0)+16>>2]=0;a[F+(m*20|0)+1>>0]=0;break}else{Di(M,83,D,1,0)|0;break}}while(0);z=(i|0)!=0;do if(!z){m=f+44|0;k=(c[m>>2]|0)+1|0;c[m>>2]=k;m=M+108|0;n=c[m>>2]|0;if((c[M+112>>2]|0)>(n|0)){c[m>>2]=n+1;F=c[M+104>>2]|0;a[F+(n*20|0)>>0]=-128;b[F+(n*20|0)+2>>1]=0;c[F+(n*20|0)+4>>2]=J;c[F+(n*20|0)+8>>2]=k;c[F+(n*20|0)+12>>2]=0;c[F+(n*20|0)+16>>2]=0;a[F+(n*20|0)+1>>0]=0;n=k;break}else{Di(M,128,J,k,0)|0;n=k;break}}else{m=p<<16>>16;if(p<<16>>16<=0){n=u;break}n=i+4|0;k=0;do{Vj(M,R,J,b[(c[n>>2]|0)+(k<<1)>>1]|0,k+u|0);k=k+1|0}while((k|0)!=(m|0));n=u}while(0);y=w<<24>>24!=0;l:do if(y){m=B+2|0;m:do if(c[T+272>>2]|0){if(!(a[K>>0]|0))S=216}else{do if(!(0<0|(0==0?(e[T+276>>1]|0)>>>0<m>>>0:0))){k=T+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];S=T+284|0;c[S>>2]=(c[S>>2]|0)+1;S=217;break m}k=T+296|0;i=c[k>>2]|0;if(!i){i=T+292|0;break}else{c[k>>2]=c[i>>2];S=T+284|0;c[S>>2]=(c[S>>2]|0)+1;S=217;break m}}else i=T+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;S=216}while(0);if((S|0)==216){i=_d(T,m,0)|0;S=217}do if((S|0)==217){if(!i)break;K=B+1|0;gw(i|0,1,K|0)|0;a[i+K>>0]=0;if((o|0)>-1)a[i+(o-J)>>0]=0;if((v|0)>-1)a[i+(v-J)>>0]=0;do if(s|0){k=c[M>>2]|0;if(a[k+81>>0]|0)break;K=c[M+104>>2]|0;E=K+(s*20|0)+1|0;F=K+(s*20|0)+16|0;kg(k,a[E>>0]|0,c[F>>2]|0);a[E>>0]=0;c[F>>2]=0;a[K+(s*20|0)>>0]=-86}while(0);r=f+56|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;r=n;break l}while(0);sl(A);i=0;break g}else{do if(!z){i=M+108|0;k=c[i>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[i>>2]=k+1;i=c[M+104>>2]|0;a[i+(k*20|0)>>0]=-108;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=l;c[i+(k*20|0)+8>>2]=n;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;i=1;k=n;break}else{Di(M,148,l,n,0)|0;i=1;k=n;break}}else{t=f+44|0;k=(c[t>>2]|0)+1|0;c[t>>2]=k;t=p<<16>>16;q=gl(c[f>>2]|0,i)|0;r=M+108|0;i=c[r>>2]|0;s=M+112|0;if((c[s>>2]|0)>(i|0)){c[r>>2]=i+1;K=c[M+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=u;c[K+(i*20|0)+8>>2]=t;c[K+(i*20|0)+12>>2]=k;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(M,92,u,t,k)|0;m=c[M>>2]|0;n:do if(!(a[m+81>>0]|0)){if((i|0)<0)i=(c[r>>2]|0)+-1|0;m=c[M+104>>2]|0;n=m+(i*20|0)|0;do if(p<<16>>16<=-1){o=m+(i*20|0)+1|0;if(a[o>>0]|0)break;if(p<<16>>16==-3){c[m+(i*20|0)+16>>2]=q;a[o>>0]=-3;break n}if(!q)break n;c[m+(i*20|0)+16>>2]=q;a[o>>0]=p;if(p<<16>>16!=-12)break n;K=q+12|0;c[K>>2]=(c[K>>2]|0)+1;break n}while(0);Ei(M,n,q,t)}else{if(p<<16>>16==-12)break;kg(m,t,q)}while(0);i=c[r>>2]|0;if((c[s>>2]|0)>(i|0)){c[r>>2]=i+1;K=c[M+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=C;c[K+(i*20|0)+8>>2]=k;c[K+(i*20|0)+12>>2]=u;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(M,132,C,k,u)|0;if(a[(c[M>>2]|0)+81>>0]|0){i=0;break}K=c[M+104>>2]|0;a[K+(i*20|0)+1>>0]=-3;c[K+(i*20|0)+16>>2]=t;i=0}while(0);sl(A);s=0;p=i;i=0;r=k}while(0);do if(!j){if(w<<24>>24!=2){Hm(f,R,109,8,J,i,P,Q)|0;break}k=M+108|0;j=c[k>>2]|0;if((c[M+112>>2]|0)>(j|0)){c[k>>2]=j+1;o=c[M+104>>2]|0;a[o+(j*20|0)>>0]=17;o=o+(j*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0))}else j=Di(M,17,0,0,0)|0;Hm(f,R,109,8,J,i,P,Q)|0;k=c[k>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((j|0)<0?k+-1|0:j)*20|0)|0;else j=59308;c[j+8>>2]=k}while(0);do if(!y){n=M+108|0;k=c[n>>2]|0;m=M+112|0;j=(c[m>>2]|0)>(k|0);if(!z)if(j){c[n>>2]=k+1;q=c[M+104>>2]|0;a[q+(k*20|0)>>0]=41;b[q+(k*20|0)+2>>1]=0;c[q+(k*20|0)+4>>2]=l;c[q+(k*20|0)+8>>2]=0;c[q+(k*20|0)+12>>2]=r;c[q+(k*20|0)+16>>2]=0;a[q+(k*20|0)+1>>0]=0;q=k;break}else{q=Di(M,41,l,0,r)|0;break}if(j){c[n>>2]=k+1;K=c[M+104>>2]|0;a[K+(k*20|0)>>0]=36;b[K+(k*20|0)+2>>1]=0;c[K+(k*20|0)+4>>2]=C;c[K+(k*20|0)+8>>2]=0;c[K+(k*20|0)+12>>2]=0;c[K+(k*20|0)+16>>2]=0;a[K+(k*20|0)+1>>0]=0}else k=Di(M,36,C,0,0)|0;l=c[n>>2]|0;j=(c[m>>2]|0)>(l|0);if(!(c[R+56>>2]|0))if(j){c[n>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=127;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=C;c[q+(l*20|0)+8>>2]=r;c[q+(l*20|0)+12>>2]=0;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=k;break}else{Di(M,127,C,r,0)|0;q=k;break}else if(j){c[n>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=90;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=C;c[q+(l*20|0)+8>>2]=0;c[q+(l*20|0)+12>>2]=r;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=k;break}else{Di(M,90,C,0,r)|0;q=k;break}}else{if(c[R+56>>2]|0){q=0;break}k=c[P>>2]|0;if(!(a[i+(k-J)>>0]|0)){q=0;break}l=M+108|0;j=c[l>>2]|0;if((c[M+112>>2]|0)>(j|0)){c[l>>2]=j+1;K=c[M+104>>2]|0;a[K+(j*20|0)>>0]=28;b[K+(j*20|0)+2>>1]=0;c[K+(j*20|0)+4>>2]=k;c[K+(j*20|0)+8>>2]=s;c[K+(j*20|0)+12>>2]=r;c[K+(j*20|0)+16>>2]=0;a[K+(j*20|0)+1>>0]=0}else j=Di(M,28,k,s,r)|0;if(a[(c[M>>2]|0)+81>>0]|0){q=0;break}q=c[M+104>>2]|0;a[q+(j*20|0)+1>>0]=-3;c[q+(j*20|0)+16>>2]=p<<16>>16;q=0}while(0);do if(!(c[R+56>>2]|0))Im(f,R,I,c[P>>2]|0,c[Q>>2]|0,r,p,(a[L>>0]|0)==0&1,11,w,v);else{j=c[R+64>>2]|0;o:do if(!j)p=0;else while(1){if((c[j>>2]|0)==(T|0)){p=j;break o}j=c[j+24>>2]|0;if(!j){p=0;break}}while(0);o=c[H>>2]|0;o=(o|0)==0?f:o;n=o+204|0;m=c[n>>2]|0;l=o+252|0;p:do if((m|0)>0){j=c[l>>2]|0;k=0;do{if((c[j+(k<<2)>>2]|0)==(R|0))break p;k=k+1|0}while((k|0)<(m|0));k=l;S=295}else{k=l;j=c[l>>2]|0;S=295}while(0);q:do if((S|0)==295){do if(!(mb()|0)){S=(m<<2)+4|0;j=sb(j,S,((S|0)<0)<<31>>31)|0;if(!j)break;c[k>>2]=j;S=c[n>>2]|0;c[n>>2]=S+1;c[j+(S<<2)>>2]=R;break q}while(0);j=c[o>>2]|0;k=j+81|0;if(a[k>>0]|0)break;if(a[j+82>>0]|0)break;a[k>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;S=j+272|0;c[S>>2]=(c[S>>2]|0)+1;j=c[j+236>>2]|0;if(!j)break;c[j+12>>2]=7}while(0);m=c[H>>2]|0;a[((m|0)==0?f:m)+21>>0]=1;m=M+108|0;do if(x){j=c[m>>2]|0;k=M+112|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;S=c[M+104>>2]|0;a[S+(j*20|0)>>0]=117;b[S+(j*20|0)+2>>1]=0;c[S+(j*20|0)+4>>2]=J;c[S+(j*20|0)+8>>2]=0;c[S+(j*20|0)+12>>2]=0;c[S+(j*20|0)+16>>2]=0;a[S+(j*20|0)+1>>0]=0}else Di(M,117,J,0,0)|0;if(c[H>>2]|0)break;a[f+20>>0]=0}else k=M+112|0;while(0);j=c[m>>2]|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;S=c[M+104>>2]|0;a[S+(j*20|0)>>0]=10;b[S+(j*20|0)+2>>1]=0;c[S+(j*20|0)+4>>2]=0;c[S+(j*20|0)+8>>2]=1;c[S+(j*20|0)+12>>2]=r;c[S+(j*20|0)+16>>2]=0;a[S+(j*20|0)+1>>0]=0}else j=Di(M,10,0,1,r)|0;do if(!(a[(c[M>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;k=c[M+104>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(M,k+(j*20|0)|0,p,-12);break}if(!p)break;c[k+(j*20|0)+16>>2]=p;a[l>>0]=-12;S=p+12|0;c[S>>2]=(c[S>>2]|0)+1}while(0);j=c[m>>2]|0;if((j|0)<=0)break;b[(c[M+104>>2]|0)+((j+-1|0)*20|0)+2>>1]=2}while(0);if(y){k=c[M+12>>2]|0;j=~s;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,M,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M+108>>2];sl(A);break}if(z){j=q+1|0;k=M+108|0;l=c[k>>2]|0;if((c[M+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[M+104>>2]|0;a[S+(l*20|0)>>0]=5;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=C;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else Di(M,5,C,j,0)|0;k=c[k>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((q|0)<0?k+-1|0:q)*20|0)|0;else j=59308;c[j+8>>2]=k;break}else{j=M+108|0;k=c[j>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[j>>2]=k+1;S=c[M+104>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=q;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(M,11,0,q,0)|0;k=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((q|0)<0?k+-1|0:q)*20|0)|0;else j=59308;c[j+8>>2]=k;break}}while(0);do if(!(a[L>>0]|0)){if(c[f+120>>2]|0)break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!D)break;j=M+108|0;k=c[j>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[j>>2]=k+1;f=c[M+104>>2]|0;a[f+(k*20|0)>>0]=81;b[f+(k*20|0)+2>>1]=0;c[f+(k*20|0)+4>>2]=D;c[f+(k*20|0)+8>>2]=1;c[f+(k*20|0)+12>>2]=0;c[f+(k*20|0)+16>>2]=0;a[f+(k*20|0)+1>>0]=0}else Di(M,81,D,1,0)|0;Wi(M,1);if(a[(c[M>>2]|0)+81>>0]|0)break;yc(c[M+116>>2]|0,44614,-1,1,0)|0}while(0);if(O)c[O+240>>2]=N}else i=0}else i=0}else i=0;while(0);qi(T,g);if(h|0)ni(T,h);if(!i){Ra=U;return}if(T|0){if(c[T+480>>2]|0){Xd(T,i);Ra=U;return}h=i;if((c[T+304>>2]|0)>>>0<=h>>>0?(c[T+308>>2]|0)>>>0>h>>>0:0){T=T+300|0;c[i>>2]=c[T>>2];c[T>>2]=i;Ra=U;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Ra=U;return}else{T=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Ra=U;return}}function tj(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;Aa=Ra;Ra=Ra+128|0;ea=Aa+48|0;aa=Aa+40|0;S=Aa+32|0;V=Aa+24|0;U=Aa+16|0;T=Aa+8|0;r=Aa;da=Aa+88|0;fa=Aa+56|0;va=Aa+52|0;c[va>>2]=0;za=c[f>>2]|0;a:do if((c[f+36>>2]|0)==0?(y=za+81|0,(a[y>>0]|0)==0):0){m=c[g+8>>2]|0;if(!m)l=g+12|0;else{n=c[za+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0;l=n+(l<<4)|0}ya=bd(f,0,c[g+16>>2]|0,c[l>>2]|0)|0;l=c[f>>2]|0;m=g+24|0;n=c[m>>2]|0;do if(n|0){if(l|0?c[l+480>>2]|0:0){Vi(l,n);break}ua=n+32|0;wa=(c[ua>>2]|0)+-1|0;c[ua>>2]=wa;if(!wa)Vi(l,n)}while(0);c[m>>2]=ya;if(ya|0){wa=ya+32|0;c[wa>>2]=(c[wa>>2]|0)+1;b:do if(a[g+45>>0]&2){p=c[g+72>>2]|0;l=c[ya+8>>2]|0;c:do if(l|0){q=d[208+(d[p>>0]|0)>>0]|0;while(1){n=c[l>>2]|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-q|0;if(!(wa<<24>>24==0|(m|0)!=0)){o=p;do{n=n+1|0;o=o+1|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(m|0)!=0))}if(!m)break;l=c[l+20>>2]|0;if(!l)break c}c[g+76>>2]=l;break b}while(0);c[r>>2]=p;c[r+4>>2]=0;cd(f,41107,r);a[f+17>>0]=1;break a}while(0);n=c[f>>2]|0;ua=ya+72|0;s=c[ua>>2]|0;if(!s)Z=-1e6;else{m=c[n+16>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(s|0)){Z=l;break}else l=l+1|0}do if(!(0==0?(c[n+32>>2]&262144|0)==0:0)?(t=c[(c[n+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){if((s|0)!=(t|0)?(u=c[t+48>>2]|0,(u|0)!=0):0){r=ya+68|0;q=u;l=0;do{p=c[q+8>>2]|0;if((c[p+24>>2]|0)==(s|0)){n=c[p+4>>2]|0;o=c[ya>>2]|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(wa<<24>>24==0|(m|0)!=0))do{n=n+1|0;o=o+1|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(m|0)!=0));if(!m){if(!l)l=c[r>>2]|0;c[p+32>>2]=l;l=p}}q=c[q>>2]|0}while((q|0)!=0);if(!l)xa=43}else xa=43;if((xa|0)==43){l=c[ya+68>>2]|0;if(!l){xa=65;break}}if(!h){m=0;n=l;do{if((a[n+8>>0]|0)==122)m=m|d[n+9>>0];n=c[n+32>>2]|0}while((n|0)!=0)}else{m=0;x=l;do{d:do if((a[x+8>>0]|0)==122){n=c[x+16>>2]|0;e:do if(n|0){w=c[h>>2]|0;if((w|0)<=0)break d;v=c[n+4>>2]|0;if((v|0)<=0)break d;s=c[n>>2]|0;q=0;while(1){t=c[h+4+(q*20|0)+4>>2]|0;u=d[208+(d[t>>0]|0)>>0]|0;r=0;do{o=c[s+(r<<3)>>2]|0;wa=a[o>>0]|0;n=(d[208+(wa&255)>>0]|0)-u|0;if(!(wa<<24>>24==0|(n|0)!=0)){p=t;do{o=o+1|0;p=p+1|0;wa=a[o>>0]|0;n=(d[208+(wa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(n|0)!=0))}if(!n)break e;r=r+1|0}while((r|0)<(v|0));q=q+1|0;if((q|0)>=(w|0))break d}}while(0);m=m|d[x+9>>0]}while(0);x=c[x+32>>2]|0}while((x|0)!=0)}if(!m)xa=65}else xa=65;while(0);if((xa|0)==65){m=0;l=0}sa=(c[ya+12>>2]|0)!=0;if((Sk(f,ya)|0)==0?(Fm(f,ya,m)|0)==0:0){_=f+40|0;ga=c[_>>2]|0;s=ga+1|0;c[_>>2]=s;ha=ya+36|0;ba=ya+8|0;o=c[ba>>2]|0;f:do if(c[ha>>2]&32)if(!o){p=0;o=ga;n=0}else{n=o;while(1){xa=n+55|0;if(((d[xa>>0]|d[xa+1>>0]<<8)&3)==2){xa=73;break f}n=c[n+20>>2]|0;if(!n){n=0;xa=73;break}}}else{n=0;xa=73}while(0);if((xa|0)==73)if(!o){p=0;o=ga}else{p=0;r=ga;q=s;do{r=(n|0)==(o|0)?q:r;q=q+1|0;p=p+1|0;o=c[o+20>>2]|0}while((o|0)!=0);c[_>>2]=q;o=r}$=(k|0)!=0;if($){o=c[k+28>>2]|0;s=c[k+32>>2]|0;c[_>>2]=ga}Y=g+48|0;c[Y>>2]=o;ta=ya+42|0;t=p+2+(p+(b[ta>>1]|0)<<2)|0;g:do if(c[za+272>>2]|0)if(!(a[y>>0]|0))xa=89;else break a;else{do if(!(0<0|(0==0?(e[za+276>>1]|0)>>>0<t>>>0:0))){q=za+300|0;r=c[q>>2]|0;if(r|0){c[q>>2]=c[r>>2];wa=za+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=r;break g}q=za+296|0;r=c[q>>2]|0;if(!r){q=za+292|0;break}else{c[q>>2]=c[r>>2];wa=za+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=r;break g}}else q=za+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;xa=89}while(0);if((xa|0)==89)wa=_d(za,t,0)|0;if(wa|0){ra=wa+(b[ta>>1]<<2)|0;ca=ra+(p<<2)|0;W=p+1|0;gw(ca|0,1,W|0)|0;a[ca+W>>0]=0;qa=b[ta>>1]|0;q=qa<<16>>16;if(qa<<16>>16>0)gw(wa|0,-1,((q|0)>1?q:1)<<2|0)|0;X=fa+12|0;c[X>>2]=0;c[X+4>>2]=0;c[X+8>>2]=0;c[X+12>>2]=0;c[X+16>>2]=0;c[fa>>2]=f;c[fa+4>>2]=g;c[fa+8>>2]=k;X=fa+24|0;b[X>>1]=512;h:do if((c[h>>2]|0)>0){F=da+4|0;H=da+8|0;I=da+12|0;J=da+24|0;K=(n|0)==0;M=za+16|0;N=ya+4|0;O=fa+20|0;P=f+200|0;Q=f+240|0;R=ya+40|0;B=0;t=0;D=0;E=0;i:while(1){C=h+4+(E*20|0)|0;u=c[C>>2]|0;if(u){v=e[X>>1]|0;b[X>>1]=v&28655;q=c[fa>>2]|0;c[da>>2]=q;c[F>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=fa;w=u+24|0;r=q;pa=r+208|0;qa=(c[pa>>2]|0)+(c[w>>2]|0)|0;c[pa>>2]=qa;r=c[(c[r>>2]|0)+120>>2]|0;if((r|0)<(qa|0)){xa=98;break}_j(da,u)|0;q=c[da>>2]|0;qa=q+208|0;c[qa>>2]=(c[qa>>2]|0)-(c[w>>2]|0);qa=b[X>>1]|0;pa=u+4|0;c[pa>>2]=c[pa>>2]|qa&-32752&65535;b[X>>1]=v&36880|qa&65535;if((c[O>>2]|0)>0)break;if((c[q+36>>2]|0)>=1){xa=919;break h}}q=b[ta>>1]|0;j:do if(q<<16>>16>0){A=c[N>>2]|0;x=c[h+4+(E*20|0)+4>>2]|0;z=d[208+(d[x>>0]|0)>>0]|0;w=q<<16>>16;y=0;while(1){v=c[A+(y<<4)>>2]|0;qa=a[v>>0]|0;q=(d[208+(qa&255)>>0]|0)-z|0;if(!(qa<<24>>24==0|(q|0)!=0)){r=x;u=v;do{u=u+1|0;r=r+1|0;qa=a[u>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(!q)break;q=y+1|0;if((q|0)<(w|0))y=q;else{xa=114;break j}}do if((y|0)==(b[R>>1]|0)){r=c[C>>2]|0;t=1;q=D}else{if(K){r=B;q=D;break}r=B;q=(a[A+(y<<4)+15>>0]&1)==0?D:1}while(0);c[wa+(y<<2)>>2]=E;z=q;w=r;x=t}else{x=c[h+4+(E*20|0)+4>>2]|0;xa=114}while(0);if((xa|0)==114){xa=0;if(!K){xa=128;break}v=a[x>>0]|0;u=d[208+(v&255)>>0]|0;q=u+-95|0;v=v<<24>>24==0;if(!(v|(q|0)!=0)){r=58070;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}do if(q|0){q=u+-114|0;if(!(v|(q|0)!=0)){r=40352;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(!q)break;q=u+-111|0;if(!(v|(q|0)!=0)){r=58078;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(q|0){xa=128;break i}}while(0);y=-1;z=D;w=c[C>>2]|0;x=1;v=40352}q=c[ya>>2]|0;r=c[(c[M>>2]|0)+(Z<<4)>>2]|0;t=c[f>>2]|0;do if(!(a[t+165>>0]|0)){if(a[P>>0]|0)break;u=c[t+312>>2]|0;if(!u)break;q=$a[u&127](c[t+316>>2]|0,23,q,v,r,c[Q>>2]|0)|0;if((q|0)==1){xa=134;break i}if((q|2|0)!=2){xa=136;break i}if((q|0)!=2)break;c[wa+(y<<2)>>2]=-1}while(0);E=E+1|0;if((E|0)>=(c[h>>2]|0)){S=w;N=x;O=z;xa=140;break h}else{B=w;t=x;D=z}}if((xa|0)==98){c[T>>2]=r;cd(q,41637,T)}else if((xa|0)==128){c[U>>2]=x;cd(f,44776,U);a[f+17>>0]=1;xa=918;break}else if((xa|0)==134){cd(f,39216,V);c[f+12>>2]=23;xa=919;break}else if((xa|0)==136){cd(f,39231,S);c[f+12>>2]=1;xa=919;break}xa=919}else{S=0;N=0;O=0;xa=140}while(0);k:do if((xa|0)==140){pa=(N&255)+(O&255)|0;ja=pa&255;M=ya+56|0;oa=((c[M>>2]|0)!=0)<<31>>31;qa=g+64|0;c[qa>>2]=oa;c[qa+4>>2]=((oa|0)<0)<<31>>31;pa=pa&255;l:do if(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)ia=0;else{q=c[ya+16>>2]|0;y=c[ya>>2]|0;m:do if(!q)x=0;else{w=ya+40|0;r=(y|0)==0;if(!pa){if(r){u=q;q=0;while(1){if(!(c[u+8>>2]|0)){ia=2;break l}t=c[u+20>>2]|0;n:do if((t|0)>0){r=0;do{if((c[wa+(c[u+36+(r<<3)>>2]<<2)>>2]|0)>-1){q=1;break n}r=r+1|0}while((r|0)<(t|0))}while(0);u=c[u+4>>2]|0;if(!u){x=q;break m}}}v=q;q=0;while(1){t=c[v+8>>2]|0;if(t|0){qa=a[y>>0]|0;r=(d[208+(qa&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(r|0)!=0)){u=y;do{u=u+1|0;t=t+1|0;qa=a[u>>0]|0;r=(d[208+(qa&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(r|0)!=0))}if(!r){ia=2;break l}}t=c[v+20>>2]|0;o:do if((t|0)>0){r=0;do{if((c[wa+(c[v+36+(r<<3)>>2]<<2)>>2]|0)>-1){q=1;break o}r=r+1|0}while((r|0)<(t|0))}while(0);v=c[v+4>>2]|0;if(!v){x=q;break m}}}if(r){r=0;while(1){if(!(c[q+8>>2]|0)){ia=2;break l}u=c[q+20>>2]|0;p:do if((u|0)>0){t=0;do{v=c[q+36+(t<<3)>>2]|0;if((c[wa+(v<<2)>>2]|0)>-1){r=1;break p}t=t+1|0;if((v|0)==(b[w>>1]|0)){r=1;break p}}while((t|0)<(u|0))}while(0);q=c[q+4>>2]|0;if(!q){x=r;break m}}}r=0;while(1){u=c[q+8>>2]|0;if(u|0){qa=a[y>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(t|0)!=0)){v=y;do{v=v+1|0;u=u+1|0;qa=a[v>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(t|0)!=0))}if(!t){ia=2;break l}}u=c[q+20>>2]|0;q:do if((u|0)>0){t=0;do{v=c[q+36+(t<<3)>>2]|0;if((c[wa+(v<<2)>>2]|0)>-1){r=1;break q}t=t+1|0;if((v|0)==(b[w>>1]|0)){r=1;break q}}while((t|0)<(u|0))}while(0);q=c[q+4>>2]|0;if(!q){x=r;break}}}while(0);u=c[ua>>2]|0;v=c[u+68>>2]|0;if(!v){r=u+60|0;q=u+64|0}else{r=a[y>>0]|0;if(!(r<<24>>24))q=0;else{q=0;t=y;do{t=t+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[t>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[u+56>>2]|0)>>>0)|0;r=v+(q<<3)|0;q=v+(q<<3)+4|0}r=c[r>>2]|0;r:do if(!r)q=59292;else{w=d[208+(d[y>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;u=c[q+12>>2]|0;qa=a[u>>0]|0;t=(d[208+(qa&255)>>0]|0)-w|0;if(!(qa<<24>>24==0|(t|0)!=0)){v=y;do{u=u+1|0;v=v+1|0;qa=a[u>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(t|0)!=0))}if(!t)break r;if(!r){q=59292;break}}}while(0);q=c[q+8>>2]|0;if(!q){ia=x;break}r=q;q=x;while(1){if(Jm(ya,r,wa,pa)|0)if(!(a[r+26>>0]|0))q=1;else{ia=2;break l}r=c[r+12>>2]|0;if(!r){ia=q;break}}}while(0);if((j|0)==5){c[va>>2]=1;q=1}else q=0;r=c[ba>>2]|0;if(r){J=(pa|0)!=0|(ia|0)>1;z=f+44|0;A=da+20|0;B=da+4|0;C=da+24|0;D=N<<24>>24==0;E=da+20|0;F=da+4|0;H=da+24|0;I=(j|0)==11;y=0;while(1){s:do if(J|(r|0)==(n|0))xa=210;else{t=c[r+36>>2]|0;if(t|0){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[B>>2]=136;c[C>>2]=wa;_j(da,t)|0;t=a[A>>0]|0;u=t&-3;if(D){a[A>>0]=u;t=u}if(t<<24>>24){xa=210;break}}v=r+50|0;if(!(b[v>>1]|0)){xa=233;break}w=r+4|0;x=r+40|0;t:do if(D){u=0;while(1){t=b[(c[w>>2]|0)+(u<<1)>>1]|0;if(t<<16>>16>-1)t=(c[wa+(t<<16>>16<<2)>>2]|0)>>>31^1;else{t=c[(c[x>>2]|0)+4+(u*20|0)>>2]|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[F>>2]=136;c[H>>2]=wa;if(!t)t=0;else{_j(da,t)|0;t=a[E>>0]|0}t=(t&-3)<<24>>24!=0&1}u=u+1|0;if(t|0)break t;if(u>>>0>=(e[v>>1]|0)>>>0){xa=233;break s}}}else{u=0;while(1){t=b[(c[w>>2]|0)+(u<<1)>>1]|0;if(t<<16>>16>-1)t=(c[wa+(t<<16>>16<<2)>>2]|0)>>>31^1;else{t=c[(c[x>>2]|0)+4+(u*20|0)>>2]|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[F>>2]=136;c[H>>2]=wa;if(!t)t=0;else{_j(da,t)|0;t=a[E>>0]|0}t=t<<24>>24!=0&1}u=u+1|0;if(t|0)break t;if(u>>>0>=(e[v>>1]|0)>>>0){xa=233;break s}}}while(0);t=(c[z>>2]|0)+1|0;c[z>>2]=t+(e[r+52>>1]|0);if(!I){xa=231;break}q=(a[r+54>>0]|0)==5?1:q;xa=231}while(0);if((xa|0)==210){t=(c[z>>2]|0)+1|0;c[z>>2]=t+(e[r+52>>1]|0);xa=231}do if((xa|0)==231){xa=0;if(!t){xa=233;break}u=y+1|0}while(0);if((xa|0)==233){xa=0;u=y+1|0;a[ca+u>>0]=0;t=0}c[ra+(y<<2)>>2]=t;r=c[r+20>>2]|0;if(!r)break;else y=u}c[va>>2]=q}if(q|0)gw(ca|0,1,W|0)|0;ma=f+8|0;q=c[ma>>2]|0;if(!q){t=c[f>>2]|0;do if(!(c[f+116>>2]|0)){if(b[t+76>>1]&8)break;a[f+23>>0]=1}while(0);u:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))xa=252;else{xa=918;break k}else{do if((e[t+276>>1]|0)>=224){q=t+300|0;r=c[q>>2]|0;if(r|0){c[q>>2]=c[r>>2];qa=t+284|0;c[qa>>2]=(c[qa>>2]|0)+1;break u}q=t+296|0;r=c[q>>2]|0;if(!r){q=t+292|0;break}else{c[q>>2]=c[r>>2];qa=t+284|0;c[qa>>2]=(c[qa>>2]|0)+1;break u}}else q=t+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;xa=252}while(0);if((xa|0)==252)r=_d(t,224,0)|0;if(!r){xa=918;break}D=r+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[r>>2]=t;q=t+4|0;t=c[q>>2]|0;if(t|0)c[t+4>>2]=r;c[r+8>>2]=t;c[r+4>>2]=0;c[q>>2]=r;c[r+20>>2]=381479589;c[r+12>>2]=f;c[ma>>2]=r;Di(r,61,0,1,0)|0;la=r}else la=q;ka=f+18|0;if(!(a[ka>>0]|0)){qa=la+149|0;oa=d[qa>>0]|d[qa+1>>0]<<8|32;a[qa>>0]=oa;a[qa+1>>0]=oa>>8}J=(l|0)!=0;T=(ia|0)!=0;z=(J|T)&1;qa=f+116|0;B=c[qa>>2]|0;B=(B|0)==0?f:B;q=B+84|0;r=c[q>>2]|0;A=1<<Z;v:do if(!(r&A)){c[q>>2]=r|A;if((Z|0)!=1)break;y=c[B>>2]|0;q=y+16|0;if(c[(c[q>>2]|0)+20>>2]|0)break;if(a[B+199>>0]|0)break;r=Pe(c[y>>2]|0,0,y,da,0,542)|0;if(r|0){cd(B,32157,aa);c[B+12>>2]=r;break}oa=c[da>>2]|0;c[(c[q>>2]|0)+20>>2]=oa;q=c[y+92>>2]|0;u=c[oa+4>>2]|0;c[u+4>>2]=c[oa>>2];do if(!(b[u+22>>1]&2)){v=u+32|0;w=u+36|0;x=(c[v>>2]|0)-(c[w>>2]|0)|0;do if((q+-512|0)>>>0<65025){if(q+-1&q|0)break;c[v>>2]=q;t=u+80|0;q=c[t>>2]|0;if(!q)break;r=q+-4|0;c[t>>2]=r;q=r;do if((c[14816]|0)>>>0<=q>>>0)if((c[14817]|0)>>>0>q>>>0){c[14979]=(c[14979]|0)+-1;c[r>>2]=c[14819];c[14819]=r;oa=(c[14820]|0)+1|0;c[14820]=oa;c[14821]=(oa|0)<(c[14815]|0)&1;break}else{q=Wa[c[29352>>2]&127](r)|0;xa=274;break}else{q=Wa[c[29352>>2]&127](r)|0;xa=274}while(0);do if((xa|0)==274){c[14980]=(c[14980]|0)-q;if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{oa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);c[t>>2]=0}while(0);oa=Se(c[u>>2]|0,v,x)|0;c[w>>2]=(c[v>>2]|0)-(x&65535);if((oa|0)!=7)break;q=y+81|0;do if(!(a[q>>0]|0)){if(a[y+82>>0]|0)break;a[q>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;q=y+272|0;c[q>>2]=(c[q>>2]|0)+1;q=c[y+236>>2]|0;if(!q)break;c[q+12>>2]=7}while(0);break v}while(0)}while(0);oa=B+80|0;c[oa>>2]=c[oa>>2]|A;oa=B+20|0;a[oa>>0]=d[oa>>0]|z;if(!(c[M>>2]|0)){t=f+44|0;u=c[t>>2]|0;w=u+2|0;c[t>>2]=w;if(J|O<<24>>24!=0|T){q=w+(b[ta>>1]|0)|0;c[t>>2]=q;x=u+3|0}else{x=0;q=w}r=q+1|0;if(J|(ia|pa|0)!=0){c[t>>2]=r;y=r;v=q+2|0;q=r}else{y=w;v=r}c[t>>2]=q+(b[ta>>1]|0);F=u+1|0;aa=w;K=x;Q=y}else{F=0;v=0;aa=0;K=0;Q=0}if(sa){oa=f+240|0;na=c[oa>>2]|0;c[oa>>2]=c[ya>>2];Gm(f,ya,i,o);oa=f}else{na=0;oa=0}w:do if(!i)xa=302;else{t=e[X>>1]|0;b[X>>1]=t&28655;q=c[fa>>2]|0;c[da>>2]=q;c[da+4>>2]=125;c[da+8>>2]=126;c[da+12>>2]=0;c[da+24>>2]=fa;u=i+24|0;r=q+208|0;Z=(c[r>>2]|0)+(c[u>>2]|0)|0;c[r>>2]=Z;r=c[(c[q>>2]|0)+120>>2]|0;do if((r|0)>=(Z|0)){_j(da,i)|0;q=c[da>>2]|0;ea=q+208|0;c[ea>>2]=(c[ea>>2]|0)-(c[u>>2]|0);ea=b[X>>1]|0;da=i+4|0;c[da>>2]=c[da>>2]|ea&-32752&65535;b[X>>1]=t&36880|ea&65535;if((c[fa+20>>2]|0)>0)break;if((c[q+36>>2]|0)<1){xa=302;break w}else break w}else{c[ea>>2]=r;cd(q,41637,ea)}while(0)}while(0);x:do if((xa|0)==302){if(c[M>>2]|0){H=c[ma>>2]|0;m=c[f>>2]|0;l=c[ya+64>>2]|0;y:do if(!l)C=0;else while(1){if((c[l>>2]|0)==(m|0)){C=l;break y}l=c[l+24>>2]|0;if(!l){C=0;break}}while(0);y=b[ta>>1]|0;A=(y<<16>>16)+2|0;x=c[Y>>2]|0;F=c[_>>2]|0;c[_>>2]=F+1;D=H+108|0;l=c[D>>2]|0;E=H+112|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;r=c[H+104>>2]|0;a[r+(l*20|0)>>0]=113;b[r+(l*20|0)+2>>1]=0;c[r+(l*20|0)+4>>2]=F;c[r+(l*20|0)+8>>2]=A;c[r+(l*20|0)+12>>2]=0;c[r+(l*20|0)+16>>2]=0;a[r+(l*20|0)+1>>0]=0;r=l}else r=Di(H,113,F,A,0)|0;B=f+44|0;u=c[B>>2]|0;z=u+1|0;w=u+A|0;v=w+1|0;w=w+2|0;c[B>>2]=w;B=ql(f,g,i,0,0,4,0)|0;if(!B)break;if((b[ta>>1]|0)>0){s=u+3|0;t=H+104|0;q=0;do{l=c[wa+(q<<2)>>2]|0;z:do if((l|0)>-1){l=c[h+4+(l*20|0)>>2]|0;p=q+s|0;do if(l){if((a[l>>0]|0)!=-88){o=Jj(f,l,p)|0;break}o=c[ma>>2]|0;l=c[l+28>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[o+104>>2]|0;a[va+(n*20|0)>>0]=78;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=l;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break z}else{Di(o,78,l,p,0)|0;break z}}else o=Jj(f,0,p)|0;while(0);if((o|0)==(p|0))break;l=c[ma>>2]|0;if(!l)break;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[l+104>>2]|0;a[va+(n*20|0)>>0]=79;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=o;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(l,79,o,p,0)|0;break}}else{l=q+s|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[t>>2]|0;a[va+(m*20|0)>>0]=-92;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=x;c[va+(m*20|0)+8>>2]=q;c[va+(m*20|0)+12>>2]=l;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else Di(H,164,x,q,l)|0;l=c[D>>2]|0;if((l|0)<=0)break;b[(c[t>>2]|0)+((l+-1|0)*20|0)+2>>1]=1}while(0);q=q+1|0}while((q|0)<(b[ta>>1]|0))}do if(!(c[ha>>2]&32)){l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=-128;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=z;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,128,x,z,0)|0;p=u+2|0;if(!S){l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=-128;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=p;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0;break}else{Di(H,128,x,p,0)|0;break}}if((a[S>>0]|0)==-88){o=c[ma>>2]|0;l=c[S+28>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[o+104>>2]|0;a[va+(n*20|0)>>0]=78;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=l;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(o,78,l,p,0)|0;break}}o=Jj(f,S,p)|0;if((o|0)==(p|0))break;l=c[ma>>2]|0;if(!l)break;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[l+104>>2]|0;a[va+(n*20|0)>>0]=79;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=o;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(l,79,o,p,0)|0;break}}else{l=ba;while(1){l=c[l>>2]|0;va=l+55|0;if(((d[va>>0]|d[va+1>>0]<<8)&3)==2)break;else l=l+20|0}l=b[c[l+4>>2]>>1]|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[H+104>>2]|0;a[va+(m*20|0)>>0]=-92;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=x;c[va+(m*20|0)+8>>2]=l;c[va+(m*20|0)+12>>2]=z;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else Di(H,164,x,l,z)|0;n=u+3+l|0;l=u+2|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[H+104>>2]|0;a[va+(m*20|0)>>0]=79;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=n;c[va+(m*20|0)+8>>2]=l;c[va+(m*20|0)+12>>2]=0;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0;break}else{Di(H,79,n,l,0)|0;break}}while(0);s=(a[B+49>>0]|0)==0;do if(!s){l=c[H>>2]|0;if(!(a[l+81>>0]|0)){va=c[H+104>>2]|0;ta=va+(r*20|0)+1|0;ua=va+(r*20|0)+16|0;kg(l,a[ta>>0]|0,c[ua>>2]|0);a[ta>>0]=0;c[ua>>2]=0;a[va+(r*20|0)>>0]=-86}l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=117;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=0;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0;break}else{Di(H,117,x,0,0)|0;break}}else{l=c[qa>>2]|0;a[((l|0)==0?f:l)+20>>0]=1;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=92;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=z;c[va+(l*20|0)+8>>2]=A;c[va+(l*20|0)+12>>2]=v;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,92,z,A,v)|0;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=121;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=w;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,121,F,w,0)|0;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=122;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=v;c[va+(l*20|0)+12>>2]=w;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,122,F,v,w)|0;sl(B);l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=36;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=0;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else l=Di(H,36,F,0,0)|0;if(y<<16>>16<=-2){r=l;break}n=H+104|0;m=0;do{o=m+z|0;p=c[D>>2]|0;if((c[E>>2]|0)>(p|0)){c[D>>2]=p+1;va=c[n>>2]|0;a[va+(p*20|0)>>0]=90;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=F;c[va+(p*20|0)+8>>2]=m;c[va+(p*20|0)+12>>2]=o;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0}else Di(H,90,F,m,o)|0;m=m+1|0}while((m|0)<(A|0));r=l}while(0);q=c[qa>>2]|0;q=(q|0)==0?f:q;p=q+204|0;o=c[p>>2]|0;n=q+252|0;A:do if((o|0)>0){l=c[n>>2]|0;m=0;do{if((c[l+(m<<2)>>2]|0)==(ya|0))break A;m=m+1|0}while((m|0)<(o|0));m=n;xa=387}else{m=n;l=c[n>>2]|0;xa=387}while(0);B:do if((xa|0)==387){do if(!(mb()|0)){xa=(o<<2)+4|0;l=sb(l,xa,((xa|0)<0)<<31>>31)|0;if(!l)break;c[m>>2]=l;xa=c[p>>2]|0;c[p>>2]=xa+1;c[l+(xa<<2)>>2]=ya;break B}while(0);l=c[q>>2]|0;m=l+81|0;if(a[m>>0]|0)break;if(a[l+82>>0]|0)break;a[m>>0]=1;if((c[l+180>>2]|0)>0)c[l+264>>2]=1;ya=l+272|0;c[ya>>2]=(c[ya>>2]|0)+1;l=c[l+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;ya=c[H+104>>2]|0;a[ya+(l*20|0)>>0]=10;b[ya+(l*20|0)+2>>1]=0;c[ya+(l*20|0)+4>>2]=0;c[ya+(l*20|0)+8>>2]=A;c[ya+(l*20|0)+12>>2]=z;c[ya+(l*20|0)+16>>2]=0;a[ya+(l*20|0)+1>>0]=0}else l=Di(H,10,0,A,z)|0;do if(!(a[(c[H>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[D>>2]|0)+-1|0;m=c[H+104>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(H,m+(l*20|0)|0,C,-12);break}if(!C)break;c[m+(l*20|0)+16>>2]=C;a[n>>0]=-12;ya=C+12|0;c[ya>>2]=(c[ya>>2]|0)+1}while(0);m=c[D>>2]|0;if((m|0)>0)b[(c[H+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=(j|0)==11?2:j&65535;j=c[qa>>2]|0;a[((j|0)==0?f:j)+21>>0]=1;if(!s){sl(B);break}l=r+1|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[H+104>>2]|0;a[f+(m*20|0)>>0]=5;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=F;c[f+(m*20|0)+8>>2]=l;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(H,5,F,l,0)|0;m=c[D>>2]|0;if(!(a[(c[H>>2]|0)+81>>0]|0))l=(c[H+104>>2]|0)+(((r|0)<0?m+-1|0:r)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[H+104>>2]|0;a[f+(m*20|0)>>0]=117;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=F;c[f+(m*20|0)+8>>2]=0;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0;break}else{Di(H,117,F,0,0)|0;break}}H=f+56|0;Z=c[H>>2]|0;I=Z+-1|0;c[H>>2]=I;do if(!(0==0?(c[za+32>>2]&128|0)==0:0)){if(c[f+120>>2]|0){Y=0;break}if(!((k|0)==0&(a[ka>>0]|0)==0)){Y=0;break}r=f+44|0;q=(c[r>>2]|0)+1|0;c[r>>2]=q;r=la+108|0;t=c[r>>2]|0;if((c[la+112>>2]|0)>(t|0)){c[r>>2]=t+1;Y=c[la+104>>2]|0;a[Y+(t*20|0)>>0]=70;b[Y+(t*20|0)+2>>1]=0;c[Y+(t*20|0)+4>>2]=0;c[Y+(t*20|0)+8>>2]=q;c[Y+(t*20|0)+12>>2]=0;c[Y+(t*20|0)+16>>2]=0;a[Y+(t*20|0)+1>>0]=0;Y=q;break}else{Di(la,70,0,q,0)|0;Y=q;break}}else Y=0;while(0);C:do if(!(c[ha>>2]&32)){q=la+108|0;r=c[q>>2]|0;if((c[la+112>>2]|0)>(r|0)){c[q>>2]=r+1;E=c[la+104>>2]|0;a[E+(r*20|0)>>0]=73;b[E+(r*20|0)+2>>1]=0;c[E+(r*20|0)+4>>2]=0;c[E+(r*20|0)+8>>2]=F;c[E+(r*20|0)+12>>2]=aa;c[E+(r*20|0)+16>>2]=0;a[E+(r*20|0)+1>>0]=0;E=0;C=0;D=0;x=0;X=0;break}else{Di(la,73,0,F,aa)|0;E=0;C=0;D=0;x=0;X=0;break}}else{y=b[n+50>>1]|0;fa=f+44|0;r=c[fa>>2]|0;z=r+1|0;w=y<<16>>16;r=r+w|0;x=r+1|0;c[fa>>2]=x;if(k|0){E=x;C=y;D=z;x=0;X=0;break}A=c[_>>2]|0;c[_>>2]=A+1;t=la+108|0;q=c[t>>2]|0;u=la+112|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;fa=c[la+104>>2]|0;a[fa+(q*20|0)>>0]=73;b[fa+(q*20|0)+2>>1]=0;c[fa+(q*20|0)+4>>2]=0;c[fa+(q*20|0)+8>>2]=z;c[fa+(q*20|0)+12>>2]=r;c[fa+(q*20|0)+16>>2]=0;a[fa+(q*20|0)+1>>0]=0}else Di(la,73,0,z,r)|0;q=c[t>>2]|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;fa=c[la+104>>2]|0;a[fa+(q*20|0)>>0]=113;b[fa+(q*20|0)+2>>1]=0;c[fa+(q*20|0)+4>>2]=A;c[fa+(q*20|0)+8>>2]=w;c[fa+(q*20|0)+12>>2]=0;c[fa+(q*20|0)+16>>2]=0;a[fa+(q*20|0)+1>>0]=0}else q=Di(la,113,A,w,0)|0;r=c[ma>>2]|0;u=Ij(f,n)|0;if(!u){E=x;C=y;D=z;x=q;X=A;break}t=c[r>>2]|0;if(!(a[t+81>>0]|0)){C=c[r+104>>2]|0;E=(c[r+108>>2]|0)+-1|0;a[C+(E*20|0)+1>>0]=-9;c[C+(E*20|0)+16>>2]=u;E=x;C=y;D=z;x=q;X=A;break}if(c[t+480>>2]|0){E=x;C=y;D=z;x=q;X=A;break}fa=(c[u>>2]|0)+-1|0;c[u>>2]=fa;if(fa|0){E=x;C=y;D=z;x=q;X=A;break}r=c[u+12>>2]|0;do if(r|0){if(c[r+480>>2]|0){Xd(r,u);E=x;C=y;D=z;x=q;X=A;break C}t=u;if((c[r+304>>2]|0)>>>0>t>>>0)break;if((c[r+308>>2]|0)>>>0<=t>>>0)break;E=r+300|0;c[u>>2]=c[E>>2];c[E>>2]=u;E=x;C=y;D=z;x=q;X=A;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);E=x;C=y;D=z;x=q;X=A;break}else{E=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);E=x;C=y;D=z;x=q;X=A;break}}while(0);do if($){Tj(f,i,I,16);W=0;V=1;u=0;w=0}else{q=ql(f,g,i,0,0,(c[va>>2]|0)!=0|(ja<<24>>24!=0|(T|(J|(a[ka>>0]|0)!=0)))?4100:4108,s)|0;if(!q)break x;w=q+24|0;u=c[w>>2]|0;w=c[w+4>>2]|0;r=a[q+49>>0]|0;t=r&255;if(r<<24>>24==1){W=q;V=1;break}fa=c[qa>>2]|0;a[((fa|0)==0?f:fa)+20>>0]=1;if(r<<24>>24!=2){W=q;V=t;break}if((w|0)<0|(o|0)==(w|0)){W=q;V=2;break}W=q;V=(a[ca+(w-ga)>>0]|0)==0?t:0}while(0);do if(!(c[ha>>2]&32)){r=la+108|0;q=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=-128;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=o;c[ha+(q*20|0)+8>>2]=aa;c[ha+(q*20|0)+12>>2]=0;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else Di(la,128,o,aa,0)|0;if(V|0){M=0;break}q=c[r>>2]|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;M=c[la+104>>2]|0;a[M+(q*20|0)>>0]=-108;b[M+(q*20|0)+2>>1]=0;c[M+(q*20|0)+4>>2]=F;c[M+(q*20|0)+8>>2]=aa;c[M+(q*20|0)+12>>2]=0;c[M+(q*20|0)+16>>2]=0;a[M+(q*20|0)+1>>0]=0;M=0;break}else{Di(la,148,F,aa,0)|0;M=0;break}}else{B=C<<16>>16;if(C<<16>>16>0){r=n+4|0;q=0;do{Vj(la,ya,o,b[(c[r>>2]|0)+(q<<1)>>1]|0,q+D|0);q=q+1|0}while((q|0)!=(B|0))}if(V|0){if(!x){M=B;E=D;break}q=c[la>>2]|0;if(a[q+81>>0]|0){M=B;E=D;break}M=c[la+104>>2]|0;ha=M+(x*20|0)+1|0;E=M+(x*20|0)+16|0;kg(q,a[ha>>0]|0,c[E>>2]|0);a[ha>>0]=0;c[E>>2]=0;a[M+(x*20|0)>>0]=-86;M=B;E=D;break}y=gl(za,n)|0;z=la+108|0;q=c[z>>2]|0;A=la+112|0;if((c[A>>2]|0)>(q|0)){c[z>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=92;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=D;c[ha+(q*20|0)+8>>2]=B;c[ha+(q*20|0)+12>>2]=E;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else q=Di(la,92,D,B,E)|0;r=c[la>>2]|0;D:do if(!(a[r+81>>0]|0)){if((q|0)<0)q=(c[z>>2]|0)+-1|0;r=c[la+104>>2]|0;t=r+(q*20|0)|0;do if(C<<16>>16<=-1){x=r+(q*20|0)+1|0;if(a[x>>0]|0)break;if(C<<16>>16==-3){c[r+(q*20|0)+16>>2]=y;a[x>>0]=-3;break D}if(!y)break D;c[r+(q*20|0)+16>>2]=y;a[x>>0]=C;if(C<<16>>16!=-12)break D;ha=y+12|0;c[ha>>2]=(c[ha>>2]|0)+1;break D}while(0);Ei(la,t,y,B)}else{if(C<<16>>16==-12)break;kg(r,B,y)}while(0);q=c[z>>2]|0;if((c[A>>2]|0)>(q|0)){c[z>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=-124;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=X;c[ha+(q*20|0)+8>>2]=E;c[ha+(q*20|0)+12>>2]=D;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else q=Di(la,132,X,E,D)|0;if(a[(c[la>>2]|0)+81>>0]|0){M=0;break}M=c[la+104>>2]|0;a[M+(q*20|0)+1>>0]=-3;c[M+(q*20|0)+16>>2]=B;M=0}while(0);U=(k|0)==0;E:do if(U){q=(V|0)==2;if(!q)sl(W);F:do if(sa)xa=511;else{do if(V|0){if((u|0)>-1)a[ca+(u-ga)>>0]=0;if((w|0)>-1)a[ca+(w-ga)>>0]=0;if(!q)break;if(p>>>0<=(w>>>31^1)>>>0)break;r=la+108|0;p=c[r>>2]|0;q=la+112|0;if((c[q>>2]|0)>(p|0)){c[r>>2]=p+1;D=c[la+104>>2]|0;a[D+(p*20|0)>>0]=17;D=D+(p*20|0)+1|0;F=D+19|0;do{a[D>>0]=0;D=D+1|0}while((D|0)<(F|0))}else p=Di(la,17,0,0,0)|0;Hm(f,ya,109,0,ga,ca,0,0)|0;if(p|0){t=c[r>>2]|0;if(!(a[(c[la>>2]|0)+81>>0]|0))p=(c[la+104>>2]|0)+(((p|0)<0?t+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=t}if((w|0)==(o|0)|(u|0)==(o|0)){xa=521;break F}else{xa=515;break F}}while(0);Hm(f,ya,109,0,ga,ca,0,0)|0;xa=511}while(0);do if((xa|0)==511){if(V|0){if((w|0)==(o|0)|(sa|(u|0)==(o|0))){xa=520;break}r=la+108|0;q=la+112|0;xa=515;break}if(!n){r=la+108|0;q=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;k=c[la+104>>2]|0;a[k+(q*20|0)>>0]=41;b[k+(q*20|0)+2>>1]=0;c[k+(q*20|0)+4>>2]=F;c[k+(q*20|0)+8>>2]=I;c[k+(q*20|0)+12>>2]=aa;c[k+(q*20|0)+16>>2]=0;a[k+(q*20|0)+1>>0]=0}else q=Di(la,41,F,I,aa)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;R=c[la+104>>2]|0;a[R+(p*20|0)>>0]=31;b[R+(p*20|0)+2>>1]=0;c[R+(p*20|0)+4>>2]=o;c[R+(p*20|0)+8>>2]=q;c[R+(p*20|0)+12>>2]=aa;c[R+(p*20|0)+16>>2]=0;a[R+(p*20|0)+1>>0]=0;R=0;P=q;break E}else{Di(la,31,o,q,aa)|0;R=0;P=q;break E}}u=(c[H>>2]|0)+-1|0;c[H>>2]=u;r=la+108|0;p=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;k=c[la+104>>2]|0;a[k+(p*20|0)>>0]=36;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=X;c[k+(p*20|0)+8>>2]=I;c[k+(p*20|0)+12>>2]=0;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else Di(la,36,X,I,0)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;q=c[la+104>>2]|0;a[q+(p*20|0)>>0]=127;b[q+(p*20|0)+2>>1]=0;c[q+(p*20|0)+4>>2]=X;c[q+(p*20|0)+8>>2]=E;c[q+(p*20|0)+12>>2]=0;c[q+(p*20|0)+16>>2]=0;a[q+(p*20|0)+1>>0]=0;q=p}else q=Di(la,127,X,E,0)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;k=c[la+104>>2]|0;a[k+(p*20|0)>>0]=28;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=o;c[k+(p*20|0)+8>>2]=u;c[k+(p*20|0)+12>>2]=E;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else p=Di(la,28,o,u,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){R=q;P=u;break E}R=c[la+104>>2]|0;a[R+(p*20|0)+1>>0]=-3;c[R+(p*20|0)+16>>2]=0;R=q;P=u;break E}while(0);do if((xa|0)==515){p=c[r>>2]|0;if((c[q>>2]|0)>(p|0)){c[r>>2]=p+1;xa=c[la+104>>2]|0;a[xa+(p*20|0)>>0]=28;b[xa+(p*20|0)+2>>1]=0;c[xa+(p*20|0)+4>>2]=o;c[xa+(p*20|0)+8>>2]=I;c[xa+(p*20|0)+12>>2]=E;c[xa+(p*20|0)+16>>2]=0;a[xa+(p*20|0)+1>>0]=0}else p=Di(la,28,o,I,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){xa=520;break}xa=c[la+104>>2]|0;a[xa+(p*20|0)+1>>0]=-3;c[xa+(p*20|0)+16>>2]=M;xa=520}while(0);if((xa|0)==520)if((V|0)==1)t=I;else xa=521;if((xa|0)==521){t=(c[H>>2]|0)+-1|0;c[H>>2]=t}p=(n|0)==0?aa:E;q=la+108|0;r=c[q>>2]|0;if((c[la+112>>2]|0)>(r|0)){c[q>>2]=r+1;R=c[la+104>>2]|0;a[R+(r*20|0)>>0]=50;b[R+(r*20|0)+2>>1]=0;c[R+(r*20|0)+4>>2]=p;c[R+(r*20|0)+8>>2]=I;c[R+(r*20|0)+12>>2]=0;c[R+(r*20|0)+16>>2]=0;a[R+(r*20|0)+1>>0]=0;R=0;P=t;break}else{Di(la,50,p,I,0)|0;R=0;P=t;break}}else{R=0;P=I}while(0);I=N<<24>>24==0;do if(!I){do if(S){if((a[S>>0]|0)!=-88){t=Jj(f,S,Q)|0;xa=551;break}t=c[ma>>2]|0;p=c[S+28>>2]|0;q=t+108|0;r=c[q>>2]|0;if((c[t+112>>2]|0)>(r|0)){c[q>>2]=r+1;k=c[t+104>>2]|0;a[k+(r*20|0)>>0]=78;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=p;c[k+(r*20|0)+8>>2]=Q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(t,78,p,Q,0)|0;break}}else{t=Jj(f,0,Q)|0;xa=551}while(0);do if((xa|0)==551){if((t|0)==(Q|0))break;p=c[ma>>2]|0;if(!p)break;q=p+108|0;r=c[q>>2]|0;if((c[p+112>>2]|0)>(r|0)){c[q>>2]=r+1;k=c[p+104>>2]|0;a[k+(r*20|0)>>0]=79;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=t;c[k+(r*20|0)+8>>2]=Q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(p,79,t,Q,0)|0;break}}while(0);p=la+108|0;q=c[p>>2]|0;if((c[la+112>>2]|0)>(q|0)){c[p>>2]=q+1;k=c[la+104>>2]|0;a[k+(q*20|0)>>0]=15;b[k+(q*20|0)+2>>1]=0;c[k+(q*20|0)+4>>2]=Q;c[k+(q*20|0)+8>>2]=0;c[k+(q*20|0)+12>>2]=0;c[k+(q*20|0)+16>>2]=0;a[k+(q*20|0)+1>>0]=0;break}else{Di(la,15,Q,0,0)|0;break}}while(0);G:do if(J|(O<<24>>24!=0|T)){if(T)D=Km(f,ya)|0;else D=0;H=(h|0)==0;J=H?121:122;F=(l|0)==0;H:do if(F)p=0;else{if(H){p=0;r=l;while(1){do if((J|0)==(d[r+8>>0]|0)){if(!(a[r+9>>0]&3))break;q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;I:do if(!q)xa=574;else while(1){if((c[q>>2]|0)==(r|0)?(c[q+12>>2]|0)==(j|0):0)break I;q=c[q+4>>2]|0;if(!q){xa=574;break}}while(0);if((xa|0)==574){xa=0;q=Nm(f,r,ya,j)|0;if(!q)break}p=c[q+16>>2]|p}while(0);r=c[r+32>>2]|0;if(!r)break H}}p=0;C=l;do{J:do if((J|0)==(d[C+8>>0]|0)){if(!(a[C+9>>0]&3))break;q=c[C+16>>2]|0;K:do if(q|0){B=c[h>>2]|0;if((B|0)<=0)break J;A=c[q+4>>2]|0;if((A|0)<=0)break J;x=c[q>>2]|0;u=0;while(1){y=c[h+4+(u*20|0)+4>>2]|0;z=d[208+(d[y>>0]|0)>>0]|0;w=0;do{r=c[x+(w<<3)>>2]|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-z|0;if(!(k<<24>>24==0|(q|0)!=0)){t=y;do{r=r+1|0;t=t+1|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(q|0)!=0))}if(!q)break K;w=w+1|0}while((w|0)<(A|0));u=u+1|0;if((u|0)>=(B|0))break J}}while(0);q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;L:do if(!q)xa=595;else while(1){if((c[q>>2]|0)==(C|0)?(c[q+12>>2]|0)==(j|0):0)break L;q=c[q+4>>2]|0;if(!q){xa=595;break}}while(0);if((xa|0)==595){xa=0;q=Nm(f,C,ya,j)|0;if(!q)break}p=c[q+16>>2]|p}while(0);C=c[C+32>>2]|0}while((C|0)!=0)}while(0);q=p|D;M:do if((b[ta>>1]|0)>0){r=ya+4|0;t=la+108|0;u=la+112|0;w=la+104|0;if((q|0)==-1){p=0;while(1){Vj(la,ya,o,p,p+K|0);p=p+1|0;if((p|0)>=(b[ta>>1]|0))break M}}p=0;do{if(p>>>0<32?(1<<p&q|0)!=0:0)xa=606;else xa=605;do if((xa|0)==605){xa=0;if(a[(c[r>>2]|0)+(p<<4)+15>>0]&1){xa=606;break}x=p+K|0;y=c[t>>2]|0;if((c[u>>2]|0)>(y|0)){c[t>>2]=y+1;k=c[w>>2]|0;a[k+(y*20|0)>>0]=73;b[k+(y*20|0)+2>>1]=0;c[k+(y*20|0)+4>>2]=0;c[k+(y*20|0)+8>>2]=x;c[k+(y*20|0)+12>>2]=0;c[k+(y*20|0)+16>>2]=0;a[k+(y*20|0)+1>>0]=0;break}else{Di(la,73,0,x,0)|0;break}}while(0);if((xa|0)==606){xa=0;Vj(la,ya,o,p,p+K|0)}p=p+1|0}while((p|0)<(b[ta>>1]|0))}while(0);do if((n|0)==0&I){n=la+108|0;p=c[n>>2]|0;if((c[la+112>>2]|0)>(p|0)){c[n>>2]=p+1;n=c[la+104>>2]|0;a[n+(p*20|0)>>0]=78;b[n+(p*20|0)+2>>1]=0;c[n+(p*20|0)+4>>2]=aa;c[n+(p*20|0)+8>>2]=Q;c[n+(p*20|0)+12>>2]=0;c[n+(p*20|0)+16>>2]=0;a[n+(p*20|0)+1>>0]=0;n=0;break}else{Di(la,78,aa,Q,0)|0;n=0;break}}while(0);if(F){p=0;I=1;break}if(H){p=0;r=l;while(1){do if((J|0)==(d[r+8>>0]|0)){if(!(a[r+9>>0]&1))break;q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;N:do if(!q)xa=626;else while(1){if((c[q>>2]|0)==(r|0)?(c[q+12>>2]|0)==(j|0):0)break N;q=c[q+4>>2]|0;if(!q){xa=626;break}}while(0);if((xa|0)==626){xa=0;q=Nm(f,r,ya,j)|0;if(!q)break}p=c[q+20>>2]|p}while(0);r=c[r+32>>2]|0;if(!r){H=1;I=0;break G}}}p=0;C=l;while(1){O:do if((J|0)==(d[C+8>>0]|0)){if(!(a[C+9>>0]&1))break;q=c[C+16>>2]|0;P:do if(q|0){B=c[h>>2]|0;if((B|0)<=0)break O;A=c[q+4>>2]|0;if((A|0)<=0)break O;x=c[q>>2]|0;u=0;while(1){y=c[h+4+(u*20|0)+4>>2]|0;z=d[208+(d[y>>0]|0)>>0]|0;w=0;do{r=c[x+(w<<3)>>2]|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-z|0;if(!(k<<24>>24==0|(q|0)!=0)){t=y;do{r=r+1|0;t=t+1|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(q|0)!=0))}if(!q)break P;w=w+1|0}while((w|0)<(A|0));u=u+1|0;if((u|0)>=(B|0))break O}}while(0);q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;Q:do if(!q)xa=647;else while(1){if((c[q>>2]|0)==(C|0)?(c[q+12>>2]|0)==(j|0):0)break Q;q=c[q+4>>2]|0;if(!q){xa=647;break}}while(0);if((xa|0)==647){xa=0;q=Nm(f,C,ya,j)|0;if(!q)break}p=c[q+20>>2]|p}while(0);C=c[C+32>>2]|0;if(!C){H=0;I=0;break}}}else{p=0;H=(h|0)==0;I=1}while(0);if((b[ta>>1]|0)>0){z=ya+40|0;A=la+108|0;B=la+112|0;C=la+104|0;m=m&1;y=(m|0)==0;x=0;do{R:do if((x|0)==(b[z>>1]|0)){q=x+v|0;r=c[A>>2]|0;if((c[B>>2]|0)>(r|0)){c[A>>2]=r+1;k=c[C>>2]|0;a[k+(r*20|0)>>0]=73;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=0;c[k+(r*20|0)+8>>2]=q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(la,73,0,q,0)|0;break}}else{q=c[wa+(x<<2)>>2]|0;if((q|0)<=-1){do if(!(y|x>>>0>31)){if(1<<x&p|0)break;q=x+v|0;r=c[A>>2]|0;if((c[B>>2]|0)>(r|0)){c[A>>2]=r+1;k=c[C>>2]|0;a[k+(r*20|0)>>0]=73;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=0;c[k+(r*20|0)+8>>2]=q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break R}else{Di(la,73,0,q,0)|0;break R}}while(0);Vj(la,ya,o,x,x+v|0);break}q=c[h+4+(q*20|0)>>2]|0;w=x+v|0;do if(q){if((a[q>>0]|0)!=-88){u=Jj(f,q,w)|0;break}u=c[ma>>2]|0;q=c[q+28>>2]|0;r=u+108|0;t=c[r>>2]|0;if((c[u+112>>2]|0)>(t|0)){c[r>>2]=t+1;k=c[u+104>>2]|0;a[k+(t*20|0)>>0]=78;b[k+(t*20|0)+2>>1]=0;c[k+(t*20|0)+4>>2]=q;c[k+(t*20|0)+8>>2]=w;c[k+(t*20|0)+12>>2]=0;c[k+(t*20|0)+16>>2]=0;a[k+(t*20|0)+1>>0]=0;break R}else{Di(u,78,q,w,0)|0;break R}}else u=Jj(f,0,w)|0;while(0);if((u|0)==(w|0))break;q=c[ma>>2]|0;if(!q)break;r=q+108|0;t=c[r>>2]|0;if((c[q+112>>2]|0)>(t|0)){c[r>>2]=t+1;k=c[q+104>>2]|0;a[k+(t*20|0)>>0]=79;b[k+(t*20|0)+2>>1]=0;c[k+(t*20|0)+4>>2]=u;c[k+(t*20|0)+8>>2]=w;c[k+(t*20|0)+12>>2]=0;c[k+(t*20|0)+16>>2]=0;a[k+(t*20|0)+1>>0]=0;break}else{Di(q,79,u,w,0)|0;break}}while(0);x=x+1|0}while((x|0)<(b[ta>>1]|0))}else m=m&1;do if(m|0){zk(la,ya,v);if(!I){B=f+23|0;C=f+44|0;A=l;do{S:do if((a[A+8>>0]|0)==122){if((a[A+9>>0]|0)!=1)break;m=c[A+16>>2]|0;T:do if(!(H|(m|0)==0)){z=c[h>>2]|0;if((z|0)<=0)break S;y=c[m+4>>2]|0;if((y|0)<=0)break S;u=c[m>>2]|0;r=0;while(1){w=c[h+4+(r*20|0)+4>>2]|0;x=d[208+(d[w>>0]|0)>>0]|0;t=0;do{p=c[u+(t<<3)>>2]|0;k=a[p>>0]|0;m=(d[208+(k&255)>>0]|0)-x|0;if(!(k<<24>>24==0|(m|0)!=0)){q=w;do{p=p+1|0;q=q+1|0;k=a[p>>0]|0;m=(d[208+(k&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(m|0)!=0))}if(!m)break T;t=t+1|0}while((t|0)<(y|0));r=r+1|0;if((r|0)>=(z|0))break S}}while(0);m=c[ma>>2]|0;U:do if(!m){q=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[q+76>>1]&8)break;a[B>>0]=1}while(0);V:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))xa=707;else{m=0;break U}else{do if((e[q+276>>1]|0)>=224){p=q+300|0;m=c[p>>2]|0;if(m|0){c[p>>2]=c[m>>2];k=q+284|0;c[k>>2]=(c[k>>2]|0)+1;break V}p=q+296|0;m=c[p>>2]|0;if(!m){m=q+292|0;break}else{c[p>>2]=c[m>>2];k=q+284|0;c[k>>2]=(c[k>>2]|0)+1;break V}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;xa=707}while(0);if((xa|0)==707){xa=0;m=_d(q,224,0)|0}if(!m){m=0;break}D=m+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[m>>2]=q;p=q+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=m;c[m+8>>2]=q;c[m+4>>2]=0;c[p>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ma>>2]=m;Di(m,61,0,1,0)|0}while(0);p=c[qa>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;W:do if(!p)xa=717;else while(1){if((c[p>>2]|0)==(A|0)?(c[p+12>>2]|0)==(j|0):0)break W;p=c[p+4>>2]|0;if(!p){xa=717;break}}while(0);if((xa|0)==717){xa=0;p=Nm(f,A,ya,j)|0;if(!p)break}if(!(c[A>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}q=(c[C>>2]|0)+1|0;c[C>>2]=q;t=c[p+8>>2]|0;u=m+108|0;p=c[u>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[u>>2]=p+1;k=c[m+104>>2]|0;a[k+(p*20|0)>>0]=45;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=aa;c[k+(p*20|0)+8>>2]=P;c[k+(p*20|0)+12>>2]=q;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else p=Di(m,45,aa,P,q)|0;do if(!(a[(c[m>>2]|0)+81>>0]|0)){if((p|0)<0)p=(c[u>>2]|0)+-1|0;q=c[m+104>>2]|0;r=q+(p*20|0)+1|0;if(a[r>>0]|0){Ei(m,q+(p*20|0)|0,t,-4);break}if(!t)break;c[q+(p*20|0)+16>>2]=t;a[r>>0]=-4}while(0);p=c[u>>2]|0;if((p|0)<=0)break;b[(c[m+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=w}while(0);A=c[A+32>>2]|0}while((A|0)!=0)}p=la+108|0;m=c[p>>2]|0;q=(c[la+112>>2]|0)>(m|0);do if(!n)if(q){c[p>>2]=m+1;k=c[la+104>>2]|0;a[k+(m*20|0)>>0]=31;b[k+(m*20|0)+2>>1]=0;c[k+(m*20|0)+4>>2]=o;c[k+(m*20|0)+8>>2]=P;c[k+(m*20|0)+12>>2]=aa;c[k+(m*20|0)+16>>2]=0;a[k+(m*20|0)+1>>0]=0;break}else{Di(la,31,o,P,aa)|0;break}else{if(q){c[p>>2]=m+1;k=c[la+104>>2]|0;a[k+(m*20|0)>>0]=28;b[k+(m*20|0)+2>>1]=0;c[k+(m*20|0)+4>>2]=o;c[k+(m*20|0)+8>>2]=P;c[k+(m*20|0)+12>>2]=E;c[k+(m*20|0)+16>>2]=0;a[k+(m*20|0)+1>>0]=0}else m=Di(la,28,o,P,E)|0;if(a[(c[la>>2]|0)+81>>0]|0)break;k=c[la+104>>2]|0;a[k+(m*20|0)+1>>0]=-3;c[k+(m*20|0)+16>>2]=M}while(0);m=b[ta>>1]|0;if(m<<16>>16<=0)break;q=ya+40|0;p=0;do{do if((c[wa+(p<<2)>>2]|0)<0){if((p|0)==(b[q>>1]|0))break;Vj(la,ya,o,p,p+v|0);m=b[ta>>1]|0}while(0);p=p+1|0}while((p|0)<(m<<16>>16|0))}while(0);do if(!sa){Tm(f,ya,ra,o,s,Q,aa,ja,j&255,P,va,wa,0);if(T)Lm(f,ya,aa,0,wa,pa);r=(pa|0)==0;t=(c[va>>2]|pa|0)==0;do if(t)q=0;else{p=la+108|0;m=c[p>>2]|0;q=(c[la+112>>2]|0)>(m|0);if(!n)if(q){c[p>>2]=m+1;q=c[la+104>>2]|0;a[q+(m*20|0)>>0]=31;b[q+(m*20|0)+2>>1]=0;c[q+(m*20|0)+4>>2]=o;c[q+(m*20|0)+8>>2]=0;c[q+(m*20|0)+12>>2]=aa;c[q+(m*20|0)+16>>2]=0;a[q+(m*20|0)+1>>0]=0;q=m;break}else{q=Di(la,31,o,0,aa)|0;break}if(q){c[p>>2]=m+1;va=c[la+104>>2]|0;a[va+(m*20|0)>>0]=28;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=o;c[va+(m*20|0)+8>>2]=0;c[va+(m*20|0)+12>>2]=E;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else m=Di(la,28,o,0,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){q=m;break}q=c[la+104>>2]|0;a[q+(m*20|0)+1>>0]=-3;c[q+(m*20|0)+16>>2]=M;q=m}while(0);Mm(f,ya,o,s,ra,-1);do if(!(r&(ia|0)<2)){m=la+108|0;p=c[m>>2]|0;if((c[la+112>>2]|0)>(p|0)){c[m>>2]=p+1;va=c[la+104>>2]|0;a[va+(p*20|0)>>0]=123;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=o;c[va+(p*20|0)+8>>2]=0;c[va+(p*20|0)+12>>2]=0;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0;break}else{Di(la,123,o,0,0)|0;break}}while(0);if(!t){p=c[la+108>>2]|0;if(!(a[(c[la>>2]|0)+81>>0]|0))m=(c[la+104>>2]|0)+(((q|0)<0?p+-1|0:q)*20|0)|0;else m=59308;c[m+8>>2]=p}if(!T){Um(f,ya,o,s,Q,ra,(V|0)==2?6:4,0,0);break}Lm(f,ya,0,Q,wa,pa);Um(f,ya,o,s,Q,ra,(V|0)==2?6:4,0,0);if(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)break;t=c[ya>>2]|0;q=c[ua>>2]|0;r=c[q+68>>2]|0;if(!r){o=q+60|0;m=q+64|0}else{o=a[t>>0]|0;if(!(o<<24>>24))m=0;else{m=0;p=t;do{p=p+1|0;m=G(m+(d[208+(o&255)>>0]|0)|0,-1640531535)|0;o=a[p>>0]|0}while(o<<24>>24!=0)}m=(m>>>0)%((c[q+56>>2]|0)>>>0)|0;o=r+(m<<3)|0;m=r+(m<<3)+4|0}o=c[o>>2]|0;X:do if(!o)m=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){m=c[m>>2]|0;o=o+-1|0;q=c[m+12>>2]|0;va=a[q>>0]|0;p=(d[208+(va&255)>>0]|0)-s|0;if(!(va<<24>>24==0|(p|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;va=a[q>>0]|0;p=(d[208+(va&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(va<<24>>24==0|(p|0)!=0))}if(!p)break X;if(!o){m=59292;break}}}while(0);m=c[m+8>>2]|0;if(!m)break;v=f+23|0;w=f+44|0;do{do if(Jm(ya,m,wa,pa)|0){r=Rm(f,ya,m,h)|0;if(!r)break;o=c[ma>>2]|0;Y:do if(!o){q=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[q+76>>1]&8)break;a[v>>0]=1}while(0);Z:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))xa=802;else{o=0;break Y}else{do if((e[q+276>>1]|0)>=224){p=q+300|0;o=c[p>>2]|0;if(o|0){c[p>>2]=c[o>>2];va=q+284|0;c[va>>2]=(c[va>>2]|0)+1;break Z}p=q+296|0;o=c[p>>2]|0;if(!o){o=q+292|0;break}else{c[p>>2]=c[o>>2];va=q+284|0;c[va>>2]=(c[va>>2]|0)+1;break Z}}else o=q+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;xa=802}while(0);if((xa|0)==802){xa=0;o=_d(q,224,0)|0}if(!o){o=0;break}D=o+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[o>>2]=q;p=q+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=o;c[o+8>>2]=q;c[o+4>>2]=0;c[p>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[ma>>2]=o;Di(o,61,0,1,0)|0}while(0);p=c[qa>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;_:do if(!p)xa=812;else while(1){if((c[p>>2]|0)==(r|0)?(c[p+12>>2]|0)==2:0)break _;p=c[p+4>>2]|0;if(!p){xa=812;break}}while(0);if((xa|0)==812){xa=0;p=Nm(f,r,ya,2)|0;if(!p)break}if(!(c[r>>2]|0))u=0;else{u=(c[f>>2]|0)+32|0;u=bw(c[u>>2]|0,c[u+4>>2]|0,13)|0;L()|0;u=u&1^1}q=(c[w>>2]|0)+1|0;c[w>>2]=q;s=c[p+8>>2]|0;t=o+108|0;p=c[t>>2]|0;if((c[o+112>>2]|0)>(p|0)){c[t>>2]=p+1;va=c[o+104>>2]|0;a[va+(p*20|0)>>0]=45;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=aa;c[va+(p*20|0)+8>>2]=0;c[va+(p*20|0)+12>>2]=q;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0}else p=Di(o,45,aa,0,q)|0;do if(!(a[(c[o>>2]|0)+81>>0]|0)){if((p|0)<0)p=(c[t>>2]|0)+-1|0;q=c[o+104>>2]|0;r=q+(p*20|0)+1|0;if(a[r>>0]|0){Ei(o,q+(p*20|0)|0,s,-4);break}if(!s)break;c[q+(p*20|0)+16>>2]=s;a[r>>0]=-4}while(0);p=c[t>>2]|0;if((p|0)<=0)break;b[(c[o+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=u}while(0);m=c[m+12>>2]|0}while((m|0)!=0)}while(0);z=(Y|0)!=0;do if(z){m=la+108|0;o=c[m>>2]|0;if((c[la+112>>2]|0)>(o|0)){c[m>>2]=o+1;va=c[la+104>>2]|0;a[va+(o*20|0)>>0]=83;b[va+(o*20|0)+2>>1]=0;c[va+(o*20|0)+4>>2]=Y;c[va+(o*20|0)+8>>2]=1;c[va+(o*20|0)+12>>2]=0;c[va+(o*20|0)+16>>2]=0;a[va+(o*20|0)+1>>0]=0;break}else{Di(la,83,Y,1,0)|0;break}}while(0);if(!I){x=f+23|0;y=f+44|0;do{$:do if((a[l+8>>0]|0)==122){if((a[l+9>>0]|0)!=2)break;m=c[l+16>>2]|0;aa:do if(!(H|(m|0)==0)){w=c[h>>2]|0;if((w|0)<=0)break $;v=c[m+4>>2]|0;if((v|0)<=0)break $;s=c[m>>2]|0;q=0;while(1){t=c[h+4+(q*20|0)+4>>2]|0;u=d[208+(d[t>>0]|0)>>0]|0;r=0;do{o=c[s+(r<<3)>>2]|0;va=a[o>>0]|0;m=(d[208+(va&255)>>0]|0)-u|0;if(!(va<<24>>24==0|(m|0)!=0)){p=t;do{o=o+1|0;p=p+1|0;va=a[o>>0]|0;m=(d[208+(va&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(va<<24>>24==0|(m|0)!=0))}if(!m)break aa;r=r+1|0}while((r|0)<(v|0));q=q+1|0;if((q|0)>=(w|0))break $}}while(0);m=c[ma>>2]|0;ba:do if(!m){p=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[p+76>>1]&8)break;a[x>>0]=1}while(0);ca:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))xa=862;else{m=0;break ba}else{do if((e[p+276>>1]|0)>=224){o=p+300|0;m=c[o>>2]|0;if(m|0){c[o>>2]=c[m>>2];va=p+284|0;c[va>>2]=(c[va>>2]|0)+1;break ca}o=p+296|0;m=c[o>>2]|0;if(!m){m=p+292|0;break}else{c[o>>2]=c[m>>2];va=p+284|0;c[va>>2]=(c[va>>2]|0)+1;break ca}}else m=p+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;xa=862}while(0);if((xa|0)==862){xa=0;m=_d(p,224,0)|0}if(!m){m=0;break}D=m+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[m>>2]=p;o=p+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=m;c[m+8>>2]=p;c[m+4>>2]=0;c[o>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ma>>2]=m;Di(m,61,0,1,0)|0}while(0);o=c[qa>>2]|0;o=c[((o|0)==0?f:o)+260>>2]|0;da:do if(!o)xa=872;else while(1){if((c[o>>2]|0)==(l|0)?(c[o+12>>2]|0)==(j|0):0)break da;o=c[o+4>>2]|0;if(!o){xa=872;break}}while(0);if((xa|0)==872){xa=0;o=Nm(f,l,ya,j)|0;if(!o)break}if(!(c[l>>2]|0))t=0;else{t=(c[f>>2]|0)+32|0;t=bw(c[t>>2]|0,c[t+4>>2]|0,13)|0;L()|0;t=t&1^1}p=(c[y>>2]|0)+1|0;c[y>>2]=p;r=c[o+8>>2]|0;s=m+108|0;o=c[s>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[s>>2]=o+1;va=c[m+104>>2]|0;a[va+(o*20|0)>>0]=45;b[va+(o*20|0)+2>>1]=0;c[va+(o*20|0)+4>>2]=aa;c[va+(o*20|0)+8>>2]=P;c[va+(o*20|0)+12>>2]=p;c[va+(o*20|0)+16>>2]=0;a[va+(o*20|0)+1>>0]=0}else o=Di(m,45,aa,P,p)|0;do if(!(a[(c[m>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[s>>2]|0)+-1|0;p=c[m+104>>2]|0;q=p+(o*20|0)+1|0;if(a[q>>0]|0){Ei(m,p+(o*20|0)|0,r,-4);break}if(!r)break;c[p+(o*20|0)+16>>2]=r;a[q>>0]=-4}while(0);o=c[s>>2]|0;if((o|0)<=0)break;b[(c[m+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=t}while(0);l=c[l+32>>2]|0}while((l|0)!=0)}ea:do switch(V|0){case 1:break;case 2:{m=c[la+12>>2]|0;l=~P;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,la,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[la+108>>2];sl(W);break}default:{if(!n){l=la+108|0;m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[la+104>>2]|0;a[j+(m*20|0)>>0]=11;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=0;c[j+(m*20|0)+8>>2]=P;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break ea}else{Di(la,11,0,P,0)|0;break ea}}m=c[la+12>>2]|0;l=~P;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0){mk(m,la,l);l=la+108|0}else{j=la+108|0;c[(c[m+64>>2]|0)+(l<<2)>>2]=c[j>>2];l=j}m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[la+104>>2]|0;a[j+(m*20|0)>>0]=5;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=X;c[j+(m*20|0)+8>>2]=R;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break ea}else{Di(la,5,X,R,0)|0;break ea}}}while(0);m=c[la+12>>2]|0;l=0-Z|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,la,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[la+108>>2];do if(!(a[ka>>0]|0)){if(!(U&(c[f+120>>2]|0)==0))break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!z)break;l=la+108|0;m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;f=c[la+104>>2]|0;a[f+(m*20|0)>>0]=81;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=Y;c[f+(m*20|0)+8>>2]=1;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(la,81,Y,1,0)|0;Wi(la,1);if(a[(c[la>>2]|0)+81>>0]|0)break;yc(c[la+116>>2]|0,44795,-1,1,0)|0}while(0);if(!oa){xa=918;break}c[oa+240>>2]=na;xa=918}while(0);if((xa|0)==918?za|0:0)xa=919;do if((xa|0)==919){if(c[za+480>>2]|0){Xd(za,wa);break a}l=wa;if((c[za+304>>2]|0)>>>0<=l>>>0){if((c[za+308>>2]|0)>>>0<=l>>>0)break;f=za+300|0;c[wa>>2]=c[f>>2];c[f>>2]=wa;break a}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](wa);break}else{f=Wa[c[29352>>2]&127](wa)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](wa);break}}}}}while(0);qi(za,g);if(h|0)ri(za,h);if(!i){Ra=Aa;return}ni(za,i);Ra=Aa;return}function uj(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+48|0;k=u;r=u+8|0;t=c[e>>2]|0;if(!f)p=0;else p=c[f>>2]|0;s=(g|0)==0;do if(!(s|(h|0)==0)){l=a[h>>0]|0;o=g+4|0;i=c[o>>2]|0;switch(l<<24>>24){case -125:break;case -88:{j=a[h+38>>0]|0;q=6;break}default:{j=l;q=6}}if((q|0)==6){switch(j<<24>>24){case -87:{j=h+20|0;q=9;break}case -125:{j=c[h+20>>2]|0;q=9;break}default:j=1}if((q|0)==9)j=c[c[j>>2]>>2]|0;if((i|0)!=(j|0)){c[k>>2]=i;c[k+4>>2]=j;cd(e,38869,k);n=f;break}}a:do if((i|0)>0){m=e+272|0;n=h+20|0;j=0;i=l;while(1){switch(i<<24>>24){case -125:{i=ej(e,170,0,0)|0;if(!i)i=0;else{b[i+32>>1]=j;c[i+12>>2]=h}break}case -87:{i=c[(c[n>>2]|0)+4+(j*20|0)>>2]|0;if(!i){l=0;i=0;q=19}else q=18;break}default:{i=h;q=18}}if((q|0)==18){l=i;i=dk(c[e>>2]|0,i,0,0)|0;q=19}b:do if((q|0)==19){q=0;k=c[m>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break b}c[k>>2]=i}}while(0);f=nj(c[e>>2]|0,f,i)|0;if(f|0){l=(c[g>>2]|0)+(j<<3)|0;c[f+4+(((c[f>>2]|0)+-1|0)*20|0)+4>>2]=c[l>>2];c[l>>2]=0}j=j+1|0;i=c[o>>2]|0;if((j|0)>=(i|0))break a;i=a[h>>0]|0}}while(0);if((a[t+81>>0]|0)==0?(f|0)!=0&(a[h>>0]|0)==-125:0){n=c[f+4+(p*20|0)>>2]|0;c[n+16>>2]=h;c[n+28>>2]=i;h=0;n=f}else n=f}else n=f;while(0);if((d[e+200>>0]|0)>1?(q=r+8|0,c[q>>2]=0,c[q+4>>2]=0,c[q+8>>2]=0,c[q+12>>2]=0,c[q+16>>2]=0,c[r>>2]=e,c[r+4>>2]=124,h|0):0)_j(r,h)|0;if(h|0)ni(t,h);if(s){Ra=u;return n|0}m=g+4|0;h=c[g>>2]|0;c:do if((c[m>>2]|0)>0){f=t+480|0;j=t+304|0;k=t+308|0;l=t+300|0;if(!t){i=0;while(1){h=c[h+(i<<3)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);i=i+1|0;h=c[g>>2]|0;if((i|0)>=(c[m>>2]|0))break c}}i=0;do{h=c[h+(i<<3)>>2]|0;do if(h|0){if(c[f>>2]|0){Xd(t,h);break}s=h;if((c[j>>2]|0)>>>0<=s>>>0?(c[k>>2]|0)>>>0>s>>>0:0){c[h>>2]=c[l>>2];c[l>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;h=c[g>>2]|0}while((i|0)<(c[m>>2]|0))}while(0);d:do if(h){do if(t|0){i=t+480|0;if(!(c[i>>2]|0)){f=h;if((c[t+304>>2]|0)>>>0>f>>>0)break;if((c[t+308>>2]|0)>>>0<=f>>>0)break;s=t+300|0;c[h>>2]=c[s>>2];c[s>>2]=h}else Xd(t,h);h=i;q=70;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);q=68;break}else{q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);q=68;break}}else q=68;while(0);if((q|0)==68)if(t){h=t+480|0;q=70}if((q|0)==70){if(c[h>>2]|0){Xd(t,g);Ra=u;return n|0}s=g;if((c[t+304>>2]|0)>>>0<=s>>>0?(c[t+308>>2]|0)>>>0>s>>>0:0){t=t+300|0;c[g>>2]=c[t>>2];c[t>>2]=g;Ra=u;return n|0}}if(!g){Ra=u;return n|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=u;return n|0}else{t=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=u;return n|0}return 0}\nfunction vj(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;Ga=Ra;Ra=Ra+336|0;ma=Ga+232|0;ia=Ga+224|0;ga=Ga+216|0;ca=Ga+208|0;aa=Ga+200|0;$=Ga+184|0;X=Ga+176|0;T=Ga+160|0;R=Ga+152|0;Q=Ga+144|0;A=Ga+136|0;x=Ga+128|0;t=Ga+120|0;s=Ga+112|0;q=Ga+104|0;ta=Ga+304|0;ja=Ga+272|0;la=Ga;xa=Ga+268|0;wa=Ga+264|0;U=Ga+240|0;c[xa>>2]=0;c[wa>>2]=0;Fa=c[f>>2]|0;V=f+36|0;do if((c[V>>2]|0)==0?(ba=Fa+81|0,(a[ba>>0]|0)==0):0){na=U+4|0;c[na>>2]=0;if(h)if((c[h+8>>2]&512|0)!=0?(c[h+52>>2]|0)==0:0){Ea=c[h>>2]|0;c[h>>2]=0;pi(Fa,h,1);Da=0}else{Da=h;Ea=0}else{Da=0;Ea=0}h=c[g+8>>2]|0;if(!h)l=g+12|0;else{m=c[(c[f>>2]|0)+16>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(h|0))break;else l=l+1|0;l=m+(l<<4)|0}Ca=bd(f,0,c[g+16>>2]|0,c[l>>2]|0)|0;l=c[f>>2]|0;ha=g+24|0;h=c[ha>>2]|0;do if(h|0){if(l|0?c[l+480>>2]|0:0){Vi(l,h);break}za=h+32|0;Aa=(c[za>>2]|0)+-1|0;c[za>>2]=Aa;if(!Aa)Vi(l,h)}while(0);c[ha>>2]=Ca;a:do if(Ca){Aa=Ca+32|0;c[Aa>>2]=(c[Aa>>2]|0)+1;b:do if(a[g+45>>0]&2){o=c[g+72>>2]|0;l=c[Ca+8>>2]|0;c:do if(l|0){p=d[208+(d[o>>0]|0)>>0]|0;while(1){m=c[l>>2]|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-p|0;if(!(Aa<<24>>24==0|(h|0)!=0)){n=o;do{m=m+1|0;n=n+1|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(h|0)!=0))}if(!h)break;l=c[l+20>>2]|0;if(!l)break c}c[g+76>>2]=l;break b}while(0);c[q>>2]=o;c[q+4>>2]=0;cd(f,41107,q);a[f+17>>0]=1;l=0;Ba=1038;break a}while(0);ra=Ca+72|0;h=c[ra>>2]|0;m=c[Fa+16>>2]|0;if(!h)W=-1e6;else{l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(h|0)){W=l;break}else l=l+1|0}n=c[Ca>>2]|0;h=c[m+(W<<4)>>2]|0;l=c[f>>2]|0;if(((a[l+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(r=c[l+312>>2]|0,(r|0)!=0):0){l=$a[r&127](c[l+316>>2]|0,18,n,0,h,c[f+240>>2]|0)|0;if((l|0)==1){cd(f,39216,s);c[f+12>>2]=23;l=0;Ba=1038;break}if((l|2|0)!=2){cd(f,39231,t);c[f+12>>2]=1;l=0;Ba=1038;break}if(l|0){l=0;Ba=1038;break}l=c[f>>2]|0}S=Ca+36|0;pa=(c[S>>2]|0)>>>5&1;do if(!(0==0?(c[l+32>>2]&262144|0)==0:0)?(u=c[(c[l+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){r=c[ra>>2]|0;if((r|0)!=(u|0)?(v=c[u+48>>2]|0,(v|0)!=0):0){q=Ca+68|0;p=v;l=0;do{o=c[p+8>>2]|0;do if((c[o+24>>2]|0)==(r|0)){m=c[o+4>>2]|0;n=c[Ca>>2]|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(Aa<<24>>24==0|(h|0)!=0))do{m=m+1|0;n=n+1|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(h|0)!=0));if(h|0)break;if(!l)l=c[q>>2]|0;c[o+32>>2]=l;l=o}while(0);p=c[p>>2]|0}while((p|0)!=0);if(!l)Ba=56}else Ba=56;if((Ba|0)==56){l=c[Ca+68>>2]|0;if(!l){Ba=62;break}}h=0;m=l;do{if((a[m+8>>0]|0)==120)h=h|d[m+9>>0];m=c[m+32>>2]|0}while((m|0)!=0);if(h)t=l;else Ba=62}else Ba=62;while(0);if((Ba|0)==62){h=0;t=0}oa=(c[Ca+12>>2]|0)!=0;if((Sk(f,Ca)|0)==0?(Fm(f,Ca,h)|0)==0:0){ya=f+8|0;l=c[ya>>2]|0;if(!l){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;d:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=79;else{l=0;Ba=1038;break a}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];Aa=n+284|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break d}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];Aa=n+284|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break d}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=79}while(0);if((Ba|0)==79)m=_d(n,224,0)|0;if(!m){l=0;Ba=1038;break}p=m+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ya>>2]=m;Di(m,61,0,1,0)|0;Aa=m}else Aa=l;za=f+18|0;if(!(a[za>>0]|0)){va=Aa+149|0;ua=d[va>>0]|d[va+1>>0]<<8|32;a[va>>0]=ua;a[va+1>>0]=ua>>8}va=(Da|0)!=0;sa=(t|0)!=0;s=(va|sa)&1;ua=f+116|0;v=c[ua>>2]|0;v=(v|0)==0?f:v;l=v+84|0;m=c[l>>2]|0;u=1<<W;e:do if(((m&u|0)==0?(c[l>>2]=m|u,(W|0)==1):0)?(y=c[v>>2]|0,w=y+16|0,(c[(c[w>>2]|0)+20>>2]|0)==0):0){if(a[v+199>>0]|0)break;l=Pe(c[y>>2]|0,0,y,ta,0,542)|0;if(l|0){cd(v,32157,x);c[v+12>>2]=l;break}qa=c[ta>>2]|0;c[(c[w>>2]|0)+20>>2]=qa;l=c[y+92>>2]|0;o=c[qa+4>>2]|0;c[o+4>>2]=c[qa>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;q=o+36|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;qa=(c[14820]|0)+1|0;c[14820]=qa;c[14821]=(qa|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=101;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=101}while(0);do if((Ba|0)==101){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{qa=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-qa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);qa=Se(c[o>>2]|0,p,r)|0;c[q>>2]=(c[p>>2]|0)-(r&65535);if((qa|0)!=7)break;l=y+81|0;do if(!(a[l>>0]|0)){if(a[y+82>>0]|0)break;a[l>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;l=y+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[y+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break e}while(0)}while(0);qa=v+80|0;c[qa>>2]=c[qa>>2]|u;qa=v+20|0;a[qa>>0]=d[qa>>0]|s;qa=(i|0)==0;f:do if(qa?(P=c[f>>2]|0,(Da|0)!=0):0){if(c[f+264>>2]|0){Ba=424;break}if(c[Da+64>>2]|0){Ba=424;break}w=P+16|0;u=c[w>>2]|0;l=c[u+28>>2]|0;if(!(a[f+146>>0]|0)){s=c[ra>>2]|0;do if((s|0)!=(l|0)){l=c[l+48>>2]|0;if(!l)break;r=Ca+68|0;m=0;do{q=c[l+8>>2]|0;do if((c[q+24>>2]|0)==(s|0)){o=c[q+4>>2]|0;p=c[Ca>>2]|0;ka=a[o>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(n|0)!=0))do{o=o+1|0;p=p+1|0;ka=a[o>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(n|0)!=0));if(n|0)break;if(!m)m=c[r>>2]|0;c[q+32>>2]=m;m=q}while(0);l=c[l>>2]|0}while((l|0)!=0);if(m|0){Ba=424;break f}}while(0);if(c[Ca+68>>2]|0){Ba=424;break}}if(c[Ca+56>>2]|0){Ba=424;break}do if((j|0)==11){if((b[Ca+40>>1]|0)>-1?(z=a[Ca+48>>0]|0,z<<24>>24!=11):0){I=z&255;break}I=2}else I=j;while(0);n=c[Da+32>>2]|0;if((c[n>>2]|0)!=1){Ba=424;break}if(c[n+28>>2]|0){Ba=424;break}if(c[Da+36>>2]|0){Ba=424;break}if(c[Da+48>>2]|0){Ba=424;break}if(c[Da+40>>2]|0){Ba=424;break}if(c[Da+60>>2]|0){Ba=424;break}if(c[Da+52>>2]|0){Ba=424;break}if(c[Da+8>>2]&1|0){Ba=424;break}l=c[Da>>2]|0;if((c[l>>2]|0)!=1){Ba=424;break}if((a[c[l+4>>2]>>0]|0)!=-84){Ba=424;break}m=c[n+8>>2]|0;if(!m)l=n+12|0;else{l=0;while(1)if((c[u+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0;l=u+(l<<4)|0}K=bd(f,0,c[n+16>>2]|0,c[l>>2]|0)|0;if(!K){Ba=424;break}x=K+28|0;y=Ca+28|0;if((c[x>>2]|0)==(c[y>>2]|0)?(c[K+72>>2]|0)==(c[ra>>2]|0):0){Ba=424;break}O=K+36|0;if((c[O>>2]^c[S>>2])&32|0){Ba=424;break}if(c[K+56>>2]|0){Ba=424;break}if(c[K+12>>2]|0){Ba=424;break}l=b[Ca+42>>1]|0;if(l<<16>>16!=(b[K+42>>1]|0)){Ba=424;break}B=Ca+40|0;if((b[B>>1]|0)!=(b[K+40>>1]|0)){Ba=424;break}r=l<<16>>16;if(l<<16>>16>0){p=c[Ca+4>>2]|0;q=c[K+4>>2]|0;o=0;do{if((a[p+(o<<4)+13>>0]|0)!=(a[q+(o<<4)+13>>0]|0)){Ba=424;break f}m=c[p+(o<<4)+8>>2]|0;n=c[q+(o<<4)+8>>2]|0;do if(!m)l=((n|0)!=0)<<31>>31;else{if(!n){Ba=424;break f}ka=a[m>>0]|0;l=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(ka<<24>>24==0|(l|0)!=0)break;do{m=m+1|0;n=n+1|0;ka=a[m>>0]|0;l=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(l|0)!=0))}while(0);if(l|0){Ba=424;break f}if(a[p+(o<<4)+12>>0]|0?(a[q+(o<<4)+12>>0]|0)==0:0){Ba=424;break f}do if(o|0){l=c[p+(o<<4)+4>>2]|0;m=(l|0)==0;n=c[q+(o<<4)+4>>2]|0;if(m^(n|0)==0){Ba=424;break f}if(m)break;if(Bu(c[l+8>>2]|0,c[n+8>>2]|0)|0){Ba=424;break f}}while(0);o=o+1|0}while((o|0)<(r|0))}H=Ca+8|0;l=c[H>>2]|0;if(!l)v=0;else{o=K+8|0;p=K+72|0;m=0;while(1){m=(a[l+54>>0]|0)==0?m:1;n=c[o>>2]|0;if(!n){Ba=424;break f}while(1){if(Xm(l,n)|0)break;n=c[n+20>>2]|0;if(!n){Ba=424;break f}}do if((c[n+44>>2]|0)==(c[l+44>>2]|0)){if((c[p>>2]|0)!=(c[ra>>2]|0))break;n=c[7389]|0;if(!n){Ba=424;break f}if(!(Wa[n&127](411)|0)){Ba=424;break f}}while(0);l=c[l+20>>2]|0;if(!l){v=m;break}}}m=c[Ca+24>>2]|0;do if(m|0){n=c[K+24>>2]|0;if(!n){Ba=424;break f}l=c[n>>2]|0;if((l|0)!=(c[m>>2]|0)){Ba=424;break f}if((l|0)<=0)break;l=0;do{if((a[n+4+(l*20|0)+12>>0]|0)!=(a[m+4+(l*20|0)+12>>0]|0)){Ba=424;break f}if(bk(0,c[n+4+(l*20|0)>>2]|0,c[m+4+(l*20|0)>>2]|0,-1)|0){Ba=424;break f}l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);l=c[P+32>>2]|0;if((l&16384|0)==0&0==0){if(!((l&128|0)==0&0==0)){Ba=424;break}}else if(!((l&128|0)==0&0==0&(c[Ca+16>>2]|0)==0)){Ba=424;break}n=c[K+72>>2]|0;if(!n)N=-1e6;else{m=c[w>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(n|0)){N=l;break}else l=l+1|0}l=c[ya>>2]|0;g:do if(!l){n=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);h:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=217;else{M=0;break g}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];ka=n+284|0;c[ka>>2]=(c[ka>>2]|0)+1;break h}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];ka=n+284|0;c[ka>>2]=(c[ka>>2]|0)+1;break h}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=217}while(0);if((Ba|0)==217)m=_d(n,224,0)|0;if(!m){M=0;break}p=m+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ya>>2]=m;Di(m,61,0,1,0)|0;M=m}else M=l;while(0);o=c[ua>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<N;i:do if(!(m&n)){c[l>>2]=m|n;if((N|0)!=1)break;s=c[o>>2]|0;l=s+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[s>>2]|0,0,s,ta,0,542)|0;if(m|0){cd(o,32157,A);c[o+12>>2]=m;break}ka=c[ta>>2]|0;c[(c[l>>2]|0)+20>>2]=ka;l=c[s+92>>2]|0;o=c[ka+4>>2]|0;c[o+4>>2]=c[ka>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;q=o+36|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ka=(c[14820]|0)+1|0;c[14820]=ka;c[14821]=(ka|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=237;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=237}while(0);do if((Ba|0)==237){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ka=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ka=Se(c[o>>2]|0,p,r)|0;c[q>>2]=(c[p>>2]|0)-(r&65535);if((ka|0)!=7)break;l=s+81|0;do if(!(a[l>>0]|0)){if(a[s+82>>0]|0)break;a[l>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;l=s+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[s+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break i}while(0)}while(0);u=f+40|0;E=c[u>>2]|0;J=E+1|0;c[u>>2]=E+2;u=Wm(f,W,Ca)|0;F=f+19|0;l=a[F>>0]|0;do if(l<<24>>24){ka=l+-1<<24>>24;a[F>>0]=ka;m=c[f+148+((ka&255)<<2)>>2]|0;if(!(ka<<24>>24)){n=f+44|0;l=n;n=c[n>>2]|0;Ba=254;break}else{C=l+-2<<24>>24;a[F>>0]=C;D=m;C=c[f+148+((C&255)<<2)>>2]|0;break}}else{l=f+44|0;n=(c[l>>2]|0)+1|0;c[l>>2]=n;m=n;Ba=254}while(0);if((Ba|0)==254){C=n+1|0;c[l>>2]=C;D=m}Gj(f,J,W,Ca,109);A=P+24|0;do if(!(c[A>>2]&4)){if((b[B>>1]|0)<0){if(!((I+-1|0)>>>0>1|((v|0)!=0|(c[H>>2]|0)!=0))){z=0;break}}else if(!((I+-1|0)>>>0>1|(v|0)!=0)){z=0;break}o=M+108|0;l=c[o>>2]|0;m=M+112|0;if((c[m>>2]|0)>(l|0)){c[o>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=36;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else l=Di(M,36,J,0,0)|0;n=c[o>>2]|0;if((c[m>>2]|0)>(n|0)){c[o>>2]=n+1;p=c[M+104>>2]|0;a[p+(n*20|0)>>0]=11;p=p+(n*20|0)+1|0;q=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(q|0))}else n=Di(M,11,0,0,0)|0;m=c[o>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((l|0)<0?m+-1|0:l)*20|0)|0;else l=59308;c[l+8>>2]=m;z=n}else z=0;while(0);do if(!(c[O>>2]&32)){Gj(f,E,N,K,108);r=M+108|0;l=c[r>>2]|0;s=M+112|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=36;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=E;c[q+(l*20|0)+8>>2]=0;c[q+(l*20|0)+12>>2]=0;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=l}else q=Di(M,36,E,0,0)|0;j:do if((b[B>>1]|0)>-1){l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=-128;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else l=Di(M,128,E,C,0)|0;m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;p=c[M+104>>2]|0;a[p+(m*20|0)>>0]=31;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=J;c[p+(m*20|0)+8>>2]=0;c[p+(m*20|0)+12>>2]=C;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0;p=m}else p=Di(M,31,J,0,C)|0;m=b[B>>1]|0;o=c[f>>2]|0;n=c[Ca>>2]|0;if(m<<16>>16>-1){m=c[(c[Ca+4>>2]|0)+(m<<16>>16<<4)>>2]|0;c[Q>>2]=n;c[Q+4>>2]=m;n=1555;m=dd(o,40358,Q)|0}else{c[R>>2]=n;n=2579;m=dd(o,44808,R)|0}Uj(f,n,I,m,-7,2);n=c[r>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))m=(c[M+104>>2]|0)+(((p|0)<0?n+-1|0:p)*20|0)|0;else m=59308;c[m+8>>2]=n;if((u|0)<=0)break;m=c[ya>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;ka=c[m+104>>2]|0;a[ka+(o*20|0)>>0]=-105;b[ka+(o*20|0)+2>>1]=0;c[ka+(o*20|0)+4>>2]=u;c[ka+(o*20|0)+8>>2]=C;c[ka+(o*20|0)+12>>2]=0;c[ka+(o*20|0)+16>>2]=0;a[ka+(o*20|0)+1>>0]=0;break}else{Di(m,151,u,C,0)|0;break}}else{do if(!(c[H>>2]|0)){if(c[A>>2]&8|0)break;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=121;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;break j}else{l=Di(M,121,J,C,0)|0;break j}}while(0);l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=-128;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;break}else{l=Di(M,128,E,C,0)|0;break}}while(0);m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=127;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=1;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,127,E,D,1)|0;do if(c[A>>2]&4){m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;p=c[M+104>>2]|0;a[p+(m*20|0)>>0]=-126;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=J;c[p+(m*20|0)+8>>2]=0;c[p+(m*20|0)+12>>2]=0;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0;p=57;break}else{Di(M,130,J,0,0)|0;p=57;break}}else p=41;while(0);m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=122;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=C;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else m=Di(M,122,J,D,C)|0;do if(!(a[(c[M>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;n=c[M+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=Ca;a[o>>0]=-6;break}else{Ei(M,n+(m*20|0)|0,Ca,-6);break}}while(0);m=c[r>>2]|0;if((m|0)>0)b[(c[M+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=p;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=5;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,5,E,l,0)|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=117;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,117,E,0,0)|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;y=c[M+104>>2]|0;a[y+(l*20|0)>>0]=117;b[y+(l*20|0)+2>>1]=0;c[y+(l*20|0)+4>>2]=J;c[y+(l*20|0)+8>>2]=0;c[y+(l*20|0)+12>>2]=0;c[y+(l*20|0)+16>>2]=0;a[y+(l*20|0)+1>>0]=0;y=q;break}else{Di(M,117,J,0,0)|0;y=q;break}}else{Hj(f,W,c[y>>2]|0,1,c[Ca>>2]|0);Hj(f,N,c[x>>2]|0,0,c[K>>2]|0);y=0}while(0);l=c[H>>2]|0;if(l|0){u=K+8|0;v=M+108|0;w=M+112|0;x=M+104|0;s=l;do{l=u;while(1){o=c[l>>2]|0;if(!(Xm(s,o)|0))l=o+20|0;else break}l=c[o+44>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=108;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=N;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,108,E,l,N)|0;l=c[ya>>2]|0;n=Ij(f,o)|0;k:do if(n|0){m=c[l>>2]|0;if(!(a[m+81>>0]|0)){fa=c[l+104>>2]|0;ka=(c[l+108>>2]|0)+-1|0;a[fa+(ka*20|0)+1>>0]=-9;c[fa+(ka*20|0)+16>>2]=n;break}if(c[m+480>>2]|0)break;ka=(c[n>>2]|0)+-1|0;c[n>>2]=ka;if(ka|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break k}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;ka=l+300|0;c[n>>2]=c[ka>>2];c[ka>>2]=n;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ka=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);l=c[s+44>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=109;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=W;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,109,J,l,W)|0;l=c[ya>>2]|0;n=Ij(f,s)|0;l:do if(n|0){m=c[l>>2]|0;if(!(a[m+81>>0]|0)){fa=c[l+104>>2]|0;ka=(c[l+108>>2]|0)+-1|0;a[fa+(ka*20|0)+1>>0]=-9;c[fa+(ka*20|0)+16>>2]=n;break}if(c[m+480>>2]|0)break;ka=(c[n>>2]|0)+-1|0;c[n>>2]=ka;if(ka|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break l}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;ka=l+300|0;c[n>>2]=c[ka>>2];c[ka>>2]=n;break l}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ka=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);l=c[v>>2]|0;if((l|0)>0)b[(c[x>>2]|0)+((l+-1|0)*20|0)+2>>1]=1;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;r=c[x>>2]|0;a[r+(l*20|0)>>0]=36;b[r+(l*20|0)+2>>1]=0;c[r+(l*20|0)+4>>2]=E;c[r+(l*20|0)+8>>2]=0;c[r+(l*20|0)+12>>2]=0;c[r+(l*20|0)+16>>2]=0;a[r+(l*20|0)+1>>0]=0;r=l}else r=Di(M,36,E,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=127;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=D;c[ka+(l*20|0)+12>>2]=1;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,127,E,D,1)|0;do if(c[A>>2]&4){ka=b[o+52>>1]|0;q=ka&65535;m:do if(!(ka<<16>>16))l=0;else{p=c[o+32>>2]|0;l=0;do{m=c[p+(l<<2)>>2]|0;if(!m)break m;if((a[m>>0]|32)<<24>>24!=98)break m;n=34049;do{n=n+1|0;m=m+1|0;ka=a[n>>0]|0;o=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(o|0)!=0));if(o|0)break m;l=l+1|0}while(l>>>0<q>>>0)}while(0);if((l|0)!=(q|0)){l=0;break}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=-126;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;l=16;break}else{Di(M,130,J,0,0)|0;l=16;break}}else l=0;while(0);if(c[O>>2]&32){ka=s+55|0;l=l|((d[ka>>0]|d[ka+1>>0]<<8)&3)==2}m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=-124;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,132,J,D,0)|0;m=c[v>>2]|0;if((m|0)>0)b[(c[x>>2]|0)+((m+-1|0)*20|0)+2>>1]=(l|8)&255;l=r+1|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=5;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,5,E,l,0)|0;m=c[v>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[x>>2]|0)+(((r|0)<0?m+-1|0:r)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=117;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=0;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,117,E,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=117;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,117,J,0,0)|0;s=c[s+20>>2]|0}while((s|0)!=0)}if(y|0){m=c[M+108>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((y|0)<0?m+-1|0:y)*20|0)|0;else l=59308;c[l+8>>2]=m}do if(C|0){l=a[F>>0]|0;if((l&255)>=8)break;a[F>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=C}while(0);do if(D|0){l=a[F>>0]|0;if((l&255)>=8)break;a[F>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=D}while(0);if(!z){n=0;l=0;break}if(c[f+112>>2]|0)Sm(f);n=M+108|0;l=c[n>>2]|0;o=M+112|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;p=c[M+104>>2]|0;a[p+(l*20|0)>>0]=69;p=p+(l*20|0)+1|0;q=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(q|0))}else Di(M,69,0,0,0)|0;m=c[n>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((z|0)<0?m+-1|0:z)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[M+104>>2]|0;a[Ba+(m*20|0)>>0]=117;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=J;c[Ba+(m*20|0)+8>>2]=0;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0;Ba=424;break}else{Di(M,117,J,0,0)|0;Ba=424;break}}else Ba=424;while(0);do if((Ba|0)==424){F=Wm(f,W,Ca)|0;ka=f+44|0;fa=c[ka>>2]|0;da=fa+1|0;ea=Ca+42|0;n=b[ea>>1]|0;D=n<<16>>16;E=da+D|0;c[ka>>2]=E;Z=Ca+56|0;_=(c[Z>>2]|0)==0;E=E+((_^1)&1)|0;c[ka>>2]=E;fa=_?da:fa+2|0;_=fa+1|0;m=((c[S>>2]|0)>>>7&1^1)&255;Y=(i|0)!=0;n:do if(Y){B=c[i+4>>2]|0;if((B|0)<=0){z=-1;break}C=c[i>>2]|0;l=0;do{c[C+(l<<3)+4>>2]=-1;l=l+1|0}while((l|0)!=(B|0));x=n<<16>>16>0;y=Ca+4|0;z=Ca+40|0;A=(pa|0)!=0;n=-1;w=0;while(1){v=c[C+(w<<3)>>2]|0;o:do if(x){r=c[y>>2]|0;s=a[v>>0]|0;u=a[208+(s&255)>>0]|0;p:do if(!(s<<24>>24)){l=0;do{if(u<<24>>24==(a[208+(d[c[r+(l<<4)>>2]>>0]|0)>>0]|0))break p;l=l+1|0}while((l|0)<(D|0));o=u&255;l=o+-95|0;p=1;Ba=446;break o}else{l=0;while(1){o=c[r+(l<<4)>>2]|0;if(u<<24>>24==(a[208+(d[o>>0]|0)>>0]|0)){p=v;do{p=p+1|0;o=o+1|0;S=a[p>>0]|0;q=(d[208+(S&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(q|0)!=0));if(!q)break p}l=l+1|0;if((l|0)>=(D|0)){l=u;m=s;Ba=443;break o}}}while(0);c[C+(w<<3)+4>>2]=l;n=(l|0)==(b[z>>1]|0)?w:n;m=(w|0)==(l|0)?m:0}else{m=a[v>>0]|0;l=a[208+(m&255)>>0]|0;Ba=443}while(0);do if((Ba|0)==443){o=l&255;l=o+-95|0;p=m<<24>>24==0;if(p|(l|0)!=0){Ba=446;break}m=58070;n=v;do{n=n+1|0;m=m+1|0;Ba=a[n>>0]|0;l=(d[208+(Ba&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(Ba<<24>>24==0|(l|0)!=0));Ba=446}while(0);if((Ba|0)==446){Ba=0;do if(!l)l=1;else{l=o+-114|0;if(!(p|(l|0)!=0)){m=40352;n=v;do{n=n+1|0;m=m+1|0;S=a[n>>0]|0;l=(d[208+(S&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(l|0)!=0))}if(!l){l=1;break}l=o+-111|0;if(!(p|(l|0)!=0)){m=58078;n=v;do{n=n+1|0;m=m+1|0;S=a[n>>0]|0;l=(d[208+(S&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(l|0)!=0))}l=(l|0)==0&1}while(0);if(A|(l|0)==0)break;else{n=w;m=0}}w=w+1|0;if((w|0)>=(B|0)){z=n;break n}}c[T>>2]=g;c[T+4>>2]=0;c[T+8>>2]=v;cd(f,44817,T);a[f+17>>0]=1;l=0;Ba=1038;break a}else z=-1;while(0);q:do if(va){n=E+1|0;c[ka>>2]=n;v=Aa+108|0;o=c[v>>2]|0;l=o+1|0;w=Aa+112|0;if((c[w>>2]|0)>(o|0)){c[v>>2]=l;X=c[Aa+104>>2]|0;a[X+(o*20|0)>>0]=13;b[X+(o*20|0)+2>>1]=0;c[X+(o*20|0)+4>>2]=n;c[X+(o*20|0)+8>>2]=0;c[X+(o*20|0)+12>>2]=l;c[X+(o*20|0)+16>>2]=0;a[X+(o*20|0)+1>>0]=0}else Di(Aa,13,n,0,l)|0;a[U>>0]=13;c[na>>2]=n;c[U+16>>2]=0;x=U+8|0;c[x>>2]=m<<24>>24==0?0:_;c[U+12>>2]=b[ea>>1];X=kj(f,Da,U)|0;x=c[x>>2]|0;if(X|0){l=0;Ba=1038;break a}if(a[ba>>0]|0){l=0;Ba=1038;break a}if(c[V>>2]|0){l=0;Ba=1038;break a}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=67;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=n;c[X+(l*20|0)+8>>2]=0;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,67,n,0,0)|0;m=c[Aa+12>>2]|0;a[m+19>>0]=0;c[m+28>>2]=0;m=c[v>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[Aa+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m;u=c[c[Da>>2]>>2]|0;r:do if(!sa){l=c[ya>>2]|0;s:do if(!l){n=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);t:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=485;else{l=0;break s}else{do if((e[n+276>>1]|0)>=224){m=n+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];X=n+284|0;c[X>>2]=(c[X>>2]|0)+1;break t}m=n+296|0;l=c[m>>2]|0;if(!l){l=n+292|0;break}else{c[m>>2]=c[l>>2];X=n+284|0;c[X>>2]=(c[X>>2]|0)+1;break t}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=485}while(0);if((Ba|0)==485)l=_d(n,224,0)|0;if(!l){l=0;break}p=l+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[l>>2]=n;m=n+4|0;n=c[m>>2]|0;if(n|0)c[n+4>>2]=l;c[l+8>>2]=n;c[l+4>>2]=0;c[m>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[ya>>2]=l;Di(l,61,0,1,0)|0}while(0);s=c[l+108>>2]|0;u:do if(!(c[Z>>2]|0))m=0;else{n=c[f>>2]|0;m=c[Ca+64>>2]|0;if(!m){m=0;break}while(1){if((c[m>>2]|0)==(n|0))break u;m=c[m+24>>2]|0;if(!m){m=0;break}}}while(0);if((s|0)<=1){T=x;U=0;E=0;J=u;break q}q=Ca+28|0;r=Ca+8|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){o=c[l+104>>2]|0;n=1;while(1){v:do switch(a[o+(n*20|0)>>0]|0){case 108:{if((c[o+(n*20|0)+12>>2]|0)!=(W|0))break v;p=c[o+(n*20|0)+8>>2]|0;if((p|0)==(c[q>>2]|0))break r;l=c[r>>2]|0;if(!l)break v;do{if((p|0)==(c[l+44>>2]|0))break r;l=c[l+20>>2]|0}while((l|0)!=0);break}case -93:{if((c[o+(n*20|0)+16>>2]|0)==(m|0))break r;break}default:{}}while(0);n=n+1|0;if((n|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}n=(c[14830]|0)==(W|0);l=(c[14831]|0)==(m|0);p=c[14829]|0;switch(a[59308]|0){case 108:break;case -93:if(l)break r;else{T=x;U=0;E=0;J=u;break q}default:{T=x;U=0;E=0;J=u;break q}}if(l){if(!n){T=x;U=0;E=0;J=u;break q}n=(p|0)==(c[q>>2]|0);m=1;while(1){if(n)break r;l=c[r>>2]|0;if(l|0)do{if((p|0)==(c[l+44>>2]|0))break r;l=c[l+20>>2]|0}while((l|0)!=0);m=m+1|0;if((m|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}else{if(!n){T=x;U=0;E=0;J=u;break q}if((p|0)==(c[q>>2]|0))break;l=c[r>>2]|0;o=(l|0)==0;n=1;while(1){if(!o){m=l;do{if((p|0)==(c[m+44>>2]|0))break r;m=c[m+20>>2]|0}while((m|0)!=0)}n=n+1|0;if((n|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}}while(0);q=f+40|0;r=c[q>>2]|0;c[q>>2]=r+1;q=f+19|0;m=a[q>>0]|0;do if(m<<24>>24){X=m+-1<<24>>24;a[q>>0]=X;l=c[f+148+((X&255)<<2)>>2]|0;if(!(X<<24>>24)){m=c[ka>>2]|0;Ba=530;break}else{p=m+-2<<24>>24;a[q>>0]=p;o=l;p=c[f+148+((p&255)<<2)>>2]|0;break}}else{m=(c[ka>>2]|0)+1|0;c[ka>>2]=m;l=m;Ba=530}while(0);if((Ba|0)==530){p=m+1|0;c[ka>>2]=p;o=l}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=113;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=u;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,113,r,u,0)|0;l=c[na>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;n=c[Aa+104>>2]|0;a[n+(m*20|0)>>0]=14;b[n+(m*20|0)+2>>1]=0;c[n+(m*20|0)+4>>2]=l;c[n+(m*20|0)+8>>2]=0;c[n+(m*20|0)+12>>2]=0;c[n+(m*20|0)+16>>2]=0;a[n+(m*20|0)+1>>0]=0;n=m}else n=Di(Aa,14,l,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=92;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=x;c[X+(l*20|0)+8>>2]=u;c[X+(l*20|0)+12>>2]=o;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,92,x,u,o)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=121;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=p;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,121,r,p,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=122;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=o;c[X+(l*20|0)+12>>2]=p;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,122,r,o,p)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=11;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=0;c[X+(l*20|0)+8>>2]=n;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,11,0,n,0)|0;m=c[v>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[Aa+104>>2]|0)+(((n|0)<0?m+-1|0:n)*20|0)|0;else l=59308;c[l+8>>2]=m;do if(o|0){l=a[q>>0]|0;if((l&255)>=8)break;a[q>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=o}while(0);if(!p){T=x;U=r;E=1;J=u;break}l=a[q>>0]|0;if((l&255)>=8){T=x;U=r;E=1;J=u;break}a[q>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=p;T=x;U=r;E=1;J=u}else{W=ja+4|0;c[W>>2]=0;c[W+4>>2]=0;c[W+8>>2]=0;c[W+12>>2]=0;c[W+16>>2]=0;c[W+20>>2]=0;c[W+24>>2]=0;c[ja>>2]=f;w:do if(!Ea)l=0;else{l=c[Ea>>2]|0;if((l|0)<=0)break;s=ja+24|0;u=ta+4|0;v=ta+8|0;w=ta+12|0;x=ta+24|0;y=ja+20|0;r=0;m=0;while(1){q=c[Ea+4+(r*20|0)>>2]|0;if(q){o=m&65535;b[s>>1]=o&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[u>>2]=125;c[v>>2]=126;c[w>>2]=0;c[x>>2]=ja;p=q+24|0;n=m;V=n+208|0;W=(c[V>>2]|0)+(c[p>>2]|0)|0;c[V>>2]=W;n=c[(c[n>>2]|0)+120>>2]|0;if((n|0)<(W|0)){Ba=565;break}_j(ta,q)|0;n=c[ta>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);m=b[s>>1]|0;W=q+4|0;c[W>>2]=c[W>>2]|m&-32752&65535;m=(o&36880|m&65535)&65535;b[s>>1]=m;if((c[y>>2]|0)>0){Ba=567;break}if((c[n+36>>2]|0)>=1)break}r=r+1|0;if((r|0)>=(c[Ea>>2]|0))break w}if((Ba|0)==565){c[X>>2]=n;cd(m,41637,X);Ba=567}qi(Fa,g);l=0;break a}while(0);T=0;U=-1;E=0;J=l}while(0);if(qa&(J|0)>0)S=b[Ca+40>>1]|0;else S=z;X=b[ea>>1]|0;o=X<<16>>16;if(X<<16>>16>0){n=c[Ca+4>>2]|0;l=0;m=0;do{l=l+((d[n+(m<<4)+15>>0]|0)>>>1&1)|0;m=m+1|0}while((m|0)!=(o|0))}else l=0;do if(qa&(J|0)!=0){l=o-l|0;if((J|0)==(l|0))break;c[$>>2]=g;c[$+4>>2]=0;c[$+8>>2]=l;c[$+12>>2]=J;cd(f,44849,$);l=0;Ba=1038;break a}while(0);do if(Y){l=c[i+4>>2]|0;if((J|0)==(l|0))break;c[aa>>2]=J;c[aa+4>>2]=l;cd(f,44901,aa);l=0;Ba=1038;break a}while(0);O=Fa+32|0;do if(!((c[O>>2]&128|0)==0&0==0)){if(a[za>>0]|0){n=0;break}if(c[f+120>>2]|0){n=0;break}n=(c[ka>>2]|0)+1|0;c[ka>>2]=n;l=Aa+108|0;m=c[l>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[l>>2]=m+1;aa=c[Aa+104>>2]|0;a[aa+(m*20|0)>>0]=70;b[aa+(m*20|0)+2>>1]=0;c[aa+(m*20|0)+4>>2]=0;c[aa+(m*20|0)+8>>2]=n;c[aa+(m*20|0)+12>>2]=0;c[aa+(m*20|0)+16>>2]=0;a[aa+(m*20|0)+1>>0]=0;break}else{Di(Aa,70,0,n,0)|0;break}}else n=0;while(0);do if(oa){R=0;l=0}else{q=Hm(f,Ca,109,0,-1,0,xa,wa)|0;o=(q<<2)+4|0;x:do if(c[Fa+272>>2]|0)if(!(a[ba>>0]|0))Ba=599;else{l=0;Ba=1038;break a}else{do if(!(0<0|(0==0?(e[Fa+276>>1]|0)>>>0<o>>>0:0))){l=Fa+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];ba=Fa+284|0;c[ba>>2]=(c[ba>>2]|0)+1;break x}l=Fa+296|0;m=c[l>>2]|0;if(!m){l=Fa+292|0;break}else{c[l>>2]=c[m>>2];ba=Fa+284|0;c[ba>>2]=(c[ba>>2]|0)+1;break x}}else l=Fa+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=599}while(0);if((Ba|0)==599)m=_d(Fa,o,0)|0;if(!m){l=0;Ba=1038;break a}if((q|0)<=0){R=m;l=m;break}l=Ca+8|0;o=0;p=c[ka>>2]|0;while(1){l=c[l>>2]|0;ba=p+1|0;c[ka>>2]=ba;c[m+(o<<2)>>2]=ba;p=(c[ka>>2]|0)+(e[l+52>>1]|0)|0;c[ka>>2]=p;o=o+1|0;if((o|0)==(q|0)){R=m;l=m;break}else l=l+20|0}}while(0);do if(k|0){if(c[Z>>2]|0){c[ca>>2]=c[Ca>>2];cd(f,44926,ca);Ba=1038;break a}u=c[xa>>2]|0;C=g+48|0;c[C>>2]=u;c[k+20>>2]=g;c[k+24>>2]=_;c[k+28>>2]=u;c[k+32>>2]=c[wa>>2];u=c[k>>2]|0;if(!u)break;ca=ja+8|0;c[ca>>2]=0;c[ca+4>>2]=0;c[ca+8>>2]=0;c[ca+12>>2]=0;c[ca+16>>2]=0;c[ca+20>>2]=0;c[ja>>2]=f;c[ja+4>>2]=g;y:do if((c[u>>2]|0)>0){v=ja+24|0;w=ta+4|0;x=ta+8|0;y=ta+12|0;z=ta+24|0;A=ja+20|0;s=0;m=0;while(1){r=c[u+4+(s*20|0)>>2]|0;if(r){p=m&65535;b[v>>1]=p&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[w>>2]=125;c[x>>2]=126;c[y>>2]=0;c[z>>2]=ja;q=r+24|0;o=m;ba=o+208|0;ca=(c[ba>>2]|0)+(c[q>>2]|0)|0;c[ba>>2]=ca;o=c[(c[o>>2]|0)+120>>2]|0;if((o|0)<(ca|0)){Ba=614;break}_j(ta,r)|0;o=c[ta>>2]|0;m=o+208|0;c[m>>2]=(c[m>>2]|0)-(c[q>>2]|0);m=b[v>>1]|0;ca=r+4|0;c[ca>>2]=c[ca>>2]|m&-32752&65535;m=(p&36880|m&65535)&65535;b[v>>1]=m;if((c[A>>2]|0)>0)break;if((c[o+36>>2]|0)>=1)break y}s=s+1|0;if((s|0)>=(c[u>>2]|0)){Ba=618;break y}}if((Ba|0)==614){c[ga>>2]=o;cd(m,41637,ga)}}else{m=0;Ba=618}while(0);z:do if((Ba|0)==618){D=k+4|0;r=c[D>>2]|0;A:do if(r){s=ja+24|0;p=m&65535;b[s>>1]=p&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[ta+4>>2]=125;c[ta+8>>2]=126;c[ta+12>>2]=0;c[ta+24>>2]=ja;q=r+24|0;o=m+208|0;ga=(c[o>>2]|0)+(c[q>>2]|0)|0;c[o>>2]=ga;o=c[(c[m>>2]|0)+120>>2]|0;do if((o|0)>=(ga|0)){_j(ta,r)|0;m=c[ta>>2]|0;ia=m+208|0;c[ia>>2]=(c[ia>>2]|0)-(c[q>>2]|0);ia=b[s>>1]|0;ga=r+4|0;c[ga>>2]=c[ga>>2]|ia&-32752&65535;b[s>>1]=p&36880|ia&65535;if((c[ja+20>>2]|0)>0)break;if((c[m+36>>2]|0)<1)break A;else break z}else{c[ia>>2]=o;cd(m,41637,ia)}while(0);break z}while(0);o=c[ha>>2]|0;B=c[k>>2]|0;A=c[C>>2]|0;do if(!(c[o+36>>2]&32)){if((c[B>>2]|0)!=1)break;m=c[B+4>>2]|0;if((a[m>>0]|0)!=-94)break;if((b[m+32>>1]|0)==-1)break z}while(0);p=la;q=p+104|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));a[la>>0]=106;y=la+52|0;z=la+12|0;c[z>>2]=y;a[y>>0]=-94;c[la+80>>2]=A;m=c[o+8>>2]|0;B:do if(m|0){w=la+8|0;x=la+84|0;C:while(1){D:do if(a[m+54>>0]|0){p=c[B>>2]|0;q=m+50|0;o=b[q>>1]|0;if((p|0)!=(o&65535|0))break;r=c[m+36>>2]|0;if(r){o=c[D>>2]|0;if(!o)break;if(bk(f,o,r,A)|0)break;o=b[q>>1]|0;p=o&65535}if(!(o<<16>>16))break C;s=m+32|0;u=m+4|0;v=m+40|0;r=0;while(1){c[w>>2]=c[(c[s>>2]|0)+(r<<2)>>2];o=b[(c[u>>2]|0)+(r<<1)>>1]|0;do if(o<<16>>16==-2){o=c[(c[v>>2]|0)+4+(r*20|0)>>2]|0;if((a[o>>0]|0)==106)break;c[z>>2]=o;o=la}else{c[z>>2]=y;b[x>>1]=o;o=la}while(0);q=0;while(1){if((bk(f,c[B+4+(q*20|0)>>2]|0,o,A)|0)<2)break;q=q+1|0;if(q>>>0>=p>>>0)break D}r=r+1|0;if(r>>>0>=p>>>0)break C}}while(0);m=c[m+20>>2]|0;if(!m)break B}c[k+16>>2]=m;break z}while(0);cd(f,44986,ma)}while(0)}while(0);P=E<<24>>24!=0;do if(!P){if(!va){Q=0;N=0;break}m=c[na>>2]|0;o=Aa+108|0;p=c[o>>2]|0;if((c[Aa+112>>2]|0)>(p|0)){c[o>>2]=p+1;Q=c[Aa+104>>2]|0;a[Q+(p*20|0)>>0]=14;b[Q+(p*20|0)+2>>1]=0;c[Q+(p*20|0)+4>>2]=m;c[Q+(p*20|0)+8>>2]=0;c[Q+(p*20|0)+12>>2]=0;c[Q+(p*20|0)+16>>2]=0;a[Q+(p*20|0)+1>>0]=0;Q=p;N=p;break}else{N=Di(Aa,14,m,0,0)|0;Q=N;break}}else{o=Aa+108|0;m=c[o>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=36;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=0;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else m=Di(Aa,36,U,0,0)|0;Q=m;N=c[o>>2]|0}while(0);na=f+56|0;M=c[na>>2]|0;K=M+-1|0;c[na>>2]=K;do if(h&1|0){na=b[ea>>1]|0;h=na<<16>>16;m=h+1|0;do if(!(na<<16>>16)){h=f+19|0;m=a[h>>0]|0;if(!(m<<24>>24)){E=(c[ka>>2]|0)+1|0;c[ka>>2]=E;break}else{E=m+-1<<24>>24;a[h>>0]=E;E=c[f+148+((E&255)<<2)>>2]|0;break}}else{o=f+32|0;p=c[o>>2]|0;q=f+28|0;r=c[q>>2]|0;if((r|0)>(h|0)){c[o>>2]=p+m;c[q>>2]=r-m;E=p;break}else{E=c[ka>>2]|0;c[ka>>2]=E+m;E=E+1|0;break}}while(0);do if((S|0)<0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=70;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=-1;c[na+(m*20|0)+8>>2]=E;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,70,-1,E,0)|0;break}}else{E:do if(P){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=90;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=S;c[na+(m*20|0)+12>>2]=E;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,S,E)|0;break}}else{h=c[Ea+4+(S*20|0)>>2]|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(f,h,E)|0;break}p=c[ya>>2]|0;h=c[h+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[p+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=E;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break E}else{Di(p,78,h,E,0)|0;break E}}else p=Jj(f,0,E)|0;while(0);if((p|0)==(E|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=E;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,E,0)|0;break}}while(0);o=Aa+108|0;h=c[o>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(h|0)){c[o>>2]=h+1;na=c[Aa+104>>2]|0;a[na+(h*20|0)>>0]=51;b[na+(h*20|0)+2>>1]=0;c[na+(h*20|0)+4>>2]=E;c[na+(h*20|0)+8>>2]=0;c[na+(h*20|0)+12>>2]=0;c[na+(h*20|0)+16>>2]=0;a[na+(h*20|0)+1>>0]=0}else h=Di(Aa,51,E,0,0)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=70;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=-1;c[na+(m*20|0)+8>>2]=E;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else Di(Aa,70,-1,E,0)|0;m=c[o>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((h|0)<0?m+-1|0:h)*20|0)|0;else h=59308;c[h+8>>2]=m;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=15;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=E;c[na+(m*20|0)+8>>2]=0;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,15,E,0,0)|0;break}}while(0);h=b[ea>>1]|0;if(h<<16>>16>0){w=i+4|0;D=(Ea|0)!=0|P;x=qa&1;y=Ca+4|0;z=E+1|0;A=Aa+108|0;B=Aa+112|0;C=Aa+104|0;h=0;v=0;while(1){F:do if(Y){m=c[w>>2]|0;if((m|0)<=0){u=0;break}o=c[i>>2]|0;h=0;while(1){if((c[o+(h<<3)+4>>2]|0)==(v|0)){u=h;break F}h=h+1|0;if((h|0)>=(m|0)){u=h;break}}}else u=h;while(0);do if(D){if(Y?(u|0)>=(c[w>>2]|0):0){Ba=710;break}if(P){h=v+z|0;m=c[A>>2]|0;if((c[B>>2]|0)>(m|0)){c[A>>2]=m+1;na=c[C>>2]|0;a[na+(m*20|0)>>0]=90;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=u;c[na+(m*20|0)+12>>2]=h;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,u,h)|0;break}}q=c[Ea+4+(u*20|0)>>2]|0;r=v+z|0;s=c[ya>>2]|0;do if(q){if((a[q>>0]|0)!=-88){p=Jj(f,q,r)|0;Ba=732;break}h=c[q+28>>2]|0;m=s+108|0;o=c[m>>2]|0;if((c[s+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[s+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=r;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(s,78,h,r,0)|0;break}}else{p=Jj(f,0,r)|0;Ba=732}while(0);do if((Ba|0)==732){Ba=0;if((p|0)==(r|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=r;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,r,0)|0;break}}while(0);h=(c[ka>>2]|0)+1|0;c[ka>>2]=h;m=s+108|0;o=c[m>>2]|0;if((c[s+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[s+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=r;c[na+(o*20|0)+8>>2]=h;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0}else Di(s,78,r,h,0)|0;a[q+38>>0]=a[q>>0]|0;a[q>>0]=-88;c[q+28>>2]=h;na=q+4|0;c[na>>2]=c[na>>2]&-4097}else Ba=710;while(0);G:do if((Ba|0)==710){Ba=0;h=c[(c[y>>2]|0)+(v<<4)+4>>2]|0;q=v+z|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(f,h,q)|0;break}p=c[ya>>2]|0;h=c[h+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[p+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=q;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break G}else{Di(p,78,h,q,0)|0;break G}}else p=Jj(f,0,q)|0;while(0);if((p|0)==(q|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=q;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,q,0)|0;break}}while(0);v=v+1|0;h=b[ea>>1]|0;if((v|0)>=(h<<16>>16|0))break;else h=u+x|0}}if(!oa){zk(Aa,Ca,E+1|0);h=b[ea>>1]|0}m=h<<16>>16;w=E-m+-1|0;if(t){v=f+23|0;u=t;do{do if((a[u+8>>0]|0)==120){if((a[u+9>>0]|0)!=1)break;h=c[ya>>2]|0;H:do if(!h){o=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[o+76>>1]&8)break;a[v>>0]=1}while(0);I:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))Ba=762;else{h=0;break H}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;h=c[m>>2]|0;if(h|0){c[m>>2]=c[h>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break I}m=o+296|0;h=c[m>>2]|0;if(!h){h=o+292|0;break}else{c[m>>2]=c[h>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break I}}else h=o+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Ba=762}while(0);if((Ba|0)==762){Ba=0;h=_d(o,224,0)|0}if(!h){h=0;break}p=h+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[h>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=h;c[h+8>>2]=o;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=f;c[ya>>2]=h;Di(h,61,0,1,0)|0}while(0);m=c[ua>>2]|0;m=c[((m|0)==0?f:m)+260>>2]|0;J:do if(!m)Ba=772;else while(1){if((c[m>>2]|0)==(u|0)?(c[m+12>>2]|0)==(j|0):0)break J;m=c[m+4>>2]|0;if(!m){Ba=772;break}}while(0);if((Ba|0)==772){Ba=0;m=Nm(f,u,Ca,j)|0;if(!m)break}if(!(c[u>>2]|0))s=0;else{s=(c[f>>2]|0)+32|0;s=bw(c[s>>2]|0,c[s+4>>2]|0,13)|0;L()|0;s=s&1^1}o=(c[ka>>2]|0)+1|0;c[ka>>2]=o;q=c[m+8>>2]|0;r=h+108|0;m=c[r>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[r>>2]=m+1;na=c[h+104>>2]|0;a[na+(m*20|0)>>0]=45;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=w;c[na+(m*20|0)+8>>2]=K;c[na+(m*20|0)+12>>2]=o;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else m=Di(h,45,w,K,o)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[h+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(h,o+(m*20|0)|0,q,-4);break}if(!q)break;c[o+(m*20|0)+16>>2]=q;a[p>>0]=-4}while(0);m=c[r>>2]|0;if((m|0)<=0)break;b[(c[h+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=s}while(0);u=c[u+32>>2]|0}while((u|0)!=0);h=b[ea>>1]|0;m=h<<16>>16}o=m+1|0;if(h<<16>>16){h=f+28|0;if((c[h>>2]|0)>(m|0))break;c[h>>2]=o;c[f+32>>2]=E;break}if(!E)break;h=f+19|0;m=a[h>>0]|0;if((m&255)>=8)break;a[h>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=E}while(0);do if(!oa){do if(c[Z>>2]|0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;oa=c[Aa+104>>2]|0;a[oa+(m*20|0)>>0]=73;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=da;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0;break}else{Di(Aa,73,0,da,0)|0;break}}while(0);K:do if((S|0)>-1){L:do if(P){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;pa=c[Aa+104>>2]|0;a[pa+(m*20|0)>>0]=90;b[pa+(m*20|0)+2>>1]=0;c[pa+(m*20|0)+4>>2]=U;c[pa+(m*20|0)+8>>2]=S;c[pa+(m*20|0)+12>>2]=fa;c[pa+(m*20|0)+16>>2]=0;a[pa+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,S,fa)|0;break}}else{if(va){h=S+T|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=78;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=h;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(Aa,78,h,fa,0)|0;break}}m=c[Ea+4+(S*20|0)>>2]|0;h=a[m>>0]|0;do if(h<<24>>24==114){if(c[Z>>2]|0)break;h=c[xa>>2]|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;I=c[Aa+104>>2]|0;a[I+(o*20|0)>>0]=121;b[I+(o*20|0)+2>>1]=0;c[I+(o*20|0)+4>>2]=h;c[I+(o*20|0)+8>>2]=fa;c[I+(o*20|0)+12>>2]=F;c[I+(o*20|0)+16>>2]=0;a[I+(o*20|0)+1>>0]=0;I=1;break K}else{Di(Aa,121,h,fa,F)|0;I=1;break K}}while(0);do if(m){if(h<<24>>24!=-88){p=Jj(f,m,fa)|0;break}p=c[ya>>2]|0;h=c[m+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[p+104>>2]|0;a[pa+(o*20|0)>>0]=78;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=h;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break L}else{Di(p,78,h,fa,0)|0;break L}}else p=Jj(f,0,fa)|0;while(0);if((p|0)==(fa|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[h+104>>2]|0;a[pa+(o*20|0)>>0]=79;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=p;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,fa,0)|0;break}}while(0);q=Aa+108|0;o=c[q>>2]|0;do if(c[Z>>2]|0){m=o+2|0;h=Aa+112|0;if((c[h>>2]|0)>(o|0)){c[q>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=50;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=fa;c[pa+(o*20|0)+8>>2]=m;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(Aa,50,fa,m,0)|0;break}}else{h=Aa+112|0;if((c[h>>2]|0)>(o|0)){c[q>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=51;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=fa;c[pa+(o*20|0)+8>>2]=0;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0}else o=Di(Aa,51,fa,0,0)|0;m=c[xa>>2]|0;p=c[q>>2]|0;if((c[h>>2]|0)>(p|0)){c[q>>2]=p+1;pa=c[Aa+104>>2]|0;a[pa+(p*20|0)>>0]=121;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=fa;c[pa+(p*20|0)+12>>2]=F;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0}else Di(Aa,121,m,fa,F)|0;p=c[q>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))m=(c[Aa+104>>2]|0)+(((o|0)<0?p+-1|0:o)*20|0)|0;else m=59308;c[m+8>>2]=p}while(0);m=c[q>>2]|0;if((c[h>>2]|0)>(m|0)){c[q>>2]=m+1;I=c[Aa+104>>2]|0;a[I+(m*20|0)>>0]=15;b[I+(m*20|0)+2>>1]=0;c[I+(m*20|0)+4>>2]=fa;c[I+(m*20|0)+8>>2]=0;c[I+(m*20|0)+12>>2]=0;c[I+(m*20|0)+16>>2]=0;a[I+(m*20|0)+1>>0]=0;I=0;break}else{Di(Aa,15,fa,0,0)|0;I=0;break}}else if(!(c[Z>>2]|pa)){h=c[xa>>2]|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;I=c[Aa+104>>2]|0;a[I+(o*20|0)>>0]=121;b[I+(o*20|0)+2>>1]=0;c[I+(o*20|0)+4>>2]=h;c[I+(o*20|0)+8>>2]=fa;c[I+(o*20|0)+12>>2]=F;c[I+(o*20|0)+16>>2]=0;a[I+(o*20|0)+1>>0]=0;I=1;break}else{Di(Aa,121,h,fa,F)|0;I=1;break}}else{h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;I=c[Aa+104>>2]|0;a[I+(m*20|0)>>0]=73;b[I+(m*20|0)+2>>1]=0;c[I+(m*20|0)+4>>2]=0;c[I+(m*20|0)+8>>2]=fa;c[I+(m*20|0)+12>>2]=0;c[I+(m*20|0)+16>>2]=0;a[I+(m*20|0)+1>>0]=0;I=0;break}else{Di(Aa,73,0,fa,0)|0;I=0;break}}while(0);do if((F|0)>0){h=c[ya>>2]|0;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[h+104>>2]|0;a[pa+(o*20|0)>>0]=-105;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=F;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(h,151,F,fa,0)|0;break}}while(0);if((b[ea>>1]|0)>0){C=Ca+40|0;D=Aa+108|0;E=Aa+112|0;F=Aa+104|0;H=Ca+4|0;u=(J|0)==0;v=f+23|0;w=i+4|0;x=ta+20|0;y=ta+4|0;z=ta+8|0;A=ta+24|0;B=(T|0)==(_|0);h=0;s=0;do{r=s+_|0;M:do if((s|0)==(b[C>>1]|0)){m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;pa=c[F>>2]|0;a[pa+(m*20|0)>>0]=74;b[pa+(m*20|0)+2>>1]=0;c[pa+(m*20|0)+4>>2]=r;c[pa+(m*20|0)+8>>2]=0;c[pa+(m*20|0)+12>>2]=0;c[pa+(m*20|0)+16>>2]=0;a[pa+(m*20|0)+1>>0]=0;break}else{Di(Aa,74,r,0,0)|0;break}}else{N:do if(qa)if(!(a[(c[H>>2]|0)+(s<<4)+15>>0]&2)){m=s-h|0;Ba=867;break}else{h=h+1|0;break}else{o=c[w>>2]|0;if((o|0)<=0){m=0;Ba=867;break}p=c[i>>2]|0;m=0;while(1){if((c[p+(m<<3)+4>>2]|0)==(s|0)){Ba=867;break N}m=m+1|0;if((m|0)>=(o|0)){Ba=867;break}}}while(0);do if((Ba|0)==867){Ba=0;if(u|(m|0)<0)break;if(Y?(m|0)>=(c[w>>2]|0):0)break;if(P){o=c[D>>2]|0;if((c[E>>2]|0)>(o|0)){c[D>>2]=o+1;pa=c[F>>2]|0;a[pa+(o*20|0)>>0]=90;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=U;c[pa+(o*20|0)+8>>2]=m;c[pa+(o*20|0)+12>>2]=r;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break M}else{Di(Aa,90,U,m,r)|0;break M}}if(va){if(B)break M;m=m+T|0;o=c[D>>2]|0;if((c[E>>2]|0)>(o|0)){c[D>>2]=o+1;pa=c[F>>2]|0;a[pa+(o*20|0)>>0]=79;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=m;c[pa+(o*20|0)+8>>2]=r;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break M}else{Di(Aa,79,m,r,0)|0;break M}}m=c[Ea+4+(m*20|0)>>2]|0;do if(m){if((a[m>>0]|0)!=-88){q=Jj(f,m,r)|0;break}q=c[ya>>2]|0;m=c[m+28>>2]|0;o=q+108|0;p=c[o>>2]|0;if((c[q+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[q+104>>2]|0;a[pa+(p*20|0)>>0]=78;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(q,78,m,r,0)|0;break M}}else q=Jj(f,0,r)|0;while(0);if((q|0)==(r|0))break M;m=c[ya>>2]|0;if(!m)break M;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[m+104>>2]|0;a[pa+(p*20|0)>>0]=79;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=q;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(m,79,q,r,0)|0;break M}}while(0);m=c[(c[H>>2]|0)+(s<<4)+4>>2]|0;do if(!(a[v>>0]|0)){if(m|0){Ba=876;break}q=Jj(f,0,r)|0}else{a[x>>0]=2;c[y>>2]=127;c[z>>2]=128;c[A>>2]=0;if(m){_j(ta,m)|0;if(!(a[x>>0]|0)){Ba=876;break}}Nj(f,m,r)|0;break M}while(0);do if((Ba|0)==876){Ba=0;if((a[m>>0]|0)!=-88){q=Jj(f,m,r)|0;break}q=c[ya>>2]|0;m=c[m+28>>2]|0;o=q+108|0;p=c[o>>2]|0;if((c[q+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[q+104>>2]|0;a[pa+(p*20|0)>>0]=78;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(q,78,m,r,0)|0;break M}}while(0);if((q|0)==(r|0))break;m=c[ya>>2]|0;if(!m)break;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[m+104>>2]|0;a[pa+(p*20|0)>>0]=79;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=q;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break}else{Di(m,79,q,r,0)|0;break}}while(0);s=s+1|0}while((s|0)<(b[ea>>1]|0))}if(!(c[Z>>2]|0)){Tm(f,Ca,R,c[xa>>2]|0,c[wa>>2]|0,da,0,S>>>31&255^1,j&255,K,ta,0,k);Lm(f,Ca,0,da,0,0);do if(!(c[ta>>2]|0))h=1;else{if(t|0){h=0;break}if((c[O>>2]&16384|0)==0&0==0){h=1;break}s=c[Ca>>2]|0;p=c[ra>>2]|0;q=c[p+68>>2]|0;if(!q){m=p+60|0;h=p+64|0}else{m=a[s>>0]|0;if(!(m<<24>>24))h=0;else{h=0;o=s;do{o=o+1|0;h=G(h+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[o>>0]|0}while(m<<24>>24!=0)}h=(h>>>0)%((c[p+56>>2]|0)>>>0)|0;m=q+(h<<3)|0;h=q+(h<<3)+4|0}m=c[m>>2]|0;O:do if(!m)h=59292;else{r=d[208+(d[s>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;m=m+-1|0;p=c[h+12>>2]|0;ta=a[p>>0]|0;o=(d[208+(ta&255)>>0]|0)-r|0;if(!(ta<<24>>24==0|(o|0)!=0)){q=s;do{p=p+1|0;q=q+1|0;ta=a[p>>0]|0;o=(d[208+(ta&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(ta<<24>>24==0|(o|0)!=0))}if(!o)break O;if(!m){h=59292;break}}}while(0);h=(c[h+8>>2]|0)==0&1}while(0);Um(f,Ca,c[xa>>2]|0,c[wa>>2]|0,da,R,0,I,h);break}h=c[Ca+64>>2]|0;P:do if(!h)h=0;else while(1){if((c[h>>2]|0)==(Fa|0))break P;h=c[h+24>>2]|0;if(!h){h=0;break}}while(0);s=c[ua>>2]|0;s=(s|0)==0?f:s;r=s+204|0;q=c[r>>2]|0;p=s+252|0;Q:do if((q|0)>0){m=c[p>>2]|0;o=0;do{if((c[m+(o<<2)>>2]|0)==(Ca|0))break Q;o=o+1|0}while((o|0)<(q|0));o=p;Ba=920}else{o=p;m=c[p>>2]|0;Ba=920}while(0);R:do if((Ba|0)==920){do if(!(mb()|0)){xa=(q<<2)+4|0;m=sb(m,xa,((xa|0)<0)<<31>>31)|0;if(!m)break;c[o>>2]=m;xa=c[r>>2]|0;c[r>>2]=xa+1;c[m+(xa<<2)>>2]=Ca;break R}while(0);m=c[s>>2]|0;o=m+81|0;if(a[o>>0]|0)break;if(a[m+82>>0]|0)break;a[o>>0]=1;if((c[m+180>>2]|0)>0)c[m+264>>2]=1;xa=m+272|0;c[xa>>2]=(c[xa>>2]|0)+1;m=c[m+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);o=(b[ea>>1]|0)+2|0;q=Aa+108|0;m=c[q>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[q>>2]=m+1;xa=c[Aa+104>>2]|0;a[xa+(m*20|0)>>0]=10;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=1;c[xa+(m*20|0)+8>>2]=o;c[xa+(m*20|0)+12>>2]=da;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0}else m=Di(Aa,10,1,o,da)|0;do if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[q>>2]|0)+-1|0;o=c[Aa+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(m*20|0)|0,h,-12);break}if(!h)break;c[o+(m*20|0)+16>>2]=h;a[p>>0]=-12;xa=h+12|0;c[xa>>2]=(c[xa>>2]|0)+1}while(0);h=c[q>>2]|0;if((h|0)>0)b[(c[Aa+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=(j|0)==11?2:j&65535;xa=c[ua>>2]|0;a[((xa|0)==0?f:xa)+21>>0]=1}while(0);do if(n|0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;xa=c[Aa+104>>2]|0;a[xa+(m*20|0)>>0]=83;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=n;c[xa+(m*20|0)+8>>2]=1;c[xa+(m*20|0)+12>>2]=0;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0;break}else{Di(Aa,83,n,1,0)|0;break}}while(0);if(sa){u=fa+-1-(b[ea>>1]|0)|0;v=f+23|0;do{do if((a[t+8>>0]|0)==120){if((a[t+9>>0]|0)!=2)break;h=c[ya>>2]|0;S:do if(!h){o=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[o+76>>1]&8)break;a[v>>0]=1}while(0);T:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))Ba=982;else{h=0;break S}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;h=c[m>>2]|0;if(h|0){c[m>>2]=c[h>>2];xa=o+284|0;c[xa>>2]=(c[xa>>2]|0)+1;break T}m=o+296|0;h=c[m>>2]|0;if(!h){h=o+292|0;break}else{c[m>>2]=c[h>>2];xa=o+284|0;c[xa>>2]=(c[xa>>2]|0)+1;break T}}else h=o+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Ba=982}while(0);if((Ba|0)==982){Ba=0;h=_d(o,224,0)|0}if(!h){h=0;break}p=h+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[h>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=h;c[h+8>>2]=o;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=f;c[ya>>2]=h;Di(h,61,0,1,0)|0}while(0);m=c[ua>>2]|0;m=c[((m|0)==0?f:m)+260>>2]|0;U:do if(!m)Ba=992;else while(1){if((c[m>>2]|0)==(t|0)?(c[m+12>>2]|0)==(j|0):0)break U;m=c[m+4>>2]|0;if(!m){Ba=992;break}}while(0);if((Ba|0)==992){Ba=0;m=Nm(f,t,Ca,j)|0;if(!m)break}if(!(c[t>>2]|0))s=0;else{s=(c[f>>2]|0)+32|0;s=bw(c[s>>2]|0,c[s+4>>2]|0,13)|0;L()|0;s=s&1^1}o=(c[ka>>2]|0)+1|0;c[ka>>2]=o;q=c[m+8>>2]|0;r=h+108|0;m=c[r>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[r>>2]=m+1;xa=c[h+104>>2]|0;a[xa+(m*20|0)>>0]=45;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=u;c[xa+(m*20|0)+8>>2]=K;c[xa+(m*20|0)+12>>2]=o;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0}else m=Di(h,45,u,K,o)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[h+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(h,o+(m*20|0)|0,q,-4);break}if(!q)break;c[o+(m*20|0)+16>>2]=q;a[p>>0]=-4}while(0);m=c[r>>2]|0;if((m|0)<=0)break;b[(c[h+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=s}while(0);t=c[t+32>>2]|0}while((t|0)!=0)}m=c[Aa+12>>2]|0;h=0-M|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Aa,h);else c[(c[m+64>>2]|0)+(h<<2)>>2]=c[Aa+108>>2];if(!P){if(!va)break;h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;j=c[Aa+104>>2]|0;a[j+(m*20|0)>>0]=11;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=0;c[j+(m*20|0)+8>>2]=N;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(Aa,11,0,N,0)|0;m=c[h>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((Q|0)<0?m+-1|0:Q)*20|0)|0;else h=59308;c[h+8>>2]=m;break}o=Aa+108|0;h=c[o>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(h|0)){c[o>>2]=h+1;j=c[Aa+104>>2]|0;a[j+(h*20|0)>>0]=5;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=U;c[j+(h*20|0)+8>>2]=N;c[j+(h*20|0)+12>>2]=0;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0}else Di(Aa,5,U,N,0)|0;m=c[o>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((Q|0)<0?m+-1|0:Q)*20|0)|0;else h=59308;c[h+8>>2]=m;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;j=c[Aa+104>>2]|0;a[j+(m*20|0)>>0]=117;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=U;c[j+(m*20|0)+8>>2]=0;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break}else{Di(Aa,117,U,0,0)|0;break}}while(0);do if(!(a[za>>0]|0)){if(c[f+120>>2]|0)break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!n)Ba=1038;else{h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;f=c[Aa+104>>2]|0;a[f+(m*20|0)>>0]=81;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=n;c[f+(m*20|0)+8>>2]=1;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(Aa,81,n,1,0)|0;Wi(Aa,1);if(a[(c[Aa>>2]|0)+81>>0]|0){Ba=1038;break}yc(c[Aa+116>>2]|0,44972,-1,1,0)|0;Ba=1038}}else{l=0;Ba=1038}}else{l=0;Ba=1038}while(0);if((Ba|0)==1038){qi(Fa,g);if(!Ea){h=Da;r=l;break}}ri(Fa,Ea);h=Da;r=l}else Ba=1037;while(0);if((Ba|0)==1037){qi(Fa,g);r=0}do if(k|0){l=c[k>>2]|0;if(l|0)ri(Fa,l);l=c[k+4>>2]|0;if(l|0)ni(Fa,l);l=c[k+8>>2]|0;if(l|0)ri(Fa,l);l=c[k+12>>2]|0;if(l|0)ni(Fa,l);if(Fa|0){if(c[Fa+480>>2]|0){Xd(Fa,k);break}g=k;if((c[Fa+304>>2]|0)>>>0<=g>>>0?(c[Fa+308>>2]|0)>>>0>g>>>0:0){g=Fa+300|0;c[k>>2]=c[g>>2];c[g>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{g=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(h|0)pi(Fa,h,1);do if(i|0){q=i+4|0;l=c[i>>2]|0;V:do if((c[q>>2]|0)>0){m=Fa+480|0;n=Fa+304|0;o=Fa+308|0;p=Fa+300|0;if(!Fa){h=0;while(1){l=c[l+(h<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);h=h+1|0;l=c[i>>2]|0;if((h|0)>=(c[q>>2]|0))break V}}h=0;do{l=c[l+(h<<3)>>2]|0;do if(l|0){if(c[m>>2]|0){Xd(Fa,l);break}k=l;if((c[n>>2]|0)>>>0<=k>>>0?(c[o>>2]|0)>>>0>k>>>0:0){c[l>>2]=c[p>>2];c[p>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);h=h+1|0;l=c[i>>2]|0}while((h|0)<(c[q>>2]|0))}while(0);W:do if(l){do if(Fa|0){h=Fa+480|0;if(!(c[h>>2]|0)){m=l;if((c[Fa+304>>2]|0)>>>0>m>>>0)break;if((c[Fa+308>>2]|0)>>>0<=m>>>0)break;k=Fa+300|0;c[l>>2]=c[k>>2];c[k>>2]=l}else Xd(Fa,l);l=h;Ba=1093;break W}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);Ba=1091;break}else{Ba=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);Ba=1091;break}}else Ba=1091;while(0);if((Ba|0)==1091)if(Fa){l=Fa+480|0;Ba=1093}if((Ba|0)==1093){if(c[l>>2]|0){Xd(Fa,i);break}k=i;if((c[Fa+304>>2]|0)>>>0<=k>>>0?(c[Fa+308>>2]|0)>>>0>k>>>0:0){k=Fa+300|0;c[i>>2]=c[k>>2];c[k>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!r){Ra=Ga;return}if(Fa|0){if(c[Fa+480>>2]|0){Xd(Fa,r);Ra=Ga;return}k=r;if((c[Fa+304>>2]|0)>>>0<=k>>>0?(c[Fa+308>>2]|0)>>>0>k>>>0:0){Fa=Fa+300|0;c[r>>2]=c[Fa>>2];c[Fa>>2]=r;Ra=Ga;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);Ra=Ga;return}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);Ra=Ga;return}}function wj(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=c[b>>2]|0;if(!f){a:do if(!p){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](8)|0;o=25;break}f=Wa[c[29356>>2]&127](8)|0;if((c[14985]|0)>>>0<8)c[14985]=8;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){n=c[14978]|0;m=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){p=0;return p|0}h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){p=0;return p|0}}else{do if((e[p+276>>1]|0)>=8){h=p+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=25;break a}h=p+296|0;f=c[h>>2]|0;if(!f){f=p+292|0;break}else{c[h>>2]=c[f>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=25;break a}}else f=p+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(p,8,0)|0;o=25}while(0);if((o|0)==25)if(!f){p=0;return p|0}n=f;m=n;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;n=n+4|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0}m=c[f>>2]|0;n=f+4|0;i=c[n>>2]|0;h=((i|0)<0)<<31>>31;l=Sv(i|0,h|0,-1,-1)|0;b:do if((l&i|0)==0&((L()|0)&h|0)==0){j=(i|0)==0;k=cw(i|0,h|0,4)|0;l=L()|0;k=j?8:k;l=j?0:l;c:do if(!m){if(c[p+272>>2]|0){if(a[p+81>>0]|0)break}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[p+276>>1]|0)>>>0:0))){j=p+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=45;break c}j=p+296|0;h=c[j>>2]|0;if(!h){h=p+292|0;break}else{c[j>>2]=c[h>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=45;break c}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(p,k,l)|0;o=45}else{o=m;if((c[p+304>>2]|0)>>>0<=o>>>0?(c[p+308>>2]|0)>>>0>o>>>0:0){if(!(l>>>0>0|((l|0)==0?k>>>0>(e[p+276>>1]|0)>>>0:0))){h=m;o=48;break b}h=Zd(p,m,k,l)|0;o=45;break}h=Zd(p,m,k,l)|0;o=45}while(0);if((o|0)==45){if(h|0){o=48;break}i=c[n>>2]|0}c[f>>2]=m;h=m}else{h=m;o=48}while(0);if((o|0)==48){j=h+(i<<3)|0;m=j;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;j=j+4|0;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;j=(c[n>>2]|0)+1|0;c[n>>2]=j;c[f>>2]=h;if((i|0)<0)i=j;else{k=qj(p,g)|0;c[(c[f>>2]|0)+(i<<3)>>2]=k;if((k|0)==0|(d[b+200>>0]|0)<2){p=f;return p|0}j=c[b>>2]|0;d:do if(!j){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](16)|0;o=114;break}h=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){p=c[14978]|0;n=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=p>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){p=f;return p|0}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){p=f;return p|0}}else{do if((e[j+276>>1]|0)>=16){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];o=j+284|0;c[o>>2]=(c[o>>2]|0)+1;o=114;break d}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];o=j+284|0;c[o>>2]=(c[o>>2]|0)+1;o=114;break d}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,16,0)|0;o=114}while(0);if((o|0)==114)if(!h){p=f;return p|0}i=h+4|0;j=i+12|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));c[h>>2]=k;o=g;g=c[o+4>>2]|0;p=h+4|0;c[p>>2]=c[o>>2];c[p+4>>2]=g;p=b+272|0;c[h+12>>2]=c[p>>2];c[p>>2]=h;p=f;return p|0}}e:do if((i|0)>0){j=p+480|0;k=p+304|0;l=p+308|0;m=p+300|0;if(!p){i=0;while(1){h=c[h+(i<<3)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);i=i+1|0;h=c[f>>2]|0;if((i|0)>=(c[n>>2]|0))break e}}i=0;do{h=c[h+(i<<3)>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(p,h);break}g=h;if((c[k>>2]|0)>>>0<=g>>>0?(c[l>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;h=c[f>>2]|0}while((i|0)<(c[n>>2]|0))}while(0);f:do if(h){do if(p|0){i=p+480|0;if(!(c[i>>2]|0)){j=h;if((c[p+304>>2]|0)>>>0>j>>>0)break;if((c[p+308>>2]|0)>>>0<=j>>>0)break;g=p+300|0;c[h>>2]=c[g>>2];c[g>>2]=h}else Xd(p,h);h=i;o=81;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);o=79;break}else{o=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);o=79;break}}else o=79;while(0);if((o|0)==79)if(p){h=p+480|0;o=81}if((o|0)==81){if(c[h>>2]|0){Xd(p,f);p=0;return p|0}g=f;if((c[p+304>>2]|0)>>>0<=g>>>0?(c[p+308>>2]|0)>>>0>g>>>0:0){p=p+300|0;c[f>>2]=c[p>>2];c[p>>2]=f;p=0;return p|0}}if(!f){p=0;return p|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);p=0;return p|0}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);p=0;return p|0}return 0}function xj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+176|0;r=w+96|0;o=w+88|0;n=w+80|0;q=w+136|0;p=w;s=w+104|0;u=f+8|0;i=c[u>>2]|0;a:do if(!i){m=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))l=15;else break a;else{do if((e[m+276>>1]|0)>=224){i=m+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];k=m+284|0;c[k>>2]=(c[k>>2]|0)+1;k=j;break b}i=m+296|0;j=c[i>>2]|0;if(!j){i=m+292|0;break}else{c[i>>2]=c[j>>2];k=m+284|0;c[k>>2]=(c[k>>2]|0)+1;k=j;break b}}else i=m+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;l=15}while(0);if((l|0)==15)k=_d(m,224,0)|0;if(k|0){i=k+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[k>>2]=m;i=m+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=k;c[k+8>>2]=j;c[k+4>>2]=0;c[i>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[u>>2]=k;Di(k,61,0,1,0)|0;t=k;l=20}}else{t=i;l=20}while(0);do if((l|0)==20){if(g){i=c[f>>2]|0;if(c[g+4>>2]|0){if(a[i+165>>0]|0){cd(f,39404,n);break}i=wk(i,g)|0;if((i|0)<0){c[o>>2]=g;cd(f,39421,o);break}}else i=d[i+164>>0]|0;if((i|0)>-1&(i|0)!=1)n=i;else break}else n=0;do if(h){i=s+8|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;i=p;j=i+80|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[s>>2]=f;c[s+4>>2]=p;j=s+24|0;b[j>>1]=0;c[q>>2]=f;c[q+4>>2]=125;c[q+8>>2]=126;c[q+12>>2]=0;c[q+24>>2]=s;k=h+24|0;i=f+208|0;p=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=p;i=c[(c[f>>2]|0)+120>>2]|0;if((i|0)<(p|0)){c[r>>2]=i;cd(f,41637,r);i=0;break}_j(q,h)|0;i=c[q>>2]|0;r=i+208|0;c[r>>2]=(c[r>>2]|0)-(c[k>>2]|0);r=h+4|0;c[r>>2]=c[r>>2]|b[j>>1]&-32752&65535;if((c[s+20>>2]|0)>0){i=0;break}if((c[i+36>>2]|0)<1){s=f+44|0;i=(c[s>>2]|0)+1|0;c[s>>2]=i;if((a[h>>0]|0)==-88){j=c[u>>2]|0;k=c[h+28>>2]|0;l=j+108|0;m=c[l>>2]|0;if((c[j+112>>2]|0)>(m|0)){c[l>>2]=m+1;v=c[j+104>>2]|0;a[v+(m*20|0)>>0]=78;b[v+(m*20|0)+2>>1]=0;c[v+(m*20|0)+4>>2]=k;c[v+(m*20|0)+8>>2]=i;c[v+(m*20|0)+12>>2]=0;c[v+(m*20|0)+16>>2]=0;a[v+(m*20|0)+1>>0]=0;break}else{Di(j,78,k,i,0)|0;break}}l=Jj(f,h,i)|0;if((l|0)!=(i|0)?(v=c[u>>2]|0,(v|0)!=0):0){j=v+108|0;k=c[j>>2]|0;if((c[v+112>>2]|0)>(k|0)){c[j>>2]=k+1;v=c[v+104>>2]|0;a[v+(k*20|0)>>0]=79;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=l;c[v+(k*20|0)+8>>2]=i;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0;break}else{Di(v,79,l,i,0)|0;break}}}else i=0}else i=0;while(0);j=t+108|0;k=c[j>>2]|0;if((c[t+112>>2]|0)>(k|0)){c[j>>2]=k+1;v=c[t+104>>2]|0;a[v+(k*20|0)>>0]=8;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=n;c[v+(k*20|0)+8>>2]=i;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0}else Di(t,8,n,i,0)|0;i=1<<n;v=t+152|0;c[v>>2]=c[v>>2]|i;if((n|0)!=1?a[(c[(c[(c[t>>2]|0)+16>>2]|0)+(n<<4)+4>>2]|0)+9>>0]|0:0){v=t+156|0;c[v>>2]=c[v>>2]|i}}while(0);if(!h){Ra=w;return}ni(c[f>>2]|0,h);Ra=w;return}\nfunction Vi(a,e){a=a|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=c[e+8>>2]|0;if(f|0){j=(a|0)==0;l=e+56|0;m=a+480|0;n=a+304|0;o=a+308|0;i=a+300|0;do{h=f;f=c[f+20>>2]|0;if(!(!j?(c[m>>2]|0)!=0:0))p=5;if((p|0)==5?(0,(c[l>>2]|0)==0):0)mi((c[h+24>>2]|0)+24|0,c[h>>2]|0,0)|0;g=c[h+36>>2]|0;if(g|0)ni(a,g);g=c[h+40>>2]|0;if(g|0)ri(a,g);g=c[h+16>>2]|0;do if(g|0){if(!j){if(c[m>>2]|0){Xd(a,g);break}p=g;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[g>>2]=c[i>>2];c[i>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);p=h+55|0;do if(((d[p>>0]|d[p+1>>0]<<8)&16)!=0?(k=c[h+32>>2]|0,(k|0)!=0):0){if(!j){if(c[m>>2]|0){Xd(a,k);p=33;break}p=k;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[k>>2]=c[i>>2];c[i>>2]=k;p=33;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);p=32;break}else{p=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);p=32;break}}else p=32;while(0);if((p|0)==32)if(j)p=38;else p=33;do if((p|0)==33){p=0;if(c[m>>2]|0){Xd(a,h);break}g=h;if((c[n>>2]|0)>>>0<=g>>>0?(c[o>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[i>>2];c[i>>2]=h}else p=38}while(0);do if((p|0)==38){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0)}while((f|0)!=0)}f=c[e+16>>2]|0;if(f|0){k=(a|0)==0;l=a+480|0;m=e+72|0;n=a+304|0;o=a+308|0;j=a+300|0;i=f;while(1){if(!(!k?(c[l>>2]|0)!=0:0)){h=i+16|0;f=c[h>>2]|0;g=i+12|0;if(!f){p=c[g>>2]|0;mi((c[m>>2]|0)+56|0,c[((p|0)==0?i:p)+8>>2]|0,p)|0}else c[f+12>>2]=c[g>>2];f=c[g>>2]|0;if(f|0)c[f+16>>2]=c[h>>2]}h=c[i+28>>2]|0;do if(h|0){g=c[h+28>>2]|0;f=c[g+16>>2]|0;if(f|0)ni(a,f);f=c[g+20>>2]|0;if(f|0)ri(a,f);f=c[g+8>>2]|0;if(f|0)pi(a,f,1);f=c[h+12>>2]|0;if(f|0)ni(a,f);if(!k){if(c[l>>2]|0){Xd(a,h);break}p=h;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[h>>2]=c[j>>2];c[j>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[i+32>>2]|0;a:do if(h){g=c[h+28>>2]|0;f=c[g+16>>2]|0;if(f|0)ni(a,f);f=c[g+20>>2]|0;if(f|0)ri(a,f);f=c[g+8>>2]|0;if(f|0)pi(a,f,1);f=c[h+12>>2]|0;if(f|0)ni(a,f);do if(!k){if(!(c[l>>2]|0)){f=h;if((c[n>>2]|0)>>>0>f>>>0)break;if((c[o>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[j>>2];c[j>>2]=h}else Xd(a,h);f=c[i+4>>2]|0;p=89;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);p=88;break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);p=88;break}}else p=88;while(0);if((p|0)==88){f=c[i+4>>2]|0;if(k)p=94;else p=89}do if((p|0)==89){p=0;if(c[l>>2]|0){Xd(a,i);break}h=i;if((c[n>>2]|0)>>>0<=h>>>0?(c[o>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[j>>2];c[j>>2]=i}else p=94}while(0);do if((p|0)==94){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!f)break;else i=f}}m=e+4|0;g=c[m>>2]|0;do if(g|0){n=e+42|0;b:do if((b[n>>1]|0)>0){i=a+480|0;j=a+304|0;k=a+308|0;l=a+300|0;if(!a){h=0;while(1){f=c[g>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[g+4>>2]|0;if(f|0)ni(0,f);f=c[g+8>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);h=h+1|0;if((h|0)>=(b[n>>1]|0))break b;else g=g+16|0}}h=0;while(1){f=c[g>>2]|0;do if(f|0){if(c[i>>2]|0){Xd(a,f);break}o=f;if((c[j>>2]|0)>>>0<=o>>>0?(c[k>>2]|0)>>>0>o>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[g+4>>2]|0;if(f|0)ni(a,f);f=c[g+8>>2]|0;do if(f|0){if(c[i>>2]|0){Xd(a,f);break}o=f;if((c[j>>2]|0)>>>0<=o>>>0?(c[k>>2]|0)>>>0>o>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);h=h+1|0;if((h|0)>=(b[n>>1]|0))break;else g=g+16|0}}while(0);f=c[m>>2]|0;if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}}while(0);f=c[e>>2]|0;do if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+20>>2]|0;do if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+12>>2]|0;if(f|0)pi(a,f,1);f=c[e+24>>2]|0;if(f|0)ri(a,f);n=(a|0)==0;if(!(!n?(c[a+480>>2]|0)!=0:0))p=171;if((p|0)==171?(r=e+64|0,q=c[r>>2]|0,c[r>>2]=0,q|0):0){f=q;do{h=c[f>>2]|0;i=f+24|0;g=f;f=c[i>>2]|0;if(!h){c[r>>2]=g;c[i>>2]=0}else{q=h+360|0;c[i>>2]=c[q>>2];c[q>>2]=g}}while((f|0)!=0)}l=e+60|0;c:do if(c[l>>2]|0){m=e+56|0;d:do if((c[m>>2]|0)>0){h=a+480|0;i=a+304|0;j=a+308|0;k=a+300|0;if(n){f=0;while(1){do if((f|0)!=1?(s=c[(c[l>>2]|0)+(f<<2)>>2]|0,s|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{t=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);f=f+1|0;if((f|0)>=(c[m>>2]|0))break d}}f=0;do{e:do if((f|0)!=1?(t=c[(c[l>>2]|0)+(f<<2)>>2]|0,t|0):0){if(c[h>>2]|0){Xd(a,t);break}g=t;do if((c[i>>2]|0)>>>0<=g>>>0){if((c[j>>2]|0)>>>0<=g>>>0)break;c[t>>2]=c[k>>2];c[k>>2]=t;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{s=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);f=f+1|0}while((f|0)<(c[m>>2]|0))}while(0);f=c[l>>2]|0;if(f){do if(!n){if(!(c[a+480>>2]|0)){g=f;if((c[a+304>>2]|0)>>>0>g>>>0)break;if((c[a+308>>2]|0)>>>0<=g>>>0)break;t=a+300|0;c[f>>2]=c[t>>2];c[t>>2]=f}else Xd(a,f);f=e;p=211;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);p=210;break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);p=210;break}}else p=210}else p=210;while(0);if((p|0)==210)if(!n){f=e;p=211}if((p|0)==211){if(c[a+480>>2]|0){Xd(a,f);return}t=e;if((c[a+304>>2]|0)>>>0<=t>>>0?(c[a+308>>2]|0)>>>0>t>>>0:0){a=a+300|0;c[e>>2]=c[a>>2];c[a>>2]=e;return}else e=f}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{a=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function Wi(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=c[d>>2]|0;r=d+144|0;h=b[r>>1]|0;do if(h<<16>>16){q=d+116|0;g=c[q>>2]|0;a:do if(g|0){p=g+(((h&65535)<<1)*40|0)|0;k=c[g+32>>2]|0;l=k+480|0;h=(k|0)==0;m=k+304|0;n=k+308|0;o=k+300|0;if(c[l>>2]|0){if(h)while(1){do if(c[g+24>>2]|0?(i=c[g+20>>2]|0,i|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{o=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);g=g+40|0;if(g>>>0>=p>>>0)break a}while(1){do if(c[g+24>>2]|0?(j=c[g+20>>2]|0,j|0):0){if(c[l>>2]|0){Xd(k,j);break}i=j;if((c[m>>2]|0)>>>0<=i>>>0?(c[n>>2]|0)>>>0>i>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);g=g+40|0;if(g>>>0>=p>>>0)break a}}if(h)while(1){h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{o=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0;if(g>>>0>=p>>>0)break a}do{h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(!(c[l>>2]|0)){u=j;if((c[m>>2]|0)>>>0<=u>>>0?(c[n>>2]|0)>>>0>u>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{u=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else Xd(k,j);while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0}while(g>>>0<p>>>0)}while(0);g=c[q>>2]|0;if(g|0){if(t|0){if(c[t+480>>2]|0){Xd(t,g);break}u=g;if((c[t+304>>2]|0)>>>0<=u>>>0?(c[t+308>>2]|0)>>>0>u>>>0:0){u=t+300|0;c[g>>2]=c[u>>2];c[u>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);b[r>>1]=f;i=f*80|0;b:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))s=71;else{c[d+116>>2]=0;return}else{do if(!(0<0|(0==0?(e[t+276>>1]|0)>>>0<i>>>0:0))){h=t+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];u=t+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}h=t+296|0;g=c[h>>2]|0;if(!g){g=t+292|0;break}else{c[h>>2]=c[g>>2];u=t+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}}else g=t+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;s=71}while(0);if((s|0)==71)g=_d(t,i,0)|0;c[d+116>>2]=g;if(!((f|0)>0&(g|0)!=0))return;h=f<<1;while(1){c[g+32>>2]=t;b[g+8>>1]=1;c[g+24>>2]=0;if((h|0)>1){h=h+-1|0;g=g+40|0}else break}return}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!b)return;i=(a|0)==0;j=a+480|0;k=a+304|0;l=a+308|0;m=a+300|0;do{h=b;b=c[b+36>>2]|0;d=c[h+16>>2]|0;if(d|0)ni(a,d);d=c[h+20>>2]|0;if(d|0)ri(a,d);d=c[h+8>>2]|0;if(d|0)pi(a,d,1);d=c[h+24>>2]|0;do if(d|0){g=d+4|0;e=c[d>>2]|0;a:do if((c[g>>2]|0)>0){if(i){f=0;while(1){e=c[e+(f<<3)>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);f=f+1|0;e=c[d>>2]|0;if((f|0)>=(c[g>>2]|0))break a}}f=0;do{e=c[e+(f<<3)>>2]|0;do if(e|0){if(c[j>>2]|0){Xd(a,e);break}n=e;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[e>>2]=c[m>>2];c[m>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);f=f+1|0;e=c[d>>2]|0}while((f|0)<(c[g>>2]|0))}while(0);b:do if(e){do if(!i){if(!(c[j>>2]|0)){f=e;if((c[k>>2]|0)>>>0>f>>>0)break;if((c[l>>2]|0)>>>0<=f>>>0)break;c[e>>2]=c[m>>2];c[m>>2]=e}else Xd(a,e);e=41;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);e=40;break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);e=40;break}}else e=40;while(0);if((e|0)==40){e=0;if(!i)e=41}if((e|0)==41){if(c[j>>2]|0){Xd(a,d);break}n=d;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[d>>2]=c[m>>2];c[m>>2]=d;break}}if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{n=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);e=c[h+28>>2]|0;do if(e|0){d=c[e>>2]|0;if(d|0)ri(a,d);d=c[e+4>>2]|0;if(d|0)ni(a,d);d=c[e+8>>2]|0;if(d|0)ri(a,d);d=c[e+12>>2]|0;if(d|0)ni(a,d);if(!i){if(c[j>>2]|0){Xd(a,e);break}n=e;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[e>>2]=c[m>>2];c[m>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=c[h+32>>2]|0;c:do if(d){do if(!i){if(!(c[j>>2]|0)){e=d;if((c[k>>2]|0)>>>0>e>>>0)break;if((c[l>>2]|0)>>>0<=e>>>0)break;c[d>>2]=c[m>>2];c[m>>2]=d}else Xd(a,d);d=h;e=80;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);e=79;break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);e=79;break}}else e=79;while(0);if((e|0)==79)if(i){d=h;e=85}else{d=h;e=80}do if((e|0)==80){e=0;if(c[j>>2]|0){Xd(a,d);break}n=d;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[d>>2]=c[m>>2];c[m>>2]=d}else e=85}while(0);do if((e|0)==85)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{n=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0)}while((b|0)!=0);return}function Yi(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=c[e>>2]|0;a:do if(f){b:while(1){g=a[f>>0]|0;j=c[f+4>>2]|0;if(j&512|0){f=0;break a}if(g<<24>>24==-88)g=d[f+38>>0]|0;else g=g&255;switch((g&255)<<24>>24){case 106:{m=11;break b}case 77:case -94:case -92:{h=c[f+44>>2]|0;if(h|0){m=8;break b}if((g|0)==106){m=11;break b}else m=12;break}case 36:case -90:{f=c[f+12>>2]|0;break}default:m=12}c:do if((m|0)==12){m=0;if(!(j&256)){f=0;break a}g=c[f+12>>2]|0;if(g|0?c[g+4>>2]&256|0:0){f=g;break}i=c[f+16>>2]|0;h=c[f+20>>2]|0;if((j&2048|0)==0&(h|0)!=0?(k=c[h>>2]|0,(k|0)>0):0){g=0;while(1){f=c[h+4+(g*20|0)>>2]|0;g=g+1|0;if(c[f+4>>2]&256|0)break c;if((g|0)>=(k|0)){f=i;break}}}else f=i}while(0);if(!f){f=0;break a}}if((m|0)==8){f=b[f+32>>1]|0;if(f<<16>>16<=-1){f=0;break}f=Zi(l,a[l+78>>0]|0,c[(c[h+4>>2]|0)+(f<<16>>16<<4)+8>>2]|0,0)|0}else if((m|0)==11)f=_i(e,a[l+78>>0]|0,0,c[f+8>>2]|0)|0;if(f){if((c[f+12>>2]|0)==0?(_i(e,a[(c[e>>2]|0)+78>>0]|0,f,c[f>>2]|0)|0)==0:0){e=0;return e|0}}else f=0}else f=0;while(0);e=f;return e|0}function Zi(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!g){g=c[b+8>>2]|0;p=(g|0)==0;b=f&255;b=b+-1|0;b=g+(b*20|0)|0;b=p?0:b;return b|0}p=b+380|0;l=c[b+392>>2]|0;if(!l){j=b+384|0;i=b+388|0}else{j=a[g>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=g;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}i=(i>>>0)%((c[p>>2]|0)>>>0)|0;j=l+(i<<3)|0;i=l+(i<<3)+4|0}j=c[j>>2]|0;a:do if(!j)i=59292;else{n=d[208+(d[g>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=g;do{l=l+1|0;m=m+1|0;q=a[l>>0]|0;k=(d[208+(q&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!j){i=59292;break}}}while(0);i=c[i+8>>2]|0;if(!((h|0)!=0&(i|0)==0)){p=i;b=(p|0)==0;q=f&255;q=q+-1|0;q=p+(q*20|0)|0;q=b?0:q;return q|0}l=(Eu(g)|0)&1073741823;m=l+61|0;b:do if(!b){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;o=39;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){q=c[14978]|0;h=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&h>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i)return 0;j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0)return 0}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<m>>>0:0))){j=b+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=39;break b}j=b+296|0;i=c[j>>2]|0;if(!i){i=b+292|0;break}else{c[j>>2]=c[i>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=39;break b}}else i=b+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(b,m,0)|0;o=39}while(0);if((o|0)==39)if(!i)return 0;gw(i|0,0,m|0)|0;j=i+60|0;c[i>>2]=j;a[i+4>>0]=1;c[i+20>>2]=j;a[i+24>>0]=2;c[i+40>>2]=j;a[i+44>>0]=3;ew(j|0,g|0,l+1|0)|0;j=mi(p,j,i)|0;if(!j){p=i;b=(p|0)==0;q=f&255;q=q+-1|0;q=p+(q*20|0)|0;q=b?0:q;return q|0}i=b+81|0;if((a[i>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[i>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;i=b+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[b+236>>2]|0;if(i|0)c[i+12>>2]=7}if(c[b+480>>2]|0){Xd(b,j);return 0}q=j;if((c[b+304>>2]|0)>>>0<=q>>>0?(c[b+308>>2]|0)>>>0>q>>>0:0){q=b+300|0;c[j>>2]=c[q>>2];c[q>>2]=j;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);return 0}else{q=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);return 0}return 0}function _i(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;r=s;q=c[f>>2]|0;if(!h){h=Zi(q,g,i,0)|0;if(h|0){j=h;n=3}}else{j=h;n=3}if((n|0)==3?c[j+12>>2]|0:0){r=j;Ra=s;return r|0}k=g&255;l=q+248|0;a:do if(c[l>>2]|0){if(i|0){m=(Eu(i)|0)+1|0;b:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))n=16;else break a;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){j=q+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];j=q+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}j=q+296|0;h=c[j>>2]|0;if(!h){h=q+292|0;break}else{c[j>>2]=c[h>>2];j=q+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}}else h=q+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=16}while(0);if((n|0)==16)h=_d(q,m,0)|0;if(h|0){ew(h|0,i|0,m|0)|0;db[c[l>>2]&127](c[q+256>>2]|0,q,k,h);if(c[q+480>>2]|0){Xd(q,h);n=26;break}n=h;if((c[q+304>>2]|0)>>>0<=n>>>0?(c[q+308>>2]|0)>>>0>n>>>0:0){n=q+300|0;c[h>>2]=c[n>>2];c[n>>2]=h;n=26;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);n=26;break}else{n=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);n=26;break}}}}else n=26;while(0);c:do if((n|0)==26?(p=q+252|0,c[p>>2]|0):0){d:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))n=37;else break c;else{do if((e[q+276>>1]|0)>=40){h=q+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];m=q+284|0;c[m>>2]=(c[m>>2]|0)+1;break d}h=q+296|0;j=c[h>>2]|0;if(!j){h=q+292|0;break}else{c[h>>2]=c[j>>2];m=q+284|0;c[m>>2]=(c[m>>2]|0)+1;break d}}else h=q+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=37}while(0);if((n|0)==37)j=_d(q,40,0)|0;if(j|0){h=j;k=h+40|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(k|0));h=j+8|0;b[h>>1]=1;k=j+32|0;c[k>>2]=q;yc(j,i,-1,1,0)|0;l=b[h>>1]|0;if((l&514)==514?(a[j+10>>0]|0)==2:0){o=c[j+16>>2]|0;n=44}else n=42;if((n|0)==42?(l&1)==0:0){o=Gg(j,2)|0;n=44}if((n|0)==44?o|0:0)db[c[p>>2]&127](c[q+256>>2]|0,q,d[q+78>>0]|0,o);if(!((b[h>>1]&9216)==0?!(c[j+24>>2]|0):0))Cg(j);h=c[k>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}p=j;if((c[h+304>>2]|0)>>>0<=p>>>0?(c[h+308>>2]|0)>>>0>p>>>0:0){p=h+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}}while(0);g=Zi(q,g,i,0)|0;do if(g|0){if(c[g+12>>2]|0){r=g;Ra=s;return r|0}p=c[g>>2]|0;o=(p|0)==0;if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;e:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break e;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;h=(h|0)==0?0:h+40|0;if(!(c[h+12>>2]|0)){if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;f:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-n|0;if(!(t<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break f;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;h=(h|0)==0?0:h+20|0;if(!(c[h+12>>2]|0)){if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;g:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-n|0;if(!(t<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break g;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;if(!(c[h+12>>2]|0))break}};c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=0;t=g;Ra=s;return t|0}while(0);c[r>>2]=i;cd(f,38397,r);c[f+12>>2]=257;t=0;Ra=s;return t|0}\n\n// EMSCRIPTEN_END_FUNCS\nvar Va=[GK,jw,kw,lw,mw,nw,ow,pw,qw,rw,sw,tw,uw,vw,ww,xw,yw,zw,Aw,Bw,Cw,Dw,Ew,Fw,Gw,Hw,Iw,Jw,Kw,Lw,Mw,Nw,Ow,Pw,Qw,Rw,Sw,Tw,Uw,Vw,Ww,Xw,Yw,Zw,_w,$w,ax,bx,cx,dx,ex,fx,gx,hx,ix,jx,kx,lx,mx,nx,ox,px,qx,rx,sx,Dv,we,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK];var Wa=[HK,ux,vx,wx,xx,yx,zx,Ax,Bx,Cx,Dx,Ex,Fx,Gx,Hx,Ix,Jx,Kx,Lx,Mx,Nx,Ox,Px,Qx,Rx,Sx,Tx,Ux,Vx,Wx,Xx,Yx,Zx,_x,$x,ay,by,cy,dy,ey,fy,gy,hy,iy,jy,ky,ly,my,ny,oy,py,qy,ry,sy,ty,uy,vy,wy,xy,yy,zy,Ay,By,Cy,Dy,be,le,me,Nu,Bv,Ev,Be,Fe,Ze,Ki,Mi,Oi,Pi,ep,hp,ip,jp,lp,pp,Dq,Eq,Gq,Iq,Jq,Nq,Oq,Pq,Qq,Wq,Hp,Jp,Op,Qp,Sp,Tp,mq,oq,rq,tq,ks,ms,os,ps,Ds,Es,Gs,Is,Js,Ns,Os,Rs,rb,Re,HK,HK,HK,HK,HK,HK,HK,HK,HK,HK];var Xa=[IK,Fy,Gy,Hy,Iy,Jy,Ky,Ly,My,Ny,Oy,Py,Qy,Ry,Sy,Ty,Uy,Vy,Wy,Xy,Yy,Zy,_y,$y,az,bz,cz,dz,ez,fz,gz,hz,iz,jz,kz,lz,mz,nz,oz,pz,qz,rz,sz,tz,uz,vz,wz,xz,yz,zz,Az,Bz,Cz,Dz,Ez,Fz,Gz,Hz,Iz,Jz,Kz,Lz,Mz,Nz,Oz,Ob,Pb,Rb,Tb,Ub,ae,Je,Ke,fe,ge,he,ie,je,qe,Qu,Zu,Pu,Xu,yv,Kv,ve,fv,gv,Ou,Ce,De,Ee,Ge,He,Ie,bf,cf,Ji,Li,Ri,gp,Cq,Fq,Lq,Sq,Tq,Uq,Vq,Np,Pp,Vp,js,ls,rs,Cs,Fs,Ls,Ps,Qs,Ue,If,Kf,Yg,Zg,$k,Dk,Ek,Yj,Zj,vl,wl,Gl,Yk,Cm,Dm,Am,Vm,kk,lk,Jk,Hk,Mk,Nk,Ok,_k,xl,Sl,nm,fm,Bm,jo,ko,so,to,_p,$p,Zp,iq,hq,yt,zt,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK];var Ya=[JK,Qz,Rz,Sz,Tz,Uz,Vz,Wz,Xz,Yz,Zz,_z,$z,aA,bA,cA,dA,eA,fA,gA,hA,iA,jA,kA,lA,mA,nA,oA,pA,qA,rA,sA,tA,uA,vA,wA,xA,yA,zA,AA,BA,CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA,XA,YA,ZA,Kb,Nb,Qb,Sb,ee,ke,ue,Iu,$u,_u,Cv,Wu,af,Qi,np,qp,Kq,Gp,Up,lq,qq,qs,Ks,Ch,Dh,Eh,Dd,Yr,Xr,as,bs,gs,es,fs,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK];var Za=[KK,$A,aB,bB,cB,dB,eB,fB,gB,hB,iB,jB,kB,lB,mB,nB,oB,pB,qB,rB,sB,tB,uB,vB,wB,xB,yB,zB,AB,BB,CB,DB,EB,FB,GB,HB,IB,JB,KB,LB,MB,NB,OB,PB,QB,RB,SB,TB,UB,VB,WB,XB,YB,ZB,_B,$B,aC,bC,cC,dC,eC,fC,gC,hC,iC,Lb,Mb,oe,se,Mq,Ip,nq,sq,Ms,qf,pf,Ld,fh,ki,aq,bq,kd,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK];var _a=[LK,kC,lC,mC,nC,oC,pC,qC,rC,sC,tC,uC,vC,wC,xC,yC,zC,AC,BC,CC,DC,EC,FC,GC,HC,IC,JC,KC,LC,MC,NC,OC,PC,QC,RC,SC,TC,UC,VC,WC,XC,YC,ZC,_C,$C,aD,bD,cD,dD,eD,fD,gD,hD,iD,jD,kD,lD,mD,nD,oD,pD,qD,rD,sD,tD,Jb,ce,de,ne,re,_e,$e,Ni,Hq,Rq,Rp,ns,Hs,Hl,Dp,gt,ht,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK];var $a=[MK,vD,wD,xD,yD,zD,AD,BD,CD,DD,ED,FD,GD,HD,ID,JD,KD,LD,MD,ND,OD,PD,QD,RD,SD,TD,UD,VD,WD,XD,YD,ZD,_D,$D,aE,bE,cE,dE,eE,fE,gE,hE,iE,jE,kE,lE,mE,nE,oE,pE,qE,rE,sE,tE,uE,vE,wE,xE,yE,zE,AE,BE,CE,DE,EE,Lv,Ii,Aq,Bq,Kp,Mp,pq,uq,is,As,Bs,Xh,Yh,Wh,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK];var ab=[NK,GE,HE,IE,JE,KE,LE,ME,NE,OE,PE,QE,RE,SE,TE,UE,VE,WE,XE,YE,ZE,_E,$E,aF,bF,cF,dF,eF,fF,gF,hF,iF,jF,kF,lF,mF,nF,oF,pF,qF,rF,sF,tF,uF,vF,wF,xF,yF,zF,AF,BF,CF,DF,EF,FF,GF,HF,IF,JF,KF,LF,MF,NF,OF,PF,pe,wn,xn,Wn,Yn,Zn,$n,co,eo,vo,xo,zo,Bo,Eo,Ho,Ko,Lo,Oo,Po,Ro,fp,kp,mp,up,vp,qb,Fp,Qe,ih,vi,dh,ln,Qg,cs,mt,nt,pt,qt,rt,st,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK];var bb=[OK,RF,SF,TF,UF,VF,WF,XF,YF,ZF,_F,$F,aG,bG,cG,dG,eG,fG,gG,hG,iG,jG,kG,lG,mG,nG,oG,pG,qG,rG,sG,tG,uG,vG,wG,xG,yG,zG,AG,BG,CG,DG,EG,FG,GG,HG,IG,JG,KG,LG,MG,NG,OG,PG,QG,RG,SG,TG,UG,VG,WG,XG,YG,ZG,_G,op,tp,Em,Pk,Zk,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK];var cb=[PK,aH,bH,cH,dH,eH,fH,gH,hH,iH,jH,kH,lH,mH,nH,oH,pH,qH,rH,sH,tH,uH,vH,wH,xH,yH,zH,AH,BH,CH,DH,EH,FH,GH,HH,IH,JH,KH,LH,MH,NH,OH,PH,QH,RH,SH,TH,UH,VH,WH,XH,YH,ZH,_H,$H,aI,bI,cI,dI,eI,fI,gI,hI,iI,jI,bn,fn,kn,mn,nn,qn,rn,sn,tn,un,vn,yn,zn,An,Bn,Cn,Dn,En,Fn,Gn,Hn,In,Jn,Kn,Ln,Mn,Nn,On,Pn,Qn,Rn,Sn,Tn,Un,Vn,Xn,_n,ao,bo,fo,$m,go,ho,io,uo,xm,wo,yo,Ao,Co,Do,Fo,Go,Io,Jo,Mo,No,Qo,So,To,Uo,Vo,Wo,Xo,Yo,Zo,rp,Tr,Ur,Vr,Wr,At,Bt,Ct,Dt,Et,Ft,Gt,Ht,It,Jt,Kt,Lt,Mt,Nt,Ot,Pt,Qt,Rt,St,Tt,Ut,Vt,Wt,Xt,Yt,Zt,_t,$t,au,bu,cu,du,eu,fu,gu,hu,iu,ju,Kd,zq,ss,ts,us,Mf,Jf,Lf,lt,ot,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK];var db=[QK,lI,mI,nI,oI,pI,qI,rI,sI,tI,uI,vI,wI,xI,yI,zI,AI,BI,CI,DI,EI,FI,GI,HI,II,JI,KI,LI,MI,NI,OI,PI,QI,RI,SI,TI,UI,VI,WI,XI,YI,ZI,_I,$I,aJ,bJ,cJ,dJ,eJ,fJ,gJ,hJ,iJ,jJ,kJ,lJ,mJ,nJ,oJ,pJ,qJ,rJ,sJ,tJ,uJ,sp,Tj,tk,xt,ut,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK];var eb=[RK,wJ,xJ,yJ,zJ,AJ,BJ,CJ,DJ,EJ,FJ,GJ,HJ,IJ,JJ,KJ,LJ,MJ,NJ,OJ,PJ,QJ,RJ,SJ,TJ,UJ,VJ,WJ,XJ,YJ,ZJ,_J,$J,aK,bK,cK,dK,eK,fK,gK,hK,iK,jK,kK,lK,mK,nK,oK,pK,qK,rK,sK,tK,uK,vK,wK,xK,yK,zK,AK,BK,CK,DK,EK,FK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK];return{_RegisterExtensionFunctions:kt,___divdi3:Wv,___emscripten_environ_constructor:Nv,___errno_location:uu,___muldi3:Yv,___remdi3:Zv,___udivdi3:_v,___uremdi3:$v,__get_daylight:Pv,__get_environ:Rv,__get_timezone:Qv,__get_tzname:Ov,_bitshift64Ashr:aw,_bitshift64Lshr:bw,_bitshift64Shl:cw,_emscripten_replace_memory:Ua,_free:mu,_i64Add:Sv,_i64Subtract:Tv,_llvm_bswap_i32:dw,_malloc:lu,_memalign:ru,_memcpy:ew,_memmove:fw,_memset:gw,_sbrk:hw,_sqlite3_bind_blob:Sc,_sqlite3_bind_double:Uc,_sqlite3_bind_int:Wc,_sqlite3_bind_parameter_index:Zc,_sqlite3_bind_text:Xc,_sqlite3_changes:Ad,_sqlite3_clear_bindings:lc,_sqlite3_close_v2:Cd,_sqlite3_column_blob:Kc,_sqlite3_column_bytes:Lc,_sqlite3_column_double:Mc,_sqlite3_column_name:Rc,_sqlite3_column_text:Pc,_sqlite3_column_type:Qc,_sqlite3_create_function_v2:Gd,_sqlite3_data_count:Jc,_sqlite3_errmsg:pd,_sqlite3_exec:nd,_sqlite3_finalize:gc,_sqlite3_free:qb,_sqlite3_open:Od,_sqlite3_prepare_v2:od,_sqlite3_reset:jc,_sqlite3_result_blob:vc,_sqlite3_result_double:wc,_sqlite3_result_error:xc,_sqlite3_result_int:zc,_sqlite3_result_int64:Ac,_sqlite3_result_null:Bc,_sqlite3_result_text:Cc,_sqlite3_step:Gc,_sqlite3_value_blob:mc,_sqlite3_value_bytes:oc,_sqlite3_value_double:pc,_sqlite3_value_int:qc,_sqlite3_value_text:nc,_sqlite3_value_type:sc,dynCall_i:iw,dynCall_ii:tx,dynCall_iii:Ey,dynCall_iiii:Pz,dynCall_iiiii:_A,dynCall_iiiiii:jC,dynCall_iiiiiii:uD,dynCall_vi:FE,dynCall_vii:QF,dynCall_viii:$G,dynCall_viiii:kI,dynCall_viiiiii:vJ,establishStackSpace:ib,stackAlloc:fb,stackRestore:hb,stackSave:gb}})\n\n\n// EMSCRIPTEN_END_ASM\n(Zc,bd,buffer);f._RegisterExtensionFunctions=Z._RegisterExtensionFunctions;f.___divdi3=Z.___divdi3;var lb=f.___emscripten_environ_constructor=Z.___emscripten_environ_constructor;f.___errno_location=Z.___errno_location;f.___muldi3=Z.___muldi3;f.___remdi3=Z.___remdi3;f.___udivdi3=Z.___udivdi3;f.___uremdi3=Z.___uremdi3;var Tc=f.__get_daylight=Z.__get_daylight;f.__get_environ=Z.__get_environ;\nvar Sc=f.__get_timezone=Z.__get_timezone,Uc=f.__get_tzname=Z.__get_tzname;f._bitshift64Ashr=Z._bitshift64Ashr;f._bitshift64Lshr=Z._bitshift64Lshr;f._bitshift64Shl=Z._bitshift64Shl;f._emscripten_replace_memory=Z._emscripten_replace_memory;var fa=f._free=Z._free;f._i64Add=Z._i64Add;f._i64Subtract=Z._i64Subtract;f._llvm_bswap_i32=Z._llvm_bswap_i32;var Wa=f._malloc=Z._malloc,$c=f._memalign=Z._memalign;f._memcpy=Z._memcpy;f._memmove=Z._memmove;var ad=f._memset=Z._memset;f._sbrk=Z._sbrk;\nf._sqlite3_bind_blob=Z._sqlite3_bind_blob;f._sqlite3_bind_double=Z._sqlite3_bind_double;f._sqlite3_bind_int=Z._sqlite3_bind_int;f._sqlite3_bind_parameter_index=Z._sqlite3_bind_parameter_index;f._sqlite3_bind_text=Z._sqlite3_bind_text;f._sqlite3_changes=Z._sqlite3_changes;f._sqlite3_clear_bindings=Z._sqlite3_clear_bindings;f._sqlite3_close_v2=Z._sqlite3_close_v2;f._sqlite3_column_blob=Z._sqlite3_column_blob;f._sqlite3_column_bytes=Z._sqlite3_column_bytes;f._sqlite3_column_double=Z._sqlite3_column_double;\nf._sqlite3_column_name=Z._sqlite3_column_name;f._sqlite3_column_text=Z._sqlite3_column_text;f._sqlite3_column_type=Z._sqlite3_column_type;f._sqlite3_create_function_v2=Z._sqlite3_create_function_v2;f._sqlite3_data_count=Z._sqlite3_data_count;f._sqlite3_errmsg=Z._sqlite3_errmsg;f._sqlite3_exec=Z._sqlite3_exec;f._sqlite3_finalize=Z._sqlite3_finalize;f._sqlite3_free=Z._sqlite3_free;f._sqlite3_open=Z._sqlite3_open;f._sqlite3_prepare_v2=Z._sqlite3_prepare_v2;f._sqlite3_reset=Z._sqlite3_reset;\nf._sqlite3_result_blob=Z._sqlite3_result_blob;f._sqlite3_result_double=Z._sqlite3_result_double;f._sqlite3_result_error=Z._sqlite3_result_error;f._sqlite3_result_int=Z._sqlite3_result_int;f._sqlite3_result_int64=Z._sqlite3_result_int64;f._sqlite3_result_null=Z._sqlite3_result_null;f._sqlite3_result_text=Z._sqlite3_result_text;f._sqlite3_step=Z._sqlite3_step;f._sqlite3_value_blob=Z._sqlite3_value_blob;f._sqlite3_value_bytes=Z._sqlite3_value_bytes;f._sqlite3_value_double=Z._sqlite3_value_double;\nf._sqlite3_value_int=Z._sqlite3_value_int;f._sqlite3_value_text=Z._sqlite3_value_text;f._sqlite3_value_type=Z._sqlite3_value_type;f.establishStackSpace=Z.establishStackSpace;var h=f.stackAlloc=Z.stackAlloc,qa=f.stackRestore=Z.stackRestore,na=f.stackSave=Z.stackSave;f.dynCall_i=Z.dynCall_i;f.dynCall_ii=Z.dynCall_ii;f.dynCall_iii=Z.dynCall_iii;f.dynCall_iiii=Z.dynCall_iiii;f.dynCall_iiiii=Z.dynCall_iiiii;f.dynCall_iiiiii=Z.dynCall_iiiiii;f.dynCall_iiiiiii=Z.dynCall_iiiiiii;f.dynCall_vi=Z.dynCall_vi;\nf.dynCall_vii=Z.dynCall_vii;f.dynCall_viii=Z.dynCall_viii;f.dynCall_viiii=Z.dynCall_viiii;f.dynCall_viiiiii=Z.dynCall_viiiiii;f.asm=Z;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return\"number\"===a});return\"string\"!==b&&e&&!d?Qa(a):function(){return Ra(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h;\nif(H){if(String.prototype.startsWith?!H.startsWith(kb):0!==H.indexOf(kb)){var cd=H;H=f.locateFile?f.locateFile(cd,z):z+cd}if(y||za){var dd=f.readBinary(H);E.set(dd,8)}else{G++;f.monitorRunDependencies&&f.monitorRunDependencies(G);var ed=function(a){a.byteLength&&(a=new Uint8Array(a));E.set(a,8);f.memoryInitializerRequest&&delete f.memoryInitializerRequest.response;G--;f.monitorRunDependencies&&f.monitorRunDependencies(G);0==G&&(null!==ib&&(clearInterval(ib),ib=null),jb&&(a=jb,jb=null,a()))},fd=function(){f.readAsync(H,\ned,function(){throw\"could not load memory initializer \"+H;})},gd=B(H);if(gd)ed(gd.buffer);else if(f.memoryInitializerRequest){var hd=function(){var a=f.memoryInitializerRequest,b=a.response;if(200!==a.status&&0!==a.status)if(b=B(f.memoryInitializerRequestURL))b=b.buffer;else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+a.status+\", retrying \"+H);fd();return}ed(b)};f.memoryInitializerRequest.response?setTimeout(hd,0):f.memoryInitializerRequest.addEventListener(\"load\",\nhd)}else fd()}}function id(a){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+a+\")\";this.status=a}id.prototype=Error();id.prototype.constructor=id;jb=function jd(){f.calledRun||kd();f.calledRun||(jb=jd)};\nfunction kd(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Na)){gb||(gb=!0,f.noFSInit||Ic||(Ic=!0,Hc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Jc(\"stdin\",f.stdin):bc(\"/dev/tty\",\"/dev/stdin\"),f.stdout?Jc(\"stdout\",null,f.stdout):bc(\"/dev/tty\",\"/dev/stdout\"),f.stderr?Jc(\"stderr\",null,f.stderr):bc(\"/dev/tty1\",\"/dev/stderr\"),p(\"/dev/stdin\",\"r\"),p(\"/dev/stdout\",\"w\"),p(\"/dev/stderr\",\"w\")),bb(db));Lb=!1;bb(eb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for(\"function\"==\ntypeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();fb.unshift(a)}bb(fb)}}if(!(0<G)){if(f.preRun)for(\"function\"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)hb();bb(cb);0<G||f.calledRun||(f.setStatus?(f.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){f.setStatus(\"\")},1);a()},1)):a())}}f.run=kd;\nfunction C(a){if(f.onAbort)f.onAbort(a);void 0!==a?(Da(a),Ea(a),a=JSON.stringify(a)):a=\"\";Na=!0;throw\"abort(\"+a+\"). Build with -s ASSERTIONS=1 for more info.\";}f.abort=C;if(f.preInit)for(\"function\"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();f.noExitRuntime=!0;kd();\n\n\n\n        // The shell-pre.js and emcc-generated code goes above\n        return Module;\n    }); // The end of the promise being returned\n\n  return initSqlJsPromise;\n} // The end of our initSqlJs function\n\n// This bit below is copied almost exactly from what you get when you use the MODULARIZE=1 flag with emcc\n// However, we don't want to use the emcc modularization. See shell-pre.js\nif (typeof exports === 'object' && typeof module === 'object'){\n    module.exports = initSqlJs;\n    // This will allow the module to be used in ES6 or CommonJS\n    module.exports.default = initSqlJs;\n}\nelse if (typeof define === 'function' && define['amd']) {\n    define([], function() { return initSqlJs; });\n}\nelse if (typeof exports === 'object'){\n    exports[\"Module\"] = initSqlJs;\n}\n    \n\n}).call(this,require('_process'),require(\"buffer\").Buffer,\"/node_modules/sql.js/dist\")\n},{\"_process\":284,\"buffer\":182,\"crypto\":192,\"fs\":177,\"path\":276}],328:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n\n},{\"events\":221,\"inherits\":262,\"readable-stream/duplex.js\":301,\"readable-stream/passthrough.js\":311,\"readable-stream/readable.js\":312,\"readable-stream/transform.js\":313,\"readable-stream/writable.js\":314}],329:[function(require,module,exports){\n(function (global){\nvar ClientRequest = require('./lib/request')\nvar response = require('./lib/response')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.ClientRequest = ClientRequest\nhttp.IncomingMessage = response.IncomingMessage\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.globalAgent = new http.Agent()\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./lib/request\":331,\"./lib/response\":332,\"builtin-status-codes\":183,\"url\":338,\"xtend\":362}],330:[function(require,module,exports){\n(function (global){\nexports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.writableStream = isFunction(global.WritableStream)\n\nexports.abortController = isFunction(global.AbortController)\n\nexports.blobConstructor = false\ntry {\n\tnew Blob([new ArrayBuffer(1)])\n\texports.blobConstructor = true\n} catch (e) {}\n\n// The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\nvar xhr\nfunction getXHR () {\n\t// Cache the xhr value\n\tif (xhr !== undefined) return xhr\n\n\tif (global.XMLHttpRequest) {\n\t\txhr = new global.XMLHttpRequest()\n\t\t// If XDomainRequest is available (ie only, where xhr might not work\n\t\t// cross domain), use the page location. Otherwise use example.com\n\t\t// Note: this doesn't actually make an http request.\n\t\ttry {\n\t\t\txhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')\n\t\t} catch(e) {\n\t\t\txhr = null\n\t\t}\n\t} else {\n\t\t// Service workers don't have XHR\n\t\txhr = null\n\t}\n\treturn xhr\n}\n\nfunction checkTypeSupport (type) {\n\tvar xhr = getXHR()\n\tif (!xhr) return false\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)\n\n// If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\nexports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))\n\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&\n\tcheckTypeSupport('moz-chunked-arraybuffer')\n\n// If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)\n\nexports.vbArray = isFunction(global.VBArray)\n\nfunction isFunction (value) {\n\treturn typeof value === 'function'\n}\n\nxhr = null // Help gc\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],331:[function(require,module,exports){\n(function (process,global,Buffer){\nvar capability = require('./capability')\nvar inherits = require('inherits')\nvar response = require('./response')\nvar stream = require('readable-stream')\nvar toArrayBuffer = require('to-arraybuffer')\n\nvar IncomingMessage = response.IncomingMessage\nvar rStates = response.readyStates\n\nfunction decideMode (preferBinary, useFetch) {\n\tif (capability.fetch && useFetch) {\n\t\treturn 'fetch'\n\t} else if (capability.mozchunkedarraybuffer) {\n\t\treturn 'moz-chunked-arraybuffer'\n\t} else if (capability.msstream) {\n\t\treturn 'ms-stream'\n\t} else if (capability.arraybuffer && preferBinary) {\n\t\treturn 'arraybuffer'\n\t} else if (capability.vbArray && preferBinary) {\n\t\treturn 'text:vbarray'\n\t} else {\n\t\treturn 'text'\n\t}\n}\n\nvar ClientRequest = module.exports = function (opts) {\n\tvar self = this\n\tstream.Writable.call(self)\n\n\tself._opts = opts\n\tself._body = []\n\tself._headers = {}\n\tif (opts.auth)\n\t\tself.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))\n\tObject.keys(opts.headers).forEach(function (name) {\n\t\tself.setHeader(name, opts.headers[name])\n\t})\n\n\tvar preferBinary\n\tvar useFetch = true\n\tif (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {\n\t\t// If the use of XHR should be preferred. Not typically needed.\n\t\tuseFetch = false\n\t\tpreferBinary = true\n\t} else if (opts.mode === 'prefer-streaming') {\n\t\t// If streaming is a high priority but binary compatibility and\n\t\t// the accuracy of the 'content-type' header aren't\n\t\tpreferBinary = false\n\t} else if (opts.mode === 'allow-wrong-content-type') {\n\t\t// If streaming is more important than preserving the 'content-type' header\n\t\tpreferBinary = !capability.overrideMimeType\n\t} else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n\t\t// Use binary if text streaming may corrupt data or the content-type header, or for speed\n\t\tpreferBinary = true\n\t} else {\n\t\tthrow new Error('Invalid value for opts.mode')\n\t}\n\tself._mode = decideMode(preferBinary, useFetch)\n\tself._fetchTimer = null\n\n\tself.on('finish', function () {\n\t\tself._onFinish()\n\t})\n}\n\ninherits(ClientRequest, stream.Writable)\n\nClientRequest.prototype.setHeader = function (name, value) {\n\tvar self = this\n\tvar lowerName = name.toLowerCase()\n\t// This check is not necessary, but it prevents warnings from browsers about setting unsafe\n\t// headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n\t// http-browserify did it, so I will too.\n\tif (unsafeHeaders.indexOf(lowerName) !== -1)\n\t\treturn\n\n\tself._headers[lowerName] = {\n\t\tname: name,\n\t\tvalue: value\n\t}\n}\n\nClientRequest.prototype.getHeader = function (name) {\n\tvar header = this._headers[name.toLowerCase()]\n\tif (header)\n\t\treturn header.value\n\treturn null\n}\n\nClientRequest.prototype.removeHeader = function (name) {\n\tvar self = this\n\tdelete self._headers[name.toLowerCase()]\n}\n\nClientRequest.prototype._onFinish = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\tvar opts = self._opts\n\n\tvar headersObj = self._headers\n\tvar body = null\n\tif (opts.method !== 'GET' && opts.method !== 'HEAD') {\n\t\tif (capability.arraybuffer) {\n\t\t\tbody = toArrayBuffer(Buffer.concat(self._body))\n\t\t} else if (capability.blobConstructor) {\n\t\t\tbody = new global.Blob(self._body.map(function (buffer) {\n\t\t\t\treturn toArrayBuffer(buffer)\n\t\t\t}), {\n\t\t\t\ttype: (headersObj['content-type'] || {}).value || ''\n\t\t\t})\n\t\t} else {\n\t\t\t// get utf8 string\n\t\t\tbody = Buffer.concat(self._body).toString()\n\t\t}\n\t}\n\n\t// create flattened list of headers\n\tvar headersList = []\n\tObject.keys(headersObj).forEach(function (keyName) {\n\t\tvar name = headersObj[keyName].name\n\t\tvar value = headersObj[keyName].value\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(function (v) {\n\t\t\t\theadersList.push([name, v])\n\t\t\t})\n\t\t} else {\n\t\t\theadersList.push([name, value])\n\t\t}\n\t})\n\n\tif (self._mode === 'fetch') {\n\t\tvar signal = null\n\t\tvar fetchTimer = null\n\t\tif (capability.abortController) {\n\t\t\tvar controller = new AbortController()\n\t\t\tsignal = controller.signal\n\t\t\tself._fetchAbortController = controller\n\n\t\t\tif ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n\t\t\t\tself._fetchTimer = global.setTimeout(function () {\n\t\t\t\t\tself.emit('requestTimeout')\n\t\t\t\t\tif (self._fetchAbortController)\n\t\t\t\t\t\tself._fetchAbortController.abort()\n\t\t\t\t}, opts.requestTimeout)\n\t\t\t}\n\t\t}\n\n\t\tglobal.fetch(self._opts.url, {\n\t\t\tmethod: self._opts.method,\n\t\t\theaders: headersList,\n\t\t\tbody: body || undefined,\n\t\t\tmode: 'cors',\n\t\t\tcredentials: opts.withCredentials ? 'include' : 'same-origin',\n\t\t\tsignal: signal\n\t\t}).then(function (response) {\n\t\t\tself._fetchResponse = response\n\t\t\tself._connect()\n\t\t}, function (reason) {\n\t\t\tglobal.clearTimeout(self._fetchTimer)\n\t\t\tif (!self._destroyed)\n\t\t\t\tself.emit('error', reason)\n\t\t})\n\t} else {\n\t\tvar xhr = self._xhr = new global.XMLHttpRequest()\n\t\ttry {\n\t\t\txhr.open(self._opts.method, self._opts.url, true)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Can't set responseType on really old browsers\n\t\tif ('responseType' in xhr)\n\t\t\txhr.responseType = self._mode.split(':')[0]\n\n\t\tif ('withCredentials' in xhr)\n\t\t\txhr.withCredentials = !!opts.withCredentials\n\n\t\tif (self._mode === 'text' && 'overrideMimeType' in xhr)\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined')\n\n\t\tif ('requestTimeout' in opts) {\n\t\t\txhr.timeout = opts.requestTimeout\n\t\t\txhr.ontimeout = function () {\n\t\t\t\tself.emit('requestTimeout')\n\t\t\t}\n\t\t}\n\n\t\theadersList.forEach(function (header) {\n\t\t\txhr.setRequestHeader(header[0], header[1])\n\t\t})\n\n\t\tself._response = null\n\t\txhr.onreadystatechange = function () {\n\t\t\tswitch (xhr.readyState) {\n\t\t\t\tcase rStates.LOADING:\n\t\t\t\tcase rStates.DONE:\n\t\t\t\t\tself._onXHRProgress()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Necessary for streaming in Firefox, since xhr.response is ONLY defined\n\t\t// in onprogress, not in onreadystatechange with xhr.readyState = 3\n\t\tif (self._mode === 'moz-chunked-arraybuffer') {\n\t\t\txhr.onprogress = function () {\n\t\t\t\tself._onXHRProgress()\n\t\t\t}\n\t\t}\n\n\t\txhr.onerror = function () {\n\t\t\tif (self._destroyed)\n\t\t\t\treturn\n\t\t\tself.emit('error', new Error('XHR error'))\n\t\t}\n\n\t\ttry {\n\t\t\txhr.send(body)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\nfunction statusValid (xhr) {\n\ttry {\n\t\tvar status = xhr.status\n\t\treturn (status !== null && status !== 0)\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tif (!statusValid(self._xhr) || self._destroyed)\n\t\treturn\n\n\tif (!self._response)\n\t\tself._connect()\n\n\tself._response._onXHRProgress()\n}\n\nClientRequest.prototype._connect = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\n\tself._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer)\n\tself._response.on('error', function(err) {\n\t\tself.emit('error', err)\n\t})\n\n\tself.emit('response', self._response)\n}\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n\tvar self = this\n\n\tself._body.push(chunk)\n\tcb()\n}\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {\n\tvar self = this\n\tself._destroyed = true\n\tglobal.clearTimeout(self._fetchTimer)\n\tif (self._response)\n\t\tself._response._destroyed = true\n\tif (self._xhr)\n\t\tself._xhr.abort()\n\telse if (self._fetchAbortController)\n\t\tself._fetchAbortController.abort()\n}\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n\tvar self = this\n\tif (typeof data === 'function') {\n\t\tcb = data\n\t\tdata = undefined\n\t}\n\n\tstream.Writable.prototype.end.call(self, data, encoding, cb)\n}\n\nClientRequest.prototype.flushHeaders = function () {}\nClientRequest.prototype.setTimeout = function () {}\nClientRequest.prototype.setNoDelay = function () {}\nClientRequest.prototype.setSocketKeepAlive = function () {}\n\n// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\nvar unsafeHeaders = [\n\t'accept-charset',\n\t'accept-encoding',\n\t'access-control-request-headers',\n\t'access-control-request-method',\n\t'connection',\n\t'content-length',\n\t'cookie',\n\t'cookie2',\n\t'date',\n\t'dnt',\n\t'expect',\n\t'host',\n\t'keep-alive',\n\t'origin',\n\t'referer',\n\t'te',\n\t'trailer',\n\t'transfer-encoding',\n\t'upgrade',\n\t'via'\n]\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {},require(\"buffer\").Buffer)\n},{\"./capability\":330,\"./response\":332,\"_process\":284,\"buffer\":182,\"inherits\":262,\"readable-stream\":312,\"to-arraybuffer\":336}],332:[function(require,module,exports){\n(function (process,global,Buffer){\nvar capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t\n\t\tresponse.headers.forEach(function (header, key){\n\t\t\tself.headers[key.toLowerCase()] = header\n\t\t\tself.rawHeaders.push(key, header)\n\t\t})\n\n\t\tif (capability.writableStream) {\n\t\t\tvar writable = new WritableStream({\n\t\t\t\twrite: function (chunk) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tif (self._destroyed) {\n\t\t\t\t\t\t\treject()\n\t\t\t\t\t\t} else if(self.push(new Buffer(chunk))) {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._resumeFetch = resolve\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.push(null)\n\t\t\t\t},\n\t\t\t\tabort: function (err) {\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tresponse.body.pipeTo(writable).catch(function (err) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t} catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\t\t}\n\t\t// fallback for when writableStream or pipeTo aren't available\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tif (result.done) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(new Buffer(result.value))\n\t\t\t\tread()\n\t\t\t}).catch(function (err) {\n\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\tif (!self._destroyed)\n\t\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t}\n\t\tread()\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {\n\tvar self = this\n\n\tvar resolve = self._resumeFetch\n\tif (resolve) {\n\t\tself._resumeFetch = null\n\t\tresolve()\n\t}\n}\n\nIncomingMessage.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text:vbarray': // For IE9\n\t\t\tif (xhr.readyState !== rStates.DONE)\n\t\t\t\tbreak\n\t\t\ttry {\n\t\t\t\t// This fails in IE8\n\t\t\t\tresponse = new global.VBArray(xhr.responseBody).toArray()\n\t\t\t} catch (e) {}\n\t\t\tif (response !== null) {\n\t\t\t\tself.push(new Buffer(response))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Falls through in IE8\t\n\t\tcase 'text':\n\t\t\ttry { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n\t\t\t\tresponse = xhr.responseText\n\t\t\t} catch (e) {\n\t\t\t\tself._mode = 'text:vbarray'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = new Buffer(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE || !xhr.response)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tself.push(null)\n\t}\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {},require(\"buffer\").Buffer)\n},{\"./capability\":330,\"_process\":284,\"buffer\":182,\"inherits\":262,\"readable-stream\":312}],333:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n},{\"safe-buffer\":334}],334:[function(require,module,exports){\narguments[4][178][0].apply(exports,arguments)\n},{\"buffer\":182,\"dup\":178}],335:[function(require,module,exports){\n(function (setImmediate,clearImmediate){\nvar nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n  var id = nextImmediateId++;\n  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n  immediateIds[id] = true;\n\n  nextTick(function onNextTick() {\n    if (immediateIds[id]) {\n      // fn.call() is faster so we optimize for the common use-case\n      // @see http://jsperf.com/call-apply-segu\n      if (args) {\n        fn.apply(null, args);\n      } else {\n        fn.call(null);\n      }\n      // Prevent ids from leaking\n      exports.clearImmediate(id);\n    }\n  });\n\n  return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n  delete immediateIds[id];\n};\n}).call(this,require(\"timers\").setImmediate,require(\"timers\").clearImmediate)\n},{\"process/browser.js\":284,\"timers\":335}],336:[function(require,module,exports){\nvar Buffer = require('buffer').Buffer\n\nmodule.exports = function (buf) {\n\t// If the buffer is backed by a Uint8Array, a faster version will work\n\tif (buf instanceof Uint8Array) {\n\t\t// If the buffer isn't a subarray, return the underlying ArrayBuffer\n\t\tif (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {\n\t\t\treturn buf.buffer\n\t\t} else if (typeof buf.buffer.slice === 'function') {\n\t\t\t// Otherwise we need to get a proper copy\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)\n\t\t}\n\t}\n\n\tif (Buffer.isBuffer(buf)) {\n\t\t// This is the slow version that will work with any Buffer\n\t\t// implementation (even in old browsers)\n\t\tvar arrayCopy = new Uint8Array(buf.length)\n\t\tvar len = buf.length\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tarrayCopy[i] = buf[i]\n\t\t}\n\t\treturn arrayCopy.buffer\n\t} else {\n\t\tthrow new Error('Argument must be a Buffer')\n\t}\n}\n\n},{\"buffer\":182}],337:[function(require,module,exports){\nvar undefined = (void 0); // Paranoia\n\n// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to\n// create, and consume so much memory, that the browser appears frozen.\nvar MAX_ARRAY_LENGTH = 1e5;\n\n// Approximations of internal ECMAScript conversion functions\nvar ECMAScript = (function() {\n  // Stash a copy in case other scripts modify these\n  var opts = Object.prototype.toString,\n      ophop = Object.prototype.hasOwnProperty;\n\n  return {\n    // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues:\n    Class: function(v) { return opts.call(v).replace(/^\\[object *|\\]$/g, ''); },\n    HasProperty: function(o, p) { return p in o; },\n    HasOwnProperty: function(o, p) { return ophop.call(o, p); },\n    IsCallable: function(o) { return typeof o === 'function'; },\n    ToInt32: function(v) { return v >> 0; },\n    ToUint32: function(v) { return v >>> 0; }\n  };\n}());\n\n// Snapshot intrinsics\nvar LN2 = Math.LN2,\n    abs = Math.abs,\n    floor = Math.floor,\n    log = Math.log,\n    min = Math.min,\n    pow = Math.pow,\n    round = Math.round;\n\n// ES5: lock down object properties\nfunction configureProperties(obj) {\n  if (getOwnPropNames && defineProp) {\n    var props = getOwnPropNames(obj), i;\n    for (i = 0; i < props.length; i += 1) {\n      defineProp(obj, props[i], {\n        value: obj[props[i]],\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n}\n\n// emulate ES5 getter/setter API using legacy APIs\n// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx\n// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but\n// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless)\nvar defineProp\nif (Object.defineProperty && (function() {\n      try {\n        Object.defineProperty({}, 'x', {});\n        return true;\n      } catch (e) {\n        return false;\n      }\n    })()) {\n  defineProp = Object.defineProperty;\n} else {\n  defineProp = function(o, p, desc) {\n    if (!o === Object(o)) throw new TypeError(\"Object.defineProperty called on non-object\");\n    if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); }\n    if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); }\n    if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; }\n    return o;\n  };\n}\n\nvar getOwnPropNames = Object.getOwnPropertyNames || function (o) {\n  if (o !== Object(o)) throw new TypeError(\"Object.getOwnPropertyNames called on non-object\");\n  var props = [], p;\n  for (p in o) {\n    if (ECMAScript.HasOwnProperty(o, p)) {\n      props.push(p);\n    }\n  }\n  return props;\n};\n\n// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value)\n// for index in 0 ... obj.length\nfunction makeArrayAccessors(obj) {\n  if (!defineProp) { return; }\n\n  if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError(\"Array too large for polyfill\");\n\n  function makeArrayAccessor(index) {\n    defineProp(obj, index, {\n      'get': function() { return obj._getter(index); },\n      'set': function(v) { obj._setter(index, v); },\n      enumerable: true,\n      configurable: false\n    });\n  }\n\n  var i;\n  for (i = 0; i < obj.length; i += 1) {\n    makeArrayAccessor(i);\n  }\n}\n\n// Internal conversion functions:\n//    pack<Type>()   - take a number (interpreted as Type), output a byte array\n//    unpack<Type>() - take a byte array, output a Type-like number\n\nfunction as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; }\nfunction as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; }\n\nfunction packI8(n) { return [n & 0xff]; }\nfunction unpackI8(bytes) { return as_signed(bytes[0], 8); }\n\nfunction packU8(n) { return [n & 0xff]; }\nfunction unpackU8(bytes) { return as_unsigned(bytes[0], 8); }\n\nfunction packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; }\n\nfunction packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; }\nfunction unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); }\n\nfunction packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; }\nfunction unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); }\n\nfunction packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }\nfunction unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }\n\nfunction packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }\nfunction unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }\n\nfunction packIEEE754(v, ebits, fbits) {\n\n  var bias = (1 << (ebits - 1)) - 1,\n      s, e, f, ln,\n      i, bits, str, bytes;\n\n  function roundToEven(n) {\n    var w = floor(n), f = n - w;\n    if (f < 0.5)\n      return w;\n    if (f > 0.5)\n      return w + 1;\n    return w % 2 ? w + 1 : w;\n  }\n\n  // Compute sign, exponent, fraction\n  if (v !== v) {\n    // NaN\n    // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping\n    e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0;\n  } else if (v === Infinity || v === -Infinity) {\n    e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0;\n  } else if (v === 0) {\n    e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0;\n  } else {\n    s = v < 0;\n    v = abs(v);\n\n    if (v >= pow(2, 1 - bias)) {\n      e = min(floor(log(v) / LN2), 1023);\n      f = roundToEven(v / pow(2, e) * pow(2, fbits));\n      if (f / pow(2, fbits) >= 2) {\n        e = e + 1;\n        f = 1;\n      }\n      if (e > bias) {\n        // Overflow\n        e = (1 << ebits) - 1;\n        f = 0;\n      } else {\n        // Normalized\n        e = e + bias;\n        f = f - pow(2, fbits);\n      }\n    } else {\n      // Denormalized\n      e = 0;\n      f = roundToEven(v / pow(2, 1 - bias - fbits));\n    }\n  }\n\n  // Pack sign, exponent, fraction\n  bits = [];\n  for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); }\n  for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); }\n  bits.push(s ? 1 : 0);\n  bits.reverse();\n  str = bits.join('');\n\n  // Bits to bytes\n  bytes = [];\n  while (str.length) {\n    bytes.push(parseInt(str.substring(0, 8), 2));\n    str = str.substring(8);\n  }\n  return bytes;\n}\n\nfunction unpackIEEE754(bytes, ebits, fbits) {\n\n  // Bytes to bits\n  var bits = [], i, j, b, str,\n      bias, s, e, f;\n\n  for (i = bytes.length; i; i -= 1) {\n    b = bytes[i - 1];\n    for (j = 8; j; j -= 1) {\n      bits.push(b % 2 ? 1 : 0); b = b >> 1;\n    }\n  }\n  bits.reverse();\n  str = bits.join('');\n\n  // Unpack sign, exponent, fraction\n  bias = (1 << (ebits - 1)) - 1;\n  s = parseInt(str.substring(0, 1), 2) ? -1 : 1;\n  e = parseInt(str.substring(1, 1 + ebits), 2);\n  f = parseInt(str.substring(1 + ebits), 2);\n\n  // Produce number\n  if (e === (1 << ebits) - 1) {\n    return f !== 0 ? NaN : s * Infinity;\n  } else if (e > 0) {\n    // Normalized\n    return s * pow(2, e - bias) * (1 + f / pow(2, fbits));\n  } else if (f !== 0) {\n    // Denormalized\n    return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));\n  } else {\n    return s < 0 ? -0 : 0;\n  }\n}\n\nfunction unpackF64(b) { return unpackIEEE754(b, 11, 52); }\nfunction packF64(v) { return packIEEE754(v, 11, 52); }\nfunction unpackF32(b) { return unpackIEEE754(b, 8, 23); }\nfunction packF32(v) { return packIEEE754(v, 8, 23); }\n\n\n//\n// 3 The ArrayBuffer Type\n//\n\n(function() {\n\n  /** @constructor */\n  var ArrayBuffer = function ArrayBuffer(length) {\n    length = ECMAScript.ToInt32(length);\n    if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer');\n\n    this.byteLength = length;\n    this._bytes = [];\n    this._bytes.length = length;\n\n    var i;\n    for (i = 0; i < this.byteLength; i += 1) {\n      this._bytes[i] = 0;\n    }\n\n    configureProperties(this);\n  };\n\n  exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer;\n\n  //\n  // 4 The ArrayBufferView Type\n  //\n\n  // NOTE: this constructor is not exported\n  /** @constructor */\n  var ArrayBufferView = function ArrayBufferView() {\n    //this.buffer = null;\n    //this.byteOffset = 0;\n    //this.byteLength = 0;\n  };\n\n  //\n  // 5 The Typed Array View Types\n  //\n\n  function makeConstructor(bytesPerElement, pack, unpack) {\n    // Each TypedArray type requires a distinct constructor instance with\n    // identical logic, which this produces.\n\n    var ctor;\n    ctor = function(buffer, byteOffset, length) {\n      var array, sequence, i, s;\n\n      if (!arguments.length || typeof arguments[0] === 'number') {\n        // Constructor(unsigned long length)\n        this.length = ECMAScript.ToInt32(arguments[0]);\n        if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer');\n\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n      } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) {\n        // Constructor(TypedArray array)\n        array = arguments[0];\n\n        this.length = array.length;\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n\n        for (i = 0; i < this.length; i += 1) {\n          this._setter(i, array._getter(i));\n        }\n      } else if (typeof arguments[0] === 'object' &&\n                 !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n        // Constructor(sequence<type> array)\n        sequence = arguments[0];\n\n        this.length = ECMAScript.ToUint32(sequence.length);\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n\n        for (i = 0; i < this.length; i += 1) {\n          s = sequence[i];\n          this._setter(i, Number(s));\n        }\n      } else if (typeof arguments[0] === 'object' &&\n                 (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n        // Constructor(ArrayBuffer buffer,\n        //             optional unsigned long byteOffset, optional unsigned long length)\n        this.buffer = buffer;\n\n        this.byteOffset = ECMAScript.ToUint32(byteOffset);\n        if (this.byteOffset > this.buffer.byteLength) {\n          throw new RangeError(\"byteOffset out of range\");\n        }\n\n        if (this.byteOffset % this.BYTES_PER_ELEMENT) {\n          // The given byteOffset must be a multiple of the element\n          // size of the specific type, otherwise an exception is raised.\n          throw new RangeError(\"ArrayBuffer length minus the byteOffset is not a multiple of the element size.\");\n        }\n\n        if (arguments.length < 3) {\n          this.byteLength = this.buffer.byteLength - this.byteOffset;\n\n          if (this.byteLength % this.BYTES_PER_ELEMENT) {\n            throw new RangeError(\"length of buffer minus byteOffset not a multiple of the element size\");\n          }\n          this.length = this.byteLength / this.BYTES_PER_ELEMENT;\n        } else {\n          this.length = ECMAScript.ToUint32(length);\n          this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        }\n\n        if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {\n          throw new RangeError(\"byteOffset and length reference an area beyond the end of the buffer\");\n        }\n      } else {\n        throw new TypeError(\"Unexpected argument type(s)\");\n      }\n\n      this.constructor = ctor;\n\n      configureProperties(this);\n      makeArrayAccessors(this);\n    };\n\n    ctor.prototype = new ArrayBufferView();\n    ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement;\n    ctor.prototype._pack = pack;\n    ctor.prototype._unpack = unpack;\n    ctor.BYTES_PER_ELEMENT = bytesPerElement;\n\n    // getter type (unsigned long index);\n    ctor.prototype._getter = function(index) {\n      if (arguments.length < 1) throw new SyntaxError(\"Not enough arguments\");\n\n      index = ECMAScript.ToUint32(index);\n      if (index >= this.length) {\n        return undefined;\n      }\n\n      var bytes = [], i, o;\n      for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;\n           i < this.BYTES_PER_ELEMENT;\n           i += 1, o += 1) {\n        bytes.push(this.buffer._bytes[o]);\n      }\n      return this._unpack(bytes);\n    };\n\n    // NONSTANDARD: convenience alias for getter: type get(unsigned long index);\n    ctor.prototype.get = ctor.prototype._getter;\n\n    // setter void (unsigned long index, type value);\n    ctor.prototype._setter = function(index, value) {\n      if (arguments.length < 2) throw new SyntaxError(\"Not enough arguments\");\n\n      index = ECMAScript.ToUint32(index);\n      if (index >= this.length) {\n        return undefined;\n      }\n\n      var bytes = this._pack(value), i, o;\n      for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;\n           i < this.BYTES_PER_ELEMENT;\n           i += 1, o += 1) {\n        this.buffer._bytes[o] = bytes[i];\n      }\n    };\n\n    // void set(TypedArray array, optional unsigned long offset);\n    // void set(sequence<type> array, optional unsigned long offset);\n    ctor.prototype.set = function(index, value) {\n      if (arguments.length < 1) throw new SyntaxError(\"Not enough arguments\");\n      var array, sequence, offset, len,\n          i, s, d,\n          byteOffset, byteLength, tmp;\n\n      if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) {\n        // void set(TypedArray array, optional unsigned long offset);\n        array = arguments[0];\n        offset = ECMAScript.ToUint32(arguments[1]);\n\n        if (offset + array.length > this.length) {\n          throw new RangeError(\"Offset plus length of array is out of range\");\n        }\n\n        byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT;\n        byteLength = array.length * this.BYTES_PER_ELEMENT;\n\n        if (array.buffer === this.buffer) {\n          tmp = [];\n          for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) {\n            tmp[i] = array.buffer._bytes[s];\n          }\n          for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) {\n            this.buffer._bytes[d] = tmp[i];\n          }\n        } else {\n          for (i = 0, s = array.byteOffset, d = byteOffset;\n               i < byteLength; i += 1, s += 1, d += 1) {\n            this.buffer._bytes[d] = array.buffer._bytes[s];\n          }\n        }\n      } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') {\n        // void set(sequence<type> array, optional unsigned long offset);\n        sequence = arguments[0];\n        len = ECMAScript.ToUint32(sequence.length);\n        offset = ECMAScript.ToUint32(arguments[1]);\n\n        if (offset + len > this.length) {\n          throw new RangeError(\"Offset plus length of array is out of range\");\n        }\n\n        for (i = 0; i < len; i += 1) {\n          s = sequence[i];\n          this._setter(offset + i, Number(s));\n        }\n      } else {\n        throw new TypeError(\"Unexpected argument type(s)\");\n      }\n    };\n\n    // TypedArray subarray(long begin, optional long end);\n    ctor.prototype.subarray = function(start, end) {\n      function clamp(v, min, max) { return v < min ? min : v > max ? max : v; }\n\n      start = ECMAScript.ToInt32(start);\n      end = ECMAScript.ToInt32(end);\n\n      if (arguments.length < 1) { start = 0; }\n      if (arguments.length < 2) { end = this.length; }\n\n      if (start < 0) { start = this.length + start; }\n      if (end < 0) { end = this.length + end; }\n\n      start = clamp(start, 0, this.length);\n      end = clamp(end, 0, this.length);\n\n      var len = end - start;\n      if (len < 0) {\n        len = 0;\n      }\n\n      return new this.constructor(\n        this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);\n    };\n\n    return ctor;\n  }\n\n  var Int8Array = makeConstructor(1, packI8, unpackI8);\n  var Uint8Array = makeConstructor(1, packU8, unpackU8);\n  var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8);\n  var Int16Array = makeConstructor(2, packI16, unpackI16);\n  var Uint16Array = makeConstructor(2, packU16, unpackU16);\n  var Int32Array = makeConstructor(4, packI32, unpackI32);\n  var Uint32Array = makeConstructor(4, packU32, unpackU32);\n  var Float32Array = makeConstructor(4, packF32, unpackF32);\n  var Float64Array = makeConstructor(8, packF64, unpackF64);\n\n  exports.Int8Array = exports.Int8Array || Int8Array;\n  exports.Uint8Array = exports.Uint8Array || Uint8Array;\n  exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray;\n  exports.Int16Array = exports.Int16Array || Int16Array;\n  exports.Uint16Array = exports.Uint16Array || Uint16Array;\n  exports.Int32Array = exports.Int32Array || Int32Array;\n  exports.Uint32Array = exports.Uint32Array || Uint32Array;\n  exports.Float32Array = exports.Float32Array || Float32Array;\n  exports.Float64Array = exports.Float64Array || Float64Array;\n}());\n\n//\n// 6 The DataView View Type\n//\n\n(function() {\n  function r(array, index) {\n    return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index];\n  }\n\n  var IS_BIG_ENDIAN = (function() {\n    var u16array = new(exports.Uint16Array)([0x1234]),\n        u8array = new(exports.Uint8Array)(u16array.buffer);\n    return r(u8array, 0) === 0x12;\n  }());\n\n  // Constructor(ArrayBuffer buffer,\n  //             optional unsigned long byteOffset,\n  //             optional unsigned long byteLength)\n  /** @constructor */\n  var DataView = function DataView(buffer, byteOffset, byteLength) {\n    if (arguments.length === 0) {\n      buffer = new exports.ArrayBuffer(0);\n    } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) {\n      throw new TypeError(\"TypeError\");\n    }\n\n    this.buffer = buffer || new exports.ArrayBuffer(0);\n\n    this.byteOffset = ECMAScript.ToUint32(byteOffset);\n    if (this.byteOffset > this.buffer.byteLength) {\n      throw new RangeError(\"byteOffset out of range\");\n    }\n\n    if (arguments.length < 3) {\n      this.byteLength = this.buffer.byteLength - this.byteOffset;\n    } else {\n      this.byteLength = ECMAScript.ToUint32(byteLength);\n    }\n\n    if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {\n      throw new RangeError(\"byteOffset and length reference an area beyond the end of the buffer\");\n    }\n\n    configureProperties(this);\n  };\n\n  function makeGetter(arrayType) {\n    return function(byteOffset, littleEndian) {\n\n      byteOffset = ECMAScript.ToUint32(byteOffset);\n\n      if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n        throw new RangeError(\"Array index out of range\");\n      }\n      byteOffset += this.byteOffset;\n\n      var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT),\n          bytes = [], i;\n      for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n        bytes.push(r(uint8Array, i));\n      }\n\n      if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n        bytes.reverse();\n      }\n\n      return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0);\n    };\n  }\n\n  DataView.prototype.getUint8 = makeGetter(exports.Uint8Array);\n  DataView.prototype.getInt8 = makeGetter(exports.Int8Array);\n  DataView.prototype.getUint16 = makeGetter(exports.Uint16Array);\n  DataView.prototype.getInt16 = makeGetter(exports.Int16Array);\n  DataView.prototype.getUint32 = makeGetter(exports.Uint32Array);\n  DataView.prototype.getInt32 = makeGetter(exports.Int32Array);\n  DataView.prototype.getFloat32 = makeGetter(exports.Float32Array);\n  DataView.prototype.getFloat64 = makeGetter(exports.Float64Array);\n\n  function makeSetter(arrayType) {\n    return function(byteOffset, value, littleEndian) {\n\n      byteOffset = ECMAScript.ToUint32(byteOffset);\n      if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n        throw new RangeError(\"Array index out of range\");\n      }\n\n      // Get bytes\n      var typeArray = new arrayType([value]),\n          byteArray = new exports.Uint8Array(typeArray.buffer),\n          bytes = [], i, byteView;\n\n      for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n        bytes.push(r(byteArray, i));\n      }\n\n      // Flip if necessary\n      if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n        bytes.reverse();\n      }\n\n      // Write them\n      byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT);\n      byteView.set(bytes);\n    };\n  }\n\n  DataView.prototype.setUint8 = makeSetter(exports.Uint8Array);\n  DataView.prototype.setInt8 = makeSetter(exports.Int8Array);\n  DataView.prototype.setUint16 = makeSetter(exports.Uint16Array);\n  DataView.prototype.setInt16 = makeSetter(exports.Int16Array);\n  DataView.prototype.setUint32 = makeSetter(exports.Uint32Array);\n  DataView.prototype.setInt32 = makeSetter(exports.Int32Array);\n  DataView.prototype.setFloat32 = makeSetter(exports.Float32Array);\n  DataView.prototype.setFloat64 = makeSetter(exports.Float64Array);\n\n  exports.DataView = exports.DataView || DataView;\n\n}());\n\n},{}],338:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n\n},{\"./util\":339,\"punycode\":292,\"querystring\":295}],339:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n\n},{}],340:[function(require,module,exports){\n(function (global){\n\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],341:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],342:[function(require,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},{}],343:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./support/isBuffer\":342,\"_process\":284,\"inherits\":341}],344:[function(require,module,exports){\nvar indexOf = require('indexof');\n\nvar Object_keys = function (obj) {\n    if (Object.keys) return Object.keys(obj)\n    else {\n        var res = [];\n        for (var key in obj) res.push(key)\n        return res;\n    }\n};\n\nvar forEach = function (xs, fn) {\n    if (xs.forEach) return xs.forEach(fn)\n    else for (var i = 0; i < xs.length; i++) {\n        fn(xs[i], i, xs);\n    }\n};\n\nvar defineProp = (function() {\n    try {\n        Object.defineProperty({}, '_', {});\n        return function(obj, name, value) {\n            Object.defineProperty(obj, name, {\n                writable: true,\n                enumerable: false,\n                configurable: true,\n                value: value\n            })\n        };\n    } catch(e) {\n        return function(obj, name, value) {\n            obj[name] = value;\n        };\n    }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n    if (!(this instanceof Script)) return new Script(code);\n    this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n    if (!(context instanceof Context)) {\n        throw new TypeError(\"needs a 'context' argument.\");\n    }\n    \n    var iframe = document.createElement('iframe');\n    if (!iframe.style) iframe.style = {};\n    iframe.style.display = 'none';\n    \n    document.body.appendChild(iframe);\n    \n    var win = iframe.contentWindow;\n    var wEval = win.eval, wExecScript = win.execScript;\n\n    if (!wEval && wExecScript) {\n        // win.eval() magically appears when this is called in IE:\n        wExecScript.call(win, 'null');\n        wEval = win.eval;\n    }\n    \n    forEach(Object_keys(context), function (key) {\n        win[key] = context[key];\n    });\n    forEach(globals, function (key) {\n        if (context[key]) {\n            win[key] = context[key];\n        }\n    });\n    \n    var winKeys = Object_keys(win);\n\n    var res = wEval.call(win, this.code);\n    \n    forEach(Object_keys(win), function (key) {\n        // Avoid copying circular objects like `top` and `window` by only\n        // updating existing context properties or new properties in the `win`\n        // that was only introduced after the eval.\n        if (key in context || indexOf(winKeys, key) === -1) {\n            context[key] = win[key];\n        }\n    });\n\n    forEach(globals, function (key) {\n        if (!(key in context)) {\n            defineProp(context, key, win[key]);\n        }\n    });\n    \n    document.body.removeChild(iframe);\n    \n    return res;\n};\n\nScript.prototype.runInThisContext = function () {\n    return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n    var ctx = Script.createContext(context);\n    var res = this.runInContext(ctx);\n\n    forEach(Object_keys(ctx), function (key) {\n        context[key] = ctx[key];\n    });\n\n    return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n    exports[name] = Script[name] = function (code) {\n        var s = Script(code);\n        return s[name].apply(s, [].slice.call(arguments, 1));\n    };\n});\n\nexports.createScript = function (code) {\n    return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n    var copy = new Context();\n    if(typeof context === 'object') {\n        forEach(Object_keys(context), function (key) {\n            copy[key] = context[key];\n        });\n    }\n    return copy;\n};\n\n},{\"indexof\":261}],345:[function(require,module,exports){\nvar Pbf = require('pbf')\nvar GeoJSONWrapper = require('./lib/geojson_wrapper')\n\nmodule.exports = fromVectorTileJs\nmodule.exports.fromVectorTileJs = fromVectorTileJs\nmodule.exports.fromGeojsonVt = fromGeojsonVt\nmodule.exports.GeoJSONWrapper = GeoJSONWrapper\n\n/**\n * Serialize a vector-tile-js-created tile to pbf\n *\n * @param {Object} tile\n * @return {Buffer} uncompressed, pbf-serialized tile data\n */\nfunction fromVectorTileJs (tile) {\n  var out = new Pbf()\n  writeTile(tile, out)\n  return out.finish()\n}\n\n/**\n * Serialized a geojson-vt-created tile to pbf.\n *\n * @param {Object} layers - An object mapping layer names to geojson-vt-created vector tile objects\n * @param {Object} [options] - An object specifying the vector-tile specification version and extent that were used to create `layers`.\n * @param {Number} [options.version=1] - Version of vector-tile spec used\n * @param {Number} [options.extent=4096] - Extent of the vector tile\n * @return {Buffer} uncompressed, pbf-serialized tile data\n */\nfunction fromGeojsonVt (layers, options) {\n  options = options || {}\n  var l = {}\n  for (var k in layers) {\n    l[k] = new GeoJSONWrapper(layers[k].features, options)\n    l[k].name = k\n    l[k].version = options.version\n    l[k].extent = options.extent\n  }\n  return fromVectorTileJs({layers: l})\n}\n\nfunction writeTile (tile, pbf) {\n  for (var key in tile.layers) {\n    pbf.writeMessage(3, writeLayer, tile.layers[key])\n  }\n}\n\nfunction writeLayer (layer, pbf) {\n  pbf.writeVarintField(15, layer.version || 1)\n  pbf.writeStringField(1, layer.name || '')\n  pbf.writeVarintField(5, layer.extent || 4096)\n\n  var i\n  var context = {\n    keys: [],\n    values: [],\n    keycache: {},\n    valuecache: {}\n  }\n\n  for (i = 0; i < layer.length; i++) {\n    context.feature = layer.feature(i)\n    pbf.writeMessage(2, writeFeature, context)\n  }\n\n  var keys = context.keys\n  for (i = 0; i < keys.length; i++) {\n    pbf.writeStringField(3, keys[i])\n  }\n\n  var values = context.values\n  for (i = 0; i < values.length; i++) {\n    pbf.writeMessage(4, writeValue, values[i])\n  }\n}\n\nfunction writeFeature (context, pbf) {\n  var feature = context.feature\n\n  if (feature.id !== undefined) {\n    pbf.writeVarintField(1, feature.id)\n  }\n\n  pbf.writeMessage(2, writeProperties, context)\n  pbf.writeVarintField(3, feature.type)\n  pbf.writeMessage(4, writeGeometry, feature)\n}\n\nfunction writeProperties (context, pbf) {\n  var feature = context.feature\n  var keys = context.keys\n  var values = context.values\n  var keycache = context.keycache\n  var valuecache = context.valuecache\n\n  for (var key in feature.properties) {\n    var keyIndex = keycache[key]\n    if (typeof keyIndex === 'undefined') {\n      keys.push(key)\n      keyIndex = keys.length - 1\n      keycache[key] = keyIndex\n    }\n    pbf.writeVarint(keyIndex)\n\n    var value = feature.properties[key]\n    var type = typeof value\n    if (type !== 'string' && type !== 'boolean' && type !== 'number') {\n      value = JSON.stringify(value)\n    }\n    var valueKey = type + ':' + value\n    var valueIndex = valuecache[valueKey]\n    if (typeof valueIndex === 'undefined') {\n      values.push(value)\n      valueIndex = values.length - 1\n      valuecache[valueKey] = valueIndex\n    }\n    pbf.writeVarint(valueIndex)\n  }\n}\n\nfunction command (cmd, length) {\n  return (length << 3) + (cmd & 0x7)\n}\n\nfunction zigzag (num) {\n  return (num << 1) ^ (num >> 31)\n}\n\nfunction writeGeometry (feature, pbf) {\n  var geometry = feature.loadGeometry()\n  var type = feature.type\n  var x = 0\n  var y = 0\n  var rings = geometry.length\n  for (var r = 0; r < rings; r++) {\n    var ring = geometry[r]\n    var count = 1\n    if (type === 1) {\n      count = ring.length\n    }\n    pbf.writeVarint(command(1, count)) // moveto\n    // do not write polygon closing path as lineto\n    var lineCount = type === 3 ? ring.length - 1 : ring.length\n    for (var i = 0; i < lineCount; i++) {\n      if (i === 1 && type !== 1) {\n        pbf.writeVarint(command(2, lineCount - 1)) // lineto\n      }\n      var dx = ring[i].x - x\n      var dy = ring[i].y - y\n      pbf.writeVarint(zigzag(dx))\n      pbf.writeVarint(zigzag(dy))\n      x += dx\n      y += dy\n    }\n    if (type === 3) {\n      pbf.writeVarint(command(7, 1)) // closepath\n    }\n  }\n}\n\nfunction writeValue (value, pbf) {\n  var type = typeof value\n  if (type === 'string') {\n    pbf.writeStringField(1, value)\n  } else if (type === 'boolean') {\n    pbf.writeBooleanField(7, value)\n  } else if (type === 'number') {\n    if (value % 1 !== 0) {\n      pbf.writeDoubleField(3, value)\n    } else if (value < 0) {\n      pbf.writeSVarintField(6, value)\n    } else {\n      pbf.writeVarintField(5, value)\n    }\n  }\n}\n\n},{\"./lib/geojson_wrapper\":346,\"pbf\":277}],346:[function(require,module,exports){\n'use strict'\n\nvar Point = require('@mapbox/point-geometry')\nvar VectorTileFeature = require('@mapbox/vector-tile').VectorTileFeature\n\nmodule.exports = GeoJSONWrapper\n\n// conform to vectortile api\nfunction GeoJSONWrapper (features, options) {\n  this.options = options || {}\n  this.features = features\n  this.length = features.length\n}\n\nGeoJSONWrapper.prototype.feature = function (i) {\n  return new FeatureWrapper(this.features[i], this.options.extent)\n}\n\nfunction FeatureWrapper (feature, extent) {\n  this.id = typeof feature.id === 'number' ? feature.id : undefined\n  this.type = feature.type\n  this.rawGeometry = feature.type === 1 ? [feature.geometry] : feature.geometry\n  this.properties = feature.tags\n  this.extent = extent || 4096\n}\n\nFeatureWrapper.prototype.loadGeometry = function () {\n  var rings = this.rawGeometry\n  this.geometry = []\n\n  for (var i = 0; i < rings.length; i++) {\n    var ring = rings[i]\n    var newRing = []\n    for (var j = 0; j < ring.length; j++) {\n      newRing.push(new Point(ring[j][0], ring[j][1]))\n    }\n    this.geometry.push(newRing)\n  }\n  return this.geometry\n}\n\nFeatureWrapper.prototype.bbox = function () {\n  if (!this.geometry) this.loadGeometry()\n\n  var rings = this.geometry\n  var x1 = Infinity\n  var x2 = -Infinity\n  var y1 = Infinity\n  var y2 = -Infinity\n\n  for (var i = 0; i < rings.length; i++) {\n    var ring = rings[i]\n\n    for (var j = 0; j < ring.length; j++) {\n      var coord = ring[j]\n\n      x1 = Math.min(x1, coord.x)\n      x2 = Math.max(x2, coord.x)\n      y1 = Math.min(y1, coord.y)\n      y2 = Math.max(y2, coord.y)\n    }\n  }\n\n  return [x1, y1, x2, y2]\n}\n\nFeatureWrapper.prototype.toGeoJSON = VectorTileFeature.prototype.toGeoJSON\n\n},{\"@mapbox/point-geometry\":112,\"@mapbox/vector-tile\":113}],347:[function(require,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n    var wkey;\n    var cacheKeys = Object.keys(cache);\n\n    for (var i = 0, l = cacheKeys.length; i < l; i++) {\n        var key = cacheKeys[i];\n        var exp = cache[key].exports;\n        // Using babel as a transpiler to use esmodule, the export will always\n        // be an object with the default export as a property of it. To ensure\n        // the existing api and babel esmodule exports are both supported we\n        // check for both\n        if (exp === fn || exp && exp.default === fn) {\n            wkey = key;\n            break;\n        }\n    }\n\n    if (!wkey) {\n        wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n        var wcache = {};\n        for (var i = 0, l = cacheKeys.length; i < l; i++) {\n            var key = cacheKeys[i];\n            wcache[key] = key;\n        }\n        sources[wkey] = [\n            'function(require,module,exports){' + fn + '(self); }',\n            wcache\n        ];\n    }\n    var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n    var scache = {}; scache[wkey] = wkey;\n    sources[skey] = [\n        'function(require,module,exports){' +\n            // try to call default if defined to also support babel esmodule exports\n            'var f = require(' + stringify(wkey) + ');' +\n            '(f.default ? f.default : f)(self);' +\n        '}',\n        scache\n    ];\n\n    var workerSources = {};\n    resolveSources(skey);\n\n    function resolveSources(key) {\n        workerSources[key] = true;\n\n        for (var depPath in sources[key][1]) {\n            var depKey = sources[key][1][depPath];\n            if (!workerSources[depKey]) {\n                resolveSources(depKey);\n            }\n        }\n    }\n\n    var src = '(' + bundleFn + ')({'\n        + Object.keys(workerSources).map(function (key) {\n            return stringify(key) + ':['\n                + sources[key][0]\n                + ',' + stringify(sources[key][1]) + ']'\n            ;\n        }).join(',')\n        + '},{},[' + stringify(skey) + '])'\n    ;\n\n    var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n    var blob = new Blob([src], { type: 'text/javascript' });\n    if (options && options.bare) { return blob; }\n    var workerUrl = URL.createObjectURL(blob);\n    var worker = new Worker(workerUrl);\n    worker.objectURL = workerUrl;\n    return worker;\n};\n\n},{}],348:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = BinaryReader;\n\nfunction BinaryReader(buffer, isBigEndian) {\n    this.buffer = buffer;\n    this.position = 0;\n    this.isBigEndian = isBigEndian || false;\n}\n\nfunction _read(readLE, readBE, size) {\n    return function () {\n        var value;\n\n        if (this.isBigEndian)\n            value = readBE.call(this.buffer, this.position);\n        else\n            value = readLE.call(this.buffer, this.position);\n\n        this.position += size;\n\n        return value;\n    };\n}\n\nBinaryReader.prototype.readUInt8 = _read(Buffer.prototype.readUInt8, Buffer.prototype.readUInt8, 1);\nBinaryReader.prototype.readUInt16 = _read(Buffer.prototype.readUInt16LE, Buffer.prototype.readUInt16BE, 2);\nBinaryReader.prototype.readUInt32 = _read(Buffer.prototype.readUInt32LE, Buffer.prototype.readUInt32BE, 4);\nBinaryReader.prototype.readInt8 = _read(Buffer.prototype.readInt8, Buffer.prototype.readInt8, 1);\nBinaryReader.prototype.readInt16 = _read(Buffer.prototype.readInt16LE, Buffer.prototype.readInt16BE, 2);\nBinaryReader.prototype.readInt32 = _read(Buffer.prototype.readInt32LE, Buffer.prototype.readInt32BE, 4);\nBinaryReader.prototype.readFloat = _read(Buffer.prototype.readFloatLE, Buffer.prototype.readFloatBE, 4);\nBinaryReader.prototype.readDouble = _read(Buffer.prototype.readDoubleLE, Buffer.prototype.readDoubleBE, 8);\n\nBinaryReader.prototype.readVarInt = function () {\n    var nextByte,\n        result = 0,\n        bytesRead = 0;\n\n    do {\n        nextByte = this.buffer[this.position + bytesRead];\n        result += (nextByte & 0x7F) << (7 * bytesRead);\n        bytesRead++;\n    } while (nextByte >= 0x80);\n\n    this.position += bytesRead;\n\n    return result;\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182}],349:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = BinaryWriter;\n\nfunction BinaryWriter(size, allowResize) {\n    this.buffer = new Buffer(size);\n    this.position = 0;\n    this.allowResize = allowResize;\n}\n\nfunction _write(write, size) {\n    return function (value, noAssert) {\n        this.ensureSize(size);\n\n        write.call(this.buffer, value, this.position, noAssert);\n        this.position += size;\n    };\n}\n\nBinaryWriter.prototype.writeUInt8 = _write(Buffer.prototype.writeUInt8, 1);\nBinaryWriter.prototype.writeUInt16LE = _write(Buffer.prototype.writeUInt16LE, 2);\nBinaryWriter.prototype.writeUInt16BE = _write(Buffer.prototype.writeUInt16BE, 2);\nBinaryWriter.prototype.writeUInt32LE = _write(Buffer.prototype.writeUInt32LE, 4);\nBinaryWriter.prototype.writeUInt32BE = _write(Buffer.prototype.writeUInt32BE, 4);\nBinaryWriter.prototype.writeInt8 = _write(Buffer.prototype.writeInt8, 1);\nBinaryWriter.prototype.writeInt16LE = _write(Buffer.prototype.writeInt16LE, 2);\nBinaryWriter.prototype.writeInt16BE = _write(Buffer.prototype.writeInt16BE, 2);\nBinaryWriter.prototype.writeInt32LE = _write(Buffer.prototype.writeInt32LE, 4);\nBinaryWriter.prototype.writeInt32BE = _write(Buffer.prototype.writeInt32BE, 4);\nBinaryWriter.prototype.writeFloatLE = _write(Buffer.prototype.writeFloatLE, 4);\nBinaryWriter.prototype.writeFloatBE = _write(Buffer.prototype.writeFloatBE, 4);\nBinaryWriter.prototype.writeDoubleLE = _write(Buffer.prototype.writeDoubleLE, 8);\nBinaryWriter.prototype.writeDoubleBE = _write(Buffer.prototype.writeDoubleBE, 8);\n\nBinaryWriter.prototype.writeBuffer = function (buffer) {\n    this.ensureSize(buffer.length);\n\n    buffer.copy(this.buffer, this.position, 0, buffer.length);\n    this.position += buffer.length;\n};\n\nBinaryWriter.prototype.writeVarInt = function (value) {\n    var length = 1;\n\n    while ((value & 0xFFFFFF80) !== 0) {\n        this.writeUInt8((value & 0x7F) | 0x80);\n        value >>>= 7;\n        length++;\n    }\n\n    this.writeUInt8(value & 0x7F);\n\n    return length;\n};\n\nBinaryWriter.prototype.ensureSize = function (size) {\n    if (this.buffer.length < this.position + size) {\n        if (this.allowResize) {\n            var tempBuffer = new Buffer(this.position + size);\n            this.buffer.copy(tempBuffer, 0, 0, this.buffer.length);\n            this.buffer = tempBuffer;\n        }\n        else {\n            throw new RangeError('index out of range');\n        }\n    }\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182}],350:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = Geometry;\n\nvar Types = require('./types');\nvar Point = require('./point');\nvar LineString = require('./linestring');\nvar Polygon = require('./polygon');\nvar MultiPoint = require('./multipoint');\nvar MultiLineString = require('./multilinestring');\nvar MultiPolygon = require('./multipolygon');\nvar GeometryCollection = require('./geometrycollection');\nvar BinaryReader = require('./binaryreader');\nvar BinaryWriter = require('./binarywriter');\nvar WktParser = require('./wktparser');\nvar ZigZag = require('./zigzag.js');\n\nfunction Geometry() {\n    this.srid = undefined;\n    this.hasZ = false;\n    this.hasM = false;\n}\n\nGeometry.parse = function (value, options) {\n    var valueType = typeof value;\n\n    if (valueType === 'string' || value instanceof WktParser)\n        return Geometry._parseWkt(value);\n    else if (Buffer.isBuffer(value) || value instanceof BinaryReader)\n        return Geometry._parseWkb(value, options);\n    else\n        throw new Error('first argument must be a string or Buffer');\n};\n\nGeometry._parseWkt = function (value) {\n    var wktParser,\n        srid;\n\n    if (value instanceof WktParser)\n        wktParser = value;\n    else\n        wktParser = new WktParser(value);\n\n    var match = wktParser.matchRegex([/^SRID=(\\d+);/]);\n    if (match)\n        srid = parseInt(match[1], 10);\n\n    var geometryType = wktParser.matchType();\n    var dimension = wktParser.matchDimension();\n\n    var options = {\n        srid: srid,\n        hasZ: dimension.hasZ,\n        hasM: dimension.hasM\n    };\n\n    switch (geometryType) {\n    case Types.wkt.Point:\n        return Point._parseWkt(wktParser, options);\n    case Types.wkt.LineString:\n        return LineString._parseWkt(wktParser, options);\n    case Types.wkt.Polygon:\n        return Polygon._parseWkt(wktParser, options);\n    case Types.wkt.MultiPoint:\n        return MultiPoint._parseWkt(wktParser, options);\n    case Types.wkt.MultiLineString:\n        return MultiLineString._parseWkt(wktParser, options);\n    case Types.wkt.MultiPolygon:\n        return MultiPolygon._parseWkt(wktParser, options);\n    case Types.wkt.GeometryCollection:\n        return GeometryCollection._parseWkt(wktParser, options);\n    }\n};\n\nGeometry._parseWkb = function (value, parentOptions) {\n    var binaryReader,\n        wkbType,\n        geometryType,\n        options = {};\n\n    if (value instanceof BinaryReader)\n        binaryReader = value;\n    else\n        binaryReader = new BinaryReader(value);\n\n    binaryReader.isBigEndian = !binaryReader.readInt8();\n\n    wkbType = binaryReader.readUInt32();\n\n    options.hasSrid = (wkbType & 0x20000000) === 0x20000000;\n    options.isEwkb = (wkbType & 0x20000000) || (wkbType & 0x40000000) || (wkbType & 0x80000000);\n    \n    if (options.hasSrid)\n        options.srid = binaryReader.readUInt32();\n\n    options.hasZ = false;\n    options.hasM = false;\n\n    if (!options.isEwkb && (!parentOptions || !parentOptions.isEwkb)) {\n        if (wkbType >= 1000 && wkbType < 2000) {\n            options.hasZ = true;\n            geometryType = wkbType - 1000;\n        }\n        else if (wkbType >= 2000 && wkbType < 3000) {\n            options.hasM = true;\n            geometryType = wkbType - 2000;\n        }\n        else if (wkbType >= 3000 && wkbType < 4000) {\n            options.hasZ = true;\n            options.hasM = true;\n            geometryType = wkbType - 3000;\n        }\n        else {\n            geometryType = wkbType;\n        }\n    }\n    else {\n        if (wkbType & 0x80000000)\n            options.hasZ = true;\n        if (wkbType & 0x40000000)\n            options.hasM = true;\n\n        geometryType = wkbType & 0xF;\n    }\n\n    switch (geometryType) {\n    case Types.wkb.Point:\n        return Point._parseWkb(binaryReader, options);\n    case Types.wkb.LineString:\n        return LineString._parseWkb(binaryReader, options);\n    case Types.wkb.Polygon:\n        return Polygon._parseWkb(binaryReader, options);\n    case Types.wkb.MultiPoint:\n        return MultiPoint._parseWkb(binaryReader, options);\n    case Types.wkb.MultiLineString:\n        return MultiLineString._parseWkb(binaryReader, options);\n    case Types.wkb.MultiPolygon:\n        return MultiPolygon._parseWkb(binaryReader, options);\n    case Types.wkb.GeometryCollection:\n        return GeometryCollection._parseWkb(binaryReader, options);\n    default:\n        throw new Error('GeometryType ' + geometryType + ' not supported');\n    }\n};\n\nGeometry.parseTwkb = function (value) {\n    var binaryReader,\n        options = {};\n\n    if (value instanceof BinaryReader)\n        binaryReader = value;\n    else\n        binaryReader = new BinaryReader(value);\n\n    var type = binaryReader.readUInt8();\n    var metadataHeader = binaryReader.readUInt8();\n\n    var geometryType = type & 0x0F;\n    options.precision = ZigZag.decode(type >> 4);\n    options.precisionFactor = Math.pow(10, options.precision);\n\n    options.hasBoundingBox = metadataHeader >> 0 & 1;\n    options.hasSizeAttribute = metadataHeader >> 1 & 1;\n    options.hasIdList = metadataHeader >> 2 & 1;\n    options.hasExtendedPrecision = metadataHeader >> 3 & 1;\n    options.isEmpty = metadataHeader >> 4 & 1;\n\n    if (options.hasExtendedPrecision) {\n        var extendedPrecision = binaryReader.readUInt8();\n        options.hasZ = (extendedPrecision & 0x01) === 0x01;\n        options.hasM = (extendedPrecision & 0x02) === 0x02;\n\n        options.zPrecision = ZigZag.decode((extendedPrecision & 0x1C) >> 2);\n        options.zPrecisionFactor = Math.pow(10, options.zPrecision);\n\n        options.mPrecision = ZigZag.decode((extendedPrecision & 0xE0) >> 5);\n        options.mPrecisionFactor = Math.pow(10, options.mPrecision);\n    }\n    else {\n        options.hasZ = false;\n        options.hasM = false;\n    }\n\n    if (options.hasSizeAttribute)\n        binaryReader.readVarInt();\n    if (options.hasBoundingBox) {\n        var dimensions = 2;\n\n        if (options.hasZ)\n            dimensions++;\n        if (options.hasM)\n            dimensions++;\n\n        for (var i = 0; i < dimensions; i++) {\n            binaryReader.readVarInt();\n            binaryReader.readVarInt();\n        }\n    }\n\n    switch (geometryType) {\n    case Types.wkb.Point:\n        return Point._parseTwkb(binaryReader, options);\n    case Types.wkb.LineString:\n        return LineString._parseTwkb(binaryReader, options);\n    case Types.wkb.Polygon:\n        return Polygon._parseTwkb(binaryReader, options);\n    case Types.wkb.MultiPoint:\n        return MultiPoint._parseTwkb(binaryReader, options);\n    case Types.wkb.MultiLineString:\n        return MultiLineString._parseTwkb(binaryReader, options);\n    case Types.wkb.MultiPolygon:\n        return MultiPolygon._parseTwkb(binaryReader, options);\n    case Types.wkb.GeometryCollection:\n        return GeometryCollection._parseTwkb(binaryReader, options);\n    default:\n        throw new Error('GeometryType ' + geometryType + ' not supported');\n    }\n};\n\nGeometry.parseGeoJSON = function (value) {\n\treturn Geometry._parseGeoJSON(value);\n};\n\nGeometry._parseGeoJSON = function (value, isSubGeometry) {\n    var geometry;\n\n    switch (value.type) {\n    case Types.geoJSON.Point:\n        geometry = Point._parseGeoJSON(value); break;\n    case Types.geoJSON.LineString:\n        geometry = LineString._parseGeoJSON(value); break;\n    case Types.geoJSON.Polygon:\n        geometry = Polygon._parseGeoJSON(value); break;\n    case Types.geoJSON.MultiPoint:\n        geometry = MultiPoint._parseGeoJSON(value); break;\n    case Types.geoJSON.MultiLineString:\n        geometry = MultiLineString._parseGeoJSON(value); break;\n    case Types.geoJSON.MultiPolygon:\n        geometry = MultiPolygon._parseGeoJSON(value); break;\n    case Types.geoJSON.GeometryCollection:\n        geometry = GeometryCollection._parseGeoJSON(value); break;\n    default:\n        throw new Error('GeometryType ' + value.type + ' not supported');\n    }\n\n    if (value.crs && value.crs.type && value.crs.type === 'name' && value.crs.properties && value.crs.properties.name) {\n        var crs = value.crs.properties.name;\n\n        if (crs.indexOf('EPSG:') === 0)\n            geometry.srid = parseInt(crs.substring(5));\n        else if (crs.indexOf('urn:ogc:def:crs:EPSG::') === 0)\n            geometry.srid = parseInt(crs.substring(22));\n        else\n            throw new Error('Unsupported crs: ' + crs);\n    }\n\telse if (!isSubGeometry) {\n        geometry.srid = 4326;\n    }\n\n    return geometry;\n};\n\nGeometry.prototype.toEwkt = function () {\n    return 'SRID=' + this.srid + ';' + this.toWkt();\n};\n\nGeometry.prototype.toEwkb = function () {\n    var ewkb = new BinaryWriter(this._getWkbSize() + 4);\n    var wkb = this.toWkb();\n\n    ewkb.writeInt8(1);\n    ewkb.writeUInt32LE(wkb.slice(1, 5).readUInt32LE(0) | 0x20000000, true);\n    ewkb.writeUInt32LE(this.srid);\n\n    ewkb.writeBuffer(wkb.slice(5));\n\n    return ewkb.buffer;\n};\n\nGeometry.prototype._getWktType = function (wktType, isEmpty) {\n    var wkt = wktType;\n\n    if (this.hasZ && this.hasM)\n        wkt += ' ZM ';\n    else if (this.hasZ)\n        wkt += ' Z ';\n    else if (this.hasM)\n        wkt += ' M ';\n\n    if (isEmpty && !this.hasZ && !this.hasM)\n        wkt += ' ';\n\n    if (isEmpty)\n        wkt += 'EMPTY';\n\n    return wkt;\n};\n\nGeometry.prototype._getWktCoordinate = function (point) {\n    var coordinates = point.x + ' ' + point.y;\n\n    if (this.hasZ)\n        coordinates += ' ' + point.z;\n    if (this.hasM)\n        coordinates += ' ' + point.m;\n\n    return coordinates;\n};\n\nGeometry.prototype._writeWkbType = function (wkb, geometryType, parentOptions) {\n    var dimensionType = 0;\n\n    if (typeof this.srid === 'undefined' && (!parentOptions || typeof parentOptions.srid === 'undefined')) {\n        if (this.hasZ && this.hasM)\n            dimensionType += 3000;\n        else if(this.hasZ)\n            dimensionType += 1000;\n        else if(this.hasM)\n            dimensionType += 2000;\n    }\n    else {\n        if (this.hasZ)\n            dimensionType |= 0x80000000;\n        if (this.hasM)\n            dimensionType |= 0x40000000;\n    }\n\n    wkb.writeUInt32LE(dimensionType + geometryType, true);\n};\n\nGeometry.getTwkbPrecision = function (xyPrecision, zPrecision, mPrecision) {\n    return {\n        xy: xyPrecision,\n        z: zPrecision,\n        m: mPrecision,\n        xyFactor: Math.pow(10, xyPrecision),\n        zFactor: Math.pow(10, zPrecision),\n        mFactor: Math.pow(10, mPrecision)\n    };\n};\n\nGeometry.prototype._writeTwkbHeader = function (twkb, geometryType, precision, isEmpty) {\n    var type = (ZigZag.encode(precision.xy) << 4) + geometryType;\n    var metadataHeader = (this.hasZ || this.hasM) << 3;\n    metadataHeader += isEmpty << 4;\n\n    twkb.writeUInt8(type);\n    twkb.writeUInt8(metadataHeader);\n\n    if (this.hasZ || this.hasM) {\n        var extendedPrecision = 0;\n        if (this.hasZ)\n            extendedPrecision |= 0x1;\n        if (this.hasM)\n            extendedPrecision |= 0x2;\n\n        twkb.writeUInt8(extendedPrecision);\n    }\n};\n\nGeometry.prototype.toGeoJSON = function (options) {\n    var geoJSON = {};\n\n    if (this.srid) {\n        if (options) {\n            if (options.shortCrs) {\n                geoJSON.crs = {\n                    type: 'name',\n                    properties: {\n                        name: 'EPSG:' + this.srid\n                    }\n                };\n            }\n            else if (options.longCrs) {\n                geoJSON.crs = {\n                    type: 'name',\n                    properties: {\n                        name: 'urn:ogc:def:crs:EPSG::' + this.srid\n                    }\n                };\n            }\n        }\n    }\n\n    return geoJSON;\n};\n\n}).call(this,{\"isBuffer\":require(\"../../is-buffer/index.js\")})\n},{\"../../is-buffer/index.js\":263,\"./binaryreader\":348,\"./binarywriter\":349,\"./geometrycollection\":351,\"./linestring\":352,\"./multilinestring\":353,\"./multipoint\":354,\"./multipolygon\":355,\"./point\":356,\"./polygon\":357,\"./types\":358,\"./wktparser\":359,\"./zigzag.js\":361}],351:[function(require,module,exports){\nmodule.exports = GeometryCollection;\n\nvar util = require('util');\n\nvar Types = require('./types');\nvar Geometry = require('./geometry');\nvar BinaryWriter = require('./binarywriter');\n\nfunction GeometryCollection(geometries, srid) {\n    Geometry.call(this);\n\n    this.geometries = geometries || [];\n\tthis.srid = srid;\n\n    if (this.geometries.length > 0) {\n        this.hasZ = this.geometries[0].hasZ;\n        this.hasM = this.geometries[0].hasM;\n    }\n}\n\nutil.inherits(GeometryCollection, Geometry);\n\nGeometryCollection.Z = function (geometries, srid) {\n    var geometryCollection = new GeometryCollection(geometries, srid);\n    geometryCollection.hasZ = true;\n    return geometryCollection;\n};\n\nGeometryCollection.M = function (geometries, srid) {\n    var geometryCollection = new GeometryCollection(geometries, srid);\n    geometryCollection.hasM = true;\n    return geometryCollection;\n};\n\nGeometryCollection.ZM = function (geometries, srid) {\n    var geometryCollection = new GeometryCollection(geometries, srid);\n    geometryCollection.hasZ = true;\n    geometryCollection.hasM = true;\n    return geometryCollection;\n};\n\nGeometryCollection._parseWkt = function (value, options) {\n    var geometryCollection = new GeometryCollection();\n    geometryCollection.srid = options.srid;\n    geometryCollection.hasZ = options.hasZ;\n    geometryCollection.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return geometryCollection;\n\n    value.expectGroupStart();\n\n    do {\n        geometryCollection.geometries.push(Geometry.parse(value));\n    } while (value.isMatch([',']));\n\n    value.expectGroupEnd();\n\n    return geometryCollection;\n};\n\nGeometryCollection._parseWkb = function (value, options) {\n    var geometryCollection = new GeometryCollection();\n    geometryCollection.srid = options.srid;\n    geometryCollection.hasZ = options.hasZ;\n    geometryCollection.hasM = options.hasM;\n\n    var geometryCount = value.readUInt32();\n\n    for (var i = 0; i < geometryCount; i++)\n        geometryCollection.geometries.push(Geometry.parse(value, options));\n\n    return geometryCollection;\n};\n\nGeometryCollection._parseTwkb = function (value, options) {\n    var geometryCollection = new GeometryCollection();\n    geometryCollection.hasZ = options.hasZ;\n    geometryCollection.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return geometryCollection;\n\n    var geometryCount = value.readVarInt();\n\n    for (var i = 0; i < geometryCount; i++)\n        geometryCollection.geometries.push(Geometry.parseTwkb(value));\n\n    return geometryCollection;\n};\n\nGeometryCollection._parseGeoJSON = function (value) {\n    var geometryCollection = new GeometryCollection();\n\n    for (var i = 0; i < value.geometries.length; i++)\n        geometryCollection.geometries.push(Geometry._parseGeoJSON(value.geometries[i], true));\n\n    if (geometryCollection.geometries.length > 0)\n        geometryCollection.hasZ = geometryCollection.geometries[0].hasZ;\n\n    return geometryCollection;\n};\n\nGeometryCollection.prototype.toWkt = function () {\n    if (this.geometries.length === 0)\n        return this._getWktType(Types.wkt.GeometryCollection, true);\n\n    var wkt = this._getWktType(Types.wkt.GeometryCollection, false) + '(';\n\n    for (var i = 0; i < this.geometries.length; i++)\n        wkt += this.geometries[i].toWkt() + ',';\n\n    wkt = wkt.slice(0, -1);\n    wkt += ')';\n\n    return wkt;\n};\n\nGeometryCollection.prototype.toWkb = function () {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.GeometryCollection);\n    wkb.writeUInt32LE(this.geometries.length);\n\n    for (var i = 0; i < this.geometries.length; i++)\n        wkb.writeBuffer(this.geometries[i].toWkb({ srid: this.srid }));\n\n    return wkb.buffer;\n};\n\nGeometryCollection.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.geometries.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.GeometryCollection, precision, isEmpty);\n\n    if (this.geometries.length > 0) {\n        twkb.writeVarInt(this.geometries.length);\n\n        for (var i = 0; i < this.geometries.length; i++)\n            twkb.writeBuffer(this.geometries[i].toTwkb());\n    }\n\n    return twkb.buffer;\n};\n\nGeometryCollection.prototype._getWkbSize = function () {\n    var size = 1 + 4 + 4;\n\n    for (var i = 0; i < this.geometries.length; i++)\n        size += this.geometries[i]._getWkbSize();\n\n    return size;\n};\n\nGeometryCollection.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.GeometryCollection;\n    geoJSON.geometries = [];\n\n    for (var i = 0; i < this.geometries.length; i++)\n        geoJSON.geometries.push(this.geometries[i].toGeoJSON());\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./types\":358,\"util\":343}],352:[function(require,module,exports){\nmodule.exports = LineString;\n\nvar util = require('util');\n\nvar Geometry = require('./geometry');\nvar Types = require('./types');\nvar Point = require('./point');\nvar BinaryWriter = require('./binarywriter');\n\nfunction LineString(points, srid) {\n    Geometry.call(this);\n\n    this.points = points || [];\n\tthis.srid = srid;\n\n    if (this.points.length > 0) {\n        this.hasZ = this.points[0].hasZ;\n        this.hasM = this.points[0].hasM;\n    }\n}\n\nutil.inherits(LineString, Geometry);\n\nLineString.Z = function (points, srid) {\n    var lineString = new LineString(points, srid);\n    lineString.hasZ = true;\n    return lineString;\n};\n\nLineString.M = function (points, srid) {\n    var lineString = new LineString(points, srid);\n    lineString.hasM = true;\n    return lineString;\n};\n\nLineString.ZM = function (points, srid) {\n    var lineString = new LineString(points, srid);\n    lineString.hasZ = true;\n    lineString.hasM = true;\n    return lineString;\n};\n\nLineString._parseWkt = function (value, options) {\n    var lineString = new LineString();\n    lineString.srid = options.srid;\n    lineString.hasZ = options.hasZ;\n    lineString.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return lineString;\n\n    value.expectGroupStart();\n    lineString.points.push.apply(lineString.points, value.matchCoordinates(options));\n    value.expectGroupEnd();\n\n    return lineString;\n};\n\nLineString._parseWkb = function (value, options) {\n    var lineString = new LineString();\n    lineString.srid = options.srid;\n    lineString.hasZ = options.hasZ;\n    lineString.hasM = options.hasM;\n\n    var pointCount = value.readUInt32();\n\n    for (var i = 0; i < pointCount; i++)\n        lineString.points.push(Point._readWkbPoint(value, options));\n\n    return lineString;\n};\n\nLineString._parseTwkb = function (value, options) {\n    var lineString = new LineString();\n    lineString.hasZ = options.hasZ;\n    lineString.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return lineString;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var pointCount = value.readVarInt();\n\n    for (var i = 0; i < pointCount; i++)\n        lineString.points.push(Point._readTwkbPoint(value, options, previousPoint));\n\n    return lineString;\n};\n\nLineString._parseGeoJSON = function (value) {\n    var lineString = new LineString();\n\n    if (value.coordinates.length > 0)\n        lineString.hasZ = value.coordinates[0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++)\n        lineString.points.push(Point._readGeoJSONPoint(value.coordinates[i]));\n\n    return lineString;\n};\n\nLineString.prototype.toWkt = function () {\n    if (this.points.length === 0)\n        return this._getWktType(Types.wkt.LineString, true);\n\n    return this._getWktType(Types.wkt.LineString, false) + this._toInnerWkt();\n};\n\nLineString.prototype._toInnerWkt = function () {\n    var innerWkt = '(';\n\n    for (var i = 0; i < this.points.length; i++)\n        innerWkt += this._getWktCoordinate(this.points[i]) + ',';\n\n    innerWkt = innerWkt.slice(0, -1);\n    innerWkt += ')';\n\n    return innerWkt;\n};\n\nLineString.prototype.toWkb = function (parentOptions) {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.LineString, parentOptions);\n    wkb.writeUInt32LE(this.points.length);\n\n    for (var i = 0; i < this.points.length; i++)\n        this.points[i]._writeWkbPoint(wkb);\n\n    return wkb.buffer;\n};\n\nLineString.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.points.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.LineString, precision, isEmpty);\n\n    if (this.points.length > 0) {\n        twkb.writeVarInt(this.points.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.points.length; i++)\n            this.points[i]._writeTwkbPoint(twkb, precision, previousPoint);\n    }\n\n    return twkb.buffer;\n};\n\nLineString.prototype._getWkbSize = function () {\n    var coordinateSize = 16;\n\n    if (this.hasZ)\n        coordinateSize += 8;\n    if (this.hasM)\n        coordinateSize += 8;\n\n    return 1 + 4 + 4 + (this.points.length * coordinateSize);\n};\n\nLineString.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.LineString;\n    geoJSON.coordinates = [];\n\n    for (var i = 0; i < this.points.length; i++) {\n        if (this.hasZ)\n            geoJSON.coordinates.push([this.points[i].x, this.points[i].y, this.points[i].z]);\n        else\n            geoJSON.coordinates.push([this.points[i].x, this.points[i].y]);\n    }\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./point\":356,\"./types\":358,\"util\":343}],353:[function(require,module,exports){\nmodule.exports = MultiLineString;\n\nvar util = require('util');\n\nvar Types = require('./types');\nvar Geometry = require('./geometry');\nvar Point = require('./point');\nvar LineString = require('./linestring');\nvar BinaryWriter = require('./binarywriter');\n\nfunction MultiLineString(lineStrings, srid) {\n    Geometry.call(this);\n\n    this.lineStrings = lineStrings || [];\n\tthis.srid = srid;\n\n    if (this.lineStrings.length > 0) {\n        this.hasZ = this.lineStrings[0].hasZ;\n        this.hasM = this.lineStrings[0].hasM;\n    }\n}\n\nutil.inherits(MultiLineString, Geometry);\n\nMultiLineString.Z = function (lineStrings, srid) {\n    var multiLineString = new MultiLineString(lineStrings, srid);\n    multiLineString.hasZ = true;\n    return multiLineString;\n};\n\nMultiLineString.M = function (lineStrings, srid) {\n    var multiLineString = new MultiLineString(lineStrings, srid);\n    multiLineString.hasM = true;\n    return multiLineString;\n};\n\nMultiLineString.ZM = function (lineStrings, srid) {\n    var multiLineString = new MultiLineString(lineStrings, srid);\n    multiLineString.hasZ = true;\n    multiLineString.hasM = true;\n    return multiLineString;\n};\n\nMultiLineString._parseWkt = function (value, options) {\n    var multiLineString = new MultiLineString();\n    multiLineString.srid = options.srid;\n    multiLineString.hasZ = options.hasZ;\n    multiLineString.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return multiLineString;\n\n    value.expectGroupStart();\n\n    do {\n        value.expectGroupStart();\n        multiLineString.lineStrings.push(new LineString(value.matchCoordinates(options)));\n        value.expectGroupEnd();\n    } while (value.isMatch([',']));\n\n    value.expectGroupEnd();\n\n    return multiLineString;\n};\n\nMultiLineString._parseWkb = function (value, options) {\n    var multiLineString = new MultiLineString();\n    multiLineString.srid = options.srid;\n    multiLineString.hasZ = options.hasZ;\n    multiLineString.hasM = options.hasM;\n\n    var lineStringCount = value.readUInt32();\n\n    for (var i = 0; i < lineStringCount; i++)\n        multiLineString.lineStrings.push(Geometry.parse(value, options));\n\n    return multiLineString;\n};\n\nMultiLineString._parseTwkb = function (value, options) {\n    var multiLineString = new MultiLineString();\n    multiLineString.hasZ = options.hasZ;\n    multiLineString.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return multiLineString;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var lineStringCount = value.readVarInt();\n\n    for (var i = 0; i < lineStringCount; i++) {\n        var lineString = new LineString();\n        lineString.hasZ = options.hasZ;\n        lineString.hasM = options.hasM;\n\n        var pointCount = value.readVarInt();\n\n        for (var j = 0; j < pointCount; j++)\n            lineString.points.push(Point._readTwkbPoint(value, options, previousPoint));\n\n        multiLineString.lineStrings.push(lineString);\n    }\n\n    return multiLineString;\n};\n\nMultiLineString._parseGeoJSON = function (value) {\n    var multiLineString = new MultiLineString();\n\n    if (value.coordinates.length > 0 && value.coordinates[0].length > 0)\n        multiLineString.hasZ = value.coordinates[0][0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++)\n        multiLineString.lineStrings.push(LineString._parseGeoJSON({ coordinates: value.coordinates[i] }));\n\n    return multiLineString;\n};\n\nMultiLineString.prototype.toWkt = function () {\n    if (this.lineStrings.length === 0)\n        return this._getWktType(Types.wkt.MultiLineString, true);\n\n    var wkt = this._getWktType(Types.wkt.MultiLineString, false) + '(';\n\n    for (var i = 0; i < this.lineStrings.length; i++)\n        wkt += this.lineStrings[i]._toInnerWkt() + ',';\n\n    wkt = wkt.slice(0, -1);\n    wkt += ')';\n\n    return wkt;\n};\n\nMultiLineString.prototype.toWkb = function () {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.MultiLineString);\n    wkb.writeUInt32LE(this.lineStrings.length);\n\n    for (var i = 0; i < this.lineStrings.length; i++)\n        wkb.writeBuffer(this.lineStrings[i].toWkb({ srid: this.srid }));\n\n    return wkb.buffer;\n};\n\nMultiLineString.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.lineStrings.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.MultiLineString, precision, isEmpty);\n\n    if (this.lineStrings.length > 0) {\n        twkb.writeVarInt(this.lineStrings.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.lineStrings.length; i++) {\n            twkb.writeVarInt(this.lineStrings[i].points.length);\n\n            for (var j = 0; j < this.lineStrings[i].points.length; j++)\n                this.lineStrings[i].points[j]._writeTwkbPoint(twkb, precision, previousPoint);\n        }\n    }\n\n    return twkb.buffer;\n};\n\nMultiLineString.prototype._getWkbSize = function () {\n    var size = 1 + 4 + 4;\n\n    for (var i = 0; i < this.lineStrings.length; i++)\n        size += this.lineStrings[i]._getWkbSize();\n\n    return size;\n};\n\nMultiLineString.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.MultiLineString;\n    geoJSON.coordinates = [];\n\n    for (var i = 0; i < this.lineStrings.length; i++)\n        geoJSON.coordinates.push(this.lineStrings[i].toGeoJSON().coordinates);\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./linestring\":352,\"./point\":356,\"./types\":358,\"util\":343}],354:[function(require,module,exports){\nmodule.exports = MultiPoint;\n\nvar util = require('util');\n\nvar Types = require('./types');\nvar Geometry = require('./geometry');\nvar Point = require('./point');\nvar BinaryWriter = require('./binarywriter');\n\nfunction MultiPoint(points, srid) {\n    Geometry.call(this);\n\n    this.points = points || [];\n\tthis.srid = srid;\n\t\n    if (this.points.length > 0) {\n        this.hasZ = this.points[0].hasZ;\n        this.hasM = this.points[0].hasM;\n    }\n}\n\nutil.inherits(MultiPoint, Geometry);\n\nMultiPoint.Z = function (points, srid) {\n    var multiPoint = new MultiPoint(points, srid);\n    multiPoint.hasZ = true;\n    return multiPoint;\n};\n\nMultiPoint.M = function (points, srid) {\n    var multiPoint = new MultiPoint(points, srid);\n    multiPoint.hasM = true;\n    return multiPoint;\n};\n\nMultiPoint.ZM = function (points, srid) {\n    var multiPoint = new MultiPoint(points, srid);\n    multiPoint.hasZ = true;\n    multiPoint.hasM = true;\n    return multiPoint;\n};\n\nMultiPoint._parseWkt = function (value, options) {\n    var multiPoint = new MultiPoint();\n    multiPoint.srid = options.srid;\n    multiPoint.hasZ = options.hasZ;\n    multiPoint.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return multiPoint;\n\n    value.expectGroupStart();\n    multiPoint.points.push.apply(multiPoint.points, value.matchCoordinates(options));\n    value.expectGroupEnd();\n\n    return multiPoint;\n};\n\nMultiPoint._parseWkb = function (value, options) {\n    var multiPoint = new MultiPoint();\n    multiPoint.srid = options.srid;\n    multiPoint.hasZ = options.hasZ;\n    multiPoint.hasM = options.hasM;\n\n    var pointCount = value.readUInt32();\n\n    for (var i = 0; i < pointCount; i++)\n        multiPoint.points.push(Geometry.parse(value, options));\n\n    return multiPoint;\n};\n\nMultiPoint._parseTwkb = function (value, options) {\n    var multiPoint = new MultiPoint();\n    multiPoint.hasZ = options.hasZ;\n    multiPoint.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return multiPoint;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var pointCount = value.readVarInt();\n\n    for (var i = 0; i < pointCount; i++)\n        multiPoint.points.push(Point._readTwkbPoint(value, options, previousPoint));\n\n    return multiPoint;\n};\n\nMultiPoint._parseGeoJSON = function (value) {\n    var multiPoint = new MultiPoint();\n\n    if (value.coordinates.length > 0)\n        multiPoint.hasZ = value.coordinates[0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++)\n        multiPoint.points.push(Point._parseGeoJSON({ coordinates: value.coordinates[i] }));\n\n    return multiPoint;\n};\n\nMultiPoint.prototype.toWkt = function () {\n    if (this.points.length === 0)\n        return this._getWktType(Types.wkt.MultiPoint, true);\n\n    var wkt = this._getWktType(Types.wkt.MultiPoint, false) + '(';\n\n    for (var i = 0; i < this.points.length; i++)\n        wkt += this._getWktCoordinate(this.points[i]) + ',';\n\n    wkt = wkt.slice(0, -1);\n    wkt += ')';\n\n    return wkt;\n};\n\nMultiPoint.prototype.toWkb = function () {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.MultiPoint);\n    wkb.writeUInt32LE(this.points.length);\n\n    for (var i = 0; i < this.points.length; i++)\n        wkb.writeBuffer(this.points[i].toWkb({ srid: this.srid }));\n\n    return wkb.buffer;\n};\n\nMultiPoint.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.points.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.MultiPoint, precision, isEmpty);\n\n    if (this.points.length > 0) {\n        twkb.writeVarInt(this.points.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.points.length; i++)\n            this.points[i]._writeTwkbPoint(twkb, precision, previousPoint);\n    }\n\n    return twkb.buffer;\n};\n\nMultiPoint.prototype._getWkbSize = function () {\n    var coordinateSize = 16;\n\n    if (this.hasZ)\n        coordinateSize += 8;\n    if (this.hasM)\n        coordinateSize += 8;\n\n    coordinateSize += 5;\n\n    return 1 + 4 + 4 + (this.points.length * coordinateSize);\n};\n\nMultiPoint.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.MultiPoint;\n    geoJSON.coordinates = [];\n\n    for (var i = 0; i < this.points.length; i++)\n        geoJSON.coordinates.push(this.points[i].toGeoJSON().coordinates);\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./point\":356,\"./types\":358,\"util\":343}],355:[function(require,module,exports){\nmodule.exports = MultiPolygon;\n\nvar util = require('util');\n\nvar Types = require('./types');\nvar Geometry = require('./geometry');\nvar Point = require('./point');\nvar Polygon = require('./polygon');\nvar BinaryWriter = require('./binarywriter');\n\nfunction MultiPolygon(polygons, srid) {\n    Geometry.call(this);\n\n    this.polygons = polygons || [];\n\tthis.srid = srid;\n\n    if (this.polygons.length > 0) {\n        this.hasZ = this.polygons[0].hasZ;\n        this.hasM = this.polygons[0].hasM;\n    }\n}\n\nutil.inherits(MultiPolygon, Geometry);\n\nMultiPolygon.Z = function (polygons, srid) {\n    var multiPolygon = new MultiPolygon(polygons, srid);\n    multiPolygon.hasZ = true;\n    return multiPolygon;\n};\n\nMultiPolygon.M = function (polygons, srid) {\n    var multiPolygon = new MultiPolygon(polygons, srid);\n    multiPolygon.hasM = true;\n    return multiPolygon;\n};\n\nMultiPolygon.ZM = function (polygons, srid) {\n    var multiPolygon = new MultiPolygon(polygons, srid);\n    multiPolygon.hasZ = true;\n    multiPolygon.hasM = true;\n    return multiPolygon;\n};\n\nMultiPolygon._parseWkt = function (value, options) {\n    var multiPolygon = new MultiPolygon();\n    multiPolygon.srid = options.srid;\n    multiPolygon.hasZ = options.hasZ;\n    multiPolygon.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return multiPolygon;\n\n    value.expectGroupStart();\n\n    do {\n        value.expectGroupStart();\n\n        var exteriorRing = [];\n        var interiorRings = [];\n\n        value.expectGroupStart();\n        exteriorRing.push.apply(exteriorRing, value.matchCoordinates(options));\n        value.expectGroupEnd();\n\n        while (value.isMatch([','])) {\n            value.expectGroupStart();\n            interiorRings.push(value.matchCoordinates(options));\n            value.expectGroupEnd();\n        }\n\n        multiPolygon.polygons.push(new Polygon(exteriorRing, interiorRings));\n\n        value.expectGroupEnd();\n\n    } while (value.isMatch([',']));\n\n    value.expectGroupEnd();\n\n    return multiPolygon;\n};\n\nMultiPolygon._parseWkb = function (value, options) {\n    var multiPolygon = new MultiPolygon();\n    multiPolygon.srid = options.srid;\n    multiPolygon.hasZ = options.hasZ;\n    multiPolygon.hasM = options.hasM;\n\n    var polygonCount = value.readUInt32();\n\n    for (var i = 0; i < polygonCount; i++)\n        multiPolygon.polygons.push(Geometry.parse(value, options));\n\n    return multiPolygon;\n};\n\nMultiPolygon._parseTwkb = function (value, options) {\n    var multiPolygon = new MultiPolygon();\n    multiPolygon.hasZ = options.hasZ;\n    multiPolygon.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return multiPolygon;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var polygonCount = value.readVarInt();\n\n    for (var i = 0; i < polygonCount; i++) {\n        var polygon = new Polygon();\n        polygon.hasZ = options.hasZ;\n        polygon.hasM = options.hasM;\n\n        var ringCount = value.readVarInt();\n        var exteriorRingCount = value.readVarInt();\n\n        for (var j = 0; j < exteriorRingCount; j++)\n            polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint));\n\n        for (j = 1; j < ringCount; j++) {\n            var interiorRing = [];\n\n            var interiorRingCount = value.readVarInt();\n\n            for (var k = 0; k < interiorRingCount; k++)\n                interiorRing.push(Point._readTwkbPoint(value, options, previousPoint));\n\n            polygon.interiorRings.push(interiorRing);\n        }\n\n        multiPolygon.polygons.push(polygon);\n    }\n\n    return multiPolygon;\n};\n\nMultiPolygon._parseGeoJSON = function (value) {\n    var multiPolygon = new MultiPolygon();\n\n    if (value.coordinates.length > 0 && value.coordinates[0].length > 0 && value.coordinates[0][0].length > 0)\n        multiPolygon.hasZ = value.coordinates[0][0][0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++)\n        multiPolygon.polygons.push(Polygon._parseGeoJSON({ coordinates: value.coordinates[i] }));\n\n    return multiPolygon;\n};\n\nMultiPolygon.prototype.toWkt = function () {\n    if (this.polygons.length === 0)\n        return this._getWktType(Types.wkt.MultiPolygon, true);\n\n    var wkt = this._getWktType(Types.wkt.MultiPolygon, false) + '(';\n\n    for (var i = 0; i < this.polygons.length; i++)\n        wkt += this.polygons[i]._toInnerWkt() + ',';\n\n    wkt = wkt.slice(0, -1);\n    wkt += ')';\n\n    return wkt;\n};\n\nMultiPolygon.prototype.toWkb = function () {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.MultiPolygon);\n    wkb.writeUInt32LE(this.polygons.length);\n\n    for (var i = 0; i < this.polygons.length; i++)\n        wkb.writeBuffer(this.polygons[i].toWkb({ srid: this.srid }));\n\n    return wkb.buffer;\n};\n\nMultiPolygon.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.polygons.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.MultiPolygon, precision, isEmpty);\n\n    if (this.polygons.length > 0) {\n        twkb.writeVarInt(this.polygons.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.polygons.length; i++) {\n            twkb.writeVarInt(1 + this.polygons[i].interiorRings.length);\n\n            twkb.writeVarInt(this.polygons[i].exteriorRing.length);\n\n            for (var j = 0; j < this.polygons[i].exteriorRing.length; j++)\n                this.polygons[i].exteriorRing[j]._writeTwkbPoint(twkb, precision, previousPoint);\n\n            for (j = 0; j < this.polygons[i].interiorRings.length; j++) {\n                twkb.writeVarInt(this.polygons[i].interiorRings[j].length);\n\n                for (var k = 0; k < this.polygons[i].interiorRings[j].length; k++)\n                    this.polygons[i].interiorRings[j][k]._writeTwkbPoint(twkb, precision, previousPoint);\n            }\n        }\n    }\n\n    return twkb.buffer;\n};\n\nMultiPolygon.prototype._getWkbSize = function () {\n    var size = 1 + 4 + 4;\n\n    for (var i = 0; i < this.polygons.length; i++)\n        size += this.polygons[i]._getWkbSize();\n\n    return size;\n};\n\nMultiPolygon.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.MultiPolygon;\n    geoJSON.coordinates = [];\n\n    for (var i = 0; i < this.polygons.length; i++)\n        geoJSON.coordinates.push(this.polygons[i].toGeoJSON().coordinates);\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./point\":356,\"./polygon\":357,\"./types\":358,\"util\":343}],356:[function(require,module,exports){\nmodule.exports = Point;\n\nvar util = require('util');\n\nvar Geometry = require('./geometry');\nvar Types = require('./types');\nvar BinaryWriter = require('./binarywriter');\nvar ZigZag = require('./zigzag.js');\n\nfunction Point(x, y, z, m, srid) {\n    Geometry.call(this);\n\n    this.x = x;\n    this.y = y;\n    this.z = z;\n    this.m = m;\n\tthis.srid = srid;\n\n    this.hasZ = typeof this.z !== 'undefined';\n    this.hasM = typeof this.m !== 'undefined';\n}\n\nutil.inherits(Point, Geometry);\n\nPoint.Z = function (x, y, z, srid) {\n    var point = new Point(x, y, z, undefined, srid);\n    point.hasZ = true;\n    return point;\n};\n\nPoint.M = function (x, y, m, srid) {\n    var point = new Point(x, y, undefined, m, srid);\n    point.hasM = true;\n    return point;\n};\n\nPoint.ZM = function (x, y, z, m, srid) {\n    var point = new Point(x, y, z, m, srid);\n    point.hasZ = true;\n    point.hasM = true;\n    return point;\n};\n\nPoint._parseWkt = function (value, options) {\n    var point = new Point();\n    point.srid = options.srid;\n    point.hasZ = options.hasZ;\n    point.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return point;\n\n    value.expectGroupStart();\n\n    var coordinate = value.matchCoordinate(options);\n\n    point.x = coordinate.x;\n    point.y = coordinate.y;\n    point.z = coordinate.z;\n    point.m = coordinate.m;\n\n    value.expectGroupEnd();\n\n    return point;\n};\n\nPoint._parseWkb = function (value, options) {\n    var point = Point._readWkbPoint(value, options);\n    point.srid = options.srid;\n    return point;\n};\n\nPoint._readWkbPoint = function (value, options) {\n    return new Point(value.readDouble(), value.readDouble(),\n        options.hasZ ? value.readDouble() : undefined,\n        options.hasM ? value.readDouble() : undefined);\n};\n\nPoint._parseTwkb = function (value, options) {\n    var point = new Point();\n    point.hasZ = options.hasZ;\n    point.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return point;\n\n    point.x = ZigZag.decode(value.readVarInt()) / options.precisionFactor;\n    point.y = ZigZag.decode(value.readVarInt()) / options.precisionFactor;\n    point.z = options.hasZ ? ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor : undefined;\n    point.m = options.hasM ? ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor : undefined;\n\n    return point;\n};\n\nPoint._readTwkbPoint = function (value, options, previousPoint) {\n    previousPoint.x += ZigZag.decode(value.readVarInt()) / options.precisionFactor;\n    previousPoint.y += ZigZag.decode(value.readVarInt()) / options.precisionFactor;\n\n    if (options.hasZ)\n        previousPoint.z += ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor;\n    if (options.hasM)\n        previousPoint.m += ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor;\n\n    return new Point(previousPoint.x, previousPoint.y, previousPoint.z, previousPoint.m);\n};\n\nPoint._parseGeoJSON = function (value) {\n    return Point._readGeoJSONPoint(value.coordinates);\n};\n\nPoint._readGeoJSONPoint = function (coordinates) {\n    if (coordinates.length === 0)\n        return new Point();\n\n    if (coordinates.length > 2)\n        return new Point(coordinates[0], coordinates[1], coordinates[2]);\n\n    return new Point(coordinates[0], coordinates[1]);\n};\n\nPoint.prototype.toWkt = function () {\n    if (typeof this.x === 'undefined' && typeof this.y === 'undefined' &&\n        typeof this.z === 'undefined' && typeof this.m === 'undefined')\n        return this._getWktType(Types.wkt.Point, true);\n\n    return this._getWktType(Types.wkt.Point, false) + '(' + this._getWktCoordinate(this) + ')';\n};\n\nPoint.prototype.toWkb = function (parentOptions) {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n    this._writeWkbType(wkb, Types.wkb.Point, parentOptions);\n\n    if (typeof this.x === 'undefined' && typeof this.y === 'undefined') {\n        wkb.writeDoubleLE(NaN);\n        wkb.writeDoubleLE(NaN);\n\n        if (this.hasZ)\n            wkb.writeDoubleLE(NaN);\n        if (this.hasM)\n            wkb.writeDoubleLE(NaN);\n    }\n    else {\n        this._writeWkbPoint(wkb);\n    }\n\n    return wkb.buffer;\n};\n\nPoint.prototype._writeWkbPoint = function (wkb) {\n    wkb.writeDoubleLE(this.x);\n    wkb.writeDoubleLE(this.y);\n\n    if (this.hasZ)\n        wkb.writeDoubleLE(this.z);\n    if (this.hasM)\n        wkb.writeDoubleLE(this.m);\n};\n\nPoint.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = typeof this.x === 'undefined' && typeof this.y === 'undefined';\n\n    this._writeTwkbHeader(twkb, Types.wkb.Point, precision, isEmpty);\n\n    if (!isEmpty)\n        this._writeTwkbPoint(twkb, precision, new Point(0, 0, 0, 0));\n\n    return twkb.buffer;\n};\n\nPoint.prototype._writeTwkbPoint = function (twkb, precision, previousPoint) {\n    var x = this.x * precision.xyFactor;\n    var y = this.y * precision.xyFactor;\n    var z = this.z * precision.zFactor;\n    var m = this.m * precision.mFactor;\n\n    twkb.writeVarInt(ZigZag.encode(x - previousPoint.x));\n    twkb.writeVarInt(ZigZag.encode(y - previousPoint.y));\n    if (this.hasZ)\n        twkb.writeVarInt(ZigZag.encode(z - previousPoint.z));\n    if (this.hasM)\n        twkb.writeVarInt(ZigZag.encode(m - previousPoint.m));\n\n    previousPoint.x = x;\n    previousPoint.y = y;\n    previousPoint.z = z;\n    previousPoint.m = m;\n};\n\nPoint.prototype._getWkbSize = function () {\n    var size = 1 + 4 + 8 + 8;\n\n    if (this.hasZ)\n        size += 8;\n    if (this.hasM)\n        size += 8;\n\n    return size;\n};\n\nPoint.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.Point;\n\n    if (typeof this.x === 'undefined' && typeof this.y === 'undefined')\n        geoJSON.coordinates = [];\n    else if (typeof this.z !== 'undefined')\n        geoJSON.coordinates = [this.x, this.y, this.z];\n    else\n        geoJSON.coordinates = [this.x, this.y];\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./types\":358,\"./zigzag.js\":361,\"util\":343}],357:[function(require,module,exports){\nmodule.exports = Polygon;\n\nvar util = require('util');\n\nvar Geometry = require('./geometry');\nvar Types = require('./types');\nvar Point = require('./point');\nvar BinaryWriter = require('./binarywriter');\n\nfunction Polygon(exteriorRing, interiorRings, srid) {\n    Geometry.call(this);\n\n    this.exteriorRing = exteriorRing || [];\n    this.interiorRings = interiorRings || [];\n\tthis.srid = srid;\n\n    if (this.exteriorRing.length > 0) {\n        this.hasZ = this.exteriorRing[0].hasZ;\n        this.hasM = this.exteriorRing[0].hasM;\n    }\n}\n\nutil.inherits(Polygon, Geometry);\n\nPolygon.Z = function (exteriorRing, interiorRings, srid) {\n    var polygon = new Polygon(exteriorRing, interiorRings, srid);\n    polygon.hasZ = true;\n    return polygon;\n};\n\nPolygon.M = function (exteriorRing, interiorRings, srid) {\n    var polygon = new Polygon(exteriorRing, interiorRings, srid);\n    polygon.hasM = true;\n    return polygon;\n};\n\nPolygon.ZM = function (exteriorRing, interiorRings, srid) {\n    var polygon = new Polygon(exteriorRing, interiorRings, srid);\n    polygon.hasZ = true;\n    polygon.hasM = true;\n    return polygon;\n};\n\nPolygon._parseWkt = function (value, options) {\n    var polygon = new Polygon();\n    polygon.srid = options.srid;\n    polygon.hasZ = options.hasZ;\n    polygon.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return polygon;\n\n    value.expectGroupStart();\n\n    value.expectGroupStart();\n    polygon.exteriorRing.push.apply(polygon.exteriorRing, value.matchCoordinates(options));\n    value.expectGroupEnd();\n\n    while (value.isMatch([','])) {\n        value.expectGroupStart();\n        polygon.interiorRings.push(value.matchCoordinates(options));\n        value.expectGroupEnd();\n    }\n\n    value.expectGroupEnd();\n\n    return polygon;\n};\n\nPolygon._parseWkb = function (value, options) {\n    var polygon = new Polygon();\n    polygon.srid = options.srid;\n    polygon.hasZ = options.hasZ;\n    polygon.hasM = options.hasM;\n\n    var ringCount = value.readUInt32();\n\n    if (ringCount > 0) {\n        var exteriorRingCount = value.readUInt32();\n\n        for (var i = 0; i < exteriorRingCount; i++)\n            polygon.exteriorRing.push(Point._readWkbPoint(value, options));\n\n        for (i = 1; i < ringCount; i++) {\n            var interiorRing = [];\n\n            var interiorRingCount = value.readUInt32();\n\n            for (var j = 0; j < interiorRingCount; j++)\n                interiorRing.push(Point._readWkbPoint(value, options));\n\n            polygon.interiorRings.push(interiorRing);\n        }\n    }\n\n    return polygon;\n};\n\nPolygon._parseTwkb = function (value, options) {\n    var polygon = new Polygon();\n    polygon.hasZ = options.hasZ;\n    polygon.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return polygon;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var ringCount = value.readVarInt();\n    var exteriorRingCount = value.readVarInt();\n\n    for (var i = 0; i < exteriorRingCount; i++)\n        polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint));\n\n    for (i = 1; i < ringCount; i++) {\n        var interiorRing = [];\n\n        var interiorRingCount = value.readVarInt();\n\n        for (var j = 0; j < interiorRingCount; j++)\n            interiorRing.push(Point._readTwkbPoint(value, options, previousPoint));\n\n        polygon.interiorRings.push(interiorRing);\n    }\n\n    return polygon;\n};\n\nPolygon._parseGeoJSON = function (value) {\n    var polygon = new Polygon();\n\n    if (value.coordinates.length > 0 && value.coordinates[0].length > 0)\n        polygon.hasZ = value.coordinates[0][0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++) {\n        if (i > 0)\n            polygon.interiorRings.push([]);\n\n        for (var j = 0; j  < value.coordinates[i].length; j++) {\n            if (i === 0)\n                polygon.exteriorRing.push(Point._readGeoJSONPoint(value.coordinates[i][j]));\n            else\n                polygon.interiorRings[i - 1].push(Point._readGeoJSONPoint(value.coordinates[i][j]));\n        }\n    }\n\n    return polygon;\n};\n\nPolygon.prototype.toWkt = function () {\n    if (this.exteriorRing.length === 0)\n        return this._getWktType(Types.wkt.Polygon, true);\n\n    return this._getWktType(Types.wkt.Polygon, false) + this._toInnerWkt();\n};\n\nPolygon.prototype._toInnerWkt = function () {\n    var innerWkt = '((';\n\n    for (var i = 0; i < this.exteriorRing.length; i++)\n        innerWkt += this._getWktCoordinate(this.exteriorRing[i]) + ',';\n\n    innerWkt = innerWkt.slice(0, -1);\n    innerWkt += ')';\n\n    for (i = 0; i < this.interiorRings.length; i++) {\n        innerWkt += ',(';\n\n        for (var j = 0; j < this.interiorRings[i].length; j++) {\n            innerWkt += this._getWktCoordinate(this.interiorRings[i][j]) + ',';\n        }\n\n        innerWkt = innerWkt.slice(0, -1);\n        innerWkt += ')';\n    }\n\n    innerWkt += ')';\n\n    return innerWkt;\n};\n\nPolygon.prototype.toWkb = function (parentOptions) {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.Polygon, parentOptions);\n\n    if (this.exteriorRing.length > 0) {\n        wkb.writeUInt32LE(1 + this.interiorRings.length);\n        wkb.writeUInt32LE(this.exteriorRing.length);\n    }\n    else {\n        wkb.writeUInt32LE(0);\n    }\n\n    for (var i = 0; i < this.exteriorRing.length; i++)\n        this.exteriorRing[i]._writeWkbPoint(wkb);\n\n    for (i = 0; i < this.interiorRings.length; i++) {\n        wkb.writeUInt32LE(this.interiorRings[i].length);\n\n        for (var j = 0; j < this.interiorRings[i].length; j++)\n            this.interiorRings[i][j]._writeWkbPoint(wkb);\n    }\n\n    return wkb.buffer;\n};\n\nPolygon.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.exteriorRing.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.Polygon, precision, isEmpty);\n\n    if (this.exteriorRing.length > 0) {\n        twkb.writeVarInt(1 + this.interiorRings.length);\n\n        twkb.writeVarInt(this.exteriorRing.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.exteriorRing.length; i++)\n            this.exteriorRing[i]._writeTwkbPoint(twkb, precision, previousPoint);\n\n        for (i = 0; i < this.interiorRings.length; i++) {\n            twkb.writeVarInt(this.interiorRings[i].length);\n\n            for (var j = 0; j < this.interiorRings[i].length; j++)\n                this.interiorRings[i][j]._writeTwkbPoint(twkb, precision, previousPoint);\n        }\n    }\n\n    return twkb.buffer;\n};\n\nPolygon.prototype._getWkbSize = function () {\n    var coordinateSize = 16;\n\n    if (this.hasZ)\n        coordinateSize += 8;\n    if (this.hasM)\n        coordinateSize += 8;\n\n    var size = 1 + 4 + 4;\n\n    if (this.exteriorRing.length > 0)\n        size += 4 + (this.exteriorRing.length * coordinateSize);\n\n    for (var i = 0; i < this.interiorRings.length; i++)\n        size += 4 + (this.interiorRings[i].length * coordinateSize);\n\n    return size;\n};\n\nPolygon.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.Polygon;\n    geoJSON.coordinates = [];\n\n    if (this.exteriorRing.length > 0) {\n        var exteriorRing = [];\n\n        for (var i = 0; i < this.exteriorRing.length; i++) {\n            if (this.hasZ)\n                exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y, this.exteriorRing[i].z]);\n            else\n                exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y]);\n        }\n\n        geoJSON.coordinates.push(exteriorRing);\n    }\n\n    for (var j = 0; j < this.interiorRings.length; j++) {\n        var interiorRing = [];\n\n        for (var k = 0; k < this.interiorRings[j].length; k++) {\n            if (this.hasZ)\n                interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y, this.interiorRings[j][k].z]);\n            else\n                interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y]);\n        }\n\n        geoJSON.coordinates.push(interiorRing);\n    }\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./point\":356,\"./types\":358,\"util\":343}],358:[function(require,module,exports){\nmodule.exports = {\n    wkt: {\n        Point: 'POINT',\n        LineString: 'LINESTRING',\n        Polygon: 'POLYGON',\n        MultiPoint: 'MULTIPOINT',\n        MultiLineString: 'MULTILINESTRING',\n        MultiPolygon: 'MULTIPOLYGON',\n        GeometryCollection: 'GEOMETRYCOLLECTION'\n    },\n    wkb: {\n        Point: 1,\n        LineString: 2,\n        Polygon: 3,\n        MultiPoint: 4,\n        MultiLineString: 5,\n        MultiPolygon: 6,\n        GeometryCollection: 7\n    },\n    geoJSON: {\n        Point: 'Point',\n        LineString: 'LineString',\n        Polygon: 'Polygon',\n        MultiPoint: 'MultiPoint',\n        MultiLineString: 'MultiLineString',\n        MultiPolygon: 'MultiPolygon',\n        GeometryCollection: 'GeometryCollection'\n    }\n};\n\n},{}],359:[function(require,module,exports){\nmodule.exports = WktParser;\n\nvar Types = require('./types');\nvar Point = require('./point');\n\nfunction WktParser(value) {\n    this.value = value;\n    this.position = 0;\n}\n\nWktParser.prototype.match = function (tokens) {\n    this.skipWhitespaces();\n\n    for (var i = 0; i < tokens.length; i++) {\n        if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\n            this.position += tokens[i].length;\n            return tokens[i];\n        }\n    }\n\n    return null;\n};\n\nWktParser.prototype.matchRegex = function (tokens) {\n    this.skipWhitespaces();\n\n    for (var i = 0; i < tokens.length; i++) {\n        var match = this.value.substring(this.position).match(tokens[i]);\n\n        if (match) {\n            this.position += match[0].length;\n            return match;\n        }\n    }\n\n    return null;\n};\n\nWktParser.prototype.isMatch = function (tokens) {\n    this.skipWhitespaces();\n\n    for (var i = 0; i < tokens.length; i++) {\n        if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\n            this.position += tokens[i].length;\n            return true;\n        }\n    }\n\n    return false;\n};\n\nWktParser.prototype.matchType = function () {\n    var geometryType = this.match([Types.wkt.Point, Types.wkt.LineString, Types.wkt.Polygon, Types.wkt.MultiPoint,\n                                   Types.wkt.MultiLineString, Types.wkt.MultiPolygon, Types.wkt.GeometryCollection]);\n\n    if (!geometryType)\n        throw new Error('Expected geometry type');\n\n    return geometryType;\n};\n\nWktParser.prototype.matchDimension = function () {\n    var dimension = this.match(['ZM', 'Z', 'M']);\n\n    switch (dimension) {\n        case 'ZM': return { hasZ: true, hasM: true };\n        case 'Z': return { hasZ: true, hasM: false };\n        case 'M': return { hasZ: false, hasM: true };\n        default: return { hasZ: false, hasM: false };\n    }\n};\n\nWktParser.prototype.expectGroupStart = function () {\n    if (!this.isMatch(['(']))\n        throw new Error('Expected group start');\n};\n\nWktParser.prototype.expectGroupEnd = function () {\n    if (!this.isMatch([')']))\n        throw new Error('Expected group end');\n};\n\nWktParser.prototype.matchCoordinate = function (options) {\n    var match;\n\n    if (options.hasZ && options.hasM)\n        match = this.matchRegex([/^(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)/]);\n    else if (options.hasZ || options.hasM)\n        match = this.matchRegex([/^(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)/]);\n    else\n        match = this.matchRegex([/^(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)/]);\n\n    if (!match)\n        throw new Error('Expected coordinates');\n\n    if (options.hasZ && options.hasM)\n        return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4]));\n    else if (options.hasZ)\n        return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]));\n    else if (options.hasM)\n        return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, parseFloat(match[3]));\n    else\n        return new Point(parseFloat(match[1]), parseFloat(match[2]));\n};\n\nWktParser.prototype.matchCoordinates = function (options) {\n    var coordinates = [];\n\n    do {\n        var startsWithBracket = this.isMatch(['(']);\n\n        coordinates.push(this.matchCoordinate(options));\n\n        if (startsWithBracket)\n            this.expectGroupEnd();\n    } while (this.isMatch([',']));\n\n    return coordinates;\n};\n\nWktParser.prototype.skipWhitespaces = function () {\n    while (this.position < this.value.length && this.value[this.position] === ' ')\n        this.position++;\n};\n\n},{\"./point\":356,\"./types\":358}],360:[function(require,module,exports){\nexports.Types = require('./types');\nexports.Geometry = require('./geometry');\nexports.Point = require('./point');\nexports.LineString = require('./linestring');\nexports.Polygon = require('./polygon');\nexports.MultiPoint = require('./multipoint');\nexports.MultiLineString = require('./multilinestring');\nexports.MultiPolygon = require('./multipolygon');\nexports.GeometryCollection = require('./geometrycollection');\n},{\"./geometry\":350,\"./geometrycollection\":351,\"./linestring\":352,\"./multilinestring\":353,\"./multipoint\":354,\"./multipolygon\":355,\"./point\":356,\"./polygon\":357,\"./types\":358}],361:[function(require,module,exports){\nmodule.exports = {\n    encode: function (value) {\n        return (value << 1) ^ (value >> 31);\n    },\n    decode: function (value) {\n        return (value >> 1) ^ (-(value & 1));\n    }\n};\n\n},{}],362:[function(require,module,exports){\nmodule.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n\n},{}]},{},[1])(1)\n});\n"
  },
  {
    "path": "libs/i18next/i18next.js",
    "content": "// i18next, v1.8.0\n// Copyright (c)2015 Jan Mhlemann (jamuhl).\n// Distributed under MIT license\n// http://i18next.com\n!function(a){function b(a,b){if(!b||\"function\"==typeof b)return a;for(var c in b)a[c]=b[c];return a}function c(a,b){for(var d in b)d in a?c(a[d],b[d]):a[d]=b[d];return a}function d(a,b,c){var d,e=0,f=a.length,g=void 0===f||\"[object Array]\"!==Object.prototype.toString.apply(a)||\"function\"==typeof a;if(c)if(g){for(d in a)if(b.apply(a[d],c)===!1)break}else for(;f>e&&b.apply(a[e++],c)!==!1;);else if(g){for(d in a)if(b.call(a[d],d,a[d])===!1)break}else for(;f>e&&b.call(a[e],e,a[e++])!==!1;);return a}function e(a){return\"string\"==typeof a?a.replace(/[&<>\"'\\/]/g,function(a){return Q[a]}):a}function f(a){var b=function(a){if(window.XMLHttpRequest)return a(null,new XMLHttpRequest);if(window.ActiveXObject)try{return a(null,new ActiveXObject(\"Msxml2.XMLHTTP\"))}catch(b){return a(null,new ActiveXObject(\"Microsoft.XMLHTTP\"))}return a(new Error)},c=function(a){if(\"string\"==typeof a)return a;var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+\"=\"+encodeURIComponent(a[c]));return b.join(\"&\")},d=function(a){a=a.replace(/\\r\\n/g,\"\\n\");for(var b=\"\",c=0;c<a.length;c++){var d=a.charCodeAt(c);128>d?b+=String.fromCharCode(d):d>127&&2048>d?(b+=String.fromCharCode(d>>6|192),b+=String.fromCharCode(63&d|128)):(b+=String.fromCharCode(d>>12|224),b+=String.fromCharCode(d>>6&63|128),b+=String.fromCharCode(63&d|128))}return b},e=function(a){var b=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";a=d(a);var c,e,f,g,h,i,j,k=\"\",l=0;do c=a.charCodeAt(l++),e=a.charCodeAt(l++),f=a.charCodeAt(l++),g=c>>2,h=(3&c)<<4|e>>4,i=(15&e)<<2|f>>6,j=63&f,isNaN(e)?i=j=64:isNaN(f)&&(j=64),k+=b.charAt(g)+b.charAt(h)+b.charAt(i)+b.charAt(j),c=e=f=\"\",g=h=i=j=\"\";while(l<a.length);return k},f=function(){for(var a=arguments[0],b=1;b<arguments.length;b++){var c=arguments[b];for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}return a},g=function(a,d,e,h){\"function\"==typeof e&&(h=e,e={}),e.cache=e.cache||!1,e.data=e.data||{},e.headers=e.headers||{},e.jsonp=e.jsonp||!1,e.async=void 0===e.async?!0:e.async;var i,j=f({accept:\"*/*\",\"content-type\":\"application/x-www-form-urlencoded;charset=UTF-8\"},g.headers,e.headers);if(i=\"application/json\"===j[\"content-type\"]?JSON.stringify(e.data):c(e.data),\"GET\"===a){var k=[];if(i&&(k.push(i),i=null),e.cache||k.push(\"_=\"+(new Date).getTime()),e.jsonp&&(k.push(\"callback=\"+e.jsonp),k.push(\"jsonp=\"+e.jsonp)),k=k.join(\"&\"),k.length>1&&(d+=d.indexOf(\"?\")>-1?\"&\"+k:\"?\"+k),e.jsonp){var l=document.getElementsByTagName(\"head\")[0],m=document.createElement(\"script\");return m.type=\"text/javascript\",m.src=d,void l.appendChild(m)}}b(function(b,c){if(b)return h(b);c.open(a,d,e.async);for(var f in j)j.hasOwnProperty(f)&&c.setRequestHeader(f,j[f]);c.onreadystatechange=function(){if(4===c.readyState){var a=c.responseText||\"\";if(!h)return;h(c.status,{text:function(){return a},json:function(){try{return JSON.parse(a)}catch(b){return T.error(\"Can not parse JSON. URL: \"+d),{}}}})}},c.send(i)})},h={authBasic:function(a,b){g.headers.Authorization=\"Basic \"+e(a+\":\"+b)},connect:function(a,b,c){return g(\"CONNECT\",a,b,c)},del:function(a,b,c){return g(\"DELETE\",a,b,c)},get:function(a,b,c){return g(\"GET\",a,b,c)},head:function(a,b,c){return g(\"HEAD\",a,b,c)},headers:function(a){g.headers=a||{}},isAllowed:function(a,b,c){this.options(a,function(a,d){c(-1!==d.text().indexOf(b))})},options:function(a,b,c){return g(\"OPTIONS\",a,b,c)},patch:function(a,b,c){return g(\"PATCH\",a,b,c)},post:function(a,b,c){return g(\"POST\",a,b,c)},put:function(a,b,c){return g(\"PUT\",a,b,c)},trace:function(a,b,c){return g(\"TRACE\",a,b,c)}},i=a.type?a.type.toLowerCase():\"get\";h[i](a.url,a,function(b,c){200===b||0===b&&c.text()?a.success(c.json(),b,null):a.error(c.text(),b,null)})}function g(a,b){\"function\"==typeof a&&(b=a,a={}),a=a||{},T.extend(P,a),delete P.fixLng,P.functions&&(delete P.functions,T.extend(T,a.functions)),\"string\"==typeof P.ns&&(P.ns={namespaces:[P.ns],defaultNs:P.ns}),\"string\"==typeof P.fallbackNS&&(P.fallbackNS=[P.fallbackNS]),(\"string\"==typeof P.fallbackLng||\"boolean\"==typeof P.fallbackLng)&&(P.fallbackLng=[P.fallbackLng]),P.interpolationPrefixEscaped=T.regexEscape(P.interpolationPrefix),P.interpolationSuffixEscaped=T.regexEscape(P.interpolationSuffix),P.lng||(P.lng=T.detectLanguage()),M=T.toLanguages(P.lng),H=M[0],T.log(\"currentLng set to: \"+H),P.useCookie&&T.cookie.read(P.cookieName)!==H&&T.cookie.create(P.cookieName,H,P.cookieExpirationTime,P.cookieDomain),P.detectLngFromLocalStorage&&\"undefined\"!=typeof document&&window.localStorage&&T.localStorage.setItem(\"i18next_lng\",H);var c=B;a.fixLng&&(c=function(a,b){return b=b||{},b.lng=b.lng||c.lng,B(a,b)},c.lng=H),W.setCurrentLng(H),I&&P.setJqueryExt&&u();var d;if(I&&I.Deferred&&(d=I.Deferred()),!P.resStore){var e=T.toLanguages(P.lng);\"string\"==typeof P.preload&&(P.preload=[P.preload]);for(var f=0,g=P.preload.length;g>f;f++)for(var h=T.toLanguages(P.preload[f]),i=0,j=h.length;j>i;i++)e.indexOf(h[i])<0&&e.push(h[i]);return J.sync.load(e,P,function(a,e){K=e,N=!0,b&&b(c),d&&d.resolve(c)}),d?d.promise():void 0}return K=P.resStore,N=!0,b&&b(c),d&&d.resolve(c),d?d.promise():void 0}function h(a,b){\"string\"==typeof a&&(a=[a]);for(var c=0,d=a.length;d>c;c++)P.preload.indexOf(a[c])<0&&P.preload.push(a[c]);return g(b)}function i(a,b,c,d){\"string\"!=typeof b?(c=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b),K[a]=K[a]||{},K[a][b]=K[a][b]||{},d?T.deepExtend(K[a][b],c):T.extend(K[a][b],c),P.useLocalStorage&&O._storeLocal(K)}function j(a,b){\"string\"!=typeof b&&(b=P.ns.defaultNs),K[a]=K[a]||{};var c=K[a][b]||{},d=!1;for(var e in c)c.hasOwnProperty(e)&&(d=!0);return d}function k(a,b){return\"string\"!=typeof b&&(b=P.ns.defaultNs),K[a]=K[a]||{},T.extend({},K[a][b])}function l(a,b){\"string\"!=typeof b&&(b=P.ns.defaultNs),K[a]=K[a]||{},K[a][b]={},P.useLocalStorage&&O._storeLocal(K)}function m(a,b,c,d){\"string\"!=typeof b?(resource=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b),K[a]=K[a]||{},K[a][b]=K[a][b]||{};for(var e=c.split(P.keyseparator),f=0,g=K[a][b];e[f];)f==e.length-1?g[e[f]]=d:(null==g[e[f]]&&(g[e[f]]={}),g=g[e[f]]),f++;P.useLocalStorage&&O._storeLocal(K)}function n(a,b,c){\"string\"!=typeof b?(resource=b,b=P.ns.defaultNs):P.ns.namespaces.indexOf(b)<0&&P.ns.namespaces.push(b);for(var d in c)\"string\"==typeof c[d]&&m(a,b,d,c[d])}function o(a){P.ns.defaultNs=a}function p(a,b){q([a],b)}function q(a,b){var c={dynamicLoad:P.dynamicLoad,resGetPath:P.resGetPath,getAsync:P.getAsync,customLoad:P.customLoad,ns:{namespaces:a,defaultNs:\"\"}},d=T.toLanguages(P.lng);\"string\"==typeof P.preload&&(P.preload=[P.preload]);for(var e=0,f=P.preload.length;f>e;e++)for(var g=T.toLanguages(P.preload[e]),h=0,i=g.length;i>h;h++)d.indexOf(g[h])<0&&d.push(g[h]);for(var j=[],k=0,l=d.length;l>k;k++){var m=!1,n=K[d[k]];if(n)for(var o=0,p=a.length;p>o;o++)n[a[o]]||(m=!0);else m=!0;m&&j.push(d[k])}j.length?J.sync._fetch(j,c,function(c,d){var e=a.length*j.length;T.each(a,function(a,c){P.ns.namespaces.indexOf(c)<0&&P.ns.namespaces.push(c),T.each(j,function(a,f){K[f]=K[f]||{},K[f][c]=d[f][c],e--,0===e&&b&&(P.useLocalStorage&&J.sync._storeLocal(K),b())})})}):b&&b()}function r(a,b,c){return\"function\"==typeof b?(c=b,b={}):b||(b={}),b.lng=a,g(b,c)}function s(){return H}function t(a){K={},r(H,a)}function u(){function a(a,b,c){if(0!==b.length){var d=\"text\";if(0===b.indexOf(\"[\")){var e=b.split(\"]\");b=e[1],d=e[0].substr(1,e[0].length-1)}b.indexOf(\";\")===b.length-1&&(b=b.substr(0,b.length-2));var f;if(\"html\"===d)f=P.defaultValueFromContent?I.extend({defaultValue:a.html()},c):c,a.html(I.t(b,f));else if(\"text\"===d)f=P.defaultValueFromContent?I.extend({defaultValue:a.text()},c):c,a.text(I.t(b,f));else if(\"prepend\"===d)f=P.defaultValueFromContent?I.extend({defaultValue:a.html()},c):c,a.prepend(I.t(b,f));else if(\"append\"===d)f=P.defaultValueFromContent?I.extend({defaultValue:a.html()},c):c,a.append(I.t(b,f));else if(0===d.indexOf(\"data-\")){var g=d.substr(\"data-\".length);f=P.defaultValueFromContent?I.extend({defaultValue:a.data(g)},c):c;var h=I.t(b,f);a.data(g,h),a.attr(d,h)}else f=P.defaultValueFromContent?I.extend({defaultValue:a.attr(d)},c):c,a.attr(d,I.t(b,f))}}function b(b,c){var d=b.attr(P.selectorAttr);if(d||\"undefined\"==typeof d||d===!1||(d=b.text()||b.val()),d){var e=b,f=b.data(\"i18n-target\");if(f&&(e=b.find(f)||b),c||P.useDataAttrOptions!==!0||(c=b.data(\"i18n-options\")),c=c||{},d.indexOf(\";\")>=0){var g=d.split(\";\");I.each(g,function(b,d){\"\"!==d&&a(e,d,c)})}else a(e,d,c);P.useDataAttrOptions===!0&&b.data(\"i18n-options\",c)}}I.t=I.t||B,I.fn.i18n=function(a){return this.each(function(){b(I(this),a);var c=I(this).find(\"[\"+P.selectorAttr+\"]\");c.each(function(){b(I(this),a)})})}}function v(a,b,c,d){if(!a)return a;if(d=d||b,a.indexOf(d.interpolationPrefix||P.interpolationPrefix)<0)return a;var e=d.interpolationPrefix?T.regexEscape(d.interpolationPrefix):P.interpolationPrefixEscaped,f=d.interpolationSuffix?T.regexEscape(d.interpolationSuffix):P.interpolationSuffixEscaped,g=\"HTML\"+f,h=b.replace&&\"object\"==typeof b.replace?b.replace:b;return T.each(h,function(b,h){var i=c?c+P.keyseparator+b:b;\"object\"==typeof h&&null!==h?a=v(a,h,i,d):d.escapeInterpolation||P.escapeInterpolation?(a=a.replace(new RegExp([e,i,g].join(\"\"),\"g\"),T.regexReplacementEscape(h)),a=a.replace(new RegExp([e,i,f].join(\"\"),\"g\"),T.regexReplacementEscape(T.escape(h)))):a=a.replace(new RegExp([e,i,f].join(\"\"),\"g\"),T.regexReplacementEscape(h))}),a}function w(a,b){var c=\",\",d=\"{\",e=\"}\",f=T.extend({},b);for(delete f.postProcess;-1!=a.indexOf(P.reusePrefix)&&(L++,!(L>P.maxRecursion));){var g=a.lastIndexOf(P.reusePrefix),h=a.indexOf(P.reuseSuffix,g)+P.reuseSuffix.length,i=a.substring(g,h),j=i.replace(P.reusePrefix,\"\").replace(P.reuseSuffix,\"\");if(g>=h)return T.error(\"there is an missing closing in following translation value\",a),\"\";if(-1!=j.indexOf(c)){var k=j.indexOf(c);if(-1!=j.indexOf(d,k)&&-1!=j.indexOf(e,k)){var l=j.indexOf(d,k),m=j.indexOf(e,l)+e.length;try{f=T.extend(f,JSON.parse(j.substring(l,m))),j=j.substring(0,k)}catch(n){}}}var o=E(j,f);a=a.replace(i,T.regexReplacementEscape(o))}return a}function x(a){return a.context&&(\"string\"==typeof a.context||\"number\"==typeof a.context)}function y(a){return void 0!==a.count&&\"string\"!=typeof a.count}function z(a){return void 0!==a.indefinite_article&&\"string\"!=typeof a.indefinite_article&&a.indefinite_article}function A(a,b){b=b||{};var c=C(a,b),d=F(a,b);return void 0!==d||d===c}function B(a,b){return b=b||{},N?(L=0,E.apply(null,arguments)):(T.log(\"i18next not finished initialization. you might have called t function before loading resources finished.\"),b.defaultValue||\"\")}function C(a,b){return void 0!==b.defaultValue?b.defaultValue:a}function D(){for(var a=[],b=1;b<arguments.length;b++)a.push(arguments[b]);return{postProcess:\"sprintf\",sprintf:a}}function E(a,b){if(b&&\"object\"!=typeof b?\"sprintf\"===P.shortcutFunction?b=D.apply(null,arguments):\"defaultValue\"===P.shortcutFunction&&(b={defaultValue:b}):b=b||{},\"object\"==typeof P.defaultVariables&&(b=T.extend({},P.defaultVariables,b)),void 0===a||null===a||\"\"===a)return\"\";\"number\"==typeof a&&(a=String(a)),\"string\"==typeof a&&(a=[a]);var c=a[0];if(a.length>1)for(var d=0;d<a.length&&(c=a[d],!A(c,b));d++);var e,f=C(c,b),g=F(c,b),h=b.lng?T.toLanguages(b.lng,b.fallbackLng):M,i=b.ns||P.ns.defaultNs;c.indexOf(P.nsseparator)>-1&&(e=c.split(P.nsseparator),i=e[0],c=e[1]),void 0===g&&P.sendMissing&&\"function\"==typeof P.missingKeyHandler&&(b.lng?P.missingKeyHandler(h[0],i,c,f,h):P.missingKeyHandler(P.lng,i,c,f,h));var j;j=\"string\"==typeof P.postProcess&&\"\"!==P.postProcess?[P.postProcess]:\"array\"==typeof P.postProcess||\"object\"==typeof P.postProcess?P.postProcess:[],\"string\"==typeof b.postProcess&&\"\"!==b.postProcess?j=j.concat([b.postProcess]):(\"array\"==typeof b.postProcess||\"object\"==typeof b.postProcess)&&(j=j.concat(b.postProcess)),void 0!==g&&j.length&&j.forEach(function(a){X[a]&&(g=X[a](g,c,b))});var k=f;if(f.indexOf(P.nsseparator)>-1&&(e=f.split(P.nsseparator),k=e[1]),k===c&&P.parseMissingKey&&(f=P.parseMissingKey(f)),void 0===g&&(f=v(f,b),f=w(f,b),j.length)){var l=C(c,b);j.forEach(function(a){X[a]&&(g=X[a](l,c,b))})}return void 0!==g?g:f}function F(a,b){b=b||{};var c,d,e=C(a,b),f=M;if(!K)return e;if(\"cimode\"===f[0].toLowerCase())return e;if(b.lngs&&(f=b.lngs),b.lng&&(f=T.toLanguages(b.lng,b.fallbackLng),!K[f[0]])){var g=P.getAsync;P.getAsync=!1,J.sync.load(f,P,function(a,b){T.extend(K,b),P.getAsync=g})}var h=b.ns||P.ns.defaultNs;if(a.indexOf(P.nsseparator)>-1){var i=a.split(P.nsseparator);h=i[0],a=i[1]}if(x(b)){c=T.extend({},b),delete c.context,c.defaultValue=P.contextNotFound;var j=h+P.nsseparator+a+\"_\"+b.context;if(d=B(j,c),d!=P.contextNotFound)return v(d,{context:b.context})}if(y(b,f[0])){c=T.extend({lngs:[f[0]]},b),delete c.count,c._origLng=c._origLng||c.lng||f[0],delete c.lng,c.defaultValue=P.pluralNotFound;var k;if(W.needsPlural(f[0],b.count)){k=h+P.nsseparator+a+P.pluralSuffix;var l=W.get(f[0],b.count);l>=0?k=k+\"_\"+l:1===l&&(k=h+P.nsseparator+a)}else k=h+P.nsseparator+a;if(d=B(k,c),d!=P.pluralNotFound)return v(d,{count:b.count,interpolationPrefix:b.interpolationPrefix,interpolationSuffix:b.interpolationSuffix});if(!(f.length>1))return c.lng=c._origLng,delete c._origLng,d=B(h+P.nsseparator+a,c),v(d,{count:b.count,interpolationPrefix:b.interpolationPrefix,interpolationSuffix:b.interpolationSuffix});var m=f.slice();if(m.shift(),b=T.extend(b,{lngs:m}),b._origLng=c._origLng,delete b.lng,d=B(h+P.nsseparator+a,b),d!=P.pluralNotFound)return d}if(z(b)){var n=T.extend({},b);delete n.indefinite_article,n.defaultValue=P.indefiniteNotFound;var o=h+P.nsseparator+a+(b.count&&!y(b,f[0])||!b.count?P.indefiniteSuffix:\"\");if(d=B(o,n),d!=P.indefiniteNotFound)return d}for(var p,q=a.split(P.keyseparator),r=0,s=f.length;s>r&&void 0===p;r++){for(var t=f[r],u=0,A=K[t]&&K[t][h];q[u];)A=A&&A[q[u]],u++;if(void 0!==A){var D=Object.prototype.toString.apply(A);if(\"string\"==typeof A)A=v(A,b),A=w(A,b);else if(\"[object Array]\"!==D||P.returnObjectTrees||b.returnObjectTrees){if(null===A&&P.fallbackOnNull===!0)A=void 0;else if(null!==A)if(P.returnObjectTrees||b.returnObjectTrees){if(\"[object Number]\"!==D&&\"[object Function]\"!==D&&\"[object RegExp]\"!==D){var G=\"[object Array]\"===D?[]:{};T.each(A,function(c){G[c]=E(h+P.nsseparator+a+P.keyseparator+c,b)}),A=G}}else P.objectTreeKeyHandler&&\"function\"==typeof P.objectTreeKeyHandler?A=P.objectTreeKeyHandler(a,A,t,h,b):(A=\"key '\"+h+\":\"+a+\" (\"+t+\")' returned an object instead of string.\",T.log(A))}else A=A.join(\"\\n\"),A=v(A,b),A=w(A,b);\"string\"==typeof A&&\"\"===A.trim()&&P.fallbackOnEmpty===!0&&(A=void 0),p=A}}if(void 0===p&&!b.isFallbackLookup&&(P.fallbackToDefaultNS===!0||P.fallbackNS&&P.fallbackNS.length>0)){if(b.isFallbackLookup=!0,P.fallbackNS.length){for(var H=0,I=P.fallbackNS.length;I>H;H++)if(p=F(P.fallbackNS[H]+P.nsseparator+a,b),p||\"\"===p&&P.fallbackOnEmpty===!1){var L=p.indexOf(P.nsseparator)>-1?p.split(P.nsseparator)[1]:p,N=e.indexOf(P.nsseparator)>-1?e.split(P.nsseparator)[1]:e;if(L!==N)break}}else p=F(a,b);b.isFallbackLookup=!1}return p}function G(){var a,b=P.lngWhitelist||[],c=[];if(\"undefined\"!=typeof window&&!function(){for(var a=window.location.search.substring(1),b=a.split(\"&\"),d=0;d<b.length;d++){var e=b[d].indexOf(\"=\");if(e>0){var f=b[d].substring(0,e);f==P.detectLngQS&&c.push(b[d].substring(e+1))}}}(),P.useCookie&&\"undefined\"!=typeof document){var d=T.cookie.read(P.cookieName);d&&c.push(d)}if(P.detectLngFromLocalStorage&&\"undefined\"!=typeof window&&window.localStorage&&c.push(T.localStorage.getItem(\"i18next_lng\")),\"undefined\"!=typeof navigator){if(navigator.languages)for(var e=0;e<navigator.languages.length;e++)c.push(navigator.languages[e]);navigator.userLanguage&&c.push(navigator.userLanguage),navigator.language&&c.push(navigator.language)}return function(){for(var d=0;d<c.length;d++){var e=c[d];if(e.indexOf(\"-\")>-1){var f=e.split(\"-\");e=P.lowerCaseLng?f[0].toLowerCase()+\"-\"+f[1].toLowerCase():f[0].toLowerCase()+\"-\"+f[1].toUpperCase()}if(0===b.length||b.indexOf(e)>-1){a=e;break}}}(),a||(a=P.fallbackLng[0]),a}Array.prototype.indexOf||(Array.prototype.indexOf=function(a){\"use strict\";if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=0;if(arguments.length>0&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d)))),d>=c)return-1;for(var e=d>=0?d:Math.max(c-Math.abs(d),0);c>e;e++)if(e in b&&b[e]===a)return e;return-1}),Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(a){\"use strict\";if(null==this)throw new TypeError;var b=Object(this),c=b.length>>>0;if(0===c)return-1;var d=c;arguments.length>1&&(d=Number(arguments[1]),d!=d?d=0:0!=d&&d!=1/0&&d!=-(1/0)&&(d=(d>0||-1)*Math.floor(Math.abs(d))));for(var e=d>=0?Math.min(d,c-1):c-Math.abs(d);e>=0;e--)if(e in b&&b[e]===a)return e;return-1}),\"function\"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\\s+|\\s+$/g,\"\")});var H,I=a.jQuery||a.Zepto,J={},K={},L=0,M=[],N=!1,O={};\"undefined\"!=typeof module&&module.exports?module.exports=J:(I&&(I.i18n=I.i18n||J),a.i18n=a.i18n||J),O={load:function(a,b,c){b.useLocalStorage?O._loadLocal(a,b,function(d,e){for(var f=[],g=0,h=a.length;h>g;g++)e[a[g]]||f.push(a[g]);f.length>0?O._fetch(f,b,function(a,b){T.extend(e,b),O._storeLocal(b),c(null,e)}):c(null,e)}):O._fetch(a,b,function(a,b){c(null,b)})},_loadLocal:function(a,b,c){var d={},e=(new Date).getTime();if(window.localStorage){var f=a.length;T.each(a,function(a,g){var h=T.localStorage.getItem(\"res_\"+g);h&&(h=JSON.parse(h),h.i18nStamp&&h.i18nStamp+b.localStorageExpirationTime>e&&(d[g]=h)),f--,0===f&&c(null,d)})}},_storeLocal:function(a){if(window.localStorage)for(var b in a)a[b].i18nStamp=(new Date).getTime(),T.localStorage.setItem(\"res_\"+b,JSON.stringify(a[b]))},_fetch:function(a,b,c){var d=b.ns,e={};if(b.dynamicLoad){var f=function(a,b){c(null,b)};if(\"function\"==typeof b.customLoad)b.customLoad(a,d.namespaces,b,f);else{var g=v(b.resGetPath,{lng:a.join(\"+\"),ns:d.namespaces.join(\"+\")});T.ajax({url:g,success:function(a){T.log(\"loaded: \"+g),f(null,a)},error:function(a,b,c){T.log(\"failed loading: \"+g),f(\"failed loading resource.json error: \"+c)},dataType:\"json\",async:b.getAsync})}}else{var h,i=d.namespaces.length*a.length;T.each(d.namespaces,function(d,f){T.each(a,function(a,d){var g=function(a,b){a&&(h=h||[],h.push(a)),e[d]=e[d]||{},e[d][f]=b,i--,0===i&&c(h,e)};\"function\"==typeof b.customLoad?b.customLoad(d,f,b,g):O._fetchOne(d,f,b,g)})})}},_fetchOne:function(a,b,c,d){var e=v(c.resGetPath,{lng:a,ns:b});T.ajax({url:e,success:function(a){T.log(\"loaded: \"+e),d(null,a)},error:function(a,b,c){if(b&&200==b||a&&a.status&&200==a.status)T.error(\"There is a typo in: \"+e);else if(b&&404==b||a&&a.status&&404==a.status)T.log(\"Does not exist: \"+e);else{var f=b?b:a&&a.status?a.status:null;T.log(f+\" when loading \"+e)}d(c,{})},dataType:\"json\",async:c.getAsync})},postMissing:function(a,b,c,d,e){var f={};f[c]=d;var g=[];if(\"fallback\"===P.sendMissingTo&&P.fallbackLng[0]!==!1)for(var h=0;h<P.fallbackLng.length;h++)g.push({lng:P.fallbackLng[h],url:v(P.resPostPath,{lng:P.fallbackLng[h],ns:b})});else if(\"current\"===P.sendMissingTo||\"fallback\"===P.sendMissingTo&&P.fallbackLng[0]===!1)g.push({lng:a,url:v(P.resPostPath,{lng:a,ns:b})});else if(\"all\"===P.sendMissingTo)for(var h=0,i=e.length;i>h;h++)g.push({lng:e[h],url:v(P.resPostPath,{lng:e[h],ns:b})});for(var j=0,k=g.length;k>j;j++){var l=g[j];T.ajax({url:l.url,type:P.sendType,data:f,success:function(){T.log(\"posted missing key '\"+c+\"' to: \"+l.url);for(var a=c.split(\".\"),e=0,f=K[l.lng][b];a[e];)f=f[a[e]]=e===a.length-1?d:f[a[e]]||{},e++},error:function(){T.log(\"failed posting missing key '\"+c+\"' to: \"+l.url)},dataType:\"json\",async:P.postAsync})}},reload:t};var P={lng:void 0,load:\"all\",preload:[],lowerCaseLng:!1,returnObjectTrees:!1,fallbackLng:[\"dev\"],fallbackNS:[],detectLngQS:\"setLng\",detectLngFromLocalStorage:!1,ns:\"translation\",fallbackOnNull:!0,fallbackOnEmpty:!1,fallbackToDefaultNS:!1,nsseparator:\":\",keyseparator:\".\",selectorAttr:\"data-i18n\",debug:!1,resGetPath:\"locales/__lng__/__ns__.json\",resPostPath:\"locales/add/__lng__/__ns__\",getAsync:!0,postAsync:!0,resStore:void 0,useLocalStorage:!1,localStorageExpirationTime:6048e5,dynamicLoad:!1,sendMissing:!1,sendMissingTo:\"fallback\",sendType:\"POST\",interpolationPrefix:\"__\",interpolationSuffix:\"__\",defaultVariables:!1,reusePrefix:\"$t(\",reuseSuffix:\")\",pluralSuffix:\"_plural\",pluralNotFound:[\"plural_not_found\",Math.random()].join(\"\"),contextNotFound:[\"context_not_found\",Math.random()].join(\"\"),escapeInterpolation:!1,indefiniteSuffix:\"_indefinite\",indefiniteNotFound:[\"indefinite_not_found\",Math.random()].join(\"\"),setJqueryExt:!0,defaultValueFromContent:!0,useDataAttrOptions:!1,cookieExpirationTime:void 0,useCookie:!0,cookieName:\"i18next\",cookieDomain:void 0,objectTreeKeyHandler:void 0,postProcess:void 0,parseMissingKey:void 0,missingKeyHandler:O.postMissing,shortcutFunction:\"sprintf\"},Q={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\",\"/\":\"&#x2F;\"},R={create:function(a,b,c,d){var e;if(c){var f=new Date;f.setTime(f.getTime()+60*c*1e3),e=\"; expires=\"+f.toGMTString()}else e=\"\";d=d?\"domain=\"+d+\";\":\"\",document.cookie=a+\"=\"+b+e+\";\"+d+\"path=/\"},read:function(a){for(var b=a+\"=\",c=document.cookie.split(\";\"),d=0;d<c.length;d++){for(var e=c[d];\" \"==e.charAt(0);)e=e.substring(1,e.length);if(0===e.indexOf(b))return e.substring(b.length,e.length)}return null},remove:function(a){this.create(a,\"\",-1)}},S={create:function(){},read:function(){return null},remove:function(){}},T={extend:I?I.extend:b,deepExtend:c,each:I?I.each:d,ajax:I?I.ajax:\"undefined\"!=typeof document?f:function(){},cookie:\"undefined\"!=typeof document?R:S,detectLanguage:G,escape:e,log:function(a){P.debug&&\"undefined\"!=typeof console&&console.log(a)},error:function(a){\"undefined\"!=typeof console&&console.error(a)},getCountyIndexOfLng:function(a){var b=0;return(\"nb-NO\"===a||\"nn-NO\"===a||\"nb-no\"===a||\"nn-no\"===a)&&(b=1),b},toLanguages:function(a){function b(a){var b=a;if(\"string\"==typeof a&&a.indexOf(\"-\")>-1){var c=a.split(\"-\");b=P.lowerCaseLng?c[0].toLowerCase()+\"-\"+c[1].toLowerCase():c[0].toLowerCase()+\"-\"+c[1].toUpperCase()}else b=P.lowerCaseLng?a.toLowerCase():a;return b}var c=this.log,d=[],e=P.lngWhitelist||!1,f=function(a){!e||e.indexOf(a)>-1?d.push(a):c(\"rejecting non-whitelisted language: \"+a)};if(\"string\"==typeof a&&a.indexOf(\"-\")>-1){var g=a.split(\"-\");\"unspecific\"!==P.load&&f(b(a)),\"current\"!==P.load&&f(b(g[this.getCountyIndexOfLng(a)]))}else f(b(a));for(var h=0;h<P.fallbackLng.length;h++)-1===d.indexOf(P.fallbackLng[h])&&P.fallbackLng[h]&&d.push(b(P.fallbackLng[h]));return d},regexEscape:function(a){return a.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")},regexReplacementEscape:function(a){return\"string\"==typeof a?a.replace(/\\$/g,\"$$$$\"):a},localStorage:{setItem:function(a,b){if(window.localStorage)try{window.localStorage.setItem(a,b)}catch(c){T.log('failed to set value for key \"'+a+'\" to localStorage.')}},getItem:function(a,b){if(window.localStorage)try{return window.localStorage.getItem(a,b)}catch(c){return void T.log('failed to get value for key \"'+a+'\" from localStorage.')}}}};T.applyReplacement=v;var U=[[\"ach\",\"Acholi\",[1,2],1],[\"af\",\"Afrikaans\",[1,2],2],[\"ak\",\"Akan\",[1,2],1],[\"am\",\"Amharic\",[1,2],1],[\"an\",\"Aragonese\",[1,2],2],[\"ar\",\"Arabic\",[0,1,2,3,11,100],5],[\"arn\",\"Mapudungun\",[1,2],1],[\"ast\",\"Asturian\",[1,2],2],[\"ay\",\"Aymar\",[1],3],[\"az\",\"Azerbaijani\",[1,2],2],[\"be\",\"Belarusian\",[1,2,5],4],[\"bg\",\"Bulgarian\",[1,2],2],[\"bn\",\"Bengali\",[1,2],2],[\"bo\",\"Tibetan\",[1],3],[\"br\",\"Breton\",[1,2],1],[\"bs\",\"Bosnian\",[1,2,5],4],[\"ca\",\"Catalan\",[1,2],2],[\"cgg\",\"Chiga\",[1],3],[\"cs\",\"Czech\",[1,2,5],6],[\"csb\",\"Kashubian\",[1,2,5],7],[\"cy\",\"Welsh\",[1,2,3,8],8],[\"da\",\"Danish\",[1,2],2],[\"de\",\"German\",[1,2],2],[\"dev\",\"Development Fallback\",[1,2],2],[\"dz\",\"Dzongkha\",[1],3],[\"el\",\"Greek\",[1,2],2],[\"en\",\"English\",[1,2],2],[\"eo\",\"Esperanto\",[1,2],2],[\"es\",\"Spanish\",[1,2],2],[\"es_ar\",\"Argentinean Spanish\",[1,2],2],[\"et\",\"Estonian\",[1,2],2],[\"eu\",\"Basque\",[1,2],2],[\"fa\",\"Persian\",[1],3],[\"fi\",\"Finnish\",[1,2],2],[\"fil\",\"Filipino\",[1,2],1],[\"fo\",\"Faroese\",[1,2],2],[\"fr\",\"French\",[1,2],9],[\"fur\",\"Friulian\",[1,2],2],[\"fy\",\"Frisian\",[1,2],2],[\"ga\",\"Irish\",[1,2,3,7,11],10],[\"gd\",\"Scottish Gaelic\",[1,2,3,20],11],[\"gl\",\"Galician\",[1,2],2],[\"gu\",\"Gujarati\",[1,2],2],[\"gun\",\"Gun\",[1,2],1],[\"ha\",\"Hausa\",[1,2],2],[\"he\",\"Hebrew\",[1,2],2],[\"hi\",\"Hindi\",[1,2],2],[\"hr\",\"Croatian\",[1,2,5],4],[\"hu\",\"Hungarian\",[1,2],2],[\"hy\",\"Armenian\",[1,2],2],[\"ia\",\"Interlingua\",[1,2],2],[\"id\",\"Indonesian\",[1],3],[\"is\",\"Icelandic\",[1,2],12],[\"it\",\"Italian\",[1,2],2],[\"ja\",\"Japanese\",[1],3],[\"jbo\",\"Lojban\",[1],3],[\"jv\",\"Javanese\",[0,1],13],[\"ka\",\"Georgian\",[1],3],[\"kk\",\"Kazakh\",[1],3],[\"km\",\"Khmer\",[1],3],[\"kn\",\"Kannada\",[1,2],2],[\"ko\",\"Korean\",[1],3],[\"ku\",\"Kurdish\",[1,2],2],[\"kw\",\"Cornish\",[1,2,3,4],14],[\"ky\",\"Kyrgyz\",[1],3],[\"lb\",\"Letzeburgesch\",[1,2],2],[\"ln\",\"Lingala\",[1,2],1],[\"lo\",\"Lao\",[1],3],[\"lt\",\"Lithuanian\",[1,2,10],15],[\"lv\",\"Latvian\",[1,2,0],16],[\"mai\",\"Maithili\",[1,2],2],[\"mfe\",\"Mauritian Creole\",[1,2],1],[\"mg\",\"Malagasy\",[1,2],1],[\"mi\",\"Maori\",[1,2],1],[\"mk\",\"Macedonian\",[1,2],17],[\"ml\",\"Malayalam\",[1,2],2],[\"mn\",\"Mongolian\",[1,2],2],[\"mnk\",\"Mandinka\",[0,1,2],18],[\"mr\",\"Marathi\",[1,2],2],[\"ms\",\"Malay\",[1],3],[\"mt\",\"Maltese\",[1,2,11,20],19],[\"nah\",\"Nahuatl\",[1,2],2],[\"nap\",\"Neapolitan\",[1,2],2],[\"nb\",\"Norwegian Bokmal\",[1,2],2],[\"ne\",\"Nepali\",[1,2],2],[\"nl\",\"Dutch\",[1,2],2],[\"nn\",\"Norwegian Nynorsk\",[1,2],2],[\"no\",\"Norwegian\",[1,2],2],[\"nso\",\"Northern Sotho\",[1,2],2],[\"oc\",\"Occitan\",[1,2],1],[\"or\",\"Oriya\",[2,1],2],[\"pa\",\"Punjabi\",[1,2],2],[\"pap\",\"Papiamento\",[1,2],2],[\"pl\",\"Polish\",[1,2,5],7],[\"pms\",\"Piemontese\",[1,2],2],[\"ps\",\"Pashto\",[1,2],2],[\"pt\",\"Portuguese\",[1,2],2],[\"pt_br\",\"Brazilian Portuguese\",[1,2],2],[\"rm\",\"Romansh\",[1,2],2],[\"ro\",\"Romanian\",[1,2,20],20],[\"ru\",\"Russian\",[1,2,5],4],[\"sah\",\"Yakut\",[1],3],[\"sco\",\"Scots\",[1,2],2],[\"se\",\"Northern Sami\",[1,2],2],[\"si\",\"Sinhala\",[1,2],2],[\"sk\",\"Slovak\",[1,2,5],6],[\"sl\",\"Slovenian\",[5,1,2,3],21],[\"so\",\"Somali\",[1,2],2],[\"son\",\"Songhay\",[1,2],2],[\"sq\",\"Albanian\",[1,2],2],[\"sr\",\"Serbian\",[1,2,5],4],[\"su\",\"Sundanese\",[1],3],[\"sv\",\"Swedish\",[1,2],2],[\"sw\",\"Swahili\",[1,2],2],[\"ta\",\"Tamil\",[1,2],2],[\"te\",\"Telugu\",[1,2],2],[\"tg\",\"Tajik\",[1,2],1],[\"th\",\"Thai\",[1],3],[\"ti\",\"Tigrinya\",[1,2],1],[\"tk\",\"Turkmen\",[1,2],2],[\"tr\",\"Turkish\",[1,2],1],[\"tt\",\"Tatar\",[1],3],[\"ug\",\"Uyghur\",[1],3],[\"uk\",\"Ukrainian\",[1,2,5],4],[\"ur\",\"Urdu\",[1,2],2],[\"uz\",\"Uzbek\",[1,2],1],[\"vi\",\"Vietnamese\",[1],3],[\"wa\",\"Walloon\",[1,2],1],[\"wo\",\"Wolof\",[1],3],[\"yo\",\"Yoruba\",[1,2],2],[\"zh\",\"Chinese\",[1],3]],V={1:function(a){return Number(a>1)},2:function(a){return Number(1!=a)},3:function(){return 0},4:function(a){return Number(a%10==1&&a%100!=11?0:a%10>=2&&4>=a%10&&(10>a%100||a%100>=20)?1:2)},5:function(a){return Number(0===a?0:1==a?1:2==a?2:a%100>=3&&10>=a%100?3:a%100>=11?4:5)},6:function(a){return Number(1==a?0:a>=2&&4>=a?1:2)},7:function(a){return Number(1==a?0:a%10>=2&&4>=a%10&&(10>a%100||a%100>=20)?1:2)},8:function(a){return Number(1==a?0:2==a?1:8!=a&&11!=a?2:3)},9:function(a){return Number(a>=2)},10:function(a){return Number(1==a?0:2==a?1:7>a?2:11>a?3:4)},11:function(a){return Number(1==a||11==a?0:2==a||12==a?1:a>2&&20>a?2:3)},12:function(a){return Number(a%10!=1||a%100==11)},13:function(a){return Number(0!==a)},14:function(a){return Number(1==a?0:2==a?1:3==a?2:3)},15:function(a){return Number(a%10==1&&a%100!=11?0:a%10>=2&&(10>a%100||a%100>=20)?1:2)},16:function(a){return Number(a%10==1&&a%100!=11?0:0!==a?1:2)},17:function(a){return Number(1==a||a%10==1?0:1)},18:function(a){return Number(1==a?1:2)},19:function(a){return Number(1==a?0:0===a||a%100>1&&11>a%100?1:a%100>10&&20>a%100?2:3)},20:function(a){return Number(1==a?0:0===a||a%100>0&&20>a%100?1:2)},21:function(a){return Number(a%100==1?1:a%100==2?2:a%100==3||a%100==4?3:0)}},W={rules:function(){var a,b={};for(a=U.length;a--;)b[U[a][0]]={name:U[a][1],numbers:U[a][2],plurals:V[U[a][3]]};return b}(),addRule:function(a,b){W.rules[a]=b},setCurrentLng:function(a){if(!W.currentRule||W.currentRule.lng!==a){var b=a.split(\"-\");W.currentRule={lng:a,rule:W.rules[b[0]]}}},needsPlural:function(a,b){var c,d=a.split(\"-\");return c=W.currentRule&&W.currentRule.lng===a?W.currentRule.rule:W.rules[d[T.getCountyIndexOfLng(a)]],c&&c.numbers.length<=1?!1:1!==this.get(a,b)},get:function(a,b){function c(b,c){var d;if(d=W.currentRule&&W.currentRule.lng===a?W.currentRule.rule:W.rules[b]){var e;e=d.plurals(d.noAbs?c:Math.abs(c));var f=d.numbers[e];return 2===d.numbers.length&&1===d.numbers[0]&&(2===f?f=-1:1===f&&(f=1)),f}return 1===c?\"1\":\"-1\"}var d=a.split(\"-\");return c(d[T.getCountyIndexOfLng(a)],b)}},X={},Y=function(a,b){X[a]=b},Z=function(){function a(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function b(a,b){for(var c=[];b>0;c[--b]=a);return c.join(\"\")}var c=function(){return c.cache.hasOwnProperty(arguments[0])||(c.cache[arguments[0]]=c.parse(arguments[0])),c.format.call(null,c.cache[arguments[0]],arguments)};return c.format=function(c,d){var e,f,g,h,i,j,k,l=1,m=c.length,n=\"\",o=[];for(f=0;m>f;f++)if(n=a(c[f]),\"string\"===n)o.push(c[f]);else if(\"array\"===n){if(h=c[f],h[2])for(e=d[l],g=0;g<h[2].length;g++){if(!e.hasOwnProperty(h[2][g]))throw Z('[sprintf] property \"%s\" does not exist',h[2][g]);e=e[h[2][g]]}else e=h[1]?d[h[1]]:d[l++];if(/[^s]/.test(h[8])&&\"number\"!=a(e))throw Z(\"[sprintf] expecting number but found %s\",a(e));switch(h[8]){case\"b\":e=e.toString(2);break;case\"c\":e=String.fromCharCode(e);break;case\"d\":e=parseInt(e,10);break;case\"e\":e=h[7]?e.toExponential(h[7]):e.toExponential();break;case\"f\":e=h[7]?parseFloat(e).toFixed(h[7]):parseFloat(e);break;case\"o\":e=e.toString(8);break;case\"s\":e=(e=String(e))&&h[7]?e.substring(0,h[7]):e;break;case\"u\":e=Math.abs(e);break;case\"x\":e=e.toString(16);break;case\"X\":e=e.toString(16).toUpperCase()}e=/[def]/.test(h[8])&&h[3]&&e>=0?\"+\"+e:e,j=h[4]?\"0\"==h[4]?\"0\":h[4].charAt(1):\" \",k=h[6]-String(e).length,i=h[6]?b(j,k):\"\",o.push(h[5]?e+i:i+e)}return o.join(\"\")},c.cache={},c.parse=function(a){for(var b=a,c=[],d=[],e=0;b;){if(null!==(c=/^[^\\x25]+/.exec(b)))d.push(c[0]);else if(null!==(c=/^\\x25{2}/.exec(b)))d.push(\"%\");else{if(null===(c=/^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(b)))throw\"[sprintf] huh?\";if(c[2]){e|=1;var f=[],g=c[2],h=[];if(null===(h=/^([a-z_][a-z_\\d]*)/i.exec(g)))throw\"[sprintf] huh?\";for(f.push(h[1]);\"\"!==(g=g.substring(h[0].length));)if(null!==(h=/^\\.([a-z_][a-z_\\d]*)/i.exec(g)))f.push(h[1]);else{if(null===(h=/^\\[(\\d+)\\]/.exec(g)))throw\"[sprintf] huh?\";f.push(h[1])}c[2]=f}else e|=2;if(3===e)throw\"[sprintf] mixing positional and named placeholders is not (yet) supported\";d.push(c)}b=b.substring(c[0].length)}return d},c}(),$=function(a,b){return b.unshift(a),Z.apply(null,b)};Y(\"sprintf\",function(a,b,c){return c.sprintf?\"[object Array]\"===Object.prototype.toString.apply(c.sprintf)?$(a,c.sprintf):\"object\"==typeof c.sprintf?Z(a,c.sprintf):a:a}),J.init=g,J.setLng=r,J.preload=h,J.addResourceBundle=i,J.hasResourceBundle=j,J.getResourceBundle=k,J.addResource=m,J.addResources=n,J.removeResourceBundle=l,J.loadNamespace=p,J.loadNamespaces=q,J.setDefaultNamespace=o,J.t=B,J.translate=B,J.exists=A,J.detectLanguage=T.detectLanguage,J.pluralExtensions=W,J.sync=O,J.functions=T,J.lng=s,J.addPostProcessor=Y,J.applyReplacement=T.applyReplacement,J.options=P}(\"undefined\"==typeof exports?window:exports);"
  },
  {
    "path": "libs/jquery/jquery-3.1.1.js",
    "content": "/*!\n * jQuery JavaScript Library v3.1.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2016-09-22T22:30Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\n\n\n\tfunction DOMEval( code, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar script = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.1.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type( obj );\n\t\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN( obj - parseFloat( obj ) );\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 13\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Simple selector that can be filtered directly, removing non-Elements\n\tif ( risSimple.test( qualifier ) ) {\n\t\treturn jQuery.filter( qualifier, elements, not );\n\t}\n\n\t// Complex selector, compare the two sets, removing non-Elements\n\tqualifier = jQuery.filter( qualifier, elements );\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && jQuery.isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\tresolve.call( undefined, value );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.call( undefined, value );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( jQuery.isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tjQuery.isFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tjQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ jQuery.camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ jQuery.camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( jQuery.camelCase );\n\t\t\t} else {\n\t\t\t\tkey = jQuery.camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && jQuery.nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: jQuery.isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\nfunction manipulationTarget( elem, content ) {\n\tif ( jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn elem.getElementsByTagName( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdiv.style.cssText =\n\t\t\t\"box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE <=9 only\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i,\n\t\tval = 0;\n\n\t// If we already have the right measurement, avoid augmentation\n\tif ( extra === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\ti = 4;\n\n\t// Otherwise initialize for horizontal or vertical properties\n\t} else {\n\t\ti = name === \"width\" ? 1 : 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar val,\n\t\tvalueIsBorderBox = true,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE <=11 only\n\t// Running getBoundingClientRect on a disconnected node\n\t// in IE throws an error.\n\tif ( elem.getClientRects().length ) {\n\t\tval = elem.getBoundingClientRect()[ name ];\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction raf() {\n\tif ( timerId ) {\n\t\twindow.requestAnimationFrame( raf );\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 13\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off or if document is hidden\n\tif ( jQuery.fx.off || document.hidden ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.requestAnimationFrame ?\n\t\t\twindow.requestAnimationFrame( raf ) :\n\t\t\twindow.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\tif ( window.cancelAnimationFrame ) {\n\t\twindow.cancelAnimationFrame( timerId );\n\t} else {\n\t\twindow.clearInterval( timerId );\n\t}\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnothtmlwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnothtmlwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = jQuery.isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( jQuery.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 13\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win, rect, doc,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\trect = elem.getBoundingClientRect();\n\n\t\t// Make sure element is not hidden (display: none)\n\t\tif ( rect.width || rect.height ) {\n\t\t\tdoc = elem.ownerDocument;\n\t\t\twin = getWindow( doc );\n\t\t\tdocElem = doc.documentElement;\n\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset - docElem.clientTop,\n\t\t\t\tleft: rect.left + win.pageXOffset - docElem.clientLeft\n\t\t\t};\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden elements (gh-2310)\n\t\treturn rect;\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset = {\n\t\t\t\ttop: parentOffset.top + jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ),\n\t\t\t\tleft: parentOffset.left + jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true )\n\t\t\t};\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\njQuery.parseJSON = JSON.parse;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\n\nreturn jQuery;\n} );\n"
  },
  {
    "path": "libs/jquery-ui/AUTHORS.txt",
    "content": "Authors ordered by first contribution\nA list of current team members is available at http://jqueryui.com/about\n\nPaul Bakaus <paul.bakaus@gmail.com>\nRichard Worth <rdworth@gmail.com>\nYehuda Katz <wycats@gmail.com>\nSean Catchpole <sean@sunsean.com>\nJohn Resig <jeresig@gmail.com>\nTane Piper <piper.tane@gmail.com>\nDmitri Gaskin <dmitrig01@gmail.com>\nKlaus Hartl <klaus.hartl@gmail.com>\nStefan Petre <stefan.petre@gmail.com>\nGilles van den Hoven <gilles@webunity.nl>\nMicheil Bryan Smith <micheil@brandedcode.com>\nJörn Zaefferer <joern.zaefferer@gmail.com>\nMarc Grabanski <m@marcgrabanski.com>\nKeith Wood <kbwood@iinet.com.au>\nBrandon Aaron <brandon.aaron@gmail.com>\nScott González <scott.gonzalez@gmail.com>\nEduardo Lundgren <eduardolundgren@gmail.com>\nAaron Eisenberger <aaronchi@gmail.com>\nJoan Piedra <theneojp@gmail.com>\nBruno Basto <b.basto@gmail.com>\nRemy Sharp <remy@leftlogic.com>\nBohdan Ganicky <bohdan.ganicky@gmail.com>\nDavid Bolter <david.bolter@gmail.com>\nChi Cheng <cloudream@gmail.com>\nCa-Phun Ung <pazu2k@gmail.com>\nAriel Flesler <aflesler@gmail.com>\nMaggie Wachs <maggie@filamentgroup.com>\nScott Jehl <scottjehl@gmail.com>\nTodd Parker <todd@filamentgroup.com>\nAndrew Powell <andrew@shellscape.org>\nBrant Burnett <btburnett3@gmail.com>\nDouglas Neiner <doug@dougneiner.com>\nPaul Irish <paul.irish@gmail.com>\nRalph Whitbeck <ralph.whitbeck@gmail.com>\nThibault Duplessis <thibault.duplessis@gmail.com>\nDominique Vincent <dominique.vincent@toitl.com>\nJack Hsu <jack.hsu@gmail.com>\nAdam Sontag <ajpiano@ajpiano.com>\nCarl Fürstenberg <carl@excito.com>\nKevin Dalman <development@allpro.net>\nAlberto Fernández Capel <afcapel@gmail.com>\nJacek Jędrzejewski (http://jacek.jedrzejewski.name)\nTing Kuei <ting@kuei.com>\nSamuel Cormier-Iijima <sam@chide.it>\nJon Palmer <jonspalmer@gmail.com>\nBen Hollis <bhollis@amazon.com>\nJustin MacCarthy <Justin@Rubystars.biz>\nEyal Kobrigo <kobrigo@hotmail.com>\nTiago Freire <tiago.freire@gmail.com>\nDiego Tres <diegotres@gmail.com>\nHolger Rüprich <holger@rueprich.de>\nZiling Zhao <zilingzhao@gmail.com>\nMike Alsup <malsup@gmail.com>\nRobson Braga Araujo <robsonbraga@gmail.com>\nPierre-Henri Ausseil <ph.ausseil@gmail.com>\nChristopher McCulloh <cmcculloh@gmail.com>\nAndrew Newcomb <ext.github@preceptsoftware.co.uk>\nLim Chee Aun <cheeaun@gmail.com>\nJorge Barreiro <yortx.barry@gmail.com>\nDaniel Steigerwald <daniel@steigerwald.cz>\nJohn Firebaugh <john_firebaugh@bigfix.com>\nJohn Enters <github@darkdark.net>\nAndrey Kapitcyn <ru.m157y@gmail.com>\nDmitry Petrov <dpetroff@gmail.com>\nEric Hynds <eric@hynds.net>\nChairat Sunthornwiphat <pipo@sixhead.com>\nJosh Varner <josh.varner@gmail.com>\nStéphane Raimbault <stephane.raimbault@gmail.com>\nJay Merrifield <fracmak@gmail.com>\nJ. Ryan Stinnett <jryans@gmail.com>\nPeter Heiberg <peter@heiberg.se>\nAlex Dovenmuehle <adovenmuehle@gmail.com>\nJamie Gegerson <git@jamiegegerson.com>\nRaymond Schwartz <skeetergraphics@gmail.com>\nPhillip Barnes <philbar@gmail.com>\nKyle Wilkinson <kai@wikyd.org>\nKhaled AlHourani <me@khaledalhourani.com>\nMarian Rudzynski <mr@impaled.org>\nJean-Francois Remy <jeff@melix.org>\nDoug Blood <dougblood@gmail.com>\nFilippo Cavallarin <filippo.cavallarin@codseq.it>\nHeiko Henning <heiko@thehennings.ch>\nAliaksandr Rahalevich <saksmlz@gmail.com>\nMario Visic <mario@mariovisic.com>\nXavi Ramirez <xavi.rmz@gmail.com>\nMax Schnur <max.schnur@gmail.com>\nSaji Nediyanchath <saji89@gmail.com>\nCorey Frang <gnarf37@gmail.com>\nAaron Peterson <aaronp123@yahoo.com>\nIvan Peters <ivan@ivanpeters.com>\nMohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>\nMarcos Sousa <falecomigo@marcossousa.com>\nMichael DellaNoce <mdellanoce@mailtrust.com>\nGeorge Marshall <echosx@gmail.com>\nTobias Brunner <tobias@strongswan.org>\nMartin Solli <msolli@gmail.com>\nDavid Petersen <public@petersendidit.com>\nDan Heberden <danheberden@gmail.com>\nWilliam Kevin Manire <williamkmanire@gmail.com>\nGilmore Davidson <gilmoreorless@gmail.com>\nMichael Wu <michaelmwu@gmail.com>\nAdam Parod <mystic414@gmail.com>\nGuillaume Gautreau <guillaume+github@ghusse.com>\nMarcel Toele <EleotleCram@gmail.com>\nDan Streetman <ddstreet@ieee.org>\nMatt Hoskins <matt@nipltd.com>\nGiovanni Giacobbi <giovanni@giacobbi.net>\nKyle Florence <kyle.florence@gmail.com>\nPavol Hluchý <lopo@losys.sk>\nHans Hillen <hans.hillen@gmail.com>\nMark Johnson <virgofx@live.com>\nTrey Hunner <treyhunner@gmail.com>\nShane Whittet <whittet@gmail.com>\nEdward A Faulkner <ef@alum.mit.edu>\nAdam Baratz <adam@adambaratz.com>\nKato Kazuyoshi <kato.kazuyoshi@gmail.com>\nEike Send <eike.send@gmail.com>\nKris Borchers <kris.borchers@gmail.com>\nEddie Monge <eddie@eddiemonge.com>\nIsrael Tsadok <itsadok@gmail.com>\nCarson McDonald <carson@ioncannon.net>\nJason Davies <jason@jasondavies.com>\nGarrison Locke <gplocke@gmail.com>\nDavid Murdoch <david@davidmurdoch.com>\nBenjamin Scott Boyle <benjamins.boyle@gmail.com>\nJesse Baird <jebaird@gmail.com>\nJonathan Vingiano <jvingiano@gmail.com>\nDylan Just <dev@ephox.com>\nHiroshi Tomita <tomykaira@gmail.com>\nGlenn Goodrich <glenn.goodrich@gmail.com>\nTarafder Ashek-E-Elahi <mail.ashek@gmail.com>\nRyan Neufeld <ryan@neufeldmail.com>\nMarc Neuwirth <marc.neuwirth@gmail.com>\nPhilip Graham <philip.robert.graham@gmail.com>\nBenjamin Sterling <benjamin.sterling@kenzomedia.com>\nWesley Walser <waw325@gmail.com>\nKouhei Sutou <kou@clear-code.com>\nKarl Kirch <karlkrch@gmail.com>\nChris Kelly <ckdake@ckdake.com>\nJason Oster <jay@kodewerx.org>\nFelix Nagel <info@felixnagel.com>\nAlexander Polomoshnov <alex.polomoshnov@gmail.com>\nDavid Leal <dgleal@gmail.com>\nIgor Milla <igor.fsp.milla@gmail.com>\nDave Methvin <dave.methvin@gmail.com>\nFlorian Gutmann <f.gutmann@chronimo.com>\nMarwan Al Jubeh <marwan.aljubeh@gmail.com>\nMilan Broum <midlis@googlemail.com>\nSebastian Sauer <info@dynpages.de>\nGaëtan Muller <m.gaetan89@gmail.com>\nMichel Weimerskirch <michel@weimerskirch.net>\nWilliam Griffiths <william@ycymro.com>\nStojce Slavkovski <stojce@gmail.com>\nDavid Soms <david.soms@gmail.com>\nDavid De Sloovere <david.desloovere@outlook.com>\nMichael P. Jung <michael.jung@terreon.de>\nShannon Pekary <spekary@gmail.com>\nDan Wellman <danwellman@hotmail.com>\nMatthew Edward Hutton <meh@corefiling.co.uk>\nJames Khoury <james@jameskhoury.com>\nRob Loach <robloach@gmail.com>\nAlberto Monteiro <betimbrasil@gmail.com>\nAlex Rhea <alex.rhea@gmail.com>\nKrzysztof Rosiński <rozwell69@gmail.com>\nRyan Olton <oltonr@gmail.com>\nGenie <386@mail.com>\nRick Waldron <waldron.rick@gmail.com>\nIan Simpson <spoonlikesham@gmail.com>\nLev Kitsis <spam4lev@gmail.com>\nTJ VanToll <tj.vantoll@gmail.com>\nJustin Domnitz <jdomnitz@gmail.com>\nDouglas Cerna <douglascerna@yahoo.com>\nBert ter Heide <bertjh@hotmail.com>\nJasvir Nagra <jasvir@gmail.com>\nYuriy Khabarov <13real008@gmail.com>\nHarri Kilpiö <harri.kilpio@gmail.com>\nLado Lomidze <lado.lomidze@gmail.com>\nAmir E. Aharoni <amir.aharoni@mail.huji.ac.il>\nSimon Sattes <simon.sattes@gmail.com>\nJo Liss <joliss42@gmail.com>\nGuntupalli Karunakar <karunakarg@yahoo.com>\nShahyar Ghobadpour <shahyar@gmail.com>\nLukasz Lipinski <uzza17@gmail.com>\nTimo Tijhof <krinklemail@gmail.com>\nJason Moon <jmoon@socialcast.com>\nMartin Frost <martinf55@hotmail.com>\nEneko Illarramendi <eneko@illarra.com>\nEungJun Yi <semtlenori@gmail.com>\nCourtland Allen <courtlandallen@gmail.com>\nViktar Varvanovich <non4eg@gmail.com>\nDanny Trunk <dtrunk90@gmail.com>\nPavel Stetina <pavel.stetina@nangu.tv>\nMichael Stay <metaweta@gmail.com>\nSteven Roussey <sroussey@gmail.com>\nMichael Hollis <hollis21@gmail.com>\nLee Rowlands <lee.rowlands@previousnext.com.au>\nTimmy Willison <timmywillisn@gmail.com>\nKarl Swedberg <kswedberg@gmail.com>\nBaoju Yuan <the_guy_1987@hotmail.com>\nMaciej Mroziński <maciej.k.mrozinski@gmail.com>\nLuis Dalmolin <luis.nh@gmail.com>\nMark Aaron Shirley <maspwr@gmail.com>\nMartin Hoch <martin@fidion.de>\nJiayi Yang <tr870829@gmail.com>\nPhilipp Benjamin Köppchen <xgxtpbk@gws.ms>\nSindre Sorhus <sindresorhus@gmail.com>\nBernhard Sirlinger <bernhard.sirlinger@tele2.de>\nJared A. Scheel <jared@jaredscheel.com>\nRafael Xavier de Souza <rxaviers@gmail.com>\nJohn Chen <zhang.z.chen@intel.com>\nRobert Beuligmann <robertbeuligmann@gmail.com>\nDale Kocian <dale.kocian@gmail.com>\nMike Sherov <mike.sherov@gmail.com>\nAndrew Couch <andy@couchand.com>\nMarc-Andre Lafortune <github@marc-andre.ca>\nNate Eagle <nate.eagle@teamaol.com>\nDavid Souther <davidsouther@gmail.com>\nMathias Stenbom <mathias@stenbom.com>\nSergey Kartashov <ebishkek@yandex.ru>\nAvinash R <nashpapa@gmail.com>\nEthan Romba <ethanromba@gmail.com>\nCory Gackenheimer <cory.gack@gmail.com>\nJuan Pablo Kaniefsky <jpkaniefsky@gmail.com>\nRoman Salnikov <bardt.dz@gmail.com>\nAnika Henke <anika@selfthinker.org>\nSamuel Bovée <samycookie2000@yahoo.fr>\nFabrício Matté <ult_combo@hotmail.com>\nViktor Kojouharov <vkojouharov@gmail.com>\nPawel Maruszczyk (http://hrabstwo.net)\nPavel Selitskas <p.selitskas@gmail.com>\nBjørn Johansen <post@bjornjohansen.no>\nMatthieu Penant <thieum22@hotmail.com>\nDominic Barnes <dominic@dbarnes.info>\nDavid Sullivan <david.sullivan@gmail.com>\nThomas Jaggi <thomas@responsive.ch>\nVahid Sohrabloo <vahid4134@gmail.com>\nTravis Carden <travis.carden@gmail.com>\nBruno M. Custódio <bruno@brunomcustodio.com>\nNathanael Silverman <nathanael.silverman@gmail.com>\nChristian Wenz <christian@wenz.org>\nSteve Urmston <steve@urm.st>\nZaven Muradyan <megalivoithos@gmail.com>\nWoody Gilk <shadowhand@deviantart.com>\nZbigniew Motyka <zbigniew.motyka@gmail.com>\nSuhail Alkowaileet <xsoh.k7@gmail.com>\nToshi MARUYAMA <marutosijp2@yahoo.co.jp>\nDavid Hansen <hansede@gmail.com>\nBrian Grinstead <briangrinstead@gmail.com>\nChristian Klammer <christian314159@gmail.com>\nSteven Luscher <jquerycla@steveluscher.com>\nGan Eng Chin <engchin.gan@gmail.com>\nGabriel Schulhof <gabriel.schulhof@intel.com>\nAlexander Schmitz <arschmitz@gmail.com>\nVilhjálmur Skúlason <vis@dmm.is>\nSiebrand Mazeland <siebrand@kitano.nl>\nMohsen Ekhtiari <mohsenekhtiari@yahoo.com>\nPere Orga <gotrunks@gmail.com>\nJasper de Groot <mail@ugomobi.com>\nStephane Deschamps <stephane.deschamps@gmail.com>\nJyoti Deka <dekajp@gmail.com>\nAndrei Picus <office.nightcrawler@gmail.com>\nOndrej Novy <novy@ondrej.org>\nJacob McCutcheon <jacob.mccutcheon@gmail.com>\nMonika Piotrowicz <monika.piotrowicz@gmail.com>\nImants Horsts <imants.horsts@inbox.lv>\nEric Dahl <eric.c.dahl@gmail.com>\nDave Stein <dave@behance.com>\nDylan Barrell <dylan@barrell.com>\nDaniel DeGroff <djdegroff@gmail.com>\nMichael Wiencek <mwtuea@gmail.com>\nThomas Meyer <meyertee@gmail.com>\nRuslan Yakhyaev <ruslan@ruslan.io>\nBrian J. Dowling <bjd-dev@simplicity.net>\nBen Higgins <ben@extrahop.com>\nYermo Lamers <yml@yml.com>\nPatrick Stapleton <github@gdi2290.com>\nTrisha Crowley <trisha.crowley@gmail.com>\nUsman Akeju <akeju00+github@gmail.com>\nRodrigo Menezes <rod333@gmail.com>\nJacques Perrault <jacques_perrault@us.ibm.com>\nFrederik Elvhage <frederik.elvhage@googlemail.com>\nWill Holley <willholley@gmail.com>\nUri Gilad <antishok@gmail.com>\nRichard Gibson <richard.gibson@gmail.com>\nSimen Bekkhus <sbekkhus91@gmail.com>\nChen Eshchar <eshcharc@gmail.com>\nBruno Pérel <brunoperel@gmail.com>\nMohammed Alshehri <m@dralshehri.com>\nLisa Seacat DeLuca <ldeluca@us.ibm.com>\nAnne-Gaelle Colom <coloma@westminster.ac.uk>\nAdam Foster <slimfoster@gmail.com>\nLuke Page <luke.a.page@gmail.com>\nDaniel Owens <daniel@matchstickmixup.com>\nMichael Orchard <morchard@scottlogic.co.uk>\nMarcus Warren <marcus@envoke.com>\nNils Heuermann <nils@world-of-scripts.de>\nMarco Ziech <marco@ziech.net>\nPatricia Juarez <patrixd@gmail.com>\nBen Mosher <me@benmosher.com>\nAblay Keldibek <atomio.ak@gmail.com>\nThomas Applencourt <thomas.applencourt@irsamc.ups-tlse.fr>\nJiabao Wu <jiabao.foss@gmail.com>\nEric Lee Carraway <github@ericcarraway.com>\nVictor Homyakov <vkhomyackov@gmail.com>\nMyeongjin Lee <aranet100@gmail.com>\nLiran Sharir <lsharir@gmail.com>\nWeston Ruter <weston@xwp.co>\nMani Mishra <manimishra902@gmail.com>\nHannah Methvin <hannahmethvin@gmail.com>\nLeonardo Balter <leonardo.balter@gmail.com>\nBenjamin Albert <benjamin_a5@yahoo.com>\nMichał Gołębiowski <m.goleb@gmail.com>\nAlyosha Pushak <alyosha.pushak@gmail.com>\nFahad Ahmad <fahadahmad41@hotmail.com>\nMatt Brundage <github@mattbrundage.com>\nFrancesc Baeta <francesc.baeta@gmail.com>\nPiotr Baran <piotros@wp.pl>\nMukul Hase <mukulhase@gmail.com>\nKonstantin Dinev <kdinev@mail.bw.edu>\nRand Scullard <rand@randscullard.com>\nDan Strohl <dan@wjcg.net>\nMaksim Ryzhikov <rv.maksim@gmail.com>\nAmine HADDAD <haddad@allegorie.tv>\nAmanpreet Singh <apsdehal@gmail.com>\nAlexey Balchunas <bleshik@gmail.com>\nPeter Kehl <peter.kehl@gmail.com>\nPeter Dave Hello <hsu@peterdavehello.org>\nJohannes Schäfer <johnschaefer@gmx.de>\nVille Skyttä <ville.skytta@iki.fi>\nRyan Oriecuia <ryan.oriecuia@visioncritical.com>\n"
  },
  {
    "path": "libs/jquery-ui/LICENSE.txt",
    "content": "Copyright jQuery Foundation and other contributors, https://jquery.org/\n\nThis software consists of voluntary contributions made by many\nindividuals. For exact contribution history, see the revision history\navailable at https://github.com/jquery/jquery-ui\n\nThe following license applies to all parts of this software except as\ndocumented below:\n\n====\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n====\n\nCopyright and related rights for sample code are waived via CC0. Sample\ncode is defined as all source code contained within the demos directory.\n\nCC0: http://creativecommons.org/publicdomain/zero/1.0/\n\n====\n\nAll files located in the node_modules and external directories are\nexternally maintained libraries used by this software which have their\nown licenses; we recommend you read them, as their terms may differ from\nthe terms above.\n"
  },
  {
    "path": "libs/jquery-ui/index.html",
    "content": "<!doctype html>\n<html lang=\"us\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>jQuery UI Example Page</title>\n\t<link href=\"jquery-ui.css\" rel=\"stylesheet\">\n\t<style>\n\tbody{\n\t\tfont-family: \"Trebuchet MS\", sans-serif;\n\t\tmargin: 50px;\n\t}\n\t.demoHeaders {\n\t\tmargin-top: 2em;\n\t}\n\t#dialog-link {\n\t\tpadding: .4em 1em .4em 20px;\n\t\ttext-decoration: none;\n\t\tposition: relative;\n\t}\n\t#dialog-link span.ui-icon {\n\t\tmargin: 0 5px 0 0;\n\t\tposition: absolute;\n\t\tleft: .2em;\n\t\ttop: 50%;\n\t\tmargin-top: -8px;\n\t}\n\t#icons {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\t#icons li {\n\t\tmargin: 2px;\n\t\tposition: relative;\n\t\tpadding: 4px 0;\n\t\tcursor: pointer;\n\t\tfloat: left;\n\t\tlist-style: none;\n\t}\n\t#icons span.ui-icon {\n\t\tfloat: left;\n\t\tmargin: 0 4px;\n\t}\n\t.fakewindowcontain .ui-widget-overlay {\n\t\tposition: absolute;\n\t}\n\tselect {\n\t\twidth: 200px;\n\t}\n\t</style>\n</head>\n<body>\n\n<h1>Welcome to jQuery UI!</h1>\n\n<div class=\"ui-widget\">\n\t<p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.</p>\n</div>\n\n<h1>YOUR COMPONENTS:</h1>\n\n\n<!-- Accordion -->\n<h2 class=\"demoHeaders\">Accordion</h2>\n<div id=\"accordion\">\n\t<h3>First</h3>\n\t<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>\n\t<h3>Second</h3>\n\t<div>Phasellus mattis tincidunt nibh.</div>\n\t<h3>Third</h3>\n\t<div>Nam dui erat, auctor a, dignissim quis.</div>\n</div>\n\n\n\n<!-- Autocomplete -->\n<h2 class=\"demoHeaders\">Autocomplete</h2>\n<div>\n\t<input id=\"autocomplete\" title=\"type &quot;a&quot;\">\n</div>\n\n\n\n<!-- Button -->\n<h2 class=\"demoHeaders\">Button</h2>\n<button id=\"button\">A button element</button>\n<button id=\"button-icon\">An icon-only button</button>\n\n\n\n<!-- Checkboxradio -->\n<h2 class=\"demoHeaders\">Checkboxradio</h2>\n<form style=\"margin-top: 1em;\">\n\t<div id=\"radioset\">\n\t\t<input type=\"radio\" id=\"radio1\" name=\"radio\"><label for=\"radio1\">Choice 1</label>\n\t\t<input type=\"radio\" id=\"radio2\" name=\"radio\" checked=\"checked\"><label for=\"radio2\">Choice 2</label>\n\t\t<input type=\"radio\" id=\"radio3\" name=\"radio\"><label for=\"radio3\">Choice 3</label>\n\t</div>\n</form>\n\n\n\n<!-- Controlgroup -->\n<h2 class=\"demoHeaders\">Controlgroup</h2>\n<fieldset>\n\t<legend>Rental Car</legend>\n\t<div id=\"controlgroup\">\n\t\t<select id=\"car-type\">\n\t\t\t<option>Compact car</option>\n\t\t\t<option>Midsize car</option>\n\t\t\t<option>Full size car</option>\n\t\t\t<option>SUV</option>\n\t\t\t<option>Luxury</option>\n\t\t\t<option>Truck</option>\n\t\t\t<option>Van</option>\n\t\t</select>\n\t\t<label for=\"transmission-standard\">Standard</label>\n\t\t<input type=\"radio\" name=\"transmission\" id=\"transmission-standard\">\n\t\t<label for=\"transmission-automatic\">Automatic</label>\n\t\t<input type=\"radio\" name=\"transmission\" id=\"transmission-automatic\">\n\t\t<label for=\"insurance\">Insurance</label>\n\t\t<input type=\"checkbox\" name=\"insurance\" id=\"insurance\">\n\t\t<label for=\"horizontal-spinner\" class=\"ui-controlgroup-label\"># of cars</label>\n\t\t<input id=\"horizontal-spinner\" class=\"ui-spinner-input\">\n\t\t<button>Book Now!</button>\n\t</div>\n</fieldset>\n\n\n\n<!-- Tabs -->\n<h2 class=\"demoHeaders\">Tabs</h2>\n<div id=\"tabs\">\n\t<ul>\n\t\t<li><a href=\"#tabs-1\">First</a></li>\n\t\t<li><a href=\"#tabs-2\">Second</a></li>\n\t\t<li><a href=\"#tabs-3\">Third</a></li>\n\t</ul>\n\t<div id=\"tabs-1\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>\n\t<div id=\"tabs-2\">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>\n\t<div id=\"tabs-3\">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>\n</div>\n\n\n\n<h2 class=\"demoHeaders\">Dialog</h2>\n<p>\n\t<button id=\"dialog-link\" class=\"ui-button ui-corner-all ui-widget\">\n\t\t<span class=\"ui-icon ui-icon-newwin\"></span>Open Dialog\n\t</button>\n</p>\n\n<h2 class=\"demoHeaders\">Overlay and Shadow Classes</h2>\n<div style=\"position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;\" class=\"fakewindowcontain\">\n\t<p>Lorem ipsum dolor sit amet,  Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>\n\n\t<!-- ui-dialog -->\n\t<div class=\"ui-widget-overlay ui-front\"></div>\n\t<div style=\"position: absolute; width: 320px; left: 50px; top: 30px; padding: 1.2em\" class=\"ui-widget ui-front ui-widget-content ui-corner-all ui-widget-shadow\">\n\t\tLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n\t</div>\n\n</div>\n\n<!-- ui-dialog -->\n<div id=\"dialog\" title=\"Dialog Title\">\n\t<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>\n</div>\n\n\n\n<h2 class=\"demoHeaders\">Framework Icons (content color preview)</h2>\n<ul id=\"icons\" class=\"ui-widget ui-helper-clearfix\">\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-n\"><span class=\"ui-icon ui-icon-caret-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-ne\"><span class=\"ui-icon ui-icon-caret-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-e\"><span class=\"ui-icon ui-icon-caret-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-se\"><span class=\"ui-icon ui-icon-caret-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-s\"><span class=\"ui-icon ui-icon-caret-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-sw\"><span class=\"ui-icon ui-icon-caret-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-w\"><span class=\"ui-icon ui-icon-caret-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-nw\"><span class=\"ui-icon ui-icon-caret-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-2-n-s\"><span class=\"ui-icon ui-icon-caret-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-2-e-w\"><span class=\"ui-icon ui-icon-caret-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-n\"><span class=\"ui-icon ui-icon-triangle-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-ne\"><span class=\"ui-icon ui-icon-triangle-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-e\"><span class=\"ui-icon ui-icon-triangle-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-se\"><span class=\"ui-icon ui-icon-triangle-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-s\"><span class=\"ui-icon ui-icon-triangle-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-sw\"><span class=\"ui-icon ui-icon-triangle-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-w\"><span class=\"ui-icon ui-icon-triangle-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-nw\"><span class=\"ui-icon ui-icon-triangle-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-2-n-s\"><span class=\"ui-icon ui-icon-triangle-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-2-e-w\"><span class=\"ui-icon ui-icon-triangle-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-n\"><span class=\"ui-icon ui-icon-arrow-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-ne\"><span class=\"ui-icon ui-icon-arrow-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-e\"><span class=\"ui-icon ui-icon-arrow-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-se\"><span class=\"ui-icon ui-icon-arrow-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-s\"><span class=\"ui-icon ui-icon-arrow-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-sw\"><span class=\"ui-icon ui-icon-arrow-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-w\"><span class=\"ui-icon ui-icon-arrow-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-nw\"><span class=\"ui-icon ui-icon-arrow-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-n-s\"><span class=\"ui-icon ui-icon-arrow-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-ne-sw\"><span class=\"ui-icon ui-icon-arrow-2-ne-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-e-w\"><span class=\"ui-icon ui-icon-arrow-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-se-nw\"><span class=\"ui-icon ui-icon-arrow-2-se-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-n\"><span class=\"ui-icon ui-icon-arrowstop-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-e\"><span class=\"ui-icon ui-icon-arrowstop-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-s\"><span class=\"ui-icon ui-icon-arrowstop-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-w\"><span class=\"ui-icon ui-icon-arrowstop-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-n\"><span class=\"ui-icon ui-icon-arrowthick-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-ne\"><span class=\"ui-icon ui-icon-arrowthick-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-e\"><span class=\"ui-icon ui-icon-arrowthick-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-se\"><span class=\"ui-icon ui-icon-arrowthick-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-s\"><span class=\"ui-icon ui-icon-arrowthick-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-sw\"><span class=\"ui-icon ui-icon-arrowthick-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-w\"><span class=\"ui-icon ui-icon-arrowthick-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-nw\"><span class=\"ui-icon ui-icon-arrowthick-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-n-s\"><span class=\"ui-icon ui-icon-arrowthick-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-ne-sw\"><span class=\"ui-icon ui-icon-arrowthick-2-ne-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-e-w\"><span class=\"ui-icon ui-icon-arrowthick-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-se-nw\"><span class=\"ui-icon ui-icon-arrowthick-2-se-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-n\"><span class=\"ui-icon ui-icon-arrowthickstop-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-e\"><span class=\"ui-icon ui-icon-arrowthickstop-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-s\"><span class=\"ui-icon ui-icon-arrowthickstop-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-w\"><span class=\"ui-icon ui-icon-arrowthickstop-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-w\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-n\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-e\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-s\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-w\"><span class=\"ui-icon ui-icon-arrowreturn-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-n\"><span class=\"ui-icon ui-icon-arrowreturn-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-e\"><span class=\"ui-icon ui-icon-arrowreturn-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-s\"><span class=\"ui-icon ui-icon-arrowreturn-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-w\"><span class=\"ui-icon ui-icon-arrowrefresh-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-n\"><span class=\"ui-icon ui-icon-arrowrefresh-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-e\"><span class=\"ui-icon ui-icon-arrowrefresh-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-s\"><span class=\"ui-icon ui-icon-arrowrefresh-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-4\"><span class=\"ui-icon ui-icon-arrow-4\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-4-diag\"><span class=\"ui-icon ui-icon-arrow-4-diag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-extlink\"><span class=\"ui-icon ui-icon-extlink\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-newwin\"><span class=\"ui-icon ui-icon-newwin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-refresh\"><span class=\"ui-icon ui-icon-refresh\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-shuffle\"><span class=\"ui-icon ui-icon-shuffle\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-transfer-e-w\"><span class=\"ui-icon ui-icon-transfer-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-transferthick-e-w\"><span class=\"ui-icon ui-icon-transferthick-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-folder-collapsed\"><span class=\"ui-icon ui-icon-folder-collapsed\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-folder-open\"><span class=\"ui-icon ui-icon-folder-open\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-document\"><span class=\"ui-icon ui-icon-document\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-document-b\"><span class=\"ui-icon ui-icon-document-b\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-note\"><span class=\"ui-icon ui-icon-note\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-mail-closed\"><span class=\"ui-icon ui-icon-mail-closed\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-mail-open\"><span class=\"ui-icon ui-icon-mail-open\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-suitcase\"><span class=\"ui-icon ui-icon-suitcase\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-comment\"><span class=\"ui-icon ui-icon-comment\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-person\"><span class=\"ui-icon ui-icon-person\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-print\"><span class=\"ui-icon ui-icon-print\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-trash\"><span class=\"ui-icon ui-icon-trash\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-locked\"><span class=\"ui-icon ui-icon-locked\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-unlocked\"><span class=\"ui-icon ui-icon-unlocked\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-bookmark\"><span class=\"ui-icon ui-icon-bookmark\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-tag\"><span class=\"ui-icon ui-icon-tag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-home\"><span class=\"ui-icon ui-icon-home\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-flag\"><span class=\"ui-icon ui-icon-flag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-calculator\"><span class=\"ui-icon ui-icon-calculator\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-cart\"><span class=\"ui-icon ui-icon-cart\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pencil\"><span class=\"ui-icon ui-icon-pencil\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-clock\"><span class=\"ui-icon ui-icon-clock\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-disk\"><span class=\"ui-icon ui-icon-disk\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-calendar\"><span class=\"ui-icon ui-icon-calendar\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-zoomin\"><span class=\"ui-icon ui-icon-zoomin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-zoomout\"><span class=\"ui-icon ui-icon-zoomout\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-search\"><span class=\"ui-icon ui-icon-search\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-wrench\"><span class=\"ui-icon ui-icon-wrench\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-gear\"><span class=\"ui-icon ui-icon-gear\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-heart\"><span class=\"ui-icon ui-icon-heart\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-star\"><span class=\"ui-icon ui-icon-star\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-link\"><span class=\"ui-icon ui-icon-link\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-cancel\"><span class=\"ui-icon ui-icon-cancel\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-plus\"><span class=\"ui-icon ui-icon-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-plusthick\"><span class=\"ui-icon ui-icon-plusthick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-minus\"><span class=\"ui-icon ui-icon-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-minusthick\"><span class=\"ui-icon ui-icon-minusthick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-close\"><span class=\"ui-icon ui-icon-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-closethick\"><span class=\"ui-icon ui-icon-closethick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-key\"><span class=\"ui-icon ui-icon-key\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-lightbulb\"><span class=\"ui-icon ui-icon-lightbulb\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-scissors\"><span class=\"ui-icon ui-icon-scissors\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-clipboard\"><span class=\"ui-icon ui-icon-clipboard\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-copy\"><span class=\"ui-icon ui-icon-copy\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-contact\"><span class=\"ui-icon ui-icon-contact\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-image\"><span class=\"ui-icon ui-icon-image\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-video\"><span class=\"ui-icon ui-icon-video\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-script\"><span class=\"ui-icon ui-icon-script\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-alert\"><span class=\"ui-icon ui-icon-alert\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-info\"><span class=\"ui-icon ui-icon-info\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-notice\"><span class=\"ui-icon ui-icon-notice\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-help\"><span class=\"ui-icon ui-icon-help\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-check\"><span class=\"ui-icon ui-icon-check\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-bullet\"><span class=\"ui-icon ui-icon-bullet\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-radio-off\"><span class=\"ui-icon ui-icon-radio-off\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-radio-on\"><span class=\"ui-icon ui-icon-radio-on\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pin-w\"><span class=\"ui-icon ui-icon-pin-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pin-s\"><span class=\"ui-icon ui-icon-pin-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-play\"><span class=\"ui-icon ui-icon-play\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pause\"><span class=\"ui-icon ui-icon-pause\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-next\"><span class=\"ui-icon ui-icon-seek-next\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-prev\"><span class=\"ui-icon ui-icon-seek-prev\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-end\"><span class=\"ui-icon ui-icon-seek-end\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-first\"><span class=\"ui-icon ui-icon-seek-first\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-stop\"><span class=\"ui-icon ui-icon-stop\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-eject\"><span class=\"ui-icon ui-icon-eject\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-volume-off\"><span class=\"ui-icon ui-icon-volume-off\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-volume-on\"><span class=\"ui-icon ui-icon-volume-on\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-power\"><span class=\"ui-icon ui-icon-power\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-signal-diag\"><span class=\"ui-icon ui-icon-signal-diag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-signal\"><span class=\"ui-icon ui-icon-signal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-0\"><span class=\"ui-icon ui-icon-battery-0\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-1\"><span class=\"ui-icon ui-icon-battery-1\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-2\"><span class=\"ui-icon ui-icon-battery-2\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-3\"><span class=\"ui-icon ui-icon-battery-3\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-plus\"><span class=\"ui-icon ui-icon-circle-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-minus\"><span class=\"ui-icon ui-icon-circle-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-close\"><span class=\"ui-icon ui-icon-circle-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-e\"><span class=\"ui-icon ui-icon-circle-triangle-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-s\"><span class=\"ui-icon ui-icon-circle-triangle-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-w\"><span class=\"ui-icon ui-icon-circle-triangle-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-n\"><span class=\"ui-icon ui-icon-circle-triangle-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-e\"><span class=\"ui-icon ui-icon-circle-arrow-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-s\"><span class=\"ui-icon ui-icon-circle-arrow-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-w\"><span class=\"ui-icon ui-icon-circle-arrow-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-n\"><span class=\"ui-icon ui-icon-circle-arrow-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-zoomin\"><span class=\"ui-icon ui-icon-circle-zoomin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-zoomout\"><span class=\"ui-icon ui-icon-circle-zoomout\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-check\"><span class=\"ui-icon ui-icon-circle-check\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-plus\"><span class=\"ui-icon ui-icon-circlesmall-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-minus\"><span class=\"ui-icon ui-icon-circlesmall-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-close\"><span class=\"ui-icon ui-icon-circlesmall-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-plus\"><span class=\"ui-icon ui-icon-squaresmall-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-minus\"><span class=\"ui-icon ui-icon-squaresmall-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-close\"><span class=\"ui-icon ui-icon-squaresmall-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-dotted-vertical\"><span class=\"ui-icon ui-icon-grip-dotted-vertical\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-dotted-horizontal\"><span class=\"ui-icon ui-icon-grip-dotted-horizontal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-solid-vertical\"><span class=\"ui-icon ui-icon-grip-solid-vertical\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-solid-horizontal\"><span class=\"ui-icon ui-icon-grip-solid-horizontal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-gripsmall-diagonal-se\"><span class=\"ui-icon ui-icon-gripsmall-diagonal-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-diagonal-se\"><span class=\"ui-icon ui-icon-grip-diagonal-se\"></span></li>\n</ul>\n\n\n<!-- Slider -->\n<h2 class=\"demoHeaders\">Slider</h2>\n<div id=\"slider\"></div>\n\n\n\n<!-- Datepicker -->\n<h2 class=\"demoHeaders\">Datepicker</h2>\n<div id=\"datepicker\"></div>\n\n\n\n<!-- Progressbar -->\n<h2 class=\"demoHeaders\">Progressbar</h2>\n<div id=\"progressbar\"></div>\n\n\n\n<!-- Progressbar -->\n<h2 class=\"demoHeaders\">Selectmenu</h2>\n<select id=\"selectmenu\">\n\t<option>Slower</option>\n\t<option>Slow</option>\n\t<option selected=\"selected\">Medium</option>\n\t<option>Fast</option>\n\t<option>Faster</option>\n</select>\n\n\n\n<!-- Spinner -->\n<h2 class=\"demoHeaders\">Spinner</h2>\n<input id=\"spinner\">\n\n\n\n<!-- Menu -->\n<h2 class=\"demoHeaders\">Menu</h2>\n<ul style=\"width:100px;\" id=\"menu\">\n\t<li><div>Item 1</div></li>\n\t<li><div>Item 2</div></li>\n\t<li><div>Item 3</div>\n\t\t<ul>\n\t\t\t<li><div>Item 3-1</div></li>\n\t\t\t<li><div>Item 3-2</div></li>\n\t\t\t<li><div>Item 3-3</div></li>\n\t\t\t<li><div>Item 3-4</div></li>\n\t\t\t<li><div>Item 3-5</div></li>\n\t\t</ul>\n\t</li>\n\t<li><div>Item 4</div></li>\n\t<li><div>Item 5</div></li>\n</ul>\n\n\n\n<!-- Tooltip -->\n<h2 class=\"demoHeaders\">Tooltip</h2>\n<p id=\"tooltip\">\n\t<a href=\"#\" title=\"That&apos;s what this widget is\">Tooltips</a> can be attached to any element. When you hover\nthe element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.\n</p>\n\n\n<!-- Highlight / Error -->\n<h2 class=\"demoHeaders\">Highlight / Error</h2>\n<div class=\"ui-widget\">\n\t<div class=\"ui-state-highlight ui-corner-all\" style=\"margin-top: 20px; padding: 0 .7em;\">\n\t\t<p><span class=\"ui-icon ui-icon-info\" style=\"float: left; margin-right: .3em;\"></span>\n\t\t<strong>Hey!</strong> Sample ui-state-highlight style.</p>\n\t</div>\n</div>\n<br>\n<div class=\"ui-widget\">\n\t<div class=\"ui-state-error ui-corner-all\" style=\"padding: 0 .7em;\">\n\t\t<p><span class=\"ui-icon ui-icon-alert\" style=\"float: left; margin-right: .3em;\"></span>\n\t\t<strong>Alert:</strong> Sample ui-state-error style.</p>\n\t</div>\n</div>\n\n<script src=\"external/jquery/jquery.js\"></script>\n<script src=\"jquery-ui.js\"></script>\n<script>\n\n$( \"#accordion\" ).accordion();\n\n\n\nvar availableTags = [\n\t\"ActionScript\",\n\t\"AppleScript\",\n\t\"Asp\",\n\t\"BASIC\",\n\t\"C\",\n\t\"C++\",\n\t\"Clojure\",\n\t\"COBOL\",\n\t\"ColdFusion\",\n\t\"Erlang\",\n\t\"Fortran\",\n\t\"Groovy\",\n\t\"Haskell\",\n\t\"Java\",\n\t\"JavaScript\",\n\t\"Lisp\",\n\t\"Perl\",\n\t\"PHP\",\n\t\"Python\",\n\t\"Ruby\",\n\t\"Scala\",\n\t\"Scheme\"\n];\n$( \"#autocomplete\" ).autocomplete({\n\tsource: availableTags\n});\n\n\n\n$( \"#button\" ).button();\n$( \"#button-icon\" ).button({\n\ticon: \"ui-icon-gear\",\n\tshowLabel: false\n});\n\n\n\n$( \"#radioset\" ).buttonset();\n\n\n\n$( \"#controlgroup\" ).controlgroup();\n\n\n\n$( \"#tabs\" ).tabs();\n\n\n\n$( \"#dialog\" ).dialog({\n\tautoOpen: false,\n\twidth: 400,\n\tbuttons: [\n\t\t{\n\t\t\ttext: \"Ok\",\n\t\t\tclick: function() {\n\t\t\t\t$( this ).dialog( \"close\" );\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttext: \"Cancel\",\n\t\t\tclick: function() {\n\t\t\t\t$( this ).dialog( \"close\" );\n\t\t\t}\n\t\t}\n\t]\n});\n\n// Link to open the dialog\n$( \"#dialog-link\" ).click(function( event ) {\n\t$( \"#dialog\" ).dialog( \"open\" );\n\tevent.preventDefault();\n});\n\n\n\n$( \"#datepicker\" ).datepicker({\n\tinline: true\n});\n\n\n\n$( \"#slider\" ).slider({\n\trange: true,\n\tvalues: [ 17, 67 ]\n});\n\n\n\n$( \"#progressbar\" ).progressbar({\n\tvalue: 20\n});\n\n\n\n$( \"#spinner\" ).spinner();\n\n\n\n$( \"#menu\" ).menu();\n\n\n\n$( \"#tooltip\" ).tooltip();\n\n\n\n$( \"#selectmenu\" ).selectmenu();\n\n\n// Hover states on the static widgets\n$( \"#dialog-link, #icons li\" ).hover(\n\tfunction() {\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t},\n\tfunction() {\n\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t}\n);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "libs/jquery-ui/jquery-ui.css",
    "content": "/*! jQuery UI - v1.12.1 - 2017-04-16\n* http://jqueryui.com\n* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: 0;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tcursor: pointer;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-item-wrapper {\n\tposition: relative;\n\tpadding: 3px 1em 3px .4em;\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item-wrapper {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-button {\n\tpadding: .4em 1em;\n\tdisplay: inline-block;\n\tposition: relative;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n\t/* Support: IE <= 11 */\n\toverflow: visible;\n}\n\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2em;\n\tbox-sizing: border-box;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n}\n\n/* no icon support for input elements */\ninput.ui-button.ui-button-icon-only {\n\ttext-indent: 0;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -8px;\n\tmargin-left: -8px;\n}\n\n.ui-button.ui-icon-notext .ui-icon {\n\tpadding: 0;\n\twidth: 2.1em;\n\theight: 2.1em;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n\n}\n\ninput.ui-button.ui-icon-notext .ui-icon {\n\twidth: auto;\n\theight: auto;\n\ttext-indent: 0;\n\twhite-space: normal;\n\tpadding: .4em 1em;\n}\n\n/* workarounds */\n/* Support: Firefox 5 - 40 */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-controlgroup {\n\tvertical-align: middle;\n\tdisplay: inline-block;\n}\n.ui-controlgroup > .ui-controlgroup-item {\n\tfloat: left;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n.ui-controlgroup > .ui-controlgroup-item:focus,\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\n\tz-index: 9999;\n}\n.ui-controlgroup-vertical > .ui-controlgroup-item {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\ttext-align: left;\n}\n.ui-controlgroup-vertical .ui-controlgroup-item {\n\tbox-sizing: border-box;\n}\n.ui-controlgroup .ui-controlgroup-label {\n\tpadding: .4em 1em;\n}\n.ui-controlgroup .ui-controlgroup-label span {\n\tfont-size: 80%;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-left: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-top: none;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\n\tborder-right: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\n\tborder-bottom: none;\n}\n\n/* Spinner specific style fixes */\n.ui-controlgroup-vertical .ui-spinner-input {\n\n\t/* Support: IE8 only, Android < 4.4 only */\n\twidth: 75%;\n\twidth: calc( 100% - 2.4em );\n}\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\n\tborder-top-style: solid;\n}\n\n.ui-checkboxradio-label .ui-icon-background {\n\tbox-shadow: inset 1px 1px 1px #ccc;\n\tborder-radius: .12em;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label .ui-icon-background {\n\twidth: 16px;\n\theight: 16px;\n\tborder-radius: 1em;\n\toverflow: visible;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\n\tbackground-image: none;\n\twidth: 8px;\n\theight: 8px;\n\tborder-width: 4px;\n\tborder-style: solid;\n}\n.ui-checkboxradio-disabled {\n\tpointer-events: none;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}\n.ui-dialog {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-n {\n\theight: 2px;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-e {\n\twidth: 2px;\n\tright: 0;\n}\n.ui-dialog .ui-resizable-s {\n\theight: 2px;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-w {\n\twidth: 2px;\n\tleft: 0;\n}\n.ui-dialog .ui-resizable-se,\n.ui-dialog .ui-resizable-sw,\n.ui-dialog .ui-resizable-ne,\n.ui-dialog .ui-resizable-nw {\n\twidth: 7px;\n\theight: 7px;\n}\n.ui-dialog .ui-resizable-se {\n\tright: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-sw {\n\tleft: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-ne {\n\tright: 0;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-nw {\n\tleft: 0;\n\ttop: 0;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,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\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-text {\n\tdisplay: block;\n\tmargin-right: 20px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-selectmenu-button.ui-button {\n\ttext-align: left;\n\twhite-space: nowrap;\n\twidth: 14em;\n}\n.ui-selectmenu-icon.ui-icon {\n\tfloat: right;\n\tmargin-top: 0;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: .222em 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 2em;\n}\n.ui-spinner-button {\n\twidth: 1.6em;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top-style: none;\n\tborder-bottom-style: none;\n\tborder-right-style: none;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #ffffff;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd;\n\tbackground: #e9e9e9;\n\tcolor: #333333;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5;\n\tbackground: #f6f6f6;\n\tfont-weight: normal;\n\tcolor: #454545;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc;\n\tbackground: #ededed;\n\tfont-weight: normal;\n\tcolor: #2b2b2b;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff;\n\tbackground: #007fff;\n\tfont-weight: normal;\n\tcolor: #ffffff;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff;\n\tbackground-color: #ffffff;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n\tcolor: #777620;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899;\n\tbackground: #fddfdf;\n\tcolor: #5f3f3f;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url(\"images/ui-icons_555555_256x240.png\");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffffff_256x240.png\");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url(\"images/ui-icons_777620_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"images/ui-icons_cc0000_256x240.png\");\n}\n.ui-button .ui-icon {\n\tbackground-image: url(\"images/ui-icons_777777_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa;\n\topacity: .3;\n\tfilter: Alpha(Opacity=30); /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0px 0px 5px #666666;\n\tbox-shadow: 0px 0px 5px #666666;\n}\n"
  },
  {
    "path": "libs/jquery-ui/jquery-ui.structure.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: 0;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tcursor: pointer;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-item-wrapper {\n\tposition: relative;\n\tpadding: 3px 1em 3px .4em;\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item-wrapper {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-button {\n\tpadding: .4em 1em;\n\tdisplay: inline-block;\n\tposition: relative;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n\t/* Support: IE <= 11 */\n\toverflow: visible;\n}\n\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2em;\n\tbox-sizing: border-box;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n}\n\n/* no icon support for input elements */\ninput.ui-button.ui-button-icon-only {\n\ttext-indent: 0;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -8px;\n\tmargin-left: -8px;\n}\n\n.ui-button.ui-icon-notext .ui-icon {\n\tpadding: 0;\n\twidth: 2.1em;\n\theight: 2.1em;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n\n}\n\ninput.ui-button.ui-icon-notext .ui-icon {\n\twidth: auto;\n\theight: auto;\n\ttext-indent: 0;\n\twhite-space: normal;\n\tpadding: .4em 1em;\n}\n\n/* workarounds */\n/* Support: Firefox 5 - 40 */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-controlgroup {\n\tvertical-align: middle;\n\tdisplay: inline-block;\n}\n.ui-controlgroup > .ui-controlgroup-item {\n\tfloat: left;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n.ui-controlgroup > .ui-controlgroup-item:focus,\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\n\tz-index: 9999;\n}\n.ui-controlgroup-vertical > .ui-controlgroup-item {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\ttext-align: left;\n}\n.ui-controlgroup-vertical .ui-controlgroup-item {\n\tbox-sizing: border-box;\n}\n.ui-controlgroup .ui-controlgroup-label {\n\tpadding: .4em 1em;\n}\n.ui-controlgroup .ui-controlgroup-label span {\n\tfont-size: 80%;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-left: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-top: none;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\n\tborder-right: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\n\tborder-bottom: none;\n}\n\n/* Spinner specific style fixes */\n.ui-controlgroup-vertical .ui-spinner-input {\n\n\t/* Support: IE8 only, Android < 4.4 only */\n\twidth: 75%;\n\twidth: calc( 100% - 2.4em );\n}\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\n\tborder-top-style: solid;\n}\n\n.ui-checkboxradio-label .ui-icon-background {\n\tbox-shadow: inset 1px 1px 1px #ccc;\n\tborder-radius: .12em;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label .ui-icon-background {\n\twidth: 16px;\n\theight: 16px;\n\tborder-radius: 1em;\n\toverflow: visible;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\n\tbackground-image: none;\n\twidth: 8px;\n\theight: 8px;\n\tborder-width: 4px;\n\tborder-style: solid;\n}\n.ui-checkboxradio-disabled {\n\tpointer-events: none;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}\n.ui-dialog {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-n {\n\theight: 2px;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-e {\n\twidth: 2px;\n\tright: 0;\n}\n.ui-dialog .ui-resizable-s {\n\theight: 2px;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-w {\n\twidth: 2px;\n\tleft: 0;\n}\n.ui-dialog .ui-resizable-se,\n.ui-dialog .ui-resizable-sw,\n.ui-dialog .ui-resizable-ne,\n.ui-dialog .ui-resizable-nw {\n\twidth: 7px;\n\theight: 7px;\n}\n.ui-dialog .ui-resizable-se {\n\tright: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-sw {\n\tleft: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-ne {\n\tright: 0;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-nw {\n\tleft: 0;\n\ttop: 0;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,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\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-text {\n\tdisplay: block;\n\tmargin-right: 20px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-selectmenu-button.ui-button {\n\ttext-align: left;\n\twhite-space: nowrap;\n\twidth: 14em;\n}\n.ui-selectmenu-icon.ui-icon {\n\tfloat: right;\n\tmargin-top: 0;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: .222em 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 2em;\n}\n.ui-spinner-button {\n\twidth: 1.6em;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top-style: none;\n\tborder-bottom-style: none;\n\tborder-right-style: none;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n"
  },
  {
    "path": "libs/jquery-ui/jquery-ui.theme.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif\n */\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #ffffff;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd;\n\tbackground: #e9e9e9;\n\tcolor: #333333;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5;\n\tbackground: #f6f6f6;\n\tfont-weight: normal;\n\tcolor: #454545;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc;\n\tbackground: #ededed;\n\tfont-weight: normal;\n\tcolor: #2b2b2b;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff;\n\tbackground: #007fff;\n\tfont-weight: normal;\n\tcolor: #ffffff;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff;\n\tbackground-color: #ffffff;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n\tcolor: #777620;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899;\n\tbackground: #fddfdf;\n\tcolor: #5f3f3f;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url(\"images/ui-icons_555555_256x240.png\");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffffff_256x240.png\");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url(\"images/ui-icons_777620_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"images/ui-icons_cc0000_256x240.png\");\n}\n.ui-button .ui-icon {\n\tbackground-image: url(\"images/ui-icons_777777_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa;\n\topacity: .3;\n\tfilter: Alpha(Opacity=30); /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0px 0px 5px #666666;\n\tbox-shadow: 0px 0px 5px #666666;\n}\n"
  },
  {
    "path": "libs/jquery-ui/package.json",
    "content": "{\n\t\"name\": \"jquery-ui\",\n\t\"title\": \"jQuery UI\",\n\t\"description\": \"A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.\",\n\t\"version\": \"1.12.1\",\n\t\"homepage\": \"http://jqueryui.com\",\n\t\"author\": {\n\t\t\"name\": \"jQuery Foundation and other contributors\",\n\t\t\"url\": \"https://github.com/jquery/jquery-ui/blob/1.12.1/AUTHORS.txt\"\n\t},\n\t\"main\": \"ui/widget.js\",\n\t\"maintainers\": [\n\t\t{\n\t\t\t\"name\": \"Scott González\",\n\t\t\t\"email\": \"scott.gonzalez@gmail.com\",\n\t\t\t\"url\": \"http://scottgonzalez.com\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Jörn Zaefferer\",\n\t\t\t\"email\": \"joern.zaefferer@gmail.com\",\n\t\t\t\"url\": \"http://bassistance.de\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Mike Sherov\",\n\t\t\t\"email\": \"mike.sherov@gmail.com\",\n\t\t\t\"url\": \"http://mike.sherov.com\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"TJ VanToll\",\n\t\t\t\"email\": \"tj.vantoll@gmail.com\",\n\t\t\t\"url\": \"http://tjvantoll.com\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Felix Nagel\",\n\t\t\t\"email\": \"info@felixnagel.com\",\n\t\t\t\"url\": \"http://www.felixnagel.com\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Alex Schmitz\",\n\t\t\t\"email\": \"arschmitz@gmail.com\",\n\t\t\t\"url\": \"https://github.com/arschmitz\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git://github.com/jquery/jquery-ui.git\"\n\t},\n\t\"bugs\": \"https://bugs.jqueryui.com/\",\n\t\"license\": \"MIT\",\n\t\"scripts\": {\n\t\t\"test\": \"grunt\"\n\t},\n\t\"dependencies\": {},\n\t\"devDependencies\": {\n\t\t\"commitplease\": \"2.3.0\",\n\t\t\"grunt\": \"0.4.5\",\n\t\t\"grunt-bowercopy\": \"1.2.4\",\n\t\t\"grunt-cli\": \"0.1.13\",\n\t\t\"grunt-compare-size\": \"0.4.0\",\n\t\t\"grunt-contrib-concat\": \"0.5.1\",\n\t\t\"grunt-contrib-csslint\": \"0.5.0\",\n\t\t\"grunt-contrib-jshint\": \"0.12.0\",\n\t\t\"grunt-contrib-qunit\": \"1.0.1\",\n\t\t\"grunt-contrib-requirejs\": \"0.4.4\",\n\t\t\"grunt-contrib-uglify\": \"0.11.1\",\n\t\t\"grunt-git-authors\": \"3.1.0\",\n\t\t\"grunt-html\": \"6.0.0\",\n\t\t\"grunt-jscs\": \"2.1.0\",\n\t\t\"load-grunt-tasks\": \"3.4.0\",\n\t\t\"rimraf\": \"2.5.1\",\n\t\t\"testswarm\": \"1.1.0\"\n\t},\n\t\"keywords\": []\n}\n"
  },
  {
    "path": "libs/json5-2.1.3/LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2012-2018 Aseem Kishore, and [others].\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n[others]: https://github.com/json5/json5/contributors\n"
  },
  {
    "path": "libs/json5-2.1.3/README.md",
    "content": "# JSON5 – JSON for Humans\n\n[![Build Status](https://travis-ci.org/json5/json5.svg)][Build Status]\n[![Coverage\nStatus](https://coveralls.io/repos/github/json5/json5/badge.svg)][Coverage\nStatus]\n\nThe JSON5 Data Interchange Format (JSON5) is a superset of [JSON] that aims to\nalleviate some of the limitations of JSON by expanding its syntax to include\nsome productions from [ECMAScript 5.1].\n\nThis JavaScript library is the official reference implementation for JSON5\nparsing and serialization libraries.\n\n[Build Status]: https://travis-ci.org/json5/json5\n\n[Coverage Status]: https://coveralls.io/github/json5/json5\n\n[JSON]: https://tools.ietf.org/html/rfc7159\n\n[ECMAScript 5.1]: https://www.ecma-international.org/ecma-262/5.1/\n\n## Summary of Features\nThe following ECMAScript 5.1 features, which are not supported in JSON, have\nbeen extended to JSON5.\n\n### Objects\n- Object keys may be an ECMAScript 5.1 _[IdentifierName]_.\n- Objects may have a single trailing comma.\n\n### Arrays\n- Arrays may have a single trailing comma.\n\n### Strings\n- Strings may be single quoted.\n- Strings may span multiple lines by escaping new line characters.\n- Strings may include character escapes.\n\n### Numbers\n- Numbers may be hexadecimal.\n- Numbers may have a leading or trailing decimal point.\n- Numbers may be [IEEE 754] positive infinity, negative infinity, and NaN.\n- Numbers may begin with an explicit plus sign.\n\n### Comments\n- Single and multi-line comments are allowed.\n\n### White Space\n- Additional white space characters are allowed.\n\n[IdentifierName]: https://www.ecma-international.org/ecma-262/5.1/#sec-7.6\n\n[IEEE 754]: http://ieeexplore.ieee.org/servlet/opac?punumber=4610933\n\n## Short Example\n```js\n{\n  // comments\n  unquoted: 'and you can quote me on that',\n  singleQuotes: 'I can use \"double quotes\" here',\n  lineBreaks: \"Look, Mom! \\\nNo \\\\n's!\",\n  hexadecimal: 0xdecaf,\n  leadingDecimalPoint: .8675309, andTrailing: 8675309.,\n  positiveSign: +1,\n  trailingComma: 'in objects', andIn: ['arrays',],\n  \"backwardsCompatible\": \"with JSON\",\n}\n```\n\n## Specification\nFor a detailed explanation of the JSON5 format, please read the [official\nspecification](https://json5.github.io/json5-spec/).\n\n## Installation\n### Node.js\n```sh\nnpm install json5\n```\n\n```js\nconst JSON5 = require('json5')\n```\n\n### Browsers\n```html\n<script src=\"https://unpkg.com/json5@^2.0.0/dist/index.min.js\"></script>\n```\n\nThis will create a global `JSON5` variable.\n\n## API\nThe JSON5 API is compatible with the [JSON API].\n\n[JSON API]:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON\n\n### JSON5.parse()\nParses a JSON5 string, constructing the JavaScript value or object described by\nthe string. An optional reviver function can be provided to perform a\ntransformation on the resulting object before it is returned.\n\n#### Syntax\n    JSON5.parse(text[, reviver])\n\n#### Parameters\n- `text`: The string to parse as JSON5.\n- `reviver`: If a function, this prescribes how the value originally produced by\n  parsing is transformed, before being returned.\n\n#### Return value\nThe object corresponding to the given JSON5 text.\n\n### JSON5.stringify()\nConverts a JavaScript value to a JSON5 string, optionally replacing values if a\nreplacer function is specified, or optionally including only the specified\nproperties if a replacer array is specified.\n\n#### Syntax\n    JSON5.stringify(value[, replacer[, space]])\n    JSON5.stringify(value[, options])\n\n#### Parameters\n- `value`: The value to convert to a JSON5 string.\n- `replacer`: A function that alters the behavior of the stringification\n  process, or an array of String and Number objects that serve as a whitelist\n  for selecting/filtering the properties of the value object to be included in\n  the JSON5 string. If this value is null or not provided, all properties of the\n  object are included in the resulting JSON5 string.\n- `space`: A String or Number object that's used to insert white space into the\n  output JSON5 string for readability purposes. If this is a Number, it\n  indicates the number of space characters to use as white space; this number is\n  capped at 10 (if it is greater, the value is just 10). Values less than 1\n  indicate that no space should be used. If this is a String, the string (or the\n  first 10 characters of the string, if it's longer than that) is used as white\n  space. If this parameter is not provided (or is null), no white space is used.\n  If white space is used, trailing commas will be used in objects and arrays.\n- `options`: An object with the following properties:\n  - `replacer`: Same as the `replacer` parameter.\n  - `space`: Same as the `space` parameter.\n  - `quote`: A String representing the quote character to use when serializing\n    strings.\n\n#### Return value\nA JSON5 string representing the value.\n\n### Node.js `require()` JSON5 files\nWhen using Node.js, you can `require()` JSON5 files by adding the following\nstatement.\n\n```js\nrequire('json5/lib/register')\n```\n\nThen you can load a JSON5 file with a Node.js `require()` statement. For\nexample:\n\n```js\nconst config = require('./config.json5')\n```\n\n## CLI\nSince JSON is more widely used than JSON5, this package includes a CLI for\nconverting JSON5 to JSON and for validating the syntax of JSON5 documents.\n\n### Installation\n```sh\nnpm install --global json5\n```\n\n### Usage\n```sh\njson5 [options] <file>\n```\n\nIf `<file>` is not provided, then STDIN is used.\n\n#### Options:\n- `-s`, `--space`: The number of spaces to indent or `t` for tabs\n- `-o`, `--out-file [file]`: Output to the specified file, otherwise STDOUT\n- `-v`, `--validate`: Validate JSON5 but do not output JSON\n- `-V`, `--version`: Output the version number\n- `-h`, `--help`: Output usage information\n\n## Contributing\n### Development\n```sh\ngit clone https://github.com/json5/json5\ncd json5\nnpm install\n```\n\nWhen contributing code, please write relevant tests and run `npm test` and `npm\nrun lint` before submitting pull requests. Please use an editor that supports\n[EditorConfig](http://editorconfig.org/).\n\n### Issues\nTo report bugs or request features regarding the JSON5 data format, please\nsubmit an issue to the [official specification\nrepository](https://github.com/json5/json5-spec).\n\nTo report bugs or request features regarding the JavaScript implementation of\nJSON5, please submit an issue to this repository.\n\n## License\nMIT. See [LICENSE.md](./LICENSE.md) for details.\n\n## Credits\n[Assem Kishore](https://github.com/aseemk) founded this project.\n\n[Michael Bolin](http://bolinfest.com/) independently arrived at and published\nsome of these same ideas with awesome explanations and detail. Recommended\nreading: [Suggested Improvements to JSON](http://bolinfest.com/essays/json.html)\n\n[Douglas Crockford](http://www.crockford.com/) of course designed and built\nJSON, but his state machine diagrams on the [JSON website](http://json.org/), as\ncheesy as it may sound, gave us motivation and confidence that building a new\nparser to implement these ideas was within reach! The original\nimplementation of JSON5 was also modeled directly off of Doug’s open-source\n[json_parse.js] parser. We’re grateful for that clean and well-documented\ncode.\n\n[json_parse.js]:\nhttps://github.com/douglascrockford/JSON-js/blob/03157639c7a7cddd2e9f032537f346f1a87c0f6d/json_parse.js\n\n[Max Nanasy](https://github.com/MaxNanasy) has been an early and prolific\nsupporter, contributing multiple patches and ideas.\n\n[Andrew Eisenberg](https://github.com/aeisenberg) contributed the original\n`stringify` method.\n\n[Jordan Tucker](https://github.com/jordanbtucker) has aligned JSON5 more closely\nwith ES5, wrote the official JSON5 specification, completely rewrote the\ncodebase from the ground up, and is actively maintaining this project.\n"
  },
  {
    "path": "libs/json5-2.1.3/json5.mjs",
    "content": "// This is a generated file. Do not edit.\nvar Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nvar ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/;\nvar ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nvar unicode = {\n\tSpace_Separator: Space_Separator,\n\tID_Start: ID_Start,\n\tID_Continue: ID_Continue\n};\n\nvar util = {\n    isSpaceSeparator (c) {\n        return typeof c === 'string' && unicode.Space_Separator.test(c)\n    },\n\n    isIdStartChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c === '$') || (c === '_') ||\n        unicode.ID_Start.test(c)\n        )\n    },\n\n    isIdContinueChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c >= '0' && c <= '9') ||\n        (c === '$') || (c === '_') ||\n        (c === '\\u200C') || (c === '\\u200D') ||\n        unicode.ID_Continue.test(c)\n        )\n    },\n\n    isDigit (c) {\n        return typeof c === 'string' && /[0-9]/.test(c)\n    },\n\n    isHexDigit (c) {\n        return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n    },\n};\n\nlet source;\nlet parseState;\nlet stack;\nlet pos;\nlet line;\nlet column;\nlet token;\nlet key;\nlet root;\n\nvar parse = function parse (text, reviver) {\n    source = String(text);\n    parseState = 'start';\n    stack = [];\n    pos = 0;\n    line = 1;\n    column = 0;\n    token = undefined;\n    key = undefined;\n    root = undefined;\n\n    do {\n        token = lex();\n\n        // This code is unreachable.\n        // if (!parseStates[parseState]) {\n        //     throw invalidParseState()\n        // }\n\n        parseStates[parseState]();\n    } while (token.type !== 'eof')\n\n    if (typeof reviver === 'function') {\n        return internalize({'': root}, '', reviver)\n    }\n\n    return root\n};\n\nfunction internalize (holder, name, reviver) {\n    const value = holder[name];\n    if (value != null && typeof value === 'object') {\n        for (const key in value) {\n            const replacement = internalize(value, key, reviver);\n            if (replacement === undefined) {\n                delete value[key];\n            } else {\n                value[key] = replacement;\n            }\n        }\n    }\n\n    return reviver.call(holder, name, value)\n}\n\nlet lexState;\nlet buffer;\nlet doubleQuote;\nlet sign;\nlet c;\n\nfunction lex () {\n    lexState = 'default';\n    buffer = '';\n    doubleQuote = false;\n    sign = 1;\n\n    for (;;) {\n        c = peek();\n\n        // This code is unreachable.\n        // if (!lexStates[lexState]) {\n        //     throw invalidLexState(lexState)\n        // }\n\n        const token = lexStates[lexState]();\n        if (token) {\n            return token\n        }\n    }\n}\n\nfunction peek () {\n    if (source[pos]) {\n        return String.fromCodePoint(source.codePointAt(pos))\n    }\n}\n\nfunction read () {\n    const c = peek();\n\n    if (c === '\\n') {\n        line++;\n        column = 0;\n    } else if (c) {\n        column += c.length;\n    } else {\n        column++;\n    }\n\n    if (c) {\n        pos += c.length;\n    }\n\n    return c\n}\n\nconst lexStates = {\n    default () {\n        switch (c) {\n        case '\\t':\n        case '\\v':\n        case '\\f':\n        case ' ':\n        case '\\u00A0':\n        case '\\uFEFF':\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read();\n            return\n\n        case '/':\n            read();\n            lexState = 'comment';\n            return\n\n        case undefined:\n            read();\n            return newToken('eof')\n        }\n\n        if (util.isSpaceSeparator(c)) {\n            read();\n            return\n        }\n\n        // This code is unreachable.\n        // if (!lexStates[parseState]) {\n        //     throw invalidLexState(parseState)\n        // }\n\n        return lexStates[parseState]()\n    },\n\n    comment () {\n        switch (c) {\n        case '*':\n            read();\n            lexState = 'multiLineComment';\n            return\n\n        case '/':\n            read();\n            lexState = 'singleLineComment';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    multiLineComment () {\n        switch (c) {\n        case '*':\n            read();\n            lexState = 'multiLineCommentAsterisk';\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read();\n    },\n\n    multiLineCommentAsterisk () {\n        switch (c) {\n        case '*':\n            read();\n            return\n\n        case '/':\n            read();\n            lexState = 'default';\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read();\n        lexState = 'multiLineComment';\n    },\n\n    singleLineComment () {\n        switch (c) {\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read();\n            lexState = 'default';\n            return\n\n        case undefined:\n            read();\n            return newToken('eof')\n        }\n\n        read();\n    },\n\n    value () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        case 'n':\n            read();\n            literal('ull');\n            return newToken('null', null)\n\n        case 't':\n            read();\n            literal('rue');\n            return newToken('boolean', true)\n\n        case 'f':\n            read();\n            literal('alse');\n            return newToken('boolean', false)\n\n        case '-':\n        case '+':\n            if (read() === '-') {\n                sign = -1;\n            }\n\n            lexState = 'sign';\n            return\n\n        case '.':\n            buffer = read();\n            lexState = 'decimalPointLeading';\n            return\n\n        case '0':\n            buffer = read();\n            lexState = 'zero';\n            return\n\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            buffer = read();\n            lexState = 'decimalInteger';\n            return\n\n        case 'I':\n            read();\n            literal('nfinity');\n            return newToken('numeric', Infinity)\n\n        case 'N':\n            read();\n            literal('aN');\n            return newToken('numeric', NaN)\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"');\n            buffer = '';\n            lexState = 'string';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    identifierNameStartEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read();\n        const u = unicodeEscape();\n        switch (u) {\n        case '$':\n        case '_':\n            break\n\n        default:\n            if (!util.isIdStartChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u;\n        lexState = 'identifierName';\n    },\n\n    identifierName () {\n        switch (c) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            buffer += read();\n            return\n\n        case '\\\\':\n            read();\n            lexState = 'identifierNameEscape';\n            return\n        }\n\n        if (util.isIdContinueChar(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('identifier', buffer)\n    },\n\n    identifierNameEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read();\n        const u = unicodeEscape();\n        switch (u) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            break\n\n        default:\n            if (!util.isIdContinueChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u;\n        lexState = 'identifierName';\n    },\n\n    sign () {\n        switch (c) {\n        case '.':\n            buffer = read();\n            lexState = 'decimalPointLeading';\n            return\n\n        case '0':\n            buffer = read();\n            lexState = 'zero';\n            return\n\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9':\n            buffer = read();\n            lexState = 'decimalInteger';\n            return\n\n        case 'I':\n            read();\n            literal('nfinity');\n            return newToken('numeric', sign * Infinity)\n\n        case 'N':\n            read();\n            literal('aN');\n            return newToken('numeric', NaN)\n        }\n\n        throw invalidChar(read())\n    },\n\n    zero () {\n        switch (c) {\n        case '.':\n            buffer += read();\n            lexState = 'decimalPoint';\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read();\n            lexState = 'decimalExponent';\n            return\n\n        case 'x':\n        case 'X':\n            buffer += read();\n            lexState = 'hexadecimal';\n            return\n        }\n\n        return newToken('numeric', sign * 0)\n    },\n\n    decimalInteger () {\n        switch (c) {\n        case '.':\n            buffer += read();\n            lexState = 'decimalPoint';\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read();\n            lexState = 'decimalExponent';\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalPointLeading () {\n        if (util.isDigit(c)) {\n            buffer += read();\n            lexState = 'decimalFraction';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalPoint () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read();\n            lexState = 'decimalExponent';\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read();\n            lexState = 'decimalFraction';\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalFraction () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read();\n            lexState = 'decimalExponent';\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalExponent () {\n        switch (c) {\n        case '+':\n        case '-':\n            buffer += read();\n            lexState = 'decimalExponentSign';\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read();\n            lexState = 'decimalExponentInteger';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentSign () {\n        if (util.isDigit(c)) {\n            buffer += read();\n            lexState = 'decimalExponentInteger';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentInteger () {\n        if (util.isDigit(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    hexadecimal () {\n        if (util.isHexDigit(c)) {\n            buffer += read();\n            lexState = 'hexadecimalInteger';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    hexadecimalInteger () {\n        if (util.isHexDigit(c)) {\n            buffer += read();\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    string () {\n        switch (c) {\n        case '\\\\':\n            read();\n            buffer += escape();\n            return\n\n        case '\"':\n            if (doubleQuote) {\n                read();\n                return newToken('string', buffer)\n            }\n\n            buffer += read();\n            return\n\n        case \"'\":\n            if (!doubleQuote) {\n                read();\n                return newToken('string', buffer)\n            }\n\n            buffer += read();\n            return\n\n        case '\\n':\n        case '\\r':\n            throw invalidChar(read())\n\n        case '\\u2028':\n        case '\\u2029':\n            separatorChar(c);\n            break\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        buffer += read();\n    },\n\n    start () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        // This code is unreachable since the default lexState handles eof.\n        // case undefined:\n        //     return newToken('eof')\n        }\n\n        lexState = 'value';\n    },\n\n    beforePropertyName () {\n        switch (c) {\n        case '$':\n        case '_':\n            buffer = read();\n            lexState = 'identifierName';\n            return\n\n        case '\\\\':\n            read();\n            lexState = 'identifierNameStartEscape';\n            return\n\n        case '}':\n            return newToken('punctuator', read())\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"');\n            lexState = 'string';\n            return\n        }\n\n        if (util.isIdStartChar(c)) {\n            buffer += read();\n            lexState = 'identifierName';\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    afterPropertyName () {\n        if (c === ':') {\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforePropertyValue () {\n        lexState = 'value';\n    },\n\n    afterPropertyValue () {\n        switch (c) {\n        case ',':\n        case '}':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforeArrayValue () {\n        if (c === ']') {\n            return newToken('punctuator', read())\n        }\n\n        lexState = 'value';\n    },\n\n    afterArrayValue () {\n        switch (c) {\n        case ',':\n        case ']':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the default lexState.\n        // if (c === undefined) {\n        //     read()\n        //     return newToken('eof')\n        // }\n\n        throw invalidChar(read())\n    },\n};\n\nfunction newToken (type, value) {\n    return {\n        type,\n        value,\n        line,\n        column,\n    }\n}\n\nfunction literal (s) {\n    for (const c of s) {\n        const p = peek();\n\n        if (p !== c) {\n            throw invalidChar(read())\n        }\n\n        read();\n    }\n}\n\nfunction escape () {\n    const c = peek();\n    switch (c) {\n    case 'b':\n        read();\n        return '\\b'\n\n    case 'f':\n        read();\n        return '\\f'\n\n    case 'n':\n        read();\n        return '\\n'\n\n    case 'r':\n        read();\n        return '\\r'\n\n    case 't':\n        read();\n        return '\\t'\n\n    case 'v':\n        read();\n        return '\\v'\n\n    case '0':\n        read();\n        if (util.isDigit(peek())) {\n            throw invalidChar(read())\n        }\n\n        return '\\0'\n\n    case 'x':\n        read();\n        return hexEscape()\n\n    case 'u':\n        read();\n        return unicodeEscape()\n\n    case '\\n':\n    case '\\u2028':\n    case '\\u2029':\n        read();\n        return ''\n\n    case '\\r':\n        read();\n        if (peek() === '\\n') {\n            read();\n        }\n\n        return ''\n\n    case '1':\n    case '2':\n    case '3':\n    case '4':\n    case '5':\n    case '6':\n    case '7':\n    case '8':\n    case '9':\n        throw invalidChar(read())\n\n    case undefined:\n        throw invalidChar(read())\n    }\n\n    return read()\n}\n\nfunction hexEscape () {\n    let buffer = '';\n    let c = peek();\n\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read();\n\n    c = peek();\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read();\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n    let buffer = '';\n    let count = 4;\n\n    while (count-- > 0) {\n        const c = peek();\n        if (!util.isHexDigit(c)) {\n            throw invalidChar(read())\n        }\n\n        buffer += read();\n    }\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n    start () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push();\n    },\n\n    beforePropertyName () {\n        switch (token.type) {\n        case 'identifier':\n        case 'string':\n            key = token.value;\n            parseState = 'afterPropertyName';\n            return\n\n        case 'punctuator':\n            // This code is unreachable since it's handled by the lexState.\n            // if (token.value !== '}') {\n            //     throw invalidToken()\n            // }\n\n            pop();\n            return\n\n        case 'eof':\n            throw invalidEOF()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterPropertyName () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator' || token.value !== ':') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        parseState = 'beforePropertyValue';\n    },\n\n    beforePropertyValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push();\n    },\n\n    beforeArrayValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        if (token.type === 'punctuator' && token.value === ']') {\n            pop();\n            return\n        }\n\n        push();\n    },\n\n    afterPropertyValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforePropertyName';\n            return\n\n        case '}':\n            pop();\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterArrayValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforeArrayValue';\n            return\n\n        case ']':\n            pop();\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'eof') {\n        //     throw invalidToken()\n        // }\n    },\n};\n\nfunction push () {\n    let value;\n\n    switch (token.type) {\n    case 'punctuator':\n        switch (token.value) {\n        case '{':\n            value = {};\n            break\n\n        case '[':\n            value = [];\n            break\n        }\n\n        break\n\n    case 'null':\n    case 'boolean':\n    case 'numeric':\n    case 'string':\n        value = token.value;\n        break\n\n    // This code is unreachable.\n    // default:\n    //     throw invalidToken()\n    }\n\n    if (root === undefined) {\n        root = value;\n    } else {\n        const parent = stack[stack.length - 1];\n        if (Array.isArray(parent)) {\n            parent.push(value);\n        } else {\n            parent[key] = value;\n        }\n    }\n\n    if (value !== null && typeof value === 'object') {\n        stack.push(value);\n\n        if (Array.isArray(value)) {\n            parseState = 'beforeArrayValue';\n        } else {\n            parseState = 'beforePropertyName';\n        }\n    } else {\n        const current = stack[stack.length - 1];\n        if (current == null) {\n            parseState = 'end';\n        } else if (Array.isArray(current)) {\n            parseState = 'afterArrayValue';\n        } else {\n            parseState = 'afterPropertyValue';\n        }\n    }\n}\n\nfunction pop () {\n    stack.pop();\n\n    const current = stack[stack.length - 1];\n    if (current == null) {\n        parseState = 'end';\n    } else if (Array.isArray(current)) {\n        parseState = 'afterArrayValue';\n    } else {\n        parseState = 'afterPropertyValue';\n    }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n//     return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n//     return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n    if (c === undefined) {\n        return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n    }\n\n    return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n    return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n//     if (token.type === 'eof') {\n//         return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n//     }\n\n//     const c = String.fromCodePoint(token.value.codePointAt(0))\n//     return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n    column -= 5;\n    return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n    console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`);\n}\n\nfunction formatChar (c) {\n    const replacements = {\n        \"'\": \"\\\\'\",\n        '\"': '\\\\\"',\n        '\\\\': '\\\\\\\\',\n        '\\b': '\\\\b',\n        '\\f': '\\\\f',\n        '\\n': '\\\\n',\n        '\\r': '\\\\r',\n        '\\t': '\\\\t',\n        '\\v': '\\\\v',\n        '\\0': '\\\\0',\n        '\\u2028': '\\\\u2028',\n        '\\u2029': '\\\\u2029',\n    };\n\n    if (replacements[c]) {\n        return replacements[c]\n    }\n\n    if (c < ' ') {\n        const hexString = c.charCodeAt(0).toString(16);\n        return '\\\\x' + ('00' + hexString).substring(hexString.length)\n    }\n\n    return c\n}\n\nfunction syntaxError (message) {\n    const err = new SyntaxError(message);\n    err.lineNumber = line;\n    err.columnNumber = column;\n    return err\n}\n\nvar stringify = function stringify (value, replacer, space) {\n    const stack = [];\n    let indent = '';\n    let propertyList;\n    let replacerFunc;\n    let gap = '';\n    let quote;\n\n    if (\n        replacer != null &&\n        typeof replacer === 'object' &&\n        !Array.isArray(replacer)\n    ) {\n        space = replacer.space;\n        quote = replacer.quote;\n        replacer = replacer.replacer;\n    }\n\n    if (typeof replacer === 'function') {\n        replacerFunc = replacer;\n    } else if (Array.isArray(replacer)) {\n        propertyList = [];\n        for (const v of replacer) {\n            let item;\n\n            if (typeof v === 'string') {\n                item = v;\n            } else if (\n                typeof v === 'number' ||\n                v instanceof String ||\n                v instanceof Number\n            ) {\n                item = String(v);\n            }\n\n            if (item !== undefined && propertyList.indexOf(item) < 0) {\n                propertyList.push(item);\n            }\n        }\n    }\n\n    if (space instanceof Number) {\n        space = Number(space);\n    } else if (space instanceof String) {\n        space = String(space);\n    }\n\n    if (typeof space === 'number') {\n        if (space > 0) {\n            space = Math.min(10, Math.floor(space));\n            gap = '          '.substr(0, space);\n        }\n    } else if (typeof space === 'string') {\n        gap = space.substr(0, 10);\n    }\n\n    return serializeProperty('', {'': value})\n\n    function serializeProperty (key, holder) {\n        let value = holder[key];\n        if (value != null) {\n            if (typeof value.toJSON5 === 'function') {\n                value = value.toJSON5(key);\n            } else if (typeof value.toJSON === 'function') {\n                value = value.toJSON(key);\n            }\n        }\n\n        if (replacerFunc) {\n            value = replacerFunc.call(holder, key, value);\n        }\n\n        if (value instanceof Number) {\n            value = Number(value);\n        } else if (value instanceof String) {\n            value = String(value);\n        } else if (value instanceof Boolean) {\n            value = value.valueOf();\n        }\n\n        switch (value) {\n        case null: return 'null'\n        case true: return 'true'\n        case false: return 'false'\n        }\n\n        if (typeof value === 'string') {\n            return quoteString(value, false)\n        }\n\n        if (typeof value === 'number') {\n            return String(value)\n        }\n\n        if (typeof value === 'object') {\n            return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n        }\n\n        return undefined\n    }\n\n    function quoteString (value) {\n        const quotes = {\n            \"'\": 0.1,\n            '\"': 0.2,\n        };\n\n        const replacements = {\n            \"'\": \"\\\\'\",\n            '\"': '\\\\\"',\n            '\\\\': '\\\\\\\\',\n            '\\b': '\\\\b',\n            '\\f': '\\\\f',\n            '\\n': '\\\\n',\n            '\\r': '\\\\r',\n            '\\t': '\\\\t',\n            '\\v': '\\\\v',\n            '\\0': '\\\\0',\n            '\\u2028': '\\\\u2028',\n            '\\u2029': '\\\\u2029',\n        };\n\n        let product = '';\n\n        for (let i = 0; i < value.length; i++) {\n            const c = value[i];\n            switch (c) {\n            case \"'\":\n            case '\"':\n                quotes[c]++;\n                product += c;\n                continue\n\n            case '\\0':\n                if (util.isDigit(value[i + 1])) {\n                    product += '\\\\x00';\n                    continue\n                }\n            }\n\n            if (replacements[c]) {\n                product += replacements[c];\n                continue\n            }\n\n            if (c < ' ') {\n                let hexString = c.charCodeAt(0).toString(16);\n                product += '\\\\x' + ('00' + hexString).substring(hexString.length);\n                continue\n            }\n\n            product += c;\n        }\n\n        const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b);\n\n        product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]);\n\n        return quoteChar + product + quoteChar\n    }\n\n    function serializeObject (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value);\n\n        let stepback = indent;\n        indent = indent + gap;\n\n        let keys = propertyList || Object.keys(value);\n        let partial = [];\n        for (const key of keys) {\n            const propertyString = serializeProperty(key, value);\n            if (propertyString !== undefined) {\n                let member = serializeKey(key) + ':';\n                if (gap !== '') {\n                    member += ' ';\n                }\n                member += propertyString;\n                partial.push(member);\n            }\n        }\n\n        let final;\n        if (partial.length === 0) {\n            final = '{}';\n        } else {\n            let properties;\n            if (gap === '') {\n                properties = partial.join(',');\n                final = '{' + properties + '}';\n            } else {\n                let separator = ',\\n' + indent;\n                properties = partial.join(separator);\n                final = '{\\n' + indent + properties + ',\\n' + stepback + '}';\n            }\n        }\n\n        stack.pop();\n        indent = stepback;\n        return final\n    }\n\n    function serializeKey (key) {\n        if (key.length === 0) {\n            return quoteString(key, true)\n        }\n\n        const firstChar = String.fromCodePoint(key.codePointAt(0));\n        if (!util.isIdStartChar(firstChar)) {\n            return quoteString(key, true)\n        }\n\n        for (let i = firstChar.length; i < key.length; i++) {\n            if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n                return quoteString(key, true)\n            }\n        }\n\n        return key\n    }\n\n    function serializeArray (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value);\n\n        let stepback = indent;\n        indent = indent + gap;\n\n        let partial = [];\n        for (let i = 0; i < value.length; i++) {\n            const propertyString = serializeProperty(String(i), value);\n            partial.push((propertyString !== undefined) ? propertyString : 'null');\n        }\n\n        let final;\n        if (partial.length === 0) {\n            final = '[]';\n        } else {\n            if (gap === '') {\n                let properties = partial.join(',');\n                final = '[' + properties + ']';\n            } else {\n                let separator = ',\\n' + indent;\n                let properties = partial.join(separator);\n                final = '[\\n' + indent + properties + ',\\n' + stepback + ']';\n            }\n        }\n\n        stack.pop();\n        indent = stepback;\n        return final\n    }\n};\n\nconst JSON5 = {\n    parse,\n    stringify,\n};\n\nvar lib = JSON5;\n\nexport default lib;\n"
  },
  {
    "path": "libs/jstree/LICENSE-MIT",
    "content": "Copyright (c) 2014 Ivan Bozhanov\r\n\r\nPermission is hereby granted, free of charge, to any person\r\nobtaining a copy of this software and associated documentation\r\nfiles (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use,\r\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the\r\nSoftware is furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\r\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\nOTHER DEALINGS IN THE SOFTWARE.\r\n"
  },
  {
    "path": "libs/jstree/README.md",
    "content": "# jstree\n\n[jsTree](http://www.jstree.com/) is jquery plugin, that provides interactive trees. It is absolutely free, [open source](https://github.com/vakata/jstree) and distributed under the MIT license.\n\njsTree is easily extendable, themable and configurable, it supports HTML & JSON data sources, AJAX & async callback loading.\n\njsTree functions properly in either box-model (content-box or border-box), can be loaded as an AMD module, and has a built in mobile theme for responsive design, that can easily be customized. It uses jQuery's event system, so binding callbacks on various events in the tree is familiar and easy.\n\nYou also get:\n * drag & drop support\n * keyboard navigation\n * inline edit, create and delete\n * tri-state checkboxes\n * fuzzy searching\n * customizable node types\n\n_Aside from this readme you can find a lot more info on [jstree.com](http://www.jstree.com) & [the discussion group](https://groups.google.com/forum/#!forum/jstree)_.\n\n---\n\n<!-- MarkdownTOC depth=0 autolink=true bracket=round -->\n\n- [Getting Started](#getting-started)\n  - [Include all neccessary files](#include-all-neccessary-files)\n  - [Populating a tree using HTML](#populating-a-tree-using-html)\n  - [Populating a tree using an array \\(or JSON\\)](#populating-a-tree-using-an-array-or-json)\n    - [The required JSON format](#the-required-json-format)\n  - [Populating the tree using AJAX](#populating-the-tree-using-ajax)\n  - [Populating the tree using AJAX and lazy loading nodes](#populating-the-tree-using-ajax-and-lazy-loading-nodes)\n  - [Populating the tree using a callback function](#populating-the-tree-using-a-callback-function)\n- [Working with events](#working-with-events)\n- [Interacting with the tree using the API](#interacting-with-the-tree-using-the-api)\n- [More on configuration](#more-on-configuration)\n- [Plugins](#plugins)\n  - [checkbox](#checkbox)\n  - [contextmenu](#contextmenu)\n  - [dnd](#dnd)\n  - [massload](#massload)\n  - [search](#search)\n  - [sort](#sort)\n  - [state](#state)\n  - [types](#types)\n  - [unique](#unique)\n  - [wholerow](#wholerow)\n  - [More plugins](#more-plugins)\n- [PHP demos moved to new repository](#php-demos-moved-to-new-repository)\n- [License & Contributing](#license--contributing)\n\n<!-- /MarkdownTOC -->\n\n\n---\n\n## Getting Started\n\n### Include all neccessary files\nTo get started you need 3 things in your page:\n 1. jQuery (anything above 1.9.1 will work)\n 2. A jstree theme (there is only one theme supplied by default)\n 3. The jstree source file\n\n```html\n<script src=\"//cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js\"></script>\n\n<link rel=\"stylesheet\" href=\"//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.8/themes/default/style.min.css\" />\n<script src=\"//cdnjs.cloudflare.com/ajax/libs/jstree/3.3.8/jstree.min.js\"></script>\n```\n\n_If you decide to host jstree yourself - the files are located in the `dist` folder. You can safely ignore the `dist/libs` folder._\n\n---\n\n### Populating a tree using HTML\n\nNow we are all set to create a tree, inline HTML is the easiest option (suitable for menus). All you need to do is select a node (using a jQuery selector) and invoke the `.jstree()` function to let jstree know you want to render a tree inside the selected node. `$.jstree.create(element)` can be used too.\n\n```html\n<div id=\"container\">\n  <ul>\n    <li>Root node\n      <ul>\n        <li>Child node 1</li>\n        <li>Child node 2</li>\n      </ul>\n    </li>\n  </ul>\n</div>\n<script>\n$(function() {\n  $('#container').jstree();\n});\n</script>\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/)\n\n_You can add a few options when rendering a node using a data-attribute (note the quotes):_\n```html\n<li data-jstree='{ \"selected\" : true, \"opened\" : true }'>Root node ...\n```\n\n---\n\n### Populating a tree using an array (or JSON)\n\nBuilding trees from HTML is easy, but it is not very flexible, inline JS data is a better option:\n\n```html\n<div id=\"container\"></div>\n<script>\n$(function() {\n  $('#container').jstree({\n    'core' : {\n      'data' : [\n        { \"text\" : \"Root node\", \"children\" : [\n            { \"text\" : \"Child node 1\" },\n            { \"text\" : \"Child node 2\" }\n          ]\n        }\n      ]\n    }\n  });\n});\n</script>\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4478/)\n\nUnlike the previous simple HTML example, this time the `.jstree()` function accepts a config object.\n\nFor now it is important to note that jstree will try to parse any data you specify in the  `core.data` key and use it to create a tree. As seen in the previous example, if this key is missing jstree will try to parse the inline HTML of the container.\n\n#### The required JSON format\n\nThe data you use must be in a specific format, each branch of the tree is represented by an object, which must at least have a `text` key. The `children` key can be used to add children to the branch, it should be an array of objects.\n\n_Keep in mind, you can use a simple string instead of an object if all you need is node with the given text, the above data can be written as:_\n\n```js\n[ { \"text\" : \"Root node\", \"children\" : [ \"Child node 1\", \"Child node 2\" ] } ]\n```\n\nThere are other available options for each node, only set them if you need them like:\n\n * `id` - makes if possible to identify a node later (will also be used as a DOM ID of the `LI` node). _Make sure you do not repeat the same ID in a tree instance (that would defeat its purpose of being a unique identifier and may cause problems for jstree)_.\n * `icon` - a string which will be used for the node's icon - this can either be a path to a file, or a className (or list of classNames), which you can style in your CSS (font icons also work).\n * `data` - this can be anything you want - it is metadata you want attached to the node - you will be able to access and modify it any time later - it has no effect on the visuals of the node.\n * `state` - an object specifyng a few options about the node:\n   - `selected` - if the node should be initially selected\n   - `opened` - if the node should be initially opened\n   - `disabled` - if the node should be disabled\n   - `checked` - __checkbox plugin specific__ - if the node should be checked (only used when `tie_selection` is `false`, which you should only do if you really know what you are doing)\n   - `undetermined` - __checkbox plugin specific__ - if the node should be rendered in undetermined state (only used with lazy loading and when the node is not yet loaded, otherwise this state is automatically calculated).\n * `type` - __types plugin specific__ - the type of the nodes (should be defined in the types config), if not set `\"default\"` is assumed.\n * `li_attr` - object of values which will be used to add HTML attributes on the resulting `LI` DOM node.\n * `a_attr` - object of values which will be used to add HTML attributes on the resulting `A` node.\n\nHere is a new demo with some of those properties set:\n\n```html\n<div id=\"container\"></div>\n<script>\n$(function() {\n  $('#container').jstree({\n    'core' : {\n      'data' : [\n          {\n              \"text\" : \"Root node\",\n              \"state\" : {\"opened\" : true },\n              \"children\" : [\n                  {\n                    \"text\" : \"Child node 1\",\n                    \"state\" : { \"selected\" : true },\n                    \"icon\" : \"glyphicon glyphicon-flash\"\n                  },\n                  { \"text\" : \"Child node 2\", \"state\" : { \"disabled\" : true } }\n              ]\n        }\n      ]\n    }\n  });\n});\n</script>\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4479/)\n\n---\n\n### Populating the tree using AJAX\n\nBuilding off of the previous example, let's see how to have jstree make AJAX requests for you.\n\n```html\n<div id=\"container\"></div>\n<script>\n$(function() {\n  $('#container').jstree({\n    'core' : {\n      'data' : {\n        \"url\" : \"//www.jstree.com/fiddle/\",\n        \"dataType\" : \"json\" // needed only if you do not supply JSON headers\n      }\n    }\n  });\n});\n</script>\n```\n\nThe server response is:\n```json\n[{\n  \"id\":1,\"text\":\"Root node\",\"children\":[\n    {\"id\":2,\"text\":\"Child node 1\"},\n    {\"id\":3,\"text\":\"Child node 2\"}\n  ]\n}]\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4480/)\n\nInstead of a JS array, you can set `core.data` to a [jQuery AJAX config](http://api.jquery.com/jQuery.ajax/). \njsTree will hit that URL, and provided you return properly formatted JSON it will be displayed.\n\n_If you cannot provide proper JSON headers, set `core.data.dataType` to `\"json\"`._\n\nThe ids in the server response make it possible to identify nodes later (which we will see in the next few demos), but they are not required.\n\n__WHEN USING IDS MAKE SURE THEY ARE UNIQUE INSIDE A PARTICULAR TREE__\n\n---\n\n### Populating the tree using AJAX and lazy loading nodes\n\nLazy loading means nodes will be loaded when they are needed. Imagine you have a huge amount of nodes you want to show, but loading them with a single request is way too much traffic. Lazy loading makes it possible to load nodes on the fly - jstree will perform AJAX requests as the user browses the tree.\n\nHere we take our previous example, and lazy load the \"Child node 1\" node.\n\n```html\n<div id=\"container\"></div>\n<script>\n$(function() {\n  $('#container').jstree({\n    'core' : {\n      'data' : {\n        \"url\" : \"//www.jstree.com/fiddle/?lazy\",\n        \"data\" : function (node) {\n          return { \"id\" : node.id };\n        }\n      }\n    }\n  });\n});\n</script>\n```\n\nThe initial server response is:\n```json\n[{\n  \"id\":1,\"text\":\"Root node\",\"children\":[\n    {\"id\":2,\"text\":\"Child node 1\",\"children\":true},\n    {\"id\":3,\"text\":\"Child node 2\"}\n  ]\n}]\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4481/)\n\nNow to focus on what is different. First off the `\"data\"` config option of the data object. If you check with jQuery, it is supposed to be a string or an object. But jstree makes it possible to set a function.\n\nEach time jstree needs to make an AJAX call this function will be called and will receive a single parameter - the node that is being loaded. The return value of this function will be used as the actual `\"data\"` of the AJAX call. To understand better open up the demo and see the requests go off in the console.\n\nYou will notice that the first request goes off to:\n`http://www.jstree.com/fiddle?lazy&id=#`\n`#` is the special ID that the function receives when jstree needs to load the root nodes.\n\nNow go ahead and open the root node - two children will be shown, but no request will be made - that is because we loaded those children along with the first request.\n\nOnto the next difference - \"Child node 1\" appears closed - that is because in the data we supplied `true` as the `\"children\"` property of this node (you can see it in the server response). This special value indicated to jstree, that it has to lazy load the \"Child node 1\" node.\n\nProceed and open this node - you will see a next request fire off to:\n`http://www.jstree.com/fiddle?lazy&id=2`\nID is set to `2` because the node being loaded has an ID of `2`, and we have configured jstree to send the node ID along with the AJAX request (the `data` function).\n\nThe server response is:\n```json\n[\"Child node 3\",\"Child node 4\"]\n```\n\n_You can also set `\"url\"` to a function and it works exactly as with `\"data\"` - each time a request has to be made, jstree will invoke your function and the request will go off to whatever you return in this function. This is useful when dealing with URLs like: `http://example.com/get_children/1`._\n\n### Populating the tree using a callback function\n\nSometimes you may not want jsTree to make AJAX calls for you - you might want to make them yourself, or use some other method of populating the tree. In that case you can use a callback function.\n\n```html\n<div id=\"container\"></div>\n<script>\n$(function() {\n  $('#container').jstree({\n    'core' : {\n      'data' : function (node, cb) {\n        if(node.id === \"#\") {\n          cb([{\"text\" : \"Root\", \"id\" : \"1\", \"children\" : true}]);\n        }\n        else {\n          cb([\"Child\"]);\n        }\n      }\n    }\n  });\n});\n</script>\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4482/)\n\nAs you can see your function will receive two arguments - the node whose children need to be loaded and a callback function to call with the data once you have it. The data follows the same familiar JSON format and lazy loading works just as with AJAX (as you can see in the above example).\n\n---\n\n## Working with events\n\njstree provides a lot of events to let you know something happened with the tree. The events are the same regardless of how you populate the tree.\nLet's use the most basic event `changed` - it fires when selection on the tree changes:\n\n```html\n<div id=\"container\"></div>\n<script>\n$(function() {\n  $('#container').jstree({\n    'core' : {\n      'data' : [\n        {\"id\" : 1, \"text\" : \"Node 1\"},\n        {\"id\" : 2, \"text\" : \"Node 2\"},\n      ]\n    }\n  });\n  $('#container').on(\"changed.jstree\", function (e, data) {\n    console.log(\"The selected nodes are:\");\n    console.log(data.selected);\n  });\n});\n</script>\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4483/)\n\nAll jstree events fire in a special `\".jstree\"` namespace - this is why we listen for `\"changed.jstree\"`. The handler itself receives one additional parameter - it will be populated with all you need to know about the event that happened. In this case `data.selected` is an array of selected node IDs (please note, that if you have not specified IDs they will be autogenerated).\n\nLet's extend this a bit and log out the text of the node instead of the ID.\n\n```js\n$('#container').on(\"changed.jstree\", function (e, data) {\n  console.log(data.instance.get_selected(true)[0].text);\n  console.log(data.instance.get_node(data.selected[0]).text);\n});\n```\n\nThe two rows above achieve exactly the same thing - get the text of the first selected node.\n\nIn the `data` argument object you will always get an `instance` key - that is a reference to the tree instance, so that you can easily invoke methods.\n\n__All available functions and events are documented in the API docs__\n\n---\n\n## Interacting with the tree using the API\n\nWe scratched the surface on interacting with the tree in the previous example. Let's move on to obtaining an instance and calling a method on this instance:\n\n```html\n<button>Select node 1</button>\n<div id=\"container\"></div>\n<script>\n$(function() {\n  $('#container').jstree({\n    'core' : {\n      'data' : [\n        {\"id\" : 1, \"text\" : \"Node 1\"},\n        {\"id\" : 2, \"text\" : \"Node 2\"},\n      ]\n    }\n  });\n  $('button').on(\"click\", function () {\n    var instance = $('#container').jstree(true);\n    instance.deselect_all();\n    instance.select_node('1');\n  });\n});\n</script>\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4484/)\n\nThe above example shows how to obtain a reference to a jstree instance (again with a selector, but this time instead of a config, we pass a boolean `true`), and call a couple of methods - the latter one is selecting a node by its ID.\n\nMethods can also be invoked like this:\n\n```js\n$('#container').jstree(\"select_node\", \"1\");\n```\n\n__All available functions and events are documented in the API docs__\n\n## More on configuration\n\nWe already covered the config object in general (when we specified inline & AJAX data sources).\n\n```js\n$(\"#tree\").jstree({ /* config object goes here */ });\n```\n\nEach key in the config object corresponds to a plugin, and the value of that key is the configuration for that plugin. There are also two special keys `\"core\"` and `\"plugins\"`:\n * `\"core\"` stores the core configuration options\n * `\"plugins\"` is an array of plugin names (strings) you want active on the instance\n\nWhen configuring you only need to set values that you want to be different from the defaults.\n\n__All config options and defaults are documented in the API docs__\n\n```js\n$(\"#tree\").jstree({\n  \"core\" : { // core options go here\n    \"multiple\" : false, // no multiselection\n    \"themes\" : {\n      \"dots\" : false // no connecting dots between dots\n    }\n  },\n  \"plugins\" : [\"state\"] // activate the state plugin on this instance\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4485/)\n\nWe will cover all plugins further down.\n\n__Keep in mind by default all modifications to the structure are prevented - that means drag'n'drop, create, rename, delete will not work unless you enable them.__\n\n```js\n$(\"#tree\").jstree({\n  \"core\" : {\n    \"check_callback\" : true, // enable all modifications\n  },\n  \"plugins\" : [\"dnd\",\"contextmenu\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4486/)\n\n`\"core.check_callback\"` can also be set to a function, that will be invoked every time a modification is about to happen (or when jstree needs to check if a modification is possible). If you return `true` the operation will be allowed, a value of `false` means it will not be allowed. The possible operation you can expect are `create_node`, `rename_node`, `delete_node`, `move_node` and `copy_node`. The `more` parameter will contain various information provided by the plugin that is invoking the check. For example the DND plugin will provide an object containing information about the move or copy operation that is being checked - is it a multi tree operation, which node is currently hovered, where the insert arrow is pointing - before, after or inside, etc.\n\n```js\n$(\"#tree\").jstree({\n  \"core\" : {\n    \"check_callback\" : function (operation, node, parent, position, more) {\n      if(operation === \"copy_node\" || operation === \"move_node\") {\n        if(parent.id === \"#\") {\n          return false; // prevent moving a child above or below the root\n        }\n      },\n      return true; // allow everything else\n    }\n  },\n  \"plugins\" : [\"dnd\",\"contextmenu\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4487/)\n\nThe `more` parameter you receive contains other information related to the check being performed.\n\n__For example__: `move_node` & `copy_node` checks will fire repeatedly while the user drags a node, if the check was triggered by the `dnd` plugin `more` will contain a `dnd` key, which will be set to `true`.\nYou can check for `more.dnd` and only perform a certain action if `dnd` triggered the check.\nIf you only want to perform an operation when a node is really about to be dropped check for `more.core`.\n\n## Plugins\n\njsTree comes with a few plugin bundled, but they will only modify your tree if you activate them using the `\"plugins\"` config option. Here is a brief description of each plugin. You can read more on the available config options for each plugin in the API docs.\n\n### checkbox\nRenders a checkbox icon in front of each node, making multiselection easy. It also has a \"tri-state\" option, meaning a node with some of its children checked will get a \"square\" icon.\n\n_Keep in mind that if any sort of cascade is enabled, disabled nodes may be checked too (not by themselves, but for example when a parent of a disabled node is checked and selection is configured to cascade down)._\n\n```js\n$(\"#tree\").jstree({\n  \"plugins\" : [\"checkbox\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4488/)\n\n### contextmenu\nMakes it possible to right click nodes and shows a list of configurable actions in a menu.\n\n```js\n$(\"#tree\").jstree({\n  \"core\" : { \"check_callback\" : true }, // so that modifying operations work\n  \"plugins\" : [\"contextmenu\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4489/)\n\n### dnd\nMakes it possible to drag and drop tree nodes and rearrange the tree.\n\n```js\n$(\"#tree\").jstree({\n  \"core\" : { \"check_callback\" : true }, // so that operations work\n  \"plugins\" : [\"dnd\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4490/)\n\n### massload\nMakes it possible to load multiple nodes in a single go (for a lazy loaded tree).\n\n```js\n$(\"#tree\").jstree({\n  \"core\" : {\n    \"data\" : { .. AJAX config .. }\n  },\n  \"massload\" : {\n    \"url\" : \"/some/path\",\n    \"data\" : function (nodes) {\n      return { \"ids\" : nodes.join(\",\") };\n    }\n  },\n  \"plugins\" : [ \"massload\", \"state\" ]\n});\n```\n\n### search\nAdds the possibility to search for items in the tree and show only matching nodes. It also has AJAX / callback hooks, so that search will work on lazy loaded trees too.\n\n```html\n<form id=\"s\">\n  <input type=\"search\" id=\"q\" />\n  <button type=\"submit\">Search</button>\n</form>\n<script>\n$(\"#container\").jstree({\n  \"plugins\" : [\"search\"]\n});\n$(\"#s\").submit(function(e) {\n  e.preventDefault();\n  $(\"#container\").jstree(true).search($(\"#q\").val());\n});\n</script>\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4491/)\n\n### sort\nAutomatically arranges all sibling nodes according to a comparison config option function, which defaults to alphabetical order.\n\n```js\n$(\"#tree\").jstree({\n  \"plugins\" : [\"sort\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4492/)\n\n### state\nSaves all opened and selected nodes in the user's browser, so when returning to the same tree the previous state will be restored.\n\n```js\n$(\"#tree\").jstree({\n  // the key is important if you have multiple trees in the same domain\n  \"state\" : { \"key\" : \"state_demo\" },\n  \"plugins\" : [\"state\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4493/)\n\n### types\nMakes it possible to add a \"type\" for a node, which means to easily control nesting rules and icon for groups of nodes instead of individually. To set a node type add a type property to the node structure.\n\n```js\n$(\"#tree\").jstree({\n  \"types\" : {\n    \"default\" : {\n      \"icon\" : \"glyphicon glyphicon-flash\"\n    },\n    \"demo\" : {\n      \"icon\" : \"glyphicon glyphicon-ok\"\n    }\n  },\n  \"plugins\" : [\"types\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4494/)\n\n### unique\nEnforces that no nodes with the same name can coexist as siblings - prevents renaming and moving nodes to a parent, which already contains a node with the same name.\n\n```js\n$(\"#tree\").jstree({\n  \"plugins\" : [\"unique\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4495/)\n\n### wholerow\nMakes each node appear block level which makes selection easier. May cause slow down for large trees in old browsers.\n\n```js\n$(\"#tree\").jstree({\n  \"plugins\" : [\"wholerow\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4496/)\n\n### More plugins\nIf you create your own plugin (or download a 3rd party one) you must include its source on the page and list its name in the `\"plugins\"` config array.\n\n```js\n// conditional select\n(function ($, undefined) {\n  \"use strict\";\n  $.jstree.defaults.conditionalselect = function () { return true; };\n  $.jstree.plugins.conditionalselect = function (options, parent) {\n    this.activate_node = function (obj, e) {\n      if(this.settings.conditionalselect.call(this, this.get_node(obj))) {\n        parent.activate_node.call(this, obj, e);\n      }\n    };\n  };\n})(jQuery);\n$(\"#tree\").jstree({\n  \"conditionalselect\" : function (node) {\n    return node.text === \"Root node\" ? false : true;\n  },\n  \"plugins\" : [\"conditionalselect\"]\n});\n```\n\n[view result](http://jsfiddle.net/vakata/2kwkh2uL/4497/)\n\nAs seen here when creating a plugin you can define a default config, add your own functions to jstree, or override existing ones while maintaining the ability to call the overridden function.\n\n## PHP demos moved to new repository\nhttps://github.com/vakata/jstree-php-demos\n\n## License & Contributing\n\n_Please do NOT edit files in the \"dist\" subdirectory as they are generated via grunt. You'll find source code in the \"src\" subdirectory!_\n\nIf you want to you can always [donate a small amount][paypal] to help the development of jstree.\n\n[paypal]: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=paypal@vakata.com&currency_code=USD&amount=&return=http://jstree.com/donation&item_name=Buy+me+a+coffee+for+jsTree\n\nCopyright (c) 2014 Ivan Bozhanov (http://vakata.com)\n\nLicensed under the [MIT license](http://www.opensource.org/licenses/mit-license.php).\n"
  },
  {
    "path": "libs/jstree/jstree.js",
    "content": "/*globals jQuery, define, module, exports, require, window, document, postMessage */\n(function (factory) {\n\t\"use strict\";\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['jquery'], factory);\n\t}\n\telse if(typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = factory(require('jquery'));\n\t}\n\telse {\n\t\tfactory(jQuery);\n\t}\n}(function ($, undefined) {\n\t\"use strict\";\n/*!\n * jsTree 3.3.8\n * http://jstree.com/\n *\n * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com)\n *\n * Licensed same as jquery - under the terms of the MIT License\n *   http://www.opensource.org/licenses/mit-license.php\n */\n/*!\n * if using jslint please allow for the jQuery global and use following options:\n * jslint: loopfunc: true, browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true\n */\n/*jshint -W083 */\n\n\t// prevent another load? maybe there is a better way?\n\tif($.jstree) {\n\t\treturn;\n\t}\n\n\t/**\n\t * ### jsTree core functionality\n\t */\n\n\t// internal variables\n\tvar instance_counter = 0,\n\t\tccp_node = false,\n\t\tccp_mode = false,\n\t\tccp_inst = false,\n\t\tthemes_loaded = [],\n\t\tsrc = $('script:last').attr('src'),\n\t\tdocument = window.document; // local variable is always faster to access then a global\n\n\t/**\n\t * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances.\n\t * @name $.jstree\n\t */\n\t$.jstree = {\n\t\t/**\n\t\t * specifies the jstree version in use\n\t\t * @name $.jstree.version\n\t\t */\n\t\tversion : '3.3.8',\n\t\t/**\n\t\t * holds all the default options used when creating new instances\n\t\t * @name $.jstree.defaults\n\t\t */\n\t\tdefaults : {\n\t\t\t/**\n\t\t\t * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]`\n\t\t\t * @name $.jstree.defaults.plugins\n\t\t\t */\n\t\t\tplugins : []\n\t\t},\n\t\t/**\n\t\t * stores all loaded jstree plugins (used internally)\n\t\t * @name $.jstree.plugins\n\t\t */\n\t\tplugins : {},\n\t\tpath : src && src.indexOf('/') !== -1 ? src.replace(/\\/[^\\/]+$/,'') : '',\n\t\tidregex : /[\\\\:&!^|()\\[\\]<>@*'+~#\";.,=\\- \\/${}%?`]/g,\n\t\troot : '#'\n\t};\n\t\n\t/**\n\t * creates a jstree instance\n\t * @name $.jstree.create(el [, options])\n\t * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector\n\t * @param {Object} options options for this instance (extends `$.jstree.defaults`)\n\t * @return {jsTree} the new instance\n\t */\n\t$.jstree.create = function (el, options) {\n\t\tvar tmp = new $.jstree.core(++instance_counter),\n\t\t\topt = options;\n\t\toptions = $.extend(true, {}, $.jstree.defaults, options);\n\t\tif(opt && opt.plugins) {\n\t\t\toptions.plugins = opt.plugins;\n\t\t}\n\t\t$.each(options.plugins, function (i, k) {\n\t\t\tif(i !== 'core') {\n\t\t\t\ttmp = tmp.plugin(k, options[k]);\n\t\t\t}\n\t\t});\n\t\t$(el).data('jstree', tmp);\n\t\ttmp.init(el, options);\n\t\treturn tmp;\n\t};\n\t/**\n\t * remove all traces of jstree from the DOM and destroy all instances\n\t * @name $.jstree.destroy()\n\t */\n\t$.jstree.destroy = function () {\n\t\t$('.jstree:jstree').jstree('destroy');\n\t\t$(document).off('.jstree');\n\t};\n\t/**\n\t * the jstree class constructor, used only internally\n\t * @private\n\t * @name $.jstree.core(id)\n\t * @param {Number} id this instance's index\n\t */\n\t$.jstree.core = function (id) {\n\t\tthis._id = id;\n\t\tthis._cnt = 0;\n\t\tthis._wrk = null;\n\t\tthis._data = {\n\t\t\tcore : {\n\t\t\t\tthemes : {\n\t\t\t\t\tname : false,\n\t\t\t\t\tdots : false,\n\t\t\t\t\ticons : false,\n\t\t\t\t\tellipsis : false\n\t\t\t\t},\n\t\t\t\tselected : [],\n\t\t\t\tlast_error : {},\n\t\t\t\tworking : false,\n\t\t\t\tworker_queue : [],\n\t\t\t\tfocused : null\n\t\t\t}\n\t\t};\n\t};\n\t/**\n\t * get a reference to an existing instance\n\t *\n\t * __Examples__\n\t *\n\t *\t// provided a container with an ID of \"tree\", and a nested node with an ID of \"branch\"\n\t *\t// all of there will return the same instance\n\t *\t$.jstree.reference('tree');\n\t *\t$.jstree.reference('#tree');\n\t *\t$.jstree.reference($('#tree'));\n\t *\t$.jstree.reference(document.getElementByID('tree'));\n\t *\t$.jstree.reference('branch');\n\t *\t$.jstree.reference('#branch');\n\t *\t$.jstree.reference($('#branch'));\n\t *\t$.jstree.reference(document.getElementByID('branch'));\n\t *\n\t * @name $.jstree.reference(needle)\n\t * @param {DOMElement|jQuery|String} needle\n\t * @return {jsTree|null} the instance or `null` if not found\n\t */\n\t$.jstree.reference = function (needle) {\n\t\tvar tmp = null,\n\t\t\tobj = null;\n\t\tif(needle && needle.id && (!needle.tagName || !needle.nodeType)) { needle = needle.id; }\n\n\t\tif(!obj || !obj.length) {\n\t\t\ttry { obj = $(needle); } catch (ignore) { }\n\t\t}\n\t\tif(!obj || !obj.length) {\n\t\t\ttry { obj = $('#' + needle.replace($.jstree.idregex,'\\\\$&')); } catch (ignore) { }\n\t\t}\n\t\tif(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) {\n\t\t\ttmp = obj;\n\t\t}\n\t\telse {\n\t\t\t$('.jstree').each(function () {\n\t\t\t\tvar inst = $(this).data('jstree');\n\t\t\t\tif(inst && inst._model.data[needle]) {\n\t\t\t\t\ttmp = inst;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn tmp;\n\t};\n\t/**\n\t * Create an instance, get an instance or invoke a command on a instance.\n\t *\n\t * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken).\n\t *\n\t * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function).\n\t *\n\t * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`).\n\t *\n\t * In any other case - nothing is returned and chaining is not broken.\n\t *\n\t * __Examples__\n\t *\n\t *\t$('#tree1').jstree(); // creates an instance\n\t *\t$('#tree2').jstree({ plugins : [] }); // create an instance with some options\n\t *\t$('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments\n\t *\t$('#tree2').jstree(); // get an existing instance (or create an instance)\n\t *\t$('#tree2').jstree(true); // get an existing instance (will not create new instance)\n\t *\t$('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method)\n\t *\n\t * @name $().jstree([arg])\n\t * @param {String|Object} arg\n\t * @return {Mixed}\n\t */\n\t$.fn.jstree = function (arg) {\n\t\t// check for string argument\n\t\tvar is_method\t= (typeof arg === 'string'),\n\t\t\targs\t\t= Array.prototype.slice.call(arguments, 1),\n\t\t\tresult\t\t= null;\n\t\tif(arg === true && !this.length) { return false; }\n\t\tthis.each(function () {\n\t\t\t// get the instance (if there is one) and method (if it exists)\n\t\t\tvar instance = $.jstree.reference(this),\n\t\t\t\tmethod = is_method && instance ? instance[arg] : null;\n\t\t\t// if calling a method, and method is available - execute on the instance\n\t\t\tresult = is_method && method ?\n\t\t\t\tmethod.apply(instance, args) :\n\t\t\t\tnull;\n\t\t\t// if there is no instance and no method is being called - create one\n\t\t\tif(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) {\n\t\t\t\t$.jstree.create(this, arg);\n\t\t\t}\n\t\t\t// if there is an instance and no method is called - return the instance\n\t\t\tif( (instance && !is_method) || arg === true ) {\n\t\t\t\tresult = instance || false;\n\t\t\t}\n\t\t\t// if there was a method call which returned a result - break and return the value\n\t\t\tif(result !== null && result !== undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\t// if there was a method call with a valid return value - return that, otherwise continue the chain\n\t\treturn result !== null && result !== undefined ?\n\t\t\tresult : this;\n\t};\n\t/**\n\t * used to find elements containing an instance\n\t *\n\t * __Examples__\n\t *\n\t *\t$('div:jstree').each(function () {\n\t *\t\t$(this).jstree('destroy');\n\t *\t});\n\t *\n\t * @name $(':jstree')\n\t * @return {jQuery}\n\t */\n\t$.expr.pseudos.jstree = $.expr.createPseudo(function(search) {\n\t\treturn function(a) {\n\t\t\treturn $(a).hasClass('jstree') &&\n\t\t\t\t$(a).data('jstree') !== undefined;\n\t\t};\n\t});\n\n\t/**\n\t * stores all defaults for the core\n\t * @name $.jstree.defaults.core\n\t */\n\t$.jstree.defaults.core = {\n\t\t/**\n\t\t * data configuration\n\t\t *\n\t\t * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items).\n\t\t *\n\t\t * You can also pass in a HTML string or a JSON array here.\n\t\t *\n\t\t * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree.\n\t\t * In addition to the standard jQuery ajax options here you can suppy functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used.\n\t\t *\n\t\t * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t// AJAX\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : {\n\t\t *\t\t\t\t'url' : '/get/children/',\n\t\t *\t\t\t\t'data' : function (node) {\n\t\t *\t\t\t\t\treturn { 'id' : node.id };\n\t\t *\t\t\t\t}\n\t\t *\t\t\t}\n\t\t *\t\t});\n\t\t *\n\t\t *\t// direct data\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : [\n\t\t *\t\t\t\t'Simple root node',\n\t\t *\t\t\t\t{\n\t\t *\t\t\t\t\t'id' : 'node_2',\n\t\t *\t\t\t\t\t'text' : 'Root node with options',\n\t\t *\t\t\t\t\t'state' : { 'opened' : true, 'selected' : true },\n\t\t *\t\t\t\t\t'children' : [ { 'text' : 'Child 1' }, 'Child 2']\n\t\t *\t\t\t\t}\n\t\t *\t\t\t]\n\t\t *\t\t}\n\t\t *\t});\n\t\t *\n\t\t *\t// function\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'data' : function (obj, callback) {\n\t\t *\t\t\t\tcallback.call(this, ['Root 1', 'Root 2']);\n\t\t *\t\t\t}\n\t\t *\t\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.data\n\t\t */\n\t\tdata\t\t\t: false,\n\t\t/**\n\t\t * configure the various strings used throughout the tree\n\t\t *\n\t\t * You can use an object where the key is the string you need to replace and the value is your replacement.\n\t\t * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement.\n\t\t * If left as `false` no replacement is made.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'strings' : {\n\t\t *\t\t\t\t'Loading ...' : 'Please wait ...'\n\t\t *\t\t\t}\n\t\t *\t\t}\n\t\t *\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.strings\n\t\t */\n\t\tstrings\t\t\t: false,\n\t\t/**\n\t\t * determines what happens when a user tries to modify the structure of the tree\n\t\t * If left as `false` all operations like create, rename, delete, move or copy are prevented.\n\t\t * You can set this to `true` to allow all interactions or use a function to have better control.\n\t\t *\n\t\t * __Examples__\n\t\t *\n\t\t *\t$('#tree').jstree({\n\t\t *\t\t'core' : {\n\t\t *\t\t\t'check_callback' : function (operation, node, node_parent, node_position, more) {\n\t\t *\t\t\t\t// operation can be 'create_node', 'rename_node', 'delete_node', 'move_node', 'copy_node' or 'edit'\n\t\t *\t\t\t\t// in case of 'rename_node' node_position is filled with the new node name\n\t\t *\t\t\t\treturn operation === 'rename_node' ? true : false;\n\t\t *\t\t\t}\n\t\t *\t\t}\n\t\t *\t});\n\t\t *\n\t\t * @name $.jstree.defaults.core.check_callback\n\t\t */\n\t\tcheck_callback\t: false,\n\t\t/**\n\t\t * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc)\n\t\t * @name $.jstree.defaults.core.error\n\t\t */\n\t\terror\t\t\t: $.noop,\n\t\t/**\n\t\t * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`)\n\t\t * @name $.jstree.defaults.core.animation\n\t\t */\n\t\tanimation\t\t: 200,\n\t\t/**\n\t\t * a boolean indicating if multiple nodes can be selected\n\t\t * @name $.jstree.defaults.core.multiple\n\t\t */\n\t\tmultiple\t\t: true,\n\t\t/**\n\t\t * theme configuration object\n\t\t * @name $.jstree.defaults.core.themes\n\t\t */\n\t\tthemes\t\t\t: {\n\t\t\t/**\n\t\t\t * the name of the theme to use (if left as `false` the default theme is used)\n\t\t\t * @name $.jstree.defaults.core.themes.name\n\t\t\t */\n\t\t\tname\t\t\t: false,\n\t\t\t/**\n\t\t\t * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme.\n\t\t\t * @name $.jstree.defaults.core.themes.url\n\t\t\t */\n\t\t\turl\t\t\t\t: false,\n\t\t\t/**\n\t\t\t * the location of all jstree themes - only used if `url` is set to `true`\n\t\t\t * @name $.jstree.defaults.core.themes.dir\n\t\t\t */\n\t\t\tdir\t\t\t\t: false,\n\t\t\t/**\n\t\t\t * a boolean indicating if connecting dots are shown\n\t\t\t * @name $.jstree.defaults.core.themes.dots\n\t\t\t */\n\t\t\tdots\t\t\t: true,\n\t\t\t/**\n\t\t\t * a boolean indicating if node icons are shown\n\t\t\t * @name $.jstree.defaults.core.themes.icons\n\t\t\t */\n\t\t\ticons\t\t\t: true,\n\t\t\t/**\n\t\t\t * a boolean indicating if node ellipsis should be shown - this only works with a fixed with on the container\n\t\t\t * @name $.jstree.defaults.core.themes.ellipsis\n\t\t\t */\n\t\t\tellipsis\t\t: false,\n\t\t\t/**\n\t\t\t * a boolean indicating if the tree background is striped\n\t\t\t * @name $.jstree.defaults.core.themes.stripes\n\t\t\t */\n\t\t\tstripes\t\t\t: false,\n\t\t\t/**\n\t\t\t * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants)\n\t\t\t * @name $.jstree.defaults.core.themes.variant\n\t\t\t */\n\t\t\tvariant\t\t\t: false,\n\t\t\t/**\n\t\t\t * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`.\n\t\t\t * @name $.jstree.defaults.core.themes.responsive\n\t\t\t */\n\t\t\tresponsive\t\t: false\n\t\t},\n\t\t/**\n\t\t * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user)\n\t\t * @name $.jstree.defaults.core.expand_selected_onload\n\t\t */\n\t\texpand_selected_onload : true,\n\t\t/**\n\t\t * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true`\n\t\t * @name $.jstree.defaults.core.worker\n\t\t */\n\t\tworker : true,\n\t\t/**\n\t\t * Force node text to plain text (and escape HTML). Defaults to `false`\n\t\t * @name $.jstree.defaults.core.force_text\n\t\t */\n\t\tforce_text : false,\n\t\t/**\n\t\t * Should the node be toggled if the text is double clicked. Defaults to `true`\n\t\t * @name $.jstree.defaults.core.dblclick_toggle\n\t\t */\n\t\tdblclick_toggle : true,\n\t\t/**\n\t\t * Should the loaded nodes be part of the state. Defaults to `false`\n\t\t * @name $.jstree.defaults.core.loaded_state\n\t\t */\n\t\tloaded_state : false,\n\t\t/**\n\t\t * Should the last active node be focused when the tree container is blurred and the focused again. This helps working with screen readers. Defaults to `true`\n\t\t * @name $.jstree.defaults.core.restore_focus\n\t\t */\n\t\trestore_focus : true,\n\t\t/**\n\t\t * Default keyboard shortcuts (an object where each key is the button name or combo - like 'enter', 'ctrl-space', 'p', etc and the value is the function to execute in the instance's scope)\n\t\t * @name $.jstree.defaults.core.keyboard\n\t\t */\n\t\tkeyboard : {\n\t\t\t'ctrl-space': function (e) {\n\t\t\t\t// aria defines space only with Ctrl\n\t\t\t\te.type = \"click\";\n\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t},\n\t\t\t'enter': function (e) {\n\t\t\t\t// enter\n\t\t\t\te.type = \"click\";\n\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t},\n\t\t\t'left': function (e) {\n\t\t\t\t// left\n\t\t\t\te.preventDefault();\n\t\t\t\tif(this.is_open(e.currentTarget)) {\n\t\t\t\t\tthis.close_node(e.currentTarget);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar o = this.get_parent(e.currentTarget);\n\t\t\t\t\tif(o && o.id !== $.jstree.root) { this.get_node(o, true).children('.jstree-anchor').focus(); }\n\t\t\t\t}\n\t\t\t},\n\t\t\t'up': function (e) {\n\t\t\t\t// up\n\t\t\t\te.preventDefault();\n\t\t\t\tvar o = this.get_prev_dom(e.currentTarget);\n\t\t\t\tif(o && o.length) { o.children('.jstree-anchor').focus(); }\n\t\t\t},\n\t\t\t'right': function (e) {\n\t\t\t\t// right\n\t\t\t\te.preventDefault();\n\t\t\t\tif(this.is_closed(e.currentTarget)) {\n\t\t\t\t\tthis.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); });\n\t\t\t\t}\n\t\t\t\telse if (this.is_open(e.currentTarget)) {\n\t\t\t\t\tvar o = this.get_node(e.currentTarget, true).children('.jstree-children')[0];\n\t\t\t\t\tif(o) { $(this._firstChild(o)).children('.jstree-anchor').focus(); }\n\t\t\t\t}\n\t\t\t},\n\t\t\t'down': function (e) {\n\t\t\t\t// down\n\t\t\t\te.preventDefault();\n\t\t\t\tvar o = this.get_next_dom(e.currentTarget);\n\t\t\t\tif(o && o.length) { o.children('.jstree-anchor').focus(); }\n\t\t\t},\n\t\t\t'*': function (e) {\n\t\t\t\t// aria defines * on numpad as open_all - not very common\n\t\t\t\tthis.open_all();\n\t\t\t},\n\t\t\t'home': function (e) {\n\t\t\t\t// home\n\t\t\t\te.preventDefault();\n\t\t\t\tvar o = this._firstChild(this.get_container_ul()[0]);\n\t\t\t\tif(o) { $(o).children('.jstree-anchor').filter(':visible').focus(); }\n\t\t\t},\n\t\t\t'end': function (e) {\n\t\t\t\t// end\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.element.find('.jstree-anchor').filter(':visible').last().focus();\n\t\t\t},\n\t\t\t'f2': function (e) {\n\t\t\t\t// f2 - safe to include - if check_callback is false it will fail\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.edit(e.currentTarget);\n\t\t\t}\n\t\t}\n\t};\n\t$.jstree.core.prototype = {\n\t\t/**\n\t\t * used to decorate an instance with a plugin. Used internally.\n\t\t * @private\n\t\t * @name plugin(deco [, opts])\n\t\t * @param  {String} deco the plugin to decorate with\n\t\t * @param  {Object} opts options for the plugin\n\t\t * @return {jsTree}\n\t\t */\n\t\tplugin : function (deco, opts) {\n\t\t\tvar Child = $.jstree.plugins[deco];\n\t\t\tif(Child) {\n\t\t\t\tthis._data[deco] = {};\n\t\t\t\tChild.prototype = this;\n\t\t\t\treturn new Child(opts, this);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t/**\n\t\t * initialize the instance. Used internally.\n\t\t * @private\n\t\t * @name init(el, optons)\n\t\t * @param {DOMElement|jQuery|String} el the element we are transforming\n\t\t * @param {Object} options options for this instance\n\t\t * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree\n\t\t */\n\t\tinit : function (el, options) {\n\t\t\tthis._model = {\n\t\t\t\tdata : {},\n\t\t\t\tchanged : [],\n\t\t\t\tforce_full_redraw : false,\n\t\t\t\tredraw_timeout : false,\n\t\t\t\tdefault_state : {\n\t\t\t\t\tloaded : true,\n\t\t\t\t\topened : false,\n\t\t\t\t\tselected : false,\n\t\t\t\t\tdisabled : false\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._model.data[$.jstree.root] = {\n\t\t\t\tid : $.jstree.root,\n\t\t\t\tparent : null,\n\t\t\t\tparents : [],\n\t\t\t\tchildren : [],\n\t\t\t\tchildren_d : [],\n\t\t\t\tstate : { loaded : false }\n\t\t\t};\n\n\t\t\tthis.element = $(el).addClass('jstree jstree-' + this._id);\n\t\t\tthis.settings = options;\n\n\t\t\tthis._data.core.ready = false;\n\t\t\tthis._data.core.loaded = false;\n\t\t\tthis._data.core.rtl = (this.element.css(\"direction\") === \"rtl\");\n\t\t\tthis.element[this._data.core.rtl ? 'addClass' : 'removeClass'](\"jstree-rtl\");\n\t\t\tthis.element.attr('role','tree');\n\t\t\tif(this.settings.core.multiple) {\n\t\t\t\tthis.element.attr('aria-multiselectable', true);\n\t\t\t}\n\t\t\tif(!this.element.attr('tabindex')) {\n\t\t\t\tthis.element.attr('tabindex','0');\n\t\t\t}\n\n\t\t\tthis.bind();\n\t\t\t/**\n\t\t\t * triggered after all events are bound\n\t\t\t * @event\n\t\t\t * @name init.jstree\n\t\t\t */\n\t\t\tthis.trigger(\"init\");\n\n\t\t\tthis._data.core.original_container_html = this.element.find(\" > ul > li\").clone(true);\n\t\t\tthis._data.core.original_container_html\n\t\t\t\t.find(\"li\").addBack()\n\t\t\t\t.contents().filter(function() {\n\t\t\t\t\treturn this.nodeType === 3 && (!this.nodeValue || /^\\s+$/.test(this.nodeValue));\n\t\t\t\t})\n\t\t\t\t.remove();\n\t\t\tthis.element.html(\"<\"+\"ul class='jstree-container-ul jstree-children' role='group'><\"+\"li id='j\"+this._id+\"_loading' class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='tree-item'><i class='jstree-icon jstree-ocl'></i><\"+\"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>\" + this.get_string(\"Loading ...\") + \"</a></li></ul>\");\n\t\t\tthis.element.attr('aria-activedescendant','j' + this._id + '_loading');\n\t\t\tthis._data.core.li_height = this.get_container_ul().children(\"li\").first().outerHeight() || 24;\n\t\t\tthis._data.core.node = this._create_prototype_node();\n\t\t\t/**\n\t\t\t * triggered after the loading text is shown and before loading starts\n\t\t\t * @event\n\t\t\t * @name loading.jstree\n\t\t\t */\n\t\t\tthis.trigger(\"loading\");\n\t\t\tthis.load_node($.jstree.root);\n\t\t},\n\t\t/**\n\t\t * destroy an instance\n\t\t * @name destroy()\n\t\t * @param  {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact\n\t\t */\n\t\tdestroy : function (keep_html) {\n\t\t\t/**\n\t\t\t * triggered before the tree is destroyed\n\t\t\t * @event\n\t\t\t * @name destroy.jstree\n\t\t\t */\n\t\t\tthis.trigger(\"destroy\");\n\t\t\tif(this._wrk) {\n\t\t\t\ttry {\n\t\t\t\t\twindow.URL.revokeObjectURL(this._wrk);\n\t\t\t\t\tthis._wrk = null;\n\t\t\t\t}\n\t\t\t\tcatch (ignore) { }\n\t\t\t}\n\t\t\tif(!keep_html) { this.element.empty(); }\n\t\t\tthis.teardown();\n\t\t},\n\t\t/**\n\t\t * Create a prototype node\n\t\t * @name _create_prototype_node()\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_create_prototype_node : function () {\n\t\t\tvar _node = document.createElement('LI'), _temp1, _temp2;\n\t\t\t_node.setAttribute('role', 'treeitem');\n\t\t\t_temp1 = document.createElement('I');\n\t\t\t_temp1.className = 'jstree-icon jstree-ocl';\n\t\t\t_temp1.setAttribute('role', 'presentation');\n\t\t\t_node.appendChild(_temp1);\n\t\t\t_temp1 = document.createElement('A');\n\t\t\t_temp1.className = 'jstree-anchor';\n\t\t\t_temp1.setAttribute('href','#');\n\t\t\t_temp1.setAttribute('tabindex','-1');\n\t\t\t_temp2 = document.createElement('I');\n\t\t\t_temp2.className = 'jstree-icon jstree-themeicon';\n\t\t\t_temp2.setAttribute('role', 'presentation');\n\t\t\t_temp1.appendChild(_temp2);\n\t\t\t_node.appendChild(_temp1);\n\t\t\t_temp1 = _temp2 = null;\n\n\t\t\treturn _node;\n\t\t},\n\t\t_kbevent_to_func : function (e) {\n\t\t\tvar keys = {\n\t\t\t\t8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 19: \"Pause\", 27: \"Esc\",\n\t\t\t\t32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\", 36: \"Home\",\n\t\t\t\t37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"Print\", 45: \"Insert\",\n\t\t\t\t46: \"Delete\", 96: \"Numpad0\", 97: \"Numpad1\", 98: \"Numpad2\", 99 : \"Numpad3\",\n\t\t\t\t100: \"Numpad4\", 101: \"Numpad5\", 102: \"Numpad6\", 103: \"Numpad7\",\n\t\t\t\t104: \"Numpad8\", 105: \"Numpad9\", '-13': \"NumpadEnter\", 112: \"F1\",\n\t\t\t\t113: \"F2\", 114: \"F3\", 115: \"F4\", 116: \"F5\", 117: \"F6\", 118: \"F7\",\n\t\t\t\t119: \"F8\", 120: \"F9\", 121: \"F10\", 122: \"F11\", 123: \"F12\", 144: \"Numlock\",\n\t\t\t\t145: \"Scrolllock\", 16: 'Shift', 17: 'Ctrl', 18: 'Alt',\n\t\t\t\t48: '0',  49: '1',  50: '2',  51: '3',  52: '4', 53:  '5',\n\t\t\t\t54: '6',  55: '7',  56: '8',  57: '9',  59: ';',  61: '=', 65:  'a',\n\t\t\t\t66: 'b',  67: 'c',  68: 'd',  69: 'e',  70: 'f',  71: 'g', 72:  'h',\n\t\t\t\t73: 'i',  74: 'j',  75: 'k',  76: 'l',  77: 'm',  78: 'n', 79:  'o',\n\t\t\t\t80: 'p',  81: 'q',  82: 'r',  83: 's',  84: 't',  85: 'u', 86:  'v',\n\t\t\t\t87: 'w',  88: 'x',  89: 'y',  90: 'z', 107: '+', 109: '-', 110: '.',\n\t\t\t\t186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n\t\t\t\t219: '[', 220: '\\\\',221: ']', 222: \"'\", 111: '/', 106: '*', 173: '-'\n\t\t\t};\n\t\t\tvar parts = [];\n\t\t\tif (e.ctrlKey) { parts.push('ctrl'); }\n\t\t\tif (e.altKey) { parts.push('alt'); }\n\t\t\tif (e.shiftKey) { parts.push('shift'); }\n\t\t\tparts.push(keys[e.which] || e.which);\n\t\t\tparts = parts.sort().join('-').toLowerCase();\n\n\t\t\tvar kb = this.settings.core.keyboard, i, tmp;\n\t\t\tfor (i in kb) {\n\t\t\t\tif (kb.hasOwnProperty(i)) {\n\t\t\t\t\ttmp = i;\n\t\t\t\t\tif (tmp !== '-' && tmp !== '+') {\n\t\t\t\t\t\ttmp = tmp.replace('--', '-MINUS').replace('+-', '-MINUS').replace('++', '-PLUS').replace('-+', '-PLUS');\n\t\t\t\t\t\ttmp = tmp.split(/-|\\+/).sort().join('-').replace('MINUS', '-').replace('PLUS', '+').toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tif (tmp === parts) {\n\t\t\t\t\t\treturn kb[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t/**\n\t\t * part of the destroying of an instance. Used internally.\n\t\t * @private\n\t\t * @name teardown()\n\t\t */\n\t\tteardown : function () {\n\t\t\tthis.unbind();\n\t\t\tthis.element\n\t\t\t\t.removeClass('jstree')\n\t\t\t\t.removeData('jstree')\n\t\t\t\t.find(\"[class^='jstree']\")\n\t\t\t\t\t.addBack()\n\t\t\t\t\t.attr(\"class\", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });\n\t\t\tthis.element = null;\n\t\t},\n\t\t/**\n\t\t * bind all events. Used internally.\n\t\t * @private\n\t\t * @name bind()\n\t\t */\n\t\tbind : function () {\n\t\t\tvar word = '',\n\t\t\t\ttout = null,\n\t\t\t\twas_click = 0;\n\t\t\tthis.element\n\t\t\t\t.on(\"dblclick.jstree\", function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(document.selection && document.selection.empty) {\n\t\t\t\t\t\t\tdocument.selection.empty();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif(window.getSelection) {\n\t\t\t\t\t\t\t\tvar sel = window.getSelection();\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tsel.removeAllRanges();\n\t\t\t\t\t\t\t\t\tsel.collapse();\n\t\t\t\t\t\t\t\t} catch (ignore) { }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on(\"mousedown.jstree\", $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target === this.element[0]) {\n\t\t\t\t\t\t\te.preventDefault(); // prevent losing focus when clicking scroll arrows (FF, Chrome)\n\t\t\t\t\t\t\twas_click = +(new Date()); // ie does not allow to prevent losing focus\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mousedown.jstree\", \".jstree-ocl\", function (e) {\n\t\t\t\t\t\te.preventDefault(); // prevent any node inside from losing focus when clicking the open/close icon\n\t\t\t\t\t})\n\t\t\t\t.on(\"click.jstree\", \".jstree-ocl\", $.proxy(function (e) {\n\t\t\t\t\t\tthis.toggle_node(e.target);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"dblclick.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(this.settings.core.dblclick_toggle) {\n\t\t\t\t\t\t\tthis.toggle_node(e.target);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"click.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tif(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); }\n\t\t\t\t\t\tthis.activate_node(e.currentTarget, e);\n\t\t\t\t\t}, this))\n\t\t\t\t.on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(this._data.core.rtl) {\n\t\t\t\t\t\t\tif(e.which === 37) { e.which = 39; }\n\t\t\t\t\t\t\telse if(e.which === 39) { e.which = 37; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar f = this._kbevent_to_func(e);\n\t\t\t\t\t\tif (f) {\n\t\t\t\t\t\t\tvar r = f.call(this, e);\n\t\t\t\t\t\t\tif (r === false || r === true) {\n\t\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"load_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(data.status) {\n\t\t\t\t\t\t\tif(data.node.id === $.jstree.root && !this._data.core.loaded) {\n\t\t\t\t\t\t\t\tthis._data.core.loaded = true;\n\t\t\t\t\t\t\t\tif(this._firstChild(this.get_container_ul()[0])) {\n\t\t\t\t\t\t\t\t\tthis.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t * triggered after the root node is loaded for the first time\n\t\t\t\t\t\t\t\t * @event\n\t\t\t\t\t\t\t\t * @name loaded.jstree\n\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\tthis.trigger(\"loaded\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!this._data.core.ready) {\n\t\t\t\t\t\t\t\tsetTimeout($.proxy(function() {\n\t\t\t\t\t\t\t\t\tif(this.element && !this.get_container_ul().find('.jstree-loading').length) {\n\t\t\t\t\t\t\t\t\t\tthis._data.core.ready = true;\n\t\t\t\t\t\t\t\t\t\tif(this._data.core.selected.length) {\n\t\t\t\t\t\t\t\t\t\t\tif(this.settings.core.expand_selected_onload) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar tmp = [], i, j;\n\t\t\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\ttmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\ttmp = $.vakata.array_unique(tmp);\n\t\t\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.open_node(tmp[i], false, 0);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tthis.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected });\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t\t\t\t * triggered after all nodes are finished loading\n\t\t\t\t\t\t\t\t\t\t * @event\n\t\t\t\t\t\t\t\t\t\t * @name ready.jstree\n\t\t\t\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\t\t\t\tthis.trigger(\"ready\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, this), 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t// quick searching when the tree is focused\n\t\t\t\t.on('keypress.jstree', $.proxy(function (e) {\n\t\t\t\t\t\tif(e.target.tagName && e.target.tagName.toLowerCase() === \"input\") { return true; }\n\t\t\t\t\t\tif(tout) { clearTimeout(tout); }\n\t\t\t\t\t\ttout = setTimeout(function () {\n\t\t\t\t\t\t\tword = '';\n\t\t\t\t\t\t}, 500);\n\n\t\t\t\t\t\tvar chr = String.fromCharCode(e.which).toLowerCase(),\n\t\t\t\t\t\t\tcol = this.element.find('.jstree-anchor').filter(':visible'),\n\t\t\t\t\t\t\tind = col.index(document.activeElement) || 0,\n\t\t\t\t\t\t\tend = false;\n\t\t\t\t\t\tword += chr;\n\n\t\t\t\t\t\t// match for whole word from current node down (including the current node)\n\t\t\t\t\t\tif(word.length > 1) {\n\t\t\t\t\t\t\tcol.slice(ind).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().indexOf(word) === 0) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\n\t\t\t\t\t\t\t// match for whole word from the beginning of the tree\n\t\t\t\t\t\t\tcol.slice(0, ind).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().indexOf(word) === 0) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// list nodes that start with that letter (only if word consists of a single char)\n\t\t\t\t\t\tif(new RegExp('^' + chr.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '+$').test(word)) {\n\t\t\t\t\t\t\t// search for the next node starting with that letter\n\t\t\t\t\t\t\tcol.slice(ind + 1).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().charAt(0) === chr) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\n\t\t\t\t\t\t\t// search from the beginning\n\t\t\t\t\t\t\tcol.slice(0, ind + 1).each($.proxy(function (i, v) {\n\t\t\t\t\t\t\t\tif($(v).text().toLowerCase().charAt(0) === chr) {\n\t\t\t\t\t\t\t\t\t$(v).focus();\n\t\t\t\t\t\t\t\t\tend = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t\t\tif(end) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t// THEME RELATED\n\t\t\t\t.on(\"init.jstree\", $.proxy(function () {\n\t\t\t\t\t\tvar s = this.settings.core.themes;\n\t\t\t\t\t\tthis._data.core.themes.dots\t\t\t= s.dots;\n\t\t\t\t\t\tthis._data.core.themes.stripes\t\t= s.stripes;\n\t\t\t\t\t\tthis._data.core.themes.icons\t\t= s.icons;\n\t\t\t\t\t\tthis._data.core.themes.ellipsis\t\t= s.ellipsis;\n\t\t\t\t\t\tthis.set_theme(s.name || \"default\", s.url);\n\t\t\t\t\t\tthis.set_theme_variant(s.variant);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"loading.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis[ this._data.core.themes.dots ? \"show_dots\" : \"hide_dots\" ]();\n\t\t\t\t\t\tthis[ this._data.core.themes.icons ? \"show_icons\" : \"hide_icons\" ]();\n\t\t\t\t\t\tthis[ this._data.core.themes.stripes ? \"show_stripes\" : \"hide_stripes\" ]();\n\t\t\t\t\t\tthis[ this._data.core.themes.ellipsis ? \"show_ellipsis\" : \"hide_ellipsis\" ]();\n\t\t\t\t\t}, this))\n\t\t\t\t.on('blur.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis._data.core.focused = null;\n\t\t\t\t\t\t$(e.currentTarget).filter('.jstree-hovered').trigger('mouseleave');\n\t\t\t\t\t\tthis.element.attr('tabindex', '0');\n\t\t\t\t\t}, this))\n\t\t\t\t.on('focus.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tvar tmp = this.get_node(e.currentTarget);\n\t\t\t\t\t\tif(tmp && tmp.id) {\n\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.element.find('.jstree-hovered').not(e.currentTarget).trigger('mouseleave');\n\t\t\t\t\t\t$(e.currentTarget).trigger('mouseenter');\n\t\t\t\t\t\tthis.element.attr('tabindex', '-1');\n\t\t\t\t\t}, this))\n\t\t\t\t.on('focus.jstree', $.proxy(function () {\n\t\t\t\t\t\tif(+(new Date()) - was_click > 500 && !this._data.core.focused && this.settings.core.restore_focus) {\n\t\t\t\t\t\t\twas_click = 0;\n\t\t\t\t\t\t\tvar act = this.get_node(this.element.attr('aria-activedescendant'), true);\n\t\t\t\t\t\t\tif(act) {\n\t\t\t\t\t\t\t\tact.find('> .jstree-anchor').focus();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis.hover_node(e.currentTarget);\n\t\t\t\t\t}, this))\n\t\t\t\t.on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tthis.dehover_node(e.currentTarget);\n\t\t\t\t\t}, this));\n\t\t},\n\t\t/**\n\t\t * part of the destroying of an instance. Used internally.\n\t\t * @private\n\t\t * @name unbind()\n\t\t */\n\t\tunbind : function () {\n\t\t\tthis.element.off('.jstree');\n\t\t\t$(document).off('.jstree-' + this._id);\n\t\t},\n\t\t/**\n\t\t * trigger an event. Used internally.\n\t\t * @private\n\t\t * @name trigger(ev [, data])\n\t\t * @param  {String} ev the name of the event to trigger\n\t\t * @param  {Object} data additional data to pass with the event\n\t\t */\n\t\ttrigger : function (ev, data) {\n\t\t\tif(!data) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tdata.instance = this;\n\t\t\tthis.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data);\n\t\t},\n\t\t/**\n\t\t * returns the jQuery extended instance container\n\t\t * @name get_container()\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_container : function () {\n\t\t\treturn this.element;\n\t\t},\n\t\t/**\n\t\t * returns the jQuery extended main UL node inside the instance container. Used internally.\n\t\t * @private\n\t\t * @name get_container_ul()\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_container_ul : function () {\n\t\t\treturn this.element.children(\".jstree-children\").first();\n\t\t},\n\t\t/**\n\t\t * gets string replacements (localization). Used internally.\n\t\t * @private\n\t\t * @name get_string(key)\n\t\t * @param  {String} key\n\t\t * @return {String}\n\t\t */\n\t\tget_string : function (key) {\n\t\t\tvar a = this.settings.core.strings;\n\t\t\tif($.isFunction(a)) { return a.call(this, key); }\n\t\t\tif(a && a[key]) { return a[key]; }\n\t\t\treturn key;\n\t\t},\n\t\t/**\n\t\t * gets the first child of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _firstChild(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_firstChild : function (dom) {\n\t\t\tdom = dom ? dom.firstChild : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.nextSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * gets the next sibling of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _nextSibling(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_nextSibling : function (dom) {\n\t\t\tdom = dom ? dom.nextSibling : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.nextSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * gets the previous sibling of a DOM node. Used internally.\n\t\t * @private\n\t\t * @name _previousSibling(dom)\n\t\t * @param  {DOMElement} dom\n\t\t * @return {DOMElement}\n\t\t */\n\t\t_previousSibling : function (dom) {\n\t\t\tdom = dom ? dom.previousSibling : null;\n\t\t\twhile(dom !== null && dom.nodeType !== 1) {\n\t\t\t\tdom = dom.previousSibling;\n\t\t\t}\n\t\t\treturn dom;\n\t\t},\n\t\t/**\n\t\t * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc)\n\t\t * @name get_node(obj [, as_dom])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} as_dom\n\t\t * @return {Object|jQuery}\n\t\t */\n\t\tget_node : function (obj, as_dom) {\n\t\t\tif(obj && obj.id) {\n\t\t\t\tobj = obj.id;\n\t\t\t}\n\t\t\tif (obj instanceof $ && obj.length && obj[0].id) {\n\t\t\t\tobj = obj[0].id;\n\t\t\t}\n\t\t\tvar dom;\n\t\t\ttry {\n\t\t\t\tif(this._model.data[obj]) {\n\t\t\t\t\tobj = this._model.data[obj];\n\t\t\t\t}\n\t\t\t\telse if(typeof obj === \"string\" && this._model.data[obj.replace(/^#/, '')]) {\n\t\t\t\t\tobj = this._model.data[obj.replace(/^#/, '')];\n\t\t\t\t}\n\t\t\t\telse if(typeof obj === \"string\" && (dom = $('#' + obj.replace($.jstree.idregex,'\\\\$&'), this.element)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {\n\t\t\t\t\tobj = this._model.data[dom.closest('.jstree-node').attr('id')];\n\t\t\t\t}\n\t\t\t\telse if((dom = this.element.find(obj)).length && this._model.data[dom.closest('.jstree-node').attr('id')]) {\n\t\t\t\t\tobj = this._model.data[dom.closest('.jstree-node').attr('id')];\n\t\t\t\t}\n\t\t\t\telse if((dom = this.element.find(obj)).length && dom.hasClass('jstree')) {\n\t\t\t\t\tobj = this._model.data[$.jstree.root];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif(as_dom) {\n\t\t\t\t\tobj = obj.id === $.jstree.root ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\\\$&'), this.element);\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t} catch (ex) { return false; }\n\t\t},\n\t\t/**\n\t\t * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array)\n\t\t * @name get_path(obj [, glue, ids])\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned\n\t\t * @param  {Boolean} ids if set to true build the path using ID, otherwise node text is used\n\t\t * @return {mixed}\n\t\t */\n\t\tget_path : function (obj, glue, ids) {\n\t\t\tobj = obj.parents ? obj : this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root || !obj.parents) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar i, j, p = [];\n\t\t\tp.push(ids ? obj.id : obj.text);\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tp.push(ids ? obj.parents[i] : this.get_text(obj.parents[i]));\n\t\t\t}\n\t\t\tp = p.reverse().slice(1);\n\t\t\treturn glue ? p.join(glue) : p;\n\t\t},\n\t\t/**\n\t\t * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned.\n\t\t * @name get_next_dom(obj [, strict])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} strict\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_next_dom : function (obj, strict) {\n\t\t\tvar tmp;\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\ttmp = this._firstChild(this.get_container_ul()[0]);\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t}\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(strict) {\n\t\t\t\ttmp = obj[0];\n\t\t\t\tdo {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(obj.hasClass(\"jstree-open\")) {\n\t\t\t\ttmp = this._firstChild(obj.children('.jstree-children')[0]);\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t\t}\n\t\t\t\tif(tmp !== null) {\n\t\t\t\t\treturn $(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = obj[0];\n\t\t\tdo {\n\t\t\t\ttmp = this._nextSibling(tmp);\n\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\tif(tmp !== null) {\n\t\t\t\treturn $(tmp);\n\t\t\t}\n\t\t\treturn obj.parentsUntil(\".jstree\",\".jstree-node\").nextAll(\".jstree-node:visible\").first();\n\t\t},\n\t\t/**\n\t\t * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned.\n\t\t * @name get_prev_dom(obj [, strict])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Boolean} strict\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_prev_dom : function (obj, strict) {\n\t\t\tvar tmp;\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\ttmp = this.get_container_ul()[0].lastChild;\n\t\t\t\twhile (tmp && tmp.offsetHeight === 0) {\n\t\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t\t}\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(strict) {\n\t\t\t\ttmp = obj[0];\n\t\t\t\tdo {\n\t\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\t\treturn tmp ? $(tmp) : false;\n\t\t\t}\n\t\t\ttmp = obj[0];\n\t\t\tdo {\n\t\t\t\ttmp = this._previousSibling(tmp);\n\t\t\t} while (tmp && tmp.offsetHeight === 0);\n\t\t\tif(tmp !== null) {\n\t\t\t\tobj = $(tmp);\n\t\t\t\twhile(obj.hasClass(\"jstree-open\")) {\n\t\t\t\t\tobj = obj.children(\".jstree-children\").first().children(\".jstree-node:visible:last\");\n\t\t\t\t}\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\ttmp = obj[0].parentNode.parentNode;\n\t\t\treturn tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false;\n\t\t},\n\t\t/**\n\t\t * get the parent ID of a node\n\t\t * @name get_parent(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {String}\n\t\t */\n\t\tget_parent : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.parent;\n\t\t},\n\t\t/**\n\t\t * get a jQuery collection of all the children of a node (node must be rendered), returns false on error\n\t\t * @name get_children_dom(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {jQuery}\n\t\t */\n\t\tget_children_dom : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(obj[0] === this.element[0]) {\n\t\t\t\treturn this.get_container_ul().children(\".jstree-node\");\n\t\t\t}\n\t\t\tif(!obj || !obj.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.children(\".jstree-children\").children(\".jstree-node\");\n\t\t},\n\t\t/**\n\t\t * checks if a node has children\n\t\t * @name is_parent(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_parent : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && (obj.state.loaded === false || obj.children.length > 0);\n\t\t},\n\t\t/**\n\t\t * checks if a node is loaded (its children are available)\n\t\t * @name is_loaded(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_loaded : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state.loaded;\n\t\t},\n\t\t/**\n\t\t * check if a node is currently loading (fetching children)\n\t\t * @name is_loading(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_loading : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state && obj.state.loading;\n\t\t},\n\t\t/**\n\t\t * check if a node is opened\n\t\t * @name is_open(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_open : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state.opened;\n\t\t},\n\t\t/**\n\t\t * check if a node is in a closed state\n\t\t * @name is_closed(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_closed : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && this.is_parent(obj) && !obj.state.opened;\n\t\t},\n\t\t/**\n\t\t * check if a node has no children\n\t\t * @name is_leaf(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_leaf : function (obj) {\n\t\t\treturn !this.is_parent(obj);\n\t\t},\n\t\t/**\n\t\t * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array.\n\t\t * @name load_node(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status\n\t\t * @return {Boolean}\n\t\t * @trigger load_node.jstree\n\t\t */\n\t\tload_node : function (obj, callback) {\n\t\t\tvar k, l, i, j, c;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tthis._load_nodes(obj.slice(), callback);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) {\n\t\t\t\tif(callback) { callback.call(this, obj, false); }\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again?\n\t\t\tif(obj.state.loaded) {\n\t\t\t\tobj.state.loaded = false;\n\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {\n\t\t\t\t\t\treturn $.inArray(v, obj.children_d) === -1;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor(k = 0, l = obj.children_d.length; k < l; k++) {\n\t\t\t\t\tif(this._model.data[obj.children_d[k]].state.selected) {\n\t\t\t\t\t\tc = true;\n\t\t\t\t\t}\n\t\t\t\t\tdelete this._model.data[obj.children_d[k]];\n\t\t\t\t}\n\t\t\t\tif (c) {\n\t\t\t\t\tthis._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {\n\t\t\t\t\t\treturn $.inArray(v, obj.children_d) === -1;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tobj.children = [];\n\t\t\t\tobj.children_d = [];\n\t\t\t\tif(c) {\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected });\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj.state.failed = false;\n\t\t\tobj.state.loading = true;\n\t\t\tthis.get_node(obj, true).addClass(\"jstree-loading\").attr('aria-busy',true);\n\t\t\tthis._load_node(obj, $.proxy(function (status) {\n\t\t\t\tobj = this._model.data[obj.id];\n\t\t\t\tobj.state.loading = false;\n\t\t\t\tobj.state.loaded = status;\n\t\t\t\tobj.state.failed = !obj.state.loaded;\n\t\t\t\tvar dom = this.get_node(obj, true), i = 0, j = 0, m = this._model.data, has_children = false;\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tif(m[obj.children[i]] && !m[obj.children[i]].state.hidden) {\n\t\t\t\t\t\thas_children = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(obj.state.loaded && dom && dom.length) {\n\t\t\t\t\tdom.removeClass('jstree-closed jstree-open jstree-leaf');\n\t\t\t\t\tif (!has_children) {\n\t\t\t\t\t\tdom.addClass('jstree-leaf');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (obj.id !== '#') {\n\t\t\t\t\t\t\tdom.addClass(obj.state.opened ? 'jstree-open' : 'jstree-closed');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t/**\n\t\t\t\t * triggered after a node is loaded\n\t\t\t\t * @event\n\t\t\t\t * @name load_node.jstree\n\t\t\t\t * @param {Object} node the node that was loading\n\t\t\t\t * @param {Boolean} status was the node loaded successfully\n\t\t\t\t */\n\t\t\t\tthis.trigger('load_node', { \"node\" : obj, \"status\" : status });\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, status);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * load an array of nodes (will also load unavailable nodes as soon as they appear in the structure). Used internally.\n\t\t * @private\n\t\t * @name _load_nodes(nodes [, callback])\n\t\t * @param  {array} nodes\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes\n\t\t */\n\t\t_load_nodes : function (nodes, callback, is_callback, force_reload) {\n\t\t\tvar r = true,\n\t\t\t\tc = function () { this._load_nodes(nodes, callback, true); },\n\t\t\t\tm = this._model.data, i, j, tmp = [];\n\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\tif(m[nodes[i]] && ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || (!is_callback && force_reload) )) {\n\t\t\t\t\tif(!this.is_loading(nodes[i])) {\n\t\t\t\t\t\tthis.load_node(nodes[i], c);\n\t\t\t\t\t}\n\t\t\t\t\tr = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(r) {\n\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\tif(m[nodes[i]] && m[nodes[i]].state.loaded) {\n\t\t\t\t\t\ttmp.push(nodes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(callback && !callback.done) {\n\t\t\t\t\tcallback.call(this, tmp);\n\t\t\t\t\tcallback.done = true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * loads all unloaded nodes\n\t\t * @name load_all([obj, callback])\n\t\t * @param {mixed} obj the node to load recursively, omit to load all nodes in the tree\n\t\t * @param {function} callback a function to be executed once loading all the nodes is complete,\n\t\t * @trigger load_all.jstree\n\t\t */\n\t\tload_all : function (obj, callback) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar to_load = [],\n\t\t\t\tm = this._model.data,\n\t\t\t\tc = m[obj.id].children_d,\n\t\t\t\ti, j;\n\t\t\tif(obj.state && !obj.state.loaded) {\n\t\t\t\tto_load.push(obj.id);\n\t\t\t}\n\t\t\tfor(i = 0, j = c.length; i < j; i++) {\n\t\t\t\tif(m[c[i]] && m[c[i]].state && !m[c[i]].state.loaded) {\n\t\t\t\t\tto_load.push(c[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(to_load.length) {\n\t\t\t\tthis._load_nodes(to_load, function () {\n\t\t\t\t\tthis.load_all(obj, callback);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\t/**\n\t\t\t\t * triggered after a load_all call completes\n\t\t\t\t * @event\n\t\t\t\t * @name load_all.jstree\n\t\t\t\t * @param {Object} node the recursively loaded node\n\t\t\t\t */\n\t\t\t\tif(callback) { callback.call(this, obj); }\n\t\t\t\tthis.trigger('load_all', { \"node\" : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * handles the actual loading of a node. Used only internally.\n\t\t * @private\n\t\t * @name _load_node(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status\n\t\t * @return {Boolean}\n\t\t */\n\t\t_load_node : function (obj, callback) {\n\t\t\tvar s = this.settings.core.data, t;\n\t\t\tvar notTextOrCommentNode = function notTextOrCommentNode () {\n\t\t\t\treturn this.nodeType !== 3 && this.nodeType !== 8;\n\t\t\t};\n\t\t\t// use original HTML\n\t\t\tif(!s) {\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t// return callback.call(this, obj.id === $.jstree.root ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false);\n\t\t\t}\n\t\t\tif($.isFunction(s)) {\n\t\t\t\treturn s.call(this, obj, $.proxy(function (d) {\n\t\t\t\t\tif(d === false) {\n\t\t\t\t\t\tcallback.call(this, false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $($.parseHTML(d)).filter(notTextOrCommentNode) : d, function (status) {\n\t\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d));\n\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(typeof s === 'object') {\n\t\t\t\tif(s.url) {\n\t\t\t\t\ts = $.extend(true, {}, s);\n\t\t\t\t\tif($.isFunction(s.url)) {\n\t\t\t\t\t\ts.url = s.url.call(this, obj);\n\t\t\t\t\t}\n\t\t\t\t\tif($.isFunction(s.data)) {\n\t\t\t\t\t\ts.data = s.data.call(this, obj);\n\t\t\t\t\t}\n\t\t\t\t\treturn $.ajax(s)\n\t\t\t\t\t\t.done($.proxy(function (d,t,x) {\n\t\t\t\t\t\t\t\tvar type = x.getResponseHeader('Content-Type');\n\t\t\t\t\t\t\t\tif((type && type.indexOf('json') !== -1) || typeof d === \"object\") {\n\t\t\t\t\t\t\t\t\treturn this._append_json_data(obj, d, function (status) { callback.call(this, status); });\n\t\t\t\t\t\t\t\t\t//return callback.call(this, this._append_json_data(obj, d));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif((type && type.indexOf('html') !== -1) || typeof d === \"string\") {\n\t\t\t\t\t\t\t\t\treturn this._append_html_data(obj, $($.parseHTML(d)).filter(notTextOrCommentNode), function (status) { callback.call(this, status); });\n\t\t\t\t\t\t\t\t\t// return callback.call(this, this._append_html_data(obj, $(d)));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) };\n\t\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t\t\t\t}, this))\n\t\t\t\t\t\t.fail($.proxy(function (f) {\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) };\n\t\t\t\t\t\t\t\tcallback.call(this, false);\n\t\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t\t}, this));\n\t\t\t\t}\n\t\t\t\tif ($.isArray(s)) {\n\t\t\t\t\tt = $.extend(true, [], s);\n\t\t\t\t} else if ($.isPlainObject(s)) {\n\t\t\t\t\tt = $.extend(true, {}, s);\n\t\t\t\t} else {\n\t\t\t\t\tt = s;\n\t\t\t\t}\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_json_data(obj, t, function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };\n\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t//return callback.call(this, (obj.id === $.jstree.root ? this._append_json_data(obj, t) : false) );\n\t\t\t}\n\t\t\tif(typeof s === 'string') {\n\t\t\t\tif(obj.id === $.jstree.root) {\n\t\t\t\t\treturn this._append_html_data(obj, $($.parseHTML(s)).filter(notTextOrCommentNode), function (status) {\n\t\t\t\t\t\tcallback.call(this, status);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) };\n\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\treturn callback.call(this, false);\n\t\t\t\t}\n\t\t\t\t//return callback.call(this, (obj.id === $.jstree.root ? this._append_html_data(obj, $(s)) : false) );\n\t\t\t}\n\t\t\treturn callback.call(this, false);\n\t\t},\n\t\t/**\n\t\t * adds a node to the list of nodes to redraw. Used only internally.\n\t\t * @private\n\t\t * @name _node_changed(obj [, callback])\n\t\t * @param  {mixed} obj\n\t\t */\n\t\t_node_changed : function (obj) {\n\t\t\tobj = this.get_node(obj);\n      if (obj && $.inArray(obj.id, this._model.changed) === -1) {\n\t\t\t\tthis._model.changed.push(obj.id);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * appends HTML content to the tree. Used internally.\n\t\t * @private\n\t\t * @name _append_html_data(obj, data)\n\t\t * @param  {mixed} obj the node to append to\n\t\t * @param  {String} data the HTML string to parse and append\n\t\t * @trigger model.jstree, changed.jstree\n\t\t */\n\t\t_append_html_data : function (dom, data, cb) {\n\t\t\tdom = this.get_node(dom);\n\t\t\tdom.children = [];\n\t\t\tdom.children_d = [];\n\t\t\tvar dat = data.is('ul') ? data.children() : data,\n\t\t\t\tpar = dom.id,\n\t\t\t\tchd = [],\n\t\t\t\tdpc = [],\n\t\t\t\tm = this._model.data,\n\t\t\t\tp = m[par],\n\t\t\t\ts = this._data.core.selected.length,\n\t\t\t\ttmp, i, j;\n\t\t\tdat.each($.proxy(function (i, v) {\n\t\t\t\ttmp = this._parse_model_from_html($(v), par, p.parents.concat());\n\t\t\t\tif(tmp) {\n\t\t\t\t\tchd.push(tmp);\n\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\tp.children = chd;\n\t\t\tp.children_d = dpc;\n\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when new data is inserted to the tree model\n\t\t\t * @event\n\t\t\t * @name model.jstree\n\t\t\t * @param {Array} nodes an array of node IDs\n\t\t\t * @param {String} parent the parent ID of the nodes\n\t\t\t */\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, 'parent' : par });\n\t\t\tif(par !== $.jstree.root) {\n\t\t\t\tthis._node_changed(par);\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.get_container_ul().children('.jstree-initial-node').remove();\n\t\t\t\tthis.redraw(true);\n\t\t\t}\n\t\t\tif(this._data.core.selected.length !== s) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });\n\t\t\t}\n\t\t\tcb.call(this, true);\n\t\t},\n\t\t/**\n\t\t * appends JSON content to the tree. Used internally.\n\t\t * @private\n\t\t * @name _append_json_data(obj, data)\n\t\t * @param  {mixed} obj the node to append to\n\t\t * @param  {String} data the JSON object to parse and append\n\t\t * @param  {Boolean} force_processing internal param - do not set\n\t\t * @trigger model.jstree, changed.jstree\n\t\t */\n\t\t_append_json_data : function (dom, data, cb, force_processing) {\n\t\t\tif(this.element === null) { return; }\n\t\t\tdom = this.get_node(dom);\n\t\t\tdom.children = [];\n\t\t\tdom.children_d = [];\n\t\t\t// *%$@!!!\n\t\t\tif(data.d) {\n\t\t\t\tdata = data.d;\n\t\t\t\tif(typeof data === \"string\") {\n\t\t\t\t\tdata = JSON.parse(data);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!$.isArray(data)) { data = [data]; }\n\t\t\tvar w = null,\n\t\t\t\targs = {\n\t\t\t\t\t'df'\t: this._model.default_state,\n\t\t\t\t\t'dat'\t: data,\n\t\t\t\t\t'par'\t: dom.id,\n\t\t\t\t\t'm'\t\t: this._model.data,\n\t\t\t\t\t't_id'\t: this._id,\n\t\t\t\t\t't_cnt'\t: this._cnt,\n\t\t\t\t\t'sel'\t: this._data.core.selected\n\t\t\t\t},\n\t\t\t\tinst = this,\n\t\t\t\tfunc = function (data, undefined) {\n\t\t\t\t\tif(data.data) { data = data.data; }\n\t\t\t\t\tvar dat = data.dat,\n\t\t\t\t\t\tpar = data.par,\n\t\t\t\t\t\tchd = [],\n\t\t\t\t\t\tdpc = [],\n\t\t\t\t\t\tadd = [],\n\t\t\t\t\t\tdf = data.df,\n\t\t\t\t\t\tt_id = data.t_id,\n\t\t\t\t\t\tt_cnt = data.t_cnt,\n\t\t\t\t\t\tm = data.m,\n\t\t\t\t\t\tp = m[par],\n\t\t\t\t\t\tsel = data.sel,\n\t\t\t\t\t\ttmp, i, j, rslt,\n\t\t\t\t\t\tparse_flat = function (d, p, ps) {\n\t\t\t\t\t\t\tif(!ps) { ps = []; }\n\t\t\t\t\t\t\telse { ps = ps.concat(); }\n\t\t\t\t\t\t\tif(p) { ps.unshift(p); }\n\t\t\t\t\t\t\tvar tid = d.id.toString(),\n\t\t\t\t\t\t\t\ti, j, c, e,\n\t\t\t\t\t\t\t\ttmp = {\n\t\t\t\t\t\t\t\t\tid\t\t\t: tid,\n\t\t\t\t\t\t\t\t\ttext\t\t: d.text || '',\n\t\t\t\t\t\t\t\t\ticon\t\t: d.icon !== undefined ? d.icon : true,\n\t\t\t\t\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\t\t\t\t\tchildren\t: d.children || [],\n\t\t\t\t\t\t\t\t\tchildren_d\t: d.children_d || [],\n\t\t\t\t\t\t\t\t\tdata\t\t: d.data,\n\t\t\t\t\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\t\t\t\t\toriginal\t: false\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor(i in df) {\n\t\t\t\t\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\t\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\t\t\t\t\ttmp.icon = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data) {\n\t\t\t\t\t\t\t\ttmp.data = d.data;\n\t\t\t\t\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.state) {\n\t\t\t\t\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\t\t\t\t\ttmp.li_attr.id = tid;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\t\t\t\t\ttmp.state.loaded = false;\n\t\t\t\t\t\t\t\ttmp.children = [];\n\t\t\t\t\t\t\t\ttmp.children_d = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[tmp.id] = tmp;\n\t\t\t\t\t\t\tfor(i = 0, j = tmp.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\tc = parse_flat(m[tmp.children[i]], tmp.id, ps);\n\t\t\t\t\t\t\t\te = m[c];\n\t\t\t\t\t\t\t\ttmp.children_d.push(c);\n\t\t\t\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete d.data;\n\t\t\t\t\t\t\tdelete d.children;\n\t\t\t\t\t\t\tm[tmp.id].original = d;\n\t\t\t\t\t\t\tif(tmp.state.selected) {\n\t\t\t\t\t\t\t\tadd.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tmp.id;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tparse_nest = function (d, p, ps) {\n\t\t\t\t\t\t\tif(!ps) { ps = []; }\n\t\t\t\t\t\t\telse { ps = ps.concat(); }\n\t\t\t\t\t\t\tif(p) { ps.unshift(p); }\n\t\t\t\t\t\t\tvar tid = false, i, j, c, e, tmp;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\ttid = 'j' + t_id + '_' + (++t_cnt);\n\t\t\t\t\t\t\t} while(m[tid]);\n\n\t\t\t\t\t\t\ttmp = {\n\t\t\t\t\t\t\t\tid\t\t\t: false,\n\t\t\t\t\t\t\t\ttext\t\t: typeof d === 'string' ? d : '',\n\t\t\t\t\t\t\t\ticon\t\t: typeof d === 'object' && d.icon !== undefined ? d.icon : true,\n\t\t\t\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\t\t\t\tchildren\t: [],\n\t\t\t\t\t\t\t\tchildren_d\t: [],\n\t\t\t\t\t\t\t\tdata\t\t: null,\n\t\t\t\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\t\t\t\toriginal\t: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor(i in df) {\n\t\t\t\t\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.id) { tmp.id = d.id.toString(); }\n\t\t\t\t\t\t\tif(d && d.text) { tmp.text = d.text; }\n\t\t\t\t\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\t\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\t\t\t\t\ttmp.icon = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.data) {\n\t\t\t\t\t\t\t\ttmp.data = d.data;\n\t\t\t\t\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.state) {\n\t\t\t\t\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(tmp.li_attr.id && !tmp.id) {\n\t\t\t\t\t\t\t\ttmp.id = tmp.li_attr.id.toString();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.id) {\n\t\t\t\t\t\t\t\ttmp.id = tid;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\t\t\t\t\ttmp.li_attr.id = tmp.id;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children.length) {\n\t\t\t\t\t\t\t\tfor(i = 0, j = d.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc = parse_nest(d.children[i], tmp.id, ps);\n\t\t\t\t\t\t\t\t\te = m[c];\n\t\t\t\t\t\t\t\t\ttmp.children.push(c);\n\t\t\t\t\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(tmp.children);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\t\t\t\t\ttmp.state.loaded = false;\n\t\t\t\t\t\t\t\ttmp.children = [];\n\t\t\t\t\t\t\t\ttmp.children_d = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdelete d.data;\n\t\t\t\t\t\t\tdelete d.children;\n\t\t\t\t\t\t\ttmp.original = d;\n\t\t\t\t\t\t\tm[tmp.id] = tmp;\n\t\t\t\t\t\t\tif(tmp.state.selected) {\n\t\t\t\t\t\t\t\tadd.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tmp.id;\n\t\t\t\t\t\t};\n\n\t\t\t\t\tif(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) {\n\t\t\t\t\t\t// Flat JSON support (for easy import from DB):\n\t\t\t\t\t\t// 1) convert to object (foreach)\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\tif(!dat[i].children) {\n\t\t\t\t\t\t\t\tdat[i].children = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!dat[i].state) {\n\t\t\t\t\t\t\t\tdat[i].state = {};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[dat[i].id.toString()] = dat[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 2) populate children (foreach)\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\tif (!m[dat[i].parent.toString()]) {\n\t\t\t\t\t\t\t\tif (typeof inst !== \"undefined\") {\n\t\t\t\t\t\t\t\t\tinst._data.core.last_error = { 'error' : 'parse', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Node with invalid parent', 'data' : JSON.stringify({ 'id' : dat[i].id.toString(), 'parent' : dat[i].parent.toString() }) };\n\t\t\t\t\t\t\t\t\tinst.settings.core.error.call(inst, inst._data.core.last_error);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tm[dat[i].parent.toString()].children.push(dat[i].id.toString());\n\t\t\t\t\t\t\t// populate parent.children_d\n\t\t\t\t\t\t\tp.children_d.push(dat[i].id.toString());\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 3) normalize && populate parents and children_d with recursion\n\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = parse_flat(m[p.children[i]], par, p.parents.concat());\n\t\t\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true;\n\t\t\t\t\t\trslt = {\n\t\t\t\t\t\t\t'cnt' : t_cnt,\n\t\t\t\t\t\t\t'mod' : m,\n\t\t\t\t\t\t\t'sel' : sel,\n\t\t\t\t\t\t\t'par' : par,\n\t\t\t\t\t\t\t'dpc' : dpc,\n\t\t\t\t\t\t\t'add' : add\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor(i = 0, j = dat.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = parse_nest(dat[i], par, p.parents.concat());\n\t\t\t\t\t\t\tif(tmp) {\n\t\t\t\t\t\t\t\tchd.push(tmp);\n\t\t\t\t\t\t\t\tdpc.push(tmp);\n\t\t\t\t\t\t\t\tif(m[tmp].children_d.length) {\n\t\t\t\t\t\t\t\t\tdpc = dpc.concat(m[tmp].children_d);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.children = chd;\n\t\t\t\t\t\tp.children_d = dpc;\n\t\t\t\t\t\tfor(i = 0, j = p.parents.length; i < j; i++) {\n\t\t\t\t\t\t\tm[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trslt = {\n\t\t\t\t\t\t\t'cnt' : t_cnt,\n\t\t\t\t\t\t\t'mod' : m,\n\t\t\t\t\t\t\t'sel' : sel,\n\t\t\t\t\t\t\t'par' : par,\n\t\t\t\t\t\t\t'dpc' : dpc,\n\t\t\t\t\t\t\t'add' : add\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof window === 'undefined' || typeof window.document === 'undefined') {\n\t\t\t\t\t\tpostMessage(rslt);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treturn rslt;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trslt = function (rslt, worker) {\n\t\t\t\t\tif(this.element === null) { return; }\n\t\t\t\t\tthis._cnt = rslt.cnt;\n\t\t\t\t\tvar i, m = this._model.data;\n\t\t\t\t\tfor (i in m) {\n\t\t\t\t\t\tif (m.hasOwnProperty(i) && m[i].state && m[i].state.loading && rslt.mod[i]) {\n\t\t\t\t\t\t\trslt.mod[i].state.loading = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._model.data = rslt.mod; // breaks the reference in load_node - careful\n\n\t\t\t\t\tif(worker) {\n\t\t\t\t\t\tvar j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice();\n\t\t\t\t\t\tm = this._model.data;\n\t\t\t\t\t\t// if selection was changed while calculating in worker\n\t\t\t\t\t\tif(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) {\n\t\t\t\t\t\t\t// deselect nodes that are no longer selected\n\t\t\t\t\t\t\tfor(i = 0, j = r.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) {\n\t\t\t\t\t\t\t\t\tm[r[i]].state.selected = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// select nodes that were selected in the mean time\n\t\t\t\t\t\t\tfor(i = 0, j = s.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif($.inArray(s[i], r) === -1) {\n\t\t\t\t\t\t\t\t\tm[s[i]].state.selected = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(rslt.add.length) {\n\t\t\t\t\t\tthis._data.core.selected = this._data.core.selected.concat(rslt.add);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.trigger('model', { \"nodes\" : rslt.dpc, 'parent' : rslt.par });\n\n\t\t\t\t\tif(rslt.par !== $.jstree.root) {\n\t\t\t\t\t\tthis._node_changed(rslt.par);\n\t\t\t\t\t\tthis.redraw();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// this.get_container_ul().children('.jstree-initial-node').remove();\n\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t}\n\t\t\t\t\tif(rslt.add.length) {\n\t\t\t\t\t\tthis.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected });\n\t\t\t\t\t}\n\t\t\t\t\tcb.call(this, true);\n\t\t\t\t};\n\t\t\tif(this.settings.core.worker && window.Blob && window.URL && window.Worker) {\n\t\t\t\ttry {\n\t\t\t\t\tif(this._wrk === null) {\n\t\t\t\t\t\tthis._wrk = window.URL.createObjectURL(\n\t\t\t\t\t\t\tnew window.Blob(\n\t\t\t\t\t\t\t\t['self.onmessage = ' + func.toString()],\n\t\t\t\t\t\t\t\t{type:\"text/javascript\"}\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif(!this._data.core.working || force_processing) {\n\t\t\t\t\t\tthis._data.core.working = true;\n\t\t\t\t\t\tw = new window.Worker(this._wrk);\n\t\t\t\t\t\tw.onmessage = $.proxy(function (e) {\n\t\t\t\t\t\t\trslt.call(this, e.data, true);\n\t\t\t\t\t\t\ttry { w.terminate(); w = null; } catch(ignore) { }\n\t\t\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this);\n\t\t\t\t\t\tif(!args.par) {\n\t\t\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tw.postMessage(args);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._data.core.worker_queue.push([dom, data, cb, true]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\trslt.call(this, func(args), false);\n\t\t\t\t\tif(this._data.core.worker_queue.length) {\n\t\t\t\t\t\tthis._append_json_data.apply(this, this._data.core.worker_queue.shift());\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._data.core.working = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\trslt.call(this, func(args), false);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * parses a node from a jQuery object and appends them to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_html(d [, p, ps])\n\t\t * @param  {jQuery} d the jQuery object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_html : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = [].concat(ps); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar c, e, m = this._model.data,\n\t\t\t\tdata = {\n\t\t\t\t\tid\t\t\t: false,\n\t\t\t\t\ttext\t\t: false,\n\t\t\t\t\ticon\t\t: true,\n\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\tchildren\t: [],\n\t\t\t\t\tchildren_d\t: [],\n\t\t\t\t\tdata\t\t: null,\n\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\toriginal\t: false\n\t\t\t\t}, i, tmp, tid;\n\t\t\tfor(i in this._model.default_state) {\n\t\t\t\tif(this._model.default_state.hasOwnProperty(i)) {\n\t\t\t\t\tdata.state[i] = this._model.default_state[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = $.vakata.attributes(d, true);\n\t\t\t$.each(tmp, function (i, v) {\n\t\t\t\tv = $.trim(v);\n\t\t\t\tif(!v.length) { return true; }\n\t\t\t\tdata.li_attr[i] = v;\n\t\t\t\tif(i === 'id') {\n\t\t\t\t\tdata.id = v.toString();\n\t\t\t\t}\n\t\t\t});\n\t\t\ttmp = d.children('a').first();\n\t\t\tif(tmp.length) {\n\t\t\t\ttmp = $.vakata.attributes(tmp, true);\n\t\t\t\t$.each(tmp, function (i, v) {\n\t\t\t\t\tv = $.trim(v);\n\t\t\t\t\tif(v.length) {\n\t\t\t\t\t\tdata.a_attr[i] = v;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\ttmp = d.children(\"a\").first().length ? d.children(\"a\").first().clone() : d.clone();\n\t\t\ttmp.children(\"ins, i, ul\").remove();\n\t\t\ttmp = tmp.html();\n\t\t\ttmp = $('<div />').html(tmp);\n\t\t\tdata.text = this.settings.core.force_text ? tmp.text() : tmp.html();\n\t\t\ttmp = d.data();\n\t\t\tdata.data = tmp ? $.extend(true, {}, tmp) : null;\n\t\t\tdata.state.opened = d.hasClass('jstree-open');\n\t\t\tdata.state.selected = d.children('a').hasClass('jstree-clicked');\n\t\t\tdata.state.disabled = d.children('a').hasClass('jstree-disabled');\n\t\t\tif(data.data && data.data.jstree) {\n\t\t\t\tfor(i in data.data.jstree) {\n\t\t\t\t\tif(data.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\tdata.state[i] = data.data.jstree[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = d.children(\"a\").children(\".jstree-themeicon\");\n\t\t\tif(tmp.length) {\n\t\t\t\tdata.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel');\n\t\t\t}\n\t\t\tif(data.state.icon !== undefined) {\n\t\t\t\tdata.icon = data.state.icon;\n\t\t\t}\n\t\t\tif(data.icon === undefined || data.icon === null || data.icon === \"\") {\n\t\t\t\tdata.icon = true;\n\t\t\t}\n\t\t\ttmp = d.children(\"ul\").children(\"li\");\n\t\t\tdo {\n\t\t\t\ttid = 'j' + this._id + '_' + (++this._cnt);\n\t\t\t} while(m[tid]);\n\t\t\tdata.id = data.li_attr.id ? data.li_attr.id.toString() : tid;\n\t\t\tif(tmp.length) {\n\t\t\t\ttmp.each($.proxy(function (i, v) {\n\t\t\t\t\tc = this._parse_model_from_html($(v), data.id, ps);\n\t\t\t\t\te = this._model.data[c];\n\t\t\t\t\tdata.children.push(c);\n\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\tdata.children_d = data.children_d.concat(e.children_d);\n\t\t\t\t\t}\n\t\t\t\t}, this));\n\t\t\t\tdata.children_d = data.children_d.concat(data.children);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(d.hasClass('jstree-closed')) {\n\t\t\t\t\tdata.state.loaded = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(data.li_attr['class']) {\n\t\t\t\tdata.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open','');\n\t\t\t}\n\t\t\tif(data.a_attr['class']) {\n\t\t\t\tdata.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled','');\n\t\t\t}\n\t\t\tm[data.id] = data;\n\t\t\tif(data.state.selected) {\n\t\t\t\tthis._data.core.selected.push(data.id);\n\t\t\t}\n\t\t\treturn data.id;\n\t\t},\n\t\t/**\n\t\t * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_flat_json(d [, p, ps])\n\t\t * @param  {Object} d the JSON object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_flat_json : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = ps.concat(); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar tid = d.id.toString(),\n\t\t\t\tm = this._model.data,\n\t\t\t\tdf = this._model.default_state,\n\t\t\t\ti, j, c, e,\n\t\t\t\ttmp = {\n\t\t\t\t\tid\t\t\t: tid,\n\t\t\t\t\ttext\t\t: d.text || '',\n\t\t\t\t\ticon\t\t: d.icon !== undefined ? d.icon : true,\n\t\t\t\t\tparent\t\t: p,\n\t\t\t\t\tparents\t\t: ps,\n\t\t\t\t\tchildren\t: d.children || [],\n\t\t\t\t\tchildren_d\t: d.children_d || [],\n\t\t\t\t\tdata\t\t: d.data,\n\t\t\t\t\tstate\t\t: { },\n\t\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\t\toriginal\t: false\n\t\t\t\t};\n\t\t\tfor(i in df) {\n\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t}\n\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\ttmp.icon = true;\n\t\t\t}\n\t\t\tif(d && d.data) {\n\t\t\t\ttmp.data = d.data;\n\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\tfor (i in d.state) {\n\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\ttmp.li_attr.id = tid;\n\t\t\t}\n\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\ttmp.state.loaded = false;\n\t\t\t\ttmp.children = [];\n\t\t\t\ttmp.children_d = [];\n\t\t\t}\n\t\t\tm[tmp.id] = tmp;\n\t\t\tfor(i = 0, j = tmp.children.length; i < j; i++) {\n\t\t\t\tc = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps);\n\t\t\t\te = m[c];\n\t\t\t\ttmp.children_d.push(c);\n\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete d.data;\n\t\t\tdelete d.children;\n\t\t\tm[tmp.id].original = d;\n\t\t\tif(tmp.state.selected) {\n\t\t\t\tthis._data.core.selected.push(tmp.id);\n\t\t\t}\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * parses a node from a JSON object and appends it to the in memory tree model. Used internally.\n\t\t * @private\n\t\t * @name _parse_model_from_json(d [, p, ps])\n\t\t * @param  {Object} d the JSON object to parse\n\t\t * @param  {String} p the parent ID\n\t\t * @param  {Array} ps list of all parents\n\t\t * @return {String} the ID of the object added to the model\n\t\t */\n\t\t_parse_model_from_json : function (d, p, ps) {\n\t\t\tif(!ps) { ps = []; }\n\t\t\telse { ps = ps.concat(); }\n\t\t\tif(p) { ps.unshift(p); }\n\t\t\tvar tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp;\n\t\t\tdo {\n\t\t\t\ttid = 'j' + this._id + '_' + (++this._cnt);\n\t\t\t} while(m[tid]);\n\n\t\t\ttmp = {\n\t\t\t\tid\t\t\t: false,\n\t\t\t\ttext\t\t: typeof d === 'string' ? d : '',\n\t\t\t\ticon\t\t: typeof d === 'object' && d.icon !== undefined ? d.icon : true,\n\t\t\t\tparent\t\t: p,\n\t\t\t\tparents\t\t: ps,\n\t\t\t\tchildren\t: [],\n\t\t\t\tchildren_d\t: [],\n\t\t\t\tdata\t\t: null,\n\t\t\t\tstate\t\t: { },\n\t\t\t\tli_attr\t\t: { id : false },\n\t\t\t\ta_attr\t\t: { href : '#' },\n\t\t\t\toriginal\t: false\n\t\t\t};\n\t\t\tfor(i in df) {\n\t\t\t\tif(df.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.state[i] = df[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.id) { tmp.id = d.id.toString(); }\n\t\t\tif(d && d.text) { tmp.text = d.text; }\n\t\t\tif(d && d.data && d.data.jstree && d.data.jstree.icon) {\n\t\t\t\ttmp.icon = d.data.jstree.icon;\n\t\t\t}\n\t\t\tif(tmp.icon === undefined || tmp.icon === null || tmp.icon === \"\") {\n\t\t\t\ttmp.icon = true;\n\t\t\t}\n\t\t\tif(d && d.data) {\n\t\t\t\ttmp.data = d.data;\n\t\t\t\tif(d.data.jstree) {\n\t\t\t\t\tfor(i in d.data.jstree) {\n\t\t\t\t\t\tif(d.data.jstree.hasOwnProperty(i)) {\n\t\t\t\t\t\t\ttmp.state[i] = d.data.jstree[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.state === 'object') {\n\t\t\t\tfor (i in d.state) {\n\t\t\t\t\tif(d.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = d.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && typeof d.li_attr === 'object') {\n\t\t\t\tfor (i in d.li_attr) {\n\t\t\t\t\tif(d.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.li_attr[i] = d.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(tmp.li_attr.id && !tmp.id) {\n\t\t\t\ttmp.id = tmp.li_attr.id.toString();\n\t\t\t}\n\t\t\tif(!tmp.id) {\n\t\t\t\ttmp.id = tid;\n\t\t\t}\n\t\t\tif(!tmp.li_attr.id) {\n\t\t\t\ttmp.li_attr.id = tmp.id;\n\t\t\t}\n\t\t\tif(d && typeof d.a_attr === 'object') {\n\t\t\t\tfor (i in d.a_attr) {\n\t\t\t\t\tif(d.a_attr.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.a_attr[i] = d.a_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(d && d.children && d.children.length) {\n\t\t\t\tfor(i = 0, j = d.children.length; i < j; i++) {\n\t\t\t\t\tc = this._parse_model_from_json(d.children[i], tmp.id, ps);\n\t\t\t\t\te = m[c];\n\t\t\t\t\ttmp.children.push(c);\n\t\t\t\t\tif(e.children_d.length) {\n\t\t\t\t\t\ttmp.children_d = tmp.children_d.concat(e.children_d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttmp.children_d = tmp.children.concat(tmp.children_d);\n\t\t\t}\n\t\t\tif(d && d.children && d.children === true) {\n\t\t\t\ttmp.state.loaded = false;\n\t\t\t\ttmp.children = [];\n\t\t\t\ttmp.children_d = [];\n\t\t\t}\n\t\t\tdelete d.data;\n\t\t\tdelete d.children;\n\t\t\ttmp.original = d;\n\t\t\tm[tmp.id] = tmp;\n\t\t\tif(tmp.state.selected) {\n\t\t\t\tthis._data.core.selected.push(tmp.id);\n\t\t\t}\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * redraws all nodes that need to be redrawn. Used internally.\n\t\t * @private\n\t\t * @name _redraw()\n\t\t * @trigger redraw.jstree\n\t\t */\n\t\t_redraw : function () {\n\t\t\tvar nodes = this._model.force_full_redraw ? this._model.data[$.jstree.root].children.concat([]) : this._model.changed.concat([]),\n\t\t\t\tf = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused;\n\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\ttmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw);\n\t\t\t\tif(tmp && this._model.force_full_redraw) {\n\t\t\t\t\tf.appendChild(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(this._model.force_full_redraw) {\n\t\t\t\tf.className = this.get_container_ul()[0].className;\n\t\t\t\tf.setAttribute('role','group');\n\t\t\t\tthis.element.empty().append(f);\n\t\t\t\t//this.get_container_ul()[0].appendChild(f);\n\t\t\t}\n\t\t\tif(fe !== null && this.settings.core.restore_focus) {\n\t\t\t\ttmp = this.get_node(fe, true);\n\t\t\t\tif(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) {\n\t\t\t\t\ttmp.children('.jstree-anchor').focus();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.core.focused = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = false;\n\t\t\tthis._model.changed = [];\n\t\t\t/**\n\t\t\t * triggered after nodes are redrawn\n\t\t\t * @event\n\t\t\t * @name redraw.jstree\n\t\t\t * @param {array} nodes the redrawn nodes\n\t\t\t */\n\t\t\tthis.trigger('redraw', { \"nodes\" : nodes });\n\t\t},\n\t\t/**\n\t\t * redraws all nodes that need to be redrawn or optionally - the whole tree\n\t\t * @name redraw([full])\n\t\t * @param {Boolean} full if set to `true` all nodes are redrawn.\n\t\t */\n\t\tredraw : function (full) {\n\t\t\tif(full) {\n\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t}\n\t\t\t//if(this._model.redraw_timeout) {\n\t\t\t//\tclearTimeout(this._model.redraw_timeout);\n\t\t\t//}\n\t\t\t//this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0);\n\t\t\tthis._redraw();\n\t\t},\n\t\t/**\n\t\t * redraws a single node's children. Used internally.\n\t\t * @private\n\t\t * @name draw_children(node)\n\t\t * @param {mixed} node the node whose children will be redrawn\n\t\t */\n\t\tdraw_children : function (node) {\n\t\t\tvar obj = this.get_node(node),\n\t\t\t\ti = false,\n\t\t\t\tj = false,\n\t\t\t\tk = false,\n\t\t\t\td = document;\n\t\t\tif(!obj) { return false; }\n\t\t\tif(obj.id === $.jstree.root) { return this.redraw(true); }\n\t\t\tnode = this.get_node(node, true);\n\t\t\tif(!node || !node.length) { return false; } // TODO: quick toggle\n\n\t\t\tnode.children('.jstree-children').remove();\n\t\t\tnode = node[0];\n\t\t\tif(obj.children.length && obj.state.loaded) {\n\t\t\t\tk = d.createElement('UL');\n\t\t\t\tk.setAttribute('role', 'group');\n\t\t\t\tk.className = 'jstree-children';\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tk.appendChild(this.redraw_node(obj.children[i], true, true));\n\t\t\t\t}\n\t\t\t\tnode.appendChild(k);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * redraws a single node. Used internally.\n\t\t * @private\n\t\t * @name redraw_node(node, deep, is_callback, force_render)\n\t\t * @param {mixed} node the node to redraw\n\t\t * @param {Boolean} deep should child nodes be redrawn too\n\t\t * @param {Boolean} is_callback is this a recursion call\n\t\t * @param {Boolean} force_render should children of closed parents be drawn anyway\n\t\t */\n\t\tredraw_node : function (node, deep, is_callback, force_render) {\n\t\t\tvar obj = this.get_node(node),\n\t\t\t\tpar = false,\n\t\t\t\tind = false,\n\t\t\t\told = false,\n\t\t\t\ti = false,\n\t\t\t\tj = false,\n\t\t\t\tk = false,\n\t\t\t\tc = '',\n\t\t\t\td = document,\n\t\t\t\tm = this._model.data,\n\t\t\t\tf = false,\n\t\t\t\ts = false,\n\t\t\t\ttmp = null,\n\t\t\t\tt = 0,\n\t\t\t\tl = 0,\n\t\t\t\thas_children = false,\n\t\t\t\tlast_sibling = false;\n\t\t\tif(!obj) { return false; }\n\t\t\tif(obj.id === $.jstree.root) {  return this.redraw(true); }\n\t\t\tdeep = deep || obj.children.length === 0;\n\t\t\tnode = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + (\"0123456789\".indexOf(obj.id[0]) !== -1 ? '\\\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\\\$&') : obj.id.replace($.jstree.idregex,'\\\\$&')) ); //, this.element);\n\t\t\tif(!node) {\n\t\t\t\tdeep = true;\n\t\t\t\t//node = d.createElement('LI');\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tpar = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\\\$&'), this.element)[0] : null;\n\t\t\t\t\tif(par !== null && (!par || !m[obj.parent].state.opened)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnode = $(node);\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tpar = node.parent().parent()[0];\n\t\t\t\t\tif(par === this.element[0]) {\n\t\t\t\t\t\tpar = null;\n\t\t\t\t\t}\n\t\t\t\t\tind = node.index();\n\t\t\t\t}\n\t\t\t\t// m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage\n\t\t\t\tif(!deep && obj.children.length && !node.children('.jstree-children').length) {\n\t\t\t\t\tdeep = true;\n\t\t\t\t}\n\t\t\t\tif(!deep) {\n\t\t\t\t\told = node.children('.jstree-children')[0];\n\t\t\t\t}\n\t\t\t\tf = node.children('.jstree-anchor')[0] === document.activeElement;\n\t\t\t\tnode.remove();\n\t\t\t\t//node = d.createElement('LI');\n\t\t\t\t//node = node[0];\n\t\t\t}\n\t\t\tnode = this._data.core.node.cloneNode(true);\n\t\t\t// node is DOM, deep is boolean\n\n\t\t\tc = 'jstree-node ';\n\t\t\tfor(i in obj.li_attr) {\n\t\t\t\tif(obj.li_attr.hasOwnProperty(i)) {\n\t\t\t\t\tif(i === 'id') { continue; }\n\t\t\t\t\tif(i !== 'class') {\n\t\t\t\t\t\tnode.setAttribute(i, obj.li_attr[i]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tc += obj.li_attr[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!obj.a_attr.id) {\n\t\t\t\tobj.a_attr.id = obj.id + '_anchor';\n\t\t\t}\n\t\t\tnode.setAttribute('aria-selected', !!obj.state.selected);\n\t\t\tnode.setAttribute('aria-level', obj.parents.length);\n\t\t\tnode.setAttribute('aria-labelledby', obj.a_attr.id);\n\t\t\tif(obj.state.disabled) {\n\t\t\t\tnode.setAttribute('aria-disabled', true);\n\t\t\t}\n\n\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\tif(!m[obj.children[i]].state.hidden) {\n\t\t\t\t\thas_children = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(obj.parent !== null && m[obj.parent] && !obj.state.hidden) {\n\t\t\t\ti = $.inArray(obj.id, m[obj.parent].children);\n\t\t\t\tlast_sibling = obj.id;\n\t\t\t\tif(i !== -1) {\n\t\t\t\t\ti++;\n\t\t\t\t\tfor(j = m[obj.parent].children.length; i < j; i++) {\n\t\t\t\t\t\tif(!m[m[obj.parent].children[i]].state.hidden) {\n\t\t\t\t\t\t\tlast_sibling = m[obj.parent].children[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(last_sibling !== obj.id) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(obj.state.hidden) {\n\t\t\t\tc += ' jstree-hidden';\n\t\t\t}\n\t\t\tif (obj.state.loading) {\n\t\t\t\tc += ' jstree-loading';\n\t\t\t}\n\t\t\tif(obj.state.loaded && !has_children) {\n\t\t\t\tc += ' jstree-leaf';\n\t\t\t}\n\t\t\telse {\n\t\t\t\tc += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';\n\t\t\t\tnode.setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );\n\t\t\t}\n\t\t\tif(last_sibling === obj.id) {\n\t\t\t\tc += ' jstree-last';\n\t\t\t}\n\t\t\tnode.id = obj.id;\n\t\t\tnode.className = c;\n\t\t\tc = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');\n\t\t\tfor(j in obj.a_attr) {\n\t\t\t\tif(obj.a_attr.hasOwnProperty(j)) {\n\t\t\t\t\tif(j === 'href' && obj.a_attr[j] === '#') { continue; }\n\t\t\t\t\tif(j !== 'class') {\n\t\t\t\t\t\tnode.childNodes[1].setAttribute(j, obj.a_attr[j]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tc += ' ' + obj.a_attr[j];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(c.length) {\n\t\t\t\tnode.childNodes[1].className = 'jstree-anchor ' + c;\n\t\t\t}\n\t\t\tif((obj.icon && obj.icon !== true) || obj.icon === false) {\n\t\t\t\tif(obj.icon === false) {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';\n\t\t\t\t}\n\t\t\t\telse if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundImage = 'url(\"'+obj.icon+'\")';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].style.backgroundSize = 'auto';\n\t\t\t\t\tnode.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(this.settings.core.force_text) {\n\t\t\t\tnode.childNodes[1].appendChild(d.createTextNode(obj.text));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnode.childNodes[1].innerHTML += obj.text;\n\t\t\t}\n\n\n\t\t\tif(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {\n\t\t\t\tk = d.createElement('UL');\n\t\t\t\tk.setAttribute('role', 'group');\n\t\t\t\tk.className = 'jstree-children';\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tk.appendChild(this.redraw_node(obj.children[i], deep, true));\n\t\t\t\t}\n\t\t\t\tnode.appendChild(k);\n\t\t\t}\n\t\t\tif(old) {\n\t\t\t\tnode.appendChild(old);\n\t\t\t}\n\t\t\tif(!is_callback) {\n\t\t\t\t// append back using par / ind\n\t\t\t\tif(!par) {\n\t\t\t\t\tpar = this.element[0];\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = par.childNodes.length; i < j; i++) {\n\t\t\t\t\tif(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {\n\t\t\t\t\t\ttmp = par.childNodes[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!tmp) {\n\t\t\t\t\ttmp = d.createElement('UL');\n\t\t\t\t\ttmp.setAttribute('role', 'group');\n\t\t\t\t\ttmp.className = 'jstree-children';\n\t\t\t\t\tpar.appendChild(tmp);\n\t\t\t\t}\n\t\t\t\tpar = tmp;\n\n\t\t\t\tif(ind < par.childNodes.length) {\n\t\t\t\t\tpar.insertBefore(node, par.childNodes[ind]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpar.appendChild(node);\n\t\t\t\t}\n\t\t\t\tif(f) {\n\t\t\t\t\tt = this.element[0].scrollTop;\n\t\t\t\t\tl = this.element[0].scrollLeft;\n\t\t\t\t\tnode.childNodes[1].focus();\n\t\t\t\t\tthis.element[0].scrollTop = t;\n\t\t\t\t\tthis.element[0].scrollLeft = l;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(obj.state.opened && !obj.state.loaded) {\n\t\t\t\tobj.state.opened = false;\n\t\t\t\tsetTimeout($.proxy(function () {\n\t\t\t\t\tthis.open_node(obj.id, false, 0);\n\t\t\t\t}, this), 0);\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\t\t/**\n\t\t * opens a node, revealing its children. If the node is not loaded it will be loaded and opened once ready.\n\t\t * @name open_node(obj [, callback, animation])\n\t\t * @param {mixed} obj the node to open\n\t\t * @param {Function} callback a function to execute once the node is opened\n\t\t * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation.\n\t\t * @trigger open_node.jstree, after_open.jstree, before_open.jstree\n\t\t */\n\t\topen_node : function (obj, callback, animation) {\n\t\t\tvar t1, t2, d, t;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.open_node(obj[t1], callback, animation);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tanimation = animation === undefined ? this.settings.core.animation : animation;\n\t\t\tif(!this.is_closed(obj)) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, false);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!this.is_loaded(obj)) {\n\t\t\t\tif(this.is_loading(obj)) {\n\t\t\t\t\treturn setTimeout($.proxy(function () {\n\t\t\t\t\t\tthis.open_node(obj, callback, animation);\n\t\t\t\t\t}, this), 500);\n\t\t\t\t}\n\t\t\t\tthis.load_node(obj, function (o, ok) {\n\t\t\t\t\treturn ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\td = this.get_node(obj, true);\n\t\t\t\tt = this;\n\t\t\t\tif(d.length) {\n\t\t\t\t\tif(animation && d.children(\".jstree-children\").length) {\n\t\t\t\t\t\td.children(\".jstree-children\").stop(true, true);\n\t\t\t\t\t}\n\t\t\t\t\tif(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) {\n\t\t\t\t\t\tthis.draw_children(obj);\n\t\t\t\t\t\t//d = this.get_node(obj, true);\n\t\t\t\t\t}\n\t\t\t\t\tif(!animation) {\n\t\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t\t\td[0].className = d[0].className.replace('jstree-closed', 'jstree-open');\n\t\t\t\t\t\td[0].setAttribute(\"aria-expanded\", true);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t\t\td\n\t\t\t\t\t\t\t.children(\".jstree-children\").css(\"display\",\"none\").end()\n\t\t\t\t\t\t\t.removeClass(\"jstree-closed\").addClass(\"jstree-open\").attr(\"aria-expanded\", true)\n\t\t\t\t\t\t\t.children(\".jstree-children\").stop(true, true)\n\t\t\t\t\t\t\t\t.slideDown(animation, function () {\n\t\t\t\t\t\t\t\t\tthis.style.display = \"\";\n\t\t\t\t\t\t\t\t\tif (t.element) {\n\t\t\t\t\t\t\t\t\t\tt.trigger(\"after_open\", { \"node\" : obj });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tobj.state.opened = true;\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback.call(this, obj, true);\n\t\t\t\t}\n\t\t\t\tif(!d.length) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet)\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name before_open.jstree\n\t\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('before_open', { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is opened (if there is an animation it will not be completed yet)\n\t\t\t\t * @event\n\t\t\t\t * @name open_node.jstree\n\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t */\n\t\t\t\tthis.trigger('open_node', { \"node\" : obj });\n\t\t\t\tif(!animation || !d.length) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a node is opened and the animation is complete\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name after_open.jstree\n\t\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger(\"after_open\", { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * opens every parent of a node (node should be loaded)\n\t\t * @name _open_to(obj)\n\t\t * @param {mixed} obj the node to reveal\n\t\t * @private\n\t\t */\n\t\t_open_to : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar i, j, p = obj.parents;\n\t\t\tfor(i = 0, j = p.length; i < j; i+=1) {\n\t\t\t\tif(i !== $.jstree.root) {\n\t\t\t\t\tthis.open_node(p[i], false, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn $('#' + obj.id.replace($.jstree.idregex,'\\\\$&'), this.element);\n\t\t},\n\t\t/**\n\t\t * closes a node, hiding its children\n\t\t * @name close_node(obj [, animation])\n\t\t * @param {mixed} obj the node to close\n\t\t * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation.\n\t\t * @trigger close_node.jstree, after_close.jstree\n\t\t */\n\t\tclose_node : function (obj, animation) {\n\t\t\tvar t1, t2, t, d;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.close_node(obj[t1], animation);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.is_closed(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tanimation = animation === undefined ? this.settings.core.animation : animation;\n\t\t\tt = this;\n\t\t\td = this.get_node(obj, true);\n\n\t\t\tobj.state.opened = false;\n\t\t\t/**\n\t\t\t * triggered when a node is closed (if there is an animation it will not be complete yet)\n\t\t\t * @event\n\t\t\t * @name close_node.jstree\n\t\t\t * @param {Object} node the closed node\n\t\t\t */\n\t\t\tthis.trigger('close_node',{ \"node\" : obj });\n\t\t\tif(!d.length) {\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is closed and the animation is complete\n\t\t\t\t * @event\n\t\t\t\t * @name after_close.jstree\n\t\t\t\t * @param {Object} node the closed node\n\t\t\t\t */\n\t\t\t\tthis.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(!animation) {\n\t\t\t\t\td[0].className = d[0].className.replace('jstree-open', 'jstree-closed');\n\t\t\t\t\td.attr(\"aria-expanded\", false).children('.jstree-children').remove();\n\t\t\t\t\tthis.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td\n\t\t\t\t\t\t.children(\".jstree-children\").attr(\"style\",\"display:block !important\").end()\n\t\t\t\t\t\t.removeClass(\"jstree-open\").addClass(\"jstree-closed\").attr(\"aria-expanded\", false)\n\t\t\t\t\t\t.children(\".jstree-children\").stop(true, true).slideUp(animation, function () {\n\t\t\t\t\t\t\tthis.style.display = \"\";\n\t\t\t\t\t\t\td.children('.jstree-children').remove();\n\t\t\t\t\t\t\tif (t.element) {\n\t\t\t\t\t\t\t\tt.trigger(\"after_close\", { \"node\" : obj });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * toggles a node - closing it if it is open, opening it if it is closed\n\t\t * @name toggle_node(obj)\n\t\t * @param {mixed} obj the node to toggle\n\t\t */\n\t\ttoggle_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.toggle_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.is_closed(obj)) {\n\t\t\t\treturn this.open_node(obj);\n\t\t\t}\n\t\t\tif(this.is_open(obj)) {\n\t\t\t\treturn this.close_node(obj);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * opens all nodes within a node (or the tree), revealing their children. If the node is not loaded it will be loaded and opened once ready.\n\t\t * @name open_all([obj, animation, original_obj])\n\t\t * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree\n\t\t * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation\n\t\t * @param {jQuery} reference to the node that started the process (internal use)\n\t\t * @trigger open_all.jstree\n\t\t */\n\t\topen_all : function (obj, animation, original_obj) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true), i, j, _this;\n\t\t\tif(!dom.length) {\n\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\tif(this.is_closed(this._model.data[obj.children_d[i]])) {\n\t\t\t\t\t\tthis._model.data[obj.children_d[i]].state.opened = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.trigger('open_all', { \"node\" : obj });\n\t\t\t}\n\t\t\toriginal_obj = original_obj || dom;\n\t\t\t_this = this;\n\t\t\tdom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed');\n\t\t\tdom.each(function () {\n\t\t\t\t_this.open_node(\n\t\t\t\t\tthis,\n\t\t\t\t\tfunction(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } },\n\t\t\t\t\tanimation || 0\n\t\t\t\t);\n\t\t\t});\n\t\t\tif(original_obj.find('.jstree-closed').length === 0) {\n\t\t\t\t/**\n\t\t\t\t * triggered when an `open_all` call completes\n\t\t\t\t * @event\n\t\t\t\t * @name open_all.jstree\n\t\t\t\t * @param {Object} node the opened node\n\t\t\t\t */\n\t\t\t\tthis.trigger('open_all', { \"node\" : this.get_node(original_obj) });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * closes all nodes within a node (or the tree), revealing their children\n\t\t * @name close_all([obj, animation])\n\t\t * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree\n\t\t * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation\n\t\t * @trigger close_all.jstree\n\t\t */\n\t\tclose_all : function (obj, animation) {\n\t\t\tif(!obj) { obj = $.jstree.root; }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar dom = obj.id === $.jstree.root ? this.get_container_ul() : this.get_node(obj, true),\n\t\t\t\t_this = this, i, j;\n\t\t\tif(dom.length) {\n\t\t\t\tdom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open');\n\t\t\t\t$(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); });\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tthis._model.data[obj.children_d[i]].state.opened = false;\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when an `close_all` call completes\n\t\t\t * @event\n\t\t\t * @name close_all.jstree\n\t\t\t * @param {Object} node the closed node\n\t\t\t */\n\t\t\tthis.trigger('close_all', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * checks if a node is disabled (not selectable)\n\t\t * @name is_disabled(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_disabled : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj && obj.state && obj.state.disabled;\n\t\t},\n\t\t/**\n\t\t * enables a node - so that it can be selected\n\t\t * @name enable_node(obj)\n\t\t * @param {mixed} obj the node to enable\n\t\t * @trigger enable_node.jstree\n\t\t */\n\t\tenable_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.enable_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.state.disabled = false;\n\t\t\tthis.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled').attr('aria-disabled', false);\n\t\t\t/**\n\t\t\t * triggered when an node is enabled\n\t\t\t * @event\n\t\t\t * @name enable_node.jstree\n\t\t\t * @param {Object} node the enabled node\n\t\t\t */\n\t\t\tthis.trigger('enable_node', { 'node' : obj });\n\t\t},\n\t\t/**\n\t\t * disables a node - so that it can not be selected\n\t\t * @name disable_node(obj)\n\t\t * @param {mixed} obj the node to disable\n\t\t * @trigger disable_node.jstree\n\t\t */\n\t\tdisable_node : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.disable_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.state.disabled = true;\n\t\t\tthis.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled').attr('aria-disabled', true);\n\t\t\t/**\n\t\t\t * triggered when an node is disabled\n\t\t\t * @event\n\t\t\t * @name disable_node.jstree\n\t\t\t * @param {Object} node the disabled node\n\t\t\t */\n\t\t\tthis.trigger('disable_node', { 'node' : obj });\n\t\t},\n\t\t/**\n\t\t * determines if a node is hidden\n\t\t * @name is_hidden(obj)\n\t\t * @param {mixed} obj the node\n\t\t */\n\t\tis_hidden : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn obj.state.hidden === true;\n\t\t},\n\t\t/**\n\t\t * hides a node - it is still in the structure but will not be visible\n\t\t * @name hide_node(obj)\n\t\t * @param {mixed} obj the node to hide\n\t\t * @param {Boolean} skip_redraw internal parameter controlling if redraw is called\n\t\t * @trigger hide_node.jstree\n\t\t */\n\t\thide_node : function (obj, skip_redraw) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.hide_node(obj[t1], true);\n\t\t\t\t}\n\t\t\t\tif (!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!obj.state.hidden) {\n\t\t\t\tobj.state.hidden = true;\n\t\t\t\tthis._node_changed(obj.parent);\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is hidden\n\t\t\t\t * @event\n\t\t\t\t * @name hide_node.jstree\n\t\t\t\t * @param {Object} node the hidden node\n\t\t\t\t */\n\t\t\t\tthis.trigger('hide_node', { 'node' : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * shows a node\n\t\t * @name show_node(obj)\n\t\t * @param {mixed} obj the node to show\n\t\t * @param {Boolean} skip_redraw internal parameter controlling if redraw is called\n\t\t * @trigger show_node.jstree\n\t\t */\n\t\tshow_node : function (obj, skip_redraw) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.show_node(obj[t1], true);\n\t\t\t\t}\n\t\t\t\tif (!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(obj.state.hidden) {\n\t\t\t\tobj.state.hidden = false;\n\t\t\t\tthis._node_changed(obj.parent);\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is shown\n\t\t\t\t * @event\n\t\t\t\t * @name show_node.jstree\n\t\t\t\t * @param {Object} node the shown node\n\t\t\t\t */\n\t\t\t\tthis.trigger('show_node', { 'node' : obj });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * hides all nodes\n\t\t * @name hide_all()\n\t\t * @trigger hide_all.jstree\n\t\t */\n\t\thide_all : function (skip_redraw) {\n\t\t\tvar i, m = this._model.data, ids = [];\n\t\t\tfor(i in m) {\n\t\t\t\tif(m.hasOwnProperty(i) && i !== $.jstree.root && !m[i].state.hidden) {\n\t\t\t\t\tm[i].state.hidden = true;\n\t\t\t\t\tids.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = true;\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when all nodes are hidden\n\t\t\t * @event\n\t\t\t * @name hide_all.jstree\n\t\t\t * @param {Array} nodes the IDs of all hidden nodes\n\t\t\t */\n\t\t\tthis.trigger('hide_all', { 'nodes' : ids });\n\t\t\treturn ids;\n\t\t},\n\t\t/**\n\t\t * shows all nodes\n\t\t * @name show_all()\n\t\t * @trigger show_all.jstree\n\t\t */\n\t\tshow_all : function (skip_redraw) {\n\t\t\tvar i, m = this._model.data, ids = [];\n\t\t\tfor(i in m) {\n\t\t\t\tif(m.hasOwnProperty(i) && i !== $.jstree.root && m[i].state.hidden) {\n\t\t\t\t\tm[i].state.hidden = false;\n\t\t\t\t\tids.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._model.force_full_redraw = true;\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when all nodes are shown\n\t\t\t * @event\n\t\t\t * @name show_all.jstree\n\t\t\t * @param {Array} nodes the IDs of all shown nodes\n\t\t\t */\n\t\t\tthis.trigger('show_all', { 'nodes' : ids });\n\t\t\treturn ids;\n\t\t},\n\t\t/**\n\t\t * called when a node is selected by the user. Used internally.\n\t\t * @private\n\t\t * @name activate_node(obj, e)\n\t\t * @param {mixed} obj the node\n\t\t * @param {Object} e the related event\n\t\t * @trigger activate_node.jstree, changed.jstree\n\t\t */\n\t\tactivate_node : function (obj, e) {\n\t\t\tif(this.is_disabled(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!e || typeof e !== 'object') {\n\t\t\t\te = {};\n\t\t\t}\n\n\t\t\t// ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node\n\t\t\tthis._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null;\n\t\t\tif(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; }\n\t\t\tif(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); }\n\n\t\t\tif(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) {\n\t\t\t\tif(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) {\n\t\t\t\t\tthis.deselect_node(obj, false, e);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.deselect_all(true);\n\t\t\t\t\tthis.select_node(obj, false, false, e);\n\t\t\t\t\tthis._data.core.last_clicked = this.get_node(obj);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(e.shiftKey) {\n\t\t\t\t\tvar o = this.get_node(obj).id,\n\t\t\t\t\t\tl = this._data.core.last_clicked.id,\n\t\t\t\t\t\tp = this.get_node(this._data.core.last_clicked.parent).children,\n\t\t\t\t\t\tc = false,\n\t\t\t\t\t\ti, j;\n\t\t\t\t\tfor(i = 0, j = p.length; i < j; i += 1) {\n\t\t\t\t\t\t// separate IFs work whem o and l are the same\n\t\t\t\t\t\tif(p[i] === o) {\n\t\t\t\t\t\t\tc = !c;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(p[i] === l) {\n\t\t\t\t\t\t\tc = !c;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!this.is_disabled(p[i]) && (c || p[i] === o || p[i] === l)) {\n\t\t\t\t\t\t\tif (!this.is_hidden(p[i])) {\n\t\t\t\t\t\t\t\tthis.select_node(p[i], true, false, e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.deselect_node(p[i], true, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'select_node', 'node' : this.get_node(obj), 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(!this.is_selected(obj)) {\n\t\t\t\t\t\tthis.select_node(obj, false, false, e);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.deselect_node(obj, false, e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when an node is clicked or intercated with by the user\n\t\t\t * @event\n\t\t\t * @name activate_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {Object} event the ooriginal event (if any) which triggered the call (may be an empty object)\n\t\t\t */\n\t\t\tthis.trigger('activate_node', { 'node' : this.get_node(obj), 'event' : e });\n\t\t},\n\t\t/**\n\t\t * applies the hover state on a node, called when a node is hovered by the user. Used internally.\n\t\t * @private\n\t\t * @name hover_node(obj)\n\t\t * @param {mixed} obj\n\t\t * @trigger hover_node.jstree\n\t\t */\n\t\thover_node : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(!obj || !obj.length || obj.children('.jstree-hovered').length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar o = this.element.find('.jstree-hovered'), t = this.element;\n\t\t\tif(o && o.length) { this.dehover_node(o); }\n\n\t\t\tobj.children('.jstree-anchor').addClass('jstree-hovered');\n\t\t\t/**\n\t\t\t * triggered when an node is hovered\n\t\t\t * @event\n\t\t\t * @name hover_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t */\n\t\t\tthis.trigger('hover_node', { 'node' : this.get_node(obj) });\n\t\t\tsetTimeout(function () { t.attr('aria-activedescendant', obj[0].id); }, 0);\n\t\t},\n\t\t/**\n\t\t * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally.\n\t\t * @private\n\t\t * @name dehover_node(obj)\n\t\t * @param {mixed} obj\n\t\t * @trigger dehover_node.jstree\n\t\t */\n\t\tdehover_node : function (obj) {\n\t\t\tobj = this.get_node(obj, true);\n\t\t\tif(!obj || !obj.length || !obj.children('.jstree-hovered').length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tobj.children('.jstree-anchor').removeClass('jstree-hovered');\n\t\t\t/**\n\t\t\t * triggered when an node is no longer hovered\n\t\t\t * @event\n\t\t\t * @name dehover_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t */\n\t\t\tthis.trigger('dehover_node', { 'node' : this.get_node(obj) });\n\t\t},\n\t\t/**\n\t\t * select a node\n\t\t * @name select_node(obj [, supress_event, prevent_open])\n\t\t * @param {mixed} obj an array can be used to select multiple nodes\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened\n\t\t * @trigger select_node.jstree, changed.jstree\n\t\t */\n\t\tselect_node : function (obj, supress_event, prevent_open, e) {\n\t\t\tvar dom, t1, t2, th;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.select_node(obj[t1], supress_event, prevent_open, e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.selected) {\n\t\t\t\tobj.state.selected = true;\n\t\t\t\tthis._data.core.selected.push(obj.id);\n\t\t\t\tif(!prevent_open) {\n\t\t\t\t\tdom = this._open_to(obj);\n\t\t\t\t}\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.attr('aria-selected', true).children('.jstree-anchor').addClass('jstree-clicked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is selected\n\t\t\t\t * @event\n\t\t\t\t * @name select_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this select_node\n\t\t\t\t */\n\t\t\t\tthis.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\tif(!supress_event) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when selection changes\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name changed.jstree\n\t\t\t\t\t * @param {Object} node\n\t\t\t\t\t * @param {Object} action the action that caused the selection to change\n\t\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t\t * @param {Object} event the event (if any) that triggered this changed event\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * deselect a node\n\t\t * @name deselect_node(obj [, supress_event])\n\t\t * @param {mixed} obj an array can be used to deselect multiple nodes\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger deselect_node.jstree, changed.jstree\n\t\t */\n\t\tdeselect_node : function (obj, supress_event, e) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.deselect_node(obj[t1], supress_event, e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.selected) {\n\t\t\t\tobj.state.selected = false;\n\t\t\t\tthis._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id);\n\t\t\t\tif(dom.length) {\n\t\t\t\t\tdom.attr('aria-selected', false).children('.jstree-anchor').removeClass('jstree-clicked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is deselected\n\t\t\t\t * @event\n\t\t\t\t * @name deselect_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this deselect_node\n\t\t\t\t */\n\t\t\t\tthis.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\tif(!supress_event) {\n\t\t\t\t\tthis.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e });\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * select all nodes in the tree\n\t\t * @name select_all([supress_event])\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger select_all.jstree, changed.jstree\n\t\t */\n\t\tselect_all : function (supress_event) {\n\t\t\tvar tmp = this._data.core.selected.concat([]), i, j;\n\t\t\tthis._data.core.selected = this._model.data[$.jstree.root].children_d.concat();\n\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.core.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.core.selected[i]].state.selected = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.redraw(true);\n\t\t\t/**\n\t\t\t * triggered when all nodes are selected\n\t\t\t * @event\n\t\t\t * @name select_all.jstree\n\t\t\t * @param {Array} selected the current selection\n\t\t\t */\n\t\t\tthis.trigger('select_all', { 'selected' : this._data.core.selected });\n\t\t\tif(!supress_event) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * deselect all selected nodes\n\t\t * @name deselect_all([supress_event])\n\t\t * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered\n\t\t * @trigger deselect_all.jstree, changed.jstree\n\t\t */\n\t\tdeselect_all : function (supress_event) {\n\t\t\tvar tmp = this._data.core.selected.concat([]), i, j;\n\t\t\tfor(i = 0, j = this._data.core.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.core.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.core.selected[i]].state.selected = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._data.core.selected = [];\n\t\t\tthis.element.find('.jstree-clicked').removeClass('jstree-clicked').parent().attr('aria-selected', false);\n\t\t\t/**\n\t\t\t * triggered when all nodes are deselected\n\t\t\t * @event\n\t\t\t * @name deselect_all.jstree\n\t\t\t * @param {Object} node the previous selection\n\t\t\t * @param {Array} selected the current selection\n\t\t\t */\n\t\t\tthis.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp });\n\t\t\tif(!supress_event) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp });\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * checks if a node is selected\n\t\t * @name is_selected(obj)\n\t\t * @param  {mixed}  obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tis_selected : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn obj.state.selected;\n\t\t},\n\t\t/**\n\t\t * get an array of all selected nodes\n\t\t * @name get_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_selected : function (full) {\n\t\t\treturn full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice();\n\t\t},\n\t\t/**\n\t\t * get an array of all top level selected nodes (ignoring children of selected nodes)\n\t\t * @name get_top_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_top_selected : function (full) {\n\t\t\tvar tmp = this.get_selected(true),\n\t\t\t\tobj = {}, i, j, k, l;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tobj[tmp[i].id] = tmp[i];\n\t\t\t}\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tfor(k = 0, l = tmp[i].children_d.length; k < l; k++) {\n\t\t\t\t\tif(obj[tmp[i].children_d[k]]) {\n\t\t\t\t\t\tdelete obj[tmp[i].children_d[k]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = [];\n\t\t\tfor(i in obj) {\n\t\t\t\tif(obj.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;\n\t\t},\n\t\t/**\n\t\t * get an array of all bottom level selected nodes (ignoring selected parents)\n\t\t * @name get_bottom_selected([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t */\n\t\tget_bottom_selected : function (full) {\n\t\t\tvar tmp = this.get_selected(true),\n\t\t\t\tobj = [], i, j;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tif(!tmp[i].children.length) {\n\t\t\t\t\tobj.push(tmp[i].id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;\n\t\t},\n\t\t/**\n\t\t * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally.\n\t\t * @name get_state()\n\t\t * @private\n\t\t * @return {Object}\n\t\t */\n\t\tget_state : function () {\n\t\t\tvar state\t= {\n\t\t\t\t'core' : {\n\t\t\t\t\t'open' : [],\n\t\t\t\t\t'loaded' : [],\n\t\t\t\t\t'scroll' : {\n\t\t\t\t\t\t'left' : this.element.scrollLeft(),\n\t\t\t\t\t\t'top' : this.element.scrollTop()\n\t\t\t\t\t},\n\t\t\t\t\t/*!\n\t\t\t\t\t'themes' : {\n\t\t\t\t\t\t'name' : this.get_theme(),\n\t\t\t\t\t\t'icons' : this._data.core.themes.icons,\n\t\t\t\t\t\t'dots' : this._data.core.themes.dots\n\t\t\t\t\t},\n\t\t\t\t\t*/\n\t\t\t\t\t'selected' : []\n\t\t\t\t}\n\t\t\t}, i;\n\t\t\tfor(i in this._model.data) {\n\t\t\t\tif(this._model.data.hasOwnProperty(i)) {\n\t\t\t\t\tif(i !== $.jstree.root) {\n\t\t\t\t\t\tif(this._model.data[i].state.loaded && this.settings.core.loaded_state) {\n\t\t\t\t\t\t\tstate.core.loaded.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this._model.data[i].state.opened) {\n\t\t\t\t\t\t\tstate.core.open.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this._model.data[i].state.selected) {\n\t\t\t\t\t\t\tstate.core.selected.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn state;\n\t\t},\n\t\t/**\n\t\t * sets the state of the tree. Used internally.\n\t\t * @name set_state(state [, callback])\n\t\t * @private\n\t\t * @param {Object} state the state to restore. Keep in mind this object is passed by reference and jstree will modify it.\n\t\t * @param {Function} callback an optional function to execute once the state is restored.\n\t\t * @trigger set_state.jstree\n\t\t */\n\t\tset_state : function (state, callback) {\n\t\t\tif(state) {\n\t\t\t\tif(state.core && state.core.selected && state.core.initial_selection === undefined) {\n\t\t\t\t\tstate.core.initial_selection = this._data.core.selected.concat([]).sort().join(',');\n\t\t\t\t}\n\t\t\t\tif(state.core) {\n\t\t\t\t\tvar res, n, t, _this, i;\n\t\t\t\t\tif(state.core.loaded) {\n\t\t\t\t\t\tif(!this.settings.core.loaded_state || !$.isArray(state.core.loaded) || !state.core.loaded.length) {\n\t\t\t\t\t\t\tdelete state.core.loaded;\n\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._load_nodes(state.core.loaded, function (nodes) {\n\t\t\t\t\t\t\t\tdelete state.core.loaded;\n\t\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(state.core.open) {\n\t\t\t\t\t\tif(!$.isArray(state.core.open) || !state.core.open.length) {\n\t\t\t\t\t\t\tdelete state.core.open;\n\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._load_nodes(state.core.open, function (nodes) {\n\t\t\t\t\t\t\t\tthis.open_node(nodes, false, 0);\n\t\t\t\t\t\t\t\tdelete state.core.open;\n\t\t\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(state.core.scroll) {\n\t\t\t\t\t\tif(state.core.scroll && state.core.scroll.left !== undefined) {\n\t\t\t\t\t\t\tthis.element.scrollLeft(state.core.scroll.left);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(state.core.scroll && state.core.scroll.top !== undefined) {\n\t\t\t\t\t\t\tthis.element.scrollTop(state.core.scroll.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete state.core.scroll;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif(state.core.selected) {\n\t\t\t\t\t\t_this = this;\n\t\t\t\t\t\tif (state.core.initial_selection === undefined ||\n\t\t\t\t\t\t\tstate.core.initial_selection === this._data.core.selected.concat([]).sort().join(',')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis.deselect_all();\n\t\t\t\t\t\t\t$.each(state.core.selected, function (i, v) {\n\t\t\t\t\t\t\t\t_this.select_node(v, false, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete state.core.initial_selection;\n\t\t\t\t\t\tdelete state.core.selected;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tfor(i in state) {\n\t\t\t\t\t\tif(state.hasOwnProperty(i) && i !== \"core\" && $.inArray(i, this.settings.plugins) === -1) {\n\t\t\t\t\t\t\tdelete state[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif($.isEmptyObject(state.core)) {\n\t\t\t\t\t\tdelete state.core;\n\t\t\t\t\t\tthis.set_state(state, callback);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif($.isEmptyObject(state)) {\n\t\t\t\t\tstate = null;\n\t\t\t\t\tif(callback) { callback.call(this); }\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered when a `set_state` call completes\n\t\t\t\t\t * @event\n\t\t\t\t\t * @name set_state.jstree\n\t\t\t\t\t */\n\t\t\t\t\tthis.trigger('set_state');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t/**\n\t\t * refreshes the tree - all nodes are reloaded with calls to `load_node`.\n\t\t * @name refresh()\n\t\t * @param {Boolean} skip_loading an option to skip showing the loading indicator\n\t\t * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state\n\t\t * @trigger refresh.jstree\n\t\t */\n\t\trefresh : function (skip_loading, forget_state) {\n\t\t\tthis._data.core.state = forget_state === true ? {} : this.get_state();\n\t\t\tif(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); }\n\t\t\tthis._cnt = 0;\n\t\t\tthis._model.data = {};\n\t\t\tthis._model.data[$.jstree.root] = {\n\t\t\t\tid : $.jstree.root,\n\t\t\t\tparent : null,\n\t\t\t\tparents : [],\n\t\t\t\tchildren : [],\n\t\t\t\tchildren_d : [],\n\t\t\t\tstate : { loaded : false }\n\t\t\t};\n\t\t\tthis._data.core.selected = [];\n\t\t\tthis._data.core.last_clicked = null;\n\t\t\tthis._data.core.focused = null;\n\n\t\t\tvar c = this.get_container_ul()[0].className;\n\t\t\tif(!skip_loading) {\n\t\t\t\tthis.element.html(\"<\"+\"ul class='\"+c+\"' role='group'><\"+\"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last' role='treeitem' id='j\"+this._id+\"_loading'><i class='jstree-icon jstree-ocl'></i><\"+\"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>\" + this.get_string(\"Loading ...\") + \"</a></li></ul>\");\n\t\t\t\tthis.element.attr('aria-activedescendant','j'+this._id+'_loading');\n\t\t\t}\n\t\t\tthis.load_node($.jstree.root, function (o, s) {\n\t\t\t\tif(s) {\n\t\t\t\t\tthis.get_container_ul()[0].className = c;\n\t\t\t\t\tif(this._firstChild(this.get_container_ul()[0])) {\n\t\t\t\t\t\tthis.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id);\n\t\t\t\t\t}\n\t\t\t\t\tthis.set_state($.extend(true, {}, this._data.core.state), function () {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * triggered when a `refresh` call completes\n\t\t\t\t\t\t * @event\n\t\t\t\t\t\t * @name refresh.jstree\n\t\t\t\t\t\t */\n\t\t\t\t\t\tthis.trigger('refresh');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis._data.core.state = null;\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`.\n\t\t * @name refresh_node(obj)\n\t\t * @param  {mixed} obj the node\n\t\t * @trigger refresh_node.jstree\n\t\t */\n\t\trefresh_node : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar opened = [], to_load = [], s = this._data.core.selected.concat([]);\n\t\t\tto_load.push(obj.id);\n\t\t\tif(obj.state.opened === true) { opened.push(obj.id); }\n\t\t\tthis.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); });\n\t\t\tthis._load_nodes(to_load, $.proxy(function (nodes) {\n\t\t\t\tthis.open_node(opened, false, 0);\n\t\t\t\tthis.select_node(s);\n\t\t\t\t/**\n\t\t\t\t * triggered when a node is refreshed\n\t\t\t\t * @event\n\t\t\t\t * @name refresh_node.jstree\n\t\t\t\t * @param {Object} node - the refreshed node\n\t\t\t\t * @param {Array} nodes - an array of the IDs of the nodes that were reloaded\n\t\t\t\t */\n\t\t\t\tthis.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes });\n\t\t\t}, this), false, true);\n\t\t},\n\t\t/**\n\t\t * set (change) the ID of a node\n\t\t * @name set_id(obj, id)\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {String} id the new ID\n\t\t * @return {Boolean}\n\t\t * @trigger set_id.jstree\n\t\t */\n\t\tset_id : function (obj, id) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar i, j, m = this._model.data, old = obj.id;\n\t\t\tid = id.toString();\n\t\t\t// update parents (replace current ID with new one in children and children_d)\n\t\t\tm[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id;\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tm[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id;\n\t\t\t}\n\t\t\t// update children (replace current ID with new one in parent and parents)\n\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\tm[obj.children[i]].parent = id;\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tm[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id;\n\t\t\t}\n\t\t\ti = $.inArray(obj.id, this._data.core.selected);\n\t\t\tif(i !== -1) { this._data.core.selected[i] = id; }\n\t\t\t// update model and obj itself (obj.id, this._model.data[KEY])\n\t\t\ti = this.get_node(obj.id, true);\n\t\t\tif(i) {\n\t\t\t\ti.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor');\n\t\t\t\tif(this.element.attr('aria-activedescendant') === obj.id) {\n\t\t\t\t\tthis.element.attr('aria-activedescendant', id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete m[obj.id];\n\t\t\tobj.id = id;\n\t\t\tobj.li_attr.id = id;\n\t\t\tm[id] = obj;\n\t\t\t/**\n\t\t\t * triggered when a node id value is changed\n\t\t\t * @event\n\t\t\t * @name set_id.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} old the old id\n\t\t\t */\n\t\t\tthis.trigger('set_id',{ \"node\" : obj, \"new\" : obj.id, \"old\" : old });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the text value of a node\n\t\t * @name get_text(obj)\n\t\t * @param  {mixed} obj the node\n\t\t * @return {String}\n\t\t */\n\t\tget_text : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj || obj.id === $.jstree.root) ? false : obj.text;\n\t\t},\n\t\t/**\n\t\t * set the text value of a node. Used internally, please use `rename_node(obj, val)`.\n\t\t * @private\n\t\t * @name set_text(obj, val)\n\t\t * @param  {mixed} obj the node, you can pass an array to set the text on multiple nodes\n\t\t * @param  {String} val the new text value\n\t\t * @return {Boolean}\n\t\t * @trigger set_text.jstree\n\t\t */\n\t\tset_text : function (obj, val) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_text(obj[t1], val);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tobj.text = val;\n\t\t\tif(this.get_node(obj, true).length) {\n\t\t\t\tthis.redraw_node(obj.id);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when a node text value is changed\n\t\t\t * @event\n\t\t\t * @name set_text.jstree\n\t\t\t * @param {Object} obj\n\t\t\t * @param {String} text the new value\n\t\t\t */\n\t\t\tthis.trigger('set_text',{ \"obj\" : obj, \"text\" : val });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * gets a JSON representation of a node (or the whole tree)\n\t\t * @name get_json([obj, options])\n\t\t * @param  {mixed} obj\n\t\t * @param  {Object} options\n\t\t * @param  {Boolean} options.no_state do not return state information\n\t\t * @param  {Boolean} options.no_id do not return ID\n\t\t * @param  {Boolean} options.no_children do not include children\n\t\t * @param  {Boolean} options.no_data do not include node data\n\t\t * @param  {Boolean} options.no_li_attr do not include LI attributes\n\t\t * @param  {Boolean} options.no_a_attr do not include A attributes\n\t\t * @param  {Boolean} options.flat return flat JSON instead of nested\n\t\t * @return {Object}\n\t\t */\n\t\tget_json : function (obj, options, flat) {\n\t\t\tobj = this.get_node(obj || $.jstree.root);\n\t\t\tif(!obj) { return false; }\n\t\t\tif(options && options.flat && !flat) { flat = []; }\n\t\t\tvar tmp = {\n\t\t\t\t'id' : obj.id,\n\t\t\t\t'text' : obj.text,\n\t\t\t\t'icon' : this.get_icon(obj),\n\t\t\t\t'li_attr' : $.extend(true, {}, obj.li_attr),\n\t\t\t\t'a_attr' : $.extend(true, {}, obj.a_attr),\n\t\t\t\t'state' : {},\n\t\t\t\t'data' : options && options.no_data ? false : $.extend(true, $.isArray(obj.data)?[]:{}, obj.data)\n\t\t\t\t//( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ),\n\t\t\t}, i, j;\n\t\t\tif(options && options.flat) {\n\t\t\t\ttmp.parent = obj.parent;\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp.children = [];\n\t\t\t}\n\t\t\tif(!options || !options.no_state) {\n\t\t\t\tfor(i in obj.state) {\n\t\t\t\t\tif(obj.state.hasOwnProperty(i)) {\n\t\t\t\t\t\ttmp.state[i] = obj.state[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdelete tmp.state;\n\t\t\t}\n\t\t\tif(options && options.no_li_attr) {\n\t\t\t\tdelete tmp.li_attr;\n\t\t\t}\n\t\t\tif(options && options.no_a_attr) {\n\t\t\t\tdelete tmp.a_attr;\n\t\t\t}\n\t\t\tif(options && options.no_id) {\n\t\t\t\tdelete tmp.id;\n\t\t\t\tif(tmp.li_attr && tmp.li_attr.id) {\n\t\t\t\t\tdelete tmp.li_attr.id;\n\t\t\t\t}\n\t\t\t\tif(tmp.a_attr && tmp.a_attr.id) {\n\t\t\t\t\tdelete tmp.a_attr.id;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(options && options.flat && obj.id !== $.jstree.root) {\n\t\t\t\tflat.push(tmp);\n\t\t\t}\n\t\t\tif(!options || !options.no_children) {\n\t\t\t\tfor(i = 0, j = obj.children.length; i < j; i++) {\n\t\t\t\t\tif(options && options.flat) {\n\t\t\t\t\t\tthis.get_json(obj.children[i], options, flat);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttmp.children.push(this.get_json(obj.children[i], options));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp);\n\t\t},\n\t\t/**\n\t\t * create a new node (do not confuse with load_node)\n\t\t * @name create_node([par, node, pos, callback, is_loaded])\n\t\t * @param  {mixed}   par       the parent node (to create a root node use either \"#\" (string) or `null`)\n\t\t * @param  {mixed}   node      the data for the new node (a valid JSON object, or a simple string with the name)\n\t\t * @param  {mixed}   pos       the index at which to insert the node, \"first\" and \"last\" are also supported, default is \"last\"\n\t\t * @param  {Function} callback a function to be called once the node is created\n\t\t * @param  {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded\n\t\t * @return {String}            the ID of the newly create node\n\t\t * @trigger model.jstree, create_node.jstree\n\t\t */\n\t\tcreate_node : function (par, node, pos, callback, is_loaded) {\n\t\t\tif(par === null) { par = $.jstree.root; }\n\t\t\tpar = this.get_node(par);\n\t\t\tif(!par) { return false; }\n\t\t\tpos = pos === undefined ? \"last\" : pos;\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });\n\t\t\t}\n\t\t\tif(!node) { node = { \"text\" : this.get_string('New node') }; }\n\t\t\tif(typeof node === \"string\") {\n\t\t\t\tnode = { \"text\" : node };\n\t\t\t} else {\n\t\t\t\tnode = $.extend(true, {}, node);\n\t\t\t}\n\t\t\tif(node.text === undefined) { node.text = this.get_string('New node'); }\n\t\t\tvar tmp, dpc, i, j;\n\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\ttmp = this.get_node(par.parent);\n\t\t\t\t\tpos = $.inArray(par.id, tmp.children);\n\t\t\t\t\tpar = tmp;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\ttmp = this.get_node(par.parent);\n\t\t\t\t\tpos = $.inArray(par.id, tmp.children) + 1;\n\t\t\t\t\tpar = tmp;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > par.children.length) { pos = par.children.length; }\n\t\t\tif(!node.id) { node.id = true; }\n\t\t\tif(!this.check(\"create_node\", node, par, pos)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(node.id === true) { delete node.id; }\n\t\t\tnode = this._parse_model_from_json(node, par.id, par.parents.concat());\n\t\t\tif(!node) { return false; }\n\t\t\ttmp = this.get_node(node);\n\t\t\tdpc = [];\n\t\t\tdpc.push(node);\n\t\t\tdpc = dpc.concat(tmp.children_d);\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, \"parent\" : par.id });\n\n\t\t\tpar.children_d = par.children_d.concat(dpc);\n\t\t\tfor(i = 0, j = par.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\tnode = tmp;\n\t\t\ttmp = [];\n\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\ttmp[i >= pos ? i+1 : i] = par.children[i];\n\t\t\t}\n\t\t\ttmp[pos] = node.id;\n\t\t\tpar.children = tmp;\n\n\t\t\tthis.redraw_node(par, true);\n\t\t\t/**\n\t\t\t * triggered when a node is created\n\t\t\t * @event\n\t\t\t * @name create_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the new node among the parent's children\n\t\t\t */\n\t\t\tthis.trigger('create_node', { \"node\" : this.get_node(node), \"parent\" : par.id, \"position\" : pos });\n\t\t\tif(callback) { callback.call(this, this.get_node(node)); }\n\t\t\treturn node.id;\n\t\t},\n\t\t/**\n\t\t * set the text value of a node\n\t\t * @name rename_node(obj, val)\n\t\t * @param  {mixed} obj the node, you can pass an array to rename multiple nodes to the same name\n\t\t * @param  {String} val the new text value\n\t\t * @return {Boolean}\n\t\t * @trigger rename_node.jstree\n\t\t */\n\t\trename_node : function (obj, val) {\n\t\t\tvar t1, t2, old;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.rename_node(obj[t1], val);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\told = obj.text;\n\t\t\tif(!this.check(\"rename_node\", obj, this.get_parent(obj), val)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments))\n\t\t\t/**\n\t\t\t * triggered when a node is renamed\n\t\t\t * @event\n\t\t\t * @name rename_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} text the new value\n\t\t\t * @param {String} old the old value\n\t\t\t */\n\t\t\tthis.trigger('rename_node', { \"node\" : obj, \"text\" : val, \"old\" : old });\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * remove a node\n\t\t * @name delete_node(obj)\n\t\t * @param  {mixed} obj the node, you can pass an array to delete multiple nodes\n\t\t * @return {Boolean}\n\t\t * @trigger delete_node.jstree, changed.jstree\n\t\t */\n\t\tdelete_node : function (obj) {\n\t\t\tvar t1, t2, par, pos, tmp, i, j, k, l, c, top, lft;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.delete_node(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tpar = this.get_node(obj.parent);\n\t\t\tpos = $.inArray(obj.id, par.children);\n\t\t\tc = false;\n\t\t\tif(!this.check(\"delete_node\", obj, par, pos)) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(pos !== -1) {\n\t\t\t\tpar.children = $.vakata.array_remove(par.children, pos);\n\t\t\t}\n\t\t\ttmp = obj.children_d.concat([]);\n\t\t\ttmp.push(obj.id);\n\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) {\n\t\t\t\t\treturn $.inArray(v, tmp) === -1;\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor(k = 0, l = tmp.length; k < l; k++) {\n\t\t\t\tif(this._model.data[tmp[k]].state.selected) {\n\t\t\t\t\tc = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (c) {\n\t\t\t\tthis._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) {\n\t\t\t\t\treturn $.inArray(v, tmp) === -1;\n\t\t\t\t});\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when a node is deleted\n\t\t\t * @event\n\t\t\t * @name delete_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t */\n\t\t\tthis.trigger('delete_node', { \"node\" : obj, \"parent\" : par.id });\n\t\t\tif(c) {\n\t\t\t\tthis.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id });\n\t\t\t}\n\t\t\tfor(k = 0, l = tmp.length; k < l; k++) {\n\t\t\t\tdelete this._model.data[tmp[k]];\n\t\t\t}\n\t\t\tif($.inArray(this._data.core.focused, tmp) !== -1) {\n\t\t\t\tthis._data.core.focused = null;\n\t\t\t\ttop = this.element[0].scrollTop;\n\t\t\t\tlft = this.element[0].scrollLeft;\n\t\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\t\tif (this._model.data[$.jstree.root].children[0]) {\n\t\t\t\t\t\tthis.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.get_node(par, true).children('.jstree-anchor').focus();\n\t\t\t\t}\n\t\t\t\tthis.element[0].scrollTop  = top;\n\t\t\t\tthis.element[0].scrollLeft = lft;\n\t\t\t}\n\t\t\tthis.redraw_node(par, true);\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * check if an operation is premitted on the tree. Used internally.\n\t\t * @private\n\t\t * @name check(chk, obj, par, pos)\n\t\t * @param  {String} chk the operation to check, can be \"create_node\", \"rename_node\", \"delete_node\", \"copy_node\" or \"move_node\"\n\t\t * @param  {mixed} obj the node\n\t\t * @param  {mixed} par the parent\n\t\t * @param  {mixed} pos the position to insert at, or if \"rename_node\" - the new name\n\t\t * @param  {mixed} more some various additional information, for example if a \"move_node\" operations is triggered by DND this will be the hovered node\n\t\t * @return {Boolean}\n\t\t */\n\t\tcheck : function (chk, obj, par, pos, more) {\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tvar tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj,\n\t\t\t\tchc = this.settings.core.check_callback;\n\t\t\tif(chk === \"move_node\" || chk === \"copy_node\") {\n\t\t\t\tif((!more || !more.is_multi) && (chk === \"move_node\" && $.inArray(obj.id, par.children) === pos)) {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_08', 'reason' : 'Moving node to its current position', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif((!more || !more.is_multi) && (obj.id === par.id || (chk === \"move_node\" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(tmp && tmp.data) { tmp = tmp.data; }\n\t\t\tif(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) {\n\t\t\t\tif(tmp.functions[chk] === false) {\n\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t}\n\t\t\t\treturn tmp.functions[chk];\n\t\t\t}\n\t\t\tif(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) {\n\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the last error\n\t\t * @name last_error()\n\t\t * @return {Object}\n\t\t */\n\t\tlast_error : function () {\n\t\t\treturn this._data.core.last_error;\n\t\t},\n\t\t/**\n\t\t * move a node to a new parent\n\t\t * @name move_node(obj, par [, pos, callback, is_loaded])\n\t\t * @param  {mixed} obj the node to move, pass an array to move multiple nodes\n\t\t * @param  {mixed} par the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer values, \"first\" and \"last\" are supported, as well as \"before\" and \"after\"), defaults to integer `0`\n\t\t * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position\n\t\t * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded\n\t\t * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn\n\t\t * @param  {Boolean} instance internal parameter indicating if the node comes from another instance\n\t\t * @trigger move_node.jstree\n\t\t */\n\t\tmove_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {\n\t\t\tvar t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p;\n\n\t\t\tpar = this.get_node(par);\n\t\t\tpos = pos === undefined ? 0 : pos;\n\t\t\tif(!par) { return false; }\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); });\n\t\t\t}\n\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tif(obj.length === 1) {\n\t\t\t\t\tobj = obj[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//obj = obj.slice();\n\t\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\t\tif((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) {\n\t\t\t\t\t\t\tpar = tmp;\n\t\t\t\t\t\t\tpos = \"after\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.redraw();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\n\t\t\told_par = (obj.parent || $.jstree.root).toString();\n\t\t\tnew_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);\n\t\t\told_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));\n\t\t\tis_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);\n\t\t\told_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1;\n\t\t\tif(old_ins && old_ins._id) {\n\t\t\t\tobj = old_ins._model.data[obj.id];\n\t\t\t}\n\n\t\t\tif(is_multi) {\n\t\t\t\tif((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) {\n\t\t\t\t\tif(old_ins) { old_ins.delete_node(obj); }\n\t\t\t\t\treturn tmp;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t//var m = this._model.data;\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = new_par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > new_par.children.length) { pos = new_par.children.length; }\n\t\t\tif(!this.check(\"move_node\", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(obj.parent === new_par.id) {\n\t\t\t\tdpc = new_par.children.concat();\n\t\t\t\ttmp = $.inArray(obj.id, dpc);\n\t\t\t\tif(tmp !== -1) {\n\t\t\t\t\tdpc = $.vakata.array_remove(dpc, tmp);\n\t\t\t\t\tif(pos > tmp) { pos--; }\n\t\t\t\t}\n\t\t\t\ttmp = [];\n\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\ttmp[i >= pos ? i+1 : i] = dpc[i];\n\t\t\t\t}\n\t\t\t\ttmp[pos] = obj.id;\n\t\t\t\tnew_par.children = tmp;\n\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t\tthis.redraw(new_par.id === $.jstree.root);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// clean old parent and up\n\t\t\t\ttmp = obj.children_d.concat();\n\t\t\t\ttmp.push(obj.id);\n\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\tdpc = [];\n\t\t\t\t\tp = old_ins._model.data[obj.parents[i]].children_d;\n\t\t\t\t\tfor(k = 0, l = p.length; k < l; k++) {\n\t\t\t\t\t\tif($.inArray(p[k], tmp) === -1) {\n\t\t\t\t\t\t\tdpc.push(p[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\told_ins._model.data[obj.parents[i]].children_d = dpc;\n\t\t\t\t}\n\t\t\t\told_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id);\n\n\t\t\t\t// insert into new parent and up\n\t\t\t\tfor(i = 0, j = new_par.parents.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp);\n\t\t\t\t}\n\t\t\t\tdpc = [];\n\t\t\t\tfor(i = 0, j = new_par.children.length; i < j; i++) {\n\t\t\t\t\tdpc[i >= pos ? i+1 : i] = new_par.children[i];\n\t\t\t\t}\n\t\t\t\tdpc[pos] = obj.id;\n\t\t\t\tnew_par.children = dpc;\n\t\t\t\tnew_par.children_d.push(obj.id);\n\t\t\t\tnew_par.children_d = new_par.children_d.concat(obj.children_d);\n\n\t\t\t\t// update object\n\t\t\t\tobj.parent = new_par.id;\n\t\t\t\ttmp = new_par.parents.concat();\n\t\t\t\ttmp.unshift(new_par.id);\n\t\t\t\tp = obj.parents.length;\n\t\t\t\tobj.parents = tmp;\n\n\t\t\t\t// update object children\n\t\t\t\ttmp = tmp.concat();\n\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\tthis._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1);\n\t\t\t\t\tArray.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp);\n\t\t\t\t}\n\n\t\t\t\tif(old_par === $.jstree.root || new_par.id === $.jstree.root) {\n\t\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t\t}\n\t\t\t\tif(!this._model.force_full_redraw) {\n\t\t\t\t\tthis._node_changed(old_par);\n\t\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t\t}\n\t\t\t\tif(!skip_redraw) {\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(callback) { callback.call(this, obj, new_par, pos); }\n\t\t\t/**\n\t\t\t * triggered when a node is moved\n\t\t\t * @event\n\t\t\t * @name move_node.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the node among the parent's children\n\t\t\t * @param {String} old_parent the old parent of the node\n\t\t\t * @param {Number} old_position the old position of the node\n\t\t\t * @param {Boolean} is_multi do the node and new parent belong to different instances\n\t\t\t * @param {jsTree} old_instance the instance the node came from\n\t\t\t * @param {jsTree} new_instance the instance of the new parent\n\t\t\t */\n\t\t\tthis.trigger('move_node', { \"node\" : obj, \"parent\" : new_par.id, \"position\" : pos, \"old_parent\" : old_par, \"old_position\" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });\n\t\t\treturn obj.id;\n\t\t},\n\t\t/**\n\t\t * copy a node to a new parent\n\t\t * @name copy_node(obj, par [, pos, callback, is_loaded])\n\t\t * @param  {mixed} obj the node to copy, pass an array to copy multiple nodes\n\t\t * @param  {mixed} par the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer values, \"first\" and \"last\" are supported, as well as \"before\" and \"after\"), defaults to integer `0`\n\t\t * @param  {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position\n\t\t * @param  {Boolean} is_loaded internal parameter indicating if the parent node has been loaded\n\t\t * @param  {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn\n\t\t * @param  {Boolean} instance internal parameter indicating if the node comes from another instance\n\t\t * @trigger model.jstree copy_node.jstree\n\t\t */\n\t\tcopy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) {\n\t\t\tvar t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi;\n\n\t\t\tpar = this.get_node(par);\n\t\t\tpos = pos === undefined ? 0 : pos;\n\t\t\tif(!par) { return false; }\n\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\treturn this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); });\n\t\t\t}\n\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tif(obj.length === 1) {\n\t\t\t\t\tobj = obj[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//obj = obj.slice();\n\t\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\t\tif((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) {\n\t\t\t\t\t\t\tpar = tmp;\n\t\t\t\t\t\t\tpos = \"after\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.redraw();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\n\t\t\told_par = (obj.parent || $.jstree.root).toString();\n\t\t\tnew_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent);\n\t\t\told_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id));\n\t\t\tis_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id);\n\n\t\t\tif(old_ins && old_ins._id) {\n\t\t\t\tobj = old_ins._model.data[obj.id];\n\t\t\t}\n\n\t\t\tif(par.id === $.jstree.root) {\n\t\t\t\tif(pos === \"before\") { pos = \"first\"; }\n\t\t\t\tif(pos === \"after\") { pos = \"last\"; }\n\t\t\t}\n\t\t\tswitch(pos) {\n\t\t\t\tcase \"before\":\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"after\" :\n\t\t\t\t\tpos = $.inArray(par.id, new_par.children) + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"inside\":\n\t\t\t\tcase \"first\":\n\t\t\t\t\tpos = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"last\":\n\t\t\t\t\tpos = new_par.children.length;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif(!pos) { pos = 0; }\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(pos > new_par.children.length) { pos = new_par.children.length; }\n\t\t\tif(!this.check(\"copy_node\", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tnode = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj;\n\t\t\tif(!node) { return false; }\n\t\t\tif(node.id === true) { delete node.id; }\n\t\t\tnode = this._parse_model_from_json(node, new_par.id, new_par.parents.concat());\n\t\t\tif(!node) { return false; }\n\t\t\ttmp = this.get_node(node);\n\t\t\tif(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; }\n\t\t\tdpc = [];\n\t\t\tdpc.push(node);\n\t\t\tdpc = dpc.concat(tmp.children_d);\n\t\t\tthis.trigger('model', { \"nodes\" : dpc, \"parent\" : new_par.id });\n\n\t\t\t// insert into new parent and up\n\t\t\tfor(i = 0, j = new_par.parents.length; i < j; i++) {\n\t\t\t\tthis._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc);\n\t\t\t}\n\t\t\tdpc = [];\n\t\t\tfor(i = 0, j = new_par.children.length; i < j; i++) {\n\t\t\t\tdpc[i >= pos ? i+1 : i] = new_par.children[i];\n\t\t\t}\n\t\t\tdpc[pos] = tmp.id;\n\t\t\tnew_par.children = dpc;\n\t\t\tnew_par.children_d.push(tmp.id);\n\t\t\tnew_par.children_d = new_par.children_d.concat(tmp.children_d);\n\n\t\t\tif(new_par.id === $.jstree.root) {\n\t\t\t\tthis._model.force_full_redraw = true;\n\t\t\t}\n\t\t\tif(!this._model.force_full_redraw) {\n\t\t\t\tthis._node_changed(new_par.id);\n\t\t\t}\n\t\t\tif(!skip_redraw) {\n\t\t\t\tthis.redraw(new_par.id === $.jstree.root);\n\t\t\t}\n\t\t\tif(callback) { callback.call(this, tmp, new_par, pos); }\n\t\t\t/**\n\t\t\t * triggered when a node is copied\n\t\t\t * @event\n\t\t\t * @name copy_node.jstree\n\t\t\t * @param {Object} node the copied node\n\t\t\t * @param {Object} original the original node\n\t\t\t * @param {String} parent the parent's ID\n\t\t\t * @param {Number} position the position of the node among the parent's children\n\t\t\t * @param {String} old_parent the old parent of the node\n\t\t\t * @param {Number} old_position the position of the original node\n\t\t\t * @param {Boolean} is_multi do the node and new parent belong to different instances\n\t\t\t * @param {jsTree} old_instance the instance the node came from\n\t\t\t * @param {jsTree} new_instance the instance of the new parent\n\t\t\t */\n\t\t\tthis.trigger('copy_node', { \"node\" : tmp, \"original\" : obj, \"parent\" : new_par.id, \"position\" : pos, \"old_parent\" : old_par, \"old_position\" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this });\n\t\t\treturn tmp.id;\n\t\t},\n\t\t/**\n\t\t * cut a node (a later call to `paste(obj)` would move the node)\n\t\t * @name cut(obj)\n\t\t * @param  {mixed} obj multiple objects can be passed using an array\n\t\t * @trigger cut.jstree\n\t\t */\n\t\tcut : function (obj) {\n\t\t\tif(!obj) { obj = this._data.core.selected.concat(); }\n\t\t\tif(!$.isArray(obj)) { obj = [obj]; }\n\t\t\tif(!obj.length) { return false; }\n\t\t\tvar tmp = [], o, t1, t2;\n\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\to = this.get_node(obj[t1]);\n\t\t\t\tif(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }\n\t\t\t}\n\t\t\tif(!tmp.length) { return false; }\n\t\t\tccp_node = tmp;\n\t\t\tccp_inst = this;\n\t\t\tccp_mode = 'move_node';\n\t\t\t/**\n\t\t\t * triggered when nodes are added to the buffer for moving\n\t\t\t * @event\n\t\t\t * @name cut.jstree\n\t\t\t * @param {Array} node\n\t\t\t */\n\t\t\tthis.trigger('cut', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * copy a node (a later call to `paste(obj)` would copy the node)\n\t\t * @name copy(obj)\n\t\t * @param  {mixed} obj multiple objects can be passed using an array\n\t\t * @trigger copy.jstree\n\t\t */\n\t\tcopy : function (obj) {\n\t\t\tif(!obj) { obj = this._data.core.selected.concat(); }\n\t\t\tif(!$.isArray(obj)) { obj = [obj]; }\n\t\t\tif(!obj.length) { return false; }\n\t\t\tvar tmp = [], o, t1, t2;\n\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\to = this.get_node(obj[t1]);\n\t\t\t\tif(o && o.id && o.id !== $.jstree.root) { tmp.push(o); }\n\t\t\t}\n\t\t\tif(!tmp.length) { return false; }\n\t\t\tccp_node = tmp;\n\t\t\tccp_inst = this;\n\t\t\tccp_mode = 'copy_node';\n\t\t\t/**\n\t\t\t * triggered when nodes are added to the buffer for copying\n\t\t\t * @event\n\t\t\t * @name copy.jstree\n\t\t\t * @param {Array} node\n\t\t\t */\n\t\t\tthis.trigger('copy', { \"node\" : obj });\n\t\t},\n\t\t/**\n\t\t * get the current buffer (any nodes that are waiting for a paste operation)\n\t\t * @name get_buffer()\n\t\t * @return {Object} an object consisting of `mode` (\"copy_node\" or \"move_node\"), `node` (an array of objects) and `inst` (the instance)\n\t\t */\n\t\tget_buffer : function () {\n\t\t\treturn { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst };\n\t\t},\n\t\t/**\n\t\t * check if there is something in the buffer to paste\n\t\t * @name can_paste()\n\t\t * @return {Boolean}\n\t\t */\n\t\tcan_paste : function () {\n\t\t\treturn ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node];\n\t\t},\n\t\t/**\n\t\t * copy or move the previously cut or copied nodes to a new parent\n\t\t * @name paste(obj [, pos])\n\t\t * @param  {mixed} obj the new parent\n\t\t * @param  {mixed} pos the position to insert at (besides integer, \"first\" and \"last\" are supported), defaults to integer `0`\n\t\t * @trigger paste.jstree\n\t\t */\n\t\tpaste : function (obj, pos) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; }\n\t\t\tif(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) {\n\t\t\t\t/**\n\t\t\t\t * triggered when paste is invoked\n\t\t\t\t * @event\n\t\t\t\t * @name paste.jstree\n\t\t\t\t * @param {String} parent the ID of the receiving node\n\t\t\t\t * @param {Array} node the nodes in the buffer\n\t\t\t\t * @param {String} mode the performed operation - \"copy_node\" or \"move_node\"\n\t\t\t\t */\n\t\t\t\tthis.trigger('paste', { \"parent\" : obj.id, \"node\" : ccp_node, \"mode\" : ccp_mode });\n\t\t\t}\n\t\t\tccp_node = false;\n\t\t\tccp_mode = false;\n\t\t\tccp_inst = false;\n\t\t},\n\t\t/**\n\t\t * clear the buffer of previously copied or cut nodes\n\t\t * @name clear_buffer()\n\t\t * @trigger clear_buffer.jstree\n\t\t */\n\t\tclear_buffer : function () {\n\t\t\tccp_node = false;\n\t\t\tccp_mode = false;\n\t\t\tccp_inst = false;\n\t\t\t/**\n\t\t\t * triggered when the copy / cut buffer is cleared\n\t\t\t * @event\n\t\t\t * @name clear_buffer.jstree\n\t\t\t */\n\t\t\tthis.trigger('clear_buffer');\n\t\t},\n\t\t/**\n\t\t * put a node in edit mode (input field to rename the node)\n\t\t * @name edit(obj [, default_text, callback])\n\t\t * @param  {mixed} obj\n\t\t * @param  {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used)\n\t\t * @param  {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise) and a boolean indicating if the user cancelled the edit. You can access the node's title using .text\n\t\t */\n\t\tedit : function (obj, default_text, callback) {\n\t\t\tvar rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tif(!this.check(\"edit\", obj, this.get_parent(obj))) {\n\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttmp = obj;\n\t\t\tdefault_text = typeof default_text === 'string' ? default_text : obj.text;\n\t\t\tthis.set_text(obj, \"\");\n\t\t\tobj = this._open_to(obj);\n\t\t\ttmp.text = default_text;\n\n\t\t\trtl = this._data.core.rtl;\n\t\t\tw  = this.element.width();\n\t\t\tthis._data.core.focused = tmp.id;\n\t\t\ta  = obj.children('.jstree-anchor').focus();\n\t\t\ts  = $('<span>');\n\t\t\t/*!\n\t\t\toi = obj.children(\"i:visible\"),\n\t\t\tai = a.children(\"i:visible\"),\n\t\t\tw1 = oi.width() * oi.length,\n\t\t\tw2 = ai.width() * ai.length,\n\t\t\t*/\n\t\t\tt  = default_text;\n\t\t\th1 = $(\"<\"+\"div />\", { css : { \"position\" : \"absolute\", \"top\" : \"-200px\", \"left\" : (rtl ? \"0px\" : \"-1000px\"), \"visibility\" : \"hidden\" } }).appendTo(document.body);\n\t\t\th2 = $(\"<\"+\"input />\", {\n\t\t\t\t\t\t\"value\" : t,\n\t\t\t\t\t\t\"class\" : \"jstree-rename-input\",\n\t\t\t\t\t\t// \"size\" : t.length,\n\t\t\t\t\t\t\"css\" : {\n\t\t\t\t\t\t\t\"padding\" : \"0\",\n\t\t\t\t\t\t\t\"border\" : \"1px solid silver\",\n\t\t\t\t\t\t\t\"box-sizing\" : \"border-box\",\n\t\t\t\t\t\t\t\"display\" : \"inline-block\",\n\t\t\t\t\t\t\t\"height\" : (this._data.core.li_height) + \"px\",\n\t\t\t\t\t\t\t\"lineHeight\" : (this._data.core.li_height) + \"px\",\n\t\t\t\t\t\t\t\"width\" : \"150px\" // will be set a bit further down\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"blur\" : $.proxy(function (e) {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tvar i = s.children(\".jstree-rename-input\"),\n\t\t\t\t\t\t\t\tv = i.val(),\n\t\t\t\t\t\t\t\tf = this.settings.core.force_text,\n\t\t\t\t\t\t\t\tnv;\n\t\t\t\t\t\t\tif(v === \"\") { v = t; }\n\t\t\t\t\t\t\th1.remove();\n\t\t\t\t\t\t\ts.replaceWith(a);\n\t\t\t\t\t\t\ts.remove();\n\t\t\t\t\t\t\tt = f ? t : $('<div></div>').append($.parseHTML(t)).html();\n\t\t\t\t\t\t\tobj = this.get_node(obj);\n\t\t\t\t\t\t\tthis.set_text(obj, t);\n\t\t\t\t\t\t\tnv = !!this.rename_node(obj, f ? $('<div></div>').text(v).text() : $('<div></div>').append($.parseHTML(v)).html());\n\t\t\t\t\t\t\tif(!nv) {\n\t\t\t\t\t\t\t\tthis.set_text(obj, t); // move this up? and fix #483\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t\tsetTimeout($.proxy(function () {\n\t\t\t\t\t\t\t\tvar node = this.get_node(tmp.id, true);\n\t\t\t\t\t\t\t\tif(node.length) {\n\t\t\t\t\t\t\t\t\tthis._data.core.focused = tmp.id;\n\t\t\t\t\t\t\t\t\tnode.children('.jstree-anchor').focus();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, this), 0);\n\t\t\t\t\t\t\tif(callback) {\n\t\t\t\t\t\t\t\tcallback.call(this, tmp, nv, cancel);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\th2 = null;\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t\"keydown\" : function (e) {\n\t\t\t\t\t\t\tvar key = e.which;\n\t\t\t\t\t\t\tif(key === 27) {\n\t\t\t\t\t\t\t\tcancel = true;\n\t\t\t\t\t\t\t\tthis.value = t;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) {\n\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(key === 27 || key === 13) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tthis.blur();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"click\" : function (e) { e.stopImmediatePropagation(); },\n\t\t\t\t\t\t\"mousedown\" : function (e) { e.stopImmediatePropagation(); },\n\t\t\t\t\t\t\"keyup\" : function (e) {\n\t\t\t\t\t\t\th2.width(Math.min(h1.text(\"pW\" + this.value).width(),w));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"keypress\" : function(e) {\n\t\t\t\t\t\t\tif(e.which === 13) { return false; }\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\tfn = {\n\t\t\t\t\t\tfontFamily\t\t: a.css('fontFamily')\t\t|| '',\n\t\t\t\t\t\tfontSize\t\t: a.css('fontSize')\t\t\t|| '',\n\t\t\t\t\t\tfontWeight\t\t: a.css('fontWeight')\t\t|| '',\n\t\t\t\t\t\tfontStyle\t\t: a.css('fontStyle')\t\t|| '',\n\t\t\t\t\t\tfontStretch\t\t: a.css('fontStretch')\t\t|| '',\n\t\t\t\t\t\tfontVariant\t\t: a.css('fontVariant')\t\t|| '',\n\t\t\t\t\t\tletterSpacing\t: a.css('letterSpacing')\t|| '',\n\t\t\t\t\t\twordSpacing\t\t: a.css('wordSpacing')\t\t|| ''\n\t\t\t\t};\n\t\t\ts.attr('class', a.attr('class')).append(a.contents().clone()).append(h2);\n\t\t\ta.replaceWith(s);\n\t\t\th1.css(fn);\n\t\t\th2.css(fn).width(Math.min(h1.text(\"pW\" + h2[0].value).width(),w))[0].select();\n\t\t\t$(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) {\n\t\t\t\tif (h2 && e.target !== h2) {\n\t\t\t\t\t$(h2).blur();\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n\t\t * changes the theme\n\t\t * @name set_theme(theme_name [, theme_url])\n\t\t * @param {String} theme_name the name of the new theme to apply\n\t\t * @param {mixed} theme_url  the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory.\n\t\t * @trigger set_theme.jstree\n\t\t */\n\t\tset_theme : function (theme_name, theme_url) {\n\t\t\tif(!theme_name) { return false; }\n\t\t\tif(theme_url === true) {\n\t\t\t\tvar dir = this.settings.core.themes.dir;\n\t\t\t\tif(!dir) { dir = $.jstree.path + '/themes'; }\n\t\t\t\ttheme_url = dir + '/' + theme_name + '/style.css';\n\t\t\t}\n\t\t\tif(theme_url && $.inArray(theme_url, themes_loaded) === -1) {\n\t\t\t\t$('head').append('<'+'link rel=\"stylesheet\" href=\"' + theme_url + '\" type=\"text/css\" />');\n\t\t\t\tthemes_loaded.push(theme_url);\n\t\t\t}\n\t\t\tif(this._data.core.themes.name) {\n\t\t\t\tthis.element.removeClass('jstree-' + this._data.core.themes.name);\n\t\t\t}\n\t\t\tthis._data.core.themes.name = theme_name;\n\t\t\tthis.element.addClass('jstree-' + theme_name);\n\t\t\tthis.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive');\n\t\t\t/**\n\t\t\t * triggered when a theme is set\n\t\t\t * @event\n\t\t\t * @name set_theme.jstree\n\t\t\t * @param {String} theme the new theme\n\t\t\t */\n\t\t\tthis.trigger('set_theme', { 'theme' : theme_name });\n\t\t},\n\t\t/**\n\t\t * gets the name of the currently applied theme name\n\t\t * @name get_theme()\n\t\t * @return {String}\n\t\t */\n\t\tget_theme : function () { return this._data.core.themes.name; },\n\t\t/**\n\t\t * changes the theme variant (if the theme has variants)\n\t\t * @name set_theme_variant(variant_name)\n\t\t * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed)\n\t\t */\n\t\tset_theme_variant : function (variant_name) {\n\t\t\tif(this._data.core.themes.variant) {\n\t\t\t\tthis.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);\n\t\t\t}\n\t\t\tthis._data.core.themes.variant = variant_name;\n\t\t\tif(variant_name) {\n\t\t\t\tthis.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * gets the name of the currently applied theme variant\n\t\t * @name get_theme()\n\t\t * @return {String}\n\t\t */\n\t\tget_theme_variant : function () { return this._data.core.themes.variant; },\n\t\t/**\n\t\t * shows a striped background on the container (if the theme supports it)\n\t\t * @name show_stripes()\n\t\t */\n\t\tshow_stripes : function () {\n\t\t\tthis._data.core.themes.stripes = true;\n\t\t\tthis.get_container_ul().addClass(\"jstree-striped\");\n\t\t\t/**\n\t\t\t * triggered when stripes are shown\n\t\t\t * @event\n\t\t\t * @name show_stripes.jstree\n\t\t\t */\n\t\t\tthis.trigger('show_stripes');\n\t\t},\n\t\t/**\n\t\t * hides the striped background on the container\n\t\t * @name hide_stripes()\n\t\t */\n\t\thide_stripes : function () {\n\t\t\tthis._data.core.themes.stripes = false;\n\t\t\tthis.get_container_ul().removeClass(\"jstree-striped\");\n\t\t\t/**\n\t\t\t * triggered when stripes are hidden\n\t\t\t * @event\n\t\t\t * @name hide_stripes.jstree\n\t\t\t */\n\t\t\tthis.trigger('hide_stripes');\n\t\t},\n\t\t/**\n\t\t * toggles the striped background on the container\n\t\t * @name toggle_stripes()\n\t\t */\n\t\ttoggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } },\n\t\t/**\n\t\t * shows the connecting dots (if the theme supports it)\n\t\t * @name show_dots()\n\t\t */\n\t\tshow_dots : function () {\n\t\t\tthis._data.core.themes.dots = true;\n\t\t\tthis.get_container_ul().removeClass(\"jstree-no-dots\");\n\t\t\t/**\n\t\t\t * triggered when dots are shown\n\t\t\t * @event\n\t\t\t * @name show_dots.jstree\n\t\t\t */\n\t\t\tthis.trigger('show_dots');\n\t\t},\n\t\t/**\n\t\t * hides the connecting dots\n\t\t * @name hide_dots()\n\t\t */\n\t\thide_dots : function () {\n\t\t\tthis._data.core.themes.dots = false;\n\t\t\tthis.get_container_ul().addClass(\"jstree-no-dots\");\n\t\t\t/**\n\t\t\t * triggered when dots are hidden\n\t\t\t * @event\n\t\t\t * @name hide_dots.jstree\n\t\t\t */\n\t\t\tthis.trigger('hide_dots');\n\t\t},\n\t\t/**\n\t\t * toggles the connecting dots\n\t\t * @name toggle_dots()\n\t\t */\n\t\ttoggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },\n\t\t/**\n\t\t * show the node icons\n\t\t * @name show_icons()\n\t\t */\n\t\tshow_icons : function () {\n\t\t\tthis._data.core.themes.icons = true;\n\t\t\tthis.get_container_ul().removeClass(\"jstree-no-icons\");\n\t\t\t/**\n\t\t\t * triggered when icons are shown\n\t\t\t * @event\n\t\t\t * @name show_icons.jstree\n\t\t\t */\n\t\t\tthis.trigger('show_icons');\n\t\t},\n\t\t/**\n\t\t * hide the node icons\n\t\t * @name hide_icons()\n\t\t */\n\t\thide_icons : function () {\n\t\t\tthis._data.core.themes.icons = false;\n\t\t\tthis.get_container_ul().addClass(\"jstree-no-icons\");\n\t\t\t/**\n\t\t\t * triggered when icons are hidden\n\t\t\t * @event\n\t\t\t * @name hide_icons.jstree\n\t\t\t */\n\t\t\tthis.trigger('hide_icons');\n\t\t},\n\t\t/**\n\t\t * toggle the node icons\n\t\t * @name toggle_icons()\n\t\t */\n\t\ttoggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } },\n\t\t/**\n\t\t * show the node ellipsis\n\t\t * @name show_icons()\n\t\t */\n\t\tshow_ellipsis : function () {\n\t\t\tthis._data.core.themes.ellipsis = true;\n\t\t\tthis.get_container_ul().addClass(\"jstree-ellipsis\");\n\t\t\t/**\n\t\t\t * triggered when ellisis is shown\n\t\t\t * @event\n\t\t\t * @name show_ellipsis.jstree\n\t\t\t */\n\t\t\tthis.trigger('show_ellipsis');\n\t\t},\n\t\t/**\n\t\t * hide the node ellipsis\n\t\t * @name hide_ellipsis()\n\t\t */\n\t\thide_ellipsis : function () {\n\t\t\tthis._data.core.themes.ellipsis = false;\n\t\t\tthis.get_container_ul().removeClass(\"jstree-ellipsis\");\n\t\t\t/**\n\t\t\t * triggered when ellisis is hidden\n\t\t\t * @event\n\t\t\t * @name hide_ellipsis.jstree\n\t\t\t */\n\t\t\tthis.trigger('hide_ellipsis');\n\t\t},\n\t\t/**\n\t\t * toggle the node ellipsis\n\t\t * @name toggle_icons()\n\t\t */\n\t\ttoggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } },\n\t\t/**\n\t\t * set the node icon for a node\n\t\t * @name set_icon(obj, icon)\n\t\t * @param {mixed} obj\n\t\t * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class\n\t\t */\n\t\tset_icon : function (obj, icon) {\n\t\t\tvar t1, t2, dom, old;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_icon(obj[t1], icon);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\told = obj.icon;\n\t\t\tobj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon;\n\t\t\tdom = this.get_node(obj, true).children(\".jstree-anchor\").children(\".jstree-themeicon\");\n\t\t\tif(icon === false) {\n\t\t\t\tdom.removeClass('jstree-themeicon-custom ' + old).css(\"background\",\"\").removeAttr(\"rel\");\n\t\t\t\tthis.hide_icon(obj);\n\t\t\t}\n\t\t\telse if(icon === true || icon === null || icon === undefined || icon === '') {\n\t\t\t\tdom.removeClass('jstree-themeicon-custom ' + old).css(\"background\",\"\").removeAttr(\"rel\");\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\telse if(icon.indexOf(\"/\") === -1 && icon.indexOf(\".\") === -1) {\n\t\t\t\tdom.removeClass(old).css(\"background\",\"\");\n\t\t\t\tdom.addClass(icon + ' jstree-themeicon-custom').attr(\"rel\",icon);\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.removeClass(old).css(\"background\",\"\");\n\t\t\t\tdom.addClass('jstree-themeicon-custom').css(\"background\", \"url('\" + icon + \"') center center no-repeat\").attr(\"rel\",icon);\n\t\t\t\tif(old === false) { this.show_icon(obj); }\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * get the node icon for a node\n\t\t * @name get_icon(obj)\n\t\t * @param {mixed} obj\n\t\t * @return {String}\n\t\t */\n\t\tget_icon : function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj || obj.id === $.jstree.root) ? false : obj.icon;\n\t\t},\n\t\t/**\n\t\t * hide the icon on an individual node\n\t\t * @name hide_icon(obj)\n\t\t * @param {mixed} obj\n\t\t */\n\t\thide_icon : function (obj) {\n\t\t\tvar t1, t2;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.hide_icon(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj === $.jstree.root) { return false; }\n\t\t\tobj.icon = false;\n\t\t\tthis.get_node(obj, true).children(\".jstree-anchor\").children(\".jstree-themeicon\").addClass('jstree-themeicon-hidden');\n\t\t\treturn true;\n\t\t},\n\t\t/**\n\t\t * show the icon on an individual node\n\t\t * @name show_icon(obj)\n\t\t * @param {mixed} obj\n\t\t */\n\t\tshow_icon : function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.show_icon(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj === $.jstree.root) { return false; }\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tobj.icon = dom.length ? dom.children(\".jstree-anchor\").children(\".jstree-themeicon\").attr('rel') : true;\n\t\t\tif(!obj.icon) { obj.icon = true; }\n\t\t\tdom.children(\".jstree-anchor\").children(\".jstree-themeicon\").removeClass('jstree-themeicon-hidden');\n\t\t\treturn true;\n\t\t}\n\t};\n\n\t// helpers\n\t$.vakata = {};\n\t// collect attributes\n\t$.vakata.attributes = function(node, with_values) {\n\t\tnode = $(node)[0];\n\t\tvar attr = with_values ? {} : [];\n\t\tif(node && node.attributes) {\n\t\t\t$.each(node.attributes, function (i, v) {\n\t\t\t\tif($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; }\n\t\t\t\tif(v.value !== null && $.trim(v.value) !== '') {\n\t\t\t\t\tif(with_values) { attr[v.name] = v.value; }\n\t\t\t\t\telse { attr.push(v.name); }\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn attr;\n\t};\n\t$.vakata.array_unique = function(array) {\n\t\tvar a = [], i, j, l, o = {};\n\t\tfor(i = 0, l = array.length; i < l; i++) {\n\t\t\tif(o[array[i]] === undefined) {\n\t\t\t\ta.push(array[i]);\n\t\t\t\to[array[i]] = true;\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t};\n\t// remove item from array\n\t$.vakata.array_remove = function(array, from) {\n\t\tarray.splice(from, 1);\n\t\treturn array;\n\t\t//var rest = array.slice((to || from) + 1 || array.length);\n\t\t//array.length = from < 0 ? array.length + from : from;\n\t\t//array.push.apply(array, rest);\n\t\t//return array;\n\t};\n\t// remove item from array\n\t$.vakata.array_remove_item = function(array, item) {\n\t\tvar tmp = $.inArray(item, array);\n\t\treturn tmp !== -1 ? $.vakata.array_remove(array, tmp) : array;\n\t};\n\t$.vakata.array_filter = function(c,a,b,d,e) {\n\t\tif (c.filter) {\n\t\t\treturn c.filter(a, b);\n\t\t}\n\t\td=[];\n\t\tfor (e in c) {\n\t\t\tif (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) {\n\t\t\t\td.push(c[e]);\n\t\t\t}\n\t\t}\n\t\treturn d;\n\t};\n\n\n/**\n * ### Changed plugin\n *\n * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes.\n */\n\n\t$.jstree.plugins.changed = function (options, parent) {\n\t\tvar last = [];\n\t\tthis.trigger = function (ev, data) {\n\t\t\tvar i, j;\n\t\t\tif(!data) {\n\t\t\t\tdata = {};\n\t\t\t}\n\t\t\tif(ev.replace('.jstree','') === 'changed') {\n\t\t\t\tdata.changed = { selected : [], deselected : [] };\n\t\t\t\tvar tmp = {};\n\t\t\t\tfor(i = 0, j = last.length; i < j; i++) {\n\t\t\t\t\ttmp[last[i]] = 1;\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = data.selected.length; i < j; i++) {\n\t\t\t\t\tif(!tmp[data.selected[i]]) {\n\t\t\t\t\t\tdata.changed.selected.push(data.selected[i]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttmp[data.selected[i]] = 2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor(i = 0, j = last.length; i < j; i++) {\n\t\t\t\t\tif(tmp[last[i]] === 1) {\n\t\t\t\t\t\tdata.changed.deselected.push(last[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlast = data.selected.slice();\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered when selection changes (the \"changed\" plugin enhances the original event with more data)\n\t\t\t * @event\n\t\t\t * @name changed.jstree\n\t\t\t * @param {Object} node\n\t\t\t * @param {Object} action the action that caused the selection to change\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event\n\t\t\t * @param {Object} event the event (if any) that triggered this changed event\n\t\t\t * @plugin changed\n\t\t\t */\n\t\t\tparent.trigger.call(this, ev, data);\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tlast = [];\n\t\t\treturn parent.refresh.apply(this, arguments);\n\t\t};\n\t};\n\n/**\n * ### Checkbox plugin\n *\n * This plugin renders checkbox icons in front of each node, making multiple selection much easier.\n * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up.\n */\n\n\tvar _i = document.createElement('I');\n\t_i.className = 'jstree-icon jstree-checkbox';\n\t_i.setAttribute('role', 'presentation');\n\t/**\n\t * stores all defaults for the checkbox plugin\n\t * @name $.jstree.defaults.checkbox\n\t * @plugin checkbox\n\t */\n\t$.jstree.defaults.checkbox = {\n\t\t/**\n\t\t * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.visible\n\t\t * @plugin checkbox\n\t\t */\n\t\tvisible\t\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.three_state\n\t\t * @plugin checkbox\n\t\t */\n\t\tthree_state\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.whole_node\n\t\t * @plugin checkbox\n\t\t */\n\t\twhole_node\t\t\t: true,\n\t\t/**\n\t\t * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`.\n\t\t * @name $.jstree.defaults.checkbox.keep_selected_style\n\t\t * @plugin checkbox\n\t\t */\n\t\tkeep_selected_style\t: true,\n\t\t/**\n\t\t * This setting controls how cascading and undetermined nodes are applied.\n\t\t * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used.\n\t\t * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''.\n\t\t * @name $.jstree.defaults.checkbox.cascade\n\t\t * @plugin checkbox\n\t\t */\n\t\tcascade\t\t\t\t: '',\n\t\t/**\n\t\t * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing.\n\t\t * @name $.jstree.defaults.checkbox.tie_selection\n\t\t * @plugin checkbox\n\t\t */\n\t\ttie_selection\t\t: true,\n\n\t\t/**\n\t\t * This setting controls if cascading down affects disabled checkboxes\n\t\t * @name $.jstree.defaults.checkbox.cascade_to_disabled\n\t\t * @plugin checkbox\n\t\t */\n\t\tcascade_to_disabled : true,\n\n\t\t/**\n\t\t * This setting controls if cascading down affects hidden checkboxes\n\t\t * @name $.jstree.defaults.checkbox.cascade_to_hidden\n\t\t * @plugin checkbox\n\t\t */\n\t\tcascade_to_hidden : true\n\t};\n\t$.jstree.plugins.checkbox = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tthis._data.checkbox.uto = false;\n\t\t\tthis._data.checkbox.selected = [];\n\t\t\tif(this.settings.checkbox.three_state) {\n\t\t\t\tthis.settings.checkbox.cascade = 'up+down+undetermined';\n\t\t\t}\n\t\t\tthis.element\n\t\t\t\t.on(\"init.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis._data.checkbox.visible = this.settings.checkbox.visible;\n\t\t\t\t\t\tif(!this.settings.checkbox.keep_selected_style) {\n\t\t\t\t\t\t\tthis.element.addClass('jstree-checkbox-no-clicked');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.settings.checkbox.tie_selection) {\n\t\t\t\t\t\t\tthis.element.addClass('jstree-checkbox-selection');\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"loading.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ]();\n\t\t\t\t\t}, this));\n\t\t\tif(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () {\n\t\t\t\t\t\t\t// only if undetermined is in setting\n\t\t\t\t\t\t\tif(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }\n\t\t\t\t\t\t\tthis._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(!this.settings.checkbox.tie_selection) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\tp = m[data.parent],\n\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\ti, j;\n\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\tm[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked);\n\t\t\t\t\t\t\tif(m[dpc[i]].state.checked) {\n\t\t\t\t\t\t\t\tthis._data.checkbox.selected.push(dpc[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\t\tp = m[data.parent],\n\t\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\t\tchd = [],\n\t\t\t\t\t\t\t\tc, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection;\n\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\t\tif(p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tm[dpc[i]].state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tif(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\t\tfor(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\t\t\t\tm[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1) {\n\t\t\t\t\t\t\t\t// apply up\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tif(!m[p.children_d[i]].children.length) {\n\t\t\t\t\t\t\t\t\t\tchd.push(m[p.children_d[i]].parent);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchd = $.vakata.array_unique(chd);\n\t\t\t\t\t\t\t\tfor(k = 0, l = chd.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\tp = m[chd[k]];\n\t\t\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected);\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar self = this,\n\t\t\t\t\t\t\t\tobj = data.node,\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\tpar = this.get_node(obj.parent),\n\t\t\t\t\t\t\t\ti, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,\n\t\t\t\t\t\t\t\tsel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected;\n\n\t\t\t\t\t\t\tfor (i = 0, j = cur.length; i < j; i++) {\n\t\t\t\t\t\t\t\tsel[cur[i]] = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\t//this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d));\n\t\t\t\t\t\t\t\tvar selectedIds = this._cascade_new_checked_state(obj.id, true);\n\t\t\t\t\t\t\t\tvar temp = obj.children_d.concat(obj.id);\n\t\t\t\t\t\t\t\tfor (i = 0, j = temp.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tif (selectedIds.indexOf(temp[i]) > -1) {\n\t\t\t\t\t\t\t\t\t\tsel[temp[i]] = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdelete sel[temp[i]];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply up\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1) {\n\t\t\t\t\t\t\t\twhile(par && par.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tc += m[par.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\t\tpar.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tsel[par.id] = true;\n\t\t\t\t\t\t\t\t\t\t//this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(par, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tpar = this.get_node(par.parent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcur = [];\n\t\t\t\t\t\t\tfor (i in sel) {\n\t\t\t\t\t\t\t\tif (sel.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\tcur.push(i);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = cur;\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar obj = this.get_node($.jstree.root),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\ti, j, tmp;\n\t\t\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\ttmp = m[obj.children_d[i]];\n\t\t\t\t\t\t\t\tif(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {\n\t\t\t\t\t\t\t\t\ttmp.original.state.undetermined = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\tvar self = this,\n\t\t\t\t\t\t\t\tobj = data.node,\n\t\t\t\t\t\t\t\tdom = this.get_node(obj, true),\n\t\t\t\t\t\t\t\ti, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection,\n\t\t\t\t\t\t\t\tcur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {},\n\t\t\t\t\t\t\t\tstillSelectedIds = [],\n\t\t\t\t\t\t\t\tallIds = obj.children_d.concat(obj.id);\n\n\t\t\t\t\t\t\t// apply down\n\t\t\t\t\t\t\tif(s.indexOf('down') !== -1) {\n\t\t\t\t\t\t\t\tvar selectedIds = this._cascade_new_checked_state(obj.id, false);\n\n\t\t\t\t\t\t\t\tcur = $.vakata.array_filter(cur, function(id) {\n\t\t\t\t\t\t\t\t\treturn allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// only apply up if cascade up is enabled and if this node is not selected\n\t\t\t\t\t\t\t// (if all child nodes are disabled and cascade_to_disabled === false then this node will till be selected).\n\t\t\t\t\t\t\tif(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) {\n\t\t\t\t\t\t\t\tfor(i = 0, j = obj.parents.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\ttmp = this._model.data[obj.parents[i]];\n\t\t\t\t\t\t\t\t\ttmp.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) {\n\t\t\t\t\t\t\t\t\t\ttmp.original.state.undetermined = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttmp = this.get_node(obj.parents[i], true);\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tcur = $.vakata.array_filter(cur, function(id) {\n\t\t\t\t\t\t\t\t\treturn obj.parents.indexOf(id) === -1;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = cur;\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif(this.settings.checkbox.cascade.indexOf('up') !== -1) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('delete_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\t// apply up (whole handler)\n\t\t\t\t\t\t\tvar p = this.get_node(data.parent),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\ti, j, c, tmp, t = this.settings.checkbox.tie_selection;\n\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(j > 0 && c === j) {\n\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t.on('move_node.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\t\t// apply up (whole handler)\n\t\t\t\t\t\t\tvar is_multi = data.is_multi,\n\t\t\t\t\t\t\t\told_par = data.old_parent,\n\t\t\t\t\t\t\t\tnew_par = this.get_node(data.parent),\n\t\t\t\t\t\t\t\tm = this._model.data,\n\t\t\t\t\t\t\t\tp, c, i, j, tmp, t = this.settings.checkbox.tie_selection;\n\t\t\t\t\t\t\tif(!is_multi) {\n\t\t\t\t\t\t\t\tp = this.get_node(old_par);\n\t\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif(j > 0 && c === j) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tp = new_par;\n\t\t\t\t\t\t\twhile(p && p.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\tc = 0;\n\t\t\t\t\t\t\t\tfor(i = 0, j = p.children.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\tc += m[p.children[i]].state[ t ? 'selected' : 'checked' ];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(c === j) {\n\t\t\t\t\t\t\t\t\tif(!p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = true;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected.push(p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif(p.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\t\t\t\t\t\tp.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\t\t\t\t\t\tthis._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id);\n\t\t\t\t\t\t\t\t\t\ttmp = this.get_node(p, true);\n\t\t\t\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\t\t\t\ttmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tp = this.get_node(p.parent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * get an array of all nodes whose state is \"undetermined\"\n\t\t * @name get_undetermined([full])\n\t\t * @param  {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_undetermined = function (full) {\n\t\t\tif (this.settings.checkbox.cascade.indexOf('undetermined') === -1) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tvar i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this, r = [];\n\t\t\tfor(i = 0, j = s.length; i < j; i++) {\n\t\t\t\tif(m[s[i]] && m[s[i]].parents) {\n\t\t\t\t\tfor(k = 0, l = m[s[i]].parents.length; k < l; k++) {\n\t\t\t\t\t\tif(o[m[s[i]].parents[k]] !== undefined) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(m[s[i]].parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\to[m[s[i]].parents[k]] = true;\n\t\t\t\t\t\t\tp.push(m[s[i]].parents[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// attempt for server side undetermined state\n\t\t\tthis.element.find('.jstree-closed').not(':has(.jstree-children)')\n\t\t\t\t.each(function () {\n\t\t\t\t\tvar tmp = tt.get_node(this), tmp2;\n\t\t\t\t\t\n\t\t\t\t\tif(!tmp) { return; }\n\t\t\t\t\t\n\t\t\t\t\tif(!tmp.state.loaded) {\n\t\t\t\t\t\tif(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) {\n\t\t\t\t\t\t\tif(o[tmp.id] === undefined && tmp.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\to[tmp.id] = true;\n\t\t\t\t\t\t\t\tp.push(tmp.id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor(k = 0, l = tmp.parents.length; k < l; k++) {\n\t\t\t\t\t\t\t\tif(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\to[tmp.parents[k]] = true;\n\t\t\t\t\t\t\t\t\tp.push(tmp.parents[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfor(i = 0, j = tmp.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp2 = m[tmp.children_d[i]];\n\t\t\t\t\t\t\tif(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) {\n\t\t\t\t\t\t\t\tif(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\to[tmp2.id] = true;\n\t\t\t\t\t\t\t\t\tp.push(tmp2.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor(k = 0, l = tmp2.parents.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\tif(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) {\n\t\t\t\t\t\t\t\t\t\to[tmp2.parents[k]] = true;\n\t\t\t\t\t\t\t\t\t\tp.push(tmp2.parents[k]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tfor (i = 0, j = p.length; i < j; i++) {\n\t\t\t\tif(!m[p[i]].state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\tr.push(full ? m[p[i]] : p[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn r;\n\t\t};\n\t\t/**\n\t\t * set the undetermined state where and if necessary. Used internally.\n\t\t * @private\n\t\t * @name _undetermined()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis._undetermined = function () {\n\t\t\tif(this.element === null) { return; }\n\t\t\tvar p = this.get_undetermined(false), i, j, s;\n\n\t\t\tthis.element.find('.jstree-undetermined').removeClass('jstree-undetermined');\n\t\t\tfor (i = 0, j = p.length; i < j; i++) {\n\t\t\t\ts = this.get_node(p[i], true);\n\t\t\t\tif(s && s.length) {\n\t\t\t\t\ts.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined');\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tthis.redraw_node = function(obj, deep, is_callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tvar i, j, tmp = null, icon = null;\n\t\t\t\tfor(i = 0, j = obj.childNodes.length; i < j; i++) {\n\t\t\t\t\tif(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf(\"jstree-anchor\") !== -1) {\n\t\t\t\t\t\ttmp = obj.childNodes[i];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(tmp) {\n\t\t\t\t\tif(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; }\n\t\t\t\t\ticon = _i.cloneNode(false);\n\t\t\t\t\tif(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; }\n\t\t\t\t\ttmp.insertBefore(icon, tmp.childNodes[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) {\n\t\t\t\tif(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); }\n\t\t\t\tthis._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50);\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t\t/**\n\t\t * show the node checkbox icons\n\t\t * @name show_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass(\"jstree-no-checkboxes\"); };\n\t\t/**\n\t\t * hide the node checkbox icons\n\t\t * @name hide_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass(\"jstree-no-checkboxes\"); };\n\t\t/**\n\t\t * toggle the node icons\n\t\t * @name toggle_checkboxes()\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } };\n\t\t/**\n\t\t * checks if a node is in an undetermined state\n\t\t * @name is_undetermined(obj)\n\t\t * @param  {mixed} obj\n\t\t * @return {Boolean}\n\t\t */\n\t\tthis.is_undetermined = function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tvar s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data;\n\t\t\tif(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(!obj.state.loaded && obj.original.state.undetermined === true) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\tif($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t/**\n\t\t * disable a node's checkbox\n\t\t * @name disable_checkbox(obj)\n\t\t * @param {mixed} obj an array can be used too\n\t\t * @trigger disable_checkbox.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.disable_checkbox = function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.disable_checkbox(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.checkbox_disabled) {\n\t\t\t\tobj.state.checkbox_disabled = true;\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node's checkbox is disabled\n\t\t\t\t * @event\n\t\t\t\t * @name disable_checkbox.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('disable_checkbox', { 'node' : obj });\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * enable a node's checkbox\n\t\t * @name enable_checkbox(obj)\n\t\t * @param {mixed} obj an array can be used too\n\t\t * @trigger enable_checkbox.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.enable_checkbox = function (obj) {\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.enable_checkbox(obj[t1]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.checkbox_disabled) {\n\t\t\t\tobj.state.checkbox_disabled = false;\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node's checkbox is enabled\n\t\t\t\t * @event\n\t\t\t\t * @name enable_checkbox.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('enable_checkbox', { 'node' : obj });\n\t\t\t}\n\t\t};\n\n\t\tthis.activate_node = function (obj, e) {\n\t\t\tif($(e.target).hasClass('jstree-checkbox-disabled')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) {\n\t\t\t\te.ctrlKey = true;\n\t\t\t}\n\t\t\tif(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) {\n\t\t\t\treturn parent.activate_node.call(this, obj, e);\n\t\t\t}\n\t\t\tif(this.is_disabled(obj)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif(this.is_checked(obj)) {\n\t\t\t\tthis.uncheck_node(obj, e);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.check_node(obj, e);\n\t\t\t}\n\t\t\tthis.trigger('activate_node', { 'node' : this.get_node(obj) });\n\t\t};\n\n\t\t/**\n\t\t * Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants).\n\t\t * However if these unaffected nodes are already selected their ids will be included in the returned array.\n\t\t * @private\n\t\t * @param {string} id the node ID\n\t\t * @param {bool} checkedState should the nodes be checked or not\n\t\t * @returns {Array} Array of all node id's (in this tree branch) that are checked.\n\t\t */\n\t\tthis._cascade_new_checked_state = function (id, checkedState) {\n\t\t\tvar self = this;\n\t\t\tvar t = this.settings.checkbox.tie_selection;\n\t\t\tvar node = this._model.data[id];\n\t\t\tvar selectedNodeIds = [];\n\t\t\tvar selectedChildrenIds = [], i, j, selectedChildIds;\n\n\t\t\tif (\n\t\t\t\t(this.settings.checkbox.cascade_to_disabled || !node.state.disabled) &&\n\t\t\t\t(this.settings.checkbox.cascade_to_hidden || !node.state.hidden)\n\t\t\t) {\n\t\t\t\t//First try and check/uncheck the children\n\t\t\t\tif (node.children) {\n\t\t\t\t\tfor (i = 0, j = node.children.length; i < j; i++) {\n\t\t\t\t\t\tvar childId = node.children[i];\n\t\t\t\t\t\tselectedChildIds = self._cascade_new_checked_state(childId, checkedState);\n\t\t\t\t\t\tselectedNodeIds = selectedNodeIds.concat(selectedChildIds);\n\t\t\t\t\t\tif (selectedChildIds.indexOf(childId) > -1) {\n\t\t\t\t\t\t\tselectedChildrenIds.push(childId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar dom = self.get_node(node, true);\n\n\t\t\t\t//A node's state is undetermined if some but not all of it's children are checked/selected .\n\t\t\t\tvar undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length;\n\n\t\t\t\tif(node.original && node.original.state && node.original.state.undetermined) {\n\t\t\t\t\tnode.original.state.undetermined = undetermined;\n\t\t\t\t}\n\n\t\t\t\t//If a node is undetermined then remove selected class\n\t\t\t\tif (undetermined) {\n\t\t\t\t\tnode.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\tdom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t}\n\t\t\t\t//Otherwise, if the checkedState === true (i.e. the node is being checked now) and all of the node's children are checked (if it has any children),\n\t\t\t\t//check the node and style it correctly.\n\t\t\t\telse if (checkedState && selectedChildrenIds.length === node.children.length) {\n\t\t\t\t\tnode.state[ t ? 'selected' : 'checked' ] = checkedState;\n\t\t\t\t\tselectedNodeIds.push(node.id);\n\n\t\t\t\t\tdom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnode.state[ t ? 'selected' : 'checked' ] = false;\n\t\t\t\t\tdom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tselectedChildIds = this.get_checked_descendants(id);\n\n\t\t\t\tif (node.state[ t ? 'selected' : 'checked' ]) {\n\t\t\t\t\tselectedChildIds.push(node.id);\n\t\t\t\t}\n\n\t\t\t\tselectedNodeIds = selectedNodeIds.concat(selectedChildIds);\n\t\t\t}\n\n\t\t\treturn selectedNodeIds;\n\t\t};\n\n\t\t/**\n\t\t * Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id)\n\t\t * @name get_checked_descendants(obj)\n\t\t * @param {string} id the node ID\n\t\t * @return {Array} array of IDs\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_checked_descendants = function (id) {\n\t\t\tvar self = this;\n\t\t\tvar t = self.settings.checkbox.tie_selection;\n\t\t\tvar node = self._model.data[id];\n\n\t\t\treturn $.vakata.array_filter(node.children_d, function(_id) {\n\t\t\t\treturn self._model.data[_id].state[ t ? 'selected' : 'checked' ];\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally)\n\t\t * @name check_node(obj)\n\t\t * @param {mixed} obj an array can be used to check multiple nodes\n\t\t * @trigger check_node.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.check_node = function (obj, e) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); }\n\t\t\tvar dom, t1, t2, th;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.check_node(obj[t1], e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(!obj.state.checked) {\n\t\t\t\tobj.state.checked = true;\n\t\t\t\tthis._data.checkbox.selected.push(obj.id);\n\t\t\t\tif(dom && dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').addClass('jstree-checked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is checked (only if tie_selection in checkbox settings is false)\n\t\t\t\t * @event\n\t\t\t\t * @name check_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this check_node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally)\n\t\t * @name uncheck_node(obj)\n\t\t * @param {mixed} obj an array can be used to uncheck multiple nodes\n\t\t * @trigger uncheck_node.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.uncheck_node = function (obj, e) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); }\n\t\t\tvar t1, t2, dom;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.uncheck_node(obj[t1], e);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdom = this.get_node(obj, true);\n\t\t\tif(obj.state.checked) {\n\t\t\t\tobj.state.checked = false;\n\t\t\t\tthis._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id);\n\t\t\t\tif(dom.length) {\n\t\t\t\t\tdom.children('.jstree-anchor').removeClass('jstree-checked');\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered when an node is unchecked (only if tie_selection in checkbox settings is false)\n\t\t\t\t * @event\n\t\t\t\t * @name uncheck_node.jstree\n\t\t\t\t * @param {Object} node\n\t\t\t\t * @param {Array} selected the current selection\n\t\t\t\t * @param {Object} event the event (if any) that triggered this uncheck_node\n\t\t\t\t * @plugin checkbox\n\t\t\t\t */\n\t\t\t\tthis.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e });\n\t\t\t}\n\t\t};\n\t\t\n\t\t/**\n\t\t * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally)\n\t\t * @name check_all()\n\t\t * @trigger check_all.jstree, changed.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.check_all = function () {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.select_all(); }\n\t\t\tvar tmp = this._data.checkbox.selected.concat([]), i, j;\n\t\t\tthis._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat();\n\t\t\tfor(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.checkbox.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.checkbox.selected[i]].state.checked = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.redraw(true);\n\t\t\t/**\n\t\t\t * triggered when all nodes are checked (only if tie_selection in checkbox settings is false)\n\t\t\t * @event\n\t\t\t * @name check_all.jstree\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @plugin checkbox\n\t\t\t */\n\t\t\tthis.trigger('check_all', { 'selected' : this._data.checkbox.selected });\n\t\t};\n\t\t/**\n\t\t * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally)\n\t\t * @name uncheck_all()\n\t\t * @trigger uncheck_all.jstree\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.uncheck_all = function () {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.deselect_all(); }\n\t\t\tvar tmp = this._data.checkbox.selected.concat([]), i, j;\n\t\t\tfor(i = 0, j = this._data.checkbox.selected.length; i < j; i++) {\n\t\t\t\tif(this._model.data[this._data.checkbox.selected[i]]) {\n\t\t\t\t\tthis._model.data[this._data.checkbox.selected[i]].state.checked = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._data.checkbox.selected = [];\n\t\t\tthis.element.find('.jstree-checked').removeClass('jstree-checked');\n\t\t\t/**\n\t\t\t * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false)\n\t\t\t * @event\n\t\t\t * @name uncheck_all.jstree\n\t\t\t * @param {Object} node the previous selection\n\t\t\t * @param {Array} selected the current selection\n\t\t\t * @plugin checkbox\n\t\t\t */\n\t\t\tthis.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp });\n\t\t};\n\t\t/**\n\t\t * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected)\n\t\t * @name is_checked(obj)\n\t\t * @param  {mixed}  obj\n\t\t * @return {Boolean}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.is_checked = function (obj) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.is_selected(obj); }\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\treturn obj.state.checked;\n\t\t};\n\t\t/**\n\t\t * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected)\n\t\t * @name get_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_selected(full); }\n\t\t\treturn full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected.slice();\n\t\t};\n\t\t/**\n\t\t * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected)\n\t\t * @name get_top_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_top_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); }\n\t\t\tvar tmp = this.get_checked(true),\n\t\t\t\tobj = {}, i, j, k, l;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tobj[tmp[i].id] = tmp[i];\n\t\t\t}\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tfor(k = 0, l = tmp[i].children_d.length; k < l; k++) {\n\t\t\t\t\tif(obj[tmp[i].children_d[k]]) {\n\t\t\t\t\t\tdelete obj[tmp[i].children_d[k]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = [];\n\t\t\tfor(i in obj) {\n\t\t\t\tif(obj.hasOwnProperty(i)) {\n\t\t\t\t\ttmp.push(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp;\n\t\t};\n\t\t/**\n\t\t * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected)\n\t\t * @name get_bottom_checked([full])\n\t\t * @param  {mixed}  full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned\n\t\t * @return {Array}\n\t\t * @plugin checkbox\n\t\t */\n\t\tthis.get_bottom_checked = function (full) {\n\t\t\tif(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); }\n\t\t\tvar tmp = this.get_checked(true),\n\t\t\t\tobj = [], i, j;\n\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\tif(!tmp[i].children.length) {\n\t\t\t\t\tobj.push(tmp[i].id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj;\n\t\t};\n\t\tthis.load_node = function (obj, callback) {\n\t\t\tvar k, l, i, j, c, tmp;\n\t\t\tif(!$.isArray(obj) && !this.settings.checkbox.tie_selection) {\n\t\t\t\ttmp = this.get_node(obj);\n\t\t\t\tif(tmp && tmp.state.loaded) {\n\t\t\t\t\tfor(k = 0, l = tmp.children_d.length; k < l; k++) {\n\t\t\t\t\t\tif(this._model.data[tmp.children_d[k]].state.checked) {\n\t\t\t\t\t\t\tc = true;\n\t\t\t\t\t\t\tthis._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parent.load_node.apply(this, arguments);\n\t\t};\n\t\tthis.get_state = function () {\n\t\t\tvar state = parent.get_state.apply(this, arguments);\n\t\t\tif(this.settings.checkbox.tie_selection) { return state; }\n\t\t\tstate.checkbox = this._data.checkbox.selected.slice();\n\t\t\treturn state;\n\t\t};\n\t\tthis.set_state = function (state, callback) {\n\t\t\tvar res = parent.set_state.apply(this, arguments);\n\t\t\tif(res && state.checkbox) {\n\t\t\t\tif(!this.settings.checkbox.tie_selection) {\n\t\t\t\t\tthis.uncheck_all();\n\t\t\t\t\tvar _this = this;\n\t\t\t\t\t$.each(state.checkbox, function (i, v) {\n\t\t\t\t\t\t_this.check_node(v);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tdelete state.checkbox;\n\t\t\t\tthis.set_state(state, callback);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn res;\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tif(this.settings.checkbox.tie_selection) {\n\t\t\t\tthis._data.checkbox.selected = [];\n\t\t\t}\n\t\t\treturn parent.refresh.apply(this, arguments);\n\t\t};\n\t};\n\n\t// include the checkbox plugin by default\n\t// $.jstree.defaults.plugins.push(\"checkbox\");\n\n\n/**\n * ### Conditionalselect plugin\n *\n * This plugin allows defining a callback to allow or deny node selection by user input (activate node method).\n */\n\n\t/**\n\t * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`.\n\t * @name $.jstree.defaults.checkbox.visible\n\t * @plugin checkbox\n\t */\n\t$.jstree.defaults.conditionalselect = function () { return true; };\n\t$.jstree.plugins.conditionalselect = function (options, parent) {\n\t\t// own function\n\t\tthis.activate_node = function (obj, e) {\n\t\t\tif(this.settings.conditionalselect.call(this, this.get_node(obj), e)) {\n\t\t\t\treturn parent.activate_node.call(this, obj, e);\n\t\t\t}\n\t\t};\n\t};\n\n\n/**\n * ### Contextmenu plugin\n *\n * Shows a context menu when a node is right-clicked.\n */\n\n\t/**\n\t * stores all defaults for the contextmenu plugin\n\t * @name $.jstree.defaults.contextmenu\n\t * @plugin contextmenu\n\t */\n\t$.jstree.defaults.contextmenu = {\n\t\t/**\n\t\t * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`.\n\t\t * @name $.jstree.defaults.contextmenu.select_node\n\t\t * @plugin contextmenu\n\t\t */\n\t\tselect_node : true,\n\t\t/**\n\t\t * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used.\n\t\t * @name $.jstree.defaults.contextmenu.show_at_node\n\t\t * @plugin contextmenu\n\t\t */\n\t\tshow_at_node : true,\n\t\t/**\n\t\t * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too).\n\t\t *\n\t\t * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu.\n\t\t *\n\t\t * * `separator_before` - a boolean indicating if there should be a separator before this item\n\t\t * * `separator_after` - a boolean indicating if there should be a separator after this item\n\t\t * * `_disabled` - a boolean indicating if this action should be disabled\n\t\t * * `label` - a string - the name of the action (could be a function returning a string)\n\t\t * * `title` - a string - an optional tooltip for the item\n\t\t * * `action` - a function to be executed if this item is chosen, the function will receive \n\t\t * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class\n\t\t * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2)\n\t\t * * `shortcut_label` - shortcut label (like for example `F2` for rename)\n\t\t * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered\n\t\t *\n\t\t * @name $.jstree.defaults.contextmenu.items\n\t\t * @plugin contextmenu\n\t\t */\n\t\titems : function (o, cb) { // Could be an object directly\n\t\t\treturn {\n\t\t\t\t\"create\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"separator_after\"\t: true,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"create_node\", data.reference, {}, \"last\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Create\",\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tinst.create_node(obj, {}, \"last\", function (new_node) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tinst.edit(new_node);\n\t\t\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\t\t\tsetTimeout(function () { inst.edit(new_node); },0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"rename\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"rename_node\", data.reference, this.get_parent(data.reference), \"\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Rename\",\n\t\t\t\t\t/*!\n\t\t\t\t\t\"shortcut\"\t\t\t: 113,\n\t\t\t\t\t\"shortcut_label\"\t: 'F2',\n\t\t\t\t\t\"icon\"\t\t\t\t: \"glyphicon glyphicon-leaf\",\n\t\t\t\t\t*/\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tinst.edit(obj);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"remove\" : {\n\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"_disabled\"\t\t\t: false, //(this.check(\"delete_node\", data.reference, this.get_parent(data.reference), \"\")),\n\t\t\t\t\t\"label\"\t\t\t\t: \"Delete\",\n\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\tinst.delete_node(inst.get_selected());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tinst.delete_node(obj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"ccp\" : {\n\t\t\t\t\t\"separator_before\"\t: true,\n\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\"label\"\t\t\t\t: \"Edit\",\n\t\t\t\t\t\"action\"\t\t\t: false,\n\t\t\t\t\t\"submenu\" : {\n\t\t\t\t\t\t\"cut\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Cut\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\t\t\tinst.cut(inst.get_top_selected());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinst.cut(obj);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"copy\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Copy\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tif(inst.is_selected(obj)) {\n\t\t\t\t\t\t\t\t\tinst.copy(inst.get_top_selected());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinst.copy(obj);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"paste\" : {\n\t\t\t\t\t\t\t\"separator_before\"\t: false,\n\t\t\t\t\t\t\t\"icon\"\t\t\t\t: false,\n\t\t\t\t\t\t\t\"_disabled\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\treturn !$.jstree.reference(data.reference).can_paste();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"separator_after\"\t: false,\n\t\t\t\t\t\t\t\"label\"\t\t\t\t: \"Paste\",\n\t\t\t\t\t\t\t\"action\"\t\t\t: function (data) {\n\t\t\t\t\t\t\t\tvar inst = $.jstree.reference(data.reference),\n\t\t\t\t\t\t\t\t\tobj = inst.get_node(data.reference);\n\t\t\t\t\t\t\t\tinst.paste(obj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t};\n\n\t$.jstree.plugins.contextmenu = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tvar last_ts = 0, cto = null, ex, ey;\n\t\t\tthis.element\n\t\t\t\t.on(\"init.jstree loading.jstree ready.jstree\", $.proxy(function () {\n\t\t\t\t\t\tthis.get_container_ul().addClass('jstree-contextmenu');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"contextmenu.jstree\", \".jstree-anchor\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif (e.target.tagName.toLowerCase() === 'input') {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tlast_ts = e.ctrlKey ? +new Date() : 0;\n\t\t\t\t\t\tif(data || cto) {\n\t\t\t\t\t\t\tlast_ts = (+new Date()) + 10000;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(cto) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!this.is_loading(e.currentTarget)) {\n\t\t\t\t\t\t\tthis.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"click.jstree\", \".jstree-anchor\", $.proxy(function (e) {\n\t\t\t\t\t\tif(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click\n\t\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_ts = 0;\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"touchstart.jstree\", \".jstree-anchor\", function (e) {\n\t\t\t\t\t\tif(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tex = e.originalEvent.changedTouches[0].clientX;\n\t\t\t\t\t\tey = e.originalEvent.changedTouches[0].clientY;\n\t\t\t\t\t\tcto = setTimeout(function () {\n\t\t\t\t\t\t\t$(e.currentTarget).trigger('contextmenu', true);\n\t\t\t\t\t\t}, 750);\n\t\t\t\t\t})\n\t\t\t\t.on('touchmove.vakata.jstree', function (e) {\n\t\t\t\t\t\tif(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on('touchend.vakata.jstree', function (e) {\n\t\t\t\t\t\tif(cto) {\n\t\t\t\t\t\t\tclearTimeout(cto);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t/*!\n\t\t\tif(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) {\n\t\t\t\tvar el = null, tm = null;\n\t\t\t\tthis.element\n\t\t\t\t\t.on(\"touchstart\", \".jstree-anchor\", function (e) {\n\t\t\t\t\t\tel = e.currentTarget;\n\t\t\t\t\t\ttm = +new Date();\n\t\t\t\t\t\t$(document).one(\"touchend\", function (e) {\n\t\t\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset);\n\t\t\t\t\t\t\te.currentTarget = e.target;\n\t\t\t\t\t\t\ttm = ((+(new Date())) - tm);\n\t\t\t\t\t\t\tif(e.target === el && tm > 600 && tm < 1000) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$(el).trigger('contextmenu', e);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tel = null;\n\t\t\t\t\t\t\ttm = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t*/\n\t\t\t$(document).on(\"context_hide.vakata.jstree\", $.proxy(function (e, data) {\n\t\t\t\tthis._data.contextmenu.visible = false;\n\t\t\t\t$(data.reference).removeClass('jstree-context');\n\t\t\t}, this));\n\t\t};\n\t\tthis.teardown = function () {\n\t\t\tif(this._data.contextmenu.visible) {\n\t\t\t\t$.vakata.context.hide();\n\t\t\t}\n\t\t\tparent.teardown.call(this);\n\t\t};\n\n\t\t/**\n\t\t * prepare and show the context menu for a node\n\t\t * @name show_contextmenu(obj [, x, y])\n\t\t * @param {mixed} obj the node\n\t\t * @param {Number} x the x-coordinate relative to the document to show the menu at\n\t\t * @param {Number} y the y-coordinate relative to the document to show the menu at\n\t\t * @param {Object} e the event if available that triggered the contextmenu\n\t\t * @plugin contextmenu\n\t\t * @trigger show_contextmenu.jstree\n\t\t */\n\t\tthis.show_contextmenu = function (obj, x, y, e) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj || obj.id === $.jstree.root) { return false; }\n\t\t\tvar s = this.settings.contextmenu,\n\t\t\t\td = this.get_node(obj, true),\n\t\t\t\ta = d.children(\".jstree-anchor\"),\n\t\t\t\to = false,\n\t\t\t\ti = false;\n\t\t\tif(s.show_at_node || x === undefined || y === undefined) {\n\t\t\t\to = a.offset();\n\t\t\t\tx = o.left;\n\t\t\t\ty = o.top + this._data.core.li_height;\n\t\t\t}\n\t\t\tif(this.settings.contextmenu.select_node && !this.is_selected(obj)) {\n\t\t\t\tthis.activate_node(obj, e);\n\t\t\t}\n\n\t\t\ti = s.items;\n\t\t\tif($.isFunction(i)) {\n\t\t\t\ti = i.call(this, obj, $.proxy(function (i) {\n\t\t\t\t\tthis._show_contextmenu(obj, x, y, i);\n\t\t\t\t}, this));\n\t\t\t}\n\t\t\tif($.isPlainObject(i)) {\n\t\t\t\tthis._show_contextmenu(obj, x, y, i);\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t * show the prepared context menu for a node\n\t\t * @name _show_contextmenu(obj, x, y, i)\n\t\t * @param {mixed} obj the node\n\t\t * @param {Number} x the x-coordinate relative to the document to show the menu at\n\t\t * @param {Number} y the y-coordinate relative to the document to show the menu at\n\t\t * @param {Number} i the object of items to show\n\t\t * @plugin contextmenu\n\t\t * @trigger show_contextmenu.jstree\n\t\t * @private\n\t\t */\n\t\tthis._show_contextmenu = function (obj, x, y, i) {\n\t\t\tvar d = this.get_node(obj, true),\n\t\t\t\ta = d.children(\".jstree-anchor\");\n\t\t\t$(document).one(\"context_show.vakata.jstree\", $.proxy(function (e, data) {\n\t\t\t\tvar cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu';\n\t\t\t\t$(data.element).addClass(cls);\n\t\t\t\ta.addClass('jstree-context');\n\t\t\t}, this));\n\t\t\tthis._data.contextmenu.visible = true;\n\t\t\t$.vakata.context.show(a, { 'x' : x, 'y' : y }, i);\n\t\t\t/**\n\t\t\t * triggered when the contextmenu is shown for a node\n\t\t\t * @event\n\t\t\t * @name show_contextmenu.jstree\n\t\t\t * @param {Object} node the node\n\t\t\t * @param {Number} x the x-coordinate of the menu relative to the document\n\t\t\t * @param {Number} y the y-coordinate of the menu relative to the document\n\t\t\t * @plugin contextmenu\n\t\t\t */\n\t\t\tthis.trigger('show_contextmenu', { \"node\" : obj, \"x\" : x, \"y\" : y });\n\t\t};\n\t};\n\n\t// contextmenu helper\n\t(function ($) {\n\t\tvar right_to_left = false,\n\t\t\tvakata_context = {\n\t\t\t\telement\t\t: false,\n\t\t\t\treference\t: false,\n\t\t\t\tposition_x\t: 0,\n\t\t\t\tposition_y\t: 0,\n\t\t\t\titems\t\t: [],\n\t\t\t\thtml\t\t: \"\",\n\t\t\t\tis_visible\t: false\n\t\t\t};\n\n\t\t$.vakata.context = {\n\t\t\tsettings : {\n\t\t\t\thide_onmouseleave\t: 0,\n\t\t\t\ticons\t\t\t\t: true\n\t\t\t},\n\t\t\t_trigger : function (event_name) {\n\t\t\t\t$(document).triggerHandler(\"context_\" + event_name + \".vakata\", {\n\t\t\t\t\t\"reference\"\t: vakata_context.reference,\n\t\t\t\t\t\"element\"\t: vakata_context.element,\n\t\t\t\t\t\"position\"\t: {\n\t\t\t\t\t\t\"x\" : vakata_context.position_x,\n\t\t\t\t\t\t\"y\" : vakata_context.position_y\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t_execute : function (i) {\n\t\t\t\ti = vakata_context.items[i];\n\t\t\t\treturn i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ \"item\" : i, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element }))) && i.action ? i.action.call(null, {\n\t\t\t\t\t\t\t\"item\"\t\t: i,\n\t\t\t\t\t\t\t\"reference\"\t: vakata_context.reference,\n\t\t\t\t\t\t\t\"element\"\t: vakata_context.element,\n\t\t\t\t\t\t\t\"position\"\t: {\n\t\t\t\t\t\t\t\t\"x\" : vakata_context.position_x,\n\t\t\t\t\t\t\t\t\"y\" : vakata_context.position_y\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) : false;\n\t\t\t},\n\t\t\t_parse : function (o, is_callback) {\n\t\t\t\tif(!o) { return false; }\n\t\t\t\tif(!is_callback) {\n\t\t\t\t\tvakata_context.html\t\t= \"\";\n\t\t\t\t\tvakata_context.items\t= [];\n\t\t\t\t}\n\t\t\t\tvar str = \"\",\n\t\t\t\t\tsep = false,\n\t\t\t\t\ttmp;\n\n\t\t\t\tif(is_callback) { str += \"<\"+\"ul>\"; }\n\t\t\t\t$.each(o, function (i, val) {\n\t\t\t\t\tif(!val) { return true; }\n\t\t\t\t\tvakata_context.items.push(val);\n\t\t\t\t\tif(!sep && val.separator_before) {\n\t\t\t\t\t\tstr += \"<\"+\"li class='vakata-context-separator'><\"+\"a href='#' \" + ($.vakata.context.settings.icons ? '' : 'style=\"margin-left:0px;\"') + \">&#160;<\"+\"/a><\"+\"/li>\";\n\t\t\t\t\t}\n\t\t\t\t\tsep = false;\n\t\t\t\t\tstr += \"<\"+\"li class='\" + (val._class || \"\") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ \"item\" : val, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element })) ? \" vakata-contextmenu-disabled \" : \"\") + \"' \"+(val.shortcut?\" data-shortcut='\"+val.shortcut+\"' \":'')+\">\";\n\t\t\t\t\tstr += \"<\"+\"a href='#' rel='\" + (vakata_context.items.length - 1) + \"' \" + (val.title ? \"title='\" + val.title + \"'\" : \"\") + \">\";\n\t\t\t\t\tif($.vakata.context.settings.icons) {\n\t\t\t\t\t\tstr += \"<\"+\"i \";\n\t\t\t\t\t\tif(val.icon) {\n\t\t\t\t\t\t\tif(val.icon.indexOf(\"/\") !== -1 || val.icon.indexOf(\".\") !== -1) { str += \" style='background:url(\\\"\" + val.icon + \"\\\") center center no-repeat' \"; }\n\t\t\t\t\t\t\telse { str += \" class='\" + val.icon + \"' \"; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstr += \"><\"+\"/i><\"+\"span class='vakata-contextmenu-sep'>&#160;<\"+\"/span>\";\n\t\t\t\t\t}\n\t\t\t\t\tstr += ($.isFunction(val.label) ? val.label({ \"item\" : i, \"reference\" : vakata_context.reference, \"element\" : vakata_context.element }) : val.label) + (val.shortcut?' <span class=\"vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+val.shortcut+'\">'+ (val.shortcut_label || '') +'</span>':'') + \"<\"+\"/a>\";\n\t\t\t\t\tif(val.submenu) {\n\t\t\t\t\t\ttmp = $.vakata.context._parse(val.submenu, true);\n\t\t\t\t\t\tif(tmp) { str += tmp; }\n\t\t\t\t\t}\n\t\t\t\t\tstr += \"<\"+\"/li>\";\n\t\t\t\t\tif(val.separator_after) {\n\t\t\t\t\t\tstr += \"<\"+\"li class='vakata-context-separator'><\"+\"a href='#' \" + ($.vakata.context.settings.icons ? '' : 'style=\"margin-left:0px;\"') + \">&#160;<\"+\"/a><\"+\"/li>\";\n\t\t\t\t\t\tsep = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tstr  = str.replace(/<li class\\='vakata-context-separator'\\><\\/li\\>$/,\"\");\n\t\t\t\tif(is_callback) { str += \"</ul>\"; }\n\t\t\t\t/**\n\t\t\t\t * triggered on the document when the contextmenu is parsed (HTML is built)\n\t\t\t\t * @event\n\t\t\t\t * @plugin contextmenu\n\t\t\t\t * @name context_parse.vakata\n\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t */\n\t\t\t\tif(!is_callback) { vakata_context.html = str; $.vakata.context._trigger(\"parse\"); }\n\t\t\t\treturn str.length > 10 ? str : false;\n\t\t\t},\n\t\t\t_show_submenu : function (o) {\n\t\t\t\to = $(o);\n\t\t\t\tif(!o.length || !o.children(\"ul\").length) { return; }\n\t\t\t\tvar e = o.children(\"ul\"),\n\t\t\t\t\txl = o.offset().left,\n\t\t\t\t\tx = xl + o.outerWidth(),\n\t\t\t\t\ty = o.offset().top,\n\t\t\t\t\tw = e.width(),\n\t\t\t\t\th = e.height(),\n\t\t\t\t\tdw = $(window).width() + $(window).scrollLeft(),\n\t\t\t\t\tdh = $(window).height() + $(window).scrollTop();\n\t\t\t\t// може да се спести е една проверка - дали няма някой от класовете вече нагоре\n\t\t\t\tif(right_to_left) {\n\t\t\t\t\to[x - (w + 10 + o.outerWidth()) < 0 ? \"addClass\" : \"removeClass\"](\"vakata-context-left\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to[x + w > dw  && xl > dw - x ? \"addClass\" : \"removeClass\"](\"vakata-context-right\");\n\t\t\t\t}\n\t\t\t\tif(y + h + 10 > dh) {\n\t\t\t\t\te.css(\"bottom\",\"-1px\");\n\t\t\t\t}\n\n\t\t\t\t//if does not fit - stick it to the side\n\t\t\t\tif (o.hasClass('vakata-context-right')) {\n\t\t\t\t\tif (xl < w) {\n\t\t\t\t\t\te.css(\"margin-right\", xl - w);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (dw - x < w) {\n\t\t\t\t\t\te.css(\"margin-left\", dw - x - w);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\te.show();\n\t\t\t},\n\t\t\tshow : function (reference, position, data) {\n\t\t\t\tvar o, e, x, y, w, h, dw, dh, cond = true;\n\t\t\t\tif(vakata_context.element && vakata_context.element.length) {\n\t\t\t\t\tvakata_context.element.width('');\n\t\t\t\t}\n\t\t\t\tswitch(cond) {\n\t\t\t\t\tcase (!position && !reference):\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tcase (!!position && !!reference):\n\t\t\t\t\t\tvakata_context.reference\t= reference;\n\t\t\t\t\t\tvakata_context.position_x\t= position.x;\n\t\t\t\t\t\tvakata_context.position_y\t= position.y;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase (!position && !!reference):\n\t\t\t\t\t\tvakata_context.reference\t= reference;\n\t\t\t\t\t\to = reference.offset();\n\t\t\t\t\t\tvakata_context.position_x\t= o.left + reference.outerHeight();\n\t\t\t\t\t\tvakata_context.position_y\t= o.top;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase (!!position && !reference):\n\t\t\t\t\t\tvakata_context.position_x\t= position.x;\n\t\t\t\t\t\tvakata_context.position_y\t= position.y;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!!reference && !data && $(reference).data('vakata_contextmenu')) {\n\t\t\t\t\tdata = $(reference).data('vakata_contextmenu');\n\t\t\t\t}\n\t\t\t\tif($.vakata.context._parse(data)) {\n\t\t\t\t\tvakata_context.element.html(vakata_context.html);\n\t\t\t\t}\n\t\t\t\tif(vakata_context.items.length) {\n\t\t\t\t\tvakata_context.element.appendTo(document.body);\n\t\t\t\t\te = vakata_context.element;\n\t\t\t\t\tx = vakata_context.position_x;\n\t\t\t\t\ty = vakata_context.position_y;\n\t\t\t\t\tw = e.width();\n\t\t\t\t\th = e.height();\n\t\t\t\t\tdw = $(window).width() + $(window).scrollLeft();\n\t\t\t\t\tdh = $(window).height() + $(window).scrollTop();\n\t\t\t\t\tif(right_to_left) {\n\t\t\t\t\t\tx -= (e.outerWidth() - $(reference).outerWidth());\n\t\t\t\t\t\tif(x < $(window).scrollLeft() + 20) {\n\t\t\t\t\t\t\tx = $(window).scrollLeft() + 20;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(x + w + 20 > dw) {\n\t\t\t\t\t\tx = dw - (w + 20);\n\t\t\t\t\t}\n\t\t\t\t\tif(y + h + 20 > dh) {\n\t\t\t\t\t\ty = dh - (h + 20);\n\t\t\t\t\t}\n\n\t\t\t\t\tvakata_context.element\n\t\t\t\t\t\t.css({ \"left\" : x, \"top\" : y })\n\t\t\t\t\t\t.show()\n\t\t\t\t\t\t.find('a').first().focus().parent().addClass(\"vakata-context-hover\");\n\t\t\t\t\tvakata_context.is_visible = true;\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when the contextmenu is shown\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin contextmenu\n\t\t\t\t\t * @name context_show.vakata\n\t\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.context._trigger(\"show\");\n\t\t\t\t}\n\t\t\t},\n\t\t\thide : function () {\n\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\tvakata_context.element.hide().find(\"ul\").hide().end().find(':focus').blur().end().detach();\n\t\t\t\t\tvakata_context.is_visible = false;\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when the contextmenu is hidden\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin contextmenu\n\t\t\t\t\t * @name context_hide.vakata\n\t\t\t\t\t * @param {jQuery} reference the element that was right clicked\n\t\t\t\t\t * @param {jQuery} element the DOM element of the menu itself\n\t\t\t\t\t * @param {Object} position the x & y coordinates of the menu\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.context._trigger(\"hide\");\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\t$(function () {\n\t\t\tright_to_left = $(document.body).css(\"direction\") === \"rtl\";\n\t\t\tvar to = false;\n\n\t\t\tvakata_context.element = $(\"<ul class='vakata-context'></ul>\");\n\t\t\tvakata_context.element\n\t\t\t\t.on(\"mouseenter\", \"li\", function (e) {\n\t\t\t\t\te.stopImmediatePropagation();\n\n\t\t\t\t\tif($.contains(this, e.relatedTarget)) {\n\t\t\t\t\t\t// премахнато заради delegate mouseleave по-долу\n\t\t\t\t\t\t// $(this).find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(to) { clearTimeout(to); }\n\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").end();\n\n\t\t\t\t\t$(this)\n\t\t\t\t\t\t.siblings().find(\"ul\").hide().end().end()\n\t\t\t\t\t\t.parentsUntil(\".vakata-context\", \"li\").addBack().addClass(\"vakata-context-hover\");\n\t\t\t\t\t$.vakata.context._show_submenu(this);\n\t\t\t\t})\n\t\t\t\t// тестово - дали не натоварва?\n\t\t\t\t.on(\"mouseleave\", \"li\", function (e) {\n\t\t\t\t\tif($.contains(this, e.relatedTarget)) { return; }\n\t\t\t\t\t$(this).find(\".vakata-context-hover\").addBack().removeClass(\"vakata-context-hover\");\n\t\t\t\t})\n\t\t\t\t.on(\"mouseleave\", function (e) {\n\t\t\t\t\t$(this).find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\");\n\t\t\t\t\tif($.vakata.context.settings.hide_onmouseleave) {\n\t\t\t\t\t\tto = setTimeout(\n\t\t\t\t\t\t\t(function (t) {\n\t\t\t\t\t\t\t\treturn function () { $.vakata.context.hide(); };\n\t\t\t\t\t\t\t}(this)), $.vakata.context.settings.hide_onmouseleave);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on(\"click\", \"a\", function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t//})\n\t\t\t\t//.on(\"mouseup\", \"a\", function (e) {\n\t\t\t\t\tif(!$(this).blur().parent().hasClass(\"vakata-context-disabled\") && $.vakata.context._execute($(this).attr(\"rel\")) !== false) {\n\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on('keydown', 'a', function (e) {\n\t\t\t\t\t\tvar o = null;\n\t\t\t\t\t\tswitch(e.which) {\n\t\t\t\t\t\t\tcase 13:\n\t\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\t\te.type = \"click\";\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t$(e.currentTarget).trigger(e);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 37:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").last().closest(\"li\").first().find(\"ul\").hide().find(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").end().end().children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 38:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\to = vakata_context.element.find(\"ul:visible\").addBack().last().children(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").prevAll(\"li:not(.vakata-context-separator)\").first();\n\t\t\t\t\t\t\t\t\tif(!o.length) { o = vakata_context.element.find(\"ul:visible\").addBack().last().children(\"li:not(.vakata-context-separator)\").last(); }\n\t\t\t\t\t\t\t\t\to.addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 39:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\tvakata_context.element.find(\".vakata-context-hover\").last().children(\"ul\").show().children(\"li:not(.vakata-context-separator)\").removeClass(\"vakata-context-hover\").first().addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 40:\n\t\t\t\t\t\t\t\tif(vakata_context.is_visible) {\n\t\t\t\t\t\t\t\t\to = vakata_context.element.find(\"ul:visible\").addBack().last().children(\".vakata-context-hover\").removeClass(\"vakata-context-hover\").nextAll(\"li:not(.vakata-context-separator)\").first();\n\t\t\t\t\t\t\t\t\tif(!o.length) { o = vakata_context.element.find(\"ul:visible\").addBack().last().children(\"li:not(.vakata-context-separator)\").first(); }\n\t\t\t\t\t\t\t\t\to.addClass(\"vakata-context-hover\").children('a').focus();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 27:\n\t\t\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t//console.log(e.which);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t.on('keydown', function (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tvar a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent();\n\t\t\t\t\tif(a.parent().not('.vakata-context-disabled')) {\n\t\t\t\t\t\ta.click();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t$(document)\n\t\t\t\t.on(\"mousedown.vakata.jstree\", function (e) {\n\t\t\t\t\tif(vakata_context.is_visible && vakata_context.element[0] !== e.target  && !$.contains(vakata_context.element[0], e.target)) {\n\t\t\t\t\t\t$.vakata.context.hide();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.on(\"context_show.vakata.jstree\", function (e, data) {\n\t\t\t\t\tvakata_context.element.find(\"li:has(ul)\").children(\"a\").addClass(\"vakata-context-parent\");\n\t\t\t\t\tif(right_to_left) {\n\t\t\t\t\t\tvakata_context.element.addClass(\"vakata-context-rtl\").css(\"direction\", \"rtl\");\n\t\t\t\t\t}\n\t\t\t\t\t// also apply a RTL class?\n\t\t\t\t\tvakata_context.element.find(\"ul\").hide().end();\n\t\t\t\t});\n\t\t});\n\t}($));\n\t// $.jstree.defaults.plugins.push(\"contextmenu\");\n\n\n/**\n * ### Drag'n'drop plugin\n *\n * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations.\n */\n\n\t/**\n\t * stores all defaults for the drag'n'drop plugin\n\t * @name $.jstree.defaults.dnd\n\t * @plugin dnd\n\t */\n\t$.jstree.defaults.dnd = {\n\t\t/**\n\t\t * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`.\n\t\t * @name $.jstree.defaults.dnd.copy\n\t\t * @plugin dnd\n\t\t */\n\t\tcopy : true,\n\t\t/**\n\t\t * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`.\n\t\t * @name $.jstree.defaults.dnd.open_timeout\n\t\t * @plugin dnd\n\t\t */\n\t\topen_timeout : 500,\n\t\t/**\n\t\t * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging\n\t\t * @name $.jstree.defaults.dnd.is_draggable\n\t\t * @plugin dnd\n\t\t */\n\t\tis_draggable : true,\n\t\t/**\n\t\t * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true`\n\t\t * @name $.jstree.defaults.dnd.check_while_dragging\n\t\t * @plugin dnd\n\t\t */\n\t\tcheck_while_dragging : true,\n\t\t/**\n\t\t * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false`\n\t\t * @name $.jstree.defaults.dnd.always_copy\n\t\t * @plugin dnd\n\t\t */\n\t\talways_copy : false,\n\t\t/**\n\t\t * when dropping a node \"inside\", this setting indicates the position the node should go to - it can be an integer or a string: \"first\" (same as 0) or \"last\", default is `0`\n\t\t * @name $.jstree.defaults.dnd.inside_pos\n\t\t * @plugin dnd\n\t\t */\n\t\tinside_pos : 0,\n\t\t/**\n\t\t * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node\n\t\t * @name $.jstree.defaults.dnd.drag_selection\n\t\t * @plugin dnd\n\t\t */\n\t\tdrag_selection : true,\n\t\t/**\n\t\t * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string \"selected\" which means only selected nodes can be dragged on touch devices.\n\t\t * @name $.jstree.defaults.dnd.touch\n\t\t * @plugin dnd\n\t\t */\n\t\ttouch : true,\n\t\t/**\n\t\t * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target.\n\t\t * @name $.jstree.defaults.dnd.large_drop_target\n\t\t * @plugin dnd\n\t\t */\n\t\tlarge_drop_target : false,\n\t\t/**\n\t\t * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to \"selected\".\n\t\t * @name $.jstree.defaults.dnd.large_drag_target\n\t\t * @plugin dnd\n\t\t */\n\t\tlarge_drag_target : false,\n\t\t/**\n\t\t * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls.\n\t\t * @reference http://caniuse.com/#feat=dragndrop\n\t\t * @name $.jstree.defaults.dnd.use_html5\n\t\t * @plugin dnd\n\t\t */\n\t\tuse_html5: false\n\t};\n\tvar drg, elm;\n\t// TODO: now check works by checking for each node individually, how about max_children, unique, etc?\n\t$.jstree.plugins.dnd = function (options, parent) {\n\t\tthis.init = function (el, options) {\n\t\t\tparent.init.call(this, el, options);\n\t\t\tthis.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span'));\n\t\t};\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis.element\n\t\t\t\t.on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t\tif(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(e.type === \"touchstart\" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar obj = this.get_node(e.target),\n\t\t\t\t\t\t\tmlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1,\n\t\t\t\t\t\t\ttxt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget));\n\t\t\t\t\t\tif(this.settings.core.force_text) {\n\t\t\t\t\t\t\ttxt = $.vakata.html.escape(txt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === \"touchstart\" || e.type === \"dragstart\") &&\n\t\t\t\t\t\t\t(this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e)))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tdrg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] };\n\t\t\t\t\t\t\telm = e.currentTarget;\n\t\t\t\t\t\t\tif (this.settings.dnd.use_html5) {\n\t\t\t\t\t\t\t\t$.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.element.trigger('mousedown.jstree');\n\t\t\t\t\t\t\t\treturn $.vakata.dnd.start(e, drg, '<div id=\"jstree-dnd\" class=\"jstree-' + this.get_theme() + ' jstree-' + this.get_theme() + '-' + this.get_theme_variant() + ' ' + ( this.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ) + '\"><i class=\"jstree-icon jstree-er\"></i>' + txt + '<ins class=\"jstree-copy\" style=\"display:none;\">+</ins></div>');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t\tif (this.settings.dnd.use_html5) {\n\t\t\t\tthis.element\n\t\t\t\t\t.on('dragover.jstree', function (e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t})\n\t\t\t\t\t//.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) {\n\t\t\t\t\t//\t\te.preventDefault();\n\t\t\t\t\t//\t\t$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\t//\t\treturn false;\n\t\t\t\t\t//\t}, this))\n\t\t\t\t\t.on('drop.jstree', $.proxy(function (e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}, this));\n\t\t\t}\n\t\t};\n\t\tthis.redraw_node = function(obj, deep, callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif (obj && this.settings.dnd.use_html5) {\n\t\t\t\tif (this.settings.dnd.large_drag_target) {\n\t\t\t\t\tobj.setAttribute('draggable', true);\n\t\t\t\t} else {\n\t\t\t\t\tvar i, j, tmp = null;\n\t\t\t\t\tfor(i = 0, j = obj.childNodes.length; i < j; i++) {\n\t\t\t\t\t\tif(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf(\"jstree-anchor\") !== -1) {\n\t\t\t\t\t\t\ttmp = obj.childNodes[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(tmp) {\n\t\t\t\t\t\ttmp.setAttribute('draggable', true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t};\n\n\t$(function() {\n\t\t// bind only once for all instances\n\t\tvar lastmv = false,\n\t\t\tlaster = false,\n\t\t\tlastev = false,\n\t\t\topento = false,\n\t\t\tmarker = $('<div id=\"jstree-marker\">&#160;</div>').hide(); //.appendTo('body');\n\n\t\t$(document)\n\t\t\t.on('dragover.vakata.jstree', function (e) {\n\t\t\t\tif (elm) {\n\t\t\t\t\t$.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('drop.vakata.jstree', function (e) {\n\t\t\t\tif (elm) {\n\t\t\t\t\t$.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg });\n\t\t\t\t\telm = null;\n\t\t\t\t\tdrg = null;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('dnd_start.vakata.jstree', function (e, data) {\n\t\t\t\tlastmv = false;\n\t\t\t\tlastev = false;\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.appendTo(document.body); //.show();\n\t\t\t})\n\t\t\t.on('dnd_move.vakata.jstree', function (e, data) {\n\t\t\t\tvar isDifferentNode = data.event.target !== lastev.target;\n\t\t\t\tif(opento) {\n\t\t\t\t\tif (!data.event || data.event.type !== 'dragover' || isDifferentNode) {\n\t\t\t\t\t\tclearTimeout(opento);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\n\t\t\t\t// if we are hovering the marker image do nothing (can happen on \"inside\" drags)\n\t\t\t\tif(data.event.target.id && data.event.target.id === 'jstree-marker') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlastev = data.event;\n\n\t\t\t\tvar ins = $.jstree.reference(data.event.target),\n\t\t\t\t\tref = false,\n\t\t\t\t\toff = false,\n\t\t\t\t\trel = false,\n\t\t\t\t\ttmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn;\n\t\t\t\t// if we are over an instance\n\t\t\t\tif(ins && ins._data && ins._data.dnd) {\n\t\t\t\t\tmarker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ));\n\t\t\t\t\tis_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)));\n\t\t\t\t\tdata.helper\n\t\t\t\t\t\t.children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ))\n\t\t\t\t\t\t.find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ]();\n\n\t\t\t\t\t// if are hovering the container itself add a new root node\n\t\t\t\t\t//console.log(data.event);\n\t\t\t\t\tif( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) {\n\t\t\t\t\t\tok = true;\n\t\t\t\t\t\tfor(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {\n\t\t\t\t\t\t\tok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? \"copy_node\" : \"move_node\"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) });\n\t\t\t\t\t\t\tif(!ok) { break; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ok) {\n\t\t\t\t\t\t\tlastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' };\n\t\t\t\t\t\t\tmarker.hide();\n\t\t\t\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');\n\t\t\t\t\t\t\tif (data.event.originalEvent && data.event.originalEvent.dataTransfer) {\n\t\t\t\t\t\t\t\tdata.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// if we are hovering a tree node\n\t\t\t\t\t\tref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor');\n\t\t\t\t\t\tif(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) {\n\t\t\t\t\t\t\toff = ref.offset();\n\t\t\t\t\t\t\trel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top;\n\t\t\t\t\t\t\th = ref.outerHeight();\n\t\t\t\t\t\t\tif(rel < h / 3) {\n\t\t\t\t\t\t\t\to = ['b', 'i', 'a'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if(rel > h - h / 3) {\n\t\t\t\t\t\t\t\to = ['a', 'i', 'b'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\to = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a'];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$.each(o, function (j, v) {\n\t\t\t\t\t\t\t\tswitch(v) {\n\t\t\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\t\t\t\tl = off.left - 6;\n\t\t\t\t\t\t\t\t\t\tt = off.top;\n\t\t\t\t\t\t\t\t\t\tp = ins.get_parent(ref);\n\t\t\t\t\t\t\t\t\t\ti = ref.parent().index();\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\t\t\t\tip = ins.settings.dnd.inside_pos;\n\t\t\t\t\t\t\t\t\t\ttm = ins.get_node(ref.parent());\n\t\t\t\t\t\t\t\t\t\tl = off.left - 2;\n\t\t\t\t\t\t\t\t\t\tt = off.top + h / 2 + 1;\n\t\t\t\t\t\t\t\t\t\tp = tm.id;\n\t\t\t\t\t\t\t\t\t\ti = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length));\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'a':\n\t\t\t\t\t\t\t\t\t\tl = off.left - 6;\n\t\t\t\t\t\t\t\t\t\tt = off.top + h;\n\t\t\t\t\t\t\t\t\t\tp = ins.get_parent(ref);\n\t\t\t\t\t\t\t\t\t\ti = ref.parent().index() + 1;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t\t\tfor(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) {\n\t\t\t\t\t\t\t\t\top = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? \"copy_node\" : \"move_node\";\n\t\t\t\t\t\t\t\t\tps = i;\n\t\t\t\t\t\t\t\t\tif(op === \"move_node\" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) {\n\t\t\t\t\t\t\t\t\t\tpr = ins.get_node(p);\n\t\t\t\t\t\t\t\t\t\tif(ps > $.inArray(data.data.nodes[t1], pr.children)) {\n\t\t\t\t\t\t\t\t\t\t\tps -= 1;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) );\n\t\t\t\t\t\t\t\t\tif(!ok) {\n\t\t\t\t\t\t\t\t\t\tif(ins && ins.last_error) { laster = ins.last_error(); }\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) {\n\t\t\t\t\t\t\t\t\tif (!data.event || data.event.type !== 'dragover' || isDifferentNode) {\n\t\t\t\t\t\t\t\t\t\tif (opento) { clearTimeout(opento); }\n\t\t\t\t\t\t\t\t\t\topento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(ok) {\n\t\t\t\t\t\t\t\t\tpn = ins.get_node(p, true);\n\t\t\t\t\t\t\t\t\tif (!pn.hasClass('.jstree-dnd-parent')) {\n\t\t\t\t\t\t\t\t\t\t$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');\n\t\t\t\t\t\t\t\t\t\tpn.addClass('jstree-dnd-parent');\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i };\n\t\t\t\t\t\t\t\t\tmarker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show();\n\t\t\t\t\t\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok');\n\t\t\t\t\t\t\t\t\tif (data.event.originalEvent && data.event.originalEvent.dataTransfer) {\n\t\t\t\t\t\t\t\t\t\tdata.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlaster = {};\n\t\t\t\t\t\t\t\t\to = true;\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif(o === true) { return; }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');\n\t\t\t\tlastmv = false;\n\t\t\t\tdata.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er');\n\t\t\t\tif (data.event.originalEvent && data.event.originalEvent.dataTransfer) {\n\t\t\t\t\t//data.event.originalEvent.dataTransfer.dropEffect = 'none';\n\t\t\t\t}\n\t\t\t\tmarker.hide();\n\t\t\t})\n\t\t\t.on('dnd_scroll.vakata.jstree', function (e, data) {\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.hide();\n\t\t\t\tlastmv = false;\n\t\t\t\tlastev = false;\n\t\t\t\tdata.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er');\n\t\t\t})\n\t\t\t.on('dnd_stop.vakata.jstree', function (e, data) {\n\t\t\t\t$('.jstree-dnd-parent').removeClass('jstree-dnd-parent');\n\t\t\t\tif(opento) { clearTimeout(opento); }\n\t\t\t\tif(!data || !data.data || !data.data.jstree) { return; }\n\t\t\t\tmarker.hide().detach();\n\t\t\t\tvar i, j, nodes = [];\n\t\t\t\tif(lastmv) {\n\t\t\t\t\tfor(i = 0, j = data.data.nodes.length; i < j; i++) {\n\t\t\t\t\t\tnodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i];\n\t\t\t\t\t}\n\t\t\t\t\tlastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ti = $(data.event.target).closest('.jstree');\n\t\t\t\t\tif(i.length && laster && laster.error && laster.error === 'check') {\n\t\t\t\t\t\ti = i.jstree(true);\n\t\t\t\t\t\tif(i) {\n\t\t\t\t\t\t\ti.settings.core.error.call(this, laster);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlastev = false;\n\t\t\t\tlastmv = false;\n\t\t\t})\n\t\t\t.on('keyup.jstree keydown.jstree', function (e, data) {\n\t\t\t\tdata = $.vakata.dnd._get();\n\t\t\t\tif(data && data.data && data.data.jstree) {\n\t\t\t\t\tif (e.type === \"keyup\" && e.which === 27) {\n\t\t\t\t\t\tif (opento) { clearTimeout(opento); }\n\t\t\t\t\t\tlastmv = false;\n\t\t\t\t\t\tlaster = false;\n\t\t\t\t\t\tlastev = false;\n\t\t\t\t\t\topento = false;\n\t\t\t\t\t\tmarker.hide().detach();\n\t\t\t\t\t\t$.vakata.dnd._clean();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ]();\n\t\t\t\t\t\tif(lastev) {\n\t\t\t\t\t\t\tlastev.metaKey = e.metaKey;\n\t\t\t\t\t\t\tlastev.ctrlKey = e.ctrlKey;\n\t\t\t\t\t\t\t$.vakata.dnd._trigger('move', lastev);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t});\n\n\t// helpers\n\t(function ($) {\n\t\t$.vakata.html = {\n\t\t\tdiv : $('<div />'),\n\t\t\tescape : function (str) {\n\t\t\t\treturn $.vakata.html.div.text(str).html();\n\t\t\t},\n\t\t\tstrip : function (str) {\n\t\t\t\treturn $.vakata.html.div.empty().append($.parseHTML(str)).text();\n\t\t\t}\n\t\t};\n\t\t// private variable\n\t\tvar vakata_dnd = {\n\t\t\telement\t: false,\n\t\t\ttarget\t: false,\n\t\t\tis_down\t: false,\n\t\t\tis_drag\t: false,\n\t\t\thelper\t: false,\n\t\t\thelper_w: 0,\n\t\t\tdata\t: false,\n\t\t\tinit_x\t: 0,\n\t\t\tinit_y\t: 0,\n\t\t\tscroll_l: 0,\n\t\t\tscroll_t: 0,\n\t\t\tscroll_e: false,\n\t\t\tscroll_i: false,\n\t\t\tis_touch: false\n\t\t};\n\t\t$.vakata.dnd = {\n\t\t\tsettings : {\n\t\t\t\tscroll_speed\t\t: 10,\n\t\t\t\tscroll_proximity\t: 20,\n\t\t\t\thelper_left\t\t\t: 5,\n\t\t\t\thelper_top\t\t\t: 10,\n\t\t\t\tthreshold\t\t\t: 5,\n\t\t\t\tthreshold_touch\t\t: 10\n\t\t\t},\n\t\t\t_trigger : function (event_name, e, data) {\n\t\t\t\tif (data === undefined) {\n\t\t\t\t\tdata = $.vakata.dnd._get();\n\t\t\t\t}\n\t\t\t\tdata.event = e;\n\t\t\t\t$(document).triggerHandler(\"dnd_\" + event_name + \".vakata\", data);\n\t\t\t},\n\t\t\t_get : function () {\n\t\t\t\treturn {\n\t\t\t\t\t\"data\"\t\t: vakata_dnd.data,\n\t\t\t\t\t\"element\"\t: vakata_dnd.element,\n\t\t\t\t\t\"helper\"\t: vakata_dnd.helper\n\t\t\t\t};\n\t\t\t},\n\t\t\t_clean : function () {\n\t\t\t\tif(vakata_dnd.helper) { vakata_dnd.helper.remove(); }\n\t\t\t\tif(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }\n\t\t\t\tvakata_dnd = {\n\t\t\t\t\telement\t: false,\n\t\t\t\t\ttarget\t: false,\n\t\t\t\t\tis_down\t: false,\n\t\t\t\t\tis_drag\t: false,\n\t\t\t\t\thelper\t: false,\n\t\t\t\t\thelper_w: 0,\n\t\t\t\t\tdata\t: false,\n\t\t\t\t\tinit_x\t: 0,\n\t\t\t\t\tinit_y\t: 0,\n\t\t\t\t\tscroll_l: 0,\n\t\t\t\t\tscroll_t: 0,\n\t\t\t\t\tscroll_e: false,\n\t\t\t\t\tscroll_i: false,\n\t\t\t\t\tis_touch: false\n\t\t\t\t};\n\t\t\t\t$(document).off(\"mousemove.vakata.jstree touchmove.vakata.jstree\", $.vakata.dnd.drag);\n\t\t\t\t$(document).off(\"mouseup.vakata.jstree touchend.vakata.jstree\", $.vakata.dnd.stop);\n\t\t\t},\n\t\t\t_scroll : function (init_only) {\n\t\t\t\tif(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) {\n\t\t\t\t\tif(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; }\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(!vakata_dnd.scroll_i) {\n\t\t\t\t\tvakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(init_only === true) { return false; }\n\n\t\t\t\tvar i = vakata_dnd.scroll_e.scrollTop(),\n\t\t\t\t\tj = vakata_dnd.scroll_e.scrollLeft();\n\t\t\t\tvakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed);\n\t\t\t\tvakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed);\n\t\t\t\tif(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when a drag causes an element to scroll\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t * @name dnd_scroll.vakata\n\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t * @param {jQuery} event the element that is scrolling\n\t\t\t\t\t */\n\t\t\t\t\t$.vakata.dnd._trigger(\"scroll\", vakata_dnd.scroll_e);\n\t\t\t\t}\n\t\t\t},\n\t\t\tstart : function (e, data, html) {\n\t\t\t\tif(e.type === \"touchstart\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); }\n\t\t\t\ttry {\n\t\t\t\t\te.currentTarget.unselectable = \"on\";\n\t\t\t\t\te.currentTarget.onselectstart = function() { return false; };\n\t\t\t\t\tif(e.currentTarget.style) {\n\t\t\t\t\t\te.currentTarget.style.touchAction = \"none\";\n\t\t\t\t\t\te.currentTarget.style.msTouchAction = \"none\";\n\t\t\t\t\t\te.currentTarget.style.MozUserSelect = \"none\";\n\t\t\t\t\t}\n\t\t\t\t} catch(ignore) { }\n\t\t\t\tvakata_dnd.init_x\t= e.pageX;\n\t\t\t\tvakata_dnd.init_y\t= e.pageY;\n\t\t\t\tvakata_dnd.data\t\t= data;\n\t\t\t\tvakata_dnd.is_down\t= true;\n\t\t\t\tvakata_dnd.element\t= e.currentTarget;\n\t\t\t\tvakata_dnd.target\t= e.target;\n\t\t\t\tvakata_dnd.is_touch\t= e.type === \"touchstart\";\n\t\t\t\tif(html !== false) {\n\t\t\t\t\tvakata_dnd.helper = $(\"<div id='vakata-dnd'></div>\").html(html).css({\n\t\t\t\t\t\t\"display\"\t\t: \"block\",\n\t\t\t\t\t\t\"margin\"\t\t: \"0\",\n\t\t\t\t\t\t\"padding\"\t\t: \"0\",\n\t\t\t\t\t\t\"position\"\t\t: \"absolute\",\n\t\t\t\t\t\t\"top\"\t\t\t: \"-2000px\",\n\t\t\t\t\t\t\"lineHeight\"\t: \"16px\",\n\t\t\t\t\t\t\"zIndex\"\t\t: \"10000\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$(document).on(\"mousemove.vakata.jstree touchmove.vakata.jstree\", $.vakata.dnd.drag);\n\t\t\t\t$(document).on(\"mouseup.vakata.jstree touchend.vakata.jstree\", $.vakata.dnd.stop);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tdrag : function (e) {\n\t\t\t\tif(e.type === \"touchmove\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(!vakata_dnd.is_down) { return; }\n\t\t\t\tif(!vakata_dnd.is_drag) {\n\t\t\t\t\tif(\n\t\t\t\t\t\tMath.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ||\n\t\t\t\t\t\tMath.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif(vakata_dnd.helper) {\n\t\t\t\t\t\t\tvakata_dnd.helper.appendTo(document.body);\n\t\t\t\t\t\t\tvakata_dnd.helper_w = vakata_dnd.helper.outerWidth();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvakata_dnd.is_drag = true;\n\t\t\t\t\t\t$(vakata_dnd.target).one('click.vakata', false);\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * triggered on the document when a drag starts\n\t\t\t\t\t\t * @event\n\t\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t\t * @name dnd_start.vakata\n\t\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t\t * @param {Object} event the event that caused the start (probably mousemove)\n\t\t\t\t\t\t */\n\t\t\t\t\t\t$.vakata.dnd._trigger(\"start\", e);\n\t\t\t\t\t}\n\t\t\t\t\telse { return; }\n\t\t\t\t}\n\n\t\t\t\tvar d  = false, w  = false,\n\t\t\t\t\tdh = false, wh = false,\n\t\t\t\t\tdw = false, ww = false,\n\t\t\t\t\tdt = false, dl = false,\n\t\t\t\t\tht = false, hl = false;\n\n\t\t\t\tvakata_dnd.scroll_t = 0;\n\t\t\t\tvakata_dnd.scroll_l = 0;\n\t\t\t\tvakata_dnd.scroll_e = false;\n\t\t\t\t$($(e.target).parentsUntil(\"body\").addBack().get().reverse())\n\t\t\t\t\t.filter(function () {\n\t\t\t\t\t\treturn\t(/^auto|scroll$/).test($(this).css(\"overflow\")) &&\n\t\t\t\t\t\t\t\t(this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth);\n\t\t\t\t\t})\n\t\t\t\t\t.each(function () {\n\t\t\t\t\t\tvar t = $(this), o = t.offset();\n\t\t\t\t\t\tif(this.scrollHeight > this.offsetHeight) {\n\t\t\t\t\t\t\tif(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_t = 1; }\n\t\t\t\t\t\t\tif(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity)\t\t\t\t{ vakata_dnd.scroll_t = -1; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(this.scrollWidth > this.offsetWidth) {\n\t\t\t\t\t\t\tif(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_l = 1; }\n\t\t\t\t\t\t\tif(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity)\t\t\t\t{ vakata_dnd.scroll_l = -1; }\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {\n\t\t\t\t\t\t\tvakata_dnd.scroll_e = $(this);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tif(!vakata_dnd.scroll_e) {\n\t\t\t\t\td  = $(document); w = $(window);\n\t\t\t\t\tdh = d.height(); wh = w.height();\n\t\t\t\t\tdw = d.width(); ww = w.width();\n\t\t\t\t\tdt = d.scrollTop(); dl = d.scrollLeft();\n\t\t\t\t\tif(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity)\t\t{ vakata_dnd.scroll_t = -1;  }\n\t\t\t\t\tif(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_t = 1; }\n\t\t\t\t\tif(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity)\t\t{ vakata_dnd.scroll_l = -1; }\n\t\t\t\t\tif(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity)\t{ vakata_dnd.scroll_l = 1; }\n\t\t\t\t\tif(vakata_dnd.scroll_t || vakata_dnd.scroll_l) {\n\t\t\t\t\t\tvakata_dnd.scroll_e = d;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); }\n\n\t\t\t\tif(vakata_dnd.helper) {\n\t\t\t\t\tht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10);\n\t\t\t\t\thl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10);\n\t\t\t\t\tif(dh && ht + 25 > dh) { ht = dh - 50; }\n\t\t\t\t\tif(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); }\n\t\t\t\t\tvakata_dnd.helper.css({\n\t\t\t\t\t\tleft\t: hl + \"px\",\n\t\t\t\t\t\ttop\t\t: ht + \"px\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * triggered on the document when a drag is in progress\n\t\t\t\t * @event\n\t\t\t\t * @plugin dnd\n\t\t\t\t * @name dnd_move.vakata\n\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t * @param {Object} event the event that caused this to trigger (most likely mousemove)\n\t\t\t\t */\n\t\t\t\t$.vakata.dnd._trigger(\"move\", e);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tstop : function (e) {\n\t\t\t\tif(e.type === \"touchend\" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) {\n\t\t\t\t\te.pageX = e.originalEvent.changedTouches[0].pageX;\n\t\t\t\t\te.pageY = e.originalEvent.changedTouches[0].pageY;\n\t\t\t\t\te.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset);\n\t\t\t\t}\n\t\t\t\tif(vakata_dnd.is_drag) {\n\t\t\t\t\t/**\n\t\t\t\t\t * triggered on the document when a drag stops (the dragged element is dropped)\n\t\t\t\t\t * @event\n\t\t\t\t\t * @plugin dnd\n\t\t\t\t\t * @name dnd_stop.vakata\n\t\t\t\t\t * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start\n\t\t\t\t\t * @param {DOM} element the DOM element being dragged\n\t\t\t\t\t * @param {jQuery} helper the helper shown next to the mouse\n\t\t\t\t\t * @param {Object} event the event that caused the stop\n\t\t\t\t\t */\n\t\t\t\t\tif (e.target !== vakata_dnd.target) {\n\t\t\t\t\t\t$(vakata_dnd.target).off('click.vakata');\n\t\t\t\t\t}\n\t\t\t\t\t$.vakata.dnd._trigger(\"stop\", e);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(e.type === \"touchend\" && e.target === vakata_dnd.target) {\n\t\t\t\t\t\tvar to = setTimeout(function () { $(e.target).click(); }, 100);\n\t\t\t\t\t\t$(e.target).one('click', function() { if(to) { clearTimeout(to); } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$.vakata.dnd._clean();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\t}($));\n\n\t// include the dnd plugin by default\n\t// $.jstree.defaults.plugins.push(\"dnd\");\n\n\n/**\n * ### Massload plugin\n *\n * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading).\n */\n\n\t/**\n\t * massload configuration\n\t *\n\t * It is possible to set this to a standard jQuery-like AJAX config.\n\t * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used.\n\t *\n\t * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result.\n\t *\n\t * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array.\n\t *\n\t *\t{\n\t *\t\t\"id1\" : [{ \"text\" : \"Child of ID1\", \"id\" : \"c1\" }, { \"text\" : \"Another child of ID1\", \"id\" : \"c2\" }],\n\t *\t\t\"id2\" : [{ \"text\" : \"Child of ID2\", \"id\" : \"c3\" }]\n\t *\t}\n\t * \n\t * @name $.jstree.defaults.massload\n\t * @plugin massload\n\t */\n\t$.jstree.defaults.massload = null;\n\t$.jstree.plugins.massload = function (options, parent) {\n\t\tthis.init = function (el, options) {\n\t\t\tthis._data.massload = {};\n\t\t\tparent.init.call(this, el, options);\n\t\t};\n\t\tthis._load_nodes = function (nodes, callback, is_callback, force_reload) {\n\t\t\tvar s = this.settings.massload,\n\t\t\t\tnodesString = JSON.stringify(nodes),\n\t\t\t\ttoLoad = [],\n\t\t\t\tm = this._model.data,\n\t\t\t\ti, j, dom;\n\t\t\tif (!is_callback) {\n\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\tif(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) {\n\t\t\t\t\t\ttoLoad.push(nodes[i]);\n\t\t\t\t\t\tdom = this.get_node(nodes[i], true);\n\t\t\t\t\t\tif (dom && dom.length) {\n\t\t\t\t\t\t\tdom.addClass(\"jstree-loading\").attr('aria-busy',true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis._data.massload = {};\n\t\t\t\tif (toLoad.length) {\n\t\t\t\t\tif($.isFunction(s)) {\n\t\t\t\t\t\treturn s.call(this, toLoad, $.proxy(function (data) {\n\t\t\t\t\t\t\tvar i, j;\n\t\t\t\t\t\t\tif(data) {\n\t\t\t\t\t\t\t\tfor(i in data) {\n\t\t\t\t\t\t\t\t\tif(data.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\tthis._data.massload[i] = data[i];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\t\t\t\tdom = this.get_node(nodes[i], true);\n\t\t\t\t\t\t\t\tif (dom && dom.length) {\n\t\t\t\t\t\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback, force_reload);\n\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t\tif(typeof s === 'object' && s && s.url) {\n\t\t\t\t\t\ts = $.extend(true, {}, s);\n\t\t\t\t\t\tif($.isFunction(s.url)) {\n\t\t\t\t\t\t\ts.url = s.url.call(this, toLoad);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif($.isFunction(s.data)) {\n\t\t\t\t\t\t\ts.data = s.data.call(this, toLoad);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn $.ajax(s)\n\t\t\t\t\t\t\t.done($.proxy(function (data,t,x) {\n\t\t\t\t\t\t\t\t\tvar i, j;\n\t\t\t\t\t\t\t\t\tif(data) {\n\t\t\t\t\t\t\t\t\t\tfor(i in data) {\n\t\t\t\t\t\t\t\t\t\t\tif(data.hasOwnProperty(i)) {\n\t\t\t\t\t\t\t\t\t\t\t\tthis._data.massload[i] = data[i];\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfor(i = 0, j = nodes.length; i < j; i++) {\n\t\t\t\t\t\t\t\t\t\tdom = this.get_node(nodes[i], true);\n\t\t\t\t\t\t\t\t\t\tif (dom && dom.length) {\n\t\t\t\t\t\t\t\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback, force_reload);\n\t\t\t\t\t\t\t\t}, this))\n\t\t\t\t\t\t\t.fail($.proxy(function (f) {\n\t\t\t\t\t\t\t\t\tparent._load_nodes.call(this, nodes, callback, is_callback, force_reload);\n\t\t\t\t\t\t\t\t}, this));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parent._load_nodes.call(this, nodes, callback, is_callback, force_reload);\n\t\t};\n\t\tthis._load_node = function (obj, callback) {\n\t\t\tvar data = this._data.massload[obj.id],\n\t\t\t\trslt = null, dom;\n\t\t\tif(data) {\n\t\t\t\trslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data'](\n\t\t\t\t\tobj,\n\t\t\t\t\ttypeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data,\n\t\t\t\t\tfunction (status) { callback.call(this, status); }\n\t\t\t\t);\n\t\t\t\tdom = this.get_node(obj.id, true);\n\t\t\t\tif (dom && dom.length) {\n\t\t\t\t\tdom.removeClass(\"jstree-loading\").attr('aria-busy',false);\n\t\t\t\t}\n\t\t\t\tdelete this._data.massload[obj.id];\n\t\t\t\treturn rslt;\n\t\t\t}\n\t\t\treturn parent._load_node.call(this, obj, callback);\n\t\t};\n\t};\n\n/**\n * ### Search plugin\n *\n * Adds search functionality to jsTree.\n */\n\n\t/**\n\t * stores all defaults for the search plugin\n\t * @name $.jstree.defaults.search\n\t * @plugin search\n\t */\n\t$.jstree.defaults.search = {\n\t\t/**\n\t\t * a jQuery-like AJAX config, which jstree uses if a server should be queried for results.\n\t\t *\n\t\t * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed.\n\t\t * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to\n\t\t * @name $.jstree.defaults.search.ajax\n\t\t * @plugin search\n\t\t */\n\t\tajax : false,\n\t\t/**\n\t\t * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`.\n\t\t * @name $.jstree.defaults.search.fuzzy\n\t\t * @plugin search\n\t\t */\n\t\tfuzzy : false,\n\t\t/**\n\t\t * Indicates if the search should be case sensitive. Default is `false`.\n\t\t * @name $.jstree.defaults.search.case_sensitive\n\t\t * @plugin search\n\t\t */\n\t\tcase_sensitive : false,\n\t\t/**\n\t\t * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers).\n\t\t * This setting can be changed at runtime when calling the search method. Default is `false`.\n\t\t * @name $.jstree.defaults.search.show_only_matches\n\t\t * @plugin search\n\t\t */\n\t\tshow_only_matches : false,\n\t\t/**\n\t\t * Indicates if the children of matched element are shown (when show_only_matches is true)\n\t\t * This setting can be changed at runtime when calling the search method. Default is `false`.\n\t\t * @name $.jstree.defaults.search.show_only_matches_children\n\t\t * @plugin search\n\t\t */\n\t\tshow_only_matches_children : false,\n\t\t/**\n\t\t * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`.\n\t\t * @name $.jstree.defaults.search.close_opened_onclear\n\t\t * @plugin search\n\t\t */\n\t\tclose_opened_onclear : true,\n\t\t/**\n\t\t * Indicates if only leaf nodes should be included in search results. Default is `false`.\n\t\t * @name $.jstree.defaults.search.search_leaves_only\n\t\t * @plugin search\n\t\t */\n\t\tsearch_leaves_only : false,\n\t\t/**\n\t\t * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution).\n\t\t * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`.\n\t\t * @name $.jstree.defaults.search.search_callback\n\t\t * @plugin search\n\t\t */\n\t\tsearch_callback : false\n\t};\n\n\t$.jstree.plugins.search = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis._data.search.str = \"\";\n\t\t\tthis._data.search.dom = $();\n\t\t\tthis._data.search.res = [];\n\t\t\tthis._data.search.opn = [];\n\t\t\tthis._data.search.som = false;\n\t\t\tthis._data.search.smc = false;\n\t\t\tthis._data.search.hdn = [];\n\n\t\t\tthis.element\n\t\t\t\t.on(\"search.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(this._data.search.som && data.res.length) {\n\t\t\t\t\t\t\tvar m = this._model.data, i, j, p = [], k, l;\n\t\t\t\t\t\t\tfor(i = 0, j = data.res.length; i < j; i++) {\n\t\t\t\t\t\t\t\tif(m[data.res[i]] && !m[data.res[i]].state.hidden) {\n\t\t\t\t\t\t\t\t\tp.push(data.res[i]);\n\t\t\t\t\t\t\t\t\tp = p.concat(m[data.res[i]].parents);\n\t\t\t\t\t\t\t\t\tif(this._data.search.smc) {\n\t\t\t\t\t\t\t\t\t\tfor (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) {\n\t\t\t\t\t\t\t\t\t\t\tif (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) {\n\t\t\t\t\t\t\t\t\t\t\t\tp.push(m[data.res[i]].children_d[k]);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tp = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root);\n\t\t\t\t\t\t\tthis._data.search.hdn = this.hide_all(true);\n\t\t\t\t\t\t\tthis.show_node(p, true);\n\t\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"clear_search.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(this._data.search.som && data.res.length) {\n\t\t\t\t\t\t\tthis.show_node(this._data.search.hdn, true);\n\t\t\t\t\t\t\tthis.redraw(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * used to search the tree nodes for a given string\n\t\t * @name search(str [, skip_async])\n\t\t * @param {String} str the search string\n\t\t * @param {Boolean} skip_async if set to true server will not be queried even if configured\n\t\t * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers)\n\t\t * @param {mixed} inside an optional node to whose children to limit the search\n\t\t * @param {Boolean} append if set to true the results of this search are appended to the previous search\n\t\t * @plugin search\n\t\t * @trigger search.jstree\n\t\t */\n\t\tthis.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) {\n\t\t\tif(str === false || $.trim(str.toString()) === \"\") {\n\t\t\t\treturn this.clear_search();\n\t\t\t}\n\t\t\tinside = this.get_node(inside);\n\t\t\tinside = inside && inside.id ? inside.id : null;\n\t\t\tstr = str.toString();\n\t\t\tvar s = this.settings.search,\n\t\t\t\ta = s.ajax ? s.ajax : false,\n\t\t\t\tm = this._model.data,\n\t\t\t\tf = null,\n\t\t\t\tr = [],\n\t\t\t\tp = [], i, j;\n\t\t\tif(this._data.search.res.length && !append) {\n\t\t\t\tthis.clear_search();\n\t\t\t}\n\t\t\tif(show_only_matches === undefined) {\n\t\t\t\tshow_only_matches = s.show_only_matches;\n\t\t\t}\n\t\t\tif(show_only_matches_children === undefined) {\n\t\t\t\tshow_only_matches_children = s.show_only_matches_children;\n\t\t\t}\n\t\t\tif(!skip_async && a !== false) {\n\t\t\t\tif($.isFunction(a)) {\n\t\t\t\t\treturn a.call(this, str, $.proxy(function (d) {\n\t\t\t\t\t\t\tif(d && d.d) { d = d.d; }\n\t\t\t\t\t\t\tthis._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {\n\t\t\t\t\t\t\t\tthis.search(str, true, show_only_matches, inside, append, show_only_matches_children);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this), inside);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ta = $.extend({}, a);\n\t\t\t\t\tif(!a.data) { a.data = {}; }\n\t\t\t\t\ta.data.str = str;\n\t\t\t\t\tif(inside) {\n\t\t\t\t\t\ta.data.inside = inside;\n\t\t\t\t\t}\n\t\t\t\t\tif (this._data.search.lastRequest) {\n\t\t\t\t\t\tthis._data.search.lastRequest.abort();\n\t\t\t\t\t}\n\t\t\t\t\tthis._data.search.lastRequest = $.ajax(a)\n\t\t\t\t\t\t.fail($.proxy(function () {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) };\n\t\t\t\t\t\t\tthis.settings.core.error.call(this, this._data.core.last_error);\n\t\t\t\t\t\t}, this))\n\t\t\t\t\t\t.done($.proxy(function (d) {\n\t\t\t\t\t\t\tif(d && d.d) { d = d.d; }\n\t\t\t\t\t\t\tthis._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () {\n\t\t\t\t\t\t\t\tthis.search(str, true, show_only_matches, inside, append, show_only_matches_children);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, this));\n\t\t\t\t\treturn this._data.search.lastRequest;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!append) {\n\t\t\t\tthis._data.search.str = str;\n\t\t\t\tthis._data.search.dom = $();\n\t\t\t\tthis._data.search.res = [];\n\t\t\t\tthis._data.search.opn = [];\n\t\t\t\tthis._data.search.som = show_only_matches;\n\t\t\t\tthis._data.search.smc = show_only_matches_children;\n\t\t\t}\n\n\t\t\tf = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy });\n\t\t\t$.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) {\n\t\t\t\tvar v = m[i];\n\t\t\t\tif(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) {\n\t\t\t\t\tr.push(i);\n\t\t\t\t\tp = p.concat(v.parents);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(r.length) {\n\t\t\t\tp = $.vakata.array_unique(p);\n\t\t\t\tfor(i = 0, j = p.length; i < j; i++) {\n\t\t\t\t\tif(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) {\n\t\t\t\t\t\tthis._data.search.opn.push(p[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!append) {\n\t\t\t\t\tthis._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&'); }).join(', #')));\n\t\t\t\t\tthis._data.search.res = r;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&'); }).join(', #'))));\n\t\t\t\t\tthis._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r));\n\t\t\t\t}\n\t\t\t\tthis._data.search.dom.children(\".jstree-anchor\").addClass('jstree-search');\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered after search is complete\n\t\t\t * @event\n\t\t\t * @name search.jstree\n\t\t\t * @param {jQuery} nodes a jQuery collection of matching nodes\n\t\t\t * @param {String} str the search string\n\t\t\t * @param {Array} res a collection of objects represeing the matching nodes\n\t\t\t * @plugin search\n\t\t\t */\n\t\t\tthis.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches });\n\t\t};\n\t\t/**\n\t\t * used to clear the last search (removes classes and shows all nodes if filtering is on)\n\t\t * @name clear_search()\n\t\t * @plugin search\n\t\t * @trigger clear_search.jstree\n\t\t */\n\t\tthis.clear_search = function () {\n\t\t\tif(this.settings.search.close_opened_onclear) {\n\t\t\t\tthis.close_node(this._data.search.opn, 0);\n\t\t\t}\n\t\t\t/**\n\t\t\t * triggered after search is complete\n\t\t\t * @event\n\t\t\t * @name clear_search.jstree\n\t\t\t * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search)\n\t\t\t * @param {String} str the search string (the last search string)\n\t\t\t * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search)\n\t\t\t * @plugin search\n\t\t\t */\n\t\t\tthis.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res });\n\t\t\tif(this._data.search.res.length) {\n\t\t\t\tthis._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) {\n\t\t\t\t\treturn \"0123456789\".indexOf(v[0]) !== -1 ? '\\\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\\\$&') : v.replace($.jstree.idregex,'\\\\$&');\n\t\t\t\t}).join(', #')));\n\t\t\t\tthis._data.search.dom.children(\".jstree-anchor\").removeClass(\"jstree-search\");\n\t\t\t}\n\t\t\tthis._data.search.str = \"\";\n\t\t\tthis._data.search.res = [];\n\t\t\tthis._data.search.opn = [];\n\t\t\tthis._data.search.dom = $();\n\t\t};\n\n\t\tthis.redraw_node = function(obj, deep, callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tif($.inArray(obj.id, this._data.search.res) !== -1) {\n\t\t\t\t\tvar i, j, tmp = null;\n\t\t\t\t\tfor(i = 0, j = obj.childNodes.length; i < j; i++) {\n\t\t\t\t\t\tif(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf(\"jstree-anchor\") !== -1) {\n\t\t\t\t\t\t\ttmp = obj.childNodes[i];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(tmp) {\n\t\t\t\t\t\ttmp.className += ' jstree-search';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t};\n\n\t// helpers\n\t(function ($) {\n\t\t// from http://kiro.me/projects/fuse.html\n\t\t$.vakata.search = function(pattern, txt, options) {\n\t\t\toptions = options || {};\n\t\t\toptions = $.extend({}, $.vakata.search.defaults, options);\n\t\t\tif(options.fuzzy !== false) {\n\t\t\t\toptions.fuzzy = true;\n\t\t\t}\n\t\t\tpattern = options.caseSensitive ? pattern : pattern.toLowerCase();\n\t\t\tvar MATCH_LOCATION\t= options.location,\n\t\t\t\tMATCH_DISTANCE\t= options.distance,\n\t\t\t\tMATCH_THRESHOLD\t= options.threshold,\n\t\t\t\tpatternLen = pattern.length,\n\t\t\t\tmatchmask, pattern_alphabet, match_bitapScore, search;\n\t\t\tif(patternLen > 32) {\n\t\t\t\toptions.fuzzy = false;\n\t\t\t}\n\t\t\tif(options.fuzzy) {\n\t\t\t\tmatchmask = 1 << (patternLen - 1);\n\t\t\t\tpattern_alphabet = (function () {\n\t\t\t\t\tvar mask = {},\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\t\tmask[pattern.charAt(i)] = 0;\n\t\t\t\t\t}\n\t\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\t\tmask[pattern.charAt(i)] |= 1 << (patternLen - i - 1);\n\t\t\t\t\t}\n\t\t\t\t\treturn mask;\n\t\t\t\t}());\n\t\t\t\tmatch_bitapScore = function (e, x) {\n\t\t\t\t\tvar accuracy = e / patternLen,\n\t\t\t\t\t\tproximity = Math.abs(MATCH_LOCATION - x);\n\t\t\t\t\tif(!MATCH_DISTANCE) {\n\t\t\t\t\t\treturn proximity ? 1.0 : accuracy;\n\t\t\t\t\t}\n\t\t\t\t\treturn accuracy + (proximity / MATCH_DISTANCE);\n\t\t\t\t};\n\t\t\t}\n\t\t\tsearch = function (text) {\n\t\t\t\ttext = options.caseSensitive ? text : text.toLowerCase();\n\t\t\t\tif(pattern === text || text.indexOf(pattern) !== -1) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisMatch: true,\n\t\t\t\t\t\tscore: 0\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif(!options.fuzzy) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tisMatch: false,\n\t\t\t\t\t\tscore: 1\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tvar i, j,\n\t\t\t\t\ttextLen = text.length,\n\t\t\t\t\tscoreThreshold = MATCH_THRESHOLD,\n\t\t\t\t\tbestLoc = text.indexOf(pattern, MATCH_LOCATION),\n\t\t\t\t\tbinMin, binMid,\n\t\t\t\t\tbinMax = patternLen + textLen,\n\t\t\t\t\tlastRd, start, finish, rd, charMatch,\n\t\t\t\t\tscore = 1,\n\t\t\t\t\tlocations = [];\n\t\t\t\tif (bestLoc !== -1) {\n\t\t\t\t\tscoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);\n\t\t\t\t\tbestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen);\n\t\t\t\t\tif (bestLoc !== -1) {\n\t\t\t\t\t\tscoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbestLoc = -1;\n\t\t\t\tfor (i = 0; i < patternLen; i++) {\n\t\t\t\t\tbinMin = 0;\n\t\t\t\t\tbinMid = binMax;\n\t\t\t\t\twhile (binMin < binMid) {\n\t\t\t\t\t\tif (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) {\n\t\t\t\t\t\t\tbinMin = binMid;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbinMax = binMid;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbinMid = Math.floor((binMax - binMin) / 2 + binMin);\n\t\t\t\t\t}\n\t\t\t\t\tbinMax = binMid;\n\t\t\t\t\tstart = Math.max(1, MATCH_LOCATION - binMid + 1);\n\t\t\t\t\tfinish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen;\n\t\t\t\t\trd = new Array(finish + 2);\n\t\t\t\t\trd[finish + 1] = (1 << i) - 1;\n\t\t\t\t\tfor (j = finish; j >= start; j--) {\n\t\t\t\t\t\tcharMatch = pattern_alphabet[text.charAt(j - 1)];\n\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\trd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (rd[j] & matchmask) {\n\t\t\t\t\t\t\tscore = match_bitapScore(i, j - 1);\n\t\t\t\t\t\t\tif (score <= scoreThreshold) {\n\t\t\t\t\t\t\t\tscoreThreshold = score;\n\t\t\t\t\t\t\t\tbestLoc = j - 1;\n\t\t\t\t\t\t\t\tlocations.push(bestLoc);\n\t\t\t\t\t\t\t\tif (bestLoc > MATCH_LOCATION) {\n\t\t\t\t\t\t\t\t\tstart = Math.max(1, 2 * MATCH_LOCATION - bestLoc);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tlastRd = rd;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tisMatch: bestLoc >= 0,\n\t\t\t\t\tscore: score\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn txt === true ? { 'search' : search } : search(txt);\n\t\t};\n\t\t$.vakata.search.defaults = {\n\t\t\tlocation : 0,\n\t\t\tdistance : 100,\n\t\t\tthreshold : 0.6,\n\t\t\tfuzzy : false,\n\t\t\tcaseSensitive : false\n\t\t};\n\t}($));\n\n\t// include the search plugin by default\n\t// $.jstree.defaults.plugins.push(\"search\");\n\n\n/**\n * ### Sort plugin\n *\n * Automatically sorts all siblings in the tree according to a sorting function.\n */\n\n\t/**\n\t * the settings function used to sort the nodes.\n\t * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`.\n\t * @name $.jstree.defaults.sort\n\t * @plugin sort\n\t */\n\t$.jstree.defaults.sort = function (a, b) {\n\t\t//return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b);\n\t\treturn this.get_text(a) > this.get_text(b) ? 1 : -1;\n\t};\n\t$.jstree.plugins.sort = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tthis.element\n\t\t\t\t.on(\"model.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent, true);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"rename_node.jstree create_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent || data.node.parent, false);\n\t\t\t\t\t\tthis.redraw_node(data.parent || data.node.parent, true);\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"move_node.jstree copy_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.sort(data.parent, false);\n\t\t\t\t\t\tthis.redraw_node(data.parent, true);\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * used to sort a node's children\n\t\t * @private\n\t\t * @name sort(obj [, deep])\n\t\t * @param  {mixed} obj the node\n\t\t * @param {Boolean} deep if set to `true` nodes are sorted recursively.\n\t\t * @plugin sort\n\t\t * @trigger search.jstree\n\t\t */\n\t\tthis.sort = function (obj, deep) {\n\t\t\tvar i, j;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(obj && obj.children && obj.children.length) {\n\t\t\t\tobj.children.sort($.proxy(this.settings.sort, this));\n\t\t\t\tif(deep) {\n\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\tthis.sort(obj.children_d[i], false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t};\n\n\t// include the sort plugin by default\n\t// $.jstree.defaults.plugins.push(\"sort\");\n\n/**\n * ### State plugin\n *\n * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc)\n */\n\n\tvar to = false;\n\t/**\n\t * stores all defaults for the state plugin\n\t * @name $.jstree.defaults.state\n\t * @plugin state\n\t */\n\t$.jstree.defaults.state = {\n\t\t/**\n\t\t * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`.\n\t\t * @name $.jstree.defaults.state.key\n\t\t * @plugin state\n\t\t */\n\t\tkey\t\t: 'jstree',\n\t\t/**\n\t\t * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`.\n\t\t * @name $.jstree.defaults.state.events\n\t\t * @plugin state\n\t\t */\n\t\tevents\t: 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree',\n\t\t/**\n\t\t * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire.\n\t\t * @name $.jstree.defaults.state.ttl\n\t\t * @plugin state\n\t\t */\n\t\tttl\t\t: false,\n\t\t/**\n\t\t * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state.\n\t\t * @name $.jstree.defaults.state.filter\n\t\t * @plugin state\n\t\t */\n\t\tfilter\t: false,\n\t\t/**\n\t\t * Should loaded nodes be restored (setting this to true means that it is possible that the whole tree will be loaded for some users - use with caution). Defaults to `false`\n\t\t * @name $.jstree.defaults.state.preserve_loaded\n\t\t * @plugin state\n\t\t */\n\t\tpreserve_loaded : false\n\t};\n\t$.jstree.plugins.state = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\t\t\tvar bind = $.proxy(function () {\n\t\t\t\tthis.element.on(this.settings.state.events, $.proxy(function () {\n\t\t\t\t\tif(to) { clearTimeout(to); }\n\t\t\t\t\tto = setTimeout($.proxy(function () { this.save_state(); }, this), 100);\n\t\t\t\t}, this));\n\t\t\t\t/**\n\t\t\t\t * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore).\n\t\t\t\t * @event\n\t\t\t\t * @name state_ready.jstree\n\t\t\t\t * @plugin state\n\t\t\t\t */\n\t\t\t\tthis.trigger('state_ready');\n\t\t\t}, this);\n\t\t\tthis.element\n\t\t\t\t.on(\"ready.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.one(\"restore_state.jstree\", bind);\n\t\t\t\t\t\tif(!this.restore_state()) { bind(); }\n\t\t\t\t\t}, this));\n\t\t};\n\t\t/**\n\t\t * save the state\n\t\t * @name save_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.save_state = function () {\n\t\t\tvar tm = this.get_state();\n\t\t\tif (!this.settings.state.preserve_loaded) {\n\t\t\t\tdelete tm.core.loaded;\n\t\t\t}\n\t\t\tvar st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) };\n\t\t\t$.vakata.storage.set(this.settings.state.key, JSON.stringify(st));\n\t\t};\n\t\t/**\n\t\t * restore the state from the user's computer\n\t\t * @name restore_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.restore_state = function () {\n\t\t\tvar k = $.vakata.storage.get(this.settings.state.key);\n\t\t\tif(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } }\n\t\t\tif(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; }\n\t\t\tif(!!k && k.state) { k = k.state; }\n\t\t\tif(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); }\n\t\t\tif(!!k) {\n\t\t\t\tif (!this.settings.state.preserve_loaded) {\n\t\t\t\t\tdelete k.core.loaded;\n\t\t\t\t}\n\t\t\t\tthis.element.one(\"set_state.jstree\", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); });\n\t\t\t\tthis.set_state(k);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\t/**\n\t\t * clear the state on the user's computer\n\t\t * @name clear_state()\n\t\t * @plugin state\n\t\t */\n\t\tthis.clear_state = function () {\n\t\t\treturn $.vakata.storage.del(this.settings.state.key);\n\t\t};\n\t};\n\n\t(function ($, undefined) {\n\t\t$.vakata.storage = {\n\t\t\t// simply specifying the functions in FF throws an error\n\t\t\tset : function (key, val) { return window.localStorage.setItem(key, val); },\n\t\t\tget : function (key) { return window.localStorage.getItem(key); },\n\t\t\tdel : function (key) { return window.localStorage.removeItem(key); }\n\t\t};\n\t}($));\n\n\t// include the state plugin by default\n\t// $.jstree.defaults.plugins.push(\"state\");\n\n/**\n * ### Types plugin\n *\n * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group.\n */\n\n\t/**\n\t * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional).\n\t *\n\t * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited.\n\t * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.\n\t * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.\n\t * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.\n\t * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data)\n\t * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data)\n\t *\n\t * There are two predefined types:\n\t *\n\t * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes.\n\t * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified.\n\t *\n\t * @name $.jstree.defaults.types\n\t * @plugin types\n\t */\n\t$.jstree.defaults.types = {\n\t\t'default' : {}\n\t};\n\t$.jstree.defaults.types[$.jstree.root] = {};\n\n\t$.jstree.plugins.types = function (options, parent) {\n\t\tthis.init = function (el, options) {\n\t\t\tvar i, j;\n\t\t\tif(options && options.types && options.types['default']) {\n\t\t\t\tfor(i in options.types) {\n\t\t\t\t\tif(i !== \"default\" && i !== $.jstree.root && options.types.hasOwnProperty(i)) {\n\t\t\t\t\t\tfor(j in options.types['default']) {\n\t\t\t\t\t\t\tif(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {\n\t\t\t\t\t\t\t\toptions.types[i][j] = options.types['default'][j];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tparent.init.call(this, el, options);\n\t\t\tthis._model.data[$.jstree.root].type = $.jstree.root;\n\t\t};\n\t\tthis.refresh = function (skip_loading, forget_state) {\n\t\t\tparent.refresh.call(this, skip_loading, forget_state);\n\t\t\tthis._model.data[$.jstree.root].type = $.jstree.root;\n\t\t};\n\t\tthis.bind = function () {\n\t\t\tthis.element\n\t\t\t\t.on('model.jstree', $.proxy(function (e, data) {\n\t\t\t\t\t\tvar m = this._model.data,\n\t\t\t\t\t\t\tdpc = data.nodes,\n\t\t\t\t\t\t\tt = this.settings.types,\n\t\t\t\t\t\t\ti, j, c = 'default', k;\n\t\t\t\t\t\tfor(i = 0, j = dpc.length; i < j; i++) {\n\t\t\t\t\t\t\tc = 'default';\n\t\t\t\t\t\t\tif(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {\n\t\t\t\t\t\t\t\tc = m[dpc[i]].original.type;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {\n\t\t\t\t\t\t\t\tc = m[dpc[i]].data.jstree.type;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tm[dpc[i]].type = c;\n\t\t\t\t\t\t\tif(m[dpc[i]].icon === true && t[c].icon !== undefined) {\n\t\t\t\t\t\t\t\tm[dpc[i]].icon = t[c].icon;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (k in t[c].li_attr) {\n\t\t\t\t\t\t\t\t\tif (t[c].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (m[dpc[i]].li_attr[k] === undefined) {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].li_attr[k] = t[c].li_attr[k];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {\n\t\t\t\t\t\t\t\tfor (k in t[c].a_attr) {\n\t\t\t\t\t\t\t\t\tif (t[c].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (m[dpc[i]].a_attr[k] === undefined) {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr[k] = t[c].a_attr[k];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr['href'] = t[c].a_attr['href'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\t\t\t\t\tm[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tm[$.jstree.root].type = $.jstree.root;\n\t\t\t\t\t}, this));\n\t\t\tparent.bind.call(this);\n\t\t};\n\t\tthis.get_json = function (obj, options, flat) {\n\t\t\tvar i, j,\n\t\t\t\tm = this._model.data,\n\t\t\t\topt = options ? $.extend(true, {}, options, {no_id:false}) : {},\n\t\t\t\ttmp = parent.get_json.call(this, obj, opt, flat);\n\t\t\tif(tmp === false) { return false; }\n\t\t\tif($.isArray(tmp)) {\n\t\t\t\tfor(i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\ttmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : \"default\";\n\t\t\t\t\tif(options && options.no_id) {\n\t\t\t\t\t\tdelete tmp[i].id;\n\t\t\t\t\t\tif(tmp[i].li_attr && tmp[i].li_attr.id) {\n\t\t\t\t\t\t\tdelete tmp[i].li_attr.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp[i].a_attr && tmp[i].a_attr.id) {\n\t\t\t\t\t\t\tdelete tmp[i].a_attr.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : \"default\";\n\t\t\t\tif(options && options.no_id) {\n\t\t\t\t\ttmp = this._delete_ids(tmp);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn tmp;\n\t\t};\n\t\tthis._delete_ids = function (tmp) {\n\t\t\tif($.isArray(tmp)) {\n\t\t\t\tfor(var i = 0, j = tmp.length; i < j; i++) {\n\t\t\t\t\ttmp[i] = this._delete_ids(tmp[i]);\n\t\t\t\t}\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\tdelete tmp.id;\n\t\t\tif(tmp.li_attr && tmp.li_attr.id) {\n\t\t\t\tdelete tmp.li_attr.id;\n\t\t\t}\n\t\t\tif(tmp.a_attr && tmp.a_attr.id) {\n\t\t\t\tdelete tmp.a_attr.id;\n\t\t\t}\n\t\t\tif(tmp.children && $.isArray(tmp.children)) {\n\t\t\t\ttmp.children = this._delete_ids(tmp.children);\n\t\t\t}\n\t\t\treturn tmp;\n\t\t};\n\t\tthis.check = function (chk, obj, par, pos, more) {\n\t\t\tif(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tvar m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j;\n\t\t\tm = m && m._model && m._model.data ? m._model.data : null;\n\t\t\tswitch(chk) {\n\t\t\t\tcase \"create_node\":\n\t\t\t\tcase \"move_node\":\n\t\t\t\tcase \"copy_node\":\n\t\t\t\t\tif(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {\n\t\t\t\t\t\ttmp = this.get_rules(par);\n\t\t\t\t\t\tif(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {\n\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(m && obj.children_d && obj.parents) {\n\t\t\t\t\t\t\td = 0;\n\t\t\t\t\t\t\tfor(i = 0, j = obj.children_d.length; i < j; i++) {\n\t\t\t\t\t\t\t\td = Math.max(d, m[obj.children_d[i]].parents.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td = d - obj.parents.length + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(d <= 0 || d === undefined) { d = 1; }\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {\n\t\t\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpar = this.get_node(par.parent);\n\t\t\t\t\t\t\ttmp = this.get_rules(par);\n\t\t\t\t\t\t\td++;\n\t\t\t\t\t\t} while(par);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\t/**\n\t\t * used to retrieve the type settings object for a node\n\t\t * @name get_rules(obj)\n\t\t * @param {mixed} obj the node to find the rules for\n\t\t * @return {Object}\n\t\t * @plugin types\n\t\t */\n\t\tthis.get_rules = function (obj) {\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!obj) { return false; }\n\t\t\tvar tmp = this.get_type(obj, true);\n\t\t\tif(tmp.max_depth === undefined) { tmp.max_depth = -1; }\n\t\t\tif(tmp.max_children === undefined) { tmp.max_children = -1; }\n\t\t\tif(tmp.valid_children === undefined) { tmp.valid_children = -1; }\n\t\t\treturn tmp;\n\t\t};\n\t\t/**\n\t\t * used to retrieve the type string or settings object for a node\n\t\t * @name get_type(obj [, rules])\n\t\t * @param {mixed} obj the node to find the rules for\n\t\t * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned\n\t\t * @return {String|Object}\n\t\t * @plugin types\n\t\t */\n\t\tthis.get_type = function (obj, rules) {\n\t\t\tobj = this.get_node(obj);\n\t\t\treturn (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);\n\t\t};\n\t\t/**\n\t\t * used to change a node's type\n\t\t * @name set_type(obj, type)\n\t\t * @param {mixed} obj the node to change\n\t\t * @param {String} type the new type\n\t\t * @plugin types\n\t\t */\n\t\tthis.set_type = function (obj, type) {\n\t\t\tvar m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;\n\t\t\tif($.isArray(obj)) {\n\t\t\t\tobj = obj.slice();\n\t\t\t\tfor(t1 = 0, t2 = obj.length; t1 < t2; t1++) {\n\t\t\t\t\tthis.set_type(obj[t1], type);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tt = this.settings.types;\n\t\t\tobj = this.get_node(obj);\n\t\t\tif(!t[type] || !obj) { return false; }\n\t\t\td = this.get_node(obj, true);\n\t\t\tif (d && d.length) {\n\t\t\t\ta = d.children('.jstree-anchor');\n\t\t\t}\n\t\t\told_type = obj.type;\n\t\t\told_icon = this.get_icon(obj);\n\t\t\tobj.type = type;\n\t\t\tif(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {\n\t\t\t\tthis.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);\n\t\t\t}\n\n\t\t\t// remove old type props\n\t\t\tif(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {\n\t\t\t\tfor (k in t[old_type].li_attr) {\n\t\t\t\t\tif (t[old_type].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');\n\t\t\t\t\t\t\tif (d) { d.removeClass(t[old_type].li_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {\n\t\t\t\t\t\t\tm[obj.id].li_attr[k] = null;\n\t\t\t\t\t\t\tif (d) { d.removeAttr(k); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {\n\t\t\t\tfor (k in t[old_type].a_attr) {\n\t\t\t\t\tif (t[old_type].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');\n\t\t\t\t\t\t\tif (a) { a.removeClass(t[old_type].a_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {\n\t\t\t\t\t\t\tif (k === 'href') {\n\t\t\t\t\t\t\t\tm[obj.id].a_attr[k] = '#';\n\t\t\t\t\t\t\t\tif (a) { a.attr('href', '#'); }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdelete m[obj.id].a_attr[k];\n\t\t\t\t\t\t\t\tif (a) { a.removeAttr(k); }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// add new props\n\t\t\tif(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {\n\t\t\t\tfor (k in t[type].li_attr) {\n\t\t\t\t\tif (t[type].li_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].li_attr[k] === undefined) {\n\t\t\t\t\t\t\tm[obj.id].li_attr[k] = t[type].li_attr[k];\n\t\t\t\t\t\t\tif (d) {\n\t\t\t\t\t\t\t\tif (k === 'class') {\n\t\t\t\t\t\t\t\t\td.addClass(t[type].li_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\td.attr(k, t[type].li_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];\n\t\t\t\t\t\t\tif (d) { d.addClass(t[type].li_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {\n\t\t\t\tfor (k in t[type].a_attr) {\n\t\t\t\t\tif (t[type].a_attr.hasOwnProperty(k)) {\n\t\t\t\t\t\tif (k === 'id') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m[obj.id].a_attr[k] === undefined) {\n\t\t\t\t\t\t\tm[obj.id].a_attr[k] = t[type].a_attr[k];\n\t\t\t\t\t\t\tif (a) {\n\t\t\t\t\t\t\t\tif (k === 'class') {\n\t\t\t\t\t\t\t\t\ta.addClass(t[type].a_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\ta.attr(k, t[type].a_attr[k]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'href' && m[obj.id].a_attr[k] === '#') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['href'] = t[type].a_attr['href'];\n\t\t\t\t\t\t\tif (a) { a.attr('href', t[type].a_attr['href']); }\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (k === 'class') {\n\t\t\t\t\t\t\tm[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];\n\t\t\t\t\t\t\tif (a) { a.addClass(t[type].a_attr[k]); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\t};\n\t// include the types plugin by default\n\t// $.jstree.defaults.plugins.push(\"types\");\n\n\n/**\n * ### Unique plugin\n *\n * Enforces that no nodes with the same name can coexist as siblings.\n */\n\n\t/**\n\t * stores all defaults for the unique plugin\n\t * @name $.jstree.defaults.unique\n\t * @plugin unique\n\t */\n\t$.jstree.defaults.unique = {\n\t\t/**\n\t\t * Indicates if the comparison should be case sensitive. Default is `false`.\n\t\t * @name $.jstree.defaults.unique.case_sensitive\n\t\t * @plugin unique\n\t\t */\n\t\tcase_sensitive : false,\n\t\t/**\n\t\t * Indicates if white space should be trimmed before the comparison. Default is `false`.\n\t\t * @name $.jstree.defaults.unique.trim_whitespace\n\t\t * @plugin unique\n\t\t */\n\t\ttrim_whitespace : false,\n\t\t/**\n\t\t * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`.\n\t\t * @name $.jstree.defaults.unique.duplicate\n\t\t * @plugin unique\n\t\t */\n\t\tduplicate : function (name, counter) {\n\t\t\treturn name + ' (' + counter + ')';\n\t\t}\n\t};\n\n\t$.jstree.plugins.unique = function (options, parent) {\n\t\tthis.check = function (chk, obj, par, pos, more) {\n\t\t\tif(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }\n\t\t\tobj = obj && obj.id ? obj : this.get_node(obj);\n\t\t\tpar = par && par.id ? par : this.get_node(par);\n\t\t\tif(!par || !par.children) { return true; }\n\t\t\tvar n = chk === \"rename_node\" ? pos : obj.text,\n\t\t\t\tc = [],\n\t\t\t\ts = this.settings.unique.case_sensitive,\n\t\t\t\tw = this.settings.unique.trim_whitespace,\n\t\t\t\tm = this._model.data, i, j, t;\n\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\tt = m[par.children[i]].text;\n\t\t\t\tif (!s) {\n\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t}\n\t\t\t\tif (w) {\n\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t}\n\t\t\t\tc.push(t);\n\t\t\t}\n\t\t\tif(!s) { n = n.toLowerCase(); }\n\t\t\tif (w) { n = n.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, ''); }\n\t\t\tswitch(chk) {\n\t\t\t\tcase \"delete_node\":\n\t\t\t\t\treturn true;\n\t\t\t\tcase \"rename_node\":\n\t\t\t\t\tt = obj.text || '';\n\t\t\t\t\tif (!s) {\n\t\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tif (w) {\n\t\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t\t}\n\t\t\t\t\ti = ($.inArray(n, c) === -1 || (obj.text && t === n));\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"create_node\":\n\t\t\t\t\ti = ($.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"copy_node\":\n\t\t\t\t\ti = ($.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t\tcase \"move_node\":\n\t\t\t\t\ti = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1);\n\t\t\t\t\tif(!i) {\n\t\t\t\t\t\tthis._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };\n\t\t\t\t\t}\n\t\t\t\t\treturn i;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tthis.create_node = function (par, node, pos, callback, is_loaded) {\n\t\t\tif(!node || node.text === undefined) {\n\t\t\t\tif(par === null) {\n\t\t\t\t\tpar = $.jstree.root;\n\t\t\t\t}\n\t\t\t\tpar = this.get_node(par);\n\t\t\t\tif(!par) {\n\t\t\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t\t\t}\n\t\t\t\tpos = pos === undefined ? \"last\" : pos;\n\t\t\t\tif(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {\n\t\t\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t\t\t}\n\t\t\t\tif(!node) { node = {}; }\n\t\t\t\tvar tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t;\n\t\t\t\tn = tmp = this.get_string('New node');\n\t\t\t\tdpc = [];\n\t\t\t\tfor(i = 0, j = par.children.length; i < j; i++) {\n\t\t\t\t\tt = m[par.children[i]].text;\n\t\t\t\t\tif (!s) {\n\t\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tif (w) {\n\t\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t\t}\n\t\t\t\t\tdpc.push(t);\n\t\t\t\t}\n\t\t\t\ti = 1;\n\t\t\t\tt = n;\n\t\t\t\tif (!s) {\n\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t}\n\t\t\t\tif (w) {\n\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t}\n\t\t\t\twhile($.inArray(t, dpc) !== -1) {\n\t\t\t\t\tn = cb.call(this, tmp, (++i)).toString();\n\t\t\t\t\tt = n;\n\t\t\t\t\tif (!s) {\n\t\t\t\t\t\tt = t.toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\tif (w) {\n\t\t\t\t\t\tt = t.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnode.text = n;\n\t\t\t}\n\t\t\treturn parent.create_node.call(this, par, node, pos, callback, is_loaded);\n\t\t};\n\t};\n\n\t// include the unique plugin by default\n\t// $.jstree.defaults.plugins.push(\"unique\");\n\n\n/**\n * ### Wholerow plugin\n *\n * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers.\n */\n\n\tvar div = document.createElement('DIV');\n\tdiv.setAttribute('unselectable','on');\n\tdiv.setAttribute('role','presentation');\n\tdiv.className = 'jstree-wholerow';\n\tdiv.innerHTML = '&#160;';\n\t$.jstree.plugins.wholerow = function (options, parent) {\n\t\tthis.bind = function () {\n\t\t\tparent.bind.call(this);\n\n\t\t\tthis.element\n\t\t\t\t.on('ready.jstree set_state.jstree', $.proxy(function () {\n\t\t\t\t\t\tthis.hide_dots();\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"init.jstree loading.jstree ready.jstree\", $.proxy(function () {\n\t\t\t\t\t\t//div.style.height = this._data.core.li_height + 'px';\n\t\t\t\t\t\tthis.get_container_ul().addClass('jstree-wholerow-ul');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"deselect_all.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"changed.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked');\n\t\t\t\t\t\tvar tmp = false, i, j;\n\t\t\t\t\t\tfor(i = 0, j = data.selected.length; i < j; i++) {\n\t\t\t\t\t\t\ttmp = this.get_node(data.selected[i], true);\n\t\t\t\t\t\t\tif(tmp && tmp.length) {\n\t\t\t\t\t\t\t\ttmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"open_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tthis.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"hover_node.jstree dehover_node.jstree\", $.proxy(function (e, data) {\n\t\t\t\t\t\tif(e.type === \"hover_node\" && this.is_disabled(data.node)) { return; }\n\t\t\t\t\t\tthis.get_node(data.node, true).children('.jstree-wholerow')[e.type === \"hover_node\"?\"addClass\":\"removeClass\"]('jstree-wholerow-hovered');\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"contextmenu.jstree\", \".jstree-wholerow\", $.proxy(function (e) {\n\t\t\t\t\t\tif (this._data.contextmenu) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tvar tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY });\n\t\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this))\n\t\t\t\t/*!\n\t\t\t\t.on(\"mousedown.jstree touchstart.jstree\", \".jstree-wholerow\", function (e) {\n\t\t\t\t\t\tif(e.target === e.currentTarget) {\n\t\t\t\t\t\t\tvar a = $(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\");\n\t\t\t\t\t\t\te.target = a[0];\n\t\t\t\t\t\t\ta.trigger(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t*/\n\t\t\t\t.on(\"click.jstree\", \".jstree-wholerow\", function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tvar tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp).focus();\n\t\t\t\t\t})\n\t\t\t\t.on(\"dblclick.jstree\", \".jstree-wholerow\", function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tvar tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp).focus();\n\t\t\t\t\t})\n\t\t\t\t.on(\"click.jstree\", \".jstree-leaf > .jstree-ocl\", $.proxy(function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tvar tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey });\n\t\t\t\t\t\t$(e.currentTarget).closest(\".jstree-node\").children(\".jstree-anchor\").first().trigger(tmp).focus();\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mouseover.jstree\", \".jstree-wholerow, .jstree-icon\", $.proxy(function (e) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tif(!this.is_disabled(e.currentTarget)) {\n\t\t\t\t\t\t\tthis.hover_node(e.currentTarget);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}, this))\n\t\t\t\t.on(\"mouseleave.jstree\", \".jstree-node\", $.proxy(function (e) {\n\t\t\t\t\t\tthis.dehover_node(e.currentTarget);\n\t\t\t\t\t}, this));\n\t\t};\n\t\tthis.teardown = function () {\n\t\t\tif(this.settings.wholerow) {\n\t\t\t\tthis.element.find(\".jstree-wholerow\").remove();\n\t\t\t}\n\t\t\tparent.teardown.call(this);\n\t\t};\n\t\tthis.redraw_node = function(obj, deep, callback, force_render) {\n\t\t\tobj = parent.redraw_node.apply(this, arguments);\n\t\t\tif(obj) {\n\t\t\t\tvar tmp = div.cloneNode(true);\n\t\t\t\t//tmp.style.height = this._data.core.li_height + 'px';\n\t\t\t\tif($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; }\n\t\t\t\tif(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; }\n\t\t\t\tobj.insertBefore(tmp, obj.childNodes[0]);\n\t\t\t}\n\t\t\treturn obj;\n\t\t};\n\t};\n\t// include the wholerow plugin by default\n\t// $.jstree.defaults.plugins.push(\"wholerow\");\n\tif(window.customElements && Object && Object.create) {\n\t\tvar proto = Object.create(HTMLElement.prototype);\n\t\tproto.createdCallback = function () {\n\t\t\tvar c = { core : {}, plugins : [] }, i;\n\t\t\tfor(i in $.jstree.plugins) {\n\t\t\t\tif($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) {\n\t\t\t\t\tc.plugins.push(i);\n\t\t\t\t\tif(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) {\n\t\t\t\t\t\tc[i] = JSON.parse(this.getAttribute(i));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(i in $.jstree.defaults.core) {\n\t\t\t\tif($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) {\n\t\t\t\t\tc.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i);\n\t\t\t\t}\n\t\t\t}\n\t\t\t$(this).jstree(c);\n\t\t};\n\t\t// proto.attributeChangedCallback = function (name, previous, value) { };\n\t\ttry {\n\t\t\twindow.customElements.define(\"vakata-jstree\", function() {}, { prototype: proto });\n\t\t} catch (ignore) { }\n\t}\n\n}));"
  },
  {
    "path": "libs/jstree/themes/mixed/style.css",
    "content": "/* jsTree default theme */\n.jstree-node,\n.jstree-children,\n.jstree-container-ul {\n  display: block;\n  margin: 0;\n  padding: 0;\n  list-style-type: none;\n  list-style-image: none;\n}\n.jstree-node {\n  white-space: nowrap;\n}\n.jstree-anchor {\n  display: inline-block;\n  color: black;\n  white-space: nowrap;\n  padding: 0 4px 0 1px;\n  margin: 0;\n  vertical-align: top;\n}\n.jstree-anchor:focus {\n  outline: 0;\n}\n.jstree-anchor,\n.jstree-anchor:link,\n.jstree-anchor:visited,\n.jstree-anchor:hover,\n.jstree-anchor:active {\n  text-decoration: none;\n  color: inherit;\n}\n.jstree-icon {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n  text-align: center;\n}\n.jstree-icon:empty {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0;\n  padding: 0;\n  vertical-align: top;\n  text-align: center;\n}\n.jstree-ocl {\n  cursor: pointer;\n}\n.jstree-leaf > .jstree-ocl {\n  cursor: default;\n}\n.jstree .jstree-open > .jstree-children {\n  display: block;\n}\n.jstree .jstree-closed > .jstree-children,\n.jstree .jstree-leaf > .jstree-children {\n  display: none;\n}\n.jstree-anchor > .jstree-themeicon {\n  margin-right: 2px;\n}\n.jstree-no-icons .jstree-themeicon,\n.jstree-anchor > .jstree-themeicon-hidden {\n  display: none;\n}\n.jstree-hidden,\n.jstree-node.jstree-hidden {\n  display: none;\n}\n.jstree-rtl .jstree-anchor {\n  padding: 0 1px 0 4px;\n}\n.jstree-rtl .jstree-anchor > .jstree-themeicon {\n  margin-left: 2px;\n  margin-right: 0;\n}\n.jstree-rtl .jstree-node {\n  margin-left: 0;\n}\n.jstree-rtl .jstree-container-ul > .jstree-node {\n  margin-right: 0;\n}\n.jstree-wholerow-ul {\n  position: relative;\n  display: inline-block;\n  min-width: 100%;\n}\n.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {\n  cursor: pointer;\n}\n.jstree-wholerow-ul .jstree-anchor,\n.jstree-wholerow-ul .jstree-icon {\n  position: relative;\n}\n.jstree-wholerow-ul .jstree-wholerow {\n  width: 100%;\n  cursor: pointer;\n  position: absolute;\n  left: 0;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.jstree-contextmenu .jstree-anchor {\n  -webkit-user-select: none;\n  /* disable selection/Copy of UIWebView */\n  -webkit-touch-callout: none;\n  /* disable the IOS popup when long-press on a link */\n}\n.vakata-context {\n  display: none;\n}\n.vakata-context,\n.vakata-context ul {\n  margin: 0;\n  padding: 2px;\n  position: absolute;\n  background: #f5f5f5;\n  border: 1px solid #979797;\n  box-shadow: 2px 2px 2px #999999;\n}\n.vakata-context ul {\n  list-style: none;\n  left: 100%;\n  margin-top: -2.7em;\n  margin-left: -4px;\n}\n.vakata-context .vakata-context-right ul {\n  left: auto;\n  right: 100%;\n  margin-left: auto;\n  margin-right: -4px;\n}\n.vakata-context li {\n  list-style: none;\n}\n.vakata-context li > a {\n  display: block;\n  padding: 0 2em 0 2em;\n  text-decoration: none;\n  width: auto;\n  color: black;\n  white-space: nowrap;\n  line-height: 2.4em;\n  text-shadow: 1px 1px 0 white;\n  border-radius: 1px;\n}\n.vakata-context li > a:hover {\n  position: relative;\n  background-color: #e8eff7;\n  box-shadow: 0 0 2px #0a6aa1;\n}\n.vakata-context li > a.vakata-context-parent {\n  background-image: url(\"data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==\");\n  background-position: right center;\n  background-repeat: no-repeat;\n}\n.vakata-context li > a:focus {\n  outline: 0;\n}\n.vakata-context .vakata-context-hover > a {\n  position: relative;\n  background-color: #e8eff7;\n  box-shadow: 0 0 2px #0a6aa1;\n}\n.vakata-context .vakata-context-separator > a,\n.vakata-context .vakata-context-separator > a:hover {\n  background: white;\n  border: 0;\n  border-top: 1px solid #e2e3e3;\n  height: 1px;\n  min-height: 1px;\n  max-height: 1px;\n  padding: 0;\n  margin: 0 0 0 2.4em;\n  border-left: 1px solid #e0e0e0;\n  text-shadow: 0 0 0 transparent;\n  box-shadow: 0 0 0 transparent;\n  border-radius: 0;\n}\n.vakata-context .vakata-contextmenu-disabled a,\n.vakata-context .vakata-contextmenu-disabled a:hover {\n  color: silver;\n  background-color: transparent;\n  border: 0;\n  box-shadow: 0 0 0;\n}\n.vakata-context li > a > i {\n  text-decoration: none;\n  display: inline-block;\n  width: 2.4em;\n  height: 2.4em;\n  background: transparent;\n  margin: 0 0 0 -2em;\n  vertical-align: top;\n  text-align: center;\n  line-height: 2.4em;\n}\n.vakata-context li > a > i:empty {\n  width: 2.4em;\n  line-height: 2.4em;\n}\n.vakata-context li > a .vakata-contextmenu-sep {\n  display: inline-block;\n  width: 1px;\n  height: 2.4em;\n  background: white;\n  margin: 0 0.5em 0 0;\n  border-left: 1px solid #e2e3e3;\n}\n.vakata-context .vakata-contextmenu-shortcut {\n  font-size: 0.8em;\n  color: silver;\n  opacity: 0.5;\n  display: none;\n}\n.vakata-context-rtl ul {\n  left: auto;\n  right: 100%;\n  margin-left: auto;\n  margin-right: -4px;\n}\n.vakata-context-rtl li > a.vakata-context-parent {\n  background-image: url(\"data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7\");\n  background-position: left center;\n  background-repeat: no-repeat;\n}\n.vakata-context-rtl .vakata-context-separator > a {\n  margin: 0 2.4em 0 0;\n  border-left: 0;\n  border-right: 1px solid #e2e3e3;\n}\n.vakata-context-rtl .vakata-context-left ul {\n  right: auto;\n  left: 100%;\n  margin-left: -4px;\n  margin-right: auto;\n}\n.vakata-context-rtl li > a > i {\n  margin: 0 -2em 0 0;\n}\n.vakata-context-rtl li > a .vakata-contextmenu-sep {\n  margin: 0 0 0 0.5em;\n  border-left-color: white;\n  background: #e2e3e3;\n}\n#jstree-marker {\n  position: absolute;\n  top: 0;\n  left: 0;\n  margin: -5px 0 0 0;\n  padding: 0;\n  border-right: 0;\n  border-top: 5px solid transparent;\n  border-bottom: 5px solid transparent;\n  border-left: 5px solid;\n  width: 0;\n  height: 0;\n  font-size: 0;\n  line-height: 0;\n}\n#jstree-dnd {\n  line-height: 16px;\n  margin: 0;\n  padding: 4px;\n}\n#jstree-dnd .jstree-icon,\n#jstree-dnd .jstree-copy {\n  display: inline-block;\n  text-decoration: none;\n  margin: 0 2px 0 0;\n  padding: 0;\n  width: 16px;\n  height: 16px;\n}\n#jstree-dnd .jstree-ok {\n  background: green;\n}\n#jstree-dnd .jstree-er {\n  background: red;\n}\n#jstree-dnd .jstree-copy {\n  margin: 0 2px 0 2px;\n}\n.jstree-default .jstree-node,\n.jstree-default .jstree-icon {\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n.jstree-default .jstree-anchor,\n.jstree-default .jstree-animated,\n.jstree-default .jstree-wholerow {\n  transition: background-color 0.15s, box-shadow 0.15s;\n}\n.jstree-default .jstree-hovered {\n  background: #e7f4f9;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #cccccc;\n}\n.jstree-default .jstree-context {\n  background: #e7f4f9;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #cccccc;\n}\n.jstree-default .jstree-clicked {\n  background: #beebff;\n  border-radius: 2px;\n  box-shadow: inset 0 0 1px #999999;\n}\n.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon {\n  display: none;\n}\n.jstree-default .jstree-disabled {\n  background: transparent;\n  color: #666666;\n}\n.jstree-default .jstree-disabled.jstree-hovered {\n  background: transparent;\n  box-shadow: none;\n}\n.jstree-default .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default .jstree-disabled > .jstree-icon {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default .jstree-search {\n  font-style: italic;\n  color: #8b0000;\n  font-weight: bold;\n}\n.jstree-default .jstree-no-checkboxes .jstree-checkbox {\n  display: none !important;\n}\n.jstree-default.jstree-checkbox-no-clicked .jstree-clicked {\n  background: transparent;\n  box-shadow: none;\n}\n.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {\n  background: #e7f4f9;\n}\n.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {\n  background: transparent;\n}\n.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {\n  background: #e7f4f9;\n}\n.jstree-default > .jstree-striped {\n  min-width: 100%;\n  display: inline-block;\n  background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==\") left top repeat;\n}\n.jstree-default > .jstree-wholerow-ul .jstree-hovered,\n.jstree-default > .jstree-wholerow-ul .jstree-clicked {\n  background: transparent;\n  box-shadow: none;\n  border-radius: 0;\n}\n.jstree-default .jstree-wholerow {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.jstree-default .jstree-wholerow-hovered {\n  background: #e7f4f9;\n}\n.jstree-default .jstree-wholerow-clicked {\n  background: #beebff;\n  background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%);\n  background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%);\n}\n.jstree-default .jstree-node {\n  min-height: 24px;\n  line-height: 24px;\n  margin-left: 24px;\n  min-width: 24px;\n}\n.jstree-default .jstree-anchor {\n  line-height: 24px;\n  height: 24px;\n}\n.jstree-default .jstree-icon {\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n.jstree-default .jstree-icon:empty {\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n.jstree-default.jstree-rtl .jstree-node {\n  margin-right: 24px;\n}\n.jstree-default .jstree-wholerow {\n  height: 24px;\n}\n.jstree-default .jstree-node,\n.jstree-default .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default .jstree-node {\n  background-position: -292px -4px;\n  background-repeat: repeat-y;\n}\n.jstree-default .jstree-last {\n  background: transparent;\n}\n.jstree-default .jstree-open > .jstree-ocl {\n  background-position: -132px -4px;\n}\n.jstree-default .jstree-closed > .jstree-ocl {\n  background-position: -100px -4px;\n}\n.jstree-default .jstree-leaf > .jstree-ocl {\n  background-position: -68px -4px;\n}\n.jstree-default .jstree-themeicon {\n  background-position: -260px -4px;\n}\n.jstree-default > .jstree-no-dots .jstree-node,\n.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -36px -4px;\n}\n.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -4px -4px;\n}\n.jstree-default .jstree-disabled {\n  background: transparent;\n}\n.jstree-default .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default .jstree-checkbox {\n  background-position: -164px -4px;\n}\n.jstree-default .jstree-checkbox:hover {\n  background-position: -164px -36px;\n}\n.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default .jstree-checked > .jstree-checkbox {\n  background-position: -228px -4px;\n}\n.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default .jstree-checked > .jstree-checkbox:hover {\n  background-position: -228px -36px;\n}\n.jstree-default .jstree-anchor > .jstree-undetermined {\n  background-position: -196px -4px;\n}\n.jstree-default .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -196px -36px;\n}\n.jstree-default .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default > .jstree-striped {\n  background-size: auto 48px;\n}\n.jstree-default.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -132px -36px;\n}\n.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -100px -36px;\n}\n.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -68px -36px;\n}\n.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -36px -36px;\n}\n.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -4px -36px;\n}\n.jstree-default .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default .jstree-file {\n  background: url(\"32px.png\") -100px -68px no-repeat;\n}\n.jstree-default .jstree-folder {\n  background: url(\"32px.png\") -260px -4px no-repeat;\n}\n.jstree-default > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default {\n  line-height: 24px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default .jstree-ok,\n#jstree-dnd.jstree-default .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default i {\n  background: transparent;\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n}\n#jstree-dnd.jstree-default .jstree-ok {\n  background-position: -4px -68px;\n}\n#jstree-dnd.jstree-default .jstree-er {\n  background-position: -36px -68px;\n}\n.jstree-default .jstree-ellipsis {\n  overflow: hidden;\n}\n.jstree-default .jstree-ellipsis .jstree-anchor {\n  width: calc(100% - 29px);\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor {\n  width: calc(100% - 5px);\n}\n.jstree-default.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n}\n.jstree-default.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-small .jstree-node {\n  min-height: 18px;\n  line-height: 18px;\n  margin-left: 18px;\n  min-width: 18px;\n}\n.jstree-default-small .jstree-anchor {\n  line-height: 18px;\n  height: 18px;\n}\n.jstree-default-small .jstree-icon {\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n.jstree-default-small .jstree-icon:empty {\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n.jstree-default-small.jstree-rtl .jstree-node {\n  margin-right: 18px;\n}\n.jstree-default-small .jstree-wholerow {\n  height: 18px;\n}\n.jstree-default-small .jstree-node,\n.jstree-default-small .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default-small .jstree-node {\n  background-position: -295px -7px;\n  background-repeat: repeat-y;\n}\n.jstree-default-small .jstree-last {\n  background: transparent;\n}\n.jstree-default-small .jstree-open > .jstree-ocl {\n  background-position: -135px -7px;\n}\n.jstree-default-small .jstree-closed > .jstree-ocl {\n  background-position: -103px -7px;\n}\n.jstree-default-small .jstree-leaf > .jstree-ocl {\n  background-position: -71px -7px;\n}\n.jstree-default-small .jstree-themeicon {\n  background-position: -263px -7px;\n}\n.jstree-default-small > .jstree-no-dots .jstree-node,\n.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -39px -7px;\n}\n.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -7px -7px;\n}\n.jstree-default-small .jstree-disabled {\n  background: transparent;\n}\n.jstree-default-small .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default-small .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default-small .jstree-checkbox {\n  background-position: -167px -7px;\n}\n.jstree-default-small .jstree-checkbox:hover {\n  background-position: -167px -39px;\n}\n.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default-small .jstree-checked > .jstree-checkbox {\n  background-position: -231px -7px;\n}\n.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default-small .jstree-checked > .jstree-checkbox:hover {\n  background-position: -231px -39px;\n}\n.jstree-default-small .jstree-anchor > .jstree-undetermined {\n  background-position: -199px -7px;\n}\n.jstree-default-small .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -199px -39px;\n}\n.jstree-default-small .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default-small > .jstree-striped {\n  background-size: auto 36px;\n}\n.jstree-default-small.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default-small.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -135px -39px;\n}\n.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -103px -39px;\n}\n.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -71px -39px;\n}\n.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -39px -39px;\n}\n.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: -7px -39px;\n}\n.jstree-default-small .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default-small .jstree-file {\n  background: url(\"32px.png\") -103px -71px no-repeat;\n}\n.jstree-default-small .jstree-folder {\n  background: url(\"32px.png\") -263px -7px no-repeat;\n}\n.jstree-default-small > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default-small {\n  line-height: 18px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default-small .jstree-ok,\n#jstree-dnd.jstree-default-small .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default-small i {\n  background: transparent;\n  width: 18px;\n  height: 18px;\n  line-height: 18px;\n}\n#jstree-dnd.jstree-default-small .jstree-ok {\n  background-position: -7px -71px;\n}\n#jstree-dnd.jstree-default-small .jstree-er {\n  background-position: -39px -71px;\n}\n.jstree-default-small .jstree-ellipsis {\n  overflow: hidden;\n}\n.jstree-default-small .jstree-ellipsis .jstree-anchor {\n  width: calc(100% - 23px);\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor {\n  width: calc(100% - 5px);\n}\n.jstree-default-small.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==\");\n}\n.jstree-default-small.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-large .jstree-node {\n  min-height: 32px;\n  line-height: 32px;\n  margin-left: 32px;\n  min-width: 32px;\n}\n.jstree-default-large .jstree-anchor {\n  line-height: 32px;\n  height: 32px;\n}\n.jstree-default-large .jstree-icon {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n.jstree-default-large .jstree-icon:empty {\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n.jstree-default-large.jstree-rtl .jstree-node {\n  margin-right: 32px;\n}\n.jstree-default-large .jstree-wholerow {\n  height: 32px;\n}\n.jstree-default-large .jstree-node,\n.jstree-default-large .jstree-icon {\n  background-image: url(\"32px.png\");\n}\n.jstree-default-large .jstree-node {\n  background-position: -288px 0px;\n  background-repeat: repeat-y;\n}\n.jstree-default-large .jstree-last {\n  background: transparent;\n}\n.jstree-default-large .jstree-open > .jstree-ocl {\n  background-position: -128px 0px;\n}\n.jstree-default-large .jstree-closed > .jstree-ocl {\n  background-position: -96px 0px;\n}\n.jstree-default-large .jstree-leaf > .jstree-ocl {\n  background-position: -64px 0px;\n}\n.jstree-default-large .jstree-themeicon {\n  background-position: -256px 0px;\n}\n.jstree-default-large > .jstree-no-dots .jstree-node,\n.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -32px 0px;\n}\n.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: 0px 0px;\n}\n.jstree-default-large .jstree-disabled {\n  background: transparent;\n}\n.jstree-default-large .jstree-disabled.jstree-hovered {\n  background: transparent;\n}\n.jstree-default-large .jstree-disabled.jstree-clicked {\n  background: #efefef;\n}\n.jstree-default-large .jstree-checkbox {\n  background-position: -160px 0px;\n}\n.jstree-default-large .jstree-checkbox:hover {\n  background-position: -160px -32px;\n}\n.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n.jstree-default-large .jstree-checked > .jstree-checkbox {\n  background-position: -224px 0px;\n}\n.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n.jstree-default-large .jstree-checked > .jstree-checkbox:hover {\n  background-position: -224px -32px;\n}\n.jstree-default-large .jstree-anchor > .jstree-undetermined {\n  background-position: -192px 0px;\n}\n.jstree-default-large .jstree-anchor > .jstree-undetermined:hover {\n  background-position: -192px -32px;\n}\n.jstree-default-large .jstree-checkbox-disabled {\n  opacity: 0.8;\n  filter: url(\"data:image/svg+xml;utf8,<svg xmlns=\\'http://www.w3.org/2000/svg\\'><filter id=\\'jstree-grayscale\\'><feColorMatrix type=\\'matrix\\' values=\\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\\'/></filter></svg>#jstree-grayscale\");\n  /* Firefox 10+ */\n  filter: gray;\n  /* IE6-9 */\n  -webkit-filter: grayscale(100%);\n  /* Chrome 19+ & Safari 6+ */\n}\n.jstree-default-large > .jstree-striped {\n  background-size: auto 64px;\n}\n.jstree-default-large.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==\");\n  background-position: 100% 1px;\n  background-repeat: repeat-y;\n}\n.jstree-default-large.jstree-rtl .jstree-last {\n  background: transparent;\n}\n.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl {\n  background-position: -128px -32px;\n}\n.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl {\n  background-position: -96px -32px;\n}\n.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl {\n  background-position: -64px -32px;\n}\n.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node,\n.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {\n  background: transparent;\n}\n.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {\n  background-position: -32px -32px;\n}\n.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {\n  background-position: 0px -32px;\n}\n.jstree-default-large .jstree-themeicon-custom {\n  background-color: transparent;\n  background-image: none;\n  background-position: 0 0;\n}\n.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {\n  background: url(\"throbber.gif\") center center no-repeat;\n}\n.jstree-default-large .jstree-file {\n  background: url(\"32px.png\") -96px -64px no-repeat;\n}\n.jstree-default-large .jstree-folder {\n  background: url(\"32px.png\") -256px 0px no-repeat;\n}\n.jstree-default-large > .jstree-container-ul > .jstree-node {\n  margin-left: 0;\n  margin-right: 0;\n}\n#jstree-dnd.jstree-default-large {\n  line-height: 32px;\n  padding: 0 4px;\n}\n#jstree-dnd.jstree-default-large .jstree-ok,\n#jstree-dnd.jstree-default-large .jstree-er {\n  background-image: url(\"32px.png\");\n  background-repeat: no-repeat;\n  background-color: transparent;\n}\n#jstree-dnd.jstree-default-large i {\n  background: transparent;\n  width: 32px;\n  height: 32px;\n  line-height: 32px;\n}\n#jstree-dnd.jstree-default-large .jstree-ok {\n  background-position: 0px -64px;\n}\n#jstree-dnd.jstree-default-large .jstree-er {\n  background-position: -32px -64px;\n}\n.jstree-default-large .jstree-ellipsis {\n  overflow: hidden;\n}\n.jstree-default-large .jstree-ellipsis .jstree-anchor {\n  width: calc(100% - 37px);\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor {\n  width: calc(100% - 5px);\n}\n.jstree-default-large.jstree-rtl .jstree-node {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==\");\n}\n.jstree-default-large.jstree-rtl .jstree-last {\n  background: transparent;\n}\n@media (max-width: 768px) {\n  #jstree-dnd.jstree-dnd-responsive {\n    line-height: 40px;\n    font-weight: bold;\n    font-size: 1.1em;\n    text-shadow: 1px 1px white;\n  }\n  #jstree-dnd.jstree-dnd-responsive > i {\n    background: transparent;\n    width: 40px;\n    height: 40px;\n  }\n  #jstree-dnd.jstree-dnd-responsive > .jstree-ok {\n    background-image: url(\"40px.png\");\n    background-position: 0 -200px;\n    background-size: 120px 240px;\n  }\n  #jstree-dnd.jstree-dnd-responsive > .jstree-er {\n    background-image: url(\"40px.png\");\n    background-position: -40px -200px;\n    background-size: 120px 240px;\n  }\n  #jstree-marker.jstree-dnd-responsive {\n    border-left-width: 10px;\n    border-top-width: 10px;\n    border-bottom-width: 10px;\n    margin-top: -10px;\n  }\n}\n@media (max-width: 768px) {\n  .jstree-default-responsive {\n    /*\n\t.jstree-open > .jstree-ocl,\n\t.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }\n\t*/\n  }\n  .jstree-default-responsive .jstree-icon {\n    background-image: url(\"40px.png\");\n  }\n  .jstree-default-responsive .jstree-node,\n  .jstree-default-responsive .jstree-leaf > .jstree-ocl {\n    background: transparent;\n  }\n  .jstree-default-responsive .jstree-node {\n    min-height: 40px;\n    line-height: 40px;\n    margin-left: 40px;\n    min-width: 40px;\n    white-space: nowrap;\n  }\n  .jstree-default-responsive .jstree-anchor {\n    line-height: 40px;\n    height: 40px;\n  }\n  .jstree-default-responsive .jstree-icon,\n  .jstree-default-responsive .jstree-icon:empty {\n    width: 40px;\n    height: 40px;\n    line-height: 40px;\n  }\n  .jstree-default-responsive > .jstree-container-ul > .jstree-node {\n    margin-left: 0;\n  }\n  .jstree-default-responsive.jstree-rtl .jstree-node {\n    margin-left: 0;\n    margin-right: 40px;\n    background: transparent;\n  }\n  .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node {\n    margin-right: 0;\n  }\n  .jstree-default-responsive .jstree-ocl,\n  .jstree-default-responsive .jstree-themeicon,\n  .jstree-default-responsive .jstree-checkbox {\n    background-size: 120px 240px;\n  }\n  .jstree-default-responsive .jstree-leaf > .jstree-ocl,\n  .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl {\n    background: transparent;\n  }\n  .jstree-default-responsive .jstree-open > .jstree-ocl {\n    background-position: 0 0px !important;\n  }\n  .jstree-default-responsive .jstree-closed > .jstree-ocl {\n    background-position: 0 -40px !important;\n  }\n  .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl {\n    background-position: -40px 0px !important;\n  }\n  .jstree-default-responsive .jstree-themeicon {\n    background-position: -40px -40px;\n  }\n  .jstree-default-responsive .jstree-checkbox,\n  .jstree-default-responsive .jstree-checkbox:hover {\n    background-position: -40px -80px;\n  }\n  .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox,\n  .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover,\n  .jstree-default-responsive .jstree-checked > .jstree-checkbox,\n  .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover {\n    background-position: 0 -80px;\n  }\n  .jstree-default-responsive .jstree-anchor > .jstree-undetermined,\n  .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover {\n    background-position: 0 -120px;\n  }\n  .jstree-default-responsive .jstree-anchor {\n    font-weight: bold;\n    font-size: 1.1em;\n    text-shadow: 1px 1px white;\n  }\n  .jstree-default-responsive > .jstree-striped {\n    background: transparent;\n  }\n  .jstree-default-responsive .jstree-wholerow {\n    border-top: 1px solid rgba(255, 255, 255, 0.7);\n    border-bottom: 1px solid rgba(64, 64, 64, 0.2);\n    background: #ebebeb;\n    height: 40px;\n  }\n  .jstree-default-responsive .jstree-wholerow-hovered {\n    background: #e7f4f9;\n  }\n  .jstree-default-responsive .jstree-wholerow-clicked {\n    background: #beebff;\n  }\n  .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {\n    box-shadow: inset 0 -6px 3px -5px #666666;\n  }\n  .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {\n    box-shadow: inset 0 6px 3px -5px #666666;\n    border-top: 0;\n  }\n  .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {\n    box-shadow: none;\n  }\n  .jstree-default-responsive .jstree-node,\n  .jstree-default-responsive .jstree-icon,\n  .jstree-default-responsive .jstree-node > .jstree-ocl,\n  .jstree-default-responsive .jstree-themeicon,\n  .jstree-default-responsive .jstree-checkbox {\n    background-image: url(\"40px.png\");\n    background-size: 120px 240px;\n  }\n  .jstree-default-responsive .jstree-node {\n    background-position: -80px 0;\n    background-repeat: repeat-y;\n  }\n  .jstree-default-responsive .jstree-last {\n    background: transparent;\n  }\n  .jstree-default-responsive .jstree-leaf > .jstree-ocl {\n    background-position: -40px -120px;\n  }\n  .jstree-default-responsive .jstree-last > .jstree-ocl {\n    background-position: -40px -160px;\n  }\n  .jstree-default-responsive .jstree-themeicon-custom {\n    background-color: transparent;\n    background-image: none;\n    background-position: 0 0;\n  }\n  .jstree-default-responsive .jstree-file {\n    background: url(\"40px.png\") 0 -160px no-repeat;\n    background-size: 120px 240px;\n  }\n  .jstree-default-responsive .jstree-folder {\n    background: url(\"40px.png\") -40px -40px no-repeat;\n    background-size: 120px 240px;\n  }\n  .jstree-default-responsive > .jstree-container-ul > .jstree-node {\n    margin-left: 0;\n    margin-right: 0;\n  }\n}\n"
  },
  {
    "path": "libs/openlayers3/LICENSE",
    "content": "http://openlayers.org/\n\nCode licensed under the 2-Clause BSD. All documentation CC BY 3.0. Thanks to our sponsors.\nhttps://tldrlegal.com/license/bsd-2-clause-license-(freebsd)"
  },
  {
    "path": "libs/openlayers3/ol-deps.js",
    "content": "// This file was autogenerated by depswriter.py.\n// Please do not edit.\ngoog.addDependency('../../../ol.ext/pbf.js', ['ol.ext.pbf'], [], false);\ngoog.addDependency('../../../ol.ext/pixelworks.js', ['ol.ext.pixelworks'], [], false);\ngoog.addDependency('../../../ol.ext/rbush.js', ['ol.ext.rbush'], [], false);\ngoog.addDependency('../../../ol.ext/vectortile.js', ['ol.ext.vectortile'], [], false);\ngoog.addDependency('../../../ol/ol/animation.js', ['ol.animation'], ['ol', 'ol.PreRenderFunction', 'ol.ViewHint', 'ol.coordinate', 'ol.easing'], false);\ngoog.addDependency('../../../ol/ol/array.js', ['ol.array'], ['goog.array', 'goog.asserts'], false);\ngoog.addDependency('../../../ol/ol/attribution.js', ['ol.Attribution'], ['goog.math', 'ol.TileRange'], false);\ngoog.addDependency('../../../ol/ol/canvasfunction.js', ['ol.CanvasFunctionType'], [], false);\ngoog.addDependency('../../../ol/ol/centerconstraint.js', ['ol.CenterConstraint', 'ol.CenterConstraintType'], ['ol.math'], false);\ngoog.addDependency('../../../ol/ol/collection.js', ['ol.Collection', 'ol.CollectionEvent', 'ol.CollectionEventType'], ['goog.array', 'goog.events.Event', 'ol.Object'], false);\ngoog.addDependency('../../../ol/ol/color/color.js', ['ol.Color', 'ol.color'], ['goog.asserts', 'goog.color', 'goog.color.names', 'goog.vec.Mat4', 'ol', 'ol.math'], false);\ngoog.addDependency('../../../ol/ol/constraints.js', ['ol.Constraints'], ['ol.CenterConstraintType', 'ol.ResolutionConstraintType', 'ol.RotationConstraintType'], false);\ngoog.addDependency('../../../ol/ol/control/attributioncontrol.js', ['ol.control.Attribution'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.object', 'goog.style', 'ol', 'ol.Attribution', 'ol.control.Control', 'ol.css', 'ol.source.Tile'], false);\ngoog.addDependency('../../../ol/ol/control/control.js', ['ol.control.Control'], ['goog.dom', 'goog.events', 'ol', 'ol.MapEventType', 'ol.Object'], false);\ngoog.addDependency('../../../ol/ol/control/controldefaults.js', ['ol.control'], ['ol', 'ol.Collection', 'ol.control.Attribution', 'ol.control.Rotate', 'ol.control.Zoom'], false);\ngoog.addDependency('../../../ol/ol/control/fullscreencontrol.js', ['ol.control.FullScreen'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.dom.fullscreen', 'goog.dom.fullscreen.EventType', 'goog.events', 'goog.events.EventType', 'ol', 'ol.control.Control', 'ol.css'], false);\ngoog.addDependency('../../../ol/ol/control/mousepositioncontrol.js', ['ol.control.MousePosition'], ['goog.dom', 'goog.events', 'goog.events.EventType', 'ol.CoordinateFormatType', 'ol.Object', 'ol.Pixel', 'ol.TransformFunction', 'ol.control.Control', 'ol.proj', 'ol.proj.Projection'], false);\ngoog.addDependency('../../../ol/ol/control/overviewmapcontrol.js', ['ol.control.OverviewMap'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.math.Size', 'goog.style', 'ol', 'ol.Collection', 'ol.Map', 'ol.MapEventType', 'ol.Object', 'ol.ObjectEventType', 'ol.Overlay', 'ol.OverlayPositioning', 'ol.View', 'ol.ViewProperty', 'ol.control.Control', 'ol.coordinate', 'ol.css', 'ol.extent'], false);\ngoog.addDependency('../../../ol/ol/control/rotatecontrol.js', ['ol.control.Rotate'], ['goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'ol', 'ol.animation', 'ol.control.Control', 'ol.css', 'ol.easing'], false);\ngoog.addDependency('../../../ol/ol/control/scalelinecontrol.js', ['ol.control.ScaleLine', 'ol.control.ScaleLineProperty', 'ol.control.ScaleLineUnits'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.style', 'ol', 'ol.Object', 'ol.TransformFunction', 'ol.control.Control', 'ol.css', 'ol.math', 'ol.proj', 'ol.proj.METERS_PER_UNIT', 'ol.proj.Units', 'ol.sphere.NORMAL'], false);\ngoog.addDependency('../../../ol/ol/control/zoomcontrol.js', ['ol.control.Zoom'], ['goog.dom', 'goog.events', 'goog.events.EventType', 'ol.animation', 'ol.control.Control', 'ol.css', 'ol.easing'], false);\ngoog.addDependency('../../../ol/ol/control/zoomslidercontrol.js', ['ol.control.ZoomSlider'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.fx.DragEvent', 'goog.fx.Dragger', 'goog.fx.Dragger.EventType', 'goog.math.Rect', 'goog.style', 'ol.Size', 'ol.ViewHint', 'ol.animation', 'ol.control.Control', 'ol.css', 'ol.easing', 'ol.math'], false);\ngoog.addDependency('../../../ol/ol/control/zoomtoextentcontrol.js', ['ol.control.ZoomToExtent'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.events.EventType', 'ol.control.Control', 'ol.css'], false);\ngoog.addDependency('../../../ol/ol/coordinate.js', ['ol.Coordinate', 'ol.CoordinateFormatType', 'ol.coordinate'], ['goog.math', 'goog.string'], false);\ngoog.addDependency('../../../ol/ol/css.js', ['ol.css'], [], false);\ngoog.addDependency('../../../ol/ol/deviceorientation.js', ['ol.DeviceOrientation', 'ol.DeviceOrientationProperty'], ['goog.events', 'ol', 'ol.Object', 'ol.has', 'ol.math'], false);\ngoog.addDependency('../../../ol/ol/dom/dom.js', ['ol.dom', 'ol.dom.BrowserFeature'], ['goog.asserts', 'goog.dom', 'goog.userAgent', 'goog.vec.Mat4', 'ol'], false);\ngoog.addDependency('../../../ol/ol/easing.js', ['ol.easing'], [], false);\ngoog.addDependency('../../../ol/ol/events/condition.js', ['ol.events.ConditionType', 'ol.events.condition'], ['goog.asserts', 'goog.functions', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserPointerEvent'], false);\ngoog.addDependency('../../../ol/ol/extent.js', ['ol.Extent', 'ol.extent', 'ol.extent.Corner', 'ol.extent.Relationship'], ['goog.asserts', 'goog.vec.Mat4', 'ol.Coordinate', 'ol.Size', 'ol.TransformFunction'], false);\ngoog.addDependency('../../../ol/ol/feature.js', ['ol.Feature', 'ol.FeatureStyleFunction'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'ol', 'ol.Object', 'ol.geom.Geometry', 'ol.style.Style'], false);\ngoog.addDependency('../../../ol/ol/featureloader.js', ['ol.FeatureLoader', 'ol.FeatureUrlFunction', 'ol.featureloader'], ['goog.asserts', 'goog.events', 'goog.net.EventType', 'goog.net.XhrIo', 'goog.net.XhrIo.ResponseType', 'ol.TileState', 'ol.format.FormatType', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/esrijsonformat.js', ['ol.format.EsriJSON'], ['goog.array', 'goog.asserts', 'goog.object', 'ol.Feature', 'ol.extent', 'ol.format.Feature', 'ol.format.JSONFeature', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.LinearRing', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.geom.flat.orient', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/format/featureformat.js', ['ol.format.Feature'], ['ol.geom.Geometry', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/format/format.js', ['ol.format.FormatType'], [], false);\ngoog.addDependency('../../../ol/ol/format/geojsonformat.js', ['ol.format.GeoJSON'], ['goog.asserts', 'goog.object', 'ol.Feature', 'ol.format.Feature', 'ol.format.JSONFeature', 'ol.geom.GeometryCollection', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/format/gml/gml2format.js', ['ol.format.GML2'], ['goog.asserts', 'goog.dom.NodeType', 'ol.extent', 'ol.format.GMLBase', 'ol.format.XSD', 'ol.proj', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/gml/gml3format.js', ['ol.format.GML', 'ol.format.GML3'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol', 'ol.Feature', 'ol.extent', 'ol.format.Feature', 'ol.format.GMLBase', 'ol.format.XSD', 'ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.LinearRing', 'ol.geom.MultiLineString', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/gml/gmlbaseformat.js', ['ol.format.GMLBase'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'goog.string', 'ol.Feature', 'ol.format.Feature', 'ol.format.XMLFeature', 'ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.LinearRing', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/gpxformat.js', ['ol.format.GPX'], ['goog.asserts', 'goog.dom.NodeType', 'ol.Feature', 'ol.array', 'ol.format.Feature', 'ol.format.XMLFeature', 'ol.format.XSD', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.Point', 'ol.proj', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/igcformat.js', ['ol.format.IGC', 'ol.format.IGCZ'], ['goog.asserts', 'goog.string', 'goog.string.newlines', 'ol.Feature', 'ol.format.Feature', 'ol.format.TextFeature', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/format/jsonfeatureformat.js', ['ol.format.JSONFeature'], ['goog.asserts', 'goog.json', 'ol.format.Feature', 'ol.format.FormatType'], false);\ngoog.addDependency('../../../ol/ol/format/kmlformat.js', ['ol.format.KML'], ['goog.Uri', 'goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol', 'ol.Feature', 'ol.FeatureStyleFunction', 'ol.array', 'ol.color', 'ol.format.Feature', 'ol.format.XMLFeature', 'ol.format.XSD', 'ol.geom.Geometry', 'ol.geom.GeometryCollection', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.LinearRing', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.math', 'ol.proj', 'ol.style.Fill', 'ol.style.Icon', 'ol.style.IconAnchorUnits', 'ol.style.IconOrigin', 'ol.style.Image', 'ol.style.Stroke', 'ol.style.Style', 'ol.style.Text', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/mvtformat.js', ['ol.format.MVT'], ['goog.asserts', 'ol.Feature', 'ol.ext.pbf', 'ol.ext.vectortile', 'ol.format.Feature', 'ol.format.FormatType', 'ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj', 'ol.proj.Projection', 'ol.proj.Units', 'ol.render.Feature'], false);\ngoog.addDependency('../../../ol/ol/format/osmxmlformat.js', ['ol.format.OSMXML'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol.Feature', 'ol.format.Feature', 'ol.format.XMLFeature', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/owsformat.js', ['ol.format.OWS'], ['goog.asserts', 'goog.dom.NodeType', 'ol.format.XLink', 'ol.format.XML', 'ol.format.XSD', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/polylineformat.js', ['ol.format.Polyline'], ['goog.asserts', 'ol.Feature', 'ol.format.Feature', 'ol.format.TextFeature', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.SimpleGeometry', 'ol.geom.flat.flip', 'ol.geom.flat.inflate', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/format/textfeatureformat.js', ['ol.format.TextFeature'], ['goog.asserts', 'ol.format.Feature', 'ol.format.FormatType'], false);\ngoog.addDependency('../../../ol/ol/format/topojsonformat.js', ['ol.format.TopoJSON'], ['goog.asserts', 'goog.object', 'ol.Feature', 'ol.format.Feature', 'ol.format.JSONFeature', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/format/wfsformat.js', ['ol.format.WFS'], ['goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol', 'ol.format.GML3', 'ol.format.GMLBase', 'ol.format.XMLFeature', 'ol.format.XSD', 'ol.geom.Geometry', 'ol.proj', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/wktformat.js', ['ol.format.WKT'], ['goog.asserts', 'ol', 'ol.Feature', 'ol.format.Feature', 'ol.format.TextFeature', 'ol.geom.Geometry', 'ol.geom.GeometryCollection', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon'], false);\ngoog.addDependency('../../../ol/ol/format/wmscapabilitiesformat.js', ['ol.format.WMSCapabilities'], ['goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol', 'ol.format.XLink', 'ol.format.XML', 'ol.format.XSD', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/wmsgetfeatureinfoformat.js', ['ol.format.WMSGetFeatureInfo'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol.format.GML2', 'ol.format.XMLFeature', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/wmtscapabilitiesformat.js', ['ol.format.WMTSCapabilities'], ['goog.asserts', 'goog.dom.NodeType', 'ol.extent', 'ol.format.OWS', 'ol.format.XLink', 'ol.format.XML', 'ol.format.XSD', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/xlinkformat.js', ['ol.format.XLink'], [], false);\ngoog.addDependency('../../../ol/ol/format/xmlfeatureformat.js', ['ol.format.XMLFeature'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.xml', 'ol.format.Feature', 'ol.format.FormatType', 'ol.proj', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/xmlformat.js', ['ol.format.XML'], ['goog.asserts', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/format/xsdformat.js', ['ol.format.XSD'], ['goog.asserts', 'goog.string', 'ol', 'ol.xml'], false);\ngoog.addDependency('../../../ol/ol/framestate.js', ['ol.PostRenderFunction', 'ol.PreRenderFunction'], [], false);\ngoog.addDependency('../../../ol/ol/geolocation.js', ['ol.Geolocation', 'ol.GeolocationProperty'], ['goog.events', 'goog.events.EventType', 'ol.Coordinate', 'ol.Object', 'ol.geom.Geometry', 'ol.geom.Polygon', 'ol.has', 'ol.math', 'ol.proj', 'ol.sphere.WGS84'], false);\ngoog.addDependency('../../../ol/ol/geom/circle.js', ['ol.geom.Circle'], ['goog.asserts', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.SimpleGeometry', 'ol.geom.flat.deflate', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/areaflatgeom.js', ['ol.geom.flat.area'], [], false);\ngoog.addDependency('../../../ol/ol/geom/flat/centerflatgeom.js', ['ol.geom.flat.center'], ['ol.extent'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/closestflatgeom.js', ['ol.geom.flat.closest'], ['goog.asserts', 'goog.math', 'ol.math'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/containsflatgeom.js', ['ol.geom.flat.contains'], ['goog.asserts', 'ol.extent'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/deflateflatgeom.js', ['ol.geom.flat.deflate'], ['goog.asserts'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/flipflatgeom.js', ['ol.geom.flat.flip'], ['goog.asserts'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/geodesicflatgeom.js', ['ol.geom.flat.geodesic'], ['goog.asserts', 'goog.object', 'ol.TransformFunction', 'ol.math', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/inflateflatgeom.js', ['ol.geom.flat.inflate'], [], false);\ngoog.addDependency('../../../ol/ol/geom/flat/interiorpointflatgeom.js', ['ol.geom.flat.interiorpoint'], ['goog.asserts', 'ol.geom.flat.contains'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/interpolateflatgeom.js', ['ol.geom.flat.interpolate'], ['goog.array', 'goog.asserts', 'goog.math'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/intersectsextent.js', ['ol.geom.flat.intersectsextent'], ['goog.asserts', 'ol.extent', 'ol.geom.flat.contains', 'ol.geom.flat.segments'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/lengthflatgeom.js', ['ol.geom.flat.length'], [], false);\ngoog.addDependency('../../../ol/ol/geom/flat/orientflatgeom.js', ['ol.geom.flat.orient'], ['ol', 'ol.geom.flat.reverse'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/reverseflatgeom.js', ['ol.geom.flat.reverse'], [], false);\ngoog.addDependency('../../../ol/ol/geom/flat/segmentsflatgeom.js', ['ol.geom.flat.segments'], [], false);\ngoog.addDependency('../../../ol/ol/geom/flat/simplifyflatgeom.js', ['ol.geom.flat.simplify'], ['ol.math'], false);\ngoog.addDependency('../../../ol/ol/geom/flat/transformflatgeom.js', ['ol.geom.flat.transform'], ['goog.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/geom/geometry.js', ['ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType'], ['goog.asserts', 'goog.functions', 'ol.Object', 'ol.extent', 'ol.proj', 'ol.proj.Units'], false);\ngoog.addDependency('../../../ol/ol/geom/geometrycollection.js', ['ol.geom.GeometryCollection'], ['goog.events', 'goog.events.EventType', 'goog.object', 'ol.extent', 'ol.geom.Geometry', 'ol.geom.GeometryType'], false);\ngoog.addDependency('../../../ol/ol/geom/linearring.js', ['ol.geom.LinearRing'], ['ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.SimpleGeometry', 'ol.geom.flat.area', 'ol.geom.flat.closest', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.simplify'], false);\ngoog.addDependency('../../../ol/ol/geom/linestring.js', ['ol.geom.LineString'], ['goog.array', 'goog.asserts', 'ol', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.SimpleGeometry', 'ol.geom.flat.closest', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.interpolate', 'ol.geom.flat.intersectsextent', 'ol.geom.flat.length', 'ol.geom.flat.segments', 'ol.geom.flat.simplify'], false);\ngoog.addDependency('../../../ol/ol/geom/multilinestring.js', ['ol.geom.MultiLineString'], ['goog.array', 'goog.asserts', 'ol', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.SimpleGeometry', 'ol.geom.flat.closest', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.interpolate', 'ol.geom.flat.intersectsextent', 'ol.geom.flat.simplify'], false);\ngoog.addDependency('../../../ol/ol/geom/multipoint.js', ['ol.geom.MultiPoint'], ['goog.array', 'goog.asserts', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.Point', 'ol.geom.SimpleGeometry', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.math'], false);\ngoog.addDependency('../../../ol/ol/geom/multipolygon.js', ['ol.geom.MultiPolygon'], ['goog.array', 'goog.asserts', 'goog.object', 'ol', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.MultiPoint', 'ol.geom.Polygon', 'ol.geom.SimpleGeometry', 'ol.geom.flat.area', 'ol.geom.flat.center', 'ol.geom.flat.closest', 'ol.geom.flat.contains', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.interiorpoint', 'ol.geom.flat.intersectsextent', 'ol.geom.flat.orient', 'ol.geom.flat.simplify'], false);\ngoog.addDependency('../../../ol/ol/geom/point.js', ['ol.geom.Point'], ['ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.SimpleGeometry', 'ol.geom.flat.deflate', 'ol.math'], false);\ngoog.addDependency('../../../ol/ol/geom/polygon.js', ['ol.geom.Polygon'], ['goog.array', 'goog.asserts', 'goog.math', 'ol', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LinearRing', 'ol.geom.Point', 'ol.geom.SimpleGeometry', 'ol.geom.flat.area', 'ol.geom.flat.closest', 'ol.geom.flat.contains', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.interiorpoint', 'ol.geom.flat.intersectsextent', 'ol.geom.flat.orient', 'ol.geom.flat.simplify'], false);\ngoog.addDependency('../../../ol/ol/geom/simplegeometry.js', ['ol.geom.SimpleGeometry'], ['goog.asserts', 'goog.functions', 'goog.object', 'ol.extent', 'ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.flat.transform'], false);\ngoog.addDependency('../../../ol/ol/graticule.js', ['ol.Graticule'], ['goog.asserts', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.flat.geodesic', 'ol.math', 'ol.proj', 'ol.render.EventType', 'ol.style.Stroke'], false);\ngoog.addDependency('../../../ol/ol/has.js', ['ol.has'], ['goog.dom', 'ol', 'ol.dom', 'ol.webgl'], false);\ngoog.addDependency('../../../ol/ol/image.js', ['ol.Image'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.ImageBase', 'ol.ImageState', 'ol.extent'], false);\ngoog.addDependency('../../../ol/ol/imagebase.js', ['ol.ImageBase', 'ol.ImageState'], ['goog.asserts', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.Attribution', 'ol.Extent'], false);\ngoog.addDependency('../../../ol/ol/imagecanvas.js', ['ol.ImageCanvas'], ['goog.asserts', 'ol.ImageBase', 'ol.ImageState'], false);\ngoog.addDependency('../../../ol/ol/imageloadfunction.js', ['ol.ImageLoadFunctionType'], [], false);\ngoog.addDependency('../../../ol/ol/imagetile.js', ['ol.ImageTile'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.Tile', 'ol.TileCoord', 'ol.TileLoadFunctionType', 'ol.TileState'], false);\ngoog.addDependency('../../../ol/ol/imageurlfunction.js', ['ol.ImageUrlFunction', 'ol.ImageUrlFunctionType'], ['ol.Size'], false);\ngoog.addDependency('../../../ol/ol/interaction/doubleclickzoominteraction.js', ['ol.interaction.DoubleClickZoom'], ['goog.asserts', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.interaction.Interaction'], false);\ngoog.addDependency('../../../ol/ol/interaction/draganddropinteraction.js', ['ol.interaction.DragAndDrop', 'ol.interaction.DragAndDropEvent'], ['goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.FileDropHandler', 'goog.events.FileDropHandler.EventType', 'goog.fs.FileReader', 'goog.functions', 'ol.interaction.Interaction', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/interaction/dragboxinteraction.js', ['ol.DragBoxEvent', 'ol.interaction.DragBox'], ['goog.events.Event', 'ol', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Pointer', 'ol.render.Box'], false);\ngoog.addDependency('../../../ol/ol/interaction/dragpaninteraction.js', ['ol.interaction.DragPan'], ['goog.asserts', 'ol.Kinetic', 'ol.Pixel', 'ol.PreRenderFunction', 'ol.ViewHint', 'ol.coordinate', 'ol.events.condition', 'ol.interaction.Pointer'], false);\ngoog.addDependency('../../../ol/ol/interaction/dragrotateandzoominteraction.js', ['ol.interaction.DragRotateAndZoom'], ['goog.math.Vec2', 'ol', 'ol.ViewHint', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Interaction', 'ol.interaction.Pointer'], false);\ngoog.addDependency('../../../ol/ol/interaction/dragrotateinteraction.js', ['ol.interaction.DragRotate'], ['ol', 'ol.ViewHint', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Interaction', 'ol.interaction.Pointer'], false);\ngoog.addDependency('../../../ol/ol/interaction/dragzoominteraction.js', ['ol.interaction.DragZoom'], ['goog.asserts', 'ol.animation', 'ol.easing', 'ol.events.condition', 'ol.extent', 'ol.interaction.DragBox'], false);\ngoog.addDependency('../../../ol/ol/interaction/drawinteraction.js', ['ol.interaction.Draw', 'ol.interaction.DrawEvent', 'ol.interaction.DrawEventType', 'ol.interaction.DrawGeometryFunctionType', 'ol.interaction.DrawMode'], ['goog.asserts', 'goog.events', 'goog.events.Event', 'ol.Collection', 'ol.Coordinate', 'ol.Feature', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.Object', 'ol.coordinate', 'ol.events.condition', 'ol.geom.Circle', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.geom.SimpleGeometry', 'ol.interaction.InteractionProperty', 'ol.interaction.Pointer', 'ol.layer.Vector', 'ol.source.Vector'], false);\ngoog.addDependency('../../../ol/ol/interaction/interaction.js', ['ol.interaction.Interaction', 'ol.interaction.InteractionProperty'], ['ol', 'ol.MapBrowserEvent', 'ol.Object', 'ol.animation', 'ol.easing'], false);\ngoog.addDependency('../../../ol/ol/interaction/interactiondefaults.js', ['ol.interaction'], ['ol', 'ol.Collection', 'ol.Kinetic', 'ol.interaction.DoubleClickZoom', 'ol.interaction.DragPan', 'ol.interaction.DragRotate', 'ol.interaction.DragZoom', 'ol.interaction.KeyboardPan', 'ol.interaction.KeyboardZoom', 'ol.interaction.MouseWheelZoom', 'ol.interaction.PinchRotate', 'ol.interaction.PinchZoom'], false);\ngoog.addDependency('../../../ol/ol/interaction/keyboardpaninteraction.js', ['ol.interaction.KeyboardPan'], ['goog.asserts', 'goog.events.KeyCodes', 'goog.events.KeyHandler.EventType', 'goog.functions', 'ol', 'ol.coordinate', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Interaction'], false);\ngoog.addDependency('../../../ol/ol/interaction/keyboardzoominteraction.js', ['ol.interaction.KeyboardZoom'], ['goog.asserts', 'goog.events.KeyHandler.EventType', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Interaction'], false);\ngoog.addDependency('../../../ol/ol/interaction/modifyinteraction.js', ['ol.interaction.Modify', 'ol.interaction.ModifyEvent'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.functions', 'ol', 'ol.Collection', 'ol.CollectionEventType', 'ol.Feature', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserPointerEvent', 'ol.ViewHint', 'ol.coordinate', 'ol.events.condition', 'ol.extent', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.interaction.Pointer', 'ol.layer.Vector', 'ol.source.Vector', 'ol.structs.RBush'], false);\ngoog.addDependency('../../../ol/ol/interaction/mousewheelzoominteraction.js', ['ol.interaction.MouseWheelZoom'], ['goog.asserts', 'goog.events.MouseWheelEvent', 'goog.events.MouseWheelHandler.EventType', 'ol', 'ol.Coordinate', 'ol.interaction.Interaction', 'ol.math'], false);\ngoog.addDependency('../../../ol/ol/interaction/pinchrotateinteraction.js', ['ol.interaction.PinchRotate'], ['goog.asserts', 'goog.functions', 'goog.style', 'ol', 'ol.Coordinate', 'ol.ViewHint', 'ol.interaction.Interaction', 'ol.interaction.Pointer'], false);\ngoog.addDependency('../../../ol/ol/interaction/pinchzoominteraction.js', ['ol.interaction.PinchZoom'], ['goog.asserts', 'goog.functions', 'goog.style', 'ol', 'ol.Coordinate', 'ol.ViewHint', 'ol.interaction.Interaction', 'ol.interaction.Pointer'], false);\ngoog.addDependency('../../../ol/ol/interaction/pointerinteraction.js', ['ol.interaction.Pointer'], ['goog.functions', 'goog.object', 'ol', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserPointerEvent', 'ol.Pixel', 'ol.interaction.Interaction'], false);\ngoog.addDependency('../../../ol/ol/interaction/selectinteraction.js', ['ol.interaction.Select', 'ol.interaction.SelectEvent', 'ol.interaction.SelectEventType', 'ol.interaction.SelectFilterFunction'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.events.Event', 'goog.functions', 'goog.object', 'ol.CollectionEventType', 'ol.Feature', 'ol.array', 'ol.events.condition', 'ol.geom.GeometryType', 'ol.interaction.Interaction', 'ol.layer.Vector', 'ol.source.Vector'], false);\ngoog.addDependency('../../../ol/ol/interaction/snapinteraction.js', ['ol.interaction.Snap', 'ol.interaction.SnapProperty'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol', 'ol.Collection', 'ol.CollectionEvent', 'ol.CollectionEventType', 'ol.Extent', 'ol.Feature', 'ol.Object', 'ol.Observable', 'ol.coordinate', 'ol.extent', 'ol.geom.Geometry', 'ol.interaction.Pointer', 'ol.source.Vector', 'ol.source.VectorEvent', 'ol.source.VectorEventType', 'ol.structs.RBush'], false);\ngoog.addDependency('../../../ol/ol/interaction/translateinteraction.js', ['ol.interaction.Translate', 'ol.interaction.TranslateEvent'], ['goog.events', 'goog.events.Event', 'ol.array', 'ol.interaction.Pointer'], false);\ngoog.addDependency('../../../ol/ol/kinetic.js', ['ol.Kinetic'], ['ol.Coordinate', 'ol.PreRenderFunction', 'ol.animation'], false);\ngoog.addDependency('../../../ol/ol/layer/heatmaplayer.js', ['ol.layer.Heatmap'], ['goog.asserts', 'goog.events', 'goog.object', 'ol', 'ol.Object', 'ol.dom', 'ol.layer.Vector', 'ol.math', 'ol.render.EventType', 'ol.style.Icon', 'ol.style.Style'], false);\ngoog.addDependency('../../../ol/ol/layer/imagelayer.js', ['ol.layer.Image'], ['ol.layer.Layer'], false);\ngoog.addDependency('../../../ol/ol/layer/layer.js', ['ol.layer.Layer'], ['goog.events', 'goog.events.EventType', 'goog.object', 'ol', 'ol.Object', 'ol.layer.Base', 'ol.layer.LayerProperty', 'ol.render.EventType', 'ol.source.State'], false);\ngoog.addDependency('../../../ol/ol/layer/layerbase.js', ['ol.layer.Base', 'ol.layer.LayerProperty', 'ol.layer.LayerState'], ['goog.object', 'ol', 'ol.Object', 'ol.math', 'ol.source.State'], false);\ngoog.addDependency('../../../ol/ol/layer/layergroup.js', ['ol.layer.Group'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.Collection', 'ol.CollectionEvent', 'ol.CollectionEventType', 'ol.Object', 'ol.ObjectEventType', 'ol.extent', 'ol.layer.Base', 'ol.source.State'], false);\ngoog.addDependency('../../../ol/ol/layer/tilelayer.js', ['ol.layer.Tile'], ['goog.object', 'ol', 'ol.layer.Layer'], false);\ngoog.addDependency('../../../ol/ol/layer/vectorlayer.js', ['ol.layer.Vector'], ['goog.asserts', 'goog.object', 'ol', 'ol.layer.Layer', 'ol.style.Style'], false);\ngoog.addDependency('../../../ol/ol/layer/vectortilelayer.js', ['ol.layer.VectorTile'], ['goog.object', 'ol.layer.Vector'], false);\ngoog.addDependency('../../../ol/ol/loadingstrategy.js', ['ol.LoadingStrategy', 'ol.loadingstrategy'], ['ol.TileCoord'], false);\ngoog.addDependency('../../../ol/ol/map.js', ['ol.Map', 'ol.MapProperty'], ['goog.array', 'goog.asserts', 'goog.async.AnimationDelay', 'goog.async.nextTick', 'goog.debug.Console', 'goog.dom', 'goog.dom.ViewportSizeMonitor', 'goog.dom.classlist', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.events.KeyHandler.EventType', 'goog.events.MouseWheelHandler', 'goog.events.MouseWheelHandler.EventType', 'goog.functions', 'goog.log', 'goog.log.Level', 'goog.object', 'goog.style', 'goog.vec.Mat4', 'ol.Collection', 'ol.CollectionEventType', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserEventHandler', 'ol.MapEvent', 'ol.MapEventType', 'ol.Object', 'ol.ObjectEvent', 'ol.ObjectEventType', 'ol.Pixel', 'ol.PostRenderFunction', 'ol.PreRenderFunction', 'ol.RendererType', 'ol.Size', 'ol.TileQueue', 'ol.View', 'ol.ViewHint', 'ol.control', 'ol.extent', 'ol.has', 'ol.interaction', 'ol.layer.Base', 'ol.layer.Group', 'ol.proj', 'ol.proj.common', 'ol.renderer.Map', 'ol.renderer.canvas.Map', 'ol.renderer.dom.Map', 'ol.renderer.webgl.Map', 'ol.size', 'ol.structs.PriorityQueue', 'ol.tilecoord', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/mapbrowserevent.js', ['ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserEventHandler', 'ol.MapBrowserPointerEvent'], ['goog.asserts', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.object', 'ol', 'ol.Coordinate', 'ol.MapEvent', 'ol.Pixel', 'ol.pointer.PointerEvent', 'ol.pointer.PointerEventHandler'], false);\ngoog.addDependency('../../../ol/ol/mapevent.js', ['ol.MapEvent', 'ol.MapEventType'], ['goog.events.Event'], false);\ngoog.addDependency('../../../ol/ol/math.js', ['ol.math'], ['goog.asserts'], false);\ngoog.addDependency('../../../ol/ol/object.js', ['ol.Object', 'ol.ObjectEvent', 'ol.ObjectEventType'], ['goog.events', 'goog.events.Event', 'ol.Observable'], false);\ngoog.addDependency('../../../ol/ol/observable.js', ['ol.Observable'], ['goog.events', 'goog.events.EventTarget', 'goog.events.EventType'], false);\ngoog.addDependency('../../../ol/ol/ol.js', ['ol'], [], false);\ngoog.addDependency('../../../ol/ol/overlay.js', ['ol.Overlay', 'ol.OverlayPositioning', 'ol.OverlayProperty'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.style', 'ol.Coordinate', 'ol.Map', 'ol.MapEventType', 'ol.Object', 'ol.animation', 'ol.dom', 'ol.extent'], false);\ngoog.addDependency('../../../ol/ol/pixel.js', ['ol.Pixel'], [], false);\ngoog.addDependency('../../../ol/ol/pointer/eventsource.js', ['ol.pointer.EventSource'], ['goog.events.BrowserEvent'], false);\ngoog.addDependency('../../../ol/ol/pointer/mousesource.js', ['ol.pointer.MouseSource'], ['ol.pointer.EventSource'], false);\ngoog.addDependency('../../../ol/ol/pointer/mssource.js', ['ol.pointer.MsSource'], ['ol.pointer.EventSource'], false);\ngoog.addDependency('../../../ol/ol/pointer/nativesource.js', ['ol.pointer.NativeSource'], ['ol.pointer.EventSource'], false);\ngoog.addDependency('../../../ol/ol/pointer/pointerevent.js', ['ol.pointer.PointerEvent'], ['goog.events', 'goog.events.Event'], false);\ngoog.addDependency('../../../ol/ol/pointer/pointereventhandler.js', ['ol.pointer.PointerEventHandler'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'ol.has', 'ol.pointer.MouseSource', 'ol.pointer.MsSource', 'ol.pointer.NativeSource', 'ol.pointer.PointerEvent', 'ol.pointer.TouchSource'], false);\ngoog.addDependency('../../../ol/ol/pointer/touchsource.js', ['ol.pointer.TouchSource'], ['goog.array', 'goog.object', 'ol', 'ol.pointer.EventSource', 'ol.pointer.MouseSource'], false);\ngoog.addDependency('../../../ol/ol/proj/common.js', ['ol.proj.common'], ['ol.proj', 'ol.proj.EPSG3857', 'ol.proj.EPSG4326'], false);\ngoog.addDependency('../../../ol/ol/proj/epsg3857projection.js', ['ol.proj.EPSG3857'], ['goog.asserts', 'ol.math', 'ol.proj', 'ol.proj.Projection', 'ol.proj.Units'], false);\ngoog.addDependency('../../../ol/ol/proj/epsg4326projection.js', ['ol.proj.EPSG4326'], ['ol.proj', 'ol.proj.Projection', 'ol.proj.Units'], false);\ngoog.addDependency('../../../ol/ol/proj/proj.js', ['ol.proj', 'ol.proj.METERS_PER_UNIT', 'ol.proj.Projection', 'ol.proj.ProjectionLike', 'ol.proj.Units'], ['goog.asserts', 'goog.object', 'ol', 'ol.Extent', 'ol.TransformFunction', 'ol.extent', 'ol.sphere.NORMAL'], false);\ngoog.addDependency('../../../ol/ol/raster/operation.js', ['ol.raster.Operation', 'ol.raster.OperationType'], [], false);\ngoog.addDependency('../../../ol/ol/raster/pixel.js', ['ol.raster.Pixel'], [], false);\ngoog.addDependency('../../../ol/ol/render/box.js', ['ol.render.Box'], ['goog.Disposable', 'goog.asserts', 'ol.geom.Polygon'], false);\ngoog.addDependency('../../../ol/ol/render/canvas/canvas.js', ['ol.render.canvas'], [], false);\ngoog.addDependency('../../../ol/ol/render/canvas/canvasimmediate.js', ['ol.render.canvas.Immediate'], ['goog.array', 'goog.asserts', 'goog.vec.Mat4', 'ol.color', 'ol.extent', 'ol.geom.flat.transform', 'ol.has', 'ol.render.VectorContext', 'ol.render.canvas', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/render/canvas/canvasreplay.js', ['ol.render.canvas.ImageReplay', 'ol.render.canvas.LineStringReplay', 'ol.render.canvas.PolygonReplay', 'ol.render.canvas.Replay', 'ol.render.canvas.ReplayGroup', 'ol.render.canvas.TextReplay'], ['goog.array', 'goog.asserts', 'goog.object', 'goog.vec.Mat4', 'ol', 'ol.array', 'ol.color', 'ol.dom', 'ol.extent', 'ol.extent.Relationship', 'ol.geom.flat.simplify', 'ol.geom.flat.transform', 'ol.has', 'ol.render.IReplayGroup', 'ol.render.VectorContext', 'ol.render.canvas', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/render/ireplay.js', ['ol.render.IReplayGroup'], ['ol.render.VectorContext'], false);\ngoog.addDependency('../../../ol/ol/render/renderevent.js', ['ol.render.Event', 'ol.render.EventType'], ['goog.events.Event', 'ol.render.VectorContext'], false);\ngoog.addDependency('../../../ol/ol/render/renderfeature.js', ['ol.render.Feature'], ['goog.asserts', 'goog.functions', 'ol.extent', 'ol.geom.GeometryType'], false);\ngoog.addDependency('../../../ol/ol/render/vector.js', ['ol.renderer.vector'], ['goog.asserts', 'ol.render.Feature', 'ol.render.IReplayGroup', 'ol.style.ImageState', 'ol.style.Style'], false);\ngoog.addDependency('../../../ol/ol/render/vectorcontext.js', ['ol.render.VectorContext'], [], false);\ngoog.addDependency('../../../ol/ol/render/webgl/webglimagedefaultshader.js', ['ol.render.webgl.imagereplay.shader.Default', 'ol.render.webgl.imagereplay.shader.Default.Locations', 'ol.render.webgl.imagereplay.shader.DefaultFragment', 'ol.render.webgl.imagereplay.shader.DefaultVertex'], ['ol.webgl.shader'], false);\ngoog.addDependency('../../../ol/ol/render/webgl/webglimmediate.js', ['ol.render.webgl.Immediate'], ['goog.array', 'ol.extent', 'ol.render.VectorContext', 'ol.render.webgl.ImageReplay', 'ol.render.webgl.ReplayGroup'], false);\ngoog.addDependency('../../../ol/ol/render/webgl/webglreplay.js', ['ol.render.webgl.ImageReplay', 'ol.render.webgl.ReplayGroup'], ['goog.asserts', 'goog.functions', 'goog.object', 'goog.vec.Mat4', 'ol.extent', 'ol.render.IReplayGroup', 'ol.render.VectorContext', 'ol.render.webgl.imagereplay.shader.Default', 'ol.render.webgl.imagereplay.shader.Default.Locations', 'ol.render.webgl.imagereplay.shader.DefaultFragment', 'ol.render.webgl.imagereplay.shader.DefaultVertex', 'ol.vec.Mat4', 'ol.webgl.Buffer', 'ol.webgl.Context'], false);\ngoog.addDependency('../../../ol/ol/renderer/canvas/canvasimagelayerrenderer.js', ['ol.renderer.canvas.ImageLayer'], ['goog.asserts', 'goog.functions', 'goog.vec.Mat4', 'ol.ImageBase', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Image', 'ol.proj', 'ol.renderer.canvas.Layer', 'ol.source.ImageVector', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/canvas/canvaslayerrenderer.js', ['ol.renderer.canvas.Layer'], ['goog.array', 'goog.asserts', 'goog.vec.Mat4', 'ol.dom', 'ol.extent', 'ol.layer.Layer', 'ol.render.Event', 'ol.render.EventType', 'ol.render.canvas.Immediate', 'ol.renderer.Layer', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/canvas/canvasmaprenderer.js', ['ol.renderer.canvas.Map'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.style', 'goog.vec.Mat4', 'ol', 'ol.RendererType', 'ol.css', 'ol.dom', 'ol.layer.Image', 'ol.layer.Layer', 'ol.layer.Tile', 'ol.layer.Vector', 'ol.layer.VectorTile', 'ol.render.Event', 'ol.render.EventType', 'ol.render.canvas.Immediate', 'ol.renderer.Map', 'ol.renderer.canvas.ImageLayer', 'ol.renderer.canvas.Layer', 'ol.renderer.canvas.TileLayer', 'ol.renderer.canvas.VectorLayer', 'ol.renderer.canvas.VectorTileLayer', 'ol.source.State', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/canvas/canvastilelayerrenderer.js', ['ol.renderer.canvas.TileLayer'], ['goog.array', 'goog.asserts', 'goog.vec.Mat4', 'ol.Size', 'ol.TileRange', 'ol.TileState', 'ol.dom', 'ol.extent', 'ol.layer.Tile', 'ol.renderer.canvas.Layer', 'ol.size', 'ol.tilecoord', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/canvas/canvasvectorlayerrenderer.js', ['ol.renderer.canvas.VectorLayer'], ['goog.array', 'goog.asserts', 'goog.events', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Vector', 'ol.render.EventType', 'ol.render.canvas.ReplayGroup', 'ol.renderer.canvas.Layer', 'ol.renderer.vector', 'ol.source.Vector'], false);\ngoog.addDependency('../../../ol/ol/renderer/canvas/canvasvectortilelayerrenderer.js', ['ol.renderer.canvas.VectorTileLayer'], ['goog.asserts', 'goog.events', 'goog.vec.Mat4', 'ol.Feature', 'ol.TileRange', 'ol.TileState', 'ol.VectorTile', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.VectorTile', 'ol.proj.Units', 'ol.render.EventType', 'ol.render.canvas.ReplayGroup', 'ol.renderer.canvas.Layer', 'ol.renderer.vector', 'ol.size', 'ol.source.VectorTile', 'ol.tilecoord', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/dom/domimagelayerrenderer.js', ['ol.renderer.dom.ImageLayer'], ['goog.asserts', 'goog.dom', 'goog.vec.Mat4', 'ol.ImageBase', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Image', 'ol.proj', 'ol.renderer.dom.Layer', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/dom/domlayerrenderer.js', ['ol.renderer.dom.Layer'], ['ol', 'ol.layer.Layer', 'ol.renderer.Layer'], false);\ngoog.addDependency('../../../ol/ol/renderer/dom/dommaprenderer.js', ['ol.renderer.dom.Map'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.style', 'goog.vec.Mat4', 'ol', 'ol.RendererType', 'ol.css', 'ol.dom', 'ol.layer.Image', 'ol.layer.Layer', 'ol.layer.Tile', 'ol.layer.Vector', 'ol.render.Event', 'ol.render.EventType', 'ol.render.canvas.Immediate', 'ol.renderer.Map', 'ol.renderer.dom.ImageLayer', 'ol.renderer.dom.Layer', 'ol.renderer.dom.TileLayer', 'ol.renderer.dom.VectorLayer', 'ol.source.State', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/dom/domtilelayerrenderer.js', ['ol.renderer.dom.TileLayer'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.style', 'goog.vec.Mat4', 'ol', 'ol.Coordinate', 'ol.TileCoord', 'ol.TileRange', 'ol.TileState', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Tile', 'ol.renderer.dom.Layer', 'ol.size', 'ol.tilecoord', 'ol.tilegrid.TileGrid', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/dom/domvectorlayerrenderer.js', ['ol.renderer.dom.VectorLayer'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.vec.Mat4', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Vector', 'ol.render.Event', 'ol.render.EventType', 'ol.render.canvas.Immediate', 'ol.render.canvas.ReplayGroup', 'ol.renderer.dom.Layer', 'ol.renderer.vector', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/layerrenderer.js', ['ol.renderer.Layer'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.functions', 'ol', 'ol.ImageState', 'ol.Observable', 'ol.TileRange', 'ol.TileState', 'ol.layer.Layer', 'ol.source.Source', 'ol.source.State', 'ol.source.Tile', 'ol.tilecoord', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/maprenderer.js', ['ol.RendererType', 'ol.renderer.Map'], ['goog.Disposable', 'goog.asserts', 'goog.dispose', 'goog.events', 'goog.events.EventType', 'goog.functions', 'goog.object', 'goog.vec.Mat4', 'ol', 'ol.extent', 'ol.layer.Layer', 'ol.renderer.Layer', 'ol.style.IconImageCache', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/renderer/webgl/webglimagelayerrenderer.js', ['ol.renderer.webgl.ImageLayer'], ['goog.asserts', 'goog.functions', 'goog.vec.Mat4', 'goog.webgl', 'ol.Coordinate', 'ol.Extent', 'ol.ImageBase', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Image', 'ol.proj', 'ol.renderer.webgl.Layer', 'ol.source.ImageVector', 'ol.vec.Mat4', 'ol.webgl.Context'], false);\ngoog.addDependency('../../../ol/ol/renderer/webgl/webgllayerrenderer.js', ['ol.renderer.webgl.Layer'], ['goog.vec.Mat4', 'goog.webgl', 'ol.layer.Layer', 'ol.render.Event', 'ol.render.EventType', 'ol.render.webgl.Immediate', 'ol.renderer.Layer', 'ol.renderer.webgl.map.shader.Default', 'ol.renderer.webgl.map.shader.Default.Locations', 'ol.renderer.webgl.map.shader.DefaultFragment', 'ol.renderer.webgl.map.shader.DefaultVertex', 'ol.webgl.Buffer', 'ol.webgl.Context'], false);\ngoog.addDependency('../../../ol/ol/renderer/webgl/webglmapdefaultshader.js', ['ol.renderer.webgl.map.shader.Default', 'ol.renderer.webgl.map.shader.Default.Locations', 'ol.renderer.webgl.map.shader.DefaultFragment', 'ol.renderer.webgl.map.shader.DefaultVertex'], ['ol.webgl.shader'], false);\ngoog.addDependency('../../../ol/ol/renderer/webgl/webglmaprenderer.js', ['ol.renderer.webgl.Map'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.events', 'goog.events.Event', 'goog.log', 'goog.log.Logger', 'goog.object', 'goog.style', 'goog.webgl', 'ol', 'ol.RendererType', 'ol.css', 'ol.dom', 'ol.layer.Image', 'ol.layer.Layer', 'ol.layer.Tile', 'ol.layer.Vector', 'ol.render.Event', 'ol.render.EventType', 'ol.render.webgl.Immediate', 'ol.renderer.Map', 'ol.renderer.webgl.ImageLayer', 'ol.renderer.webgl.Layer', 'ol.renderer.webgl.TileLayer', 'ol.renderer.webgl.VectorLayer', 'ol.source.State', 'ol.structs.LRUCache', 'ol.structs.PriorityQueue', 'ol.webgl', 'ol.webgl.Context', 'ol.webgl.WebGLContextEventType'], false);\ngoog.addDependency('../../../ol/ol/renderer/webgl/webgltilelayerrenderer.js', ['ol.renderer.webgl.TileLayer'], ['goog.array', 'goog.asserts', 'goog.vec.Mat4', 'goog.vec.Vec4', 'goog.webgl', 'ol.TileRange', 'ol.TileState', 'ol.extent', 'ol.layer.Tile', 'ol.math', 'ol.renderer.webgl.Layer', 'ol.renderer.webgl.tilelayer.shader.Fragment', 'ol.renderer.webgl.tilelayer.shader.Locations', 'ol.renderer.webgl.tilelayer.shader.Vertex', 'ol.size', 'ol.tilecoord', 'ol.vec.Mat4', 'ol.webgl.Buffer'], false);\ngoog.addDependency('../../../ol/ol/renderer/webgl/webgltilelayershader.js', ['ol.renderer.webgl.tilelayer.shader', 'ol.renderer.webgl.tilelayer.shader.Fragment', 'ol.renderer.webgl.tilelayer.shader.Locations', 'ol.renderer.webgl.tilelayer.shader.Vertex'], ['ol.webgl.shader'], false);\ngoog.addDependency('../../../ol/ol/renderer/webgl/webglvectorlayerrenderer.js', ['ol.renderer.webgl.VectorLayer'], ['goog.array', 'goog.asserts', 'goog.events', 'ol.ViewHint', 'ol.extent', 'ol.layer.Vector', 'ol.render.webgl.ReplayGroup', 'ol.renderer.vector', 'ol.renderer.webgl.Layer', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/reproj/image.js', ['ol.reproj.Image', 'ol.reproj.ImageFunctionType'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'ol.ImageBase', 'ol.ImageState', 'ol.extent', 'ol.proj', 'ol.reproj', 'ol.reproj.Triangulation'], false);\ngoog.addDependency('../../../ol/ol/reproj/reproj.js', ['ol.reproj'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.platform', 'goog.math', 'ol.dom', 'ol.extent', 'ol.math', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/reproj/tile.js', ['ol.reproj.Tile', 'ol.reproj.TileFunctionType'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.math', 'goog.object', 'ol.Tile', 'ol.TileState', 'ol.extent', 'ol.math', 'ol.proj', 'ol.reproj', 'ol.reproj.Triangulation'], false);\ngoog.addDependency('../../../ol/ol/reproj/triangulation.js', ['ol.reproj.Triangulation'], ['goog.asserts', 'goog.math', 'ol.extent', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/resolutionconstraint.js', ['ol.ResolutionConstraint', 'ol.ResolutionConstraintType'], ['ol.array', 'ol.math'], false);\ngoog.addDependency('../../../ol/ol/rotationconstraint.js', ['ol.RotationConstraint', 'ol.RotationConstraintType'], ['ol.math'], false);\ngoog.addDependency('../../../ol/ol/size.js', ['ol.Size', 'ol.size'], ['goog.asserts'], false);\ngoog.addDependency('../../../ol/ol/source/bingmapssource.js', ['ol.source.BingMaps'], ['goog.Uri', 'goog.asserts', 'goog.net.Jsonp', 'ol.Attribution', 'ol.TileRange', 'ol.TileUrlFunction', 'ol.extent', 'ol.proj', 'ol.source.State', 'ol.source.TileImage', 'ol.tilecoord'], false);\ngoog.addDependency('../../../ol/ol/source/clustersource.js', ['ol.source.Cluster'], ['goog.asserts', 'goog.events.EventType', 'goog.object', 'ol.Feature', 'ol.coordinate', 'ol.extent', 'ol.geom.Point', 'ol.source.Vector'], false);\ngoog.addDependency('../../../ol/ol/source/imagecanvassource.js', ['ol.source.ImageCanvas'], ['ol.CanvasFunctionType', 'ol.ImageCanvas', 'ol.extent', 'ol.source.Image'], false);\ngoog.addDependency('../../../ol/ol/source/imagemapguidesource.js', ['ol.source.ImageMapGuide'], ['goog.events', 'goog.events.EventType', 'goog.object', 'goog.uri.utils', 'ol.Image', 'ol.ImageLoadFunctionType', 'ol.ImageUrlFunction', 'ol.extent', 'ol.source.Image'], false);\ngoog.addDependency('../../../ol/ol/source/imagesource.js', ['ol.source.Image', 'ol.source.ImageEvent'], ['goog.array', 'goog.asserts', 'goog.events.Event', 'ol.Attribution', 'ol.ImageState', 'ol.array', 'ol.extent', 'ol.proj', 'ol.reproj.Image', 'ol.source.Source'], false);\ngoog.addDependency('../../../ol/ol/source/imagestaticsource.js', ['ol.source.ImageStatic'], ['goog.events', 'goog.events.EventType', 'ol.Image', 'ol.ImageLoadFunctionType', 'ol.extent', 'ol.proj', 'ol.source.Image'], false);\ngoog.addDependency('../../../ol/ol/source/imagevectorsource.js', ['ol.source.ImageVector'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.vec.Mat4', 'ol.dom', 'ol.extent', 'ol.render.canvas.ReplayGroup', 'ol.renderer.vector', 'ol.source.ImageCanvas', 'ol.source.Vector', 'ol.style.Style', 'ol.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/source/imagewmssource.js', ['ol.source.ImageWMS'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'goog.string', 'goog.uri.utils', 'ol', 'ol.Image', 'ol.ImageLoadFunctionType', 'ol.extent', 'ol.proj', 'ol.source.Image', 'ol.source.wms', 'ol.source.wms.ServerType'], false);\ngoog.addDependency('../../../ol/ol/source/mapquestsource.js', ['ol.source.MapQuest'], ['goog.asserts', 'ol.Attribution', 'ol.source.OSM', 'ol.source.XYZ'], false);\ngoog.addDependency('../../../ol/ol/source/osmsource.js', ['ol.source.OSM'], ['ol.Attribution', 'ol.source.XYZ'], false);\ngoog.addDependency('../../../ol/ol/source/rastersource.js', ['ol.source.Raster', 'ol.source.RasterEvent', 'ol.source.RasterEventType'], ['goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.object', 'goog.vec.Mat4', 'ol.ImageCanvas', 'ol.TileQueue', 'ol.dom', 'ol.ext.pixelworks', 'ol.extent', 'ol.layer.Image', 'ol.layer.Tile', 'ol.raster.OperationType', 'ol.renderer.canvas.ImageLayer', 'ol.renderer.canvas.TileLayer', 'ol.source.Image', 'ol.source.State', 'ol.source.Tile'], false);\ngoog.addDependency('../../../ol/ol/source/source.js', ['ol.source.Source', 'ol.source.State'], ['ol', 'ol.Attribution', 'ol.Object', 'ol.proj'], false);\ngoog.addDependency('../../../ol/ol/source/stamensource.js', ['ol.source.Stamen'], ['goog.asserts', 'ol.Attribution', 'ol.source.OSM', 'ol.source.XYZ'], false);\ngoog.addDependency('../../../ol/ol/source/tilearcgisrestsource.js', ['ol.source.TileArcGISRest'], ['goog.asserts', 'goog.math', 'goog.object', 'goog.string', 'goog.uri.utils', 'ol', 'ol.TileCoord', 'ol.extent', 'ol.proj', 'ol.size', 'ol.source.TileImage', 'ol.tilecoord'], false);\ngoog.addDependency('../../../ol/ol/source/tiledebugsource.js', ['ol.source.TileDebug'], ['ol.Tile', 'ol.TileCoord', 'ol.TileState', 'ol.dom', 'ol.size', 'ol.source.Tile', 'ol.tilecoord'], false);\ngoog.addDependency('../../../ol/ol/source/tileimagesource.js', ['ol.source.TileImage'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.ImageTile', 'ol.TileCache', 'ol.TileState', 'ol.proj', 'ol.reproj.Tile', 'ol.source.UrlTile'], false);\ngoog.addDependency('../../../ol/ol/source/tilejsonsource.js', ['ol.source.TileJSON', 'ol.tilejson'], ['goog.asserts', 'goog.net.Jsonp', 'ol.Attribution', 'ol.TileRange', 'ol.TileUrlFunction', 'ol.extent', 'ol.proj', 'ol.source.State', 'ol.source.TileImage'], false);\ngoog.addDependency('../../../ol/ol/source/tilesource.js', ['ol.source.Tile', 'ol.source.TileEvent', 'ol.source.TileOptions'], ['goog.asserts', 'goog.events.Event', 'ol', 'ol.Attribution', 'ol.Extent', 'ol.TileCache', 'ol.TileRange', 'ol.TileState', 'ol.proj', 'ol.size', 'ol.source.Source', 'ol.tilecoord', 'ol.tilegrid.TileGrid'], false);\ngoog.addDependency('../../../ol/ol/source/tileutfgridsource.js', ['ol.source.TileUTFGrid'], ['goog.asserts', 'goog.async.nextTick', 'goog.events', 'goog.events.EventType', 'goog.net.Jsonp', 'ol.Attribution', 'ol.Tile', 'ol.TileState', 'ol.TileUrlFunction', 'ol.extent', 'ol.proj', 'ol.source.State', 'ol.source.Tile'], false);\ngoog.addDependency('../../../ol/ol/source/tilewmssource.js', ['ol.source.TileWMS'], ['goog.asserts', 'goog.math', 'goog.object', 'goog.string', 'goog.uri.utils', 'ol', 'ol.TileCoord', 'ol.extent', 'ol.proj', 'ol.size', 'ol.source.TileImage', 'ol.source.wms', 'ol.source.wms.ServerType', 'ol.tilecoord'], false);\ngoog.addDependency('../../../ol/ol/source/urltilesource.js', ['ol.source.UrlTile'], ['goog.events', 'ol.TileLoadFunctionType', 'ol.TileState', 'ol.TileUrlFunction', 'ol.TileUrlFunctionType', 'ol.proj', 'ol.source.Tile', 'ol.source.TileEvent'], false);\ngoog.addDependency('../../../ol/ol/source/vectorsource.js', ['ol.source.Vector', 'ol.source.VectorEvent', 'ol.source.VectorEventType'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.object', 'ol', 'ol.Collection', 'ol.CollectionEventType', 'ol.Extent', 'ol.Feature', 'ol.FeatureLoader', 'ol.LoadingStrategy', 'ol.ObjectEventType', 'ol.extent', 'ol.featureloader', 'ol.loadingstrategy', 'ol.proj', 'ol.source.Source', 'ol.source.State', 'ol.structs.RBush'], false);\ngoog.addDependency('../../../ol/ol/source/vectortilesource.js', ['ol.source.VectorTile'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'ol.TileState', 'ol.VectorTile', 'ol.featureloader', 'ol.source.UrlTile'], false);\ngoog.addDependency('../../../ol/ol/source/wmssource.js', ['ol.source.wms', 'ol.source.wms.ServerType'], [], false);\ngoog.addDependency('../../../ol/ol/source/wmtssource.js', ['ol.source.WMTS', 'ol.source.WMTSRequestEncoding'], ['goog.array', 'goog.asserts', 'goog.object', 'goog.uri.utils', 'ol.TileUrlFunction', 'ol.TileUrlFunctionType', 'ol.array', 'ol.extent', 'ol.proj', 'ol.source.TileImage', 'ol.tilegrid.WMTS'], false);\ngoog.addDependency('../../../ol/ol/source/xyzsource.js', ['ol.source.XYZ'], ['ol.source.TileImage'], false);\ngoog.addDependency('../../../ol/ol/source/zoomifysource.js', ['ol.source.Zoomify'], ['goog.asserts', 'ol', 'ol.ImageTile', 'ol.TileCoord', 'ol.TileState', 'ol.dom', 'ol.extent', 'ol.proj', 'ol.source.TileImage', 'ol.tilegrid.TileGrid'], false);\ngoog.addDependency('../../../ol/ol/sphere/normal.js', ['ol.sphere.NORMAL'], ['ol.Sphere'], false);\ngoog.addDependency('../../../ol/ol/sphere/sphere.js', ['ol.Sphere'], ['ol.math'], false);\ngoog.addDependency('../../../ol/ol/sphere/wgs84sphere.js', ['ol.sphere.WGS84'], ['ol.Sphere'], false);\ngoog.addDependency('../../../ol/ol/structs/checksum.js', ['ol.structs.IHasChecksum'], [], false);\ngoog.addDependency('../../../ol/ol/structs/lrucache.js', ['ol.structs.LRUCache'], ['goog.asserts', 'goog.object'], false);\ngoog.addDependency('../../../ol/ol/structs/priorityqueue.js', ['ol.structs.PriorityQueue'], ['goog.asserts', 'goog.object'], false);\ngoog.addDependency('../../../ol/ol/structs/rbush.js', ['ol.structs.RBush'], ['goog.asserts', 'goog.object', 'ol.ext.rbush', 'ol.extent'], false);\ngoog.addDependency('../../../ol/ol/style/atlasmanager.js', ['ol.style.Atlas', 'ol.style.AtlasManager'], ['goog.asserts', 'goog.dom', 'goog.functions', 'goog.object', 'ol'], false);\ngoog.addDependency('../../../ol/ol/style/circlestyle.js', ['ol.style.Circle'], ['goog.asserts', 'goog.dom', 'ol', 'ol.color', 'ol.has', 'ol.render.canvas', 'ol.structs.IHasChecksum', 'ol.style.Fill', 'ol.style.Image', 'ol.style.ImageState', 'ol.style.Stroke'], false);\ngoog.addDependency('../../../ol/ol/style/fillstyle.js', ['ol.style.Fill'], ['ol.color', 'ol.structs.IHasChecksum'], false);\ngoog.addDependency('../../../ol/ol/style/iconstyle.js', ['ol.style.Icon', 'ol.style.IconAnchorUnits', 'ol.style.IconImageCache', 'ol.style.IconOrigin'], ['goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.dom', 'ol.style.Image', 'ol.style.ImageState'], false);\ngoog.addDependency('../../../ol/ol/style/imagestyle.js', ['ol.style.Image', 'ol.style.ImageState'], [], false);\ngoog.addDependency('../../../ol/ol/style/regularshapestyle.js', ['ol.style.RegularShape'], ['goog.asserts', 'goog.dom', 'ol', 'ol.color', 'ol.has', 'ol.render.canvas', 'ol.structs.IHasChecksum', 'ol.style.AtlasManager', 'ol.style.Fill', 'ol.style.Image', 'ol.style.ImageState', 'ol.style.Stroke'], false);\ngoog.addDependency('../../../ol/ol/style/strokestyle.js', ['ol.style.Stroke'], ['goog.crypt', 'goog.crypt.Md5', 'ol.color', 'ol.structs.IHasChecksum'], false);\ngoog.addDependency('../../../ol/ol/style/style.js', ['ol.style.GeometryFunction', 'ol.style.Style', 'ol.style.StyleFunction', 'ol.style.defaultGeometryFunction'], ['goog.asserts', 'ol.geom.Geometry', 'ol.geom.GeometryType', 'ol.style.Circle', 'ol.style.Fill', 'ol.style.Image', 'ol.style.Stroke'], false);\ngoog.addDependency('../../../ol/ol/style/textstyle.js', ['ol.style.Text'], ['ol.style.Fill'], false);\ngoog.addDependency('../../../ol/ol/tile.js', ['ol.Tile', 'ol.TileState'], ['goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.TileCoord'], false);\ngoog.addDependency('../../../ol/ol/tilecache.js', ['ol.TileCache'], ['ol', 'ol.TileRange', 'ol.structs.LRUCache', 'ol.tilecoord'], false);\ngoog.addDependency('../../../ol/ol/tilecoord.js', ['ol.TileCoord', 'ol.tilecoord'], ['goog.asserts', 'ol.extent'], false);\ngoog.addDependency('../../../ol/ol/tilegrid/tilegrid.js', ['ol.tilegrid.TileGrid'], ['goog.array', 'goog.asserts', 'goog.object', 'ol', 'ol.Coordinate', 'ol.TileCoord', 'ol.TileRange', 'ol.array', 'ol.extent', 'ol.extent.Corner', 'ol.math', 'ol.proj', 'ol.proj.METERS_PER_UNIT', 'ol.proj.Projection', 'ol.proj.Units', 'ol.size', 'ol.tilecoord'], false);\ngoog.addDependency('../../../ol/ol/tilegrid/wmtstilegrid.js', ['ol.tilegrid.WMTS'], ['goog.array', 'goog.asserts', 'ol.proj', 'ol.tilegrid.TileGrid'], false);\ngoog.addDependency('../../../ol/ol/tileloadfunction.js', ['ol.TileLoadFunctionType', 'ol.TileVectorLoadFunctionType'], [], false);\ngoog.addDependency('../../../ol/ol/tilequeue.js', ['ol.TilePriorityFunction', 'ol.TileQueue'], ['goog.events', 'goog.events.EventType', 'ol.Coordinate', 'ol.TileState', 'ol.structs.PriorityQueue'], false);\ngoog.addDependency('../../../ol/ol/tilerange.js', ['ol.TileRange'], ['goog.asserts', 'ol.Size', 'ol.TileCoord'], false);\ngoog.addDependency('../../../ol/ol/tileurlfunction.js', ['ol.TileUrlFunction', 'ol.TileUrlFunctionType'], ['goog.asserts', 'goog.math', 'ol.TileCoord', 'ol.tilecoord'], false);\ngoog.addDependency('../../../ol/ol/transformfunction.js', ['ol.TransformFunction'], [], false);\ngoog.addDependency('../../../ol/ol/vec/mat4.js', ['ol.vec.Mat4', 'ol.vec.Mat4.Number'], ['goog.vec.Mat4'], false);\ngoog.addDependency('../../../ol/ol/vectortile.js', ['ol.VectorTile'], ['ol.Tile', 'ol.TileCoord', 'ol.TileLoadFunctionType', 'ol.TileState'], false);\ngoog.addDependency('../../../ol/ol/view.js', ['ol.View', 'ol.ViewHint', 'ol.ViewProperty'], ['goog.asserts', 'ol', 'ol.CenterConstraint', 'ol.Constraints', 'ol.Object', 'ol.ResolutionConstraint', 'ol.RotationConstraint', 'ol.RotationConstraintType', 'ol.Size', 'ol.coordinate', 'ol.extent', 'ol.geom.Polygon', 'ol.geom.SimpleGeometry', 'ol.proj', 'ol.proj.METERS_PER_UNIT', 'ol.proj.Projection', 'ol.proj.Units'], false);\ngoog.addDependency('../../../ol/ol/webgl/buffer.js', ['ol.webgl.Buffer'], ['goog.webgl', 'ol'], false);\ngoog.addDependency('../../../ol/ol/webgl/context.js', ['ol.webgl.Context'], ['goog.asserts', 'goog.events', 'goog.log', 'goog.object', 'ol', 'ol.array', 'ol.webgl.Buffer', 'ol.webgl.WebGLContextEventType'], false);\ngoog.addDependency('../../../ol/ol/webgl/shader.js', ['ol.webgl.Fragment', 'ol.webgl.Shader', 'ol.webgl.Vertex', 'ol.webgl.shader'], ['goog.functions', 'goog.webgl', 'ol.webgl'], false);\ngoog.addDependency('../../../ol/ol/webgl/webgl.js', ['ol.webgl', 'ol.webgl.WebGLContextEventType'], [], false);\ngoog.addDependency('../../../ol/ol/xml.js', ['ol.xml'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.xml', 'goog.object', 'goog.userAgent'], false);\ngoog.addDependency('../../third_party/closure/goog/caja/string/html/htmlparser.js', ['goog.string.html', 'goog.string.html.HtmlParser', 'goog.string.html.HtmlParser.EFlags', 'goog.string.html.HtmlParser.Elements', 'goog.string.html.HtmlParser.Entities', 'goog.string.html.HtmlSaxHandler'], [], false);\ngoog.addDependency('../../third_party/closure/goog/caja/string/html/htmlsanitizer.js', ['goog.string.html.HtmlSanitizer', 'goog.string.html.HtmlSanitizer.AttributeType', 'goog.string.html.HtmlSanitizer.Attributes', 'goog.string.html.htmlSanitize'], ['goog.string.StringBuffer', 'goog.string.html.HtmlParser', 'goog.string.html.HtmlSaxHandler'], false);\ngoog.addDependency('../../third_party/closure/goog/dojo/dom/query.js', ['goog.dom.query'], ['goog.array', 'goog.dom', 'goog.functions', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('../../third_party/closure/goog/jpeg_encoder/jpeg_encoder_basic.js', ['goog.crypt.JpegEncoder'], ['goog.crypt.base64'], false);\ngoog.addDependency('../../third_party/closure/goog/loremipsum/text/loremipsum.js', ['goog.text.LoremIpsum'], ['goog.array', 'goog.math', 'goog.string', 'goog.structs.Map', 'goog.structs.Set'], false);\ngoog.addDependency('../../third_party/closure/goog/mochikit/async/deferred.js', ['goog.async.Deferred', 'goog.async.Deferred.AlreadyCalledError', 'goog.async.Deferred.CanceledError'], ['goog.Promise', 'goog.Thenable', 'goog.array', 'goog.asserts', 'goog.debug.Error'], false);\ngoog.addDependency('../../third_party/closure/goog/mochikit/async/deferredlist.js', ['goog.async.DeferredList'], ['goog.async.Deferred'], false);\ngoog.addDependency('../../third_party/closure/goog/osapi/osapi.js', ['goog.osapi'], [], false);\ngoog.addDependency('../../third_party/closure/goog/svgpan/svgpan.js', ['svgpan.SvgPan'], ['goog.Disposable', 'goog.events', 'goog.events.EventType', 'goog.events.MouseWheelHandler'], false);\ngoog.addDependency('a11y/aria/announcer.js', ['goog.a11y.aria.Announcer'], ['goog.Disposable', 'goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.LivePriority', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.object'], false);\ngoog.addDependency('a11y/aria/announcer_test.js', ['goog.a11y.aria.AnnouncerTest'], ['goog.a11y.aria', 'goog.a11y.aria.Announcer', 'goog.a11y.aria.LivePriority', 'goog.a11y.aria.State', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.iframe', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('a11y/aria/aria.js', ['goog.a11y.aria'], ['goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.a11y.aria.datatables', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.object', 'goog.string'], false);\ngoog.addDependency('a11y/aria/aria_test.js', ['goog.a11y.ariaTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit'], false);\ngoog.addDependency('a11y/aria/attributes.js', ['goog.a11y.aria.AutoCompleteValues', 'goog.a11y.aria.CheckedValues', 'goog.a11y.aria.DropEffectValues', 'goog.a11y.aria.ExpandedValues', 'goog.a11y.aria.GrabbedValues', 'goog.a11y.aria.InvalidValues', 'goog.a11y.aria.LivePriority', 'goog.a11y.aria.OrientationValues', 'goog.a11y.aria.PressedValues', 'goog.a11y.aria.RelevantValues', 'goog.a11y.aria.SelectedValues', 'goog.a11y.aria.SortValues', 'goog.a11y.aria.State'], [], false);\ngoog.addDependency('a11y/aria/datatables.js', ['goog.a11y.aria.datatables'], ['goog.a11y.aria.State', 'goog.object'], false);\ngoog.addDependency('a11y/aria/roles.js', ['goog.a11y.aria.Role'], [], false);\ngoog.addDependency('array/array.js', ['goog.array', 'goog.array.ArrayLike'], ['goog.asserts'], false);\ngoog.addDependency('array/array_test.js', ['goog.arrayTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('asserts/asserts.js', ['goog.asserts', 'goog.asserts.AssertionError'], ['goog.debug.Error', 'goog.dom.NodeType', 'goog.string'], false);\ngoog.addDependency('asserts/asserts_test.js', ['goog.assertsTest'], ['goog.asserts', 'goog.asserts.AssertionError', 'goog.dom', 'goog.dom.TagName', 'goog.string', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('async/animationdelay.js', ['goog.async.AnimationDelay'], ['goog.Disposable', 'goog.events', 'goog.functions'], false);\ngoog.addDependency('async/animationdelay_test.js', ['goog.async.AnimationDelayTest'], ['goog.Timer', 'goog.async.AnimationDelay', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.testing.testSuite'], true);\ngoog.addDependency('async/conditionaldelay.js', ['goog.async.ConditionalDelay'], ['goog.Disposable', 'goog.async.Delay'], false);\ngoog.addDependency('async/conditionaldelay_test.js', ['goog.async.ConditionalDelayTest'], ['goog.async.ConditionalDelay', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('async/debouncer.js', ['goog.async.Debouncer'], ['goog.Disposable', 'goog.Timer'], false);\ngoog.addDependency('async/debouncer_test.js', ['goog.async.DebouncerTest'], ['goog.array', 'goog.async.Debouncer', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('async/delay.js', ['goog.Delay', 'goog.async.Delay'], ['goog.Disposable', 'goog.Timer'], false);\ngoog.addDependency('async/delay_test.js', ['goog.async.DelayTest'], ['goog.async.Delay', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('async/freelist.js', ['goog.async.FreeList'], [], false);\ngoog.addDependency('async/freelist_test.js', ['goog.async.FreeListTest'], ['goog.async.FreeList', 'goog.testing.jsunit'], false);\ngoog.addDependency('async/nexttick.js', ['goog.async.nextTick', 'goog.async.throwException'], ['goog.debug.entryPointRegistry', 'goog.dom.TagName', 'goog.functions', 'goog.labs.userAgent.browser', 'goog.labs.userAgent.engine'], false);\ngoog.addDependency('async/nexttick_test.js', ['goog.async.nextTickTest'], ['goog.Promise', 'goog.Timer', 'goog.async.nextTick', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.dom', 'goog.dom.TagName', 'goog.labs.userAgent.browser', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('async/run.js', ['goog.async.run'], ['goog.async.WorkQueue', 'goog.async.nextTick', 'goog.async.throwException', 'goog.testing.watchers'], false);\ngoog.addDependency('async/run_test.js', ['goog.async.runTest'], ['goog.async.run', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('async/throttle.js', ['goog.Throttle', 'goog.async.Throttle'], ['goog.Disposable', 'goog.Timer'], false);\ngoog.addDependency('async/throttle_test.js', ['goog.async.ThrottleTest'], ['goog.async.Throttle', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('async/workqueue.js', ['goog.async.WorkItem', 'goog.async.WorkQueue'], ['goog.asserts', 'goog.async.FreeList'], false);\ngoog.addDependency('async/workqueue_test.js', ['goog.async.WorkQueueTest'], ['goog.async.WorkQueue', 'goog.testing.jsunit'], false);\ngoog.addDependency('base.js', ['goog'], [], false);\ngoog.addDependency('base_module_test.js', ['goog.baseModuleTest'], ['goog.Timer', 'goog.test_module', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.testSuite'], true);\ngoog.addDependency('base_test.js', ['an.existing.path', 'dup.base', 'far.out', 'goog.baseTest', 'goog.explicit', 'goog.implicit.explicit', 'goog.test', 'goog.test.name', 'goog.test.name.space', 'goog.xy', 'goog.xy.z', 'ns', 'testDep.bar'], ['goog.Promise', 'goog.Timer', 'goog.dom.TagName', 'goog.functions', 'goog.test_module', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('color/alpha.js', ['goog.color.alpha'], ['goog.color'], false);\ngoog.addDependency('color/alpha_test.js', ['goog.color.alphaTest'], ['goog.array', 'goog.color', 'goog.color.alpha', 'goog.testing.jsunit'], false);\ngoog.addDependency('color/color.js', ['goog.color', 'goog.color.Hsl', 'goog.color.Hsv', 'goog.color.Rgb'], ['goog.color.names', 'goog.math'], false);\ngoog.addDependency('color/color_test.js', ['goog.colorTest'], ['goog.array', 'goog.color', 'goog.color.names', 'goog.testing.jsunit'], false);\ngoog.addDependency('color/names.js', ['goog.color.names'], [], false);\ngoog.addDependency('crypt/aes.js', ['goog.crypt.Aes'], ['goog.asserts', 'goog.crypt.BlockCipher'], false);\ngoog.addDependency('crypt/aes_test.js', ['goog.crypt.AesTest'], ['goog.crypt', 'goog.crypt.Aes', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/arc4.js', ['goog.crypt.Arc4'], ['goog.asserts'], false);\ngoog.addDependency('crypt/arc4_test.js', ['goog.crypt.Arc4Test'], ['goog.array', 'goog.crypt.Arc4', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/base64.js', ['goog.crypt.base64'], ['goog.asserts', 'goog.crypt', 'goog.userAgent'], false);\ngoog.addDependency('crypt/base64_test.js', ['goog.crypt.base64Test'], ['goog.crypt', 'goog.crypt.base64', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/basen.js', ['goog.crypt.baseN'], [], false);\ngoog.addDependency('crypt/basen_test.js', ['goog.crypt.baseNTest'], ['goog.crypt.baseN', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/blobhasher.js', ['goog.crypt.BlobHasher', 'goog.crypt.BlobHasher.EventType'], ['goog.asserts', 'goog.events.EventTarget', 'goog.fs', 'goog.log'], false);\ngoog.addDependency('crypt/blobhasher_test.js', ['goog.crypt.BlobHasherTest'], ['goog.crypt', 'goog.crypt.BlobHasher', 'goog.crypt.Md5', 'goog.events', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/blockcipher.js', ['goog.crypt.BlockCipher'], [], false);\ngoog.addDependency('crypt/bytestring_perf.js', ['goog.crypt.byteArrayToStringPerf'], ['goog.array', 'goog.dom', 'goog.testing.PerformanceTable'], false);\ngoog.addDependency('crypt/cbc.js', ['goog.crypt.Cbc'], ['goog.array', 'goog.asserts', 'goog.crypt'], false);\ngoog.addDependency('crypt/cbc_test.js', ['goog.crypt.CbcTest'], ['goog.crypt', 'goog.crypt.Aes', 'goog.crypt.Cbc', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/crypt.js', ['goog.crypt'], ['goog.array', 'goog.asserts'], false);\ngoog.addDependency('crypt/crypt_test.js', ['goog.cryptTest'], ['goog.crypt', 'goog.string', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/hash.js', ['goog.crypt.Hash'], [], false);\ngoog.addDependency('crypt/hash32.js', ['goog.crypt.hash32'], ['goog.crypt'], false);\ngoog.addDependency('crypt/hash32_test.js', ['goog.crypt.hash32Test'], ['goog.crypt.hash32', 'goog.testing.TestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/hashtester.js', ['goog.crypt.hashTester'], ['goog.array', 'goog.crypt', 'goog.dom', 'goog.dom.TagName', 'goog.testing.PerformanceTable', 'goog.testing.PseudoRandom', 'goog.testing.asserts'], false);\ngoog.addDependency('crypt/hmac.js', ['goog.crypt.Hmac'], ['goog.crypt.Hash'], false);\ngoog.addDependency('crypt/hmac_test.js', ['goog.crypt.HmacTest'], ['goog.crypt.Hmac', 'goog.crypt.Sha1', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/md5.js', ['goog.crypt.Md5'], ['goog.crypt.Hash'], false);\ngoog.addDependency('crypt/md5_test.js', ['goog.crypt.Md5Test'], ['goog.crypt', 'goog.crypt.Md5', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/pbkdf2.js', ['goog.crypt.pbkdf2'], ['goog.array', 'goog.asserts', 'goog.crypt', 'goog.crypt.Hmac', 'goog.crypt.Sha1'], false);\ngoog.addDependency('crypt/pbkdf2_test.js', ['goog.crypt.pbkdf2Test'], ['goog.crypt', 'goog.crypt.pbkdf2', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('crypt/sha1.js', ['goog.crypt.Sha1'], ['goog.crypt.Hash'], false);\ngoog.addDependency('crypt/sha1_test.js', ['goog.crypt.Sha1Test'], ['goog.crypt', 'goog.crypt.Sha1', 'goog.crypt.hashTester', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('crypt/sha2.js', ['goog.crypt.Sha2'], ['goog.array', 'goog.asserts', 'goog.crypt.Hash'], false);\ngoog.addDependency('crypt/sha224.js', ['goog.crypt.Sha224'], ['goog.crypt.Sha2'], false);\ngoog.addDependency('crypt/sha224_test.js', ['goog.crypt.Sha224Test'], ['goog.crypt', 'goog.crypt.Sha224', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/sha256.js', ['goog.crypt.Sha256'], ['goog.crypt.Sha2'], false);\ngoog.addDependency('crypt/sha256_test.js', ['goog.crypt.Sha256Test'], ['goog.crypt', 'goog.crypt.Sha256', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false);\ngoog.addDependency('crypt/sha2_64bit.js', ['goog.crypt.Sha2_64bit'], ['goog.array', 'goog.asserts', 'goog.crypt.Hash', 'goog.math.Long'], false);\ngoog.addDependency('crypt/sha2_64bit_test.js', ['goog.crypt.Sha2_64bit_test'], ['goog.array', 'goog.crypt', 'goog.crypt.Sha384', 'goog.crypt.Sha512', 'goog.crypt.Sha512_256', 'goog.crypt.hashTester', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('crypt/sha384.js', ['goog.crypt.Sha384'], ['goog.crypt.Sha2_64bit'], false);\ngoog.addDependency('crypt/sha512.js', ['goog.crypt.Sha512'], ['goog.crypt.Sha2_64bit'], false);\ngoog.addDependency('crypt/sha512_256.js', ['goog.crypt.Sha512_256'], ['goog.crypt.Sha2_64bit'], false);\ngoog.addDependency('cssom/cssom.js', ['goog.cssom', 'goog.cssom.CssRuleType'], ['goog.array', 'goog.dom', 'goog.dom.TagName'], false);\ngoog.addDependency('cssom/cssom_test.js', ['goog.cssomTest'], ['goog.array', 'goog.cssom', 'goog.cssom.CssRuleType', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('cssom/iframe/style.js', ['goog.cssom.iframe.style'], ['goog.asserts', 'goog.cssom', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.string', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('cssom/iframe/style_test.js', ['goog.cssom.iframe.styleTest'], ['goog.cssom', 'goog.cssom.iframe.style', 'goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('datasource/datamanager.js', ['goog.ds.DataManager'], ['goog.ds.BasicNodeList', 'goog.ds.DataNode', 'goog.ds.Expr', 'goog.object', 'goog.string', 'goog.structs', 'goog.structs.Map'], false);\ngoog.addDependency('datasource/datasource.js', ['goog.ds.BaseDataNode', 'goog.ds.BasicNodeList', 'goog.ds.DataNode', 'goog.ds.DataNodeList', 'goog.ds.EmptyNodeList', 'goog.ds.LoadState', 'goog.ds.SortedNodeList', 'goog.ds.Util', 'goog.ds.logger'], ['goog.array', 'goog.log'], false);\ngoog.addDependency('datasource/datasource_test.js', ['goog.ds.JsDataSourceTest'], ['goog.dom.xml', 'goog.ds.DataManager', 'goog.ds.JsDataSource', 'goog.ds.SortedNodeList', 'goog.ds.XmlDataSource', 'goog.testing.jsunit'], false);\ngoog.addDependency('datasource/expr.js', ['goog.ds.Expr'], ['goog.ds.BasicNodeList', 'goog.ds.EmptyNodeList', 'goog.string'], false);\ngoog.addDependency('datasource/expr_test.js', ['goog.ds.ExprTest'], ['goog.ds.DataManager', 'goog.ds.Expr', 'goog.ds.JsDataSource', 'goog.testing.jsunit'], false);\ngoog.addDependency('datasource/fastdatanode.js', ['goog.ds.AbstractFastDataNode', 'goog.ds.FastDataNode', 'goog.ds.FastListNode', 'goog.ds.PrimitiveFastDataNode'], ['goog.ds.DataManager', 'goog.ds.DataNodeList', 'goog.ds.EmptyNodeList', 'goog.string'], false);\ngoog.addDependency('datasource/fastdatanode_test.js', ['goog.ds.FastDataNodeTest'], ['goog.array', 'goog.ds.DataManager', 'goog.ds.Expr', 'goog.ds.FastDataNode', 'goog.testing.jsunit'], false);\ngoog.addDependency('datasource/jsdatasource.js', ['goog.ds.JsDataSource', 'goog.ds.JsPropertyDataSource'], ['goog.ds.BaseDataNode', 'goog.ds.BasicNodeList', 'goog.ds.DataManager', 'goog.ds.DataNode', 'goog.ds.EmptyNodeList', 'goog.ds.LoadState'], false);\ngoog.addDependency('datasource/jsondatasource.js', ['goog.ds.JsonDataSource'], ['goog.Uri', 'goog.dom', 'goog.dom.TagName', 'goog.ds.DataManager', 'goog.ds.JsDataSource', 'goog.ds.LoadState', 'goog.ds.logger', 'goog.log'], false);\ngoog.addDependency('datasource/jsxmlhttpdatasource.js', ['goog.ds.JsXmlHttpDataSource'], ['goog.Uri', 'goog.ds.DataManager', 'goog.ds.FastDataNode', 'goog.ds.LoadState', 'goog.ds.logger', 'goog.events', 'goog.log', 'goog.net.EventType', 'goog.net.XhrIo'], false);\ngoog.addDependency('datasource/jsxmlhttpdatasource_test.js', ['goog.ds.JsXmlHttpDataSourceTest'], ['goog.ds.JsXmlHttpDataSource', 'goog.testing.TestQueue', 'goog.testing.jsunit', 'goog.testing.net.XhrIo'], false);\ngoog.addDependency('datasource/xmldatasource.js', ['goog.ds.XmlDataSource', 'goog.ds.XmlHttpDataSource'], ['goog.Uri', 'goog.dom.NodeType', 'goog.dom.xml', 'goog.ds.BasicNodeList', 'goog.ds.DataManager', 'goog.ds.DataNode', 'goog.ds.LoadState', 'goog.ds.logger', 'goog.net.XhrIo', 'goog.string'], false);\ngoog.addDependency('date/date.js', ['goog.date', 'goog.date.Date', 'goog.date.DateTime', 'goog.date.Interval', 'goog.date.month', 'goog.date.weekDay'], ['goog.asserts', 'goog.date.DateLike', 'goog.i18n.DateTimeSymbols', 'goog.string'], false);\ngoog.addDependency('date/date_test.js', ['goog.dateTest'], ['goog.array', 'goog.date', 'goog.date.Date', 'goog.date.DateTime', 'goog.date.Interval', 'goog.date.month', 'goog.date.weekDay', 'goog.i18n.DateTimeSymbols', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.platform', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('date/datelike.js', ['goog.date.DateLike'], [], false);\ngoog.addDependency('date/daterange.js', ['goog.date.DateRange', 'goog.date.DateRange.Iterator', 'goog.date.DateRange.StandardDateRangeKeys'], ['goog.date.Date', 'goog.date.Interval', 'goog.iter.Iterator', 'goog.iter.StopIteration'], false);\ngoog.addDependency('date/daterange_test.js', ['goog.date.DateRangeTest'], ['goog.date.Date', 'goog.date.DateRange', 'goog.date.Interval', 'goog.i18n.DateTimeSymbols', 'goog.testing.jsunit'], false);\ngoog.addDependency('date/duration.js', ['goog.date.duration'], ['goog.i18n.DateTimeFormat', 'goog.i18n.MessageFormat'], false);\ngoog.addDependency('date/duration_test.js', ['goog.date.durationTest'], ['goog.date.duration', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_bn', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_fa', 'goog.testing.jsunit'], false);\ngoog.addDependency('date/relative.js', ['goog.date.relative', 'goog.date.relative.TimeDeltaFormatter', 'goog.date.relative.Unit'], ['goog.i18n.DateTimeFormat', 'goog.i18n.DateTimePatterns'], false);\ngoog.addDependency('date/relative_test.js', ['goog.date.relativeTest'], ['goog.date.DateTime', 'goog.date.relative', 'goog.i18n.DateTimeFormat', 'goog.testing.jsunit'], false);\ngoog.addDependency('date/relativewithplurals.js', ['goog.date.relativeWithPlurals'], ['goog.date.relative', 'goog.date.relative.Unit', 'goog.i18n.MessageFormat'], false);\ngoog.addDependency('date/relativewithplurals_test.js', ['goog.date.relativeWithPluralsTest'], ['goog.date.relative', 'goog.date.relativeTest', 'goog.date.relativeWithPlurals', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_bn', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_fa', 'goog.i18n.NumberFormatSymbols', 'goog.i18n.NumberFormatSymbols_bn', 'goog.i18n.NumberFormatSymbols_en', 'goog.i18n.NumberFormatSymbols_fa'], false);\ngoog.addDependency('date/utcdatetime.js', ['goog.date.UtcDateTime'], ['goog.date', 'goog.date.Date', 'goog.date.DateTime', 'goog.date.Interval'], false);\ngoog.addDependency('date/utcdatetime_test.js', ['goog.date.UtcDateTimeTest'], ['goog.date.Interval', 'goog.date.UtcDateTime', 'goog.date.month', 'goog.date.weekDay', 'goog.testing.jsunit'], false);\ngoog.addDependency('db/cursor.js', ['goog.db.Cursor'], ['goog.async.Deferred', 'goog.db.Error', 'goog.debug', 'goog.events.EventTarget'], false);\ngoog.addDependency('db/db.js', ['goog.db', 'goog.db.BlockedCallback', 'goog.db.UpgradeNeededCallback'], ['goog.asserts', 'goog.async.Deferred', 'goog.db.Error', 'goog.db.IndexedDb', 'goog.db.Transaction'], false);\ngoog.addDependency('db/db_test.js', ['goog.dbTest'], ['goog.Disposable', 'goog.Promise', 'goog.array', 'goog.db', 'goog.db.Cursor', 'goog.db.Error', 'goog.db.IndexedDb', 'goog.db.KeyRange', 'goog.db.Transaction', 'goog.events', 'goog.object', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.userAgent.product'], false);\ngoog.addDependency('db/error.js', ['goog.db.Error', 'goog.db.Error.ErrorCode', 'goog.db.Error.ErrorName', 'goog.db.Error.VersionChangeBlockedError'], ['goog.debug.Error'], false);\ngoog.addDependency('db/index.js', ['goog.db.Index'], ['goog.async.Deferred', 'goog.db.Cursor', 'goog.db.Error', 'goog.debug'], false);\ngoog.addDependency('db/indexeddb.js', ['goog.db.IndexedDb'], ['goog.db.Error', 'goog.db.ObjectStore', 'goog.db.Transaction', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget'], false);\ngoog.addDependency('db/keyrange.js', ['goog.db.KeyRange'], [], false);\ngoog.addDependency('db/objectstore.js', ['goog.db.ObjectStore'], ['goog.async.Deferred', 'goog.db.Cursor', 'goog.db.Error', 'goog.db.Index', 'goog.debug', 'goog.events'], false);\ngoog.addDependency('db/transaction.js', ['goog.db.Transaction', 'goog.db.Transaction.TransactionMode'], ['goog.async.Deferred', 'goog.db.Error', 'goog.db.ObjectStore', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventTarget'], false);\ngoog.addDependency('debug/console.js', ['goog.debug.Console'], ['goog.debug.LogManager', 'goog.debug.Logger', 'goog.debug.TextFormatter'], false);\ngoog.addDependency('debug/console_test.js', ['goog.debug.ConsoleTest'], ['goog.debug.Console', 'goog.debug.LogRecord', 'goog.debug.Logger', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('debug/debug.js', ['goog.debug'], ['goog.array', 'goog.html.SafeHtml', 'goog.html.SafeUrl', 'goog.html.uncheckedconversions', 'goog.string.Const', 'goog.structs.Set', 'goog.userAgent'], false);\ngoog.addDependency('debug/debug_test.js', ['goog.debugTest'], ['goog.debug', 'goog.html.SafeHtml', 'goog.structs.Set', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/debugwindow.js', ['goog.debug.DebugWindow'], ['goog.debug.HtmlFormatter', 'goog.debug.LogManager', 'goog.debug.Logger', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.SafeStyleSheet', 'goog.string.Const', 'goog.structs.CircularBuffer', 'goog.userAgent'], false);\ngoog.addDependency('debug/debugwindow_test.js', ['goog.debug.DebugWindowTest'], ['goog.debug.DebugWindow', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/devcss/devcss.js', ['goog.debug.DevCss', 'goog.debug.DevCss.UserAgent'], ['goog.asserts', 'goog.cssom', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('debug/devcss/devcss_test.js', ['goog.debug.DevCssTest'], ['goog.debug.DevCss', 'goog.style', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/devcss/devcssrunner.js', ['goog.debug.devCssRunner'], ['goog.debug.DevCss'], false);\ngoog.addDependency('debug/divconsole.js', ['goog.debug.DivConsole'], ['goog.debug.HtmlFormatter', 'goog.debug.LogManager', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.style'], false);\ngoog.addDependency('debug/enhanceerror_test.js', ['goog.debugEnhanceErrorTest'], ['goog.debug', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/entrypointregistry.js', ['goog.debug.EntryPointMonitor', 'goog.debug.entryPointRegistry'], ['goog.asserts'], false);\ngoog.addDependency('debug/entrypointregistry_test.js', ['goog.debug.entryPointRegistryTest'], ['goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/error.js', ['goog.debug.Error'], [], false);\ngoog.addDependency('debug/error_test.js', ['goog.debug.ErrorTest'], ['goog.debug.Error', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('debug/errorhandler.js', ['goog.debug.ErrorHandler', 'goog.debug.ErrorHandler.ProtectedFunctionError'], ['goog.Disposable', 'goog.asserts', 'goog.debug', 'goog.debug.EntryPointMonitor', 'goog.debug.Error', 'goog.debug.Trace'], false);\ngoog.addDependency('debug/errorhandler_async_test.js', ['goog.debug.ErrorHandlerAsyncTest'], ['goog.Promise', 'goog.debug.ErrorHandler', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('debug/errorhandler_test.js', ['goog.debug.ErrorHandlerTest'], ['goog.debug.ErrorHandler', 'goog.testing.MockControl', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/errorhandlerweakdep.js', ['goog.debug.errorHandlerWeakDep'], [], false);\ngoog.addDependency('debug/errorreporter.js', ['goog.debug.ErrorReporter', 'goog.debug.ErrorReporter.ExceptionEvent'], ['goog.asserts', 'goog.debug', 'goog.debug.Error', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.log', 'goog.net.XhrIo', 'goog.object', 'goog.string', 'goog.uri.utils', 'goog.userAgent'], false);\ngoog.addDependency('debug/errorreporter_test.js', ['goog.debug.ErrorReporterTest'], ['goog.debug.Error', 'goog.debug.ErrorReporter', 'goog.events', 'goog.functions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('debug/fancywindow.js', ['goog.debug.FancyWindow'], ['goog.array', 'goog.debug.DebugWindow', 'goog.debug.LogManager', 'goog.debug.Logger', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.SafeStyleSheet', 'goog.object', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false);\ngoog.addDependency('debug/formatter.js', ['goog.debug.Formatter', 'goog.debug.HtmlFormatter', 'goog.debug.TextFormatter'], ['goog.debug', 'goog.debug.Logger', 'goog.debug.RelativeTimeProvider', 'goog.html.SafeHtml'], false);\ngoog.addDependency('debug/formatter_test.js', ['goog.debug.FormatterTest'], ['goog.debug.HtmlFormatter', 'goog.debug.LogRecord', 'goog.debug.Logger', 'goog.html.SafeHtml', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/fpsdisplay.js', ['goog.debug.FpsDisplay'], ['goog.asserts', 'goog.async.AnimationDelay', 'goog.dom', 'goog.dom.TagName', 'goog.ui.Component'], false);\ngoog.addDependency('debug/fpsdisplay_test.js', ['goog.debug.FpsDisplayTest'], ['goog.Timer', 'goog.debug.FpsDisplay', 'goog.testing.TestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/logbuffer.js', ['goog.debug.LogBuffer'], ['goog.asserts', 'goog.debug.LogRecord'], false);\ngoog.addDependency('debug/logbuffer_test.js', ['goog.debug.LogBufferTest'], ['goog.debug.LogBuffer', 'goog.debug.Logger', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/logger.js', ['goog.debug.LogManager', 'goog.debug.Loggable', 'goog.debug.Logger', 'goog.debug.Logger.Level'], ['goog.array', 'goog.asserts', 'goog.debug', 'goog.debug.LogBuffer', 'goog.debug.LogRecord'], false);\ngoog.addDependency('debug/logger_test.js', ['goog.debug.LoggerTest'], ['goog.debug.LogManager', 'goog.debug.Logger', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/logrecord.js', ['goog.debug.LogRecord'], [], false);\ngoog.addDependency('debug/logrecordserializer.js', ['goog.debug.logRecordSerializer'], ['goog.debug.LogRecord', 'goog.debug.Logger', 'goog.json', 'goog.object'], false);\ngoog.addDependency('debug/logrecordserializer_test.js', ['goog.debug.logRecordSerializerTest'], ['goog.debug.LogRecord', 'goog.debug.Logger', 'goog.debug.logRecordSerializer', 'goog.testing.jsunit'], false);\ngoog.addDependency('debug/relativetimeprovider.js', ['goog.debug.RelativeTimeProvider'], [], false);\ngoog.addDependency('debug/tracer.js', ['goog.debug.Trace'], ['goog.array', 'goog.debug.Logger', 'goog.iter', 'goog.log', 'goog.structs.Map', 'goog.structs.SimplePool'], false);\ngoog.addDependency('debug/tracer_test.js', ['goog.debug.TraceTest'], ['goog.debug.Trace', 'goog.testing.jsunit'], false);\ngoog.addDependency('defineclass_test.js', ['goog.defineClassTest'], ['goog.testing.jsunit'], false);\ngoog.addDependency('demos/editor/helloworld.js', ['goog.demos.editor.HelloWorld'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Plugin'], false);\ngoog.addDependency('demos/editor/helloworlddialog.js', ['goog.demos.editor.HelloWorldDialog', 'goog.demos.editor.HelloWorldDialog.OkEvent'], ['goog.dom.TagName', 'goog.events.Event', 'goog.string', 'goog.ui.editor.AbstractDialog'], false);\ngoog.addDependency('demos/editor/helloworlddialogplugin.js', ['goog.demos.editor.HelloWorldDialogPlugin', 'goog.demos.editor.HelloWorldDialogPlugin.Command'], ['goog.demos.editor.HelloWorldDialog', 'goog.dom.TagName', 'goog.editor.plugins.AbstractDialogPlugin', 'goog.editor.range', 'goog.functions', 'goog.ui.editor.AbstractDialog'], false);\ngoog.addDependency('demos/samplecomponent.js', ['goog.demos.SampleComponent'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.ui.Component'], false);\ngoog.addDependency('demos/xpc/xpcdemo.js', ['xpcdemo'], ['goog.Uri', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.html.SafeHtml', 'goog.json', 'goog.log', 'goog.log.Level', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel'], false);\ngoog.addDependency('disposable/disposable.js', ['goog.Disposable', 'goog.dispose', 'goog.disposeAll'], ['goog.disposable.IDisposable'], false);\ngoog.addDependency('disposable/disposable_test.js', ['goog.DisposableTest'], ['goog.Disposable', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('disposable/idisposable.js', ['goog.disposable.IDisposable'], [], false);\ngoog.addDependency('dom/abstractmultirange.js', ['goog.dom.AbstractMultiRange'], ['goog.array', 'goog.dom', 'goog.dom.AbstractRange'], false);\ngoog.addDependency('dom/abstractrange.js', ['goog.dom.AbstractRange', 'goog.dom.RangeIterator', 'goog.dom.RangeType'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.SavedCaretRange', 'goog.dom.TagIterator', 'goog.userAgent'], false);\ngoog.addDependency('dom/abstractrange_test.js', ['goog.dom.AbstractRangeTest'], ['goog.dom', 'goog.dom.AbstractRange', 'goog.dom.Range', 'goog.dom.TagName', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/animationframe/animationframe.js', ['goog.dom.animationFrame', 'goog.dom.animationFrame.Spec', 'goog.dom.animationFrame.State'], ['goog.dom.animationFrame.polyfill'], false);\ngoog.addDependency('dom/animationframe/polyfill.js', ['goog.dom.animationFrame.polyfill'], [], false);\ngoog.addDependency('dom/annotate.js', ['goog.dom.annotate', 'goog.dom.annotate.AnnotateFn'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml'], false);\ngoog.addDependency('dom/annotate_test.js', ['goog.dom.annotateTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.annotate', 'goog.html.SafeHtml', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/browserfeature.js', ['goog.dom.BrowserFeature'], ['goog.userAgent'], false);\ngoog.addDependency('dom/browserrange/abstractrange.js', ['goog.dom.browserrange.AbstractRange'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeEndpoint', 'goog.dom.TagName', 'goog.dom.TextRangeIterator', 'goog.iter', 'goog.math.Coordinate', 'goog.string', 'goog.string.StringBuffer', 'goog.userAgent'], false);\ngoog.addDependency('dom/browserrange/browserrange.js', ['goog.dom.browserrange', 'goog.dom.browserrange.Error'], ['goog.dom', 'goog.dom.BrowserFeature', 'goog.dom.NodeType', 'goog.dom.browserrange.GeckoRange', 'goog.dom.browserrange.IeRange', 'goog.dom.browserrange.OperaRange', 'goog.dom.browserrange.W3cRange', 'goog.dom.browserrange.WebKitRange', 'goog.userAgent'], false);\ngoog.addDependency('dom/browserrange/browserrange_test.js', ['goog.dom.browserrangeTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.RangeEndpoint', 'goog.dom.TagName', 'goog.dom.browserrange', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('dom/browserrange/geckorange.js', ['goog.dom.browserrange.GeckoRange'], ['goog.dom.browserrange.W3cRange'], false);\ngoog.addDependency('dom/browserrange/ierange.js', ['goog.dom.browserrange.IeRange'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeEndpoint', 'goog.dom.TagName', 'goog.dom.browserrange.AbstractRange', 'goog.log', 'goog.string'], false);\ngoog.addDependency('dom/browserrange/operarange.js', ['goog.dom.browserrange.OperaRange'], ['goog.dom.browserrange.W3cRange'], false);\ngoog.addDependency('dom/browserrange/w3crange.js', ['goog.dom.browserrange.W3cRange'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeEndpoint', 'goog.dom.TagName', 'goog.dom.browserrange.AbstractRange', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('dom/browserrange/webkitrange.js', ['goog.dom.browserrange.WebKitRange'], ['goog.dom.RangeEndpoint', 'goog.dom.browserrange.W3cRange', 'goog.userAgent'], false);\ngoog.addDependency('dom/bufferedviewportsizemonitor.js', ['goog.dom.BufferedViewportSizeMonitor'], ['goog.asserts', 'goog.async.Delay', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType'], false);\ngoog.addDependency('dom/bufferedviewportsizemonitor_test.js', ['goog.dom.BufferedViewportSizeMonitorTest'], ['goog.dom.BufferedViewportSizeMonitor', 'goog.dom.ViewportSizeMonitor', 'goog.events', 'goog.events.EventType', 'goog.math.Size', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/classes.js', ['goog.dom.classes'], ['goog.array'], false);\ngoog.addDependency('dom/classes_test.js', ['goog.dom.classes_test'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classes', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/classlist.js', ['goog.dom.classlist'], ['goog.array'], false);\ngoog.addDependency('dom/classlist_test.js', ['goog.dom.classlist_test'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/controlrange.js', ['goog.dom.ControlRange', 'goog.dom.ControlRangeIterator'], ['goog.array', 'goog.dom', 'goog.dom.AbstractMultiRange', 'goog.dom.AbstractRange', 'goog.dom.RangeIterator', 'goog.dom.RangeType', 'goog.dom.SavedRange', 'goog.dom.TagWalkType', 'goog.dom.TextRange', 'goog.iter.StopIteration', 'goog.userAgent'], false);\ngoog.addDependency('dom/controlrange_test.js', ['goog.dom.ControlRangeTest'], ['goog.dom', 'goog.dom.ControlRange', 'goog.dom.RangeType', 'goog.dom.TagName', 'goog.dom.TextRange', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('dom/dataset.js', ['goog.dom.dataset'], ['goog.string', 'goog.userAgent.product'], false);\ngoog.addDependency('dom/dataset_test.js', ['goog.dom.datasetTest'], ['goog.dom', 'goog.dom.dataset', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/dom.js', ['goog.dom', 'goog.dom.Appendable', 'goog.dom.DomHelper'], ['goog.array', 'goog.asserts', 'goog.dom.BrowserFeature', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.math.Coordinate', 'goog.math.Size', 'goog.object', 'goog.string', 'goog.string.Unicode', 'goog.userAgent'], false);\ngoog.addDependency('dom/dom_test.js', ['goog.dom.dom_test'], ['goog.dom', 'goog.dom.BrowserFeature', 'goog.dom.DomHelper', 'goog.dom.InputType', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.functions', 'goog.html.testing', 'goog.object', 'goog.string.Unicode', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('dom/fontsizemonitor.js', ['goog.dom.FontSizeMonitor', 'goog.dom.FontSizeMonitor.EventType'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.userAgent'], false);\ngoog.addDependency('dom/fontsizemonitor_test.js', ['goog.dom.FontSizeMonitorTest'], ['goog.dom', 'goog.dom.FontSizeMonitor', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('dom/forms.js', ['goog.dom.forms'], ['goog.dom.InputType', 'goog.dom.TagName', 'goog.structs.Map'], false);\ngoog.addDependency('dom/forms_test.js', ['goog.dom.formsTest'], ['goog.dom', 'goog.dom.forms', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/fullscreen.js', ['goog.dom.fullscreen', 'goog.dom.fullscreen.EventType'], ['goog.dom', 'goog.userAgent'], false);\ngoog.addDependency('dom/fullscreen_test.js', ['goog.dom.fullscreen_test'], ['goog.dom.DomHelper', 'goog.dom.fullscreen', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/iframe.js', ['goog.dom.iframe'], ['goog.dom', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.legacyconversions', 'goog.userAgent'], false);\ngoog.addDependency('dom/iframe_test.js', ['goog.dom.iframeTest'], ['goog.dom', 'goog.dom.iframe', 'goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/inputtype.js', ['goog.dom.InputType'], [], false);\ngoog.addDependency('dom/inputtype_test.js', ['goog.dom.InputTypeTest'], ['goog.dom.InputType', 'goog.object'], false);\ngoog.addDependency('dom/iter.js', ['goog.dom.iter.AncestorIterator', 'goog.dom.iter.ChildIterator', 'goog.dom.iter.SiblingIterator'], ['goog.iter.Iterator', 'goog.iter.StopIteration'], false);\ngoog.addDependency('dom/iter_test.js', ['goog.dom.iterTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.iter.AncestorIterator', 'goog.dom.iter.ChildIterator', 'goog.dom.iter.SiblingIterator', 'goog.testing.dom', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/multirange.js', ['goog.dom.MultiRange', 'goog.dom.MultiRangeIterator'], ['goog.array', 'goog.dom.AbstractMultiRange', 'goog.dom.AbstractRange', 'goog.dom.RangeIterator', 'goog.dom.RangeType', 'goog.dom.SavedRange', 'goog.dom.TextRange', 'goog.iter.StopIteration', 'goog.log'], false);\ngoog.addDependency('dom/multirange_test.js', ['goog.dom.MultiRangeTest'], ['goog.dom', 'goog.dom.MultiRange', 'goog.dom.Range', 'goog.iter', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/nodeiterator.js', ['goog.dom.NodeIterator'], ['goog.dom.TagIterator'], false);\ngoog.addDependency('dom/nodeiterator_test.js', ['goog.dom.NodeIteratorTest'], ['goog.dom', 'goog.dom.NodeIterator', 'goog.testing.dom', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/nodeoffset.js', ['goog.dom.NodeOffset'], ['goog.Disposable', 'goog.dom.TagName'], false);\ngoog.addDependency('dom/nodeoffset_test.js', ['goog.dom.NodeOffsetTest'], ['goog.dom', 'goog.dom.NodeOffset', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/nodetype.js', ['goog.dom.NodeType'], [], false);\ngoog.addDependency('dom/pattern/abstractpattern.js', ['goog.dom.pattern.AbstractPattern'], ['goog.dom.pattern.MatchType'], false);\ngoog.addDependency('dom/pattern/allchildren.js', ['goog.dom.pattern.AllChildren'], ['goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false);\ngoog.addDependency('dom/pattern/callback/callback.js', ['goog.dom.pattern.callback'], ['goog.dom', 'goog.dom.TagWalkType', 'goog.iter'], false);\ngoog.addDependency('dom/pattern/callback/counter.js', ['goog.dom.pattern.callback.Counter'], [], false);\ngoog.addDependency('dom/pattern/callback/test.js', ['goog.dom.pattern.callback.Test'], ['goog.iter.StopIteration'], false);\ngoog.addDependency('dom/pattern/childmatches.js', ['goog.dom.pattern.ChildMatches'], ['goog.dom.pattern.AllChildren', 'goog.dom.pattern.MatchType'], false);\ngoog.addDependency('dom/pattern/endtag.js', ['goog.dom.pattern.EndTag'], ['goog.dom.TagWalkType', 'goog.dom.pattern.Tag'], false);\ngoog.addDependency('dom/pattern/fulltag.js', ['goog.dom.pattern.FullTag'], ['goog.dom.pattern.MatchType', 'goog.dom.pattern.StartTag', 'goog.dom.pattern.Tag'], false);\ngoog.addDependency('dom/pattern/matcher.js', ['goog.dom.pattern.Matcher'], ['goog.dom.TagIterator', 'goog.dom.pattern.MatchType', 'goog.iter'], false);\ngoog.addDependency('dom/pattern/matcher_test.js', ['goog.dom.pattern.matcherTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.pattern.EndTag', 'goog.dom.pattern.FullTag', 'goog.dom.pattern.Matcher', 'goog.dom.pattern.Repeat', 'goog.dom.pattern.Sequence', 'goog.dom.pattern.StartTag', 'goog.dom.pattern.callback.Counter', 'goog.dom.pattern.callback.Test', 'goog.iter.StopIteration', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/pattern/nodetype.js', ['goog.dom.pattern.NodeType'], ['goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false);\ngoog.addDependency('dom/pattern/pattern.js', ['goog.dom.pattern', 'goog.dom.pattern.MatchType'], [], false);\ngoog.addDependency('dom/pattern/pattern_test.js', ['goog.dom.patternTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagWalkType', 'goog.dom.pattern.AllChildren', 'goog.dom.pattern.ChildMatches', 'goog.dom.pattern.EndTag', 'goog.dom.pattern.FullTag', 'goog.dom.pattern.MatchType', 'goog.dom.pattern.NodeType', 'goog.dom.pattern.Repeat', 'goog.dom.pattern.Sequence', 'goog.dom.pattern.StartTag', 'goog.dom.pattern.Text', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/pattern/repeat.js', ['goog.dom.pattern.Repeat'], ['goog.dom.NodeType', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false);\ngoog.addDependency('dom/pattern/sequence.js', ['goog.dom.pattern.Sequence'], ['goog.dom.NodeType', 'goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false);\ngoog.addDependency('dom/pattern/starttag.js', ['goog.dom.pattern.StartTag'], ['goog.dom.TagWalkType', 'goog.dom.pattern.Tag'], false);\ngoog.addDependency('dom/pattern/tag.js', ['goog.dom.pattern.Tag'], ['goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType', 'goog.object'], false);\ngoog.addDependency('dom/pattern/text.js', ['goog.dom.pattern.Text'], ['goog.dom.NodeType', 'goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false);\ngoog.addDependency('dom/range.js', ['goog.dom.Range'], ['goog.dom', 'goog.dom.AbstractRange', 'goog.dom.BrowserFeature', 'goog.dom.ControlRange', 'goog.dom.MultiRange', 'goog.dom.NodeType', 'goog.dom.TextRange'], false);\ngoog.addDependency('dom/range_test.js', ['goog.dom.RangeTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.RangeType', 'goog.dom.TagName', 'goog.dom.TextRange', 'goog.dom.browserrange', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('dom/rangeendpoint.js', ['goog.dom.RangeEndpoint'], [], false);\ngoog.addDependency('dom/safe.js', ['goog.dom.safe', 'goog.dom.safe.InsertAdjacentHtmlPosition'], ['goog.asserts', 'goog.html.SafeHtml', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.string', 'goog.string.Const'], false);\ngoog.addDependency('dom/safe_test.js', ['goog.dom.safeTest'], ['goog.dom.safe', 'goog.dom.safe.InsertAdjacentHtmlPosition', 'goog.html.SafeHtml', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.testing', 'goog.string.Const', 'goog.testing', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/savedcaretrange.js', ['goog.dom.SavedCaretRange'], ['goog.array', 'goog.dom', 'goog.dom.SavedRange', 'goog.dom.TagName', 'goog.string'], false);\ngoog.addDependency('dom/savedcaretrange_test.js', ['goog.dom.SavedCaretRangeTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.SavedCaretRange', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('dom/savedrange.js', ['goog.dom.SavedRange'], ['goog.Disposable', 'goog.log'], false);\ngoog.addDependency('dom/savedrange_test.js', ['goog.dom.SavedRangeTest'], ['goog.dom', 'goog.dom.Range', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('dom/selection.js', ['goog.dom.selection'], ['goog.dom.InputType', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('dom/selection_test.js', ['goog.dom.selectionTest'], ['goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.selection', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('dom/tagiterator.js', ['goog.dom.TagIterator', 'goog.dom.TagWalkType'], ['goog.dom', 'goog.dom.NodeType', 'goog.iter.Iterator', 'goog.iter.StopIteration'], false);\ngoog.addDependency('dom/tagiterator_test.js', ['goog.dom.TagIteratorTest'], ['goog.dom', 'goog.dom.TagIterator', 'goog.dom.TagName', 'goog.dom.TagWalkType', 'goog.iter', 'goog.iter.StopIteration', 'goog.testing.dom', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/tagname.js', ['goog.dom.TagName'], [], false);\ngoog.addDependency('dom/tagname_test.js', ['goog.dom.TagNameTest'], ['goog.dom.TagName', 'goog.object', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/tags.js', ['goog.dom.tags'], ['goog.object'], false);\ngoog.addDependency('dom/tags_test.js', ['goog.dom.tagsTest'], ['goog.dom.tags', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/textrange.js', ['goog.dom.TextRange'], ['goog.array', 'goog.dom', 'goog.dom.AbstractRange', 'goog.dom.RangeType', 'goog.dom.SavedRange', 'goog.dom.TagName', 'goog.dom.TextRangeIterator', 'goog.dom.browserrange', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('dom/textrange_test.js', ['goog.dom.TextRangeTest'], ['goog.dom', 'goog.dom.ControlRange', 'goog.dom.Range', 'goog.dom.TextRange', 'goog.math.Coordinate', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('dom/textrangeiterator.js', ['goog.dom.TextRangeIterator'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeIterator', 'goog.dom.TagName', 'goog.iter.StopIteration'], false);\ngoog.addDependency('dom/textrangeiterator_test.js', ['goog.dom.TextRangeIteratorTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.TextRangeIterator', 'goog.iter.StopIteration', 'goog.testing.dom', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/vendor.js', ['goog.dom.vendor'], ['goog.string', 'goog.userAgent'], false);\ngoog.addDependency('dom/vendor_test.js', ['goog.dom.vendorTest'], ['goog.array', 'goog.dom.vendor', 'goog.labs.userAgent.util', 'goog.testing.MockUserAgent', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgentTestUtil'], false);\ngoog.addDependency('dom/viewportsizemonitor.js', ['goog.dom.ViewportSizeMonitor'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Size'], false);\ngoog.addDependency('dom/viewportsizemonitor_test.js', ['goog.dom.ViewportSizeMonitorTest'], ['goog.dom.ViewportSizeMonitor', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Size', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('dom/xml.js', ['goog.dom.xml'], ['goog.dom', 'goog.dom.NodeType', 'goog.userAgent'], false);\ngoog.addDependency('dom/xml_test.js', ['goog.dom.xmlTest'], ['goog.dom.TagName', 'goog.dom.xml', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/browserfeature.js', ['goog.editor.BrowserFeature'], ['goog.editor.defines', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('editor/browserfeature_test.js', ['goog.editor.BrowserFeatureTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/clicktoeditwrapper.js', ['goog.editor.ClickToEditWrapper'], ['goog.Disposable', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.range', 'goog.events.BrowserEvent', 'goog.events.EventHandler', 'goog.events.EventType'], false);\ngoog.addDependency('editor/clicktoeditwrapper_test.js', ['goog.editor.ClickToEditWrapperTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.ClickToEditWrapper', 'goog.editor.SeamlessField', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('editor/command.js', ['goog.editor.Command'], [], false);\ngoog.addDependency('editor/contenteditablefield.js', ['goog.editor.ContentEditableField'], ['goog.asserts', 'goog.editor.Field', 'goog.log'], false);\ngoog.addDependency('editor/contenteditablefield_test.js', ['goog.editor.ContentEditableFieldTest'], ['goog.dom', 'goog.editor.ContentEditableField', 'goog.editor.field_test', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/defines.js', ['goog.editor.defines'], [], false);\ngoog.addDependency('editor/field.js', ['goog.editor.Field', 'goog.editor.Field.EventType'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.array', 'goog.asserts', 'goog.async.Delay', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Plugin', 'goog.editor.icontent', 'goog.editor.icontent.FieldFormatInfo', 'goog.editor.icontent.FieldStyleInfo', 'goog.editor.node', 'goog.editor.range', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.functions', 'goog.log', 'goog.log.Level', 'goog.string', 'goog.string.Unicode', 'goog.style', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('editor/field_test.js', ['goog.editor.field_test'], ['goog.array', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.range', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.functions', 'goog.testing.LooseMock', 'goog.testing.MockClock', 'goog.testing.dom', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('editor/focus.js', ['goog.editor.focus'], ['goog.dom.selection'], false);\ngoog.addDependency('editor/focus_test.js', ['goog.editor.focusTest'], ['goog.dom.selection', 'goog.editor.BrowserFeature', 'goog.editor.focus', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/icontent.js', ['goog.editor.icontent', 'goog.editor.icontent.FieldFormatInfo', 'goog.editor.icontent.FieldStyleInfo'], ['goog.dom', 'goog.editor.BrowserFeature', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('editor/icontent_test.js', ['goog.editor.icontentTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.icontent', 'goog.editor.icontent.FieldFormatInfo', 'goog.editor.icontent.FieldStyleInfo', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/link.js', ['goog.editor.Link'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.node', 'goog.editor.range', 'goog.string', 'goog.string.Unicode', 'goog.uri.utils', 'goog.uri.utils.ComponentIndex'], false);\ngoog.addDependency('editor/link_test.js', ['goog.editor.LinkTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.Link', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/node.js', ['goog.editor.node'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.iter.ChildIterator', 'goog.dom.iter.SiblingIterator', 'goog.iter', 'goog.object', 'goog.string', 'goog.string.Unicode', 'goog.userAgent'], false);\ngoog.addDependency('editor/node_test.js', ['goog.editor.nodeTest'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.editor.node', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugin.js', ['goog.editor.Plugin'], ['goog.events.EventTarget', 'goog.functions', 'goog.log', 'goog.object', 'goog.reflect', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugin_test.js', ['goog.editor.PluginTest'], ['goog.editor.Field', 'goog.editor.Plugin', 'goog.functions', 'goog.testing.StrictMock', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/abstractbubbleplugin.js', ['goog.editor.plugins.AbstractBubblePlugin'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.Plugin', 'goog.editor.style', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.actionEventWrapper', 'goog.functions', 'goog.string.Unicode', 'goog.ui.Component', 'goog.ui.editor.Bubble', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/abstractbubbleplugin_test.js', ['goog.editor.plugins.AbstractBubblePluginTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.plugins.AbstractBubblePlugin', 'goog.events.BrowserEvent', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.functions', 'goog.style', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.editor.Bubble', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/abstractdialogplugin.js', ['goog.editor.plugins.AbstractDialogPlugin', 'goog.editor.plugins.AbstractDialogPlugin.EventType'], ['goog.dom', 'goog.dom.Range', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.range', 'goog.events', 'goog.ui.editor.AbstractDialog'], false);\ngoog.addDependency('editor/plugins/abstractdialogplugin_test.js', ['goog.editor.plugins.AbstractDialogPluginTest'], ['goog.dom.SavedRange', 'goog.dom.TagName', 'goog.editor.Field', 'goog.editor.plugins.AbstractDialogPlugin', 'goog.events.Event', 'goog.events.EventHandler', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.ui.editor.AbstractDialog', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/abstracttabhandler.js', ['goog.editor.plugins.AbstractTabHandler'], ['goog.editor.Plugin', 'goog.events.KeyCodes', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/abstracttabhandler_test.js', ['goog.editor.plugins.AbstractTabHandlerTest'], ['goog.editor.Field', 'goog.editor.plugins.AbstractTabHandler', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.testing.StrictMock', 'goog.testing.editor.FieldMock', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/basictextformatter.js', ['goog.editor.plugins.BasicTextFormatter', 'goog.editor.plugins.BasicTextFormatter.COMMAND'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Link', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.range', 'goog.editor.style', 'goog.iter', 'goog.iter.StopIteration', 'goog.log', 'goog.object', 'goog.string', 'goog.string.Unicode', 'goog.style', 'goog.ui.editor.messages', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/basictextformatter_test.js', ['goog.editor.plugins.BasicTextFormatterTest'], ['goog.array', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.plugins.BasicTextFormatter', 'goog.object', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.LooseMock', 'goog.testing.PropertyReplacer', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/blockquote.js', ['goog.editor.plugins.Blockquote'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Plugin', 'goog.editor.node', 'goog.functions', 'goog.log'], false);\ngoog.addDependency('editor/plugins/blockquote_test.js', ['goog.editor.plugins.BlockquoteTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.plugins.Blockquote', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/plugins/emoticons.js', ['goog.editor.plugins.Emoticons'], ['goog.dom.TagName', 'goog.editor.Plugin', 'goog.editor.range', 'goog.functions', 'goog.ui.emoji.Emoji', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/emoticons_test.js', ['goog.editor.plugins.EmoticonsTest'], ['goog.Uri', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.editor.Field', 'goog.editor.plugins.Emoticons', 'goog.testing.jsunit', 'goog.ui.emoji.Emoji', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/enterhandler.js', ['goog.editor.plugins.EnterHandler'], ['goog.dom', 'goog.dom.NodeOffset', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.plugins.Blockquote', 'goog.editor.range', 'goog.editor.style', 'goog.events.KeyCodes', 'goog.functions', 'goog.object', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/enterhandler_test.js', ['goog.editor.plugins.EnterHandlerTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.plugins.Blockquote', 'goog.editor.plugins.EnterHandler', 'goog.editor.range', 'goog.events', 'goog.events.KeyCodes', 'goog.testing.ExpectedFailures', 'goog.testing.MockClock', 'goog.testing.dom', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/firststrong.js', ['goog.editor.plugins.FirstStrong'], ['goog.dom.NodeType', 'goog.dom.TagIterator', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.range', 'goog.i18n.bidi', 'goog.i18n.uChar', 'goog.iter', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/firststrong_test.js', ['goog.editor.plugins.FirstStrongTest'], ['goog.dom.Range', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.plugins.FirstStrong', 'goog.editor.range', 'goog.events.KeyCodes', 'goog.testing.MockClock', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/headerformatter.js', ['goog.editor.plugins.HeaderFormatter'], ['goog.editor.Command', 'goog.editor.Plugin', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/headerformatter_test.js', ['goog.editor.plugins.HeaderFormatterTest'], ['goog.dom', 'goog.editor.Command', 'goog.editor.plugins.BasicTextFormatter', 'goog.editor.plugins.HeaderFormatter', 'goog.events.BrowserEvent', 'goog.testing.LooseMock', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/linkbubble.js', ['goog.editor.plugins.LinkBubble', 'goog.editor.plugins.LinkBubble.Action'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.Link', 'goog.editor.plugins.AbstractBubblePlugin', 'goog.editor.range', 'goog.functions', 'goog.string', 'goog.style', 'goog.ui.editor.messages', 'goog.uri.utils', 'goog.window'], false);\ngoog.addDependency('editor/plugins/linkbubble_test.js', ['goog.editor.plugins.LinkBubbleTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.Link', 'goog.editor.plugins.LinkBubble', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.string', 'goog.style', 'goog.testing.FunctionMock', 'goog.testing.PropertyReplacer', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/linkdialogplugin.js', ['goog.editor.plugins.LinkDialogPlugin'], ['goog.array', 'goog.dom', 'goog.editor.Command', 'goog.editor.plugins.AbstractDialogPlugin', 'goog.events.EventHandler', 'goog.functions', 'goog.ui.editor.AbstractDialog', 'goog.ui.editor.LinkDialog', 'goog.uri.utils'], false);\ngoog.addDependency('editor/plugins/linkdialogplugin_test.js', ['goog.ui.editor.plugins.LinkDialogTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Link', 'goog.editor.plugins.LinkDialogPlugin', 'goog.string', 'goog.string.Unicode', 'goog.testing.MockControl', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.editor.dom', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.editor.AbstractDialog', 'goog.ui.editor.LinkDialog', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/linkshortcutplugin.js', ['goog.editor.plugins.LinkShortcutPlugin'], ['goog.editor.Command', 'goog.editor.Plugin'], false);\ngoog.addDependency('editor/plugins/linkshortcutplugin_test.js', ['goog.editor.plugins.LinkShortcutPluginTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Field', 'goog.editor.plugins.BasicTextFormatter', 'goog.editor.plugins.LinkBubble', 'goog.editor.plugins.LinkShortcutPlugin', 'goog.events.KeyCodes', 'goog.testing.PropertyReplacer', 'goog.testing.dom', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent.product'], false);\ngoog.addDependency('editor/plugins/listtabhandler.js', ['goog.editor.plugins.ListTabHandler'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.plugins.AbstractTabHandler', 'goog.iter'], false);\ngoog.addDependency('editor/plugins/listtabhandler_test.js', ['goog.editor.plugins.ListTabHandlerTest'], ['goog.dom', 'goog.editor.Command', 'goog.editor.plugins.ListTabHandler', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.functions', 'goog.testing.StrictMock', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/plugins/loremipsum.js', ['goog.editor.plugins.LoremIpsum'], ['goog.asserts', 'goog.dom', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.node', 'goog.functions', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/loremipsum_test.js', ['goog.editor.plugins.LoremIpsumTest'], ['goog.dom', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.plugins.LoremIpsum', 'goog.string.Unicode', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/removeformatting.js', ['goog.editor.plugins.RemoveFormatting'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.range', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/removeformatting_test.js', ['goog.editor.plugins.RemoveFormattingTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.plugins.RemoveFormatting', 'goog.string', 'goog.testing.ExpectedFailures', 'goog.testing.dom', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/spacestabhandler.js', ['goog.editor.plugins.SpacesTabHandler'], ['goog.dom.TagName', 'goog.editor.plugins.AbstractTabHandler', 'goog.editor.range'], false);\ngoog.addDependency('editor/plugins/spacestabhandler_test.js', ['goog.editor.plugins.SpacesTabHandlerTest'], ['goog.dom', 'goog.dom.Range', 'goog.editor.plugins.SpacesTabHandler', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.functions', 'goog.testing.StrictMock', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/plugins/tableeditor.js', ['goog.editor.plugins.TableEditor'], ['goog.array', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.Plugin', 'goog.editor.Table', 'goog.editor.node', 'goog.editor.range', 'goog.object', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/tableeditor_test.js', ['goog.editor.plugins.TableEditorTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.plugins.TableEditor', 'goog.object', 'goog.string', 'goog.testing.ExpectedFailures', 'goog.testing.JsUnitException', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/tagonenterhandler.js', ['goog.editor.plugins.TagOnEnterHandler'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.node', 'goog.editor.plugins.EnterHandler', 'goog.editor.range', 'goog.editor.style', 'goog.events.KeyCodes', 'goog.functions', 'goog.string.Unicode', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/tagonenterhandler_test.js', ['goog.editor.plugins.TagOnEnterHandlerTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.plugins.TagOnEnterHandler', 'goog.events.KeyCodes', 'goog.string.Unicode', 'goog.testing.dom', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/plugins/undoredo.js', ['goog.editor.plugins.UndoRedo'], ['goog.dom', 'goog.dom.NodeOffset', 'goog.dom.Range', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.plugins.UndoRedoManager', 'goog.editor.plugins.UndoRedoState', 'goog.events', 'goog.events.EventHandler', 'goog.log', 'goog.object'], false);\ngoog.addDependency('editor/plugins/undoredo_test.js', ['goog.editor.plugins.UndoRedoTest'], ['goog.array', 'goog.dom', 'goog.dom.browserrange', 'goog.editor.Field', 'goog.editor.plugins.LoremIpsum', 'goog.editor.plugins.UndoRedo', 'goog.events', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.StrictMock', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/plugins/undoredomanager.js', ['goog.editor.plugins.UndoRedoManager', 'goog.editor.plugins.UndoRedoManager.EventType'], ['goog.editor.plugins.UndoRedoState', 'goog.events', 'goog.events.EventTarget'], false);\ngoog.addDependency('editor/plugins/undoredomanager_test.js', ['goog.editor.plugins.UndoRedoManagerTest'], ['goog.editor.plugins.UndoRedoManager', 'goog.editor.plugins.UndoRedoState', 'goog.events', 'goog.testing.StrictMock', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/plugins/undoredostate.js', ['goog.editor.plugins.UndoRedoState'], ['goog.events.EventTarget'], false);\ngoog.addDependency('editor/plugins/undoredostate_test.js', ['goog.editor.plugins.UndoRedoStateTest'], ['goog.editor.plugins.UndoRedoState', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/range.js', ['goog.editor.range', 'goog.editor.range.Point'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.RangeEndpoint', 'goog.dom.SavedCaretRange', 'goog.editor.node', 'goog.editor.style', 'goog.iter', 'goog.userAgent'], false);\ngoog.addDependency('editor/range_test.js', ['goog.editor.rangeTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.range', 'goog.editor.range.Point', 'goog.string', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('editor/seamlessfield.js', ['goog.editor.SeamlessField'], ['goog.cssom.iframe.style', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.dom.safe', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.icontent', 'goog.editor.icontent.FieldFormatInfo', 'goog.editor.icontent.FieldStyleInfo', 'goog.editor.node', 'goog.events', 'goog.events.EventType', 'goog.html.uncheckedconversions', 'goog.log', 'goog.string.Const', 'goog.style'], false);\ngoog.addDependency('editor/seamlessfield_test.js', ['goog.editor.seamlessfield_test'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.SeamlessField', 'goog.events', 'goog.functions', 'goog.style', 'goog.testing.MockClock', 'goog.testing.MockRange', 'goog.testing.jsunit'], false);\ngoog.addDependency('editor/style.js', ['goog.editor.style'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.events.EventType', 'goog.object', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('editor/style_test.js', ['goog.editor.styleTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.style', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.style', 'goog.testing.LooseMock', 'goog.testing.jsunit', 'goog.testing.mockmatchers'], false);\ngoog.addDependency('editor/table.js', ['goog.editor.Table', 'goog.editor.TableCell', 'goog.editor.TableRow'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.log', 'goog.string.Unicode', 'goog.style'], false);\ngoog.addDependency('editor/table_test.js', ['goog.editor.TableTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Table', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('events/actioneventwrapper.js', ['goog.events.actionEventWrapper'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.EventWrapper', 'goog.events.KeyCodes', 'goog.userAgent'], false);\ngoog.addDependency('events/actioneventwrapper_test.js', ['goog.events.actionEventWrapperTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.events', 'goog.events.EventHandler', 'goog.events.KeyCodes', 'goog.events.actionEventWrapper', 'goog.testing.events', 'goog.testing.jsunit'], false);\ngoog.addDependency('events/actionhandler.js', ['goog.events.ActionEvent', 'goog.events.ActionHandler', 'goog.events.ActionHandler.EventType', 'goog.events.BeforeActionEvent'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.userAgent'], false);\ngoog.addDependency('events/actionhandler_test.js', ['goog.events.ActionHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.ActionHandler', 'goog.testing.events', 'goog.testing.jsunit'], false);\ngoog.addDependency('events/browserevent.js', ['goog.events.BrowserEvent', 'goog.events.BrowserEvent.MouseButton'], ['goog.events.BrowserFeature', 'goog.events.Event', 'goog.events.EventType', 'goog.reflect', 'goog.userAgent'], false);\ngoog.addDependency('events/browserevent_test.js', ['goog.events.BrowserEventTest'], ['goog.events.BrowserEvent', 'goog.events.BrowserFeature', 'goog.math.Coordinate', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('events/browserfeature.js', ['goog.events.BrowserFeature'], ['goog.userAgent'], false);\ngoog.addDependency('events/event.js', ['goog.events.Event', 'goog.events.EventLike'], ['goog.Disposable', 'goog.events.EventId'], false);\ngoog.addDependency('events/event_test.js', ['goog.events.EventTest'], ['goog.events.Event', 'goog.events.EventId', 'goog.events.EventTarget', 'goog.testing.jsunit'], false);\ngoog.addDependency('events/eventhandler.js', ['goog.events.EventHandler'], ['goog.Disposable', 'goog.events', 'goog.object'], false);\ngoog.addDependency('events/eventhandler_test.js', ['goog.events.EventHandlerTest'], ['goog.events', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('events/eventid.js', ['goog.events.EventId'], [], false);\ngoog.addDependency('events/events.js', ['goog.events', 'goog.events.CaptureSimulationMode', 'goog.events.Key', 'goog.events.ListenableType'], ['goog.asserts', 'goog.debug.entryPointRegistry', 'goog.events.BrowserEvent', 'goog.events.BrowserFeature', 'goog.events.Listenable', 'goog.events.ListenerMap'], false);\ngoog.addDependency('events/events_test.js', ['goog.eventsTest'], ['goog.asserts.AssertionError', 'goog.debug.EntryPointMonitor', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.BrowserFeature', 'goog.events.CaptureSimulationMode', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.Listener', 'goog.functions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('events/eventtarget.js', ['goog.events.EventTarget'], ['goog.Disposable', 'goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.Listenable', 'goog.events.ListenerMap', 'goog.object'], false);\ngoog.addDependency('events/eventtarget_test.js', ['goog.events.EventTargetTest'], ['goog.events.EventTarget', 'goog.events.Listenable', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.testing.jsunit'], false);\ngoog.addDependency('events/eventtarget_via_googevents_test.js', ['goog.events.EventTargetGoogEventsTest'], ['goog.events', 'goog.events.EventTarget', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.testing', 'goog.testing.jsunit'], false);\ngoog.addDependency('events/eventtarget_via_w3cinterface_test.js', ['goog.events.EventTargetW3CTest'], ['goog.events.EventTarget', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.testing.jsunit'], false);\ngoog.addDependency('events/eventtargettester.js', ['goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType'], ['goog.array', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.testing.asserts', 'goog.testing.recordFunction'], false);\ngoog.addDependency('events/eventtype.js', ['goog.events.EventType'], ['goog.userAgent'], false);\ngoog.addDependency('events/eventwrapper.js', ['goog.events.EventWrapper'], [], false);\ngoog.addDependency('events/filedrophandler.js', ['goog.events.FileDropHandler', 'goog.events.FileDropHandler.EventType'], ['goog.array', 'goog.dom', 'goog.events.BrowserEvent', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.log', 'goog.log.Level'], false);\ngoog.addDependency('events/filedrophandler_test.js', ['goog.events.FileDropHandlerTest'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.FileDropHandler', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('events/focushandler.js', ['goog.events.FocusHandler', 'goog.events.FocusHandler.EventType'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.userAgent'], false);\ngoog.addDependency('events/imehandler.js', ['goog.events.ImeHandler', 'goog.events.ImeHandler.Event', 'goog.events.ImeHandler.EventType'], ['goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.userAgent'], false);\ngoog.addDependency('events/imehandler_test.js', ['goog.events.ImeHandlerTest'], ['goog.array', 'goog.dom', 'goog.events', 'goog.events.ImeHandler', 'goog.events.KeyCodes', 'goog.object', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('events/inputhandler.js', ['goog.events.InputHandler', 'goog.events.InputHandler.EventType'], ['goog.Timer', 'goog.dom.TagName', 'goog.events.BrowserEvent', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.KeyCodes', 'goog.userAgent'], false);\ngoog.addDependency('events/inputhandler_test.js', ['goog.events.InputHandlerTest'], ['goog.dom', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('events/keycodes.js', ['goog.events.KeyCodes'], ['goog.userAgent'], false);\ngoog.addDependency('events/keycodes_test.js', ['goog.events.KeyCodesTest'], ['goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.object', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('events/keyhandler.js', ['goog.events.KeyEvent', 'goog.events.KeyHandler', 'goog.events.KeyHandler.EventType'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.userAgent'], false);\ngoog.addDependency('events/keyhandler_test.js', ['goog.events.KeyEventTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('events/keynames.js', ['goog.events.KeyNames'], [], false);\ngoog.addDependency('events/listenable.js', ['goog.events.Listenable', 'goog.events.ListenableKey'], ['goog.events.EventId'], false);\ngoog.addDependency('events/listenable_test.js', ['goog.events.ListenableTest'], ['goog.events.Listenable', 'goog.testing.jsunit'], false);\ngoog.addDependency('events/listener.js', ['goog.events.Listener'], ['goog.events.ListenableKey'], false);\ngoog.addDependency('events/listenermap.js', ['goog.events.ListenerMap'], ['goog.array', 'goog.events.Listener', 'goog.object'], false);\ngoog.addDependency('events/listenermap_test.js', ['goog.events.ListenerMapTest'], ['goog.dispose', 'goog.events', 'goog.events.EventId', 'goog.events.EventTarget', 'goog.events.ListenerMap', 'goog.testing.jsunit'], false);\ngoog.addDependency('events/mousewheelhandler.js', ['goog.events.MouseWheelEvent', 'goog.events.MouseWheelHandler', 'goog.events.MouseWheelHandler.EventType'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.math', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('events/mousewheelhandler_test.js', ['goog.events.MouseWheelHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.MouseWheelEvent', 'goog.events.MouseWheelHandler', 'goog.functions', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('events/onlinehandler.js', ['goog.events.OnlineHandler', 'goog.events.OnlineHandler.EventType'], ['goog.Timer', 'goog.events.BrowserFeature', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.net.NetworkStatusMonitor'], false);\ngoog.addDependency('events/onlinelistener_test.js', ['goog.events.OnlineHandlerTest'], ['goog.events', 'goog.events.BrowserFeature', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.OnlineHandler', 'goog.net.NetworkStatusMonitor', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('events/pastehandler.js', ['goog.events.PasteHandler', 'goog.events.PasteHandler.EventType', 'goog.events.PasteHandler.State'], ['goog.Timer', 'goog.async.ConditionalDelay', 'goog.events.BrowserEvent', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.log', 'goog.userAgent'], false);\ngoog.addDependency('events/pastehandler_test.js', ['goog.events.PasteHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.PasteHandler', 'goog.testing.MockClock', 'goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('events/wheelevent.js', ['goog.events.WheelEvent'], ['goog.asserts', 'goog.events.BrowserEvent'], false);\ngoog.addDependency('events/wheelhandler.js', ['goog.events.WheelHandler'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.WheelEvent', 'goog.style', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('events/wheelhandler_test.js', ['goog.events.WheelHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.WheelEvent', 'goog.events.WheelHandler', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('format/emailaddress.js', ['goog.format.EmailAddress'], ['goog.string'], false);\ngoog.addDependency('format/emailaddress_test.js', ['goog.format.EmailAddressTest'], ['goog.array', 'goog.format.EmailAddress', 'goog.testing.jsunit'], false);\ngoog.addDependency('format/format.js', ['goog.format'], ['goog.i18n.GraphemeBreak', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('format/format_test.js', ['goog.formatTest'], ['goog.dom', 'goog.dom.TagName', 'goog.format', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('format/htmlprettyprinter.js', ['goog.format.HtmlPrettyPrinter', 'goog.format.HtmlPrettyPrinter.Buffer'], ['goog.dom.TagName', 'goog.object', 'goog.string.StringBuffer'], false);\ngoog.addDependency('format/htmlprettyprinter_test.js', ['goog.format.HtmlPrettyPrinterTest'], ['goog.format.HtmlPrettyPrinter', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('format/internationalizedemailaddress.js', ['goog.format.InternationalizedEmailAddress'], ['goog.format.EmailAddress', 'goog.string'], false);\ngoog.addDependency('format/internationalizedemailaddress_test.js', ['goog.format.InternationalizedEmailAddressTest'], ['goog.array', 'goog.format.InternationalizedEmailAddress', 'goog.testing.jsunit'], false);\ngoog.addDependency('format/jsonprettyprinter.js', ['goog.format.JsonPrettyPrinter', 'goog.format.JsonPrettyPrinter.HtmlDelimiters', 'goog.format.JsonPrettyPrinter.TextDelimiters'], ['goog.json', 'goog.json.Serializer', 'goog.string', 'goog.string.StringBuffer', 'goog.string.format'], false);\ngoog.addDependency('format/jsonprettyprinter_test.js', ['goog.format.JsonPrettyPrinterTest'], ['goog.format.JsonPrettyPrinter', 'goog.testing.jsunit'], false);\ngoog.addDependency('fs/entry.js', ['goog.fs.DirectoryEntry', 'goog.fs.DirectoryEntry.Behavior', 'goog.fs.Entry', 'goog.fs.FileEntry'], [], false);\ngoog.addDependency('fs/entryimpl.js', ['goog.fs.DirectoryEntryImpl', 'goog.fs.EntryImpl', 'goog.fs.FileEntryImpl'], ['goog.array', 'goog.async.Deferred', 'goog.fs.DirectoryEntry', 'goog.fs.Entry', 'goog.fs.Error', 'goog.fs.FileEntry', 'goog.fs.FileWriter', 'goog.functions', 'goog.string'], false);\ngoog.addDependency('fs/error.js', ['goog.fs.Error', 'goog.fs.Error.ErrorCode'], ['goog.debug.Error', 'goog.object', 'goog.string'], false);\ngoog.addDependency('fs/filereader.js', ['goog.fs.FileReader', 'goog.fs.FileReader.EventType', 'goog.fs.FileReader.ReadyState'], ['goog.async.Deferred', 'goog.events.EventTarget', 'goog.fs.Error', 'goog.fs.ProgressEvent'], false);\ngoog.addDependency('fs/filesaver.js', ['goog.fs.FileSaver', 'goog.fs.FileSaver.EventType', 'goog.fs.FileSaver.ReadyState'], ['goog.events.EventTarget', 'goog.fs.Error', 'goog.fs.ProgressEvent'], false);\ngoog.addDependency('fs/filesystem.js', ['goog.fs.FileSystem'], [], false);\ngoog.addDependency('fs/filesystemimpl.js', ['goog.fs.FileSystemImpl'], ['goog.fs.DirectoryEntryImpl', 'goog.fs.FileSystem'], false);\ngoog.addDependency('fs/filewriter.js', ['goog.fs.FileWriter'], ['goog.fs.Error', 'goog.fs.FileSaver'], false);\ngoog.addDependency('fs/fs.js', ['goog.fs'], ['goog.array', 'goog.async.Deferred', 'goog.fs.Error', 'goog.fs.FileReader', 'goog.fs.FileSystemImpl', 'goog.fs.url', 'goog.userAgent'], false);\ngoog.addDependency('fs/fs_test.js', ['goog.fsTest'], ['goog.Promise', 'goog.array', 'goog.dom', 'goog.events', 'goog.fs', 'goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.fs.FileReader', 'goog.fs.FileSaver', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('fs/progressevent.js', ['goog.fs.ProgressEvent'], ['goog.events.Event'], false);\ngoog.addDependency('fs/url.js', ['goog.fs.url'], [], false);\ngoog.addDependency('fs/url_test.js', ['goog.urlTest'], ['goog.fs.url', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('functions/functions.js', ['goog.functions'], [], false);\ngoog.addDependency('functions/functions_test.js', ['goog.functionsTest'], ['goog.array', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('fx/abstractdragdrop.js', ['goog.fx.AbstractDragDrop', 'goog.fx.AbstractDragDrop.EventType', 'goog.fx.DragDropEvent', 'goog.fx.DragDropItem'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.fx.Dragger', 'goog.math.Box', 'goog.math.Coordinate', 'goog.style'], false);\ngoog.addDependency('fx/abstractdragdrop_test.js', ['goog.fx.AbstractDragDropTest'], ['goog.array', 'goog.dom.TagName', 'goog.events.EventType', 'goog.functions', 'goog.fx.AbstractDragDrop', 'goog.fx.DragDropItem', 'goog.math.Box', 'goog.math.Coordinate', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/anim/anim.js', ['goog.fx.anim', 'goog.fx.anim.Animated'], ['goog.async.AnimationDelay', 'goog.async.Delay', 'goog.object'], false);\ngoog.addDependency('fx/anim/anim_test.js', ['goog.fx.animTest'], ['goog.async.AnimationDelay', 'goog.async.Delay', 'goog.events', 'goog.functions', 'goog.fx.Animation', 'goog.fx.anim', 'goog.object', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('fx/animation.js', ['goog.fx.Animation', 'goog.fx.Animation.EventType', 'goog.fx.Animation.State', 'goog.fx.AnimationEvent'], ['goog.array', 'goog.events.Event', 'goog.fx.Transition', 'goog.fx.TransitionBase', 'goog.fx.anim', 'goog.fx.anim.Animated'], false);\ngoog.addDependency('fx/animation_test.js', ['goog.fx.AnimationTest'], ['goog.events', 'goog.fx.Animation', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/animationqueue.js', ['goog.fx.AnimationParallelQueue', 'goog.fx.AnimationQueue', 'goog.fx.AnimationSerialQueue'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.fx.Transition', 'goog.fx.TransitionBase'], false);\ngoog.addDependency('fx/animationqueue_test.js', ['goog.fx.AnimationQueueTest'], ['goog.events', 'goog.fx.Animation', 'goog.fx.AnimationParallelQueue', 'goog.fx.AnimationSerialQueue', 'goog.fx.Transition', 'goog.fx.anim', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/css3/fx.js', ['goog.fx.css3'], ['goog.fx.css3.Transition'], false);\ngoog.addDependency('fx/css3/transition.js', ['goog.fx.css3.Transition'], ['goog.Timer', 'goog.asserts', 'goog.fx.TransitionBase', 'goog.style', 'goog.style.transition'], false);\ngoog.addDependency('fx/css3/transition_test.js', ['goog.fx.css3.TransitionTest'], ['goog.dispose', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.fx.Transition', 'goog.fx.css3.Transition', 'goog.style.transition', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('fx/cssspriteanimation.js', ['goog.fx.CssSpriteAnimation'], ['goog.fx.Animation'], false);\ngoog.addDependency('fx/cssspriteanimation_test.js', ['goog.fx.CssSpriteAnimationTest'], ['goog.fx.CssSpriteAnimation', 'goog.math.Box', 'goog.math.Size', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/dom.js', ['goog.fx.dom', 'goog.fx.dom.BgColorTransform', 'goog.fx.dom.ColorTransform', 'goog.fx.dom.Fade', 'goog.fx.dom.FadeIn', 'goog.fx.dom.FadeInAndShow', 'goog.fx.dom.FadeOut', 'goog.fx.dom.FadeOutAndHide', 'goog.fx.dom.PredefinedEffect', 'goog.fx.dom.Resize', 'goog.fx.dom.ResizeHeight', 'goog.fx.dom.ResizeWidth', 'goog.fx.dom.Scroll', 'goog.fx.dom.Slide', 'goog.fx.dom.SlideFrom', 'goog.fx.dom.Swipe'], ['goog.color', 'goog.events', 'goog.fx.Animation', 'goog.fx.Transition', 'goog.style', 'goog.style.bidi'], false);\ngoog.addDependency('fx/dragdrop.js', ['goog.fx.DragDrop'], ['goog.fx.AbstractDragDrop', 'goog.fx.DragDropItem'], false);\ngoog.addDependency('fx/dragdropgroup.js', ['goog.fx.DragDropGroup'], ['goog.dom', 'goog.fx.AbstractDragDrop', 'goog.fx.DragDropItem'], false);\ngoog.addDependency('fx/dragdropgroup_test.js', ['goog.fx.DragDropGroupTest'], ['goog.events', 'goog.fx.DragDropGroup', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/dragger.js', ['goog.fx.DragEvent', 'goog.fx.Dragger', 'goog.fx.Dragger.EventType'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.style', 'goog.style.bidi', 'goog.userAgent'], false);\ngoog.addDependency('fx/dragger_test.js', ['goog.fx.DraggerTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.fx.Dragger', 'goog.math.Rect', 'goog.style.bidi', 'goog.testing.StrictMock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('fx/draglistgroup.js', ['goog.fx.DragListDirection', 'goog.fx.DragListGroup', 'goog.fx.DragListGroup.EventType', 'goog.fx.DragListGroupEvent'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.fx.Dragger', 'goog.math.Coordinate', 'goog.string', 'goog.style'], false);\ngoog.addDependency('fx/draglistgroup_test.js', ['goog.fx.DragListGroupTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.BrowserFeature', 'goog.events.Event', 'goog.events.EventType', 'goog.fx.DragEvent', 'goog.fx.DragListDirection', 'goog.fx.DragListGroup', 'goog.fx.Dragger', 'goog.math.Coordinate', 'goog.object', 'goog.testing.events', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/dragscrollsupport.js', ['goog.fx.DragScrollSupport'], ['goog.Disposable', 'goog.Timer', 'goog.dom', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.style'], false);\ngoog.addDependency('fx/dragscrollsupport_test.js', ['goog.fx.DragScrollSupportTest'], ['goog.fx.DragScrollSupport', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/easing.js', ['goog.fx.easing'], [], false);\ngoog.addDependency('fx/easing_test.js', ['goog.fx.easingTest'], ['goog.fx.easing', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/fx.js', ['goog.fx'], ['goog.asserts', 'goog.fx.Animation', 'goog.fx.Animation.EventType', 'goog.fx.Animation.State', 'goog.fx.AnimationEvent', 'goog.fx.Transition.EventType', 'goog.fx.easing'], false);\ngoog.addDependency('fx/fx_test.js', ['goog.fxTest'], ['goog.fx.Animation', 'goog.object', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('fx/transition.js', ['goog.fx.Transition', 'goog.fx.Transition.EventType'], [], false);\ngoog.addDependency('fx/transitionbase.js', ['goog.fx.TransitionBase', 'goog.fx.TransitionBase.State'], ['goog.events.EventTarget', 'goog.fx.Transition'], false);\ngoog.addDependency('graphics/abstractgraphics.js', ['goog.graphics.AbstractGraphics'], ['goog.dom', 'goog.graphics.Path', 'goog.math.Coordinate', 'goog.math.Size', 'goog.style', 'goog.ui.Component'], false);\ngoog.addDependency('graphics/affinetransform.js', ['goog.graphics.AffineTransform'], ['goog.math'], false);\ngoog.addDependency('graphics/canvaselement.js', ['goog.graphics.CanvasEllipseElement', 'goog.graphics.CanvasGroupElement', 'goog.graphics.CanvasImageElement', 'goog.graphics.CanvasPathElement', 'goog.graphics.CanvasRectElement', 'goog.graphics.CanvasTextElement'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.graphics.EllipseElement', 'goog.graphics.GroupElement', 'goog.graphics.ImageElement', 'goog.graphics.Path', 'goog.graphics.PathElement', 'goog.graphics.RectElement', 'goog.graphics.TextElement', 'goog.html.SafeHtml', 'goog.html.uncheckedconversions', 'goog.math', 'goog.string', 'goog.string.Const'], false);\ngoog.addDependency('graphics/canvasgraphics.js', ['goog.graphics.CanvasGraphics'], ['goog.dom.TagName', 'goog.events.EventType', 'goog.graphics.AbstractGraphics', 'goog.graphics.CanvasEllipseElement', 'goog.graphics.CanvasGroupElement', 'goog.graphics.CanvasImageElement', 'goog.graphics.CanvasPathElement', 'goog.graphics.CanvasRectElement', 'goog.graphics.CanvasTextElement', 'goog.graphics.SolidFill', 'goog.math.Size', 'goog.style'], false);\ngoog.addDependency('graphics/canvasgraphics_test.js', ['goog.graphics.CanvasGraphicsTest'], ['goog.dom', 'goog.graphics.CanvasGraphics', 'goog.graphics.SolidFill', 'goog.graphics.Stroke', 'goog.testing.jsunit'], false);\ngoog.addDependency('graphics/element.js', ['goog.graphics.Element'], ['goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.events.Listenable', 'goog.graphics.AffineTransform', 'goog.math'], false);\ngoog.addDependency('graphics/ellipseelement.js', ['goog.graphics.EllipseElement'], ['goog.graphics.StrokeAndFillElement'], false);\ngoog.addDependency('graphics/ext/coordinates.js', ['goog.graphics.ext.coordinates'], ['goog.string'], false);\ngoog.addDependency('graphics/ext/element.js', ['goog.graphics.ext.Element'], ['goog.events.EventTarget', 'goog.functions', 'goog.graphics.ext.coordinates'], false);\ngoog.addDependency('graphics/ext/ellipse.js', ['goog.graphics.ext.Ellipse'], ['goog.graphics.ext.StrokeAndFillElement'], false);\ngoog.addDependency('graphics/ext/ext.js', ['goog.graphics.ext'], ['goog.graphics.ext.Ellipse', 'goog.graphics.ext.Graphics', 'goog.graphics.ext.Group', 'goog.graphics.ext.Image', 'goog.graphics.ext.Rectangle', 'goog.graphics.ext.Shape', 'goog.graphics.ext.coordinates'], false);\ngoog.addDependency('graphics/ext/graphics.js', ['goog.graphics.ext.Graphics'], ['goog.events', 'goog.events.EventType', 'goog.graphics', 'goog.graphics.ext.Group'], false);\ngoog.addDependency('graphics/ext/group.js', ['goog.graphics.ext.Group'], ['goog.array', 'goog.graphics.ext.Element'], false);\ngoog.addDependency('graphics/ext/image.js', ['goog.graphics.ext.Image'], ['goog.graphics.ext.Element'], false);\ngoog.addDependency('graphics/ext/path.js', ['goog.graphics.ext.Path'], ['goog.graphics.AffineTransform', 'goog.graphics.Path', 'goog.math.Rect'], false);\ngoog.addDependency('graphics/ext/rectangle.js', ['goog.graphics.ext.Rectangle'], ['goog.graphics.ext.StrokeAndFillElement'], false);\ngoog.addDependency('graphics/ext/shape.js', ['goog.graphics.ext.Shape'], ['goog.graphics.ext.StrokeAndFillElement'], false);\ngoog.addDependency('graphics/ext/strokeandfillelement.js', ['goog.graphics.ext.StrokeAndFillElement'], ['goog.graphics.ext.Element'], false);\ngoog.addDependency('graphics/fill.js', ['goog.graphics.Fill'], [], false);\ngoog.addDependency('graphics/font.js', ['goog.graphics.Font'], [], false);\ngoog.addDependency('graphics/graphics.js', ['goog.graphics'], ['goog.dom', 'goog.graphics.CanvasGraphics', 'goog.graphics.SvgGraphics', 'goog.graphics.VmlGraphics', 'goog.userAgent'], false);\ngoog.addDependency('graphics/groupelement.js', ['goog.graphics.GroupElement'], ['goog.graphics.Element'], false);\ngoog.addDependency('graphics/imageelement.js', ['goog.graphics.ImageElement'], ['goog.graphics.Element'], false);\ngoog.addDependency('graphics/lineargradient.js', ['goog.graphics.LinearGradient'], ['goog.asserts', 'goog.graphics.Fill'], false);\ngoog.addDependency('graphics/path.js', ['goog.graphics.Path', 'goog.graphics.Path.Segment'], ['goog.array', 'goog.math'], false);\ngoog.addDependency('graphics/pathelement.js', ['goog.graphics.PathElement'], ['goog.graphics.StrokeAndFillElement'], false);\ngoog.addDependency('graphics/paths.js', ['goog.graphics.paths'], ['goog.graphics.Path', 'goog.math.Coordinate'], false);\ngoog.addDependency('graphics/rectelement.js', ['goog.graphics.RectElement'], ['goog.graphics.StrokeAndFillElement'], false);\ngoog.addDependency('graphics/solidfill.js', ['goog.graphics.SolidFill'], ['goog.graphics.Fill'], false);\ngoog.addDependency('graphics/stroke.js', ['goog.graphics.Stroke'], [], false);\ngoog.addDependency('graphics/strokeandfillelement.js', ['goog.graphics.StrokeAndFillElement'], ['goog.graphics.Element'], false);\ngoog.addDependency('graphics/svgelement.js', ['goog.graphics.SvgEllipseElement', 'goog.graphics.SvgGroupElement', 'goog.graphics.SvgImageElement', 'goog.graphics.SvgPathElement', 'goog.graphics.SvgRectElement', 'goog.graphics.SvgTextElement'], ['goog.dom', 'goog.graphics.EllipseElement', 'goog.graphics.GroupElement', 'goog.graphics.ImageElement', 'goog.graphics.PathElement', 'goog.graphics.RectElement', 'goog.graphics.TextElement'], false);\ngoog.addDependency('graphics/svggraphics.js', ['goog.graphics.SvgGraphics'], ['goog.Timer', 'goog.dom', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.graphics.AbstractGraphics', 'goog.graphics.LinearGradient', 'goog.graphics.Path', 'goog.graphics.SolidFill', 'goog.graphics.Stroke', 'goog.graphics.SvgEllipseElement', 'goog.graphics.SvgGroupElement', 'goog.graphics.SvgImageElement', 'goog.graphics.SvgPathElement', 'goog.graphics.SvgRectElement', 'goog.graphics.SvgTextElement', 'goog.math', 'goog.math.Size', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('graphics/textelement.js', ['goog.graphics.TextElement'], ['goog.graphics.StrokeAndFillElement'], false);\ngoog.addDependency('graphics/vmlelement.js', ['goog.graphics.VmlEllipseElement', 'goog.graphics.VmlGroupElement', 'goog.graphics.VmlImageElement', 'goog.graphics.VmlPathElement', 'goog.graphics.VmlRectElement', 'goog.graphics.VmlTextElement'], ['goog.dom', 'goog.graphics.EllipseElement', 'goog.graphics.GroupElement', 'goog.graphics.ImageElement', 'goog.graphics.PathElement', 'goog.graphics.RectElement', 'goog.graphics.TextElement'], false);\ngoog.addDependency('graphics/vmlgraphics.js', ['goog.graphics.VmlGraphics'], ['goog.array', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.graphics.AbstractGraphics', 'goog.graphics.LinearGradient', 'goog.graphics.Path', 'goog.graphics.SolidFill', 'goog.graphics.VmlEllipseElement', 'goog.graphics.VmlGroupElement', 'goog.graphics.VmlImageElement', 'goog.graphics.VmlPathElement', 'goog.graphics.VmlRectElement', 'goog.graphics.VmlTextElement', 'goog.html.uncheckedconversions', 'goog.math', 'goog.math.Size', 'goog.string', 'goog.string.Const', 'goog.style'], false);\ngoog.addDependency('history/event.js', ['goog.history.Event'], ['goog.events.Event', 'goog.history.EventType'], false);\ngoog.addDependency('history/eventtype.js', ['goog.history.EventType'], [], false);\ngoog.addDependency('history/history.js', ['goog.History', 'goog.History.Event', 'goog.History.EventType'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.safe', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.history.Event', 'goog.history.EventType', 'goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.legacyconversions', 'goog.labs.userAgent.device', 'goog.memoize', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false);\ngoog.addDependency('history/history_test.js', ['goog.HistoryTest'], ['goog.History', 'goog.dispose', 'goog.dom', 'goog.html.TrustedResourceUrl', 'goog.string.Const', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('history/html5history.js', ['goog.history.Html5History', 'goog.history.Html5History.TokenTransformer'], ['goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.history.Event'], false);\ngoog.addDependency('history/html5history_test.js', ['goog.history.Html5HistoryTest'], ['goog.Timer', 'goog.events', 'goog.events.EventType', 'goog.history.EventType', 'goog.history.Html5History', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.recordFunction'], false);\ngoog.addDependency('html/flash.js', ['goog.html.flash'], ['goog.asserts', 'goog.html.SafeHtml'], false);\ngoog.addDependency('html/flash_test.js', ['goog.html.flashTest'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.flash', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/legacyconversions.js', ['goog.html.legacyconversions'], ['goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl'], false);\ngoog.addDependency('html/legacyconversions_test.js', ['goog.html.legacyconversionsTest'], ['goog.html.SafeHtml', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.legacyconversions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/safehtml.js', ['goog.html.SafeHtml'], ['goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.tags', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.object', 'goog.string', 'goog.string.Const', 'goog.string.TypedString'], false);\ngoog.addDependency('html/safehtml_test.js', ['goog.html.safeHtmlTest'], ['goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.testing', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/safescript.js', ['goog.html.SafeScript'], ['goog.asserts', 'goog.string.Const', 'goog.string.TypedString'], false);\ngoog.addDependency('html/safescript_test.js', ['goog.html.safeScriptTest'], ['goog.html.SafeScript', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/safestyle.js', ['goog.html.SafeStyle'], ['goog.array', 'goog.asserts', 'goog.string', 'goog.string.Const', 'goog.string.TypedString'], false);\ngoog.addDependency('html/safestyle_test.js', ['goog.html.safeStyleTest'], ['goog.html.SafeStyle', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/safestylesheet.js', ['goog.html.SafeStyleSheet'], ['goog.array', 'goog.asserts', 'goog.string', 'goog.string.Const', 'goog.string.TypedString'], false);\ngoog.addDependency('html/safestylesheet_test.js', ['goog.html.safeStyleSheetTest'], ['goog.html.SafeStyleSheet', 'goog.string', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/safeurl.js', ['goog.html.SafeUrl'], ['goog.asserts', 'goog.fs.url', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.string.Const', 'goog.string.TypedString'], false);\ngoog.addDependency('html/safeurl_test.js', ['goog.html.safeUrlTest'], ['goog.html.SafeUrl', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('html/silverlight.js', ['goog.html.silverlight'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.flash', 'goog.string.Const'], false);\ngoog.addDependency('html/silverlight_test.js', ['goog.html.silverlightTest'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.silverlight', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/testing.js', ['goog.html.testing'], ['goog.html.SafeHtml', 'goog.html.SafeScript', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl'], false);\ngoog.addDependency('html/trustedresourceurl.js', ['goog.html.TrustedResourceUrl'], ['goog.asserts', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.string.Const', 'goog.string.TypedString'], false);\ngoog.addDependency('html/trustedresourceurl_test.js', ['goog.html.trustedResourceUrlTest'], ['goog.html.TrustedResourceUrl', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/uncheckedconversions.js', ['goog.html.uncheckedconversions'], ['goog.asserts', 'goog.html.SafeHtml', 'goog.html.SafeScript', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.string', 'goog.string.Const'], false);\ngoog.addDependency('html/uncheckedconversions_test.js', ['goog.html.uncheckedconversionsTest'], ['goog.html.SafeHtml', 'goog.html.SafeScript', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.uncheckedconversions', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('html/utils.js', ['goog.html.utils'], ['goog.string'], false);\ngoog.addDependency('html/utils_test.js', ['goog.html.UtilsTest'], ['goog.array', 'goog.dom.TagName', 'goog.html.utils', 'goog.object', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/bidi.js', ['goog.i18n.bidi', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.i18n.bidi.Format'], [], false);\ngoog.addDependency('i18n/bidi_test.js', ['goog.i18n.bidiTest'], ['goog.i18n.bidi', 'goog.i18n.bidi.Dir', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/bidiformatter.js', ['goog.i18n.BidiFormatter'], ['goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.i18n.bidi', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.Format'], false);\ngoog.addDependency('i18n/bidiformatter_test.js', ['goog.i18n.BidiFormatterTest'], ['goog.html.SafeHtml', 'goog.i18n.BidiFormatter', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.Format', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/charlistdecompressor.js', ['goog.i18n.CharListDecompressor'], ['goog.array', 'goog.i18n.uChar'], false);\ngoog.addDependency('i18n/charlistdecompressor_test.js', ['goog.i18n.CharListDecompressorTest'], ['goog.i18n.CharListDecompressor', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/charpickerdata.js', ['goog.i18n.CharPickerData'], [], false);\ngoog.addDependency('i18n/collation.js', ['goog.i18n.collation'], [], false);\ngoog.addDependency('i18n/collation_test.js', ['goog.i18n.collationTest'], ['goog.i18n.collation', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('i18n/compactnumberformatsymbols.js', ['goog.i18n.CompactNumberFormatSymbols', 'goog.i18n.CompactNumberFormatSymbols_af', 'goog.i18n.CompactNumberFormatSymbols_af_ZA', 'goog.i18n.CompactNumberFormatSymbols_am', 'goog.i18n.CompactNumberFormatSymbols_am_ET', 'goog.i18n.CompactNumberFormatSymbols_ar', 'goog.i18n.CompactNumberFormatSymbols_ar_001', 'goog.i18n.CompactNumberFormatSymbols_ar_EG', 'goog.i18n.CompactNumberFormatSymbols_az', 'goog.i18n.CompactNumberFormatSymbols_az_Latn', 'goog.i18n.CompactNumberFormatSymbols_az_Latn_AZ', 'goog.i18n.CompactNumberFormatSymbols_be', 'goog.i18n.CompactNumberFormatSymbols_be_BY', 'goog.i18n.CompactNumberFormatSymbols_bg', 'goog.i18n.CompactNumberFormatSymbols_bg_BG', 'goog.i18n.CompactNumberFormatSymbols_bn', 'goog.i18n.CompactNumberFormatSymbols_bn_BD', 'goog.i18n.CompactNumberFormatSymbols_br', 'goog.i18n.CompactNumberFormatSymbols_br_FR', 'goog.i18n.CompactNumberFormatSymbols_bs', 'goog.i18n.CompactNumberFormatSymbols_bs_Latn', 'goog.i18n.CompactNumberFormatSymbols_bs_Latn_BA', 'goog.i18n.CompactNumberFormatSymbols_ca', 'goog.i18n.CompactNumberFormatSymbols_ca_AD', 'goog.i18n.CompactNumberFormatSymbols_ca_ES', 'goog.i18n.CompactNumberFormatSymbols_ca_ES_VALENCIA', 'goog.i18n.CompactNumberFormatSymbols_ca_FR', 'goog.i18n.CompactNumberFormatSymbols_ca_IT', 'goog.i18n.CompactNumberFormatSymbols_chr', 'goog.i18n.CompactNumberFormatSymbols_chr_US', 'goog.i18n.CompactNumberFormatSymbols_cs', 'goog.i18n.CompactNumberFormatSymbols_cs_CZ', 'goog.i18n.CompactNumberFormatSymbols_cy', 'goog.i18n.CompactNumberFormatSymbols_cy_GB', 'goog.i18n.CompactNumberFormatSymbols_da', 'goog.i18n.CompactNumberFormatSymbols_da_DK', 'goog.i18n.CompactNumberFormatSymbols_da_GL', 'goog.i18n.CompactNumberFormatSymbols_de', 'goog.i18n.CompactNumberFormatSymbols_de_AT', 'goog.i18n.CompactNumberFormatSymbols_de_BE', 'goog.i18n.CompactNumberFormatSymbols_de_CH', 'goog.i18n.CompactNumberFormatSymbols_de_DE', 'goog.i18n.CompactNumberFormatSymbols_de_LU', 'goog.i18n.CompactNumberFormatSymbols_el', 'goog.i18n.CompactNumberFormatSymbols_el_CY', 'goog.i18n.CompactNumberFormatSymbols_el_GR', 'goog.i18n.CompactNumberFormatSymbols_en', 'goog.i18n.CompactNumberFormatSymbols_en_001', 'goog.i18n.CompactNumberFormatSymbols_en_AS', 'goog.i18n.CompactNumberFormatSymbols_en_AU', 'goog.i18n.CompactNumberFormatSymbols_en_CA', 'goog.i18n.CompactNumberFormatSymbols_en_DG', 'goog.i18n.CompactNumberFormatSymbols_en_FM', 'goog.i18n.CompactNumberFormatSymbols_en_GB', 'goog.i18n.CompactNumberFormatSymbols_en_GU', 'goog.i18n.CompactNumberFormatSymbols_en_IE', 'goog.i18n.CompactNumberFormatSymbols_en_IN', 'goog.i18n.CompactNumberFormatSymbols_en_IO', 'goog.i18n.CompactNumberFormatSymbols_en_MH', 'goog.i18n.CompactNumberFormatSymbols_en_MP', 'goog.i18n.CompactNumberFormatSymbols_en_PR', 'goog.i18n.CompactNumberFormatSymbols_en_PW', 'goog.i18n.CompactNumberFormatSymbols_en_SG', 'goog.i18n.CompactNumberFormatSymbols_en_TC', 'goog.i18n.CompactNumberFormatSymbols_en_UM', 'goog.i18n.CompactNumberFormatSymbols_en_US', 'goog.i18n.CompactNumberFormatSymbols_en_VG', 'goog.i18n.CompactNumberFormatSymbols_en_VI', 'goog.i18n.CompactNumberFormatSymbols_en_ZA', 'goog.i18n.CompactNumberFormatSymbols_en_ZW', 'goog.i18n.CompactNumberFormatSymbols_es', 'goog.i18n.CompactNumberFormatSymbols_es_419', 'goog.i18n.CompactNumberFormatSymbols_es_EA', 'goog.i18n.CompactNumberFormatSymbols_es_ES', 'goog.i18n.CompactNumberFormatSymbols_es_IC', 'goog.i18n.CompactNumberFormatSymbols_es_MX', 'goog.i18n.CompactNumberFormatSymbols_es_US', 'goog.i18n.CompactNumberFormatSymbols_et', 'goog.i18n.CompactNumberFormatSymbols_et_EE', 'goog.i18n.CompactNumberFormatSymbols_eu', 'goog.i18n.CompactNumberFormatSymbols_eu_ES', 'goog.i18n.CompactNumberFormatSymbols_fa', 'goog.i18n.CompactNumberFormatSymbols_fa_IR', 'goog.i18n.CompactNumberFormatSymbols_fi', 'goog.i18n.CompactNumberFormatSymbols_fi_FI', 'goog.i18n.CompactNumberFormatSymbols_fil', 'goog.i18n.CompactNumberFormatSymbols_fil_PH', 'goog.i18n.CompactNumberFormatSymbols_fr', 'goog.i18n.CompactNumberFormatSymbols_fr_BL', 'goog.i18n.CompactNumberFormatSymbols_fr_CA', 'goog.i18n.CompactNumberFormatSymbols_fr_FR', 'goog.i18n.CompactNumberFormatSymbols_fr_GF', 'goog.i18n.CompactNumberFormatSymbols_fr_GP', 'goog.i18n.CompactNumberFormatSymbols_fr_MC', 'goog.i18n.CompactNumberFormatSymbols_fr_MF', 'goog.i18n.CompactNumberFormatSymbols_fr_MQ', 'goog.i18n.CompactNumberFormatSymbols_fr_PM', 'goog.i18n.CompactNumberFormatSymbols_fr_RE', 'goog.i18n.CompactNumberFormatSymbols_fr_YT', 'goog.i18n.CompactNumberFormatSymbols_ga', 'goog.i18n.CompactNumberFormatSymbols_ga_IE', 'goog.i18n.CompactNumberFormatSymbols_gl', 'goog.i18n.CompactNumberFormatSymbols_gl_ES', 'goog.i18n.CompactNumberFormatSymbols_gsw', 'goog.i18n.CompactNumberFormatSymbols_gsw_CH', 'goog.i18n.CompactNumberFormatSymbols_gsw_LI', 'goog.i18n.CompactNumberFormatSymbols_gu', 'goog.i18n.CompactNumberFormatSymbols_gu_IN', 'goog.i18n.CompactNumberFormatSymbols_haw', 'goog.i18n.CompactNumberFormatSymbols_haw_US', 'goog.i18n.CompactNumberFormatSymbols_he', 'goog.i18n.CompactNumberFormatSymbols_he_IL', 'goog.i18n.CompactNumberFormatSymbols_hi', 'goog.i18n.CompactNumberFormatSymbols_hi_IN', 'goog.i18n.CompactNumberFormatSymbols_hr', 'goog.i18n.CompactNumberFormatSymbols_hr_HR', 'goog.i18n.CompactNumberFormatSymbols_hu', 'goog.i18n.CompactNumberFormatSymbols_hu_HU', 'goog.i18n.CompactNumberFormatSymbols_hy', 'goog.i18n.CompactNumberFormatSymbols_hy_AM', 'goog.i18n.CompactNumberFormatSymbols_id', 'goog.i18n.CompactNumberFormatSymbols_id_ID', 'goog.i18n.CompactNumberFormatSymbols_in', 'goog.i18n.CompactNumberFormatSymbols_is', 'goog.i18n.CompactNumberFormatSymbols_is_IS', 'goog.i18n.CompactNumberFormatSymbols_it', 'goog.i18n.CompactNumberFormatSymbols_it_IT', 'goog.i18n.CompactNumberFormatSymbols_it_SM', 'goog.i18n.CompactNumberFormatSymbols_iw', 'goog.i18n.CompactNumberFormatSymbols_ja', 'goog.i18n.CompactNumberFormatSymbols_ja_JP', 'goog.i18n.CompactNumberFormatSymbols_ka', 'goog.i18n.CompactNumberFormatSymbols_ka_GE', 'goog.i18n.CompactNumberFormatSymbols_kk', 'goog.i18n.CompactNumberFormatSymbols_kk_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_kk_Cyrl_KZ', 'goog.i18n.CompactNumberFormatSymbols_km', 'goog.i18n.CompactNumberFormatSymbols_km_KH', 'goog.i18n.CompactNumberFormatSymbols_kn', 'goog.i18n.CompactNumberFormatSymbols_kn_IN', 'goog.i18n.CompactNumberFormatSymbols_ko', 'goog.i18n.CompactNumberFormatSymbols_ko_KR', 'goog.i18n.CompactNumberFormatSymbols_ky', 'goog.i18n.CompactNumberFormatSymbols_ky_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_ky_Cyrl_KG', 'goog.i18n.CompactNumberFormatSymbols_ln', 'goog.i18n.CompactNumberFormatSymbols_ln_CD', 'goog.i18n.CompactNumberFormatSymbols_lo', 'goog.i18n.CompactNumberFormatSymbols_lo_LA', 'goog.i18n.CompactNumberFormatSymbols_lt', 'goog.i18n.CompactNumberFormatSymbols_lt_LT', 'goog.i18n.CompactNumberFormatSymbols_lv', 'goog.i18n.CompactNumberFormatSymbols_lv_LV', 'goog.i18n.CompactNumberFormatSymbols_mk', 'goog.i18n.CompactNumberFormatSymbols_mk_MK', 'goog.i18n.CompactNumberFormatSymbols_ml', 'goog.i18n.CompactNumberFormatSymbols_ml_IN', 'goog.i18n.CompactNumberFormatSymbols_mn', 'goog.i18n.CompactNumberFormatSymbols_mn_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_mn_Cyrl_MN', 'goog.i18n.CompactNumberFormatSymbols_mr', 'goog.i18n.CompactNumberFormatSymbols_mr_IN', 'goog.i18n.CompactNumberFormatSymbols_ms', 'goog.i18n.CompactNumberFormatSymbols_ms_Latn', 'goog.i18n.CompactNumberFormatSymbols_ms_Latn_MY', 'goog.i18n.CompactNumberFormatSymbols_mt', 'goog.i18n.CompactNumberFormatSymbols_mt_MT', 'goog.i18n.CompactNumberFormatSymbols_my', 'goog.i18n.CompactNumberFormatSymbols_my_MM', 'goog.i18n.CompactNumberFormatSymbols_nb', 'goog.i18n.CompactNumberFormatSymbols_nb_NO', 'goog.i18n.CompactNumberFormatSymbols_nb_SJ', 'goog.i18n.CompactNumberFormatSymbols_ne', 'goog.i18n.CompactNumberFormatSymbols_ne_NP', 'goog.i18n.CompactNumberFormatSymbols_nl', 'goog.i18n.CompactNumberFormatSymbols_nl_NL', 'goog.i18n.CompactNumberFormatSymbols_no', 'goog.i18n.CompactNumberFormatSymbols_no_NO', 'goog.i18n.CompactNumberFormatSymbols_or', 'goog.i18n.CompactNumberFormatSymbols_or_IN', 'goog.i18n.CompactNumberFormatSymbols_pa', 'goog.i18n.CompactNumberFormatSymbols_pa_Guru', 'goog.i18n.CompactNumberFormatSymbols_pa_Guru_IN', 'goog.i18n.CompactNumberFormatSymbols_pl', 'goog.i18n.CompactNumberFormatSymbols_pl_PL', 'goog.i18n.CompactNumberFormatSymbols_pt', 'goog.i18n.CompactNumberFormatSymbols_pt_BR', 'goog.i18n.CompactNumberFormatSymbols_pt_PT', 'goog.i18n.CompactNumberFormatSymbols_ro', 'goog.i18n.CompactNumberFormatSymbols_ro_RO', 'goog.i18n.CompactNumberFormatSymbols_ru', 'goog.i18n.CompactNumberFormatSymbols_ru_RU', 'goog.i18n.CompactNumberFormatSymbols_si', 'goog.i18n.CompactNumberFormatSymbols_si_LK', 'goog.i18n.CompactNumberFormatSymbols_sk', 'goog.i18n.CompactNumberFormatSymbols_sk_SK', 'goog.i18n.CompactNumberFormatSymbols_sl', 'goog.i18n.CompactNumberFormatSymbols_sl_SI', 'goog.i18n.CompactNumberFormatSymbols_sq', 'goog.i18n.CompactNumberFormatSymbols_sq_AL', 'goog.i18n.CompactNumberFormatSymbols_sr', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_RS', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn_RS', 'goog.i18n.CompactNumberFormatSymbols_sv', 'goog.i18n.CompactNumberFormatSymbols_sv_SE', 'goog.i18n.CompactNumberFormatSymbols_sw', 'goog.i18n.CompactNumberFormatSymbols_sw_TZ', 'goog.i18n.CompactNumberFormatSymbols_ta', 'goog.i18n.CompactNumberFormatSymbols_ta_IN', 'goog.i18n.CompactNumberFormatSymbols_te', 'goog.i18n.CompactNumberFormatSymbols_te_IN', 'goog.i18n.CompactNumberFormatSymbols_th', 'goog.i18n.CompactNumberFormatSymbols_th_TH', 'goog.i18n.CompactNumberFormatSymbols_tl', 'goog.i18n.CompactNumberFormatSymbols_tr', 'goog.i18n.CompactNumberFormatSymbols_tr_TR', 'goog.i18n.CompactNumberFormatSymbols_uk', 'goog.i18n.CompactNumberFormatSymbols_uk_UA', 'goog.i18n.CompactNumberFormatSymbols_ur', 'goog.i18n.CompactNumberFormatSymbols_ur_PK', 'goog.i18n.CompactNumberFormatSymbols_uz', 'goog.i18n.CompactNumberFormatSymbols_uz_Latn', 'goog.i18n.CompactNumberFormatSymbols_uz_Latn_UZ', 'goog.i18n.CompactNumberFormatSymbols_vi', 'goog.i18n.CompactNumberFormatSymbols_vi_VN', 'goog.i18n.CompactNumberFormatSymbols_zh', 'goog.i18n.CompactNumberFormatSymbols_zh_CN', 'goog.i18n.CompactNumberFormatSymbols_zh_HK', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans_CN', 'goog.i18n.CompactNumberFormatSymbols_zh_TW', 'goog.i18n.CompactNumberFormatSymbols_zu', 'goog.i18n.CompactNumberFormatSymbols_zu_ZA'], [], false);\ngoog.addDependency('i18n/compactnumberformatsymbols_ext.js', ['goog.i18n.CompactNumberFormatSymbolsExt', 'goog.i18n.CompactNumberFormatSymbols_af_NA', 'goog.i18n.CompactNumberFormatSymbols_agq', 'goog.i18n.CompactNumberFormatSymbols_agq_CM', 'goog.i18n.CompactNumberFormatSymbols_ak', 'goog.i18n.CompactNumberFormatSymbols_ak_GH', 'goog.i18n.CompactNumberFormatSymbols_ar_AE', 'goog.i18n.CompactNumberFormatSymbols_ar_BH', 'goog.i18n.CompactNumberFormatSymbols_ar_DJ', 'goog.i18n.CompactNumberFormatSymbols_ar_DZ', 'goog.i18n.CompactNumberFormatSymbols_ar_EH', 'goog.i18n.CompactNumberFormatSymbols_ar_ER', 'goog.i18n.CompactNumberFormatSymbols_ar_IL', 'goog.i18n.CompactNumberFormatSymbols_ar_IQ', 'goog.i18n.CompactNumberFormatSymbols_ar_JO', 'goog.i18n.CompactNumberFormatSymbols_ar_KM', 'goog.i18n.CompactNumberFormatSymbols_ar_KW', 'goog.i18n.CompactNumberFormatSymbols_ar_LB', 'goog.i18n.CompactNumberFormatSymbols_ar_LY', 'goog.i18n.CompactNumberFormatSymbols_ar_MA', 'goog.i18n.CompactNumberFormatSymbols_ar_MR', 'goog.i18n.CompactNumberFormatSymbols_ar_OM', 'goog.i18n.CompactNumberFormatSymbols_ar_PS', 'goog.i18n.CompactNumberFormatSymbols_ar_QA', 'goog.i18n.CompactNumberFormatSymbols_ar_SA', 'goog.i18n.CompactNumberFormatSymbols_ar_SD', 'goog.i18n.CompactNumberFormatSymbols_ar_SO', 'goog.i18n.CompactNumberFormatSymbols_ar_SS', 'goog.i18n.CompactNumberFormatSymbols_ar_SY', 'goog.i18n.CompactNumberFormatSymbols_ar_TD', 'goog.i18n.CompactNumberFormatSymbols_ar_TN', 'goog.i18n.CompactNumberFormatSymbols_ar_YE', 'goog.i18n.CompactNumberFormatSymbols_as', 'goog.i18n.CompactNumberFormatSymbols_as_IN', 'goog.i18n.CompactNumberFormatSymbols_asa', 'goog.i18n.CompactNumberFormatSymbols_asa_TZ', 'goog.i18n.CompactNumberFormatSymbols_ast', 'goog.i18n.CompactNumberFormatSymbols_ast_ES', 'goog.i18n.CompactNumberFormatSymbols_az_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_az_Cyrl_AZ', 'goog.i18n.CompactNumberFormatSymbols_bas', 'goog.i18n.CompactNumberFormatSymbols_bas_CM', 'goog.i18n.CompactNumberFormatSymbols_bem', 'goog.i18n.CompactNumberFormatSymbols_bem_ZM', 'goog.i18n.CompactNumberFormatSymbols_bez', 'goog.i18n.CompactNumberFormatSymbols_bez_TZ', 'goog.i18n.CompactNumberFormatSymbols_bm', 'goog.i18n.CompactNumberFormatSymbols_bm_Latn', 'goog.i18n.CompactNumberFormatSymbols_bm_Latn_ML', 'goog.i18n.CompactNumberFormatSymbols_bn_IN', 'goog.i18n.CompactNumberFormatSymbols_bo', 'goog.i18n.CompactNumberFormatSymbols_bo_CN', 'goog.i18n.CompactNumberFormatSymbols_bo_IN', 'goog.i18n.CompactNumberFormatSymbols_brx', 'goog.i18n.CompactNumberFormatSymbols_brx_IN', 'goog.i18n.CompactNumberFormatSymbols_bs_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_bs_Cyrl_BA', 'goog.i18n.CompactNumberFormatSymbols_cgg', 'goog.i18n.CompactNumberFormatSymbols_cgg_UG', 'goog.i18n.CompactNumberFormatSymbols_ckb', 'goog.i18n.CompactNumberFormatSymbols_ckb_Arab', 'goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IQ', 'goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IR', 'goog.i18n.CompactNumberFormatSymbols_ckb_IQ', 'goog.i18n.CompactNumberFormatSymbols_ckb_IR', 'goog.i18n.CompactNumberFormatSymbols_ckb_Latn', 'goog.i18n.CompactNumberFormatSymbols_ckb_Latn_IQ', 'goog.i18n.CompactNumberFormatSymbols_dav', 'goog.i18n.CompactNumberFormatSymbols_dav_KE', 'goog.i18n.CompactNumberFormatSymbols_de_LI', 'goog.i18n.CompactNumberFormatSymbols_dje', 'goog.i18n.CompactNumberFormatSymbols_dje_NE', 'goog.i18n.CompactNumberFormatSymbols_dsb', 'goog.i18n.CompactNumberFormatSymbols_dsb_DE', 'goog.i18n.CompactNumberFormatSymbols_dua', 'goog.i18n.CompactNumberFormatSymbols_dua_CM', 'goog.i18n.CompactNumberFormatSymbols_dyo', 'goog.i18n.CompactNumberFormatSymbols_dyo_SN', 'goog.i18n.CompactNumberFormatSymbols_dz', 'goog.i18n.CompactNumberFormatSymbols_dz_BT', 'goog.i18n.CompactNumberFormatSymbols_ebu', 'goog.i18n.CompactNumberFormatSymbols_ebu_KE', 'goog.i18n.CompactNumberFormatSymbols_ee', 'goog.i18n.CompactNumberFormatSymbols_ee_GH', 'goog.i18n.CompactNumberFormatSymbols_ee_TG', 'goog.i18n.CompactNumberFormatSymbols_en_150', 'goog.i18n.CompactNumberFormatSymbols_en_AG', 'goog.i18n.CompactNumberFormatSymbols_en_AI', 'goog.i18n.CompactNumberFormatSymbols_en_BB', 'goog.i18n.CompactNumberFormatSymbols_en_BE', 'goog.i18n.CompactNumberFormatSymbols_en_BM', 'goog.i18n.CompactNumberFormatSymbols_en_BS', 'goog.i18n.CompactNumberFormatSymbols_en_BW', 'goog.i18n.CompactNumberFormatSymbols_en_BZ', 'goog.i18n.CompactNumberFormatSymbols_en_CC', 'goog.i18n.CompactNumberFormatSymbols_en_CK', 'goog.i18n.CompactNumberFormatSymbols_en_CM', 'goog.i18n.CompactNumberFormatSymbols_en_CX', 'goog.i18n.CompactNumberFormatSymbols_en_DM', 'goog.i18n.CompactNumberFormatSymbols_en_ER', 'goog.i18n.CompactNumberFormatSymbols_en_FJ', 'goog.i18n.CompactNumberFormatSymbols_en_FK', 'goog.i18n.CompactNumberFormatSymbols_en_GD', 'goog.i18n.CompactNumberFormatSymbols_en_GG', 'goog.i18n.CompactNumberFormatSymbols_en_GH', 'goog.i18n.CompactNumberFormatSymbols_en_GI', 'goog.i18n.CompactNumberFormatSymbols_en_GM', 'goog.i18n.CompactNumberFormatSymbols_en_GY', 'goog.i18n.CompactNumberFormatSymbols_en_HK', 'goog.i18n.CompactNumberFormatSymbols_en_IM', 'goog.i18n.CompactNumberFormatSymbols_en_JE', 'goog.i18n.CompactNumberFormatSymbols_en_JM', 'goog.i18n.CompactNumberFormatSymbols_en_KE', 'goog.i18n.CompactNumberFormatSymbols_en_KI', 'goog.i18n.CompactNumberFormatSymbols_en_KN', 'goog.i18n.CompactNumberFormatSymbols_en_KY', 'goog.i18n.CompactNumberFormatSymbols_en_LC', 'goog.i18n.CompactNumberFormatSymbols_en_LR', 'goog.i18n.CompactNumberFormatSymbols_en_LS', 'goog.i18n.CompactNumberFormatSymbols_en_MG', 'goog.i18n.CompactNumberFormatSymbols_en_MO', 'goog.i18n.CompactNumberFormatSymbols_en_MS', 'goog.i18n.CompactNumberFormatSymbols_en_MT', 'goog.i18n.CompactNumberFormatSymbols_en_MU', 'goog.i18n.CompactNumberFormatSymbols_en_MW', 'goog.i18n.CompactNumberFormatSymbols_en_MY', 'goog.i18n.CompactNumberFormatSymbols_en_NA', 'goog.i18n.CompactNumberFormatSymbols_en_NF', 'goog.i18n.CompactNumberFormatSymbols_en_NG', 'goog.i18n.CompactNumberFormatSymbols_en_NR', 'goog.i18n.CompactNumberFormatSymbols_en_NU', 'goog.i18n.CompactNumberFormatSymbols_en_NZ', 'goog.i18n.CompactNumberFormatSymbols_en_PG', 'goog.i18n.CompactNumberFormatSymbols_en_PH', 'goog.i18n.CompactNumberFormatSymbols_en_PK', 'goog.i18n.CompactNumberFormatSymbols_en_PN', 'goog.i18n.CompactNumberFormatSymbols_en_RW', 'goog.i18n.CompactNumberFormatSymbols_en_SB', 'goog.i18n.CompactNumberFormatSymbols_en_SC', 'goog.i18n.CompactNumberFormatSymbols_en_SD', 'goog.i18n.CompactNumberFormatSymbols_en_SH', 'goog.i18n.CompactNumberFormatSymbols_en_SL', 'goog.i18n.CompactNumberFormatSymbols_en_SS', 'goog.i18n.CompactNumberFormatSymbols_en_SX', 'goog.i18n.CompactNumberFormatSymbols_en_SZ', 'goog.i18n.CompactNumberFormatSymbols_en_TK', 'goog.i18n.CompactNumberFormatSymbols_en_TO', 'goog.i18n.CompactNumberFormatSymbols_en_TT', 'goog.i18n.CompactNumberFormatSymbols_en_TV', 'goog.i18n.CompactNumberFormatSymbols_en_TZ', 'goog.i18n.CompactNumberFormatSymbols_en_UG', 'goog.i18n.CompactNumberFormatSymbols_en_VC', 'goog.i18n.CompactNumberFormatSymbols_en_VU', 'goog.i18n.CompactNumberFormatSymbols_en_WS', 'goog.i18n.CompactNumberFormatSymbols_en_ZM', 'goog.i18n.CompactNumberFormatSymbols_eo', 'goog.i18n.CompactNumberFormatSymbols_eo_001', 'goog.i18n.CompactNumberFormatSymbols_es_AR', 'goog.i18n.CompactNumberFormatSymbols_es_BO', 'goog.i18n.CompactNumberFormatSymbols_es_CL', 'goog.i18n.CompactNumberFormatSymbols_es_CO', 'goog.i18n.CompactNumberFormatSymbols_es_CR', 'goog.i18n.CompactNumberFormatSymbols_es_CU', 'goog.i18n.CompactNumberFormatSymbols_es_DO', 'goog.i18n.CompactNumberFormatSymbols_es_EC', 'goog.i18n.CompactNumberFormatSymbols_es_GQ', 'goog.i18n.CompactNumberFormatSymbols_es_GT', 'goog.i18n.CompactNumberFormatSymbols_es_HN', 'goog.i18n.CompactNumberFormatSymbols_es_NI', 'goog.i18n.CompactNumberFormatSymbols_es_PA', 'goog.i18n.CompactNumberFormatSymbols_es_PE', 'goog.i18n.CompactNumberFormatSymbols_es_PH', 'goog.i18n.CompactNumberFormatSymbols_es_PR', 'goog.i18n.CompactNumberFormatSymbols_es_PY', 'goog.i18n.CompactNumberFormatSymbols_es_SV', 'goog.i18n.CompactNumberFormatSymbols_es_UY', 'goog.i18n.CompactNumberFormatSymbols_es_VE', 'goog.i18n.CompactNumberFormatSymbols_ewo', 'goog.i18n.CompactNumberFormatSymbols_ewo_CM', 'goog.i18n.CompactNumberFormatSymbols_fa_AF', 'goog.i18n.CompactNumberFormatSymbols_ff', 'goog.i18n.CompactNumberFormatSymbols_ff_CM', 'goog.i18n.CompactNumberFormatSymbols_ff_GN', 'goog.i18n.CompactNumberFormatSymbols_ff_MR', 'goog.i18n.CompactNumberFormatSymbols_ff_SN', 'goog.i18n.CompactNumberFormatSymbols_fo', 'goog.i18n.CompactNumberFormatSymbols_fo_FO', 'goog.i18n.CompactNumberFormatSymbols_fr_BE', 'goog.i18n.CompactNumberFormatSymbols_fr_BF', 'goog.i18n.CompactNumberFormatSymbols_fr_BI', 'goog.i18n.CompactNumberFormatSymbols_fr_BJ', 'goog.i18n.CompactNumberFormatSymbols_fr_CD', 'goog.i18n.CompactNumberFormatSymbols_fr_CF', 'goog.i18n.CompactNumberFormatSymbols_fr_CG', 'goog.i18n.CompactNumberFormatSymbols_fr_CH', 'goog.i18n.CompactNumberFormatSymbols_fr_CI', 'goog.i18n.CompactNumberFormatSymbols_fr_CM', 'goog.i18n.CompactNumberFormatSymbols_fr_DJ', 'goog.i18n.CompactNumberFormatSymbols_fr_DZ', 'goog.i18n.CompactNumberFormatSymbols_fr_GA', 'goog.i18n.CompactNumberFormatSymbols_fr_GN', 'goog.i18n.CompactNumberFormatSymbols_fr_GQ', 'goog.i18n.CompactNumberFormatSymbols_fr_HT', 'goog.i18n.CompactNumberFormatSymbols_fr_KM', 'goog.i18n.CompactNumberFormatSymbols_fr_LU', 'goog.i18n.CompactNumberFormatSymbols_fr_MA', 'goog.i18n.CompactNumberFormatSymbols_fr_MG', 'goog.i18n.CompactNumberFormatSymbols_fr_ML', 'goog.i18n.CompactNumberFormatSymbols_fr_MR', 'goog.i18n.CompactNumberFormatSymbols_fr_MU', 'goog.i18n.CompactNumberFormatSymbols_fr_NC', 'goog.i18n.CompactNumberFormatSymbols_fr_NE', 'goog.i18n.CompactNumberFormatSymbols_fr_PF', 'goog.i18n.CompactNumberFormatSymbols_fr_RW', 'goog.i18n.CompactNumberFormatSymbols_fr_SC', 'goog.i18n.CompactNumberFormatSymbols_fr_SN', 'goog.i18n.CompactNumberFormatSymbols_fr_SY', 'goog.i18n.CompactNumberFormatSymbols_fr_TD', 'goog.i18n.CompactNumberFormatSymbols_fr_TG', 'goog.i18n.CompactNumberFormatSymbols_fr_TN', 'goog.i18n.CompactNumberFormatSymbols_fr_VU', 'goog.i18n.CompactNumberFormatSymbols_fr_WF', 'goog.i18n.CompactNumberFormatSymbols_fur', 'goog.i18n.CompactNumberFormatSymbols_fur_IT', 'goog.i18n.CompactNumberFormatSymbols_fy', 'goog.i18n.CompactNumberFormatSymbols_fy_NL', 'goog.i18n.CompactNumberFormatSymbols_gd', 'goog.i18n.CompactNumberFormatSymbols_gd_GB', 'goog.i18n.CompactNumberFormatSymbols_gsw_FR', 'goog.i18n.CompactNumberFormatSymbols_guz', 'goog.i18n.CompactNumberFormatSymbols_guz_KE', 'goog.i18n.CompactNumberFormatSymbols_gv', 'goog.i18n.CompactNumberFormatSymbols_gv_IM', 'goog.i18n.CompactNumberFormatSymbols_ha', 'goog.i18n.CompactNumberFormatSymbols_ha_Latn', 'goog.i18n.CompactNumberFormatSymbols_ha_Latn_GH', 'goog.i18n.CompactNumberFormatSymbols_ha_Latn_NE', 'goog.i18n.CompactNumberFormatSymbols_ha_Latn_NG', 'goog.i18n.CompactNumberFormatSymbols_hr_BA', 'goog.i18n.CompactNumberFormatSymbols_hsb', 'goog.i18n.CompactNumberFormatSymbols_hsb_DE', 'goog.i18n.CompactNumberFormatSymbols_ig', 'goog.i18n.CompactNumberFormatSymbols_ig_NG', 'goog.i18n.CompactNumberFormatSymbols_ii', 'goog.i18n.CompactNumberFormatSymbols_ii_CN', 'goog.i18n.CompactNumberFormatSymbols_it_CH', 'goog.i18n.CompactNumberFormatSymbols_jgo', 'goog.i18n.CompactNumberFormatSymbols_jgo_CM', 'goog.i18n.CompactNumberFormatSymbols_jmc', 'goog.i18n.CompactNumberFormatSymbols_jmc_TZ', 'goog.i18n.CompactNumberFormatSymbols_kab', 'goog.i18n.CompactNumberFormatSymbols_kab_DZ', 'goog.i18n.CompactNumberFormatSymbols_kam', 'goog.i18n.CompactNumberFormatSymbols_kam_KE', 'goog.i18n.CompactNumberFormatSymbols_kde', 'goog.i18n.CompactNumberFormatSymbols_kde_TZ', 'goog.i18n.CompactNumberFormatSymbols_kea', 'goog.i18n.CompactNumberFormatSymbols_kea_CV', 'goog.i18n.CompactNumberFormatSymbols_khq', 'goog.i18n.CompactNumberFormatSymbols_khq_ML', 'goog.i18n.CompactNumberFormatSymbols_ki', 'goog.i18n.CompactNumberFormatSymbols_ki_KE', 'goog.i18n.CompactNumberFormatSymbols_kkj', 'goog.i18n.CompactNumberFormatSymbols_kkj_CM', 'goog.i18n.CompactNumberFormatSymbols_kl', 'goog.i18n.CompactNumberFormatSymbols_kl_GL', 'goog.i18n.CompactNumberFormatSymbols_kln', 'goog.i18n.CompactNumberFormatSymbols_kln_KE', 'goog.i18n.CompactNumberFormatSymbols_ko_KP', 'goog.i18n.CompactNumberFormatSymbols_kok', 'goog.i18n.CompactNumberFormatSymbols_kok_IN', 'goog.i18n.CompactNumberFormatSymbols_ks', 'goog.i18n.CompactNumberFormatSymbols_ks_Arab', 'goog.i18n.CompactNumberFormatSymbols_ks_Arab_IN', 'goog.i18n.CompactNumberFormatSymbols_ksb', 'goog.i18n.CompactNumberFormatSymbols_ksb_TZ', 'goog.i18n.CompactNumberFormatSymbols_ksf', 'goog.i18n.CompactNumberFormatSymbols_ksf_CM', 'goog.i18n.CompactNumberFormatSymbols_ksh', 'goog.i18n.CompactNumberFormatSymbols_ksh_DE', 'goog.i18n.CompactNumberFormatSymbols_kw', 'goog.i18n.CompactNumberFormatSymbols_kw_GB', 'goog.i18n.CompactNumberFormatSymbols_lag', 'goog.i18n.CompactNumberFormatSymbols_lag_TZ', 'goog.i18n.CompactNumberFormatSymbols_lb', 'goog.i18n.CompactNumberFormatSymbols_lb_LU', 'goog.i18n.CompactNumberFormatSymbols_lg', 'goog.i18n.CompactNumberFormatSymbols_lg_UG', 'goog.i18n.CompactNumberFormatSymbols_lkt', 'goog.i18n.CompactNumberFormatSymbols_lkt_US', 'goog.i18n.CompactNumberFormatSymbols_ln_AO', 'goog.i18n.CompactNumberFormatSymbols_ln_CF', 'goog.i18n.CompactNumberFormatSymbols_ln_CG', 'goog.i18n.CompactNumberFormatSymbols_lu', 'goog.i18n.CompactNumberFormatSymbols_lu_CD', 'goog.i18n.CompactNumberFormatSymbols_luo', 'goog.i18n.CompactNumberFormatSymbols_luo_KE', 'goog.i18n.CompactNumberFormatSymbols_luy', 'goog.i18n.CompactNumberFormatSymbols_luy_KE', 'goog.i18n.CompactNumberFormatSymbols_mas', 'goog.i18n.CompactNumberFormatSymbols_mas_KE', 'goog.i18n.CompactNumberFormatSymbols_mas_TZ', 'goog.i18n.CompactNumberFormatSymbols_mer', 'goog.i18n.CompactNumberFormatSymbols_mer_KE', 'goog.i18n.CompactNumberFormatSymbols_mfe', 'goog.i18n.CompactNumberFormatSymbols_mfe_MU', 'goog.i18n.CompactNumberFormatSymbols_mg', 'goog.i18n.CompactNumberFormatSymbols_mg_MG', 'goog.i18n.CompactNumberFormatSymbols_mgh', 'goog.i18n.CompactNumberFormatSymbols_mgh_MZ', 'goog.i18n.CompactNumberFormatSymbols_mgo', 'goog.i18n.CompactNumberFormatSymbols_mgo_CM', 'goog.i18n.CompactNumberFormatSymbols_ms_Latn_BN', 'goog.i18n.CompactNumberFormatSymbols_ms_Latn_SG', 'goog.i18n.CompactNumberFormatSymbols_mua', 'goog.i18n.CompactNumberFormatSymbols_mua_CM', 'goog.i18n.CompactNumberFormatSymbols_naq', 'goog.i18n.CompactNumberFormatSymbols_naq_NA', 'goog.i18n.CompactNumberFormatSymbols_nd', 'goog.i18n.CompactNumberFormatSymbols_nd_ZW', 'goog.i18n.CompactNumberFormatSymbols_ne_IN', 'goog.i18n.CompactNumberFormatSymbols_nl_AW', 'goog.i18n.CompactNumberFormatSymbols_nl_BE', 'goog.i18n.CompactNumberFormatSymbols_nl_BQ', 'goog.i18n.CompactNumberFormatSymbols_nl_CW', 'goog.i18n.CompactNumberFormatSymbols_nl_SR', 'goog.i18n.CompactNumberFormatSymbols_nl_SX', 'goog.i18n.CompactNumberFormatSymbols_nmg', 'goog.i18n.CompactNumberFormatSymbols_nmg_CM', 'goog.i18n.CompactNumberFormatSymbols_nn', 'goog.i18n.CompactNumberFormatSymbols_nn_NO', 'goog.i18n.CompactNumberFormatSymbols_nnh', 'goog.i18n.CompactNumberFormatSymbols_nnh_CM', 'goog.i18n.CompactNumberFormatSymbols_nus', 'goog.i18n.CompactNumberFormatSymbols_nus_SD', 'goog.i18n.CompactNumberFormatSymbols_nyn', 'goog.i18n.CompactNumberFormatSymbols_nyn_UG', 'goog.i18n.CompactNumberFormatSymbols_om', 'goog.i18n.CompactNumberFormatSymbols_om_ET', 'goog.i18n.CompactNumberFormatSymbols_om_KE', 'goog.i18n.CompactNumberFormatSymbols_os', 'goog.i18n.CompactNumberFormatSymbols_os_GE', 'goog.i18n.CompactNumberFormatSymbols_os_RU', 'goog.i18n.CompactNumberFormatSymbols_pa_Arab', 'goog.i18n.CompactNumberFormatSymbols_pa_Arab_PK', 'goog.i18n.CompactNumberFormatSymbols_ps', 'goog.i18n.CompactNumberFormatSymbols_ps_AF', 'goog.i18n.CompactNumberFormatSymbols_pt_AO', 'goog.i18n.CompactNumberFormatSymbols_pt_CV', 'goog.i18n.CompactNumberFormatSymbols_pt_GW', 'goog.i18n.CompactNumberFormatSymbols_pt_MO', 'goog.i18n.CompactNumberFormatSymbols_pt_MZ', 'goog.i18n.CompactNumberFormatSymbols_pt_ST', 'goog.i18n.CompactNumberFormatSymbols_pt_TL', 'goog.i18n.CompactNumberFormatSymbols_qu', 'goog.i18n.CompactNumberFormatSymbols_qu_BO', 'goog.i18n.CompactNumberFormatSymbols_qu_EC', 'goog.i18n.CompactNumberFormatSymbols_qu_PE', 'goog.i18n.CompactNumberFormatSymbols_rm', 'goog.i18n.CompactNumberFormatSymbols_rm_CH', 'goog.i18n.CompactNumberFormatSymbols_rn', 'goog.i18n.CompactNumberFormatSymbols_rn_BI', 'goog.i18n.CompactNumberFormatSymbols_ro_MD', 'goog.i18n.CompactNumberFormatSymbols_rof', 'goog.i18n.CompactNumberFormatSymbols_rof_TZ', 'goog.i18n.CompactNumberFormatSymbols_ru_BY', 'goog.i18n.CompactNumberFormatSymbols_ru_KG', 'goog.i18n.CompactNumberFormatSymbols_ru_KZ', 'goog.i18n.CompactNumberFormatSymbols_ru_MD', 'goog.i18n.CompactNumberFormatSymbols_ru_UA', 'goog.i18n.CompactNumberFormatSymbols_rw', 'goog.i18n.CompactNumberFormatSymbols_rw_RW', 'goog.i18n.CompactNumberFormatSymbols_rwk', 'goog.i18n.CompactNumberFormatSymbols_rwk_TZ', 'goog.i18n.CompactNumberFormatSymbols_sah', 'goog.i18n.CompactNumberFormatSymbols_sah_RU', 'goog.i18n.CompactNumberFormatSymbols_saq', 'goog.i18n.CompactNumberFormatSymbols_saq_KE', 'goog.i18n.CompactNumberFormatSymbols_sbp', 'goog.i18n.CompactNumberFormatSymbols_sbp_TZ', 'goog.i18n.CompactNumberFormatSymbols_se', 'goog.i18n.CompactNumberFormatSymbols_se_FI', 'goog.i18n.CompactNumberFormatSymbols_se_NO', 'goog.i18n.CompactNumberFormatSymbols_se_SE', 'goog.i18n.CompactNumberFormatSymbols_seh', 'goog.i18n.CompactNumberFormatSymbols_seh_MZ', 'goog.i18n.CompactNumberFormatSymbols_ses', 'goog.i18n.CompactNumberFormatSymbols_ses_ML', 'goog.i18n.CompactNumberFormatSymbols_sg', 'goog.i18n.CompactNumberFormatSymbols_sg_CF', 'goog.i18n.CompactNumberFormatSymbols_shi', 'goog.i18n.CompactNumberFormatSymbols_shi_Latn', 'goog.i18n.CompactNumberFormatSymbols_shi_Latn_MA', 'goog.i18n.CompactNumberFormatSymbols_shi_Tfng', 'goog.i18n.CompactNumberFormatSymbols_shi_Tfng_MA', 'goog.i18n.CompactNumberFormatSymbols_smn', 'goog.i18n.CompactNumberFormatSymbols_smn_FI', 'goog.i18n.CompactNumberFormatSymbols_sn', 'goog.i18n.CompactNumberFormatSymbols_sn_ZW', 'goog.i18n.CompactNumberFormatSymbols_so', 'goog.i18n.CompactNumberFormatSymbols_so_DJ', 'goog.i18n.CompactNumberFormatSymbols_so_ET', 'goog.i18n.CompactNumberFormatSymbols_so_KE', 'goog.i18n.CompactNumberFormatSymbols_so_SO', 'goog.i18n.CompactNumberFormatSymbols_sq_MK', 'goog.i18n.CompactNumberFormatSymbols_sq_XK', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_BA', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_ME', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_XK', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn_BA', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn_ME', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn_XK', 'goog.i18n.CompactNumberFormatSymbols_sv_AX', 'goog.i18n.CompactNumberFormatSymbols_sv_FI', 'goog.i18n.CompactNumberFormatSymbols_sw_CD', 'goog.i18n.CompactNumberFormatSymbols_sw_KE', 'goog.i18n.CompactNumberFormatSymbols_sw_UG', 'goog.i18n.CompactNumberFormatSymbols_ta_LK', 'goog.i18n.CompactNumberFormatSymbols_ta_MY', 'goog.i18n.CompactNumberFormatSymbols_ta_SG', 'goog.i18n.CompactNumberFormatSymbols_teo', 'goog.i18n.CompactNumberFormatSymbols_teo_KE', 'goog.i18n.CompactNumberFormatSymbols_teo_UG', 'goog.i18n.CompactNumberFormatSymbols_ti', 'goog.i18n.CompactNumberFormatSymbols_ti_ER', 'goog.i18n.CompactNumberFormatSymbols_ti_ET', 'goog.i18n.CompactNumberFormatSymbols_to', 'goog.i18n.CompactNumberFormatSymbols_to_TO', 'goog.i18n.CompactNumberFormatSymbols_tr_CY', 'goog.i18n.CompactNumberFormatSymbols_twq', 'goog.i18n.CompactNumberFormatSymbols_twq_NE', 'goog.i18n.CompactNumberFormatSymbols_tzm', 'goog.i18n.CompactNumberFormatSymbols_tzm_Latn', 'goog.i18n.CompactNumberFormatSymbols_tzm_Latn_MA', 'goog.i18n.CompactNumberFormatSymbols_ug', 'goog.i18n.CompactNumberFormatSymbols_ug_Arab', 'goog.i18n.CompactNumberFormatSymbols_ug_Arab_CN', 'goog.i18n.CompactNumberFormatSymbols_ur_IN', 'goog.i18n.CompactNumberFormatSymbols_uz_Arab', 'goog.i18n.CompactNumberFormatSymbols_uz_Arab_AF', 'goog.i18n.CompactNumberFormatSymbols_uz_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_uz_Cyrl_UZ', 'goog.i18n.CompactNumberFormatSymbols_vai', 'goog.i18n.CompactNumberFormatSymbols_vai_Latn', 'goog.i18n.CompactNumberFormatSymbols_vai_Latn_LR', 'goog.i18n.CompactNumberFormatSymbols_vai_Vaii', 'goog.i18n.CompactNumberFormatSymbols_vai_Vaii_LR', 'goog.i18n.CompactNumberFormatSymbols_vun', 'goog.i18n.CompactNumberFormatSymbols_vun_TZ', 'goog.i18n.CompactNumberFormatSymbols_wae', 'goog.i18n.CompactNumberFormatSymbols_wae_CH', 'goog.i18n.CompactNumberFormatSymbols_xog', 'goog.i18n.CompactNumberFormatSymbols_xog_UG', 'goog.i18n.CompactNumberFormatSymbols_yav', 'goog.i18n.CompactNumberFormatSymbols_yav_CM', 'goog.i18n.CompactNumberFormatSymbols_yi', 'goog.i18n.CompactNumberFormatSymbols_yi_001', 'goog.i18n.CompactNumberFormatSymbols_yo', 'goog.i18n.CompactNumberFormatSymbols_yo_BJ', 'goog.i18n.CompactNumberFormatSymbols_yo_NG', 'goog.i18n.CompactNumberFormatSymbols_zgh', 'goog.i18n.CompactNumberFormatSymbols_zgh_MA', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans_HK', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans_MO', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans_SG', 'goog.i18n.CompactNumberFormatSymbols_zh_Hant', 'goog.i18n.CompactNumberFormatSymbols_zh_Hant_HK', 'goog.i18n.CompactNumberFormatSymbols_zh_Hant_MO', 'goog.i18n.CompactNumberFormatSymbols_zh_Hant_TW'], [], false);\ngoog.addDependency('i18n/currency.js', ['goog.i18n.currency', 'goog.i18n.currency.CurrencyInfo', 'goog.i18n.currency.CurrencyInfoTier2'], [], false);\ngoog.addDependency('i18n/currency_test.js', ['goog.i18n.currencyTest'], ['goog.i18n.NumberFormat', 'goog.i18n.currency', 'goog.i18n.currency.CurrencyInfo', 'goog.object', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/currencycodemap.js', ['goog.i18n.currencyCodeMap', 'goog.i18n.currencyCodeMapTier2'], [], false);\ngoog.addDependency('i18n/datetimeformat.js', ['goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeFormat.Format'], ['goog.asserts', 'goog.date', 'goog.i18n.DateTimeSymbols', 'goog.i18n.TimeZone', 'goog.string'], false);\ngoog.addDependency('i18n/datetimeformat_test.js', ['goog.i18n.DateTimeFormatTest'], ['goog.date.Date', 'goog.date.DateTime', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimePatterns', 'goog.i18n.DateTimePatterns_ar', 'goog.i18n.DateTimePatterns_de', 'goog.i18n.DateTimePatterns_en', 'goog.i18n.DateTimePatterns_fa', 'goog.i18n.DateTimePatterns_fr', 'goog.i18n.DateTimePatterns_ja', 'goog.i18n.DateTimePatterns_sv', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_ar', 'goog.i18n.DateTimeSymbols_ar_AE', 'goog.i18n.DateTimeSymbols_ar_SA', 'goog.i18n.DateTimeSymbols_bn_BD', 'goog.i18n.DateTimeSymbols_de', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_en_GB', 'goog.i18n.DateTimeSymbols_en_IE', 'goog.i18n.DateTimeSymbols_en_IN', 'goog.i18n.DateTimeSymbols_en_US', 'goog.i18n.DateTimeSymbols_fa', 'goog.i18n.DateTimeSymbols_fr', 'goog.i18n.DateTimeSymbols_fr_DJ', 'goog.i18n.DateTimeSymbols_he_IL', 'goog.i18n.DateTimeSymbols_ja', 'goog.i18n.DateTimeSymbols_ro_RO', 'goog.i18n.DateTimeSymbols_sv', 'goog.i18n.TimeZone', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/datetimeparse.js', ['goog.i18n.DateTimeParse'], ['goog.date', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeSymbols'], false);\ngoog.addDependency('i18n/datetimeparse_test.js', ['goog.i18n.DateTimeParseTest'], ['goog.date.Date', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeParse', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_fa', 'goog.i18n.DateTimeSymbols_fr', 'goog.i18n.DateTimeSymbols_pl', 'goog.i18n.DateTimeSymbols_zh', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('i18n/datetimepatterns.js', ['goog.i18n.DateTimePatterns', 'goog.i18n.DateTimePatterns_af', 'goog.i18n.DateTimePatterns_am', 'goog.i18n.DateTimePatterns_ar', 'goog.i18n.DateTimePatterns_az', 'goog.i18n.DateTimePatterns_be', 'goog.i18n.DateTimePatterns_bg', 'goog.i18n.DateTimePatterns_bn', 'goog.i18n.DateTimePatterns_br', 'goog.i18n.DateTimePatterns_bs', 'goog.i18n.DateTimePatterns_ca', 'goog.i18n.DateTimePatterns_chr', 'goog.i18n.DateTimePatterns_cs', 'goog.i18n.DateTimePatterns_cy', 'goog.i18n.DateTimePatterns_da', 'goog.i18n.DateTimePatterns_de', 'goog.i18n.DateTimePatterns_de_AT', 'goog.i18n.DateTimePatterns_de_CH', 'goog.i18n.DateTimePatterns_el', 'goog.i18n.DateTimePatterns_en', 'goog.i18n.DateTimePatterns_en_AU', 'goog.i18n.DateTimePatterns_en_CA', 'goog.i18n.DateTimePatterns_en_GB', 'goog.i18n.DateTimePatterns_en_IE', 'goog.i18n.DateTimePatterns_en_IN', 'goog.i18n.DateTimePatterns_en_SG', 'goog.i18n.DateTimePatterns_en_US', 'goog.i18n.DateTimePatterns_en_ZA', 'goog.i18n.DateTimePatterns_es', 'goog.i18n.DateTimePatterns_es_419', 'goog.i18n.DateTimePatterns_es_ES', 'goog.i18n.DateTimePatterns_es_MX', 'goog.i18n.DateTimePatterns_es_US', 'goog.i18n.DateTimePatterns_et', 'goog.i18n.DateTimePatterns_eu', 'goog.i18n.DateTimePatterns_fa', 'goog.i18n.DateTimePatterns_fi', 'goog.i18n.DateTimePatterns_fil', 'goog.i18n.DateTimePatterns_fr', 'goog.i18n.DateTimePatterns_fr_CA', 'goog.i18n.DateTimePatterns_ga', 'goog.i18n.DateTimePatterns_gl', 'goog.i18n.DateTimePatterns_gsw', 'goog.i18n.DateTimePatterns_gu', 'goog.i18n.DateTimePatterns_haw', 'goog.i18n.DateTimePatterns_he', 'goog.i18n.DateTimePatterns_hi', 'goog.i18n.DateTimePatterns_hr', 'goog.i18n.DateTimePatterns_hu', 'goog.i18n.DateTimePatterns_hy', 'goog.i18n.DateTimePatterns_id', 'goog.i18n.DateTimePatterns_in', 'goog.i18n.DateTimePatterns_is', 'goog.i18n.DateTimePatterns_it', 'goog.i18n.DateTimePatterns_iw', 'goog.i18n.DateTimePatterns_ja', 'goog.i18n.DateTimePatterns_ka', 'goog.i18n.DateTimePatterns_kk', 'goog.i18n.DateTimePatterns_km', 'goog.i18n.DateTimePatterns_kn', 'goog.i18n.DateTimePatterns_ko', 'goog.i18n.DateTimePatterns_ky', 'goog.i18n.DateTimePatterns_ln', 'goog.i18n.DateTimePatterns_lo', 'goog.i18n.DateTimePatterns_lt', 'goog.i18n.DateTimePatterns_lv', 'goog.i18n.DateTimePatterns_mk', 'goog.i18n.DateTimePatterns_ml', 'goog.i18n.DateTimePatterns_mn', 'goog.i18n.DateTimePatterns_mo', 'goog.i18n.DateTimePatterns_mr', 'goog.i18n.DateTimePatterns_ms', 'goog.i18n.DateTimePatterns_mt', 'goog.i18n.DateTimePatterns_my', 'goog.i18n.DateTimePatterns_nb', 'goog.i18n.DateTimePatterns_ne', 'goog.i18n.DateTimePatterns_nl', 'goog.i18n.DateTimePatterns_no', 'goog.i18n.DateTimePatterns_no_NO', 'goog.i18n.DateTimePatterns_or', 'goog.i18n.DateTimePatterns_pa', 'goog.i18n.DateTimePatterns_pl', 'goog.i18n.DateTimePatterns_pt', 'goog.i18n.DateTimePatterns_pt_BR', 'goog.i18n.DateTimePatterns_pt_PT', 'goog.i18n.DateTimePatterns_ro', 'goog.i18n.DateTimePatterns_ru', 'goog.i18n.DateTimePatterns_sh', 'goog.i18n.DateTimePatterns_si', 'goog.i18n.DateTimePatterns_sk', 'goog.i18n.DateTimePatterns_sl', 'goog.i18n.DateTimePatterns_sq', 'goog.i18n.DateTimePatterns_sr', 'goog.i18n.DateTimePatterns_sr_Latn', 'goog.i18n.DateTimePatterns_sv', 'goog.i18n.DateTimePatterns_sw', 'goog.i18n.DateTimePatterns_ta', 'goog.i18n.DateTimePatterns_te', 'goog.i18n.DateTimePatterns_th', 'goog.i18n.DateTimePatterns_tl', 'goog.i18n.DateTimePatterns_tr', 'goog.i18n.DateTimePatterns_uk', 'goog.i18n.DateTimePatterns_ur', 'goog.i18n.DateTimePatterns_uz', 'goog.i18n.DateTimePatterns_vi', 'goog.i18n.DateTimePatterns_zh', 'goog.i18n.DateTimePatterns_zh_CN', 'goog.i18n.DateTimePatterns_zh_HK', 'goog.i18n.DateTimePatterns_zh_TW', 'goog.i18n.DateTimePatterns_zu'], [], false);\ngoog.addDependency('i18n/datetimepatternsext.js', ['goog.i18n.DateTimePatternsExt', 'goog.i18n.DateTimePatterns_af_NA', 'goog.i18n.DateTimePatterns_af_ZA', 'goog.i18n.DateTimePatterns_agq', 'goog.i18n.DateTimePatterns_agq_CM', 'goog.i18n.DateTimePatterns_ak', 'goog.i18n.DateTimePatterns_ak_GH', 'goog.i18n.DateTimePatterns_am_ET', 'goog.i18n.DateTimePatterns_ar_001', 'goog.i18n.DateTimePatterns_ar_AE', 'goog.i18n.DateTimePatterns_ar_BH', 'goog.i18n.DateTimePatterns_ar_DJ', 'goog.i18n.DateTimePatterns_ar_DZ', 'goog.i18n.DateTimePatterns_ar_EG', 'goog.i18n.DateTimePatterns_ar_EH', 'goog.i18n.DateTimePatterns_ar_ER', 'goog.i18n.DateTimePatterns_ar_IL', 'goog.i18n.DateTimePatterns_ar_IQ', 'goog.i18n.DateTimePatterns_ar_JO', 'goog.i18n.DateTimePatterns_ar_KM', 'goog.i18n.DateTimePatterns_ar_KW', 'goog.i18n.DateTimePatterns_ar_LB', 'goog.i18n.DateTimePatterns_ar_LY', 'goog.i18n.DateTimePatterns_ar_MA', 'goog.i18n.DateTimePatterns_ar_MR', 'goog.i18n.DateTimePatterns_ar_OM', 'goog.i18n.DateTimePatterns_ar_PS', 'goog.i18n.DateTimePatterns_ar_QA', 'goog.i18n.DateTimePatterns_ar_SA', 'goog.i18n.DateTimePatterns_ar_SD', 'goog.i18n.DateTimePatterns_ar_SO', 'goog.i18n.DateTimePatterns_ar_SS', 'goog.i18n.DateTimePatterns_ar_SY', 'goog.i18n.DateTimePatterns_ar_TD', 'goog.i18n.DateTimePatterns_ar_TN', 'goog.i18n.DateTimePatterns_ar_YE', 'goog.i18n.DateTimePatterns_as', 'goog.i18n.DateTimePatterns_as_IN', 'goog.i18n.DateTimePatterns_asa', 'goog.i18n.DateTimePatterns_asa_TZ', 'goog.i18n.DateTimePatterns_az_Cyrl', 'goog.i18n.DateTimePatterns_az_Cyrl_AZ', 'goog.i18n.DateTimePatterns_az_Latn', 'goog.i18n.DateTimePatterns_az_Latn_AZ', 'goog.i18n.DateTimePatterns_bas', 'goog.i18n.DateTimePatterns_bas_CM', 'goog.i18n.DateTimePatterns_be_BY', 'goog.i18n.DateTimePatterns_bem', 'goog.i18n.DateTimePatterns_bem_ZM', 'goog.i18n.DateTimePatterns_bez', 'goog.i18n.DateTimePatterns_bez_TZ', 'goog.i18n.DateTimePatterns_bg_BG', 'goog.i18n.DateTimePatterns_bm', 'goog.i18n.DateTimePatterns_bm_Latn', 'goog.i18n.DateTimePatterns_bm_Latn_ML', 'goog.i18n.DateTimePatterns_bn_BD', 'goog.i18n.DateTimePatterns_bn_IN', 'goog.i18n.DateTimePatterns_bo', 'goog.i18n.DateTimePatterns_bo_CN', 'goog.i18n.DateTimePatterns_bo_IN', 'goog.i18n.DateTimePatterns_br_FR', 'goog.i18n.DateTimePatterns_brx', 'goog.i18n.DateTimePatterns_brx_IN', 'goog.i18n.DateTimePatterns_bs_Cyrl', 'goog.i18n.DateTimePatterns_bs_Cyrl_BA', 'goog.i18n.DateTimePatterns_bs_Latn', 'goog.i18n.DateTimePatterns_bs_Latn_BA', 'goog.i18n.DateTimePatterns_ca_AD', 'goog.i18n.DateTimePatterns_ca_ES', 'goog.i18n.DateTimePatterns_ca_FR', 'goog.i18n.DateTimePatterns_ca_IT', 'goog.i18n.DateTimePatterns_cgg', 'goog.i18n.DateTimePatterns_cgg_UG', 'goog.i18n.DateTimePatterns_chr_US', 'goog.i18n.DateTimePatterns_cs_CZ', 'goog.i18n.DateTimePatterns_cy_GB', 'goog.i18n.DateTimePatterns_da_DK', 'goog.i18n.DateTimePatterns_da_GL', 'goog.i18n.DateTimePatterns_dav', 'goog.i18n.DateTimePatterns_dav_KE', 'goog.i18n.DateTimePatterns_de_BE', 'goog.i18n.DateTimePatterns_de_DE', 'goog.i18n.DateTimePatterns_de_LI', 'goog.i18n.DateTimePatterns_de_LU', 'goog.i18n.DateTimePatterns_dje', 'goog.i18n.DateTimePatterns_dje_NE', 'goog.i18n.DateTimePatterns_dsb', 'goog.i18n.DateTimePatterns_dsb_DE', 'goog.i18n.DateTimePatterns_dua', 'goog.i18n.DateTimePatterns_dua_CM', 'goog.i18n.DateTimePatterns_dyo', 'goog.i18n.DateTimePatterns_dyo_SN', 'goog.i18n.DateTimePatterns_dz', 'goog.i18n.DateTimePatterns_dz_BT', 'goog.i18n.DateTimePatterns_ebu', 'goog.i18n.DateTimePatterns_ebu_KE', 'goog.i18n.DateTimePatterns_ee', 'goog.i18n.DateTimePatterns_ee_GH', 'goog.i18n.DateTimePatterns_ee_TG', 'goog.i18n.DateTimePatterns_el_CY', 'goog.i18n.DateTimePatterns_el_GR', 'goog.i18n.DateTimePatterns_en_001', 'goog.i18n.DateTimePatterns_en_150', 'goog.i18n.DateTimePatterns_en_AG', 'goog.i18n.DateTimePatterns_en_AI', 'goog.i18n.DateTimePatterns_en_AS', 'goog.i18n.DateTimePatterns_en_BB', 'goog.i18n.DateTimePatterns_en_BE', 'goog.i18n.DateTimePatterns_en_BM', 'goog.i18n.DateTimePatterns_en_BS', 'goog.i18n.DateTimePatterns_en_BW', 'goog.i18n.DateTimePatterns_en_BZ', 'goog.i18n.DateTimePatterns_en_CC', 'goog.i18n.DateTimePatterns_en_CK', 'goog.i18n.DateTimePatterns_en_CM', 'goog.i18n.DateTimePatterns_en_CX', 'goog.i18n.DateTimePatterns_en_DG', 'goog.i18n.DateTimePatterns_en_DM', 'goog.i18n.DateTimePatterns_en_ER', 'goog.i18n.DateTimePatterns_en_FJ', 'goog.i18n.DateTimePatterns_en_FK', 'goog.i18n.DateTimePatterns_en_FM', 'goog.i18n.DateTimePatterns_en_GD', 'goog.i18n.DateTimePatterns_en_GG', 'goog.i18n.DateTimePatterns_en_GH', 'goog.i18n.DateTimePatterns_en_GI', 'goog.i18n.DateTimePatterns_en_GM', 'goog.i18n.DateTimePatterns_en_GU', 'goog.i18n.DateTimePatterns_en_GY', 'goog.i18n.DateTimePatterns_en_HK', 'goog.i18n.DateTimePatterns_en_IM', 'goog.i18n.DateTimePatterns_en_IO', 'goog.i18n.DateTimePatterns_en_JE', 'goog.i18n.DateTimePatterns_en_JM', 'goog.i18n.DateTimePatterns_en_KE', 'goog.i18n.DateTimePatterns_en_KI', 'goog.i18n.DateTimePatterns_en_KN', 'goog.i18n.DateTimePatterns_en_KY', 'goog.i18n.DateTimePatterns_en_LC', 'goog.i18n.DateTimePatterns_en_LR', 'goog.i18n.DateTimePatterns_en_LS', 'goog.i18n.DateTimePatterns_en_MG', 'goog.i18n.DateTimePatterns_en_MH', 'goog.i18n.DateTimePatterns_en_MO', 'goog.i18n.DateTimePatterns_en_MP', 'goog.i18n.DateTimePatterns_en_MS', 'goog.i18n.DateTimePatterns_en_MT', 'goog.i18n.DateTimePatterns_en_MU', 'goog.i18n.DateTimePatterns_en_MW', 'goog.i18n.DateTimePatterns_en_MY', 'goog.i18n.DateTimePatterns_en_NA', 'goog.i18n.DateTimePatterns_en_NF', 'goog.i18n.DateTimePatterns_en_NG', 'goog.i18n.DateTimePatterns_en_NR', 'goog.i18n.DateTimePatterns_en_NU', 'goog.i18n.DateTimePatterns_en_NZ', 'goog.i18n.DateTimePatterns_en_PG', 'goog.i18n.DateTimePatterns_en_PH', 'goog.i18n.DateTimePatterns_en_PK', 'goog.i18n.DateTimePatterns_en_PN', 'goog.i18n.DateTimePatterns_en_PR', 'goog.i18n.DateTimePatterns_en_PW', 'goog.i18n.DateTimePatterns_en_RW', 'goog.i18n.DateTimePatterns_en_SB', 'goog.i18n.DateTimePatterns_en_SC', 'goog.i18n.DateTimePatterns_en_SD', 'goog.i18n.DateTimePatterns_en_SH', 'goog.i18n.DateTimePatterns_en_SL', 'goog.i18n.DateTimePatterns_en_SS', 'goog.i18n.DateTimePatterns_en_SX', 'goog.i18n.DateTimePatterns_en_SZ', 'goog.i18n.DateTimePatterns_en_TC', 'goog.i18n.DateTimePatterns_en_TK', 'goog.i18n.DateTimePatterns_en_TO', 'goog.i18n.DateTimePatterns_en_TT', 'goog.i18n.DateTimePatterns_en_TV', 'goog.i18n.DateTimePatterns_en_TZ', 'goog.i18n.DateTimePatterns_en_UG', 'goog.i18n.DateTimePatterns_en_UM', 'goog.i18n.DateTimePatterns_en_US_POSIX', 'goog.i18n.DateTimePatterns_en_VC', 'goog.i18n.DateTimePatterns_en_VG', 'goog.i18n.DateTimePatterns_en_VI', 'goog.i18n.DateTimePatterns_en_VU', 'goog.i18n.DateTimePatterns_en_WS', 'goog.i18n.DateTimePatterns_en_ZM', 'goog.i18n.DateTimePatterns_en_ZW', 'goog.i18n.DateTimePatterns_eo', 'goog.i18n.DateTimePatterns_es_AR', 'goog.i18n.DateTimePatterns_es_BO', 'goog.i18n.DateTimePatterns_es_CL', 'goog.i18n.DateTimePatterns_es_CO', 'goog.i18n.DateTimePatterns_es_CR', 'goog.i18n.DateTimePatterns_es_CU', 'goog.i18n.DateTimePatterns_es_DO', 'goog.i18n.DateTimePatterns_es_EA', 'goog.i18n.DateTimePatterns_es_EC', 'goog.i18n.DateTimePatterns_es_GQ', 'goog.i18n.DateTimePatterns_es_GT', 'goog.i18n.DateTimePatterns_es_HN', 'goog.i18n.DateTimePatterns_es_IC', 'goog.i18n.DateTimePatterns_es_NI', 'goog.i18n.DateTimePatterns_es_PA', 'goog.i18n.DateTimePatterns_es_PE', 'goog.i18n.DateTimePatterns_es_PH', 'goog.i18n.DateTimePatterns_es_PR', 'goog.i18n.DateTimePatterns_es_PY', 'goog.i18n.DateTimePatterns_es_SV', 'goog.i18n.DateTimePatterns_es_UY', 'goog.i18n.DateTimePatterns_es_VE', 'goog.i18n.DateTimePatterns_et_EE', 'goog.i18n.DateTimePatterns_eu_ES', 'goog.i18n.DateTimePatterns_ewo', 'goog.i18n.DateTimePatterns_ewo_CM', 'goog.i18n.DateTimePatterns_fa_AF', 'goog.i18n.DateTimePatterns_fa_IR', 'goog.i18n.DateTimePatterns_ff', 'goog.i18n.DateTimePatterns_ff_CM', 'goog.i18n.DateTimePatterns_ff_GN', 'goog.i18n.DateTimePatterns_ff_MR', 'goog.i18n.DateTimePatterns_ff_SN', 'goog.i18n.DateTimePatterns_fi_FI', 'goog.i18n.DateTimePatterns_fil_PH', 'goog.i18n.DateTimePatterns_fo', 'goog.i18n.DateTimePatterns_fo_FO', 'goog.i18n.DateTimePatterns_fr_BE', 'goog.i18n.DateTimePatterns_fr_BF', 'goog.i18n.DateTimePatterns_fr_BI', 'goog.i18n.DateTimePatterns_fr_BJ', 'goog.i18n.DateTimePatterns_fr_BL', 'goog.i18n.DateTimePatterns_fr_CD', 'goog.i18n.DateTimePatterns_fr_CF', 'goog.i18n.DateTimePatterns_fr_CG', 'goog.i18n.DateTimePatterns_fr_CH', 'goog.i18n.DateTimePatterns_fr_CI', 'goog.i18n.DateTimePatterns_fr_CM', 'goog.i18n.DateTimePatterns_fr_DJ', 'goog.i18n.DateTimePatterns_fr_DZ', 'goog.i18n.DateTimePatterns_fr_FR', 'goog.i18n.DateTimePatterns_fr_GA', 'goog.i18n.DateTimePatterns_fr_GF', 'goog.i18n.DateTimePatterns_fr_GN', 'goog.i18n.DateTimePatterns_fr_GP', 'goog.i18n.DateTimePatterns_fr_GQ', 'goog.i18n.DateTimePatterns_fr_HT', 'goog.i18n.DateTimePatterns_fr_KM', 'goog.i18n.DateTimePatterns_fr_LU', 'goog.i18n.DateTimePatterns_fr_MA', 'goog.i18n.DateTimePatterns_fr_MC', 'goog.i18n.DateTimePatterns_fr_MF', 'goog.i18n.DateTimePatterns_fr_MG', 'goog.i18n.DateTimePatterns_fr_ML', 'goog.i18n.DateTimePatterns_fr_MQ', 'goog.i18n.DateTimePatterns_fr_MR', 'goog.i18n.DateTimePatterns_fr_MU', 'goog.i18n.DateTimePatterns_fr_NC', 'goog.i18n.DateTimePatterns_fr_NE', 'goog.i18n.DateTimePatterns_fr_PF', 'goog.i18n.DateTimePatterns_fr_PM', 'goog.i18n.DateTimePatterns_fr_RE', 'goog.i18n.DateTimePatterns_fr_RW', 'goog.i18n.DateTimePatterns_fr_SC', 'goog.i18n.DateTimePatterns_fr_SN', 'goog.i18n.DateTimePatterns_fr_SY', 'goog.i18n.DateTimePatterns_fr_TD', 'goog.i18n.DateTimePatterns_fr_TG', 'goog.i18n.DateTimePatterns_fr_TN', 'goog.i18n.DateTimePatterns_fr_VU', 'goog.i18n.DateTimePatterns_fr_WF', 'goog.i18n.DateTimePatterns_fr_YT', 'goog.i18n.DateTimePatterns_fur', 'goog.i18n.DateTimePatterns_fur_IT', 'goog.i18n.DateTimePatterns_fy', 'goog.i18n.DateTimePatterns_fy_NL', 'goog.i18n.DateTimePatterns_ga_IE', 'goog.i18n.DateTimePatterns_gd', 'goog.i18n.DateTimePatterns_gd_GB', 'goog.i18n.DateTimePatterns_gl_ES', 'goog.i18n.DateTimePatterns_gsw_CH', 'goog.i18n.DateTimePatterns_gsw_FR', 'goog.i18n.DateTimePatterns_gsw_LI', 'goog.i18n.DateTimePatterns_gu_IN', 'goog.i18n.DateTimePatterns_guz', 'goog.i18n.DateTimePatterns_guz_KE', 'goog.i18n.DateTimePatterns_gv', 'goog.i18n.DateTimePatterns_gv_IM', 'goog.i18n.DateTimePatterns_ha', 'goog.i18n.DateTimePatterns_ha_Latn', 'goog.i18n.DateTimePatterns_ha_Latn_GH', 'goog.i18n.DateTimePatterns_ha_Latn_NE', 'goog.i18n.DateTimePatterns_ha_Latn_NG', 'goog.i18n.DateTimePatterns_haw_US', 'goog.i18n.DateTimePatterns_he_IL', 'goog.i18n.DateTimePatterns_hi_IN', 'goog.i18n.DateTimePatterns_hr_BA', 'goog.i18n.DateTimePatterns_hr_HR', 'goog.i18n.DateTimePatterns_hsb', 'goog.i18n.DateTimePatterns_hsb_DE', 'goog.i18n.DateTimePatterns_hu_HU', 'goog.i18n.DateTimePatterns_hy_AM', 'goog.i18n.DateTimePatterns_id_ID', 'goog.i18n.DateTimePatterns_ig', 'goog.i18n.DateTimePatterns_ig_NG', 'goog.i18n.DateTimePatterns_ii', 'goog.i18n.DateTimePatterns_ii_CN', 'goog.i18n.DateTimePatterns_is_IS', 'goog.i18n.DateTimePatterns_it_CH', 'goog.i18n.DateTimePatterns_it_IT', 'goog.i18n.DateTimePatterns_it_SM', 'goog.i18n.DateTimePatterns_ja_JP', 'goog.i18n.DateTimePatterns_jgo', 'goog.i18n.DateTimePatterns_jgo_CM', 'goog.i18n.DateTimePatterns_jmc', 'goog.i18n.DateTimePatterns_jmc_TZ', 'goog.i18n.DateTimePatterns_ka_GE', 'goog.i18n.DateTimePatterns_kab', 'goog.i18n.DateTimePatterns_kab_DZ', 'goog.i18n.DateTimePatterns_kam', 'goog.i18n.DateTimePatterns_kam_KE', 'goog.i18n.DateTimePatterns_kde', 'goog.i18n.DateTimePatterns_kde_TZ', 'goog.i18n.DateTimePatterns_kea', 'goog.i18n.DateTimePatterns_kea_CV', 'goog.i18n.DateTimePatterns_khq', 'goog.i18n.DateTimePatterns_khq_ML', 'goog.i18n.DateTimePatterns_ki', 'goog.i18n.DateTimePatterns_ki_KE', 'goog.i18n.DateTimePatterns_kk_Cyrl', 'goog.i18n.DateTimePatterns_kk_Cyrl_KZ', 'goog.i18n.DateTimePatterns_kkj', 'goog.i18n.DateTimePatterns_kkj_CM', 'goog.i18n.DateTimePatterns_kl', 'goog.i18n.DateTimePatterns_kl_GL', 'goog.i18n.DateTimePatterns_kln', 'goog.i18n.DateTimePatterns_kln_KE', 'goog.i18n.DateTimePatterns_km_KH', 'goog.i18n.DateTimePatterns_kn_IN', 'goog.i18n.DateTimePatterns_ko_KP', 'goog.i18n.DateTimePatterns_ko_KR', 'goog.i18n.DateTimePatterns_kok', 'goog.i18n.DateTimePatterns_kok_IN', 'goog.i18n.DateTimePatterns_ks', 'goog.i18n.DateTimePatterns_ks_Arab', 'goog.i18n.DateTimePatterns_ks_Arab_IN', 'goog.i18n.DateTimePatterns_ksb', 'goog.i18n.DateTimePatterns_ksb_TZ', 'goog.i18n.DateTimePatterns_ksf', 'goog.i18n.DateTimePatterns_ksf_CM', 'goog.i18n.DateTimePatterns_ksh', 'goog.i18n.DateTimePatterns_ksh_DE', 'goog.i18n.DateTimePatterns_kw', 'goog.i18n.DateTimePatterns_kw_GB', 'goog.i18n.DateTimePatterns_ky_Cyrl', 'goog.i18n.DateTimePatterns_ky_Cyrl_KG', 'goog.i18n.DateTimePatterns_lag', 'goog.i18n.DateTimePatterns_lag_TZ', 'goog.i18n.DateTimePatterns_lb', 'goog.i18n.DateTimePatterns_lb_LU', 'goog.i18n.DateTimePatterns_lg', 'goog.i18n.DateTimePatterns_lg_UG', 'goog.i18n.DateTimePatterns_lkt', 'goog.i18n.DateTimePatterns_lkt_US', 'goog.i18n.DateTimePatterns_ln_AO', 'goog.i18n.DateTimePatterns_ln_CD', 'goog.i18n.DateTimePatterns_ln_CF', 'goog.i18n.DateTimePatterns_ln_CG', 'goog.i18n.DateTimePatterns_lo_LA', 'goog.i18n.DateTimePatterns_lt_LT', 'goog.i18n.DateTimePatterns_lu', 'goog.i18n.DateTimePatterns_lu_CD', 'goog.i18n.DateTimePatterns_luo', 'goog.i18n.DateTimePatterns_luo_KE', 'goog.i18n.DateTimePatterns_luy', 'goog.i18n.DateTimePatterns_luy_KE', 'goog.i18n.DateTimePatterns_lv_LV', 'goog.i18n.DateTimePatterns_mas', 'goog.i18n.DateTimePatterns_mas_KE', 'goog.i18n.DateTimePatterns_mas_TZ', 'goog.i18n.DateTimePatterns_mer', 'goog.i18n.DateTimePatterns_mer_KE', 'goog.i18n.DateTimePatterns_mfe', 'goog.i18n.DateTimePatterns_mfe_MU', 'goog.i18n.DateTimePatterns_mg', 'goog.i18n.DateTimePatterns_mg_MG', 'goog.i18n.DateTimePatterns_mgh', 'goog.i18n.DateTimePatterns_mgh_MZ', 'goog.i18n.DateTimePatterns_mgo', 'goog.i18n.DateTimePatterns_mgo_CM', 'goog.i18n.DateTimePatterns_mk_MK', 'goog.i18n.DateTimePatterns_ml_IN', 'goog.i18n.DateTimePatterns_mn_Cyrl', 'goog.i18n.DateTimePatterns_mn_Cyrl_MN', 'goog.i18n.DateTimePatterns_mr_IN', 'goog.i18n.DateTimePatterns_ms_Latn', 'goog.i18n.DateTimePatterns_ms_Latn_BN', 'goog.i18n.DateTimePatterns_ms_Latn_MY', 'goog.i18n.DateTimePatterns_ms_Latn_SG', 'goog.i18n.DateTimePatterns_mt_MT', 'goog.i18n.DateTimePatterns_mua', 'goog.i18n.DateTimePatterns_mua_CM', 'goog.i18n.DateTimePatterns_my_MM', 'goog.i18n.DateTimePatterns_naq', 'goog.i18n.DateTimePatterns_naq_NA', 'goog.i18n.DateTimePatterns_nb_NO', 'goog.i18n.DateTimePatterns_nb_SJ', 'goog.i18n.DateTimePatterns_nd', 'goog.i18n.DateTimePatterns_nd_ZW', 'goog.i18n.DateTimePatterns_ne_IN', 'goog.i18n.DateTimePatterns_ne_NP', 'goog.i18n.DateTimePatterns_nl_AW', 'goog.i18n.DateTimePatterns_nl_BE', 'goog.i18n.DateTimePatterns_nl_BQ', 'goog.i18n.DateTimePatterns_nl_CW', 'goog.i18n.DateTimePatterns_nl_NL', 'goog.i18n.DateTimePatterns_nl_SR', 'goog.i18n.DateTimePatterns_nl_SX', 'goog.i18n.DateTimePatterns_nmg', 'goog.i18n.DateTimePatterns_nmg_CM', 'goog.i18n.DateTimePatterns_nn', 'goog.i18n.DateTimePatterns_nn_NO', 'goog.i18n.DateTimePatterns_nnh', 'goog.i18n.DateTimePatterns_nnh_CM', 'goog.i18n.DateTimePatterns_nus', 'goog.i18n.DateTimePatterns_nus_SD', 'goog.i18n.DateTimePatterns_nyn', 'goog.i18n.DateTimePatterns_nyn_UG', 'goog.i18n.DateTimePatterns_om', 'goog.i18n.DateTimePatterns_om_ET', 'goog.i18n.DateTimePatterns_om_KE', 'goog.i18n.DateTimePatterns_or_IN', 'goog.i18n.DateTimePatterns_os', 'goog.i18n.DateTimePatterns_os_GE', 'goog.i18n.DateTimePatterns_os_RU', 'goog.i18n.DateTimePatterns_pa_Arab', 'goog.i18n.DateTimePatterns_pa_Arab_PK', 'goog.i18n.DateTimePatterns_pa_Guru', 'goog.i18n.DateTimePatterns_pa_Guru_IN', 'goog.i18n.DateTimePatterns_pl_PL', 'goog.i18n.DateTimePatterns_ps', 'goog.i18n.DateTimePatterns_ps_AF', 'goog.i18n.DateTimePatterns_pt_AO', 'goog.i18n.DateTimePatterns_pt_CV', 'goog.i18n.DateTimePatterns_pt_GW', 'goog.i18n.DateTimePatterns_pt_MO', 'goog.i18n.DateTimePatterns_pt_MZ', 'goog.i18n.DateTimePatterns_pt_ST', 'goog.i18n.DateTimePatterns_pt_TL', 'goog.i18n.DateTimePatterns_qu', 'goog.i18n.DateTimePatterns_qu_BO', 'goog.i18n.DateTimePatterns_qu_EC', 'goog.i18n.DateTimePatterns_qu_PE', 'goog.i18n.DateTimePatterns_rm', 'goog.i18n.DateTimePatterns_rm_CH', 'goog.i18n.DateTimePatterns_rn', 'goog.i18n.DateTimePatterns_rn_BI', 'goog.i18n.DateTimePatterns_ro_MD', 'goog.i18n.DateTimePatterns_ro_RO', 'goog.i18n.DateTimePatterns_rof', 'goog.i18n.DateTimePatterns_rof_TZ', 'goog.i18n.DateTimePatterns_ru_BY', 'goog.i18n.DateTimePatterns_ru_KG', 'goog.i18n.DateTimePatterns_ru_KZ', 'goog.i18n.DateTimePatterns_ru_MD', 'goog.i18n.DateTimePatterns_ru_RU', 'goog.i18n.DateTimePatterns_ru_UA', 'goog.i18n.DateTimePatterns_rw', 'goog.i18n.DateTimePatterns_rw_RW', 'goog.i18n.DateTimePatterns_rwk', 'goog.i18n.DateTimePatterns_rwk_TZ', 'goog.i18n.DateTimePatterns_sah', 'goog.i18n.DateTimePatterns_sah_RU', 'goog.i18n.DateTimePatterns_saq', 'goog.i18n.DateTimePatterns_saq_KE', 'goog.i18n.DateTimePatterns_sbp', 'goog.i18n.DateTimePatterns_sbp_TZ', 'goog.i18n.DateTimePatterns_se', 'goog.i18n.DateTimePatterns_se_FI', 'goog.i18n.DateTimePatterns_se_NO', 'goog.i18n.DateTimePatterns_se_SE', 'goog.i18n.DateTimePatterns_seh', 'goog.i18n.DateTimePatterns_seh_MZ', 'goog.i18n.DateTimePatterns_ses', 'goog.i18n.DateTimePatterns_ses_ML', 'goog.i18n.DateTimePatterns_sg', 'goog.i18n.DateTimePatterns_sg_CF', 'goog.i18n.DateTimePatterns_shi', 'goog.i18n.DateTimePatterns_shi_Latn', 'goog.i18n.DateTimePatterns_shi_Latn_MA', 'goog.i18n.DateTimePatterns_shi_Tfng', 'goog.i18n.DateTimePatterns_shi_Tfng_MA', 'goog.i18n.DateTimePatterns_si_LK', 'goog.i18n.DateTimePatterns_sk_SK', 'goog.i18n.DateTimePatterns_sl_SI', 'goog.i18n.DateTimePatterns_smn', 'goog.i18n.DateTimePatterns_smn_FI', 'goog.i18n.DateTimePatterns_sn', 'goog.i18n.DateTimePatterns_sn_ZW', 'goog.i18n.DateTimePatterns_so', 'goog.i18n.DateTimePatterns_so_DJ', 'goog.i18n.DateTimePatterns_so_ET', 'goog.i18n.DateTimePatterns_so_KE', 'goog.i18n.DateTimePatterns_so_SO', 'goog.i18n.DateTimePatterns_sq_AL', 'goog.i18n.DateTimePatterns_sq_MK', 'goog.i18n.DateTimePatterns_sq_XK', 'goog.i18n.DateTimePatterns_sr_Cyrl', 'goog.i18n.DateTimePatterns_sr_Cyrl_BA', 'goog.i18n.DateTimePatterns_sr_Cyrl_ME', 'goog.i18n.DateTimePatterns_sr_Cyrl_RS', 'goog.i18n.DateTimePatterns_sr_Cyrl_XK', 'goog.i18n.DateTimePatterns_sr_Latn_BA', 'goog.i18n.DateTimePatterns_sr_Latn_ME', 'goog.i18n.DateTimePatterns_sr_Latn_RS', 'goog.i18n.DateTimePatterns_sr_Latn_XK', 'goog.i18n.DateTimePatterns_sv_AX', 'goog.i18n.DateTimePatterns_sv_FI', 'goog.i18n.DateTimePatterns_sv_SE', 'goog.i18n.DateTimePatterns_sw_CD', 'goog.i18n.DateTimePatterns_sw_KE', 'goog.i18n.DateTimePatterns_sw_TZ', 'goog.i18n.DateTimePatterns_sw_UG', 'goog.i18n.DateTimePatterns_ta_IN', 'goog.i18n.DateTimePatterns_ta_LK', 'goog.i18n.DateTimePatterns_ta_MY', 'goog.i18n.DateTimePatterns_ta_SG', 'goog.i18n.DateTimePatterns_te_IN', 'goog.i18n.DateTimePatterns_teo', 'goog.i18n.DateTimePatterns_teo_KE', 'goog.i18n.DateTimePatterns_teo_UG', 'goog.i18n.DateTimePatterns_th_TH', 'goog.i18n.DateTimePatterns_ti', 'goog.i18n.DateTimePatterns_ti_ER', 'goog.i18n.DateTimePatterns_ti_ET', 'goog.i18n.DateTimePatterns_to', 'goog.i18n.DateTimePatterns_to_TO', 'goog.i18n.DateTimePatterns_tr_CY', 'goog.i18n.DateTimePatterns_tr_TR', 'goog.i18n.DateTimePatterns_twq', 'goog.i18n.DateTimePatterns_twq_NE', 'goog.i18n.DateTimePatterns_tzm', 'goog.i18n.DateTimePatterns_tzm_Latn', 'goog.i18n.DateTimePatterns_tzm_Latn_MA', 'goog.i18n.DateTimePatterns_ug', 'goog.i18n.DateTimePatterns_ug_Arab', 'goog.i18n.DateTimePatterns_ug_Arab_CN', 'goog.i18n.DateTimePatterns_uk_UA', 'goog.i18n.DateTimePatterns_ur_IN', 'goog.i18n.DateTimePatterns_ur_PK', 'goog.i18n.DateTimePatterns_uz_Arab', 'goog.i18n.DateTimePatterns_uz_Arab_AF', 'goog.i18n.DateTimePatterns_uz_Cyrl', 'goog.i18n.DateTimePatterns_uz_Cyrl_UZ', 'goog.i18n.DateTimePatterns_uz_Latn', 'goog.i18n.DateTimePatterns_uz_Latn_UZ', 'goog.i18n.DateTimePatterns_vai', 'goog.i18n.DateTimePatterns_vai_Latn', 'goog.i18n.DateTimePatterns_vai_Latn_LR', 'goog.i18n.DateTimePatterns_vai_Vaii', 'goog.i18n.DateTimePatterns_vai_Vaii_LR', 'goog.i18n.DateTimePatterns_vi_VN', 'goog.i18n.DateTimePatterns_vun', 'goog.i18n.DateTimePatterns_vun_TZ', 'goog.i18n.DateTimePatterns_wae', 'goog.i18n.DateTimePatterns_wae_CH', 'goog.i18n.DateTimePatterns_xog', 'goog.i18n.DateTimePatterns_xog_UG', 'goog.i18n.DateTimePatterns_yav', 'goog.i18n.DateTimePatterns_yav_CM', 'goog.i18n.DateTimePatterns_yi', 'goog.i18n.DateTimePatterns_yi_001', 'goog.i18n.DateTimePatterns_yo', 'goog.i18n.DateTimePatterns_yo_BJ', 'goog.i18n.DateTimePatterns_yo_NG', 'goog.i18n.DateTimePatterns_zgh', 'goog.i18n.DateTimePatterns_zgh_MA', 'goog.i18n.DateTimePatterns_zh_Hans', 'goog.i18n.DateTimePatterns_zh_Hans_CN', 'goog.i18n.DateTimePatterns_zh_Hans_HK', 'goog.i18n.DateTimePatterns_zh_Hans_MO', 'goog.i18n.DateTimePatterns_zh_Hans_SG', 'goog.i18n.DateTimePatterns_zh_Hant', 'goog.i18n.DateTimePatterns_zh_Hant_HK', 'goog.i18n.DateTimePatterns_zh_Hant_MO', 'goog.i18n.DateTimePatterns_zh_Hant_TW', 'goog.i18n.DateTimePatterns_zu_ZA'], ['goog.i18n.DateTimePatterns'], false);\ngoog.addDependency('i18n/datetimesymbols.js', ['goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_af', 'goog.i18n.DateTimeSymbols_am', 'goog.i18n.DateTimeSymbols_ar', 'goog.i18n.DateTimeSymbols_az', 'goog.i18n.DateTimeSymbols_be', 'goog.i18n.DateTimeSymbols_bg', 'goog.i18n.DateTimeSymbols_bn', 'goog.i18n.DateTimeSymbols_br', 'goog.i18n.DateTimeSymbols_bs', 'goog.i18n.DateTimeSymbols_ca', 'goog.i18n.DateTimeSymbols_chr', 'goog.i18n.DateTimeSymbols_cs', 'goog.i18n.DateTimeSymbols_cy', 'goog.i18n.DateTimeSymbols_da', 'goog.i18n.DateTimeSymbols_de', 'goog.i18n.DateTimeSymbols_de_AT', 'goog.i18n.DateTimeSymbols_de_CH', 'goog.i18n.DateTimeSymbols_el', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_en_AU', 'goog.i18n.DateTimeSymbols_en_CA', 'goog.i18n.DateTimeSymbols_en_GB', 'goog.i18n.DateTimeSymbols_en_IE', 'goog.i18n.DateTimeSymbols_en_IN', 'goog.i18n.DateTimeSymbols_en_ISO', 'goog.i18n.DateTimeSymbols_en_SG', 'goog.i18n.DateTimeSymbols_en_US', 'goog.i18n.DateTimeSymbols_en_ZA', 'goog.i18n.DateTimeSymbols_es', 'goog.i18n.DateTimeSymbols_es_419', 'goog.i18n.DateTimeSymbols_es_ES', 'goog.i18n.DateTimeSymbols_es_MX', 'goog.i18n.DateTimeSymbols_es_US', 'goog.i18n.DateTimeSymbols_et', 'goog.i18n.DateTimeSymbols_eu', 'goog.i18n.DateTimeSymbols_fa', 'goog.i18n.DateTimeSymbols_fi', 'goog.i18n.DateTimeSymbols_fil', 'goog.i18n.DateTimeSymbols_fr', 'goog.i18n.DateTimeSymbols_fr_CA', 'goog.i18n.DateTimeSymbols_ga', 'goog.i18n.DateTimeSymbols_gl', 'goog.i18n.DateTimeSymbols_gsw', 'goog.i18n.DateTimeSymbols_gu', 'goog.i18n.DateTimeSymbols_haw', 'goog.i18n.DateTimeSymbols_he', 'goog.i18n.DateTimeSymbols_hi', 'goog.i18n.DateTimeSymbols_hr', 'goog.i18n.DateTimeSymbols_hu', 'goog.i18n.DateTimeSymbols_hy', 'goog.i18n.DateTimeSymbols_id', 'goog.i18n.DateTimeSymbols_in', 'goog.i18n.DateTimeSymbols_is', 'goog.i18n.DateTimeSymbols_it', 'goog.i18n.DateTimeSymbols_iw', 'goog.i18n.DateTimeSymbols_ja', 'goog.i18n.DateTimeSymbols_ka', 'goog.i18n.DateTimeSymbols_kk', 'goog.i18n.DateTimeSymbols_km', 'goog.i18n.DateTimeSymbols_kn', 'goog.i18n.DateTimeSymbols_ko', 'goog.i18n.DateTimeSymbols_ky', 'goog.i18n.DateTimeSymbols_ln', 'goog.i18n.DateTimeSymbols_lo', 'goog.i18n.DateTimeSymbols_lt', 'goog.i18n.DateTimeSymbols_lv', 'goog.i18n.DateTimeSymbols_mk', 'goog.i18n.DateTimeSymbols_ml', 'goog.i18n.DateTimeSymbols_mn', 'goog.i18n.DateTimeSymbols_mr', 'goog.i18n.DateTimeSymbols_ms', 'goog.i18n.DateTimeSymbols_mt', 'goog.i18n.DateTimeSymbols_my', 'goog.i18n.DateTimeSymbols_nb', 'goog.i18n.DateTimeSymbols_ne', 'goog.i18n.DateTimeSymbols_nl', 'goog.i18n.DateTimeSymbols_no', 'goog.i18n.DateTimeSymbols_no_NO', 'goog.i18n.DateTimeSymbols_or', 'goog.i18n.DateTimeSymbols_pa', 'goog.i18n.DateTimeSymbols_pl', 'goog.i18n.DateTimeSymbols_pt', 'goog.i18n.DateTimeSymbols_pt_BR', 'goog.i18n.DateTimeSymbols_pt_PT', 'goog.i18n.DateTimeSymbols_ro', 'goog.i18n.DateTimeSymbols_ru', 'goog.i18n.DateTimeSymbols_si', 'goog.i18n.DateTimeSymbols_sk', 'goog.i18n.DateTimeSymbols_sl', 'goog.i18n.DateTimeSymbols_sq', 'goog.i18n.DateTimeSymbols_sr', 'goog.i18n.DateTimeSymbols_sr_Latn', 'goog.i18n.DateTimeSymbols_sv', 'goog.i18n.DateTimeSymbols_sw', 'goog.i18n.DateTimeSymbols_ta', 'goog.i18n.DateTimeSymbols_te', 'goog.i18n.DateTimeSymbols_th', 'goog.i18n.DateTimeSymbols_tl', 'goog.i18n.DateTimeSymbols_tr', 'goog.i18n.DateTimeSymbols_uk', 'goog.i18n.DateTimeSymbols_ur', 'goog.i18n.DateTimeSymbols_uz', 'goog.i18n.DateTimeSymbols_vi', 'goog.i18n.DateTimeSymbols_zh', 'goog.i18n.DateTimeSymbols_zh_CN', 'goog.i18n.DateTimeSymbols_zh_HK', 'goog.i18n.DateTimeSymbols_zh_TW', 'goog.i18n.DateTimeSymbols_zu'], [], false);\ngoog.addDependency('i18n/datetimesymbolsext.js', ['goog.i18n.DateTimeSymbolsExt', 'goog.i18n.DateTimeSymbols_af_NA', 'goog.i18n.DateTimeSymbols_af_ZA', 'goog.i18n.DateTimeSymbols_agq', 'goog.i18n.DateTimeSymbols_agq_CM', 'goog.i18n.DateTimeSymbols_ak', 'goog.i18n.DateTimeSymbols_ak_GH', 'goog.i18n.DateTimeSymbols_am_ET', 'goog.i18n.DateTimeSymbols_ar_001', 'goog.i18n.DateTimeSymbols_ar_AE', 'goog.i18n.DateTimeSymbols_ar_BH', 'goog.i18n.DateTimeSymbols_ar_DJ', 'goog.i18n.DateTimeSymbols_ar_DZ', 'goog.i18n.DateTimeSymbols_ar_EG', 'goog.i18n.DateTimeSymbols_ar_EH', 'goog.i18n.DateTimeSymbols_ar_ER', 'goog.i18n.DateTimeSymbols_ar_IL', 'goog.i18n.DateTimeSymbols_ar_IQ', 'goog.i18n.DateTimeSymbols_ar_JO', 'goog.i18n.DateTimeSymbols_ar_KM', 'goog.i18n.DateTimeSymbols_ar_KW', 'goog.i18n.DateTimeSymbols_ar_LB', 'goog.i18n.DateTimeSymbols_ar_LY', 'goog.i18n.DateTimeSymbols_ar_MA', 'goog.i18n.DateTimeSymbols_ar_MR', 'goog.i18n.DateTimeSymbols_ar_OM', 'goog.i18n.DateTimeSymbols_ar_PS', 'goog.i18n.DateTimeSymbols_ar_QA', 'goog.i18n.DateTimeSymbols_ar_SA', 'goog.i18n.DateTimeSymbols_ar_SD', 'goog.i18n.DateTimeSymbols_ar_SO', 'goog.i18n.DateTimeSymbols_ar_SS', 'goog.i18n.DateTimeSymbols_ar_SY', 'goog.i18n.DateTimeSymbols_ar_TD', 'goog.i18n.DateTimeSymbols_ar_TN', 'goog.i18n.DateTimeSymbols_ar_YE', 'goog.i18n.DateTimeSymbols_as', 'goog.i18n.DateTimeSymbols_as_IN', 'goog.i18n.DateTimeSymbols_asa', 'goog.i18n.DateTimeSymbols_asa_TZ', 'goog.i18n.DateTimeSymbols_ast', 'goog.i18n.DateTimeSymbols_ast_ES', 'goog.i18n.DateTimeSymbols_az_Cyrl', 'goog.i18n.DateTimeSymbols_az_Cyrl_AZ', 'goog.i18n.DateTimeSymbols_az_Latn', 'goog.i18n.DateTimeSymbols_az_Latn_AZ', 'goog.i18n.DateTimeSymbols_bas', 'goog.i18n.DateTimeSymbols_bas_CM', 'goog.i18n.DateTimeSymbols_be_BY', 'goog.i18n.DateTimeSymbols_bem', 'goog.i18n.DateTimeSymbols_bem_ZM', 'goog.i18n.DateTimeSymbols_bez', 'goog.i18n.DateTimeSymbols_bez_TZ', 'goog.i18n.DateTimeSymbols_bg_BG', 'goog.i18n.DateTimeSymbols_bm', 'goog.i18n.DateTimeSymbols_bm_Latn', 'goog.i18n.DateTimeSymbols_bm_Latn_ML', 'goog.i18n.DateTimeSymbols_bn_BD', 'goog.i18n.DateTimeSymbols_bn_IN', 'goog.i18n.DateTimeSymbols_bo', 'goog.i18n.DateTimeSymbols_bo_CN', 'goog.i18n.DateTimeSymbols_bo_IN', 'goog.i18n.DateTimeSymbols_br_FR', 'goog.i18n.DateTimeSymbols_brx', 'goog.i18n.DateTimeSymbols_brx_IN', 'goog.i18n.DateTimeSymbols_bs_Cyrl', 'goog.i18n.DateTimeSymbols_bs_Cyrl_BA', 'goog.i18n.DateTimeSymbols_bs_Latn', 'goog.i18n.DateTimeSymbols_bs_Latn_BA', 'goog.i18n.DateTimeSymbols_ca_AD', 'goog.i18n.DateTimeSymbols_ca_ES', 'goog.i18n.DateTimeSymbols_ca_ES_VALENCIA', 'goog.i18n.DateTimeSymbols_ca_FR', 'goog.i18n.DateTimeSymbols_ca_IT', 'goog.i18n.DateTimeSymbols_cgg', 'goog.i18n.DateTimeSymbols_cgg_UG', 'goog.i18n.DateTimeSymbols_chr_US', 'goog.i18n.DateTimeSymbols_ckb', 'goog.i18n.DateTimeSymbols_ckb_Arab', 'goog.i18n.DateTimeSymbols_ckb_Arab_IQ', 'goog.i18n.DateTimeSymbols_ckb_Arab_IR', 'goog.i18n.DateTimeSymbols_ckb_IQ', 'goog.i18n.DateTimeSymbols_ckb_IR', 'goog.i18n.DateTimeSymbols_ckb_Latn', 'goog.i18n.DateTimeSymbols_ckb_Latn_IQ', 'goog.i18n.DateTimeSymbols_cs_CZ', 'goog.i18n.DateTimeSymbols_cy_GB', 'goog.i18n.DateTimeSymbols_da_DK', 'goog.i18n.DateTimeSymbols_da_GL', 'goog.i18n.DateTimeSymbols_dav', 'goog.i18n.DateTimeSymbols_dav_KE', 'goog.i18n.DateTimeSymbols_de_BE', 'goog.i18n.DateTimeSymbols_de_DE', 'goog.i18n.DateTimeSymbols_de_LI', 'goog.i18n.DateTimeSymbols_de_LU', 'goog.i18n.DateTimeSymbols_dje', 'goog.i18n.DateTimeSymbols_dje_NE', 'goog.i18n.DateTimeSymbols_dsb', 'goog.i18n.DateTimeSymbols_dsb_DE', 'goog.i18n.DateTimeSymbols_dua', 'goog.i18n.DateTimeSymbols_dua_CM', 'goog.i18n.DateTimeSymbols_dyo', 'goog.i18n.DateTimeSymbols_dyo_SN', 'goog.i18n.DateTimeSymbols_dz', 'goog.i18n.DateTimeSymbols_dz_BT', 'goog.i18n.DateTimeSymbols_ebu', 'goog.i18n.DateTimeSymbols_ebu_KE', 'goog.i18n.DateTimeSymbols_ee', 'goog.i18n.DateTimeSymbols_ee_GH', 'goog.i18n.DateTimeSymbols_ee_TG', 'goog.i18n.DateTimeSymbols_el_CY', 'goog.i18n.DateTimeSymbols_el_GR', 'goog.i18n.DateTimeSymbols_en_001', 'goog.i18n.DateTimeSymbols_en_150', 'goog.i18n.DateTimeSymbols_en_AG', 'goog.i18n.DateTimeSymbols_en_AI', 'goog.i18n.DateTimeSymbols_en_AS', 'goog.i18n.DateTimeSymbols_en_BB', 'goog.i18n.DateTimeSymbols_en_BE', 'goog.i18n.DateTimeSymbols_en_BM', 'goog.i18n.DateTimeSymbols_en_BS', 'goog.i18n.DateTimeSymbols_en_BW', 'goog.i18n.DateTimeSymbols_en_BZ', 'goog.i18n.DateTimeSymbols_en_CC', 'goog.i18n.DateTimeSymbols_en_CK', 'goog.i18n.DateTimeSymbols_en_CM', 'goog.i18n.DateTimeSymbols_en_CX', 'goog.i18n.DateTimeSymbols_en_DG', 'goog.i18n.DateTimeSymbols_en_DM', 'goog.i18n.DateTimeSymbols_en_ER', 'goog.i18n.DateTimeSymbols_en_FJ', 'goog.i18n.DateTimeSymbols_en_FK', 'goog.i18n.DateTimeSymbols_en_FM', 'goog.i18n.DateTimeSymbols_en_GD', 'goog.i18n.DateTimeSymbols_en_GG', 'goog.i18n.DateTimeSymbols_en_GH', 'goog.i18n.DateTimeSymbols_en_GI', 'goog.i18n.DateTimeSymbols_en_GM', 'goog.i18n.DateTimeSymbols_en_GU', 'goog.i18n.DateTimeSymbols_en_GY', 'goog.i18n.DateTimeSymbols_en_HK', 'goog.i18n.DateTimeSymbols_en_IM', 'goog.i18n.DateTimeSymbols_en_IO', 'goog.i18n.DateTimeSymbols_en_JE', 'goog.i18n.DateTimeSymbols_en_JM', 'goog.i18n.DateTimeSymbols_en_KE', 'goog.i18n.DateTimeSymbols_en_KI', 'goog.i18n.DateTimeSymbols_en_KN', 'goog.i18n.DateTimeSymbols_en_KY', 'goog.i18n.DateTimeSymbols_en_LC', 'goog.i18n.DateTimeSymbols_en_LR', 'goog.i18n.DateTimeSymbols_en_LS', 'goog.i18n.DateTimeSymbols_en_MG', 'goog.i18n.DateTimeSymbols_en_MH', 'goog.i18n.DateTimeSymbols_en_MO', 'goog.i18n.DateTimeSymbols_en_MP', 'goog.i18n.DateTimeSymbols_en_MS', 'goog.i18n.DateTimeSymbols_en_MT', 'goog.i18n.DateTimeSymbols_en_MU', 'goog.i18n.DateTimeSymbols_en_MW', 'goog.i18n.DateTimeSymbols_en_MY', 'goog.i18n.DateTimeSymbols_en_NA', 'goog.i18n.DateTimeSymbols_en_NF', 'goog.i18n.DateTimeSymbols_en_NG', 'goog.i18n.DateTimeSymbols_en_NR', 'goog.i18n.DateTimeSymbols_en_NU', 'goog.i18n.DateTimeSymbols_en_NZ', 'goog.i18n.DateTimeSymbols_en_PG', 'goog.i18n.DateTimeSymbols_en_PH', 'goog.i18n.DateTimeSymbols_en_PK', 'goog.i18n.DateTimeSymbols_en_PN', 'goog.i18n.DateTimeSymbols_en_PR', 'goog.i18n.DateTimeSymbols_en_PW', 'goog.i18n.DateTimeSymbols_en_RW', 'goog.i18n.DateTimeSymbols_en_SB', 'goog.i18n.DateTimeSymbols_en_SC', 'goog.i18n.DateTimeSymbols_en_SD', 'goog.i18n.DateTimeSymbols_en_SH', 'goog.i18n.DateTimeSymbols_en_SL', 'goog.i18n.DateTimeSymbols_en_SS', 'goog.i18n.DateTimeSymbols_en_SX', 'goog.i18n.DateTimeSymbols_en_SZ', 'goog.i18n.DateTimeSymbols_en_TC', 'goog.i18n.DateTimeSymbols_en_TK', 'goog.i18n.DateTimeSymbols_en_TO', 'goog.i18n.DateTimeSymbols_en_TT', 'goog.i18n.DateTimeSymbols_en_TV', 'goog.i18n.DateTimeSymbols_en_TZ', 'goog.i18n.DateTimeSymbols_en_UG', 'goog.i18n.DateTimeSymbols_en_UM', 'goog.i18n.DateTimeSymbols_en_VC', 'goog.i18n.DateTimeSymbols_en_VG', 'goog.i18n.DateTimeSymbols_en_VI', 'goog.i18n.DateTimeSymbols_en_VU', 'goog.i18n.DateTimeSymbols_en_WS', 'goog.i18n.DateTimeSymbols_en_ZM', 'goog.i18n.DateTimeSymbols_en_ZW', 'goog.i18n.DateTimeSymbols_eo', 'goog.i18n.DateTimeSymbols_eo_001', 'goog.i18n.DateTimeSymbols_es_AR', 'goog.i18n.DateTimeSymbols_es_BO', 'goog.i18n.DateTimeSymbols_es_CL', 'goog.i18n.DateTimeSymbols_es_CO', 'goog.i18n.DateTimeSymbols_es_CR', 'goog.i18n.DateTimeSymbols_es_CU', 'goog.i18n.DateTimeSymbols_es_DO', 'goog.i18n.DateTimeSymbols_es_EA', 'goog.i18n.DateTimeSymbols_es_EC', 'goog.i18n.DateTimeSymbols_es_GQ', 'goog.i18n.DateTimeSymbols_es_GT', 'goog.i18n.DateTimeSymbols_es_HN', 'goog.i18n.DateTimeSymbols_es_IC', 'goog.i18n.DateTimeSymbols_es_NI', 'goog.i18n.DateTimeSymbols_es_PA', 'goog.i18n.DateTimeSymbols_es_PE', 'goog.i18n.DateTimeSymbols_es_PH', 'goog.i18n.DateTimeSymbols_es_PR', 'goog.i18n.DateTimeSymbols_es_PY', 'goog.i18n.DateTimeSymbols_es_SV', 'goog.i18n.DateTimeSymbols_es_UY', 'goog.i18n.DateTimeSymbols_es_VE', 'goog.i18n.DateTimeSymbols_et_EE', 'goog.i18n.DateTimeSymbols_eu_ES', 'goog.i18n.DateTimeSymbols_ewo', 'goog.i18n.DateTimeSymbols_ewo_CM', 'goog.i18n.DateTimeSymbols_fa_AF', 'goog.i18n.DateTimeSymbols_fa_IR', 'goog.i18n.DateTimeSymbols_ff', 'goog.i18n.DateTimeSymbols_ff_CM', 'goog.i18n.DateTimeSymbols_ff_GN', 'goog.i18n.DateTimeSymbols_ff_MR', 'goog.i18n.DateTimeSymbols_ff_SN', 'goog.i18n.DateTimeSymbols_fi_FI', 'goog.i18n.DateTimeSymbols_fil_PH', 'goog.i18n.DateTimeSymbols_fo', 'goog.i18n.DateTimeSymbols_fo_FO', 'goog.i18n.DateTimeSymbols_fr_BE', 'goog.i18n.DateTimeSymbols_fr_BF', 'goog.i18n.DateTimeSymbols_fr_BI', 'goog.i18n.DateTimeSymbols_fr_BJ', 'goog.i18n.DateTimeSymbols_fr_BL', 'goog.i18n.DateTimeSymbols_fr_CD', 'goog.i18n.DateTimeSymbols_fr_CF', 'goog.i18n.DateTimeSymbols_fr_CG', 'goog.i18n.DateTimeSymbols_fr_CH', 'goog.i18n.DateTimeSymbols_fr_CI', 'goog.i18n.DateTimeSymbols_fr_CM', 'goog.i18n.DateTimeSymbols_fr_DJ', 'goog.i18n.DateTimeSymbols_fr_DZ', 'goog.i18n.DateTimeSymbols_fr_FR', 'goog.i18n.DateTimeSymbols_fr_GA', 'goog.i18n.DateTimeSymbols_fr_GF', 'goog.i18n.DateTimeSymbols_fr_GN', 'goog.i18n.DateTimeSymbols_fr_GP', 'goog.i18n.DateTimeSymbols_fr_GQ', 'goog.i18n.DateTimeSymbols_fr_HT', 'goog.i18n.DateTimeSymbols_fr_KM', 'goog.i18n.DateTimeSymbols_fr_LU', 'goog.i18n.DateTimeSymbols_fr_MA', 'goog.i18n.DateTimeSymbols_fr_MC', 'goog.i18n.DateTimeSymbols_fr_MF', 'goog.i18n.DateTimeSymbols_fr_MG', 'goog.i18n.DateTimeSymbols_fr_ML', 'goog.i18n.DateTimeSymbols_fr_MQ', 'goog.i18n.DateTimeSymbols_fr_MR', 'goog.i18n.DateTimeSymbols_fr_MU', 'goog.i18n.DateTimeSymbols_fr_NC', 'goog.i18n.DateTimeSymbols_fr_NE', 'goog.i18n.DateTimeSymbols_fr_PF', 'goog.i18n.DateTimeSymbols_fr_PM', 'goog.i18n.DateTimeSymbols_fr_RE', 'goog.i18n.DateTimeSymbols_fr_RW', 'goog.i18n.DateTimeSymbols_fr_SC', 'goog.i18n.DateTimeSymbols_fr_SN', 'goog.i18n.DateTimeSymbols_fr_SY', 'goog.i18n.DateTimeSymbols_fr_TD', 'goog.i18n.DateTimeSymbols_fr_TG', 'goog.i18n.DateTimeSymbols_fr_TN', 'goog.i18n.DateTimeSymbols_fr_VU', 'goog.i18n.DateTimeSymbols_fr_WF', 'goog.i18n.DateTimeSymbols_fr_YT', 'goog.i18n.DateTimeSymbols_fur', 'goog.i18n.DateTimeSymbols_fur_IT', 'goog.i18n.DateTimeSymbols_fy', 'goog.i18n.DateTimeSymbols_fy_NL', 'goog.i18n.DateTimeSymbols_ga_IE', 'goog.i18n.DateTimeSymbols_gd', 'goog.i18n.DateTimeSymbols_gd_GB', 'goog.i18n.DateTimeSymbols_gl_ES', 'goog.i18n.DateTimeSymbols_gsw_CH', 'goog.i18n.DateTimeSymbols_gsw_FR', 'goog.i18n.DateTimeSymbols_gsw_LI', 'goog.i18n.DateTimeSymbols_gu_IN', 'goog.i18n.DateTimeSymbols_guz', 'goog.i18n.DateTimeSymbols_guz_KE', 'goog.i18n.DateTimeSymbols_gv', 'goog.i18n.DateTimeSymbols_gv_IM', 'goog.i18n.DateTimeSymbols_ha', 'goog.i18n.DateTimeSymbols_ha_Latn', 'goog.i18n.DateTimeSymbols_ha_Latn_GH', 'goog.i18n.DateTimeSymbols_ha_Latn_NE', 'goog.i18n.DateTimeSymbols_ha_Latn_NG', 'goog.i18n.DateTimeSymbols_haw_US', 'goog.i18n.DateTimeSymbols_he_IL', 'goog.i18n.DateTimeSymbols_hi_IN', 'goog.i18n.DateTimeSymbols_hr_BA', 'goog.i18n.DateTimeSymbols_hr_HR', 'goog.i18n.DateTimeSymbols_hsb', 'goog.i18n.DateTimeSymbols_hsb_DE', 'goog.i18n.DateTimeSymbols_hu_HU', 'goog.i18n.DateTimeSymbols_hy_AM', 'goog.i18n.DateTimeSymbols_id_ID', 'goog.i18n.DateTimeSymbols_ig', 'goog.i18n.DateTimeSymbols_ig_NG', 'goog.i18n.DateTimeSymbols_ii', 'goog.i18n.DateTimeSymbols_ii_CN', 'goog.i18n.DateTimeSymbols_is_IS', 'goog.i18n.DateTimeSymbols_it_CH', 'goog.i18n.DateTimeSymbols_it_IT', 'goog.i18n.DateTimeSymbols_it_SM', 'goog.i18n.DateTimeSymbols_ja_JP', 'goog.i18n.DateTimeSymbols_jgo', 'goog.i18n.DateTimeSymbols_jgo_CM', 'goog.i18n.DateTimeSymbols_jmc', 'goog.i18n.DateTimeSymbols_jmc_TZ', 'goog.i18n.DateTimeSymbols_ka_GE', 'goog.i18n.DateTimeSymbols_kab', 'goog.i18n.DateTimeSymbols_kab_DZ', 'goog.i18n.DateTimeSymbols_kam', 'goog.i18n.DateTimeSymbols_kam_KE', 'goog.i18n.DateTimeSymbols_kde', 'goog.i18n.DateTimeSymbols_kde_TZ', 'goog.i18n.DateTimeSymbols_kea', 'goog.i18n.DateTimeSymbols_kea_CV', 'goog.i18n.DateTimeSymbols_khq', 'goog.i18n.DateTimeSymbols_khq_ML', 'goog.i18n.DateTimeSymbols_ki', 'goog.i18n.DateTimeSymbols_ki_KE', 'goog.i18n.DateTimeSymbols_kk_Cyrl', 'goog.i18n.DateTimeSymbols_kk_Cyrl_KZ', 'goog.i18n.DateTimeSymbols_kkj', 'goog.i18n.DateTimeSymbols_kkj_CM', 'goog.i18n.DateTimeSymbols_kl', 'goog.i18n.DateTimeSymbols_kl_GL', 'goog.i18n.DateTimeSymbols_kln', 'goog.i18n.DateTimeSymbols_kln_KE', 'goog.i18n.DateTimeSymbols_km_KH', 'goog.i18n.DateTimeSymbols_kn_IN', 'goog.i18n.DateTimeSymbols_ko_KP', 'goog.i18n.DateTimeSymbols_ko_KR', 'goog.i18n.DateTimeSymbols_kok', 'goog.i18n.DateTimeSymbols_kok_IN', 'goog.i18n.DateTimeSymbols_ks', 'goog.i18n.DateTimeSymbols_ks_Arab', 'goog.i18n.DateTimeSymbols_ks_Arab_IN', 'goog.i18n.DateTimeSymbols_ksb', 'goog.i18n.DateTimeSymbols_ksb_TZ', 'goog.i18n.DateTimeSymbols_ksf', 'goog.i18n.DateTimeSymbols_ksf_CM', 'goog.i18n.DateTimeSymbols_ksh', 'goog.i18n.DateTimeSymbols_ksh_DE', 'goog.i18n.DateTimeSymbols_kw', 'goog.i18n.DateTimeSymbols_kw_GB', 'goog.i18n.DateTimeSymbols_ky_Cyrl', 'goog.i18n.DateTimeSymbols_ky_Cyrl_KG', 'goog.i18n.DateTimeSymbols_lag', 'goog.i18n.DateTimeSymbols_lag_TZ', 'goog.i18n.DateTimeSymbols_lb', 'goog.i18n.DateTimeSymbols_lb_LU', 'goog.i18n.DateTimeSymbols_lg', 'goog.i18n.DateTimeSymbols_lg_UG', 'goog.i18n.DateTimeSymbols_lkt', 'goog.i18n.DateTimeSymbols_lkt_US', 'goog.i18n.DateTimeSymbols_ln_AO', 'goog.i18n.DateTimeSymbols_ln_CD', 'goog.i18n.DateTimeSymbols_ln_CF', 'goog.i18n.DateTimeSymbols_ln_CG', 'goog.i18n.DateTimeSymbols_lo_LA', 'goog.i18n.DateTimeSymbols_lt_LT', 'goog.i18n.DateTimeSymbols_lu', 'goog.i18n.DateTimeSymbols_lu_CD', 'goog.i18n.DateTimeSymbols_luo', 'goog.i18n.DateTimeSymbols_luo_KE', 'goog.i18n.DateTimeSymbols_luy', 'goog.i18n.DateTimeSymbols_luy_KE', 'goog.i18n.DateTimeSymbols_lv_LV', 'goog.i18n.DateTimeSymbols_mas', 'goog.i18n.DateTimeSymbols_mas_KE', 'goog.i18n.DateTimeSymbols_mas_TZ', 'goog.i18n.DateTimeSymbols_mer', 'goog.i18n.DateTimeSymbols_mer_KE', 'goog.i18n.DateTimeSymbols_mfe', 'goog.i18n.DateTimeSymbols_mfe_MU', 'goog.i18n.DateTimeSymbols_mg', 'goog.i18n.DateTimeSymbols_mg_MG', 'goog.i18n.DateTimeSymbols_mgh', 'goog.i18n.DateTimeSymbols_mgh_MZ', 'goog.i18n.DateTimeSymbols_mgo', 'goog.i18n.DateTimeSymbols_mgo_CM', 'goog.i18n.DateTimeSymbols_mk_MK', 'goog.i18n.DateTimeSymbols_ml_IN', 'goog.i18n.DateTimeSymbols_mn_Cyrl', 'goog.i18n.DateTimeSymbols_mn_Cyrl_MN', 'goog.i18n.DateTimeSymbols_mr_IN', 'goog.i18n.DateTimeSymbols_ms_Latn', 'goog.i18n.DateTimeSymbols_ms_Latn_BN', 'goog.i18n.DateTimeSymbols_ms_Latn_MY', 'goog.i18n.DateTimeSymbols_ms_Latn_SG', 'goog.i18n.DateTimeSymbols_mt_MT', 'goog.i18n.DateTimeSymbols_mua', 'goog.i18n.DateTimeSymbols_mua_CM', 'goog.i18n.DateTimeSymbols_my_MM', 'goog.i18n.DateTimeSymbols_naq', 'goog.i18n.DateTimeSymbols_naq_NA', 'goog.i18n.DateTimeSymbols_nb_NO', 'goog.i18n.DateTimeSymbols_nb_SJ', 'goog.i18n.DateTimeSymbols_nd', 'goog.i18n.DateTimeSymbols_nd_ZW', 'goog.i18n.DateTimeSymbols_ne_IN', 'goog.i18n.DateTimeSymbols_ne_NP', 'goog.i18n.DateTimeSymbols_nl_AW', 'goog.i18n.DateTimeSymbols_nl_BE', 'goog.i18n.DateTimeSymbols_nl_BQ', 'goog.i18n.DateTimeSymbols_nl_CW', 'goog.i18n.DateTimeSymbols_nl_NL', 'goog.i18n.DateTimeSymbols_nl_SR', 'goog.i18n.DateTimeSymbols_nl_SX', 'goog.i18n.DateTimeSymbols_nmg', 'goog.i18n.DateTimeSymbols_nmg_CM', 'goog.i18n.DateTimeSymbols_nn', 'goog.i18n.DateTimeSymbols_nn_NO', 'goog.i18n.DateTimeSymbols_nnh', 'goog.i18n.DateTimeSymbols_nnh_CM', 'goog.i18n.DateTimeSymbols_nus', 'goog.i18n.DateTimeSymbols_nus_SD', 'goog.i18n.DateTimeSymbols_nyn', 'goog.i18n.DateTimeSymbols_nyn_UG', 'goog.i18n.DateTimeSymbols_om', 'goog.i18n.DateTimeSymbols_om_ET', 'goog.i18n.DateTimeSymbols_om_KE', 'goog.i18n.DateTimeSymbols_or_IN', 'goog.i18n.DateTimeSymbols_os', 'goog.i18n.DateTimeSymbols_os_GE', 'goog.i18n.DateTimeSymbols_os_RU', 'goog.i18n.DateTimeSymbols_pa_Arab', 'goog.i18n.DateTimeSymbols_pa_Arab_PK', 'goog.i18n.DateTimeSymbols_pa_Guru', 'goog.i18n.DateTimeSymbols_pa_Guru_IN', 'goog.i18n.DateTimeSymbols_pl_PL', 'goog.i18n.DateTimeSymbols_ps', 'goog.i18n.DateTimeSymbols_ps_AF', 'goog.i18n.DateTimeSymbols_pt_AO', 'goog.i18n.DateTimeSymbols_pt_CV', 'goog.i18n.DateTimeSymbols_pt_GW', 'goog.i18n.DateTimeSymbols_pt_MO', 'goog.i18n.DateTimeSymbols_pt_MZ', 'goog.i18n.DateTimeSymbols_pt_ST', 'goog.i18n.DateTimeSymbols_pt_TL', 'goog.i18n.DateTimeSymbols_qu', 'goog.i18n.DateTimeSymbols_qu_BO', 'goog.i18n.DateTimeSymbols_qu_EC', 'goog.i18n.DateTimeSymbols_qu_PE', 'goog.i18n.DateTimeSymbols_rm', 'goog.i18n.DateTimeSymbols_rm_CH', 'goog.i18n.DateTimeSymbols_rn', 'goog.i18n.DateTimeSymbols_rn_BI', 'goog.i18n.DateTimeSymbols_ro_MD', 'goog.i18n.DateTimeSymbols_ro_RO', 'goog.i18n.DateTimeSymbols_rof', 'goog.i18n.DateTimeSymbols_rof_TZ', 'goog.i18n.DateTimeSymbols_ru_BY', 'goog.i18n.DateTimeSymbols_ru_KG', 'goog.i18n.DateTimeSymbols_ru_KZ', 'goog.i18n.DateTimeSymbols_ru_MD', 'goog.i18n.DateTimeSymbols_ru_RU', 'goog.i18n.DateTimeSymbols_ru_UA', 'goog.i18n.DateTimeSymbols_rw', 'goog.i18n.DateTimeSymbols_rw_RW', 'goog.i18n.DateTimeSymbols_rwk', 'goog.i18n.DateTimeSymbols_rwk_TZ', 'goog.i18n.DateTimeSymbols_sah', 'goog.i18n.DateTimeSymbols_sah_RU', 'goog.i18n.DateTimeSymbols_saq', 'goog.i18n.DateTimeSymbols_saq_KE', 'goog.i18n.DateTimeSymbols_sbp', 'goog.i18n.DateTimeSymbols_sbp_TZ', 'goog.i18n.DateTimeSymbols_se', 'goog.i18n.DateTimeSymbols_se_FI', 'goog.i18n.DateTimeSymbols_se_NO', 'goog.i18n.DateTimeSymbols_se_SE', 'goog.i18n.DateTimeSymbols_seh', 'goog.i18n.DateTimeSymbols_seh_MZ', 'goog.i18n.DateTimeSymbols_ses', 'goog.i18n.DateTimeSymbols_ses_ML', 'goog.i18n.DateTimeSymbols_sg', 'goog.i18n.DateTimeSymbols_sg_CF', 'goog.i18n.DateTimeSymbols_shi', 'goog.i18n.DateTimeSymbols_shi_Latn', 'goog.i18n.DateTimeSymbols_shi_Latn_MA', 'goog.i18n.DateTimeSymbols_shi_Tfng', 'goog.i18n.DateTimeSymbols_shi_Tfng_MA', 'goog.i18n.DateTimeSymbols_si_LK', 'goog.i18n.DateTimeSymbols_sk_SK', 'goog.i18n.DateTimeSymbols_sl_SI', 'goog.i18n.DateTimeSymbols_smn', 'goog.i18n.DateTimeSymbols_smn_FI', 'goog.i18n.DateTimeSymbols_sn', 'goog.i18n.DateTimeSymbols_sn_ZW', 'goog.i18n.DateTimeSymbols_so', 'goog.i18n.DateTimeSymbols_so_DJ', 'goog.i18n.DateTimeSymbols_so_ET', 'goog.i18n.DateTimeSymbols_so_KE', 'goog.i18n.DateTimeSymbols_so_SO', 'goog.i18n.DateTimeSymbols_sq_AL', 'goog.i18n.DateTimeSymbols_sq_MK', 'goog.i18n.DateTimeSymbols_sq_XK', 'goog.i18n.DateTimeSymbols_sr_Cyrl', 'goog.i18n.DateTimeSymbols_sr_Cyrl_BA', 'goog.i18n.DateTimeSymbols_sr_Cyrl_ME', 'goog.i18n.DateTimeSymbols_sr_Cyrl_RS', 'goog.i18n.DateTimeSymbols_sr_Cyrl_XK', 'goog.i18n.DateTimeSymbols_sr_Latn_BA', 'goog.i18n.DateTimeSymbols_sr_Latn_ME', 'goog.i18n.DateTimeSymbols_sr_Latn_RS', 'goog.i18n.DateTimeSymbols_sr_Latn_XK', 'goog.i18n.DateTimeSymbols_sv_AX', 'goog.i18n.DateTimeSymbols_sv_FI', 'goog.i18n.DateTimeSymbols_sv_SE', 'goog.i18n.DateTimeSymbols_sw_CD', 'goog.i18n.DateTimeSymbols_sw_KE', 'goog.i18n.DateTimeSymbols_sw_TZ', 'goog.i18n.DateTimeSymbols_sw_UG', 'goog.i18n.DateTimeSymbols_ta_IN', 'goog.i18n.DateTimeSymbols_ta_LK', 'goog.i18n.DateTimeSymbols_ta_MY', 'goog.i18n.DateTimeSymbols_ta_SG', 'goog.i18n.DateTimeSymbols_te_IN', 'goog.i18n.DateTimeSymbols_teo', 'goog.i18n.DateTimeSymbols_teo_KE', 'goog.i18n.DateTimeSymbols_teo_UG', 'goog.i18n.DateTimeSymbols_th_TH', 'goog.i18n.DateTimeSymbols_ti', 'goog.i18n.DateTimeSymbols_ti_ER', 'goog.i18n.DateTimeSymbols_ti_ET', 'goog.i18n.DateTimeSymbols_to', 'goog.i18n.DateTimeSymbols_to_TO', 'goog.i18n.DateTimeSymbols_tr_CY', 'goog.i18n.DateTimeSymbols_tr_TR', 'goog.i18n.DateTimeSymbols_twq', 'goog.i18n.DateTimeSymbols_twq_NE', 'goog.i18n.DateTimeSymbols_tzm', 'goog.i18n.DateTimeSymbols_tzm_Latn', 'goog.i18n.DateTimeSymbols_tzm_Latn_MA', 'goog.i18n.DateTimeSymbols_ug', 'goog.i18n.DateTimeSymbols_ug_Arab', 'goog.i18n.DateTimeSymbols_ug_Arab_CN', 'goog.i18n.DateTimeSymbols_uk_UA', 'goog.i18n.DateTimeSymbols_ur_IN', 'goog.i18n.DateTimeSymbols_ur_PK', 'goog.i18n.DateTimeSymbols_uz_Arab', 'goog.i18n.DateTimeSymbols_uz_Arab_AF', 'goog.i18n.DateTimeSymbols_uz_Cyrl', 'goog.i18n.DateTimeSymbols_uz_Cyrl_UZ', 'goog.i18n.DateTimeSymbols_uz_Latn', 'goog.i18n.DateTimeSymbols_uz_Latn_UZ', 'goog.i18n.DateTimeSymbols_vai', 'goog.i18n.DateTimeSymbols_vai_Latn', 'goog.i18n.DateTimeSymbols_vai_Latn_LR', 'goog.i18n.DateTimeSymbols_vai_Vaii', 'goog.i18n.DateTimeSymbols_vai_Vaii_LR', 'goog.i18n.DateTimeSymbols_vi_VN', 'goog.i18n.DateTimeSymbols_vun', 'goog.i18n.DateTimeSymbols_vun_TZ', 'goog.i18n.DateTimeSymbols_wae', 'goog.i18n.DateTimeSymbols_wae_CH', 'goog.i18n.DateTimeSymbols_xog', 'goog.i18n.DateTimeSymbols_xog_UG', 'goog.i18n.DateTimeSymbols_yav', 'goog.i18n.DateTimeSymbols_yav_CM', 'goog.i18n.DateTimeSymbols_yi', 'goog.i18n.DateTimeSymbols_yi_001', 'goog.i18n.DateTimeSymbols_yo', 'goog.i18n.DateTimeSymbols_yo_BJ', 'goog.i18n.DateTimeSymbols_yo_NG', 'goog.i18n.DateTimeSymbols_zgh', 'goog.i18n.DateTimeSymbols_zgh_MA', 'goog.i18n.DateTimeSymbols_zh_Hans', 'goog.i18n.DateTimeSymbols_zh_Hans_CN', 'goog.i18n.DateTimeSymbols_zh_Hans_HK', 'goog.i18n.DateTimeSymbols_zh_Hans_MO', 'goog.i18n.DateTimeSymbols_zh_Hans_SG', 'goog.i18n.DateTimeSymbols_zh_Hant', 'goog.i18n.DateTimeSymbols_zh_Hant_HK', 'goog.i18n.DateTimeSymbols_zh_Hant_MO', 'goog.i18n.DateTimeSymbols_zh_Hant_TW', 'goog.i18n.DateTimeSymbols_zu_ZA'], ['goog.i18n.DateTimeSymbols'], false);\ngoog.addDependency('i18n/graphemebreak.js', ['goog.i18n.GraphemeBreak'], ['goog.structs.InversionMap'], false);\ngoog.addDependency('i18n/graphemebreak_test.js', ['goog.i18n.GraphemeBreakTest'], ['goog.i18n.GraphemeBreak', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/messageformat.js', ['goog.i18n.MessageFormat'], ['goog.asserts', 'goog.i18n.NumberFormat', 'goog.i18n.ordinalRules', 'goog.i18n.pluralRules'], false);\ngoog.addDependency('i18n/messageformat_test.js', ['goog.i18n.MessageFormatTest'], ['goog.i18n.MessageFormat', 'goog.i18n.NumberFormatSymbols_hr', 'goog.i18n.pluralRules', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/mime.js', ['goog.i18n.mime', 'goog.i18n.mime.encode'], ['goog.array'], false);\ngoog.addDependency('i18n/mime_test.js', ['goog.i18n.mime.encodeTest'], ['goog.i18n.mime.encode', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/numberformat.js', ['goog.i18n.NumberFormat', 'goog.i18n.NumberFormat.CurrencyStyle', 'goog.i18n.NumberFormat.Format'], ['goog.asserts', 'goog.i18n.CompactNumberFormatSymbols', 'goog.i18n.NumberFormatSymbols', 'goog.i18n.currency', 'goog.math'], false);\ngoog.addDependency('i18n/numberformat_test.js', ['goog.i18n.NumberFormatTest'], ['goog.i18n.CompactNumberFormatSymbols', 'goog.i18n.CompactNumberFormatSymbols_de', 'goog.i18n.CompactNumberFormatSymbols_en', 'goog.i18n.CompactNumberFormatSymbols_fr', 'goog.i18n.NumberFormat', 'goog.i18n.NumberFormatSymbols', 'goog.i18n.NumberFormatSymbols_de', 'goog.i18n.NumberFormatSymbols_en', 'goog.i18n.NumberFormatSymbols_fr', 'goog.i18n.NumberFormatSymbols_pl', 'goog.i18n.NumberFormatSymbols_ro', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('i18n/numberformatsymbols.js', ['goog.i18n.NumberFormatSymbols', 'goog.i18n.NumberFormatSymbols_af', 'goog.i18n.NumberFormatSymbols_af_ZA', 'goog.i18n.NumberFormatSymbols_am', 'goog.i18n.NumberFormatSymbols_am_ET', 'goog.i18n.NumberFormatSymbols_ar', 'goog.i18n.NumberFormatSymbols_ar_001', 'goog.i18n.NumberFormatSymbols_ar_EG', 'goog.i18n.NumberFormatSymbols_az', 'goog.i18n.NumberFormatSymbols_az_Latn', 'goog.i18n.NumberFormatSymbols_az_Latn_AZ', 'goog.i18n.NumberFormatSymbols_be', 'goog.i18n.NumberFormatSymbols_be_BY', 'goog.i18n.NumberFormatSymbols_bg', 'goog.i18n.NumberFormatSymbols_bg_BG', 'goog.i18n.NumberFormatSymbols_bn', 'goog.i18n.NumberFormatSymbols_bn_BD', 'goog.i18n.NumberFormatSymbols_br', 'goog.i18n.NumberFormatSymbols_br_FR', 'goog.i18n.NumberFormatSymbols_bs', 'goog.i18n.NumberFormatSymbols_bs_Latn', 'goog.i18n.NumberFormatSymbols_bs_Latn_BA', 'goog.i18n.NumberFormatSymbols_ca', 'goog.i18n.NumberFormatSymbols_ca_AD', 'goog.i18n.NumberFormatSymbols_ca_ES', 'goog.i18n.NumberFormatSymbols_ca_ES_VALENCIA', 'goog.i18n.NumberFormatSymbols_ca_FR', 'goog.i18n.NumberFormatSymbols_ca_IT', 'goog.i18n.NumberFormatSymbols_chr', 'goog.i18n.NumberFormatSymbols_chr_US', 'goog.i18n.NumberFormatSymbols_cs', 'goog.i18n.NumberFormatSymbols_cs_CZ', 'goog.i18n.NumberFormatSymbols_cy', 'goog.i18n.NumberFormatSymbols_cy_GB', 'goog.i18n.NumberFormatSymbols_da', 'goog.i18n.NumberFormatSymbols_da_DK', 'goog.i18n.NumberFormatSymbols_da_GL', 'goog.i18n.NumberFormatSymbols_de', 'goog.i18n.NumberFormatSymbols_de_AT', 'goog.i18n.NumberFormatSymbols_de_BE', 'goog.i18n.NumberFormatSymbols_de_CH', 'goog.i18n.NumberFormatSymbols_de_DE', 'goog.i18n.NumberFormatSymbols_de_LU', 'goog.i18n.NumberFormatSymbols_el', 'goog.i18n.NumberFormatSymbols_el_CY', 'goog.i18n.NumberFormatSymbols_el_GR', 'goog.i18n.NumberFormatSymbols_en', 'goog.i18n.NumberFormatSymbols_en_001', 'goog.i18n.NumberFormatSymbols_en_AS', 'goog.i18n.NumberFormatSymbols_en_AU', 'goog.i18n.NumberFormatSymbols_en_CA', 'goog.i18n.NumberFormatSymbols_en_DG', 'goog.i18n.NumberFormatSymbols_en_FM', 'goog.i18n.NumberFormatSymbols_en_GB', 'goog.i18n.NumberFormatSymbols_en_GU', 'goog.i18n.NumberFormatSymbols_en_IE', 'goog.i18n.NumberFormatSymbols_en_IN', 'goog.i18n.NumberFormatSymbols_en_IO', 'goog.i18n.NumberFormatSymbols_en_MH', 'goog.i18n.NumberFormatSymbols_en_MP', 'goog.i18n.NumberFormatSymbols_en_PR', 'goog.i18n.NumberFormatSymbols_en_PW', 'goog.i18n.NumberFormatSymbols_en_SG', 'goog.i18n.NumberFormatSymbols_en_TC', 'goog.i18n.NumberFormatSymbols_en_UM', 'goog.i18n.NumberFormatSymbols_en_US', 'goog.i18n.NumberFormatSymbols_en_VG', 'goog.i18n.NumberFormatSymbols_en_VI', 'goog.i18n.NumberFormatSymbols_en_ZA', 'goog.i18n.NumberFormatSymbols_en_ZW', 'goog.i18n.NumberFormatSymbols_es', 'goog.i18n.NumberFormatSymbols_es_419', 'goog.i18n.NumberFormatSymbols_es_EA', 'goog.i18n.NumberFormatSymbols_es_ES', 'goog.i18n.NumberFormatSymbols_es_IC', 'goog.i18n.NumberFormatSymbols_es_MX', 'goog.i18n.NumberFormatSymbols_es_US', 'goog.i18n.NumberFormatSymbols_et', 'goog.i18n.NumberFormatSymbols_et_EE', 'goog.i18n.NumberFormatSymbols_eu', 'goog.i18n.NumberFormatSymbols_eu_ES', 'goog.i18n.NumberFormatSymbols_fa', 'goog.i18n.NumberFormatSymbols_fa_IR', 'goog.i18n.NumberFormatSymbols_fi', 'goog.i18n.NumberFormatSymbols_fi_FI', 'goog.i18n.NumberFormatSymbols_fil', 'goog.i18n.NumberFormatSymbols_fil_PH', 'goog.i18n.NumberFormatSymbols_fr', 'goog.i18n.NumberFormatSymbols_fr_BL', 'goog.i18n.NumberFormatSymbols_fr_CA', 'goog.i18n.NumberFormatSymbols_fr_FR', 'goog.i18n.NumberFormatSymbols_fr_GF', 'goog.i18n.NumberFormatSymbols_fr_GP', 'goog.i18n.NumberFormatSymbols_fr_MC', 'goog.i18n.NumberFormatSymbols_fr_MF', 'goog.i18n.NumberFormatSymbols_fr_MQ', 'goog.i18n.NumberFormatSymbols_fr_PM', 'goog.i18n.NumberFormatSymbols_fr_RE', 'goog.i18n.NumberFormatSymbols_fr_YT', 'goog.i18n.NumberFormatSymbols_ga', 'goog.i18n.NumberFormatSymbols_ga_IE', 'goog.i18n.NumberFormatSymbols_gl', 'goog.i18n.NumberFormatSymbols_gl_ES', 'goog.i18n.NumberFormatSymbols_gsw', 'goog.i18n.NumberFormatSymbols_gsw_CH', 'goog.i18n.NumberFormatSymbols_gsw_LI', 'goog.i18n.NumberFormatSymbols_gu', 'goog.i18n.NumberFormatSymbols_gu_IN', 'goog.i18n.NumberFormatSymbols_haw', 'goog.i18n.NumberFormatSymbols_haw_US', 'goog.i18n.NumberFormatSymbols_he', 'goog.i18n.NumberFormatSymbols_he_IL', 'goog.i18n.NumberFormatSymbols_hi', 'goog.i18n.NumberFormatSymbols_hi_IN', 'goog.i18n.NumberFormatSymbols_hr', 'goog.i18n.NumberFormatSymbols_hr_HR', 'goog.i18n.NumberFormatSymbols_hu', 'goog.i18n.NumberFormatSymbols_hu_HU', 'goog.i18n.NumberFormatSymbols_hy', 'goog.i18n.NumberFormatSymbols_hy_AM', 'goog.i18n.NumberFormatSymbols_id', 'goog.i18n.NumberFormatSymbols_id_ID', 'goog.i18n.NumberFormatSymbols_in', 'goog.i18n.NumberFormatSymbols_is', 'goog.i18n.NumberFormatSymbols_is_IS', 'goog.i18n.NumberFormatSymbols_it', 'goog.i18n.NumberFormatSymbols_it_IT', 'goog.i18n.NumberFormatSymbols_it_SM', 'goog.i18n.NumberFormatSymbols_iw', 'goog.i18n.NumberFormatSymbols_ja', 'goog.i18n.NumberFormatSymbols_ja_JP', 'goog.i18n.NumberFormatSymbols_ka', 'goog.i18n.NumberFormatSymbols_ka_GE', 'goog.i18n.NumberFormatSymbols_kk', 'goog.i18n.NumberFormatSymbols_kk_Cyrl', 'goog.i18n.NumberFormatSymbols_kk_Cyrl_KZ', 'goog.i18n.NumberFormatSymbols_km', 'goog.i18n.NumberFormatSymbols_km_KH', 'goog.i18n.NumberFormatSymbols_kn', 'goog.i18n.NumberFormatSymbols_kn_IN', 'goog.i18n.NumberFormatSymbols_ko', 'goog.i18n.NumberFormatSymbols_ko_KR', 'goog.i18n.NumberFormatSymbols_ky', 'goog.i18n.NumberFormatSymbols_ky_Cyrl', 'goog.i18n.NumberFormatSymbols_ky_Cyrl_KG', 'goog.i18n.NumberFormatSymbols_ln', 'goog.i18n.NumberFormatSymbols_ln_CD', 'goog.i18n.NumberFormatSymbols_lo', 'goog.i18n.NumberFormatSymbols_lo_LA', 'goog.i18n.NumberFormatSymbols_lt', 'goog.i18n.NumberFormatSymbols_lt_LT', 'goog.i18n.NumberFormatSymbols_lv', 'goog.i18n.NumberFormatSymbols_lv_LV', 'goog.i18n.NumberFormatSymbols_mk', 'goog.i18n.NumberFormatSymbols_mk_MK', 'goog.i18n.NumberFormatSymbols_ml', 'goog.i18n.NumberFormatSymbols_ml_IN', 'goog.i18n.NumberFormatSymbols_mn', 'goog.i18n.NumberFormatSymbols_mn_Cyrl', 'goog.i18n.NumberFormatSymbols_mn_Cyrl_MN', 'goog.i18n.NumberFormatSymbols_mr', 'goog.i18n.NumberFormatSymbols_mr_IN', 'goog.i18n.NumberFormatSymbols_ms', 'goog.i18n.NumberFormatSymbols_ms_Latn', 'goog.i18n.NumberFormatSymbols_ms_Latn_MY', 'goog.i18n.NumberFormatSymbols_mt', 'goog.i18n.NumberFormatSymbols_mt_MT', 'goog.i18n.NumberFormatSymbols_my', 'goog.i18n.NumberFormatSymbols_my_MM', 'goog.i18n.NumberFormatSymbols_nb', 'goog.i18n.NumberFormatSymbols_nb_NO', 'goog.i18n.NumberFormatSymbols_nb_SJ', 'goog.i18n.NumberFormatSymbols_ne', 'goog.i18n.NumberFormatSymbols_ne_NP', 'goog.i18n.NumberFormatSymbols_nl', 'goog.i18n.NumberFormatSymbols_nl_NL', 'goog.i18n.NumberFormatSymbols_no', 'goog.i18n.NumberFormatSymbols_no_NO', 'goog.i18n.NumberFormatSymbols_or', 'goog.i18n.NumberFormatSymbols_or_IN', 'goog.i18n.NumberFormatSymbols_pa', 'goog.i18n.NumberFormatSymbols_pa_Guru', 'goog.i18n.NumberFormatSymbols_pa_Guru_IN', 'goog.i18n.NumberFormatSymbols_pl', 'goog.i18n.NumberFormatSymbols_pl_PL', 'goog.i18n.NumberFormatSymbols_pt', 'goog.i18n.NumberFormatSymbols_pt_BR', 'goog.i18n.NumberFormatSymbols_pt_PT', 'goog.i18n.NumberFormatSymbols_ro', 'goog.i18n.NumberFormatSymbols_ro_RO', 'goog.i18n.NumberFormatSymbols_ru', 'goog.i18n.NumberFormatSymbols_ru_RU', 'goog.i18n.NumberFormatSymbols_si', 'goog.i18n.NumberFormatSymbols_si_LK', 'goog.i18n.NumberFormatSymbols_sk', 'goog.i18n.NumberFormatSymbols_sk_SK', 'goog.i18n.NumberFormatSymbols_sl', 'goog.i18n.NumberFormatSymbols_sl_SI', 'goog.i18n.NumberFormatSymbols_sq', 'goog.i18n.NumberFormatSymbols_sq_AL', 'goog.i18n.NumberFormatSymbols_sr', 'goog.i18n.NumberFormatSymbols_sr_Cyrl', 'goog.i18n.NumberFormatSymbols_sr_Cyrl_RS', 'goog.i18n.NumberFormatSymbols_sr_Latn', 'goog.i18n.NumberFormatSymbols_sr_Latn_RS', 'goog.i18n.NumberFormatSymbols_sv', 'goog.i18n.NumberFormatSymbols_sv_SE', 'goog.i18n.NumberFormatSymbols_sw', 'goog.i18n.NumberFormatSymbols_sw_TZ', 'goog.i18n.NumberFormatSymbols_ta', 'goog.i18n.NumberFormatSymbols_ta_IN', 'goog.i18n.NumberFormatSymbols_te', 'goog.i18n.NumberFormatSymbols_te_IN', 'goog.i18n.NumberFormatSymbols_th', 'goog.i18n.NumberFormatSymbols_th_TH', 'goog.i18n.NumberFormatSymbols_tl', 'goog.i18n.NumberFormatSymbols_tr', 'goog.i18n.NumberFormatSymbols_tr_TR', 'goog.i18n.NumberFormatSymbols_uk', 'goog.i18n.NumberFormatSymbols_uk_UA', 'goog.i18n.NumberFormatSymbols_ur', 'goog.i18n.NumberFormatSymbols_ur_PK', 'goog.i18n.NumberFormatSymbols_uz', 'goog.i18n.NumberFormatSymbols_uz_Latn', 'goog.i18n.NumberFormatSymbols_uz_Latn_UZ', 'goog.i18n.NumberFormatSymbols_vi', 'goog.i18n.NumberFormatSymbols_vi_VN', 'goog.i18n.NumberFormatSymbols_zh', 'goog.i18n.NumberFormatSymbols_zh_CN', 'goog.i18n.NumberFormatSymbols_zh_HK', 'goog.i18n.NumberFormatSymbols_zh_Hans', 'goog.i18n.NumberFormatSymbols_zh_Hans_CN', 'goog.i18n.NumberFormatSymbols_zh_TW', 'goog.i18n.NumberFormatSymbols_zu', 'goog.i18n.NumberFormatSymbols_zu_ZA'], [], false);\ngoog.addDependency('i18n/numberformatsymbolsext.js', ['goog.i18n.NumberFormatSymbolsExt', 'goog.i18n.NumberFormatSymbols_af_NA', 'goog.i18n.NumberFormatSymbols_agq', 'goog.i18n.NumberFormatSymbols_agq_CM', 'goog.i18n.NumberFormatSymbols_ak', 'goog.i18n.NumberFormatSymbols_ak_GH', 'goog.i18n.NumberFormatSymbols_ar_AE', 'goog.i18n.NumberFormatSymbols_ar_BH', 'goog.i18n.NumberFormatSymbols_ar_DJ', 'goog.i18n.NumberFormatSymbols_ar_DZ', 'goog.i18n.NumberFormatSymbols_ar_EH', 'goog.i18n.NumberFormatSymbols_ar_ER', 'goog.i18n.NumberFormatSymbols_ar_IL', 'goog.i18n.NumberFormatSymbols_ar_IQ', 'goog.i18n.NumberFormatSymbols_ar_JO', 'goog.i18n.NumberFormatSymbols_ar_KM', 'goog.i18n.NumberFormatSymbols_ar_KW', 'goog.i18n.NumberFormatSymbols_ar_LB', 'goog.i18n.NumberFormatSymbols_ar_LY', 'goog.i18n.NumberFormatSymbols_ar_MA', 'goog.i18n.NumberFormatSymbols_ar_MR', 'goog.i18n.NumberFormatSymbols_ar_OM', 'goog.i18n.NumberFormatSymbols_ar_PS', 'goog.i18n.NumberFormatSymbols_ar_QA', 'goog.i18n.NumberFormatSymbols_ar_SA', 'goog.i18n.NumberFormatSymbols_ar_SD', 'goog.i18n.NumberFormatSymbols_ar_SO', 'goog.i18n.NumberFormatSymbols_ar_SS', 'goog.i18n.NumberFormatSymbols_ar_SY', 'goog.i18n.NumberFormatSymbols_ar_TD', 'goog.i18n.NumberFormatSymbols_ar_TN', 'goog.i18n.NumberFormatSymbols_ar_YE', 'goog.i18n.NumberFormatSymbols_as', 'goog.i18n.NumberFormatSymbols_as_IN', 'goog.i18n.NumberFormatSymbols_asa', 'goog.i18n.NumberFormatSymbols_asa_TZ', 'goog.i18n.NumberFormatSymbols_ast', 'goog.i18n.NumberFormatSymbols_ast_ES', 'goog.i18n.NumberFormatSymbols_az_Cyrl', 'goog.i18n.NumberFormatSymbols_az_Cyrl_AZ', 'goog.i18n.NumberFormatSymbols_bas', 'goog.i18n.NumberFormatSymbols_bas_CM', 'goog.i18n.NumberFormatSymbols_bem', 'goog.i18n.NumberFormatSymbols_bem_ZM', 'goog.i18n.NumberFormatSymbols_bez', 'goog.i18n.NumberFormatSymbols_bez_TZ', 'goog.i18n.NumberFormatSymbols_bm', 'goog.i18n.NumberFormatSymbols_bm_Latn', 'goog.i18n.NumberFormatSymbols_bm_Latn_ML', 'goog.i18n.NumberFormatSymbols_bn_IN', 'goog.i18n.NumberFormatSymbols_bo', 'goog.i18n.NumberFormatSymbols_bo_CN', 'goog.i18n.NumberFormatSymbols_bo_IN', 'goog.i18n.NumberFormatSymbols_brx', 'goog.i18n.NumberFormatSymbols_brx_IN', 'goog.i18n.NumberFormatSymbols_bs_Cyrl', 'goog.i18n.NumberFormatSymbols_bs_Cyrl_BA', 'goog.i18n.NumberFormatSymbols_cgg', 'goog.i18n.NumberFormatSymbols_cgg_UG', 'goog.i18n.NumberFormatSymbols_ckb', 'goog.i18n.NumberFormatSymbols_ckb_Arab', 'goog.i18n.NumberFormatSymbols_ckb_Arab_IQ', 'goog.i18n.NumberFormatSymbols_ckb_Arab_IR', 'goog.i18n.NumberFormatSymbols_ckb_IQ', 'goog.i18n.NumberFormatSymbols_ckb_IR', 'goog.i18n.NumberFormatSymbols_ckb_Latn', 'goog.i18n.NumberFormatSymbols_ckb_Latn_IQ', 'goog.i18n.NumberFormatSymbols_dav', 'goog.i18n.NumberFormatSymbols_dav_KE', 'goog.i18n.NumberFormatSymbols_de_LI', 'goog.i18n.NumberFormatSymbols_dje', 'goog.i18n.NumberFormatSymbols_dje_NE', 'goog.i18n.NumberFormatSymbols_dsb', 'goog.i18n.NumberFormatSymbols_dsb_DE', 'goog.i18n.NumberFormatSymbols_dua', 'goog.i18n.NumberFormatSymbols_dua_CM', 'goog.i18n.NumberFormatSymbols_dyo', 'goog.i18n.NumberFormatSymbols_dyo_SN', 'goog.i18n.NumberFormatSymbols_dz', 'goog.i18n.NumberFormatSymbols_dz_BT', 'goog.i18n.NumberFormatSymbols_ebu', 'goog.i18n.NumberFormatSymbols_ebu_KE', 'goog.i18n.NumberFormatSymbols_ee', 'goog.i18n.NumberFormatSymbols_ee_GH', 'goog.i18n.NumberFormatSymbols_ee_TG', 'goog.i18n.NumberFormatSymbols_en_150', 'goog.i18n.NumberFormatSymbols_en_AG', 'goog.i18n.NumberFormatSymbols_en_AI', 'goog.i18n.NumberFormatSymbols_en_BB', 'goog.i18n.NumberFormatSymbols_en_BE', 'goog.i18n.NumberFormatSymbols_en_BM', 'goog.i18n.NumberFormatSymbols_en_BS', 'goog.i18n.NumberFormatSymbols_en_BW', 'goog.i18n.NumberFormatSymbols_en_BZ', 'goog.i18n.NumberFormatSymbols_en_CC', 'goog.i18n.NumberFormatSymbols_en_CK', 'goog.i18n.NumberFormatSymbols_en_CM', 'goog.i18n.NumberFormatSymbols_en_CX', 'goog.i18n.NumberFormatSymbols_en_DM', 'goog.i18n.NumberFormatSymbols_en_ER', 'goog.i18n.NumberFormatSymbols_en_FJ', 'goog.i18n.NumberFormatSymbols_en_FK', 'goog.i18n.NumberFormatSymbols_en_GD', 'goog.i18n.NumberFormatSymbols_en_GG', 'goog.i18n.NumberFormatSymbols_en_GH', 'goog.i18n.NumberFormatSymbols_en_GI', 'goog.i18n.NumberFormatSymbols_en_GM', 'goog.i18n.NumberFormatSymbols_en_GY', 'goog.i18n.NumberFormatSymbols_en_HK', 'goog.i18n.NumberFormatSymbols_en_IM', 'goog.i18n.NumberFormatSymbols_en_JE', 'goog.i18n.NumberFormatSymbols_en_JM', 'goog.i18n.NumberFormatSymbols_en_KE', 'goog.i18n.NumberFormatSymbols_en_KI', 'goog.i18n.NumberFormatSymbols_en_KN', 'goog.i18n.NumberFormatSymbols_en_KY', 'goog.i18n.NumberFormatSymbols_en_LC', 'goog.i18n.NumberFormatSymbols_en_LR', 'goog.i18n.NumberFormatSymbols_en_LS', 'goog.i18n.NumberFormatSymbols_en_MG', 'goog.i18n.NumberFormatSymbols_en_MO', 'goog.i18n.NumberFormatSymbols_en_MS', 'goog.i18n.NumberFormatSymbols_en_MT', 'goog.i18n.NumberFormatSymbols_en_MU', 'goog.i18n.NumberFormatSymbols_en_MW', 'goog.i18n.NumberFormatSymbols_en_MY', 'goog.i18n.NumberFormatSymbols_en_NA', 'goog.i18n.NumberFormatSymbols_en_NF', 'goog.i18n.NumberFormatSymbols_en_NG', 'goog.i18n.NumberFormatSymbols_en_NR', 'goog.i18n.NumberFormatSymbols_en_NU', 'goog.i18n.NumberFormatSymbols_en_NZ', 'goog.i18n.NumberFormatSymbols_en_PG', 'goog.i18n.NumberFormatSymbols_en_PH', 'goog.i18n.NumberFormatSymbols_en_PK', 'goog.i18n.NumberFormatSymbols_en_PN', 'goog.i18n.NumberFormatSymbols_en_RW', 'goog.i18n.NumberFormatSymbols_en_SB', 'goog.i18n.NumberFormatSymbols_en_SC', 'goog.i18n.NumberFormatSymbols_en_SD', 'goog.i18n.NumberFormatSymbols_en_SH', 'goog.i18n.NumberFormatSymbols_en_SL', 'goog.i18n.NumberFormatSymbols_en_SS', 'goog.i18n.NumberFormatSymbols_en_SX', 'goog.i18n.NumberFormatSymbols_en_SZ', 'goog.i18n.NumberFormatSymbols_en_TK', 'goog.i18n.NumberFormatSymbols_en_TO', 'goog.i18n.NumberFormatSymbols_en_TT', 'goog.i18n.NumberFormatSymbols_en_TV', 'goog.i18n.NumberFormatSymbols_en_TZ', 'goog.i18n.NumberFormatSymbols_en_UG', 'goog.i18n.NumberFormatSymbols_en_VC', 'goog.i18n.NumberFormatSymbols_en_VU', 'goog.i18n.NumberFormatSymbols_en_WS', 'goog.i18n.NumberFormatSymbols_en_ZM', 'goog.i18n.NumberFormatSymbols_eo', 'goog.i18n.NumberFormatSymbols_eo_001', 'goog.i18n.NumberFormatSymbols_es_AR', 'goog.i18n.NumberFormatSymbols_es_BO', 'goog.i18n.NumberFormatSymbols_es_CL', 'goog.i18n.NumberFormatSymbols_es_CO', 'goog.i18n.NumberFormatSymbols_es_CR', 'goog.i18n.NumberFormatSymbols_es_CU', 'goog.i18n.NumberFormatSymbols_es_DO', 'goog.i18n.NumberFormatSymbols_es_EC', 'goog.i18n.NumberFormatSymbols_es_GQ', 'goog.i18n.NumberFormatSymbols_es_GT', 'goog.i18n.NumberFormatSymbols_es_HN', 'goog.i18n.NumberFormatSymbols_es_NI', 'goog.i18n.NumberFormatSymbols_es_PA', 'goog.i18n.NumberFormatSymbols_es_PE', 'goog.i18n.NumberFormatSymbols_es_PH', 'goog.i18n.NumberFormatSymbols_es_PR', 'goog.i18n.NumberFormatSymbols_es_PY', 'goog.i18n.NumberFormatSymbols_es_SV', 'goog.i18n.NumberFormatSymbols_es_UY', 'goog.i18n.NumberFormatSymbols_es_VE', 'goog.i18n.NumberFormatSymbols_ewo', 'goog.i18n.NumberFormatSymbols_ewo_CM', 'goog.i18n.NumberFormatSymbols_fa_AF', 'goog.i18n.NumberFormatSymbols_ff', 'goog.i18n.NumberFormatSymbols_ff_CM', 'goog.i18n.NumberFormatSymbols_ff_GN', 'goog.i18n.NumberFormatSymbols_ff_MR', 'goog.i18n.NumberFormatSymbols_ff_SN', 'goog.i18n.NumberFormatSymbols_fo', 'goog.i18n.NumberFormatSymbols_fo_FO', 'goog.i18n.NumberFormatSymbols_fr_BE', 'goog.i18n.NumberFormatSymbols_fr_BF', 'goog.i18n.NumberFormatSymbols_fr_BI', 'goog.i18n.NumberFormatSymbols_fr_BJ', 'goog.i18n.NumberFormatSymbols_fr_CD', 'goog.i18n.NumberFormatSymbols_fr_CF', 'goog.i18n.NumberFormatSymbols_fr_CG', 'goog.i18n.NumberFormatSymbols_fr_CH', 'goog.i18n.NumberFormatSymbols_fr_CI', 'goog.i18n.NumberFormatSymbols_fr_CM', 'goog.i18n.NumberFormatSymbols_fr_DJ', 'goog.i18n.NumberFormatSymbols_fr_DZ', 'goog.i18n.NumberFormatSymbols_fr_GA', 'goog.i18n.NumberFormatSymbols_fr_GN', 'goog.i18n.NumberFormatSymbols_fr_GQ', 'goog.i18n.NumberFormatSymbols_fr_HT', 'goog.i18n.NumberFormatSymbols_fr_KM', 'goog.i18n.NumberFormatSymbols_fr_LU', 'goog.i18n.NumberFormatSymbols_fr_MA', 'goog.i18n.NumberFormatSymbols_fr_MG', 'goog.i18n.NumberFormatSymbols_fr_ML', 'goog.i18n.NumberFormatSymbols_fr_MR', 'goog.i18n.NumberFormatSymbols_fr_MU', 'goog.i18n.NumberFormatSymbols_fr_NC', 'goog.i18n.NumberFormatSymbols_fr_NE', 'goog.i18n.NumberFormatSymbols_fr_PF', 'goog.i18n.NumberFormatSymbols_fr_RW', 'goog.i18n.NumberFormatSymbols_fr_SC', 'goog.i18n.NumberFormatSymbols_fr_SN', 'goog.i18n.NumberFormatSymbols_fr_SY', 'goog.i18n.NumberFormatSymbols_fr_TD', 'goog.i18n.NumberFormatSymbols_fr_TG', 'goog.i18n.NumberFormatSymbols_fr_TN', 'goog.i18n.NumberFormatSymbols_fr_VU', 'goog.i18n.NumberFormatSymbols_fr_WF', 'goog.i18n.NumberFormatSymbols_fur', 'goog.i18n.NumberFormatSymbols_fur_IT', 'goog.i18n.NumberFormatSymbols_fy', 'goog.i18n.NumberFormatSymbols_fy_NL', 'goog.i18n.NumberFormatSymbols_gd', 'goog.i18n.NumberFormatSymbols_gd_GB', 'goog.i18n.NumberFormatSymbols_gsw_FR', 'goog.i18n.NumberFormatSymbols_guz', 'goog.i18n.NumberFormatSymbols_guz_KE', 'goog.i18n.NumberFormatSymbols_gv', 'goog.i18n.NumberFormatSymbols_gv_IM', 'goog.i18n.NumberFormatSymbols_ha', 'goog.i18n.NumberFormatSymbols_ha_Latn', 'goog.i18n.NumberFormatSymbols_ha_Latn_GH', 'goog.i18n.NumberFormatSymbols_ha_Latn_NE', 'goog.i18n.NumberFormatSymbols_ha_Latn_NG', 'goog.i18n.NumberFormatSymbols_hr_BA', 'goog.i18n.NumberFormatSymbols_hsb', 'goog.i18n.NumberFormatSymbols_hsb_DE', 'goog.i18n.NumberFormatSymbols_ig', 'goog.i18n.NumberFormatSymbols_ig_NG', 'goog.i18n.NumberFormatSymbols_ii', 'goog.i18n.NumberFormatSymbols_ii_CN', 'goog.i18n.NumberFormatSymbols_it_CH', 'goog.i18n.NumberFormatSymbols_jgo', 'goog.i18n.NumberFormatSymbols_jgo_CM', 'goog.i18n.NumberFormatSymbols_jmc', 'goog.i18n.NumberFormatSymbols_jmc_TZ', 'goog.i18n.NumberFormatSymbols_kab', 'goog.i18n.NumberFormatSymbols_kab_DZ', 'goog.i18n.NumberFormatSymbols_kam', 'goog.i18n.NumberFormatSymbols_kam_KE', 'goog.i18n.NumberFormatSymbols_kde', 'goog.i18n.NumberFormatSymbols_kde_TZ', 'goog.i18n.NumberFormatSymbols_kea', 'goog.i18n.NumberFormatSymbols_kea_CV', 'goog.i18n.NumberFormatSymbols_khq', 'goog.i18n.NumberFormatSymbols_khq_ML', 'goog.i18n.NumberFormatSymbols_ki', 'goog.i18n.NumberFormatSymbols_ki_KE', 'goog.i18n.NumberFormatSymbols_kkj', 'goog.i18n.NumberFormatSymbols_kkj_CM', 'goog.i18n.NumberFormatSymbols_kl', 'goog.i18n.NumberFormatSymbols_kl_GL', 'goog.i18n.NumberFormatSymbols_kln', 'goog.i18n.NumberFormatSymbols_kln_KE', 'goog.i18n.NumberFormatSymbols_ko_KP', 'goog.i18n.NumberFormatSymbols_kok', 'goog.i18n.NumberFormatSymbols_kok_IN', 'goog.i18n.NumberFormatSymbols_ks', 'goog.i18n.NumberFormatSymbols_ks_Arab', 'goog.i18n.NumberFormatSymbols_ks_Arab_IN', 'goog.i18n.NumberFormatSymbols_ksb', 'goog.i18n.NumberFormatSymbols_ksb_TZ', 'goog.i18n.NumberFormatSymbols_ksf', 'goog.i18n.NumberFormatSymbols_ksf_CM', 'goog.i18n.NumberFormatSymbols_ksh', 'goog.i18n.NumberFormatSymbols_ksh_DE', 'goog.i18n.NumberFormatSymbols_kw', 'goog.i18n.NumberFormatSymbols_kw_GB', 'goog.i18n.NumberFormatSymbols_lag', 'goog.i18n.NumberFormatSymbols_lag_TZ', 'goog.i18n.NumberFormatSymbols_lb', 'goog.i18n.NumberFormatSymbols_lb_LU', 'goog.i18n.NumberFormatSymbols_lg', 'goog.i18n.NumberFormatSymbols_lg_UG', 'goog.i18n.NumberFormatSymbols_lkt', 'goog.i18n.NumberFormatSymbols_lkt_US', 'goog.i18n.NumberFormatSymbols_ln_AO', 'goog.i18n.NumberFormatSymbols_ln_CF', 'goog.i18n.NumberFormatSymbols_ln_CG', 'goog.i18n.NumberFormatSymbols_lu', 'goog.i18n.NumberFormatSymbols_lu_CD', 'goog.i18n.NumberFormatSymbols_luo', 'goog.i18n.NumberFormatSymbols_luo_KE', 'goog.i18n.NumberFormatSymbols_luy', 'goog.i18n.NumberFormatSymbols_luy_KE', 'goog.i18n.NumberFormatSymbols_mas', 'goog.i18n.NumberFormatSymbols_mas_KE', 'goog.i18n.NumberFormatSymbols_mas_TZ', 'goog.i18n.NumberFormatSymbols_mer', 'goog.i18n.NumberFormatSymbols_mer_KE', 'goog.i18n.NumberFormatSymbols_mfe', 'goog.i18n.NumberFormatSymbols_mfe_MU', 'goog.i18n.NumberFormatSymbols_mg', 'goog.i18n.NumberFormatSymbols_mg_MG', 'goog.i18n.NumberFormatSymbols_mgh', 'goog.i18n.NumberFormatSymbols_mgh_MZ', 'goog.i18n.NumberFormatSymbols_mgo', 'goog.i18n.NumberFormatSymbols_mgo_CM', 'goog.i18n.NumberFormatSymbols_ms_Latn_BN', 'goog.i18n.NumberFormatSymbols_ms_Latn_SG', 'goog.i18n.NumberFormatSymbols_mua', 'goog.i18n.NumberFormatSymbols_mua_CM', 'goog.i18n.NumberFormatSymbols_naq', 'goog.i18n.NumberFormatSymbols_naq_NA', 'goog.i18n.NumberFormatSymbols_nd', 'goog.i18n.NumberFormatSymbols_nd_ZW', 'goog.i18n.NumberFormatSymbols_ne_IN', 'goog.i18n.NumberFormatSymbols_nl_AW', 'goog.i18n.NumberFormatSymbols_nl_BE', 'goog.i18n.NumberFormatSymbols_nl_BQ', 'goog.i18n.NumberFormatSymbols_nl_CW', 'goog.i18n.NumberFormatSymbols_nl_SR', 'goog.i18n.NumberFormatSymbols_nl_SX', 'goog.i18n.NumberFormatSymbols_nmg', 'goog.i18n.NumberFormatSymbols_nmg_CM', 'goog.i18n.NumberFormatSymbols_nn', 'goog.i18n.NumberFormatSymbols_nn_NO', 'goog.i18n.NumberFormatSymbols_nnh', 'goog.i18n.NumberFormatSymbols_nnh_CM', 'goog.i18n.NumberFormatSymbols_nus', 'goog.i18n.NumberFormatSymbols_nus_SD', 'goog.i18n.NumberFormatSymbols_nyn', 'goog.i18n.NumberFormatSymbols_nyn_UG', 'goog.i18n.NumberFormatSymbols_om', 'goog.i18n.NumberFormatSymbols_om_ET', 'goog.i18n.NumberFormatSymbols_om_KE', 'goog.i18n.NumberFormatSymbols_os', 'goog.i18n.NumberFormatSymbols_os_GE', 'goog.i18n.NumberFormatSymbols_os_RU', 'goog.i18n.NumberFormatSymbols_pa_Arab', 'goog.i18n.NumberFormatSymbols_pa_Arab_PK', 'goog.i18n.NumberFormatSymbols_ps', 'goog.i18n.NumberFormatSymbols_ps_AF', 'goog.i18n.NumberFormatSymbols_pt_AO', 'goog.i18n.NumberFormatSymbols_pt_CV', 'goog.i18n.NumberFormatSymbols_pt_GW', 'goog.i18n.NumberFormatSymbols_pt_MO', 'goog.i18n.NumberFormatSymbols_pt_MZ', 'goog.i18n.NumberFormatSymbols_pt_ST', 'goog.i18n.NumberFormatSymbols_pt_TL', 'goog.i18n.NumberFormatSymbols_qu', 'goog.i18n.NumberFormatSymbols_qu_BO', 'goog.i18n.NumberFormatSymbols_qu_EC', 'goog.i18n.NumberFormatSymbols_qu_PE', 'goog.i18n.NumberFormatSymbols_rm', 'goog.i18n.NumberFormatSymbols_rm_CH', 'goog.i18n.NumberFormatSymbols_rn', 'goog.i18n.NumberFormatSymbols_rn_BI', 'goog.i18n.NumberFormatSymbols_ro_MD', 'goog.i18n.NumberFormatSymbols_rof', 'goog.i18n.NumberFormatSymbols_rof_TZ', 'goog.i18n.NumberFormatSymbols_ru_BY', 'goog.i18n.NumberFormatSymbols_ru_KG', 'goog.i18n.NumberFormatSymbols_ru_KZ', 'goog.i18n.NumberFormatSymbols_ru_MD', 'goog.i18n.NumberFormatSymbols_ru_UA', 'goog.i18n.NumberFormatSymbols_rw', 'goog.i18n.NumberFormatSymbols_rw_RW', 'goog.i18n.NumberFormatSymbols_rwk', 'goog.i18n.NumberFormatSymbols_rwk_TZ', 'goog.i18n.NumberFormatSymbols_sah', 'goog.i18n.NumberFormatSymbols_sah_RU', 'goog.i18n.NumberFormatSymbols_saq', 'goog.i18n.NumberFormatSymbols_saq_KE', 'goog.i18n.NumberFormatSymbols_sbp', 'goog.i18n.NumberFormatSymbols_sbp_TZ', 'goog.i18n.NumberFormatSymbols_se', 'goog.i18n.NumberFormatSymbols_se_FI', 'goog.i18n.NumberFormatSymbols_se_NO', 'goog.i18n.NumberFormatSymbols_se_SE', 'goog.i18n.NumberFormatSymbols_seh', 'goog.i18n.NumberFormatSymbols_seh_MZ', 'goog.i18n.NumberFormatSymbols_ses', 'goog.i18n.NumberFormatSymbols_ses_ML', 'goog.i18n.NumberFormatSymbols_sg', 'goog.i18n.NumberFormatSymbols_sg_CF', 'goog.i18n.NumberFormatSymbols_shi', 'goog.i18n.NumberFormatSymbols_shi_Latn', 'goog.i18n.NumberFormatSymbols_shi_Latn_MA', 'goog.i18n.NumberFormatSymbols_shi_Tfng', 'goog.i18n.NumberFormatSymbols_shi_Tfng_MA', 'goog.i18n.NumberFormatSymbols_smn', 'goog.i18n.NumberFormatSymbols_smn_FI', 'goog.i18n.NumberFormatSymbols_sn', 'goog.i18n.NumberFormatSymbols_sn_ZW', 'goog.i18n.NumberFormatSymbols_so', 'goog.i18n.NumberFormatSymbols_so_DJ', 'goog.i18n.NumberFormatSymbols_so_ET', 'goog.i18n.NumberFormatSymbols_so_KE', 'goog.i18n.NumberFormatSymbols_so_SO', 'goog.i18n.NumberFormatSymbols_sq_MK', 'goog.i18n.NumberFormatSymbols_sq_XK', 'goog.i18n.NumberFormatSymbols_sr_Cyrl_BA', 'goog.i18n.NumberFormatSymbols_sr_Cyrl_ME', 'goog.i18n.NumberFormatSymbols_sr_Cyrl_XK', 'goog.i18n.NumberFormatSymbols_sr_Latn_BA', 'goog.i18n.NumberFormatSymbols_sr_Latn_ME', 'goog.i18n.NumberFormatSymbols_sr_Latn_XK', 'goog.i18n.NumberFormatSymbols_sv_AX', 'goog.i18n.NumberFormatSymbols_sv_FI', 'goog.i18n.NumberFormatSymbols_sw_CD', 'goog.i18n.NumberFormatSymbols_sw_KE', 'goog.i18n.NumberFormatSymbols_sw_UG', 'goog.i18n.NumberFormatSymbols_ta_LK', 'goog.i18n.NumberFormatSymbols_ta_MY', 'goog.i18n.NumberFormatSymbols_ta_SG', 'goog.i18n.NumberFormatSymbols_teo', 'goog.i18n.NumberFormatSymbols_teo_KE', 'goog.i18n.NumberFormatSymbols_teo_UG', 'goog.i18n.NumberFormatSymbols_ti', 'goog.i18n.NumberFormatSymbols_ti_ER', 'goog.i18n.NumberFormatSymbols_ti_ET', 'goog.i18n.NumberFormatSymbols_to', 'goog.i18n.NumberFormatSymbols_to_TO', 'goog.i18n.NumberFormatSymbols_tr_CY', 'goog.i18n.NumberFormatSymbols_twq', 'goog.i18n.NumberFormatSymbols_twq_NE', 'goog.i18n.NumberFormatSymbols_tzm', 'goog.i18n.NumberFormatSymbols_tzm_Latn', 'goog.i18n.NumberFormatSymbols_tzm_Latn_MA', 'goog.i18n.NumberFormatSymbols_ug', 'goog.i18n.NumberFormatSymbols_ug_Arab', 'goog.i18n.NumberFormatSymbols_ug_Arab_CN', 'goog.i18n.NumberFormatSymbols_ur_IN', 'goog.i18n.NumberFormatSymbols_uz_Arab', 'goog.i18n.NumberFormatSymbols_uz_Arab_AF', 'goog.i18n.NumberFormatSymbols_uz_Cyrl', 'goog.i18n.NumberFormatSymbols_uz_Cyrl_UZ', 'goog.i18n.NumberFormatSymbols_vai', 'goog.i18n.NumberFormatSymbols_vai_Latn', 'goog.i18n.NumberFormatSymbols_vai_Latn_LR', 'goog.i18n.NumberFormatSymbols_vai_Vaii', 'goog.i18n.NumberFormatSymbols_vai_Vaii_LR', 'goog.i18n.NumberFormatSymbols_vun', 'goog.i18n.NumberFormatSymbols_vun_TZ', 'goog.i18n.NumberFormatSymbols_wae', 'goog.i18n.NumberFormatSymbols_wae_CH', 'goog.i18n.NumberFormatSymbols_xog', 'goog.i18n.NumberFormatSymbols_xog_UG', 'goog.i18n.NumberFormatSymbols_yav', 'goog.i18n.NumberFormatSymbols_yav_CM', 'goog.i18n.NumberFormatSymbols_yi', 'goog.i18n.NumberFormatSymbols_yi_001', 'goog.i18n.NumberFormatSymbols_yo', 'goog.i18n.NumberFormatSymbols_yo_BJ', 'goog.i18n.NumberFormatSymbols_yo_NG', 'goog.i18n.NumberFormatSymbols_zgh', 'goog.i18n.NumberFormatSymbols_zgh_MA', 'goog.i18n.NumberFormatSymbols_zh_Hans_HK', 'goog.i18n.NumberFormatSymbols_zh_Hans_MO', 'goog.i18n.NumberFormatSymbols_zh_Hans_SG', 'goog.i18n.NumberFormatSymbols_zh_Hant', 'goog.i18n.NumberFormatSymbols_zh_Hant_HK', 'goog.i18n.NumberFormatSymbols_zh_Hant_MO', 'goog.i18n.NumberFormatSymbols_zh_Hant_TW'], ['goog.i18n.NumberFormatSymbols'], false);\ngoog.addDependency('i18n/ordinalrules.js', ['goog.i18n.ordinalRules'], [], false);\ngoog.addDependency('i18n/pluralrules.js', ['goog.i18n.pluralRules'], [], false);\ngoog.addDependency('i18n/pluralrules_test.js', ['goog.i18n.pluralRulesTest'], ['goog.i18n.pluralRules', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/timezone.js', ['goog.i18n.TimeZone'], ['goog.array', 'goog.date.DateLike', 'goog.object', 'goog.string'], false);\ngoog.addDependency('i18n/timezone_test.js', ['goog.i18n.TimeZoneTest'], ['goog.i18n.TimeZone', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/uchar.js', ['goog.i18n.uChar'], [], false);\ngoog.addDependency('i18n/uchar/localnamefetcher.js', ['goog.i18n.uChar.LocalNameFetcher'], ['goog.i18n.uChar.NameFetcher', 'goog.i18n.uCharNames', 'goog.log'], false);\ngoog.addDependency('i18n/uchar/localnamefetcher_test.js', ['goog.i18n.uChar.LocalNameFetcherTest'], ['goog.i18n.uChar.LocalNameFetcher', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('i18n/uchar/namefetcher.js', ['goog.i18n.uChar.NameFetcher'], [], false);\ngoog.addDependency('i18n/uchar/remotenamefetcher.js', ['goog.i18n.uChar.RemoteNameFetcher'], ['goog.Disposable', 'goog.Uri', 'goog.i18n.uChar', 'goog.i18n.uChar.NameFetcher', 'goog.log', 'goog.net.XhrIo', 'goog.structs.Map'], false);\ngoog.addDependency('i18n/uchar/remotenamefetcher_test.js', ['goog.i18n.uChar.RemoteNameFetcherTest'], ['goog.i18n.uChar.RemoteNameFetcher', 'goog.net.XhrIo', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.testing.recordFunction'], false);\ngoog.addDependency('i18n/uchar_test.js', ['goog.i18n.uCharTest'], ['goog.i18n.uChar', 'goog.testing.jsunit'], false);\ngoog.addDependency('i18n/ucharnames.js', ['goog.i18n.uCharNames'], ['goog.i18n.uChar'], false);\ngoog.addDependency('i18n/ucharnames_test.js', ['goog.i18n.uCharNamesTest'], ['goog.i18n.uCharNames', 'goog.testing.jsunit'], false);\ngoog.addDependency('iter/iter.js', ['goog.iter', 'goog.iter.Iterable', 'goog.iter.Iterator', 'goog.iter.StopIteration'], ['goog.array', 'goog.asserts', 'goog.functions', 'goog.math'], false);\ngoog.addDependency('iter/iter_test.js', ['goog.iterTest'], ['goog.iter', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.testing.jsunit'], false);\ngoog.addDependency('json/evaljsonprocessor.js', ['goog.json.EvalJsonProcessor'], ['goog.json', 'goog.json.Processor', 'goog.json.Serializer'], false);\ngoog.addDependency('json/hybrid.js', ['goog.json.hybrid'], ['goog.asserts', 'goog.json'], false);\ngoog.addDependency('json/hybrid_test.js', ['goog.json.hybridTest'], ['goog.json', 'goog.json.hybrid', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('json/hybridjsonprocessor.js', ['goog.json.HybridJsonProcessor'], ['goog.json.Processor', 'goog.json.hybrid'], false);\ngoog.addDependency('json/hybridjsonprocessor_test.js', ['goog.json.HybridJsonProcessorTest'], ['goog.json.HybridJsonProcessor', 'goog.json.hybrid', 'goog.testing.jsunit'], false);\ngoog.addDependency('json/json.js', ['goog.json', 'goog.json.Replacer', 'goog.json.Reviver', 'goog.json.Serializer'], [], false);\ngoog.addDependency('json/json_perf.js', ['goog.jsonPerf'], ['goog.dom', 'goog.json', 'goog.math', 'goog.string', 'goog.testing.PerformanceTable', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('json/json_test.js', ['goog.jsonTest'], ['goog.functions', 'goog.json', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('json/nativejsonprocessor.js', ['goog.json.NativeJsonProcessor'], ['goog.asserts', 'goog.json.Processor'], false);\ngoog.addDependency('json/processor.js', ['goog.json.Processor'], ['goog.string.Parser', 'goog.string.Stringifier'], false);\ngoog.addDependency('json/processor_test.js', ['goog.json.processorTest'], ['goog.json.EvalJsonProcessor', 'goog.json.NativeJsonProcessor', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('labs/dom/pagevisibilitymonitor.js', ['goog.labs.dom.PageVisibilityEvent', 'goog.labs.dom.PageVisibilityMonitor', 'goog.labs.dom.PageVisibilityState'], ['goog.dom', 'goog.dom.vendor', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.memoize'], false);\ngoog.addDependency('labs/dom/pagevisibilitymonitor_test.js', ['goog.labs.dom.PageVisibilityMonitorTest'], ['goog.events', 'goog.functions', 'goog.labs.dom.PageVisibilityMonitor', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('labs/events/nondisposableeventtarget.js', ['goog.labs.events.NonDisposableEventTarget'], ['goog.array', 'goog.asserts', 'goog.events.Event', 'goog.events.Listenable', 'goog.events.ListenerMap', 'goog.object'], false);\ngoog.addDependency('labs/events/nondisposableeventtarget_test.js', ['goog.labs.events.NonDisposableEventTargetTest'], ['goog.events.Listenable', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.labs.events.NonDisposableEventTarget', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/events/nondisposableeventtarget_via_googevents_test.js', ['goog.labs.events.NonDisposableEventTargetGoogEventsTest'], ['goog.events', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.labs.events.NonDisposableEventTarget', 'goog.testing', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/events/touch.js', ['goog.labs.events.touch', 'goog.labs.events.touch.TouchData'], ['goog.array', 'goog.asserts', 'goog.events.EventType', 'goog.string'], false);\ngoog.addDependency('labs/events/touch_test.js', ['goog.labs.events.touchTest'], ['goog.labs.events.touch', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/format/csv.js', ['goog.labs.format.csv', 'goog.labs.format.csv.ParseError', 'goog.labs.format.csv.Token'], ['goog.array', 'goog.asserts', 'goog.debug.Error', 'goog.object', 'goog.string', 'goog.string.newlines'], false);\ngoog.addDependency('labs/format/csv_test.js', ['goog.labs.format.csvTest'], ['goog.labs.format.csv', 'goog.labs.format.csv.ParseError', 'goog.object', 'goog.testing.asserts', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/html/attribute_rewriter.js', ['goog.labs.html.AttributeRewriter', 'goog.labs.html.AttributeValue', 'goog.labs.html.attributeRewriterPresubmitWorkaround'], [], false);\ngoog.addDependency('labs/html/sanitizer.js', ['goog.labs.html.Sanitizer'], ['goog.asserts', 'goog.html.SafeUrl', 'goog.labs.html.attributeRewriterPresubmitWorkaround', 'goog.labs.html.scrubber', 'goog.object', 'goog.string'], false);\ngoog.addDependency('labs/html/sanitizer_test.js', ['goog.labs.html.SanitizerTest'], ['goog.html.SafeUrl', 'goog.labs.html.Sanitizer', 'goog.string', 'goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/html/scrubber.js', ['goog.labs.html.scrubber'], ['goog.array', 'goog.dom.tags', 'goog.labs.html.attributeRewriterPresubmitWorkaround', 'goog.string'], false);\ngoog.addDependency('labs/html/scrubber_test.js', ['goog.html.ScrubberTest'], ['goog.labs.html.scrubber', 'goog.object', 'goog.string', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/i18n/listformat.js', ['goog.labs.i18n.GenderInfo', 'goog.labs.i18n.GenderInfo.Gender', 'goog.labs.i18n.ListFormat'], ['goog.asserts', 'goog.labs.i18n.ListFormatSymbols'], false);\ngoog.addDependency('labs/i18n/listformat_test.js', ['goog.labs.i18n.ListFormatTest'], ['goog.labs.i18n.GenderInfo', 'goog.labs.i18n.ListFormat', 'goog.labs.i18n.ListFormatSymbols', 'goog.labs.i18n.ListFormatSymbols_el', 'goog.labs.i18n.ListFormatSymbols_en', 'goog.labs.i18n.ListFormatSymbols_fr', 'goog.labs.i18n.ListFormatSymbols_ml', 'goog.labs.i18n.ListFormatSymbols_zu', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/i18n/listsymbols.js', ['goog.labs.i18n.ListFormatSymbols', 'goog.labs.i18n.ListFormatSymbols_af', 'goog.labs.i18n.ListFormatSymbols_am', 'goog.labs.i18n.ListFormatSymbols_ar', 'goog.labs.i18n.ListFormatSymbols_az', 'goog.labs.i18n.ListFormatSymbols_be', 'goog.labs.i18n.ListFormatSymbols_bg', 'goog.labs.i18n.ListFormatSymbols_bn', 'goog.labs.i18n.ListFormatSymbols_br', 'goog.labs.i18n.ListFormatSymbols_bs', 'goog.labs.i18n.ListFormatSymbols_ca', 'goog.labs.i18n.ListFormatSymbols_chr', 'goog.labs.i18n.ListFormatSymbols_cs', 'goog.labs.i18n.ListFormatSymbols_cy', 'goog.labs.i18n.ListFormatSymbols_da', 'goog.labs.i18n.ListFormatSymbols_de', 'goog.labs.i18n.ListFormatSymbols_de_AT', 'goog.labs.i18n.ListFormatSymbols_de_CH', 'goog.labs.i18n.ListFormatSymbols_el', 'goog.labs.i18n.ListFormatSymbols_en', 'goog.labs.i18n.ListFormatSymbols_en_AU', 'goog.labs.i18n.ListFormatSymbols_en_CA', 'goog.labs.i18n.ListFormatSymbols_en_GB', 'goog.labs.i18n.ListFormatSymbols_en_IE', 'goog.labs.i18n.ListFormatSymbols_en_IN', 'goog.labs.i18n.ListFormatSymbols_en_SG', 'goog.labs.i18n.ListFormatSymbols_en_US', 'goog.labs.i18n.ListFormatSymbols_en_ZA', 'goog.labs.i18n.ListFormatSymbols_es', 'goog.labs.i18n.ListFormatSymbols_es_419', 'goog.labs.i18n.ListFormatSymbols_es_ES', 'goog.labs.i18n.ListFormatSymbols_es_MX', 'goog.labs.i18n.ListFormatSymbols_es_US', 'goog.labs.i18n.ListFormatSymbols_et', 'goog.labs.i18n.ListFormatSymbols_eu', 'goog.labs.i18n.ListFormatSymbols_fa', 'goog.labs.i18n.ListFormatSymbols_fi', 'goog.labs.i18n.ListFormatSymbols_fil', 'goog.labs.i18n.ListFormatSymbols_fr', 'goog.labs.i18n.ListFormatSymbols_fr_CA', 'goog.labs.i18n.ListFormatSymbols_ga', 'goog.labs.i18n.ListFormatSymbols_gl', 'goog.labs.i18n.ListFormatSymbols_gsw', 'goog.labs.i18n.ListFormatSymbols_gu', 'goog.labs.i18n.ListFormatSymbols_haw', 'goog.labs.i18n.ListFormatSymbols_he', 'goog.labs.i18n.ListFormatSymbols_hi', 'goog.labs.i18n.ListFormatSymbols_hr', 'goog.labs.i18n.ListFormatSymbols_hu', 'goog.labs.i18n.ListFormatSymbols_hy', 'goog.labs.i18n.ListFormatSymbols_id', 'goog.labs.i18n.ListFormatSymbols_in', 'goog.labs.i18n.ListFormatSymbols_is', 'goog.labs.i18n.ListFormatSymbols_it', 'goog.labs.i18n.ListFormatSymbols_iw', 'goog.labs.i18n.ListFormatSymbols_ja', 'goog.labs.i18n.ListFormatSymbols_ka', 'goog.labs.i18n.ListFormatSymbols_kk', 'goog.labs.i18n.ListFormatSymbols_km', 'goog.labs.i18n.ListFormatSymbols_kn', 'goog.labs.i18n.ListFormatSymbols_ko', 'goog.labs.i18n.ListFormatSymbols_ky', 'goog.labs.i18n.ListFormatSymbols_ln', 'goog.labs.i18n.ListFormatSymbols_lo', 'goog.labs.i18n.ListFormatSymbols_lt', 'goog.labs.i18n.ListFormatSymbols_lv', 'goog.labs.i18n.ListFormatSymbols_mk', 'goog.labs.i18n.ListFormatSymbols_ml', 'goog.labs.i18n.ListFormatSymbols_mn', 'goog.labs.i18n.ListFormatSymbols_mo', 'goog.labs.i18n.ListFormatSymbols_mr', 'goog.labs.i18n.ListFormatSymbols_ms', 'goog.labs.i18n.ListFormatSymbols_mt', 'goog.labs.i18n.ListFormatSymbols_my', 'goog.labs.i18n.ListFormatSymbols_nb', 'goog.labs.i18n.ListFormatSymbols_ne', 'goog.labs.i18n.ListFormatSymbols_nl', 'goog.labs.i18n.ListFormatSymbols_no', 'goog.labs.i18n.ListFormatSymbols_no_NO', 'goog.labs.i18n.ListFormatSymbols_or', 'goog.labs.i18n.ListFormatSymbols_pa', 'goog.labs.i18n.ListFormatSymbols_pl', 'goog.labs.i18n.ListFormatSymbols_pt', 'goog.labs.i18n.ListFormatSymbols_pt_BR', 'goog.labs.i18n.ListFormatSymbols_pt_PT', 'goog.labs.i18n.ListFormatSymbols_ro', 'goog.labs.i18n.ListFormatSymbols_ru', 'goog.labs.i18n.ListFormatSymbols_sh', 'goog.labs.i18n.ListFormatSymbols_si', 'goog.labs.i18n.ListFormatSymbols_sk', 'goog.labs.i18n.ListFormatSymbols_sl', 'goog.labs.i18n.ListFormatSymbols_sq', 'goog.labs.i18n.ListFormatSymbols_sr', 'goog.labs.i18n.ListFormatSymbols_sr_Latn', 'goog.labs.i18n.ListFormatSymbols_sv', 'goog.labs.i18n.ListFormatSymbols_sw', 'goog.labs.i18n.ListFormatSymbols_ta', 'goog.labs.i18n.ListFormatSymbols_te', 'goog.labs.i18n.ListFormatSymbols_th', 'goog.labs.i18n.ListFormatSymbols_tl', 'goog.labs.i18n.ListFormatSymbols_tr', 'goog.labs.i18n.ListFormatSymbols_uk', 'goog.labs.i18n.ListFormatSymbols_ur', 'goog.labs.i18n.ListFormatSymbols_uz', 'goog.labs.i18n.ListFormatSymbols_vi', 'goog.labs.i18n.ListFormatSymbols_zh', 'goog.labs.i18n.ListFormatSymbols_zh_CN', 'goog.labs.i18n.ListFormatSymbols_zh_HK', 'goog.labs.i18n.ListFormatSymbols_zh_TW', 'goog.labs.i18n.ListFormatSymbols_zu'], [], false);\ngoog.addDependency('labs/i18n/listsymbolsext.js', ['goog.labs.i18n.ListFormatSymbolsExt', 'goog.labs.i18n.ListFormatSymbols_af_NA', 'goog.labs.i18n.ListFormatSymbols_af_ZA', 'goog.labs.i18n.ListFormatSymbols_agq', 'goog.labs.i18n.ListFormatSymbols_agq_CM', 'goog.labs.i18n.ListFormatSymbols_ak', 'goog.labs.i18n.ListFormatSymbols_ak_GH', 'goog.labs.i18n.ListFormatSymbols_am_ET', 'goog.labs.i18n.ListFormatSymbols_ar_001', 'goog.labs.i18n.ListFormatSymbols_ar_AE', 'goog.labs.i18n.ListFormatSymbols_ar_BH', 'goog.labs.i18n.ListFormatSymbols_ar_DJ', 'goog.labs.i18n.ListFormatSymbols_ar_DZ', 'goog.labs.i18n.ListFormatSymbols_ar_EG', 'goog.labs.i18n.ListFormatSymbols_ar_EH', 'goog.labs.i18n.ListFormatSymbols_ar_ER', 'goog.labs.i18n.ListFormatSymbols_ar_IL', 'goog.labs.i18n.ListFormatSymbols_ar_IQ', 'goog.labs.i18n.ListFormatSymbols_ar_JO', 'goog.labs.i18n.ListFormatSymbols_ar_KM', 'goog.labs.i18n.ListFormatSymbols_ar_KW', 'goog.labs.i18n.ListFormatSymbols_ar_LB', 'goog.labs.i18n.ListFormatSymbols_ar_LY', 'goog.labs.i18n.ListFormatSymbols_ar_MA', 'goog.labs.i18n.ListFormatSymbols_ar_MR', 'goog.labs.i18n.ListFormatSymbols_ar_OM', 'goog.labs.i18n.ListFormatSymbols_ar_PS', 'goog.labs.i18n.ListFormatSymbols_ar_QA', 'goog.labs.i18n.ListFormatSymbols_ar_SA', 'goog.labs.i18n.ListFormatSymbols_ar_SD', 'goog.labs.i18n.ListFormatSymbols_ar_SO', 'goog.labs.i18n.ListFormatSymbols_ar_SS', 'goog.labs.i18n.ListFormatSymbols_ar_SY', 'goog.labs.i18n.ListFormatSymbols_ar_TD', 'goog.labs.i18n.ListFormatSymbols_ar_TN', 'goog.labs.i18n.ListFormatSymbols_ar_YE', 'goog.labs.i18n.ListFormatSymbols_as', 'goog.labs.i18n.ListFormatSymbols_as_IN', 'goog.labs.i18n.ListFormatSymbols_asa', 'goog.labs.i18n.ListFormatSymbols_asa_TZ', 'goog.labs.i18n.ListFormatSymbols_az_Cyrl', 'goog.labs.i18n.ListFormatSymbols_az_Cyrl_AZ', 'goog.labs.i18n.ListFormatSymbols_az_Latn', 'goog.labs.i18n.ListFormatSymbols_az_Latn_AZ', 'goog.labs.i18n.ListFormatSymbols_bas', 'goog.labs.i18n.ListFormatSymbols_bas_CM', 'goog.labs.i18n.ListFormatSymbols_be_BY', 'goog.labs.i18n.ListFormatSymbols_bem', 'goog.labs.i18n.ListFormatSymbols_bem_ZM', 'goog.labs.i18n.ListFormatSymbols_bez', 'goog.labs.i18n.ListFormatSymbols_bez_TZ', 'goog.labs.i18n.ListFormatSymbols_bg_BG', 'goog.labs.i18n.ListFormatSymbols_bm', 'goog.labs.i18n.ListFormatSymbols_bm_Latn', 'goog.labs.i18n.ListFormatSymbols_bm_Latn_ML', 'goog.labs.i18n.ListFormatSymbols_bn_BD', 'goog.labs.i18n.ListFormatSymbols_bn_IN', 'goog.labs.i18n.ListFormatSymbols_bo', 'goog.labs.i18n.ListFormatSymbols_bo_CN', 'goog.labs.i18n.ListFormatSymbols_bo_IN', 'goog.labs.i18n.ListFormatSymbols_br_FR', 'goog.labs.i18n.ListFormatSymbols_brx', 'goog.labs.i18n.ListFormatSymbols_brx_IN', 'goog.labs.i18n.ListFormatSymbols_bs_Cyrl', 'goog.labs.i18n.ListFormatSymbols_bs_Cyrl_BA', 'goog.labs.i18n.ListFormatSymbols_bs_Latn', 'goog.labs.i18n.ListFormatSymbols_bs_Latn_BA', 'goog.labs.i18n.ListFormatSymbols_ca_AD', 'goog.labs.i18n.ListFormatSymbols_ca_ES', 'goog.labs.i18n.ListFormatSymbols_ca_FR', 'goog.labs.i18n.ListFormatSymbols_ca_IT', 'goog.labs.i18n.ListFormatSymbols_cgg', 'goog.labs.i18n.ListFormatSymbols_cgg_UG', 'goog.labs.i18n.ListFormatSymbols_chr_US', 'goog.labs.i18n.ListFormatSymbols_cs_CZ', 'goog.labs.i18n.ListFormatSymbols_cy_GB', 'goog.labs.i18n.ListFormatSymbols_da_DK', 'goog.labs.i18n.ListFormatSymbols_da_GL', 'goog.labs.i18n.ListFormatSymbols_dav', 'goog.labs.i18n.ListFormatSymbols_dav_KE', 'goog.labs.i18n.ListFormatSymbols_de_BE', 'goog.labs.i18n.ListFormatSymbols_de_DE', 'goog.labs.i18n.ListFormatSymbols_de_LI', 'goog.labs.i18n.ListFormatSymbols_de_LU', 'goog.labs.i18n.ListFormatSymbols_dje', 'goog.labs.i18n.ListFormatSymbols_dje_NE', 'goog.labs.i18n.ListFormatSymbols_dsb', 'goog.labs.i18n.ListFormatSymbols_dsb_DE', 'goog.labs.i18n.ListFormatSymbols_dua', 'goog.labs.i18n.ListFormatSymbols_dua_CM', 'goog.labs.i18n.ListFormatSymbols_dyo', 'goog.labs.i18n.ListFormatSymbols_dyo_SN', 'goog.labs.i18n.ListFormatSymbols_dz', 'goog.labs.i18n.ListFormatSymbols_dz_BT', 'goog.labs.i18n.ListFormatSymbols_ebu', 'goog.labs.i18n.ListFormatSymbols_ebu_KE', 'goog.labs.i18n.ListFormatSymbols_ee', 'goog.labs.i18n.ListFormatSymbols_ee_GH', 'goog.labs.i18n.ListFormatSymbols_ee_TG', 'goog.labs.i18n.ListFormatSymbols_el_CY', 'goog.labs.i18n.ListFormatSymbols_el_GR', 'goog.labs.i18n.ListFormatSymbols_en_001', 'goog.labs.i18n.ListFormatSymbols_en_150', 'goog.labs.i18n.ListFormatSymbols_en_AG', 'goog.labs.i18n.ListFormatSymbols_en_AI', 'goog.labs.i18n.ListFormatSymbols_en_AS', 'goog.labs.i18n.ListFormatSymbols_en_BB', 'goog.labs.i18n.ListFormatSymbols_en_BE', 'goog.labs.i18n.ListFormatSymbols_en_BM', 'goog.labs.i18n.ListFormatSymbols_en_BS', 'goog.labs.i18n.ListFormatSymbols_en_BW', 'goog.labs.i18n.ListFormatSymbols_en_BZ', 'goog.labs.i18n.ListFormatSymbols_en_CC', 'goog.labs.i18n.ListFormatSymbols_en_CK', 'goog.labs.i18n.ListFormatSymbols_en_CM', 'goog.labs.i18n.ListFormatSymbols_en_CX', 'goog.labs.i18n.ListFormatSymbols_en_DG', 'goog.labs.i18n.ListFormatSymbols_en_DM', 'goog.labs.i18n.ListFormatSymbols_en_ER', 'goog.labs.i18n.ListFormatSymbols_en_FJ', 'goog.labs.i18n.ListFormatSymbols_en_FK', 'goog.labs.i18n.ListFormatSymbols_en_FM', 'goog.labs.i18n.ListFormatSymbols_en_GD', 'goog.labs.i18n.ListFormatSymbols_en_GG', 'goog.labs.i18n.ListFormatSymbols_en_GH', 'goog.labs.i18n.ListFormatSymbols_en_GI', 'goog.labs.i18n.ListFormatSymbols_en_GM', 'goog.labs.i18n.ListFormatSymbols_en_GU', 'goog.labs.i18n.ListFormatSymbols_en_GY', 'goog.labs.i18n.ListFormatSymbols_en_HK', 'goog.labs.i18n.ListFormatSymbols_en_IM', 'goog.labs.i18n.ListFormatSymbols_en_IO', 'goog.labs.i18n.ListFormatSymbols_en_JE', 'goog.labs.i18n.ListFormatSymbols_en_JM', 'goog.labs.i18n.ListFormatSymbols_en_KE', 'goog.labs.i18n.ListFormatSymbols_en_KI', 'goog.labs.i18n.ListFormatSymbols_en_KN', 'goog.labs.i18n.ListFormatSymbols_en_KY', 'goog.labs.i18n.ListFormatSymbols_en_LC', 'goog.labs.i18n.ListFormatSymbols_en_LR', 'goog.labs.i18n.ListFormatSymbols_en_LS', 'goog.labs.i18n.ListFormatSymbols_en_MG', 'goog.labs.i18n.ListFormatSymbols_en_MH', 'goog.labs.i18n.ListFormatSymbols_en_MO', 'goog.labs.i18n.ListFormatSymbols_en_MP', 'goog.labs.i18n.ListFormatSymbols_en_MS', 'goog.labs.i18n.ListFormatSymbols_en_MT', 'goog.labs.i18n.ListFormatSymbols_en_MU', 'goog.labs.i18n.ListFormatSymbols_en_MW', 'goog.labs.i18n.ListFormatSymbols_en_MY', 'goog.labs.i18n.ListFormatSymbols_en_NA', 'goog.labs.i18n.ListFormatSymbols_en_NF', 'goog.labs.i18n.ListFormatSymbols_en_NG', 'goog.labs.i18n.ListFormatSymbols_en_NR', 'goog.labs.i18n.ListFormatSymbols_en_NU', 'goog.labs.i18n.ListFormatSymbols_en_NZ', 'goog.labs.i18n.ListFormatSymbols_en_PG', 'goog.labs.i18n.ListFormatSymbols_en_PH', 'goog.labs.i18n.ListFormatSymbols_en_PK', 'goog.labs.i18n.ListFormatSymbols_en_PN', 'goog.labs.i18n.ListFormatSymbols_en_PR', 'goog.labs.i18n.ListFormatSymbols_en_PW', 'goog.labs.i18n.ListFormatSymbols_en_RW', 'goog.labs.i18n.ListFormatSymbols_en_SB', 'goog.labs.i18n.ListFormatSymbols_en_SC', 'goog.labs.i18n.ListFormatSymbols_en_SD', 'goog.labs.i18n.ListFormatSymbols_en_SH', 'goog.labs.i18n.ListFormatSymbols_en_SL', 'goog.labs.i18n.ListFormatSymbols_en_SS', 'goog.labs.i18n.ListFormatSymbols_en_SX', 'goog.labs.i18n.ListFormatSymbols_en_SZ', 'goog.labs.i18n.ListFormatSymbols_en_TC', 'goog.labs.i18n.ListFormatSymbols_en_TK', 'goog.labs.i18n.ListFormatSymbols_en_TO', 'goog.labs.i18n.ListFormatSymbols_en_TT', 'goog.labs.i18n.ListFormatSymbols_en_TV', 'goog.labs.i18n.ListFormatSymbols_en_TZ', 'goog.labs.i18n.ListFormatSymbols_en_UG', 'goog.labs.i18n.ListFormatSymbols_en_UM', 'goog.labs.i18n.ListFormatSymbols_en_US_POSIX', 'goog.labs.i18n.ListFormatSymbols_en_VC', 'goog.labs.i18n.ListFormatSymbols_en_VG', 'goog.labs.i18n.ListFormatSymbols_en_VI', 'goog.labs.i18n.ListFormatSymbols_en_VU', 'goog.labs.i18n.ListFormatSymbols_en_WS', 'goog.labs.i18n.ListFormatSymbols_en_ZM', 'goog.labs.i18n.ListFormatSymbols_en_ZW', 'goog.labs.i18n.ListFormatSymbols_eo', 'goog.labs.i18n.ListFormatSymbols_es_AR', 'goog.labs.i18n.ListFormatSymbols_es_BO', 'goog.labs.i18n.ListFormatSymbols_es_CL', 'goog.labs.i18n.ListFormatSymbols_es_CO', 'goog.labs.i18n.ListFormatSymbols_es_CR', 'goog.labs.i18n.ListFormatSymbols_es_CU', 'goog.labs.i18n.ListFormatSymbols_es_DO', 'goog.labs.i18n.ListFormatSymbols_es_EA', 'goog.labs.i18n.ListFormatSymbols_es_EC', 'goog.labs.i18n.ListFormatSymbols_es_GQ', 'goog.labs.i18n.ListFormatSymbols_es_GT', 'goog.labs.i18n.ListFormatSymbols_es_HN', 'goog.labs.i18n.ListFormatSymbols_es_IC', 'goog.labs.i18n.ListFormatSymbols_es_NI', 'goog.labs.i18n.ListFormatSymbols_es_PA', 'goog.labs.i18n.ListFormatSymbols_es_PE', 'goog.labs.i18n.ListFormatSymbols_es_PH', 'goog.labs.i18n.ListFormatSymbols_es_PR', 'goog.labs.i18n.ListFormatSymbols_es_PY', 'goog.labs.i18n.ListFormatSymbols_es_SV', 'goog.labs.i18n.ListFormatSymbols_es_UY', 'goog.labs.i18n.ListFormatSymbols_es_VE', 'goog.labs.i18n.ListFormatSymbols_et_EE', 'goog.labs.i18n.ListFormatSymbols_eu_ES', 'goog.labs.i18n.ListFormatSymbols_ewo', 'goog.labs.i18n.ListFormatSymbols_ewo_CM', 'goog.labs.i18n.ListFormatSymbols_fa_AF', 'goog.labs.i18n.ListFormatSymbols_fa_IR', 'goog.labs.i18n.ListFormatSymbols_ff', 'goog.labs.i18n.ListFormatSymbols_ff_CM', 'goog.labs.i18n.ListFormatSymbols_ff_GN', 'goog.labs.i18n.ListFormatSymbols_ff_MR', 'goog.labs.i18n.ListFormatSymbols_ff_SN', 'goog.labs.i18n.ListFormatSymbols_fi_FI', 'goog.labs.i18n.ListFormatSymbols_fil_PH', 'goog.labs.i18n.ListFormatSymbols_fo', 'goog.labs.i18n.ListFormatSymbols_fo_FO', 'goog.labs.i18n.ListFormatSymbols_fr_BE', 'goog.labs.i18n.ListFormatSymbols_fr_BF', 'goog.labs.i18n.ListFormatSymbols_fr_BI', 'goog.labs.i18n.ListFormatSymbols_fr_BJ', 'goog.labs.i18n.ListFormatSymbols_fr_BL', 'goog.labs.i18n.ListFormatSymbols_fr_CD', 'goog.labs.i18n.ListFormatSymbols_fr_CF', 'goog.labs.i18n.ListFormatSymbols_fr_CG', 'goog.labs.i18n.ListFormatSymbols_fr_CH', 'goog.labs.i18n.ListFormatSymbols_fr_CI', 'goog.labs.i18n.ListFormatSymbols_fr_CM', 'goog.labs.i18n.ListFormatSymbols_fr_DJ', 'goog.labs.i18n.ListFormatSymbols_fr_DZ', 'goog.labs.i18n.ListFormatSymbols_fr_FR', 'goog.labs.i18n.ListFormatSymbols_fr_GA', 'goog.labs.i18n.ListFormatSymbols_fr_GF', 'goog.labs.i18n.ListFormatSymbols_fr_GN', 'goog.labs.i18n.ListFormatSymbols_fr_GP', 'goog.labs.i18n.ListFormatSymbols_fr_GQ', 'goog.labs.i18n.ListFormatSymbols_fr_HT', 'goog.labs.i18n.ListFormatSymbols_fr_KM', 'goog.labs.i18n.ListFormatSymbols_fr_LU', 'goog.labs.i18n.ListFormatSymbols_fr_MA', 'goog.labs.i18n.ListFormatSymbols_fr_MC', 'goog.labs.i18n.ListFormatSymbols_fr_MF', 'goog.labs.i18n.ListFormatSymbols_fr_MG', 'goog.labs.i18n.ListFormatSymbols_fr_ML', 'goog.labs.i18n.ListFormatSymbols_fr_MQ', 'goog.labs.i18n.ListFormatSymbols_fr_MR', 'goog.labs.i18n.ListFormatSymbols_fr_MU', 'goog.labs.i18n.ListFormatSymbols_fr_NC', 'goog.labs.i18n.ListFormatSymbols_fr_NE', 'goog.labs.i18n.ListFormatSymbols_fr_PF', 'goog.labs.i18n.ListFormatSymbols_fr_PM', 'goog.labs.i18n.ListFormatSymbols_fr_RE', 'goog.labs.i18n.ListFormatSymbols_fr_RW', 'goog.labs.i18n.ListFormatSymbols_fr_SC', 'goog.labs.i18n.ListFormatSymbols_fr_SN', 'goog.labs.i18n.ListFormatSymbols_fr_SY', 'goog.labs.i18n.ListFormatSymbols_fr_TD', 'goog.labs.i18n.ListFormatSymbols_fr_TG', 'goog.labs.i18n.ListFormatSymbols_fr_TN', 'goog.labs.i18n.ListFormatSymbols_fr_VU', 'goog.labs.i18n.ListFormatSymbols_fr_WF', 'goog.labs.i18n.ListFormatSymbols_fr_YT', 'goog.labs.i18n.ListFormatSymbols_fur', 'goog.labs.i18n.ListFormatSymbols_fur_IT', 'goog.labs.i18n.ListFormatSymbols_fy', 'goog.labs.i18n.ListFormatSymbols_fy_NL', 'goog.labs.i18n.ListFormatSymbols_ga_IE', 'goog.labs.i18n.ListFormatSymbols_gd', 'goog.labs.i18n.ListFormatSymbols_gd_GB', 'goog.labs.i18n.ListFormatSymbols_gl_ES', 'goog.labs.i18n.ListFormatSymbols_gsw_CH', 'goog.labs.i18n.ListFormatSymbols_gsw_FR', 'goog.labs.i18n.ListFormatSymbols_gsw_LI', 'goog.labs.i18n.ListFormatSymbols_gu_IN', 'goog.labs.i18n.ListFormatSymbols_guz', 'goog.labs.i18n.ListFormatSymbols_guz_KE', 'goog.labs.i18n.ListFormatSymbols_gv', 'goog.labs.i18n.ListFormatSymbols_gv_IM', 'goog.labs.i18n.ListFormatSymbols_ha', 'goog.labs.i18n.ListFormatSymbols_ha_Latn', 'goog.labs.i18n.ListFormatSymbols_ha_Latn_GH', 'goog.labs.i18n.ListFormatSymbols_ha_Latn_NE', 'goog.labs.i18n.ListFormatSymbols_ha_Latn_NG', 'goog.labs.i18n.ListFormatSymbols_haw_US', 'goog.labs.i18n.ListFormatSymbols_he_IL', 'goog.labs.i18n.ListFormatSymbols_hi_IN', 'goog.labs.i18n.ListFormatSymbols_hr_BA', 'goog.labs.i18n.ListFormatSymbols_hr_HR', 'goog.labs.i18n.ListFormatSymbols_hsb', 'goog.labs.i18n.ListFormatSymbols_hsb_DE', 'goog.labs.i18n.ListFormatSymbols_hu_HU', 'goog.labs.i18n.ListFormatSymbols_hy_AM', 'goog.labs.i18n.ListFormatSymbols_id_ID', 'goog.labs.i18n.ListFormatSymbols_ig', 'goog.labs.i18n.ListFormatSymbols_ig_NG', 'goog.labs.i18n.ListFormatSymbols_ii', 'goog.labs.i18n.ListFormatSymbols_ii_CN', 'goog.labs.i18n.ListFormatSymbols_is_IS', 'goog.labs.i18n.ListFormatSymbols_it_CH', 'goog.labs.i18n.ListFormatSymbols_it_IT', 'goog.labs.i18n.ListFormatSymbols_it_SM', 'goog.labs.i18n.ListFormatSymbols_ja_JP', 'goog.labs.i18n.ListFormatSymbols_jgo', 'goog.labs.i18n.ListFormatSymbols_jgo_CM', 'goog.labs.i18n.ListFormatSymbols_jmc', 'goog.labs.i18n.ListFormatSymbols_jmc_TZ', 'goog.labs.i18n.ListFormatSymbols_ka_GE', 'goog.labs.i18n.ListFormatSymbols_kab', 'goog.labs.i18n.ListFormatSymbols_kab_DZ', 'goog.labs.i18n.ListFormatSymbols_kam', 'goog.labs.i18n.ListFormatSymbols_kam_KE', 'goog.labs.i18n.ListFormatSymbols_kde', 'goog.labs.i18n.ListFormatSymbols_kde_TZ', 'goog.labs.i18n.ListFormatSymbols_kea', 'goog.labs.i18n.ListFormatSymbols_kea_CV', 'goog.labs.i18n.ListFormatSymbols_khq', 'goog.labs.i18n.ListFormatSymbols_khq_ML', 'goog.labs.i18n.ListFormatSymbols_ki', 'goog.labs.i18n.ListFormatSymbols_ki_KE', 'goog.labs.i18n.ListFormatSymbols_kk_Cyrl', 'goog.labs.i18n.ListFormatSymbols_kk_Cyrl_KZ', 'goog.labs.i18n.ListFormatSymbols_kkj', 'goog.labs.i18n.ListFormatSymbols_kkj_CM', 'goog.labs.i18n.ListFormatSymbols_kl', 'goog.labs.i18n.ListFormatSymbols_kl_GL', 'goog.labs.i18n.ListFormatSymbols_kln', 'goog.labs.i18n.ListFormatSymbols_kln_KE', 'goog.labs.i18n.ListFormatSymbols_km_KH', 'goog.labs.i18n.ListFormatSymbols_kn_IN', 'goog.labs.i18n.ListFormatSymbols_ko_KP', 'goog.labs.i18n.ListFormatSymbols_ko_KR', 'goog.labs.i18n.ListFormatSymbols_kok', 'goog.labs.i18n.ListFormatSymbols_kok_IN', 'goog.labs.i18n.ListFormatSymbols_ks', 'goog.labs.i18n.ListFormatSymbols_ks_Arab', 'goog.labs.i18n.ListFormatSymbols_ks_Arab_IN', 'goog.labs.i18n.ListFormatSymbols_ksb', 'goog.labs.i18n.ListFormatSymbols_ksb_TZ', 'goog.labs.i18n.ListFormatSymbols_ksf', 'goog.labs.i18n.ListFormatSymbols_ksf_CM', 'goog.labs.i18n.ListFormatSymbols_ksh', 'goog.labs.i18n.ListFormatSymbols_ksh_DE', 'goog.labs.i18n.ListFormatSymbols_kw', 'goog.labs.i18n.ListFormatSymbols_kw_GB', 'goog.labs.i18n.ListFormatSymbols_ky_Cyrl', 'goog.labs.i18n.ListFormatSymbols_ky_Cyrl_KG', 'goog.labs.i18n.ListFormatSymbols_lag', 'goog.labs.i18n.ListFormatSymbols_lag_TZ', 'goog.labs.i18n.ListFormatSymbols_lb', 'goog.labs.i18n.ListFormatSymbols_lb_LU', 'goog.labs.i18n.ListFormatSymbols_lg', 'goog.labs.i18n.ListFormatSymbols_lg_UG', 'goog.labs.i18n.ListFormatSymbols_lkt', 'goog.labs.i18n.ListFormatSymbols_lkt_US', 'goog.labs.i18n.ListFormatSymbols_ln_AO', 'goog.labs.i18n.ListFormatSymbols_ln_CD', 'goog.labs.i18n.ListFormatSymbols_ln_CF', 'goog.labs.i18n.ListFormatSymbols_ln_CG', 'goog.labs.i18n.ListFormatSymbols_lo_LA', 'goog.labs.i18n.ListFormatSymbols_lt_LT', 'goog.labs.i18n.ListFormatSymbols_lu', 'goog.labs.i18n.ListFormatSymbols_lu_CD', 'goog.labs.i18n.ListFormatSymbols_luo', 'goog.labs.i18n.ListFormatSymbols_luo_KE', 'goog.labs.i18n.ListFormatSymbols_luy', 'goog.labs.i18n.ListFormatSymbols_luy_KE', 'goog.labs.i18n.ListFormatSymbols_lv_LV', 'goog.labs.i18n.ListFormatSymbols_mas', 'goog.labs.i18n.ListFormatSymbols_mas_KE', 'goog.labs.i18n.ListFormatSymbols_mas_TZ', 'goog.labs.i18n.ListFormatSymbols_mer', 'goog.labs.i18n.ListFormatSymbols_mer_KE', 'goog.labs.i18n.ListFormatSymbols_mfe', 'goog.labs.i18n.ListFormatSymbols_mfe_MU', 'goog.labs.i18n.ListFormatSymbols_mg', 'goog.labs.i18n.ListFormatSymbols_mg_MG', 'goog.labs.i18n.ListFormatSymbols_mgh', 'goog.labs.i18n.ListFormatSymbols_mgh_MZ', 'goog.labs.i18n.ListFormatSymbols_mgo', 'goog.labs.i18n.ListFormatSymbols_mgo_CM', 'goog.labs.i18n.ListFormatSymbols_mk_MK', 'goog.labs.i18n.ListFormatSymbols_ml_IN', 'goog.labs.i18n.ListFormatSymbols_mn_Cyrl', 'goog.labs.i18n.ListFormatSymbols_mn_Cyrl_MN', 'goog.labs.i18n.ListFormatSymbols_mr_IN', 'goog.labs.i18n.ListFormatSymbols_ms_Latn', 'goog.labs.i18n.ListFormatSymbols_ms_Latn_BN', 'goog.labs.i18n.ListFormatSymbols_ms_Latn_MY', 'goog.labs.i18n.ListFormatSymbols_ms_Latn_SG', 'goog.labs.i18n.ListFormatSymbols_mt_MT', 'goog.labs.i18n.ListFormatSymbols_mua', 'goog.labs.i18n.ListFormatSymbols_mua_CM', 'goog.labs.i18n.ListFormatSymbols_my_MM', 'goog.labs.i18n.ListFormatSymbols_naq', 'goog.labs.i18n.ListFormatSymbols_naq_NA', 'goog.labs.i18n.ListFormatSymbols_nb_NO', 'goog.labs.i18n.ListFormatSymbols_nb_SJ', 'goog.labs.i18n.ListFormatSymbols_nd', 'goog.labs.i18n.ListFormatSymbols_nd_ZW', 'goog.labs.i18n.ListFormatSymbols_ne_IN', 'goog.labs.i18n.ListFormatSymbols_ne_NP', 'goog.labs.i18n.ListFormatSymbols_nl_AW', 'goog.labs.i18n.ListFormatSymbols_nl_BE', 'goog.labs.i18n.ListFormatSymbols_nl_BQ', 'goog.labs.i18n.ListFormatSymbols_nl_CW', 'goog.labs.i18n.ListFormatSymbols_nl_NL', 'goog.labs.i18n.ListFormatSymbols_nl_SR', 'goog.labs.i18n.ListFormatSymbols_nl_SX', 'goog.labs.i18n.ListFormatSymbols_nmg', 'goog.labs.i18n.ListFormatSymbols_nmg_CM', 'goog.labs.i18n.ListFormatSymbols_nn', 'goog.labs.i18n.ListFormatSymbols_nn_NO', 'goog.labs.i18n.ListFormatSymbols_nnh', 'goog.labs.i18n.ListFormatSymbols_nnh_CM', 'goog.labs.i18n.ListFormatSymbols_nus', 'goog.labs.i18n.ListFormatSymbols_nus_SD', 'goog.labs.i18n.ListFormatSymbols_nyn', 'goog.labs.i18n.ListFormatSymbols_nyn_UG', 'goog.labs.i18n.ListFormatSymbols_om', 'goog.labs.i18n.ListFormatSymbols_om_ET', 'goog.labs.i18n.ListFormatSymbols_om_KE', 'goog.labs.i18n.ListFormatSymbols_or_IN', 'goog.labs.i18n.ListFormatSymbols_os', 'goog.labs.i18n.ListFormatSymbols_os_GE', 'goog.labs.i18n.ListFormatSymbols_os_RU', 'goog.labs.i18n.ListFormatSymbols_pa_Arab', 'goog.labs.i18n.ListFormatSymbols_pa_Arab_PK', 'goog.labs.i18n.ListFormatSymbols_pa_Guru', 'goog.labs.i18n.ListFormatSymbols_pa_Guru_IN', 'goog.labs.i18n.ListFormatSymbols_pl_PL', 'goog.labs.i18n.ListFormatSymbols_ps', 'goog.labs.i18n.ListFormatSymbols_ps_AF', 'goog.labs.i18n.ListFormatSymbols_pt_AO', 'goog.labs.i18n.ListFormatSymbols_pt_CV', 'goog.labs.i18n.ListFormatSymbols_pt_GW', 'goog.labs.i18n.ListFormatSymbols_pt_MO', 'goog.labs.i18n.ListFormatSymbols_pt_MZ', 'goog.labs.i18n.ListFormatSymbols_pt_ST', 'goog.labs.i18n.ListFormatSymbols_pt_TL', 'goog.labs.i18n.ListFormatSymbols_qu', 'goog.labs.i18n.ListFormatSymbols_qu_BO', 'goog.labs.i18n.ListFormatSymbols_qu_EC', 'goog.labs.i18n.ListFormatSymbols_qu_PE', 'goog.labs.i18n.ListFormatSymbols_rm', 'goog.labs.i18n.ListFormatSymbols_rm_CH', 'goog.labs.i18n.ListFormatSymbols_rn', 'goog.labs.i18n.ListFormatSymbols_rn_BI', 'goog.labs.i18n.ListFormatSymbols_ro_MD', 'goog.labs.i18n.ListFormatSymbols_ro_RO', 'goog.labs.i18n.ListFormatSymbols_rof', 'goog.labs.i18n.ListFormatSymbols_rof_TZ', 'goog.labs.i18n.ListFormatSymbols_ru_BY', 'goog.labs.i18n.ListFormatSymbols_ru_KG', 'goog.labs.i18n.ListFormatSymbols_ru_KZ', 'goog.labs.i18n.ListFormatSymbols_ru_MD', 'goog.labs.i18n.ListFormatSymbols_ru_RU', 'goog.labs.i18n.ListFormatSymbols_ru_UA', 'goog.labs.i18n.ListFormatSymbols_rw', 'goog.labs.i18n.ListFormatSymbols_rw_RW', 'goog.labs.i18n.ListFormatSymbols_rwk', 'goog.labs.i18n.ListFormatSymbols_rwk_TZ', 'goog.labs.i18n.ListFormatSymbols_sah', 'goog.labs.i18n.ListFormatSymbols_sah_RU', 'goog.labs.i18n.ListFormatSymbols_saq', 'goog.labs.i18n.ListFormatSymbols_saq_KE', 'goog.labs.i18n.ListFormatSymbols_sbp', 'goog.labs.i18n.ListFormatSymbols_sbp_TZ', 'goog.labs.i18n.ListFormatSymbols_se', 'goog.labs.i18n.ListFormatSymbols_se_FI', 'goog.labs.i18n.ListFormatSymbols_se_NO', 'goog.labs.i18n.ListFormatSymbols_se_SE', 'goog.labs.i18n.ListFormatSymbols_seh', 'goog.labs.i18n.ListFormatSymbols_seh_MZ', 'goog.labs.i18n.ListFormatSymbols_ses', 'goog.labs.i18n.ListFormatSymbols_ses_ML', 'goog.labs.i18n.ListFormatSymbols_sg', 'goog.labs.i18n.ListFormatSymbols_sg_CF', 'goog.labs.i18n.ListFormatSymbols_shi', 'goog.labs.i18n.ListFormatSymbols_shi_Latn', 'goog.labs.i18n.ListFormatSymbols_shi_Latn_MA', 'goog.labs.i18n.ListFormatSymbols_shi_Tfng', 'goog.labs.i18n.ListFormatSymbols_shi_Tfng_MA', 'goog.labs.i18n.ListFormatSymbols_si_LK', 'goog.labs.i18n.ListFormatSymbols_sk_SK', 'goog.labs.i18n.ListFormatSymbols_sl_SI', 'goog.labs.i18n.ListFormatSymbols_smn', 'goog.labs.i18n.ListFormatSymbols_smn_FI', 'goog.labs.i18n.ListFormatSymbols_sn', 'goog.labs.i18n.ListFormatSymbols_sn_ZW', 'goog.labs.i18n.ListFormatSymbols_so', 'goog.labs.i18n.ListFormatSymbols_so_DJ', 'goog.labs.i18n.ListFormatSymbols_so_ET', 'goog.labs.i18n.ListFormatSymbols_so_KE', 'goog.labs.i18n.ListFormatSymbols_so_SO', 'goog.labs.i18n.ListFormatSymbols_sq_AL', 'goog.labs.i18n.ListFormatSymbols_sq_MK', 'goog.labs.i18n.ListFormatSymbols_sq_XK', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl_BA', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl_ME', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl_RS', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl_XK', 'goog.labs.i18n.ListFormatSymbols_sr_Latn_BA', 'goog.labs.i18n.ListFormatSymbols_sr_Latn_ME', 'goog.labs.i18n.ListFormatSymbols_sr_Latn_RS', 'goog.labs.i18n.ListFormatSymbols_sr_Latn_XK', 'goog.labs.i18n.ListFormatSymbols_sv_AX', 'goog.labs.i18n.ListFormatSymbols_sv_FI', 'goog.labs.i18n.ListFormatSymbols_sv_SE', 'goog.labs.i18n.ListFormatSymbols_sw_CD', 'goog.labs.i18n.ListFormatSymbols_sw_KE', 'goog.labs.i18n.ListFormatSymbols_sw_TZ', 'goog.labs.i18n.ListFormatSymbols_sw_UG', 'goog.labs.i18n.ListFormatSymbols_ta_IN', 'goog.labs.i18n.ListFormatSymbols_ta_LK', 'goog.labs.i18n.ListFormatSymbols_ta_MY', 'goog.labs.i18n.ListFormatSymbols_ta_SG', 'goog.labs.i18n.ListFormatSymbols_te_IN', 'goog.labs.i18n.ListFormatSymbols_teo', 'goog.labs.i18n.ListFormatSymbols_teo_KE', 'goog.labs.i18n.ListFormatSymbols_teo_UG', 'goog.labs.i18n.ListFormatSymbols_th_TH', 'goog.labs.i18n.ListFormatSymbols_ti', 'goog.labs.i18n.ListFormatSymbols_ti_ER', 'goog.labs.i18n.ListFormatSymbols_ti_ET', 'goog.labs.i18n.ListFormatSymbols_to', 'goog.labs.i18n.ListFormatSymbols_to_TO', 'goog.labs.i18n.ListFormatSymbols_tr_CY', 'goog.labs.i18n.ListFormatSymbols_tr_TR', 'goog.labs.i18n.ListFormatSymbols_twq', 'goog.labs.i18n.ListFormatSymbols_twq_NE', 'goog.labs.i18n.ListFormatSymbols_tzm', 'goog.labs.i18n.ListFormatSymbols_tzm_Latn', 'goog.labs.i18n.ListFormatSymbols_tzm_Latn_MA', 'goog.labs.i18n.ListFormatSymbols_ug', 'goog.labs.i18n.ListFormatSymbols_ug_Arab', 'goog.labs.i18n.ListFormatSymbols_ug_Arab_CN', 'goog.labs.i18n.ListFormatSymbols_uk_UA', 'goog.labs.i18n.ListFormatSymbols_ur_IN', 'goog.labs.i18n.ListFormatSymbols_ur_PK', 'goog.labs.i18n.ListFormatSymbols_uz_Arab', 'goog.labs.i18n.ListFormatSymbols_uz_Arab_AF', 'goog.labs.i18n.ListFormatSymbols_uz_Cyrl', 'goog.labs.i18n.ListFormatSymbols_uz_Cyrl_UZ', 'goog.labs.i18n.ListFormatSymbols_uz_Latn', 'goog.labs.i18n.ListFormatSymbols_uz_Latn_UZ', 'goog.labs.i18n.ListFormatSymbols_vai', 'goog.labs.i18n.ListFormatSymbols_vai_Latn', 'goog.labs.i18n.ListFormatSymbols_vai_Latn_LR', 'goog.labs.i18n.ListFormatSymbols_vai_Vaii', 'goog.labs.i18n.ListFormatSymbols_vai_Vaii_LR', 'goog.labs.i18n.ListFormatSymbols_vi_VN', 'goog.labs.i18n.ListFormatSymbols_vun', 'goog.labs.i18n.ListFormatSymbols_vun_TZ', 'goog.labs.i18n.ListFormatSymbols_wae', 'goog.labs.i18n.ListFormatSymbols_wae_CH', 'goog.labs.i18n.ListFormatSymbols_xog', 'goog.labs.i18n.ListFormatSymbols_xog_UG', 'goog.labs.i18n.ListFormatSymbols_yav', 'goog.labs.i18n.ListFormatSymbols_yav_CM', 'goog.labs.i18n.ListFormatSymbols_yi', 'goog.labs.i18n.ListFormatSymbols_yi_001', 'goog.labs.i18n.ListFormatSymbols_yo', 'goog.labs.i18n.ListFormatSymbols_yo_BJ', 'goog.labs.i18n.ListFormatSymbols_yo_NG', 'goog.labs.i18n.ListFormatSymbols_zgh', 'goog.labs.i18n.ListFormatSymbols_zgh_MA', 'goog.labs.i18n.ListFormatSymbols_zh_Hans', 'goog.labs.i18n.ListFormatSymbols_zh_Hans_CN', 'goog.labs.i18n.ListFormatSymbols_zh_Hans_HK', 'goog.labs.i18n.ListFormatSymbols_zh_Hans_MO', 'goog.labs.i18n.ListFormatSymbols_zh_Hans_SG', 'goog.labs.i18n.ListFormatSymbols_zh_Hant', 'goog.labs.i18n.ListFormatSymbols_zh_Hant_HK', 'goog.labs.i18n.ListFormatSymbols_zh_Hant_MO', 'goog.labs.i18n.ListFormatSymbols_zh_Hant_TW', 'goog.labs.i18n.ListFormatSymbols_zu_ZA'], ['goog.labs.i18n.ListFormatSymbols'], false);\ngoog.addDependency('labs/iterable/iterable.js', ['goog.labs.iterable'], [], true);\ngoog.addDependency('labs/iterable/iterable_test.js', ['goog.labs.iterableTest'], ['goog.labs.iterable', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.testing.testSuite'], true);\ngoog.addDependency('labs/mock/mock.js', ['goog.labs.mock', 'goog.labs.mock.VerificationError'], ['goog.array', 'goog.asserts', 'goog.debug', 'goog.debug.Error', 'goog.functions', 'goog.object'], false);\ngoog.addDependency('labs/mock/mock_test.js', ['goog.labs.mockTest'], ['goog.array', 'goog.labs.mock', 'goog.labs.mock.VerificationError', 'goog.labs.testing.AnythingMatcher', 'goog.labs.testing.GreaterThanMatcher', 'goog.string', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/net/image.js', ['goog.labs.net.image'], ['goog.Promise', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.net.EventType', 'goog.userAgent'], false);\ngoog.addDependency('labs/net/image_test.js', ['goog.labs.net.imageTest'], ['goog.labs.net.image', 'goog.string', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('labs/net/webchannel.js', ['goog.net.WebChannel'], ['goog.events', 'goog.events.Event'], false);\ngoog.addDependency('labs/net/webchannel/basetestchannel.js', ['goog.labs.net.webChannel.BaseTestChannel'], ['goog.labs.net.webChannel.Channel', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.Stat'], false);\ngoog.addDependency('labs/net/webchannel/channel.js', ['goog.labs.net.webChannel.Channel'], [], false);\ngoog.addDependency('labs/net/webchannel/channelrequest.js', ['goog.labs.net.webChannel.ChannelRequest'], ['goog.Timer', 'goog.async.Throttle', 'goog.events.EventHandler', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.ServerReachability', 'goog.labs.net.webChannel.requestStats.Stat', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.XmlHttp', 'goog.object', 'goog.userAgent'], false);\ngoog.addDependency('labs/net/webchannel/channelrequest_test.js', ['goog.labs.net.webChannel.channelRequestTest'], ['goog.Uri', 'goog.functions', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.WebChannelDebug', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.ServerReachability', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.testing.recordFunction'], false);\ngoog.addDependency('labs/net/webchannel/connectionstate.js', ['goog.labs.net.webChannel.ConnectionState'], [], false);\ngoog.addDependency('labs/net/webchannel/forwardchannelrequestpool.js', ['goog.labs.net.webChannel.ForwardChannelRequestPool'], ['goog.array', 'goog.string', 'goog.structs.Set'], false);\ngoog.addDependency('labs/net/webchannel/forwardchannelrequestpool_test.js', ['goog.labs.net.webChannel.forwardChannelRequestPoolTest'], ['goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.ForwardChannelRequestPool', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/net/webchannel/netutils.js', ['goog.labs.net.webChannel.netUtils'], ['goog.Uri', 'goog.labs.net.webChannel.WebChannelDebug'], false);\ngoog.addDependency('labs/net/webchannel/requeststats.js', ['goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.Event', 'goog.labs.net.webChannel.requestStats.ServerReachability', 'goog.labs.net.webChannel.requestStats.ServerReachabilityEvent', 'goog.labs.net.webChannel.requestStats.Stat', 'goog.labs.net.webChannel.requestStats.StatEvent', 'goog.labs.net.webChannel.requestStats.TimingEvent'], ['goog.events.Event', 'goog.events.EventTarget'], false);\ngoog.addDependency('labs/net/webchannel/webchannelbase.js', ['goog.labs.net.webChannel.WebChannelBase'], ['goog.Uri', 'goog.array', 'goog.asserts', 'goog.debug.TextFormatter', 'goog.json', 'goog.labs.net.webChannel.BaseTestChannel', 'goog.labs.net.webChannel.Channel', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.ConnectionState', 'goog.labs.net.webChannel.ForwardChannelRequestPool', 'goog.labs.net.webChannel.WebChannelDebug', 'goog.labs.net.webChannel.Wire', 'goog.labs.net.webChannel.WireV8', 'goog.labs.net.webChannel.netUtils', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.Stat', 'goog.log', 'goog.net.XhrIo', 'goog.object', 'goog.string', 'goog.structs', 'goog.structs.CircularBuffer'], false);\ngoog.addDependency('labs/net/webchannel/webchannelbase_test.js', ['goog.labs.net.webChannel.webChannelBaseTest'], ['goog.Timer', 'goog.array', 'goog.dom', 'goog.functions', 'goog.json', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.ForwardChannelRequestPool', 'goog.labs.net.webChannel.WebChannelBase', 'goog.labs.net.webChannel.WebChannelBaseTransport', 'goog.labs.net.webChannel.WebChannelDebug', 'goog.labs.net.webChannel.Wire', 'goog.labs.net.webChannel.netUtils', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.Stat', 'goog.structs.Map', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/net/webchannel/webchannelbasetransport.js', ['goog.labs.net.webChannel.WebChannelBaseTransport'], ['goog.asserts', 'goog.events.EventTarget', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.WebChannelBase', 'goog.log', 'goog.net.WebChannel', 'goog.net.WebChannelTransport', 'goog.object', 'goog.string.path'], false);\ngoog.addDependency('labs/net/webchannel/webchannelbasetransport_test.js', ['goog.labs.net.webChannel.webChannelBaseTransportTest'], ['goog.events', 'goog.functions', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.WebChannelBaseTransport', 'goog.net.WebChannel', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/net/webchannel/webchanneldebug.js', ['goog.labs.net.webChannel.WebChannelDebug'], ['goog.json', 'goog.log'], false);\ngoog.addDependency('labs/net/webchannel/wire.js', ['goog.labs.net.webChannel.Wire'], [], false);\ngoog.addDependency('labs/net/webchannel/wirev8.js', ['goog.labs.net.webChannel.WireV8'], ['goog.asserts', 'goog.json', 'goog.json.NativeJsonProcessor', 'goog.structs'], false);\ngoog.addDependency('labs/net/webchannel/wirev8_test.js', ['goog.labs.net.webChannel.WireV8Test'], ['goog.labs.net.webChannel.WireV8', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/net/webchanneltransport.js', ['goog.net.WebChannelTransport'], [], false);\ngoog.addDependency('labs/net/webchanneltransportfactory.js', ['goog.net.createWebChannelTransport'], ['goog.functions', 'goog.labs.net.webChannel.WebChannelBaseTransport'], false);\ngoog.addDependency('labs/net/xhr.js', ['goog.labs.net.xhr', 'goog.labs.net.xhr.Error', 'goog.labs.net.xhr.HttpError', 'goog.labs.net.xhr.Options', 'goog.labs.net.xhr.PostData', 'goog.labs.net.xhr.ResponseType', 'goog.labs.net.xhr.TimeoutError'], ['goog.Promise', 'goog.debug.Error', 'goog.json', 'goog.net.HttpStatus', 'goog.net.XmlHttp', 'goog.string', 'goog.uri.utils', 'goog.userAgent'], false);\ngoog.addDependency('labs/net/xhr_test.js', ['goog.labs.net.xhrTest'], ['goog.Promise', 'goog.labs.net.xhr', 'goog.net.WrapperXmlHttpFactory', 'goog.net.XmlHttp', 'goog.testing.MockClock', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('labs/object/object.js', ['goog.labs.object'], [], false);\ngoog.addDependency('labs/object/object_test.js', ['goog.labs.objectTest'], ['goog.labs.object', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/pubsub/broadcastpubsub.js', ['goog.labs.pubsub.BroadcastPubSub'], ['goog.Disposable', 'goog.Timer', 'goog.array', 'goog.async.run', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.json', 'goog.log', 'goog.math', 'goog.pubsub.PubSub', 'goog.storage.Storage', 'goog.storage.mechanism.HTML5LocalStorage', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('labs/pubsub/broadcastpubsub_test.js', ['goog.labs.pubsub.BroadcastPubSubTest'], ['goog.array', 'goog.debug.Logger', 'goog.json', 'goog.labs.pubsub.BroadcastPubSub', 'goog.storage.Storage', 'goog.structs.Map', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('labs/storage/boundedcollectablestorage.js', ['goog.labs.storage.BoundedCollectableStorage'], ['goog.array', 'goog.asserts', 'goog.iter', 'goog.storage.CollectableStorage', 'goog.storage.ErrorCode', 'goog.storage.ExpiringStorage'], false);\ngoog.addDependency('labs/storage/boundedcollectablestorage_test.js', ['goog.labs.storage.BoundedCollectableStorageTest'], ['goog.labs.storage.BoundedCollectableStorage', 'goog.storage.collectableStorageTester', 'goog.storage.storage_test', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false);\ngoog.addDependency('labs/structs/map.js', ['goog.labs.structs.Map'], ['goog.array', 'goog.asserts', 'goog.labs.object', 'goog.object'], false);\ngoog.addDependency('labs/structs/map_perf.js', ['goog.labs.structs.MapPerf'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.labs.structs.Map', 'goog.structs.Map', 'goog.testing.PerformanceTable', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/structs/map_test.js', ['goog.labs.structs.MapTest'], ['goog.labs.structs.Map', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/structs/multimap.js', ['goog.labs.structs.Multimap'], ['goog.array', 'goog.labs.object', 'goog.labs.structs.Map'], false);\ngoog.addDependency('labs/structs/multimap_test.js', ['goog.labs.structs.MultimapTest'], ['goog.labs.structs.Map', 'goog.labs.structs.Multimap', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/style/pixeldensitymonitor.js', ['goog.labs.style.PixelDensityMonitor', 'goog.labs.style.PixelDensityMonitor.Density', 'goog.labs.style.PixelDensityMonitor.EventType'], ['goog.events', 'goog.events.EventTarget'], false);\ngoog.addDependency('labs/style/pixeldensitymonitor_test.js', ['goog.labs.style.PixelDensityMonitorTest'], ['goog.array', 'goog.dom.DomHelper', 'goog.events', 'goog.labs.style.PixelDensityMonitor', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('labs/testing/assertthat.js', ['goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat'], ['goog.debug.Error'], false);\ngoog.addDependency('labs/testing/assertthat_test.js', ['goog.labs.testing.assertThatTest'], ['goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('labs/testing/decoratormatcher.js', ['goog.labs.testing.AnythingMatcher'], ['goog.labs.testing.Matcher'], false);\ngoog.addDependency('labs/testing/decoratormatcher_test.js', ['goog.labs.testing.decoratorMatcherTest'], ['goog.labs.testing.AnythingMatcher', 'goog.labs.testing.GreaterThanMatcher', 'goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/testing/dictionarymatcher.js', ['goog.labs.testing.HasEntriesMatcher', 'goog.labs.testing.HasEntryMatcher', 'goog.labs.testing.HasKeyMatcher', 'goog.labs.testing.HasValueMatcher'], ['goog.asserts', 'goog.labs.testing.Matcher', 'goog.object'], false);\ngoog.addDependency('labs/testing/dictionarymatcher_test.js', ['goog.labs.testing.dictionaryMatcherTest'], ['goog.labs.testing.HasEntryMatcher', 'goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/testing/environment.js', ['goog.labs.testing.Environment'], ['goog.array', 'goog.asserts', 'goog.debug.Console', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.TestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/testing/environment_test.js', ['goog.labs.testing.environmentTest'], ['goog.labs.testing.Environment', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.testing.testSuite'], false);\ngoog.addDependency('labs/testing/environment_usage_test.js', ['goog.labs.testing.environmentUsageTest'], ['goog.labs.testing.Environment'], false);\ngoog.addDependency('labs/testing/logicmatcher.js', ['goog.labs.testing.AllOfMatcher', 'goog.labs.testing.AnyOfMatcher', 'goog.labs.testing.IsNotMatcher'], ['goog.array', 'goog.labs.testing.Matcher'], false);\ngoog.addDependency('labs/testing/logicmatcher_test.js', ['goog.labs.testing.logicMatcherTest'], ['goog.labs.testing.AllOfMatcher', 'goog.labs.testing.GreaterThanMatcher', 'goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/testing/matcher.js', ['goog.labs.testing.Matcher'], [], false);\ngoog.addDependency('labs/testing/numbermatcher.js', ['goog.labs.testing.CloseToMatcher', 'goog.labs.testing.EqualToMatcher', 'goog.labs.testing.GreaterThanEqualToMatcher', 'goog.labs.testing.GreaterThanMatcher', 'goog.labs.testing.LessThanEqualToMatcher', 'goog.labs.testing.LessThanMatcher'], ['goog.asserts', 'goog.labs.testing.Matcher'], false);\ngoog.addDependency('labs/testing/numbermatcher_test.js', ['goog.labs.testing.numberMatcherTest'], ['goog.labs.testing.LessThanMatcher', 'goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/testing/objectmatcher.js', ['goog.labs.testing.HasPropertyMatcher', 'goog.labs.testing.InstanceOfMatcher', 'goog.labs.testing.IsNullMatcher', 'goog.labs.testing.IsNullOrUndefinedMatcher', 'goog.labs.testing.IsUndefinedMatcher', 'goog.labs.testing.ObjectEqualsMatcher'], ['goog.labs.testing.Matcher'], false);\ngoog.addDependency('labs/testing/objectmatcher_test.js', ['goog.labs.testing.objectMatcherTest'], ['goog.labs.testing.MatcherError', 'goog.labs.testing.ObjectEqualsMatcher', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/testing/stringmatcher.js', ['goog.labs.testing.ContainsStringMatcher', 'goog.labs.testing.EndsWithMatcher', 'goog.labs.testing.EqualToIgnoringWhitespaceMatcher', 'goog.labs.testing.EqualsMatcher', 'goog.labs.testing.RegexMatcher', 'goog.labs.testing.StartsWithMatcher', 'goog.labs.testing.StringContainsInOrderMatcher'], ['goog.asserts', 'goog.labs.testing.Matcher', 'goog.string'], false);\ngoog.addDependency('labs/testing/stringmatcher_test.js', ['goog.labs.testing.stringMatcherTest'], ['goog.labs.testing.MatcherError', 'goog.labs.testing.StringContainsInOrderMatcher', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/useragent/browser.js', ['goog.labs.userAgent.browser'], ['goog.array', 'goog.labs.userAgent.util', 'goog.object', 'goog.string'], false);\ngoog.addDependency('labs/useragent/browser_test.js', ['goog.labs.userAgent.browserTest'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.object', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/useragent/device.js', ['goog.labs.userAgent.device'], ['goog.labs.userAgent.util'], false);\ngoog.addDependency('labs/useragent/device_test.js', ['goog.labs.userAgent.deviceTest'], ['goog.labs.userAgent.device', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/useragent/engine.js', ['goog.labs.userAgent.engine'], ['goog.array', 'goog.labs.userAgent.util', 'goog.string'], false);\ngoog.addDependency('labs/useragent/engine_test.js', ['goog.labs.userAgent.engineTest'], ['goog.labs.userAgent.engine', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/useragent/platform.js', ['goog.labs.userAgent.platform'], ['goog.labs.userAgent.util', 'goog.string'], false);\ngoog.addDependency('labs/useragent/platform_test.js', ['goog.labs.userAgent.platformTest'], ['goog.labs.userAgent.platform', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.jsunit'], false);\ngoog.addDependency('labs/useragent/test_agents.js', ['goog.labs.userAgent.testAgents'], [], false);\ngoog.addDependency('labs/useragent/util.js', ['goog.labs.userAgent.util'], ['goog.string'], false);\ngoog.addDependency('labs/useragent/util_test.js', ['goog.labs.userAgent.utilTest'], ['goog.functions', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('locale/countries.js', ['goog.locale.countries'], [], false);\ngoog.addDependency('locale/countrylanguagenames_test.js', ['goog.locale.countryLanguageNamesTest'], ['goog.locale', 'goog.testing.jsunit'], false);\ngoog.addDependency('locale/defaultlocalenameconstants.js', ['goog.locale.defaultLocaleNameConstants'], [], false);\ngoog.addDependency('locale/genericfontnames.js', ['goog.locale.genericFontNames'], [], false);\ngoog.addDependency('locale/genericfontnames_test.js', ['goog.locale.genericFontNamesTest'], ['goog.locale.genericFontNames', 'goog.testing.jsunit'], false);\ngoog.addDependency('locale/genericfontnamesdata.js', ['goog.locale.genericFontNamesData'], [], false);\ngoog.addDependency('locale/locale.js', ['goog.locale'], ['goog.locale.nativeNameConstants'], false);\ngoog.addDependency('locale/nativenameconstants.js', ['goog.locale.nativeNameConstants'], [], false);\ngoog.addDependency('locale/scriptToLanguages.js', ['goog.locale.scriptToLanguages'], ['goog.locale'], false);\ngoog.addDependency('locale/timezonedetection.js', ['goog.locale.timeZoneDetection'], ['goog.locale.TimeZoneFingerprint'], false);\ngoog.addDependency('locale/timezonedetection_test.js', ['goog.locale.timeZoneDetectionTest'], ['goog.locale.timeZoneDetection', 'goog.testing.jsunit'], false);\ngoog.addDependency('locale/timezonefingerprint.js', ['goog.locale.TimeZoneFingerprint'], [], false);\ngoog.addDependency('locale/timezonelist.js', ['goog.locale.TimeZoneList'], ['goog.locale'], false);\ngoog.addDependency('locale/timezonelist_test.js', ['goog.locale.TimeZoneListTest'], ['goog.locale', 'goog.locale.TimeZoneList', 'goog.testing.jsunit'], false);\ngoog.addDependency('log/log.js', ['goog.log', 'goog.log.Level', 'goog.log.LogRecord', 'goog.log.Logger'], ['goog.debug', 'goog.debug.LogManager', 'goog.debug.LogRecord', 'goog.debug.Logger'], false);\ngoog.addDependency('log/log_test.js', ['goog.logTest'], ['goog.debug.LogManager', 'goog.log', 'goog.log.Level', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/affinetransform.js', ['goog.math.AffineTransform'], ['goog.math'], false);\ngoog.addDependency('math/affinetransform_test.js', ['goog.math.AffineTransformTest'], ['goog.array', 'goog.math', 'goog.math.AffineTransform', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/bezier.js', ['goog.math.Bezier'], ['goog.math', 'goog.math.Coordinate'], false);\ngoog.addDependency('math/bezier_test.js', ['goog.math.BezierTest'], ['goog.math', 'goog.math.Bezier', 'goog.math.Coordinate', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/box.js', ['goog.math.Box'], ['goog.math.Coordinate'], false);\ngoog.addDependency('math/box_test.js', ['goog.math.BoxTest'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/coordinate.js', ['goog.math.Coordinate'], ['goog.math'], false);\ngoog.addDependency('math/coordinate3.js', ['goog.math.Coordinate3'], [], false);\ngoog.addDependency('math/coordinate3_test.js', ['goog.math.Coordinate3Test'], ['goog.math.Coordinate3', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/coordinate_test.js', ['goog.math.CoordinateTest'], ['goog.math.Coordinate', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/exponentialbackoff.js', ['goog.math.ExponentialBackoff'], ['goog.asserts'], false);\ngoog.addDependency('math/exponentialbackoff_test.js', ['goog.math.ExponentialBackoffTest'], ['goog.math.ExponentialBackoff', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/integer.js', ['goog.math.Integer'], [], false);\ngoog.addDependency('math/integer_test.js', ['goog.math.IntegerTest'], ['goog.math.Integer', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/interpolator/interpolator1.js', ['goog.math.interpolator.Interpolator1'], [], false);\ngoog.addDependency('math/interpolator/linear1.js', ['goog.math.interpolator.Linear1'], ['goog.array', 'goog.asserts', 'goog.math', 'goog.math.interpolator.Interpolator1'], false);\ngoog.addDependency('math/interpolator/linear1_test.js', ['goog.math.interpolator.Linear1Test'], ['goog.math.interpolator.Linear1', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/interpolator/pchip1.js', ['goog.math.interpolator.Pchip1'], ['goog.math', 'goog.math.interpolator.Spline1'], false);\ngoog.addDependency('math/interpolator/pchip1_test.js', ['goog.math.interpolator.Pchip1Test'], ['goog.math.interpolator.Pchip1', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/interpolator/spline1.js', ['goog.math.interpolator.Spline1'], ['goog.array', 'goog.asserts', 'goog.math', 'goog.math.interpolator.Interpolator1', 'goog.math.tdma'], false);\ngoog.addDependency('math/interpolator/spline1_test.js', ['goog.math.interpolator.Spline1Test'], ['goog.math.interpolator.Spline1', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/line.js', ['goog.math.Line'], ['goog.math', 'goog.math.Coordinate'], false);\ngoog.addDependency('math/line_test.js', ['goog.math.LineTest'], ['goog.math.Coordinate', 'goog.math.Line', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/long.js', ['goog.math.Long'], [], false);\ngoog.addDependency('math/long_test.js', ['goog.math.LongTest'], ['goog.math.Long', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/math.js', ['goog.math'], ['goog.array', 'goog.asserts'], false);\ngoog.addDependency('math/math_test.js', ['goog.mathTest'], ['goog.math', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/matrix.js', ['goog.math.Matrix'], ['goog.array', 'goog.math', 'goog.math.Size', 'goog.string'], false);\ngoog.addDependency('math/matrix_test.js', ['goog.math.MatrixTest'], ['goog.math.Matrix', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/path.js', ['goog.math.Path', 'goog.math.Path.Segment'], ['goog.array', 'goog.math'], false);\ngoog.addDependency('math/path_test.js', ['goog.math.PathTest'], ['goog.array', 'goog.math.AffineTransform', 'goog.math.Path', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/paths.js', ['goog.math.paths'], ['goog.math.Coordinate', 'goog.math.Path'], false);\ngoog.addDependency('math/paths_test.js', ['goog.math.pathsTest'], ['goog.math.Coordinate', 'goog.math.paths', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/range.js', ['goog.math.Range'], ['goog.asserts'], false);\ngoog.addDependency('math/range_test.js', ['goog.math.RangeTest'], ['goog.math.Range', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/rangeset.js', ['goog.math.RangeSet'], ['goog.array', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.math.Range'], false);\ngoog.addDependency('math/rangeset_test.js', ['goog.math.RangeSetTest'], ['goog.iter', 'goog.math.Range', 'goog.math.RangeSet', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/rect.js', ['goog.math.Rect'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.math.Size'], false);\ngoog.addDependency('math/rect_test.js', ['goog.math.RectTest'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/size.js', ['goog.math.Size'], [], false);\ngoog.addDependency('math/size_test.js', ['goog.math.SizeTest'], ['goog.math.Size', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/tdma.js', ['goog.math.tdma'], [], false);\ngoog.addDependency('math/tdma_test.js', ['goog.math.tdmaTest'], ['goog.math.tdma', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/vec2.js', ['goog.math.Vec2'], ['goog.math', 'goog.math.Coordinate'], false);\ngoog.addDependency('math/vec2_test.js', ['goog.math.Vec2Test'], ['goog.math.Vec2', 'goog.testing.jsunit'], false);\ngoog.addDependency('math/vec3.js', ['goog.math.Vec3'], ['goog.math', 'goog.math.Coordinate3'], false);\ngoog.addDependency('math/vec3_test.js', ['goog.math.Vec3Test'], ['goog.math.Coordinate3', 'goog.math.Vec3', 'goog.testing.jsunit'], false);\ngoog.addDependency('memoize/memoize.js', ['goog.memoize'], [], false);\ngoog.addDependency('memoize/memoize_test.js', ['goog.memoizeTest'], ['goog.memoize', 'goog.testing.jsunit'], false);\ngoog.addDependency('messaging/abstractchannel.js', ['goog.messaging.AbstractChannel'], ['goog.Disposable', 'goog.json', 'goog.log', 'goog.messaging.MessageChannel'], false);\ngoog.addDependency('messaging/abstractchannel_test.js', ['goog.messaging.AbstractChannelTest'], ['goog.messaging.AbstractChannel', 'goog.testing.MockControl', 'goog.testing.async.MockControl', 'goog.testing.jsunit'], false);\ngoog.addDependency('messaging/bufferedchannel.js', ['goog.messaging.BufferedChannel'], ['goog.Disposable', 'goog.Timer', 'goog.events', 'goog.log', 'goog.messaging.MessageChannel', 'goog.messaging.MultiChannel'], false);\ngoog.addDependency('messaging/bufferedchannel_test.js', ['goog.messaging.BufferedChannelTest'], ['goog.debug.Console', 'goog.dom', 'goog.dom.TagName', 'goog.log', 'goog.log.Level', 'goog.messaging.BufferedChannel', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.async.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false);\ngoog.addDependency('messaging/deferredchannel.js', ['goog.messaging.DeferredChannel'], ['goog.Disposable', 'goog.messaging.MessageChannel'], false);\ngoog.addDependency('messaging/deferredchannel_test.js', ['goog.messaging.DeferredChannelTest'], ['goog.async.Deferred', 'goog.messaging.DeferredChannel', 'goog.testing.MockControl', 'goog.testing.async.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false);\ngoog.addDependency('messaging/loggerclient.js', ['goog.messaging.LoggerClient'], ['goog.Disposable', 'goog.debug', 'goog.debug.LogManager', 'goog.debug.Logger'], false);\ngoog.addDependency('messaging/loggerclient_test.js', ['goog.messaging.LoggerClientTest'], ['goog.debug', 'goog.debug.Logger', 'goog.messaging.LoggerClient', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false);\ngoog.addDependency('messaging/loggerserver.js', ['goog.messaging.LoggerServer'], ['goog.Disposable', 'goog.log', 'goog.log.Level'], false);\ngoog.addDependency('messaging/loggerserver_test.js', ['goog.messaging.LoggerServerTest'], ['goog.debug.LogManager', 'goog.debug.Logger', 'goog.log', 'goog.log.Level', 'goog.messaging.LoggerServer', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false);\ngoog.addDependency('messaging/messagechannel.js', ['goog.messaging.MessageChannel'], [], false);\ngoog.addDependency('messaging/messaging.js', ['goog.messaging'], [], false);\ngoog.addDependency('messaging/messaging_test.js', ['goog.testing.messaging.MockMessageChannelTest'], ['goog.messaging', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false);\ngoog.addDependency('messaging/multichannel.js', ['goog.messaging.MultiChannel', 'goog.messaging.MultiChannel.VirtualChannel'], ['goog.Disposable', 'goog.log', 'goog.messaging.MessageChannel', 'goog.object'], false);\ngoog.addDependency('messaging/multichannel_test.js', ['goog.messaging.MultiChannelTest'], ['goog.messaging.MultiChannel', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel', 'goog.testing.mockmatchers.IgnoreArgument'], false);\ngoog.addDependency('messaging/portcaller.js', ['goog.messaging.PortCaller'], ['goog.Disposable', 'goog.async.Deferred', 'goog.messaging.DeferredChannel', 'goog.messaging.PortChannel', 'goog.messaging.PortNetwork', 'goog.object'], false);\ngoog.addDependency('messaging/portcaller_test.js', ['goog.messaging.PortCallerTest'], ['goog.events.EventTarget', 'goog.messaging.PortCaller', 'goog.messaging.PortNetwork', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false);\ngoog.addDependency('messaging/portchannel.js', ['goog.messaging.PortChannel'], ['goog.Timer', 'goog.array', 'goog.async.Deferred', 'goog.debug', 'goog.events', 'goog.events.EventType', 'goog.json', 'goog.log', 'goog.messaging.AbstractChannel', 'goog.messaging.DeferredChannel', 'goog.object', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('messaging/portnetwork.js', ['goog.messaging.PortNetwork'], [], false);\ngoog.addDependency('messaging/portoperator.js', ['goog.messaging.PortOperator'], ['goog.Disposable', 'goog.asserts', 'goog.log', 'goog.messaging.PortChannel', 'goog.messaging.PortNetwork', 'goog.object'], false);\ngoog.addDependency('messaging/portoperator_test.js', ['goog.messaging.PortOperatorTest'], ['goog.messaging.PortNetwork', 'goog.messaging.PortOperator', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel', 'goog.testing.messaging.MockMessagePort'], false);\ngoog.addDependency('messaging/respondingchannel.js', ['goog.messaging.RespondingChannel'], ['goog.Disposable', 'goog.log', 'goog.messaging.MultiChannel'], false);\ngoog.addDependency('messaging/respondingchannel_test.js', ['goog.messaging.RespondingChannelTest'], ['goog.messaging.RespondingChannel', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false);\ngoog.addDependency('messaging/testdata/portchannel_worker.js', ['goog.messaging.testdata.portchannel_worker'], ['goog.messaging.PortChannel'], false);\ngoog.addDependency('messaging/testdata/portnetwork_worker1.js', ['goog.messaging.testdata.portnetwork_worker1'], ['goog.messaging.PortCaller', 'goog.messaging.PortChannel'], false);\ngoog.addDependency('messaging/testdata/portnetwork_worker2.js', ['goog.messaging.testdata.portnetwork_worker2'], ['goog.messaging.PortCaller', 'goog.messaging.PortChannel'], false);\ngoog.addDependency('module/abstractmoduleloader.js', ['goog.module.AbstractModuleLoader'], ['goog.module'], false);\ngoog.addDependency('module/basemodule.js', ['goog.module.BaseModule'], ['goog.Disposable', 'goog.module'], false);\ngoog.addDependency('module/loader.js', ['goog.module.Loader'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.module', 'goog.object'], false);\ngoog.addDependency('module/module.js', ['goog.module'], [], false);\ngoog.addDependency('module/moduleinfo.js', ['goog.module.ModuleInfo'], ['goog.Disposable', 'goog.async.throwException', 'goog.functions', 'goog.module', 'goog.module.BaseModule', 'goog.module.ModuleLoadCallback'], false);\ngoog.addDependency('module/moduleinfo_test.js', ['goog.module.ModuleInfoTest'], ['goog.module.BaseModule', 'goog.module.ModuleInfo', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('module/moduleloadcallback.js', ['goog.module.ModuleLoadCallback'], ['goog.debug.entryPointRegistry', 'goog.module'], false);\ngoog.addDependency('module/moduleloadcallback_test.js', ['goog.module.ModuleLoadCallbackTest'], ['goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.functions', 'goog.module.ModuleLoadCallback', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('module/moduleloader.js', ['goog.module.ModuleLoader'], ['goog.Timer', 'goog.array', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventId', 'goog.events.EventTarget', 'goog.labs.userAgent.browser', 'goog.log', 'goog.module.AbstractModuleLoader', 'goog.net.BulkLoader', 'goog.net.EventType', 'goog.net.jsloader', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('module/moduleloader_test.js', ['goog.module.ModuleLoaderTest'], ['goog.Promise', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.functions', 'goog.module.ModuleLoader', 'goog.module.ModuleManager', 'goog.net.BulkLoader', 'goog.net.XmlHttp', 'goog.object', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.events.EventObserver', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('module/modulemanager.js', ['goog.module.ModuleManager', 'goog.module.ModuleManager.CallbackType', 'goog.module.ModuleManager.FailureType'], ['goog.Disposable', 'goog.array', 'goog.asserts', 'goog.async.Deferred', 'goog.debug.Trace', 'goog.dispose', 'goog.log', 'goog.module', 'goog.module.ModuleInfo', 'goog.module.ModuleLoadCallback', 'goog.object'], false);\ngoog.addDependency('module/modulemanager_test.js', ['goog.module.ModuleManagerTest'], ['goog.array', 'goog.functions', 'goog.module.BaseModule', 'goog.module.ModuleManager', 'goog.testing', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('module/testdata/modA_1.js', ['goog.module.testdata.modA_1'], [], false);\ngoog.addDependency('module/testdata/modA_2.js', ['goog.module.testdata.modA_2'], ['goog.module.ModuleManager'], false);\ngoog.addDependency('module/testdata/modB_1.js', ['goog.module.testdata.modB_1'], ['goog.module.ModuleManager'], false);\ngoog.addDependency('net/browserchannel.js', ['goog.net.BrowserChannel', 'goog.net.BrowserChannel.Error', 'goog.net.BrowserChannel.Event', 'goog.net.BrowserChannel.Handler', 'goog.net.BrowserChannel.LogSaver', 'goog.net.BrowserChannel.QueuedMap', 'goog.net.BrowserChannel.ServerReachability', 'goog.net.BrowserChannel.ServerReachabilityEvent', 'goog.net.BrowserChannel.Stat', 'goog.net.BrowserChannel.StatEvent', 'goog.net.BrowserChannel.State', 'goog.net.BrowserChannel.TimingEvent'], ['goog.Uri', 'goog.array', 'goog.asserts', 'goog.debug.TextFormatter', 'goog.events.Event', 'goog.events.EventTarget', 'goog.json', 'goog.json.EvalJsonProcessor', 'goog.log', 'goog.net.BrowserTestChannel', 'goog.net.ChannelDebug', 'goog.net.ChannelRequest', 'goog.net.XhrIo', 'goog.net.tmpnetwork', 'goog.object', 'goog.string', 'goog.structs', 'goog.structs.CircularBuffer'], false);\ngoog.addDependency('net/browserchannel_test.js', ['goog.net.BrowserChannelTest'], ['goog.Timer', 'goog.array', 'goog.dom', 'goog.functions', 'goog.json', 'goog.net.BrowserChannel', 'goog.net.ChannelDebug', 'goog.net.ChannelRequest', 'goog.net.tmpnetwork', 'goog.structs.Map', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('net/browsertestchannel.js', ['goog.net.BrowserTestChannel'], ['goog.json.EvalJsonProcessor', 'goog.net.ChannelRequest', 'goog.net.ChannelRequest.Error', 'goog.net.tmpnetwork', 'goog.string.Parser'], false);\ngoog.addDependency('net/bulkloader.js', ['goog.net.BulkLoader'], ['goog.events.EventHandler', 'goog.events.EventTarget', 'goog.log', 'goog.net.BulkLoaderHelper', 'goog.net.EventType', 'goog.net.XhrIo'], false);\ngoog.addDependency('net/bulkloader_test.js', ['goog.net.BulkLoaderTest'], ['goog.events.Event', 'goog.events.EventHandler', 'goog.net.BulkLoader', 'goog.net.EventType', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/bulkloaderhelper.js', ['goog.net.BulkLoaderHelper'], ['goog.Disposable'], false);\ngoog.addDependency('net/channeldebug.js', ['goog.net.ChannelDebug'], ['goog.json', 'goog.log'], false);\ngoog.addDependency('net/channelrequest.js', ['goog.net.ChannelRequest', 'goog.net.ChannelRequest.Error'], ['goog.Timer', 'goog.async.Throttle', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events.EventHandler', 'goog.html.SafeUrl', 'goog.html.uncheckedconversions', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.XmlHttp', 'goog.object', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false);\ngoog.addDependency('net/channelrequest_test.js', ['goog.net.ChannelRequestTest'], ['goog.Uri', 'goog.functions', 'goog.net.BrowserChannel', 'goog.net.ChannelDebug', 'goog.net.ChannelRequest', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.testing.recordFunction'], false);\ngoog.addDependency('net/cookies.js', ['goog.net.Cookies', 'goog.net.cookies'], [], false);\ngoog.addDependency('net/cookies_test.js', ['goog.net.cookiesTest'], ['goog.array', 'goog.net.cookies', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/corsxmlhttpfactory.js', ['goog.net.CorsXmlHttpFactory', 'goog.net.IeCorsXhrAdapter'], ['goog.net.HttpStatus', 'goog.net.XhrLike', 'goog.net.XmlHttp', 'goog.net.XmlHttpFactory'], false);\ngoog.addDependency('net/corsxmlhttpfactory_test.js', ['goog.net.CorsXmlHttpFactoryTest'], ['goog.net.CorsXmlHttpFactory', 'goog.net.IeCorsXhrAdapter', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('net/crossdomainrpc.js', ['goog.net.CrossDomainRpc'], ['goog.Uri', 'goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.html.legacyconversions', 'goog.json', 'goog.log', 'goog.net.EventType', 'goog.net.HttpStatus', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('net/crossdomainrpc_test.js', ['goog.net.CrossDomainRpcTest'], ['goog.Promise', 'goog.log', 'goog.net.CrossDomainRpc', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('net/errorcode.js', ['goog.net.ErrorCode'], [], false);\ngoog.addDependency('net/eventtype.js', ['goog.net.EventType'], [], false);\ngoog.addDependency('net/fetchxmlhttpfactory.js', ['goog.net.FetchXmlHttp', 'goog.net.FetchXmlHttpFactory'], ['goog.asserts', 'goog.events.EventTarget', 'goog.functions', 'goog.log', 'goog.net.XhrLike', 'goog.net.XmlHttpFactory'], false);\ngoog.addDependency('net/fetchxmlhttpfactory_test.js', ['goog.net.FetchXmlHttpFactoryTest'], ['goog.net.FetchXmlHttp', 'goog.net.FetchXmlHttpFactory', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('net/filedownloader.js', ['goog.net.FileDownloader', 'goog.net.FileDownloader.Error'], ['goog.Disposable', 'goog.asserts', 'goog.async.Deferred', 'goog.crypt.hash32', 'goog.debug.Error', 'goog.events', 'goog.events.EventHandler', 'goog.fs', 'goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.fs.FileSaver', 'goog.net.EventType', 'goog.net.XhrIo', 'goog.net.XhrIoPool', 'goog.object'], false);\ngoog.addDependency('net/filedownloader_test.js', ['goog.net.FileDownloaderTest'], ['goog.fs.Error', 'goog.net.ErrorCode', 'goog.net.FileDownloader', 'goog.net.XhrIo', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.fs', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit', 'goog.testing.net.XhrIoPool'], false);\ngoog.addDependency('net/httpstatus.js', ['goog.net.HttpStatus'], [], false);\ngoog.addDependency('net/iframe_xhr_test.js', ['goog.net.iframeXhrTest'], ['goog.Timer', 'goog.debug.Console', 'goog.debug.LogManager', 'goog.debug.Logger', 'goog.dom.TagName', 'goog.events', 'goog.net.IframeIo', 'goog.net.XhrIo', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('net/iframeio.js', ['goog.net.IframeIo', 'goog.net.IframeIo.IncrementalDataEvent'], ['goog.Timer', 'goog.Uri', 'goog.array', 'goog.asserts', 'goog.debug', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.html.uncheckedconversions', 'goog.json', 'goog.log', 'goog.log.Level', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.reflect', 'goog.string', 'goog.string.Const', 'goog.structs', 'goog.userAgent'], false);\ngoog.addDependency('net/iframeio_different_base_test.js', ['goog.net.iframeIoDifferentBaseTest'], ['goog.Promise', 'goog.events', 'goog.net.EventType', 'goog.net.IframeIo', 'goog.testing.TestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/iframeio_test.js', ['goog.net.IframeIoTest'], ['goog.debug', 'goog.debug.DivConsole', 'goog.debug.LogManager', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.log', 'goog.log.Level', 'goog.net.IframeIo', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('net/iframeloadmonitor.js', ['goog.net.IframeLoadMonitor'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.userAgent'], false);\ngoog.addDependency('net/iframeloadmonitor_test.js', ['goog.net.IframeLoadMonitorTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.net.IframeLoadMonitor', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/imageloader.js', ['goog.net.ImageLoader'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.net.EventType', 'goog.object', 'goog.userAgent'], false);\ngoog.addDependency('net/imageloader_test.js', ['goog.net.ImageLoaderTest'], ['goog.Timer', 'goog.array', 'goog.dispose', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.net.EventType', 'goog.net.ImageLoader', 'goog.object', 'goog.string', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('net/ipaddress.js', ['goog.net.IpAddress', 'goog.net.Ipv4Address', 'goog.net.Ipv6Address'], ['goog.array', 'goog.math.Integer', 'goog.object', 'goog.string'], false);\ngoog.addDependency('net/ipaddress_test.js', ['goog.net.IpAddressTest'], ['goog.math.Integer', 'goog.net.IpAddress', 'goog.net.Ipv4Address', 'goog.net.Ipv6Address', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/jsloader.js', ['goog.net.jsloader', 'goog.net.jsloader.Error', 'goog.net.jsloader.ErrorCode', 'goog.net.jsloader.Options'], ['goog.array', 'goog.async.Deferred', 'goog.debug.Error', 'goog.dom', 'goog.dom.TagName', 'goog.object'], false);\ngoog.addDependency('net/jsloader_test.js', ['goog.net.jsloaderTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.net.jsloader', 'goog.net.jsloader.ErrorCode', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/jsonp.js', ['goog.net.Jsonp'], ['goog.Uri', 'goog.net.jsloader'], false);\ngoog.addDependency('net/jsonp_test.js', ['goog.net.JsonpTest'], ['goog.net.Jsonp', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('net/mockiframeio.js', ['goog.net.MockIFrameIo'], ['goog.events.EventTarget', 'goog.json', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.IframeIo'], false);\ngoog.addDependency('net/multiiframeloadmonitor.js', ['goog.net.MultiIframeLoadMonitor'], ['goog.events', 'goog.net.IframeLoadMonitor'], false);\ngoog.addDependency('net/multiiframeloadmonitor_test.js', ['goog.net.MultiIframeLoadMonitorTest'], ['goog.dom', 'goog.dom.TagName', 'goog.net.IframeLoadMonitor', 'goog.net.MultiIframeLoadMonitor', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/networkstatusmonitor.js', ['goog.net.NetworkStatusMonitor'], ['goog.events.Listenable'], false);\ngoog.addDependency('net/networktester.js', ['goog.net.NetworkTester'], ['goog.Timer', 'goog.Uri', 'goog.log'], false);\ngoog.addDependency('net/networktester_test.js', ['goog.net.NetworkTesterTest'], ['goog.Uri', 'goog.net.NetworkTester', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/streams/nodereadablestream.js', ['goog.net.streams.NodeReadableStream'], [], false);\ngoog.addDependency('net/streams/streamfactory.js', ['goog.net.streams.createNodeReadableStream'], ['goog.asserts', 'goog.net.XhrIo', 'goog.net.streams.NodeReadableStream'], false);\ngoog.addDependency('net/testdata/jsloader_test1.js', ['goog.net.testdata.jsloader_test1'], [], false);\ngoog.addDependency('net/testdata/jsloader_test2.js', ['goog.net.testdata.jsloader_test2'], [], false);\ngoog.addDependency('net/testdata/jsloader_test3.js', ['goog.net.testdata.jsloader_test3'], [], false);\ngoog.addDependency('net/testdata/jsloader_test4.js', ['goog.net.testdata.jsloader_test4'], [], false);\ngoog.addDependency('net/tmpnetwork.js', ['goog.net.tmpnetwork'], ['goog.Uri', 'goog.net.ChannelDebug'], false);\ngoog.addDependency('net/websocket.js', ['goog.net.WebSocket', 'goog.net.WebSocket.ErrorEvent', 'goog.net.WebSocket.EventType', 'goog.net.WebSocket.MessageEvent'], ['goog.Timer', 'goog.asserts', 'goog.debug.entryPointRegistry', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.log'], false);\ngoog.addDependency('net/websocket_test.js', ['goog.net.WebSocketTest'], ['goog.debug.EntryPointMonitor', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.events', 'goog.functions', 'goog.net.WebSocket', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('net/wrapperxmlhttpfactory.js', ['goog.net.WrapperXmlHttpFactory'], ['goog.net.XhrLike', 'goog.net.XmlHttpFactory'], false);\ngoog.addDependency('net/xhrio.js', ['goog.net.XhrIo', 'goog.net.XhrIo.ResponseType'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.debug.entryPointRegistry', 'goog.events.EventTarget', 'goog.json', 'goog.log', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.HttpStatus', 'goog.net.XmlHttp', 'goog.object', 'goog.string', 'goog.structs', 'goog.structs.Map', 'goog.uri.utils', 'goog.userAgent'], false);\ngoog.addDependency('net/xhrio_test.js', ['goog.net.XhrIoTest'], ['goog.Uri', 'goog.debug.EntryPointMonitor', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.events', 'goog.functions', 'goog.net.EventType', 'goog.net.WrapperXmlHttpFactory', 'goog.net.XhrIo', 'goog.net.XmlHttp', 'goog.object', 'goog.string', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.testing.recordFunction', 'goog.userAgent.product'], false);\ngoog.addDependency('net/xhriopool.js', ['goog.net.XhrIoPool'], ['goog.net.XhrIo', 'goog.structs.PriorityPool'], false);\ngoog.addDependency('net/xhriopool_test.js', ['goog.net.XhrIoPoolTest'], ['goog.net.XhrIoPool', 'goog.structs.Map', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/xhrlike.js', ['goog.net.XhrLike'], [], false);\ngoog.addDependency('net/xhrmanager.js', ['goog.net.XhrManager', 'goog.net.XhrManager.Event', 'goog.net.XhrManager.Request'], ['goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.XhrIo', 'goog.net.XhrIoPool', 'goog.structs.Map'], false);\ngoog.addDependency('net/xhrmanager_test.js', ['goog.net.XhrManagerTest'], ['goog.events', 'goog.net.EventType', 'goog.net.XhrIo', 'goog.net.XhrManager', 'goog.testing.jsunit', 'goog.testing.net.XhrIoPool', 'goog.testing.recordFunction'], false);\ngoog.addDependency('net/xmlhttp.js', ['goog.net.DefaultXmlHttpFactory', 'goog.net.XmlHttp', 'goog.net.XmlHttp.OptionType', 'goog.net.XmlHttp.ReadyState', 'goog.net.XmlHttpDefines'], ['goog.asserts', 'goog.net.WrapperXmlHttpFactory', 'goog.net.XmlHttpFactory'], false);\ngoog.addDependency('net/xmlhttpfactory.js', ['goog.net.XmlHttpFactory'], ['goog.net.XhrLike'], false);\ngoog.addDependency('net/xpc/crosspagechannel.js', ['goog.net.xpc.CrossPageChannel'], ['goog.Uri', 'goog.async.Deferred', 'goog.async.Delay', 'goog.dispose', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.json', 'goog.log', 'goog.messaging.AbstractChannel', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.ChannelStates', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.DirectTransport', 'goog.net.xpc.FrameElementMethodTransport', 'goog.net.xpc.IframePollingTransport', 'goog.net.xpc.IframeRelayTransport', 'goog.net.xpc.NativeMessagingTransport', 'goog.net.xpc.NixTransport', 'goog.net.xpc.TransportTypes', 'goog.net.xpc.UriCfgFields', 'goog.string', 'goog.uri.utils', 'goog.userAgent'], false);\ngoog.addDependency('net/xpc/crosspagechannel_test.js', ['goog.net.xpc.CrossPageChannelTest'], ['goog.Disposable', 'goog.Uri', 'goog.async.Deferred', 'goog.dom', 'goog.dom.TagName', 'goog.labs.userAgent.browser', 'goog.log', 'goog.log.Level', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.TransportTypes', 'goog.object', 'goog.testing.AsyncTestCase', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/xpc/crosspagechannelrole.js', ['goog.net.xpc.CrossPageChannelRole'], [], false);\ngoog.addDependency('net/xpc/directtransport.js', ['goog.net.xpc.DirectTransport'], ['goog.Timer', 'goog.async.Deferred', 'goog.events.EventHandler', 'goog.log', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes', 'goog.object'], false);\ngoog.addDependency('net/xpc/directtransport_test.js', ['goog.net.xpc.DirectTransportTest'], ['goog.Promise', 'goog.dom', 'goog.dom.TagName', 'goog.labs.userAgent.browser', 'goog.log', 'goog.log.Level', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.TransportTypes', 'goog.testing.TestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/xpc/frameelementmethodtransport.js', ['goog.net.xpc.FrameElementMethodTransport'], ['goog.log', 'goog.net.xpc', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes'], false);\ngoog.addDependency('net/xpc/iframepollingtransport.js', ['goog.net.xpc.IframePollingTransport', 'goog.net.xpc.IframePollingTransport.Receiver', 'goog.net.xpc.IframePollingTransport.Sender'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.log', 'goog.log.Level', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes', 'goog.userAgent'], false);\ngoog.addDependency('net/xpc/iframepollingtransport_test.js', ['goog.net.xpc.IframePollingTransportTest'], ['goog.Timer', 'goog.dom', 'goog.dom.TagName', 'goog.functions', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.TransportTypes', 'goog.object', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('net/xpc/iframerelaytransport.js', ['goog.net.xpc.IframeRelayTransport'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.html.SafeHtml', 'goog.log', 'goog.log.Level', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false);\ngoog.addDependency('net/xpc/nativemessagingtransport.js', ['goog.net.xpc.NativeMessagingTransport'], ['goog.Timer', 'goog.asserts', 'goog.async.Deferred', 'goog.events', 'goog.events.EventHandler', 'goog.log', 'goog.net.xpc', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes'], false);\ngoog.addDependency('net/xpc/nativemessagingtransport_test.js', ['goog.net.xpc.NativeMessagingTransportTest'], ['goog.dom', 'goog.events', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.NativeMessagingTransport', 'goog.testing.jsunit'], false);\ngoog.addDependency('net/xpc/nixtransport.js', ['goog.net.xpc.NixTransport'], ['goog.log', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes', 'goog.reflect'], false);\ngoog.addDependency('net/xpc/relay.js', ['goog.net.xpc.relay'], [], false);\ngoog.addDependency('net/xpc/transport.js', ['goog.net.xpc.Transport'], ['goog.Disposable', 'goog.dom', 'goog.net.xpc.TransportNames'], false);\ngoog.addDependency('net/xpc/xpc.js', ['goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.ChannelStates', 'goog.net.xpc.TransportNames', 'goog.net.xpc.TransportTypes', 'goog.net.xpc.UriCfgFields'], ['goog.log'], false);\ngoog.addDependency('object/object.js', ['goog.object'], [], false);\ngoog.addDependency('object/object_test.js', ['goog.objectTest'], ['goog.functions', 'goog.object', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('positioning/absoluteposition.js', ['goog.positioning.AbsolutePosition'], ['goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition'], false);\ngoog.addDependency('positioning/abstractposition.js', ['goog.positioning.AbstractPosition'], [], false);\ngoog.addDependency('positioning/anchoredposition.js', ['goog.positioning.AnchoredPosition'], ['goog.positioning', 'goog.positioning.AbstractPosition'], false);\ngoog.addDependency('positioning/anchoredposition_test.js', ['goog.positioning.AnchoredPositionTest'], ['goog.dom', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.style', 'goog.testing.jsunit'], false);\ngoog.addDependency('positioning/anchoredviewportposition.js', ['goog.positioning.AnchoredViewportPosition'], ['goog.positioning', 'goog.positioning.AnchoredPosition', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus'], false);\ngoog.addDependency('positioning/anchoredviewportposition_test.js', ['goog.positioning.AnchoredViewportPositionTest'], ['goog.dom', 'goog.math.Box', 'goog.positioning.AnchoredViewportPosition', 'goog.positioning.Corner', 'goog.positioning.OverflowStatus', 'goog.style', 'goog.testing.jsunit'], false);\ngoog.addDependency('positioning/clientposition.js', ['goog.positioning.ClientPosition'], ['goog.asserts', 'goog.dom', 'goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition', 'goog.style'], false);\ngoog.addDependency('positioning/clientposition_test.js', ['goog.positioning.clientPositionTest'], ['goog.dom', 'goog.dom.TagName', 'goog.positioning.ClientPosition', 'goog.positioning.Corner', 'goog.style', 'goog.testing.jsunit'], false);\ngoog.addDependency('positioning/menuanchoredposition.js', ['goog.positioning.MenuAnchoredPosition'], ['goog.positioning.AnchoredViewportPosition', 'goog.positioning.Overflow'], false);\ngoog.addDependency('positioning/menuanchoredposition_test.js', ['goog.positioning.MenuAnchoredPositionTest'], ['goog.dom', 'goog.dom.TagName', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.testing.jsunit'], false);\ngoog.addDependency('positioning/positioning.js', ['goog.positioning', 'goog.positioning.Corner', 'goog.positioning.CornerBit', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.style', 'goog.style.bidi'], false);\ngoog.addDependency('positioning/positioning_test.js', ['goog.positioningTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.math.Box', 'goog.math.Coordinate', 'goog.math.Size', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('positioning/viewportclientposition.js', ['goog.positioning.ViewportClientPosition'], ['goog.dom', 'goog.math.Coordinate', 'goog.positioning', 'goog.positioning.ClientPosition', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus', 'goog.style'], false);\ngoog.addDependency('positioning/viewportclientposition_test.js', ['goog.positioning.ViewportClientPositionTest'], ['goog.dom', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.positioning.ViewportClientPosition', 'goog.style', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('positioning/viewportposition.js', ['goog.positioning.ViewportPosition'], ['goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition', 'goog.positioning.Corner', 'goog.style'], false);\ngoog.addDependency('promise/promise.js', ['goog.Promise'], ['goog.Thenable', 'goog.asserts', 'goog.async.FreeList', 'goog.async.run', 'goog.async.throwException', 'goog.debug.Error', 'goog.promise.Resolver'], false);\ngoog.addDependency('promise/promise_test.js', ['goog.PromiseTest'], ['goog.Promise', 'goog.Thenable', 'goog.Timer', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('promise/resolver.js', ['goog.promise.Resolver'], [], false);\ngoog.addDependency('promise/testsuiteadapter.js', ['goog.promise.testSuiteAdapter'], ['goog.Promise'], false);\ngoog.addDependency('promise/thenable.js', ['goog.Thenable'], [], false);\ngoog.addDependency('proto/proto.js', ['goog.proto'], ['goog.proto.Serializer'], false);\ngoog.addDependency('proto/serializer.js', ['goog.proto.Serializer'], ['goog.json.Serializer', 'goog.string'], false);\ngoog.addDependency('proto/serializer_test.js', ['goog.protoTest'], ['goog.proto', 'goog.testing.jsunit'], false);\ngoog.addDependency('proto2/descriptor.js', ['goog.proto2.Descriptor', 'goog.proto2.Metadata'], ['goog.array', 'goog.asserts', 'goog.object', 'goog.string'], false);\ngoog.addDependency('proto2/descriptor_test.js', ['goog.proto2.DescriptorTest'], ['goog.proto2.Descriptor', 'goog.proto2.Message', 'goog.testing.jsunit'], false);\ngoog.addDependency('proto2/fielddescriptor.js', ['goog.proto2.FieldDescriptor'], ['goog.asserts', 'goog.string'], false);\ngoog.addDependency('proto2/fielddescriptor_test.js', ['goog.proto2.FieldDescriptorTest'], ['goog.proto2.FieldDescriptor', 'goog.proto2.Message', 'goog.testing.jsunit'], false);\ngoog.addDependency('proto2/lazydeserializer.js', ['goog.proto2.LazyDeserializer'], ['goog.asserts', 'goog.proto2.Message', 'goog.proto2.Serializer'], false);\ngoog.addDependency('proto2/message.js', ['goog.proto2.Message'], ['goog.asserts', 'goog.proto2.Descriptor', 'goog.proto2.FieldDescriptor'], false);\ngoog.addDependency('proto2/message_test.js', ['goog.proto2.MessageTest'], ['goog.testing.jsunit', 'proto2.TestAllTypes', 'proto2.TestAllTypes.NestedEnum', 'proto2.TestAllTypes.NestedMessage', 'proto2.TestAllTypes.OptionalGroup', 'proto2.TestAllTypes.RepeatedGroup'], false);\ngoog.addDependency('proto2/objectserializer.js', ['goog.proto2.ObjectSerializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.Serializer', 'goog.string'], false);\ngoog.addDependency('proto2/objectserializer_test.js', ['goog.proto2.ObjectSerializerTest'], ['goog.proto2.ObjectSerializer', 'goog.proto2.Serializer', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false);\ngoog.addDependency('proto2/package_test.pb.js', ['someprotopackage.TestPackageTypes'], ['goog.proto2.Message', 'proto2.TestAllTypes'], false);\ngoog.addDependency('proto2/pbliteserializer.js', ['goog.proto2.PbLiteSerializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.LazyDeserializer', 'goog.proto2.Serializer'], false);\ngoog.addDependency('proto2/pbliteserializer_test.js', ['goog.proto2.PbLiteSerializerTest'], ['goog.proto2.PbLiteSerializer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false);\ngoog.addDependency('proto2/proto_test.js', ['goog.proto2.messageTest'], ['goog.proto2.FieldDescriptor', 'goog.testing.jsunit', 'proto2.TestAllTypes', 'someprotopackage.TestPackageTypes'], false);\ngoog.addDependency('proto2/serializer.js', ['goog.proto2.Serializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.Message'], false);\ngoog.addDependency('proto2/test.pb.js', ['proto2.TestAllTypes', 'proto2.TestAllTypes.NestedEnum', 'proto2.TestAllTypes.NestedMessage', 'proto2.TestAllTypes.OptionalGroup', 'proto2.TestAllTypes.RepeatedGroup', 'proto2.TestDefaultChild', 'proto2.TestDefaultParent'], ['goog.proto2.Message'], false);\ngoog.addDependency('proto2/textformatserializer.js', ['goog.proto2.TextFormatSerializer'], ['goog.array', 'goog.asserts', 'goog.json', 'goog.math', 'goog.object', 'goog.proto2.FieldDescriptor', 'goog.proto2.Message', 'goog.proto2.Serializer', 'goog.string'], false);\ngoog.addDependency('proto2/textformatserializer_test.js', ['goog.proto2.TextFormatSerializerTest'], ['goog.proto2.ObjectSerializer', 'goog.proto2.TextFormatSerializer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false);\ngoog.addDependency('proto2/util.js', ['goog.proto2.Util'], ['goog.asserts'], false);\ngoog.addDependency('pubsub/pubsub.js', ['goog.pubsub.PubSub'], ['goog.Disposable', 'goog.array'], false);\ngoog.addDependency('pubsub/pubsub_test.js', ['goog.pubsub.PubSubTest'], ['goog.array', 'goog.pubsub.PubSub', 'goog.testing.jsunit'], false);\ngoog.addDependency('pubsub/topicid.js', ['goog.pubsub.TopicId'], [], false);\ngoog.addDependency('pubsub/typedpubsub.js', ['goog.pubsub.TypedPubSub'], ['goog.Disposable', 'goog.pubsub.PubSub'], false);\ngoog.addDependency('pubsub/typedpubsub_test.js', ['goog.pubsub.TypedPubSubTest'], ['goog.array', 'goog.pubsub.TopicId', 'goog.pubsub.TypedPubSub', 'goog.testing.jsunit'], false);\ngoog.addDependency('reflect/reflect.js', ['goog.reflect'], [], false);\ngoog.addDependency('result/deferredadaptor.js', ['goog.result.DeferredAdaptor'], ['goog.async.Deferred', 'goog.result', 'goog.result.Result'], false);\ngoog.addDependency('result/dependentresult.js', ['goog.result.DependentResult'], ['goog.result.Result'], false);\ngoog.addDependency('result/result_interface.js', ['goog.result.Result'], ['goog.Thenable'], false);\ngoog.addDependency('result/resultutil.js', ['goog.result'], ['goog.array', 'goog.result.DependentResult', 'goog.result.Result', 'goog.result.SimpleResult'], false);\ngoog.addDependency('result/simpleresult.js', ['goog.result.SimpleResult', 'goog.result.SimpleResult.StateError'], ['goog.Promise', 'goog.Thenable', 'goog.debug.Error', 'goog.result.Result'], false);\ngoog.addDependency('soy/data.js', ['goog.soy.data.SanitizedContent', 'goog.soy.data.SanitizedContentKind', 'goog.soy.data.UnsanitizedText'], ['goog.html.SafeHtml', 'goog.html.uncheckedconversions', 'goog.string.Const'], false);\ngoog.addDependency('soy/data_test.js', ['goog.soy.dataTest'], ['goog.html.SafeHtml', 'goog.soy.testHelper', 'goog.testing.jsunit'], false);\ngoog.addDependency('soy/renderer.js', ['goog.soy.InjectedDataSupplier', 'goog.soy.Renderer'], ['goog.asserts', 'goog.dom', 'goog.soy', 'goog.soy.data.SanitizedContent', 'goog.soy.data.SanitizedContentKind'], false);\ngoog.addDependency('soy/renderer_test.js', ['goog.soy.RendererTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.html.SafeHtml', 'goog.i18n.bidi.Dir', 'goog.soy.Renderer', 'goog.soy.data.SanitizedContentKind', 'goog.soy.testHelper', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('soy/soy.js', ['goog.soy'], ['goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.soy.data.SanitizedContent', 'goog.soy.data.SanitizedContentKind', 'goog.string'], false);\ngoog.addDependency('soy/soy_test.js', ['goog.soyTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.functions', 'goog.soy', 'goog.soy.testHelper', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('soy/soy_testhelper.js', ['goog.soy.testHelper'], ['goog.dom', 'goog.dom.TagName', 'goog.i18n.bidi.Dir', 'goog.soy.data.SanitizedContent', 'goog.soy.data.SanitizedContentKind', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('spell/spellcheck.js', ['goog.spell.SpellCheck', 'goog.spell.SpellCheck.WordChangedEvent'], ['goog.Timer', 'goog.events.Event', 'goog.events.EventTarget', 'goog.structs.Set'], false);\ngoog.addDependency('spell/spellcheck_test.js', ['goog.spell.SpellCheckTest'], ['goog.spell.SpellCheck', 'goog.testing.jsunit'], false);\ngoog.addDependency('stats/basicstat.js', ['goog.stats.BasicStat'], ['goog.asserts', 'goog.log', 'goog.string.format', 'goog.structs.CircularBuffer'], false);\ngoog.addDependency('stats/basicstat_test.js', ['goog.stats.BasicStatTest'], ['goog.array', 'goog.stats.BasicStat', 'goog.string.format', 'goog.testing.PseudoRandom', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('storage/collectablestorage.js', ['goog.storage.CollectableStorage'], ['goog.array', 'goog.iter', 'goog.storage.ErrorCode', 'goog.storage.ExpiringStorage', 'goog.storage.RichStorage'], false);\ngoog.addDependency('storage/collectablestorage_test.js', ['goog.storage.CollectableStorageTest'], ['goog.storage.CollectableStorage', 'goog.storage.collectableStorageTester', 'goog.storage.storage_test', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false);\ngoog.addDependency('storage/collectablestoragetester.js', ['goog.storage.collectableStorageTester'], ['goog.testing.asserts'], false);\ngoog.addDependency('storage/encryptedstorage.js', ['goog.storage.EncryptedStorage'], ['goog.crypt', 'goog.crypt.Arc4', 'goog.crypt.Sha1', 'goog.crypt.base64', 'goog.json', 'goog.json.Serializer', 'goog.storage.CollectableStorage', 'goog.storage.ErrorCode', 'goog.storage.RichStorage'], false);\ngoog.addDependency('storage/encryptedstorage_test.js', ['goog.storage.EncryptedStorageTest'], ['goog.json', 'goog.storage.EncryptedStorage', 'goog.storage.ErrorCode', 'goog.storage.RichStorage', 'goog.storage.collectableStorageTester', 'goog.storage.storage_test', 'goog.testing.MockClock', 'goog.testing.PseudoRandom', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false);\ngoog.addDependency('storage/errorcode.js', ['goog.storage.ErrorCode'], [], false);\ngoog.addDependency('storage/expiringstorage.js', ['goog.storage.ExpiringStorage'], ['goog.storage.RichStorage'], false);\ngoog.addDependency('storage/expiringstorage_test.js', ['goog.storage.ExpiringStorageTest'], ['goog.storage.ExpiringStorage', 'goog.storage.storage_test', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false);\ngoog.addDependency('storage/mechanism/errorcode.js', ['goog.storage.mechanism.ErrorCode'], [], false);\ngoog.addDependency('storage/mechanism/errorhandlingmechanism.js', ['goog.storage.mechanism.ErrorHandlingMechanism'], ['goog.storage.mechanism.Mechanism'], false);\ngoog.addDependency('storage/mechanism/errorhandlingmechanism_test.js', ['goog.storage.mechanism.ErrorHandlingMechanismTest'], ['goog.storage.mechanism.ErrorHandlingMechanism', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('storage/mechanism/html5localstorage.js', ['goog.storage.mechanism.HTML5LocalStorage'], ['goog.storage.mechanism.HTML5WebStorage'], false);\ngoog.addDependency('storage/mechanism/html5localstorage_test.js', ['goog.storage.mechanism.HTML5LocalStorageTest'], ['goog.storage.mechanism.HTML5LocalStorage', 'goog.storage.mechanism.mechanismSeparationTester', 'goog.storage.mechanism.mechanismSharingTester', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('storage/mechanism/html5sessionstorage.js', ['goog.storage.mechanism.HTML5SessionStorage'], ['goog.storage.mechanism.HTML5WebStorage'], false);\ngoog.addDependency('storage/mechanism/html5sessionstorage_test.js', ['goog.storage.mechanism.HTML5SessionStorageTest'], ['goog.storage.mechanism.HTML5SessionStorage', 'goog.storage.mechanism.mechanismSeparationTester', 'goog.storage.mechanism.mechanismSharingTester', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('storage/mechanism/html5webstorage.js', ['goog.storage.mechanism.HTML5WebStorage'], ['goog.asserts', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.storage.mechanism.ErrorCode', 'goog.storage.mechanism.IterableMechanism'], false);\ngoog.addDependency('storage/mechanism/html5webstorage_test.js', ['goog.storage.mechanism.HTML5MockStorage', 'goog.storage.mechanism.HTML5WebStorageTest', 'goog.storage.mechanism.MockThrowableStorage'], ['goog.storage.mechanism.ErrorCode', 'goog.storage.mechanism.HTML5WebStorage', 'goog.testing.jsunit'], false);\ngoog.addDependency('storage/mechanism/ieuserdata.js', ['goog.storage.mechanism.IEUserData'], ['goog.asserts', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.storage.mechanism.ErrorCode', 'goog.storage.mechanism.IterableMechanism', 'goog.structs.Map', 'goog.userAgent'], false);\ngoog.addDependency('storage/mechanism/ieuserdata_test.js', ['goog.storage.mechanism.IEUserDataTest'], ['goog.storage.mechanism.IEUserData', 'goog.storage.mechanism.mechanismSeparationTester', 'goog.storage.mechanism.mechanismSharingTester', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('storage/mechanism/iterablemechanism.js', ['goog.storage.mechanism.IterableMechanism'], ['goog.array', 'goog.asserts', 'goog.iter', 'goog.storage.mechanism.Mechanism'], false);\ngoog.addDependency('storage/mechanism/iterablemechanismtester.js', ['goog.storage.mechanism.iterableMechanismTester'], ['goog.iter.Iterator', 'goog.storage.mechanism.IterableMechanism', 'goog.testing.asserts'], false);\ngoog.addDependency('storage/mechanism/mechanism.js', ['goog.storage.mechanism.Mechanism'], [], false);\ngoog.addDependency('storage/mechanism/mechanismfactory.js', ['goog.storage.mechanism.mechanismfactory'], ['goog.storage.mechanism.HTML5LocalStorage', 'goog.storage.mechanism.HTML5SessionStorage', 'goog.storage.mechanism.IEUserData', 'goog.storage.mechanism.PrefixedMechanism'], false);\ngoog.addDependency('storage/mechanism/mechanismfactory_test.js', ['goog.storage.mechanism.mechanismfactoryTest'], ['goog.storage.mechanism.mechanismfactory', 'goog.testing.jsunit'], false);\ngoog.addDependency('storage/mechanism/mechanismseparationtester.js', ['goog.storage.mechanism.mechanismSeparationTester'], ['goog.iter.StopIteration', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.asserts'], false);\ngoog.addDependency('storage/mechanism/mechanismsharingtester.js', ['goog.storage.mechanism.mechanismSharingTester'], ['goog.iter.StopIteration', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.asserts'], false);\ngoog.addDependency('storage/mechanism/mechanismtestdefinition.js', ['goog.storage.mechanism.mechanismTestDefinition'], [], false);\ngoog.addDependency('storage/mechanism/mechanismtester.js', ['goog.storage.mechanism.mechanismTester'], ['goog.storage.mechanism.ErrorCode', 'goog.testing.asserts', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('storage/mechanism/prefixedmechanism.js', ['goog.storage.mechanism.PrefixedMechanism'], ['goog.iter.Iterator', 'goog.storage.mechanism.IterableMechanism'], false);\ngoog.addDependency('storage/mechanism/prefixedmechanism_test.js', ['goog.storage.mechanism.PrefixedMechanismTest'], ['goog.storage.mechanism.HTML5LocalStorage', 'goog.storage.mechanism.PrefixedMechanism', 'goog.storage.mechanism.mechanismSeparationTester', 'goog.storage.mechanism.mechanismSharingTester', 'goog.testing.jsunit'], false);\ngoog.addDependency('storage/richstorage.js', ['goog.storage.RichStorage', 'goog.storage.RichStorage.Wrapper'], ['goog.storage.ErrorCode', 'goog.storage.Storage'], false);\ngoog.addDependency('storage/richstorage_test.js', ['goog.storage.RichStorageTest'], ['goog.storage.ErrorCode', 'goog.storage.RichStorage', 'goog.storage.storage_test', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false);\ngoog.addDependency('storage/storage.js', ['goog.storage.Storage'], ['goog.json', 'goog.storage.ErrorCode'], false);\ngoog.addDependency('storage/storage_test.js', ['goog.storage.storage_test'], ['goog.structs.Map', 'goog.testing.asserts'], false);\ngoog.addDependency('string/const.js', ['goog.string.Const'], ['goog.asserts', 'goog.string.TypedString'], false);\ngoog.addDependency('string/const_test.js', ['goog.string.constTest'], ['goog.string.Const', 'goog.testing.jsunit'], false);\ngoog.addDependency('string/linkify.js', ['goog.string.linkify'], ['goog.string'], false);\ngoog.addDependency('string/linkify_test.js', ['goog.string.linkifyTest'], ['goog.dom.TagName', 'goog.string', 'goog.string.linkify', 'goog.testing.dom', 'goog.testing.jsunit'], false);\ngoog.addDependency('string/newlines.js', ['goog.string.newlines', 'goog.string.newlines.Line'], ['goog.array'], false);\ngoog.addDependency('string/newlines_test.js', ['goog.string.newlinesTest'], ['goog.string.newlines', 'goog.testing.jsunit'], false);\ngoog.addDependency('string/parser.js', ['goog.string.Parser'], [], false);\ngoog.addDependency('string/path.js', ['goog.string.path'], ['goog.array', 'goog.string'], false);\ngoog.addDependency('string/path_test.js', ['goog.string.pathTest'], ['goog.string.path', 'goog.testing.jsunit'], false);\ngoog.addDependency('string/string.js', ['goog.string', 'goog.string.Unicode'], [], false);\ngoog.addDependency('string/string_test.js', ['goog.stringTest'], ['goog.dom.TagName', 'goog.functions', 'goog.object', 'goog.string', 'goog.string.Unicode', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false);\ngoog.addDependency('string/stringbuffer.js', ['goog.string.StringBuffer'], [], false);\ngoog.addDependency('string/stringbuffer_test.js', ['goog.string.StringBufferTest'], ['goog.string.StringBuffer', 'goog.testing.jsunit'], false);\ngoog.addDependency('string/stringformat.js', ['goog.string.format'], ['goog.string'], false);\ngoog.addDependency('string/stringformat_test.js', ['goog.string.formatTest'], ['goog.string.format', 'goog.testing.jsunit'], false);\ngoog.addDependency('string/stringifier.js', ['goog.string.Stringifier'], [], false);\ngoog.addDependency('string/typedstring.js', ['goog.string.TypedString'], [], false);\ngoog.addDependency('structs/avltree.js', ['goog.structs.AvlTree', 'goog.structs.AvlTree.Node'], ['goog.structs.Collection'], false);\ngoog.addDependency('structs/avltree_test.js', ['goog.structs.AvlTreeTest'], ['goog.array', 'goog.structs.AvlTree', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/circularbuffer.js', ['goog.structs.CircularBuffer'], [], false);\ngoog.addDependency('structs/circularbuffer_test.js', ['goog.structs.CircularBufferTest'], ['goog.structs.CircularBuffer', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/collection.js', ['goog.structs.Collection'], [], false);\ngoog.addDependency('structs/collection_test.js', ['goog.structs.CollectionTest'], ['goog.structs.AvlTree', 'goog.structs.Set', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/heap.js', ['goog.structs.Heap'], ['goog.array', 'goog.object', 'goog.structs.Node'], false);\ngoog.addDependency('structs/heap_test.js', ['goog.structs.HeapTest'], ['goog.structs', 'goog.structs.Heap', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/inversionmap.js', ['goog.structs.InversionMap'], ['goog.array'], false);\ngoog.addDependency('structs/inversionmap_test.js', ['goog.structs.InversionMapTest'], ['goog.structs.InversionMap', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/linkedmap.js', ['goog.structs.LinkedMap'], ['goog.structs.Map'], false);\ngoog.addDependency('structs/linkedmap_test.js', ['goog.structs.LinkedMapTest'], ['goog.structs.LinkedMap', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('structs/map.js', ['goog.structs.Map'], ['goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.object'], false);\ngoog.addDependency('structs/map_test.js', ['goog.structs.MapTest'], ['goog.iter', 'goog.structs', 'goog.structs.Map', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/node.js', ['goog.structs.Node'], [], false);\ngoog.addDependency('structs/pool.js', ['goog.structs.Pool'], ['goog.Disposable', 'goog.structs.Queue', 'goog.structs.Set'], false);\ngoog.addDependency('structs/pool_test.js', ['goog.structs.PoolTest'], ['goog.structs.Pool', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/prioritypool.js', ['goog.structs.PriorityPool'], ['goog.structs.Pool', 'goog.structs.PriorityQueue'], false);\ngoog.addDependency('structs/prioritypool_test.js', ['goog.structs.PriorityPoolTest'], ['goog.structs.PriorityPool', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/priorityqueue.js', ['goog.structs.PriorityQueue'], ['goog.structs.Heap'], false);\ngoog.addDependency('structs/priorityqueue_test.js', ['goog.structs.PriorityQueueTest'], ['goog.structs', 'goog.structs.PriorityQueue', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/quadtree.js', ['goog.structs.QuadTree', 'goog.structs.QuadTree.Node', 'goog.structs.QuadTree.Point'], ['goog.math.Coordinate'], false);\ngoog.addDependency('structs/quadtree_test.js', ['goog.structs.QuadTreeTest'], ['goog.structs', 'goog.structs.QuadTree', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/queue.js', ['goog.structs.Queue'], ['goog.array'], false);\ngoog.addDependency('structs/queue_test.js', ['goog.structs.QueueTest'], ['goog.structs.Queue', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/set.js', ['goog.structs.Set'], ['goog.structs', 'goog.structs.Collection', 'goog.structs.Map'], false);\ngoog.addDependency('structs/set_test.js', ['goog.structs.SetTest'], ['goog.iter', 'goog.structs', 'goog.structs.Set', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/simplepool.js', ['goog.structs.SimplePool'], ['goog.Disposable'], false);\ngoog.addDependency('structs/stringset.js', ['goog.structs.StringSet'], ['goog.asserts', 'goog.iter'], false);\ngoog.addDependency('structs/stringset_test.js', ['goog.structs.StringSetTest'], ['goog.array', 'goog.iter', 'goog.structs.StringSet', 'goog.testing.asserts', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/structs.js', ['goog.structs'], ['goog.array', 'goog.object'], false);\ngoog.addDependency('structs/structs_test.js', ['goog.structsTest'], ['goog.array', 'goog.dom.TagName', 'goog.structs', 'goog.structs.Map', 'goog.structs.Set', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/treenode.js', ['goog.structs.TreeNode'], ['goog.array', 'goog.asserts', 'goog.structs.Node'], false);\ngoog.addDependency('structs/treenode_test.js', ['goog.structs.TreeNodeTest'], ['goog.structs.TreeNode', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/trie.js', ['goog.structs.Trie'], ['goog.object', 'goog.structs'], false);\ngoog.addDependency('structs/trie_test.js', ['goog.structs.TrieTest'], ['goog.object', 'goog.structs', 'goog.structs.Trie', 'goog.testing.jsunit'], false);\ngoog.addDependency('structs/weak/weak.js', ['goog.structs.weak'], ['goog.userAgent'], false);\ngoog.addDependency('structs/weak/weak_test.js', ['goog.structs.weakTest'], ['goog.array', 'goog.structs.weak', 'goog.testing.jsunit'], false);\ngoog.addDependency('style/bidi.js', ['goog.style.bidi'], ['goog.dom', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('style/bidi_test.js', ['goog.style.bidiTest'], ['goog.dom', 'goog.style', 'goog.style.bidi', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('style/cursor.js', ['goog.style.cursor'], ['goog.userAgent'], false);\ngoog.addDependency('style/cursor_test.js', ['goog.style.cursorTest'], ['goog.style.cursor', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('style/style.js', ['goog.style'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.vendor', 'goog.math.Box', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.object', 'goog.string', 'goog.userAgent'], false);\ngoog.addDependency('style/style_document_scroll_test.js', ['goog.style.style_document_scroll_test'], ['goog.dom', 'goog.style', 'goog.testing.jsunit'], false);\ngoog.addDependency('style/style_test.js', ['goog.style_test'], ['goog.array', 'goog.color', 'goog.dom', 'goog.dom.TagName', 'goog.events.BrowserEvent', 'goog.labs.userAgent.util', 'goog.math.Box', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.object', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.MockUserAgent', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgentTestUtil', 'goog.userAgentTestUtil.UserAgents'], false);\ngoog.addDependency('style/style_webkit_scrollbars_test.js', ['goog.style.webkitScrollbarsTest'], ['goog.asserts', 'goog.style', 'goog.styleScrollbarTester', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('style/stylescrollbartester.js', ['goog.styleScrollbarTester'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.asserts'], false);\ngoog.addDependency('style/transform.js', ['goog.style.transform'], ['goog.functions', 'goog.math.Coordinate', 'goog.math.Coordinate3', 'goog.style', 'goog.userAgent', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('style/transform_test.js', ['goog.style.transformTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style.transform', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('style/transition.js', ['goog.style.transition', 'goog.style.transition.Css3Property'], ['goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.safe', 'goog.dom.vendor', 'goog.functions', 'goog.html.SafeHtml', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('style/transition_test.js', ['goog.style.transitionTest'], ['goog.style', 'goog.style.transition', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('test_module.js', ['goog.test_module'], ['goog.test_module_dep'], true);\ngoog.addDependency('test_module_dep.js', ['goog.test_module_dep'], [], true);\ngoog.addDependency('testing/asserts.js', ['goog.testing.JsUnitException', 'goog.testing.asserts', 'goog.testing.asserts.ArrayLike'], ['goog.testing.stacktrace'], false);\ngoog.addDependency('testing/asserts_test.js', ['goog.testing.assertsTest'], ['goog.array', 'goog.dom', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.labs.userAgent.browser', 'goog.string', 'goog.structs.Map', 'goog.structs.Set', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('testing/async/mockcontrol.js', ['goog.testing.async.MockControl'], ['goog.asserts', 'goog.async.Deferred', 'goog.debug', 'goog.testing.asserts', 'goog.testing.mockmatchers.IgnoreArgument'], false);\ngoog.addDependency('testing/async/mockcontrol_test.js', ['goog.testing.async.MockControlTest'], ['goog.async.Deferred', 'goog.testing.MockControl', 'goog.testing.asserts', 'goog.testing.async.MockControl', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/asynctestcase.js', ['goog.testing.AsyncTestCase', 'goog.testing.AsyncTestCase.ControlBreakingException'], ['goog.testing.TestCase', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/asynctestcase_async_test.js', ['goog.testing.AsyncTestCaseAsyncTest'], ['goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/asynctestcase_noasync_test.js', ['goog.testing.AsyncTestCaseSyncTest'], ['goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/asynctestcase_test.js', ['goog.testing.AsyncTestCaseTest'], ['goog.debug.Error', 'goog.testing.AsyncTestCase', 'goog.testing.asserts', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/benchmark.js', ['goog.testing.benchmark'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.PerformanceTable', 'goog.testing.PerformanceTimer', 'goog.testing.TestCase'], false);\ngoog.addDependency('testing/continuationtestcase.js', ['goog.testing.ContinuationTestCase', 'goog.testing.ContinuationTestCase.Step', 'goog.testing.ContinuationTestCase.Test'], ['goog.array', 'goog.events.EventHandler', 'goog.testing.TestCase', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/continuationtestcase_test.js', ['goog.testing.ContinuationTestCaseTest'], ['goog.events', 'goog.events.EventTarget', 'goog.testing.ContinuationTestCase', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/deferredtestcase.js', ['goog.testing.DeferredTestCase'], ['goog.testing.AsyncTestCase', 'goog.testing.TestCase'], false);\ngoog.addDependency('testing/deferredtestcase_test.js', ['goog.testing.DeferredTestCaseTest'], ['goog.async.Deferred', 'goog.testing.DeferredTestCase', 'goog.testing.TestCase', 'goog.testing.TestRunner', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('testing/dom.js', ['goog.testing.dom'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.NodeIterator', 'goog.dom.NodeType', 'goog.dom.TagIterator', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.iter', 'goog.object', 'goog.string', 'goog.style', 'goog.testing.asserts', 'goog.userAgent'], false);\ngoog.addDependency('testing/dom_test.js', ['goog.testing.domTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('testing/editor/dom.js', ['goog.testing.editor.dom'], ['goog.dom.NodeType', 'goog.dom.TagIterator', 'goog.dom.TagWalkType', 'goog.iter', 'goog.string', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/editor/dom_test.js', ['goog.testing.editor.domTest'], ['goog.dom', 'goog.dom.TagName', 'goog.functions', 'goog.testing.editor.dom', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/editor/fieldmock.js', ['goog.testing.editor.FieldMock'], ['goog.dom', 'goog.dom.Range', 'goog.editor.Field', 'goog.testing.LooseMock', 'goog.testing.mockmatchers'], false);\ngoog.addDependency('testing/editor/testhelper.js', ['goog.testing.editor.TestHelper'], ['goog.Disposable', 'goog.dom', 'goog.dom.Range', 'goog.editor.BrowserFeature', 'goog.editor.node', 'goog.editor.plugins.AbstractBubblePlugin', 'goog.testing.dom'], false);\ngoog.addDependency('testing/editor/testhelper_test.js', ['goog.testing.editor.TestHelperTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.node', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('testing/events/eventobserver.js', ['goog.testing.events.EventObserver'], ['goog.array'], false);\ngoog.addDependency('testing/events/eventobserver_test.js', ['goog.testing.events.EventObserverTest'], ['goog.array', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.testing.events.EventObserver', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/events/events.js', ['goog.testing.events', 'goog.testing.events.Event'], ['goog.Disposable', 'goog.asserts', 'goog.dom.NodeType', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.BrowserFeature', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.object', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('testing/events/events_test.js', ['goog.testing.eventsTest'], ['goog.array', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Coordinate', 'goog.string', 'goog.style', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false);\ngoog.addDependency('testing/events/matchers.js', ['goog.testing.events.EventMatcher'], ['goog.events.Event', 'goog.testing.mockmatchers.ArgumentMatcher'], false);\ngoog.addDependency('testing/events/matchers_test.js', ['goog.testing.events.EventMatcherTest'], ['goog.events.Event', 'goog.testing.events.EventMatcher', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/events/onlinehandler.js', ['goog.testing.events.OnlineHandler'], ['goog.events.EventTarget', 'goog.net.NetworkStatusMonitor'], false);\ngoog.addDependency('testing/events/onlinehandler_test.js', ['goog.testing.events.OnlineHandlerTest'], ['goog.events', 'goog.net.NetworkStatusMonitor', 'goog.testing.events.EventObserver', 'goog.testing.events.OnlineHandler', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/expectedfailures.js', ['goog.testing.ExpectedFailures'], ['goog.debug.DivConsole', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.log', 'goog.style', 'goog.testing.JsUnitException', 'goog.testing.TestCase', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/expectedfailures_test.js', ['goog.testing.ExpectedFailuresTest'], ['goog.debug.Logger', 'goog.testing.ExpectedFailures', 'goog.testing.JsUnitException', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/blob.js', ['goog.testing.fs.Blob'], ['goog.crypt.base64'], false);\ngoog.addDependency('testing/fs/blob_test.js', ['goog.testing.fs.BlobTest'], ['goog.testing.fs.Blob', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/directoryentry_test.js', ['goog.testing.fs.DirectoryEntryTest'], ['goog.array', 'goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.testing.MockClock', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/entry.js', ['goog.testing.fs.DirectoryEntry', 'goog.testing.fs.Entry', 'goog.testing.fs.FileEntry'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.async.Deferred', 'goog.fs.DirectoryEntry', 'goog.fs.DirectoryEntryImpl', 'goog.fs.Entry', 'goog.fs.Error', 'goog.fs.FileEntry', 'goog.functions', 'goog.object', 'goog.string', 'goog.testing.fs.File', 'goog.testing.fs.FileWriter'], false);\ngoog.addDependency('testing/fs/entry_test.js', ['goog.testing.fs.EntryTest'], ['goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.testing.MockClock', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/file.js', ['goog.testing.fs.File'], ['goog.testing.fs.Blob'], false);\ngoog.addDependency('testing/fs/fileentry_test.js', ['goog.testing.fs.FileEntryTest'], ['goog.testing.MockClock', 'goog.testing.fs.FileEntry', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/filereader.js', ['goog.testing.fs.FileReader'], ['goog.Timer', 'goog.events.EventTarget', 'goog.fs.Error', 'goog.fs.FileReader', 'goog.testing.fs.ProgressEvent'], false);\ngoog.addDependency('testing/fs/filereader_test.js', ['goog.testing.fs.FileReaderTest'], ['goog.Promise', 'goog.array', 'goog.events', 'goog.fs.Error', 'goog.fs.FileReader', 'goog.object', 'goog.testing.events.EventObserver', 'goog.testing.fs.FileReader', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/filesystem.js', ['goog.testing.fs.FileSystem'], ['goog.fs.FileSystem', 'goog.testing.fs.DirectoryEntry'], false);\ngoog.addDependency('testing/fs/filewriter.js', ['goog.testing.fs.FileWriter'], ['goog.Timer', 'goog.events.EventTarget', 'goog.fs.Error', 'goog.fs.FileSaver', 'goog.string', 'goog.testing.fs.ProgressEvent'], false);\ngoog.addDependency('testing/fs/filewriter_test.js', ['goog.testing.fs.FileWriterTest'], ['goog.Promise', 'goog.array', 'goog.events', 'goog.fs.Error', 'goog.fs.FileSaver', 'goog.object', 'goog.testing.MockClock', 'goog.testing.events.EventObserver', 'goog.testing.fs.Blob', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/fs.js', ['goog.testing.fs'], ['goog.Timer', 'goog.array', 'goog.async.Deferred', 'goog.fs', 'goog.testing.fs.Blob', 'goog.testing.fs.FileSystem'], false);\ngoog.addDependency('testing/fs/fs_test.js', ['goog.testing.fsTest'], ['goog.testing.AsyncTestCase', 'goog.testing.fs', 'goog.testing.fs.Blob', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/integration_test.js', ['goog.testing.fs.integrationTest'], ['goog.Promise', 'goog.events', 'goog.fs', 'goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.fs.FileSaver', 'goog.testing.PropertyReplacer', 'goog.testing.fs', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/fs/progressevent.js', ['goog.testing.fs.ProgressEvent'], ['goog.events.Event'], false);\ngoog.addDependency('testing/functionmock.js', ['goog.testing', 'goog.testing.FunctionMock', 'goog.testing.GlobalFunctionMock', 'goog.testing.MethodMock'], ['goog.object', 'goog.testing.LooseMock', 'goog.testing.Mock', 'goog.testing.PropertyReplacer', 'goog.testing.StrictMock'], false);\ngoog.addDependency('testing/functionmock_test.js', ['goog.testing.FunctionMockTest'], ['goog.array', 'goog.string', 'goog.testing', 'goog.testing.FunctionMock', 'goog.testing.Mock', 'goog.testing.StrictMock', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.mockmatchers'], false);\ngoog.addDependency('testing/graphics.js', ['goog.testing.graphics'], ['goog.graphics.Path', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/i18n/asserts.js', ['goog.testing.i18n.asserts'], ['goog.testing.jsunit'], false);\ngoog.addDependency('testing/i18n/asserts_test.js', ['goog.testing.i18n.assertsTest'], ['goog.testing.ExpectedFailures', 'goog.testing.i18n.asserts'], false);\ngoog.addDependency('testing/jstdtestcaseadapter.js', ['goog.testing.JsTdTestCaseAdapter'], ['goog.async.run', 'goog.testing.TestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/jsunit.js', ['goog.testing.jsunit'], ['goog.dom.TagName', 'goog.testing.TestCase', 'goog.testing.TestRunner'], false);\ngoog.addDependency('testing/loosemock.js', ['goog.testing.LooseExpectationCollection', 'goog.testing.LooseMock'], ['goog.array', 'goog.structs.Map', 'goog.testing.Mock'], false);\ngoog.addDependency('testing/loosemock_test.js', ['goog.testing.LooseMockTest'], ['goog.testing.LooseMock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.mockmatchers'], false);\ngoog.addDependency('testing/messaging/mockmessagechannel.js', ['goog.testing.messaging.MockMessageChannel'], ['goog.messaging.AbstractChannel', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/messaging/mockmessageevent.js', ['goog.testing.messaging.MockMessageEvent'], ['goog.events.BrowserEvent', 'goog.events.EventType', 'goog.testing.events.Event'], false);\ngoog.addDependency('testing/messaging/mockmessageport.js', ['goog.testing.messaging.MockMessagePort'], ['goog.events.EventTarget'], false);\ngoog.addDependency('testing/messaging/mockportnetwork.js', ['goog.testing.messaging.MockPortNetwork'], ['goog.messaging.PortNetwork', 'goog.testing.messaging.MockMessageChannel'], false);\ngoog.addDependency('testing/mock.js', ['goog.testing.Mock', 'goog.testing.MockExpectation'], ['goog.array', 'goog.object', 'goog.testing.JsUnitException', 'goog.testing.MockInterface', 'goog.testing.mockmatchers'], false);\ngoog.addDependency('testing/mock_test.js', ['goog.testing.MockTest'], ['goog.array', 'goog.testing', 'goog.testing.Mock', 'goog.testing.MockControl', 'goog.testing.MockExpectation', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/mockclassfactory.js', ['goog.testing.MockClassFactory', 'goog.testing.MockClassRecord'], ['goog.array', 'goog.object', 'goog.testing.LooseMock', 'goog.testing.StrictMock', 'goog.testing.TestCase', 'goog.testing.mockmatchers'], false);\ngoog.addDependency('testing/mockclassfactory_test.js', ['fake.BaseClass', 'fake.ChildClass', 'goog.testing.MockClassFactoryTest'], ['goog.testing', 'goog.testing.MockClassFactory', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/mockclock.js', ['goog.testing.MockClock'], ['goog.Disposable', 'goog.async.run', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.watchers'], false);\ngoog.addDependency('testing/mockclock_test.js', ['goog.testing.MockClockTest'], ['goog.Promise', 'goog.Timer', 'goog.events', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false);\ngoog.addDependency('testing/mockcontrol.js', ['goog.testing.MockControl'], ['goog.array', 'goog.testing', 'goog.testing.LooseMock', 'goog.testing.StrictMock'], false);\ngoog.addDependency('testing/mockcontrol_test.js', ['goog.testing.MockControlTest'], ['goog.testing.Mock', 'goog.testing.MockControl', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/mockinterface.js', ['goog.testing.MockInterface'], [], false);\ngoog.addDependency('testing/mockmatchers.js', ['goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.testing.mockmatchers.IgnoreArgument', 'goog.testing.mockmatchers.InstanceOf', 'goog.testing.mockmatchers.ObjectEquals', 'goog.testing.mockmatchers.RegexpMatch', 'goog.testing.mockmatchers.SaveArgument', 'goog.testing.mockmatchers.TypeOf'], ['goog.array', 'goog.dom', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/mockmatchers_test.js', ['goog.testing.mockmatchersTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher'], false);\ngoog.addDependency('testing/mockrandom.js', ['goog.testing.MockRandom'], ['goog.Disposable'], false);\ngoog.addDependency('testing/mockrandom_test.js', ['goog.testing.MockRandomTest'], ['goog.testing.MockRandom', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/mockrange.js', ['goog.testing.MockRange'], ['goog.dom.AbstractRange', 'goog.testing.LooseMock'], false);\ngoog.addDependency('testing/mockrange_test.js', ['goog.testing.MockRangeTest'], ['goog.testing.MockRange', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/mockstorage.js', ['goog.testing.MockStorage'], ['goog.structs.Map'], false);\ngoog.addDependency('testing/mockstorage_test.js', ['goog.testing.MockStorageTest'], ['goog.testing.MockStorage', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/mockuseragent.js', ['goog.testing.MockUserAgent'], ['goog.Disposable', 'goog.labs.userAgent.util', 'goog.testing.PropertyReplacer', 'goog.userAgent'], false);\ngoog.addDependency('testing/mockuseragent_test.js', ['goog.testing.MockUserAgentTest'], ['goog.dispose', 'goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('testing/multitestrunner.js', ['goog.testing.MultiTestRunner', 'goog.testing.MultiTestRunner.TestFrame'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.functions', 'goog.string', 'goog.ui.Component', 'goog.ui.ServerChart', 'goog.ui.TableSorter'], false);\ngoog.addDependency('testing/net/xhrio.js', ['goog.testing.net.XhrIo'], ['goog.array', 'goog.dom.xml', 'goog.events', 'goog.events.EventTarget', 'goog.json', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.HttpStatus', 'goog.net.XhrIo', 'goog.net.XmlHttp', 'goog.object', 'goog.structs.Map', 'goog.uri.utils'], false);\ngoog.addDependency('testing/net/xhrio_test.js', ['goog.testing.net.XhrIoTest'], ['goog.dom.xml', 'goog.events', 'goog.events.Event', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.XmlHttp', 'goog.object', 'goog.testing.MockControl', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.mockmatchers.InstanceOf', 'goog.testing.net.XhrIo'], false);\ngoog.addDependency('testing/net/xhriopool.js', ['goog.testing.net.XhrIoPool'], ['goog.net.XhrIoPool', 'goog.testing.net.XhrIo'], false);\ngoog.addDependency('testing/objectpropertystring.js', ['goog.testing.ObjectPropertyString'], [], false);\ngoog.addDependency('testing/performancetable.js', ['goog.testing.PerformanceTable'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.PerformanceTimer'], false);\ngoog.addDependency('testing/performancetimer.js', ['goog.testing.PerformanceTimer', 'goog.testing.PerformanceTimer.Task'], ['goog.array', 'goog.async.Deferred', 'goog.math'], false);\ngoog.addDependency('testing/performancetimer_test.js', ['goog.testing.PerformanceTimerTest'], ['goog.async.Deferred', 'goog.dom', 'goog.math', 'goog.testing.MockClock', 'goog.testing.PerformanceTimer', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/propertyreplacer.js', ['goog.testing.PropertyReplacer'], ['goog.testing.ObjectPropertyString', 'goog.userAgent'], false);\ngoog.addDependency('testing/propertyreplacer_test.js', ['goog.testing.PropertyReplacerTest'], ['goog.dom.TagName', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('testing/proto2/proto2.js', ['goog.testing.proto2'], ['goog.proto2.Message', 'goog.proto2.ObjectSerializer', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/proto2/proto2_test.js', ['goog.testing.proto2Test'], ['goog.testing.jsunit', 'goog.testing.proto2', 'proto2.TestAllTypes'], false);\ngoog.addDependency('testing/pseudorandom.js', ['goog.testing.PseudoRandom'], ['goog.Disposable'], false);\ngoog.addDependency('testing/pseudorandom_test.js', ['goog.testing.PseudoRandomTest'], ['goog.testing.PseudoRandom', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/recordfunction.js', ['goog.testing.FunctionCall', 'goog.testing.recordConstructor', 'goog.testing.recordFunction'], ['goog.testing.asserts'], false);\ngoog.addDependency('testing/recordfunction_test.js', ['goog.testing.recordFunctionTest'], ['goog.functions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordConstructor', 'goog.testing.recordFunction'], false);\ngoog.addDependency('testing/shardingtestcase.js', ['goog.testing.ShardingTestCase'], ['goog.asserts', 'goog.testing.TestCase'], false);\ngoog.addDependency('testing/shardingtestcase_test.js', ['goog.testing.ShardingTestCaseTest'], ['goog.testing.ShardingTestCase', 'goog.testing.TestCase', 'goog.testing.asserts', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/singleton.js', ['goog.testing.singleton'], [], false);\ngoog.addDependency('testing/singleton_test.js', ['goog.testing.singletonTest'], ['goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.singleton'], false);\ngoog.addDependency('testing/stacktrace.js', ['goog.testing.stacktrace', 'goog.testing.stacktrace.Frame'], [], false);\ngoog.addDependency('testing/stacktrace_test.js', ['goog.testing.stacktraceTest'], ['goog.functions', 'goog.string', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.StrictMock', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.stacktrace', 'goog.testing.stacktrace.Frame', 'goog.userAgent'], false);\ngoog.addDependency('testing/storage/fakemechanism.js', ['goog.testing.storage.FakeMechanism'], ['goog.storage.mechanism.IterableMechanism', 'goog.structs.Map'], false);\ngoog.addDependency('testing/strictmock.js', ['goog.testing.StrictMock'], ['goog.array', 'goog.testing.Mock'], false);\ngoog.addDependency('testing/strictmock_test.js', ['goog.testing.StrictMockTest'], ['goog.testing.StrictMock', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/style/layoutasserts.js', ['goog.testing.style.layoutasserts'], ['goog.style', 'goog.testing.asserts', 'goog.testing.style'], false);\ngoog.addDependency('testing/style/layoutasserts_test.js', ['goog.testing.style.layoutassertsTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.jsunit', 'goog.testing.style.layoutasserts'], false);\ngoog.addDependency('testing/style/style.js', ['goog.testing.style'], ['goog.dom', 'goog.math.Rect', 'goog.style'], false);\ngoog.addDependency('testing/style/style_test.js', ['goog.testing.styleTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.jsunit', 'goog.testing.style'], false);\ngoog.addDependency('testing/testcase.js', ['goog.testing.TestCase', 'goog.testing.TestCase.Error', 'goog.testing.TestCase.Order', 'goog.testing.TestCase.Result', 'goog.testing.TestCase.Test'], ['goog.Promise', 'goog.Thenable', 'goog.asserts', 'goog.dom.TagName', 'goog.object', 'goog.testing.asserts', 'goog.testing.stacktrace'], false);\ngoog.addDependency('testing/testcase_test.js', ['goog.testing.TestCaseTest'], ['goog.Promise', 'goog.string', 'goog.testing.MockRandom', 'goog.testing.TestCase', 'goog.testing.jsunit'], false);\ngoog.addDependency('testing/testqueue.js', ['goog.testing.TestQueue'], [], false);\ngoog.addDependency('testing/testrunner.js', ['goog.testing.TestRunner'], ['goog.dom.TagName', 'goog.testing.TestCase'], false);\ngoog.addDependency('testing/testsuite.js', ['goog.testing.testSuite'], ['goog.labs.testing.Environment', 'goog.testing.TestCase'], false);\ngoog.addDependency('testing/ui/rendererasserts.js', ['goog.testing.ui.rendererasserts'], ['goog.testing.asserts', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('testing/ui/rendererasserts_test.js', ['goog.testing.ui.rendererassertsTest'], ['goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('testing/ui/rendererharness.js', ['goog.testing.ui.RendererHarness'], ['goog.Disposable', 'goog.dom.NodeType', 'goog.testing.asserts', 'goog.testing.dom'], false);\ngoog.addDependency('testing/ui/style.js', ['goog.testing.ui.style'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.testing.asserts'], false);\ngoog.addDependency('testing/ui/style_test.js', ['goog.testing.ui.styleTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style'], false);\ngoog.addDependency('testing/watchers.js', ['goog.testing.watchers'], [], false);\ngoog.addDependency('timer/timer.js', ['goog.Timer'], ['goog.Promise', 'goog.events.EventTarget'], false);\ngoog.addDependency('timer/timer_test.js', ['goog.TimerTest'], ['goog.Promise', 'goog.Timer', 'goog.events', 'goog.testing.MockClock', 'goog.testing.jsunit'], false);\ngoog.addDependency('tweak/entries.js', ['goog.tweak.BaseEntry', 'goog.tweak.BasePrimitiveSetting', 'goog.tweak.BaseSetting', 'goog.tweak.BooleanGroup', 'goog.tweak.BooleanInGroupSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.ButtonAction', 'goog.tweak.NumericSetting', 'goog.tweak.StringSetting'], ['goog.array', 'goog.asserts', 'goog.log', 'goog.object'], false);\ngoog.addDependency('tweak/entries_test.js', ['goog.tweak.BaseEntryTest'], ['goog.testing.MockControl', 'goog.testing.jsunit', 'goog.tweak.testhelpers'], false);\ngoog.addDependency('tweak/registry.js', ['goog.tweak.Registry'], ['goog.array', 'goog.asserts', 'goog.log', 'goog.string', 'goog.tweak.BasePrimitiveSetting', 'goog.tweak.BaseSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.NumericSetting', 'goog.tweak.StringSetting', 'goog.uri.utils'], false);\ngoog.addDependency('tweak/registry_test.js', ['goog.tweak.RegistryTest'], ['goog.asserts.AssertionError', 'goog.testing.jsunit', 'goog.tweak', 'goog.tweak.testhelpers'], false);\ngoog.addDependency('tweak/testhelpers.js', ['goog.tweak.testhelpers'], ['goog.tweak', 'goog.tweak.BooleanGroup', 'goog.tweak.BooleanInGroupSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.ButtonAction', 'goog.tweak.NumericSetting', 'goog.tweak.Registry', 'goog.tweak.StringSetting'], false);\ngoog.addDependency('tweak/tweak.js', ['goog.tweak', 'goog.tweak.ConfigParams'], ['goog.asserts', 'goog.tweak.BaseSetting', 'goog.tweak.BooleanGroup', 'goog.tweak.BooleanInGroupSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.ButtonAction', 'goog.tweak.NumericSetting', 'goog.tweak.Registry', 'goog.tweak.StringSetting'], false);\ngoog.addDependency('tweak/tweakui.js', ['goog.tweak.EntriesPanel', 'goog.tweak.TweakUi'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.object', 'goog.string.Const', 'goog.style', 'goog.tweak', 'goog.tweak.BaseEntry', 'goog.tweak.BooleanGroup', 'goog.tweak.BooleanInGroupSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.ButtonAction', 'goog.tweak.NumericSetting', 'goog.tweak.StringSetting', 'goog.ui.Zippy', 'goog.userAgent'], false);\ngoog.addDependency('tweak/tweakui_test.js', ['goog.tweak.TweakUiTest'], ['goog.dom', 'goog.dom.TagName', 'goog.string', 'goog.testing.jsunit', 'goog.tweak', 'goog.tweak.TweakUi', 'goog.tweak.testhelpers'], false);\ngoog.addDependency('ui/abstractspellchecker.js', ['goog.ui.AbstractSpellChecker', 'goog.ui.AbstractSpellChecker.AsyncResult'], ['goog.a11y.aria', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.dom.selection', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.spell.SpellCheck', 'goog.structs.Set', 'goog.style', 'goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.MenuSeparator', 'goog.ui.PopupMenu'], false);\ngoog.addDependency('ui/ac/ac.js', ['goog.ui.ac'], ['goog.ui.ac.ArrayMatcher', 'goog.ui.ac.AutoComplete', 'goog.ui.ac.InputHandler', 'goog.ui.ac.Renderer'], false);\ngoog.addDependency('ui/ac/ac_test.js', ['goog.ui.acTest'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.classlist', 'goog.dom.selection', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.style', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.ac', 'goog.userAgent'], false);\ngoog.addDependency('ui/ac/arraymatcher.js', ['goog.ui.ac.ArrayMatcher'], ['goog.string'], false);\ngoog.addDependency('ui/ac/arraymatcher_test.js', ['goog.ui.ac.ArrayMatcherTest'], ['goog.testing.jsunit', 'goog.ui.ac.ArrayMatcher'], false);\ngoog.addDependency('ui/ac/autocomplete.js', ['goog.ui.ac.AutoComplete', 'goog.ui.ac.AutoComplete.EventType'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.object'], false);\ngoog.addDependency('ui/ac/autocomplete_test.js', ['goog.ui.ac.AutoCompleteTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.string', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.ac.AutoComplete', 'goog.ui.ac.InputHandler', 'goog.ui.ac.RenderOptions', 'goog.ui.ac.Renderer'], false);\ngoog.addDependency('ui/ac/cachingmatcher.js', ['goog.ui.ac.CachingMatcher'], ['goog.array', 'goog.async.Throttle', 'goog.ui.ac.ArrayMatcher', 'goog.ui.ac.RenderOptions'], false);\ngoog.addDependency('ui/ac/cachingmatcher_test.js', ['goog.ui.ac.CachingMatcherTest'], ['goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.ac.CachingMatcher'], false);\ngoog.addDependency('ui/ac/inputhandler.js', ['goog.ui.ac.InputHandler'], ['goog.Disposable', 'goog.Timer', 'goog.a11y.aria', 'goog.dom', 'goog.dom.selection', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.string', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('ui/ac/inputhandler_test.js', ['goog.ui.ac.InputHandlerTest'], ['goog.dom.selection', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.KeyCodes', 'goog.functions', 'goog.object', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.ac.InputHandler', 'goog.userAgent'], false);\ngoog.addDependency('ui/ac/remote.js', ['goog.ui.ac.Remote'], ['goog.ui.ac.AutoComplete', 'goog.ui.ac.InputHandler', 'goog.ui.ac.RemoteArrayMatcher', 'goog.ui.ac.Renderer'], false);\ngoog.addDependency('ui/ac/remotearraymatcher.js', ['goog.ui.ac.RemoteArrayMatcher'], ['goog.Disposable', 'goog.Uri', 'goog.events', 'goog.json', 'goog.net.EventType', 'goog.net.XhrIo'], false);\ngoog.addDependency('ui/ac/remotearraymatcher_test.js', ['goog.ui.ac.RemoteArrayMatcherTest'], ['goog.json', 'goog.net.XhrIo', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.ui.ac.RemoteArrayMatcher'], false);\ngoog.addDependency('ui/ac/renderer.js', ['goog.ui.ac.Renderer', 'goog.ui.ac.Renderer.CustomRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dispose', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.fx.dom.FadeInAndShow', 'goog.fx.dom.FadeOutAndHide', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.string', 'goog.style', 'goog.ui.IdGenerator', 'goog.ui.ac.AutoComplete'], false);\ngoog.addDependency('ui/ac/renderer_test.js', ['goog.ui.ac.RendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.fx.dom.FadeInAndShow', 'goog.fx.dom.FadeOutAndHide', 'goog.string', 'goog.style', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.ac.AutoComplete', 'goog.ui.ac.Renderer'], false);\ngoog.addDependency('ui/ac/renderoptions.js', ['goog.ui.ac.RenderOptions'], [], false);\ngoog.addDependency('ui/ac/richinputhandler.js', ['goog.ui.ac.RichInputHandler'], ['goog.ui.ac.InputHandler'], false);\ngoog.addDependency('ui/ac/richremote.js', ['goog.ui.ac.RichRemote'], ['goog.ui.ac.AutoComplete', 'goog.ui.ac.Remote', 'goog.ui.ac.Renderer', 'goog.ui.ac.RichInputHandler', 'goog.ui.ac.RichRemoteArrayMatcher'], false);\ngoog.addDependency('ui/ac/richremotearraymatcher.js', ['goog.ui.ac.RichRemoteArrayMatcher'], ['goog.dom.safe', 'goog.html.legacyconversions', 'goog.json', 'goog.ui.ac.RemoteArrayMatcher'], false);\ngoog.addDependency('ui/activitymonitor.js', ['goog.ui.ActivityMonitor'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType'], false);\ngoog.addDependency('ui/activitymonitor_test.js', ['goog.ui.ActivityMonitorTest'], ['goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.ActivityMonitor'], false);\ngoog.addDependency('ui/advancedtooltip.js', ['goog.ui.AdvancedTooltip'], ['goog.events', 'goog.events.EventType', 'goog.math.Box', 'goog.math.Coordinate', 'goog.style', 'goog.ui.Tooltip', 'goog.userAgent'], false);\ngoog.addDependency('ui/advancedtooltip_test.js', ['goog.ui.AdvancedTooltipTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events.Event', 'goog.events.EventType', 'goog.math.Box', 'goog.math.Coordinate', 'goog.style', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.AdvancedTooltip', 'goog.ui.Tooltip', 'goog.userAgent'], false);\ngoog.addDependency('ui/animatedzippy.js', ['goog.ui.AnimatedZippy'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.fx.Animation', 'goog.fx.Transition', 'goog.fx.easing', 'goog.ui.Zippy', 'goog.ui.ZippyEvent'], false);\ngoog.addDependency('ui/animatedzippy_test.js', ['goog.ui.AnimatedZippyTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.events', 'goog.functions', 'goog.fx.Animation', 'goog.fx.Transition', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.ui.AnimatedZippy', 'goog.ui.Zippy'], false);\ngoog.addDependency('ui/attachablemenu.js', ['goog.ui.AttachableMenu'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events.Event', 'goog.events.KeyCodes', 'goog.string', 'goog.style', 'goog.ui.ItemEvent', 'goog.ui.MenuBase', 'goog.ui.PopupBase', 'goog.userAgent'], false);\ngoog.addDependency('ui/bidiinput.js', ['goog.ui.BidiInput'], ['goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.InputHandler', 'goog.i18n.bidi', 'goog.ui.Component'], false);\ngoog.addDependency('ui/bidiinput_test.js', ['goog.ui.BidiInputTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.BidiInput'], false);\ngoog.addDependency('ui/bubble.js', ['goog.ui.Bubble'], ['goog.Timer', 'goog.dom.safe', 'goog.events', 'goog.events.EventType', 'goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.math.Box', 'goog.positioning', 'goog.positioning.AbsolutePosition', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.positioning.CornerBit', 'goog.string.Const', 'goog.style', 'goog.ui.Component', 'goog.ui.Popup'], false);\ngoog.addDependency('ui/button.js', ['goog.ui.Button', 'goog.ui.Button.Side'], ['goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.ui.ButtonRenderer', 'goog.ui.ButtonSide', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.NativeButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/button_test.js', ['goog.ui.ButtonTest'], ['goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Button', 'goog.ui.ButtonRenderer', 'goog.ui.ButtonSide', 'goog.ui.Component', 'goog.ui.NativeButtonRenderer'], false);\ngoog.addDependency('ui/buttonrenderer.js', ['goog.ui.ButtonRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.asserts', 'goog.ui.ButtonSide', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('ui/buttonrenderer_test.js', ['goog.ui.ButtonRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Button', 'goog.ui.ButtonRenderer', 'goog.ui.ButtonSide', 'goog.ui.Component'], false);\ngoog.addDependency('ui/buttonside.js', ['goog.ui.ButtonSide'], [], false);\ngoog.addDependency('ui/charcounter.js', ['goog.ui.CharCounter', 'goog.ui.CharCounter.Display'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.InputHandler'], false);\ngoog.addDependency('ui/charcounter_test.js', ['goog.ui.CharCounterTest'], ['goog.dom', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.ui.CharCounter', 'goog.userAgent'], false);\ngoog.addDependency('ui/charpicker.js', ['goog.ui.CharPicker'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.i18n.CharListDecompressor', 'goog.i18n.uChar', 'goog.structs.Set', 'goog.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.ContainerScroller', 'goog.ui.FlatButtonRenderer', 'goog.ui.HoverCard', 'goog.ui.LabelInput', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.Tooltip'], false);\ngoog.addDependency('ui/charpicker_test.js', ['goog.ui.CharPickerTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dispose', 'goog.dom', 'goog.events.Event', 'goog.events.EventType', 'goog.i18n.CharPickerData', 'goog.i18n.uChar.NameFetcher', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.CharPicker', 'goog.ui.FlatButtonRenderer'], false);\ngoog.addDependency('ui/checkbox.js', ['goog.ui.Checkbox', 'goog.ui.Checkbox.State'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.string', 'goog.ui.CheckboxRenderer', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.registry'], false);\ngoog.addDependency('ui/checkbox_test.js', ['goog.ui.CheckboxTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.KeyCodes', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Checkbox', 'goog.ui.CheckboxRenderer', 'goog.ui.Component', 'goog.ui.ControlRenderer', 'goog.ui.decorate'], false);\ngoog.addDependency('ui/checkboxmenuitem.js', ['goog.ui.CheckBoxMenuItem'], ['goog.ui.MenuItem', 'goog.ui.registry'], false);\ngoog.addDependency('ui/checkboxrenderer.js', ['goog.ui.CheckboxRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.object', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('ui/colorbutton.js', ['goog.ui.ColorButton'], ['goog.ui.Button', 'goog.ui.ColorButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/colorbutton_test.js', ['goog.ui.ColorButtonTest'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.ui.ColorButton', 'goog.ui.decorate'], false);\ngoog.addDependency('ui/colorbuttonrenderer.js', ['goog.ui.ColorButtonRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.functions', 'goog.ui.ColorMenuButtonRenderer'], false);\ngoog.addDependency('ui/colormenubutton.js', ['goog.ui.ColorMenuButton'], ['goog.array', 'goog.object', 'goog.ui.ColorMenuButtonRenderer', 'goog.ui.ColorPalette', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.registry'], false);\ngoog.addDependency('ui/colormenubuttonrenderer.js', ['goog.ui.ColorMenuButtonRenderer'], ['goog.asserts', 'goog.color', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.MenuButtonRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/colormenubuttonrenderer_test.js', ['goog.ui.ColorMenuButtonTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.testing.ui.RendererHarness', 'goog.testing.ui.rendererasserts', 'goog.ui.ColorMenuButton', 'goog.ui.ColorMenuButtonRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/colorpalette.js', ['goog.ui.ColorPalette'], ['goog.array', 'goog.color', 'goog.dom.TagName', 'goog.style', 'goog.ui.Palette', 'goog.ui.PaletteRenderer'], false);\ngoog.addDependency('ui/colorpalette_test.js', ['goog.ui.ColorPaletteTest'], ['goog.color', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.ColorPalette'], false);\ngoog.addDependency('ui/colorpicker.js', ['goog.ui.ColorPicker', 'goog.ui.ColorPicker.EventType'], ['goog.ui.ColorPalette', 'goog.ui.Component'], false);\ngoog.addDependency('ui/colorsplitbehavior.js', ['goog.ui.ColorSplitBehavior'], ['goog.ui.ColorMenuButton', 'goog.ui.SplitBehavior'], false);\ngoog.addDependency('ui/combobox.js', ['goog.ui.ComboBox', 'goog.ui.ComboBoxItem'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.log', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.ui.ItemEvent', 'goog.ui.LabelInput', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.MenuSeparator', 'goog.ui.registry', 'goog.userAgent'], false);\ngoog.addDependency('ui/combobox_test.js', ['goog.ui.ComboBoxTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.KeyCodes', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.ComboBox', 'goog.ui.ComboBoxItem', 'goog.ui.Component', 'goog.ui.ControlRenderer', 'goog.ui.LabelInput', 'goog.ui.Menu', 'goog.ui.MenuItem'], false);\ngoog.addDependency('ui/component.js', ['goog.ui.Component', 'goog.ui.Component.Error', 'goog.ui.Component.EventType', 'goog.ui.Component.State'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.object', 'goog.style', 'goog.ui.IdGenerator'], false);\ngoog.addDependency('ui/component_test.js', ['goog.ui.ComponentTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.events.EventTarget', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.Component'], false);\ngoog.addDependency('ui/container.js', ['goog.ui.Container', 'goog.ui.Container.EventType', 'goog.ui.Container.Orientation'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.object', 'goog.style', 'goog.ui.Component', 'goog.ui.ContainerRenderer', 'goog.ui.Control'], false);\ngoog.addDependency('ui/container_test.js', ['goog.ui.ContainerTest'], ['goog.a11y.aria', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.KeyCodes', 'goog.events.KeyEvent', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Container', 'goog.ui.Control'], false);\ngoog.addDependency('ui/containerrenderer.js', ['goog.ui.ContainerRenderer'], ['goog.a11y.aria', 'goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.string', 'goog.style', 'goog.ui.registry', 'goog.userAgent'], false);\ngoog.addDependency('ui/containerrenderer_test.js', ['goog.ui.ContainerRendererTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Container', 'goog.ui.ContainerRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/containerscroller.js', ['goog.ui.ContainerScroller'], ['goog.Disposable', 'goog.Timer', 'goog.events.EventHandler', 'goog.style', 'goog.ui.Component', 'goog.ui.Container'], false);\ngoog.addDependency('ui/containerscroller_test.js', ['goog.ui.ContainerScrollerTest'], ['goog.dom', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Container', 'goog.ui.ContainerScroller'], false);\ngoog.addDependency('ui/control.js', ['goog.ui.Control'], ['goog.Disposable', 'goog.array', 'goog.dom', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.string', 'goog.ui.Component', 'goog.ui.ControlContent', 'goog.ui.ControlRenderer', 'goog.ui.decorate', 'goog.ui.registry', 'goog.userAgent'], false);\ngoog.addDependency('ui/control_test.js', ['goog.ui.ControlTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.object', 'goog.string', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.ControlRenderer', 'goog.ui.registry', 'goog.userAgent'], false);\ngoog.addDependency('ui/controlcontent.js', ['goog.ui.ControlContent'], [], false);\ngoog.addDependency('ui/controlrenderer.js', ['goog.ui.ControlRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.object', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.userAgent'], false);\ngoog.addDependency('ui/controlrenderer_test.js', ['goog.ui.ControlRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.object', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.ControlRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/cookieeditor.js', ['goog.ui.CookieEditor'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.events.EventType', 'goog.net.cookies', 'goog.string', 'goog.style', 'goog.ui.Component'], false);\ngoog.addDependency('ui/cookieeditor_test.js', ['goog.ui.CookieEditorTest'], ['goog.dom', 'goog.events.Event', 'goog.events.EventType', 'goog.net.cookies', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.CookieEditor'], false);\ngoog.addDependency('ui/css3buttonrenderer.js', ['goog.ui.Css3ButtonRenderer'], ['goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Button', 'goog.ui.ButtonRenderer', 'goog.ui.Component', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.registry'], false);\ngoog.addDependency('ui/css3menubuttonrenderer.js', ['goog.ui.Css3MenuButtonRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.MenuButton', 'goog.ui.MenuButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/cssnames.js', ['goog.ui.INLINE_BLOCK_CLASSNAME'], [], false);\ngoog.addDependency('ui/custombutton.js', ['goog.ui.CustomButton'], ['goog.ui.Button', 'goog.ui.CustomButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/custombuttonrenderer.js', ['goog.ui.CustomButtonRenderer'], ['goog.a11y.aria.Role', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.string', 'goog.ui.ButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME'], false);\ngoog.addDependency('ui/customcolorpalette.js', ['goog.ui.CustomColorPalette'], ['goog.color', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.ColorPalette', 'goog.ui.Component'], false);\ngoog.addDependency('ui/customcolorpalette_test.js', ['goog.ui.CustomColorPaletteTest'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.ui.CustomColorPalette'], false);\ngoog.addDependency('ui/datepicker.js', ['goog.ui.DatePicker', 'goog.ui.DatePicker.Events', 'goog.ui.DatePickerEvent'], ['goog.a11y.aria', 'goog.asserts', 'goog.date.Date', 'goog.date.DateRange', 'goog.date.Interval', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimePatterns', 'goog.i18n.DateTimeSymbols', 'goog.style', 'goog.ui.Component', 'goog.ui.DefaultDatePickerRenderer', 'goog.ui.IdGenerator'], false);\ngoog.addDependency('ui/datepicker_test.js', ['goog.ui.DatePickerTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.date.Date', 'goog.date.DateRange', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_en_US', 'goog.i18n.DateTimeSymbols_zh_HK', 'goog.style', 'goog.testing.jsunit', 'goog.ui.DatePicker'], false);\ngoog.addDependency('ui/datepickerrenderer.js', ['goog.ui.DatePickerRenderer'], [], false);\ngoog.addDependency('ui/decorate.js', ['goog.ui.decorate'], ['goog.ui.registry'], false);\ngoog.addDependency('ui/decorate_test.js', ['goog.ui.decorateTest'], ['goog.testing.jsunit', 'goog.ui.decorate', 'goog.ui.registry'], false);\ngoog.addDependency('ui/defaultdatepickerrenderer.js', ['goog.ui.DefaultDatePickerRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.ui.DatePickerRenderer'], false);\ngoog.addDependency('ui/dialog.js', ['goog.ui.Dialog', 'goog.ui.Dialog.ButtonSet', 'goog.ui.Dialog.ButtonSet.DefaultButtons', 'goog.ui.Dialog.DefaultButtonCaptions', 'goog.ui.Dialog.DefaultButtonKeys', 'goog.ui.Dialog.Event', 'goog.ui.Dialog.EventType'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.dom.safe', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Dragger', 'goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.math.Rect', 'goog.string', 'goog.structs.Map', 'goog.style', 'goog.ui.ModalPopup'], false);\ngoog.addDependency('ui/dialog_test.js', ['goog.ui.DialogTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.css3', 'goog.html.SafeHtml', 'goog.html.testing', 'goog.style', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Dialog', 'goog.userAgent'], false);\ngoog.addDependency('ui/dimensionpicker.js', ['goog.ui.DimensionPicker'], ['goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Size', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.DimensionPickerRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/dimensionpicker_test.js', ['goog.ui.DimensionPickerTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events.KeyCodes', 'goog.math.Size', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.DimensionPicker', 'goog.ui.DimensionPickerRenderer'], false);\ngoog.addDependency('ui/dimensionpickerrenderer.js', ['goog.ui.DimensionPickerRenderer'], ['goog.a11y.aria.Announcer', 'goog.a11y.aria.LivePriority', 'goog.dom', 'goog.dom.TagName', 'goog.i18n.bidi', 'goog.style', 'goog.ui.ControlRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/dimensionpickerrenderer_test.js', ['goog.ui.DimensionPickerRendererTest'], ['goog.a11y.aria.LivePriority', 'goog.array', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.DimensionPicker', 'goog.ui.DimensionPickerRenderer'], false);\ngoog.addDependency('ui/dragdropdetector.js', ['goog.ui.DragDropDetector', 'goog.ui.DragDropDetector.EventType', 'goog.ui.DragDropDetector.ImageDropEvent', 'goog.ui.DragDropDetector.LinkDropEvent'], ['goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.string', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('ui/drilldownrow.js', ['goog.ui.DrilldownRow'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.ui.Component'], false);\ngoog.addDependency('ui/drilldownrow_test.js', ['goog.ui.DrilldownRowTest'], ['goog.dom', 'goog.dom.TagName', 'goog.html.SafeHtml', 'goog.testing.jsunit', 'goog.ui.DrilldownRow'], false);\ngoog.addDependency('ui/editor/abstractdialog.js', ['goog.ui.editor.AbstractDialog', 'goog.ui.editor.AbstractDialog.Builder', 'goog.ui.editor.AbstractDialog.EventType'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events.EventTarget', 'goog.string', 'goog.ui.Dialog', 'goog.ui.PopupBase'], false);\ngoog.addDependency('ui/editor/abstractdialog_test.js', ['goog.ui.editor.AbstractDialogTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.KeyCodes', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.ui.editor.AbstractDialog', 'goog.userAgent'], false);\ngoog.addDependency('ui/editor/bubble.js', ['goog.ui.editor.Bubble'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.ViewportSizeMonitor', 'goog.dom.classlist', 'goog.editor.style', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.functions', 'goog.log', 'goog.math.Box', 'goog.object', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.ui.PopupBase', 'goog.userAgent'], false);\ngoog.addDependency('ui/editor/bubble_test.js', ['goog.ui.editor.BubbleTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.positioning.Corner', 'goog.positioning.OverflowStatus', 'goog.string', 'goog.style', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.editor.Bubble', 'goog.userAgent.product'], false);\ngoog.addDependency('ui/editor/defaulttoolbar.js', ['goog.ui.editor.ButtonDescriptor', 'goog.ui.editor.DefaultToolbar'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.Command', 'goog.style', 'goog.ui.editor.ToolbarFactory', 'goog.ui.editor.messages', 'goog.userAgent'], false);\ngoog.addDependency('ui/editor/linkdialog.js', ['goog.ui.editor.LinkDialog', 'goog.ui.editor.LinkDialog.BeforeTestLinkEvent', 'goog.ui.editor.LinkDialog.EventType', 'goog.ui.editor.LinkDialog.OkEvent'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.editor.BrowserFeature', 'goog.editor.Link', 'goog.editor.focus', 'goog.editor.node', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.InputHandler', 'goog.html.SafeHtml', 'goog.string', 'goog.string.Unicode', 'goog.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.LinkButtonRenderer', 'goog.ui.editor.AbstractDialog', 'goog.ui.editor.TabPane', 'goog.ui.editor.messages', 'goog.userAgent', 'goog.window'], false);\ngoog.addDependency('ui/editor/linkdialog_test.js', ['goog.ui.editor.LinkDialogTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Link', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.style', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.dom', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.ui.editor.AbstractDialog', 'goog.ui.editor.LinkDialog', 'goog.ui.editor.messages', 'goog.userAgent'], false);\ngoog.addDependency('ui/editor/messages.js', ['goog.ui.editor.messages'], ['goog.html.uncheckedconversions', 'goog.string.Const'], false);\ngoog.addDependency('ui/editor/tabpane.js', ['goog.ui.editor.TabPane'], ['goog.asserts', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.style', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.Tab', 'goog.ui.TabBar'], false);\ngoog.addDependency('ui/editor/toolbarcontroller.js', ['goog.ui.editor.ToolbarController'], ['goog.editor.Field', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.ui.Component'], false);\ngoog.addDependency('ui/editor/toolbarfactory.js', ['goog.ui.editor.ToolbarFactory'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.string', 'goog.string.Unicode', 'goog.style', 'goog.ui.Component', 'goog.ui.Container', 'goog.ui.Option', 'goog.ui.Toolbar', 'goog.ui.ToolbarButton', 'goog.ui.ToolbarColorMenuButton', 'goog.ui.ToolbarMenuButton', 'goog.ui.ToolbarRenderer', 'goog.ui.ToolbarSelect', 'goog.userAgent'], false);\ngoog.addDependency('ui/editor/toolbarfactory_test.js', ['goog.ui.editor.ToolbarFactoryTest'], ['goog.dom', 'goog.testing.ExpectedFailures', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.ui.editor.ToolbarFactory', 'goog.userAgent'], false);\ngoog.addDependency('ui/emoji/emoji.js', ['goog.ui.emoji.Emoji'], [], false);\ngoog.addDependency('ui/emoji/emojipalette.js', ['goog.ui.emoji.EmojiPalette'], ['goog.events.EventType', 'goog.net.ImageLoader', 'goog.ui.Palette', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPaletteRenderer'], false);\ngoog.addDependency('ui/emoji/emojipaletterenderer.js', ['goog.ui.emoji.EmojiPaletteRenderer'], ['goog.a11y.aria', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.style', 'goog.ui.PaletteRenderer', 'goog.ui.emoji.Emoji'], false);\ngoog.addDependency('ui/emoji/emojipicker.js', ['goog.ui.emoji.EmojiPicker'], ['goog.dom.TagName', 'goog.style', 'goog.ui.Component', 'goog.ui.TabPane', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPalette', 'goog.ui.emoji.EmojiPaletteRenderer', 'goog.ui.emoji.ProgressiveEmojiPaletteRenderer'], false);\ngoog.addDependency('ui/emoji/emojipicker_test.js', ['goog.ui.emoji.EmojiPickerTest'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPicker', 'goog.ui.emoji.SpriteInfo'], false);\ngoog.addDependency('ui/emoji/fast_nonprogressive_emojipicker_test.js', ['goog.ui.emoji.FastNonProgressiveEmojiPickerTest'], ['goog.Promise', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.net.EventType', 'goog.style', 'goog.testing.jsunit', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPicker', 'goog.ui.emoji.SpriteInfo'], false);\ngoog.addDependency('ui/emoji/fast_progressive_emojipicker_test.js', ['goog.ui.emoji.FastProgressiveEmojiPickerTest'], ['goog.Promise', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.net.EventType', 'goog.style', 'goog.testing.jsunit', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPicker', 'goog.ui.emoji.SpriteInfo'], false);\ngoog.addDependency('ui/emoji/popupemojipicker.js', ['goog.ui.emoji.PopupEmojiPicker'], ['goog.events.EventType', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.ui.Component', 'goog.ui.Popup', 'goog.ui.emoji.EmojiPicker'], false);\ngoog.addDependency('ui/emoji/popupemojipicker_test.js', ['goog.ui.emoji.PopupEmojiPickerTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.emoji.PopupEmojiPicker'], false);\ngoog.addDependency('ui/emoji/progressiveemojipaletterenderer.js', ['goog.ui.emoji.ProgressiveEmojiPaletteRenderer'], ['goog.dom.TagName', 'goog.style', 'goog.ui.emoji.EmojiPaletteRenderer'], false);\ngoog.addDependency('ui/emoji/spriteinfo.js', ['goog.ui.emoji.SpriteInfo'], [], false);\ngoog.addDependency('ui/emoji/spriteinfo_test.js', ['goog.ui.emoji.SpriteInfoTest'], ['goog.testing.jsunit', 'goog.ui.emoji.SpriteInfo'], false);\ngoog.addDependency('ui/filteredmenu.js', ['goog.ui.FilteredMenu'], ['goog.a11y.aria', 'goog.a11y.aria.AutoCompleteValues', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.object', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.ui.FilterObservingMenuItem', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.userAgent'], false);\ngoog.addDependency('ui/filteredmenu_test.js', ['goog.ui.FilteredMenuTest'], ['goog.a11y.aria', 'goog.a11y.aria.AutoCompleteValues', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Rect', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.FilteredMenu', 'goog.ui.MenuItem'], false);\ngoog.addDependency('ui/filterobservingmenuitem.js', ['goog.ui.FilterObservingMenuItem'], ['goog.ui.FilterObservingMenuItemRenderer', 'goog.ui.MenuItem', 'goog.ui.registry'], false);\ngoog.addDependency('ui/filterobservingmenuitemrenderer.js', ['goog.ui.FilterObservingMenuItemRenderer'], ['goog.ui.MenuItemRenderer'], false);\ngoog.addDependency('ui/flatbuttonrenderer.js', ['goog.ui.FlatButtonRenderer'], ['goog.a11y.aria.Role', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Button', 'goog.ui.ButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.registry'], false);\ngoog.addDependency('ui/flatmenubuttonrenderer.js', ['goog.ui.FlatMenuButtonRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.ui.FlatButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.MenuRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/formpost.js', ['goog.ui.FormPost'], ['goog.array', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.ui.Component'], false);\ngoog.addDependency('ui/formpost_test.js', ['goog.ui.FormPostTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.object', 'goog.testing.jsunit', 'goog.ui.FormPost', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('ui/gauge.js', ['goog.ui.Gauge', 'goog.ui.GaugeColoredRange'], ['goog.a11y.aria', 'goog.asserts', 'goog.dom.TagName', 'goog.events', 'goog.fx.Animation', 'goog.fx.Transition', 'goog.fx.easing', 'goog.graphics', 'goog.graphics.Font', 'goog.graphics.Path', 'goog.graphics.SolidFill', 'goog.math', 'goog.ui.Component', 'goog.ui.GaugeTheme'], false);\ngoog.addDependency('ui/gaugetheme.js', ['goog.ui.GaugeTheme'], ['goog.graphics.LinearGradient', 'goog.graphics.SolidFill', 'goog.graphics.Stroke'], false);\ngoog.addDependency('ui/hovercard.js', ['goog.ui.HoverCard', 'goog.ui.HoverCard.EventType', 'goog.ui.HoverCard.TriggerEvent'], ['goog.array', 'goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.ui.AdvancedTooltip', 'goog.ui.PopupBase', 'goog.ui.Tooltip'], false);\ngoog.addDependency('ui/hovercard_test.js', ['goog.ui.HoverCardTest'], ['goog.dom', 'goog.events', 'goog.math.Coordinate', 'goog.style', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.HoverCard'], false);\ngoog.addDependency('ui/hsvapalette.js', ['goog.ui.HsvaPalette'], ['goog.array', 'goog.color.alpha', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.style', 'goog.ui.Component', 'goog.ui.HsvPalette'], false);\ngoog.addDependency('ui/hsvapalette_test.js', ['goog.ui.HsvaPaletteTest'], ['goog.color.alpha', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.Event', 'goog.math.Coordinate', 'goog.style', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.HsvaPalette', 'goog.userAgent'], false);\ngoog.addDependency('ui/hsvpalette.js', ['goog.ui.HsvPalette'], ['goog.color', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.style', 'goog.style.bidi', 'goog.ui.Component', 'goog.userAgent'], false);\ngoog.addDependency('ui/hsvpalette_test.js', ['goog.ui.HsvPaletteTest'], ['goog.color', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.math.Coordinate', 'goog.style', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.HsvPalette', 'goog.userAgent'], false);\ngoog.addDependency('ui/idgenerator.js', ['goog.ui.IdGenerator'], [], false);\ngoog.addDependency('ui/idletimer.js', ['goog.ui.IdleTimer'], ['goog.Timer', 'goog.events', 'goog.events.EventTarget', 'goog.structs.Set', 'goog.ui.ActivityMonitor'], false);\ngoog.addDependency('ui/idletimer_test.js', ['goog.ui.IdleTimerTest'], ['goog.events', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.IdleTimer', 'goog.ui.MockActivityMonitor'], false);\ngoog.addDependency('ui/iframemask.js', ['goog.ui.IframeMask'], ['goog.Disposable', 'goog.Timer', 'goog.dom', 'goog.dom.iframe', 'goog.events.EventHandler', 'goog.style'], false);\ngoog.addDependency('ui/iframemask_test.js', ['goog.ui.IframeMaskTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.iframe', 'goog.structs.Pool', 'goog.style', 'goog.testing.MockClock', 'goog.testing.StrictMock', 'goog.testing.jsunit', 'goog.ui.IframeMask', 'goog.ui.Popup', 'goog.ui.PopupBase', 'goog.userAgent'], false);\ngoog.addDependency('ui/imagelessbuttonrenderer.js', ['goog.ui.ImagelessButtonRenderer'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.CustomButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.registry'], false);\ngoog.addDependency('ui/imagelessmenubuttonrenderer.js', ['goog.ui.ImagelessMenuButtonRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.MenuButton', 'goog.ui.MenuButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/inputdatepicker.js', ['goog.ui.InputDatePicker'], ['goog.date.DateTime', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.string', 'goog.ui.Component', 'goog.ui.DatePicker', 'goog.ui.LabelInput', 'goog.ui.PopupBase', 'goog.ui.PopupDatePicker'], false);\ngoog.addDependency('ui/inputdatepicker_test.js', ['goog.ui.InputDatePickerTest'], ['goog.dom', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeParse', 'goog.testing.jsunit', 'goog.ui.InputDatePicker'], false);\ngoog.addDependency('ui/itemevent.js', ['goog.ui.ItemEvent'], ['goog.events.Event'], false);\ngoog.addDependency('ui/keyboardshortcuthandler.js', ['goog.ui.KeyboardShortcutEvent', 'goog.ui.KeyboardShortcutHandler', 'goog.ui.KeyboardShortcutHandler.EventType'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyNames', 'goog.object', 'goog.userAgent'], false);\ngoog.addDependency('ui/keyboardshortcuthandler_test.js', ['goog.ui.KeyboardShortcutHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.StrictMock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.KeyboardShortcutHandler', 'goog.userAgent'], false);\ngoog.addDependency('ui/labelinput.js', ['goog.ui.LabelInput'], ['goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.ui.Component', 'goog.userAgent'], false);\ngoog.addDependency('ui/labelinput_test.js', ['goog.ui.LabelInputTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.classlist', 'goog.events.EventType', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.LabelInput', 'goog.userAgent'], false);\ngoog.addDependency('ui/linkbuttonrenderer.js', ['goog.ui.LinkButtonRenderer'], ['goog.ui.Button', 'goog.ui.FlatButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/media/flashobject.js', ['goog.ui.media.FlashObject', 'goog.ui.media.FlashObject.ScriptAccessLevel', 'goog.ui.media.FlashObject.Wmodes'], ['goog.asserts', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.flash', 'goog.html.legacyconversions', 'goog.log', 'goog.object', 'goog.string', 'goog.structs.Map', 'goog.style', 'goog.ui.Component', 'goog.userAgent', 'goog.userAgent.flash'], false);\ngoog.addDependency('ui/media/flashobject_test.js', ['goog.ui.media.FlashObjectTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.html.SafeUrl', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.userAgent'], false);\ngoog.addDependency('ui/media/flickr.js', ['goog.ui.media.FlickrSet', 'goog.ui.media.FlickrSetModel'], ['goog.html.TrustedResourceUrl', 'goog.string.Const', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false);\ngoog.addDependency('ui/media/flickr_test.js', ['goog.ui.media.FlickrSetTest'], ['goog.dom', 'goog.dom.TagName', 'goog.html.testing', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.FlickrSet', 'goog.ui.media.FlickrSetModel', 'goog.ui.media.Media'], false);\ngoog.addDependency('ui/media/googlevideo.js', ['goog.ui.media.GoogleVideo', 'goog.ui.media.GoogleVideoModel'], ['goog.string', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false);\ngoog.addDependency('ui/media/googlevideo_test.js', ['goog.ui.media.GoogleVideoTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.GoogleVideo', 'goog.ui.media.GoogleVideoModel', 'goog.ui.media.Media'], false);\ngoog.addDependency('ui/media/media.js', ['goog.ui.media.Media', 'goog.ui.media.MediaRenderer'], ['goog.asserts', 'goog.dom.TagName', 'goog.style', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('ui/media/media_test.js', ['goog.ui.media.MediaTest'], ['goog.dom', 'goog.dom.TagName', 'goog.math.Size', 'goog.testing.jsunit', 'goog.ui.ControlRenderer', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false);\ngoog.addDependency('ui/media/mediamodel.js', ['goog.ui.media.MediaModel', 'goog.ui.media.MediaModel.Category', 'goog.ui.media.MediaModel.Credit', 'goog.ui.media.MediaModel.Credit.Role', 'goog.ui.media.MediaModel.Credit.Scheme', 'goog.ui.media.MediaModel.Medium', 'goog.ui.media.MediaModel.MimeType', 'goog.ui.media.MediaModel.Player', 'goog.ui.media.MediaModel.SubTitle', 'goog.ui.media.MediaModel.Thumbnail'], ['goog.array', 'goog.html.TrustedResourceUrl', 'goog.html.legacyconversions'], false);\ngoog.addDependency('ui/media/mediamodel_test.js', ['goog.ui.media.MediaModelTest'], ['goog.testing.jsunit', 'goog.ui.media.MediaModel'], false);\ngoog.addDependency('ui/media/mp3.js', ['goog.ui.media.Mp3'], ['goog.string', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaRenderer'], false);\ngoog.addDependency('ui/media/mp3_test.js', ['goog.ui.media.Mp3Test'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.Mp3'], false);\ngoog.addDependency('ui/media/photo.js', ['goog.ui.media.Photo'], ['goog.dom.TagName', 'goog.ui.media.Media', 'goog.ui.media.MediaRenderer'], false);\ngoog.addDependency('ui/media/photo_test.js', ['goog.ui.media.PhotoTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.MediaModel', 'goog.ui.media.Photo'], false);\ngoog.addDependency('ui/media/picasa.js', ['goog.ui.media.PicasaAlbum', 'goog.ui.media.PicasaAlbumModel'], ['goog.html.TrustedResourceUrl', 'goog.string.Const', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false);\ngoog.addDependency('ui/media/picasa_test.js', ['goog.ui.media.PicasaTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.PicasaAlbum', 'goog.ui.media.PicasaAlbumModel'], false);\ngoog.addDependency('ui/media/vimeo.js', ['goog.ui.media.Vimeo', 'goog.ui.media.VimeoModel'], ['goog.string', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false);\ngoog.addDependency('ui/media/vimeo_test.js', ['goog.ui.media.VimeoTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.Vimeo', 'goog.ui.media.VimeoModel'], false);\ngoog.addDependency('ui/media/youtube.js', ['goog.ui.media.Youtube', 'goog.ui.media.YoutubeModel'], ['goog.dom.TagName', 'goog.string', 'goog.ui.Component', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false);\ngoog.addDependency('ui/media/youtube_test.js', ['goog.ui.media.YoutubeTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.Youtube', 'goog.ui.media.YoutubeModel'], false);\ngoog.addDependency('ui/menu.js', ['goog.ui.Menu', 'goog.ui.Menu.EventType'], ['goog.dom.TagName', 'goog.math.Coordinate', 'goog.string', 'goog.style', 'goog.ui.Component.EventType', 'goog.ui.Component.State', 'goog.ui.Container', 'goog.ui.Container.Orientation', 'goog.ui.MenuHeader', 'goog.ui.MenuItem', 'goog.ui.MenuRenderer', 'goog.ui.MenuSeparator'], false);\ngoog.addDependency('ui/menu_test.js', ['goog.ui.MenuTest'], ['goog.dom', 'goog.events', 'goog.math.Coordinate', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Menu'], false);\ngoog.addDependency('ui/menubar.js', ['goog.ui.menuBar'], ['goog.ui.Container', 'goog.ui.MenuBarRenderer'], false);\ngoog.addDependency('ui/menubardecorator.js', ['goog.ui.menuBarDecorator'], ['goog.ui.MenuBarRenderer', 'goog.ui.menuBar', 'goog.ui.registry'], false);\ngoog.addDependency('ui/menubarrenderer.js', ['goog.ui.MenuBarRenderer'], ['goog.a11y.aria.Role', 'goog.ui.Container', 'goog.ui.ContainerRenderer'], false);\ngoog.addDependency('ui/menubase.js', ['goog.ui.MenuBase'], ['goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.ui.Popup'], false);\ngoog.addDependency('ui/menubutton.js', ['goog.ui.MenuButton'], ['goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.math.Box', 'goog.math.Rect', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.positioning.Overflow', 'goog.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.IdGenerator', 'goog.ui.Menu', 'goog.ui.MenuButtonRenderer', 'goog.ui.MenuItem', 'goog.ui.MenuRenderer', 'goog.ui.registry', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('ui/menubutton_test.js', ['goog.ui.MenuButtonTest'], ['goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.positioning.Overflow', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.SubMenu', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('ui/menubuttonrenderer.js', ['goog.ui.MenuButtonRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.ui.CustomButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.Menu', 'goog.ui.MenuRenderer'], false);\ngoog.addDependency('ui/menubuttonrenderer_test.js', ['goog.ui.MenuButtonRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.MenuButton', 'goog.ui.MenuButtonRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/menuheader.js', ['goog.ui.MenuHeader'], ['goog.ui.Component', 'goog.ui.Control', 'goog.ui.MenuHeaderRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/menuheaderrenderer.js', ['goog.ui.MenuHeaderRenderer'], ['goog.ui.ControlRenderer'], false);\ngoog.addDependency('ui/menuitem.js', ['goog.ui.MenuItem'], ['goog.a11y.aria.Role', 'goog.array', 'goog.dom', 'goog.dom.classlist', 'goog.math.Coordinate', 'goog.string', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.MenuItemRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/menuitem_test.js', ['goog.ui.MenuItemTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.KeyCodes', 'goog.math.Coordinate', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.MenuItemRenderer'], false);\ngoog.addDependency('ui/menuitemrenderer.js', ['goog.ui.MenuItemRenderer'], ['goog.a11y.aria.Role', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('ui/menuitemrenderer_test.js', ['goog.ui.MenuItemRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.MenuItemRenderer'], false);\ngoog.addDependency('ui/menurenderer.js', ['goog.ui.MenuRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.ui.ContainerRenderer', 'goog.ui.Separator'], false);\ngoog.addDependency('ui/menuseparator.js', ['goog.ui.MenuSeparator'], ['goog.ui.MenuSeparatorRenderer', 'goog.ui.Separator', 'goog.ui.registry'], false);\ngoog.addDependency('ui/menuseparatorrenderer.js', ['goog.ui.MenuSeparatorRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('ui/menuseparatorrenderer_test.js', ['goog.ui.MenuSeparatorRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.MenuSeparator', 'goog.ui.MenuSeparatorRenderer'], false);\ngoog.addDependency('ui/mockactivitymonitor.js', ['goog.ui.MockActivityMonitor'], ['goog.events.EventType', 'goog.ui.ActivityMonitor'], false);\ngoog.addDependency('ui/mockactivitymonitor_test.js', ['goog.ui.MockActivityMonitorTest'], ['goog.events', 'goog.functions', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.ActivityMonitor', 'goog.ui.MockActivityMonitor'], false);\ngoog.addDependency('ui/modalariavisibilityhelper.js', ['goog.ui.ModalAriaVisibilityHelper'], ['goog.a11y.aria', 'goog.a11y.aria.State'], false);\ngoog.addDependency('ui/modalariavisibilityhelper_test.js', ['goog.ui.ModalAriaVisibilityHelperTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.string', 'goog.testing.jsunit', 'goog.ui.ModalAriaVisibilityHelper'], false);\ngoog.addDependency('ui/modalpopup.js', ['goog.ui.ModalPopup'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.dom.iframe', 'goog.events', 'goog.events.EventType', 'goog.events.FocusHandler', 'goog.fx.Transition', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.ui.ModalAriaVisibilityHelper', 'goog.ui.PopupBase', 'goog.userAgent'], false);\ngoog.addDependency('ui/modalpopup_test.js', ['goog.ui.ModalPopupTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dispose', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventTarget', 'goog.fx.Transition', 'goog.fx.css3', 'goog.string', 'goog.style', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.ModalPopup', 'goog.ui.PopupBase'], false);\ngoog.addDependency('ui/nativebuttonrenderer.js', ['goog.ui.NativeButtonRenderer'], ['goog.asserts', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.ui.ButtonRenderer', 'goog.ui.Component'], false);\ngoog.addDependency('ui/nativebuttonrenderer_test.js', ['goog.ui.NativeButtonRendererTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.testing.ExpectedFailures', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.NativeButtonRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/option.js', ['goog.ui.Option'], ['goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.registry'], false);\ngoog.addDependency('ui/palette.js', ['goog.ui.Palette'], ['goog.array', 'goog.dom', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Size', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.PaletteRenderer', 'goog.ui.SelectionModel'], false);\ngoog.addDependency('ui/palette_test.js', ['goog.ui.PaletteTest'], ['goog.a11y.aria', 'goog.dom', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyEvent', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.Container', 'goog.ui.Palette'], false);\ngoog.addDependency('ui/paletterenderer.js', ['goog.ui.PaletteRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeIterator', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.iter', 'goog.style', 'goog.ui.ControlRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/paletterenderer_test.js', ['goog.ui.PaletteRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.Palette', 'goog.ui.PaletteRenderer'], false);\ngoog.addDependency('ui/plaintextspellchecker.js', ['goog.ui.PlainTextSpellChecker'], ['goog.Timer', 'goog.a11y.aria', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.spell.SpellCheck', 'goog.style', 'goog.ui.AbstractSpellChecker', 'goog.ui.Component', 'goog.userAgent'], false);\ngoog.addDependency('ui/plaintextspellchecker_test.js', ['goog.ui.PlainTextSpellCheckerTest'], ['goog.Timer', 'goog.dom', 'goog.events.KeyCodes', 'goog.spell.SpellCheck', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.PlainTextSpellChecker'], false);\ngoog.addDependency('ui/popup.js', ['goog.ui.Popup'], ['goog.math.Box', 'goog.positioning.Corner', 'goog.style', 'goog.ui.PopupBase'], false);\ngoog.addDependency('ui/popup_test.js', ['goog.ui.PopupTest'], ['goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.style', 'goog.testing.jsunit', 'goog.ui.Popup', 'goog.userAgent'], false);\ngoog.addDependency('ui/popupbase.js', ['goog.ui.PopupBase', 'goog.ui.PopupBase.EventType', 'goog.ui.PopupBase.Type'], ['goog.Timer', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Transition', 'goog.style', 'goog.userAgent'], false);\ngoog.addDependency('ui/popupbase_test.js', ['goog.ui.PopupBaseTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Transition', 'goog.fx.css3', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.PopupBase'], false);\ngoog.addDependency('ui/popupcolorpicker.js', ['goog.ui.PopupColorPicker'], ['goog.asserts', 'goog.dom.classlist', 'goog.events.EventType', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.ui.ColorPicker', 'goog.ui.Component', 'goog.ui.Popup'], false);\ngoog.addDependency('ui/popupcolorpicker_test.js', ['goog.ui.PopupColorPickerTest'], ['goog.dom', 'goog.events', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.ColorPicker', 'goog.ui.PopupColorPicker'], false);\ngoog.addDependency('ui/popupdatepicker.js', ['goog.ui.PopupDatePicker'], ['goog.events.EventType', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.style', 'goog.ui.Component', 'goog.ui.DatePicker', 'goog.ui.Popup', 'goog.ui.PopupBase'], false);\ngoog.addDependency('ui/popupdatepicker_test.js', ['goog.ui.PopupDatePickerTest'], ['goog.date.Date', 'goog.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.PopupBase', 'goog.ui.PopupDatePicker'], false);\ngoog.addDependency('ui/popupmenu.js', ['goog.ui.PopupMenu'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.positioning.AnchoredViewportPosition', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.positioning.Overflow', 'goog.positioning.ViewportClientPosition', 'goog.structs.Map', 'goog.style', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.PopupBase', 'goog.userAgent'], false);\ngoog.addDependency('ui/popupmenu_test.js', ['goog.ui.PopupMenuTest'], ['goog.dom', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Box', 'goog.math.Coordinate', 'goog.positioning.Corner', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.PopupMenu'], false);\ngoog.addDependency('ui/progressbar.js', ['goog.ui.ProgressBar', 'goog.ui.ProgressBar.Orientation'], ['goog.a11y.aria', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.ui.Component', 'goog.ui.RangeModel', 'goog.userAgent'], false);\ngoog.addDependency('ui/prompt.js', ['goog.ui.Prompt'], ['goog.Timer', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.functions', 'goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.ui.Component', 'goog.ui.Dialog', 'goog.userAgent'], false);\ngoog.addDependency('ui/prompt_test.js', ['goog.ui.PromptTest'], ['goog.dom.selection', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.functions', 'goog.string', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.BidiInput', 'goog.ui.Dialog', 'goog.ui.Prompt', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('ui/rangemodel.js', ['goog.ui.RangeModel'], ['goog.events.EventTarget', 'goog.ui.Component'], false);\ngoog.addDependency('ui/rangemodel_test.js', ['goog.ui.RangeModelTest'], ['goog.testing.jsunit', 'goog.ui.RangeModel'], false);\ngoog.addDependency('ui/ratings.js', ['goog.ui.Ratings', 'goog.ui.Ratings.EventType'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.ui.Component'], false);\ngoog.addDependency('ui/registry.js', ['goog.ui.registry'], ['goog.asserts', 'goog.dom.classlist'], false);\ngoog.addDependency('ui/registry_test.js', ['goog.ui.registryTest'], ['goog.object', 'goog.testing.jsunit', 'goog.ui.registry'], false);\ngoog.addDependency('ui/richtextspellchecker.js', ['goog.ui.RichTextSpellChecker'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.math.Coordinate', 'goog.spell.SpellCheck', 'goog.string.StringBuffer', 'goog.style', 'goog.ui.AbstractSpellChecker', 'goog.ui.Component', 'goog.ui.PopupMenu'], false);\ngoog.addDependency('ui/richtextspellchecker_test.js', ['goog.ui.RichTextSpellCheckerTest'], ['goog.dom.Range', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.KeyCodes', 'goog.object', 'goog.spell.SpellCheck', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.RichTextSpellChecker'], false);\ngoog.addDependency('ui/roundedpanel.js', ['goog.ui.BaseRoundedPanel', 'goog.ui.CssRoundedPanel', 'goog.ui.GraphicsRoundedPanel', 'goog.ui.RoundedPanel', 'goog.ui.RoundedPanel.Corner'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.graphics', 'goog.graphics.Path', 'goog.graphics.SolidFill', 'goog.graphics.Stroke', 'goog.math', 'goog.math.Coordinate', 'goog.style', 'goog.ui.Component', 'goog.userAgent'], false);\ngoog.addDependency('ui/roundedpanel_test.js', ['goog.ui.RoundedPanelTest'], ['goog.testing.jsunit', 'goog.ui.CssRoundedPanel', 'goog.ui.GraphicsRoundedPanel', 'goog.ui.RoundedPanel', 'goog.userAgent'], false);\ngoog.addDependency('ui/roundedtabrenderer.js', ['goog.ui.RoundedTabRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.ui.Tab', 'goog.ui.TabBar', 'goog.ui.TabRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/scrollfloater.js', ['goog.ui.ScrollFloater', 'goog.ui.ScrollFloater.EventType'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.style', 'goog.ui.Component', 'goog.userAgent'], false);\ngoog.addDependency('ui/scrollfloater_test.js', ['goog.ui.ScrollFloaterTest'], ['goog.dom', 'goog.events', 'goog.style', 'goog.testing.jsunit', 'goog.ui.ScrollFloater'], false);\ngoog.addDependency('ui/select.js', ['goog.ui.Select'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.events.EventType', 'goog.ui.Component', 'goog.ui.IdGenerator', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.MenuRenderer', 'goog.ui.SelectionModel', 'goog.ui.registry'], false);\ngoog.addDependency('ui/select_test.js', ['goog.ui.SelectTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.CustomButtonRenderer', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.Select', 'goog.ui.Separator'], false);\ngoog.addDependency('ui/selectionmenubutton.js', ['goog.ui.SelectionMenuButton', 'goog.ui.SelectionMenuButton.SelectionState'], ['goog.dom.InputType', 'goog.dom.TagName', 'goog.events.EventType', 'goog.style', 'goog.ui.Component', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.registry'], false);\ngoog.addDependency('ui/selectionmenubutton_test.js', ['goog.ui.SelectionMenuButtonTest'], ['goog.dom', 'goog.events', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.SelectionMenuButton'], false);\ngoog.addDependency('ui/selectionmodel.js', ['goog.ui.SelectionModel'], ['goog.array', 'goog.events.EventTarget', 'goog.events.EventType'], false);\ngoog.addDependency('ui/selectionmodel_test.js', ['goog.ui.SelectionModelTest'], ['goog.array', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.SelectionModel'], false);\ngoog.addDependency('ui/separator.js', ['goog.ui.Separator'], ['goog.a11y.aria', 'goog.asserts', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.MenuSeparatorRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/serverchart.js', ['goog.ui.ServerChart', 'goog.ui.ServerChart.AxisDisplayType', 'goog.ui.ServerChart.ChartType', 'goog.ui.ServerChart.EncodingType', 'goog.ui.ServerChart.Event', 'goog.ui.ServerChart.LegendPosition', 'goog.ui.ServerChart.MaximumValue', 'goog.ui.ServerChart.MultiAxisAlignment', 'goog.ui.ServerChart.MultiAxisType', 'goog.ui.ServerChart.UriParam', 'goog.ui.ServerChart.UriTooLongEvent'], ['goog.Uri', 'goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.events.Event', 'goog.string', 'goog.ui.Component'], false);\ngoog.addDependency('ui/serverchart_test.js', ['goog.ui.ServerChartTest'], ['goog.Uri', 'goog.events', 'goog.testing.jsunit', 'goog.ui.ServerChart'], false);\ngoog.addDependency('ui/slider.js', ['goog.ui.Slider', 'goog.ui.Slider.Orientation'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.dom.TagName', 'goog.ui.SliderBase'], false);\ngoog.addDependency('ui/sliderbase.js', ['goog.ui.SliderBase', 'goog.ui.SliderBase.AnimationFactory', 'goog.ui.SliderBase.Orientation'], ['goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.events.MouseWheelHandler', 'goog.functions', 'goog.fx.AnimationParallelQueue', 'goog.fx.Dragger', 'goog.fx.Transition', 'goog.fx.dom.ResizeHeight', 'goog.fx.dom.ResizeWidth', 'goog.fx.dom.Slide', 'goog.math', 'goog.math.Coordinate', 'goog.style', 'goog.style.bidi', 'goog.ui.Component', 'goog.ui.RangeModel'], false);\ngoog.addDependency('ui/sliderbase_test.js', ['goog.ui.SliderBaseTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Animation', 'goog.math.Coordinate', 'goog.style', 'goog.style.bidi', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.SliderBase', 'goog.userAgent'], false);\ngoog.addDependency('ui/splitbehavior.js', ['goog.ui.SplitBehavior', 'goog.ui.SplitBehavior.DefaultHandlers'], ['goog.Disposable', 'goog.asserts', 'goog.dispose', 'goog.dom.NodeType', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.ui.ButtonSide', 'goog.ui.Component', 'goog.ui.decorate', 'goog.ui.registry'], false);\ngoog.addDependency('ui/splitbehavior_test.js', ['goog.ui.SplitBehaviorTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.CustomButton', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.SplitBehavior', 'goog.ui.decorate'], false);\ngoog.addDependency('ui/splitpane.js', ['goog.ui.SplitPane', 'goog.ui.SplitPane.Orientation'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.fx.Dragger', 'goog.math.Rect', 'goog.math.Size', 'goog.style', 'goog.ui.Component', 'goog.userAgent'], false);\ngoog.addDependency('ui/splitpane_test.js', ['goog.ui.SplitPaneTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.math.Size', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.SplitPane'], false);\ngoog.addDependency('ui/style/app/buttonrenderer.js', ['goog.ui.style.app.ButtonRenderer'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Button', 'goog.ui.CustomButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.registry'], false);\ngoog.addDependency('ui/style/app/buttonrenderer_test.js', ['goog.ui.style.app.ButtonRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.style.app.ButtonRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/style/app/menubuttonrenderer.js', ['goog.ui.style.app.MenuButtonRenderer'], ['goog.a11y.aria.Role', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.ui.Menu', 'goog.ui.MenuRenderer', 'goog.ui.style.app.ButtonRenderer'], false);\ngoog.addDependency('ui/style/app/menubuttonrenderer_test.js', ['goog.ui.style.app.MenuButtonRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style', 'goog.ui.Component', 'goog.ui.MenuButton', 'goog.ui.style.app.MenuButtonRenderer'], false);\ngoog.addDependency('ui/style/app/primaryactionbuttonrenderer.js', ['goog.ui.style.app.PrimaryActionButtonRenderer'], ['goog.ui.Button', 'goog.ui.registry', 'goog.ui.style.app.ButtonRenderer'], false);\ngoog.addDependency('ui/style/app/primaryactionbuttonrenderer_test.js', ['goog.ui.style.app.PrimaryActionButtonRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.style.app.PrimaryActionButtonRenderer'], false);\ngoog.addDependency('ui/submenu.js', ['goog.ui.SubMenu'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events.KeyCodes', 'goog.positioning.AnchoredViewportPosition', 'goog.positioning.Corner', 'goog.style', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.SubMenuRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/submenu_test.js', ['goog.ui.SubMenuTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.functions', 'goog.positioning', 'goog.positioning.Overflow', 'goog.style', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.SubMenu', 'goog.ui.SubMenuRenderer'], false);\ngoog.addDependency('ui/submenurenderer.js', ['goog.ui.SubMenuRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.style', 'goog.ui.Menu', 'goog.ui.MenuItemRenderer'], false);\ngoog.addDependency('ui/tab.js', ['goog.ui.Tab'], ['goog.ui.Component', 'goog.ui.Control', 'goog.ui.TabRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/tab_test.js', ['goog.ui.TabTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Tab', 'goog.ui.TabRenderer'], false);\ngoog.addDependency('ui/tabbar.js', ['goog.ui.TabBar', 'goog.ui.TabBar.Location'], ['goog.ui.Component.EventType', 'goog.ui.Container', 'goog.ui.Container.Orientation', 'goog.ui.Tab', 'goog.ui.TabBarRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/tabbar_test.js', ['goog.ui.TabBarTest'], ['goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Container', 'goog.ui.Tab', 'goog.ui.TabBar', 'goog.ui.TabBarRenderer'], false);\ngoog.addDependency('ui/tabbarrenderer.js', ['goog.ui.TabBarRenderer'], ['goog.a11y.aria.Role', 'goog.object', 'goog.ui.ContainerRenderer'], false);\ngoog.addDependency('ui/tabbarrenderer_test.js', ['goog.ui.TabBarRendererTest'], ['goog.a11y.aria.Role', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Container', 'goog.ui.TabBar', 'goog.ui.TabBarRenderer'], false);\ngoog.addDependency('ui/tablesorter.js', ['goog.ui.TableSorter', 'goog.ui.TableSorter.EventType'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.functions', 'goog.ui.Component'], false);\ngoog.addDependency('ui/tablesorter_test.js', ['goog.ui.TableSorterTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.TableSorter'], false);\ngoog.addDependency('ui/tabpane.js', ['goog.ui.TabPane', 'goog.ui.TabPane.Events', 'goog.ui.TabPane.TabLocation', 'goog.ui.TabPane.TabPage', 'goog.ui.TabPaneEvent'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.style'], false);\ngoog.addDependency('ui/tabpane_test.js', ['goog.ui.TabPaneTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.TabPane'], false);\ngoog.addDependency('ui/tabrenderer.js', ['goog.ui.TabRenderer'], ['goog.a11y.aria.Role', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('ui/tabrenderer_test.js', ['goog.ui.TabRendererTest'], ['goog.a11y.aria.Role', 'goog.dom', 'goog.dom.classlist', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Tab', 'goog.ui.TabRenderer'], false);\ngoog.addDependency('ui/textarea.js', ['goog.ui.Textarea', 'goog.ui.Textarea.EventType'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events.EventType', 'goog.style', 'goog.ui.Control', 'goog.ui.TextareaRenderer', 'goog.userAgent'], false);\ngoog.addDependency('ui/textarea_test.js', ['goog.ui.TextareaTest'], ['goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.events.EventObserver', 'goog.testing.jsunit', 'goog.ui.Textarea', 'goog.ui.TextareaRenderer', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('ui/textarearenderer.js', ['goog.ui.TextareaRenderer'], ['goog.dom.TagName', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false);\ngoog.addDependency('ui/togglebutton.js', ['goog.ui.ToggleButton'], ['goog.ui.Button', 'goog.ui.Component', 'goog.ui.CustomButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/toolbar.js', ['goog.ui.Toolbar'], ['goog.ui.Container', 'goog.ui.ToolbarRenderer'], false);\ngoog.addDependency('ui/toolbar_test.js', ['goog.ui.ToolbarTest'], ['goog.a11y.aria', 'goog.dom', 'goog.events.EventType', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.Toolbar', 'goog.ui.ToolbarMenuButton'], false);\ngoog.addDependency('ui/toolbarbutton.js', ['goog.ui.ToolbarButton'], ['goog.ui.Button', 'goog.ui.ToolbarButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/toolbarbuttonrenderer.js', ['goog.ui.ToolbarButtonRenderer'], ['goog.ui.CustomButtonRenderer'], false);\ngoog.addDependency('ui/toolbarcolormenubutton.js', ['goog.ui.ToolbarColorMenuButton'], ['goog.ui.ColorMenuButton', 'goog.ui.ToolbarColorMenuButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/toolbarcolormenubuttonrenderer.js', ['goog.ui.ToolbarColorMenuButtonRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.ui.ColorMenuButtonRenderer', 'goog.ui.MenuButtonRenderer', 'goog.ui.ToolbarMenuButtonRenderer'], false);\ngoog.addDependency('ui/toolbarcolormenubuttonrenderer_test.js', ['goog.ui.ToolbarColorMenuButtonRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.RendererHarness', 'goog.testing.ui.rendererasserts', 'goog.ui.ToolbarColorMenuButton', 'goog.ui.ToolbarColorMenuButtonRenderer'], false);\ngoog.addDependency('ui/toolbarmenubutton.js', ['goog.ui.ToolbarMenuButton'], ['goog.ui.MenuButton', 'goog.ui.ToolbarMenuButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/toolbarmenubuttonrenderer.js', ['goog.ui.ToolbarMenuButtonRenderer'], ['goog.ui.MenuButtonRenderer'], false);\ngoog.addDependency('ui/toolbarrenderer.js', ['goog.ui.ToolbarRenderer'], ['goog.a11y.aria.Role', 'goog.dom.TagName', 'goog.ui.Container', 'goog.ui.ContainerRenderer', 'goog.ui.Separator', 'goog.ui.ToolbarSeparatorRenderer'], false);\ngoog.addDependency('ui/toolbarselect.js', ['goog.ui.ToolbarSelect'], ['goog.ui.Select', 'goog.ui.ToolbarMenuButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/toolbarseparator.js', ['goog.ui.ToolbarSeparator'], ['goog.ui.Separator', 'goog.ui.ToolbarSeparatorRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/toolbarseparatorrenderer.js', ['goog.ui.ToolbarSeparatorRenderer'], ['goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.MenuSeparatorRenderer'], false);\ngoog.addDependency('ui/toolbarseparatorrenderer_test.js', ['goog.ui.ToolbarSeparatorRendererTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.ToolbarSeparator', 'goog.ui.ToolbarSeparatorRenderer'], false);\ngoog.addDependency('ui/toolbartogglebutton.js', ['goog.ui.ToolbarToggleButton'], ['goog.ui.ToggleButton', 'goog.ui.ToolbarButtonRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/tooltip.js', ['goog.ui.Tooltip', 'goog.ui.Tooltip.CursorTooltipPosition', 'goog.ui.Tooltip.ElementTooltipPosition', 'goog.ui.Tooltip.State'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.events.EventType', 'goog.events.FocusHandler', 'goog.html.legacyconversions', 'goog.math.Box', 'goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus', 'goog.positioning.ViewportPosition', 'goog.structs.Set', 'goog.style', 'goog.ui.Popup', 'goog.ui.PopupBase'], false);\ngoog.addDependency('ui/tooltip_test.js', ['goog.ui.TooltipTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.FocusHandler', 'goog.html.testing', 'goog.math.Coordinate', 'goog.positioning.AbsolutePosition', 'goog.style', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.TestQueue', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.PopupBase', 'goog.ui.Tooltip', 'goog.userAgent'], false);\ngoog.addDependency('ui/tree/basenode.js', ['goog.ui.tree.BaseNode', 'goog.ui.tree.BaseNode.EventType'], ['goog.Timer', 'goog.a11y.aria', 'goog.asserts', 'goog.dom.safe', 'goog.events.Event', 'goog.events.KeyCodes', 'goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.legacyconversions', 'goog.string', 'goog.string.StringBuffer', 'goog.style', 'goog.ui.Component'], false);\ngoog.addDependency('ui/tree/basenode_test.js', ['goog.ui.tree.BaseNodeTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.html.legacyconversions', 'goog.html.testing', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.tree.BaseNode', 'goog.ui.tree.TreeControl', 'goog.ui.tree.TreeNode'], false);\ngoog.addDependency('ui/tree/treecontrol.js', ['goog.ui.tree.TreeControl'], ['goog.a11y.aria', 'goog.asserts', 'goog.dom.classlist', 'goog.events.EventType', 'goog.events.FocusHandler', 'goog.events.KeyHandler', 'goog.html.SafeHtml', 'goog.log', 'goog.ui.tree.BaseNode', 'goog.ui.tree.TreeNode', 'goog.ui.tree.TypeAhead', 'goog.userAgent'], false);\ngoog.addDependency('ui/tree/treecontrol_test.js', ['goog.ui.tree.TreeControlTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.tree.TreeControl'], false);\ngoog.addDependency('ui/tree/treenode.js', ['goog.ui.tree.TreeNode'], ['goog.ui.tree.BaseNode'], false);\ngoog.addDependency('ui/tree/typeahead.js', ['goog.ui.tree.TypeAhead', 'goog.ui.tree.TypeAhead.Offset'], ['goog.array', 'goog.events.KeyCodes', 'goog.string', 'goog.structs.Trie'], false);\ngoog.addDependency('ui/tree/typeahead_test.js', ['goog.ui.tree.TypeAheadTest'], ['goog.dom', 'goog.events.KeyCodes', 'goog.testing.jsunit', 'goog.ui.tree.TreeControl', 'goog.ui.tree.TypeAhead'], false);\ngoog.addDependency('ui/tristatemenuitem.js', ['goog.ui.TriStateMenuItem', 'goog.ui.TriStateMenuItem.State'], ['goog.dom.classlist', 'goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.TriStateMenuItemRenderer', 'goog.ui.registry'], false);\ngoog.addDependency('ui/tristatemenuitemrenderer.js', ['goog.ui.TriStateMenuItemRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.ui.MenuItemRenderer'], false);\ngoog.addDependency('ui/twothumbslider.js', ['goog.ui.TwoThumbSlider'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.dom.TagName', 'goog.ui.SliderBase'], false);\ngoog.addDependency('ui/twothumbslider_test.js', ['goog.ui.TwoThumbSliderTest'], ['goog.testing.jsunit', 'goog.ui.SliderBase', 'goog.ui.TwoThumbSlider'], false);\ngoog.addDependency('ui/zippy.js', ['goog.ui.Zippy', 'goog.ui.Zippy.Events', 'goog.ui.ZippyEvent'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.classlist', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.style'], false);\ngoog.addDependency('ui/zippy_test.js', ['goog.ui.ZippyTest'], ['goog.a11y.aria', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.object', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Zippy'], false);\ngoog.addDependency('uri/uri.js', ['goog.Uri', 'goog.Uri.QueryData'], ['goog.array', 'goog.string', 'goog.structs', 'goog.structs.Map', 'goog.uri.utils', 'goog.uri.utils.ComponentIndex', 'goog.uri.utils.StandardQueryParam'], false);\ngoog.addDependency('uri/uri_test.js', ['goog.UriTest'], ['goog.Uri', 'goog.testing.jsunit'], false);\ngoog.addDependency('uri/utils.js', ['goog.uri.utils', 'goog.uri.utils.ComponentIndex', 'goog.uri.utils.QueryArray', 'goog.uri.utils.QueryValue', 'goog.uri.utils.StandardQueryParam'], ['goog.asserts', 'goog.string'], false);\ngoog.addDependency('uri/utils_test.js', ['goog.uri.utilsTest'], ['goog.functions', 'goog.string', 'goog.testing.jsunit', 'goog.uri.utils'], false);\ngoog.addDependency('useragent/adobereader.js', ['goog.userAgent.adobeReader'], ['goog.string', 'goog.userAgent'], false);\ngoog.addDependency('useragent/adobereader_test.js', ['goog.userAgent.adobeReaderTest'], ['goog.testing.jsunit', 'goog.userAgent.adobeReader'], false);\ngoog.addDependency('useragent/flash.js', ['goog.userAgent.flash'], ['goog.string'], false);\ngoog.addDependency('useragent/flash_test.js', ['goog.userAgent.flashTest'], ['goog.testing.jsunit', 'goog.userAgent.flash'], false);\ngoog.addDependency('useragent/iphoto.js', ['goog.userAgent.iphoto'], ['goog.string', 'goog.userAgent'], false);\ngoog.addDependency('useragent/jscript.js', ['goog.userAgent.jscript'], ['goog.string'], false);\ngoog.addDependency('useragent/jscript_test.js', ['goog.userAgent.jscriptTest'], ['goog.testing.jsunit', 'goog.userAgent.jscript'], false);\ngoog.addDependency('useragent/keyboard.js', ['goog.userAgent.keyboard'], ['goog.labs.userAgent.platform'], false);\ngoog.addDependency('useragent/keyboard_test.js', ['goog.userAgent.keyboardTest'], ['goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent.keyboard', 'goog.userAgentTestUtil'], false);\ngoog.addDependency('useragent/platform.js', ['goog.userAgent.platform'], ['goog.string', 'goog.userAgent'], false);\ngoog.addDependency('useragent/platform_test.js', ['goog.userAgent.platformTest'], ['goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.platform', 'goog.userAgentTestUtil'], false);\ngoog.addDependency('useragent/product.js', ['goog.userAgent.product'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.platform', 'goog.userAgent'], false);\ngoog.addDependency('useragent/product_isversion.js', ['goog.userAgent.product.isVersion'], ['goog.labs.userAgent.platform', 'goog.string', 'goog.userAgent', 'goog.userAgent.product'], false);\ngoog.addDependency('useragent/product_test.js', ['goog.userAgent.productTest'], ['goog.array', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.MockUserAgent', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion', 'goog.userAgentTestUtil'], false);\ngoog.addDependency('useragent/useragent.js', ['goog.userAgent'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.engine', 'goog.labs.userAgent.platform', 'goog.labs.userAgent.util', 'goog.string'], false);\ngoog.addDependency('useragent/useragent_quirks_test.js', ['goog.userAgentQuirksTest'], ['goog.testing.jsunit', 'goog.userAgent'], false);\ngoog.addDependency('useragent/useragent_test.js', ['goog.userAgentTest'], ['goog.array', 'goog.labs.userAgent.platform', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgentTestUtil'], false);\ngoog.addDependency('useragent/useragenttestutil.js', ['goog.userAgentTestUtil', 'goog.userAgentTestUtil.UserAgents'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.engine', 'goog.labs.userAgent.platform', 'goog.userAgent', 'goog.userAgent.keyboard', 'goog.userAgent.platform', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false);\ngoog.addDependency('vec/float32array.js', ['goog.vec.Float32Array'], [], false);\ngoog.addDependency('vec/float64array.js', ['goog.vec.Float64Array'], [], false);\ngoog.addDependency('vec/mat3.js', ['goog.vec.Mat3'], ['goog.vec'], false);\ngoog.addDependency('vec/mat3d.js', ['goog.vec.mat3d', 'goog.vec.mat3d.Type'], ['goog.vec'], false);\ngoog.addDependency('vec/mat3f.js', ['goog.vec.mat3f', 'goog.vec.mat3f.Type'], ['goog.vec'], false);\ngoog.addDependency('vec/mat4.js', ['goog.vec.Mat4'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false);\ngoog.addDependency('vec/mat4d.js', ['goog.vec.mat4d', 'goog.vec.mat4d.Type'], ['goog.vec', 'goog.vec.vec3d', 'goog.vec.vec4d'], false);\ngoog.addDependency('vec/mat4f.js', ['goog.vec.mat4f', 'goog.vec.mat4f.Type'], ['goog.vec', 'goog.vec.vec3f', 'goog.vec.vec4f'], false);\ngoog.addDependency('vec/matrix3.js', ['goog.vec.Matrix3'], [], false);\ngoog.addDependency('vec/matrix4.js', ['goog.vec.Matrix4'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false);\ngoog.addDependency('vec/quaternion.js', ['goog.vec.Quaternion'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false);\ngoog.addDependency('vec/ray.js', ['goog.vec.Ray'], ['goog.vec.Vec3'], false);\ngoog.addDependency('vec/vec.js', ['goog.vec', 'goog.vec.AnyType', 'goog.vec.ArrayType', 'goog.vec.Float32', 'goog.vec.Float64', 'goog.vec.Number'], ['goog.vec.Float32Array', 'goog.vec.Float64Array'], false);\ngoog.addDependency('vec/vec2.js', ['goog.vec.Vec2'], ['goog.vec'], false);\ngoog.addDependency('vec/vec2d.js', ['goog.vec.vec2d', 'goog.vec.vec2d.Type'], ['goog.vec'], false);\ngoog.addDependency('vec/vec2f.js', ['goog.vec.vec2f', 'goog.vec.vec2f.Type'], ['goog.vec'], false);\ngoog.addDependency('vec/vec3.js', ['goog.vec.Vec3'], ['goog.vec'], false);\ngoog.addDependency('vec/vec3d.js', ['goog.vec.vec3d', 'goog.vec.vec3d.Type'], ['goog.vec'], false);\ngoog.addDependency('vec/vec3f.js', ['goog.vec.vec3f', 'goog.vec.vec3f.Type'], ['goog.vec'], false);\ngoog.addDependency('vec/vec4.js', ['goog.vec.Vec4'], ['goog.vec'], false);\ngoog.addDependency('vec/vec4d.js', ['goog.vec.vec4d', 'goog.vec.vec4d.Type'], ['goog.vec'], false);\ngoog.addDependency('vec/vec4f.js', ['goog.vec.vec4f', 'goog.vec.vec4f.Type'], ['goog.vec'], false);\ngoog.addDependency('webgl/webgl.js', ['goog.webgl'], [], false);\ngoog.addDependency('window/window.js', ['goog.window'], ['goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeUrl', 'goog.html.uncheckedconversions', 'goog.labs.userAgent.platform', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false);\ngoog.addDependency('window/window_test.js', ['goog.windowTest'], ['goog.Promise', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.functions', 'goog.labs.userAgent.browser', 'goog.labs.userAgent.engine', 'goog.labs.userAgent.platform', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.window'], false);\n"
  },
  {
    "path": "libs/openlayers3/ol.css",
    "content": ".ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:#95b9e6;background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:#eee;background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:#7b98bc;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:#4c6079;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:\" \"}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}"
  },
  {
    "path": "libs/openlayers3/ol.js",
    "content": "// OpenLayers 3. See http://openlayers.org/\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\n// Version: v3.11.2\n\n(function (root, factory) {\n  if (typeof exports === \"object\") {\n    module.exports = factory();\n  } else if (typeof define === \"function\" && define.amd) {\n    define([], factory);\n  } else {\n    root.ol = factory();\n  }\n}(this, function () {\n  var OPENLAYERS = {};\n  var l,aa=aa||{},ba=this;function ca(b){return void 0!==b}function u(b,c,d){b=b.split(\".\");d=d||ba;b[0]in d||!d.execScript||d.execScript(\"var \"+b[0]);for(var e;b.length&&(e=b.shift());)!b.length&&ca(c)?d[e]=c:d[e]?d=d[e]:d=d[e]={}}function da(){}function ea(b){b.Yb=function(){return b.Ng?b.Ng:b.Ng=new b}}\nfunction fa(b){var c=typeof b;if(\"object\"==c)if(b){if(b instanceof Array)return\"array\";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if(\"[object Window]\"==d)return\"object\";if(\"[object Array]\"==d||\"number\"==typeof b.length&&\"undefined\"!=typeof b.splice&&\"undefined\"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==d||\"undefined\"!=typeof b.call&&\"undefined\"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==c&&\"undefined\"==typeof b.call)return\"object\";return c}function ga(b){return\"array\"==fa(b)}function ha(b){var c=fa(b);return\"array\"==c||\"object\"==c&&\"number\"==typeof b.length}function ia(b){return\"string\"==typeof b}function ja(b){return\"number\"==typeof b}function ka(b){return\"function\"==fa(b)}function ma(b){var c=typeof b;return\"object\"==c&&null!=b||\"function\"==c}function w(b){return b[na]||(b[na]=++oa)}var na=\"closure_uid_\"+(1E9*Math.random()>>>0),oa=0;\nfunction pa(b,c,d){return b.call.apply(b.bind,arguments)}function qa(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ra(b,c,d){ra=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?pa:qa;return ra.apply(null,arguments)}\nfunction sa(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}var ta=Date.now||function(){return+new Date};function y(b,c){function d(){}d.prototype=c.prototype;b.da=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.zp=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var ua,va;function wa(){};function xa(b){if(Error.captureStackTrace)Error.captureStackTrace(this,xa);else{var c=Error().stack;c&&(this.stack=c)}b&&(this.message=String(b))}y(xa,Error);xa.prototype.name=\"CustomError\";var ya;function Aa(b,c){var d=b.length-c.length;return 0<=d&&b.indexOf(c,d)==d}function Ba(b,c){for(var d=b.split(\"%s\"),e=\"\",f=Array.prototype.slice.call(arguments,1);f.length&&1<d.length;)e+=d.shift()+f.shift();return e+d.join(\"%s\")}var Ca=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};\nfunction Da(b){if(!Fa.test(b))return b;-1!=b.indexOf(\"&\")&&(b=b.replace(Ga,\"&amp;\"));-1!=b.indexOf(\"<\")&&(b=b.replace(Ha,\"&lt;\"));-1!=b.indexOf(\">\")&&(b=b.replace(Ia,\"&gt;\"));-1!=b.indexOf('\"')&&(b=b.replace(Ja,\"&quot;\"));-1!=b.indexOf(\"'\")&&(b=b.replace(La,\"&#39;\"));-1!=b.indexOf(\"\\x00\")&&(b=b.replace(Ma,\"&#0;\"));return b}var Ga=/&/g,Ha=/</g,Ia=/>/g,Ja=/\"/g,La=/'/g,Ma=/\\x00/g,Fa=/[\\x00&<>\"']/,Na=String.prototype.repeat?function(b,c){return b.repeat(c)}:function(b,c){return Array(c+1).join(b)};\nfunction Oa(b){b=ca(void 0)?b.toFixed(void 0):String(b);var c=b.indexOf(\".\");-1==c&&(c=b.length);return Na(\"0\",Math.max(0,2-c))+b}\nfunction Pa(b,c){for(var d=0,e=Ca(String(b)).split(\".\"),f=Ca(String(c)).split(\".\"),g=Math.max(e.length,f.length),h=0;0==d&&h<g;h++){var k=e[h]||\"\",m=f[h]||\"\",n=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\"),p=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\");do{var q=n.exec(k)||[\"\",\"\",\"\"],r=p.exec(m)||[\"\",\"\",\"\"];if(0==q[0].length&&0==r[0].length)break;d=Qa(0==q[1].length?0:parseInt(q[1],10),0==r[1].length?0:parseInt(r[1],10))||Qa(0==q[2].length,0==r[2].length)||Qa(q[2],r[2])}while(0==d)}return d}function Qa(b,c){return b<c?-1:b>c?1:0};function Sa(b,c,d){return Math.min(Math.max(b,c),d)}var Ta=function(){var b;\"cosh\"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ua(b,c,d,e,f,g){var h=f-d,k=g-e;if(0!==h||0!==k){var m=((b-d)*h+(c-e)*k)/(h*h+k*k);1<m?(d=f,e=g):0<m&&(d+=h*m,e+=k*m)}return Va(b,c,d,e)}function Va(b,c,d,e){b=d-b;c=e-c;return b*b+c*c}function Wa(b){return b*Math.PI/180};function Xa(b){return function(c){if(c)return[Sa(c[0],b[0],b[2]),Sa(c[1],b[1],b[3])]}}function Ya(b){return b};var Za=Array.prototype;function $a(b,c){return Za.indexOf.call(b,c,void 0)}function ab(b,c){Za.forEach.call(b,c,void 0)}function bb(b,c){return Za.filter.call(b,c,void 0)}function db(b,c){return Za.map.call(b,c,void 0)}function eb(b,c){return Za.some.call(b,c,void 0)}function fb(b,c){var d=gb(b,c,void 0);return 0>d?null:ia(b)?b.charAt(d):b[d]}function gb(b,c,d){for(var e=b.length,f=ia(b)?b.split(\"\"):b,g=0;g<e;g++)if(g in f&&c.call(d,f[g],g,b))return g;return-1}\nfunction hb(b,c){var d=$a(b,c),e;(e=0<=d)&&Za.splice.call(b,d,1);return e}function ib(b){return Za.concat.apply(Za,arguments)}function jb(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function lb(b,c){for(var d=1;d<arguments.length;d++){var e=arguments[d];if(ha(e)){var f=b.length||0,g=e.length||0;b.length=f+g;for(var h=0;h<g;h++)b[f+h]=e[h]}else b.push(e)}}function mb(b,c,d,e){Za.splice.apply(b,nb(arguments,1))}\nfunction nb(b,c,d){return 2>=arguments.length?Za.slice.call(b,c):Za.slice.call(b,c,d)}function ob(b,c){b.sort(c||pb)}function qb(b){for(var c=rb,d=0;d<b.length;d++)b[d]={index:d,value:b[d]};var e=c||pb;ob(b,function(b,c){return e(b.value,c.value)||b.index-c.index});for(d=0;d<b.length;d++)b[d]=b[d].value}function sb(b,c){if(!ha(b)||!ha(c)||b.length!=c.length)return!1;for(var d=b.length,e=tb,f=0;f<d;f++)if(!e(b[f],c[f]))return!1;return!0}function pb(b,c){return b>c?1:b<c?-1:0}\nfunction tb(b,c){return b===c}function ub(b){for(var c=[],d=0;d<arguments.length;d++){var e=arguments[d];if(ga(e))for(var f=0;f<e.length;f+=8192)for(var g=nb(e,f,f+8192),g=ub.apply(null,g),h=0;h<g.length;h++)c.push(g[h]);else c.push(e)}return c};function vb(b,c){return 0<=b.indexOf(c)}function wb(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1};function xb(b){return function(c,d,e){if(void 0!==c)return c=wb(b,c,e),c=Sa(c+d,0,b.length-1),b[c]}}function yb(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function zb(b){if(void 0!==b)return 0}function Ab(b,c){if(void 0!==b)return b+c}function Bb(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Cb(){var b=Wa(5);return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Db(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Eb;a:{var Fb=ba.navigator;if(Fb){var Gb=Fb.userAgent;if(Gb){Eb=Gb;break a}}Eb=\"\"}function Hb(b){return-1!=Eb.indexOf(b)};function Ib(b,c,d){for(var e in b)c.call(d,b[e],e,b)}function Jb(b,c){for(var d in b)if(c.call(void 0,b[d],d,b))return!0;return!1}function Kb(b){var c=0,d;for(d in b)c++;return c}function Lb(b){var c=[],d=0,e;for(e in b)c[d++]=b[e];return c}function Mb(b){var c=[],d=0,e;for(e in b)c[d++]=e;return c}function Nb(b,c){return c in b}function Ob(b,c){for(var d in b)if(b[d]==c)return!0;return!1}function Pb(b,c){for(var d in b)if(c.call(void 0,b[d],d,b))return d}\nfunction Qb(b){for(var c in b)return!1;return!0}function Rb(b){for(var c in b)delete b[c]}function Sb(b,c,d){return c in b?b[c]:d}function Tb(b,c){var d=[];return c in b?b[c]:b[c]=d}function Ub(b){var c={},d;for(d in b)c[d]=b[d];return c}function Vb(b){var c=fa(b);if(\"object\"==c||\"array\"==c){if(ka(b.clone))return b.clone();var c=\"array\"==c?[]:{},d;for(d in b)c[d]=Vb(b[d]);return c}return b}var Wb=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");\nfunction Xb(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Wb.length;g++)d=Wb[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Yb=Hb(\"Opera\")||Hb(\"OPR\"),Zb=Hb(\"Trident\")||Hb(\"MSIE\"),$b=Hb(\"Edge\"),ac=Hb(\"Gecko\")&&!(-1!=Eb.toLowerCase().indexOf(\"webkit\")&&!Hb(\"Edge\"))&&!(Hb(\"Trident\")||Hb(\"MSIE\"))&&!Hb(\"Edge\"),bc=-1!=Eb.toLowerCase().indexOf(\"webkit\")&&!Hb(\"Edge\"),cc=Hb(\"Macintosh\"),dc=Hb(\"Windows\"),ec=Hb(\"Linux\")||Hb(\"CrOS\");function fc(){var b=Eb;if(ac)return/rv\\:([^\\);]+)(\\)|;)/.exec(b);if($b)return/Edge\\/([\\d\\.]+)/.exec(b);if(Zb)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(b);if(bc)return/WebKit\\/(\\S+)/.exec(b)}\nfunction gc(){var b=ba.document;return b?b.documentMode:void 0}var hc=function(){if(Yb&&ba.opera){var b;var c=ba.opera.version;try{b=c()}catch(d){b=c}return b}b=\"\";(c=fc())&&(b=c?c[1]:\"\");return Zb&&(c=gc(),c>parseFloat(b))?String(c):b}(),ic={};function jc(b){return ic[b]||(ic[b]=0<=Pa(hc,b))}var kc=ba.document,lc=kc&&Zb?gc()||(\"CSS1Compat\"==kc.compatMode?parseInt(hc,10):5):void 0;var mc=!Zb||9<=lc,nc=!Zb||9<=lc,oc=Zb&&!jc(\"9\");!bc||jc(\"528\");ac&&jc(\"1.9b\")||Zb&&jc(\"8\")||Yb&&jc(\"9.5\")||bc&&jc(\"528\");ac&&!jc(\"8\")||Zb&&jc(\"9\");function pc(){0!=qc&&(rc[w(this)]=this);this.ia=this.ia;this.oa=this.oa}var qc=0,rc={};pc.prototype.ia=!1;pc.prototype.Ec=function(){if(!this.ia&&(this.ia=!0,this.X(),0!=qc)){var b=w(this);delete rc[b]}};function tc(b,c){var d=sa(uc,c);b.ia?d.call(void 0):(b.oa||(b.oa=[]),b.oa.push(ca(void 0)?ra(d,void 0):d))}pc.prototype.X=function(){if(this.oa)for(;this.oa.length;)this.oa.shift()()};function uc(b){b&&\"function\"==typeof b.Ec&&b.Ec()};function vc(b,c){this.type=b;this.g=this.target=c;this.i=!1;this.Qh=!0}vc.prototype.b=function(){this.i=!0};vc.prototype.preventDefault=function(){this.Qh=!1};function wc(b){b.b()}function xc(b){b.preventDefault()};var yc=Zb?\"focusout\":\"DOMFocusOut\";function zc(b){zc[\" \"](b);return b}zc[\" \"]=da;function Ac(b,c){vc.call(this,b?b.type:\"\");this.relatedTarget=this.g=this.target=null;this.u=this.j=this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0;this.A=this.f=this.c=this.B=!1;this.state=null;this.l=!1;this.a=null;if(b){var d=this.type=b.type,e=b.changedTouches?b.changedTouches[0]:null;this.target=b.target||b.srcElement;this.g=c;var f=b.relatedTarget;if(f){if(ac){var g;a:{try{zc(f.nodeName);g=!0;break a}catch(h){}g=!1}g||(f=null)}}else\"mouseover\"==d?\nf=b.fromElement:\"mouseout\"==d&&(f=b.toElement);this.relatedTarget=f;null===e?(this.offsetX=bc||void 0!==b.offsetX?b.offsetX:b.layerX,this.offsetY=bc||void 0!==b.offsetY?b.offsetY:b.layerY,this.clientX=void 0!==b.clientX?b.clientX:b.pageX,this.clientY=void 0!==b.clientY?b.clientY:b.pageY,this.screenX=b.screenX||0,this.screenY=b.screenY||0):(this.clientX=void 0!==e.clientX?e.clientX:e.pageX,this.clientY=void 0!==e.clientY?e.clientY:e.pageY,this.screenX=e.screenX||0,this.screenY=e.screenY||0);this.button=\nb.button;this.j=b.keyCode||0;this.u=b.charCode||(\"keypress\"==d?b.keyCode:0);this.B=b.ctrlKey;this.c=b.altKey;this.f=b.shiftKey;this.A=b.metaKey;this.l=cc?b.metaKey:b.ctrlKey;this.state=b.state;this.a=b;b.defaultPrevented&&this.preventDefault()}}y(Ac,vc);var Bc=[1,4,2];function Cc(b){return(mc?0==b.a.button:\"click\"==b.type?!0:!!(b.a.button&Bc[0]))&&!(bc&&cc&&b.B)}Ac.prototype.b=function(){Ac.da.b.call(this);this.a.stopPropagation?this.a.stopPropagation():this.a.cancelBubble=!0};\nAc.prototype.preventDefault=function(){Ac.da.preventDefault.call(this);var b=this.a;if(b.preventDefault)b.preventDefault();else if(b.returnValue=!1,oc)try{if(b.ctrlKey||112<=b.keyCode&&123>=b.keyCode)b.keyCode=-1}catch(c){}};var Dc=\"closure_listenable_\"+(1E6*Math.random()|0);function Ec(b){return!(!b||!b[Dc])}var Fc=0;function Gc(b,c,d,e,f){this.listener=b;this.a=null;this.src=c;this.type=d;this.ad=!!e;this.je=f;this.key=++Fc;this.Tc=this.Ud=!1}function Hc(b){b.Tc=!0;b.listener=null;b.a=null;b.src=null;b.je=null};function Ic(b){this.src=b;this.a={};this.c=0}Ic.prototype.add=function(b,c,d,e,f){var g=b.toString();b=this.a[g];b||(b=this.a[g]=[],this.c++);var h=Jc(b,c,e,f);-1<h?(c=b[h],d||(c.Ud=!1)):(c=new Gc(c,this.src,g,!!e,f),c.Ud=d,b.push(c));return c};Ic.prototype.remove=function(b,c,d,e){b=b.toString();if(!(b in this.a))return!1;var f=this.a[b];c=Jc(f,c,d,e);return-1<c?(Hc(f[c]),Za.splice.call(f,c,1),0==f.length&&(delete this.a[b],this.c--),!0):!1};\nfunction Kc(b,c){var d=c.type;if(!(d in b.a))return!1;var e=hb(b.a[d],c);e&&(Hc(c),0==b.a[d].length&&(delete b.a[d],b.c--));return e}function Lc(b,c,d,e,f){b=b.a[c.toString()];c=-1;b&&(c=Jc(b,d,e,f));return-1<c?b[c]:null}function Mc(b,c,d){var e=ca(c),f=e?c.toString():\"\",g=ca(d);return Jb(b.a,function(b){for(var c=0;c<b.length;++c)if(!(e&&b[c].type!=f||g&&b[c].ad!=d))return!0;return!1})}\nfunction Jc(b,c,d,e){for(var f=0;f<b.length;++f){var g=b[f];if(!g.Tc&&g.listener==c&&g.ad==!!d&&g.je==e)return f}return-1};var Nc=\"closure_lm_\"+(1E6*Math.random()|0),Oc={},Pc=0;function C(b,c,d,e,f){if(ga(c)){for(var g=0;g<c.length;g++)C(b,c[g],d,e,f);return null}d=Qc(d);return Ec(b)?b.Qa(c,d,e,f):Sc(b,c,d,!1,e,f)}\nfunction Sc(b,c,d,e,f,g){if(!c)throw Error(\"Invalid event type\");var h=!!f,k=Tc(b);k||(b[Nc]=k=new Ic(b));d=k.add(c,d,e,f,g);if(d.a)return d;e=Uc();d.a=e;e.src=b;e.listener=d;if(b.addEventListener)b.addEventListener(c.toString(),e,h);else if(b.attachEvent)b.attachEvent(Vc(c.toString()),e);else throw Error(\"addEventListener and attachEvent are unavailable.\");Pc++;return d}\nfunction Uc(){var b=Wc,c=nc?function(d){return b.call(c.src,c.listener,d)}:function(d){d=b.call(c.src,c.listener,d);if(!d)return d};return c}function Xc(b,c,d,e,f){if(ga(c)){for(var g=0;g<c.length;g++)Xc(b,c[g],d,e,f);return null}d=Qc(d);return Ec(b)?b.zb.add(String(c),d,!0,e,f):Sc(b,c,d,!0,e,f)}function Yc(b,c,d,e,f){if(ga(c))for(var g=0;g<c.length;g++)Yc(b,c[g],d,e,f);else d=Qc(d),Ec(b)?b.Vf(c,d,e,f):b&&(b=Tc(b))&&(c=Lc(b,c,d,!!e,f))&&Zc(c)}\nfunction Zc(b){if(ja(b)||!b||b.Tc)return!1;var c=b.src;if(Ec(c))return Kc(c.zb,b);var d=b.type,e=b.a;c.removeEventListener?c.removeEventListener(d,e,b.ad):c.detachEvent&&c.detachEvent(Vc(d),e);Pc--;(d=Tc(c))?(Kc(d,b),0==d.c&&(d.src=null,c[Nc]=null)):Hc(b);return!0}function Vc(b){return b in Oc?Oc[b]:Oc[b]=\"on\"+b}function $c(b,c,d,e){var f=!0;if(b=Tc(b))if(c=b.a[c.toString()])for(c=c.concat(),b=0;b<c.length;b++){var g=c[b];g&&g.ad==d&&!g.Tc&&(g=ad(g,e),f=f&&!1!==g)}return f}\nfunction ad(b,c){var d=b.listener,e=b.je||b.src;b.Ud&&Zc(b);return d.call(e,c)}\nfunction Wc(b,c){if(b.Tc)return!0;if(!nc){var d;if(!(d=c))a:{d=[\"window\",\"event\"];for(var e=ba,f;f=d.shift();)if(null!=e[f])e=e[f];else{d=null;break a}d=e}f=d;d=new Ac(f,this);e=!0;if(!(0>f.keyCode||void 0!=f.returnValue)){a:{var g=!1;if(0==f.keyCode)try{f.keyCode=-1;break a}catch(m){g=!0}if(g||void 0==f.returnValue)f.returnValue=!0}f=[];for(g=d.g;g;g=g.parentNode)f.push(g);for(var g=b.type,h=f.length-1;!d.i&&0<=h;h--){d.g=f[h];var k=$c(f[h],g,!0,d),e=e&&k}for(h=0;!d.i&&h<f.length;h++)d.g=f[h],k=\n$c(f[h],g,!1,d),e=e&&k}return e}return ad(b,new Ac(c,this))}function Tc(b){b=b[Nc];return b instanceof Ic?b:null}var bd=\"__closure_events_fn_\"+(1E9*Math.random()>>>0);function Qc(b){if(ka(b))return b;b[bd]||(b[bd]=function(c){return b.handleEvent(c)});return b[bd]};function cd(){pc.call(this);this.zb=new Ic(this);this.Nd=this;this.eb=null}y(cd,pc);cd.prototype[Dc]=!0;l=cd.prototype;l.addEventListener=function(b,c,d,e){C(this,b,c,d,e)};l.removeEventListener=function(b,c,d,e){Yc(this,b,c,d,e)};\nl.o=function(b){var c,d=this.eb;if(d)for(c=[];d;d=d.eb)c.push(d);var d=this.Nd,e=b.type||b;if(ia(b))b=new vc(b,d);else if(b instanceof vc)b.target=b.target||d;else{var f=b;b=new vc(e,d);Xb(b,f)}var f=!0,g;if(c)for(var h=c.length-1;!b.i&&0<=h;h--)g=b.g=c[h],f=dd(g,e,!0,b)&&f;b.i||(g=b.g=d,f=dd(g,e,!0,b)&&f,b.i||(f=dd(g,e,!1,b)&&f));if(c)for(h=0;!b.i&&h<c.length;h++)g=b.g=c[h],f=dd(g,e,!1,b)&&f;return f};\nl.X=function(){cd.da.X.call(this);if(this.zb){var b=this.zb,c=0,d;for(d in b.a){for(var e=b.a[d],f=0;f<e.length;f++)++c,Hc(e[f]);delete b.a[d];b.c--}}this.eb=null};l.Qa=function(b,c,d,e){return this.zb.add(String(b),c,!1,d,e)};l.Vf=function(b,c,d,e){return this.zb.remove(String(b),c,d,e)};\nfunction dd(b,c,d,e){c=b.zb.a[String(c)];if(!c)return!0;c=c.concat();for(var f=!0,g=0;g<c.length;++g){var h=c[g];if(h&&!h.Tc&&h.ad==d){var k=h.listener,m=h.je||h.src;h.Ud&&Kc(b.zb,h);f=!1!==k.call(m,e)&&f}}return f&&0!=e.Qh}function ed(b,c,d){return Mc(b.zb,ca(c)?String(c):void 0,d)};function fd(){cd.call(this);this.c=0}y(fd,cd);function gd(b){Zc(b)}l=fd.prototype;l.s=function(){++this.c;this.o(\"change\")};l.L=function(){return this.c};l.H=function(b,c,d){return C(this,b,c,!1,d)};l.M=function(b,c,d){return Xc(this,b,c,!1,d)};l.K=function(b,c,d){Yc(this,b,c,!1,d)};l.N=gd;function hd(b,c,d){vc.call(this,b);this.key=c;this.oldValue=d}y(hd,vc);function id(b){fd.call(this);w(this);this.B={};void 0!==b&&this.I(b)}y(id,fd);var jd={};function kd(b){return jd.hasOwnProperty(b)?jd[b]:jd[b]=\"change:\"+b}l=id.prototype;l.get=function(b){var c;this.B.hasOwnProperty(b)&&(c=this.B[b]);return c};l.O=function(){return Object.keys(this.B)};l.P=function(){var b={},c;for(c in this.B)b[c]=this.B[c];return b};\nfunction ld(b,c,d){var e;e=kd(c);b.o(new hd(e,c,d));b.o(new hd(\"propertychange\",c,d))}l.set=function(b,c,d){d?this.B[b]=c:(d=this.B[b],this.B[b]=c,ld(this,b,d))};l.I=function(b,c){for(var d in b)this.set(d,b[d],c)};l.R=function(b,c){if(b in this.B){var d=this.B[b];delete this.B[b];c||ld(this,b,d)}};function md(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]+2*c;d[1]=b[1]+2*c;return d}function nd(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function od(b,c){if(ga(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function pd(b,c){var d=b%c;return 0>d*c?d+c:d}function qd(b,c,d){return b+d*(c-b)};function rd(b,c){b[0]+=c[0];b[1]+=c[1];return b}function sd(b,c){var d=b[0],e=b[1],f=c[0],g=c[1],h=f[0],f=f[1],k=g[0],g=g[1],m=k-h,n=g-f,d=0===m&&0===n?0:(m*(d-h)+n*(e-f))/(m*m+n*n||0);0>=d||(1<=d?(h=k,f=g):(h+=d*m,f+=d*n));return[h,f]}function td(b,c){var d=pd(b+180,360)-180,e=Math.abs(Math.round(3600*d));return Math.floor(e/3600)+\"\\u00b0 \"+Oa(Math.floor(e/60%60))+\"\\u2032 \"+Oa(Math.floor(e%60))+\"\\u2033 \"+c.charAt(0>d?1:0)}\nfunction ud(b,c,d){return b?c.replace(\"{x}\",b[0].toFixed(d)).replace(\"{y}\",b[1].toFixed(d)):\"\"}function vd(b,c){for(var d=!0,e=b.length-1;0<=e;--e)if(b[e]!=c[e]){d=!1;break}return d}function wd(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f;return b}function xd(b,c){var d=b[0]-c[0],e=b[1]-c[1];return d*d+e*e}function yd(b,c){return xd(b,sd(b,c))}function zd(b,c){return ud(b,\"{x}, {y}\",c)};function Ad(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}Ad.prototype.a=4;Ad.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};Ad.prototype.toString=Array.prototype.join;\"undefined\"==typeof Float32Array&&(Ad.BYTES_PER_ELEMENT=4,Ad.prototype.BYTES_PER_ELEMENT=Ad.prototype.a,Ad.prototype.set=Ad.prototype.set,Ad.prototype.toString=Ad.prototype.toString,u(\"Float32Array\",Ad,void 0));function Bd(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}Bd.prototype.a=8;Bd.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};Bd.prototype.toString=Array.prototype.join;if(\"undefined\"==typeof Float64Array){try{Bd.BYTES_PER_ELEMENT=8}catch(b){}Bd.prototype.BYTES_PER_ELEMENT=Bd.prototype.a;Bd.prototype.set=Bd.prototype.set;Bd.prototype.toString=Bd.prototype.toString;u(\"Float64Array\",Bd,void 0)};function Cd(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function Dd(){var b=Array(16);Ed(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Fd(){var b=Array(16);Ed(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function Ed(b,c,d,e,f,g,h,k,m,n,p,q,r,t,x,z,B){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=m;b[8]=n;b[9]=p;b[10]=q;b[11]=r;b[12]=t;b[13]=x;b[14]=z;b[15]=B}\nfunction Gd(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Hd(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}\nfunction Id(b,c,d){var e=b[0],f=b[1],g=b[2],h=b[3],k=b[4],m=b[5],n=b[6],p=b[7],q=b[8],r=b[9],t=b[10],x=b[11],z=b[12],B=b[13],A=b[14];b=b[15];var v=c[0],O=c[1],K=c[2],I=c[3],G=c[4],la=c[5],Ea=c[6],L=c[7],za=c[8],Ra=c[9],Ka=c[10],kb=c[11],cb=c[12],Rc=c[13],sc=c[14];c=c[15];d[0]=e*v+k*O+q*K+z*I;d[1]=f*v+m*O+r*K+B*I;d[2]=g*v+n*O+t*K+A*I;d[3]=h*v+p*O+x*K+b*I;d[4]=e*G+k*la+q*Ea+z*L;d[5]=f*G+m*la+r*Ea+B*L;d[6]=g*G+n*la+t*Ea+A*L;d[7]=h*G+p*la+x*Ea+b*L;d[8]=e*za+k*Ra+q*Ka+z*kb;d[9]=f*za+m*Ra+r*Ka+B*kb;d[10]=\ng*za+n*Ra+t*Ka+A*kb;d[11]=h*za+p*Ra+x*Ka+b*kb;d[12]=e*cb+k*Rc+q*sc+z*c;d[13]=f*cb+m*Rc+r*sc+B*c;d[14]=g*cb+n*Rc+t*sc+A*c;d[15]=h*cb+p*Rc+x*sc+b*c}\nfunction Jd(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],m=b[6],n=b[7],p=b[8],q=b[9],r=b[10],t=b[11],x=b[12],z=b[13],B=b[14],A=b[15],v=d*k-e*h,O=d*m-f*h,K=d*n-g*h,I=e*m-f*k,G=e*n-g*k,la=f*n-g*m,Ea=p*z-q*x,L=p*B-r*x,za=p*A-t*x,Ra=q*B-r*z,Ka=q*A-t*z,kb=r*A-t*B,cb=v*kb-O*Ka+K*Ra+I*za-G*L+la*Ea;0!=cb&&(cb=1/cb,c[0]=(k*kb-m*Ka+n*Ra)*cb,c[1]=(-e*kb+f*Ka-g*Ra)*cb,c[2]=(z*la-B*G+A*I)*cb,c[3]=(-q*la+r*G-t*I)*cb,c[4]=(-h*kb+m*za-n*L)*cb,c[5]=(d*kb-f*za+g*L)*cb,c[6]=(-x*la+B*K-A*O)*cb,c[7]=(p*la-r*K+t*\nO)*cb,c[8]=(h*Ka-k*za+n*Ea)*cb,c[9]=(-d*Ka+e*za-g*Ea)*cb,c[10]=(x*G-z*K+A*v)*cb,c[11]=(-p*G+q*K-t*v)*cb,c[12]=(-h*Ra+k*L-m*Ea)*cb,c[13]=(d*Ra-e*L+f*Ea)*cb,c[14]=(-x*I+z*O-B*v)*cb,c[15]=(p*I-q*O+r*v)*cb)}function Kd(b,c,d){var e=b[1]*c+b[5]*d+0*b[9]+b[13],f=b[2]*c+b[6]*d+0*b[10]+b[14],g=b[3]*c+b[7]*d+0*b[11]+b[15];b[12]=b[0]*c+b[4]*d+0*b[8]+b[12];b[13]=e;b[14]=f;b[15]=g}\nfunction Ld(b,c,d){Ed(b,b[0]*c,b[1]*c,b[2]*c,b[3]*c,b[4]*d,b[5]*d,b[6]*d,b[7]*d,1*b[8],1*b[9],1*b[10],1*b[11],b[12],b[13],b[14],b[15])}function Md(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],m=b[6],n=b[7],p=Math.cos(c),q=Math.sin(c);b[0]=d*p+h*q;b[1]=e*p+k*q;b[2]=f*p+m*q;b[3]=g*p+n*q;b[4]=d*-q+h*p;b[5]=e*-q+k*p;b[6]=f*-q+m*p;b[7]=g*-q+n*p}new Float64Array(3);new Float64Array(3);new Float64Array(4);new Float64Array(4);new Float64Array(4);new Float64Array(16);function Nd(b){for(var c=Od(),d=0,e=b.length;d<e;++d)Pd(c,b[d]);return c}function Qd(b,c,d){var e=Math.min.apply(null,b),f=Math.min.apply(null,c);b=Math.max.apply(null,b);c=Math.max.apply(null,c);return Rd(e,f,b,c,d)}function Sd(b,c,d){return d?(d[0]=b[0]-c,d[1]=b[1]-c,d[2]=b[2]+c,d[3]=b[3]+c,d):[b[0]-c,b[1]-c,b[2]+c,b[3]+c]}function Td(b,c){return c?(c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c):b.slice()}\nfunction Ud(b,c,d){c=c<b[0]?b[0]-c:b[2]<c?c-b[2]:0;b=d<b[1]?b[1]-d:b[3]<d?d-b[3]:0;return c*c+b*b}function Vd(b,c){return Wd(b,c[0],c[1])}function Xd(b,c){return b[0]<=c[0]&&c[2]<=b[2]&&b[1]<=c[1]&&c[3]<=b[3]}function Wd(b,c,d){return b[0]<=c&&c<=b[2]&&b[1]<=d&&d<=b[3]}function Yd(b,c){var d=b[1],e=b[2],f=b[3],g=c[0],h=c[1],k=0;g<b[0]?k=k|16:g>e&&(k=k|4);h<d?k|=8:h>f&&(k|=2);0===k&&(k=1);return k}function Od(){return[Infinity,Infinity,-Infinity,-Infinity]}\nfunction Rd(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}function Zd(b,c){var d=b[0],e=b[1];return Rd(d,e,d,e,c)}function $d(b,c,d,e,f){f=Rd(Infinity,Infinity,-Infinity,-Infinity,f);return ae(f,b,c,d,e)}function be(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function ce(b,c){c[0]<b[0]&&(b[0]=c[0]);c[2]>b[2]&&(b[2]=c[2]);c[1]<b[1]&&(b[1]=c[1]);c[3]>b[3]&&(b[3]=c[3]);return b}\nfunction Pd(b,c){c[0]<b[0]&&(b[0]=c[0]);c[0]>b[2]&&(b[2]=c[0]);c[1]<b[1]&&(b[1]=c[1]);c[1]>b[3]&&(b[3]=c[1])}function ae(b,c,d,e,f){for(;d<e;d+=f){var g=b,h=c[d],k=c[d+1];g[0]=Math.min(g[0],h);g[1]=Math.min(g[1],k);g[2]=Math.max(g[2],h);g[3]=Math.max(g[3],k)}return b}function de(b,c,d){var e;return(e=c.call(d,ee(b)))||(e=c.call(d,fe(b)))||(e=c.call(d,ge(b)))?e:(e=c.call(d,he(b)))?e:!1}function ie(b){var c=0;je(b)||(c=ke(b)*le(b));return c}function ee(b){return[b[0],b[1]]}\nfunction fe(b){return[b[2],b[1]]}function me(b){return[(b[0]+b[2])/2,(b[1]+b[3])/2]}function ne(b,c,d,e){var f=c*e[0]/2;e=c*e[1]/2;c=Math.cos(d);d=Math.sin(d);f=[-f,-f,f,f];e=[-e,e,-e,e];var g,h,k;for(g=0;4>g;++g)h=f[g],k=e[g],f[g]=b[0]+h*c-k*d,e[g]=b[1]+h*d+k*c;return Qd(f,e,void 0)}function le(b){return b[3]-b[1]}function oe(b,c,d){d=d?d:Od();pe(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]<c[2]?b[2]:c[2],d[3]=b[3]<c[3]?b[3]:c[3]);return d}function he(b){return[b[0],b[3]]}\nfunction ge(b){return[b[2],b[3]]}function ke(b){return b[2]-b[0]}function pe(b,c){return b[0]<=c[2]&&b[2]>=c[0]&&b[1]<=c[3]&&b[3]>=c[1]}function je(b){return b[2]<b[0]||b[3]<b[1]}function qe(b,c){var d=(b[2]-b[0])/2*(c-1),e=(b[3]-b[1])/2*(c-1);b[0]-=d;b[2]+=d;b[1]-=e;b[3]+=e}function re(b,c,d){b=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];c(b,b,2);return Qd([b[0],b[2],b[4],b[6]],[b[1],b[3],b[5],b[7]],d)};function se(b){return function(){return b}}var te=se(!1),ue=se(!0),ve=se(null);function we(b){return b}function xe(b){var c;c=c||0;return function(){return b.apply(this,Array.prototype.slice.call(arguments,0,c))}}function ye(b){var c=arguments,d=c.length;return function(){for(var b,f=0;f<d;f++)b=c[f].apply(this,arguments);return b}}function ze(b){var c=arguments,d=c.length;return function(){for(var b=0;b<d;b++)if(!c[b].apply(this,arguments))return!1;return!0}};/*\n\n Latitude/longitude spherical geodesy formulae taken from\n http://www.movable-type.co.uk/scripts/latlong.html\n Licensed under CC-BY-3.0.\n*/\nfunction Ae(b){this.radius=b}Ae.prototype.c=function(b){for(var c=0,d=b.length,e=b[d-1][0],f=b[d-1][1],g=0;g<d;g++)var h=b[g][0],k=b[g][1],c=c+Wa(h-e)*(2+Math.sin(Wa(f))+Math.sin(Wa(k))),e=h,f=k;return c*this.radius*this.radius/2};Ae.prototype.a=function(b,c){var d=Wa(b[1]),e=Wa(c[1]),f=(e-d)/2,g=Wa(c[0]-b[0])/2,d=Math.sin(f)*Math.sin(f)+Math.sin(g)*Math.sin(g)*Math.cos(d)*Math.cos(e);return 2*this.radius*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))};\nAe.prototype.offset=function(b,c,d){var e=Wa(b[1]);c/=this.radius;var f=Math.asin(Math.sin(e)*Math.cos(c)+Math.cos(e)*Math.sin(c)*Math.cos(d));return[180*(Wa(b[0])+Math.atan2(Math.sin(d)*Math.sin(c)*Math.cos(e),Math.cos(c)-Math.sin(e)*Math.sin(f)))/Math.PI,180*f/Math.PI]};var Be=new Ae(6370997);var Ce={};Ce.degrees=2*Math.PI*Be.radius/360;Ce.ft=.3048;Ce.m=1;Ce[\"us-ft\"]=1200/3937;\nfunction De(b){this.a=b.code;this.c=b.units;this.j=void 0!==b.extent?b.extent:null;this.i=void 0!==b.worldExtent?b.worldExtent:null;this.g=void 0!==b.axisOrientation?b.axisOrientation:\"enu\";this.f=void 0!==b.global?b.global:!1;this.b=!(!this.f||!this.j);this.B=void 0!==b.getPointResolution?b.getPointResolution:this.dk;this.l=null;var c=Ee,d=b.code;if(\"function\"==typeof proj4&&void 0===c[d]){var e=proj4.defs(d);if(void 0!==e){void 0!==e.axis&&void 0===b.axisOrientation&&(this.g=e.axis);void 0===b.units&&\n(b=e.units,void 0===e.to_meter||void 0!==b&&void 0!==Ce[b]||(b=e.to_meter.toString(),Ce[b]=e.to_meter),this.c=b);for(var f in c)b=proj4.defs(f),void 0!==b&&(c=Fe(f),b===e?Ge([c,this]):(b=proj4(f,d),He(c,this,b.forward,b.inverse)))}}}l=De.prototype;l.Fj=function(){return this.a};l.J=function(){return this.j};l.wm=function(){return this.c};l.Jc=function(){return Ce[this.c]};l.pk=function(){return this.i};function Ie(b){return b.g}l.cl=function(){return this.f};\nl.No=function(b){this.f=b;this.b=!(!b||!this.j)};l.xm=function(b){this.j=b;this.b=!(!this.f||!b)};l.Vo=function(b){this.i=b};l.Mo=function(b){this.B=b};l.dk=function(b,c){if(\"degrees\"==this.c)return b;var d=Je(this,Fe(\"EPSG:4326\")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=Be.a(e.slice(0,2),e.slice(2,4)),e=Be.a(e.slice(4,6),e.slice(6,8)),e=(d+e)/2,d=this.Jc();void 0!==d&&(e/=d);return e};l.getPointResolution=function(b,c){return this.B(b,c)};var Ee={},Ke={};\nfunction Ge(b){Le(b);b.forEach(function(c){b.forEach(function(b){c!==b&&Me(c,b,Ne)})})}function Pe(){var b=Qe,c=Re,d=Se;Te.forEach(function(e){b.forEach(function(b){Me(e,b,c);Me(b,e,d)})})}function Ue(b){Ee[b.a]=b;Me(b,b,Ne)}function Le(b){var c=[];b.forEach(function(b){c.push(Ue(b))})}function Ve(b){return b?ia(b)?Fe(b):b:Fe(\"EPSG:3857\")}function Me(b,c,d){b=b.a;c=c.a;b in Ke||(Ke[b]={});Ke[b][c]=d}function He(b,c,d,e){b=Fe(b);c=Fe(c);Me(b,c,We(d));Me(c,b,We(e))}\nfunction We(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function Fe(b){var c;b instanceof De?c=b:ia(b)?(c=Ee[b],void 0===c&&\"function\"==typeof proj4&&void 0!==proj4.defs(b)&&(c=new De({code:b}),Ue(c))):c=null;return c}function Xe(b,c){return b===c?!0:b.a===c.a?b.c===c.c:Je(b,c)===Ne}function Ye(b,c){var d=Fe(b),e=Fe(c);return Je(d,e)}\nfunction Je(b,c){var d=b.a,e=c.a,f;d in Ke&&e in Ke[d]&&(f=Ke[d][e]);void 0===f&&(f=Ze);return f}function Ze(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function Ne(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d}function $e(b,c,d){return Ye(c,d)(b,void 0,b.length)}function af(b,c,d){c=Ye(c,d);return re(b,c)};function bf(){id.call(this);this.A=Od();this.C=-1;this.j={};this.u=this.i=0}y(bf,id);l=bf.prototype;l.pb=function(b,c){var d=c?c:[NaN,NaN];this.mb(b[0],b[1],d,Infinity);return d};l.ng=function(b){return this.rc(b[0],b[1])};l.rc=te;l.J=function(b){this.C!=this.c&&(this.A=this.Vd(this.A),this.C=this.c);var c=this.A;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};l.yb=function(b){return this.sd(b*b)};l.kb=function(b,c){this.mc(Ye(b,c));return this};function cf(b,c,d,e,f,g){var h=f[0],k=f[1],m=f[4],n=f[5],p=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var t=b[c],x=b[c+1];q[r++]=h*t+m*x+p;q[r++]=k*t+n*x+f}g&&q.length!=r&&(q.length=r);return q};function df(){bf.call(this);this.b=\"XY\";this.a=2;this.v=null}y(df,bf);function ef(b){if(\"XY\"==b)return 2;if(\"XYZ\"==b||\"XYM\"==b)return 3;if(\"XYZM\"==b)return 4}l=df.prototype;l.rc=te;l.Vd=function(b){return $d(this.v,0,this.v.length,this.a,b)};l.Jb=function(){return this.v.slice(0,this.a)};l.ja=function(){return this.v};l.Kb=function(){return this.v.slice(this.v.length-this.a)};l.Lb=function(){return this.b};\nl.sd=function(b){this.u!=this.c&&(Rb(this.j),this.i=0,this.u=this.c);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.j.hasOwnProperty(c))return this.j[c];var d=this.Kc(b);if(d.ja().length<this.v.length)return this.j[c]=d;this.i=b;return this};l.Kc=function(){return this};l.ra=function(){return this.a};function ff(b,c,d){b.a=ef(c);b.b=c;b.v=d}\nfunction gf(b,c,d,e){if(c)d=ef(c);else{for(c=0;c<e;++c){if(0===d.length){b.b=\"XY\";b.a=2;return}d=d[0]}d=d.length;c=2==d?\"XY\":3==d?\"XYZ\":4==d?\"XYZM\":void 0}b.b=c;b.a=d}l.mc=function(b){this.v&&(b(this.v,this.v,this.a),this.s())};l.Oc=function(b,c){var d=this.ja();if(d){var e=this.ra(),f=d.length,g=d?d:[],h=0,k,m;for(k=0;k<f;k+=e)for(g[h++]=d[k]+b,g[h++]=d[k+1]+c,m=k+2;m<k+e;++m)g[h++]=d[m];d&&g.length!=h&&(g.length=h);this.s()}};function hf(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],m=b[c+1],f=f+(h*k-g*m),g=k,h=m;return f/2}function jf(b,c,d,e){var f=0,g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],f=f+hf(b,c,k,e);c=k}return f};function kf(b,c,d,e,f,g,h){var k=b[c],m=b[c+1],n=b[d]-k,p=b[d+1]-m;if(0!==n||0!==p)if(g=((f-k)*n+(g-m)*p)/(n*n+p*p),1<g)c=d;else if(0<g){for(f=0;f<e;++f)h[f]=qd(b[c+f],b[d+f],g);h.length=e;return}for(f=0;f<e;++f)h[f]=b[c+f];h.length=e}function lf(b,c,d,e,f){var g=b[c],h=b[c+1];for(c+=e;c<d;c+=e){var k=b[c],m=b[c+1],g=Va(g,h,k,m);g>f&&(f=g);g=k;h=m}return f}function mf(b,c,d,e,f){var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g];f=lf(b,c,k,e,f);c=k}return f}\nfunction nf(b,c,d,e,f,g,h,k,m,n,p){if(c==d)return n;var q;if(0===f){q=Va(h,k,b[c],b[c+1]);if(q<n){for(p=0;p<e;++p)m[p]=b[c+p];m.length=e;return q}return n}for(var r=p?p:[NaN,NaN],t=c+e;t<d;)if(kf(b,t-e,t,e,h,k,r),q=Va(h,k,r[0],r[1]),q<n){n=q;for(p=0;p<e;++p)m[p]=r[p];m.length=e;t+=e}else t+=e*Math.max((Math.sqrt(q)-Math.sqrt(n))/f|0,1);if(g&&(kf(b,d-e,c,e,h,k,r),q=Va(h,k,r[0],r[1]),q<n)){n=q;for(p=0;p<e;++p)m[p]=r[p];m.length=e}return n}\nfunction of(b,c,d,e,f,g,h,k,m,n,p){p=p?p:[NaN,NaN];var q,r;q=0;for(r=d.length;q<r;++q){var t=d[q];n=nf(b,c,t,e,f,g,h,k,m,n,p);c=t}return n};function pf(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function qf(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function rf(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=qf(b,c,d[h],e),f[g++]=c;f.length=g;return f};function sf(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function tf(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var m=d[h];f[g++]=sf(b,c,m,e,f[g]);c=m}f.length=g;return f};function uf(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var m=Array(k);m[0]=1;m[k-1]=1;d=[c,d-e];for(var n=0,p;0<d.length;){var q=d.pop(),r=d.pop(),t=0,x=b[r],z=b[r+1],B=b[q],A=b[q+1];for(p=r+e;p<q;p+=e){var v=Ua(b[p],b[p+1],x,z,B,A);v>t&&(n=p,t=v)}t>f&&(m[(n-c)/e]=1,r+e<n&&d.push(r,n),n+e<q&&d.push(n,q))}for(p=0;p<k;++p)m[p]&&(g[h++]=b[c+p*e],g[h++]=b[c+p*e+1]);return h}\nfunction vf(b,c,d,e,f,g,h,k){var m,n;m=0;for(n=d.length;m<n;++m){var p=d[m];a:{var q=b,r=p,t=e,x=f,z=g;if(c!=r){var B=x*Math.round(q[c]/x),A=x*Math.round(q[c+1]/x);c+=t;z[h++]=B;z[h++]=A;var v=void 0,O=void 0;do if(v=x*Math.round(q[c]/x),O=x*Math.round(q[c+1]/x),c+=t,c==r){z[h++]=v;z[h++]=O;break a}while(v==B&&O==A);for(;c<r;){var K,I;K=x*Math.round(q[c]/x);I=x*Math.round(q[c+1]/x);c+=t;if(K!=v||I!=O){var G=v-B,la=O-A,Ea=K-B,L=I-A;G*L==la*Ea&&(0>G&&Ea<G||G==Ea||0<G&&Ea>G)&&(0>la&&L<la||la==L||0<la&&\nL>la)||(z[h++]=v,z[h++]=O,B=v,A=O);v=K;O=I}}z[h++]=v;z[h++]=O}}k.push(h);c=p}return h};function wf(b,c){df.call(this);this.g=this.l=-1;this.ma(b,c)}y(wf,df);l=wf.prototype;l.clone=function(){var b=new wf(null);xf(b,this.b,this.v.slice());return b};l.mb=function(b,c,d,e){if(e<Ud(this.J(),b,c))return e;this.g!=this.c&&(this.l=Math.sqrt(lf(this.v,0,this.v.length,this.a,0)),this.g=this.c);return nf(this.v,0,this.v.length,this.a,this.l,!0,b,c,d,e)};l.Yl=function(){return hf(this.v,0,this.v.length,this.a)};l.Y=function(){return sf(this.v,0,this.v.length,this.a)};\nl.Kc=function(b){var c=[];c.length=uf(this.v,0,this.v.length,this.a,b,c,0);b=new wf(null);xf(b,\"XY\",c);return b};l.V=function(){return\"LinearRing\"};l.ma=function(b,c){b?(gf(this,c,b,1),this.v||(this.v=[]),this.v.length=qf(this.v,0,b,this.a),this.s()):xf(this,\"XY\",null)};function xf(b,c,d){ff(b,c,d);b.s()};function D(b,c){df.call(this);this.ma(b,c)}y(D,df);l=D.prototype;l.clone=function(){var b=new D(null);b.ba(this.b,this.v.slice());return b};l.mb=function(b,c,d,e){var f=this.v;b=Va(b,c,f[0],f[1]);if(b<e){e=this.a;for(c=0;c<e;++c)d[c]=f[c];d.length=e;return b}return e};l.Y=function(){return this.v?this.v.slice():[]};l.Vd=function(b){return Zd(this.v,b)};l.V=function(){return\"Point\"};l.Da=function(b){return Wd(b,this.v[0],this.v[1])};\nl.ma=function(b,c){b?(gf(this,c,b,0),this.v||(this.v=[]),this.v.length=pf(this.v,b),this.s()):this.ba(\"XY\",null)};l.ba=function(b,c){ff(this,b,c);this.s()};function yf(b,c,d,e,f){return!de(f,function(f){return!zf(b,c,d,e,f[0],f[1])})}function zf(b,c,d,e,f,g){for(var h=!1,k=b[d-e],m=b[d-e+1];c<d;c+=e){var n=b[c],p=b[c+1];m>g!=p>g&&f<(n-k)*(g-m)/(p-m)+k&&(h=!h);k=n;m=p}return h}function Af(b,c,d,e,f,g){if(0===d.length||!zf(b,c,d[0],e,f,g))return!1;var h;c=1;for(h=d.length;c<h;++c)if(zf(b,d[c-1],d[c],e,f,g))return!1;return!0};function Bf(b,c,d,e,f,g,h){var k,m,n,p,q,r=f[g+1],t=[],x=d[0];n=b[x-e];q=b[x-e+1];for(k=c;k<x;k+=e){p=b[k];m=b[k+1];if(r<=q&&m<=r||q<=r&&r<=m)n=(r-q)/(m-q)*(p-n)+n,t.push(n);n=p;q=m}x=NaN;q=-Infinity;t.sort();n=t[0];k=1;for(m=t.length;k<m;++k){p=t[k];var z=Math.abs(p-n);z>q&&(n=(n+p)/2,Af(b,c,d,e,n,r)&&(x=n,q=z));n=p}isNaN(x)&&(x=f[g]);return h?(h.push(x,r),h):[x,r]};function Cf(b,c,d,e,f,g){for(var h=[b[c],b[c+1]],k=[],m;c+e<d;c+=e){k[0]=b[c+e];k[1]=b[c+e+1];if(m=f.call(g,h,k))return m;h[0]=k[0];h[1]=k[1]}return!1};function Df(b,c,d,e,f){var g=ae(Od(),b,c,d,e);return pe(f,g)?Xd(f,g)||g[0]>=f[0]&&g[2]<=f[2]||g[1]>=f[1]&&g[3]<=f[3]?!0:Cf(b,c,d,e,function(b,c){var d=!1,e=Yd(f,b),g=Yd(f,c);if(1===e||1===g)d=!0;else{var q=f[0],r=f[1],t=f[2],x=f[3],z=c[0],B=c[1],A=(B-b[1])/(z-b[0]);g&2&&!(e&2)&&(d=z-(B-x)/A,d=d>=q&&d<=t);d||!(g&4)||e&4||(d=B-(z-t)*A,d=d>=r&&d<=x);d||!(g&8)||e&8||(d=z-(B-r)/A,d=d>=q&&d<=t);d||!(g&16)||e&16||(d=B-(z-q)*A,d=d>=r&&d<=x)}return d}):!1}\nfunction Ef(b,c,d,e,f){var g=d[0];if(!(Df(b,c,g,e,f)||zf(b,c,g,e,f[0],f[1])||zf(b,c,g,e,f[0],f[3])||zf(b,c,g,e,f[2],f[1])||zf(b,c,g,e,f[2],f[3])))return!1;if(1===d.length)return!0;c=1;for(g=d.length;c<g;++c)if(yf(b,d[c-1],d[c],e,f))return!1;return!0};function Ff(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],m=b[c+1],f=f+(k-g)*(m+h),g=k,h=m;return 0<f}function Gf(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Ff(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}\nfunction Hf(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],m=Ff(b,c,k,e);if(0===g?f&&m||!f&&!m:f&&!m||!f&&m)for(var m=b,n=k,p=e;c<n-p;){var q;for(q=0;q<p;++q){var r=m[c+q];m[c+q]=m[n-p+q];m[n-p+q]=r}c+=p;n-=p}c=k}return c}function If(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Hf(b,f,c[g],d,e);return f};function E(b,c){df.call(this);this.g=[];this.D=-1;this.G=null;this.T=this.S=this.U=-1;this.l=null;this.ma(b,c)}y(E,df);l=E.prototype;l.lj=function(b){this.v?lb(this.v,b.ja()):this.v=b.ja().slice();this.g.push(this.v.length);this.s()};l.clone=function(){var b=new E(null);b.ba(this.b,this.v.slice(),this.g.slice());return b};\nl.mb=function(b,c,d,e){if(e<Ud(this.J(),b,c))return e;this.S!=this.c&&(this.U=Math.sqrt(mf(this.v,0,this.g,this.a,0)),this.S=this.c);return of(this.v,0,this.g,this.a,this.U,!0,b,c,d,e)};l.rc=function(b,c){return Af(this.ac(),0,this.g,this.a,b,c)};l.am=function(){return jf(this.ac(),0,this.g,this.a)};l.Y=function(b){var c;void 0!==b?(c=this.ac().slice(),Hf(c,0,this.g,this.a,b)):c=this.v;return tf(c,0,this.g,this.a)};l.Ab=function(){return this.g};\nfunction Jf(b){if(b.D!=b.c){var c=me(b.J());b.G=Bf(b.ac(),0,b.g,b.a,c,0);b.D=b.c}return b.G}l.Oj=function(){return new D(Jf(this))};l.Tj=function(){return this.g.length};l.Bg=function(b){if(0>b||this.g.length<=b)return null;var c=new wf(null);xf(c,this.b,this.v.slice(0===b?0:this.g[b-1],this.g[b]));return c};l.ae=function(){var b=this.b,c=this.v,d=this.g,e=[],f=0,g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],m=new wf(null);xf(m,b,c.slice(f,k));e.push(m);f=k}return e};\nl.ac=function(){if(this.T!=this.c){var b=this.v;Gf(b,this.g,this.a)?this.l=b:(this.l=b.slice(),this.l.length=Hf(this.l,0,this.g,this.a));this.T=this.c}return this.l};l.Kc=function(b){var c=[],d=[];c.length=vf(this.v,0,this.g,this.a,Math.sqrt(b),c,0,d);b=new E(null);b.ba(\"XY\",c,d);return b};l.V=function(){return\"Polygon\"};l.Da=function(b){return Ef(this.ac(),0,this.g,this.a,b)};\nl.ma=function(b,c){if(b){gf(this,c,b,2);this.v||(this.v=[]);var d=rf(this.v,0,b,this.a,this.g);this.v.length=0===d.length?0:d[d.length-1];this.s()}else this.ba(\"XY\",null,this.g)};l.ba=function(b,c,d){ff(this,b,c);this.g=d;this.s()};function Kf(b,c,d,e){var f=e?e:32;e=[];var g;for(g=0;g<f;++g)lb(e,b.offset(c,d,2*Math.PI*g/f));e.push(e[0],e[1]);b=new E(null);b.ba(\"XY\",e,[e.length]);return b}\nfunction Lf(b){var c=b[0],d=b[1],e=b[2];b=b[3];c=[c,d,c,b,e,b,e,d,c,d];d=new E(null);d.ba(\"XY\",c,[c.length]);return d}function Mf(b,c,d){var e=c?c:32,f=b.ra();c=b.b;for(var g=new E(null,c),e=f*(e+1),f=[],h=0;h<e;h++)f[h]=0;g.ba(c,f,[f.length]);Nf(g,b.vd(),b.yf(),d);return g}function Nf(b,c,d,e){var f=b.ja(),g=b.b,h=b.ra(),k=b.Ab(),m=f.length/h-1;e=e?e:0;for(var n,p,q=0;q<=m;++q)p=q*h,n=e+2*pd(q,m)*Math.PI/m,f[p]=c[0]+d*Math.cos(n),f[p+1]=c[1]+d*Math.sin(n);b.ba(g,f,k)};function Of(b){id.call(this);b=b||{};this.b=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.g=Ve(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=xb(d);else{e=Ve(b.projection);f=e.J();var k=(f?Math.max(ke(f),le(f)):360*Ce.degrees/Ce[e.c])/256/Math.pow(2,0),m=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;\nvoid 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):m);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=yb(h,e,d-g)}this.a=e;this.i=f;this.f=g;g=void 0!==b.extent?Xa(b.extent):Ya;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Cb():!1===e?Ab:ja(e)?Bb(e):Ab):e=zb;this.j=new Db(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.a,b.zoom-this.f));\nc.rotation=void 0!==b.rotation?b.rotation:0;this.I(c)}y(Of,id);l=Of.prototype;l.Wd=function(b){return this.j.center(b)};l.constrainResolution=function(b,c,d){return this.j.resolution(b,c||0,d||0)};l.constrainRotation=function(b,c){return this.j.rotation(b,c||0)};l.Ta=function(){return this.get(\"center\")};l.Zc=function(b){var c=this.Ta(),d=this.$(),e=this.Ea();return ne(c,d,e,b)};l.Il=function(){return this.g};l.$=function(){return this.get(\"resolution\")};\nfunction Pf(b){var c=b.a,d=Math.log(c/b.i)/Math.log(2);return function(b){return c/Math.pow(2,b*d)}}l.Ea=function(){return this.get(\"rotation\")};function Qf(b){var c=b.a,d=Math.log(c/b.i)/Math.log(2);return function(b){return Math.log(c/b)/Math.log(2)/d}}function Rf(b){var c=b.Ta(),d=b.g,e=b.$();b=b.Ea();return{center:[Math.round(c[0]/e)*e,Math.round(c[1]/e)*e],projection:void 0!==d?d:null,resolution:e,rotation:b}}\nl.qk=function(){var b,c=this.$();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.a,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.f+b:b};\nl.jf=function(b,c,d){b instanceof df||(b=Lf(b));var e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var f=void 0!==e.constrainResolution?e.constrainResolution:!0,g=void 0!==e.nearest?e.nearest:!1,h;void 0!==e.minResolution?h=e.minResolution:void 0!==e.maxZoom?h=this.constrainResolution(this.a,e.maxZoom-this.f,0):h=0;var k=b.ja(),m=this.Ea(),e=Math.cos(-m),m=Math.sin(-m),n=Infinity,p=Infinity,q=-Infinity,r=-Infinity;b=b.ra();for(var t=0,x=k.length;t<x;t+=b)var z=k[t]*e-k[t+1]*m,B=k[t]*m+k[t+1]*e,\nn=Math.min(n,z),p=Math.min(p,B),q=Math.max(q,z),r=Math.max(r,B);k=[n,p,q,r];c=[c[0]-d[1]-d[3],c[1]-d[0]-d[2]];c=Math.max(ke(k)/c[0],le(k)/c[1]);c=isNaN(c)?h:Math.max(c,h);f&&(h=this.constrainResolution(c,0,0),!g&&h<c&&(h=this.constrainResolution(h,-1,0)),c=h);this.Ub(c);m=-m;g=(n+q)/2+(d[1]-d[3])/2*c;d=(p+r)/2+(d[0]-d[2])/2*c;this.jb([g*e-d*m,d*e+g*m])};\nl.qj=function(b,c,d){var e=this.Ea(),f=Math.cos(-e),e=Math.sin(-e),g=b[0]*f-b[1]*e;b=b[1]*f+b[0]*e;var h=this.$(),g=g+(c[0]/2-d[0])*h;b+=(d[1]-c[1]/2)*h;e=-e;this.jb([g*f-b*e,b*f+g*e])};function Sf(b){return!!b.Ta()&&void 0!==b.$()}l.rotate=function(b,c){if(void 0!==c){var d,e=this.Ta();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],wd(d,b-this.Ea()),rd(d,c));this.jb(d)}this.te(b)};l.jb=function(b){this.set(\"center\",b)};function Tf(b,c){b.b[1]+=c}l.Ub=function(b){this.set(\"resolution\",b)};\nl.te=function(b){this.set(\"rotation\",b)};l.Wo=function(b){b=this.constrainResolution(this.a,b-this.f,0);this.Ub(b)};function Uf(b){return Math.pow(b,3)}function Vf(b){return 1-Uf(1-b)}function Wf(b){return 3*b*b-2*b*b*b}function Xf(b){return b}function Yf(b){return.5>b?Wf(2*b):1-Wf(2*(b-.5))};function Zf(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:Wf;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var n=1-h((c.time-d)/g),p=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=n*p;c.viewState.center[1]+=n*q;c.viewHints[0]+=1;return!0}return!1}}\nfunction ag(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:Wf,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var m=1-f((k.time-d)/e),m=(c-k.viewState.rotation)*m;k.animate=!0;k.viewState.rotation+=m;if(g){var n=k.viewState.center;n[0]-=g[0];n[1]-=g[1];wd(n,m);rd(n,g)}k.viewHints[0]+=1;return!0}return!1}}\nfunction bg(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:Wf;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),m=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*m;h.viewHints[0]+=1;return!0}return!1}};function cg(b,c,d,e){return void 0!==e?(e[0]=b,e[1]=c,e[2]=d,e):[b,c,d]}function dg(b,c,d){return b+\"/\"+c+\"/\"+d}function eg(b){var c=b[0],d=Array(c),e=1<<c-1,f,g;for(f=0;f<c;++f)g=48,b[1]&e&&(g+=1),b[2]&e&&(g+=2),d[f]=String.fromCharCode(g),e>>=1;return d.join(\"\")}function fg(b){return dg(b[0],b[1],b[2])};function gg(b,c,d,e){this.a=b;this.f=c;this.c=d;this.b=e}gg.prototype.contains=function(b){return hg(this,b[1],b[2])};function hg(b,c,d){return b.a<=c&&c<=b.f&&b.c<=d&&d<=b.b}function ig(b,c){return b.a==c.a&&b.c==c.c&&b.f==c.f&&b.b==c.b}function jg(b){return b.b-b.c+1}function kg(b){return b.f-b.a+1}function lg(b,c){return b.a<=c.f&&b.f>=c.a&&b.c<=c.b&&b.b>=c.c};function mg(b){this.c=b.html;this.a=b.tileRanges?b.tileRanges:null}mg.prototype.b=function(){return this.c};function ng(b,c,d){vc.call(this,b,d);this.element=c}y(ng,vc);function og(b){id.call(this);this.a=b?b:[];pg(this)}y(og,id);l=og.prototype;l.clear=function(){for(;0<this.$b();)this.pop()};l.tf=function(b){var c,d;c=0;for(d=b.length;c<d;++c)this.push(b[c]);return this};l.forEach=function(b,c){this.a.forEach(b,c)};l.sl=function(){return this.a};l.item=function(b){return this.a[b]};l.$b=function(){return this.get(\"length\")};l.ke=function(b,c){mb(this.a,b,0,c);pg(this);this.o(new ng(\"add\",c,this))};\nl.pop=function(){return this.Rf(this.$b()-1)};l.push=function(b){var c=this.a.length;this.ke(c,b);return c};l.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return this.Rf(d)};l.Rf=function(b){var c=this.a[b];Za.splice.call(this.a,b,1);pg(this);this.o(new ng(\"remove\",c,this));return c};l.Jo=function(b,c){var d=this.$b();if(b<d)d=this.a[b],this.a[b]=c,this.o(new ng(\"remove\",d,this)),this.o(new ng(\"add\",c,this));else{for(;d<b;++d)this.ke(d,void 0);this.ke(b,c)}};\nfunction pg(b){b.set(\"length\",b.a.length)};var qg=/^#(?:[0-9a-f]{3}){1,2}$/i,rg=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,sg=/^(?:rgba)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|1|0\\.\\d{0,10})\\)$/i;function tg(b){return ga(b)?b:ug(b)}function vg(b){if(!ia(b)){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b=\"rgba(\"+c+\",\"+d+\",\"+e+\",\"+b[3]+\")\"}return b}\nvar ug=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e=b[d];else{if(1024<=c){e=0;for(var f in b)0===(e++&3)&&(delete b[f],--c)}var g,h;qg.exec(d)?(h=3==d.length-1?1:2,e=parseInt(d.substr(1+0*h,h),16),f=parseInt(d.substr(1+1*h,h),16),g=parseInt(d.substr(1+2*h,h),16),1==h&&(e=(e<<4)+e,f=(f<<4)+f,g=(g<<4)+g),e=[e,f,g,1]):(h=sg.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),h=Number(h[4]),e=[e,f,g,h],e=wg(e,e)):(h=rg.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),\ne=[e,f,g,1],e=wg(e,e)):e=void 0;b[d]=e;++c}return e}}();function wg(b,c){var d=c||[];d[0]=Sa(b[0]+.5|0,0,255);d[1]=Sa(b[1]+.5|0,0,255);d[2]=Sa(b[2]+.5|0,0,255);d[3]=Sa(b[3],0,1);return d};var xg=!Zb||9<=lc;!ac&&!Zb||Zb&&9<=lc||ac&&jc(\"1.9.1\");Zb&&jc(\"9\");function yg(b,c){this.x=ca(b)?b:0;this.y=ca(c)?c:0}l=yg.prototype;l.clone=function(){return new yg(this.x,this.y)};l.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};l.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};l.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};l.scale=function(b,c){var d=ja(c)?c:b;this.x*=b;this.y*=d;return this};function zg(b,c){this.width=b;this.height=c}l=zg.prototype;l.clone=function(){return new zg(this.width,this.height)};l.oj=function(){return this.width*this.height};l.Ka=function(){return!this.oj()};l.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};l.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};l.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};\nl.scale=function(b,c){var d=ja(c)?c:b;this.width*=b;this.height*=d;return this};function Ag(b){return b?new Bg(Cg(b)):ya||(ya=new Bg)}function Dg(b){var c=document;return ia(b)?c.getElementById(b):b}function Eg(b,c){Ib(c,function(c,e){\"style\"==e?b.style.cssText=c:\"class\"==e?b.className=c:\"for\"==e?b.htmlFor=c:Fg.hasOwnProperty(e)?b.setAttribute(Fg[e],c):0==e.lastIndexOf(\"aria-\",0)||0==e.lastIndexOf(\"data-\",0)?b.setAttribute(e,c):b[e]=c})}\nvar Fg={cellpadding:\"cellPadding\",cellspacing:\"cellSpacing\",colspan:\"colSpan\",frameborder:\"frameBorder\",height:\"height\",maxlength:\"maxLength\",role:\"role\",rowspan:\"rowSpan\",type:\"type\",usemap:\"useMap\",valign:\"vAlign\",width:\"width\"};function Gg(b){b=b.document.documentElement;return new zg(b.clientWidth,b.clientHeight)}\nfunction Hg(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!xg&&h&&(h.name||h.type)){g=[\"<\",g];h.name&&g.push(' name=\"',Da(h.name),'\"');if(h.type){g.push(' type=\"',Da(h.type),'\"');var k={};Xb(k,h);delete k.type;h=k}g.push(\">\");g=g.join(\"\")}g=f.createElement(g);h&&(ia(h)?g.className=h:ga(h)?g.className=h.join(\" \"):Eg(g,h));2<e.length&&Ig(f,g,e,2);return g}\nfunction Ig(b,c,d,e){function f(d){d&&c.appendChild(ia(d)?b.createTextNode(d):d)}for(;e<d.length;e++){var g=d[e];!ha(g)||ma(g)&&0<g.nodeType?f(g):ab(Jg(g)?jb(g):g,f)}}function Kg(b){return document.createElement(b)}function Lg(b,c){Ig(Cg(b),b,arguments,1)}function Mg(b){for(var c;c=b.firstChild;)b.removeChild(c)}function Ng(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function Og(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function Pg(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}\nfunction Qg(b){if(ca(b.firstElementChild))b=b.firstElementChild;else for(b=b.firstChild;b&&1!=b.nodeType;)b=b.nextSibling;return b}function Rg(b,c){if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if(\"undefined\"!=typeof b.compareDocumentPosition)return b==c||Boolean(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Cg(b){return 9==b.nodeType?b:b.ownerDocument||b.document}\nfunction Jg(b){if(b&&\"number\"==typeof b.length){if(ma(b))return\"function\"==typeof b.item||\"string\"==typeof b.item;if(ka(b))return\"function\"==typeof b.item}return!1}function Bg(b){this.a=b||ba.document||document}Bg.prototype.I=Eg;function Sg(){return!0}\nfunction Tg(b){var c=b.a;b=c.scrollingElement?c.scrollingElement:bc?c.body||c.documentElement:c.documentElement;c=c.parentWindow||c.defaultView;return Zb&&jc(\"10\")&&c.pageYOffset!=b.scrollTop?new yg(b.scrollLeft,b.scrollTop):new yg(c.pageXOffset||b.scrollLeft,c.pageYOffset||b.scrollTop)}Bg.prototype.appendChild=function(b,c){b.appendChild(c)};Bg.prototype.contains=Rg;function Ug(b){if(b.classList)return b.classList;b=b.className;return ia(b)&&b.match(/\\S+/g)||[]}function Vg(b,c){var d;b.classList?d=b.classList.contains(c):(d=Ug(b),d=0<=$a(d,c));return d}function Wg(b,c){b.classList?b.classList.add(c):Vg(b,c)||(b.className+=0<b.className.length?\" \"+c:c)}function Xg(b,c){b.classList?b.classList.remove(c):Vg(b,c)&&(b.className=bb(Ug(b),function(b){return b!=c}).join(\" \"))}function Yg(b,c){Vg(b,c)?Xg(b,c):Wg(b,c)};function Zg(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}l=Zg.prototype;l.clone=function(){return new Zg(this.top,this.right,this.bottom,this.left)};l.contains=function(b){return this&&b?b instanceof Zg?b.left>=this.left&&b.right<=this.right&&b.top>=this.top&&b.bottom<=this.bottom:b.x>=this.left&&b.x<=this.right&&b.y>=this.top&&b.y<=this.bottom:!1};\nl.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};l.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};l.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};\nl.scale=function(b,c){var d=ja(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function $g(b,c,d,e){this.left=b;this.top=c;this.width=d;this.height=e}l=$g.prototype;l.clone=function(){return new $g(this.left,this.top,this.width,this.height)};l.contains=function(b){return b instanceof $g?this.left<=b.left&&this.left+this.width>=b.left+b.width&&this.top<=b.top&&this.top+this.height>=b.top+b.height:b.x>=this.left&&b.x<=this.left+this.width&&b.y>=this.top&&b.y<=this.top+this.height};\nl.distance=function(b){var c=b.x<this.left?this.left-b.x:Math.max(b.x-(this.left+this.width),0);b=b.y<this.top?this.top-b.y:Math.max(b.y-(this.top+this.height),0);return Math.sqrt(c*c+b*b)};l.ceil=function(){this.left=Math.ceil(this.left);this.top=Math.ceil(this.top);this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};l.floor=function(){this.left=Math.floor(this.left);this.top=Math.floor(this.top);this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};\nl.round=function(){this.left=Math.round(this.left);this.top=Math.round(this.top);this.width=Math.round(this.width);this.height=Math.round(this.height);return this};l.scale=function(b,c){var d=ja(c)?c:b;this.left*=b;this.width*=b;this.top*=d;this.height*=d;return this};function ah(b,c){var d=Cg(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||\"\":\"\"}function bh(b,c){return ah(b,c)||(b.currentStyle?b.currentStyle[c]:null)||b.style&&b.style[c]}function ch(b,c,d){var e;c instanceof yg?(e=c.x,c=c.y):(e=c,c=d);b.style.left=dh(e);b.style.top=dh(c)}\nfunction eh(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Zb&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}function fh(b){if(1==b.nodeType)return b=eh(b),new yg(b.left,b.top);b=b.changedTouches?b.changedTouches[0]:b;return new yg(b.clientX,b.clientY)}function dh(b){\"number\"==typeof b&&(b=b+\"px\");return b}\nfunction gh(b){var c=hh;if(\"none\"!=bh(b,\"display\"))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility=\"hidden\";d.position=\"absolute\";d.display=\"inline\";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function hh(b){var c=b.offsetWidth,d=b.offsetHeight,e=bc&&!c&&!d;return ca(c)&&!e||!b.getBoundingClientRect?new zg(c,d):(b=eh(b),new zg(b.right-b.left,b.bottom-b.top))}function ih(b,c){b.style.display=c?\"\":\"none\"}\nfunction jh(b,c,d,e){if(/^\\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function kh(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?jh(b,d,\"left\",\"pixelLeft\"):0}\nfunction lh(b,c){if(Zb){var d=kh(b,c+\"Left\"),e=kh(b,c+\"Right\"),f=kh(b,c+\"Top\"),g=kh(b,c+\"Bottom\");return new Zg(f,e,g,d)}d=ah(b,c+\"Left\");e=ah(b,c+\"Right\");f=ah(b,c+\"Top\");g=ah(b,c+\"Bottom\");return new Zg(parseFloat(f),parseFloat(e),parseFloat(g),parseFloat(d))}var mh={thin:2,medium:4,thick:6};function nh(b,c){if(\"none\"==(b.currentStyle?b.currentStyle[c+\"Style\"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+\"Width\"]:null;return d in mh?mh[d]:jh(b,d,\"left\",\"pixelLeft\")}\nfunction oh(b){if(Zb&&!(9<=lc)){var c=nh(b,\"borderLeft\"),d=nh(b,\"borderRight\"),e=nh(b,\"borderTop\");b=nh(b,\"borderBottom\");return new Zg(e,d,b,c)}c=ah(b,\"borderLeftWidth\");d=ah(b,\"borderRightWidth\");e=ah(b,\"borderTopWidth\");b=ah(b,\"borderBottomWidth\");return new Zg(parseFloat(e),parseFloat(d),parseFloat(b),parseFloat(c))};function ph(b,c,d){vc.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}y(ph,vc);function qh(b){id.call(this);this.element=b.element?b.element:null;this.a=this.U=null;this.u=[];this.render=b.render?b.render:wa;b.target&&this.f(b.target)}y(qh,id);qh.prototype.X=function(){Og(this.element);qh.da.X.call(this)};qh.prototype.g=function(){return this.a};\nqh.prototype.setMap=function(b){this.a&&Og(this.element);0<this.u.length&&(this.u.forEach(Zc),this.u.length=0);if(this.a=b)(this.U?this.U:b.D).appendChild(this.element),this.render!==wa&&this.u.push(C(b,\"postrender\",this.render,!1,this)),b.render()};qh.prototype.f=function(b){this.U=Dg(b)};function rh(){this.b=0;this.f={};this.c=this.a=null}l=rh.prototype;l.clear=function(){this.b=0;this.f={};this.c=this.a=null};function sh(b,c){return b.f.hasOwnProperty(c)}l.forEach=function(b,c){for(var d=this.a;d;)b.call(c,d.zc,d.ne,this),d=d.sb};l.get=function(b){b=this.f[b];if(b===this.c)return b.zc;b===this.a?(this.a=this.a.sb,this.a.gc=null):(b.sb.gc=b.gc,b.gc.sb=b.sb);b.sb=null;b.gc=this.c;this.c=this.c.sb=b;return b.zc};l.nc=function(){return this.b};\nl.O=function(){var b=Array(this.b),c=0,d;for(d=this.c;d;d=d.gc)b[c++]=d.ne;return b};l.pc=function(){var b=Array(this.b),c=0,d;for(d=this.c;d;d=d.gc)b[c++]=d.zc;return b};l.pop=function(){var b=this.a;delete this.f[b.ne];b.sb&&(b.sb.gc=null);this.a=b.sb;this.a||(this.c=null);--this.b;return b.zc};l.set=function(b,c){var d={ne:b,sb:null,gc:this.c,zc:c};this.c?this.c.sb=d:this.a=d;this.c=d;this.f[b]=d;++this.b};function th(b){rh.call(this);this.g=void 0!==b?b:2048}y(th,rh);function uh(b){return b.nc()>b.g}function vh(b,c){for(var d,e;uh(b)&&!(d=b.a.zc,e=d.a[0].toString(),e in c&&c[e].contains(d.a));)b.pop().Ec()};function wh(b,c){cd.call(this);this.a=b;this.state=c}y(wh,cd);function xh(b){b.o(\"change\")}wh.prototype.tb=function(){return w(this).toString()};wh.prototype.f=function(){return this.a};function yh(b){id.call(this);this.f=Fe(b.projection);this.j=void 0!==b.attributions?b.attributions:null;this.U=b.logo;this.A=void 0!==b.state?b.state:\"ready\";this.S=void 0!==b.wrapX?b.wrapX:!1}y(yh,id);l=yh.prototype;l.xe=wa;l.sa=function(){return this.j};l.qa=function(){return this.U};l.ta=function(){return this.f};l.ua=function(){return this.A};function zh(b){return b.S}l.na=function(b){this.j=b;this.s()};function Ah(b,c){b.A=c;b.s()};function Bh(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.a=b.resolutions;this.maxZoom=this.a.length-1;this.b=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.b||this.g||(this.b=he(c));this.j=null;void 0!==b.tileSizes&&(this.j=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.j?null:256;this.u=void 0!==c?c:null;this.c=null;void 0!==b.sizes?this.c=b.sizes.map(function(b){return new gg(Math.min(0,b[0]),Math.max(b[0]-1,-1),\nMath.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ch(this,c);this.f=[0,0]}var Dh=[0,0,0];function Eh(b,c,d,e,f){f=b.Aa(c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Fh(b,f,c,e)))return!0;--c}return!1}l=Bh.prototype;l.J=function(){return this.u};l.Cg=function(){return this.maxZoom};l.Dg=function(){return this.minZoom};l.Ca=function(b){return this.b?this.b:this.g[b]};l.$=function(b){return this.a[b]};l.wh=function(){return this.a};\nfunction Gh(b,c,d,e){return c[0]<b.maxZoom?(e=b.Aa(c,e),Fh(b,e,c[0]+1,d)):null}function Hh(b,c,d,e){Ih(b,c[0],c[1],d,!1,Dh);var f=Dh[1],g=Dh[2];Ih(b,c[2],c[3],d,!0,Dh);b=Dh[1];c=Dh[2];void 0!==e?(e.a=f,e.f=b,e.c=g,e.b=c):e=new gg(f,b,g,c);return e}function Fh(b,c,d,e){d=b.$(d);return Hh(b,c,d,e)}function Jh(b,c){var d=b.Ca(c[0]),e=b.$(c[0]),f=od(b.Ha(c[0]),b.f);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}\nl.Aa=function(b,c){var d=this.Ca(b[0]),e=this.$(b[0]),f=od(this.Ha(b[0]),this.f),g=d[0]+b[1]*f[0]*e,d=d[1]+b[2]*f[1]*e;return Rd(g,d,g+f[0]*e,d+f[1]*e,c)};l.ee=function(b,c,d){return Ih(this,b[0],b[1],c,!1,d)};function Ih(b,c,d,e,f,g){var h=Kh(b,e),k=e/b.$(h),m=b.Ca(h);b=od(b.Ha(h),b.f);c=k*Math.floor((c-m[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-m[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));return cg(h,c,d,g)}\nl.fe=function(b,c,d){c=this.$(c);return Ih(this,b[0],b[1],c,!1,d)};l.Ha=function(b){return this.l?this.l:this.j[b]};function Kh(b,c){var d=wb(b.a,c,0);return Sa(d,b.minZoom,b.maxZoom)}function Ch(b,c){for(var d=b.a.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Fh(b,c,f);b.c=e}function Lh(b){var c=b.l;if(!c){var c=Mh(b),d=Nh(c,void 0,void 0),c=new Bh({extent:c,origin:he(c),resolutions:d,tileSize:void 0});b.l=c}return c}\nfunction Oh(b){var c={};Xb(c,void 0!==b?b:{});void 0===c.extent&&(c.extent=Fe(\"EPSG:3857\").J());c.resolutions=Nh(c.extent,c.maxZoom,c.tileSize);delete c.maxZoom;return new Bh(c)}function Nh(b,c,d){c=void 0!==c?c:42;var e=le(b);b=ke(b);d=od(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Mh(b){b=Fe(b);var c=b.J();c||(b=180*Ce.degrees/b.Jc(),c=Rd(-b,-b,b,b));return c};function Ph(b){yh.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.pa=void 0!==b.opaque?b.opaque:!1;this.C=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new th(b.cf);this.b=[0,0]}y(Ph,yh);l=Ph.prototype;l.nh=function(){return uh(this.a)};l.oh=function(b,c){var d=this.td(b);d&&vh(d,c)};\nfunction Qh(b,c,d,e,f){c=b.td(c);if(!c)return!1;for(var g=!0,h,k,m=e.a;m<=e.f;++m)for(var n=e.c;n<=e.b;++n)h=b.gb(d,m,n),k=!1,sh(c,h)&&(h=c.get(h),(k=2===h.state)&&(k=!1!==f(h))),k||(g=!1);return g}l.$d=function(){return 0};l.gb=dg;l.Ga=function(){return this.tileGrid};l.hb=function(b){return this.tileGrid?this.tileGrid:Lh(b)};l.td=function(b){var c=this.f;return c&&!Xe(c,b)?null:this.a};l.Pb=function(b,c,d){c=this.hb(d);return nd(od(c.Ha(b),this.b),this.C,this.b)};\nfunction Rh(b,c,d){var e=void 0!==d?d:b.f;d=b.hb(e);if(b.S&&e.f){var f=c;c=f[0];b=Jh(d,f);e=Mh(e);Vd(e,b)?c=f:(f=ke(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=d.fe(b,c))}f=c[0];e=c[1];b=c[2];if(d.minZoom>f||f>d.maxZoom)d=!1;else{var g=d.J();d=(d=g?Fh(d,g,f):d.c?d.c[f]:null)?hg(d,e,b):!0}return d?c:null}l.Xf=wa;function Sh(b,c){vc.call(this,b);this.tile=c}y(Sh,vc);function Th(b){b=b?b:{};this.D=Kg(\"UL\");this.A=Kg(\"LI\");this.D.appendChild(this.A);ih(this.A,!1);this.b=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.b=!1);var c=b.className?b.className:\"ol-attribution\",d=b.tipLabel?b.tipLabel:\"Attributions\",e=b.collapseLabel?b.collapseLabel:\"\\u00bb\";this.G=ia(e)?Hg(\"SPAN\",{},e):e;e=b.label?b.label:\"i\";this.S=ia(e)?Hg(\"SPAN\",{},e):e;d=Hg(\"BUTTON\",{type:\"button\",title:d},this.i&&!this.b?this.G:this.S);C(d,\"click\",\nthis.Ll,!1,this);C(d,[\"mouseout\",yc],function(){this.blur()},!1);c=Hg(\"DIV\",c+\" ol-unselectable ol-control\"+(this.b&&this.i?\" ol-collapsed\":\"\")+(this.i?\"\":\" ol-uncollapsible\"),this.D,d);qh.call(this,{element:c,render:b.render?b.render:Uh,target:b.target});this.C=!0;this.l={};this.j={};this.T={}}y(Th,qh);\nfunction Uh(b){if(b=b.frameState){var c,d,e,f,g,h,k,m,n,p,q,r=b.layerStatesArray,t=Ub(b.attributions),x={},z=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.fa())if(p=w(h).toString(),n=h.j)for(e=0,f=n.length;e<f;e++)if(k=n[e],m=w(k).toString(),!(m in t)){if(g=b.usedTiles[p]){var B=h.hb(z);a:{q=k;var A=z;if(q.a){var v=void 0,O=void 0,K=void 0,I=void 0;for(I in g)if(I in q.a)for(var K=g[I],G,v=0,O=q.a[I].length;v<O;++v){G=q.a[I][v];if(lg(G,K)){q=!0;break a}var la=Fh(B,A.J(),parseInt(I,\n10)),Ea=kg(la);if(K.a<la.a||K.f>la.f)if(lg(G,new gg(pd(K.a,Ea),pd(K.f,Ea),K.c,K.b))||kg(K)>Ea&&lg(G,la)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(m in x&&delete x[m],t[m]=k):x[m]=k}c=[t,x];d=c[0];c=c[1];for(var L in this.l)L in d?(this.j[L]||(ih(this.l[L],!0),this.j[L]=!0),delete d[L]):L in c?(this.j[L]&&(ih(this.l[L],!1),delete this.j[L]),delete c[L]):(Og(this.l[L]),delete this.l[L],delete this.j[L]);for(L in d)e=Kg(\"LI\"),e.innerHTML=d[L].c,this.D.appendChild(e),this.l[L]=e,this.j[L]=!0;for(L in c)e=\nKg(\"LI\"),e.innerHTML=c[L].c,ih(e,!1),this.D.appendChild(e),this.l[L]=e;L=!Qb(this.j)||!Qb(b.logos);this.C!=L&&(ih(this.element,L),this.C=L);L&&Qb(this.j)?Wg(this.element,\"ol-logo-only\"):Xg(this.element,\"ol-logo-only\");var za;b=b.logos;L=this.T;for(za in L)za in b||(Og(L[za]),delete L[za]);for(var Ra in b)Ra in L||(za=new Image,za.src=Ra,d=b[Ra],\"\"===d?d=za:(d=Hg(\"A\",{href:d}),d.appendChild(za)),this.A.appendChild(d),L[Ra]=d);ih(this.A,!Qb(b))}else this.C&&(ih(this.element,!1),this.C=!1)}l=Th.prototype;\nl.Ll=function(b){b.preventDefault();Vh(this)};function Vh(b){Yg(b.element,\"ol-collapsed\");b.b?Pg(b.G,b.S):Pg(b.S,b.G);b.b=!b.b}l.Kl=function(){return this.i};l.Nl=function(b){this.i!==b&&(this.i=b,Yg(this.element,\"ol-uncollapsible\"),!b&&this.b&&Vh(this))};l.Ml=function(b){this.i&&this.b!==b&&Vh(this)};l.Jl=function(){return this.b};function Wh(b){b=b?b:{};var c=b.className?b.className:\"ol-rotate\",d=b.label?b.label:\"\\u21e7\";this.b=null;ia(d)?this.b=Hg(\"SPAN\",\"ol-compass\",d):(this.b=d,Wg(this.b,\"ol-compass\"));d=Hg(\"BUTTON\",{\"class\":c+\"-reset\",type:\"button\",title:b.tipLabel?b.tipLabel:\"Reset rotation\"},this.b);C(d,\"click\",Wh.prototype.A,!1,this);c=Hg(\"DIV\",c+\" ol-unselectable ol-control\",d);qh.call(this,{element:c,render:b.render?b.render:Xh,target:b.target});this.i=b.duration?b.duration:250;this.j=void 0!==b.autoHide?b.autoHide:\n!0;this.l=void 0;this.j&&Wg(this.element,\"ol-hidden\")}y(Wh,qh);Wh.prototype.A=function(b){b.preventDefault();b=this.a;var c=b.aa();if(c){var d=c.Ea();void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.Ma(ag({rotation:d,duration:this.i,easing:Vf}))),c.te(0))}};\nfunction Xh(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.l){var c=\"rotate(\"+b+\"rad)\";if(this.j){var d=this.element;0===b?Wg(d,\"ol-hidden\"):Xg(d,\"ol-hidden\")}this.b.style.msTransform=c;this.b.style.webkitTransform=c;this.b.style.transform=c}this.l=b}};function Yh(b){b=b?b:{};var c=b.className?b.className:\"ol-zoom\",d=b.delta?b.delta:1,e=b.zoomOutLabel?b.zoomOutLabel:\"\\u2212\",f=b.zoomOutTipLabel?b.zoomOutTipLabel:\"Zoom out\",g=Hg(\"BUTTON\",{\"class\":c+\"-in\",type:\"button\",title:b.zoomInTipLabel?b.zoomInTipLabel:\"Zoom in\"},b.zoomInLabel?b.zoomInLabel:\"+\");C(g,\"click\",sa(Yh.prototype.j,d),!1,this);e=Hg(\"BUTTON\",{\"class\":c+\"-out\",type:\"button\",title:f},e);C(e,\"click\",sa(Yh.prototype.j,-d),!1,this);c=Hg(\"DIV\",c+\" ol-unselectable ol-control\",g,e);qh.call(this,\n{element:c,target:b.target});this.b=void 0!==b.duration?b.duration:250}y(Yh,qh);Yh.prototype.j=function(b,c){c.preventDefault();var d=this.a,e=d.aa();if(e){var f=e.$();f&&(0<this.b&&d.Ma(bg({resolution:f,duration:this.b,easing:Vf})),d=e.constrainResolution(f,b),e.Ub(d))}};function Zh(b){b=b?b:{};var c=new og;(void 0!==b.zoom?b.zoom:1)&&c.push(new Yh(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new Wh(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new Th(b.attributionOptions));return c};var $h=bc?\"webkitfullscreenchange\":ac?\"mozfullscreenchange\":Zb?\"MSFullscreenChange\":\"fullscreenchange\";function ai(){var b=Ag().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}\nfunction bi(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function di(){var b=Ag().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function ei(b){b=b?b:{};this.b=b.className?b.className:\"ol-full-screen\";var c=b.label?b.label:\"\\u2194\";this.j=ia(c)?document.createTextNode(String(c)):c;c=b.labelActive?b.labelActive:\"\\u00d7\";this.i=ia(c)?document.createTextNode(String(c)):c;c=b.tipLabel?b.tipLabel:\"Toggle full-screen\";c=Hg(\"BUTTON\",{\"class\":this.b+\"-\"+di(),type:\"button\",title:c},this.j);C(c,\"click\",this.C,!1,this);C(ba.document,$h,this.l,!1,this);var d=this.b+\" ol-unselectable ol-control \"+(ai()?\"\":\"ol-unsupported\"),c=Hg(\"DIV\",d,\nc);qh.call(this,{element:c,target:b.target});this.A=void 0!==b.keys?b.keys:!1}y(ei,qh);ei.prototype.C=function(b){b.preventDefault();ai()&&(b=this.a)&&(di()?(b=Ag().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=b.wf(),b=Dg(b),this.A?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():bi(b):bi(b)))};\nei.prototype.l=function(){var b=this.b+\"-true\",c=this.b+\"-false\",d=Qg(this.element),e=this.a;di()?(Vg(d,c)&&(Xg(d,c),Wg(d,b)),Pg(this.i,this.j)):(Vg(d,b)&&(Xg(d,b),Wg(d,c)),Pg(this.j,this.i));e&&e.Uc()};function fi(b){b=b?b:{};var c=Hg(\"DIV\",b.className?b.className:\"ol-mouse-position\");qh.call(this,{element:c,render:b.render?b.render:gi,target:b.target});C(this,kd(\"projection\"),this.Ol,!1,this);b.coordinateFormat&&this.Th(b.coordinateFormat);b.projection&&this.$g(Fe(b.projection));this.A=b.undefinedHTML?b.undefinedHTML:\"\";this.l=c.innerHTML;this.i=this.j=this.b=null}y(fi,qh);\nfunction gi(b){b=b.frameState;b?this.b!=b.viewState.projection&&(this.b=b.viewState.projection,this.j=null):this.b=null;hi(this,this.i)}l=fi.prototype;l.Ol=function(){this.j=null};l.vg=function(){return this.get(\"coordinateFormat\")};l.Zg=function(){return this.get(\"projection\")};l.Jk=function(b){this.i=this.a.Zd(b.a);hi(this,this.i)};l.Kk=function(){hi(this,null);this.i=null};\nl.setMap=function(b){fi.da.setMap.call(this,b);b&&(b=b.a,this.u.push(C(b,\"mousemove\",this.Jk,!1,this),C(b,\"mouseout\",this.Kk,!1,this)))};l.Th=function(b){this.set(\"coordinateFormat\",b)};l.$g=function(b){this.set(\"projection\",b)};function hi(b,c){var d=b.A;if(c&&b.b){if(!b.j){var e=b.Zg();b.j=e?Je(b.b,e):Ze}if(e=b.a.Fa(c))b.j(e,e),d=(d=b.vg())?d(e):e.toString()}b.l&&d==b.l||(b.element.innerHTML=d,b.l=d)};function ii(b,c,d){pc.call(this);this.wa=null;this.b=!1;this.j=b;this.g=d;this.a=c||window;this.c=ra(this.f,this)}y(ii,pc);ii.prototype.start=function(){ji(this);this.b=!1;var b=ki(this),c=li(this);b&&!c&&this.a.mozRequestAnimationFrame?(this.wa=C(this.a,\"MozBeforePaint\",this.c),this.a.mozRequestAnimationFrame(null),this.b=!0):this.wa=b&&c?b.call(this.a,this.c):this.a.setTimeout(xe(this.c),20)};\nfunction ji(b){if(null!=b.wa){var c=ki(b),d=li(b);c&&!d&&b.a.mozRequestAnimationFrame?Zc(b.wa):c&&d?d.call(b.a,b.wa):b.a.clearTimeout(b.wa)}b.wa=null}ii.prototype.f=function(){this.b&&this.wa&&Zc(this.wa);this.wa=null;this.j.call(this.g,ta())};ii.prototype.X=function(){ji(this);ii.da.X.call(this)};function ki(b){b=b.a;return b.requestAnimationFrame||b.webkitRequestAnimationFrame||b.mozRequestAnimationFrame||b.oRequestAnimationFrame||b.msRequestAnimationFrame||null}\nfunction li(b){b=b.a;return b.cancelAnimationFrame||b.cancelRequestAnimationFrame||b.webkitCancelRequestAnimationFrame||b.mozCancelRequestAnimationFrame||b.oCancelRequestAnimationFrame||b.msCancelRequestAnimationFrame||null};function mi(b){ba.setTimeout(function(){throw b;},0)}function ni(b,c){var d=b;c&&(d=ra(b,c));d=oi(d);!ka(ba.setImmediate)||ba.Window&&ba.Window.prototype&&ba.Window.prototype.setImmediate==ba.setImmediate?(pi||(pi=qi()),pi(d)):ba.setImmediate(d)}var pi;\nfunction qi(){var b=ba.MessageChannel;\"undefined\"===typeof b&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!Hb(\"Presto\")&&(b=function(){var b=document.createElement(\"IFRAME\");b.style.display=\"none\";b.src=\"\";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write(\"\");b.close();var d=\"callImmediate\"+Math.random(),e=\"file:\"==c.location.protocol?\"*\":c.location.protocol+\"//\"+c.location.host,b=ra(function(b){if((\"*\"==e||b.origin==e)&&b.data==\nd)this.port1.onmessage()},this);c.addEventListener(\"message\",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if(\"undefined\"!==typeof b&&!Hb(\"Trident\")&&!Hb(\"MSIE\")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(ca(d.next)){d=d.next;var b=d.mg;d.mg=null;b()}};return function(b){e.next={mg:b};e=e.next;c.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(b){var c=document.createElement(\"SCRIPT\");\nc.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){ba.setTimeout(b,0)}}var oi=we;function ri(b,c){this.c={};this.a=[];this.b=0;var d=arguments.length;if(1<d){if(d%2)throw Error(\"Uneven number of arguments\");for(var e=0;e<d;e+=2)this.set(arguments[e],arguments[e+1])}else if(b){b instanceof ri?(d=b.O(),e=b.pc()):(d=Mb(b),e=Lb(b));for(var f=0;f<d.length;f++)this.set(d[f],e[f])}}l=ri.prototype;l.nc=function(){return this.b};l.pc=function(){si(this);for(var b=[],c=0;c<this.a.length;c++)b.push(this.c[this.a[c]]);return b};l.O=function(){si(this);return this.a.concat()};\nl.Ka=function(){return 0==this.b};l.clear=function(){this.c={};this.b=this.a.length=0};l.remove=function(b){return ti(this.c,b)?(delete this.c[b],this.b--,this.a.length>2*this.b&&si(this),!0):!1};function si(b){if(b.b!=b.a.length){for(var c=0,d=0;c<b.a.length;){var e=b.a[c];ti(b.c,e)&&(b.a[d++]=e);c++}b.a.length=d}if(b.b!=b.a.length){for(var f={},d=c=0;c<b.a.length;)e=b.a[c],ti(f,e)||(b.a[d++]=e,f[e]=1),c++;b.a.length=d}}l.get=function(b,c){return ti(this.c,b)?this.c[b]:c};\nl.set=function(b,c){ti(this.c,b)||(this.b++,this.a.push(b));this.c[b]=c};l.forEach=function(b,c){for(var d=this.O(),e=0;e<d.length;e++){var f=d[e],g=this.get(f);b.call(c,g,f,this)}};l.clone=function(){return new ri(this)};function ti(b,c){return Object.prototype.hasOwnProperty.call(b,c)};function ui(){this.a=ta()}new ui;ui.prototype.set=function(b){this.a=b};ui.prototype.reset=function(){this.set(ta())};ui.prototype.get=function(){return this.a};function vi(b){cd.call(this);this.a=b||window;this.c=C(this.a,\"resize\",this.f,!1,this);this.b=Gg(this.a||window)}y(vi,cd);vi.prototype.X=function(){vi.da.X.call(this);this.c&&(Zc(this.c),this.c=null);this.b=this.a=null};vi.prototype.f=function(){var b=Gg(this.a||window),c=this.b;b==c||b&&c&&b.width==c.width&&b.height==c.height||(this.b=b,this.o(\"resize\"))};function wi(b,c,d,e,f){if(!(Zb||$b||bc&&jc(\"525\")))return!0;if(cc&&f)return xi(b);if(f&&!e)return!1;ja(c)&&(c=yi(c));if(!d&&(17==c||18==c||cc&&91==c))return!1;if((bc||$b)&&e&&d)switch(b){case 220:case 219:case 221:case 192:case 186:case 189:case 187:case 188:case 190:case 191:case 192:case 222:return!1}if(Zb&&e&&c==b)return!1;switch(b){case 13:return!0;case 27:return!(bc||$b)}return xi(b)}\nfunction xi(b){if(48<=b&&57>=b||96<=b&&106>=b||65<=b&&90>=b||(bc||$b)&&0==b)return!0;switch(b){case 32:case 43:case 63:case 64:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return!0;default:return!1}}function yi(b){if(ac)b=zi(b);else if(cc&&bc)a:switch(b){case 93:b=91;break a}return b}\nfunction zi(b){switch(b){case 61:return 187;case 59:return 186;case 173:return 189;case 224:return 91;case 0:return 224;default:return b}};function Ai(b,c){cd.call(this);b&&Bi(this,b,c)}y(Ai,cd);l=Ai.prototype;l.ud=null;l.le=null;l.qf=null;l.me=null;l.ib=-1;l.Zb=-1;l.bf=!1;\nvar Ci={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},Di={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,\"U+007F\":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},Ei=Zb||$b||bc&&jc(\"525\"),Fi=cc&&ac;\nAi.prototype.a=function(b){if(bc||$b)if(17==this.ib&&!b.B||18==this.ib&&!b.c||cc&&91==this.ib&&!b.A)this.Zb=this.ib=-1;-1==this.ib&&(b.B&&17!=b.j?this.ib=17:b.c&&18!=b.j?this.ib=18:b.A&&91!=b.j&&(this.ib=91));Ei&&!wi(b.j,this.ib,b.f,b.B,b.c)?this.handleEvent(b):(this.Zb=yi(b.j),Fi&&(this.bf=b.c))};Ai.prototype.c=function(b){this.Zb=this.ib=-1;this.bf=b.c};\nAi.prototype.handleEvent=function(b){var c=b.a,d,e,f=c.altKey;Zb&&\"keypress\"==b.type?(d=this.Zb,e=13!=d&&27!=d?c.keyCode:0):(bc||$b)&&\"keypress\"==b.type?(d=this.Zb,e=0<=c.charCode&&63232>c.charCode&&xi(d)?c.charCode:0):Yb&&!bc?(d=this.Zb,e=xi(d)?c.keyCode:0):(d=c.keyCode||this.Zb,e=c.charCode||0,Fi&&(f=this.bf),cc&&63==e&&224==d&&(d=191));var g=d=yi(d),h=c.keyIdentifier;d?63232<=d&&d in Ci?g=Ci[d]:25==d&&b.f&&(g=9):h&&h in Di&&(g=Di[h]);this.ib=g;b=new Gi(g,e,0,c);b.c=f;this.o(b)};\nfunction Bi(b,c,d){b.me&&Hi(b);b.ud=c;b.le=C(b.ud,\"keypress\",b,d);b.qf=C(b.ud,\"keydown\",b.a,d,b);b.me=C(b.ud,\"keyup\",b.c,d,b)}function Hi(b){b.le&&(Zc(b.le),Zc(b.qf),Zc(b.me),b.le=null,b.qf=null,b.me=null);b.ud=null;b.ib=-1;b.Zb=-1}Ai.prototype.X=function(){Ai.da.X.call(this);Hi(this)};function Gi(b,c,d,e){Ac.call(this,e);this.type=\"key\";this.j=b;this.u=c}y(Gi,Ac);function Ii(b,c){cd.call(this);var d=this.a=b;(d=ma(d)&&1==d.nodeType?this.a:this.a?this.a.body:null)&&bh(d,\"direction\");this.c=C(this.a,ac?\"DOMMouseScroll\":\"mousewheel\",this,c)}y(Ii,cd);\nIi.prototype.handleEvent=function(b){var c=0,d=0;b=b.a;if(\"mousewheel\"==b.type){c=1;if(Zb||bc&&(dc||jc(\"532.0\")))c=40;d=Ji(-b.wheelDelta,c);c=ca(b.wheelDeltaX)?Ji(-b.wheelDeltaY,c):d}else d=b.detail,100<d?d=3:-100>d&&(d=-3),ca(b.axis)&&b.axis===b.HORIZONTAL_AXIS||(c=d);ja(this.b)&&(c=Math.min(Math.max(c,-this.b),this.b));d=new Ki(d,b,0,c);this.o(d)};function Ji(b,c){return bc&&(cc||ec)&&0!=b%c?b:b/c}Ii.prototype.X=function(){Ii.da.X.call(this);Zc(this.c);this.c=null};\nfunction Ki(b,c,d,e){Ac.call(this,c);this.type=\"mousewheel\";this.detail=b;this.C=e}y(Ki,Ac);function Li(b,c,d){vc.call(this,b);this.a=c;b=d?d:{};this.buttons=Mi(b);this.pressure=Ni(b,this.buttons);this.bubbles=\"bubbles\"in b?b.bubbles:!1;this.cancelable=\"cancelable\"in b?b.cancelable:!1;this.view=\"view\"in b?b.view:null;this.detail=\"detail\"in b?b.detail:null;this.screenX=\"screenX\"in b?b.screenX:0;this.screenY=\"screenY\"in b?b.screenY:0;this.clientX=\"clientX\"in b?b.clientX:0;this.clientY=\"clientY\"in b?b.clientY:0;this.button=\"button\"in b?b.button:0;this.relatedTarget=\"relatedTarget\"in b?b.relatedTarget:\nnull;this.pointerId=\"pointerId\"in b?b.pointerId:0;this.width=\"width\"in b?b.width:0;this.height=\"height\"in b?b.height:0;this.pointerType=\"pointerType\"in b?b.pointerType:\"\";this.isPrimary=\"isPrimary\"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}y(Li,vc);function Mi(b){if(b.buttons||Oi)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}\nfunction Ni(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}var Oi=!1;try{Oi=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(b){};function Pi(b,c){var d=Kg(\"CANVAS\");b&&(d.width=b);c&&(d.height=c);return d.getContext(\"2d\")}\nvar Qi=function(){var b;return function(){if(void 0===b)if(ba.getComputedStyle){var c=Kg(\"P\"),d,e={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]=\"translate(1px,1px)\",d=ba.getComputedStyle(c).getPropertyValue(e[f]));Og(c);b=d&&\"none\"!==d}else b=!1;return b}}(),Ri=function(){var b;return function(){if(void 0===b)if(ba.getComputedStyle){var c=\nKg(\"P\"),d,e={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]=\"translate3d(1px,1px,1px)\",d=ba.getComputedStyle(c).getPropertyValue(e[f]));Og(c);b=d&&\"none\"!==d}else b=!1;return b}}();function Si(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Zb&&jc(\"9.0\")&&(b.style.transformOrigin=\"0 0\")}\nfunction Ti(b,c){var d;if(Ri()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);Si(b,\"matrix3d(\"+e.join(\",\")+\")\")}else if(Qi()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);Si(b,\"matrix(\"+f.join(\",\")+\")\")}else b.style.left=Math.round(c[12])+\"px\",b.style.top=Math.round(c[13])+\"px\"};var Ui=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function Vi(b,c){var d,e,f=Ui.length;for(e=0;e<f;++e)try{if(d=b.getContext(Ui[e],c))return d}catch(g){}return null};var Wi,Xi=ba.devicePixelRatio||1,Yi=!1,Zi=function(){if(!(\"HTMLCanvasElement\"in ba))return!1;try{var b=Pi();return b?(void 0!==b.setLineDash&&(Yi=!0),!0):!1}catch(c){return!1}}(),$i=\"DeviceOrientationEvent\"in ba,aj=\"geolocation\"in ba.navigator,bj=\"ontouchstart\"in ba,cj=\"PointerEvent\"in ba,dj=!!ba.navigator.msPointerEnabled,ej=!1,fj,gj=[];if(\"WebGLRenderingContext\"in ba)try{var hj=Vi(Kg(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});hj&&(ej=!0,fj=hj.getParameter(hj.MAX_TEXTURE_SIZE),gj=hj.getSupportedExtensions())}catch(b){}\nWi=ej;va=gj;ua=fj;function ij(b,c){this.a=b;this.g=c};function jj(b){ij.call(this,b,{mousedown:this.el,mousemove:this.fl,mouseup:this.il,mouseover:this.hl,mouseout:this.gl});this.c=b.c;this.b=[]}y(jj,ij);function kj(b,c){for(var d=b.b,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var m=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=m)return!0}return!1}function lj(b){var c=mj(b,b.a),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType=\"mouse\";return c}l=jj.prototype;\nl.el=function(b){if(!kj(this,b)){(1).toString()in this.c&&this.cancel(b);var c=lj(b);this.c[(1).toString()]=b;nj(this.a,oj,c,b)}};l.fl=function(b){if(!kj(this,b)){var c=lj(b);nj(this.a,pj,c,b)}};l.il=function(b){if(!kj(this,b)){var c=this.c[(1).toString()];c&&c.button===b.button&&(c=lj(b),nj(this.a,qj,c,b),delete this.c[(1).toString()])}};l.hl=function(b){if(!kj(this,b)){var c=lj(b);rj(this.a,c,b)}};l.gl=function(b){if(!kj(this,b)){var c=lj(b);sj(this.a,c,b)}};\nl.cancel=function(b){var c=lj(b);this.a.cancel(c,b);delete this.c[(1).toString()]};function tj(b){ij.call(this,b,{MSPointerDown:this.nl,MSPointerMove:this.ol,MSPointerUp:this.rl,MSPointerOut:this.pl,MSPointerOver:this.ql,MSPointerCancel:this.ml,MSGotPointerCapture:this.kl,MSLostPointerCapture:this.ll});this.c=b.c;this.b=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}y(tj,ij);function uj(b,c){var d=c;ja(c.a.pointerType)&&(d=mj(c,c.a),d.pointerType=b.b[c.a.pointerType]);return d}l=tj.prototype;l.nl=function(b){this.c[b.a.pointerId.toString()]=b;var c=uj(this,b);nj(this.a,oj,c,b)};\nl.ol=function(b){var c=uj(this,b);nj(this.a,pj,c,b)};l.rl=function(b){var c=uj(this,b);nj(this.a,qj,c,b);delete this.c[b.a.pointerId.toString()]};l.pl=function(b){var c=uj(this,b);sj(this.a,c,b)};l.ql=function(b){var c=uj(this,b);rj(this.a,c,b)};l.ml=function(b){var c=uj(this,b);this.a.cancel(c,b);delete this.c[b.a.pointerId.toString()]};l.ll=function(b){this.a.o(new Li(\"lostpointercapture\",b,b.a))};l.kl=function(b){this.a.o(new Li(\"gotpointercapture\",b,b.a))};function vj(b){ij.call(this,b,{pointerdown:this.Vn,pointermove:this.Wn,pointerup:this.Zn,pointerout:this.Xn,pointerover:this.Yn,pointercancel:this.Un,gotpointercapture:this.rk,lostpointercapture:this.dl})}y(vj,ij);l=vj.prototype;l.Vn=function(b){wj(this.a,b)};l.Wn=function(b){wj(this.a,b)};l.Zn=function(b){wj(this.a,b)};l.Xn=function(b){wj(this.a,b)};l.Yn=function(b){wj(this.a,b)};l.Un=function(b){wj(this.a,b)};l.dl=function(b){wj(this.a,b)};l.rk=function(b){wj(this.a,b)};function xj(b,c){ij.call(this,b,{touchstart:this.ap,touchmove:this.$o,touchend:this.Zo,touchcancel:this.Yo});this.c=b.c;this.i=c;this.b=void 0;this.j=0;this.f=void 0}y(xj,ij);l=xj.prototype;l.Ph=function(){this.j=0;this.f=void 0};\nfunction yj(b,c,d){c=mj(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.j;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.b===d.identifier;c.pointerType=\"touch\";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}\nfunction zj(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.a.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=yj(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}\nl.ap=function(b){var c=b.a.touches,d=Mb(this.c),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.c[h];var m;if(!(m=1==h))a:{m=c.length;for(var n=void 0,p=0;p<m;p++)if(n=c[p],n.identifier===h-2){m=!0;break a}m=!1}m||f.push(k.tc)}for(g=0;g<f.length;++g)this.df(b,f[g])}c=Kb(this.c);if(0===c||1===c&&(1).toString()in this.c)this.b=b.a.changedTouches[0].identifier,void 0!==this.f&&ba.clearTimeout(this.f);Bj(this,b);this.j++;zj(this,b,this.Qn)};\nl.Qn=function(b,c){this.c[c.pointerId]={target:c.target,tc:c,xh:c.target};var d=this.a;c.bubbles=!0;nj(d,Cj,c,b);d=this.a;c.bubbles=!1;nj(d,Dj,c,b);nj(this.a,oj,c,b)};l.$o=function(b){b.preventDefault();zj(this,b,this.jl)};l.jl=function(b,c){var d=this.c[c.pointerId];if(d){var e=d.tc,f=d.xh;nj(this.a,pj,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(sj(this.a,e,b),rj(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.df(b,c)));d.tc=c;d.xh=c.target}};\nl.Zo=function(b){Bj(this,b);zj(this,b,this.bp)};l.bp=function(b,c){nj(this.a,qj,c,b);this.a.tc(c,b);var d=this.a;c.bubbles=!1;nj(d,Ej,c,b);delete this.c[c.pointerId];c.isPrimary&&(this.b=void 0,this.f=ba.setTimeout(ra(this.Ph,this),200))};l.Yo=function(b){zj(this,b,this.df)};l.df=function(b,c){this.a.cancel(c,b);this.a.tc(c,b);var d=this.a;c.bubbles=!1;nj(d,Ej,c,b);delete this.c[c.pointerId];c.isPrimary&&(this.b=void 0,this.f=ba.setTimeout(ra(this.Ph,this),200))};\nfunction Bj(b,c){var d=b.i.b,e=c.a.changedTouches[0];if(b.b===e.identifier){var f=[e.clientX,e.clientY];d.push(f);ba.setTimeout(function(){hb(d,f)},2500)}};function Fj(b){cd.call(this);this.f=b;this.c={};this.b={};this.a=[];cj?Gj(this,new vj(this)):dj?Gj(this,new tj(this)):(b=new jj(this),Gj(this,b),bj&&Gj(this,new xj(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],Hj(this,Object.keys(c.g))}y(Fj,cd);function Gj(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.b[b]=ra(d,c))},b),b.a.push(c))}Fj.prototype.g=function(b){var c=this.b[b.type];c&&c(b)};\nfunction Hj(b,c){c.forEach(function(b){C(this.f,b,this.g,!1,this)},b)}function Ij(b,c){c.forEach(function(b){Yc(this.f,b,this.g,!1,this)},b)}function mj(b,c){for(var d={},e,f=0,g=Jj.length;f<g;f++)e=Jj[f][0],d[e]=b[e]||c[e]||Jj[f][1];return d}Fj.prototype.tc=function(b,c){b.bubbles=!0;nj(this,Kj,b,c)};Fj.prototype.cancel=function(b,c){nj(this,Lj,b,c)};function sj(b,c,d){b.tc(c,d);var e=c.relatedTarget;e&&Rg(c.target,e)||(c.bubbles=!1,nj(b,Ej,c,d))}\nfunction rj(b,c,d){c.bubbles=!0;nj(b,Cj,c,d);var e=c.relatedTarget;e&&Rg(c.target,e)||(c.bubbles=!1,nj(b,Dj,c,d))}function nj(b,c,d,e){b.o(new Li(c,e,d))}function wj(b,c){b.o(new Li(c.type,c,c.a))}Fj.prototype.X=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],Ij(this,Object.keys(c.g));Fj.da.X.call(this)};\nvar pj=\"pointermove\",oj=\"pointerdown\",qj=\"pointerup\",Cj=\"pointerover\",Kj=\"pointerout\",Dj=\"pointerenter\",Ej=\"pointerleave\",Lj=\"pointercancel\",Jj=[[\"bubbles\",!1],[\"cancelable\",!1],[\"view\",null],[\"detail\",null],[\"screenX\",0],[\"screenY\",0],[\"clientX\",0],[\"clientY\",0],[\"ctrlKey\",!1],[\"altKey\",!1],[\"shiftKey\",!1],[\"metaKey\",!1],[\"button\",0],[\"relatedTarget\",null],[\"buttons\",0],[\"pointerId\",0],[\"width\",0],[\"height\",0],[\"pressure\",0],[\"tiltX\",0],[\"tiltY\",0],[\"pointerType\",\"\"],[\"hwTimestamp\",0],[\"isPrimary\",\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function Mj(b,c,d,e,f){ph.call(this,b,c,f);this.a=d;this.originalEvent=d.a;this.pixel=c.Zd(this.originalEvent);this.coordinate=c.Fa(this.pixel);this.dragging=void 0!==e?e:!1}y(Mj,ph);Mj.prototype.preventDefault=function(){Mj.da.preventDefault.call(this);this.a.preventDefault()};Mj.prototype.b=function(){Mj.da.b.call(this);this.a.b()};function Nj(b,c,d,e,f){Mj.call(this,b,c,d.a,e,f);this.c=d}y(Nj,Mj);\nfunction Oj(b){cd.call(this);this.b=b;this.j=0;this.i=!1;this.c=this.l=this.f=null;b=this.b.a;this.A=0;this.u={};this.g=new Fj(b);this.a=null;this.l=C(this.g,oj,this.Nk,!1,this);this.B=C(this.g,pj,this.xo,!1,this)}y(Oj,cd);function Pj(b,c){var d;d=new Nj(Qj,b.b,c);b.o(d);0!==b.j?(ba.clearTimeout(b.j),b.j=0,d=new Nj(Rj,b.b,c),b.o(d)):b.j=ba.setTimeout(ra(function(){this.j=0;var b=new Nj(Sj,this.b,c);this.o(b)},b),250)}\nfunction Tj(b,c){c.type==Uj||c.type==Vj?delete b.u[c.pointerId]:c.type==Wj&&(b.u[c.pointerId]=!0);b.A=Kb(b.u)}l=Oj.prototype;l.Jg=function(b){Tj(this,b);var c=new Nj(Uj,this.b,b);this.o(c);!this.i&&0===b.button&&Pj(this,this.c);0===this.A&&(this.f.forEach(Zc),this.f=null,this.i=!1,this.c=null,uc(this.a),this.a=null)};\nl.Nk=function(b){Tj(this,b);var c=new Nj(Wj,this.b,b);this.o(c);this.c=b;this.f||(this.a=new Fj(document),this.f=[C(this.a,Xj,this.El,!1,this),C(this.a,Uj,this.Jg,!1,this),C(this.g,Vj,this.Jg,!1,this)])};l.El=function(b){if(b.clientX!=this.c.clientX||b.clientY!=this.c.clientY){this.i=!0;var c=new Nj(Yj,this.b,b,this.i);this.o(c)}b.preventDefault()};l.xo=function(b){this.o(new Nj(b.type,this.b,b,!(!this.c||b.clientX==this.c.clientX&&b.clientY==this.c.clientY)))};\nl.X=function(){this.B&&(Zc(this.B),this.B=null);this.l&&(Zc(this.l),this.l=null);this.f&&(this.f.forEach(Zc),this.f=null);this.a&&(uc(this.a),this.a=null);this.g&&(uc(this.g),this.g=null);Oj.da.X.call(this)};var Sj=\"singleclick\",Qj=\"click\",Rj=\"dblclick\",Yj=\"pointerdrag\",Xj=\"pointermove\",Wj=\"pointerdown\",Uj=\"pointerup\",Vj=\"pointercancel\",Zj={up:Sj,jp:Qj,kp:Rj,np:Yj,qp:Xj,mp:Wj,tp:Uj,sp:\"pointerover\",rp:\"pointerout\",op:\"pointerenter\",pp:\"pointerleave\",lp:Vj};function ak(b){id.call(this);var c=Ub(b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.I(c)}y(ak,id);\nfunction bk(b){var c=b.Rb(),d=b.of(),e=b.qb(),f=b.J(),g=b.Sb(),h=b.Mb(),k=b.Nb();return{layer:b,opacity:Sa(c,0,1),S:d,visible:e,rb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}l=ak.prototype;l.J=function(){return this.get(\"extent\")};l.Mb=function(){return this.get(\"maxResolution\")};l.Nb=function(){return this.get(\"minResolution\")};l.Rb=function(){return this.get(\"opacity\")};l.qb=function(){return this.get(\"visible\")};l.Sb=function(){return this.get(\"zIndex\")};\nl.bc=function(b){this.set(\"extent\",b)};l.jc=function(b){this.set(\"maxResolution\",b)};l.kc=function(b){this.set(\"minResolution\",b)};l.cc=function(b){this.set(\"opacity\",b)};l.dc=function(b){this.set(\"visible\",b)};l.ec=function(b){this.set(\"zIndex\",b)};function ck(){};function dk(b,c,d,e,f,g){vc.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}y(dk,vc);function ek(b){var c=Ub(b);delete c.source;ak.call(this,c);this.j=this.A=this.u=null;b.map&&this.setMap(b.map);C(this,kd(\"source\"),this.Tk,!1,this);this.wc(b.source?b.source:null)}y(ek,ak);function fk(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}l=ek.prototype;l.nf=function(b){b=b?b:[];b.push(bk(this));return b};l.fa=function(){return this.get(\"source\")||null};l.of=function(){var b=this.fa();return b?b.A:\"undefined\"};l.vm=function(){this.s()};\nl.Tk=function(){this.j&&(Zc(this.j),this.j=null);var b=this.fa();b&&(this.j=C(b,\"change\",this.vm,!1,this));this.s()};l.setMap=function(b){Zc(this.u);this.u=null;b||this.s();Zc(this.A);this.A=null;b&&(this.u=C(b,\"precompose\",function(b){var d=bk(this);d.rb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[w(this)]=d},!1,this),this.A=C(this,\"change\",b.render,!1,b),this.s())};l.wc=function(b){this.set(\"source\",b)};function gk(b,c,d,e,f){cd.call(this);this.j=f;this.extent=b;this.b=d;this.resolution=c;this.state=e}y(gk,cd);function hk(b){b.o(\"change\")}gk.prototype.J=function(){return this.extent};gk.prototype.$=function(){return this.resolution};function ik(b,c,d,e,f,g,h,k){Hd(b);0===c&&0===d||Kd(b,c,d);1==e&&1==f||Ld(b,e,f);0!==g&&Md(b,g);0===h&&0===k||Kd(b,h,k);return b}function jk(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function kk(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function lk(b){fd.call(this);this.a=b}y(lk,fd);l=lk.prototype;l.Za=wa;l.sc=function(b,c,d,e){b=b.slice();kk(c.pixelToCoordinateMatrix,b,b);if(this.Za(b,c,ue,this))return d.call(e,this.a)};l.we=te;l.bd=function(b,c,d){return function(e,f){return Qh(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.a.toString()]=b})}};l.zm=function(b){2===b.target.state&&mk(this)};function nk(b,c){var d=c.state;2!=d&&3!=d&&C(c,\"change\",b.zm,!1,b);0==d&&(c.load(),d=c.state);return 2==d}\nfunction mk(b){var c=b.a;c.qb()&&\"ready\"==c.of()&&b.s()}function ok(b,c){c.nh()&&b.postRenderFunctions.push(sa(function(b,c,f){c=w(b).toString();b.oh(f.viewState.projection,f.usedTiles[c])},c))}function pk(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[w(d).toString()]=d}}function qk(b,c){var d=c.U;void 0!==d&&(ia(d)?b.logos[d]=\"\":ma(d)&&(b.logos[d.src]=d.href))}\nfunction rk(b,c,d,e){c=w(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.c<b.c&&(b.c=e.c),e.b>b.b&&(b.b=e.b)):b[c][d]=e:(b[c]={},b[c][d]=e)}function sk(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}\nfunction tk(b,c,d,e,f,g,h,k,m,n){var p=w(c).toString();p in b.wantedTiles||(b.wantedTiles[p]={});var q=b.wantedTiles[p];b=b.tileQueue;var r=d.minZoom,t,x,z,B,A,v;for(v=h;v>=r;--v)for(x=Fh(d,g,v,x),z=d.$(v),B=x.a;B<=x.f;++B)for(A=x.c;A<=x.b;++A)h-v<=k?(t=c.Ob(v,B,A,e,f),0==t.state&&(q[fg(t.a)]=!0,t.tb()in b.b||uk(b,[t,p,Jh(d,t.a),z])),void 0!==m&&m.call(n,t)):c.Xf(v,B,A,f)};function vk(b){this.A=b.opacity;this.D=b.rotateWithView;this.u=b.rotation;this.i=b.scale;this.G=b.snapToPixel}l=vk.prototype;l.Ae=function(){return this.A};l.ce=function(){return this.D};l.Be=function(){return this.u};l.Ce=function(){return this.i};l.de=function(){return this.G};l.De=function(b){this.A=b};l.Ee=function(b){this.u=b};l.Fe=function(b){this.i=b};function wk(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.f=null;this.c=void 0!==b.anchorOrigin?b.anchorOrigin:\"top-left\";this.l=void 0!==b.anchorXUnits?b.anchorXUnits:\"fraction\";this.B=void 0!==b.anchorYUnits?b.anchorYUnits:\"fraction\";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src);var g=void 0!==b.src?0:2,h=xk.Yb(),k=h.get(f,c);k||(k=new yk(d,f,e,c,g),h.set(f,c,k));this.a=\nk;this.ia=void 0!==b.offset?b.offset:[0,0];this.b=void 0!==b.offsetOrigin?b.offsetOrigin:\"top-left\";this.j=null;this.C=void 0!==b.size?b.size:null;vk.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}y(wk,vk);l=wk.prototype;\nl.Xb=function(){if(this.f)return this.f;var b=this.g,c=this.Bb();if(\"fraction\"==this.l||\"fraction\"==this.B){if(!c)return null;b=this.g.slice();\"fraction\"==this.l&&(b[0]*=c[0]);\"fraction\"==this.B&&(b[1]*=c[1])}if(\"top-left\"!=this.c){if(!c)return null;b===this.g&&(b=this.g.slice());if(\"top-right\"==this.c||\"bottom-right\"==this.c)b[0]=-b[0]+c[0];if(\"bottom-left\"==this.c||\"bottom-right\"==this.c)b[1]=-b[1]+c[1]}return this.f=b};l.fc=function(){return this.a.a};l.qd=function(){return this.a.b};l.Bd=function(){return this.a.c};\nl.ze=function(){var b=this.a;if(!b.g)if(b.l){var c=b.b[0],d=b.b[1],e=Pi(c,d);e.fillRect(0,0,c,d);b.g=e.canvas}else b.g=b.a;return b.g};l.Ca=function(){if(this.j)return this.j;var b=this.ia;if(\"top-left\"!=this.b){var c=this.Bb(),d=this.a.b;if(!c||!d)return null;b=b.slice();if(\"top-right\"==this.b||\"bottom-right\"==this.b)b[0]=d[0]-c[0]-b[0];if(\"bottom-left\"==this.b||\"bottom-right\"==this.b)b[1]=d[1]-c[1]-b[1]}return this.j=b};l.fn=function(){return this.a.j};l.Bb=function(){return this.C?this.C:this.a.b};\nl.sf=function(b,c){return C(this.a,\"change\",b,!1,c)};l.load=function(){this.a.load()};l.Wf=function(b,c){Yc(this.a,\"change\",b,!1,c)};function yk(b,c,d,e,f){cd.call(this);this.g=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.f=null;this.c=f;this.b=d;this.j=c;this.l=!1;2==this.c&&zk(this)}y(yk,cd);function zk(b){var c=Pi(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.l=!0}}yk.prototype.i=function(){this.c=3;this.f.forEach(Zc);this.f=null;this.o(\"change\")};\nyk.prototype.B=function(){this.c=2;this.b=[this.a.width,this.a.height];this.f.forEach(Zc);this.f=null;zk(this);this.o(\"change\")};yk.prototype.load=function(){if(0==this.c){this.c=1;this.f=[Xc(this.a,\"error\",this.i,!1,this),Xc(this.a,\"load\",this.B,!1,this)];try{this.a.src=this.j}catch(b){this.i()}}};function xk(){this.a={};this.c=0}ea(xk);xk.prototype.clear=function(){this.a={};this.c=0};xk.prototype.get=function(b,c){var d=c+\":\"+b;return d in this.a?this.a[d]:null};\nxk.prototype.set=function(b,c,d){this.a[c+\":\"+b]=d;++this.c};function Ak(b,c){pc.call(this);this.j=c;this.f={};this.u={}}y(Ak,pc);function Bk(b){var c=b.viewState,d=b.coordinateToPixelMatrix;ik(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Jd(d,b.pixelToCoordinateMatrix)}l=Ak.prototype;l.X=function(){Ib(this.f,uc);Ak.da.X.call(this)};\nfunction Ck(){var b=xk.Yb();if(32<b.c){var c=0,d,e;for(d in b.a){e=b.a[d];var f;if(f=0===(c++&3))Ec(e)?e=ed(e,void 0,void 0):(e=Tc(e),e=!!e&&Mc(e,void 0,void 0)),f=!e;f&&(delete b.a[d],--b.c)}}}\nl.Af=function(b,c,d,e,f,g){function h(b){var c=w(b).toString();if(!(c in p))return p[c]=!0,d.call(e,b,null)}var k,m=c.viewState,n=m.resolution,p={},q=m.projection,m=b;if(q.b){var q=q.J(),r=ke(q),t=b[0];if(t<q[0]||t>q[2])m=[t+r*Math.ceil((q[0]-t)/r),b[1]]}q=c.layerStatesArray;for(r=q.length-1;0<=r;--r){var t=q[r],x=t.layer;if(!t.rb||fk(t,n)&&f.call(g,x)){var z=Dk(this,x);x.fa()&&(k=z.Za(zh(x.fa())?m:b,c,t.rb?d:h,e));if(k)return k}}};\nl.jh=function(b,c,d,e,f,g){var h,k=c.viewState.resolution,m=c.layerStatesArray,n;for(n=m.length-1;0<=n;--n){h=m[n];var p=h.layer;if(fk(h,k)&&f.call(g,p)&&(h=Dk(this,p).sc(b,c,d,e)))return h}};l.kh=function(b,c,d,e){return void 0!==this.Af(b,c,ue,this,d,e)};function Dk(b,c){var d=w(c).toString();if(d in b.f)return b.f[d];var e=b.gf(c);b.f[d]=e;b.u[d]=C(e,\"change\",b.Dk,!1,b);return e}l.Dk=function(){this.j.render()};l.Me=wa;\nl.Do=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];Zc(this.u[e]);delete this.u[e];uc(f)}};function Ek(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(ra(b.Do,b));break}}function rb(b,c){return b.zIndex-c.zIndex};function Fk(b,c){this.i=b;this.g=c;this.a=[];this.c=[];this.b={}}Fk.prototype.clear=function(){this.a.length=0;this.c.length=0;Rb(this.b)};function Gk(b){var c=b.a,d=b.c,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),Hk(b,0));c=b.g(e);delete b.b[c];return e}function uk(b,c){var d=b.i(c);Infinity!=d&&(b.a.push(c),b.c.push(d),b.b[b.g(c)]=!0,Ik(b,0,b.a.length-1))}Fk.prototype.nc=function(){return this.a.length};Fk.prototype.Ka=function(){return 0===this.a.length};\nfunction Hk(b,c){for(var d=b.a,e=b.c,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var m=2*c+1,n=2*c+2,m=n<f&&e[n]<e[m]?n:m;d[c]=d[m];e[c]=e[m];c=m}d[c]=g;e[c]=h;Ik(b,k,c)}function Ik(b,c,d){var e=b.a;b=b.c;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function Jk(b){var c=b.i,d=b.a,e=b.c,f=0,g=d.length,h,k,m;for(k=0;k<g;++k)h=d[k],m=c(h),Infinity==m?delete b.b[b.g(h)]:(e[f]=m,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)Hk(b,c)};function Kk(b,c){Fk.call(this,function(c){return b.apply(null,c)},function(b){return b[0].tb()});this.l=c;this.f=0}y(Kk,Fk);Kk.prototype.j=function(b){b=b.target;var c=b.state;if(2===c||3===c||4===c)Yc(b,\"change\",this.j,!1,this),--this.f,this.l()};function Lk(b,c,d){for(var e=0,f;b.f<c&&e<d&&0<b.nc();)f=Gk(b)[0],0===f.state&&(C(f,\"change\",b.j,!1,b),f.load(),++b.f,++e)};function Mk(b,c,d){this.f=b;this.b=c;this.j=d;this.a=[];this.c=this.g=0}function Nk(b,c){var d=b.f,e=b.c,f=b.b-e,g=Math.log(b.b/b.c)/b.f;return Zf({source:c,duration:g,easing:function(b){return e*(Math.exp(d*b*g)-1)/f}})};function Ok(b){id.call(this);this.u=null;this.g(!0);this.handleEvent=b.handleEvent}y(Ok,id);Ok.prototype.b=function(){return this.get(\"active\")};Ok.prototype.g=function(b){this.set(\"active\",b)};Ok.prototype.setMap=function(b){this.u=b};function Pk(b,c,d,e,f){if(void 0!==d){var g=c.Ea(),h=c.Ta();void 0!==g&&h&&f&&0<f&&(b.Ma(ag({rotation:g,duration:f,easing:Vf})),e&&b.Ma(Zf({source:h,duration:f,easing:Vf})));c.rotate(d,e)}}\nfunction Qk(b,c,d,e,f){var g=c.$();d=c.constrainResolution(g,d,0);Rk(b,c,d,e,f)}function Rk(b,c,d,e,f){if(d){var g=c.$(),h=c.Ta();void 0!==g&&h&&d!==g&&f&&0<f&&(b.Ma(bg({resolution:g,duration:f,easing:Vf})),e&&b.Ma(Zf({source:h,duration:f,easing:Vf})));if(e){var k;b=c.Ta();f=c.$();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.jb(k)}c.Ub(d)}};function Sk(b){b=b?b:{};this.a=b.delta?b.delta:1;Ok.call(this,{handleEvent:Tk});this.f=b.duration?b.duration:250}y(Sk,Ok);function Tk(b){var c=!1,d=b.a;if(b.type==Rj){var c=b.map,e=b.coordinate,d=d.f?-this.a:this.a,f=c.aa();Qk(c,f,d,e,this.f);b.preventDefault();c=!0}return!c};function Uk(b){b=b.a;return b.c&&!b.l&&b.f}function Vk(b){return\"pointermove\"==b.type}function Wk(b){return b.type==Sj}function Xk(b){b=b.a;return!b.c&&!b.l&&!b.f}function Yk(b){b=b.a;return!b.c&&!b.l&&b.f}function Zk(b){b=b.a.target.tagName;return\"INPUT\"!==b&&\"SELECT\"!==b&&\"TEXTAREA\"!==b}function $k(b){return\"mouse\"==b.c.pointerType};function al(b){b=b?b:{};Ok.call(this,{handleEvent:b.handleEvent?b.handleEvent:bl});this.Ac=b.handleDownEvent?b.handleDownEvent:te;this.Bc=b.handleDragEvent?b.handleDragEvent:wa;this.Xc=b.handleMoveEvent?b.handleMoveEvent:wa;this.We=b.handleUpEvent?b.handleUpEvent:te;this.C=!1;this.Z={};this.j=[]}y(al,Ok);function cl(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}\nfunction bl(b){if(!(b instanceof Nj))return!0;var c=!1,d=b.type;if(d===Wj||d===Yj||d===Uj)d=b.c,b.type==Uj?delete this.Z[d.pointerId]:b.type==Wj?this.Z[d.pointerId]=d:d.pointerId in this.Z&&(this.Z[d.pointerId]=d),this.j=Lb(this.Z);this.C&&(b.type==Yj?this.Bc(b):b.type==Uj&&(this.C=this.We(b)));b.type==Wj?(this.C=b=this.Ac(b),c=this.xc(b)):b.type==Xj&&this.Xc(b);return!c}al.prototype.xc=we;function dl(b){al.call(this,{handleDownEvent:el,handleDragEvent:fl,handleUpEvent:gl});b=b?b:{};this.a=b.kinetic;this.f=this.i=null;this.A=b.condition?b.condition:Xk;this.l=!1}y(dl,al);function fl(b){var c=cl(this.j);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.f){var d=this.f[0]-c[0],e=c[1]-this.f[1];b=b.map;var f=b.aa(),g=Rf(f),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;wd(d,g.rotation);rd(d,g.center);d=f.Wd(d);b.render();f.jb(d)}this.f=c}\nfunction gl(b){b=b.map;var c=b.aa();if(0===this.j.length){var d;if(d=!this.l&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-d.j,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.g=Math.atan2(f,h);d.c=Math.sqrt(h*h+f*f)/e;d=d.c>d.b}}d&&(d=this.a,d=(d.b-d.c)/d.f,f=this.a.g,g=c.Ta(),this.i=Nk(this.a,g),b.Ma(this.i),g=b.Oa(g),d=b.Fa([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.Wd(d),c.jb(d));Tf(c,-1);b.render();\nreturn!1}this.f=null;return!0}function el(b){if(0<this.j.length&&this.A(b)){var c=b.map,d=c.aa();this.f=null;this.C||Tf(d,1);c.render();this.i&&hb(c.S,this.i)&&(d.jb(b.frameState.viewState.center),this.i=null);this.a&&(b=this.a,b.a.length=0,b.g=0,b.c=0);this.l=1<this.j.length;return!0}return!1}dl.prototype.xc=te;function hl(b){b=b?b:{};al.call(this,{handleDownEvent:il,handleDragEvent:jl,handleUpEvent:kl});this.f=b.condition?b.condition:Uk;this.a=void 0;this.i=b.duration?b.duration:250}y(hl,al);function jl(b){if($k(b)){var c=b.map,d=c.Ra();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.aa(),f=e.Ea();c.render();Pk(c,e,f-b)}this.a=d}}\nfunction kl(b){if(!$k(b))return!0;b=b.map;var c=b.aa();Tf(c,-1);var d=c.Ea(),e=this.i,d=c.constrainRotation(d,0);Pk(b,c,d,void 0,e);return!1}function il(b){return $k(b)&&Cc(b.a)&&this.f(b)?(b=b.map,Tf(b.aa(),1),b.render(),this.a=void 0,!0):!1}hl.prototype.xc=te;function ll(b){this.f=null;this.c=document.createElement(\"div\");this.c.style.position=\"absolute\";this.c.className=\"ol-box \"+b;this.b=this.g=this.a=null}y(ll,pc);ll.prototype.X=function(){this.setMap(null);ll.da.X.call(this)};function ml(b){var c=b.g,d=b.b;b=b.c.style;b.left=Math.min(c[0],d[0])+\"px\";b.top=Math.min(c[1],d[1])+\"px\";b.width=Math.abs(d[0]-c[0])+\"px\";b.height=Math.abs(d[1]-c[1])+\"px\"}\nll.prototype.setMap=function(b){if(this.a){this.a.G.removeChild(this.c);var c=this.c.style;c.left=c.top=c.width=c.height=\"inherit\"}(this.a=b)&&this.a.G.appendChild(this.c)};function nl(b){var c=b.g,d=b.b,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.Fa,b.a);c[4]=c[0].slice();b.f?b.f.ma([c]):b.f=new E([c])}ll.prototype.W=function(){return this.f};function pl(b,c){vc.call(this,b);this.coordinate=c}y(pl,vc);function ql(b){al.call(this,{handleDownEvent:rl,handleDragEvent:sl,handleUpEvent:tl});b=b?b:{};this.f=new ll(b.className||\"ol-dragbox\");this.a=null;this.A=b.condition?b.condition:ue}y(ql,al);function sl(b){if($k(b)){var c=this.f;b=b.pixel;c.g=this.a;c.b=b;nl(c);ml(c)}}ql.prototype.W=function(){return this.f.W()};ql.prototype.l=wa;\nfunction tl(b){if(!$k(b))return!0;this.f.setMap(null);var c=b.pixel[0]-this.a[0],d=b.pixel[1]-this.a[1];64<=c*c+d*d&&(this.l(b),this.o(new pl(\"boxend\",b.coordinate)));return!1}function rl(b){if($k(b)&&Cc(b.a)&&this.A(b)){this.a=b.pixel;this.f.setMap(b.map);var c=this.f,d=this.a;c.g=this.a;c.b=d;nl(c);ml(c);this.o(new pl(\"boxstart\",b.coordinate));return!0}return!1};function ul(b){b=b?b:{};var c=b.condition?b.condition:Yk;this.i=void 0!==b.duration?b.duration:200;ql.call(this,{condition:c,className:b.className||\"ol-dragzoom\"})}y(ul,ql);ul.prototype.l=function(){var b=this.u,c=b.aa(),d=b.Ra(),e=this.W().J(),d=c.constrainResolution(Math.max(ke(e)/d[0],le(e)/d[1])),f=c.$(),g=c.Ta();b.Ma(bg({resolution:f,duration:this.i,easing:Vf}));b.Ma(Zf({source:g,duration:this.i,easing:Vf}));c.jb(me(e));c.Ub(d)};function vl(b){Ok.call(this,{handleEvent:wl});b=b||{};this.a=void 0!==b.condition?b.condition:ze(Xk,Zk);this.f=void 0!==b.duration?b.duration:100;this.j=void 0!==b.pixelDelta?b.pixelDelta:128}y(vl,Ok);\nfunction wl(b){var c=!1;if(\"key\"==b.type){var d=b.a.j;if(this.a(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.aa(),f=c.$()*this.j,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];wd(d,c.Ea());f=this.f;if(g=c.Ta())f&&0<f&&e.Ma(Zf({source:g,duration:f,easing:Xf})),e=c.Wd([g[0]+d[0],g[1]+d[1]]),c.jb(e);b.preventDefault();c=!0}}return!c};function xl(b){Ok.call(this,{handleEvent:yl});b=b?b:{};this.f=b.condition?b.condition:Zk;this.a=b.delta?b.delta:1;this.j=void 0!==b.duration?b.duration:100}y(xl,Ok);function yl(b){var c=!1;if(\"key\"==b.type){var d=b.a.u;if(this.f(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.aa();Qk(c,e,d,void 0,this.j);b.preventDefault();c=!0}}return!c};function zl(b){Ok.call(this,{handleEvent:Al});b=b||{};this.f=0;this.C=void 0!==b.duration?b.duration:250;this.l=void 0!==b.useAnchor?b.useAnchor:!0;this.a=null;this.i=this.j=void 0}y(zl,Ok);function Al(b){var c=!1;if(\"mousewheel\"==b.type){var c=b.map,d=b.a;this.l&&(this.a=b.coordinate);this.f+=d.C;void 0===this.j&&(this.j=Date.now());d=Math.max(80-(Date.now()-this.j),0);ba.clearTimeout(this.i);this.i=ba.setTimeout(ra(this.A,this,c),d);b.preventDefault();c=!0}return!c}\nzl.prototype.A=function(b){var c=Sa(this.f,-1,1),d=b.aa();b.render();Qk(b,d,-c,this.a,this.C);this.f=0;this.a=null;this.i=this.j=void 0};zl.prototype.D=function(b){this.l=b;b||(this.a=null)};function Bl(b){al.call(this,{handleDownEvent:Cl,handleDragEvent:Dl,handleUpEvent:El});b=b||{};this.f=null;this.i=void 0;this.a=!1;this.l=0;this.D=void 0!==b.threshold?b.threshold:.3;this.A=void 0!==b.duration?b.duration:250}y(Bl,al);\nfunction Dl(b){var c=0,d=this.j[0],e=this.j[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.i&&(c=d-this.i,this.l+=c,!this.a&&Math.abs(this.l)>this.D&&(this.a=!0));this.i=d;b=b.map;d=fh(b.a);e=cl(this.j);e[0]-=d.x;e[1]-=d.y;this.f=b.Fa(e);this.a&&(d=b.aa(),e=d.Ea(),b.render(),Pk(b,d,e+c,this.f))}function El(b){if(2>this.j.length){b=b.map;var c=b.aa();Tf(c,-1);if(this.a){var d=c.Ea(),e=this.f,f=this.A,d=c.constrainRotation(d,0);Pk(b,c,d,e,f)}return!1}return!0}\nfunction Cl(b){return 2<=this.j.length?(b=b.map,this.f=null,this.i=void 0,this.a=!1,this.l=0,this.C||Tf(b.aa(),1),b.render(),!0):!1}Bl.prototype.xc=te;function Fl(b){al.call(this,{handleDownEvent:Gl,handleDragEvent:Hl,handleUpEvent:Il});b=b?b:{};this.f=null;this.l=void 0!==b.duration?b.duration:400;this.a=void 0;this.i=1}y(Fl,al);function Hl(b){var c=1,d=this.j[0],e=this.j[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.i=c);b=b.map;var f=b.aa(),d=f.$(),e=fh(b.a),g=cl(this.j);g[0]-=e.x;g[1]-=e.y;this.f=b.Fa(g);b.render();Rk(b,f,d*c,this.f)}\nfunction Il(b){if(2>this.j.length){b=b.map;var c=b.aa();Tf(c,-1);var d=c.$(),e=this.f,f=this.l,d=c.constrainResolution(d,0,this.i-1);Rk(b,c,d,e,f);return!1}return!0}function Gl(b){return 2<=this.j.length?(b=b.map,this.f=null,this.a=void 0,this.i=1,this.C||Tf(b.aa(),1),b.render(),!0):!1}Fl.prototype.xc=te;function Jl(b){b=b?b:{};var c=new og,d=new Mk(-.005,.05,100);(void 0!==b.altShiftDragRotate?b.altShiftDragRotate:1)&&c.push(new hl);(void 0!==b.doubleClickZoom?b.doubleClickZoom:1)&&c.push(new Sk({delta:b.zoomDelta,duration:b.zoomDuration}));(void 0!==b.dragPan?b.dragPan:1)&&c.push(new dl({kinetic:d}));(void 0!==b.pinchRotate?b.pinchRotate:1)&&c.push(new Bl);(void 0!==b.pinchZoom?b.pinchZoom:1)&&c.push(new Fl({duration:b.zoomDuration}));if(void 0!==b.keyboard?b.keyboard:1)c.push(new vl),c.push(new xl({delta:b.zoomDelta,\nduration:b.zoomDuration}));(void 0!==b.mouseWheelZoom?b.mouseWheelZoom:1)&&c.push(new zl({duration:b.zoomDuration}));(void 0!==b.shiftDragZoom?b.shiftDragZoom:1)&&c.push(new ul({duration:b.zoomDuration}));return c};function Kl(b){var c=b||{};b=Ub(c);delete b.layers;c=c.layers;ak.call(this,b);this.b=[];this.a={};C(this,kd(\"layers\"),this.Fk,!1,this);c?ga(c)&&(c=new og(c.slice())):c=new og;this.gh(c)}y(Kl,ak);l=Kl.prototype;l.he=function(){this.qb()&&this.s()};\nl.Fk=function(){this.b.forEach(Zc);this.b.length=0;var b=this.Pc();this.b.push(C(b,\"add\",this.Ek,!1,this),C(b,\"remove\",this.Gk,!1,this));Ib(this.a,function(b){b.forEach(Zc)});Rb(this.a);var b=b.a,c,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[w(e).toString()]=[C(e,\"propertychange\",this.he,!1,this),C(e,\"change\",this.he,!1,this)];this.s()};l.Ek=function(b){b=b.element;var c=w(b).toString();this.a[c]=[C(b,\"propertychange\",this.he,!1,this),C(b,\"change\",this.he,!1,this)];this.s()};\nl.Gk=function(b){b=w(b.element).toString();this.a[b].forEach(Zc);delete this.a[b];this.s()};l.Pc=function(){return this.get(\"layers\")};l.gh=function(b){this.set(\"layers\",b)};\nl.nf=function(b){var c=void 0!==b?b:[],d=c.length;this.Pc().forEach(function(b){b.nf(c)});b=bk(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?oe(f.extent,b.extent):b.extent);return c};l.of=function(){return\"ready\"};function Ll(b){De.call(this,{code:b,units:\"m\",extent:Ml,global:!0,worldExtent:Nl})}y(Ll,De);Ll.prototype.getPointResolution=function(b,c){return b/Ta(c[1]/6378137)};var Ol=6378137*Math.PI,Ml=[-Ol,-Ol,Ol,Ol],Nl=[-180,-85,180,85],Qe=\"EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857\".split(\" \").map(function(b){return new Ll(b)});\nfunction Re(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function Se(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};function Pl(b,c){De.call(this,{code:b,units:\"degrees\",extent:Ql,axisOrientation:c,global:!0,worldExtent:Ql})}y(Pl,De);Pl.prototype.getPointResolution=function(b){return b};\nvar Ql=[-180,-90,180,90],Te=[new Pl(\"CRS:84\"),new Pl(\"EPSG:4326\",\"neu\"),new Pl(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new Pl(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new Pl(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new Pl(\"urn:ogc:def:crs:OGC:2:84\"),new Pl(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new Pl(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function Rl(){Ge(Qe);Ge(Te);Pe()};function Sl(b){ek.call(this,b?b:{})}y(Sl,ek);function F(b){b=b?b:{};var c=Ub(b);delete c.preload;delete c.useInterimTilesOnError;ek.call(this,c);this.f(void 0!==b.preload?b.preload:0);this.g(void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}y(F,ek);F.prototype.a=function(){return this.get(\"preload\")};F.prototype.f=function(b){this.set(\"preload\",b)};F.prototype.b=function(){return this.get(\"useInterimTilesOnError\")};F.prototype.g=function(b){this.set(\"useInterimTilesOnError\",b)};var Tl=[0,0,0,1],Ul=[],Vl=[0,0,0,1];function Wl(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.c=void 0}Wl.prototype.b=function(){return this.a};Wl.prototype.f=function(b){this.a=b;this.c=void 0};Wl.prototype.Ib=function(){void 0===this.c&&(this.c=\"f\"+(this.a?vg(this.a):\"-\"));return this.c};function Xl(){this.c=-1};function Yl(){this.c=-1;this.c=64;this.a=Array(4);this.g=Array(this.c);this.f=this.b=0;this.reset()}y(Yl,Xl);Yl.prototype.reset=function(){this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.f=this.b=0};\nfunction Zl(b,c,d){d||(d=0);var e=Array(16);if(ia(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^\nc))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+\n(d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|\nh>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|\nh>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295|\nh>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^\nc^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295;\ng=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+\n(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;\nd=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}\nfunction $l(b,c){var d;ca(d)||(d=c.length);for(var e=d-b.c,f=b.g,g=b.b,h=0;h<d;){if(0==g)for(;h<=e;)Zl(b,c,h),h+=b.c;if(ia(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.c){Zl(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.c){Zl(b,f);g=0;break}}b.b=g;b.f+=d};function am(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.f=b.lineCap;this.b=void 0!==b.lineDash?b.lineDash:null;this.g=b.lineJoin;this.j=b.miterLimit;this.c=b.width;this.i=void 0}l=am.prototype;l.mn=function(){return this.a};l.Qj=function(){return this.f};l.nn=function(){return this.b};l.Rj=function(){return this.g};l.Wj=function(){return this.j};l.pn=function(){return this.c};l.qn=function(b){this.a=b;this.i=void 0};l.Oo=function(b){this.f=b;this.i=void 0};\nl.rn=function(b){this.b=b;this.i=void 0};l.Po=function(b){this.g=b;this.i=void 0};l.Qo=function(b){this.j=b;this.i=void 0};l.Uo=function(b){this.c=b;this.i=void 0};\nl.Ib=function(){if(void 0===this.i){var b=\"s\"+(this.a?vg(this.a):\"-\")+\",\"+(void 0!==this.f?this.f.toString():\"-\")+\",\"+(this.b?this.b.toString():\"-\")+\",\"+(void 0!==this.g?this.g:\"-\")+\",\"+(void 0!==this.j?this.j.toString():\"-\")+\",\"+(void 0!==this.c?this.c.toString():\"-\"),c=new Yl;$l(c,b);b=Array((56>c.b?c.c:2*c.c)-c.b);b[0]=128;for(var d=1;d<b.length-8;++d)b[d]=0;for(var e=8*c.f,d=b.length-8;d<b.length;++d)b[d]=e&255,e/=256;$l(c,b);b=Array(16);for(d=e=0;4>d;++d)for(var f=0;32>f;f+=8)b[e++]=c.a[d]>>>\nf&255;if(8192>=b.length)c=String.fromCharCode.apply(null,b);else for(c=\"\",d=0;d<b.length;d+=8192)e=nb(b,d,d+8192),c+=String.fromCharCode.apply(null,e);this.i=c}return this.i};function bm(b){b=b||{};this.j=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.c=void 0!==b.stroke?b.stroke:null;this.b=b.radius;this.C=[0,0];this.B=this.ia=this.l=null;var c=b.atlasManager,d,e=null,f,g=0;this.c&&(f=vg(this.c.a),g=this.c.c,void 0===g&&(g=1),e=this.c.b,Yi||(e=null));var h=2*(this.b+g)+1;f={strokeStyle:f,Hd:g,size:h,lineDash:e};void 0===c?(this.a=Kg(\"CANVAS\"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext(\"2d\"),this.sh(f,c,0,0),this.f?this.j=this.a:(c=\nthis.j=Kg(\"CANVAS\"),c.height=f.size,c.width=f.size,c=c.getContext(\"2d\"),this.rh(f,c,0,0))):(h=Math.round(h),(e=!this.f)&&(d=ra(this.rh,this,f)),g=this.Ib(),f=c.add(g,h,h,ra(this.sh,this,f),d),this.a=f.image,this.C=[f.offsetX,f.offsetY],d=f.image.width,this.j=e?f.Mg:this.a);this.l=[h/2,h/2];this.ia=[h,h];this.B=[d,d];vk.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}y(bm,vk);l=bm.prototype;l.Xb=function(){return this.l};l.cn=function(){return this.f};\nl.ze=function(){return this.j};l.fc=function(){return this.a};l.Bd=function(){return 2};l.qd=function(){return this.B};l.Ca=function(){return this.C};l.dn=function(){return this.b};l.Bb=function(){return this.ia};l.en=function(){return this.c};l.sf=wa;l.load=wa;l.Wf=wa;\nl.sh=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.b,0,2*Math.PI,!0);this.f&&(c.fillStyle=vg(this.f.a),c.fill());this.c&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Hd,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};\nl.rh=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.b,0,2*Math.PI,!0);c.fillStyle=vg(Tl);c.fill();this.c&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Hd,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};l.Ib=function(){var b=this.c?this.c.Ib():\"-\",c=this.f?this.f.Ib():\"-\";this.g&&b==this.g[1]&&c==this.g[2]&&this.b==this.g[3]||(this.g=[\"c\"+b+c+(void 0!==this.b?this.b.toString():\"-\"),b,c,this.b]);return this.g[0]};function cm(b){b=b||{};this.i=null;this.g=dm;void 0!==b.geometry&&this.vh(b.geometry);this.j=void 0!==b.fill?b.fill:null;this.b=void 0!==b.image?b.image:null;this.f=void 0!==b.stroke?b.stroke:null;this.c=void 0!==b.text?b.text:null;this.a=b.zIndex}l=cm.prototype;l.W=function(){return this.i};l.Lj=function(){return this.g};l.sn=function(){return this.j};l.tn=function(){return this.b};l.vn=function(){return this.f};l.wn=function(){return this.c};l.xn=function(){return this.a};\nl.vh=function(b){ka(b)?this.g=b:ia(b)?this.g=function(c){return c.get(b)}:b?void 0!==b&&(this.g=function(){return b}):this.g=dm;this.i=b};l.yn=function(b){this.a=b};function em(b){if(!ka(b)){var c;c=ga(b)?b:[b];b=function(){return c}}return b}var fm=null;function gm(){if(!fm){var b=new Wl({color:\"rgba(255,255,255,0.4)\"}),c=new am({color:\"#3399CC\",width:1.25});fm=[new cm({image:new bm({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return fm}\nfunction hm(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new cm({fill:new Wl({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new cm({stroke:new am({color:c,width:5})}),new cm({stroke:new am({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new cm({image:new bm({radius:6,fill:new Wl({color:d}),stroke:new am({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,\nb.Point);return b}function dm(b){return b.W()};function H(b){b=b?b:{};var c=Ub(b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;ek.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.C=null;this.b=void 0;this.f(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.l=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}y(H,ek);function im(b){return b.get(\"renderOrder\")}H.prototype.D=function(){return this.C};H.prototype.G=function(){return this.b};\nH.prototype.f=function(b){this.C=void 0!==b?b:gm;this.b=null===b?void 0:em(this.C);this.s()};function J(b){b=b?b:{};var c=Ub(b);delete c.preload;delete c.useInterimTilesOnError;H.call(this,c);this.T(b.preload?b.preload:0);this.Z(b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}y(J,H);J.prototype.g=function(){return this.get(\"preload\")};J.prototype.U=function(){return this.get(\"useInterimTilesOnError\")};J.prototype.T=function(b){this.set(\"preload\",b)};J.prototype.Z=function(b){this.set(\"useInterimTilesOnError\",b)};function jm(b,c,d,e,f){this.C={};this.b=b;this.G=c;this.g=d;this.oa=e;this.Xc=f;this.j=this.a=this.c=this.va=this.eb=this.ga=null;this.xa=this.pa=this.A=this.T=this.U=this.S=0;this.fb=!1;this.i=this.Cb=0;this.Db=!1;this.Z=0;this.f=\"\";this.B=this.ia=this.Ac=this.Nd=0;this.ea=this.u=this.l=null;this.D=[];this.Bc=Dd()}\nfunction km(b,c,d){if(b.j){c=cf(c,0,d,2,b.oa,b.D);d=b.b;var e=b.Bc,f=d.globalAlpha;1!=b.A&&(d.globalAlpha=f*b.A);var g=b.Cb;b.fb&&(g+=b.Xc);var h,k;h=0;for(k=c.length;h<k;h+=2){var m=c[h]-b.S,n=c[h+1]-b.U;b.Db&&(m=m+.5|0,n=n+.5|0);if(0!==g||1!=b.i){var p=m+b.S,q=n+b.U;ik(e,p,q,b.i,b.i,g,-p,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.j,b.pa,b.xa,b.Z,b.T,m,n,b.Z,b.T)}0===g&&1==b.i||d.setTransform(1,0,0,1,0,0);1!=b.A&&(d.globalAlpha=f)}}\nfunction lm(b,c,d,e){var f=0;if(b.ea&&\"\"!==b.f){b.l&&mm(b,b.l);b.u&&nm(b,b.u);var g=b.ea,h=b.b,k=b.va;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.va={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=cf(c,f,d,e,b.oa,b.D);for(g=b.b;f<d;f+=e){h=c[f]+b.Nd;k=c[f+1]+b.Ac;if(0!==\nb.ia||1!=b.B){var m=ik(b.Bc,h,k,b.B,b.B,b.ia,-h,-k);g.setTransform(m[0],m[1],m[4],m[5],m[12],m[13])}b.u&&g.strokeText(b.f,h,k);b.l&&g.fillText(b.f,h,k)}0===b.ia&&1==b.B||g.setTransform(1,0,0,1,0,0)}}function om(b,c,d,e,f,g){var h=b.b;b=cf(c,d,e,f,b.oa,b.D);h.moveTo(b[0],b[1]);for(c=2;c<b.length;c+=2)h.lineTo(b[c],b[c+1]);g&&h.lineTo(b[0],b[1]);return e}function qm(b,c,d,e,f){var g=b.b,h,k;h=0;for(k=e.length;h<k;++h)d=om(b,c,d,e[h],f,!0),g.closePath();return d}l=jm.prototype;\nl.ld=function(b,c){var d=b.toString(),e=this.C[d];void 0!==e?e.push(c):this.C[d]=[c]};l.Fc=function(b){if(pe(this.g,b.J())){if(this.c||this.a){this.c&&mm(this,this.c);this.a&&nm(this,this.a);var c;c=this.oa;var d=this.D,e=b.ja();if(e){var f=b.ra();c=cf(e,0,e.length,f,c,d)}else c=null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.b;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.c&&e.fill();this.a&&e.stroke()}\"\"!==this.f&&lm(this,b.vd(),2,2)}};\nl.hf=function(b,c){var d=(0,c.g)(b);if(d&&pe(this.g,d.J())){var e=c.a;void 0===e&&(e=0);this.ld(e,function(b){b.$a(c.j,c.f);b.vb(c.b);b.ab(c.c);rm[d.V()].call(b,d,null)})}};l.Xd=function(b,c){var d=b.f,e,f;e=0;for(f=d.length;e<f;++e){var g=d[e];rm[g.V()].call(this,g,c)}};l.Gb=function(b){var c=b.ja();b=b.ra();this.j&&km(this,c,c.length);\"\"!==this.f&&lm(this,c,c.length,b)};l.Fb=function(b){var c=b.ja();b=b.ra();this.j&&km(this,c,c.length);\"\"!==this.f&&lm(this,c,c.length,b)};\nl.Wb=function(b){if(pe(this.g,b.J())){if(this.a){nm(this,this.a);var c=this.b,d=b.ja();c.beginPath();om(this,d,0,d.length,b.ra(),!1);c.stroke()}\"\"!==this.f&&(b=sm(b),lm(this,b,2,2))}};l.Gc=function(b){var c=b.J();if(pe(this.g,c)){if(this.a){nm(this,this.a);var c=this.b,d=b.ja(),e=0,f=b.Ab(),g=b.ra();c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=om(this,d,e,f[h],g,!1);c.stroke()}\"\"!==this.f&&(b=tm(b),lm(this,b,b.length,2))}};\nl.Ic=function(b){if(pe(this.g,b.J())){if(this.a||this.c){this.c&&mm(this,this.c);this.a&&nm(this,this.a);var c=this.b;c.beginPath();qm(this,b.ac(),0,b.Ab(),b.ra());this.c&&c.fill();this.a&&c.stroke()}\"\"!==this.f&&(b=Jf(b),lm(this,b,2,2))}};\nl.Hc=function(b){if(pe(this.g,b.J())){if(this.a||this.c){this.c&&mm(this,this.c);this.a&&nm(this,this.a);var c=this.b,d=um(b),e=0,f=b.g,g=b.ra(),h,k;h=0;for(k=f.length;h<k;++h){var m=f[h];c.beginPath();e=qm(this,d,e,m,g);this.c&&c.fill();this.a&&c.stroke()}}\"\"!==this.f&&(b=vm(b),lm(this,b,b.length,2))}};function wm(b){var c=Object.keys(b.C).map(Number);ob(c);var d,e,f,g,h;d=0;for(e=c.length;d<e;++d)for(f=b.C[c[d].toString()],g=0,h=f.length;g<h;++g)f[g](b)}\nfunction mm(b,c){var d=b.b,e=b.ga;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.ga={fillStyle:c.fillStyle})}\nfunction nm(b,c){var d=b.b,e=b.eb;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Yi&&!sb(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Yi&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=\nc.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.eb={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}\nl.$a=function(b,c){if(b){var d=b.a;this.c={fillStyle:vg(d?d:Tl)}}else this.c=null;if(c){var d=c.a,e=c.f,f=c.b,g=c.g,h=c.c,k=c.j;this.a={lineCap:void 0!==e?e:\"round\",lineDash:f?f:Ul,lineJoin:void 0!==g?g:\"round\",lineWidth:this.G*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vg(d?d:Vl)}}else this.a=null};\nl.vb=function(b){if(b){var c=b.Xb(),d=b.fc(1),e=b.Ca(),f=b.Bb();this.S=c[0];this.U=c[1];this.T=f[1];this.j=d;this.A=b.A;this.pa=e[0];this.xa=e[1];this.fb=b.D;this.Cb=b.u;this.i=b.i;this.Db=b.G;this.Z=f[0]}else this.j=null};\nl.ab=function(b){if(b){var c=b.a;c?(c=c.a,this.l={fillStyle:vg(c?c:Tl)}):this.l=null;var d=b.l;if(d){var c=d.a,e=d.f,f=d.b,g=d.g,h=d.c,d=d.j;this.u={lineCap:void 0!==e?e:\"round\",lineDash:f?f:Ul,lineJoin:void 0!==g?g:\"round\",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vg(c?c:Vl)}}else this.u=null;var c=b.f,e=b.g,f=b.j,g=b.i,h=b.c,d=b.b,k=b.B;b=b.u;this.ea={font:void 0!==c?c:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==b?b:\"middle\"};this.f=void 0!==d?d:\n\"\";this.Nd=void 0!==e?this.G*e:0;this.Ac=void 0!==f?this.G*f:0;this.ia=void 0!==g?g:0;this.B=this.G*(void 0!==h?h:1)}else this.f=\"\"};var rm={Point:jm.prototype.Gb,LineString:jm.prototype.Wb,Polygon:jm.prototype.Ic,MultiPoint:jm.prototype.Fb,MultiLineString:jm.prototype.Gc,MultiPolygon:jm.prototype.Hc,GeometryCollection:jm.prototype.Xd,Circle:jm.prototype.Fc};function xm(b){lk.call(this,b);this.S=Dd()}y(xm,lk);\nxm.prototype.u=function(b,c,d){ym(this,\"precompose\",d,b,void 0);var e=this.yd();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=he(f),m=ge(f),n=fe(f),f=ee(f);kk(b.coordinateToPixelMatrix,k,k);kk(b.coordinateToPixelMatrix,m,m);kk(b.coordinateToPixelMatrix,n,n);kk(b.coordinateToPixelMatrix,f,f);d.save();d.beginPath();d.moveTo(k[0]*h,k[1]*h);d.lineTo(m[0]*h,m[1]*h);d.lineTo(n[0]*h,n[1]*h);d.lineTo(f[0]*h,f[1]*h);d.clip()}h=this.mf();k=d.globalAlpha;d.globalAlpha=c.opacity;0===b.viewState.rotation?\nd.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5])):(d.setTransform(h[0],h[1],h[4],h[5],h[12],h[13]),d.drawImage(e,0,0),d.setTransform(1,0,0,1,0,0));d.globalAlpha=k;g&&d.restore()}ym(this,\"postcompose\",d,b,void 0)};function ym(b,c,d,e,f){var g=b.a;ed(g,c)&&(b=void 0!==f?f:zm(b,e,0),b=new jm(d,e.pixelRatio,e.extent,b,e.viewState.rotation),g.o(new dk(c,g,b,e,d,null)),wm(b))}\nfunction zm(b,c,d){var e=c.viewState,f=c.pixelRatio;return ik(b.S,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])}function Am(b,c){var d=[0,0];kk(c,b,d);return d}\nvar Bm=function(){var b=null,c=null;return function(d){if(!b){b=Pi(1,1);c=b.createImageData(1,1);var e=c.data;e[0]=42;e[1]=84;e[2]=126;e[3]=255}var e=b.canvas,f=d[0]<=e.width&&d[1]<=e.height;f||(e.width=d[0],e.height=d[1],e=d[0]-1,d=d[1]-1,b.putImageData(c,e,d),d=b.getImageData(e,d,1,1),f=sb(c.data,d.data));return f}}();var Cm=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function Dm(b,c,d){this.va=b;this.Z=c;this.f=null;this.g=0;this.resolution=d;this.U=this.S=null;this.c=[];this.coordinates=[];this.ga=Dd();this.a=[];this.ea=[];this.eb=Dd()}y(Dm,ck);\nfunction Em(b,c,d,e,f,g){var h=b.coordinates.length,k=b.kf(),m=[c[d],c[d+1]],n=[NaN,NaN],p=!0,q,r,t;for(q=d+f;q<e;q+=f)n[0]=c[q],n[1]=c[q+1],t=Yd(k,n),t!==r?(p&&(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1]),b.coordinates[h++]=n[0],b.coordinates[h++]=n[1],p=!1):1===t?(b.coordinates[h++]=n[0],b.coordinates[h++]=n[1],p=!1):p=!0,m[0]=n[0],m[1]=n[1],r=t;q===d+f&&(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}\nfunction Fm(b,c){b.S=[0,c,0];b.c.push(b.S);b.U=[0,c,0];b.a.push(b.U)}\nfunction Gm(b,c,d,e,f,g,h,k,m){var n;jk(e,b.ga)?n=b.ea:(n=cf(b.coordinates,0,b.coordinates.length,2,e,b.ea),Gd(b.ga,e));e=!Qb(g);var p=0,q=h.length,r=0,t;b=b.eb;for(var x,z,B,A;p<q;){var v=h[p],O,K,I,G;switch(v[0]){case 0:r=v[1];e&&g[w(r).toString()]||!r.W()?p=v[2]:void 0===m||pe(m,r.W().J())?++p:p=v[2];break;case 1:c.beginPath();++p;break;case 2:r=v[1];t=n[r];v=n[r+1];G=n[r+2]-t;r=n[r+3]-v;c.arc(t,v,Math.sqrt(G*G+r*r),0,2*Math.PI,!0);++p;break;case 3:c.closePath();++p;break;case 4:r=v[1];t=v[2];\nO=v[3];I=v[4]*d;var la=v[5]*d,Ea=v[6];K=v[7];var L=v[8],za=v[9];B=v[11];A=v[12];var Ra=v[13],Ka=v[14];for(v[10]&&(B+=f);r<t;r+=2){v=n[r]-I;G=n[r+1]-la;Ra&&(v=v+.5|0,G=G+.5|0);if(1!=A||0!==B){var kb=v+I,cb=G+la;ik(b,kb,cb,A,A,B,-kb,-cb);c.setTransform(b[0],b[1],b[4],b[5],b[12],b[13])}kb=c.globalAlpha;1!=K&&(c.globalAlpha=kb*K);c.drawImage(O,L,za,Ka,Ea,v,G,Ka*d,Ea*d);1!=K&&(c.globalAlpha=kb);1==A&&0===B||c.setTransform(1,0,0,1,0,0)}++p;break;case 5:r=v[1];t=v[2];I=v[3];la=v[4]*d;Ea=v[5]*d;B=v[6];A=\nv[7]*d;O=v[8];for(K=v[9];r<t;r+=2){v=n[r]+la;G=n[r+1]+Ea;if(1!=A||0!==B)ik(b,v,G,A,A,B,-v,-G),c.setTransform(b[0],b[1],b[4],b[5],b[12],b[13]);K&&c.strokeText(I,v,G);O&&c.fillText(I,v,G);1==A&&0===B||c.setTransform(1,0,0,1,0,0)}++p;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;++p;break;case 7:c.fill();++p;break;case 8:r=v[1];t=v[2];v=n[r];G=n[r+1];B=v+.5|0;A=G+.5|0;if(B!==x||A!==z)c.moveTo(v,G),x=B,z=A;for(r+=2;r<t;r+=2)if(v=n[r],G=n[r+1],B=v+.5|0,A=G+.5|0,B!==x||A!==z)c.lineTo(v,G),x=B,z=\nA;++p;break;case 9:c.fillStyle=v[1];++p;break;case 10:x=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=x?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Yi&&c.setLineDash(v[6]);z=x=NaN;++p;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++p;break;case 12:c.stroke();++p;break;default:++p}}}\nfunction Hm(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function Im(b,c){b.S[2]=b.c.length;b.S=null;b.U[2]=b.a.length;b.U=null;var d=[6,c];b.c.push(d);b.a.push(d)}Dm.prototype.ve=wa;Dm.prototype.kf=function(){return this.Z};function Jm(b,c,d){Dm.call(this,b,c,d);this.l=this.T=null;this.oa=this.ia=this.G=this.D=this.C=this.A=this.u=this.B=this.i=this.j=this.b=void 0}\ny(Jm,Dm);Jm.prototype.Gb=function(b,c){if(this.l){Fm(this,c);var d=b.ja(),e=b.ra(),f=this.coordinates.length,d=Em(this,d,0,d.length,e,!1);this.c.push([4,f,d,this.l,this.b,this.j,this.i,this.B,this.u,this.A,this.C,this.D,this.G,this.ia,this.oa]);this.a.push([4,f,d,this.T,this.b,this.j,this.i,this.B,this.u,this.A,this.C,this.D,this.G,this.ia,this.oa]);Im(this,c)}};\nJm.prototype.Fb=function(b,c){if(this.l){Fm(this,c);var d=b.ja(),e=b.ra(),f=this.coordinates.length,d=Em(this,d,0,d.length,e,!1);this.c.push([4,f,d,this.l,this.b,this.j,this.i,this.B,this.u,this.A,this.C,this.D,this.G,this.ia,this.oa]);this.a.push([4,f,d,this.T,this.b,this.j,this.i,this.B,this.u,this.A,this.C,this.D,this.G,this.ia,this.oa]);Im(this,c)}};Jm.prototype.ve=function(){Hm(this);this.j=this.b=void 0;this.l=this.T=null;this.oa=this.ia=this.D=this.C=this.A=this.u=this.B=this.G=this.i=void 0};\nJm.prototype.vb=function(b){var c=b.Xb(),d=b.Bb(),e=b.ze(1),f=b.fc(1),g=b.Ca();this.b=c[0];this.j=c[1];this.T=e;this.l=f;this.i=d[1];this.B=b.A;this.u=g[0];this.A=g[1];this.C=b.D;this.D=b.u;this.G=b.i;this.ia=b.G;this.oa=d[0]};function Km(b,c,d){Dm.call(this,b,c,d);this.b={hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,rf:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}y(Km,Dm);\nfunction Lm(b,c,d,e,f){var g=b.coordinates.length;c=Em(b,c,d,e,f,!1);g=[8,g,c];b.c.push(g);b.a.push(g);return e}l=Km.prototype;l.kf=function(){this.f||(this.f=Td(this.Z),0<this.g&&Sd(this.f,this.resolution*(this.g+1)/2,this.f));return this.f};\nfunction Mm(b){var c=b.b,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.hd==d&&c.cd==e&&sb(c.dd,f)&&c.ed==g&&c.fd==h&&c.gd==k||(c.rf!=b.coordinates.length&&(b.c.push([12]),c.rf=b.coordinates.length),b.c.push([10,d,h,e,g,k,f],[1]),c.hd=d,c.cd=e,c.dd=f,c.ed=g,c.fd=h,c.gd=k)}\nl.Wb=function(b,c){var d=this.b,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(Mm(this),Fm(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.ja(),e=b.ra(),Lm(this,d,0,d.length,e),this.a.push([12]),Im(this,c))};\nl.Gc=function(b,c){var d=this.b,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){Mm(this);Fm(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.Ab(),e=b.ja(),f=b.ra(),g=0,h,k;h=0;for(k=d.length;h<k;++h)g=Lm(this,e,g,d[h],f);this.a.push([12]);Im(this,c)}};l.ve=function(){this.b.rf!=this.coordinates.length&&this.c.push([12]);Hm(this);this.b=null};\nl.$a=function(b,c){var d=c.a;this.b.strokeStyle=vg(d?d:Vl);d=c.f;this.b.lineCap=void 0!==d?d:\"round\";d=c.b;this.b.lineDash=d?d:Ul;d=c.g;this.b.lineJoin=void 0!==d?d:\"round\";d=c.c;this.b.lineWidth=void 0!==d?d:1;d=c.j;this.b.miterLimit=void 0!==d?d:10;this.b.lineWidth>this.g&&(this.g=this.b.lineWidth,this.f=null)};\nfunction Nm(b,c,d){Dm.call(this,b,c,d);this.b={pg:void 0,hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}y(Nm,Dm);\nfunction Om(b,c,d,e,f){var g=b.b,h=[1];b.c.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var m=e[h],n=b.coordinates.length;d=Em(b,c,d,m,f,!0);d=[8,n,d];n=[3];b.c.push(d,n);b.a.push(d,n);d=m}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.c.push(c);void 0!==g.strokeStyle&&(g=[12],b.c.push(g),b.a.push(g));return d}l=Nm.prototype;\nl.Fc=function(b,c){var d=this.b,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){Pm(this);Fm(this,c);this.a.push([9,vg(Tl)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.ja(),g=b.ra(),e=this.coordinates.length;Em(this,f,0,f.length,g,!1);f=[1];e=[2,e];this.c.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.c.push(e);void 0!==d.strokeStyle&&(d=[12],this.c.push(d),this.a.push(d));Im(this,c)}};\nl.Ic=function(b,c){var d=this.b,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){Pm(this);Fm(this,c);this.a.push([9,vg(Tl)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.Ab(),e=b.ac(),f=b.ra();Om(this,e,0,d,f);Im(this,c)}};\nl.Hc=function(b,c){var d=this.b,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){Pm(this);Fm(this,c);this.a.push([9,vg(Tl)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.g,e=um(b),f=b.ra(),g=0,h,k;h=0;for(k=d.length;h<k;++h)g=Om(this,e,g,d[h],f);Im(this,c)}};l.ve=function(){Hm(this);this.b=null;var b=this.va;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};\nl.kf=function(){this.f||(this.f=Td(this.Z),0<this.g&&Sd(this.f,this.resolution*(this.g+1)/2,this.f));return this.f};\nl.$a=function(b,c){var d=this.b;if(b){var e=b.a;d.fillStyle=vg(e?e:Tl)}else d.fillStyle=void 0;c?(e=c.a,d.strokeStyle=vg(e?e:Vl),e=c.f,d.lineCap=void 0!==e?e:\"round\",e=c.b,d.lineDash=e?e.slice():Ul,e=c.g,d.lineJoin=void 0!==e?e:\"round\",e=c.c,d.lineWidth=void 0!==e?e:1,e=c.j,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.f=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};\nfunction Pm(b){var c=b.b,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,m=c.miterLimit;void 0!==d&&c.pg!=d&&(b.c.push([9,d]),c.pg=c.fillStyle);void 0===e||c.hd==e&&c.cd==f&&c.dd==g&&c.ed==h&&c.fd==k&&c.gd==m||(b.c.push([10,e,k,f,h,m,g]),c.hd=e,c.cd=f,c.dd=g,c.ed=h,c.fd=k,c.gd=m)}function Qm(b,c,d){Dm.call(this,b,c,d);this.ia=this.G=this.D=null;this.l=\"\";this.C=this.A=this.u=this.B=0;this.i=this.j=this.b=null}y(Qm,Dm);\nQm.prototype.Hb=function(b,c,d,e,f,g){if(\"\"!==this.l&&this.i&&(this.b||this.j)){if(this.b){f=this.b;var h=this.D;if(!h||h.fillStyle!=f.fillStyle){var k=[9,f.fillStyle];this.c.push(k);this.a.push(k);h?h.fillStyle=f.fillStyle:this.D={fillStyle:f.fillStyle}}}this.j&&(f=this.j,h=this.G,h&&h.lineCap==f.lineCap&&h.lineDash==f.lineDash&&h.lineJoin==f.lineJoin&&h.lineWidth==f.lineWidth&&h.miterLimit==f.miterLimit&&h.strokeStyle==f.strokeStyle||(k=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,\nf.lineDash,!1],this.c.push(k),this.a.push(k),h?(h.lineCap=f.lineCap,h.lineDash=f.lineDash,h.lineJoin=f.lineJoin,h.lineWidth=f.lineWidth,h.miterLimit=f.miterLimit,h.strokeStyle=f.strokeStyle):this.G={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=this.i;h=this.ia;h&&h.font==f.font&&h.textAlign==f.textAlign&&h.textBaseline==f.textBaseline||(k=[11,f.font,f.textAlign,f.textBaseline],this.c.push(k),this.a.push(k),h?\n(h.font=f.font,h.textAlign=f.textAlign,h.textBaseline=f.textBaseline):this.ia={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});Fm(this,g);f=this.coordinates.length;b=Em(this,b,c,d,e,!1);b=[5,f,b,this.l,this.B,this.u,this.A,this.C,!!this.b,!!this.j];this.c.push(b);this.a.push(b);Im(this,g)}};\nQm.prototype.ab=function(b){if(b){var c=b.a;c?(c=c.a,c=vg(c?c:Tl),this.b?this.b.fillStyle=c:this.b={fillStyle:c}):this.b=null;var d=b.l;if(d){var c=d.a,e=d.f,f=d.b,g=d.g,h=d.c,d=d.j,e=void 0!==e?e:\"round\",f=f?f.slice():Ul,g=void 0!==g?g:\"round\",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vg(c?c:Vl);if(this.j){var k=this.j;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.j={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.j=null;\nvar m=b.f,c=b.g,e=b.j,f=b.i,h=b.c,d=b.b,g=b.B,k=b.u;b=void 0!==m?m:\"10px sans-serif\";g=void 0!==g?g:\"center\";k=void 0!==k?k:\"middle\";this.i?(m=this.i,m.font=b,m.textAlign=g,m.textBaseline=k):this.i={font:b,textAlign:g,textBaseline:k};this.l=void 0!==d?d:\"\";this.B=void 0!==c?c:0;this.u=void 0!==e?e:0;this.A=void 0!==f?f:0;this.C=void 0!==h?h:1}else this.l=\"\"};function Rm(b,c,d,e){this.u=b;this.g=c;this.B=d;this.j=e;this.c={};this.i=Pi(1,1);this.l=Dd()}\nfunction Sm(b){for(var c in b.c){var d=b.c[c],e;for(e in d)d[e].ve()}}Rm.prototype.f=function(b,c,d,e,f){var g=this.l;ik(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.j&&(k=Od(),Pd(k,b),Sd(k,c*this.j,k));return Tm(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};\nRm.prototype.a=function(b,c){var d=void 0!==b?b.toString():\"0\",e=this.c[d];void 0===e&&(e={},this.c[d]=e);d=e[c];void 0===d&&(d=new Um[c](this.u,this.g,this.B),e[c]=d);return d};Rm.prototype.Ka=function(){return Qb(this.c)};\nRm.prototype.b=function(b,c,d,e,f){var g=Object.keys(this.c).map(Number);ob(g);var h=this.g,k=h[0],m=h[1],n=h[2],h=h[3],k=[k,m,k,h,n,h,n,m];cf(k,0,8,2,d,k);b.save();b.beginPath();b.moveTo(k[0],k[1]);b.lineTo(k[2],k[3]);b.lineTo(k[4],k[5]);b.lineTo(k[6],k[7]);b.closePath();b.clip();for(var p,q,k=0,m=g.length;k<m;++k)for(p=this.c[g[k].toString()],n=0,h=Cm.length;n<h;++n)q=p[Cm[n]],void 0!==q&&Gm(q,b,c,d,e,f,q.c,void 0);b.restore()};\nfunction Tm(b,c,d,e,f,g,h){var k=Object.keys(b.c).map(Number);ob(k,function(b,c){return c-b});var m,n,p,q,r;m=0;for(n=k.length;m<n;++m)for(q=b.c[k[m].toString()],p=Cm.length-1;0<=p;--p)if(r=q[Cm[p]],void 0!==r&&(r=Gm(r,c,1,d,e,f,r.a,g,h)))return r}var Um={Image:Jm,LineString:Km,Polygon:Nm,Text:Qm};function Vm(b,c,d,e){this.b=b;this.a=c;this.g=d;this.f=e}l=Vm.prototype;l.get=function(b){return this.f[b]};l.Ab=function(){return this.g};l.J=function(){this.c||(this.c=\"Point\"===this.b?Zd(this.a):$d(this.a,0,this.a.length,2));return this.c};l.ja=Vm.prototype.ac=function(){return this.a};l.W=function(){return this};l.ym=function(){return this.f};l.sd=Vm.prototype.W;l.ra=se(2);l.Qb=wa;l.V=function(){return this.b};function Wm(b,c){return w(b)-w(c)}function Xm(b,c){var d=.5*b/c;return d*d}function Ym(b,c,d,e,f,g){var h=!1,k,m;if(k=d.b)m=k.Bd(),2==m||3==m?k.Wf(f,g):(0==m&&k.load(),k.sf(f,g),h=!0);if(f=(0,d.g)(c))e=f.sd(e),(0,Zm[e.V()])(b,e,d,c);return h}\nvar Zm={Point:function(b,c,d,e){var f=d.b;if(f){if(2!=f.Bd())return;var g=b.a(d.a,\"Image\");g.vb(f);g.Gb(c,e)}if(f=d.c)b=b.a(d.a,\"Text\"),b.ab(f),b.Hb(c.ja(),0,2,2,c,e)},LineString:function(b,c,d,e){var f=d.f;if(f){var g=b.a(d.a,\"LineString\");g.$a(null,f);g.Wb(c,e)}if(f=d.c)b=b.a(d.a,\"Text\"),b.ab(f),b.Hb(sm(c),0,2,2,c,e)},Polygon:function(b,c,d,e){var f=d.j,g=d.f;if(f||g){var h=b.a(d.a,\"Polygon\");h.$a(f,g);h.Ic(c,e)}if(f=d.c)b=b.a(d.a,\"Text\"),b.ab(f),b.Hb(Jf(c),0,2,2,c,e)},MultiPoint:function(b,c,d,\ne){var f=d.b;if(f){if(2!=f.Bd())return;var g=b.a(d.a,\"Image\");g.vb(f);g.Fb(c,e)}if(f=d.c)b=b.a(d.a,\"Text\"),b.ab(f),d=c.ja(),b.Hb(d,0,d.length,c.ra(),c,e)},MultiLineString:function(b,c,d,e){var f=d.f;if(f){var g=b.a(d.a,\"LineString\");g.$a(null,f);g.Gc(c,e)}if(f=d.c)b=b.a(d.a,\"Text\"),b.ab(f),d=tm(c),b.Hb(d,0,d.length,2,c,e)},MultiPolygon:function(b,c,d,e){var f=d.j,g=d.f;if(g||f){var h=b.a(d.a,\"Polygon\");h.$a(f,g);h.Hc(c,e)}if(f=d.c)b=b.a(d.a,\"Text\"),b.ab(f),d=vm(c),b.Hb(d,0,d.length,2,c,e)},GeometryCollection:function(b,\nc,d,e){c=c.f;var f,g;f=0;for(g=c.length;f<g;++f)(0,Zm[c[f].V()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.j,g=d.f;if(f||g){var h=b.a(d.a,\"Polygon\");h.$a(f,g);h.Fc(c,e)}if(f=d.c)b=b.a(d.a,\"Text\"),b.ab(f),b.Hb(c.vd(),0,2,2,c,e)}};function $m(b,c,d,e,f,g){this.g=void 0!==g?g:null;gk.call(this,b,c,d,void 0!==g?0:2,e);this.f=f;this.c=null}y($m,gk);$m.prototype.getError=function(){return this.c};$m.prototype.i=function(b){b?(this.c=b,this.state=3):this.state=2;hk(this)};$m.prototype.load=function(){0==this.state&&(this.state=1,hk(this),this.g(ra(this.i,this)))};$m.prototype.a=function(){return this.f};var an=!((Hb(\"Chrome\")||Hb(\"CriOS\"))&&!Hb(\"Opera\")&&!Hb(\"OPR\")&&!Hb(\"Edge\"))||Hb(\"iPhone\")&&!Hb(\"iPod\")&&!Hb(\"iPad\")||Hb(\"iPad\")||Hb(\"iPod\");function bn(b,c,d,e){var f=$e(d,c,b);d=c.getPointResolution(e,d);c=c.Jc();void 0!==c&&(d*=c);c=b.Jc();void 0!==c&&(d/=c);b=b.getPointResolution(d,f)/d;isFinite(b)&&!isNaN(b)&&0<b&&(d/=b);return d}function cn(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}\nfunction dn(b,c,d,e,f,g,h,k,m,n){var p=Pi(Math.round(d*b),Math.round(d*c));if(0===m.length)return p.canvas;p.scale(d,d);var q=Od();m.forEach(function(b){ce(q,b.extent)});var r=Pi(Math.round(d*ke(q)/e),Math.round(d*le(q)/e));r.scale(d/e,d/e);r.translate(-q[0],q[3]);m.forEach(function(b){r.drawImage(b.image,b.extent[0],-b.extent[3],ke(b.extent),le(b.extent))});var t=he(h);k.f.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],m=c[2][0],n=c[2][1];b=(f[0][0]-t[0])/g;var I=-(f[0][1]-t[1])/\ng,G=(f[1][0]-t[0])/g,la=-(f[1][1]-t[1])/g,Ea=(f[2][0]-t[0])/g,L=-(f[2][1]-t[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,m=m-f,n=n-c;a:{h=[[h,k,0,0,G-b],[m,n,0,0,Ea-b],[0,0,h,k,la-I],[0,0,m,n,L-I]];k=h.length;for(m=0;m<k;m++){for(var n=m,za=Math.abs(h[m][m]),Ra=m+1;Ra<k;Ra++){var Ka=Math.abs(h[Ra][m]);Ka>za&&(za=Ka,n=Ra)}if(0===za){h=null;break a}za=h[n];h[n]=h[m];h[m]=za;for(n=m+1;n<k;n++)for(za=-h[n][m]/h[m][m],Ra=m;Ra<k+1;Ra++)h[n][Ra]=m==Ra?0:h[n][Ra]+za*h[m][Ra]}m=Array(k);for(n=k-1;0<=n;n--)for(m[n]=\nh[n][k]/h[n][n],za=n-1;0<=za;za--)h[za][k]-=h[za][n]*m[n];h=m}h&&(p.save(),p.beginPath(),an?(m=(b+G+Ea)/3,n=(I+la+L)/3,k=cn(m,n,b,I),G=cn(m,n,G,la),Ea=cn(m,n,Ea,L),p.moveTo(k[0],k[1]),p.lineTo(G[0],G[1]),p.lineTo(Ea[0],Ea[1])):(p.moveTo(b,I),p.lineTo(G,la),p.lineTo(Ea,L)),p.closePath(),p.clip(),p.transform(h[0],h[2],h[1],h[3],b,I),p.translate(q[0]-f,q[3]-c),p.scale(e/d,-e/d),p.drawImage(r.canvas,0,0),p.restore())});n&&(p.save(),p.strokeStyle=\"black\",p.lineWidth=1,k.f.forEach(function(b){var c=b.target;\nb=(c[0][0]-t[0])/g;var d=-(c[0][1]-t[1])/g,e=(c[1][0]-t[0])/g,f=-(c[1][1]-t[1])/g,h=(c[2][0]-t[0])/g,c=-(c[2][1]-t[1])/g;p.beginPath();p.moveTo(b,d);p.lineTo(e,f);p.lineTo(h,c);p.closePath();p.stroke()}),p.restore());return p.canvas};function en(b,c,d,e,f){this.b=b;this.g=c;var g={},h=Ye(this.g,this.b);this.c=function(b){var c=b[0]+\"/\"+b[1];g[c]||(g[c]=h(b));return g[c]};this.j=e;this.u=f*f;this.f=[];this.l=!1;this.B=this.b.b&&!!e&&!!this.b.J()&&ke(e)==ke(this.b.J());this.a=this.b.J()?ke(this.b.J()):null;this.i=this.g.J()?ke(this.g.J()):null;b=he(d);c=ge(d);e=fe(d);d=ee(d);f=this.c(b);var k=this.c(c),m=this.c(e),n=this.c(d);fn(this,b,c,e,d,f,k,m,n,10);if(this.l){var p=Infinity;this.f.forEach(function(b){p=Math.min(p,b.source[0][0],\nb.source[1][0],b.source[2][0])});this.f.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-p>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-p>this.a/2&&(c[0][0]-=this.a);c[1][0]-p>this.a/2&&(c[1][0]-=this.a);c[2][0]-p>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}\nfunction fn(b,c,d,e,f,g,h,k,m,n){var p=Nd([g,h,k,m]),q=b.a?ke(p)/b.a:null,r=b.b.b&&.5<q&&1>q,t=!1;if(0<n){if(b.g.f&&b.i)var x=Nd([c,d,e,f]),t=t|.25<ke(x)/b.i;!r&&b.b.f&&q&&(t|=.25<q)}if(t||!b.j||pe(p,b.j)){if(!(t||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(m[0])&&isFinite(m[1])))if(0<n)t=!0;else return;if(0<n&&(t||(q=b.c([(c[0]+e[0])/2,(c[1]+e[1])/2]),p=r?(pd(g[0],b.a)+pd(k[0],b.a))/2-pd(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],\nt=p*p+q*q>b.u),t)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=b.c(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],t=b.c(q),fn(b,c,d,r,q,g,h,p,t,n-1),fn(b,q,r,e,f,t,p,k,m,n-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],p=b.c(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],t=b.c(q),fn(b,c,r,q,f,g,p,t,m,n-1),fn(b,r,d,e,q,p,h,k,t,n-1));return}if(r){if(!b.B)return;b.l=!0}b.f.push({source:[g,k,m],target:[c,e,f]});b.f.push({source:[g,h,k],target:[c,d,e]})}}\nfunction gn(b){var c=Od();b.f.forEach(function(b){b=b.source;Pd(c,b[0]);Pd(c,b[1]);Pd(c,b[2])});return c};function hn(b,c,d,e,f,g){this.C=c;this.A=b.J();var h=c.J(),k=h?oe(d,h):d,h=bn(b,c,me(k),e);this.B=new en(b,c,k,this.A,.5*h);this.i=e;this.g=d;b=gn(this.B);this.u=(this.c=g(b,h,f))?this.c.b:1;this.f=this.l=null;f=2;g=[];this.c&&(f=0,g=this.c.j);gk.call(this,d,e,this.u,f,g)}y(hn,gk);hn.prototype.X=function(){1==this.state&&(Zc(this.f),this.f=null);hn.da.X.call(this)};hn.prototype.a=function(){return this.l};\nfunction jn(b){var c=b.c.state;2==c&&(b.l=dn(ke(b.g)/b.i,le(b.g)/b.i,b.u,b.c.$(),0,b.i,b.g,b.B,[{extent:b.c.J(),image:b.c.a()}]));b.state=c;hk(b)}hn.prototype.load=function(){if(0==this.state){this.state=1;hk(this);var b=this.c.state;2==b||3==b?jn(this):(this.f=this.c.Qa(\"change\",function(){var b=this.c.state;if(2==b||3==b)Zc(this.f),this.f=null,jn(this)},!1,this),this.c.load())}};function kn(b){yh.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state});this.G=void 0!==b.resolutions?b.resolutions:null;this.a=null;this.va=0}y(kn,yh);function ln(b,c){if(b.G){var d=wb(b.G,c,0);c=b.G[d]}return c}\nkn.prototype.C=function(b,c,d,e){var f=this.f;if(f&&e&&!Xe(f,e)){if(this.a){if(this.va==this.c&&Xe(this.a.C,e)&&this.a.$()==c&&this.a.b==d&&be(this.a.J(),b))return this.a;this.a.Ec();this.a=null}this.a=new hn(f,e,b,c,d,ra(function(b,c,d){return this.pd(b,c,d,f)},this));this.va=this.c;return this.a}f&&(e=f);return this.pd(b,c,d,e)};kn.prototype.D=function(b){b=b.target;switch(b.state){case 1:this.o(new mn(nn,b));break;case 2:this.o(new mn(on,b));break;case 3:this.o(new mn(pn,b))}};\nfunction qn(b,c){b.a().src=c}function mn(b,c){vc.call(this,b);this.image=c}y(mn,vc);var nn=\"imageloadstart\",on=\"imageloadend\",pn=\"imageloaderror\";function rn(b){kn.call(this,{attributions:b.attributions,logo:b.logo,projection:b.projection,resolutions:b.resolutions,state:void 0!==b.state?b.state:void 0});this.ga=b.canvasFunction;this.Z=null;this.ea=0;this.pa=void 0!==b.ratio?b.ratio:1.5}y(rn,kn);rn.prototype.pd=function(b,c,d,e){c=ln(this,c);var f=this.Z;if(f&&this.ea==this.c&&f.$()==c&&f.b==d&&Xd(f.J(),b))return f;b=b.slice();qe(b,this.pa);(e=this.ga(b,c,d,[ke(b)/c*d,le(b)/c*d],e))&&(f=new $m(b,c,d,this.j,e));this.Z=f;this.ea=this.c;return f};function sn(b){id.call(this);this.wa=void 0;this.a=\"geometry\";this.f=null;this.g=void 0;this.b=null;C(this,kd(this.a),this.ge,!1,this);void 0!==b&&(b instanceof bf||!b?this.La(b):this.I(b))}y(sn,id);l=sn.prototype;l.clone=function(){var b=new sn(this.P());b.vc(this.a);var c=this.W();c&&b.La(c.clone());(c=this.f)&&b.vf(c);return b};l.W=function(){return this.get(this.a)};l.Na=function(){return this.wa};l.Mj=function(){return this.a};l.vl=function(){return this.f};l.Qb=function(){return this.g};\nl.wl=function(){this.s()};l.ge=function(){this.b&&(Zc(this.b),this.b=null);var b=this.W();b&&(this.b=C(b,\"change\",this.wl,!1,this));this.s()};l.La=function(b){this.set(this.a,b)};l.vf=function(b){this.g=(this.f=b)?tn(b):void 0;this.s()};l.ic=function(b){this.wa=b;this.s()};l.vc=function(b){Yc(this,kd(this.a),this.ge,!1,this);this.a=b;C(this,kd(this.a),this.ge,!1,this);this.ge()};function tn(b){if(!ka(b)){var c;c=ga(b)?b:[b];b=function(){return c}}return b};function un(b){b.prototype.then=b.prototype.then;b.prototype.$goog_Thenable=!0}function vn(b){if(!b)return!1;try{return!!b.$goog_Thenable}catch(c){return!1}};function wn(b,c,d){this.f=d;this.b=b;this.g=c;this.c=0;this.a=null}wn.prototype.get=function(){var b;0<this.c?(this.c--,b=this.a,this.a=b.next,b.next=null):b=this.b();return b};function xn(b,c){b.g(c);b.c<b.f&&(b.c++,c.next=b.a,b.a=c)};function yn(){this.c=this.a=null}var An=new wn(function(){return new zn},function(b){b.reset()},100);yn.prototype.add=function(b,c){var d=An.get();d.set(b,c);this.c?this.c.next=d:this.a=d;this.c=d};yn.prototype.remove=function(){var b=null;this.a&&(b=this.a,this.a=this.a.next,this.a||(this.c=null),b.next=null);return b};function zn(){this.next=this.c=this.a=null}zn.prototype.set=function(b,c){this.a=b;this.c=c;this.next=null};zn.prototype.reset=function(){this.next=this.c=this.a=null};function Bn(b,c){Cn||Dn();En||(Cn(),En=!0);Fn.add(b,c)}var Cn;function Dn(){if(ba.Promise&&ba.Promise.resolve){var b=ba.Promise.resolve(void 0);Cn=function(){b.then(Gn)}}else Cn=function(){ni(Gn)}}var En=!1,Fn=new yn;function Gn(){for(var b=null;b=Fn.remove();){try{b.a.call(b.c)}catch(c){mi(c)}xn(An,b)}En=!1};function Hn(b,c){this.a=In;this.i=void 0;this.f=this.c=this.b=null;this.g=this.j=!1;if(b!=da)try{var d=this;b.call(c,function(b){Jn(d,Kn,b)},function(b){Jn(d,Ln,b)})}catch(e){Jn(this,Ln,e)}}var In=0,Kn=2,Ln=3;function Mn(){this.next=this.b=this.c=this.f=this.a=null;this.g=!1}Mn.prototype.reset=function(){this.b=this.c=this.f=this.a=null;this.g=!1};var Nn=new wn(function(){return new Mn},function(b){b.reset()},100);function On(b,c,d){var e=Nn.get();e.f=b;e.c=c;e.b=d;return e}\nHn.prototype.then=function(b,c,d){return Pn(this,ka(b)?b:null,ka(c)?c:null,d)};un(Hn);Hn.prototype.cancel=function(b){this.a==In&&Bn(function(){var c=new Qn(b);Rn(this,c)},this)};function Rn(b,c){if(b.a==In)if(b.b){var d=b.b;if(d.c){for(var e=0,f=null,g=null,h=d.c;h&&(h.g||(e++,h.a==b&&(f=h),!(f&&1<e)));h=h.next)f||(g=h);f&&(d.a==In&&1==e?Rn(d,c):(g?(e=g,e.next==d.f&&(d.f=e),e.next=e.next.next):Sn(d),Tn(d,f,Ln,c)))}b.b=null}else Jn(b,Ln,c)}\nfunction Un(b,c){b.c||b.a!=Kn&&b.a!=Ln||Vn(b);b.f?b.f.next=c:b.c=c;b.f=c}function Pn(b,c,d,e){var f=On(null,null,null);f.a=new Hn(function(b,h){f.f=c?function(d){try{var f=c.call(e,d);b(f)}catch(n){h(n)}}:b;f.c=d?function(c){try{var f=d.call(e,c);!ca(f)&&c instanceof Qn?h(c):b(f)}catch(n){h(n)}}:h});f.a.b=b;Un(b,f);return f.a}Hn.prototype.B=function(b){this.a=In;Jn(this,Kn,b)};Hn.prototype.u=function(b){this.a=In;Jn(this,Ln,b)};\nfunction Jn(b,c,d){if(b.a==In){b==d&&(c=Ln,d=new TypeError(\"Promise cannot resolve to itself\"));b.a=1;var e;a:{var f=d,g=b.B,h=b.u;if(f instanceof Hn)Un(f,On(g||da,h||null,b)),e=!0;else if(vn(f))f.then(g,h,b),e=!0;else{if(ma(f))try{var k=f.then;if(ka(k)){Wn(f,k,g,h,b);e=!0;break a}}catch(m){h.call(b,m);e=!0;break a}e=!1}}e||(b.i=d,b.a=c,b.b=null,Vn(b),c!=Ln||d instanceof Qn||Xn(b,d))}}\nfunction Wn(b,c,d,e,f){function g(b){k||(k=!0,e.call(f,b))}function h(b){k||(k=!0,d.call(f,b))}var k=!1;try{c.call(b,h,g)}catch(m){g(m)}}function Vn(b){b.j||(b.j=!0,Bn(b.l,b))}function Sn(b){var c=null;b.c&&(c=b.c,b.c=c.next,c.next=null);b.c||(b.f=null);return c}Hn.prototype.l=function(){for(var b=null;b=Sn(this);)Tn(this,b,this.a,this.i);this.j=!1};\nfunction Tn(b,c,d,e){if(d==Ln&&c.c&&!c.g)for(;b&&b.g;b=b.b)b.g=!1;if(c.a)c.a.b=null,Yn(c,d,e);else try{c.g?c.f.call(c.b):Yn(c,d,e)}catch(f){Zn.call(null,f)}xn(Nn,c)}function Yn(b,c,d){c==Kn?b.f.call(b.b,d):b.c&&b.c.call(b.b,d)}function Xn(b,c){b.g=!0;Bn(function(){b.g&&Zn.call(null,c)})}var Zn=mi;function Qn(b){xa.call(this,b)}y(Qn,xa);Qn.prototype.name=\"cancel\";function $n(b,c,d){if(ka(b))d&&(b=ra(b,d));else if(b&&\"function\"==typeof b.handleEvent)b=ra(b.handleEvent,b);else throw Error(\"Invalid listener argument\");return 2147483647<c?-1:ba.setTimeout(b,c||0)};var ao=ba.JSON.parse,bo=ba.JSON.stringify;function co(){}co.prototype.a=null;function eo(b){var c;(c=b.a)||(c={},fo(b)&&(c[0]=!0,c[1]=!0),c=b.a=c);return c};var go;function ho(){}y(ho,co);function io(b){return(b=fo(b))?new ActiveXObject(b):new XMLHttpRequest}function fo(b){if(!b.c&&\"undefined\"==typeof XMLHttpRequest&&\"undefined\"!=typeof ActiveXObject){for(var c=[\"MSXML2.XMLHTTP.6.0\",\"MSXML2.XMLHTTP.3.0\",\"MSXML2.XMLHTTP\",\"Microsoft.XMLHTTP\"],d=0;d<c.length;d++){var e=c[d];try{return new ActiveXObject(e),b.c=e}catch(f){}}throw Error(\"Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed\");}return b.c}go=new ho;var jo=/^(?:([^:/?#.]+):)?(?:\\/\\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$/;function ko(b,c){if(b)for(var d=b.split(\"&\"),e=0;e<d.length;e++){var f=d[e].indexOf(\"=\"),g=null,h=null;0<=f?(g=d[e].substring(0,f),h=d[e].substring(f+1)):g=d[e];c(g,h?decodeURIComponent(h.replace(/\\+/g,\" \")):\"\")}}\nfunction lo(b){if(b[1]){var c=b[0],d=c.indexOf(\"#\");0<=d&&(b.push(c.substr(d)),b[0]=c=c.substr(0,d));d=c.indexOf(\"?\");0>d?b[1]=\"?\":d==c.length-1&&(b[1]=void 0)}return b.join(\"\")}function mo(b,c,d){if(ga(c))for(var e=0;e<c.length;e++)mo(b,String(c[e]),d);else null!=c&&d.push(\"&\",b,\"\"===c?\"\":\"=\",encodeURIComponent(String(c)))}function no(b,c){for(var d in c)mo(d,c[d],b);return b};function oo(b){cd.call(this);this.S=new ri;this.B=b||null;this.a=!1;this.l=this.ha=null;this.g=this.U=this.C=\"\";this.c=this.A=this.f=this.u=!1;this.i=0;this.b=null;this.j=po;this.D=this.Z=!1}y(oo,cd);var po=\"\",qo=/^https?$/i,ro=[\"POST\",\"PUT\"];\nfunction so(b,c){if(b.ha)throw Error(\"[goog.net.XhrIo] Object is active with another request=\"+b.C+\"; newUri=\"+c);b.C=c;b.g=\"\";b.U=\"GET\";b.u=!1;b.a=!0;b.ha=b.B?io(b.B):io(go);b.l=b.B?eo(b.B):eo(go);b.ha.onreadystatechange=ra(b.G,b);try{b.A=!0,b.ha.open(\"GET\",String(c),!0),b.A=!1}catch(g){to(b,g);return}var d=b.S.clone(),e=fb(d.O(),uo),f=ba.FormData&&!1;!(0<=$a(ro,\"GET\"))||e||f||d.set(\"Content-Type\",\"application/x-www-form-urlencoded;charset=utf-8\");d.forEach(function(b,c){this.ha.setRequestHeader(c,\nb)},b);b.j&&(b.ha.responseType=b.j);\"withCredentials\"in b.ha&&(b.ha.withCredentials=b.Z);try{vo(b),0<b.i&&(b.D=wo(b.ha),b.D?(b.ha.timeout=b.i,b.ha.ontimeout=ra(b.yc,b)):b.b=$n(b.yc,b.i,b)),b.f=!0,b.ha.send(\"\"),b.f=!1}catch(g){to(b,g)}}function wo(b){return Zb&&jc(9)&&ja(b.timeout)&&ca(b.ontimeout)}function uo(b){return\"content-type\"==b.toLowerCase()}\noo.prototype.yc=function(){\"undefined\"!=typeof aa&&this.ha&&(this.g=\"Timed out after \"+this.i+\"ms, aborting\",this.o(\"timeout\"),this.ha&&this.a&&(this.a=!1,this.c=!0,this.ha.abort(),this.c=!1,this.o(\"complete\"),this.o(\"abort\"),xo(this)))};function to(b,c){b.a=!1;b.ha&&(b.c=!0,b.ha.abort(),b.c=!1);b.g=c;yo(b);xo(b)}function yo(b){b.u||(b.u=!0,b.o(\"complete\"),b.o(\"error\"))}oo.prototype.X=function(){this.ha&&(this.a&&(this.a=!1,this.c=!0,this.ha.abort(),this.c=!1),xo(this,!0));oo.da.X.call(this)};\noo.prototype.G=function(){this.ia||(this.A||this.f||this.c?zo(this):this.T())};oo.prototype.T=function(){zo(this)};function zo(b){if(b.a&&\"undefined\"!=typeof aa&&(!b.l[1]||4!=Ao(b)||2!=Bo(b)))if(b.f&&4==Ao(b))$n(b.G,0,b);else if(b.o(\"readystatechange\"),4==Ao(b)){b.a=!1;try{if(Co(b))b.o(\"complete\"),b.o(\"success\");else{var c;try{c=2<Ao(b)?b.ha.statusText:\"\"}catch(d){c=\"\"}b.g=c+\" [\"+Bo(b)+\"]\";yo(b)}}finally{xo(b)}}}\nfunction xo(b,c){if(b.ha){vo(b);var d=b.ha,e=b.l[0]?da:null;b.ha=null;b.l=null;c||b.o(\"ready\");try{d.onreadystatechange=e}catch(f){}}}function vo(b){b.ha&&b.D&&(b.ha.ontimeout=null);ja(b.b)&&(ba.clearTimeout(b.b),b.b=null)}\nfunction Co(b){var c=Bo(b),d;a:switch(c){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:d=!0;break a;default:d=!1}if(!d){if(c=0===c)b=String(b.C).match(jo)[1]||null,!b&&ba.self&&ba.self.location&&(b=ba.self.location.protocol,b=b.substr(0,b.length-1)),c=!qo.test(b?b.toLowerCase():\"\");d=c}return d}function Ao(b){return b.ha?b.ha.readyState:0}function Bo(b){try{return 2<Ao(b)?b.ha.status:-1}catch(c){return-1}}function Do(b){try{return b.ha?b.ha.responseText:\"\"}catch(c){return\"\"}}\nfunction Eo(b){try{if(!b.ha)return null;if(\"response\"in b.ha)return b.ha.response;switch(b.j){case po:case \"text\":return b.ha.responseText;case \"arraybuffer\":if(\"mozResponseArrayBuffer\"in b.ha)return b.ha.mozResponseArrayBuffer}return null}catch(c){return null}};function Fo(){if(!Zb)return!1;try{return new ActiveXObject(\"MSXML2.DOMDocument\"),!0}catch(b){return!1}}var Go=Zb&&Fo();function Ho(b){var c=b.xml;if(c)return c;if(\"undefined\"!=typeof XMLSerializer)return(new XMLSerializer).serializeToString(b);throw Error(\"Your browser does not support serializing XML documents\");};var Io;a:if(document.implementation&&document.implementation.createDocument)Io=document.implementation.createDocument(\"\",\"\",null);else{if(Go){var Jo=new ActiveXObject(\"MSXML2.DOMDocument\");if(Jo){Jo.resolveExternals=!1;Jo.validateOnParse=!1;try{Jo.setProperty(\"ProhibitDTD\",!0),Jo.setProperty(\"MaxXMLSize\",2048),Jo.setProperty(\"MaxElementDepth\",256)}catch(b){}}if(Jo){Io=Jo;break a}}throw Error(\"Your browser does not support creating new documents\");}var Ko=Io;\nfunction Lo(b,c){return Ko.createElementNS(b,c)}function Mo(b,c){b||(b=\"\");return Ko.createNode(1,c,b)}var No=document.implementation&&document.implementation.createDocument?Lo:Mo;function Oo(b,c){return Po(b,c,[]).join(\"\")}function Po(b,c,d){if(4==b.nodeType||3==b.nodeType)c?d.push(String(b.nodeValue).replace(/(\\r\\n|\\r|\\n)/g,\"\")):d.push(b.nodeValue);else for(b=b.firstChild;b;b=b.nextSibling)Po(b,c,d);return d}function Qo(b){return b.localName}\nfunction Ro(b){var c=b.localName;return void 0!==c?c:b.baseName}var So=Zb?Ro:Qo;function To(b){return b instanceof Document}function Uo(b){return ma(b)&&9==b.nodeType}var Vo=Zb?Uo:To;function Wo(b){return b instanceof Node}function Xo(b){return ma(b)&&void 0!==b.nodeType}var Yo=Zb?Xo:Wo;function Zo(b,c,d){return b.getAttributeNS(c,d)||\"\"}function $o(b,c,d){var e=\"\";b=ap(b,c,d);void 0!==b&&(e=b.nodeValue);return e}var bp=document.implementation&&document.implementation.createDocument?Zo:$o;\nfunction cp(b,c,d){return b.getAttributeNodeNS(c,d)}function dp(b,c,d){var e=null;b=b.attributes;for(var f,g,h=0,k=b.length;h<k;++h)if(f=b[h],f.namespaceURI==c&&(g=f.prefix?f.prefix+\":\"+d:d,g==f.nodeName)){e=f;break}return e}var ap=document.implementation&&document.implementation.createDocument?cp:dp;function ep(b,c,d,e){b.setAttributeNS(c,d,e)}function fp(b,c,d,e){c?(c=b.ownerDocument.createNode(2,d,c),c.nodeValue=e,b.setAttributeNode(c)):b.setAttribute(d,e)}\nvar gp=document.implementation&&document.implementation.createDocument?ep:fp;function hp(b){return(new DOMParser).parseFromString(b,\"application/xml\")}function ip(b,c){return function(d,e){var f=b.call(c,d,e);void 0!==f&&lb(e[e.length-1],f)}}function jp(b,c){return function(d,e){var f=b.call(void 0!==c?c:this,d,e);void 0!==f&&e[e.length-1].push(f)}}function kp(b,c){return function(d,e){var f=b.call(void 0!==c?c:this,d,e);void 0!==f&&(e[e.length-1]=f)}}\nfunction lp(b){return function(c,d){var e=b.call(this,c,d);void 0!==e&&Tb(d[d.length-1],c.localName).push(e)}}function M(b,c){return function(d,e){var f=b.call(this,d,e);void 0!==f&&(e[e.length-1][void 0!==c?c:d.localName]=f)}}function N(b,c){return function(d,e,f){b.call(void 0!==c?c:this,d,e,f);f[f.length-1].node.appendChild(d)}}function mp(b){var c,d;return function(e,f,g){if(void 0===c){c={};var h={};h[e.localName]=b;c[e.namespaceURI]=h;d=np(e.localName)}op(c,d,f,g)}}\nfunction np(b,c){return function(d,e,f){d=e[e.length-1].node;e=b;void 0===e&&(e=f);f=c;void 0===c&&(f=d.namespaceURI);return No(f,e)}}var pp=np();function qp(b,c){for(var d=c.length,e=Array(d),f=0;f<d;++f)e[f]=b[c[f]];return e}function P(b,c,d){d=void 0!==d?d:{};var e,f;e=0;for(f=b.length;e<f;++e)d[b[e]]=c;return d}function rp(b,c,d,e){for(c=c.firstElementChild;c;c=c.nextElementSibling){var f=b[c.namespaceURI];void 0!==f&&(f=f[c.localName],void 0!==f&&f.call(e,c,d))}}\nfunction Q(b,c,d,e,f){e.push(b);rp(c,d,e,f);return e.pop()}function op(b,c,d,e,f,g){for(var h=(void 0!==f?f:d).length,k,m,n=0;n<h;++n)k=d[n],void 0!==k&&(m=c.call(g,k,e,void 0!==f?f[n]:void 0),void 0!==m&&b[m.namespaceURI][m.localName].call(g,m,k,e))}function sp(b,c,d,e,f,g,h){f.push(b);op(c,d,e,f,g,h);f.pop()};function tp(b,c,d,e){return function(f,g,h){var k=new oo;k.j=\"arraybuffer\"==c.V()?\"arraybuffer\":\"text\";C(k,\"complete\",function(b){b=b.target;if(Co(b)){var f=c.V(),g;if(\"json\"==f)g=Do(b);else if(\"text\"==f)g=Do(b);else if(\"xml\"==f){if(!Zb)try{g=b.ha?b.ha.responseXML:null}catch(k){g=null}g||(g=hp(Do(b)))}else\"arraybuffer\"==f&&(g=Eo(b));g&&(f=c.Ba(g,{featureProjection:h}),2==d.length?d.call(this,f,c.Ia(g)):d.call(this,f))}else e.call(this);uc(b)},!1,this);ka(b)?so(k,b(f,g,h)):so(k,b)}}\nfunction up(b,c){return tp(b,c,function(b,c){this.c=c;this.g=b;this.state=2;xh(this)},function(){this.state=3;xh(this)})}function vp(b,c){return tp(b,c,function(b){this.Dc(b)},wa)};function wp(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var xp,yp,zp,Ap;\n(function(){var b={ka:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.af=Math.max(4,b||9);this.gg=Math.max(2,Math.ceil(.4*this.af));d&&this.$i(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.Pa?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-\nc.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function m(b){return b[2]-b[0]+(b[3]-b[1])}function n(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function p(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,m,n;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),\nm=.5*Math.exp(2*k/3),n=.5*Math.sqrt(k*m*(g-m)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*m/g+n)),h=Math.min(d,Math.floor(e+(g-h)*m/g+n)),r(b,k,h,e,f));g=b[e];h=c;m=d;t(b,c,e);for(0<f(b[d],g)&&t(b,c,d);h<m;){t(b,h,m);h++;for(m--;0>f(b[h],g);)h++;for(;0<f(b[m],g);)m--}0===f(b[c],g)?t(b,c,m):(m++,t(b,m,d));m<=e&&(c=m+1);e<=m&&(d=m-1)}}function t(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.bg(this.data,[])},search:function(b){var c=this.data,d=[],e=this.cb;if(!p(b,c.bbox))return d;\nfor(var f=[],g,h,k,m;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],m=c.Pa?e(k):k.bbox,p(b,m)&&(c.Pa?d.push(k):n(b,m)?this.bg(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.gg){for(var c=0,d=b.length;c<d;c++)this.ya(b[c]);return this}b=this.dg(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.ig(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.fg(b,this.data.height-b.height-1,\n!0)):this.data=b;return this},ya:function(b){b&&this.fg(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],Pa:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.cb(b),e=[],f=[],g,h,k,m;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),m=!0);if(c.Pa&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.Yi(e);break}m||c.Pa||!n(c.bbox,d)?h?(g++,c=h.children[g],m=!1):c=null:\n(e.push(c),f.push(g),g=0,h=c,c=c.children[0])}return this},cb:function(b){return b},ef:function(b,c){return b[0]-c[0]},ff:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},bg:function(b,c){for(var d=[];b;)b.Pa?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},dg:function(b,c,e,f){var g=e-c+1,h=this.af,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,Pa:!0},d(k,this.cb),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));\nk={children:[],height:f,bbox:null};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),m,n,p;for(q(b,c,e,h,this.ef);c<=e;c+=h)for(n=Math.min(c+h-1,e),q(b,c,n,g,this.ff),m=c;m<=n;m+=g)p=Math.min(m+g-1,n),k.children.push(this.dg(b,m,p,f-1));d(k,this.cb);return k},Xi:function(b,c,d,e){for(var f,g,h,m,n,p,q,r;;){e.push(c);if(c.Pa||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],n=k(h.bbox),p=h.bbox,p=(Math.max(p[2],b[2])-Math.min(p[0],b[0]))*(Math.max(p[3],b[3])-Math.min(p[1],\nb[1]))-n,p<r?(r=p,q=n<q?n:q,m=h):p===r&&n<q&&(q=n,m=h);c=m}return c},fg:function(b,c,d){var e=this.cb;d=d?b.bbox:e(b);var e=[],g=this.Xi(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.af)this.fj(e,c),c--;else break;this.Ui(d,e,c)},fj:function(b,c){var e=b[c],f=e.children.length,g=this.gg;this.Vi(e,g,f);f=this.Wi(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height};e.Pa&&(f.Pa=!0);d(e,this.cb);d(f,this.cb);c?b[c-1].children.push(f):this.ig(e,\nf)},ig:function(b,c){this.data={children:[b,c],height:b.height+1};d(this.data,this.cb)},Wi:function(b,c,d){var f,g,h,m,n,p,q;n=p=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.cb),h=e(b,f,d,this.cb),m=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),m<n?(n=m,q=f,p=g<p?g:p):m===n&&g<p&&(p=g,q=f);return q},Vi:function(b,c,d){var e=b.Pa?this.ef:g,f=b.Pa?this.ff:h,k=this.cg(b,c,d,e);c=this.cg(b,c,d,f);k<c&&b.children.sort(e)},cg:function(b,\nc,d,g){b.children.sort(g);g=this.cb;var h=e(b,0,c,g),k=e(b,d-c,d,g),n=m(h)+m(k),p,q;for(p=c;p<d-c;p++)q=b.children[p],f(h,b.Pa?g(q):q.bbox),n+=m(h);for(p=d-c-1;p>=c;p--)q=b.children[p],f(k,b.Pa?g(q):q.bbox),n+=m(k);return n},Ui:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},Yi:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.cb)},$i:function(b){var c=[\"return a\",\" - b\",\";\"];this.ef=new Function(\"a\",\"b\",\nc.join(b[0]));this.ff=new Function(\"a\",\"b\",c.join(b[1]));this.cb=new Function(\"a\",\"return [a\"+b.join(\", a\")+\"];\")}};\"undefined\"!==typeof b?b.ka=c:\"undefined\"!==typeof self?self.a=c:window.a=c})();xp=b.ka})();function Bp(b){this.c=xp(b);this.a={}}l=Bp.prototype;l.ya=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.c.ya(d);this.a[w(c)]=d};l.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.a[w(h)]=g}this.c.load(d)};l.remove=function(b){b=w(b);var c=this.a[b];delete this.a[b];return null!==this.c.remove(c)};function Cp(b,c,d){var e=w(d);be(b.a[e].slice(0,4),c)||(b.remove(d),b.ya(c,d))}\nfunction Dp(b){return b.c.all().map(function(b){return b[4]})}function Ep(b,c){return b.c.search(c).map(function(b){return b[4]})}l.forEach=function(b,c){return Fp(Dp(this),b,c)};function Gp(b,c,d,e){return Fp(Ep(b,c),d,e)}function Fp(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}l.Ka=function(){return Qb(this.a)};l.clear=function(){this.c.clear();this.a={}};l.J=function(){return this.c.data.bbox};function R(b){b=b||{};yh.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:\"ready\",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.T=wa;void 0!==b.loader?this.T=b.loader:void 0!==b.url&&(this.T=vp(b.url,b.format));this.pa=void 0!==b.strategy?b.strategy:wp;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.a=c?new Bp:null;this.Z=new Bp;this.g={};this.i={};this.l={};this.u={};this.b=null;var d,e;b.features instanceof og?(d=b.features,e=d.a):ga(b.features)&&(e=b.features);c||\nvoid 0!==d||(d=new og(e));void 0!==e&&Hp(this,e);void 0!==d&&Ip(this,d)}y(R,yh);l=R.prototype;l.Ad=function(b){var c=w(b).toString();if(Jp(this,c,b)){Kp(this,c,b);var d=b.W();d?(c=d.J(),this.a&&this.a.ya(c,b)):this.g[c]=b;this.o(new Lp(\"addfeature\",b))}this.s()};function Kp(b,c,d){b.u[c]=[C(d,\"change\",b.qh,!1,b),C(d,\"propertychange\",b.qh,!1,b)]}function Jp(b,c,d){var e=!0,f=d.Na();void 0!==f?f.toString()in b.i?e=!1:b.i[f.toString()]=d:b.l[c]=d;return e}l.Dc=function(b){Hp(this,b);this.s()};\nfunction Hp(b,c){var d,e,f,g,h=[],k=[],m=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=w(g).toString(),Jp(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=w(g).toString();Kp(b,d,g);var n=g.W();n?(d=n.J(),h.push(d),m.push(g)):b.g[d]=g}b.a&&b.a.load(h,m);e=0;for(f=k.length;e<f;e++)b.o(new Lp(\"addfeature\",k[e]))}\nfunction Ip(b,c){var d=!1;C(b,\"addfeature\",function(b){d||(d=!0,c.push(b.feature),d=!1)});C(b,\"removefeature\",function(b){d||(d=!0,c.remove(b.feature),d=!1)});C(c,\"add\",function(b){d||(b=b.element,d=!0,this.Ad(b),d=!1)},!1,b);C(c,\"remove\",function(b){d||(b=b.element,d=!0,this.Qc(b),d=!1)},!1,b);b.b=c}\nl.clear=function(b){if(b){for(var c in this.u)this.u[c].forEach(Zc);this.b||(this.u={},this.i={},this.l={})}else b=this.Nh,this.a&&(this.a.forEach(b,this),Ib(this.g,b,this));this.b&&this.b.clear();this.a&&this.a.clear();this.Z.clear();this.g={};this.o(new Lp(\"clear\"));this.s()};l.rg=function(b,c){if(this.a)return this.a.forEach(b,c);if(this.b)return this.b.forEach(b,c)};function Mp(b,c,d){b.ob([c[0],c[1],c[0],c[1]],function(b){if(b.W().ng(c))return d.call(void 0,b)})}\nl.ob=function(b,c,d){if(this.a)return Gp(this.a,b,c,d);if(this.b)return this.b.forEach(c,d)};l.sg=function(b,c,d){return this.ob(b,function(e){if(e.W().Da(b)&&(e=c.call(d,e)))return e})};l.yg=function(){return this.b};l.ye=function(){var b;this.b?b=this.b.a:this.a&&(b=Dp(this.a),Qb(this.g)||lb(b,Lb(this.g)));return b};l.xg=function(b){var c=[];Mp(this,b,function(b){c.push(b)});return c};l.lf=function(b){return Ep(this.a,b)};\nl.ug=function(b){var c=b[0],d=b[1],e=null,f=[NaN,NaN],g=Infinity,h=[-Infinity,-Infinity,Infinity,Infinity];Gp(this.a,h,function(b){var m=b.W(),n=g;g=m.mb(c,d,f,g);g<n&&(e=b,b=Math.sqrt(g),h[0]=c-b,h[1]=d-b,h[2]=c+b,h[3]=d+b)});return e};l.J=function(){return this.a.J()};l.wg=function(b){b=this.i[b.toString()];return void 0!==b?b:null};\nl.qh=function(b){b=b.target;var c=w(b).toString(),d=b.W();d?(d=d.J(),c in this.g?(delete this.g[c],this.a&&this.a.ya(d,b)):this.a&&Cp(this.a,d,b)):c in this.g||(this.a&&this.a.remove(b),this.g[c]=b);d=b.Na();void 0!==d?(d=d.toString(),c in this.l?(delete this.l[c],this.i[d]=b):this.i[d]!==b&&(Np(this,b),this.i[d]=b)):c in this.l||(Np(this,b),this.l[c]=b);this.s();this.o(new Lp(\"changefeature\",b))};l.Ka=function(){return this.a.Ka()&&Qb(this.g)};\nl.Mc=function(b,c,d){var e=this.Z;b=this.pa(b,c);var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];Gp(e,h,function(b){return Xd(b.extent,h)})||(this.T.call(this,h,c,d),e.ya(h,{extent:h.slice()}))}};l.Qc=function(b){var c=w(b).toString();c in this.g?delete this.g[c]:this.a&&this.a.remove(b);this.Nh(b);this.s()};l.Nh=function(b){var c=w(b).toString();this.u[c].forEach(Zc);delete this.u[c];var d=b.Na();void 0!==d?delete this.i[d.toString()]:delete this.l[c];this.o(new Lp(\"removefeature\",b))};\nfunction Np(b,c){for(var d in b.i)if(b.i[d]===c){delete b.i[d];break}}function Lp(b,c){vc.call(this,b);this.feature=c}y(Lp,vc);function Op(b){this.b=b.source;this.xa=Dd();this.g=Pi();this.i=[0,0];this.u=null;rn.call(this,{attributions:b.attributions,canvasFunction:ra(this.pj,this),logo:b.logo,projection:b.projection,ratio:b.ratio,resolutions:b.resolutions,state:this.b.A});this.T=null;this.l=void 0;this.mh(b.style);C(this.b,\"change\",this.Mm,void 0,this)}y(Op,rn);l=Op.prototype;\nl.pj=function(b,c,d,e,f){var g=new Rm(.5*c/d,b,c);this.b.Mc(b,c,f);var h=!1;this.b.ob(b,function(b){var e;if(!(e=h)){var f;(e=b.Qb())?f=e.call(b,c):this.l&&(f=this.l(b,c));if(f){var p,q=!1;e=0;for(p=f.length;e<p;++e)q=Ym(g,b,f[e],Xm(c,d),this.Lm,this)||q;e=q}else e=!1}h=e},this);Sm(g);if(h)return null;this.i[0]!=e[0]||this.i[1]!=e[1]?(this.g.canvas.width=e[0],this.g.canvas.height=e[1],this.i[0]=e[0],this.i[1]=e[1]):this.g.clearRect(0,0,e[0],e[1]);b=Pp(this,me(b),c,d,e);g.b(this.g,d,b,0,{});this.u=\ng;return this.g.canvas};l.xe=function(b,c,d,e,f){if(this.u){var g={};return this.u.f(b,c,0,e,function(b){var c=w(b).toString();if(!(c in g))return g[c]=!0,f(b)})}};l.Im=function(){return this.b};l.Jm=function(){return this.T};l.Km=function(){return this.l};function Pp(b,c,d,e,f){return ik(b.xa,f[0]/2,f[1]/2,e/d,-e/d,0,-c[0],-c[1])}l.Lm=function(){this.s()};l.Mm=function(){Ah(this,this.b.A)};l.mh=function(b){this.T=void 0!==b?b:gm;this.l=b?em(this.T):void 0;this.s()};function Qp(b){xm.call(this,b);this.g=null;this.j=Dd();this.b=this.f=null}y(Qp,xm);l=Qp.prototype;l.Za=function(b,c,d,e){var f=this.a;return f.fa().xe(b,c.viewState.resolution,c.viewState.rotation,c.skippedFeatureUids,function(b){return d.call(e,b,f)})};\nl.sc=function(b,c,d,e){if(this.yd())if(this.a.fa()instanceof Op){if(b=b.slice(),kk(c.pixelToCoordinateMatrix,b,b),this.Za(b,c,ue,this))return d.call(e,this.a)}else if(this.f||(this.f=Dd(),Jd(this.j,this.f)),c=Am(b,this.f),this.b||(this.b=Pi(1,1)),this.b.clearRect(0,0,1,1),this.b.drawImage(this.yd(),c[0],c[1],1,1,0,0,1,1),0<this.b.getImageData(0,0,1,1).data[3])return d.call(e,this.a)};l.yd=function(){return this.g?this.g.a():null};l.mf=function(){return this.j};\nl.zd=function(b,c){var d=b.pixelRatio,e=b.viewState,f=e.center,g=e.resolution,h=e.rotation,k=this.a.fa(),m=b.viewHints,n=b.extent;void 0!==c.extent&&(n=oe(n,c.extent));m[0]||m[1]||je(n)||(e=k.C(n,g,d,e.projection))&&nk(this,e)&&(this.g=e);if(this.g){var e=this.g,m=e.J(),n=e.$(),p=e.b,g=d*n/(g*p);ik(this.j,d*b.size[0]/2,d*b.size[1]/2,g,g,h,p*(m[0]-f[0])/n,p*(f[1]-m[3])/n);this.f=null;pk(b.attributions,e.j);qk(b,k)}return!0};function Rp(b){xm.call(this,b);this.b=this.j=null;this.B=!1;this.i=null;this.A=Dd();this.g=null;this.D=this.G=this.C=NaN;this.l=this.f=null;this.U=[0,0]}y(Rp,xm);Rp.prototype.yd=function(){return this.j};Rp.prototype.mf=function(){return this.A};\nRp.prototype.zd=function(b,c){var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.fa(),k=h.hb(f),m=h.$d(),n=Kh(k,e.resolution),p=h.Pb(n,b.pixelRatio,f),q=p[0]/od(k.Ha(n),this.U)[0],r=k.$(n),q=r/q,t=e.center,x;r==e.resolution?(t=sk(t,r,b.size),x=ne(t,r,e.rotation,b.size)):x=b.extent;void 0!==c.extent&&(x=oe(x,c.extent));if(je(x))return!1;var z=Hh(k,x,r),B=p[0]*kg(z),A=p[1]*jg(z),v,O;this.j?(v=this.j,O=this.i,this.b[0]<B||this.b[1]<A||this.G!==p[0]||this.D!==p[1]||this.B&&(this.b[0]>B||this.b[1]>\nA)?(v.width=B,v.height=A,this.b=[B,A],this.B=!Bm(this.b),this.f=null):(B=this.b[0],A=this.b[1],(v=n!=this.C)||(v=this.f,v=!(v.a<=z.a&&z.f<=v.f&&v.c<=z.c&&z.b<=v.b)),v&&(this.f=null))):(O=Pi(B,A),this.j=O.canvas,this.b=[B,A],this.i=O,this.B=!Bm(this.b));var K,I;this.f?(A=this.f,B=kg(A)):(B/=p[0],A/=p[1],K=z.a-Math.floor((B-kg(z))/2),I=z.c-Math.floor((A-jg(z))/2),this.C=n,this.G=p[0],this.D=p[1],this.f=new gg(K,K+B-1,I,I+A-1),this.l=Array(B*A),A=this.f);v={};v[n]={};var G=[],la=this.bd(h,f,v),Ea=g.b(),\nL=Od(),za=new gg(0,0,0,0),Ra,Ka,kb;for(I=z.a;I<=z.f;++I)for(kb=z.c;kb<=z.b;++kb)Ka=h.Ob(n,I,kb,d,f),K=Ka.state,2==K||4==K||3==K&&!Ea?v[n][fg(Ka.a)]=Ka:(Ra=Eh(k,Ka.a,la,za,L),Ra||(G.push(Ka),(Ra=Gh(k,Ka.a,za,L))&&la(n+1,Ra)));la=0;for(Ra=G.length;la<Ra;++la)Ka=G[la],I=p[0]*(Ka.a[1]-A.a),kb=p[1]*(A.b-Ka.a[2]),O.clearRect(I,kb,p[0],p[1]);G=Object.keys(v).map(Number);ob(G);var cb=h.pa,Rc=he(k.Aa([n,A.a,A.b],L)),sc,Oe,Aj,ci,$f,pm,la=0;for(Ra=G.length;la<Ra;++la)if(sc=G[la],p=h.Pb(sc,d,f),ci=v[sc],sc==\nn)for(Aj in ci)Ka=ci[Aj],Oe=(Ka.a[2]-A.c)*B+(Ka.a[1]-A.a),this.l[Oe]!=Ka&&(I=p[0]*(Ka.a[1]-A.a),kb=p[1]*(A.b-Ka.a[2]),K=Ka.state,4!=K&&(3!=K||Ea)&&cb||O.clearRect(I,kb,p[0],p[1]),2==K&&O.drawImage(Ka.Sa(),m,m,p[0],p[1],I,kb,p[0],p[1]),this.l[Oe]=Ka);else for(Aj in sc=k.$(sc)/r,ci)for(Ka=ci[Aj],Oe=k.Aa(Ka.a,L),I=(Oe[0]-Rc[0])/q,kb=(Rc[1]-Oe[3])/q,pm=sc*p[0],$f=sc*p[1],K=Ka.state,4!=K&&cb||O.clearRect(I,kb,pm,$f),2==K&&O.drawImage(Ka.Sa(),m,m,p[0],p[1],I,kb,pm,$f),Ka=Fh(k,Oe,n,za),K=Math.max(Ka.a,A.a),\nkb=Math.min(Ka.f,A.f),I=Math.max(Ka.c,A.c),Ka=Math.min(Ka.b,A.b);K<=kb;++K)for($f=I;$f<=Ka;++$f)Oe=($f-A.c)*B+(K-A.a),this.l[Oe]=void 0;rk(b.usedTiles,h,n,z);tk(b,h,k,d,f,x,n,g.a());ok(b,h);qk(b,h);ik(this.A,d*b.size[0]/2,d*b.size[1]/2,d*q/e.resolution,d*q/e.resolution,e.rotation,(Rc[0]-t[0])/q,(t[1]-Rc[1])/q);this.g=null;return!0};Rp.prototype.sc=function(b,c,d,e){if(this.i&&(this.g||(this.g=Dd(),Jd(this.A,this.g)),b=Am(b,this.g),0<this.i.getImageData(b[0],b[1],1,1).data[3]))return d.call(e,this.a)};function Sp(b){xm.call(this,b);this.f=!1;this.B=-1;this.l=NaN;this.j=Od();this.b=this.i=null;this.g=Pi()}y(Sp,xm);\nSp.prototype.u=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.rb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,m=k.J(),n=this.a.fa(),p=zm(this,b,0);ym(this,\"precompose\",d,b,p);var q=this.b;if(q&&!q.Ka()){var r;ed(this.a,\"render\")?(this.g.canvas.width=d.canvas.width,this.g.canvas.height=d.canvas.height,r=this.g):r=d;var t=r.globalAlpha;r.globalAlpha=c.opacity;q.b(r,f,p,h,g);if(n.S&&k.b&&!Xd(m,e)){c=e[0];k=ke(m);for(n=0;c<m[0];)--n,p=k*n,p=zm(this,b,p),q.b(r,f,p,h,g),c+=k;n=0;\nfor(c=e[2];c>m[2];)++n,p=k*n,p=zm(this,b,p),q.b(r,f,p,h,g),c-=k;p=zm(this,b,0)}r!=d&&(ym(this,\"render\",r,b,p),d.drawImage(r.canvas,0,0));r.globalAlpha=t}ym(this,\"postcompose\",d,b,p)};Sp.prototype.Za=function(b,c,d,e){if(this.b){var f=c.viewState.resolution,g=c.viewState.rotation,h=this.a,k=c.layerStates[w(h)],m={};return this.b.f(b,f,g,k.rb?c.skippedFeatureUids:{},function(b){var c=w(b).toString();if(!(c in m))return m[c]=!0,d.call(e,b,h)})}};Sp.prototype.A=function(){mk(this)};\nSp.prototype.zd=function(b){function c(b){var c,e=b.Qb();e?c=e.call(b,n):(e=d.b)&&(c=e(b,n));if(c){if(c){var f,g=!1,e=0;for(f=c.length;e<f;++e)g=Ym(r,b,c[e],Xm(n,p),this.A,this)||g;b=g}else b=!1;this.f=this.f||b}}var d=this.a,e=d.fa();pk(b.attributions,e.j);qk(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.l;if(!this.f&&!h&&f||!k&&g)return!0;var m=b.extent,k=b.viewState,f=k.projection,n=k.resolution,p=b.pixelRatio,g=d.c,q=d.a,h=im(d);void 0===h&&(h=Wm);m=Sd(m,q*n);q=k.projection.J();e.S&&k.projection.b&&\n!Xd(q,b.extent)&&(b=Math.max(ke(m)/2,ke(q)),m[0]=q[0]-b,m[2]=q[2]+b);if(!this.f&&this.l==n&&this.B==g&&this.i==h&&Xd(this.j,m))return!0;uc(this.b);this.b=null;this.f=!1;var r=new Rm(.5*n/p,m,n,d.a);e.Mc(m,n,f);if(h){var t=[];e.ob(m,function(b){t.push(b)},this);ob(t,h);t.forEach(c,this)}else e.ob(m,c,this);Sm(r);this.l=n;this.B=g;this.i=h;this.j=m;this.b=r;return!0};function Tp(b,c,d,e,f){wh.call(this,b,c);this.j=e;this.c=this.g=null;this.b={jd:!1,Sf:null,Oh:-1,Gd:null};this.B=f;this.i=d}y(Tp,wh);l=Tp.prototype;l.X=function(){Tp.da.X.call(this)};l.Hl=function(){return this.j};l.tb=function(){return this.i};l.load=function(){0==this.state&&(this.state=1,xh(this),this.B(this,this.i),this.l(null,NaN,null))};l.Yh=function(b){this.l=b};function Up(b,c){var d=/\\{z\\}/g,e=/\\{x\\}/g,f=/\\{y\\}/g,g=/\\{-y\\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){return(jg(c.c?c.c[h[0]]:null)+h[2]).toString()})}}function Vp(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=Up(b[f],c);return Wp(e)}function Wp(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[pd((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function Xp(){}\nfunction Yp(b){var c=[],d=/\\{(\\d)-(\\d)\\}/.exec(b)||/\\{([a-z])-([a-z])\\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);return c};function Zp(b){Ph.call(this,{attributions:b.attributions,cf:b.cf,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state?b.state:void 0,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=b.tileUrlFunction?b.tileUrlFunction:Xp;this.urls=null;b.urls?b.tileUrlFunction?this.urls=b.urls:this.Va(b.urls):b.url&&this.Ua(b.url);b.tileUrlFunction&&this.Ja(b.tileUrlFunction)}y(Zp,Ph);l=Zp.prototype;\nl.Wa=function(){return this.tileLoadFunction};l.Xa=function(){return this.tileUrlFunction};l.Ya=function(){return this.urls};l.ph=function(b){b=b.target;switch(b.state){case 1:this.o(new Sh(\"tileloadstart\",b));break;case 2:this.o(new Sh(\"tileloadend\",b));break;case 3:this.o(new Sh(\"tileloaderror\",b))}};l.bb=function(b){this.a.clear();this.tileLoadFunction=b;this.s()};l.Ja=function(b){this.a.clear();this.tileUrlFunction=b;this.s()};l.Ua=function(b){this.Ja(Vp(Yp(b),this.tileGrid));this.urls=[b]};\nl.Va=function(b){this.Ja(Vp(b,this.tileGrid));this.urls=b};l.Xf=function(b,c,d){b=this.gb(b,c,d);sh(this.a,b)&&this.a.get(b)};function $p(b){Zp.call(this,{attributions:b.attributions,cf:128,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state?b.state:void 0,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:aq,tileUrlFunction:b.tileUrlFunction,tilePixelRatio:b.tilePixelRatio,url:b.url,urls:b.urls,wrapX:void 0===b.wrapX?!0:b.wrapX});this.g=b.format?b.format:null;this.tileClass=b.tileClass?b.tileClass:Tp}y($p,Zp);\n$p.prototype.Ob=function(b,c,d,e,f){var g=this.gb(b,c,d);if(sh(this.a,g))return this.a.get(g);b=[b,c,d];e=(c=Rh(this,b,f))?this.tileUrlFunction(c,e,f):void 0;e=new this.tileClass(b,void 0!==e?0:4,void 0!==e?e:\"\",this.g,this.tileLoadFunction);C(e,\"change\",this.ph,!1,this);this.a.set(g,e);return e};function aq(b,c){b.Yh(up(c,b.j))};function bq(b){xm.call(this,b);this.f=Pi();this.b=!1;this.g=[];this.j=Od();this.i=[NaN,NaN];this.B=Dd()}y(bq,xm);\nbq.prototype.u=function(b,c,d){var e=b.pixelRatio,f=c.rb?b.skippedFeatureUids:{},g=b.viewState,h=g.center,k=g.projection,m=g.resolution,n=g.rotation,p=this.a,q=p.fa(),r=zm(this,b,0);ym(this,\"precompose\",d,b,r);ed(p,\"render\")?(this.f.canvas.width=d.canvas.width,this.f.canvas.height=d.canvas.height,p=this.f):p=d;var t=p.globalAlpha;p.globalAlpha=c.opacity;c=this.g;var x=q.tileGrid,z,B,A,v,O,K;B=0;for(A=c.length;B<A;++B)v=c[B],z=v.a[0],O=x.Ha(z),K=q.Pb(z,e,k),O=K[0]/od(O,this.i)[0],z=x.$(z),z/=O,\"tile-pixels\"==\nv.c.c&&(r=he(x.Aa(v.a,this.j)),r=ik(this.B,e*b.size[0]/2,e*b.size[1]/2,e*z/m,e*z/m,g.rotation,(r[0]-h[0])/z,(h[1]-r[1])/z)),v.b.Gd.b(p,e,r,n,f);r=zm(this,b,0);p!=d&&(ym(this,\"render\",p,b,r),d.drawImage(p.canvas,0,0));p.globalAlpha=t;ym(this,\"postcompose\",d,b,r)};\nfunction cq(b,c,d,e){function f(b){var c;b.Qb()?c=b.Qb().call(b,t):d.b&&(c=(0,d.b)(b,t));if(c){var e=z,f=x;if(c){var g,h,m=!1;g=0;for(h=c.length;g<h;++g)m=Ym(f,b,c[g],e,this.l,this)||m;b=m}else b=!1;this.b=this.b||b;k.jd=k.jd||b}}var g=d.c,h=im(d)||null,k=c.b;if(k.jd||k.Oh!=g||k.Sf!=h){uc(k.Gd);k.Gd=null;k.jd=!1;var m=d.fa(),n=m.tileGrid,p=c.a,q=\"tile-pixels\"==c.c.c,r;q?(r=m.Pb(p[0],e,c.c),r=[0,0,r[0],r[1]]):r=n.Aa(p);var t=n.$(p[0]),m=q?m.C:t;k.jd=!1;var x=new Rm(0,r,m,d.a),z=Xm(m,e);c=c.g;h&&h!==\nk.Sf&&c.sort(h);c.forEach(f,b);Sm(x);k.Oh=g;k.Sf=h;k.Gd=x}}\nbq.prototype.Za=function(b,c,d,e){var f=c.viewState.resolution,g=c.viewState.rotation,h=this.a,k=c.layerStates[w(h)],m={},n=this.g,p=h.fa(),q=p.tileGrid,r,t,x,z,B,A,v;x=0;for(z=n.length;x<z;++x)A=n[x],t=A.a,B=p.tileGrid.Aa(t,this.j),Vd(B,b)&&(\"tile-pixels\"===A.c.c?(B=he(B),f=p.C,v=q.$(t[0])/f,od(q.Ha(t[0])),t=[(b[0]-B[0])/v,(B[1]-b[1])/v]):t=b,A=A.b.Gd,r=r||A.f(t,f,g,k.rb?c.skippedFeatureUids:{},function(b){var c=w(b).toString();if(!(c in m))return m[c]=!0,d.call(e,b,h)}));return r};\nbq.prototype.l=function(){mk(this)};\nbq.prototype.zd=function(b,c){var d=this.a,e=d.fa();pk(b.attributions,e.j);qk(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.l;if(!this.b&&!h&&f||!k&&g)return!0;g=b.extent;c.extent&&(g=oe(g,c.extent));if(je(g))return!1;for(var f=b.viewState,h=f.projection,k=f.resolution,f=b.pixelRatio,m=e.tileGrid,n=m.a,p=n.length-1;0<p&&n[p]<k;)--p;n=Fh(m,g,p);rk(b.usedTiles,e,p,n);tk(b,e,m,f,h,g,p,d.g());ok(b,e);g={};g[p]={};var q=this.bd(e,h,g),r=d.U(),t=this.j,x=new gg(0,0,0,0),z,B,A;for(B=n.a;B<=n.f;++B)for(A=\nn.c;A<=n.b;++A)k=e.Ob(p,B,A,f,h),z=k.state,2==z||4==z||3==z&&!r?g[p][fg(k.a)]=k:(z=Eh(m,k.a,q,x,t),z||(k=Gh(m,k.a,x,t))&&q(p+1,k));this.b=!1;e=Object.keys(g).map(Number);e.sort();for(var h=[],v,m=0,p=e.length;m<p;++m)for(v in k=e[m],n=g[k],n)k=n[v],2==k.state&&(h.push(k),cq(this,k,d,f));this.g=h;return!0};function dq(b,c){Ak.call(this,0,c);this.b=Pi();this.a=this.b.canvas;this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.className=\"ol-unselectable\";Ng(b,this.a,0);this.c=!0;this.g=Dd()}y(dq,Ak);dq.prototype.gf=function(b){return b instanceof Sl?new Qp(b):b instanceof F?new Rp(b):b instanceof J?new bq(b):b instanceof H?new Sp(b):null};\nfunction eq(b,c,d){var e=b.j,f=b.b;if(ed(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,m=d.pixelRatio,n=d.viewState,p=n.resolution;b=ik(b.g,b.a.width/2,b.a.height/2,m/p,-m/p,-n.rotation,-n.center[0],-n.center[1]);g=new jm(f,h,g,b,k);e.o(new dk(c,e,g,d,f,null));wm(g)}}dq.prototype.V=function(){return\"canvas\"};\ndq.prototype.Me=function(b){if(b){var c=this.b,d=b.size[0]*b.pixelRatio,e=b.size[1]*b.pixelRatio;this.a.width!=d||this.a.height!=e?(this.a.width=d,this.a.height=e):c.clearRect(0,0,this.a.width,this.a.height);Bk(b);eq(this,\"precompose\",b);d=b.layerStatesArray;qb(d);var e=b.viewState.resolution,f,g,h,k;f=0;for(g=d.length;f<g;++f)k=d[f],h=k.layer,h=Dk(this,h),fk(k,e)&&\"ready\"==k.S&&h.zd(b,k)&&h.u(b,k,c);eq(this,\"postcompose\",b);this.c||(ih(this.a,!0),this.c=!0);Ek(this,b);b.postRenderFunctions.push(Ck)}else this.c&&\n(ih(this.a,!1),this.c=!1)};function fq(b,c){lk.call(this,b);this.target=c}y(fq,lk);fq.prototype.g=wa;fq.prototype.l=wa;function gq(b){var c=Kg(\"DIV\");c.style.position=\"absolute\";fq.call(this,b,c);this.b=null;this.f=Fd()}y(gq,fq);gq.prototype.Za=function(b,c,d,e){var f=this.a;return f.fa().xe(b,c.viewState.resolution,c.viewState.rotation,c.skippedFeatureUids,function(b){return d.call(e,b,f)})};gq.prototype.g=function(){Mg(this.target);this.b=null};\ngq.prototype.j=function(b,c){var d=b.viewState,e=d.center,f=d.resolution,g=d.rotation,h=this.b,k=this.a.fa(),m=b.viewHints,n=b.extent;void 0!==c.extent&&(n=oe(n,c.extent));m[0]||m[1]||je(n)||(d=k.C(n,f,b.pixelRatio,d.projection))&&nk(this,d)&&(h=d);h&&(m=h.J(),n=h.$(),d=Dd(),ik(d,b.size[0]/2,b.size[1]/2,n/f,n/f,g,(m[0]-e[0])/n,(e[1]-m[3])/n),h!=this.b&&(e=h.a(this),e.style.maxWidth=\"none\",e.style.position=\"absolute\",Mg(this.target),this.target.appendChild(e),this.b=h),jk(d,this.f)||(Ti(this.target,\nd),Gd(this.f,d)),pk(b.attributions,h.j),qk(b,k));return!0};function hq(b){var c=Kg(\"DIV\");c.style.position=\"absolute\";fq.call(this,b,c);this.f=!0;this.B=1;this.i=0;this.b={}}y(hq,fq);hq.prototype.g=function(){Mg(this.target);this.i=0};\nhq.prototype.j=function(b,c){if(!c.visible)return this.f&&(ih(this.target,!1),this.f=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.fa(),k=h.hb(f),m=h.$d(),n=Kh(k,e.resolution),p=k.$(n),q=e.center,r;p==e.resolution?(q=sk(q,p,b.size),r=ne(q,p,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=oe(r,c.extent));var p=Hh(k,r,p),t={};t[n]={};var x=this.bd(h,f,t),z=g.b(),B=Od(),A=new gg(0,0,0,0),v,O,K,I;for(K=p.a;K<=p.f;++K)for(I=p.c;I<=p.b;++I)v=h.Ob(n,K,I,d,f),O=v.state,2==O?t[n][fg(v.a)]=\nv:4==O||3==O&&!z||(O=Eh(k,v.a,x,A,B),O||(v=Gh(k,v.a,A,B))&&x(n+1,v));var G;if(this.i!=h.c){for(G in this.b)z=this.b[+G],Og(z.target);this.b={};this.i=h.c}B=Object.keys(t).map(Number);ob(B);var x={},la;K=0;for(I=B.length;K<I;++K){G=B[K];G in this.b?z=this.b[G]:(z=k.fe(q,G),z=new iq(k,z),x[G]=!0,this.b[G]=z);G=t[G];for(la in G){v=z;O=G[la];var Ea=m,L=O.a,za=L[0],Ra=L[1],Ka=L[2],L=fg(L);if(!(L in v.c)){var za=od(v.g.Ha(za),v.l),kb=O.Sa(v),cb=kb.style;cb.maxWidth=\"none\";var Rc=void 0,sc=void 0;0<Ea?(Rc=\nKg(\"DIV\"),sc=Rc.style,sc.overflow=\"hidden\",sc.width=za[0]+\"px\",sc.height=za[1]+\"px\",cb.position=\"absolute\",cb.left=-Ea+\"px\",cb.top=-Ea+\"px\",cb.width=za[0]+2*Ea+\"px\",cb.height=za[1]+2*Ea+\"px\",Rc.appendChild(kb)):(cb.width=za[0]+\"px\",cb.height=za[1]+\"px\",Rc=kb,sc=cb);sc.position=\"absolute\";sc.left=(Ra-v.b[1])*za[0]+\"px\";sc.top=(v.b[2]-Ka)*za[1]+\"px\";v.a||(v.a=document.createDocumentFragment());v.a.appendChild(Rc);v.c[L]=O}}z.a&&(z.target.appendChild(z.a),z.a=null)}m=Object.keys(this.b).map(Number);\nob(m);K=Dd();la=0;for(B=m.length;la<B;++la)if(G=m[la],z=this.b[G],G in t)if(v=z.$(),I=z.Ca(),ik(K,b.size[0]/2,b.size[1]/2,v/e.resolution,v/e.resolution,e.rotation,(I[0]-q[0])/v,(q[1]-I[1])/v),z.setTransform(K),G in x){for(--G;0<=G;--G)if(G in this.b){I=this.b[G].target;I.parentNode&&I.parentNode.insertBefore(z.target,I.nextSibling);break}0>G&&Ng(this.target,z.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){O=Fh(z.g,r,z.b[0],A);G=[];v=I=void 0;for(v in z.c)I=z.c[v],O.contains(I.a)||G.push(I);Ea=\nO=void 0;O=0;for(Ea=G.length;O<Ea;++O)I=G[O],v=fg(I.a),Og(I.Sa(z)),delete z.c[v]}}else Og(z.target),delete this.b[G];c.opacity!=this.B&&(this.B=this.target.style.opacity=c.opacity);c.visible&&!this.f&&(ih(this.target,!0),this.f=!0);rk(b.usedTiles,h,n,p);tk(b,h,k,d,f,r,n,g.a());ok(b,h);qk(b,h);return!0};\nfunction iq(b,c){this.target=Kg(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=b;this.b=c;this.j=he(b.Aa(c));this.i=b.$(c[0]);this.c={};this.a=null;this.f=Fd();this.l=[0,0]}iq.prototype.Ca=function(){return this.j};iq.prototype.$=function(){return this.i};iq.prototype.setTransform=function(b){jk(b,this.f)||(Ti(this.target,b),Gd(this.f,b))};function jq(b){this.i=Pi();var c=this.i.canvas;c.style.maxWidth=\"none\";c.style.position=\"absolute\";fq.call(this,b,c);this.f=!1;this.C=-1;this.A=NaN;this.B=Od();this.b=this.u=null;this.G=Dd();this.D=Dd()}y(jq,fq);\njq.prototype.l=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],m=h*d,n=k*d,e=ik(this.G,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.i;g.canvas.width=m;g.canvas.height=n;h=ik(this.D,0,0,1/d,1/d,0,-(m-h)/2*d,-(n-k)/2*d);Ti(g.canvas,h);kq(this,\"precompose\",b,e);(h=this.b)&&!h.Ka()&&(g.globalAlpha=c.opacity,h.b(g,d,e,f,c.rb?b.skippedFeatureUids:{}),kq(this,\"render\",b,e));kq(this,\"postcompose\",b,e)};\nfunction kq(b,c,d,e){var f=b.i;b=b.a;ed(b,c)&&(e=new jm(f,d.pixelRatio,d.extent,e,d.viewState.rotation),b.o(new dk(c,b,e,d,f,null)),wm(e))}jq.prototype.Za=function(b,c,d,e){if(this.b){var f=c.viewState.resolution,g=c.viewState.rotation,h=this.a,k=c.layerStates[w(h)],m={};return this.b.f(b,f,g,k.rb?c.skippedFeatureUids:{},function(b){var c=w(b).toString();if(!(c in m))return m[c]=!0,d.call(e,b,h)})}};jq.prototype.S=function(){mk(this)};\njq.prototype.j=function(b){function c(b){var c,e=b.Qb();e?c=e.call(b,m):(e=d.b)&&(c=e(b,m));if(c){if(c){var f,g=!1,e=0;for(f=c.length;e<f;++e)g=Ym(p,b,c[e],Xm(m,n),this.S,this)||g;b=g}else b=!1;this.f=this.f||b}}var d=this.a,e=d.fa();pk(b.attributions,e.j);qk(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.l;if(!this.f&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,m=h.resolution,n=b.pixelRatio;b=d.c;k=d.a;h=im(d);void 0===h&&(h=Wm);g=Sd(g,k*m);if(!this.f&&this.A==m&&this.C==\nb&&this.u==h&&Xd(this.B,g))return!0;uc(this.b);this.b=null;this.f=!1;var p=new Rm(.5*m/n,g,m,d.a);e.Mc(g,m,f);if(h){var q=[];e.ob(g,function(b){q.push(b)},this);ob(q,h);q.forEach(c,this)}else e.ob(g,c,this);Sm(p);this.A=m;this.C=b;this.u=h;this.B=g;this.b=p;return!0};function lq(b,c){Ak.call(this,0,c);this.b=Pi();var d=this.b.canvas;d.style.position=\"absolute\";d.style.width=\"100%\";d.style.height=\"100%\";d.className=\"ol-unselectable\";Ng(b,d,0);this.g=Dd();this.a=Kg(\"DIV\");this.a.className=\"ol-unselectable\";d=this.a.style;d.position=\"absolute\";d.width=\"100%\";d.height=\"100%\";C(this.a,\"touchstart\",xc);Ng(b,this.a,0);this.c=!0}y(lq,Ak);lq.prototype.X=function(){Og(this.a);lq.da.X.call(this)};\nlq.prototype.gf=function(b){if(b instanceof Sl)b=new gq(b);else if(b instanceof F)b=new hq(b);else if(b instanceof H)b=new jq(b);else return null;return b};function mq(b,c,d){var e=b.j;if(ed(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,m=b.b,n=m.canvas;ik(b.g,n.width/2,n.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new jm(m,g,f,b.g,k);e.o(new dk(c,e,b,d,m,null));wm(b)}}lq.prototype.V=function(){return\"dom\"};\nlq.prototype.Me=function(b){if(b){var c=this.j;if(ed(c,\"precompose\")||ed(c,\"postcompose\")){var c=this.b.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}mq(this,\"precompose\",b);c=b.layerStatesArray;qb(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=Dk(this,g),Ng(this.a,g.target,e),fk(h,d)&&\"ready\"==h.S?g.j(b,h)&&g.l(b,h):g.g();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],Og(g.target));this.c||(ih(this.a,!0),this.c=!0);Bk(b);Ek(this,\nb);b.postRenderFunctions.push(Ck);mq(this,\"postcompose\",b)}else this.c&&(ih(this.a,!1),this.c=!1)};function nq(b){this.a=b}function oq(b){this.a=b}y(oq,nq);oq.prototype.V=function(){return 35632};function pq(b){this.a=b}y(pq,nq);pq.prototype.V=function(){return 35633};function qq(){this.a=\"precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}\"}y(qq,oq);ea(qq);\nfunction rq(){this.a=\"varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}\"}y(rq,pq);ea(rq);\nfunction sq(b,c){this.l=b.getUniformLocation(c,\"j\");this.B=b.getUniformLocation(c,\"i\");this.j=b.getUniformLocation(c,\"k\");this.i=b.getUniformLocation(c,\"h\");this.a=b.getAttribLocation(c,\"e\");this.c=b.getAttribLocation(c,\"f\");this.f=b.getAttribLocation(c,\"c\");this.b=b.getAttribLocation(c,\"g\");this.g=b.getAttribLocation(c,\"d\")};function tq(b){this.a=void 0!==b?b:[]};function uq(b,c){this.u=b;this.a=c;this.c={};this.j={};this.g={};this.l=this.B=this.f=this.i=null;(this.b=vb(va,\"OES_element_index_uint\"))&&c.getExtension(\"OES_element_index_uint\");C(this.u,\"webglcontextlost\",this.Hn,!1,this);C(this.u,\"webglcontextrestored\",this.In,!1,this)}\nfunction vq(b,c,d){var e=b.a,f=d.a,g=w(d);if(g in b.c)e.bindBuffer(c,b.c[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.b?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.c[g]={Eb:d,buffer:h}}}function wq(b,c){var d=b.a,e=w(c),f=b.c[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.c[e]}l=uq.prototype;\nl.X=function(){var b=this.a;b.isContextLost()||(Ib(this.c,function(c){b.deleteBuffer(c.buffer)}),Ib(this.g,function(c){b.deleteProgram(c)}),Ib(this.j,function(c){b.deleteShader(c)}),b.deleteFramebuffer(this.f),b.deleteRenderbuffer(this.l),b.deleteTexture(this.B))};l.Gn=function(){return this.a};\nfunction xq(b){if(!b.f){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=yq(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.f=d;\nb.B=e;b.l=f}return b.f}function zq(b,c){var d=w(c);if(d in b.j)return b.j[d];var e=b.a,f=e.createShader(c.V());e.shaderSource(f,c.a);e.compileShader(f);return b.j[d]=f}function Aq(b,c,d){var e=w(c)+\"/\"+w(d);if(e in b.g)return b.g[e];var f=b.a,g=f.createProgram();f.attachShader(g,zq(b,c));f.attachShader(g,zq(b,d));f.linkProgram(g);return b.g[e]=g}l.Hn=function(){Rb(this.c);Rb(this.j);Rb(this.g);this.l=this.B=this.f=this.i=null};l.In=function(){};\nl.Ge=function(b){if(b==this.i)return!1;this.a.useProgram(b);this.i=b;return!0};function Bq(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function yq(b,c,d){var e=Bq(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e}\nfunction Cq(b,c){var d=Bq(b,33071,33071);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,c);return d};function Dq(b,c){this.G=this.D=void 0;this.B=me(c);this.C=[];this.j=[];this.oa=void 0;this.g=[];this.f=[];this.U=this.S=void 0;this.c=[];this.ia=this.l=null;this.T=void 0;this.fb=Fd();this.Cb=Fd();this.ea=this.Z=void 0;this.Db=Fd();this.va=this.eb=this.ga=void 0;this.xa=[];this.i=[];this.a=[];this.A=null;this.b=[];this.u=[];this.pa=void 0}y(Dq,ck);\nfunction Eq(b,c){var d=b.A,e=b.l,f=b.xa,g=b.i,h=c.a;return function(){if(!h.isContextLost()){var b,m;b=0;for(m=f.length;b<m;++b)h.deleteTexture(f[b]);b=0;for(m=g.length;b<m;++b)h.deleteTexture(g[b])}wq(c,d);wq(c,e)}}\nfunction Fq(b,c,d,e){var f=b.D,g=b.G,h=b.oa,k=b.S,m=b.U,n=b.T,p=b.Z,q=b.ea,r=b.ga?1:0,t=b.eb,x=b.va,z=b.pa,B=Math.cos(t),t=Math.sin(t),A=b.c.length,v=b.a.length,O,K,I,G,la,Ea;for(O=0;O<d;O+=e)la=c[O]-b.B[0],Ea=c[O+1]-b.B[1],K=v/8,I=-x*f,G=-x*(h-g),b.a[v++]=la,b.a[v++]=Ea,b.a[v++]=I*B-G*t,b.a[v++]=I*t+G*B,b.a[v++]=p/m,b.a[v++]=(q+h)/k,b.a[v++]=n,b.a[v++]=r,I=x*(z-f),G=-x*(h-g),b.a[v++]=la,b.a[v++]=Ea,b.a[v++]=I*B-G*t,b.a[v++]=I*t+G*B,b.a[v++]=(p+z)/m,b.a[v++]=(q+h)/k,b.a[v++]=n,b.a[v++]=r,I=x*(z-f),\nG=x*g,b.a[v++]=la,b.a[v++]=Ea,b.a[v++]=I*B-G*t,b.a[v++]=I*t+G*B,b.a[v++]=(p+z)/m,b.a[v++]=q/k,b.a[v++]=n,b.a[v++]=r,I=-x*f,G=x*g,b.a[v++]=la,b.a[v++]=Ea,b.a[v++]=I*B-G*t,b.a[v++]=I*t+G*B,b.a[v++]=p/m,b.a[v++]=q/k,b.a[v++]=n,b.a[v++]=r,b.c[A++]=K,b.c[A++]=K+1,b.c[A++]=K+2,b.c[A++]=K,b.c[A++]=K+2,b.c[A++]=K+3}Dq.prototype.Fb=function(b,c){this.b.push(this.c.length);this.u.push(c);var d=b.ja(),e=b.ra();Fq(this,d,d.length,e)};\nDq.prototype.Gb=function(b,c){this.b.push(this.c.length);this.u.push(c);var d=b.ja(),e=b.ra();Fq(this,d,d.length,e)};function Gq(b,c){var d=c.a;b.C.push(b.c.length);b.j.push(b.c.length);b.A=new tq(b.a);vq(c,34962,b.A);b.l=new tq(b.c);vq(c,34963,b.l);var e={};Hq(b.xa,b.g,e,d);Hq(b.i,b.f,e,d);b.D=void 0;b.G=void 0;b.oa=void 0;b.g=null;b.f=null;b.S=void 0;b.U=void 0;b.c=null;b.T=void 0;b.Z=void 0;b.ea=void 0;b.ga=void 0;b.eb=void 0;b.va=void 0;b.a=null;b.pa=void 0}\nfunction Hq(b,c,d,e){var f,g,h,k=c.length;for(h=0;h<k;++h)f=c[h],g=w(f).toString(),g in d?f=d[g]:(f=Cq(e,f),d[g]=f),b[h]=f}\nfunction Iq(b,c,d,e,f,g,h,k,m,n,p){var q=c.a;vq(c,34962,b.A);vq(c,34963,b.l);var r=qq.Yb(),t=rq.Yb(),t=Aq(c,r,t);b.ia?r=b.ia:(r=new sq(q,t),b.ia=r);c.Ge(t);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,1,5126,!1,32,24);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,\n1,5126,!1,32,28);t=b.Db;ik(t,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.B[0]),-(d[1]-b.B[1]));d=b.Cb;e=2/g[0];g=2/g[1];Hd(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.fb;Hd(g);0!==f&&Md(g,-f);q.uniformMatrix4fv(r.i,!1,t);q.uniformMatrix4fv(r.B,!1,d);q.uniformMatrix4fv(r.l,!1,g);q.uniform1f(r.j,h);var x;if(void 0===m)Jq(b,q,c,k,b.xa,b.C);else{if(n)a:{f=c.b?5125:5123;c=c.b?4:2;g=b.b.length-1;for(h=b.i.length-1;0<=h;--h)for(q.bindTexture(3553,b.i[h]),n=0<h?b.j[h-1]:0,t=b.j[h];0<=g&&b.b[g]>=n;){x=b.b[g];d=b.u[g];\ne=w(d).toString();if(void 0===k[e]&&d.W()&&(void 0===p||pe(p,d.W().J()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,t-x,f,x*c),t=m(d))){b=t;break a}t=x;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Jq(b,q,c,k,b.i,b.j),b=(b=m(null))?b:void 0;x=b}q.disableVertexAttribArray(r.f);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.b);return x}\nfunction Jq(b,c,d,e,f,g){var h=d.b?5125:5123;d=d.b?4:2;if(Qb(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var m=g[b];c.drawElements(4,m-k,h,k*d);k=m}}else{k=0;var n,m=0;for(n=f.length;m<n;++m){c.bindTexture(3553,f[m]);for(var p=0<m?g[m-1]:0,q=g[m],r=p;k<b.b.length&&b.b[k]<=q;){var t=w(b.u[k]).toString();void 0!==e[t]?(r!==p&&c.drawElements(4,p-r,h,r*d),p=r=k===b.b.length-1?q:b.b[k+1]):p=k===b.b.length-1?q:b.b[k+1];k++}r!==p&&c.drawElements(4,p-r,h,r*d)}}}\nDq.prototype.vb=function(b){var c=b.Xb(),d=b.fc(1),e=b.qd(),f=b.ze(1),g=b.A,h=b.Ca(),k=b.D,m=b.u,n=b.Bb();b=b.i;var p;0===this.g.length?this.g.push(d):(p=this.g[this.g.length-1],w(p)!=w(d)&&(this.C.push(this.c.length),this.g.push(d)));0===this.f.length?this.f.push(f):(p=this.f[this.f.length-1],w(p)!=w(f)&&(this.j.push(this.c.length),this.f.push(f)));this.D=c[0];this.G=c[1];this.oa=n[1];this.S=e[1];this.U=e[0];this.T=g;this.Z=h[0];this.ea=h[1];this.eb=m;this.ga=k;this.va=b;this.pa=n[0]};\nfunction Kq(b,c,d){this.j=c;this.i=b;this.g=d;this.c={}}function Lq(b,c){var d=[],e;for(e in b.c)d.push(Eq(b.c[e],c));return ye.apply(null,d)}function Mq(b,c){for(var d in b.c)Gq(b.c[d],c)}Kq.prototype.a=function(b,c){var d=this.c[c];void 0===d&&(d=new Nq[c](this.i,this.j),this.c[c]=d);return d};Kq.prototype.Ka=function(){return Qb(this.c)};Kq.prototype.b=function(b,c,d,e,f,g,h,k){var m,n;g=0;for(m=Cm.length;g<m;++g)n=this.c[Cm[g]],void 0!==n&&Iq(n,b,c,d,e,f,h,k,void 0,!1)};\nfunction Oq(b,c,d,e,f,g,h,k,m,n){var p=Pq,q,r;for(q=Cm.length-1;0<=q;--q)if(r=b.c[Cm[q]],void 0!==r&&(r=Iq(r,c,d,e,f,p,g,h,k,m,n)))return r}Kq.prototype.f=function(b,c,d,e,f,g,h,k,m,n){var p=c.a;p.bindFramebuffer(p.FRAMEBUFFER,xq(c));var q;void 0!==this.g&&(q=Sd(Zd(b),e*this.g));return Oq(this,c,b,e,f,k,m,function(b){var c=new Uint8Array(4);p.readPixels(0,0,1,1,p.RGBA,p.UNSIGNED_BYTE,c);if(0<c[3]&&(b=n(b)))return b},!0,q)};\nfunction Qq(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,xq(d));return void 0!==Oq(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}var Nq={Image:Dq},Pq=[1,1];function Rq(b,c,d,e,f,g){this.c=b;this.g=c;this.f=g;this.l=f;this.i=e;this.j=d;this.b=null;this.a={}}y(Rq,ck);l=Rq.prototype;l.ld=function(b,c){var d=b.toString(),e=this.a[d];void 0!==e?e.push(c):this.a[d]=[c]};l.Fc=function(){};l.hf=function(b,c){var d=(0,c.g)(b);if(d&&pe(this.f,d.J())){var e=c.a;void 0===e&&(e=0);this.ld(e,function(b){b.$a(c.j,c.f);b.vb(c.b);b.ab(c.c);var e=Sq[d.V()];e&&e.call(b,d,null)})}};\nl.Xd=function(b,c){var d=b.f,e,f;e=0;for(f=d.length;e<f;++e){var g=d[e],h=Sq[g.V()];h&&h.call(this,g,c)}};l.Gb=function(b,c){var d=this.c,e=(new Kq(1,this.f)).a(0,\"Image\");e.vb(this.b);e.Gb(b,c);Gq(e,d);Iq(e,this.c,this.g,this.j,this.i,this.l,1,{},void 0,!1);Eq(e,d)()};l.Wb=function(){};l.Gc=function(){};l.Fb=function(b,c){var d=this.c,e=(new Kq(1,this.f)).a(0,\"Image\");e.vb(this.b);e.Fb(b,c);Gq(e,d);Iq(e,this.c,this.g,this.j,this.i,this.l,1,{},void 0,!1);Eq(e,d)()};l.Hc=function(){};l.Ic=function(){};\nl.Hb=function(){};l.$a=function(){};l.vb=function(b){this.b=b};l.ab=function(){};var Sq={Point:Rq.prototype.Gb,MultiPoint:Rq.prototype.Fb,GeometryCollection:Rq.prototype.Xd};function Tq(){this.a=\"precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}\"}y(Tq,oq);ea(Tq);function Uq(){this.a=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}\"}y(Uq,pq);ea(Uq);\nfunction Vq(b,c){this.b=b.getUniformLocation(c,\"f\");this.f=b.getUniformLocation(c,\"e\");this.j=b.getUniformLocation(c,\"d\");this.g=b.getUniformLocation(c,\"g\");this.a=b.getAttribLocation(c,\"b\");this.c=b.getAttribLocation(c,\"c\")};function Wq(b,c){lk.call(this,c);this.b=b;this.U=new tq([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.g=this.lb=null;this.j=void 0;this.B=Dd();this.A=Fd();this.u=null}y(Wq,lk);\nfunction Xq(b,c,d){var e=b.b.b;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(sa(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.g,b.lb));c=yq(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.lb=c;b.g=f;b.j=d}else e.bindFramebuffer(36160,b.g)}\nWq.prototype.lh=function(b,c,d){Yq(this,\"precompose\",d,b);vq(d,34962,this.U);var e=d.a,f=Tq.Yb(),g=Uq.Yb(),f=Aq(d,f,g);this.u?g=this.u:this.u=g=new Vq(e,f);d.Ge(f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.c),e.vertexAttribPointer(g.c,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.j,!1,this.B);e.uniformMatrix4fv(g.f,!1,this.A);e.uniform1f(g.b,c.opacity);e.bindTexture(3553,this.lb);e.drawArrays(5,0,4);Yq(this,\"postcompose\",d,b)};\nfunction Yq(b,c,d,e){b=b.a;if(ed(b,c)){var f=e.viewState;b.o(new dk(c,b,new Rq(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Wq.prototype.Bf=function(){this.g=this.lb=null;this.j=void 0};function Zq(b,c){Wq.call(this,b,c);this.l=this.i=this.f=null}y(Zq,Wq);function $q(b,c){var d=c.a();return Cq(b.b.b,d)}Zq.prototype.Za=function(b,c,d,e){var f=this.a;return f.fa().xe(b,c.viewState.resolution,c.viewState.rotation,c.skippedFeatureUids,function(b){return d.call(e,b,f)})};\nZq.prototype.Cf=function(b,c){var d=this.b.b,e=b.pixelRatio,f=b.viewState,g=f.center,h=f.resolution,k=f.rotation,m=this.f,n=this.lb,p=this.a.fa(),q=b.viewHints,r=b.extent;void 0!==c.extent&&(r=oe(r,c.extent));q[0]||q[1]||je(r)||(f=p.C(r,h,e,f.projection))&&nk(this,f)&&(m=f,n=$q(this,f),this.lb&&b.postRenderFunctions.push(sa(function(b,c){b.isContextLost()||b.deleteTexture(c)},d,this.lb)));m&&(d=this.b.g.u,ar(this,d.width,d.height,e,g,h,k,m.J()),this.l=null,e=this.B,Hd(e),Ld(e,1,-1),Kd(e,0,-1),this.f=\nm,this.lb=n,pk(b.attributions,m.j),qk(b,p));return!0};function ar(b,c,d,e,f,g,h,k){c*=g;d*=g;b=b.A;Hd(b);Ld(b,2*e/c,2*e/d);Md(b,-h);Kd(b,k[0]-f[0],k[1]-f[1]);Ld(b,(k[2]-k[0])/2,(k[3]-k[1])/2);Kd(b,1,1)}Zq.prototype.we=function(b,c){return void 0!==this.Za(b,c,ue,this)};\nZq.prototype.sc=function(b,c,d,e){if(this.f&&this.f.a())if(this.a.fa()instanceof Op){if(b=b.slice(),kk(c.pixelToCoordinateMatrix,b,b),this.Za(b,c,ue,this))return d.call(e,this.a)}else{var f=[this.f.a().width,this.f.a().height];if(!this.l){var g=c.size;c=Dd();Hd(c);Kd(c,-1,-1);Ld(c,2/g[0],2/g[1]);Kd(c,0,g[1]);Ld(c,1,-1);g=Dd();Jd(this.A,g);var h=Dd();Hd(h);Kd(h,0,f[1]);Ld(h,1,-1);Ld(h,f[0]/2,f[1]/2);Kd(h,1,1);var k=Dd();Id(h,g,k);Id(k,c,k);this.l=k}c=[0,0];kk(this.l,b,c);if(!(0>c[0]||c[0]>f[0]||0>\nc[1]||c[1]>f[1])&&(this.i||(this.i=Pi(1,1)),this.i.clearRect(0,0,1,1),this.i.drawImage(this.f.a(),c[0],c[1],1,1,0,0,1,1),0<this.i.getImageData(0,0,1,1).data[3]))return d.call(e,this.a)}};function br(){this.a=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}y(br,oq);ea(br);function cr(){this.a=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}\"}y(cr,pq);ea(cr);function dr(b,c){this.b=b.getUniformLocation(c,\"e\");this.f=b.getUniformLocation(c,\"d\");this.a=b.getAttribLocation(c,\"b\");this.c=b.getAttribLocation(c,\"c\")};function er(b,c){Wq.call(this,b,c);this.G=br.Yb();this.T=cr.Yb();this.f=null;this.D=new tq([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.C=this.i=null;this.l=-1;this.S=[0,0]}y(er,Wq);l=er.prototype;l.X=function(){wq(this.b.g,this.D);er.da.X.call(this)};l.bd=function(b,c,d){var e=this.b;return function(f,g){return Qh(b,c,f,g,function(b){var c=sh(e.c,b.tb());c&&(d[f]||(d[f]={}),d[f][b.a.toString()]=b);return c})}};l.Bf=function(){er.da.Bf.call(this);this.f=null};\nl.Cf=function(b,c,d){var e=this.b,f=d.a,g=b.viewState,h=g.projection,k=this.a,m=k.fa(),n=m.hb(h),p=Kh(n,g.resolution),q=n.$(p),r=m.Pb(p,b.pixelRatio,h),t=r[0]/od(n.Ha(p),this.S)[0],x=q/t,z=m.$d(),B=g.center,A;q==g.resolution?(B=sk(B,q,b.size),A=ne(B,q,g.rotation,b.size)):A=b.extent;q=Hh(n,A,q);if(this.i&&ig(this.i,q)&&this.l==m.c)x=this.C;else{var v=[kg(q),jg(q)],O=Math.pow(2,Math.ceil(Math.log(Math.max(v[0]*r[0],v[1]*r[1]))/Math.LN2)),v=x*O,K=n.Ca(p),I=K[0]+q.a*r[0]*x,x=K[1]+q.c*r[1]*x,x=[I,x,I+\nv,x+v];Xq(this,b,O);f.viewport(0,0,O,O);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);O=Aq(d,this.G,this.T);d.Ge(O);this.f||(this.f=new dr(f,O));vq(d,34962,this.D);f.enableVertexAttribArray(this.f.a);f.vertexAttribPointer(this.f.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.f.c);f.vertexAttribPointer(this.f.c,2,5126,!1,16,8);f.uniform1i(this.f.b,0);d={};d[p]={};var G=this.bd(m,h,d),la=k.b(),O=!0,I=Od(),Ea=new gg(0,0,0,0),L,za,Ra;for(za=q.a;za<=q.f;++za)for(Ra=q.c;Ra<=q.b;++Ra){K=m.Ob(p,\nza,Ra,t,h);if(void 0!==c.extent&&(L=n.Aa(K.a,I),!pe(L,c.extent)))continue;L=K.state;if(2==L){if(sh(e.c,K.tb())){d[p][fg(K.a)]=K;continue}}else if(4==L||3==L&&!la)continue;O=!1;L=Eh(n,K.a,G,Ea,I);L||(K=Gh(n,K.a,Ea,I))&&G(p+1,K)}c=Object.keys(d).map(Number);ob(c);for(var G=new Float32Array(4),Ka,kb,cb,la=0,Ea=c.length;la<Ea;++la)for(Ka in kb=d[c[la]],kb)K=kb[Ka],L=n.Aa(K.a,I),za=2*(L[2]-L[0])/v,Ra=2*(L[3]-L[1])/v,cb=2*(L[0]-x[0])/v-1,L=2*(L[1]-x[1])/v-1,Cd(G,za,Ra,cb,L),f.uniform4fv(this.f.f,G),fr(e,\nK,r,z*t),f.drawArrays(5,0,4);O?(this.i=q,this.C=x,this.l=m.c):(this.C=this.i=null,this.l=-1,b.animate=!0)}rk(b.usedTiles,m,p,q);var Rc=e.l;tk(b,m,n,t,h,A,p,k.a(),function(b){var c;(c=2!=b.state||sh(e.c,b.tb()))||(c=b.tb()in Rc.b);c||uk(Rc,[b,Jh(n,b.a),n.$(b.a[0]),r,z*t])},this);ok(b,m);qk(b,m);f=this.B;Hd(f);Kd(f,(B[0]-x[0])/(x[2]-x[0]),(B[1]-x[1])/(x[3]-x[1]));0!==g.rotation&&Md(f,g.rotation);Ld(f,b.size[0]*g.resolution/(x[2]-x[0]),b.size[1]*g.resolution/(x[3]-x[1]));Kd(f,-.5,-.5);return!0};\nl.sc=function(b,c,d,e){if(this.g){var f=[0,0];kk(this.B,[b[0]/c.size[0],(c.size[1]-b[1])/c.size[1]],f);b=[f[0]*this.j,f[1]*this.j];c=this.b.g.a;c.bindFramebuffer(c.FRAMEBUFFER,this.g);f=new Uint8Array(4);c.readPixels(b[0],b[1],1,1,c.RGBA,c.UNSIGNED_BYTE,f);if(0<f[3])return d.call(e,this.a)}};function gr(b,c){Wq.call(this,b,c);this.l=!1;this.S=-1;this.G=NaN;this.C=Od();this.i=this.f=this.D=null}y(gr,Wq);l=gr.prototype;l.lh=function(b,c,d){this.i=c;var e=b.viewState,f=this.f;f&&!f.Ka()&&f.b(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.rb?b.skippedFeatureUids:{})};l.X=function(){var b=this.f;b&&(Lq(b,this.b.g)(),this.f=null);gr.da.X.call(this)};\nl.Za=function(b,c,d,e){if(this.f&&this.i){var f=c.viewState,g=this.a,h=this.i,k={};return this.f.f(b,this.b.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,h.opacity,h.rb?c.skippedFeatureUids:{},function(b){var c=w(b).toString();if(!(c in k))return k[c]=!0,d.call(e,b,g)})}};l.we=function(b,c){if(this.f&&this.i){var d=c.viewState;return Qq(this.f,b,this.b.g,d.resolution,d.rotation,this.i.opacity,c.skippedFeatureUids)}return!1};\nl.sc=function(b,c,d,e){b=b.slice();kk(c.pixelToCoordinateMatrix,b,b);if(this.we(b,c))return d.call(e,this.a)};l.Cm=function(){mk(this)};\nl.Cf=function(b,c,d){function e(b){var c,d=b.Qb();d?c=d.call(b,n):(d=f.b)&&(c=d(b,n));if(c){if(c){var e,g=!1,d=0;for(e=c.length;d<e;++d)g=Ym(r,b,c[d],Xm(n,p),this.Cm,this)||g;b=g}else b=!1;this.l=this.l||b}}var f=this.a;c=f.fa();pk(b.attributions,c.j);qk(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,m=f.l;if(!this.l&&!k&&g||!m&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,n=k.resolution,p=b.pixelRatio,k=f.c,q=f.a,m=im(f);void 0===m&&(m=Wm);h=Sd(h,q*n);if(!this.l&&this.G==n&&this.S==k&&\nthis.D==m&&Xd(this.C,h))return!0;this.f&&b.postRenderFunctions.push(Lq(this.f,d));this.l=!1;var r=new Kq(.5*n/p,h,f.a);c.Mc(h,n,g);if(m){var t=[];c.ob(h,function(b){t.push(b)},this);ob(t,m);t.forEach(e,this)}else c.ob(h,e,this);Mq(r,d);this.G=n;this.S=k;this.D=m;this.C=h;this.f=r;return!0};function hr(b,c){Ak.call(this,0,c);this.a=Kg(\"CANVAS\");this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.className=\"ol-unselectable\";Ng(b,this.a,0);this.C=this.D=0;this.G=Pi();this.B=!0;this.b=Vi(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new uq(this.a,this.b);C(this.a,\"webglcontextlost\",this.Am,!1,this);C(this.a,\"webglcontextrestored\",this.Bm,!1,this);this.c=new rh;this.A=null;this.l=new Fk(ra(function(b){var c=b[1];b=b[2];\nvar f=c[0]-this.A[0],c=c[1]-this.A[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b},this),function(b){return b[0].tb()});this.S=ra(function(){if(!this.l.Ka()){Jk(this.l);var b=Gk(this.l);fr(this,b[0],b[3],b[4])}},this);this.i=0;ir(this)}y(hr,Ak);\nfunction fr(b,c,d,e){var f=b.b,g=c.tb();if(sh(b.c,g))b=b.c.get(g),f.bindTexture(3553,b.lb),9729!=b.Qg&&(f.texParameteri(3553,10240,9729),b.Qg=9729),9729!=b.Rg&&(f.texParameteri(3553,10240,9729),b.Rg=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.G.canvas,m=b.G;b.D!==d[0]||b.C!==d[1]?(k.width=d[0],k.height=d[1],b.D=d[0],b.C=d[1]):m.clearRect(0,0,d[0],d[1]);m.drawImage(c.Sa(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,6408,\n5121,c.Sa());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.c.set(g,{lb:h,Qg:9729,Rg:9729})}}l=hr.prototype;l.gf=function(b){return b instanceof Sl?new Zq(this,b):b instanceof F?new er(this,b):b instanceof H?new gr(this,b):null};\nfunction jr(b,c,d){var e=b.j;if(ed(e,c)){var f=b.g;b=d.viewState;b=new Rq(f,b.center,b.resolution,b.rotation,d.size,d.extent);e.o(new dk(c,e,b,d,null,f));c=Object.keys(b.a).map(Number);ob(c);var g,h;d=0;for(e=c.length;d<e;++d)for(f=b.a[c[d].toString()],g=0,h=f.length;g<h;++g)f[g](b)}}l.X=function(){var b=this.b;b.isContextLost()||this.c.forEach(function(c){c&&b.deleteTexture(c.lb)});uc(this.g);hr.da.X.call(this)};\nl.tj=function(b,c){for(var d=this.b,e;1024<this.c.nc()-this.i;){if(e=this.c.a.zc)d.deleteTexture(e.lb);else if(+this.c.a.ne==c.index)break;else--this.i;this.c.pop()}};l.V=function(){return\"webgl\"};l.Am=function(b){b.preventDefault();this.c.clear();this.i=0;Ib(this.f,function(b){b.Bf()})};l.Bm=function(){ir(this);this.j.render()};function ir(b){b=b.b;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}\nl.Me=function(b){var c=this.g,d=this.b;if(d.isContextLost())return!1;if(!b)return this.B&&(ih(this.a,!1),this.B=!1),!1;this.A=b.focus;this.c.set((-b.index).toString(),null);++this.i;jr(this,\"precompose\",b);var e=[],f=b.layerStatesArray;qb(f);var g=b.viewState.resolution,h,k,m,n;h=0;for(k=f.length;h<k;++h)n=f[h],fk(n,g)&&\"ready\"==n.S&&(m=Dk(this,n.layer),m.Cf(b,n,c)&&e.push(n));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,\nnull);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)n=e[h],m=Dk(this,n.layer),m.lh(b,n,c);this.B||(ih(this.a,!0),this.B=!0);Bk(b);1024<this.c.nc()-this.i&&b.postRenderFunctions.push(ra(this.tj,this));this.l.Ka()||(b.postRenderFunctions.push(this.S),b.animate=!0);jr(this,\"postcompose\",b);Ek(this,b);b.postRenderFunctions.push(Ck)};\nl.Af=function(b,c,d,e,f,g){var h;if(this.b.isContextLost())return!1;var k=c.viewState,m=c.layerStatesArray,n;for(n=m.length-1;0<=n;--n){h=m[n];var p=h.layer;if(fk(h,k.resolution)&&f.call(g,p)&&(h=Dk(this,p).Za(b,c,d,e)))return h}};l.kh=function(b,c,d,e){var f=!1;if(this.b.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var m=h[k],n=m.layer;if(fk(m,g.resolution)&&d.call(e,n)&&(f=Dk(this,n).we(b,c)))return!0}return f};\nl.jh=function(b,c,d,e,f){if(this.b.isContextLost())return!1;var g=c.viewState,h,k=c.layerStatesArray,m;for(m=k.length-1;0<=m;--m){h=k[m];var n=h.layer;if(fk(h,g.resolution)&&f.call(e,n)&&(h=Dk(this,n).sc(b,c,d,e)))return h}};var kr=[\"canvas\",\"webgl\",\"dom\"];\nfunction S(b){id.call(this);var c=lr(b);this.Ac=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.Bc=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.We=void 0!==b.pixelRatio?b.pixelRatio:Xi;this.Xc=c.logos;this.u=new ii(this.Eo,void 0,this);tc(this,this.u);this.Cb=Dd();this.Xe=Dd();this.Db=0;this.b=null;this.xa=Od();this.C=this.U=null;this.a=Hg(\"DIV\",\"ol-viewport\");this.a.style.position=\"relative\";this.a.style.overflow=\"hidden\";this.a.style.width=\"100%\";\nthis.a.style.height=\"100%\";this.a.style.msTouchAction=\"none\";this.a.style.touchAction=\"none\";bj&&Wg(this.a,\"ol-touch\");this.G=Hg(\"DIV\",\"ol-overlaycontainer\");this.a.appendChild(this.G);this.D=Hg(\"DIV\",\"ol-overlaycontainer-stopevent\");C(this.D,[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"MSPointerDown\",Wj,ac?\"DOMMouseScroll\":\"mousewheel\"],wc);this.a.appendChild(this.D);b=new Oj(this);C(b,Lb(Zj),this.Ig,!1,this);tc(this,b);this.ga=c.keyboardEventTarget;this.A=new Ai;C(this.A,\"key\",this.Hg,!1,this);\ntc(this,this.A);b=new Ii(this.a);C(b,\"mousewheel\",this.Hg,!1,this);tc(this,b);this.g=c.controls;this.f=c.interactions;this.j=c.overlays;this.Z={};this.i=new c.Go(this.a,this);tc(this,this.i);this.fb=new vi;tc(this,this.fb);this.T=this.l=null;this.S=[];this.pa=[];this.va=new Kk(ra(this.lk,this),ra(this.Vk,this));this.ea={};C(this,kd(\"layergroup\"),this.Ak,!1,this);C(this,kd(\"view\"),this.Wk,!1,this);C(this,kd(\"size\"),this.Sk,!1,this);C(this,kd(\"target\"),this.Uk,!1,this);this.I(c.values);this.g.forEach(function(b){b.setMap(this)},\nthis);C(this.g,\"add\",function(b){b.element.setMap(this)},!1,this);C(this.g,\"remove\",function(b){b.element.setMap(null)},!1,this);this.f.forEach(function(b){b.setMap(this)},this);C(this.f,\"add\",function(b){b.element.setMap(this)},!1,this);C(this.f,\"remove\",function(b){b.element.setMap(null)},!1,this);this.j.forEach(this.lg,this);C(this.j,\"add\",function(b){this.lg(b.element)},!1,this);C(this.j,\"remove\",function(b){var c=b.element.Na();void 0!==c&&delete this.Z[c.toString()];b.element.setMap(null)},\n!1,this)}y(S,id);l=S.prototype;l.hj=function(b){this.g.push(b)};l.ij=function(b){this.f.push(b)};l.jg=function(b){this.oc().Pc().push(b)};l.kg=function(b){this.j.push(b)};l.lg=function(b){var c=b.Na();void 0!==c&&(this.Z[c.toString()]=b);b.setMap(this)};l.Ma=function(b){this.render();Array.prototype.push.apply(this.S,arguments)};l.X=function(){Og(this.a);S.da.X.call(this)};l.od=function(b,c,d,e,f){if(this.b)return b=this.Fa(b),this.i.Af(b,this.b,c,void 0!==d?d:null,void 0!==e?e:ue,void 0!==f?f:null)};\nl.Fl=function(b,c,d,e,f){if(this.b)return this.i.jh(b,this.b,c,void 0!==d?d:null,void 0!==e?e:ue,void 0!==f?f:null)};l.Yk=function(b,c,d){if(!this.b)return!1;b=this.Fa(b);return this.i.kh(b,this.b,void 0!==c?c:ue,void 0!==d?d:null)};l.Ij=function(b){return this.Fa(this.Zd(b))};l.Zd=function(b){var c;c=this.a;b=fh(b);c=fh(c);c=new yg(b.x-c.x,b.y-c.y);return[c.x,c.y]};l.wf=function(){return this.get(\"target\")};l.Lc=function(){var b=this.wf();return void 0!==b?Dg(b):null};\nl.Fa=function(b){var c=this.b;return c?(b=b.slice(),kk(c.pixelToCoordinateMatrix,b,b)):null};l.Gj=function(){return this.g};l.$j=function(){return this.j};l.Zj=function(b){b=this.Z[b.toString()];return void 0!==b?b:null};l.Nj=function(){return this.f};l.oc=function(){return this.get(\"layergroup\")};l.Xg=function(){return this.oc().Pc()};l.Oa=function(b){var c=this.b;return c?(b=b.slice(0,2),kk(c.coordinateToPixelMatrix,b,b)):null};l.Ra=function(){return this.get(\"size\")};l.aa=function(){return this.get(\"view\")};\nl.nk=function(){return this.a};l.lk=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][fg(b.a)]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};l.Hg=function(b,c){var d=new Mj(c||b.type,this,b);this.Ig(d)};l.Ig=function(b){if(this.b){this.T=b.coordinate;b.frameState=this.b;var c=this.f.a,d;if(!1!==this.o(b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.b()&&!e.handleEvent(b))break}}};\nl.Qk=function(){var b=this.b,c=this.va;if(!c.Ka()){var d=16,e=d,f=0;b&&(f=b.viewHints,f[0]&&(d=this.Ac?8:0,e=2),f[1]&&(d=this.Bc?8:0,e=2),f=Kb(b.wantedTiles));d*=f;e*=f;c.f<d&&(Jk(c),Lk(c,d,e))}c=this.pa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};l.Sk=function(){this.render()};l.Uk=function(){var b=this.Lc();Hi(this.A);b?(b.appendChild(this.a),Bi(this.A,this.ga?this.ga:b),this.l||(this.l=C(this.fb,\"resize\",this.Uc,!1,this))):(Og(this.a),this.l&&(Zc(this.l),this.l=null));this.Uc()};l.Vk=function(){this.render()};\nl.Xk=function(){this.render()};l.Wk=function(){this.U&&(Zc(this.U),this.U=null);var b=this.aa();b&&(this.U=C(b,\"propertychange\",this.Xk,!1,this));this.render()};l.Bk=function(){this.render()};l.Ck=function(){this.render()};l.Ak=function(){this.C&&(this.C.forEach(Zc),this.C=null);var b=this.oc();b&&(this.C=[C(b,\"propertychange\",this.Ck,!1,this),C(b,\"change\",this.Bk,!1,this)]);this.render()};l.Fo=function(){var b=this.u;ji(b);b.f()};l.render=function(){null!=this.u.wa||this.u.start()};l.yo=function(b){return this.g.remove(b)};\nl.zo=function(b){return this.f.remove(b)};l.Bo=function(b){return this.oc().Pc().remove(b)};l.Co=function(b){return this.j.remove(b)};\nl.Eo=function(b){var c,d,e,f=this.Ra(),g=this.aa(),h=null;if(void 0!==f&&0<f[0]&&0<f[1]&&g&&Sf(g)){var h=g.b.slice(),k=this.oc().nf(),m={};c=0;for(d=k.length;c<d;++c)m[w(k[c].layer)]=k[c];e=Rf(g);h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Cb,extent:null,focus:this.T?this.T:e.center,index:this.Db++,layerStates:m,layerStatesArray:k,logos:Ub(this.Xc),pixelRatio:this.We,pixelToCoordinateMatrix:this.Xe,postRenderFunctions:[],size:f,skippedFeatureUids:this.ea,tileQueue:this.va,time:b,usedTiles:{},\nviewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.S;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=ne(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.i.Me(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.pa,h.postRenderFunctions),0!==this.S.length||h.viewHints[0]||h.viewHints[1]||be(h.extent,this.xa)||(this.o(new ph(\"moveend\",this,h)),Td(h.extent,this.xa)));this.o(new ph(\"postrender\",this,h));ni(this.Qk,this)};\nl.Xh=function(b){this.set(\"layergroup\",b)};l.Uf=function(b){this.set(\"size\",b)};l.Gl=function(b){this.set(\"target\",b)};l.To=function(b){this.set(\"view\",b)};l.fi=function(b){b=w(b).toString();this.ea[b]=!0;this.render()};\nl.Uc=function(){var b=this.Lc();if(b){var c=Cg(b),d=Zb&&b.currentStyle;d&&Sg(Ag(c))&&\"auto\"!=d.width&&\"auto\"!=d.height&&!d.boxSizing?(c=jh(b,d.width,\"width\",\"pixelWidth\"),b=jh(b,d.height,\"height\",\"pixelHeight\"),b=new zg(c,b)):(d=new zg(b.offsetWidth,b.offsetHeight),c=lh(b,\"padding\"),b=oh(b),b=new zg(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom));this.Uf([b.width,b.height])}else this.Uf(void 0)};l.ii=function(b){b=w(b).toString();delete this.ea[b];this.render()};\nfunction lr(b){var c=null;void 0!==b.keyboardEventTarget&&(c=ia(b.keyboardEventTarget)?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||\"boolean\"==typeof b.logo&&b.logo)e[\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC\"]=\n\"http://openlayers.org/\";else{var f=b.logo;ia(f)?e[f]=\"\":ma(f)&&(e[f.src]=f.href)}f=b.layers instanceof Kl?b.layers:new Kl({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new Of;var f=Ak,g;void 0!==b.renderer?ga(b.renderer)?g=b.renderer:ia(b.renderer)&&(g=[b.renderer]):g=kr;var h,k;h=0;for(k=g.length;h<k;++h){var m=g[h];if(\"canvas\"==m){if(Zi){f=dq;break}}else if(\"dom\"==m){f=lq;break}else if(\"webgl\"==m&&Wi){f=hr;break}}var n;void 0!==b.controls?n=ga(b.controls)?new og(b.controls.slice()):\nb.controls:n=Zh();var p;void 0!==b.interactions?p=ga(b.interactions)?new og(b.interactions.slice()):b.interactions:p=Jl();b=void 0!==b.overlays?ga(b.overlays)?new og(b.overlays.slice()):b.overlays:new og;return{controls:n,interactions:p,keyboardEventTarget:c,logos:e,overlays:b,Go:f,values:d}}Rl();function mr(b){id.call(this);this.wa=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.l=void 0!==b.stopEvent?b.stopEvent:!0;this.b=Hg(\"DIV\",{\"class\":\"ol-overlay-container\"});this.b.style.position=\"absolute\";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.j=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={Td:\"\",oe:\"\",Ne:\"\",Oe:\"\",visible:!0};this.f=null;C(this,kd(\"element\"),this.wk,!1,this);C(this,kd(\"map\"),this.Hk,!1,this);C(this,\nkd(\"offset\"),this.Mk,!1,this);C(this,kd(\"position\"),this.Ok,!1,this);C(this,kd(\"positioning\"),this.Pk,!1,this);void 0!==b.element&&this.Uh(b.element);this.Zh(void 0!==b.offset?b.offset:[0,0]);this.bi(void 0!==b.positioning?b.positioning:\"top-left\");void 0!==b.position&&this.xf(b.position)}y(mr,id);l=mr.prototype;l.re=function(){return this.get(\"element\")};l.Na=function(){return this.wa};l.se=function(){return this.get(\"map\")};l.Eg=function(){return this.get(\"offset\")};l.Yg=function(){return this.get(\"position\")};\nl.Fg=function(){return this.get(\"positioning\")};l.wk=function(){Mg(this.b);var b=this.re();b&&Lg(this.b,b)};l.Hk=function(){this.f&&(Og(this.b),Zc(this.f),this.f=null);var b=this.se();b&&(this.f=C(b,\"postrender\",this.render,!1,this),nr(this),b=this.l?b.D:b.G,this.i?Ng(b,this.b,0):Lg(b,this.b))};l.render=function(){nr(this)};l.Mk=function(){nr(this)};\nl.Ok=function(){nr(this);if(void 0!==this.get(\"position\")&&this.autoPan){var b=this.se();if(void 0!==b&&b.Lc()){var c=or(b.Lc(),b.Ra()),d=this.re(),e=d.offsetWidth,f=d.currentStyle||window.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||window.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=or(d,[e,f]),d=this.j;Xd(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&(c[0]=\nMath.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.aa().Ta(),e=b.Oa(d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.Ma(Zf(this.g))),b.aa().jb(b.Fa(c)))}}};l.Pk=function(){nr(this)};l.Uh=function(b){this.set(\"element\",b)};l.setMap=function(b){this.set(\"map\",b)};l.Zh=function(b){this.set(\"offset\",b)};l.xf=function(b){this.set(\"position\",b)};\nfunction or(b,c){var d=Cg(b),e=new yg(0,0),f;f=d?Cg(d):document;f=!Zb||9<=lc||Sg(Ag(f))?f.documentElement:f.body;b!=f&&(f=eh(b),d=Tg(Ag(d)),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}l.bi=function(b){this.set(\"positioning\",b)};function pr(b,c){b.a.visible!==c&&(ih(b.b,c),b.a.visible=c)}\nfunction nr(b){var c=b.se(),d=b.Yg();if(void 0!==c&&c.b&&void 0!==d){var d=c.Oa(d),e=c.Ra(),c=b.b.style,f=b.Eg(),g=b.Fg(),h=f[0],f=f[1];if(\"bottom-right\"==g||\"center-right\"==g||\"top-right\"==g)\"\"!==b.a.oe&&(b.a.oe=c.left=\"\"),h=Math.round(e[0]-d[0]-h)+\"px\",b.a.Ne!=h&&(b.a.Ne=c.right=h);else{\"\"!==b.a.Ne&&(b.a.Ne=c.right=\"\");if(\"bottom-center\"==g||\"center-center\"==g||\"top-center\"==g)h-=gh(b.b).width/2;h=Math.round(d[0]+h)+\"px\";b.a.oe!=h&&(b.a.oe=c.left=h)}if(\"bottom-left\"==g||\"bottom-center\"==g||\"bottom-right\"==\ng)\"\"!==b.a.Oe&&(b.a.Oe=c.top=\"\"),d=Math.round(e[1]-d[1]-f)+\"px\",b.a.Td!=d&&(b.a.Td=c.bottom=d);else{\"\"!==b.a.Td&&(b.a.Td=c.bottom=\"\");if(\"center-left\"==g||\"center-center\"==g||\"center-right\"==g)f-=gh(b.b).height/2;d=Math.round(d[1]+f)+\"px\";b.a.Oe!=d&&(b.a.Oe=c.top=d)}pr(b,!0)}else pr(b,!1)};function qr(b){b=b?b:{};this.j=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.j=!1);var c=b.className?b.className:\"ol-overviewmap\",d=b.tipLabel?b.tipLabel:\"Overview map\",e=b.collapseLabel?b.collapseLabel:\"\\u00ab\";this.A=ia(e)?Hg(\"SPAN\",{},e):e;e=b.label?b.label:\"\\u00bb\";this.C=ia(e)?Hg(\"SPAN\",{},e):e;d=Hg(\"BUTTON\",{type:\"button\",title:d},this.i&&!this.j?this.A:this.C);C(d,\"click\",this.Rl,!1,this);var e=Hg(\"DIV\",\"ol-overviewmap-map\"),f=this.b=new S({controls:new og,\ninteractions:new og,target:e,view:b.view});b.layers&&b.layers.forEach(function(b){f.jg(b)},this);var g=Hg(\"DIV\",\"ol-overviewmap-box\");this.l=new mr({position:[0,0],positioning:\"bottom-left\",element:g});this.b.kg(this.l);c=Hg(\"DIV\",c+\" ol-unselectable ol-control\"+(this.j&&this.i?\" ol-collapsed\":\"\")+(this.i?\"\":\" ol-uncollapsible\"),e,d);qh.call(this,{element:c,render:b.render?b.render:rr,target:b.target})}y(qr,qh);l=qr.prototype;\nl.setMap=function(b){var c=this.a;b!==c&&(c&&(c=c.aa())&&Yc(c,kd(\"rotation\"),this.ie,!1,this),qr.da.setMap.call(this,b),b&&(this.u.push(C(b,\"propertychange\",this.Ik,!1,this)),0===this.b.Xg().$b()&&this.b.Xh(b.oc()),b=b.aa()))&&(C(b,kd(\"rotation\"),this.ie,!1,this),Sf(b)&&(this.b.Uc(),sr(this)))};l.Ik=function(b){\"view\"===b.key&&((b=b.oldValue)&&Yc(b,kd(\"rotation\"),this.ie,!1,this),b=this.a.aa(),C(b,kd(\"rotation\"),this.ie,!1,this))};l.ie=function(){this.b.aa().te(this.a.aa().Ea())};\nfunction rr(){var b=this.a,c=this.b;if(b.b&&c.b){var d=b.Ra(),b=b.aa().Zc(d),e=c.Ra(),d=c.aa().Zc(e),f=c.Oa(he(b)),c=c.Oa(fe(b)),c=new zg(Math.abs(f[0]-c[0]),Math.abs(f[1]-c[1])),f=e[0],e=e[1];c.width<.1*f||c.height<.1*e||c.width>.75*f||c.height>.75*e?sr(this):Xd(d,b)||(b=this.b,d=this.a.aa(),b.aa().jb(d.Ta()))}tr(this)}function sr(b){var c=b.a;b=b.b;var d=c.Ra(),c=c.aa().Zc(d),d=b.Ra();b=b.aa();qe(c,1/(.1*Math.pow(2,Math.log(7.5)/Math.LN2/2)));b.jf(c,d)}\nfunction tr(b){var c=b.a,d=b.b;if(c.b&&d.b){var e=c.Ra(),f=c.aa(),g=d.aa();d.Ra();var c=f.Ea(),h=b.l,d=b.l.re(),f=f.Zc(e),e=g.$(),g=ee(f),f=ge(f),k;if(b=b.a.aa().Ta())k=[g[0]-b[0],g[1]-b[1]],wd(k,c),rd(k,b);h.xf(k);d&&(k=new zg(Math.abs((g[0]-f[0])/e),Math.abs((f[1]-g[1])/e)),c=Sg(Ag(Cg(d))),!Zb||jc(\"10\")||c&&jc(\"8\")?(d=d.style,ac?d.MozBoxSizing=\"border-box\":bc?d.WebkitBoxSizing=\"border-box\":d.boxSizing=\"border-box\",d.width=Math.max(k.width,0)+\"px\",d.height=Math.max(k.height,0)+\"px\"):(b=d.style,c?\n(c=lh(d,\"padding\"),d=oh(d),b.pixelWidth=k.width-d.left-c.left-c.right-d.right,b.pixelHeight=k.height-d.top-c.top-c.bottom-d.bottom):(b.pixelWidth=k.width,b.pixelHeight=k.height)))}}l.Rl=function(b){b.preventDefault();ur(this)};function ur(b){Yg(b.element,\"ol-collapsed\");b.j?Pg(b.A,b.C):Pg(b.C,b.A);b.j=!b.j;var c=b.b;b.j||c.b||(c.Uc(),sr(b),Xc(c,\"postrender\",function(){tr(this)},!1,b))}l.Ql=function(){return this.i};\nl.Tl=function(b){this.i!==b&&(this.i=b,Yg(this.element,\"ol-uncollapsible\"),!b&&this.j&&ur(this))};l.Sl=function(b){this.i&&this.j!==b&&ur(this)};l.Pl=function(){return this.j};l.ak=function(){return this.b};function vr(b){b=b?b:{};var c=b.className?b.className:\"ol-scale-line\";this.l=Hg(\"DIV\",c+\"-inner\");this.i=Hg(\"DIV\",c+\" ol-unselectable\",this.l);this.C=null;this.A=void 0!==b.minWidth?b.minWidth:64;this.b=!1;this.S=void 0;this.D=\"\";this.j=null;qh.call(this,{element:this.i,render:b.render?b.render:wr,target:b.target});C(this,kd(\"units\"),this.Z,!1,this);this.T(b.units||\"metric\")}y(vr,qh);var xr=[1,2,5];vr.prototype.G=function(){return this.get(\"units\")};\nfunction wr(b){(b=b.frameState)?this.C=b.viewState:this.C=null;yr(this)}vr.prototype.Z=function(){yr(this)};vr.prototype.T=function(b){this.set(\"units\",b)};\nfunction yr(b){var c=b.C;if(c){var d=c.center,e=c.projection,c=e.getPointResolution(c.resolution,d),f=e.c,g=b.G();\"degrees\"!=f||\"metric\"!=g&&\"imperial\"!=g&&\"us\"!=g&&\"nautical\"!=g?\"degrees\"!=f&&\"degrees\"==g?(b.j||(b.j=Je(e,Fe(\"EPSG:4326\"))),d=Math.cos(Wa(b.j(d)[1])),e=Be.radius,e/=Ce[f],c*=180/(Math.PI*d*e)):b.j=null:(b.j=null,d=Math.cos(Wa(d[1])),c*=Math.PI*d*Be.radius/180);d=b.A*c;f=\"\";\"degrees\"==g?d<1/60?(f=\"\\u2033\",c*=3600):1>d?(f=\"\\u2032\",c*=60):f=\"\\u00b0\":\"imperial\"==g?.9144>d?(f=\"in\",c/=.0254):\n1609.344>d?(f=\"ft\",c/=.3048):(f=\"mi\",c/=1609.344):\"nautical\"==g?(c/=1852,f=\"nm\"):\"metric\"==g?1>d?(f=\"mm\",c*=1E3):1E3>d?f=\"m\":(f=\"km\",c/=1E3):\"us\"==g&&(.9144>d?(f=\"in\",c*=39.37):1609.344>d?(f=\"ft\",c/=.30480061):(f=\"mi\",c/=1609.3472));for(d=3*Math.floor(Math.log(b.A*c)/Math.log(10));;){e=xr[d%3]*Math.pow(10,Math.floor(d/3));g=Math.round(e/c);if(isNaN(g)){ih(b.i,!1);b.b=!1;return}if(g>=b.A)break;++d}c=e+\" \"+f;b.D!=c&&(b.l.innerHTML=c,b.D=c);b.S!=g&&(b.l.style.width=g+\"px\",b.S=g);b.b||(ih(b.i,!0),b.b=\n!0)}else b.b&&(ih(b.i,!1),b.b=!1)};function zr(b){pc.call(this);this.c=b;this.a={}}y(zr,pc);var Ar=[];zr.prototype.Qa=function(b,c,d,e){ga(c)||(c&&(Ar[0]=c.toString()),c=Ar);for(var f=0;f<c.length;f++){var g=C(b,c[f],d||this.handleEvent,e||!1,this.c||this);if(!g)break;this.a[g.key]=g}return this};\nzr.prototype.Vf=function(b,c,d,e,f){if(ga(c))for(var g=0;g<c.length;g++)this.Vf(b,c[g],d,e,f);else d=d||this.handleEvent,f=f||this.c||this,d=Qc(d),e=!!e,c=Ec(b)?Lc(b.zb,String(c),d,e,f):b?(b=Tc(b))?Lc(b,c,d,e,f):null:null,c&&(Zc(c),delete this.a[c.key]);return this};function Br(b){Ib(b.a,function(b,d){this.a.hasOwnProperty(d)&&Zc(b)},b);b.a={}}zr.prototype.X=function(){zr.da.X.call(this);Br(this)};zr.prototype.handleEvent=function(){throw Error(\"EventHandler.handleEvent not implemented\");};function Cr(b,c,d){cd.call(this);this.target=b;this.handle=c||b;this.a=d||new $g(NaN,NaN,NaN,NaN);this.j=Cg(b);this.c=new zr(this);tc(this,this.c);this.g=this.f=this.B=this.l=this.screenY=this.screenX=this.clientY=this.clientX=0;this.b=!1;C(this.handle,[\"touchstart\",\"mousedown\"],this.gi,!1,this)}y(Cr,cd);var Dr=Zb||ac&&jc(\"1.9.3\");l=Cr.prototype;\nl.X=function(){Cr.da.X.call(this);Yc(this.handle,[\"touchstart\",\"mousedown\"],this.gi,!1,this);Br(this.c);Dr&&this.j.releaseCapture();this.handle=this.target=null};\nl.gi=function(b){var c=\"mousedown\"==b.type;if(this.b||c&&!Cc(b))this.o(\"earlycancel\");else if(this.o(new Er(\"start\",this,b.clientX,b.clientY))){this.b=!0;b.preventDefault();var c=this.j,d=c.documentElement,e=!Dr;this.c.Qa(c,[\"touchmove\",\"mousemove\"],this.Lk,e);this.c.Qa(c,[\"touchend\",\"mouseup\"],this.Yd,e);Dr?(d.setCapture(!1),this.c.Qa(d,\"losecapture\",this.Yd)):this.c.Qa(c?c.parentWindow||c.defaultView:window,\"blur\",this.Yd);this.u&&this.c.Qa(this.u,\"scroll\",this.Nn,e);this.clientX=this.l=b.clientX;\nthis.clientY=this.B=b.clientY;this.screenX=b.screenX;this.screenY=b.screenY;this.f=this.target.offsetLeft;this.g=this.target.offsetTop;this.i=Tg(Ag(this.j))}};l.Yd=function(b){Br(this.c);Dr&&this.j.releaseCapture();this.b?(this.b=!1,this.o(new Er(\"end\",this,b.clientX,b.clientY,0,Fr(this,this.f),Gr(this,this.g)))):this.o(\"earlycancel\")};\nl.Lk=function(b){var c=1*(b.clientX-this.clientX),d=b.clientY-this.clientY;this.clientX=b.clientX;this.clientY=b.clientY;this.screenX=b.screenX;this.screenY=b.screenY;if(!this.b){var e=this.l-this.clientX,f=this.B-this.clientY;if(0<e*e+f*f)if(this.o(new Er(\"start\",this,b.clientX,b.clientY)))this.b=!0;else{this.ia||this.Yd(b);return}}d=Hr(this,c,d);c=d.x;d=d.y;this.b&&this.o(new Er(\"beforedrag\",this,b.clientX,b.clientY,0,c,d))&&(Ir(this,b,c,d),b.preventDefault())};\nfunction Hr(b,c,d){var e=Tg(Ag(b.j));c+=e.x-b.i.x;d+=e.y-b.i.y;b.i=e;b.f+=c;b.g+=d;return new yg(Fr(b,b.f),Gr(b,b.g))}l.Nn=function(b){var c=Hr(this,0,0);b.clientX=this.clientX;b.clientY=this.clientY;Ir(this,b,c.x,c.y)};function Ir(b,c,d,e){b.target.style.left=d+\"px\";b.target.style.top=e+\"px\";b.o(new Er(\"drag\",b,c.clientX,c.clientY,0,d,e))}function Fr(b,c){var d=b.a,e=isNaN(d.left)?null:d.left,d=isNaN(d.width)?0:d.width;return Math.min(null!=e?e+d:Infinity,Math.max(null!=e?e:-Infinity,c))}\nfunction Gr(b,c){var d=b.a,e=isNaN(d.top)?null:d.top,d=isNaN(d.height)?0:d.height;return Math.min(null!=e?e+d:Infinity,Math.max(null!=e?e:-Infinity,c))}function Er(b,c,d,e,f,g,h){vc.call(this,b);this.clientX=d;this.clientY=e;this.left=ca(g)?g:c.f;this.top=ca(h)?h:c.g}y(Er,vc);function Jr(b){b=b?b:{};this.j=void 0;this.i=Kr;this.l=null;this.C=!1;this.A=b.duration?b.duration:200;var c=b.className?b.className:\"ol-zoomslider\",d=Hg(\"BUTTON\",{type:\"button\",\"class\":c+\"-thumb ol-unselectable\"}),c=Hg(\"DIV\",[c,\"ol-unselectable\",\"ol-control\"],d);this.b=new Cr(d);tc(this,this.b);C(this.b,\"start\",this.vk,!1,this);C(this.b,\"drag\",this.tk,!1,this);C(this.b,\"end\",this.uk,!1,this);C(c,\"click\",this.sk,!1,this);C(d,\"click\",wc);qh.call(this,{element:c,render:b.render?b.render:Lr})}y(Jr,qh);\nvar Kr=0;l=Jr.prototype;l.setMap=function(b){Jr.da.setMap.call(this,b);b&&b.render()};\nfunction Lr(b){if(b.frameState){if(!this.C){var c=this.element,d=gh(c),e=Qg(c),c=lh(e,\"margin\"),f=new zg(e.offsetWidth,e.offsetHeight),e=f.width+c.right+c.left,c=f.height+c.top+c.bottom;this.l=[e,c];e=d.width-e;c=d.height-c;d.width>d.height?(this.i=1,d=new $g(0,0,e,0)):(this.i=Kr,d=new $g(0,0,0,c));this.b.a=d||new $g(NaN,NaN,NaN,NaN);this.C=!0}b=b.frameState.viewState.resolution;b!==this.j&&(this.j=b,b=1-Qf(this.a.aa())(b),d=this.b,c=Qg(this.element),1==this.i?ch(c,d.a.left+d.a.width*b):ch(c,d.a.left,\nd.a.top+d.a.height*b))}}l.sk=function(b){var c=this.a,d=c.aa(),e=d.$();c.Ma(bg({resolution:e,duration:this.A,easing:Vf}));b=Mr(this,Nr(this,b.offsetX-this.l[0]/2,b.offsetY-this.l[1]/2));d.Ub(d.constrainResolution(b))};l.vk=function(){Tf(this.a.aa(),1)};l.tk=function(b){this.j=Mr(this,Nr(this,b.left,b.top));this.a.aa().Ub(this.j)};l.uk=function(){var b=this.a,c=b.aa();Tf(c,-1);b.Ma(bg({resolution:this.j,duration:this.A,easing:Vf}));b=c.constrainResolution(this.j);c.Ub(b)};\nfunction Nr(b,c,d){var e=b.b.a;return Sa(1===b.i?(c-e.left)/e.width:(d-e.top)/e.height,0,1)}function Mr(b,c){return Pf(b.a.aa())(1-c)};function Or(b){b=b?b:{};this.b=b.extent?b.extent:null;var c=b.className?b.className:\"ol-zoom-extent\",d=Hg(\"BUTTON\",{type:\"button\",title:b.tipLabel?b.tipLabel:\"Fit to extent\"},b.label?b.label:\"E\");C(d,\"click\",this.j,!1,this);c=Hg(\"DIV\",c+\" ol-unselectable ol-control\",d);qh.call(this,{element:c,target:b.target})}y(Or,qh);Or.prototype.j=function(b){b.preventDefault();var c=this.a;b=c.aa();var d=this.b?this.b:b.g.J(),c=c.Ra();b.jf(d,c)};function Pr(b){id.call(this);b=b?b:{};this.a=null;C(this,kd(\"tracking\"),this.ul,!1,this);this.uf(void 0!==b.tracking?b.tracking:!1)}y(Pr,id);l=Pr.prototype;l.X=function(){this.uf(!1);Pr.da.X.call(this)};\nl.On=function(b){b=b.a;if(null!==b.alpha){var c=Wa(b.alpha);this.set(\"alpha\",c);\"boolean\"==typeof b.absolute&&b.absolute?this.set(\"heading\",c):ja(b.webkitCompassHeading)&&-1!=b.webkitCompassAccuracy&&this.set(\"heading\",Wa(b.webkitCompassHeading))}null!==b.beta&&this.set(\"beta\",Wa(b.beta));null!==b.gamma&&this.set(\"gamma\",Wa(b.gamma));this.s()};l.Bj=function(){return this.get(\"alpha\")};l.Ej=function(){return this.get(\"beta\")};l.Kj=function(){return this.get(\"gamma\")};l.tl=function(){return this.get(\"heading\")};\nl.Tg=function(){return this.get(\"tracking\")};l.ul=function(){if($i){var b=this.Tg();b&&!this.a?this.a=C(ba,\"deviceorientation\",this.On,!1,this):!b&&this.a&&(Zc(this.a),this.a=null)}};l.uf=function(b){this.set(\"tracking\",b)};function Qr(){this.defaultDataProjection=null}function Rr(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.Ia(c),featureProjection:d.featureProjection});return Sr(b,e)}function Sr(b,c){var d;c&&(d={featureProjection:c.featureProjection,dataProjection:c.dataProjection?c.dataProjection:b.defaultDataProjection,rightHanded:c.rightHanded});return d}\nfunction Tr(b,c,d){var e=d?Fe(d.featureProjection):null;d=d?Fe(d.dataProjection):null;return e&&d&&!Xe(e,d)?b instanceof bf?(c?b.clone():b).kb(c?e:d,c?d:e):af(c?b.slice():b,c?e:d,c?d:e):b};function Ur(){this.defaultDataProjection=null}y(Ur,Qr);function Vr(b){return ma(b)?b:ia(b)?(b=ao(b))?b:null:null}l=Ur.prototype;l.V=function(){return\"json\"};l.Tb=function(b,c){return this.Rc(Vr(b),Rr(this,b,c))};l.Ba=function(b,c){return this.Jf(Vr(b),Rr(this,b,c))};l.Sc=function(b,c){return this.Dh(Vr(b),Rr(this,b,c))};l.Ia=function(b){return this.Kh(Vr(b))};l.Jd=function(b,c){return bo(this.Vc(b,c))};l.Vb=function(b,c){return bo(this.Re(b,c))};l.Wc=function(b,c){return bo(this.Te(b,c))};function Wr(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],m=0,g=[0],n;for(n=c+e;n<d;n+=e){var p=b[n],q=b[n+1],m=m+Math.sqrt((p-h)*(p-h)+(q-k)*(q-k));g.push(m);h=p;k=q}d=.5*m;for(var r,h=pb,k=0,m=g.length;k<m;)n=k+m>>1,p=h(d,g[n]),0<p?k=n+1:(m=n,r=!p);r=r?k:~k;0>r?(d=(d-g[-r-2])/(g[-r-1]-g[-r-2]),c+=(-r-2)*e,g=qd(b[c],b[c+e],d),h=qd(b[c+1],b[c+e+1],d)):(g=b[c+r*e],h=b[c+r*e+1])}return f?(f[0]=\ng,f[1]=h,f):[g,h]}function Xr(b,c,d,e,f,g){if(d==c)return null;if(f<b[c+e-1])return g?(d=b.slice(c,c+e),d[e-1]=f,d):null;if(b[d-1]<f)return g?(d=b.slice(d-e,d),d[e-1]=f,d):null;if(f==b[c+e-1])return b.slice(c,c+e);c/=e;for(d/=e;c<d;)g=c+d>>1,f<b[(g+1)*e-1]?d=g:c=g+1;d=b[c*e-1];if(f==d)return b.slice((c-1)*e,(c-1)*e+e);g=(f-d)/(b[(c+1)*e-1]-d);d=[];var h;for(h=0;h<e-1;++h)d.push(qd(b[(c-1)*e+h],b[c*e+h],g));d.push(f);return d}\nfunction Yr(b,c,d,e,f,g){var h=0;if(g)return Xr(b,h,c[c.length-1],d,e,f);if(e<b[d-1])return f?(b=b.slice(0,d),b[d-1]=e,b):null;if(b[b.length-1]<e)return f?(b=b.slice(b.length-d),b[d-1]=e,b):null;f=0;for(g=c.length;f<g;++f){var k=c[f];if(h!=k){if(e<b[h+d-1])break;if(e<=b[k-1])return Xr(b,h,k,d,e,!1);h=k}}return null};function T(b,c){df.call(this);this.g=null;this.D=this.G=this.l=-1;this.ma(b,c)}y(T,df);l=T.prototype;l.jj=function(b){this.v?lb(this.v,b):this.v=b.slice();this.s()};l.clone=function(){var b=new T(null);b.ba(this.b,this.v.slice());return b};l.mb=function(b,c,d,e){if(e<Ud(this.J(),b,c))return e;this.D!=this.c&&(this.G=Math.sqrt(lf(this.v,0,this.v.length,this.a,0)),this.D=this.c);return nf(this.v,0,this.v.length,this.a,this.G,!1,b,c,d,e)};\nl.yj=function(b,c){return Cf(this.v,0,this.v.length,this.a,b,c)};l.Wl=function(b,c){return\"XYM\"!=this.b&&\"XYZM\"!=this.b?null:Xr(this.v,0,this.v.length,this.a,b,void 0!==c?c:!1)};l.Y=function(){return sf(this.v,0,this.v.length,this.a)};l.Xl=function(){var b=this.v,c=this.a,d=b[0],e=b[1],f=0,g;for(g=0+c;g<this.v.length;g+=c)var h=b[g],k=b[g+1],f=f+Math.sqrt((h-d)*(h-d)+(k-e)*(k-e)),d=h,e=k;return f};function sm(b){b.l!=b.c&&(b.g=Wr(b.v,0,b.v.length,b.a,b.g),b.l=b.c);return b.g}\nl.Kc=function(b){var c=[];c.length=uf(this.v,0,this.v.length,this.a,b,c,0);b=new T(null);b.ba(\"XY\",c);return b};l.V=function(){return\"LineString\"};l.Da=function(b){return Df(this.v,0,this.v.length,this.a,b)};l.ma=function(b,c){b?(gf(this,c,b,1),this.v||(this.v=[]),this.v.length=qf(this.v,0,b,this.a),this.s()):this.ba(\"XY\",null)};l.ba=function(b,c){ff(this,b,c);this.s()};function U(b,c){df.call(this);this.g=[];this.l=this.D=-1;this.ma(b,c)}y(U,df);l=U.prototype;l.kj=function(b){this.v?lb(this.v,b.ja().slice()):this.v=b.ja().slice();this.g.push(this.v.length);this.s()};l.clone=function(){var b=new U(null);b.ba(this.b,this.v.slice(),this.g.slice());return b};l.mb=function(b,c,d,e){if(e<Ud(this.J(),b,c))return e;this.l!=this.c&&(this.D=Math.sqrt(mf(this.v,0,this.g,this.a,0)),this.l=this.c);return of(this.v,0,this.g,this.a,this.D,!1,b,c,d,e)};\nl.Zl=function(b,c,d){return\"XYM\"!=this.b&&\"XYZM\"!=this.b||0===this.v.length?null:Yr(this.v,this.g,this.a,b,void 0!==c?c:!1,void 0!==d?d:!1)};l.Y=function(){return tf(this.v,0,this.g,this.a)};l.Ab=function(){return this.g};l.Sj=function(b){if(0>b||this.g.length<=b)return null;var c=new T(null);c.ba(this.b,this.v.slice(0===b?0:this.g[b-1],this.g[b]));return c};\nl.rd=function(){var b=this.v,c=this.g,d=this.b,e=[],f=0,g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],m=new T(null);m.ba(d,b.slice(f,k));e.push(m);f=k}return e};function tm(b){var c=[],d=b.v,e=0,f=b.g;b=b.a;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=Wr(d,e,k,b);lb(c,e);e=k}return c}l.Kc=function(b){var c=[],d=[],e=this.v,f=this.g,g=this.a,h=0,k=0,m,n;m=0;for(n=f.length;m<n;++m){var p=f[m],k=uf(e,h,p,g,b,c,k);d.push(k);h=p}c.length=k;b=new U(null);b.ba(\"XY\",c,d);return b};l.V=function(){return\"MultiLineString\"};\nl.Da=function(b){a:{var c=this.v,d=this.g,e=this.a,f=0,g,h;g=0;for(h=d.length;g<h;++g){if(Df(c,f,d[g],e,b)){b=!0;break a}f=d[g]}b=!1}return b};l.ma=function(b,c){if(b){gf(this,c,b,2);this.v||(this.v=[]);var d=rf(this.v,0,b,this.a,this.g);this.v.length=0===d.length?0:d[d.length-1];this.s()}else this.ba(\"XY\",null,this.g)};l.ba=function(b,c,d){ff(this,b,c);this.g=d;this.s()};\nfunction Zr(b,c){var d=b.b,e=[],f=[],g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];0===g&&(d=k.b);lb(e,k.ja());f.push(e.length)}b.ba(d,e,f)};function $r(b,c){df.call(this);this.ma(b,c)}y($r,df);l=$r.prototype;l.mj=function(b){this.v?lb(this.v,b.ja()):this.v=b.ja().slice();this.s()};l.clone=function(){var b=new $r(null);b.ba(this.b,this.v.slice());return b};l.mb=function(b,c,d,e){if(e<Ud(this.J(),b,c))return e;var f=this.v,g=this.a,h,k,m;h=0;for(k=f.length;h<k;h+=g)if(m=Va(b,c,f[h],f[h+1]),m<e){e=m;for(m=0;m<g;++m)d[m]=f[h+m];d.length=g}return e};l.Y=function(){return sf(this.v,0,this.v.length,this.a)};\nl.ck=function(b){var c=this.v?this.v.length/this.a:0;if(0>b||c<=b)return null;c=new D(null);c.ba(this.b,this.v.slice(b*this.a,(b+1)*this.a));return c};l.ue=function(){var b=this.v,c=this.b,d=this.a,e=[],f,g;f=0;for(g=b.length;f<g;f+=d){var h=new D(null);h.ba(c,b.slice(f,f+d));e.push(h)}return e};l.V=function(){return\"MultiPoint\"};l.Da=function(b){var c=this.v,d=this.a,e,f,g,h;e=0;for(f=c.length;e<f;e+=d)if(g=c[e],h=c[e+1],Wd(b,g,h))return!0;return!1};\nl.ma=function(b,c){b?(gf(this,c,b,1),this.v||(this.v=[]),this.v.length=qf(this.v,0,b,this.a),this.s()):this.ba(\"XY\",null)};l.ba=function(b,c){ff(this,b,c);this.s()};function V(b,c){df.call(this);this.g=[];this.D=-1;this.G=null;this.T=this.S=this.U=-1;this.l=null;this.ma(b,c)}y(V,df);l=V.prototype;l.nj=function(b){if(this.v){var c=this.v.length;lb(this.v,b.ja());b=b.Ab().slice();var d,e;d=0;for(e=b.length;d<e;++d)b[d]+=c}else this.v=b.ja().slice(),b=b.Ab().slice(),this.g.push();this.g.push(b);this.s()};l.clone=function(){var b=new V(null),c=Vb(this.g);as(b,this.b,this.v.slice(),c);return b};\nl.mb=function(b,c,d,e){if(e<Ud(this.J(),b,c))return e;if(this.S!=this.c){var f=this.g,g=0,h=0,k,m;k=0;for(m=f.length;k<m;++k)var n=f[k],h=mf(this.v,g,n,this.a,h),g=n[n.length-1];this.U=Math.sqrt(h);this.S=this.c}f=um(this);g=this.g;h=this.a;k=this.U;m=0;var n=[NaN,NaN],p,q;p=0;for(q=g.length;p<q;++p){var r=g[p];e=of(f,m,r,h,k,!0,b,c,d,e,n);m=r[r.length-1]}return e};\nl.rc=function(b,c){var d;a:{d=um(this);var e=this.g,f=0;if(0!==e.length){var g,h;g=0;for(h=e.length;g<h;++g){var k=e[g];if(Af(d,f,k,this.a,b,c)){d=!0;break a}f=k[k.length-1]}}d=!1}return d};l.$l=function(){var b=um(this),c=this.g,d=0,e=0,f,g;f=0;for(g=c.length;f<g;++f)var h=c[f],e=e+jf(b,d,h,this.a),d=h[h.length-1];return e};\nl.Y=function(b){var c;void 0!==b?(c=um(this).slice(),If(c,this.g,this.a,b)):c=this.v;b=c;c=this.g;var d=this.a,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var m=c[h];f[g++]=tf(b,e,m,d,f[g]);e=m[m.length-1]}f.length=g;return f};\nfunction vm(b){if(b.D!=b.c){var c=b.v,d=b.g,e=b.a,f=0,g=[],h,k,m=Od();h=0;for(k=d.length;h<k;++h){var n=d[h],m=$d(c,f,n[0],e);g.push((m[0]+m[2])/2,(m[1]+m[3])/2);f=n[n.length-1]}c=um(b);d=b.g;e=b.a;f=0;h=[];k=0;for(m=d.length;k<m;++k)n=d[k],h=Bf(c,f,n,e,g,2*k,h),f=n[n.length-1];b.G=h;b.D=b.c}return b.G}l.Pj=function(){var b=new $r(null);b.ba(\"XY\",vm(this).slice());return b};\nfunction um(b){if(b.T!=b.c){var c=b.v,d;a:{d=b.g;var e,f;e=0;for(f=d.length;e<f;++e)if(!Gf(c,d[e],b.a,void 0)){d=!1;break a}d=!0}d?b.l=c:(b.l=c.slice(),b.l.length=If(b.l,b.g,b.a));b.T=b.c}return b.l}l.Kc=function(b){var c=[],d=[],e=this.v,f=this.g,g=this.a;b=Math.sqrt(b);var h=0,k=0,m,n;m=0;for(n=f.length;m<n;++m){var p=f[m],q=[],k=vf(e,h,p,g,b,c,k,q);d.push(q);h=p[p.length-1]}c.length=k;e=new V(null);as(e,\"XY\",c,d);return e};\nl.ek=function(b){if(0>b||this.g.length<=b)return null;var c;0===b?c=0:(c=this.g[b-1],c=c[c.length-1]);b=this.g[b].slice();var d=b[b.length-1];if(0!==c){var e,f;e=0;for(f=b.length;e<f;++e)b[e]-=c}e=new E(null);e.ba(this.b,this.v.slice(c,d),b);return e};l.be=function(){var b=this.b,c=this.v,d=this.g,e=[],f=0,g,h,k,m;g=0;for(h=d.length;g<h;++g){var n=d[g].slice(),p=n[n.length-1];if(0!==f)for(k=0,m=n.length;k<m;++k)n[k]-=f;k=new E(null);k.ba(b,c.slice(f,p),n);e.push(k);f=p}return e};l.V=function(){return\"MultiPolygon\"};\nl.Da=function(b){a:{var c=um(this),d=this.g,e=this.a,f=0,g,h;g=0;for(h=d.length;g<h;++g){var k=d[g];if(Ef(c,f,k,e,b)){b=!0;break a}f=k[k.length-1]}b=!1}return b};l.ma=function(b,c){if(b){gf(this,c,b,3);this.v||(this.v=[]);var d=this.v,e=this.a,f=this.g,g=0,f=f?f:[],h=0,k,m;k=0;for(m=b.length;k<m;++k)g=rf(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.v.length=0:(d=f[f.length-1],this.v.length=0===d.length?0:d[d.length-1]);this.s()}else as(this,\"XY\",null,this.g)};\nfunction as(b,c,d,e){ff(b,c,d);b.g=e;b.s()}function bs(b,c){var d=b.b,e=[],f=[],g,h,k;g=0;for(h=c.length;g<h;++g){var m=c[g];0===g&&(d=m.b);var n=e.length;k=m.Ab();var p,q;p=0;for(q=k.length;p<q;++p)k[p]+=n;lb(e,m.ja());f.push(k)}as(b,d,e,f)};function cs(b){b=b?b:{};this.defaultDataProjection=null;this.a=b.geometryName}y(cs,Ur);\nfunction ds(b,c){if(!b)return null;var d;if(ja(b.x)&&ja(b.y))d=\"Point\";else if(b.points)d=\"MultiPoint\";else if(b.paths)d=1===b.paths.length?\"LineString\":\"MultiLineString\";else if(b.rings){var e=b.rings,f=es(b),g=[];d=[];var h,k;h=0;for(k=e.length;h<k;++h){var m=ub(e[h]);Ff(m,0,m.length,f.length)?g.push([e[h]]):d.push(e[h])}for(;d.length;){e=d.shift();f=!1;for(h=g.length-1;0<=h;h--)if(Xd((new wf(g[h][0])).J(),(new wf(e)).J())){g[h].push(e);f=!0;break}f||g.push([e.reverse()])}b=Ub(b);1===g.length?(d=\n\"Polygon\",b.rings=g[0]):(d=\"MultiPolygon\",b.rings=g)}return Tr((0,fs[d])(b),!1,c)}function es(b){var c=\"XY\";!0===b.hasZ&&!0===b.hasM?c=\"XYZM\":!0===b.hasZ?c=\"XYZ\":!0===b.hasM&&(c=\"XYM\");return c}function gs(b){b=b.b;return{hasZ:\"XYZ\"===b||\"XYZM\"===b,hasM:\"XYM\"===b||\"XYZM\"===b}}\nvar fs={Point:function(b){return void 0!==b.m&&void 0!==b.z?new D([b.x,b.y,b.z,b.m],\"XYZM\"):void 0!==b.z?new D([b.x,b.y,b.z],\"XYZ\"):void 0!==b.m?new D([b.x,b.y,b.m],\"XYM\"):new D([b.x,b.y])},LineString:function(b){return new T(b.paths[0],es(b))},Polygon:function(b){return new E(b.rings,es(b))},MultiPoint:function(b){return new $r(b.points,es(b))},MultiLineString:function(b){return new U(b.paths,es(b))},MultiPolygon:function(b){return new V(b.rings,es(b))}},hs={Point:function(b){var c=b.Y();b=b.b;if(\"XYZ\"===\nb)return{x:c[0],y:c[1],z:c[2]};if(\"XYM\"===b)return{x:c[0],y:c[1],m:c[2]};if(\"XYZM\"===b)return{x:c[0],y:c[1],z:c[2],m:c[3]};if(\"XY\"===b)return{x:c[0],y:c[1]}},LineString:function(b){var c=gs(b);return{hasZ:c.hasZ,hasM:c.hasM,paths:[b.Y()]}},Polygon:function(b){var c=gs(b);return{hasZ:c.hasZ,hasM:c.hasM,rings:b.Y(!1)}},MultiPoint:function(b){var c=gs(b);return{hasZ:c.hasZ,hasM:c.hasM,points:b.Y()}},MultiLineString:function(b){var c=gs(b);return{hasZ:c.hasZ,hasM:c.hasM,paths:b.Y()}},MultiPolygon:function(b){var c=\ngs(b);b=b.Y(!1);for(var d=[],e=0;e<b.length;e++)for(var f=b[e].length-1;0<=f;f--)d.push(b[e][f]);return{hasZ:c.hasZ,hasM:c.hasM,rings:d}}};l=cs.prototype;l.Rc=function(b,c){var d=ds(b.geometry,c),e=new sn;this.a&&e.vc(this.a);e.La(d);c&&c.pf&&b.attributes[c.pf]&&e.ic(b.attributes[c.pf]);b.attributes&&e.I(b.attributes);return e};\nl.Jf=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.pf=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.Rc(f[g],d));return e}return[this.Rc(b,d)]};l.Dh=function(b,c){return ds(b,c)};l.Kh=function(b){return b.spatialReference&&b.spatialReference.wkid?Fe(\"EPSG:\"+b.spatialReference.wkid):null};function is(b,c){return(0,hs[b.V()])(Tr(b,!0,c),c)}l.Te=function(b,c){return is(b,Sr(this,c))};\nl.Vc=function(b,c){c=Sr(this,c);var d={},e=b.W();e&&(d.geometry=is(e,c));e=b.P();delete e[b.a];d.attributes=Qb(e)?{}:e;c&&c.featureProjection&&(d.spatialReference={wkid:Fe(c.featureProjection).a.split(\":\").pop()});return d};l.Re=function(b,c){c=Sr(this,c);var d=[],e,f;e=0;for(f=b.length;e<f;++e)d.push(this.Vc(b[e],c));return{features:d}};function js(b){bf.call(this);this.f=b?b:null;ks(this)}y(js,bf);function ls(b){var c=[],d,e;d=0;for(e=b.length;d<e;++d)c.push(b[d].clone());return c}function ms(b){var c,d;if(b.f)for(c=0,d=b.f.length;c<d;++c)Yc(b.f[c],\"change\",b.s,!1,b)}function ks(b){var c,d;if(b.f)for(c=0,d=b.f.length;c<d;++c)C(b.f[c],\"change\",b.s,!1,b)}l=js.prototype;l.clone=function(){var b=new js(null);b.Vh(this.f);return b};\nl.mb=function(b,c,d,e){if(e<Ud(this.J(),b,c))return e;var f=this.f,g,h;g=0;for(h=f.length;g<h;++g)e=f[g].mb(b,c,d,e);return e};l.rc=function(b,c){var d=this.f,e,f;e=0;for(f=d.length;e<f;++e)if(d[e].rc(b,c))return!0;return!1};l.Vd=function(b){Rd(Infinity,Infinity,-Infinity,-Infinity,b);for(var c=this.f,d=0,e=c.length;d<e;++d)ce(b,c[d].J());return b};l.zg=function(){return ls(this.f)};\nl.sd=function(b){this.u!=this.c&&(Rb(this.j),this.i=0,this.u=this.c);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.j.hasOwnProperty(c))return this.j[c];var d=[],e=this.f,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],m=k.sd(b);d.push(m);m!==k&&(f=!0)}if(f)return b=new js(null),ms(b),b.f=d,ks(b),b.s(),this.j[c]=b;this.i=b;return this};l.V=function(){return\"GeometryCollection\"};l.Da=function(b){var c=this.f,d,e;d=0;for(e=c.length;d<e;++d)if(c[d].Da(b))return!0;return!1};\nl.Ka=function(){return 0===this.f.length};l.Vh=function(b){b=ls(b);ms(this);this.f=b;ks(this);this.s()};l.mc=function(b){var c=this.f,d,e;d=0;for(e=c.length;d<e;++d)c[d].mc(b);this.s()};l.Oc=function(b,c){var d=this.f,e,f;e=0;for(f=d.length;e<f;++e)d[e].Oc(b,c);this.s()};l.X=function(){ms(this);js.da.X.call(this)};function ns(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=Fe(b.defaultDataProjection?b.defaultDataProjection:\"EPSG:4326\");this.a=b.geometryName}y(ns,Ur);function os(b,c){return b?Tr((0,ps[b.type])(b),!1,c):null}function qs(b,c){return(0,rs[b.V()])(Tr(b,!0,c),c)}\nvar ps={Point:function(b){return new D(b.coordinates)},LineString:function(b){return new T(b.coordinates)},Polygon:function(b){return new E(b.coordinates)},MultiPoint:function(b){return new $r(b.coordinates)},MultiLineString:function(b){return new U(b.coordinates)},MultiPolygon:function(b){return new V(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return os(b,c)});return new js(d)}},rs={Point:function(b){return{type:\"Point\",coordinates:b.Y()}},LineString:function(b){return{type:\"LineString\",\ncoordinates:b.Y()}},Polygon:function(b,c){var d;c&&(d=c.rightHanded);return{type:\"Polygon\",coordinates:b.Y(d)}},MultiPoint:function(b){return{type:\"MultiPoint\",coordinates:b.Y()}},MultiLineString:function(b){return{type:\"MultiLineString\",coordinates:b.Y()}},MultiPolygon:function(b,c){var d;c&&(d=c.rightHanded);return{type:\"MultiPolygon\",coordinates:b.Y(d)}},GeometryCollection:function(b,c){return{type:\"GeometryCollection\",geometries:b.f.map(function(b){return qs(b,c)})}},Circle:function(){return{type:\"GeometryCollection\",\ngeometries:[]}}};l=ns.prototype;l.Rc=function(b,c){var d=os(b.geometry,c),e=new sn;this.a&&e.vc(this.a);e.La(d);void 0!==b.id&&e.ic(b.id);b.properties&&e.I(b.properties);return e};l.Jf=function(b,c){if(\"Feature\"==b.type)return[this.Rc(b,c)];if(\"FeatureCollection\"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.Rc(e[f],c));return d}return[]};l.Dh=function(b,c){return os(b,c)};\nl.Kh=function(b){return(b=b.crs)?\"name\"==b.type?Fe(b.properties.name):\"EPSG\"==b.type?Fe(\"EPSG:\"+b.properties.code):null:this.defaultDataProjection};l.Vc=function(b,c){c=Sr(this,c);var d={type:\"Feature\"},e=b.Na();void 0!==e&&(d.id=e);e=b.W();d.geometry=e?qs(e,c):null;e=b.P();delete e[b.a];d.properties=Qb(e)?null:e;return d};l.Re=function(b,c){c=Sr(this,c);var d=[],e,f;e=0;for(f=b.length;e<f;++e)d.push(this.Vc(b[e],c));return{type:\"FeatureCollection\",features:d}};\nl.Te=function(b,c){return qs(b,Sr(this,c))};function ss(){this.defaultDataProjection=null}y(ss,Qr);l=ss.prototype;l.V=function(){return\"xml\"};l.Tb=function(b,c){if(Vo(b))return ts(this,b,c);if(Yo(b))return this.Bh(b,c);if(ia(b)){var d=hp(b);return ts(this,d,c)}return null};function ts(b,c,d){b=us(b,c,d);return 0<b.length?b[0]:null}l.Ba=function(b,c){if(Vo(b))return us(this,b,c);if(Yo(b))return this.hc(b,c);if(ia(b)){var d=hp(b);return us(this,d,c)}return[]};\nfunction us(b,c,d){var e=[];for(c=c.firstChild;c;c=c.nextSibling)1==c.nodeType&&lb(e,b.hc(c,d));return e}l.Sc=function(b,c){if(Vo(b))return this.u(b,c);if(Yo(b)){var d=this.Ie(b,[Rr(this,b,c?c:{})]);return d?d:null}return ia(b)?(d=hp(b),this.u(d,c)):null};l.Ia=function(b){return Vo(b)?this.Pf(b):Yo(b)?this.Le(b):ia(b)?(b=hp(b),this.Pf(b)):null};l.Pf=function(){return this.defaultDataProjection};l.Le=function(){return this.defaultDataProjection};l.Jd=function(b,c){var d=this.C(b,c);return Ho(d)};\nl.Vb=function(b,c){var d=this.c(b,c);return Ho(d)};l.Wc=function(b,c){var d=this.B(b,c);return Ho(d)};function vs(b){b=b?b:{};this.featureType=b.featureType;this.featureNS=b.featureNS;this.srsName=b.srsName;this.schemaLocation=\"\";this.a={};this.a[\"http://www.opengis.net/gml\"]={featureMember:kp(vs.prototype.Dd),featureMembers:kp(vs.prototype.Dd)};this.defaultDataProjection=null}y(vs,ss);l=vs.prototype;\nl.Dd=function(b,c){var d=So(b),e;if(\"FeatureCollection\"==d)\"http://www.opengis.net/wfs\"===b.namespaceURI?e=Q([],this.a,b,c,this):e=Q(null,this.a,b,c,this);else if(\"featureMembers\"==d||\"featureMember\"==d){var f=c[0],g=f.featureType;e=f.featureNS;var h,k;if(!g&&b.childNodes){g=[];e={};h=0;for(k=b.childNodes.length;h<k;++h){var m=b.childNodes[h];if(1===m.nodeType){var n=m.nodeName.split(\":\").pop();if(-1===g.indexOf(n)){var p;Ob(e,m.namespaceURI)?p=Pb(e,function(b){return b===m.namespaceURI}):(p=\"p\"+\nKb(e),e[p]=m.namespaceURI);g.push(p+\":\"+n)}}}f.featureType=g;f.featureNS=e}ia(e)&&(h=e,e={},e.p0=h);var f={},g=ga(g)?g:[g],q;for(q in e){n={};h=0;for(k=g.length;h<k;++h)(-1===g[h].indexOf(\":\")?\"p0\":g[h].split(\":\")[0])===q&&(n[g[h].split(\":\").pop()]=\"featureMembers\"==d?jp(this.If,this):kp(this.If,this));f[e[q]]=n}e=Q([],f,b,c)}e||(e=[]);return e};l.Ie=function(b,c){var d=c[0];d.srsName=b.firstElementChild.getAttribute(\"srsName\");var e=Q(null,this.ag,b,c,this);if(e)return Tr(e,!1,d)};\nl.If=function(b,c){var d,e=b.getAttribute(\"fid\")||bp(b,\"http://www.opengis.net/gml\",\"id\"),f={},g;for(d=b.firstElementChild;d;d=d.nextElementSibling){var h=So(d);if(0===d.childNodes.length||1===d.childNodes.length&&(3===d.firstChild.nodeType||4===d.firstChild.nodeType)){var k=Oo(d,!1);/^[\\s\\xa0]*$/.test(k)&&(k=void 0);f[h]=k}else\"boundedBy\"!==h&&(g=h),f[h]=this.Ie(d,c)}d=new sn(f);g&&d.vc(g);e&&d.ic(e);return d};l.Jh=function(b,c){var d=this.He(b,c);if(d){var e=new D(null);e.ba(\"XYZ\",d);return e}};\nl.Hh=function(b,c){var d=Q([],this.Hi,b,c,this);if(d)return new $r(d)};l.Gh=function(b,c){var d=Q([],this.Gi,b,c,this);if(d){var e=new U(null);Zr(e,d);return e}};l.Ih=function(b,c){var d=Q([],this.Ii,b,c,this);if(d){var e=new V(null);bs(e,d);return e}};l.yh=function(b,c){rp(this.Li,b,c,this)};l.Og=function(b,c){rp(this.Ei,b,c,this)};l.zh=function(b,c){rp(this.Mi,b,c,this)};l.Je=function(b,c){var d=this.He(b,c);if(d){var e=new T(null);e.ba(\"XYZ\",d);return e}};\nl.jo=function(b,c){var d=Q(null,this.Ld,b,c,this);if(d)return d};l.Fh=function(b,c){var d=this.He(b,c);if(d){var e=new wf(null);xf(e,\"XYZ\",d);return e}};l.Ke=function(b,c){var d=Q([null],this.Ve,b,c,this);if(d&&d[0]){var e=new E(null),f=d[0],g=[f.length],h,k;h=1;for(k=d.length;h<k;++h)lb(f,d[h]),g.push(f.length);e.ba(\"XYZ\",f,g);return e}};l.He=function(b,c){return Q(null,this.Ld,b,c,this)};l.Hi=Object({\"http://www.opengis.net/gml\":{pointMember:jp(vs.prototype.yh),pointMembers:jp(vs.prototype.yh)}});\nl.Gi=Object({\"http://www.opengis.net/gml\":{lineStringMember:jp(vs.prototype.Og),lineStringMembers:jp(vs.prototype.Og)}});l.Ii=Object({\"http://www.opengis.net/gml\":{polygonMember:jp(vs.prototype.zh),polygonMembers:jp(vs.prototype.zh)}});l.Li=Object({\"http://www.opengis.net/gml\":{Point:jp(vs.prototype.He)}});l.Ei=Object({\"http://www.opengis.net/gml\":{LineString:jp(vs.prototype.Je)}});l.Mi=Object({\"http://www.opengis.net/gml\":{Polygon:jp(vs.prototype.Ke)}});l.Md=Object({\"http://www.opengis.net/gml\":{LinearRing:kp(vs.prototype.jo)}});\nl.hc=function(b,c){var d={featureType:this.featureType,featureNS:this.featureNS};c&&Xb(d,Rr(this,b,c));return this.Dd(b,[d])};l.Le=function(b){return Fe(this.A?this.A:b.firstElementChild.getAttribute(\"srsName\"))};function ws(b){b=Oo(b,!1);return xs(b)}function xs(b){if(b=/^\\s*(true|1)|(false|0)\\s*$/.exec(b))return void 0!==b[1]||!1}\nfunction ys(b){b=Oo(b,!1);if(b=/^\\s*(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(Z|(?:([+\\-])(\\d{2})(?::(\\d{2}))?))\\s*$/.exec(b)){var c=Date.UTC(parseInt(b[1],10),parseInt(b[2],10)-1,parseInt(b[3],10),parseInt(b[4],10),parseInt(b[5],10),parseInt(b[6],10))/1E3;if(\"Z\"!=b[7]){var d=\"-\"==b[8]?-1:1,c=c+60*d*parseInt(b[9],10);void 0!==b[10]&&(c+=3600*d*parseInt(b[10],10))}return c}}function zs(b){b=Oo(b,!1);return As(b)}\nfunction As(b){if(b=/^\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)\\s*$/i.exec(b))return parseFloat(b[1])}function Bs(b){b=Oo(b,!1);return Cs(b)}function Cs(b){if(b=/^\\s*(\\d+)\\s*$/.exec(b))return parseInt(b[1],10)}function W(b){return Oo(b,!1).trim()}function Ds(b,c){Es(b,c?\"1\":\"0\")}function Fs(b,c){b.appendChild(Ko.createTextNode(c.toPrecision()))}function Gs(b,c){b.appendChild(Ko.createTextNode(c.toString()))}function Es(b,c){b.appendChild(Ko.createTextNode(c))};function Hs(b){b=b?b:{};vs.call(this,b);this.a[\"http://www.opengis.net/gml\"].featureMember=jp(vs.prototype.Dd);this.schemaLocation=b.schemaLocation?b.schemaLocation:\"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd\"}y(Hs,vs);l=Hs.prototype;\nl.Ch=function(b,c){var d=Oo(b,!1).replace(/^\\s*|\\s*$/g,\"\"),e=c[0].srsName,f=b.parentNode.getAttribute(\"srsDimension\"),g=\"enu\";e&&(g=Ie(Fe(e)));d=d.split(/[\\s,]+/);e=2;b.getAttribute(\"srsDimension\")?e=Cs(b.getAttribute(\"srsDimension\")):b.getAttribute(\"dimension\")?e=Cs(b.getAttribute(\"dimension\")):f&&(e=Cs(f));for(var h,k,m=[],n=0,p=d.length;n<p;n+=e)f=parseFloat(d[n]),h=parseFloat(d[n+1]),k=3===e?parseFloat(d[n+2]):0,\"en\"===g.substr(0,2)?m.push(f,h,k):m.push(h,f,k);return m};\nl.fo=function(b,c){var d=Q([null],this.Ai,b,c,this);return Rd(d[1][0],d[1][1],d[1][3],d[1][4])};l.$k=function(b,c){var d=Q(void 0,this.Md,b,c,this);d&&c[c.length-1].push(d)};l.Pn=function(b,c){var d=Q(void 0,this.Md,b,c,this);d&&(c[c.length-1][0]=d)};l.Ld=Object({\"http://www.opengis.net/gml\":{coordinates:kp(Hs.prototype.Ch)}});l.Ve=Object({\"http://www.opengis.net/gml\":{innerBoundaryIs:Hs.prototype.$k,outerBoundaryIs:Hs.prototype.Pn}});l.Ai=Object({\"http://www.opengis.net/gml\":{coordinates:jp(Hs.prototype.Ch)}});\nl.ag=Object({\"http://www.opengis.net/gml\":{Point:kp(vs.prototype.Jh),MultiPoint:kp(vs.prototype.Hh),LineString:kp(vs.prototype.Je),MultiLineString:kp(vs.prototype.Gh),LinearRing:kp(vs.prototype.Fh),Polygon:kp(vs.prototype.Ke),MultiPolygon:kp(vs.prototype.Ih),Box:kp(Hs.prototype.fo)}});function Is(b){b=b?b:{};vs.call(this,b);this.l=void 0!==b.surface?b.surface:!1;this.g=void 0!==b.curve?b.curve:!1;this.j=void 0!==b.multiCurve?b.multiCurve:!0;this.i=void 0!==b.multiSurface?b.multiSurface:!0;this.schemaLocation=b.schemaLocation?b.schemaLocation:\"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd\"}y(Is,vs);l=Is.prototype;l.no=function(b,c){var d=Q([],this.Fi,b,c,this);if(d){var e=new U(null);Zr(e,d);return e}};\nl.oo=function(b,c){var d=Q([],this.Ji,b,c,this);if(d){var e=new V(null);bs(e,d);return e}};l.qg=function(b,c){rp(this.Bi,b,c,this)};l.hi=function(b,c){rp(this.Qi,b,c,this)};l.ro=function(b,c){return Q([null],this.Ki,b,c,this)};l.to=function(b,c){return Q([null],this.Pi,b,c,this)};l.so=function(b,c){return Q([null],this.Ve,b,c,this)};l.mo=function(b,c){return Q([null],this.Ld,b,c,this)};l.bl=function(b,c){var d=Q(void 0,this.Md,b,c,this);d&&c[c.length-1].push(d)};\nl.uj=function(b,c){var d=Q(void 0,this.Md,b,c,this);d&&(c[c.length-1][0]=d)};l.Lh=function(b,c){var d=Q([null],this.Ri,b,c,this);if(d&&d[0]){var e=new E(null),f=d[0],g=[f.length],h,k;h=1;for(k=d.length;h<k;++h)lb(f,d[h]),g.push(f.length);e.ba(\"XYZ\",f,g);return e}};l.Ah=function(b,c){var d=Q([null],this.Ci,b,c,this);if(d){var e=new T(null);e.ba(\"XYZ\",d);return e}};l.io=function(b,c){var d=Q([null],this.Di,b,c,this);return Rd(d[1][0],d[1][1],d[2][0],d[2][1])};\nl.ko=function(b,c){for(var d=Oo(b,!1),e=/^\\s*([+\\-]?\\d*\\.?\\d+(?:[eE][+\\-]?\\d+)?)\\s*/,f=[],g;g=e.exec(d);)f.push(parseFloat(g[1])),d=d.substr(g[0].length);if(\"\"===d){d=c[0].srsName;e=\"enu\";d&&(e=Ie(Fe(d)));if(\"neu\"===e)for(d=0,e=f.length;d<e;d+=3)g=f[d],f[d]=f[d+1],f[d+1]=g;d=f.length;2==d&&f.push(0);return 0===d?void 0:f}};\nl.Mf=function(b,c){var d=Oo(b,!1).replace(/^\\s*|\\s*$/g,\"\"),e=c[0].srsName,f=b.parentNode.getAttribute(\"srsDimension\"),g=\"enu\";e&&(g=Ie(Fe(e)));d=d.split(/\\s+/);e=2;b.getAttribute(\"srsDimension\")?e=Cs(b.getAttribute(\"srsDimension\")):b.getAttribute(\"dimension\")?e=Cs(b.getAttribute(\"dimension\")):f&&(e=Cs(f));for(var h,k,m=[],n=0,p=d.length;n<p;n+=e)f=parseFloat(d[n]),h=parseFloat(d[n+1]),k=3===e?parseFloat(d[n+2]):0,\"en\"===g.substr(0,2)?m.push(f,h,k):m.push(h,f,k);return m};\nl.Ld=Object({\"http://www.opengis.net/gml\":{pos:kp(Is.prototype.ko),posList:kp(Is.prototype.Mf)}});l.Ve=Object({\"http://www.opengis.net/gml\":{interior:Is.prototype.bl,exterior:Is.prototype.uj}});\nl.ag=Object({\"http://www.opengis.net/gml\":{Point:kp(vs.prototype.Jh),MultiPoint:kp(vs.prototype.Hh),LineString:kp(vs.prototype.Je),MultiLineString:kp(vs.prototype.Gh),LinearRing:kp(vs.prototype.Fh),Polygon:kp(vs.prototype.Ke),MultiPolygon:kp(vs.prototype.Ih),Surface:kp(Is.prototype.Lh),MultiSurface:kp(Is.prototype.oo),Curve:kp(Is.prototype.Ah),MultiCurve:kp(Is.prototype.no),Envelope:kp(Is.prototype.io)}});l.Fi=Object({\"http://www.opengis.net/gml\":{curveMember:jp(Is.prototype.qg),curveMembers:jp(Is.prototype.qg)}});\nl.Ji=Object({\"http://www.opengis.net/gml\":{surfaceMember:jp(Is.prototype.hi),surfaceMembers:jp(Is.prototype.hi)}});l.Bi=Object({\"http://www.opengis.net/gml\":{LineString:jp(vs.prototype.Je),Curve:jp(Is.prototype.Ah)}});l.Qi=Object({\"http://www.opengis.net/gml\":{Polygon:jp(vs.prototype.Ke),Surface:jp(Is.prototype.Lh)}});l.Ri=Object({\"http://www.opengis.net/gml\":{patches:kp(Is.prototype.ro)}});l.Ci=Object({\"http://www.opengis.net/gml\":{segments:kp(Is.prototype.to)}});\nl.Di=Object({\"http://www.opengis.net/gml\":{lowerCorner:jp(Is.prototype.Mf),upperCorner:jp(Is.prototype.Mf)}});l.Ki=Object({\"http://www.opengis.net/gml\":{PolygonPatch:kp(Is.prototype.so)}});l.Pi=Object({\"http://www.opengis.net/gml\":{LineStringSegment:kp(Is.prototype.mo)}});function Js(b,c,d){d=d[d.length-1].srsName;c=c.Y();for(var e=c.length,f=Array(e),g,h=0;h<e;++h){g=c[h];var k=h,m=\"enu\";d&&(m=Ie(Fe(d)));f[k]=\"en\"===m.substr(0,2)?g[0]+\" \"+g[1]:g[1]+\" \"+g[0]}Es(b,f.join(\" \"))}\nl.wi=function(b,c,d){var e=d[d.length-1].srsName;e&&b.setAttribute(\"srsName\",e);e=No(b.namespaceURI,\"pos\");b.appendChild(e);d=d[d.length-1].srsName;b=\"enu\";d&&(b=Ie(Fe(d)));c=c.Y();Es(e,\"en\"===b.substr(0,2)?c[0]+\" \"+c[1]:c[1]+\" \"+c[0])};var Ks={\"http://www.opengis.net/gml\":{lowerCorner:N(Es),upperCorner:N(Es)}};l=Is.prototype;l.fp=function(b,c,d){var e=d[d.length-1].srsName;e&&b.setAttribute(\"srsName\",e);sp({node:b},Ks,pp,[c[0]+\" \"+c[1],c[2]+\" \"+c[3]],d,[\"lowerCorner\",\"upperCorner\"],this)};\nl.ti=function(b,c,d){var e=d[d.length-1].srsName;e&&b.setAttribute(\"srsName\",e);e=No(b.namespaceURI,\"posList\");b.appendChild(e);Js(e,c,d)};l.Oi=function(b,c){var d=c[c.length-1],e=d.node,f=d.exteriorWritten;void 0===f&&(d.exteriorWritten=!0);return No(e.namespaceURI,void 0!==f?\"interior\":\"exterior\")};\nl.Ue=function(b,c,d){var e=d[d.length-1].srsName;\"PolygonPatch\"!==b.nodeName&&e&&b.setAttribute(\"srsName\",e);\"Polygon\"===b.nodeName||\"PolygonPatch\"===b.nodeName?(c=c.ae(),sp({node:b,srsName:e},Ls,this.Oi,c,d,void 0,this)):\"Surface\"===b.nodeName&&(e=No(b.namespaceURI,\"patches\"),b.appendChild(e),b=No(e.namespaceURI,\"PolygonPatch\"),e.appendChild(b),this.Ue(b,c,d))};\nl.Pe=function(b,c,d){var e=d[d.length-1].srsName;\"LineStringSegment\"!==b.nodeName&&e&&b.setAttribute(\"srsName\",e);\"LineString\"===b.nodeName||\"LineStringSegment\"===b.nodeName?(e=No(b.namespaceURI,\"posList\"),b.appendChild(e),Js(e,c,d)):\"Curve\"===b.nodeName&&(e=No(b.namespaceURI,\"segments\"),b.appendChild(e),b=No(e.namespaceURI,\"LineStringSegment\"),e.appendChild(b),this.Pe(b,c,d))};\nl.vi=function(b,c,d){var e=d[d.length-1],f=e.srsName,e=e.surface;f&&b.setAttribute(\"srsName\",f);c=c.be();sp({node:b,srsName:f,surface:e},Ms,this.f,c,d,void 0,this)};l.gp=function(b,c,d){var e=d[d.length-1].srsName;e&&b.setAttribute(\"srsName\",e);c=c.ue();sp({node:b,srsName:e},Ns,np(\"pointMember\"),c,d,void 0,this)};l.ui=function(b,c,d){var e=d[d.length-1],f=e.srsName,e=e.curve;f&&b.setAttribute(\"srsName\",f);c=c.rd();sp({node:b,srsName:f,curve:e},Os,this.f,c,d,void 0,this)};\nl.xi=function(b,c,d){var e=No(b.namespaceURI,\"LinearRing\");b.appendChild(e);this.ti(e,c,d)};l.yi=function(b,c,d){var e=this.b(c,d);e&&(b.appendChild(e),this.Ue(e,c,d))};l.hp=function(b,c,d){var e=No(b.namespaceURI,\"Point\");b.appendChild(e);this.wi(e,c,d)};l.si=function(b,c,d){var e=this.b(c,d);e&&(b.appendChild(e),this.Pe(e,c,d))};\nl.Se=function(b,c,d){var e=d[d.length-1],f=Ub(e);f.node=b;var g;ga(c)?e.dataProjection?g=af(c,e.featureProjection,e.dataProjection):g=c:g=Tr(c,!0,e);sp(f,Ps,this.b,[g],d,void 0,this)};\nl.ni=function(b,c,d){var e=c.Na();e&&b.setAttribute(\"fid\",e);var e=d[d.length-1],f=e.featureNS,g=c.a;e.uc||(e.uc={},e.uc[f]={});var h=c.P();c=[];var k=[],m;for(m in h){var n=h[m];null!==n&&(c.push(m),k.push(n),m==g||n instanceof bf?m in e.uc[f]||(e.uc[f][m]=N(this.Se,this)):m in e.uc[f]||(e.uc[f][m]=N(Es)))}m=Ub(e);m.node=b;sp(m,e.uc,np(void 0,f),k,d,c)};\nvar Ms={\"http://www.opengis.net/gml\":{surfaceMember:N(Is.prototype.yi),polygonMember:N(Is.prototype.yi)}},Ns={\"http://www.opengis.net/gml\":{pointMember:N(Is.prototype.hp)}},Os={\"http://www.opengis.net/gml\":{lineStringMember:N(Is.prototype.si),curveMember:N(Is.prototype.si)}},Ls={\"http://www.opengis.net/gml\":{exterior:N(Is.prototype.xi),interior:N(Is.prototype.xi)}},Ps={\"http://www.opengis.net/gml\":{Curve:N(Is.prototype.Pe),MultiCurve:N(Is.prototype.ui),Point:N(Is.prototype.wi),MultiPoint:N(Is.prototype.gp),\nLineString:N(Is.prototype.Pe),MultiLineString:N(Is.prototype.ui),LinearRing:N(Is.prototype.ti),Polygon:N(Is.prototype.Ue),MultiPolygon:N(Is.prototype.vi),Surface:N(Is.prototype.Ue),MultiSurface:N(Is.prototype.vi),Envelope:N(Is.prototype.fp)}},Qs={MultiLineString:\"lineStringMember\",MultiCurve:\"curveMember\",MultiPolygon:\"polygonMember\",MultiSurface:\"surfaceMember\"};Is.prototype.f=function(b,c){return No(\"http://www.opengis.net/gml\",Qs[c[c.length-1].node.nodeName])};\nIs.prototype.b=function(b,c){var d=c[c.length-1],e=d.multiSurface,f=d.surface,g=d.curve,d=d.multiCurve,h;ga(b)?h=\"Envelope\":(h=b.V(),\"MultiPolygon\"===h&&!0===e?h=\"MultiSurface\":\"Polygon\"===h&&!0===f?h=\"Surface\":\"LineString\"===h&&!0===g?h=\"Curve\":\"MultiLineString\"===h&&!0===d&&(h=\"MultiCurve\"));return No(\"http://www.opengis.net/gml\",h)};\nIs.prototype.B=function(b,c){c=Sr(this,c);var d=No(\"http://www.opengis.net/gml\",\"geom\"),e={node:d,srsName:this.srsName,curve:this.g,surface:this.l,multiSurface:this.i,multiCurve:this.j};c&&Xb(e,c);this.Se(d,b,[e]);return d};\nIs.prototype.c=function(b,c){c=Sr(this,c);var d=No(\"http://www.opengis.net/gml\",\"featureMembers\");gp(d,\"http://www.w3.org/2001/XMLSchema-instance\",\"xsi:schemaLocation\",this.schemaLocation);var e={srsName:this.srsName,curve:this.g,surface:this.l,multiSurface:this.i,multiCurve:this.j,featureNS:this.featureNS,featureType:this.featureType};c&&Xb(e,c);var e=[e],f=e[e.length-1],g=f.featureType,h=f.featureNS,k={};k[h]={};k[h][g]=N(this.ni,this);f=Ub(f);f.node=d;sp(f,k,np(g,h),b,e);return d};function Rs(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=Fe(\"EPSG:4326\");this.a=b.readExtensions}y(Rs,ss);var Ss=[null,\"http://www.topografix.com/GPX/1/0\",\"http://www.topografix.com/GPX/1/1\"];function Ts(b,c,d){b.push(parseFloat(c.getAttribute(\"lon\")),parseFloat(c.getAttribute(\"lat\")));\"ele\"in d?(b.push(d.ele),delete d.ele):b.push(0);\"time\"in d?(b.push(d.time),delete d.time):b.push(0);return b}\nfunction Us(b,c){var d=c[c.length-1],e=b.getAttribute(\"href\");null!==e&&(d.link=e);rp(Vs,b,c)}function Ws(b,c){c[c.length-1].extensionsNode_=b}function Xs(b,c){var d=c[0],e=Q({flatCoordinates:[]},Ys,b,c);if(e){var f=e.flatCoordinates;delete e.flatCoordinates;var g=new T(null);g.ba(\"XYZM\",f);Tr(g,!1,d);d=new sn(g);d.I(e);return d}}\nfunction Zs(b,c){var d=c[0],e=Q({flatCoordinates:[],ends:[]},$s,b,c);if(e){var f=e.flatCoordinates;delete e.flatCoordinates;var g=e.ends;delete e.ends;var h=new U(null);h.ba(\"XYZM\",f,g);Tr(h,!1,d);d=new sn(h);d.I(e);return d}}function at(b,c){var d=c[0],e=Q({},bt,b,c);if(e){var f=Ts([],b,e),f=new D(f,\"XYZM\");Tr(f,!1,d);d=new sn(f);d.I(e);return d}}\nvar ct={rte:Xs,trk:Zs,wpt:at},dt=P(Ss,{rte:jp(Xs),trk:jp(Zs),wpt:jp(at)}),Vs=P(Ss,{text:M(W,\"linkText\"),type:M(W,\"linkType\")}),Ys=P(Ss,{name:M(W),cmt:M(W),desc:M(W),src:M(W),link:Us,number:M(Bs),extensions:Ws,type:M(W),rtept:function(b,c){var d=Q({},et,b,c);d&&Ts(c[c.length-1].flatCoordinates,b,d)}}),et=P(Ss,{ele:M(zs),time:M(ys)}),$s=P(Ss,{name:M(W),cmt:M(W),desc:M(W),src:M(W),link:Us,number:M(Bs),type:M(W),extensions:Ws,trkseg:function(b,c){var d=c[c.length-1];rp(ft,b,c);d.ends.push(d.flatCoordinates.length)}}),\nft=P(Ss,{trkpt:function(b,c){var d=Q({},gt,b,c);d&&Ts(c[c.length-1].flatCoordinates,b,d)}}),gt=P(Ss,{ele:M(zs),time:M(ys)}),bt=P(Ss,{ele:M(zs),time:M(ys),magvar:M(zs),geoidheight:M(zs),name:M(W),cmt:M(W),desc:M(W),src:M(W),link:Us,sym:M(W),type:M(W),fix:M(W),sat:M(Bs),hdop:M(zs),vdop:M(zs),pdop:M(zs),ageofdgpsdata:M(zs),dgpsid:M(Bs),extensions:Ws});\nfunction ht(b,c){c||(c=[]);for(var d=0,e=c.length;d<e;++d){var f=c[d];if(b.a){var g=f.get(\"extensionsNode_\")||null;b.a(f,g)}f.set(\"extensionsNode_\",void 0)}}Rs.prototype.Bh=function(b,c){if(!vb(Ss,b.namespaceURI))return null;var d=ct[b.localName];if(!d)return null;d=d(b,[Rr(this,b,c)]);if(!d)return null;ht(this,[d]);return d};Rs.prototype.hc=function(b,c){if(!vb(Ss,b.namespaceURI))return[];if(\"gpx\"==b.localName){var d=Q([],dt,b,[Rr(this,b,c)]);if(d)return ht(this,d),d}return[]};\nfunction it(b,c,d){b.setAttribute(\"href\",c);c=d[d.length-1].properties;sp({node:b},jt,pp,[c.linkText,c.linkType],d,kt)}function lt(b,c,d){var e=d[d.length-1],f=e.node.namespaceURI,g=e.properties;gp(b,null,\"lat\",c[1]);gp(b,null,\"lon\",c[0]);switch(e.geometryLayout){case \"XYZM\":0!==c[3]&&(g.time=c[3]);case \"XYZ\":0!==c[2]&&(g.ele=c[2]);break;case \"XYM\":0!==c[2]&&(g.time=c[2])}c=mt[f];e=qp(g,c);sp({node:b,properties:g},nt,pp,e,d,c)}\nvar kt=[\"text\",\"type\"],jt=P(Ss,{text:N(Es),type:N(Es)}),ot=P(Ss,\"name cmt desc src link number type rtept\".split(\" \")),pt=P(Ss,{name:N(Es),cmt:N(Es),desc:N(Es),src:N(Es),link:N(it),number:N(Gs),type:N(Es),rtept:mp(N(lt))}),qt=P(Ss,\"name cmt desc src link number type trkseg\".split(\" \")),tt=P(Ss,{name:N(Es),cmt:N(Es),desc:N(Es),src:N(Es),link:N(it),number:N(Gs),type:N(Es),trkseg:mp(N(function(b,c,d){sp({node:b,geometryLayout:c.b,properties:{}},rt,st,c.Y(),d)}))}),st=np(\"trkpt\"),rt=P(Ss,{trkpt:N(lt)}),\nmt=P(Ss,\"ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid\".split(\" \")),nt=P(Ss,{ele:N(Fs),time:N(function(b,c){var d=new Date(1E3*c),d=d.getUTCFullYear()+\"-\"+Oa(d.getUTCMonth()+1)+\"-\"+Oa(d.getUTCDate())+\"T\"+Oa(d.getUTCHours())+\":\"+Oa(d.getUTCMinutes())+\":\"+Oa(d.getUTCSeconds())+\"Z\";b.appendChild(Ko.createTextNode(d))}),magvar:N(Fs),geoidheight:N(Fs),name:N(Es),cmt:N(Es),desc:N(Es),src:N(Es),link:N(it),sym:N(Es),type:N(Es),fix:N(Es),sat:N(Gs),\nhdop:N(Fs),vdop:N(Fs),pdop:N(Fs),ageofdgpsdata:N(Fs),dgpsid:N(Gs)}),ut={Point:\"wpt\",LineString:\"rte\",MultiLineString:\"trk\"};function vt(b,c){var d=b.W();if(d&&(d=ut[d.V()]))return No(c[c.length-1].node.namespaceURI,d)}\nvar wt=P(Ss,{rte:N(function(b,c,d){var e=d[0],f=c.P();b={node:b,properties:f};if(c=c.W())c=Tr(c,!0,e),b.geometryLayout=c.b,f.rtept=c.Y();e=ot[d[d.length-1].node.namespaceURI];f=qp(f,e);sp(b,pt,pp,f,d,e)}),trk:N(function(b,c,d){var e=d[0],f=c.P();b={node:b,properties:f};if(c=c.W())c=Tr(c,!0,e),f.trkseg=c.rd();e=qt[d[d.length-1].node.namespaceURI];f=qp(f,e);sp(b,tt,pp,f,d,e)}),wpt:N(function(b,c,d){var e=d[0],f=d[d.length-1];f.properties=c.P();if(c=c.W())c=Tr(c,!0,e),f.geometryLayout=c.b,lt(b,c.Y(),\nd)})});Rs.prototype.c=function(b,c){c=Sr(this,c);var d=No(\"http://www.topografix.com/GPX/1/1\",\"gpx\");sp({node:d},wt,vt,b,[c]);return d};function xt(b){b=yt(b);return db(b,function(b){return b.b.substring(b.c,b.a)})}function zt(b,c,d){this.b=b;this.c=c;this.a=d}function yt(b){for(var c=RegExp(\"\\r\\n|\\r|\\n\",\"g\"),d=0,e,f=[];e=c.exec(b);)d=new zt(b,d,e.index),f.push(d),d=c.lastIndex;d<b.length&&(d=new zt(b,d,b.length),f.push(d));return f};function At(){this.defaultDataProjection=null}y(At,Qr);l=At.prototype;l.V=function(){return\"text\"};l.Tb=function(b,c){return this.Cd(ia(b)?b:\"\",Sr(this,c))};l.Ba=function(b,c){return this.Kf(ia(b)?b:\"\",Sr(this,c))};l.Sc=function(b,c){return this.Ed(ia(b)?b:\"\",Sr(this,c))};l.Ia=function(){return this.defaultDataProjection};l.Jd=function(b,c){return this.Qe(b,Sr(this,c))};l.Vb=function(b,c){return this.oi(b,Sr(this,c))};l.Wc=function(b,c){return this.Kd(b,Sr(this,c))};function Bt(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=Fe(\"EPSG:4326\");this.a=b.altitudeMode?b.altitudeMode:\"none\"}y(Bt,At);var Ct=/^B(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{5})([NS])(\\d{3})(\\d{5})([EW])([AV])(\\d{5})(\\d{5})/,Dt=/^H.([A-Z]{3}).*?:(.*)/,Et=/^HFDTE(\\d{2})(\\d{2})(\\d{2})/;\nBt.prototype.Cd=function(b,c){var d=this.a,e=xt(b),f={},g=[],h=2E3,k=0,m=1,n,p;n=0;for(p=e.length;n<p;++n){var q=e[n],r;if(\"B\"==q.charAt(0)){if(r=Ct.exec(q)){var q=parseInt(r[1],10),t=parseInt(r[2],10),x=parseInt(r[3],10),z=parseInt(r[4],10)+parseInt(r[5],10)/6E4;\"S\"==r[6]&&(z=-z);var B=parseInt(r[7],10)+parseInt(r[8],10)/6E4;\"W\"==r[9]&&(B=-B);g.push(B,z);\"none\"!=d&&g.push(\"gps\"==d?parseInt(r[11],10):\"barometric\"==d?parseInt(r[12],10):0);g.push(Date.UTC(h,k,m,q,t,x)/1E3)}}else if(\"H\"==q.charAt(0))if(r=\nEt.exec(q))m=parseInt(r[1],10),k=parseInt(r[2],10)-1,h=2E3+parseInt(r[3],10);else if(r=Dt.exec(q))f[r[1]]=r[2].trim(),Et.exec(q)}if(0===g.length)return null;e=new T(null);e.ba(\"none\"==d?\"XYM\":\"XYZM\",g);d=new sn(Tr(e,!1,c));d.I(f);return d};Bt.prototype.Kf=function(b,c){var d=this.Cd(b,c);return d?[d]:[]};function Ft(b,c){this.c=this.i=this.f=\"\";this.l=null;this.g=this.a=\"\";this.j=!1;var d;b instanceof Ft?(this.j=ca(c)?c:b.j,Gt(this,b.f),this.i=b.i,this.c=b.c,Ht(this,b.l),this.a=b.a,It(this,b.b.clone()),this.g=b.g):b&&(d=String(b).match(jo))?(this.j=!!c,Gt(this,d[1]||\"\",!0),this.i=Jt(d[2]||\"\"),this.c=Jt(d[3]||\"\",!0),Ht(this,d[4]),this.a=Jt(d[5]||\"\",!0),It(this,d[6]||\"\",!0),this.g=Jt(d[7]||\"\")):(this.j=!!c,this.b=new Kt(null,0,this.j))}\nFt.prototype.toString=function(){var b=[],c=this.f;c&&b.push(Lt(c,Mt,!0),\":\");var d=this.c;if(d||\"file\"==c)b.push(\"//\"),(c=this.i)&&b.push(Lt(c,Mt,!0),\"@\"),b.push(encodeURIComponent(String(d)).replace(/%25([0-9a-fA-F]{2})/g,\"%$1\")),d=this.l,null!=d&&b.push(\":\",String(d));if(d=this.a)this.c&&\"/\"!=d.charAt(0)&&b.push(\"/\"),b.push(Lt(d,\"/\"==d.charAt(0)?Nt:Ot,!0));(d=this.b.toString())&&b.push(\"?\",d);(d=this.g)&&b.push(\"#\",Lt(d,Pt));return b.join(\"\")};Ft.prototype.clone=function(){return new Ft(this)};\nfunction Gt(b,c,d){b.f=d?Jt(c,!0):c;b.f&&(b.f=b.f.replace(/:$/,\"\"))}function Ht(b,c){if(c){c=Number(c);if(isNaN(c)||0>c)throw Error(\"Bad port number \"+c);b.l=c}else b.l=null}function It(b,c,d){c instanceof Kt?(b.b=c,Qt(b.b,b.j)):(d||(c=Lt(c,Rt)),b.b=new Kt(c,0,b.j))}function St(b){return b instanceof Ft?b.clone():new Ft(b,void 0)}\nfunction Tt(b,c){b instanceof Ft||(b=St(b));c instanceof Ft||(c=St(c));var d=b,e=c,f=d.clone(),g=!!e.f;g?Gt(f,e.f):g=!!e.i;g?f.i=e.i:g=!!e.c;g?f.c=e.c:g=null!=e.l;var h=e.a;if(g)Ht(f,e.l);else if(g=!!e.a)if(\"/\"!=h.charAt(0)&&(d.c&&!d.a?h=\"/\"+h:(d=f.a.lastIndexOf(\"/\"),-1!=d&&(h=f.a.substr(0,d+1)+h))),d=h,\"..\"==d||\".\"==d)h=\"\";else if(-1!=d.indexOf(\"./\")||-1!=d.indexOf(\"/.\")){for(var h=0==d.lastIndexOf(\"/\",0),d=d.split(\"/\"),k=[],m=0;m<d.length;){var n=d[m++];\".\"==n?h&&m==d.length&&k.push(\"\"):\"..\"==n?\n((1<k.length||1==k.length&&\"\"!=k[0])&&k.pop(),h&&m==d.length&&k.push(\"\")):(k.push(n),h=!0)}h=k.join(\"/\")}else h=d;g?f.a=h:g=\"\"!==e.b.toString();g?It(f,Jt(e.b.toString())):g=!!e.g;g&&(f.g=e.g);return f}function Jt(b,c){return b?c?decodeURI(b.replace(/%25/g,\"%2525\")):decodeURIComponent(b):\"\"}function Lt(b,c,d){return ia(b)?(b=encodeURI(b).replace(c,Ut),d&&(b=b.replace(/%25([0-9a-fA-F]{2})/g,\"%$1\")),b):null}function Ut(b){b=b.charCodeAt(0);return\"%\"+(b>>4&15).toString(16)+(b&15).toString(16)}\nvar Mt=/[#\\/\\?@]/g,Ot=/[\\#\\?:]/g,Nt=/[\\#\\?]/g,Rt=/[\\#\\?@]/g,Pt=/#/g;function Kt(b,c,d){this.c=this.a=null;this.b=b||null;this.f=!!d}function Vt(b){b.a||(b.a=new ri,b.c=0,b.b&&ko(b.b,function(c,d){b.add(decodeURIComponent(c.replace(/\\+/g,\" \")),d)}))}l=Kt.prototype;l.nc=function(){Vt(this);return this.c};l.add=function(b,c){Vt(this);this.b=null;b=Wt(this,b);var d=this.a.get(b);d||this.a.set(b,d=[]);d.push(c);this.c++;return this};\nl.remove=function(b){Vt(this);b=Wt(this,b);return ti(this.a.c,b)?(this.b=null,this.c-=this.a.get(b).length,this.a.remove(b)):!1};l.clear=function(){this.a=this.b=null;this.c=0};l.Ka=function(){Vt(this);return 0==this.c};function Xt(b,c){Vt(b);c=Wt(b,c);return ti(b.a.c,c)}l.O=function(){Vt(this);for(var b=this.a.pc(),c=this.a.O(),d=[],e=0;e<c.length;e++)for(var f=b[e],g=0;g<f.length;g++)d.push(c[e]);return d};\nl.pc=function(b){Vt(this);var c=[];if(ia(b))Xt(this,b)&&(c=ib(c,this.a.get(Wt(this,b))));else{b=this.a.pc();for(var d=0;d<b.length;d++)c=ib(c,b[d])}return c};l.set=function(b,c){Vt(this);this.b=null;b=Wt(this,b);Xt(this,b)&&(this.c-=this.a.get(b).length);this.a.set(b,[c]);this.c++;return this};l.get=function(b,c){var d=b?this.pc(b):[];return 0<d.length?String(d[0]):c};function Yt(b,c,d){b.remove(c);0<d.length&&(b.b=null,b.a.set(Wt(b,c),jb(d)),b.c+=d.length)}\nl.toString=function(){if(this.b)return this.b;if(!this.a)return\"\";for(var b=[],c=this.a.O(),d=0;d<c.length;d++)for(var e=c[d],f=encodeURIComponent(String(e)),e=this.pc(e),g=0;g<e.length;g++){var h=f;\"\"!==e[g]&&(h+=\"=\"+encodeURIComponent(String(e[g])));b.push(h)}return this.b=b.join(\"&\")};l.clone=function(){var b=new Kt;b.b=this.b;this.a&&(b.a=this.a.clone(),b.c=this.c);return b};function Wt(b,c){var d=String(c);b.f&&(d=d.toLowerCase());return d}\nfunction Qt(b,c){c&&!b.f&&(Vt(b),b.b=null,b.a.forEach(function(b,c){var f=c.toLowerCase();c!=f&&(this.remove(c),Yt(this,f,b))},b));b.f=c};function Zt(b){b=b||{};this.f=b.font;this.i=b.rotation;this.c=b.scale;this.b=b.text;this.B=b.textAlign;this.u=b.textBaseline;this.a=void 0!==b.fill?b.fill:new Wl({color:\"#333\"});this.l=void 0!==b.stroke?b.stroke:null;this.g=void 0!==b.offsetX?b.offsetX:0;this.j=void 0!==b.offsetY?b.offsetY:0}l=Zt.prototype;l.Jj=function(){return this.f};l.Xj=function(){return this.g};l.Yj=function(){return this.j};l.zn=function(){return this.a};l.An=function(){return this.i};l.Bn=function(){return this.c};l.Cn=function(){return this.l};\nl.Dn=function(){return this.b};l.jk=function(){return this.B};l.kk=function(){return this.u};l.Lo=function(b){this.f=b};l.$h=function(b){this.g=b};l.ai=function(b){this.j=b};l.Ko=function(b){this.a=b};l.En=function(b){this.i=b};l.Fn=function(b){this.c=b};l.Ro=function(b){this.l=b};l.ci=function(b){this.b=b};l.di=function(b){this.B=b};l.So=function(b){this.u=b};function $t(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=Fe(\"EPSG:4326\");this.b=b.defaultStyle?b.defaultStyle:au;this.f=void 0!==b.extractStyles?b.extractStyles:!0;this.j=void 0!==b.writeStyles?b.writeStyles:!0;this.a={};this.g=void 0!==b.showPointNames?b.showPointNames:!0}y($t,ss);\nvar bu=[\"http://www.google.com/kml/ext/2.2\"],cu=[null,\"http://earth.google.com/kml/2.0\",\"http://earth.google.com/kml/2.1\",\"http://earth.google.com/kml/2.2\",\"http://www.opengis.net/kml/2.2\"],du=[255,255,255,1],eu=new Wl({color:du}),fu=[20,2],gu=[64,64],hu=new wk({anchor:fu,anchorOrigin:\"bottom-left\",anchorXUnits:\"pixels\",anchorYUnits:\"pixels\",crossOrigin:\"anonymous\",rotation:0,scale:.5,size:gu,src:\"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png\"}),iu=new am({color:du,width:1}),ju=new Zt({font:\"bold 16px Helvetica\",\nfill:eu,stroke:new am({color:[51,51,51,1],width:2}),scale:.8}),au=[new cm({fill:eu,image:hu,text:ju,stroke:iu,zIndex:0})],ku={fraction:\"fraction\",pixels:\"pixels\"};function lu(b,c){var d=null,e=[0,0],f=\"start\";b.b&&(d=b.b.qd())&&2==d.length&&(e[0]=b.b.i*d[0]/2,e[1]=-b.b.i*d[1]/2,f=\"left\");Qb(b.c)?d=new Zt({text:c,offsetX:e[0],offsetY:e[1],textAlign:f}):(d=Ub(b.c),d.ci(c),d.di(f),d.$h(e[0]),d.ai(e[1]));return new cm({text:d})}\nfunction mu(b,c,d,e,f){return function(){var g=f,h=\"\";g&&this.W()&&(g=\"Point\"===this.W().V());g&&(h=this.P().name,g=g&&h);if(b)return g?(g=lu(b[0],h),b.concat(g)):b;if(c){var k=nu(c,d,e);return g?(g=lu(k[0],h),k.concat(g)):k}return g?(g=lu(d[0],h),d.concat(g)):d}}function nu(b,c,d){return ga(b)?b:ia(b)?(!(b in d)&&\"#\"+b in d&&(b=\"#\"+b),nu(d[b],c,d)):c}\nfunction ou(b){b=Oo(b,!1);if(b=/^\\s*#?\\s*([0-9A-Fa-f]{8})\\s*$/.exec(b))return b=b[1],[parseInt(b.substr(6,2),16),parseInt(b.substr(4,2),16),parseInt(b.substr(2,2),16),parseInt(b.substr(0,2),16)/255]}function pu(b){b=Oo(b,!1);for(var c=[],d=/^\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)\\s*,\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?)(?:\\s*,\\s*([+\\-]?\\d*\\.?\\d+(?:e[+\\-]?\\d+)?))?\\s*/i,e;e=d.exec(b);)c.push(parseFloat(e[1]),parseFloat(e[2]),e[3]?parseFloat(e[3]):0),b=b.substr(e[0].length);return\"\"!==b?void 0:c}\nfunction qu(b){var c=Oo(b,!1);return b.baseURI?Tt(b.baseURI,c.trim()).toString():c.trim()}function ru(b){b=zs(b);if(void 0!==b)return Math.sqrt(b)}function su(b,c){return Q(null,tu,b,c)}function uu(b,c){var d=Q({v:[],li:[]},vu,b,c);if(d){var e=d.v,d=d.li,f,g;f=0;for(g=Math.min(e.length,d.length);f<g;++f)e[4*f+3]=d[f];d=new T(null);d.ba(\"XYZM\",e);return d}}function wu(b,c){var d=Q({},xu,b,c),e=Q(null,yu,b,c);if(e){var f=new T(null);f.ba(\"XYZ\",e);f.I(d);return f}}\nfunction zu(b,c){var d=Q({},xu,b,c),e=Q(null,yu,b,c);if(e){var f=new E(null);f.ba(\"XYZ\",e,[e.length]);f.I(d);return f}}\nfunction Au(b,c){var d=Q([],Bu,b,c);if(!d)return null;if(0===d.length)return new js(d);var e=!0,f=d[0].V(),g,h,k;h=1;for(k=d.length;h<k;++h)if(g=d[h],g.V()!=f){e=!1;break}if(e){if(\"Point\"==f){g=d[0];e=g.b;f=g.ja();h=1;for(k=d.length;h<k;++h)g=d[h],lb(f,g.ja());g=new $r(null);g.ba(e,f);Cu(g,d);return g}return\"LineString\"==f?(g=new U(null),Zr(g,d),Cu(g,d),g):\"Polygon\"==f?(g=new V(null),bs(g,d),Cu(g,d),g):\"GeometryCollection\"==f?new js(d):null}return new js(d)}\nfunction Du(b,c){var d=Q({},xu,b,c),e=Q(null,yu,b,c);if(e){var f=new D(null);f.ba(\"XYZ\",e);f.I(d);return f}}function Eu(b,c){var d=Q({},xu,b,c),e=Q([null],Fu,b,c);if(e&&e[0]){var f=new E(null),g=e[0],h=[g.length],k,m;k=1;for(m=e.length;k<m;++k)lb(g,e[k]),h.push(g.length);f.ba(\"XYZ\",g,h);f.I(d);return f}}\nfunction Gu(b,c){var d=Q({},Hu,b,c);if(!d)return null;var e=\"fillStyle\"in d?d.fillStyle:eu,f=d.fill;void 0===f||f||(e=null);var f=\"imageStyle\"in d?d.imageStyle:hu,g=\"textStyle\"in d?d.textStyle:ju,h=\"strokeStyle\"in d?d.strokeStyle:iu,d=d.outline;void 0===d||d||(h=null);return[new cm({fill:e,image:f,stroke:h,text:g,zIndex:void 0})]}\nfunction Cu(b,c){var d=c.length,e=Array(c.length),f=Array(c.length),g,h,k,m;k=m=!1;for(h=0;h<d;++h)g=c[h],e[h]=g.get(\"extrude\"),f[h]=g.get(\"altitudeMode\"),k=k||void 0!==e[h],m=m||f[h];k&&b.set(\"extrude\",e);m&&b.set(\"altitudeMode\",f)}function Iu(b,c){rp(Ju,b,c)}\nvar Ku=P(cu,{value:kp(W)}),Ju=P(cu,{Data:function(b,c){var d=b.getAttribute(\"name\");if(null!==d){var e=Q(void 0,Ku,b,c);e&&(c[c.length-1][d]=e)}},SchemaData:function(b,c){rp(Lu,b,c)}}),xu=P(cu,{extrude:M(ws),altitudeMode:M(W)}),tu=P(cu,{coordinates:kp(pu)}),Fu=P(cu,{innerBoundaryIs:function(b,c){var d=Q(void 0,Mu,b,c);d&&c[c.length-1].push(d)},outerBoundaryIs:function(b,c){var d=Q(void 0,Nu,b,c);d&&(c[c.length-1][0]=d)}}),vu=P(cu,{when:function(b,c){var d=c[c.length-1].li,e=Oo(b,!1);if(e=/^\\s*(\\d{4})($|-(\\d{2})($|-(\\d{2})($|T(\\d{2}):(\\d{2}):(\\d{2})(Z|(?:([+\\-])(\\d{2})(?::(\\d{2}))?)))))\\s*$/.exec(e)){var f=\nDate.UTC(parseInt(e[1],10),e[3]?parseInt(e[3],10)-1:0,e[5]?parseInt(e[5],10):1,e[7]?parseInt(e[7],10):0,e[8]?parseInt(e[8],10):0,e[9]?parseInt(e[9],10):0);if(e[10]&&\"Z\"!=e[10]){var g=\"-\"==e[11]?-1:1,f=f+60*g*parseInt(e[12],10);e[13]&&(f+=3600*g*parseInt(e[13],10))}d.push(f)}else d.push(0)}},P(bu,{coord:function(b,c){var d=c[c.length-1].v,e=Oo(b,!1);(e=/^\\s*([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s+([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s+([+\\-]?\\d+(?:\\.\\d*)?(?:e[+\\-]?\\d*)?)\\s*$/i.exec(e))?d.push(parseFloat(e[1]),\nparseFloat(e[2]),parseFloat(e[3]),0):d.push(0,0,0,0)}})),yu=P(cu,{coordinates:kp(pu)}),Ou=P(cu,{href:M(qu)},P(bu,{x:M(zs),y:M(zs),w:M(zs),h:M(zs)})),Pu=P(cu,{Icon:M(function(b,c){var d=Q({},Ou,b,c);return d?d:null}),heading:M(zs),hotSpot:M(function(b){var c=b.getAttribute(\"xunits\"),d=b.getAttribute(\"yunits\");return{x:parseFloat(b.getAttribute(\"x\")),Zf:ku[c],y:parseFloat(b.getAttribute(\"y\")),$f:ku[d]}}),scale:M(ru)}),Mu=P(cu,{LinearRing:kp(su)}),Qu=P(cu,{color:M(ou),scale:M(ru)}),Ru=P(cu,{color:M(ou),\nwidth:M(zs)}),Bu=P(cu,{LineString:jp(wu),LinearRing:jp(zu),MultiGeometry:jp(Au),Point:jp(Du),Polygon:jp(Eu)}),Su=P(bu,{Track:jp(uu)}),Uu=P(cu,{ExtendedData:Iu,Link:function(b,c){rp(Tu,b,c)},address:M(W),description:M(W),name:M(W),open:M(ws),phoneNumber:M(W),visibility:M(ws)}),Tu=P(cu,{href:M(qu)}),Nu=P(cu,{LinearRing:kp(su)}),Vu=P(cu,{Style:M(Gu),key:M(W),styleUrl:M(function(b){var c=Oo(b,!1).trim();return b.baseURI?Tt(b.baseURI,c).toString():c})}),Xu=P(cu,{ExtendedData:Iu,MultiGeometry:M(Au,\"geometry\"),\nLineString:M(wu,\"geometry\"),LinearRing:M(zu,\"geometry\"),Point:M(Du,\"geometry\"),Polygon:M(Eu,\"geometry\"),Style:M(Gu),StyleMap:function(b,c){var d=Q(void 0,Wu,b,c);if(d){var e=c[c.length-1];ga(d)?e.Style=d:ia(d)&&(e.styleUrl=d)}},address:M(W),description:M(W),name:M(W),open:M(ws),phoneNumber:M(W),styleUrl:M(qu),visibility:M(ws)},P(bu,{MultiTrack:M(function(b,c){var d=Q([],Su,b,c);if(d){var e=new U(null);Zr(e,d);return e}},\"geometry\"),Track:M(uu,\"geometry\")})),Yu=P(cu,{color:M(ou),fill:M(ws),outline:M(ws)}),\nLu=P(cu,{SimpleData:function(b,c){var d=b.getAttribute(\"name\");if(null!==d){var e=W(b);c[c.length-1][d]=e}}}),Hu=P(cu,{IconStyle:function(b,c){var d=Q({},Pu,b,c);if(d){var e=c[c.length-1],f=\"Icon\"in d?d.Icon:{},g;g=(g=f.href)?g:\"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png\";var h,k,m,n=d.hotSpot;n?(h=[n.x,n.y],k=n.Zf,m=n.$f):\"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png\"===g?(h=fu,m=k=\"pixels\"):/^http:\\/\\/maps\\.(?:google|gstatic)\\.com\\//.test(g)&&(h=[.5,0],m=k=\"fraction\");\nvar p,n=f.x,q=f.y;void 0!==n&&void 0!==q&&(p=[n,q]);var r,n=f.w,f=f.h;void 0!==n&&void 0!==f&&(r=[n,f]);var t,f=d.heading;void 0!==f&&(t=Wa(f));d=d.scale;\"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png\"==g&&(r=gu,void 0===d&&(d=.5));h=new wk({anchor:h,anchorOrigin:\"bottom-left\",anchorXUnits:k,anchorYUnits:m,crossOrigin:\"anonymous\",offset:p,offsetOrigin:\"bottom-left\",rotation:t,scale:d,size:r,src:g});e.imageStyle=h}},LabelStyle:function(b,c){var d=Q({},Qu,b,c);d&&(c[c.length-1].textStyle=\nnew Zt({fill:new Wl({color:\"color\"in d?d.color:du}),scale:d.scale}))},LineStyle:function(b,c){var d=Q({},Ru,b,c);d&&(c[c.length-1].strokeStyle=new am({color:\"color\"in d?d.color:du,width:\"width\"in d?d.width:1}))},PolyStyle:function(b,c){var d=Q({},Yu,b,c);if(d){var e=c[c.length-1];e.fillStyle=new Wl({color:\"color\"in d?d.color:du});var f=d.fill;void 0!==f&&(e.fill=f);d=d.outline;void 0!==d&&(e.outline=d)}}}),Wu=P(cu,{Pair:function(b,c){var d=Q({},Vu,b,c);if(d){var e=d.key;e&&\"normal\"==e&&((e=d.styleUrl)&&\n(c[c.length-1]=e),(d=d.Style)&&(c[c.length-1]=d))}}});l=$t.prototype;l.Gf=function(b,c){So(b);var d=P(cu,{Document:ip(this.Gf,this),Folder:ip(this.Gf,this),Placemark:jp(this.Of,this),Style:ra(this.vo,this),StyleMap:ra(this.uo,this)});if(d=Q([],d,b,c,this))return d};\nl.Of=function(b,c){var d=Q({geometry:null},Xu,b,c);if(d){var e=new sn,f=b.getAttribute(\"id\");null!==f&&e.ic(f);var f=c[0],g=d.geometry;g&&Tr(g,!1,f);e.La(g);delete d.geometry;this.f&&e.vf(mu(d.Style,d.styleUrl,this.b,this.a,this.g));delete d.Style;e.I(d);return e}};l.vo=function(b,c){var d=b.getAttribute(\"id\");if(null!==d){var e=Gu(b,c);e&&(d=b.baseURI?Tt(b.baseURI,\"#\"+d).toString():\"#\"+d,this.a[d]=e)}};\nl.uo=function(b,c){var d=b.getAttribute(\"id\");if(null!==d){var e=Q(void 0,Wu,b,c);e&&(d=b.baseURI?Tt(b.baseURI,\"#\"+d).toString():\"#\"+d,this.a[d]=e)}};l.Bh=function(b,c){if(!vb(cu,b.namespaceURI))return null;var d=this.Of(b,[Rr(this,b,c)]);return d?d:null};\nl.hc=function(b,c){if(!vb(cu,b.namespaceURI))return[];var d;d=So(b);if(\"Document\"==d||\"Folder\"==d)return(d=this.Gf(b,[Rr(this,b,c)]))?d:[];if(\"Placemark\"==d)return(d=this.Of(b,[Rr(this,b,c)]))?[d]:[];if(\"kml\"==d){d=[];var e;for(e=b.firstElementChild;e;e=e.nextElementSibling){var f=this.hc(e,c);f&&lb(d,f)}return d}return[]};l.po=function(b){if(Vo(b))return Zu(this,b);if(Yo(b))return $u(this,b);if(ia(b))return b=hp(b),Zu(this,b)};\nfunction Zu(b,c){var d;for(d=c.firstChild;d;d=d.nextSibling)if(1==d.nodeType){var e=$u(b,d);if(e)return e}}function $u(b,c){var d;for(d=c.firstElementChild;d;d=d.nextElementSibling)if(vb(cu,d.namespaceURI)&&\"name\"==d.localName)return W(d);for(d=c.firstElementChild;d;d=d.nextElementSibling){var e=So(d);if(vb(cu,d.namespaceURI)&&(\"Document\"==e||\"Folder\"==e||\"Placemark\"==e||\"kml\"==e)&&(e=$u(b,d)))return e}}\nl.qo=function(b){var c=[];Vo(b)?lb(c,av(this,b)):Yo(b)?lb(c,bv(this,b)):ia(b)&&(b=hp(b),lb(c,av(this,b)));return c};function av(b,c){var d,e=[];for(d=c.firstChild;d;d=d.nextSibling)1==d.nodeType&&lb(e,bv(b,d));return e}\nfunction bv(b,c){var d,e=[];for(d=c.firstElementChild;d;d=d.nextElementSibling)if(vb(cu,d.namespaceURI)&&\"NetworkLink\"==d.localName){var f=Q({},Uu,d,[]);e.push(f)}for(d=c.firstElementChild;d;d=d.nextElementSibling)f=So(d),!vb(cu,d.namespaceURI)||\"Document\"!=f&&\"Folder\"!=f&&\"kml\"!=f||lb(e,bv(b,d));return e}function cv(b,c){var d=tg(c),d=[255*(4==d.length?d[3]:1),d[2],d[1],d[0]],e;for(e=0;4>e;++e){var f=parseInt(d[e],10).toString(16);d[e]=1==f.length?\"0\"+f:f}Es(b,d.join(\"\"))}\nfunction dv(b,c,d){sp({node:b},ev,fv,[c],d)}function gv(b,c,d){var e={node:b};c.Na()&&b.setAttribute(\"id\",c.Na());b=c.P();var f=c.Qb();if(f&&(f=f.call(c,0))&&0<f.length){var g=f[0];this.j&&(b.Style=f[0]);(f=g.c)&&(b.name=f.b)}f=hv[d[d.length-1].node.namespaceURI];b=qp(b,f);sp(e,iv,pp,b,d,f);b=d[0];(c=c.W())&&(c=Tr(c,!0,b));sp(e,iv,jv,[c],d)}function kv(b,c,d){var e=c.ja();b={node:b};b.layout=c.b;b.stride=c.ra();sp(b,lv,mv,[e],d)}\nfunction nv(b,c,d){c=c.ae();var e=c.shift();b={node:b};sp(b,ov,pv,c,d);sp(b,ov,qv,[e],d)}function rv(b,c){Fs(b,c*c)}\nvar sv=P(cu,[\"Document\",\"Placemark\"]),vv=P(cu,{Document:N(function(b,c,d){sp({node:b},tv,uv,c,d)}),Placemark:N(gv)}),tv=P(cu,{Placemark:N(gv)}),wv={Point:\"Point\",LineString:\"LineString\",LinearRing:\"LinearRing\",Polygon:\"Polygon\",MultiPoint:\"MultiGeometry\",MultiLineString:\"MultiGeometry\",MultiPolygon:\"MultiGeometry\"},xv=P(cu,[\"href\"],P(bu,[\"x\",\"y\",\"w\",\"h\"])),yv=P(cu,{href:N(Es)},P(bu,{x:N(Fs),y:N(Fs),w:N(Fs),h:N(Fs)})),zv=P(cu,[\"scale\",\"heading\",\"Icon\",\"hotSpot\"]),Bv=P(cu,{Icon:N(function(b,c,d){b=\n{node:b};var e=xv[d[d.length-1].node.namespaceURI],f=qp(c,e);sp(b,yv,pp,f,d,e);e=xv[bu[0]];f=qp(c,e);sp(b,yv,Av,f,d,e)}),heading:N(Fs),hotSpot:N(function(b,c){b.setAttribute(\"x\",c.x);b.setAttribute(\"y\",c.y);b.setAttribute(\"xunits\",c.Zf);b.setAttribute(\"yunits\",c.$f)}),scale:N(rv)}),Cv=P(cu,[\"color\",\"scale\"]),Dv=P(cu,{color:N(cv),scale:N(rv)}),Ev=P(cu,[\"color\",\"width\"]),Fv=P(cu,{color:N(cv),width:N(Fs)}),ev=P(cu,{LinearRing:N(kv)}),Gv=P(cu,{LineString:N(kv),Point:N(kv),Polygon:N(nv)}),hv=P(cu,\"name open visibility address phoneNumber description styleUrl Style\".split(\" \")),\niv=P(cu,{MultiGeometry:N(function(b,c,d){b={node:b};var e=c.V(),f,g;\"MultiPoint\"==e?(f=c.ue(),g=Hv):\"MultiLineString\"==e?(f=c.rd(),g=Iv):\"MultiPolygon\"==e&&(f=c.be(),g=Jv);sp(b,Gv,g,f,d)}),LineString:N(kv),LinearRing:N(kv),Point:N(kv),Polygon:N(nv),Style:N(function(b,c,d){b={node:b};var e={},f=c.j,g=c.f,h=c.b;c=c.c;h instanceof wk&&(e.IconStyle=h);c&&(e.LabelStyle=c);g&&(e.LineStyle=g);f&&(e.PolyStyle=f);c=Kv[d[d.length-1].node.namespaceURI];e=qp(e,c);sp(b,Lv,pp,e,d,c)}),address:N(Es),description:N(Es),\nname:N(Es),open:N(Ds),phoneNumber:N(Es),styleUrl:N(Es),visibility:N(Ds)}),lv=P(cu,{coordinates:N(function(b,c,d){d=d[d.length-1];var e=d.layout;d=d.stride;var f;\"XY\"==e||\"XYM\"==e?f=2:(\"XYZ\"==e||\"XYZM\"==e)&&(f=3);var g,h=c.length,k=\"\";if(0<h){k+=c[0];for(e=1;e<f;++e)k+=\",\"+c[e];for(g=d;g<h;g+=d)for(k+=\" \"+c[g],e=1;e<f;++e)k+=\",\"+c[g+e]}Es(b,k)})}),ov=P(cu,{outerBoundaryIs:N(dv),innerBoundaryIs:N(dv)}),Mv=P(cu,{color:N(cv)}),Kv=P(cu,[\"IconStyle\",\"LabelStyle\",\"LineStyle\",\"PolyStyle\"]),Lv=P(cu,{IconStyle:N(function(b,\nc,d){b={node:b};var e={},f=c.Bb(),g=c.qd(),h={href:c.a.j};if(f){h.w=f[0];h.h=f[1];var k=c.Xb(),m=c.Ca();m&&g&&0!==m[0]&&m[1]!==f[1]&&(h.x=m[0],h.y=g[1]-(m[1]+f[1]));k&&0!==k[0]&&k[1]!==f[1]&&(e.hotSpot={x:k[0],Zf:\"pixels\",y:f[1]-k[1],$f:\"pixels\"})}e.Icon=h;f=c.i;1!==f&&(e.scale=f);c=c.u;0!==c&&(e.heading=c);c=zv[d[d.length-1].node.namespaceURI];e=qp(e,c);sp(b,Bv,pp,e,d,c)}),LabelStyle:N(function(b,c,d){b={node:b};var e={},f=c.a;f&&(e.color=f.a);(c=c.c)&&1!==c&&(e.scale=c);c=Cv[d[d.length-1].node.namespaceURI];\ne=qp(e,c);sp(b,Dv,pp,e,d,c)}),LineStyle:N(function(b,c,d){b={node:b};var e=Ev[d[d.length-1].node.namespaceURI];c=qp({color:c.a,width:c.c},e);sp(b,Fv,pp,c,d,e)}),PolyStyle:N(function(b,c,d){sp({node:b},Mv,Nv,[c.a],d)})});function Av(b,c,d){return No(bu[0],\"gx:\"+d)}function uv(b,c){return No(c[c.length-1].node.namespaceURI,\"Placemark\")}function jv(b,c){if(b)return No(c[c.length-1].node.namespaceURI,wv[b.V()])}\nvar Nv=np(\"color\"),mv=np(\"coordinates\"),pv=np(\"innerBoundaryIs\"),Hv=np(\"Point\"),Iv=np(\"LineString\"),fv=np(\"LinearRing\"),Jv=np(\"Polygon\"),qv=np(\"outerBoundaryIs\");\n$t.prototype.c=function(b,c){c=Sr(this,c);var d=No(cu[4],\"kml\");gp(d,\"http://www.w3.org/2000/xmlns/\",\"xmlns:gx\",bu[0]);gp(d,\"http://www.w3.org/2000/xmlns/\",\"xmlns:xsi\",\"http://www.w3.org/2001/XMLSchema-instance\");gp(d,\"http://www.w3.org/2001/XMLSchema-instance\",\"xsi:schemaLocation\",\"http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd\");var e={node:d},f={};1<b.length?f.Document=b:1==b.length&&(f.Placemark=b[0]);var g=sv[d.namespaceURI],f=qp(f,g);sp(e,vv,pp,f,[c],g,this);\nreturn d};(function(){var b={},c={ka:b};(function(d){if(\"object\"===typeof b&&\"undefined\"!==typeof c)c.ka=d();else{var e;\"undefined\"!==typeof window?e=window:\"undefined\"!==typeof global?e=global:\"undefined\"!==typeof self?e=self:e=this;e.Ap=d()}})(function(){return function e(b,c,h){function k(n,q){if(!c[n]){if(!b[n]){var r=\"function\"==typeof require&&require;if(!q&&r)return r(n,!0);if(m)return m(n,!0);r=Error(\"Cannot find module '\"+n+\"'\");throw r.code=\"MODULE_NOT_FOUND\",r;}r=c[n]={ka:{}};b[n][0].call(r.ka,function(c){var e=\nb[n][1][c];return k(e?e:c)},r,r.ka,e,b,c,h)}return c[n].ka}for(var m=\"function\"==typeof require&&require,n=0;n<h.length;n++)k(h[n]);return k}({1:[function(b,c,g){g.read=function(b,c,e,f,g){var q;q=8*g-f-1;var r=(1<<q)-1,t=r>>1,x=-7;g=e?g-1:0;var z=e?-1:1,B=b[c+g];g+=z;e=B&(1<<-x)-1;B>>=-x;for(x+=q;0<x;e=256*e+b[c+g],g+=z,x-=8);q=e&(1<<-x)-1;e>>=-x;for(x+=f;0<x;q=256*q+b[c+g],g+=z,x-=8);if(0===e)e=1-t;else{if(e===r)return q?NaN:Infinity*(B?-1:1);q+=Math.pow(2,f);e=e-t}return(B?-1:1)*q*Math.pow(2,e-\nf)};g.write=function(b,c,e,f,g,q){var r,t=8*q-g-1,x=(1<<t)-1,z=x>>1,B=23===g?Math.pow(2,-24)-Math.pow(2,-77):0;q=f?0:q-1;var A=f?1:-1,v=0>c||0===c&&0>1/c?1:0;c=Math.abs(c);isNaN(c)||Infinity===c?(c=isNaN(c)?1:0,f=x):(f=Math.floor(Math.log(c)/Math.LN2),1>c*(r=Math.pow(2,-f))&&(f--,r*=2),c=1<=f+z?c+B/r:c+B*Math.pow(2,1-z),2<=c*r&&(f++,r/=2),f+z>=x?(c=0,f=x):1<=f+z?(c=(c*r-1)*Math.pow(2,g),f+=z):(c=c*Math.pow(2,z-1)*Math.pow(2,g),f=0));for(;8<=g;b[e+q]=c&255,q+=A,c/=256,g-=8);f=f<<g|c;for(t+=g;0<t;b[e+\nq]=f&255,q+=A,f/=256,t-=8);b[e+q-A]|=128*v}},{}],2:[function(b,c){function g(b){var c;b&&b.length&&(c=b,b=c.length);b=new Uint8Array(b||0);c&&b.set(c);b.Mh=m.Mh;b.Yf=m.Yf;b.Eh=m.Eh;b.ri=m.ri;b.Nf=m.Nf;b.pi=m.pi;b.Hf=m.Hf;b.mi=m.mi;b.toString=m.toString;b.write=m.write;b.slice=m.slice;b.og=m.og;b.aj=!0;return b}function h(b){for(var c=b.length,e=[],f=0,g,h;f<c;f++){g=b.charCodeAt(f);if(55295<g&&57344>g)if(h)if(56320>g){e.push(239,191,189);h=g;continue}else g=h-55296<<10|g-56320|65536,h=null;else{56319<\ng||f+1===c?e.push(239,191,189):h=g;continue}else h&&(e.push(239,191,189),h=null);128>g?e.push(g):2048>g?e.push(g>>6|192,g&63|128):65536>g?e.push(g>>12|224,g>>6&63|128,g&63|128):e.push(g>>18|240,g>>12&63|128,g>>6&63|128,g&63|128)}return e}c.ka=g;var k=b(\"ieee754\"),m,n,p;m={Mh:function(b){return(this[b]|this[b+1]<<8|this[b+2]<<16)+16777216*this[b+3]},Yf:function(b,c){this[c]=b;this[c+1]=b>>>8;this[c+2]=b>>>16;this[c+3]=b>>>24},Eh:function(b){return(this[b]|this[b+1]<<8|this[b+2]<<16)+(this[b+3]<<24)},\nNf:function(b){return k.read(this,b,!0,23,4)},Hf:function(b){return k.read(this,b,!0,52,8)},pi:function(b,c){return k.write(this,b,c,!0,23,4)},mi:function(b,c){return k.write(this,b,c,!0,52,8)},toString:function(b,c,e){var f=b=\"\";e=Math.min(this.length,e||this.length);for(c=c||0;c<e;c++){var g=this[c];127>=g?(b+=decodeURIComponent(f)+String.fromCharCode(g),f=\"\"):f+=\"%\"+g.toString(16)}return b+=decodeURIComponent(f)},write:function(b,c){for(var e=b===n?p:h(b),f=0;f<e.length;f++)this[c+f]=e[f]},slice:function(b,\nc){return this.subarray(b,c)},og:function(b,c){c=c||0;for(var e=0;e<this.length;e++)b[c+e]=this[e]}};m.ri=m.Yf;g.byteLength=function(b){n=b;p=h(b);return p.length};g.isBuffer=function(b){return!(!b||!b.aj)}},{ieee754:1}],3:[function(b,c){(function(g){function h(b){this.Eb=k.isBuffer(b)?b:new k(b||0);this.ca=0;this.length=this.Eb.length}c.ka=h;var k=g.ip||b(\"./buffer\");h.f=0;h.b=1;h.a=2;h.c=5;var m=Math.pow(2,63);h.prototype={Lf:function(b,c,e){for(e=e||this.length;this.ca<e;){var f=this.za(),g=this.ca;\nb(f>>3,c,this);this.ca===g&&this.Xo(f)}return c},lo:function(){var b=this.Eb.Nf(this.ca);this.ca+=4;return b},ho:function(){var b=this.Eb.Hf(this.ca);this.ca+=8;return b},za:function(){var b=this.Eb,c,e,f,g,h;c=b[this.ca++];if(128>c)return c;c=c&127;f=b[this.ca++];if(128>f)return c|f<<7;f=(f&127)<<7;g=b[this.ca++];if(128>g)return c|f|g<<14;g=(g&127)<<14;h=b[this.ca++];if(128>h)return c|f|g|h<<21;e=b[this.ca++];c=(c|f|g|(h&127)<<21)+268435456*(e&127);if(128>e)return c;e=b[this.ca++];c+=34359738368*\n(e&127);if(128>e)return c;e=b[this.ca++];c+=4398046511104*(e&127);if(128>e)return c;e=b[this.ca++];c+=562949953421312*(e&127);if(128>e)return c;e=b[this.ca++];c+=72057594037927936*(e&127);if(128>e)return c;e=b[this.ca++];c+=0x7fffffffffffffff*(e&127);if(128>e)return c;throw Error(\"Expected varint not more than 10 bytes\");},wo:function(){var b=this.ca,c=this.za();if(c<m)return c;for(var e=this.ca-2;255===this.Eb[e];)e--;e<b&&(e=b);for(var f=c=0;f<e-b+1;f++)var g=~this.Eb[b+f]&127,c=c+(4>f?g<<7*f:g*\nMath.pow(2,7*f));return-c-1},Fd:function(){var b=this.za();return 1===b%2?(b+1)/-2:b/2},eo:function(){return Boolean(this.za())},Qf:function(){var b=this.za()+this.ca,c=this.Eb.toString(\"utf8\",this.ca,b);this.ca=b;return c},Xo:function(b){b=b&7;if(b===h.f)for(;127<this.Eb[this.ca++];);else if(b===h.a)this.ca=this.za()+this.ca;else if(b===h.c)this.ca+=4;else if(b===h.b)this.ca+=8;else throw Error(\"Unimplemented type: \"+b);}}}).call(this,\"undefined\"!==typeof global?global:\"undefined\"!==typeof self?\nself:\"undefined\"!==typeof window?window:{})},{\"./buffer\":2}]},{},[3])(3)});yp=c.ka})();(function(){var b={},c={ka:b};(function(d){if(\"object\"===typeof b&&\"undefined\"!==typeof c)c.ka=d();else{var e;\"undefined\"!==typeof window?e=window:\"undefined\"!==typeof global?e=global:\"undefined\"!==typeof self?e=self:e=this;e.Cp=d()}})(function(){return function e(b,c,h){function k(n,q){if(!c[n]){if(!b[n]){var r=\"function\"==typeof require&&require;if(!q&&r)return r(n,!0);if(m)return m(n,!0);r=Error(\"Cannot find module '\"+n+\"'\");throw r.code=\"MODULE_NOT_FOUND\",r;}r=c[n]={ka:{}};b[n][0].call(r.ka,function(c){var e=\nb[n][1][c];return k(e?e:c)},r,r.ka,e,b,c,h)}return c[n].ka}for(var m=\"function\"==typeof require&&require,n=0;n<h.length;n++)k(h[n]);return k}({1:[function(b,c){function g(b,c){this.x=b;this.y=c}c.ka=g;g.prototype={clone:function(){return new g(this.x,this.y)},add:function(b){return this.clone().Ti(b)},rotate:function(b){return this.clone().dj(b)},round:function(){return this.clone().ej()},angle:function(){return Math.atan2(this.y,this.x)},Ti:function(b){this.x+=b.x;this.y+=b.y;return this},dj:function(b){var c=\nMath.cos(b);b=Math.sin(b);var e=b*this.x+c*this.y;this.x=c*this.x-b*this.y;this.y=e;return this},ej:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this}};g.a=function(b){return b instanceof g?b:Array.isArray(b)?new g(b[0],b[1]):b}},{}],2:[function(b,c){c.ka.Si=b(\"./lib/vectortile.js\");c.ka.vp=b(\"./lib/vectortilefeature.js\");c.ka.wp=b(\"./lib/vectortilelayer.js\")},{\"./lib/vectortile.js\":3,\"./lib/vectortilefeature.js\":4,\"./lib/vectortilelayer.js\":5}],3:[function(b,c){function g(b,\nc,e){3===b&&(b=new h(e,e.za()+e.ca),b.length&&(c[b.name]=b))}var h=b(\"./vectortilelayer\");c.ka=function(b,c){this.layers=b.Lf(g,{},c)}},{\"./vectortilelayer\":5}],4:[function(b,c){function g(b,c,e,f,g){this.properties={};this.extent=e;this.type=0;this.lc=b;this.Ye=-1;this.Pd=f;this.Rd=g;b.Lf(h,this,c)}function h(b,c,e){if(1==b)c.yp=e.za();else if(2==b)for(b=e.za()+e.ca;e.ca<b;){var f=c.Pd[e.za()],g=c.Rd[e.za()];c.properties[f]=g}else 3==b?c.type=e.za():4==b&&(c.Ye=e.ca)}var k=b(\"point-geometry\");c.ka=\ng;g.types=[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"];g.prototype.Pg=function(){var b=this.lc;b.ca=this.Ye;for(var c=b.za()+b.ca,e=1,f=0,g=0,h=0,x=[],z;b.ca<c;)if(f||(f=b.za(),e=f&7,f=f>>3),f--,1===e||2===e)g+=b.Fd(),h+=b.Fd(),1===e&&(z&&x.push(z),z=[]),z.push(new k(g,h));else if(7===e)z&&z.push(z[0].clone());else throw Error(\"unknown command \"+e);z&&x.push(z);return x};g.prototype.bbox=function(){var b=this.lc;b.ca=this.Ye;for(var c=b.za()+b.ca,e=1,f=0,g=0,h=0,k=Infinity,z=-Infinity,B=Infinity,A=\n-Infinity;b.ca<c;)if(f||(f=b.za(),e=f&7,f=f>>3),f--,1===e||2===e)g+=b.Fd(),h+=b.Fd(),g<k&&(k=g),g>z&&(z=g),h<B&&(B=h),h>A&&(A=h);else if(7!==e)throw Error(\"unknown command \"+e);return[k,B,z,A]}},{\"point-geometry\":1}],5:[function(b,c){function g(b,c){this.version=1;this.name=null;this.extent=4096;this.length=0;this.lc=b;this.Pd=[];this.Rd=[];this.Od=[];b.Lf(h,this,c);this.length=this.Od.length}function h(b,c,e){15===b?c.version=e.za():1===b?c.name=e.Qf():5===b?c.extent=e.za():2===b?c.Od.push(e.ca):\n3===b?c.Pd.push(e.Qf()):4===b&&c.Rd.push(k(e))}function k(b){for(var c=null,e=b.za()+b.ca;b.ca<e;)c=b.za()>>3,c=1===c?b.Qf():2===c?b.lo():3===c?b.ho():4===c?b.wo():5===c?b.za():6===c?b.Fd():7===c?b.eo():null;return c}var m=b(\"./vectortilefeature.js\");c.ka=g;g.prototype.feature=function(b){if(0>b||b>=this.Od.length)throw Error(\"feature index out of bounds\");this.lc.ca=this.Od[b];b=this.lc.za()+this.lc.ca;return new m(this.lc,b,this.extent,this.Pd,this.Rd)}},{\"./vectortilefeature.js\":4}]},{},[2])(2)});\nzp=c.ka})();function Ov(b){this.defaultDataProjection=null;b=b?b:{};this.defaultDataProjection=new De({code:\"EPSG:3857\",units:\"tile-pixels\"});this.a=b.featureClass?b.featureClass:Vm;this.f=b.geometryName?b.geometryName:\"geometry\";this.c=b.layerName?b.layerName:\"layer\";this.b=b.layers?b.layers:null}y(Ov,Qr);Ov.prototype.V=function(){return\"arraybuffer\"};\nOv.prototype.Ba=function(b,c){var d=this.b,e=new yp(b),e=new zp.Si(e),f=[],g=this.a,h,k,m;for(m in e.layers)if(!d||-1!=d.indexOf(m)){h=e.layers[m];for(var n=0,p=h.length;n<p;++n){if(g===Vm){var q=h.feature(n);k=m;var r=q.Pg(),t=[],x=[];Pv(r,x,t);var z=q.type,B=void 0;1===z?B=1===r.length?\"Point\":\"MultiPoint\":2===z?B=1===r.length?\"LineString\":\"MultiLineString\":3===z&&(B=\"Polygon\");q=q.properties;q[this.c]=k;k=new this.a(B,x,t,q)}else{q=h.feature(n);B=m;x=c;k=new this.a;t=q.properties;t[this.c]=B;B=\nq.type;if(0===B)B=null;else{q=q.Pg();r=[];z=[];Pv(q,z,r);var A=void 0;1===B?A=1===q.length?new D(null):new $r(null):2===B?1===q.length?A=new T(null):A=new U(null):3===B&&(A=new E(null));A.ba(\"XY\",z,r);B=A}(x=Tr(B,!1,Sr(this,x)))&&(t[this.f]=x);k.I(t);k.vc(this.f)}f.push(k)}}return f};Ov.prototype.Ia=function(){return this.defaultDataProjection};Ov.prototype.g=function(b){this.b=b};\nfunction Pv(b,c,d){for(var e=0,f,g,h=0,k=b.length;h<k;++h){f=b[h];for(var m=0,n=f.length;m<n;++m)g=f[m],c.push(g.x,g.y);e+=2*m;d.push(e)}};function Qv(){this.defaultDataProjection=null;this.defaultDataProjection=Fe(\"EPSG:4326\")}y(Qv,ss);function Rv(b,c){c[c.length-1].Id[b.getAttribute(\"k\")]=b.getAttribute(\"v\")}\nvar Sv=[null],Tv=P(Sv,{nd:function(b,c){c[c.length-1].Nc.push(b.getAttribute(\"ref\"))},tag:Rv}),Vv=P(Sv,{node:function(b,c){var d=c[0],e=c[c.length-1],f=b.getAttribute(\"id\"),g=[parseFloat(b.getAttribute(\"lon\")),parseFloat(b.getAttribute(\"lat\"))];e.Sg[f]=g;var h=Q({Id:{}},Uv,b,c);Qb(h.Id)||(g=new D(g),Tr(g,!1,d),d=new sn(g),d.ic(f),d.I(h.Id),e.features.push(d))},way:function(b,c){for(var d=c[0],e=b.getAttribute(\"id\"),f=Q({Nc:[],Id:{}},Tv,b,c),g=c[c.length-1],h=[],k=0,m=f.Nc.length;k<m;k++)lb(h,g.Sg[f.Nc[k]]);\nf.Nc[0]==f.Nc[f.Nc.length-1]?(k=new E(null),k.ba(\"XY\",h,[h.length])):(k=new T(null),k.ba(\"XY\",h));Tr(k,!1,d);d=new sn(k);d.ic(e);d.I(f.Id);g.features.push(d)}}),Uv=P(Sv,{tag:Rv});Qv.prototype.hc=function(b,c){var d=Rr(this,b,c);return\"osm\"==b.localName&&(d=Q({Sg:{},features:[]},Vv,b,[d]),d.features)?d.features:[]};function Wv(b){return b.getAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\")};function Xv(){}Xv.prototype.read=function(b){return Vo(b)?this.c(b):Yo(b)?this.a(b):ia(b)?(b=hp(b),this.c(b)):null};function Yv(){}y(Yv,Xv);Yv.prototype.c=function(b){for(b=b.firstChild;b;b=b.nextSibling)if(1==b.nodeType)return this.a(b);return null};Yv.prototype.a=function(b){return(b=Q({},Zv,b,[]))?b:null};\nvar $v=[null,\"http://www.opengis.net/ows/1.1\"],Zv=P($v,{ServiceIdentification:M(function(b,c){return Q({},aw,b,c)}),ServiceProvider:M(function(b,c){return Q({},bw,b,c)}),OperationsMetadata:M(function(b,c){return Q({},cw,b,c)})}),dw=P($v,{DeliveryPoint:M(W),City:M(W),AdministrativeArea:M(W),PostalCode:M(W),Country:M(W),ElectronicMailAddress:M(W)}),ew=P($v,{Value:lp(function(b){return W(b)})}),fw=P($v,{AllowedValues:M(function(b,c){return Q({},ew,b,c)})}),hw=P($v,{Phone:M(function(b,c){return Q({},\ngw,b,c)}),Address:M(function(b,c){return Q({},dw,b,c)})}),jw=P($v,{HTTP:M(function(b,c){return Q({},iw,b,c)})}),iw=P($v,{Get:lp(function(b,c){var d=Wv(b);return d?Q({href:d},kw,b,c):void 0}),Post:void 0}),lw=P($v,{DCP:M(function(b,c){return Q({},jw,b,c)})}),cw=P($v,{Operation:function(b,c){var d=b.getAttribute(\"name\"),e=Q({},lw,b,c);e&&(c[c.length-1][d]=e)}}),gw=P($v,{Voice:M(W),Facsimile:M(W)}),kw=P($v,{Constraint:lp(function(b,c){var d=b.getAttribute(\"name\");return d?Q({name:d},fw,b,c):void 0})}),\nmw=P($v,{IndividualName:M(W),PositionName:M(W),ContactInfo:M(function(b,c){return Q({},hw,b,c)})}),aw=P($v,{Title:M(W),ServiceTypeVersion:M(W),ServiceType:M(W)}),bw=P($v,{ProviderName:M(W),ProviderSite:M(Wv),ServiceContact:M(function(b,c){return Q({},mw,b,c)})});function nw(b,c,d,e){var f;void 0!==e?f=e:f=[];e=0;var g,h;for(g=0;g<c;)for(h=b[g++],f[e++]=b[g++],f[e++]=h,h=2;h<d;++h)f[e++]=b[g++];f.length=e};function ow(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=Fe(\"EPSG:4326\");this.a=b.factor?b.factor:1E5;this.c=b.geometryLayout?b.geometryLayout:\"XY\"}y(ow,At);function pw(b,c,d){var e,f=Array(c);for(e=0;e<c;++e)f[e]=0;var g,h;g=0;for(h=b.length;g<h;)for(e=0;e<c;++e,++g){var k=b[g],m=k-f[e];f[e]=k;b[g]=m}return qw(b,d?d:1E5)}\nfunction rw(b,c,d){var e,f=Array(c);for(e=0;e<c;++e)f[e]=0;b=sw(b,d?d:1E5);var g;d=0;for(g=b.length;d<g;)for(e=0;e<c;++e,++d)f[e]+=b[d],b[d]=f[e];return b}function qw(b,c){var d=c?c:1E5,e,f;e=0;for(f=b.length;e<f;++e)b[e]=Math.round(b[e]*d);d=0;for(e=b.length;d<e;++d)f=b[d],b[d]=0>f?~(f<<1):f<<1;d=\"\";e=0;for(f=b.length;e<f;++e){for(var g=b[e],h=void 0,k=\"\";32<=g;)h=(32|g&31)+63,k+=String.fromCharCode(h),g>>=5;h=g+63;k+=String.fromCharCode(h);d+=k}return d}\nfunction sw(b,c){var d=c?c:1E5,e=[],f=0,g=0,h,k;h=0;for(k=b.length;h<k;++h){var m=b.charCodeAt(h)-63,f=f|(m&31)<<g;32>m?(e.push(f),g=f=0):g+=5}f=0;for(g=e.length;f<g;++f)h=e[f],e[f]=h&1?~(h>>1):h>>1;f=0;for(g=e.length;f<g;++f)e[f]/=d;return e}l=ow.prototype;l.Cd=function(b,c){var d=this.Ed(b,c);return new sn(d)};l.Kf=function(b,c){return[this.Cd(b,c)]};l.Ed=function(b,c){var d=ef(this.c),e=rw(b,d,this.a);nw(e,e.length,d,e);d=sf(e,0,e.length,d);return Tr(new T(d,this.c),!1,Sr(this,c))};\nl.Qe=function(b,c){var d=b.W();return d?this.Kd(d,c):\"\"};l.oi=function(b,c){return this.Qe(b[0],c)};l.Kd=function(b,c){b=Tr(b,!0,Sr(this,c));var d=b.ja(),e=b.ra();nw(d,d.length,e,d);return pw(d,e,this.a)};function tw(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=Fe(b.defaultDataProjection?b.defaultDataProjection:\"EPSG:4326\")}y(tw,Ur);function uw(b,c){var d=[],e,f,g,h;g=0;for(h=b.length;g<h;++g)e=b[g],0<g&&d.pop(),0<=e?f=c[e]:f=c[~e].slice().reverse(),d.push.apply(d,f);e=0;for(f=d.length;e<f;++e)d[e]=d[e].slice();return d}function vw(b,c,d,e,f){b=b.geometries;var g=[],h,k;h=0;for(k=b.length;h<k;++h)g[h]=ww(b[h],c,d,e,f);return g}\nfunction ww(b,c,d,e,f){var g=b.type,h=xw[g];c=\"Point\"===g||\"MultiPoint\"===g?h(b,d,e):h(b,c);d=new sn;d.La(Tr(c,!1,f));void 0!==b.id&&d.ic(b.id);b.properties&&d.I(b.properties);return d}\ntw.prototype.Jf=function(b,c){if(\"Topology\"==b.type){var d,e=null,f=null;b.transform&&(d=b.transform,e=d.scale,f=d.translate);var g=b.arcs;if(d){d=e;var h=f,k,m;k=0;for(m=g.length;k<m;++k)for(var n=g[k],p=d,q=h,r=0,t=0,x=void 0,z=void 0,B=void 0,z=0,B=n.length;z<B;++z)x=n[z],r+=x[0],t+=x[1],x[0]=r,x[1]=t,yw(x,p,q)}d=[];h=Lb(b.objects);k=0;for(m=h.length;k<m;++k)\"GeometryCollection\"===h[k].type?(n=h[k],d.push.apply(d,vw(n,g,e,f,c))):(n=h[k],d.push(ww(n,g,e,f,c)));return d}return[]};\nfunction yw(b,c,d){b[0]=b[0]*c[0]+d[0];b[1]=b[1]*c[1]+d[1]}tw.prototype.Ia=function(){return this.defaultDataProjection};\nvar xw={Point:function(b,c,d){b=b.coordinates;c&&d&&yw(b,c,d);return new D(b)},LineString:function(b,c){var d=uw(b.arcs,c);return new T(d)},Polygon:function(b,c){var d=[],e,f;e=0;for(f=b.arcs.length;e<f;++e)d[e]=uw(b.arcs[e],c);return new E(d)},MultiPoint:function(b,c,d){b=b.coordinates;var e,f;if(c&&d)for(e=0,f=b.length;e<f;++e)yw(b[e],c,d);return new $r(b)},MultiLineString:function(b,c){var d=[],e,f;e=0;for(f=b.arcs.length;e<f;++e)d[e]=uw(b.arcs[e],c);return new U(d)},MultiPolygon:function(b,c){var d=\n[],e,f,g,h,k,m;k=0;for(m=b.arcs.length;k<m;++k){e=b.arcs[k];f=[];g=0;for(h=e.length;g<h;++g)f[g]=uw(e[g],c);d[k]=f}return new V(d)}};function zw(b){b=b?b:{};this.g=b.featureType;this.b=b.featureNS;this.a=b.gmlFormat?b.gmlFormat:new Is;this.f=b.schemaLocation?b.schemaLocation:\"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd\";this.defaultDataProjection=null}y(zw,ss);zw.prototype.hc=function(b,c){var d={featureType:this.g,featureNS:this.b};Xb(d,Rr(this,b,c?c:{}));d=[d];this.a.a[\"http://www.opengis.net/gml\"].featureMember=jp(vs.prototype.Dd);(d=Q([],this.a.a,b,d,this.a))||(d=[]);return d};\nzw.prototype.i=function(b){if(Vo(b))return Aw(b);if(Yo(b))return Q({},Bw,b,[]);if(ia(b))return b=hp(b),Aw(b)};zw.prototype.j=function(b){if(Vo(b))return Cw(this,b);if(Yo(b))return Dw(this,b);if(ia(b))return b=hp(b),Cw(this,b)};function Cw(b,c){for(var d=c.firstChild;d;d=d.nextSibling)if(1==d.nodeType)return Dw(b,d)}var Ew={\"http://www.opengis.net/gml\":{boundedBy:M(vs.prototype.Ie,\"bounds\")}};\nfunction Dw(b,c){var d={},e=Cs(c.getAttribute(\"numberOfFeatures\"));d.numberOfFeatures=e;return Q(d,Ew,c,[],b.a)}\nvar Fw={\"http://www.opengis.net/wfs\":{totalInserted:M(Bs),totalUpdated:M(Bs),totalDeleted:M(Bs)}},Gw={\"http://www.opengis.net/ogc\":{FeatureId:jp(function(b){return b.getAttribute(\"fid\")})}},Hw={\"http://www.opengis.net/wfs\":{Feature:function(b,c){rp(Gw,b,c)}}},Bw={\"http://www.opengis.net/wfs\":{TransactionSummary:M(function(b,c){return Q({},Fw,b,c)},\"transactionSummary\"),InsertResults:M(function(b,c){return Q([],Hw,b,c)},\"insertIds\")}};\nfunction Aw(b){for(b=b.firstChild;b;b=b.nextSibling)if(1==b.nodeType)return Q({},Bw,b,[])}var Iw={\"http://www.opengis.net/wfs\":{PropertyName:N(Es)}};function Jw(b,c){var d=No(\"http://www.opengis.net/ogc\",\"Filter\"),e=No(\"http://www.opengis.net/ogc\",\"FeatureId\");d.appendChild(e);e.setAttribute(\"fid\",c);b.appendChild(d)}\nvar Kw={\"http://www.opengis.net/wfs\":{Insert:N(function(b,c,d){var e=d[d.length-1],e=No(e.featureNS,e.featureType);b.appendChild(e);Is.prototype.ni(e,c,d)}),Update:N(function(b,c,d){var e=d[d.length-1],f=e.featureType,g=e.featurePrefix,g=g?g:\"feature\",h=e.featureNS;b.setAttribute(\"typeName\",g+\":\"+f);gp(b,\"http://www.w3.org/2000/xmlns/\",\"xmlns:\"+g,h);if(f=c.Na()){for(var g=c.O(),h=[],k=0,m=g.length;k<m;k++){var n=c.get(g[k]);void 0!==n&&h.push({name:g[k],value:n})}sp({node:b,srsName:e.srsName},Kw,\nnp(\"Property\"),h,d);Jw(b,f)}}),Delete:N(function(b,c,d){var e=d[d.length-1];d=e.featureType;var f=e.featurePrefix,f=f?f:\"feature\",e=e.featureNS;b.setAttribute(\"typeName\",f+\":\"+d);gp(b,\"http://www.w3.org/2000/xmlns/\",\"xmlns:\"+f,e);(c=c.Na())&&Jw(b,c)}),Property:N(function(b,c,d){var e=No(\"http://www.opengis.net/wfs\",\"Name\");b.appendChild(e);Es(e,c.name);void 0!==c.value&&null!==c.value&&(e=No(\"http://www.opengis.net/wfs\",\"Value\"),b.appendChild(e),c.value instanceof bf?Is.prototype.Se(e,c.value,d):\nEs(e,c.value))}),Native:N(function(b,c){c.ep&&b.setAttribute(\"vendorId\",c.ep);void 0!==c.Io&&b.setAttribute(\"safeToIgnore\",c.Io);void 0!==c.value&&Es(b,c.value)})}},Lw={\"http://www.opengis.net/wfs\":{Query:N(function(b,c,d){var e=d[d.length-1],f=e.featurePrefix,g=e.featureNS,h=e.propertyNames,k=e.srsName;b.setAttribute(\"typeName\",(f?f+\":\":\"\")+c);k&&b.setAttribute(\"srsName\",k);g&&gp(b,\"http://www.w3.org/2000/xmlns/\",\"xmlns:\"+f,g);c=Ub(e);c.node=b;sp(c,Iw,np(\"PropertyName\"),h,d);if(e=e.bbox)h=No(\"http://www.opengis.net/ogc\",\n\"Filter\"),c=d[d.length-1].geometryName,f=No(\"http://www.opengis.net/ogc\",\"BBOX\"),h.appendChild(f),g=No(\"http://www.opengis.net/ogc\",\"PropertyName\"),Es(g,c),f.appendChild(g),Is.prototype.Se(f,e,d),b.appendChild(h)})}};\nzw.prototype.l=function(b){var c=No(\"http://www.opengis.net/wfs\",\"GetFeature\");c.setAttribute(\"service\",\"WFS\");c.setAttribute(\"version\",\"1.1.0\");b&&(b.handle&&c.setAttribute(\"handle\",b.handle),b.outputFormat&&c.setAttribute(\"outputFormat\",b.outputFormat),void 0!==b.maxFeatures&&c.setAttribute(\"maxFeatures\",b.maxFeatures),b.resultType&&c.setAttribute(\"resultType\",b.resultType),void 0!==b.startIndex&&c.setAttribute(\"startIndex\",b.startIndex),void 0!==b.count&&c.setAttribute(\"count\",b.count));gp(c,\"http://www.w3.org/2001/XMLSchema-instance\",\n\"xsi:schemaLocation\",this.f);var d=b.featureTypes;b=[{node:c,srsName:b.srsName,featureNS:b.featureNS?b.featureNS:this.b,featurePrefix:b.featurePrefix,geometryName:b.geometryName,bbox:b.bbox,propertyNames:b.propertyNames?b.propertyNames:[]}];var e=Ub(b[b.length-1]);e.node=c;sp(e,Lw,np(\"Query\"),d,b);return c};\nzw.prototype.A=function(b,c,d,e){var f=[],g=No(\"http://www.opengis.net/wfs\",\"Transaction\");g.setAttribute(\"service\",\"WFS\");g.setAttribute(\"version\",\"1.1.0\");var h,k;e&&(h=e.gmlOptions?e.gmlOptions:{},e.handle&&g.setAttribute(\"handle\",e.handle));gp(g,\"http://www.w3.org/2001/XMLSchema-instance\",\"xsi:schemaLocation\",this.f);b&&(k={node:g,featureNS:e.featureNS,featureType:e.featureType,featurePrefix:e.featurePrefix},Xb(k,h),sp(k,Kw,np(\"Insert\"),b,f));c&&(k={node:g,featureNS:e.featureNS,featureType:e.featureType,\nfeaturePrefix:e.featurePrefix},Xb(k,h),sp(k,Kw,np(\"Update\"),c,f));d&&sp({node:g,featureNS:e.featureNS,featureType:e.featureType,featurePrefix:e.featurePrefix},Kw,np(\"Delete\"),d,f);e.nativeElements&&sp({node:g,featureNS:e.featureNS,featureType:e.featureType,featurePrefix:e.featurePrefix},Kw,np(\"Native\"),e.nativeElements,f);return g};zw.prototype.Pf=function(b){for(b=b.firstChild;b;b=b.nextSibling)if(1==b.nodeType)return this.Le(b);return null};\nzw.prototype.Le=function(b){if(b.firstElementChild&&b.firstElementChild.firstElementChild)for(b=b.firstElementChild.firstElementChild,b=b.firstElementChild;b;b=b.nextElementSibling)if(0!==b.childNodes.length&&(1!==b.childNodes.length||3!==b.firstChild.nodeType)){var c=[{}];this.a.Ie(b,c);return Fe(c.pop().srsName)}return null};function Mw(b){b=b?b:{};this.defaultDataProjection=null;this.a=void 0!==b.splitCollection?b.splitCollection:!1}y(Mw,At);function Nw(b){b=b.Y();return 0===b.length?\"\":b[0]+\" \"+b[1]}function Ow(b){b=b.Y();for(var c=[],d=0,e=b.length;d<e;++d)c.push(b[d][0]+\" \"+b[d][1]);return c.join(\",\")}function Pw(b){var c=[];b=b.ae();for(var d=0,e=b.length;d<e;++d)c.push(\"(\"+Ow(b[d])+\")\");return c.join(\",\")}function Qw(b){var c=b.V();b=(0,Rw[c])(b);c=c.toUpperCase();return 0===b.length?c+\" EMPTY\":c+\"(\"+b+\")\"}\nvar Rw={Point:Nw,LineString:Ow,Polygon:Pw,MultiPoint:function(b){var c=[];b=b.ue();for(var d=0,e=b.length;d<e;++d)c.push(\"(\"+Nw(b[d])+\")\");return c.join(\",\")},MultiLineString:function(b){var c=[];b=b.rd();for(var d=0,e=b.length;d<e;++d)c.push(\"(\"+Ow(b[d])+\")\");return c.join(\",\")},MultiPolygon:function(b){var c=[];b=b.be();for(var d=0,e=b.length;d<e;++d)c.push(\"(\"+Pw(b[d])+\")\");return c.join(\",\")},GeometryCollection:function(b){var c=[];b=b.zg();for(var d=0,e=b.length;d<e;++d)c.push(Qw(b[d]));return c.join(\",\")}};\nl=Mw.prototype;l.Cd=function(b,c){var d=this.Ed(b,c);if(d){var e=new sn;e.La(d);return e}return null};l.Kf=function(b,c){var d=[],e=this.Ed(b,c);this.a&&\"GeometryCollection\"==e.V()?d=e.f:d=[e];for(var f=[],g=0,h=d.length;g<h;++g)e=new sn,e.La(d[g]),f.push(e);return f};l.Ed=function(b,c){var d;d=new Sw(new Tw(b));d.a=Uw(d.c);return(d=Vw(d))?Tr(d,!1,c):null};l.Qe=function(b,c){var d=b.W();return d?this.Kd(d,c):\"\"};\nl.oi=function(b,c){if(1==b.length)return this.Qe(b[0],c);for(var d=[],e=0,f=b.length;e<f;++e)d.push(b[e].W());d=new js(d);return this.Kd(d,c)};l.Kd=function(b,c){return Qw(Tr(b,!0,c))};function Tw(b){this.c=b;this.a=-1}function Ww(b,c){return\"0\"<=b&&\"9\">=b||\".\"==b&&!(void 0!==c&&c)}\nfunction Uw(b){var c=b.c.charAt(++b.a),d={position:b.a,value:c};if(\"(\"==c)d.type=2;else if(\",\"==c)d.type=5;else if(\")\"==c)d.type=3;else if(Ww(c)||\"-\"==c){d.type=4;var e,c=b.a,f=!1,g=!1;do{if(\".\"==e)f=!0;else if(\"e\"==e||\"E\"==e)g=!0;e=b.c.charAt(++b.a)}while(Ww(e,f)||!g&&(\"e\"==e||\"E\"==e)||g&&(\"-\"==e||\"+\"==e));b=parseFloat(b.c.substring(c,b.a--));d.value=b}else if(\"a\"<=c&&\"z\">=c||\"A\"<=c&&\"Z\">=c){d.type=1;c=b.a;do e=b.c.charAt(++b.a);while(\"a\"<=e&&\"z\">=e||\"A\"<=e&&\"Z\">=e);b=b.c.substring(c,b.a--).toUpperCase();\nd.value=b}else{if(\" \"==c||\"\\t\"==c||\"\\r\"==c||\"\\n\"==c)return Uw(b);if(\"\"===c)d.type=6;else throw Error(\"Unexpected character: \"+c);}return d}function Sw(b){this.c=b}l=Sw.prototype;l.match=function(b){if(b=this.a.type==b)this.a=Uw(this.c);return b};\nfunction Vw(b){var c=b.a;if(b.match(1)){var d=c.value;if(\"GEOMETRYCOLLECTION\"==d){a:{if(b.match(2)){c=[];do c.push(Vw(b));while(b.match(5));if(b.match(3)){b=c;break a}}else if(Xw(b)){b=[];break a}throw Error(Yw(b));}return new js(b)}var e=Zw[d],c=$w[d];if(!e||!c)throw Error(\"Invalid geometry type: \"+d);b=e.call(b);return new c(b)}throw Error(Yw(b));}l.Ef=function(){if(this.match(2)){var b=ax(this);if(this.match(3))return b}else if(Xw(this))return null;throw Error(Yw(this));};\nl.Df=function(){if(this.match(2)){var b=bx(this);if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};l.Ff=function(){if(this.match(2)){var b=cx(this);if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};l.Sn=function(){if(this.match(2)){var b;if(2==this.a.type)for(b=[this.Ef()];this.match(5);)b.push(this.Ef());else b=bx(this);if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};\nl.Rn=function(){if(this.match(2)){var b=cx(this);if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};l.Tn=function(){if(this.match(2)){for(var b=[this.Ff()];this.match(5);)b.push(this.Ff());if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};function ax(b){for(var c=[],d=0;2>d;++d){var e=b.a;if(b.match(4))c.push(e.value);else break}if(2==c.length)return c;throw Error(Yw(b));}function bx(b){for(var c=[ax(b)];b.match(5);)c.push(ax(b));return c}\nfunction cx(b){for(var c=[b.Df()];b.match(5);)c.push(b.Df());return c}function Xw(b){var c=1==b.a.type&&\"EMPTY\"==b.a.value;c&&(b.a=Uw(b.c));return c}function Yw(b){return\"Unexpected `\"+b.a.value+\"` at position \"+b.a.position+\" in `\"+b.c.c+\"`\"}var $w={POINT:D,LINESTRING:T,POLYGON:E,MULTIPOINT:$r,MULTILINESTRING:U,MULTIPOLYGON:V},Zw={POINT:Sw.prototype.Ef,LINESTRING:Sw.prototype.Df,POLYGON:Sw.prototype.Ff,MULTIPOINT:Sw.prototype.Sn,MULTILINESTRING:Sw.prototype.Rn,MULTIPOLYGON:Sw.prototype.Tn};function dx(){this.version=void 0}y(dx,Xv);dx.prototype.c=function(b){for(b=b.firstChild;b;b=b.nextSibling)if(1==b.nodeType)return this.a(b);return null};dx.prototype.a=function(b){this.version=b.getAttribute(\"version\").trim();return(b=Q({version:this.version},ex,b,[]))?b:null};function fx(b,c){return Q({},gx,b,c)}function hx(b,c){return Q({},ix,b,c)}function jx(b,c){var d=fx(b,c);if(d){var e=[Cs(b.getAttribute(\"width\")),Cs(b.getAttribute(\"height\"))];d.size=e;return d}}\nfunction kx(b,c){return Q([],lx,b,c)}\nvar mx=[null,\"http://www.opengis.net/wms\"],ex=P(mx,{Service:M(function(b,c){return Q({},nx,b,c)}),Capability:M(function(b,c){return Q({},ox,b,c)})}),ox=P(mx,{Request:M(function(b,c){return Q({},px,b,c)}),Exception:M(function(b,c){return Q([],qx,b,c)}),Layer:M(function(b,c){return Q({},rx,b,c)})}),nx=P(mx,{Name:M(W),Title:M(W),Abstract:M(W),KeywordList:M(kx),OnlineResource:M(Wv),ContactInformation:M(function(b,c){return Q({},sx,b,c)}),Fees:M(W),AccessConstraints:M(W),LayerLimit:M(Bs),MaxWidth:M(Bs),\nMaxHeight:M(Bs)}),sx=P(mx,{ContactPersonPrimary:M(function(b,c){return Q({},tx,b,c)}),ContactPosition:M(W),ContactAddress:M(function(b,c){return Q({},ux,b,c)}),ContactVoiceTelephone:M(W),ContactFacsimileTelephone:M(W),ContactElectronicMailAddress:M(W)}),tx=P(mx,{ContactPerson:M(W),ContactOrganization:M(W)}),ux=P(mx,{AddressType:M(W),Address:M(W),City:M(W),StateOrProvince:M(W),PostCode:M(W),Country:M(W)}),qx=P(mx,{Format:jp(W)}),rx=P(mx,{Name:M(W),Title:M(W),Abstract:M(W),KeywordList:M(kx),CRS:lp(W),\nEX_GeographicBoundingBox:M(function(b,c){var d=Q({},vx,b,c);if(d){var e=d.westBoundLongitude,f=d.southBoundLatitude,g=d.eastBoundLongitude,d=d.northBoundLatitude;return void 0===e||void 0===f||void 0===g||void 0===d?void 0:[e,f,g,d]}}),BoundingBox:lp(function(b){var c=[As(b.getAttribute(\"minx\")),As(b.getAttribute(\"miny\")),As(b.getAttribute(\"maxx\")),As(b.getAttribute(\"maxy\"))],d=[As(b.getAttribute(\"resx\")),As(b.getAttribute(\"resy\"))];return{crs:b.getAttribute(\"CRS\"),extent:c,res:d}}),Dimension:lp(function(b){return{name:b.getAttribute(\"name\"),\nunits:b.getAttribute(\"units\"),unitSymbol:b.getAttribute(\"unitSymbol\"),\"default\":b.getAttribute(\"default\"),multipleValues:xs(b.getAttribute(\"multipleValues\")),nearestValue:xs(b.getAttribute(\"nearestValue\")),current:xs(b.getAttribute(\"current\")),values:W(b)}}),Attribution:M(function(b,c){return Q({},wx,b,c)}),AuthorityURL:lp(function(b,c){var d=fx(b,c);if(d)return d.name=b.getAttribute(\"name\"),d}),Identifier:lp(W),MetadataURL:lp(function(b,c){var d=fx(b,c);if(d)return d.type=b.getAttribute(\"type\"),\nd}),DataURL:lp(fx),FeatureListURL:lp(fx),Style:lp(function(b,c){return Q({},xx,b,c)}),MinScaleDenominator:M(zs),MaxScaleDenominator:M(zs),Layer:lp(function(b,c){var d=c[c.length-1],e=Q({},rx,b,c);if(e){var f=xs(b.getAttribute(\"queryable\"));void 0===f&&(f=d.queryable);e.queryable=void 0!==f?f:!1;f=Cs(b.getAttribute(\"cascaded\"));void 0===f&&(f=d.cascaded);e.cascaded=f;f=xs(b.getAttribute(\"opaque\"));void 0===f&&(f=d.opaque);e.opaque=void 0!==f?f:!1;f=xs(b.getAttribute(\"noSubsets\"));void 0===f&&(f=d.noSubsets);\ne.noSubsets=void 0!==f?f:!1;(f=As(b.getAttribute(\"fixedWidth\")))||(f=d.fixedWidth);e.fixedWidth=f;(f=As(b.getAttribute(\"fixedHeight\")))||(f=d.fixedHeight);e.fixedHeight=f;[\"Style\",\"CRS\",\"AuthorityURL\"].forEach(function(b){if(b in d){var c=Tb(e,b),c=c.concat(d[b]);e[b]=c}});\"EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator\".split(\" \").forEach(function(b){b in e||(e[b]=d[b])});return e}})}),wx=P(mx,{Title:M(W),OnlineResource:M(Wv),LogoURL:M(jx)}),vx=\nP(mx,{westBoundLongitude:M(zs),eastBoundLongitude:M(zs),southBoundLatitude:M(zs),northBoundLatitude:M(zs)}),px=P(mx,{GetCapabilities:M(hx),GetMap:M(hx),GetFeatureInfo:M(hx)}),ix=P(mx,{Format:lp(W),DCPType:lp(function(b,c){return Q({},yx,b,c)})}),yx=P(mx,{HTTP:M(function(b,c){return Q({},zx,b,c)})}),zx=P(mx,{Get:M(fx),Post:M(fx)}),xx=P(mx,{Name:M(W),Title:M(W),Abstract:M(W),LegendURL:lp(jx),StyleSheetURL:M(fx),StyleURL:M(fx)}),gx=P(mx,{Format:M(W),OnlineResource:M(Wv)}),lx=P(mx,{Keyword:jp(W)});function Ax(){this.b=\"http://mapserver.gis.umn.edu/mapserver\";this.a=new Hs;this.defaultDataProjection=null}y(Ax,ss);\nAx.prototype.hc=function(b,c){var d={featureType:this.featureType,featureNS:this.featureNS};c&&Xb(d,Rr(this,b,c));var e=[d];b.namespaceURI=this.b;var f=So(b),d=[];if(0!==b.childNodes.length){if(\"msGMLOutput\"==f)for(var g=0,h=b.childNodes.length;g<h;g++){var k=b.childNodes[g];if(1===k.nodeType){var m=e[0],n=k.localName.replace(\"_layer\",\"\")+\"_feature\";m.featureType=n;m.featureNS=this.b;var p={};p[n]=jp(this.a.If,this.a);m=P([m.featureNS,null],p);k.namespaceURI=this.b;(k=Q([],m,k,e,this.a))&&lb(d,k)}}\"FeatureCollection\"==\nf&&(e=Q([],this.a.a,b,[{}],this.a))&&(d=e)}return d};function Bx(){this.b=new Yv}y(Bx,Xv);Bx.prototype.c=function(b){for(b=b.firstChild;b;b=b.nextSibling)if(1==b.nodeType)return this.a(b);return null};Bx.prototype.a=function(b){this.version=b.getAttribute(\"version\").trim();var c=this.b.a(b);if(!c)return null;c.version=this.version;return(c=Q(c,Cx,b,[]))?c:null};function Dx(b){var c=W(b).split(\" \");if(c&&2==c.length)return b=+c[0],c=+c[1],isNaN(b)||isNaN(c)?void 0:[b,c]}\nvar Ex=[null,\"http://www.opengis.net/wmts/1.0\"],Fx=[null,\"http://www.opengis.net/ows/1.1\"],Cx=P(Ex,{Contents:M(function(b,c){return Q({},Gx,b,c)})}),Gx=P(Ex,{Layer:lp(function(b,c){return Q({},Hx,b,c)}),TileMatrixSet:lp(function(b,c){return Q({},Ix,b,c)})}),Hx=P(Ex,{Style:lp(function(b,c){var d=Q({},Jx,b,c);if(d){var e=\"true\"===b.getAttribute(\"isDefault\");d.isDefault=e;return d}}),Format:lp(W),TileMatrixSetLink:lp(function(b,c){return Q({},Kx,b,c)}),Dimension:lp(function(b,c){return Q({},Lx,b,c)}),\nResourceURL:lp(function(b){var c=b.getAttribute(\"format\"),d=b.getAttribute(\"template\");b=b.getAttribute(\"resourceType\");var e={};c&&(e.format=c);d&&(e.template=d);b&&(e.resourceType=b);return e})},P(Fx,{Title:M(W),Abstract:M(W),WGS84BoundingBox:M(function(b,c){var d=Q([],Mx,b,c);return 2!=d.length?void 0:Nd(d)}),Identifier:M(W)})),Jx=P(Ex,{LegendURL:lp(function(b){var c={};c.format=b.getAttribute(\"format\");c.href=Wv(b);return c})},P(Fx,{Title:M(W),Identifier:M(W)})),Kx=P(Ex,{TileMatrixSet:M(W)}),\nLx=P(Ex,{Default:M(W),Value:lp(W)},P(Fx,{Identifier:M(W)})),Mx=P(Fx,{LowerCorner:jp(Dx),UpperCorner:jp(Dx)}),Ix=P(Ex,{WellKnownScaleSet:M(W),TileMatrix:lp(function(b,c){return Q({},Nx,b,c)})},P(Fx,{SupportedCRS:M(W),Identifier:M(W)})),Nx=P(Ex,{TopLeftCorner:M(Dx),ScaleDenominator:M(zs),TileWidth:M(Bs),TileHeight:M(Bs),MatrixWidth:M(Bs),MatrixHeight:M(Bs)},P(Fx,{Identifier:M(W)}));var Ox=new Ae(6378137);function Px(b){id.call(this);b=b||{};this.a=null;this.f=Ze;this.b=void 0;C(this,kd(\"projection\"),this.zl,!1,this);C(this,kd(\"tracking\"),this.Al,!1,this);void 0!==b.projection&&this.Wg(Fe(b.projection));void 0!==b.trackingOptions&&this.ei(b.trackingOptions);this.qe(void 0!==b.tracking?b.tracking:!1)}y(Px,id);l=Px.prototype;l.X=function(){this.qe(!1);Px.da.X.call(this)};l.zl=function(){var b=this.Ug();b&&(this.f=Je(Fe(\"EPSG:4326\"),b),this.a&&this.set(\"position\",this.f(this.a)))};\nl.Al=function(){if(aj){var b=this.Vg();b&&void 0===this.b?this.b=ba.navigator.geolocation.watchPosition(ra(this.$n,this),ra(this.ao,this),this.Gg()):b||void 0===this.b||(ba.navigator.geolocation.clearWatch(this.b),this.b=void 0)}};\nl.$n=function(b){b=b.coords;this.set(\"accuracy\",b.accuracy);this.set(\"altitude\",null===b.altitude?void 0:b.altitude);this.set(\"altitudeAccuracy\",null===b.altitudeAccuracy?void 0:b.altitudeAccuracy);this.set(\"heading\",null===b.heading?void 0:Wa(b.heading));this.a?(this.a[0]=b.longitude,this.a[1]=b.latitude):this.a=[b.longitude,b.latitude];var c=this.f(this.a);this.set(\"position\",c);this.set(\"speed\",null===b.speed?void 0:b.speed);b=Kf(Ox,this.a,b.accuracy);b.mc(this.f);this.set(\"accuracyGeometry\",b);\nthis.s()};l.ao=function(b){b.type=\"error\";this.qe(!1);this.o(b)};l.zj=function(){return this.get(\"accuracy\")};l.Aj=function(){return this.get(\"accuracyGeometry\")||null};l.Cj=function(){return this.get(\"altitude\")};l.Dj=function(){return this.get(\"altitudeAccuracy\")};l.xl=function(){return this.get(\"heading\")};l.yl=function(){return this.get(\"position\")};l.Ug=function(){return this.get(\"projection\")};l.hk=function(){return this.get(\"speed\")};l.Vg=function(){return this.get(\"tracking\")};l.Gg=function(){return this.get(\"trackingOptions\")};\nl.Wg=function(b){this.set(\"projection\",b)};l.qe=function(b){this.set(\"tracking\",b)};l.ei=function(b){this.set(\"trackingOptions\",b)};function Qx(b,c,d){df.call(this);this.Tf(b,c?c:0,d)}y(Qx,df);l=Qx.prototype;l.clone=function(){var b=new Qx(null),c=this.v.slice();ff(b,this.b,c);b.s();return b};l.mb=function(b,c,d,e){var f=this.v;b-=f[0];var g=c-f[1];c=b*b+g*g;if(c<e){if(0===c)for(e=0;e<this.a;++e)d[e]=f[e];else for(e=this.yf()/Math.sqrt(c),d[0]=f[0]+e*b,d[1]=f[1]+e*g,e=2;e<this.a;++e)d[e]=f[e];d.length=this.a;return c}return e};l.rc=function(b,c){var d=this.v,e=b-d[0],d=c-d[1];return e*e+d*d<=Rx(this)};\nl.vd=function(){return this.v.slice(0,this.a)};l.Vd=function(b){var c=this.v,d=c[this.a]-c[0];return Rd(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};l.yf=function(){return Math.sqrt(Rx(this))};function Rx(b){var c=b.v[b.a]-b.v[0];b=b.v[b.a+1]-b.v[1];return c*c+b*b}l.V=function(){return\"Circle\"};l.Da=function(b){var c=this.J();return pe(b,c)?(c=this.vd(),b[0]<=c[0]&&b[2]>=c[0]||b[1]<=c[1]&&b[3]>=c[1]?!0:de(b,this.ng,this)):!1};\nl.Ul=function(b){var c=this.a,d=this.v[c]-this.v[0],e=b.slice();e[c]=e[0]+d;for(d=1;d<c;++d)e[c+d]=b[d];ff(this,this.b,e);this.s()};l.Tf=function(b,c,d){if(b){gf(this,d,b,0);this.v||(this.v=[]);d=this.v;b=pf(d,b);d[b++]=d[0]+c;var e;c=1;for(e=this.a;c<e;++c)d[b++]=d[c];d.length=b}else ff(this,\"XY\",null);this.s()};l.Vl=function(b){this.v[this.a]=this.v[0]+b;this.s()};function Sx(b,c,d){for(var e=[],f=b(0),g=b(1),h=c(f),k=c(g),m=[g,f],n=[k,h],p=[1,0],q={},r=1E5,t,x,z,B,A;0<--r&&0<p.length;)z=p.pop(),f=m.pop(),h=n.pop(),g=z.toString(),g in q||(e.push(h[0],h[1]),q[g]=!0),B=p.pop(),g=m.pop(),k=n.pop(),A=(z+B)/2,t=b(A),x=c(t),Ua(x[0],x[1],h[0],h[1],k[0],k[1])<d?(e.push(k[0],k[1]),g=B.toString(),q[g]=!0):(p.push(B,A,A,z),n.push(k,x,x,h),m.push(g,t,t,f));return e}function Tx(b,c,d,e,f){var g=Fe(\"EPSG:4326\");return Sx(function(e){return[b,c+(d-c)*e]},Ye(g,e),f)}\nfunction Ux(b,c,d,e,f){var g=Fe(\"EPSG:4326\");return Sx(function(e){return[c+(d-c)*e,b]},Ye(g,e),f)};function Vx(b){b=b||{};this.g=this.l=null;this.b=this.j=Infinity;this.f=this.i=-Infinity;this.D=this.C=Infinity;this.ia=this.G=-Infinity;this.U=void 0!==b.targetSize?b.targetSize:100;this.oa=void 0!==b.maxLines?b.maxLines:100;this.a=[];this.c=[];this.S=void 0!==b.strokeStyle?b.strokeStyle:Wx;this.A=this.B=void 0;this.u=null;this.setMap(void 0!==b.map?b.map:null)}var Wx=new am({color:\"rgba(0,0,0,0.2)\"}),Xx=[90,45,30,20,10,5,2,1,.5,.2,.1,.05,.01,.005,.002,.001];\nfunction Yx(b,c,d,e,f,g,h){var k=h;c=Tx(c,d,e,b.g,f);k=void 0!==b.a[k]?b.a[k]:new T(null);k.ba(\"XY\",c);pe(k.J(),g)&&(b.a[h++]=k);return h}function Zx(b,c,d,e,f){var g=f;c=Ux(c,b.f,b.b,b.g,d);g=void 0!==b.c[g]?b.c[g]:new T(null);g.ba(\"XY\",c);pe(g.J(),e)&&(b.c[f++]=g);return f}l=Vx.prototype;l.Bl=function(){return this.l};l.Vj=function(){return this.a};l.bk=function(){return this.c};\nl.Kg=function(b){var c=b.vectorContext,d=b.frameState,e=d.extent;b=d.viewState;var f=b.center,g=b.projection,h=b.resolution;b=d.pixelRatio;b=h*h/(4*b*b);if(!this.g||!Xe(this.g,g)){var k=Fe(\"EPSG:4326\"),m=g.J(),n=g.i,p=af(n,k,g),q=n[2],r=n[1],t=n[0],x=p[3],z=p[2],B=p[1],p=p[0];this.j=n[3];this.b=q;this.i=r;this.f=t;this.C=x;this.D=z;this.G=B;this.ia=p;this.B=Ye(k,g);this.A=Ye(g,k);this.u=this.A(me(m));this.g=g}k=0;g.b&&(g=g.J(),k=ke(g),d=d.focus[0],d<g[0]||d>g[2])&&(k*=Math.ceil((g[0]-d)/k),e=[e[0]+\nk,e[1],e[2]+k,e[3]]);d=this.u[0];g=this.u[1];k=-1;n=Math.pow(this.U*h,2);q=[];r=[];h=0;for(m=Xx.length;h<m;++h){t=Xx[h]/2;q[0]=d-t;q[1]=g-t;r[0]=d+t;r[1]=g+t;this.B(q,q);this.B(r,r);t=Math.pow(r[0]-q[0],2)+Math.pow(r[1]-q[1],2);if(t<=n)break;k=Xx[h]}h=k;if(-1==h)this.a.length=this.c.length=0;else{d=this.A(f);f=d[0];d=d[1];g=this.oa;k=[Math.max(e[0],this.ia),Math.max(e[1],this.G),Math.min(e[2],this.D),Math.min(e[3],this.C)];k=af(k,this.g,\"EPSG:4326\");n=k[3];r=k[1];f=Math.floor(f/h)*h;q=Sa(f,this.f,\nthis.b);m=Yx(this,q,r,n,b,e,0);for(k=0;q!=this.f&&k++<g;)q=Math.max(q-h,this.f),m=Yx(this,q,r,n,b,e,m);q=Sa(f,this.f,this.b);for(k=0;q!=this.b&&k++<g;)q=Math.min(q+h,this.b),m=Yx(this,q,r,n,b,e,m);this.a.length=m;d=Math.floor(d/h)*h;f=Sa(d,this.i,this.j);m=Zx(this,f,b,e,0);for(k=0;f!=this.i&&k++<g;)f=Math.max(f-h,this.i),m=Zx(this,f,b,e,m);f=Sa(d,this.i,this.j);for(k=0;f!=this.j&&k++<g;)f=Math.min(f+h,this.j),m=Zx(this,f,b,e,m);this.c.length=m}c.$a(null,this.S);b=0;for(f=this.a.length;b<f;++b)h=this.a[b],\nc.Wb(h,null);b=0;for(f=this.c.length;b<f;++b)h=this.c[b],c.Wb(h,null)};l.setMap=function(b){this.l&&(this.l.K(\"postcompose\",this.Kg,this),this.l.render());b&&(b.H(\"postcompose\",this.Kg,this),b.render());this.l=b};function $x(b,c,d,e,f,g,h){gk.call(this,b,c,d,0,e);this.l=f;this.c=new Image;null!==g&&(this.c.crossOrigin=g);this.g={};this.f=null;this.state=0;this.i=h}y($x,gk);$x.prototype.a=function(b){if(void 0!==b){var c=w(b);if(c in this.g)return this.g[c];b=Qb(this.g)?this.c:this.c.cloneNode(!1);return this.g[c]=b}return this.c};$x.prototype.B=function(){this.state=3;this.f.forEach(Zc);this.f=null;hk(this)};\n$x.prototype.u=function(){void 0===this.resolution&&(this.resolution=le(this.extent)/this.c.height);this.state=2;this.f.forEach(Zc);this.f=null;hk(this)};$x.prototype.load=function(){0==this.state&&(this.state=1,hk(this),this.f=[Xc(this.c,\"error\",this.B,!1,this),Xc(this.c,\"load\",this.u,!1,this)],this.i(this,this.l))};function ay(b,c,d,e,f){wh.call(this,b,c);this.i=d;this.c=new Image;null!==e&&(this.c.crossOrigin=e);this.b={};this.j=null;this.l=f}y(ay,wh);l=ay.prototype;l.X=function(){1==this.state&&by(this);ay.da.X.call(this)};l.Sa=function(b){if(void 0!==b){var c=w(b);if(c in this.b)return this.b[c];b=Qb(this.b)?this.c:this.c.cloneNode(!1);return this.b[c]=b}return this.c};l.tb=function(){return this.i};l.Cl=function(){this.state=3;by(this);xh(this)};\nl.Dl=function(){this.state=this.c.naturalWidth&&this.c.naturalHeight?2:4;by(this);xh(this)};l.load=function(){0==this.state&&(this.state=1,xh(this),this.j=[Xc(this.c,\"error\",this.Cl,!1,this),Xc(this.c,\"load\",this.Dl,!1,this)],this.l(this,this.i))};function by(b){b.j.forEach(Zc);b.j=null};function cy(b,c,d){return function(e,f,g){return d(b,c,e,f,g)}}function dy(){};function ey(b,c){cd.call(this);this.a=new zr(this);var d=b;c&&(d=Cg(b));this.a.Qa(d,\"dragenter\",this.Jn);d!=b&&this.a.Qa(d,\"dragover\",this.Kn);this.a.Qa(b,\"dragover\",this.Ln);this.a.Qa(b,\"drop\",this.Mn)}y(ey,cd);l=ey.prototype;l.kd=!1;l.X=function(){ey.da.X.call(this);this.a.Ec()};l.Jn=function(b){var c=b.a.dataTransfer;(this.kd=!(!c||!(c.types&&(0<=$a(c.types,\"Files\")||0<=$a(c.types,\"public.file-url\"))||c.files&&0<c.files.length)))&&b.preventDefault()};\nl.Kn=function(b){this.kd&&(b.preventDefault(),b.a.dataTransfer.dropEffect=\"none\")};l.Ln=function(b){if(this.kd){b.preventDefault();b.b();b=b.a.dataTransfer;try{b.effectAllowed=\"all\"}catch(c){}b.dropEffect=\"copy\"}};l.Mn=function(b){this.kd&&(b.preventDefault(),b.b(),b=new Ac(b.a),b.type=\"drop\",this.o(b))};/*\n Portions of this code are from MochiKit, received by\n The Closure Authors under the MIT license. All other code is Copyright\n 2005-2009 The Closure Authors. All Rights Reserved.\n*/\nfunction fy(b,c){this.g=[];this.C=b;this.A=c||null;this.f=this.a=!1;this.b=void 0;this.B=this.D=this.i=!1;this.j=0;this.c=null;this.l=0}fy.prototype.cancel=function(b){if(this.a)this.b instanceof fy&&this.b.cancel();else{if(this.c){var c=this.c;delete this.c;b?c.cancel(b):(c.l--,0>=c.l&&c.cancel())}this.C?this.C.call(this.A,this):this.B=!0;this.a||(b=new gy,hy(this),iy(this,!1,b))}};fy.prototype.u=function(b,c){this.i=!1;iy(this,b,c)};function iy(b,c,d){b.a=!0;b.b=d;b.f=!c;jy(b)}\nfunction hy(b){if(b.a){if(!b.B)throw new ky;b.B=!1}}fy.prototype.$c=function(b){hy(this);iy(this,!0,b)};function ly(b,c,d,e){b.g.push([c,d,e]);b.a&&jy(b)}fy.prototype.then=function(b,c,d){var e,f,g=new Hn(function(b,c){e=b;f=c});ly(this,e,function(b){b instanceof gy?g.cancel():f(b)});return g.then(b,c,d)};un(fy);function my(b){return eb(b.g,function(b){return ka(b[1])})}\nfunction jy(b){if(b.j&&b.a&&my(b)){var c=b.j,d=ny[c];d&&(ba.clearTimeout(d.wa),delete ny[c]);b.j=0}b.c&&(b.c.l--,delete b.c);for(var c=b.b,e=d=!1;b.g.length&&!b.i;){var f=b.g.shift(),g=f[0],h=f[1],f=f[2];if(g=b.f?h:g)try{var k=g.call(f||b.A,c);ca(k)&&(b.f=b.f&&(k==c||k instanceof Error),b.b=c=k);if(vn(c)||\"function\"===typeof ba.Promise&&c instanceof ba.Promise)e=!0,b.i=!0}catch(m){c=m,b.f=!0,my(b)||(d=!0)}}b.b=c;e&&(k=ra(b.u,b,!0),e=ra(b.u,b,!1),c instanceof fy?(ly(c,k,e),c.D=!0):c.then(k,e));d&&\n(c=new oy(c),ny[c.wa]=c,b.j=c.wa)}function ky(){xa.call(this)}y(ky,xa);ky.prototype.message=\"Deferred has already fired\";ky.prototype.name=\"AlreadyCalledError\";function gy(){xa.call(this)}y(gy,xa);gy.prototype.message=\"Deferred was canceled\";gy.prototype.name=\"CanceledError\";function oy(b){this.wa=ba.setTimeout(ra(this.c,this),0);this.a=b}oy.prototype.c=function(){delete ny[this.wa];throw this.a;};var ny={};function py(b,c){ca(b.name)?(this.name=b.name,this.code=qy[b.name]):(this.code=b.code,this.name=ry(b.code));xa.call(this,Ba(\"%s %s\",this.name,c))}y(py,xa);function ry(b){var c=Pb(qy,function(c){return b==c});if(!ca(c))throw Error(\"Invalid code: \"+b);return c}var qy={AbortError:3,EncodingError:5,InvalidModificationError:9,InvalidStateError:7,NotFoundError:1,NotReadableError:4,NoModificationAllowedError:6,PathExistsError:12,QuotaExceededError:10,SecurityError:2,SyntaxError:8,TypeMismatchError:11};function sy(b,c){vc.call(this,b.type,c)}y(sy,vc);function ty(){cd.call(this);this.ub=new FileReader;this.ub.onloadstart=ra(this.a,this);this.ub.onprogress=ra(this.a,this);this.ub.onload=ra(this.a,this);this.ub.onabort=ra(this.a,this);this.ub.onerror=ra(this.a,this);this.ub.onloadend=ra(this.a,this)}y(ty,cd);ty.prototype.getError=function(){return this.ub.error&&new py(this.ub.error,\"reading file\")};ty.prototype.a=function(b){this.o(new sy(b,this))};ty.prototype.X=function(){ty.da.X.call(this);delete this.ub};\nfunction uy(b){var c=new fy;b.Qa(\"loadend\",sa(function(b,c){var f=c.ub.result,g=c.getError();null==f||g?(hy(b),iy(b,!1,g)):b.$c(f);c.Ec()},c,b));return c};function vy(b){b=b?b:{};Ok.call(this,{handleEvent:ue});this.j=b.formatConstructors?b.formatConstructors:[];this.A=b.projection?Fe(b.projection):null;this.f=null;this.a=void 0}y(vy,Ok);vy.prototype.X=function(){this.a&&Zc(this.a);vy.da.X.call(this)};vy.prototype.i=function(b){b=b.a.dataTransfer.files;var c,d,e;c=0;for(d=b.length;c<d;++c){e=b[c];var f;f=e;var g=new ty,h=uy(g);g.ub.readAsText(f,\"\");f=h;e=sa(this.l,e);ly(f,e,null,this)}};\nvy.prototype.l=function(b,c){var d=this.u,e=this.A;e||(e=d.aa().g);var d=this.j,f=[],g,h;g=0;for(h=d.length;g<h;++g){var k=new d[g],m;try{m=k.Ba(c)}catch(t){m=null}if(m){var k=k.Ia(c),k=Ye(k,e),n,p;n=0;for(p=m.length;n<p;++n){var q=m[n],r=q.W();r&&r.mc(k);f.push(q)}}}this.o(new wy(xy,this,b,f,e))};vy.prototype.setMap=function(b){this.a&&(Zc(this.a),this.a=void 0);this.f&&(uc(this.f),this.f=null);vy.da.setMap.call(this,b);b&&(this.f=new ey(b.a),this.a=C(this.f,\"drop\",this.i,!1,this))};var xy=\"addfeatures\";\nfunction wy(b,c,d,e,f){vc.call(this,b,c);this.features=e;this.file=d;this.projection=f}y(wy,vc);function yy(b,c){this.x=b;this.y=c}y(yy,yg);yy.prototype.clone=function(){return new yy(this.x,this.y)};yy.prototype.scale=yg.prototype.scale;yy.prototype.add=function(b){this.x+=b.x;this.y+=b.y;return this};yy.prototype.rotate=function(b){var c=Math.cos(b);b=Math.sin(b);var d=this.y*c+this.x*b;this.x=this.x*c-this.y*b;this.y=d;return this};function zy(b){b=b?b:{};al.call(this,{handleDownEvent:Ay,handleDragEvent:By,handleUpEvent:Cy});this.l=b.condition?b.condition:Yk;this.a=this.f=void 0;this.i=0;this.A=b.duration?b.duration:400}y(zy,al);\nfunction By(b){if($k(b)){var c=b.map,d=c.Ra();b=b.pixel;b=new yy(b[0]-d[0]/2,d[1]/2-b[1]);d=Math.atan2(b.y,b.x);b=Math.sqrt(b.x*b.x+b.y*b.y);var e=c.aa();c.render();if(void 0!==this.f){var f=d-this.f;Pk(c,e,e.Ea()-f)}this.f=d;void 0!==this.a&&(d=this.a*(e.$()/b),Rk(c,e,d));void 0!==this.a&&(this.i=this.a/b);this.a=b}}\nfunction Cy(b){if(!$k(b))return!0;b=b.map;var c=b.aa();Tf(c,-1);var d=this.i-1,e=c.Ea(),e=c.constrainRotation(e,0);Pk(b,c,e,void 0,void 0);var e=c.$(),f=this.A,e=c.constrainResolution(e,0,d);Rk(b,c,e,void 0,f);this.i=0;return!1}function Ay(b){return $k(b)&&this.l(b)?(Tf(b.map.aa(),1),this.a=this.f=void 0,!0):!1};function Dy(b,c){vc.call(this,b);this.feature=c}y(Dy,vc);\nfunction Ey(b){al.call(this,{handleDownEvent:Fy,handleEvent:Gy,handleUpEvent:Hy});this.ea=null;this.U=!1;this.Db=b.source?b.source:null;this.fb=b.features?b.features:null;this.zi=b.snapTolerance?b.snapTolerance:12;this.T=b.type;this.f=Iy(this.T);this.xa=b.minPoints?b.minPoints:this.f===Jy?3:2;this.pa=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if(\"Circle\"===this.T)c=function(b,c){var d=c?c:new Qx([NaN,NaN]);d.Tf(b[0],Math.sqrt(xd(b[0],b[1])));return d};else{var d,c=this.f;c===\nKy?d=D:c===Ly?d=T:c===Jy&&(d=E);c=function(b,c){var g=c;g?g.ma(b):g=new d(b);return g}}this.D=c;this.S=this.A=this.a=this.G=this.i=this.l=null;this.gj=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.ga=new H({source:new R({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:My()});this.Cb=b.geometryName;this.Xe=b.condition?b.condition:Xk;this.va=b.freehandCondition?b.freehandCondition:Yk;C(this,kd(\"active\"),this.ki,!1,this)}y(Ey,al);\nfunction My(){var b=hm();return function(c){return b[c.W().V()]}}l=Ey.prototype;l.setMap=function(b){Ey.da.setMap.call(this,b);this.ki()};function Gy(b){var c=!this.U;this.U&&b.type===Yj?(Ny(this,b),c=!1):b.type===Xj?c=Oy(this,b):b.type===Rj&&(c=!1);return bl.call(this,b)&&c}function Fy(b){if(this.Xe(b))return this.ea=b.pixel,!0;if(this.f!==Ly&&this.f!==Jy||!this.va(b))return!1;this.ea=b.pixel;this.U=!0;this.l||Py(this,b);return!0}\nfunction Hy(b){this.U=!1;var c=this.ea,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gj&&(Oy(this,b),this.l?this.f===Qy?this.md():Ry(this,b)?this.md():Ny(this,b):(Py(this,b),this.f===Ky&&this.md()),d=!1);return d}\nfunction Oy(b,c){if(b.l){var d=c.coordinate,e=b.i.W(),f;b.f===Ky?f=b.a:b.f===Jy?(f=b.a[0],f=f[f.length-1],Ry(b,c)&&(d=b.l.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.D(b.a,e);b.G&&b.G.W().ma(d);e instanceof E&&b.f!==Jy?(b.A||(b.A=new sn(new T(null))),e=e.Bg(0),d=b.A.W(),d.ba(e.b,e.ja())):b.S&&(d=b.A.W(),d.ma(b.S));Sy(b)}else d=c.coordinate.slice(),b.G?b.G.W().ma(d):(b.G=new sn(new D(d)),Sy(b));return!0}\nfunction Ry(b,c){var d=!1;if(b.i){var e=!1,f=[b.l];b.f===Ly?e=b.a.length>b.xa:b.f===Jy&&(e=b.a[0].length>b.xa,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],m=e.Oa(k),n=c.pixel,d=n[0]-m[0],m=n[1]-m[1],n=b.U&&b.va(c)?1:b.zi;if(d=Math.sqrt(d*d+m*m)<=n){b.l=k;break}}}return d}\nfunction Py(b,c){var d=c.coordinate;b.l=d;b.f===Ky?b.a=d.slice():b.f===Jy?(b.a=[[d.slice(),d.slice()]],b.S=b.a[0]):(b.a=[d.slice(),d.slice()],b.f===Qy&&(b.S=b.a));b.S&&(b.A=new sn(new T(b.S)));d=b.D(b.a);b.i=new sn;b.Cb&&b.i.vc(b.Cb);b.i.La(d);Sy(b);b.o(new Dy(\"drawstart\",b.i))}\nfunction Ny(b,c){var d=c.coordinate,e=b.i.W(),f,g;if(b.f===Ly)b.l=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.pa,b.D(g,e);else if(b.f===Jy){g=b.a[0];g.push(d.slice());if(f=g.length>b.pa)b.l=g[0];b.D(b.a,e)}Sy(b);f&&b.md()}l.Ao=function(){var b=this.i.W(),c,d;this.f===Ly?(c=this.a,c.splice(-2,1),this.D(c,b)):this.f===Jy&&(c=this.a[0],c.splice(-2,1),d=this.A.W(),d.ma(c),this.D(this.a,b));0===c.length&&(this.l=null);Sy(this)};\nl.md=function(){var b=Ty(this),c=this.a,d=b.W();this.f===Ly?(c.pop(),this.D(c,d)):this.f===Jy&&(c[0].pop(),c[0].push(c[0][0]),this.D(c,d));\"MultiPoint\"===this.T?b.La(new $r([c])):\"MultiLineString\"===this.T?b.La(new U([c])):\"MultiPolygon\"===this.T&&b.La(new V([c]));this.o(new Dy(\"drawend\",b));this.fb&&this.fb.push(b);this.Db&&this.Db.Ad(b)};function Ty(b){b.l=null;var c=b.i;c&&(b.i=null,b.G=null,b.A=null,b.ga.fa().clear(!0));return c}\nl.bm=function(b){var c=b.W();this.i=b;this.a=c.Y();b=this.a[this.a.length-1];this.l=b.slice();this.a.push(b.slice());Sy(this);this.o(new Dy(\"drawstart\",this.i))};l.xc=te;function Sy(b){var c=[];b.i&&c.push(b.i);b.A&&c.push(b.A);b.G&&c.push(b.G);b=b.ga.fa();b.clear(!0);b.Dc(c)}l.ki=function(){var b=this.u,c=this.b();b&&c||Ty(this);this.ga.setMap(c?b:null)};\nfunction Iy(b){var c;\"Point\"===b||\"MultiPoint\"===b?c=Ky:\"LineString\"===b||\"MultiLineString\"===b?c=Ly:\"Polygon\"===b||\"MultiPolygon\"===b?c=Jy:\"Circle\"===b&&(c=Qy);return c}var Ky=\"Point\",Ly=\"LineString\",Jy=\"Polygon\",Qy=\"Circle\";function Uy(b,c,d){vc.call(this,b);this.features=c;this.mapBrowserPointerEvent=d}y(Uy,vc);\nfunction Vy(b){al.call(this,{handleDownEvent:Wy,handleDragEvent:Xy,handleEvent:Yy,handleUpEvent:Zy});this.pa=b.deleteCondition?b.deleteCondition:ze(Xk,Wk);this.va=this.f=null;this.ea=[0,0];this.D=this.U=!1;this.a=new Bp;this.G=void 0!==b.pixelTolerance?b.pixelTolerance:10;this.l=this.ga=!1;this.i=null;this.S=new H({source:new R({useSpatialIndex:!1,wrapX:!!b.wrapX}),style:b.style?b.style:$y(),updateWhileAnimating:!0,updateWhileInteracting:!0});this.T={Point:this.im,LineString:this.bh,LinearRing:this.bh,\nPolygon:this.jm,MultiPoint:this.gm,MultiLineString:this.fm,MultiPolygon:this.hm,GeometryCollection:this.em};this.A=b.features;this.A.forEach(this.zf,this);C(this.A,\"add\",this.cm,!1,this);C(this.A,\"remove\",this.dm,!1,this)}y(Vy,al);l=Vy.prototype;l.zf=function(b){var c=b.W();c.V()in this.T&&this.T[c.V()].call(this,b,c);(c=this.u)&&az(this,this.ea,c);C(b,\"change\",this.ah,!1,this)};function bz(b,c){b.D||(b.D=!0,b.o(new Uy(\"modifystart\",b.A,c)))}\nfunction cz(b,c){dz(b,c);b.f&&0===b.A.$b()&&(b.S.fa().Qc(b.f),b.f=null);Yc(c,\"change\",b.ah,!1,b)}function dz(b,c){var d=b.a,e=[];d.forEach(function(b){c===b.feature&&e.push(b)});for(var f=e.length-1;0<=f;--f)d.remove(e[f])}l.setMap=function(b){this.S.setMap(b);Vy.da.setMap.call(this,b)};l.cm=function(b){this.zf(b.element)};l.ah=function(b){this.l||(b=b.target,cz(this,b),this.zf(b))};l.dm=function(b){cz(this,b.element)};\nl.im=function(b,c){var d=c.Y(),d={feature:b,geometry:c,la:[d,d]};this.a.ya(c.J(),d)};l.gm=function(b,c){var d=c.Y(),e,f,g;f=0;for(g=d.length;f<g;++f)e=d[f],e={feature:b,geometry:c,depth:[f],index:f,la:[e,e]},this.a.ya(c.J(),e)};l.bh=function(b,c){var d=c.Y(),e,f,g,h;e=0;for(f=d.length-1;e<f;++e)g=d.slice(e,e+2),h={feature:b,geometry:c,index:e,la:g},this.a.ya(Nd(g),h)};\nl.fm=function(b,c){var d=c.Y(),e,f,g,h,k,m,n;h=0;for(k=d.length;h<k;++h)for(e=d[h],f=0,g=e.length-1;f<g;++f)m=e.slice(f,f+2),n={feature:b,geometry:c,depth:[h],index:f,la:m},this.a.ya(Nd(m),n)};l.jm=function(b,c){var d=c.Y(),e,f,g,h,k,m,n;h=0;for(k=d.length;h<k;++h)for(e=d[h],f=0,g=e.length-1;f<g;++f)m=e.slice(f,f+2),n={feature:b,geometry:c,depth:[h],index:f,la:m},this.a.ya(Nd(m),n)};\nl.hm=function(b,c){var d=c.Y(),e,f,g,h,k,m,n,p,q,r;m=0;for(n=d.length;m<n;++m)for(p=d[m],h=0,k=p.length;h<k;++h)for(e=p[h],f=0,g=e.length-1;f<g;++f)q=e.slice(f,f+2),r={feature:b,geometry:c,depth:[h,m],index:f,la:q},this.a.ya(Nd(q),r)};l.em=function(b,c){var d,e=c.f;for(d=0;d<e.length;++d)this.T[e[d].V()].call(this,b,e[d])};function ez(b,c){var d=b.f;d?d.W().ma(c):(d=new sn(new D(c)),b.f=d,b.S.fa().Ad(d))}function fz(b,c){return b.index-c.index}\nfunction Wy(b){az(this,b.pixel,b.map);this.i=[];this.D=!1;var c=this.f;if(c){var d=[],c=c.W().Y(),e=Nd([c]),e=Ep(this.a,e),f={};e.sort(fz);for(var g=0,h=e.length;g<h;++g){var k=e[g],m=k.la,n=w(k.feature),p=k.depth;p&&(n+=\"-\"+p.join(\"-\"));f[n]||(f[n]=Array(2));if(vd(m[0],c)&&!f[n][0])this.i.push([k,0]),f[n][0]=k;else if(vd(m[1],c)&&!f[n][1]){if(\"LineString\"!==k.geometry.V()&&\"MultiLineString\"!==k.geometry.V()||!f[n][0]||0!==f[n][0].index)this.i.push([k,1]),f[n][1]=k}else w(m)in this.va&&!f[n][0]&&\n!f[n][1]&&d.push([k,c])}d.length&&bz(this,b);for(g=d.length-1;0<=g;--g)this.al.apply(this,d[g])}return!!this.f}\nfunction Xy(b){this.U=!1;bz(this,b);b=b.coordinate;for(var c=0,d=this.i.length;c<d;++c){for(var e=this.i[c],f=e[0],g=f.depth,h=f.geometry,k=h.Y(),m=f.la,e=e[1];b.length<h.ra();)b.push(0);switch(h.V()){case \"Point\":k=b;m[0]=m[1]=b;break;case \"MultiPoint\":k[f.index]=b;m[0]=m[1]=b;break;case \"LineString\":k[f.index+e]=b;m[e]=b;break;case \"MultiLineString\":k[g[0]][f.index+e]=b;m[e]=b;break;case \"Polygon\":k[g[0]][f.index+e]=b;m[e]=b;break;case \"MultiPolygon\":k[g[1]][g[0]][f.index+e]=b,m[e]=b}f=h;this.l=\n!0;f.ma(k);this.l=!1}ez(this,b)}function Zy(b){for(var c,d=this.i.length-1;0<=d;--d)c=this.i[d][0],Cp(this.a,Nd(c.la),c);this.D&&(this.o(new Uy(\"modifyend\",this.A,b)),this.D=!1);return!1}\nfunction Yy(b){if(!(b instanceof Nj))return!0;var c;b.map.aa().b.slice()[1]||b.type!=Xj||this.C||(this.ea=b.pixel,az(this,b.pixel,b.map));if(this.f&&this.pa(b))if(b.type==Sj&&this.U)c=!0;else{this.f.W();bz(this,b);c=this.i;var d={},e,f,g,h,k,m,n,p,q;for(k=c.length-1;0<=k;--k)if(g=c[k],p=g[0],h=p.geometry,f=h.Y(),q=w(p.feature),p.depth&&(q+=\"-\"+p.depth.join(\"-\")),n=e=m=void 0,0===g[1]?(e=p,m=p.index):1==g[1]&&(n=p,m=p.index+1),q in d||(d[q]=[n,e,m]),g=d[q],void 0!==n&&(g[0]=n),void 0!==e&&(g[1]=e),\nvoid 0!==g[0]&&void 0!==g[1]){e=f;q=!1;n=m-1;switch(h.V()){case \"MultiLineString\":f[p.depth[0]].splice(m,1);q=!0;break;case \"LineString\":f.splice(m,1);q=!0;break;case \"MultiPolygon\":e=e[p.depth[1]];case \"Polygon\":e=e[p.depth[0]],4<e.length&&(m==e.length-1&&(m=0),e.splice(m,1),q=!0,0===m&&(e.pop(),e.push(e[0]),n=e.length-1))}q&&(this.a.remove(g[0]),this.a.remove(g[1]),e=h,this.l=!0,e.ma(f),this.l=!1,f={depth:p.depth,feature:p.feature,geometry:p.geometry,index:n,la:[g[0].la[0],g[1].la[1]]},this.a.ya(Nd(f.la),\nf),gz(this,h,m,p.depth,-1),this.f&&(this.S.fa().Qc(this.f),this.f=null))}c=!0;this.o(new Uy(\"modifyend\",this.A,b));this.D=!1}b.type==Sj&&(this.U=!1);return bl.call(this,b)&&!c}\nfunction az(b,c,d){function e(b,c){return yd(f,b.la)-yd(f,c.la)}var f=d.Fa(c),g=d.Fa([c[0]-b.G,c[1]+b.G]),h=d.Fa([c[0]+b.G,c[1]-b.G]),g=Nd([g,h]),g=Ep(b.a,g);if(0<g.length){g.sort(e);var h=g[0].la,k=sd(f,h),m=d.Oa(k);if(Math.sqrt(xd(c,m))<=b.G){c=d.Oa(h[0]);d=d.Oa(h[1]);c=xd(m,c);d=xd(m,d);b.ga=Math.sqrt(Math.min(c,d))<=b.G;b.ga&&(k=c>d?h[1]:h[0]);ez(b,k);d={};d[w(h)]=!0;c=1;for(m=g.length;c<m;++c)if(k=g[c].la,vd(h[0],k[0])&&vd(h[1],k[1])||vd(h[0],k[1])&&vd(h[1],k[0]))d[w(k)]=!0;else break;b.va=d;\nreturn}}b.f&&(b.S.fa().Qc(b.f),b.f=null)}\nl.al=function(b,c){for(var d=b.la,e=b.feature,f=b.geometry,g=b.depth,h=b.index,k;c.length<f.ra();)c.push(0);switch(f.V()){case \"MultiLineString\":k=f.Y();k[g[0]].splice(h+1,0,c);break;case \"Polygon\":k=f.Y();k[g[0]].splice(h+1,0,c);break;case \"MultiPolygon\":k=f.Y();k[g[1]][g[0]].splice(h+1,0,c);break;case \"LineString\":k=f.Y();k.splice(h+1,0,c);break;default:return}this.l=!0;f.ma(k);this.l=!1;k=this.a;k.remove(b);gz(this,f,h,g,1);var m={la:[d[0],c],feature:e,geometry:f,depth:g,index:h};k.ya(Nd(m.la),\nm);this.i.push([m,1]);d={la:[c,d[1]],feature:e,geometry:f,depth:g,index:h+1};k.ya(Nd(d.la),d);this.i.push([d,0]);this.U=!0};function gz(b,c,d,e,f){Gp(b.a,c.J(),function(b){b.geometry===c&&(void 0===e||void 0===b.depth||sb(b.depth,e))&&b.index>d&&(b.index+=f)})}function $y(){var b=hm();return function(){return b.Point}};function hz(b,c,d,e){vc.call(this,b);this.selected=c;this.deselected=d;this.mapBrowserEvent=e}y(hz,vc);\nfunction iz(b){Ok.call(this,{handleEvent:jz});b=b?b:{};this.C=b.condition?b.condition:Wk;this.l=b.addCondition?b.addCondition:te;this.D=b.removeCondition?b.removeCondition:te;this.G=b.toggleCondition?b.toggleCondition:Yk;this.A=b.multi?b.multi:!1;this.j=b.filter?b.filter:ue;var c;if(b.layers)if(ka(b.layers))c=b.layers;else{var d=b.layers;c=function(b){return vb(d,b)}}else c=ue;this.i=c;this.a={};this.f=new H({source:new R({useSpatialIndex:!1,features:b.features,wrapX:b.wrapX}),style:b.style?b.style:\nkz(),updateWhileAnimating:!0,updateWhileInteracting:!0});b=this.f.fa().b;C(b,\"add\",this.km,!1,this);C(b,\"remove\",this.nm,!1,this)}y(iz,Ok);l=iz.prototype;l.lm=function(){return this.f.fa().b};l.mm=function(b){b=w(b);return this.a[b]};\nfunction jz(b){if(!this.C(b))return!0;var c=this.l(b),d=this.D(b),e=this.G(b),f=!c&&!d&&!e,g=b.map,h=this.f.fa().b,k=[],m=[],n=!1;if(f)g.od(b.pixel,function(b,c){if(!c||this.j(b,c)){m.push(b);var d=w(b);this.a[d]=c;return!this.A}},this,this.i),0<m.length&&1==h.$b()&&h.item(0)==m[0]||(n=!0,0!==h.$b()&&(k=Array.prototype.concat(h.a),h.clear()),h.tf(m),0===m.length?Rb(this.a):0<k.length&&k.forEach(function(b){b=w(b);delete this.a[b]},this));else{g.od(b.pixel,function(b,f){if(!vb(h.a,b)){if((c||e)&&this.j(b,\nf)){m.push(b);var g=w(b);this.a[g]=f}}else if(d||e)k.push(b),g=w(b),delete this.a[g]},this,this.i);for(f=k.length-1;0<=f;--f)h.remove(k[f]);h.tf(m);if(0<m.length||0<k.length)n=!0}n&&this.o(new hz(\"select\",m,k,b));return Vk(b)}l.setMap=function(b){var c=this.u,d=this.f.fa().b;null===c||d.forEach(c.ii,c);iz.da.setMap.call(this,b);this.f.setMap(b);null===b||d.forEach(b.fi,b)};\nfunction kz(){var b=hm();lb(b.Polygon,b.LineString);lb(b.GeometryCollection,b.LineString);return function(c){return b[c.W().V()]}}l.km=function(b){b=b.element;var c=this.u;null===c||c.fi(b)};l.nm=function(b){b=b.element;var c=this.u;null===c||c.ii(b)};function lz(b){al.call(this,{handleEvent:mz,handleDownEvent:ue,handleUpEvent:nz});b=b?b:{};this.l=b.source?b.source:null;this.i=b.features?b.features:null;this.ea=[];this.D={};this.G={};this.U={};this.A={};this.S=null;this.f=void 0!==b.pixelTolerance?b.pixelTolerance:10;this.ga=ra(oz,this);this.a=new Bp;this.T={Point:this.tm,LineString:this.fh,LinearRing:this.fh,Polygon:this.um,MultiPoint:this.rm,MultiLineString:this.qm,MultiPolygon:this.sm,GeometryCollection:this.pm}}y(lz,al);l=lz.prototype;\nl.wd=function(b,c){var d=void 0!==c?c:!0,e=b.W(),f=this.T[e.V()];if(f){var g=w(b);this.U[g]=e.J(Od());f.call(this,b,e);d&&(this.G[g]=e.H(\"change\",ra(this.yk,this,b),this),this.D[g]=b.H(kd(b.a),this.om,this))}};l.wj=function(b){this.wd(b)};l.xj=function(b){this.xd(b)};l.dh=function(b){var c;b instanceof Lp?c=b.feature:b instanceof ng&&(c=b.element);this.wd(c)};l.eh=function(b){var c;b instanceof Lp?c=b.feature:b instanceof ng&&(c=b.element);this.xd(c)};\nl.om=function(b){b=b.g;this.xd(b,!0);this.wd(b,!0)};l.yk=function(b){if(this.C){var c=w(b);c in this.A||(this.A[c]=b)}else this.ji(b)};l.xd=function(b,c){var d=void 0!==c?c:!0,e=w(b),f=this.U[e];if(f){var g=this.a,h=[];Gp(g,f,function(c){b===c.feature&&h.push(c)});for(f=h.length-1;0<=f;--f)g.remove(h[f]);d&&(Zc(this.G[e]),delete this.G[e],Zc(this.D[e]),delete this.D[e])}};\nl.setMap=function(b){var c=this.u,d=this.ea,e;this.i?e=this.i:this.l&&(e=this.l.ye());c&&(d.forEach(gd),d.length=0,e.forEach(this.xj,this));lz.da.setMap.call(this,b);b&&(this.i?(d.push(this.i.H(\"add\",this.dh,this)),d.push(this.i.H(\"remove\",this.eh,this))):this.l&&(d.push(this.l.H(\"addfeature\",this.dh,this)),d.push(this.l.H(\"removefeature\",this.eh,this))),e.forEach(this.wj,this))};l.xc=te;l.ji=function(b){this.xd(b,!1);this.wd(b,!1)};\nl.pm=function(b,c){var d,e=c.f;for(d=0;d<e.length;++d)this.T[e[d].V()].call(this,b,e[d])};l.fh=function(b,c){var d=c.Y(),e,f,g,h;e=0;for(f=d.length-1;e<f;++e)g=d.slice(e,e+2),h={feature:b,la:g},this.a.ya(Nd(g),h)};l.qm=function(b,c){var d=c.Y(),e,f,g,h,k,m,n;h=0;for(k=d.length;h<k;++h)for(e=d[h],f=0,g=e.length-1;f<g;++f)m=e.slice(f,f+2),n={feature:b,la:m},this.a.ya(Nd(m),n)};l.rm=function(b,c){var d=c.Y(),e,f,g;f=0;for(g=d.length;f<g;++f)e=d[f],e={feature:b,la:[e,e]},this.a.ya(c.J(),e)};\nl.sm=function(b,c){var d=c.Y(),e,f,g,h,k,m,n,p,q,r;m=0;for(n=d.length;m<n;++m)for(p=d[m],h=0,k=p.length;h<k;++h)for(e=p[h],f=0,g=e.length-1;f<g;++f)q=e.slice(f,f+2),r={feature:b,la:q},this.a.ya(Nd(q),r)};l.tm=function(b,c){var d=c.Y(),d={feature:b,la:[d,d]};this.a.ya(c.J(),d)};l.um=function(b,c){var d=c.Y(),e,f,g,h,k,m,n;h=0;for(k=d.length;h<k;++h)for(e=d[h],f=0,g=e.length-1;f<g;++f)m=e.slice(f,f+2),n={feature:b,la:m},this.a.ya(Nd(m),n)};\nfunction mz(b){var c,d,e=b.pixel,f=b.coordinate;c=b.map;var g=c.Fa([e[0]-this.f,e[1]+this.f]);d=c.Fa([e[0]+this.f,e[1]-this.f]);var g=Nd([g,d]),h=Ep(this.a,g),k=!1,g=!1,m=null;d=null;0<h.length&&(this.S=f,h.sort(this.ga),h=h[0].la,m=sd(f,h),d=c.Oa(m),Math.sqrt(xd(e,d))<=this.f&&(g=!0,e=c.Oa(h[0]),f=c.Oa(h[1]),e=xd(d,e),f=xd(d,f),k=Math.sqrt(Math.min(e,f))<=this.f))&&(m=e>f?h[1]:h[0],d=c.Oa(m),d=[Math.round(d[0]),Math.round(d[1])]);c=m;g&&(b.coordinate=c.slice(0,2),b.pixel=d);return bl.call(this,b)}\nfunction nz(){var b=Lb(this.A);b.length&&(b.forEach(this.ji,this),this.A={});return!1}function oz(b,c){return yd(this.S,b.la)-yd(this.S,c.la)};function pz(b,c,d){vc.call(this,b);this.features=c;this.coordinate=d}y(pz,vc);function qz(b){al.call(this,{handleDownEvent:rz,handleDragEvent:sz,handleMoveEvent:tz,handleUpEvent:uz});this.l=void 0;this.a=null;this.f=void 0!==b.features?b.features:null;this.i=null}y(qz,al);function rz(b){this.i=vz(this,b.pixel,b.map);return!this.a&&this.i?(this.a=b.coordinate,tz.call(this,b),this.o(new pz(\"translatestart\",this.f,b.coordinate)),!0):!1}\nfunction uz(b){return this.a?(this.a=null,tz.call(this,b),this.o(new pz(\"translateend\",this.f,b.coordinate)),!0):!1}function sz(b){if(this.a){b=b.coordinate;var c=b[0]-this.a[0],d=b[1]-this.a[1];if(this.f)this.f.forEach(function(b){var e=b.W();e.Oc(c,d);b.La(e)});else if(this.i){var e=this.i.W();e.Oc(c,d);this.i.La(e)}this.a=b;this.o(new pz(\"translating\",this.f,b))}}\nfunction tz(b){var c=b.map.Lc();if(b=b.map.od(b.pixel,function(b){return b})){var d=!1;this.f&&vb(this.f.a,b)&&(d=!0);this.l=c.style.cursor;c.style.cursor=this.a?\"-webkit-grabbing\":d?\"-webkit-grab\":\"pointer\";c.style.cursor=this.a?d?\"grab\":\"pointer\":\"grabbing\"}else c.style.cursor=void 0!==this.l?this.l:\"\",this.l=void 0}function vz(b,c,d){var e=null;c=d.od(c,function(b){return b});b.f&&vb(b.f.a,c)&&(e=c);return e};function X(b){b=b?b:{};var c=Ub(b);delete c.gradient;delete c.radius;delete c.blur;delete c.shadow;delete c.weight;H.call(this,c);this.g=null;this.Z=void 0!==b.shadow?b.shadow:250;this.T=void 0;this.U=null;C(this,kd(\"gradient\"),this.zk,!1,this);this.Wh(b.gradient?b.gradient:wz);this.Sh(void 0!==b.blur?b.blur:15);this.ih(void 0!==b.radius?b.radius:8);C(this,[kd(\"blur\"),kd(\"radius\")],this.Lg,!1,this);this.Lg();var d=b.weight?b.weight:\"weight\",e;ia(d)?e=function(b){return b.get(d)}:e=d;this.f(ra(function(b){b=\ne(b);b=void 0!==b?Sa(b,0,1):1;var c=255*b|0,d=this.U[c];d||(d=[new cm({image:new wk({opacity:b,src:this.T})})],this.U[c]=d);return d},this));this.set(\"renderOrder\",null);C(this,\"render\",this.Rk,!1,this)}y(X,H);var wz=[\"#00f\",\"#0ff\",\"#0f0\",\"#ff0\",\"#f00\"];l=X.prototype;l.tg=function(){return this.get(\"blur\")};l.Ag=function(){return this.get(\"gradient\")};l.hh=function(){return this.get(\"radius\")};\nl.zk=function(){for(var b=this.Ag(),c=Pi(1,256),d=c.createLinearGradient(0,0,1,256),e=1/(b.length-1),f=0,g=b.length;f<g;++f)d.addColorStop(f*e,b[f]);c.fillStyle=d;c.fillRect(0,0,1,256);this.g=c.getImageData(0,0,1,256).data};l.Lg=function(){var b=this.hh(),c=this.tg(),d=b+c+1,e=2*d,e=Pi(e,e);e.shadowOffsetX=e.shadowOffsetY=this.Z;e.shadowBlur=c;e.shadowColor=\"#000\";e.beginPath();c=d-this.Z;e.arc(c,c,b,0,2*Math.PI,!0);e.fill();this.T=e.canvas.toDataURL();this.U=Array(256);this.s()};\nl.Rk=function(b){b=b.context;var c=b.canvas,c=b.getImageData(0,0,c.width,c.height),d=c.data,e,f,g;e=0;for(f=d.length;e<f;e+=4)if(g=4*d[e+3])d[e]=this.g[g],d[e+1]=this.g[g+1],d[e+2]=this.g[g+2];b.putImageData(c,0,0)};l.Sh=function(b){this.set(\"blur\",b)};l.Wh=function(b){this.set(\"gradient\",b)};l.ih=function(b){this.set(\"radius\",b)};function xz(b,c,d,e,f,g,h,k,m,n,p){wh.call(this,[f,g,h],0);this.C=void 0!==p?p:!1;this.A=k;this.j=null;this.g={};this.i=c;this.B=e;this.c=[];this.b=null;this.l=0;h=e.Aa(this.a);p=this.B.J();g=this.i.J();h=p?oe(h,p):h;if(0===ie(h))this.state=4;else if((p=b.J())&&(g?g=oe(g,p):g=p),e=e.$(f),e=bn(b,d,me(h),e),!isFinite(e)||isNaN(e)||0>=e)this.state=4;else if(this.u=new en(b,d,h,g,e*(void 0!==n?n:.5)),0===this.u.f.length)this.state=4;else if(this.l=Kh(c,e),d=gn(this.u),g&&(b.b?(d[1]=Sa(d[1],g[1],g[3]),\nd[3]=Sa(d[3],g[1],g[3])):d=oe(d,g)),ie(d))if(b=Fh(c,d,this.l),100>kg(b)*jg(b)){for(c=b.a;c<=b.f;c++)for(d=b.c;d<=b.b;d++)(n=m(this.l,c,d,k))&&this.c.push(n);0===this.c.length&&(this.state=4)}else this.state=3;else this.state=4}y(xz,wh);xz.prototype.X=function(){1==this.state&&(this.b.forEach(Zc),this.b=null);xz.da.X.call(this)};xz.prototype.Sa=function(b){if(void 0!==b){var c=w(b);if(c in this.g)return this.g[c];b=Qb(this.g)?this.j:this.j.cloneNode(!1);return this.g[c]=b}return this.j};\nfunction yz(b){var c=[];b.c.forEach(function(b){b&&2==b.state&&c.push({extent:this.i.Aa(b.a),image:b.Sa()})},b);b.c.length=0;var d=b.a,e=d[0],f=b.B.Ha(e),g=ja(f)?f:f[0],f=ja(f)?f:f[1],e=b.B.$(e),h=b.i.$(b.l),d=b.B.Aa(d);b.j=dn(g,f,b.A,h,b.i.J(),e,d,b.u,c,b.C);b.state=2;xh(b)}\nxz.prototype.load=function(){if(0==this.state){this.state=1;xh(this);var b=0;this.b=[];this.c.forEach(function(c){var d=c.state;if(0==d||1==d){b++;var e;e=c.Qa(\"change\",function(){var d=c.state;if(2==d||3==d||4==d)Zc(e),b--,0===b&&(this.b.forEach(Zc),this.b=null,yz(this))},!1,this);this.b.push(e)}},this);this.c.forEach(function(b){0==b.state&&b.load()});0===b&&yz(this)}};function zz(b,c){var d=c||{},e=d.document||document,f=Kg(\"SCRIPT\"),g={Rh:f,yc:void 0},h=new fy(Az,g),k=null,m=null!=d.timeout?d.timeout:5E3;0<m&&(k=window.setTimeout(function(){Bz(f,!0);var c=new Cz(Dz,\"Timeout reached for loading script \"+b);hy(h);iy(h,!1,c)},m),g.yc=k);f.onload=f.onreadystatechange=function(){f.readyState&&\"loaded\"!=f.readyState&&\"complete\"!=f.readyState||(Bz(f,d.rj||!1,k),h.$c(null))};f.onerror=function(){Bz(f,!0,k);var c=new Cz(Ez,\"Error while loading script \"+b);hy(h);iy(h,!1,\nc)};g=d.attributes||{};Xb(g,{type:\"text/javascript\",charset:\"UTF-8\",src:b});Eg(f,g);Fz(e).appendChild(f);return h}function Fz(b){var c=b.getElementsByTagName(\"HEAD\");return c&&0!=c.length?c[0]:b.documentElement}function Az(){if(this&&this.Rh){var b=this.Rh;b&&\"SCRIPT\"==b.tagName&&Bz(b,!0,this.yc)}}function Bz(b,c,d){null!=d&&ba.clearTimeout(d);b.onload=da;b.onerror=da;b.onreadystatechange=da;c&&window.setTimeout(function(){Og(b)},0)}var Ez=0,Dz=1;\nfunction Cz(b,c){var d=\"Jsloader error (code #\"+b+\")\";c&&(d+=\": \"+c);xa.call(this,d);this.code=b}y(Cz,xa);function Gz(b,c){this.c=new Ft(b);this.a=c?c:\"callback\";this.yc=5E3}var Hz=0;function Iz(b,c,d,e){c=c||null;var f=\"_\"+(Hz++).toString(36)+ta().toString(36);ba._callbacks_||(ba._callbacks_={});var g=b.c.clone();if(c)for(var h in c)if(!c.hasOwnProperty||c.hasOwnProperty(h)){var k=g,m=h,n=c[h];ga(n)||(n=[String(n)]);Yt(k.b,m,n)}d&&(ba._callbacks_[f]=Jz(f,d),d=b.a,h=\"_callbacks_.\"+f,ga(h)||(h=[String(h)]),Yt(g.b,d,h));b=zz(g.toString(),{timeout:b.yc,rj:!0});ly(b,null,Kz(f,c,e),void 0)}\nGz.prototype.cancel=function(b){b&&(b.sj&&b.sj.cancel(),b.wa&&Lz(b.wa,!1))};function Kz(b,c,d){return function(){Lz(b,!1);d&&d(c)}}function Jz(b,c){return function(d){Lz(b,!0);c.apply(void 0,arguments)}}function Lz(b,c){ba._callbacks_[b]&&(c?delete ba._callbacks_[b]:ba._callbacks_[b]=da)};function Y(b){Zp.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:void 0!==b.state?b.state:void 0,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:Mz,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:ay;this.i={};this.u={};this.xa=b.reprojectionErrorThreshold;\nthis.T=!1}y(Y,Zp);l=Y.prototype;l.nh=function(){return uh(this.a)?!0:Jb(this.i,function(b){return uh(b)})};l.oh=function(b,c){var d=this.td(b);vh(this.a,this.a==d?c:{});Ib(this.i,function(b){vh(b,b==d?c:{})})};l.hb=function(b){var c=this.f;return!this.tileGrid||c&&!Xe(c,b)?(c=w(b).toString(),c in this.u||(this.u[c]=Lh(b)),this.u[c]):this.tileGrid};l.td=function(b){var c=this.f;if(!c||Xe(c,b))return this.a;b=w(b).toString();b in this.i||(this.i[b]=new th);return this.i[b]};\nl.Ob=function(b,c,d,e,f){if(this.f&&f&&!Xe(this.f,f)){e=this.td(f);var g=this.gb(b,c,d);if(sh(e,g))return e.get(g);var h=this.f,k=this.hb(h),m=this.hb(f);b=new xz(h,k,f,m,b,c,d,this.C,ra(function(b,c,d,e){return Nz(this,b,c,d,e,h)},this),this.xa,this.T);e.set(g,b);return b}return Nz(this,b,c,d,e,f)};\nfunction Nz(b,c,d,e,f,g){var h=b.gb(c,d,e);if(sh(b.a,h))return b.a.get(h);c=[c,d,e];f=(d=Rh(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:\"\",b.crossOrigin,b.tileLoadFunction);C(f,\"change\",b.ph,!1,b);b.a.set(h,f);return f}l.wb=function(b){this.T!=b&&(this.T=b,Ib(this.i,function(b){b.clear()}),this.s())};l.xb=function(b,c){var d=Fe(b);d&&(d=w(d).toString(),d in this.u||(this.u[d]=c))};function Mz(b,c){b.Sa().src=c};function Oz(b){Y.call(this,{crossOrigin:\"anonymous\",opaque:!0,projection:Fe(\"EPSG:3857\"),reprojectionErrorThreshold:b.reprojectionErrorThreshold,state:\"loading\",tileLoadFunction:b.tileLoadFunction,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.l=void 0!==b.culture?b.culture:\"en-us\";this.g=void 0!==b.maxZoom?b.maxZoom:-1;var c=new Ft(\"https://dev.virtualearth.net/REST/v1/Imagery/Metadata/\"+b.imagerySet);Iz(new Gz(c,\"jsonp\"),{include:\"ImageryProviders\",uriScheme:\"https\",key:b.key},ra(this.D,this))}y(Oz,Y);\nvar Pz=new mg({html:'<a class=\"ol-attribution-bing-tos\" href=\"http://www.microsoft.com/maps/product/terms.html\">Terms of Use</a>'});\nOz.prototype.D=function(b){if(200!=b.statusCode||\"OK\"!=b.statusDescription||\"ValidCredentials\"!=b.authenticationResultCode||1!=b.resourceSets.length||1!=b.resourceSets[0].resources.length)Ah(this,\"error\");else{var c=b.brandLogoUri;-1==c.indexOf(\"https\")&&(c=c.replace(\"http\",\"https\"));var d=b.resourceSets[0].resources[0],e=-1==this.g?d.zoomMax:this.g;b=Mh(this.f);var f=Oh({extent:b,minZoom:d.zoomMin,maxZoom:e,tileSize:d.imageWidth==d.imageHeight?d.imageWidth:[d.imageWidth,d.imageHeight]});this.tileGrid=\nf;var g=this.l;this.tileUrlFunction=Wp(d.imageUrlSubdomains.map(function(b){var c=[0,0,0],e=d.imageUrl.replace(\"{subdomain}\",b).replace(\"{culture}\",g);return function(b){if(b)return cg(b[0],b[1],-b[2]-1,c),e.replace(\"{quadkey}\",eg(c))}}));if(d.imageryProviders){var h=Je(Fe(\"EPSG:4326\"),this.f);b=d.imageryProviders.map(function(b){var c=b.attribution,d={};b.coverageAreas.forEach(function(b){var c=b.zoomMin,g=Math.min(b.zoomMax,e);b=b.bbox;b=re([b[1],b[0],b[3],b[2]],h);var k,m;for(k=c;k<=g;++k)m=k.toString(),\nc=Fh(f,b,k),m in d?d[m].push(c):d[m]=[c]});return new mg({html:c,tileRanges:d})});b.push(Pz);this.na(b)}this.U=c;Ah(this,\"ready\")}};function Qz(b){R.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,wrapX:b.wrapX});this.G=void 0;this.ea=void 0!==b.distance?b.distance:20;this.D=[];this.C=b.source;this.C.H(\"change\",Qz.prototype.va,this)}y(Qz,R);Qz.prototype.ga=function(){return this.C};Qz.prototype.Mc=function(b,c,d){this.C.Mc(b,c,d);c!==this.G&&(this.clear(),this.G=c,Rz(this),this.Dc(this.D))};Qz.prototype.va=function(){this.clear();Rz(this);this.Dc(this.D);this.s()};\nfunction Rz(b){if(void 0!==b.G){b.D.length=0;for(var c=Od(),d=b.ea*b.G,e=b.C.ye(),f={},g=0,h=e.length;g<h;g++){var k=e[g];Nb(f,w(k).toString())||(k=k.W().Y(),Zd(k,c),Sd(c,d,c),k=b.C.lf(c),k=k.filter(function(b){b=w(b).toString();return b in f?!1:f[b]=!0}),b.D.push(Sz(k)))}}}function Sz(b){for(var c=b.length,d=[0,0],e=0;e<c;e++){var f=b[e].W().Y();rd(d,f)}c=1/c;d[0]*=c;d[1]*=c;d=new sn(new D(d));d.set(\"features\",b);return d};function Tz(b){kn.call(this,{projection:b.projection,resolutions:b.resolutions});this.ga=void 0!==b.crossOrigin?b.crossOrigin:null;this.l=void 0!==b.displayDpi?b.displayDpi:96;this.i=void 0!==b.params?b.params:{};var c;void 0!==b.url?c=cy(b.url,this.i,ra(this.Fm,this)):c=dy;this.Z=c;this.b=void 0!==b.imageLoadFunction?b.imageLoadFunction:qn;this.pa=void 0!==b.hidpi?b.hidpi:!0;this.ea=void 0!==b.metersPerUnit?b.metersPerUnit:1;this.u=void 0!==b.ratio?b.ratio:1;this.xa=void 0!==b.useOverlay?b.useOverlay:\n!1;this.g=null;this.T=0}y(Tz,kn);l=Tz.prototype;l.Em=function(){return this.i};l.pd=function(b,c,d,e){c=ln(this,c);d=this.pa?d:1;var f=this.g;if(f&&this.T==this.c&&f.$()==c&&f.b==d&&Xd(f.J(),b))return f;1!=this.u&&(b=b.slice(),qe(b,this.u));e=this.Z(b,[ke(b)/c*d,le(b)/c*d],e);void 0!==e?(f=new $x(b,c,d,this.j,e,this.ga,this.b),C(f,\"change\",this.D,!1,this)):f=null;this.g=f;this.T=this.c;return f};l.Dm=function(){return this.b};l.Hm=function(b){Xb(this.i,b);this.s()};\nl.Fm=function(b,c,d,e){var f=me(d),g=this.ea,h=ke(d);d=le(d);var k=e[0],m=e[1],n=.0254/this.l;e={OPERATION:this.xa?\"GETDYNAMICMAPOVERLAYIMAGE\":\"GETMAPIMAGE\",VERSION:\"2.0.0\",LOCALE:\"en\",CLIENTAGENT:\"ol.source.ImageMapGuide source\",CLIP:\"1\",SETDISPLAYDPI:this.l,SETDISPLAYWIDTH:Math.round(e[0]),SETDISPLAYHEIGHT:Math.round(e[1]),SETVIEWSCALE:m*h>k*d?h*g/(k*n):d*g/(m*n),SETVIEWCENTERX:f[0],SETVIEWCENTERY:f[1]};Xb(e,c);return lo(no([b],e))};l.Gm=function(b){this.g=null;this.b=b;this.s()};function Uz(b){var c=void 0!==b.attributions?b.attributions:null,d=b.imageExtent,e,f;void 0!==b.imageSize&&(e=le(d)/b.imageSize[1],f=[e]);var g=void 0!==b.crossOrigin?b.crossOrigin:null,h=void 0!==b.imageLoadFunction?b.imageLoadFunction:qn;kn.call(this,{attributions:c,logo:b.logo,projection:Fe(b.projection),resolutions:f});this.b=new $x(d,e,1,c,b.url,g,h);C(this.b,\"change\",this.D,!1,this)}y(Uz,kn);Uz.prototype.pd=function(b){return pe(b,this.b.J())?this.b:null};function Vz(b){b=b||{};kn.call(this,{attributions:b.attributions,logo:b.logo,projection:b.projection,resolutions:b.resolutions});this.pa=void 0!==b.crossOrigin?b.crossOrigin:null;this.i=b.url;this.T=void 0!==b.imageLoadFunction?b.imageLoadFunction:qn;this.g=b.params;this.u=!0;Wz(this);this.ga=b.serverType;this.xa=void 0!==b.hidpi?b.hidpi:!0;this.b=null;this.Z=[0,0];this.ea=0;this.l=void 0!==b.ratio?b.ratio:1.5}y(Vz,kn);var Xz=[101,101];l=Vz.prototype;\nl.Nm=function(b,c,d,e){if(void 0!==this.i){var f=ne(b,c,0,Xz),g={SERVICE:\"WMS\",VERSION:\"1.3.0\",REQUEST:\"GetFeatureInfo\",FORMAT:\"image/png\",TRANSPARENT:!0,QUERY_LAYERS:this.g.LAYERS};Xb(g,this.g,e);e=Math.floor((f[3]-b[1])/c);g[this.u?\"I\":\"X\"]=Math.floor((b[0]-f[0])/c);g[this.u?\"J\":\"Y\"]=e;return Yz(this,f,Xz,1,Fe(d),g)}};l.Pm=function(){return this.g};\nl.pd=function(b,c,d,e){if(void 0===this.i)return null;c=ln(this,c);1==d||this.xa&&void 0!==this.ga||(d=1);b=b.slice();var f=(b[0]+b[2])/2,g=(b[1]+b[3])/2,h=c/d,k=ke(b)/h,h=le(b)/h,m=this.b;if(m&&this.ea==this.c&&m.$()==c&&m.b==d&&Xd(m.J(),b))return m;if(1!=this.l){var m=this.l*ke(b)/2,n=this.l*le(b)/2;b[0]=f-m;b[1]=g-n;b[2]=f+m;b[3]=g+n}f={SERVICE:\"WMS\",VERSION:\"1.3.0\",REQUEST:\"GetMap\",FORMAT:\"image/png\",TRANSPARENT:!0};Xb(f,this.g);this.Z[0]=Math.ceil(k*this.l);this.Z[1]=Math.ceil(h*this.l);e=Yz(this,\nb,this.Z,d,e,f);this.b=new $x(b,c,d,this.j,e,this.pa,this.T);this.ea=this.c;C(this.b,\"change\",this.D,!1,this);return this.b};l.Om=function(){return this.T};\nfunction Yz(b,c,d,e,f,g){g[b.u?\"CRS\":\"SRS\"]=f.a;\"STYLES\"in b.g||(g.STYLES=new String(\"\"));if(1!=e)switch(b.ga){case \"geoserver\":e=90*e+.5|0;g.FORMAT_OPTIONS=\"FORMAT_OPTIONS\"in g?g.FORMAT_OPTIONS+(\";dpi:\"+e):\"dpi:\"+e;break;case \"mapserver\":g.MAP_RESOLUTION=90*e;break;case \"carmentaserver\":case \"qgis\":g.DPI=90*e}g.WIDTH=d[0];g.HEIGHT=d[1];d=f.g;var h;b.u&&\"ne\"==d.substr(0,2)?h=[c[1],c[0],c[3],c[2]]:h=c;g.BBOX=h.join(\",\");return lo(no([b.i],g))}l.Qm=function(){return this.i};\nl.Rm=function(b){this.b=null;this.T=b;this.s()};l.Sm=function(b){b!=this.i&&(this.i=b,this.b=null,this.s())};l.Tm=function(b){Xb(this.g,b);Wz(this);this.b=null;this.s()};function Wz(b){b.u=0<=Pa(Sb(b.g,\"VERSION\",\"1.3.0\"),\"1.3\")};function Zz(b){var c=void 0!==b.projection?b.projection:\"EPSG:3857\",d=void 0!==b.tileGrid?b.tileGrid:Oh({extent:Mh(c),maxZoom:b.maxZoom,tileSize:b.tileSize});Y.call(this,{attributions:b.attributions,crossOrigin:b.crossOrigin,logo:b.logo,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}y(Zz,Y);function $z(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[aA];Zz.call(this,{attributions:c,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:\"anonymous\",opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:b.wrapX})}y($z,Zz);var aA=new mg({html:'&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function bA(b){b=b||{};var c=cA[b.layer];this.g=b.layer;Zz.call(this,{attributions:c.attributions,crossOrigin:\"anonymous\",logo:\"https://developer.mapquest.com/content/osm/mq_logo.png\",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:!0,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/\"+this.g+\"/{z}/{x}/{y}.jpg\"})}y(bA,Zz);\nvar dA=new mg({html:'Tiles Courtesy of <a href=\"http://www.mapquest.com/\">MapQuest</a>'}),cA={osm:{maxZoom:19,attributions:[dA,aA]},sat:{maxZoom:18,attributions:[dA,new mg({html:\"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency\"})]},hyb:{maxZoom:18,attributions:[dA,aA]}};bA.prototype.l=function(){return this.g};(function(){var b={},c={ka:b};(function(d){if(\"object\"===typeof b&&\"undefined\"!==typeof c)c.ka=d();else{var e;\"undefined\"!==typeof window?e=window:\"undefined\"!==typeof global?e=global:\"undefined\"!==typeof self?e=self:e=this;e.Bp=d()}})(function(){return function e(b,c,h){function k(n,q){if(!c[n]){if(!b[n]){var r=\"function\"==typeof require&&require;if(!q&&r)return r(n,!0);if(m)return m(n,!0);r=Error(\"Cannot find module '\"+n+\"'\");throw r.code=\"MODULE_NOT_FOUND\",r;}r=c[n]={ka:{}};b[n][0].call(r.ka,function(c){var e=\nb[n][1][c];return k(e?e:c)},r,r.ka,e,b,c,h)}return c[n].ka}for(var m=\"function\"==typeof require&&require,n=0;n<h.length;n++)k(h[n]);return k}({1:[function(b,c,g){b=b(\"./processor\");g.Ni=b},{\"./processor\":2}],2:[function(b,c){function g(b){return function(c){var e=c.buffers,f=c.meta,g=c.width,h=c.height,k=e.length,m=e[0].byteLength,A;if(c.imageOps){m=Array(k);for(A=0;A<k;++A)m[A]=new ImageData(new Uint8ClampedArray(e[A]),g,h);g=b(m,f).data}else{g=new Uint8ClampedArray(m);h=Array(k);c=Array(k);for(A=\n0;A<k;++A)h[A]=new Uint8ClampedArray(e[A]),c[A]=[0,0,0,0];for(e=0;e<m;e+=4){for(A=0;A<k;++A){var v=h[A];c[A][0]=v[e];c[A][1]=v[e+1];c[A][2]=v[e+2];c[A][3]=v[e+3]}A=b(c,f);g[e]=A[0];g[e+1]=A[1];g[e+2]=A[2];g[e+3]=A[3]}}return g.buffer}}function h(b,c){var e=Object.keys(b.lib||{}).map(function(c){return\"var \"+c+\" = \"+b.lib[c].toString()+\";\"}).concat([\"var __minion__ = (\"+g.toString()+\")(\",b.operation.toString(),\");\",'self.addEventListener(\"message\", function(__event__) {',\"var buffer = __minion__(__event__.data);\",\n\"self.postMessage({buffer: buffer, meta: __event__.data.meta}, [buffer]);\",\"});\"]),e=URL.createObjectURL(new Blob(e,{type:\"text/javascript\"})),e=new Worker(e);e.addEventListener(\"message\",c);return e}function k(b,c){var e=g(b.operation);return{postMessage:function(b){setTimeout(function(){c({data:{buffer:e(b),pe:b.pe}})},0)}}}function m(b){this.Ze=!!b.Zk;var c;0===b.threads?c=0:this.Ze?c=1:c=b.threads||1;var e=[];if(c)for(var f=0;f<c;++f)e[f]=h(b,this.hg.bind(this,f));else e[0]=k(b,this.hg.bind(this,\n0));this.Sd=e;this.Yc=[];this.bj=b.co||Infinity;this.Qd=0;this.Cc={};this.$e=null}m.prototype.bo=function(b,c,e){this.Zi({qc:b,pe:c,$c:e});this.eg()};m.prototype.Zi=function(b){for(this.Yc.push(b);this.Yc.length>this.bj;)this.Yc.shift().$c(null,null)};m.prototype.eg=function(){if(0===this.Qd&&0<this.Yc.length){var b=this.$e=this.Yc.shift(),c=b.qc[0].width,e=b.qc[0].height,f=b.qc.map(function(b){return b.data.buffer}),g=this.Sd.length;this.Qd=g;if(1===g)this.Sd[0].postMessage({buffers:f,meta:b.pe,\nimageOps:this.Ze,width:c,height:e},f);else for(var h=4*Math.ceil(b.qc[0].data.length/4/g),k=0;k<g;++k){for(var m=k*h,A=[],v=0,O=f.length;v<O;++v)A.push(f[k].slice(m,m+h));this.Sd[k].postMessage({buffers:A,meta:b.pe,imageOps:this.Ze,width:c,height:e},A)}}};m.prototype.hg=function(b,c){this.xp||(this.Cc[b]=c.data,--this.Qd,0===this.Qd&&this.cj())};m.prototype.cj=function(){var b=this.$e,c=this.Sd.length,e,f;if(1===c)e=new Uint8ClampedArray(this.Cc[0].buffer),f=this.Cc[0].meta;else{var g=b.qc[0].data.length;\ne=new Uint8ClampedArray(g);f=Array(g);for(var g=4*Math.ceil(g/4/c),h=0;h<c;++h){var k=h*g;e.set(new Uint8ClampedArray(this.Cc[h].buffer),k);f[h]=this.Cc[h].meta}}this.$e=null;this.Cc={};b.$c(null,new ImageData(e,b.qc[0].width,b.qc[0].height),f);this.eg()};c.ka=m},{}]},{},[1])(1)});Ap=c.ka})();function eA(b){this.T=null;this.xa=void 0!==b.operationType?b.operationType:\"pixel\";this.fb=void 0!==b.threads?b.threads:1;this.b=fA(b.sources);for(var c=0,d=this.b.length;c<d;++c)C(this.b[c],\"change\",this.s,!1,this);this.g=Pi();this.ga=new Kk(function(){return 1},ra(this.s,this));for(var c=gA(this.b),d={},e=0,f=c.length;e<f;++e)d[w(c[e].layer)]=c[e];this.i=this.l=null;this.ea={animate:!1,attributions:{},coordinateToPixelMatrix:Dd(),extent:null,focus:null,index:0,layerStates:d,layerStatesArray:c,\nlogos:{},pixelRatio:1,pixelToCoordinateMatrix:Dd(),postRenderFunctions:[],size:[0,0],skippedFeatureUids:{},tileQueue:this.ga,time:Date.now(),usedTiles:{},viewState:{rotation:0},viewHints:[],wantedTiles:{}};kn.call(this,{});void 0!==b.operation&&this.u(b.operation,b.lib)}y(eA,kn);eA.prototype.u=function(b,c){this.T=new Ap.Ni({operation:b,Zk:\"image\"===this.xa,co:1,lib:c,threads:this.fb});this.s()};function hA(b,c,d){var e=b.l;return!e||b.c!==e.Ho||d!==e.resolution||!be(c,e.extent)}\neA.prototype.C=function(b,c,d,e){d=!0;for(var f,g=0,h=this.b.length;g<h;++g)if(f=this.b[g].a.fa(),\"ready\"!==f.A){d=!1;break}if(!d)return null;if(!hA(this,b,c))return this.i;d=this.g.canvas;f=Math.round(ke(b)/c);g=Math.round(le(b)/c);if(f!==d.width||g!==d.height)d.width=f,d.height=g;f=Ub(this.ea);f.viewState=Ub(f.viewState);var g=me(b),h=Math.round(ke(b)/c),k=Math.round(le(b)/c);f.extent=b;f.focus=me(b);f.size[0]=h;f.size[1]=k;h=f.viewState;h.center=g;h.projection=e;h.resolution=c;this.i=e=new $m(b,\nc,1,this.j,d,this.Z.bind(this,f));this.l={extent:b,resolution:c,Ho:this.c};return e};\neA.prototype.Z=function(b,c){for(var d=this.b.length,e=Array(d),f=0;f<d;++f){var g;var h=this.b[f],k=b;h.zd(k,b.layerStatesArray[f]);if(g=h.yd()){var h=h.mf(),m=Math.round(h[12]),n=Math.round(h[13]),p=k.size[0],k=k.size[1];if(g instanceof Image){if(iA){var q=iA.canvas;q.width!==p||q.height!==k?iA=Pi(p,k):iA.clearRect(0,0,p,k)}else iA=Pi(p,k);iA.drawImage(g,m,n,Math.round(g.width*h[0]),Math.round(g.height*h[5]));g=iA.getImageData(0,0,p,k)}else g=g.getContext(\"2d\").getImageData(-m,-n,p,k)}else g=null;\nif(g)e[f]=g;else return}d={};this.o(new jA(kA,b,d));this.T.bo(e,d,this.pa.bind(this,b,c));Lk(b.tileQueue,16,16)};eA.prototype.pa=function(b,c,d,e,f){d?c(d):e&&(this.o(new jA(lA,b,f)),hA(this,b.extent,b.viewState.resolution/b.pixelRatio)||this.g.putImageData(e,0,0),c(null))};var iA=null;function gA(b){return b.map(function(b){return bk(b.a)})}\nfunction fA(b){for(var c=b.length,d=Array(c),e=0;e<c;++e){var f=e,g=b[e],h=null;g instanceof Ph?(g=new F({source:g}),h=new Rp(g)):g instanceof kn&&(g=new Sl({source:g}),h=new Qp(g));d[f]=h}return d}function jA(b,c,d){vc.call(this,b);this.extent=c.extent;this.resolution=c.viewState.resolution/c.pixelRatio;this.data=d}y(jA,vc);var kA=\"beforeoperations\",lA=\"afteroperations\";var mA={terrain:{nb:\"jpg\",opaque:!0},\"terrain-background\":{nb:\"jpg\",opaque:!0},\"terrain-labels\":{nb:\"png\",opaque:!1},\"terrain-lines\":{nb:\"png\",opaque:!1},\"toner-background\":{nb:\"png\",opaque:!0},toner:{nb:\"png\",opaque:!0},\"toner-hybrid\":{nb:\"png\",opaque:!1},\"toner-labels\":{nb:\"png\",opaque:!1},\"toner-lines\":{nb:\"png\",opaque:!1},\"toner-lite\":{nb:\"png\",opaque:!0},watercolor:{nb:\"jpg\",opaque:!0}},nA={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:3,maxZoom:16}};\nfunction oA(b){var c=b.layer.indexOf(\"-\"),c=-1==c?b.layer:b.layer.slice(0,c),d=mA[b.layer];Zz.call(this,{attributions:pA,crossOrigin:\"anonymous\",maxZoom:nA[c].maxZoom,opaque:d.opaque,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://stamen-tiles-{a-d}.a.ssl.fastly.net/\"+b.layer+\"/{z}/{x}/{y}.\"+d.nb})}y(oA,Zz);\nvar pA=[new mg({html:'Map tiles by <a href=\"http://stamen.com/\">Stamen Design</a>, under <a href=\"http://creativecommons.org/licenses/by/3.0/\">CC BY 3.0</a>.'}),aA];function qA(b){b=b||{};var c=void 0!==b.params?b.params:{};Y.call(this,{attributions:b.attributions,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,tileUrlFunction:ra(this.G,this),url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.g=c;this.l=Od()}y(qA,Y);qA.prototype.D=function(){return this.g};\nqA.prototype.Pb=function(b,c,d){b=qA.da.Pb.call(this,b,c,d);return 1==c?b:nd(b,c,this.b)};\nqA.prototype.G=function(b,c,d){var e=this.tileGrid;e||(e=this.hb(d));if(!(e.a.length<=b[0])){var f=e.Aa(b,this.l),g=od(e.Ha(b[0]),this.b);1!=c&&(g=nd(g,c,this.b));e={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};Xb(e,this.g);var h=this.urls;h?(d=d.a.split(\":\").pop(),e.SIZE=g[0]+\",\"+g[1],e.BBOX=f.join(\",\"),e.BBOXSR=d,e.IMAGESR=d,e.DPI=Math.round(90*c),b=1==h.length?h[0]:h[pd((b[1]<<b[0])+b[2],h.length)],Aa(b,\"/\")||(b+=\"/\"),Aa(b,\"MapServer/\")?b+=\"export\":Aa(b,\"ImageServer/\")&&(b+=\"exportImage\"),b=lo(no([b],\ne))):b=void 0;return b}};qA.prototype.Z=function(b){Xb(this.g,b);this.s()};function rA(b,c,d){wh.call(this,b,2);this.g=c;this.b=d;this.c={}}y(rA,wh);rA.prototype.Sa=function(b){b=void 0!==b?w(b):-1;if(b in this.c)return this.c[b];var c=this.g,d=Pi(c[0],c[1]);d.strokeStyle=\"black\";d.strokeRect(.5,.5,c[0]+.5,c[1]+.5);d.fillStyle=\"black\";d.textAlign=\"center\";d.textBaseline=\"middle\";d.font=\"24px sans-serif\";d.fillText(this.b,c[0]/2,c[1]/2);return this.c[b]=d.canvas};\nfunction sA(b){Ph.call(this,{opaque:!1,projection:b.projection,tileGrid:b.tileGrid,wrapX:void 0!==b.wrapX?b.wrapX:!0})}y(sA,Ph);sA.prototype.Ob=function(b,c,d){var e=this.gb(b,c,d);if(sh(this.a,e))return this.a.get(e);var f=od(this.tileGrid.Ha(b));b=[b,c,d];c=(c=Rh(this,b))?fg(Rh(this,c)):\"\";f=new rA(b,f,c);this.a.set(e,f);return f};function tA(b){Y.call(this,{attributions:b.attributions,crossOrigin:b.crossOrigin,projection:Fe(\"EPSG:3857\"),reprojectionErrorThreshold:b.reprojectionErrorThreshold,state:\"loading\",tileLoadFunction:b.tileLoadFunction,wrapX:void 0!==b.wrapX?b.wrapX:!0});Iz(new Gz(b.url),void 0,ra(this.l,this),ra(this.g,this))}y(tA,Y);\ntA.prototype.l=function(b){var c=Fe(\"EPSG:4326\"),d=this.f,e;void 0!==b.bounds&&(e=re(b.bounds,Je(c,d)));var f=b.minzoom||0,g=b.maxzoom||22;this.tileGrid=d=Oh({extent:Mh(d),maxZoom:g,minZoom:f});this.tileUrlFunction=Vp(b.tiles,d);if(void 0!==b.attribution&&!this.j){c=void 0!==e?e:c.J();e={};for(var h;f<=g;++f)h=f.toString(),e[h]=[Fh(d,c,f)];this.na([new mg({html:b.attribution,tileRanges:e})])}Ah(this,\"ready\")};tA.prototype.g=function(){Ah(this,\"error\")};function uA(b){Ph.call(this,{projection:Fe(\"EPSG:3857\"),state:\"loading\"});this.l=void 0!==b.preemptive?b.preemptive:!0;this.g=Xp;this.i=void 0;Iz(new Gz(b.url),void 0,ra(this.Vm,this))}y(uA,Ph);l=uA.prototype;l.ik=function(){return this.i};l.vj=function(b,c,d,e,f){this.tileGrid?(c=this.tileGrid.ee(b,c),vA(this.Ob(c[0],c[1],c[2],1,this.f),b,d,e,f)):!0===f?ni(function(){d.call(e,null)}):d.call(e,null)};\nl.Vm=function(b){var c=Fe(\"EPSG:4326\"),d=this.f,e;void 0!==b.bounds&&(e=re(b.bounds,Je(c,d)));var f=b.minzoom||0,g=b.maxzoom||22;this.tileGrid=d=Oh({extent:Mh(d),maxZoom:g,minZoom:f});this.i=b.template;var h=b.grids;if(h){this.g=Vp(h,d);if(void 0!==b.attribution){c=void 0!==e?e:c.J();for(e={};f<=g;++f)h=f.toString(),e[h]=[Fh(d,c,f)];this.na([new mg({html:b.attribution,tileRanges:e})])}Ah(this,\"ready\")}else Ah(this,\"error\")};\nl.Ob=function(b,c,d,e,f){var g=this.gb(b,c,d);if(sh(this.a,g))return this.a.get(g);b=[b,c,d];c=Rh(this,b,f);e=this.g(c,e,f);e=new wA(b,void 0!==e?0:4,void 0!==e?e:\"\",this.tileGrid.Aa(b),this.l);this.a.set(g,e);return e};l.Xf=function(b,c,d){b=this.gb(b,c,d);sh(this.a,b)&&this.a.get(b)};function wA(b,c,d,e,f){wh.call(this,b,c);this.i=d;this.c=e;this.l=f;this.j=this.g=this.b=null}y(wA,wh);l=wA.prototype;l.Sa=function(){return null};\nfunction xA(b,c){if(!b.b||!b.g||!b.j)return null;var d=b.b[Math.floor((1-(c[1]-b.c[1])/(b.c[3]-b.c[1]))*b.b.length)];if(!ia(d))return null;d=d.charCodeAt(Math.floor((c[0]-b.c[0])/(b.c[2]-b.c[0])*d.length));93<=d&&d--;35<=d&&d--;d-=32;return d in b.g?b.j[b.g[d]]:null}function vA(b,c,d,e,f){0==b.state&&!0===f?(Xc(b,\"change\",function(){d.call(e,xA(this,c))},!1,b),yA(b)):!0===f?ni(function(){d.call(e,xA(this,c))},b):d.call(e,xA(b,c))}l.tb=function(){return this.i};l.xk=function(){this.state=3;xh(this)};\nl.Um=function(b){this.b=b.grid;this.g=b.keys;this.j=b.data;this.state=4;xh(this)};function yA(b){0==b.state&&(b.state=1,Iz(new Gz(b.i),void 0,ra(b.Um,b),ra(b.xk,b)))}l.load=function(){this.l&&yA(this)};function zA(b){b=b||{};var c=void 0!==b.params?b.params:{};Y.call(this,{attributions:b.attributions,crossOrigin:b.crossOrigin,logo:b.logo,opaque:!Sb(c,\"TRANSPARENT\",!0),projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,tileUrlFunction:ra(this.Ym,this),url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.D=void 0!==b.gutter?b.gutter:0;this.g=c;this.l=!0;this.G=b.serverType;this.ea=void 0!==b.hidpi?b.hidpi:\n!0;this.Z=\"\";AA(this);this.ga=Od();BA(this)}y(zA,Y);l=zA.prototype;\nl.Wm=function(b,c,d,e){d=Fe(d);var f=this.tileGrid;f||(f=this.hb(d));c=f.ee(b,c);if(!(f.a.length<=c[0])){var g=f.$(c[0]),h=f.Aa(c,this.ga),f=od(f.Ha(c[0]),this.b),k=this.D;0!==k&&(f=md(f,k,this.b),h=Sd(h,g*k,h));k={SERVICE:\"WMS\",VERSION:\"1.3.0\",REQUEST:\"GetFeatureInfo\",FORMAT:\"image/png\",TRANSPARENT:!0,QUERY_LAYERS:this.g.LAYERS};Xb(k,this.g,e);e=Math.floor((h[3]-b[1])/g);k[this.l?\"I\":\"X\"]=Math.floor((b[0]-h[0])/g);k[this.l?\"J\":\"Y\"]=e;return CA(this,c,f,h,1,d,k)}};l.$d=function(){return this.D};\nl.gb=function(b,c,d){return this.Z+zA.da.gb.call(this,b,c,d)};l.Xm=function(){return this.g};\nfunction CA(b,c,d,e,f,g,h){var k=b.urls;if(k){h.WIDTH=d[0];h.HEIGHT=d[1];h[b.l?\"CRS\":\"SRS\"]=g.a;\"STYLES\"in b.g||(h.STYLES=new String(\"\"));if(1!=f)switch(b.G){case \"geoserver\":d=90*f+.5|0;h.FORMAT_OPTIONS=\"FORMAT_OPTIONS\"in h?h.FORMAT_OPTIONS+(\";dpi:\"+d):\"dpi:\"+d;break;case \"mapserver\":h.MAP_RESOLUTION=90*f;break;case \"carmentaserver\":case \"qgis\":h.DPI=90*f}g=g.g;b.l&&\"ne\"==g.substr(0,2)&&(b=e[0],e[0]=e[1],e[1]=b,b=e[2],e[2]=e[3],e[3]=b);h.BBOX=e.join(\",\");return lo(no([1==k.length?k[0]:k[pd((c[1]<<\nc[0])+c[2],k.length)]],h))}}l.Pb=function(b,c,d){b=zA.da.Pb.call(this,b,c,d);return 1!=c&&this.ea&&void 0!==this.G?nd(b,c,this.b):b};function AA(b){var c=0,d=[];if(b.urls){var e,f;e=0;for(f=b.urls.length;e<f;++e)d[c++]=b.urls[e]}for(var g in b.g)d[c++]=g+\"-\"+b.g[g];b.Z=d.join(\"#\")}\nl.Ym=function(b,c,d){var e=this.tileGrid;e||(e=this.hb(d));if(!(e.a.length<=b[0])){1==c||this.ea&&void 0!==this.G||(c=1);var f=e.$(b[0]),g=e.Aa(b,this.ga),e=od(e.Ha(b[0]),this.b),h=this.D;0!==h&&(e=md(e,h,this.b),g=Sd(g,f*h,g));1!=c&&(e=nd(e,c,this.b));f={SERVICE:\"WMS\",VERSION:\"1.3.0\",REQUEST:\"GetMap\",FORMAT:\"image/png\",TRANSPARENT:!0};Xb(f,this.g);return CA(this,b,e,g,c,d,f)}};l.Zm=function(b){Xb(this.g,b);AA(this);BA(this);this.s()};function BA(b){b.l=0<=Pa(Sb(b.g,\"VERSION\",\"1.3.0\"),\"1.3\")};function DA(b){this.i=b.matrixIds;Bh.call(this,{extent:b.extent,origin:b.origin,origins:b.origins,resolutions:b.resolutions,tileSize:b.tileSize,tileSizes:b.tileSizes,sizes:b.sizes})}y(DA,Bh);DA.prototype.B=function(){return this.i};\nfunction EA(b,c){var d=[],e=[],f=[],g=[],h=[],k;k=Fe(b.SupportedCRS.replace(/urn:ogc:def:crs:(\\w+):(.*:)?(\\w+)$/,\"$1:$3\"));var m=k.Jc(),n=\"ne\"==k.g.substr(0,2);ob(b.TileMatrix,function(b,c){return c.ScaleDenominator-b.ScaleDenominator});b.TileMatrix.forEach(function(b){e.push(b.Identifier);var c=2.8E-4*b.ScaleDenominator/m,k=b.TileWidth,t=b.TileHeight;n?f.push([b.TopLeftCorner[1],b.TopLeftCorner[0]]):f.push(b.TopLeftCorner);d.push(c);g.push(k==t?k:[k,t]);h.push([b.MatrixWidth,-b.MatrixHeight])});\nreturn new DA({extent:c,origins:f,resolutions:d,matrixIds:e,tileSizes:g,sizes:h})};function Z(b){function c(b){b=\"KVP\"==e?lo(no([b],g)):b.replace(/\\{(\\w+?)\\}/g,function(b,c){return c.toLowerCase()in g?g[c.toLowerCase()]:b});return function(c){if(c){var d={TileMatrix:f.i[c[0]],TileCol:c[1],TileRow:-c[2]-1};Xb(d,h);c=b;return c=\"KVP\"==e?lo(no([c],d)):c.replace(/\\{(\\w+?)\\}/g,function(b,c){return d[c]})}}}this.ga=void 0!==b.version?b.version:\"1.0.0\";this.G=void 0!==b.format?b.format:\"image/jpeg\";this.g=void 0!==b.dimensions?b.dimensions:{};this.D=\"\";FA(this);this.Z=b.layer;this.l=b.matrixSet;\nthis.ea=b.style;var d=b.urls;void 0===d&&void 0!==b.url&&(d=Yp(b.url));var e=this.va=void 0!==b.requestEncoding?b.requestEncoding:\"KVP\",f=b.tileGrid,g={layer:this.Z,style:this.ea,tilematrixset:this.l};\"KVP\"==e&&Xb(g,{Service:\"WMTS\",Request:\"GetTile\",Version:this.ga,Format:this.G});var h=this.g,k=d&&0<d.length?Wp(d.map(c)):Xp;Y.call(this,{attributions:b.attributions,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileClass:b.tileClass,\ntileGrid:f,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:k,urls:d,wrapX:void 0!==b.wrapX?b.wrapX:!1})}y(Z,Y);l=Z.prototype;l.Hj=function(){return this.g};l.$m=function(){return this.G};l.gb=function(b,c,d){return this.D+Z.da.gb.call(this,b,c,d)};l.an=function(){return this.Z};l.Uj=function(){return this.l};l.gk=function(){return this.va};l.bn=function(){return this.ea};l.mk=function(){return this.ga};\nfunction FA(b){var c=0,d=[],e;for(e in b.g)d[c++]=e+\"-\"+b.g[e];b.D=d.join(\"/\")}l.cp=function(b){Xb(this.g,b);FA(this);this.s()};function GA(b){b=b||{};var c=b.size,d=c[0],e=c[1],f=[],g=256;switch(void 0!==b.tierSizeCalculation?b.tierSizeCalculation:\"default\"){case \"default\":for(;d>g||e>g;)f.push([Math.ceil(d/g),Math.ceil(e/g)]),g+=g;break;case \"truncated\":for(;d>g||e>g;)f.push([Math.ceil(d/g),Math.ceil(e/g)]),d>>=1,e>>=1}f.push([1,1]);f.reverse();for(var g=[1],h=[0],e=1,d=f.length;e<d;e++)g.push(1<<e),h.push(f[e-1][0]*f[e-1][1]+h[e-1]);g.reverse();var c=[0,-c[1],c[0],0],c=new Bh({extent:c,origin:he(c),resolutions:g}),k=b.url;\nY.call(this,{attributions:b.attributions,crossOrigin:b.crossOrigin,logo:b.logo,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileClass:HA,tileGrid:c,tileUrlFunction:function(b){if(b){var c=b[0],d=b[1];b=-b[2]-1;return k+\"TileGroup\"+((d+b*f[c][0]+h[c])/256|0)+\"/\"+c+\"-\"+d+\"-\"+b+\".jpg\"}}})}y(GA,Y);function HA(b,c,d,e,f){ay.call(this,b,c,d,e,f);this.g={}}y(HA,ay);\nHA.prototype.Sa=function(b){var c=void 0!==b?w(b).toString():\"\";if(c in this.g)return this.g[c];b=HA.da.Sa.call(this,b);if(2==this.state){if(256==b.width&&256==b.height)return this.g[c]=b;var d=Pi(256,256);d.drawImage(b,0,0);return this.g[c]=d.canvas}return b};function IA(b){b=b||{};this.c=void 0!==b.initialSize?b.initialSize:256;this.b=void 0!==b.maxSize?b.maxSize:void 0!==ua?ua:2048;this.a=void 0!==b.space?b.space:1;this.g=[new JA(this.c,this.a)];this.f=this.c;this.j=[new JA(this.f,this.a)]}IA.prototype.add=function(b,c,d,e,f,g){if(c+this.a>this.b||d+this.a>this.b)return null;e=KA(this,!1,b,c,d,e,g);if(!e)return null;b=KA(this,!0,b,c,d,void 0!==f?f:ve,g);return{offsetX:e.offsetX,offsetY:e.offsetY,image:e.image,Mg:b.image}};\nfunction KA(b,c,d,e,f,g,h){var k=c?b.j:b.g,m,n,p;n=0;for(p=k.length;n<p;++n){m=k[n];if(m=m.add(d,e,f,g,h))return m;m||n!==p-1||(c?(m=Math.min(2*b.f,b.b),b.f=m):(m=Math.min(2*b.c,b.b),b.c=m),m=new JA(m,b.a),k.push(m),++p)}}function JA(b,c){this.a=c;this.c=[{x:0,y:0,width:b,height:b}];this.f={};this.b=Kg(\"CANVAS\");this.b.width=b;this.b.height=b;this.g=this.b.getContext(\"2d\")}JA.prototype.get=function(b){return Sb(this.f,b,null)};\nJA.prototype.add=function(b,c,d,e,f){var g,h,k;h=0;for(k=this.c.length;h<k;++h)if(g=this.c[h],g.width>=c+this.a&&g.height>=d+this.a)return k={offsetX:g.x+this.a,offsetY:g.y+this.a,image:this.b},this.f[b]=k,e.call(f,this.g,g.x+this.a,g.y+this.a),b=h,c=c+this.a,d=d+this.a,f=e=void 0,g.width-c>g.height-d?(e={x:g.x+c,y:g.y,width:g.width-c,height:g.height},f={x:g.x,y:g.y+d,width:c,height:g.height-d},LA(this,b,e,f)):(e={x:g.x+c,y:g.y,width:g.width-c,height:d},f={x:g.x,y:g.y+d,width:g.width,height:g.height-\nd},LA(this,b,e,f)),k;return null};function LA(b,c,d,e){c=[c,1];0<d.width&&0<d.height&&c.push(d);0<e.width&&0<e.height&&c.push(e);b.c.splice.apply(b.c,c)};function MA(b){this.C=this.f=this.g=null;this.B=void 0!==b.fill?b.fill:null;this.S=[0,0];this.a=b.points;this.b=void 0!==b.radius?b.radius:b.radius1;this.j=void 0!==b.radius2?b.radius2:this.b;this.l=void 0!==b.angle?b.angle:0;this.c=void 0!==b.stroke?b.stroke:null;this.oa=this.U=this.ia=null;var c=b.atlasManager,d=\"\",e=\"\",f=0,g=null,h,k=0;this.c&&(h=vg(this.c.a),k=this.c.c,void 0===k&&(k=1),g=this.c.b,Yi||(g=null),e=this.c.g,void 0===e&&(e=\"round\"),d=this.c.f,void 0===d&&(d=\"round\"),f=this.c.j,void 0===\nf&&(f=10));var m=2*(this.b+k)+1,d={strokeStyle:h,Hd:k,size:m,lineCap:d,lineDash:g,lineJoin:e,miterLimit:f};if(void 0===c){this.f=Kg(\"CANVAS\");this.f.height=m;this.f.width=m;var c=m=this.f.width,n=this.f.getContext(\"2d\");this.uh(d,n,0,0);this.B?this.C=this.f:(n=this.C=Kg(\"CANVAS\"),n.height=d.size,n.width=d.size,n=n.getContext(\"2d\"),this.th(d,n,0,0))}else m=Math.round(m),(e=!this.B)&&(n=ra(this.th,this,d)),f=this.Ib(),n=c.add(f,m,m,ra(this.uh,this,d),n),this.f=n.image,this.S=[n.offsetX,n.offsetY],c=\nn.image.width,this.C=e?n.Mg:this.f;this.ia=[m/2,m/2];this.U=[m,m];this.oa=[c,c];vk.call(this,{opacity:1,rotateWithView:!1,rotation:void 0!==b.rotation?b.rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}y(MA,vk);l=MA.prototype;l.Xb=function(){return this.ia};l.gn=function(){return this.l};l.hn=function(){return this.B};l.ze=function(){return this.C};l.fc=function(){return this.f};l.qd=function(){return this.oa};l.Bd=function(){return 2};l.Ca=function(){return this.S};l.jn=function(){return this.a};\nl.kn=function(){return this.b};l.fk=function(){return this.j};l.Bb=function(){return this.U};l.ln=function(){return this.c};l.sf=wa;l.load=wa;l.Wf=wa;\nl.uh=function(b,c,d,e){var f;c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();this.j!==this.b&&(this.a*=2);for(d=0;d<=this.a;d++)e=2*d*Math.PI/this.a-Math.PI/2+this.l,f=0===d%2?this.b:this.j,c.lineTo(b.size/2+f*Math.cos(e),b.size/2+f*Math.sin(e));this.B&&(c.fillStyle=vg(this.B.a),c.fill());this.c&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Hd,b.lineDash&&c.setLineDash(b.lineDash),c.lineCap=b.lineCap,c.lineJoin=b.lineJoin,c.miterLimit=b.miterLimit,c.stroke());c.closePath()};\nl.th=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();this.j!==this.b&&(this.a*=2);var f;for(d=0;d<=this.a;d++)f=2*d*Math.PI/this.a-Math.PI/2+this.l,e=0===d%2?this.b:this.j,c.lineTo(b.size/2+e*Math.cos(f),b.size/2+e*Math.sin(f));c.fillStyle=Tl;c.fill();this.c&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Hd,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};\nl.Ib=function(){var b=this.c?this.c.Ib():\"-\",c=this.B?this.B.Ib():\"-\";this.g&&b==this.g[1]&&c==this.g[2]&&this.b==this.g[3]&&this.j==this.g[4]&&this.l==this.g[5]&&this.a==this.g[6]||(this.g=[\"r\"+b+c+(void 0!==this.b?this.b.toString():\"-\")+(void 0!==this.j?this.j.toString():\"-\")+(void 0!==this.l?this.l.toString():\"-\")+(void 0!==this.a?this.a.toString():\"-\"),b,c,this.b,this.j,this.l,this.a]);return this.g[0]};u(\"ol.animation.bounce\",function(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:Yf;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=f((h.time-d)/e),m=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*m;h.viewHints[0]+=1;return!0}return!1}},OPENLAYERS);u(\"ol.animation.pan\",Zf,OPENLAYERS);u(\"ol.animation.rotate\",ag,OPENLAYERS);u(\"ol.animation.zoom\",bg,OPENLAYERS);\nu(\"ol.Attribution\",mg,OPENLAYERS);mg.prototype.getHTML=mg.prototype.b;ng.prototype.element=ng.prototype.element;u(\"ol.Collection\",og,OPENLAYERS);og.prototype.clear=og.prototype.clear;og.prototype.extend=og.prototype.tf;og.prototype.forEach=og.prototype.forEach;og.prototype.getArray=og.prototype.sl;og.prototype.item=og.prototype.item;og.prototype.getLength=og.prototype.$b;og.prototype.insertAt=og.prototype.ke;og.prototype.pop=og.prototype.pop;og.prototype.push=og.prototype.push;\nog.prototype.remove=og.prototype.remove;og.prototype.removeAt=og.prototype.Rf;og.prototype.setAt=og.prototype.Jo;u(\"ol.coordinate.add\",rd,OPENLAYERS);u(\"ol.coordinate.createStringXY\",function(b){return function(c){return zd(c,b)}},OPENLAYERS);u(\"ol.coordinate.format\",ud,OPENLAYERS);u(\"ol.coordinate.rotate\",wd,OPENLAYERS);u(\"ol.coordinate.toStringHDMS\",function(b){return b?td(b[1],\"NS\")+\" \"+td(b[0],\"EW\"):\"\"},OPENLAYERS);u(\"ol.coordinate.toStringXY\",zd,OPENLAYERS);u(\"ol.DeviceOrientation\",Pr,OPENLAYERS);\nPr.prototype.getAlpha=Pr.prototype.Bj;Pr.prototype.getBeta=Pr.prototype.Ej;Pr.prototype.getGamma=Pr.prototype.Kj;Pr.prototype.getHeading=Pr.prototype.tl;Pr.prototype.getTracking=Pr.prototype.Tg;Pr.prototype.setTracking=Pr.prototype.uf;u(\"ol.easing.easeIn\",Uf,OPENLAYERS);u(\"ol.easing.easeOut\",Vf,OPENLAYERS);u(\"ol.easing.inAndOut\",Wf,OPENLAYERS);u(\"ol.easing.linear\",Xf,OPENLAYERS);u(\"ol.easing.upAndDown\",Yf,OPENLAYERS);u(\"ol.extent.boundingExtent\",Nd,OPENLAYERS);u(\"ol.extent.buffer\",Sd,OPENLAYERS);\nu(\"ol.extent.containsCoordinate\",Vd,OPENLAYERS);u(\"ol.extent.containsExtent\",Xd,OPENLAYERS);u(\"ol.extent.containsXY\",Wd,OPENLAYERS);u(\"ol.extent.createEmpty\",Od,OPENLAYERS);u(\"ol.extent.equals\",be,OPENLAYERS);u(\"ol.extent.extend\",ce,OPENLAYERS);u(\"ol.extent.getBottomLeft\",ee,OPENLAYERS);u(\"ol.extent.getBottomRight\",fe,OPENLAYERS);u(\"ol.extent.getCenter\",me,OPENLAYERS);u(\"ol.extent.getHeight\",le,OPENLAYERS);u(\"ol.extent.getIntersection\",oe,OPENLAYERS);\nu(\"ol.extent.getSize\",function(b){return[b[2]-b[0],b[3]-b[1]]},OPENLAYERS);u(\"ol.extent.getTopLeft\",he,OPENLAYERS);u(\"ol.extent.getTopRight\",ge,OPENLAYERS);u(\"ol.extent.getWidth\",ke,OPENLAYERS);u(\"ol.extent.intersects\",pe,OPENLAYERS);u(\"ol.extent.isEmpty\",je,OPENLAYERS);u(\"ol.extent.applyTransform\",re,OPENLAYERS);u(\"ol.Feature\",sn,OPENLAYERS);sn.prototype.clone=sn.prototype.clone;sn.prototype.getGeometry=sn.prototype.W;sn.prototype.getId=sn.prototype.Na;sn.prototype.getGeometryName=sn.prototype.Mj;\nsn.prototype.getStyle=sn.prototype.vl;sn.prototype.getStyleFunction=sn.prototype.Qb;sn.prototype.setGeometry=sn.prototype.La;sn.prototype.setStyle=sn.prototype.vf;sn.prototype.setId=sn.prototype.ic;sn.prototype.setGeometryName=sn.prototype.vc;u(\"ol.featureloader.tile\",up,OPENLAYERS);u(\"ol.featureloader.xhr\",vp,OPENLAYERS);u(\"ol.Geolocation\",Px,OPENLAYERS);Px.prototype.getAccuracy=Px.prototype.zj;Px.prototype.getAccuracyGeometry=Px.prototype.Aj;Px.prototype.getAltitude=Px.prototype.Cj;\nPx.prototype.getAltitudeAccuracy=Px.prototype.Dj;Px.prototype.getHeading=Px.prototype.xl;Px.prototype.getPosition=Px.prototype.yl;Px.prototype.getProjection=Px.prototype.Ug;Px.prototype.getSpeed=Px.prototype.hk;Px.prototype.getTracking=Px.prototype.Vg;Px.prototype.getTrackingOptions=Px.prototype.Gg;Px.prototype.setProjection=Px.prototype.Wg;Px.prototype.setTracking=Px.prototype.qe;Px.prototype.setTrackingOptions=Px.prototype.ei;u(\"ol.Graticule\",Vx,OPENLAYERS);Vx.prototype.getMap=Vx.prototype.Bl;\nVx.prototype.getMeridians=Vx.prototype.Vj;Vx.prototype.getParallels=Vx.prototype.bk;Vx.prototype.setMap=Vx.prototype.setMap;u(\"ol.has.DEVICE_PIXEL_RATIO\",Xi,OPENLAYERS);u(\"ol.has.CANVAS\",Zi,OPENLAYERS);u(\"ol.has.DEVICE_ORIENTATION\",$i,OPENLAYERS);u(\"ol.has.GEOLOCATION\",aj,OPENLAYERS);u(\"ol.has.TOUCH\",bj,OPENLAYERS);u(\"ol.has.WEBGL\",Wi,OPENLAYERS);$x.prototype.getImage=$x.prototype.a;ay.prototype.getImage=ay.prototype.Sa;u(\"ol.Kinetic\",Mk,OPENLAYERS);u(\"ol.loadingstrategy.all\",wp,OPENLAYERS);\nu(\"ol.loadingstrategy.bbox\",function(b){return[b]},OPENLAYERS);u(\"ol.loadingstrategy.tile\",function(b){return function(c,d){var e=Kh(b,d),f=Fh(b,c,e),g=[],e=[e,0,0];for(e[1]=f.a;e[1]<=f.f;++e[1])for(e[2]=f.c;e[2]<=f.b;++e[2])g.push(b.Aa(e));return g}},OPENLAYERS);u(\"ol.Map\",S,OPENLAYERS);S.prototype.addControl=S.prototype.hj;S.prototype.addInteraction=S.prototype.ij;S.prototype.addLayer=S.prototype.jg;S.prototype.addOverlay=S.prototype.kg;S.prototype.beforeRender=S.prototype.Ma;\nS.prototype.forEachFeatureAtPixel=S.prototype.od;S.prototype.forEachLayerAtPixel=S.prototype.Fl;S.prototype.hasFeatureAtPixel=S.prototype.Yk;S.prototype.getEventCoordinate=S.prototype.Ij;S.prototype.getEventPixel=S.prototype.Zd;S.prototype.getTarget=S.prototype.wf;S.prototype.getTargetElement=S.prototype.Lc;S.prototype.getCoordinateFromPixel=S.prototype.Fa;S.prototype.getControls=S.prototype.Gj;S.prototype.getOverlays=S.prototype.$j;S.prototype.getOverlayById=S.prototype.Zj;\nS.prototype.getInteractions=S.prototype.Nj;S.prototype.getLayerGroup=S.prototype.oc;S.prototype.getLayers=S.prototype.Xg;S.prototype.getPixelFromCoordinate=S.prototype.Oa;S.prototype.getSize=S.prototype.Ra;S.prototype.getView=S.prototype.aa;S.prototype.getViewport=S.prototype.nk;S.prototype.renderSync=S.prototype.Fo;S.prototype.render=S.prototype.render;S.prototype.removeControl=S.prototype.yo;S.prototype.removeInteraction=S.prototype.zo;S.prototype.removeLayer=S.prototype.Bo;\nS.prototype.removeOverlay=S.prototype.Co;S.prototype.setLayerGroup=S.prototype.Xh;S.prototype.setSize=S.prototype.Uf;S.prototype.setTarget=S.prototype.Gl;S.prototype.setView=S.prototype.To;S.prototype.updateSize=S.prototype.Uc;Mj.prototype.originalEvent=Mj.prototype.originalEvent;Mj.prototype.pixel=Mj.prototype.pixel;Mj.prototype.coordinate=Mj.prototype.coordinate;Mj.prototype.dragging=Mj.prototype.dragging;Mj.prototype.preventDefault=Mj.prototype.preventDefault;Mj.prototype.stopPropagation=Mj.prototype.b;\nph.prototype.map=ph.prototype.map;ph.prototype.frameState=ph.prototype.frameState;hd.prototype.key=hd.prototype.key;hd.prototype.oldValue=hd.prototype.oldValue;u(\"ol.Object\",id,OPENLAYERS);id.prototype.get=id.prototype.get;id.prototype.getKeys=id.prototype.O;id.prototype.getProperties=id.prototype.P;id.prototype.set=id.prototype.set;id.prototype.setProperties=id.prototype.I;id.prototype.unset=id.prototype.R;u(\"ol.Observable\",fd,OPENLAYERS);u(\"ol.Observable.unByKey\",gd,OPENLAYERS);\nfd.prototype.changed=fd.prototype.s;fd.prototype.dispatchEvent=fd.prototype.o;fd.prototype.getRevision=fd.prototype.L;fd.prototype.on=fd.prototype.H;fd.prototype.once=fd.prototype.M;fd.prototype.un=fd.prototype.K;fd.prototype.unByKey=fd.prototype.N;u(\"ol.inherits\",y,OPENLAYERS);u(\"ol.Overlay\",mr,OPENLAYERS);mr.prototype.getElement=mr.prototype.re;mr.prototype.getId=mr.prototype.Na;mr.prototype.getMap=mr.prototype.se;mr.prototype.getOffset=mr.prototype.Eg;mr.prototype.getPosition=mr.prototype.Yg;\nmr.prototype.getPositioning=mr.prototype.Fg;mr.prototype.setElement=mr.prototype.Uh;mr.prototype.setMap=mr.prototype.setMap;mr.prototype.setOffset=mr.prototype.Zh;mr.prototype.setPosition=mr.prototype.xf;mr.prototype.setPositioning=mr.prototype.bi;u(\"ol.size.toSize\",od,OPENLAYERS);wh.prototype.getTileCoord=wh.prototype.f;Tp.prototype.getFormat=Tp.prototype.Hl;Tp.prototype.setLoader=Tp.prototype.Yh;u(\"ol.View\",Of,OPENLAYERS);Of.prototype.constrainCenter=Of.prototype.Wd;\nOf.prototype.constrainResolution=Of.prototype.constrainResolution;Of.prototype.constrainRotation=Of.prototype.constrainRotation;Of.prototype.getCenter=Of.prototype.Ta;Of.prototype.calculateExtent=Of.prototype.Zc;Of.prototype.getProjection=Of.prototype.Il;Of.prototype.getResolution=Of.prototype.$;Of.prototype.getRotation=Of.prototype.Ea;Of.prototype.getZoom=Of.prototype.qk;Of.prototype.fit=Of.prototype.jf;Of.prototype.centerOn=Of.prototype.qj;Of.prototype.rotate=Of.prototype.rotate;\nOf.prototype.setCenter=Of.prototype.jb;Of.prototype.setResolution=Of.prototype.Ub;Of.prototype.setRotation=Of.prototype.te;Of.prototype.setZoom=Of.prototype.Wo;u(\"ol.xml.getAllTextContent\",Oo,OPENLAYERS);u(\"ol.xml.parse\",hp,OPENLAYERS);uq.prototype.getGL=uq.prototype.Gn;uq.prototype.useProgram=uq.prototype.Ge;u(\"ol.tilegrid.TileGrid\",Bh,OPENLAYERS);Bh.prototype.getMaxZoom=Bh.prototype.Cg;Bh.prototype.getMinZoom=Bh.prototype.Dg;Bh.prototype.getOrigin=Bh.prototype.Ca;Bh.prototype.getResolution=Bh.prototype.$;\nBh.prototype.getResolutions=Bh.prototype.wh;Bh.prototype.getTileCoordExtent=Bh.prototype.Aa;Bh.prototype.getTileCoordForCoordAndResolution=Bh.prototype.ee;Bh.prototype.getTileCoordForCoordAndZ=Bh.prototype.fe;Bh.prototype.getTileSize=Bh.prototype.Ha;u(\"ol.tilegrid.createXYZ\",Oh,OPENLAYERS);u(\"ol.tilegrid.WMTS\",DA,OPENLAYERS);DA.prototype.getMatrixIds=DA.prototype.B;u(\"ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet\",EA,OPENLAYERS);u(\"ol.style.AtlasManager\",IA,OPENLAYERS);u(\"ol.style.Circle\",bm,OPENLAYERS);\nbm.prototype.getFill=bm.prototype.cn;bm.prototype.getImage=bm.prototype.fc;bm.prototype.getRadius=bm.prototype.dn;bm.prototype.getStroke=bm.prototype.en;u(\"ol.style.Fill\",Wl,OPENLAYERS);Wl.prototype.getColor=Wl.prototype.b;Wl.prototype.setColor=Wl.prototype.f;u(\"ol.style.Icon\",wk,OPENLAYERS);wk.prototype.getAnchor=wk.prototype.Xb;wk.prototype.getImage=wk.prototype.fc;wk.prototype.getOrigin=wk.prototype.Ca;wk.prototype.getSrc=wk.prototype.fn;wk.prototype.getSize=wk.prototype.Bb;wk.prototype.load=wk.prototype.load;\nu(\"ol.style.Image\",vk,OPENLAYERS);vk.prototype.getOpacity=vk.prototype.Ae;vk.prototype.getRotateWithView=vk.prototype.ce;vk.prototype.getRotation=vk.prototype.Be;vk.prototype.getScale=vk.prototype.Ce;vk.prototype.getSnapToPixel=vk.prototype.de;vk.prototype.setOpacity=vk.prototype.De;vk.prototype.setRotation=vk.prototype.Ee;vk.prototype.setScale=vk.prototype.Fe;u(\"ol.style.RegularShape\",MA,OPENLAYERS);MA.prototype.getAnchor=MA.prototype.Xb;MA.prototype.getAngle=MA.prototype.gn;\nMA.prototype.getFill=MA.prototype.hn;MA.prototype.getImage=MA.prototype.fc;MA.prototype.getOrigin=MA.prototype.Ca;MA.prototype.getPoints=MA.prototype.jn;MA.prototype.getRadius=MA.prototype.kn;MA.prototype.getRadius2=MA.prototype.fk;MA.prototype.getSize=MA.prototype.Bb;MA.prototype.getStroke=MA.prototype.ln;u(\"ol.style.Stroke\",am,OPENLAYERS);am.prototype.getColor=am.prototype.mn;am.prototype.getLineCap=am.prototype.Qj;am.prototype.getLineDash=am.prototype.nn;am.prototype.getLineJoin=am.prototype.Rj;\nam.prototype.getMiterLimit=am.prototype.Wj;am.prototype.getWidth=am.prototype.pn;am.prototype.setColor=am.prototype.qn;am.prototype.setLineCap=am.prototype.Oo;am.prototype.setLineDash=am.prototype.rn;am.prototype.setLineJoin=am.prototype.Po;am.prototype.setMiterLimit=am.prototype.Qo;am.prototype.setWidth=am.prototype.Uo;u(\"ol.style.Style\",cm,OPENLAYERS);cm.prototype.getGeometry=cm.prototype.W;cm.prototype.getGeometryFunction=cm.prototype.Lj;cm.prototype.getFill=cm.prototype.sn;\ncm.prototype.getImage=cm.prototype.tn;cm.prototype.getStroke=cm.prototype.vn;cm.prototype.getText=cm.prototype.wn;cm.prototype.getZIndex=cm.prototype.xn;cm.prototype.setGeometry=cm.prototype.vh;cm.prototype.setZIndex=cm.prototype.yn;u(\"ol.style.Text\",Zt,OPENLAYERS);Zt.prototype.getFont=Zt.prototype.Jj;Zt.prototype.getOffsetX=Zt.prototype.Xj;Zt.prototype.getOffsetY=Zt.prototype.Yj;Zt.prototype.getFill=Zt.prototype.zn;Zt.prototype.getRotation=Zt.prototype.An;Zt.prototype.getScale=Zt.prototype.Bn;\nZt.prototype.getStroke=Zt.prototype.Cn;Zt.prototype.getText=Zt.prototype.Dn;Zt.prototype.getTextAlign=Zt.prototype.jk;Zt.prototype.getTextBaseline=Zt.prototype.kk;Zt.prototype.setFont=Zt.prototype.Lo;Zt.prototype.setOffsetX=Zt.prototype.$h;Zt.prototype.setOffsetY=Zt.prototype.ai;Zt.prototype.setFill=Zt.prototype.Ko;Zt.prototype.setRotation=Zt.prototype.En;Zt.prototype.setScale=Zt.prototype.Fn;Zt.prototype.setStroke=Zt.prototype.Ro;Zt.prototype.setText=Zt.prototype.ci;Zt.prototype.setTextAlign=Zt.prototype.di;\nZt.prototype.setTextBaseline=Zt.prototype.So;u(\"ol.Sphere\",Ae,OPENLAYERS);Ae.prototype.geodesicArea=Ae.prototype.c;Ae.prototype.haversineDistance=Ae.prototype.a;u(\"ol.source.BingMaps\",Oz,OPENLAYERS);u(\"ol.source.BingMaps.TOS_ATTRIBUTION\",Pz,OPENLAYERS);u(\"ol.source.Cluster\",Qz,OPENLAYERS);Qz.prototype.getSource=Qz.prototype.ga;u(\"ol.source.ImageCanvas\",rn,OPENLAYERS);u(\"ol.source.ImageMapGuide\",Tz,OPENLAYERS);Tz.prototype.getParams=Tz.prototype.Em;Tz.prototype.getImageLoadFunction=Tz.prototype.Dm;\nTz.prototype.updateParams=Tz.prototype.Hm;Tz.prototype.setImageLoadFunction=Tz.prototype.Gm;u(\"ol.source.Image\",kn,OPENLAYERS);mn.prototype.image=mn.prototype.image;u(\"ol.source.ImageStatic\",Uz,OPENLAYERS);u(\"ol.source.ImageVector\",Op,OPENLAYERS);Op.prototype.getSource=Op.prototype.Im;Op.prototype.getStyle=Op.prototype.Jm;Op.prototype.getStyleFunction=Op.prototype.Km;Op.prototype.setStyle=Op.prototype.mh;u(\"ol.source.ImageWMS\",Vz,OPENLAYERS);Vz.prototype.getGetFeatureInfoUrl=Vz.prototype.Nm;\nVz.prototype.getParams=Vz.prototype.Pm;Vz.prototype.getImageLoadFunction=Vz.prototype.Om;Vz.prototype.getUrl=Vz.prototype.Qm;Vz.prototype.setImageLoadFunction=Vz.prototype.Rm;Vz.prototype.setUrl=Vz.prototype.Sm;Vz.prototype.updateParams=Vz.prototype.Tm;u(\"ol.source.MapQuest\",bA,OPENLAYERS);bA.prototype.getLayer=bA.prototype.l;u(\"ol.source.OSM\",$z,OPENLAYERS);u(\"ol.source.OSM.ATTRIBUTION\",aA,OPENLAYERS);u(\"ol.source.Raster\",eA,OPENLAYERS);eA.prototype.setOperation=eA.prototype.u;\njA.prototype.extent=jA.prototype.extent;jA.prototype.resolution=jA.prototype.resolution;jA.prototype.data=jA.prototype.data;u(\"ol.source.Source\",yh,OPENLAYERS);yh.prototype.getAttributions=yh.prototype.sa;yh.prototype.getLogo=yh.prototype.qa;yh.prototype.getProjection=yh.prototype.ta;yh.prototype.getState=yh.prototype.ua;yh.prototype.setAttributions=yh.prototype.na;u(\"ol.source.Stamen\",oA,OPENLAYERS);u(\"ol.source.TileArcGISRest\",qA,OPENLAYERS);qA.prototype.getParams=qA.prototype.D;\nqA.prototype.updateParams=qA.prototype.Z;u(\"ol.source.TileDebug\",sA,OPENLAYERS);u(\"ol.source.TileImage\",Y,OPENLAYERS);Y.prototype.setRenderReprojectionEdges=Y.prototype.wb;Y.prototype.setTileGridForProjection=Y.prototype.xb;u(\"ol.source.TileJSON\",tA,OPENLAYERS);u(\"ol.source.Tile\",Ph,OPENLAYERS);Ph.prototype.getTileGrid=Ph.prototype.Ga;Sh.prototype.tile=Sh.prototype.tile;u(\"ol.source.TileUTFGrid\",uA,OPENLAYERS);uA.prototype.getTemplate=uA.prototype.ik;\nuA.prototype.forDataAtCoordinateAndResolution=uA.prototype.vj;u(\"ol.source.TileWMS\",zA,OPENLAYERS);zA.prototype.getGetFeatureInfoUrl=zA.prototype.Wm;zA.prototype.getParams=zA.prototype.Xm;zA.prototype.updateParams=zA.prototype.Zm;Zp.prototype.getTileLoadFunction=Zp.prototype.Wa;Zp.prototype.getTileUrlFunction=Zp.prototype.Xa;Zp.prototype.getUrls=Zp.prototype.Ya;Zp.prototype.setTileLoadFunction=Zp.prototype.bb;Zp.prototype.setTileUrlFunction=Zp.prototype.Ja;Zp.prototype.setUrl=Zp.prototype.Ua;\nZp.prototype.setUrls=Zp.prototype.Va;u(\"ol.source.Vector\",R,OPENLAYERS);R.prototype.addFeature=R.prototype.Ad;R.prototype.addFeatures=R.prototype.Dc;R.prototype.clear=R.prototype.clear;R.prototype.forEachFeature=R.prototype.rg;R.prototype.forEachFeatureInExtent=R.prototype.ob;R.prototype.forEachFeatureIntersectingExtent=R.prototype.sg;R.prototype.getFeaturesCollection=R.prototype.yg;R.prototype.getFeatures=R.prototype.ye;R.prototype.getFeaturesAtCoordinate=R.prototype.xg;\nR.prototype.getFeaturesInExtent=R.prototype.lf;R.prototype.getClosestFeatureToCoordinate=R.prototype.ug;R.prototype.getExtent=R.prototype.J;R.prototype.getFeatureById=R.prototype.wg;R.prototype.removeFeature=R.prototype.Qc;Lp.prototype.feature=Lp.prototype.feature;u(\"ol.source.VectorTile\",$p,OPENLAYERS);u(\"ol.source.WMTS\",Z,OPENLAYERS);Z.prototype.getDimensions=Z.prototype.Hj;Z.prototype.getFormat=Z.prototype.$m;Z.prototype.getLayer=Z.prototype.an;Z.prototype.getMatrixSet=Z.prototype.Uj;\nZ.prototype.getRequestEncoding=Z.prototype.gk;Z.prototype.getStyle=Z.prototype.bn;Z.prototype.getVersion=Z.prototype.mk;Z.prototype.updateDimensions=Z.prototype.cp;\nu(\"ol.source.WMTS.optionsFromCapabilities\",function(b,c){var d=fb(b.Contents.Layer,function(b){return b.Identifier==c.layer}),e=b.Contents.TileMatrixSet,f,g;f=1<d.TileMatrixSetLink.length?\"projection\"in c?gb(d.TileMatrixSetLink,function(b){return fb(e,function(c){return c.Identifier==b.TileMatrixSet}).SupportedCRS.replace(/urn:ogc:def:crs:(\\w+):(.*:)?(\\w+)$/,\"$1:$3\")==c.projection}):gb(d.TileMatrixSetLink,function(b){return b.TileMatrixSet==c.matrixSet}):0;0>f&&(f=0);g=d.TileMatrixSetLink[f].TileMatrixSet;\nvar h=d.Format[0];\"format\"in c&&(h=c.format);f=gb(d.Style,function(b){return\"style\"in c?b.Title==c.style:b.isDefault});0>f&&(f=0);f=d.Style[f].Identifier;var k={};\"Dimension\"in d&&d.Dimension.forEach(function(b){var c=b.Identifier,d=b.Default;void 0===d&&(d=b.Value[0]);k[c]=d});var m=fb(b.Contents.TileMatrixSet,function(b){return b.Identifier==g}),n;n=\"projection\"in c?Fe(c.projection):Fe(m.SupportedCRS.replace(/urn:ogc:def:crs:(\\w+):(.*:)?(\\w+)$/,\"$1:$3\"));var p=d.WGS84BoundingBox,q,r;void 0!==p&&\n(r=Fe(\"EPSG:4326\").J(),r=p[0]==r[0]&&p[2]==r[2],q=af(p,\"EPSG:4326\",n),(p=n.J())&&(Xd(p,q)||(q=void 0)));var m=EA(m,q),t=[];q=c.requestEncoding;q=void 0!==q?q:\"\";if(b.hasOwnProperty(\"OperationsMetadata\")&&b.OperationsMetadata.hasOwnProperty(\"GetTile\")&&0!==q.indexOf(\"REST\"))for(var d=b.OperationsMetadata.GetTile.DCP.HTTP.Get,p=0,x=d.length;p<x;++p){var z=fb(d[p].Constraint,function(b){return\"GetEncoding\"==b.name}).AllowedValues.Value;0<z.length&&vb(z,\"KVP\")&&(q=\"KVP\",t.push(d[p].href))}else q=\"REST\",\nd.ResourceURL.forEach(function(b){\"tile\"==b.resourceType&&(h=b.format,t.push(b.template))});return{urls:t,layer:c.layer,matrixSet:g,format:h,projection:n,requestEncoding:q,tileGrid:m,style:f,dimensions:k,wrapX:r}},OPENLAYERS);u(\"ol.source.XYZ\",Zz,OPENLAYERS);u(\"ol.source.Zoomify\",GA,OPENLAYERS);dk.prototype.vectorContext=dk.prototype.vectorContext;dk.prototype.frameState=dk.prototype.frameState;dk.prototype.context=dk.prototype.context;dk.prototype.glContext=dk.prototype.glContext;\nVm.prototype.get=Vm.prototype.get;Vm.prototype.getExtent=Vm.prototype.J;Vm.prototype.getGeometry=Vm.prototype.W;Vm.prototype.getProperties=Vm.prototype.ym;Vm.prototype.getType=Vm.prototype.V;u(\"ol.render.VectorContext\",ck,OPENLAYERS);Rq.prototype.drawAsync=Rq.prototype.ld;Rq.prototype.drawCircleGeometry=Rq.prototype.Fc;Rq.prototype.drawFeature=Rq.prototype.hf;Rq.prototype.drawGeometryCollectionGeometry=Rq.prototype.Xd;Rq.prototype.drawPointGeometry=Rq.prototype.Gb;\nRq.prototype.drawLineStringGeometry=Rq.prototype.Wb;Rq.prototype.drawMultiLineStringGeometry=Rq.prototype.Gc;Rq.prototype.drawMultiPointGeometry=Rq.prototype.Fb;Rq.prototype.drawMultiPolygonGeometry=Rq.prototype.Hc;Rq.prototype.drawPolygonGeometry=Rq.prototype.Ic;Rq.prototype.drawText=Rq.prototype.Hb;Rq.prototype.setFillStrokeStyle=Rq.prototype.$a;Rq.prototype.setImageStyle=Rq.prototype.vb;Rq.prototype.setTextStyle=Rq.prototype.ab;jm.prototype.drawAsync=jm.prototype.ld;\njm.prototype.drawCircleGeometry=jm.prototype.Fc;jm.prototype.drawFeature=jm.prototype.hf;jm.prototype.drawPointGeometry=jm.prototype.Gb;jm.prototype.drawMultiPointGeometry=jm.prototype.Fb;jm.prototype.drawLineStringGeometry=jm.prototype.Wb;jm.prototype.drawMultiLineStringGeometry=jm.prototype.Gc;jm.prototype.drawPolygonGeometry=jm.prototype.Ic;jm.prototype.drawMultiPolygonGeometry=jm.prototype.Hc;jm.prototype.setFillStrokeStyle=jm.prototype.$a;jm.prototype.setImageStyle=jm.prototype.vb;\njm.prototype.setTextStyle=jm.prototype.ab;u(\"ol.proj.common.add\",Rl,OPENLAYERS);u(\"ol.proj.METERS_PER_UNIT\",Ce,OPENLAYERS);u(\"ol.proj.Projection\",De,OPENLAYERS);De.prototype.getCode=De.prototype.Fj;De.prototype.getExtent=De.prototype.J;De.prototype.getUnits=De.prototype.wm;De.prototype.getMetersPerUnit=De.prototype.Jc;De.prototype.getWorldExtent=De.prototype.pk;De.prototype.isGlobal=De.prototype.cl;De.prototype.setGlobal=De.prototype.No;De.prototype.setExtent=De.prototype.xm;\nDe.prototype.setWorldExtent=De.prototype.Vo;De.prototype.setGetPointResolution=De.prototype.Mo;De.prototype.getPointResolution=De.prototype.getPointResolution;u(\"ol.proj.addEquivalentProjections\",Ge,OPENLAYERS);u(\"ol.proj.addProjection\",Ue,OPENLAYERS);u(\"ol.proj.addCoordinateTransforms\",He,OPENLAYERS);u(\"ol.proj.fromLonLat\",function(b,c){return $e(b,\"EPSG:4326\",void 0!==c?c:\"EPSG:3857\")},OPENLAYERS);u(\"ol.proj.toLonLat\",function(b,c){return $e(b,void 0!==c?c:\"EPSG:3857\",\"EPSG:4326\")},OPENLAYERS);\nu(\"ol.proj.get\",Fe,OPENLAYERS);u(\"ol.proj.getTransform\",Ye,OPENLAYERS);u(\"ol.proj.transform\",$e,OPENLAYERS);u(\"ol.proj.transformExtent\",af,OPENLAYERS);u(\"ol.layer.Heatmap\",X,OPENLAYERS);X.prototype.getBlur=X.prototype.tg;X.prototype.getGradient=X.prototype.Ag;X.prototype.getRadius=X.prototype.hh;X.prototype.setBlur=X.prototype.Sh;X.prototype.setGradient=X.prototype.Wh;X.prototype.setRadius=X.prototype.ih;u(\"ol.layer.Image\",Sl,OPENLAYERS);Sl.prototype.getSource=Sl.prototype.fa;\nu(\"ol.layer.Layer\",ek,OPENLAYERS);ek.prototype.getSource=ek.prototype.fa;ek.prototype.setMap=ek.prototype.setMap;ek.prototype.setSource=ek.prototype.wc;u(\"ol.layer.Base\",ak,OPENLAYERS);ak.prototype.getExtent=ak.prototype.J;ak.prototype.getMaxResolution=ak.prototype.Mb;ak.prototype.getMinResolution=ak.prototype.Nb;ak.prototype.getOpacity=ak.prototype.Rb;ak.prototype.getVisible=ak.prototype.qb;ak.prototype.getZIndex=ak.prototype.Sb;ak.prototype.setExtent=ak.prototype.bc;\nak.prototype.setMaxResolution=ak.prototype.jc;ak.prototype.setMinResolution=ak.prototype.kc;ak.prototype.setOpacity=ak.prototype.cc;ak.prototype.setVisible=ak.prototype.dc;ak.prototype.setZIndex=ak.prototype.ec;u(\"ol.layer.Group\",Kl,OPENLAYERS);Kl.prototype.getLayers=Kl.prototype.Pc;Kl.prototype.setLayers=Kl.prototype.gh;u(\"ol.layer.Tile\",F,OPENLAYERS);F.prototype.getPreload=F.prototype.a;F.prototype.getSource=F.prototype.fa;F.prototype.setPreload=F.prototype.f;\nF.prototype.getUseInterimTilesOnError=F.prototype.b;F.prototype.setUseInterimTilesOnError=F.prototype.g;u(\"ol.layer.Vector\",H,OPENLAYERS);H.prototype.getSource=H.prototype.fa;H.prototype.getStyle=H.prototype.D;H.prototype.getStyleFunction=H.prototype.G;H.prototype.setStyle=H.prototype.f;u(\"ol.layer.VectorTile\",J,OPENLAYERS);J.prototype.getPreload=J.prototype.g;J.prototype.getSource=J.prototype.fa;J.prototype.getUseInterimTilesOnError=J.prototype.U;J.prototype.setPreload=J.prototype.T;\nJ.prototype.setUseInterimTilesOnError=J.prototype.Z;u(\"ol.interaction.DoubleClickZoom\",Sk,OPENLAYERS);u(\"ol.interaction.DoubleClickZoom.handleEvent\",Tk,OPENLAYERS);u(\"ol.interaction.DragAndDrop\",vy,OPENLAYERS);u(\"ol.interaction.DragAndDrop.handleEvent\",ue,OPENLAYERS);wy.prototype.features=wy.prototype.features;wy.prototype.file=wy.prototype.file;wy.prototype.projection=wy.prototype.projection;pl.prototype.coordinate=pl.prototype.coordinate;u(\"ol.interaction.DragBox\",ql,OPENLAYERS);\nql.prototype.getGeometry=ql.prototype.W;u(\"ol.interaction.DragPan\",dl,OPENLAYERS);u(\"ol.interaction.DragRotateAndZoom\",zy,OPENLAYERS);u(\"ol.interaction.DragRotate\",hl,OPENLAYERS);u(\"ol.interaction.DragZoom\",ul,OPENLAYERS);Dy.prototype.feature=Dy.prototype.feature;u(\"ol.interaction.Draw\",Ey,OPENLAYERS);u(\"ol.interaction.Draw.handleEvent\",Gy,OPENLAYERS);Ey.prototype.removeLastPoint=Ey.prototype.Ao;Ey.prototype.finishDrawing=Ey.prototype.md;Ey.prototype.extend=Ey.prototype.bm;\nu(\"ol.interaction.Draw.createRegularPolygon\",function(b,c){return function(d,e){var f=d[0],g=d[1],h=Math.sqrt(xd(f,g)),k=e?e:Mf(new Qx(f),b);Nf(k,f,h,c?c:Math.atan((g[1]-f[1])/(g[0]-f[0])));return k}},OPENLAYERS);u(\"ol.interaction.Interaction\",Ok,OPENLAYERS);Ok.prototype.getActive=Ok.prototype.b;Ok.prototype.setActive=Ok.prototype.g;u(\"ol.interaction.defaults\",Jl,OPENLAYERS);u(\"ol.interaction.KeyboardPan\",vl,OPENLAYERS);u(\"ol.interaction.KeyboardPan.handleEvent\",wl,OPENLAYERS);\nu(\"ol.interaction.KeyboardZoom\",xl,OPENLAYERS);u(\"ol.interaction.KeyboardZoom.handleEvent\",yl,OPENLAYERS);Uy.prototype.features=Uy.prototype.features;Uy.prototype.mapBrowserPointerEvent=Uy.prototype.mapBrowserPointerEvent;u(\"ol.interaction.Modify\",Vy,OPENLAYERS);u(\"ol.interaction.Modify.handleEvent\",Yy,OPENLAYERS);u(\"ol.interaction.MouseWheelZoom\",zl,OPENLAYERS);u(\"ol.interaction.MouseWheelZoom.handleEvent\",Al,OPENLAYERS);zl.prototype.setMouseAnchor=zl.prototype.D;\nu(\"ol.interaction.PinchRotate\",Bl,OPENLAYERS);u(\"ol.interaction.PinchZoom\",Fl,OPENLAYERS);u(\"ol.interaction.Pointer\",al,OPENLAYERS);u(\"ol.interaction.Pointer.handleEvent\",bl,OPENLAYERS);hz.prototype.selected=hz.prototype.selected;hz.prototype.deselected=hz.prototype.deselected;hz.prototype.mapBrowserEvent=hz.prototype.mapBrowserEvent;u(\"ol.interaction.Select\",iz,OPENLAYERS);iz.prototype.getFeatures=iz.prototype.lm;iz.prototype.getLayer=iz.prototype.mm;u(\"ol.interaction.Select.handleEvent\",jz,OPENLAYERS);\niz.prototype.setMap=iz.prototype.setMap;u(\"ol.interaction.Snap\",lz,OPENLAYERS);lz.prototype.addFeature=lz.prototype.wd;lz.prototype.removeFeature=lz.prototype.xd;pz.prototype.features=pz.prototype.features;pz.prototype.coordinate=pz.prototype.coordinate;u(\"ol.interaction.Translate\",qz,OPENLAYERS);u(\"ol.geom.Circle\",Qx,OPENLAYERS);Qx.prototype.clone=Qx.prototype.clone;Qx.prototype.getCenter=Qx.prototype.vd;Qx.prototype.getRadius=Qx.prototype.yf;Qx.prototype.getType=Qx.prototype.V;\nQx.prototype.intersectsExtent=Qx.prototype.Da;Qx.prototype.setCenter=Qx.prototype.Ul;Qx.prototype.setCenterAndRadius=Qx.prototype.Tf;Qx.prototype.setRadius=Qx.prototype.Vl;Qx.prototype.transform=Qx.prototype.kb;u(\"ol.geom.Geometry\",bf,OPENLAYERS);bf.prototype.getClosestPoint=bf.prototype.pb;bf.prototype.getExtent=bf.prototype.J;bf.prototype.simplify=bf.prototype.yb;bf.prototype.transform=bf.prototype.kb;u(\"ol.geom.GeometryCollection\",js,OPENLAYERS);js.prototype.clone=js.prototype.clone;\njs.prototype.getGeometries=js.prototype.zg;js.prototype.getType=js.prototype.V;js.prototype.intersectsExtent=js.prototype.Da;js.prototype.setGeometries=js.prototype.Vh;js.prototype.applyTransform=js.prototype.mc;js.prototype.translate=js.prototype.Oc;u(\"ol.geom.LinearRing\",wf,OPENLAYERS);wf.prototype.clone=wf.prototype.clone;wf.prototype.getArea=wf.prototype.Yl;wf.prototype.getCoordinates=wf.prototype.Y;wf.prototype.getType=wf.prototype.V;wf.prototype.setCoordinates=wf.prototype.ma;\nu(\"ol.geom.LineString\",T,OPENLAYERS);T.prototype.appendCoordinate=T.prototype.jj;T.prototype.clone=T.prototype.clone;T.prototype.forEachSegment=T.prototype.yj;T.prototype.getCoordinateAtM=T.prototype.Wl;T.prototype.getCoordinates=T.prototype.Y;T.prototype.getLength=T.prototype.Xl;T.prototype.getType=T.prototype.V;T.prototype.intersectsExtent=T.prototype.Da;T.prototype.setCoordinates=T.prototype.ma;u(\"ol.geom.MultiLineString\",U,OPENLAYERS);U.prototype.appendLineString=U.prototype.kj;\nU.prototype.clone=U.prototype.clone;U.prototype.getCoordinateAtM=U.prototype.Zl;U.prototype.getCoordinates=U.prototype.Y;U.prototype.getLineString=U.prototype.Sj;U.prototype.getLineStrings=U.prototype.rd;U.prototype.getType=U.prototype.V;U.prototype.intersectsExtent=U.prototype.Da;U.prototype.setCoordinates=U.prototype.ma;u(\"ol.geom.MultiPoint\",$r,OPENLAYERS);$r.prototype.appendPoint=$r.prototype.mj;$r.prototype.clone=$r.prototype.clone;$r.prototype.getCoordinates=$r.prototype.Y;\n$r.prototype.getPoint=$r.prototype.ck;$r.prototype.getPoints=$r.prototype.ue;$r.prototype.getType=$r.prototype.V;$r.prototype.intersectsExtent=$r.prototype.Da;$r.prototype.setCoordinates=$r.prototype.ma;u(\"ol.geom.MultiPolygon\",V,OPENLAYERS);V.prototype.appendPolygon=V.prototype.nj;V.prototype.clone=V.prototype.clone;V.prototype.getArea=V.prototype.$l;V.prototype.getCoordinates=V.prototype.Y;V.prototype.getInteriorPoints=V.prototype.Pj;V.prototype.getPolygon=V.prototype.ek;\nV.prototype.getPolygons=V.prototype.be;V.prototype.getType=V.prototype.V;V.prototype.intersectsExtent=V.prototype.Da;V.prototype.setCoordinates=V.prototype.ma;u(\"ol.geom.Point\",D,OPENLAYERS);D.prototype.clone=D.prototype.clone;D.prototype.getCoordinates=D.prototype.Y;D.prototype.getType=D.prototype.V;D.prototype.intersectsExtent=D.prototype.Da;D.prototype.setCoordinates=D.prototype.ma;u(\"ol.geom.Polygon\",E,OPENLAYERS);E.prototype.appendLinearRing=E.prototype.lj;E.prototype.clone=E.prototype.clone;\nE.prototype.getArea=E.prototype.am;E.prototype.getCoordinates=E.prototype.Y;E.prototype.getInteriorPoint=E.prototype.Oj;E.prototype.getLinearRingCount=E.prototype.Tj;E.prototype.getLinearRing=E.prototype.Bg;E.prototype.getLinearRings=E.prototype.ae;E.prototype.getType=E.prototype.V;E.prototype.intersectsExtent=E.prototype.Da;E.prototype.setCoordinates=E.prototype.ma;u(\"ol.geom.Polygon.circular\",Kf,OPENLAYERS);u(\"ol.geom.Polygon.fromExtent\",Lf,OPENLAYERS);u(\"ol.geom.Polygon.fromCircle\",Mf,OPENLAYERS);\nu(\"ol.geom.SimpleGeometry\",df,OPENLAYERS);df.prototype.getFirstCoordinate=df.prototype.Jb;df.prototype.getLastCoordinate=df.prototype.Kb;df.prototype.getLayout=df.prototype.Lb;df.prototype.applyTransform=df.prototype.mc;df.prototype.translate=df.prototype.Oc;u(\"ol.format.EsriJSON\",cs,OPENLAYERS);cs.prototype.readFeature=cs.prototype.Tb;cs.prototype.readFeatures=cs.prototype.Ba;cs.prototype.readGeometry=cs.prototype.Sc;cs.prototype.readProjection=cs.prototype.Ia;cs.prototype.writeGeometry=cs.prototype.Wc;\ncs.prototype.writeGeometryObject=cs.prototype.Te;cs.prototype.writeFeature=cs.prototype.Jd;cs.prototype.writeFeatureObject=cs.prototype.Vc;cs.prototype.writeFeatures=cs.prototype.Vb;cs.prototype.writeFeaturesObject=cs.prototype.Re;u(\"ol.format.Feature\",Qr,OPENLAYERS);u(\"ol.format.GeoJSON\",ns,OPENLAYERS);ns.prototype.readFeature=ns.prototype.Tb;ns.prototype.readFeatures=ns.prototype.Ba;ns.prototype.readGeometry=ns.prototype.Sc;ns.prototype.readProjection=ns.prototype.Ia;ns.prototype.writeFeature=ns.prototype.Jd;\nns.prototype.writeFeatureObject=ns.prototype.Vc;ns.prototype.writeFeatures=ns.prototype.Vb;ns.prototype.writeFeaturesObject=ns.prototype.Re;ns.prototype.writeGeometry=ns.prototype.Wc;ns.prototype.writeGeometryObject=ns.prototype.Te;u(\"ol.format.GPX\",Rs,OPENLAYERS);Rs.prototype.readFeature=Rs.prototype.Tb;Rs.prototype.readFeatures=Rs.prototype.Ba;Rs.prototype.readProjection=Rs.prototype.Ia;Rs.prototype.writeFeatures=Rs.prototype.Vb;Rs.prototype.writeFeaturesNode=Rs.prototype.c;\nu(\"ol.format.IGC\",Bt,OPENLAYERS);Bt.prototype.readFeature=Bt.prototype.Tb;Bt.prototype.readFeatures=Bt.prototype.Ba;Bt.prototype.readProjection=Bt.prototype.Ia;u(\"ol.format.KML\",$t,OPENLAYERS);$t.prototype.readFeature=$t.prototype.Tb;$t.prototype.readFeatures=$t.prototype.Ba;$t.prototype.readName=$t.prototype.po;$t.prototype.readNetworkLinks=$t.prototype.qo;$t.prototype.readProjection=$t.prototype.Ia;$t.prototype.writeFeatures=$t.prototype.Vb;$t.prototype.writeFeaturesNode=$t.prototype.c;\nu(\"ol.format.MVT\",Ov,OPENLAYERS);Ov.prototype.setLayers=Ov.prototype.g;u(\"ol.format.OSMXML\",Qv,OPENLAYERS);Qv.prototype.readFeatures=Qv.prototype.Ba;Qv.prototype.readProjection=Qv.prototype.Ia;u(\"ol.format.Polyline\",ow,OPENLAYERS);u(\"ol.format.Polyline.encodeDeltas\",pw,OPENLAYERS);u(\"ol.format.Polyline.decodeDeltas\",rw,OPENLAYERS);u(\"ol.format.Polyline.encodeFloats\",qw,OPENLAYERS);u(\"ol.format.Polyline.decodeFloats\",sw,OPENLAYERS);ow.prototype.readFeature=ow.prototype.Tb;\now.prototype.readFeatures=ow.prototype.Ba;ow.prototype.readGeometry=ow.prototype.Sc;ow.prototype.readProjection=ow.prototype.Ia;ow.prototype.writeGeometry=ow.prototype.Wc;u(\"ol.format.TopoJSON\",tw,OPENLAYERS);tw.prototype.readFeatures=tw.prototype.Ba;tw.prototype.readProjection=tw.prototype.Ia;u(\"ol.format.WFS\",zw,OPENLAYERS);zw.prototype.readFeatures=zw.prototype.Ba;zw.prototype.readTransactionResponse=zw.prototype.i;zw.prototype.readFeatureCollectionMetadata=zw.prototype.j;\nzw.prototype.writeGetFeature=zw.prototype.l;zw.prototype.writeTransaction=zw.prototype.A;zw.prototype.readProjection=zw.prototype.Ia;u(\"ol.format.WKT\",Mw,OPENLAYERS);Mw.prototype.readFeature=Mw.prototype.Tb;Mw.prototype.readFeatures=Mw.prototype.Ba;Mw.prototype.readGeometry=Mw.prototype.Sc;Mw.prototype.writeFeature=Mw.prototype.Jd;Mw.prototype.writeFeatures=Mw.prototype.Vb;Mw.prototype.writeGeometry=Mw.prototype.Wc;u(\"ol.format.WMSCapabilities\",dx,OPENLAYERS);dx.prototype.read=dx.prototype.read;\nu(\"ol.format.WMSGetFeatureInfo\",Ax,OPENLAYERS);Ax.prototype.readFeatures=Ax.prototype.Ba;u(\"ol.format.WMTSCapabilities\",Bx,OPENLAYERS);Bx.prototype.read=Bx.prototype.read;u(\"ol.format.GML2\",Hs,OPENLAYERS);u(\"ol.format.GML3\",Is,OPENLAYERS);Is.prototype.writeGeometryNode=Is.prototype.B;Is.prototype.writeFeatures=Is.prototype.Vb;Is.prototype.writeFeaturesNode=Is.prototype.c;u(\"ol.format.GML\",Is,OPENLAYERS);Is.prototype.writeFeatures=Is.prototype.Vb;Is.prototype.writeFeaturesNode=Is.prototype.c;\nvs.prototype.readFeatures=vs.prototype.Ba;u(\"ol.events.condition.altKeyOnly\",function(b){b=b.a;return b.c&&!b.l&&!b.f},OPENLAYERS);u(\"ol.events.condition.altShiftKeysOnly\",Uk,OPENLAYERS);u(\"ol.events.condition.always\",ue,OPENLAYERS);u(\"ol.events.condition.click\",function(b){return b.type==Qj},OPENLAYERS);u(\"ol.events.condition.never\",te,OPENLAYERS);u(\"ol.events.condition.pointerMove\",Vk,OPENLAYERS);u(\"ol.events.condition.singleClick\",Wk,OPENLAYERS);\nu(\"ol.events.condition.doubleClick\",function(b){return b.type==Rj},OPENLAYERS);u(\"ol.events.condition.noModifierKeys\",Xk,OPENLAYERS);u(\"ol.events.condition.platformModifierKeyOnly\",function(b){b=b.a;return!b.c&&b.l&&!b.f},OPENLAYERS);u(\"ol.events.condition.shiftKeyOnly\",Yk,OPENLAYERS);u(\"ol.events.condition.targetNotEditable\",Zk,OPENLAYERS);u(\"ol.events.condition.mouseOnly\",$k,OPENLAYERS);u(\"ol.control.Attribution\",Th,OPENLAYERS);u(\"ol.control.Attribution.render\",Uh,OPENLAYERS);\nTh.prototype.getCollapsible=Th.prototype.Kl;Th.prototype.setCollapsible=Th.prototype.Nl;Th.prototype.setCollapsed=Th.prototype.Ml;Th.prototype.getCollapsed=Th.prototype.Jl;u(\"ol.control.Control\",qh,OPENLAYERS);qh.prototype.getMap=qh.prototype.g;qh.prototype.setMap=qh.prototype.setMap;qh.prototype.setTarget=qh.prototype.f;u(\"ol.control.defaults\",Zh,OPENLAYERS);u(\"ol.control.FullScreen\",ei,OPENLAYERS);u(\"ol.control.MousePosition\",fi,OPENLAYERS);u(\"ol.control.MousePosition.render\",gi,OPENLAYERS);\nfi.prototype.getCoordinateFormat=fi.prototype.vg;fi.prototype.getProjection=fi.prototype.Zg;fi.prototype.setCoordinateFormat=fi.prototype.Th;fi.prototype.setProjection=fi.prototype.$g;u(\"ol.control.OverviewMap\",qr,OPENLAYERS);u(\"ol.control.OverviewMap.render\",rr,OPENLAYERS);qr.prototype.getCollapsible=qr.prototype.Ql;qr.prototype.setCollapsible=qr.prototype.Tl;qr.prototype.setCollapsed=qr.prototype.Sl;qr.prototype.getCollapsed=qr.prototype.Pl;qr.prototype.getOverviewMap=qr.prototype.ak;\nu(\"ol.control.Rotate\",Wh,OPENLAYERS);u(\"ol.control.Rotate.render\",Xh,OPENLAYERS);u(\"ol.control.ScaleLine\",vr,OPENLAYERS);vr.prototype.getUnits=vr.prototype.G;u(\"ol.control.ScaleLine.render\",wr,OPENLAYERS);vr.prototype.setUnits=vr.prototype.T;u(\"ol.control.Zoom\",Yh,OPENLAYERS);u(\"ol.control.ZoomSlider\",Jr,OPENLAYERS);u(\"ol.control.ZoomSlider.render\",Lr,OPENLAYERS);u(\"ol.control.ZoomToExtent\",Or,OPENLAYERS);u(\"ol.color.asArray\",tg,OPENLAYERS);u(\"ol.color.asString\",vg,OPENLAYERS);\nid.prototype.changed=id.prototype.s;id.prototype.dispatchEvent=id.prototype.o;id.prototype.getRevision=id.prototype.L;id.prototype.on=id.prototype.H;id.prototype.once=id.prototype.M;id.prototype.un=id.prototype.K;id.prototype.unByKey=id.prototype.N;og.prototype.get=og.prototype.get;og.prototype.getKeys=og.prototype.O;og.prototype.getProperties=og.prototype.P;og.prototype.set=og.prototype.set;og.prototype.setProperties=og.prototype.I;og.prototype.unset=og.prototype.R;og.prototype.changed=og.prototype.s;\nog.prototype.dispatchEvent=og.prototype.o;og.prototype.getRevision=og.prototype.L;og.prototype.on=og.prototype.H;og.prototype.once=og.prototype.M;og.prototype.un=og.prototype.K;og.prototype.unByKey=og.prototype.N;Pr.prototype.get=Pr.prototype.get;Pr.prototype.getKeys=Pr.prototype.O;Pr.prototype.getProperties=Pr.prototype.P;Pr.prototype.set=Pr.prototype.set;Pr.prototype.setProperties=Pr.prototype.I;Pr.prototype.unset=Pr.prototype.R;Pr.prototype.changed=Pr.prototype.s;Pr.prototype.dispatchEvent=Pr.prototype.o;\nPr.prototype.getRevision=Pr.prototype.L;Pr.prototype.on=Pr.prototype.H;Pr.prototype.once=Pr.prototype.M;Pr.prototype.un=Pr.prototype.K;Pr.prototype.unByKey=Pr.prototype.N;sn.prototype.get=sn.prototype.get;sn.prototype.getKeys=sn.prototype.O;sn.prototype.getProperties=sn.prototype.P;sn.prototype.set=sn.prototype.set;sn.prototype.setProperties=sn.prototype.I;sn.prototype.unset=sn.prototype.R;sn.prototype.changed=sn.prototype.s;sn.prototype.dispatchEvent=sn.prototype.o;sn.prototype.getRevision=sn.prototype.L;\nsn.prototype.on=sn.prototype.H;sn.prototype.once=sn.prototype.M;sn.prototype.un=sn.prototype.K;sn.prototype.unByKey=sn.prototype.N;Px.prototype.get=Px.prototype.get;Px.prototype.getKeys=Px.prototype.O;Px.prototype.getProperties=Px.prototype.P;Px.prototype.set=Px.prototype.set;Px.prototype.setProperties=Px.prototype.I;Px.prototype.unset=Px.prototype.R;Px.prototype.changed=Px.prototype.s;Px.prototype.dispatchEvent=Px.prototype.o;Px.prototype.getRevision=Px.prototype.L;Px.prototype.on=Px.prototype.H;\nPx.prototype.once=Px.prototype.M;Px.prototype.un=Px.prototype.K;Px.prototype.unByKey=Px.prototype.N;ay.prototype.getTileCoord=ay.prototype.f;S.prototype.get=S.prototype.get;S.prototype.getKeys=S.prototype.O;S.prototype.getProperties=S.prototype.P;S.prototype.set=S.prototype.set;S.prototype.setProperties=S.prototype.I;S.prototype.unset=S.prototype.R;S.prototype.changed=S.prototype.s;S.prototype.dispatchEvent=S.prototype.o;S.prototype.getRevision=S.prototype.L;S.prototype.on=S.prototype.H;\nS.prototype.once=S.prototype.M;S.prototype.un=S.prototype.K;S.prototype.unByKey=S.prototype.N;Mj.prototype.map=Mj.prototype.map;Mj.prototype.frameState=Mj.prototype.frameState;Nj.prototype.originalEvent=Nj.prototype.originalEvent;Nj.prototype.pixel=Nj.prototype.pixel;Nj.prototype.coordinate=Nj.prototype.coordinate;Nj.prototype.dragging=Nj.prototype.dragging;Nj.prototype.preventDefault=Nj.prototype.preventDefault;Nj.prototype.stopPropagation=Nj.prototype.b;Nj.prototype.map=Nj.prototype.map;\nNj.prototype.frameState=Nj.prototype.frameState;mr.prototype.get=mr.prototype.get;mr.prototype.getKeys=mr.prototype.O;mr.prototype.getProperties=mr.prototype.P;mr.prototype.set=mr.prototype.set;mr.prototype.setProperties=mr.prototype.I;mr.prototype.unset=mr.prototype.R;mr.prototype.changed=mr.prototype.s;mr.prototype.dispatchEvent=mr.prototype.o;mr.prototype.getRevision=mr.prototype.L;mr.prototype.on=mr.prototype.H;mr.prototype.once=mr.prototype.M;mr.prototype.un=mr.prototype.K;\nmr.prototype.unByKey=mr.prototype.N;Tp.prototype.getTileCoord=Tp.prototype.f;Of.prototype.get=Of.prototype.get;Of.prototype.getKeys=Of.prototype.O;Of.prototype.getProperties=Of.prototype.P;Of.prototype.set=Of.prototype.set;Of.prototype.setProperties=Of.prototype.I;Of.prototype.unset=Of.prototype.R;Of.prototype.changed=Of.prototype.s;Of.prototype.dispatchEvent=Of.prototype.o;Of.prototype.getRevision=Of.prototype.L;Of.prototype.on=Of.prototype.H;Of.prototype.once=Of.prototype.M;Of.prototype.un=Of.prototype.K;\nOf.prototype.unByKey=Of.prototype.N;DA.prototype.getMaxZoom=DA.prototype.Cg;DA.prototype.getMinZoom=DA.prototype.Dg;DA.prototype.getOrigin=DA.prototype.Ca;DA.prototype.getResolution=DA.prototype.$;DA.prototype.getResolutions=DA.prototype.wh;DA.prototype.getTileCoordExtent=DA.prototype.Aa;DA.prototype.getTileCoordForCoordAndResolution=DA.prototype.ee;DA.prototype.getTileCoordForCoordAndZ=DA.prototype.fe;DA.prototype.getTileSize=DA.prototype.Ha;bm.prototype.getOpacity=bm.prototype.Ae;\nbm.prototype.getRotateWithView=bm.prototype.ce;bm.prototype.getRotation=bm.prototype.Be;bm.prototype.getScale=bm.prototype.Ce;bm.prototype.getSnapToPixel=bm.prototype.de;bm.prototype.setOpacity=bm.prototype.De;bm.prototype.setRotation=bm.prototype.Ee;bm.prototype.setScale=bm.prototype.Fe;wk.prototype.getOpacity=wk.prototype.Ae;wk.prototype.getRotateWithView=wk.prototype.ce;wk.prototype.getRotation=wk.prototype.Be;wk.prototype.getScale=wk.prototype.Ce;wk.prototype.getSnapToPixel=wk.prototype.de;\nwk.prototype.setOpacity=wk.prototype.De;wk.prototype.setRotation=wk.prototype.Ee;wk.prototype.setScale=wk.prototype.Fe;MA.prototype.getOpacity=MA.prototype.Ae;MA.prototype.getRotateWithView=MA.prototype.ce;MA.prototype.getRotation=MA.prototype.Be;MA.prototype.getScale=MA.prototype.Ce;MA.prototype.getSnapToPixel=MA.prototype.de;MA.prototype.setOpacity=MA.prototype.De;MA.prototype.setRotation=MA.prototype.Ee;MA.prototype.setScale=MA.prototype.Fe;yh.prototype.get=yh.prototype.get;\nyh.prototype.getKeys=yh.prototype.O;yh.prototype.getProperties=yh.prototype.P;yh.prototype.set=yh.prototype.set;yh.prototype.setProperties=yh.prototype.I;yh.prototype.unset=yh.prototype.R;yh.prototype.changed=yh.prototype.s;yh.prototype.dispatchEvent=yh.prototype.o;yh.prototype.getRevision=yh.prototype.L;yh.prototype.on=yh.prototype.H;yh.prototype.once=yh.prototype.M;yh.prototype.un=yh.prototype.K;yh.prototype.unByKey=yh.prototype.N;Ph.prototype.getAttributions=Ph.prototype.sa;\nPh.prototype.getLogo=Ph.prototype.qa;Ph.prototype.getProjection=Ph.prototype.ta;Ph.prototype.getState=Ph.prototype.ua;Ph.prototype.setAttributions=Ph.prototype.na;Ph.prototype.get=Ph.prototype.get;Ph.prototype.getKeys=Ph.prototype.O;Ph.prototype.getProperties=Ph.prototype.P;Ph.prototype.set=Ph.prototype.set;Ph.prototype.setProperties=Ph.prototype.I;Ph.prototype.unset=Ph.prototype.R;Ph.prototype.changed=Ph.prototype.s;Ph.prototype.dispatchEvent=Ph.prototype.o;Ph.prototype.getRevision=Ph.prototype.L;\nPh.prototype.on=Ph.prototype.H;Ph.prototype.once=Ph.prototype.M;Ph.prototype.un=Ph.prototype.K;Ph.prototype.unByKey=Ph.prototype.N;Zp.prototype.getTileGrid=Zp.prototype.Ga;Zp.prototype.getAttributions=Zp.prototype.sa;Zp.prototype.getLogo=Zp.prototype.qa;Zp.prototype.getProjection=Zp.prototype.ta;Zp.prototype.getState=Zp.prototype.ua;Zp.prototype.setAttributions=Zp.prototype.na;Zp.prototype.get=Zp.prototype.get;Zp.prototype.getKeys=Zp.prototype.O;Zp.prototype.getProperties=Zp.prototype.P;\nZp.prototype.set=Zp.prototype.set;Zp.prototype.setProperties=Zp.prototype.I;Zp.prototype.unset=Zp.prototype.R;Zp.prototype.changed=Zp.prototype.s;Zp.prototype.dispatchEvent=Zp.prototype.o;Zp.prototype.getRevision=Zp.prototype.L;Zp.prototype.on=Zp.prototype.H;Zp.prototype.once=Zp.prototype.M;Zp.prototype.un=Zp.prototype.K;Zp.prototype.unByKey=Zp.prototype.N;Y.prototype.getTileLoadFunction=Y.prototype.Wa;Y.prototype.getTileUrlFunction=Y.prototype.Xa;Y.prototype.getUrls=Y.prototype.Ya;\nY.prototype.setTileLoadFunction=Y.prototype.bb;Y.prototype.setTileUrlFunction=Y.prototype.Ja;Y.prototype.setUrl=Y.prototype.Ua;Y.prototype.setUrls=Y.prototype.Va;Y.prototype.getTileGrid=Y.prototype.Ga;Y.prototype.getAttributions=Y.prototype.sa;Y.prototype.getLogo=Y.prototype.qa;Y.prototype.getProjection=Y.prototype.ta;Y.prototype.getState=Y.prototype.ua;Y.prototype.setAttributions=Y.prototype.na;Y.prototype.get=Y.prototype.get;Y.prototype.getKeys=Y.prototype.O;Y.prototype.getProperties=Y.prototype.P;\nY.prototype.set=Y.prototype.set;Y.prototype.setProperties=Y.prototype.I;Y.prototype.unset=Y.prototype.R;Y.prototype.changed=Y.prototype.s;Y.prototype.dispatchEvent=Y.prototype.o;Y.prototype.getRevision=Y.prototype.L;Y.prototype.on=Y.prototype.H;Y.prototype.once=Y.prototype.M;Y.prototype.un=Y.prototype.K;Y.prototype.unByKey=Y.prototype.N;Oz.prototype.setRenderReprojectionEdges=Oz.prototype.wb;Oz.prototype.setTileGridForProjection=Oz.prototype.xb;Oz.prototype.getTileLoadFunction=Oz.prototype.Wa;\nOz.prototype.getTileUrlFunction=Oz.prototype.Xa;Oz.prototype.getUrls=Oz.prototype.Ya;Oz.prototype.setTileLoadFunction=Oz.prototype.bb;Oz.prototype.setTileUrlFunction=Oz.prototype.Ja;Oz.prototype.setUrl=Oz.prototype.Ua;Oz.prototype.setUrls=Oz.prototype.Va;Oz.prototype.getTileGrid=Oz.prototype.Ga;Oz.prototype.getAttributions=Oz.prototype.sa;Oz.prototype.getLogo=Oz.prototype.qa;Oz.prototype.getProjection=Oz.prototype.ta;Oz.prototype.getState=Oz.prototype.ua;Oz.prototype.setAttributions=Oz.prototype.na;\nOz.prototype.get=Oz.prototype.get;Oz.prototype.getKeys=Oz.prototype.O;Oz.prototype.getProperties=Oz.prototype.P;Oz.prototype.set=Oz.prototype.set;Oz.prototype.setProperties=Oz.prototype.I;Oz.prototype.unset=Oz.prototype.R;Oz.prototype.changed=Oz.prototype.s;Oz.prototype.dispatchEvent=Oz.prototype.o;Oz.prototype.getRevision=Oz.prototype.L;Oz.prototype.on=Oz.prototype.H;Oz.prototype.once=Oz.prototype.M;Oz.prototype.un=Oz.prototype.K;Oz.prototype.unByKey=Oz.prototype.N;R.prototype.getAttributions=R.prototype.sa;\nR.prototype.getLogo=R.prototype.qa;R.prototype.getProjection=R.prototype.ta;R.prototype.getState=R.prototype.ua;R.prototype.setAttributions=R.prototype.na;R.prototype.get=R.prototype.get;R.prototype.getKeys=R.prototype.O;R.prototype.getProperties=R.prototype.P;R.prototype.set=R.prototype.set;R.prototype.setProperties=R.prototype.I;R.prototype.unset=R.prototype.R;R.prototype.changed=R.prototype.s;R.prototype.dispatchEvent=R.prototype.o;R.prototype.getRevision=R.prototype.L;R.prototype.on=R.prototype.H;\nR.prototype.once=R.prototype.M;R.prototype.un=R.prototype.K;R.prototype.unByKey=R.prototype.N;Qz.prototype.addFeature=Qz.prototype.Ad;Qz.prototype.addFeatures=Qz.prototype.Dc;Qz.prototype.clear=Qz.prototype.clear;Qz.prototype.forEachFeature=Qz.prototype.rg;Qz.prototype.forEachFeatureInExtent=Qz.prototype.ob;Qz.prototype.forEachFeatureIntersectingExtent=Qz.prototype.sg;Qz.prototype.getFeaturesCollection=Qz.prototype.yg;Qz.prototype.getFeatures=Qz.prototype.ye;Qz.prototype.getFeaturesAtCoordinate=Qz.prototype.xg;\nQz.prototype.getFeaturesInExtent=Qz.prototype.lf;Qz.prototype.getClosestFeatureToCoordinate=Qz.prototype.ug;Qz.prototype.getExtent=Qz.prototype.J;Qz.prototype.getFeatureById=Qz.prototype.wg;Qz.prototype.removeFeature=Qz.prototype.Qc;Qz.prototype.getAttributions=Qz.prototype.sa;Qz.prototype.getLogo=Qz.prototype.qa;Qz.prototype.getProjection=Qz.prototype.ta;Qz.prototype.getState=Qz.prototype.ua;Qz.prototype.setAttributions=Qz.prototype.na;Qz.prototype.get=Qz.prototype.get;Qz.prototype.getKeys=Qz.prototype.O;\nQz.prototype.getProperties=Qz.prototype.P;Qz.prototype.set=Qz.prototype.set;Qz.prototype.setProperties=Qz.prototype.I;Qz.prototype.unset=Qz.prototype.R;Qz.prototype.changed=Qz.prototype.s;Qz.prototype.dispatchEvent=Qz.prototype.o;Qz.prototype.getRevision=Qz.prototype.L;Qz.prototype.on=Qz.prototype.H;Qz.prototype.once=Qz.prototype.M;Qz.prototype.un=Qz.prototype.K;Qz.prototype.unByKey=Qz.prototype.N;kn.prototype.getAttributions=kn.prototype.sa;kn.prototype.getLogo=kn.prototype.qa;\nkn.prototype.getProjection=kn.prototype.ta;kn.prototype.getState=kn.prototype.ua;kn.prototype.setAttributions=kn.prototype.na;kn.prototype.get=kn.prototype.get;kn.prototype.getKeys=kn.prototype.O;kn.prototype.getProperties=kn.prototype.P;kn.prototype.set=kn.prototype.set;kn.prototype.setProperties=kn.prototype.I;kn.prototype.unset=kn.prototype.R;kn.prototype.changed=kn.prototype.s;kn.prototype.dispatchEvent=kn.prototype.o;kn.prototype.getRevision=kn.prototype.L;kn.prototype.on=kn.prototype.H;\nkn.prototype.once=kn.prototype.M;kn.prototype.un=kn.prototype.K;kn.prototype.unByKey=kn.prototype.N;rn.prototype.getAttributions=rn.prototype.sa;rn.prototype.getLogo=rn.prototype.qa;rn.prototype.getProjection=rn.prototype.ta;rn.prototype.getState=rn.prototype.ua;rn.prototype.setAttributions=rn.prototype.na;rn.prototype.get=rn.prototype.get;rn.prototype.getKeys=rn.prototype.O;rn.prototype.getProperties=rn.prototype.P;rn.prototype.set=rn.prototype.set;rn.prototype.setProperties=rn.prototype.I;\nrn.prototype.unset=rn.prototype.R;rn.prototype.changed=rn.prototype.s;rn.prototype.dispatchEvent=rn.prototype.o;rn.prototype.getRevision=rn.prototype.L;rn.prototype.on=rn.prototype.H;rn.prototype.once=rn.prototype.M;rn.prototype.un=rn.prototype.K;rn.prototype.unByKey=rn.prototype.N;Tz.prototype.getAttributions=Tz.prototype.sa;Tz.prototype.getLogo=Tz.prototype.qa;Tz.prototype.getProjection=Tz.prototype.ta;Tz.prototype.getState=Tz.prototype.ua;Tz.prototype.setAttributions=Tz.prototype.na;\nTz.prototype.get=Tz.prototype.get;Tz.prototype.getKeys=Tz.prototype.O;Tz.prototype.getProperties=Tz.prototype.P;Tz.prototype.set=Tz.prototype.set;Tz.prototype.setProperties=Tz.prototype.I;Tz.prototype.unset=Tz.prototype.R;Tz.prototype.changed=Tz.prototype.s;Tz.prototype.dispatchEvent=Tz.prototype.o;Tz.prototype.getRevision=Tz.prototype.L;Tz.prototype.on=Tz.prototype.H;Tz.prototype.once=Tz.prototype.M;Tz.prototype.un=Tz.prototype.K;Tz.prototype.unByKey=Tz.prototype.N;Uz.prototype.getAttributions=Uz.prototype.sa;\nUz.prototype.getLogo=Uz.prototype.qa;Uz.prototype.getProjection=Uz.prototype.ta;Uz.prototype.getState=Uz.prototype.ua;Uz.prototype.setAttributions=Uz.prototype.na;Uz.prototype.get=Uz.prototype.get;Uz.prototype.getKeys=Uz.prototype.O;Uz.prototype.getProperties=Uz.prototype.P;Uz.prototype.set=Uz.prototype.set;Uz.prototype.setProperties=Uz.prototype.I;Uz.prototype.unset=Uz.prototype.R;Uz.prototype.changed=Uz.prototype.s;Uz.prototype.dispatchEvent=Uz.prototype.o;Uz.prototype.getRevision=Uz.prototype.L;\nUz.prototype.on=Uz.prototype.H;Uz.prototype.once=Uz.prototype.M;Uz.prototype.un=Uz.prototype.K;Uz.prototype.unByKey=Uz.prototype.N;Op.prototype.getAttributions=Op.prototype.sa;Op.prototype.getLogo=Op.prototype.qa;Op.prototype.getProjection=Op.prototype.ta;Op.prototype.getState=Op.prototype.ua;Op.prototype.setAttributions=Op.prototype.na;Op.prototype.get=Op.prototype.get;Op.prototype.getKeys=Op.prototype.O;Op.prototype.getProperties=Op.prototype.P;Op.prototype.set=Op.prototype.set;\nOp.prototype.setProperties=Op.prototype.I;Op.prototype.unset=Op.prototype.R;Op.prototype.changed=Op.prototype.s;Op.prototype.dispatchEvent=Op.prototype.o;Op.prototype.getRevision=Op.prototype.L;Op.prototype.on=Op.prototype.H;Op.prototype.once=Op.prototype.M;Op.prototype.un=Op.prototype.K;Op.prototype.unByKey=Op.prototype.N;Vz.prototype.getAttributions=Vz.prototype.sa;Vz.prototype.getLogo=Vz.prototype.qa;Vz.prototype.getProjection=Vz.prototype.ta;Vz.prototype.getState=Vz.prototype.ua;\nVz.prototype.setAttributions=Vz.prototype.na;Vz.prototype.get=Vz.prototype.get;Vz.prototype.getKeys=Vz.prototype.O;Vz.prototype.getProperties=Vz.prototype.P;Vz.prototype.set=Vz.prototype.set;Vz.prototype.setProperties=Vz.prototype.I;Vz.prototype.unset=Vz.prototype.R;Vz.prototype.changed=Vz.prototype.s;Vz.prototype.dispatchEvent=Vz.prototype.o;Vz.prototype.getRevision=Vz.prototype.L;Vz.prototype.on=Vz.prototype.H;Vz.prototype.once=Vz.prototype.M;Vz.prototype.un=Vz.prototype.K;\nVz.prototype.unByKey=Vz.prototype.N;Zz.prototype.setRenderReprojectionEdges=Zz.prototype.wb;Zz.prototype.setTileGridForProjection=Zz.prototype.xb;Zz.prototype.getTileLoadFunction=Zz.prototype.Wa;Zz.prototype.getTileUrlFunction=Zz.prototype.Xa;Zz.prototype.getUrls=Zz.prototype.Ya;Zz.prototype.setTileLoadFunction=Zz.prototype.bb;Zz.prototype.setTileUrlFunction=Zz.prototype.Ja;Zz.prototype.setUrl=Zz.prototype.Ua;Zz.prototype.setUrls=Zz.prototype.Va;Zz.prototype.getTileGrid=Zz.prototype.Ga;\nZz.prototype.getAttributions=Zz.prototype.sa;Zz.prototype.getLogo=Zz.prototype.qa;Zz.prototype.getProjection=Zz.prototype.ta;Zz.prototype.getState=Zz.prototype.ua;Zz.prototype.setAttributions=Zz.prototype.na;Zz.prototype.get=Zz.prototype.get;Zz.prototype.getKeys=Zz.prototype.O;Zz.prototype.getProperties=Zz.prototype.P;Zz.prototype.set=Zz.prototype.set;Zz.prototype.setProperties=Zz.prototype.I;Zz.prototype.unset=Zz.prototype.R;Zz.prototype.changed=Zz.prototype.s;Zz.prototype.dispatchEvent=Zz.prototype.o;\nZz.prototype.getRevision=Zz.prototype.L;Zz.prototype.on=Zz.prototype.H;Zz.prototype.once=Zz.prototype.M;Zz.prototype.un=Zz.prototype.K;Zz.prototype.unByKey=Zz.prototype.N;bA.prototype.setRenderReprojectionEdges=bA.prototype.wb;bA.prototype.setTileGridForProjection=bA.prototype.xb;bA.prototype.getTileLoadFunction=bA.prototype.Wa;bA.prototype.getTileUrlFunction=bA.prototype.Xa;bA.prototype.getUrls=bA.prototype.Ya;bA.prototype.setTileLoadFunction=bA.prototype.bb;bA.prototype.setTileUrlFunction=bA.prototype.Ja;\nbA.prototype.setUrl=bA.prototype.Ua;bA.prototype.setUrls=bA.prototype.Va;bA.prototype.getTileGrid=bA.prototype.Ga;bA.prototype.getAttributions=bA.prototype.sa;bA.prototype.getLogo=bA.prototype.qa;bA.prototype.getProjection=bA.prototype.ta;bA.prototype.getState=bA.prototype.ua;bA.prototype.setAttributions=bA.prototype.na;bA.prototype.get=bA.prototype.get;bA.prototype.getKeys=bA.prototype.O;bA.prototype.getProperties=bA.prototype.P;bA.prototype.set=bA.prototype.set;bA.prototype.setProperties=bA.prototype.I;\nbA.prototype.unset=bA.prototype.R;bA.prototype.changed=bA.prototype.s;bA.prototype.dispatchEvent=bA.prototype.o;bA.prototype.getRevision=bA.prototype.L;bA.prototype.on=bA.prototype.H;bA.prototype.once=bA.prototype.M;bA.prototype.un=bA.prototype.K;bA.prototype.unByKey=bA.prototype.N;$z.prototype.setRenderReprojectionEdges=$z.prototype.wb;$z.prototype.setTileGridForProjection=$z.prototype.xb;$z.prototype.getTileLoadFunction=$z.prototype.Wa;$z.prototype.getTileUrlFunction=$z.prototype.Xa;\n$z.prototype.getUrls=$z.prototype.Ya;$z.prototype.setTileLoadFunction=$z.prototype.bb;$z.prototype.setTileUrlFunction=$z.prototype.Ja;$z.prototype.setUrl=$z.prototype.Ua;$z.prototype.setUrls=$z.prototype.Va;$z.prototype.getTileGrid=$z.prototype.Ga;$z.prototype.getAttributions=$z.prototype.sa;$z.prototype.getLogo=$z.prototype.qa;$z.prototype.getProjection=$z.prototype.ta;$z.prototype.getState=$z.prototype.ua;$z.prototype.setAttributions=$z.prototype.na;$z.prototype.get=$z.prototype.get;\n$z.prototype.getKeys=$z.prototype.O;$z.prototype.getProperties=$z.prototype.P;$z.prototype.set=$z.prototype.set;$z.prototype.setProperties=$z.prototype.I;$z.prototype.unset=$z.prototype.R;$z.prototype.changed=$z.prototype.s;$z.prototype.dispatchEvent=$z.prototype.o;$z.prototype.getRevision=$z.prototype.L;$z.prototype.on=$z.prototype.H;$z.prototype.once=$z.prototype.M;$z.prototype.un=$z.prototype.K;$z.prototype.unByKey=$z.prototype.N;eA.prototype.getAttributions=eA.prototype.sa;\neA.prototype.getLogo=eA.prototype.qa;eA.prototype.getProjection=eA.prototype.ta;eA.prototype.getState=eA.prototype.ua;eA.prototype.setAttributions=eA.prototype.na;eA.prototype.get=eA.prototype.get;eA.prototype.getKeys=eA.prototype.O;eA.prototype.getProperties=eA.prototype.P;eA.prototype.set=eA.prototype.set;eA.prototype.setProperties=eA.prototype.I;eA.prototype.unset=eA.prototype.R;eA.prototype.changed=eA.prototype.s;eA.prototype.dispatchEvent=eA.prototype.o;eA.prototype.getRevision=eA.prototype.L;\neA.prototype.on=eA.prototype.H;eA.prototype.once=eA.prototype.M;eA.prototype.un=eA.prototype.K;eA.prototype.unByKey=eA.prototype.N;oA.prototype.setRenderReprojectionEdges=oA.prototype.wb;oA.prototype.setTileGridForProjection=oA.prototype.xb;oA.prototype.getTileLoadFunction=oA.prototype.Wa;oA.prototype.getTileUrlFunction=oA.prototype.Xa;oA.prototype.getUrls=oA.prototype.Ya;oA.prototype.setTileLoadFunction=oA.prototype.bb;oA.prototype.setTileUrlFunction=oA.prototype.Ja;oA.prototype.setUrl=oA.prototype.Ua;\noA.prototype.setUrls=oA.prototype.Va;oA.prototype.getTileGrid=oA.prototype.Ga;oA.prototype.getAttributions=oA.prototype.sa;oA.prototype.getLogo=oA.prototype.qa;oA.prototype.getProjection=oA.prototype.ta;oA.prototype.getState=oA.prototype.ua;oA.prototype.setAttributions=oA.prototype.na;oA.prototype.get=oA.prototype.get;oA.prototype.getKeys=oA.prototype.O;oA.prototype.getProperties=oA.prototype.P;oA.prototype.set=oA.prototype.set;oA.prototype.setProperties=oA.prototype.I;oA.prototype.unset=oA.prototype.R;\noA.prototype.changed=oA.prototype.s;oA.prototype.dispatchEvent=oA.prototype.o;oA.prototype.getRevision=oA.prototype.L;oA.prototype.on=oA.prototype.H;oA.prototype.once=oA.prototype.M;oA.prototype.un=oA.prototype.K;oA.prototype.unByKey=oA.prototype.N;qA.prototype.setRenderReprojectionEdges=qA.prototype.wb;qA.prototype.setTileGridForProjection=qA.prototype.xb;qA.prototype.getTileLoadFunction=qA.prototype.Wa;qA.prototype.getTileUrlFunction=qA.prototype.Xa;qA.prototype.getUrls=qA.prototype.Ya;\nqA.prototype.setTileLoadFunction=qA.prototype.bb;qA.prototype.setTileUrlFunction=qA.prototype.Ja;qA.prototype.setUrl=qA.prototype.Ua;qA.prototype.setUrls=qA.prototype.Va;qA.prototype.getTileGrid=qA.prototype.Ga;qA.prototype.getAttributions=qA.prototype.sa;qA.prototype.getLogo=qA.prototype.qa;qA.prototype.getProjection=qA.prototype.ta;qA.prototype.getState=qA.prototype.ua;qA.prototype.setAttributions=qA.prototype.na;qA.prototype.get=qA.prototype.get;qA.prototype.getKeys=qA.prototype.O;\nqA.prototype.getProperties=qA.prototype.P;qA.prototype.set=qA.prototype.set;qA.prototype.setProperties=qA.prototype.I;qA.prototype.unset=qA.prototype.R;qA.prototype.changed=qA.prototype.s;qA.prototype.dispatchEvent=qA.prototype.o;qA.prototype.getRevision=qA.prototype.L;qA.prototype.on=qA.prototype.H;qA.prototype.once=qA.prototype.M;qA.prototype.un=qA.prototype.K;qA.prototype.unByKey=qA.prototype.N;sA.prototype.getTileGrid=sA.prototype.Ga;sA.prototype.getAttributions=sA.prototype.sa;\nsA.prototype.getLogo=sA.prototype.qa;sA.prototype.getProjection=sA.prototype.ta;sA.prototype.getState=sA.prototype.ua;sA.prototype.setAttributions=sA.prototype.na;sA.prototype.get=sA.prototype.get;sA.prototype.getKeys=sA.prototype.O;sA.prototype.getProperties=sA.prototype.P;sA.prototype.set=sA.prototype.set;sA.prototype.setProperties=sA.prototype.I;sA.prototype.unset=sA.prototype.R;sA.prototype.changed=sA.prototype.s;sA.prototype.dispatchEvent=sA.prototype.o;sA.prototype.getRevision=sA.prototype.L;\nsA.prototype.on=sA.prototype.H;sA.prototype.once=sA.prototype.M;sA.prototype.un=sA.prototype.K;sA.prototype.unByKey=sA.prototype.N;tA.prototype.setRenderReprojectionEdges=tA.prototype.wb;tA.prototype.setTileGridForProjection=tA.prototype.xb;tA.prototype.getTileLoadFunction=tA.prototype.Wa;tA.prototype.getTileUrlFunction=tA.prototype.Xa;tA.prototype.getUrls=tA.prototype.Ya;tA.prototype.setTileLoadFunction=tA.prototype.bb;tA.prototype.setTileUrlFunction=tA.prototype.Ja;tA.prototype.setUrl=tA.prototype.Ua;\ntA.prototype.setUrls=tA.prototype.Va;tA.prototype.getTileGrid=tA.prototype.Ga;tA.prototype.getAttributions=tA.prototype.sa;tA.prototype.getLogo=tA.prototype.qa;tA.prototype.getProjection=tA.prototype.ta;tA.prototype.getState=tA.prototype.ua;tA.prototype.setAttributions=tA.prototype.na;tA.prototype.get=tA.prototype.get;tA.prototype.getKeys=tA.prototype.O;tA.prototype.getProperties=tA.prototype.P;tA.prototype.set=tA.prototype.set;tA.prototype.setProperties=tA.prototype.I;tA.prototype.unset=tA.prototype.R;\ntA.prototype.changed=tA.prototype.s;tA.prototype.dispatchEvent=tA.prototype.o;tA.prototype.getRevision=tA.prototype.L;tA.prototype.on=tA.prototype.H;tA.prototype.once=tA.prototype.M;tA.prototype.un=tA.prototype.K;tA.prototype.unByKey=tA.prototype.N;uA.prototype.getTileGrid=uA.prototype.Ga;uA.prototype.getAttributions=uA.prototype.sa;uA.prototype.getLogo=uA.prototype.qa;uA.prototype.getProjection=uA.prototype.ta;uA.prototype.getState=uA.prototype.ua;uA.prototype.setAttributions=uA.prototype.na;\nuA.prototype.get=uA.prototype.get;uA.prototype.getKeys=uA.prototype.O;uA.prototype.getProperties=uA.prototype.P;uA.prototype.set=uA.prototype.set;uA.prototype.setProperties=uA.prototype.I;uA.prototype.unset=uA.prototype.R;uA.prototype.changed=uA.prototype.s;uA.prototype.dispatchEvent=uA.prototype.o;uA.prototype.getRevision=uA.prototype.L;uA.prototype.on=uA.prototype.H;uA.prototype.once=uA.prototype.M;uA.prototype.un=uA.prototype.K;uA.prototype.unByKey=uA.prototype.N;\nzA.prototype.setRenderReprojectionEdges=zA.prototype.wb;zA.prototype.setTileGridForProjection=zA.prototype.xb;zA.prototype.getTileLoadFunction=zA.prototype.Wa;zA.prototype.getTileUrlFunction=zA.prototype.Xa;zA.prototype.getUrls=zA.prototype.Ya;zA.prototype.setTileLoadFunction=zA.prototype.bb;zA.prototype.setTileUrlFunction=zA.prototype.Ja;zA.prototype.setUrl=zA.prototype.Ua;zA.prototype.setUrls=zA.prototype.Va;zA.prototype.getTileGrid=zA.prototype.Ga;zA.prototype.getAttributions=zA.prototype.sa;\nzA.prototype.getLogo=zA.prototype.qa;zA.prototype.getProjection=zA.prototype.ta;zA.prototype.getState=zA.prototype.ua;zA.prototype.setAttributions=zA.prototype.na;zA.prototype.get=zA.prototype.get;zA.prototype.getKeys=zA.prototype.O;zA.prototype.getProperties=zA.prototype.P;zA.prototype.set=zA.prototype.set;zA.prototype.setProperties=zA.prototype.I;zA.prototype.unset=zA.prototype.R;zA.prototype.changed=zA.prototype.s;zA.prototype.dispatchEvent=zA.prototype.o;zA.prototype.getRevision=zA.prototype.L;\nzA.prototype.on=zA.prototype.H;zA.prototype.once=zA.prototype.M;zA.prototype.un=zA.prototype.K;zA.prototype.unByKey=zA.prototype.N;$p.prototype.getTileLoadFunction=$p.prototype.Wa;$p.prototype.getTileUrlFunction=$p.prototype.Xa;$p.prototype.getUrls=$p.prototype.Ya;$p.prototype.setTileLoadFunction=$p.prototype.bb;$p.prototype.setTileUrlFunction=$p.prototype.Ja;$p.prototype.setUrl=$p.prototype.Ua;$p.prototype.setUrls=$p.prototype.Va;$p.prototype.getTileGrid=$p.prototype.Ga;\n$p.prototype.getAttributions=$p.prototype.sa;$p.prototype.getLogo=$p.prototype.qa;$p.prototype.getProjection=$p.prototype.ta;$p.prototype.getState=$p.prototype.ua;$p.prototype.setAttributions=$p.prototype.na;$p.prototype.get=$p.prototype.get;$p.prototype.getKeys=$p.prototype.O;$p.prototype.getProperties=$p.prototype.P;$p.prototype.set=$p.prototype.set;$p.prototype.setProperties=$p.prototype.I;$p.prototype.unset=$p.prototype.R;$p.prototype.changed=$p.prototype.s;$p.prototype.dispatchEvent=$p.prototype.o;\n$p.prototype.getRevision=$p.prototype.L;$p.prototype.on=$p.prototype.H;$p.prototype.once=$p.prototype.M;$p.prototype.un=$p.prototype.K;$p.prototype.unByKey=$p.prototype.N;Z.prototype.setRenderReprojectionEdges=Z.prototype.wb;Z.prototype.setTileGridForProjection=Z.prototype.xb;Z.prototype.getTileLoadFunction=Z.prototype.Wa;Z.prototype.getTileUrlFunction=Z.prototype.Xa;Z.prototype.getUrls=Z.prototype.Ya;Z.prototype.setTileLoadFunction=Z.prototype.bb;Z.prototype.setTileUrlFunction=Z.prototype.Ja;\nZ.prototype.setUrl=Z.prototype.Ua;Z.prototype.setUrls=Z.prototype.Va;Z.prototype.getTileGrid=Z.prototype.Ga;Z.prototype.getAttributions=Z.prototype.sa;Z.prototype.getLogo=Z.prototype.qa;Z.prototype.getProjection=Z.prototype.ta;Z.prototype.getState=Z.prototype.ua;Z.prototype.setAttributions=Z.prototype.na;Z.prototype.get=Z.prototype.get;Z.prototype.getKeys=Z.prototype.O;Z.prototype.getProperties=Z.prototype.P;Z.prototype.set=Z.prototype.set;Z.prototype.setProperties=Z.prototype.I;\nZ.prototype.unset=Z.prototype.R;Z.prototype.changed=Z.prototype.s;Z.prototype.dispatchEvent=Z.prototype.o;Z.prototype.getRevision=Z.prototype.L;Z.prototype.on=Z.prototype.H;Z.prototype.once=Z.prototype.M;Z.prototype.un=Z.prototype.K;Z.prototype.unByKey=Z.prototype.N;GA.prototype.setRenderReprojectionEdges=GA.prototype.wb;GA.prototype.setTileGridForProjection=GA.prototype.xb;GA.prototype.getTileLoadFunction=GA.prototype.Wa;GA.prototype.getTileUrlFunction=GA.prototype.Xa;GA.prototype.getUrls=GA.prototype.Ya;\nGA.prototype.setTileLoadFunction=GA.prototype.bb;GA.prototype.setTileUrlFunction=GA.prototype.Ja;GA.prototype.setUrl=GA.prototype.Ua;GA.prototype.setUrls=GA.prototype.Va;GA.prototype.getTileGrid=GA.prototype.Ga;GA.prototype.getAttributions=GA.prototype.sa;GA.prototype.getLogo=GA.prototype.qa;GA.prototype.getProjection=GA.prototype.ta;GA.prototype.getState=GA.prototype.ua;GA.prototype.setAttributions=GA.prototype.na;GA.prototype.get=GA.prototype.get;GA.prototype.getKeys=GA.prototype.O;\nGA.prototype.getProperties=GA.prototype.P;GA.prototype.set=GA.prototype.set;GA.prototype.setProperties=GA.prototype.I;GA.prototype.unset=GA.prototype.R;GA.prototype.changed=GA.prototype.s;GA.prototype.dispatchEvent=GA.prototype.o;GA.prototype.getRevision=GA.prototype.L;GA.prototype.on=GA.prototype.H;GA.prototype.once=GA.prototype.M;GA.prototype.un=GA.prototype.K;GA.prototype.unByKey=GA.prototype.N;xz.prototype.getTileCoord=xz.prototype.f;lk.prototype.changed=lk.prototype.s;\nlk.prototype.dispatchEvent=lk.prototype.o;lk.prototype.getRevision=lk.prototype.L;lk.prototype.on=lk.prototype.H;lk.prototype.once=lk.prototype.M;lk.prototype.un=lk.prototype.K;lk.prototype.unByKey=lk.prototype.N;Wq.prototype.changed=Wq.prototype.s;Wq.prototype.dispatchEvent=Wq.prototype.o;Wq.prototype.getRevision=Wq.prototype.L;Wq.prototype.on=Wq.prototype.H;Wq.prototype.once=Wq.prototype.M;Wq.prototype.un=Wq.prototype.K;Wq.prototype.unByKey=Wq.prototype.N;Zq.prototype.changed=Zq.prototype.s;\nZq.prototype.dispatchEvent=Zq.prototype.o;Zq.prototype.getRevision=Zq.prototype.L;Zq.prototype.on=Zq.prototype.H;Zq.prototype.once=Zq.prototype.M;Zq.prototype.un=Zq.prototype.K;Zq.prototype.unByKey=Zq.prototype.N;er.prototype.changed=er.prototype.s;er.prototype.dispatchEvent=er.prototype.o;er.prototype.getRevision=er.prototype.L;er.prototype.on=er.prototype.H;er.prototype.once=er.prototype.M;er.prototype.un=er.prototype.K;er.prototype.unByKey=er.prototype.N;gr.prototype.changed=gr.prototype.s;\ngr.prototype.dispatchEvent=gr.prototype.o;gr.prototype.getRevision=gr.prototype.L;gr.prototype.on=gr.prototype.H;gr.prototype.once=gr.prototype.M;gr.prototype.un=gr.prototype.K;gr.prototype.unByKey=gr.prototype.N;fq.prototype.changed=fq.prototype.s;fq.prototype.dispatchEvent=fq.prototype.o;fq.prototype.getRevision=fq.prototype.L;fq.prototype.on=fq.prototype.H;fq.prototype.once=fq.prototype.M;fq.prototype.un=fq.prototype.K;fq.prototype.unByKey=fq.prototype.N;gq.prototype.changed=gq.prototype.s;\ngq.prototype.dispatchEvent=gq.prototype.o;gq.prototype.getRevision=gq.prototype.L;gq.prototype.on=gq.prototype.H;gq.prototype.once=gq.prototype.M;gq.prototype.un=gq.prototype.K;gq.prototype.unByKey=gq.prototype.N;hq.prototype.changed=hq.prototype.s;hq.prototype.dispatchEvent=hq.prototype.o;hq.prototype.getRevision=hq.prototype.L;hq.prototype.on=hq.prototype.H;hq.prototype.once=hq.prototype.M;hq.prototype.un=hq.prototype.K;hq.prototype.unByKey=hq.prototype.N;jq.prototype.changed=jq.prototype.s;\njq.prototype.dispatchEvent=jq.prototype.o;jq.prototype.getRevision=jq.prototype.L;jq.prototype.on=jq.prototype.H;jq.prototype.once=jq.prototype.M;jq.prototype.un=jq.prototype.K;jq.prototype.unByKey=jq.prototype.N;xm.prototype.changed=xm.prototype.s;xm.prototype.dispatchEvent=xm.prototype.o;xm.prototype.getRevision=xm.prototype.L;xm.prototype.on=xm.prototype.H;xm.prototype.once=xm.prototype.M;xm.prototype.un=xm.prototype.K;xm.prototype.unByKey=xm.prototype.N;Qp.prototype.changed=Qp.prototype.s;\nQp.prototype.dispatchEvent=Qp.prototype.o;Qp.prototype.getRevision=Qp.prototype.L;Qp.prototype.on=Qp.prototype.H;Qp.prototype.once=Qp.prototype.M;Qp.prototype.un=Qp.prototype.K;Qp.prototype.unByKey=Qp.prototype.N;Rp.prototype.changed=Rp.prototype.s;Rp.prototype.dispatchEvent=Rp.prototype.o;Rp.prototype.getRevision=Rp.prototype.L;Rp.prototype.on=Rp.prototype.H;Rp.prototype.once=Rp.prototype.M;Rp.prototype.un=Rp.prototype.K;Rp.prototype.unByKey=Rp.prototype.N;Sp.prototype.changed=Sp.prototype.s;\nSp.prototype.dispatchEvent=Sp.prototype.o;Sp.prototype.getRevision=Sp.prototype.L;Sp.prototype.on=Sp.prototype.H;Sp.prototype.once=Sp.prototype.M;Sp.prototype.un=Sp.prototype.K;Sp.prototype.unByKey=Sp.prototype.N;bq.prototype.changed=bq.prototype.s;bq.prototype.dispatchEvent=bq.prototype.o;bq.prototype.getRevision=bq.prototype.L;bq.prototype.on=bq.prototype.H;bq.prototype.once=bq.prototype.M;bq.prototype.un=bq.prototype.K;bq.prototype.unByKey=bq.prototype.N;ak.prototype.get=ak.prototype.get;\nak.prototype.getKeys=ak.prototype.O;ak.prototype.getProperties=ak.prototype.P;ak.prototype.set=ak.prototype.set;ak.prototype.setProperties=ak.prototype.I;ak.prototype.unset=ak.prototype.R;ak.prototype.changed=ak.prototype.s;ak.prototype.dispatchEvent=ak.prototype.o;ak.prototype.getRevision=ak.prototype.L;ak.prototype.on=ak.prototype.H;ak.prototype.once=ak.prototype.M;ak.prototype.un=ak.prototype.K;ak.prototype.unByKey=ak.prototype.N;ek.prototype.getExtent=ek.prototype.J;\nek.prototype.getMaxResolution=ek.prototype.Mb;ek.prototype.getMinResolution=ek.prototype.Nb;ek.prototype.getOpacity=ek.prototype.Rb;ek.prototype.getVisible=ek.prototype.qb;ek.prototype.getZIndex=ek.prototype.Sb;ek.prototype.setExtent=ek.prototype.bc;ek.prototype.setMaxResolution=ek.prototype.jc;ek.prototype.setMinResolution=ek.prototype.kc;ek.prototype.setOpacity=ek.prototype.cc;ek.prototype.setVisible=ek.prototype.dc;ek.prototype.setZIndex=ek.prototype.ec;ek.prototype.get=ek.prototype.get;\nek.prototype.getKeys=ek.prototype.O;ek.prototype.getProperties=ek.prototype.P;ek.prototype.set=ek.prototype.set;ek.prototype.setProperties=ek.prototype.I;ek.prototype.unset=ek.prototype.R;ek.prototype.changed=ek.prototype.s;ek.prototype.dispatchEvent=ek.prototype.o;ek.prototype.getRevision=ek.prototype.L;ek.prototype.on=ek.prototype.H;ek.prototype.once=ek.prototype.M;ek.prototype.un=ek.prototype.K;ek.prototype.unByKey=ek.prototype.N;H.prototype.setMap=H.prototype.setMap;H.prototype.setSource=H.prototype.wc;\nH.prototype.getExtent=H.prototype.J;H.prototype.getMaxResolution=H.prototype.Mb;H.prototype.getMinResolution=H.prototype.Nb;H.prototype.getOpacity=H.prototype.Rb;H.prototype.getVisible=H.prototype.qb;H.prototype.getZIndex=H.prototype.Sb;H.prototype.setExtent=H.prototype.bc;H.prototype.setMaxResolution=H.prototype.jc;H.prototype.setMinResolution=H.prototype.kc;H.prototype.setOpacity=H.prototype.cc;H.prototype.setVisible=H.prototype.dc;H.prototype.setZIndex=H.prototype.ec;H.prototype.get=H.prototype.get;\nH.prototype.getKeys=H.prototype.O;H.prototype.getProperties=H.prototype.P;H.prototype.set=H.prototype.set;H.prototype.setProperties=H.prototype.I;H.prototype.unset=H.prototype.R;H.prototype.changed=H.prototype.s;H.prototype.dispatchEvent=H.prototype.o;H.prototype.getRevision=H.prototype.L;H.prototype.on=H.prototype.H;H.prototype.once=H.prototype.M;H.prototype.un=H.prototype.K;H.prototype.unByKey=H.prototype.N;X.prototype.getSource=X.prototype.fa;X.prototype.getStyle=X.prototype.D;\nX.prototype.getStyleFunction=X.prototype.G;X.prototype.setStyle=X.prototype.f;X.prototype.setMap=X.prototype.setMap;X.prototype.setSource=X.prototype.wc;X.prototype.getExtent=X.prototype.J;X.prototype.getMaxResolution=X.prototype.Mb;X.prototype.getMinResolution=X.prototype.Nb;X.prototype.getOpacity=X.prototype.Rb;X.prototype.getVisible=X.prototype.qb;X.prototype.getZIndex=X.prototype.Sb;X.prototype.setExtent=X.prototype.bc;X.prototype.setMaxResolution=X.prototype.jc;X.prototype.setMinResolution=X.prototype.kc;\nX.prototype.setOpacity=X.prototype.cc;X.prototype.setVisible=X.prototype.dc;X.prototype.setZIndex=X.prototype.ec;X.prototype.get=X.prototype.get;X.prototype.getKeys=X.prototype.O;X.prototype.getProperties=X.prototype.P;X.prototype.set=X.prototype.set;X.prototype.setProperties=X.prototype.I;X.prototype.unset=X.prototype.R;X.prototype.changed=X.prototype.s;X.prototype.dispatchEvent=X.prototype.o;X.prototype.getRevision=X.prototype.L;X.prototype.on=X.prototype.H;X.prototype.once=X.prototype.M;\nX.prototype.un=X.prototype.K;X.prototype.unByKey=X.prototype.N;Sl.prototype.setMap=Sl.prototype.setMap;Sl.prototype.setSource=Sl.prototype.wc;Sl.prototype.getExtent=Sl.prototype.J;Sl.prototype.getMaxResolution=Sl.prototype.Mb;Sl.prototype.getMinResolution=Sl.prototype.Nb;Sl.prototype.getOpacity=Sl.prototype.Rb;Sl.prototype.getVisible=Sl.prototype.qb;Sl.prototype.getZIndex=Sl.prototype.Sb;Sl.prototype.setExtent=Sl.prototype.bc;Sl.prototype.setMaxResolution=Sl.prototype.jc;\nSl.prototype.setMinResolution=Sl.prototype.kc;Sl.prototype.setOpacity=Sl.prototype.cc;Sl.prototype.setVisible=Sl.prototype.dc;Sl.prototype.setZIndex=Sl.prototype.ec;Sl.prototype.get=Sl.prototype.get;Sl.prototype.getKeys=Sl.prototype.O;Sl.prototype.getProperties=Sl.prototype.P;Sl.prototype.set=Sl.prototype.set;Sl.prototype.setProperties=Sl.prototype.I;Sl.prototype.unset=Sl.prototype.R;Sl.prototype.changed=Sl.prototype.s;Sl.prototype.dispatchEvent=Sl.prototype.o;Sl.prototype.getRevision=Sl.prototype.L;\nSl.prototype.on=Sl.prototype.H;Sl.prototype.once=Sl.prototype.M;Sl.prototype.un=Sl.prototype.K;Sl.prototype.unByKey=Sl.prototype.N;Kl.prototype.getExtent=Kl.prototype.J;Kl.prototype.getMaxResolution=Kl.prototype.Mb;Kl.prototype.getMinResolution=Kl.prototype.Nb;Kl.prototype.getOpacity=Kl.prototype.Rb;Kl.prototype.getVisible=Kl.prototype.qb;Kl.prototype.getZIndex=Kl.prototype.Sb;Kl.prototype.setExtent=Kl.prototype.bc;Kl.prototype.setMaxResolution=Kl.prototype.jc;Kl.prototype.setMinResolution=Kl.prototype.kc;\nKl.prototype.setOpacity=Kl.prototype.cc;Kl.prototype.setVisible=Kl.prototype.dc;Kl.prototype.setZIndex=Kl.prototype.ec;Kl.prototype.get=Kl.prototype.get;Kl.prototype.getKeys=Kl.prototype.O;Kl.prototype.getProperties=Kl.prototype.P;Kl.prototype.set=Kl.prototype.set;Kl.prototype.setProperties=Kl.prototype.I;Kl.prototype.unset=Kl.prototype.R;Kl.prototype.changed=Kl.prototype.s;Kl.prototype.dispatchEvent=Kl.prototype.o;Kl.prototype.getRevision=Kl.prototype.L;Kl.prototype.on=Kl.prototype.H;\nKl.prototype.once=Kl.prototype.M;Kl.prototype.un=Kl.prototype.K;Kl.prototype.unByKey=Kl.prototype.N;F.prototype.setMap=F.prototype.setMap;F.prototype.setSource=F.prototype.wc;F.prototype.getExtent=F.prototype.J;F.prototype.getMaxResolution=F.prototype.Mb;F.prototype.getMinResolution=F.prototype.Nb;F.prototype.getOpacity=F.prototype.Rb;F.prototype.getVisible=F.prototype.qb;F.prototype.getZIndex=F.prototype.Sb;F.prototype.setExtent=F.prototype.bc;F.prototype.setMaxResolution=F.prototype.jc;\nF.prototype.setMinResolution=F.prototype.kc;F.prototype.setOpacity=F.prototype.cc;F.prototype.setVisible=F.prototype.dc;F.prototype.setZIndex=F.prototype.ec;F.prototype.get=F.prototype.get;F.prototype.getKeys=F.prototype.O;F.prototype.getProperties=F.prototype.P;F.prototype.set=F.prototype.set;F.prototype.setProperties=F.prototype.I;F.prototype.unset=F.prototype.R;F.prototype.changed=F.prototype.s;F.prototype.dispatchEvent=F.prototype.o;F.prototype.getRevision=F.prototype.L;F.prototype.on=F.prototype.H;\nF.prototype.once=F.prototype.M;F.prototype.un=F.prototype.K;F.prototype.unByKey=F.prototype.N;J.prototype.getStyle=J.prototype.D;J.prototype.getStyleFunction=J.prototype.G;J.prototype.setStyle=J.prototype.f;J.prototype.setMap=J.prototype.setMap;J.prototype.setSource=J.prototype.wc;J.prototype.getExtent=J.prototype.J;J.prototype.getMaxResolution=J.prototype.Mb;J.prototype.getMinResolution=J.prototype.Nb;J.prototype.getOpacity=J.prototype.Rb;J.prototype.getVisible=J.prototype.qb;\nJ.prototype.getZIndex=J.prototype.Sb;J.prototype.setExtent=J.prototype.bc;J.prototype.setMaxResolution=J.prototype.jc;J.prototype.setMinResolution=J.prototype.kc;J.prototype.setOpacity=J.prototype.cc;J.prototype.setVisible=J.prototype.dc;J.prototype.setZIndex=J.prototype.ec;J.prototype.get=J.prototype.get;J.prototype.getKeys=J.prototype.O;J.prototype.getProperties=J.prototype.P;J.prototype.set=J.prototype.set;J.prototype.setProperties=J.prototype.I;J.prototype.unset=J.prototype.R;\nJ.prototype.changed=J.prototype.s;J.prototype.dispatchEvent=J.prototype.o;J.prototype.getRevision=J.prototype.L;J.prototype.on=J.prototype.H;J.prototype.once=J.prototype.M;J.prototype.un=J.prototype.K;J.prototype.unByKey=J.prototype.N;Ok.prototype.get=Ok.prototype.get;Ok.prototype.getKeys=Ok.prototype.O;Ok.prototype.getProperties=Ok.prototype.P;Ok.prototype.set=Ok.prototype.set;Ok.prototype.setProperties=Ok.prototype.I;Ok.prototype.unset=Ok.prototype.R;Ok.prototype.changed=Ok.prototype.s;\nOk.prototype.dispatchEvent=Ok.prototype.o;Ok.prototype.getRevision=Ok.prototype.L;Ok.prototype.on=Ok.prototype.H;Ok.prototype.once=Ok.prototype.M;Ok.prototype.un=Ok.prototype.K;Ok.prototype.unByKey=Ok.prototype.N;Sk.prototype.getActive=Sk.prototype.b;Sk.prototype.setActive=Sk.prototype.g;Sk.prototype.get=Sk.prototype.get;Sk.prototype.getKeys=Sk.prototype.O;Sk.prototype.getProperties=Sk.prototype.P;Sk.prototype.set=Sk.prototype.set;Sk.prototype.setProperties=Sk.prototype.I;Sk.prototype.unset=Sk.prototype.R;\nSk.prototype.changed=Sk.prototype.s;Sk.prototype.dispatchEvent=Sk.prototype.o;Sk.prototype.getRevision=Sk.prototype.L;Sk.prototype.on=Sk.prototype.H;Sk.prototype.once=Sk.prototype.M;Sk.prototype.un=Sk.prototype.K;Sk.prototype.unByKey=Sk.prototype.N;vy.prototype.getActive=vy.prototype.b;vy.prototype.setActive=vy.prototype.g;vy.prototype.get=vy.prototype.get;vy.prototype.getKeys=vy.prototype.O;vy.prototype.getProperties=vy.prototype.P;vy.prototype.set=vy.prototype.set;vy.prototype.setProperties=vy.prototype.I;\nvy.prototype.unset=vy.prototype.R;vy.prototype.changed=vy.prototype.s;vy.prototype.dispatchEvent=vy.prototype.o;vy.prototype.getRevision=vy.prototype.L;vy.prototype.on=vy.prototype.H;vy.prototype.once=vy.prototype.M;vy.prototype.un=vy.prototype.K;vy.prototype.unByKey=vy.prototype.N;al.prototype.getActive=al.prototype.b;al.prototype.setActive=al.prototype.g;al.prototype.get=al.prototype.get;al.prototype.getKeys=al.prototype.O;al.prototype.getProperties=al.prototype.P;al.prototype.set=al.prototype.set;\nal.prototype.setProperties=al.prototype.I;al.prototype.unset=al.prototype.R;al.prototype.changed=al.prototype.s;al.prototype.dispatchEvent=al.prototype.o;al.prototype.getRevision=al.prototype.L;al.prototype.on=al.prototype.H;al.prototype.once=al.prototype.M;al.prototype.un=al.prototype.K;al.prototype.unByKey=al.prototype.N;ql.prototype.getActive=ql.prototype.b;ql.prototype.setActive=ql.prototype.g;ql.prototype.get=ql.prototype.get;ql.prototype.getKeys=ql.prototype.O;ql.prototype.getProperties=ql.prototype.P;\nql.prototype.set=ql.prototype.set;ql.prototype.setProperties=ql.prototype.I;ql.prototype.unset=ql.prototype.R;ql.prototype.changed=ql.prototype.s;ql.prototype.dispatchEvent=ql.prototype.o;ql.prototype.getRevision=ql.prototype.L;ql.prototype.on=ql.prototype.H;ql.prototype.once=ql.prototype.M;ql.prototype.un=ql.prototype.K;ql.prototype.unByKey=ql.prototype.N;dl.prototype.getActive=dl.prototype.b;dl.prototype.setActive=dl.prototype.g;dl.prototype.get=dl.prototype.get;dl.prototype.getKeys=dl.prototype.O;\ndl.prototype.getProperties=dl.prototype.P;dl.prototype.set=dl.prototype.set;dl.prototype.setProperties=dl.prototype.I;dl.prototype.unset=dl.prototype.R;dl.prototype.changed=dl.prototype.s;dl.prototype.dispatchEvent=dl.prototype.o;dl.prototype.getRevision=dl.prototype.L;dl.prototype.on=dl.prototype.H;dl.prototype.once=dl.prototype.M;dl.prototype.un=dl.prototype.K;dl.prototype.unByKey=dl.prototype.N;zy.prototype.getActive=zy.prototype.b;zy.prototype.setActive=zy.prototype.g;zy.prototype.get=zy.prototype.get;\nzy.prototype.getKeys=zy.prototype.O;zy.prototype.getProperties=zy.prototype.P;zy.prototype.set=zy.prototype.set;zy.prototype.setProperties=zy.prototype.I;zy.prototype.unset=zy.prototype.R;zy.prototype.changed=zy.prototype.s;zy.prototype.dispatchEvent=zy.prototype.o;zy.prototype.getRevision=zy.prototype.L;zy.prototype.on=zy.prototype.H;zy.prototype.once=zy.prototype.M;zy.prototype.un=zy.prototype.K;zy.prototype.unByKey=zy.prototype.N;hl.prototype.getActive=hl.prototype.b;hl.prototype.setActive=hl.prototype.g;\nhl.prototype.get=hl.prototype.get;hl.prototype.getKeys=hl.prototype.O;hl.prototype.getProperties=hl.prototype.P;hl.prototype.set=hl.prototype.set;hl.prototype.setProperties=hl.prototype.I;hl.prototype.unset=hl.prototype.R;hl.prototype.changed=hl.prototype.s;hl.prototype.dispatchEvent=hl.prototype.o;hl.prototype.getRevision=hl.prototype.L;hl.prototype.on=hl.prototype.H;hl.prototype.once=hl.prototype.M;hl.prototype.un=hl.prototype.K;hl.prototype.unByKey=hl.prototype.N;ul.prototype.getGeometry=ul.prototype.W;\nul.prototype.getActive=ul.prototype.b;ul.prototype.setActive=ul.prototype.g;ul.prototype.get=ul.prototype.get;ul.prototype.getKeys=ul.prototype.O;ul.prototype.getProperties=ul.prototype.P;ul.prototype.set=ul.prototype.set;ul.prototype.setProperties=ul.prototype.I;ul.prototype.unset=ul.prototype.R;ul.prototype.changed=ul.prototype.s;ul.prototype.dispatchEvent=ul.prototype.o;ul.prototype.getRevision=ul.prototype.L;ul.prototype.on=ul.prototype.H;ul.prototype.once=ul.prototype.M;ul.prototype.un=ul.prototype.K;\nul.prototype.unByKey=ul.prototype.N;Ey.prototype.getActive=Ey.prototype.b;Ey.prototype.setActive=Ey.prototype.g;Ey.prototype.get=Ey.prototype.get;Ey.prototype.getKeys=Ey.prototype.O;Ey.prototype.getProperties=Ey.prototype.P;Ey.prototype.set=Ey.prototype.set;Ey.prototype.setProperties=Ey.prototype.I;Ey.prototype.unset=Ey.prototype.R;Ey.prototype.changed=Ey.prototype.s;Ey.prototype.dispatchEvent=Ey.prototype.o;Ey.prototype.getRevision=Ey.prototype.L;Ey.prototype.on=Ey.prototype.H;\nEy.prototype.once=Ey.prototype.M;Ey.prototype.un=Ey.prototype.K;Ey.prototype.unByKey=Ey.prototype.N;vl.prototype.getActive=vl.prototype.b;vl.prototype.setActive=vl.prototype.g;vl.prototype.get=vl.prototype.get;vl.prototype.getKeys=vl.prototype.O;vl.prototype.getProperties=vl.prototype.P;vl.prototype.set=vl.prototype.set;vl.prototype.setProperties=vl.prototype.I;vl.prototype.unset=vl.prototype.R;vl.prototype.changed=vl.prototype.s;vl.prototype.dispatchEvent=vl.prototype.o;\nvl.prototype.getRevision=vl.prototype.L;vl.prototype.on=vl.prototype.H;vl.prototype.once=vl.prototype.M;vl.prototype.un=vl.prototype.K;vl.prototype.unByKey=vl.prototype.N;xl.prototype.getActive=xl.prototype.b;xl.prototype.setActive=xl.prototype.g;xl.prototype.get=xl.prototype.get;xl.prototype.getKeys=xl.prototype.O;xl.prototype.getProperties=xl.prototype.P;xl.prototype.set=xl.prototype.set;xl.prototype.setProperties=xl.prototype.I;xl.prototype.unset=xl.prototype.R;xl.prototype.changed=xl.prototype.s;\nxl.prototype.dispatchEvent=xl.prototype.o;xl.prototype.getRevision=xl.prototype.L;xl.prototype.on=xl.prototype.H;xl.prototype.once=xl.prototype.M;xl.prototype.un=xl.prototype.K;xl.prototype.unByKey=xl.prototype.N;Vy.prototype.getActive=Vy.prototype.b;Vy.prototype.setActive=Vy.prototype.g;Vy.prototype.get=Vy.prototype.get;Vy.prototype.getKeys=Vy.prototype.O;Vy.prototype.getProperties=Vy.prototype.P;Vy.prototype.set=Vy.prototype.set;Vy.prototype.setProperties=Vy.prototype.I;Vy.prototype.unset=Vy.prototype.R;\nVy.prototype.changed=Vy.prototype.s;Vy.prototype.dispatchEvent=Vy.prototype.o;Vy.prototype.getRevision=Vy.prototype.L;Vy.prototype.on=Vy.prototype.H;Vy.prototype.once=Vy.prototype.M;Vy.prototype.un=Vy.prototype.K;Vy.prototype.unByKey=Vy.prototype.N;zl.prototype.getActive=zl.prototype.b;zl.prototype.setActive=zl.prototype.g;zl.prototype.get=zl.prototype.get;zl.prototype.getKeys=zl.prototype.O;zl.prototype.getProperties=zl.prototype.P;zl.prototype.set=zl.prototype.set;zl.prototype.setProperties=zl.prototype.I;\nzl.prototype.unset=zl.prototype.R;zl.prototype.changed=zl.prototype.s;zl.prototype.dispatchEvent=zl.prototype.o;zl.prototype.getRevision=zl.prototype.L;zl.prototype.on=zl.prototype.H;zl.prototype.once=zl.prototype.M;zl.prototype.un=zl.prototype.K;zl.prototype.unByKey=zl.prototype.N;Bl.prototype.getActive=Bl.prototype.b;Bl.prototype.setActive=Bl.prototype.g;Bl.prototype.get=Bl.prototype.get;Bl.prototype.getKeys=Bl.prototype.O;Bl.prototype.getProperties=Bl.prototype.P;Bl.prototype.set=Bl.prototype.set;\nBl.prototype.setProperties=Bl.prototype.I;Bl.prototype.unset=Bl.prototype.R;Bl.prototype.changed=Bl.prototype.s;Bl.prototype.dispatchEvent=Bl.prototype.o;Bl.prototype.getRevision=Bl.prototype.L;Bl.prototype.on=Bl.prototype.H;Bl.prototype.once=Bl.prototype.M;Bl.prototype.un=Bl.prototype.K;Bl.prototype.unByKey=Bl.prototype.N;Fl.prototype.getActive=Fl.prototype.b;Fl.prototype.setActive=Fl.prototype.g;Fl.prototype.get=Fl.prototype.get;Fl.prototype.getKeys=Fl.prototype.O;Fl.prototype.getProperties=Fl.prototype.P;\nFl.prototype.set=Fl.prototype.set;Fl.prototype.setProperties=Fl.prototype.I;Fl.prototype.unset=Fl.prototype.R;Fl.prototype.changed=Fl.prototype.s;Fl.prototype.dispatchEvent=Fl.prototype.o;Fl.prototype.getRevision=Fl.prototype.L;Fl.prototype.on=Fl.prototype.H;Fl.prototype.once=Fl.prototype.M;Fl.prototype.un=Fl.prototype.K;Fl.prototype.unByKey=Fl.prototype.N;iz.prototype.getActive=iz.prototype.b;iz.prototype.setActive=iz.prototype.g;iz.prototype.get=iz.prototype.get;iz.prototype.getKeys=iz.prototype.O;\niz.prototype.getProperties=iz.prototype.P;iz.prototype.set=iz.prototype.set;iz.prototype.setProperties=iz.prototype.I;iz.prototype.unset=iz.prototype.R;iz.prototype.changed=iz.prototype.s;iz.prototype.dispatchEvent=iz.prototype.o;iz.prototype.getRevision=iz.prototype.L;iz.prototype.on=iz.prototype.H;iz.prototype.once=iz.prototype.M;iz.prototype.un=iz.prototype.K;iz.prototype.unByKey=iz.prototype.N;lz.prototype.getActive=lz.prototype.b;lz.prototype.setActive=lz.prototype.g;lz.prototype.get=lz.prototype.get;\nlz.prototype.getKeys=lz.prototype.O;lz.prototype.getProperties=lz.prototype.P;lz.prototype.set=lz.prototype.set;lz.prototype.setProperties=lz.prototype.I;lz.prototype.unset=lz.prototype.R;lz.prototype.changed=lz.prototype.s;lz.prototype.dispatchEvent=lz.prototype.o;lz.prototype.getRevision=lz.prototype.L;lz.prototype.on=lz.prototype.H;lz.prototype.once=lz.prototype.M;lz.prototype.un=lz.prototype.K;lz.prototype.unByKey=lz.prototype.N;qz.prototype.getActive=qz.prototype.b;qz.prototype.setActive=qz.prototype.g;\nqz.prototype.get=qz.prototype.get;qz.prototype.getKeys=qz.prototype.O;qz.prototype.getProperties=qz.prototype.P;qz.prototype.set=qz.prototype.set;qz.prototype.setProperties=qz.prototype.I;qz.prototype.unset=qz.prototype.R;qz.prototype.changed=qz.prototype.s;qz.prototype.dispatchEvent=qz.prototype.o;qz.prototype.getRevision=qz.prototype.L;qz.prototype.on=qz.prototype.H;qz.prototype.once=qz.prototype.M;qz.prototype.un=qz.prototype.K;qz.prototype.unByKey=qz.prototype.N;bf.prototype.get=bf.prototype.get;\nbf.prototype.getKeys=bf.prototype.O;bf.prototype.getProperties=bf.prototype.P;bf.prototype.set=bf.prototype.set;bf.prototype.setProperties=bf.prototype.I;bf.prototype.unset=bf.prototype.R;bf.prototype.changed=bf.prototype.s;bf.prototype.dispatchEvent=bf.prototype.o;bf.prototype.getRevision=bf.prototype.L;bf.prototype.on=bf.prototype.H;bf.prototype.once=bf.prototype.M;bf.prototype.un=bf.prototype.K;bf.prototype.unByKey=bf.prototype.N;df.prototype.getClosestPoint=df.prototype.pb;\ndf.prototype.getExtent=df.prototype.J;df.prototype.simplify=df.prototype.yb;df.prototype.transform=df.prototype.kb;df.prototype.get=df.prototype.get;df.prototype.getKeys=df.prototype.O;df.prototype.getProperties=df.prototype.P;df.prototype.set=df.prototype.set;df.prototype.setProperties=df.prototype.I;df.prototype.unset=df.prototype.R;df.prototype.changed=df.prototype.s;df.prototype.dispatchEvent=df.prototype.o;df.prototype.getRevision=df.prototype.L;df.prototype.on=df.prototype.H;\ndf.prototype.once=df.prototype.M;df.prototype.un=df.prototype.K;df.prototype.unByKey=df.prototype.N;Qx.prototype.getFirstCoordinate=Qx.prototype.Jb;Qx.prototype.getLastCoordinate=Qx.prototype.Kb;Qx.prototype.getLayout=Qx.prototype.Lb;Qx.prototype.getClosestPoint=Qx.prototype.pb;Qx.prototype.getExtent=Qx.prototype.J;Qx.prototype.simplify=Qx.prototype.yb;Qx.prototype.get=Qx.prototype.get;Qx.prototype.getKeys=Qx.prototype.O;Qx.prototype.getProperties=Qx.prototype.P;Qx.prototype.set=Qx.prototype.set;\nQx.prototype.setProperties=Qx.prototype.I;Qx.prototype.unset=Qx.prototype.R;Qx.prototype.changed=Qx.prototype.s;Qx.prototype.dispatchEvent=Qx.prototype.o;Qx.prototype.getRevision=Qx.prototype.L;Qx.prototype.on=Qx.prototype.H;Qx.prototype.once=Qx.prototype.M;Qx.prototype.un=Qx.prototype.K;Qx.prototype.unByKey=Qx.prototype.N;js.prototype.getClosestPoint=js.prototype.pb;js.prototype.getExtent=js.prototype.J;js.prototype.simplify=js.prototype.yb;js.prototype.transform=js.prototype.kb;\njs.prototype.get=js.prototype.get;js.prototype.getKeys=js.prototype.O;js.prototype.getProperties=js.prototype.P;js.prototype.set=js.prototype.set;js.prototype.setProperties=js.prototype.I;js.prototype.unset=js.prototype.R;js.prototype.changed=js.prototype.s;js.prototype.dispatchEvent=js.prototype.o;js.prototype.getRevision=js.prototype.L;js.prototype.on=js.prototype.H;js.prototype.once=js.prototype.M;js.prototype.un=js.prototype.K;js.prototype.unByKey=js.prototype.N;\nwf.prototype.getFirstCoordinate=wf.prototype.Jb;wf.prototype.getLastCoordinate=wf.prototype.Kb;wf.prototype.getLayout=wf.prototype.Lb;wf.prototype.getClosestPoint=wf.prototype.pb;wf.prototype.getExtent=wf.prototype.J;wf.prototype.simplify=wf.prototype.yb;wf.prototype.transform=wf.prototype.kb;wf.prototype.get=wf.prototype.get;wf.prototype.getKeys=wf.prototype.O;wf.prototype.getProperties=wf.prototype.P;wf.prototype.set=wf.prototype.set;wf.prototype.setProperties=wf.prototype.I;\nwf.prototype.unset=wf.prototype.R;wf.prototype.changed=wf.prototype.s;wf.prototype.dispatchEvent=wf.prototype.o;wf.prototype.getRevision=wf.prototype.L;wf.prototype.on=wf.prototype.H;wf.prototype.once=wf.prototype.M;wf.prototype.un=wf.prototype.K;wf.prototype.unByKey=wf.prototype.N;T.prototype.getFirstCoordinate=T.prototype.Jb;T.prototype.getLastCoordinate=T.prototype.Kb;T.prototype.getLayout=T.prototype.Lb;T.prototype.getClosestPoint=T.prototype.pb;T.prototype.getExtent=T.prototype.J;\nT.prototype.simplify=T.prototype.yb;T.prototype.transform=T.prototype.kb;T.prototype.get=T.prototype.get;T.prototype.getKeys=T.prototype.O;T.prototype.getProperties=T.prototype.P;T.prototype.set=T.prototype.set;T.prototype.setProperties=T.prototype.I;T.prototype.unset=T.prototype.R;T.prototype.changed=T.prototype.s;T.prototype.dispatchEvent=T.prototype.o;T.prototype.getRevision=T.prototype.L;T.prototype.on=T.prototype.H;T.prototype.once=T.prototype.M;T.prototype.un=T.prototype.K;\nT.prototype.unByKey=T.prototype.N;U.prototype.getFirstCoordinate=U.prototype.Jb;U.prototype.getLastCoordinate=U.prototype.Kb;U.prototype.getLayout=U.prototype.Lb;U.prototype.getClosestPoint=U.prototype.pb;U.prototype.getExtent=U.prototype.J;U.prototype.simplify=U.prototype.yb;U.prototype.transform=U.prototype.kb;U.prototype.get=U.prototype.get;U.prototype.getKeys=U.prototype.O;U.prototype.getProperties=U.prototype.P;U.prototype.set=U.prototype.set;U.prototype.setProperties=U.prototype.I;\nU.prototype.unset=U.prototype.R;U.prototype.changed=U.prototype.s;U.prototype.dispatchEvent=U.prototype.o;U.prototype.getRevision=U.prototype.L;U.prototype.on=U.prototype.H;U.prototype.once=U.prototype.M;U.prototype.un=U.prototype.K;U.prototype.unByKey=U.prototype.N;$r.prototype.getFirstCoordinate=$r.prototype.Jb;$r.prototype.getLastCoordinate=$r.prototype.Kb;$r.prototype.getLayout=$r.prototype.Lb;$r.prototype.getClosestPoint=$r.prototype.pb;$r.prototype.getExtent=$r.prototype.J;\n$r.prototype.simplify=$r.prototype.yb;$r.prototype.transform=$r.prototype.kb;$r.prototype.get=$r.prototype.get;$r.prototype.getKeys=$r.prototype.O;$r.prototype.getProperties=$r.prototype.P;$r.prototype.set=$r.prototype.set;$r.prototype.setProperties=$r.prototype.I;$r.prototype.unset=$r.prototype.R;$r.prototype.changed=$r.prototype.s;$r.prototype.dispatchEvent=$r.prototype.o;$r.prototype.getRevision=$r.prototype.L;$r.prototype.on=$r.prototype.H;$r.prototype.once=$r.prototype.M;$r.prototype.un=$r.prototype.K;\n$r.prototype.unByKey=$r.prototype.N;V.prototype.getFirstCoordinate=V.prototype.Jb;V.prototype.getLastCoordinate=V.prototype.Kb;V.prototype.getLayout=V.prototype.Lb;V.prototype.getClosestPoint=V.prototype.pb;V.prototype.getExtent=V.prototype.J;V.prototype.simplify=V.prototype.yb;V.prototype.transform=V.prototype.kb;V.prototype.get=V.prototype.get;V.prototype.getKeys=V.prototype.O;V.prototype.getProperties=V.prototype.P;V.prototype.set=V.prototype.set;V.prototype.setProperties=V.prototype.I;\nV.prototype.unset=V.prototype.R;V.prototype.changed=V.prototype.s;V.prototype.dispatchEvent=V.prototype.o;V.prototype.getRevision=V.prototype.L;V.prototype.on=V.prototype.H;V.prototype.once=V.prototype.M;V.prototype.un=V.prototype.K;V.prototype.unByKey=V.prototype.N;D.prototype.getFirstCoordinate=D.prototype.Jb;D.prototype.getLastCoordinate=D.prototype.Kb;D.prototype.getLayout=D.prototype.Lb;D.prototype.getClosestPoint=D.prototype.pb;D.prototype.getExtent=D.prototype.J;D.prototype.simplify=D.prototype.yb;\nD.prototype.transform=D.prototype.kb;D.prototype.get=D.prototype.get;D.prototype.getKeys=D.prototype.O;D.prototype.getProperties=D.prototype.P;D.prototype.set=D.prototype.set;D.prototype.setProperties=D.prototype.I;D.prototype.unset=D.prototype.R;D.prototype.changed=D.prototype.s;D.prototype.dispatchEvent=D.prototype.o;D.prototype.getRevision=D.prototype.L;D.prototype.on=D.prototype.H;D.prototype.once=D.prototype.M;D.prototype.un=D.prototype.K;D.prototype.unByKey=D.prototype.N;\nE.prototype.getFirstCoordinate=E.prototype.Jb;E.prototype.getLastCoordinate=E.prototype.Kb;E.prototype.getLayout=E.prototype.Lb;E.prototype.getClosestPoint=E.prototype.pb;E.prototype.getExtent=E.prototype.J;E.prototype.simplify=E.prototype.yb;E.prototype.transform=E.prototype.kb;E.prototype.get=E.prototype.get;E.prototype.getKeys=E.prototype.O;E.prototype.getProperties=E.prototype.P;E.prototype.set=E.prototype.set;E.prototype.setProperties=E.prototype.I;E.prototype.unset=E.prototype.R;\nE.prototype.changed=E.prototype.s;E.prototype.dispatchEvent=E.prototype.o;E.prototype.getRevision=E.prototype.L;E.prototype.on=E.prototype.H;E.prototype.once=E.prototype.M;E.prototype.un=E.prototype.K;E.prototype.unByKey=E.prototype.N;Hs.prototype.readFeatures=Hs.prototype.Ba;Is.prototype.readFeatures=Is.prototype.Ba;Is.prototype.readFeatures=Is.prototype.Ba;qh.prototype.get=qh.prototype.get;qh.prototype.getKeys=qh.prototype.O;qh.prototype.getProperties=qh.prototype.P;qh.prototype.set=qh.prototype.set;\nqh.prototype.setProperties=qh.prototype.I;qh.prototype.unset=qh.prototype.R;qh.prototype.changed=qh.prototype.s;qh.prototype.dispatchEvent=qh.prototype.o;qh.prototype.getRevision=qh.prototype.L;qh.prototype.on=qh.prototype.H;qh.prototype.once=qh.prototype.M;qh.prototype.un=qh.prototype.K;qh.prototype.unByKey=qh.prototype.N;Th.prototype.getMap=Th.prototype.g;Th.prototype.setMap=Th.prototype.setMap;Th.prototype.setTarget=Th.prototype.f;Th.prototype.get=Th.prototype.get;Th.prototype.getKeys=Th.prototype.O;\nTh.prototype.getProperties=Th.prototype.P;Th.prototype.set=Th.prototype.set;Th.prototype.setProperties=Th.prototype.I;Th.prototype.unset=Th.prototype.R;Th.prototype.changed=Th.prototype.s;Th.prototype.dispatchEvent=Th.prototype.o;Th.prototype.getRevision=Th.prototype.L;Th.prototype.on=Th.prototype.H;Th.prototype.once=Th.prototype.M;Th.prototype.un=Th.prototype.K;Th.prototype.unByKey=Th.prototype.N;ei.prototype.getMap=ei.prototype.g;ei.prototype.setMap=ei.prototype.setMap;ei.prototype.setTarget=ei.prototype.f;\nei.prototype.get=ei.prototype.get;ei.prototype.getKeys=ei.prototype.O;ei.prototype.getProperties=ei.prototype.P;ei.prototype.set=ei.prototype.set;ei.prototype.setProperties=ei.prototype.I;ei.prototype.unset=ei.prototype.R;ei.prototype.changed=ei.prototype.s;ei.prototype.dispatchEvent=ei.prototype.o;ei.prototype.getRevision=ei.prototype.L;ei.prototype.on=ei.prototype.H;ei.prototype.once=ei.prototype.M;ei.prototype.un=ei.prototype.K;ei.prototype.unByKey=ei.prototype.N;fi.prototype.getMap=fi.prototype.g;\nfi.prototype.setMap=fi.prototype.setMap;fi.prototype.setTarget=fi.prototype.f;fi.prototype.get=fi.prototype.get;fi.prototype.getKeys=fi.prototype.O;fi.prototype.getProperties=fi.prototype.P;fi.prototype.set=fi.prototype.set;fi.prototype.setProperties=fi.prototype.I;fi.prototype.unset=fi.prototype.R;fi.prototype.changed=fi.prototype.s;fi.prototype.dispatchEvent=fi.prototype.o;fi.prototype.getRevision=fi.prototype.L;fi.prototype.on=fi.prototype.H;fi.prototype.once=fi.prototype.M;fi.prototype.un=fi.prototype.K;\nfi.prototype.unByKey=fi.prototype.N;qr.prototype.getMap=qr.prototype.g;qr.prototype.setMap=qr.prototype.setMap;qr.prototype.setTarget=qr.prototype.f;qr.prototype.get=qr.prototype.get;qr.prototype.getKeys=qr.prototype.O;qr.prototype.getProperties=qr.prototype.P;qr.prototype.set=qr.prototype.set;qr.prototype.setProperties=qr.prototype.I;qr.prototype.unset=qr.prototype.R;qr.prototype.changed=qr.prototype.s;qr.prototype.dispatchEvent=qr.prototype.o;qr.prototype.getRevision=qr.prototype.L;\nqr.prototype.on=qr.prototype.H;qr.prototype.once=qr.prototype.M;qr.prototype.un=qr.prototype.K;qr.prototype.unByKey=qr.prototype.N;Wh.prototype.getMap=Wh.prototype.g;Wh.prototype.setMap=Wh.prototype.setMap;Wh.prototype.setTarget=Wh.prototype.f;Wh.prototype.get=Wh.prototype.get;Wh.prototype.getKeys=Wh.prototype.O;Wh.prototype.getProperties=Wh.prototype.P;Wh.prototype.set=Wh.prototype.set;Wh.prototype.setProperties=Wh.prototype.I;Wh.prototype.unset=Wh.prototype.R;Wh.prototype.changed=Wh.prototype.s;\nWh.prototype.dispatchEvent=Wh.prototype.o;Wh.prototype.getRevision=Wh.prototype.L;Wh.prototype.on=Wh.prototype.H;Wh.prototype.once=Wh.prototype.M;Wh.prototype.un=Wh.prototype.K;Wh.prototype.unByKey=Wh.prototype.N;vr.prototype.getMap=vr.prototype.g;vr.prototype.setMap=vr.prototype.setMap;vr.prototype.setTarget=vr.prototype.f;vr.prototype.get=vr.prototype.get;vr.prototype.getKeys=vr.prototype.O;vr.prototype.getProperties=vr.prototype.P;vr.prototype.set=vr.prototype.set;vr.prototype.setProperties=vr.prototype.I;\nvr.prototype.unset=vr.prototype.R;vr.prototype.changed=vr.prototype.s;vr.prototype.dispatchEvent=vr.prototype.o;vr.prototype.getRevision=vr.prototype.L;vr.prototype.on=vr.prototype.H;vr.prototype.once=vr.prototype.M;vr.prototype.un=vr.prototype.K;vr.prototype.unByKey=vr.prototype.N;Yh.prototype.getMap=Yh.prototype.g;Yh.prototype.setMap=Yh.prototype.setMap;Yh.prototype.setTarget=Yh.prototype.f;Yh.prototype.get=Yh.prototype.get;Yh.prototype.getKeys=Yh.prototype.O;Yh.prototype.getProperties=Yh.prototype.P;\nYh.prototype.set=Yh.prototype.set;Yh.prototype.setProperties=Yh.prototype.I;Yh.prototype.unset=Yh.prototype.R;Yh.prototype.changed=Yh.prototype.s;Yh.prototype.dispatchEvent=Yh.prototype.o;Yh.prototype.getRevision=Yh.prototype.L;Yh.prototype.on=Yh.prototype.H;Yh.prototype.once=Yh.prototype.M;Yh.prototype.un=Yh.prototype.K;Yh.prototype.unByKey=Yh.prototype.N;Jr.prototype.getMap=Jr.prototype.g;Jr.prototype.setMap=Jr.prototype.setMap;Jr.prototype.setTarget=Jr.prototype.f;Jr.prototype.get=Jr.prototype.get;\nJr.prototype.getKeys=Jr.prototype.O;Jr.prototype.getProperties=Jr.prototype.P;Jr.prototype.set=Jr.prototype.set;Jr.prototype.setProperties=Jr.prototype.I;Jr.prototype.unset=Jr.prototype.R;Jr.prototype.changed=Jr.prototype.s;Jr.prototype.dispatchEvent=Jr.prototype.o;Jr.prototype.getRevision=Jr.prototype.L;Jr.prototype.on=Jr.prototype.H;Jr.prototype.once=Jr.prototype.M;Jr.prototype.un=Jr.prototype.K;Jr.prototype.unByKey=Jr.prototype.N;Or.prototype.getMap=Or.prototype.g;Or.prototype.setMap=Or.prototype.setMap;\nOr.prototype.setTarget=Or.prototype.f;Or.prototype.get=Or.prototype.get;Or.prototype.getKeys=Or.prototype.O;Or.prototype.getProperties=Or.prototype.P;Or.prototype.set=Or.prototype.set;Or.prototype.setProperties=Or.prototype.I;Or.prototype.unset=Or.prototype.R;Or.prototype.changed=Or.prototype.s;Or.prototype.dispatchEvent=Or.prototype.o;Or.prototype.getRevision=Or.prototype.L;Or.prototype.on=Or.prototype.H;Or.prototype.once=Or.prototype.M;Or.prototype.un=Or.prototype.K;Or.prototype.unByKey=Or.prototype.N;\n  return OPENLAYERS.ol;\n}));\n\n"
  },
  {
    "path": "libs/other/BinaryHeap.js",
    "content": "/*\n** Binary Heap implementation in Javascript\n** From: http://eloquentjavascript.net/1st_edition/appendix2.html\n**\n** Copyright (c) 2007 Marijn Haverbeke, last modified on November 28 2013.\n**\n** Licensed under a Creative Commons attribution-noncommercial license. \n** All code in this book may also be considered licensed under an MIT license.\n*/\n\n\n\nfunction BinaryHeap(scoreFunction){\n  this.content = [];\n  this.scoreFunction = scoreFunction;\n}\n\nBinaryHeap.prototype = {\n  push: function(element) {\n    // Add the new element to the end of the array.\n    this.content.push(element);\n    // Allow it to bubble up.\n    this.bubbleUp(this.content.length - 1);\n  },\n\n  pop: function() {\n    // Store the first element so we can return it later.\n    var result = this.content[0];\n    // Get the element at the end of the array.\n    var end = this.content.pop();\n    // If there are any elements left, put the end element at the\n    // start, and let it sink down.\n    if (this.content.length > 0) {\n      this.content[0] = end;\n      this.sinkDown(0);\n    }\n    return result;\n  },\n\n  remove: function(node) {\n    var length = this.content.length;\n    // To remove a value, we must search through the array to find\n    // it.\n    for (var i = 0; i < length; i++) {\n      if (this.content[i] != node) continue;\n      // When it is found, the process seen in 'pop' is repeated\n      // to fill up the hole.\n      var end = this.content.pop();\n      // If the element we popped was the one we needed to remove,\n      // we're done.\n      if (i == length - 1) break;\n      // Otherwise, we replace the removed element with the popped\n      // one, and allow it to float up or sink down as appropriate.\n      this.content[i] = end;\n      this.bubbleUp(i);\n      this.sinkDown(i);\n      break;\n    }\n  },\n\n  size: function() {\n    return this.content.length;\n  },\n\n  bubbleUp: function(n) {\n    // Fetch the element that has to be moved.\n    var element = this.content[n], score = this.scoreFunction(element);\n    // When at 0, an element can not go up any further.\n    while (n > 0) {\n      // Compute the parent element's index, and fetch it.\n      var parentN = Math.floor((n + 1) / 2) - 1,\n      parent = this.content[parentN];\n      // If the parent has a lesser score, things are in order and we\n      // are done.\n      if (score >= this.scoreFunction(parent))\n        break;\n\n      // Otherwise, swap the parent with the current element and\n      // continue.\n      this.content[parentN] = element;\n      this.content[n] = parent;\n      n = parentN;\n    }\n  },\n\n  sinkDown: function(n) {\n    // Look up the target element and its score.\n    var length = this.content.length,\n    element = this.content[n],\n    elemScore = this.scoreFunction(element);\n\n    while(true) {\n      // Compute the indices of the child elements.\n      var child2N = (n + 1) * 2, child1N = child2N - 1;\n      // This is used to store the new position of the element,\n      // if any.\n      var swap = null;\n      // If the first child exists (is inside the array)...\n      if (child1N < length) {\n        // Look it up and compute its score.\n        var child1 = this.content[child1N],\n        child1Score = this.scoreFunction(child1);\n        // If the score is less than our element's, we need to swap.\n        if (child1Score < elemScore)\n          swap = child1N;\n      }\n      // Do the same checks for the other child.\n      if (child2N < length) {\n        var child2 = this.content[child2N],\n        child2Score = this.scoreFunction(child2);\n        if (child2Score < (swap == null ? elemScore : child1Score))\n          swap = child2N;\n      }\n\n      // No need to swap further, we are done.\n      if (swap == null) break;\n\n      // Otherwise, swap and continue.\n      this.content[n] = this.content[swap];\n      this.content[swap] = element;\n      n = swap;\n    }\n  }\n};\n"
  },
  {
    "path": "libs/other/stats.js",
    "content": "// stats.js -\n// @author mrdoob http://github.com/mrdoob/stats.js\n\n// The MIT License\n// \n// Copyright (c) 2009-2016 stats.js author mrdoob / http://mrdoob.com/\n// \n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n// \n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n */\n\nvar Stats = function () {\n\n\tthis.fps = 0;\n\tvar mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';\n\tcontainer.addEventListener( 'click', function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tshowPanel( ++ mode % container.children.length );\n\n\t}, false );\n\n\t//\n\n\tfunction addPanel( panel ) {\n\n\t\tcontainer.appendChild( panel.dom );\n\t\treturn panel;\n\n\t}\n\n\tfunction showPanel( id ) {\n\n\t\tfor ( var i = 0; i < container.children.length; i ++ ) {\n\n\t\t\tcontainer.children[ i ].style.display = i === id ? 'block' : 'none';\n\n\t\t}\n\n\t\tmode = id;\n\n\t}\n\n\t//\n\n\tvar beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;\n\n\tvar fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );\n\tvar msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );\n\n\tif ( self.performance && self.performance.memory ) {\n\n\t\tvar memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );\n\n\t}\n\n\tshowPanel( 0 );\n\n\treturn {\n\n\t\tREVISION: 16,\n\n\t\tdom: container,\n\n\t\taddPanel: addPanel,\n\t\tshowPanel: showPanel,\n\n\t\tbegin: function () {\n\n\t\t\tbeginTime = ( performance || Date ).now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tframes ++;\n\n\t\t\tvar time = ( performance || Date ).now();\n\n\t\t\tmsPanel.update( time - beginTime, 200 );\n\n\t\t\tif ( time > prevTime + 3000 ) {\n\n\t\t\t\tthis.fps = ( frames * 1000 ) / ( time - prevTime );\n\t\t\t\tfpsPanel.update( this.fps, 100 );\n\t\t\t\t\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t\tif ( memPanel ) {\n\n\t\t\t\t\tvar memory = performance.memory;\n\t\t\t\t\tmemPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tbeginTime = this.end();\n\n\t\t},\n\n\t\t// Backwards Compatibility\n\n\t\tdomElement: container,\n\t\tsetMode: showPanel\n\n\t};\n\n};\n\nStats.Panel = function ( name, fg, bg ) {\n\n\tvar min = Infinity, max = 0, round = Math.round;\n\tvar PR = round( window.devicePixelRatio || 1 );\n\n\tvar WIDTH = 80 * PR, HEIGHT = 48 * PR,\n\t\t\tTEXT_X = 3 * PR, TEXT_Y = 2 * PR,\n\t\t\tGRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,\n\t\t\tGRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;\n\n\tvar canvas = document.createElement( 'canvas' );\n\tcanvas.width = WIDTH;\n\tcanvas.height = HEIGHT;\n\tcanvas.style.cssText = 'width:80px;height:48px';\n\n\tvar context = canvas.getContext( '2d' );\n\tcontext.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';\n\tcontext.textBaseline = 'top';\n\n\tcontext.fillStyle = bg;\n\tcontext.fillRect( 0, 0, WIDTH, HEIGHT );\n\n\tcontext.fillStyle = fg;\n\tcontext.fillText( name, TEXT_X, TEXT_Y );\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\tcontext.fillStyle = bg;\n\tcontext.globalAlpha = 0.9;\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\treturn {\n\n\t\tdom: canvas,\n\n\t\tupdate: function ( value, maxValue ) {\n\n\t\t\tmin = Math.min( min, value );\n\t\t\tmax = Math.max( max, value );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 1;\n\t\t\tcontext.fillRect( 0, 0, WIDTH, GRAPH_Y );\n\t\t\tcontext.fillStyle = fg;\n\t\t\tcontext.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );\n\n\t\t\tcontext.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 0.9;\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );\n\n\t\t}\n\n\t};\n\n};\n\nif ( typeof module === 'object' ) {\n\n\tmodule.exports = Stats;\n\n}\n"
  },
  {
    "path": "libs/plasio/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Uday Verma, uday.karan@gmail.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "libs/plasio/js/laslaz.js",
    "content": "// laslaz.js\n// LAS/LAZ loading\n//\n\n//var common = require(\"./common\"),\n//\tPromise = require(\"bluebird\");\n\n(function(scope) {\n\t\"use strict\";\n\n\tvar pointFormatReaders = {\n\t\t0: function(dv) {\n\t\t\treturn {\n\t\t\t\t\"position\": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n\t\t\t\t\"intensity\": dv.getUint16(12, true),\n\t\t\t\t\"classification\": dv.getUint8(16, true)\n\t\t\t};\n\t\t},\n\t\t1: function(dv) {\n\t\t\treturn {\n\t\t\t\t\"position\": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n\t\t\t\t\"intensity\": dv.getUint16(12, true),\n\t\t\t\t\"classification\": dv.getUint8(16, true)\n\t\t\t};\n\t\t},\n\t\t2: function(dv) {\n\t\t\treturn {\n\t\t\t\t\"position\": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n\t\t\t\t\"intensity\": dv.getUint16(12, true),\n\t\t\t\t\"classification\": dv.getUint8(16, true),\n\t\t\t\t\"color\": [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)]\n\t\t\t};\n\t\t},\n\t\t3: function(dv) {\n\t\t\treturn {\n\t\t\t\t\"position\": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)],\n\t\t\t\t\"intensity\": dv.getUint16(12, true),\n\t\t\t\t\"classification\": dv.getUint8(16, true),\n\t\t\t\t\"color\": [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)]\n\t\t\t};\n\t\t}\n\t};\n\n\tfunction readAs(buf, Type, offset, count) {\n\t\tcount = (count === undefined || count === 0 ? 1 : count);\n\t\tvar sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n\t\tvar r = new Type(sub);\n\t\tif (count === undefined || count === 1)\n\t\t\treturn r[0];\n\n\t\tvar ret = [];\n\t\tfor (var i = 0 ; i < count ; i ++) {\n\t\t\tret.push(r[i]);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tfunction parseLASHeader(arraybuffer) {\n\t\tvar o = {};\n\n\t\to.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3);\n\t\to.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8);\n\t\to.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1);\n\t\to.pointsCount = readAs(arraybuffer, Uint32Array, 32*3 + 11);\n\n\n\t\tvar start = 32*3 + 35;\n\t\to.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24; // 8*3\n\t\to.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24;\n\n\n\n\t\tvar bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48; // 8*6;\n\t\to.maxs = [bounds[0], bounds[2], bounds[4]];\n\t\to.mins = [bounds[1], bounds[3], bounds[5]];\n\n\t\treturn o;\n\t}\n\n\tvar msgIndex = 0;\n\tvar waitHandlers = {};\n\n\t// This method is scope-wide since the nacl module uses this fuction to notify\n\t// us of events\n\tscope.handleMessage = function(message_event) {\n\t\tvar msg = message_event.data;\n\t\tvar resolver = waitHandlers[msg.id];\n\t\tdelete waitHandlers[msg.id];\n\n\t\t// call the callback in a separate context, make sure we've cleaned our\n\t\t// state out before the callback is invoked since it may queue more doExchanges\n\t\tsetTimeout(function() { \n\t\t\tif (msg.error)\n\t\t\t\treturn resolver.reject(new Error(msg.message || \"Unknown Error\"));\n\n\t\t\tif (msg.hasOwnProperty('count') && msg.hasOwnProperty('hasMoreData')) {\n\t\t\t\treturn resolver.resolve({\n\t\t\t\t\tbuffer: msg.result,\n\t\t\t\t\tcount: msg.count,\n\t\t\t\t\thasMoreData: msg.hasMoreData});\n\t\t\t}\n\n\t\t\tresolver.resolve(msg.result);\n\t\t}, 0);\n\t};\n\n\tvar doDataExchange = function(cmd, callback) {\n\t\tcmd.id = msgIndex.toString();\n\t\tmsgIndex ++;\n\n\t\tvar resolver = Promise.defer();\n\t\twaitHandlers[cmd.id] = resolver;\n\n\t\tnacl_module.postMessage(cmd);\n\n\t\treturn resolver.promise.cancellable();\n\t};\n\n\t// LAS Loader\n\t// Loads uncompressed files\n\t//\n\tvar LASLoader = function(arraybuffer) {\n\t\tthis.arraybuffer = arraybuffer;\n\t};\n\n\tLASLoader.prototype.open = function() {\n\t\t// nothing needs to be done to open this file\n\t\t//\n\t\tthis.readOffset = 0;\n\t\treturn new Promise(function(res, rej) {\n\t\t\tsetTimeout(res, 0);\n\t\t});\n\t};\n\n\tLASLoader.prototype.getHeader = function() {\n\t\tvar o = this;\n\n\t\treturn new Promise(function(res, rej) {\n\t\t\tsetTimeout(function() {\n\t\t\t\to.header = parseLASHeader(o.arraybuffer);\n\t\t\t\tres(o.header);\n\t\t\t}, 0);\n\t\t});\n\t};\n\n\tLASLoader.prototype.readData = function(count, offset, skip) {\n\t\tvar o = this;\n\n\t\treturn new Promise(function(res, rej) {\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (!o.header)\n\t\t\t\t\treturn rej(new Error(\"Cannot start reading data till a header request is issued\"));\n\n\t\t\t\tvar start;\n\t\t\t\tif (skip <= 1) {\n\t\t\t\t\tcount = Math.min(count, o.header.pointsCount - o.readOffset);\n\t\t\t\t\tstart = o.header.pointsOffset + o.readOffset * o.header.pointsStructSize;\n\t\t\t\t\tvar end = start + count * o.header.pointsStructSize;\n\t\t\t\t\tres({\n\t\t\t\t\t\tbuffer: o.arraybuffer.slice(start, end),\n\t\t\t\t\t\tcount: count,\n\t\t\t\t\t\thasMoreData: o.readOffset + count < o.header.pointsCount});\n\t\t\t\t\to.readOffset += count;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar pointsToRead = Math.min(count * skip, o.header.pointsCount - o.readOffset);\n\t\t\t\t\tvar bufferSize = Math.ceil(pointsToRead / skip);\n\t\t\t\t\tvar pointsRead = 0;\n\n\t\t\t\t\tvar buf = new Uint8Array(bufferSize * o.header.pointsStructSize);\n\t\t\t\t\tfor (var i = 0 ; i < pointsToRead ; i ++) {\n\t\t\t\t\t\tif (i % skip === 0) {\n\t\t\t\t\t\t\tstart = o.header.pointsOffset + o.readOffset * o.header.pointsStructSize;\n\t\t\t\t\t\t\tvar src = new Uint8Array(o.arraybuffer, start, o.header.pointsStructSize);\n\n\t\t\t\t\t\t\tbuf.set(src, pointsRead * o.header.pointsStructSize);\n\t\t\t\t\t\t\tpointsRead ++;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\to.readOffset ++;\n\t\t\t\t\t}\n\n\t\t\t\t\tres({\n\t\t\t\t\t\tbuffer: buf.buffer,\n\t\t\t\t\t\tcount: pointsRead,\n\t\t\t\t\t\thasMoreData: o.readOffset < o.header.pointsCount\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t});\n\t};\n\n\tLASLoader.prototype.close = function() {\n\t\tvar o = this;\n\t\treturn new Promise(function(res, rej) {\n\t\t\to.arraybuffer = null;\n\t\t\tsetTimeout(res, 0);\n\t\t});\n\t};\n\n\t// LAZ Loader\n\t// Uses NaCL module to load LAZ files\n\t//\n\tvar LAZLoader = function(arraybuffer) {\n\t\tthis.arraybuffer = arraybuffer;\n\t\t\n\t\tlet workerPath = Potree.scriptPath + \"/workers/LASLAZWorker.js\";\n\t\tthis.ww = Potree.workerPool.getWorker(workerPath);\n\n\t\tthis.nextCB = null;\n\t\tvar o = this;\n\n\t\tthis.ww.onmessage = function(e) {\n\t\t\tif (o.nextCB !== null) {\n\t\t\t\to.nextCB(e.data);\n\t\t\t\to.nextCB = null;\n\t\t\t}\n\t\t};\n\n\t\tthis.dorr = function(req, cb) {\n\t\t\to.nextCB = cb;\n\t\t\to.ww.postMessage(req);\n\t\t};\n\t};\n\n\tLAZLoader.prototype.open = function() {\n\n\t\t// nothing needs to be done to open this file\n\t\t//\n\t\tvar o = this;\n\t\treturn new Promise(function(res, rej) {\n\t\t\to.dorr({type:\"open\", arraybuffer: o.arraybuffer}, function(r) {\n\t\t\t\tif (r.status !== 1)\n\t\t\t\t\treturn rej(new Error(\"Failed to open file\"));\n\n\t\t\t\tres(true);\n\t\t\t});\n\t\t});\n\t};\n\n\tLAZLoader.prototype.getHeader = function() {\n\t\tvar o = this;\n\n\t\treturn new Promise(function(res, rej) {\n\t\t\to.dorr({type:'header'}, function(r) {\n\t\t\t\tif (r.status !== 1)\n\t\t\t\t\treturn rej(new Error(\"Failed to get header\"));\n\n\t\t\t\tres(r.header);\n\t\t\t});\n\t\t});\n\t};\n\n\tLAZLoader.prototype.readData = function(count, offset, skip) {\n\t\tvar o = this;\n\n\t\treturn new Promise(function(res, rej) {\n\t\t\to.dorr({type:'read', count: count, offset: offset, skip: skip}, function(r) {\n\t\t\t\tif (r.status !== 1)\n\t\t\t\t\treturn rej(new Error(\"Failed to read data\"));\n\t\t\t\tres({\n\t\t\t\t\tbuffer: r.buffer,\n\t\t\t\t\tcount: r.count,\n\t\t\t\t\thasMoreData: r.hasMoreData\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t};\n\n\tLAZLoader.prototype.close = function() {\n\t\tvar o = this;\n\n\t\treturn new Promise(function(res, rej) {\n\t\t\to.dorr({type:'close'}, function(r) {\n\t\t\t\tlet workerPath = Potree.scriptPath + \"/workers/LASLAZWorker.js\";\n\t\t\t\tPotree.workerPool.returnWorker(workerPath, o.ww);\n\t\t\t\n\t\t\t\tif (r.status !== 1)\n\t\t\t\t\treturn rej(new Error(\"Failed to close file\"));\n\n\t\t\t\tres(true);\n\t\t\t});\n\t\t});\n\t};\n\n\t// A single consistent interface for loading LAS/LAZ files\n\tvar LASFile = function(arraybuffer) {\n\t\tthis.arraybuffer = arraybuffer;\n\n\t\tthis.determineVersion();\n\t\tif (this.version > 12)\n\t\t\tthrow new Error(\"Only file versions <= 1.2 are supported at this time\");\n\n\t\tthis.determineFormat();\n\t\tif (pointFormatReaders[this.formatId] === undefined)\n\t\t\tthrow new Error(\"The point format ID is not supported\");\n\n\t\tthis.loader = this.isCompressed ?\n\t\t\tnew LAZLoader(this.arraybuffer) :\n\t\t\tnew LASLoader(this.arraybuffer);\n\t};\n\n\tLASFile.prototype.determineFormat = function() {\n\t\tvar formatId = readAs(this.arraybuffer, Uint8Array, 32*3+8);\n\t\tvar bit_7 = (formatId & 0x80) >> 7;\n\t\tvar bit_6 = (formatId & 0x40) >> 6;\n\n\t\tif (bit_7 === 1 && bit_6 === 1)\n\t\t\tthrow new Error(\"Old style compression not supported\");\n\n\t\tthis.formatId = formatId & 0x3f;\n\t\tthis.isCompressed = (bit_7 === 1 || bit_6 === 1);\n\t};\n\n\tLASFile.prototype.determineVersion = function() {\n\t\tvar ver = new Int8Array(this.arraybuffer, 24, 2);\n\t\tthis.version = ver[0] * 10 + ver[1];\n\t\tthis.versionAsString = ver[0] + \".\" + ver[1];\n\t};\n\n\tLASFile.prototype.open = function() {\n\t\treturn this.loader.open();\n\t};\n\n\tLASFile.prototype.getHeader = function() {\n\t\treturn this.loader.getHeader();\n\t};\n\n\tLASFile.prototype.readData = function(count, start, skip) {\n\t\treturn this.loader.readData(count, start, skip);\n\t};\n\n\tLASFile.prototype.close = function() {\n\t\treturn this.loader.close();\n\t};\n\n\t// Decodes LAS records into points\n\t//\n\tvar LASDecoder = function(buffer, pointFormatID, pointSize, pointsCount, scale, offset, mins, maxs) {\n\t\tthis.arrayb = buffer;\n\t\tthis.decoder = pointFormatReaders[pointFormatID];\n\t\tthis.pointsCount = pointsCount;\n\t\tthis.pointSize = pointSize;\n\t\tthis.scale = scale;\n\t\tthis.offset = offset;\n\t\tthis.mins = mins;\n\t\tthis.maxs = maxs;\n\t};\n\n\tLASDecoder.prototype.getPoint = function(index) {\n\t\tif (index < 0 || index >= this.pointsCount)\n\t\t\tthrow new Error(\"Point index out of range\");\n\n\t\tvar dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize);\n\t\treturn this.decoder(dv);\n\t};\n\n\t// NACL Module support\n\t// Called by the common.js module.\n\t//\n\t//window.startNaCl = function(name, tc, config, width, height) {\n\t//\t// check browser support for nacl\n\t//\t//\n\t//\tif(!common.browserSupportsNaCl()) {\n\t//\t\treturn $.event.trigger({\n\t//\t\t\ttype: \"plasio.nacl.error\",\n\t//\t\t\tmessage: \"NaCl support is not available\"\n\t//\t\t});\n\t//\t}\n\n\t//\tnavigator.webkitPersistentStorage.requestQuota(2048 * 2048, function(bytes) {\n\t//\t\tcommon.updateStatus(\n\t//\t\t\t'Allocated ' + bytes + ' bytes of persistant storage.');\n\t//\t\t\tcommon.attachDefaultListeners();\n\t//\t\t\tcommon.createNaClModule(name, tc, config, width, height);\n\t//\t},\n\t//\tfunction(e) { \n\t//\t\t$.event.trigger({\n\t//\t\t\ttype: \"plasio.nacl.error\",\n\t//\t\t\tmessage: \"Could not allocate persistant storage\"\n\t//\t\t});\n\t//\t});\n\n\t//\t$(document).on(\"plasio.nacl.available\", function() {\n\t//\t\tscope.LASModuleWasLoaded = true;\n\t//\t});\n\t//};\n\n\tscope.LAZLoader = LAZLoader;\n\tscope.LASLoader = LASLoader;\n\tscope.LASFile = LASFile;\n\tscope.LASDecoder = LASDecoder;\n\tscope.LASModuleWasLoaded = false;\n//})(module.exports);\n})(this);\n\n"
  },
  {
    "path": "libs/plasio/vendor/bluebird.js",
    "content": "/**\n * bluebird build version 1.0.8\n * Features enabled: core, timers, race, any, call_get, filter, generators, map, nodeify, promisify, props, reduce, settle, some, progress, cancel, synchronous_inspection\n*/\n/**\n * @preserve Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n!function(e){\"object\"==typeof exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):\"undefined\"!=typeof window?window.Promise=e():\"undefined\"!=typeof global?global.Promise=e():\"undefined\"!=typeof self&&(self.Promise=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error(\"Cannot find module '\"+o+\"'\")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray) {\n\n    var SomePromiseArray = require(\"./some_promise_array.js\")(PromiseArray);\n    var ASSERT = require(\"./assert.js\");\n\n    function Promise$_Any(promises, useBound, caller) {\n        var ret = Promise$_CreatePromiseArray(\n            promises,\n            SomePromiseArray,\n            caller,\n            useBound === true && promises._isBound()\n                ? promises._boundTo\n                : void 0\n       );\n        var promise = ret.promise();\n        if (promise.isRejected()) {\n            return promise;\n        }\n        ret.setHowMany(1);\n        ret.setUnwrap();\n        ret.init();\n        return promise;\n    }\n\n    Promise.any = function Promise$Any(promises) {\n        return Promise$_Any(promises, false, Promise.any);\n    };\n\n    Promise.prototype.any = function Promise$any() {\n        return Promise$_Any(this, true, this.any);\n    };\n\n};\n\n},{\"./assert.js\":2,\"./some_promise_array.js\":35}],2:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = (function(){\n    var AssertionError = (function() {\n        function AssertionError(a) {\n            this.constructor$(a);\n            this.message = a;\n            this.name = \"AssertionError\";\n        }\n        AssertionError.prototype = new Error();\n        AssertionError.prototype.constructor = AssertionError;\n        AssertionError.prototype.constructor$ = Error;\n        return AssertionError;\n    })();\n\n    return function assert(boolExpr, message) {\n        if (boolExpr === true) return;\n\n        var ret = new AssertionError(message);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(ret, assert);\n        }\n        if (console && console.error) {\n            console.error(ret.stack + \"\");\n        }\n        throw ret;\n\n    };\n})();\n\n},{}],3:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar ASSERT = require(\"./assert.js\");\nvar schedule = require(\"./schedule.js\");\nvar Queue = require(\"./queue.js\");\nvar errorObj = require(\"./util.js\").errorObj;\nvar tryCatch1 = require(\"./util.js\").tryCatch1;\n\nfunction Async() {\n    this._isTickUsed = false;\n    this._length = 0;\n    this._lateBuffer = new Queue();\n    this._functionBuffer = new Queue(25000 * 3);\n    var self = this;\n    this.consumeFunctionBuffer = function Async$consumeFunctionBuffer() {\n        self._consumeFunctionBuffer();\n    };\n}\n\nAsync.prototype.haveItemsQueued = function Async$haveItemsQueued() {\n    return this._length > 0;\n};\n\nAsync.prototype.invokeLater = function Async$invokeLater(fn, receiver, arg) {\n    this._lateBuffer.push(fn, receiver, arg);\n    this._queueTick();\n};\n\nAsync.prototype.invoke = function Async$invoke(fn, receiver, arg) {\n    var functionBuffer = this._functionBuffer;\n    functionBuffer.push(fn, receiver, arg);\n    this._length = functionBuffer.length();\n    this._queueTick();\n};\n\nAsync.prototype._consumeFunctionBuffer =\nfunction Async$_consumeFunctionBuffer() {\n    var functionBuffer = this._functionBuffer;\n    while(functionBuffer.length() > 0) {\n        var fn = functionBuffer.shift();\n        var receiver = functionBuffer.shift();\n        var arg = functionBuffer.shift();\n        fn.call(receiver, arg);\n    }\n    this._reset();\n    this._consumeLateBuffer();\n};\n\nAsync.prototype._consumeLateBuffer = function Async$_consumeLateBuffer() {\n    var buffer = this._lateBuffer;\n    while(buffer.length() > 0) {\n        var fn = buffer.shift();\n        var receiver = buffer.shift();\n        var arg = buffer.shift();\n        var res = tryCatch1(fn, receiver, arg);\n        if (res === errorObj) {\n            this._queueTick();\n            throw res.e;\n        }\n    }\n};\n\nAsync.prototype._queueTick = function Async$_queue() {\n    if (!this._isTickUsed) {\n        schedule(this.consumeFunctionBuffer);\n        this._isTickUsed = true;\n    }\n};\n\nAsync.prototype._reset = function Async$_reset() {\n    this._isTickUsed = false;\n    this._length = 0;\n};\n\nmodule.exports = new Async();\n\n},{\"./assert.js\":2,\"./queue.js\":28,\"./schedule.js\":31,\"./util.js\":39}],4:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar Promise = require(\"./promise.js\")();\nmodule.exports = Promise;\n},{\"./promise.js\":20}],5:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise) {\n    Promise.prototype.call = function Promise$call(propertyName) {\n        var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}\n\n        return this._then(function(obj) {\n                return obj[propertyName].apply(obj, args);\n            },\n            void 0,\n            void 0,\n            void 0,\n            void 0,\n            this.call\n       );\n    };\n\n    function Promise$getter(obj) {\n        var prop = typeof this === \"string\"\n            ? this\n            : (\"\" + this);\n        return obj[prop];\n    }\n    Promise.prototype.get = function Promise$get(propertyName) {\n        return this._then(\n            Promise$getter,\n            void 0,\n            void 0,\n            propertyName,\n            void 0,\n            this.get\n       );\n    };\n};\n\n},{}],6:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\n    var errors = require(\"./errors.js\");\n    var async = require(\"./async.js\");\n    var ASSERT = require(\"./assert.js\");\n    var CancellationError = errors.CancellationError;\n    var SYNC_TOKEN = {};\n\n    Promise.prototype._cancel = function Promise$_cancel() {\n        if (!this.isCancellable()) return this;\n        var parent;\n        if ((parent = this._cancellationParent) !== void 0 &&\n\t\t\tparent.isCancellable()) {\n            parent.cancel(SYNC_TOKEN);\n            return;\n        }\n        var err = new CancellationError();\n        this._attachExtraTrace(err);\n        this._rejectUnchecked(err);\n    };\n\n    Promise.prototype.cancel = function Promise$cancel(token) {\n        if (!this.isCancellable()) return this;\n        if (token === SYNC_TOKEN) {\n            this._cancel();\n            return this;\n        }\n        async.invokeLater(this._cancel, this, void 0);\n        return this;\n    };\n\n    Promise.prototype.cancellable = function Promise$cancellable() {\n        if (this._cancellable()) return this;\n        this._setCancellable();\n        this._cancellationParent = void 0;\n        return this;\n    };\n\n    Promise.prototype.uncancellable = function Promise$uncancellable() {\n        var ret = new Promise(INTERNAL);\n        ret._setTrace(this.uncancellable, this);\n        ret._follow(this);\n        ret._unsetCancellable();\n        if (this._isBound()) ret._setBoundTo(this._boundTo);\n        return ret;\n    };\n\n    Promise.prototype.fork =\n    function Promise$fork(didFulfill, didReject, didProgress) {\n        var ret = this._then(didFulfill, didReject, didProgress,\n            void 0, void 0, this.fork);\n\n        ret._setCancellable();\n        ret._cancellationParent = void 0;\n        return ret;\n    };\n};\n\n},{\"./assert.js\":2,\"./async.js\":3,\"./errors.js\":10}],7:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function() {\nvar ASSERT = require(\"./assert.js\");\nvar inherits = require(\"./util.js\").inherits;\nvar defineProperty = require(\"./es5.js\").defineProperty;\n\nvar rignore = new RegExp(\n    \"\\\\b(?:[\\\\w.]*Promise(?:Array|Spawn)?\\\\$_\\\\w+|\" +\n    \"tryCatch(?:1|2|Apply)|new \\\\w*PromiseArray|\" +\n    \"\\\\w*PromiseArray\\\\.\\\\w*PromiseArray|\" +\n    \"setTimeout|CatchFilter\\\\$_\\\\w+|makeNodePromisified|processImmediate|\" +\n    \"process._tickCallback|nextTick|Async\\\\$\\\\w+)\\\\b\"\n);\n\nvar rtraceline = null;\nvar formatStack = null;\nvar areNamesMangled = false;\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    }\n    else {\n        str = obj.toString();\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction CapturedTrace(ignoreUntil, isTopLevel) {\n    if (!areNamesMangled) {\n    }\n    this.captureStackTrace(ignoreUntil, isTopLevel);\n\n}\ninherits(CapturedTrace, Error);\n\nCapturedTrace.prototype.captureStackTrace =\nfunction CapturedTrace$captureStackTrace(ignoreUntil, isTopLevel) {\n    captureStackTrace(this, ignoreUntil, isTopLevel);\n};\n\nCapturedTrace.possiblyUnhandledRejection =\nfunction CapturedTrace$PossiblyUnhandledRejection(reason) {\n    if (typeof console === \"object\") {\n        var message;\n        if (typeof reason === \"object\" || typeof reason === \"function\") {\n            var stack = reason.stack;\n            message = \"Possibly unhandled \" + formatStack(stack, reason);\n        }\n        else {\n            message = \"Possibly unhandled \" + String(reason);\n        }\n        if (typeof console.error === \"function\" ||\n            typeof console.error === \"object\") {\n            console.error(message);\n        }\n        else if (typeof console.log === \"function\" ||\n            typeof console.error === \"object\") {\n            console.log(message);\n        }\n    }\n};\n\nareNamesMangled = CapturedTrace.prototype.captureStackTrace.name !==\n    \"CapturedTrace$captureStackTrace\";\n\nCapturedTrace.combine = function CapturedTrace$Combine(current, prev) {\n    var curLast = current.length - 1;\n    for (var i = prev.length - 1; i >= 0; --i) {\n        var line = prev[i];\n        if (current[curLast] === line) {\n            current.pop();\n            curLast--;\n        }\n        else {\n            break;\n        }\n    }\n\n    current.push(\"From previous event:\");\n    var lines = current.concat(prev);\n\n    var ret = [];\n\n\n    for (var i = 0, len = lines.length; i < len; ++i) {\n\n        if ((rignore.test(lines[i]) ||\n            (i > 0 && !rtraceline.test(lines[i])) &&\n            lines[i] !== \"From previous event:\")\n       ) {\n            continue;\n        }\n        ret.push(lines[i]);\n    }\n    return ret;\n};\n\nCapturedTrace.isSupported = function CapturedTrace$IsSupported() {\n    return typeof captureStackTrace === \"function\";\n};\n\nvar captureStackTrace = (function stackDetection() {\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        rtraceline = /^\\s*at\\s*/;\n        formatStack = function(stack, error) {\n            if (typeof stack === \"string\") return stack;\n\n            if (error.name !== void 0 &&\n                error.message !== void 0) {\n                return error.name + \". \" + error.message;\n            }\n            return formatNonError(error);\n\n\n        };\n        var captureStackTrace = Error.captureStackTrace;\n        return function CapturedTrace$_captureStackTrace(\n            receiver, ignoreUntil) {\n            captureStackTrace(receiver, ignoreUntil);\n        };\n    }\n    var err = new Error();\n\n    if (!areNamesMangled && typeof err.stack === \"string\" &&\n        typeof \"\".startsWith === \"function\" &&\n        (err.stack.startsWith(\"stackDetection@\")) &&\n        stackDetection.name === \"stackDetection\") {\n\n        defineProperty(Error, \"stackTraceLimit\", {\n            writable: true,\n            enumerable: false,\n            configurable: false,\n            value: 25\n        });\n        rtraceline = /@/;\n        var rline = /[@\\n]/;\n\n        formatStack = function(stack, error) {\n            if (typeof stack === \"string\") {\n                return (error.name + \". \" + error.message + \"\\n\" + stack);\n            }\n\n            if (error.name !== void 0 &&\n                error.message !== void 0) {\n                return error.name + \". \" + error.message;\n            }\n            return formatNonError(error);\n        };\n\n        return function captureStackTrace(o, fn) {\n            var name = fn.name;\n            var stack = new Error().stack;\n            var split = stack.split(rline);\n            var i, len = split.length;\n            for (i = 0; i < len; i += 2) {\n                if (split[i] === name) {\n                    break;\n                }\n            }\n            split = split.slice(i + 2);\n            len = split.length - 2;\n            var ret = \"\";\n            for (i = 0; i < len; i += 2) {\n                ret += split[i];\n                ret += \"@\";\n                ret += split[i + 1];\n                ret += \"\\n\";\n            }\n            o.stack = ret;\n        };\n    }\n    else {\n        formatStack = function(stack, error) {\n            if (typeof stack === \"string\") return stack;\n\n            if ((typeof error === \"object\" ||\n                typeof error === \"function\") &&\n                error.name !== void 0 &&\n                error.message !== void 0) {\n                return error.name + \". \" + error.message;\n            }\n            return formatNonError(error);\n        };\n\n        return null;\n    }\n})();\n\nreturn CapturedTrace;\n};\n\n},{\"./assert.js\":2,\"./es5.js\":12,\"./util.js\":39}],8:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = require(\"./util.js\");\nvar errors = require(\"./errors.js\");\nvar tryCatch1 = util.tryCatch1;\nvar errorObj = util.errorObj;\nvar keys = require(\"./es5.js\").keys;\n\nfunction CatchFilter(instances, callback, promise) {\n    this._instances = instances;\n    this._callback = callback;\n    this._promise = promise;\n}\n\nfunction CatchFilter$_safePredicate(predicate, e) {\n    var safeObject = {};\n    var retfilter = tryCatch1(predicate, safeObject, e);\n\n    if (retfilter === errorObj) return retfilter;\n\n    var safeKeys = keys(safeObject);\n    if (safeKeys.length) {\n        errorObj.e = new TypeError(\n            \"Catch filter must inherit from Error \"\n          + \"or be a simple predicate function\");\n        return errorObj;\n    }\n    return retfilter;\n}\n\nCatchFilter.prototype.doFilter = function CatchFilter$_doFilter(e) {\n    var cb = this._callback;\n    var promise = this._promise;\n    var boundTo = promise._isBound() ? promise._boundTo : void 0;\n    for (var i = 0, len = this._instances.length; i < len; ++i) {\n        var item = this._instances[i];\n        var itemIsErrorType = item === Error ||\n            (item != null && item.prototype instanceof Error);\n\n        if (itemIsErrorType && e instanceof item) {\n            var ret = tryCatch1(cb, boundTo, e);\n            if (ret === errorObj) {\n                NEXT_FILTER.e = ret.e;\n                return NEXT_FILTER;\n            }\n            return ret;\n        } else if (typeof item === \"function\" && !itemIsErrorType) {\n            var shouldHandle = CatchFilter$_safePredicate(item, e);\n            if (shouldHandle === errorObj) {\n                var trace = errors.canAttach(errorObj.e)\n                    ? errorObj.e\n                    : new Error(errorObj.e + \"\");\n                this._promise._attachExtraTrace(trace);\n                e = errorObj.e;\n                break;\n            } else if (shouldHandle) {\n                var ret = tryCatch1(cb, boundTo, e);\n                if (ret === errorObj) {\n                    NEXT_FILTER.e = ret.e;\n                    return NEXT_FILTER;\n                }\n                return ret;\n            }\n        }\n    }\n    NEXT_FILTER.e = e;\n    return NEXT_FILTER;\n};\n\nreturn CatchFilter;\n};\n\n},{\"./errors.js\":10,\"./es5.js\":12,\"./util.js\":39}],9:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar util = require(\"./util.js\");\nvar ASSERT = require(\"./assert.js\");\nvar isPrimitive = util.isPrimitive;\nvar wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver;\n\nmodule.exports = function(Promise) {\nvar returner = function Promise$_returner() {\n    return this;\n};\nvar thrower = function Promise$_thrower() {\n    throw this;\n};\n\nvar wrapper = function Promise$_wrapper(value, action) {\n    if (action === 1) {\n        return function Promise$_thrower() {\n            throw value;\n        };\n    }\n    else if (action === 2) {\n        return function Promise$_returner() {\n            return value;\n        };\n    }\n};\n\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn =\nfunction Promise$thenReturn(value) {\n    if (wrapsPrimitiveReceiver && isPrimitive(value)) {\n        return this._then(\n            wrapper(value, 2),\n            void 0,\n            void 0,\n            void 0,\n            void 0,\n            this.thenReturn\n       );\n    }\n    return this._then(returner, void 0, void 0,\n                        value, void 0, this.thenReturn);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow =\nfunction Promise$thenThrow(reason) {\n    if (wrapsPrimitiveReceiver && isPrimitive(reason)) {\n        return this._then(\n            wrapper(reason, 1),\n            void 0,\n            void 0,\n            void 0,\n            void 0,\n            this.thenThrow\n       );\n    }\n    return this._then(thrower, void 0, void 0,\n                        reason, void 0, this.thenThrow);\n};\n};\n\n},{\"./assert.js\":2,\"./util.js\":39}],10:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar global = require(\"./global.js\");\nvar Objectfreeze = require(\"./es5.js\").freeze;\nvar util = require(\"./util.js\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\nvar Error = global.Error;\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isAsync\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof RejectionError) ||\n        e[\"isAsync\"] === true);\n}\n\nfunction isError(obj) {\n    return obj instanceof Error;\n}\n\nfunction canAttach(obj) {\n    return isError(obj);\n}\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        this.message = typeof message === \"string\" ? message : defaultMessage;\n        this.name = nameProperty;\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar TypeError = global.TypeError;\nif (typeof TypeError !== \"function\") {\n    TypeError = subError(\"TypeError\", \"type error\");\n}\nvar RangeError = global.RangeError;\nif (typeof RangeError !== \"function\") {\n    RangeError = subError(\"RangeError\", \"range error\");\n}\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\n\nfunction RejectionError(message) {\n    this.name = \"RejectionError\";\n    this.message = message;\n    this.cause = message;\n    this.isAsync = true;\n\n    if (message instanceof Error) {\n        this.message = message.message;\n        this.stack = message.stack;\n    }\n    else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(RejectionError, Error);\n\nvar key = \"__BluebirdErrorTypes__\";\nvar errorTypes = global[key];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        RejectionError: RejectionError\n    });\n    notEnumerableProp(global, key, errorTypes);\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: TypeError,\n    RangeError: RangeError,\n    CancellationError: errorTypes.CancellationError,\n    RejectionError: errorTypes.RejectionError,\n    TimeoutError: errorTypes.TimeoutError,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    canAttach: canAttach\n};\n\n},{\"./es5.js\":12,\"./global.js\":16,\"./util.js\":39}],11:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise) {\nvar TypeError = require('./errors.js').TypeError;\n\nfunction apiRejection(msg) {\n    var error = new TypeError(msg);\n    var ret = Promise.rejected(error);\n    var parent = ret._peekContext();\n    if (parent != null) {\n        parent._attachExtraTrace(error);\n    }\n    return ret;\n}\n\nreturn apiRejection;\n};\n\n},{\"./errors.js\":10}],12:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\nvar isES5 = (function(){\n    \"use strict\";\n    return this === void 0;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        keys: Object.keys,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5\n    };\n}\n\nelse {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    function ObjectKeys(o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    }\n\n    function ObjectDefineProperty(o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    }\n\n    function ObjectFreeze(obj) {\n        return obj;\n    }\n\n    function ObjectGetPrototypeOf(obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    }\n\n    function ArrayIsArray(obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    }\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5\n    };\n}\n\n},{}],13:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise) {\n    var ASSERT = require(\"./assert.js\");\n    var isArray = require(\"./util.js\").isArray;\n\n    function Promise$_filter(booleans) {\n        var values = this._settledValue;\n        var len = values.length;\n        var ret = new Array(len);\n        var j = 0;\n\n        for (var i = 0; i < len; ++i) {\n            if (booleans[i]) ret[j++] = values[i];\n\n        }\n        ret.length = j;\n        return ret;\n    }\n\n    var ref = {ref: null};\n    Promise.filter = function Promise$Filter(promises, fn) {\n        return Promise.map(promises, fn, ref)\n            ._then(Promise$_filter, void 0, void 0,\n                    ref.ref, void 0, Promise.filter);\n    };\n\n    Promise.prototype.filter = function Promise$filter(fn) {\n        return this.map(fn, ref)\n            ._then(Promise$_filter, void 0, void 0,\n                    ref.ref, void 0, this.filter);\n    };\n};\n\n},{\"./assert.js\":2,\"./util.js\":39}],14:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\nmodule.exports = function(Promise, NEXT_FILTER) {\n    var util = require(\"./util.js\");\n    var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver;\n    var isPrimitive = util.isPrimitive;\n    var thrower = util.thrower;\n\n\n    function returnThis() {\n        return this;\n    }\n    function throwThis() {\n        throw this;\n    }\n    function makeReturner(r) {\n        return function Promise$_returner() {\n            return r;\n        };\n    }\n    function makeThrower(r) {\n        return function Promise$_thrower() {\n            throw r;\n        };\n    }\n    function promisedFinally(ret, reasonOrValue, isFulfilled) {\n        var useConstantFunction =\n                        wrapsPrimitiveReceiver && isPrimitive(reasonOrValue);\n\n        if (isFulfilled) {\n            return ret._then(\n                useConstantFunction\n                    ? returnThis\n                    : makeReturner(reasonOrValue),\n                thrower, void 0, reasonOrValue, void 0, promisedFinally);\n        }\n        else {\n            return ret._then(\n                useConstantFunction\n                    ? throwThis\n                    : makeThrower(reasonOrValue),\n                thrower, void 0, reasonOrValue, void 0, promisedFinally);\n        }\n    }\n\n    function finallyHandler(reasonOrValue) {\n        var promise = this.promise;\n        var handler = this.handler;\n\n        var ret = promise._isBound()\n                        ? handler.call(promise._boundTo)\n                        : handler();\n\n        if (ret !== void 0) {\n            var maybePromise = Promise._cast(ret, finallyHandler, void 0);\n            if (Promise.is(maybePromise)) {\n                return promisedFinally(maybePromise, reasonOrValue,\n                                        promise.isFulfilled());\n            }\n        }\n\n        if (promise.isRejected()) {\n            NEXT_FILTER.e = reasonOrValue;\n            return NEXT_FILTER;\n        }\n        else {\n            return reasonOrValue;\n        }\n    }\n\n    Promise.prototype.lastly = Promise.prototype[\"finally\"] =\n    function Promise$finally(handler) {\n        if (typeof handler !== \"function\") return this.then();\n\n        var promiseAndHandler = {\n            promise: this,\n            handler: handler\n        };\n\n        return this._then(finallyHandler, finallyHandler, void 0,\n                promiseAndHandler, void 0, this.lastly);\n    };\n};\n\n},{\"./util.js\":39}],15:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, apiRejection, INTERNAL) {\n    var PromiseSpawn = require(\"./promise_spawn.js\")(Promise, INTERNAL);\n    var errors = require(\"./errors.js\");\n    var TypeError = errors.TypeError;\n    var deprecated = require(\"./util.js\").deprecated;\n\n    Promise.coroutine = function Promise$Coroutine(generatorFunction) {\n        if (typeof generatorFunction !== \"function\") {\n            throw new TypeError(\"generatorFunction must be a function\");\n        }\n        var PromiseSpawn$ = PromiseSpawn;\n        return function anonymous() {\n            var generator = generatorFunction.apply(this, arguments);\n            var spawn = new PromiseSpawn$(void 0, void 0, anonymous);\n            spawn._generator = generator;\n            spawn._next(void 0);\n            return spawn.promise();\n        };\n    };\n\n    Promise.coroutine.addYieldHandler = PromiseSpawn.addYieldHandler;\n\n    Promise.spawn = function Promise$Spawn(generatorFunction) {\n        deprecated(\"Promise.spawn is deprecated. Use Promise.coroutine instead.\");\n        if (typeof generatorFunction !== \"function\") {\n            return apiRejection(\"generatorFunction must be a function\");\n        }\n        var spawn = new PromiseSpawn(generatorFunction, this, Promise.spawn);\n        var ret = spawn.promise();\n        spawn._run(Promise.spawn);\n        return ret;\n    };\n};\n\n},{\"./errors.js\":10,\"./promise_spawn.js\":24,\"./util.js\":39}],16:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = (function(){\n    if (typeof this !== \"undefined\") {\n        return this;\n    }\n    if (typeof process !== \"undefined\" &&\n        typeof global !== \"undefined\" &&\n        typeof process.execPath === \"string\") {\n        return global;\n    }\n    if (typeof window !== \"undefined\" &&\n        typeof document !== \"undefined\" &&\n        typeof navigator !== \"undefined\" && navigator !== null &&\n        typeof navigator.appName === \"string\") {\n            if(window.wrappedJSObject !== undefined){\n                return window.wrappedJSObject;\n            }\n        return window;\n    }\n})();\n\n},{}],17:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(\n    Promise, Promise$_CreatePromiseArray, PromiseArray, apiRejection) {\n\n    var ASSERT = require(\"./assert.js\");\n\n    function Promise$_mapper(values) {\n        var fn = this;\n        var receiver = void 0;\n\n        if (typeof fn !== \"function\")  {\n            receiver = fn.receiver;\n            fn = fn.fn;\n        }\n        var shouldDefer = false;\n\n        var ret = new Array(values.length);\n\n        if (receiver === void 0) {\n            for (var i = 0, len = values.length; i < len; ++i) {\n                var value = fn(values[i], i, len);\n                if (!shouldDefer) {\n                    var maybePromise = Promise._cast(value,\n                            Promise$_mapper, void 0);\n                    if (maybePromise instanceof Promise) {\n                        if (maybePromise.isFulfilled()) {\n                            ret[i] = maybePromise._settledValue;\n                            continue;\n                        }\n                        else {\n                            shouldDefer = true;\n                        }\n                        value = maybePromise;\n                    }\n                }\n                ret[i] = value;\n            }\n        }\n        else {\n            for (var i = 0, len = values.length; i < len; ++i) {\n                var value = fn.call(receiver, values[i], i, len);\n                if (!shouldDefer) {\n                    var maybePromise = Promise._cast(value,\n                            Promise$_mapper, void 0);\n                    if (maybePromise instanceof Promise) {\n                        if (maybePromise.isFulfilled()) {\n                            ret[i] = maybePromise._settledValue;\n                            continue;\n                        }\n                        else {\n                            shouldDefer = true;\n                        }\n                        value = maybePromise;\n                    }\n                }\n                ret[i] = value;\n            }\n        }\n        return shouldDefer\n            ? Promise$_CreatePromiseArray(ret, PromiseArray,\n                Promise$_mapper, void 0).promise()\n            : ret;\n    }\n\n    function Promise$_Map(promises, fn, useBound, caller, ref) {\n        if (typeof fn !== \"function\") {\n            return apiRejection(\"fn must be a function\");\n        }\n\n        if (useBound === true && promises._isBound()) {\n            fn = {\n                fn: fn,\n                receiver: promises._boundTo\n            };\n        }\n\n        var ret = Promise$_CreatePromiseArray(\n            promises,\n            PromiseArray,\n            caller,\n            useBound === true && promises._isBound()\n                ? promises._boundTo\n                : void 0\n       ).promise();\n\n        if (ref !== void 0) {\n            ref.ref = ret;\n        }\n\n        return ret._then(\n            Promise$_mapper,\n            void 0,\n            void 0,\n            fn,\n            void 0,\n            caller\n       );\n    }\n\n    Promise.prototype.map = function Promise$map(fn, ref) {\n        return Promise$_Map(this, fn, true, this.map, ref);\n    };\n\n    Promise.map = function Promise$Map(promises, fn, ref) {\n        return Promise$_Map(promises, fn, false, Promise.map, ref);\n    };\n};\n\n},{\"./assert.js\":2}],18:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise) {\n    var util = require(\"./util.js\");\n    var async = require(\"./async.js\");\n    var ASSERT = require(\"./assert.js\");\n    var tryCatch2 = util.tryCatch2;\n    var tryCatch1 = util.tryCatch1;\n    var errorObj = util.errorObj;\n\n    function thrower(r) {\n        throw r;\n    }\n\n    function Promise$_successAdapter(val, receiver) {\n        var nodeback = this;\n        var ret = tryCatch2(nodeback, receiver, null, val);\n        if (ret === errorObj) {\n            async.invokeLater(thrower, void 0, ret.e);\n        }\n    }\n    function Promise$_errorAdapter(reason, receiver) {\n        var nodeback = this;\n        var ret = tryCatch1(nodeback, receiver, reason);\n        if (ret === errorObj) {\n            async.invokeLater(thrower, void 0, ret.e);\n        }\n    }\n\n    Promise.prototype.nodeify = function Promise$nodeify(nodeback) {\n        if (typeof nodeback == \"function\") {\n            this._then(\n                Promise$_successAdapter,\n                Promise$_errorAdapter,\n                void 0,\n                nodeback,\n                this._isBound() ? this._boundTo : null,\n                this.nodeify\n           );\n        }\n        return this;\n    };\n};\n\n},{\"./assert.js\":2,\"./async.js\":3,\"./util.js\":39}],19:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, isPromiseArrayProxy) {\n    var ASSERT = require(\"./assert.js\");\n    var util = require(\"./util.js\");\n    var async = require(\"./async.js\");\n    var errors = require(\"./errors.js\");\n    var tryCatch1 = util.tryCatch1;\n    var errorObj = util.errorObj;\n\n    Promise.prototype.progressed = function Promise$progressed(handler) {\n        return this._then(void 0, void 0, handler,\n                            void 0, void 0, this.progressed);\n    };\n\n    Promise.prototype._progress = function Promise$_progress(progressValue) {\n        if (this._isFollowingOrFulfilledOrRejected()) return;\n        this._progressUnchecked(progressValue);\n\n    };\n\n    Promise.prototype._progressHandlerAt =\n    function Promise$_progressHandlerAt(index) {\n        if (index === 0) return this._progressHandler0;\n        return this[index + 2 - 5];\n    };\n\n    Promise.prototype._doProgressWith =\n    function Promise$_doProgressWith(progression) {\n        var progressValue = progression.value;\n        var handler = progression.handler;\n        var promise = progression.promise;\n        var receiver = progression.receiver;\n\n        this._pushContext();\n        var ret = tryCatch1(handler, receiver, progressValue);\n        this._popContext();\n\n        if (ret === errorObj) {\n            if (ret.e != null &&\n                ret.e.name !== \"StopProgressPropagation\") {\n                var trace = errors.canAttach(ret.e)\n                    ? ret.e : new Error(ret.e + \"\");\n                promise._attachExtraTrace(trace);\n                promise._progress(ret.e);\n            }\n        }\n        else if (Promise.is(ret)) {\n            ret._then(promise._progress, null, null, promise, void 0,\n                this._progress);\n        }\n        else {\n            promise._progress(ret);\n        }\n    };\n\n\n    Promise.prototype._progressUnchecked =\n    function Promise$_progressUnchecked(progressValue) {\n        if (!this.isPending()) return;\n        var len = this._length();\n\n        for (var i = 0; i < len; i += 5) {\n            var handler = this._progressHandlerAt(i);\n            var promise = this._promiseAt(i);\n            if (!Promise.is(promise)) {\n                var receiver = this._receiverAt(i);\n                if (typeof handler === \"function\") {\n                    handler.call(receiver, progressValue, promise);\n                }\n                else if (Promise.is(receiver) && receiver._isProxied()) {\n                    receiver._progressUnchecked(progressValue);\n                }\n                else if (isPromiseArrayProxy(receiver, promise)) {\n                    receiver._promiseProgressed(progressValue, promise);\n                }\n                continue;\n            }\n\n            if (typeof handler === \"function\") {\n                async.invoke(this._doProgressWith, this, {\n                    handler: handler,\n                    promise: promise,\n                    receiver: this._receiverAt(i),\n                    value: progressValue\n                });\n            }\n            else {\n                async.invoke(promise._progress, promise, progressValue);\n            }\n        }\n    };\n};\n\n},{\"./assert.js\":2,\"./async.js\":3,\"./errors.js\":10,\"./util.js\":39}],20:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function() {\nvar global = require(\"./global.js\");\nvar ASSERT = require(\"./assert.js\");\nvar util = require(\"./util.js\");\nvar async = require(\"./async.js\");\nvar errors = require(\"./errors.js\");\n\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {e: null};\n\nvar PromiseArray = require(\"./promise_array.js\")(Promise, INTERNAL);\nvar CapturedTrace = require(\"./captured_trace.js\")();\nvar CatchFilter = require(\"./catch_filter.js\")(NEXT_FILTER);\nvar PromiseResolver = require(\"./promise_resolver.js\");\n\nvar isArray = util.isArray;\n\nvar errorObj = util.errorObj;\nvar tryCatch1 = util.tryCatch1;\nvar tryCatch2 = util.tryCatch2;\nvar tryCatchApply = util.tryCatchApply;\nvar RangeError = errors.RangeError;\nvar TypeError = errors.TypeError;\nvar CancellationError = errors.CancellationError;\nvar TimeoutError = errors.TimeoutError;\nvar RejectionError = errors.RejectionError;\nvar originatesFromRejection = errors.originatesFromRejection;\nvar markAsOriginatingFromRejection = errors.markAsOriginatingFromRejection;\nvar canAttach = errors.canAttach;\nvar thrower = util.thrower;\nvar apiRejection = require(\"./errors_api_rejection\")(Promise);\n\n\nvar makeSelfResolutionError = function Promise$_makeSelfResolutionError() {\n    return new TypeError(\"circular promise resolution chain\");\n};\n\nfunction isPromise(obj) {\n    if (obj === void 0) return false;\n    return obj instanceof Promise;\n}\n\nfunction isPromiseArrayProxy(receiver, promiseSlotValue) {\n    if (receiver instanceof PromiseArray) {\n        return promiseSlotValue >= 0;\n    }\n    return false;\n}\n\nfunction Promise(resolver) {\n    if (typeof resolver !== \"function\") {\n        throw new TypeError(\"the promise constructor requires a resolver function\");\n    }\n    if (this.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\");\n    }\n    this._bitField = 0;\n    this._fulfillmentHandler0 = void 0;\n    this._rejectionHandler0 = void 0;\n    this._promise0 = void 0;\n    this._receiver0 = void 0;\n    this._settledValue = void 0;\n    this._boundTo = void 0;\n    if (resolver !== INTERNAL) this._resolveFromResolver(resolver);\n}\n\nPromise.prototype.bind = function Promise$bind(thisArg) {\n    var ret = new Promise(INTERNAL);\n    if (debugging) ret._setTrace(this.bind, this);\n    ret._follow(this);\n    ret._setBoundTo(thisArg);\n    if (this._cancellable()) {\n        ret._setCancellable();\n        ret._cancellationParent = this;\n    }\n    return ret;\n};\n\nPromise.prototype.toString = function Promise$toString() {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] =\nfunction Promise$catch(fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (typeof item === \"function\") {\n                catchInstances[j++] = item;\n            }\n            else {\n                var catchFilterTypeError =\n                    new TypeError(\n                        \"A catch filter must be an error constructor \"\n                        + \"or a filter function\");\n\n                this._attachExtraTrace(catchFilterTypeError);\n                async.invoke(this._reject, this, catchFilterTypeError);\n                return;\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n\n        this._resetTrace(this.caught);\n        var catchFilter = new CatchFilter(catchInstances, fn, this);\n        return this._then(void 0, catchFilter.doFilter, void 0,\n            catchFilter, void 0, this.caught);\n    }\n    return this._then(void 0, fn, void 0, void 0, void 0, this.caught);\n};\n\nPromise.prototype.then =\nfunction Promise$then(didFulfill, didReject, didProgress) {\n    return this._then(didFulfill, didReject, didProgress,\n        void 0, void 0, this.then);\n};\n\n\nPromise.prototype.done =\nfunction Promise$done(didFulfill, didReject, didProgress) {\n    var promise = this._then(didFulfill, didReject, didProgress,\n        void 0, void 0, this.done);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function Promise$spread(didFulfill, didReject) {\n    return this._then(didFulfill, didReject, void 0,\n        APPLY, void 0, this.spread);\n};\n\nPromise.prototype.isFulfilled = function Promise$isFulfilled() {\n    return (this._bitField & 268435456) > 0;\n};\n\n\nPromise.prototype.isRejected = function Promise$isRejected() {\n    return (this._bitField & 134217728) > 0;\n};\n\nPromise.prototype.isPending = function Promise$isPending() {\n    return !this.isResolved();\n};\n\n\nPromise.prototype.isResolved = function Promise$isResolved() {\n    return (this._bitField & 402653184) > 0;\n};\n\n\nPromise.prototype.isCancellable = function Promise$isCancellable() {\n    return !this.isResolved() &&\n        this._cancellable();\n};\n\nPromise.prototype.toJSON = function Promise$toJSON() {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: void 0,\n        rejectionReason: void 0\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this._settledValue;\n        ret.isFulfilled = true;\n    }\n    else if (this.isRejected()) {\n        ret.rejectionReason = this._settledValue;\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function Promise$all() {\n    return Promise$_all(this, true, this.all);\n};\n\n\nPromise.is = isPromise;\n\nfunction Promise$_all(promises, useBound, caller) {\n    return Promise$_CreatePromiseArray(\n        promises,\n        PromiseArray,\n        caller,\n        useBound === true && promises._isBound()\n            ? promises._boundTo\n            : void 0\n   ).promise();\n}\nPromise.all = function Promise$All(promises) {\n    return Promise$_all(promises, false, Promise.all);\n};\n\nPromise.join = function Promise$Join() {\n    var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}\n    return Promise$_CreatePromiseArray(\n        args, PromiseArray, Promise.join, void 0).promise();\n};\n\nPromise.resolve = Promise.fulfilled =\nfunction Promise$Resolve(value, caller) {\n    var ret = new Promise(INTERNAL);\n    if (debugging) ret._setTrace(typeof caller === \"function\"\n        ? caller\n        : Promise.resolve, void 0);\n    if (ret._tryFollow(value)) {\n        return ret;\n    }\n    ret._cleanValues();\n    ret._setFulfilled();\n    ret._settledValue = value;\n    return ret;\n};\n\nPromise.reject = Promise.rejected = function Promise$Reject(reason) {\n    var ret = new Promise(INTERNAL);\n    if (debugging) ret._setTrace(Promise.reject, void 0);\n    markAsOriginatingFromRejection(reason);\n    ret._cleanValues();\n    ret._setRejected();\n    ret._settledValue = reason;\n    if (!canAttach(reason)) {\n        var trace = new Error(reason + \"\");\n        ret._setCarriedStackTrace(trace);\n    }\n    ret._ensurePossibleRejectionHandled();\n    return ret;\n};\n\nPromise.prototype.error = function Promise$_error(fn) {\n    return this.caught(originatesFromRejection, fn);\n};\n\nPromise.prototype._resolveFromSyncValue =\nfunction Promise$_resolveFromSyncValue(value, caller) {\n    if (value === errorObj) {\n        this._cleanValues();\n        this._setRejected();\n        this._settledValue = value.e;\n        this._ensurePossibleRejectionHandled();\n    }\n    else {\n        var maybePromise = Promise._cast(value, caller, void 0);\n        if (maybePromise instanceof Promise) {\n            this._follow(maybePromise);\n        }\n        else {\n            this._cleanValues();\n            this._setFulfilled();\n            this._settledValue = value;\n        }\n    }\n};\n\nPromise.method = function Promise$_Method(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"fn must be a function\");\n    }\n    return function Promise$_method() {\n        var value;\n        switch(arguments.length) {\n        case 0: value = tryCatch1(fn, this, void 0); break;\n        case 1: value = tryCatch1(fn, this, arguments[0]); break;\n        case 2: value = tryCatch2(fn, this, arguments[0], arguments[1]); break;\n        default:\n            var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}\n            value = tryCatchApply(fn, args, this); break;\n        }\n        var ret = new Promise(INTERNAL);\n        if (debugging) ret._setTrace(Promise$_method, void 0);\n        ret._resolveFromSyncValue(value, Promise$_method);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function Promise$_Try(fn, args, ctx) {\n\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"fn must be a function\");\n    }\n    var value = isArray(args)\n        ? tryCatchApply(fn, args, ctx)\n        : tryCatch1(fn, ctx, args);\n\n    var ret = new Promise(INTERNAL);\n    if (debugging) ret._setTrace(Promise.attempt, void 0);\n    ret._resolveFromSyncValue(value, Promise.attempt);\n    return ret;\n};\n\nPromise.defer = Promise.pending = function Promise$Defer(caller) {\n    var promise = new Promise(INTERNAL);\n    if (debugging) promise._setTrace(typeof caller === \"function\"\n                              ? caller : Promise.defer, void 0);\n    return new PromiseResolver(promise);\n};\n\nPromise.bind = function Promise$Bind(thisArg) {\n    var ret = new Promise(INTERNAL);\n    if (debugging) ret._setTrace(Promise.bind, void 0);\n    ret._setFulfilled();\n    ret._setBoundTo(thisArg);\n    return ret;\n};\n\nPromise.cast = function Promise$_Cast(obj, caller) {\n    if (typeof caller !== \"function\") {\n        caller = Promise.cast;\n    }\n    var ret = Promise._cast(obj, caller, void 0);\n    if (!(ret instanceof Promise)) {\n        return Promise.resolve(ret, caller);\n    }\n    return ret;\n};\n\nPromise.onPossiblyUnhandledRejection =\nfunction Promise$OnPossiblyUnhandledRejection(fn) {\n    if (typeof fn === \"function\") {\n        CapturedTrace.possiblyUnhandledRejection = fn;\n    }\n    else {\n        CapturedTrace.possiblyUnhandledRejection = void 0;\n    }\n};\n\nvar debugging = false || !!(\n    typeof process !== \"undefined\" &&\n    typeof process.execPath === \"string\" &&\n    typeof process.env === \"object\" &&\n    (process.env[\"BLUEBIRD_DEBUG\"] ||\n        process.env[\"NODE_ENV\"] === \"development\")\n);\n\n\nPromise.longStackTraces = function Promise$LongStackTraces() {\n    if (async.haveItemsQueued() &&\n        debugging === false\n   ) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\");\n    }\n    debugging = CapturedTrace.isSupported();\n};\n\nPromise.hasLongStackTraces = function Promise$HasLongStackTraces() {\n    return debugging && CapturedTrace.isSupported();\n};\n\nPromise.prototype._setProxyHandlers =\nfunction Promise$_setProxyHandlers(receiver, promiseSlotValue) {\n    var index = this._length();\n\n    if (index >= 1048575 - 5) {\n        index = 0;\n        this._setLength(0);\n    }\n    if (index === 0) {\n        this._promise0 = promiseSlotValue;\n        this._receiver0 = receiver;\n    }\n    else {\n        var i = index - 5;\n        this[i + 3] = promiseSlotValue;\n        this[i + 4] = receiver;\n        this[i + 0] =\n        this[i + 1] =\n        this[i + 2] = void 0;\n    }\n    this._setLength(index + 5);\n};\n\nPromise.prototype._proxyPromiseArray =\nfunction Promise$_proxyPromiseArray(promiseArray, index) {\n    this._setProxyHandlers(promiseArray, index);\n};\n\nPromise.prototype._proxyPromise = function Promise$_proxyPromise(promise) {\n    promise._setProxied();\n    this._setProxyHandlers(promise, -1);\n};\n\nPromise.prototype._then =\nfunction Promise$_then(\n    didFulfill,\n    didReject,\n    didProgress,\n    receiver,\n    internalData,\n    caller\n) {\n    var haveInternalData = internalData !== void 0;\n    var ret = haveInternalData ? internalData : new Promise(INTERNAL);\n\n    if (debugging && !haveInternalData) {\n        var haveSameContext = this._peekContext() === this._traceParent;\n        ret._traceParent = haveSameContext ? this._traceParent : this;\n        ret._setTrace(typeof caller === \"function\"\n                ? caller\n                : this._then, this);\n    }\n\n    if (!haveInternalData && this._isBound()) {\n        ret._setBoundTo(this._boundTo);\n    }\n\n    var callbackIndex =\n        this._addCallbacks(didFulfill, didReject, didProgress, ret, receiver);\n\n    if (!haveInternalData && this._cancellable()) {\n        ret._setCancellable();\n        ret._cancellationParent = this;\n    }\n\n    if (this.isResolved()) {\n        async.invoke(this._queueSettleAt, this, callbackIndex);\n    }\n\n    return ret;\n};\n\nPromise.prototype._length = function Promise$_length() {\n    return this._bitField & 1048575;\n};\n\nPromise.prototype._isFollowingOrFulfilledOrRejected =\nfunction Promise$_isFollowingOrFulfilledOrRejected() {\n    return (this._bitField & 939524096) > 0;\n};\n\nPromise.prototype._isFollowing = function Promise$_isFollowing() {\n    return (this._bitField & 536870912) === 536870912;\n};\n\nPromise.prototype._setLength = function Promise$_setLength(len) {\n    this._bitField = (this._bitField & -1048576) |\n        (len & 1048575);\n};\n\nPromise.prototype._setFulfilled = function Promise$_setFulfilled() {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._setRejected = function Promise$_setRejected() {\n    this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._setFollowing = function Promise$_setFollowing() {\n    this._bitField = this._bitField | 536870912;\n};\n\nPromise.prototype._setIsFinal = function Promise$_setIsFinal() {\n    this._bitField = this._bitField | 33554432;\n};\n\nPromise.prototype._isFinal = function Promise$_isFinal() {\n    return (this._bitField & 33554432) > 0;\n};\n\nPromise.prototype._cancellable = function Promise$_cancellable() {\n    return (this._bitField & 67108864) > 0;\n};\n\nPromise.prototype._setCancellable = function Promise$_setCancellable() {\n    this._bitField = this._bitField | 67108864;\n};\n\nPromise.prototype._unsetCancellable = function Promise$_unsetCancellable() {\n    this._bitField = this._bitField & (~67108864);\n};\n\nPromise.prototype._setRejectionIsUnhandled =\nfunction Promise$_setRejectionIsUnhandled() {\n    this._bitField = this._bitField | 2097152;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled =\nfunction Promise$_unsetRejectionIsUnhandled() {\n    this._bitField = this._bitField & (~2097152);\n};\n\nPromise.prototype._isRejectionUnhandled =\nfunction Promise$_isRejectionUnhandled() {\n    return (this._bitField & 2097152) > 0;\n};\n\nPromise.prototype._setCarriedStackTrace =\nfunction Promise$_setCarriedStackTrace(capturedTrace) {\n    this._bitField = this._bitField | 1048576;\n    this._fulfillmentHandler0 = capturedTrace;\n};\n\nPromise.prototype._unsetCarriedStackTrace =\nfunction Promise$_unsetCarriedStackTrace() {\n    this._bitField = this._bitField & (~1048576);\n    this._fulfillmentHandler0 = void 0;\n};\n\nPromise.prototype._isCarryingStackTrace =\nfunction Promise$_isCarryingStackTrace() {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._getCarriedStackTrace =\nfunction Promise$_getCarriedStackTrace() {\n    return this._isCarryingStackTrace()\n        ? this._fulfillmentHandler0\n        : void 0;\n};\n\nPromise.prototype._receiverAt = function Promise$_receiverAt(index) {\n    var ret;\n    if (index === 0) {\n        ret = this._receiver0;\n    }\n    else {\n        ret = this[index + 4 - 5];\n    }\n    if (this._isBound() && ret === void 0) {\n        return this._boundTo;\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function Promise$_promiseAt(index) {\n    if (index === 0) return this._promise0;\n    return this[index + 3 - 5];\n};\n\nPromise.prototype._fulfillmentHandlerAt =\nfunction Promise$_fulfillmentHandlerAt(index) {\n    if (index === 0) return this._fulfillmentHandler0;\n    return this[index + 0 - 5];\n};\n\nPromise.prototype._rejectionHandlerAt =\nfunction Promise$_rejectionHandlerAt(index) {\n    if (index === 0) return this._rejectionHandler0;\n    return this[index + 1 - 5];\n};\n\nPromise.prototype._unsetAt = function Promise$_unsetAt(index) {\n     if (index === 0) {\n        this._rejectionHandler0 =\n        this._progressHandler0 =\n        this._promise0 =\n        this._receiver0 = void 0;\n        if (!this._isCarryingStackTrace()) {\n            this._fulfillmentHandler0 = void 0;\n        }\n    }\n    else {\n        this[index - 5 + 0] =\n        this[index - 5 + 1] =\n        this[index - 5 + 2] =\n        this[index - 5 + 3] =\n        this[index - 5 + 4] = void 0;\n    }\n};\n\nPromise.prototype._resolveFromResolver =\nfunction Promise$_resolveFromResolver(resolver) {\n    var promise = this;\n    var localDebugging = debugging;\n    if (localDebugging) {\n        this._setTrace(this._resolveFromResolver, void 0);\n        this._pushContext();\n    }\n    function Promise$_resolver(val) {\n        if (promise._tryFollow(val)) {\n            return;\n        }\n        promise._fulfill(val);\n    }\n    function Promise$_rejecter(val) {\n        var trace = canAttach(val) ? val : new Error(val + \"\");\n        promise._attachExtraTrace(trace);\n        markAsOriginatingFromRejection(val);\n        promise._reject(val, trace === val ? void 0 : trace);\n    }\n    var r = tryCatch2(resolver, void 0, Promise$_resolver, Promise$_rejecter);\n    if (localDebugging) this._popContext();\n\n    if (r !== void 0 && r === errorObj) {\n        var trace = canAttach(r.e) ? r.e : new Error(r.e + \"\");\n        promise._reject(r.e, trace);\n    }\n};\n\nPromise.prototype._addCallbacks = function Promise$_addCallbacks(\n    fulfill,\n    reject,\n    progress,\n    promise,\n    receiver\n) {\n    var index = this._length();\n\n    if (index >= 1048575 - 5) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        if (receiver !== void 0) this._receiver0 = receiver;\n        if (typeof fulfill === \"function\" && !this._isCarryingStackTrace())\n            this._fulfillmentHandler0 = fulfill;\n        if (typeof reject === \"function\") this._rejectionHandler0 = reject;\n        if (typeof progress === \"function\") this._progressHandler0 = progress;\n    }\n    else {\n        var i = index - 5;\n        this[i + 3] = promise;\n        this[i + 4] = receiver;\n        this[i + 0] = typeof fulfill === \"function\"\n                                            ? fulfill : void 0;\n        this[i + 1] = typeof reject === \"function\"\n                                            ? reject : void 0;\n        this[i + 2] = typeof progress === \"function\"\n                                            ? progress : void 0;\n    }\n    this._setLength(index + 5);\n    return index;\n};\n\n\n\nPromise.prototype._setBoundTo = function Promise$_setBoundTo(obj) {\n    if (obj !== void 0) {\n        this._bitField = this._bitField | 8388608;\n        this._boundTo = obj;\n    }\n    else {\n        this._bitField = this._bitField & (~8388608);\n    }\n};\n\nPromise.prototype._isBound = function Promise$_isBound() {\n    return (this._bitField & 8388608) === 8388608;\n};\n\nPromise.prototype._spreadSlowCase =\nfunction Promise$_spreadSlowCase(targetFn, promise, values, boundTo) {\n    var promiseForAll =\n            Promise$_CreatePromiseArray\n                (values, PromiseArray, this._spreadSlowCase, boundTo)\n            .promise()\n            ._then(function() {\n                return targetFn.apply(boundTo, arguments);\n            }, void 0, void 0, APPLY, void 0, this._spreadSlowCase);\n\n    promise._follow(promiseForAll);\n};\n\nPromise.prototype._callSpread =\nfunction Promise$_callSpread(handler, promise, value, localDebugging) {\n    var boundTo = this._isBound() ? this._boundTo : void 0;\n    if (isArray(value)) {\n        var caller = this._settlePromiseFromHandler;\n        for (var i = 0, len = value.length; i < len; ++i) {\n            if (isPromise(Promise._cast(value[i], caller, void 0))) {\n                this._spreadSlowCase(handler, promise, value, boundTo);\n                return;\n            }\n        }\n    }\n    if (localDebugging) promise._pushContext();\n    return tryCatchApply(handler, value, boundTo);\n};\n\nPromise.prototype._callHandler =\nfunction Promise$_callHandler(\n    handler, receiver, promise, value, localDebugging) {\n    var x;\n    if (receiver === APPLY && !this.isRejected()) {\n        x = this._callSpread(handler, promise, value, localDebugging);\n    }\n    else {\n        if (localDebugging) promise._pushContext();\n        x = tryCatch1(handler, receiver, value);\n    }\n    if (localDebugging) promise._popContext();\n    return x;\n};\n\nPromise.prototype._settlePromiseFromHandler =\nfunction Promise$_settlePromiseFromHandler(\n    handler, receiver, value, promise\n) {\n    if (!isPromise(promise)) {\n        handler.call(receiver, value, promise);\n        return;\n    }\n\n    var localDebugging = debugging;\n    var x = this._callHandler(handler, receiver,\n                                promise, value, localDebugging);\n\n    if (promise._isFollowing()) return;\n\n    if (x === errorObj || x === promise || x === NEXT_FILTER) {\n        var err = x === promise\n                    ? makeSelfResolutionError()\n                    : x.e;\n        var trace = canAttach(err) ? err : new Error(err + \"\");\n        if (x !== NEXT_FILTER) promise._attachExtraTrace(trace);\n        promise._rejectUnchecked(err, trace);\n    }\n    else {\n        var castValue = Promise._cast(x,\n                    localDebugging ? this._settlePromiseFromHandler : void 0,\n                    promise);\n\n        if (isPromise(castValue)) {\n            if (castValue.isRejected() &&\n                !castValue._isCarryingStackTrace() &&\n                !canAttach(castValue._settledValue)) {\n                var trace = new Error(castValue._settledValue + \"\");\n                promise._attachExtraTrace(trace);\n                castValue._setCarriedStackTrace(trace);\n            }\n            promise._follow(castValue);\n            if (castValue._cancellable()) {\n                promise._cancellationParent = castValue;\n                promise._setCancellable();\n            }\n        }\n        else {\n            promise._fulfillUnchecked(x);\n        }\n    }\n};\n\nPromise.prototype._follow =\nfunction Promise$_follow(promise) {\n    this._setFollowing();\n\n    if (promise.isPending()) {\n        if (promise._cancellable() ) {\n            this._cancellationParent = promise;\n            this._setCancellable();\n        }\n        promise._proxyPromise(this);\n    }\n    else if (promise.isFulfilled()) {\n        this._fulfillUnchecked(promise._settledValue);\n    }\n    else {\n        this._rejectUnchecked(promise._settledValue,\n            promise._getCarriedStackTrace());\n    }\n\n    if (promise._isRejectionUnhandled()) promise._unsetRejectionIsUnhandled();\n\n    if (debugging &&\n        promise._traceParent == null) {\n        promise._traceParent = this;\n    }\n};\n\nPromise.prototype._tryFollow =\nfunction Promise$_tryFollow(value) {\n    if (this._isFollowingOrFulfilledOrRejected() ||\n        value === this) {\n        return false;\n    }\n    var maybePromise = Promise._cast(value, this._tryFollow, void 0);\n    if (!isPromise(maybePromise)) {\n        return false;\n    }\n    this._follow(maybePromise);\n    return true;\n};\n\nPromise.prototype._resetTrace = function Promise$_resetTrace(caller) {\n    if (debugging) {\n        var context = this._peekContext();\n        var isTopLevel = context === void 0;\n        this._trace = new CapturedTrace(\n            typeof caller === \"function\"\n            ? caller\n            : this._resetTrace,\n            isTopLevel\n       );\n    }\n};\n\nPromise.prototype._setTrace = function Promise$_setTrace(caller, parent) {\n    if (debugging) {\n        var context = this._peekContext();\n        this._traceParent = context;\n        var isTopLevel = context === void 0;\n        if (parent !== void 0 &&\n            parent._traceParent === context) {\n            this._trace = parent._trace;\n        }\n        else {\n            this._trace = new CapturedTrace(\n                typeof caller === \"function\"\n                ? caller\n                : this._setTrace,\n                isTopLevel\n           );\n        }\n    }\n    return this;\n};\n\nPromise.prototype._attachExtraTrace =\nfunction Promise$_attachExtraTrace(error) {\n    if (debugging) {\n        var promise = this;\n        var stack = error.stack;\n        stack = typeof stack === \"string\"\n            ? stack.split(\"\\n\") : [];\n        var headerLineCount = 1;\n\n        while(promise != null &&\n            promise._trace != null) {\n            stack = CapturedTrace.combine(\n                stack,\n                promise._trace.stack.split(\"\\n\")\n           );\n            promise = promise._traceParent;\n        }\n\n        var max = Error.stackTraceLimit + headerLineCount;\n        var len = stack.length;\n        if (len  > max) {\n            stack.length = max;\n        }\n        if (stack.length <= headerLineCount) {\n            error.stack = \"(No stack trace)\";\n        }\n        else {\n            error.stack = stack.join(\"\\n\");\n        }\n    }\n};\n\nPromise.prototype._cleanValues = function Promise$_cleanValues() {\n    if (this._cancellable()) {\n        this._cancellationParent = void 0;\n    }\n};\n\nPromise.prototype._fulfill = function Promise$_fulfill(value) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    this._fulfillUnchecked(value);\n};\n\nPromise.prototype._reject =\nfunction Promise$_reject(reason, carriedStackTrace) {\n    if (this._isFollowingOrFulfilledOrRejected()) return;\n    this._rejectUnchecked(reason, carriedStackTrace);\n};\n\nPromise.prototype._settlePromiseAt = function Promise$_settlePromiseAt(index) {\n    var handler = this.isFulfilled()\n        ? this._fulfillmentHandlerAt(index)\n        : this._rejectionHandlerAt(index);\n\n    var value = this._settledValue;\n    var receiver = this._receiverAt(index);\n    var promise = this._promiseAt(index);\n\n    if (typeof handler === \"function\") {\n        this._settlePromiseFromHandler(handler, receiver, value, promise);\n    }\n    else {\n        var done = false;\n        var isFulfilled = this.isFulfilled();\n        if (receiver !== void 0) {\n            if (receiver instanceof Promise &&\n                receiver._isProxied()) {\n                receiver._unsetProxied();\n\n                if (isFulfilled) receiver._fulfillUnchecked(value);\n                else receiver._rejectUnchecked(value,\n                    this._getCarriedStackTrace());\n                done = true;\n            }\n            else if (isPromiseArrayProxy(receiver, promise)) {\n\n                if (isFulfilled) receiver._promiseFulfilled(value, promise);\n                else receiver._promiseRejected(value, promise);\n\n                done = true;\n            }\n        }\n\n        if (!done) {\n\n            if (isFulfilled) promise._fulfill(value);\n            else promise._reject(value, this._getCarriedStackTrace());\n\n        }\n    }\n\n    if (index >= 256) {\n        this._queueGC();\n    }\n};\n\nPromise.prototype._isProxied = function Promise$_isProxied() {\n    return (this._bitField & 4194304) === 4194304;\n};\n\nPromise.prototype._setProxied = function Promise$_setProxied() {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._unsetProxied = function Promise$_unsetProxied() {\n    this._bitField = this._bitField & (~4194304);\n};\n\nPromise.prototype._isGcQueued = function Promise$_isGcQueued() {\n    return (this._bitField & -1073741824) === -1073741824;\n};\n\nPromise.prototype._setGcQueued = function Promise$_setGcQueued() {\n    this._bitField = this._bitField | -1073741824;\n};\n\nPromise.prototype._unsetGcQueued = function Promise$_unsetGcQueued() {\n    this._bitField = this._bitField & (~-1073741824);\n};\n\nPromise.prototype._queueGC = function Promise$_queueGC() {\n    if (this._isGcQueued()) return;\n    this._setGcQueued();\n    async.invokeLater(this._gc, this, void 0);\n};\n\nPromise.prototype._gc = function Promise$gc() {\n    var len = this._length();\n    this._unsetAt(0);\n    for (var i = 0; i < len; i++) {\n        delete this[i];\n    }\n    this._setLength(0);\n    this._unsetGcQueued();\n};\n\nPromise.prototype._queueSettleAt = function Promise$_queueSettleAt(index) {\n    if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled();\n    async.invoke(this._settlePromiseAt, this, index);\n};\n\nPromise.prototype._fulfillUnchecked =\nfunction Promise$_fulfillUnchecked(value) {\n    if (!this.isPending()) return;\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._rejectUnchecked(err, void 0);\n    }\n    this._cleanValues();\n    this._setFulfilled();\n    this._settledValue = value;\n    var len = this._length();\n\n    if (len > 0) {\n        async.invoke(this._fulfillPromises, this, len);\n    }\n};\n\nPromise.prototype._rejectUncheckedCheckError =\nfunction Promise$_rejectUncheckedCheckError(reason) {\n    var trace = canAttach(reason) ? reason : new Error(reason + \"\");\n    this._rejectUnchecked(reason, trace === reason ? void 0 : trace);\n};\n\nPromise.prototype._rejectUnchecked =\nfunction Promise$_rejectUnchecked(reason, trace) {\n    if (!this.isPending()) return;\n    if (reason === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._rejectUnchecked(err);\n    }\n    this._cleanValues();\n    this._setRejected();\n    this._settledValue = reason;\n\n    if (this._isFinal()) {\n        async.invokeLater(thrower, void 0, trace === void 0 ? reason : trace);\n        return;\n    }\n    var len = this._length();\n\n    if (trace !== void 0) this._setCarriedStackTrace(trace);\n\n    if (len > 0) {\n        async.invoke(this._rejectPromises, this, len);\n    }\n    else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._rejectPromises = function Promise$_rejectPromises(len) {\n    len = this._length();\n    for (var i = 0; i < len; i+= 5) {\n        this._settlePromiseAt(i);\n    }\n    this._unsetCarriedStackTrace();\n};\n\nPromise.prototype._fulfillPromises = function Promise$_fulfillPromises(len) {\n    len = this._length();\n    for (var i = 0; i < len; i+= 5) {\n        this._settlePromiseAt(i);\n    }\n};\n\nPromise.prototype._ensurePossibleRejectionHandled =\nfunction Promise$_ensurePossibleRejectionHandled() {\n    this._setRejectionIsUnhandled();\n    if (CapturedTrace.possiblyUnhandledRejection !== void 0) {\n        async.invokeLater(this._notifyUnhandledRejection, this, void 0);\n    }\n};\n\nPromise.prototype._notifyUnhandledRejection =\nfunction Promise$_notifyUnhandledRejection() {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._settledValue;\n        var trace = this._getCarriedStackTrace();\n\n        this._unsetRejectionIsUnhandled();\n\n        if (trace !== void 0) {\n            this._unsetCarriedStackTrace();\n            reason = trace;\n        }\n        if (typeof CapturedTrace.possiblyUnhandledRejection === \"function\") {\n            CapturedTrace.possiblyUnhandledRejection(reason, this);\n        }\n    }\n};\n\nvar contextStack = [];\nPromise.prototype._peekContext = function Promise$_peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return void 0;\n\n};\n\nPromise.prototype._pushContext = function Promise$_pushContext() {\n    if (!debugging) return;\n    contextStack.push(this);\n};\n\nPromise.prototype._popContext = function Promise$_popContext() {\n    if (!debugging) return;\n    contextStack.pop();\n};\n\nfunction Promise$_CreatePromiseArray(\n    promises, PromiseArrayConstructor, caller, boundTo) {\n\n    var list = null;\n    if (isArray(promises)) {\n        list = promises;\n    }\n    else {\n        list = Promise._cast(promises, caller, void 0);\n        if (list !== promises) {\n            list._setBoundTo(boundTo);\n        }\n        else if (!isPromise(list)) {\n            list = null;\n        }\n    }\n    if (list !== null) {\n        return new PromiseArrayConstructor(\n            list,\n            typeof caller === \"function\"\n                ? caller\n                : Promise$_CreatePromiseArray,\n            boundTo\n       );\n    }\n    return {\n        promise: function() {return apiRejection(\"expecting an array, a promise or a thenable\");}\n    };\n}\n\nvar old = global.Promise;\n\nPromise.noConflict = function() {\n    if (global.Promise === Promise) {\n        global.Promise = old;\n    }\n    return Promise;\n};\n\nif (!CapturedTrace.isSupported()) {\n    Promise.longStackTraces = function(){};\n    debugging = false;\n}\n\nPromise._makeSelfResolutionError = makeSelfResolutionError;\nrequire(\"./finally.js\")(Promise, NEXT_FILTER);\nrequire(\"./direct_resolve.js\")(Promise);\nrequire(\"./thenables.js\")(Promise, INTERNAL);\nPromise.RangeError = RangeError;\nPromise.CancellationError = CancellationError;\nPromise.TimeoutError = TimeoutError;\nPromise.TypeError = TypeError;\nPromise.RejectionError = RejectionError;\nrequire('./timers.js')(Promise,INTERNAL);\nrequire('./synchronous_inspection.js')(Promise);\nrequire('./any.js')(Promise,Promise$_CreatePromiseArray,PromiseArray);\nrequire('./race.js')(Promise,INTERNAL);\nrequire('./call_get.js')(Promise);\nrequire('./filter.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection);\nrequire('./generators.js')(Promise,apiRejection,INTERNAL);\nrequire('./map.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection);\nrequire('./nodeify.js')(Promise);\nrequire('./promisify.js')(Promise,INTERNAL);\nrequire('./props.js')(Promise,PromiseArray);\nrequire('./reduce.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection,INTERNAL);\nrequire('./settle.js')(Promise,Promise$_CreatePromiseArray,PromiseArray);\nrequire('./some.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection);\nrequire('./progress.js')(Promise,isPromiseArrayProxy);\nrequire('./cancel.js')(Promise,INTERNAL);\n\nPromise.prototype = Promise.prototype;\nreturn Promise;\n\n};\n\n},{\"./any.js\":1,\"./assert.js\":2,\"./async.js\":3,\"./call_get.js\":5,\"./cancel.js\":6,\"./captured_trace.js\":7,\"./catch_filter.js\":8,\"./direct_resolve.js\":9,\"./errors.js\":10,\"./errors_api_rejection\":11,\"./filter.js\":13,\"./finally.js\":14,\"./generators.js\":15,\"./global.js\":16,\"./map.js\":17,\"./nodeify.js\":18,\"./progress.js\":19,\"./promise_array.js\":21,\"./promise_resolver.js\":23,\"./promisify.js\":25,\"./props.js\":27,\"./race.js\":29,\"./reduce.js\":30,\"./settle.js\":32,\"./some.js\":34,\"./synchronous_inspection.js\":36,\"./thenables.js\":37,\"./timers.js\":38,\"./util.js\":39}],21:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar ASSERT = require(\"./assert.js\");\nvar canAttach = require(\"./errors.js\").canAttach;\nvar util = require(\"./util.js\");\nvar async = require(\"./async.js\");\nvar hasOwn = {}.hasOwnProperty;\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -1: return void 0;\n    case -2: return [];\n    case -3: return {};\n    }\n}\n\nfunction PromiseArray(values, caller, boundTo) {\n    var promise = this._promise = new Promise(INTERNAL);\n    var parent = void 0;\n    if (Promise.is(values)) {\n        parent = values;\n        if (values._cancellable()) {\n            promise._setCancellable();\n            promise._cancellationParent = values;\n        }\n        if (values._isBound()) {\n            promise._setBoundTo(boundTo);\n        }\n    }\n    promise._setTrace(caller, parent);\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(void 0, -2);\n}\nPromiseArray.PropertiesPromiseArray = function() {};\n\nPromiseArray.prototype.length = function PromiseArray$length() {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function PromiseArray$promise() {\n    return this._promise;\n};\n\nPromiseArray.prototype._init =\nfunction PromiseArray$_init(_, resolveValueIfEmpty) {\n    var values = this._values;\n    if (Promise.is(values)) {\n        if (values.isFulfilled()) {\n            values = values._settledValue;\n            if (!isArray(values)) {\n                var err = new Promise.TypeError(\"expecting an array, a promise or a thenable\");\n                this.__hardReject__(err);\n                return;\n            }\n            this._values = values;\n        }\n        else if (values.isPending()) {\n            values._then(\n                this._init,\n                this._reject,\n                void 0,\n                this,\n                resolveValueIfEmpty,\n                this.constructor\n           );\n            return;\n        }\n        else {\n            this._reject(values._settledValue);\n            return;\n        }\n    }\n\n    if (values.length === 0) {\n        this._resolve(toResolutionValue(resolveValueIfEmpty));\n        return;\n    }\n    var len = values.length;\n    var newLen = len;\n    var newValues;\n    if (this instanceof PromiseArray.PropertiesPromiseArray) {\n        newValues = this._values;\n    }\n    else {\n        newValues = new Array(len);\n    }\n    var isDirectScanNeeded = false;\n    for (var i = 0; i < len; ++i) {\n        var promise = values[i];\n        if (promise === void 0 && !hasOwn.call(values, i)) {\n            newLen--;\n            continue;\n        }\n        var maybePromise = Promise._cast(promise, void 0, void 0);\n        if (maybePromise instanceof Promise &&\n            maybePromise.isPending()) {\n            maybePromise._proxyPromiseArray(this, i);\n        }\n        else {\n            isDirectScanNeeded = true;\n        }\n        newValues[i] = maybePromise;\n    }\n    if (newLen === 0) {\n        if (resolveValueIfEmpty === -2) {\n            this._resolve(newValues);\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    this._values = newValues;\n    this._length = newLen;\n    if (isDirectScanNeeded) {\n        var scanMethod = newLen === len\n            ? this._scanDirectValues\n            : this._scanDirectValuesHoled;\n        async.invoke(scanMethod, this, len);\n    }\n};\n\nPromiseArray.prototype._settlePromiseAt =\nfunction PromiseArray$_settlePromiseAt(index) {\n    var value = this._values[index];\n    if (!Promise.is(value)) {\n        this._promiseFulfilled(value, index);\n    }\n    else if (value.isFulfilled()) {\n        this._promiseFulfilled(value._settledValue, index);\n    }\n    else if (value.isRejected()) {\n        this._promiseRejected(value._settledValue, index);\n    }\n};\n\nPromiseArray.prototype._scanDirectValuesHoled =\nfunction PromiseArray$_scanDirectValuesHoled(len) {\n    for (var i = 0; i < len; ++i) {\n        if (this._isResolved()) {\n            break;\n        }\n        if (hasOwn.call(this._values, i)) {\n            this._settlePromiseAt(i);\n        }\n    }\n};\n\nPromiseArray.prototype._scanDirectValues =\nfunction PromiseArray$_scanDirectValues(len) {\n    for (var i = 0; i < len; ++i) {\n        if (this._isResolved()) {\n            break;\n        }\n        this._settlePromiseAt(i);\n    }\n};\n\nPromiseArray.prototype._isResolved = function PromiseArray$_isResolved() {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function PromiseArray$_resolve(value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype.__hardReject__ =\nPromiseArray.prototype._reject = function PromiseArray$_reject(reason) {\n    this._values = null;\n    var trace = canAttach(reason) ? reason : new Error(reason + \"\");\n    this._promise._attachExtraTrace(trace);\n    this._promise._reject(reason, trace);\n};\n\nPromiseArray.prototype._promiseProgressed =\nfunction PromiseArray$_promiseProgressed(progressValue, index) {\n    if (this._isResolved()) return;\n    this._promise._progress({\n        index: index,\n        value: progressValue\n    });\n};\n\n\nPromiseArray.prototype._promiseFulfilled =\nfunction PromiseArray$_promiseFulfilled(value, index) {\n    if (this._isResolved()) return;\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n    }\n};\n\nPromiseArray.prototype._promiseRejected =\nfunction PromiseArray$_promiseRejected(reason, index) {\n    if (this._isResolved()) return;\n    this._totalResolved++;\n    this._reject(reason);\n};\n\nreturn PromiseArray;\n};\n\n},{\"./assert.js\":2,\"./async.js\":3,\"./errors.js\":10,\"./util.js\":39}],22:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar TypeError = require(\"./errors.js\").TypeError;\n\nfunction PromiseInspection(promise) {\n    if (promise !== void 0) {\n        this._bitField = promise._bitField;\n        this._settledValue = promise.isResolved()\n            ? promise._settledValue\n            : void 0;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValue = void 0;\n    }\n}\nPromiseInspection.prototype.isFulfilled =\nfunction PromiseInspection$isFulfilled() {\n    return (this._bitField & 268435456) > 0;\n};\n\nPromiseInspection.prototype.isRejected =\nfunction PromiseInspection$isRejected() {\n    return (this._bitField & 134217728) > 0;\n};\n\nPromiseInspection.prototype.isPending = function PromiseInspection$isPending() {\n    return (this._bitField & 402653184) === 0;\n};\n\nPromiseInspection.prototype.value = function PromiseInspection$value() {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\");\n    }\n    return this._settledValue;\n};\n\nPromiseInspection.prototype.error = function PromiseInspection$error() {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\");\n    }\n    return this._settledValue;\n};\n\nmodule.exports = PromiseInspection;\n\n},{\"./errors.js\":10}],23:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar util = require(\"./util.js\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = require(\"./errors.js\");\nvar TimeoutError = errors.TimeoutError;\nvar RejectionError = errors.RejectionError;\nvar async = require(\"./async.js\");\nvar haveGetters = util.haveGetters;\nvar es5 = require(\"./es5.js\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nfunction wrapAsRejectionError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new RejectionError(obj);\n    }\n    else {\n        ret = obj;\n    }\n    errors.markAsOriginatingFromRejection(ret);\n    return ret;\n}\n\nfunction nodebackForPromise(promise) {\n    function PromiseResolver$_callback(err, value) {\n        if (promise === null) return;\n\n        if (err) {\n            var wrapped = wrapAsRejectionError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        }\n        else {\n            if (arguments.length > 2) {\n                var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}\n                promise._fulfill(args);\n            }\n            else {\n                promise._fulfill(value);\n            }\n        }\n\n        promise = null;\n    }\n    return PromiseResolver$_callback;\n}\n\n\nvar PromiseResolver;\nif (!haveGetters) {\n    PromiseResolver = function PromiseResolver(promise) {\n        this.promise = promise;\n        this.asCallback = nodebackForPromise(promise);\n        this.callback = this.asCallback;\n    };\n}\nelse {\n    PromiseResolver = function PromiseResolver(promise) {\n        this.promise = promise;\n    };\n}\nif (haveGetters) {\n    var prop = {\n        get: function() {\n            return nodebackForPromise(this.promise);\n        }\n    };\n    es5.defineProperty(PromiseResolver.prototype, \"asCallback\", prop);\n    es5.defineProperty(PromiseResolver.prototype, \"callback\", prop);\n}\n\nPromiseResolver._nodebackForPromise = nodebackForPromise;\n\nPromiseResolver.prototype.toString = function PromiseResolver$toString() {\n    return \"[object PromiseResolver]\";\n};\n\nPromiseResolver.prototype.resolve =\nPromiseResolver.prototype.fulfill = function PromiseResolver$resolve(value) {\n    var promise = this.promise;\n    if (promise._tryFollow(value)) {\n        return;\n    }\n    async.invoke(promise._fulfill, promise, value);\n};\n\nPromiseResolver.prototype.reject = function PromiseResolver$reject(reason) {\n    var promise = this.promise;\n    errors.markAsOriginatingFromRejection(reason);\n    var trace = errors.canAttach(reason) ? reason : new Error(reason + \"\");\n    promise._attachExtraTrace(trace);\n    async.invoke(promise._reject, promise, reason);\n    if (trace !== reason) {\n        async.invoke(this._setCarriedStackTrace, this, trace);\n    }\n};\n\nPromiseResolver.prototype.progress =\nfunction PromiseResolver$progress(value) {\n    async.invoke(this.promise._progress, this.promise, value);\n};\n\nPromiseResolver.prototype.cancel = function PromiseResolver$cancel() {\n    async.invoke(this.promise.cancel, this.promise, void 0);\n};\n\nPromiseResolver.prototype.timeout = function PromiseResolver$timeout() {\n    this.reject(new TimeoutError(\"timeout\"));\n};\n\nPromiseResolver.prototype.isResolved = function PromiseResolver$isResolved() {\n    return this.promise.isResolved();\n};\n\nPromiseResolver.prototype.toJSON = function PromiseResolver$toJSON() {\n    return this.promise.toJSON();\n};\n\nPromiseResolver.prototype._setCarriedStackTrace =\nfunction PromiseResolver$_setCarriedStackTrace(trace) {\n    if (this.promise.isRejected()) {\n        this.promise._setCarriedStackTrace(trace);\n    }\n};\n\nmodule.exports = PromiseResolver;\n\n},{\"./async.js\":3,\"./errors.js\":10,\"./es5.js\":12,\"./util.js\":39}],24:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar errors = require(\"./errors.js\");\nvar ASSERT = require(\"./assert.js\");\nvar TypeError = errors.TypeError;\nvar util = require(\"./util.js\");\nvar isArray = util.isArray;\nvar errorObj = util.errorObj;\nvar tryCatch1 = util.tryCatch1;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value) {\n    var _yieldHandlers = yieldHandlers;\n    var _errorObj = errorObj;\n    var _Promise = Promise;\n    var len = _yieldHandlers.length;\n    for (var i = 0; i < len; ++i) {\n        var result = tryCatch1(_yieldHandlers[i], void 0, value);\n        if (result === _errorObj) {\n            return _Promise.reject(_errorObj.e);\n        }\n        var maybePromise = _Promise._cast(result,\n            promiseFromYieldHandler, void 0);\n        if (maybePromise instanceof _Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, caller) {\n    var promise = this._promise = new Promise(INTERNAL);\n    promise._setTrace(caller, void 0);\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = void 0;\n}\n\nPromiseSpawn.prototype.promise = function PromiseSpawn$promise() {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function PromiseSpawn$_run() {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = void 0;\n    this._next(void 0);\n};\n\nPromiseSpawn.prototype._continue = function PromiseSpawn$_continue(result) {\n    if (result === errorObj) {\n        this._generator = void 0;\n        var trace = errors.canAttach(result.e)\n            ? result.e : new Error(result.e + \"\");\n        this._promise._attachExtraTrace(trace);\n        this._promise._reject(result.e, trace);\n        return;\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._generator = void 0;\n        if (!this._promise._tryFollow(value)) {\n            this._promise._fulfill(value);\n        }\n    }\n    else {\n        var maybePromise = Promise._cast(value, PromiseSpawn$_continue, void 0);\n        if (!(maybePromise instanceof Promise)) {\n            if (isArray(maybePromise)) {\n                maybePromise = Promise.all(maybePromise);\n            }\n            else {\n                maybePromise = promiseFromYieldHandler(maybePromise);\n            }\n            if (maybePromise === null) {\n                this._throw(new TypeError(\"A value was yielded that could not be treated as a promise\"));\n                return;\n            }\n        }\n        maybePromise._then(\n            this._next,\n            this._throw,\n            void 0,\n            this,\n            null,\n            void 0\n       );\n    }\n};\n\nPromiseSpawn.prototype._throw = function PromiseSpawn$_throw(reason) {\n    if (errors.canAttach(reason))\n        this._promise._attachExtraTrace(reason);\n    this._continue(\n        tryCatch1(this._generator[\"throw\"], this._generator, reason)\n   );\n};\n\nPromiseSpawn.prototype._next = function PromiseSpawn$_next(value) {\n    this._continue(\n        tryCatch1(this._generator.next, this._generator, value)\n   );\n};\n\nPromiseSpawn.addYieldHandler = function PromiseSpawn$AddYieldHandler(fn) {\n    if (typeof fn !== \"function\") throw new TypeError(\"fn must be a function\");\n    yieldHandlers.push(fn);\n};\n\nreturn PromiseSpawn;\n};\n\n},{\"./assert.js\":2,\"./errors.js\":10,\"./util.js\":39}],25:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = require(\"./util.js\");\nvar es5 = require(\"./es5.js\");\nvar nodebackForPromise = require(\"./promise_resolver.js\")\n    ._nodebackForPromise;\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar notEnumerableProp = util.notEnumerableProp;\nvar deprecated = util.deprecated;\nvar ASSERT = require(\"./assert.js\");\n\n\nvar roriginal = new RegExp(\"__beforePromisified__\" + \"$\");\nvar hasProp = {}.hasOwnProperty;\nfunction isPromisified(fn) {\n    return fn.__isPromisified__ === true;\n}\nvar inheritedMethods = (function() {\n    if (es5.isES5) {\n        var create = Object.create;\n        var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n        return function(cur) {\n            var original = cur;\n            var ret = [];\n            var visitedKeys = create(null);\n            while (cur !== null) {\n                var keys = es5.keys(cur);\n                for (var i = 0, len = keys.length; i < len; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key] ||\n                        roriginal.test(key) ||\n                        hasProp.call(original, key + \"__beforePromisified__\")\n                   ) {\n                        continue;\n                    }\n                    visitedKeys[key] = true;\n                    var desc = getOwnPropertyDescriptor(cur, key);\n                    if (desc != null &&\n                        typeof desc.value === \"function\" &&\n                        !isPromisified(desc.value)) {\n                        ret.push(key, desc.value);\n                    }\n                }\n                cur = es5.getPrototypeOf(cur);\n            }\n            return ret;\n        };\n    }\n    else {\n        return function(obj) {\n            var ret = [];\n            /*jshint forin:false */\n            for (var key in obj) {\n                if (roriginal.test(key) ||\n                    hasProp.call(obj, key + \"__beforePromisified__\")) {\n                    continue;\n                }\n                var fn = obj[key];\n                if (typeof fn === \"function\" &&\n                    !isPromisified(fn)) {\n                    ret.push(key, fn);\n                }\n            }\n            return ret;\n        };\n    }\n})();\n\nfunction switchCaseArgumentOrder(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 5);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        if (i === likelyArgumentCount) continue;\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 5; ++i) {\n        ret.push(i);\n    }\n    return ret;\n}\n\nfunction parameterDeclaration(parameterCount) {\n    var ret = new Array(parameterCount);\n    for(var i = 0; i < ret.length; ++i) {\n        ret[i] = \"_arg\" + i;\n    }\n    return ret.join(\", \");\n}\n\nfunction parameterCount(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n}\n\nfunction propertyAccess(id) {\n    var rident = /^[a-z$_][a-z$_0-9]*$/i;\n\n    if (rident.test(id)) {\n        return \".\" + id;\n    }\n    else return \"['\" + id.replace(/(['\\\\])/g, \"\\\\$1\") + \"']\";\n}\n\nfunction makeNodePromisifiedEval(callback, receiver, originalName, fn) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n\n    var callbackName = (typeof originalName === \"string\" ?\n        originalName + \"Async\" :\n        \"promisified\");\n\n    function generateCallForArgumentCount(count) {\n        var args = new Array(count);\n        for (var i = 0, len = args.length; i < len; ++i) {\n            args[i] = \"arguments[\" + i + \"]\";\n        }\n        var comma = count > 0 ? \",\" : \"\";\n\n        if (typeof callback === \"string\" &&\n            receiver === THIS) {\n            return \"this\" + propertyAccess(callback) + \"(\"+args.join(\",\") +\n                comma +\" fn);\"+\n                \"break;\";\n        }\n        return (receiver === void 0\n            ? \"callback(\"+args.join(\",\")+ comma +\" fn);\"\n            : \"callback.call(\"+(receiver === THIS\n                ? \"this\"\n                : \"receiver\")+\", \"+args.join(\",\") + comma + \" fn);\") +\n        \"break;\";\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for(var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n        ret += \"default: var args = new Array(len + 1);\" +\n            \"var i = 0;\" +\n            \"for (var i = 0; i < len; ++i) { \" +\n            \"   args[i] = arguments[i];\" +\n            \"}\" +\n            \"args[i] = fn;\" +\n\n            (typeof callback === \"string\"\n            ? \"this\" + propertyAccess(callback) + \".apply(\"\n            : \"callback.apply(\") +\n\n            (receiver === THIS ? \"this\" : \"receiver\") +\n            \", args); break;\";\n        return ret;\n    }\n\n    return new Function(\"Promise\", \"callback\", \"receiver\",\n            \"withAppended\", \"maybeWrapAsError\", \"nodebackForPromise\",\n            \"INTERNAL\",\n        \"var ret = function \" + callbackName +\n        \"(\" + parameterDeclaration(newParameterCount) + \") {\\\"use strict\\\";\" +\n        \"var len = arguments.length;\" +\n        \"var promise = new Promise(INTERNAL);\"+\n        \"promise._setTrace(\" + callbackName + \", void 0);\" +\n        \"var fn = nodebackForPromise(promise);\"+\n        \"try {\" +\n        \"switch(len) {\" +\n        generateArgumentSwitchCase() +\n        \"}\" +\n        \"}\" +\n        \"catch(e){ \" +\n        \"var wrapped = maybeWrapAsError(e);\" +\n        \"promise._attachExtraTrace(wrapped);\" +\n        \"promise._reject(wrapped);\" +\n        \"}\" +\n        \"return promise;\" +\n        \"\" +\n        \"}; ret.__isPromisified__ = true; return ret;\"\n   )(Promise, callback, receiver, withAppended,\n        maybeWrapAsError, nodebackForPromise, INTERNAL);\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver) {\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        if (typeof callback === \"string\") {\n            callback = _receiver[callback];\n        }\n        var promise = new Promise(INTERNAL);\n        promise._setTrace(promisified, void 0);\n        var fn = nodebackForPromise(promise);\n        try {\n            callback.apply(_receiver, withAppended(arguments, fn));\n        }\n        catch(e) {\n            var wrapped = maybeWrapAsError(e);\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        }\n        return promise;\n    }\n    promisified.__isPromisified__ = true;\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction f(){}\nfunction _promisify(callback, receiver, isAll) {\n    if (isAll) {\n        var methods = inheritedMethods(callback);\n        for (var i = 0, len = methods.length; i < len; i+= 2) {\n            var key = methods[i];\n            var fn = methods[i+1];\n            var originalKey = key + \"__beforePromisified__\";\n            var promisifiedKey = key + \"Async\";\n            notEnumerableProp(callback, originalKey, fn);\n            callback[promisifiedKey] =\n                makeNodePromisified(originalKey, THIS,\n                    key, fn);\n        }\n        if (methods.length > 16) f.prototype = callback;\n        return callback;\n    }\n    else {\n        return makeNodePromisified(callback, receiver, void 0, callback);\n    }\n}\n\nPromise.promisify = function Promise$Promisify(fn, receiver) {\n    if (typeof fn === \"object\" && fn !== null) {\n        deprecated(\"Promise.promisify for promisifying entire objects is deprecated. Use Promise.promisifyAll instead.\");\n        return _promisify(fn, receiver, true);\n    }\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"fn must be a function\");\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    return _promisify(\n        fn,\n        arguments.length < 2 ? THIS : receiver,\n        false);\n};\n\nPromise.promisifyAll = function Promise$PromisifyAll(target) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\");\n    }\n    return _promisify(target, void 0, true);\n};\n};\n\n\n},{\"./assert.js\":2,\"./es5.js\":12,\"./promise_resolver.js\":23,\"./util.js\":39}],26:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray) {\nvar ASSERT = require(\"./assert.js\");\nvar util = require(\"./util.js\");\nvar inherits = util.inherits;\nvar es5 = require(\"./es5.js\");\n\nfunction PropertiesPromiseArray(obj, caller, boundTo) {\n    var keys = es5.keys(obj);\n    var values = new Array(keys.length);\n    for (var i = 0, len = values.length; i < len; ++i) {\n        values[i] = obj[keys[i]];\n    }\n    this.constructor$(values, caller, boundTo);\n    if (!this._isResolved()) {\n        for (var i = 0, len = keys.length; i < len; ++i) {\n            values.push(keys[i]);\n        }\n    }\n}\ninherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init =\nfunction PropertiesPromiseArray$_init() {\n    this._init$(void 0, -3) ;\n};\n\nPropertiesPromiseArray.prototype._promiseFulfilled =\nfunction PropertiesPromiseArray$_promiseFulfilled(value, index) {\n    if (this._isResolved()) return;\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val = {};\n        var keyOffset = this.length();\n        for (var i = 0, len = this.length(); i < len; ++i) {\n            val[this._values[i + keyOffset]] = this._values[i];\n        }\n        this._resolve(val);\n    }\n};\n\nPropertiesPromiseArray.prototype._promiseProgressed =\nfunction PropertiesPromiseArray$_promiseProgressed(value, index) {\n    if (this._isResolved()) return;\n\n    this._promise._progress({\n        key: this._values[index + this.length()],\n        value: value\n    });\n};\n\nPromiseArray.PropertiesPromiseArray = PropertiesPromiseArray;\n\nreturn PropertiesPromiseArray;\n};\n\n},{\"./assert.js\":2,\"./es5.js\":12,\"./util.js\":39}],27:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray) {\n    var PropertiesPromiseArray = require(\"./properties_promise_array.js\")(\n        Promise, PromiseArray);\n    var util = require(\"./util.js\");\n    var apiRejection = require(\"./errors_api_rejection\")(Promise);\n    var isObject = util.isObject;\n\n    function Promise$_Props(promises, useBound, caller) {\n        var ret;\n        var castValue = Promise._cast(promises, caller, void 0);\n\n        if (!isObject(castValue)) {\n            return apiRejection(\"cannot await properties of a non-object\");\n        }\n        else if (Promise.is(castValue)) {\n            ret = castValue._then(Promise.props, void 0, void 0,\n                            void 0, void 0, caller);\n        }\n        else {\n            ret = new PropertiesPromiseArray(\n                castValue,\n                caller,\n                useBound === true && castValue._isBound()\n                            ? castValue._boundTo\n                            : void 0\n           ).promise();\n            useBound = false;\n        }\n        if (useBound === true && castValue._isBound()) {\n            ret._setBoundTo(castValue._boundTo);\n        }\n        return ret;\n    }\n\n    Promise.prototype.props = function Promise$props() {\n        return Promise$_Props(this, true, this.props);\n    };\n\n    Promise.props = function Promise$Props(promises) {\n        return Promise$_Props(promises, false, Promise.props);\n    };\n};\n\n},{\"./errors_api_rejection\":11,\"./properties_promise_array.js\":26,\"./util.js\":39}],28:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar ASSERT = require(\"./assert.js\");\nfunction arrayCopy(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n    }\n}\n\nfunction pow2AtLeast(n) {\n    n = n >>> 0;\n    n = n - 1;\n    n = n | (n >> 1);\n    n = n | (n >> 2);\n    n = n | (n >> 4);\n    n = n | (n >> 8);\n    n = n | (n >> 16);\n    return n + 1;\n}\n\nfunction getCapacity(capacity) {\n    if (typeof capacity !== \"number\") return 16;\n    return pow2AtLeast(\n        Math.min(\n            Math.max(16, capacity), 1073741824)\n   );\n}\n\nfunction Queue(capacity) {\n    this._capacity = getCapacity(capacity);\n    this._length = 0;\n    this._front = 0;\n    this._makeCapacity();\n}\n\nQueue.prototype._willBeOverCapacity =\nfunction Queue$_willBeOverCapacity(size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function Queue$_pushOne(arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype.push = function Queue$push(fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function Queue$shift() {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = void 0;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function Queue$length() {\n    return this._length;\n};\n\nQueue.prototype._makeCapacity = function Queue$_makeCapacity() {\n    var len = this._capacity;\n    for (var i = 0; i < len; ++i) {\n        this[i] = void 0;\n    }\n};\n\nQueue.prototype._checkCapacity = function Queue$_checkCapacity(size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 3);\n    }\n};\n\nQueue.prototype._resizeTo = function Queue$_resizeTo(capacity) {\n    var oldFront = this._front;\n    var oldCapacity = this._capacity;\n    var oldQueue = new Array(oldCapacity);\n    var length = this.length();\n\n    arrayCopy(this, 0, oldQueue, 0, oldCapacity);\n    this._capacity = capacity;\n    this._makeCapacity();\n    this._front = 0;\n    if (oldFront + length <= oldCapacity) {\n        arrayCopy(oldQueue, oldFront, this, 0, length);\n    }\n    else {        var lengthBeforeWrapping =\n            length - ((oldFront + length) & (oldCapacity - 1));\n\n        arrayCopy(oldQueue, oldFront, this, 0, lengthBeforeWrapping);\n        arrayCopy(oldQueue, 0, this, lengthBeforeWrapping,\n                    length - lengthBeforeWrapping);\n    }\n};\n\nmodule.exports = Queue;\n\n},{\"./assert.js\":2}],29:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\n    var apiRejection = require(\"./errors_api_rejection.js\")(Promise);\n    var isArray = require(\"./util.js\").isArray;\n\n    var raceLater = function Promise$_raceLater(promise) {\n        return promise.then(function Promise$_lateRacer(array) {\n            return Promise$_Race(array, Promise$_lateRacer, promise);\n        });\n    };\n\n    var hasOwn = {}.hasOwnProperty;\n    function Promise$_Race(promises, caller, parent) {\n        var maybePromise = Promise._cast(promises, caller, void 0);\n\n        if (Promise.is(maybePromise)) {\n            return raceLater(maybePromise);\n        }\n        else if (!isArray(promises)) {\n            return apiRejection(\"expecting an array, a promise or a thenable\");\n        }\n\n        var ret = new Promise(INTERNAL);\n        ret._setTrace(caller, parent);\n        if (parent !== void 0) {\n            if (parent._isBound()) {\n                ret._setBoundTo(parent._boundTo);\n            }\n            if (parent._cancellable()) {\n                ret._setCancellable();\n                ret._cancellationParent = parent;\n            }\n        }\n        var fulfill = ret._fulfill;\n        var reject = ret._reject;\n        for (var i = 0, len = promises.length; i < len; ++i) {\n            var val = promises[i];\n\n            if (val === void 0 && !(hasOwn.call(promises, i))) {\n                continue;\n            }\n\n            Promise.cast(val)._then(\n                fulfill,\n                reject,\n                void 0,\n                ret,\n                null,\n                caller\n           );\n        }\n        return ret;\n    }\n\n    Promise.race = function Promise$Race(promises) {\n        return Promise$_Race(promises, Promise.race, void 0);\n    };\n\n    Promise.prototype.race = function Promise$race() {\n        return Promise$_Race(this, this.race, void 0);\n    };\n\n};\n\n},{\"./errors_api_rejection.js\":11,\"./util.js\":39}],30:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(\n    Promise, Promise$_CreatePromiseArray,\n    PromiseArray, apiRejection, INTERNAL) {\n\n    var ASSERT = require(\"./assert.js\");\n\n    function Reduction(callback, index, accum, items, receiver) {\n        this.promise = new Promise(INTERNAL);\n        this.index = index;\n        this.length = items.length;\n        this.items = items;\n        this.callback = callback;\n        this.receiver = receiver;\n        this.accum = accum;\n    }\n\n    Reduction.prototype.reject = function Reduction$reject(e) {\n        this.promise._reject(e);\n    };\n\n    Reduction.prototype.fulfill = function Reduction$fulfill(value, index) {\n        this.accum = value;\n        this.index = index + 1;\n        this.iterate();\n    };\n\n    Reduction.prototype.iterate = function Reduction$iterate() {\n        var i = this.index;\n        var len = this.length;\n        var items = this.items;\n        var result = this.accum;\n        var receiver = this.receiver;\n        var callback = this.callback;\n        var iterate = this.iterate;\n\n        for(; i < len; ++i) {\n            result = Promise._cast(\n                callback.call(\n                    receiver,\n                    result,\n                    items[i],\n                    i,\n                    len\n                ),\n                iterate,\n                void 0\n            );\n\n            if (result instanceof Promise) {\n                result._then(\n                    this.fulfill, this.reject, void 0, this, i, iterate);\n                return;\n            }\n        }\n        this.promise._fulfill(result);\n    };\n\n    function Promise$_reducer(fulfilleds, initialValue) {\n        var fn = this;\n        var receiver = void 0;\n        if (typeof fn !== \"function\")  {\n            receiver = fn.receiver;\n            fn = fn.fn;\n        }\n        var len = fulfilleds.length;\n        var accum = void 0;\n        var startIndex = 0;\n\n        if (initialValue !== void 0) {\n            accum = initialValue;\n            startIndex = 0;\n        }\n        else {\n            startIndex = 1;\n            if (len > 0) accum = fulfilleds[0];\n        }\n        var i = startIndex;\n\n        if (i >= len) {\n            return accum;\n        }\n\n        var reduction = new Reduction(fn, i, accum, fulfilleds, receiver);\n        reduction.iterate();\n        return reduction.promise;\n    }\n\n    function Promise$_unpackReducer(fulfilleds) {\n        var fn = this.fn;\n        var initialValue = this.initialValue;\n        return Promise$_reducer.call(fn, fulfilleds, initialValue);\n    }\n\n    function Promise$_slowReduce(\n        promises, fn, initialValue, useBound, caller) {\n        return initialValue._then(function callee(initialValue) {\n            return Promise$_Reduce(\n                promises, fn, initialValue, useBound, callee);\n        }, void 0, void 0, void 0, void 0, caller);\n    }\n\n    function Promise$_Reduce(promises, fn, initialValue, useBound, caller) {\n        if (typeof fn !== \"function\") {\n            return apiRejection(\"fn must be a function\");\n        }\n\n        if (useBound === true && promises._isBound()) {\n            fn = {\n                fn: fn,\n                receiver: promises._boundTo\n            };\n        }\n\n        if (initialValue !== void 0) {\n            if (Promise.is(initialValue)) {\n                if (initialValue.isFulfilled()) {\n                    initialValue = initialValue._settledValue;\n                }\n                else {\n                    return Promise$_slowReduce(promises,\n                        fn, initialValue, useBound, caller);\n                }\n            }\n\n            return Promise$_CreatePromiseArray(promises, PromiseArray, caller,\n                useBound === true && promises._isBound()\n                    ? promises._boundTo\n                    : void 0)\n                .promise()\n                ._then(Promise$_unpackReducer, void 0, void 0, {\n                    fn: fn,\n                    initialValue: initialValue\n                }, void 0, Promise.reduce);\n        }\n        return Promise$_CreatePromiseArray(promises, PromiseArray, caller,\n                useBound === true && promises._isBound()\n                    ? promises._boundTo\n                    : void 0).promise()\n            ._then(Promise$_reducer, void 0, void 0, fn, void 0, caller);\n    }\n\n\n    Promise.reduce = function Promise$Reduce(promises, fn, initialValue) {\n        return Promise$_Reduce(promises, fn,\n            initialValue, false, Promise.reduce);\n    };\n\n    Promise.prototype.reduce = function Promise$reduce(fn, initialValue) {\n        return Promise$_Reduce(this, fn, initialValue,\n                                true, this.reduce);\n    };\n};\n\n},{\"./assert.js\":2}],31:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar global = require(\"./global.js\");\nvar ASSERT = require(\"./assert.js\");\nvar schedule;\nif (typeof process !== \"undefined\" && process !== null &&\n    typeof process.cwd === \"function\" &&\n    typeof process.nextTick === \"function\" &&\n    typeof process.version === \"string\") {\n    schedule = function Promise$_Scheduler(fn) {\n        process.nextTick(fn);\n    };\n}\nelse if ((typeof global.MutationObserver === \"function\" ||\n        typeof global.WebkitMutationObserver === \"function\" ||\n        typeof global.WebKitMutationObserver === \"function\") &&\n        typeof document !== \"undefined\" &&\n        typeof document.createElement === \"function\") {\n\n\n    schedule = (function(){\n        var MutationObserver = global.MutationObserver ||\n            global.WebkitMutationObserver ||\n            global.WebKitMutationObserver;\n        var div = document.createElement(\"div\");\n        var queuedFn = void 0;\n        var observer = new MutationObserver(\n            function Promise$_Scheduler() {\n                var fn = queuedFn;\n                queuedFn = void 0;\n                fn();\n            }\n       );\n        observer.observe(div, {\n            attributes: true\n        });\n        return function Promise$_Scheduler(fn) {\n            queuedFn = fn;\n            div.setAttribute(\"class\", \"foo\");\n        };\n\n    })();\n}\nelse if (typeof global.postMessage === \"function\" &&\n    typeof global.importScripts !== \"function\" &&\n    typeof global.addEventListener === \"function\" &&\n    typeof global.removeEventListener === \"function\") {\n\n    var MESSAGE_KEY = \"bluebird_message_key_\" + Math.random();\n    schedule = (function(){\n        var queuedFn = void 0;\n\n        function Promise$_Scheduler(e) {\n            if (e.source === global &&\n                e.data === MESSAGE_KEY) {\n                var fn = queuedFn;\n                queuedFn = void 0;\n                fn();\n            }\n        }\n\n        global.addEventListener(\"message\", Promise$_Scheduler, false);\n\n        return function Promise$_Scheduler(fn) {\n            queuedFn = fn;\n            global.postMessage(\n                MESSAGE_KEY, \"*\"\n           );\n        };\n\n    })();\n}\nelse if (typeof global.MessageChannel === \"function\") {\n    schedule = (function(){\n        var queuedFn = void 0;\n\n        var channel = new global.MessageChannel();\n        channel.port1.onmessage = function Promise$_Scheduler() {\n                var fn = queuedFn;\n                queuedFn = void 0;\n                fn();\n        };\n\n        return function Promise$_Scheduler(fn) {\n            queuedFn = fn;\n            channel.port2.postMessage(null);\n        };\n    })();\n}\nelse if (global.setTimeout) {\n    schedule = function Promise$_Scheduler(fn) {\n        setTimeout(fn, 4);\n    };\n}\nelse {\n    schedule = function Promise$_Scheduler(fn) {\n        fn();\n    };\n}\n\nmodule.exports = schedule;\n\n},{\"./assert.js\":2,\"./global.js\":16}],32:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports =\n    function(Promise, Promise$_CreatePromiseArray, PromiseArray) {\n\n    var SettledPromiseArray = require(\"./settled_promise_array.js\")(\n        Promise, PromiseArray);\n\n    function Promise$_Settle(promises, useBound, caller) {\n        return Promise$_CreatePromiseArray(\n            promises,\n            SettledPromiseArray,\n            caller,\n            useBound === true && promises._isBound()\n                ? promises._boundTo\n                : void 0\n       ).promise();\n    }\n\n    Promise.settle = function Promise$Settle(promises) {\n        return Promise$_Settle(promises, false, Promise.settle);\n    };\n\n    Promise.prototype.settle = function Promise$settle() {\n        return Promise$_Settle(this, true, this.settle);\n    };\n\n};\n\n},{\"./settled_promise_array.js\":33}],33:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray) {\nvar ASSERT = require(\"./assert.js\");\nvar PromiseInspection = require(\"./promise_inspection.js\");\nvar util = require(\"./util.js\");\nvar inherits = util.inherits;\nfunction SettledPromiseArray(values, caller, boundTo) {\n    this.constructor$(values, caller, boundTo);\n}\ninherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved =\nfunction SettledPromiseArray$_promiseResolved(index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n    }\n};\n\nSettledPromiseArray.prototype._promiseFulfilled =\nfunction SettledPromiseArray$_promiseFulfilled(value, index) {\n    if (this._isResolved()) return;\n    var ret = new PromiseInspection();\n    ret._bitField = 268435456;\n    ret._settledValue = value;\n    this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected =\nfunction SettledPromiseArray$_promiseRejected(reason, index) {\n    if (this._isResolved()) return;\n    var ret = new PromiseInspection();\n    ret._bitField = 134217728;\n    ret._settledValue = reason;\n    this._promiseResolved(index, ret);\n};\n\nreturn SettledPromiseArray;\n};\n\n},{\"./assert.js\":2,\"./promise_inspection.js\":22,\"./util.js\":39}],34:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports =\nfunction(Promise, Promise$_CreatePromiseArray, PromiseArray, apiRejection) {\n\n    var SomePromiseArray = require(\"./some_promise_array.js\")(PromiseArray);\n    var ASSERT = require(\"./assert.js\");\n\n    function Promise$_Some(promises, howMany, useBound, caller) {\n        if ((howMany | 0) !== howMany || howMany < 0) {\n            return apiRejection(\"expecting a positive integer\");\n        }\n        var ret = Promise$_CreatePromiseArray(\n            promises,\n            SomePromiseArray,\n            caller,\n            useBound === true && promises._isBound()\n                ? promises._boundTo\n                : void 0\n       );\n        var promise = ret.promise();\n        if (promise.isRejected()) {\n            return promise;\n        }\n        ret.setHowMany(howMany);\n        ret.init();\n        return promise;\n    }\n\n    Promise.some = function Promise$Some(promises, howMany) {\n        return Promise$_Some(promises, howMany, false, Promise.some);\n    };\n\n    Promise.prototype.some = function Promise$some(count) {\n        return Promise$_Some(this, count, true, this.some);\n    };\n\n};\n\n},{\"./assert.js\":2,\"./some_promise_array.js\":35}],35:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function (PromiseArray) {\nvar util = require(\"./util.js\");\nvar RangeError = require(\"./errors.js\").RangeError;\nvar inherits = util.inherits;\nvar isArray = util.isArray;\n\nfunction SomePromiseArray(values, caller, boundTo) {\n    this.constructor$(values, caller, boundTo);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\ninherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function SomePromiseArray$_init() {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(void 0, -2);\n    var isArrayResolved = isArray(this._values);\n    this._holes = isArrayResolved ? this._values.length - this.length() : 0;\n\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        var message = \"(Promise.some) input array contains less than \" +\n                        this._howMany  + \" promises\";\n        this._reject(new RangeError(message));\n    }\n};\n\nSomePromiseArray.prototype.init = function SomePromiseArray$init() {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function SomePromiseArray$setUnwrap() {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function SomePromiseArray$howMany() {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany =\nfunction SomePromiseArray$setHowMany(count) {\n    if (this._isResolved()) return;\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled =\nfunction SomePromiseArray$_promiseFulfilled(value) {\n    if (this._isResolved()) return;\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        }\n        else {\n            this._resolve(this._values);\n        }\n    }\n\n};\nSomePromiseArray.prototype._promiseRejected =\nfunction SomePromiseArray$_promiseRejected(reason) {\n    if (this._isResolved()) return;\n    this._addRejected(reason);\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        if (this._values.length === this.length()) {\n            this._reject([]);\n        }\n        else {\n            this._reject(this._values.slice(this.length() + this._holes));\n        }\n    }\n};\n\nSomePromiseArray.prototype._fulfilled = function SomePromiseArray$_fulfilled() {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function SomePromiseArray$_rejected() {\n    return this._values.length - this.length() - this._holes;\n};\n\nSomePromiseArray.prototype._addRejected =\nfunction SomePromiseArray$_addRejected(reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled =\nfunction SomePromiseArray$_addFulfilled(value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill =\nfunction SomePromiseArray$_canPossiblyFulfill() {\n    return this.length() - this._rejected();\n};\n\nreturn SomePromiseArray;\n};\n\n},{\"./errors.js\":10,\"./util.js\":39}],36:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise) {\n    var PromiseInspection = require(\"./promise_inspection.js\");\n\n    Promise.prototype.inspect = function Promise$inspect() {\n        return new PromiseInspection(this);\n    };\n};\n\n},{\"./promise_inspection.js\":22}],37:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\n    var ASSERT = require(\"./assert.js\");\n    var util = require(\"./util.js\");\n    var canAttach = require(\"./errors.js\").canAttach;\n    var errorObj = util.errorObj;\n    var isObject = util.isObject;\n\n    function getThen(obj) {\n        try {\n            return obj.then;\n        }\n        catch(e) {\n            errorObj.e = e;\n            return errorObj;\n        }\n    }\n\n    function Promise$_Cast(obj, caller, originalPromise) {\n        if (isObject(obj)) {\n            if (obj instanceof Promise) {\n                return obj;\n            }\n            else if (isAnyBluebirdPromise(obj)) {\n                var ret = new Promise(INTERNAL);\n                ret._setTrace(caller, void 0);\n                obj._then(\n                    ret._fulfillUnchecked,\n                    ret._rejectUncheckedCheckError,\n                    ret._progressUnchecked,\n                    ret,\n                    null,\n                    void 0\n                );\n                ret._setFollowing();\n                return ret;\n            }\n            var then = getThen(obj);\n            if (then === errorObj) {\n                caller = typeof caller === \"function\" ? caller : Promise$_Cast;\n                if (originalPromise !== void 0 && canAttach(then.e)) {\n                    originalPromise._attachExtraTrace(then.e);\n                }\n                return Promise.reject(then.e, caller);\n            }\n            else if (typeof then === \"function\") {\n                caller = typeof caller === \"function\" ? caller : Promise$_Cast;\n                return Promise$_doThenable(obj, then, caller, originalPromise);\n            }\n        }\n        return obj;\n    }\n\n    var hasProp = {}.hasOwnProperty;\n    function isAnyBluebirdPromise(obj) {\n        return hasProp.call(obj, \"_promise0\");\n    }\n\n    function Promise$_doThenable(x, then, caller, originalPromise) {\n        var resolver = Promise.defer(caller);\n        var called = false;\n        try {\n            then.call(\n                x,\n                Promise$_resolveFromThenable,\n                Promise$_rejectFromThenable,\n                Promise$_progressFromThenable\n            );\n        }\n        catch(e) {\n            if (!called) {\n                called = true;\n                var trace = canAttach(e) ? e : new Error(e + \"\");\n                if (originalPromise !== void 0) {\n                    originalPromise._attachExtraTrace(trace);\n                }\n                resolver.promise._reject(e, trace);\n            }\n        }\n        return resolver.promise;\n\n        function Promise$_resolveFromThenable(y) {\n            if (called) return;\n            called = true;\n\n            if (x === y) {\n                var e = Promise._makeSelfResolutionError();\n                if (originalPromise !== void 0) {\n                    originalPromise._attachExtraTrace(e);\n                }\n                resolver.promise._reject(e, void 0);\n                return;\n            }\n            resolver.resolve(y);\n        }\n\n        function Promise$_rejectFromThenable(r) {\n            if (called) return;\n            called = true;\n            var trace = canAttach(r) ? r : new Error(r + \"\");\n            if (originalPromise !== void 0) {\n                originalPromise._attachExtraTrace(trace);\n            }\n            resolver.promise._reject(r, trace);\n        }\n\n        function Promise$_progressFromThenable(v) {\n            if (called) return;\n            var promise = resolver.promise;\n            if (typeof promise._progress === \"function\") {\n                promise._progress(v);\n            }\n        }\n    }\n\n    Promise._cast = Promise$_Cast;\n};\n\n},{\"./assert.js\":2,\"./errors.js\":10,\"./util.js\":39}],38:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\n\nvar global = require(\"./global.js\");\nvar setTimeout = function(fn, time) {\n    var $_len = arguments.length;var args = new Array($_len - 2); for(var $_i = 2; $_i < $_len; ++$_i) {args[$_i - 2] = arguments[$_i];}\n    global.setTimeout(function() {\n        fn.apply(void 0, args);\n    }, time);\n};\n\nvar pass = {};\nglobal.setTimeout( function(_) {\n    if(_ === pass) {\n        setTimeout = global.setTimeout;\n    }\n}, 1, pass);\n\nmodule.exports = function(Promise, INTERNAL) {\n    var util = require(\"./util.js\");\n    var ASSERT = require(\"./assert.js\");\n    var errors = require(\"./errors.js\");\n    var apiRejection = require(\"./errors_api_rejection\")(Promise);\n    var TimeoutError = Promise.TimeoutError;\n\n    var afterTimeout = function Promise$_afterTimeout(promise, message, ms) {\n        if (!promise.isPending()) return;\n        if (typeof message !== \"string\") {\n            message = \"operation timed out after\" + \" \" + ms + \" ms\"\n        }\n        var err = new TimeoutError(message);\n        errors.markAsOriginatingFromRejection(err);\n        promise._attachExtraTrace(err);\n        promise._rejectUnchecked(err);\n    };\n\n    var afterDelay = function Promise$_afterDelay(value, promise) {\n        promise._fulfill(value);\n    };\n\n    Promise.delay = function Promise$Delay(value, ms, caller) {\n        if (ms === void 0) {\n            ms = value;\n            value = void 0;\n        }\n        ms = +ms;\n        if (typeof caller !== \"function\") {\n            caller = Promise.delay;\n        }\n        var maybePromise = Promise._cast(value, caller, void 0);\n        var promise = new Promise(INTERNAL);\n\n        if (Promise.is(maybePromise)) {\n            if (maybePromise._isBound()) {\n                promise._setBoundTo(maybePromise._boundTo);\n            }\n            if (maybePromise._cancellable()) {\n                promise._setCancellable();\n                promise._cancellationParent = maybePromise;\n            }\n            promise._setTrace(caller, maybePromise);\n            promise._follow(maybePromise);\n            return promise.then(function(value) {\n                return Promise.delay(value, ms);\n            });\n        }\n        else {\n            promise._setTrace(caller, void 0);\n            setTimeout(afterDelay, ms, value, promise);\n        }\n        return promise;\n    };\n\n    Promise.prototype.delay = function Promise$delay(ms) {\n        return Promise.delay(this, ms, this.delay);\n    };\n\n    Promise.prototype.timeout = function Promise$timeout(ms, message) {\n        ms = +ms;\n\n        var ret = new Promise(INTERNAL);\n        ret._setTrace(this.timeout, this);\n\n        if (this._isBound()) ret._setBoundTo(this._boundTo);\n        if (this._cancellable()) {\n            ret._setCancellable();\n            ret._cancellationParent = this;\n        }\n        ret._follow(this);\n        setTimeout(afterTimeout, ms, ret, message, ms);\n        return ret;\n    };\n\n};\n\n},{\"./assert.js\":2,\"./errors.js\":10,\"./errors_api_rejection\":11,\"./global.js\":16,\"./util.js\":39}],39:[function(require,module,exports){\n/**\n * Copyright (c) 2014 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:</p>\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n\"use strict\";\nvar global = require(\"./global.js\");\nvar ASSERT = require(\"./assert.js\");\nvar es5 = require(\"./es5.js\");\nvar haveGetters = (function(){\n    try {\n        var o = {};\n        es5.defineProperty(o, \"f\", {\n            get: function () {\n                return 3;\n            }\n        });\n        return o.f === 3;\n    }\n    catch (e) {\n        return false;\n    }\n\n})();\n\nvar canEvaluate = (function() {\n    if (typeof window !== \"undefined\" && window !== null &&\n        typeof window.document !== \"undefined\" &&\n        typeof navigator !== \"undefined\" && navigator !== null &&\n        typeof navigator.appName === \"string\" &&\n        window === global) {\n        return false;\n    }\n    return true;\n})();\n\nfunction deprecated(msg) {\n    if (typeof console !== \"undefined\" && console !== null &&\n        typeof console.warn === \"function\") {\n        console.warn(\"Bluebird: \" + msg);\n    }\n}\n\nvar errorObj = {e: {}};\nfunction tryCatch1(fn, receiver, arg) {\n    try {\n        return fn.call(receiver, arg);\n    }\n    catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nfunction tryCatch2(fn, receiver, arg, arg2) {\n    try {\n        return fn.call(receiver, arg, arg2);\n    }\n    catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nfunction tryCatchApply(fn, args, receiver) {\n    try {\n        return fn.apply(receiver, args);\n    }\n    catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\nfunction asString(val) {\n    return typeof val === \"string\" ? val : (\"\" + val);\n}\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return !isPrimitive(value);\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(asString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\n\nfunction notEnumerableProp(obj, name, value) {\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\n\nvar wrapsPrimitiveReceiver = (function() {\n    return this !== \"string\";\n}).call(\"string\");\n\nfunction thrower(r) {\n    throw r;\n}\n\n\nvar ret = {\n    thrower: thrower,\n    isArray: es5.isArray,\n    haveGetters: haveGetters,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    canEvaluate: canEvaluate,\n    deprecated: deprecated,\n    errorObj: errorObj,\n    tryCatch1: tryCatch1,\n    tryCatch2: tryCatch2,\n    tryCatchApply: tryCatchApply,\n    inherits: inherits,\n    withAppended: withAppended,\n    asString: asString,\n    maybeWrapAsError: maybeWrapAsError,\n    wrapsPrimitiveReceiver: wrapsPrimitiveReceiver\n};\n\nmodule.exports = ret;\n\n},{\"./assert.js\":2,\"./es5.js\":12,\"./global.js\":16}]},{},[4])\n(4)\n});\n;\n"
  },
  {
    "path": "libs/plasio/workers/laz-loader-worker.js",
    "content": "// laz-loader-worker.js\n//\n\n//import {Module} from \"./laz-perf.js\";\n\nlet instance = null; // laz-perf instance\n\nfunction readAs(buf, Type, offset, count) {\n\tcount = (count === undefined || count === 0 ? 1 : count);\n\tvar sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n\tvar r = new Type(sub);\n\tif (count === undefined || count === 1)\n\t\treturn r[0];\n\n\tvar ret = [];\n\tfor (var i = 0 ; i < count ; i ++) {\n\t\tret.push(r[i]);\n\t}\n\n\treturn ret;\n}\n\nfunction parseLASHeader(arraybuffer) {\n\tvar o = { };\n\n\to.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3);\n\to.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8) & 0b111111;\n\to.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1);\n\n\to.extraBytes = 0;\n\n\tswitch (o.pointsFormatId) {\n\t\tcase 0: o.extraBytes = o.pointsStructSize - 20; break;\n\t\tcase 1: o.extraBytes = o.pointsStructSize - 28; break;\n\t\tcase 2: o.extraBytes = o.pointsStructSize - 26; break;\n\t\tcase 3: o.extraBytes = o.pointsStructSize - 34; break;\n\t}\n\n\to.pointsCount = readAs(arraybuffer, Uint32Array, 32 * 3 + 11);\n\n\tvar start = 32 * 3 + 35;\n\to.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24;\n\to.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24;\n\n\tvar bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48;\n\to.maxs = [bounds[0], bounds[2], bounds[4]];\n\to.mins = [bounds[1], bounds[3], bounds[5]];\n\n\treturn o;\n}\n\nfunction handleEvent(msg) {\n\tswitch(msg.type) {\n\t\tcase \"open\":\n\t\t\ttry {\n\t\t\t\tinstance = new Module.LASZip();\n\t\t\t\tvar abInt = new Uint8Array(msg.arraybuffer);\n\t\t\t\tvar buf = Module._malloc(msg.arraybuffer.byteLength);\n\n\t\t\t\tinstance.arraybuffer = msg.arraybuffer;\n\t\t\t\tinstance.buf = buf;\n\t\t\t\tModule.HEAPU8.set(abInt, buf);\n\t\t\t\tinstance.open(buf, msg.arraybuffer.byteLength);\n\n\t\t\t\tinstance.readOffset = 0;\n\n\t\t\t\tpostMessage({ type: \"open\", status: 1});\n\t\t\t}catch(e) {\n\t\t\t\tdebugger;\n\t\t\t\tpostMessage({ type: \"open\", status: 0, details: e });\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"header\":\n\t\t\tif (!instance)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"You need to open the file before reading the header\");\n\n\t\t\tvar header = parseLASHeader(instance.arraybuffer);\n\t\t\theader.pointsFormatId &= 0x3f;\n\t\t\tinstance.header = header;\n\t\t\tpostMessage({type: \"header\", status: 1, header: header});\n\t\t\tbreak;\n\n\t\tcase \"read\":\n\t\t\tif (!instance)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"You need to open the file before trying to read\");\n\n\t\t\tvar start = msg.start, count = msg.count, skip = msg.skip;\n\t\t\tvar o = instance;\n\n\t\t\tif (!o.header)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"You need to query header before reading\");\n\n\t\t\tlet h = o.header;\n\n\t\t\tvar pointsToRead = Math.min(\n\t\t\t\t\tcount * skip, h.pointsCount - o.readOffset);\n\t\t\tvar bufferSize = Math.ceil(pointsToRead / skip);\n\t\t\tvar pointsRead = 0;\n\n\t\t\tlet buffer = new ArrayBuffer(bufferSize * h.pointsStructSize);\n\t\t\tlet this_buf = new Uint8Array(buffer);\n\t\t\tvar buf_read = Module._malloc(h.pointsStructSize);\n\n\t\t\tfor (var i = 0 ; i < pointsToRead ; i ++) {\n\t\t\t\to.getPoint(buf_read);\n\n\t\t\t\tif (i % skip === 0) {\n\t\t\t\t\tvar a = new Uint8Array(\n\t\t\t\t\t\t\tModule.HEAPU8.buffer,\n\t\t\t\t\t\t\tbuf_read,\n\t\t\t\t\t\t\th.pointsStructSize);\n\n\t\t\t\t\tthis_buf.set(\n\t\t\t\t\t\t\ta,\n\t\t\t\t\t\t\tpointsRead * h.pointsStructSize,\n\t\t\t\t\t\t\th.pointsStructSize);\n\n\t\t\t\t\t++pointsRead;\n\t\t\t\t}\n\n\t\t\t\t++o.readOffset;\n\t\t\t}\n\t\t\tModule._free(buf_read);\n\n\t\t\tlet transferables = [buffer];\n\n\t\t\tpostMessage({\n\t\t\t\ttype: 'header',\n\t\t\t\tstatus: 1,\n\t\t\t\tbuffer: buffer,\n\t\t\t\tcount: pointsRead,\n\t\t\t\thasMoreData: o.readOffset < o.header.pointsCount\n\t\t\t}, transferables);\n\n\t\t\tbreak;\n\n\t\tcase \"close\":\n\t\t\tif (instance !== null) {\n\t\t\t\tModule._free(instance.buf);\n\t\t\t\tinstance.delete();\n\t\t\t\tinstance = null;\n\t\t\t}else{\n\t\t\t\tdebugger;\n\t\t\t}\n\n\t\t\tpostMessage({ type: \"close\", status: 1});\n\t\t\tbreak;\n\t}\n}\n\nonmessage = function(event) {\n\ttry {\n\t\thandleEvent(event.data);\n\t} catch(e) {\n\t\tdebugger;\n\t\tpostMessage({type: event.data.type, status: 0, details: e});\n\t}\n};\n\n\n"
  },
  {
    "path": "libs/plasio/workers/laz-perf.js",
    "content": "// The Module object: Our interface to the outside world. We import\n// and export values on it. There are various ways Module can be used:\n// 1. Not defined. We create it here\n// 2. A function parameter, function(Module) { ..generated code.. }\n// 3. pre-run appended it, var Module = {}; ..generated code..\n// 4. External script tag defines var Module.\n// We need to check if Module already exists (e.g. case 3 above).\n// Substitution will be replaced with actual code on later stage of the build,\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\n// Note that if you want to run closure, and also to use Module\n// after the generated code, you will need to define   var Module = {};\n// before the code. Then that object will be used in the code, and you\n// can continue to use Module afterwards as well.\nvar Module = typeof Module !== 'undefined' ? Module : {};\n\n// --pre-jses are emitted after the Module integration code, so that they can\n// refer to Module (if they choose; they can also define Module)\n// {{PRE_JSES}}\n\n// Sometimes an existing Module object exists with properties\n// meant to overwrite the default module functionality. Here\n// we collect those properties and reapply _after_ we configure\n// the current environment's defaults to avoid having to be so\n// defensive during initialization.\nvar moduleOverrides = {};\nvar key;\nfor (key in Module) {\n  if (Module.hasOwnProperty(key)) {\n    moduleOverrides[key] = Module[key];\n  }\n}\n\nModule['arguments'] = [];\nModule['thisProgram'] = './this.program';\nModule['quit'] = function(status, toThrow) {\n  throw toThrow;\n};\nModule['preRun'] = [];\nModule['postRun'] = [];\n\n// The environment setup code below is customized to use Module.\n// *** Environment setup code ***\nvar ENVIRONMENT_IS_WEB = false;\nvar ENVIRONMENT_IS_WORKER = false;\nvar ENVIRONMENT_IS_NODE = false;\nvar ENVIRONMENT_IS_SHELL = false;\n\n// Three configurations we can be running in:\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\n\nif (Module['ENVIRONMENT']) {\n  if (Module['ENVIRONMENT'] === 'WEB') {\n    ENVIRONMENT_IS_WEB = true;\n  } else if (Module['ENVIRONMENT'] === 'WORKER') {\n    ENVIRONMENT_IS_WORKER = true;\n  } else if (Module['ENVIRONMENT'] === 'NODE') {\n    ENVIRONMENT_IS_NODE = true;\n  } else if (Module['ENVIRONMENT'] === 'SHELL') {\n    ENVIRONMENT_IS_SHELL = true;\n  } else {\n    throw new Error('Module[\\'ENVIRONMENT\\'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.');\n  }\n} else {\n  ENVIRONMENT_IS_WEB = typeof window === 'object';\n  ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\n  ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\n  ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\n}\n\n\nif (ENVIRONMENT_IS_NODE) {\n  // Expose functionality in the same simple way that the shells work\n  // Note that we pollute the global namespace here, otherwise we break in node\n  var nodeFS;\n  var nodePath;\n\n  Module['read'] = function shell_read(filename, binary) {\n    var ret;\n    ret = tryParseAsDataURI(filename);\n    if (!ret) {\n      if (!nodeFS) nodeFS = require('fs');\n      if (!nodePath) nodePath = require('path');\n      filename = nodePath['normalize'](filename);\n      ret = nodeFS['readFileSync'](filename);\n    }\n    return binary ? ret : ret.toString();\n  };\n\n  Module['readBinary'] = function readBinary(filename) {\n    var ret = Module['read'](filename, true);\n    if (!ret.buffer) {\n      ret = new Uint8Array(ret);\n    }\n    assert(ret.buffer);\n    return ret;\n  };\n\n  if (process['argv'].length > 1) {\n    Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\n  }\n\n  Module['arguments'] = process['argv'].slice(2);\n\n  if (typeof module !== 'undefined') {\n    module['exports'] = Module;\n  }\n\n  process['on']('uncaughtException', function(ex) {\n    // suppress ExitStatus exceptions from showing an error\n    if (!(ex instanceof ExitStatus)) {\n      throw ex;\n    }\n  });\n  // Currently node will swallow unhandled rejections, but this behavior is\n  // deprecated, and in the future it will exit with error status.\n  process['on']('unhandledRejection', function(reason, p) {\n    Module['printErr']('node.js exiting due to unhandled promise rejection');\n    process['exit'](1);\n  });\n\n  Module['inspect'] = function () { return '[Emscripten Module object]'; };\n} else\nif (ENVIRONMENT_IS_SHELL) {\n  if (typeof read != 'undefined') {\n    Module['read'] = function shell_read(f) {\n      var data = tryParseAsDataURI(f);\n      if (data) {\n        return intArrayToString(data);\n      }\n      return read(f);\n    };\n  }\n\n  Module['readBinary'] = function readBinary(f) {\n    var data;\n    data = tryParseAsDataURI(f);\n    if (data) {\n      return data;\n    }\n    if (typeof readbuffer === 'function') {\n      return new Uint8Array(readbuffer(f));\n    }\n    data = read(f, 'binary');\n    assert(typeof data === 'object');\n    return data;\n  };\n\n  if (typeof scriptArgs != 'undefined') {\n    Module['arguments'] = scriptArgs;\n  } else if (typeof arguments != 'undefined') {\n    Module['arguments'] = arguments;\n  }\n\n  if (typeof quit === 'function') {\n    Module['quit'] = function(status, toThrow) {\n      quit(status);\n    }\n  }\n} else\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n  Module['read'] = function shell_read(url) {\n    try {\n      var xhr = new XMLHttpRequest();\n      xhr.open('GET', url, false);\n      xhr.send(null);\n      return xhr.responseText;\n    } catch (err) {\n      var data = tryParseAsDataURI(url);\n      if (data) {\n        return intArrayToString(data);\n      }\n      throw err;\n    }\n  };\n\n  if (ENVIRONMENT_IS_WORKER) {\n    Module['readBinary'] = function readBinary(url) {\n      try {\n        var xhr = new XMLHttpRequest();\n        xhr.open('GET', url, false);\n        xhr.responseType = 'arraybuffer';\n        xhr.send(null);\n        return new Uint8Array(xhr.response);\n      } catch (err) {\n        var data = tryParseAsDataURI(url);\n        if (data) {\n          return data;\n        }\n        throw err;\n      }\n    };\n  }\n\n  Module['readAsync'] = function readAsync(url, onload, onerror) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.responseType = 'arraybuffer';\n    xhr.onload = function xhr_onload() {\n      if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\n        onload(xhr.response);\n        return;\n      }\n      var data = tryParseAsDataURI(url);\n      if (data) {\n        onload(data.buffer);\n        return;\n      }\n      onerror();\n    };\n    xhr.onerror = onerror;\n    xhr.send(null);\n  };\n\n  Module['setWindowTitle'] = function(title) { document.title = title };\n} else\n{\n  throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');\n}\n\n// console.log is checked first, as 'print' on the web will open a print dialogue\n// printErr is preferable to console.warn (works better in shells)\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\nModule['print'] = typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null);\nModule['printErr'] = typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || Module['print']);\n\n// *** Environment setup code ***\n\n// Closure helpers\nModule.print = Module['print'];\nModule.printErr = Module['printErr'];\n\n// Merge back in the overrides\nfor (key in moduleOverrides) {\n  if (moduleOverrides.hasOwnProperty(key)) {\n    Module[key] = moduleOverrides[key];\n  }\n}\n// Free the object hierarchy contained in the overrides, this lets the GC\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\nmoduleOverrides = undefined;\n\n\n\n// {{PREAMBLE_ADDITIONS}}\n\nvar STACK_ALIGN = 16;\n\n// stack management, and other functionality that is provided by the compiled code,\n// should not be used before it is ready\nstackSave = stackRestore = stackAlloc = setTempRet0 = getTempRet0 = function() {\n  abort('cannot use the stack before compiled code is ready to run, and has provided stack access');\n};\n\nfunction staticAlloc(size) {\n  assert(!staticSealed);\n  var ret = STATICTOP;\n  STATICTOP = (STATICTOP + size + 15) & -16;\n  return ret;\n}\n\nfunction dynamicAlloc(size) {\n  assert(DYNAMICTOP_PTR);\n  var ret = HEAP32[DYNAMICTOP_PTR>>2];\n  var end = (ret + size + 15) & -16;\n  HEAP32[DYNAMICTOP_PTR>>2] = end;\n  if (end >= TOTAL_MEMORY) {\n    var success = enlargeMemory();\n    if (!success) {\n      HEAP32[DYNAMICTOP_PTR>>2] = ret;\n      return 0;\n    }\n  }\n  return ret;\n}\n\nfunction alignMemory(size, factor) {\n  if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\n  var ret = size = Math.ceil(size / factor) * factor;\n  return ret;\n}\n\nfunction getNativeTypeSize(type) {\n  switch (type) {\n    case 'i1': case 'i8': return 1;\n    case 'i16': return 2;\n    case 'i32': return 4;\n    case 'i64': return 8;\n    case 'float': return 4;\n    case 'double': return 8;\n    default: {\n      if (type[type.length-1] === '*') {\n        return 4; // A pointer\n      } else if (type[0] === 'i') {\n        var bits = parseInt(type.substr(1));\n        assert(bits % 8 === 0);\n        return bits / 8;\n      } else {\n        return 0;\n      }\n    }\n  }\n}\n\nfunction warnOnce(text) {\n  if (!warnOnce.shown) warnOnce.shown = {};\n  if (!warnOnce.shown[text]) {\n    warnOnce.shown[text] = 1;\n    Module.printErr(text);\n  }\n}\n\n\n\nvar jsCallStartIndex = 1;\nvar functionPointers = new Array(0);\n\n// 'sig' parameter is only used on LLVM wasm backend\nfunction addFunction(func, sig) {\n  if (typeof sig === 'undefined') {\n    Module.printErr('warning: addFunction(): You should provide a wasm function signature string as a second argument. This is not necessary for asm.js and asm2wasm, but is required for the LLVM wasm backend, so it is recommended for full portability.');\n  }\n  var base = 0;\n  for (var i = base; i < base + 0; i++) {\n    if (!functionPointers[i]) {\n      functionPointers[i] = func;\n      return jsCallStartIndex + i;\n    }\n  }\n  throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\n}\n\nfunction removeFunction(index) {\n  functionPointers[index-jsCallStartIndex] = null;\n}\n\nvar funcWrappers = {};\n\nfunction getFuncWrapper(func, sig) {\n  if (!func) return; // on null pointer, return undefined\n  assert(sig);\n  if (!funcWrappers[sig]) {\n    funcWrappers[sig] = {};\n  }\n  var sigCache = funcWrappers[sig];\n  if (!sigCache[func]) {\n    // optimize away arguments usage in common cases\n    if (sig.length === 1) {\n      sigCache[func] = function dynCall_wrapper() {\n        return dynCall(sig, func);\n      };\n    } else if (sig.length === 2) {\n      sigCache[func] = function dynCall_wrapper(arg) {\n        return dynCall(sig, func, [arg]);\n      };\n    } else {\n      // general case\n      sigCache[func] = function dynCall_wrapper() {\n        return dynCall(sig, func, Array.prototype.slice.call(arguments));\n      };\n    }\n  }\n  return sigCache[func];\n}\n\n\nfunction makeBigInt(low, high, unsigned) {\n  return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\n}\n\nfunction dynCall(sig, ptr, args) {\n  if (args && args.length) {\n    assert(args.length == sig.length-1);\n    assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \\'' + sig + '\\'');\n    return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\n  } else {\n    assert(sig.length == 1);\n    assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \\'' + sig + '\\'');\n    return Module['dynCall_' + sig].call(null, ptr);\n  }\n}\n\n\nfunction getCompilerSetting(name) {\n  throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work';\n}\n\nvar Runtime = {\n  // FIXME backwards compatibility layer for ports. Support some Runtime.*\n  //       for now, fix it there, then remove it from here. That way we\n  //       can minimize any period of breakage.\n  dynCall: dynCall, // for SDL2 port\n  // helpful errors\n  getTempRet0: function() { abort('getTempRet0() is now a top-level function, after removing the Runtime object. Remove \"Runtime.\"') },\n  staticAlloc: function() { abort('staticAlloc() is now a top-level function, after removing the Runtime object. Remove \"Runtime.\"') },\n  stackAlloc: function() { abort('stackAlloc() is now a top-level function, after removing the Runtime object. Remove \"Runtime.\"') },\n};\n\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\n// Above 0 is static memory, starting with globals.\n// Then the stack.\n// Then 'dynamic' memory for sbrk.\nvar GLOBAL_BASE = 8;\n\n\n\n// === Preamble library stuff ===\n\n// Documentation for the public APIs defined in this file must be updated in:\n//    site/source/docs/api_reference/preamble.js.rst\n// A prebuilt local version of the documentation is available at:\n//    site/build/text/docs/api_reference/preamble.js.txt\n// You can also build docs locally as HTML or other formats in site/\n// An online HTML version (which may be of a different version of Emscripten)\n//    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n\n\n\n//========================================\n// Runtime essentials\n//========================================\n\nvar ABORT = 0; // whether we are quitting the application. no code should run after this. set in exit() and abort()\nvar EXITSTATUS = 0;\n\n/** @type {function(*, string=)} */\nfunction assert(condition, text) {\n  if (!condition) {\n    abort('Assertion failed: ' + text);\n  }\n}\n\nvar globalScope = this;\n\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\nfunction getCFunc(ident) {\n  var func = Module['_' + ident]; // closure exported function\n  assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\n  return func;\n}\n\nvar JSfuncs = {\n  // Helpers for cwrap -- it can't refer to Runtime directly because it might\n  // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find\n  // out what the minified function name is.\n  'stackSave': function() {\n    stackSave()\n  },\n  'stackRestore': function() {\n    stackRestore()\n  },\n  // type conversion from js to c\n  'arrayToC' : function(arr) {\n    var ret = stackAlloc(arr.length);\n    writeArrayToMemory(arr, ret);\n    return ret;\n  },\n  'stringToC' : function(str) {\n    var ret = 0;\n    if (str !== null && str !== undefined && str !== 0) { // null string\n      // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\n      var len = (str.length << 2) + 1;\n      ret = stackAlloc(len);\n      stringToUTF8(str, ret, len);\n    }\n    return ret;\n  }\n};\n\n// For fast lookup of conversion functions\nvar toC = {\n  'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC']\n};\n\n// C calling interface.\nfunction ccall (ident, returnType, argTypes, args, opts) {\n  var func = getCFunc(ident);\n  var cArgs = [];\n  var stack = 0;\n  assert(returnType !== 'array', 'Return type should not be \"array\".');\n  if (args) {\n    for (var i = 0; i < args.length; i++) {\n      var converter = toC[argTypes[i]];\n      if (converter) {\n        if (stack === 0) stack = stackSave();\n        cArgs[i] = converter(args[i]);\n      } else {\n        cArgs[i] = args[i];\n      }\n    }\n  }\n  var ret = func.apply(null, cArgs);\n  if (returnType === 'string') ret = Pointer_stringify(ret);\n  else if (returnType === 'boolean') ret = Boolean(ret);\n  if (stack !== 0) {\n    stackRestore(stack);\n  }\n  return ret;\n}\n\nfunction cwrap (ident, returnType, argTypes) {\n  argTypes = argTypes || [];\n  var cfunc = getCFunc(ident);\n  // When the function takes numbers and returns a number, we can just return\n  // the original function\n  var numericArgs = argTypes.every(function(type){ return type === 'number'});\n  var numericRet = returnType !== 'string';\n  if (numericRet && numericArgs) {\n    return cfunc;\n  }\n  return function() {\n    return ccall(ident, returnType, argTypes, arguments);\n  }\n}\n\n/** @type {function(number, number, string, boolean=)} */\nfunction setValue(ptr, value, type, noSafe) {\n  type = type || 'i8';\n  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\n    switch(type) {\n      case 'i1': HEAP8[((ptr)>>0)]=value; break;\n      case 'i8': HEAP8[((ptr)>>0)]=value; break;\n      case 'i16': HEAP16[((ptr)>>1)]=value; break;\n      case 'i32': HEAP32[((ptr)>>2)]=value; break;\n      case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\n      case 'float': HEAPF32[((ptr)>>2)]=value; break;\n      case 'double': HEAPF64[((ptr)>>3)]=value; break;\n      default: abort('invalid type for setValue: ' + type);\n    }\n}\n\n/** @type {function(number, string, boolean=)} */\nfunction getValue(ptr, type, noSafe) {\n  type = type || 'i8';\n  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\n    switch(type) {\n      case 'i1': return HEAP8[((ptr)>>0)];\n      case 'i8': return HEAP8[((ptr)>>0)];\n      case 'i16': return HEAP16[((ptr)>>1)];\n      case 'i32': return HEAP32[((ptr)>>2)];\n      case 'i64': return HEAP32[((ptr)>>2)];\n      case 'float': return HEAPF32[((ptr)>>2)];\n      case 'double': return HEAPF64[((ptr)>>3)];\n      default: abort('invalid type for getValue: ' + type);\n    }\n  return null;\n}\n\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\nvar ALLOC_STATIC = 2; // Cannot be freed\nvar ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk\nvar ALLOC_NONE = 4; // Do not allocate\n\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\n//             is a little tricky (see docs right below). The reason is that it is optimized\n//             for multiple syntaxes to save space in generated code. So you should\n//             normally not use allocate(), and instead allocate memory using _malloc(),\n//             initialize it with setValue(), and so forth.\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\n//        in *bytes* (note that this is sometimes confusing: the next parameter does not\n//        affect this!)\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\n//         or a single type which is used for the entire block. This only matters if there\n//         is initial data - if @slab is a number, then this does not matter at all and is\n//         ignored.\n// @allocator: How to allocate memory, see ALLOC_*\n/** @type {function((TypedArray|Array<number>|number), string, number, number=)} */\nfunction allocate(slab, types, allocator, ptr) {\n  var zeroinit, size;\n  if (typeof slab === 'number') {\n    zeroinit = true;\n    size = slab;\n  } else {\n    zeroinit = false;\n    size = slab.length;\n  }\n\n  var singleType = typeof types === 'string' ? types : null;\n\n  var ret;\n  if (allocator == ALLOC_NONE) {\n    ret = ptr;\n  } else {\n    ret = [typeof _malloc === 'function' ? _malloc : staticAlloc, stackAlloc, staticAlloc, dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));\n  }\n\n  if (zeroinit) {\n    var stop;\n    ptr = ret;\n    assert((ret & 3) == 0);\n    stop = ret + (size & ~3);\n    for (; ptr < stop; ptr += 4) {\n      HEAP32[((ptr)>>2)]=0;\n    }\n    stop = ret + size;\n    while (ptr < stop) {\n      HEAP8[((ptr++)>>0)]=0;\n    }\n    return ret;\n  }\n\n  if (singleType === 'i8') {\n    if (slab.subarray || slab.slice) {\n      HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\n    } else {\n      HEAPU8.set(new Uint8Array(slab), ret);\n    }\n    return ret;\n  }\n\n  var i = 0, type, typeSize, previousType;\n  while (i < size) {\n    var curr = slab[i];\n\n    type = singleType || types[i];\n    if (type === 0) {\n      i++;\n      continue;\n    }\n    assert(type, 'Must know what type to store in allocate!');\n\n    if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\n\n    setValue(ret+i, curr, type);\n\n    // no need to look up size unless type changes, so cache it\n    if (previousType !== type) {\n      typeSize = getNativeTypeSize(type);\n      previousType = type;\n    }\n    i += typeSize;\n  }\n\n  return ret;\n}\n\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\nfunction getMemory(size) {\n  if (!staticSealed) return staticAlloc(size);\n  if (!runtimeInitialized) return dynamicAlloc(size);\n  return _malloc(size);\n}\n\n/** @type {function(number, number=)} */\nfunction Pointer_stringify(ptr, length) {\n  if (length === 0 || !ptr) return '';\n  // Find the length, and check for UTF while doing so\n  var hasUtf = 0;\n  var t;\n  var i = 0;\n  while (1) {\n    assert(ptr + i < TOTAL_MEMORY);\n    t = HEAPU8[(((ptr)+(i))>>0)];\n    hasUtf |= t;\n    if (t == 0 && !length) break;\n    i++;\n    if (length && i == length) break;\n  }\n  if (!length) length = i;\n\n  var ret = '';\n\n  if (hasUtf < 128) {\n    var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack\n    var curr;\n    while (length > 0) {\n      curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));\n      ret = ret ? ret + curr : curr;\n      ptr += MAX_CHUNK;\n      length -= MAX_CHUNK;\n    }\n    return ret;\n  }\n  return UTF8ToString(ptr);\n}\n\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\n// a copy of that string as a Javascript String object.\n\nfunction AsciiToString(ptr) {\n  var str = '';\n  while (1) {\n    var ch = HEAP8[((ptr++)>>0)];\n    if (!ch) return str;\n    str += String.fromCharCode(ch);\n  }\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\n\nfunction stringToAscii(str, outPtr) {\n  return writeAsciiToMemory(str, outPtr, false);\n}\n\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\n// a copy of that string as a Javascript String object.\n\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\nfunction UTF8ArrayToString(u8Array, idx) {\n  var endPtr = idx;\n  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\n  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\n  while (u8Array[endPtr]) ++endPtr;\n\n  if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\n    return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\n  } else {\n    var u0, u1, u2, u3, u4, u5;\n\n    var str = '';\n    while (1) {\n      // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\n      u0 = u8Array[idx++];\n      if (!u0) return str;\n      if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\n      u1 = u8Array[idx++] & 63;\n      if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\n      u2 = u8Array[idx++] & 63;\n      if ((u0 & 0xF0) == 0xE0) {\n        u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n      } else {\n        u3 = u8Array[idx++] & 63;\n        if ((u0 & 0xF8) == 0xF0) {\n          u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\n        } else {\n          u4 = u8Array[idx++] & 63;\n          if ((u0 & 0xFC) == 0xF8) {\n            u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\n          } else {\n            u5 = u8Array[idx++] & 63;\n            u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\n          }\n        }\n      }\n      if (u0 < 0x10000) {\n        str += String.fromCharCode(u0);\n      } else {\n        var ch = u0 - 0x10000;\n        str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\n      }\n    }\n  }\n}\n\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns\n// a copy of that string as a Javascript String object.\n\nfunction UTF8ToString(ptr) {\n  return UTF8ArrayToString(HEAPU8,ptr);\n}\n\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\n//   outIdx: The starting offset in the array to begin the copying.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\n//                    terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\n  if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\n    return 0;\n\n  var startIdx = outIdx;\n  var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\n  for (var i = 0; i < str.length; ++i) {\n    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\n    var u = str.charCodeAt(i); // possibly a lead surrogate\n    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\n    if (u <= 0x7F) {\n      if (outIdx >= endIdx) break;\n      outU8Array[outIdx++] = u;\n    } else if (u <= 0x7FF) {\n      if (outIdx + 1 >= endIdx) break;\n      outU8Array[outIdx++] = 0xC0 | (u >> 6);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    } else if (u <= 0xFFFF) {\n      if (outIdx + 2 >= endIdx) break;\n      outU8Array[outIdx++] = 0xE0 | (u >> 12);\n      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    } else if (u <= 0x1FFFFF) {\n      if (outIdx + 3 >= endIdx) break;\n      outU8Array[outIdx++] = 0xF0 | (u >> 18);\n      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    } else if (u <= 0x3FFFFFF) {\n      if (outIdx + 4 >= endIdx) break;\n      outU8Array[outIdx++] = 0xF8 | (u >> 24);\n      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    } else {\n      if (outIdx + 5 >= endIdx) break;\n      outU8Array[outIdx++] = 0xFC | (u >> 30);\n      outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    }\n  }\n  // Null-terminate the pointer to the buffer.\n  outU8Array[outIdx] = 0;\n  return outIdx - startIdx;\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\n\nfunction lengthBytesUTF8(str) {\n  var len = 0;\n  for (var i = 0; i < str.length; ++i) {\n    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var u = str.charCodeAt(i); // possibly a lead surrogate\n    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\n    if (u <= 0x7F) {\n      ++len;\n    } else if (u <= 0x7FF) {\n      len += 2;\n    } else if (u <= 0xFFFF) {\n      len += 3;\n    } else if (u <= 0x1FFFFF) {\n      len += 4;\n    } else if (u <= 0x3FFFFFF) {\n      len += 5;\n    } else {\n      len += 6;\n    }\n  }\n  return len;\n}\n\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\n// a copy of that string as a Javascript String object.\n\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\nfunction UTF16ToString(ptr) {\n  assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');\n  var endPtr = ptr;\n  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\n  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\n  var idx = endPtr >> 1;\n  while (HEAP16[idx]) ++idx;\n  endPtr = idx << 1;\n\n  if (endPtr - ptr > 32 && UTF16Decoder) {\n    return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\n  } else {\n    var i = 0;\n\n    var str = '';\n    while (1) {\n      var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\n      if (codeUnit == 0) return str;\n      ++i;\n      // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\n      str += String.fromCharCode(codeUnit);\n    }\n  }\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   outPtr: Byte address in Emscripten HEAP where to write the string to.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\n//                    terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\n  assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n  if (maxBytesToWrite === undefined) {\n    maxBytesToWrite = 0x7FFFFFFF;\n  }\n  if (maxBytesToWrite < 2) return 0;\n  maxBytesToWrite -= 2; // Null terminator.\n  var startPtr = outPtr;\n  var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\n  for (var i = 0; i < numCharsToWrite; ++i) {\n    // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\n    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n    HEAP16[((outPtr)>>1)]=codeUnit;\n    outPtr += 2;\n  }\n  // Null-terminate the pointer to the HEAP.\n  HEAP16[((outPtr)>>1)]=0;\n  return outPtr - startPtr;\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\n\nfunction lengthBytesUTF16(str) {\n  return str.length*2;\n}\n\nfunction UTF32ToString(ptr) {\n  assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!');\n  var i = 0;\n\n  var str = '';\n  while (1) {\n    var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\n    if (utf32 == 0)\n      return str;\n    ++i;\n    // 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.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    if (utf32 >= 0x10000) {\n      var ch = utf32 - 0x10000;\n      str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\n    } else {\n      str += String.fromCharCode(utf32);\n    }\n  }\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   outPtr: Byte address in Emscripten HEAP where to write the string to.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\n//                    terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\n  assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!');\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n  if (maxBytesToWrite === undefined) {\n    maxBytesToWrite = 0x7FFFFFFF;\n  }\n  if (maxBytesToWrite < 4) return 0;\n  var startPtr = outPtr;\n  var endPtr = startPtr + maxBytesToWrite - 4;\n  for (var i = 0; i < str.length; ++i) {\n    // 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.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\n      var trailSurrogate = str.charCodeAt(++i);\n      codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\n    }\n    HEAP32[((outPtr)>>2)]=codeUnit;\n    outPtr += 4;\n    if (outPtr + 4 > endPtr) break;\n  }\n  // Null-terminate the pointer to the HEAP.\n  HEAP32[((outPtr)>>2)]=0;\n  return outPtr - startPtr;\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\n\nfunction lengthBytesUTF32(str) {\n  var len = 0;\n  for (var i = 0; i < str.length; ++i) {\n    // 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.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var codeUnit = str.charCodeAt(i);\n    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\n    len += 4;\n  }\n\n  return len;\n}\n\n// Allocate heap space for a JS string, and write it there.\n// It is the responsibility of the caller to free() that memory.\nfunction allocateUTF8(str) {\n  var size = lengthBytesUTF8(str) + 1;\n  var ret = _malloc(size);\n  if (ret) stringToUTF8Array(str, HEAP8, ret, size);\n  return ret;\n}\n\n// Allocate stack space for a JS string, and write it there.\nfunction allocateUTF8OnStack(str) {\n  var size = lengthBytesUTF8(str) + 1;\n  var ret = stackAlloc(size);\n  stringToUTF8Array(str, HEAP8, ret, size);\n  return ret;\n}\n\nfunction demangle(func) {\n  warnOnce('warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling');\n  return func;\n}\n\nfunction demangleAll(text) {\n  var regex =\n    /__Z[\\w\\d_]+/g;\n  return text.replace(regex,\n    function(x) {\n      var y = demangle(x);\n      return x === y ? x : (x + ' [' + y + ']');\n    });\n}\n\nfunction jsStackTrace() {\n  var err = new Error();\n  if (!err.stack) {\n    // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\n    // so try that as a special-case.\n    try {\n      throw new Error(0);\n    } catch(e) {\n      err = e;\n    }\n    if (!err.stack) {\n      return '(no stack trace available)';\n    }\n  }\n  return err.stack.toString();\n}\n\nfunction stackTrace() {\n  var js = jsStackTrace();\n  if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\n  return demangleAll(js);\n}\n\n// Memory management\n\nvar PAGE_SIZE = 16384;\nvar WASM_PAGE_SIZE = 65536;\nvar ASMJS_PAGE_SIZE = 16777216;\nvar MIN_TOTAL_MEMORY = 16777216;\n\nfunction alignUp(x, multiple) {\n  if (x % multiple > 0) {\n    x += multiple - (x % multiple);\n  }\n  return x;\n}\n\nvar HEAP,\n/** @type {ArrayBuffer} */\n  buffer,\n/** @type {Int8Array} */\n  HEAP8,\n/** @type {Uint8Array} */\n  HEAPU8,\n/** @type {Int16Array} */\n  HEAP16,\n/** @type {Uint16Array} */\n  HEAPU16,\n/** @type {Int32Array} */\n  HEAP32,\n/** @type {Uint32Array} */\n  HEAPU32,\n/** @type {Float32Array} */\n  HEAPF32,\n/** @type {Float64Array} */\n  HEAPF64;\n\nfunction updateGlobalBuffer(buf) {\n  Module['buffer'] = buffer = buf;\n}\n\nfunction updateGlobalBufferViews() {\n  Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\n  Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\n  Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\n  Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\n  Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\n  Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\n  Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\n  Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\n}\n\nvar STATIC_BASE, STATICTOP, staticSealed; // static area\nvar STACK_BASE, STACKTOP, STACK_MAX; // stack area\nvar DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk\n\n  STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;\n  staticSealed = false;\n\n\n// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.\nfunction writeStackCookie() {\n  assert((STACK_MAX & 3) == 0);\n  HEAPU32[(STACK_MAX >> 2)-1] = 0x02135467;\n  HEAPU32[(STACK_MAX >> 2)-2] = 0x89BACDFE;\n}\n\nfunction checkStackCookie() {\n  if (HEAPU32[(STACK_MAX >> 2)-1] != 0x02135467 || HEAPU32[(STACK_MAX >> 2)-2] != 0x89BACDFE) {\n    abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x' + HEAPU32[(STACK_MAX >> 2)-2].toString(16) + ' ' + HEAPU32[(STACK_MAX >> 2)-1].toString(16));\n  }\n  // Also test the global address 0 for integrity. This check is not compatible with SAFE_SPLIT_MEMORY though, since that mode already tests all address 0 accesses on its own.\n  if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) throw 'Runtime error: The application has corrupted its heap memory area (address zero)!';\n}\n\nfunction abortStackOverflow(allocSize) {\n  abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - stackSave() + allocSize) + ' bytes available!');\n}\n\nfunction abortOnCannotGrowMemory() {\n  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  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ');\n}\n\n\nfunction enlargeMemory() {\n  abortOnCannotGrowMemory();\n}\n\n\nvar TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;\nvar TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 167772160;\nif (TOTAL_MEMORY < TOTAL_STACK) Module.printErr('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\n\n// Initialize the runtime's memory\n// check for full engine support (use string 'subarray' to avoid closure compiler confusion)\nassert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined,\n       'JS engine does not provide full typed array support');\n\n\n\n// Use a provided buffer, if there is one, or else allocate a new one\nif (Module['buffer']) {\n  buffer = Module['buffer'];\n  assert(buffer.byteLength === TOTAL_MEMORY, 'provided buffer should be ' + TOTAL_MEMORY + ' bytes, but it is ' + buffer.byteLength);\n} else {\n  // Use a WebAssembly memory where available\n  {\n    buffer = new ArrayBuffer(TOTAL_MEMORY);\n  }\n  assert(buffer.byteLength === TOTAL_MEMORY);\n  Module['buffer'] = buffer;\n}\nupdateGlobalBufferViews();\n\n\nfunction getTotalMemory() {\n  return TOTAL_MEMORY;\n}\n\n// Endianness check (note: assumes compiler arch was little-endian)\n  HEAP32[0] = 0x63736d65; /* 'emsc' */\nHEAP16[1] = 0x6373;\nif (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!';\n\nfunction callRuntimeCallbacks(callbacks) {\n  while(callbacks.length > 0) {\n    var callback = callbacks.shift();\n    if (typeof callback == 'function') {\n      callback();\n      continue;\n    }\n    var func = callback.func;\n    if (typeof func === 'number') {\n      if (callback.arg === undefined) {\n        Module['dynCall_v'](func);\n      } else {\n        Module['dynCall_vi'](func, callback.arg);\n      }\n    } else {\n      func(callback.arg === undefined ? null : callback.arg);\n    }\n  }\n}\n\nvar __ATPRERUN__  = []; // functions called before the runtime is initialized\nvar __ATINIT__    = []; // functions called during startup\nvar __ATMAIN__    = []; // functions called when main() is to be run\nvar __ATEXIT__    = []; // functions called during shutdown\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\n\nvar runtimeInitialized = false;\nvar runtimeExited = false;\n\n\nfunction preRun() {\n  // compatibility - merge in anything from Module['preRun'] at this time\n  if (Module['preRun']) {\n    if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\n    while (Module['preRun'].length) {\n      addOnPreRun(Module['preRun'].shift());\n    }\n  }\n  callRuntimeCallbacks(__ATPRERUN__);\n}\n\nfunction ensureInitRuntime() {\n  checkStackCookie();\n  if (runtimeInitialized) return;\n  runtimeInitialized = true;\n  callRuntimeCallbacks(__ATINIT__);\n}\n\nfunction preMain() {\n  checkStackCookie();\n  callRuntimeCallbacks(__ATMAIN__);\n}\n\nfunction exitRuntime() {\n  checkStackCookie();\n  callRuntimeCallbacks(__ATEXIT__);\n  runtimeExited = true;\n}\n\nfunction postRun() {\n  checkStackCookie();\n  // compatibility - merge in anything from Module['postRun'] at this time\n  if (Module['postRun']) {\n    if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\n    while (Module['postRun'].length) {\n      addOnPostRun(Module['postRun'].shift());\n    }\n  }\n  callRuntimeCallbacks(__ATPOSTRUN__);\n}\n\nfunction addOnPreRun(cb) {\n  __ATPRERUN__.unshift(cb);\n}\n\nfunction addOnInit(cb) {\n  __ATINIT__.unshift(cb);\n}\n\nfunction addOnPreMain(cb) {\n  __ATMAIN__.unshift(cb);\n}\n\nfunction addOnExit(cb) {\n  __ATEXIT__.unshift(cb);\n}\n\nfunction addOnPostRun(cb) {\n  __ATPOSTRUN__.unshift(cb);\n}\n\n// Deprecated: This function should not be called because it is unsafe and does not provide\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\n// to be secure from out of bounds writes.\n/** @deprecated */\nfunction writeStringToMemory(string, buffer, dontAddNull) {\n  warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\n\n  var /** @type {number} */ lastChar, /** @type {number} */ end;\n  if (dontAddNull) {\n    // stringToUTF8Array always appends null. If we don't want to do that, remember the\n    // character that existed at the location where the null will be placed, and restore\n    // that after the write (below).\n    end = buffer + lengthBytesUTF8(string);\n    lastChar = HEAP8[end];\n  }\n  stringToUTF8(string, buffer, Infinity);\n  if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\n}\n\nfunction writeArrayToMemory(array, buffer) {\n  assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)')\n  HEAP8.set(array, buffer);\n}\n\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\n  for (var i = 0; i < str.length; ++i) {\n    assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);\n    HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\n  }\n  // Null-terminate the pointer to the HEAP.\n  if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\n}\n\nfunction unSign(value, bits, ignore) {\n  if (value >= 0) {\n    return value;\n  }\n  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\n                    : Math.pow(2, bits)         + value;\n}\nfunction reSign(value, bits, ignore) {\n  if (value <= 0) {\n    return value;\n  }\n  var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\n                        : Math.pow(2, bits-1);\n  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\n                                                       // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\n                                                       // TODO: In i64 mode 1, resign the two parts separately and safely\n    value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\n  }\n  return value;\n}\n\nassert(Math['imul'] && Math['fround'] && Math['clz32'] && Math['trunc'], 'this is a legacy browser, build with LEGACY_VM_SUPPORT');\n\nvar Math_abs = Math.abs;\nvar Math_cos = Math.cos;\nvar Math_sin = Math.sin;\nvar Math_tan = Math.tan;\nvar Math_acos = Math.acos;\nvar Math_asin = Math.asin;\nvar Math_atan = Math.atan;\nvar Math_atan2 = Math.atan2;\nvar Math_exp = Math.exp;\nvar Math_log = Math.log;\nvar Math_sqrt = Math.sqrt;\nvar Math_ceil = Math.ceil;\nvar Math_floor = Math.floor;\nvar Math_pow = Math.pow;\nvar Math_imul = Math.imul;\nvar Math_fround = Math.fround;\nvar Math_round = Math.round;\nvar Math_min = Math.min;\nvar Math_max = Math.max;\nvar Math_clz32 = Math.clz32;\nvar Math_trunc = Math.trunc;\n\n// A counter of dependencies for calling run(). If we need to\n// do asynchronous work before running, increment this and\n// decrement it. Incrementing must happen in a place like\n// PRE_RUN_ADDITIONS (used by emcc to add file preloading).\n// Note that you can add dependencies in preRun, even though\n// it happens right before run - run will be postponed until\n// the dependencies are met.\nvar runDependencies = 0;\nvar runDependencyWatcher = null;\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\nvar runDependencyTracking = {};\n\nfunction getUniqueRunDependency(id) {\n  var orig = id;\n  while (1) {\n    if (!runDependencyTracking[id]) return id;\n    id = orig + Math.random();\n  }\n  return id;\n}\n\nfunction addRunDependency(id) {\n  runDependencies++;\n  if (Module['monitorRunDependencies']) {\n    Module['monitorRunDependencies'](runDependencies);\n  }\n  if (id) {\n    assert(!runDependencyTracking[id]);\n    runDependencyTracking[id] = 1;\n    if (runDependencyWatcher === null && typeof setInterval !== 'undefined') {\n      // Check for missing dependencies every few seconds\n      runDependencyWatcher = setInterval(function() {\n        if (ABORT) {\n          clearInterval(runDependencyWatcher);\n          runDependencyWatcher = null;\n          return;\n        }\n        var shown = false;\n        for (var dep in runDependencyTracking) {\n          if (!shown) {\n            shown = true;\n            Module.printErr('still waiting on run dependencies:');\n          }\n          Module.printErr('dependency: ' + dep);\n        }\n        if (shown) {\n          Module.printErr('(end of list)');\n        }\n      }, 10000);\n    }\n  } else {\n    Module.printErr('warning: run dependency added without ID');\n  }\n}\n\nfunction removeRunDependency(id) {\n  runDependencies--;\n  if (Module['monitorRunDependencies']) {\n    Module['monitorRunDependencies'](runDependencies);\n  }\n  if (id) {\n    assert(runDependencyTracking[id]);\n    delete runDependencyTracking[id];\n  } else {\n    Module.printErr('warning: run dependency removed without ID');\n  }\n  if (runDependencies == 0) {\n    if (runDependencyWatcher !== null) {\n      clearInterval(runDependencyWatcher);\n      runDependencyWatcher = null;\n    }\n    if (dependenciesFulfilled) {\n      var callback = dependenciesFulfilled;\n      dependenciesFulfilled = null;\n      callback(); // can add another dependenciesFulfilled\n    }\n  }\n}\n\nModule[\"preloadedImages\"] = {}; // maps url to image data\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\n\n\n\nvar memoryInitializer = null;\n\n\n\nvar /* show errors on likely calls to FS when it was not included */ FS = {\n  error: function() {\n    abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with  -s FORCE_FILESYSTEM=1');\n  },\n  init: function() { FS.error() },\n  createDataFile: function() { FS.error() },\n  createPreloadedFile: function() { FS.error() },\n  createLazyFile: function() { FS.error() },\n  open: function() { FS.error() },\n  mkdev: function() { FS.error() },\n  registerDevice: function() { FS.error() },\n  analyzePath: function() { FS.error() },\n  loadFilesFromDB: function() { FS.error() },\n\n  ErrnoError: function ErrnoError() { FS.error() },\n};\nModule['FS_createDataFile'] = FS.createDataFile;\nModule['FS_createPreloadedFile'] = FS.createPreloadedFile;\n\n\n\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\n\n// Indicates whether filename is a base64 data URI.\nfunction isDataURI(filename) {\n  return String.prototype.startsWith ?\n      filename.startsWith(dataURIPrefix) :\n      filename.indexOf(dataURIPrefix) === 0;\n}\n\n\n\n\n\n// === Body ===\n\nvar ASM_CONSTS = [];\n\n\n\n\n\nSTATIC_BASE = GLOBAL_BASE;\n\nSTATICTOP = STATIC_BASE + 22928;\n/* global initializers */  __ATINIT__.push({ func: function() { __GLOBAL__sub_I_laz_perf_cpp() } }, { func: function() { __GLOBAL__sub_I_bind_cpp() } });\n\n\nmemoryInitializer = \"data:application/octet-stream;base64,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2wAAAAAAAABIBQAA3AAAAN0AAADeAAAAAAAAAFgFAADfAAAA4AAAAA0AAAAAAAAAaAUAANwAAADhAAAA3gAAAAAAAACYBQAAzQAAAOIAAADPAAAA0AAAAOMAAAAAAAAAiAUAAM0AAADkAAAAzwAAANAAAADlAAAAAAAAABgGAADNAAAA5gAAAM8AAADQAAAA0QAAAOcAAADoAAAA6QAAAExBU1ppcABvcGVuAGdldFBvaW50AGdldENvdW50AER5bmFtaWNMQVNaaXAAYWRkRmllbGRGbG9hdGluZwBhZGRGaWVsZFNpZ25lZABhZGRGaWVsZFVuc2lnbmVkAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzNfRUVOU185YWxsb2NhdG9ySVMzX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzdfRUVOU185YWxsb2NhdG9ySVM3X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFAExBU0YATjZsYXN6aXAxM2ludmFsaWRfbWFnaWNFAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUARmlsZSBtYWdpYyBpcyBub3QgdmFsaWQATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk42bGFzemlwMmlvNnJlYWRlcjEwYmFzaWNfZmlsZUlOUzJfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRTExX3ZhbGlkYXRvcnNFdkVVbFJOUzNfNmhlYWRlckVFX05TXzlhbGxvY2F0b3JJU0JfRUVGdlNBX0VFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlJONmxhc3ppcDJpbzZoZWFkZXJFRUVFAE42bGFzemlwMjFvbGRfc3R5bGVfY29tcHJlc3Npb25FAE42bGFzemlwMTRub3RfY29tcHJlc3NlZEUAVGhlIGZpbGUgc2VlbXMgdG8gaGF2ZSBvbGQgc3R5bGUgY29tcHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZABUaGUgZmlsZSBkb2Vzbid0IHNlZW0gdG8gYmUgY29tcHJlc3NlZABaTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUUxMV92YWxpZGF0b3JzRXZFVWxSTlMwXzZoZWFkZXJFRV8AbGFzemlwIGVuY29kZWQATjZsYXN6aXAxM25vX2xhc3ppcF92bHJFAE42bGFzemlwMjVsYXN6aXBfZm9ybWF0X3Vuc3VwcG9ydGVkRQBPbmx5IExBU3ppcCBQT0lOVFdJU0UgQ0hVTktFRCBkZWNvbXByZXNzb3IgaXMgc3VwcG9ydGVkAE5vIExBU3ppcCBWTFIgd2FzIGZvdW5kIGluIHRoZSBWTFJzIHNlY3Rpb24ATjZsYXN6aXAyMmNodW5rX3RhYmxlX3JlYWRfZXJyb3JFAENodW5rIHRhYmxlIG9mZnNldCA9PSAtMSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZQBONmxhc3ppcDEzbm90X3N1cHBvcnRlZEUATjZsYXN6aXAyNnVua25vd25fY2h1bmtfdGFibGVfZm9ybWF0RQBjaHVua19zaXplID09IHVpbnQubWF4IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLCBjYWxsIDEtODAwLURBRlVRIGZvciBzdXBwb3J0LgBUaGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgdGhlIGNodW5rIHRhYmxlAFRoZSBjaHVuayB0YWJsZSB2ZXJzaW9uIG51bWJlciBpcyB1bmtub3duAE42bGFzemlwMTFlbmRfb2ZfZmlsZUUAUmVhY2hlZCBFbmQgb2YgZmlsZQBJbnZhbGlkIG51bWJlciBvZiBzeW1ib2xzAGJpdHMgJiYgKGJpdHMgPD0gMzIpAC9Vc2Vycy9jb25ub3IvY29kZS9sYXotcGVyZi1hYmVsbC9lbXNjcmlwdGVuLy4uL2xhei1wZXJmL2RlY29kZXIuaHBwAHJlYWRCaXRzAHN5bSA8ICgxPDwxNikAcmVhZFNob3J0AE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM5X0VFTlNfOWFsbG9jYXRvcklTOV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwMTl1bmtub3duX3NjaGVtYV90eXBlRQBUaGUgTEFaIHNjaGVtYSBpcyBub3QgcmVjb2duaXplZABONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2ZpZWxkX2RlY29tcHJlc3NvcklOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMGR5bmFtaWNfZGVjb21wcmVzc29yRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVOU185YWxsb2NhdG9ySVNDX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBONmxhc3ppcDdmb3JtYXRzMTBiYXNlX2ZpZWxkRQAPDg0MCwoJCA4AAQMGCgoJDQECBAcLCwoMAwQFCAwMCwsGBwgJDQ0MCgoLDA0ODg0JCgsMDQ4PDggJCgsMDQ4PAAECAwQFBgcBAAECAwQFBgIBAAECAwQFAwIBAAECAwQEAwIBAAECAwUEAwIBAAECBgUEAwIBAAEHBgUEAwIBAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdncHN0aW1lRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzN2dwc3RpbWVFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTSV9FRU5TXzlhbGxvY2F0b3JJU0lfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3Z3BzdGltZUVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF81ZmllbGRJTlMwXzNsYXMzcmdiRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzM3JnYkVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczNyZ2JFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfNWZpZWxkSU5TMF8zbGFzMTBleHRyYWJ5dGVzRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzMTBleHRyYWJ5dGVzRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0lfRUVOU185YWxsb2NhdG9ySVNJX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzMTBleHRyYWJ5dGVzRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNLX0VFTlNfOWFsbG9jYXRvcklTS19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzBfNWZpZWxkSU5TMF8zbGFzN3BvaW50MTBFTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0RfRUVFRU5TQl9JTlNDXzdncHN0aW1lRU5TRV9JU0hfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTTl9FRU5TXzlhbGxvY2F0b3JJU05fRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNEX0VFRUVOU0JfSU5TQ18zcmdiRU5TRV9JU0hfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTSl9FRUVFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNOX0VFTlNfOWFsbG9jYXRvcklTTl9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFTlNEX0lOU0VfM3JnYkVOU0dfSVNKX0VFRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFTlNCX0lOU0NfN2dwc3RpbWVFTlNFX0lTSF9FRUVFTlNCX0lOU0NfM3JnYkVOU0VfSVNLX0VFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNGX0VFRUVOU0RfSU5TRV83Z3BzdGltZUVOU0dfSVNKX0VFRUVOU0RfSU5TRV8zcmdiRU5TR19JU01fRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTUV9FRU5TXzlhbGxvY2F0b3JJU1FfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTTV9FRUVFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBidWZfc3RyZWFtTlNfMTRkZWZhdWx0X2RlbGV0ZUlTMV9FRU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUkxMGJ1Zl9zdHJlYW1FRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA4ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM1X0VFTlNfOWFsbG9jYXRvcklTNV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZmllbGRfZGVjb21wcmVzc29ySU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzhfRUVOU185YWxsb2NhdG9ySVM4X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElpTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJaU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWlFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWlOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElpRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElqTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJakVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJak5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWpFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWpOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElqRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElhTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJYUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJYU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWFFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWFOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElhRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElzTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJc0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJc05TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXNFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXNOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElzRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZEloTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaEVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJaE5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWhFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWhOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEloRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZEl0TlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJdEVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJdE5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXRFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXROUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEl0RUVFRUVFRUUANkxBU1ppcABQNkxBU1ppcABQSzZMQVNaaXAAaWkAdgB2aQB2aWlpaQB2aWlpAGlpaQAxM0R5bmFtaWNMQVNaaXAAUDEzRHluYW1pY0xBU1ppcABQSzEzRHluYW1pY0xBU1ppcAB2b2lkAGJvb2wAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AGludAB1bnNpZ25lZCBpbnQAbG9uZwB1bnNpZ25lZCBsb25nAGZsb2F0AGRvdWJsZQBzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE4xMGVtc2NyaXB0ZW4zdmFsRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMjFfX2Jhc2ljX3N0cmluZ19jb21tb25JTGIxRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOADAxMjM0NTY3ODlBQkNERUYuAFQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAc3RkOjpiYWRfZnVuY3Rpb25fY2FsbABOU3QzX18yMTdiYWRfZnVuY3Rpb25fY2FsbEUATlN0M19fMjE0X19zaGFyZWRfY291bnRFAE5TdDNfXzIxOV9fc2hhcmVkX3dlYWtfY291bnRFAG11dGV4IGxvY2sgZmFpbGVkAHRlcm1pbmF0aW5nIHdpdGggJXMgZXhjZXB0aW9uIG9mIHR5cGUgJXM6ICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZXhjZXB0aW9uIG9mIHR5cGUgJXMAdGVybWluYXRpbmcgd2l0aCAlcyBmb3JlaWduIGV4Y2VwdGlvbgB0ZXJtaW5hdGluZwB1bmNhdWdodABTdDlleGNlcHRpb24ATjEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mb0UAU3Q5dHlwZV9pbmZvAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAcHRocmVhZF9vbmNlIGZhaWx1cmUgaW4gX19jeGFfZ2V0X2dsb2JhbHNfZmFzdCgpAGNhbm5vdCBjcmVhdGUgcHRocmVhZCBrZXkgZm9yIF9fY3hhX2dldF9nbG9iYWxzKCkAY2Fubm90IHplcm8gb3V0IHRocmVhZCB2YWx1ZSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQB0ZXJtaW5hdGVfaGFuZGxlciB1bmV4cGVjdGVkbHkgcmV0dXJuZWQAc3RkOjpleGNlcHRpb24AU3QxMWxvZ2ljX2Vycm9yAFN0MTNydW50aW1lX2Vycm9yAFN0MTJsZW5ndGhfZXJyb3IATjEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19wYmFzZV90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRQB2AERuAGIAYwBoAGEAcwB0AGkAagBsAG0AZgBkAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0U=\";\n\n\n\n\n\n/* no memory initializer */\nvar tempDoublePtr = STATICTOP; STATICTOP += 16;\n\nassert(tempDoublePtr % 8 == 0);\n\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\n\n  HEAP8[tempDoublePtr] = HEAP8[ptr];\n\n  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\n\n  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\n\n  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\n\n}\n\nfunction copyTempDouble(ptr) {\n\n  HEAP8[tempDoublePtr] = HEAP8[ptr];\n\n  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\n\n  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\n\n  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\n\n  HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\n\n  HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\n\n  HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\n\n  HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\n\n}\n\n// {{PRE_LIBRARY}}\n\n\n  function ___assert_fail(condition, filename, line, func) {\n      abort('Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function']);\n    }\n\n  function ___cxa_allocate_exception(size) {\n      return _malloc(size);\n    }\n\n  \n  function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()\n      return !!__ZSt18uncaught_exceptionv.uncaught_exception;\n    }\n  \n  var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function (adjusted) {\n        if (!adjusted || EXCEPTIONS.infos[adjusted]) return adjusted;\n        for (var key in EXCEPTIONS.infos) {\n          var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\n          var info = EXCEPTIONS.infos[ptr];\n          if (info.adjusted === adjusted) {\n            return ptr;\n          }\n        }\n        return adjusted;\n      },addRef:function (ptr) {\n        if (!ptr) return;\n        var info = EXCEPTIONS.infos[ptr];\n        info.refcount++;\n      },decRef:function (ptr) {\n        if (!ptr) return;\n        var info = EXCEPTIONS.infos[ptr];\n        assert(info.refcount > 0);\n        info.refcount--;\n        // A rethrown exception can reach refcount 0; it must not be discarded\n        // Its next handler will clear the rethrown flag and addRef it, prior to\n        // final decRef and destruction here\n        if (info.refcount === 0 && !info.rethrown) {\n          if (info.destructor) {\n            Module['dynCall_vi'](info.destructor, ptr);\n          }\n          delete EXCEPTIONS.infos[ptr];\n          ___cxa_free_exception(ptr);\n        }\n      },clearRef:function (ptr) {\n        if (!ptr) return;\n        var info = EXCEPTIONS.infos[ptr];\n        info.refcount = 0;\n      }};function ___cxa_begin_catch(ptr) {\n      var info = EXCEPTIONS.infos[ptr];\n      if (info && !info.caught) {\n        info.caught = true;\n        __ZSt18uncaught_exceptionv.uncaught_exception--;\n      }\n      if (info) info.rethrown = false;\n      EXCEPTIONS.caught.push(ptr);\n      EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));\n      return ptr;\n    }\n\n  function ___cxa_pure_virtual() {\n      ABORT = true;\n      throw 'Pure virtual function called!';\n    }\n\n  \n  \n  function ___resumeException(ptr) {\n      if (!EXCEPTIONS.last) { EXCEPTIONS.last = ptr; }\n      throw ptr;\n    }function ___cxa_find_matching_catch() {\n      var thrown = EXCEPTIONS.last;\n      if (!thrown) {\n        // just pass through the null ptr\n        return ((setTempRet0(0),0)|0);\n      }\n      var info = EXCEPTIONS.infos[thrown];\n      var throwntype = info.type;\n      if (!throwntype) {\n        // just pass through the thrown ptr\n        return ((setTempRet0(0),thrown)|0);\n      }\n      var typeArray = Array.prototype.slice.call(arguments);\n  \n      var pointer = Module['___cxa_is_pointer_type'](throwntype);\n      // can_catch receives a **, add indirection\n      if (!___cxa_find_matching_catch.buffer) ___cxa_find_matching_catch.buffer = _malloc(4);\n      HEAP32[((___cxa_find_matching_catch.buffer)>>2)]=thrown;\n      thrown = ___cxa_find_matching_catch.buffer;\n      // The different catch blocks are denoted by different types.\n      // Due to inheritance, those types may not precisely match the\n      // type of the thrown object. Find one which matches, and\n      // return the type of the catch block which should be called.\n      for (var i = 0; i < typeArray.length; i++) {\n        if (typeArray[i] && Module['___cxa_can_catch'](typeArray[i], throwntype, thrown)) {\n          thrown = HEAP32[((thrown)>>2)]; // undo indirection\n          info.adjusted = thrown;\n          return ((setTempRet0(typeArray[i]),thrown)|0);\n        }\n      }\n      // Shouldn't happen unless we have bogus data in typeArray\n      // or encounter a type for which emscripten doesn't have suitable\n      // typeinfo defined. Best-efforts match just in case.\n      thrown = HEAP32[((thrown)>>2)]; // undo indirection\n      return ((setTempRet0(throwntype),thrown)|0);\n    }function ___cxa_throw(ptr, type, destructor) {\n      EXCEPTIONS.infos[ptr] = {\n        ptr: ptr,\n        adjusted: ptr,\n        type: type,\n        destructor: destructor,\n        refcount: 0,\n        caught: false,\n        rethrown: false\n      };\n      EXCEPTIONS.last = ptr;\n      if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\n        __ZSt18uncaught_exceptionv.uncaught_exception = 1;\n      } else {\n        __ZSt18uncaught_exceptionv.uncaught_exception++;\n      }\n      throw ptr;\n    }\n\n  function ___gxx_personality_v0() {\n    }\n\n  function ___lock() {}\n\n  \n    \n\n  \n  var SYSCALLS={varargs:0,get:function (varargs) {\n        SYSCALLS.varargs += 4;\n        var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\n        return ret;\n      },getStr:function () {\n        var ret = Pointer_stringify(SYSCALLS.get());\n        return ret;\n      },get64:function () {\n        var low = SYSCALLS.get(), high = SYSCALLS.get();\n        if (low >= 0) assert(high === 0);\n        else assert(high === -1);\n        return low;\n      },getZero:function () {\n        assert(SYSCALLS.get() === 0);\n      }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\n  try {\n   // llseek\n      var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\n      // NOTE: offset_high is unused - Emscripten's off_t is 32-bit\n      var offset = offset_low;\n      FS.llseek(stream, offset, whence);\n      HEAP32[((result)>>2)]=stream.position;\n      if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  \n  function flush_NO_FILESYSTEM() {\n      // flush anything remaining in the buffers during shutdown\n      var fflush = Module[\"_fflush\"];\n      if (fflush) fflush(0);\n      var printChar = ___syscall146.printChar;\n      if (!printChar) return;\n      var buffers = ___syscall146.buffers;\n      if (buffers[1].length) printChar(1, 10);\n      if (buffers[2].length) printChar(2, 10);\n    }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\n  try {\n   // writev\n      // hack to support printf in NO_FILESYSTEM\n      var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\n      var ret = 0;\n      if (!___syscall146.buffers) {\n        ___syscall146.buffers = [null, [], []]; // 1 => stdout, 2 => stderr\n        ___syscall146.printChar = function(stream, curr) {\n          var buffer = ___syscall146.buffers[stream];\n          assert(buffer);\n          if (curr === 0 || curr === 10) {\n            (stream === 1 ? Module['print'] : Module['printErr'])(UTF8ArrayToString(buffer, 0));\n            buffer.length = 0;\n          } else {\n            buffer.push(curr);\n          }\n        };\n      }\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAP32[(((iov)+(i*8))>>2)];\n        var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\n        for (var j = 0; j < len; j++) {\n          ___syscall146.printChar(stream, HEAPU8[ptr+j]);\n        }\n        ret += len;\n      }\n      return ret;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\n  try {\n   // ioctl\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\n  try {\n   // close\n      var stream = SYSCALLS.getStreamFromFD();\n      FS.close(stream);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  \n  \n   \n  \n   \n  \n     \n\n  function ___unlock() {}\n\n  \n  function getShiftFromSize(size) {\n      switch (size) {\n          case 1: return 0;\n          case 2: return 1;\n          case 4: return 2;\n          case 8: return 3;\n          default:\n              throw new TypeError('Unknown type size: ' + size);\n      }\n    }\n  \n  \n  \n  function embind_init_charCodes() {\n      var codes = new Array(256);\n      for (var i = 0; i < 256; ++i) {\n          codes[i] = String.fromCharCode(i);\n      }\n      embind_charCodes = codes;\n    }var embind_charCodes=undefined;function readLatin1String(ptr) {\n      var ret = \"\";\n      var c = ptr;\n      while (HEAPU8[c]) {\n          ret += embind_charCodes[HEAPU8[c++]];\n      }\n      return ret;\n    }\n  \n  \n  var awaitingDependencies={};\n  \n  var registeredTypes={};\n  \n  var typeDependencies={};\n  \n  \n  \n  \n  \n  \n  var char_0=48;\n  \n  var char_9=57;function makeLegalFunctionName(name) {\n      if (undefined === name) {\n          return '_unknown';\n      }\n      name = name.replace(/[^a-zA-Z0-9_]/g, '$');\n      var f = name.charCodeAt(0);\n      if (f >= char_0 && f <= char_9) {\n          return '_' + name;\n      } else {\n          return name;\n      }\n    }function createNamedFunction(name, body) {\n      name = makeLegalFunctionName(name);\n      /*jshint evil:true*/\n      return new Function(\n          \"body\",\n          \"return function \" + name + \"() {\\n\" +\n          \"    \\\"use strict\\\";\" +\n          \"    return body.apply(this, arguments);\\n\" +\n          \"};\\n\"\n      )(body);\n    }function extendError(baseErrorType, errorName) {\n      var errorClass = createNamedFunction(errorName, function(message) {\n          this.name = errorName;\n          this.message = message;\n  \n          var stack = (new Error(message)).stack;\n          if (stack !== undefined) {\n              this.stack = this.toString() + '\\n' +\n                  stack.replace(/^Error(:[^\\n]*)?\\n/, '');\n          }\n      });\n      errorClass.prototype = Object.create(baseErrorType.prototype);\n      errorClass.prototype.constructor = errorClass;\n      errorClass.prototype.toString = function() {\n          if (this.message === undefined) {\n              return this.name;\n          } else {\n              return this.name + ': ' + this.message;\n          }\n      };\n  \n      return errorClass;\n    }var BindingError=undefined;function throwBindingError(message) {\n      throw new BindingError(message);\n    }\n  \n  \n  \n  var InternalError=undefined;function throwInternalError(message) {\n      throw new InternalError(message);\n    }function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) {\n      myTypes.forEach(function(type) {\n          typeDependencies[type] = dependentTypes;\n      });\n  \n      function onComplete(typeConverters) {\n          var myTypeConverters = getTypeConverters(typeConverters);\n          if (myTypeConverters.length !== myTypes.length) {\n              throwInternalError('Mismatched type converter count');\n          }\n          for (var i = 0; i < myTypes.length; ++i) {\n              registerType(myTypes[i], myTypeConverters[i]);\n          }\n      }\n  \n      var typeConverters = new Array(dependentTypes.length);\n      var unregisteredTypes = [];\n      var registered = 0;\n      dependentTypes.forEach(function(dt, i) {\n          if (registeredTypes.hasOwnProperty(dt)) {\n              typeConverters[i] = registeredTypes[dt];\n          } else {\n              unregisteredTypes.push(dt);\n              if (!awaitingDependencies.hasOwnProperty(dt)) {\n                  awaitingDependencies[dt] = [];\n              }\n              awaitingDependencies[dt].push(function() {\n                  typeConverters[i] = registeredTypes[dt];\n                  ++registered;\n                  if (registered === unregisteredTypes.length) {\n                      onComplete(typeConverters);\n                  }\n              });\n          }\n      });\n      if (0 === unregisteredTypes.length) {\n          onComplete(typeConverters);\n      }\n    }function registerType(rawType, registeredInstance, options) {\n      options = options || {};\n  \n      if (!('argPackAdvance' in registeredInstance)) {\n          throw new TypeError('registerType registeredInstance requires argPackAdvance');\n      }\n  \n      var name = registeredInstance.name;\n      if (!rawType) {\n          throwBindingError('type \"' + name + '\" must have a positive integer typeid pointer');\n      }\n      if (registeredTypes.hasOwnProperty(rawType)) {\n          if (options.ignoreDuplicateRegistrations) {\n              return;\n          } else {\n              throwBindingError(\"Cannot register type '\" + name + \"' twice\");\n          }\n      }\n  \n      registeredTypes[rawType] = registeredInstance;\n      delete typeDependencies[rawType];\n  \n      if (awaitingDependencies.hasOwnProperty(rawType)) {\n          var callbacks = awaitingDependencies[rawType];\n          delete awaitingDependencies[rawType];\n          callbacks.forEach(function(cb) {\n              cb();\n          });\n      }\n    }function __embind_register_bool(rawType, name, size, trueValue, falseValue) {\n      var shift = getShiftFromSize(size);\n  \n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(wt) {\n              // ambiguous emscripten ABI: sometimes return values are\n              // true or false, and sometimes integers (0 or 1)\n              return !!wt;\n          },\n          'toWireType': function(destructors, o) {\n              return o ? trueValue : falseValue;\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': function(pointer) {\n              // TODO: if heap is fixed (like in asm.js) this could be executed outside\n              var heap;\n              if (size === 1) {\n                  heap = HEAP8;\n              } else if (size === 2) {\n                  heap = HEAP16;\n              } else if (size === 4) {\n                  heap = HEAP32;\n              } else {\n                  throw new TypeError(\"Unknown boolean type size: \" + name);\n              }\n              return this['fromWireType'](heap[pointer >> shift]);\n          },\n          destructorFunction: null, // This type does not need a destructor\n      });\n    }\n\n  \n  \n  \n  function ClassHandle_isAliasOf(other) {\n      if (!(this instanceof ClassHandle)) {\n          return false;\n      }\n      if (!(other instanceof ClassHandle)) {\n          return false;\n      }\n  \n      var leftClass = this.$$.ptrType.registeredClass;\n      var left = this.$$.ptr;\n      var rightClass = other.$$.ptrType.registeredClass;\n      var right = other.$$.ptr;\n  \n      while (leftClass.baseClass) {\n          left = leftClass.upcast(left);\n          leftClass = leftClass.baseClass;\n      }\n  \n      while (rightClass.baseClass) {\n          right = rightClass.upcast(right);\n          rightClass = rightClass.baseClass;\n      }\n  \n      return leftClass === rightClass && left === right;\n    }\n  \n  \n  function shallowCopyInternalPointer(o) {\n      return {\n          count: o.count,\n          deleteScheduled: o.deleteScheduled,\n          preservePointerOnDelete: o.preservePointerOnDelete,\n          ptr: o.ptr,\n          ptrType: o.ptrType,\n          smartPtr: o.smartPtr,\n          smartPtrType: o.smartPtrType,\n      };\n    }\n  \n  function throwInstanceAlreadyDeleted(obj) {\n      function getInstanceTypeName(handle) {\n        return handle.$$.ptrType.registeredClass.name;\n      }\n      throwBindingError(getInstanceTypeName(obj) + ' instance already deleted');\n    }function ClassHandle_clone() {\n      if (!this.$$.ptr) {\n          throwInstanceAlreadyDeleted(this);\n      }\n  \n      if (this.$$.preservePointerOnDelete) {\n          this.$$.count.value += 1;\n          return this;\n      } else {\n          var clone = Object.create(Object.getPrototypeOf(this), {\n              $$: {\n                  value: shallowCopyInternalPointer(this.$$),\n              }\n          });\n  \n          clone.$$.count.value += 1;\n          clone.$$.deleteScheduled = false;\n          return clone;\n      }\n    }\n  \n  \n  function runDestructor(handle) {\n      var $$ = handle.$$;\n      if ($$.smartPtr) {\n          $$.smartPtrType.rawDestructor($$.smartPtr);\n      } else {\n          $$.ptrType.registeredClass.rawDestructor($$.ptr);\n      }\n    }function ClassHandle_delete() {\n      if (!this.$$.ptr) {\n          throwInstanceAlreadyDeleted(this);\n      }\n  \n      if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {\n          throwBindingError('Object already scheduled for deletion');\n      }\n  \n      this.$$.count.value -= 1;\n      var toDelete = 0 === this.$$.count.value;\n      if (toDelete) {\n          runDestructor(this);\n      }\n      if (!this.$$.preservePointerOnDelete) {\n          this.$$.smartPtr = undefined;\n          this.$$.ptr = undefined;\n      }\n    }\n  \n  function ClassHandle_isDeleted() {\n      return !this.$$.ptr;\n    }\n  \n  \n  var delayFunction=undefined;\n  \n  var deletionQueue=[];\n  \n  function flushPendingDeletes() {\n      while (deletionQueue.length) {\n          var obj = deletionQueue.pop();\n          obj.$$.deleteScheduled = false;\n          obj['delete']();\n      }\n    }function ClassHandle_deleteLater() {\n      if (!this.$$.ptr) {\n          throwInstanceAlreadyDeleted(this);\n      }\n      if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {\n          throwBindingError('Object already scheduled for deletion');\n      }\n      deletionQueue.push(this);\n      if (deletionQueue.length === 1 && delayFunction) {\n          delayFunction(flushPendingDeletes);\n      }\n      this.$$.deleteScheduled = true;\n      return this;\n    }function init_ClassHandle() {\n      ClassHandle.prototype['isAliasOf'] = ClassHandle_isAliasOf;\n      ClassHandle.prototype['clone'] = ClassHandle_clone;\n      ClassHandle.prototype['delete'] = ClassHandle_delete;\n      ClassHandle.prototype['isDeleted'] = ClassHandle_isDeleted;\n      ClassHandle.prototype['deleteLater'] = ClassHandle_deleteLater;\n    }function ClassHandle() {\n    }\n  \n  var registeredPointers={};\n  \n  \n  function ensureOverloadTable(proto, methodName, humanName) {\n      if (undefined === proto[methodName].overloadTable) {\n          var prevFunc = proto[methodName];\n          // Inject an overload resolver function that routes to the appropriate overload based on the number of arguments.\n          proto[methodName] = function() {\n              // TODO This check can be removed in -O3 level \"unsafe\" optimizations.\n              if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) {\n                  throwBindingError(\"Function '\" + humanName + \"' called with an invalid number of arguments (\" + arguments.length + \") - expects one of (\" + proto[methodName].overloadTable + \")!\");\n              }\n              return proto[methodName].overloadTable[arguments.length].apply(this, arguments);\n          };\n          // Move the previous function into the overload table.\n          proto[methodName].overloadTable = [];\n          proto[methodName].overloadTable[prevFunc.argCount] = prevFunc;\n      }\n    }function exposePublicSymbol(name, value, numArguments) {\n      if (Module.hasOwnProperty(name)) {\n          if (undefined === numArguments || (undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments])) {\n              throwBindingError(\"Cannot register public name '\" + name + \"' twice\");\n          }\n  \n          // We are exposing a function with the same name as an existing function. Create an overload table and a function selector\n          // that routes between the two.\n          ensureOverloadTable(Module, name, name);\n          if (Module.hasOwnProperty(numArguments)) {\n              throwBindingError(\"Cannot register multiple overloads of a function with the same number of arguments (\" + numArguments + \")!\");\n          }\n          // Add the new function into the overload table.\n          Module[name].overloadTable[numArguments] = value;\n      }\n      else {\n          Module[name] = value;\n          if (undefined !== numArguments) {\n              Module[name].numArguments = numArguments;\n          }\n      }\n    }\n  \n  function RegisteredClass(\n      name,\n      constructor,\n      instancePrototype,\n      rawDestructor,\n      baseClass,\n      getActualType,\n      upcast,\n      downcast\n    ) {\n      this.name = name;\n      this.constructor = constructor;\n      this.instancePrototype = instancePrototype;\n      this.rawDestructor = rawDestructor;\n      this.baseClass = baseClass;\n      this.getActualType = getActualType;\n      this.upcast = upcast;\n      this.downcast = downcast;\n      this.pureVirtualFunctions = [];\n    }\n  \n  \n  \n  function upcastPointer(ptr, ptrClass, desiredClass) {\n      while (ptrClass !== desiredClass) {\n          if (!ptrClass.upcast) {\n              throwBindingError(\"Expected null or instance of \" + desiredClass.name + \", got an instance of \" + ptrClass.name);\n          }\n          ptr = ptrClass.upcast(ptr);\n          ptrClass = ptrClass.baseClass;\n      }\n      return ptr;\n    }function constNoSmartPtrRawPointerToWireType(destructors, handle) {\n      if (handle === null) {\n          if (this.isReference) {\n              throwBindingError('null is not a valid ' + this.name);\n          }\n          return 0;\n      }\n  \n      if (!handle.$$) {\n          throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n      }\n      if (!handle.$$.ptr) {\n          throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n      }\n      var handleClass = handle.$$.ptrType.registeredClass;\n      var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n      return ptr;\n    }\n  \n  function genericPointerToWireType(destructors, handle) {\n      var ptr;\n      if (handle === null) {\n          if (this.isReference) {\n              throwBindingError('null is not a valid ' + this.name);\n          }\n  \n          if (this.isSmartPointer) {\n              ptr = this.rawConstructor();\n              if (destructors !== null) {\n                  destructors.push(this.rawDestructor, ptr);\n              }\n              return ptr;\n          } else {\n              return 0;\n          }\n      }\n  \n      if (!handle.$$) {\n          throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n      }\n      if (!handle.$$.ptr) {\n          throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n      }\n      if (!this.isConst && handle.$$.ptrType.isConst) {\n          throwBindingError('Cannot convert argument of type ' + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + ' to parameter type ' + this.name);\n      }\n      var handleClass = handle.$$.ptrType.registeredClass;\n      ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n  \n      if (this.isSmartPointer) {\n          // TODO: this is not strictly true\n          // We could support BY_EMVAL conversions from raw pointers to smart pointers\n          // because the smart pointer can hold a reference to the handle\n          if (undefined === handle.$$.smartPtr) {\n              throwBindingError('Passing raw pointer to smart pointer is illegal');\n          }\n  \n          switch (this.sharingPolicy) {\n              case 0: // NONE\n                  // no upcasting\n                  if (handle.$$.smartPtrType === this) {\n                      ptr = handle.$$.smartPtr;\n                  } else {\n                      throwBindingError('Cannot convert argument of type ' + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + ' to parameter type ' + this.name);\n                  }\n                  break;\n  \n              case 1: // INTRUSIVE\n                  ptr = handle.$$.smartPtr;\n                  break;\n  \n              case 2: // BY_EMVAL\n                  if (handle.$$.smartPtrType === this) {\n                      ptr = handle.$$.smartPtr;\n                  } else {\n                      var clonedHandle = handle['clone']();\n                      ptr = this.rawShare(\n                          ptr,\n                          __emval_register(function() {\n                              clonedHandle['delete']();\n                          })\n                      );\n                      if (destructors !== null) {\n                          destructors.push(this.rawDestructor, ptr);\n                      }\n                  }\n                  break;\n  \n              default:\n                  throwBindingError('Unsupporting sharing policy');\n          }\n      }\n      return ptr;\n    }\n  \n  function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) {\n      if (handle === null) {\n          if (this.isReference) {\n              throwBindingError('null is not a valid ' + this.name);\n          }\n          return 0;\n      }\n  \n      if (!handle.$$) {\n          throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n      }\n      if (!handle.$$.ptr) {\n          throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n      }\n      if (handle.$$.ptrType.isConst) {\n          throwBindingError('Cannot convert argument of type ' + handle.$$.ptrType.name + ' to parameter type ' + this.name);\n      }\n      var handleClass = handle.$$.ptrType.registeredClass;\n      var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n      return ptr;\n    }\n  \n  \n  function simpleReadValueFromPointer(pointer) {\n      return this['fromWireType'](HEAPU32[pointer >> 2]);\n    }\n  \n  function RegisteredPointer_getPointee(ptr) {\n      if (this.rawGetPointee) {\n          ptr = this.rawGetPointee(ptr);\n      }\n      return ptr;\n    }\n  \n  function RegisteredPointer_destructor(ptr) {\n      if (this.rawDestructor) {\n          this.rawDestructor(ptr);\n      }\n    }\n  \n  function RegisteredPointer_deleteObject(handle) {\n      if (handle !== null) {\n          handle['delete']();\n      }\n    }\n  \n  \n  function downcastPointer(ptr, ptrClass, desiredClass) {\n      if (ptrClass === desiredClass) {\n          return ptr;\n      }\n      if (undefined === desiredClass.baseClass) {\n          return null; // no conversion\n      }\n  \n      var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass);\n      if (rv === null) {\n          return null;\n      }\n      return desiredClass.downcast(rv);\n    }\n  \n  \n  \n  \n  function getInheritedInstanceCount() {\n      return Object.keys(registeredInstances).length;\n    }\n  \n  function getLiveInheritedInstances() {\n      var rv = [];\n      for (var k in registeredInstances) {\n          if (registeredInstances.hasOwnProperty(k)) {\n              rv.push(registeredInstances[k]);\n          }\n      }\n      return rv;\n    }\n  \n  function setDelayFunction(fn) {\n      delayFunction = fn;\n      if (deletionQueue.length && delayFunction) {\n          delayFunction(flushPendingDeletes);\n      }\n    }function init_embind() {\n      Module['getInheritedInstanceCount'] = getInheritedInstanceCount;\n      Module['getLiveInheritedInstances'] = getLiveInheritedInstances;\n      Module['flushPendingDeletes'] = flushPendingDeletes;\n      Module['setDelayFunction'] = setDelayFunction;\n    }var registeredInstances={};\n  \n  function getBasestPointer(class_, ptr) {\n      if (ptr === undefined) {\n          throwBindingError('ptr should not be undefined');\n      }\n      while (class_.baseClass) {\n          ptr = class_.upcast(ptr);\n          class_ = class_.baseClass;\n      }\n      return ptr;\n    }function getInheritedInstance(class_, ptr) {\n      ptr = getBasestPointer(class_, ptr);\n      return registeredInstances[ptr];\n    }\n  \n  function makeClassHandle(prototype, record) {\n      if (!record.ptrType || !record.ptr) {\n          throwInternalError('makeClassHandle requires ptr and ptrType');\n      }\n      var hasSmartPtrType = !!record.smartPtrType;\n      var hasSmartPtr = !!record.smartPtr;\n      if (hasSmartPtrType !== hasSmartPtr) {\n          throwInternalError('Both smartPtrType and smartPtr must be specified');\n      }\n      record.count = { value: 1 };\n      return Object.create(prototype, {\n          $$: {\n              value: record,\n          },\n      });\n    }function RegisteredPointer_fromWireType(ptr) {\n      // ptr is a raw pointer (or a raw smartpointer)\n  \n      // rawPointer is a maybe-null raw pointer\n      var rawPointer = this.getPointee(ptr);\n      if (!rawPointer) {\n          this.destructor(ptr);\n          return null;\n      }\n  \n      var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer);\n      if (undefined !== registeredInstance) {\n          // JS object has been neutered, time to repopulate it\n          if (0 === registeredInstance.$$.count.value) {\n              registeredInstance.$$.ptr = rawPointer;\n              registeredInstance.$$.smartPtr = ptr;\n              return registeredInstance['clone']();\n          } else {\n              // else, just increment reference count on existing object\n              // it already has a reference to the smart pointer\n              var rv = registeredInstance['clone']();\n              this.destructor(ptr);\n              return rv;\n          }\n      }\n  \n      function makeDefaultHandle() {\n          if (this.isSmartPointer) {\n              return makeClassHandle(this.registeredClass.instancePrototype, {\n                  ptrType: this.pointeeType,\n                  ptr: rawPointer,\n                  smartPtrType: this,\n                  smartPtr: ptr,\n              });\n          } else {\n              return makeClassHandle(this.registeredClass.instancePrototype, {\n                  ptrType: this,\n                  ptr: ptr,\n              });\n          }\n      }\n  \n      var actualType = this.registeredClass.getActualType(rawPointer);\n      var registeredPointerRecord = registeredPointers[actualType];\n      if (!registeredPointerRecord) {\n          return makeDefaultHandle.call(this);\n      }\n  \n      var toType;\n      if (this.isConst) {\n          toType = registeredPointerRecord.constPointerType;\n      } else {\n          toType = registeredPointerRecord.pointerType;\n      }\n      var dp = downcastPointer(\n          rawPointer,\n          this.registeredClass,\n          toType.registeredClass);\n      if (dp === null) {\n          return makeDefaultHandle.call(this);\n      }\n      if (this.isSmartPointer) {\n          return makeClassHandle(toType.registeredClass.instancePrototype, {\n              ptrType: toType,\n              ptr: dp,\n              smartPtrType: this,\n              smartPtr: ptr,\n          });\n      } else {\n          return makeClassHandle(toType.registeredClass.instancePrototype, {\n              ptrType: toType,\n              ptr: dp,\n          });\n      }\n    }function init_RegisteredPointer() {\n      RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee;\n      RegisteredPointer.prototype.destructor = RegisteredPointer_destructor;\n      RegisteredPointer.prototype['argPackAdvance'] = 8;\n      RegisteredPointer.prototype['readValueFromPointer'] = simpleReadValueFromPointer;\n      RegisteredPointer.prototype['deleteObject'] = RegisteredPointer_deleteObject;\n      RegisteredPointer.prototype['fromWireType'] = RegisteredPointer_fromWireType;\n    }function RegisteredPointer(\n      name,\n      registeredClass,\n      isReference,\n      isConst,\n  \n      // smart pointer properties\n      isSmartPointer,\n      pointeeType,\n      sharingPolicy,\n      rawGetPointee,\n      rawConstructor,\n      rawShare,\n      rawDestructor\n    ) {\n      this.name = name;\n      this.registeredClass = registeredClass;\n      this.isReference = isReference;\n      this.isConst = isConst;\n  \n      // smart pointer properties\n      this.isSmartPointer = isSmartPointer;\n      this.pointeeType = pointeeType;\n      this.sharingPolicy = sharingPolicy;\n      this.rawGetPointee = rawGetPointee;\n      this.rawConstructor = rawConstructor;\n      this.rawShare = rawShare;\n      this.rawDestructor = rawDestructor;\n  \n      if (!isSmartPointer && registeredClass.baseClass === undefined) {\n          if (isConst) {\n              this['toWireType'] = constNoSmartPtrRawPointerToWireType;\n              this.destructorFunction = null;\n          } else {\n              this['toWireType'] = nonConstNoSmartPtrRawPointerToWireType;\n              this.destructorFunction = null;\n          }\n      } else {\n          this['toWireType'] = genericPointerToWireType;\n          // Here we must leave this.destructorFunction undefined, since whether genericPointerToWireType returns\n          // a pointer that needs to be freed up is runtime-dependent, and cannot be evaluated at registration time.\n          // TODO: Create an alternative mechanism that allows removing the use of var destructors = []; array in\n          //       craftInvokerFunction altogether.\n      }\n    }\n  \n  function replacePublicSymbol(name, value, numArguments) {\n      if (!Module.hasOwnProperty(name)) {\n          throwInternalError('Replacing nonexistant public symbol');\n      }\n      // If there's an overload table for this symbol, replace the symbol in the overload table instead.\n      if (undefined !== Module[name].overloadTable && undefined !== numArguments) {\n          Module[name].overloadTable[numArguments] = value;\n      }\n      else {\n          Module[name] = value;\n          Module[name].argCount = numArguments;\n      }\n    }\n  \n  function embind__requireFunction(signature, rawFunction) {\n      signature = readLatin1String(signature);\n  \n      function makeDynCaller(dynCall) {\n          var args = [];\n          for (var i = 1; i < signature.length; ++i) {\n              args.push('a' + i);\n          }\n  \n          var name = 'dynCall_' + signature + '_' + rawFunction;\n          var body = 'return function ' + name + '(' + args.join(', ') + ') {\\n';\n          body    += '    return dynCall(rawFunction' + (args.length ? ', ' : '') + args.join(', ') + ');\\n';\n          body    += '};\\n';\n  \n          return (new Function('dynCall', 'rawFunction', body))(dynCall, rawFunction);\n      }\n  \n      var fp;\n      if (Module['FUNCTION_TABLE_' + signature] !== undefined) {\n          fp = Module['FUNCTION_TABLE_' + signature][rawFunction];\n      } else if (typeof FUNCTION_TABLE !== \"undefined\") {\n          fp = FUNCTION_TABLE[rawFunction];\n      } else {\n          // asm.js does not give direct access to the function tables,\n          // and thus we must go through the dynCall interface which allows\n          // calling into a signature's function table by pointer value.\n          //\n          // https://github.com/dherman/asm.js/issues/83\n          //\n          // This has three main penalties:\n          // - dynCall is another function call in the path from JavaScript to C++.\n          // - JITs may not predict through the function table indirection at runtime.\n          var dc = Module[\"asm\"]['dynCall_' + signature];\n          if (dc === undefined) {\n              // We will always enter this branch if the signature\n              // contains 'f' and PRECISE_F32 is not enabled.\n              //\n              // Try again, replacing 'f' with 'd'.\n              dc = Module[\"asm\"]['dynCall_' + signature.replace(/f/g, 'd')];\n              if (dc === undefined) {\n                  throwBindingError(\"No dynCall invoker for signature: \" + signature);\n              }\n          }\n          fp = makeDynCaller(dc);\n      }\n  \n      if (typeof fp !== \"function\") {\n          throwBindingError(\"unknown function pointer with signature \" + signature + \": \" + rawFunction);\n      }\n      return fp;\n    }\n  \n  \n  var UnboundTypeError=undefined;\n  \n  function getTypeName(type) {\n      var ptr = ___getTypeName(type);\n      var rv = readLatin1String(ptr);\n      _free(ptr);\n      return rv;\n    }function throwUnboundTypeError(message, types) {\n      var unboundTypes = [];\n      var seen = {};\n      function visit(type) {\n          if (seen[type]) {\n              return;\n          }\n          if (registeredTypes[type]) {\n              return;\n          }\n          if (typeDependencies[type]) {\n              typeDependencies[type].forEach(visit);\n              return;\n          }\n          unboundTypes.push(type);\n          seen[type] = true;\n      }\n      types.forEach(visit);\n  \n      throw new UnboundTypeError(message + ': ' + unboundTypes.map(getTypeName).join([', ']));\n    }function __embind_register_class(\n      rawType,\n      rawPointerType,\n      rawConstPointerType,\n      baseClassRawType,\n      getActualTypeSignature,\n      getActualType,\n      upcastSignature,\n      upcast,\n      downcastSignature,\n      downcast,\n      name,\n      destructorSignature,\n      rawDestructor\n    ) {\n      name = readLatin1String(name);\n      getActualType = embind__requireFunction(getActualTypeSignature, getActualType);\n      if (upcast) {\n          upcast = embind__requireFunction(upcastSignature, upcast);\n      }\n      if (downcast) {\n          downcast = embind__requireFunction(downcastSignature, downcast);\n      }\n      rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);\n      var legalFunctionName = makeLegalFunctionName(name);\n  \n      exposePublicSymbol(legalFunctionName, function() {\n          // this code cannot run if baseClassRawType is zero\n          throwUnboundTypeError('Cannot construct ' + name + ' due to unbound types', [baseClassRawType]);\n      });\n  \n      whenDependentTypesAreResolved(\n          [rawType, rawPointerType, rawConstPointerType],\n          baseClassRawType ? [baseClassRawType] : [],\n          function(base) {\n              base = base[0];\n  \n              var baseClass;\n              var basePrototype;\n              if (baseClassRawType) {\n                  baseClass = base.registeredClass;\n                  basePrototype = baseClass.instancePrototype;\n              } else {\n                  basePrototype = ClassHandle.prototype;\n              }\n  \n              var constructor = createNamedFunction(legalFunctionName, function() {\n                  if (Object.getPrototypeOf(this) !== instancePrototype) {\n                      throw new BindingError(\"Use 'new' to construct \" + name);\n                  }\n                  if (undefined === registeredClass.constructor_body) {\n                      throw new BindingError(name + \" has no accessible constructor\");\n                  }\n                  var body = registeredClass.constructor_body[arguments.length];\n                  if (undefined === body) {\n                      throw new BindingError(\"Tried to invoke ctor of \" + name + \" with invalid number of parameters (\" + arguments.length + \") - expected (\" + Object.keys(registeredClass.constructor_body).toString() + \") parameters instead!\");\n                  }\n                  return body.apply(this, arguments);\n              });\n  \n              var instancePrototype = Object.create(basePrototype, {\n                  constructor: { value: constructor },\n              });\n  \n              constructor.prototype = instancePrototype;\n  \n              var registeredClass = new RegisteredClass(\n                  name,\n                  constructor,\n                  instancePrototype,\n                  rawDestructor,\n                  baseClass,\n                  getActualType,\n                  upcast,\n                  downcast);\n  \n              var referenceConverter = new RegisteredPointer(\n                  name,\n                  registeredClass,\n                  true,\n                  false,\n                  false);\n  \n              var pointerConverter = new RegisteredPointer(\n                  name + '*',\n                  registeredClass,\n                  false,\n                  false,\n                  false);\n  \n              var constPointerConverter = new RegisteredPointer(\n                  name + ' const*',\n                  registeredClass,\n                  false,\n                  true,\n                  false);\n  \n              registeredPointers[rawType] = {\n                  pointerType: pointerConverter,\n                  constPointerType: constPointerConverter\n              };\n  \n              replacePublicSymbol(legalFunctionName, constructor);\n  \n              return [referenceConverter, pointerConverter, constPointerConverter];\n          }\n      );\n    }\n\n  \n  function heap32VectorToArray(count, firstElement) {\n      var array = [];\n      for (var i = 0; i < count; i++) {\n          array.push(HEAP32[(firstElement >> 2) + i]);\n      }\n      return array;\n    }\n  \n  function runDestructors(destructors) {\n      while (destructors.length) {\n          var ptr = destructors.pop();\n          var del = destructors.pop();\n          del(ptr);\n      }\n    }function __embind_register_class_constructor(\n      rawClassType,\n      argCount,\n      rawArgTypesAddr,\n      invokerSignature,\n      invoker,\n      rawConstructor\n    ) {\n      var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);\n      invoker = embind__requireFunction(invokerSignature, invoker);\n  \n      whenDependentTypesAreResolved([], [rawClassType], function(classType) {\n          classType = classType[0];\n          var humanName = 'constructor ' + classType.name;\n  \n          if (undefined === classType.registeredClass.constructor_body) {\n              classType.registeredClass.constructor_body = [];\n          }\n          if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) {\n              throw new BindingError(\"Cannot register multiple constructors with identical number of parameters (\" + (argCount-1) + \") for class '\" + classType.name + \"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");\n          }\n          classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() {\n              throwUnboundTypeError('Cannot construct ' + classType.name + ' due to unbound types', rawArgTypes);\n          };\n  \n          whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) {\n              classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() {\n                  if (arguments.length !== argCount - 1) {\n                      throwBindingError(humanName + ' called with ' + arguments.length + ' arguments, expected ' + (argCount-1));\n                  }\n                  var destructors = [];\n                  var args = new Array(argCount);\n                  args[0] = rawConstructor;\n                  for (var i = 1; i < argCount; ++i) {\n                      args[i] = argTypes[i]['toWireType'](destructors, arguments[i - 1]);\n                  }\n  \n                  var ptr = invoker.apply(null, args);\n                  runDestructors(destructors);\n  \n                  return argTypes[0]['fromWireType'](ptr);\n              };\n              return [];\n          });\n          return [];\n      });\n    }\n\n  \n  \n  function new_(constructor, argumentList) {\n      if (!(constructor instanceof Function)) {\n          throw new TypeError('new_ called with constructor type ' + typeof(constructor) + \" which is not a function\");\n      }\n  \n      /*\n       * Previously, the following line was just:\n  \n       function dummy() {};\n  \n       * Unfortunately, Chrome was preserving 'dummy' as the object's name, even though at creation, the 'dummy' has the\n       * correct constructor name.  Thus, objects created with IMVU.new would show up in the debugger as 'dummy', which\n       * isn't very helpful.  Using IMVU.createNamedFunction addresses the issue.  Doublely-unfortunately, there's no way\n       * to write a test for this behavior.  -NRD 2013.02.22\n       */\n      var dummy = createNamedFunction(constructor.name || 'unknownFunctionName', function(){});\n      dummy.prototype = constructor.prototype;\n      var obj = new dummy;\n  \n      var r = constructor.apply(obj, argumentList);\n      return (r instanceof Object) ? r : obj;\n    }function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) {\n      // humanName: a human-readable string name for the function to be generated.\n      // argTypes: An array that contains the embind type objects for all types in the function signature.\n      //    argTypes[0] is the type object for the function return value.\n      //    argTypes[1] is the type object for function this object/class type, or null if not crafting an invoker for a class method.\n      //    argTypes[2...] are the actual function parameters.\n      // classType: The embind type object for the class to be bound, or null if this is not a method of a class.\n      // cppInvokerFunc: JS Function object to the C++-side function that interops into C++ code.\n      // cppTargetFunc: Function pointer (an integer to FUNCTION_TABLE) to the target C++ function the cppInvokerFunc will end up calling.\n      var argCount = argTypes.length;\n  \n      if (argCount < 2) {\n          throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");\n      }\n  \n      var isClassMethodFunc = (argTypes[1] !== null && classType !== null);\n  \n      // Free functions with signature \"void function()\" do not need an invoker that marshalls between wire types.\n  // TODO: This omits argument count check - enable only at -O3 or similar.\n  //    if (ENABLE_UNSAFE_OPTS && argCount == 2 && argTypes[0].name == \"void\" && !isClassMethodFunc) {\n  //       return FUNCTION_TABLE[fn];\n  //    }\n  \n  \n      // Determine if we need to use a dynamic stack to store the destructors for the function parameters.\n      // TODO: Remove this completely once all function invokers are being dynamically generated.\n      var needsDestructorStack = false;\n  \n      for(var i = 1; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here.\n          if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { // The type does not define a destructor function - must use dynamic stack\n              needsDestructorStack = true;\n              break;\n          }\n      }\n  \n      var returns = (argTypes[0].name !== \"void\");\n  \n      var argsList = \"\";\n      var argsListWired = \"\";\n      for(var i = 0; i < argCount - 2; ++i) {\n          argsList += (i!==0?\", \":\"\")+\"arg\"+i;\n          argsListWired += (i!==0?\", \":\"\")+\"arg\"+i+\"Wired\";\n      }\n  \n      var invokerFnBody =\n          \"return function \"+makeLegalFunctionName(humanName)+\"(\"+argsList+\") {\\n\" +\n          \"if (arguments.length !== \"+(argCount - 2)+\") {\\n\" +\n              \"throwBindingError('function \"+humanName+\" called with ' + arguments.length + ' arguments, expected \"+(argCount - 2)+\" args!');\\n\" +\n          \"}\\n\";\n  \n  \n      if (needsDestructorStack) {\n          invokerFnBody +=\n              \"var destructors = [];\\n\";\n      }\n  \n      var dtorStack = needsDestructorStack ? \"destructors\" : \"null\";\n      var args1 = [\"throwBindingError\", \"invoker\", \"fn\", \"runDestructors\", \"retType\", \"classParam\"];\n      var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]];\n  \n  \n      if (isClassMethodFunc) {\n          invokerFnBody += \"var thisWired = classParam.toWireType(\"+dtorStack+\", this);\\n\";\n      }\n  \n      for(var i = 0; i < argCount - 2; ++i) {\n          invokerFnBody += \"var arg\"+i+\"Wired = argType\"+i+\".toWireType(\"+dtorStack+\", arg\"+i+\"); // \"+argTypes[i+2].name+\"\\n\";\n          args1.push(\"argType\"+i);\n          args2.push(argTypes[i+2]);\n      }\n  \n      if (isClassMethodFunc) {\n          argsListWired = \"thisWired\" + (argsListWired.length > 0 ? \", \" : \"\") + argsListWired;\n      }\n  \n      invokerFnBody +=\n          (returns?\"var rv = \":\"\") + \"invoker(fn\"+(argsListWired.length>0?\", \":\"\")+argsListWired+\");\\n\";\n  \n      if (needsDestructorStack) {\n          invokerFnBody += \"runDestructors(destructors);\\n\";\n      } else {\n          for(var i = isClassMethodFunc?1:2; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method.\n              var paramName = (i === 1 ? \"thisWired\" : (\"arg\"+(i - 2)+\"Wired\"));\n              if (argTypes[i].destructorFunction !== null) {\n                  invokerFnBody += paramName+\"_dtor(\"+paramName+\"); // \"+argTypes[i].name+\"\\n\";\n                  args1.push(paramName+\"_dtor\");\n                  args2.push(argTypes[i].destructorFunction);\n              }\n          }\n      }\n  \n      if (returns) {\n          invokerFnBody += \"var ret = retType.fromWireType(rv);\\n\" +\n                           \"return ret;\\n\";\n      } else {\n      }\n      invokerFnBody += \"}\\n\";\n  \n      args1.push(invokerFnBody);\n  \n      var invokerFunction = new_(Function, args1).apply(null, args2);\n      return invokerFunction;\n    }function __embind_register_class_function(\n      rawClassType,\n      methodName,\n      argCount,\n      rawArgTypesAddr, // [ReturnType, ThisType, Args...]\n      invokerSignature,\n      rawInvoker,\n      context,\n      isPureVirtual\n    ) {\n      var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);\n      methodName = readLatin1String(methodName);\n      rawInvoker = embind__requireFunction(invokerSignature, rawInvoker);\n  \n      whenDependentTypesAreResolved([], [rawClassType], function(classType) {\n          classType = classType[0];\n          var humanName = classType.name + '.' + methodName;\n  \n          if (isPureVirtual) {\n              classType.registeredClass.pureVirtualFunctions.push(methodName);\n          }\n  \n          function unboundTypesHandler() {\n              throwUnboundTypeError('Cannot call ' + humanName + ' due to unbound types', rawArgTypes);\n          }\n  \n          var proto = classType.registeredClass.instancePrototype;\n          var method = proto[methodName];\n          if (undefined === method || (undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2)) {\n              // This is the first overload to be registered, OR we are replacing a function in the base class with a function in the derived class.\n              unboundTypesHandler.argCount = argCount - 2;\n              unboundTypesHandler.className = classType.name;\n              proto[methodName] = unboundTypesHandler;\n          } else {\n              // There was an existing function with the same name registered. Set up a function overload routing table.\n              ensureOverloadTable(proto, methodName, humanName);\n              proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler;\n          }\n  \n          whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) {\n  \n              var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context);\n  \n              // Replace the initial unbound-handler-stub function with the appropriate member function, now that all types\n              // are resolved. If multiple overloads are registered for this function, the function goes into an overload table.\n              if (undefined === proto[methodName].overloadTable) {\n                  // Set argCount in case an overload is registered later\n                  memberFunction.argCount = argCount - 2;\n                  proto[methodName] = memberFunction;\n              } else {\n                  proto[methodName].overloadTable[argCount - 2] = memberFunction;\n              }\n  \n              return [];\n          });\n          return [];\n      });\n    }\n\n  \n  \n  var emval_free_list=[];\n  \n  var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle) {\n      if (handle > 4 && 0 === --emval_handle_array[handle].refcount) {\n          emval_handle_array[handle] = undefined;\n          emval_free_list.push(handle);\n      }\n    }\n  \n  \n  \n  function count_emval_handles() {\n      var count = 0;\n      for (var i = 5; i < emval_handle_array.length; ++i) {\n          if (emval_handle_array[i] !== undefined) {\n              ++count;\n          }\n      }\n      return count;\n    }\n  \n  function get_first_emval() {\n      for (var i = 5; i < emval_handle_array.length; ++i) {\n          if (emval_handle_array[i] !== undefined) {\n              return emval_handle_array[i];\n          }\n      }\n      return null;\n    }function init_emval() {\n      Module['count_emval_handles'] = count_emval_handles;\n      Module['get_first_emval'] = get_first_emval;\n    }function __emval_register(value) {\n  \n      switch(value){\n        case undefined :{ return 1; }\n        case null :{ return 2; }\n        case true :{ return 3; }\n        case false :{ return 4; }\n        default:{\n          var handle = emval_free_list.length ?\n              emval_free_list.pop() :\n              emval_handle_array.length;\n  \n          emval_handle_array[handle] = {refcount: 1, value: value};\n          return handle;\n          }\n        }\n    }function __embind_register_emval(rawType, name) {\n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(handle) {\n              var rv = emval_handle_array[handle].value;\n              __emval_decref(handle);\n              return rv;\n          },\n          'toWireType': function(destructors, value) {\n              return __emval_register(value);\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': simpleReadValueFromPointer,\n          destructorFunction: null, // This type does not need a destructor\n  \n          // TODO: do we need a deleteObject here?  write a test where\n          // emval is passed into JS via an interface\n      });\n    }\n\n  \n  function _embind_repr(v) {\n      if (v === null) {\n          return 'null';\n      }\n      var t = typeof v;\n      if (t === 'object' || t === 'array' || t === 'function') {\n          return v.toString();\n      } else {\n          return '' + v;\n      }\n    }\n  \n  function floatReadValueFromPointer(name, shift) {\n      switch (shift) {\n          case 2: return function(pointer) {\n              return this['fromWireType'](HEAPF32[pointer >> 2]);\n          };\n          case 3: return function(pointer) {\n              return this['fromWireType'](HEAPF64[pointer >> 3]);\n          };\n          default:\n              throw new TypeError(\"Unknown float type: \" + name);\n      }\n    }function __embind_register_float(rawType, name, size) {\n      var shift = getShiftFromSize(size);\n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(value) {\n              return value;\n          },\n          'toWireType': function(destructors, value) {\n              // todo: Here we have an opportunity for -O3 level \"unsafe\" optimizations: we could\n              // avoid the following if() and assume value is of proper type.\n              if (typeof value !== \"number\" && typeof value !== \"boolean\") {\n                  throw new TypeError('Cannot convert \"' + _embind_repr(value) + '\" to ' + this.name);\n              }\n              return value;\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': floatReadValueFromPointer(name, shift),\n          destructorFunction: null, // This type does not need a destructor\n      });\n    }\n\n  \n  function integerReadValueFromPointer(name, shift, signed) {\n      // integers are quite common, so generate very specialized functions\n      switch (shift) {\n          case 0: return signed ?\n              function readS8FromPointer(pointer) { return HEAP8[pointer]; } :\n              function readU8FromPointer(pointer) { return HEAPU8[pointer]; };\n          case 1: return signed ?\n              function readS16FromPointer(pointer) { return HEAP16[pointer >> 1]; } :\n              function readU16FromPointer(pointer) { return HEAPU16[pointer >> 1]; };\n          case 2: return signed ?\n              function readS32FromPointer(pointer) { return HEAP32[pointer >> 2]; } :\n              function readU32FromPointer(pointer) { return HEAPU32[pointer >> 2]; };\n          default:\n              throw new TypeError(\"Unknown integer type: \" + name);\n      }\n    }function __embind_register_integer(primitiveType, name, size, minRange, maxRange) {\n      name = readLatin1String(name);\n      if (maxRange === -1) { // LLVM doesn't have signed and unsigned 32-bit types, so u32 literals come out as 'i32 -1'. Always treat those as max u32.\n          maxRange = 4294967295;\n      }\n  \n      var shift = getShiftFromSize(size);\n  \n      var fromWireType = function(value) {\n          return value;\n      };\n  \n      if (minRange === 0) {\n          var bitshift = 32 - 8*size;\n          fromWireType = function(value) {\n              return (value << bitshift) >>> bitshift;\n          };\n      }\n  \n      var isUnsignedType = (name.indexOf('unsigned') != -1);\n  \n      registerType(primitiveType, {\n          name: name,\n          'fromWireType': fromWireType,\n          'toWireType': function(destructors, value) {\n              // todo: Here we have an opportunity for -O3 level \"unsafe\" optimizations: we could\n              // avoid the following two if()s and assume value is of proper type.\n              if (typeof value !== \"number\" && typeof value !== \"boolean\") {\n                  throw new TypeError('Cannot convert \"' + _embind_repr(value) + '\" to ' + this.name);\n              }\n              if (value < minRange || value > maxRange) {\n                  throw new TypeError('Passing a number \"' + _embind_repr(value) + '\" from JS side to C/C++ side to an argument of type \"' + name + '\", which is outside the valid range [' + minRange + ', ' + maxRange + ']!');\n              }\n              return isUnsignedType ? (value >>> 0) : (value | 0);\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': integerReadValueFromPointer(name, shift, minRange !== 0),\n          destructorFunction: null, // This type does not need a destructor\n      });\n    }\n\n  function __embind_register_memory_view(rawType, dataTypeIndex, name) {\n      var typeMapping = [\n          Int8Array,\n          Uint8Array,\n          Int16Array,\n          Uint16Array,\n          Int32Array,\n          Uint32Array,\n          Float32Array,\n          Float64Array,\n      ];\n  \n      var TA = typeMapping[dataTypeIndex];\n  \n      function decodeMemoryView(handle) {\n          handle = handle >> 2;\n          var heap = HEAPU32;\n          var size = heap[handle]; // in elements\n          var data = heap[handle + 1]; // byte offset into emscripten heap\n          return new TA(heap['buffer'], data, size);\n      }\n  \n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': decodeMemoryView,\n          'argPackAdvance': 8,\n          'readValueFromPointer': decodeMemoryView,\n      }, {\n          ignoreDuplicateRegistrations: true,\n      });\n    }\n\n  function __embind_register_std_string(rawType, name) {\n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(value) {\n              var length = HEAPU32[value >> 2];\n              var a = new Array(length);\n              for (var i = 0; i < length; ++i) {\n                  a[i] = String.fromCharCode(HEAPU8[value + 4 + i]);\n              }\n              _free(value);\n              return a.join('');\n          },\n          'toWireType': function(destructors, value) {\n              if (value instanceof ArrayBuffer) {\n                  value = new Uint8Array(value);\n              }\n  \n              function getTAElement(ta, index) {\n                  return ta[index];\n              }\n              function getStringElement(string, index) {\n                  return string.charCodeAt(index);\n              }\n              var getElement;\n              if (value instanceof Uint8Array) {\n                  getElement = getTAElement;\n              } else if (value instanceof Uint8ClampedArray) {\n                  getElement = getTAElement;\n              } else if (value instanceof Int8Array) {\n                  getElement = getTAElement;\n              } else if (typeof value === 'string') {\n                  getElement = getStringElement;\n              } else {\n                  throwBindingError('Cannot pass non-string to std::string');\n              }\n  \n              // assumes 4-byte alignment\n              var length = value.length;\n              var ptr = _malloc(4 + length);\n              HEAPU32[ptr >> 2] = length;\n              for (var i = 0; i < length; ++i) {\n                  var charCode = getElement(value, i);\n                  if (charCode > 255) {\n                      _free(ptr);\n                      throwBindingError('String has UTF-16 code units that do not fit in 8 bits');\n                  }\n                  HEAPU8[ptr + 4 + i] = charCode;\n              }\n              if (destructors !== null) {\n                  destructors.push(_free, ptr);\n              }\n              return ptr;\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': simpleReadValueFromPointer,\n          destructorFunction: function(ptr) { _free(ptr); },\n      });\n    }\n\n  function __embind_register_std_wstring(rawType, charSize, name) {\n      // nb. do not cache HEAPU16 and HEAPU32, they may be destroyed by enlargeMemory().\n      name = readLatin1String(name);\n      var getHeap, shift;\n      if (charSize === 2) {\n          getHeap = function() { return HEAPU16; };\n          shift = 1;\n      } else if (charSize === 4) {\n          getHeap = function() { return HEAPU32; };\n          shift = 2;\n      }\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(value) {\n              var HEAP = getHeap();\n              var length = HEAPU32[value >> 2];\n              var a = new Array(length);\n              var start = (value + 4) >> shift;\n              for (var i = 0; i < length; ++i) {\n                  a[i] = String.fromCharCode(HEAP[start + i]);\n              }\n              _free(value);\n              return a.join('');\n          },\n          'toWireType': function(destructors, value) {\n              // assumes 4-byte alignment\n              var HEAP = getHeap();\n              var length = value.length;\n              var ptr = _malloc(4 + length * charSize);\n              HEAPU32[ptr >> 2] = length;\n              var start = (ptr + 4) >> shift;\n              for (var i = 0; i < length; ++i) {\n                  HEAP[start + i] = value.charCodeAt(i);\n              }\n              if (destructors !== null) {\n                  destructors.push(_free, ptr);\n              }\n              return ptr;\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': simpleReadValueFromPointer,\n          destructorFunction: function(ptr) { _free(ptr); },\n      });\n    }\n\n  function __embind_register_void(rawType, name) {\n      name = readLatin1String(name);\n      registerType(rawType, {\n          isVoid: true, // void return values can be optimized out sometimes\n          name: name,\n          'argPackAdvance': 0,\n          'fromWireType': function() {\n              return undefined;\n          },\n          'toWireType': function(destructors, o) {\n              // TODO: assert if anything else is given?\n              return undefined;\n          },\n      });\n    }\n\n  function _abort() {\n      Module['abort']();\n    }\n\n   \n\n   \n\n   \n\n\n\n   \n\n  function _llvm_trap() {\n      abort('trap!');\n    }\n\n  \n  function _emscripten_memcpy_big(dest, src, num) {\n      HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\n      return dest;\n    } \n\n   \n\n   \n\n  \n  var PTHREAD_SPECIFIC={};function _pthread_getspecific(key) {\n      return PTHREAD_SPECIFIC[key] || 0;\n    }\n\n  \n  var PTHREAD_SPECIFIC_NEXT_KEY=1;\n  \n  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};function _pthread_key_create(key, destructor) {\n      if (key == 0) {\n        return ERRNO_CODES.EINVAL;\n      }\n      HEAP32[((key)>>2)]=PTHREAD_SPECIFIC_NEXT_KEY;\n      // values start at 0\n      PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY] = 0;\n      PTHREAD_SPECIFIC_NEXT_KEY++;\n      return 0;\n    }\n\n   \n\n   \n\n  function _pthread_once(ptr, func) {\n      if (!_pthread_once.seen) _pthread_once.seen = {};\n      if (ptr in _pthread_once.seen) return;\n      Module['dynCall_v'](func);\n      _pthread_once.seen[ptr] = 1;\n    }\n\n  function _pthread_setspecific(key, value) {\n      if (!(key in PTHREAD_SPECIFIC)) {\n        return ERRNO_CODES.EINVAL;\n      }\n      PTHREAD_SPECIFIC[key] = value;\n      return 0;\n    }\n\n  \n  function ___setErrNo(value) {\n      if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\n      else Module.printErr('failed to set errno from JS');\n      return value;\n    } \nembind_init_charCodes();\nBindingError = Module['BindingError'] = extendError(Error, 'BindingError');;\nInternalError = Module['InternalError'] = extendError(Error, 'InternalError');;\ninit_ClassHandle();\ninit_RegisteredPointer();\ninit_embind();;\nUnboundTypeError = Module['UnboundTypeError'] = extendError(Error, 'UnboundTypeError');;\ninit_emval();;\nDYNAMICTOP_PTR = staticAlloc(4);\n\nSTACK_BASE = STACKTOP = alignMemory(STATICTOP);\n\nSTACK_MAX = STACK_BASE + TOTAL_STACK;\n\nDYNAMIC_BASE = alignMemory(STACK_MAX);\n\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\n\nstaticSealed = true; // seal the static portion of memory\n\nassert(DYNAMIC_BASE < TOTAL_MEMORY, \"TOTAL_MEMORY not big enough for stack\");\n\nvar ASSERTIONS = true;\n\n/** @type {function(string, boolean=, number=)} */\nfunction intArrayFromString(stringy, dontAddNull, length) {\n  var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\n  var u8array = new Array(len);\n  var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n  if (dontAddNull) u8array.length = numBytesWritten;\n  return u8array;\n}\n\nfunction intArrayToString(array) {\n  var ret = [];\n  for (var i = 0; i < array.length; i++) {\n    var chr = array[i];\n    if (chr > 0xFF) {\n      if (ASSERTIONS) {\n        assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ')  at offset ' + i + ' not in 0x00-0xFF.');\n      }\n      chr &= 0xFF;\n    }\n    ret.push(String.fromCharCode(chr));\n  }\n  return ret.join('');\n}\n\n\n// Copied from https://github.com/strophe/strophejs/blob/e06d027/src/polyfills.js#L149\n\n// This code was written by Tyler Akins and has been placed in the\n// public domain.  It would be nice if you left this header intact.\n// Base64 code from Tyler Akins -- http://rumkin.com\n\n/**\n * Decodes a base64 string.\n * @param {String} input The string to decode.\n */\nvar decodeBase64 = typeof atob === 'function' ? atob : function (input) {\n  var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n  var output = '';\n  var chr1, chr2, chr3;\n  var enc1, enc2, enc3, enc4;\n  var i = 0;\n  // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n  input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n  do {\n    enc1 = keyStr.indexOf(input.charAt(i++));\n    enc2 = keyStr.indexOf(input.charAt(i++));\n    enc3 = keyStr.indexOf(input.charAt(i++));\n    enc4 = keyStr.indexOf(input.charAt(i++));\n\n    chr1 = (enc1 << 2) | (enc2 >> 4);\n    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n    chr3 = ((enc3 & 3) << 6) | enc4;\n\n    output = output + String.fromCharCode(chr1);\n\n    if (enc3 !== 64) {\n      output = output + String.fromCharCode(chr2);\n    }\n    if (enc4 !== 64) {\n      output = output + String.fromCharCode(chr3);\n    }\n  } while (i < input.length);\n  return output;\n};\n\n// Converts a string of base64 into a byte array.\n// Throws error on invalid input.\nfunction intArrayFromBase64(s) {\n  if (typeof ENVIRONMENT_IS_NODE === 'boolean' && ENVIRONMENT_IS_NODE) {\n    var buf;\n    try {\n      buf = Buffer.from(s, 'base64');\n    } catch (_) {\n      buf = new Buffer(s, 'base64');\n    }\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n  }\n\n  try {\n    var decoded = decodeBase64(s);\n    var bytes = new Uint8Array(decoded.length);\n    for (var i = 0 ; i < decoded.length ; ++i) {\n      bytes[i] = decoded.charCodeAt(i);\n    }\n    return bytes;\n  } catch (_) {\n    throw new Error('Converting base64 string to bytes failed.');\n  }\n}\n\n// If filename is a base64 data URI, parses and returns data (Buffer on node,\n// Uint8Array otherwise). If filename is not a base64 data URI, returns undefined.\nfunction tryParseAsDataURI(filename) {\n  if (!isDataURI(filename)) {\n    return;\n  }\n\n  return intArrayFromBase64(filename.slice(dataURIPrefix.length));\n}\n\n\n\nfunction nullFunc_i(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'i'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_ii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'ii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_iii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'iii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_iiii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'iiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_v(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'v'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_vi(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'vi'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_vii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'vii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_viii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'viii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_viiii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'viiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_viiiii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'viiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_viiiiii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'viiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction invoke_i(index) {\n  try {\n    return Module[\"dynCall_i\"](index);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_ii(index,a1) {\n  try {\n    return Module[\"dynCall_ii\"](index,a1);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_iii(index,a1,a2) {\n  try {\n    return Module[\"dynCall_iii\"](index,a1,a2);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_iiii(index,a1,a2,a3) {\n  try {\n    return Module[\"dynCall_iiii\"](index,a1,a2,a3);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_v(index) {\n  try {\n    Module[\"dynCall_v\"](index);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_vi(index,a1) {\n  try {\n    Module[\"dynCall_vi\"](index,a1);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_vii(index,a1,a2) {\n  try {\n    Module[\"dynCall_vii\"](index,a1,a2);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_viii(index,a1,a2,a3) {\n  try {\n    Module[\"dynCall_viii\"](index,a1,a2,a3);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_viiii(index,a1,a2,a3,a4) {\n  try {\n    Module[\"dynCall_viiii\"](index,a1,a2,a3,a4);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\n  try {\n    Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {\n  try {\n    Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nModule.asmGlobalArg = { \"Math\": Math, \"Int8Array\": Int8Array, \"Int16Array\": Int16Array, \"Int32Array\": Int32Array, \"Uint8Array\": Uint8Array, \"Uint16Array\": Uint16Array, \"Uint32Array\": Uint32Array, \"Float32Array\": Float32Array, \"Float64Array\": Float64Array, \"NaN\": NaN, \"Infinity\": Infinity };\n\nModule.asmLibraryArg = { \"abort\": abort, \"assert\": assert, \"enlargeMemory\": enlargeMemory, \"getTotalMemory\": getTotalMemory, \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory, \"abortStackOverflow\": abortStackOverflow, \"nullFunc_i\": nullFunc_i, \"nullFunc_ii\": nullFunc_ii, \"nullFunc_iii\": nullFunc_iii, \"nullFunc_iiii\": nullFunc_iiii, \"nullFunc_v\": nullFunc_v, \"nullFunc_vi\": nullFunc_vi, \"nullFunc_vii\": nullFunc_vii, \"nullFunc_viii\": nullFunc_viii, \"nullFunc_viiii\": nullFunc_viiii, \"nullFunc_viiiii\": nullFunc_viiiii, \"nullFunc_viiiiii\": nullFunc_viiiiii, \"invoke_i\": invoke_i, \"invoke_ii\": invoke_ii, \"invoke_iii\": invoke_iii, \"invoke_iiii\": invoke_iiii, \"invoke_v\": invoke_v, \"invoke_vi\": invoke_vi, \"invoke_vii\": invoke_vii, \"invoke_viii\": invoke_viii, \"invoke_viiii\": invoke_viiii, \"invoke_viiiii\": invoke_viiiii, \"invoke_viiiiii\": invoke_viiiiii, \"ClassHandle\": ClassHandle, \"ClassHandle_clone\": ClassHandle_clone, \"ClassHandle_delete\": ClassHandle_delete, \"ClassHandle_deleteLater\": ClassHandle_deleteLater, \"ClassHandle_isAliasOf\": ClassHandle_isAliasOf, \"ClassHandle_isDeleted\": ClassHandle_isDeleted, \"RegisteredClass\": RegisteredClass, \"RegisteredPointer\": RegisteredPointer, \"RegisteredPointer_deleteObject\": RegisteredPointer_deleteObject, \"RegisteredPointer_destructor\": RegisteredPointer_destructor, \"RegisteredPointer_fromWireType\": RegisteredPointer_fromWireType, \"RegisteredPointer_getPointee\": RegisteredPointer_getPointee, \"__ZSt18uncaught_exceptionv\": __ZSt18uncaught_exceptionv, \"___assert_fail\": ___assert_fail, \"___cxa_allocate_exception\": ___cxa_allocate_exception, \"___cxa_begin_catch\": ___cxa_begin_catch, \"___cxa_find_matching_catch\": ___cxa_find_matching_catch, \"___cxa_pure_virtual\": ___cxa_pure_virtual, \"___cxa_throw\": ___cxa_throw, \"___gxx_personality_v0\": ___gxx_personality_v0, \"___lock\": ___lock, \"___resumeException\": ___resumeException, \"___setErrNo\": ___setErrNo, \"___syscall140\": ___syscall140, \"___syscall146\": ___syscall146, \"___syscall54\": ___syscall54, \"___syscall6\": ___syscall6, \"___unlock\": ___unlock, \"__embind_register_bool\": __embind_register_bool, \"__embind_register_class\": __embind_register_class, \"__embind_register_class_constructor\": __embind_register_class_constructor, \"__embind_register_class_function\": __embind_register_class_function, \"__embind_register_emval\": __embind_register_emval, \"__embind_register_float\": __embind_register_float, \"__embind_register_integer\": __embind_register_integer, \"__embind_register_memory_view\": __embind_register_memory_view, \"__embind_register_std_string\": __embind_register_std_string, \"__embind_register_std_wstring\": __embind_register_std_wstring, \"__embind_register_void\": __embind_register_void, \"__emval_decref\": __emval_decref, \"__emval_register\": __emval_register, \"_abort\": _abort, \"_embind_repr\": _embind_repr, \"_emscripten_memcpy_big\": _emscripten_memcpy_big, \"_llvm_trap\": _llvm_trap, \"_pthread_getspecific\": _pthread_getspecific, \"_pthread_key_create\": _pthread_key_create, \"_pthread_once\": _pthread_once, \"_pthread_setspecific\": _pthread_setspecific, \"constNoSmartPtrRawPointerToWireType\": constNoSmartPtrRawPointerToWireType, \"count_emval_handles\": count_emval_handles, \"craftInvokerFunction\": craftInvokerFunction, \"createNamedFunction\": createNamedFunction, \"downcastPointer\": downcastPointer, \"embind__requireFunction\": embind__requireFunction, \"embind_init_charCodes\": embind_init_charCodes, \"ensureOverloadTable\": ensureOverloadTable, \"exposePublicSymbol\": exposePublicSymbol, \"extendError\": extendError, \"floatReadValueFromPointer\": floatReadValueFromPointer, \"flushPendingDeletes\": flushPendingDeletes, \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM, \"genericPointerToWireType\": genericPointerToWireType, \"getBasestPointer\": getBasestPointer, \"getInheritedInstance\": getInheritedInstance, \"getInheritedInstanceCount\": getInheritedInstanceCount, \"getLiveInheritedInstances\": getLiveInheritedInstances, \"getShiftFromSize\": getShiftFromSize, \"getTypeName\": getTypeName, \"get_first_emval\": get_first_emval, \"heap32VectorToArray\": heap32VectorToArray, \"init_ClassHandle\": init_ClassHandle, \"init_RegisteredPointer\": init_RegisteredPointer, \"init_embind\": init_embind, \"init_emval\": init_emval, \"integerReadValueFromPointer\": integerReadValueFromPointer, \"makeClassHandle\": makeClassHandle, \"makeLegalFunctionName\": makeLegalFunctionName, \"new_\": new_, \"nonConstNoSmartPtrRawPointerToWireType\": nonConstNoSmartPtrRawPointerToWireType, \"readLatin1String\": readLatin1String, \"registerType\": registerType, \"replacePublicSymbol\": replacePublicSymbol, \"runDestructor\": runDestructor, \"runDestructors\": runDestructors, \"setDelayFunction\": setDelayFunction, \"shallowCopyInternalPointer\": shallowCopyInternalPointer, \"simpleReadValueFromPointer\": simpleReadValueFromPointer, \"throwBindingError\": throwBindingError, \"throwInstanceAlreadyDeleted\": throwInstanceAlreadyDeleted, \"throwInternalError\": throwInternalError, \"throwUnboundTypeError\": throwUnboundTypeError, \"upcastPointer\": upcastPointer, \"whenDependentTypesAreResolved\": whenDependentTypesAreResolved, \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR, \"tempDoublePtr\": tempDoublePtr, \"ABORT\": ABORT, \"STACKTOP\": STACKTOP, \"STACK_MAX\": STACK_MAX };\n// EMSCRIPTEN_START_ASM\nvar asm = (/** @suppress {uselessCode} */ function(global, env, buffer) {\n'almost asm';\n\n\n  var HEAP8 = new global.Int8Array(buffer);\n  var HEAP16 = new global.Int16Array(buffer);\n  var HEAP32 = new global.Int32Array(buffer);\n  var HEAPU8 = new global.Uint8Array(buffer);\n  var HEAPU16 = new global.Uint16Array(buffer);\n  var HEAPU32 = new global.Uint32Array(buffer);\n  var HEAPF32 = new global.Float32Array(buffer);\n  var HEAPF64 = new global.Float64Array(buffer);\n\n  var DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0;\n  var tempDoublePtr=env.tempDoublePtr|0;\n  var ABORT=env.ABORT|0;\n  var STACKTOP=env.STACKTOP|0;\n  var STACK_MAX=env.STACK_MAX|0;\n\n  var __THREW__ = 0;\n  var threwValue = 0;\n  var setjmpId = 0;\n  var undef = 0;\n  var nan = global.NaN, inf = global.Infinity;\n  var tempInt = 0, tempBigInt = 0, tempBigIntS = 0, tempValue = 0, tempDouble = 0.0;\n  var tempRet0 = 0;\n\n  var Math_floor=global.Math.floor;\n  var Math_abs=global.Math.abs;\n  var Math_sqrt=global.Math.sqrt;\n  var Math_pow=global.Math.pow;\n  var Math_cos=global.Math.cos;\n  var Math_sin=global.Math.sin;\n  var Math_tan=global.Math.tan;\n  var Math_acos=global.Math.acos;\n  var Math_asin=global.Math.asin;\n  var Math_atan=global.Math.atan;\n  var Math_atan2=global.Math.atan2;\n  var Math_exp=global.Math.exp;\n  var Math_log=global.Math.log;\n  var Math_ceil=global.Math.ceil;\n  var Math_imul=global.Math.imul;\n  var Math_min=global.Math.min;\n  var Math_max=global.Math.max;\n  var Math_clz32=global.Math.clz32;\n  var abort=env.abort;\n  var assert=env.assert;\n  var enlargeMemory=env.enlargeMemory;\n  var getTotalMemory=env.getTotalMemory;\n  var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory;\n  var abortStackOverflow=env.abortStackOverflow;\n  var nullFunc_i=env.nullFunc_i;\n  var nullFunc_ii=env.nullFunc_ii;\n  var nullFunc_iii=env.nullFunc_iii;\n  var nullFunc_iiii=env.nullFunc_iiii;\n  var nullFunc_v=env.nullFunc_v;\n  var nullFunc_vi=env.nullFunc_vi;\n  var nullFunc_vii=env.nullFunc_vii;\n  var nullFunc_viii=env.nullFunc_viii;\n  var nullFunc_viiii=env.nullFunc_viiii;\n  var nullFunc_viiiii=env.nullFunc_viiiii;\n  var nullFunc_viiiiii=env.nullFunc_viiiiii;\n  var invoke_i=env.invoke_i;\n  var invoke_ii=env.invoke_ii;\n  var invoke_iii=env.invoke_iii;\n  var invoke_iiii=env.invoke_iiii;\n  var invoke_v=env.invoke_v;\n  var invoke_vi=env.invoke_vi;\n  var invoke_vii=env.invoke_vii;\n  var invoke_viii=env.invoke_viii;\n  var invoke_viiii=env.invoke_viiii;\n  var invoke_viiiii=env.invoke_viiiii;\n  var invoke_viiiiii=env.invoke_viiiiii;\n  var ClassHandle=env.ClassHandle;\n  var ClassHandle_clone=env.ClassHandle_clone;\n  var ClassHandle_delete=env.ClassHandle_delete;\n  var ClassHandle_deleteLater=env.ClassHandle_deleteLater;\n  var ClassHandle_isAliasOf=env.ClassHandle_isAliasOf;\n  var ClassHandle_isDeleted=env.ClassHandle_isDeleted;\n  var RegisteredClass=env.RegisteredClass;\n  var RegisteredPointer=env.RegisteredPointer;\n  var RegisteredPointer_deleteObject=env.RegisteredPointer_deleteObject;\n  var RegisteredPointer_destructor=env.RegisteredPointer_destructor;\n  var RegisteredPointer_fromWireType=env.RegisteredPointer_fromWireType;\n  var RegisteredPointer_getPointee=env.RegisteredPointer_getPointee;\n  var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv;\n  var ___assert_fail=env.___assert_fail;\n  var ___cxa_allocate_exception=env.___cxa_allocate_exception;\n  var ___cxa_begin_catch=env.___cxa_begin_catch;\n  var ___cxa_find_matching_catch=env.___cxa_find_matching_catch;\n  var ___cxa_pure_virtual=env.___cxa_pure_virtual;\n  var ___cxa_throw=env.___cxa_throw;\n  var ___gxx_personality_v0=env.___gxx_personality_v0;\n  var ___lock=env.___lock;\n  var ___resumeException=env.___resumeException;\n  var ___setErrNo=env.___setErrNo;\n  var ___syscall140=env.___syscall140;\n  var ___syscall146=env.___syscall146;\n  var ___syscall54=env.___syscall54;\n  var ___syscall6=env.___syscall6;\n  var ___unlock=env.___unlock;\n  var __embind_register_bool=env.__embind_register_bool;\n  var __embind_register_class=env.__embind_register_class;\n  var __embind_register_class_constructor=env.__embind_register_class_constructor;\n  var __embind_register_class_function=env.__embind_register_class_function;\n  var __embind_register_emval=env.__embind_register_emval;\n  var __embind_register_float=env.__embind_register_float;\n  var __embind_register_integer=env.__embind_register_integer;\n  var __embind_register_memory_view=env.__embind_register_memory_view;\n  var __embind_register_std_string=env.__embind_register_std_string;\n  var __embind_register_std_wstring=env.__embind_register_std_wstring;\n  var __embind_register_void=env.__embind_register_void;\n  var __emval_decref=env.__emval_decref;\n  var __emval_register=env.__emval_register;\n  var _abort=env._abort;\n  var _embind_repr=env._embind_repr;\n  var _emscripten_memcpy_big=env._emscripten_memcpy_big;\n  var _llvm_trap=env._llvm_trap;\n  var _pthread_getspecific=env._pthread_getspecific;\n  var _pthread_key_create=env._pthread_key_create;\n  var _pthread_once=env._pthread_once;\n  var _pthread_setspecific=env._pthread_setspecific;\n  var constNoSmartPtrRawPointerToWireType=env.constNoSmartPtrRawPointerToWireType;\n  var count_emval_handles=env.count_emval_handles;\n  var craftInvokerFunction=env.craftInvokerFunction;\n  var createNamedFunction=env.createNamedFunction;\n  var downcastPointer=env.downcastPointer;\n  var embind__requireFunction=env.embind__requireFunction;\n  var embind_init_charCodes=env.embind_init_charCodes;\n  var ensureOverloadTable=env.ensureOverloadTable;\n  var exposePublicSymbol=env.exposePublicSymbol;\n  var extendError=env.extendError;\n  var floatReadValueFromPointer=env.floatReadValueFromPointer;\n  var flushPendingDeletes=env.flushPendingDeletes;\n  var flush_NO_FILESYSTEM=env.flush_NO_FILESYSTEM;\n  var genericPointerToWireType=env.genericPointerToWireType;\n  var getBasestPointer=env.getBasestPointer;\n  var getInheritedInstance=env.getInheritedInstance;\n  var getInheritedInstanceCount=env.getInheritedInstanceCount;\n  var getLiveInheritedInstances=env.getLiveInheritedInstances;\n  var getShiftFromSize=env.getShiftFromSize;\n  var getTypeName=env.getTypeName;\n  var get_first_emval=env.get_first_emval;\n  var heap32VectorToArray=env.heap32VectorToArray;\n  var init_ClassHandle=env.init_ClassHandle;\n  var init_RegisteredPointer=env.init_RegisteredPointer;\n  var init_embind=env.init_embind;\n  var init_emval=env.init_emval;\n  var integerReadValueFromPointer=env.integerReadValueFromPointer;\n  var makeClassHandle=env.makeClassHandle;\n  var makeLegalFunctionName=env.makeLegalFunctionName;\n  var new_=env.new_;\n  var nonConstNoSmartPtrRawPointerToWireType=env.nonConstNoSmartPtrRawPointerToWireType;\n  var readLatin1String=env.readLatin1String;\n  var registerType=env.registerType;\n  var replacePublicSymbol=env.replacePublicSymbol;\n  var runDestructor=env.runDestructor;\n  var runDestructors=env.runDestructors;\n  var setDelayFunction=env.setDelayFunction;\n  var shallowCopyInternalPointer=env.shallowCopyInternalPointer;\n  var simpleReadValueFromPointer=env.simpleReadValueFromPointer;\n  var throwBindingError=env.throwBindingError;\n  var throwInstanceAlreadyDeleted=env.throwInstanceAlreadyDeleted;\n  var throwInternalError=env.throwInternalError;\n  var throwUnboundTypeError=env.throwUnboundTypeError;\n  var upcastPointer=env.upcastPointer;\n  var whenDependentTypesAreResolved=env.whenDependentTypesAreResolved;\n  var tempFloat = 0.0;\n\n// EMSCRIPTEN_START_FUNCS\n\nfunction stackAlloc(size) {\n  size = size|0;\n  var ret = 0;\n  ret = STACKTOP;\n  STACKTOP = (STACKTOP + size)|0;\n  STACKTOP = (STACKTOP + 15)&-16;\n  if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(size|0);\n\n  return ret|0;\n}\nfunction stackSave() {\n  return STACKTOP|0;\n}\nfunction stackRestore(top) {\n  top = top|0;\n  STACKTOP = top;\n}\nfunction establishStackSpace(stackBase, stackMax) {\n  stackBase = stackBase|0;\n  stackMax = stackMax|0;\n  STACKTOP = stackBase;\n  STACK_MAX = stackMax;\n}\n\nfunction setThrew(threw, value) {\n  threw = threw|0;\n  value = value|0;\n  if ((__THREW__|0) == 0) {\n    __THREW__ = threw;\n    threwValue = value;\n  }\n}\n\nfunction setTempRet0(value) {\n  value = value|0;\n  tempRet0 = value;\n}\nfunction getTempRet0() {\n  return tempRet0|0;\n}\n\nfunction ___cxx_global_var_init() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN38EmscriptenBindingInitializer_my_moduleC2Ev(21880);\n return;\n}\nfunction __ZN38EmscriptenBindingInitializer_my_moduleC2Ev($0) {\n $0 = $0|0;\n var $$field = 0, $$field11 = 0, $$field14 = 0, $$field21 = 0, $$field24 = 0, $$field31 = 0, $$field34 = 0, $$field4 = 0, $$field41 = 0, $$field44 = 0, $$field51 = 0, $$field54 = 0, $$field61 = 0, $$field64 = 0, $$field71 = 0, $$field74 = 0, $$index1 = 0, $$index13 = 0, $$index17 = 0, $$index19 = 0;\n var $$index23 = 0, $$index27 = 0, $$index29 = 0, $$index3 = 0, $$index33 = 0, $$index37 = 0, $$index39 = 0, $$index43 = 0, $$index47 = 0, $$index49 = 0, $$index53 = 0, $$index57 = 0, $$index59 = 0, $$index63 = 0, $$index67 = 0, $$index69 = 0, $$index7 = 0, $$index73 = 0, $$index77 = 0, $$index9 = 0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;\n var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;\n var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 496|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(496|0);\n $4 = sp + 448|0;\n $6 = sp + 481|0;\n $7 = sp + 72|0;\n $11 = sp + 424|0;\n $13 = sp + 480|0;\n $14 = sp + 64|0;\n $18 = sp + 400|0;\n $20 = sp + 479|0;\n $21 = sp + 56|0;\n $25 = sp + 376|0;\n $27 = sp + 478|0;\n $28 = sp + 48|0;\n $32 = sp + 352|0;\n $34 = sp + 477|0;\n $35 = sp + 40|0;\n $36 = sp + 32|0;\n $40 = sp + 476|0;\n $56 = sp + 264|0;\n $58 = sp + 475|0;\n $59 = sp + 24|0;\n $63 = sp + 240|0;\n $65 = sp + 474|0;\n $66 = sp + 16|0;\n $70 = sp + 216|0;\n $72 = sp + 473|0;\n $73 = sp + 8|0;\n $74 = sp;\n $78 = sp + 472|0;\n $92 = sp + 471|0;\n $93 = sp + 470|0;\n $94 = sp + 136|0;\n $95 = sp + 128|0;\n $96 = sp + 120|0;\n $97 = sp + 469|0;\n $98 = sp + 468|0;\n $99 = sp + 112|0;\n $100 = sp + 104|0;\n $101 = sp + 96|0;\n $102 = sp + 88|0;\n $103 = sp + 80|0;\n $91 = $0;\n $85 = $92;\n $86 = 3768;\n __ZN10emscripten8internal11NoBaseClass6verifyI6LASZipEEvv();\n $87 = 234;\n $104 = (__ZN10emscripten8internal11NoBaseClass11getUpcasterI6LASZipEEPFvvEv()|0);\n $88 = $104;\n $105 = (__ZN10emscripten8internal11NoBaseClass13getDowncasterI6LASZipEEPFvvEv()|0);\n $89 = $105;\n $90 = 235;\n $106 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $107 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI6LASZipEEE3getEv()|0);\n $108 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK6LASZipEEE3getEv()|0);\n $109 = (__ZN10emscripten8internal11NoBaseClass3getEv()|0);\n $110 = $87;\n $84 = $110;\n $111 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0);\n $112 = $87;\n $113 = $88;\n $83 = $113;\n $114 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0);\n $115 = $88;\n $116 = $89;\n $82 = $116;\n $117 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0);\n $118 = $89;\n $119 = $86;\n $120 = $90;\n $81 = $120;\n $121 = (__ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv()|0);\n $122 = $90;\n __embind_register_class(($106|0),($107|0),($108|0),($109|0),($111|0),($112|0),($114|0),($115|0),($117|0),($118|0),($119|0),($121|0),($122|0));\n $80 = $92;\n $123 = $80;\n $76 = $123;\n $77 = 236;\n $124 = $76;\n $79 = 237;\n $125 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $126 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getCountEv($78)|0);\n $127 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getTypesEv($78)|0);\n $128 = $79;\n $75 = $128;\n $129 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0);\n $130 = $79;\n $131 = $77;\n __embind_register_class_constructor(($125|0),($126|0),($127|0),($129|0),($130|0),($131|0));\n HEAP32[$94>>2] = (238);\n $$index1 = ((($94)) + 4|0);\n HEAP32[$$index1>>2] = 0;\n ;HEAP8[$73>>0]=HEAP8[$93>>0]|0;\n ;HEAP8[$74>>0]=HEAP8[$94>>0]|0;HEAP8[$74+1>>0]=HEAP8[$94+1>>0]|0;HEAP8[$74+2>>0]=HEAP8[$94+2>>0]|0;HEAP8[$74+3>>0]=HEAP8[$94+3>>0]|0;HEAP8[$74+4>>0]=HEAP8[$94+4>>0]|0;HEAP8[$74+5>>0]=HEAP8[$94+5>>0]|0;HEAP8[$74+6>>0]=HEAP8[$94+6>>0]|0;HEAP8[$74+7>>0]=HEAP8[$94+7>>0]|0;\n $$field = HEAP32[$74>>2]|0;\n $$index3 = ((($74)) + 4|0);\n $$field4 = HEAP32[$$index3>>2]|0;\n $68 = $124;\n $69 = 3775;\n HEAP32[$70>>2] = $$field;\n $$index7 = ((($70)) + 4|0);\n HEAP32[$$index7>>2] = $$field4;\n $132 = $68;\n $71 = 239;\n $133 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $134 = $69;\n $135 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getCountEv($72)|0);\n $136 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getTypesEv($72)|0);\n $137 = $71;\n $67 = $137;\n $138 = (__ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv()|0);\n $139 = $71;\n $140 = (__ZN10emscripten8internal10getContextIM6LASZipFvjjEEEPT_RKS5_($70)|0);\n __embind_register_class_function(($133|0),($134|0),($135|0),($136|0),($138|0),($139|0),($140|0),0);\n HEAP32[$95>>2] = (240);\n $$index9 = ((($95)) + 4|0);\n HEAP32[$$index9>>2] = 0;\n ;HEAP8[$66>>0]=HEAP8[$95>>0]|0;HEAP8[$66+1>>0]=HEAP8[$95+1>>0]|0;HEAP8[$66+2>>0]=HEAP8[$95+2>>0]|0;HEAP8[$66+3>>0]=HEAP8[$95+3>>0]|0;HEAP8[$66+4>>0]=HEAP8[$95+4>>0]|0;HEAP8[$66+5>>0]=HEAP8[$95+5>>0]|0;HEAP8[$66+6>>0]=HEAP8[$95+6>>0]|0;HEAP8[$66+7>>0]=HEAP8[$95+7>>0]|0;\n $$field11 = HEAP32[$66>>2]|0;\n $$index13 = ((($66)) + 4|0);\n $$field14 = HEAP32[$$index13>>2]|0;\n $61 = $132;\n $62 = 3780;\n HEAP32[$63>>2] = $$field11;\n $$index17 = ((($63)) + 4|0);\n HEAP32[$$index17>>2] = $$field14;\n $141 = $61;\n $64 = 241;\n $142 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $143 = $62;\n $144 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getCountEv($65)|0);\n $145 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getTypesEv($65)|0);\n $146 = $64;\n $60 = $146;\n $147 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $148 = $64;\n $149 = (__ZN10emscripten8internal10getContextIM6LASZipFviEEEPT_RKS5_($63)|0);\n __embind_register_class_function(($142|0),($143|0),($144|0),($145|0),($147|0),($148|0),($149|0),0);\n HEAP32[$96>>2] = (242);\n $$index19 = ((($96)) + 4|0);\n HEAP32[$$index19>>2] = 0;\n ;HEAP8[$59>>0]=HEAP8[$96>>0]|0;HEAP8[$59+1>>0]=HEAP8[$96+1>>0]|0;HEAP8[$59+2>>0]=HEAP8[$96+2>>0]|0;HEAP8[$59+3>>0]=HEAP8[$96+3>>0]|0;HEAP8[$59+4>>0]=HEAP8[$96+4>>0]|0;HEAP8[$59+5>>0]=HEAP8[$96+5>>0]|0;HEAP8[$59+6>>0]=HEAP8[$96+6>>0]|0;HEAP8[$59+7>>0]=HEAP8[$96+7>>0]|0;\n $$field21 = HEAP32[$59>>2]|0;\n $$index23 = ((($59)) + 4|0);\n $$field24 = HEAP32[$$index23>>2]|0;\n $54 = $141;\n $55 = 3789;\n HEAP32[$56>>2] = $$field21;\n $$index27 = ((($56)) + 4|0);\n HEAP32[$$index27>>2] = $$field24;\n $57 = 243;\n $150 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $151 = $55;\n $152 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getCountEv($58)|0);\n $153 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getTypesEv($58)|0);\n $154 = $57;\n $53 = $154;\n $155 = (__ZN10emscripten8internal19getGenericSignatureIJiiiEEEPKcv()|0);\n $156 = $57;\n $157 = (__ZN10emscripten8internal10getContextIM6LASZipFjvEEEPT_RKS5_($56)|0);\n __embind_register_class_function(($150|0),($151|0),($152|0),($153|0),($155|0),($156|0),($157|0),0);\n $47 = $97;\n $48 = 3798;\n __ZN10emscripten8internal11NoBaseClass6verifyI13DynamicLASZipEEvv();\n $49 = 244;\n $158 = (__ZN10emscripten8internal11NoBaseClass11getUpcasterI13DynamicLASZipEEPFvvEv()|0);\n $50 = $158;\n $159 = (__ZN10emscripten8internal11NoBaseClass13getDowncasterI13DynamicLASZipEEPFvvEv()|0);\n $51 = $159;\n $52 = 245;\n $160 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $161 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI13DynamicLASZipEEE3getEv()|0);\n $162 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK13DynamicLASZipEEE3getEv()|0);\n $163 = (__ZN10emscripten8internal11NoBaseClass3getEv()|0);\n $164 = $49;\n $46 = $164;\n $165 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0);\n $166 = $49;\n $167 = $50;\n $45 = $167;\n $168 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0);\n $169 = $50;\n $170 = $51;\n $44 = $170;\n $171 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0);\n $172 = $51;\n $173 = $48;\n $174 = $52;\n $43 = $174;\n $175 = (__ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv()|0);\n $176 = $52;\n __embind_register_class(($160|0),($161|0),($162|0),($163|0),($165|0),($166|0),($168|0),($169|0),($171|0),($172|0),($173|0),($175|0),($176|0));\n $42 = $97;\n $177 = $42;\n $38 = $177;\n $39 = 246;\n $178 = $38;\n $41 = 247;\n $179 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $180 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getCountEv($40)|0);\n $181 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getTypesEv($40)|0);\n $182 = $41;\n $37 = $182;\n $183 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0);\n $184 = $41;\n $185 = $39;\n __embind_register_class_constructor(($179|0),($180|0),($181|0),($183|0),($184|0),($185|0));\n HEAP32[$99>>2] = (248);\n $$index29 = ((($99)) + 4|0);\n HEAP32[$$index29>>2] = 0;\n ;HEAP8[$35>>0]=HEAP8[$98>>0]|0;\n ;HEAP8[$36>>0]=HEAP8[$99>>0]|0;HEAP8[$36+1>>0]=HEAP8[$99+1>>0]|0;HEAP8[$36+2>>0]=HEAP8[$99+2>>0]|0;HEAP8[$36+3>>0]=HEAP8[$99+3>>0]|0;HEAP8[$36+4>>0]=HEAP8[$99+4>>0]|0;HEAP8[$36+5>>0]=HEAP8[$99+5>>0]|0;HEAP8[$36+6>>0]=HEAP8[$99+6>>0]|0;HEAP8[$36+7>>0]=HEAP8[$99+7>>0]|0;\n $$field31 = HEAP32[$36>>2]|0;\n $$index33 = ((($36)) + 4|0);\n $$field34 = HEAP32[$$index33>>2]|0;\n $30 = $178;\n $31 = 3775;\n HEAP32[$32>>2] = $$field31;\n $$index37 = ((($32)) + 4|0);\n HEAP32[$$index37>>2] = $$field34;\n $186 = $30;\n $33 = 249;\n $187 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $188 = $31;\n $189 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getCountEv($34)|0);\n $190 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getTypesEv($34)|0);\n $191 = $33;\n $29 = $191;\n $192 = (__ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv()|0);\n $193 = $33;\n $194 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjjEEEPT_RKS5_($32)|0);\n __embind_register_class_function(($187|0),($188|0),($189|0),($190|0),($192|0),($193|0),($194|0),0);\n HEAP32[$100>>2] = (250);\n $$index39 = ((($100)) + 4|0);\n HEAP32[$$index39>>2] = 0;\n ;HEAP8[$28>>0]=HEAP8[$100>>0]|0;HEAP8[$28+1>>0]=HEAP8[$100+1>>0]|0;HEAP8[$28+2>>0]=HEAP8[$100+2>>0]|0;HEAP8[$28+3>>0]=HEAP8[$100+3>>0]|0;HEAP8[$28+4>>0]=HEAP8[$100+4>>0]|0;HEAP8[$28+5>>0]=HEAP8[$100+5>>0]|0;HEAP8[$28+6>>0]=HEAP8[$100+6>>0]|0;HEAP8[$28+7>>0]=HEAP8[$100+7>>0]|0;\n $$field41 = HEAP32[$28>>2]|0;\n $$index43 = ((($28)) + 4|0);\n $$field44 = HEAP32[$$index43>>2]|0;\n $23 = $186;\n $24 = 3812;\n HEAP32[$25>>2] = $$field41;\n $$index47 = ((($25)) + 4|0);\n HEAP32[$$index47>>2] = $$field44;\n $195 = $23;\n $26 = 251;\n $196 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $197 = $24;\n $198 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($27)|0);\n $199 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($27)|0);\n $200 = $26;\n $22 = $200;\n $201 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $202 = $26;\n $203 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($25)|0);\n __embind_register_class_function(($196|0),($197|0),($198|0),($199|0),($201|0),($202|0),($203|0),0);\n HEAP32[$101>>2] = (252);\n $$index49 = ((($101)) + 4|0);\n HEAP32[$$index49>>2] = 0;\n ;HEAP8[$21>>0]=HEAP8[$101>>0]|0;HEAP8[$21+1>>0]=HEAP8[$101+1>>0]|0;HEAP8[$21+2>>0]=HEAP8[$101+2>>0]|0;HEAP8[$21+3>>0]=HEAP8[$101+3>>0]|0;HEAP8[$21+4>>0]=HEAP8[$101+4>>0]|0;HEAP8[$21+5>>0]=HEAP8[$101+5>>0]|0;HEAP8[$21+6>>0]=HEAP8[$101+6>>0]|0;HEAP8[$21+7>>0]=HEAP8[$101+7>>0]|0;\n $$field51 = HEAP32[$21>>2]|0;\n $$index53 = ((($21)) + 4|0);\n $$field54 = HEAP32[$$index53>>2]|0;\n $16 = $195;\n $17 = 3829;\n HEAP32[$18>>2] = $$field51;\n $$index57 = ((($18)) + 4|0);\n HEAP32[$$index57>>2] = $$field54;\n $204 = $16;\n $19 = 251;\n $205 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $206 = $17;\n $207 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($20)|0);\n $208 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($20)|0);\n $209 = $19;\n $15 = $209;\n $210 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $211 = $19;\n $212 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($18)|0);\n __embind_register_class_function(($205|0),($206|0),($207|0),($208|0),($210|0),($211|0),($212|0),0);\n HEAP32[$102>>2] = (253);\n $$index59 = ((($102)) + 4|0);\n HEAP32[$$index59>>2] = 0;\n ;HEAP8[$14>>0]=HEAP8[$102>>0]|0;HEAP8[$14+1>>0]=HEAP8[$102+1>>0]|0;HEAP8[$14+2>>0]=HEAP8[$102+2>>0]|0;HEAP8[$14+3>>0]=HEAP8[$102+3>>0]|0;HEAP8[$14+4>>0]=HEAP8[$102+4>>0]|0;HEAP8[$14+5>>0]=HEAP8[$102+5>>0]|0;HEAP8[$14+6>>0]=HEAP8[$102+6>>0]|0;HEAP8[$14+7>>0]=HEAP8[$102+7>>0]|0;\n $$field61 = HEAP32[$14>>2]|0;\n $$index63 = ((($14)) + 4|0);\n $$field64 = HEAP32[$$index63>>2]|0;\n $9 = $204;\n $10 = 3844;\n HEAP32[$11>>2] = $$field61;\n $$index67 = ((($11)) + 4|0);\n HEAP32[$$index67>>2] = $$field64;\n $213 = $9;\n $12 = 251;\n $214 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $215 = $10;\n $216 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($13)|0);\n $217 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($13)|0);\n $218 = $12;\n $8 = $218;\n $219 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $220 = $12;\n $221 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($11)|0);\n __embind_register_class_function(($214|0),($215|0),($216|0),($217|0),($219|0),($220|0),($221|0),0);\n HEAP32[$103>>2] = (254);\n $$index69 = ((($103)) + 4|0);\n HEAP32[$$index69>>2] = 0;\n ;HEAP8[$7>>0]=HEAP8[$103>>0]|0;HEAP8[$7+1>>0]=HEAP8[$103+1>>0]|0;HEAP8[$7+2>>0]=HEAP8[$103+2>>0]|0;HEAP8[$7+3>>0]=HEAP8[$103+3>>0]|0;HEAP8[$7+4>>0]=HEAP8[$103+4>>0]|0;HEAP8[$7+5>>0]=HEAP8[$103+5>>0]|0;HEAP8[$7+6>>0]=HEAP8[$103+6>>0]|0;HEAP8[$7+7>>0]=HEAP8[$103+7>>0]|0;\n $$field71 = HEAP32[$7>>2]|0;\n $$index73 = ((($7)) + 4|0);\n $$field74 = HEAP32[$$index73>>2]|0;\n $2 = $213;\n $3 = 3780;\n HEAP32[$4>>2] = $$field71;\n $$index77 = ((($4)) + 4|0);\n HEAP32[$$index77>>2] = $$field74;\n $5 = 255;\n $222 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $223 = $3;\n $224 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getCountEv($6)|0);\n $225 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getTypesEv($6)|0);\n $226 = $5;\n $1 = $226;\n $227 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $228 = $5;\n $229 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFviEEEPT_RKS5_($4)|0);\n __embind_register_class_function(($222|0),($223|0),($224|0),($225|0),($227|0),($228|0),($229|0),0);\n STACKTOP = sp;return;\n}\nfunction __ZN6LASZip4openEjj($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0;\n var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;\n var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;\n var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;\n var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;\n var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);\n $$byval_copy1 = sp + 180|0;\n $$byval_copy = sp + 176|0;\n $8 = sp + 152|0;\n $14 = sp + 128|0;\n $19 = sp + 104|0;\n $20 = sp + 100|0;\n $27 = sp + 72|0;\n $33 = sp + 48|0;\n $38 = sp + 24|0;\n $39 = sp + 16|0;\n $40 = $0;\n $41 = $1;\n $42 = $2;\n $44 = $40;\n $45 = $41;\n $46 = $45;\n $43 = $46;\n $47 = (__Znwj(20)|0);\n $48 = $43;\n $49 = $42;\n __ZN6laszip7streams13memory_streamC2EPKci($47,$48,$49);\n $36 = $44;\n $37 = $47;\n $50 = $36;\n $51 = $37;\n ;HEAP32[$39>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$39>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE($38,$51,$$byval_copy);\n $34 = $38;\n $35 = $50;\n $52 = $34;\n $53 = $35;\n $31 = $52;\n $32 = $53;\n $54 = $31;\n $30 = $54;\n $55 = $30;\n $56 = HEAP32[$55>>2]|0;\n HEAP32[$33>>2] = $56;\n $57 = $32;\n $28 = $57;\n $58 = $28;\n $59 = HEAP32[$58>>2]|0;\n $60 = $31;\n HEAP32[$60>>2] = $59;\n $29 = $33;\n $61 = $29;\n $62 = HEAP32[$61>>2]|0;\n $63 = $32;\n HEAP32[$63>>2] = $62;\n $64 = ((($52)) + 4|0);\n $65 = $35;\n $66 = ((($65)) + 4|0);\n $25 = $64;\n $26 = $66;\n $67 = $25;\n $24 = $67;\n $68 = $24;\n $69 = HEAP32[$68>>2]|0;\n HEAP32[$27>>2] = $69;\n $70 = $26;\n $22 = $70;\n $71 = $22;\n $72 = HEAP32[$71>>2]|0;\n $73 = $25;\n HEAP32[$73>>2] = $72;\n $23 = $27;\n $74 = $23;\n $75 = HEAP32[$74>>2]|0;\n $76 = $26;\n HEAP32[$76>>2] = $75;\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($38);\n $77 = ((($44)) + 8|0);\n $78 = (__Znwj(352)|0);\n $21 = $44;\n $79 = $21;\n $80 = HEAP32[$79>>2]|0;\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEEC2ERS4_($78,$80);\n $17 = $77;\n $18 = $78;\n $81 = $17;\n $82 = $18;\n ;HEAP32[$20>>2]=0|0;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$20>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEEC2IS7_EEPT_NS_9enable_ifIXsr14is_convertibleISB_PS7_EE5valueENS8_5__natEE4typeE($19,$82,$$byval_copy1);\n $15 = $19;\n $16 = $81;\n $83 = $15;\n $84 = $16;\n $12 = $83;\n $13 = $84;\n $85 = $12;\n $11 = $85;\n $86 = $11;\n $87 = HEAP32[$86>>2]|0;\n HEAP32[$14>>2] = $87;\n $88 = $13;\n $9 = $88;\n $89 = $9;\n $90 = HEAP32[$89>>2]|0;\n $91 = $12;\n HEAP32[$91>>2] = $90;\n $10 = $14;\n $92 = $10;\n $93 = HEAP32[$92>>2]|0;\n $94 = $13;\n HEAP32[$94>>2] = $93;\n $95 = ((($83)) + 4|0);\n $96 = $16;\n $97 = ((($96)) + 4|0);\n $6 = $95;\n $7 = $97;\n $98 = $6;\n $5 = $98;\n $99 = $5;\n $100 = HEAP32[$99>>2]|0;\n HEAP32[$8>>2] = $100;\n $101 = $7;\n $3 = $101;\n $102 = $3;\n $103 = HEAP32[$102>>2]|0;\n $104 = $6;\n HEAP32[$104>>2] = $103;\n $4 = $8;\n $105 = $4;\n $106 = HEAP32[$105>>2]|0;\n $107 = $7;\n HEAP32[$107>>2] = $106;\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($19);\n STACKTOP = sp;return;\n}\nfunction __ZN6LASZip8getPointEi($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $6 = $3;\n $7 = $4;\n $8 = $7;\n $5 = $8;\n $9 = ((($6)) + 8|0);\n $2 = $9;\n $10 = $2;\n $11 = HEAP32[$10>>2]|0;\n $12 = $5;\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE9readPointEPc($11,$12);\n STACKTOP = sp;return;\n}\nfunction __ZN6LASZip8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $2;\n $4 = ((($3)) + 8|0);\n $1 = $4;\n $5 = $1;\n $6 = HEAP32[$5>>2]|0;\n $7 = (__ZNK6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10get_headerEv($6)|0);\n $8 = ((($7)) + 107|0);\n $9 = HEAPU8[$8>>0]|(HEAPU8[$8+1>>0]<<8)|(HEAPU8[$8+2>>0]<<16)|(HEAPU8[$8+3>>0]<<24);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN13DynamicLASZip4openEjj($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);\n $$byval_copy1 = sp + 280|0;\n $$byval_copy = sp + 276|0;\n $8 = sp + 252|0;\n $14 = sp + 228|0;\n $22 = sp + 192|0;\n $29 = sp + 160|0;\n $35 = sp + 136|0;\n $40 = sp + 112|0;\n $41 = sp + 108|0;\n $48 = sp + 80|0;\n $54 = sp + 56|0;\n $59 = sp + 32|0;\n $60 = sp + 24|0;\n $65 = sp;\n $61 = $0;\n $62 = $1;\n $63 = $2;\n $66 = $61;\n $67 = $62;\n $68 = $67;\n $64 = $68;\n $69 = (__Znwj(12)|0);\n $70 = $64;\n $71 = $63;\n __ZN10buf_streamC2EPhj($69,$70,$71);\n $57 = $66;\n $58 = $69;\n $72 = $57;\n $73 = $58;\n ;HEAP32[$60>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$60>>2]|0;\n __ZNSt3__210shared_ptrI10buf_streamEC2IS1_EEPT_NS_9enable_ifIXsr14is_convertibleIS5_PS1_EE5valueENS2_5__natEE4typeE($59,$73,$$byval_copy);\n $55 = $59;\n $56 = $72;\n $74 = $55;\n $75 = $56;\n $52 = $74;\n $53 = $75;\n $76 = $52;\n $51 = $76;\n $77 = $51;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$54>>2] = $78;\n $79 = $53;\n $49 = $79;\n $80 = $49;\n $81 = HEAP32[$80>>2]|0;\n $82 = $52;\n HEAP32[$82>>2] = $81;\n $50 = $54;\n $83 = $50;\n $84 = HEAP32[$83>>2]|0;\n $85 = $53;\n HEAP32[$85>>2] = $84;\n $86 = ((($74)) + 4|0);\n $87 = $56;\n $88 = ((($87)) + 4|0);\n $46 = $86;\n $47 = $88;\n $89 = $46;\n $45 = $89;\n $90 = $45;\n $91 = HEAP32[$90>>2]|0;\n HEAP32[$48>>2] = $91;\n $92 = $47;\n $43 = $92;\n $93 = $43;\n $94 = HEAP32[$93>>2]|0;\n $95 = $46;\n HEAP32[$95>>2] = $94;\n $44 = $48;\n $96 = $44;\n $97 = HEAP32[$96>>2]|0;\n $98 = $47;\n HEAP32[$98>>2] = $97;\n __ZNSt3__210shared_ptrI10buf_streamED2Ev($59);\n $99 = ((($66)) + 8|0);\n $100 = (__Znwj(12)|0);\n $42 = $66;\n $101 = $42;\n $102 = HEAP32[$101>>2]|0;\n __ZN6laszip8decoders10arithmeticI10buf_streamEC2ERS2_($100,$102);\n $38 = $99;\n $39 = $100;\n $103 = $38;\n $104 = $39;\n ;HEAP32[$41>>2]=0|0;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$41>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEEC2IS5_EEPT_NS_9enable_ifIXsr14is_convertibleIS9_PS5_EE5valueENS6_5__natEE4typeE($40,$104,$$byval_copy1);\n $36 = $40;\n $37 = $103;\n $105 = $36;\n $106 = $37;\n $33 = $105;\n $34 = $106;\n $107 = $33;\n $32 = $107;\n $108 = $32;\n $109 = HEAP32[$108>>2]|0;\n HEAP32[$35>>2] = $109;\n $110 = $34;\n $30 = $110;\n $111 = $30;\n $112 = HEAP32[$111>>2]|0;\n $113 = $33;\n HEAP32[$113>>2] = $112;\n $31 = $35;\n $114 = $31;\n $115 = HEAP32[$114>>2]|0;\n $116 = $34;\n HEAP32[$116>>2] = $115;\n $117 = ((($105)) + 4|0);\n $118 = $37;\n $119 = ((($118)) + 4|0);\n $27 = $117;\n $28 = $119;\n $120 = $27;\n $26 = $120;\n $121 = $26;\n $122 = HEAP32[$121>>2]|0;\n HEAP32[$29>>2] = $122;\n $123 = $28;\n $24 = $123;\n $124 = $24;\n $125 = HEAP32[$124>>2]|0;\n $126 = $27;\n HEAP32[$126>>2] = $125;\n $25 = $29;\n $127 = $25;\n $128 = HEAP32[$127>>2]|0;\n $129 = $28;\n HEAP32[$129>>2] = $128;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($40);\n $130 = ((($66)) + 8|0);\n $23 = $130;\n $131 = $23;\n $132 = HEAP32[$131>>2]|0;\n __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticI10buf_streamEEEENS0_26dynamic_field_decompressorIT_E3ptrERS7_($65,$132);\n $133 = ((($66)) + 16|0);\n $20 = $133;\n $21 = $65;\n $134 = $20;\n $135 = $21;\n $19 = $135;\n $136 = $19;\n $17 = $22;\n $18 = $136;\n $137 = $17;\n $138 = $18;\n $139 = HEAP32[$138>>2]|0;\n HEAP32[$137>>2] = $139;\n $140 = ((($137)) + 4|0);\n $141 = $18;\n $142 = ((($141)) + 4|0);\n $143 = HEAP32[$142>>2]|0;\n HEAP32[$140>>2] = $143;\n $144 = $18;\n HEAP32[$144>>2] = 0;\n $145 = $18;\n $146 = ((($145)) + 4|0);\n HEAP32[$146>>2] = 0;\n $15 = $22;\n $16 = $134;\n $147 = $15;\n $148 = $16;\n $12 = $147;\n $13 = $148;\n $149 = $12;\n $11 = $149;\n $150 = $11;\n $151 = HEAP32[$150>>2]|0;\n HEAP32[$14>>2] = $151;\n $152 = $13;\n $9 = $152;\n $153 = $9;\n $154 = HEAP32[$153>>2]|0;\n $155 = $12;\n HEAP32[$155>>2] = $154;\n $10 = $14;\n $156 = $10;\n $157 = HEAP32[$156>>2]|0;\n $158 = $13;\n HEAP32[$158>>2] = $157;\n $159 = ((($147)) + 4|0);\n $160 = $16;\n $161 = ((($160)) + 4|0);\n $6 = $159;\n $7 = $161;\n $162 = $6;\n $5 = $162;\n $163 = $5;\n $164 = HEAP32[$163>>2]|0;\n HEAP32[$8>>2] = $164;\n $165 = $7;\n $3 = $165;\n $166 = $3;\n $167 = HEAP32[$166>>2]|0;\n $168 = $6;\n HEAP32[$168>>2] = $167;\n $4 = $8;\n $169 = $4;\n $170 = HEAP32[$169>>2]|0;\n $171 = $7;\n HEAP32[$171>>2] = $170;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($22);\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($65);\n STACKTOP = sp;return;\n}\nfunction __ZN13DynamicLASZip16addFieldFloatingEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $7 = $0;\n $8 = $1;\n $9 = $7;\n $10 = ((($9)) + 16|0);\n $6 = $10;\n $11 = $6;\n $5 = $11;\n $12 = $5;\n $13 = HEAP32[$12>>2]|0;\n $14 = ($13|0)!=(0|0);\n if (!($14)) {\n  STACKTOP = sp;return;\n }\n $15 = $8;\n switch ($15|0) {\n case 4:  {\n  $16 = ((($9)) + 16|0);\n  $4 = $16;\n  $17 = $4;\n  $18 = HEAP32[$17>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($18);\n  STACKTOP = sp;return;\n  break;\n }\n case 8:  {\n  $19 = ((($9)) + 16|0);\n  $2 = $19;\n  $20 = $2;\n  $21 = HEAP32[$20>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($21);\n  $22 = ((($9)) + 16|0);\n  $3 = $22;\n  $23 = $3;\n  $24 = HEAP32[$23>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($24);\n  STACKTOP = sp;return;\n  break;\n }\n default: {\n  STACKTOP = sp;return;\n }\n }\n}\nfunction __ZN13DynamicLASZip14addFieldSignedEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $8 = $0;\n $9 = $1;\n $10 = $8;\n $11 = ((($10)) + 16|0);\n $7 = $11;\n $12 = $7;\n $6 = $12;\n $13 = $6;\n $14 = HEAP32[$13>>2]|0;\n $15 = ($14|0)!=(0|0);\n if (!($15)) {\n  STACKTOP = sp;return;\n }\n $16 = $9;\n switch ($16|0) {\n case 1:  {\n  $17 = ((($10)) + 16|0);\n  $5 = $17;\n  $18 = $5;\n  $19 = HEAP32[$18>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIaEEvv($19);\n  STACKTOP = sp;return;\n  break;\n }\n case 2:  {\n  $20 = ((($10)) + 16|0);\n  $3 = $20;\n  $21 = $3;\n  $22 = HEAP32[$21>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIsEEvv($22);\n  STACKTOP = sp;return;\n  break;\n }\n case 8:  {\n  $23 = ((($10)) + 16|0);\n  $2 = $23;\n  $24 = $2;\n  $25 = HEAP32[$24>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($25);\n  break;\n }\n case 4:  {\n  break;\n }\n default: {\n  STACKTOP = sp;return;\n }\n }\n $26 = ((($10)) + 16|0);\n $4 = $26;\n $27 = $4;\n $28 = HEAP32[$27>>2]|0;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($28);\n STACKTOP = sp;return;\n}\nfunction __ZN13DynamicLASZip16addFieldUnsignedEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $8 = $0;\n $9 = $1;\n $10 = $8;\n $11 = ((($10)) + 16|0);\n $7 = $11;\n $12 = $7;\n $6 = $12;\n $13 = $6;\n $14 = HEAP32[$13>>2]|0;\n $15 = ($14|0)!=(0|0);\n if (!($15)) {\n  STACKTOP = sp;return;\n }\n $16 = $9;\n switch ($16|0) {\n case 1:  {\n  $17 = ((($10)) + 16|0);\n  $5 = $17;\n  $18 = $5;\n  $19 = HEAP32[$18>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIhEEvv($19);\n  STACKTOP = sp;return;\n  break;\n }\n case 2:  {\n  $20 = ((($10)) + 16|0);\n  $3 = $20;\n  $21 = $3;\n  $22 = HEAP32[$21>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldItEEvv($22);\n  STACKTOP = sp;return;\n  break;\n }\n case 8:  {\n  $23 = ((($10)) + 16|0);\n  $2 = $23;\n  $24 = $2;\n  $25 = HEAP32[$24>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($25);\n  break;\n }\n case 4:  {\n  break;\n }\n default: {\n  STACKTOP = sp;return;\n }\n }\n $26 = ((($10)) + 16|0);\n $4 = $26;\n $27 = $4;\n $28 = HEAP32[$27>>2]|0;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($28);\n STACKTOP = sp;return;\n}\nfunction __ZN13DynamicLASZip8getPointEi($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $8 = $5;\n $9 = $6;\n $10 = $9;\n $7 = $10;\n $11 = ((($8)) + 16|0);\n $4 = $11;\n $12 = $4;\n $3 = $12;\n $13 = $3;\n $14 = HEAP32[$13>>2]|0;\n $15 = ($14|0)!=(0|0);\n if (!($15)) {\n  STACKTOP = sp;return;\n }\n $16 = ((($8)) + 16|0);\n $2 = $16;\n $17 = $2;\n $18 = HEAP32[$17>>2]|0;\n $19 = HEAP32[$18>>2]|0;\n $20 = HEAP32[$19>>2]|0;\n $21 = $7;\n (FUNCTION_TABLE_iii[$20 & 255]($18,$21)|0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7streams13memory_streamC2EPKci($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n HEAP32[$6>>2] = $7;\n $8 = ((($6)) + 4|0);\n $9 = $5;\n HEAP32[$8>>2] = $9;\n $10 = ((($6)) + 8|0);\n HEAP32[$10>>2] = 0;\n $11 = ((($6)) + 12|0);\n HEAP8[$11>>0] = 0;\n $12 = ((($6)) + 13|0);\n HEAP8[$12>>0] = 0;\n $13 = ((($6)) + 16|0);\n HEAP32[$13>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEEC2ERS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 12|0;\n $16 = $0;\n $17 = $1;\n $18 = $16;\n $19 = $17;\n HEAP32[$18>>2] = $19;\n $20 = ((($18)) + 4|0);\n $21 = HEAP32[$18>>2]|0;\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($20,$21);\n $22 = ((($18)) + 247|0);\n __ZN6laszip2io7laz_vlrC2Ev($22);\n $23 = ((($18)) + 288|0);\n $15 = $23;\n $24 = $15;\n $13 = $24;\n $25 = $13;\n $12 = $25;\n HEAP32[$25>>2] = 0;\n $26 = ((($25)) + 4|0);\n HEAP32[$26>>2] = 0;\n $27 = ((($25)) + 8|0);\n HEAP32[$14>>2] = 0;\n $10 = $27;\n $11 = $14;\n $28 = $10;\n $29 = $11;\n $9 = $29;\n $30 = $9;\n $5 = $28;\n $6 = $30;\n $31 = $5;\n $32 = $6;\n $4 = $32;\n HEAP32[$31>>2] = 0;\n $8 = $28;\n $33 = $8;\n $7 = $33;\n $34 = ((($18)) + 300|0);\n __ZN6laszip7factory13record_schemaC2Ev($34);\n $35 = ((($18)) + 312|0);\n $3 = $35;\n $36 = $3;\n HEAP32[$36>>2] = 0;\n $37 = ((($36)) + 4|0);\n HEAP32[$37>>2] = 0;\n $38 = ((($18)) + 320|0);\n $2 = $38;\n $39 = $2;\n HEAP32[$39>>2] = 0;\n $40 = ((($39)) + 4|0);\n HEAP32[$40>>2] = 0;\n $41 = ((($18)) + 328|0);\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE13__chunk_stateC2Ev($41);\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE5_openEv($18);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (1584);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction ___clang_call_terminate($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n (___cxa_begin_catch(($0|0))|0);\n __ZSt9terminatev();\n // unreachable;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 24;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEEC2IS7_EEPT_NS_9enable_ifIXsr14is_convertibleISB_PS7_EE5valueENS8_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $50 = sp + 76|0;\n $51 = sp + 72|0;\n $52 = sp + 8|0;\n $53 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$52>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$53>>0]=HEAP8[$66>>0]|0;\n $49 = $79;\n HEAP32[$50>>2] = $80;\n $81 = $49;\n $47 = $81;\n $48 = 0;\n $82 = $47;\n $83 = $48;\n $45 = $82;\n $46 = $83;\n $84 = $45;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $46;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $48;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (1612);\n $89 = ((($81)) + 12|0);\n $21 = $53;\n $90 = $21;\n $30 = $51;\n $31 = $50;\n $32 = $90;\n $91 = $30;\n $92 = $31;\n $29 = $92;\n $93 = $29;\n $23 = $91;\n $24 = $93;\n $94 = $23;\n $95 = $24;\n $22 = $95;\n $96 = $22;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $32;\n $25 = $98;\n $99 = $25;\n $27 = $91;\n $28 = $99;\n $100 = $28;\n $26 = $100;\n $33 = $52;\n $101 = $33;\n $42 = $89;\n $43 = $51;\n $44 = $101;\n $102 = $42;\n $103 = $43;\n $41 = $103;\n $104 = $41;\n $35 = $102;\n $36 = $104;\n $105 = $35;\n $106 = $36;\n $34 = $106;\n $107 = $34;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $44;\n $37 = $108;\n $109 = $37;\n $39 = $102;\n $40 = $109;\n $110 = $40;\n $38 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $20 = $65;\n $120 = $20;\n $17 = $120;\n $18 = 0;\n $121 = $17;\n $16 = $121;\n $122 = $16;\n $15 = $122;\n $123 = $15;\n $124 = HEAP32[$123>>2]|0;\n $19 = $124;\n $125 = $18;\n $12 = $121;\n $126 = $12;\n $11 = $126;\n $127 = $11;\n HEAP32[$127>>2] = $125;\n $128 = $19;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $10 = $121;\n $130 = $10;\n $9 = $130;\n $131 = $9;\n $132 = $19;\n $13 = $131;\n $14 = $132;\n $133 = $14;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($133);\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $4 = $22;\n $23 = $4;\n $3 = $23;\n $24 = $3;\n $2 = $24;\n $25 = $2;\n $1 = $25;\n $26 = $1;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($28);\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 48;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 320|0);\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($3);\n $4 = ((($2)) + 312|0);\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($4);\n $5 = ((($2)) + 300|0);\n __ZN6laszip7factory13record_schemaD2Ev($5);\n $6 = ((($2)) + 288|0);\n __ZNSt3__26vectorIyNS_9allocatorIyEEED2Ev($6);\n $7 = ((($2)) + 247|0);\n __ZN6laszip2io7laz_vlrD2Ev($7);\n $8 = ((($2)) + 4|0);\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($8);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory13record_schemaD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseIyNS_9allocatorIyEEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io7laz_vlrD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 34|0);\n $4 = HEAPU8[$3>>0]|(HEAPU8[$3+1>>0]<<8)|(HEAPU8[$3+2>>0]<<16)|(HEAPU8[$3+3>>0]<<24);\n $5 = ($4|0)==(0|0);\n if ($5) {\n  STACKTOP = sp;return;\n }\n __ZdaPv($4);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 12|0);\n $4 = HEAP32[$3>>2]|0;\n __ZN6laszip5utilsL12aligned_freeEPv($4);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -12|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n }\n $54 = $28;\n $55 = ((($37)) + 4|0);\n HEAP32[$55>>2] = $54;\n $7 = $32;\n $56 = $7;\n $57 = ((($56)) + 8|0);\n $6 = $57;\n $58 = $6;\n $5 = $58;\n $59 = $5;\n $60 = HEAP32[$32>>2]|0;\n $4 = $32;\n $61 = $4;\n $3 = $61;\n $62 = $3;\n $63 = ((($62)) + 8|0);\n $2 = $63;\n $64 = $2;\n $1 = $64;\n $65 = $1;\n $66 = HEAP32[$65>>2]|0;\n $67 = HEAP32[$61>>2]|0;\n $68 = $66;\n $69 = $67;\n $70 = (($68) - ($69))|0;\n $71 = (($70|0) / 12)&-1;\n $12 = $59;\n $13 = $60;\n $14 = $71;\n $72 = $12;\n $73 = $13;\n $74 = $14;\n $9 = $72;\n $10 = $73;\n $11 = $74;\n $75 = $10;\n $8 = $75;\n $76 = $8;\n __ZdlPv($76);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseIyNS_9allocatorIyEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -8|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n }\n $54 = $28;\n $55 = ((($37)) + 4|0);\n HEAP32[$55>>2] = $54;\n $7 = $32;\n $56 = $7;\n $57 = ((($56)) + 8|0);\n $6 = $57;\n $58 = $6;\n $5 = $58;\n $59 = $5;\n $60 = HEAP32[$32>>2]|0;\n $4 = $32;\n $61 = $4;\n $3 = $61;\n $62 = $3;\n $63 = ((($62)) + 8|0);\n $2 = $63;\n $64 = $2;\n $1 = $64;\n $65 = $1;\n $66 = HEAP32[$65>>2]|0;\n $67 = HEAP32[$61>>2]|0;\n $68 = $66;\n $69 = $67;\n $70 = (($68) - ($69))|0;\n $71 = (($70|0) / 8)&-1;\n $12 = $59;\n $13 = $60;\n $14 = $71;\n $72 = $12;\n $73 = $13;\n $74 = $14;\n $9 = $72;\n $10 = $73;\n $11 = $74;\n $75 = $10;\n $8 = $75;\n $76 = $8;\n __ZdlPv($76);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip5utilsL12aligned_freeEPv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + -4|0);\n $4 = HEAP32[$3>>2]|0;\n _free($4);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP32[$4>>2] = $5;\n $6 = ((($4)) + 4|0);\n HEAP32[$6>>2] = 0;\n $7 = ((($4)) + 8|0);\n HEAP32[$7>>2] = 0;\n $8 = ((($4)) + 12|0);\n $9 = (__ZN6laszip5utilsL14aligned_mallocEi(1048576)|0);\n HEAP32[$8>>2] = $9;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io7laz_vlrC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 32|0);\n HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=0>>8;\n $4 = ((($2)) + 34|0);\n HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=(0>>8)&255;HEAP8[$4+2>>0]=(0>>16)&255;HEAP8[$4+3>>0]=0>>24;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory13record_schemaC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $11 = sp + 8|0;\n $13 = $0;\n $14 = $13;\n $12 = $14;\n $15 = $12;\n $10 = $15;\n $16 = $10;\n $9 = $16;\n HEAP32[$16>>2] = 0;\n $17 = ((($16)) + 4|0);\n HEAP32[$17>>2] = 0;\n $18 = ((($16)) + 8|0);\n HEAP32[$11>>2] = 0;\n $7 = $18;\n $8 = $11;\n $19 = $7;\n $20 = $8;\n $6 = $20;\n $21 = $6;\n $2 = $19;\n $3 = $21;\n $22 = $2;\n $23 = $3;\n $1 = $23;\n HEAP32[$22>>2] = 0;\n $5 = $19;\n $24 = $5;\n $4 = $24;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE13__chunk_stateC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = $2;\n $4 = $3;\n HEAP32[$4>>2] = 0;\n $5 = (($3) + 4)|0;\n $6 = $5;\n HEAP32[$6>>2] = 0;\n $7 = ((($2)) + 8|0);\n $8 = $7;\n $9 = $8;\n HEAP32[$9>>2] = 0;\n $10 = (($8) + 4)|0;\n $11 = $10;\n HEAP32[$11>>2] = 0;\n $12 = ((($2)) + 16|0);\n $13 = $12;\n $14 = $13;\n HEAP32[$14>>2] = -1;\n $15 = (($13) + 4)|0;\n $16 = $15;\n HEAP32[$16>>2] = -1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE5_openEv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $$expand_i1_val = 0, $$expand_i1_val3 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0;\n var $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0;\n var $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0;\n var $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0;\n var $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0;\n var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;\n var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;\n var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;\n var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0;\n var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0);\n $$byval_copy1 = sp + 88|0;\n $$byval_copy = sp + 72|0;\n $3 = sp + 64|0;\n $13 = sp + 268|0;\n $16 = sp + 256|0;\n $20 = sp + 240|0;\n $23 = sp + 228|0;\n $26 = sp + 56|0;\n $37 = sp + 320|0;\n $51 = sp + 316|0;\n $52 = sp + 116|0;\n $53 = sp + 40|0;\n $55 = sp + 108|0;\n $56 = sp + 104|0;\n $57 = sp + 16|0;\n $58 = sp;\n $50 = $0;\n $59 = $50;\n $60 = HEAP32[$59>>2]|0;\n __ZN6laszip7streams13memory_stream4readEPci($60,$51,4);\n $61 = ((($51)) + 4|0);\n $47 = $52;\n $48 = $51;\n $49 = $61;\n $62 = $47;\n $46 = $62;\n $63 = $46;\n $45 = $63;\n $64 = $45;\n ;HEAP32[$64>>2]=0|0;HEAP32[$64+4>>2]=0|0;HEAP32[$64+8>>2]=0|0;\n $44 = $63;\n $65 = $44;\n $43 = $65;\n $66 = $48;\n $67 = $49;\n __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_($62,$66,$67);\n $41 = $52;\n $42 = 4257;\n $68 = $41;\n $69 = $42;\n $38 = $68;\n $39 = $69;\n $70 = $39;\n $71 = (__ZNSt3__211char_traitsIcE6lengthEPKc($70)|0);\n $40 = $71;\n $72 = $40;\n $73 = $38;\n $36 = $73;\n $74 = $36;\n $35 = $74;\n $75 = $35;\n $34 = $75;\n $76 = $34;\n $33 = $76;\n $77 = $33;\n $78 = ((($77)) + 11|0);\n $79 = HEAP8[$78>>0]|0;\n $80 = $79&255;\n $81 = $80 & 128;\n $82 = ($81|0)!=(0);\n if ($82) {\n  $29 = $74;\n  $83 = $29;\n  $28 = $83;\n  $84 = $28;\n  $27 = $84;\n  $85 = $27;\n  $86 = ((($85)) + 4|0);\n  $87 = HEAP32[$86>>2]|0;\n  $95 = $87;\n } else {\n  $32 = $74;\n  $88 = $32;\n  $31 = $88;\n  $89 = $31;\n  $30 = $89;\n  $90 = $30;\n  $91 = ((($90)) + 11|0);\n  $92 = HEAP8[$91>>0]|0;\n  $93 = $92&255;\n  $95 = $93;\n }\n $94 = ($72|0)!=($95|0);\n if ($94) {\n  $$expand_i1_val = 0;\n  HEAP8[$37>>0] = $$expand_i1_val;\n } else {\n  $96 = $38;\n  $97 = $39;\n  $98 = $40;\n  $99 = (__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj($96,0,-1,$97,$98)|0);\n  $100 = ($99|0)==(0);\n  $$expand_i1_val3 = $100&1;\n  HEAP8[$37>>0] = $$expand_i1_val3;\n }\n $$pre_trunc = HEAP8[$37>>0]|0;\n $101 = $$pre_trunc&1;\n $102 = $101 ^ 1;\n __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev($52);\n if ($102) {\n  $103 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip13invalid_magicC2Ev($103);\n  ___cxa_throw(($103|0),(56|0),(11|0));\n  // unreachable;\n }\n $104 = HEAP32[$59>>2]|0;\n $25 = $53;\n $105 = $26;\n $106 = $105;\n HEAP32[$106>>2] = 0;\n $107 = (($105) + 4)|0;\n $108 = $107;\n HEAP32[$108>>2] = 0;\n $109 = $25;\n ;HEAP32[$109>>2]=0|0;HEAP32[$109+4>>2]=0|0;\n $110 = ((($109)) + 8|0);\n $111 = $26;\n $112 = $111;\n $113 = HEAP32[$112>>2]|0;\n $114 = (($111) + 4)|0;\n $115 = $114;\n $116 = HEAP32[$115>>2]|0;\n $117 = $110;\n $118 = $117;\n HEAP32[$118>>2] = $113;\n $119 = (($117) + 4)|0;\n $120 = $119;\n HEAP32[$120>>2] = $116;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$53>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$53+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$53+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$53+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($104,$$byval_copy);\n $121 = HEAP32[$59>>2]|0;\n $122 = ((($59)) + 20|0);\n __ZN6laszip7streams13memory_stream4readEPci($121,$122,227);\n $123 = ((($59)) + 20|0);\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10_fixMinMaxERNS0_6headerE($59,$123);\n $124 = (__ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEv()|0);\n $54 = $124;\n $125 = $54;\n $24 = $125;\n $126 = $24;\n $127 = HEAP32[$126>>2]|0;\n $21 = $126;\n $22 = $127;\n $128 = $22;\n $18 = $20;\n $19 = $128;\n $129 = $18;\n $130 = $19;\n HEAP32[$129>>2] = $130;\n $131 = HEAP32[$20>>2]|0;\n HEAP32[$23>>2] = $131;\n $132 = HEAP32[$23>>2]|0;\n HEAP32[$55>>2] = $132;\n $133 = $54;\n $17 = $133;\n $134 = $17;\n $135 = ((($134)) + 4|0);\n $136 = HEAP32[$135>>2]|0;\n $14 = $134;\n $15 = $136;\n $137 = $15;\n $11 = $13;\n $12 = $137;\n $138 = $11;\n $139 = $12;\n HEAP32[$138>>2] = $139;\n $140 = HEAP32[$13>>2]|0;\n HEAP32[$16>>2] = $140;\n $141 = HEAP32[$16>>2]|0;\n HEAP32[$56>>2] = $141;\n while(1) {\n  $9 = $55;\n  $10 = $56;\n  $142 = $9;\n  $143 = $10;\n  $7 = $142;\n  $8 = $143;\n  $144 = $7;\n  $6 = $144;\n  $145 = $6;\n  $146 = HEAP32[$145>>2]|0;\n  $147 = $8;\n  $5 = $147;\n  $148 = $5;\n  $149 = HEAP32[$148>>2]|0;\n  $150 = ($146|0)==($149|0);\n  $151 = $150 ^ 1;\n  if (!($151)) {\n   break;\n  }\n  $4 = $55;\n  $152 = $4;\n  $153 = HEAP32[$152>>2]|0;\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2ERKS6_($57,$153);\n  $154 = ((($59)) + 20|0);\n  __ZNKSt3__28functionIFvRN6laszip2io6headerEEEclES4_($57,$154);\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($57);\n  $1 = $55;\n  $155 = $1;\n  $156 = HEAP32[$155>>2]|0;\n  $157 = ((($156)) + 24|0);\n  HEAP32[$155>>2] = $157;\n }\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE12_parseLASZIPEv($59);\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE16_parseChunkTableEv($59);\n $158 = HEAP32[$59>>2]|0;\n __ZN6laszip7streams13memory_stream5clearEv($158);\n $159 = HEAP32[$59>>2]|0;\n $160 = ((($59)) + 20|0);\n $161 = ((($160)) + 96|0);\n $162 = HEAP32[$161>>2]|0;\n $163 = (($162) + 8)|0;\n $2 = $58;\n $164 = $3;\n $165 = $164;\n HEAP32[$165>>2] = $163;\n $166 = (($164) + 4)|0;\n $167 = $166;\n HEAP32[$167>>2] = 0;\n $168 = $2;\n ;HEAP32[$168>>2]=0|0;HEAP32[$168+4>>2]=0|0;\n $169 = ((($168)) + 8|0);\n $170 = $3;\n $171 = $170;\n $172 = HEAP32[$171>>2]|0;\n $173 = (($170) + 4)|0;\n $174 = $173;\n $175 = HEAP32[$174>>2]|0;\n $176 = $169;\n $177 = $176;\n HEAP32[$177>>2] = $172;\n $178 = (($176) + 4)|0;\n $179 = $178;\n HEAP32[$179>>2] = $175;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$58>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$58+4>>2]|0;HEAP32[$$byval_copy1+8>>2]=HEAP32[$58+8>>2]|0;HEAP32[$$byval_copy1+12>>2]=HEAP32[$58+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($159,$$byval_copy1);\n $180 = ((($59)) + 4|0);\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE5resetEv($180);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip5utilsL14aligned_mallocEi($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $4 = $1;\n $5 = (($4) + 64)|0;\n $6 = (($5) + 4)|0;\n $7 = (_malloc($6)|0);\n $2 = $7;\n $8 = $2;\n $9 = $8;\n $10 = (($9) + 64)|0;\n $11 = (($10) + 4)|0;\n $12 = $11 & -64;\n $13 = $12;\n $3 = $13;\n $14 = $2;\n $15 = $3;\n $16 = ((($15)) + -4|0);\n HEAP32[$16>>2] = $14;\n $17 = $3;\n STACKTOP = sp;return ($17|0);\n}\nfunction __ZN6laszip7streams13memory_stream4readEPci($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);\n $18 = sp;\n $21 = sp + 92|0;\n $24 = sp + 12|0;\n $26 = sp + 4|0;\n $22 = $0;\n $23 = $1;\n HEAP32[$24>>2] = $2;\n $27 = $22;\n $28 = ((($27)) + 13|0);\n $29 = HEAP8[$28>>0]|0;\n $30 = $29&1;\n if ($30) {\n  $31 = ((($27)) + 12|0);\n  HEAP8[$31>>0] = 1;\n  STACKTOP = sp;return;\n }\n $32 = ((($27)) + 4|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = ((($27)) + 8|0);\n $35 = HEAP32[$34>>2]|0;\n $36 = (($33) - ($35))|0;\n HEAP32[$26>>2] = $36;\n $19 = $24;\n $20 = $26;\n $37 = $19;\n $38 = $20;\n ;HEAP8[$18>>0]=HEAP8[$21>>0]|0;\n $16 = $37;\n $17 = $38;\n $39 = $17;\n $40 = $16;\n $13 = $18;\n $14 = $39;\n $15 = $40;\n $41 = $14;\n $42 = HEAP32[$41>>2]|0;\n $43 = $15;\n $44 = HEAP32[$43>>2]|0;\n $45 = ($42|0)<($44|0);\n $46 = $17;\n $47 = $16;\n $48 = $45 ? $46 : $47;\n $49 = HEAP32[$48>>2]|0;\n $25 = $49;\n $50 = HEAP32[$27>>2]|0;\n $51 = ((($27)) + 8|0);\n $52 = HEAP32[$51>>2]|0;\n $53 = (($50) + ($52)|0);\n $54 = HEAP32[$27>>2]|0;\n $55 = ((($27)) + 8|0);\n $56 = HEAP32[$55>>2]|0;\n $57 = (($54) + ($56)|0);\n $58 = $25;\n $59 = (($57) + ($58)|0);\n $60 = $23;\n $10 = $53;\n $11 = $59;\n $12 = $60;\n $61 = $10;\n $9 = $61;\n $62 = $9;\n $63 = $11;\n $3 = $63;\n $64 = $3;\n $65 = $12;\n $4 = $65;\n $66 = $4;\n $5 = $62;\n $6 = $64;\n $7 = $66;\n $67 = $6;\n $68 = $5;\n $69 = $67;\n $70 = $68;\n $71 = (($69) - ($70))|0;\n $8 = $71;\n $72 = $8;\n $73 = ($72>>>0)>(0);\n if ($73) {\n  $74 = $7;\n  $75 = $5;\n  $76 = $8;\n  _memmove(($74|0),($75|0),($76|0))|0;\n }\n $77 = $25;\n $78 = ((($27)) + 8|0);\n $79 = HEAP32[$78>>2]|0;\n $80 = (($79) + ($77))|0;\n HEAP32[$78>>2] = $80;\n $81 = $25;\n $82 = ((($27)) + 16|0);\n HEAP32[$82>>2] = $81;\n $83 = ((($27)) + 8|0);\n $84 = HEAP32[$83>>2]|0;\n $85 = ((($27)) + 4|0);\n $86 = HEAP32[$85>>2]|0;\n $87 = ($84|0)>=($86|0);\n if (!($87)) {\n  STACKTOP = sp;return;\n }\n $88 = ((($27)) + 13|0);\n HEAP8[$88>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13invalid_magicC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4355);\n HEAP32[$2>>2] = (1640);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13invalid_magicD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $4;\n $3 = $1;\n $6 = $3;\n $7 = ((($6)) + 8|0);\n $8 = $7;\n $9 = $8;\n $10 = HEAP32[$9>>2]|0;\n $11 = (($8) + 4)|0;\n $12 = $11;\n $13 = HEAP32[$12>>2]|0;\n $14 = ((($5)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = ($15|0)<(0);\n $17 = $16 << 31 >> 31;\n $18 = ($13|0)>($17|0);\n $19 = ($10>>>0)>=($15>>>0);\n $20 = ($13|0)==($17|0);\n $21 = $20 & $19;\n $22 = $18 | $21;\n if ($22) {\n  $23 = ((($5)) + 12|0);\n  HEAP8[$23>>0] = 1;\n  STACKTOP = sp;return;\n } else {\n  $2 = $1;\n  $24 = $2;\n  $25 = ((($24)) + 8|0);\n  $26 = $25;\n  $27 = $26;\n  $28 = HEAP32[$27>>2]|0;\n  $29 = (($26) + 4)|0;\n  $30 = $29;\n  $31 = HEAP32[$30>>2]|0;\n  $32 = ((($5)) + 8|0);\n  HEAP32[$32>>2] = $28;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10_fixMinMaxERNS0_6headerE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0.0, $13 = 0, $14 = 0, $15 = 0, $16 = 0.0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0.0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0, $27 = 0.0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0.0, $32 = 0.0, $33 = 0, $34 = 0, $35 = 0.0, $36 = 0, $37 = 0, $38 = 0.0, $39 = 0, $4 = 0.0, $40 = 0, $41 = 0, $42 = 0.0, $43 = 0, $44 = 0, $45 = 0, $46 = 0.0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0.0, $50 = 0.0, $51 = 0, $52 = 0, $53 = 0, $6 = 0.0, $7 = 0.0, $8 = 0.0, $9 = 0.0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $2 = $0;\n $3 = $1;\n $10 = $3;\n $11 = ((($10)) + 179|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$11>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$11+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$11+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$11+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$11+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$11+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$11+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$11+7>>0];$12 = +HEAPF64[tempDoublePtr>>3];\n $4 = $12;\n $13 = $3;\n $14 = ((($13)) + 179|0);\n $15 = ((($14)) + 8|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$15>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$15+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$15+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$15+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$15+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$15+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$15+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$15+7>>0];$16 = +HEAPF64[tempDoublePtr>>3];\n $7 = $16;\n $17 = $3;\n $18 = ((($17)) + 179|0);\n $19 = ((($18)) + 16|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$19>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$19+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$19+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$19+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$19+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$19+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$19+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$19+7>>0];$20 = +HEAPF64[tempDoublePtr>>3];\n $5 = $20;\n $21 = $3;\n $22 = ((($21)) + 203|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$22>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$22+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$22+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$22+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$22+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$22+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$22+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$22+7>>0];$23 = +HEAPF64[tempDoublePtr>>3];\n $8 = $23;\n $24 = $3;\n $25 = ((($24)) + 203|0);\n $26 = ((($25)) + 8|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$26>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$26+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$26+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$26+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$26+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$26+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$26+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$26+7>>0];$27 = +HEAPF64[tempDoublePtr>>3];\n $6 = $27;\n $28 = $3;\n $29 = ((($28)) + 203|0);\n $30 = ((($29)) + 16|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$30>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$30+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$30+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$30+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$30+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$30+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$30+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$30+7>>0];$31 = +HEAPF64[tempDoublePtr>>3];\n $9 = $31;\n $32 = $7;\n $33 = $3;\n $34 = ((($33)) + 179|0);\n HEAPF64[tempDoublePtr>>3]=$32;HEAP8[$34>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$34+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$34+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$34+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$34+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$34+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$34+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$34+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $35 = $4;\n $36 = $3;\n $37 = ((($36)) + 203|0);\n HEAPF64[tempDoublePtr>>3]=$35;HEAP8[$37>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$37+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$37+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$37+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$37+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$37+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$37+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$37+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $38 = $8;\n $39 = $3;\n $40 = ((($39)) + 179|0);\n $41 = ((($40)) + 8|0);\n HEAPF64[tempDoublePtr>>3]=$38;HEAP8[$41>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$41+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$41+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$41+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$41+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$41+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$41+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$41+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $42 = $5;\n $43 = $3;\n $44 = ((($43)) + 203|0);\n $45 = ((($44)) + 8|0);\n HEAPF64[tempDoublePtr>>3]=$42;HEAP8[$45>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$45+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$45+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$45+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$45+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$45+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$45+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$45+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $46 = $9;\n $47 = $3;\n $48 = ((($47)) + 179|0);\n $49 = ((($48)) + 16|0);\n HEAPF64[tempDoublePtr>>3]=$46;HEAP8[$49>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$49+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$49+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$49+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$49+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$49+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$49+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$49+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $50 = $6;\n $51 = $3;\n $52 = ((($51)) + 203|0);\n $53 = ((($52)) + 16|0);\n HEAPF64[tempDoublePtr>>3]=$50;HEAP8[$53>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$53+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$53+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$53+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$53+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$53+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$53+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$53+7>>0]=HEAP8[tempDoublePtr+7>>0];\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEv() {\n var $$byval_copy = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0;\n var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $$byval_copy = sp + 195|0;\n $13 = sp + 24|0;\n $18 = sp + 194|0;\n $29 = sp + 193|0;\n $42 = sp + 32|0;\n $44 = sp;\n $45 = sp + 192|0;\n $46 = HEAP8[21176]|0;\n $47 = ($46<<24>>24)==(0);\n if ($47) {\n  $48 = (___cxa_guard_acquire(21176)|0);\n  $49 = ($48|0)!=(0);\n  if ($49) {\n   $43 = 21216;\n   $50 = $43;\n   $41 = $50;\n   $51 = $41;\n   $40 = $51;\n   HEAP32[$51>>2] = 0;\n   $52 = ((($51)) + 4|0);\n   HEAP32[$52>>2] = 0;\n   $53 = ((($51)) + 8|0);\n   HEAP32[$42>>2] = 0;\n   $38 = $53;\n   $39 = $42;\n   $54 = $38;\n   $55 = $39;\n   $37 = $55;\n   $56 = $37;\n   $33 = $54;\n   $34 = $56;\n   $57 = $33;\n   $58 = $34;\n   $32 = $58;\n   HEAP32[$57>>2] = 0;\n   $36 = $54;\n   $59 = $36;\n   $35 = $59;\n  }\n }\n $60 = HEAP8[21184]|0;\n $61 = ($60<<24>>24)==(0);\n if ($61) {\n  $62 = (___cxa_guard_acquire(21184)|0);\n  $63 = ($62|0)!=(0);\n  if ($63) {\n  }\n }\n $31 = 21216;\n $64 = $31;\n $65 = HEAP32[$64>>2]|0;\n $66 = ((($64)) + 4|0);\n $67 = HEAP32[$66>>2]|0;\n $68 = ($65|0)==($67|0);\n if (!($68)) {\n  STACKTOP = sp;return (21216|0);\n }\n __ZNSt3__25mutex4lockEv(21228);\n $30 = 21216;\n $69 = $30;\n $70 = HEAP32[$69>>2]|0;\n $71 = ((($69)) + 4|0);\n $72 = HEAP32[$71>>2]|0;\n $73 = ($70|0)==($72|0);\n if ($73) {\n  ;HEAP8[$$byval_copy>>0]=HEAP8[$45>>0]|0;\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2IZNS2_6reader10basic_fileINS1_7streams13memory_streamEE11_validatorsEvEUlS4_E_vEET_($44,$$byval_copy);\n  $27 = 21216;\n  $28 = $44;\n  $74 = $27;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  $26 = $74;\n  $77 = $26;\n  $78 = ((($77)) + 8|0);\n  $25 = $78;\n  $79 = $25;\n  $24 = $79;\n  $80 = $24;\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ($76>>>0)<($81>>>0);\n  if ($82) {\n   $21 = $29;\n   $22 = $74;\n   $23 = 1;\n   $4 = $74;\n   $83 = $4;\n   $84 = ((($83)) + 8|0);\n   $3 = $84;\n   $85 = $3;\n   $2 = $85;\n   $86 = $2;\n   $87 = ((($74)) + 4|0);\n   $88 = HEAP32[$87>>2]|0;\n   $0 = $88;\n   $89 = $0;\n   $90 = $28;\n   $1 = $90;\n   $91 = $1;\n   $15 = $86;\n   $16 = $89;\n   $17 = $91;\n   $92 = $15;\n   $93 = $16;\n   $94 = $17;\n   $14 = $94;\n   $95 = $14;\n   ;HEAP8[$13>>0]=HEAP8[$18>>0]|0;\n   $10 = $92;\n   $11 = $93;\n   $12 = $95;\n   $96 = $10;\n   $97 = $11;\n   $98 = $12;\n   $9 = $98;\n   $99 = $9;\n   $6 = $96;\n   $7 = $97;\n   $8 = $99;\n   $100 = $7;\n   $101 = $8;\n   $5 = $101;\n   $102 = $5;\n   __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($100,$102);\n   $19 = $29;\n   $103 = ((($74)) + 4|0);\n   $104 = HEAP32[$103>>2]|0;\n   $105 = ((($104)) + 24|0);\n   HEAP32[$103>>2] = $105;\n  } else {\n   $106 = $28;\n   $20 = $106;\n   $107 = $20;\n   __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE21__push_back_slow_pathIS7_EEvOT_($74,$107);\n  }\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($44);\n }\n __ZNSt3__25mutex6unlockEv(21228);\n STACKTOP = sp;return (21216|0);\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2ERKS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n $6 = ((($5)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = ($7|0)==(0|0);\n if ($8) {\n  $9 = ((($4)) + 16|0);\n  HEAP32[$9>>2] = 0;\n  STACKTOP = sp;return;\n }\n $10 = $3;\n $11 = ((($10)) + 16|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = $3;\n $14 = ($12|0)==($13|0);\n if ($14) {\n  $15 = (__ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($4)|0);\n  $16 = ((($4)) + 16|0);\n  HEAP32[$16>>2] = $15;\n  $17 = $3;\n  $18 = ((($17)) + 16|0);\n  $19 = HEAP32[$18>>2]|0;\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ((($20)) + 12|0);\n  $22 = HEAP32[$21>>2]|0;\n  $23 = ((($4)) + 16|0);\n  $24 = HEAP32[$23>>2]|0;\n  FUNCTION_TABLE_vii[$22 & 255]($19,$24);\n  STACKTOP = sp;return;\n } else {\n  $25 = $3;\n  $26 = ((($25)) + 16|0);\n  $27 = HEAP32[$26>>2]|0;\n  $28 = HEAP32[$27>>2]|0;\n  $29 = ((($28)) + 8|0);\n  $30 = HEAP32[$29>>2]|0;\n  $31 = (FUNCTION_TABLE_ii[$30 & 255]($27)|0);\n  $32 = ((($4)) + 16|0);\n  HEAP32[$32>>2] = $31;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNKSt3__28functionIFvRN6laszip2io6headerEEEclES4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $3;\n $6 = ((($5)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = ($7|0)==(0|0);\n if ($8) {\n  $9 = (___cxa_allocate_exception(4)|0);\n  ;HEAP32[$9>>2]=0|0;\n  __ZNSt3__217bad_function_callC2Ev($9);\n  ___cxa_throw(($9|0),(1240|0),(197|0));\n  // unreachable;\n } else {\n  $10 = ((($5)) + 16|0);\n  $11 = HEAP32[$10>>2]|0;\n  $12 = HEAP32[$11>>2]|0;\n  $13 = ((($12)) + 24|0);\n  $14 = HEAP32[$13>>2]|0;\n  $15 = $4;\n  $2 = $15;\n  $16 = $2;\n  FUNCTION_TABLE_vii[$14 & 255]($11,$16);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 16|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ($4|0)==($2|0);\n $6 = ((($2)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n if ($5) {\n  $8 = HEAP32[$7>>2]|0;\n  $9 = ((($8)) + 16|0);\n  $10 = HEAP32[$9>>2]|0;\n  FUNCTION_TABLE_vi[$10 & 511]($7);\n  STACKTOP = sp;return;\n }\n $11 = ($7|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($2)) + 16|0);\n $13 = HEAP32[$12>>2]|0;\n $14 = HEAP32[$13>>2]|0;\n $15 = ((($14)) + 20|0);\n $16 = HEAP32[$15>>2]|0;\n FUNCTION_TABLE_vi[$16 & 511]($13);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE12_parseLASZIPEv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $$expand_i1_val = 0, $$expand_i1_val3 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0;\n var $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0;\n var $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0;\n var $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;\n var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;\n var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;\n var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;\n var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;\n var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);\n $$byval_copy = sp + 32|0;\n $26 = sp + 116|0;\n $30 = sp + 277|0;\n $34 = sp + 24|0;\n $38 = sp + 276|0;\n $40 = sp + 16|0;\n $42 = sp;\n $43 = sp + 222|0;\n $47 = sp + 60|0;\n $48 = sp + 48|0;\n $41 = $0;\n $49 = $41;\n $50 = HEAP32[$49>>2]|0;\n $51 = ((($49)) + 20|0);\n $52 = ((($51)) + 94|0);\n $53 = HEAP16[$52>>1]|0;\n $54 = $53&65535;\n $39 = $42;\n $55 = $40;\n $56 = $55;\n HEAP32[$56>>2] = $54;\n $57 = (($55) + 4)|0;\n $58 = $57;\n HEAP32[$58>>2] = 0;\n $59 = $39;\n ;HEAP32[$59>>2]=0|0;HEAP32[$59+4>>2]=0|0;\n $60 = ((($59)) + 8|0);\n $61 = $40;\n $62 = $61;\n $63 = HEAP32[$62>>2]|0;\n $64 = (($61) + 4)|0;\n $65 = $64;\n $66 = HEAP32[$65>>2]|0;\n $67 = $60;\n $68 = $67;\n HEAP32[$68>>2] = $63;\n $69 = (($67) + 4)|0;\n $70 = $69;\n HEAP32[$70>>2] = $66;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$42>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$42+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$42+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$42+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($50,$$byval_copy);\n $44 = 0;\n $45 = 0;\n while(1) {\n  $71 = $44;\n  $72 = ((($49)) + 20|0);\n  $73 = ((($72)) + 100|0);\n  $74 = HEAP32[$73>>2]|0;\n  $75 = ($71>>>0)<($74>>>0);\n  if (!($75)) {\n   break;\n  }\n  $76 = HEAP32[$49>>2]|0;\n  $77 = (__ZN6laszip7streams13memory_stream4goodEv($76)|0);\n  if (!($77)) {\n   break;\n  }\n  $78 = HEAP32[$49>>2]|0;\n  $79 = (__ZN6laszip7streams13memory_stream3eofEv($78)|0);\n  $80 = $79 ^ 1;\n  if (!($80)) {\n   break;\n  }\n  $81 = HEAP32[$49>>2]|0;\n  __ZN6laszip7streams13memory_stream4readEPci($81,$43,54);\n  $46 = 4841;\n  $82 = ((($43)) + 2|0);\n  $83 = ((($43)) + 2|0);\n  $84 = ((($83)) + 14|0);\n  $85 = $46;\n  $35 = $82;\n  $36 = $84;\n  $37 = $85;\n  $86 = $35;\n  $87 = $36;\n  $88 = $37;\n  ;HEAP8[$34>>0]=HEAP8[$38>>0]|0;\n  $31 = $86;\n  $32 = $87;\n  $33 = $88;\n  while(1) {\n   $89 = $31;\n   $90 = $32;\n   $91 = ($89|0)!=($90|0);\n   if (!($91)) {\n    label = 10;\n    break;\n   }\n   $92 = $31;\n   $93 = $33;\n   $27 = $34;\n   $28 = $92;\n   $29 = $93;\n   $94 = $28;\n   $95 = HEAP8[$94>>0]|0;\n   $96 = $95 << 24 >> 24;\n   $97 = $29;\n   $98 = HEAP8[$97>>0]|0;\n   $99 = $98 << 24 >> 24;\n   $100 = ($96|0)==($99|0);\n   if (!($100)) {\n    label = 8;\n    break;\n   }\n   $101 = $31;\n   $102 = ((($101)) + 1|0);\n   $31 = $102;\n   $103 = $33;\n   $104 = ((($103)) + 1|0);\n   $33 = $104;\n  }\n  if ((label|0) == 8) {\n   label = 0;\n   $$expand_i1_val = 0;\n   HEAP8[$30>>0] = $$expand_i1_val;\n  }\n  else if ((label|0) == 10) {\n   label = 0;\n   $$expand_i1_val3 = 1;\n   HEAP8[$30>>0] = $$expand_i1_val3;\n  }\n  $$pre_trunc = HEAP8[$30>>0]|0;\n  $105 = $$pre_trunc&1;\n  if ($105) {\n   $106 = ((($43)) + 18|0);\n   $107 = HEAPU8[$106>>0]|(HEAPU8[$106+1>>0]<<8);\n   $108 = $107&65535;\n   $109 = ($108|0)==(22204);\n   if ($109) {\n    label = 13;\n    break;\n   }\n  }\n  $149 = HEAP32[$49>>2]|0;\n  $150 = ((($43)) + 20|0);\n  $151 = HEAPU8[$150>>0]|(HEAPU8[$150+1>>0]<<8);\n  $152 = $151&65535;\n  __ZN6laszip7streams13memory_stream5seekgExNSt3__28ios_base7seekdirE($149,$152,0,1);\n  $153 = $44;\n  $154 = (($153) + 1)|0;\n  $44 = $154;\n }\n if ((label|0) == 13) {\n  $45 = 1;\n  $110 = ((($43)) + 20|0);\n  $111 = HEAPU8[$110>>0]|(HEAPU8[$110+1>>0]<<8);\n  $112 = $111&65535;\n  $113 = (__Znaj($112)|0);\n  $25 = $47;\n  HEAP32[$26>>2] = $113;\n  $114 = $25;\n  $23 = $114;\n  $24 = $26;\n  $115 = $23;\n  $116 = $24;\n  $22 = $116;\n  $117 = $22;\n  $20 = $115;\n  $21 = $117;\n  $118 = $20;\n  $119 = $21;\n  $19 = $119;\n  $120 = $19;\n  $121 = HEAP32[$120>>2]|0;\n  HEAP32[$118>>2] = $121;\n  $122 = HEAP32[$49>>2]|0;\n  $18 = $47;\n  $123 = $18;\n  $17 = $123;\n  $124 = $17;\n  $16 = $124;\n  $125 = $16;\n  $126 = HEAP32[$125>>2]|0;\n  $127 = ((($43)) + 20|0);\n  $128 = HEAPU8[$127>>0]|(HEAPU8[$127+1>>0]<<8);\n  $129 = $128&65535;\n  __ZN6laszip7streams13memory_stream4readEPci($122,$126,$129);\n  $15 = $47;\n  $130 = $15;\n  $14 = $130;\n  $131 = $14;\n  $13 = $131;\n  $132 = $13;\n  $133 = HEAP32[$132>>2]|0;\n  __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE15_parseLASZIPVLREPKc($49,$133);\n  $12 = $47;\n  $134 = $12;\n  $9 = $134;\n  $10 = 0;\n  $135 = $9;\n  $8 = $135;\n  $136 = $8;\n  $7 = $136;\n  $137 = $7;\n  $138 = HEAP32[$137>>2]|0;\n  $11 = $138;\n  $139 = $10;\n  $4 = $135;\n  $140 = $4;\n  $3 = $140;\n  $141 = $3;\n  HEAP32[$141>>2] = $139;\n  $142 = $11;\n  $143 = ($142|0)!=(0|0);\n  if ($143) {\n   $2 = $135;\n   $144 = $2;\n   $1 = $144;\n   $145 = $1;\n   $146 = $11;\n   $5 = $145;\n   $6 = $146;\n   $147 = $6;\n   $148 = ($147|0)==(0|0);\n   if (!($148)) {\n    __ZdlPv($147);\n   }\n  }\n }\n $155 = $45;\n $156 = $155&1;\n if ($156) {\n  $158 = ((($49)) + 247|0);\n  $159 = ((($49)) + 20|0);\n  $160 = ((($159)) + 105|0);\n  $161 = HEAPU8[$160>>0]|(HEAPU8[$160+1>>0]<<8);\n  $162 = $161&65535;\n  __ZN6laszip2io7laz_vlr9to_schemaERKS1_i($48,$158,$162);\n  $163 = ((($49)) + 300|0);\n  (__ZN6laszip7factory13record_schemaaSEOS1_($163,$48)|0);\n  __ZN6laszip7factory13record_schemaD2Ev($48);\n  STACKTOP = sp;return;\n } else {\n  $157 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip13no_laszip_vlrC2Ev($157);\n  ___cxa_throw(($157|0),(136|0),(32|0));\n  // unreachable;\n }\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE16_parseChunkTableEv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0;\n var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0;\n var $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0;\n var $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0;\n var $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0;\n var $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0;\n var $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0;\n var $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0;\n var $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0;\n var $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0;\n var $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0;\n var $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0;\n var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;\n var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;\n var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;\n var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 448|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(448|0);\n $$byval_copy1 = sp + 80|0;\n $$byval_copy = sp + 64|0;\n $38 = sp + 56|0;\n $41 = sp + 436|0;\n $54 = sp + 48|0;\n $56 = sp + 40|0;\n $58 = sp + 24|0;\n $59 = sp + 16|0;\n $60 = sp;\n $61 = sp + 216|0;\n $62 = sp + 200|0;\n $63 = sp + 184|0;\n $64 = sp + 104|0;\n $57 = $0;\n $67 = $57;\n $68 = HEAP32[$67>>2]|0;\n $69 = ((($67)) + 20|0);\n $70 = ((($69)) + 96|0);\n $71 = HEAP32[$70>>2]|0;\n $55 = $58;\n $72 = $56;\n $73 = $72;\n HEAP32[$73>>2] = $71;\n $74 = (($72) + 4)|0;\n $75 = $74;\n HEAP32[$75>>2] = 0;\n $76 = $55;\n ;HEAP32[$76>>2]=0|0;HEAP32[$76+4>>2]=0|0;\n $77 = ((($76)) + 8|0);\n $78 = $56;\n $79 = $78;\n $80 = HEAP32[$79>>2]|0;\n $81 = (($78) + 4)|0;\n $82 = $81;\n $83 = HEAP32[$82>>2]|0;\n $84 = $77;\n $85 = $84;\n HEAP32[$85>>2] = $80;\n $86 = (($84) + 4)|0;\n $87 = $86;\n HEAP32[$87>>2] = $83;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$58>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$58+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$58+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$58+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($68,$$byval_copy);\n $88 = $59;\n $89 = $88;\n HEAP32[$89>>2] = 0;\n $90 = (($88) + 4)|0;\n $91 = $90;\n HEAP32[$91>>2] = 0;\n $92 = HEAP32[$67>>2]|0;\n __ZN6laszip7streams13memory_stream4readEPci($92,$59,8);\n $93 = HEAP32[$67>>2]|0;\n $94 = (__ZN6laszip7streams13memory_stream4goodEv($93)|0);\n if (!($94)) {\n  $95 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip22chunk_table_read_errorC2Ev($95);\n  ___cxa_throw(($95|0),(168|0),(34|0));\n  // unreachable;\n }\n $96 = $59;\n $97 = $96;\n $98 = HEAP32[$97>>2]|0;\n $99 = (($96) + 4)|0;\n $100 = $99;\n $101 = HEAP32[$100>>2]|0;\n $102 = ($98|0)==(-1);\n $103 = ($101|0)==(-1);\n $104 = $102 & $103;\n if ($104) {\n  $105 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip13not_supportedC2EPKc($105,5052);\n  ___cxa_throw(($105|0),(184|0),(36|0));\n  // unreachable;\n }\n $106 = HEAP32[$67>>2]|0;\n $107 = $59;\n $108 = $107;\n $109 = HEAP32[$108>>2]|0;\n $110 = (($107) + 4)|0;\n $111 = $110;\n $112 = HEAP32[$111>>2]|0;\n $53 = $60;\n $113 = $54;\n $114 = $113;\n HEAP32[$114>>2] = $109;\n $115 = (($113) + 4)|0;\n $116 = $115;\n HEAP32[$116>>2] = $112;\n $117 = $53;\n ;HEAP32[$117>>2]=0|0;HEAP32[$117+4>>2]=0|0;\n $118 = ((($117)) + 8|0);\n $119 = $54;\n $120 = $119;\n $121 = HEAP32[$120>>2]|0;\n $122 = (($119) + 4)|0;\n $123 = $122;\n $124 = HEAP32[$123>>2]|0;\n $125 = $118;\n $126 = $125;\n HEAP32[$126>>2] = $121;\n $127 = (($125) + 4)|0;\n $128 = $127;\n HEAP32[$128>>2] = $124;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$60>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$60+4>>2]|0;HEAP32[$$byval_copy1+8>>2]=HEAP32[$60+8>>2]|0;HEAP32[$$byval_copy1+12>>2]=HEAP32[$60+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($106,$$byval_copy1);\n $129 = HEAP32[$67>>2]|0;\n $130 = (__ZN6laszip7streams13memory_stream4goodEv($129)|0);\n if (!($130)) {\n  $131 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip22chunk_table_read_errorC2Ev($131);\n  ___cxa_throw(($131|0),(168|0),(34|0));\n  // unreachable;\n }\n $132 = HEAP32[$67>>2]|0;\n __ZN6laszip7streams13memory_stream4readEPci($132,$61,8);\n $133 = HEAP32[$67>>2]|0;\n $134 = (__ZN6laszip7streams13memory_stream4goodEv($133)|0);\n if (!($134)) {\n  $135 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip22chunk_table_read_errorC2Ev($135);\n  ___cxa_throw(($135|0),(168|0),(34|0));\n  // unreachable;\n }\n $136 = HEAP32[$61>>2]|0;\n $137 = ($136|0)!=(0);\n if ($137) {\n  $138 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip26unknown_chunk_table_formatC2Ev($138);\n  ___cxa_throw(($138|0),(200|0),(38|0));\n  // unreachable;\n }\n $139 = ((($67)) + 288|0);\n $51 = $139;\n $140 = $51;\n $50 = $140;\n $141 = $50;\n $142 = ((($141)) + 4|0);\n $143 = HEAP32[$142>>2]|0;\n $144 = HEAP32[$141>>2]|0;\n $145 = $143;\n $146 = $144;\n $147 = (($145) - ($146))|0;\n $148 = (($147|0) / 8)&-1;\n $52 = $148;\n $49 = $140;\n $149 = $49;\n $150 = HEAP32[$149>>2]|0;\n $46 = $149;\n $47 = $150;\n $151 = $46;\n $152 = ((($151)) + 4|0);\n $153 = HEAP32[$152>>2]|0;\n $48 = $153;\n while(1) {\n  $154 = $47;\n  $155 = $48;\n  $156 = ($154|0)!=($155|0);\n  if (!($156)) {\n   break;\n  }\n  $45 = $151;\n  $157 = $45;\n  $158 = ((($157)) + 8|0);\n  $44 = $158;\n  $159 = $44;\n  $43 = $159;\n  $160 = $43;\n  $161 = $48;\n  $162 = ((($161)) + -8|0);\n  $48 = $162;\n  $42 = $162;\n  $163 = $42;\n  $39 = $160;\n  $40 = $163;\n  $164 = $39;\n  $165 = $40;\n  ;HEAP8[$38>>0]=HEAP8[$41>>0]|0;\n  $36 = $164;\n  $37 = $165;\n  $166 = $36;\n  $167 = $37;\n  $34 = $166;\n  $35 = $167;\n }\n $168 = $47;\n $169 = ((($151)) + 4|0);\n HEAP32[$169>>2] = $168;\n $170 = $52;\n $31 = $140;\n $32 = $170;\n $171 = $31;\n $30 = $171;\n $172 = $30;\n $173 = HEAP32[$172>>2]|0;\n $29 = $173;\n $174 = $29;\n $13 = $171;\n $175 = $13;\n $176 = HEAP32[$175>>2]|0;\n $12 = $176;\n $177 = $12;\n $18 = $171;\n $178 = $18;\n $17 = $178;\n $179 = $17;\n $16 = $179;\n $180 = $16;\n $181 = ((($180)) + 8|0);\n $15 = $181;\n $182 = $15;\n $14 = $182;\n $183 = $14;\n $184 = HEAP32[$183>>2]|0;\n $185 = HEAP32[$179>>2]|0;\n $186 = $184;\n $187 = $185;\n $188 = (($186) - ($187))|0;\n $189 = (($188|0) / 8)&-1;\n $190 = (($177) + ($189<<3)|0);\n $20 = $171;\n $191 = $20;\n $192 = HEAP32[$191>>2]|0;\n $19 = $192;\n $193 = $19;\n $194 = $32;\n $195 = (($193) + ($194<<3)|0);\n $22 = $171;\n $196 = $22;\n $197 = HEAP32[$196>>2]|0;\n $21 = $197;\n $198 = $21;\n $23 = $171;\n $199 = $23;\n $200 = ((($199)) + 4|0);\n $201 = HEAP32[$200>>2]|0;\n $202 = HEAP32[$199>>2]|0;\n $203 = $201;\n $204 = $202;\n $205 = (($203) - ($204))|0;\n $206 = (($205|0) / 8)&-1;\n $207 = (($198) + ($206<<3)|0);\n $24 = $171;\n $25 = $174;\n $26 = $190;\n $27 = $195;\n $28 = $207;\n $33 = $140;\n $208 = ((($67)) + 247|0);\n $209 = ((($208)) + 12|0);\n $210 = HEAPU8[$209>>0]|(HEAPU8[$209+1>>0]<<8)|(HEAPU8[$209+2>>0]<<16)|(HEAPU8[$209+3>>0]<<24);\n $211 = ($210|0)==(-1);\n if ($211) {\n  $212 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip13not_supportedC2EPKc($212,5170);\n  ___cxa_throw(($212|0),(184|0),(36|0));\n  // unreachable;\n }\n $213 = ((($67)) + 288|0);\n $214 = ((($61)) + 4|0);\n $215 = HEAP32[$214>>2]|0;\n $216 = (($215) + 1)|0;\n __ZNSt3__26vectorIyNS_9allocatorIyEEE6resizeEj($213,$216);\n $217 = ((($67)) + 20|0);\n $218 = ((($217)) + 96|0);\n $219 = HEAP32[$218>>2]|0;\n $220 = (($219) + 8)|0;\n $221 = ((($67)) + 288|0);\n $10 = $221;\n $11 = 0;\n $222 = $10;\n $223 = HEAP32[$222>>2]|0;\n $224 = $11;\n $225 = (($223) + ($224<<3)|0);\n $226 = $225;\n $227 = $226;\n HEAP32[$227>>2] = $220;\n $228 = (($226) + 4)|0;\n $229 = $228;\n HEAP32[$229>>2] = 0;\n $230 = ((($61)) + 4|0);\n $231 = HEAP32[$230>>2]|0;\n $232 = ($231>>>0)>(1);\n if (!($232)) {\n  STACKTOP = sp;return;\n }\n $233 = HEAP32[$67>>2]|0;\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($62,$233);\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($63,$62);\n __ZN6laszip13decompressors7integerC2Ejjjj($64,32,2,8,0);\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($63);\n __ZN6laszip13decompressors7integer4initEv($64);\n $65 = 1;\n while(1) {\n  $234 = $65;\n  $235 = ((($61)) + 4|0);\n  $236 = HEAP32[$235>>2]|0;\n  $237 = ($234>>>0)<=($236>>>0);\n  if (!($237)) {\n   break;\n  }\n  $238 = $65;\n  $239 = ($238>>>0)>(1);\n  if ($239) {\n   $240 = ((($67)) + 288|0);\n   $241 = $65;\n   $242 = (($241) - 1)|0;\n   $8 = $240;\n   $9 = $242;\n   $243 = $8;\n   $244 = HEAP32[$243>>2]|0;\n   $245 = $9;\n   $246 = (($244) + ($245<<3)|0);\n   $247 = $246;\n   $248 = $247;\n   $249 = HEAP32[$248>>2]|0;\n   $250 = (($247) + 4)|0;\n   $251 = $250;\n   $252 = HEAP32[$251>>2]|0;\n   $253 = $249;\n  } else {\n   $253 = 0;\n  }\n  $254 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($64,$63,$253,1)|0);\n  $255 = ($254|0)<(0);\n  $256 = $255 << 31 >> 31;\n  $257 = ((($67)) + 288|0);\n  $258 = $65;\n  $1 = $257;\n  $2 = $258;\n  $259 = $1;\n  $260 = HEAP32[$259>>2]|0;\n  $261 = $2;\n  $262 = (($260) + ($261<<3)|0);\n  $263 = $262;\n  $264 = $263;\n  HEAP32[$264>>2] = $254;\n  $265 = (($263) + 4)|0;\n  $266 = $265;\n  HEAP32[$266>>2] = $256;\n  $267 = $65;\n  $268 = (($267) + 1)|0;\n  $65 = $268;\n }\n $66 = 1;\n while(1) {\n  $269 = $66;\n  $270 = ((($67)) + 288|0);\n  $3 = $270;\n  $271 = $3;\n  $272 = ((($271)) + 4|0);\n  $273 = HEAP32[$272>>2]|0;\n  $274 = HEAP32[$271>>2]|0;\n  $275 = $273;\n  $276 = $274;\n  $277 = (($275) - ($276))|0;\n  $278 = (($277|0) / 8)&-1;\n  $279 = ($269>>>0)<($278>>>0);\n  if (!($279)) {\n   break;\n  }\n  $280 = ((($67)) + 288|0);\n  $281 = $66;\n  $282 = (($281) - 1)|0;\n  $4 = $280;\n  $5 = $282;\n  $283 = $4;\n  $284 = HEAP32[$283>>2]|0;\n  $285 = $5;\n  $286 = (($284) + ($285<<3)|0);\n  $287 = $286;\n  $288 = $287;\n  $289 = HEAP32[$288>>2]|0;\n  $290 = (($287) + 4)|0;\n  $291 = $290;\n  $292 = HEAP32[$291>>2]|0;\n  $293 = ((($67)) + 288|0);\n  $294 = $66;\n  $6 = $293;\n  $7 = $294;\n  $295 = $6;\n  $296 = HEAP32[$295>>2]|0;\n  $297 = $7;\n  $298 = (($296) + ($297<<3)|0);\n  $299 = $298;\n  $300 = $299;\n  $301 = HEAP32[$300>>2]|0;\n  $302 = (($299) + 4)|0;\n  $303 = $302;\n  $304 = HEAP32[$303>>2]|0;\n  $305 = (_i64Add(($301|0),($304|0),($289|0),($292|0))|0);\n  $306 = tempRet0;\n  $307 = $298;\n  $308 = $307;\n  HEAP32[$308>>2] = $305;\n  $309 = (($307) + 4)|0;\n  $310 = $309;\n  HEAP32[$310>>2] = $306;\n  $311 = $66;\n  $312 = (($311) + 1)|0;\n  $66 = $312;\n }\n __ZN6laszip13decompressors7integerD2Ev($64);\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($63);\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($62);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7streams13memory_stream5clearEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 12|0);\n HEAP8[$3>>0] = 0;\n $4 = ((($2)) + 13|0);\n HEAP8[$4>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE5resetEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 8|0);\n HEAP32[$3>>2] = 0;\n $4 = ((($2)) + 4|0);\n HEAP32[$4>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__211char_traitsIcE6lengthEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (_strlen($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0);\n $38 = sp + 8|0;\n $40 = sp + 218|0;\n $48 = sp;\n $51 = sp + 217|0;\n $58 = sp + 216|0;\n $52 = $0;\n $53 = $1;\n $54 = $2;\n $59 = $52;\n $60 = $53;\n $61 = $54;\n $49 = $60;\n $50 = $61;\n $62 = $49;\n $63 = $50;\n ;HEAP8[$48>>0]=HEAP8[$51>>0]|0;\n $46 = $62;\n $47 = $63;\n $64 = $47;\n $65 = $46;\n $66 = $64;\n $67 = $65;\n $68 = (($66) - ($67))|0;\n $55 = $68;\n $69 = $55;\n $44 = $59;\n $70 = $44;\n $43 = $70;\n $71 = $43;\n $42 = $71;\n $72 = $42;\n $41 = $72;\n $73 = $41;\n $39 = $73;\n $74 = $39;\n ;HEAP8[$38>>0]=HEAP8[$40>>0]|0;\n $37 = $74;\n $75 = $37;\n $36 = $75;\n $45 = -1;\n $76 = $45;\n $77 = (($76) - 16)|0;\n $78 = ($69>>>0)>($77>>>0);\n if ($78) {\n  __ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv($59);\n  // unreachable;\n }\n $79 = $55;\n $80 = ($79>>>0)<(11);\n $81 = $55;\n if ($80) {\n  $34 = $59;\n  $35 = $81;\n  $82 = $34;\n  $83 = $35;\n  $84 = $83&255;\n  $33 = $82;\n  $85 = $33;\n  $32 = $85;\n  $86 = $32;\n  $87 = ((($86)) + 11|0);\n  HEAP8[$87>>0] = $84;\n  $12 = $59;\n  $88 = $12;\n  $11 = $88;\n  $89 = $11;\n  $10 = $89;\n  $90 = $10;\n  $9 = $90;\n  $91 = $9;\n  $8 = $91;\n  $92 = $8;\n  $56 = $92;\n } else {\n  $4 = $81;\n  $93 = $4;\n  $94 = ($93>>>0)<(11);\n  if ($94) {\n   $101 = 11;\n  } else {\n   $95 = $4;\n   $96 = (($95) + 1)|0;\n   $3 = $96;\n   $97 = $3;\n   $98 = (($97) + 15)|0;\n   $99 = $98 & -16;\n   $101 = $99;\n  }\n  $100 = (($101) - 1)|0;\n  $57 = $100;\n  $7 = $59;\n  $102 = $7;\n  $6 = $102;\n  $103 = $6;\n  $5 = $103;\n  $104 = $5;\n  $105 = $57;\n  $106 = (($105) + 1)|0;\n  $18 = $104;\n  $19 = $106;\n  $107 = $18;\n  $108 = $19;\n  $15 = $107;\n  $16 = $108;\n  $17 = 0;\n  $109 = $15;\n  $14 = $109;\n  $110 = $16;\n  $13 = $110;\n  $111 = $13;\n  $112 = (__Znwj($111)|0);\n  $56 = $112;\n  $113 = $56;\n  $22 = $59;\n  $23 = $113;\n  $114 = $22;\n  $115 = $23;\n  $21 = $114;\n  $116 = $21;\n  $20 = $116;\n  $117 = $20;\n  HEAP32[$117>>2] = $115;\n  $118 = $57;\n  $119 = (($118) + 1)|0;\n  $26 = $59;\n  $27 = $119;\n  $120 = $26;\n  $121 = $27;\n  $122 = -2147483648 | $121;\n  $25 = $120;\n  $123 = $25;\n  $24 = $123;\n  $124 = $24;\n  $125 = ((($124)) + 8|0);\n  HEAP32[$125>>2] = $122;\n  $126 = $55;\n  $30 = $59;\n  $31 = $126;\n  $127 = $30;\n  $128 = $31;\n  $29 = $127;\n  $129 = $29;\n  $28 = $129;\n  $130 = $28;\n  $131 = ((($130)) + 4|0);\n  HEAP32[$131>>2] = $128;\n }\n while(1) {\n  $132 = $53;\n  $133 = $54;\n  $134 = ($132|0)!=($133|0);\n  $135 = $56;\n  if (!($134)) {\n   break;\n  }\n  $136 = $53;\n  __ZNSt3__211char_traitsIcE6assignERcRKc($135,$136);\n  $137 = $53;\n  $138 = ((($137)) + 1|0);\n  $53 = $138;\n  $139 = $56;\n  $140 = ((($139)) + 1|0);\n  $56 = $140;\n }\n HEAP8[$58>>0] = 0;\n __ZNSt3__211char_traitsIcE6assignERcRKc($135,$58);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__211char_traitsIcE6assignERcRKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $3;\n $5 = HEAP8[$4>>0]|0;\n $6 = $2;\n HEAP8[$6>>0] = $5;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13invalid_magicD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13invalid_magicD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2IZNS2_6reader10basic_fileINS1_7streams13memory_streamEE11_validatorsEvEUlS4_E_vEET_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0);\n $10 = sp + 96|0;\n $11 = sp + 88|0;\n $12 = sp + 80|0;\n $13 = sp + 72|0;\n $17 = sp + 235|0;\n $18 = sp + 234|0;\n $19 = sp + 233|0;\n $20 = sp + 232|0;\n $22 = sp + 172|0;\n $25 = sp + 231|0;\n $30 = sp + 64|0;\n $31 = sp + 56|0;\n $32 = sp + 48|0;\n $36 = sp + 40|0;\n $37 = sp + 32|0;\n $38 = sp + 24|0;\n $41 = sp + 230|0;\n $42 = sp + 124|0;\n $43 = sp + 229|0;\n $44 = sp + 228|0;\n $45 = sp + 227|0;\n $46 = sp + 226|0;\n $47 = sp + 16|0;\n $48 = sp + 8|0;\n $49 = sp;\n $53 = sp + 225|0;\n $54 = sp + 108|0;\n $55 = sp + 224|0;\n $57 = $0;\n $58 = $57;\n $59 = ((($58)) + 16|0);\n HEAP32[$59>>2] = 0;\n $56 = $1;\n $2 = $1;\n $60 = $2;\n $51 = $58;\n $52 = $60;\n $61 = $51;\n $50 = $61;\n $62 = $50;\n HEAP32[$62>>2] = (1704);\n HEAP32[$61>>2] = (1660);\n $63 = ((($61)) + 4|0);\n $64 = $52;\n $3 = $64;\n $65 = $3;\n $23 = $65;\n $66 = $23;\n $21 = $66;\n $67 = $21;\n $15 = $22;\n $16 = $67;\n $68 = $15;\n $69 = $16;\n $14 = $69;\n $70 = $14;\n ;HEAP8[$10>>0]=HEAP8[$20>>0]|0;\n ;HEAP8[$11>>0]=HEAP8[$19>>0]|0;\n ;HEAP8[$12>>0]=HEAP8[$18>>0]|0;\n ;HEAP8[$13>>0]=HEAP8[$17>>0]|0;\n $8 = $68;\n $9 = $70;\n $71 = $8;\n $72 = $9;\n $7 = $72;\n $73 = $7;\n $5 = $71;\n $6 = $73;\n $74 = $5;\n $75 = $6;\n $4 = $75;\n $76 = $4;\n HEAP32[$74>>2] = $76;\n $77 = HEAP32[$22>>2]|0;\n HEAP32[$54>>2] = $77;\n $24 = $25;\n ;HEAP8[$47>>0]=HEAP8[$55>>0]|0;\n ;HEAP8[$48>>0]=HEAP8[$54>>0]|0;HEAP8[$48+1>>0]=HEAP8[$54+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$54+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$54+3>>0]|0;\n ;HEAP8[$49>>0]=HEAP8[$53>>0]|0;\n $40 = $63;\n $78 = $40;\n $39 = $48;\n $79 = $39;\n ;HEAP32[$42>>2]=HEAP32[$79>>2]|0;\n ;HEAP8[$30>>0]=HEAP8[$43>>0]|0;\n ;HEAP8[$31>>0]=HEAP8[$42>>0]|0;HEAP8[$31+1>>0]=HEAP8[$42+1>>0]|0;HEAP8[$31+2>>0]=HEAP8[$42+2>>0]|0;HEAP8[$31+3>>0]=HEAP8[$42+3>>0]|0;\n ;HEAP8[$32>>0]=HEAP8[$41>>0]|0;\n $29 = $78;\n $28 = $31;\n $80 = $28;\n $27 = $80;\n $81 = $27;\n $82 = HEAP32[$81>>2]|0;\n $26 = $82;\n $33 = $47;\n ;HEAP8[$36>>0]=HEAP8[$46>>0]|0;\n ;HEAP8[$37>>0]=HEAP8[$45>>0]|0;\n ;HEAP8[$38>>0]=HEAP8[$44>>0]|0;\n $35 = $78;\n $83 = $35;\n $34 = $83;\n $84 = ((($58)) + 16|0);\n HEAP32[$84>>2] = $58;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE21__push_back_slow_pathIS7_EEvOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $10 = sp + 8|0;\n $15 = sp + 193|0;\n $24 = sp;\n $27 = sp + 192|0;\n $35 = sp + 72|0;\n $38 = sp + 60|0;\n $46 = sp + 12|0;\n $43 = $0;\n $44 = $1;\n $47 = $43;\n $42 = $47;\n $48 = $42;\n $49 = ((($48)) + 8|0);\n $41 = $49;\n $50 = $41;\n $40 = $50;\n $51 = $40;\n $45 = $51;\n $39 = $47;\n $52 = $39;\n $53 = ((($52)) + 4|0);\n $54 = HEAP32[$53>>2]|0;\n $55 = HEAP32[$52>>2]|0;\n $56 = $54;\n $57 = $55;\n $58 = (($56) - ($57))|0;\n $59 = (($58|0) / 24)&-1;\n $60 = (($59) + 1)|0;\n $34 = $47;\n HEAP32[$35>>2] = $60;\n $61 = $34;\n $62 = (__ZNKSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE8max_sizeEv($61)|0);\n $36 = $62;\n $63 = HEAP32[$35>>2]|0;\n $64 = $36;\n $65 = ($63>>>0)>($64>>>0);\n if ($65) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61);\n  // unreachable;\n }\n $32 = $61;\n $66 = $32;\n $31 = $66;\n $67 = $31;\n $30 = $67;\n $68 = $30;\n $69 = ((($68)) + 8|0);\n $29 = $69;\n $70 = $29;\n $28 = $70;\n $71 = $28;\n $72 = HEAP32[$71>>2]|0;\n $73 = HEAP32[$67>>2]|0;\n $74 = $72;\n $75 = $73;\n $76 = (($74) - ($75))|0;\n $77 = (($76|0) / 24)&-1;\n $37 = $77;\n $78 = $37;\n $79 = $36;\n $80 = (($79>>>0) / 2)&-1;\n $81 = ($78>>>0)>=($80>>>0);\n if ($81) {\n  $82 = $36;\n  $33 = $82;\n } else {\n  $83 = $37;\n  $84 = $83<<1;\n  HEAP32[$38>>2] = $84;\n  $25 = $38;\n  $26 = $35;\n  $85 = $25;\n  $86 = $26;\n  ;HEAP8[$24>>0]=HEAP8[$27>>0]|0;\n  $22 = $85;\n  $23 = $86;\n  $87 = $22;\n  $88 = $23;\n  $19 = $24;\n  $20 = $87;\n  $21 = $88;\n  $89 = $20;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = $21;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = ($90>>>0)<($92>>>0);\n  $94 = $23;\n  $95 = $22;\n  $96 = $93 ? $94 : $95;\n  $97 = HEAP32[$96>>2]|0;\n  $33 = $97;\n }\n $98 = $33;\n $18 = $47;\n $99 = $18;\n $100 = ((($99)) + 4|0);\n $101 = HEAP32[$100>>2]|0;\n $102 = HEAP32[$99>>2]|0;\n $103 = $101;\n $104 = $102;\n $105 = (($103) - ($104))|0;\n $106 = (($105|0) / 24)&-1;\n $107 = $45;\n __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEEC2EjjSA_($46,$98,$106,$107);\n $108 = $45;\n $109 = ((($46)) + 8|0);\n $110 = HEAP32[$109>>2]|0;\n $17 = $110;\n $111 = $17;\n $112 = $44;\n $16 = $112;\n $113 = $16;\n $12 = $108;\n $13 = $111;\n $14 = $113;\n $114 = $12;\n $115 = $13;\n $116 = $14;\n $11 = $116;\n $117 = $11;\n ;HEAP8[$10>>0]=HEAP8[$15>>0]|0;\n $7 = $114;\n $8 = $115;\n $9 = $117;\n $118 = $7;\n $119 = $8;\n $120 = $9;\n $6 = $120;\n $121 = $6;\n $3 = $118;\n $4 = $119;\n $5 = $121;\n $122 = $4;\n $123 = $5;\n $2 = $123;\n $124 = $2;\n __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($122,$124);\n $125 = ((($46)) + 8|0);\n $126 = HEAP32[$125>>2]|0;\n $127 = ((($126)) + 24|0);\n HEAP32[$125>>2] = $127;\n __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS7_RS9_EE($47,$46);\n __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEED2Ev($46);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n $6 = ((($5)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = ($7|0)==(0|0);\n if ($8) {\n  $9 = ((($4)) + 16|0);\n  HEAP32[$9>>2] = 0;\n  STACKTOP = sp;return;\n }\n $10 = $3;\n $11 = ((($10)) + 16|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = $3;\n $14 = ($12|0)==($13|0);\n if ($14) {\n  $15 = (__ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($4)|0);\n  $16 = ((($4)) + 16|0);\n  HEAP32[$16>>2] = $15;\n  $17 = $3;\n  $18 = ((($17)) + 16|0);\n  $19 = HEAP32[$18>>2]|0;\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ((($20)) + 12|0);\n  $22 = HEAP32[$21>>2]|0;\n  $23 = ((($4)) + 16|0);\n  $24 = HEAP32[$23>>2]|0;\n  FUNCTION_TABLE_vii[$22 & 255]($19,$24);\n  STACKTOP = sp;return;\n } else {\n  $25 = $3;\n  $26 = ((($25)) + 16|0);\n  $27 = HEAP32[$26>>2]|0;\n  $28 = ((($4)) + 16|0);\n  HEAP32[$28>>2] = $27;\n  $29 = $3;\n  $30 = ((($29)) + 16|0);\n  HEAP32[$30>>2] = 0;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEEC2EjjSA_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(178956970);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = ($68*24)|0;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + (($74*24)|0)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + (($79*24)|0)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS7_RS9_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0;\n var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0;\n var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;\n var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;\n var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;\n var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;\n var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0);\n $15 = sp;\n $20 = sp + 404|0;\n $31 = sp + 292|0;\n $37 = sp + 268|0;\n $49 = sp + 220|0;\n $102 = $0;\n $103 = $1;\n $104 = $102;\n $101 = $104;\n $105 = $101;\n $100 = $105;\n $106 = $100;\n $107 = HEAP32[$106>>2]|0;\n $99 = $107;\n $108 = $99;\n $78 = $105;\n $109 = $78;\n $110 = HEAP32[$109>>2]|0;\n $77 = $110;\n $111 = $77;\n $83 = $105;\n $112 = $83;\n $82 = $112;\n $113 = $82;\n $81 = $113;\n $114 = $81;\n $115 = ((($114)) + 8|0);\n $80 = $115;\n $116 = $80;\n $79 = $116;\n $117 = $79;\n $118 = HEAP32[$117>>2]|0;\n $119 = HEAP32[$113>>2]|0;\n $120 = $118;\n $121 = $119;\n $122 = (($120) - ($121))|0;\n $123 = (($122|0) / 24)&-1;\n $124 = (($111) + (($123*24)|0)|0);\n $85 = $105;\n $125 = $85;\n $126 = HEAP32[$125>>2]|0;\n $84 = $126;\n $127 = $84;\n $86 = $105;\n $128 = $86;\n $129 = ((($128)) + 4|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$128>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 24)&-1;\n $136 = (($127) + (($135*24)|0)|0);\n $88 = $105;\n $137 = $88;\n $138 = HEAP32[$137>>2]|0;\n $87 = $138;\n $139 = $87;\n $93 = $105;\n $140 = $93;\n $92 = $140;\n $141 = $92;\n $91 = $141;\n $142 = $91;\n $143 = ((($142)) + 8|0);\n $90 = $143;\n $144 = $90;\n $89 = $144;\n $145 = $89;\n $146 = HEAP32[$145>>2]|0;\n $147 = HEAP32[$141>>2]|0;\n $148 = $146;\n $149 = $147;\n $150 = (($148) - ($149))|0;\n $151 = (($150|0) / 24)&-1;\n $152 = (($139) + (($151*24)|0)|0);\n $94 = $105;\n $95 = $108;\n $96 = $124;\n $97 = $136;\n $98 = $152;\n $4 = $104;\n $153 = $4;\n $154 = ((($153)) + 8|0);\n $3 = $154;\n $155 = $3;\n $2 = $155;\n $156 = $2;\n $157 = HEAP32[$104>>2]|0;\n $158 = ((($104)) + 4|0);\n $159 = HEAP32[$158>>2]|0;\n $160 = $103;\n $161 = ((($160)) + 4|0);\n $22 = $156;\n $23 = $157;\n $24 = $159;\n $25 = $161;\n while(1) {\n  $162 = $24;\n  $163 = $23;\n  $164 = ($162|0)!=($163|0);\n  if (!($164)) {\n   break;\n  }\n  $165 = $22;\n  $166 = $25;\n  $167 = HEAP32[$166>>2]|0;\n  $168 = ((($167)) + -24|0);\n  $21 = $168;\n  $169 = $21;\n  $170 = $24;\n  $171 = ((($170)) + -24|0);\n  $24 = $171;\n  $6 = $171;\n  $172 = $6;\n  $5 = $172;\n  $173 = $5;\n  $17 = $165;\n  $18 = $169;\n  $19 = $173;\n  $174 = $17;\n  $175 = $18;\n  $176 = $19;\n  $16 = $176;\n  $177 = $16;\n  ;HEAP8[$15>>0]=HEAP8[$20>>0]|0;\n  $12 = $174;\n  $13 = $175;\n  $14 = $177;\n  $178 = $12;\n  $179 = $13;\n  $180 = $14;\n  $11 = $180;\n  $181 = $11;\n  $8 = $178;\n  $9 = $179;\n  $10 = $181;\n  $182 = $9;\n  $183 = $10;\n  $7 = $183;\n  $184 = $7;\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($182,$184);\n  $185 = $25;\n  $186 = HEAP32[$185>>2]|0;\n  $187 = ((($186)) + -24|0);\n  HEAP32[$185>>2] = $187;\n }\n $188 = $103;\n $189 = ((($188)) + 4|0);\n $29 = $104;\n $30 = $189;\n $190 = $29;\n $28 = $190;\n $191 = $28;\n $192 = HEAP32[$191>>2]|0;\n HEAP32[$31>>2] = $192;\n $193 = $30;\n $26 = $193;\n $194 = $26;\n $195 = HEAP32[$194>>2]|0;\n $196 = $29;\n HEAP32[$196>>2] = $195;\n $27 = $31;\n $197 = $27;\n $198 = HEAP32[$197>>2]|0;\n $199 = $30;\n HEAP32[$199>>2] = $198;\n $200 = ((($104)) + 4|0);\n $201 = $103;\n $202 = ((($201)) + 8|0);\n $35 = $200;\n $36 = $202;\n $203 = $35;\n $34 = $203;\n $204 = $34;\n $205 = HEAP32[$204>>2]|0;\n HEAP32[$37>>2] = $205;\n $206 = $36;\n $32 = $206;\n $207 = $32;\n $208 = HEAP32[$207>>2]|0;\n $209 = $35;\n HEAP32[$209>>2] = $208;\n $33 = $37;\n $210 = $33;\n $211 = HEAP32[$210>>2]|0;\n $212 = $36;\n HEAP32[$212>>2] = $211;\n $40 = $104;\n $213 = $40;\n $214 = ((($213)) + 8|0);\n $39 = $214;\n $215 = $39;\n $38 = $215;\n $216 = $38;\n $217 = $103;\n $43 = $217;\n $218 = $43;\n $219 = ((($218)) + 12|0);\n $42 = $219;\n $220 = $42;\n $41 = $220;\n $221 = $41;\n $47 = $216;\n $48 = $221;\n $222 = $47;\n $46 = $222;\n $223 = $46;\n $224 = HEAP32[$223>>2]|0;\n HEAP32[$49>>2] = $224;\n $225 = $48;\n $44 = $225;\n $226 = $44;\n $227 = HEAP32[$226>>2]|0;\n $228 = $47;\n HEAP32[$228>>2] = $227;\n $45 = $49;\n $229 = $45;\n $230 = HEAP32[$229>>2]|0;\n $231 = $48;\n HEAP32[$231>>2] = $230;\n $232 = $103;\n $233 = ((($232)) + 4|0);\n $234 = HEAP32[$233>>2]|0;\n $235 = $103;\n HEAP32[$235>>2] = $234;\n $50 = $104;\n $236 = $50;\n $237 = ((($236)) + 4|0);\n $238 = HEAP32[$237>>2]|0;\n $239 = HEAP32[$236>>2]|0;\n $240 = $238;\n $241 = $239;\n $242 = (($240) - ($241))|0;\n $243 = (($242|0) / 24)&-1;\n $74 = $104;\n $75 = $243;\n $244 = $74;\n $73 = $244;\n $245 = $73;\n $246 = HEAP32[$245>>2]|0;\n $72 = $246;\n $247 = $72;\n $52 = $244;\n $248 = $52;\n $249 = HEAP32[$248>>2]|0;\n $51 = $249;\n $250 = $51;\n $57 = $244;\n $251 = $57;\n $56 = $251;\n $252 = $56;\n $55 = $252;\n $253 = $55;\n $254 = ((($253)) + 8|0);\n $54 = $254;\n $255 = $54;\n $53 = $255;\n $256 = $53;\n $257 = HEAP32[$256>>2]|0;\n $258 = HEAP32[$252>>2]|0;\n $259 = $257;\n $260 = $258;\n $261 = (($259) - ($260))|0;\n $262 = (($261|0) / 24)&-1;\n $263 = (($250) + (($262*24)|0)|0);\n $59 = $244;\n $264 = $59;\n $265 = HEAP32[$264>>2]|0;\n $58 = $265;\n $266 = $58;\n $64 = $244;\n $267 = $64;\n $63 = $267;\n $268 = $63;\n $62 = $268;\n $269 = $62;\n $270 = ((($269)) + 8|0);\n $61 = $270;\n $271 = $61;\n $60 = $271;\n $272 = $60;\n $273 = HEAP32[$272>>2]|0;\n $274 = HEAP32[$268>>2]|0;\n $275 = $273;\n $276 = $274;\n $277 = (($275) - ($276))|0;\n $278 = (($277|0) / 24)&-1;\n $279 = (($266) + (($278*24)|0)|0);\n $66 = $244;\n $280 = $66;\n $281 = HEAP32[$280>>2]|0;\n $65 = $281;\n $282 = $65;\n $283 = $75;\n $284 = (($282) + (($283*24)|0)|0);\n $67 = $244;\n $68 = $247;\n $69 = $263;\n $70 = $279;\n $71 = $284;\n $76 = $104;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -24|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n  $60 = $16;\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($60);\n }\n $61 = HEAP32[$35>>2]|0;\n $62 = ($61|0)!=(0|0);\n if (!($62)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $63 = $14;\n $64 = ((($63)) + 12|0);\n $13 = $64;\n $65 = $13;\n $66 = ((($65)) + 4|0);\n $12 = $66;\n $67 = $12;\n $68 = HEAP32[$67>>2]|0;\n $69 = HEAP32[$35>>2]|0;\n $11 = $35;\n $70 = $11;\n $10 = $70;\n $71 = $10;\n $72 = ((($71)) + 12|0);\n $9 = $72;\n $73 = $9;\n $8 = $73;\n $74 = $8;\n $75 = HEAP32[$74>>2]|0;\n $76 = HEAP32[$70>>2]|0;\n $77 = $75;\n $78 = $76;\n $79 = (($77) - ($78))|0;\n $80 = (($79|0) / 24)&-1;\n $5 = $68;\n $6 = $69;\n $7 = $80;\n $81 = $5;\n $82 = $6;\n $83 = $7;\n $2 = $81;\n $3 = $82;\n $4 = $83;\n $84 = $3;\n $1 = $84;\n $85 = $1;\n __ZdlPv($85);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 178956970;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $2;\n $1 = $3;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;\n var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;\n var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;\n var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 608|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(608|0);\n $7 = sp + 128|0;\n $8 = sp + 120|0;\n $9 = sp + 112|0;\n $10 = sp + 104|0;\n $13 = sp + 594|0;\n $14 = sp + 593|0;\n $15 = sp + 592|0;\n $16 = sp + 591|0;\n $18 = sp + 540|0;\n $27 = sp + 96|0;\n $28 = sp + 88|0;\n $29 = sp + 80|0;\n $30 = sp + 72|0;\n $34 = sp + 590|0;\n $35 = sp + 589|0;\n $36 = sp + 588|0;\n $37 = sp + 587|0;\n $39 = sp + 488|0;\n $45 = sp + 64|0;\n $46 = sp + 56|0;\n $47 = sp + 48|0;\n $53 = sp + 40|0;\n $54 = sp + 32|0;\n $55 = sp + 24|0;\n $58 = sp + 586|0;\n $59 = sp + 436|0;\n $60 = sp + 585|0;\n $61 = sp + 584|0;\n $62 = sp + 432|0;\n $63 = sp + 583|0;\n $64 = sp + 16|0;\n $65 = sp + 8|0;\n $66 = sp;\n $71 = sp + 582|0;\n $72 = sp + 412|0;\n $73 = sp + 408|0;\n $100 = sp + 300|0;\n $137 = sp + 581|0;\n $138 = sp + 144|0;\n $139 = sp + 136|0;\n $140 = sp + 580|0;\n $136 = $0;\n $141 = $136;\n $142 = ((($141)) + 4|0);\n $135 = $142;\n $143 = $135;\n $134 = $143;\n $144 = $134;\n $132 = $137;\n $133 = $144;\n $110 = $137;\n $111 = 1;\n $112 = 0;\n $145 = $110;\n $146 = $111;\n $109 = $145;\n $147 = ($146>>>0)>(536870911);\n if ($147) {\n  $107 = 4287;\n  $148 = (___cxa_allocate_exception(8)|0);\n  $149 = $107;\n  $105 = $148;\n  $106 = $149;\n  $150 = $105;\n  $151 = $106;\n  __ZNSt11logic_errorC2EPKc($150,$151);\n  HEAP32[$150>>2] = (3660);\n  ___cxa_throw(($148|0),(1384|0),(220|0));\n  // unreachable;\n }\n $152 = $111;\n $153 = $152<<3;\n $108 = $153;\n $154 = $108;\n $155 = (__Znwj($154)|0);\n $102 = $139;\n $103 = $137;\n $104 = 1;\n $156 = $102;\n $157 = $103;\n HEAP32[$156>>2] = $157;\n $158 = ((($156)) + 4|0);\n $159 = $104;\n HEAP32[$158>>2] = $159;\n $99 = $138;\n HEAP32[$100>>2] = $155;\n $101 = $139;\n $160 = $99;\n $161 = $101;\n $98 = $161;\n $162 = $98;\n $95 = $160;\n $96 = $100;\n $97 = $162;\n $163 = $95;\n $164 = $96;\n $94 = $164;\n $165 = $94;\n $88 = $163;\n $89 = $165;\n $166 = $88;\n $167 = $89;\n $87 = $167;\n $168 = $87;\n $169 = HEAP32[$168>>2]|0;\n HEAP32[$166>>2] = $169;\n $170 = ((($163)) + 4|0);\n $171 = $97;\n $90 = $171;\n $172 = $90;\n $92 = $170;\n $93 = $172;\n $173 = $92;\n $174 = $93;\n $91 = $174;\n $175 = $91;\n ;HEAP32[$173>>2]=HEAP32[$175>>2]|0;HEAP32[$173+4>>2]=HEAP32[$175+4>>2]|0;\n $86 = $138;\n $176 = $86;\n $85 = $176;\n $177 = $85;\n $84 = $177;\n $178 = $84;\n $179 = HEAP32[$178>>2]|0;\n $180 = ((($141)) + 4|0);\n $83 = $180;\n $181 = $83;\n $82 = $181;\n $182 = $82;\n $80 = $140;\n $81 = $137;\n $68 = $179;\n $69 = $182;\n $70 = $140;\n $183 = $68;\n $67 = $183;\n $184 = $67;\n HEAP32[$184>>2] = (1704);\n HEAP32[$183>>2] = (1660);\n $185 = ((($183)) + 4|0);\n $186 = $69;\n $19 = $186;\n $187 = $19;\n $17 = $187;\n $188 = $17;\n $11 = $18;\n $12 = $188;\n $189 = $11;\n $190 = $12;\n ;HEAP8[$7>>0]=HEAP8[$16>>0]|0;\n ;HEAP8[$8>>0]=HEAP8[$15>>0]|0;\n ;HEAP8[$9>>0]=HEAP8[$14>>0]|0;\n ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n $5 = $189;\n $6 = $190;\n $191 = $5;\n $192 = $6;\n $4 = $192;\n $193 = $4;\n $2 = $191;\n $3 = $193;\n $194 = $2;\n $195 = $3;\n $1 = $195;\n $196 = $1;\n HEAP32[$194>>2] = $196;\n $197 = HEAP32[$18>>2]|0;\n HEAP32[$72>>2] = $197;\n $198 = $70;\n $20 = $198;\n $199 = $20;\n $40 = $199;\n $200 = $40;\n $38 = $200;\n $201 = $38;\n $32 = $39;\n $33 = $201;\n $202 = $32;\n $203 = $33;\n $31 = $203;\n $204 = $31;\n ;HEAP8[$27>>0]=HEAP8[$37>>0]|0;\n ;HEAP8[$28>>0]=HEAP8[$36>>0]|0;\n ;HEAP8[$29>>0]=HEAP8[$35>>0]|0;\n ;HEAP8[$30>>0]=HEAP8[$34>>0]|0;\n $25 = $202;\n $26 = $204;\n $205 = $25;\n $206 = $26;\n $24 = $206;\n $207 = $24;\n $22 = $205;\n $23 = $207;\n $208 = $22;\n $209 = $23;\n $21 = $209;\n $210 = $21;\n HEAP32[$208>>2] = $210;\n $211 = HEAP32[$39>>2]|0;\n HEAP32[$73>>2] = $211;\n ;HEAP8[$64>>0]=HEAP8[$73>>0]|0;HEAP8[$64+1>>0]=HEAP8[$73+1>>0]|0;HEAP8[$64+2>>0]=HEAP8[$73+2>>0]|0;HEAP8[$64+3>>0]=HEAP8[$73+3>>0]|0;\n ;HEAP8[$65>>0]=HEAP8[$72>>0]|0;HEAP8[$65+1>>0]=HEAP8[$72+1>>0]|0;HEAP8[$65+2>>0]=HEAP8[$72+2>>0]|0;HEAP8[$65+3>>0]=HEAP8[$72+3>>0]|0;\n ;HEAP8[$66>>0]=HEAP8[$71>>0]|0;\n $57 = $185;\n $212 = $57;\n $56 = $65;\n $213 = $56;\n ;HEAP32[$59>>2]=HEAP32[$213>>2]|0;\n ;HEAP8[$45>>0]=HEAP8[$60>>0]|0;\n ;HEAP8[$46>>0]=HEAP8[$59>>0]|0;HEAP8[$46+1>>0]=HEAP8[$59+1>>0]|0;HEAP8[$46+2>>0]=HEAP8[$59+2>>0]|0;HEAP8[$46+3>>0]=HEAP8[$59+3>>0]|0;\n ;HEAP8[$47>>0]=HEAP8[$58>>0]|0;\n $44 = $212;\n $43 = $46;\n $214 = $43;\n $42 = $214;\n $215 = $42;\n $216 = HEAP32[$215>>2]|0;\n $41 = $216;\n $48 = $64;\n $217 = $48;\n ;HEAP32[$62>>2]=HEAP32[$217>>2]|0;\n ;HEAP8[$53>>0]=HEAP8[$63>>0]|0;\n ;HEAP8[$54>>0]=HEAP8[$62>>0]|0;HEAP8[$54+1>>0]=HEAP8[$62+1>>0]|0;HEAP8[$54+2>>0]=HEAP8[$62+2>>0]|0;HEAP8[$54+3>>0]=HEAP8[$62+3>>0]|0;\n ;HEAP8[$55>>0]=HEAP8[$61>>0]|0;\n $52 = $212;\n $51 = $54;\n $218 = $51;\n $50 = $218;\n $219 = $50;\n $220 = HEAP32[$219>>2]|0;\n $49 = $220;\n $78 = $138;\n $221 = $78;\n $77 = $221;\n $222 = $77;\n $76 = $222;\n $223 = $76;\n $224 = HEAP32[$223>>2]|0;\n $79 = $224;\n $75 = $221;\n $225 = $75;\n $74 = $225;\n $226 = $74;\n HEAP32[$226>>2] = 0;\n $227 = $79;\n $131 = $138;\n $228 = $131;\n $128 = $228;\n $129 = 0;\n $229 = $128;\n $127 = $229;\n $230 = $127;\n $126 = $230;\n $231 = $126;\n $232 = HEAP32[$231>>2]|0;\n $130 = $232;\n $233 = $129;\n $116 = $229;\n $234 = $116;\n $115 = $234;\n $235 = $115;\n HEAP32[$235>>2] = $233;\n $236 = $130;\n $237 = ($236|0)!=(0|0);\n if (!($237)) {\n  STACKTOP = sp;return ($227|0);\n }\n $114 = $229;\n $238 = $114;\n $239 = ((($238)) + 4|0);\n $113 = $239;\n $240 = $113;\n $241 = $130;\n $124 = $240;\n $125 = $241;\n $242 = $124;\n $243 = HEAP32[$242>>2]|0;\n $244 = $125;\n $245 = ((($242)) + 4|0);\n $246 = HEAP32[$245>>2]|0;\n $121 = $243;\n $122 = $244;\n $123 = $246;\n $247 = $121;\n $248 = $122;\n $249 = $123;\n $118 = $247;\n $119 = $248;\n $120 = $249;\n $250 = $119;\n $117 = $250;\n $251 = $117;\n __ZdlPv($251);\n STACKTOP = sp;return ($227|0);\n}\nfunction __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEPNS0_6__baseISE_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;\n var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;\n var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;\n var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;\n var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;\n var $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0);\n $10 = sp + 128|0;\n $11 = sp + 120|0;\n $12 = sp + 112|0;\n $13 = sp + 104|0;\n $16 = sp + 332|0;\n $17 = sp + 331|0;\n $18 = sp + 330|0;\n $19 = sp + 329|0;\n $21 = sp + 272|0;\n $29 = sp + 96|0;\n $30 = sp + 88|0;\n $31 = sp + 80|0;\n $32 = sp + 72|0;\n $35 = sp + 328|0;\n $36 = sp + 327|0;\n $37 = sp + 326|0;\n $38 = sp + 325|0;\n $40 = sp + 228|0;\n $46 = sp + 64|0;\n $47 = sp + 56|0;\n $48 = sp + 48|0;\n $54 = sp + 40|0;\n $55 = sp + 32|0;\n $56 = sp + 24|0;\n $59 = sp + 324|0;\n $60 = sp + 176|0;\n $61 = sp + 323|0;\n $62 = sp + 322|0;\n $63 = sp + 172|0;\n $64 = sp + 321|0;\n $65 = sp + 16|0;\n $66 = sp + 8|0;\n $67 = sp;\n $72 = sp + 320|0;\n $73 = sp + 152|0;\n $74 = sp + 148|0;\n $77 = $0;\n $78 = $1;\n $79 = $77;\n $80 = $78;\n $81 = ((($79)) + 4|0);\n $76 = $81;\n $82 = $76;\n $75 = $82;\n $83 = $75;\n $84 = ((($79)) + 4|0);\n $3 = $84;\n $85 = $3;\n $2 = $85;\n $86 = $2;\n $69 = $80;\n $70 = $83;\n $71 = $86;\n $87 = $69;\n $68 = $87;\n $88 = $68;\n HEAP32[$88>>2] = (1704);\n HEAP32[$87>>2] = (1660);\n $89 = ((($87)) + 4|0);\n $90 = $70;\n $22 = $90;\n $91 = $22;\n $20 = $91;\n $92 = $20;\n $14 = $21;\n $15 = $92;\n $93 = $14;\n $94 = $15;\n ;HEAP8[$10>>0]=HEAP8[$19>>0]|0;\n ;HEAP8[$11>>0]=HEAP8[$18>>0]|0;\n ;HEAP8[$12>>0]=HEAP8[$17>>0]|0;\n ;HEAP8[$13>>0]=HEAP8[$16>>0]|0;\n $8 = $93;\n $9 = $94;\n $95 = $8;\n $96 = $9;\n $7 = $96;\n $97 = $7;\n $5 = $95;\n $6 = $97;\n $98 = $5;\n $99 = $6;\n $4 = $99;\n $100 = $4;\n HEAP32[$98>>2] = $100;\n $101 = HEAP32[$21>>2]|0;\n HEAP32[$73>>2] = $101;\n $102 = $71;\n $41 = $102;\n $103 = $41;\n $39 = $103;\n $104 = $39;\n $33 = $40;\n $34 = $104;\n $105 = $33;\n $106 = $34;\n ;HEAP8[$29>>0]=HEAP8[$38>>0]|0;\n ;HEAP8[$30>>0]=HEAP8[$37>>0]|0;\n ;HEAP8[$31>>0]=HEAP8[$36>>0]|0;\n ;HEAP8[$32>>0]=HEAP8[$35>>0]|0;\n $27 = $105;\n $28 = $106;\n $107 = $27;\n $108 = $28;\n $26 = $108;\n $109 = $26;\n $24 = $107;\n $25 = $109;\n $110 = $24;\n $111 = $25;\n $23 = $111;\n $112 = $23;\n HEAP32[$110>>2] = $112;\n $113 = HEAP32[$40>>2]|0;\n HEAP32[$74>>2] = $113;\n ;HEAP8[$65>>0]=HEAP8[$74>>0]|0;HEAP8[$65+1>>0]=HEAP8[$74+1>>0]|0;HEAP8[$65+2>>0]=HEAP8[$74+2>>0]|0;HEAP8[$65+3>>0]=HEAP8[$74+3>>0]|0;\n ;HEAP8[$66>>0]=HEAP8[$73>>0]|0;HEAP8[$66+1>>0]=HEAP8[$73+1>>0]|0;HEAP8[$66+2>>0]=HEAP8[$73+2>>0]|0;HEAP8[$66+3>>0]=HEAP8[$73+3>>0]|0;\n ;HEAP8[$67>>0]=HEAP8[$72>>0]|0;\n $58 = $89;\n $114 = $58;\n $57 = $66;\n $115 = $57;\n ;HEAP32[$60>>2]=HEAP32[$115>>2]|0;\n ;HEAP8[$46>>0]=HEAP8[$61>>0]|0;\n ;HEAP8[$47>>0]=HEAP8[$60>>0]|0;HEAP8[$47+1>>0]=HEAP8[$60+1>>0]|0;HEAP8[$47+2>>0]=HEAP8[$60+2>>0]|0;HEAP8[$47+3>>0]=HEAP8[$60+3>>0]|0;\n ;HEAP8[$48>>0]=HEAP8[$59>>0]|0;\n $45 = $114;\n $44 = $47;\n $116 = $44;\n $43 = $116;\n $117 = $43;\n $118 = HEAP32[$117>>2]|0;\n $42 = $118;\n $49 = $65;\n $119 = $49;\n ;HEAP32[$63>>2]=HEAP32[$119>>2]|0;\n ;HEAP8[$54>>0]=HEAP8[$64>>0]|0;\n ;HEAP8[$55>>0]=HEAP8[$63>>0]|0;HEAP8[$55+1>>0]=HEAP8[$63+1>>0]|0;HEAP8[$55+2>>0]=HEAP8[$63+2>>0]|0;HEAP8[$55+3>>0]=HEAP8[$63+3>>0]|0;\n ;HEAP8[$56>>0]=HEAP8[$62>>0]|0;\n $53 = $114;\n $52 = $55;\n $120 = $52;\n $51 = $120;\n $121 = $51;\n $122 = HEAP32[$121>>2]|0;\n $50 = $122;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7destroyEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE18destroy_deallocateEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 36|0;\n $9 = $0;\n $11 = $9;\n $12 = ((($11)) + 4|0);\n $8 = $12;\n $13 = $8;\n $7 = $13;\n $14 = $7;\n $1 = $10;\n $2 = $14;\n $4 = $10;\n $5 = $11;\n $6 = 1;\n $15 = $5;\n $3 = $15;\n $16 = $3;\n __ZdlPv($16);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EEclESA_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 4|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $11 = $6;\n $2 = $11;\n $12 = $2;\n __ZNSt3__228__invoke_void_return_wrapperIvE6__callIJRZN6laszip2io6reader10basic_fileINS3_7streams13memory_streamEE11_validatorsEvEUlRNS4_6headerEE_SB_EEEvDpOT_($10,$12);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE6targetERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $7 = $0;\n $8 = $1;\n $9 = $7;\n $10 = $8;\n $4 = $10;\n $5 = 128;\n $11 = $4;\n $12 = ((($11)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $14 = $5;\n $15 = ((($14)) + 4|0);\n $16 = HEAP32[$15>>2]|0;\n $17 = ($13|0)==($16|0);\n if ($17) {\n  $18 = ((($9)) + 4|0);\n  $3 = $18;\n  $19 = $3;\n  $2 = $19;\n  $20 = $2;\n  $6 = $20;\n  $21 = $6;\n  STACKTOP = sp;return ($21|0);\n } else {\n  $6 = 0;\n  $21 = $6;\n  STACKTOP = sp;return ($21|0);\n }\n return (0)|0;\n}\nfunction __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE11target_typeEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return (128|0);\n}\nfunction __ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n _llvm_trap();\n // unreachable;\n}\nfunction __ZNSt3__228__invoke_void_return_wrapperIvE6__callIJRZN6laszip2io6reader10basic_fileINS3_7streams13memory_streamEE11_validatorsEvEUlRNS4_6headerEE_SB_EEEvDpOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $8 = $0;\n $9 = $1;\n $10 = $8;\n $7 = $10;\n $11 = $7;\n $12 = $9;\n $2 = $12;\n $13 = $2;\n $5 = $11;\n $6 = $13;\n $14 = $5;\n $4 = $14;\n $15 = $4;\n $16 = $6;\n $3 = $16;\n $17 = $3;\n __ZZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEvENKUlRNS0_6headerEE_clES7_($15,$17);\n STACKTOP = sp;return;\n}\nfunction __ZZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEvENKUlRNS0_6headerEE_clES7_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $6 = $3;\n $7 = ((($6)) + 104|0);\n $8 = HEAP8[$7>>0]|0;\n $9 = $8&255;\n $10 = $9 >> 7;\n $11 = $10 & 1;\n $4 = $11;\n $12 = $3;\n $13 = ((($12)) + 104|0);\n $14 = HEAP8[$13>>0]|0;\n $15 = $14&255;\n $16 = $15 >> 6;\n $17 = $16 & 1;\n $5 = $17;\n $18 = $4;\n $19 = ($18|0)==(1);\n $20 = $5;\n $21 = ($20|0)==(1);\n $or$cond = $19 & $21;\n if ($or$cond) {\n  $22 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip21old_style_compressionC2Ev($22);\n  ___cxa_throw(($22|0),(96|0),(26|0));\n  // unreachable;\n }\n $23 = $4;\n $24 = $5;\n $25 = $23 ^ $24;\n $26 = ($25|0)==(0);\n if ($26) {\n  $27 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip14not_compressedC2Ev($27);\n  ___cxa_throw(($27|0),(112|0),(28|0));\n  // unreachable;\n } else {\n  $28 = $3;\n  $29 = ((($28)) + 104|0);\n  $30 = HEAP8[$29>>0]|0;\n  $31 = $30&255;\n  $32 = $31 & 63;\n  $33 = $32&255;\n  HEAP8[$29>>0] = $33;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip21old_style_compressionC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4640);\n HEAP32[$2>>2] = (1748);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip21old_style_compressionD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip14not_compressedC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4708);\n HEAP32[$2>>2] = (1768);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip14not_compressedD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip21old_style_compressionD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip21old_style_compressionD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip14not_compressedD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip14not_compressedD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__217bad_function_callC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $2;\n $1 = $3;\n $4 = $1;\n HEAP32[$4>>2] = (3600);\n HEAP32[$3>>2] = (3448);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7streams13memory_stream4goodEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $3 = $1;\n $4 = ((($3)) + 12|0);\n $5 = HEAP8[$4>>0]|0;\n $6 = $5&1;\n $7 = $6&1;\n $2 = $7;\n $8 = ((($3)) + 12|0);\n HEAP8[$8>>0] = 0;\n $9 = $2;\n $10 = $9&1;\n $11 = $10 ^ 1;\n STACKTOP = sp;return ($11|0);\n}\nfunction __ZN6laszip7streams13memory_stream3eofEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 13|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE15_parseLASZIPVLREPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 247|0);\n $6 = $3;\n __ZN6laszip2io7laz_vlr4fillEPKc($5,$6);\n $7 = ((($4)) + 247|0);\n $8 = HEAPU8[$7>>0]|(HEAPU8[$7+1>>0]<<8);\n $9 = $8&65535;\n $10 = ($9|0)!=(2);\n if ($10) {\n  $11 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip25laszip_format_unsupportedC2Ev($11);\n  ___cxa_throw(($11|0),(152|0),(30|0));\n  // unreachable;\n } else {\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7streams13memory_stream5seekgExNSt3__28ios_base7seekdirE($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = sp + 8|0;\n $7 = sp;\n $4 = $0;\n $8 = $5;\n $9 = $8;\n HEAP32[$9>>2] = $1;\n $10 = (($8) + 4)|0;\n $11 = $10;\n HEAP32[$11>>2] = $2;\n $6 = $3;\n $12 = $4;\n $13 = $7;\n $14 = $13;\n HEAP32[$14>>2] = 0;\n $15 = (($13) + 4)|0;\n $16 = $15;\n HEAP32[$16>>2] = 0;\n $17 = $6;\n switch ($17|0) {\n case 0:  {\n  $18 = $5;\n  $19 = $18;\n  $20 = HEAP32[$19>>2]|0;\n  $21 = (($18) + 4)|0;\n  $22 = $21;\n  $23 = HEAP32[$22>>2]|0;\n  $24 = $7;\n  $25 = $24;\n  HEAP32[$25>>2] = $20;\n  $26 = (($24) + 4)|0;\n  $27 = $26;\n  HEAP32[$27>>2] = $23;\n  break;\n }\n case 2:  {\n  $28 = ((($12)) + 4|0);\n  $29 = HEAP32[$28>>2]|0;\n  $30 = ($29|0)<(0);\n  $31 = $30 << 31 >> 31;\n  $32 = $5;\n  $33 = $32;\n  $34 = HEAP32[$33>>2]|0;\n  $35 = (($32) + 4)|0;\n  $36 = $35;\n  $37 = HEAP32[$36>>2]|0;\n  $38 = (_i64Add(($29|0),($31|0),($34|0),($37|0))|0);\n  $39 = tempRet0;\n  $40 = (_i64Subtract(($38|0),($39|0),1,0)|0);\n  $41 = tempRet0;\n  $42 = $7;\n  $43 = $42;\n  HEAP32[$43>>2] = $40;\n  $44 = (($42) + 4)|0;\n  $45 = $44;\n  HEAP32[$45>>2] = $41;\n  break;\n }\n case 1:  {\n  $46 = ((($12)) + 8|0);\n  $47 = HEAP32[$46>>2]|0;\n  $48 = ($47|0)<(0);\n  $49 = $48 << 31 >> 31;\n  $50 = $5;\n  $51 = $50;\n  $52 = HEAP32[$51>>2]|0;\n  $53 = (($50) + 4)|0;\n  $54 = $53;\n  $55 = HEAP32[$54>>2]|0;\n  $56 = (_i64Add(($47|0),($49|0),($52|0),($55|0))|0);\n  $57 = tempRet0;\n  $58 = $7;\n  $59 = $58;\n  HEAP32[$59>>2] = $56;\n  $60 = (($58) + 4)|0;\n  $61 = $60;\n  HEAP32[$61>>2] = $57;\n  break;\n }\n default: {\n }\n }\n $62 = $7;\n $63 = $62;\n $64 = HEAP32[$63>>2]|0;\n $65 = (($62) + 4)|0;\n $66 = $65;\n $67 = HEAP32[$66>>2]|0;\n $68 = ((($12)) + 4|0);\n $69 = HEAP32[$68>>2]|0;\n $70 = ($69|0)<(0);\n $71 = $70 << 31 >> 31;\n $72 = ($67|0)>($71|0);\n $73 = ($64>>>0)>=($69>>>0);\n $74 = ($67|0)==($71|0);\n $75 = $74 & $73;\n $76 = $72 | $75;\n $77 = $7;\n $78 = $77;\n $79 = HEAP32[$78>>2]|0;\n $80 = (($77) + 4)|0;\n $81 = $80;\n $82 = HEAP32[$81>>2]|0;\n $83 = ($82|0)<(0);\n $or$cond = $76 | $83;\n $84 = ((($12)) + 12|0);\n if ($or$cond) {\n  HEAP8[$84>>0] = 1;\n  STACKTOP = sp;return;\n } else {\n  HEAP8[$84>>0] = 0;\n  $85 = $7;\n  $86 = $85;\n  $87 = HEAP32[$86>>2]|0;\n  $88 = (($85) + 4)|0;\n  $89 = $88;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = ((($12)) + 8|0);\n  HEAP32[$91>>2] = $87;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip13no_laszip_vlrC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4974);\n HEAP32[$2>>2] = (1808);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13no_laszip_vlrD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io7laz_vlr9to_schemaERKS1_i($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $5 = sp + 40|0;\n $8 = sp + 12|0;\n $9 = sp;\n $3 = $1;\n $4 = $2;\n $$expand_i1_val = 0;\n HEAP8[$5>>0] = $$expand_i1_val;\n __ZN6laszip7factory13record_schemaC2Ev($0);\n $6 = 0;\n while(1) {\n  $10 = $6;\n  $11 = $3;\n  $12 = ((($11)) + 32|0);\n  $13 = HEAPU8[$12>>0]|(HEAPU8[$12+1>>0]<<8);\n  $14 = $13&65535;\n  $15 = ($10|0)<($14|0);\n  if (!($15)) {\n   break;\n  }\n  $16 = $3;\n  $17 = ((($16)) + 34|0);\n  $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24);\n  $19 = $6;\n  $20 = (($18) + (($19*6)|0)|0);\n  $7 = $20;\n  $21 = $7;\n  $22 = HEAPU8[$21>>0]|(HEAPU8[$21+1>>0]<<8);\n  $23 = $22&65535;\n  $24 = $7;\n  $25 = ((($24)) + 2|0);\n  $26 = HEAPU8[$25>>0]|(HEAPU8[$25+1>>0]<<8);\n  $27 = $26&65535;\n  $28 = $7;\n  $29 = ((($28)) + 4|0);\n  $30 = HEAPU8[$29>>0]|(HEAPU8[$29+1>>0]<<8);\n  $31 = $30&65535;\n  __ZN6laszip7factory11record_itemC2Eiii($8,$23,$27,$31);\n  __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$8);\n  $32 = $7;\n  $33 = ((($32)) + 2|0);\n  $34 = HEAPU8[$33>>0]|(HEAPU8[$33+1>>0]<<8);\n  $35 = $34&65535;\n  $36 = $4;\n  $37 = (($36) - ($35))|0;\n  $4 = $37;\n  $38 = $6;\n  $39 = (($38) + 1)|0;\n  $6 = $39;\n }\n $40 = $4;\n $41 = ($40|0)<(0);\n if ($41) {\n  $42 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip25laszip_format_unsupportedC2Ev($42);\n  ___cxa_throw(($42|0),(152|0),(30|0));\n  // unreachable;\n }\n $43 = $4;\n $44 = ($43|0)!=(0);\n if ($44) {\n  $45 = $4;\n  __ZN6laszip7factory11record_itemC2Eiii($9,0,$45,2);\n  __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$9);\n }\n $$expand_i1_val2 = 1;\n HEAP8[$5>>0] = $$expand_i1_val2;\n $$pre_trunc = HEAP8[$5>>0]|0;\n $46 = $$pre_trunc&1;\n if ($46) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip7factory13record_schemaD2Ev($0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory13record_schemaaSEOS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $$byval_copy = sp + 17|0;\n $4 = sp + 16|0;\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = $6;\n $2 = $7;\n $3 = $8;\n $9 = $2;\n $10 = $3;\n ;HEAP8[$$byval_copy>>0]=HEAP8[$4>>0]|0;\n __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE13__move_assignERS6_NS_17integral_constantIbLb1EEE($9,$10,$$byval_copy);\n STACKTOP = sp;return ($7|0);\n}\nfunction __ZN6laszip2io7laz_vlr4fillEPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$arith = 0, $$overflow = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0;\n var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0;\n var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0;\n var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0;\n var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0;\n var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0;\n var $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0;\n var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0;\n var $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0;\n var $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0;\n var $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;\n var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;\n var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0;\n var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 464|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(464|0);\n $112 = $0;\n $113 = $1;\n $116 = $112;\n $117 = $113;\n $118 = $113;\n $119 = ((($118)) + 2|0);\n $109 = $117;\n $110 = $119;\n $111 = $116;\n $120 = $109;\n $108 = $120;\n $121 = $108;\n $122 = $110;\n $102 = $122;\n $123 = $102;\n $124 = $111;\n $103 = $124;\n $125 = $103;\n $104 = $121;\n $105 = $123;\n $106 = $125;\n $126 = $105;\n $127 = $104;\n $128 = $126;\n $129 = $127;\n $130 = (($128) - ($129))|0;\n $107 = $130;\n $131 = $107;\n $132 = ($131>>>0)>(0);\n if ($132) {\n  $133 = $106;\n  $134 = $104;\n  $135 = $107;\n  _memmove(($133|0),($134|0),($135|0))|0;\n }\n $136 = HEAPU8[$116>>0]|(HEAPU8[$116+1>>0]<<8);\n HEAP8[$116>>0]=$136&255;HEAP8[$116+1>>0]=$136>>8;\n $137 = $113;\n $138 = ((($137)) + 2|0);\n $113 = $138;\n $139 = $113;\n $140 = $113;\n $141 = ((($140)) + 2|0);\n $142 = ((($116)) + 2|0);\n $9 = $139;\n $10 = $141;\n $11 = $142;\n $143 = $9;\n $8 = $143;\n $144 = $8;\n $145 = $10;\n $2 = $145;\n $146 = $2;\n $147 = $11;\n $3 = $147;\n $148 = $3;\n $4 = $144;\n $5 = $146;\n $6 = $148;\n $149 = $5;\n $150 = $4;\n $151 = $149;\n $152 = $150;\n $153 = (($151) - ($152))|0;\n $7 = $153;\n $154 = $7;\n $155 = ($154>>>0)>(0);\n if ($155) {\n  $156 = $6;\n  $157 = $4;\n  $158 = $7;\n  _memmove(($156|0),($157|0),($158|0))|0;\n }\n $159 = ((($116)) + 2|0);\n $160 = HEAPU8[$159>>0]|(HEAPU8[$159+1>>0]<<8);\n $161 = ((($116)) + 2|0);\n HEAP8[$161>>0]=$160&255;HEAP8[$161+1>>0]=$160>>8;\n $162 = $113;\n $163 = ((($162)) + 2|0);\n $113 = $163;\n $164 = $113;\n $165 = ((($164)) + 1|0);\n $113 = $165;\n $166 = HEAP8[$164>>0]|0;\n $167 = ((($116)) + 4|0);\n HEAP8[$167>>0] = $166;\n $168 = $113;\n $169 = ((($168)) + 1|0);\n $113 = $169;\n $170 = HEAP8[$168>>0]|0;\n $171 = ((($116)) + 4|0);\n $172 = ((($171)) + 1|0);\n HEAP8[$172>>0] = $170;\n $173 = $113;\n $174 = $113;\n $175 = ((($174)) + 2|0);\n $176 = ((($116)) + 4|0);\n $177 = ((($176)) + 2|0);\n $19 = $173;\n $20 = $175;\n $21 = $177;\n $178 = $19;\n $18 = $178;\n $179 = $18;\n $180 = $20;\n $12 = $180;\n $181 = $12;\n $182 = $21;\n $13 = $182;\n $183 = $13;\n $14 = $179;\n $15 = $181;\n $16 = $183;\n $184 = $15;\n $185 = $14;\n $186 = $184;\n $187 = $185;\n $188 = (($186) - ($187))|0;\n $17 = $188;\n $189 = $17;\n $190 = ($189>>>0)>(0);\n if ($190) {\n  $191 = $16;\n  $192 = $14;\n  $193 = $17;\n  _memmove(($191|0),($192|0),($193|0))|0;\n }\n $194 = ((($116)) + 4|0);\n $195 = ((($194)) + 2|0);\n $196 = HEAPU8[$195>>0]|(HEAPU8[$195+1>>0]<<8);\n $197 = ((($116)) + 4|0);\n $198 = ((($197)) + 2|0);\n HEAP8[$198>>0]=$196&255;HEAP8[$198+1>>0]=$196>>8;\n $199 = $113;\n $200 = ((($199)) + 2|0);\n $113 = $200;\n $201 = $113;\n $202 = $113;\n $203 = ((($202)) + 4|0);\n $204 = ((($116)) + 8|0);\n $29 = $201;\n $30 = $203;\n $31 = $204;\n $205 = $29;\n $28 = $205;\n $206 = $28;\n $207 = $30;\n $22 = $207;\n $208 = $22;\n $209 = $31;\n $23 = $209;\n $210 = $23;\n $24 = $206;\n $25 = $208;\n $26 = $210;\n $211 = $25;\n $212 = $24;\n $213 = $211;\n $214 = $212;\n $215 = (($213) - ($214))|0;\n $27 = $215;\n $216 = $27;\n $217 = ($216>>>0)>(0);\n if ($217) {\n  $218 = $26;\n  $219 = $24;\n  $220 = $27;\n  _memmove(($218|0),($219|0),($220|0))|0;\n }\n $221 = ((($116)) + 8|0);\n $222 = HEAPU8[$221>>0]|(HEAPU8[$221+1>>0]<<8)|(HEAPU8[$221+2>>0]<<16)|(HEAPU8[$221+3>>0]<<24);\n $223 = ((($116)) + 8|0);\n HEAP8[$223>>0]=$222&255;HEAP8[$223+1>>0]=($222>>8)&255;HEAP8[$223+2>>0]=($222>>16)&255;HEAP8[$223+3>>0]=$222>>24;\n $224 = $113;\n $225 = ((($224)) + 4|0);\n $113 = $225;\n $226 = $113;\n $227 = $113;\n $228 = ((($227)) + 4|0);\n $229 = ((($116)) + 12|0);\n $39 = $226;\n $40 = $228;\n $41 = $229;\n $230 = $39;\n $38 = $230;\n $231 = $38;\n $232 = $40;\n $32 = $232;\n $233 = $32;\n $234 = $41;\n $33 = $234;\n $235 = $33;\n $34 = $231;\n $35 = $233;\n $36 = $235;\n $236 = $35;\n $237 = $34;\n $238 = $236;\n $239 = $237;\n $240 = (($238) - ($239))|0;\n $37 = $240;\n $241 = $37;\n $242 = ($241>>>0)>(0);\n if ($242) {\n  $243 = $36;\n  $244 = $34;\n  $245 = $37;\n  _memmove(($243|0),($244|0),($245|0))|0;\n }\n $246 = ((($116)) + 12|0);\n $247 = HEAPU8[$246>>0]|(HEAPU8[$246+1>>0]<<8)|(HEAPU8[$246+2>>0]<<16)|(HEAPU8[$246+3>>0]<<24);\n $248 = ((($116)) + 12|0);\n HEAP8[$248>>0]=$247&255;HEAP8[$248+1>>0]=($247>>8)&255;HEAP8[$248+2>>0]=($247>>16)&255;HEAP8[$248+3>>0]=$247>>24;\n $249 = $113;\n $250 = ((($249)) + 4|0);\n $113 = $250;\n $251 = $113;\n $252 = $113;\n $253 = ((($252)) + 8|0);\n $254 = ((($116)) + 16|0);\n $49 = $251;\n $50 = $253;\n $51 = $254;\n $255 = $49;\n $48 = $255;\n $256 = $48;\n $257 = $50;\n $42 = $257;\n $258 = $42;\n $259 = $51;\n $43 = $259;\n $260 = $43;\n $44 = $256;\n $45 = $258;\n $46 = $260;\n $261 = $45;\n $262 = $44;\n $263 = $261;\n $264 = $262;\n $265 = (($263) - ($264))|0;\n $47 = $265;\n $266 = $47;\n $267 = ($266>>>0)>(0);\n if ($267) {\n  $268 = $46;\n  $269 = $44;\n  $270 = $47;\n  _memmove(($268|0),($269|0),($270|0))|0;\n }\n $271 = ((($116)) + 16|0);\n $272 = $271;\n $273 = $272;\n $274 = HEAPU8[$273>>0]|(HEAPU8[$273+1>>0]<<8)|(HEAPU8[$273+2>>0]<<16)|(HEAPU8[$273+3>>0]<<24);\n $275 = (($272) + 4)|0;\n $276 = $275;\n $277 = HEAPU8[$276>>0]|(HEAPU8[$276+1>>0]<<8)|(HEAPU8[$276+2>>0]<<16)|(HEAPU8[$276+3>>0]<<24);\n $278 = ((($116)) + 16|0);\n $279 = $278;\n $280 = $279;\n HEAP8[$280>>0]=$274&255;HEAP8[$280+1>>0]=($274>>8)&255;HEAP8[$280+2>>0]=($274>>16)&255;HEAP8[$280+3>>0]=$274>>24;\n $281 = (($279) + 4)|0;\n $282 = $281;\n HEAP8[$282>>0]=$277&255;HEAP8[$282+1>>0]=($277>>8)&255;HEAP8[$282+2>>0]=($277>>16)&255;HEAP8[$282+3>>0]=$277>>24;\n $283 = $113;\n $284 = ((($283)) + 8|0);\n $113 = $284;\n $285 = $113;\n $286 = $113;\n $287 = ((($286)) + 8|0);\n $288 = ((($116)) + 24|0);\n $59 = $285;\n $60 = $287;\n $61 = $288;\n $289 = $59;\n $58 = $289;\n $290 = $58;\n $291 = $60;\n $52 = $291;\n $292 = $52;\n $293 = $61;\n $53 = $293;\n $294 = $53;\n $54 = $290;\n $55 = $292;\n $56 = $294;\n $295 = $55;\n $296 = $54;\n $297 = $295;\n $298 = $296;\n $299 = (($297) - ($298))|0;\n $57 = $299;\n $300 = $57;\n $301 = ($300>>>0)>(0);\n if ($301) {\n  $302 = $56;\n  $303 = $54;\n  $304 = $57;\n  _memmove(($302|0),($303|0),($304|0))|0;\n }\n $305 = ((($116)) + 24|0);\n $306 = $305;\n $307 = $306;\n $308 = HEAPU8[$307>>0]|(HEAPU8[$307+1>>0]<<8)|(HEAPU8[$307+2>>0]<<16)|(HEAPU8[$307+3>>0]<<24);\n $309 = (($306) + 4)|0;\n $310 = $309;\n $311 = HEAPU8[$310>>0]|(HEAPU8[$310+1>>0]<<8)|(HEAPU8[$310+2>>0]<<16)|(HEAPU8[$310+3>>0]<<24);\n $312 = ((($116)) + 24|0);\n $313 = $312;\n $314 = $313;\n HEAP8[$314>>0]=$308&255;HEAP8[$314+1>>0]=($308>>8)&255;HEAP8[$314+2>>0]=($308>>16)&255;HEAP8[$314+3>>0]=$308>>24;\n $315 = (($313) + 4)|0;\n $316 = $315;\n HEAP8[$316>>0]=$311&255;HEAP8[$316+1>>0]=($311>>8)&255;HEAP8[$316+2>>0]=($311>>16)&255;HEAP8[$316+3>>0]=$311>>24;\n $317 = $113;\n $318 = ((($317)) + 8|0);\n $113 = $318;\n $319 = $113;\n $320 = $113;\n $321 = ((($320)) + 2|0);\n $322 = ((($116)) + 32|0);\n $69 = $319;\n $70 = $321;\n $71 = $322;\n $323 = $69;\n $68 = $323;\n $324 = $68;\n $325 = $70;\n $62 = $325;\n $326 = $62;\n $327 = $71;\n $63 = $327;\n $328 = $63;\n $64 = $324;\n $65 = $326;\n $66 = $328;\n $329 = $65;\n $330 = $64;\n $331 = $329;\n $332 = $330;\n $333 = (($331) - ($332))|0;\n $67 = $333;\n $334 = $67;\n $335 = ($334>>>0)>(0);\n if ($335) {\n  $336 = $66;\n  $337 = $64;\n  $338 = $67;\n  _memmove(($336|0),($337|0),($338|0))|0;\n }\n $339 = ((($116)) + 32|0);\n $340 = HEAPU8[$339>>0]|(HEAPU8[$339+1>>0]<<8);\n $341 = ((($116)) + 32|0);\n HEAP8[$341>>0]=$340&255;HEAP8[$341+1>>0]=$340>>8;\n $342 = $113;\n $343 = ((($342)) + 2|0);\n $113 = $343;\n $344 = ((($116)) + 34|0);\n $345 = HEAPU8[$344>>0]|(HEAPU8[$344+1>>0]<<8)|(HEAPU8[$344+2>>0]<<16)|(HEAPU8[$344+3>>0]<<24);\n $346 = ($345|0)==(0|0);\n if (!($346)) {\n  __ZdaPv($345);\n }\n $347 = ((($116)) + 32|0);\n $348 = HEAPU8[$347>>0]|(HEAPU8[$347+1>>0]<<8);\n $349 = $348&65535;\n $$arith = ($349*6)|0;\n $$overflow = ($349>>>0)>(715827882);\n $350 = $$overflow ? -1 : $$arith;\n $351 = (__Znaj($350)|0);\n $352 = ((($116)) + 34|0);\n HEAP8[$352>>0]=$351&255;HEAP8[$352+1>>0]=($351>>8)&255;HEAP8[$352+2>>0]=($351>>16)&255;HEAP8[$352+3>>0]=$351>>24;\n $114 = 0;\n while(1) {\n  $353 = $114;\n  $354 = ((($116)) + 32|0);\n  $355 = HEAPU8[$354>>0]|(HEAPU8[$354+1>>0]<<8);\n  $356 = $355&65535;\n  $357 = ($353|0)<($356|0);\n  if (!($357)) {\n   break;\n  }\n  $358 = ((($116)) + 34|0);\n  $359 = HEAPU8[$358>>0]|(HEAPU8[$358+1>>0]<<8)|(HEAPU8[$358+2>>0]<<16)|(HEAPU8[$358+3>>0]<<24);\n  $360 = $114;\n  $361 = (($359) + (($360*6)|0)|0);\n  $115 = $361;\n  $362 = $113;\n  $363 = $113;\n  $364 = ((($363)) + 2|0);\n  $365 = $115;\n  $79 = $362;\n  $80 = $364;\n  $81 = $365;\n  $366 = $79;\n  $78 = $366;\n  $367 = $78;\n  $368 = $80;\n  $72 = $368;\n  $369 = $72;\n  $370 = $81;\n  $73 = $370;\n  $371 = $73;\n  $74 = $367;\n  $75 = $369;\n  $76 = $371;\n  $372 = $75;\n  $373 = $74;\n  $374 = $372;\n  $375 = $373;\n  $376 = (($374) - ($375))|0;\n  $77 = $376;\n  $377 = $77;\n  $378 = ($377>>>0)>(0);\n  if ($378) {\n   $379 = $76;\n   $380 = $74;\n   $381 = $77;\n   _memmove(($379|0),($380|0),($381|0))|0;\n  }\n  $382 = $115;\n  $383 = HEAPU8[$382>>0]|(HEAPU8[$382+1>>0]<<8);\n  $384 = $115;\n  HEAP8[$384>>0]=$383&255;HEAP8[$384+1>>0]=$383>>8;\n  $385 = $113;\n  $386 = ((($385)) + 2|0);\n  $113 = $386;\n  $387 = $113;\n  $388 = $113;\n  $389 = ((($388)) + 2|0);\n  $390 = $115;\n  $391 = ((($390)) + 2|0);\n  $89 = $387;\n  $90 = $389;\n  $91 = $391;\n  $392 = $89;\n  $88 = $392;\n  $393 = $88;\n  $394 = $90;\n  $82 = $394;\n  $395 = $82;\n  $396 = $91;\n  $83 = $396;\n  $397 = $83;\n  $84 = $393;\n  $85 = $395;\n  $86 = $397;\n  $398 = $85;\n  $399 = $84;\n  $400 = $398;\n  $401 = $399;\n  $402 = (($400) - ($401))|0;\n  $87 = $402;\n  $403 = $87;\n  $404 = ($403>>>0)>(0);\n  if ($404) {\n   $405 = $86;\n   $406 = $84;\n   $407 = $87;\n   _memmove(($405|0),($406|0),($407|0))|0;\n  }\n  $408 = $115;\n  $409 = ((($408)) + 2|0);\n  $410 = HEAPU8[$409>>0]|(HEAPU8[$409+1>>0]<<8);\n  $411 = $115;\n  $412 = ((($411)) + 2|0);\n  HEAP8[$412>>0]=$410&255;HEAP8[$412+1>>0]=$410>>8;\n  $413 = $113;\n  $414 = ((($413)) + 2|0);\n  $113 = $414;\n  $415 = $113;\n  $416 = $113;\n  $417 = ((($416)) + 2|0);\n  $418 = $115;\n  $419 = ((($418)) + 4|0);\n  $99 = $415;\n  $100 = $417;\n  $101 = $419;\n  $420 = $99;\n  $98 = $420;\n  $421 = $98;\n  $422 = $100;\n  $92 = $422;\n  $423 = $92;\n  $424 = $101;\n  $93 = $424;\n  $425 = $93;\n  $94 = $421;\n  $95 = $423;\n  $96 = $425;\n  $426 = $95;\n  $427 = $94;\n  $428 = $426;\n  $429 = $427;\n  $430 = (($428) - ($429))|0;\n  $97 = $430;\n  $431 = $97;\n  $432 = ($431>>>0)>(0);\n  if ($432) {\n   $433 = $96;\n   $434 = $94;\n   $435 = $97;\n   _memmove(($433|0),($434|0),($435|0))|0;\n  }\n  $436 = $115;\n  $437 = ((($436)) + 4|0);\n  $438 = HEAPU8[$437>>0]|(HEAPU8[$437+1>>0]<<8);\n  $439 = $115;\n  $440 = ((($439)) + 4|0);\n  HEAP8[$440>>0]=$438&255;HEAP8[$440+1>>0]=$438>>8;\n  $441 = $113;\n  $442 = ((($441)) + 2|0);\n  $113 = $442;\n  $443 = $114;\n  $444 = (($443) + 1)|0;\n  $114 = $444;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip25laszip_format_unsupportedC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4918);\n HEAP32[$2>>2] = (1788);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip25laszip_format_unsupportedD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip25laszip_format_unsupportedD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip25laszip_format_unsupportedD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13no_laszip_vlrD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13no_laszip_vlrD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $14 = sp;\n $19 = sp + 113|0;\n $29 = sp + 112|0;\n $30 = $0;\n $31 = $1;\n $32 = $30;\n $33 = $31;\n $27 = $32;\n $28 = $33;\n $34 = $27;\n $35 = ((($34)) + 4|0);\n $36 = HEAP32[$35>>2]|0;\n $26 = $34;\n $37 = $26;\n $38 = ((($37)) + 8|0);\n $25 = $38;\n $39 = $25;\n $24 = $39;\n $40 = $24;\n $41 = HEAP32[$40>>2]|0;\n $42 = ($36|0)!=($41|0);\n if ($42) {\n  $21 = $29;\n  $22 = $34;\n  $23 = 1;\n  $4 = $34;\n  $43 = $4;\n  $44 = ((($43)) + 8|0);\n  $3 = $44;\n  $45 = $3;\n  $2 = $45;\n  $46 = $2;\n  $47 = ((($34)) + 4|0);\n  $48 = HEAP32[$47>>2]|0;\n  $5 = $48;\n  $49 = $5;\n  $50 = $28;\n  $16 = $46;\n  $17 = $49;\n  $18 = $50;\n  $51 = $16;\n  $52 = $17;\n  $53 = $18;\n  $15 = $53;\n  $54 = $15;\n  ;HEAP8[$14>>0]=HEAP8[$19>>0]|0;\n  $11 = $51;\n  $12 = $52;\n  $13 = $54;\n  $55 = $11;\n  $56 = $12;\n  $57 = $13;\n  $10 = $57;\n  $58 = $10;\n  $7 = $55;\n  $8 = $56;\n  $9 = $58;\n  $59 = $8;\n  $60 = $9;\n  $6 = $60;\n  $61 = $6;\n  ;HEAP32[$59>>2]=HEAP32[$61>>2]|0;HEAP32[$59+4>>2]=HEAP32[$61+4>>2]|0;HEAP32[$59+8>>2]=HEAP32[$61+8>>2]|0;\n  $20 = $29;\n  $62 = ((($34)) + 4|0);\n  $63 = HEAP32[$62>>2]|0;\n  $64 = ((($63)) + 12|0);\n  HEAP32[$62>>2] = $64;\n  STACKTOP = sp;return;\n } else {\n  $65 = $28;\n  __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_($34,$65);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7factory11record_itemC2Eiii($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $7 = $3;\n $8 = $4;\n $9 = $5;\n HEAP32[$8>>2] = $9;\n $10 = ((($8)) + 4|0);\n $11 = $6;\n HEAP32[$10>>2] = $11;\n $12 = ((($8)) + 8|0);\n $13 = $7;\n HEAP32[$12>>2] = $13;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $10 = sp + 8|0;\n $15 = sp + 193|0;\n $24 = sp;\n $27 = sp + 192|0;\n $35 = sp + 72|0;\n $38 = sp + 60|0;\n $46 = sp + 12|0;\n $43 = $0;\n $44 = $1;\n $47 = $43;\n $42 = $47;\n $48 = $42;\n $49 = ((($48)) + 8|0);\n $41 = $49;\n $50 = $41;\n $40 = $50;\n $51 = $40;\n $45 = $51;\n $39 = $47;\n $52 = $39;\n $53 = ((($52)) + 4|0);\n $54 = HEAP32[$53>>2]|0;\n $55 = HEAP32[$52>>2]|0;\n $56 = $54;\n $57 = $55;\n $58 = (($56) - ($57))|0;\n $59 = (($58|0) / 12)&-1;\n $60 = (($59) + 1)|0;\n $34 = $47;\n HEAP32[$35>>2] = $60;\n $61 = $34;\n $62 = (__ZNKSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE8max_sizeEv($61)|0);\n $36 = $62;\n $63 = HEAP32[$35>>2]|0;\n $64 = $36;\n $65 = ($63>>>0)>($64>>>0);\n if ($65) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61);\n  // unreachable;\n }\n $32 = $61;\n $66 = $32;\n $31 = $66;\n $67 = $31;\n $30 = $67;\n $68 = $30;\n $69 = ((($68)) + 8|0);\n $29 = $69;\n $70 = $29;\n $28 = $70;\n $71 = $28;\n $72 = HEAP32[$71>>2]|0;\n $73 = HEAP32[$67>>2]|0;\n $74 = $72;\n $75 = $73;\n $76 = (($74) - ($75))|0;\n $77 = (($76|0) / 12)&-1;\n $37 = $77;\n $78 = $37;\n $79 = $36;\n $80 = (($79>>>0) / 2)&-1;\n $81 = ($78>>>0)>=($80>>>0);\n if ($81) {\n  $82 = $36;\n  $33 = $82;\n } else {\n  $83 = $37;\n  $84 = $83<<1;\n  HEAP32[$38>>2] = $84;\n  $25 = $38;\n  $26 = $35;\n  $85 = $25;\n  $86 = $26;\n  ;HEAP8[$24>>0]=HEAP8[$27>>0]|0;\n  $22 = $85;\n  $23 = $86;\n  $87 = $22;\n  $88 = $23;\n  $19 = $24;\n  $20 = $87;\n  $21 = $88;\n  $89 = $20;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = $21;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = ($90>>>0)<($92>>>0);\n  $94 = $23;\n  $95 = $22;\n  $96 = $93 ? $94 : $95;\n  $97 = HEAP32[$96>>2]|0;\n  $33 = $97;\n }\n $98 = $33;\n $18 = $47;\n $99 = $18;\n $100 = ((($99)) + 4|0);\n $101 = HEAP32[$100>>2]|0;\n $102 = HEAP32[$99>>2]|0;\n $103 = $101;\n $104 = $102;\n $105 = (($103) - ($104))|0;\n $106 = (($105|0) / 12)&-1;\n $107 = $45;\n __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEEC2EjjS6_($46,$98,$106,$107);\n $108 = $45;\n $109 = ((($46)) + 8|0);\n $110 = HEAP32[$109>>2]|0;\n $17 = $110;\n $111 = $17;\n $112 = $44;\n $16 = $112;\n $113 = $16;\n $12 = $108;\n $13 = $111;\n $14 = $113;\n $114 = $12;\n $115 = $13;\n $116 = $14;\n $11 = $116;\n $117 = $11;\n ;HEAP8[$10>>0]=HEAP8[$15>>0]|0;\n $7 = $114;\n $8 = $115;\n $9 = $117;\n $118 = $7;\n $119 = $8;\n $120 = $9;\n $6 = $120;\n $121 = $6;\n $3 = $118;\n $4 = $119;\n $5 = $121;\n $122 = $4;\n $123 = $5;\n $2 = $123;\n $124 = $2;\n ;HEAP32[$122>>2]=HEAP32[$124>>2]|0;HEAP32[$122+4>>2]=HEAP32[$124+4>>2]|0;HEAP32[$122+8>>2]=HEAP32[$124+8>>2]|0;\n $125 = ((($46)) + 8|0);\n $126 = HEAP32[$125>>2]|0;\n $127 = ((($126)) + 12|0);\n HEAP32[$125>>2] = $127;\n __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($47,$46);\n __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEED2Ev($46);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEEC2EjjS6_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(357913941);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = ($68*12)|0;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + (($74*12)|0)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + (($79*12)|0)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0);\n $15 = sp + 288|0;\n $21 = sp + 264|0;\n $33 = sp + 216|0;\n $86 = $0;\n $87 = $1;\n $88 = $86;\n $85 = $88;\n $89 = $85;\n $84 = $89;\n $90 = $84;\n $91 = HEAP32[$90>>2]|0;\n $83 = $91;\n $92 = $83;\n $62 = $89;\n $93 = $62;\n $94 = HEAP32[$93>>2]|0;\n $61 = $94;\n $95 = $61;\n $67 = $89;\n $96 = $67;\n $66 = $96;\n $97 = $66;\n $65 = $97;\n $98 = $65;\n $99 = ((($98)) + 8|0);\n $64 = $99;\n $100 = $64;\n $63 = $100;\n $101 = $63;\n $102 = HEAP32[$101>>2]|0;\n $103 = HEAP32[$97>>2]|0;\n $104 = $102;\n $105 = $103;\n $106 = (($104) - ($105))|0;\n $107 = (($106|0) / 12)&-1;\n $108 = (($95) + (($107*12)|0)|0);\n $69 = $89;\n $109 = $69;\n $110 = HEAP32[$109>>2]|0;\n $68 = $110;\n $111 = $68;\n $70 = $89;\n $112 = $70;\n $113 = ((($112)) + 4|0);\n $114 = HEAP32[$113>>2]|0;\n $115 = HEAP32[$112>>2]|0;\n $116 = $114;\n $117 = $115;\n $118 = (($116) - ($117))|0;\n $119 = (($118|0) / 12)&-1;\n $120 = (($111) + (($119*12)|0)|0);\n $72 = $89;\n $121 = $72;\n $122 = HEAP32[$121>>2]|0;\n $71 = $122;\n $123 = $71;\n $77 = $89;\n $124 = $77;\n $76 = $124;\n $125 = $76;\n $75 = $125;\n $126 = $75;\n $127 = ((($126)) + 8|0);\n $74 = $127;\n $128 = $74;\n $73 = $128;\n $129 = $73;\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$125>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 12)&-1;\n $136 = (($123) + (($135*12)|0)|0);\n $78 = $89;\n $79 = $92;\n $80 = $108;\n $81 = $120;\n $82 = $136;\n $4 = $88;\n $137 = $4;\n $138 = ((($137)) + 8|0);\n $3 = $138;\n $139 = $3;\n $2 = $139;\n $140 = $2;\n $141 = HEAP32[$88>>2]|0;\n $142 = ((($88)) + 4|0);\n $143 = HEAP32[$142>>2]|0;\n $144 = $87;\n $145 = ((($144)) + 4|0);\n $5 = $140;\n $6 = $141;\n $7 = $143;\n $8 = $145;\n $146 = $7;\n $147 = $6;\n $148 = $146;\n $149 = $147;\n $150 = (($148) - ($149))|0;\n $151 = (($150|0) / 12)&-1;\n $9 = $151;\n $152 = $9;\n $153 = $8;\n $154 = HEAP32[$153>>2]|0;\n $155 = (0 - ($152))|0;\n $156 = (($154) + (($155*12)|0)|0);\n HEAP32[$153>>2] = $156;\n $157 = $9;\n $158 = ($157|0)>(0);\n if ($158) {\n  $159 = $8;\n  $160 = HEAP32[$159>>2]|0;\n  $161 = $6;\n  $162 = $9;\n  $163 = ($162*12)|0;\n  _memcpy(($160|0),($161|0),($163|0))|0;\n }\n $164 = $87;\n $165 = ((($164)) + 4|0);\n $13 = $88;\n $14 = $165;\n $166 = $13;\n $12 = $166;\n $167 = $12;\n $168 = HEAP32[$167>>2]|0;\n HEAP32[$15>>2] = $168;\n $169 = $14;\n $10 = $169;\n $170 = $10;\n $171 = HEAP32[$170>>2]|0;\n $172 = $13;\n HEAP32[$172>>2] = $171;\n $11 = $15;\n $173 = $11;\n $174 = HEAP32[$173>>2]|0;\n $175 = $14;\n HEAP32[$175>>2] = $174;\n $176 = ((($88)) + 4|0);\n $177 = $87;\n $178 = ((($177)) + 8|0);\n $19 = $176;\n $20 = $178;\n $179 = $19;\n $18 = $179;\n $180 = $18;\n $181 = HEAP32[$180>>2]|0;\n HEAP32[$21>>2] = $181;\n $182 = $20;\n $16 = $182;\n $183 = $16;\n $184 = HEAP32[$183>>2]|0;\n $185 = $19;\n HEAP32[$185>>2] = $184;\n $17 = $21;\n $186 = $17;\n $187 = HEAP32[$186>>2]|0;\n $188 = $20;\n HEAP32[$188>>2] = $187;\n $24 = $88;\n $189 = $24;\n $190 = ((($189)) + 8|0);\n $23 = $190;\n $191 = $23;\n $22 = $191;\n $192 = $22;\n $193 = $87;\n $27 = $193;\n $194 = $27;\n $195 = ((($194)) + 12|0);\n $26 = $195;\n $196 = $26;\n $25 = $196;\n $197 = $25;\n $31 = $192;\n $32 = $197;\n $198 = $31;\n $30 = $198;\n $199 = $30;\n $200 = HEAP32[$199>>2]|0;\n HEAP32[$33>>2] = $200;\n $201 = $32;\n $28 = $201;\n $202 = $28;\n $203 = HEAP32[$202>>2]|0;\n $204 = $31;\n HEAP32[$204>>2] = $203;\n $29 = $33;\n $205 = $29;\n $206 = HEAP32[$205>>2]|0;\n $207 = $32;\n HEAP32[$207>>2] = $206;\n $208 = $87;\n $209 = ((($208)) + 4|0);\n $210 = HEAP32[$209>>2]|0;\n $211 = $87;\n HEAP32[$211>>2] = $210;\n $34 = $88;\n $212 = $34;\n $213 = ((($212)) + 4|0);\n $214 = HEAP32[$213>>2]|0;\n $215 = HEAP32[$212>>2]|0;\n $216 = $214;\n $217 = $215;\n $218 = (($216) - ($217))|0;\n $219 = (($218|0) / 12)&-1;\n $58 = $88;\n $59 = $219;\n $220 = $58;\n $57 = $220;\n $221 = $57;\n $222 = HEAP32[$221>>2]|0;\n $56 = $222;\n $223 = $56;\n $36 = $220;\n $224 = $36;\n $225 = HEAP32[$224>>2]|0;\n $35 = $225;\n $226 = $35;\n $41 = $220;\n $227 = $41;\n $40 = $227;\n $228 = $40;\n $39 = $228;\n $229 = $39;\n $230 = ((($229)) + 8|0);\n $38 = $230;\n $231 = $38;\n $37 = $231;\n $232 = $37;\n $233 = HEAP32[$232>>2]|0;\n $234 = HEAP32[$228>>2]|0;\n $235 = $233;\n $236 = $234;\n $237 = (($235) - ($236))|0;\n $238 = (($237|0) / 12)&-1;\n $239 = (($226) + (($238*12)|0)|0);\n $43 = $220;\n $240 = $43;\n $241 = HEAP32[$240>>2]|0;\n $42 = $241;\n $242 = $42;\n $48 = $220;\n $243 = $48;\n $47 = $243;\n $244 = $47;\n $46 = $244;\n $245 = $46;\n $246 = ((($245)) + 8|0);\n $45 = $246;\n $247 = $45;\n $44 = $247;\n $248 = $44;\n $249 = HEAP32[$248>>2]|0;\n $250 = HEAP32[$244>>2]|0;\n $251 = $249;\n $252 = $250;\n $253 = (($251) - ($252))|0;\n $254 = (($253|0) / 12)&-1;\n $255 = (($242) + (($254*12)|0)|0);\n $50 = $220;\n $256 = $50;\n $257 = HEAP32[$256>>2]|0;\n $49 = $257;\n $258 = $49;\n $259 = $59;\n $260 = (($258) + (($259*12)|0)|0);\n $51 = $220;\n $52 = $223;\n $53 = $239;\n $54 = $255;\n $55 = $260;\n $60 = $88;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -12|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n }\n $60 = HEAP32[$35>>2]|0;\n $61 = ($60|0)!=(0|0);\n if (!($61)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $62 = $14;\n $63 = ((($62)) + 12|0);\n $13 = $63;\n $64 = $13;\n $65 = ((($64)) + 4|0);\n $12 = $65;\n $66 = $12;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$35>>2]|0;\n $4 = $35;\n $69 = $4;\n $3 = $69;\n $70 = $3;\n $71 = ((($70)) + 12|0);\n $2 = $71;\n $72 = $2;\n $1 = $72;\n $73 = $1;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 12)&-1;\n $9 = $67;\n $10 = $68;\n $11 = $79;\n $80 = $9;\n $81 = $10;\n $82 = $11;\n $6 = $80;\n $7 = $81;\n $8 = $82;\n $83 = $7;\n $5 = $83;\n $84 = $5;\n __ZdlPv($84);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 357913941;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE13__move_assignERS6_NS_17integral_constantIbLb1EEE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);\n $21 = sp;\n $24 = sp + 92|0;\n $25 = $0;\n $26 = $1;\n $27 = $25;\n __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE10deallocateEv($27);\n $28 = $26;\n $22 = $27;\n $23 = $28;\n $29 = $22;\n $30 = $23;\n ;HEAP8[$21>>0]=HEAP8[$24>>0]|0;\n $19 = $29;\n $20 = $30;\n $31 = $19;\n $32 = $20;\n $18 = $32;\n $33 = $18;\n $34 = ((($33)) + 8|0);\n $17 = $34;\n $35 = $17;\n $16 = $35;\n $36 = $16;\n $12 = $36;\n $15 = $31;\n $37 = $15;\n $38 = ((($37)) + 8|0);\n $14 = $38;\n $39 = $14;\n $13 = $39;\n $40 = $26;\n $41 = HEAP32[$40>>2]|0;\n HEAP32[$27>>2] = $41;\n $42 = $26;\n $43 = ((($42)) + 4|0);\n $44 = HEAP32[$43>>2]|0;\n $45 = ((($27)) + 4|0);\n HEAP32[$45>>2] = $44;\n $46 = $26;\n $5 = $46;\n $47 = $5;\n $48 = ((($47)) + 8|0);\n $4 = $48;\n $49 = $4;\n $3 = $49;\n $50 = $3;\n $51 = HEAP32[$50>>2]|0;\n $8 = $27;\n $52 = $8;\n $53 = ((($52)) + 8|0);\n $7 = $53;\n $54 = $7;\n $6 = $54;\n $55 = $6;\n HEAP32[$55>>2] = $51;\n $56 = $26;\n $11 = $56;\n $57 = $11;\n $58 = ((($57)) + 8|0);\n $10 = $58;\n $59 = $10;\n $9 = $59;\n $60 = $9;\n HEAP32[$60>>2] = 0;\n $61 = $26;\n $62 = ((($61)) + 4|0);\n HEAP32[$62>>2] = 0;\n $63 = $26;\n HEAP32[$63>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE10deallocateEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0);\n $45 = sp;\n $48 = sp + 236|0;\n $60 = $0;\n $61 = $60;\n $62 = HEAP32[$61>>2]|0;\n $63 = ($62|0)!=(0|0);\n if (!($63)) {\n  STACKTOP = sp;return;\n }\n $58 = $61;\n $64 = $58;\n $57 = $64;\n $65 = $57;\n $66 = ((($65)) + 4|0);\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$65>>2]|0;\n $69 = $67;\n $70 = $68;\n $71 = (($69) - ($70))|0;\n $72 = (($71|0) / 12)&-1;\n $59 = $72;\n $56 = $64;\n $73 = $56;\n $74 = HEAP32[$73>>2]|0;\n $53 = $73;\n $54 = $74;\n $75 = $53;\n $76 = ((($75)) + 4|0);\n $77 = HEAP32[$76>>2]|0;\n $55 = $77;\n while(1) {\n  $78 = $54;\n  $79 = $55;\n  $80 = ($78|0)!=($79|0);\n  if (!($80)) {\n   break;\n  }\n  $52 = $75;\n  $81 = $52;\n  $82 = ((($81)) + 8|0);\n  $51 = $82;\n  $83 = $51;\n  $50 = $83;\n  $84 = $50;\n  $85 = $55;\n  $86 = ((($85)) + -12|0);\n  $55 = $86;\n  $49 = $86;\n  $87 = $49;\n  $46 = $84;\n  $47 = $87;\n  $88 = $46;\n  $89 = $47;\n  ;HEAP8[$45>>0]=HEAP8[$48>>0]|0;\n  $43 = $88;\n  $44 = $89;\n  $90 = $43;\n  $91 = $44;\n  $41 = $90;\n  $42 = $91;\n }\n $92 = $54;\n $93 = ((($75)) + 4|0);\n HEAP32[$93>>2] = $92;\n $94 = $59;\n $38 = $64;\n $39 = $94;\n $95 = $38;\n $37 = $95;\n $96 = $37;\n $97 = HEAP32[$96>>2]|0;\n $36 = $97;\n $98 = $36;\n $20 = $95;\n $99 = $20;\n $100 = HEAP32[$99>>2]|0;\n $19 = $100;\n $101 = $19;\n $25 = $95;\n $102 = $25;\n $24 = $102;\n $103 = $24;\n $23 = $103;\n $104 = $23;\n $105 = ((($104)) + 8|0);\n $22 = $105;\n $106 = $22;\n $21 = $106;\n $107 = $21;\n $108 = HEAP32[$107>>2]|0;\n $109 = HEAP32[$103>>2]|0;\n $110 = $108;\n $111 = $109;\n $112 = (($110) - ($111))|0;\n $113 = (($112|0) / 12)&-1;\n $114 = (($101) + (($113*12)|0)|0);\n $27 = $95;\n $115 = $27;\n $116 = HEAP32[$115>>2]|0;\n $26 = $116;\n $117 = $26;\n $118 = $39;\n $119 = (($117) + (($118*12)|0)|0);\n $29 = $95;\n $120 = $29;\n $121 = HEAP32[$120>>2]|0;\n $28 = $121;\n $122 = $28;\n $30 = $95;\n $123 = $30;\n $124 = ((($123)) + 4|0);\n $125 = HEAP32[$124>>2]|0;\n $126 = HEAP32[$123>>2]|0;\n $127 = $125;\n $128 = $126;\n $129 = (($127) - ($128))|0;\n $130 = (($129|0) / 12)&-1;\n $131 = (($122) + (($130*12)|0)|0);\n $31 = $95;\n $32 = $98;\n $33 = $114;\n $34 = $119;\n $35 = $131;\n $40 = $64;\n $8 = $61;\n $132 = $8;\n $133 = ((($132)) + 8|0);\n $7 = $133;\n $134 = $7;\n $6 = $134;\n $135 = $6;\n $136 = HEAP32[$61>>2]|0;\n $5 = $61;\n $137 = $5;\n $4 = $137;\n $138 = $4;\n $3 = $138;\n $139 = $3;\n $140 = ((($139)) + 8|0);\n $2 = $140;\n $141 = $2;\n $1 = $141;\n $142 = $1;\n $143 = HEAP32[$142>>2]|0;\n $144 = HEAP32[$138>>2]|0;\n $145 = $143;\n $146 = $144;\n $147 = (($145) - ($146))|0;\n $148 = (($147|0) / 12)&-1;\n $13 = $135;\n $14 = $136;\n $15 = $148;\n $149 = $13;\n $150 = $14;\n $151 = $15;\n $10 = $149;\n $11 = $150;\n $12 = $151;\n $152 = $11;\n $9 = $152;\n $153 = $9;\n __ZdlPv($153);\n $18 = $61;\n $154 = $18;\n $155 = ((($154)) + 8|0);\n $17 = $155;\n $156 = $17;\n $16 = $156;\n $157 = $16;\n HEAP32[$157>>2] = 0;\n $158 = ((($61)) + 4|0);\n HEAP32[$158>>2] = 0;\n HEAP32[$61>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip22chunk_table_read_errorC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,5254);\n HEAP32[$2>>2] = (1828);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip22chunk_table_read_errorD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13not_supportedC2EPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n __ZNSt13runtime_errorC2EPKc($4,$5);\n HEAP32[$4>>2] = (1848);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13not_supportedD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip26unknown_chunk_table_formatC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,5298);\n HEAP32[$2>>2] = (1868);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip26unknown_chunk_table_formatD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEE6resizeEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);\n $6 = sp;\n $9 = sp + 180|0;\n $45 = $0;\n $46 = $1;\n $48 = $45;\n $44 = $48;\n $49 = $44;\n $50 = ((($49)) + 4|0);\n $51 = HEAP32[$50>>2]|0;\n $52 = HEAP32[$49>>2]|0;\n $53 = $51;\n $54 = $52;\n $55 = (($53) - ($54))|0;\n $56 = (($55|0) / 8)&-1;\n $47 = $56;\n $57 = $47;\n $58 = $46;\n $59 = ($57>>>0)<($58>>>0);\n if ($59) {\n  $60 = $46;\n  $61 = $47;\n  $62 = (($60) - ($61))|0;\n  __ZNSt3__26vectorIyNS_9allocatorIyEEE8__appendEj($48,$62);\n  STACKTOP = sp;return;\n }\n $63 = $47;\n $64 = $46;\n $65 = ($63>>>0)>($64>>>0);\n if (!($65)) {\n  STACKTOP = sp;return;\n }\n $66 = HEAP32[$48>>2]|0;\n $67 = $46;\n $68 = (($66) + ($67<<3)|0);\n $41 = $48;\n $42 = $68;\n $69 = $41;\n $70 = $42;\n $39 = $69;\n $40 = $70;\n $38 = $69;\n $71 = $38;\n $72 = ((($71)) + 4|0);\n $73 = HEAP32[$72>>2]|0;\n $74 = HEAP32[$71>>2]|0;\n $75 = $73;\n $76 = $74;\n $77 = (($75) - ($76))|0;\n $78 = (($77|0) / 8)&-1;\n $43 = $78;\n $79 = $42;\n $14 = $69;\n $15 = $79;\n $80 = $14;\n $81 = ((($80)) + 4|0);\n $82 = HEAP32[$81>>2]|0;\n $16 = $82;\n while(1) {\n  $83 = $15;\n  $84 = $16;\n  $85 = ($83|0)!=($84|0);\n  if (!($85)) {\n   break;\n  }\n  $13 = $80;\n  $86 = $13;\n  $87 = ((($86)) + 8|0);\n  $12 = $87;\n  $88 = $12;\n  $11 = $88;\n  $89 = $11;\n  $90 = $16;\n  $91 = ((($90)) + -8|0);\n  $16 = $91;\n  $10 = $91;\n  $92 = $10;\n  $7 = $89;\n  $8 = $92;\n  $93 = $7;\n  $94 = $8;\n  ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n  $4 = $93;\n  $5 = $94;\n  $95 = $4;\n  $96 = $5;\n  $2 = $95;\n  $3 = $96;\n }\n $97 = $15;\n $98 = ((($80)) + 4|0);\n HEAP32[$98>>2] = $97;\n $99 = $43;\n $36 = $69;\n $37 = $99;\n $100 = $36;\n $35 = $100;\n $101 = $35;\n $102 = HEAP32[$101>>2]|0;\n $34 = $102;\n $103 = $34;\n $18 = $100;\n $104 = $18;\n $105 = HEAP32[$104>>2]|0;\n $17 = $105;\n $106 = $17;\n $23 = $100;\n $107 = $23;\n $22 = $107;\n $108 = $22;\n $21 = $108;\n $109 = $21;\n $110 = ((($109)) + 8|0);\n $20 = $110;\n $111 = $20;\n $19 = $111;\n $112 = $19;\n $113 = HEAP32[$112>>2]|0;\n $114 = HEAP32[$108>>2]|0;\n $115 = $113;\n $116 = $114;\n $117 = (($115) - ($116))|0;\n $118 = (($117|0) / 8)&-1;\n $119 = (($106) + ($118<<3)|0);\n $25 = $100;\n $120 = $25;\n $121 = HEAP32[$120>>2]|0;\n $24 = $121;\n $122 = $24;\n $123 = $37;\n $124 = (($122) + ($123<<3)|0);\n $27 = $100;\n $125 = $27;\n $126 = HEAP32[$125>>2]|0;\n $26 = $126;\n $127 = $26;\n $28 = $100;\n $128 = $28;\n $129 = ((($128)) + 4|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$128>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 8)&-1;\n $136 = (($127) + ($135<<3)|0);\n $29 = $100;\n $30 = $103;\n $31 = $119;\n $32 = $124;\n $33 = $136;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP32[$4>>2] = $5;\n $6 = ((($4)) + 4|0);\n HEAP32[$6>>2] = 0;\n $7 = ((($4)) + 8|0);\n HEAP32[$7>>2] = -1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integerC2Ejjjj($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0;\n var $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $15 = sp + 72|0;\n $27 = sp + 24|0;\n $29 = $0;\n $30 = $1;\n $31 = $2;\n $32 = $3;\n $33 = $4;\n $34 = $29;\n $35 = ((($34)) + 4|0);\n $36 = $30;\n HEAP32[$35>>2] = $36;\n $37 = ((($34)) + 8|0);\n $38 = $31;\n HEAP32[$37>>2] = $38;\n $39 = ((($34)) + 12|0);\n $40 = $32;\n HEAP32[$39>>2] = $40;\n $41 = ((($34)) + 16|0);\n $42 = $33;\n HEAP32[$41>>2] = $42;\n $43 = ((($34)) + 36|0);\n $28 = $43;\n $44 = $28;\n $26 = $44;\n $45 = $26;\n $25 = $45;\n HEAP32[$45>>2] = 0;\n $46 = ((($45)) + 4|0);\n HEAP32[$46>>2] = 0;\n $47 = ((($45)) + 8|0);\n HEAP32[$27>>2] = 0;\n $23 = $47;\n $24 = $27;\n $48 = $23;\n $49 = $24;\n $22 = $49;\n $50 = $22;\n $18 = $48;\n $19 = $50;\n $51 = $18;\n $52 = $19;\n $17 = $52;\n HEAP32[$51>>2] = 0;\n $21 = $48;\n $53 = $21;\n $20 = $53;\n $54 = ((($34)) + 48|0);\n __ZN6laszip6models14arithmetic_bitC2Ev($54);\n $55 = ((($34)) + 68|0);\n $16 = $55;\n $56 = $16;\n $14 = $56;\n $57 = $14;\n $13 = $57;\n HEAP32[$57>>2] = 0;\n $58 = ((($57)) + 4|0);\n HEAP32[$58>>2] = 0;\n $59 = ((($57)) + 8|0);\n HEAP32[$15>>2] = 0;\n $11 = $59;\n $12 = $15;\n $60 = $11;\n $61 = $12;\n $10 = $61;\n $62 = $10;\n $6 = $60;\n $7 = $62;\n $63 = $6;\n $64 = $7;\n $5 = $64;\n HEAP32[$63>>2] = 0;\n $9 = $60;\n $65 = $9;\n $8 = $65;\n $66 = $33;\n $67 = ($66|0)!=(0);\n if (!($67)) {\n  $100 = $30;\n  $101 = ($100|0)!=(0);\n  $102 = $30;\n  $103 = ($102>>>0)<(32);\n  $or$cond = $101 & $103;\n  if ($or$cond) {\n   $104 = $30;\n   $105 = ((($34)) + 20|0);\n   HEAP32[$105>>2] = $104;\n   $106 = $30;\n   $107 = 1 << $106;\n   $108 = ((($34)) + 24|0);\n   HEAP32[$108>>2] = $107;\n   $109 = ((($34)) + 24|0);\n   $110 = HEAP32[$109>>2]|0;\n   $111 = (($110>>>0) / 2)&-1;\n   $112 = (0 - ($111))|0;\n   $113 = ((($34)) + 28|0);\n   HEAP32[$113>>2] = $112;\n   $114 = ((($34)) + 28|0);\n   $115 = HEAP32[$114>>2]|0;\n   $116 = ((($34)) + 24|0);\n   $117 = HEAP32[$116>>2]|0;\n   $118 = (($115) + ($117))|0;\n   $119 = (($118) - 1)|0;\n   $120 = ((($34)) + 32|0);\n   HEAP32[$120>>2] = $119;\n   HEAP32[$34>>2] = 0;\n   STACKTOP = sp;return;\n  } else {\n   $121 = ((($34)) + 20|0);\n   HEAP32[$121>>2] = 32;\n   $122 = ((($34)) + 24|0);\n   HEAP32[$122>>2] = 0;\n   $123 = ((($34)) + 28|0);\n   HEAP32[$123>>2] = -2147483648;\n   $124 = ((($34)) + 32|0);\n   HEAP32[$124>>2] = 2147483647;\n   HEAP32[$34>>2] = 0;\n   STACKTOP = sp;return;\n  }\n }\n $68 = ((($34)) + 20|0);\n HEAP32[$68>>2] = 0;\n $69 = $33;\n $70 = ((($34)) + 24|0);\n HEAP32[$70>>2] = $69;\n while(1) {\n  $71 = $33;\n  $72 = ($71|0)!=(0);\n  if (!($72)) {\n   break;\n  }\n  $73 = $33;\n  $74 = $73 >>> 1;\n  $33 = $74;\n  $75 = ((($34)) + 20|0);\n  $76 = HEAP32[$75>>2]|0;\n  $77 = (($76) + 1)|0;\n  HEAP32[$75>>2] = $77;\n }\n $78 = ((($34)) + 24|0);\n $79 = HEAP32[$78>>2]|0;\n $80 = ((($34)) + 20|0);\n $81 = HEAP32[$80>>2]|0;\n $82 = (($81) - 1)|0;\n $83 = 1 << $82;\n $84 = ($79|0)==($83|0);\n if ($84) {\n  $85 = ((($34)) + 20|0);\n  $86 = HEAP32[$85>>2]|0;\n  $87 = (($86) + -1)|0;\n  HEAP32[$85>>2] = $87;\n }\n $88 = ((($34)) + 24|0);\n $89 = HEAP32[$88>>2]|0;\n $90 = (($89>>>0) / 2)&-1;\n $91 = (0 - ($90))|0;\n $92 = ((($34)) + 28|0);\n HEAP32[$92>>2] = $91;\n $93 = ((($34)) + 28|0);\n $94 = HEAP32[$93>>2]|0;\n $95 = ((($34)) + 24|0);\n $96 = HEAP32[$95>>2]|0;\n $97 = (($94) + ($96))|0;\n $98 = (($97) - 1)|0;\n $99 = ((($34)) + 32|0);\n HEAP32[$99>>2] = $98;\n HEAP32[$34>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n $4 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($3)|0);\n $5 = $4&255;\n $6 = $5 << 24;\n $7 = HEAP32[$2>>2]|0;\n $8 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($7)|0);\n $9 = $8&255;\n $10 = $9 << 16;\n $11 = $6 | $10;\n $12 = HEAP32[$2>>2]|0;\n $13 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($12)|0);\n $14 = $13&255;\n $15 = $14 << 8;\n $16 = $11 | $15;\n $17 = HEAP32[$2>>2]|0;\n $18 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($17)|0);\n $19 = $18&255;\n $20 = $16 | $19;\n $21 = ((($2)) + 4|0);\n HEAP32[$21>>2] = $20;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integer4initEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $18 = 0;\n var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0);\n $14 = sp + 8|0;\n $19 = sp + 335|0;\n $30 = sp + 334|0;\n $44 = sp;\n $49 = sp + 333|0;\n $60 = sp + 332|0;\n $64 = sp + 60|0;\n $66 = sp + 12|0;\n $62 = $0;\n $67 = $62;\n $68 = ((($67)) + 36|0);\n $61 = $68;\n $69 = $61;\n $70 = HEAP32[$69>>2]|0;\n $71 = ((($69)) + 4|0);\n $72 = HEAP32[$71>>2]|0;\n $73 = ($70|0)==($72|0);\n if (!($73)) {\n  STACKTOP = sp;return;\n }\n $63 = 0;\n while(1) {\n  $74 = $63;\n  $75 = ((($67)) + 8|0);\n  $76 = HEAP32[$75>>2]|0;\n  $77 = ($74>>>0)<($76>>>0);\n  if (!($77)) {\n   break;\n  }\n  $78 = ((($67)) + 36|0);\n  $79 = ((($67)) + 20|0);\n  $80 = HEAP32[$79>>2]|0;\n  $81 = (($80) + 1)|0;\n  __ZN6laszip6models10arithmeticC2EjbPj($64,$81,0,0);\n  $58 = $78;\n  $59 = $64;\n  $82 = $58;\n  $83 = ((($82)) + 4|0);\n  $84 = HEAP32[$83>>2]|0;\n  $57 = $82;\n  $85 = $57;\n  $86 = ((($85)) + 8|0);\n  $56 = $86;\n  $87 = $56;\n  $55 = $87;\n  $88 = $55;\n  $89 = HEAP32[$88>>2]|0;\n  $90 = ($84>>>0)<($89>>>0);\n  if ($90) {\n   $52 = $60;\n   $53 = $82;\n   $54 = 1;\n   $35 = $82;\n   $91 = $35;\n   $92 = ((($91)) + 8|0);\n   $34 = $92;\n   $93 = $34;\n   $33 = $93;\n   $94 = $33;\n   $95 = ((($82)) + 4|0);\n   $96 = HEAP32[$95>>2]|0;\n   $31 = $96;\n   $97 = $31;\n   $98 = $59;\n   $32 = $98;\n   $99 = $32;\n   $46 = $94;\n   $47 = $97;\n   $48 = $99;\n   $100 = $46;\n   $101 = $47;\n   $102 = $48;\n   $45 = $102;\n   $103 = $45;\n   ;HEAP8[$44>>0]=HEAP8[$49>>0]|0;\n   $41 = $100;\n   $42 = $101;\n   $43 = $103;\n   $104 = $41;\n   $105 = $42;\n   $106 = $43;\n   $40 = $106;\n   $107 = $40;\n   $37 = $104;\n   $38 = $105;\n   $39 = $107;\n   $108 = $38;\n   $109 = $39;\n   $36 = $109;\n   $110 = $36;\n   __ZN6laszip6models10arithmeticC2EOS1_($108,$110);\n   $50 = $60;\n   $111 = ((($82)) + 4|0);\n   $112 = HEAP32[$111>>2]|0;\n   $113 = ((($112)) + 44|0);\n   HEAP32[$111>>2] = $113;\n  } else {\n   $114 = $59;\n   $51 = $114;\n   $115 = $51;\n   __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($82,$115);\n  }\n  __ZN6laszip6models10arithmeticD2Ev($64);\n  $116 = $63;\n  $117 = (($116) + 1)|0;\n  $63 = $117;\n }\n $63 = 1;\n while(1) {\n  $118 = $63;\n  $119 = ((($67)) + 20|0);\n  $120 = HEAP32[$119>>2]|0;\n  $121 = ($118>>>0)<=($120>>>0);\n  if (!($121)) {\n   break;\n  }\n  $122 = $63;\n  $123 = ((($67)) + 12|0);\n  $124 = HEAP32[$123>>2]|0;\n  $125 = ($122>>>0)<=($124>>>0);\n  if ($125) {\n   $126 = $63;\n   $127 = 1 << $126;\n   $131 = $127;\n  } else {\n   $128 = ((($67)) + 12|0);\n   $129 = HEAP32[$128>>2]|0;\n   $130 = 1 << $129;\n   $131 = $130;\n  }\n  $65 = $131;\n  $132 = ((($67)) + 68|0);\n  $133 = $65;\n  __ZN6laszip6models10arithmeticC2EjbPj($66,$133,0,0);\n  $28 = $132;\n  $29 = $66;\n  $134 = $28;\n  $135 = ((($134)) + 4|0);\n  $136 = HEAP32[$135>>2]|0;\n  $27 = $134;\n  $137 = $27;\n  $138 = ((($137)) + 8|0);\n  $26 = $138;\n  $139 = $26;\n  $25 = $139;\n  $140 = $25;\n  $141 = HEAP32[$140>>2]|0;\n  $142 = ($136>>>0)<($141>>>0);\n  if ($142) {\n   $22 = $30;\n   $23 = $134;\n   $24 = 1;\n   $5 = $134;\n   $143 = $5;\n   $144 = ((($143)) + 8|0);\n   $4 = $144;\n   $145 = $4;\n   $3 = $145;\n   $146 = $3;\n   $147 = ((($134)) + 4|0);\n   $148 = HEAP32[$147>>2]|0;\n   $1 = $148;\n   $149 = $1;\n   $150 = $29;\n   $2 = $150;\n   $151 = $2;\n   $16 = $146;\n   $17 = $149;\n   $18 = $151;\n   $152 = $16;\n   $153 = $17;\n   $154 = $18;\n   $15 = $154;\n   $155 = $15;\n   ;HEAP8[$14>>0]=HEAP8[$19>>0]|0;\n   $11 = $152;\n   $12 = $153;\n   $13 = $155;\n   $156 = $11;\n   $157 = $12;\n   $158 = $13;\n   $10 = $158;\n   $159 = $10;\n   $7 = $156;\n   $8 = $157;\n   $9 = $159;\n   $160 = $8;\n   $161 = $9;\n   $6 = $161;\n   $162 = $6;\n   __ZN6laszip6models10arithmeticC2EOS1_($160,$162);\n   $20 = $30;\n   $163 = ((($134)) + 4|0);\n   $164 = HEAP32[$163>>2]|0;\n   $165 = ((($164)) + 44|0);\n   HEAP32[$163>>2] = $165;\n  } else {\n   $166 = $29;\n   $21 = $166;\n   $167 = $21;\n   __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($134,$167);\n  }\n  __ZN6laszip6models10arithmeticD2Ev($66);\n  $168 = $63;\n  $169 = (($168) + 1)|0;\n  $63 = $169;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $6 = $0;\n $7 = $1;\n $8 = $2;\n $9 = $3;\n $11 = $6;\n $12 = $8;\n $13 = $7;\n $14 = ((($11)) + 36|0);\n $15 = $9;\n $4 = $14;\n $5 = $15;\n $16 = $4;\n $17 = HEAP32[$16>>2]|0;\n $18 = $5;\n $19 = (($17) + (($18*44)|0)|0);\n $20 = (__ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS_6models10arithmeticEEEiRT_RT0_($11,$13,$19)|0);\n $21 = (($12) + ($20))|0;\n $10 = $21;\n $22 = $10;\n $23 = ($22|0)<(0);\n if ($23) {\n  $24 = ((($11)) + 24|0);\n  $25 = HEAP32[$24>>2]|0;\n  $26 = $10;\n  $27 = (($26) + ($25))|0;\n  $10 = $27;\n  $36 = $10;\n  STACKTOP = sp;return ($36|0);\n }\n $28 = $10;\n $29 = ((($11)) + 24|0);\n $30 = HEAP32[$29>>2]|0;\n $31 = ($28>>>0)>=($30>>>0);\n if (!($31)) {\n  $36 = $10;\n  STACKTOP = sp;return ($36|0);\n }\n $32 = ((($11)) + 24|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = $10;\n $35 = (($34) - ($33))|0;\n $10 = $35;\n $36 = $10;\n STACKTOP = sp;return ($36|0);\n}\nfunction __ZN6laszip13decompressors7integerD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 68|0);\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($3);\n $4 = ((($2)) + 36|0);\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($4);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip22chunk_table_read_errorD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip22chunk_table_read_errorD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13not_supportedD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13not_supportedD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip26unknown_chunk_table_formatD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip26unknown_chunk_table_formatD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEE8__appendEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0;\n var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $8 = sp;\n $11 = sp + 140|0;\n $19 = sp + 76|0;\n $22 = sp + 64|0;\n $33 = sp + 4|0;\n $30 = $0;\n $31 = $1;\n $34 = $30;\n $29 = $34;\n $35 = $29;\n $36 = ((($35)) + 8|0);\n $28 = $36;\n $37 = $28;\n $27 = $37;\n $38 = $27;\n $39 = HEAP32[$38>>2]|0;\n $40 = ((($34)) + 4|0);\n $41 = HEAP32[$40>>2]|0;\n $42 = $39;\n $43 = $41;\n $44 = (($42) - ($43))|0;\n $45 = (($44|0) / 8)&-1;\n $46 = $31;\n $47 = ($45>>>0)>=($46>>>0);\n if ($47) {\n  $48 = $31;\n  __ZNSt3__26vectorIyNS_9allocatorIyEEE18__construct_at_endEj($34,$48);\n  STACKTOP = sp;return;\n }\n $26 = $34;\n $49 = $26;\n $50 = ((($49)) + 8|0);\n $25 = $50;\n $51 = $25;\n $24 = $51;\n $52 = $24;\n $32 = $52;\n $23 = $34;\n $53 = $23;\n $54 = ((($53)) + 4|0);\n $55 = HEAP32[$54>>2]|0;\n $56 = HEAP32[$53>>2]|0;\n $57 = $55;\n $58 = $56;\n $59 = (($57) - ($58))|0;\n $60 = (($59|0) / 8)&-1;\n $61 = $31;\n $62 = (($60) + ($61))|0;\n $18 = $34;\n HEAP32[$19>>2] = $62;\n $63 = $18;\n $64 = (__ZNKSt3__26vectorIyNS_9allocatorIyEEE8max_sizeEv($63)|0);\n $20 = $64;\n $65 = HEAP32[$19>>2]|0;\n $66 = $20;\n $67 = ($65>>>0)>($66>>>0);\n if ($67) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($63);\n  // unreachable;\n }\n $16 = $63;\n $68 = $16;\n $15 = $68;\n $69 = $15;\n $14 = $69;\n $70 = $14;\n $71 = ((($70)) + 8|0);\n $13 = $71;\n $72 = $13;\n $12 = $72;\n $73 = $12;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 8)&-1;\n $21 = $79;\n $80 = $21;\n $81 = $20;\n $82 = (($81>>>0) / 2)&-1;\n $83 = ($80>>>0)>=($82>>>0);\n if ($83) {\n  $84 = $20;\n  $17 = $84;\n } else {\n  $85 = $21;\n  $86 = $85<<1;\n  HEAP32[$22>>2] = $86;\n  $9 = $22;\n  $10 = $19;\n  $87 = $9;\n  $88 = $10;\n  ;HEAP8[$8>>0]=HEAP8[$11>>0]|0;\n  $6 = $87;\n  $7 = $88;\n  $89 = $6;\n  $90 = $7;\n  $3 = $8;\n  $4 = $89;\n  $5 = $90;\n  $91 = $4;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = $5;\n  $94 = HEAP32[$93>>2]|0;\n  $95 = ($92>>>0)<($94>>>0);\n  $96 = $7;\n  $97 = $6;\n  $98 = $95 ? $96 : $97;\n  $99 = HEAP32[$98>>2]|0;\n  $17 = $99;\n }\n $100 = $17;\n $2 = $34;\n $101 = $2;\n $102 = ((($101)) + 4|0);\n $103 = HEAP32[$102>>2]|0;\n $104 = HEAP32[$101>>2]|0;\n $105 = $103;\n $106 = $104;\n $107 = (($105) - ($106))|0;\n $108 = (($107|0) / 8)&-1;\n $109 = $32;\n __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEEC2EjjS3_($33,$100,$108,$109);\n $110 = $31;\n __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEE18__construct_at_endEj($33,$110);\n __ZNSt3__26vectorIyNS_9allocatorIyEEE26__swap_out_circular_bufferERNS_14__split_bufferIyRS2_EE($34,$33);\n __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEED2Ev($33);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEE18__construct_at_endEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $10 = sp;\n $13 = sp + 73|0;\n $21 = sp + 72|0;\n $18 = $0;\n $19 = $1;\n $22 = $18;\n $17 = $22;\n $23 = $17;\n $24 = ((($23)) + 8|0);\n $16 = $24;\n $25 = $16;\n $15 = $25;\n $26 = $15;\n $20 = $26;\n while(1) {\n  $2 = $21;\n  $3 = $22;\n  $4 = 1;\n  $27 = $20;\n  $28 = ((($22)) + 4|0);\n  $29 = HEAP32[$28>>2]|0;\n  $5 = $29;\n  $30 = $5;\n  $11 = $27;\n  $12 = $30;\n  $31 = $11;\n  $32 = $12;\n  ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n  $8 = $31;\n  $9 = $32;\n  $33 = $8;\n  $34 = $9;\n  $6 = $33;\n  $7 = $34;\n  $35 = $7;\n  $36 = $35;\n  $37 = $36;\n  HEAP32[$37>>2] = 0;\n  $38 = (($36) + 4)|0;\n  $39 = $38;\n  HEAP32[$39>>2] = 0;\n  $40 = ((($22)) + 4|0);\n  $41 = HEAP32[$40>>2]|0;\n  $42 = ((($41)) + 8|0);\n  HEAP32[$40>>2] = $42;\n  $43 = $19;\n  $44 = (($43) + -1)|0;\n  $19 = $44;\n  $14 = $21;\n  $45 = $19;\n  $46 = ($45>>>0)>(0);\n  if (!($46)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEEC2EjjS3_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(536870911);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = $68<<3;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + ($74<<3)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + ($79<<3)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEE18__construct_at_endEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $7 = sp;\n $10 = sp + 56|0;\n $14 = $0;\n $15 = $1;\n $17 = $14;\n $13 = $17;\n $18 = $13;\n $19 = ((($18)) + 12|0);\n $12 = $19;\n $20 = $12;\n $21 = ((($20)) + 4|0);\n $11 = $21;\n $22 = $11;\n $23 = HEAP32[$22>>2]|0;\n $16 = $23;\n while(1) {\n  $24 = $16;\n  $25 = ((($17)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  $2 = $26;\n  $27 = $2;\n  $8 = $24;\n  $9 = $27;\n  $28 = $8;\n  $29 = $9;\n  ;HEAP8[$7>>0]=HEAP8[$10>>0]|0;\n  $5 = $28;\n  $6 = $29;\n  $30 = $5;\n  $31 = $6;\n  $3 = $30;\n  $4 = $31;\n  $32 = $4;\n  $33 = $32;\n  $34 = $33;\n  HEAP32[$34>>2] = 0;\n  $35 = (($33) + 4)|0;\n  $36 = $35;\n  HEAP32[$36>>2] = 0;\n  $37 = ((($17)) + 8|0);\n  $38 = HEAP32[$37>>2]|0;\n  $39 = ((($38)) + 8|0);\n  HEAP32[$37>>2] = $39;\n  $40 = $15;\n  $41 = (($40) + -1)|0;\n  $15 = $41;\n  $42 = $15;\n  $43 = ($42>>>0)>(0);\n  if (!($43)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEE26__swap_out_circular_bufferERNS_14__split_bufferIyRS2_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0);\n $15 = sp + 288|0;\n $21 = sp + 264|0;\n $33 = sp + 216|0;\n $86 = $0;\n $87 = $1;\n $88 = $86;\n $85 = $88;\n $89 = $85;\n $84 = $89;\n $90 = $84;\n $91 = HEAP32[$90>>2]|0;\n $83 = $91;\n $92 = $83;\n $62 = $89;\n $93 = $62;\n $94 = HEAP32[$93>>2]|0;\n $61 = $94;\n $95 = $61;\n $67 = $89;\n $96 = $67;\n $66 = $96;\n $97 = $66;\n $65 = $97;\n $98 = $65;\n $99 = ((($98)) + 8|0);\n $64 = $99;\n $100 = $64;\n $63 = $100;\n $101 = $63;\n $102 = HEAP32[$101>>2]|0;\n $103 = HEAP32[$97>>2]|0;\n $104 = $102;\n $105 = $103;\n $106 = (($104) - ($105))|0;\n $107 = (($106|0) / 8)&-1;\n $108 = (($95) + ($107<<3)|0);\n $69 = $89;\n $109 = $69;\n $110 = HEAP32[$109>>2]|0;\n $68 = $110;\n $111 = $68;\n $70 = $89;\n $112 = $70;\n $113 = ((($112)) + 4|0);\n $114 = HEAP32[$113>>2]|0;\n $115 = HEAP32[$112>>2]|0;\n $116 = $114;\n $117 = $115;\n $118 = (($116) - ($117))|0;\n $119 = (($118|0) / 8)&-1;\n $120 = (($111) + ($119<<3)|0);\n $72 = $89;\n $121 = $72;\n $122 = HEAP32[$121>>2]|0;\n $71 = $122;\n $123 = $71;\n $77 = $89;\n $124 = $77;\n $76 = $124;\n $125 = $76;\n $75 = $125;\n $126 = $75;\n $127 = ((($126)) + 8|0);\n $74 = $127;\n $128 = $74;\n $73 = $128;\n $129 = $73;\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$125>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 8)&-1;\n $136 = (($123) + ($135<<3)|0);\n $78 = $89;\n $79 = $92;\n $80 = $108;\n $81 = $120;\n $82 = $136;\n $4 = $88;\n $137 = $4;\n $138 = ((($137)) + 8|0);\n $3 = $138;\n $139 = $3;\n $2 = $139;\n $140 = $2;\n $141 = HEAP32[$88>>2]|0;\n $142 = ((($88)) + 4|0);\n $143 = HEAP32[$142>>2]|0;\n $144 = $87;\n $145 = ((($144)) + 4|0);\n $5 = $140;\n $6 = $141;\n $7 = $143;\n $8 = $145;\n $146 = $7;\n $147 = $6;\n $148 = $146;\n $149 = $147;\n $150 = (($148) - ($149))|0;\n $151 = (($150|0) / 8)&-1;\n $9 = $151;\n $152 = $9;\n $153 = $8;\n $154 = HEAP32[$153>>2]|0;\n $155 = (0 - ($152))|0;\n $156 = (($154) + ($155<<3)|0);\n HEAP32[$153>>2] = $156;\n $157 = $9;\n $158 = ($157|0)>(0);\n if ($158) {\n  $159 = $8;\n  $160 = HEAP32[$159>>2]|0;\n  $161 = $6;\n  $162 = $9;\n  $163 = $162<<3;\n  _memcpy(($160|0),($161|0),($163|0))|0;\n }\n $164 = $87;\n $165 = ((($164)) + 4|0);\n $13 = $88;\n $14 = $165;\n $166 = $13;\n $12 = $166;\n $167 = $12;\n $168 = HEAP32[$167>>2]|0;\n HEAP32[$15>>2] = $168;\n $169 = $14;\n $10 = $169;\n $170 = $10;\n $171 = HEAP32[$170>>2]|0;\n $172 = $13;\n HEAP32[$172>>2] = $171;\n $11 = $15;\n $173 = $11;\n $174 = HEAP32[$173>>2]|0;\n $175 = $14;\n HEAP32[$175>>2] = $174;\n $176 = ((($88)) + 4|0);\n $177 = $87;\n $178 = ((($177)) + 8|0);\n $19 = $176;\n $20 = $178;\n $179 = $19;\n $18 = $179;\n $180 = $18;\n $181 = HEAP32[$180>>2]|0;\n HEAP32[$21>>2] = $181;\n $182 = $20;\n $16 = $182;\n $183 = $16;\n $184 = HEAP32[$183>>2]|0;\n $185 = $19;\n HEAP32[$185>>2] = $184;\n $17 = $21;\n $186 = $17;\n $187 = HEAP32[$186>>2]|0;\n $188 = $20;\n HEAP32[$188>>2] = $187;\n $24 = $88;\n $189 = $24;\n $190 = ((($189)) + 8|0);\n $23 = $190;\n $191 = $23;\n $22 = $191;\n $192 = $22;\n $193 = $87;\n $27 = $193;\n $194 = $27;\n $195 = ((($194)) + 12|0);\n $26 = $195;\n $196 = $26;\n $25 = $196;\n $197 = $25;\n $31 = $192;\n $32 = $197;\n $198 = $31;\n $30 = $198;\n $199 = $30;\n $200 = HEAP32[$199>>2]|0;\n HEAP32[$33>>2] = $200;\n $201 = $32;\n $28 = $201;\n $202 = $28;\n $203 = HEAP32[$202>>2]|0;\n $204 = $31;\n HEAP32[$204>>2] = $203;\n $29 = $33;\n $205 = $29;\n $206 = HEAP32[$205>>2]|0;\n $207 = $32;\n HEAP32[$207>>2] = $206;\n $208 = $87;\n $209 = ((($208)) + 4|0);\n $210 = HEAP32[$209>>2]|0;\n $211 = $87;\n HEAP32[$211>>2] = $210;\n $34 = $88;\n $212 = $34;\n $213 = ((($212)) + 4|0);\n $214 = HEAP32[$213>>2]|0;\n $215 = HEAP32[$212>>2]|0;\n $216 = $214;\n $217 = $215;\n $218 = (($216) - ($217))|0;\n $219 = (($218|0) / 8)&-1;\n $58 = $88;\n $59 = $219;\n $220 = $58;\n $57 = $220;\n $221 = $57;\n $222 = HEAP32[$221>>2]|0;\n $56 = $222;\n $223 = $56;\n $36 = $220;\n $224 = $36;\n $225 = HEAP32[$224>>2]|0;\n $35 = $225;\n $226 = $35;\n $41 = $220;\n $227 = $41;\n $40 = $227;\n $228 = $40;\n $39 = $228;\n $229 = $39;\n $230 = ((($229)) + 8|0);\n $38 = $230;\n $231 = $38;\n $37 = $231;\n $232 = $37;\n $233 = HEAP32[$232>>2]|0;\n $234 = HEAP32[$228>>2]|0;\n $235 = $233;\n $236 = $234;\n $237 = (($235) - ($236))|0;\n $238 = (($237|0) / 8)&-1;\n $239 = (($226) + ($238<<3)|0);\n $43 = $220;\n $240 = $43;\n $241 = HEAP32[$240>>2]|0;\n $42 = $241;\n $242 = $42;\n $48 = $220;\n $243 = $48;\n $47 = $243;\n $244 = $47;\n $46 = $244;\n $245 = $46;\n $246 = ((($245)) + 8|0);\n $45 = $246;\n $247 = $45;\n $44 = $247;\n $248 = $44;\n $249 = HEAP32[$248>>2]|0;\n $250 = HEAP32[$244>>2]|0;\n $251 = $249;\n $252 = $250;\n $253 = (($251) - ($252))|0;\n $254 = (($253|0) / 8)&-1;\n $255 = (($242) + ($254<<3)|0);\n $50 = $220;\n $256 = $50;\n $257 = HEAP32[$256>>2]|0;\n $49 = $257;\n $258 = $49;\n $259 = $59;\n $260 = (($258) + ($259<<3)|0);\n $51 = $220;\n $52 = $223;\n $53 = $239;\n $54 = $255;\n $55 = $260;\n $60 = $88;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -8|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n }\n $60 = HEAP32[$35>>2]|0;\n $61 = ($60|0)!=(0|0);\n if (!($61)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $62 = $14;\n $63 = ((($62)) + 12|0);\n $13 = $63;\n $64 = $13;\n $65 = ((($64)) + 4|0);\n $12 = $65;\n $66 = $12;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$35>>2]|0;\n $4 = $35;\n $69 = $4;\n $3 = $69;\n $70 = $3;\n $71 = ((($70)) + 12|0);\n $2 = $71;\n $72 = $2;\n $1 = $72;\n $73 = $1;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 8)&-1;\n $9 = $67;\n $10 = $68;\n $11 = $79;\n $80 = $9;\n $81 = $10;\n $82 = $11;\n $6 = $80;\n $7 = $81;\n $8 = $82;\n $83 = $7;\n $5 = $83;\n $84 = $5;\n __ZdlPv($84);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorIyNS_9allocatorIyEEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 536870911;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZN6laszip6models14arithmetic_bitC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 12|0);\n HEAP32[$3>>2] = 1;\n $4 = ((($2)) + 16|0);\n HEAP32[$4>>2] = 2;\n $5 = ((($2)) + 8|0);\n HEAP32[$5>>2] = 4096;\n $6 = ((($2)) + 4|0);\n HEAP32[$6>>2] = 4;\n HEAP32[$2>>2] = 4;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -44|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n  $54 = $16;\n  __ZN6laszip6models10arithmeticD2Ev($54);\n }\n $55 = $28;\n $56 = ((($37)) + 4|0);\n HEAP32[$56>>2] = $55;\n $14 = $32;\n $57 = $14;\n $58 = ((($57)) + 8|0);\n $13 = $58;\n $59 = $13;\n $12 = $59;\n $60 = $12;\n $61 = HEAP32[$32>>2]|0;\n $4 = $32;\n $62 = $4;\n $3 = $62;\n $63 = $3;\n $64 = ((($63)) + 8|0);\n $2 = $64;\n $65 = $2;\n $1 = $65;\n $66 = $1;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$62>>2]|0;\n $69 = $67;\n $70 = $68;\n $71 = (($69) - ($70))|0;\n $72 = (($71|0) / 44)&-1;\n $9 = $60;\n $10 = $61;\n $11 = $72;\n $73 = $9;\n $74 = $10;\n $75 = $11;\n $6 = $73;\n $7 = $74;\n $8 = $75;\n $76 = $7;\n $5 = $76;\n $77 = $5;\n __ZdlPv($77);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip6models10arithmeticD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 8|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ($4|0)!=(0|0);\n if ($5) {\n  $6 = ((($2)) + 8|0);\n  $7 = HEAP32[$6>>2]|0;\n  __ZN6laszip5utilsL12aligned_freeEPv($7);\n }\n $8 = ((($2)) + 12|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = ($9|0)!=(0|0);\n if ($10) {\n  $11 = ((($2)) + 12|0);\n  $12 = HEAP32[$11>>2]|0;\n  __ZN6laszip5utilsL12aligned_freeEPv($12);\n }\n $13 = ((($2)) + 16|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = ($14|0)!=(0|0);\n if (!($15)) {\n  STACKTOP = sp;return;\n }\n $16 = ((($2)) + 16|0);\n $17 = HEAP32[$16>>2]|0;\n __ZN6laszip5utilsL12aligned_freeEPv($17);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ((($2)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = ($4|0)>=($6|0);\n if ($7) {\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($2);\n }\n $8 = ((($2)) + 12|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = ((($2)) + 4|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = (($11) + 1)|0;\n HEAP32[$10>>2] = $12;\n $13 = (($9) + ($11)|0);\n $14 = HEAP8[$13>>0]|0;\n STACKTOP = sp;return ($14|0);\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n HEAP32[$3>>2] = 0;\n $4 = HEAP32[$2>>2]|0;\n $5 = ((($2)) + 12|0);\n $6 = HEAP32[$5>>2]|0;\n __ZN6laszip7streams13memory_stream4readEPci($4,$6,1048576);\n $7 = HEAP32[$2>>2]|0;\n $8 = (__ZN6laszip7streams13memory_stream6gcountEv($7)|0);\n $9 = ((($2)) + 8|0);\n HEAP32[$9>>2] = $8;\n $10 = ((($2)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = ($11|0)==(0);\n if ($12) {\n  $13 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip11end_of_fileC2Ev($13);\n  ___cxa_throw(($13|0),(216|0),(40|0));\n  // unreachable;\n } else {\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7streams13memory_stream6gcountEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 16|0);\n $4 = HEAP32[$3>>2]|0;\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZN6laszip11end_of_fileC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,5363);\n HEAP32[$2>>2] = (1888);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip11end_of_fileD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip11end_of_fileD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11end_of_fileD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip6models10arithmeticC2EjbPj($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = $0;\n $5 = $1;\n $11 = $2&1;\n $6 = $11;\n $7 = $3;\n $12 = $4;\n $13 = $5;\n HEAP32[$12>>2] = $13;\n $14 = ((($12)) + 4|0);\n $15 = $6;\n $16 = $15&1;\n $17 = $16&1;\n HEAP8[$14>>0] = $17;\n $18 = ((($12)) + 8|0);\n HEAP32[$18>>2] = 0;\n $19 = ((($12)) + 12|0);\n HEAP32[$19>>2] = 0;\n $20 = ((($12)) + 16|0);\n HEAP32[$20>>2] = 0;\n $21 = HEAP32[$12>>2]|0;\n $22 = ($21>>>0)<(2);\n if ($22) {\n  $25 = (___cxa_allocate_exception(8)|0);\n  __ZNSt13runtime_errorC2EPKc($25,5383);\n  ___cxa_throw(($25|0),(1368|0),(223|0));\n  // unreachable;\n }\n $23 = HEAP32[$12>>2]|0;\n $24 = ($23>>>0)>(2048);\n if ($24) {\n  $25 = (___cxa_allocate_exception(8)|0);\n  __ZNSt13runtime_errorC2EPKc($25,5383);\n  ___cxa_throw(($25|0),(1368|0),(223|0));\n  // unreachable;\n }\n $26 = HEAP32[$12>>2]|0;\n $27 = (($26) - 1)|0;\n $28 = ((($12)) + 32|0);\n HEAP32[$28>>2] = $27;\n $29 = ((($12)) + 4|0);\n $30 = HEAP8[$29>>0]|0;\n $31 = $30&1;\n if ($31) {\n  label = 10;\n } else {\n  $32 = HEAP32[$12>>2]|0;\n  $33 = ($32>>>0)>(16);\n  if ($33) {\n   $8 = 3;\n   while(1) {\n    $34 = HEAP32[$12>>2]|0;\n    $35 = $8;\n    $36 = (($35) + 2)|0;\n    $37 = 1 << $36;\n    $38 = ($34>>>0)>($37>>>0);\n    $39 = $8;\n    if (!($38)) {\n     break;\n    }\n    $40 = (($39) + 1)|0;\n    $8 = $40;\n   }\n   $41 = 1 << $39;\n   $42 = ((($12)) + 36|0);\n   HEAP32[$42>>2] = $41;\n   $43 = $8;\n   $44 = (15 - ($43))|0;\n   $45 = ((($12)) + 40|0);\n   HEAP32[$45>>2] = $44;\n   $46 = ((($12)) + 36|0);\n   $47 = HEAP32[$46>>2]|0;\n   $48 = (($47) + 2)|0;\n   $49 = $48<<2;\n   $50 = (__ZN6laszip5utilsL14aligned_mallocEi($49)|0);\n   $51 = ((($12)) + 16|0);\n   HEAP32[$51>>2] = $50;\n  } else {\n   label = 10;\n  }\n }\n if ((label|0) == 10) {\n  $52 = ((($12)) + 16|0);\n  HEAP32[$52>>2] = 0;\n  $53 = ((($12)) + 40|0);\n  HEAP32[$53>>2] = 0;\n  $54 = ((($12)) + 36|0);\n  HEAP32[$54>>2] = 0;\n }\n $55 = HEAP32[$12>>2]|0;\n $56 = $55<<2;\n $57 = (__ZN6laszip5utilsL14aligned_mallocEi($56)|0);\n $58 = ((($12)) + 8|0);\n HEAP32[$58>>2] = $57;\n $59 = HEAP32[$12>>2]|0;\n $60 = $59<<2;\n $61 = (__ZN6laszip5utilsL14aligned_mallocEi($60)|0);\n $62 = ((($12)) + 12|0);\n HEAP32[$62>>2] = $61;\n $63 = ((($12)) + 20|0);\n HEAP32[$63>>2] = 0;\n $64 = HEAP32[$12>>2]|0;\n $65 = ((($12)) + 24|0);\n HEAP32[$65>>2] = $64;\n $66 = $7;\n $67 = ($66|0)!=(0|0);\n if ($67) {\n  $9 = 0;\n  while(1) {\n   $68 = $9;\n   $69 = HEAP32[$12>>2]|0;\n   $70 = ($68>>>0)<($69>>>0);\n   if (!($70)) {\n    break;\n   }\n   $71 = $7;\n   $72 = $9;\n   $73 = (($71) + ($72<<2)|0);\n   $74 = HEAP32[$73>>2]|0;\n   $75 = ((($12)) + 12|0);\n   $76 = HEAP32[$75>>2]|0;\n   $77 = $9;\n   $78 = (($76) + ($77<<2)|0);\n   HEAP32[$78>>2] = $74;\n   $79 = $9;\n   $80 = (($79) + 1)|0;\n   $9 = $80;\n  }\n  __ZN6laszip6models10arithmetic6updateEv($12);\n  $90 = HEAP32[$12>>2]|0;\n  $91 = (($90) + 6)|0;\n  $92 = $91 >>> 1;\n  $93 = ((($12)) + 24|0);\n  HEAP32[$93>>2] = $92;\n  $94 = ((($12)) + 28|0);\n  HEAP32[$94>>2] = $92;\n  STACKTOP = sp;return;\n } else {\n  $10 = 0;\n  while(1) {\n   $81 = $10;\n   $82 = HEAP32[$12>>2]|0;\n   $83 = ($81>>>0)<($82>>>0);\n   if (!($83)) {\n    break;\n   }\n   $84 = ((($12)) + 12|0);\n   $85 = HEAP32[$84>>2]|0;\n   $86 = $10;\n   $87 = (($85) + ($86<<2)|0);\n   HEAP32[$87>>2] = 1;\n   $88 = $10;\n   $89 = (($88) + 1)|0;\n   $10 = $89;\n  }\n  __ZN6laszip6models10arithmetic6updateEv($12);\n  $90 = HEAP32[$12>>2]|0;\n  $91 = (($90) + 6)|0;\n  $92 = $91 >>> 1;\n  $93 = ((($12)) + 24|0);\n  HEAP32[$93>>2] = $92;\n  $94 = ((($12)) + 28|0);\n  HEAP32[$94>>2] = $92;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $10 = sp + 8|0;\n $15 = sp + 193|0;\n $24 = sp;\n $27 = sp + 192|0;\n $35 = sp + 72|0;\n $38 = sp + 60|0;\n $46 = sp + 12|0;\n $43 = $0;\n $44 = $1;\n $47 = $43;\n $42 = $47;\n $48 = $42;\n $49 = ((($48)) + 8|0);\n $41 = $49;\n $50 = $41;\n $40 = $50;\n $51 = $40;\n $45 = $51;\n $39 = $47;\n $52 = $39;\n $53 = ((($52)) + 4|0);\n $54 = HEAP32[$53>>2]|0;\n $55 = HEAP32[$52>>2]|0;\n $56 = $54;\n $57 = $55;\n $58 = (($56) - ($57))|0;\n $59 = (($58|0) / 44)&-1;\n $60 = (($59) + 1)|0;\n $34 = $47;\n HEAP32[$35>>2] = $60;\n $61 = $34;\n $62 = (__ZNKSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8max_sizeEv($61)|0);\n $36 = $62;\n $63 = HEAP32[$35>>2]|0;\n $64 = $36;\n $65 = ($63>>>0)>($64>>>0);\n if ($65) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61);\n  // unreachable;\n }\n $32 = $61;\n $66 = $32;\n $31 = $66;\n $67 = $31;\n $30 = $67;\n $68 = $30;\n $69 = ((($68)) + 8|0);\n $29 = $69;\n $70 = $29;\n $28 = $70;\n $71 = $28;\n $72 = HEAP32[$71>>2]|0;\n $73 = HEAP32[$67>>2]|0;\n $74 = $72;\n $75 = $73;\n $76 = (($74) - ($75))|0;\n $77 = (($76|0) / 44)&-1;\n $37 = $77;\n $78 = $37;\n $79 = $36;\n $80 = (($79>>>0) / 2)&-1;\n $81 = ($78>>>0)>=($80>>>0);\n if ($81) {\n  $82 = $36;\n  $33 = $82;\n } else {\n  $83 = $37;\n  $84 = $83<<1;\n  HEAP32[$38>>2] = $84;\n  $25 = $38;\n  $26 = $35;\n  $85 = $25;\n  $86 = $26;\n  ;HEAP8[$24>>0]=HEAP8[$27>>0]|0;\n  $22 = $85;\n  $23 = $86;\n  $87 = $22;\n  $88 = $23;\n  $19 = $24;\n  $20 = $87;\n  $21 = $88;\n  $89 = $20;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = $21;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = ($90>>>0)<($92>>>0);\n  $94 = $23;\n  $95 = $22;\n  $96 = $93 ? $94 : $95;\n  $97 = HEAP32[$96>>2]|0;\n  $33 = $97;\n }\n $98 = $33;\n $18 = $47;\n $99 = $18;\n $100 = ((($99)) + 4|0);\n $101 = HEAP32[$100>>2]|0;\n $102 = HEAP32[$99>>2]|0;\n $103 = $101;\n $104 = $102;\n $105 = (($103) - ($104))|0;\n $106 = (($105|0) / 44)&-1;\n $107 = $45;\n __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEEC2EjjS6_($46,$98,$106,$107);\n $108 = $45;\n $109 = ((($46)) + 8|0);\n $110 = HEAP32[$109>>2]|0;\n $17 = $110;\n $111 = $17;\n $112 = $44;\n $16 = $112;\n $113 = $16;\n $12 = $108;\n $13 = $111;\n $14 = $113;\n $114 = $12;\n $115 = $13;\n $116 = $14;\n $11 = $116;\n $117 = $11;\n ;HEAP8[$10>>0]=HEAP8[$15>>0]|0;\n $7 = $114;\n $8 = $115;\n $9 = $117;\n $118 = $7;\n $119 = $8;\n $120 = $9;\n $6 = $120;\n $121 = $6;\n $3 = $118;\n $4 = $119;\n $5 = $121;\n $122 = $4;\n $123 = $5;\n $2 = $123;\n $124 = $2;\n __ZN6laszip6models10arithmeticC2EOS1_($122,$124);\n $125 = ((($46)) + 8|0);\n $126 = HEAP32[$125>>2]|0;\n $127 = ((($126)) + 44|0);\n HEAP32[$125>>2] = $127;\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($47,$46);\n __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEED2Ev($46);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip6models10arithmeticC2EOS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n $6 = HEAP32[$5>>2]|0;\n HEAP32[$4>>2] = $6;\n $7 = ((($4)) + 4|0);\n $8 = $3;\n $9 = ((($8)) + 4|0);\n $10 = HEAP8[$9>>0]|0;\n $11 = $10&1;\n $12 = $11&1;\n HEAP8[$7>>0] = $12;\n $13 = ((($4)) + 8|0);\n $14 = $3;\n $15 = ((($14)) + 8|0);\n $16 = HEAP32[$15>>2]|0;\n HEAP32[$13>>2] = $16;\n $17 = ((($4)) + 12|0);\n $18 = $3;\n $19 = ((($18)) + 12|0);\n $20 = HEAP32[$19>>2]|0;\n HEAP32[$17>>2] = $20;\n $21 = ((($4)) + 16|0);\n $22 = $3;\n $23 = ((($22)) + 16|0);\n $24 = HEAP32[$23>>2]|0;\n HEAP32[$21>>2] = $24;\n $25 = ((($4)) + 20|0);\n $26 = $3;\n $27 = ((($26)) + 20|0);\n $28 = HEAP32[$27>>2]|0;\n HEAP32[$25>>2] = $28;\n $29 = ((($4)) + 24|0);\n $30 = $3;\n $31 = ((($30)) + 24|0);\n $32 = HEAP32[$31>>2]|0;\n HEAP32[$29>>2] = $32;\n $33 = ((($4)) + 28|0);\n $34 = $3;\n $35 = ((($34)) + 28|0);\n $36 = HEAP32[$35>>2]|0;\n HEAP32[$33>>2] = $36;\n $37 = ((($4)) + 32|0);\n $38 = $3;\n $39 = ((($38)) + 32|0);\n $40 = HEAP32[$39>>2]|0;\n HEAP32[$37>>2] = $40;\n $41 = ((($4)) + 36|0);\n $42 = $3;\n $43 = ((($42)) + 36|0);\n $44 = HEAP32[$43>>2]|0;\n HEAP32[$41>>2] = $44;\n $45 = ((($4)) + 40|0);\n $46 = $3;\n $47 = ((($46)) + 40|0);\n $48 = HEAP32[$47>>2]|0;\n HEAP32[$45>>2] = $48;\n $49 = $3;\n $50 = ((($49)) + 12|0);\n HEAP32[$50>>2] = 0;\n $51 = $3;\n $52 = ((($51)) + 16|0);\n HEAP32[$52>>2] = 0;\n $53 = $3;\n $54 = ((($53)) + 8|0);\n HEAP32[$54>>2] = 0;\n $55 = $3;\n $56 = ((($55)) + 12|0);\n HEAP32[$56>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEEC2EjjS6_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(97612893);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = ($68*44)|0;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + (($74*44)|0)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + (($79*44)|0)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0;\n var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0;\n var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;\n var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;\n var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;\n var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;\n var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0);\n $15 = sp;\n $20 = sp + 404|0;\n $31 = sp + 292|0;\n $37 = sp + 268|0;\n $49 = sp + 220|0;\n $102 = $0;\n $103 = $1;\n $104 = $102;\n $101 = $104;\n $105 = $101;\n $100 = $105;\n $106 = $100;\n $107 = HEAP32[$106>>2]|0;\n $99 = $107;\n $108 = $99;\n $78 = $105;\n $109 = $78;\n $110 = HEAP32[$109>>2]|0;\n $77 = $110;\n $111 = $77;\n $83 = $105;\n $112 = $83;\n $82 = $112;\n $113 = $82;\n $81 = $113;\n $114 = $81;\n $115 = ((($114)) + 8|0);\n $80 = $115;\n $116 = $80;\n $79 = $116;\n $117 = $79;\n $118 = HEAP32[$117>>2]|0;\n $119 = HEAP32[$113>>2]|0;\n $120 = $118;\n $121 = $119;\n $122 = (($120) - ($121))|0;\n $123 = (($122|0) / 44)&-1;\n $124 = (($111) + (($123*44)|0)|0);\n $85 = $105;\n $125 = $85;\n $126 = HEAP32[$125>>2]|0;\n $84 = $126;\n $127 = $84;\n $86 = $105;\n $128 = $86;\n $129 = ((($128)) + 4|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$128>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 44)&-1;\n $136 = (($127) + (($135*44)|0)|0);\n $88 = $105;\n $137 = $88;\n $138 = HEAP32[$137>>2]|0;\n $87 = $138;\n $139 = $87;\n $93 = $105;\n $140 = $93;\n $92 = $140;\n $141 = $92;\n $91 = $141;\n $142 = $91;\n $143 = ((($142)) + 8|0);\n $90 = $143;\n $144 = $90;\n $89 = $144;\n $145 = $89;\n $146 = HEAP32[$145>>2]|0;\n $147 = HEAP32[$141>>2]|0;\n $148 = $146;\n $149 = $147;\n $150 = (($148) - ($149))|0;\n $151 = (($150|0) / 44)&-1;\n $152 = (($139) + (($151*44)|0)|0);\n $94 = $105;\n $95 = $108;\n $96 = $124;\n $97 = $136;\n $98 = $152;\n $4 = $104;\n $153 = $4;\n $154 = ((($153)) + 8|0);\n $3 = $154;\n $155 = $3;\n $2 = $155;\n $156 = $2;\n $157 = HEAP32[$104>>2]|0;\n $158 = ((($104)) + 4|0);\n $159 = HEAP32[$158>>2]|0;\n $160 = $103;\n $161 = ((($160)) + 4|0);\n $22 = $156;\n $23 = $157;\n $24 = $159;\n $25 = $161;\n while(1) {\n  $162 = $24;\n  $163 = $23;\n  $164 = ($162|0)!=($163|0);\n  if (!($164)) {\n   break;\n  }\n  $165 = $22;\n  $166 = $25;\n  $167 = HEAP32[$166>>2]|0;\n  $168 = ((($167)) + -44|0);\n  $21 = $168;\n  $169 = $21;\n  $170 = $24;\n  $171 = ((($170)) + -44|0);\n  $24 = $171;\n  $6 = $171;\n  $172 = $6;\n  $5 = $172;\n  $173 = $5;\n  $17 = $165;\n  $18 = $169;\n  $19 = $173;\n  $174 = $17;\n  $175 = $18;\n  $176 = $19;\n  $16 = $176;\n  $177 = $16;\n  ;HEAP8[$15>>0]=HEAP8[$20>>0]|0;\n  $12 = $174;\n  $13 = $175;\n  $14 = $177;\n  $178 = $12;\n  $179 = $13;\n  $180 = $14;\n  $11 = $180;\n  $181 = $11;\n  $8 = $178;\n  $9 = $179;\n  $10 = $181;\n  $182 = $9;\n  $183 = $10;\n  $7 = $183;\n  $184 = $7;\n  __ZN6laszip6models10arithmeticC2ERKS1_($182,$184);\n  $185 = $25;\n  $186 = HEAP32[$185>>2]|0;\n  $187 = ((($186)) + -44|0);\n  HEAP32[$185>>2] = $187;\n }\n $188 = $103;\n $189 = ((($188)) + 4|0);\n $29 = $104;\n $30 = $189;\n $190 = $29;\n $28 = $190;\n $191 = $28;\n $192 = HEAP32[$191>>2]|0;\n HEAP32[$31>>2] = $192;\n $193 = $30;\n $26 = $193;\n $194 = $26;\n $195 = HEAP32[$194>>2]|0;\n $196 = $29;\n HEAP32[$196>>2] = $195;\n $27 = $31;\n $197 = $27;\n $198 = HEAP32[$197>>2]|0;\n $199 = $30;\n HEAP32[$199>>2] = $198;\n $200 = ((($104)) + 4|0);\n $201 = $103;\n $202 = ((($201)) + 8|0);\n $35 = $200;\n $36 = $202;\n $203 = $35;\n $34 = $203;\n $204 = $34;\n $205 = HEAP32[$204>>2]|0;\n HEAP32[$37>>2] = $205;\n $206 = $36;\n $32 = $206;\n $207 = $32;\n $208 = HEAP32[$207>>2]|0;\n $209 = $35;\n HEAP32[$209>>2] = $208;\n $33 = $37;\n $210 = $33;\n $211 = HEAP32[$210>>2]|0;\n $212 = $36;\n HEAP32[$212>>2] = $211;\n $40 = $104;\n $213 = $40;\n $214 = ((($213)) + 8|0);\n $39 = $214;\n $215 = $39;\n $38 = $215;\n $216 = $38;\n $217 = $103;\n $43 = $217;\n $218 = $43;\n $219 = ((($218)) + 12|0);\n $42 = $219;\n $220 = $42;\n $41 = $220;\n $221 = $41;\n $47 = $216;\n $48 = $221;\n $222 = $47;\n $46 = $222;\n $223 = $46;\n $224 = HEAP32[$223>>2]|0;\n HEAP32[$49>>2] = $224;\n $225 = $48;\n $44 = $225;\n $226 = $44;\n $227 = HEAP32[$226>>2]|0;\n $228 = $47;\n HEAP32[$228>>2] = $227;\n $45 = $49;\n $229 = $45;\n $230 = HEAP32[$229>>2]|0;\n $231 = $48;\n HEAP32[$231>>2] = $230;\n $232 = $103;\n $233 = ((($232)) + 4|0);\n $234 = HEAP32[$233>>2]|0;\n $235 = $103;\n HEAP32[$235>>2] = $234;\n $50 = $104;\n $236 = $50;\n $237 = ((($236)) + 4|0);\n $238 = HEAP32[$237>>2]|0;\n $239 = HEAP32[$236>>2]|0;\n $240 = $238;\n $241 = $239;\n $242 = (($240) - ($241))|0;\n $243 = (($242|0) / 44)&-1;\n $74 = $104;\n $75 = $243;\n $244 = $74;\n $73 = $244;\n $245 = $73;\n $246 = HEAP32[$245>>2]|0;\n $72 = $246;\n $247 = $72;\n $52 = $244;\n $248 = $52;\n $249 = HEAP32[$248>>2]|0;\n $51 = $249;\n $250 = $51;\n $57 = $244;\n $251 = $57;\n $56 = $251;\n $252 = $56;\n $55 = $252;\n $253 = $55;\n $254 = ((($253)) + 8|0);\n $54 = $254;\n $255 = $54;\n $53 = $255;\n $256 = $53;\n $257 = HEAP32[$256>>2]|0;\n $258 = HEAP32[$252>>2]|0;\n $259 = $257;\n $260 = $258;\n $261 = (($259) - ($260))|0;\n $262 = (($261|0) / 44)&-1;\n $263 = (($250) + (($262*44)|0)|0);\n $59 = $244;\n $264 = $59;\n $265 = HEAP32[$264>>2]|0;\n $58 = $265;\n $266 = $58;\n $64 = $244;\n $267 = $64;\n $63 = $267;\n $268 = $63;\n $62 = $268;\n $269 = $62;\n $270 = ((($269)) + 8|0);\n $61 = $270;\n $271 = $61;\n $60 = $271;\n $272 = $60;\n $273 = HEAP32[$272>>2]|0;\n $274 = HEAP32[$268>>2]|0;\n $275 = $273;\n $276 = $274;\n $277 = (($275) - ($276))|0;\n $278 = (($277|0) / 44)&-1;\n $279 = (($266) + (($278*44)|0)|0);\n $66 = $244;\n $280 = $66;\n $281 = HEAP32[$280>>2]|0;\n $65 = $281;\n $282 = $65;\n $283 = $75;\n $284 = (($282) + (($283*44)|0)|0);\n $67 = $244;\n $68 = $247;\n $69 = $263;\n $70 = $279;\n $71 = $284;\n $76 = $104;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -44|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n  $60 = $16;\n  __ZN6laszip6models10arithmeticD2Ev($60);\n }\n $61 = HEAP32[$35>>2]|0;\n $62 = ($61|0)!=(0|0);\n if (!($62)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $63 = $14;\n $64 = ((($63)) + 12|0);\n $13 = $64;\n $65 = $13;\n $66 = ((($65)) + 4|0);\n $12 = $66;\n $67 = $12;\n $68 = HEAP32[$67>>2]|0;\n $69 = HEAP32[$35>>2]|0;\n $11 = $35;\n $70 = $11;\n $10 = $70;\n $71 = $10;\n $72 = ((($71)) + 12|0);\n $9 = $72;\n $73 = $9;\n $8 = $73;\n $74 = $8;\n $75 = HEAP32[$74>>2]|0;\n $76 = HEAP32[$70>>2]|0;\n $77 = $75;\n $78 = $76;\n $79 = (($77) - ($78))|0;\n $80 = (($79|0) / 44)&-1;\n $5 = $68;\n $6 = $69;\n $7 = $80;\n $81 = $5;\n $82 = $6;\n $83 = $7;\n $2 = $81;\n $3 = $82;\n $4 = $83;\n $84 = $3;\n $1 = $84;\n $85 = $1;\n __ZdlPv($85);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 97612893;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZN6laszip6models10arithmeticC2ERKS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $32 = $0;\n $33 = $1;\n $35 = $32;\n $36 = $33;\n $37 = HEAP32[$36>>2]|0;\n HEAP32[$35>>2] = $37;\n $38 = ((($35)) + 4|0);\n $39 = $33;\n $40 = ((($39)) + 4|0);\n $41 = HEAP8[$40>>0]|0;\n $42 = $41&1;\n $43 = $42&1;\n HEAP8[$38>>0] = $43;\n $44 = ((($35)) + 20|0);\n $45 = $33;\n $46 = ((($45)) + 20|0);\n $47 = HEAP32[$46>>2]|0;\n HEAP32[$44>>2] = $47;\n $48 = ((($35)) + 24|0);\n $49 = $33;\n $50 = ((($49)) + 24|0);\n $51 = HEAP32[$50>>2]|0;\n HEAP32[$48>>2] = $51;\n $52 = ((($35)) + 28|0);\n $53 = $33;\n $54 = ((($53)) + 28|0);\n $55 = HEAP32[$54>>2]|0;\n HEAP32[$52>>2] = $55;\n $56 = ((($35)) + 32|0);\n $57 = $33;\n $58 = ((($57)) + 32|0);\n $59 = HEAP32[$58>>2]|0;\n HEAP32[$56>>2] = $59;\n $60 = ((($35)) + 36|0);\n $61 = $33;\n $62 = ((($61)) + 36|0);\n $63 = HEAP32[$62>>2]|0;\n HEAP32[$60>>2] = $63;\n $64 = ((($35)) + 40|0);\n $65 = $33;\n $66 = ((($65)) + 40|0);\n $67 = HEAP32[$66>>2]|0;\n HEAP32[$64>>2] = $67;\n $68 = HEAP32[$35>>2]|0;\n $69 = $68<<2;\n $34 = $69;\n $70 = $34;\n $71 = (__ZN6laszip5utilsL14aligned_mallocEi($70)|0);\n $72 = ((($35)) + 8|0);\n HEAP32[$72>>2] = $71;\n $73 = $33;\n $74 = ((($73)) + 8|0);\n $75 = HEAP32[$74>>2]|0;\n $76 = $33;\n $77 = ((($76)) + 8|0);\n $78 = HEAP32[$77>>2]|0;\n $79 = HEAP32[$35>>2]|0;\n $80 = (($78) + ($79<<2)|0);\n $81 = ((($35)) + 8|0);\n $82 = HEAP32[$81>>2]|0;\n $29 = $75;\n $30 = $80;\n $31 = $82;\n $83 = $29;\n $28 = $83;\n $84 = $28;\n $85 = $30;\n $22 = $85;\n $86 = $22;\n $87 = $31;\n $23 = $87;\n $88 = $23;\n $24 = $84;\n $25 = $86;\n $26 = $88;\n $89 = $25;\n $90 = $24;\n $91 = $89;\n $92 = $90;\n $93 = (($91) - ($92))|0;\n $94 = (($93|0) / 4)&-1;\n $27 = $94;\n $95 = $27;\n $96 = ($95>>>0)>(0);\n if ($96) {\n  $97 = $26;\n  $98 = $24;\n  $99 = $27;\n  $100 = $99<<2;\n  _memmove(($97|0),($98|0),($100|0))|0;\n }\n $101 = $34;\n $102 = (__ZN6laszip5utilsL14aligned_mallocEi($101)|0);\n $103 = ((($35)) + 12|0);\n HEAP32[$103>>2] = $102;\n $104 = $33;\n $105 = ((($104)) + 12|0);\n $106 = HEAP32[$105>>2]|0;\n $107 = $33;\n $108 = ((($107)) + 12|0);\n $109 = HEAP32[$108>>2]|0;\n $110 = HEAP32[$35>>2]|0;\n $111 = (($109) + ($110<<2)|0);\n $112 = ((($35)) + 12|0);\n $113 = HEAP32[$112>>2]|0;\n $9 = $106;\n $10 = $111;\n $11 = $113;\n $114 = $9;\n $8 = $114;\n $115 = $8;\n $116 = $10;\n $2 = $116;\n $117 = $2;\n $118 = $11;\n $3 = $118;\n $119 = $3;\n $4 = $115;\n $5 = $117;\n $6 = $119;\n $120 = $5;\n $121 = $4;\n $122 = $120;\n $123 = $121;\n $124 = (($122) - ($123))|0;\n $125 = (($124|0) / 4)&-1;\n $7 = $125;\n $126 = $7;\n $127 = ($126>>>0)>(0);\n if ($127) {\n  $128 = $6;\n  $129 = $4;\n  $130 = $7;\n  $131 = $130<<2;\n  _memmove(($128|0),($129|0),($131|0))|0;\n }\n $132 = ((($35)) + 36|0);\n $133 = HEAP32[$132>>2]|0;\n $134 = ($133|0)!=(0);\n if (!($134)) {\n  $172 = ((($35)) + 16|0);\n  HEAP32[$172>>2] = 0;\n  STACKTOP = sp;return;\n }\n $135 = ((($35)) + 36|0);\n $136 = HEAP32[$135>>2]|0;\n $137 = (($136) + 2)|0;\n $138 = $137<<2;\n $34 = $138;\n $139 = $34;\n $140 = (__ZN6laszip5utilsL14aligned_mallocEi($139)|0);\n $141 = ((($35)) + 16|0);\n HEAP32[$141>>2] = $140;\n $142 = $33;\n $143 = ((($142)) + 16|0);\n $144 = HEAP32[$143>>2]|0;\n $145 = $33;\n $146 = ((($145)) + 16|0);\n $147 = HEAP32[$146>>2]|0;\n $148 = ((($35)) + 36|0);\n $149 = HEAP32[$148>>2]|0;\n $150 = (($149) + 2)|0;\n $151 = (($147) + ($150<<2)|0);\n $152 = ((($35)) + 16|0);\n $153 = HEAP32[$152>>2]|0;\n $19 = $144;\n $20 = $151;\n $21 = $153;\n $154 = $19;\n $18 = $154;\n $155 = $18;\n $156 = $20;\n $12 = $156;\n $157 = $12;\n $158 = $21;\n $13 = $158;\n $159 = $13;\n $14 = $155;\n $15 = $157;\n $16 = $159;\n $160 = $15;\n $161 = $14;\n $162 = $160;\n $163 = $161;\n $164 = (($162) - ($163))|0;\n $165 = (($164|0) / 4)&-1;\n $17 = $165;\n $166 = $17;\n $167 = ($166>>>0)>(0);\n if ($167) {\n  $168 = $16;\n  $169 = $14;\n  $170 = $17;\n  $171 = $170<<2;\n  _memmove(($168|0),($169|0),($171|0))|0;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip6models10arithmetic6updateEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $14 = 0, $15 = 0, $16 = 0;\n var $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $1 = $0;\n $9 = $1;\n $10 = ((($9)) + 24|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = ((($9)) + 20|0);\n $13 = HEAP32[$12>>2]|0;\n $14 = (($13) + ($11))|0;\n HEAP32[$12>>2] = $14;\n $15 = ($14>>>0)>(32768);\n L1: do {\n  if ($15) {\n   $16 = ((($9)) + 20|0);\n   HEAP32[$16>>2] = 0;\n   $2 = 0;\n   while(1) {\n    $17 = $2;\n    $18 = HEAP32[$9>>2]|0;\n    $19 = ($17>>>0)<($18>>>0);\n    if (!($19)) {\n     break L1;\n    }\n    $20 = ((($9)) + 12|0);\n    $21 = HEAP32[$20>>2]|0;\n    $22 = $2;\n    $23 = (($21) + ($22<<2)|0);\n    $24 = HEAP32[$23>>2]|0;\n    $25 = (($24) + 1)|0;\n    $26 = $25 >>> 1;\n    $27 = ((($9)) + 12|0);\n    $28 = HEAP32[$27>>2]|0;\n    $29 = $2;\n    $30 = (($28) + ($29<<2)|0);\n    HEAP32[$30>>2] = $26;\n    $31 = ((($9)) + 20|0);\n    $32 = HEAP32[$31>>2]|0;\n    $33 = (($32) + ($26))|0;\n    HEAP32[$31>>2] = $33;\n    $34 = $2;\n    $35 = (($34) + 1)|0;\n    $2 = $35;\n   }\n  }\n } while(0);\n $4 = 0;\n $5 = 0;\n $36 = ((($9)) + 20|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = (2147483648 / ($37>>>0))&-1;\n $6 = $38;\n $39 = ((($9)) + 4|0);\n $40 = HEAP8[$39>>0]|0;\n $41 = $40&1;\n L7: do {\n  if ($41) {\n   label = 7;\n  } else {\n   $42 = ((($9)) + 36|0);\n   $43 = HEAP32[$42>>2]|0;\n   $44 = ($43|0)==(0);\n   if ($44) {\n    label = 7;\n   } else {\n    $3 = 0;\n    while(1) {\n     $65 = $3;\n     $66 = HEAP32[$9>>2]|0;\n     $67 = ($65>>>0)<($66>>>0);\n     if (!($67)) {\n      break;\n     }\n     $68 = $6;\n     $69 = $4;\n     $70 = Math_imul($68, $69)|0;\n     $71 = $70 >>> 16;\n     $72 = ((($9)) + 8|0);\n     $73 = HEAP32[$72>>2]|0;\n     $74 = $3;\n     $75 = (($73) + ($74<<2)|0);\n     HEAP32[$75>>2] = $71;\n     $76 = ((($9)) + 12|0);\n     $77 = HEAP32[$76>>2]|0;\n     $78 = $3;\n     $79 = (($77) + ($78<<2)|0);\n     $80 = HEAP32[$79>>2]|0;\n     $81 = $4;\n     $82 = (($81) + ($80))|0;\n     $4 = $82;\n     $83 = ((($9)) + 8|0);\n     $84 = HEAP32[$83>>2]|0;\n     $85 = $3;\n     $86 = (($84) + ($85<<2)|0);\n     $87 = HEAP32[$86>>2]|0;\n     $88 = ((($9)) + 40|0);\n     $89 = HEAP32[$88>>2]|0;\n     $90 = $87 >>> $89;\n     $7 = $90;\n     while(1) {\n      $91 = $5;\n      $92 = $7;\n      $93 = ($91>>>0)<($92>>>0);\n      $94 = $3;\n      if (!($93)) {\n       break;\n      }\n      $95 = (($94) - 1)|0;\n      $96 = ((($9)) + 16|0);\n      $97 = HEAP32[$96>>2]|0;\n      $98 = $5;\n      $99 = (($98) + 1)|0;\n      $5 = $99;\n      $100 = (($97) + ($99<<2)|0);\n      HEAP32[$100>>2] = $95;\n     }\n     $101 = (($94) + 1)|0;\n     $3 = $101;\n    }\n    $102 = ((($9)) + 16|0);\n    $103 = HEAP32[$102>>2]|0;\n    HEAP32[$103>>2] = 0;\n    while(1) {\n     $104 = $5;\n     $105 = ((($9)) + 36|0);\n     $106 = HEAP32[$105>>2]|0;\n     $107 = ($104>>>0)<=($106>>>0);\n     if (!($107)) {\n      break L7;\n     }\n     $108 = HEAP32[$9>>2]|0;\n     $109 = (($108) - 1)|0;\n     $110 = ((($9)) + 16|0);\n     $111 = HEAP32[$110>>2]|0;\n     $112 = $5;\n     $113 = (($112) + 1)|0;\n     $5 = $113;\n     $114 = (($111) + ($113<<2)|0);\n     HEAP32[$114>>2] = $109;\n    }\n   }\n  }\n } while(0);\n L21: do {\n  if ((label|0) == 7) {\n   $3 = 0;\n   while(1) {\n    $45 = $3;\n    $46 = HEAP32[$9>>2]|0;\n    $47 = ($45>>>0)<($46>>>0);\n    if (!($47)) {\n     break L21;\n    }\n    $48 = $6;\n    $49 = $4;\n    $50 = Math_imul($48, $49)|0;\n    $51 = $50 >>> 16;\n    $52 = ((($9)) + 8|0);\n    $53 = HEAP32[$52>>2]|0;\n    $54 = $3;\n    $55 = (($53) + ($54<<2)|0);\n    HEAP32[$55>>2] = $51;\n    $56 = ((($9)) + 12|0);\n    $57 = HEAP32[$56>>2]|0;\n    $58 = $3;\n    $59 = (($57) + ($58<<2)|0);\n    $60 = HEAP32[$59>>2]|0;\n    $61 = $4;\n    $62 = (($61) + ($60))|0;\n    $4 = $62;\n    $63 = $3;\n    $64 = (($63) + 1)|0;\n    $3 = $64;\n   }\n  }\n } while(0);\n $115 = ((($9)) + 24|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = ($116*5)|0;\n $118 = $117 >>> 2;\n $119 = ((($9)) + 24|0);\n HEAP32[$119>>2] = $118;\n $120 = HEAP32[$9>>2]|0;\n $121 = (($120) + 6)|0;\n $122 = $121 << 3;\n $8 = $122;\n $123 = ((($9)) + 24|0);\n $124 = HEAP32[$123>>2]|0;\n $125 = $8;\n $126 = ($124>>>0)>($125>>>0);\n if (!($126)) {\n  $129 = ((($9)) + 24|0);\n  $130 = HEAP32[$129>>2]|0;\n  $131 = ((($9)) + 28|0);\n  HEAP32[$131>>2] = $130;\n  STACKTOP = sp;return;\n }\n $127 = $8;\n $128 = ((($9)) + 24|0);\n HEAP32[$128>>2] = $127;\n $129 = ((($9)) + 24|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = ((($9)) + 28|0);\n HEAP32[$131>>2] = $130;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS_6models10arithmeticEEEiRT_RT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $7 = $0;\n $8 = $1;\n $9 = $2;\n $13 = $7;\n $14 = $8;\n $15 = $9;\n $16 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($14,$15)|0);\n HEAP32[$13>>2] = $16;\n $17 = HEAP32[$13>>2]|0;\n $18 = ($17|0)!=(0);\n if (!($18)) {\n  $69 = $8;\n  $70 = ((($13)) + 48|0);\n  $71 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9decodeBitINS_6models14arithmetic_bitEEEjRT_($69,$70)|0);\n  $10 = $71;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n $19 = HEAP32[$13>>2]|0;\n $20 = ($19>>>0)<(32);\n if (!($20)) {\n  $67 = ((($13)) + 28|0);\n  $68 = HEAP32[$67>>2]|0;\n  $10 = $68;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n $21 = HEAP32[$13>>2]|0;\n $22 = ((($13)) + 12|0);\n $23 = HEAP32[$22>>2]|0;\n $24 = ($21>>>0)<=($23>>>0);\n if ($24) {\n  $25 = $8;\n  $26 = ((($13)) + 68|0);\n  $27 = HEAP32[$13>>2]|0;\n  $28 = (($27) - 1)|0;\n  $5 = $26;\n  $6 = $28;\n  $29 = $5;\n  $30 = HEAP32[$29>>2]|0;\n  $31 = $6;\n  $32 = (($30) + (($31*44)|0)|0);\n  $33 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($25,$32)|0);\n  $10 = $33;\n } else {\n  $34 = HEAP32[$13>>2]|0;\n  $35 = ((($13)) + 12|0);\n  $36 = HEAP32[$35>>2]|0;\n  $37 = (($34) - ($36))|0;\n  $11 = $37;\n  $38 = $8;\n  $39 = ((($13)) + 68|0);\n  $40 = HEAP32[$13>>2]|0;\n  $41 = (($40) - 1)|0;\n  $3 = $39;\n  $4 = $41;\n  $42 = $3;\n  $43 = HEAP32[$42>>2]|0;\n  $44 = $4;\n  $45 = (($43) + (($44*44)|0)|0);\n  $46 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($38,$45)|0);\n  $10 = $46;\n  $47 = $8;\n  $48 = $11;\n  $49 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($47,$48)|0);\n  $12 = $49;\n  $50 = $10;\n  $51 = $11;\n  $52 = $50 << $51;\n  $53 = $12;\n  $54 = $52 | $53;\n  $10 = $54;\n }\n $55 = $10;\n $56 = HEAP32[$13>>2]|0;\n $57 = (($56) - 1)|0;\n $58 = 1 << $57;\n $59 = ($55|0)>=($58|0);\n if ($59) {\n  $60 = $10;\n  $61 = (($60) + 1)|0;\n  $10 = $61;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n } else {\n  $62 = HEAP32[$13>>2]|0;\n  $63 = 1 << $62;\n  $64 = (($63) - 1)|0;\n  $65 = $10;\n  $66 = (($65) - ($64))|0;\n  $10 = $66;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n return (0)|0;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $2 = $0;\n $3 = $1;\n $13 = $2;\n $14 = ((($13)) + 8|0);\n $15 = HEAP32[$14>>2]|0;\n $7 = $15;\n $16 = $3;\n $17 = ((($16)) + 16|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18|0)!=(0|0);\n if ($19) {\n  $20 = ((($13)) + 4|0);\n  $21 = HEAP32[$20>>2]|0;\n  $22 = ((($13)) + 8|0);\n  $23 = HEAP32[$22>>2]|0;\n  $24 = $23 >>> 15;\n  HEAP32[$22>>2] = $24;\n  $25 = (($21>>>0) / ($24>>>0))&-1;\n  $8 = $25;\n  $26 = $8;\n  $27 = $3;\n  $28 = ((($27)) + 40|0);\n  $29 = HEAP32[$28>>2]|0;\n  $30 = $26 >>> $29;\n  $9 = $30;\n  $31 = $3;\n  $32 = ((($31)) + 16|0);\n  $33 = HEAP32[$32>>2]|0;\n  $34 = $9;\n  $35 = (($33) + ($34<<2)|0);\n  $36 = HEAP32[$35>>2]|0;\n  $5 = $36;\n  $37 = $3;\n  $38 = ((($37)) + 16|0);\n  $39 = HEAP32[$38>>2]|0;\n  $40 = $9;\n  $41 = (($40) + 1)|0;\n  $42 = (($39) + ($41<<2)|0);\n  $43 = HEAP32[$42>>2]|0;\n  $44 = (($43) + 1)|0;\n  $4 = $44;\n  while(1) {\n   $45 = $4;\n   $46 = $5;\n   $47 = (($46) + 1)|0;\n   $48 = ($45>>>0)>($47>>>0);\n   if (!($48)) {\n    break;\n   }\n   $49 = $5;\n   $50 = $4;\n   $51 = (($49) + ($50))|0;\n   $52 = $51 >>> 1;\n   $10 = $52;\n   $53 = $3;\n   $54 = ((($53)) + 8|0);\n   $55 = HEAP32[$54>>2]|0;\n   $56 = $10;\n   $57 = (($55) + ($56<<2)|0);\n   $58 = HEAP32[$57>>2]|0;\n   $59 = $8;\n   $60 = ($58>>>0)>($59>>>0);\n   $61 = $10;\n   if ($60) {\n    $4 = $61;\n   } else {\n    $5 = $61;\n   }\n  }\n  $62 = $3;\n  $63 = ((($62)) + 8|0);\n  $64 = HEAP32[$63>>2]|0;\n  $65 = $5;\n  $66 = (($64) + ($65<<2)|0);\n  $67 = HEAP32[$66>>2]|0;\n  $68 = ((($13)) + 8|0);\n  $69 = HEAP32[$68>>2]|0;\n  $70 = Math_imul($67, $69)|0;\n  $6 = $70;\n  $71 = $5;\n  $72 = $3;\n  $73 = ((($72)) + 32|0);\n  $74 = HEAP32[$73>>2]|0;\n  $75 = ($71|0)!=($74|0);\n  if ($75) {\n   $76 = $3;\n   $77 = ((($76)) + 8|0);\n   $78 = HEAP32[$77>>2]|0;\n   $79 = $5;\n   $80 = (($79) + 1)|0;\n   $81 = (($78) + ($80<<2)|0);\n   $82 = HEAP32[$81>>2]|0;\n   $83 = ((($13)) + 8|0);\n   $84 = HEAP32[$83>>2]|0;\n   $85 = Math_imul($82, $84)|0;\n   $7 = $85;\n  }\n } else {\n  $5 = 0;\n  $6 = 0;\n  $86 = ((($13)) + 8|0);\n  $87 = HEAP32[$86>>2]|0;\n  $88 = $87 >>> 15;\n  HEAP32[$86>>2] = $88;\n  $89 = $3;\n  $90 = HEAP32[$89>>2]|0;\n  $4 = $90;\n  $91 = $90 >>> 1;\n  $11 = $91;\n  while(1) {\n   $92 = ((($13)) + 8|0);\n   $93 = HEAP32[$92>>2]|0;\n   $94 = $3;\n   $95 = ((($94)) + 8|0);\n   $96 = HEAP32[$95>>2]|0;\n   $97 = $11;\n   $98 = (($96) + ($97<<2)|0);\n   $99 = HEAP32[$98>>2]|0;\n   $100 = Math_imul($93, $99)|0;\n   $12 = $100;\n   $101 = $12;\n   $102 = ((($13)) + 4|0);\n   $103 = HEAP32[$102>>2]|0;\n   $104 = ($101>>>0)>($103>>>0);\n   $105 = $11;\n   if ($104) {\n    $4 = $105;\n    $106 = $12;\n    $7 = $106;\n   } else {\n    $5 = $105;\n    $107 = $12;\n    $6 = $107;\n   }\n   $108 = $5;\n   $109 = $4;\n   $110 = (($108) + ($109))|0;\n   $111 = $110 >>> 1;\n   $11 = $111;\n   $112 = $5;\n   $113 = ($111|0)!=($112|0);\n   if (!($113)) {\n    break;\n   }\n  }\n }\n $114 = $6;\n $115 = ((($13)) + 4|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = (($116) - ($114))|0;\n HEAP32[$115>>2] = $117;\n $118 = $7;\n $119 = $6;\n $120 = (($118) - ($119))|0;\n $121 = ((($13)) + 8|0);\n HEAP32[$121>>2] = $120;\n $122 = ((($13)) + 8|0);\n $123 = HEAP32[$122>>2]|0;\n $124 = ($123>>>0)<(16777216);\n if ($124) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($13);\n }\n $125 = $3;\n $126 = ((($125)) + 12|0);\n $127 = HEAP32[$126>>2]|0;\n $128 = $5;\n $129 = (($127) + ($128<<2)|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = (($130) + 1)|0;\n HEAP32[$129>>2] = $131;\n $132 = $3;\n $133 = ((($132)) + 28|0);\n $134 = HEAP32[$133>>2]|0;\n $135 = (($134) + -1)|0;\n HEAP32[$133>>2] = $135;\n $136 = ($135|0)==(0);\n if (!($136)) {\n  $138 = $5;\n  STACKTOP = sp;return ($138|0);\n }\n $137 = $3;\n __ZN6laszip6models10arithmetic6updateEv($137);\n $138 = $5;\n STACKTOP = sp;return ($138|0);\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $3 = $0;\n $4 = $1;\n $8 = $3;\n $9 = $4;\n $10 = ($9|0)!=(0);\n $11 = $4;\n $12 = ($11>>>0)<=(32);\n $or$cond = $10 & $12;\n if (!($or$cond)) {\n  ___assert_fail((5409|0),(5430|0),139,(5499|0));\n  // unreachable;\n }\n $13 = $4;\n $14 = ($13>>>0)>(19);\n if ($14) {\n  $15 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($8)|0);\n  $16 = $15&65535;\n  $5 = $16;\n  $17 = $4;\n  $18 = (($17) - 16)|0;\n  $4 = $18;\n  $19 = $4;\n  $20 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($8,$19)|0);\n  $21 = $20 << 16;\n  $6 = $21;\n  $22 = $6;\n  $23 = $5;\n  $24 = $22 | $23;\n  $2 = $24;\n  $43 = $2;\n  STACKTOP = sp;return ($43|0);\n }\n $25 = ((($8)) + 4|0);\n $26 = HEAP32[$25>>2]|0;\n $27 = $4;\n $28 = ((($8)) + 8|0);\n $29 = HEAP32[$28>>2]|0;\n $30 = $29 >>> $27;\n HEAP32[$28>>2] = $30;\n $31 = (($26>>>0) / ($30>>>0))&-1;\n $7 = $31;\n $32 = ((($8)) + 8|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = $7;\n $35 = Math_imul($33, $34)|0;\n $36 = ((($8)) + 4|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = (($37) - ($35))|0;\n HEAP32[$36>>2] = $38;\n $39 = ((($8)) + 8|0);\n $40 = HEAP32[$39>>2]|0;\n $41 = ($40>>>0)<(16777216);\n if ($41) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($8);\n }\n $42 = $7;\n $2 = $42;\n $43 = $2;\n STACKTOP = sp;return ($43|0);\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9decodeBitINS_6models14arithmetic_bitEEEjRT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $6 = $2;\n $7 = $3;\n $8 = ((($7)) + 8|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = ((($6)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = $11 >>> 13;\n $13 = Math_imul($9, $12)|0;\n $4 = $13;\n $14 = ((($6)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $4;\n $17 = ($15>>>0)>=($16>>>0);\n $18 = $17&1;\n $5 = $18;\n $19 = $5;\n $20 = ($19|0)==(0);\n $21 = $4;\n if ($20) {\n  $22 = ((($6)) + 8|0);\n  HEAP32[$22>>2] = $21;\n  $23 = $3;\n  $24 = ((($23)) + 12|0);\n  $25 = HEAP32[$24>>2]|0;\n  $26 = (($25) + 1)|0;\n  HEAP32[$24>>2] = $26;\n } else {\n  $27 = ((($6)) + 4|0);\n  $28 = HEAP32[$27>>2]|0;\n  $29 = (($28) - ($21))|0;\n  HEAP32[$27>>2] = $29;\n  $30 = $4;\n  $31 = ((($6)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  $33 = (($32) - ($30))|0;\n  HEAP32[$31>>2] = $33;\n }\n $34 = ((($6)) + 8|0);\n $35 = HEAP32[$34>>2]|0;\n $36 = ($35>>>0)<(16777216);\n if ($36) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($6);\n }\n $37 = $3;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $40 = (($39) + -1)|0;\n HEAP32[$38>>2] = $40;\n $41 = ($40|0)==(0);\n if (!($41)) {\n  $43 = $5;\n  STACKTOP = sp;return ($43|0);\n }\n $42 = $3;\n __ZN6laszip6models14arithmetic_bit6updateEv($42);\n $43 = $5;\n STACKTOP = sp;return ($43|0);\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n while(1) {\n  $3 = ((($2)) + 4|0);\n  $4 = HEAP32[$3>>2]|0;\n  $5 = $4 << 8;\n  $6 = HEAP32[$2>>2]|0;\n  $7 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($6)|0);\n  $8 = $7&255;\n  $9 = $5 | $8;\n  $10 = ((($2)) + 4|0);\n  HEAP32[$10>>2] = $9;\n  $11 = ((($2)) + 8|0);\n  $12 = HEAP32[$11>>2]|0;\n  $13 = $12 << 8;\n  HEAP32[$11>>2] = $13;\n  $14 = ($13>>>0)<(16777216);\n  if (!($14)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $3 = $1;\n $4 = ((($3)) + 4|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ((($3)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $7 >>> 16;\n HEAP32[$6>>2] = $8;\n $9 = (($5>>>0) / ($8>>>0))&-1;\n $2 = $9;\n $10 = ((($3)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = $2;\n $13 = Math_imul($11, $12)|0;\n $14 = ((($3)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = (($15) - ($13))|0;\n HEAP32[$14>>2] = $16;\n $17 = ((($3)) + 8|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18>>>0)<(16777216);\n if ($19) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($3);\n }\n $20 = $2;\n $21 = ($20>>>0)<(65536);\n if ($21) {\n  $22 = $2;\n  $23 = $22&65535;\n  STACKTOP = sp;return ($23|0);\n } else {\n  ___assert_fail((5508|0),(5430|0),172,(5522|0));\n  // unreachable;\n }\n return (0)|0;\n}\nfunction __ZN6laszip6models14arithmetic_bit6updateEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $3 = $1;\n $4 = HEAP32[$3>>2]|0;\n $5 = ((($3)) + 16|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (($6) + ($4))|0;\n HEAP32[$5>>2] = $7;\n $8 = ($7>>>0)>(8192);\n if ($8) {\n  $9 = ((($3)) + 16|0);\n  $10 = HEAP32[$9>>2]|0;\n  $11 = (($10) + 1)|0;\n  $12 = $11 >>> 1;\n  $13 = ((($3)) + 16|0);\n  HEAP32[$13>>2] = $12;\n  $14 = ((($3)) + 12|0);\n  $15 = HEAP32[$14>>2]|0;\n  $16 = (($15) + 1)|0;\n  $17 = $16 >>> 1;\n  $18 = ((($3)) + 12|0);\n  HEAP32[$18>>2] = $17;\n  $19 = ((($3)) + 12|0);\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ((($3)) + 16|0);\n  $22 = HEAP32[$21>>2]|0;\n  $23 = ($20|0)==($22|0);\n  if ($23) {\n   $24 = ((($3)) + 16|0);\n   $25 = HEAP32[$24>>2]|0;\n   $26 = (($25) + 1)|0;\n   HEAP32[$24>>2] = $26;\n  }\n }\n $27 = ((($3)) + 16|0);\n $28 = HEAP32[$27>>2]|0;\n $29 = (2147483648 / ($28>>>0))&-1;\n $2 = $29;\n $30 = ((($3)) + 12|0);\n $31 = HEAP32[$30>>2]|0;\n $32 = $2;\n $33 = Math_imul($31, $32)|0;\n $34 = $33 >>> 18;\n $35 = ((($3)) + 8|0);\n HEAP32[$35>>2] = $34;\n $36 = HEAP32[$3>>2]|0;\n $37 = ($36*5)|0;\n $38 = $37 >>> 2;\n HEAP32[$3>>2] = $38;\n $39 = HEAP32[$3>>2]|0;\n $40 = ($39>>>0)>(64);\n if (!($40)) {\n  $41 = HEAP32[$3>>2]|0;\n  $42 = ((($3)) + 4|0);\n  HEAP32[$42>>2] = $41;\n  STACKTOP = sp;return;\n }\n HEAP32[$3>>2] = 64;\n $41 = HEAP32[$3>>2]|0;\n $42 = ((($3)) + 4|0);\n HEAP32[$42>>2] = $41;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE9readPointEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;\n var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;\n var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;\n var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0;\n var $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0);\n $$byval_copy = sp + 356|0;\n $7 = sp + 332|0;\n $13 = sp + 308|0;\n $21 = sp + 272|0;\n $28 = sp + 240|0;\n $34 = sp + 216|0;\n $39 = sp + 192|0;\n $40 = sp + 184|0;\n $46 = sp + 160|0;\n $52 = sp + 136|0;\n $57 = sp + 112|0;\n $63 = sp + 88|0;\n $69 = sp + 64|0;\n $74 = sp + 40|0;\n $82 = sp;\n $80 = $0;\n $81 = $1;\n $83 = $80;\n $84 = ((($83)) + 328|0);\n $85 = ((($84)) + 8|0);\n $86 = $85;\n $87 = $86;\n $88 = HEAP32[$87>>2]|0;\n $89 = (($86) + 4)|0;\n $90 = $89;\n $91 = HEAP32[$90>>2]|0;\n $92 = ((($83)) + 247|0);\n $93 = ((($92)) + 12|0);\n $94 = HEAPU8[$93>>0]|(HEAPU8[$93+1>>0]<<8)|(HEAPU8[$93+2>>0]<<16)|(HEAPU8[$93+3>>0]<<24);\n $95 = ($88|0)==($94|0);\n $96 = ($91|0)==(0);\n $97 = $95 & $96;\n if (!($97)) {\n  $98 = ((($83)) + 320|0);\n  $79 = $98;\n  $99 = $79;\n  $78 = $99;\n  $100 = $78;\n  $101 = HEAP32[$100>>2]|0;\n  $102 = ($101|0)!=(0|0);\n  if ($102) {\n   $103 = ((($83)) + 312|0);\n   $77 = $103;\n   $104 = $77;\n   $76 = $104;\n   $105 = $76;\n   $106 = HEAP32[$105>>2]|0;\n   $107 = ($106|0)!=(0|0);\n   if ($107) {\n    $258 = ((($83)) + 320|0);\n    $75 = $258;\n    $259 = $75;\n    $260 = HEAP32[$259>>2]|0;\n    $261 = HEAP32[$260>>2]|0;\n    $262 = HEAP32[$261>>2]|0;\n    $263 = $81;\n    (FUNCTION_TABLE_iii[$262 & 255]($260,$263)|0);\n    $264 = ((($83)) + 328|0);\n    $265 = ((($264)) + 8|0);\n    $266 = $265;\n    $267 = $266;\n    $268 = HEAP32[$267>>2]|0;\n    $269 = (($266) + 4)|0;\n    $270 = $269;\n    $271 = HEAP32[$270>>2]|0;\n    $272 = (_i64Add(($268|0),($271|0),1,0)|0);\n    $273 = tempRet0;\n    $274 = $265;\n    $275 = $274;\n    HEAP32[$275>>2] = $272;\n    $276 = (($274) + 4)|0;\n    $277 = $276;\n    HEAP32[$277>>2] = $273;\n    STACKTOP = sp;return;\n   }\n  }\n }\n $108 = ((($83)) + 320|0);\n $73 = $108;\n $109 = $73;\n $72 = $74;\n $110 = $72;\n HEAP32[$110>>2] = 0;\n $111 = ((($110)) + 4|0);\n HEAP32[$111>>2] = 0;\n $70 = $74;\n $71 = $109;\n $112 = $70;\n $113 = $71;\n $67 = $112;\n $68 = $113;\n $114 = $67;\n $66 = $114;\n $115 = $66;\n $116 = HEAP32[$115>>2]|0;\n HEAP32[$69>>2] = $116;\n $117 = $68;\n $64 = $117;\n $118 = $64;\n $119 = HEAP32[$118>>2]|0;\n $120 = $67;\n HEAP32[$120>>2] = $119;\n $65 = $69;\n $121 = $65;\n $122 = HEAP32[$121>>2]|0;\n $123 = $68;\n HEAP32[$123>>2] = $122;\n $124 = ((($112)) + 4|0);\n $125 = $71;\n $126 = ((($125)) + 4|0);\n $61 = $124;\n $62 = $126;\n $127 = $61;\n $60 = $127;\n $128 = $60;\n $129 = HEAP32[$128>>2]|0;\n HEAP32[$63>>2] = $129;\n $130 = $62;\n $58 = $130;\n $131 = $58;\n $132 = HEAP32[$131>>2]|0;\n $133 = $61;\n HEAP32[$133>>2] = $132;\n $59 = $63;\n $134 = $59;\n $135 = HEAP32[$134>>2]|0;\n $136 = $62;\n HEAP32[$136>>2] = $135;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($74);\n $137 = ((($83)) + 312|0);\n $56 = $137;\n $138 = $56;\n $55 = $57;\n $139 = $55;\n HEAP32[$139>>2] = 0;\n $140 = ((($139)) + 4|0);\n HEAP32[$140>>2] = 0;\n $53 = $57;\n $54 = $138;\n $141 = $53;\n $142 = $54;\n $50 = $141;\n $51 = $142;\n $143 = $50;\n $49 = $143;\n $144 = $49;\n $145 = HEAP32[$144>>2]|0;\n HEAP32[$52>>2] = $145;\n $146 = $51;\n $47 = $146;\n $147 = $47;\n $148 = HEAP32[$147>>2]|0;\n $149 = $50;\n HEAP32[$149>>2] = $148;\n $48 = $52;\n $150 = $48;\n $151 = HEAP32[$150>>2]|0;\n $152 = $51;\n HEAP32[$152>>2] = $151;\n $153 = ((($141)) + 4|0);\n $154 = $54;\n $155 = ((($154)) + 4|0);\n $44 = $153;\n $45 = $155;\n $156 = $44;\n $43 = $156;\n $157 = $43;\n $158 = HEAP32[$157>>2]|0;\n HEAP32[$46>>2] = $158;\n $159 = $45;\n $41 = $159;\n $160 = $41;\n $161 = HEAP32[$160>>2]|0;\n $162 = $44;\n HEAP32[$162>>2] = $161;\n $42 = $46;\n $163 = $42;\n $164 = HEAP32[$163>>2]|0;\n $165 = $45;\n HEAP32[$165>>2] = $164;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($57);\n $166 = ((($83)) + 312|0);\n $167 = (__Znwj(12)|0);\n $168 = ((($83)) + 4|0);\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($167,$168);\n $37 = $166;\n $38 = $167;\n $169 = $37;\n $170 = $38;\n ;HEAP32[$40>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$40>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEC2IS9_EEPT_NS_9enable_ifIXsr14is_convertibleISD_PS9_EE5valueENSA_5__natEE4typeE($39,$170,$$byval_copy);\n $35 = $39;\n $36 = $169;\n $171 = $35;\n $172 = $36;\n $32 = $171;\n $33 = $172;\n $173 = $32;\n $31 = $173;\n $174 = $31;\n $175 = HEAP32[$174>>2]|0;\n HEAP32[$34>>2] = $175;\n $176 = $33;\n $29 = $176;\n $177 = $29;\n $178 = HEAP32[$177>>2]|0;\n $179 = $32;\n HEAP32[$179>>2] = $178;\n $30 = $34;\n $180 = $30;\n $181 = HEAP32[$180>>2]|0;\n $182 = $33;\n HEAP32[$182>>2] = $181;\n $183 = ((($171)) + 4|0);\n $184 = $36;\n $185 = ((($184)) + 4|0);\n $26 = $183;\n $27 = $185;\n $186 = $26;\n $25 = $186;\n $187 = $25;\n $188 = HEAP32[$187>>2]|0;\n HEAP32[$28>>2] = $188;\n $189 = $27;\n $23 = $189;\n $190 = $23;\n $191 = HEAP32[$190>>2]|0;\n $192 = $26;\n HEAP32[$192>>2] = $191;\n $24 = $28;\n $193 = $24;\n $194 = HEAP32[$193>>2]|0;\n $195 = $27;\n HEAP32[$195>>2] = $194;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($39);\n $196 = ((($83)) + 312|0);\n $22 = $196;\n $197 = $22;\n $198 = HEAP32[$197>>2]|0;\n $199 = ((($83)) + 300|0);\n __ZN6laszip7factory18build_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENSt3__210shared_ptrINS_7formats20dynamic_decompressorEEERT_RKNS0_13record_schemaE($82,$198,$199);\n $200 = ((($83)) + 320|0);\n $19 = $200;\n $20 = $82;\n $201 = $19;\n $202 = $20;\n $18 = $202;\n $203 = $18;\n $16 = $21;\n $17 = $203;\n $204 = $16;\n $205 = $17;\n $206 = HEAP32[$205>>2]|0;\n HEAP32[$204>>2] = $206;\n $207 = ((($204)) + 4|0);\n $208 = $17;\n $209 = ((($208)) + 4|0);\n $210 = HEAP32[$209>>2]|0;\n HEAP32[$207>>2] = $210;\n $211 = $17;\n HEAP32[$211>>2] = 0;\n $212 = $17;\n $213 = ((($212)) + 4|0);\n HEAP32[$213>>2] = 0;\n $14 = $21;\n $15 = $201;\n $214 = $14;\n $215 = $15;\n $11 = $214;\n $12 = $215;\n $216 = $11;\n $10 = $216;\n $217 = $10;\n $218 = HEAP32[$217>>2]|0;\n HEAP32[$13>>2] = $218;\n $219 = $12;\n $8 = $219;\n $220 = $8;\n $221 = HEAP32[$220>>2]|0;\n $222 = $11;\n HEAP32[$222>>2] = $221;\n $9 = $13;\n $223 = $9;\n $224 = HEAP32[$223>>2]|0;\n $225 = $12;\n HEAP32[$225>>2] = $224;\n $226 = ((($214)) + 4|0);\n $227 = $15;\n $228 = ((($227)) + 4|0);\n $5 = $226;\n $6 = $228;\n $229 = $5;\n $4 = $229;\n $230 = $4;\n $231 = HEAP32[$230>>2]|0;\n HEAP32[$7>>2] = $231;\n $232 = $6;\n $2 = $232;\n $233 = $2;\n $234 = HEAP32[$233>>2]|0;\n $235 = $5;\n HEAP32[$235>>2] = $234;\n $3 = $7;\n $236 = $3;\n $237 = HEAP32[$236>>2]|0;\n $238 = $6;\n HEAP32[$238>>2] = $237;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($21);\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($82);\n $239 = ((($83)) + 328|0);\n $240 = $239;\n $241 = $240;\n $242 = HEAP32[$241>>2]|0;\n $243 = (($240) + 4)|0;\n $244 = $243;\n $245 = HEAP32[$244>>2]|0;\n $246 = (_i64Add(($242|0),($245|0),1,0)|0);\n $247 = tempRet0;\n $248 = $239;\n $249 = $248;\n HEAP32[$249>>2] = $246;\n $250 = (($248) + 4)|0;\n $251 = $250;\n HEAP32[$251>>2] = $247;\n $252 = ((($83)) + 328|0);\n $253 = ((($252)) + 8|0);\n $254 = $253;\n $255 = $254;\n HEAP32[$255>>2] = 0;\n $256 = (($254) + 4)|0;\n $257 = $256;\n HEAP32[$257>>2] = 0;\n $258 = ((($83)) + 320|0);\n $75 = $258;\n $259 = $75;\n $260 = HEAP32[$259>>2]|0;\n $261 = HEAP32[$260>>2]|0;\n $262 = HEAP32[$261>>2]|0;\n $263 = $81;\n (FUNCTION_TABLE_iii[$262 & 255]($260,$263)|0);\n $264 = ((($83)) + 328|0);\n $265 = ((($264)) + 8|0);\n $266 = $265;\n $267 = $266;\n $268 = HEAP32[$267>>2]|0;\n $269 = (($266) + 4)|0;\n $270 = $269;\n $271 = HEAP32[$270>>2]|0;\n $272 = (_i64Add(($268|0),($271|0),1,0)|0);\n $273 = tempRet0;\n $274 = $265;\n $275 = $274;\n HEAP32[$275>>2] = $272;\n $276 = (($274) + 4)|0;\n $277 = $276;\n HEAP32[$277>>2] = $273;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory18build_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENSt3__210shared_ptrINS_7formats20dynamic_decompressorEEERT_RKNS0_13record_schemaE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $5 = sp;\n $15 = sp + 64|0;\n $16 = sp + 8|0;\n $17 = sp + 4|0;\n $11 = $1;\n $12 = $2;\n $18 = $12;\n $19 = (__ZNK6laszip7factory13record_schema6formatEv($18)|0);\n $13 = $19;\n $20 = $13;\n $21 = ($20|0)==(-1);\n if ($21) {\n  $22 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip19unknown_schema_typeC2Ev($22);\n  ___cxa_throw(($22|0),(256|0),(47|0));\n  // unreachable;\n }\n $23 = $12;\n $24 = (__ZNK6laszip7factory13record_schema10extrabytesEv($23)|0);\n $14 = $24;\n $25 = $14;\n $26 = ($25|0)!=(0);\n if ($26) {\n  $27 = $11;\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENS0_26dynamic_field_decompressorIT_E3ptrERSB_($15,$27);\n  $10 = $15;\n  $28 = $10;\n  $29 = HEAP32[$28>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7point10EEEvv($29);\n  $30 = $13;\n  $31 = ($30|0)==(1);\n  $32 = $13;\n  $33 = ($32|0)==(3);\n  $or$cond = $31 | $33;\n  if ($or$cond) {\n   $8 = $15;\n   $34 = $8;\n   $35 = HEAP32[$34>>2]|0;\n   __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7gpstimeEEEvv($35);\n  }\n  $36 = $13;\n  $37 = ($36|0)==(2);\n  $38 = $13;\n  $39 = ($38|0)==(3);\n  $or$cond3 = $37 | $39;\n  if ($or$cond3) {\n   $7 = $15;\n   $40 = $7;\n   $41 = HEAP32[$40>>2]|0;\n   __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las3rgbEEEvv($41);\n  }\n  $6 = $15;\n  $42 = $6;\n  $43 = HEAP32[$42>>2]|0;\n  $44 = $14;\n  __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2Ej($16,$44);\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISE_EEEEEEvRKT_($43,$16);\n  __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($16);\n  ;HEAP32[$17>>2]=0|0;\n  ;HEAP8[$5>>0]=HEAP8[$17>>0]|0;HEAP8[$5+1>>0]=HEAP8[$17+1>>0]|0;HEAP8[$5+2>>0]=HEAP8[$17+2>>0]|0;HEAP8[$5+3>>0]=HEAP8[$17+3>>0]|0;\n  $3 = $0;\n  $4 = $15;\n  $45 = $3;\n  $46 = $4;\n  $47 = HEAP32[$46>>2]|0;\n  HEAP32[$45>>2] = $47;\n  $48 = ((($45)) + 4|0);\n  $49 = $4;\n  $50 = ((($49)) + 4|0);\n  $51 = HEAP32[$50>>2]|0;\n  HEAP32[$48>>2] = $51;\n  $52 = $4;\n  HEAP32[$52>>2] = 0;\n  $53 = $4;\n  $54 = ((($53)) + 4|0);\n  HEAP32[$54>>2] = 0;\n  __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEED2Ev($15);\n  STACKTOP = sp;return;\n }\n $55 = $13;\n switch ($55|0) {\n case 0:  {\n  $56 = $11;\n  $57 = (__Znwj(4788)|0);\n  __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEEC2Ev($57);\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$56,$57);\n  STACKTOP = sp;return;\n  break;\n }\n case 1:  {\n  $58 = $11;\n  $59 = (__Znwj(5116)|0);\n  __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEEC2Ev($59);\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$58,$59);\n  STACKTOP = sp;return;\n  break;\n }\n case 2:  {\n  $60 = $11;\n  $61 = (__Znwj(5104)|0);\n  __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($61);\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$60,$61);\n  STACKTOP = sp;return;\n  break;\n }\n case 3:  {\n  $62 = $11;\n  $63 = (__Znwj(5432)|0);\n  __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEEC2Ev($63);\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$62,$63);\n  STACKTOP = sp;return;\n  break;\n }\n default: {\n  $9 = $0;\n  $64 = $9;\n  HEAP32[$64>>2] = 0;\n  $65 = ((($64)) + 4|0);\n  HEAP32[$65>>2] = 0;\n  STACKTOP = sp;return;\n }\n }\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEC2IS9_EEPT_NS_9enable_ifIXsr14is_convertibleISD_PS9_EE5valueENSA_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $50 = sp + 76|0;\n $51 = sp + 72|0;\n $52 = sp + 8|0;\n $53 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$52>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$53>>0]=HEAP8[$66>>0]|0;\n $49 = $79;\n HEAP32[$50>>2] = $80;\n $81 = $49;\n $47 = $81;\n $48 = 0;\n $82 = $47;\n $83 = $48;\n $45 = $82;\n $46 = $83;\n $84 = $45;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $46;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $48;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (1908);\n $89 = ((($81)) + 12|0);\n $21 = $53;\n $90 = $21;\n $30 = $51;\n $31 = $50;\n $32 = $90;\n $91 = $30;\n $92 = $31;\n $29 = $92;\n $93 = $29;\n $23 = $91;\n $24 = $93;\n $94 = $23;\n $95 = $24;\n $22 = $95;\n $96 = $22;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $32;\n $25 = $98;\n $99 = $25;\n $27 = $91;\n $28 = $99;\n $100 = $28;\n $26 = $100;\n $33 = $52;\n $101 = $33;\n $42 = $89;\n $43 = $51;\n $44 = $101;\n $102 = $42;\n $103 = $43;\n $41 = $103;\n $104 = $41;\n $35 = $102;\n $36 = $104;\n $105 = $35;\n $106 = $36;\n $34 = $106;\n $107 = $34;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $44;\n $37 = $108;\n $109 = $37;\n $39 = $102;\n $40 = $109;\n $110 = $40;\n $38 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $20 = $65;\n $120 = $20;\n $17 = $120;\n $18 = 0;\n $121 = $17;\n $16 = $121;\n $122 = $16;\n $15 = $122;\n $123 = $15;\n $124 = HEAP32[$123>>2]|0;\n $19 = $124;\n $125 = $18;\n $12 = $121;\n $126 = $12;\n $11 = $126;\n $127 = $11;\n HEAP32[$127>>2] = $125;\n $128 = $19;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $10 = $121;\n $130 = $10;\n $9 = $130;\n $131 = $9;\n $132 = $19;\n $13 = $131;\n $14 = $132;\n $133 = $14;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($133);\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $4 = $22;\n $23 = $4;\n $3 = $23;\n $24 = $3;\n $2 = $24;\n $25 = $2;\n $1 = $25;\n $26 = $1;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($28);\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 248;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZNK6laszip7factory13record_schema6formatEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $15 = $13;\n $11 = $15;\n $16 = $11;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = HEAP32[$16>>2]|0;\n $20 = $18;\n $21 = $19;\n $22 = (($20) - ($21))|0;\n $23 = (($22|0) / 12)&-1;\n $14 = $23;\n $24 = $14;\n $25 = ($24|0)==(0);\n if ($25) {\n  $12 = -1;\n  $68 = $12;\n  STACKTOP = sp;return ($68|0);\n }\n $26 = (__ZNK6laszip7factory13record_schema10extrabytesEv($15)|0);\n $27 = ($26|0)!=(0);\n if ($27) {\n  $28 = $14;\n  $29 = (($28) + -1)|0;\n  $14 = $29;\n }\n $30 = $14;\n $31 = ($30|0)==(0);\n if (!($31)) {\n  $9 = $15;\n  $10 = 0;\n  $32 = $9;\n  $33 = HEAP32[$32>>2]|0;\n  $34 = $10;\n  $35 = (($33) + (($34*12)|0)|0);\n  $36 = (__ZN6laszip7factory11record_item5pointEv()|0);\n  $37 = (__ZNK6laszip7factory11record_itemneERKS1_($35,$36)|0);\n  if (!($37)) {\n   $38 = $14;\n   $39 = ($38|0)==(1);\n   if ($39) {\n    $12 = 0;\n    $68 = $12;\n    STACKTOP = sp;return ($68|0);\n   }\n   $40 = $14;\n   $41 = ($40|0)==(2);\n   if ($41) {\n    $7 = $15;\n    $8 = 1;\n    $42 = $7;\n    $43 = HEAP32[$42>>2]|0;\n    $44 = $8;\n    $45 = (($43) + (($44*12)|0)|0);\n    $46 = (__ZN6laszip7factory11record_item7gpstimeEv()|0);\n    $47 = (__ZNK6laszip7factory11record_itemeqERKS1_($45,$46)|0);\n    if ($47) {\n     $12 = 1;\n     $68 = $12;\n     STACKTOP = sp;return ($68|0);\n    }\n    $3 = $15;\n    $4 = 1;\n    $48 = $3;\n    $49 = HEAP32[$48>>2]|0;\n    $50 = $4;\n    $51 = (($49) + (($50*12)|0)|0);\n    $52 = (__ZN6laszip7factory11record_item3rgbEv()|0);\n    $53 = (__ZNK6laszip7factory11record_itemeqERKS1_($51,$52)|0);\n    if ($53) {\n     $12 = 2;\n     $68 = $12;\n     STACKTOP = sp;return ($68|0);\n    }\n   }\n   $54 = $14;\n   $55 = ($54|0)==(3);\n   if ($55) {\n    $1 = $15;\n    $2 = 1;\n    $56 = $1;\n    $57 = HEAP32[$56>>2]|0;\n    $58 = $2;\n    $59 = (($57) + (($58*12)|0)|0);\n    $60 = (__ZN6laszip7factory11record_item7gpstimeEv()|0);\n    $61 = (__ZNK6laszip7factory11record_itemeqERKS1_($59,$60)|0);\n    if ($61) {\n     $5 = $15;\n     $6 = 2;\n     $62 = $5;\n     $63 = HEAP32[$62>>2]|0;\n     $64 = $6;\n     $65 = (($63) + (($64*12)|0)|0);\n     $66 = (__ZN6laszip7factory11record_item3rgbEv()|0);\n     $67 = (__ZNK6laszip7factory11record_itemeqERKS1_($65,$66)|0);\n     if ($67) {\n      $12 = 3;\n      $68 = $12;\n      STACKTOP = sp;return ($68|0);\n     }\n    }\n   }\n   $12 = -1;\n   $68 = $12;\n   STACKTOP = sp;return ($68|0);\n  }\n }\n $12 = -1;\n $68 = $12;\n STACKTOP = sp;return ($68|0);\n}\nfunction __ZN6laszip19unknown_schema_typeC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,5848);\n HEAP32[$2>>2] = (1936);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip19unknown_schema_typeD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNK6laszip7factory13record_schema10extrabytesEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $2 = sp;\n $5 = sp + 124|0;\n $8 = sp + 112|0;\n $11 = sp + 100|0;\n $16 = sp + 80|0;\n $22 = sp + 56|0;\n $28 = sp + 32|0;\n $33 = sp + 8|0;\n $32 = $0;\n $34 = $32;\n $30 = $34;\n $35 = $30;\n $36 = ((($35)) + 4|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = HEAP32[$35>>2]|0;\n $39 = $37;\n $40 = $38;\n $41 = (($39) - ($40))|0;\n $42 = (($41|0) / 12)&-1;\n $43 = ($42|0)!=(0);\n if ($43) {\n  $10 = $34;\n  $44 = $10;\n  $9 = $44;\n  $45 = $9;\n  $46 = ((($45)) + 4|0);\n  $47 = HEAP32[$46>>2]|0;\n  $6 = $45;\n  $7 = $47;\n  $48 = $7;\n  $3 = $5;\n  $4 = $48;\n  $49 = $3;\n  $50 = $4;\n  HEAP32[$49>>2] = $50;\n  $51 = HEAP32[$5>>2]|0;\n  HEAP32[$8>>2] = $51;\n  $52 = HEAP32[$8>>2]|0;\n  HEAP32[$11>>2] = $52;\n  ;HEAP8[$2>>0]=HEAP8[$11>>0]|0;HEAP8[$2+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$2+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$2+3>>0]=HEAP8[$11+3>>0]|0;\n  $1 = $33;\n  $53 = $1;\n  ;HEAP32[$53>>2]=HEAP32[$2>>2]|0;\n  $54 = ((($53)) + 4|0);\n  ;HEAP32[$54>>2]=HEAP32[$2>>2]|0;\n  $17 = $33;\n  $55 = $17;\n  $15 = $55;\n  $56 = $15;\n  $57 = ((($56)) + 4|0);\n  ;HEAP32[$16>>2]=HEAP32[$57>>2]|0;\n  $14 = $16;\n  $58 = $14;\n  $59 = HEAP32[$58>>2]|0;\n  $60 = ((($59)) + -12|0);\n  HEAP32[$58>>2] = $60;\n  $13 = $58;\n  $61 = $13;\n  $62 = HEAP32[$61>>2]|0;\n  $12 = $62;\n  $63 = $12;\n  $64 = HEAP32[$63>>2]|0;\n  $65 = ($64|0)==(0);\n  if ($65) {\n   $23 = $33;\n   $66 = $23;\n   $21 = $66;\n   $67 = $21;\n   $68 = ((($67)) + 4|0);\n   ;HEAP32[$22>>2]=HEAP32[$68>>2]|0;\n   $20 = $22;\n   $69 = $20;\n   $70 = HEAP32[$69>>2]|0;\n   $71 = ((($70)) + -12|0);\n   HEAP32[$69>>2] = $71;\n   $19 = $69;\n   $72 = $19;\n   $73 = HEAP32[$72>>2]|0;\n   $18 = $73;\n   $74 = $18;\n   $75 = ((($74)) + 8|0);\n   $76 = HEAP32[$75>>2]|0;\n   $77 = ($76|0)==(2);\n   if ($77) {\n    $29 = $33;\n    $78 = $29;\n    $27 = $78;\n    $79 = $27;\n    $80 = ((($79)) + 4|0);\n    ;HEAP32[$28>>2]=HEAP32[$80>>2]|0;\n    $26 = $28;\n    $81 = $26;\n    $82 = HEAP32[$81>>2]|0;\n    $83 = ((($82)) + -12|0);\n    HEAP32[$81>>2] = $83;\n    $25 = $81;\n    $84 = $25;\n    $85 = HEAP32[$84>>2]|0;\n    $24 = $85;\n    $86 = $24;\n    $87 = ((($86)) + 4|0);\n    $88 = HEAP32[$87>>2]|0;\n    $31 = $88;\n    $89 = $31;\n    STACKTOP = sp;return ($89|0);\n   }\n  }\n }\n $31 = 0;\n $89 = $31;\n STACKTOP = sp;return ($89|0);\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENS0_26dynamic_field_decompressorIT_E3ptrERSB_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 8|0;\n $3 = sp;\n $2 = $1;\n $4 = (__Znwj(24)|0);\n $5 = $2;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEC2ERS9_($4,$5);\n ;HEAP32[$3>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEEC2ISC_EEPT_NS_9enable_ifIXsr14is_convertibleISG_PSC_EE5valueENSD_5__natEE4typeE($0,$4,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7point10EEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(4792)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7gpstimeEEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(336)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las3rgbEEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(324)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISE_EEEEEEvRKT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $$byval_copy = sp + 140|0;\n $17 = sp;\n $22 = sp + 145|0;\n $33 = sp + 144|0;\n $36 = sp + 8|0;\n $37 = sp + 4|0;\n $34 = $0;\n $35 = $1;\n $38 = $34;\n $39 = ((($38)) + 8|0);\n $40 = (__Znwj(64)|0);\n $41 = ((($38)) + 4|0);\n $42 = HEAP32[$41>>2]|0;\n $43 = $35;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEEC2ERS9_RKSF_($40,$42,$43);\n ;HEAP32[$37>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$37>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($36,$40,$$byval_copy);\n $31 = $39;\n $32 = $36;\n $44 = $31;\n $45 = ((($44)) + 4|0);\n $46 = HEAP32[$45>>2]|0;\n $30 = $44;\n $47 = $30;\n $48 = ((($47)) + 8|0);\n $29 = $48;\n $49 = $29;\n $28 = $49;\n $50 = $28;\n $51 = HEAP32[$50>>2]|0;\n $52 = ($46>>>0)<($51>>>0);\n if ($52) {\n  $25 = $33;\n  $26 = $44;\n  $27 = 1;\n  $4 = $44;\n  $53 = $4;\n  $54 = ((($53)) + 8|0);\n  $3 = $54;\n  $55 = $3;\n  $2 = $55;\n  $56 = $2;\n  $57 = ((($44)) + 4|0);\n  $58 = HEAP32[$57>>2]|0;\n  $5 = $58;\n  $59 = $5;\n  $60 = $32;\n  $6 = $60;\n  $61 = $6;\n  $19 = $56;\n  $20 = $59;\n  $21 = $61;\n  $62 = $19;\n  $63 = $20;\n  $64 = $21;\n  $18 = $64;\n  $65 = $18;\n  ;HEAP8[$17>>0]=HEAP8[$22>>0]|0;\n  $14 = $62;\n  $15 = $63;\n  $16 = $65;\n  $66 = $14;\n  $67 = $15;\n  $68 = $16;\n  $13 = $68;\n  $69 = $13;\n  $10 = $66;\n  $11 = $67;\n  $12 = $69;\n  $70 = $11;\n  $71 = $12;\n  $9 = $71;\n  $72 = $9;\n  $7 = $70;\n  $8 = $72;\n  $73 = $7;\n  $74 = $8;\n  $75 = HEAP32[$74>>2]|0;\n  HEAP32[$73>>2] = $75;\n  $76 = ((($73)) + 4|0);\n  $77 = $8;\n  $78 = ((($77)) + 4|0);\n  $79 = HEAP32[$78>>2]|0;\n  HEAP32[$76>>2] = $79;\n  $80 = $8;\n  HEAP32[$80>>2] = 0;\n  $81 = $8;\n  $82 = ((($81)) + 4|0);\n  HEAP32[$82>>2] = 0;\n  $23 = $33;\n  $83 = ((($44)) + 4|0);\n  $84 = HEAP32[$83>>2]|0;\n  $85 = ((($84)) + 8|0);\n  HEAP32[$83>>2] = $85;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($36);\n  STACKTOP = sp;return;\n } else {\n  $86 = $32;\n  $24 = $86;\n  $87 = $24;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($44,$87);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($36);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2Ej($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $4 = sp;\n $2 = $0;\n $3 = $1;\n $5 = $2;\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($5)) + 4|0);\n HEAP8[$7>>0] = 0;\n $8 = ((($5)) + 8|0);\n $9 = $3;\n __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($8,$9);\n $10 = ((($5)) + 20|0);\n $11 = $3;\n __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($10,$11);\n $12 = ((($5)) + 32|0);\n $13 = $3;\n __ZN6laszip6models10arithmeticC2EjbPj($4,256,0,0);\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2EjRKS3_($12,$13,$4);\n __ZN6laszip6models10arithmeticD2Ev($4);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 32|0);\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($3);\n $4 = ((($2)) + 20|0);\n __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($4);\n $5 = ((($2)) + 8|0);\n __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($5);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 12|0;\n $5 = sp;\n $3 = $1;\n $4 = $2;\n $6 = (__Znwj(12)|0);\n $7 = $3;\n $8 = $4;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEC2ERS9_PSH_($6,$7,$8);\n ;HEAP32[$5>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISP_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 12|0;\n $5 = sp;\n $3 = $1;\n $4 = $2;\n $6 = (__Znwj(12)|0);\n $7 = $3;\n $8 = $4;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEC2ERS9_PSK_($6,$7,$8);\n ;HEAP32[$5>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 12|0;\n $5 = sp;\n $3 = $1;\n $4 = $2;\n $6 = (__Znwj(12)|0);\n $7 = $3;\n $8 = $4;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEC2ERS9_PSK_($6,$7,$8);\n ;HEAP32[$5>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_3rgbENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 12|0;\n $5 = sp;\n $3 = $1;\n $4 = $2;\n $6 = (__Znwj(12)|0);\n $7 = $3;\n $8 = $4;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEC2ERS9_PSN_($6,$7,$8);\n ;HEAP32[$5>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEENSG_INSH_3rgbENSJ_ISP_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISV_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZNK6laszip7factory11record_itemneERKS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n $6 = (__ZNK6laszip7factory11record_itemeqERKS1_($4,$5)|0);\n $7 = $6 ^ 1;\n STACKTOP = sp;return ($7|0);\n}\nfunction __ZN6laszip7factory11record_item5pointEv() {\n var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP8[21192]|0;\n $1 = ($0<<24>>24)==(0);\n if ($1) {\n  $2 = (___cxa_guard_acquire(21192)|0);\n  $3 = ($2|0)!=(0);\n  if ($3) {\n   __ZN6laszip7factory11record_itemC2Eiii(21256,6,20,2);\n  }\n }\n return (21256|0);\n}\nfunction __ZNK6laszip7factory11record_itemeqERKS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = HEAP32[$4>>2]|0;\n $6 = $3;\n $7 = HEAP32[$6>>2]|0;\n $8 = ($5|0)==($7|0);\n if (!($8)) {\n  $21 = 0;\n  STACKTOP = sp;return ($21|0);\n }\n $9 = ((($4)) + 8|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = $3;\n $12 = ((($11)) + 8|0);\n $13 = HEAP32[$12>>2]|0;\n $14 = ($10|0)==($13|0);\n if (!($14)) {\n  $21 = 0;\n  STACKTOP = sp;return ($21|0);\n }\n $15 = ((($4)) + 4|0);\n $16 = HEAP32[$15>>2]|0;\n $17 = $3;\n $18 = ((($17)) + 4|0);\n $19 = HEAP32[$18>>2]|0;\n $20 = ($16|0)==($19|0);\n $21 = $20;\n STACKTOP = sp;return ($21|0);\n}\nfunction __ZN6laszip7factory11record_item7gpstimeEv() {\n var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP8[21200]|0;\n $1 = ($0<<24>>24)==(0);\n if ($1) {\n  $2 = (___cxa_guard_acquire(21200)|0);\n  $3 = ($2|0)!=(0);\n  if ($3) {\n   __ZN6laszip7factory11record_itemC2Eiii(21268,7,8,2);\n  }\n }\n return (21268|0);\n}\nfunction __ZN6laszip7factory11record_item3rgbEv() {\n var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP8[21208]|0;\n $1 = ($0<<24>>24)==(0);\n if ($1) {\n  $2 = (___cxa_guard_acquire(21208)|0);\n  $3 = ($2|0)!=(0);\n  if ($3) {\n   __ZN6laszip7factory11record_itemC2Eiii(21280,8,6,2);\n  }\n }\n return (21280|0);\n}\nfunction __ZN6laszip19unknown_schema_typeD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip19unknown_schema_typeD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEC2ERS9_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $12 = sp + 12|0;\n $14 = $0;\n $15 = $1;\n $16 = $14;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($16);\n HEAP32[$16>>2] = (1956);\n $17 = ((($16)) + 4|0);\n $18 = $15;\n HEAP32[$17>>2] = $18;\n $19 = ((($16)) + 8|0);\n $13 = $19;\n $20 = $13;\n $11 = $20;\n $21 = $11;\n $10 = $21;\n HEAP32[$21>>2] = 0;\n $22 = ((($21)) + 4|0);\n HEAP32[$22>>2] = 0;\n $23 = ((($21)) + 8|0);\n HEAP32[$12>>2] = 0;\n $8 = $23;\n $9 = $12;\n $24 = $8;\n $25 = $9;\n $7 = $25;\n $26 = $7;\n $3 = $24;\n $4 = $26;\n $27 = $3;\n $28 = $4;\n $2 = $28;\n HEAP32[$27>>2] = 0;\n $6 = $24;\n $29 = $6;\n $5 = $29;\n $30 = ((($16)) + 20|0);\n HEAP8[$30>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEEC2ISC_EEPT_NS_9enable_ifIXsr14is_convertibleISG_PSC_EE5valueENSD_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (1996);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats20dynamic_decompressorC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (1976);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0;\n var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;\n var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;\n var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0;\n var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $20 = sp + 72|0;\n $23 = sp + 60|0;\n $27 = sp + 44|0;\n $30 = sp + 32|0;\n $35 = sp + 12|0;\n $36 = sp + 8|0;\n $37 = sp;\n $32 = $0;\n $33 = $1;\n $38 = $32;\n $39 = ((($38)) + 8|0);\n $34 = $39;\n $40 = $34;\n $31 = $40;\n $41 = $31;\n $42 = HEAP32[$41>>2]|0;\n $28 = $41;\n $29 = $42;\n $43 = $29;\n $25 = $27;\n $26 = $43;\n $44 = $25;\n $45 = $26;\n HEAP32[$44>>2] = $45;\n $46 = HEAP32[$27>>2]|0;\n HEAP32[$30>>2] = $46;\n $47 = HEAP32[$30>>2]|0;\n HEAP32[$35>>2] = $47;\n $48 = $34;\n $24 = $48;\n $49 = $24;\n $50 = ((($49)) + 4|0);\n $51 = HEAP32[$50>>2]|0;\n $21 = $49;\n $22 = $51;\n $52 = $22;\n $18 = $20;\n $19 = $52;\n $53 = $18;\n $54 = $19;\n HEAP32[$53>>2] = $54;\n $55 = HEAP32[$20>>2]|0;\n HEAP32[$23>>2] = $55;\n $56 = HEAP32[$23>>2]|0;\n HEAP32[$36>>2] = $56;\n while(1) {\n  $16 = $35;\n  $17 = $36;\n  $57 = $16;\n  $58 = $17;\n  $14 = $57;\n  $15 = $58;\n  $59 = $14;\n  $13 = $59;\n  $60 = $13;\n  $61 = HEAP32[$60>>2]|0;\n  $62 = $15;\n  $12 = $62;\n  $63 = $12;\n  $64 = HEAP32[$63>>2]|0;\n  $65 = ($61|0)==($64|0);\n  $66 = $65 ^ 1;\n  if (!($66)) {\n   break;\n  }\n  $10 = $35;\n  $67 = $10;\n  $68 = HEAP32[$67>>2]|0;\n  $8 = $37;\n  $9 = $68;\n  $69 = $8;\n  $70 = $9;\n  $71 = HEAP32[$70>>2]|0;\n  HEAP32[$69>>2] = $71;\n  $72 = ((($69)) + 4|0);\n  $73 = $9;\n  $74 = ((($73)) + 4|0);\n  $75 = HEAP32[$74>>2]|0;\n  HEAP32[$72>>2] = $75;\n  $76 = ((($69)) + 4|0);\n  $77 = HEAP32[$76>>2]|0;\n  $78 = ($77|0)!=(0|0);\n  if ($78) {\n   $79 = ((($69)) + 4|0);\n   $80 = HEAP32[$79>>2]|0;\n   $7 = $80;\n   $81 = $7;\n   $6 = $81;\n   $82 = $6;\n   $83 = ((($82)) + 4|0);\n   $3 = $83;\n   $84 = $3;\n   $4 = 1;\n   $85 = $4;\n   $86 = HEAP32[$84>>2]|0;\n   $87 = (($86) + ($85))|0;\n   HEAP32[$84>>2] = $87;\n   $88 = (($86) + ($85))|0;\n   $5 = $88;\n  }\n  $2 = $37;\n  $89 = $2;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = HEAP32[$90>>2]|0;\n  $92 = ((($91)) + 12|0);\n  $93 = HEAP32[$92>>2]|0;\n  $94 = $33;\n  $95 = (FUNCTION_TABLE_iii[$93 & 255]($90,$94)|0);\n  $33 = $95;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($37);\n  $11 = $35;\n  $96 = $11;\n  $97 = HEAP32[$96>>2]|0;\n  $98 = ((($97)) + 8|0);\n  HEAP32[$96>>2] = $98;\n }\n $99 = ((($38)) + 20|0);\n $100 = HEAP8[$99>>0]|0;\n $101 = $100&1;\n if (!($101)) {\n  $105 = $33;\n  STACKTOP = sp;return ($105|0);\n }\n $102 = ((($38)) + 20|0);\n HEAP8[$102>>0] = 0;\n $103 = ((($38)) + 4|0);\n $104 = HEAP32[$103>>2]|0;\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($104);\n $105 = $33;\n STACKTOP = sp;return ($105|0);\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (1956);\n $3 = ((($2)) + 8|0);\n __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($3);\n __ZN6laszip7formats20dynamic_decompressorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats20dynamic_decompressorD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats20dynamic_decompressorD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n _llvm_trap();\n // unreachable;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -8|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n  $54 = $16;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($54);\n }\n $55 = $28;\n $56 = ((($37)) + 4|0);\n HEAP32[$56>>2] = $55;\n $14 = $32;\n $57 = $14;\n $58 = ((($57)) + 8|0);\n $13 = $58;\n $59 = $13;\n $12 = $59;\n $60 = $12;\n $61 = HEAP32[$32>>2]|0;\n $4 = $32;\n $62 = $4;\n $3 = $62;\n $63 = $3;\n $64 = ((($63)) + 8|0);\n $2 = $64;\n $65 = $2;\n $1 = $65;\n $66 = $1;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$62>>2]|0;\n $69 = $67;\n $70 = $68;\n $71 = (($69) - ($70))|0;\n $72 = (($71|0) / 8)&-1;\n $9 = $60;\n $10 = $61;\n $11 = $72;\n $73 = $9;\n $74 = $10;\n $75 = $11;\n $6 = $73;\n $7 = $74;\n $8 = $75;\n $76 = $7;\n $5 = $76;\n $77 = $5;\n __ZdlPv($77);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 312;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2024);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2072);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $12 = sp + 8|0;\n $17 = sp + 201|0;\n $26 = sp;\n $29 = sp + 200|0;\n $37 = sp + 72|0;\n $40 = sp + 60|0;\n $48 = sp + 12|0;\n $45 = $0;\n $46 = $1;\n $49 = $45;\n $44 = $49;\n $50 = $44;\n $51 = ((($50)) + 8|0);\n $43 = $51;\n $52 = $43;\n $42 = $52;\n $53 = $42;\n $47 = $53;\n $41 = $49;\n $54 = $41;\n $55 = ((($54)) + 4|0);\n $56 = HEAP32[$55>>2]|0;\n $57 = HEAP32[$54>>2]|0;\n $58 = $56;\n $59 = $57;\n $60 = (($58) - ($59))|0;\n $61 = (($60|0) / 8)&-1;\n $62 = (($61) + 1)|0;\n $36 = $49;\n HEAP32[$37>>2] = $62;\n $63 = $36;\n $64 = (__ZNKSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE8max_sizeEv($63)|0);\n $38 = $64;\n $65 = HEAP32[$37>>2]|0;\n $66 = $38;\n $67 = ($65>>>0)>($66>>>0);\n if ($67) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($63);\n  // unreachable;\n }\n $34 = $63;\n $68 = $34;\n $33 = $68;\n $69 = $33;\n $32 = $69;\n $70 = $32;\n $71 = ((($70)) + 8|0);\n $31 = $71;\n $72 = $31;\n $30 = $72;\n $73 = $30;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 8)&-1;\n $39 = $79;\n $80 = $39;\n $81 = $38;\n $82 = (($81>>>0) / 2)&-1;\n $83 = ($80>>>0)>=($82>>>0);\n if ($83) {\n  $84 = $38;\n  $35 = $84;\n } else {\n  $85 = $39;\n  $86 = $85<<1;\n  HEAP32[$40>>2] = $86;\n  $27 = $40;\n  $28 = $37;\n  $87 = $27;\n  $88 = $28;\n  ;HEAP8[$26>>0]=HEAP8[$29>>0]|0;\n  $24 = $87;\n  $25 = $88;\n  $89 = $24;\n  $90 = $25;\n  $21 = $26;\n  $22 = $89;\n  $23 = $90;\n  $91 = $22;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = $23;\n  $94 = HEAP32[$93>>2]|0;\n  $95 = ($92>>>0)<($94>>>0);\n  $96 = $25;\n  $97 = $24;\n  $98 = $95 ? $96 : $97;\n  $99 = HEAP32[$98>>2]|0;\n  $35 = $99;\n }\n $100 = $35;\n $20 = $49;\n $101 = $20;\n $102 = ((($101)) + 4|0);\n $103 = HEAP32[$102>>2]|0;\n $104 = HEAP32[$101>>2]|0;\n $105 = $103;\n $106 = $104;\n $107 = (($105) - ($106))|0;\n $108 = (($107|0) / 8)&-1;\n $109 = $47;\n __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEEC2EjjS8_($48,$100,$108,$109);\n $110 = $47;\n $111 = ((($48)) + 8|0);\n $112 = HEAP32[$111>>2]|0;\n $19 = $112;\n $113 = $19;\n $114 = $46;\n $18 = $114;\n $115 = $18;\n $14 = $110;\n $15 = $113;\n $16 = $115;\n $116 = $14;\n $117 = $15;\n $118 = $16;\n $13 = $118;\n $119 = $13;\n ;HEAP8[$12>>0]=HEAP8[$17>>0]|0;\n $9 = $116;\n $10 = $117;\n $11 = $119;\n $120 = $9;\n $121 = $10;\n $122 = $11;\n $8 = $122;\n $123 = $8;\n $5 = $120;\n $6 = $121;\n $7 = $123;\n $124 = $6;\n $125 = $7;\n $4 = $125;\n $126 = $4;\n $2 = $124;\n $3 = $126;\n $127 = $2;\n $128 = $3;\n $129 = HEAP32[$128>>2]|0;\n HEAP32[$127>>2] = $129;\n $130 = ((($127)) + 4|0);\n $131 = $3;\n $132 = ((($131)) + 4|0);\n $133 = HEAP32[$132>>2]|0;\n HEAP32[$130>>2] = $133;\n $134 = $3;\n HEAP32[$134>>2] = 0;\n $135 = $3;\n $136 = ((($135)) + 4|0);\n HEAP32[$136>>2] = 0;\n $137 = ((($48)) + 8|0);\n $138 = HEAP32[$137>>2]|0;\n $139 = ((($138)) + 8|0);\n HEAP32[$137>>2] = $139;\n __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE($49,$48);\n __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEED2Ev($48);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEEC2EjjS8_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(536870911);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = $68<<3;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + ($74<<3)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + ($79<<3)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0;\n var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0;\n var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0);\n $17 = sp;\n $22 = sp + 412|0;\n $33 = sp + 292|0;\n $39 = sp + 268|0;\n $51 = sp + 220|0;\n $104 = $0;\n $105 = $1;\n $106 = $104;\n $103 = $106;\n $107 = $103;\n $102 = $107;\n $108 = $102;\n $109 = HEAP32[$108>>2]|0;\n $101 = $109;\n $110 = $101;\n $80 = $107;\n $111 = $80;\n $112 = HEAP32[$111>>2]|0;\n $79 = $112;\n $113 = $79;\n $85 = $107;\n $114 = $85;\n $84 = $114;\n $115 = $84;\n $83 = $115;\n $116 = $83;\n $117 = ((($116)) + 8|0);\n $82 = $117;\n $118 = $82;\n $81 = $118;\n $119 = $81;\n $120 = HEAP32[$119>>2]|0;\n $121 = HEAP32[$115>>2]|0;\n $122 = $120;\n $123 = $121;\n $124 = (($122) - ($123))|0;\n $125 = (($124|0) / 8)&-1;\n $126 = (($113) + ($125<<3)|0);\n $87 = $107;\n $127 = $87;\n $128 = HEAP32[$127>>2]|0;\n $86 = $128;\n $129 = $86;\n $88 = $107;\n $130 = $88;\n $131 = ((($130)) + 4|0);\n $132 = HEAP32[$131>>2]|0;\n $133 = HEAP32[$130>>2]|0;\n $134 = $132;\n $135 = $133;\n $136 = (($134) - ($135))|0;\n $137 = (($136|0) / 8)&-1;\n $138 = (($129) + ($137<<3)|0);\n $90 = $107;\n $139 = $90;\n $140 = HEAP32[$139>>2]|0;\n $89 = $140;\n $141 = $89;\n $95 = $107;\n $142 = $95;\n $94 = $142;\n $143 = $94;\n $93 = $143;\n $144 = $93;\n $145 = ((($144)) + 8|0);\n $92 = $145;\n $146 = $92;\n $91 = $146;\n $147 = $91;\n $148 = HEAP32[$147>>2]|0;\n $149 = HEAP32[$143>>2]|0;\n $150 = $148;\n $151 = $149;\n $152 = (($150) - ($151))|0;\n $153 = (($152|0) / 8)&-1;\n $154 = (($141) + ($153<<3)|0);\n $96 = $107;\n $97 = $110;\n $98 = $126;\n $99 = $138;\n $100 = $154;\n $4 = $106;\n $155 = $4;\n $156 = ((($155)) + 8|0);\n $3 = $156;\n $157 = $3;\n $2 = $157;\n $158 = $2;\n $159 = HEAP32[$106>>2]|0;\n $160 = ((($106)) + 4|0);\n $161 = HEAP32[$160>>2]|0;\n $162 = $105;\n $163 = ((($162)) + 4|0);\n $24 = $158;\n $25 = $159;\n $26 = $161;\n $27 = $163;\n while(1) {\n  $164 = $26;\n  $165 = $25;\n  $166 = ($164|0)!=($165|0);\n  if (!($166)) {\n   break;\n  }\n  $167 = $24;\n  $168 = $27;\n  $169 = HEAP32[$168>>2]|0;\n  $170 = ((($169)) + -8|0);\n  $23 = $170;\n  $171 = $23;\n  $172 = $26;\n  $173 = ((($172)) + -8|0);\n  $26 = $173;\n  $6 = $173;\n  $174 = $6;\n  $5 = $174;\n  $175 = $5;\n  $19 = $167;\n  $20 = $171;\n  $21 = $175;\n  $176 = $19;\n  $177 = $20;\n  $178 = $21;\n  $18 = $178;\n  $179 = $18;\n  ;HEAP8[$17>>0]=HEAP8[$22>>0]|0;\n  $14 = $176;\n  $15 = $177;\n  $16 = $179;\n  $180 = $14;\n  $181 = $15;\n  $182 = $16;\n  $13 = $182;\n  $183 = $13;\n  $10 = $180;\n  $11 = $181;\n  $12 = $183;\n  $184 = $11;\n  $185 = $12;\n  $9 = $185;\n  $186 = $9;\n  $7 = $184;\n  $8 = $186;\n  $187 = $7;\n  $188 = $8;\n  $189 = HEAP32[$188>>2]|0;\n  HEAP32[$187>>2] = $189;\n  $190 = ((($187)) + 4|0);\n  $191 = $8;\n  $192 = ((($191)) + 4|0);\n  $193 = HEAP32[$192>>2]|0;\n  HEAP32[$190>>2] = $193;\n  $194 = $8;\n  HEAP32[$194>>2] = 0;\n  $195 = $8;\n  $196 = ((($195)) + 4|0);\n  HEAP32[$196>>2] = 0;\n  $197 = $27;\n  $198 = HEAP32[$197>>2]|0;\n  $199 = ((($198)) + -8|0);\n  HEAP32[$197>>2] = $199;\n }\n $200 = $105;\n $201 = ((($200)) + 4|0);\n $31 = $106;\n $32 = $201;\n $202 = $31;\n $30 = $202;\n $203 = $30;\n $204 = HEAP32[$203>>2]|0;\n HEAP32[$33>>2] = $204;\n $205 = $32;\n $28 = $205;\n $206 = $28;\n $207 = HEAP32[$206>>2]|0;\n $208 = $31;\n HEAP32[$208>>2] = $207;\n $29 = $33;\n $209 = $29;\n $210 = HEAP32[$209>>2]|0;\n $211 = $32;\n HEAP32[$211>>2] = $210;\n $212 = ((($106)) + 4|0);\n $213 = $105;\n $214 = ((($213)) + 8|0);\n $37 = $212;\n $38 = $214;\n $215 = $37;\n $36 = $215;\n $216 = $36;\n $217 = HEAP32[$216>>2]|0;\n HEAP32[$39>>2] = $217;\n $218 = $38;\n $34 = $218;\n $219 = $34;\n $220 = HEAP32[$219>>2]|0;\n $221 = $37;\n HEAP32[$221>>2] = $220;\n $35 = $39;\n $222 = $35;\n $223 = HEAP32[$222>>2]|0;\n $224 = $38;\n HEAP32[$224>>2] = $223;\n $42 = $106;\n $225 = $42;\n $226 = ((($225)) + 8|0);\n $41 = $226;\n $227 = $41;\n $40 = $227;\n $228 = $40;\n $229 = $105;\n $45 = $229;\n $230 = $45;\n $231 = ((($230)) + 12|0);\n $44 = $231;\n $232 = $44;\n $43 = $232;\n $233 = $43;\n $49 = $228;\n $50 = $233;\n $234 = $49;\n $48 = $234;\n $235 = $48;\n $236 = HEAP32[$235>>2]|0;\n HEAP32[$51>>2] = $236;\n $237 = $50;\n $46 = $237;\n $238 = $46;\n $239 = HEAP32[$238>>2]|0;\n $240 = $49;\n HEAP32[$240>>2] = $239;\n $47 = $51;\n $241 = $47;\n $242 = HEAP32[$241>>2]|0;\n $243 = $50;\n HEAP32[$243>>2] = $242;\n $244 = $105;\n $245 = ((($244)) + 4|0);\n $246 = HEAP32[$245>>2]|0;\n $247 = $105;\n HEAP32[$247>>2] = $246;\n $52 = $106;\n $248 = $52;\n $249 = ((($248)) + 4|0);\n $250 = HEAP32[$249>>2]|0;\n $251 = HEAP32[$248>>2]|0;\n $252 = $250;\n $253 = $251;\n $254 = (($252) - ($253))|0;\n $255 = (($254|0) / 8)&-1;\n $76 = $106;\n $77 = $255;\n $256 = $76;\n $75 = $256;\n $257 = $75;\n $258 = HEAP32[$257>>2]|0;\n $74 = $258;\n $259 = $74;\n $54 = $256;\n $260 = $54;\n $261 = HEAP32[$260>>2]|0;\n $53 = $261;\n $262 = $53;\n $59 = $256;\n $263 = $59;\n $58 = $263;\n $264 = $58;\n $57 = $264;\n $265 = $57;\n $266 = ((($265)) + 8|0);\n $56 = $266;\n $267 = $56;\n $55 = $267;\n $268 = $55;\n $269 = HEAP32[$268>>2]|0;\n $270 = HEAP32[$264>>2]|0;\n $271 = $269;\n $272 = $270;\n $273 = (($271) - ($272))|0;\n $274 = (($273|0) / 8)&-1;\n $275 = (($262) + ($274<<3)|0);\n $61 = $256;\n $276 = $61;\n $277 = HEAP32[$276>>2]|0;\n $60 = $277;\n $278 = $60;\n $66 = $256;\n $279 = $66;\n $65 = $279;\n $280 = $65;\n $64 = $280;\n $281 = $64;\n $282 = ((($281)) + 8|0);\n $63 = $282;\n $283 = $63;\n $62 = $283;\n $284 = $62;\n $285 = HEAP32[$284>>2]|0;\n $286 = HEAP32[$280>>2]|0;\n $287 = $285;\n $288 = $286;\n $289 = (($287) - ($288))|0;\n $290 = (($289|0) / 8)&-1;\n $291 = (($278) + ($290<<3)|0);\n $68 = $256;\n $292 = $68;\n $293 = HEAP32[$292>>2]|0;\n $67 = $293;\n $294 = $67;\n $295 = $77;\n $296 = (($294) + ($295<<3)|0);\n $69 = $256;\n $70 = $259;\n $71 = $275;\n $72 = $291;\n $73 = $296;\n $78 = $106;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -8|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n  $60 = $16;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($60);\n }\n $61 = HEAP32[$35>>2]|0;\n $62 = ($61|0)!=(0|0);\n if (!($62)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $63 = $14;\n $64 = ((($63)) + 12|0);\n $13 = $64;\n $65 = $13;\n $66 = ((($65)) + 4|0);\n $12 = $66;\n $67 = $12;\n $68 = HEAP32[$67>>2]|0;\n $69 = HEAP32[$35>>2]|0;\n $11 = $35;\n $70 = $11;\n $10 = $70;\n $71 = $10;\n $72 = ((($71)) + 12|0);\n $9 = $72;\n $73 = $9;\n $8 = $73;\n $74 = $8;\n $75 = HEAP32[$74>>2]|0;\n $76 = HEAP32[$70>>2]|0;\n $77 = $75;\n $78 = $76;\n $79 = (($77) - ($78))|0;\n $80 = (($79|0) / 8)&-1;\n $5 = $68;\n $6 = $69;\n $7 = $80;\n $81 = $5;\n $82 = $6;\n $83 = $7;\n $2 = $81;\n $3 = $82;\n $4 = $83;\n $84 = $3;\n $1 = $84;\n $85 = $1;\n __ZdlPv($85);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 536870911;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZN6laszip7formats10base_fieldC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2048);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($2);\n $3 = ((($2)) + 3980|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($3);\n $4 = ((($2)) + 4380|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($4);\n $5 = ((($2)) + 4780|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 4781|0);\n HEAP8[$6>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2024);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats10base_field11compressRawEPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $3;\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats10base_fieldD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats10base_fieldD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats10base_fieldD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats10base_field13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $3;\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;\n var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;\n var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;\n var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;\n var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;\n var $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $30 = sp + 124|0;\n $31 = sp + 4|0;\n $29 = $0;\n $33 = $29;\n __ZN6laszip7formats3las7point10C2Ev($33);\n $34 = ((($33)) + 52|0);\n __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($34);\n $35 = ((($33)) + 436|0);\n __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($35);\n $36 = ((($33)) + 852|0);\n __ZN6laszip6models10arithmeticC2EjbPj($36,64,0,0);\n $37 = ((($33)) + 3976|0);\n HEAP8[$37>>0] = 0;\n $38 = ((($33)) + 20|0);\n HEAP16[$30>>1] = 0;\n $27 = $38;\n $28 = $30;\n $39 = $27;\n $40 = $28;\n $24 = $39;\n $25 = 16;\n $26 = $40;\n $41 = $24;\n $42 = $25;\n $23 = $42;\n $43 = $23;\n $44 = $26;\n $20 = $41;\n $21 = $43;\n $22 = $44;\n while(1) {\n  $45 = $21;\n  $46 = ($45>>>0)>(0);\n  if (!($46)) {\n   break;\n  }\n  $47 = $22;\n  $48 = HEAP16[$47>>1]|0;\n  $49 = $20;\n  HEAP16[$49>>1] = $48;\n  $50 = $20;\n  $51 = ((($50)) + 2|0);\n  $20 = $51;\n  $52 = $21;\n  $53 = (($52) + -1)|0;\n  $21 = $53;\n }\n $54 = (__Znwj(44)|0);\n __ZN6laszip6models10arithmeticC2EjbPj($54,256,0,0);\n $55 = ((($33)) + 896|0);\n $18 = $55;\n $19 = 0;\n $56 = $18;\n $57 = $19;\n $58 = (($56) + ($57<<2)|0);\n HEAP32[$58>>2] = $54;\n $59 = (__Znwj(44)|0);\n __ZN6laszip6models10arithmeticC2EjbPj($59,256,0,0);\n $60 = ((($33)) + 896|0);\n $14 = $60;\n $15 = 1;\n $61 = $14;\n $62 = $15;\n $63 = (($61) + ($62<<2)|0);\n HEAP32[$63>>2] = $59;\n $64 = ((($33)) + 820|0);\n HEAP32[$31>>2] = 0;\n $10 = $64;\n $11 = $31;\n $65 = $10;\n $66 = $11;\n $7 = $65;\n $8 = 8;\n $9 = $66;\n $67 = $7;\n $68 = $8;\n $6 = $68;\n $69 = $6;\n $70 = $9;\n $3 = $67;\n $4 = $69;\n $5 = $70;\n while(1) {\n  $71 = $4;\n  $72 = ($71>>>0)>(0);\n  if (!($72)) {\n   break;\n  }\n  $73 = $5;\n  $74 = HEAP32[$73>>2]|0;\n  $75 = $3;\n  HEAP32[$75>>2] = $74;\n  $76 = $3;\n  $77 = ((($76)) + 4|0);\n  $3 = $77;\n  $78 = $4;\n  $79 = (($78) + -1)|0;\n  $4 = $79;\n }\n $32 = 0;\n while(1) {\n  $80 = $32;\n  $81 = ($80|0)<(256);\n  if (!($81)) {\n   break;\n  }\n  $82 = (__Znwj(44)|0);\n  __ZN6laszip6models10arithmeticC2EjbPj($82,256,0,0);\n  $83 = ((($33)) + 904|0);\n  $84 = $32;\n  $1 = $83;\n  $2 = $84;\n  $85 = $1;\n  $86 = $2;\n  $87 = (($85) + ($86<<2)|0);\n  HEAP32[$87>>2] = $82;\n  $88 = (__Znwj(44)|0);\n  __ZN6laszip6models10arithmeticC2EjbPj($88,256,0,0);\n  $89 = ((($33)) + 1928|0);\n  $90 = $32;\n  $12 = $89;\n  $13 = $90;\n  $91 = $12;\n  $92 = $13;\n  $93 = (($91) + ($92<<2)|0);\n  HEAP32[$93>>2] = $88;\n  $94 = (__Znwj(44)|0);\n  __ZN6laszip6models10arithmeticC2EjbPj($94,256,0,0);\n  $95 = ((($33)) + 2952|0);\n  $96 = $32;\n  $16 = $95;\n  $17 = $96;\n  $97 = $16;\n  $98 = $17;\n  $99 = (($97) + ($98<<2)|0);\n  HEAP32[$99>>2] = $94;\n  $100 = $32;\n  $101 = (($100) + 1)|0;\n  $32 = $101;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,16,4,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip11compressors7integerC2Ejjjj($3,16,1,8,0);\n $4 = ((($2)) + 160|0);\n __ZN6laszip11compressors7integerC2Ejjjj($4,32,2,8,0);\n $5 = ((($2)) + 240|0);\n __ZN6laszip11compressors7integerC2Ejjjj($5,32,22,8,0);\n $6 = ((($2)) + 320|0);\n __ZN6laszip11compressors7integerC2Ejjjj($6,32,20,8,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integerC2Ejjjj($2,16,4,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0);\n $4 = ((($2)) + 160|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($4,32,2,8,0);\n $5 = ((($2)) + 240|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($5,32,22,8,0);\n $6 = ((($2)) + 320|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($6,32,20,8,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 320|0);\n __ZN6laszip11compressors7integerD2Ev($3);\n $4 = ((($2)) + 240|0);\n __ZN6laszip11compressors7integerD2Ev($4);\n $5 = ((($2)) + 160|0);\n __ZN6laszip11compressors7integerD2Ev($5);\n $6 = ((($2)) + 80|0);\n __ZN6laszip11compressors7integerD2Ev($6);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $11 = $0;\n $13 = $11;\n $14 = ((($13)) + 896|0);\n $9 = $14;\n $10 = 0;\n $15 = $9;\n $16 = $10;\n $17 = (($15) + ($16<<2)|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18|0)==(0|0);\n if (!($19)) {\n  __ZN6laszip6models10arithmeticD2Ev($18);\n  __ZdlPv($18);\n }\n $20 = ((($13)) + 896|0);\n $7 = $20;\n $8 = 1;\n $21 = $7;\n $22 = $8;\n $23 = (($21) + ($22<<2)|0);\n $24 = HEAP32[$23>>2]|0;\n $25 = ($24|0)==(0|0);\n if (!($25)) {\n  __ZN6laszip6models10arithmeticD2Ev($24);\n  __ZdlPv($24);\n }\n $12 = 0;\n while(1) {\n  $26 = $12;\n  $27 = ($26|0)<(256);\n  if (!($27)) {\n   break;\n  }\n  $28 = ((($13)) + 904|0);\n  $29 = $12;\n  $5 = $28;\n  $6 = $29;\n  $30 = $5;\n  $31 = $6;\n  $32 = (($30) + ($31<<2)|0);\n  $33 = HEAP32[$32>>2]|0;\n  $34 = ($33|0)==(0|0);\n  if (!($34)) {\n   __ZN6laszip6models10arithmeticD2Ev($33);\n   __ZdlPv($33);\n  }\n  $35 = ((($13)) + 1928|0);\n  $36 = $12;\n  $3 = $35;\n  $4 = $36;\n  $37 = $3;\n  $38 = $4;\n  $39 = (($37) + ($38<<2)|0);\n  $40 = HEAP32[$39>>2]|0;\n  $41 = ($40|0)==(0|0);\n  if (!($41)) {\n   __ZN6laszip6models10arithmeticD2Ev($40);\n   __ZdlPv($40);\n  }\n  $42 = ((($13)) + 2952|0);\n  $43 = $12;\n  $1 = $42;\n  $2 = $43;\n  $44 = $1;\n  $45 = $2;\n  $46 = (($44) + ($45<<2)|0);\n  $47 = HEAP32[$46>>2]|0;\n  $48 = ($47|0)==(0|0);\n  if (!($48)) {\n   __ZN6laszip6models10arithmeticD2Ev($47);\n   __ZdlPv($47);\n  }\n  $49 = $12;\n  $50 = (($49) + 1)|0;\n  $12 = $50;\n }\n $51 = ((($13)) + 852|0);\n __ZN6laszip6models10arithmeticD2Ev($51);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats3las7point10C2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP8[$2>>0]=0&255;HEAP8[$2+1>>0]=(0>>8)&255;HEAP8[$2+2>>0]=(0>>16)&255;HEAP8[$2+3>>0]=0>>24;\n $3 = ((($2)) + 4|0);\n HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=(0>>8)&255;HEAP8[$3+2>>0]=(0>>16)&255;HEAP8[$3+3>>0]=0>>24;\n $4 = ((($2)) + 12|0);\n HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=0>>8;\n $5 = ((($2)) + 14|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6 & -8;\n HEAP8[$5>>0] = $7;\n $8 = ((($2)) + 14|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9 & -57;\n HEAP8[$8>>0] = $10;\n $11 = ((($2)) + 14|0);\n $12 = HEAP8[$11>>0]|0;\n $13 = $12 & -65;\n HEAP8[$11>>0] = $13;\n $14 = ((($2)) + 14|0);\n $15 = HEAP8[$14>>0]|0;\n $16 = $15 & 127;\n HEAP8[$14>>0] = $16;\n $17 = ((($2)) + 15|0);\n HEAP8[$17>>0] = 0;\n $18 = ((($2)) + 16|0);\n HEAP8[$18>>0] = 0;\n $19 = ((($2)) + 17|0);\n HEAP8[$19>>0] = 0;\n $20 = ((($2)) + 18|0);\n HEAP8[$20>>0]=0&255;HEAP8[$20+1>>0]=0>>8;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 384|0);\n $4 = $2;\n while(1) {\n  __ZN6laszip5utils16streaming_medianIiEC2Ev($4);\n  $5 = ((($4)) + 24|0);\n  $6 = ($5|0)==($3|0);\n  if ($6) {\n   break;\n  } else {\n   $4 = $5;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip5utils16streaming_medianIiEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip5utils16streaming_medianIiE4initEv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip5utils16streaming_medianIiE4initEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $11 = sp;\n $10 = $0;\n $12 = $10;\n HEAP32[$11>>2] = 0;\n $8 = $12;\n $9 = $11;\n $13 = $8;\n $14 = $9;\n $5 = $13;\n $6 = 5;\n $7 = $14;\n $15 = $5;\n $16 = $6;\n $4 = $16;\n $17 = $4;\n $18 = $7;\n $1 = $15;\n $2 = $17;\n $3 = $18;\n while(1) {\n  $19 = $2;\n  $20 = ($19>>>0)>(0);\n  if (!($20)) {\n   break;\n  }\n  $21 = $3;\n  $22 = HEAP32[$21>>2]|0;\n  $23 = $1;\n  HEAP32[$23>>2] = $22;\n  $24 = $1;\n  $25 = ((($24)) + 4|0);\n  $1 = $25;\n  $26 = $2;\n  $27 = (($26) + -1)|0;\n  $2 = $27;\n }\n $28 = ((($12)) + 20|0);\n HEAP8[$28>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip11compressors7integerC2Ejjjj($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0;\n var $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $15 = sp + 72|0;\n $27 = sp + 24|0;\n $29 = $0;\n $30 = $1;\n $31 = $2;\n $32 = $3;\n $33 = $4;\n $34 = $29;\n $35 = ((($34)) + 4|0);\n $36 = $30;\n HEAP32[$35>>2] = $36;\n $37 = ((($34)) + 8|0);\n $38 = $31;\n HEAP32[$37>>2] = $38;\n $39 = ((($34)) + 12|0);\n $40 = $32;\n HEAP32[$39>>2] = $40;\n $41 = ((($34)) + 16|0);\n $42 = $33;\n HEAP32[$41>>2] = $42;\n $43 = ((($34)) + 36|0);\n $28 = $43;\n $44 = $28;\n $26 = $44;\n $45 = $26;\n $25 = $45;\n HEAP32[$45>>2] = 0;\n $46 = ((($45)) + 4|0);\n HEAP32[$46>>2] = 0;\n $47 = ((($45)) + 8|0);\n HEAP32[$27>>2] = 0;\n $23 = $47;\n $24 = $27;\n $48 = $23;\n $49 = $24;\n $22 = $49;\n $50 = $22;\n $18 = $48;\n $19 = $50;\n $51 = $18;\n $52 = $19;\n $17 = $52;\n HEAP32[$51>>2] = 0;\n $21 = $48;\n $53 = $21;\n $20 = $53;\n $54 = ((($34)) + 48|0);\n __ZN6laszip6models14arithmetic_bitC2Ev($54);\n $55 = ((($34)) + 68|0);\n $16 = $55;\n $56 = $16;\n $14 = $56;\n $57 = $14;\n $13 = $57;\n HEAP32[$57>>2] = 0;\n $58 = ((($57)) + 4|0);\n HEAP32[$58>>2] = 0;\n $59 = ((($57)) + 8|0);\n HEAP32[$15>>2] = 0;\n $11 = $59;\n $12 = $15;\n $60 = $11;\n $61 = $12;\n $10 = $61;\n $62 = $10;\n $6 = $60;\n $7 = $62;\n $63 = $6;\n $64 = $7;\n $5 = $64;\n HEAP32[$63>>2] = 0;\n $9 = $60;\n $65 = $9;\n $8 = $65;\n $66 = $33;\n $67 = ($66|0)!=(0);\n if (!($67)) {\n  $100 = $30;\n  $101 = ($100|0)!=(0);\n  $102 = $30;\n  $103 = ($102>>>0)<(32);\n  $or$cond = $101 & $103;\n  if ($or$cond) {\n   $104 = $30;\n   $105 = ((($34)) + 20|0);\n   HEAP32[$105>>2] = $104;\n   $106 = $30;\n   $107 = 1 << $106;\n   $108 = ((($34)) + 24|0);\n   HEAP32[$108>>2] = $107;\n   $109 = ((($34)) + 24|0);\n   $110 = HEAP32[$109>>2]|0;\n   $111 = (($110>>>0) / 2)&-1;\n   $112 = (0 - ($111))|0;\n   $113 = ((($34)) + 28|0);\n   HEAP32[$113>>2] = $112;\n   $114 = ((($34)) + 28|0);\n   $115 = HEAP32[$114>>2]|0;\n   $116 = ((($34)) + 24|0);\n   $117 = HEAP32[$116>>2]|0;\n   $118 = (($115) + ($117))|0;\n   $119 = (($118) - 1)|0;\n   $120 = ((($34)) + 32|0);\n   HEAP32[$120>>2] = $119;\n   HEAP32[$34>>2] = 0;\n   STACKTOP = sp;return;\n  } else {\n   $121 = ((($34)) + 20|0);\n   HEAP32[$121>>2] = 32;\n   $122 = ((($34)) + 24|0);\n   HEAP32[$122>>2] = 0;\n   $123 = ((($34)) + 28|0);\n   HEAP32[$123>>2] = -2147483648;\n   $124 = ((($34)) + 32|0);\n   HEAP32[$124>>2] = 2147483647;\n   HEAP32[$34>>2] = 0;\n   STACKTOP = sp;return;\n  }\n }\n $68 = ((($34)) + 20|0);\n HEAP32[$68>>2] = 0;\n $69 = $33;\n $70 = ((($34)) + 24|0);\n HEAP32[$70>>2] = $69;\n while(1) {\n  $71 = $33;\n  $72 = ($71|0)!=(0);\n  if (!($72)) {\n   break;\n  }\n  $73 = $33;\n  $74 = $73 >>> 1;\n  $33 = $74;\n  $75 = ((($34)) + 20|0);\n  $76 = HEAP32[$75>>2]|0;\n  $77 = (($76) + 1)|0;\n  HEAP32[$75>>2] = $77;\n }\n $78 = ((($34)) + 24|0);\n $79 = HEAP32[$78>>2]|0;\n $80 = ((($34)) + 20|0);\n $81 = HEAP32[$80>>2]|0;\n $82 = (($81) - 1)|0;\n $83 = 1 << $82;\n $84 = ($79|0)==($83|0);\n if ($84) {\n  $85 = ((($34)) + 20|0);\n  $86 = HEAP32[$85>>2]|0;\n  $87 = (($86) + -1)|0;\n  HEAP32[$85>>2] = $87;\n }\n $88 = ((($34)) + 24|0);\n $89 = HEAP32[$88>>2]|0;\n $90 = (($89>>>0) / 2)&-1;\n $91 = (0 - ($90))|0;\n $92 = ((($34)) + 28|0);\n HEAP32[$92>>2] = $91;\n $93 = ((($34)) + 28|0);\n $94 = HEAP32[$93>>2]|0;\n $95 = ((($34)) + 24|0);\n $96 = HEAP32[$95>>2]|0;\n $97 = (($94) + ($96))|0;\n $98 = (($97) - 1)|0;\n $99 = ((($34)) + 32|0);\n HEAP32[$99>>2] = $98;\n HEAP32[$34>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip11compressors7integerD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;\n var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;\n var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0);\n $27 = sp + 8|0;\n $30 = sp + 329|0;\n $68 = sp;\n $71 = sp + 328|0;\n $83 = $0;\n $84 = $83;\n $85 = ((($84)) + 36|0);\n $81 = $85;\n $86 = $81;\n $80 = $86;\n $87 = $80;\n $88 = ((($87)) + 4|0);\n $89 = HEAP32[$88>>2]|0;\n $90 = HEAP32[$87>>2]|0;\n $91 = $89;\n $92 = $90;\n $93 = (($91) - ($92))|0;\n $94 = (($93|0) / 44)&-1;\n $82 = $94;\n $79 = $86;\n $95 = $79;\n $96 = HEAP32[$95>>2]|0;\n $76 = $95;\n $77 = $96;\n $97 = $76;\n $98 = ((($97)) + 4|0);\n $99 = HEAP32[$98>>2]|0;\n $78 = $99;\n while(1) {\n  $100 = $77;\n  $101 = $78;\n  $102 = ($100|0)!=($101|0);\n  if (!($102)) {\n   break;\n  }\n  $75 = $97;\n  $103 = $75;\n  $104 = ((($103)) + 8|0);\n  $74 = $104;\n  $105 = $74;\n  $73 = $105;\n  $106 = $73;\n  $107 = $78;\n  $108 = ((($107)) + -44|0);\n  $78 = $108;\n  $72 = $108;\n  $109 = $72;\n  $69 = $106;\n  $70 = $109;\n  $110 = $69;\n  $111 = $70;\n  ;HEAP8[$68>>0]=HEAP8[$71>>0]|0;\n  $66 = $110;\n  $67 = $111;\n  $112 = $66;\n  $113 = $67;\n  $64 = $112;\n  $65 = $113;\n  $114 = $65;\n  __ZN6laszip6models10arithmeticD2Ev($114);\n }\n $115 = $77;\n $116 = ((($97)) + 4|0);\n HEAP32[$116>>2] = $115;\n $117 = $82;\n $62 = $86;\n $63 = $117;\n $118 = $62;\n $61 = $118;\n $119 = $61;\n $120 = HEAP32[$119>>2]|0;\n $60 = $120;\n $121 = $60;\n $44 = $118;\n $122 = $44;\n $123 = HEAP32[$122>>2]|0;\n $43 = $123;\n $124 = $43;\n $49 = $118;\n $125 = $49;\n $48 = $125;\n $126 = $48;\n $47 = $126;\n $127 = $47;\n $128 = ((($127)) + 8|0);\n $46 = $128;\n $129 = $46;\n $45 = $129;\n $130 = $45;\n $131 = HEAP32[$130>>2]|0;\n $132 = HEAP32[$126>>2]|0;\n $133 = $131;\n $134 = $132;\n $135 = (($133) - ($134))|0;\n $136 = (($135|0) / 44)&-1;\n $137 = (($124) + (($136*44)|0)|0);\n $51 = $118;\n $138 = $51;\n $139 = HEAP32[$138>>2]|0;\n $50 = $139;\n $140 = $50;\n $141 = $63;\n $142 = (($140) + (($141*44)|0)|0);\n $53 = $118;\n $143 = $53;\n $144 = HEAP32[$143>>2]|0;\n $52 = $144;\n $145 = $52;\n $54 = $118;\n $146 = $54;\n $147 = ((($146)) + 4|0);\n $148 = HEAP32[$147>>2]|0;\n $149 = HEAP32[$146>>2]|0;\n $150 = $148;\n $151 = $149;\n $152 = (($150) - ($151))|0;\n $153 = (($152|0) / 44)&-1;\n $154 = (($145) + (($153*44)|0)|0);\n $55 = $118;\n $56 = $121;\n $57 = $137;\n $58 = $142;\n $59 = $154;\n $42 = $86;\n $155 = ((($84)) + 68|0);\n $40 = $155;\n $156 = $40;\n $39 = $156;\n $157 = $39;\n $158 = ((($157)) + 4|0);\n $159 = HEAP32[$158>>2]|0;\n $160 = HEAP32[$157>>2]|0;\n $161 = $159;\n $162 = $160;\n $163 = (($161) - ($162))|0;\n $164 = (($163|0) / 44)&-1;\n $41 = $164;\n $38 = $156;\n $165 = $38;\n $166 = HEAP32[$165>>2]|0;\n $35 = $165;\n $36 = $166;\n $167 = $35;\n $168 = ((($167)) + 4|0);\n $169 = HEAP32[$168>>2]|0;\n $37 = $169;\n while(1) {\n  $170 = $36;\n  $171 = $37;\n  $172 = ($170|0)!=($171|0);\n  if (!($172)) {\n   break;\n  }\n  $34 = $167;\n  $173 = $34;\n  $174 = ((($173)) + 8|0);\n  $33 = $174;\n  $175 = $33;\n  $32 = $175;\n  $176 = $32;\n  $177 = $37;\n  $178 = ((($177)) + -44|0);\n  $37 = $178;\n  $31 = $178;\n  $179 = $31;\n  $28 = $176;\n  $29 = $179;\n  $180 = $28;\n  $181 = $29;\n  ;HEAP8[$27>>0]=HEAP8[$30>>0]|0;\n  $25 = $180;\n  $26 = $181;\n  $182 = $25;\n  $183 = $26;\n  $23 = $182;\n  $24 = $183;\n  $184 = $24;\n  __ZN6laszip6models10arithmeticD2Ev($184);\n }\n $185 = $36;\n $186 = ((($167)) + 4|0);\n HEAP32[$186>>2] = $185;\n $187 = $41;\n $21 = $156;\n $22 = $187;\n $188 = $21;\n $20 = $188;\n $189 = $20;\n $190 = HEAP32[$189>>2]|0;\n $19 = $190;\n $191 = $19;\n $3 = $188;\n $192 = $3;\n $193 = HEAP32[$192>>2]|0;\n $2 = $193;\n $194 = $2;\n $8 = $188;\n $195 = $8;\n $7 = $195;\n $196 = $7;\n $6 = $196;\n $197 = $6;\n $198 = ((($197)) + 8|0);\n $5 = $198;\n $199 = $5;\n $4 = $199;\n $200 = $4;\n $201 = HEAP32[$200>>2]|0;\n $202 = HEAP32[$196>>2]|0;\n $203 = $201;\n $204 = $202;\n $205 = (($203) - ($204))|0;\n $206 = (($205|0) / 44)&-1;\n $207 = (($194) + (($206*44)|0)|0);\n $10 = $188;\n $208 = $10;\n $209 = HEAP32[$208>>2]|0;\n $9 = $209;\n $210 = $9;\n $211 = $22;\n $212 = (($210) + (($211*44)|0)|0);\n $12 = $188;\n $213 = $12;\n $214 = HEAP32[$213>>2]|0;\n $11 = $214;\n $215 = $11;\n $13 = $188;\n $216 = $13;\n $217 = ((($216)) + 4|0);\n $218 = HEAP32[$217>>2]|0;\n $219 = HEAP32[$216>>2]|0;\n $220 = $218;\n $221 = $219;\n $222 = (($220) - ($221))|0;\n $223 = (($222|0) / 44)&-1;\n $224 = (($215) + (($223*44)|0)|0);\n $14 = $188;\n $15 = $191;\n $16 = $207;\n $17 = $212;\n $18 = $224;\n $1 = $156;\n $225 = ((($84)) + 68|0);\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($225);\n $226 = ((($84)) + 36|0);\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($226);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4380|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($3);\n $4 = ((($2)) + 3980|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($4);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 320|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n $4 = ((($2)) + 240|0);\n __ZN6laszip13decompressors7integerD2Ev($4);\n $5 = ((($2)) + 160|0);\n __ZN6laszip13decompressors7integerD2Ev($5);\n $6 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($6);\n __ZN6laszip13decompressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;\n var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;\n var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;\n var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;\n var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;\n var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;\n var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, dest = 0, label = 0, sp = 0, src = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);\n $33 = sp + 160|0;\n $40 = sp + 8|0;\n $30 = $0;\n $31 = $1;\n $32 = $2;\n $44 = $30;\n $45 = ((($44)) + 4781|0);\n $46 = HEAP8[$45>>0]|0;\n $47 = $46&1;\n if (!($47)) {\n  $48 = ((($44)) + 4380|0);\n  __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($48);\n  $49 = ((($44)) + 4781|0);\n  HEAP8[$49>>0] = 1;\n }\n $50 = ((($44)) + 3976|0);\n $51 = HEAP8[$50>>0]|0;\n $52 = $51&1;\n if (!($52)) {\n  $53 = ((($44)) + 3976|0);\n  HEAP8[$53>>0] = 1;\n  $54 = $31;\n  $55 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($54)|0);\n  $56 = $32;\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($55,$56,20);\n  $57 = $32;\n  __ZN6laszip7formats7packersINS0_3las7point10EE6unpackEPKc($33,$57);\n  dest=$44; src=$33; stop=dest+20|0; do { HEAP8[dest>>0]=HEAP8[src>>0]|0; dest=dest+1|0; src=src+1|0; } while ((dest|0) < (stop|0));\n  $58 = $32;\n  $59 = ((($58)) + 20|0);\n  $29 = $59;\n  $311 = $29;\n  STACKTOP = sp;return ($311|0);\n }\n $60 = $31;\n $61 = ((($44)) + 852|0);\n $62 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($60,$61)|0);\n $41 = $62;\n $63 = $41;\n $64 = ($63|0)!=(0);\n if ($64) {\n  $65 = $41;\n  $66 = $65 & 32;\n  $67 = ($66|0)!=(0);\n  if ($67) {\n   $68 = (__ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($44)|0);\n   $42 = $68;\n   $69 = $31;\n   $70 = ((($44)) + 904|0);\n   $71 = $42;\n   $72 = $71&255;\n   $27 = $70;\n   $28 = $72;\n   $73 = $27;\n   $74 = $28;\n   $75 = (($73) + ($74<<2)|0);\n   $76 = HEAP32[$75>>2]|0;\n   $77 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($69,$76)|0);\n   $78 = $77&255;\n   $42 = $78;\n   $79 = $42;\n   __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($79,$44);\n  }\n  $80 = ((($44)) + 14|0);\n  $81 = HEAP8[$80>>0]|0;\n  $82 = $81 & 7;\n  $83 = $82&255;\n  $34 = $83;\n  $84 = ((($44)) + 14|0);\n  $85 = HEAP8[$84>>0]|0;\n  $86 = ($85&255) >>> 3;\n  $87 = $86 & 7;\n  $88 = $87&255;\n  $35 = $88;\n  $89 = $35;\n  $90 = (6646 + ($89<<3)|0);\n  $91 = $34;\n  $92 = (($90) + ($91)|0);\n  $93 = HEAP8[$92>>0]|0;\n  $94 = $93&255;\n  $36 = $94;\n  $95 = $35;\n  $96 = (6710 + ($95<<3)|0);\n  $97 = $34;\n  $98 = (($96) + ($97)|0);\n  $99 = HEAP8[$98>>0]|0;\n  $100 = $99&255;\n  $37 = $100;\n  $101 = $41;\n  $102 = $101 & 16;\n  $103 = ($102|0)!=(0);\n  if ($103) {\n   $104 = ((($44)) + 4380|0);\n   $105 = $31;\n   $106 = ((($44)) + 20|0);\n   $107 = $36;\n   $25 = $106;\n   $26 = $107;\n   $108 = $25;\n   $109 = $26;\n   $110 = (($108) + ($109<<1)|0);\n   $111 = HEAP16[$110>>1]|0;\n   $112 = $111&65535;\n   $113 = $36;\n   $114 = ($113>>>0)<(3);\n   $115 = $36;\n   $116 = $114 ? $115 : 3;\n   $117 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($104,$105,$112,$116)|0);\n   $118 = $117&65535;\n   $119 = ((($44)) + 12|0);\n   HEAP16[$119>>1] = $118;\n   $120 = ((($44)) + 12|0);\n   $121 = HEAP16[$120>>1]|0;\n   $122 = ((($44)) + 20|0);\n   $123 = $36;\n   $21 = $122;\n   $22 = $123;\n   $124 = $21;\n   $125 = $22;\n   $126 = (($124) + ($125<<1)|0);\n   HEAP16[$126>>1] = $121;\n  } else {\n   $127 = ((($44)) + 20|0);\n   $128 = $36;\n   $17 = $127;\n   $18 = $128;\n   $129 = $17;\n   $130 = $18;\n   $131 = (($129) + ($130<<1)|0);\n   $132 = HEAP16[$131>>1]|0;\n   $133 = ((($44)) + 12|0);\n   HEAP16[$133>>1] = $132;\n  }\n  $134 = $41;\n  $135 = $134 & 8;\n  $136 = ($135|0)!=(0);\n  if ($136) {\n   $137 = $31;\n   $138 = ((($44)) + 1928|0);\n   $139 = ((($44)) + 15|0);\n   $140 = HEAP8[$139>>0]|0;\n   $141 = $140&255;\n   $15 = $138;\n   $16 = $141;\n   $142 = $15;\n   $143 = $16;\n   $144 = (($142) + ($143<<2)|0);\n   $145 = HEAP32[$144>>2]|0;\n   $146 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($137,$145)|0);\n   $147 = $146&255;\n   $148 = ((($44)) + 15|0);\n   HEAP8[$148>>0] = $147;\n  }\n  $149 = $41;\n  $150 = $149 & 4;\n  $151 = ($150|0)!=(0);\n  if ($151) {\n   $152 = $31;\n   $153 = ((($44)) + 896|0);\n   $154 = ((($44)) + 14|0);\n   $155 = HEAP8[$154>>0]|0;\n   $156 = ($155&255) >>> 6;\n   $157 = $156 & 1;\n   $158 = $157&255;\n   $13 = $153;\n   $14 = $158;\n   $159 = $13;\n   $160 = $14;\n   $161 = (($159) + ($160<<2)|0);\n   $162 = HEAP32[$161>>2]|0;\n   $163 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($152,$162)|0);\n   $43 = $163;\n   $164 = $43;\n   $165 = ((($44)) + 16|0);\n   $166 = HEAP8[$165>>0]|0;\n   $167 = $166 << 24 >> 24;\n   $168 = (($164) + ($167))|0;\n   $169 = (__Z7U8_FOLDi($168)|0);\n   $170 = ((($44)) + 16|0);\n   HEAP8[$170>>0] = $169;\n  }\n  $171 = $41;\n  $172 = $171 & 2;\n  $173 = ($172|0)!=(0);\n  if ($173) {\n   $174 = $31;\n   $175 = ((($44)) + 2952|0);\n   $176 = ((($44)) + 17|0);\n   $177 = HEAP8[$176>>0]|0;\n   $178 = $177&255;\n   $9 = $175;\n   $10 = $178;\n   $179 = $9;\n   $180 = $10;\n   $181 = (($179) + ($180<<2)|0);\n   $182 = HEAP32[$181>>2]|0;\n   $183 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($174,$182)|0);\n   $184 = $183&255;\n   $185 = ((($44)) + 17|0);\n   HEAP8[$185>>0] = $184;\n  }\n  $186 = $41;\n  $187 = $186 & 1;\n  $188 = ($187|0)!=(0);\n  if ($188) {\n   $189 = ((($44)) + 4380|0);\n   $190 = ((($189)) + 80|0);\n   $191 = $31;\n   $192 = ((($44)) + 18|0);\n   $193 = HEAP16[$192>>1]|0;\n   $194 = $193&65535;\n   $195 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($190,$191,$194,0)|0);\n   $196 = $195&65535;\n   $197 = ((($44)) + 18|0);\n   HEAP16[$197>>1] = $196;\n  }\n } else {\n  $198 = ((($44)) + 14|0);\n  $199 = HEAP8[$198>>0]|0;\n  $200 = $199 & 7;\n  $201 = $200&255;\n  $34 = $201;\n  $202 = ((($44)) + 14|0);\n  $203 = HEAP8[$202>>0]|0;\n  $204 = ($203&255) >>> 3;\n  $205 = $204 & 7;\n  $206 = $205&255;\n  $35 = $206;\n  $207 = $35;\n  $208 = (6646 + ($207<<3)|0);\n  $209 = $34;\n  $210 = (($208) + ($209)|0);\n  $211 = HEAP8[$210>>0]|0;\n  $212 = $211&255;\n  $36 = $212;\n  $213 = $35;\n  $214 = (6710 + ($213<<3)|0);\n  $215 = $34;\n  $216 = (($214) + ($215)|0);\n  $217 = HEAP8[$216>>0]|0;\n  $218 = $217&255;\n  $37 = $218;\n }\n $219 = ((($44)) + 52|0);\n $220 = $36;\n $7 = $219;\n $8 = $220;\n $221 = $7;\n $222 = $8;\n $223 = (($221) + (($222*24)|0)|0);\n $224 = (__ZNK6laszip5utils16streaming_medianIiE3getEv($223)|0);\n $39 = $224;\n $225 = ((($44)) + 4380|0);\n $226 = ((($225)) + 160|0);\n $227 = $31;\n $228 = $39;\n $229 = $35;\n $230 = ($229|0)==(1);\n $231 = $230&1;\n $232 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($226,$227,$228,$231)|0);\n HEAP32[$40>>2] = $232;\n $233 = HEAP32[$40>>2]|0;\n $234 = HEAP32[$44>>2]|0;\n $235 = (($234) + ($233))|0;\n HEAP32[$44>>2] = $235;\n $236 = ((($44)) + 52|0);\n $237 = $36;\n $5 = $236;\n $6 = $237;\n $238 = $5;\n $239 = $6;\n $240 = (($238) + (($239*24)|0)|0);\n __ZN6laszip5utils16streaming_medianIiE3addERKi($240,$40);\n $241 = ((($44)) + 436|0);\n $242 = $36;\n $3 = $241;\n $4 = $242;\n $243 = $3;\n $244 = $4;\n $245 = (($243) + (($244*24)|0)|0);\n $246 = (__ZNK6laszip5utils16streaming_medianIiE3getEv($245)|0);\n $39 = $246;\n $247 = ((($44)) + 4380|0);\n $248 = ((($247)) + 160|0);\n $249 = (__ZNK6laszip13decompressors7integer4getKEv($248)|0);\n $38 = $249;\n $250 = ((($44)) + 4380|0);\n $251 = ((($250)) + 240|0);\n $252 = $31;\n $253 = $39;\n $254 = $35;\n $255 = ($254|0)==(1);\n $256 = $255&1;\n $257 = $38;\n $258 = ($257>>>0)<(20);\n $259 = $38;\n $260 = $259 & -2;\n $261 = $258 ? $260 : 20;\n $262 = (($256) + ($261))|0;\n $263 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($251,$252,$253,$262)|0);\n HEAP32[$40>>2] = $263;\n $264 = HEAP32[$40>>2]|0;\n $265 = ((($44)) + 4|0);\n $266 = HEAP32[$265>>2]|0;\n $267 = (($266) + ($264))|0;\n HEAP32[$265>>2] = $267;\n $268 = ((($44)) + 436|0);\n $269 = $36;\n $11 = $268;\n $12 = $269;\n $270 = $11;\n $271 = $12;\n $272 = (($270) + (($271*24)|0)|0);\n __ZN6laszip5utils16streaming_medianIiE3addERKi($272,$40);\n $273 = ((($44)) + 4380|0);\n $274 = ((($273)) + 160|0);\n $275 = (__ZNK6laszip13decompressors7integer4getKEv($274)|0);\n $276 = ((($44)) + 4380|0);\n $277 = ((($276)) + 240|0);\n $278 = (__ZNK6laszip13decompressors7integer4getKEv($277)|0);\n $279 = (($275) + ($278))|0;\n $280 = (($279>>>0) / 2)&-1;\n $38 = $280;\n $281 = ((($44)) + 4380|0);\n $282 = ((($281)) + 320|0);\n $283 = $31;\n $284 = ((($44)) + 820|0);\n $285 = $37;\n $19 = $284;\n $20 = $285;\n $286 = $19;\n $287 = $20;\n $288 = (($286) + ($287<<2)|0);\n $289 = HEAP32[$288>>2]|0;\n $290 = $35;\n $291 = ($290|0)==(1);\n $292 = $291&1;\n $293 = $38;\n $294 = ($293>>>0)<(18);\n $295 = $38;\n $296 = $295 & -2;\n $297 = $294 ? $296 : 18;\n $298 = (($292) + ($297))|0;\n $299 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($282,$283,$289,$298)|0);\n $300 = ((($44)) + 8|0);\n HEAP32[$300>>2] = $299;\n $301 = ((($44)) + 8|0);\n $302 = HEAP32[$301>>2]|0;\n $303 = ((($44)) + 820|0);\n $304 = $37;\n $23 = $303;\n $24 = $304;\n $305 = $23;\n $306 = $24;\n $307 = (($305) + ($306<<2)|0);\n HEAP32[$307>>2] = $302;\n $308 = $32;\n __ZN6laszip7formats7packersINS0_3las7point10EE4packERKS3_Pc($44,$308);\n $309 = $32;\n $310 = ((($309)) + 20|0);\n $29 = $310;\n $311 = $29;\n STACKTOP = sp;return ($311|0);\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integer4initEv($2);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integer4initEv($3);\n $4 = ((($2)) + 160|0);\n __ZN6laszip13decompressors7integer4initEv($4);\n $5 = ((($2)) + 240|0);\n __ZN6laszip13decompressors7integer4initEv($5);\n $6 = ((($2)) + 320|0);\n __ZN6laszip13decompressors7integer4initEv($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;\n var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;\n var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;\n var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0;\n var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $26 = sp;\n $29 = sp + 124|0;\n $32 = sp + 12|0;\n $34 = sp + 4|0;\n $30 = $0;\n $31 = $1;\n HEAP32[$32>>2] = $2;\n $35 = $30;\n $36 = ((($35)) + 8|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = ((($35)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $40 = (($37) - ($39))|0;\n HEAP32[$34>>2] = $40;\n $27 = $34;\n $28 = $32;\n $41 = $27;\n $42 = $28;\n ;HEAP8[$26>>0]=HEAP8[$29>>0]|0;\n $24 = $41;\n $25 = $42;\n $43 = $25;\n $44 = $24;\n $21 = $26;\n $22 = $43;\n $23 = $44;\n $45 = $22;\n $46 = HEAP32[$45>>2]|0;\n $47 = $23;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($46>>>0)<($48>>>0);\n $50 = $25;\n $51 = $24;\n $52 = $49 ? $50 : $51;\n $53 = HEAP32[$52>>2]|0;\n $33 = $53;\n $54 = ((($35)) + 12|0);\n $55 = HEAP32[$54>>2]|0;\n $56 = ((($35)) + 4|0);\n $57 = HEAP32[$56>>2]|0;\n $58 = (($55) + ($57)|0);\n $59 = ((($35)) + 12|0);\n $60 = HEAP32[$59>>2]|0;\n $61 = ((($35)) + 4|0);\n $62 = HEAP32[$61>>2]|0;\n $63 = (($60) + ($62)|0);\n $64 = $33;\n $65 = (($63) + ($64)|0);\n $66 = $31;\n $9 = $58;\n $10 = $65;\n $11 = $66;\n $67 = $9;\n $8 = $67;\n $68 = $8;\n $69 = $10;\n $3 = $69;\n $70 = $3;\n $71 = $11;\n $4 = $71;\n $72 = $4;\n $5 = $68;\n $6 = $70;\n $7 = $72;\n while(1) {\n  $73 = $5;\n  $74 = $6;\n  $75 = ($73|0)!=($74|0);\n  if (!($75)) {\n   break;\n  }\n  $76 = $5;\n  $77 = HEAP8[$76>>0]|0;\n  $78 = $7;\n  HEAP8[$78>>0] = $77;\n  $79 = $5;\n  $80 = ((($79)) + 1|0);\n  $5 = $80;\n  $81 = $7;\n  $82 = ((($81)) + 1|0);\n  $7 = $82;\n }\n $83 = $33;\n $84 = ((($35)) + 4|0);\n $85 = HEAP32[$84>>2]|0;\n $86 = (($85) + ($83))|0;\n HEAP32[$84>>2] = $86;\n $87 = $33;\n $88 = HEAP32[$32>>2]|0;\n $89 = (($88) - ($87))|0;\n HEAP32[$32>>2] = $89;\n $90 = HEAP32[$32>>2]|0;\n $91 = ($90|0)!=(0);\n if (!($91)) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($35);\n $92 = ((($35)) + 12|0);\n $93 = HEAP32[$92>>2]|0;\n $94 = ((($35)) + 4|0);\n $95 = HEAP32[$94>>2]|0;\n $96 = (($93) + ($95)|0);\n $97 = ((($35)) + 12|0);\n $98 = HEAP32[$97>>2]|0;\n $99 = ((($35)) + 4|0);\n $100 = HEAP32[$99>>2]|0;\n $101 = (($98) + ($100)|0);\n $102 = HEAP32[$32>>2]|0;\n $103 = (($101) + ($102)|0);\n $104 = $31;\n $105 = $33;\n $106 = (($104) + ($105)|0);\n $18 = $96;\n $19 = $103;\n $20 = $106;\n $107 = $18;\n $17 = $107;\n $108 = $17;\n $109 = $19;\n $12 = $109;\n $110 = $12;\n $111 = $20;\n $13 = $111;\n $112 = $13;\n $14 = $108;\n $15 = $110;\n $16 = $112;\n while(1) {\n  $113 = $14;\n  $114 = $15;\n  $115 = ($113|0)!=($114|0);\n  if (!($115)) {\n   break;\n  }\n  $116 = $14;\n  $117 = HEAP8[$116>>0]|0;\n  $118 = $16;\n  HEAP8[$118>>0] = $117;\n  $119 = $14;\n  $120 = ((($119)) + 1|0);\n  $14 = $120;\n  $121 = $16;\n  $122 = ((($121)) + 1|0);\n  $16 = $122;\n }\n $123 = HEAP32[$32>>2]|0;\n $124 = ((($35)) + 4|0);\n $125 = HEAP32[$124>>2]|0;\n $126 = (($125) + ($123))|0;\n HEAP32[$124>>2] = $126;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersINS0_3las7point10EE6unpackEPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $1;\n __ZN6laszip7formats3las7point10C2Ev($0);\n $4 = $2;\n $5 = (__ZN6laszip7formats7packersIiE6unpackEPKc($4)|0);\n HEAP8[$0>>0]=$5&255;HEAP8[$0+1>>0]=($5>>8)&255;HEAP8[$0+2>>0]=($5>>16)&255;HEAP8[$0+3>>0]=$5>>24;\n $6 = $2;\n $7 = ((($6)) + 4|0);\n $2 = $7;\n $8 = $2;\n $9 = (__ZN6laszip7formats7packersIiE6unpackEPKc($8)|0);\n $10 = ((($0)) + 4|0);\n HEAP8[$10>>0]=$9&255;HEAP8[$10+1>>0]=($9>>8)&255;HEAP8[$10+2>>0]=($9>>16)&255;HEAP8[$10+3>>0]=$9>>24;\n $11 = $2;\n $12 = ((($11)) + 4|0);\n $2 = $12;\n $13 = $2;\n $14 = (__ZN6laszip7formats7packersIiE6unpackEPKc($13)|0);\n $15 = ((($0)) + 8|0);\n HEAP8[$15>>0]=$14&255;HEAP8[$15+1>>0]=($14>>8)&255;HEAP8[$15+2>>0]=($14>>16)&255;HEAP8[$15+3>>0]=$14>>24;\n $16 = $2;\n $17 = ((($16)) + 4|0);\n $2 = $17;\n $18 = $2;\n $19 = (__ZN6laszip7formats7packersItE6unpackEPKc($18)|0);\n $20 = ((($0)) + 12|0);\n HEAP8[$20>>0]=$19&255;HEAP8[$20+1>>0]=$19>>8;\n $21 = $2;\n $22 = ((($21)) + 2|0);\n $2 = $22;\n $23 = $2;\n $24 = (__ZN6laszip7formats7packersIhE6unpackEPKc($23)|0);\n $3 = $24;\n $25 = $2;\n $26 = ((($25)) + 1|0);\n $2 = $26;\n $27 = $3;\n __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($27,$0);\n $28 = $2;\n $29 = (__ZN6laszip7formats7packersIhE6unpackEPKc($28)|0);\n $30 = ((($0)) + 15|0);\n HEAP8[$30>>0] = $29;\n $31 = $2;\n $32 = ((($31)) + 1|0);\n $2 = $32;\n $33 = $2;\n $34 = (__ZN6laszip7formats7packersIcE6unpackEPKc($33)|0);\n $35 = ((($0)) + 16|0);\n HEAP8[$35>>0] = $34;\n $36 = $2;\n $37 = ((($36)) + 1|0);\n $2 = $37;\n $38 = $2;\n $39 = (__ZN6laszip7formats7packersIcE6unpackEPKc($38)|0);\n $40 = ((($0)) + 17|0);\n HEAP8[$40>>0] = $39;\n $41 = $2;\n $42 = ((($41)) + 1|0);\n $2 = $42;\n $43 = $2;\n $44 = (__ZN6laszip7formats7packersItE6unpackEPKc($43)|0);\n $45 = ((($0)) + 18|0);\n HEAP8[$45>>0]=$44&255;HEAP8[$45+1>>0]=$44>>8;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $6 = $1;\n $7 = ((($6)) + 14|0);\n $8 = HEAP8[$7>>0]|0;\n $9 = $8 & 7;\n $2 = $9;\n $10 = $1;\n $11 = ((($10)) + 14|0);\n $12 = HEAP8[$11>>0]|0;\n $13 = ($12&255) >>> 3;\n $14 = $13 & 7;\n $3 = $14;\n $15 = $1;\n $16 = ((($15)) + 14|0);\n $17 = HEAP8[$16>>0]|0;\n $18 = ($17&255) >>> 6;\n $19 = $18 & 1;\n $4 = $19;\n $20 = $1;\n $21 = ((($20)) + 14|0);\n $22 = HEAP8[$21>>0]|0;\n $23 = ($22&255) >>> 7;\n $5 = $23;\n $24 = $5;\n $25 = $24&255;\n $26 = $25 & 1;\n $27 = $26 << 7;\n $28 = $4;\n $29 = $28&255;\n $30 = $29 & 1;\n $31 = $30 << 6;\n $32 = $27 | $31;\n $33 = $3;\n $34 = $33&255;\n $35 = $34 & 7;\n $36 = $35 << 3;\n $37 = $32 | $36;\n $38 = $2;\n $39 = $38&255;\n $40 = $39 & 7;\n $41 = $37 | $40;\n $42 = $41&255;\n STACKTOP = sp;return ($42|0);\n}\nfunction __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $4&255;\n $6 = $5 & 7;\n $7 = $6&255;\n $8 = $3;\n $9 = ((($8)) + 14|0);\n $10 = HEAP8[$9>>0]|0;\n $11 = $7 & 7;\n $12 = $10 & -8;\n $13 = $12 | $11;\n HEAP8[$9>>0] = $13;\n $14 = $2;\n $15 = $14&255;\n $16 = $15 >> 3;\n $17 = $16 & 7;\n $18 = $17&255;\n $19 = $3;\n $20 = ((($19)) + 14|0);\n $21 = HEAP8[$20>>0]|0;\n $22 = $18 & 7;\n $23 = ($22 << 3)&255;\n $24 = $21 & -57;\n $25 = $24 | $23;\n HEAP8[$20>>0] = $25;\n $26 = $2;\n $27 = $26&255;\n $28 = $27 >> 6;\n $29 = $28 & 1;\n $30 = $29&255;\n $31 = $3;\n $32 = ((($31)) + 14|0);\n $33 = HEAP8[$32>>0]|0;\n $34 = $30 & 1;\n $35 = ($34 << 6)&255;\n $36 = $33 & -65;\n $37 = $36 | $35;\n HEAP8[$32>>0] = $37;\n $38 = $2;\n $39 = $38&255;\n $40 = $39 >> 7;\n $41 = $40 & 1;\n $42 = $41&255;\n $43 = $3;\n $44 = ((($43)) + 14|0);\n $45 = HEAP8[$44>>0]|0;\n $46 = $42 & 1;\n $47 = ($46 << 7)&255;\n $48 = $45 & 127;\n $49 = $48 | $47;\n HEAP8[$44>>0] = $49;\n STACKTOP = sp;return;\n}\nfunction __Z7U8_FOLDi($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = $2&255;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZNK6laszip5utils16streaming_medianIiE3getEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $3;\n $1 = $4;\n $2 = 2;\n $5 = $1;\n $6 = $2;\n $7 = (($5) + ($6<<2)|0);\n $8 = HEAP32[$7>>2]|0;\n STACKTOP = sp;return ($8|0);\n}\nfunction __ZN6laszip5utils16streaming_medianIiE3addERKi($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0;\n var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0;\n var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;\n var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;\n var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0;\n var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0;\n var $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0);\n $86 = $0;\n $87 = $1;\n $88 = $86;\n $89 = ((($88)) + 20|0);\n $90 = HEAP8[$89>>0]|0;\n $91 = $90&1;\n if ($91) {\n  $92 = $87;\n  $93 = HEAP32[$92>>2]|0;\n  $84 = $88;\n  $85 = 2;\n  $94 = $84;\n  $95 = $85;\n  $96 = (($94) + ($95<<2)|0);\n  $97 = HEAP32[$96>>2]|0;\n  $98 = ($93|0)<($97|0);\n  if (!($98)) {\n   $163 = $87;\n   $164 = HEAP32[$163>>2]|0;\n   $32 = $88;\n   $33 = 3;\n   $165 = $32;\n   $166 = $33;\n   $167 = (($165) + ($166<<2)|0);\n   $168 = HEAP32[$167>>2]|0;\n   $169 = ($164|0)<($168|0);\n   if ($169) {\n    $34 = $88;\n    $35 = 3;\n    $170 = $34;\n    $171 = $35;\n    $172 = (($170) + ($171<<2)|0);\n    $173 = HEAP32[$172>>2]|0;\n    $36 = $88;\n    $37 = 4;\n    $174 = $36;\n    $175 = $37;\n    $176 = (($174) + ($175<<2)|0);\n    HEAP32[$176>>2] = $173;\n    $177 = $87;\n    $178 = HEAP32[$177>>2]|0;\n    $38 = $88;\n    $39 = 3;\n    $179 = $38;\n    $180 = $39;\n    $181 = (($179) + ($180<<2)|0);\n    HEAP32[$181>>2] = $178;\n   } else {\n    $182 = $87;\n    $183 = HEAP32[$182>>2]|0;\n    $40 = $88;\n    $41 = 4;\n    $184 = $40;\n    $185 = $41;\n    $186 = (($184) + ($185<<2)|0);\n    HEAP32[$186>>2] = $183;\n   }\n   $187 = ((($88)) + 20|0);\n   HEAP8[$187>>0] = 0;\n   STACKTOP = sp;return;\n  }\n  $2 = $88;\n  $3 = 3;\n  $99 = $2;\n  $100 = $3;\n  $101 = (($99) + ($100<<2)|0);\n  $102 = HEAP32[$101>>2]|0;\n  $4 = $88;\n  $5 = 4;\n  $103 = $4;\n  $104 = $5;\n  $105 = (($103) + ($104<<2)|0);\n  HEAP32[$105>>2] = $102;\n  $6 = $88;\n  $7 = 2;\n  $106 = $6;\n  $107 = $7;\n  $108 = (($106) + ($107<<2)|0);\n  $109 = HEAP32[$108>>2]|0;\n  $8 = $88;\n  $9 = 3;\n  $110 = $8;\n  $111 = $9;\n  $112 = (($110) + ($111<<2)|0);\n  HEAP32[$112>>2] = $109;\n  $113 = $87;\n  $114 = HEAP32[$113>>2]|0;\n  $10 = $88;\n  $11 = 0;\n  $115 = $10;\n  $116 = $11;\n  $117 = (($115) + ($116<<2)|0);\n  $118 = HEAP32[$117>>2]|0;\n  $119 = ($114|0)<($118|0);\n  if ($119) {\n   $12 = $88;\n   $13 = 1;\n   $120 = $12;\n   $121 = $13;\n   $122 = (($120) + ($121<<2)|0);\n   $123 = HEAP32[$122>>2]|0;\n   $14 = $88;\n   $15 = 2;\n   $124 = $14;\n   $125 = $15;\n   $126 = (($124) + ($125<<2)|0);\n   HEAP32[$126>>2] = $123;\n   $16 = $88;\n   $17 = 0;\n   $127 = $16;\n   $128 = $17;\n   $129 = (($127) + ($128<<2)|0);\n   $130 = HEAP32[$129>>2]|0;\n   $18 = $88;\n   $19 = 1;\n   $131 = $18;\n   $132 = $19;\n   $133 = (($131) + ($132<<2)|0);\n   HEAP32[$133>>2] = $130;\n   $134 = $87;\n   $135 = HEAP32[$134>>2]|0;\n   $20 = $88;\n   $21 = 0;\n   $136 = $20;\n   $137 = $21;\n   $138 = (($136) + ($137<<2)|0);\n   HEAP32[$138>>2] = $135;\n   STACKTOP = sp;return;\n  }\n  $139 = $87;\n  $140 = HEAP32[$139>>2]|0;\n  $22 = $88;\n  $23 = 1;\n  $141 = $22;\n  $142 = $23;\n  $143 = (($141) + ($142<<2)|0);\n  $144 = HEAP32[$143>>2]|0;\n  $145 = ($140|0)<($144|0);\n  if ($145) {\n   $24 = $88;\n   $25 = 1;\n   $146 = $24;\n   $147 = $25;\n   $148 = (($146) + ($147<<2)|0);\n   $149 = HEAP32[$148>>2]|0;\n   $26 = $88;\n   $27 = 2;\n   $150 = $26;\n   $151 = $27;\n   $152 = (($150) + ($151<<2)|0);\n   HEAP32[$152>>2] = $149;\n   $153 = $87;\n   $154 = HEAP32[$153>>2]|0;\n   $28 = $88;\n   $29 = 1;\n   $155 = $28;\n   $156 = $29;\n   $157 = (($155) + ($156<<2)|0);\n   HEAP32[$157>>2] = $154;\n   STACKTOP = sp;return;\n  } else {\n   $158 = $87;\n   $159 = HEAP32[$158>>2]|0;\n   $30 = $88;\n   $31 = 2;\n   $160 = $30;\n   $161 = $31;\n   $162 = (($160) + ($161<<2)|0);\n   HEAP32[$162>>2] = $159;\n   STACKTOP = sp;return;\n  }\n } else {\n  $42 = $88;\n  $43 = 2;\n  $188 = $42;\n  $189 = $43;\n  $190 = (($188) + ($189<<2)|0);\n  $191 = HEAP32[$190>>2]|0;\n  $192 = $87;\n  $193 = HEAP32[$192>>2]|0;\n  $194 = ($191|0)<($193|0);\n  if (!($194)) {\n   $74 = $88;\n   $75 = 1;\n   $259 = $74;\n   $260 = $75;\n   $261 = (($259) + ($260<<2)|0);\n   $262 = HEAP32[$261>>2]|0;\n   $263 = $87;\n   $264 = HEAP32[$263>>2]|0;\n   $265 = ($262|0)<($264|0);\n   if ($265) {\n    $76 = $88;\n    $77 = 1;\n    $266 = $76;\n    $267 = $77;\n    $268 = (($266) + ($267<<2)|0);\n    $269 = HEAP32[$268>>2]|0;\n    $78 = $88;\n    $79 = 0;\n    $270 = $78;\n    $271 = $79;\n    $272 = (($270) + ($271<<2)|0);\n    HEAP32[$272>>2] = $269;\n    $273 = $87;\n    $274 = HEAP32[$273>>2]|0;\n    $80 = $88;\n    $81 = 1;\n    $275 = $80;\n    $276 = $81;\n    $277 = (($275) + ($276<<2)|0);\n    HEAP32[$277>>2] = $274;\n   } else {\n    $278 = $87;\n    $279 = HEAP32[$278>>2]|0;\n    $82 = $88;\n    $83 = 0;\n    $280 = $82;\n    $281 = $83;\n    $282 = (($280) + ($281<<2)|0);\n    HEAP32[$282>>2] = $279;\n   }\n   $283 = ((($88)) + 20|0);\n   HEAP8[$283>>0] = 1;\n   STACKTOP = sp;return;\n  }\n  $44 = $88;\n  $45 = 1;\n  $195 = $44;\n  $196 = $45;\n  $197 = (($195) + ($196<<2)|0);\n  $198 = HEAP32[$197>>2]|0;\n  $46 = $88;\n  $47 = 0;\n  $199 = $46;\n  $200 = $47;\n  $201 = (($199) + ($200<<2)|0);\n  HEAP32[$201>>2] = $198;\n  $48 = $88;\n  $49 = 2;\n  $202 = $48;\n  $203 = $49;\n  $204 = (($202) + ($203<<2)|0);\n  $205 = HEAP32[$204>>2]|0;\n  $50 = $88;\n  $51 = 1;\n  $206 = $50;\n  $207 = $51;\n  $208 = (($206) + ($207<<2)|0);\n  HEAP32[$208>>2] = $205;\n  $52 = $88;\n  $53 = 4;\n  $209 = $52;\n  $210 = $53;\n  $211 = (($209) + ($210<<2)|0);\n  $212 = HEAP32[$211>>2]|0;\n  $213 = $87;\n  $214 = HEAP32[$213>>2]|0;\n  $215 = ($212|0)<($214|0);\n  if ($215) {\n   $54 = $88;\n   $55 = 3;\n   $216 = $54;\n   $217 = $55;\n   $218 = (($216) + ($217<<2)|0);\n   $219 = HEAP32[$218>>2]|0;\n   $56 = $88;\n   $57 = 2;\n   $220 = $56;\n   $221 = $57;\n   $222 = (($220) + ($221<<2)|0);\n   HEAP32[$222>>2] = $219;\n   $58 = $88;\n   $59 = 4;\n   $223 = $58;\n   $224 = $59;\n   $225 = (($223) + ($224<<2)|0);\n   $226 = HEAP32[$225>>2]|0;\n   $60 = $88;\n   $61 = 3;\n   $227 = $60;\n   $228 = $61;\n   $229 = (($227) + ($228<<2)|0);\n   HEAP32[$229>>2] = $226;\n   $230 = $87;\n   $231 = HEAP32[$230>>2]|0;\n   $62 = $88;\n   $63 = 4;\n   $232 = $62;\n   $233 = $63;\n   $234 = (($232) + ($233<<2)|0);\n   HEAP32[$234>>2] = $231;\n   STACKTOP = sp;return;\n  }\n  $64 = $88;\n  $65 = 3;\n  $235 = $64;\n  $236 = $65;\n  $237 = (($235) + ($236<<2)|0);\n  $238 = HEAP32[$237>>2]|0;\n  $239 = $87;\n  $240 = HEAP32[$239>>2]|0;\n  $241 = ($238|0)<($240|0);\n  if ($241) {\n   $66 = $88;\n   $67 = 3;\n   $242 = $66;\n   $243 = $67;\n   $244 = (($242) + ($243<<2)|0);\n   $245 = HEAP32[$244>>2]|0;\n   $68 = $88;\n   $69 = 2;\n   $246 = $68;\n   $247 = $69;\n   $248 = (($246) + ($247<<2)|0);\n   HEAP32[$248>>2] = $245;\n   $249 = $87;\n   $250 = HEAP32[$249>>2]|0;\n   $70 = $88;\n   $71 = 3;\n   $251 = $70;\n   $252 = $71;\n   $253 = (($251) + ($252<<2)|0);\n   HEAP32[$253>>2] = $250;\n   STACKTOP = sp;return;\n  } else {\n   $254 = $87;\n   $255 = HEAP32[$254>>2]|0;\n   $72 = $88;\n   $73 = 2;\n   $256 = $72;\n   $257 = $73;\n   $258 = (($256) + ($257<<2)|0);\n   HEAP32[$258>>2] = $255;\n   STACKTOP = sp;return;\n  }\n }\n}\nfunction __ZNK6laszip13decompressors7integer4getKEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats7packersINS0_3las7point10EE4packERKS3_Pc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $5 = $2;\n $6 = HEAPU8[$5>>0]|(HEAPU8[$5+1>>0]<<8)|(HEAPU8[$5+2>>0]<<16)|(HEAPU8[$5+3>>0]<<24);\n $7 = $3;\n __ZN6laszip7formats7packersIiE4packEiPc($6,$7);\n $8 = $3;\n $9 = ((($8)) + 4|0);\n $3 = $9;\n $10 = $2;\n $11 = ((($10)) + 4|0);\n $12 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8)|(HEAPU8[$11+2>>0]<<16)|(HEAPU8[$11+3>>0]<<24);\n $13 = $3;\n __ZN6laszip7formats7packersIiE4packEiPc($12,$13);\n $14 = $3;\n $15 = ((($14)) + 4|0);\n $3 = $15;\n $16 = $2;\n $17 = ((($16)) + 8|0);\n $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24);\n $19 = $3;\n __ZN6laszip7formats7packersIiE4packEiPc($18,$19);\n $20 = $3;\n $21 = ((($20)) + 4|0);\n $3 = $21;\n $22 = $2;\n $23 = ((($22)) + 12|0);\n $24 = HEAPU8[$23>>0]|(HEAPU8[$23+1>>0]<<8);\n $25 = $3;\n __ZN6laszip7formats7packersItE4packEtPc($24,$25);\n $26 = $3;\n $27 = ((($26)) + 2|0);\n $3 = $27;\n $28 = $2;\n $29 = (__ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($28)|0);\n $4 = $29;\n $30 = $4;\n $31 = $3;\n __ZN6laszip7formats7packersIhE4packEhPc($30,$31);\n $32 = $3;\n $33 = ((($32)) + 1|0);\n $3 = $33;\n $34 = $2;\n $35 = ((($34)) + 15|0);\n $36 = HEAP8[$35>>0]|0;\n $37 = $3;\n __ZN6laszip7formats7packersIhE4packEhPc($36,$37);\n $38 = $3;\n $39 = ((($38)) + 1|0);\n $3 = $39;\n $40 = $2;\n $41 = ((($40)) + 16|0);\n $42 = HEAP8[$41>>0]|0;\n $43 = $3;\n __ZN6laszip7formats7packersIcE4packEcPc($42,$43);\n $44 = $3;\n $45 = ((($44)) + 1|0);\n $3 = $45;\n $46 = $2;\n $47 = ((($46)) + 17|0);\n $48 = HEAP8[$47>>0]|0;\n $49 = $3;\n __ZN6laszip7formats7packersIcE4packEcPc($48,$49);\n $50 = $3;\n $51 = ((($50)) + 1|0);\n $3 = $51;\n $52 = $2;\n $53 = ((($52)) + 18|0);\n $54 = HEAPU8[$53>>0]|(HEAPU8[$53+1>>0]<<8);\n $55 = $3;\n __ZN6laszip7formats7packersItE4packEtPc($54,$55);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIiE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (__ZN6laszip7formats7packersIjE6unpackEPKc($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats7packersItE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $4 = $1;\n $5 = HEAP8[$4>>0]|0;\n $6 = $5 << 24 >> 24;\n $2 = $6;\n $7 = $1;\n $8 = ((($7)) + 1|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9 << 24 >> 24;\n $3 = $10;\n $11 = $3;\n $12 = $11&65535;\n $13 = $12 & 255;\n $14 = $13 << 8;\n $15 = $2;\n $16 = $15&65535;\n $17 = $16 & 255;\n $18 = $14 | $17;\n $19 = $18&65535;\n STACKTOP = sp;return ($19|0);\n}\nfunction __ZN6laszip7formats7packersIhE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP8[$2>>0]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats7packersIcE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP8[$2>>0]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats7packersIjE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $1 = $0;\n $6 = $1;\n $7 = HEAP8[$6>>0]|0;\n $8 = $7 << 24 >> 24;\n $2 = $8;\n $9 = $1;\n $10 = ((($9)) + 1|0);\n $11 = HEAP8[$10>>0]|0;\n $12 = $11 << 24 >> 24;\n $3 = $12;\n $13 = $1;\n $14 = ((($13)) + 2|0);\n $15 = HEAP8[$14>>0]|0;\n $16 = $15 << 24 >> 24;\n $4 = $16;\n $17 = $1;\n $18 = ((($17)) + 3|0);\n $19 = HEAP8[$18>>0]|0;\n $20 = $19 << 24 >> 24;\n $5 = $20;\n $21 = $5;\n $22 = $21 << 24;\n $23 = $4;\n $24 = $23 & 255;\n $25 = $24 << 16;\n $26 = $22 | $25;\n $27 = $3;\n $28 = $27 & 255;\n $29 = $28 << 8;\n $30 = $26 | $29;\n $31 = $2;\n $32 = $31 & 255;\n $33 = $30 | $32;\n STACKTOP = sp;return ($33|0);\n}\nfunction __ZN6laszip7formats7packersIiE4packEiPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n __ZN6laszip7formats7packersIjE4packEjPc($4,$5);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersItE4packEtPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $4&65535;\n $6 = $5 >> 8;\n $7 = $6 & 255;\n $8 = $7&255;\n $9 = $3;\n $10 = ((($9)) + 1|0);\n HEAP8[$10>>0] = $8;\n $11 = $2;\n $12 = $11&65535;\n $13 = $12 & 255;\n $14 = $13&255;\n $15 = $3;\n HEAP8[$15>>0] = $14;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIhE4packEhPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP8[$5>>0] = $4;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIcE4packEcPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP8[$5>>0] = $4;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIjE4packEjPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $4 >>> 24;\n $6 = $5 & 255;\n $7 = $6&255;\n $8 = $3;\n $9 = ((($8)) + 3|0);\n HEAP8[$9>>0] = $7;\n $10 = $2;\n $11 = $10 >>> 16;\n $12 = $11 & 255;\n $13 = $12&255;\n $14 = $3;\n $15 = ((($14)) + 2|0);\n HEAP8[$15>>0] = $13;\n $16 = $2;\n $17 = $16 >>> 8;\n $18 = $17 & 255;\n $19 = $18&255;\n $20 = $3;\n $21 = ((($20)) + 1|0);\n HEAP8[$21>>0] = $19;\n $22 = $2;\n $23 = $22 & 255;\n $24 = $23&255;\n $25 = $3;\n HEAP8[$25>>0] = $24;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 360;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2100);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2124);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($2);\n $3 = ((($2)) + 164|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($3);\n $4 = ((($2)) + 244|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($4);\n $5 = ((($2)) + 324|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 325|0);\n HEAP8[$6>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2100);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $29 = sp + 120|0;\n $30 = sp + 4|0;\n $31 = sp;\n $28 = $0;\n $32 = $28;\n HEAP8[$32>>0] = 0;\n $33 = ((($32)) + 4|0);\n __ZN6laszip6models10arithmeticC2EjbPj($33,516,0,0);\n $34 = ((($32)) + 48|0);\n __ZN6laszip6models10arithmeticC2EjbPj($34,6,0,0);\n $35 = ((($32)) + 92|0);\n HEAP32[$35>>2] = 0;\n $36 = ((($32)) + 96|0);\n HEAP32[$36>>2] = 0;\n $37 = ((($32)) + 100|0);\n __ZNSt3__25arrayIN6laszip7formats3las7gpstimeELj4EEC2Ev($37);\n $38 = ((($32)) + 100|0);\n __ZN6laszip7formats3las7gpstimeC2Ev($29);\n $26 = $38;\n $27 = $29;\n $39 = $26;\n $40 = $27;\n $23 = $39;\n $24 = 4;\n $25 = $40;\n $41 = $23;\n $42 = $24;\n $22 = $42;\n $43 = $22;\n $44 = $25;\n $19 = $41;\n $20 = $43;\n $21 = $44;\n while(1) {\n  $45 = $20;\n  $46 = ($45>>>0)>(0);\n  if (!($46)) {\n   break;\n  }\n  $47 = $21;\n  $48 = $19;\n  ;HEAP8[$48>>0]=HEAP8[$47>>0]|0;HEAP8[$48+1>>0]=HEAP8[$47+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$47+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$47+3>>0]|0;HEAP8[$48+4>>0]=HEAP8[$47+4>>0]|0;HEAP8[$48+5>>0]=HEAP8[$47+5>>0]|0;HEAP8[$48+6>>0]=HEAP8[$47+6>>0]|0;HEAP8[$48+7>>0]=HEAP8[$47+7>>0]|0;\n  $49 = $19;\n  $50 = ((($49)) + 8|0);\n  $19 = $50;\n  $51 = $20;\n  $52 = (($51) + -1)|0;\n  $20 = $52;\n }\n $53 = ((($32)) + 132|0);\n HEAP32[$30>>2] = 0;\n $17 = $53;\n $18 = $30;\n $54 = $17;\n $55 = $18;\n $14 = $54;\n $15 = 4;\n $16 = $55;\n $56 = $14;\n $57 = $15;\n $13 = $57;\n $58 = $13;\n $59 = $16;\n $10 = $56;\n $11 = $58;\n $12 = $59;\n while(1) {\n  $60 = $11;\n  $61 = ($60>>>0)>(0);\n  if (!($61)) {\n   break;\n  }\n  $62 = $12;\n  $63 = HEAP32[$62>>2]|0;\n  $64 = $10;\n  HEAP32[$64>>2] = $63;\n  $65 = $10;\n  $66 = ((($65)) + 4|0);\n  $10 = $66;\n  $67 = $11;\n  $68 = (($67) + -1)|0;\n  $11 = $68;\n }\n $69 = ((($32)) + 148|0);\n HEAP32[$31>>2] = 0;\n $8 = $69;\n $9 = $31;\n $70 = $8;\n $71 = $9;\n $5 = $70;\n $6 = 4;\n $7 = $71;\n $72 = $5;\n $73 = $6;\n $4 = $73;\n $74 = $4;\n $75 = $7;\n $1 = $72;\n $2 = $74;\n $3 = $75;\n while(1) {\n  $76 = $2;\n  $77 = ($76>>>0)>(0);\n  if (!($77)) {\n   break;\n  }\n  $78 = $3;\n  $79 = HEAP32[$78>>2]|0;\n  $80 = $1;\n  HEAP32[$80>>2] = $79;\n  $81 = $1;\n  $82 = ((($81)) + 4|0);\n  $1 = $82;\n  $83 = $2;\n  $84 = (($83) + -1)|0;\n  $2 = $84;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,32,9,8,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integerC2Ejjjj($2,32,9,8,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 48|0);\n __ZN6laszip6models10arithmeticD2Ev($3);\n $4 = ((($2)) + 4|0);\n __ZN6laszip6models10arithmeticD2Ev($4);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25arrayIN6laszip7formats3las7gpstimeELj4EEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 32|0);\n $4 = $2;\n while(1) {\n  __ZN6laszip7formats3las7gpstimeC2Ev($4);\n  $5 = ((($4)) + 8|0);\n  $6 = ($5|0)==($3|0);\n  if ($6) {\n   break;\n  } else {\n   $4 = $5;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats3las7gpstimeC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = $2;\n $4 = $3;\n HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=(0>>8)&255;HEAP8[$4+2>>0]=(0>>16)&255;HEAP8[$4+3>>0]=0>>24;\n $5 = (($3) + 4)|0;\n $6 = $5;\n HEAP8[$6>>0]=0&255;HEAP8[$6+1>>0]=(0>>8)&255;HEAP8[$6+2>>0]=(0>>16)&255;HEAP8[$6+3>>0]=0>>24;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 244|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($3);\n $4 = ((($2)) + 164|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($4);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;\n var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;\n var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;\n var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;\n var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;\n var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;\n var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0;\n var $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0;\n var $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0;\n var $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0;\n var $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0;\n var $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0;\n var $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0;\n var $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0;\n var $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0;\n var $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0;\n var $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0;\n var $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0;\n var $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0;\n var $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0;\n var $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0;\n var $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0;\n var $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0);\n $91 = sp + 360|0;\n $88 = $0;\n $89 = $1;\n $90 = $2;\n $94 = $88;\n $95 = ((($94)) + 325|0);\n $96 = HEAP8[$95>>0]|0;\n $97 = $96&1;\n if (!($97)) {\n  $98 = ((($94)) + 244|0);\n  __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($98);\n  $99 = ((($94)) + 325|0);\n  HEAP8[$99>>0] = 1;\n }\n $100 = HEAP8[$94>>0]|0;\n $101 = $100&1;\n if (!($101)) {\n  HEAP8[$94>>0] = 1;\n  $102 = $89;\n  $103 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($102)|0);\n  $104 = $90;\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($103,$104,8);\n  $105 = $90;\n  $106 = (__ZN6laszip7formats7packersINS0_3las7gpstimeEE6unpackEPKc($105)|0);\n  $107 = tempRet0;\n  $108 = $91;\n  $109 = $108;\n  HEAP8[$109>>0]=$106&255;HEAP8[$109+1>>0]=($106>>8)&255;HEAP8[$109+2>>0]=($106>>16)&255;HEAP8[$109+3>>0]=$106>>24;\n  $110 = (($108) + 4)|0;\n  $111 = $110;\n  HEAP8[$111>>0]=$107&255;HEAP8[$111+1>>0]=($107>>8)&255;HEAP8[$111+2>>0]=($107>>16)&255;HEAP8[$111+3>>0]=$107>>24;\n  $112 = ((($94)) + 100|0);\n  $85 = $112;\n  $86 = 0;\n  $113 = $85;\n  $114 = $86;\n  $115 = (($113) + ($114<<3)|0);\n  ;HEAP8[$115>>0]=HEAP8[$91>>0]|0;HEAP8[$115+1>>0]=HEAP8[$91+1>>0]|0;HEAP8[$115+2>>0]=HEAP8[$91+2>>0]|0;HEAP8[$115+3>>0]=HEAP8[$91+3>>0]|0;HEAP8[$115+4>>0]=HEAP8[$91+4>>0]|0;HEAP8[$115+5>>0]=HEAP8[$91+5>>0]|0;HEAP8[$115+6>>0]=HEAP8[$91+6>>0]|0;HEAP8[$115+7>>0]=HEAP8[$91+7>>0]|0;\n  $116 = $90;\n  $117 = ((($116)) + 8|0);\n  $87 = $117;\n  $601 = $87;\n  STACKTOP = sp;return ($601|0);\n }\n $118 = ((($94)) + 132|0);\n $119 = ((($94)) + 92|0);\n $120 = HEAP32[$119>>2]|0;\n $83 = $118;\n $84 = $120;\n $121 = $83;\n $122 = $84;\n $123 = (($121) + ($122<<2)|0);\n $124 = HEAP32[$123>>2]|0;\n $125 = ($124|0)==(0);\n $126 = $89;\n do {\n  if ($125) {\n   $127 = ((($94)) + 48|0);\n   $128 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($126,$127)|0);\n   $92 = $128;\n   $129 = $92;\n   $130 = ($129|0)==(1);\n   if ($130) {\n    $131 = ((($94)) + 244|0);\n    $132 = $89;\n    $133 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($131,$132,0,0)|0);\n    $134 = ((($94)) + 132|0);\n    $135 = ((($94)) + 92|0);\n    $136 = HEAP32[$135>>2]|0;\n    $81 = $134;\n    $82 = $136;\n    $137 = $81;\n    $138 = $82;\n    $139 = (($137) + ($138<<2)|0);\n    HEAP32[$139>>2] = $133;\n    $140 = ((($94)) + 132|0);\n    $141 = ((($94)) + 92|0);\n    $142 = HEAP32[$141>>2]|0;\n    $71 = $140;\n    $72 = $142;\n    $143 = $71;\n    $144 = $72;\n    $145 = (($143) + ($144<<2)|0);\n    $146 = HEAP32[$145>>2]|0;\n    $147 = ($146|0)<(0);\n    $148 = $147 << 31 >> 31;\n    $149 = ((($94)) + 100|0);\n    $150 = ((($94)) + 92|0);\n    $151 = HEAP32[$150>>2]|0;\n    $63 = $149;\n    $64 = $151;\n    $152 = $63;\n    $153 = $64;\n    $154 = (($152) + ($153<<3)|0);\n    $155 = $154;\n    $156 = $155;\n    $157 = HEAPU8[$156>>0]|(HEAPU8[$156+1>>0]<<8)|(HEAPU8[$156+2>>0]<<16)|(HEAPU8[$156+3>>0]<<24);\n    $158 = (($155) + 4)|0;\n    $159 = $158;\n    $160 = HEAPU8[$159>>0]|(HEAPU8[$159+1>>0]<<8)|(HEAPU8[$159+2>>0]<<16)|(HEAPU8[$159+3>>0]<<24);\n    $161 = (_i64Add(($157|0),($160|0),($146|0),($148|0))|0);\n    $162 = tempRet0;\n    $163 = $154;\n    $164 = $163;\n    HEAP8[$164>>0]=$161&255;HEAP8[$164+1>>0]=($161>>8)&255;HEAP8[$164+2>>0]=($161>>16)&255;HEAP8[$164+3>>0]=$161>>24;\n    $165 = (($163) + 4)|0;\n    $166 = $165;\n    HEAP8[$166>>0]=$162&255;HEAP8[$166+1>>0]=($162>>8)&255;HEAP8[$166+2>>0]=($162>>16)&255;HEAP8[$166+3>>0]=$162>>24;\n    $167 = ((($94)) + 148|0);\n    $168 = ((($94)) + 92|0);\n    $169 = HEAP32[$168>>2]|0;\n    $49 = $167;\n    $50 = $169;\n    $170 = $49;\n    $171 = $50;\n    $172 = (($170) + ($171<<2)|0);\n    HEAP32[$172>>2] = 0;\n    break;\n   }\n   $173 = $92;\n   $174 = ($173|0)==(2);\n   if ($174) {\n    $175 = ((($94)) + 96|0);\n    $176 = HEAP32[$175>>2]|0;\n    $177 = (($176) + 1)|0;\n    $178 = $177 & 3;\n    $179 = ((($94)) + 96|0);\n    HEAP32[$179>>2] = $178;\n    $180 = ((($94)) + 244|0);\n    $181 = $89;\n    $182 = ((($94)) + 100|0);\n    $183 = ((($94)) + 92|0);\n    $184 = HEAP32[$183>>2]|0;\n    $45 = $182;\n    $46 = $184;\n    $185 = $45;\n    $186 = $46;\n    $187 = (($185) + ($186<<3)|0);\n    $188 = $187;\n    $189 = $188;\n    $190 = HEAPU8[$189>>0]|(HEAPU8[$189+1>>0]<<8)|(HEAPU8[$189+2>>0]<<16)|(HEAPU8[$189+3>>0]<<24);\n    $191 = (($188) + 4)|0;\n    $192 = $191;\n    $193 = HEAPU8[$192>>0]|(HEAPU8[$192+1>>0]<<8)|(HEAPU8[$192+2>>0]<<16)|(HEAPU8[$192+3>>0]<<24);\n    $194 = (_bitshift64Ashr(($190|0),($193|0),32)|0);\n    $195 = tempRet0;\n    $196 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($180,$181,$194,8)|0);\n    $197 = ($196|0)<(0);\n    $198 = $197 << 31 >> 31;\n    $199 = ((($94)) + 100|0);\n    $200 = ((($94)) + 96|0);\n    $201 = HEAP32[$200>>2]|0;\n    $33 = $199;\n    $34 = $201;\n    $202 = $33;\n    $203 = $34;\n    $204 = (($202) + ($203<<3)|0);\n    $205 = $204;\n    $206 = $205;\n    HEAP8[$206>>0]=$196&255;HEAP8[$206+1>>0]=($196>>8)&255;HEAP8[$206+2>>0]=($196>>16)&255;HEAP8[$206+3>>0]=$196>>24;\n    $207 = (($205) + 4)|0;\n    $208 = $207;\n    HEAP8[$208>>0]=$198&255;HEAP8[$208+1>>0]=($198>>8)&255;HEAP8[$208+2>>0]=($198>>16)&255;HEAP8[$208+3>>0]=$198>>24;\n    $209 = ((($94)) + 100|0);\n    $210 = ((($94)) + 96|0);\n    $211 = HEAP32[$210>>2]|0;\n    $29 = $209;\n    $30 = $211;\n    $212 = $29;\n    $213 = $30;\n    $214 = (($212) + ($213<<3)|0);\n    $215 = $214;\n    $216 = $215;\n    $217 = HEAPU8[$216>>0]|(HEAPU8[$216+1>>0]<<8)|(HEAPU8[$216+2>>0]<<16)|(HEAPU8[$216+3>>0]<<24);\n    $218 = (($215) + 4)|0;\n    $219 = $218;\n    $220 = HEAPU8[$219>>0]|(HEAPU8[$219+1>>0]<<8)|(HEAPU8[$219+2>>0]<<16)|(HEAPU8[$219+3>>0]<<24);\n    $221 = ((($94)) + 100|0);\n    $222 = ((($94)) + 96|0);\n    $223 = HEAP32[$222>>2]|0;\n    $25 = $221;\n    $26 = $223;\n    $224 = $25;\n    $225 = $26;\n    $226 = (($224) + ($225<<3)|0);\n    $227 = $226;\n    $228 = $227;\n    HEAP8[$228>>0]=0&255;HEAP8[$228+1>>0]=(0>>8)&255;HEAP8[$228+2>>0]=(0>>16)&255;HEAP8[$228+3>>0]=0>>24;\n    $229 = (($227) + 4)|0;\n    $230 = $229;\n    HEAP8[$230>>0]=$217&255;HEAP8[$230+1>>0]=($217>>8)&255;HEAP8[$230+2>>0]=($217>>16)&255;HEAP8[$230+3>>0]=$217>>24;\n    $231 = $89;\n    $232 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($231)|0);\n    $233 = ((($94)) + 100|0);\n    $234 = ((($94)) + 96|0);\n    $235 = HEAP32[$234>>2]|0;\n    $13 = $233;\n    $14 = $235;\n    $236 = $13;\n    $237 = $14;\n    $238 = (($236) + ($237<<3)|0);\n    $239 = $238;\n    $240 = $239;\n    $241 = HEAPU8[$240>>0]|(HEAPU8[$240+1>>0]<<8)|(HEAPU8[$240+2>>0]<<16)|(HEAPU8[$240+3>>0]<<24);\n    $242 = (($239) + 4)|0;\n    $243 = $242;\n    $244 = HEAPU8[$243>>0]|(HEAPU8[$243+1>>0]<<8)|(HEAPU8[$243+2>>0]<<16)|(HEAPU8[$243+3>>0]<<24);\n    $245 = $241 | $232;\n    $246 = $238;\n    $247 = $246;\n    HEAP8[$247>>0]=$245&255;HEAP8[$247+1>>0]=($245>>8)&255;HEAP8[$247+2>>0]=($245>>16)&255;HEAP8[$247+3>>0]=$245>>24;\n    $248 = (($246) + 4)|0;\n    $249 = $248;\n    HEAP8[$249>>0]=$244&255;HEAP8[$249+1>>0]=($244>>8)&255;HEAP8[$249+2>>0]=($244>>16)&255;HEAP8[$249+3>>0]=$244>>24;\n    $250 = ((($94)) + 96|0);\n    $251 = HEAP32[$250>>2]|0;\n    $252 = ((($94)) + 92|0);\n    HEAP32[$252>>2] = $251;\n    $253 = ((($94)) + 132|0);\n    $254 = ((($94)) + 92|0);\n    $255 = HEAP32[$254>>2]|0;\n    $7 = $253;\n    $8 = $255;\n    $256 = $7;\n    $257 = $8;\n    $258 = (($256) + ($257<<2)|0);\n    HEAP32[$258>>2] = 0;\n    $259 = ((($94)) + 148|0);\n    $260 = ((($94)) + 92|0);\n    $261 = HEAP32[$260>>2]|0;\n    $3 = $259;\n    $4 = $261;\n    $262 = $3;\n    $263 = $4;\n    $264 = (($262) + ($263<<2)|0);\n    HEAP32[$264>>2] = 0;\n    break;\n   }\n   $265 = $92;\n   $266 = ($265|0)>(2);\n   if ($266) {\n    $267 = ((($94)) + 92|0);\n    $268 = HEAP32[$267>>2]|0;\n    $269 = $92;\n    $270 = (($268) + ($269))|0;\n    $271 = (($270) - 2)|0;\n    $272 = $271 & 3;\n    $273 = ((($94)) + 92|0);\n    HEAP32[$273>>2] = $272;\n    $274 = $89;\n    $275 = $90;\n    (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($94,$274,$275)|0);\n   }\n  } else {\n   $276 = ((($94)) + 4|0);\n   $277 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($126,$276)|0);\n   $92 = $277;\n   $278 = $92;\n   $279 = ($278|0)==(1);\n   if ($279) {\n    $280 = ((($94)) + 244|0);\n    $281 = $89;\n    $282 = ((($94)) + 132|0);\n    $283 = ((($94)) + 92|0);\n    $284 = HEAP32[$283>>2]|0;\n    $5 = $282;\n    $6 = $284;\n    $285 = $5;\n    $286 = $6;\n    $287 = (($285) + ($286<<2)|0);\n    $288 = HEAP32[$287>>2]|0;\n    $289 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($280,$281,$288,1)|0);\n    $290 = ($289|0)<(0);\n    $291 = $290 << 31 >> 31;\n    $292 = ((($94)) + 100|0);\n    $293 = ((($94)) + 92|0);\n    $294 = HEAP32[$293>>2]|0;\n    $9 = $292;\n    $10 = $294;\n    $295 = $9;\n    $296 = $10;\n    $297 = (($295) + ($296<<3)|0);\n    $298 = $297;\n    $299 = $298;\n    $300 = HEAPU8[$299>>0]|(HEAPU8[$299+1>>0]<<8)|(HEAPU8[$299+2>>0]<<16)|(HEAPU8[$299+3>>0]<<24);\n    $301 = (($298) + 4)|0;\n    $302 = $301;\n    $303 = HEAPU8[$302>>0]|(HEAPU8[$302+1>>0]<<8)|(HEAPU8[$302+2>>0]<<16)|(HEAPU8[$302+3>>0]<<24);\n    $304 = (_i64Add(($300|0),($303|0),($289|0),($291|0))|0);\n    $305 = tempRet0;\n    $306 = $297;\n    $307 = $306;\n    HEAP8[$307>>0]=$304&255;HEAP8[$307+1>>0]=($304>>8)&255;HEAP8[$307+2>>0]=($304>>16)&255;HEAP8[$307+3>>0]=$304>>24;\n    $308 = (($306) + 4)|0;\n    $309 = $308;\n    HEAP8[$309>>0]=$305&255;HEAP8[$309+1>>0]=($305>>8)&255;HEAP8[$309+2>>0]=($305>>16)&255;HEAP8[$309+3>>0]=$305>>24;\n    $310 = ((($94)) + 148|0);\n    $311 = ((($94)) + 92|0);\n    $312 = HEAP32[$311>>2]|0;\n    $11 = $310;\n    $12 = $312;\n    $313 = $11;\n    $314 = $12;\n    $315 = (($313) + ($314<<2)|0);\n    HEAP32[$315>>2] = 0;\n    break;\n   }\n   $316 = $92;\n   $317 = ($316|0)<(511);\n   $318 = $92;\n   if (!($317)) {\n    $490 = ($318|0)==(512);\n    if ($490) {\n     $491 = ((($94)) + 96|0);\n     $492 = HEAP32[$491>>2]|0;\n     $493 = (($492) + 1)|0;\n     $494 = $493 & 3;\n     $495 = ((($94)) + 96|0);\n     HEAP32[$495>>2] = $494;\n     $496 = ((($94)) + 244|0);\n     $497 = $89;\n     $498 = ((($94)) + 100|0);\n     $499 = ((($94)) + 92|0);\n     $500 = HEAP32[$499>>2]|0;\n     $61 = $498;\n     $62 = $500;\n     $501 = $61;\n     $502 = $62;\n     $503 = (($501) + ($502<<3)|0);\n     $504 = $503;\n     $505 = $504;\n     $506 = HEAPU8[$505>>0]|(HEAPU8[$505+1>>0]<<8)|(HEAPU8[$505+2>>0]<<16)|(HEAPU8[$505+3>>0]<<24);\n     $507 = (($504) + 4)|0;\n     $508 = $507;\n     $509 = HEAPU8[$508>>0]|(HEAPU8[$508+1>>0]<<8)|(HEAPU8[$508+2>>0]<<16)|(HEAPU8[$508+3>>0]<<24);\n     $510 = (_bitshift64Ashr(($506|0),($509|0),32)|0);\n     $511 = tempRet0;\n     $512 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($496,$497,$510,8)|0);\n     $513 = ($512|0)<(0);\n     $514 = $513 << 31 >> 31;\n     $515 = ((($94)) + 100|0);\n     $516 = ((($94)) + 96|0);\n     $517 = HEAP32[$516>>2]|0;\n     $65 = $515;\n     $66 = $517;\n     $518 = $65;\n     $519 = $66;\n     $520 = (($518) + ($519<<3)|0);\n     $521 = $520;\n     $522 = $521;\n     HEAP8[$522>>0]=$512&255;HEAP8[$522+1>>0]=($512>>8)&255;HEAP8[$522+2>>0]=($512>>16)&255;HEAP8[$522+3>>0]=$512>>24;\n     $523 = (($521) + 4)|0;\n     $524 = $523;\n     HEAP8[$524>>0]=$514&255;HEAP8[$524+1>>0]=($514>>8)&255;HEAP8[$524+2>>0]=($514>>16)&255;HEAP8[$524+3>>0]=$514>>24;\n     $525 = ((($94)) + 100|0);\n     $526 = ((($94)) + 96|0);\n     $527 = HEAP32[$526>>2]|0;\n     $67 = $525;\n     $68 = $527;\n     $528 = $67;\n     $529 = $68;\n     $530 = (($528) + ($529<<3)|0);\n     $531 = $530;\n     $532 = $531;\n     $533 = HEAPU8[$532>>0]|(HEAPU8[$532+1>>0]<<8)|(HEAPU8[$532+2>>0]<<16)|(HEAPU8[$532+3>>0]<<24);\n     $534 = (($531) + 4)|0;\n     $535 = $534;\n     $536 = HEAPU8[$535>>0]|(HEAPU8[$535+1>>0]<<8)|(HEAPU8[$535+2>>0]<<16)|(HEAPU8[$535+3>>0]<<24);\n     $537 = ((($94)) + 100|0);\n     $538 = ((($94)) + 96|0);\n     $539 = HEAP32[$538>>2]|0;\n     $69 = $537;\n     $70 = $539;\n     $540 = $69;\n     $541 = $70;\n     $542 = (($540) + ($541<<3)|0);\n     $543 = $542;\n     $544 = $543;\n     HEAP8[$544>>0]=0&255;HEAP8[$544+1>>0]=(0>>8)&255;HEAP8[$544+2>>0]=(0>>16)&255;HEAP8[$544+3>>0]=0>>24;\n     $545 = (($543) + 4)|0;\n     $546 = $545;\n     HEAP8[$546>>0]=$533&255;HEAP8[$546+1>>0]=($533>>8)&255;HEAP8[$546+2>>0]=($533>>16)&255;HEAP8[$546+3>>0]=$533>>24;\n     $547 = $89;\n     $548 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($547)|0);\n     $549 = ((($94)) + 100|0);\n     $550 = ((($94)) + 96|0);\n     $551 = HEAP32[$550>>2]|0;\n     $73 = $549;\n     $74 = $551;\n     $552 = $73;\n     $553 = $74;\n     $554 = (($552) + ($553<<3)|0);\n     $555 = $554;\n     $556 = $555;\n     $557 = HEAPU8[$556>>0]|(HEAPU8[$556+1>>0]<<8)|(HEAPU8[$556+2>>0]<<16)|(HEAPU8[$556+3>>0]<<24);\n     $558 = (($555) + 4)|0;\n     $559 = $558;\n     $560 = HEAPU8[$559>>0]|(HEAPU8[$559+1>>0]<<8)|(HEAPU8[$559+2>>0]<<16)|(HEAPU8[$559+3>>0]<<24);\n     $561 = $557 | $548;\n     $562 = $554;\n     $563 = $562;\n     HEAP8[$563>>0]=$561&255;HEAP8[$563+1>>0]=($561>>8)&255;HEAP8[$563+2>>0]=($561>>16)&255;HEAP8[$563+3>>0]=$561>>24;\n     $564 = (($562) + 4)|0;\n     $565 = $564;\n     HEAP8[$565>>0]=$560&255;HEAP8[$565+1>>0]=($560>>8)&255;HEAP8[$565+2>>0]=($560>>16)&255;HEAP8[$565+3>>0]=$560>>24;\n     $566 = ((($94)) + 96|0);\n     $567 = HEAP32[$566>>2]|0;\n     $568 = ((($94)) + 92|0);\n     HEAP32[$568>>2] = $567;\n     $569 = ((($94)) + 132|0);\n     $570 = ((($94)) + 92|0);\n     $571 = HEAP32[$570>>2]|0;\n     $75 = $569;\n     $76 = $571;\n     $572 = $75;\n     $573 = $76;\n     $574 = (($572) + ($573<<2)|0);\n     HEAP32[$574>>2] = 0;\n     $575 = ((($94)) + 148|0);\n     $576 = ((($94)) + 92|0);\n     $577 = HEAP32[$576>>2]|0;\n     $77 = $575;\n     $78 = $577;\n     $578 = $77;\n     $579 = $78;\n     $580 = (($578) + ($579<<2)|0);\n     HEAP32[$580>>2] = 0;\n     break;\n    }\n    $581 = $92;\n    $582 = ($581|0)>=(512);\n    if (!($582)) {\n     break;\n    }\n    $583 = ((($94)) + 92|0);\n    $584 = HEAP32[$583>>2]|0;\n    $585 = $92;\n    $586 = (($584) + ($585))|0;\n    $587 = (($586) - 512)|0;\n    $588 = $587 & 3;\n    $589 = ((($94)) + 92|0);\n    HEAP32[$589>>2] = $588;\n    $590 = $89;\n    $591 = $90;\n    (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($94,$590,$591)|0);\n    break;\n   }\n   $319 = ($318|0)==(0);\n   do {\n    if ($319) {\n     $320 = ((($94)) + 244|0);\n     $321 = $89;\n     $322 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($320,$321,0,7)|0);\n     $93 = $322;\n     $323 = ((($94)) + 148|0);\n     $324 = ((($94)) + 92|0);\n     $325 = HEAP32[$324>>2]|0;\n     $15 = $323;\n     $16 = $325;\n     $326 = $15;\n     $327 = $16;\n     $328 = (($326) + ($327<<2)|0);\n     $329 = HEAP32[$328>>2]|0;\n     $330 = (($329) + 1)|0;\n     HEAP32[$328>>2] = $330;\n     $331 = ((($94)) + 148|0);\n     $332 = ((($94)) + 92|0);\n     $333 = HEAP32[$332>>2]|0;\n     $17 = $331;\n     $18 = $333;\n     $334 = $17;\n     $335 = $18;\n     $336 = (($334) + ($335<<2)|0);\n     $337 = HEAP32[$336>>2]|0;\n     $338 = ($337|0)>(3);\n     if ($338) {\n      $339 = $93;\n      $340 = ((($94)) + 132|0);\n      $341 = ((($94)) + 92|0);\n      $342 = HEAP32[$341>>2]|0;\n      $19 = $340;\n      $20 = $342;\n      $343 = $19;\n      $344 = $20;\n      $345 = (($343) + ($344<<2)|0);\n      HEAP32[$345>>2] = $339;\n      $346 = ((($94)) + 148|0);\n      $347 = ((($94)) + 92|0);\n      $348 = HEAP32[$347>>2]|0;\n      $21 = $346;\n      $22 = $348;\n      $349 = $21;\n      $350 = $22;\n      $351 = (($349) + ($350<<2)|0);\n      HEAP32[$351>>2] = 0;\n     }\n    } else {\n     $352 = $92;\n     $353 = ($352|0)<(500);\n     $354 = $92;\n     if ($353) {\n      $355 = ($354|0)<(10);\n      $356 = ((($94)) + 244|0);\n      $357 = $89;\n      $358 = $92;\n      $359 = ((($94)) + 132|0);\n      $360 = ((($94)) + 92|0);\n      $361 = HEAP32[$360>>2]|0;\n      if ($355) {\n       $23 = $359;\n       $24 = $361;\n       $362 = $23;\n       $363 = $24;\n       $364 = (($362) + ($363<<2)|0);\n       $365 = HEAP32[$364>>2]|0;\n       $366 = Math_imul($358, $365)|0;\n       $367 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($356,$357,$366,2)|0);\n       $93 = $367;\n       break;\n      } else {\n       $27 = $359;\n       $28 = $361;\n       $368 = $27;\n       $369 = $28;\n       $370 = (($368) + ($369<<2)|0);\n       $371 = HEAP32[$370>>2]|0;\n       $372 = Math_imul($358, $371)|0;\n       $373 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($356,$357,$372,3)|0);\n       $93 = $373;\n       break;\n      }\n     }\n     $374 = ($354|0)==(500);\n     if ($374) {\n      $375 = ((($94)) + 244|0);\n      $376 = $89;\n      $377 = ((($94)) + 132|0);\n      $378 = ((($94)) + 92|0);\n      $379 = HEAP32[$378>>2]|0;\n      $31 = $377;\n      $32 = $379;\n      $380 = $31;\n      $381 = $32;\n      $382 = (($380) + ($381<<2)|0);\n      $383 = HEAP32[$382>>2]|0;\n      $384 = ($383*500)|0;\n      $385 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($375,$376,$384,4)|0);\n      $93 = $385;\n      $386 = ((($94)) + 148|0);\n      $387 = ((($94)) + 92|0);\n      $388 = HEAP32[$387>>2]|0;\n      $35 = $386;\n      $36 = $388;\n      $389 = $35;\n      $390 = $36;\n      $391 = (($389) + ($390<<2)|0);\n      $392 = HEAP32[$391>>2]|0;\n      $393 = (($392) + 1)|0;\n      HEAP32[$391>>2] = $393;\n      $394 = ((($94)) + 148|0);\n      $395 = ((($94)) + 92|0);\n      $396 = HEAP32[$395>>2]|0;\n      $37 = $394;\n      $38 = $396;\n      $397 = $37;\n      $398 = $38;\n      $399 = (($397) + ($398<<2)|0);\n      $400 = HEAP32[$399>>2]|0;\n      $401 = ($400|0)>(3);\n      if (!($401)) {\n       break;\n      }\n      $402 = $93;\n      $403 = ((($94)) + 132|0);\n      $404 = ((($94)) + 92|0);\n      $405 = HEAP32[$404>>2]|0;\n      $39 = $403;\n      $40 = $405;\n      $406 = $39;\n      $407 = $40;\n      $408 = (($406) + ($407<<2)|0);\n      HEAP32[$408>>2] = $402;\n      $409 = ((($94)) + 148|0);\n      $410 = ((($94)) + 92|0);\n      $411 = HEAP32[$410>>2]|0;\n      $41 = $409;\n      $42 = $411;\n      $412 = $41;\n      $413 = $42;\n      $414 = (($412) + ($413<<2)|0);\n      HEAP32[$414>>2] = 0;\n      break;\n     }\n     $415 = $92;\n     $416 = (500 - ($415))|0;\n     $92 = $416;\n     $417 = $92;\n     $418 = ($417|0)>(-10);\n     $419 = ((($94)) + 244|0);\n     $420 = $89;\n     if ($418) {\n      $421 = $92;\n      $422 = ((($94)) + 132|0);\n      $423 = ((($94)) + 92|0);\n      $424 = HEAP32[$423>>2]|0;\n      $43 = $422;\n      $44 = $424;\n      $425 = $43;\n      $426 = $44;\n      $427 = (($425) + ($426<<2)|0);\n      $428 = HEAP32[$427>>2]|0;\n      $429 = Math_imul($421, $428)|0;\n      $430 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($419,$420,$429,5)|0);\n      $93 = $430;\n      break;\n     }\n     $431 = ((($94)) + 132|0);\n     $432 = ((($94)) + 92|0);\n     $433 = HEAP32[$432>>2]|0;\n     $47 = $431;\n     $48 = $433;\n     $434 = $47;\n     $435 = $48;\n     $436 = (($434) + ($435<<2)|0);\n     $437 = HEAP32[$436>>2]|0;\n     $438 = Math_imul(-10, $437)|0;\n     $439 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($419,$420,$438,6)|0);\n     $93 = $439;\n     $440 = ((($94)) + 148|0);\n     $441 = ((($94)) + 92|0);\n     $442 = HEAP32[$441>>2]|0;\n     $51 = $440;\n     $52 = $442;\n     $443 = $51;\n     $444 = $52;\n     $445 = (($443) + ($444<<2)|0);\n     $446 = HEAP32[$445>>2]|0;\n     $447 = (($446) + 1)|0;\n     HEAP32[$445>>2] = $447;\n     $448 = ((($94)) + 148|0);\n     $449 = ((($94)) + 92|0);\n     $450 = HEAP32[$449>>2]|0;\n     $53 = $448;\n     $54 = $450;\n     $451 = $53;\n     $452 = $54;\n     $453 = (($451) + ($452<<2)|0);\n     $454 = HEAP32[$453>>2]|0;\n     $455 = ($454|0)>(3);\n     if ($455) {\n      $456 = $93;\n      $457 = ((($94)) + 132|0);\n      $458 = ((($94)) + 92|0);\n      $459 = HEAP32[$458>>2]|0;\n      $55 = $457;\n      $56 = $459;\n      $460 = $55;\n      $461 = $56;\n      $462 = (($460) + ($461<<2)|0);\n      HEAP32[$462>>2] = $456;\n      $463 = ((($94)) + 148|0);\n      $464 = ((($94)) + 92|0);\n      $465 = HEAP32[$464>>2]|0;\n      $57 = $463;\n      $58 = $465;\n      $466 = $57;\n      $467 = $58;\n      $468 = (($466) + ($467<<2)|0);\n      HEAP32[$468>>2] = 0;\n     }\n    }\n   } while(0);\n   $469 = $93;\n   $470 = ($469|0)<(0);\n   $471 = $470 << 31 >> 31;\n   $472 = ((($94)) + 100|0);\n   $473 = ((($94)) + 92|0);\n   $474 = HEAP32[$473>>2]|0;\n   $59 = $472;\n   $60 = $474;\n   $475 = $59;\n   $476 = $60;\n   $477 = (($475) + ($476<<3)|0);\n   $478 = $477;\n   $479 = $478;\n   $480 = HEAPU8[$479>>0]|(HEAPU8[$479+1>>0]<<8)|(HEAPU8[$479+2>>0]<<16)|(HEAPU8[$479+3>>0]<<24);\n   $481 = (($478) + 4)|0;\n   $482 = $481;\n   $483 = HEAPU8[$482>>0]|(HEAPU8[$482+1>>0]<<8)|(HEAPU8[$482+2>>0]<<16)|(HEAPU8[$482+3>>0]<<24);\n   $484 = (_i64Add(($480|0),($483|0),($469|0),($471|0))|0);\n   $485 = tempRet0;\n   $486 = $477;\n   $487 = $486;\n   HEAP8[$487>>0]=$484&255;HEAP8[$487+1>>0]=($484>>8)&255;HEAP8[$487+2>>0]=($484>>16)&255;HEAP8[$487+3>>0]=$484>>24;\n   $488 = (($486) + 4)|0;\n   $489 = $488;\n   HEAP8[$489>>0]=$485&255;HEAP8[$489+1>>0]=($485>>8)&255;HEAP8[$489+2>>0]=($485>>16)&255;HEAP8[$489+3>>0]=$485>>24;\n  }\n } while(0);\n $592 = ((($94)) + 100|0);\n $593 = ((($94)) + 92|0);\n $594 = HEAP32[$593>>2]|0;\n $79 = $592;\n $80 = $594;\n $595 = $79;\n $596 = $80;\n $597 = (($595) + ($596<<3)|0);\n $598 = $90;\n __ZN6laszip7formats7packersINS0_3las7gpstimeEE4packERKS3_Pc($597,$598);\n $599 = $90;\n $600 = ((($599)) + 8|0);\n $87 = $600;\n $601 = $87;\n STACKTOP = sp;return ($601|0);\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integer4initEv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersINS0_3las7gpstimeEE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $1 = sp + 24|0;\n $3 = sp + 8|0;\n $4 = sp;\n $2 = $0;\n $5 = $2;\n $6 = (__ZN6laszip7formats7packersIjE6unpackEPKc($5)|0);\n $7 = $3;\n $8 = $7;\n HEAP32[$8>>2] = $6;\n $9 = (($7) + 4)|0;\n $10 = $9;\n HEAP32[$10>>2] = 0;\n $11 = $2;\n $12 = ((($11)) + 4|0);\n $13 = (__ZN6laszip7formats7packersIjE6unpackEPKc($12)|0);\n $14 = $4;\n $15 = $14;\n HEAP32[$15>>2] = $13;\n $16 = (($14) + 4)|0;\n $17 = $16;\n HEAP32[$17>>2] = 0;\n $18 = $4;\n $19 = $18;\n $20 = HEAP32[$19>>2]|0;\n $21 = (($18) + 4)|0;\n $22 = $21;\n $23 = HEAP32[$22>>2]|0;\n $24 = $3;\n $25 = $24;\n $26 = HEAP32[$25>>2]|0;\n $27 = (($24) + 4)|0;\n $28 = $27;\n $29 = HEAP32[$28>>2]|0;\n $30 = $20 | $29;\n __ZN6laszip7formats3las7gpstimeC2Ex($1,$26,$30);\n $31 = $1;\n $32 = $31;\n $33 = HEAPU8[$32>>0]|(HEAPU8[$32+1>>0]<<8)|(HEAPU8[$32+2>>0]<<16)|(HEAPU8[$32+3>>0]<<24);\n $34 = (($31) + 4)|0;\n $35 = $34;\n $36 = HEAPU8[$35>>0]|(HEAPU8[$35+1>>0]<<8)|(HEAPU8[$35+2>>0]<<16)|(HEAPU8[$35+3>>0]<<24);\n tempRet0 = ($36);\n STACKTOP = sp;return ($33|0);\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $4 = $1;\n $5 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($4)|0);\n $6 = $5&65535;\n $2 = $6;\n $7 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($4)|0);\n $8 = $7&65535;\n $3 = $8;\n $9 = $3;\n $10 = $9 << 16;\n $11 = $2;\n $12 = $10 | $11;\n STACKTOP = sp;return ($12|0);\n}\nfunction __ZN6laszip7formats7packersINS0_3las7gpstimeEE4packERKS3_Pc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $4;\n $6 = $5;\n $7 = HEAPU8[$6>>0]|(HEAPU8[$6+1>>0]<<8)|(HEAPU8[$6+2>>0]<<16)|(HEAPU8[$6+3>>0]<<24);\n $8 = (($5) + 4)|0;\n $9 = $8;\n $10 = HEAPU8[$9>>0]|(HEAPU8[$9+1>>0]<<8)|(HEAPU8[$9+2>>0]<<16)|(HEAPU8[$9+3>>0]<<24);\n $11 = $3;\n __ZN6laszip7formats7packersIjE4packEjPc($7,$11);\n $12 = $2;\n $13 = $12;\n $14 = $13;\n $15 = HEAPU8[$14>>0]|(HEAPU8[$14+1>>0]<<8)|(HEAPU8[$14+2>>0]<<16)|(HEAPU8[$14+3>>0]<<24);\n $16 = (($13) + 4)|0;\n $17 = $16;\n $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24);\n $19 = (_bitshift64Ashr(($15|0),($18|0),32)|0);\n $20 = tempRet0;\n $21 = $3;\n $22 = ((($21)) + 4|0);\n __ZN6laszip7formats7packersIjE4packEjPc($19,$22);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats3las7gpstimeC2Ex($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = sp;\n $3 = $0;\n $5 = $4;\n $6 = $5;\n HEAP32[$6>>2] = $1;\n $7 = (($5) + 4)|0;\n $8 = $7;\n HEAP32[$8>>2] = $2;\n $9 = $3;\n $10 = $4;\n $11 = $10;\n $12 = HEAP32[$11>>2]|0;\n $13 = (($10) + 4)|0;\n $14 = $13;\n $15 = HEAP32[$14>>2]|0;\n $16 = $9;\n $17 = $16;\n HEAP8[$17>>0]=$12&255;HEAP8[$17+1>>0]=($12>>8)&255;HEAP8[$17+2>>0]=($12>>16)&255;HEAP8[$17+3>>0]=$12>>24;\n $18 = (($16) + 4)|0;\n $19 = $18;\n HEAP8[$19>>0]=$15&255;HEAP8[$19+1>>0]=($15>>8)&255;HEAP8[$19+2>>0]=($15>>16)&255;HEAP8[$19+3>>0]=$15>>24;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 400;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2152);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2176);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP8[$2>>0] = 0;\n $3 = ((($2)) + 1|0);\n __ZN6laszip7formats3las3rgbC2Ev($3);\n $4 = ((($2)) + 8|0);\n __ZN6laszip6models10arithmeticC2EjbPj($4,128,0,0);\n $5 = ((($2)) + 52|0);\n __ZN6laszip6models10arithmeticC2EjbPj($5,256,0,0);\n $6 = ((($2)) + 96|0);\n __ZN6laszip6models10arithmeticC2EjbPj($6,256,0,0);\n $7 = ((($2)) + 140|0);\n __ZN6laszip6models10arithmeticC2EjbPj($7,256,0,0);\n $8 = ((($2)) + 184|0);\n __ZN6laszip6models10arithmeticC2EjbPj($8,256,0,0);\n $9 = ((($2)) + 228|0);\n __ZN6laszip6models10arithmeticC2EjbPj($9,256,0,0);\n $10 = ((($2)) + 272|0);\n __ZN6laszip6models10arithmeticC2EjbPj($10,256,0,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2152);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats3las3rgbC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP8[$2>>0]=0&255;HEAP8[$2+1>>0]=0>>8;\n $3 = ((($2)) + 2|0);\n HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=0>>8;\n $4 = ((($2)) + 4|0);\n HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=0>>8;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 272|0);\n __ZN6laszip6models10arithmeticD2Ev($3);\n $4 = ((($2)) + 228|0);\n __ZN6laszip6models10arithmeticD2Ev($4);\n $5 = ((($2)) + 184|0);\n __ZN6laszip6models10arithmeticD2Ev($5);\n $6 = ((($2)) + 140|0);\n __ZN6laszip6models10arithmeticD2Ev($6);\n $7 = ((($2)) + 96|0);\n __ZN6laszip6models10arithmeticD2Ev($7);\n $8 = ((($2)) + 52|0);\n __ZN6laszip6models10arithmeticD2Ev($8);\n $9 = ((($2)) + 8|0);\n __ZN6laszip6models10arithmeticD2Ev($9);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;\n var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;\n var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;\n var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;\n var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;\n var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;\n var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0;\n var $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $7 = sp + 32|0;\n $11 = sp + 24|0;\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $12 = $4;\n $13 = HEAP8[$12>>0]|0;\n $14 = $13&1;\n if (!($14)) {\n  HEAP8[$12>>0] = 1;\n  $15 = $5;\n  $16 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($15)|0);\n  $17 = $6;\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($16,$17,6);\n  $18 = $6;\n  __ZN6laszip7formats7packersINS0_3las3rgbEE6unpackEPKc($7,$18);\n  $19 = ((($12)) + 1|0);\n  ;HEAP8[$19>>0]=HEAP8[$7>>0]|0;HEAP8[$19+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$19+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$19+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$19+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$19+5>>0]=HEAP8[$7+5>>0]|0;\n  $20 = $6;\n  $21 = ((($20)) + 6|0);\n  $3 = $21;\n  $331 = $3;\n  STACKTOP = sp;return ($331|0);\n }\n $9 = 0;\n $22 = $5;\n $23 = ((($12)) + 8|0);\n $24 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($22,$23)|0);\n $10 = $24;\n __ZN6laszip7formats3las3rgbC2Ev($11);\n $25 = $10;\n $26 = $25 & 1;\n $27 = ($26|0)!=(0);\n if ($27) {\n  $28 = $5;\n  $29 = ((($12)) + 52|0);\n  $30 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($28,$29)|0);\n  $31 = $30&255;\n  $8 = $31;\n  $32 = $8;\n  $33 = $32&255;\n  $34 = ((($12)) + 1|0);\n  $35 = HEAPU8[$34>>0]|(HEAPU8[$34+1>>0]<<8);\n  $36 = $35&65535;\n  $37 = $36 & 255;\n  $38 = (($33) + ($37))|0;\n  $39 = (__Z7U8_FOLDi($38)|0);\n  $40 = $39&255;\n  HEAP8[$11>>0]=$40&255;HEAP8[$11+1>>0]=$40>>8;\n } else {\n  $41 = ((($12)) + 1|0);\n  $42 = HEAPU8[$41>>0]|(HEAPU8[$41+1>>0]<<8);\n  $43 = $42&65535;\n  $44 = $43 & 255;\n  $45 = $44&65535;\n  HEAP8[$11>>0]=$45&255;HEAP8[$11+1>>0]=$45>>8;\n }\n $46 = $10;\n $47 = $46 & 2;\n $48 = ($47|0)!=(0);\n if ($48) {\n  $49 = $5;\n  $50 = ((($12)) + 96|0);\n  $51 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($49,$50)|0);\n  $52 = $51&255;\n  $8 = $52;\n  $53 = $8;\n  $54 = $53&255;\n  $55 = ((($12)) + 1|0);\n  $56 = HEAPU8[$55>>0]|(HEAPU8[$55+1>>0]<<8);\n  $57 = $56&65535;\n  $58 = $57 >> 8;\n  $59 = (($54) + ($58))|0;\n  $60 = (__Z7U8_FOLDi($59)|0);\n  $61 = $60&255;\n  $62 = $61&65535;\n  $63 = $62 << 8;\n  $64 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n  $65 = $64&65535;\n  $66 = $65 | $63;\n  $67 = $66&65535;\n  HEAP8[$11>>0]=$67&255;HEAP8[$11+1>>0]=$67>>8;\n } else {\n  $68 = ((($12)) + 1|0);\n  $69 = HEAPU8[$68>>0]|(HEAPU8[$68+1>>0]<<8);\n  $70 = $69&65535;\n  $71 = $70 & 65280;\n  $72 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n  $73 = $72&65535;\n  $74 = $73 | $71;\n  $75 = $74&65535;\n  HEAP8[$11>>0]=$75&255;HEAP8[$11+1>>0]=$75>>8;\n }\n $76 = $10;\n $77 = $76 & 64;\n $78 = ($77|0)!=(0);\n $79 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n do {\n  if ($78) {\n   $80 = $79&65535;\n   $81 = $80 & 255;\n   $82 = ((($12)) + 1|0);\n   $83 = HEAPU8[$82>>0]|(HEAPU8[$82+1>>0]<<8);\n   $84 = $83&65535;\n   $85 = $84 & 255;\n   $86 = (($81) - ($85))|0;\n   $9 = $86;\n   $87 = $10;\n   $88 = $87 & 4;\n   $89 = ($88|0)!=(0);\n   if ($89) {\n    $90 = $5;\n    $91 = ((($12)) + 140|0);\n    $92 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($90,$91)|0);\n    $93 = $92&255;\n    $8 = $93;\n    $94 = $8;\n    $95 = $94&255;\n    $96 = $9;\n    $97 = ((($12)) + 1|0);\n    $98 = ((($97)) + 2|0);\n    $99 = HEAPU8[$98>>0]|(HEAPU8[$98+1>>0]<<8);\n    $100 = $99&65535;\n    $101 = $100 & 255;\n    $102 = (($96) + ($101))|0;\n    $103 = ($102|0)<=(0);\n    if ($103) {\n     $121 = 0;\n    } else {\n     $104 = $9;\n     $105 = ((($12)) + 1|0);\n     $106 = ((($105)) + 2|0);\n     $107 = HEAPU8[$106>>0]|(HEAPU8[$106+1>>0]<<8);\n     $108 = $107&65535;\n     $109 = $108 & 255;\n     $110 = (($104) + ($109))|0;\n     $111 = ($110|0)>=(255);\n     if ($111) {\n      $121 = -1;\n     } else {\n      $112 = $9;\n      $113 = ((($12)) + 1|0);\n      $114 = ((($113)) + 2|0);\n      $115 = HEAPU8[$114>>0]|(HEAPU8[$114+1>>0]<<8);\n      $116 = $115&65535;\n      $117 = $116 & 255;\n      $118 = (($112) + ($117))|0;\n      $119 = $118&255;\n      $121 = $119;\n     }\n    }\n    $120 = $121&255;\n    $122 = (($95) + ($120))|0;\n    $123 = (__Z7U8_FOLDi($122)|0);\n    $124 = $123&255;\n    $125 = ((($11)) + 2|0);\n    HEAP8[$125>>0]=$124&255;HEAP8[$125+1>>0]=$124>>8;\n   } else {\n    $126 = ((($12)) + 1|0);\n    $127 = ((($126)) + 2|0);\n    $128 = HEAPU8[$127>>0]|(HEAPU8[$127+1>>0]<<8);\n    $129 = $128&65535;\n    $130 = $129 & 255;\n    $131 = $130&65535;\n    $132 = ((($11)) + 2|0);\n    HEAP8[$132>>0]=$131&255;HEAP8[$132+1>>0]=$131>>8;\n   }\n   $133 = $10;\n   $134 = $133 & 16;\n   $135 = ($134|0)!=(0);\n   if ($135) {\n    $136 = $5;\n    $137 = ((($12)) + 228|0);\n    $138 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($136,$137)|0);\n    $139 = $138&255;\n    $8 = $139;\n    $140 = $9;\n    $141 = ((($11)) + 2|0);\n    $142 = HEAPU8[$141>>0]|(HEAPU8[$141+1>>0]<<8);\n    $143 = $142&65535;\n    $144 = $143 & 255;\n    $145 = (($140) + ($144))|0;\n    $146 = ((($12)) + 1|0);\n    $147 = ((($146)) + 2|0);\n    $148 = HEAPU8[$147>>0]|(HEAPU8[$147+1>>0]<<8);\n    $149 = $148&65535;\n    $150 = $149 & 255;\n    $151 = (($145) - ($150))|0;\n    $152 = (($151|0) / 2)&-1;\n    $9 = $152;\n    $153 = $8;\n    $154 = $153&255;\n    $155 = $9;\n    $156 = ((($12)) + 1|0);\n    $157 = ((($156)) + 4|0);\n    $158 = HEAPU8[$157>>0]|(HEAPU8[$157+1>>0]<<8);\n    $159 = $158&65535;\n    $160 = $159 & 255;\n    $161 = (($155) + ($160))|0;\n    $162 = ($161|0)<=(0);\n    if ($162) {\n     $180 = 0;\n    } else {\n     $163 = $9;\n     $164 = ((($12)) + 1|0);\n     $165 = ((($164)) + 4|0);\n     $166 = HEAPU8[$165>>0]|(HEAPU8[$165+1>>0]<<8);\n     $167 = $166&65535;\n     $168 = $167 & 255;\n     $169 = (($163) + ($168))|0;\n     $170 = ($169|0)>=(255);\n     if ($170) {\n      $180 = -1;\n     } else {\n      $171 = $9;\n      $172 = ((($12)) + 1|0);\n      $173 = ((($172)) + 4|0);\n      $174 = HEAPU8[$173>>0]|(HEAPU8[$173+1>>0]<<8);\n      $175 = $174&65535;\n      $176 = $175 & 255;\n      $177 = (($171) + ($176))|0;\n      $178 = $177&255;\n      $180 = $178;\n     }\n    }\n    $179 = $180&255;\n    $181 = (($154) + ($179))|0;\n    $182 = (__Z7U8_FOLDi($181)|0);\n    $183 = $182&255;\n    $184 = ((($11)) + 4|0);\n    HEAP8[$184>>0]=$183&255;HEAP8[$184+1>>0]=$183>>8;\n   } else {\n    $185 = ((($12)) + 1|0);\n    $186 = ((($185)) + 4|0);\n    $187 = HEAPU8[$186>>0]|(HEAPU8[$186+1>>0]<<8);\n    $188 = $187&65535;\n    $189 = $188 & 255;\n    $190 = $189&65535;\n    $191 = ((($11)) + 4|0);\n    HEAP8[$191>>0]=$190&255;HEAP8[$191+1>>0]=$190>>8;\n   }\n   $192 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n   $193 = $192&65535;\n   $194 = $193 >> 8;\n   $195 = ((($12)) + 1|0);\n   $196 = HEAPU8[$195>>0]|(HEAPU8[$195+1>>0]<<8);\n   $197 = $196&65535;\n   $198 = $197 >> 8;\n   $199 = (($194) - ($198))|0;\n   $9 = $199;\n   $200 = $10;\n   $201 = $200 & 8;\n   $202 = ($201|0)!=(0);\n   if ($202) {\n    $203 = $5;\n    $204 = ((($12)) + 184|0);\n    $205 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($203,$204)|0);\n    $206 = $205&255;\n    $8 = $206;\n    $207 = $8;\n    $208 = $207&255;\n    $209 = $9;\n    $210 = ((($12)) + 1|0);\n    $211 = ((($210)) + 2|0);\n    $212 = HEAPU8[$211>>0]|(HEAPU8[$211+1>>0]<<8);\n    $213 = $212&65535;\n    $214 = $213 >> 8;\n    $215 = (($209) + ($214))|0;\n    $216 = ($215|0)<=(0);\n    if ($216) {\n     $234 = 0;\n    } else {\n     $217 = $9;\n     $218 = ((($12)) + 1|0);\n     $219 = ((($218)) + 2|0);\n     $220 = HEAPU8[$219>>0]|(HEAPU8[$219+1>>0]<<8);\n     $221 = $220&65535;\n     $222 = $221 >> 8;\n     $223 = (($217) + ($222))|0;\n     $224 = ($223|0)>=(255);\n     if ($224) {\n      $234 = -1;\n     } else {\n      $225 = $9;\n      $226 = ((($12)) + 1|0);\n      $227 = ((($226)) + 2|0);\n      $228 = HEAPU8[$227>>0]|(HEAPU8[$227+1>>0]<<8);\n      $229 = $228&65535;\n      $230 = $229 >> 8;\n      $231 = (($225) + ($230))|0;\n      $232 = $231&255;\n      $234 = $232;\n     }\n    }\n    $233 = $234&255;\n    $235 = (($208) + ($233))|0;\n    $236 = (__Z7U8_FOLDi($235)|0);\n    $237 = $236&255;\n    $238 = $237&65535;\n    $239 = $238 << 8;\n    $240 = ((($11)) + 2|0);\n    $241 = HEAPU8[$240>>0]|(HEAPU8[$240+1>>0]<<8);\n    $242 = $241&65535;\n    $243 = $242 | $239;\n    $244 = $243&65535;\n    HEAP8[$240>>0]=$244&255;HEAP8[$240+1>>0]=$244>>8;\n   } else {\n    $245 = ((($12)) + 1|0);\n    $246 = ((($245)) + 2|0);\n    $247 = HEAPU8[$246>>0]|(HEAPU8[$246+1>>0]<<8);\n    $248 = $247&65535;\n    $249 = $248 & 65280;\n    $250 = ((($11)) + 2|0);\n    $251 = HEAPU8[$250>>0]|(HEAPU8[$250+1>>0]<<8);\n    $252 = $251&65535;\n    $253 = $252 | $249;\n    $254 = $253&65535;\n    HEAP8[$250>>0]=$254&255;HEAP8[$250+1>>0]=$254>>8;\n   }\n   $255 = $10;\n   $256 = $255 & 32;\n   $257 = ($256|0)!=(0);\n   if (!($257)) {\n    $313 = ((($12)) + 1|0);\n    $314 = ((($313)) + 4|0);\n    $315 = HEAPU8[$314>>0]|(HEAPU8[$314+1>>0]<<8);\n    $316 = $315&65535;\n    $317 = $316 & 65280;\n    $318 = ((($11)) + 4|0);\n    $319 = HEAPU8[$318>>0]|(HEAPU8[$318+1>>0]<<8);\n    $320 = $319&65535;\n    $321 = $320 | $317;\n    $322 = $321&65535;\n    HEAP8[$318>>0]=$322&255;HEAP8[$318+1>>0]=$322>>8;\n    break;\n   }\n   $258 = $5;\n   $259 = ((($12)) + 272|0);\n   $260 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($258,$259)|0);\n   $261 = $260&255;\n   $8 = $261;\n   $262 = $9;\n   $263 = ((($11)) + 2|0);\n   $264 = HEAPU8[$263>>0]|(HEAPU8[$263+1>>0]<<8);\n   $265 = $264&65535;\n   $266 = $265 >> 8;\n   $267 = (($262) + ($266))|0;\n   $268 = ((($12)) + 1|0);\n   $269 = ((($268)) + 2|0);\n   $270 = HEAPU8[$269>>0]|(HEAPU8[$269+1>>0]<<8);\n   $271 = $270&65535;\n   $272 = $271 >> 8;\n   $273 = (($267) - ($272))|0;\n   $274 = (($273|0) / 2)&-1;\n   $9 = $274;\n   $275 = $8;\n   $276 = $275&255;\n   $277 = $9;\n   $278 = ((($12)) + 1|0);\n   $279 = ((($278)) + 4|0);\n   $280 = HEAPU8[$279>>0]|(HEAPU8[$279+1>>0]<<8);\n   $281 = $280&65535;\n   $282 = $281 >> 8;\n   $283 = (($277) + ($282))|0;\n   $284 = ($283|0)<=(0);\n   if ($284) {\n    $302 = 0;\n   } else {\n    $285 = $9;\n    $286 = ((($12)) + 1|0);\n    $287 = ((($286)) + 4|0);\n    $288 = HEAPU8[$287>>0]|(HEAPU8[$287+1>>0]<<8);\n    $289 = $288&65535;\n    $290 = $289 >> 8;\n    $291 = (($285) + ($290))|0;\n    $292 = ($291|0)>=(255);\n    if ($292) {\n     $302 = -1;\n    } else {\n     $293 = $9;\n     $294 = ((($12)) + 1|0);\n     $295 = ((($294)) + 4|0);\n     $296 = HEAPU8[$295>>0]|(HEAPU8[$295+1>>0]<<8);\n     $297 = $296&65535;\n     $298 = $297 >> 8;\n     $299 = (($293) + ($298))|0;\n     $300 = $299&255;\n     $302 = $300;\n    }\n   }\n   $301 = $302&255;\n   $303 = (($276) + ($301))|0;\n   $304 = (__Z7U8_FOLDi($303)|0);\n   $305 = $304&255;\n   $306 = $305&65535;\n   $307 = $306 << 8;\n   $308 = ((($11)) + 4|0);\n   $309 = HEAPU8[$308>>0]|(HEAPU8[$308+1>>0]<<8);\n   $310 = $309&65535;\n   $311 = $310 | $307;\n   $312 = $311&65535;\n   HEAP8[$308>>0]=$312&255;HEAP8[$308+1>>0]=$312>>8;\n  } else {\n   $323 = ((($11)) + 2|0);\n   HEAP8[$323>>0]=$79&255;HEAP8[$323+1>>0]=$79>>8;\n   $324 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n   $325 = ((($11)) + 4|0);\n   HEAP8[$325>>0]=$324&255;HEAP8[$325+1>>0]=$324>>8;\n  }\n } while(0);\n $326 = ((($12)) + 1|0);\n ;HEAP8[$326>>0]=HEAP8[$11>>0]|0;HEAP8[$326+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$326+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$326+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$326+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$326+5>>0]=HEAP8[$11+5>>0]|0;\n $327 = ((($12)) + 1|0);\n $328 = $6;\n __ZN6laszip7formats7packersINS0_3las3rgbEE4packERKS3_Pc($327,$328);\n $329 = $6;\n $330 = ((($329)) + 6|0);\n $3 = $330;\n $331 = $3;\n STACKTOP = sp;return ($331|0);\n}\nfunction __ZN6laszip7formats7packersINS0_3las3rgbEE6unpackEPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $1;\n $3 = $2;\n $4 = (__ZN6laszip7formats7packersItE6unpackEPKc($3)|0);\n $5 = $2;\n $6 = ((($5)) + 2|0);\n $7 = (__ZN6laszip7formats7packersItE6unpackEPKc($6)|0);\n $8 = $2;\n $9 = ((($8)) + 4|0);\n $10 = (__ZN6laszip7formats7packersItE6unpackEPKc($9)|0);\n __ZN6laszip7formats3las3rgbC2Ettt($0,$4,$7,$10);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersINS0_3las3rgbEE4packERKS3_Pc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = HEAPU8[$4>>0]|(HEAPU8[$4+1>>0]<<8);\n $6 = $3;\n __ZN6laszip7formats7packersItE4packEtPc($5,$6);\n $7 = $2;\n $8 = ((($7)) + 2|0);\n $9 = HEAPU8[$8>>0]|(HEAPU8[$8+1>>0]<<8);\n $10 = $3;\n $11 = ((($10)) + 2|0);\n __ZN6laszip7formats7packersItE4packEtPc($9,$11);\n $12 = $2;\n $13 = ((($12)) + 4|0);\n $14 = HEAPU8[$13>>0]|(HEAPU8[$13+1>>0]<<8);\n $15 = $3;\n $16 = ((($15)) + 4|0);\n __ZN6laszip7formats7packersItE4packEtPc($14,$16);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats3las3rgbC2Ettt($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $7 = $3;\n $8 = $4;\n $9 = $5;\n HEAP8[$8>>0]=$9&255;HEAP8[$8+1>>0]=$9>>8;\n $10 = ((($8)) + 2|0);\n $11 = $6;\n HEAP8[$10>>0]=$11&255;HEAP8[$10+1>>0]=$11>>8;\n $12 = ((($8)) + 4|0);\n $13 = $7;\n HEAP8[$12>>0]=$13&255;HEAP8[$12+1>>0]=$13>>8;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 440;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEEC2ERS9_RKSF_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n __ZN6laszip7formats10base_fieldC2Ev($6);\n HEAP32[$6>>2] = (2204);\n $7 = ((($6)) + 4|0);\n $8 = $4;\n HEAP32[$7>>2] = $8;\n $9 = ((($6)) + 8|0);\n $10 = $5;\n __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2ERKS6_($9,$10);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2228);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2ERKS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP8[$4+4>>0]=HEAP8[$5+4>>0]|0;\n $6 = ((($4)) + 8|0);\n $7 = $3;\n $8 = ((($7)) + 8|0);\n __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($6,$8);\n $9 = ((($4)) + 20|0);\n $10 = $3;\n $11 = ((($10)) + 20|0);\n __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($9,$11);\n $12 = ((($4)) + 32|0);\n $13 = $3;\n $14 = ((($13)) + 32|0);\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2ERKS6_($12,$14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2204);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);\n $17 = sp + 36|0;\n $19 = sp;\n $21 = sp + 101|0;\n $27 = sp + 100|0;\n $25 = $0;\n $26 = $1;\n $29 = $25;\n $30 = $26;\n $24 = $30;\n $31 = $24;\n $32 = ((($31)) + 8|0);\n $23 = $32;\n $33 = $23;\n $22 = $33;\n $34 = $22;\n $20 = $34;\n $35 = $20;\n ;HEAP8[$19>>0]=HEAP8[$21>>0]|0;\n $18 = $35;\n $15 = $29;\n $16 = $27;\n $36 = $15;\n $14 = $36;\n HEAP32[$36>>2] = 0;\n $37 = ((($36)) + 4|0);\n HEAP32[$37>>2] = 0;\n $38 = ((($36)) + 8|0);\n HEAP32[$17>>2] = 0;\n $39 = $16;\n $11 = $38;\n $12 = $17;\n $13 = $39;\n $40 = $11;\n $41 = $12;\n $10 = $41;\n $42 = $10;\n $4 = $40;\n $5 = $42;\n $43 = $4;\n $44 = $5;\n $3 = $44;\n HEAP32[$43>>2] = 0;\n $45 = $13;\n $6 = $45;\n $46 = $6;\n $8 = $40;\n $9 = $46;\n $47 = $9;\n $7 = $47;\n $48 = $26;\n $2 = $48;\n $49 = $2;\n $50 = ((($49)) + 4|0);\n $51 = HEAP32[$50>>2]|0;\n $52 = HEAP32[$49>>2]|0;\n $53 = $51;\n $54 = $52;\n $55 = (($53) - ($54))|0;\n $28 = $55;\n $56 = $28;\n $57 = ($56>>>0)>(0);\n if (!($57)) {\n  STACKTOP = sp;return;\n }\n $58 = $28;\n __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($29,$58);\n $59 = $26;\n $60 = HEAP32[$59>>2]|0;\n $61 = $26;\n $62 = ((($61)) + 4|0);\n $63 = HEAP32[$62>>2]|0;\n $64 = $28;\n __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endIPhEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES7_S7_j($29,$60,$63,$64);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2ERKS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $$byval_copy1 = sp + 192|0;\n $$byval_copy = sp + 184|0;\n $28 = sp + 72|0;\n $33 = sp + 202|0;\n $34 = sp + 52|0;\n $36 = sp;\n $38 = sp + 201|0;\n $44 = sp + 200|0;\n $45 = sp + 16|0;\n $46 = sp + 8|0;\n $42 = $0;\n $43 = $1;\n $47 = $42;\n $48 = $43;\n $41 = $48;\n $49 = $41;\n $50 = ((($49)) + 20|0);\n $40 = $50;\n $51 = $40;\n $39 = $51;\n $52 = $39;\n $37 = $52;\n $53 = $37;\n ;HEAP8[$36>>0]=HEAP8[$38>>0]|0;\n $35 = $53;\n $31 = $47;\n $32 = $44;\n $54 = $31;\n $55 = $32;\n $29 = $33;\n $30 = $55;\n $26 = $54;\n $27 = $33;\n $56 = $26;\n HEAP32[$56>>2] = 0;\n $57 = ((($56)) + 4|0);\n HEAP32[$57>>2] = 0;\n $58 = ((($56)) + 8|0);\n HEAP32[$58>>2] = 0;\n $59 = ((($56)) + 12|0);\n HEAP32[$28>>2] = 0;\n $60 = $27;\n $23 = $59;\n $24 = $28;\n $25 = $60;\n $61 = $23;\n $62 = $24;\n $22 = $62;\n $63 = $22;\n $16 = $61;\n $17 = $63;\n $64 = $16;\n $65 = $17;\n $15 = $65;\n HEAP32[$64>>2] = 0;\n $66 = $25;\n $18 = $66;\n $67 = $18;\n $20 = $61;\n $21 = $67;\n $68 = $21;\n $19 = $68;\n $69 = ((($54)) + 16|0);\n HEAP32[$69>>2] = 0;\n $70 = ((($54)) + 20|0);\n HEAP32[$34>>2] = 0;\n $71 = $32;\n $12 = $70;\n $13 = $34;\n $14 = $71;\n $72 = $12;\n $73 = $13;\n $11 = $73;\n $74 = $11;\n $5 = $72;\n $6 = $74;\n $75 = $5;\n $76 = $6;\n $4 = $76;\n $77 = $4;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = $14;\n $7 = $79;\n $80 = $7;\n $9 = $72;\n $10 = $80;\n $81 = $10;\n $8 = $81;\n $82 = $43;\n $2 = $82;\n $83 = $2;\n __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($45,$83);\n $84 = $43;\n $3 = $84;\n $85 = $3;\n __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($46,$85);\n ;HEAP32[$$byval_copy>>2]=HEAP32[$45>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$45+4>>2]|0;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$46>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$46+4>>2]|0;\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendINS_16__deque_iteratorIS3_PKS3_RS9_PKSA_iLi0EEEEEvT_SF_PNS_9enable_ifIXsr21__is_forward_iteratorISF_EE5valueEvE4typeE($47,$$byval_copy,$$byval_copy1,0);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseIhNS_9allocatorIhEEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;\n var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;\n var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0;\n var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0;\n var $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $40 = $0;\n $41 = $1;\n $42 = $40;\n $43 = $41;\n $44 = (__ZNKSt3__26vectorIhNS_9allocatorIhEEE8max_sizeEv($42)|0);\n $45 = ($43>>>0)>($44>>>0);\n if ($45) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($42);\n  // unreachable;\n } else {\n  $39 = $42;\n  $46 = $39;\n  $47 = ((($46)) + 8|0);\n  $38 = $47;\n  $48 = $38;\n  $37 = $48;\n  $49 = $37;\n  $50 = $41;\n  $7 = $49;\n  $8 = $50;\n  $51 = $7;\n  $52 = $8;\n  $4 = $51;\n  $5 = $52;\n  $6 = 0;\n  $53 = $4;\n  $3 = $53;\n  $54 = $5;\n  $2 = $54;\n  $55 = $2;\n  $56 = (__Znwj($55)|0);\n  $57 = ((($42)) + 4|0);\n  HEAP32[$57>>2] = $56;\n  HEAP32[$42>>2] = $56;\n  $58 = HEAP32[$42>>2]|0;\n  $59 = $41;\n  $60 = (($58) + ($59)|0);\n  $11 = $42;\n  $61 = $11;\n  $62 = ((($61)) + 8|0);\n  $10 = $62;\n  $63 = $10;\n  $9 = $63;\n  $64 = $9;\n  HEAP32[$64>>2] = $60;\n  $35 = $42;\n  $36 = 0;\n  $65 = $35;\n  $34 = $65;\n  $66 = $34;\n  $67 = HEAP32[$66>>2]|0;\n  $33 = $67;\n  $68 = $33;\n  $13 = $65;\n  $69 = $13;\n  $70 = HEAP32[$69>>2]|0;\n  $12 = $70;\n  $71 = $12;\n  $18 = $65;\n  $72 = $18;\n  $17 = $72;\n  $73 = $17;\n  $16 = $73;\n  $74 = $16;\n  $75 = ((($74)) + 8|0);\n  $15 = $75;\n  $76 = $15;\n  $14 = $76;\n  $77 = $14;\n  $78 = HEAP32[$77>>2]|0;\n  $79 = HEAP32[$73>>2]|0;\n  $80 = $78;\n  $81 = $79;\n  $82 = (($80) - ($81))|0;\n  $83 = (($71) + ($82)|0);\n  $20 = $65;\n  $84 = $20;\n  $85 = HEAP32[$84>>2]|0;\n  $19 = $85;\n  $86 = $19;\n  $25 = $65;\n  $87 = $25;\n  $24 = $87;\n  $88 = $24;\n  $23 = $88;\n  $89 = $23;\n  $90 = ((($89)) + 8|0);\n  $22 = $90;\n  $91 = $22;\n  $21 = $91;\n  $92 = $21;\n  $93 = HEAP32[$92>>2]|0;\n  $94 = HEAP32[$88>>2]|0;\n  $95 = $93;\n  $96 = $94;\n  $97 = (($95) - ($96))|0;\n  $98 = (($86) + ($97)|0);\n  $27 = $65;\n  $99 = $27;\n  $100 = HEAP32[$99>>2]|0;\n  $26 = $100;\n  $101 = $26;\n  $102 = $36;\n  $103 = (($101) + ($102)|0);\n  $28 = $65;\n  $29 = $68;\n  $30 = $83;\n  $31 = $98;\n  $32 = $103;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endIPhEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES7_S7_j($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $21 = sp + 68|0;\n $16 = $0;\n $17 = $1;\n $18 = $2;\n $19 = $3;\n $22 = $16;\n $15 = $22;\n $23 = $15;\n $24 = ((($23)) + 8|0);\n $14 = $24;\n $25 = $14;\n $13 = $25;\n $26 = $13;\n $20 = $26;\n $27 = $19;\n $4 = $21;\n $5 = $22;\n $6 = $27;\n $28 = $20;\n $29 = $17;\n $30 = $18;\n $31 = ((($22)) + 4|0);\n $7 = $28;\n $8 = $29;\n $9 = $30;\n $10 = $31;\n $32 = $9;\n $33 = $8;\n $34 = $32;\n $35 = $33;\n $36 = (($34) - ($35))|0;\n $11 = $36;\n $37 = $11;\n $38 = ($37|0)>(0);\n if (!($38)) {\n  $12 = $21;\n  STACKTOP = sp;return;\n }\n $39 = $10;\n $40 = HEAP32[$39>>2]|0;\n $41 = $8;\n $42 = $11;\n _memcpy(($40|0),($41|0),($42|0))|0;\n $43 = $11;\n $44 = $10;\n $45 = HEAP32[$44>>2]|0;\n $46 = (($45) + ($43)|0);\n HEAP32[$44>>2] = $46;\n $12 = $21;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseIhNS_9allocatorIhEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -1|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n }\n $54 = $28;\n $55 = ((($37)) + 4|0);\n HEAP32[$55>>2] = $54;\n $7 = $32;\n $56 = $7;\n $57 = ((($56)) + 8|0);\n $6 = $57;\n $58 = $6;\n $5 = $58;\n $59 = $5;\n $60 = HEAP32[$32>>2]|0;\n $4 = $32;\n $61 = $4;\n $3 = $61;\n $62 = $3;\n $63 = ((($62)) + 8|0);\n $2 = $63;\n $64 = $2;\n $1 = $64;\n $65 = $1;\n $66 = HEAP32[$65>>2]|0;\n $67 = HEAP32[$61>>2]|0;\n $68 = $66;\n $69 = $67;\n $70 = (($68) - ($69))|0;\n $12 = $59;\n $13 = $60;\n $14 = $70;\n $71 = $12;\n $72 = $13;\n $73 = $14;\n $9 = $71;\n $10 = $72;\n $11 = $73;\n $74 = $10;\n $8 = $74;\n $75 = $8;\n __ZdlPv($75);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorIhNS_9allocatorIhEEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = -1;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendINS_16__deque_iteratorIS3_PKS3_RS9_PKSA_iLi0EEEEEvT_SF_PNS_9enable_ifIXsr21__is_forward_iteratorISF_EE5valueEvE4typeE($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;\n var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0;\n var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;\n var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;\n var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;\n var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);\n $29 = sp + 40|0;\n $34 = sp + 277|0;\n $47 = sp + 32|0;\n $48 = sp + 24|0;\n $49 = sp + 16|0;\n $50 = sp + 104|0;\n $51 = sp + 96|0;\n $52 = sp + 276|0;\n $53 = sp + 8|0;\n $54 = sp;\n $58 = sp + 72|0;\n $59 = sp + 64|0;\n $62 = sp + 48|0;\n $55 = $0;\n $56 = $3;\n $63 = $55;\n ;HEAP32[$58>>2]=HEAP32[$1>>2]|0;HEAP32[$58+4>>2]=HEAP32[$1+4>>2]|0;\n ;HEAP32[$59>>2]=HEAP32[$2>>2]|0;HEAP32[$59+4>>2]=HEAP32[$2+4>>2]|0;\n ;HEAP8[$53>>0]=HEAP8[$59>>0]|0;HEAP8[$53+1>>0]=HEAP8[$59+1>>0]|0;HEAP8[$53+2>>0]=HEAP8[$59+2>>0]|0;HEAP8[$53+3>>0]=HEAP8[$59+3>>0]|0;HEAP8[$53+4>>0]=HEAP8[$59+4>>0]|0;HEAP8[$53+5>>0]=HEAP8[$59+5>>0]|0;HEAP8[$53+6>>0]=HEAP8[$59+6>>0]|0;HEAP8[$53+7>>0]=HEAP8[$59+7>>0]|0;\n ;HEAP8[$54>>0]=HEAP8[$58>>0]|0;HEAP8[$54+1>>0]=HEAP8[$58+1>>0]|0;HEAP8[$54+2>>0]=HEAP8[$58+2>>0]|0;HEAP8[$54+3>>0]=HEAP8[$58+3>>0]|0;HEAP8[$54+4>>0]=HEAP8[$58+4>>0]|0;HEAP8[$54+5>>0]=HEAP8[$58+5>>0]|0;HEAP8[$54+6>>0]=HEAP8[$58+6>>0]|0;HEAP8[$54+7>>0]=HEAP8[$58+7>>0]|0;\n ;HEAP32[$50>>2]=HEAP32[$54>>2]|0;HEAP32[$50+4>>2]=HEAP32[$54+4>>2]|0;\n ;HEAP32[$51>>2]=HEAP32[$53>>2]|0;HEAP32[$51+4>>2]=HEAP32[$53+4>>2]|0;\n ;HEAP8[$47>>0]=HEAP8[$52>>0]|0;\n ;HEAP8[$48>>0]=HEAP8[$51>>0]|0;HEAP8[$48+1>>0]=HEAP8[$51+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$51+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$51+3>>0]|0;HEAP8[$48+4>>0]=HEAP8[$51+4>>0]|0;HEAP8[$48+5>>0]=HEAP8[$51+5>>0]|0;HEAP8[$48+6>>0]=HEAP8[$51+6>>0]|0;HEAP8[$48+7>>0]=HEAP8[$51+7>>0]|0;\n ;HEAP8[$49>>0]=HEAP8[$50>>0]|0;HEAP8[$49+1>>0]=HEAP8[$50+1>>0]|0;HEAP8[$49+2>>0]=HEAP8[$50+2>>0]|0;HEAP8[$49+3>>0]=HEAP8[$50+3>>0]|0;HEAP8[$49+4>>0]=HEAP8[$50+4>>0]|0;HEAP8[$49+5>>0]=HEAP8[$50+5>>0]|0;HEAP8[$49+6>>0]=HEAP8[$50+6>>0]|0;HEAP8[$49+7>>0]=HEAP8[$50+7>>0]|0;\n $45 = $48;\n $46 = $49;\n $64 = $45;\n $65 = $46;\n $42 = $64;\n $43 = $65;\n $66 = $42;\n $67 = $43;\n $40 = $66;\n $41 = $67;\n $68 = $40;\n $69 = ((($68)) + 4|0);\n $70 = HEAP32[$69>>2]|0;\n $71 = $41;\n $72 = ((($71)) + 4|0);\n $73 = HEAP32[$72>>2]|0;\n $74 = ($70|0)==($73|0);\n $75 = $74 ^ 1;\n if ($75) {\n  $76 = $45;\n  $77 = HEAP32[$76>>2]|0;\n  $78 = $46;\n  $79 = HEAP32[$78>>2]|0;\n  $80 = $77;\n  $81 = $79;\n  $82 = (($80) - ($81))|0;\n  $83 = (($82|0) / 4)&-1;\n  $84 = ($83*93)|0;\n  $85 = $45;\n  $86 = ((($85)) + 4|0);\n  $87 = HEAP32[$86>>2]|0;\n  $88 = $45;\n  $89 = HEAP32[$88>>2]|0;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = $87;\n  $92 = $90;\n  $93 = (($91) - ($92))|0;\n  $94 = (($93|0) / 44)&-1;\n  $95 = (($84) + ($94))|0;\n  $96 = $46;\n  $97 = ((($96)) + 4|0);\n  $98 = HEAP32[$97>>2]|0;\n  $99 = $46;\n  $100 = HEAP32[$99>>2]|0;\n  $101 = HEAP32[$100>>2]|0;\n  $102 = $98;\n  $103 = $101;\n  $104 = (($102) - ($103))|0;\n  $105 = (($104|0) / 44)&-1;\n  $106 = (($95) - ($105))|0;\n  $44 = $106;\n } else {\n  $44 = 0;\n }\n $107 = $44;\n $57 = $107;\n $20 = $63;\n $108 = $20;\n $109 = ((($108)) + 20|0);\n $19 = $109;\n $110 = $19;\n $18 = $110;\n $111 = $18;\n $60 = $111;\n $10 = $63;\n $112 = $10;\n $9 = $112;\n $113 = $9;\n $8 = $113;\n $114 = $8;\n $115 = ((($114)) + 8|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = ((($114)) + 4|0);\n $118 = HEAP32[$117>>2]|0;\n $119 = $116;\n $120 = $118;\n $121 = (($119) - ($120))|0;\n $122 = (($121|0) / 4)&-1;\n $123 = ($122|0)==(0);\n if ($123) {\n  $144 = 0;\n } else {\n  $7 = $113;\n  $124 = $7;\n  $125 = ((($124)) + 8|0);\n  $126 = HEAP32[$125>>2]|0;\n  $127 = ((($124)) + 4|0);\n  $128 = HEAP32[$127>>2]|0;\n  $129 = $126;\n  $130 = $128;\n  $131 = (($129) - ($130))|0;\n  $132 = (($131|0) / 4)&-1;\n  $133 = ($132*93)|0;\n  $134 = (($133) - 1)|0;\n  $144 = $134;\n }\n $135 = ((($112)) + 16|0);\n $136 = HEAP32[$135>>2]|0;\n $6 = $112;\n $137 = $6;\n $138 = ((($137)) + 20|0);\n $5 = $138;\n $139 = $5;\n $4 = $139;\n $140 = $4;\n $141 = HEAP32[$140>>2]|0;\n $142 = (($136) + ($141))|0;\n $143 = (($144) - ($142))|0;\n $61 = $143;\n $145 = $57;\n $146 = $61;\n $147 = ($145>>>0)>($146>>>0);\n if ($147) {\n  $148 = $57;\n  $149 = $61;\n  $150 = (($148) - ($149))|0;\n  __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($63,$150);\n }\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($62,$63);\n while(1) {\n  $13 = $1;\n  $14 = $2;\n  $151 = $13;\n  $152 = $14;\n  $11 = $151;\n  $12 = $152;\n  $153 = $11;\n  $154 = ((($153)) + 4|0);\n  $155 = HEAP32[$154>>2]|0;\n  $156 = $12;\n  $157 = ((($156)) + 4|0);\n  $158 = HEAP32[$157>>2]|0;\n  $159 = ($155|0)==($158|0);\n  $160 = $159 ^ 1;\n  if (!($160)) {\n   break;\n  }\n  $161 = $60;\n  $15 = $62;\n  $162 = $15;\n  $163 = ((($162)) + 4|0);\n  $164 = HEAP32[$163>>2]|0;\n  $16 = $164;\n  $165 = $16;\n  $17 = $1;\n  $166 = $17;\n  $167 = ((($166)) + 4|0);\n  $168 = HEAP32[$167>>2]|0;\n  $31 = $161;\n  $32 = $165;\n  $33 = $168;\n  $169 = $31;\n  $170 = $32;\n  $171 = $33;\n  $30 = $171;\n  $172 = $30;\n  ;HEAP8[$29>>0]=HEAP8[$34>>0]|0;\n  $26 = $169;\n  $27 = $170;\n  $28 = $172;\n  $173 = $26;\n  $174 = $27;\n  $175 = $28;\n  $25 = $175;\n  $176 = $25;\n  $22 = $173;\n  $23 = $174;\n  $24 = $176;\n  $177 = $23;\n  $178 = $24;\n  $21 = $178;\n  $179 = $21;\n  __ZN6laszip6models10arithmeticC2ERKS1_($177,$179);\n  $35 = $62;\n  $180 = $35;\n  $181 = ((($180)) + 4|0);\n  $182 = HEAP32[$181>>2]|0;\n  $183 = ((($182)) + 44|0);\n  HEAP32[$181>>2] = $183;\n  $184 = HEAP32[$180>>2]|0;\n  $185 = HEAP32[$184>>2]|0;\n  $186 = $183;\n  $187 = $185;\n  $188 = (($186) - ($187))|0;\n  $189 = (($188|0) / 44)&-1;\n  $190 = ($189|0)==(93);\n  if ($190) {\n   $191 = HEAP32[$180>>2]|0;\n   $192 = ((($191)) + 4|0);\n   HEAP32[$180>>2] = $192;\n   $193 = HEAP32[$180>>2]|0;\n   $194 = HEAP32[$193>>2]|0;\n   $195 = ((($180)) + 4|0);\n   HEAP32[$195>>2] = $194;\n  }\n  $36 = $1;\n  $196 = $36;\n  $197 = ((($196)) + 4|0);\n  $198 = HEAP32[$197>>2]|0;\n  $199 = ((($198)) + 44|0);\n  HEAP32[$197>>2] = $199;\n  $200 = HEAP32[$196>>2]|0;\n  $201 = HEAP32[$200>>2]|0;\n  $202 = $199;\n  $203 = $201;\n  $204 = (($202) - ($203))|0;\n  $205 = (($204|0) / 44)&-1;\n  $206 = ($205|0)==(93);\n  if ($206) {\n   $207 = HEAP32[$196>>2]|0;\n   $208 = ((($207)) + 4|0);\n   HEAP32[$196>>2] = $208;\n   $209 = HEAP32[$196>>2]|0;\n   $210 = HEAP32[$209>>2]|0;\n   $211 = ((($196)) + 4|0);\n   HEAP32[$211>>2] = $210;\n  }\n  $39 = $63;\n  $212 = $39;\n  $213 = ((($212)) + 20|0);\n  $38 = $213;\n  $214 = $38;\n  $37 = $214;\n  $215 = $37;\n  $216 = HEAP32[$215>>2]|0;\n  $217 = (($216) + 1)|0;\n  HEAP32[$215>>2] = $217;\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $16 = $13;\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5clearEv($16);\n $12 = $16;\n $17 = $12;\n $18 = ((($17)) + 4|0);\n $19 = HEAP32[$18>>2]|0;\n $14 = $19;\n $11 = $16;\n $20 = $11;\n $21 = ((($20)) + 8|0);\n $22 = HEAP32[$21>>2]|0;\n $15 = $22;\n while(1) {\n  $23 = $14;\n  $24 = $15;\n  $25 = ($23|0)!=($24|0);\n  if (!($25)) {\n   break;\n  }\n  $10 = $16;\n  $26 = $10;\n  $27 = ((($26)) + 20|0);\n  $9 = $27;\n  $28 = $9;\n  $8 = $28;\n  $29 = $8;\n  $30 = $14;\n  $31 = HEAP32[$30>>2]|0;\n  $5 = $29;\n  $6 = $31;\n  $7 = 93;\n  $32 = $5;\n  $33 = $6;\n  $34 = $7;\n  $2 = $32;\n  $3 = $33;\n  $4 = $34;\n  $35 = $3;\n  $1 = $35;\n  $36 = $1;\n  __ZdlPv($36);\n  $37 = $14;\n  $38 = ((($37)) + 4|0);\n  $14 = $38;\n }\n __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEED2Ev($16);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $24 = $48;\n  $49 = $24;\n  $50 = ((($41)) + 8|0);\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($51)) + -4|0);\n  HEAP32[$50>>2] = $52;\n  $23 = $52;\n  $53 = $23;\n  $20 = $49;\n  $21 = $53;\n  $54 = $20;\n  $55 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $54;\n  $18 = $55;\n  $56 = $17;\n  $57 = $18;\n  $15 = $56;\n  $16 = $57;\n }\n $58 = HEAP32[$35>>2]|0;\n $59 = ($58|0)!=(0|0);\n if (!($59)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $60 = $14;\n $61 = ((($60)) + 12|0);\n $13 = $61;\n $62 = $13;\n $12 = $62;\n $63 = $12;\n $64 = HEAP32[$35>>2]|0;\n $4 = $35;\n $65 = $4;\n $3 = $65;\n $66 = $3;\n $67 = ((($66)) + 12|0);\n $2 = $67;\n $68 = $2;\n $1 = $68;\n $69 = $1;\n $70 = HEAP32[$69>>2]|0;\n $71 = HEAP32[$65>>2]|0;\n $72 = $70;\n $73 = $71;\n $74 = (($72) - ($73))|0;\n $75 = (($74|0) / 4)&-1;\n $9 = $63;\n $10 = $64;\n $11 = $75;\n $76 = $9;\n $77 = $10;\n $78 = $11;\n $6 = $76;\n $7 = $77;\n $8 = $78;\n $79 = $7;\n $5 = $79;\n $80 = $5;\n __ZdlPv($80);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0;\n var $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0;\n var $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0;\n var $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0;\n var $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0, $1083 = 0;\n var $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0, $1088 = 0, $1089 = 0, $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0, $1100 = 0;\n var $1101 = 0, $1102 = 0, $1103 = 0, $1104 = 0, $1105 = 0, $1106 = 0, $1107 = 0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0, $1119 = 0;\n var $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0, $1123 = 0, $1124 = 0, $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0, $1137 = 0;\n var $1138 = 0, $1139 = 0, $114 = 0, $1140 = 0, $1141 = 0, $1142 = 0, $1143 = 0, $1144 = 0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0, $1155 = 0;\n var $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0, $116 = 0, $1160 = 0, $1161 = 0, $1162 = 0, $1163 = 0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0, $1173 = 0;\n var $1174 = 0, $1175 = 0, $1176 = 0, $1177 = 0, $1178 = 0, $1179 = 0, $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0, $1191 = 0;\n var $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0, $1196 = 0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0, $1209 = 0;\n var $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0, $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0, $1226 = 0, $1227 = 0;\n var $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0, $1231 = 0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0, $1244 = 0, $1245 = 0;\n var $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0, $125 = 0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0;\n var $1264 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0;\n var $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0;\n var $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0;\n var $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0;\n var $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0;\n var $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0;\n var $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0;\n var $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0;\n var $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0;\n var $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0;\n var $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0;\n var $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0;\n var $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0;\n var $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0;\n var $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0;\n var $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0;\n var $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0;\n var $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0;\n var $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0;\n var $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0;\n var $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0;\n var $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0;\n var $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0;\n var $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0;\n var $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0;\n var $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0;\n var $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0;\n var $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0;\n var $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0;\n var $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0;\n var $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0;\n var $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0;\n var $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0;\n var $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0;\n var $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0;\n var $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0;\n var $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0;\n var $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0;\n var $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0;\n var $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0;\n var $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0;\n var $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0;\n var $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0;\n var $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0;\n var $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0;\n var $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0;\n var $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0;\n var $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0;\n var $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 1744|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1744|0);\n $$byval_copy5 = sp + 1724|0;\n $$byval_copy4 = sp + 1720|0;\n $$byval_copy3 = sp + 1716|0;\n $$byval_copy2 = sp + 1712|0;\n $$byval_copy1 = sp + 1708|0;\n $$byval_copy = sp + 1704|0;\n $22 = sp + 80|0;\n $25 = sp + 1738|0;\n $43 = sp + 72|0;\n $46 = sp + 1737|0;\n $52 = sp + 1516|0;\n $58 = sp + 1492|0;\n $64 = sp + 1468|0;\n $76 = sp + 1420|0;\n $102 = sp + 64|0;\n $107 = sp + 1736|0;\n $115 = sp + 1272|0;\n $116 = sp + 1268|0;\n $117 = sp + 1248|0;\n $118 = sp + 1244|0;\n $119 = sp + 1240|0;\n $122 = sp + 56|0;\n $125 = sp + 1735|0;\n $170 = sp + 48|0;\n $173 = sp + 1734|0;\n $179 = sp + 1016|0;\n $185 = sp + 992|0;\n $191 = sp + 968|0;\n $203 = sp + 920|0;\n $229 = sp + 40|0;\n $234 = sp + 1733|0;\n $242 = sp + 772|0;\n $243 = sp + 768|0;\n $244 = sp + 748|0;\n $245 = sp + 744|0;\n $246 = sp + 740|0;\n $249 = sp + 32|0;\n $252 = sp + 1732|0;\n $267 = sp + 24|0;\n $270 = sp + 1731|0;\n $276 = sp + 636|0;\n $282 = sp + 612|0;\n $288 = sp + 588|0;\n $300 = sp + 540|0;\n $326 = sp + 16|0;\n $331 = sp + 1730|0;\n $339 = sp + 392|0;\n $340 = sp + 388|0;\n $341 = sp + 368|0;\n $342 = sp + 364|0;\n $343 = sp + 360|0;\n $346 = sp + 8|0;\n $349 = sp + 1729|0;\n $358 = sp;\n $361 = sp + 1728|0;\n $367 = sp + 280|0;\n $373 = sp + 256|0;\n $379 = sp + 232|0;\n $391 = sp + 184|0;\n $401 = sp + 144|0;\n $402 = sp + 140|0;\n $403 = sp + 136|0;\n $404 = sp + 132|0;\n $405 = sp + 128|0;\n $406 = sp + 124|0;\n $408 = sp + 100|0;\n $409 = sp + 96|0;\n $410 = sp + 92|0;\n $411 = sp + 88|0;\n $398 = $0;\n $399 = $1;\n $413 = $398;\n $397 = $413;\n $414 = $397;\n $415 = ((($414)) + 20|0);\n $396 = $415;\n $416 = $396;\n $395 = $416;\n $417 = $395;\n $400 = $417;\n $418 = $399;\n $394 = $413;\n $419 = $394;\n $420 = ((($419)) + 8|0);\n $421 = HEAP32[$420>>2]|0;\n $422 = ((($419)) + 4|0);\n $423 = HEAP32[$422>>2]|0;\n $424 = ($421|0)==($423|0);\n $425 = $424&1;\n $426 = (($418) + ($425))|0;\n $393 = $426;\n $427 = $393;\n $428 = (($427>>>0) / 93)&-1;\n $429 = $393;\n $430 = (($429>>>0) % 93)&-1;\n $431 = ($430|0)!=(0);\n $432 = $431&1;\n $433 = (($428) + ($432))|0;\n HEAP32[$401>>2] = $433;\n $392 = $413;\n $434 = $392;\n $435 = ((($434)) + 16|0);\n $436 = HEAP32[$435>>2]|0;\n $437 = (($436>>>0) / 93)&-1;\n HEAP32[$402>>2] = $437;\n $359 = $402;\n $360 = $401;\n $438 = $359;\n $439 = $360;\n ;HEAP8[$358>>0]=HEAP8[$361>>0]|0;\n $356 = $438;\n $357 = $439;\n $440 = $357;\n $441 = $356;\n $353 = $358;\n $354 = $440;\n $355 = $441;\n $442 = $354;\n $443 = HEAP32[$442>>2]|0;\n $444 = $355;\n $445 = HEAP32[$444>>2]|0;\n $446 = ($443>>>0)<($445>>>0);\n $447 = $357;\n $448 = $356;\n $449 = $446 ? $447 : $448;\n $450 = HEAP32[$449>>2]|0;\n HEAP32[$402>>2] = $450;\n $451 = HEAP32[$402>>2]|0;\n $452 = HEAP32[$401>>2]|0;\n $453 = (($452) - ($451))|0;\n HEAP32[$401>>2] = $453;\n $454 = HEAP32[$401>>2]|0;\n $455 = ($454|0)==(0);\n if ($455) {\n  $456 = HEAP32[$402>>2]|0;\n  $457 = ($456*93)|0;\n  $458 = ((($413)) + 16|0);\n  $459 = HEAP32[$458>>2]|0;\n  $460 = (($459) - ($457))|0;\n  HEAP32[$458>>2] = $460;\n  while(1) {\n   $461 = HEAP32[$402>>2]|0;\n   $462 = ($461>>>0)>(0);\n   if (!($462)) {\n    break;\n   }\n   $254 = $413;\n   $463 = $254;\n   $464 = ((($463)) + 4|0);\n   $465 = HEAP32[$464>>2]|0;\n   $466 = HEAP32[$465>>2]|0;\n   HEAP32[$403>>2] = $466;\n   $253 = $413;\n   $467 = $253;\n   $468 = ((($467)) + 4|0);\n   $469 = HEAP32[$468>>2]|0;\n   $470 = ((($469)) + 4|0);\n   $250 = $467;\n   $251 = $470;\n   $471 = $250;\n   $472 = $251;\n   ;HEAP8[$249>>0]=HEAP8[$252>>0]|0;\n   $247 = $471;\n   $248 = $472;\n   $473 = $247;\n   $474 = $248;\n   $475 = ((($473)) + 4|0);\n   HEAP32[$475>>2] = $474;\n   $238 = $413;\n   $239 = $403;\n   $476 = $238;\n   $477 = ((($476)) + 8|0);\n   $478 = HEAP32[$477>>2]|0;\n   $237 = $476;\n   $479 = $237;\n   $480 = ((($479)) + 12|0);\n   $236 = $480;\n   $481 = $236;\n   $235 = $481;\n   $482 = $235;\n   $483 = HEAP32[$482>>2]|0;\n   $484 = ($478|0)==($483|0);\n   do {\n    if ($484) {\n     $485 = ((($476)) + 4|0);\n     $486 = HEAP32[$485>>2]|0;\n     $487 = HEAP32[$476>>2]|0;\n     $488 = ($486>>>0)>($487>>>0);\n     if (!($488)) {\n      $206 = $476;\n      $535 = $206;\n      $536 = ((($535)) + 12|0);\n      $205 = $536;\n      $537 = $205;\n      $204 = $537;\n      $538 = $204;\n      $539 = HEAP32[$538>>2]|0;\n      $540 = HEAP32[$476>>2]|0;\n      $541 = $539;\n      $542 = $540;\n      $543 = (($541) - ($542))|0;\n      $544 = (($543|0) / 4)&-1;\n      $545 = $544<<1;\n      HEAP32[$242>>2] = $545;\n      HEAP32[$243>>2] = 1;\n      $171 = $242;\n      $172 = $243;\n      $546 = $171;\n      $547 = $172;\n      ;HEAP8[$170>>0]=HEAP8[$173>>0]|0;\n      $168 = $546;\n      $169 = $547;\n      $548 = $168;\n      $549 = $169;\n      $165 = $170;\n      $166 = $548;\n      $167 = $549;\n      $550 = $166;\n      $551 = HEAP32[$550>>2]|0;\n      $552 = $167;\n      $553 = HEAP32[$552>>2]|0;\n      $554 = ($551>>>0)<($553>>>0);\n      $555 = $169;\n      $556 = $168;\n      $557 = $554 ? $555 : $556;\n      $558 = HEAP32[$557>>2]|0;\n      $241 = $558;\n      $559 = $241;\n      $560 = $241;\n      $561 = (($560>>>0) / 4)&-1;\n      $160 = $476;\n      $562 = $160;\n      $563 = ((($562)) + 12|0);\n      $159 = $563;\n      $564 = $159;\n      $158 = $564;\n      $565 = $158;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($244,$559,$561,$565);\n      $566 = ((($476)) + 4|0);\n      $567 = HEAP32[$566>>2]|0;\n      $161 = $245;\n      $162 = $567;\n      $568 = $161;\n      $569 = $162;\n      HEAP32[$568>>2] = $569;\n      $570 = ((($476)) + 8|0);\n      $571 = HEAP32[$570>>2]|0;\n      $163 = $246;\n      $164 = $571;\n      $572 = $163;\n      $573 = $164;\n      HEAP32[$572>>2] = $573;\n      ;HEAP32[$$byval_copy>>2]=HEAP32[$245>>2]|0;\n      ;HEAP32[$$byval_copy1>>2]=HEAP32[$246>>2]|0;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($244,$$byval_copy,$$byval_copy1);\n      $177 = $476;\n      $178 = $244;\n      $574 = $177;\n      $176 = $574;\n      $575 = $176;\n      $576 = HEAP32[$575>>2]|0;\n      HEAP32[$179>>2] = $576;\n      $577 = $178;\n      $174 = $577;\n      $578 = $174;\n      $579 = HEAP32[$578>>2]|0;\n      $580 = $177;\n      HEAP32[$580>>2] = $579;\n      $175 = $179;\n      $581 = $175;\n      $582 = HEAP32[$581>>2]|0;\n      $583 = $178;\n      HEAP32[$583>>2] = $582;\n      $584 = ((($476)) + 4|0);\n      $585 = ((($244)) + 4|0);\n      $183 = $584;\n      $184 = $585;\n      $586 = $183;\n      $182 = $586;\n      $587 = $182;\n      $588 = HEAP32[$587>>2]|0;\n      HEAP32[$185>>2] = $588;\n      $589 = $184;\n      $180 = $589;\n      $590 = $180;\n      $591 = HEAP32[$590>>2]|0;\n      $592 = $183;\n      HEAP32[$592>>2] = $591;\n      $181 = $185;\n      $593 = $181;\n      $594 = HEAP32[$593>>2]|0;\n      $595 = $184;\n      HEAP32[$595>>2] = $594;\n      $596 = ((($476)) + 8|0);\n      $597 = ((($244)) + 8|0);\n      $189 = $596;\n      $190 = $597;\n      $598 = $189;\n      $188 = $598;\n      $599 = $188;\n      $600 = HEAP32[$599>>2]|0;\n      HEAP32[$191>>2] = $600;\n      $601 = $190;\n      $186 = $601;\n      $602 = $186;\n      $603 = HEAP32[$602>>2]|0;\n      $604 = $189;\n      HEAP32[$604>>2] = $603;\n      $187 = $191;\n      $605 = $187;\n      $606 = HEAP32[$605>>2]|0;\n      $607 = $190;\n      HEAP32[$607>>2] = $606;\n      $194 = $476;\n      $608 = $194;\n      $609 = ((($608)) + 12|0);\n      $193 = $609;\n      $610 = $193;\n      $192 = $610;\n      $611 = $192;\n      $197 = $244;\n      $612 = $197;\n      $613 = ((($612)) + 12|0);\n      $196 = $613;\n      $614 = $196;\n      $195 = $614;\n      $615 = $195;\n      $201 = $611;\n      $202 = $615;\n      $616 = $201;\n      $200 = $616;\n      $617 = $200;\n      $618 = HEAP32[$617>>2]|0;\n      HEAP32[$203>>2] = $618;\n      $619 = $202;\n      $198 = $619;\n      $620 = $198;\n      $621 = HEAP32[$620>>2]|0;\n      $622 = $201;\n      HEAP32[$622>>2] = $621;\n      $199 = $203;\n      $623 = $199;\n      $624 = HEAP32[$623>>2]|0;\n      $625 = $202;\n      HEAP32[$625>>2] = $624;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($244);\n      break;\n     }\n     $489 = ((($476)) + 4|0);\n     $490 = HEAP32[$489>>2]|0;\n     $491 = HEAP32[$476>>2]|0;\n     $492 = $490;\n     $493 = $491;\n     $494 = (($492) - ($493))|0;\n     $495 = (($494|0) / 4)&-1;\n     $240 = $495;\n     $496 = $240;\n     $497 = (($496) + 1)|0;\n     $498 = (($497|0) / 2)&-1;\n     $240 = $498;\n     $499 = ((($476)) + 4|0);\n     $500 = HEAP32[$499>>2]|0;\n     $501 = ((($476)) + 8|0);\n     $502 = HEAP32[$501>>2]|0;\n     $503 = ((($476)) + 4|0);\n     $504 = HEAP32[$503>>2]|0;\n     $505 = $240;\n     $506 = (0 - ($505))|0;\n     $507 = (($504) + ($506<<2)|0);\n     $214 = $500;\n     $215 = $502;\n     $216 = $507;\n     $508 = $214;\n     $213 = $508;\n     $509 = $213;\n     $510 = $215;\n     $207 = $510;\n     $511 = $207;\n     $512 = $216;\n     $208 = $512;\n     $513 = $208;\n     $209 = $509;\n     $210 = $511;\n     $211 = $513;\n     $514 = $210;\n     $515 = $209;\n     $516 = $514;\n     $517 = $515;\n     $518 = (($516) - ($517))|0;\n     $519 = (($518|0) / 4)&-1;\n     $212 = $519;\n     $520 = $212;\n     $521 = ($520>>>0)>(0);\n     if ($521) {\n      $522 = $211;\n      $523 = $209;\n      $524 = $212;\n      $525 = $524<<2;\n      _memmove(($522|0),($523|0),($525|0))|0;\n     }\n     $526 = $211;\n     $527 = $212;\n     $528 = (($526) + ($527<<2)|0);\n     $529 = ((($476)) + 8|0);\n     HEAP32[$529>>2] = $528;\n     $530 = $240;\n     $531 = ((($476)) + 4|0);\n     $532 = HEAP32[$531>>2]|0;\n     $533 = (0 - ($530))|0;\n     $534 = (($532) + ($533<<2)|0);\n     HEAP32[$531>>2] = $534;\n    }\n   } while(0);\n   $219 = $476;\n   $626 = $219;\n   $627 = ((($626)) + 12|0);\n   $218 = $627;\n   $628 = $218;\n   $217 = $628;\n   $629 = $217;\n   $630 = ((($476)) + 8|0);\n   $631 = HEAP32[$630>>2]|0;\n   $220 = $631;\n   $632 = $220;\n   $633 = $239;\n   $231 = $629;\n   $232 = $632;\n   $233 = $633;\n   $634 = $231;\n   $635 = $232;\n   $636 = $233;\n   $230 = $636;\n   $637 = $230;\n   ;HEAP8[$229>>0]=HEAP8[$234>>0]|0;\n   $226 = $634;\n   $227 = $635;\n   $228 = $637;\n   $638 = $226;\n   $639 = $227;\n   $640 = $228;\n   $225 = $640;\n   $641 = $225;\n   $222 = $638;\n   $223 = $639;\n   $224 = $641;\n   $642 = $223;\n   $643 = $224;\n   $221 = $643;\n   $644 = $221;\n   $645 = HEAP32[$644>>2]|0;\n   HEAP32[$642>>2] = $645;\n   $646 = ((($476)) + 8|0);\n   $647 = HEAP32[$646>>2]|0;\n   $648 = ((($647)) + 4|0);\n   HEAP32[$646>>2] = $648;\n   $649 = HEAP32[$402>>2]|0;\n   $650 = (($649) + -1)|0;\n   HEAP32[$402>>2] = $650;\n  }\n  STACKTOP = sp;return;\n }\n $651 = HEAP32[$401>>2]|0;\n $157 = $413;\n $652 = $157;\n $156 = $652;\n $653 = $156;\n $654 = ((($653)) + 12|0);\n $155 = $654;\n $655 = $155;\n $154 = $655;\n $656 = $154;\n $657 = HEAP32[$656>>2]|0;\n $658 = HEAP32[$652>>2]|0;\n $659 = $657;\n $660 = $658;\n $661 = (($659) - ($660))|0;\n $662 = (($661|0) / 4)&-1;\n $153 = $413;\n $663 = $153;\n $664 = ((($663)) + 8|0);\n $665 = HEAP32[$664>>2]|0;\n $666 = ((($663)) + 4|0);\n $667 = HEAP32[$666>>2]|0;\n $668 = $665;\n $669 = $667;\n $670 = (($668) - ($669))|0;\n $671 = (($670|0) / 4)&-1;\n $672 = (($662) - ($671))|0;\n $673 = ($651>>>0)<=($672>>>0);\n if (!($673)) {\n  $935 = HEAP32[$402>>2]|0;\n  $936 = ($935*93)|0;\n  $407 = $936;\n  $30 = $413;\n  $937 = $30;\n  $29 = $937;\n  $938 = $29;\n  $939 = ((($938)) + 12|0);\n  $28 = $939;\n  $940 = $28;\n  $27 = $940;\n  $941 = $27;\n  $942 = HEAP32[$941>>2]|0;\n  $943 = HEAP32[$937>>2]|0;\n  $944 = $942;\n  $945 = $943;\n  $946 = (($944) - ($945))|0;\n  $947 = (($946|0) / 4)&-1;\n  $948 = $947<<1;\n  HEAP32[$409>>2] = $948;\n  $949 = HEAP32[$401>>2]|0;\n  $26 = $413;\n  $950 = $26;\n  $951 = ((($950)) + 8|0);\n  $952 = HEAP32[$951>>2]|0;\n  $953 = ((($950)) + 4|0);\n  $954 = HEAP32[$953>>2]|0;\n  $955 = $952;\n  $956 = $954;\n  $957 = (($955) - ($956))|0;\n  $958 = (($957|0) / 4)&-1;\n  $959 = (($949) + ($958))|0;\n  HEAP32[$410>>2] = $959;\n  $23 = $409;\n  $24 = $410;\n  $960 = $23;\n  $961 = $24;\n  ;HEAP8[$22>>0]=HEAP8[$25>>0]|0;\n  $20 = $960;\n  $21 = $961;\n  $962 = $20;\n  $963 = $21;\n  $17 = $22;\n  $18 = $962;\n  $19 = $963;\n  $964 = $18;\n  $965 = HEAP32[$964>>2]|0;\n  $966 = $19;\n  $967 = HEAP32[$966>>2]|0;\n  $968 = ($965>>>0)<($967>>>0);\n  $969 = $21;\n  $970 = $20;\n  $971 = $968 ? $969 : $970;\n  $972 = HEAP32[$971>>2]|0;\n  $16 = $413;\n  $973 = $16;\n  $974 = ((($973)) + 8|0);\n  $975 = HEAP32[$974>>2]|0;\n  $976 = ((($973)) + 4|0);\n  $977 = HEAP32[$976>>2]|0;\n  $978 = $975;\n  $979 = $977;\n  $980 = (($978) - ($979))|0;\n  $981 = (($980|0) / 4)&-1;\n  $982 = HEAP32[$402>>2]|0;\n  $983 = (($981) - ($982))|0;\n  $15 = $413;\n  $984 = $15;\n  $985 = ((($984)) + 12|0);\n  $14 = $985;\n  $986 = $14;\n  $13 = $986;\n  $987 = $13;\n  __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($408,$972,$983,$987);\n  while(1) {\n   $988 = HEAP32[$401>>2]|0;\n   $989 = ($988>>>0)>(0);\n   if (!($989)) {\n    break;\n   }\n   $990 = $400;\n   $11 = $990;\n   $12 = 93;\n   $991 = $11;\n   $992 = $12;\n   $8 = $991;\n   $9 = $992;\n   $10 = 0;\n   $993 = $8;\n   $994 = $9;\n   $7 = $993;\n   $995 = ($994>>>0)>(97612893);\n   if ($995) {\n    label = 35;\n    break;\n   }\n   $1000 = $9;\n   $1001 = ($1000*44)|0;\n   $6 = $1001;\n   $1002 = $6;\n   $1003 = (__Znwj($1002)|0);\n   HEAP32[$411>>2] = $1003;\n   __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE9push_backEOS4_($408,$411);\n   $1004 = HEAP32[$401>>2]|0;\n   $1005 = (($1004) + -1)|0;\n   HEAP32[$401>>2] = $1005;\n  }\n  if ((label|0) == 35) {\n   $5 = 4287;\n   $996 = (___cxa_allocate_exception(8)|0);\n   $997 = $5;\n   $3 = $996;\n   $4 = $997;\n   $998 = $3;\n   $999 = $4;\n   __ZNSt11logic_errorC2EPKc($998,$999);\n   HEAP32[$998>>2] = (3660);\n   ___cxa_throw(($996|0),(1384|0),(220|0));\n   // unreachable;\n  }\n  while(1) {\n   $1006 = HEAP32[$402>>2]|0;\n   $1007 = ($1006>>>0)>(0);\n   if (!($1007)) {\n    break;\n   }\n   $2 = $413;\n   $1008 = $2;\n   $1009 = ((($1008)) + 4|0);\n   $1010 = HEAP32[$1009>>2]|0;\n   $335 = $408;\n   $336 = $1010;\n   $1011 = $335;\n   $1012 = ((($1011)) + 8|0);\n   $1013 = HEAP32[$1012>>2]|0;\n   $334 = $1011;\n   $1014 = $334;\n   $1015 = ((($1014)) + 12|0);\n   $333 = $1015;\n   $1016 = $333;\n   $332 = $1016;\n   $1017 = $332;\n   $1018 = HEAP32[$1017>>2]|0;\n   $1019 = ($1013|0)==($1018|0);\n   do {\n    if ($1019) {\n     $1020 = ((($1011)) + 4|0);\n     $1021 = HEAP32[$1020>>2]|0;\n     $1022 = HEAP32[$1011>>2]|0;\n     $1023 = ($1021>>>0)>($1022>>>0);\n     if (!($1023)) {\n      $303 = $1011;\n      $1070 = $303;\n      $1071 = ((($1070)) + 12|0);\n      $302 = $1071;\n      $1072 = $302;\n      $301 = $1072;\n      $1073 = $301;\n      $1074 = HEAP32[$1073>>2]|0;\n      $1075 = HEAP32[$1011>>2]|0;\n      $1076 = $1074;\n      $1077 = $1075;\n      $1078 = (($1076) - ($1077))|0;\n      $1079 = (($1078|0) / 4)&-1;\n      $1080 = $1079<<1;\n      HEAP32[$339>>2] = $1080;\n      HEAP32[$340>>2] = 1;\n      $268 = $339;\n      $269 = $340;\n      $1081 = $268;\n      $1082 = $269;\n      ;HEAP8[$267>>0]=HEAP8[$270>>0]|0;\n      $265 = $1081;\n      $266 = $1082;\n      $1083 = $265;\n      $1084 = $266;\n      $262 = $267;\n      $263 = $1083;\n      $264 = $1084;\n      $1085 = $263;\n      $1086 = HEAP32[$1085>>2]|0;\n      $1087 = $264;\n      $1088 = HEAP32[$1087>>2]|0;\n      $1089 = ($1086>>>0)<($1088>>>0);\n      $1090 = $266;\n      $1091 = $265;\n      $1092 = $1089 ? $1090 : $1091;\n      $1093 = HEAP32[$1092>>2]|0;\n      $338 = $1093;\n      $1094 = $338;\n      $1095 = $338;\n      $1096 = (($1095>>>0) / 4)&-1;\n      $257 = $1011;\n      $1097 = $257;\n      $1098 = ((($1097)) + 12|0);\n      $256 = $1098;\n      $1099 = $256;\n      $1100 = ((($1099)) + 4|0);\n      $255 = $1100;\n      $1101 = $255;\n      $1102 = HEAP32[$1101>>2]|0;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($341,$1094,$1096,$1102);\n      $1103 = ((($1011)) + 4|0);\n      $1104 = HEAP32[$1103>>2]|0;\n      $258 = $342;\n      $259 = $1104;\n      $1105 = $258;\n      $1106 = $259;\n      HEAP32[$1105>>2] = $1106;\n      $1107 = ((($1011)) + 8|0);\n      $1108 = HEAP32[$1107>>2]|0;\n      $260 = $343;\n      $261 = $1108;\n      $1109 = $260;\n      $1110 = $261;\n      HEAP32[$1109>>2] = $1110;\n      ;HEAP32[$$byval_copy4>>2]=HEAP32[$342>>2]|0;\n      ;HEAP32[$$byval_copy5>>2]=HEAP32[$343>>2]|0;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($341,$$byval_copy4,$$byval_copy5);\n      $274 = $1011;\n      $275 = $341;\n      $1111 = $274;\n      $273 = $1111;\n      $1112 = $273;\n      $1113 = HEAP32[$1112>>2]|0;\n      HEAP32[$276>>2] = $1113;\n      $1114 = $275;\n      $271 = $1114;\n      $1115 = $271;\n      $1116 = HEAP32[$1115>>2]|0;\n      $1117 = $274;\n      HEAP32[$1117>>2] = $1116;\n      $272 = $276;\n      $1118 = $272;\n      $1119 = HEAP32[$1118>>2]|0;\n      $1120 = $275;\n      HEAP32[$1120>>2] = $1119;\n      $1121 = ((($1011)) + 4|0);\n      $1122 = ((($341)) + 4|0);\n      $280 = $1121;\n      $281 = $1122;\n      $1123 = $280;\n      $279 = $1123;\n      $1124 = $279;\n      $1125 = HEAP32[$1124>>2]|0;\n      HEAP32[$282>>2] = $1125;\n      $1126 = $281;\n      $277 = $1126;\n      $1127 = $277;\n      $1128 = HEAP32[$1127>>2]|0;\n      $1129 = $280;\n      HEAP32[$1129>>2] = $1128;\n      $278 = $282;\n      $1130 = $278;\n      $1131 = HEAP32[$1130>>2]|0;\n      $1132 = $281;\n      HEAP32[$1132>>2] = $1131;\n      $1133 = ((($1011)) + 8|0);\n      $1134 = ((($341)) + 8|0);\n      $286 = $1133;\n      $287 = $1134;\n      $1135 = $286;\n      $285 = $1135;\n      $1136 = $285;\n      $1137 = HEAP32[$1136>>2]|0;\n      HEAP32[$288>>2] = $1137;\n      $1138 = $287;\n      $283 = $1138;\n      $1139 = $283;\n      $1140 = HEAP32[$1139>>2]|0;\n      $1141 = $286;\n      HEAP32[$1141>>2] = $1140;\n      $284 = $288;\n      $1142 = $284;\n      $1143 = HEAP32[$1142>>2]|0;\n      $1144 = $287;\n      HEAP32[$1144>>2] = $1143;\n      $291 = $1011;\n      $1145 = $291;\n      $1146 = ((($1145)) + 12|0);\n      $290 = $1146;\n      $1147 = $290;\n      $289 = $1147;\n      $1148 = $289;\n      $294 = $341;\n      $1149 = $294;\n      $1150 = ((($1149)) + 12|0);\n      $293 = $1150;\n      $1151 = $293;\n      $292 = $1151;\n      $1152 = $292;\n      $298 = $1148;\n      $299 = $1152;\n      $1153 = $298;\n      $297 = $1153;\n      $1154 = $297;\n      $1155 = HEAP32[$1154>>2]|0;\n      HEAP32[$300>>2] = $1155;\n      $1156 = $299;\n      $295 = $1156;\n      $1157 = $295;\n      $1158 = HEAP32[$1157>>2]|0;\n      $1159 = $298;\n      HEAP32[$1159>>2] = $1158;\n      $296 = $300;\n      $1160 = $296;\n      $1161 = HEAP32[$1160>>2]|0;\n      $1162 = $299;\n      HEAP32[$1162>>2] = $1161;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($341);\n      break;\n     }\n     $1024 = ((($1011)) + 4|0);\n     $1025 = HEAP32[$1024>>2]|0;\n     $1026 = HEAP32[$1011>>2]|0;\n     $1027 = $1025;\n     $1028 = $1026;\n     $1029 = (($1027) - ($1028))|0;\n     $1030 = (($1029|0) / 4)&-1;\n     $337 = $1030;\n     $1031 = $337;\n     $1032 = (($1031) + 1)|0;\n     $1033 = (($1032|0) / 2)&-1;\n     $337 = $1033;\n     $1034 = ((($1011)) + 4|0);\n     $1035 = HEAP32[$1034>>2]|0;\n     $1036 = ((($1011)) + 8|0);\n     $1037 = HEAP32[$1036>>2]|0;\n     $1038 = ((($1011)) + 4|0);\n     $1039 = HEAP32[$1038>>2]|0;\n     $1040 = $337;\n     $1041 = (0 - ($1040))|0;\n     $1042 = (($1039) + ($1041<<2)|0);\n     $311 = $1035;\n     $312 = $1037;\n     $313 = $1042;\n     $1043 = $311;\n     $310 = $1043;\n     $1044 = $310;\n     $1045 = $312;\n     $304 = $1045;\n     $1046 = $304;\n     $1047 = $313;\n     $305 = $1047;\n     $1048 = $305;\n     $306 = $1044;\n     $307 = $1046;\n     $308 = $1048;\n     $1049 = $307;\n     $1050 = $306;\n     $1051 = $1049;\n     $1052 = $1050;\n     $1053 = (($1051) - ($1052))|0;\n     $1054 = (($1053|0) / 4)&-1;\n     $309 = $1054;\n     $1055 = $309;\n     $1056 = ($1055>>>0)>(0);\n     if ($1056) {\n      $1057 = $308;\n      $1058 = $306;\n      $1059 = $309;\n      $1060 = $1059<<2;\n      _memmove(($1057|0),($1058|0),($1060|0))|0;\n     }\n     $1061 = $308;\n     $1062 = $309;\n     $1063 = (($1061) + ($1062<<2)|0);\n     $1064 = ((($1011)) + 8|0);\n     HEAP32[$1064>>2] = $1063;\n     $1065 = $337;\n     $1066 = ((($1011)) + 4|0);\n     $1067 = HEAP32[$1066>>2]|0;\n     $1068 = (0 - ($1065))|0;\n     $1069 = (($1067) + ($1068<<2)|0);\n     HEAP32[$1066>>2] = $1069;\n    }\n   } while(0);\n   $316 = $1011;\n   $1163 = $316;\n   $1164 = ((($1163)) + 12|0);\n   $315 = $1164;\n   $1165 = $315;\n   $1166 = ((($1165)) + 4|0);\n   $314 = $1166;\n   $1167 = $314;\n   $1168 = HEAP32[$1167>>2]|0;\n   $1169 = ((($1011)) + 8|0);\n   $1170 = HEAP32[$1169>>2]|0;\n   $317 = $1170;\n   $1171 = $317;\n   $1172 = $336;\n   $328 = $1168;\n   $329 = $1171;\n   $330 = $1172;\n   $1173 = $328;\n   $1174 = $329;\n   $1175 = $330;\n   $327 = $1175;\n   $1176 = $327;\n   ;HEAP8[$326>>0]=HEAP8[$331>>0]|0;\n   $323 = $1173;\n   $324 = $1174;\n   $325 = $1176;\n   $1177 = $323;\n   $1178 = $324;\n   $1179 = $325;\n   $322 = $1179;\n   $1180 = $322;\n   $319 = $1177;\n   $320 = $1178;\n   $321 = $1180;\n   $1181 = $320;\n   $1182 = $321;\n   $318 = $1182;\n   $1183 = $318;\n   $1184 = HEAP32[$1183>>2]|0;\n   HEAP32[$1181>>2] = $1184;\n   $1185 = ((($1011)) + 8|0);\n   $1186 = HEAP32[$1185>>2]|0;\n   $1187 = ((($1186)) + 4|0);\n   HEAP32[$1185>>2] = $1187;\n   $350 = $413;\n   $1188 = $350;\n   $1189 = ((($1188)) + 4|0);\n   $1190 = HEAP32[$1189>>2]|0;\n   $1191 = ((($1190)) + 4|0);\n   $347 = $1188;\n   $348 = $1191;\n   $1192 = $347;\n   $1193 = $348;\n   ;HEAP8[$346>>0]=HEAP8[$349>>0]|0;\n   $344 = $1192;\n   $345 = $1193;\n   $1194 = $344;\n   $1195 = $345;\n   $1196 = ((($1194)) + 4|0);\n   HEAP32[$1196>>2] = $1195;\n   $1197 = HEAP32[$402>>2]|0;\n   $1198 = (($1197) + -1)|0;\n   HEAP32[$402>>2] = $1198;\n  }\n  $351 = $413;\n  $1199 = $351;\n  $1200 = ((($1199)) + 8|0);\n  $1201 = HEAP32[$1200>>2]|0;\n  $412 = $1201;\n  while(1) {\n   $1202 = $412;\n   $352 = $413;\n   $1203 = $352;\n   $1204 = ((($1203)) + 4|0);\n   $1205 = HEAP32[$1204>>2]|0;\n   $1206 = ($1202|0)!=($1205|0);\n   if (!($1206)) {\n    break;\n   }\n   $1207 = $412;\n   $1208 = ((($1207)) + -4|0);\n   $412 = $1208;\n   __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE10push_frontERKS4_($408,$1208);\n  }\n  $365 = $413;\n  $366 = $408;\n  $1209 = $365;\n  $364 = $1209;\n  $1210 = $364;\n  $1211 = HEAP32[$1210>>2]|0;\n  HEAP32[$367>>2] = $1211;\n  $1212 = $366;\n  $362 = $1212;\n  $1213 = $362;\n  $1214 = HEAP32[$1213>>2]|0;\n  $1215 = $365;\n  HEAP32[$1215>>2] = $1214;\n  $363 = $367;\n  $1216 = $363;\n  $1217 = HEAP32[$1216>>2]|0;\n  $1218 = $366;\n  HEAP32[$1218>>2] = $1217;\n  $1219 = ((($413)) + 4|0);\n  $1220 = ((($408)) + 4|0);\n  $371 = $1219;\n  $372 = $1220;\n  $1221 = $371;\n  $370 = $1221;\n  $1222 = $370;\n  $1223 = HEAP32[$1222>>2]|0;\n  HEAP32[$373>>2] = $1223;\n  $1224 = $372;\n  $368 = $1224;\n  $1225 = $368;\n  $1226 = HEAP32[$1225>>2]|0;\n  $1227 = $371;\n  HEAP32[$1227>>2] = $1226;\n  $369 = $373;\n  $1228 = $369;\n  $1229 = HEAP32[$1228>>2]|0;\n  $1230 = $372;\n  HEAP32[$1230>>2] = $1229;\n  $1231 = ((($413)) + 8|0);\n  $1232 = ((($408)) + 8|0);\n  $377 = $1231;\n  $378 = $1232;\n  $1233 = $377;\n  $376 = $1233;\n  $1234 = $376;\n  $1235 = HEAP32[$1234>>2]|0;\n  HEAP32[$379>>2] = $1235;\n  $1236 = $378;\n  $374 = $1236;\n  $1237 = $374;\n  $1238 = HEAP32[$1237>>2]|0;\n  $1239 = $377;\n  HEAP32[$1239>>2] = $1238;\n  $375 = $379;\n  $1240 = $375;\n  $1241 = HEAP32[$1240>>2]|0;\n  $1242 = $378;\n  HEAP32[$1242>>2] = $1241;\n  $382 = $413;\n  $1243 = $382;\n  $1244 = ((($1243)) + 12|0);\n  $381 = $1244;\n  $1245 = $381;\n  $380 = $1245;\n  $1246 = $380;\n  $385 = $408;\n  $1247 = $385;\n  $1248 = ((($1247)) + 12|0);\n  $384 = $1248;\n  $1249 = $384;\n  $383 = $1249;\n  $1250 = $383;\n  $389 = $1246;\n  $390 = $1250;\n  $1251 = $389;\n  $388 = $1251;\n  $1252 = $388;\n  $1253 = HEAP32[$1252>>2]|0;\n  HEAP32[$391>>2] = $1253;\n  $1254 = $390;\n  $386 = $1254;\n  $1255 = $386;\n  $1256 = HEAP32[$1255>>2]|0;\n  $1257 = $389;\n  HEAP32[$1257>>2] = $1256;\n  $387 = $391;\n  $1258 = $387;\n  $1259 = HEAP32[$1258>>2]|0;\n  $1260 = $390;\n  HEAP32[$1260>>2] = $1259;\n  $1261 = $407;\n  $1262 = ((($413)) + 16|0);\n  $1263 = HEAP32[$1262>>2]|0;\n  $1264 = (($1263) - ($1261))|0;\n  HEAP32[$1262>>2] = $1264;\n  __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($408);\n  STACKTOP = sp;return;\n }\n while(1) {\n  $674 = HEAP32[$401>>2]|0;\n  $675 = ($674>>>0)>(0);\n  if (!($675)) {\n   break;\n  }\n  $152 = $413;\n  $676 = $152;\n  $151 = $676;\n  $677 = $151;\n  $678 = ((($677)) + 12|0);\n  $150 = $678;\n  $679 = $150;\n  $149 = $679;\n  $680 = $149;\n  $681 = HEAP32[$680>>2]|0;\n  $682 = ((($676)) + 8|0);\n  $683 = HEAP32[$682>>2]|0;\n  $684 = $681;\n  $685 = $683;\n  $686 = (($684) - ($685))|0;\n  $687 = (($686|0) / 4)&-1;\n  $688 = ($687|0)==(0);\n  if ($688) {\n   break;\n  }\n  $689 = $400;\n  $147 = $689;\n  $148 = 93;\n  $690 = $147;\n  $691 = $148;\n  $144 = $690;\n  $145 = $691;\n  $146 = 0;\n  $692 = $144;\n  $693 = $145;\n  $143 = $692;\n  $694 = ($693>>>0)>(97612893);\n  if ($694) {\n   label = 16;\n   break;\n  }\n  $699 = $145;\n  $700 = ($699*44)|0;\n  $142 = $700;\n  $701 = $142;\n  $702 = (__Znwj($701)|0);\n  HEAP32[$404>>2] = $702;\n  __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE9push_backEOS4_($413,$404);\n  $703 = HEAP32[$401>>2]|0;\n  $704 = (($703) + -1)|0;\n  HEAP32[$401>>2] = $704;\n }\n if ((label|0) == 16) {\n  $141 = 4287;\n  $695 = (___cxa_allocate_exception(8)|0);\n  $696 = $141;\n  $139 = $695;\n  $140 = $696;\n  $697 = $139;\n  $698 = $140;\n  __ZNSt11logic_errorC2EPKc($697,$698);\n  HEAP32[$697>>2] = (3660);\n  ___cxa_throw(($695|0),(1384|0),(220|0));\n  // unreachable;\n }\n while(1) {\n  $705 = HEAP32[$401>>2]|0;\n  $706 = ($705>>>0)>(0);\n  if (!($706)) {\n   break;\n  }\n  $707 = $400;\n  $137 = $707;\n  $138 = 93;\n  $708 = $137;\n  $709 = $138;\n  $134 = $708;\n  $135 = $709;\n  $136 = 0;\n  $710 = $134;\n  $711 = $135;\n  $133 = $710;\n  $712 = ($711>>>0)>(97612893);\n  if ($712) {\n   label = 21;\n   break;\n  }\n  $717 = $135;\n  $718 = ($717*44)|0;\n  $132 = $718;\n  $719 = $132;\n  $720 = (__Znwj($719)|0);\n  HEAP32[$405>>2] = $720;\n  __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE10push_frontEOS4_($413,$405);\n  $721 = HEAP32[$401>>2]|0;\n  $722 = (($721) + -1)|0;\n  HEAP32[$401>>2] = $722;\n  $723 = HEAP32[$402>>2]|0;\n  $724 = (($723) + 1)|0;\n  HEAP32[$402>>2] = $724;\n  $128 = $413;\n  $725 = $128;\n  $726 = ((($725)) + 8|0);\n  $727 = HEAP32[$726>>2]|0;\n  $728 = ((($725)) + 4|0);\n  $729 = HEAP32[$728>>2]|0;\n  $730 = $727;\n  $731 = $729;\n  $732 = (($730) - ($731))|0;\n  $733 = (($732|0) / 4)&-1;\n  $734 = ($733|0)==(1);\n  $735 = $734&1;\n  $736 = (93 - ($735))|0;\n  $737 = ((($413)) + 16|0);\n  $738 = HEAP32[$737>>2]|0;\n  $739 = (($738) + ($736))|0;\n  HEAP32[$737>>2] = $739;\n }\n if ((label|0) == 21) {\n  $131 = 4287;\n  $713 = (___cxa_allocate_exception(8)|0);\n  $714 = $131;\n  $129 = $713;\n  $130 = $714;\n  $715 = $129;\n  $716 = $130;\n  __ZNSt11logic_errorC2EPKc($715,$716);\n  HEAP32[$715>>2] = (3660);\n  ___cxa_throw(($713|0),(1384|0),(220|0));\n  // unreachable;\n }\n $740 = HEAP32[$402>>2]|0;\n $741 = ($740*93)|0;\n $742 = ((($413)) + 16|0);\n $743 = HEAP32[$742>>2]|0;\n $744 = (($743) - ($741))|0;\n HEAP32[$742>>2] = $744;\n while(1) {\n  $745 = HEAP32[$402>>2]|0;\n  $746 = ($745>>>0)>(0);\n  if (!($746)) {\n   break;\n  }\n  $127 = $413;\n  $747 = $127;\n  $748 = ((($747)) + 4|0);\n  $749 = HEAP32[$748>>2]|0;\n  $750 = HEAP32[$749>>2]|0;\n  HEAP32[$406>>2] = $750;\n  $126 = $413;\n  $751 = $126;\n  $752 = ((($751)) + 4|0);\n  $753 = HEAP32[$752>>2]|0;\n  $754 = ((($753)) + 4|0);\n  $123 = $751;\n  $124 = $754;\n  $755 = $123;\n  $756 = $124;\n  ;HEAP8[$122>>0]=HEAP8[$125>>0]|0;\n  $120 = $755;\n  $121 = $756;\n  $757 = $120;\n  $758 = $121;\n  $759 = ((($757)) + 4|0);\n  HEAP32[$759>>2] = $758;\n  $111 = $413;\n  $112 = $406;\n  $760 = $111;\n  $761 = ((($760)) + 8|0);\n  $762 = HEAP32[$761>>2]|0;\n  $110 = $760;\n  $763 = $110;\n  $764 = ((($763)) + 12|0);\n  $109 = $764;\n  $765 = $109;\n  $108 = $765;\n  $766 = $108;\n  $767 = HEAP32[$766>>2]|0;\n  $768 = ($762|0)==($767|0);\n  do {\n   if ($768) {\n    $769 = ((($760)) + 4|0);\n    $770 = HEAP32[$769>>2]|0;\n    $771 = HEAP32[$760>>2]|0;\n    $772 = ($770>>>0)>($771>>>0);\n    if (!($772)) {\n     $79 = $760;\n     $819 = $79;\n     $820 = ((($819)) + 12|0);\n     $78 = $820;\n     $821 = $78;\n     $77 = $821;\n     $822 = $77;\n     $823 = HEAP32[$822>>2]|0;\n     $824 = HEAP32[$760>>2]|0;\n     $825 = $823;\n     $826 = $824;\n     $827 = (($825) - ($826))|0;\n     $828 = (($827|0) / 4)&-1;\n     $829 = $828<<1;\n     HEAP32[$115>>2] = $829;\n     HEAP32[$116>>2] = 1;\n     $44 = $115;\n     $45 = $116;\n     $830 = $44;\n     $831 = $45;\n     ;HEAP8[$43>>0]=HEAP8[$46>>0]|0;\n     $41 = $830;\n     $42 = $831;\n     $832 = $41;\n     $833 = $42;\n     $38 = $43;\n     $39 = $832;\n     $40 = $833;\n     $834 = $39;\n     $835 = HEAP32[$834>>2]|0;\n     $836 = $40;\n     $837 = HEAP32[$836>>2]|0;\n     $838 = ($835>>>0)<($837>>>0);\n     $839 = $42;\n     $840 = $41;\n     $841 = $838 ? $839 : $840;\n     $842 = HEAP32[$841>>2]|0;\n     $114 = $842;\n     $843 = $114;\n     $844 = $114;\n     $845 = (($844>>>0) / 4)&-1;\n     $33 = $760;\n     $846 = $33;\n     $847 = ((($846)) + 12|0);\n     $32 = $847;\n     $848 = $32;\n     $31 = $848;\n     $849 = $31;\n     __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($117,$843,$845,$849);\n     $850 = ((($760)) + 4|0);\n     $851 = HEAP32[$850>>2]|0;\n     $34 = $118;\n     $35 = $851;\n     $852 = $34;\n     $853 = $35;\n     HEAP32[$852>>2] = $853;\n     $854 = ((($760)) + 8|0);\n     $855 = HEAP32[$854>>2]|0;\n     $36 = $119;\n     $37 = $855;\n     $856 = $36;\n     $857 = $37;\n     HEAP32[$856>>2] = $857;\n     ;HEAP32[$$byval_copy2>>2]=HEAP32[$118>>2]|0;\n     ;HEAP32[$$byval_copy3>>2]=HEAP32[$119>>2]|0;\n     __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($117,$$byval_copy2,$$byval_copy3);\n     $50 = $760;\n     $51 = $117;\n     $858 = $50;\n     $49 = $858;\n     $859 = $49;\n     $860 = HEAP32[$859>>2]|0;\n     HEAP32[$52>>2] = $860;\n     $861 = $51;\n     $47 = $861;\n     $862 = $47;\n     $863 = HEAP32[$862>>2]|0;\n     $864 = $50;\n     HEAP32[$864>>2] = $863;\n     $48 = $52;\n     $865 = $48;\n     $866 = HEAP32[$865>>2]|0;\n     $867 = $51;\n     HEAP32[$867>>2] = $866;\n     $868 = ((($760)) + 4|0);\n     $869 = ((($117)) + 4|0);\n     $56 = $868;\n     $57 = $869;\n     $870 = $56;\n     $55 = $870;\n     $871 = $55;\n     $872 = HEAP32[$871>>2]|0;\n     HEAP32[$58>>2] = $872;\n     $873 = $57;\n     $53 = $873;\n     $874 = $53;\n     $875 = HEAP32[$874>>2]|0;\n     $876 = $56;\n     HEAP32[$876>>2] = $875;\n     $54 = $58;\n     $877 = $54;\n     $878 = HEAP32[$877>>2]|0;\n     $879 = $57;\n     HEAP32[$879>>2] = $878;\n     $880 = ((($760)) + 8|0);\n     $881 = ((($117)) + 8|0);\n     $62 = $880;\n     $63 = $881;\n     $882 = $62;\n     $61 = $882;\n     $883 = $61;\n     $884 = HEAP32[$883>>2]|0;\n     HEAP32[$64>>2] = $884;\n     $885 = $63;\n     $59 = $885;\n     $886 = $59;\n     $887 = HEAP32[$886>>2]|0;\n     $888 = $62;\n     HEAP32[$888>>2] = $887;\n     $60 = $64;\n     $889 = $60;\n     $890 = HEAP32[$889>>2]|0;\n     $891 = $63;\n     HEAP32[$891>>2] = $890;\n     $67 = $760;\n     $892 = $67;\n     $893 = ((($892)) + 12|0);\n     $66 = $893;\n     $894 = $66;\n     $65 = $894;\n     $895 = $65;\n     $70 = $117;\n     $896 = $70;\n     $897 = ((($896)) + 12|0);\n     $69 = $897;\n     $898 = $69;\n     $68 = $898;\n     $899 = $68;\n     $74 = $895;\n     $75 = $899;\n     $900 = $74;\n     $73 = $900;\n     $901 = $73;\n     $902 = HEAP32[$901>>2]|0;\n     HEAP32[$76>>2] = $902;\n     $903 = $75;\n     $71 = $903;\n     $904 = $71;\n     $905 = HEAP32[$904>>2]|0;\n     $906 = $74;\n     HEAP32[$906>>2] = $905;\n     $72 = $76;\n     $907 = $72;\n     $908 = HEAP32[$907>>2]|0;\n     $909 = $75;\n     HEAP32[$909>>2] = $908;\n     __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($117);\n     break;\n    }\n    $773 = ((($760)) + 4|0);\n    $774 = HEAP32[$773>>2]|0;\n    $775 = HEAP32[$760>>2]|0;\n    $776 = $774;\n    $777 = $775;\n    $778 = (($776) - ($777))|0;\n    $779 = (($778|0) / 4)&-1;\n    $113 = $779;\n    $780 = $113;\n    $781 = (($780) + 1)|0;\n    $782 = (($781|0) / 2)&-1;\n    $113 = $782;\n    $783 = ((($760)) + 4|0);\n    $784 = HEAP32[$783>>2]|0;\n    $785 = ((($760)) + 8|0);\n    $786 = HEAP32[$785>>2]|0;\n    $787 = ((($760)) + 4|0);\n    $788 = HEAP32[$787>>2]|0;\n    $789 = $113;\n    $790 = (0 - ($789))|0;\n    $791 = (($788) + ($790<<2)|0);\n    $87 = $784;\n    $88 = $786;\n    $89 = $791;\n    $792 = $87;\n    $86 = $792;\n    $793 = $86;\n    $794 = $88;\n    $80 = $794;\n    $795 = $80;\n    $796 = $89;\n    $81 = $796;\n    $797 = $81;\n    $82 = $793;\n    $83 = $795;\n    $84 = $797;\n    $798 = $83;\n    $799 = $82;\n    $800 = $798;\n    $801 = $799;\n    $802 = (($800) - ($801))|0;\n    $803 = (($802|0) / 4)&-1;\n    $85 = $803;\n    $804 = $85;\n    $805 = ($804>>>0)>(0);\n    if ($805) {\n     $806 = $84;\n     $807 = $82;\n     $808 = $85;\n     $809 = $808<<2;\n     _memmove(($806|0),($807|0),($809|0))|0;\n    }\n    $810 = $84;\n    $811 = $85;\n    $812 = (($810) + ($811<<2)|0);\n    $813 = ((($760)) + 8|0);\n    HEAP32[$813>>2] = $812;\n    $814 = $113;\n    $815 = ((($760)) + 4|0);\n    $816 = HEAP32[$815>>2]|0;\n    $817 = (0 - ($814))|0;\n    $818 = (($816) + ($817<<2)|0);\n    HEAP32[$815>>2] = $818;\n   }\n  } while(0);\n  $92 = $760;\n  $910 = $92;\n  $911 = ((($910)) + 12|0);\n  $91 = $911;\n  $912 = $91;\n  $90 = $912;\n  $913 = $90;\n  $914 = ((($760)) + 8|0);\n  $915 = HEAP32[$914>>2]|0;\n  $93 = $915;\n  $916 = $93;\n  $917 = $112;\n  $104 = $913;\n  $105 = $916;\n  $106 = $917;\n  $918 = $104;\n  $919 = $105;\n  $920 = $106;\n  $103 = $920;\n  $921 = $103;\n  ;HEAP8[$102>>0]=HEAP8[$107>>0]|0;\n  $99 = $918;\n  $100 = $919;\n  $101 = $921;\n  $922 = $99;\n  $923 = $100;\n  $924 = $101;\n  $98 = $924;\n  $925 = $98;\n  $95 = $922;\n  $96 = $923;\n  $97 = $925;\n  $926 = $96;\n  $927 = $97;\n  $94 = $927;\n  $928 = $94;\n  $929 = HEAP32[$928>>2]|0;\n  HEAP32[$926>>2] = $929;\n  $930 = ((($760)) + 8|0);\n  $931 = HEAP32[$930>>2]|0;\n  $932 = ((($931)) + 4|0);\n  HEAP32[$930>>2] = $932;\n  $933 = HEAP32[$402>>2]|0;\n  $934 = (($933) + -1)|0;\n  HEAP32[$402>>2] = $934;\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = $1;\n $13 = $10;\n $9 = $13;\n $14 = $9;\n $15 = ((($14)) + 20|0);\n $8 = $15;\n $16 = $8;\n $7 = $16;\n $17 = $7;\n $18 = HEAP32[$17>>2]|0;\n $19 = ((($13)) + 16|0);\n $20 = HEAP32[$19>>2]|0;\n $21 = (($18) + ($20))|0;\n $11 = $21;\n $6 = $13;\n $22 = $6;\n $23 = ((($22)) + 4|0);\n $24 = HEAP32[$23>>2]|0;\n $25 = $11;\n $26 = (($25>>>0) / 93)&-1;\n $27 = (($24) + ($26<<2)|0);\n $12 = $27;\n $28 = $12;\n $2 = $13;\n $29 = $2;\n $30 = ((($29)) + 8|0);\n $31 = HEAP32[$30>>2]|0;\n $32 = ((($29)) + 4|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = ($31|0)==($33|0);\n if ($34) {\n  $40 = 0;\n  $3 = $0;\n  $4 = $28;\n  $5 = $40;\n  $41 = $3;\n  $42 = $4;\n  HEAP32[$41>>2] = $42;\n  $43 = ((($41)) + 4|0);\n  $44 = $5;\n  HEAP32[$43>>2] = $44;\n  STACKTOP = sp;return;\n }\n $35 = $12;\n $36 = HEAP32[$35>>2]|0;\n $37 = $11;\n $38 = (($37>>>0) % 93)&-1;\n $39 = (($36) + (($38*44)|0)|0);\n $40 = $39;\n $3 = $0;\n $4 = $28;\n $5 = $40;\n $41 = $3;\n $42 = $4;\n HEAP32[$41>>2] = $42;\n $43 = ((($41)) + 4|0);\n $44 = $5;\n HEAP32[$43>>2] = $44;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE9push_backEOS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 384|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(384|0);\n $$byval_copy1 = sp + 376|0;\n $$byval_copy = sp + 372|0;\n $14 = sp + 8|0;\n $17 = sp + 381|0;\n $23 = sp + 292|0;\n $29 = sp + 268|0;\n $35 = sp + 244|0;\n $47 = sp + 196|0;\n $74 = sp;\n $79 = sp + 380|0;\n $87 = sp + 44|0;\n $88 = sp + 40|0;\n $89 = sp + 20|0;\n $90 = sp + 16|0;\n $91 = sp + 12|0;\n $83 = $0;\n $84 = $1;\n $92 = $83;\n $93 = ((($92)) + 8|0);\n $94 = HEAP32[$93>>2]|0;\n $82 = $92;\n $95 = $82;\n $96 = ((($95)) + 12|0);\n $81 = $96;\n $97 = $81;\n $80 = $97;\n $98 = $80;\n $99 = HEAP32[$98>>2]|0;\n $100 = ($94|0)==($99|0);\n do {\n  if ($100) {\n   $101 = ((($92)) + 4|0);\n   $102 = HEAP32[$101>>2]|0;\n   $103 = HEAP32[$92>>2]|0;\n   $104 = ($102>>>0)>($103>>>0);\n   if (!($104)) {\n    $50 = $92;\n    $151 = $50;\n    $152 = ((($151)) + 12|0);\n    $49 = $152;\n    $153 = $49;\n    $48 = $153;\n    $154 = $48;\n    $155 = HEAP32[$154>>2]|0;\n    $156 = HEAP32[$92>>2]|0;\n    $157 = $155;\n    $158 = $156;\n    $159 = (($157) - ($158))|0;\n    $160 = (($159|0) / 4)&-1;\n    $161 = $160<<1;\n    HEAP32[$87>>2] = $161;\n    HEAP32[$88>>2] = 1;\n    $15 = $87;\n    $16 = $88;\n    $162 = $15;\n    $163 = $16;\n    ;HEAP8[$14>>0]=HEAP8[$17>>0]|0;\n    $12 = $162;\n    $13 = $163;\n    $164 = $12;\n    $165 = $13;\n    $9 = $14;\n    $10 = $164;\n    $11 = $165;\n    $166 = $10;\n    $167 = HEAP32[$166>>2]|0;\n    $168 = $11;\n    $169 = HEAP32[$168>>2]|0;\n    $170 = ($167>>>0)<($169>>>0);\n    $171 = $13;\n    $172 = $12;\n    $173 = $170 ? $171 : $172;\n    $174 = HEAP32[$173>>2]|0;\n    $86 = $174;\n    $175 = $86;\n    $176 = $86;\n    $177 = (($176>>>0) / 4)&-1;\n    $4 = $92;\n    $178 = $4;\n    $179 = ((($178)) + 12|0);\n    $3 = $179;\n    $180 = $3;\n    $2 = $180;\n    $181 = $2;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($89,$175,$177,$181);\n    $182 = ((($92)) + 4|0);\n    $183 = HEAP32[$182>>2]|0;\n    $5 = $90;\n    $6 = $183;\n    $184 = $5;\n    $185 = $6;\n    HEAP32[$184>>2] = $185;\n    $186 = ((($92)) + 8|0);\n    $187 = HEAP32[$186>>2]|0;\n    $7 = $91;\n    $8 = $187;\n    $188 = $7;\n    $189 = $8;\n    HEAP32[$188>>2] = $189;\n    ;HEAP32[$$byval_copy>>2]=HEAP32[$90>>2]|0;\n    ;HEAP32[$$byval_copy1>>2]=HEAP32[$91>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($89,$$byval_copy,$$byval_copy1);\n    $21 = $92;\n    $22 = $89;\n    $190 = $21;\n    $20 = $190;\n    $191 = $20;\n    $192 = HEAP32[$191>>2]|0;\n    HEAP32[$23>>2] = $192;\n    $193 = $22;\n    $18 = $193;\n    $194 = $18;\n    $195 = HEAP32[$194>>2]|0;\n    $196 = $21;\n    HEAP32[$196>>2] = $195;\n    $19 = $23;\n    $197 = $19;\n    $198 = HEAP32[$197>>2]|0;\n    $199 = $22;\n    HEAP32[$199>>2] = $198;\n    $200 = ((($92)) + 4|0);\n    $201 = ((($89)) + 4|0);\n    $27 = $200;\n    $28 = $201;\n    $202 = $27;\n    $26 = $202;\n    $203 = $26;\n    $204 = HEAP32[$203>>2]|0;\n    HEAP32[$29>>2] = $204;\n    $205 = $28;\n    $24 = $205;\n    $206 = $24;\n    $207 = HEAP32[$206>>2]|0;\n    $208 = $27;\n    HEAP32[$208>>2] = $207;\n    $25 = $29;\n    $209 = $25;\n    $210 = HEAP32[$209>>2]|0;\n    $211 = $28;\n    HEAP32[$211>>2] = $210;\n    $212 = ((($92)) + 8|0);\n    $213 = ((($89)) + 8|0);\n    $33 = $212;\n    $34 = $213;\n    $214 = $33;\n    $32 = $214;\n    $215 = $32;\n    $216 = HEAP32[$215>>2]|0;\n    HEAP32[$35>>2] = $216;\n    $217 = $34;\n    $30 = $217;\n    $218 = $30;\n    $219 = HEAP32[$218>>2]|0;\n    $220 = $33;\n    HEAP32[$220>>2] = $219;\n    $31 = $35;\n    $221 = $31;\n    $222 = HEAP32[$221>>2]|0;\n    $223 = $34;\n    HEAP32[$223>>2] = $222;\n    $38 = $92;\n    $224 = $38;\n    $225 = ((($224)) + 12|0);\n    $37 = $225;\n    $226 = $37;\n    $36 = $226;\n    $227 = $36;\n    $41 = $89;\n    $228 = $41;\n    $229 = ((($228)) + 12|0);\n    $40 = $229;\n    $230 = $40;\n    $39 = $230;\n    $231 = $39;\n    $45 = $227;\n    $46 = $231;\n    $232 = $45;\n    $44 = $232;\n    $233 = $44;\n    $234 = HEAP32[$233>>2]|0;\n    HEAP32[$47>>2] = $234;\n    $235 = $46;\n    $42 = $235;\n    $236 = $42;\n    $237 = HEAP32[$236>>2]|0;\n    $238 = $45;\n    HEAP32[$238>>2] = $237;\n    $43 = $47;\n    $239 = $43;\n    $240 = HEAP32[$239>>2]|0;\n    $241 = $46;\n    HEAP32[$241>>2] = $240;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($89);\n    break;\n   }\n   $105 = ((($92)) + 4|0);\n   $106 = HEAP32[$105>>2]|0;\n   $107 = HEAP32[$92>>2]|0;\n   $108 = $106;\n   $109 = $107;\n   $110 = (($108) - ($109))|0;\n   $111 = (($110|0) / 4)&-1;\n   $85 = $111;\n   $112 = $85;\n   $113 = (($112) + 1)|0;\n   $114 = (($113|0) / 2)&-1;\n   $85 = $114;\n   $115 = ((($92)) + 4|0);\n   $116 = HEAP32[$115>>2]|0;\n   $117 = ((($92)) + 8|0);\n   $118 = HEAP32[$117>>2]|0;\n   $119 = ((($92)) + 4|0);\n   $120 = HEAP32[$119>>2]|0;\n   $121 = $85;\n   $122 = (0 - ($121))|0;\n   $123 = (($120) + ($122<<2)|0);\n   $58 = $116;\n   $59 = $118;\n   $60 = $123;\n   $124 = $58;\n   $57 = $124;\n   $125 = $57;\n   $126 = $59;\n   $51 = $126;\n   $127 = $51;\n   $128 = $60;\n   $52 = $128;\n   $129 = $52;\n   $53 = $125;\n   $54 = $127;\n   $55 = $129;\n   $130 = $54;\n   $131 = $53;\n   $132 = $130;\n   $133 = $131;\n   $134 = (($132) - ($133))|0;\n   $135 = (($134|0) / 4)&-1;\n   $56 = $135;\n   $136 = $56;\n   $137 = ($136>>>0)>(0);\n   if ($137) {\n    $138 = $55;\n    $139 = $53;\n    $140 = $56;\n    $141 = $140<<2;\n    _memmove(($138|0),($139|0),($141|0))|0;\n   }\n   $142 = $55;\n   $143 = $56;\n   $144 = (($142) + ($143<<2)|0);\n   $145 = ((($92)) + 8|0);\n   HEAP32[$145>>2] = $144;\n   $146 = $85;\n   $147 = ((($92)) + 4|0);\n   $148 = HEAP32[$147>>2]|0;\n   $149 = (0 - ($146))|0;\n   $150 = (($148) + ($149<<2)|0);\n   HEAP32[$147>>2] = $150;\n  }\n } while(0);\n $63 = $92;\n $242 = $63;\n $243 = ((($242)) + 12|0);\n $62 = $243;\n $244 = $62;\n $61 = $244;\n $245 = $61;\n $246 = ((($92)) + 8|0);\n $247 = HEAP32[$246>>2]|0;\n $64 = $247;\n $248 = $64;\n $249 = $84;\n $65 = $249;\n $250 = $65;\n $76 = $245;\n $77 = $248;\n $78 = $250;\n $251 = $76;\n $252 = $77;\n $253 = $78;\n $75 = $253;\n $254 = $75;\n ;HEAP8[$74>>0]=HEAP8[$79>>0]|0;\n $71 = $251;\n $72 = $252;\n $73 = $254;\n $255 = $71;\n $256 = $72;\n $257 = $73;\n $70 = $257;\n $258 = $70;\n $67 = $255;\n $68 = $256;\n $69 = $258;\n $259 = $68;\n $260 = $69;\n $66 = $260;\n $261 = $66;\n $262 = HEAP32[$261>>2]|0;\n HEAP32[$259>>2] = $262;\n $263 = ((($92)) + 8|0);\n $264 = HEAP32[$263>>2]|0;\n $265 = ((($264)) + 4|0);\n HEAP32[$263>>2] = $265;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE10push_frontEOS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 400|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(400|0);\n $$byval_copy1 = sp + 388|0;\n $$byval_copy = sp + 384|0;\n $10 = sp + 8|0;\n $13 = sp + 393|0;\n $26 = sp + 292|0;\n $32 = sp + 268|0;\n $38 = sp + 244|0;\n $50 = sp + 196|0;\n $77 = sp;\n $82 = sp + 392|0;\n $90 = sp + 44|0;\n $91 = sp + 40|0;\n $92 = sp + 20|0;\n $93 = sp + 16|0;\n $94 = sp + 12|0;\n $86 = $0;\n $87 = $1;\n $95 = $86;\n $96 = ((($95)) + 4|0);\n $97 = HEAP32[$96>>2]|0;\n $98 = HEAP32[$95>>2]|0;\n $99 = ($97|0)==($98|0);\n do {\n  if ($99) {\n   $100 = ((($95)) + 8|0);\n   $101 = HEAP32[$100>>2]|0;\n   $85 = $95;\n   $102 = $85;\n   $103 = ((($102)) + 12|0);\n   $84 = $103;\n   $104 = $84;\n   $83 = $104;\n   $105 = $83;\n   $106 = HEAP32[$105>>2]|0;\n   $107 = ($101>>>0)<($106>>>0);\n   if (!($107)) {\n    $20 = $95;\n    $158 = $20;\n    $159 = ((($158)) + 12|0);\n    $19 = $159;\n    $160 = $19;\n    $18 = $160;\n    $161 = $18;\n    $162 = HEAP32[$161>>2]|0;\n    $163 = HEAP32[$95>>2]|0;\n    $164 = $162;\n    $165 = $163;\n    $166 = (($164) - ($165))|0;\n    $167 = (($166|0) / 4)&-1;\n    $168 = $167<<1;\n    HEAP32[$90>>2] = $168;\n    HEAP32[$91>>2] = 1;\n    $11 = $90;\n    $12 = $91;\n    $169 = $11;\n    $170 = $12;\n    ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n    $8 = $169;\n    $9 = $170;\n    $171 = $8;\n    $172 = $9;\n    $5 = $10;\n    $6 = $171;\n    $7 = $172;\n    $173 = $6;\n    $174 = HEAP32[$173>>2]|0;\n    $175 = $7;\n    $176 = HEAP32[$175>>2]|0;\n    $177 = ($174>>>0)<($176>>>0);\n    $178 = $9;\n    $179 = $8;\n    $180 = $177 ? $178 : $179;\n    $181 = HEAP32[$180>>2]|0;\n    $89 = $181;\n    $182 = $89;\n    $183 = $89;\n    $184 = (($183) + 3)|0;\n    $185 = (($184>>>0) / 4)&-1;\n    $4 = $95;\n    $186 = $4;\n    $187 = ((($186)) + 12|0);\n    $3 = $187;\n    $188 = $3;\n    $2 = $188;\n    $189 = $2;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($92,$182,$185,$189);\n    $190 = ((($95)) + 4|0);\n    $191 = HEAP32[$190>>2]|0;\n    $14 = $93;\n    $15 = $191;\n    $192 = $14;\n    $193 = $15;\n    HEAP32[$192>>2] = $193;\n    $194 = ((($95)) + 8|0);\n    $195 = HEAP32[$194>>2]|0;\n    $16 = $94;\n    $17 = $195;\n    $196 = $16;\n    $197 = $17;\n    HEAP32[$196>>2] = $197;\n    ;HEAP32[$$byval_copy>>2]=HEAP32[$93>>2]|0;\n    ;HEAP32[$$byval_copy1>>2]=HEAP32[$94>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($92,$$byval_copy,$$byval_copy1);\n    $24 = $95;\n    $25 = $92;\n    $198 = $24;\n    $23 = $198;\n    $199 = $23;\n    $200 = HEAP32[$199>>2]|0;\n    HEAP32[$26>>2] = $200;\n    $201 = $25;\n    $21 = $201;\n    $202 = $21;\n    $203 = HEAP32[$202>>2]|0;\n    $204 = $24;\n    HEAP32[$204>>2] = $203;\n    $22 = $26;\n    $205 = $22;\n    $206 = HEAP32[$205>>2]|0;\n    $207 = $25;\n    HEAP32[$207>>2] = $206;\n    $208 = ((($95)) + 4|0);\n    $209 = ((($92)) + 4|0);\n    $30 = $208;\n    $31 = $209;\n    $210 = $30;\n    $29 = $210;\n    $211 = $29;\n    $212 = HEAP32[$211>>2]|0;\n    HEAP32[$32>>2] = $212;\n    $213 = $31;\n    $27 = $213;\n    $214 = $27;\n    $215 = HEAP32[$214>>2]|0;\n    $216 = $30;\n    HEAP32[$216>>2] = $215;\n    $28 = $32;\n    $217 = $28;\n    $218 = HEAP32[$217>>2]|0;\n    $219 = $31;\n    HEAP32[$219>>2] = $218;\n    $220 = ((($95)) + 8|0);\n    $221 = ((($92)) + 8|0);\n    $36 = $220;\n    $37 = $221;\n    $222 = $36;\n    $35 = $222;\n    $223 = $35;\n    $224 = HEAP32[$223>>2]|0;\n    HEAP32[$38>>2] = $224;\n    $225 = $37;\n    $33 = $225;\n    $226 = $33;\n    $227 = HEAP32[$226>>2]|0;\n    $228 = $36;\n    HEAP32[$228>>2] = $227;\n    $34 = $38;\n    $229 = $34;\n    $230 = HEAP32[$229>>2]|0;\n    $231 = $37;\n    HEAP32[$231>>2] = $230;\n    $41 = $95;\n    $232 = $41;\n    $233 = ((($232)) + 12|0);\n    $40 = $233;\n    $234 = $40;\n    $39 = $234;\n    $235 = $39;\n    $44 = $92;\n    $236 = $44;\n    $237 = ((($236)) + 12|0);\n    $43 = $237;\n    $238 = $43;\n    $42 = $238;\n    $239 = $42;\n    $48 = $235;\n    $49 = $239;\n    $240 = $48;\n    $47 = $240;\n    $241 = $47;\n    $242 = HEAP32[$241>>2]|0;\n    HEAP32[$50>>2] = $242;\n    $243 = $49;\n    $45 = $243;\n    $244 = $45;\n    $245 = HEAP32[$244>>2]|0;\n    $246 = $48;\n    HEAP32[$246>>2] = $245;\n    $46 = $50;\n    $247 = $46;\n    $248 = HEAP32[$247>>2]|0;\n    $249 = $49;\n    HEAP32[$249>>2] = $248;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($92);\n    break;\n   }\n   $63 = $95;\n   $108 = $63;\n   $109 = ((($108)) + 12|0);\n   $62 = $109;\n   $110 = $62;\n   $61 = $110;\n   $111 = $61;\n   $112 = HEAP32[$111>>2]|0;\n   $113 = ((($95)) + 8|0);\n   $114 = HEAP32[$113>>2]|0;\n   $115 = $112;\n   $116 = $114;\n   $117 = (($115) - ($116))|0;\n   $118 = (($117|0) / 4)&-1;\n   $88 = $118;\n   $119 = $88;\n   $120 = (($119) + 1)|0;\n   $121 = (($120|0) / 2)&-1;\n   $88 = $121;\n   $122 = ((($95)) + 4|0);\n   $123 = HEAP32[$122>>2]|0;\n   $124 = ((($95)) + 8|0);\n   $125 = HEAP32[$124>>2]|0;\n   $126 = ((($95)) + 8|0);\n   $127 = HEAP32[$126>>2]|0;\n   $128 = $88;\n   $129 = (($127) + ($128<<2)|0);\n   $58 = $123;\n   $59 = $125;\n   $60 = $129;\n   $130 = $58;\n   $57 = $130;\n   $131 = $57;\n   $132 = $59;\n   $51 = $132;\n   $133 = $51;\n   $134 = $60;\n   $52 = $134;\n   $135 = $52;\n   $53 = $131;\n   $54 = $133;\n   $55 = $135;\n   $136 = $54;\n   $137 = $53;\n   $138 = $136;\n   $139 = $137;\n   $140 = (($138) - ($139))|0;\n   $141 = (($140|0) / 4)&-1;\n   $56 = $141;\n   $142 = $56;\n   $143 = ($142>>>0)>(0);\n   if ($143) {\n    $144 = $56;\n    $145 = $55;\n    $146 = (0 - ($144))|0;\n    $147 = (($145) + ($146<<2)|0);\n    $55 = $147;\n    $148 = $55;\n    $149 = $53;\n    $150 = $56;\n    $151 = $150<<2;\n    _memmove(($148|0),($149|0),($151|0))|0;\n   }\n   $152 = $55;\n   $153 = ((($95)) + 4|0);\n   HEAP32[$153>>2] = $152;\n   $154 = $88;\n   $155 = ((($95)) + 8|0);\n   $156 = HEAP32[$155>>2]|0;\n   $157 = (($156) + ($154<<2)|0);\n   HEAP32[$155>>2] = $157;\n  }\n } while(0);\n $66 = $95;\n $250 = $66;\n $251 = ((($250)) + 12|0);\n $65 = $251;\n $252 = $65;\n $64 = $252;\n $253 = $64;\n $254 = ((($95)) + 4|0);\n $255 = HEAP32[$254>>2]|0;\n $256 = ((($255)) + -4|0);\n $67 = $256;\n $257 = $67;\n $258 = $87;\n $68 = $258;\n $259 = $68;\n $79 = $253;\n $80 = $257;\n $81 = $259;\n $260 = $79;\n $261 = $80;\n $262 = $81;\n $78 = $262;\n $263 = $78;\n ;HEAP8[$77>>0]=HEAP8[$82>>0]|0;\n $74 = $260;\n $75 = $261;\n $76 = $263;\n $264 = $74;\n $265 = $75;\n $266 = $76;\n $73 = $266;\n $267 = $73;\n $70 = $264;\n $71 = $265;\n $72 = $267;\n $268 = $71;\n $269 = $72;\n $69 = $269;\n $270 = $69;\n $271 = HEAP32[$270>>2]|0;\n HEAP32[$268>>2] = $271;\n $272 = ((($95)) + 4|0);\n $273 = HEAP32[$272>>2]|0;\n $274 = ((($273)) + -4|0);\n HEAP32[$272>>2] = $274;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(1073741823);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = $68<<2;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + ($74<<2)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + ($79<<2)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE9push_backEOS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0;\n var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0;\n var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0;\n var $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0;\n var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 384|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(384|0);\n $$byval_copy1 = sp + 376|0;\n $$byval_copy = sp + 372|0;\n $14 = sp + 8|0;\n $17 = sp + 381|0;\n $23 = sp + 292|0;\n $29 = sp + 268|0;\n $35 = sp + 244|0;\n $47 = sp + 196|0;\n $74 = sp;\n $79 = sp + 380|0;\n $87 = sp + 44|0;\n $88 = sp + 40|0;\n $89 = sp + 20|0;\n $90 = sp + 16|0;\n $91 = sp + 12|0;\n $83 = $0;\n $84 = $1;\n $92 = $83;\n $93 = ((($92)) + 8|0);\n $94 = HEAP32[$93>>2]|0;\n $82 = $92;\n $95 = $82;\n $96 = ((($95)) + 12|0);\n $81 = $96;\n $97 = $81;\n $80 = $97;\n $98 = $80;\n $99 = HEAP32[$98>>2]|0;\n $100 = ($94|0)==($99|0);\n do {\n  if ($100) {\n   $101 = ((($92)) + 4|0);\n   $102 = HEAP32[$101>>2]|0;\n   $103 = HEAP32[$92>>2]|0;\n   $104 = ($102>>>0)>($103>>>0);\n   if (!($104)) {\n    $50 = $92;\n    $151 = $50;\n    $152 = ((($151)) + 12|0);\n    $49 = $152;\n    $153 = $49;\n    $48 = $153;\n    $154 = $48;\n    $155 = HEAP32[$154>>2]|0;\n    $156 = HEAP32[$92>>2]|0;\n    $157 = $155;\n    $158 = $156;\n    $159 = (($157) - ($158))|0;\n    $160 = (($159|0) / 4)&-1;\n    $161 = $160<<1;\n    HEAP32[$87>>2] = $161;\n    HEAP32[$88>>2] = 1;\n    $15 = $87;\n    $16 = $88;\n    $162 = $15;\n    $163 = $16;\n    ;HEAP8[$14>>0]=HEAP8[$17>>0]|0;\n    $12 = $162;\n    $13 = $163;\n    $164 = $12;\n    $165 = $13;\n    $9 = $14;\n    $10 = $164;\n    $11 = $165;\n    $166 = $10;\n    $167 = HEAP32[$166>>2]|0;\n    $168 = $11;\n    $169 = HEAP32[$168>>2]|0;\n    $170 = ($167>>>0)<($169>>>0);\n    $171 = $13;\n    $172 = $12;\n    $173 = $170 ? $171 : $172;\n    $174 = HEAP32[$173>>2]|0;\n    $86 = $174;\n    $175 = $86;\n    $176 = $86;\n    $177 = (($176>>>0) / 4)&-1;\n    $4 = $92;\n    $178 = $4;\n    $179 = ((($178)) + 12|0);\n    $3 = $179;\n    $180 = $3;\n    $181 = ((($180)) + 4|0);\n    $2 = $181;\n    $182 = $2;\n    $183 = HEAP32[$182>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($89,$175,$177,$183);\n    $184 = ((($92)) + 4|0);\n    $185 = HEAP32[$184>>2]|0;\n    $5 = $90;\n    $6 = $185;\n    $186 = $5;\n    $187 = $6;\n    HEAP32[$186>>2] = $187;\n    $188 = ((($92)) + 8|0);\n    $189 = HEAP32[$188>>2]|0;\n    $7 = $91;\n    $8 = $189;\n    $190 = $7;\n    $191 = $8;\n    HEAP32[$190>>2] = $191;\n    ;HEAP32[$$byval_copy>>2]=HEAP32[$90>>2]|0;\n    ;HEAP32[$$byval_copy1>>2]=HEAP32[$91>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($89,$$byval_copy,$$byval_copy1);\n    $21 = $92;\n    $22 = $89;\n    $192 = $21;\n    $20 = $192;\n    $193 = $20;\n    $194 = HEAP32[$193>>2]|0;\n    HEAP32[$23>>2] = $194;\n    $195 = $22;\n    $18 = $195;\n    $196 = $18;\n    $197 = HEAP32[$196>>2]|0;\n    $198 = $21;\n    HEAP32[$198>>2] = $197;\n    $19 = $23;\n    $199 = $19;\n    $200 = HEAP32[$199>>2]|0;\n    $201 = $22;\n    HEAP32[$201>>2] = $200;\n    $202 = ((($92)) + 4|0);\n    $203 = ((($89)) + 4|0);\n    $27 = $202;\n    $28 = $203;\n    $204 = $27;\n    $26 = $204;\n    $205 = $26;\n    $206 = HEAP32[$205>>2]|0;\n    HEAP32[$29>>2] = $206;\n    $207 = $28;\n    $24 = $207;\n    $208 = $24;\n    $209 = HEAP32[$208>>2]|0;\n    $210 = $27;\n    HEAP32[$210>>2] = $209;\n    $25 = $29;\n    $211 = $25;\n    $212 = HEAP32[$211>>2]|0;\n    $213 = $28;\n    HEAP32[$213>>2] = $212;\n    $214 = ((($92)) + 8|0);\n    $215 = ((($89)) + 8|0);\n    $33 = $214;\n    $34 = $215;\n    $216 = $33;\n    $32 = $216;\n    $217 = $32;\n    $218 = HEAP32[$217>>2]|0;\n    HEAP32[$35>>2] = $218;\n    $219 = $34;\n    $30 = $219;\n    $220 = $30;\n    $221 = HEAP32[$220>>2]|0;\n    $222 = $33;\n    HEAP32[$222>>2] = $221;\n    $31 = $35;\n    $223 = $31;\n    $224 = HEAP32[$223>>2]|0;\n    $225 = $34;\n    HEAP32[$225>>2] = $224;\n    $38 = $92;\n    $226 = $38;\n    $227 = ((($226)) + 12|0);\n    $37 = $227;\n    $228 = $37;\n    $36 = $228;\n    $229 = $36;\n    $41 = $89;\n    $230 = $41;\n    $231 = ((($230)) + 12|0);\n    $40 = $231;\n    $232 = $40;\n    $39 = $232;\n    $233 = $39;\n    $45 = $229;\n    $46 = $233;\n    $234 = $45;\n    $44 = $234;\n    $235 = $44;\n    $236 = HEAP32[$235>>2]|0;\n    HEAP32[$47>>2] = $236;\n    $237 = $46;\n    $42 = $237;\n    $238 = $42;\n    $239 = HEAP32[$238>>2]|0;\n    $240 = $45;\n    HEAP32[$240>>2] = $239;\n    $43 = $47;\n    $241 = $43;\n    $242 = HEAP32[$241>>2]|0;\n    $243 = $46;\n    HEAP32[$243>>2] = $242;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($89);\n    break;\n   }\n   $105 = ((($92)) + 4|0);\n   $106 = HEAP32[$105>>2]|0;\n   $107 = HEAP32[$92>>2]|0;\n   $108 = $106;\n   $109 = $107;\n   $110 = (($108) - ($109))|0;\n   $111 = (($110|0) / 4)&-1;\n   $85 = $111;\n   $112 = $85;\n   $113 = (($112) + 1)|0;\n   $114 = (($113|0) / 2)&-1;\n   $85 = $114;\n   $115 = ((($92)) + 4|0);\n   $116 = HEAP32[$115>>2]|0;\n   $117 = ((($92)) + 8|0);\n   $118 = HEAP32[$117>>2]|0;\n   $119 = ((($92)) + 4|0);\n   $120 = HEAP32[$119>>2]|0;\n   $121 = $85;\n   $122 = (0 - ($121))|0;\n   $123 = (($120) + ($122<<2)|0);\n   $58 = $116;\n   $59 = $118;\n   $60 = $123;\n   $124 = $58;\n   $57 = $124;\n   $125 = $57;\n   $126 = $59;\n   $51 = $126;\n   $127 = $51;\n   $128 = $60;\n   $52 = $128;\n   $129 = $52;\n   $53 = $125;\n   $54 = $127;\n   $55 = $129;\n   $130 = $54;\n   $131 = $53;\n   $132 = $130;\n   $133 = $131;\n   $134 = (($132) - ($133))|0;\n   $135 = (($134|0) / 4)&-1;\n   $56 = $135;\n   $136 = $56;\n   $137 = ($136>>>0)>(0);\n   if ($137) {\n    $138 = $55;\n    $139 = $53;\n    $140 = $56;\n    $141 = $140<<2;\n    _memmove(($138|0),($139|0),($141|0))|0;\n   }\n   $142 = $55;\n   $143 = $56;\n   $144 = (($142) + ($143<<2)|0);\n   $145 = ((($92)) + 8|0);\n   HEAP32[$145>>2] = $144;\n   $146 = $85;\n   $147 = ((($92)) + 4|0);\n   $148 = HEAP32[$147>>2]|0;\n   $149 = (0 - ($146))|0;\n   $150 = (($148) + ($149<<2)|0);\n   HEAP32[$147>>2] = $150;\n  }\n } while(0);\n $63 = $92;\n $244 = $63;\n $245 = ((($244)) + 12|0);\n $62 = $245;\n $246 = $62;\n $247 = ((($246)) + 4|0);\n $61 = $247;\n $248 = $61;\n $249 = HEAP32[$248>>2]|0;\n $250 = ((($92)) + 8|0);\n $251 = HEAP32[$250>>2]|0;\n $64 = $251;\n $252 = $64;\n $253 = $84;\n $65 = $253;\n $254 = $65;\n $76 = $249;\n $77 = $252;\n $78 = $254;\n $255 = $76;\n $256 = $77;\n $257 = $78;\n $75 = $257;\n $258 = $75;\n ;HEAP8[$74>>0]=HEAP8[$79>>0]|0;\n $71 = $255;\n $72 = $256;\n $73 = $258;\n $259 = $71;\n $260 = $72;\n $261 = $73;\n $70 = $261;\n $262 = $70;\n $67 = $259;\n $68 = $260;\n $69 = $262;\n $263 = $68;\n $264 = $69;\n $66 = $264;\n $265 = $66;\n $266 = HEAP32[$265>>2]|0;\n HEAP32[$263>>2] = $266;\n $267 = ((($92)) + 8|0);\n $268 = HEAP32[$267>>2]|0;\n $269 = ((($268)) + 4|0);\n HEAP32[$267>>2] = $269;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE10push_frontERKS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 400|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(400|0);\n $$byval_copy1 = sp + 384|0;\n $$byval_copy = sp + 380|0;\n $10 = sp + 8|0;\n $13 = sp + 389|0;\n $26 = sp + 288|0;\n $32 = sp + 264|0;\n $38 = sp + 240|0;\n $50 = sp + 192|0;\n $76 = sp;\n $81 = sp + 388|0;\n $89 = sp + 44|0;\n $90 = sp + 40|0;\n $91 = sp + 20|0;\n $92 = sp + 16|0;\n $93 = sp + 12|0;\n $85 = $0;\n $86 = $1;\n $94 = $85;\n $95 = ((($94)) + 4|0);\n $96 = HEAP32[$95>>2]|0;\n $97 = HEAP32[$94>>2]|0;\n $98 = ($96|0)==($97|0);\n do {\n  if ($98) {\n   $99 = ((($94)) + 8|0);\n   $100 = HEAP32[$99>>2]|0;\n   $84 = $94;\n   $101 = $84;\n   $102 = ((($101)) + 12|0);\n   $83 = $102;\n   $103 = $83;\n   $82 = $103;\n   $104 = $82;\n   $105 = HEAP32[$104>>2]|0;\n   $106 = ($100>>>0)<($105>>>0);\n   if (!($106)) {\n    $20 = $94;\n    $157 = $20;\n    $158 = ((($157)) + 12|0);\n    $19 = $158;\n    $159 = $19;\n    $18 = $159;\n    $160 = $18;\n    $161 = HEAP32[$160>>2]|0;\n    $162 = HEAP32[$94>>2]|0;\n    $163 = $161;\n    $164 = $162;\n    $165 = (($163) - ($164))|0;\n    $166 = (($165|0) / 4)&-1;\n    $167 = $166<<1;\n    HEAP32[$89>>2] = $167;\n    HEAP32[$90>>2] = 1;\n    $11 = $89;\n    $12 = $90;\n    $168 = $11;\n    $169 = $12;\n    ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n    $8 = $168;\n    $9 = $169;\n    $170 = $8;\n    $171 = $9;\n    $5 = $10;\n    $6 = $170;\n    $7 = $171;\n    $172 = $6;\n    $173 = HEAP32[$172>>2]|0;\n    $174 = $7;\n    $175 = HEAP32[$174>>2]|0;\n    $176 = ($173>>>0)<($175>>>0);\n    $177 = $9;\n    $178 = $8;\n    $179 = $176 ? $177 : $178;\n    $180 = HEAP32[$179>>2]|0;\n    $88 = $180;\n    $181 = $88;\n    $182 = $88;\n    $183 = (($182) + 3)|0;\n    $184 = (($183>>>0) / 4)&-1;\n    $4 = $94;\n    $185 = $4;\n    $186 = ((($185)) + 12|0);\n    $3 = $186;\n    $187 = $3;\n    $188 = ((($187)) + 4|0);\n    $2 = $188;\n    $189 = $2;\n    $190 = HEAP32[$189>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($91,$181,$184,$190);\n    $191 = ((($94)) + 4|0);\n    $192 = HEAP32[$191>>2]|0;\n    $14 = $92;\n    $15 = $192;\n    $193 = $14;\n    $194 = $15;\n    HEAP32[$193>>2] = $194;\n    $195 = ((($94)) + 8|0);\n    $196 = HEAP32[$195>>2]|0;\n    $16 = $93;\n    $17 = $196;\n    $197 = $16;\n    $198 = $17;\n    HEAP32[$197>>2] = $198;\n    ;HEAP32[$$byval_copy>>2]=HEAP32[$92>>2]|0;\n    ;HEAP32[$$byval_copy1>>2]=HEAP32[$93>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($91,$$byval_copy,$$byval_copy1);\n    $24 = $94;\n    $25 = $91;\n    $199 = $24;\n    $23 = $199;\n    $200 = $23;\n    $201 = HEAP32[$200>>2]|0;\n    HEAP32[$26>>2] = $201;\n    $202 = $25;\n    $21 = $202;\n    $203 = $21;\n    $204 = HEAP32[$203>>2]|0;\n    $205 = $24;\n    HEAP32[$205>>2] = $204;\n    $22 = $26;\n    $206 = $22;\n    $207 = HEAP32[$206>>2]|0;\n    $208 = $25;\n    HEAP32[$208>>2] = $207;\n    $209 = ((($94)) + 4|0);\n    $210 = ((($91)) + 4|0);\n    $30 = $209;\n    $31 = $210;\n    $211 = $30;\n    $29 = $211;\n    $212 = $29;\n    $213 = HEAP32[$212>>2]|0;\n    HEAP32[$32>>2] = $213;\n    $214 = $31;\n    $27 = $214;\n    $215 = $27;\n    $216 = HEAP32[$215>>2]|0;\n    $217 = $30;\n    HEAP32[$217>>2] = $216;\n    $28 = $32;\n    $218 = $28;\n    $219 = HEAP32[$218>>2]|0;\n    $220 = $31;\n    HEAP32[$220>>2] = $219;\n    $221 = ((($94)) + 8|0);\n    $222 = ((($91)) + 8|0);\n    $36 = $221;\n    $37 = $222;\n    $223 = $36;\n    $35 = $223;\n    $224 = $35;\n    $225 = HEAP32[$224>>2]|0;\n    HEAP32[$38>>2] = $225;\n    $226 = $37;\n    $33 = $226;\n    $227 = $33;\n    $228 = HEAP32[$227>>2]|0;\n    $229 = $36;\n    HEAP32[$229>>2] = $228;\n    $34 = $38;\n    $230 = $34;\n    $231 = HEAP32[$230>>2]|0;\n    $232 = $37;\n    HEAP32[$232>>2] = $231;\n    $41 = $94;\n    $233 = $41;\n    $234 = ((($233)) + 12|0);\n    $40 = $234;\n    $235 = $40;\n    $39 = $235;\n    $236 = $39;\n    $44 = $91;\n    $237 = $44;\n    $238 = ((($237)) + 12|0);\n    $43 = $238;\n    $239 = $43;\n    $42 = $239;\n    $240 = $42;\n    $48 = $236;\n    $49 = $240;\n    $241 = $48;\n    $47 = $241;\n    $242 = $47;\n    $243 = HEAP32[$242>>2]|0;\n    HEAP32[$50>>2] = $243;\n    $244 = $49;\n    $45 = $244;\n    $245 = $45;\n    $246 = HEAP32[$245>>2]|0;\n    $247 = $48;\n    HEAP32[$247>>2] = $246;\n    $46 = $50;\n    $248 = $46;\n    $249 = HEAP32[$248>>2]|0;\n    $250 = $49;\n    HEAP32[$250>>2] = $249;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($91);\n    break;\n   }\n   $63 = $94;\n   $107 = $63;\n   $108 = ((($107)) + 12|0);\n   $62 = $108;\n   $109 = $62;\n   $61 = $109;\n   $110 = $61;\n   $111 = HEAP32[$110>>2]|0;\n   $112 = ((($94)) + 8|0);\n   $113 = HEAP32[$112>>2]|0;\n   $114 = $111;\n   $115 = $113;\n   $116 = (($114) - ($115))|0;\n   $117 = (($116|0) / 4)&-1;\n   $87 = $117;\n   $118 = $87;\n   $119 = (($118) + 1)|0;\n   $120 = (($119|0) / 2)&-1;\n   $87 = $120;\n   $121 = ((($94)) + 4|0);\n   $122 = HEAP32[$121>>2]|0;\n   $123 = ((($94)) + 8|0);\n   $124 = HEAP32[$123>>2]|0;\n   $125 = ((($94)) + 8|0);\n   $126 = HEAP32[$125>>2]|0;\n   $127 = $87;\n   $128 = (($126) + ($127<<2)|0);\n   $58 = $122;\n   $59 = $124;\n   $60 = $128;\n   $129 = $58;\n   $57 = $129;\n   $130 = $57;\n   $131 = $59;\n   $51 = $131;\n   $132 = $51;\n   $133 = $60;\n   $52 = $133;\n   $134 = $52;\n   $53 = $130;\n   $54 = $132;\n   $55 = $134;\n   $135 = $54;\n   $136 = $53;\n   $137 = $135;\n   $138 = $136;\n   $139 = (($137) - ($138))|0;\n   $140 = (($139|0) / 4)&-1;\n   $56 = $140;\n   $141 = $56;\n   $142 = ($141>>>0)>(0);\n   if ($142) {\n    $143 = $56;\n    $144 = $55;\n    $145 = (0 - ($143))|0;\n    $146 = (($144) + ($145<<2)|0);\n    $55 = $146;\n    $147 = $55;\n    $148 = $53;\n    $149 = $56;\n    $150 = $149<<2;\n    _memmove(($147|0),($148|0),($150|0))|0;\n   }\n   $151 = $55;\n   $152 = ((($94)) + 4|0);\n   HEAP32[$152>>2] = $151;\n   $153 = $87;\n   $154 = ((($94)) + 8|0);\n   $155 = HEAP32[$154>>2]|0;\n   $156 = (($155) + ($153<<2)|0);\n   HEAP32[$154>>2] = $156;\n  }\n } while(0);\n $66 = $94;\n $251 = $66;\n $252 = ((($251)) + 12|0);\n $65 = $252;\n $253 = $65;\n $254 = ((($253)) + 4|0);\n $64 = $254;\n $255 = $64;\n $256 = HEAP32[$255>>2]|0;\n $257 = ((($94)) + 4|0);\n $258 = HEAP32[$257>>2]|0;\n $259 = ((($258)) + -4|0);\n $67 = $259;\n $260 = $67;\n $261 = $86;\n $78 = $256;\n $79 = $260;\n $80 = $261;\n $262 = $78;\n $263 = $79;\n $264 = $80;\n $77 = $264;\n $265 = $77;\n ;HEAP8[$76>>0]=HEAP8[$81>>0]|0;\n $73 = $262;\n $74 = $263;\n $75 = $265;\n $266 = $73;\n $267 = $74;\n $268 = $75;\n $72 = $268;\n $269 = $72;\n $69 = $266;\n $70 = $267;\n $71 = $269;\n $270 = $70;\n $271 = $71;\n $68 = $271;\n $272 = $68;\n $273 = HEAP32[$272>>2]|0;\n HEAP32[$270>>2] = $273;\n $274 = ((($94)) + 4|0);\n $275 = HEAP32[$274>>2]|0;\n $276 = ((($275)) + -4|0);\n HEAP32[$274>>2] = $276;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -4|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n }\n $60 = HEAP32[$35>>2]|0;\n $61 = ($60|0)!=(0|0);\n if (!($61)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $62 = $14;\n $63 = ((($62)) + 12|0);\n $13 = $63;\n $64 = $13;\n $65 = ((($64)) + 4|0);\n $12 = $65;\n $66 = $12;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$35>>2]|0;\n $4 = $35;\n $69 = $4;\n $3 = $69;\n $70 = $3;\n $71 = ((($70)) + 12|0);\n $2 = $71;\n $72 = $2;\n $1 = $72;\n $73 = $1;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 4)&-1;\n $9 = $67;\n $10 = $68;\n $11 = $79;\n $80 = $9;\n $81 = $10;\n $82 = $11;\n $6 = $80;\n $7 = $81;\n $8 = $82;\n $83 = $7;\n $5 = $83;\n $84 = $5;\n __ZdlPv($84);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);\n $17 = sp;\n $22 = sp + 100|0;\n $27 = $0;\n $29 = $27;\n $26 = $29;\n $30 = $26;\n $31 = ((($30)) + 12|0);\n $25 = $31;\n $32 = $25;\n $33 = ((($32)) + 4|0);\n $24 = $33;\n $34 = $24;\n $35 = HEAP32[$34>>2]|0;\n $28 = $35;\n while(1) {\n  $5 = $1;\n  $6 = $2;\n  $36 = $5;\n  $4 = $36;\n  $37 = $4;\n  $38 = HEAP32[$37>>2]|0;\n  $39 = $6;\n  $3 = $39;\n  $40 = $3;\n  $41 = HEAP32[$40>>2]|0;\n  $42 = ($38|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $43 = $28;\n  $44 = ((($29)) + 8|0);\n  $45 = HEAP32[$44>>2]|0;\n  $7 = $45;\n  $46 = $7;\n  $8 = $1;\n  $47 = $8;\n  $48 = HEAP32[$47>>2]|0;\n  $19 = $43;\n  $20 = $46;\n  $21 = $48;\n  $49 = $19;\n  $50 = $20;\n  $51 = $21;\n  $18 = $51;\n  $52 = $18;\n  ;HEAP8[$17>>0]=HEAP8[$22>>0]|0;\n  $14 = $49;\n  $15 = $50;\n  $16 = $52;\n  $53 = $14;\n  $54 = $15;\n  $55 = $16;\n  $13 = $55;\n  $56 = $13;\n  $10 = $53;\n  $11 = $54;\n  $12 = $56;\n  $57 = $11;\n  $58 = $12;\n  $9 = $58;\n  $59 = $9;\n  $60 = HEAP32[$59>>2]|0;\n  HEAP32[$57>>2] = $60;\n  $61 = ((($29)) + 8|0);\n  $62 = HEAP32[$61>>2]|0;\n  $63 = ((($62)) + 4|0);\n  HEAP32[$61>>2] = $63;\n  $23 = $1;\n  $64 = $23;\n  $65 = HEAP32[$64>>2]|0;\n  $66 = ((($65)) + 4|0);\n  HEAP32[$64>>2] = $66;\n }\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $7 = $1;\n $9 = $7;\n $6 = $9;\n $10 = $6;\n $11 = ((($10)) + 4|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($9)) + 16|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = (($14>>>0) / 93)&-1;\n $16 = (($12) + ($15<<2)|0);\n $8 = $16;\n $17 = $8;\n $5 = $9;\n $18 = $5;\n $19 = ((($18)) + 8|0);\n $20 = HEAP32[$19>>2]|0;\n $21 = ((($18)) + 4|0);\n $22 = HEAP32[$21>>2]|0;\n $23 = ($20|0)==($22|0);\n if ($23) {\n  $30 = 0;\n } else {\n  $24 = $8;\n  $25 = HEAP32[$24>>2]|0;\n  $26 = ((($9)) + 16|0);\n  $27 = HEAP32[$26>>2]|0;\n  $28 = (($27>>>0) % 93)&-1;\n  $29 = (($25) + (($28*44)|0)|0);\n  $30 = $29;\n }\n $2 = $0;\n $3 = $17;\n $4 = $30;\n $31 = $2;\n $32 = $3;\n HEAP32[$31>>2] = $32;\n $33 = ((($31)) + 4|0);\n $34 = $4;\n HEAP32[$33>>2] = $34;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = $1;\n $13 = $10;\n $9 = $13;\n $14 = $9;\n $15 = ((($14)) + 20|0);\n $8 = $15;\n $16 = $8;\n $7 = $16;\n $17 = $7;\n $18 = HEAP32[$17>>2]|0;\n $19 = ((($13)) + 16|0);\n $20 = HEAP32[$19>>2]|0;\n $21 = (($18) + ($20))|0;\n $11 = $21;\n $6 = $13;\n $22 = $6;\n $23 = ((($22)) + 4|0);\n $24 = HEAP32[$23>>2]|0;\n $25 = $11;\n $26 = (($25>>>0) / 93)&-1;\n $27 = (($24) + ($26<<2)|0);\n $12 = $27;\n $28 = $12;\n $2 = $13;\n $29 = $2;\n $30 = ((($29)) + 8|0);\n $31 = HEAP32[$30>>2]|0;\n $32 = ((($29)) + 4|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = ($31|0)==($33|0);\n if ($34) {\n  $40 = 0;\n  $3 = $0;\n  $4 = $28;\n  $5 = $40;\n  $41 = $3;\n  $42 = $4;\n  HEAP32[$41>>2] = $42;\n  $43 = ((($41)) + 4|0);\n  $44 = $5;\n  HEAP32[$43>>2] = $44;\n  STACKTOP = sp;return;\n }\n $35 = $12;\n $36 = HEAP32[$35>>2]|0;\n $37 = $11;\n $38 = (($37>>>0) % 93)&-1;\n $39 = (($36) + (($38*44)|0)|0);\n $40 = $39;\n $3 = $0;\n $4 = $28;\n $5 = $40;\n $41 = $3;\n $42 = $4;\n HEAP32[$41>>2] = $42;\n $43 = ((($41)) + 4|0);\n $44 = $5;\n HEAP32[$43>>2] = $44;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5clearEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;\n var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;\n var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;\n var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;\n var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;\n var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);\n $6 = sp + 8|0;\n $9 = sp + 177|0;\n $26 = sp;\n $29 = sp + 176|0;\n $41 = sp + 24|0;\n $42 = sp + 16|0;\n $39 = $0;\n $43 = $39;\n $38 = $43;\n $44 = $38;\n $45 = ((($44)) + 20|0);\n $37 = $45;\n $46 = $37;\n $36 = $46;\n $47 = $36;\n $40 = $47;\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($41,$43);\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($42,$43);\n while(1) {\n  $34 = $41;\n  $35 = $42;\n  $48 = $34;\n  $49 = $35;\n  $32 = $48;\n  $33 = $49;\n  $50 = $32;\n  $51 = ((($50)) + 4|0);\n  $52 = HEAP32[$51>>2]|0;\n  $53 = $33;\n  $54 = ((($53)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $56 = ($52|0)==($55|0);\n  $57 = $56 ^ 1;\n  if (!($57)) {\n   break;\n  }\n  $58 = $40;\n  $16 = $41;\n  $59 = $16;\n  $60 = ((($59)) + 4|0);\n  $61 = HEAP32[$60>>2]|0;\n  $1 = $61;\n  $62 = $1;\n  $7 = $58;\n  $8 = $62;\n  $63 = $7;\n  $64 = $8;\n  ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n  $4 = $63;\n  $5 = $64;\n  $65 = $4;\n  $66 = $5;\n  $2 = $65;\n  $3 = $66;\n  $67 = $3;\n  __ZN6laszip6models10arithmeticD2Ev($67);\n  $10 = $41;\n  $68 = $10;\n  $69 = ((($68)) + 4|0);\n  $70 = HEAP32[$69>>2]|0;\n  $71 = ((($70)) + 44|0);\n  HEAP32[$69>>2] = $71;\n  $72 = HEAP32[$68>>2]|0;\n  $73 = HEAP32[$72>>2]|0;\n  $74 = $71;\n  $75 = $73;\n  $76 = (($74) - ($75))|0;\n  $77 = (($76|0) / 44)&-1;\n  $78 = ($77|0)==(93);\n  if ($78) {\n   $79 = HEAP32[$68>>2]|0;\n   $80 = ((($79)) + 4|0);\n   HEAP32[$68>>2] = $80;\n   $81 = HEAP32[$68>>2]|0;\n   $82 = HEAP32[$81>>2]|0;\n   $83 = ((($68)) + 4|0);\n   HEAP32[$83>>2] = $82;\n  }\n }\n $13 = $43;\n $84 = $13;\n $85 = ((($84)) + 20|0);\n $12 = $85;\n $86 = $12;\n $11 = $86;\n $87 = $11;\n HEAP32[$87>>2] = 0;\n while(1) {\n  $14 = $43;\n  $88 = $14;\n  $89 = ((($88)) + 8|0);\n  $90 = HEAP32[$89>>2]|0;\n  $91 = ((($88)) + 4|0);\n  $92 = HEAP32[$91>>2]|0;\n  $93 = $90;\n  $94 = $92;\n  $95 = (($93) - ($94))|0;\n  $96 = (($95|0) / 4)&-1;\n  $97 = ($96>>>0)>(2);\n  if (!($97)) {\n   break;\n  }\n  $98 = $40;\n  $15 = $43;\n  $99 = $15;\n  $100 = ((($99)) + 4|0);\n  $101 = HEAP32[$100>>2]|0;\n  $102 = HEAP32[$101>>2]|0;\n  $21 = $98;\n  $22 = $102;\n  $23 = 93;\n  $103 = $21;\n  $104 = $22;\n  $105 = $23;\n  $18 = $103;\n  $19 = $104;\n  $20 = $105;\n  $106 = $19;\n  $17 = $106;\n  $107 = $17;\n  __ZdlPv($107);\n  $30 = $43;\n  $108 = $30;\n  $109 = ((($108)) + 4|0);\n  $110 = HEAP32[$109>>2]|0;\n  $111 = ((($110)) + 4|0);\n  $27 = $108;\n  $28 = $111;\n  $112 = $27;\n  $113 = $28;\n  ;HEAP8[$26>>0]=HEAP8[$29>>0]|0;\n  $24 = $112;\n  $25 = $113;\n  $114 = $24;\n  $115 = $25;\n  $116 = ((($114)) + 4|0);\n  HEAP32[$116>>2] = $115;\n }\n $31 = $43;\n $117 = $31;\n $118 = ((($117)) + 8|0);\n $119 = HEAP32[$118>>2]|0;\n $120 = ((($117)) + 4|0);\n $121 = HEAP32[$120>>2]|0;\n $122 = $119;\n $123 = $121;\n $124 = (($122) - ($123))|0;\n $125 = (($124|0) / 4)&-1;\n switch ($125|0) {\n case 1:  {\n  $126 = ((($43)) + 16|0);\n  HEAP32[$126>>2] = 46;\n  STACKTOP = sp;return;\n  break;\n }\n case 2:  {\n  $127 = ((($43)) + 16|0);\n  HEAP32[$127>>2] = 93;\n  STACKTOP = sp;return;\n  break;\n }\n default: {\n  STACKTOP = sp;return;\n }\n }\n}\nfunction __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $7 = $1;\n $9 = $7;\n $6 = $9;\n $10 = $6;\n $11 = ((($10)) + 4|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($9)) + 16|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = (($14>>>0) / 93)&-1;\n $16 = (($12) + ($15<<2)|0);\n $8 = $16;\n $17 = $8;\n $5 = $9;\n $18 = $5;\n $19 = ((($18)) + 8|0);\n $20 = HEAP32[$19>>2]|0;\n $21 = ((($18)) + 4|0);\n $22 = HEAP32[$21>>2]|0;\n $23 = ($20|0)==($22|0);\n if ($23) {\n  $30 = 0;\n } else {\n  $24 = $8;\n  $25 = HEAP32[$24>>2]|0;\n  $26 = ((($9)) + 16|0);\n  $27 = HEAP32[$26>>2]|0;\n  $28 = (($27>>>0) % 93)&-1;\n  $29 = (($25) + (($28*44)|0)|0);\n  $30 = $29;\n }\n $2 = $0;\n $3 = $17;\n $4 = $30;\n $31 = $2;\n $32 = $3;\n HEAP32[$31>>2] = $32;\n $33 = ((($31)) + 4|0);\n $34 = $4;\n HEAP32[$33>>2] = $34;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);\n $5 = sp + 268|0;\n $8 = sp + 256|0;\n $13 = sp + 236|0;\n $16 = sp + 224|0;\n $28 = sp + 176|0;\n $31 = sp + 164|0;\n $46 = sp + 104|0;\n $50 = sp + 88|0;\n $63 = sp + 36|0;\n $64 = sp + 32|0;\n $65 = sp + 24|0;\n $66 = sp + 16|0;\n $67 = sp + 12|0;\n $68 = sp + 8|0;\n $69 = sp;\n $59 = $0;\n $60 = $1;\n $61 = $2;\n $70 = $59;\n $71 = ((($70)) + 4|0);\n $72 = HEAP8[$71>>0]|0;\n $73 = $72&1;\n if (!($73)) {\n  $74 = $60;\n  $75 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($74)|0);\n  $76 = $61;\n  $77 = HEAP32[$70>>2]|0;\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($75,$76,$77);\n  $78 = $61;\n  $79 = $61;\n  $80 = HEAP32[$70>>2]|0;\n  $81 = (($79) + ($80)|0);\n  $82 = ((($70)) + 8|0);\n  $57 = $82;\n  $83 = $57;\n  $84 = HEAP32[$83>>2]|0;\n  $56 = $84;\n  $85 = $56;\n  $39 = $78;\n  $40 = $81;\n  $41 = $85;\n  $86 = $39;\n  $38 = $86;\n  $87 = $38;\n  $88 = $40;\n  $33 = $88;\n  $89 = $33;\n  $90 = $41;\n  $34 = $90;\n  $91 = $34;\n  $35 = $87;\n  $36 = $89;\n  $37 = $91;\n  while(1) {\n   $92 = $35;\n   $93 = $36;\n   $94 = ($92|0)!=($93|0);\n   if (!($94)) {\n    break;\n   }\n   $95 = $35;\n   $96 = HEAP8[$95>>0]|0;\n   $97 = $37;\n   HEAP8[$97>>0] = $96;\n   $98 = $35;\n   $99 = ((($98)) + 1|0);\n   $35 = $99;\n   $100 = $37;\n   $101 = ((($100)) + 1|0);\n   $37 = $101;\n  }\n  $102 = ((($70)) + 4|0);\n  HEAP8[$102>>0] = 1;\n  $103 = $61;\n  $104 = HEAP32[$70>>2]|0;\n  $105 = (($103) + ($104)|0);\n  $58 = $105;\n  $193 = $58;\n  STACKTOP = sp;return ($193|0);\n }\n $106 = ((($70)) + 20|0);\n $62 = $106;\n $107 = $62;\n $32 = $107;\n $108 = $32;\n $109 = HEAP32[$108>>2]|0;\n $29 = $108;\n $30 = $109;\n $110 = $30;\n $26 = $28;\n $27 = $110;\n $111 = $26;\n $112 = $27;\n HEAP32[$111>>2] = $112;\n $113 = HEAP32[$28>>2]|0;\n HEAP32[$31>>2] = $113;\n $114 = HEAP32[$31>>2]|0;\n HEAP32[$63>>2] = $114;\n $115 = ((($70)) + 8|0);\n $9 = $115;\n $116 = $9;\n $117 = HEAP32[$116>>2]|0;\n $6 = $116;\n $7 = $117;\n $118 = $7;\n $3 = $5;\n $4 = $118;\n $119 = $3;\n $120 = $4;\n HEAP32[$119>>2] = $120;\n $121 = HEAP32[$5>>2]|0;\n HEAP32[$8>>2] = $121;\n $122 = HEAP32[$8>>2]|0;\n HEAP32[$64>>2] = $122;\n $123 = ((($70)) + 32|0);\n $10 = $123;\n $124 = $10;\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($65,$124);\n while(1) {\n  $125 = ((($70)) + 8|0);\n  $17 = $125;\n  $126 = $17;\n  $127 = ((($126)) + 4|0);\n  $128 = HEAP32[$127>>2]|0;\n  $14 = $126;\n  $15 = $128;\n  $129 = $15;\n  $11 = $13;\n  $12 = $129;\n  $130 = $11;\n  $131 = $12;\n  HEAP32[$130>>2] = $131;\n  $132 = HEAP32[$13>>2]|0;\n  HEAP32[$16>>2] = $132;\n  $133 = HEAP32[$16>>2]|0;\n  HEAP32[$66>>2] = $133;\n  $22 = $64;\n  $23 = $66;\n  $134 = $22;\n  $135 = $23;\n  $20 = $134;\n  $21 = $135;\n  $136 = $20;\n  $19 = $136;\n  $137 = $19;\n  $138 = HEAP32[$137>>2]|0;\n  $139 = $21;\n  $18 = $139;\n  $140 = $18;\n  $141 = HEAP32[$140>>2]|0;\n  $142 = ($138|0)==($141|0);\n  $143 = $142 ^ 1;\n  if (!($143)) {\n   break;\n  }\n  $24 = $64;\n  $144 = $24;\n  $145 = HEAP32[$144>>2]|0;\n  $146 = HEAP8[$145>>0]|0;\n  $147 = $146&255;\n  $148 = $60;\n  $25 = $65;\n  $149 = $25;\n  $150 = ((($149)) + 4|0);\n  $151 = HEAP32[$150>>2]|0;\n  $152 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($148,$151)|0);\n  $153 = (($147) + ($152))|0;\n  $154 = (__Z7u8_foldi($153)|0);\n  $42 = $63;\n  $155 = $42;\n  $156 = HEAP32[$155>>2]|0;\n  HEAP8[$156>>0] = $154;\n  $43 = $63;\n  $157 = $43;\n  $158 = HEAP32[$157>>2]|0;\n  $159 = HEAP8[$158>>0]|0;\n  $160 = $61;\n  HEAP8[$160>>0] = $159;\n  $44 = $64;\n  $161 = $44;\n  $162 = HEAP32[$161>>2]|0;\n  HEAP8[$162>>0] = $159;\n  $47 = $64;\n  $48 = 0;\n  $163 = $47;\n  ;HEAP32[$46>>2]=HEAP32[$163>>2]|0;\n  $45 = $163;\n  $164 = $45;\n  $165 = HEAP32[$164>>2]|0;\n  $166 = ((($165)) + 1|0);\n  HEAP32[$164>>2] = $166;\n  $167 = HEAP32[$46>>2]|0;\n  HEAP32[$67>>2] = $167;\n  $168 = $61;\n  $169 = ((($168)) + 1|0);\n  $61 = $169;\n  $51 = $63;\n  $52 = 0;\n  $170 = $51;\n  ;HEAP32[$50>>2]=HEAP32[$170>>2]|0;\n  $49 = $170;\n  $171 = $49;\n  $172 = HEAP32[$171>>2]|0;\n  $173 = ((($172)) + 1|0);\n  HEAP32[$171>>2] = $173;\n  $174 = HEAP32[$50>>2]|0;\n  HEAP32[$68>>2] = $174;\n  $54 = $65;\n  $55 = 0;\n  $175 = $54;\n  ;HEAP32[$69>>2]=HEAP32[$175>>2]|0;HEAP32[$69+4>>2]=HEAP32[$175+4>>2]|0;\n  $53 = $175;\n  $176 = $53;\n  $177 = ((($176)) + 4|0);\n  $178 = HEAP32[$177>>2]|0;\n  $179 = ((($178)) + 44|0);\n  HEAP32[$177>>2] = $179;\n  $180 = HEAP32[$176>>2]|0;\n  $181 = HEAP32[$180>>2]|0;\n  $182 = $179;\n  $183 = $181;\n  $184 = (($182) - ($183))|0;\n  $185 = (($184|0) / 44)&-1;\n  $186 = ($185|0)==(93);\n  if ($186) {\n   $187 = HEAP32[$176>>2]|0;\n   $188 = ((($187)) + 4|0);\n   HEAP32[$176>>2] = $188;\n   $189 = HEAP32[$176>>2]|0;\n   $190 = HEAP32[$189>>2]|0;\n   $191 = ((($176)) + 4|0);\n   HEAP32[$191>>2] = $190;\n  }\n }\n $192 = $61;\n $58 = $192;\n $193 = $58;\n STACKTOP = sp;return ($193|0);\n}\nfunction __Z7u8_foldi($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = $2&255;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 480;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $12 = sp + 8|0;\n $13 = $0;\n $14 = $1;\n $15 = $13;\n $11 = $15;\n $16 = $11;\n $10 = $16;\n HEAP32[$16>>2] = 0;\n $17 = ((($16)) + 4|0);\n HEAP32[$17>>2] = 0;\n $18 = ((($16)) + 8|0);\n HEAP32[$12>>2] = 0;\n $8 = $18;\n $9 = $12;\n $19 = $8;\n $20 = $9;\n $7 = $20;\n $21 = $7;\n $3 = $19;\n $4 = $21;\n $22 = $3;\n $23 = $4;\n $2 = $23;\n HEAP32[$22>>2] = 0;\n $6 = $19;\n $24 = $6;\n $5 = $24;\n $25 = $14;\n $26 = ($25>>>0)>(0);\n if (!($26)) {\n  STACKTOP = sp;return;\n }\n $27 = $14;\n __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($15,$27);\n $28 = $14;\n __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endEj($15,$28);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2EjRKS3_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);\n $20 = sp + 20|0;\n $22 = sp + 12|0;\n $23 = $0;\n $24 = $1;\n $25 = $2;\n $26 = $23;\n $21 = $26;\n $27 = $21;\n $19 = $27;\n $28 = $19;\n HEAP32[$28>>2] = 0;\n $29 = ((($28)) + 4|0);\n HEAP32[$29>>2] = 0;\n $30 = ((($28)) + 8|0);\n HEAP32[$30>>2] = 0;\n $31 = ((($28)) + 12|0);\n HEAP32[$20>>2] = 0;\n $17 = $31;\n $18 = $20;\n $32 = $17;\n $33 = $18;\n $16 = $33;\n $34 = $16;\n $12 = $32;\n $13 = $34;\n $35 = $12;\n $36 = $13;\n $11 = $36;\n HEAP32[$35>>2] = 0;\n $15 = $32;\n $37 = $15;\n $14 = $37;\n $38 = ((($27)) + 16|0);\n HEAP32[$38>>2] = 0;\n $39 = ((($27)) + 20|0);\n HEAP32[$22>>2] = 0;\n $9 = $39;\n $10 = $22;\n $40 = $9;\n $41 = $10;\n $8 = $41;\n $42 = $8;\n $4 = $40;\n $5 = $42;\n $43 = $4;\n $44 = $5;\n $3 = $44;\n $45 = $3;\n $46 = HEAP32[$45>>2]|0;\n HEAP32[$43>>2] = $46;\n $7 = $40;\n $47 = $7;\n $6 = $47;\n $48 = $24;\n $49 = ($48>>>0)>(0);\n if (!($49)) {\n  STACKTOP = sp;return;\n }\n $50 = $24;\n $51 = $25;\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendEjRKS3_($26,$50,$51);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $10 = sp;\n $13 = sp + 73|0;\n $21 = sp + 72|0;\n $18 = $0;\n $19 = $1;\n $22 = $18;\n $17 = $22;\n $23 = $17;\n $24 = ((($23)) + 8|0);\n $16 = $24;\n $25 = $16;\n $15 = $25;\n $26 = $15;\n $20 = $26;\n while(1) {\n  $2 = $21;\n  $3 = $22;\n  $4 = 1;\n  $27 = $20;\n  $28 = ((($22)) + 4|0);\n  $29 = HEAP32[$28>>2]|0;\n  $5 = $29;\n  $30 = $5;\n  $11 = $27;\n  $12 = $30;\n  $31 = $11;\n  $32 = $12;\n  ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n  $8 = $31;\n  $9 = $32;\n  $33 = $8;\n  $34 = $9;\n  $6 = $33;\n  $7 = $34;\n  $35 = $7;\n  HEAP8[$35>>0] = 0;\n  $36 = ((($22)) + 4|0);\n  $37 = HEAP32[$36>>2]|0;\n  $38 = ((($37)) + 1|0);\n  HEAP32[$36>>2] = $38;\n  $39 = $19;\n  $40 = (($39) + -1)|0;\n  $19 = $40;\n  $14 = $21;\n  $41 = $19;\n  $42 = ($41>>>0)>(0);\n  if (!($42)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendEjRKS3_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;\n var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;\n var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;\n var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;\n var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;\n var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $20 = sp;\n $25 = sp + 148|0;\n $38 = sp + 8|0;\n $33 = $0;\n $34 = $1;\n $35 = $2;\n $39 = $33;\n $32 = $39;\n $40 = $32;\n $41 = ((($40)) + 20|0);\n $31 = $41;\n $42 = $31;\n $30 = $42;\n $43 = $30;\n $36 = $43;\n $11 = $39;\n $44 = $11;\n $10 = $44;\n $45 = $10;\n $9 = $45;\n $46 = $9;\n $47 = ((($46)) + 8|0);\n $48 = HEAP32[$47>>2]|0;\n $49 = ((($46)) + 4|0);\n $50 = HEAP32[$49>>2]|0;\n $51 = $48;\n $52 = $50;\n $53 = (($51) - ($52))|0;\n $54 = (($53|0) / 4)&-1;\n $55 = ($54|0)==(0);\n if ($55) {\n  $76 = 0;\n } else {\n  $8 = $45;\n  $56 = $8;\n  $57 = ((($56)) + 8|0);\n  $58 = HEAP32[$57>>2]|0;\n  $59 = ((($56)) + 4|0);\n  $60 = HEAP32[$59>>2]|0;\n  $61 = $58;\n  $62 = $60;\n  $63 = (($61) - ($62))|0;\n  $64 = (($63|0) / 4)&-1;\n  $65 = ($64*93)|0;\n  $66 = (($65) - 1)|0;\n  $76 = $66;\n }\n $67 = ((($44)) + 16|0);\n $68 = HEAP32[$67>>2]|0;\n $7 = $44;\n $69 = $7;\n $70 = ((($69)) + 20|0);\n $6 = $70;\n $71 = $6;\n $5 = $71;\n $72 = $5;\n $73 = HEAP32[$72>>2]|0;\n $74 = (($68) + ($73))|0;\n $75 = (($76) - ($74))|0;\n $37 = $75;\n $77 = $34;\n $78 = $37;\n $79 = ($77>>>0)>($78>>>0);\n if ($79) {\n  $80 = $34;\n  $81 = $37;\n  $82 = (($80) - ($81))|0;\n  __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($39,$82);\n }\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($38,$39);\n while(1) {\n  $83 = $34;\n  $84 = ($83|0)!=(0);\n  if (!($84)) {\n   break;\n  }\n  $85 = $36;\n  $3 = $38;\n  $86 = $3;\n  $87 = ((($86)) + 4|0);\n  $88 = HEAP32[$87>>2]|0;\n  $4 = $88;\n  $89 = $4;\n  $90 = $35;\n  $22 = $85;\n  $23 = $89;\n  $24 = $90;\n  $91 = $22;\n  $92 = $23;\n  $93 = $24;\n  $21 = $93;\n  $94 = $21;\n  ;HEAP8[$20>>0]=HEAP8[$25>>0]|0;\n  $17 = $91;\n  $18 = $92;\n  $19 = $94;\n  $95 = $17;\n  $96 = $18;\n  $97 = $19;\n  $16 = $97;\n  $98 = $16;\n  $13 = $95;\n  $14 = $96;\n  $15 = $98;\n  $99 = $14;\n  $100 = $15;\n  $12 = $100;\n  $101 = $12;\n  __ZN6laszip6models10arithmeticC2ERKS1_($99,$101);\n  $102 = $34;\n  $103 = (($102) + -1)|0;\n  $34 = $103;\n  $26 = $38;\n  $104 = $26;\n  $105 = ((($104)) + 4|0);\n  $106 = HEAP32[$105>>2]|0;\n  $107 = ((($106)) + 44|0);\n  HEAP32[$105>>2] = $107;\n  $108 = HEAP32[$104>>2]|0;\n  $109 = HEAP32[$108>>2]|0;\n  $110 = $107;\n  $111 = $109;\n  $112 = (($110) - ($111))|0;\n  $113 = (($112|0) / 44)&-1;\n  $114 = ($113|0)==(93);\n  if ($114) {\n   $115 = HEAP32[$104>>2]|0;\n   $116 = ((($115)) + 4|0);\n   HEAP32[$104>>2] = $116;\n   $117 = HEAP32[$104>>2]|0;\n   $118 = HEAP32[$117>>2]|0;\n   $119 = ((($104)) + 4|0);\n   HEAP32[$119>>2] = $118;\n  }\n  $29 = $39;\n  $120 = $29;\n  $121 = ((($120)) + 20|0);\n  $28 = $121;\n  $122 = $28;\n  $27 = $122;\n  $123 = $27;\n  $124 = HEAP32[$123>>2]|0;\n  $125 = (($124) + 1)|0;\n  HEAP32[$123>>2] = $125;\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEC2ERS9_PSH_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 12|0;\n $11 = $0;\n $12 = $1;\n $13 = $2;\n $14 = $11;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($14);\n HEAP32[$14>>2] = (2256);\n $15 = ((($14)) + 4|0);\n $16 = $12;\n HEAP32[$15>>2] = $16;\n $17 = ((($14)) + 8|0);\n $18 = $13;\n $9 = $17;\n HEAP32[$10>>2] = $18;\n $19 = $9;\n $7 = $19;\n $8 = $10;\n $20 = $7;\n $21 = $8;\n $6 = $21;\n $22 = $6;\n $4 = $20;\n $5 = $22;\n $23 = $4;\n $24 = $5;\n $3 = $24;\n $25 = $3;\n $26 = HEAP32[$25>>2]|0;\n HEAP32[$23>>2] = $26;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISP_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2276);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 8|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $2 = $10;\n $11 = $2;\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($7)) + 4|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $6;\n $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($12,$14,$15)|0);\n STACKTOP = sp;return ($16|0);\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $14 = $13;\n HEAP32[$14>>2] = (2256);\n $15 = ((($14)) + 8|0);\n $12 = $15;\n $16 = $12;\n $9 = $16;\n $10 = 0;\n $17 = $9;\n $8 = $17;\n $18 = $8;\n $7 = $18;\n $19 = $7;\n $20 = HEAP32[$19>>2]|0;\n $11 = $20;\n $21 = $10;\n $4 = $17;\n $22 = $4;\n $3 = $22;\n $23 = $3;\n HEAP32[$23>>2] = $21;\n $24 = $11;\n $25 = ($24|0)!=(0|0);\n if ($25) {\n  $2 = $17;\n  $26 = $2;\n  $1 = $26;\n  $27 = $1;\n  $28 = $11;\n  $5 = $27;\n  $6 = $28;\n  $29 = $6;\n  $30 = ($29|0)==(0|0);\n  if (!($30)) {\n   __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEED2Ev($29);\n   __ZdlPv($29);\n  }\n }\n __ZN6laszip7formats20dynamic_decompressorD2Ev($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 4784|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = HEAP8[$6>>0]|0;\n $8 = $7&1;\n if (!($8)) {\n  $10 = $5;\n  STACKTOP = sp;return ($10|0);\n }\n $9 = $4;\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($9);\n HEAP8[$6>>0] = 0;\n $10 = $5;\n STACKTOP = sp;return ($10|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 520;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP8[$2>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEC2ERS9_PSK_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 12|0;\n $11 = $0;\n $12 = $1;\n $13 = $2;\n $14 = $11;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($14);\n HEAP32[$14>>2] = (2304);\n $15 = ((($14)) + 4|0);\n $16 = $12;\n HEAP32[$15>>2] = $16;\n $17 = ((($14)) + 8|0);\n $18 = $13;\n $9 = $17;\n HEAP32[$10>>2] = $18;\n $19 = $9;\n $7 = $19;\n $8 = $10;\n $20 = $7;\n $21 = $8;\n $6 = $21;\n $22 = $6;\n $4 = $20;\n $5 = $22;\n $23 = $4;\n $24 = $5;\n $3 = $24;\n $25 = $3;\n $26 = HEAP32[$25>>2]|0;\n HEAP32[$23>>2] = $26;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2324);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 8|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $2 = $10;\n $11 = $2;\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($7)) + 4|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $6;\n $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($12,$14,$15)|0);\n STACKTOP = sp;return ($16|0);\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $14 = $13;\n HEAP32[$14>>2] = (2304);\n $15 = ((($14)) + 8|0);\n $12 = $15;\n $16 = $12;\n $9 = $16;\n $10 = 0;\n $17 = $9;\n $8 = $17;\n $18 = $8;\n $7 = $18;\n $19 = $7;\n $20 = HEAP32[$19>>2]|0;\n $11 = $20;\n $21 = $10;\n $4 = $17;\n $22 = $4;\n $3 = $22;\n $23 = $3;\n HEAP32[$23>>2] = $21;\n $24 = $11;\n $25 = ($24|0)!=(0|0);\n if ($25) {\n  $2 = $17;\n  $26 = $2;\n  $1 = $26;\n  $27 = $1;\n  $28 = $11;\n  $5 = $27;\n  $6 = $28;\n  $29 = $6;\n  $30 = ($29|0)==(0|0);\n  if (!($30)) {\n   __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEED2Ev($29);\n   __ZdlPv($29);\n  }\n }\n __ZN6laszip7formats20dynamic_decompressorD2Ev($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 4784|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 328|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEED2Ev($3);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 560;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 328|0);\n __ZN6laszip7formats19record_decompressorIJEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEC2ERS9_PSK_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 12|0;\n $11 = $0;\n $12 = $1;\n $13 = $2;\n $14 = $11;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($14);\n HEAP32[$14>>2] = (2352);\n $15 = ((($14)) + 4|0);\n $16 = $12;\n HEAP32[$15>>2] = $16;\n $17 = ((($14)) + 8|0);\n $18 = $13;\n $9 = $17;\n HEAP32[$10>>2] = $18;\n $19 = $9;\n $7 = $19;\n $8 = $10;\n $20 = $7;\n $21 = $8;\n $6 = $21;\n $22 = $6;\n $4 = $20;\n $5 = $22;\n $23 = $4;\n $24 = $5;\n $3 = $24;\n $25 = $3;\n $26 = HEAP32[$25>>2]|0;\n HEAP32[$23>>2] = $26;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_3rgbENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2372);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 8|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $2 = $10;\n $11 = $2;\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($7)) + 4|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $6;\n $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($12,$14,$15)|0);\n STACKTOP = sp;return ($16|0);\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $14 = $13;\n HEAP32[$14>>2] = (2352);\n $15 = ((($14)) + 8|0);\n $12 = $15;\n $16 = $12;\n $9 = $16;\n $10 = 0;\n $17 = $9;\n $8 = $17;\n $18 = $8;\n $7 = $18;\n $19 = $7;\n $20 = HEAP32[$19>>2]|0;\n $11 = $20;\n $21 = $10;\n $4 = $17;\n $22 = $4;\n $3 = $22;\n $23 = $3;\n HEAP32[$23>>2] = $21;\n $24 = $11;\n $25 = ($24|0)!=(0|0);\n if ($25) {\n  $2 = $17;\n  $26 = $2;\n  $1 = $26;\n  $27 = $1;\n  $28 = $11;\n  $5 = $27;\n  $6 = $28;\n  $29 = $6;\n  $30 = ($29|0)==(0|0);\n  if (!($30)) {\n   __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($29);\n   __ZdlPv($29);\n  }\n }\n __ZN6laszip7formats20dynamic_decompressorD2Ev($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 4784|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 316|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($3);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 600;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 316|0);\n __ZN6laszip7formats19record_decompressorIJEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEC2ERS9_PSN_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 12|0;\n $11 = $0;\n $12 = $1;\n $13 = $2;\n $14 = $11;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($14);\n HEAP32[$14>>2] = (2400);\n $15 = ((($14)) + 4|0);\n $16 = $12;\n HEAP32[$15>>2] = $16;\n $17 = ((($14)) + 8|0);\n $18 = $13;\n $9 = $17;\n HEAP32[$10>>2] = $18;\n $19 = $9;\n $7 = $19;\n $8 = $10;\n $20 = $7;\n $21 = $8;\n $6 = $21;\n $22 = $6;\n $4 = $20;\n $5 = $22;\n $23 = $4;\n $24 = $5;\n $3 = $24;\n $25 = $3;\n $26 = HEAP32[$25>>2]|0;\n HEAP32[$23>>2] = $26;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEENSG_INSH_3rgbENSJ_ISP_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISV_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2420);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 8|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $2 = $10;\n $11 = $2;\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($7)) + 4|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $6;\n $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SO_($12,$14,$15)|0);\n STACKTOP = sp;return ($16|0);\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $14 = $13;\n HEAP32[$14>>2] = (2400);\n $15 = ((($14)) + 8|0);\n $12 = $15;\n $16 = $12;\n $9 = $16;\n $10 = 0;\n $17 = $9;\n $8 = $17;\n $18 = $8;\n $7 = $18;\n $19 = $7;\n $20 = HEAP32[$19>>2]|0;\n $11 = $20;\n $21 = $10;\n $4 = $17;\n $22 = $4;\n $3 = $22;\n $23 = $3;\n HEAP32[$23>>2] = $21;\n $24 = $11;\n $25 = ($24|0)!=(0|0);\n if ($25) {\n  $2 = $17;\n  $26 = $2;\n  $1 = $26;\n  $27 = $1;\n  $28 = $11;\n  $5 = $27;\n  $6 = $28;\n  $29 = $6;\n  $30 = ($29|0)==(0|0);\n  if (!($30)) {\n   __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEED2Ev($29);\n   __ZdlPv($29);\n  }\n }\n __ZN6laszip7formats20dynamic_decompressorD2Ev($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SO_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 4784|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 328|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($3);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 328|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($3);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 640;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 328|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZNK6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10get_headerEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 20|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10buf_streamC2EPhj($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n HEAP32[$6>>2] = $7;\n $8 = ((($6)) + 4|0);\n $9 = $5;\n HEAP32[$8>>2] = $9;\n $10 = ((($6)) + 8|0);\n HEAP32[$10>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamEC2ERS2_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP32[$4>>2] = $5;\n $6 = ((($4)) + 4|0);\n HEAP32[$6>>2] = 0;\n $7 = ((($4)) + 8|0);\n HEAP32[$7>>2] = -1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticI10buf_streamEEEENS0_26dynamic_field_decompressorIT_E3ptrERS7_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 8|0;\n $3 = sp;\n $2 = $1;\n $4 = (__Znwj(24)|0);\n $5 = $2;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEEC2ERS5_($4,$5);\n ;HEAP32[$3>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEEC2IS8_EEPT_NS_9enable_ifIXsr14is_convertibleISC_PS8_EE5valueENS9_5__natEE4typeE($0,$4,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrI10buf_streamEC2IS1_EEPT_NS_9enable_ifIXsr14is_convertibleIS5_PS1_EE5valueENS2_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2448);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrI10buf_streamE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrI10buf_streamED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrI10buf_streamE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 664;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEEC2IS5_EEPT_NS_9enable_ifIXsr14is_convertibleIS9_PS5_EE5valueENS6_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $50 = sp + 76|0;\n $51 = sp + 72|0;\n $52 = sp + 8|0;\n $53 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$52>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$53>>0]=HEAP8[$66>>0]|0;\n $49 = $79;\n HEAP32[$50>>2] = $80;\n $81 = $49;\n $47 = $81;\n $48 = 0;\n $82 = $47;\n $83 = $48;\n $45 = $82;\n $46 = $83;\n $84 = $45;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $46;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $48;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2476);\n $89 = ((($81)) + 12|0);\n $21 = $53;\n $90 = $21;\n $30 = $51;\n $31 = $50;\n $32 = $90;\n $91 = $30;\n $92 = $31;\n $29 = $92;\n $93 = $29;\n $23 = $91;\n $24 = $93;\n $94 = $23;\n $95 = $24;\n $22 = $95;\n $96 = $22;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $32;\n $25 = $98;\n $99 = $25;\n $27 = $91;\n $28 = $99;\n $100 = $28;\n $26 = $100;\n $33 = $52;\n $101 = $33;\n $42 = $89;\n $43 = $51;\n $44 = $101;\n $102 = $42;\n $103 = $43;\n $41 = $103;\n $104 = $41;\n $35 = $102;\n $36 = $104;\n $105 = $35;\n $106 = $36;\n $34 = $106;\n $107 = $34;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $44;\n $37 = $108;\n $109 = $37;\n $39 = $102;\n $40 = $109;\n $110 = $40;\n $38 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $20 = $65;\n $120 = $20;\n $17 = $120;\n $18 = 0;\n $121 = $17;\n $16 = $121;\n $122 = $16;\n $15 = $122;\n $123 = $15;\n $124 = HEAP32[$123>>2]|0;\n $19 = $124;\n $125 = $18;\n $12 = $121;\n $126 = $12;\n $11 = $126;\n $127 = $11;\n HEAP32[$127>>2] = $125;\n $128 = $19;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $10 = $121;\n $130 = $10;\n $9 = $130;\n $131 = $9;\n $132 = $19;\n $13 = $131;\n $14 = $132;\n $133 = $14;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($133);\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $4 = $22;\n $23 = $4;\n $3 = $23;\n $24 = $3;\n $2 = $24;\n $25 = $2;\n $1 = $25;\n $26 = $1;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($28);\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 688;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $12 = sp + 12|0;\n $14 = $0;\n $15 = $1;\n $16 = $14;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($16);\n HEAP32[$16>>2] = (2504);\n $17 = ((($16)) + 4|0);\n $18 = $15;\n HEAP32[$17>>2] = $18;\n $19 = ((($16)) + 8|0);\n $13 = $19;\n $20 = $13;\n $11 = $20;\n $21 = $11;\n $10 = $21;\n HEAP32[$21>>2] = 0;\n $22 = ((($21)) + 4|0);\n HEAP32[$22>>2] = 0;\n $23 = ((($21)) + 8|0);\n HEAP32[$12>>2] = 0;\n $8 = $23;\n $9 = $12;\n $24 = $8;\n $25 = $9;\n $7 = $25;\n $26 = $7;\n $3 = $24;\n $4 = $26;\n $27 = $3;\n $28 = $4;\n $2 = $28;\n HEAP32[$27>>2] = 0;\n $6 = $24;\n $29 = $6;\n $5 = $29;\n $30 = ((($16)) + 20|0);\n HEAP8[$30>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEEC2IS8_EEPT_NS_9enable_ifIXsr14is_convertibleISC_PS8_EE5valueENS9_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2524);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0;\n var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;\n var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;\n var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0;\n var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $20 = sp + 72|0;\n $23 = sp + 60|0;\n $27 = sp + 44|0;\n $30 = sp + 32|0;\n $35 = sp + 12|0;\n $36 = sp + 8|0;\n $37 = sp;\n $32 = $0;\n $33 = $1;\n $38 = $32;\n $39 = ((($38)) + 8|0);\n $34 = $39;\n $40 = $34;\n $31 = $40;\n $41 = $31;\n $42 = HEAP32[$41>>2]|0;\n $28 = $41;\n $29 = $42;\n $43 = $29;\n $25 = $27;\n $26 = $43;\n $44 = $25;\n $45 = $26;\n HEAP32[$44>>2] = $45;\n $46 = HEAP32[$27>>2]|0;\n HEAP32[$30>>2] = $46;\n $47 = HEAP32[$30>>2]|0;\n HEAP32[$35>>2] = $47;\n $48 = $34;\n $24 = $48;\n $49 = $24;\n $50 = ((($49)) + 4|0);\n $51 = HEAP32[$50>>2]|0;\n $21 = $49;\n $22 = $51;\n $52 = $22;\n $18 = $20;\n $19 = $52;\n $53 = $18;\n $54 = $19;\n HEAP32[$53>>2] = $54;\n $55 = HEAP32[$20>>2]|0;\n HEAP32[$23>>2] = $55;\n $56 = HEAP32[$23>>2]|0;\n HEAP32[$36>>2] = $56;\n while(1) {\n  $16 = $35;\n  $17 = $36;\n  $57 = $16;\n  $58 = $17;\n  $14 = $57;\n  $15 = $58;\n  $59 = $14;\n  $13 = $59;\n  $60 = $13;\n  $61 = HEAP32[$60>>2]|0;\n  $62 = $15;\n  $12 = $62;\n  $63 = $12;\n  $64 = HEAP32[$63>>2]|0;\n  $65 = ($61|0)==($64|0);\n  $66 = $65 ^ 1;\n  if (!($66)) {\n   break;\n  }\n  $10 = $35;\n  $67 = $10;\n  $68 = HEAP32[$67>>2]|0;\n  $8 = $37;\n  $9 = $68;\n  $69 = $8;\n  $70 = $9;\n  $71 = HEAP32[$70>>2]|0;\n  HEAP32[$69>>2] = $71;\n  $72 = ((($69)) + 4|0);\n  $73 = $9;\n  $74 = ((($73)) + 4|0);\n  $75 = HEAP32[$74>>2]|0;\n  HEAP32[$72>>2] = $75;\n  $76 = ((($69)) + 4|0);\n  $77 = HEAP32[$76>>2]|0;\n  $78 = ($77|0)!=(0|0);\n  if ($78) {\n   $79 = ((($69)) + 4|0);\n   $80 = HEAP32[$79>>2]|0;\n   $7 = $80;\n   $81 = $7;\n   $6 = $81;\n   $82 = $6;\n   $83 = ((($82)) + 4|0);\n   $3 = $83;\n   $84 = $3;\n   $4 = 1;\n   $85 = $4;\n   $86 = HEAP32[$84>>2]|0;\n   $87 = (($86) + ($85))|0;\n   HEAP32[$84>>2] = $87;\n   $88 = (($86) + ($85))|0;\n   $5 = $88;\n  }\n  $2 = $37;\n  $89 = $2;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = HEAP32[$90>>2]|0;\n  $92 = ((($91)) + 12|0);\n  $93 = HEAP32[$92>>2]|0;\n  $94 = $33;\n  $95 = (FUNCTION_TABLE_iii[$93 & 255]($90,$94)|0);\n  $33 = $95;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($37);\n  $11 = $35;\n  $96 = $11;\n  $97 = HEAP32[$96>>2]|0;\n  $98 = ((($97)) + 8|0);\n  HEAP32[$96>>2] = $98;\n }\n $99 = ((($38)) + 20|0);\n $100 = HEAP8[$99>>0]|0;\n $101 = $100&1;\n if (!($101)) {\n  $105 = $33;\n  STACKTOP = sp;return ($105|0);\n }\n $102 = ((($38)) + 20|0);\n HEAP8[$102>>0] = 0;\n $103 = ((($38)) + 4|0);\n $104 = HEAP32[$103>>2]|0;\n __ZN6laszip8decoders10arithmeticI10buf_streamE13readInitBytesEv($104);\n $105 = $33;\n STACKTOP = sp;return ($105|0);\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2504);\n $3 = ((($2)) + 8|0);\n __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($3);\n __ZN6laszip7formats20dynamic_decompressorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE13readInitBytesEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n $4 = (__ZN10buf_stream7getByteEv($3)|0);\n $5 = $4&255;\n $6 = $5 << 24;\n $7 = HEAP32[$2>>2]|0;\n $8 = (__ZN10buf_stream7getByteEv($7)|0);\n $9 = $8&255;\n $10 = $9 << 16;\n $11 = $6 | $10;\n $12 = HEAP32[$2>>2]|0;\n $13 = (__ZN10buf_stream7getByteEv($12)|0);\n $14 = $13&255;\n $15 = $14 << 8;\n $16 = $11 | $15;\n $17 = HEAP32[$2>>2]|0;\n $18 = (__ZN10buf_stream7getByteEv($17)|0);\n $19 = $18&255;\n $20 = $16 | $19;\n $21 = ((($2)) + 4|0);\n HEAP32[$21>>2] = $20;\n STACKTOP = sp;return;\n}\nfunction __ZN10buf_stream7getByteEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n $4 = ((($2)) + 8|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = (($5) + 1)|0;\n HEAP32[$4>>2] = $6;\n $7 = (($3) + ($5)|0);\n $8 = HEAP8[$7>>0]|0;\n STACKTOP = sp;return ($8|0);\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 728;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(180)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(180)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2552);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2576);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,32,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,32,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 164|0);\n __ZN6laszip7formats20standard_diff_methodIiEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2552);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIiEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 164|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIiE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 164|0);\n  $17 = HEAP32[$16>>2]|0;\n  $18 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$17,0)|0);\n  HEAP32[$6>>2] = $18;\n  $19 = HEAP32[$6>>2]|0;\n  $20 = $5;\n  __ZN6laszip7formats7packersIiE4packEiPc($19,$20);\n  $26 = $5;\n  $27 = ((($26)) + 4|0);\n  $5 = $27;\n  $28 = ((($7)) + 164|0);\n  __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($28,$6);\n  $29 = $5;\n  STACKTOP = sp;return ($29|0);\n } else {\n  $21 = $4;\n  $22 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($21)|0);\n  $23 = $5;\n  __ZN10buf_stream8getBytesEPhi($22,$23,4);\n  $24 = $5;\n  $25 = (__ZN6laszip7formats7packersIiE6unpackEPKc($24)|0);\n  HEAP32[$6>>2] = $25;\n  $26 = $5;\n  $27 = ((($26)) + 4|0);\n  $5 = $27;\n  $28 = ((($7)) + 164|0);\n  __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($28,$6);\n  $29 = $5;\n  STACKTOP = sp;return ($29|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIiE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $6 = $0;\n $7 = $1;\n $8 = $2;\n $9 = $3;\n $11 = $6;\n $12 = $8;\n $13 = $7;\n $14 = ((($11)) + 36|0);\n $15 = $9;\n $4 = $14;\n $5 = $15;\n $16 = $4;\n $17 = HEAP32[$16>>2]|0;\n $18 = $5;\n $19 = (($17) + (($18*44)|0)|0);\n $20 = (__ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticI10buf_streamEENS_6models10arithmeticEEEiRT_RT0_($11,$13,$19)|0);\n $21 = (($12) + ($20))|0;\n $10 = $21;\n $22 = $10;\n $23 = ($22|0)<(0);\n if ($23) {\n  $24 = ((($11)) + 24|0);\n  $25 = HEAP32[$24>>2]|0;\n  $26 = $10;\n  $27 = (($26) + ($25))|0;\n  $10 = $27;\n  $36 = $10;\n  STACKTOP = sp;return ($36|0);\n }\n $28 = $10;\n $29 = ((($11)) + 24|0);\n $30 = HEAP32[$29>>2]|0;\n $31 = ($28>>>0)>=($30>>>0);\n if (!($31)) {\n  $36 = $10;\n  STACKTOP = sp;return ($36|0);\n }\n $32 = ((($11)) + 24|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = $10;\n $35 = (($34) - ($33))|0;\n $10 = $35;\n $36 = $10;\n STACKTOP = sp;return ($36|0);\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10buf_stream8getBytesEPhi($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $6 = 0;\n while(1) {\n  $8 = $6;\n  $9 = $5;\n  $10 = ($8|0)<($9|0);\n  if (!($10)) {\n   break;\n  }\n  $11 = (__ZN10buf_stream7getByteEv($7)|0);\n  $12 = $4;\n  $13 = $6;\n  $14 = (($12) + ($13)|0);\n  HEAP8[$14>>0] = $11;\n  $15 = $6;\n  $16 = (($15) + 1)|0;\n  $6 = $16;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 4|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 4|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP32[$9>>2]|0;\n HEAP32[$4>>2] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticI10buf_streamEENS_6models10arithmeticEEEiRT_RT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $7 = $0;\n $8 = $1;\n $9 = $2;\n $13 = $7;\n $14 = $8;\n $15 = $9;\n $16 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($14,$15)|0);\n HEAP32[$13>>2] = $16;\n $17 = HEAP32[$13>>2]|0;\n $18 = ($17|0)!=(0);\n if (!($18)) {\n  $69 = $8;\n  $70 = ((($13)) + 48|0);\n  $71 = (__ZN6laszip8decoders10arithmeticI10buf_streamE9decodeBitINS_6models14arithmetic_bitEEEjRT_($69,$70)|0);\n  $10 = $71;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n $19 = HEAP32[$13>>2]|0;\n $20 = ($19>>>0)<(32);\n if (!($20)) {\n  $67 = ((($13)) + 28|0);\n  $68 = HEAP32[$67>>2]|0;\n  $10 = $68;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n $21 = HEAP32[$13>>2]|0;\n $22 = ((($13)) + 12|0);\n $23 = HEAP32[$22>>2]|0;\n $24 = ($21>>>0)<=($23>>>0);\n if ($24) {\n  $25 = $8;\n  $26 = ((($13)) + 68|0);\n  $27 = HEAP32[$13>>2]|0;\n  $28 = (($27) - 1)|0;\n  $5 = $26;\n  $6 = $28;\n  $29 = $5;\n  $30 = HEAP32[$29>>2]|0;\n  $31 = $6;\n  $32 = (($30) + (($31*44)|0)|0);\n  $33 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($25,$32)|0);\n  $10 = $33;\n } else {\n  $34 = HEAP32[$13>>2]|0;\n  $35 = ((($13)) + 12|0);\n  $36 = HEAP32[$35>>2]|0;\n  $37 = (($34) - ($36))|0;\n  $11 = $37;\n  $38 = $8;\n  $39 = ((($13)) + 68|0);\n  $40 = HEAP32[$13>>2]|0;\n  $41 = (($40) - 1)|0;\n  $3 = $39;\n  $4 = $41;\n  $42 = $3;\n  $43 = HEAP32[$42>>2]|0;\n  $44 = $4;\n  $45 = (($43) + (($44*44)|0)|0);\n  $46 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($38,$45)|0);\n  $10 = $46;\n  $47 = $8;\n  $48 = $11;\n  $49 = (__ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($47,$48)|0);\n  $12 = $49;\n  $50 = $10;\n  $51 = $11;\n  $52 = $50 << $51;\n  $53 = $12;\n  $54 = $52 | $53;\n  $10 = $54;\n }\n $55 = $10;\n $56 = HEAP32[$13>>2]|0;\n $57 = (($56) - 1)|0;\n $58 = 1 << $57;\n $59 = ($55|0)>=($58|0);\n if ($59) {\n  $60 = $10;\n  $61 = (($60) + 1)|0;\n  $10 = $61;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n } else {\n  $62 = HEAP32[$13>>2]|0;\n  $63 = 1 << $62;\n  $64 = (($63) - 1)|0;\n  $65 = $10;\n  $66 = (($65) - ($64))|0;\n  $10 = $66;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n return (0)|0;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $2 = $0;\n $3 = $1;\n $13 = $2;\n $14 = ((($13)) + 8|0);\n $15 = HEAP32[$14>>2]|0;\n $7 = $15;\n $16 = $3;\n $17 = ((($16)) + 16|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18|0)!=(0|0);\n if ($19) {\n  $20 = ((($13)) + 4|0);\n  $21 = HEAP32[$20>>2]|0;\n  $22 = ((($13)) + 8|0);\n  $23 = HEAP32[$22>>2]|0;\n  $24 = $23 >>> 15;\n  HEAP32[$22>>2] = $24;\n  $25 = (($21>>>0) / ($24>>>0))&-1;\n  $8 = $25;\n  $26 = $8;\n  $27 = $3;\n  $28 = ((($27)) + 40|0);\n  $29 = HEAP32[$28>>2]|0;\n  $30 = $26 >>> $29;\n  $9 = $30;\n  $31 = $3;\n  $32 = ((($31)) + 16|0);\n  $33 = HEAP32[$32>>2]|0;\n  $34 = $9;\n  $35 = (($33) + ($34<<2)|0);\n  $36 = HEAP32[$35>>2]|0;\n  $5 = $36;\n  $37 = $3;\n  $38 = ((($37)) + 16|0);\n  $39 = HEAP32[$38>>2]|0;\n  $40 = $9;\n  $41 = (($40) + 1)|0;\n  $42 = (($39) + ($41<<2)|0);\n  $43 = HEAP32[$42>>2]|0;\n  $44 = (($43) + 1)|0;\n  $4 = $44;\n  while(1) {\n   $45 = $4;\n   $46 = $5;\n   $47 = (($46) + 1)|0;\n   $48 = ($45>>>0)>($47>>>0);\n   if (!($48)) {\n    break;\n   }\n   $49 = $5;\n   $50 = $4;\n   $51 = (($49) + ($50))|0;\n   $52 = $51 >>> 1;\n   $10 = $52;\n   $53 = $3;\n   $54 = ((($53)) + 8|0);\n   $55 = HEAP32[$54>>2]|0;\n   $56 = $10;\n   $57 = (($55) + ($56<<2)|0);\n   $58 = HEAP32[$57>>2]|0;\n   $59 = $8;\n   $60 = ($58>>>0)>($59>>>0);\n   $61 = $10;\n   if ($60) {\n    $4 = $61;\n   } else {\n    $5 = $61;\n   }\n  }\n  $62 = $3;\n  $63 = ((($62)) + 8|0);\n  $64 = HEAP32[$63>>2]|0;\n  $65 = $5;\n  $66 = (($64) + ($65<<2)|0);\n  $67 = HEAP32[$66>>2]|0;\n  $68 = ((($13)) + 8|0);\n  $69 = HEAP32[$68>>2]|0;\n  $70 = Math_imul($67, $69)|0;\n  $6 = $70;\n  $71 = $5;\n  $72 = $3;\n  $73 = ((($72)) + 32|0);\n  $74 = HEAP32[$73>>2]|0;\n  $75 = ($71|0)!=($74|0);\n  if ($75) {\n   $76 = $3;\n   $77 = ((($76)) + 8|0);\n   $78 = HEAP32[$77>>2]|0;\n   $79 = $5;\n   $80 = (($79) + 1)|0;\n   $81 = (($78) + ($80<<2)|0);\n   $82 = HEAP32[$81>>2]|0;\n   $83 = ((($13)) + 8|0);\n   $84 = HEAP32[$83>>2]|0;\n   $85 = Math_imul($82, $84)|0;\n   $7 = $85;\n  }\n } else {\n  $5 = 0;\n  $6 = 0;\n  $86 = ((($13)) + 8|0);\n  $87 = HEAP32[$86>>2]|0;\n  $88 = $87 >>> 15;\n  HEAP32[$86>>2] = $88;\n  $89 = $3;\n  $90 = HEAP32[$89>>2]|0;\n  $4 = $90;\n  $91 = $90 >>> 1;\n  $11 = $91;\n  while(1) {\n   $92 = ((($13)) + 8|0);\n   $93 = HEAP32[$92>>2]|0;\n   $94 = $3;\n   $95 = ((($94)) + 8|0);\n   $96 = HEAP32[$95>>2]|0;\n   $97 = $11;\n   $98 = (($96) + ($97<<2)|0);\n   $99 = HEAP32[$98>>2]|0;\n   $100 = Math_imul($93, $99)|0;\n   $12 = $100;\n   $101 = $12;\n   $102 = ((($13)) + 4|0);\n   $103 = HEAP32[$102>>2]|0;\n   $104 = ($101>>>0)>($103>>>0);\n   $105 = $11;\n   if ($104) {\n    $4 = $105;\n    $106 = $12;\n    $7 = $106;\n   } else {\n    $5 = $105;\n    $107 = $12;\n    $6 = $107;\n   }\n   $108 = $5;\n   $109 = $4;\n   $110 = (($108) + ($109))|0;\n   $111 = $110 >>> 1;\n   $11 = $111;\n   $112 = $5;\n   $113 = ($111|0)!=($112|0);\n   if (!($113)) {\n    break;\n   }\n  }\n }\n $114 = $6;\n $115 = ((($13)) + 4|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = (($116) - ($114))|0;\n HEAP32[$115>>2] = $117;\n $118 = $7;\n $119 = $6;\n $120 = (($118) - ($119))|0;\n $121 = ((($13)) + 8|0);\n HEAP32[$121>>2] = $120;\n $122 = ((($13)) + 8|0);\n $123 = HEAP32[$122>>2]|0;\n $124 = ($123>>>0)<(16777216);\n if ($124) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($13);\n }\n $125 = $3;\n $126 = ((($125)) + 12|0);\n $127 = HEAP32[$126>>2]|0;\n $128 = $5;\n $129 = (($127) + ($128<<2)|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = (($130) + 1)|0;\n HEAP32[$129>>2] = $131;\n $132 = $3;\n $133 = ((($132)) + 28|0);\n $134 = HEAP32[$133>>2]|0;\n $135 = (($134) + -1)|0;\n HEAP32[$133>>2] = $135;\n $136 = ($135|0)==(0);\n if (!($136)) {\n  $138 = $5;\n  STACKTOP = sp;return ($138|0);\n }\n $137 = $3;\n __ZN6laszip6models10arithmetic6updateEv($137);\n $138 = $5;\n STACKTOP = sp;return ($138|0);\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $3 = $0;\n $4 = $1;\n $8 = $3;\n $9 = $4;\n $10 = ($9|0)!=(0);\n $11 = $4;\n $12 = ($11>>>0)<=(32);\n $or$cond = $10 & $12;\n if (!($or$cond)) {\n  ___assert_fail((5409|0),(5430|0),139,(5499|0));\n  // unreachable;\n }\n $13 = $4;\n $14 = ($13>>>0)>(19);\n if ($14) {\n  $15 = (__ZN6laszip8decoders10arithmeticI10buf_streamE9readShortEv($8)|0);\n  $16 = $15&65535;\n  $5 = $16;\n  $17 = $4;\n  $18 = (($17) - 16)|0;\n  $4 = $18;\n  $19 = $4;\n  $20 = (__ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($8,$19)|0);\n  $21 = $20 << 16;\n  $6 = $21;\n  $22 = $6;\n  $23 = $5;\n  $24 = $22 | $23;\n  $2 = $24;\n  $43 = $2;\n  STACKTOP = sp;return ($43|0);\n }\n $25 = ((($8)) + 4|0);\n $26 = HEAP32[$25>>2]|0;\n $27 = $4;\n $28 = ((($8)) + 8|0);\n $29 = HEAP32[$28>>2]|0;\n $30 = $29 >>> $27;\n HEAP32[$28>>2] = $30;\n $31 = (($26>>>0) / ($30>>>0))&-1;\n $7 = $31;\n $32 = ((($8)) + 8|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = $7;\n $35 = Math_imul($33, $34)|0;\n $36 = ((($8)) + 4|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = (($37) - ($35))|0;\n HEAP32[$36>>2] = $38;\n $39 = ((($8)) + 8|0);\n $40 = HEAP32[$39>>2]|0;\n $41 = ($40>>>0)<(16777216);\n if ($41) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($8);\n }\n $42 = $7;\n $2 = $42;\n $43 = $2;\n STACKTOP = sp;return ($43|0);\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE9decodeBitINS_6models14arithmetic_bitEEEjRT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $6 = $2;\n $7 = $3;\n $8 = ((($7)) + 8|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = ((($6)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = $11 >>> 13;\n $13 = Math_imul($9, $12)|0;\n $4 = $13;\n $14 = ((($6)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $4;\n $17 = ($15>>>0)>=($16>>>0);\n $18 = $17&1;\n $5 = $18;\n $19 = $5;\n $20 = ($19|0)==(0);\n $21 = $4;\n if ($20) {\n  $22 = ((($6)) + 8|0);\n  HEAP32[$22>>2] = $21;\n  $23 = $3;\n  $24 = ((($23)) + 12|0);\n  $25 = HEAP32[$24>>2]|0;\n  $26 = (($25) + 1)|0;\n  HEAP32[$24>>2] = $26;\n } else {\n  $27 = ((($6)) + 4|0);\n  $28 = HEAP32[$27>>2]|0;\n  $29 = (($28) - ($21))|0;\n  HEAP32[$27>>2] = $29;\n  $30 = $4;\n  $31 = ((($6)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  $33 = (($32) - ($30))|0;\n  HEAP32[$31>>2] = $33;\n }\n $34 = ((($6)) + 8|0);\n $35 = HEAP32[$34>>2]|0;\n $36 = ($35>>>0)<(16777216);\n if ($36) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($6);\n }\n $37 = $3;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $40 = (($39) + -1)|0;\n HEAP32[$38>>2] = $40;\n $41 = ($40|0)==(0);\n if (!($41)) {\n  $43 = $5;\n  STACKTOP = sp;return ($43|0);\n }\n $42 = $3;\n __ZN6laszip6models14arithmetic_bit6updateEv($42);\n $43 = $5;\n STACKTOP = sp;return ($43|0);\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n while(1) {\n  $3 = ((($2)) + 4|0);\n  $4 = HEAP32[$3>>2]|0;\n  $5 = $4 << 8;\n  $6 = HEAP32[$2>>2]|0;\n  $7 = (__ZN10buf_stream7getByteEv($6)|0);\n  $8 = $7&255;\n  $9 = $5 | $8;\n  $10 = ((($2)) + 4|0);\n  HEAP32[$10>>2] = $9;\n  $11 = ((($2)) + 8|0);\n  $12 = HEAP32[$11>>2]|0;\n  $13 = $12 << 8;\n  HEAP32[$11>>2] = $13;\n  $14 = ($13>>>0)<(16777216);\n  if (!($14)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE9readShortEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $3 = $1;\n $4 = ((($3)) + 4|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ((($3)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $7 >>> 16;\n HEAP32[$6>>2] = $8;\n $9 = (($5>>>0) / ($8>>>0))&-1;\n $2 = $9;\n $10 = ((($3)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = $2;\n $13 = Math_imul($11, $12)|0;\n $14 = ((($3)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = (($15) - ($13))|0;\n HEAP32[$14>>2] = $16;\n $17 = ((($3)) + 8|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18>>>0)<(16777216);\n if ($19) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($3);\n }\n $20 = $2;\n $21 = ($20>>>0)<(65536);\n if ($21) {\n  $22 = $2;\n  $23 = $22&65535;\n  STACKTOP = sp;return ($23|0);\n } else {\n  ___assert_fail((5508|0),(5430|0),172,(5522|0));\n  // unreachable;\n }\n return (0)|0;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 768;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2604);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2628);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,32,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,32,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 164|0);\n __ZN6laszip7formats20standard_diff_methodIjEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2604);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIjEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 164|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIjE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 164|0);\n  $17 = HEAP32[$16>>2]|0;\n  $18 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$17,0)|0);\n  HEAP32[$6>>2] = $18;\n  $19 = HEAP32[$6>>2]|0;\n  $20 = $5;\n  __ZN6laszip7formats7packersIjE4packEjPc($19,$20);\n  $26 = $5;\n  $27 = ((($26)) + 4|0);\n  $5 = $27;\n  $28 = ((($7)) + 164|0);\n  __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($28,$6);\n  $29 = $5;\n  STACKTOP = sp;return ($29|0);\n } else {\n  $21 = $4;\n  $22 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($21)|0);\n  $23 = $5;\n  __ZN10buf_stream8getBytesEPhi($22,$23,4);\n  $24 = $5;\n  $25 = (__ZN6laszip7formats7packersIjE6unpackEPKc($24)|0);\n  HEAP32[$6>>2] = $25;\n  $26 = $5;\n  $27 = ((($26)) + 4|0);\n  $5 = $27;\n  $28 = ((($7)) + 164|0);\n  __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($28,$6);\n  $29 = $5;\n  STACKTOP = sp;return ($29|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIjE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 4|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 4|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP32[$9>>2]|0;\n HEAP32[$4>>2] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 808;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIaEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(172)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIsEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(176)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2656);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2680);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,8,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,8,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 162|0);\n __ZN6laszip7formats20standard_diff_methodIaEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2656);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIaEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 1|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp + 12|0;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 162|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIaE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 162|0);\n  $17 = HEAP8[$16>>0]|0;\n  $18 = $17 << 24 >> 24;\n  $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0);\n  $20 = $19&255;\n  HEAP8[$6>>0] = $20;\n  $21 = HEAP8[$6>>0]|0;\n  $22 = $5;\n  __ZN6laszip7formats7packersIaE4packEaPc($21,$22);\n  $28 = $5;\n  $29 = ((($28)) + 1|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n } else {\n  $23 = $4;\n  $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0);\n  $25 = $5;\n  __ZN10buf_stream8getBytesEPhi($24,$25,1);\n  $26 = $5;\n  $27 = (__ZN6laszip7formats7packersIaE6unpackEPKc($26)|0);\n  HEAP8[$6>>0] = $27;\n  $28 = $5;\n  $29 = ((($28)) + 1|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIaE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 1|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats7packersIaE4packEaPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP8[$5>>0] = $4;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIaE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP8[$2>>0]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 1|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 1|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP8[$9>>0]|0;\n HEAP8[$4>>0] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 848;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2708);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2732);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,16,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 162|0);\n __ZN6laszip7formats20standard_diff_methodIsEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2708);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIsEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 2|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp + 12|0;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 162|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIsE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 162|0);\n  $17 = HEAP16[$16>>1]|0;\n  $18 = $17 << 16 >> 16;\n  $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0);\n  $20 = $19&65535;\n  HEAP16[$6>>1] = $20;\n  $21 = HEAP16[$6>>1]|0;\n  $22 = $5;\n  __ZN6laszip7formats7packersIsE4packEsPc($21,$22);\n  $28 = $5;\n  $29 = ((($28)) + 2|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n } else {\n  $23 = $4;\n  $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0);\n  $25 = $5;\n  __ZN10buf_stream8getBytesEPhi($24,$25,2);\n  $26 = $5;\n  $27 = (__ZN6laszip7formats7packersIsE6unpackEPKc($26)|0);\n  HEAP16[$6>>1] = $27;\n  $28 = $5;\n  $29 = ((($28)) + 2|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIsE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 2|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats7packersIsE4packEsPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n __ZN6laszip7formats7packersItE4packEtPc($4,$5);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIsE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (__ZN6laszip7formats7packersItE6unpackEPKc($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 2|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 2|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP16[$9>>1]|0;\n HEAP16[$4>>1] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 888;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIhEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(172)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldItEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(176)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2760);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2784);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,8,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,8,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 162|0);\n __ZN6laszip7formats20standard_diff_methodIhEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2760);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIhEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 1|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp + 12|0;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 162|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIhE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 162|0);\n  $17 = HEAP8[$16>>0]|0;\n  $18 = $17&255;\n  $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0);\n  $20 = $19&255;\n  HEAP8[$6>>0] = $20;\n  $21 = HEAP8[$6>>0]|0;\n  $22 = $5;\n  __ZN6laszip7formats7packersIhE4packEhPc($21,$22);\n  $28 = $5;\n  $29 = ((($28)) + 1|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n } else {\n  $23 = $4;\n  $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0);\n  $25 = $5;\n  __ZN10buf_stream8getBytesEPhi($24,$25,1);\n  $26 = $5;\n  $27 = (__ZN6laszip7formats7packersIhE6unpackEPKc($26)|0);\n  HEAP8[$6>>0] = $27;\n  $28 = $5;\n  $29 = ((($28)) + 1|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIhE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 1|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 1|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 1|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP8[$9>>0]|0;\n HEAP8[$4>>0] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 928;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2812);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2836);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,16,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 162|0);\n __ZN6laszip7formats20standard_diff_methodItEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2812);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodItEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 2|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp + 12|0;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 162|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodItE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 162|0);\n  $17 = HEAP16[$16>>1]|0;\n  $18 = $17&65535;\n  $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0);\n  $20 = $19&65535;\n  HEAP16[$6>>1] = $20;\n  $21 = HEAP16[$6>>1]|0;\n  $22 = $5;\n  __ZN6laszip7formats7packersItE4packEtPc($21,$22);\n  $28 = $5;\n  $29 = ((($28)) + 2|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodItE4pushERKt($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n } else {\n  $23 = $4;\n  $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0);\n  $25 = $5;\n  __ZN10buf_stream8getBytesEPhi($24,$25,2);\n  $26 = $5;\n  $27 = (__ZN6laszip7formats7packersItE6unpackEPKc($26)|0);\n  HEAP16[$6>>1] = $27;\n  $28 = $5;\n  $29 = ((($28)) + 2|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodItE4pushERKt($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodItE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 2|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodItE4pushERKt($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 2|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 2|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP16[$9>>1]|0;\n HEAP16[$4>>1] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 968;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal11NoBaseClass6verifyI6LASZipEEvv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZN10emscripten8internal13getActualTypeI6LASZipEEPKvPT_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (__ZN10emscripten8internal14getLightTypeIDI6LASZipEEPKvRKT_($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass11getUpcasterI6LASZipEEPFvvEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass13getDowncasterI6LASZipEEPFvvEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal14raw_destructorI6LASZipEEvPT_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ($2|0)==(0|0);\n if (!($3)) {\n  __ZN6LASZipD2Ev($2);\n  __ZdlPv($2);\n }\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDI6LASZipE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDI6LASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI6LASZipEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIP6LASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK6LASZipEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIPK6LASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal14getLightTypeIDI6LASZipEEPKvRKT_($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return (976|0);\n}\nfunction __ZN6LASZipD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $6 = sp + 128|0;\n $12 = sp + 104|0;\n $17 = sp + 80|0;\n $23 = sp + 56|0;\n $29 = sp + 32|0;\n $34 = sp + 8|0;\n $35 = $0;\n $36 = $35;\n $33 = $36;\n $37 = $33;\n $32 = $34;\n $38 = $32;\n HEAP32[$38>>2] = 0;\n $39 = ((($38)) + 4|0);\n HEAP32[$39>>2] = 0;\n $30 = $34;\n $31 = $37;\n $40 = $30;\n $41 = $31;\n $27 = $40;\n $28 = $41;\n $42 = $27;\n $26 = $42;\n $43 = $26;\n $44 = HEAP32[$43>>2]|0;\n HEAP32[$29>>2] = $44;\n $45 = $28;\n $24 = $45;\n $46 = $24;\n $47 = HEAP32[$46>>2]|0;\n $48 = $27;\n HEAP32[$48>>2] = $47;\n $25 = $29;\n $49 = $25;\n $50 = HEAP32[$49>>2]|0;\n $51 = $28;\n HEAP32[$51>>2] = $50;\n $52 = ((($40)) + 4|0);\n $53 = $31;\n $54 = ((($53)) + 4|0);\n $21 = $52;\n $22 = $54;\n $55 = $21;\n $20 = $55;\n $56 = $20;\n $57 = HEAP32[$56>>2]|0;\n HEAP32[$23>>2] = $57;\n $58 = $22;\n $18 = $58;\n $59 = $18;\n $60 = HEAP32[$59>>2]|0;\n $61 = $21;\n HEAP32[$61>>2] = $60;\n $19 = $23;\n $62 = $19;\n $63 = HEAP32[$62>>2]|0;\n $64 = $22;\n HEAP32[$64>>2] = $63;\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($34);\n $65 = ((($36)) + 8|0);\n $16 = $65;\n $66 = $16;\n $15 = $17;\n $67 = $15;\n HEAP32[$67>>2] = 0;\n $68 = ((($67)) + 4|0);\n HEAP32[$68>>2] = 0;\n $13 = $17;\n $14 = $66;\n $69 = $13;\n $70 = $14;\n $10 = $69;\n $11 = $70;\n $71 = $10;\n $9 = $71;\n $72 = $9;\n $73 = HEAP32[$72>>2]|0;\n HEAP32[$12>>2] = $73;\n $74 = $11;\n $7 = $74;\n $75 = $7;\n $76 = HEAP32[$75>>2]|0;\n $77 = $10;\n HEAP32[$77>>2] = $76;\n $8 = $12;\n $78 = $8;\n $79 = HEAP32[$78>>2]|0;\n $80 = $11;\n HEAP32[$80>>2] = $79;\n $81 = ((($69)) + 4|0);\n $82 = $14;\n $83 = ((($82)) + 4|0);\n $4 = $81;\n $5 = $83;\n $84 = $4;\n $3 = $84;\n $85 = $3;\n $86 = HEAP32[$85>>2]|0;\n HEAP32[$6>>2] = $86;\n $87 = $5;\n $1 = $87;\n $88 = $1;\n $89 = HEAP32[$88>>2]|0;\n $90 = $4;\n HEAP32[$90>>2] = $89;\n $2 = $6;\n $91 = $2;\n $92 = HEAP32[$91>>2]|0;\n $93 = $5;\n HEAP32[$93>>2] = $92;\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($17);\n $94 = ((($36)) + 8|0);\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($94);\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($36);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal11LightTypeIDI6LASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (976|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIP6LASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (984|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIPK6LASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1000|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16424|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16427|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16429|0);\n}\nfunction __ZN10emscripten8internal12operator_newI6LASZipJEEEPT_DpOT0_() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__Znwj(16)|0);\n __ZN6LASZipC2Ev($0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal7InvokerIP6LASZipJEE6invokeEPFS3_vE($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (FUNCTION_TABLE_i[$2 & 255]()|0);\n $4 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE10toWireTypeES3_($3)|0);\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 1;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIP6LASZipE10toWireTypeES3_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2856|0);\n}\nfunction __ZN6LASZipC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $3;\n $2 = $4;\n $5 = $2;\n HEAP32[$5>>2] = 0;\n $6 = ((($5)) + 4|0);\n HEAP32[$6>>2] = 0;\n $7 = ((($4)) + 8|0);\n $1 = $7;\n $8 = $1;\n HEAP32[$8>>2] = 0;\n $9 = ((($8)) + 4|0);\n HEAP32[$9>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM6LASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $7 = $3;\n $8 = $5;\n $9 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($8)|0);\n $10 = $4;\n $$field = HEAP32[$10>>2]|0;\n $$index1 = ((($10)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $11 = $$field2 >> 1;\n $12 = (($9) + ($11)|0);\n $13 = $$field2 & 1;\n $14 = ($13|0)!=(0);\n if ($14) {\n  $15 = HEAP32[$12>>2]|0;\n  $16 = (($15) + ($$field)|0);\n  $17 = HEAP32[$16>>2]|0;\n  $23 = $17;\n } else {\n  $18 = $$field;\n  $23 = $18;\n }\n $19 = $6;\n $20 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($19)|0);\n $21 = $7;\n $22 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($21)|0);\n FUNCTION_TABLE_viii[$23 & 255]($12,$20,$22);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 4;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM6LASZipFvjjEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2860|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16432|0);\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM6LASZipFviEvPS2_JiEE6invokeERKS4_S5_i($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $4;\n $7 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($6)|0);\n $8 = $3;\n $$field = HEAP32[$8>>2]|0;\n $$index1 = ((($8)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $9 = $$field2 >> 1;\n $10 = (($7) + ($9)|0);\n $11 = $$field2 & 1;\n $12 = ($11|0)!=(0);\n if ($12) {\n  $13 = HEAP32[$10>>2]|0;\n  $14 = (($13) + ($$field)|0);\n  $15 = HEAP32[$14>>2]|0;\n  $19 = $15;\n } else {\n  $16 = $$field;\n  $19 = $16;\n }\n $17 = $5;\n $18 = (__ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($17)|0);\n FUNCTION_TABLE_vii[$19 & 255]($10,$18);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 3;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM6LASZipFviEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2876|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16438|0);\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM6LASZipFjvEjPS2_JEE6invokeERKS4_S5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = sp;\n $2 = $0;\n $3 = $1;\n $5 = $3;\n $6 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($5)|0);\n $7 = $2;\n $$field = HEAP32[$7>>2]|0;\n $$index1 = ((($7)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $8 = $$field2 >> 1;\n $9 = (($6) + ($8)|0);\n $10 = $$field2 & 1;\n $11 = ($10|0)!=(0);\n if ($11) {\n  $12 = HEAP32[$9>>2]|0;\n  $13 = (($12) + ($$field)|0);\n  $14 = HEAP32[$13>>2]|0;\n  $16 = $14;\n } else {\n  $15 = $$field;\n  $16 = $15;\n }\n $17 = (FUNCTION_TABLE_ii[$16 & 255]($9)|0);\n HEAP32[$4>>2] = $17;\n $18 = (__ZN10emscripten8internal11BindingTypeIjE10toWireTypeERKj($4)|0);\n STACKTOP = sp;return ($18|0);\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 2;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJjNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM6LASZipFjvEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIjE10toWireTypeERKj($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJjNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2888|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJiiiEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16443|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass6verifyI13DynamicLASZipEEvv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZN10emscripten8internal13getActualTypeI13DynamicLASZipEEPKvPT_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (__ZN10emscripten8internal14getLightTypeIDI13DynamicLASZipEEPKvRKT_($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass11getUpcasterI13DynamicLASZipEEPFvvEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass13getDowncasterI13DynamicLASZipEEPFvvEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal14raw_destructorI13DynamicLASZipEEvPT_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ($2|0)==(0|0);\n if (!($3)) {\n  __ZN13DynamicLASZipD2Ev($2);\n  __ZdlPv($2);\n }\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDI13DynamicLASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI13DynamicLASZipEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIP13DynamicLASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK13DynamicLASZipEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIPK13DynamicLASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal14getLightTypeIDI13DynamicLASZipEEPKvRKT_($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return (1016|0);\n}\nfunction __ZN13DynamicLASZipD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;\n var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;\n var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;\n var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;\n var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;\n var $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0);\n $6 = sp + 200|0;\n $12 = sp + 176|0;\n $17 = sp + 152|0;\n $23 = sp + 128|0;\n $29 = sp + 104|0;\n $34 = sp + 80|0;\n $40 = sp + 56|0;\n $46 = sp + 32|0;\n $51 = sp + 8|0;\n $52 = $0;\n $53 = $52;\n $50 = $53;\n $54 = $50;\n $49 = $51;\n $55 = $49;\n HEAP32[$55>>2] = 0;\n $56 = ((($55)) + 4|0);\n HEAP32[$56>>2] = 0;\n $47 = $51;\n $48 = $54;\n $57 = $47;\n $58 = $48;\n $44 = $57;\n $45 = $58;\n $59 = $44;\n $43 = $59;\n $60 = $43;\n $61 = HEAP32[$60>>2]|0;\n HEAP32[$46>>2] = $61;\n $62 = $45;\n $41 = $62;\n $63 = $41;\n $64 = HEAP32[$63>>2]|0;\n $65 = $44;\n HEAP32[$65>>2] = $64;\n $42 = $46;\n $66 = $42;\n $67 = HEAP32[$66>>2]|0;\n $68 = $45;\n HEAP32[$68>>2] = $67;\n $69 = ((($57)) + 4|0);\n $70 = $48;\n $71 = ((($70)) + 4|0);\n $38 = $69;\n $39 = $71;\n $72 = $38;\n $37 = $72;\n $73 = $37;\n $74 = HEAP32[$73>>2]|0;\n HEAP32[$40>>2] = $74;\n $75 = $39;\n $35 = $75;\n $76 = $35;\n $77 = HEAP32[$76>>2]|0;\n $78 = $38;\n HEAP32[$78>>2] = $77;\n $36 = $40;\n $79 = $36;\n $80 = HEAP32[$79>>2]|0;\n $81 = $39;\n HEAP32[$81>>2] = $80;\n __ZNSt3__210shared_ptrI10buf_streamED2Ev($51);\n $82 = ((($53)) + 16|0);\n $33 = $82;\n $83 = $33;\n $32 = $34;\n $84 = $32;\n HEAP32[$84>>2] = 0;\n $85 = ((($84)) + 4|0);\n HEAP32[$85>>2] = 0;\n $30 = $34;\n $31 = $83;\n $86 = $30;\n $87 = $31;\n $27 = $86;\n $28 = $87;\n $88 = $27;\n $26 = $88;\n $89 = $26;\n $90 = HEAP32[$89>>2]|0;\n HEAP32[$29>>2] = $90;\n $91 = $28;\n $24 = $91;\n $92 = $24;\n $93 = HEAP32[$92>>2]|0;\n $94 = $27;\n HEAP32[$94>>2] = $93;\n $25 = $29;\n $95 = $25;\n $96 = HEAP32[$95>>2]|0;\n $97 = $28;\n HEAP32[$97>>2] = $96;\n $98 = ((($86)) + 4|0);\n $99 = $31;\n $100 = ((($99)) + 4|0);\n $21 = $98;\n $22 = $100;\n $101 = $21;\n $20 = $101;\n $102 = $20;\n $103 = HEAP32[$102>>2]|0;\n HEAP32[$23>>2] = $103;\n $104 = $22;\n $18 = $104;\n $105 = $18;\n $106 = HEAP32[$105>>2]|0;\n $107 = $21;\n HEAP32[$107>>2] = $106;\n $19 = $23;\n $108 = $19;\n $109 = HEAP32[$108>>2]|0;\n $110 = $22;\n HEAP32[$110>>2] = $109;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($34);\n $111 = ((($53)) + 16|0);\n $16 = $111;\n $112 = $16;\n $15 = $17;\n $113 = $15;\n HEAP32[$113>>2] = 0;\n $114 = ((($113)) + 4|0);\n HEAP32[$114>>2] = 0;\n $13 = $17;\n $14 = $112;\n $115 = $13;\n $116 = $14;\n $10 = $115;\n $11 = $116;\n $117 = $10;\n $9 = $117;\n $118 = $9;\n $119 = HEAP32[$118>>2]|0;\n HEAP32[$12>>2] = $119;\n $120 = $11;\n $7 = $120;\n $121 = $7;\n $122 = HEAP32[$121>>2]|0;\n $123 = $10;\n HEAP32[$123>>2] = $122;\n $8 = $12;\n $124 = $8;\n $125 = HEAP32[$124>>2]|0;\n $126 = $11;\n HEAP32[$126>>2] = $125;\n $127 = ((($115)) + 4|0);\n $128 = $14;\n $129 = ((($128)) + 4|0);\n $4 = $127;\n $5 = $129;\n $130 = $4;\n $3 = $130;\n $131 = $3;\n $132 = HEAP32[$131>>2]|0;\n HEAP32[$6>>2] = $132;\n $133 = $5;\n $1 = $133;\n $134 = $1;\n $135 = HEAP32[$134>>2]|0;\n $136 = $4;\n HEAP32[$136>>2] = $135;\n $2 = $6;\n $137 = $2;\n $138 = HEAP32[$137>>2]|0;\n $139 = $5;\n HEAP32[$139>>2] = $138;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($17);\n $140 = ((($53)) + 16|0);\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($140);\n $141 = ((($53)) + 8|0);\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($141);\n __ZNSt3__210shared_ptrI10buf_streamED2Ev($53);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal11LightTypeIDI13DynamicLASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1016|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIP13DynamicLASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1024|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIPK13DynamicLASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1040|0);\n}\nfunction __ZN10emscripten8internal12operator_newI13DynamicLASZipJEEEPT_DpOT0_() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__Znwj(24)|0);\n __ZN13DynamicLASZipC2Ev($0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal7InvokerIP13DynamicLASZipJEE6invokeEPFS3_vE($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (FUNCTION_TABLE_i[$2 & 255]()|0);\n $4 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE10toWireTypeES3_($3)|0);\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 1;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI13DynamicLASZipEEEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE10toWireTypeES3_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI13DynamicLASZipEEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2896|0);\n}\nfunction __ZN13DynamicLASZipC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $4;\n $3 = $5;\n $6 = $3;\n HEAP32[$6>>2] = 0;\n $7 = ((($6)) + 4|0);\n HEAP32[$7>>2] = 0;\n $8 = ((($5)) + 8|0);\n $1 = $8;\n $9 = $1;\n HEAP32[$9>>2] = 0;\n $10 = ((($9)) + 4|0);\n HEAP32[$10>>2] = 0;\n $11 = ((($5)) + 16|0);\n $2 = $11;\n $12 = $2;\n HEAP32[$12>>2] = 0;\n $13 = ((($12)) + 4|0);\n HEAP32[$13>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $7 = $3;\n $8 = $5;\n $9 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($8)|0);\n $10 = $4;\n $$field = HEAP32[$10>>2]|0;\n $$index1 = ((($10)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $11 = $$field2 >> 1;\n $12 = (($9) + ($11)|0);\n $13 = $$field2 & 1;\n $14 = ($13|0)!=(0);\n if ($14) {\n  $15 = HEAP32[$12>>2]|0;\n  $16 = (($15) + ($$field)|0);\n  $17 = HEAP32[$16>>2]|0;\n  $23 = $17;\n } else {\n  $18 = $$field;\n  $23 = $18;\n }\n $19 = $6;\n $20 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($19)|0);\n $21 = $7;\n $22 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($21)|0);\n FUNCTION_TABLE_viii[$23 & 255]($12,$20,$22);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 4;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM13DynamicLASZipFvjjEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2900|0);\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjEvPS2_JjEE6invokeERKS4_S5_j($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $4;\n $7 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($6)|0);\n $8 = $3;\n $$field = HEAP32[$8>>2]|0;\n $$index1 = ((($8)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $9 = $$field2 >> 1;\n $10 = (($7) + ($9)|0);\n $11 = $$field2 & 1;\n $12 = ($11|0)!=(0);\n if ($12) {\n  $13 = HEAP32[$10>>2]|0;\n  $14 = (($13) + ($$field)|0);\n  $15 = HEAP32[$14>>2]|0;\n  $19 = $15;\n } else {\n  $16 = $$field;\n  $19 = $16;\n }\n $17 = $5;\n $18 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($17)|0);\n FUNCTION_TABLE_vii[$19 & 255]($10,$18);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 3;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2916|0);\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFviEvPS2_JiEE6invokeERKS4_S5_i($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $4;\n $7 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($6)|0);\n $8 = $3;\n $$field = HEAP32[$8>>2]|0;\n $$index1 = ((($8)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $9 = $$field2 >> 1;\n $10 = (($7) + ($9)|0);\n $11 = $$field2 & 1;\n $12 = ($11|0)!=(0);\n if ($12) {\n  $13 = HEAP32[$10>>2]|0;\n  $14 = (($13) + ($$field)|0);\n  $15 = HEAP32[$14>>2]|0;\n  $19 = $15;\n } else {\n  $16 = $$field;\n  $19 = $16;\n }\n $17 = $5;\n $18 = (__ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($17)|0);\n FUNCTION_TABLE_vii[$19 & 255]($10,$18);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 3;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM13DynamicLASZipFviEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2928|0);\n}\nfunction __GLOBAL__sub_I_laz_perf_cpp() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n ___cxx_global_var_init();\n return;\n}\nfunction __GLOBAL__sub_I_bind_cpp() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n ___cxx_global_var_init_2();\n return;\n}\nfunction ___cxx_global_var_init_2() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN53EmscriptenBindingInitializer_native_and_builtin_typesC2Ev(21881);\n return;\n}\nfunction __ZN53EmscriptenBindingInitializer_native_and_builtin_typesC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIvE3getEv()|0);\n __embind_register_void(($2|0),(16498|0));\n $3 = (__ZN10emscripten8internal6TypeIDIbE3getEv()|0);\n __embind_register_bool(($3|0),(16503|0),1,1,0);\n __ZN12_GLOBAL__N_116register_integerIcEEvPKc(16508);\n __ZN12_GLOBAL__N_116register_integerIaEEvPKc(16513);\n __ZN12_GLOBAL__N_116register_integerIhEEvPKc(16525);\n __ZN12_GLOBAL__N_116register_integerIsEEvPKc(16539);\n __ZN12_GLOBAL__N_116register_integerItEEvPKc(16545);\n __ZN12_GLOBAL__N_116register_integerIiEEvPKc(16560);\n __ZN12_GLOBAL__N_116register_integerIjEEvPKc(16564);\n __ZN12_GLOBAL__N_116register_integerIlEEvPKc(16577);\n __ZN12_GLOBAL__N_116register_integerImEEvPKc(16582);\n __ZN12_GLOBAL__N_114register_floatIfEEvPKc(16596);\n __ZN12_GLOBAL__N_114register_floatIdEEvPKc(16602);\n $4 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv()|0);\n __embind_register_std_string(($4|0),(16609|0));\n $5 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv()|0);\n __embind_register_std_string(($5|0),(16621|0));\n $6 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv()|0);\n __embind_register_std_wstring(($6|0),4,(16654|0));\n $7 = (__ZN10emscripten8internal6TypeIDINS_3valEE3getEv()|0);\n __embind_register_emval(($7|0),(16667|0));\n __ZN12_GLOBAL__N_120register_memory_viewIcEEvPKc(16683);\n __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc(16713);\n __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc(16750);\n __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc(16789);\n __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc(16820);\n __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc(16860);\n __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc(16889);\n __ZN12_GLOBAL__N_120register_memory_viewIlEEvPKc(16927);\n __ZN12_GLOBAL__N_120register_memory_viewImEEvPKc(16957);\n __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc(16996);\n __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc(17028);\n __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc(17061);\n __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc(17094);\n __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc(17128);\n __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc(17161);\n __ZN12_GLOBAL__N_120register_memory_viewIfEEvPKc(17195);\n __ZN12_GLOBAL__N_120register_memory_viewIdEEvPKc(17226);\n __ZN12_GLOBAL__N_120register_memory_viewIeEEvPKc(17258);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDIvE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIvE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIbE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIbE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_116register_integerIcEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIcE3getEv()|0);\n $3 = $1;\n $4 = -128 << 24 >> 24;\n $5 = 127 << 24 >> 24;\n __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIaEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIaE3getEv()|0);\n $3 = $1;\n $4 = -128 << 24 >> 24;\n $5 = 127 << 24 >> 24;\n __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIhEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIhE3getEv()|0);\n $3 = $1;\n $4 = 0;\n $5 = 255;\n __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIsEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIsE3getEv()|0);\n $3 = $1;\n $4 = -32768 << 16 >> 16;\n $5 = 32767 << 16 >> 16;\n __embind_register_integer(($2|0),($3|0),2,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerItEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDItE3getEv()|0);\n $3 = $1;\n $4 = 0;\n $5 = 65535;\n __embind_register_integer(($2|0),($3|0),2,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIiEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIiE3getEv()|0);\n $3 = $1;\n __embind_register_integer(($2|0),($3|0),4,-2147483648,2147483647);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIjEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIjE3getEv()|0);\n $3 = $1;\n __embind_register_integer(($2|0),($3|0),4,0,-1);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIlEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIlE3getEv()|0);\n $3 = $1;\n __embind_register_integer(($2|0),($3|0),4,-2147483648,2147483647);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerImEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDImE3getEv()|0);\n $3 = $1;\n __embind_register_integer(($2|0),($3|0),4,0,-1);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_114register_floatIfEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIfE3getEv()|0);\n $3 = $1;\n __embind_register_float(($2|0),($3|0),4);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_114register_floatIdEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIdE3getEv()|0);\n $3 = $1;\n __embind_register_float(($2|0),($3|0),8);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_3valEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_3valEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIcEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIcEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIcEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIaEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIaEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIhEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIhEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIsEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIsEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewItEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexItEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIiEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIiEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIjEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIjEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIlEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIlEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIlEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewImEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewImEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexImEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIfEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIfEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIfEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIdEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIdEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIdEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIeEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIeEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIeEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIeEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIeEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIeEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 7;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIeEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1056|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIdEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIdEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIdEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 7;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIdEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1064|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIfEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIfEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIfEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 6;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIfEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1072|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewImEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewImEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexImEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 5;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewImEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1080|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIlEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIlEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIlEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 4;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIlEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1088|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIjEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIjEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIjEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 5;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIjEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1096|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIiEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIiEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIiEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 4;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIiEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1104|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewItEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewItEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexItEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 3;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewItEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1112|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIsEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIsEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIsEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 2;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIsEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1120|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIhEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIhEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIhEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 1;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIhEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1128|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIaEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIaEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIaEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 0;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIaEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1136|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIcEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIcEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIcEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 0;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIcEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1144|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_3valEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1152|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1160|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1192|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1216|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIdE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIdE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIdE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1552|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIfE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIfE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIfE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1544|0);\n}\nfunction __ZN10emscripten8internal6TypeIDImE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDImE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDImE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1536|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIlE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIlE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIlE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1528|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIjE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIjE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIjE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1520|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIiE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIiE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIiE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1512|0);\n}\nfunction __ZN10emscripten8internal6TypeIDItE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDItE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDItE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1504|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIsE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIsE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIsE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1496|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIhE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIhE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIhE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1480|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIaE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIaE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIaE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1488|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIcE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIcE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIcE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1472|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIbE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1464|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIvE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1448|0);\n}\nfunction ___getTypeName($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $2;\n $1 = $3;\n $4 = $1;\n $5 = ((($4)) + 4|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (___strdup($6)|0);\n STACKTOP = sp;return ($7|0);\n}\nfunction _malloc($0) {\n $0 = $0|0;\n var $$0 = 0, $$0$i$i = 0, $$0$i$i$i = 0, $$0$i16$i = 0, $$0187$i = 0, $$0189$i = 0, $$0190$i = 0, $$0191$i = 0, $$0197 = 0, $$0199 = 0, $$02065$i$i = 0, $$0207$lcssa$i$i = 0, $$02074$i$i = 0, $$0211$i$i = 0, $$0212$i$i = 0, $$024372$i = 0, $$0286$i$i = 0, $$028711$i$i = 0, $$0288$lcssa$i$i = 0, $$028810$i$i = 0;\n var $$0294$i$i = 0, $$0295$i$i = 0, $$0340$i = 0, $$034217$i = 0, $$0343$lcssa$i = 0, $$034316$i = 0, $$0345$i = 0, $$0351$i = 0, $$0357$i = 0, $$0358$i = 0, $$0360$i = 0, $$0361$i = 0, $$0367$i = 0, $$1194$i = 0, $$1194$i$be = 0, $$1194$i$ph = 0, $$1196$i = 0, $$1196$i$be = 0, $$1196$i$ph = 0, $$124471$i = 0;\n var $$1290$i$i = 0, $$1290$i$i$be = 0, $$1290$i$i$ph = 0, $$1292$i$i = 0, $$1292$i$i$be = 0, $$1292$i$i$ph = 0, $$1341$i = 0, $$1346$i = 0, $$1362$i = 0, $$1369$i = 0, $$1369$i$be = 0, $$1369$i$ph = 0, $$1373$i = 0, $$1373$i$be = 0, $$1373$i$ph = 0, $$2234243136$i = 0, $$2247$ph$i = 0, $$2253$ph$i = 0, $$2353$i = 0, $$3$i = 0;\n var $$3$i$i = 0, $$3$i203 = 0, $$3$i203218 = 0, $$3348$i = 0, $$3371$i = 0, $$4$lcssa$i = 0, $$420$i = 0, $$420$i$ph = 0, $$4236$i = 0, $$4349$lcssa$i = 0, $$434919$i = 0, $$434919$i$ph = 0, $$4355$i = 0, $$535618$i = 0, $$535618$i$ph = 0, $$723947$i = 0, $$748$i = 0, $$pre = 0, $$pre$i = 0, $$pre$i$i = 0;\n var $$pre$i17$i = 0, $$pre$i208 = 0, $$pre$i210 = 0, $$pre$phi$i$iZ2D = 0, $$pre$phi$i18$iZ2D = 0, $$pre$phi$i209Z2D = 0, $$pre$phi$iZ2D = 0, $$pre$phi17$i$iZ2D = 0, $$pre$phiZ2D = 0, $$pre16$i$i = 0, $$sink = 0, $$sink325 = 0, $$sink326 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0;\n var $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0;\n var $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0;\n var $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0;\n var $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0;\n var $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0;\n var $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0;\n var $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0;\n var $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0;\n var $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0;\n var $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0;\n var $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0;\n var $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0;\n var $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0;\n var $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0;\n var $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0;\n var $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0;\n var $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0;\n var $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0;\n var $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0;\n var $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0;\n var $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0;\n var $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0;\n var $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0;\n var $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0;\n var $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0;\n var $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0;\n var $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0;\n var $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0;\n var $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0;\n var $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0;\n var $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0;\n var $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0;\n var $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0;\n var $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0;\n var $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0;\n var $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0;\n var $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0;\n var $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0;\n var $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0;\n var $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0;\n var $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0;\n var $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0;\n var $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0;\n var $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0;\n var $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0;\n var $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0;\n var $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0;\n var $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0;\n var $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0;\n var $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0;\n var $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0;\n var $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0;\n var $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0;\n var $997 = 0, $998 = 0, $999 = 0, $cond$i = 0, $cond$i$i = 0, $cond$i207 = 0, $not$$i = 0, $or$cond$i = 0, $or$cond$i213 = 0, $or$cond1$i = 0, $or$cond11$i = 0, $or$cond2$i = 0, $or$cond2$i214 = 0, $or$cond5$i = 0, $or$cond50$i = 0, $or$cond51$i = 0, $or$cond6$i = 0, $or$cond7$i = 0, $or$cond8$i = 0, $or$cond8$not$i = 0;\n var $spec$select$i = 0, $spec$select$i205 = 0, $spec$select1$i = 0, $spec$select3$i = 0, $spec$select49$i = 0, $spec$select7$i = 0, $spec$select9$i = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = sp;\n $2 = ($0>>>0)<(245);\n do {\n  if ($2) {\n   $3 = ($0>>>0)<(11);\n   $4 = (($0) + 11)|0;\n   $5 = $4 & -8;\n   $6 = $3 ? 16 : $5;\n   $7 = $6 >>> 3;\n   $8 = HEAP32[5323]|0;\n   $9 = $8 >>> $7;\n   $10 = $9 & 3;\n   $11 = ($10|0)==(0);\n   if (!($11)) {\n    $12 = $9 & 1;\n    $13 = $12 ^ 1;\n    $14 = (($13) + ($7))|0;\n    $15 = $14 << 1;\n    $16 = (21332 + ($15<<2)|0);\n    $17 = ((($16)) + 8|0);\n    $18 = HEAP32[$17>>2]|0;\n    $19 = ((($18)) + 8|0);\n    $20 = HEAP32[$19>>2]|0;\n    $21 = ($20|0)==($16|0);\n    do {\n     if ($21) {\n      $22 = 1 << $14;\n      $23 = $22 ^ -1;\n      $24 = $8 & $23;\n      HEAP32[5323] = $24;\n     } else {\n      $25 = HEAP32[(21308)>>2]|0;\n      $26 = ($25>>>0)>($20>>>0);\n      if ($26) {\n       _abort();\n       // unreachable;\n      }\n      $27 = ((($20)) + 12|0);\n      $28 = HEAP32[$27>>2]|0;\n      $29 = ($28|0)==($18|0);\n      if ($29) {\n       HEAP32[$27>>2] = $16;\n       HEAP32[$17>>2] = $20;\n       break;\n      } else {\n       _abort();\n       // unreachable;\n      }\n     }\n    } while(0);\n    $30 = $14 << 3;\n    $31 = $30 | 3;\n    $32 = ((($18)) + 4|0);\n    HEAP32[$32>>2] = $31;\n    $33 = (($18) + ($30)|0);\n    $34 = ((($33)) + 4|0);\n    $35 = HEAP32[$34>>2]|0;\n    $36 = $35 | 1;\n    HEAP32[$34>>2] = $36;\n    $$0 = $19;\n    STACKTOP = sp;return ($$0|0);\n   }\n   $37 = HEAP32[(21300)>>2]|0;\n   $38 = ($6>>>0)>($37>>>0);\n   if ($38) {\n    $39 = ($9|0)==(0);\n    if (!($39)) {\n     $40 = $9 << $7;\n     $41 = 2 << $7;\n     $42 = (0 - ($41))|0;\n     $43 = $41 | $42;\n     $44 = $40 & $43;\n     $45 = (0 - ($44))|0;\n     $46 = $44 & $45;\n     $47 = (($46) + -1)|0;\n     $48 = $47 >>> 12;\n     $49 = $48 & 16;\n     $50 = $47 >>> $49;\n     $51 = $50 >>> 5;\n     $52 = $51 & 8;\n     $53 = $52 | $49;\n     $54 = $50 >>> $52;\n     $55 = $54 >>> 2;\n     $56 = $55 & 4;\n     $57 = $53 | $56;\n     $58 = $54 >>> $56;\n     $59 = $58 >>> 1;\n     $60 = $59 & 2;\n     $61 = $57 | $60;\n     $62 = $58 >>> $60;\n     $63 = $62 >>> 1;\n     $64 = $63 & 1;\n     $65 = $61 | $64;\n     $66 = $62 >>> $64;\n     $67 = (($65) + ($66))|0;\n     $68 = $67 << 1;\n     $69 = (21332 + ($68<<2)|0);\n     $70 = ((($69)) + 8|0);\n     $71 = HEAP32[$70>>2]|0;\n     $72 = ((($71)) + 8|0);\n     $73 = HEAP32[$72>>2]|0;\n     $74 = ($73|0)==($69|0);\n     do {\n      if ($74) {\n       $75 = 1 << $67;\n       $76 = $75 ^ -1;\n       $77 = $8 & $76;\n       HEAP32[5323] = $77;\n       $98 = $77;\n      } else {\n       $78 = HEAP32[(21308)>>2]|0;\n       $79 = ($78>>>0)>($73>>>0);\n       if ($79) {\n        _abort();\n        // unreachable;\n       }\n       $80 = ((($73)) + 12|0);\n       $81 = HEAP32[$80>>2]|0;\n       $82 = ($81|0)==($71|0);\n       if ($82) {\n        HEAP32[$80>>2] = $69;\n        HEAP32[$70>>2] = $73;\n        $98 = $8;\n        break;\n       } else {\n        _abort();\n        // unreachable;\n       }\n      }\n     } while(0);\n     $83 = $67 << 3;\n     $84 = (($83) - ($6))|0;\n     $85 = $6 | 3;\n     $86 = ((($71)) + 4|0);\n     HEAP32[$86>>2] = $85;\n     $87 = (($71) + ($6)|0);\n     $88 = $84 | 1;\n     $89 = ((($87)) + 4|0);\n     HEAP32[$89>>2] = $88;\n     $90 = (($71) + ($83)|0);\n     HEAP32[$90>>2] = $84;\n     $91 = ($37|0)==(0);\n     if (!($91)) {\n      $92 = HEAP32[(21312)>>2]|0;\n      $93 = $37 >>> 3;\n      $94 = $93 << 1;\n      $95 = (21332 + ($94<<2)|0);\n      $96 = 1 << $93;\n      $97 = $98 & $96;\n      $99 = ($97|0)==(0);\n      if ($99) {\n       $100 = $98 | $96;\n       HEAP32[5323] = $100;\n       $$pre = ((($95)) + 8|0);\n       $$0199 = $95;$$pre$phiZ2D = $$pre;\n      } else {\n       $101 = ((($95)) + 8|0);\n       $102 = HEAP32[$101>>2]|0;\n       $103 = HEAP32[(21308)>>2]|0;\n       $104 = ($103>>>0)>($102>>>0);\n       if ($104) {\n        _abort();\n        // unreachable;\n       } else {\n        $$0199 = $102;$$pre$phiZ2D = $101;\n       }\n      }\n      HEAP32[$$pre$phiZ2D>>2] = $92;\n      $105 = ((($$0199)) + 12|0);\n      HEAP32[$105>>2] = $92;\n      $106 = ((($92)) + 8|0);\n      HEAP32[$106>>2] = $$0199;\n      $107 = ((($92)) + 12|0);\n      HEAP32[$107>>2] = $95;\n     }\n     HEAP32[(21300)>>2] = $84;\n     HEAP32[(21312)>>2] = $87;\n     $$0 = $72;\n     STACKTOP = sp;return ($$0|0);\n    }\n    $108 = HEAP32[(21296)>>2]|0;\n    $109 = ($108|0)==(0);\n    if ($109) {\n     $$0197 = $6;\n    } else {\n     $110 = (0 - ($108))|0;\n     $111 = $108 & $110;\n     $112 = (($111) + -1)|0;\n     $113 = $112 >>> 12;\n     $114 = $113 & 16;\n     $115 = $112 >>> $114;\n     $116 = $115 >>> 5;\n     $117 = $116 & 8;\n     $118 = $117 | $114;\n     $119 = $115 >>> $117;\n     $120 = $119 >>> 2;\n     $121 = $120 & 4;\n     $122 = $118 | $121;\n     $123 = $119 >>> $121;\n     $124 = $123 >>> 1;\n     $125 = $124 & 2;\n     $126 = $122 | $125;\n     $127 = $123 >>> $125;\n     $128 = $127 >>> 1;\n     $129 = $128 & 1;\n     $130 = $126 | $129;\n     $131 = $127 >>> $129;\n     $132 = (($130) + ($131))|0;\n     $133 = (21596 + ($132<<2)|0);\n     $134 = HEAP32[$133>>2]|0;\n     $135 = ((($134)) + 4|0);\n     $136 = HEAP32[$135>>2]|0;\n     $137 = $136 & -8;\n     $138 = (($137) - ($6))|0;\n     $$0189$i = $134;$$0190$i = $134;$$0191$i = $138;\n     while(1) {\n      $139 = ((($$0189$i)) + 16|0);\n      $140 = HEAP32[$139>>2]|0;\n      $141 = ($140|0)==(0|0);\n      if ($141) {\n       $142 = ((($$0189$i)) + 20|0);\n       $143 = HEAP32[$142>>2]|0;\n       $144 = ($143|0)==(0|0);\n       if ($144) {\n        break;\n       } else {\n        $146 = $143;\n       }\n      } else {\n       $146 = $140;\n      }\n      $145 = ((($146)) + 4|0);\n      $147 = HEAP32[$145>>2]|0;\n      $148 = $147 & -8;\n      $149 = (($148) - ($6))|0;\n      $150 = ($149>>>0)<($$0191$i>>>0);\n      $spec$select$i = $150 ? $149 : $$0191$i;\n      $spec$select1$i = $150 ? $146 : $$0190$i;\n      $$0189$i = $146;$$0190$i = $spec$select1$i;$$0191$i = $spec$select$i;\n     }\n     $151 = HEAP32[(21308)>>2]|0;\n     $152 = ($151>>>0)>($$0190$i>>>0);\n     if ($152) {\n      _abort();\n      // unreachable;\n     }\n     $153 = (($$0190$i) + ($6)|0);\n     $154 = ($153>>>0)>($$0190$i>>>0);\n     if (!($154)) {\n      _abort();\n      // unreachable;\n     }\n     $155 = ((($$0190$i)) + 24|0);\n     $156 = HEAP32[$155>>2]|0;\n     $157 = ((($$0190$i)) + 12|0);\n     $158 = HEAP32[$157>>2]|0;\n     $159 = ($158|0)==($$0190$i|0);\n     do {\n      if ($159) {\n       $169 = ((($$0190$i)) + 20|0);\n       $170 = HEAP32[$169>>2]|0;\n       $171 = ($170|0)==(0|0);\n       if ($171) {\n        $172 = ((($$0190$i)) + 16|0);\n        $173 = HEAP32[$172>>2]|0;\n        $174 = ($173|0)==(0|0);\n        if ($174) {\n         $$3$i = 0;\n         break;\n        } else {\n         $$1194$i$ph = $173;$$1196$i$ph = $172;\n        }\n       } else {\n        $$1194$i$ph = $170;$$1196$i$ph = $169;\n       }\n       $$1194$i = $$1194$i$ph;$$1196$i = $$1196$i$ph;\n       while(1) {\n        $175 = ((($$1194$i)) + 20|0);\n        $176 = HEAP32[$175>>2]|0;\n        $177 = ($176|0)==(0|0);\n        if ($177) {\n         $178 = ((($$1194$i)) + 16|0);\n         $179 = HEAP32[$178>>2]|0;\n         $180 = ($179|0)==(0|0);\n         if ($180) {\n          break;\n         } else {\n          $$1194$i$be = $179;$$1196$i$be = $178;\n         }\n        } else {\n         $$1194$i$be = $176;$$1196$i$be = $175;\n        }\n        $$1194$i = $$1194$i$be;$$1196$i = $$1196$i$be;\n       }\n       $181 = ($151>>>0)>($$1196$i>>>0);\n       if ($181) {\n        _abort();\n        // unreachable;\n       } else {\n        HEAP32[$$1196$i>>2] = 0;\n        $$3$i = $$1194$i;\n        break;\n       }\n      } else {\n       $160 = ((($$0190$i)) + 8|0);\n       $161 = HEAP32[$160>>2]|0;\n       $162 = ($151>>>0)>($161>>>0);\n       if ($162) {\n        _abort();\n        // unreachable;\n       }\n       $163 = ((($161)) + 12|0);\n       $164 = HEAP32[$163>>2]|0;\n       $165 = ($164|0)==($$0190$i|0);\n       if (!($165)) {\n        _abort();\n        // unreachable;\n       }\n       $166 = ((($158)) + 8|0);\n       $167 = HEAP32[$166>>2]|0;\n       $168 = ($167|0)==($$0190$i|0);\n       if ($168) {\n        HEAP32[$163>>2] = $158;\n        HEAP32[$166>>2] = $161;\n        $$3$i = $158;\n        break;\n       } else {\n        _abort();\n        // unreachable;\n       }\n      }\n     } while(0);\n     $182 = ($156|0)==(0|0);\n     L78: do {\n      if (!($182)) {\n       $183 = ((($$0190$i)) + 28|0);\n       $184 = HEAP32[$183>>2]|0;\n       $185 = (21596 + ($184<<2)|0);\n       $186 = HEAP32[$185>>2]|0;\n       $187 = ($$0190$i|0)==($186|0);\n       do {\n        if ($187) {\n         HEAP32[$185>>2] = $$3$i;\n         $cond$i = ($$3$i|0)==(0|0);\n         if ($cond$i) {\n          $188 = 1 << $184;\n          $189 = $188 ^ -1;\n          $190 = $108 & $189;\n          HEAP32[(21296)>>2] = $190;\n          break L78;\n         }\n        } else {\n         $191 = HEAP32[(21308)>>2]|0;\n         $192 = ($191>>>0)>($156>>>0);\n         if ($192) {\n          _abort();\n          // unreachable;\n         } else {\n          $193 = ((($156)) + 16|0);\n          $194 = HEAP32[$193>>2]|0;\n          $195 = ($194|0)==($$0190$i|0);\n          $196 = ((($156)) + 20|0);\n          $$sink = $195 ? $193 : $196;\n          HEAP32[$$sink>>2] = $$3$i;\n          $197 = ($$3$i|0)==(0|0);\n          if ($197) {\n           break L78;\n          } else {\n           break;\n          }\n         }\n        }\n       } while(0);\n       $198 = HEAP32[(21308)>>2]|0;\n       $199 = ($198>>>0)>($$3$i>>>0);\n       if ($199) {\n        _abort();\n        // unreachable;\n       }\n       $200 = ((($$3$i)) + 24|0);\n       HEAP32[$200>>2] = $156;\n       $201 = ((($$0190$i)) + 16|0);\n       $202 = HEAP32[$201>>2]|0;\n       $203 = ($202|0)==(0|0);\n       do {\n        if (!($203)) {\n         $204 = ($198>>>0)>($202>>>0);\n         if ($204) {\n          _abort();\n          // unreachable;\n         } else {\n          $205 = ((($$3$i)) + 16|0);\n          HEAP32[$205>>2] = $202;\n          $206 = ((($202)) + 24|0);\n          HEAP32[$206>>2] = $$3$i;\n          break;\n         }\n        }\n       } while(0);\n       $207 = ((($$0190$i)) + 20|0);\n       $208 = HEAP32[$207>>2]|0;\n       $209 = ($208|0)==(0|0);\n       if (!($209)) {\n        $210 = HEAP32[(21308)>>2]|0;\n        $211 = ($210>>>0)>($208>>>0);\n        if ($211) {\n         _abort();\n         // unreachable;\n        } else {\n         $212 = ((($$3$i)) + 20|0);\n         HEAP32[$212>>2] = $208;\n         $213 = ((($208)) + 24|0);\n         HEAP32[$213>>2] = $$3$i;\n         break;\n        }\n       }\n      }\n     } while(0);\n     $214 = ($$0191$i>>>0)<(16);\n     if ($214) {\n      $215 = (($$0191$i) + ($6))|0;\n      $216 = $215 | 3;\n      $217 = ((($$0190$i)) + 4|0);\n      HEAP32[$217>>2] = $216;\n      $218 = (($$0190$i) + ($215)|0);\n      $219 = ((($218)) + 4|0);\n      $220 = HEAP32[$219>>2]|0;\n      $221 = $220 | 1;\n      HEAP32[$219>>2] = $221;\n     } else {\n      $222 = $6 | 3;\n      $223 = ((($$0190$i)) + 4|0);\n      HEAP32[$223>>2] = $222;\n      $224 = $$0191$i | 1;\n      $225 = ((($153)) + 4|0);\n      HEAP32[$225>>2] = $224;\n      $226 = (($153) + ($$0191$i)|0);\n      HEAP32[$226>>2] = $$0191$i;\n      $227 = ($37|0)==(0);\n      if (!($227)) {\n       $228 = HEAP32[(21312)>>2]|0;\n       $229 = $37 >>> 3;\n       $230 = $229 << 1;\n       $231 = (21332 + ($230<<2)|0);\n       $232 = 1 << $229;\n       $233 = $232 & $8;\n       $234 = ($233|0)==(0);\n       if ($234) {\n        $235 = $232 | $8;\n        HEAP32[5323] = $235;\n        $$pre$i = ((($231)) + 8|0);\n        $$0187$i = $231;$$pre$phi$iZ2D = $$pre$i;\n       } else {\n        $236 = ((($231)) + 8|0);\n        $237 = HEAP32[$236>>2]|0;\n        $238 = HEAP32[(21308)>>2]|0;\n        $239 = ($238>>>0)>($237>>>0);\n        if ($239) {\n         _abort();\n         // unreachable;\n        } else {\n         $$0187$i = $237;$$pre$phi$iZ2D = $236;\n        }\n       }\n       HEAP32[$$pre$phi$iZ2D>>2] = $228;\n       $240 = ((($$0187$i)) + 12|0);\n       HEAP32[$240>>2] = $228;\n       $241 = ((($228)) + 8|0);\n       HEAP32[$241>>2] = $$0187$i;\n       $242 = ((($228)) + 12|0);\n       HEAP32[$242>>2] = $231;\n      }\n      HEAP32[(21300)>>2] = $$0191$i;\n      HEAP32[(21312)>>2] = $153;\n     }\n     $243 = ((($$0190$i)) + 8|0);\n     $$0 = $243;\n     STACKTOP = sp;return ($$0|0);\n    }\n   } else {\n    $$0197 = $6;\n   }\n  } else {\n   $244 = ($0>>>0)>(4294967231);\n   if ($244) {\n    $$0197 = -1;\n   } else {\n    $245 = (($0) + 11)|0;\n    $246 = $245 & -8;\n    $247 = HEAP32[(21296)>>2]|0;\n    $248 = ($247|0)==(0);\n    if ($248) {\n     $$0197 = $246;\n    } else {\n     $249 = (0 - ($246))|0;\n     $250 = $245 >>> 8;\n     $251 = ($250|0)==(0);\n     if ($251) {\n      $$0357$i = 0;\n     } else {\n      $252 = ($246>>>0)>(16777215);\n      if ($252) {\n       $$0357$i = 31;\n      } else {\n       $253 = (($250) + 1048320)|0;\n       $254 = $253 >>> 16;\n       $255 = $254 & 8;\n       $256 = $250 << $255;\n       $257 = (($256) + 520192)|0;\n       $258 = $257 >>> 16;\n       $259 = $258 & 4;\n       $260 = $259 | $255;\n       $261 = $256 << $259;\n       $262 = (($261) + 245760)|0;\n       $263 = $262 >>> 16;\n       $264 = $263 & 2;\n       $265 = $260 | $264;\n       $266 = (14 - ($265))|0;\n       $267 = $261 << $264;\n       $268 = $267 >>> 15;\n       $269 = (($266) + ($268))|0;\n       $270 = $269 << 1;\n       $271 = (($269) + 7)|0;\n       $272 = $246 >>> $271;\n       $273 = $272 & 1;\n       $274 = $273 | $270;\n       $$0357$i = $274;\n      }\n     }\n     $275 = (21596 + ($$0357$i<<2)|0);\n     $276 = HEAP32[$275>>2]|0;\n     $277 = ($276|0)==(0|0);\n     L122: do {\n      if ($277) {\n       $$2353$i = 0;$$3$i203 = 0;$$3348$i = $249;\n       label = 85;\n      } else {\n       $278 = ($$0357$i|0)==(31);\n       $279 = $$0357$i >>> 1;\n       $280 = (25 - ($279))|0;\n       $281 = $278 ? 0 : $280;\n       $282 = $246 << $281;\n       $$0340$i = 0;$$0345$i = $249;$$0351$i = $276;$$0358$i = $282;$$0361$i = 0;\n       while(1) {\n        $283 = ((($$0351$i)) + 4|0);\n        $284 = HEAP32[$283>>2]|0;\n        $285 = $284 & -8;\n        $286 = (($285) - ($246))|0;\n        $287 = ($286>>>0)<($$0345$i>>>0);\n        if ($287) {\n         $288 = ($286|0)==(0);\n         if ($288) {\n          $$420$i$ph = $$0351$i;$$434919$i$ph = 0;$$535618$i$ph = $$0351$i;\n          label = 89;\n          break L122;\n         } else {\n          $$1341$i = $$0351$i;$$1346$i = $286;\n         }\n        } else {\n         $$1341$i = $$0340$i;$$1346$i = $$0345$i;\n        }\n        $289 = ((($$0351$i)) + 20|0);\n        $290 = HEAP32[$289>>2]|0;\n        $291 = $$0358$i >>> 31;\n        $292 = (((($$0351$i)) + 16|0) + ($291<<2)|0);\n        $293 = HEAP32[$292>>2]|0;\n        $294 = ($290|0)==(0|0);\n        $295 = ($290|0)==($293|0);\n        $or$cond2$i = $294 | $295;\n        $$1362$i = $or$cond2$i ? $$0361$i : $290;\n        $296 = ($293|0)==(0|0);\n        $spec$select7$i = $$0358$i << 1;\n        if ($296) {\n         $$2353$i = $$1362$i;$$3$i203 = $$1341$i;$$3348$i = $$1346$i;\n         label = 85;\n         break;\n        } else {\n         $$0340$i = $$1341$i;$$0345$i = $$1346$i;$$0351$i = $293;$$0358$i = $spec$select7$i;$$0361$i = $$1362$i;\n        }\n       }\n      }\n     } while(0);\n     if ((label|0) == 85) {\n      $297 = ($$2353$i|0)==(0|0);\n      $298 = ($$3$i203|0)==(0|0);\n      $or$cond$i = $297 & $298;\n      if ($or$cond$i) {\n       $299 = 2 << $$0357$i;\n       $300 = (0 - ($299))|0;\n       $301 = $299 | $300;\n       $302 = $301 & $247;\n       $303 = ($302|0)==(0);\n       if ($303) {\n        $$0197 = $246;\n        break;\n       }\n       $304 = (0 - ($302))|0;\n       $305 = $302 & $304;\n       $306 = (($305) + -1)|0;\n       $307 = $306 >>> 12;\n       $308 = $307 & 16;\n       $309 = $306 >>> $308;\n       $310 = $309 >>> 5;\n       $311 = $310 & 8;\n       $312 = $311 | $308;\n       $313 = $309 >>> $311;\n       $314 = $313 >>> 2;\n       $315 = $314 & 4;\n       $316 = $312 | $315;\n       $317 = $313 >>> $315;\n       $318 = $317 >>> 1;\n       $319 = $318 & 2;\n       $320 = $316 | $319;\n       $321 = $317 >>> $319;\n       $322 = $321 >>> 1;\n       $323 = $322 & 1;\n       $324 = $320 | $323;\n       $325 = $321 >>> $323;\n       $326 = (($324) + ($325))|0;\n       $327 = (21596 + ($326<<2)|0);\n       $328 = HEAP32[$327>>2]|0;\n       $$3$i203218 = 0;$$4355$i = $328;\n      } else {\n       $$3$i203218 = $$3$i203;$$4355$i = $$2353$i;\n      }\n      $329 = ($$4355$i|0)==(0|0);\n      if ($329) {\n       $$4$lcssa$i = $$3$i203218;$$4349$lcssa$i = $$3348$i;\n      } else {\n       $$420$i$ph = $$3$i203218;$$434919$i$ph = $$3348$i;$$535618$i$ph = $$4355$i;\n       label = 89;\n      }\n     }\n     if ((label|0) == 89) {\n      $$420$i = $$420$i$ph;$$434919$i = $$434919$i$ph;$$535618$i = $$535618$i$ph;\n      while(1) {\n       $330 = ((($$535618$i)) + 4|0);\n       $331 = HEAP32[$330>>2]|0;\n       $332 = $331 & -8;\n       $333 = (($332) - ($246))|0;\n       $334 = ($333>>>0)<($$434919$i>>>0);\n       $spec$select$i205 = $334 ? $333 : $$434919$i;\n       $spec$select3$i = $334 ? $$535618$i : $$420$i;\n       $335 = ((($$535618$i)) + 16|0);\n       $336 = HEAP32[$335>>2]|0;\n       $337 = ($336|0)==(0|0);\n       if ($337) {\n        $338 = ((($$535618$i)) + 20|0);\n        $339 = HEAP32[$338>>2]|0;\n        $341 = $339;\n       } else {\n        $341 = $336;\n       }\n       $340 = ($341|0)==(0|0);\n       if ($340) {\n        $$4$lcssa$i = $spec$select3$i;$$4349$lcssa$i = $spec$select$i205;\n        break;\n       } else {\n        $$420$i = $spec$select3$i;$$434919$i = $spec$select$i205;$$535618$i = $341;\n       }\n      }\n     }\n     $342 = ($$4$lcssa$i|0)==(0|0);\n     if ($342) {\n      $$0197 = $246;\n     } else {\n      $343 = HEAP32[(21300)>>2]|0;\n      $344 = (($343) - ($246))|0;\n      $345 = ($$4349$lcssa$i>>>0)<($344>>>0);\n      if ($345) {\n       $346 = HEAP32[(21308)>>2]|0;\n       $347 = ($346>>>0)>($$4$lcssa$i>>>0);\n       if ($347) {\n        _abort();\n        // unreachable;\n       }\n       $348 = (($$4$lcssa$i) + ($246)|0);\n       $349 = ($348>>>0)>($$4$lcssa$i>>>0);\n       if (!($349)) {\n        _abort();\n        // unreachable;\n       }\n       $350 = ((($$4$lcssa$i)) + 24|0);\n       $351 = HEAP32[$350>>2]|0;\n       $352 = ((($$4$lcssa$i)) + 12|0);\n       $353 = HEAP32[$352>>2]|0;\n       $354 = ($353|0)==($$4$lcssa$i|0);\n       do {\n        if ($354) {\n         $364 = ((($$4$lcssa$i)) + 20|0);\n         $365 = HEAP32[$364>>2]|0;\n         $366 = ($365|0)==(0|0);\n         if ($366) {\n          $367 = ((($$4$lcssa$i)) + 16|0);\n          $368 = HEAP32[$367>>2]|0;\n          $369 = ($368|0)==(0|0);\n          if ($369) {\n           $$3371$i = 0;\n           break;\n          } else {\n           $$1369$i$ph = $368;$$1373$i$ph = $367;\n          }\n         } else {\n          $$1369$i$ph = $365;$$1373$i$ph = $364;\n         }\n         $$1369$i = $$1369$i$ph;$$1373$i = $$1373$i$ph;\n         while(1) {\n          $370 = ((($$1369$i)) + 20|0);\n          $371 = HEAP32[$370>>2]|0;\n          $372 = ($371|0)==(0|0);\n          if ($372) {\n           $373 = ((($$1369$i)) + 16|0);\n           $374 = HEAP32[$373>>2]|0;\n           $375 = ($374|0)==(0|0);\n           if ($375) {\n            break;\n           } else {\n            $$1369$i$be = $374;$$1373$i$be = $373;\n           }\n          } else {\n           $$1369$i$be = $371;$$1373$i$be = $370;\n          }\n          $$1369$i = $$1369$i$be;$$1373$i = $$1373$i$be;\n         }\n         $376 = ($346>>>0)>($$1373$i>>>0);\n         if ($376) {\n          _abort();\n          // unreachable;\n         } else {\n          HEAP32[$$1373$i>>2] = 0;\n          $$3371$i = $$1369$i;\n          break;\n         }\n        } else {\n         $355 = ((($$4$lcssa$i)) + 8|0);\n         $356 = HEAP32[$355>>2]|0;\n         $357 = ($346>>>0)>($356>>>0);\n         if ($357) {\n          _abort();\n          // unreachable;\n         }\n         $358 = ((($356)) + 12|0);\n         $359 = HEAP32[$358>>2]|0;\n         $360 = ($359|0)==($$4$lcssa$i|0);\n         if (!($360)) {\n          _abort();\n          // unreachable;\n         }\n         $361 = ((($353)) + 8|0);\n         $362 = HEAP32[$361>>2]|0;\n         $363 = ($362|0)==($$4$lcssa$i|0);\n         if ($363) {\n          HEAP32[$358>>2] = $353;\n          HEAP32[$361>>2] = $356;\n          $$3371$i = $353;\n          break;\n         } else {\n          _abort();\n          // unreachable;\n         }\n        }\n       } while(0);\n       $377 = ($351|0)==(0|0);\n       L176: do {\n        if ($377) {\n         $469 = $247;\n        } else {\n         $378 = ((($$4$lcssa$i)) + 28|0);\n         $379 = HEAP32[$378>>2]|0;\n         $380 = (21596 + ($379<<2)|0);\n         $381 = HEAP32[$380>>2]|0;\n         $382 = ($$4$lcssa$i|0)==($381|0);\n         do {\n          if ($382) {\n           HEAP32[$380>>2] = $$3371$i;\n           $cond$i207 = ($$3371$i|0)==(0|0);\n           if ($cond$i207) {\n            $383 = 1 << $379;\n            $384 = $383 ^ -1;\n            $385 = $247 & $384;\n            HEAP32[(21296)>>2] = $385;\n            $469 = $385;\n            break L176;\n           }\n          } else {\n           $386 = HEAP32[(21308)>>2]|0;\n           $387 = ($386>>>0)>($351>>>0);\n           if ($387) {\n            _abort();\n            // unreachable;\n           } else {\n            $388 = ((($351)) + 16|0);\n            $389 = HEAP32[$388>>2]|0;\n            $390 = ($389|0)==($$4$lcssa$i|0);\n            $391 = ((($351)) + 20|0);\n            $$sink325 = $390 ? $388 : $391;\n            HEAP32[$$sink325>>2] = $$3371$i;\n            $392 = ($$3371$i|0)==(0|0);\n            if ($392) {\n             $469 = $247;\n             break L176;\n            } else {\n             break;\n            }\n           }\n          }\n         } while(0);\n         $393 = HEAP32[(21308)>>2]|0;\n         $394 = ($393>>>0)>($$3371$i>>>0);\n         if ($394) {\n          _abort();\n          // unreachable;\n         }\n         $395 = ((($$3371$i)) + 24|0);\n         HEAP32[$395>>2] = $351;\n         $396 = ((($$4$lcssa$i)) + 16|0);\n         $397 = HEAP32[$396>>2]|0;\n         $398 = ($397|0)==(0|0);\n         do {\n          if (!($398)) {\n           $399 = ($393>>>0)>($397>>>0);\n           if ($399) {\n            _abort();\n            // unreachable;\n           } else {\n            $400 = ((($$3371$i)) + 16|0);\n            HEAP32[$400>>2] = $397;\n            $401 = ((($397)) + 24|0);\n            HEAP32[$401>>2] = $$3371$i;\n            break;\n           }\n          }\n         } while(0);\n         $402 = ((($$4$lcssa$i)) + 20|0);\n         $403 = HEAP32[$402>>2]|0;\n         $404 = ($403|0)==(0|0);\n         if ($404) {\n          $469 = $247;\n         } else {\n          $405 = HEAP32[(21308)>>2]|0;\n          $406 = ($405>>>0)>($403>>>0);\n          if ($406) {\n           _abort();\n           // unreachable;\n          } else {\n           $407 = ((($$3371$i)) + 20|0);\n           HEAP32[$407>>2] = $403;\n           $408 = ((($403)) + 24|0);\n           HEAP32[$408>>2] = $$3371$i;\n           $469 = $247;\n           break;\n          }\n         }\n        }\n       } while(0);\n       $409 = ($$4349$lcssa$i>>>0)<(16);\n       L200: do {\n        if ($409) {\n         $410 = (($$4349$lcssa$i) + ($246))|0;\n         $411 = $410 | 3;\n         $412 = ((($$4$lcssa$i)) + 4|0);\n         HEAP32[$412>>2] = $411;\n         $413 = (($$4$lcssa$i) + ($410)|0);\n         $414 = ((($413)) + 4|0);\n         $415 = HEAP32[$414>>2]|0;\n         $416 = $415 | 1;\n         HEAP32[$414>>2] = $416;\n        } else {\n         $417 = $246 | 3;\n         $418 = ((($$4$lcssa$i)) + 4|0);\n         HEAP32[$418>>2] = $417;\n         $419 = $$4349$lcssa$i | 1;\n         $420 = ((($348)) + 4|0);\n         HEAP32[$420>>2] = $419;\n         $421 = (($348) + ($$4349$lcssa$i)|0);\n         HEAP32[$421>>2] = $$4349$lcssa$i;\n         $422 = $$4349$lcssa$i >>> 3;\n         $423 = ($$4349$lcssa$i>>>0)<(256);\n         if ($423) {\n          $424 = $422 << 1;\n          $425 = (21332 + ($424<<2)|0);\n          $426 = HEAP32[5323]|0;\n          $427 = 1 << $422;\n          $428 = $426 & $427;\n          $429 = ($428|0)==(0);\n          if ($429) {\n           $430 = $426 | $427;\n           HEAP32[5323] = $430;\n           $$pre$i208 = ((($425)) + 8|0);\n           $$0367$i = $425;$$pre$phi$i209Z2D = $$pre$i208;\n          } else {\n           $431 = ((($425)) + 8|0);\n           $432 = HEAP32[$431>>2]|0;\n           $433 = HEAP32[(21308)>>2]|0;\n           $434 = ($433>>>0)>($432>>>0);\n           if ($434) {\n            _abort();\n            // unreachable;\n           } else {\n            $$0367$i = $432;$$pre$phi$i209Z2D = $431;\n           }\n          }\n          HEAP32[$$pre$phi$i209Z2D>>2] = $348;\n          $435 = ((($$0367$i)) + 12|0);\n          HEAP32[$435>>2] = $348;\n          $436 = ((($348)) + 8|0);\n          HEAP32[$436>>2] = $$0367$i;\n          $437 = ((($348)) + 12|0);\n          HEAP32[$437>>2] = $425;\n          break;\n         }\n         $438 = $$4349$lcssa$i >>> 8;\n         $439 = ($438|0)==(0);\n         if ($439) {\n          $$0360$i = 0;\n         } else {\n          $440 = ($$4349$lcssa$i>>>0)>(16777215);\n          if ($440) {\n           $$0360$i = 31;\n          } else {\n           $441 = (($438) + 1048320)|0;\n           $442 = $441 >>> 16;\n           $443 = $442 & 8;\n           $444 = $438 << $443;\n           $445 = (($444) + 520192)|0;\n           $446 = $445 >>> 16;\n           $447 = $446 & 4;\n           $448 = $447 | $443;\n           $449 = $444 << $447;\n           $450 = (($449) + 245760)|0;\n           $451 = $450 >>> 16;\n           $452 = $451 & 2;\n           $453 = $448 | $452;\n           $454 = (14 - ($453))|0;\n           $455 = $449 << $452;\n           $456 = $455 >>> 15;\n           $457 = (($454) + ($456))|0;\n           $458 = $457 << 1;\n           $459 = (($457) + 7)|0;\n           $460 = $$4349$lcssa$i >>> $459;\n           $461 = $460 & 1;\n           $462 = $461 | $458;\n           $$0360$i = $462;\n          }\n         }\n         $463 = (21596 + ($$0360$i<<2)|0);\n         $464 = ((($348)) + 28|0);\n         HEAP32[$464>>2] = $$0360$i;\n         $465 = ((($348)) + 16|0);\n         $466 = ((($465)) + 4|0);\n         HEAP32[$466>>2] = 0;\n         HEAP32[$465>>2] = 0;\n         $467 = 1 << $$0360$i;\n         $468 = $469 & $467;\n         $470 = ($468|0)==(0);\n         if ($470) {\n          $471 = $469 | $467;\n          HEAP32[(21296)>>2] = $471;\n          HEAP32[$463>>2] = $348;\n          $472 = ((($348)) + 24|0);\n          HEAP32[$472>>2] = $463;\n          $473 = ((($348)) + 12|0);\n          HEAP32[$473>>2] = $348;\n          $474 = ((($348)) + 8|0);\n          HEAP32[$474>>2] = $348;\n          break;\n         }\n         $475 = HEAP32[$463>>2]|0;\n         $476 = ((($475)) + 4|0);\n         $477 = HEAP32[$476>>2]|0;\n         $478 = $477 & -8;\n         $479 = ($478|0)==($$4349$lcssa$i|0);\n         L218: do {\n          if ($479) {\n           $$0343$lcssa$i = $475;\n          } else {\n           $480 = ($$0360$i|0)==(31);\n           $481 = $$0360$i >>> 1;\n           $482 = (25 - ($481))|0;\n           $483 = $480 ? 0 : $482;\n           $484 = $$4349$lcssa$i << $483;\n           $$034217$i = $484;$$034316$i = $475;\n           while(1) {\n            $491 = $$034217$i >>> 31;\n            $492 = (((($$034316$i)) + 16|0) + ($491<<2)|0);\n            $487 = HEAP32[$492>>2]|0;\n            $493 = ($487|0)==(0|0);\n            if ($493) {\n             break;\n            }\n            $485 = $$034217$i << 1;\n            $486 = ((($487)) + 4|0);\n            $488 = HEAP32[$486>>2]|0;\n            $489 = $488 & -8;\n            $490 = ($489|0)==($$4349$lcssa$i|0);\n            if ($490) {\n             $$0343$lcssa$i = $487;\n             break L218;\n            } else {\n             $$034217$i = $485;$$034316$i = $487;\n            }\n           }\n           $494 = HEAP32[(21308)>>2]|0;\n           $495 = ($494>>>0)>($492>>>0);\n           if ($495) {\n            _abort();\n            // unreachable;\n           } else {\n            HEAP32[$492>>2] = $348;\n            $496 = ((($348)) + 24|0);\n            HEAP32[$496>>2] = $$034316$i;\n            $497 = ((($348)) + 12|0);\n            HEAP32[$497>>2] = $348;\n            $498 = ((($348)) + 8|0);\n            HEAP32[$498>>2] = $348;\n            break L200;\n           }\n          }\n         } while(0);\n         $499 = ((($$0343$lcssa$i)) + 8|0);\n         $500 = HEAP32[$499>>2]|0;\n         $501 = HEAP32[(21308)>>2]|0;\n         $502 = ($501>>>0)<=($$0343$lcssa$i>>>0);\n         $503 = ($501>>>0)<=($500>>>0);\n         $504 = $503 & $502;\n         if ($504) {\n          $505 = ((($500)) + 12|0);\n          HEAP32[$505>>2] = $348;\n          HEAP32[$499>>2] = $348;\n          $506 = ((($348)) + 8|0);\n          HEAP32[$506>>2] = $500;\n          $507 = ((($348)) + 12|0);\n          HEAP32[$507>>2] = $$0343$lcssa$i;\n          $508 = ((($348)) + 24|0);\n          HEAP32[$508>>2] = 0;\n          break;\n         } else {\n          _abort();\n          // unreachable;\n         }\n        }\n       } while(0);\n       $509 = ((($$4$lcssa$i)) + 8|0);\n       $$0 = $509;\n       STACKTOP = sp;return ($$0|0);\n      } else {\n       $$0197 = $246;\n      }\n     }\n    }\n   }\n  }\n } while(0);\n $510 = HEAP32[(21300)>>2]|0;\n $511 = ($510>>>0)<($$0197>>>0);\n if (!($511)) {\n  $512 = (($510) - ($$0197))|0;\n  $513 = HEAP32[(21312)>>2]|0;\n  $514 = ($512>>>0)>(15);\n  if ($514) {\n   $515 = (($513) + ($$0197)|0);\n   HEAP32[(21312)>>2] = $515;\n   HEAP32[(21300)>>2] = $512;\n   $516 = $512 | 1;\n   $517 = ((($515)) + 4|0);\n   HEAP32[$517>>2] = $516;\n   $518 = (($513) + ($510)|0);\n   HEAP32[$518>>2] = $512;\n   $519 = $$0197 | 3;\n   $520 = ((($513)) + 4|0);\n   HEAP32[$520>>2] = $519;\n  } else {\n   HEAP32[(21300)>>2] = 0;\n   HEAP32[(21312)>>2] = 0;\n   $521 = $510 | 3;\n   $522 = ((($513)) + 4|0);\n   HEAP32[$522>>2] = $521;\n   $523 = (($513) + ($510)|0);\n   $524 = ((($523)) + 4|0);\n   $525 = HEAP32[$524>>2]|0;\n   $526 = $525 | 1;\n   HEAP32[$524>>2] = $526;\n  }\n  $527 = ((($513)) + 8|0);\n  $$0 = $527;\n  STACKTOP = sp;return ($$0|0);\n }\n $528 = HEAP32[(21304)>>2]|0;\n $529 = ($528>>>0)>($$0197>>>0);\n if ($529) {\n  $530 = (($528) - ($$0197))|0;\n  HEAP32[(21304)>>2] = $530;\n  $531 = HEAP32[(21316)>>2]|0;\n  $532 = (($531) + ($$0197)|0);\n  HEAP32[(21316)>>2] = $532;\n  $533 = $530 | 1;\n  $534 = ((($532)) + 4|0);\n  HEAP32[$534>>2] = $533;\n  $535 = $$0197 | 3;\n  $536 = ((($531)) + 4|0);\n  HEAP32[$536>>2] = $535;\n  $537 = ((($531)) + 8|0);\n  $$0 = $537;\n  STACKTOP = sp;return ($$0|0);\n }\n $538 = HEAP32[5441]|0;\n $539 = ($538|0)==(0);\n if ($539) {\n  HEAP32[(21772)>>2] = 4096;\n  HEAP32[(21768)>>2] = 4096;\n  HEAP32[(21776)>>2] = -1;\n  HEAP32[(21780)>>2] = -1;\n  HEAP32[(21784)>>2] = 0;\n  HEAP32[(21736)>>2] = 0;\n  $540 = $1;\n  $541 = $540 & -16;\n  $542 = $541 ^ 1431655768;\n  HEAP32[5441] = $542;\n  $546 = 4096;\n } else {\n  $$pre$i210 = HEAP32[(21772)>>2]|0;\n  $546 = $$pre$i210;\n }\n $543 = (($$0197) + 48)|0;\n $544 = (($$0197) + 47)|0;\n $545 = (($546) + ($544))|0;\n $547 = (0 - ($546))|0;\n $548 = $545 & $547;\n $549 = ($548>>>0)>($$0197>>>0);\n if (!($549)) {\n  $$0 = 0;\n  STACKTOP = sp;return ($$0|0);\n }\n $550 = HEAP32[(21732)>>2]|0;\n $551 = ($550|0)==(0);\n if (!($551)) {\n  $552 = HEAP32[(21724)>>2]|0;\n  $553 = (($552) + ($548))|0;\n  $554 = ($553>>>0)<=($552>>>0);\n  $555 = ($553>>>0)>($550>>>0);\n  $or$cond1$i = $554 | $555;\n  if ($or$cond1$i) {\n   $$0 = 0;\n   STACKTOP = sp;return ($$0|0);\n  }\n }\n $556 = HEAP32[(21736)>>2]|0;\n $557 = $556 & 4;\n $558 = ($557|0)==(0);\n L257: do {\n  if ($558) {\n   $559 = HEAP32[(21316)>>2]|0;\n   $560 = ($559|0)==(0|0);\n   L259: do {\n    if ($560) {\n     label = 173;\n    } else {\n     $$0$i$i = (21740);\n     while(1) {\n      $561 = HEAP32[$$0$i$i>>2]|0;\n      $562 = ($561>>>0)>($559>>>0);\n      if (!($562)) {\n       $563 = ((($$0$i$i)) + 4|0);\n       $564 = HEAP32[$563>>2]|0;\n       $565 = (($561) + ($564)|0);\n       $566 = ($565>>>0)>($559>>>0);\n       if ($566) {\n        break;\n       }\n      }\n      $567 = ((($$0$i$i)) + 8|0);\n      $568 = HEAP32[$567>>2]|0;\n      $569 = ($568|0)==(0|0);\n      if ($569) {\n       label = 173;\n       break L259;\n      } else {\n       $$0$i$i = $568;\n      }\n     }\n     $592 = (($545) - ($528))|0;\n     $593 = $592 & $547;\n     $594 = ($593>>>0)<(2147483647);\n     if ($594) {\n      $595 = ((($$0$i$i)) + 4|0);\n      $596 = (_sbrk(($593|0))|0);\n      $597 = HEAP32[$$0$i$i>>2]|0;\n      $598 = HEAP32[$595>>2]|0;\n      $599 = (($597) + ($598)|0);\n      $600 = ($596|0)==($599|0);\n      if ($600) {\n       $601 = ($596|0)==((-1)|0);\n       if ($601) {\n        $$2234243136$i = $593;\n       } else {\n        $$723947$i = $593;$$748$i = $596;\n        label = 190;\n        break L257;\n       }\n      } else {\n       $$2247$ph$i = $596;$$2253$ph$i = $593;\n       label = 181;\n      }\n     } else {\n      $$2234243136$i = 0;\n     }\n    }\n   } while(0);\n   do {\n    if ((label|0) == 173) {\n     $570 = (_sbrk(0)|0);\n     $571 = ($570|0)==((-1)|0);\n     if ($571) {\n      $$2234243136$i = 0;\n     } else {\n      $572 = $570;\n      $573 = HEAP32[(21768)>>2]|0;\n      $574 = (($573) + -1)|0;\n      $575 = $574 & $572;\n      $576 = ($575|0)==(0);\n      $577 = (($574) + ($572))|0;\n      $578 = (0 - ($573))|0;\n      $579 = $577 & $578;\n      $580 = (($579) - ($572))|0;\n      $581 = $576 ? 0 : $580;\n      $spec$select49$i = (($581) + ($548))|0;\n      $582 = HEAP32[(21724)>>2]|0;\n      $583 = (($spec$select49$i) + ($582))|0;\n      $584 = ($spec$select49$i>>>0)>($$0197>>>0);\n      $585 = ($spec$select49$i>>>0)<(2147483647);\n      $or$cond$i213 = $584 & $585;\n      if ($or$cond$i213) {\n       $586 = HEAP32[(21732)>>2]|0;\n       $587 = ($586|0)==(0);\n       if (!($587)) {\n        $588 = ($583>>>0)<=($582>>>0);\n        $589 = ($583>>>0)>($586>>>0);\n        $or$cond2$i214 = $588 | $589;\n        if ($or$cond2$i214) {\n         $$2234243136$i = 0;\n         break;\n        }\n       }\n       $590 = (_sbrk(($spec$select49$i|0))|0);\n       $591 = ($590|0)==($570|0);\n       if ($591) {\n        $$723947$i = $spec$select49$i;$$748$i = $570;\n        label = 190;\n        break L257;\n       } else {\n        $$2247$ph$i = $590;$$2253$ph$i = $spec$select49$i;\n        label = 181;\n       }\n      } else {\n       $$2234243136$i = 0;\n      }\n     }\n    }\n   } while(0);\n   do {\n    if ((label|0) == 181) {\n     $602 = (0 - ($$2253$ph$i))|0;\n     $603 = ($$2247$ph$i|0)!=((-1)|0);\n     $604 = ($$2253$ph$i>>>0)<(2147483647);\n     $or$cond7$i = $604 & $603;\n     $605 = ($543>>>0)>($$2253$ph$i>>>0);\n     $or$cond6$i = $605 & $or$cond7$i;\n     if (!($or$cond6$i)) {\n      $615 = ($$2247$ph$i|0)==((-1)|0);\n      if ($615) {\n       $$2234243136$i = 0;\n       break;\n      } else {\n       $$723947$i = $$2253$ph$i;$$748$i = $$2247$ph$i;\n       label = 190;\n       break L257;\n      }\n     }\n     $606 = HEAP32[(21772)>>2]|0;\n     $607 = (($544) - ($$2253$ph$i))|0;\n     $608 = (($607) + ($606))|0;\n     $609 = (0 - ($606))|0;\n     $610 = $608 & $609;\n     $611 = ($610>>>0)<(2147483647);\n     if (!($611)) {\n      $$723947$i = $$2253$ph$i;$$748$i = $$2247$ph$i;\n      label = 190;\n      break L257;\n     }\n     $612 = (_sbrk(($610|0))|0);\n     $613 = ($612|0)==((-1)|0);\n     if ($613) {\n      (_sbrk(($602|0))|0);\n      $$2234243136$i = 0;\n      break;\n     } else {\n      $614 = (($610) + ($$2253$ph$i))|0;\n      $$723947$i = $614;$$748$i = $$2247$ph$i;\n      label = 190;\n      break L257;\n     }\n    }\n   } while(0);\n   $616 = HEAP32[(21736)>>2]|0;\n   $617 = $616 | 4;\n   HEAP32[(21736)>>2] = $617;\n   $$4236$i = $$2234243136$i;\n   label = 188;\n  } else {\n   $$4236$i = 0;\n   label = 188;\n  }\n } while(0);\n if ((label|0) == 188) {\n  $618 = ($548>>>0)<(2147483647);\n  if ($618) {\n   $619 = (_sbrk(($548|0))|0);\n   $620 = (_sbrk(0)|0);\n   $621 = ($619|0)!=((-1)|0);\n   $622 = ($620|0)!=((-1)|0);\n   $or$cond5$i = $621 & $622;\n   $623 = ($619>>>0)<($620>>>0);\n   $or$cond8$i = $623 & $or$cond5$i;\n   $624 = $620;\n   $625 = $619;\n   $626 = (($624) - ($625))|0;\n   $627 = (($$0197) + 40)|0;\n   $628 = ($626>>>0)>($627>>>0);\n   $spec$select9$i = $628 ? $626 : $$4236$i;\n   $or$cond8$not$i = $or$cond8$i ^ 1;\n   $629 = ($619|0)==((-1)|0);\n   $not$$i = $628 ^ 1;\n   $630 = $629 | $not$$i;\n   $or$cond50$i = $630 | $or$cond8$not$i;\n   if (!($or$cond50$i)) {\n    $$723947$i = $spec$select9$i;$$748$i = $619;\n    label = 190;\n   }\n  }\n }\n if ((label|0) == 190) {\n  $631 = HEAP32[(21724)>>2]|0;\n  $632 = (($631) + ($$723947$i))|0;\n  HEAP32[(21724)>>2] = $632;\n  $633 = HEAP32[(21728)>>2]|0;\n  $634 = ($632>>>0)>($633>>>0);\n  if ($634) {\n   HEAP32[(21728)>>2] = $632;\n  }\n  $635 = HEAP32[(21316)>>2]|0;\n  $636 = ($635|0)==(0|0);\n  L294: do {\n   if ($636) {\n    $637 = HEAP32[(21308)>>2]|0;\n    $638 = ($637|0)==(0|0);\n    $639 = ($$748$i>>>0)<($637>>>0);\n    $or$cond11$i = $638 | $639;\n    if ($or$cond11$i) {\n     HEAP32[(21308)>>2] = $$748$i;\n    }\n    HEAP32[(21740)>>2] = $$748$i;\n    HEAP32[(21744)>>2] = $$723947$i;\n    HEAP32[(21752)>>2] = 0;\n    $640 = HEAP32[5441]|0;\n    HEAP32[(21328)>>2] = $640;\n    HEAP32[(21324)>>2] = -1;\n    HEAP32[(21344)>>2] = (21332);\n    HEAP32[(21340)>>2] = (21332);\n    HEAP32[(21352)>>2] = (21340);\n    HEAP32[(21348)>>2] = (21340);\n    HEAP32[(21360)>>2] = (21348);\n    HEAP32[(21356)>>2] = (21348);\n    HEAP32[(21368)>>2] = (21356);\n    HEAP32[(21364)>>2] = (21356);\n    HEAP32[(21376)>>2] = (21364);\n    HEAP32[(21372)>>2] = (21364);\n    HEAP32[(21384)>>2] = (21372);\n    HEAP32[(21380)>>2] = (21372);\n    HEAP32[(21392)>>2] = (21380);\n    HEAP32[(21388)>>2] = (21380);\n    HEAP32[(21400)>>2] = (21388);\n    HEAP32[(21396)>>2] = (21388);\n    HEAP32[(21408)>>2] = (21396);\n    HEAP32[(21404)>>2] = (21396);\n    HEAP32[(21416)>>2] = (21404);\n    HEAP32[(21412)>>2] = (21404);\n    HEAP32[(21424)>>2] = (21412);\n    HEAP32[(21420)>>2] = (21412);\n    HEAP32[(21432)>>2] = (21420);\n    HEAP32[(21428)>>2] = (21420);\n    HEAP32[(21440)>>2] = (21428);\n    HEAP32[(21436)>>2] = (21428);\n    HEAP32[(21448)>>2] = (21436);\n    HEAP32[(21444)>>2] = (21436);\n    HEAP32[(21456)>>2] = (21444);\n    HEAP32[(21452)>>2] = (21444);\n    HEAP32[(21464)>>2] = (21452);\n    HEAP32[(21460)>>2] = (21452);\n    HEAP32[(21472)>>2] = (21460);\n    HEAP32[(21468)>>2] = (21460);\n    HEAP32[(21480)>>2] = (21468);\n    HEAP32[(21476)>>2] = (21468);\n    HEAP32[(21488)>>2] = (21476);\n    HEAP32[(21484)>>2] = (21476);\n    HEAP32[(21496)>>2] = (21484);\n    HEAP32[(21492)>>2] = (21484);\n    HEAP32[(21504)>>2] = (21492);\n    HEAP32[(21500)>>2] = (21492);\n    HEAP32[(21512)>>2] = (21500);\n    HEAP32[(21508)>>2] = (21500);\n    HEAP32[(21520)>>2] = (21508);\n    HEAP32[(21516)>>2] = (21508);\n    HEAP32[(21528)>>2] = (21516);\n    HEAP32[(21524)>>2] = (21516);\n    HEAP32[(21536)>>2] = (21524);\n    HEAP32[(21532)>>2] = (21524);\n    HEAP32[(21544)>>2] = (21532);\n    HEAP32[(21540)>>2] = (21532);\n    HEAP32[(21552)>>2] = (21540);\n    HEAP32[(21548)>>2] = (21540);\n    HEAP32[(21560)>>2] = (21548);\n    HEAP32[(21556)>>2] = (21548);\n    HEAP32[(21568)>>2] = (21556);\n    HEAP32[(21564)>>2] = (21556);\n    HEAP32[(21576)>>2] = (21564);\n    HEAP32[(21572)>>2] = (21564);\n    HEAP32[(21584)>>2] = (21572);\n    HEAP32[(21580)>>2] = (21572);\n    HEAP32[(21592)>>2] = (21580);\n    HEAP32[(21588)>>2] = (21580);\n    $641 = (($$723947$i) + -40)|0;\n    $642 = ((($$748$i)) + 8|0);\n    $643 = $642;\n    $644 = $643 & 7;\n    $645 = ($644|0)==(0);\n    $646 = (0 - ($643))|0;\n    $647 = $646 & 7;\n    $648 = $645 ? 0 : $647;\n    $649 = (($$748$i) + ($648)|0);\n    $650 = (($641) - ($648))|0;\n    HEAP32[(21316)>>2] = $649;\n    HEAP32[(21304)>>2] = $650;\n    $651 = $650 | 1;\n    $652 = ((($649)) + 4|0);\n    HEAP32[$652>>2] = $651;\n    $653 = (($$748$i) + ($641)|0);\n    $654 = ((($653)) + 4|0);\n    HEAP32[$654>>2] = 40;\n    $655 = HEAP32[(21780)>>2]|0;\n    HEAP32[(21320)>>2] = $655;\n   } else {\n    $$024372$i = (21740);\n    while(1) {\n     $656 = HEAP32[$$024372$i>>2]|0;\n     $657 = ((($$024372$i)) + 4|0);\n     $658 = HEAP32[$657>>2]|0;\n     $659 = (($656) + ($658)|0);\n     $660 = ($$748$i|0)==($659|0);\n     if ($660) {\n      label = 199;\n      break;\n     }\n     $661 = ((($$024372$i)) + 8|0);\n     $662 = HEAP32[$661>>2]|0;\n     $663 = ($662|0)==(0|0);\n     if ($663) {\n      break;\n     } else {\n      $$024372$i = $662;\n     }\n    }\n    if ((label|0) == 199) {\n     $664 = ((($$024372$i)) + 4|0);\n     $665 = ((($$024372$i)) + 12|0);\n     $666 = HEAP32[$665>>2]|0;\n     $667 = $666 & 8;\n     $668 = ($667|0)==(0);\n     if ($668) {\n      $669 = ($656>>>0)<=($635>>>0);\n      $670 = ($$748$i>>>0)>($635>>>0);\n      $or$cond51$i = $670 & $669;\n      if ($or$cond51$i) {\n       $671 = (($658) + ($$723947$i))|0;\n       HEAP32[$664>>2] = $671;\n       $672 = HEAP32[(21304)>>2]|0;\n       $673 = (($672) + ($$723947$i))|0;\n       $674 = ((($635)) + 8|0);\n       $675 = $674;\n       $676 = $675 & 7;\n       $677 = ($676|0)==(0);\n       $678 = (0 - ($675))|0;\n       $679 = $678 & 7;\n       $680 = $677 ? 0 : $679;\n       $681 = (($635) + ($680)|0);\n       $682 = (($673) - ($680))|0;\n       HEAP32[(21316)>>2] = $681;\n       HEAP32[(21304)>>2] = $682;\n       $683 = $682 | 1;\n       $684 = ((($681)) + 4|0);\n       HEAP32[$684>>2] = $683;\n       $685 = (($635) + ($673)|0);\n       $686 = ((($685)) + 4|0);\n       HEAP32[$686>>2] = 40;\n       $687 = HEAP32[(21780)>>2]|0;\n       HEAP32[(21320)>>2] = $687;\n       break;\n      }\n     }\n    }\n    $688 = HEAP32[(21308)>>2]|0;\n    $689 = ($$748$i>>>0)<($688>>>0);\n    if ($689) {\n     HEAP32[(21308)>>2] = $$748$i;\n     $753 = $$748$i;\n    } else {\n     $753 = $688;\n    }\n    $690 = (($$748$i) + ($$723947$i)|0);\n    $$124471$i = (21740);\n    while(1) {\n     $691 = HEAP32[$$124471$i>>2]|0;\n     $692 = ($691|0)==($690|0);\n     if ($692) {\n      label = 207;\n      break;\n     }\n     $693 = ((($$124471$i)) + 8|0);\n     $694 = HEAP32[$693>>2]|0;\n     $695 = ($694|0)==(0|0);\n     if ($695) {\n      break;\n     } else {\n      $$124471$i = $694;\n     }\n    }\n    if ((label|0) == 207) {\n     $696 = ((($$124471$i)) + 12|0);\n     $697 = HEAP32[$696>>2]|0;\n     $698 = $697 & 8;\n     $699 = ($698|0)==(0);\n     if ($699) {\n      HEAP32[$$124471$i>>2] = $$748$i;\n      $700 = ((($$124471$i)) + 4|0);\n      $701 = HEAP32[$700>>2]|0;\n      $702 = (($701) + ($$723947$i))|0;\n      HEAP32[$700>>2] = $702;\n      $703 = ((($$748$i)) + 8|0);\n      $704 = $703;\n      $705 = $704 & 7;\n      $706 = ($705|0)==(0);\n      $707 = (0 - ($704))|0;\n      $708 = $707 & 7;\n      $709 = $706 ? 0 : $708;\n      $710 = (($$748$i) + ($709)|0);\n      $711 = ((($690)) + 8|0);\n      $712 = $711;\n      $713 = $712 & 7;\n      $714 = ($713|0)==(0);\n      $715 = (0 - ($712))|0;\n      $716 = $715 & 7;\n      $717 = $714 ? 0 : $716;\n      $718 = (($690) + ($717)|0);\n      $719 = $718;\n      $720 = $710;\n      $721 = (($719) - ($720))|0;\n      $722 = (($710) + ($$0197)|0);\n      $723 = (($721) - ($$0197))|0;\n      $724 = $$0197 | 3;\n      $725 = ((($710)) + 4|0);\n      HEAP32[$725>>2] = $724;\n      $726 = ($635|0)==($718|0);\n      L317: do {\n       if ($726) {\n        $727 = HEAP32[(21304)>>2]|0;\n        $728 = (($727) + ($723))|0;\n        HEAP32[(21304)>>2] = $728;\n        HEAP32[(21316)>>2] = $722;\n        $729 = $728 | 1;\n        $730 = ((($722)) + 4|0);\n        HEAP32[$730>>2] = $729;\n       } else {\n        $731 = HEAP32[(21312)>>2]|0;\n        $732 = ($731|0)==($718|0);\n        if ($732) {\n         $733 = HEAP32[(21300)>>2]|0;\n         $734 = (($733) + ($723))|0;\n         HEAP32[(21300)>>2] = $734;\n         HEAP32[(21312)>>2] = $722;\n         $735 = $734 | 1;\n         $736 = ((($722)) + 4|0);\n         HEAP32[$736>>2] = $735;\n         $737 = (($722) + ($734)|0);\n         HEAP32[$737>>2] = $734;\n         break;\n        }\n        $738 = ((($718)) + 4|0);\n        $739 = HEAP32[$738>>2]|0;\n        $740 = $739 & 3;\n        $741 = ($740|0)==(1);\n        if ($741) {\n         $742 = $739 & -8;\n         $743 = $739 >>> 3;\n         $744 = ($739>>>0)<(256);\n         L325: do {\n          if ($744) {\n           $745 = ((($718)) + 8|0);\n           $746 = HEAP32[$745>>2]|0;\n           $747 = ((($718)) + 12|0);\n           $748 = HEAP32[$747>>2]|0;\n           $749 = $743 << 1;\n           $750 = (21332 + ($749<<2)|0);\n           $751 = ($746|0)==($750|0);\n           do {\n            if (!($751)) {\n             $752 = ($753>>>0)>($746>>>0);\n             if ($752) {\n              _abort();\n              // unreachable;\n             }\n             $754 = ((($746)) + 12|0);\n             $755 = HEAP32[$754>>2]|0;\n             $756 = ($755|0)==($718|0);\n             if ($756) {\n              break;\n             }\n             _abort();\n             // unreachable;\n            }\n           } while(0);\n           $757 = ($748|0)==($746|0);\n           if ($757) {\n            $758 = 1 << $743;\n            $759 = $758 ^ -1;\n            $760 = HEAP32[5323]|0;\n            $761 = $760 & $759;\n            HEAP32[5323] = $761;\n            break;\n           }\n           $762 = ($748|0)==($750|0);\n           do {\n            if ($762) {\n             $$pre16$i$i = ((($748)) + 8|0);\n             $$pre$phi17$i$iZ2D = $$pre16$i$i;\n            } else {\n             $763 = ($753>>>0)>($748>>>0);\n             if ($763) {\n              _abort();\n              // unreachable;\n             }\n             $764 = ((($748)) + 8|0);\n             $765 = HEAP32[$764>>2]|0;\n             $766 = ($765|0)==($718|0);\n             if ($766) {\n              $$pre$phi17$i$iZ2D = $764;\n              break;\n             }\n             _abort();\n             // unreachable;\n            }\n           } while(0);\n           $767 = ((($746)) + 12|0);\n           HEAP32[$767>>2] = $748;\n           HEAP32[$$pre$phi17$i$iZ2D>>2] = $746;\n          } else {\n           $768 = ((($718)) + 24|0);\n           $769 = HEAP32[$768>>2]|0;\n           $770 = ((($718)) + 12|0);\n           $771 = HEAP32[$770>>2]|0;\n           $772 = ($771|0)==($718|0);\n           do {\n            if ($772) {\n             $782 = ((($718)) + 16|0);\n             $783 = ((($782)) + 4|0);\n             $784 = HEAP32[$783>>2]|0;\n             $785 = ($784|0)==(0|0);\n             if ($785) {\n              $786 = HEAP32[$782>>2]|0;\n              $787 = ($786|0)==(0|0);\n              if ($787) {\n               $$3$i$i = 0;\n               break;\n              } else {\n               $$1290$i$i$ph = $786;$$1292$i$i$ph = $782;\n              }\n             } else {\n              $$1290$i$i$ph = $784;$$1292$i$i$ph = $783;\n             }\n             $$1290$i$i = $$1290$i$i$ph;$$1292$i$i = $$1292$i$i$ph;\n             while(1) {\n              $788 = ((($$1290$i$i)) + 20|0);\n              $789 = HEAP32[$788>>2]|0;\n              $790 = ($789|0)==(0|0);\n              if ($790) {\n               $791 = ((($$1290$i$i)) + 16|0);\n               $792 = HEAP32[$791>>2]|0;\n               $793 = ($792|0)==(0|0);\n               if ($793) {\n                break;\n               } else {\n                $$1290$i$i$be = $792;$$1292$i$i$be = $791;\n               }\n              } else {\n               $$1290$i$i$be = $789;$$1292$i$i$be = $788;\n              }\n              $$1290$i$i = $$1290$i$i$be;$$1292$i$i = $$1292$i$i$be;\n             }\n             $794 = ($753>>>0)>($$1292$i$i>>>0);\n             if ($794) {\n              _abort();\n              // unreachable;\n             } else {\n              HEAP32[$$1292$i$i>>2] = 0;\n              $$3$i$i = $$1290$i$i;\n              break;\n             }\n            } else {\n             $773 = ((($718)) + 8|0);\n             $774 = HEAP32[$773>>2]|0;\n             $775 = ($753>>>0)>($774>>>0);\n             if ($775) {\n              _abort();\n              // unreachable;\n             }\n             $776 = ((($774)) + 12|0);\n             $777 = HEAP32[$776>>2]|0;\n             $778 = ($777|0)==($718|0);\n             if (!($778)) {\n              _abort();\n              // unreachable;\n             }\n             $779 = ((($771)) + 8|0);\n             $780 = HEAP32[$779>>2]|0;\n             $781 = ($780|0)==($718|0);\n             if ($781) {\n              HEAP32[$776>>2] = $771;\n              HEAP32[$779>>2] = $774;\n              $$3$i$i = $771;\n              break;\n             } else {\n              _abort();\n              // unreachable;\n             }\n            }\n           } while(0);\n           $795 = ($769|0)==(0|0);\n           if ($795) {\n            break;\n           }\n           $796 = ((($718)) + 28|0);\n           $797 = HEAP32[$796>>2]|0;\n           $798 = (21596 + ($797<<2)|0);\n           $799 = HEAP32[$798>>2]|0;\n           $800 = ($799|0)==($718|0);\n           do {\n            if ($800) {\n             HEAP32[$798>>2] = $$3$i$i;\n             $cond$i$i = ($$3$i$i|0)==(0|0);\n             if (!($cond$i$i)) {\n              break;\n             }\n             $801 = 1 << $797;\n             $802 = $801 ^ -1;\n             $803 = HEAP32[(21296)>>2]|0;\n             $804 = $803 & $802;\n             HEAP32[(21296)>>2] = $804;\n             break L325;\n            } else {\n             $805 = HEAP32[(21308)>>2]|0;\n             $806 = ($805>>>0)>($769>>>0);\n             if ($806) {\n              _abort();\n              // unreachable;\n             } else {\n              $807 = ((($769)) + 16|0);\n              $808 = HEAP32[$807>>2]|0;\n              $809 = ($808|0)==($718|0);\n              $810 = ((($769)) + 20|0);\n              $$sink326 = $809 ? $807 : $810;\n              HEAP32[$$sink326>>2] = $$3$i$i;\n              $811 = ($$3$i$i|0)==(0|0);\n              if ($811) {\n               break L325;\n              } else {\n               break;\n              }\n             }\n            }\n           } while(0);\n           $812 = HEAP32[(21308)>>2]|0;\n           $813 = ($812>>>0)>($$3$i$i>>>0);\n           if ($813) {\n            _abort();\n            // unreachable;\n           }\n           $814 = ((($$3$i$i)) + 24|0);\n           HEAP32[$814>>2] = $769;\n           $815 = ((($718)) + 16|0);\n           $816 = HEAP32[$815>>2]|0;\n           $817 = ($816|0)==(0|0);\n           do {\n            if (!($817)) {\n             $818 = ($812>>>0)>($816>>>0);\n             if ($818) {\n              _abort();\n              // unreachable;\n             } else {\n              $819 = ((($$3$i$i)) + 16|0);\n              HEAP32[$819>>2] = $816;\n              $820 = ((($816)) + 24|0);\n              HEAP32[$820>>2] = $$3$i$i;\n              break;\n             }\n            }\n           } while(0);\n           $821 = ((($815)) + 4|0);\n           $822 = HEAP32[$821>>2]|0;\n           $823 = ($822|0)==(0|0);\n           if ($823) {\n            break;\n           }\n           $824 = HEAP32[(21308)>>2]|0;\n           $825 = ($824>>>0)>($822>>>0);\n           if ($825) {\n            _abort();\n            // unreachable;\n           } else {\n            $826 = ((($$3$i$i)) + 20|0);\n            HEAP32[$826>>2] = $822;\n            $827 = ((($822)) + 24|0);\n            HEAP32[$827>>2] = $$3$i$i;\n            break;\n           }\n          }\n         } while(0);\n         $828 = (($718) + ($742)|0);\n         $829 = (($742) + ($723))|0;\n         $$0$i16$i = $828;$$0286$i$i = $829;\n        } else {\n         $$0$i16$i = $718;$$0286$i$i = $723;\n        }\n        $830 = ((($$0$i16$i)) + 4|0);\n        $831 = HEAP32[$830>>2]|0;\n        $832 = $831 & -2;\n        HEAP32[$830>>2] = $832;\n        $833 = $$0286$i$i | 1;\n        $834 = ((($722)) + 4|0);\n        HEAP32[$834>>2] = $833;\n        $835 = (($722) + ($$0286$i$i)|0);\n        HEAP32[$835>>2] = $$0286$i$i;\n        $836 = $$0286$i$i >>> 3;\n        $837 = ($$0286$i$i>>>0)<(256);\n        if ($837) {\n         $838 = $836 << 1;\n         $839 = (21332 + ($838<<2)|0);\n         $840 = HEAP32[5323]|0;\n         $841 = 1 << $836;\n         $842 = $840 & $841;\n         $843 = ($842|0)==(0);\n         do {\n          if ($843) {\n           $844 = $840 | $841;\n           HEAP32[5323] = $844;\n           $$pre$i17$i = ((($839)) + 8|0);\n           $$0294$i$i = $839;$$pre$phi$i18$iZ2D = $$pre$i17$i;\n          } else {\n           $845 = ((($839)) + 8|0);\n           $846 = HEAP32[$845>>2]|0;\n           $847 = HEAP32[(21308)>>2]|0;\n           $848 = ($847>>>0)>($846>>>0);\n           if (!($848)) {\n            $$0294$i$i = $846;$$pre$phi$i18$iZ2D = $845;\n            break;\n           }\n           _abort();\n           // unreachable;\n          }\n         } while(0);\n         HEAP32[$$pre$phi$i18$iZ2D>>2] = $722;\n         $849 = ((($$0294$i$i)) + 12|0);\n         HEAP32[$849>>2] = $722;\n         $850 = ((($722)) + 8|0);\n         HEAP32[$850>>2] = $$0294$i$i;\n         $851 = ((($722)) + 12|0);\n         HEAP32[$851>>2] = $839;\n         break;\n        }\n        $852 = $$0286$i$i >>> 8;\n        $853 = ($852|0)==(0);\n        do {\n         if ($853) {\n          $$0295$i$i = 0;\n         } else {\n          $854 = ($$0286$i$i>>>0)>(16777215);\n          if ($854) {\n           $$0295$i$i = 31;\n           break;\n          }\n          $855 = (($852) + 1048320)|0;\n          $856 = $855 >>> 16;\n          $857 = $856 & 8;\n          $858 = $852 << $857;\n          $859 = (($858) + 520192)|0;\n          $860 = $859 >>> 16;\n          $861 = $860 & 4;\n          $862 = $861 | $857;\n          $863 = $858 << $861;\n          $864 = (($863) + 245760)|0;\n          $865 = $864 >>> 16;\n          $866 = $865 & 2;\n          $867 = $862 | $866;\n          $868 = (14 - ($867))|0;\n          $869 = $863 << $866;\n          $870 = $869 >>> 15;\n          $871 = (($868) + ($870))|0;\n          $872 = $871 << 1;\n          $873 = (($871) + 7)|0;\n          $874 = $$0286$i$i >>> $873;\n          $875 = $874 & 1;\n          $876 = $875 | $872;\n          $$0295$i$i = $876;\n         }\n        } while(0);\n        $877 = (21596 + ($$0295$i$i<<2)|0);\n        $878 = ((($722)) + 28|0);\n        HEAP32[$878>>2] = $$0295$i$i;\n        $879 = ((($722)) + 16|0);\n        $880 = ((($879)) + 4|0);\n        HEAP32[$880>>2] = 0;\n        HEAP32[$879>>2] = 0;\n        $881 = HEAP32[(21296)>>2]|0;\n        $882 = 1 << $$0295$i$i;\n        $883 = $881 & $882;\n        $884 = ($883|0)==(0);\n        if ($884) {\n         $885 = $881 | $882;\n         HEAP32[(21296)>>2] = $885;\n         HEAP32[$877>>2] = $722;\n         $886 = ((($722)) + 24|0);\n         HEAP32[$886>>2] = $877;\n         $887 = ((($722)) + 12|0);\n         HEAP32[$887>>2] = $722;\n         $888 = ((($722)) + 8|0);\n         HEAP32[$888>>2] = $722;\n         break;\n        }\n        $889 = HEAP32[$877>>2]|0;\n        $890 = ((($889)) + 4|0);\n        $891 = HEAP32[$890>>2]|0;\n        $892 = $891 & -8;\n        $893 = ($892|0)==($$0286$i$i|0);\n        L410: do {\n         if ($893) {\n          $$0288$lcssa$i$i = $889;\n         } else {\n          $894 = ($$0295$i$i|0)==(31);\n          $895 = $$0295$i$i >>> 1;\n          $896 = (25 - ($895))|0;\n          $897 = $894 ? 0 : $896;\n          $898 = $$0286$i$i << $897;\n          $$028711$i$i = $898;$$028810$i$i = $889;\n          while(1) {\n           $905 = $$028711$i$i >>> 31;\n           $906 = (((($$028810$i$i)) + 16|0) + ($905<<2)|0);\n           $901 = HEAP32[$906>>2]|0;\n           $907 = ($901|0)==(0|0);\n           if ($907) {\n            break;\n           }\n           $899 = $$028711$i$i << 1;\n           $900 = ((($901)) + 4|0);\n           $902 = HEAP32[$900>>2]|0;\n           $903 = $902 & -8;\n           $904 = ($903|0)==($$0286$i$i|0);\n           if ($904) {\n            $$0288$lcssa$i$i = $901;\n            break L410;\n           } else {\n            $$028711$i$i = $899;$$028810$i$i = $901;\n           }\n          }\n          $908 = HEAP32[(21308)>>2]|0;\n          $909 = ($908>>>0)>($906>>>0);\n          if ($909) {\n           _abort();\n           // unreachable;\n          } else {\n           HEAP32[$906>>2] = $722;\n           $910 = ((($722)) + 24|0);\n           HEAP32[$910>>2] = $$028810$i$i;\n           $911 = ((($722)) + 12|0);\n           HEAP32[$911>>2] = $722;\n           $912 = ((($722)) + 8|0);\n           HEAP32[$912>>2] = $722;\n           break L317;\n          }\n         }\n        } while(0);\n        $913 = ((($$0288$lcssa$i$i)) + 8|0);\n        $914 = HEAP32[$913>>2]|0;\n        $915 = HEAP32[(21308)>>2]|0;\n        $916 = ($915>>>0)<=($$0288$lcssa$i$i>>>0);\n        $917 = ($915>>>0)<=($914>>>0);\n        $918 = $917 & $916;\n        if ($918) {\n         $919 = ((($914)) + 12|0);\n         HEAP32[$919>>2] = $722;\n         HEAP32[$913>>2] = $722;\n         $920 = ((($722)) + 8|0);\n         HEAP32[$920>>2] = $914;\n         $921 = ((($722)) + 12|0);\n         HEAP32[$921>>2] = $$0288$lcssa$i$i;\n         $922 = ((($722)) + 24|0);\n         HEAP32[$922>>2] = 0;\n         break;\n        } else {\n         _abort();\n         // unreachable;\n        }\n       }\n      } while(0);\n      $1059 = ((($710)) + 8|0);\n      $$0 = $1059;\n      STACKTOP = sp;return ($$0|0);\n     }\n    }\n    $$0$i$i$i = (21740);\n    while(1) {\n     $923 = HEAP32[$$0$i$i$i>>2]|0;\n     $924 = ($923>>>0)>($635>>>0);\n     if (!($924)) {\n      $925 = ((($$0$i$i$i)) + 4|0);\n      $926 = HEAP32[$925>>2]|0;\n      $927 = (($923) + ($926)|0);\n      $928 = ($927>>>0)>($635>>>0);\n      if ($928) {\n       break;\n      }\n     }\n     $929 = ((($$0$i$i$i)) + 8|0);\n     $930 = HEAP32[$929>>2]|0;\n     $$0$i$i$i = $930;\n    }\n    $931 = ((($927)) + -47|0);\n    $932 = ((($931)) + 8|0);\n    $933 = $932;\n    $934 = $933 & 7;\n    $935 = ($934|0)==(0);\n    $936 = (0 - ($933))|0;\n    $937 = $936 & 7;\n    $938 = $935 ? 0 : $937;\n    $939 = (($931) + ($938)|0);\n    $940 = ((($635)) + 16|0);\n    $941 = ($939>>>0)<($940>>>0);\n    $942 = $941 ? $635 : $939;\n    $943 = ((($942)) + 8|0);\n    $944 = ((($942)) + 24|0);\n    $945 = (($$723947$i) + -40)|0;\n    $946 = ((($$748$i)) + 8|0);\n    $947 = $946;\n    $948 = $947 & 7;\n    $949 = ($948|0)==(0);\n    $950 = (0 - ($947))|0;\n    $951 = $950 & 7;\n    $952 = $949 ? 0 : $951;\n    $953 = (($$748$i) + ($952)|0);\n    $954 = (($945) - ($952))|0;\n    HEAP32[(21316)>>2] = $953;\n    HEAP32[(21304)>>2] = $954;\n    $955 = $954 | 1;\n    $956 = ((($953)) + 4|0);\n    HEAP32[$956>>2] = $955;\n    $957 = (($$748$i) + ($945)|0);\n    $958 = ((($957)) + 4|0);\n    HEAP32[$958>>2] = 40;\n    $959 = HEAP32[(21780)>>2]|0;\n    HEAP32[(21320)>>2] = $959;\n    $960 = ((($942)) + 4|0);\n    HEAP32[$960>>2] = 27;\n    ;HEAP32[$943>>2]=HEAP32[(21740)>>2]|0;HEAP32[$943+4>>2]=HEAP32[(21740)+4>>2]|0;HEAP32[$943+8>>2]=HEAP32[(21740)+8>>2]|0;HEAP32[$943+12>>2]=HEAP32[(21740)+12>>2]|0;\n    HEAP32[(21740)>>2] = $$748$i;\n    HEAP32[(21744)>>2] = $$723947$i;\n    HEAP32[(21752)>>2] = 0;\n    HEAP32[(21748)>>2] = $943;\n    $962 = $944;\n    while(1) {\n     $961 = ((($962)) + 4|0);\n     HEAP32[$961>>2] = 7;\n     $963 = ((($962)) + 8|0);\n     $964 = ($963>>>0)<($927>>>0);\n     if ($964) {\n      $962 = $961;\n     } else {\n      break;\n     }\n    }\n    $965 = ($942|0)==($635|0);\n    if (!($965)) {\n     $966 = $942;\n     $967 = $635;\n     $968 = (($966) - ($967))|0;\n     $969 = HEAP32[$960>>2]|0;\n     $970 = $969 & -2;\n     HEAP32[$960>>2] = $970;\n     $971 = $968 | 1;\n     $972 = ((($635)) + 4|0);\n     HEAP32[$972>>2] = $971;\n     HEAP32[$942>>2] = $968;\n     $973 = $968 >>> 3;\n     $974 = ($968>>>0)<(256);\n     if ($974) {\n      $975 = $973 << 1;\n      $976 = (21332 + ($975<<2)|0);\n      $977 = HEAP32[5323]|0;\n      $978 = 1 << $973;\n      $979 = $977 & $978;\n      $980 = ($979|0)==(0);\n      if ($980) {\n       $981 = $977 | $978;\n       HEAP32[5323] = $981;\n       $$pre$i$i = ((($976)) + 8|0);\n       $$0211$i$i = $976;$$pre$phi$i$iZ2D = $$pre$i$i;\n      } else {\n       $982 = ((($976)) + 8|0);\n       $983 = HEAP32[$982>>2]|0;\n       $984 = HEAP32[(21308)>>2]|0;\n       $985 = ($984>>>0)>($983>>>0);\n       if ($985) {\n        _abort();\n        // unreachable;\n       } else {\n        $$0211$i$i = $983;$$pre$phi$i$iZ2D = $982;\n       }\n      }\n      HEAP32[$$pre$phi$i$iZ2D>>2] = $635;\n      $986 = ((($$0211$i$i)) + 12|0);\n      HEAP32[$986>>2] = $635;\n      $987 = ((($635)) + 8|0);\n      HEAP32[$987>>2] = $$0211$i$i;\n      $988 = ((($635)) + 12|0);\n      HEAP32[$988>>2] = $976;\n      break;\n     }\n     $989 = $968 >>> 8;\n     $990 = ($989|0)==(0);\n     if ($990) {\n      $$0212$i$i = 0;\n     } else {\n      $991 = ($968>>>0)>(16777215);\n      if ($991) {\n       $$0212$i$i = 31;\n      } else {\n       $992 = (($989) + 1048320)|0;\n       $993 = $992 >>> 16;\n       $994 = $993 & 8;\n       $995 = $989 << $994;\n       $996 = (($995) + 520192)|0;\n       $997 = $996 >>> 16;\n       $998 = $997 & 4;\n       $999 = $998 | $994;\n       $1000 = $995 << $998;\n       $1001 = (($1000) + 245760)|0;\n       $1002 = $1001 >>> 16;\n       $1003 = $1002 & 2;\n       $1004 = $999 | $1003;\n       $1005 = (14 - ($1004))|0;\n       $1006 = $1000 << $1003;\n       $1007 = $1006 >>> 15;\n       $1008 = (($1005) + ($1007))|0;\n       $1009 = $1008 << 1;\n       $1010 = (($1008) + 7)|0;\n       $1011 = $968 >>> $1010;\n       $1012 = $1011 & 1;\n       $1013 = $1012 | $1009;\n       $$0212$i$i = $1013;\n      }\n     }\n     $1014 = (21596 + ($$0212$i$i<<2)|0);\n     $1015 = ((($635)) + 28|0);\n     HEAP32[$1015>>2] = $$0212$i$i;\n     $1016 = ((($635)) + 20|0);\n     HEAP32[$1016>>2] = 0;\n     HEAP32[$940>>2] = 0;\n     $1017 = HEAP32[(21296)>>2]|0;\n     $1018 = 1 << $$0212$i$i;\n     $1019 = $1017 & $1018;\n     $1020 = ($1019|0)==(0);\n     if ($1020) {\n      $1021 = $1017 | $1018;\n      HEAP32[(21296)>>2] = $1021;\n      HEAP32[$1014>>2] = $635;\n      $1022 = ((($635)) + 24|0);\n      HEAP32[$1022>>2] = $1014;\n      $1023 = ((($635)) + 12|0);\n      HEAP32[$1023>>2] = $635;\n      $1024 = ((($635)) + 8|0);\n      HEAP32[$1024>>2] = $635;\n      break;\n     }\n     $1025 = HEAP32[$1014>>2]|0;\n     $1026 = ((($1025)) + 4|0);\n     $1027 = HEAP32[$1026>>2]|0;\n     $1028 = $1027 & -8;\n     $1029 = ($1028|0)==($968|0);\n     L451: do {\n      if ($1029) {\n       $$0207$lcssa$i$i = $1025;\n      } else {\n       $1030 = ($$0212$i$i|0)==(31);\n       $1031 = $$0212$i$i >>> 1;\n       $1032 = (25 - ($1031))|0;\n       $1033 = $1030 ? 0 : $1032;\n       $1034 = $968 << $1033;\n       $$02065$i$i = $1034;$$02074$i$i = $1025;\n       while(1) {\n        $1041 = $$02065$i$i >>> 31;\n        $1042 = (((($$02074$i$i)) + 16|0) + ($1041<<2)|0);\n        $1037 = HEAP32[$1042>>2]|0;\n        $1043 = ($1037|0)==(0|0);\n        if ($1043) {\n         break;\n        }\n        $1035 = $$02065$i$i << 1;\n        $1036 = ((($1037)) + 4|0);\n        $1038 = HEAP32[$1036>>2]|0;\n        $1039 = $1038 & -8;\n        $1040 = ($1039|0)==($968|0);\n        if ($1040) {\n         $$0207$lcssa$i$i = $1037;\n         break L451;\n        } else {\n         $$02065$i$i = $1035;$$02074$i$i = $1037;\n        }\n       }\n       $1044 = HEAP32[(21308)>>2]|0;\n       $1045 = ($1044>>>0)>($1042>>>0);\n       if ($1045) {\n        _abort();\n        // unreachable;\n       } else {\n        HEAP32[$1042>>2] = $635;\n        $1046 = ((($635)) + 24|0);\n        HEAP32[$1046>>2] = $$02074$i$i;\n        $1047 = ((($635)) + 12|0);\n        HEAP32[$1047>>2] = $635;\n        $1048 = ((($635)) + 8|0);\n        HEAP32[$1048>>2] = $635;\n        break L294;\n       }\n      }\n     } while(0);\n     $1049 = ((($$0207$lcssa$i$i)) + 8|0);\n     $1050 = HEAP32[$1049>>2]|0;\n     $1051 = HEAP32[(21308)>>2]|0;\n     $1052 = ($1051>>>0)<=($$0207$lcssa$i$i>>>0);\n     $1053 = ($1051>>>0)<=($1050>>>0);\n     $1054 = $1053 & $1052;\n     if ($1054) {\n      $1055 = ((($1050)) + 12|0);\n      HEAP32[$1055>>2] = $635;\n      HEAP32[$1049>>2] = $635;\n      $1056 = ((($635)) + 8|0);\n      HEAP32[$1056>>2] = $1050;\n      $1057 = ((($635)) + 12|0);\n      HEAP32[$1057>>2] = $$0207$lcssa$i$i;\n      $1058 = ((($635)) + 24|0);\n      HEAP32[$1058>>2] = 0;\n      break;\n     } else {\n      _abort();\n      // unreachable;\n     }\n    }\n   }\n  } while(0);\n  $1060 = HEAP32[(21304)>>2]|0;\n  $1061 = ($1060>>>0)>($$0197>>>0);\n  if ($1061) {\n   $1062 = (($1060) - ($$0197))|0;\n   HEAP32[(21304)>>2] = $1062;\n   $1063 = HEAP32[(21316)>>2]|0;\n   $1064 = (($1063) + ($$0197)|0);\n   HEAP32[(21316)>>2] = $1064;\n   $1065 = $1062 | 1;\n   $1066 = ((($1064)) + 4|0);\n   HEAP32[$1066>>2] = $1065;\n   $1067 = $$0197 | 3;\n   $1068 = ((($1063)) + 4|0);\n   HEAP32[$1068>>2] = $1067;\n   $1069 = ((($1063)) + 8|0);\n   $$0 = $1069;\n   STACKTOP = sp;return ($$0|0);\n  }\n }\n $1070 = (___errno_location()|0);\n HEAP32[$1070>>2] = 12;\n $$0 = 0;\n STACKTOP = sp;return ($$0|0);\n}\nfunction _free($0) {\n $0 = $0|0;\n var $$0211$i = 0, $$0211$in$i = 0, $$0381438 = 0, $$0382$lcssa = 0, $$0382437 = 0, $$0394 = 0, $$0401 = 0, $$1 = 0, $$1380 = 0, $$1385 = 0, $$1385$be = 0, $$1385$ph = 0, $$1388 = 0, $$1388$be = 0, $$1388$ph = 0, $$1396 = 0, $$1396$be = 0, $$1396$ph = 0, $$1400 = 0, $$1400$be = 0;\n var $$1400$ph = 0, $$2 = 0, $$3 = 0, $$3398 = 0, $$pre = 0, $$pre$phi444Z2D = 0, $$pre$phi446Z2D = 0, $$pre$phiZ2D = 0, $$pre443 = 0, $$pre445 = 0, $$sink = 0, $$sink456 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0;\n var $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0;\n var $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0;\n var $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0;\n var $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0;\n var $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0;\n var $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0;\n var $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0;\n var $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0;\n var $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0;\n var $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0;\n var $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0;\n var $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0;\n var $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $cond419 = 0, $cond420 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0|0)==(0|0);\n if ($1) {\n  return;\n }\n $2 = ((($0)) + -8|0);\n $3 = HEAP32[(21308)>>2]|0;\n $4 = ($2>>>0)<($3>>>0);\n if ($4) {\n  _abort();\n  // unreachable;\n }\n $5 = ((($0)) + -4|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = $6 & 3;\n $8 = ($7|0)==(1);\n if ($8) {\n  _abort();\n  // unreachable;\n }\n $9 = $6 & -8;\n $10 = (($2) + ($9)|0);\n $11 = $6 & 1;\n $12 = ($11|0)==(0);\n L10: do {\n  if ($12) {\n   $13 = HEAP32[$2>>2]|0;\n   $14 = ($7|0)==(0);\n   if ($14) {\n    return;\n   }\n   $15 = (0 - ($13))|0;\n   $16 = (($2) + ($15)|0);\n   $17 = (($13) + ($9))|0;\n   $18 = ($16>>>0)<($3>>>0);\n   if ($18) {\n    _abort();\n    // unreachable;\n   }\n   $19 = HEAP32[(21312)>>2]|0;\n   $20 = ($19|0)==($16|0);\n   if ($20) {\n    $105 = ((($10)) + 4|0);\n    $106 = HEAP32[$105>>2]|0;\n    $107 = $106 & 3;\n    $108 = ($107|0)==(3);\n    if (!($108)) {\n     $$1 = $16;$$1380 = $17;$114 = $16;\n     break;\n    }\n    $109 = (($16) + ($17)|0);\n    $110 = ((($16)) + 4|0);\n    $111 = $17 | 1;\n    $112 = $106 & -2;\n    HEAP32[(21300)>>2] = $17;\n    HEAP32[$105>>2] = $112;\n    HEAP32[$110>>2] = $111;\n    HEAP32[$109>>2] = $17;\n    return;\n   }\n   $21 = $13 >>> 3;\n   $22 = ($13>>>0)<(256);\n   if ($22) {\n    $23 = ((($16)) + 8|0);\n    $24 = HEAP32[$23>>2]|0;\n    $25 = ((($16)) + 12|0);\n    $26 = HEAP32[$25>>2]|0;\n    $27 = $21 << 1;\n    $28 = (21332 + ($27<<2)|0);\n    $29 = ($24|0)==($28|0);\n    if (!($29)) {\n     $30 = ($3>>>0)>($24>>>0);\n     if ($30) {\n      _abort();\n      // unreachable;\n     }\n     $31 = ((($24)) + 12|0);\n     $32 = HEAP32[$31>>2]|0;\n     $33 = ($32|0)==($16|0);\n     if (!($33)) {\n      _abort();\n      // unreachable;\n     }\n    }\n    $34 = ($26|0)==($24|0);\n    if ($34) {\n     $35 = 1 << $21;\n     $36 = $35 ^ -1;\n     $37 = HEAP32[5323]|0;\n     $38 = $37 & $36;\n     HEAP32[5323] = $38;\n     $$1 = $16;$$1380 = $17;$114 = $16;\n     break;\n    }\n    $39 = ($26|0)==($28|0);\n    if ($39) {\n     $$pre445 = ((($26)) + 8|0);\n     $$pre$phi446Z2D = $$pre445;\n    } else {\n     $40 = ($3>>>0)>($26>>>0);\n     if ($40) {\n      _abort();\n      // unreachable;\n     }\n     $41 = ((($26)) + 8|0);\n     $42 = HEAP32[$41>>2]|0;\n     $43 = ($42|0)==($16|0);\n     if ($43) {\n      $$pre$phi446Z2D = $41;\n     } else {\n      _abort();\n      // unreachable;\n     }\n    }\n    $44 = ((($24)) + 12|0);\n    HEAP32[$44>>2] = $26;\n    HEAP32[$$pre$phi446Z2D>>2] = $24;\n    $$1 = $16;$$1380 = $17;$114 = $16;\n    break;\n   }\n   $45 = ((($16)) + 24|0);\n   $46 = HEAP32[$45>>2]|0;\n   $47 = ((($16)) + 12|0);\n   $48 = HEAP32[$47>>2]|0;\n   $49 = ($48|0)==($16|0);\n   do {\n    if ($49) {\n     $59 = ((($16)) + 16|0);\n     $60 = ((($59)) + 4|0);\n     $61 = HEAP32[$60>>2]|0;\n     $62 = ($61|0)==(0|0);\n     if ($62) {\n      $63 = HEAP32[$59>>2]|0;\n      $64 = ($63|0)==(0|0);\n      if ($64) {\n       $$3 = 0;\n       break;\n      } else {\n       $$1385$ph = $63;$$1388$ph = $59;\n      }\n     } else {\n      $$1385$ph = $61;$$1388$ph = $60;\n     }\n     $$1385 = $$1385$ph;$$1388 = $$1388$ph;\n     while(1) {\n      $65 = ((($$1385)) + 20|0);\n      $66 = HEAP32[$65>>2]|0;\n      $67 = ($66|0)==(0|0);\n      if ($67) {\n       $68 = ((($$1385)) + 16|0);\n       $69 = HEAP32[$68>>2]|0;\n       $70 = ($69|0)==(0|0);\n       if ($70) {\n        break;\n       } else {\n        $$1385$be = $69;$$1388$be = $68;\n       }\n      } else {\n       $$1385$be = $66;$$1388$be = $65;\n      }\n      $$1385 = $$1385$be;$$1388 = $$1388$be;\n     }\n     $71 = ($3>>>0)>($$1388>>>0);\n     if ($71) {\n      _abort();\n      // unreachable;\n     } else {\n      HEAP32[$$1388>>2] = 0;\n      $$3 = $$1385;\n      break;\n     }\n    } else {\n     $50 = ((($16)) + 8|0);\n     $51 = HEAP32[$50>>2]|0;\n     $52 = ($3>>>0)>($51>>>0);\n     if ($52) {\n      _abort();\n      // unreachable;\n     }\n     $53 = ((($51)) + 12|0);\n     $54 = HEAP32[$53>>2]|0;\n     $55 = ($54|0)==($16|0);\n     if (!($55)) {\n      _abort();\n      // unreachable;\n     }\n     $56 = ((($48)) + 8|0);\n     $57 = HEAP32[$56>>2]|0;\n     $58 = ($57|0)==($16|0);\n     if ($58) {\n      HEAP32[$53>>2] = $48;\n      HEAP32[$56>>2] = $51;\n      $$3 = $48;\n      break;\n     } else {\n      _abort();\n      // unreachable;\n     }\n    }\n   } while(0);\n   $72 = ($46|0)==(0|0);\n   if ($72) {\n    $$1 = $16;$$1380 = $17;$114 = $16;\n   } else {\n    $73 = ((($16)) + 28|0);\n    $74 = HEAP32[$73>>2]|0;\n    $75 = (21596 + ($74<<2)|0);\n    $76 = HEAP32[$75>>2]|0;\n    $77 = ($76|0)==($16|0);\n    do {\n     if ($77) {\n      HEAP32[$75>>2] = $$3;\n      $cond419 = ($$3|0)==(0|0);\n      if ($cond419) {\n       $78 = 1 << $74;\n       $79 = $78 ^ -1;\n       $80 = HEAP32[(21296)>>2]|0;\n       $81 = $80 & $79;\n       HEAP32[(21296)>>2] = $81;\n       $$1 = $16;$$1380 = $17;$114 = $16;\n       break L10;\n      }\n     } else {\n      $82 = HEAP32[(21308)>>2]|0;\n      $83 = ($82>>>0)>($46>>>0);\n      if ($83) {\n       _abort();\n       // unreachable;\n      } else {\n       $84 = ((($46)) + 16|0);\n       $85 = HEAP32[$84>>2]|0;\n       $86 = ($85|0)==($16|0);\n       $87 = ((($46)) + 20|0);\n       $$sink = $86 ? $84 : $87;\n       HEAP32[$$sink>>2] = $$3;\n       $88 = ($$3|0)==(0|0);\n       if ($88) {\n        $$1 = $16;$$1380 = $17;$114 = $16;\n        break L10;\n       } else {\n        break;\n       }\n      }\n     }\n    } while(0);\n    $89 = HEAP32[(21308)>>2]|0;\n    $90 = ($89>>>0)>($$3>>>0);\n    if ($90) {\n     _abort();\n     // unreachable;\n    }\n    $91 = ((($$3)) + 24|0);\n    HEAP32[$91>>2] = $46;\n    $92 = ((($16)) + 16|0);\n    $93 = HEAP32[$92>>2]|0;\n    $94 = ($93|0)==(0|0);\n    do {\n     if (!($94)) {\n      $95 = ($89>>>0)>($93>>>0);\n      if ($95) {\n       _abort();\n       // unreachable;\n      } else {\n       $96 = ((($$3)) + 16|0);\n       HEAP32[$96>>2] = $93;\n       $97 = ((($93)) + 24|0);\n       HEAP32[$97>>2] = $$3;\n       break;\n      }\n     }\n    } while(0);\n    $98 = ((($92)) + 4|0);\n    $99 = HEAP32[$98>>2]|0;\n    $100 = ($99|0)==(0|0);\n    if ($100) {\n     $$1 = $16;$$1380 = $17;$114 = $16;\n    } else {\n     $101 = HEAP32[(21308)>>2]|0;\n     $102 = ($101>>>0)>($99>>>0);\n     if ($102) {\n      _abort();\n      // unreachable;\n     } else {\n      $103 = ((($$3)) + 20|0);\n      HEAP32[$103>>2] = $99;\n      $104 = ((($99)) + 24|0);\n      HEAP32[$104>>2] = $$3;\n      $$1 = $16;$$1380 = $17;$114 = $16;\n      break;\n     }\n    }\n   }\n  } else {\n   $$1 = $2;$$1380 = $9;$114 = $2;\n  }\n } while(0);\n $113 = ($114>>>0)<($10>>>0);\n if (!($113)) {\n  _abort();\n  // unreachable;\n }\n $115 = ((($10)) + 4|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = $116 & 1;\n $118 = ($117|0)==(0);\n if ($118) {\n  _abort();\n  // unreachable;\n }\n $119 = $116 & 2;\n $120 = ($119|0)==(0);\n if ($120) {\n  $121 = HEAP32[(21316)>>2]|0;\n  $122 = ($121|0)==($10|0);\n  if ($122) {\n   $123 = HEAP32[(21304)>>2]|0;\n   $124 = (($123) + ($$1380))|0;\n   HEAP32[(21304)>>2] = $124;\n   HEAP32[(21316)>>2] = $$1;\n   $125 = $124 | 1;\n   $126 = ((($$1)) + 4|0);\n   HEAP32[$126>>2] = $125;\n   $127 = HEAP32[(21312)>>2]|0;\n   $128 = ($$1|0)==($127|0);\n   if (!($128)) {\n    return;\n   }\n   HEAP32[(21312)>>2] = 0;\n   HEAP32[(21300)>>2] = 0;\n   return;\n  }\n  $129 = HEAP32[(21312)>>2]|0;\n  $130 = ($129|0)==($10|0);\n  if ($130) {\n   $131 = HEAP32[(21300)>>2]|0;\n   $132 = (($131) + ($$1380))|0;\n   HEAP32[(21300)>>2] = $132;\n   HEAP32[(21312)>>2] = $114;\n   $133 = $132 | 1;\n   $134 = ((($$1)) + 4|0);\n   HEAP32[$134>>2] = $133;\n   $135 = (($114) + ($132)|0);\n   HEAP32[$135>>2] = $132;\n   return;\n  }\n  $136 = $116 & -8;\n  $137 = (($136) + ($$1380))|0;\n  $138 = $116 >>> 3;\n  $139 = ($116>>>0)<(256);\n  L111: do {\n   if ($139) {\n    $140 = ((($10)) + 8|0);\n    $141 = HEAP32[$140>>2]|0;\n    $142 = ((($10)) + 12|0);\n    $143 = HEAP32[$142>>2]|0;\n    $144 = $138 << 1;\n    $145 = (21332 + ($144<<2)|0);\n    $146 = ($141|0)==($145|0);\n    if (!($146)) {\n     $147 = HEAP32[(21308)>>2]|0;\n     $148 = ($147>>>0)>($141>>>0);\n     if ($148) {\n      _abort();\n      // unreachable;\n     }\n     $149 = ((($141)) + 12|0);\n     $150 = HEAP32[$149>>2]|0;\n     $151 = ($150|0)==($10|0);\n     if (!($151)) {\n      _abort();\n      // unreachable;\n     }\n    }\n    $152 = ($143|0)==($141|0);\n    if ($152) {\n     $153 = 1 << $138;\n     $154 = $153 ^ -1;\n     $155 = HEAP32[5323]|0;\n     $156 = $155 & $154;\n     HEAP32[5323] = $156;\n     break;\n    }\n    $157 = ($143|0)==($145|0);\n    if ($157) {\n     $$pre443 = ((($143)) + 8|0);\n     $$pre$phi444Z2D = $$pre443;\n    } else {\n     $158 = HEAP32[(21308)>>2]|0;\n     $159 = ($158>>>0)>($143>>>0);\n     if ($159) {\n      _abort();\n      // unreachable;\n     }\n     $160 = ((($143)) + 8|0);\n     $161 = HEAP32[$160>>2]|0;\n     $162 = ($161|0)==($10|0);\n     if ($162) {\n      $$pre$phi444Z2D = $160;\n     } else {\n      _abort();\n      // unreachable;\n     }\n    }\n    $163 = ((($141)) + 12|0);\n    HEAP32[$163>>2] = $143;\n    HEAP32[$$pre$phi444Z2D>>2] = $141;\n   } else {\n    $164 = ((($10)) + 24|0);\n    $165 = HEAP32[$164>>2]|0;\n    $166 = ((($10)) + 12|0);\n    $167 = HEAP32[$166>>2]|0;\n    $168 = ($167|0)==($10|0);\n    do {\n     if ($168) {\n      $179 = ((($10)) + 16|0);\n      $180 = ((($179)) + 4|0);\n      $181 = HEAP32[$180>>2]|0;\n      $182 = ($181|0)==(0|0);\n      if ($182) {\n       $183 = HEAP32[$179>>2]|0;\n       $184 = ($183|0)==(0|0);\n       if ($184) {\n        $$3398 = 0;\n        break;\n       } else {\n        $$1396$ph = $183;$$1400$ph = $179;\n       }\n      } else {\n       $$1396$ph = $181;$$1400$ph = $180;\n      }\n      $$1396 = $$1396$ph;$$1400 = $$1400$ph;\n      while(1) {\n       $185 = ((($$1396)) + 20|0);\n       $186 = HEAP32[$185>>2]|0;\n       $187 = ($186|0)==(0|0);\n       if ($187) {\n        $188 = ((($$1396)) + 16|0);\n        $189 = HEAP32[$188>>2]|0;\n        $190 = ($189|0)==(0|0);\n        if ($190) {\n         break;\n        } else {\n         $$1396$be = $189;$$1400$be = $188;\n        }\n       } else {\n        $$1396$be = $186;$$1400$be = $185;\n       }\n       $$1396 = $$1396$be;$$1400 = $$1400$be;\n      }\n      $191 = HEAP32[(21308)>>2]|0;\n      $192 = ($191>>>0)>($$1400>>>0);\n      if ($192) {\n       _abort();\n       // unreachable;\n      } else {\n       HEAP32[$$1400>>2] = 0;\n       $$3398 = $$1396;\n       break;\n      }\n     } else {\n      $169 = ((($10)) + 8|0);\n      $170 = HEAP32[$169>>2]|0;\n      $171 = HEAP32[(21308)>>2]|0;\n      $172 = ($171>>>0)>($170>>>0);\n      if ($172) {\n       _abort();\n       // unreachable;\n      }\n      $173 = ((($170)) + 12|0);\n      $174 = HEAP32[$173>>2]|0;\n      $175 = ($174|0)==($10|0);\n      if (!($175)) {\n       _abort();\n       // unreachable;\n      }\n      $176 = ((($167)) + 8|0);\n      $177 = HEAP32[$176>>2]|0;\n      $178 = ($177|0)==($10|0);\n      if ($178) {\n       HEAP32[$173>>2] = $167;\n       HEAP32[$176>>2] = $170;\n       $$3398 = $167;\n       break;\n      } else {\n       _abort();\n       // unreachable;\n      }\n     }\n    } while(0);\n    $193 = ($165|0)==(0|0);\n    if (!($193)) {\n     $194 = ((($10)) + 28|0);\n     $195 = HEAP32[$194>>2]|0;\n     $196 = (21596 + ($195<<2)|0);\n     $197 = HEAP32[$196>>2]|0;\n     $198 = ($197|0)==($10|0);\n     do {\n      if ($198) {\n       HEAP32[$196>>2] = $$3398;\n       $cond420 = ($$3398|0)==(0|0);\n       if ($cond420) {\n        $199 = 1 << $195;\n        $200 = $199 ^ -1;\n        $201 = HEAP32[(21296)>>2]|0;\n        $202 = $201 & $200;\n        HEAP32[(21296)>>2] = $202;\n        break L111;\n       }\n      } else {\n       $203 = HEAP32[(21308)>>2]|0;\n       $204 = ($203>>>0)>($165>>>0);\n       if ($204) {\n        _abort();\n        // unreachable;\n       } else {\n        $205 = ((($165)) + 16|0);\n        $206 = HEAP32[$205>>2]|0;\n        $207 = ($206|0)==($10|0);\n        $208 = ((($165)) + 20|0);\n        $$sink456 = $207 ? $205 : $208;\n        HEAP32[$$sink456>>2] = $$3398;\n        $209 = ($$3398|0)==(0|0);\n        if ($209) {\n         break L111;\n        } else {\n         break;\n        }\n       }\n      }\n     } while(0);\n     $210 = HEAP32[(21308)>>2]|0;\n     $211 = ($210>>>0)>($$3398>>>0);\n     if ($211) {\n      _abort();\n      // unreachable;\n     }\n     $212 = ((($$3398)) + 24|0);\n     HEAP32[$212>>2] = $165;\n     $213 = ((($10)) + 16|0);\n     $214 = HEAP32[$213>>2]|0;\n     $215 = ($214|0)==(0|0);\n     do {\n      if (!($215)) {\n       $216 = ($210>>>0)>($214>>>0);\n       if ($216) {\n        _abort();\n        // unreachable;\n       } else {\n        $217 = ((($$3398)) + 16|0);\n        HEAP32[$217>>2] = $214;\n        $218 = ((($214)) + 24|0);\n        HEAP32[$218>>2] = $$3398;\n        break;\n       }\n      }\n     } while(0);\n     $219 = ((($213)) + 4|0);\n     $220 = HEAP32[$219>>2]|0;\n     $221 = ($220|0)==(0|0);\n     if (!($221)) {\n      $222 = HEAP32[(21308)>>2]|0;\n      $223 = ($222>>>0)>($220>>>0);\n      if ($223) {\n       _abort();\n       // unreachable;\n      } else {\n       $224 = ((($$3398)) + 20|0);\n       HEAP32[$224>>2] = $220;\n       $225 = ((($220)) + 24|0);\n       HEAP32[$225>>2] = $$3398;\n       break;\n      }\n     }\n    }\n   }\n  } while(0);\n  $226 = $137 | 1;\n  $227 = ((($$1)) + 4|0);\n  HEAP32[$227>>2] = $226;\n  $228 = (($114) + ($137)|0);\n  HEAP32[$228>>2] = $137;\n  $229 = HEAP32[(21312)>>2]|0;\n  $230 = ($$1|0)==($229|0);\n  if ($230) {\n   HEAP32[(21300)>>2] = $137;\n   return;\n  } else {\n   $$2 = $137;\n  }\n } else {\n  $231 = $116 & -2;\n  HEAP32[$115>>2] = $231;\n  $232 = $$1380 | 1;\n  $233 = ((($$1)) + 4|0);\n  HEAP32[$233>>2] = $232;\n  $234 = (($114) + ($$1380)|0);\n  HEAP32[$234>>2] = $$1380;\n  $$2 = $$1380;\n }\n $235 = $$2 >>> 3;\n $236 = ($$2>>>0)<(256);\n if ($236) {\n  $237 = $235 << 1;\n  $238 = (21332 + ($237<<2)|0);\n  $239 = HEAP32[5323]|0;\n  $240 = 1 << $235;\n  $241 = $239 & $240;\n  $242 = ($241|0)==(0);\n  if ($242) {\n   $243 = $239 | $240;\n   HEAP32[5323] = $243;\n   $$pre = ((($238)) + 8|0);\n   $$0401 = $238;$$pre$phiZ2D = $$pre;\n  } else {\n   $244 = ((($238)) + 8|0);\n   $245 = HEAP32[$244>>2]|0;\n   $246 = HEAP32[(21308)>>2]|0;\n   $247 = ($246>>>0)>($245>>>0);\n   if ($247) {\n    _abort();\n    // unreachable;\n   } else {\n    $$0401 = $245;$$pre$phiZ2D = $244;\n   }\n  }\n  HEAP32[$$pre$phiZ2D>>2] = $$1;\n  $248 = ((($$0401)) + 12|0);\n  HEAP32[$248>>2] = $$1;\n  $249 = ((($$1)) + 8|0);\n  HEAP32[$249>>2] = $$0401;\n  $250 = ((($$1)) + 12|0);\n  HEAP32[$250>>2] = $238;\n  return;\n }\n $251 = $$2 >>> 8;\n $252 = ($251|0)==(0);\n if ($252) {\n  $$0394 = 0;\n } else {\n  $253 = ($$2>>>0)>(16777215);\n  if ($253) {\n   $$0394 = 31;\n  } else {\n   $254 = (($251) + 1048320)|0;\n   $255 = $254 >>> 16;\n   $256 = $255 & 8;\n   $257 = $251 << $256;\n   $258 = (($257) + 520192)|0;\n   $259 = $258 >>> 16;\n   $260 = $259 & 4;\n   $261 = $260 | $256;\n   $262 = $257 << $260;\n   $263 = (($262) + 245760)|0;\n   $264 = $263 >>> 16;\n   $265 = $264 & 2;\n   $266 = $261 | $265;\n   $267 = (14 - ($266))|0;\n   $268 = $262 << $265;\n   $269 = $268 >>> 15;\n   $270 = (($267) + ($269))|0;\n   $271 = $270 << 1;\n   $272 = (($270) + 7)|0;\n   $273 = $$2 >>> $272;\n   $274 = $273 & 1;\n   $275 = $274 | $271;\n   $$0394 = $275;\n  }\n }\n $276 = (21596 + ($$0394<<2)|0);\n $277 = ((($$1)) + 28|0);\n HEAP32[$277>>2] = $$0394;\n $278 = ((($$1)) + 16|0);\n $279 = ((($$1)) + 20|0);\n HEAP32[$279>>2] = 0;\n HEAP32[$278>>2] = 0;\n $280 = HEAP32[(21296)>>2]|0;\n $281 = 1 << $$0394;\n $282 = $280 & $281;\n $283 = ($282|0)==(0);\n L197: do {\n  if ($283) {\n   $284 = $280 | $281;\n   HEAP32[(21296)>>2] = $284;\n   HEAP32[$276>>2] = $$1;\n   $285 = ((($$1)) + 24|0);\n   HEAP32[$285>>2] = $276;\n   $286 = ((($$1)) + 12|0);\n   HEAP32[$286>>2] = $$1;\n   $287 = ((($$1)) + 8|0);\n   HEAP32[$287>>2] = $$1;\n  } else {\n   $288 = HEAP32[$276>>2]|0;\n   $289 = ((($288)) + 4|0);\n   $290 = HEAP32[$289>>2]|0;\n   $291 = $290 & -8;\n   $292 = ($291|0)==($$2|0);\n   L200: do {\n    if ($292) {\n     $$0382$lcssa = $288;\n    } else {\n     $293 = ($$0394|0)==(31);\n     $294 = $$0394 >>> 1;\n     $295 = (25 - ($294))|0;\n     $296 = $293 ? 0 : $295;\n     $297 = $$2 << $296;\n     $$0381438 = $297;$$0382437 = $288;\n     while(1) {\n      $304 = $$0381438 >>> 31;\n      $305 = (((($$0382437)) + 16|0) + ($304<<2)|0);\n      $300 = HEAP32[$305>>2]|0;\n      $306 = ($300|0)==(0|0);\n      if ($306) {\n       break;\n      }\n      $298 = $$0381438 << 1;\n      $299 = ((($300)) + 4|0);\n      $301 = HEAP32[$299>>2]|0;\n      $302 = $301 & -8;\n      $303 = ($302|0)==($$2|0);\n      if ($303) {\n       $$0382$lcssa = $300;\n       break L200;\n      } else {\n       $$0381438 = $298;$$0382437 = $300;\n      }\n     }\n     $307 = HEAP32[(21308)>>2]|0;\n     $308 = ($307>>>0)>($305>>>0);\n     if ($308) {\n      _abort();\n      // unreachable;\n     } else {\n      HEAP32[$305>>2] = $$1;\n      $309 = ((($$1)) + 24|0);\n      HEAP32[$309>>2] = $$0382437;\n      $310 = ((($$1)) + 12|0);\n      HEAP32[$310>>2] = $$1;\n      $311 = ((($$1)) + 8|0);\n      HEAP32[$311>>2] = $$1;\n      break L197;\n     }\n    }\n   } while(0);\n   $312 = ((($$0382$lcssa)) + 8|0);\n   $313 = HEAP32[$312>>2]|0;\n   $314 = HEAP32[(21308)>>2]|0;\n   $315 = ($314>>>0)<=($$0382$lcssa>>>0);\n   $316 = ($314>>>0)<=($313>>>0);\n   $317 = $316 & $315;\n   if ($317) {\n    $318 = ((($313)) + 12|0);\n    HEAP32[$318>>2] = $$1;\n    HEAP32[$312>>2] = $$1;\n    $319 = ((($$1)) + 8|0);\n    HEAP32[$319>>2] = $313;\n    $320 = ((($$1)) + 12|0);\n    HEAP32[$320>>2] = $$0382$lcssa;\n    $321 = ((($$1)) + 24|0);\n    HEAP32[$321>>2] = 0;\n    break;\n   } else {\n    _abort();\n    // unreachable;\n   }\n  }\n } while(0);\n $322 = HEAP32[(21324)>>2]|0;\n $323 = (($322) + -1)|0;\n HEAP32[(21324)>>2] = $323;\n $324 = ($323|0)==(0);\n if (!($324)) {\n  return;\n }\n $$0211$in$i = (21748);\n while(1) {\n  $$0211$i = HEAP32[$$0211$in$i>>2]|0;\n  $325 = ($$0211$i|0)==(0|0);\n  $326 = ((($$0211$i)) + 8|0);\n  if ($325) {\n   break;\n  } else {\n   $$0211$in$i = $326;\n  }\n }\n HEAP32[(21324)>>2] = -1;\n return;\n}\nfunction ___stdio_close($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n $1 = ((($0)) + 60|0);\n $2 = HEAP32[$1>>2]|0;\n $3 = (_dummy_569($2)|0);\n HEAP32[$vararg_buffer>>2] = $3;\n $4 = (___syscall6(6,($vararg_buffer|0))|0);\n $5 = (___syscall_ret($4)|0);\n STACKTOP = sp;return ($5|0);\n}\nfunction ___stdio_write($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $$04756 = 0, $$04855 = 0, $$04954 = 0, $$051 = 0, $$1 = 0, $$150 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;\n var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer3 = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0;\n var $vararg_ptr6 = 0, $vararg_ptr7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $vararg_buffer3 = sp + 16|0;\n $vararg_buffer = sp;\n $3 = sp + 32|0;\n $4 = ((($0)) + 28|0);\n $5 = HEAP32[$4>>2]|0;\n HEAP32[$3>>2] = $5;\n $6 = ((($3)) + 4|0);\n $7 = ((($0)) + 20|0);\n $8 = HEAP32[$7>>2]|0;\n $9 = (($8) - ($5))|0;\n HEAP32[$6>>2] = $9;\n $10 = ((($3)) + 8|0);\n HEAP32[$10>>2] = $1;\n $11 = ((($3)) + 12|0);\n HEAP32[$11>>2] = $2;\n $12 = (($9) + ($2))|0;\n $13 = ((($0)) + 60|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $3;\n HEAP32[$vararg_buffer>>2] = $14;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $15;\n $vararg_ptr2 = ((($vararg_buffer)) + 8|0);\n HEAP32[$vararg_ptr2>>2] = 2;\n $16 = (___syscall146(146,($vararg_buffer|0))|0);\n $17 = (___syscall_ret($16)|0);\n $18 = ($12|0)==($17|0);\n L1: do {\n  if ($18) {\n   label = 3;\n  } else {\n   $$04756 = 2;$$04855 = $12;$$04954 = $3;$27 = $17;\n   while(1) {\n    $26 = ($27|0)<(0);\n    if ($26) {\n     break;\n    }\n    $35 = (($$04855) - ($27))|0;\n    $36 = ((($$04954)) + 4|0);\n    $37 = HEAP32[$36>>2]|0;\n    $38 = ($27>>>0)>($37>>>0);\n    $39 = ((($$04954)) + 8|0);\n    $$150 = $38 ? $39 : $$04954;\n    $40 = $38 << 31 >> 31;\n    $$1 = (($$04756) + ($40))|0;\n    $41 = $38 ? $37 : 0;\n    $$0 = (($27) - ($41))|0;\n    $42 = HEAP32[$$150>>2]|0;\n    $43 = (($42) + ($$0)|0);\n    HEAP32[$$150>>2] = $43;\n    $44 = ((($$150)) + 4|0);\n    $45 = HEAP32[$44>>2]|0;\n    $46 = (($45) - ($$0))|0;\n    HEAP32[$44>>2] = $46;\n    $47 = HEAP32[$13>>2]|0;\n    $48 = $$150;\n    HEAP32[$vararg_buffer3>>2] = $47;\n    $vararg_ptr6 = ((($vararg_buffer3)) + 4|0);\n    HEAP32[$vararg_ptr6>>2] = $48;\n    $vararg_ptr7 = ((($vararg_buffer3)) + 8|0);\n    HEAP32[$vararg_ptr7>>2] = $$1;\n    $49 = (___syscall146(146,($vararg_buffer3|0))|0);\n    $50 = (___syscall_ret($49)|0);\n    $51 = ($35|0)==($50|0);\n    if ($51) {\n     label = 3;\n     break L1;\n    } else {\n     $$04756 = $$1;$$04855 = $35;$$04954 = $$150;$27 = $50;\n    }\n   }\n   $28 = ((($0)) + 16|0);\n   HEAP32[$28>>2] = 0;\n   HEAP32[$4>>2] = 0;\n   HEAP32[$7>>2] = 0;\n   $29 = HEAP32[$0>>2]|0;\n   $30 = $29 | 32;\n   HEAP32[$0>>2] = $30;\n   $31 = ($$04756|0)==(2);\n   if ($31) {\n    $$051 = 0;\n   } else {\n    $32 = ((($$04954)) + 4|0);\n    $33 = HEAP32[$32>>2]|0;\n    $34 = (($2) - ($33))|0;\n    $$051 = $34;\n   }\n  }\n } while(0);\n if ((label|0) == 3) {\n  $19 = ((($0)) + 44|0);\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ((($0)) + 48|0);\n  $22 = HEAP32[$21>>2]|0;\n  $23 = (($20) + ($22)|0);\n  $24 = ((($0)) + 16|0);\n  HEAP32[$24>>2] = $23;\n  $25 = $20;\n  HEAP32[$4>>2] = $25;\n  HEAP32[$7>>2] = $25;\n  $$051 = $2;\n }\n STACKTOP = sp;return ($$051|0);\n}\nfunction ___stdio_seek($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$pre = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0, $vararg_ptr4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $vararg_buffer = sp;\n $3 = sp + 20|0;\n $4 = ((($0)) + 60|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = $3;\n HEAP32[$vararg_buffer>>2] = $5;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = 0;\n $vararg_ptr2 = ((($vararg_buffer)) + 8|0);\n HEAP32[$vararg_ptr2>>2] = $1;\n $vararg_ptr3 = ((($vararg_buffer)) + 12|0);\n HEAP32[$vararg_ptr3>>2] = $6;\n $vararg_ptr4 = ((($vararg_buffer)) + 16|0);\n HEAP32[$vararg_ptr4>>2] = $2;\n $7 = (___syscall140(140,($vararg_buffer|0))|0);\n $8 = (___syscall_ret($7)|0);\n $9 = ($8|0)<(0);\n if ($9) {\n  HEAP32[$3>>2] = -1;\n  $10 = -1;\n } else {\n  $$pre = HEAP32[$3>>2]|0;\n  $10 = $$pre;\n }\n STACKTOP = sp;return ($10|0);\n}\nfunction ___syscall_ret($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0>>>0)>(4294963200);\n if ($1) {\n  $2 = (0 - ($0))|0;\n  $3 = (___errno_location()|0);\n  HEAP32[$3>>2] = $2;\n  $$0 = -1;\n } else {\n  $$0 = $0;\n }\n return ($$0|0);\n}\nfunction ___errno_location() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (21852|0);\n}\nfunction _dummy_569($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return ($0|0);\n}\nfunction ___stdout_write($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $vararg_buffer = sp;\n $3 = sp + 16|0;\n $4 = ((($0)) + 36|0);\n HEAP32[$4>>2] = 194;\n $5 = HEAP32[$0>>2]|0;\n $6 = $5 & 64;\n $7 = ($6|0)==(0);\n if ($7) {\n  $8 = ((($0)) + 60|0);\n  $9 = HEAP32[$8>>2]|0;\n  $10 = $3;\n  HEAP32[$vararg_buffer>>2] = $9;\n  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n  HEAP32[$vararg_ptr1>>2] = 21523;\n  $vararg_ptr2 = ((($vararg_buffer)) + 8|0);\n  HEAP32[$vararg_ptr2>>2] = $10;\n  $11 = (___syscall54(54,($vararg_buffer|0))|0);\n  $12 = ($11|0)==(0);\n  if (!($12)) {\n   $13 = ((($0)) + 75|0);\n   HEAP8[$13>>0] = -1;\n  }\n }\n $14 = (___stdio_write($0,$1,$2)|0);\n STACKTOP = sp;return ($14|0);\n}\nfunction _strcmp($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$011 = 0, $$0710 = 0, $$lcssa = 0, $$lcssa8 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond9 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n $2 = HEAP8[$0>>0]|0;\n $3 = HEAP8[$1>>0]|0;\n $4 = ($2<<24>>24)!=($3<<24>>24);\n $5 = ($2<<24>>24)==(0);\n $or$cond9 = $5 | $4;\n if ($or$cond9) {\n  $$lcssa = $3;$$lcssa8 = $2;\n } else {\n  $$011 = $1;$$0710 = $0;\n  while(1) {\n   $6 = ((($$0710)) + 1|0);\n   $7 = ((($$011)) + 1|0);\n   $8 = HEAP8[$6>>0]|0;\n   $9 = HEAP8[$7>>0]|0;\n   $10 = ($8<<24>>24)!=($9<<24>>24);\n   $11 = ($8<<24>>24)==(0);\n   $or$cond = $11 | $10;\n   if ($or$cond) {\n    $$lcssa = $9;$$lcssa8 = $8;\n    break;\n   } else {\n    $$011 = $7;$$0710 = $6;\n   }\n  }\n }\n $12 = $$lcssa8&255;\n $13 = $$lcssa&255;\n $14 = (($12) - ($13))|0;\n return ($14|0);\n}\nfunction _memcmp($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$01318 = 0, $$01417 = 0, $$019 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($2|0)==(0);\n L1: do {\n  if ($3) {\n   $14 = 0;\n  } else {\n   $$01318 = $0;$$01417 = $2;$$019 = $1;\n   while(1) {\n    $4 = HEAP8[$$01318>>0]|0;\n    $5 = HEAP8[$$019>>0]|0;\n    $6 = ($4<<24>>24)==($5<<24>>24);\n    if (!($6)) {\n     break;\n    }\n    $7 = (($$01417) + -1)|0;\n    $8 = ((($$01318)) + 1|0);\n    $9 = ((($$019)) + 1|0);\n    $10 = ($7|0)==(0);\n    if ($10) {\n     $14 = 0;\n     break L1;\n    } else {\n     $$01318 = $8;$$01417 = $7;$$019 = $9;\n    }\n   }\n   $11 = $4&255;\n   $12 = $5&255;\n   $13 = (($11) - ($12))|0;\n   $14 = $13;\n  }\n } while(0);\n return ($14|0);\n}\nfunction _isdigit($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (($0) + -48)|0;\n $2 = ($1>>>0)<(10);\n $3 = $2&1;\n return ($3|0);\n}\nfunction _vfprintf($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $$1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var $spec$select = 0, $spec$select41 = 0, $vacopy_currentptr = 0, dest = 0, label = 0, sp = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0);\n $3 = sp + 120|0;\n $4 = sp + 80|0;\n $5 = sp;\n $6 = sp + 136|0;\n dest=$4; stop=dest+40|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));\n $vacopy_currentptr = HEAP32[$2>>2]|0;\n HEAP32[$3>>2] = $vacopy_currentptr;\n $7 = (_printf_core(0,$1,$3,$5,$4)|0);\n $8 = ($7|0)<(0);\n if ($8) {\n  $$0 = -1;\n } else {\n  $9 = ((($0)) + 76|0);\n  $10 = HEAP32[$9>>2]|0;\n  $11 = ($10|0)>(-1);\n  if ($11) {\n   $12 = (___lockfile($0)|0);\n   $40 = $12;\n  } else {\n   $40 = 0;\n  }\n  $13 = HEAP32[$0>>2]|0;\n  $14 = $13 & 32;\n  $15 = ((($0)) + 74|0);\n  $16 = HEAP8[$15>>0]|0;\n  $17 = ($16<<24>>24)<(1);\n  if ($17) {\n   $18 = $13 & -33;\n   HEAP32[$0>>2] = $18;\n  }\n  $19 = ((($0)) + 48|0);\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ($20|0)==(0);\n  if ($21) {\n   $23 = ((($0)) + 44|0);\n   $24 = HEAP32[$23>>2]|0;\n   HEAP32[$23>>2] = $6;\n   $25 = ((($0)) + 28|0);\n   HEAP32[$25>>2] = $6;\n   $26 = ((($0)) + 20|0);\n   HEAP32[$26>>2] = $6;\n   HEAP32[$19>>2] = 80;\n   $27 = ((($6)) + 80|0);\n   $28 = ((($0)) + 16|0);\n   HEAP32[$28>>2] = $27;\n   $29 = (_printf_core($0,$1,$3,$5,$4)|0);\n   $30 = ($24|0)==(0|0);\n   if ($30) {\n    $$1 = $29;\n   } else {\n    $31 = ((($0)) + 36|0);\n    $32 = HEAP32[$31>>2]|0;\n    (FUNCTION_TABLE_iiii[$32 & 255]($0,0,0)|0);\n    $33 = HEAP32[$26>>2]|0;\n    $34 = ($33|0)==(0|0);\n    $spec$select = $34 ? -1 : $29;\n    HEAP32[$23>>2] = $24;\n    HEAP32[$19>>2] = 0;\n    HEAP32[$28>>2] = 0;\n    HEAP32[$25>>2] = 0;\n    HEAP32[$26>>2] = 0;\n    $$1 = $spec$select;\n   }\n  } else {\n   $22 = (_printf_core($0,$1,$3,$5,$4)|0);\n   $$1 = $22;\n  }\n  $35 = HEAP32[$0>>2]|0;\n  $36 = $35 & 32;\n  $37 = ($36|0)==(0);\n  $spec$select41 = $37 ? $$1 : -1;\n  $38 = $35 | $14;\n  HEAP32[$0>>2] = $38;\n  $39 = ($40|0)==(0);\n  if (!($39)) {\n   ___unlockfile($0);\n  }\n  $$0 = $spec$select41;\n }\n STACKTOP = sp;return ($$0|0);\n}\nfunction _printf_core($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$ = 0, $$0 = 0, $$0228 = 0, $$0229334 = 0, $$0232 = 0, $$0235 = 0, $$0237 = 0, $$0240313 = 0, $$0240313371 = 0, $$0240333 = 0, $$0243 = 0, $$0243$ph = 0, $$0243$ph$be = 0, $$0247 = 0, $$0247$ph = 0, $$0249$lcssa = 0, $$0249321 = 0, $$0252 = 0, $$0253 = 0, $$0254 = 0;\n var $$0259 = 0, $$0262$lcssa = 0, $$0262328 = 0, $$0269$ph = 0, $$1 = 0, $$1230340 = 0, $$1233 = 0, $$1236 = 0, $$1238 = 0, $$1241339 = 0, $$1248 = 0, $$1250 = 0, $$1255 = 0, $$1260 = 0, $$1263 = 0, $$1270 = 0, $$2 = 0, $$2234 = 0, $$2239 = 0, $$2242320 = 0;\n var $$2256 = 0, $$2256$ = 0, $$2261 = 0, $$2271 = 0, $$3257 = 0, $$3265 = 0, $$3272 = 0, $$3317 = 0, $$4258370 = 0, $$4266 = 0, $$5 = 0, $$6268 = 0, $$lcssa308 = 0, $$pre = 0, $$pre$phiZ2D = 0, $$pre360 = 0, $$pre362 = 0, $$pre363 = 0, $$pre363$pre = 0, $$pre364 = 0;\n var $$pre368 = 0, $$sink = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;\n var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0;\n var $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0;\n var $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0;\n var $298 = 0, $299 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0;\n var $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0;\n var $334 = 0, $335 = 0, $336 = 0.0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0;\n var $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current2 = 0, $arglist_next = 0;\n var $arglist_next3 = 0, $brmerge = 0, $brmerge326 = 0, $expanded = 0, $expanded10 = 0, $expanded11 = 0, $expanded13 = 0, $expanded14 = 0, $expanded15 = 0, $expanded4 = 0, $expanded6 = 0, $expanded7 = 0, $expanded8 = 0, $or$cond = 0, $or$cond276 = 0, $or$cond278 = 0, $or$cond283 = 0, $spec$select = 0, $spec$select281 = 0, $spec$select284 = 0;\n var $spec$select291 = 0, $spec$select292 = 0, $spec$select293 = 0, $spec$select294 = 0, $spec$select295 = 0, $spec$select296 = 0, $spec$select297 = 0, $spec$select298 = 0, $spec$select299 = 0, $storemerge273$lcssa = 0, $storemerge273327 = 0, $storemerge274 = 0, $trunc = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $5 = sp + 16|0;\n $6 = sp;\n $7 = sp + 24|0;\n $8 = sp + 8|0;\n $9 = sp + 20|0;\n HEAP32[$5>>2] = $1;\n $10 = ($0|0)!=(0|0);\n $11 = ((($7)) + 40|0);\n $12 = $11;\n $13 = ((($7)) + 39|0);\n $14 = ((($8)) + 4|0);\n $$0243$ph = 0;$$0247$ph = 0;$$0269$ph = 0;\n L1: while(1) {\n  $$0243 = $$0243$ph;$$0247 = $$0247$ph;\n  while(1) {\n   $15 = ($$0247|0)>(-1);\n   do {\n    if ($15) {\n     $16 = (2147483647 - ($$0247))|0;\n     $17 = ($$0243|0)>($16|0);\n     if ($17) {\n      $18 = (___errno_location()|0);\n      HEAP32[$18>>2] = 75;\n      $$1248 = -1;\n      break;\n     } else {\n      $19 = (($$0243) + ($$0247))|0;\n      $$1248 = $19;\n      break;\n     }\n    } else {\n     $$1248 = $$0247;\n    }\n   } while(0);\n   $20 = HEAP32[$5>>2]|0;\n   $21 = HEAP8[$20>>0]|0;\n   $22 = ($21<<24>>24)==(0);\n   if ($22) {\n    label = 94;\n    break L1;\n   }\n   $23 = $21;$25 = $20;\n   L12: while(1) {\n    switch ($23<<24>>24) {\n    case 37:  {\n     label = 10;\n     break L12;\n     break;\n    }\n    case 0:  {\n     $$0249$lcssa = $25;\n     break L12;\n     break;\n    }\n    default: {\n    }\n    }\n    $24 = ((($25)) + 1|0);\n    HEAP32[$5>>2] = $24;\n    $$pre = HEAP8[$24>>0]|0;\n    $23 = $$pre;$25 = $24;\n   }\n   L15: do {\n    if ((label|0) == 10) {\n     label = 0;\n     $$0249321 = $25;$27 = $25;\n     while(1) {\n      $26 = ((($27)) + 1|0);\n      $28 = HEAP8[$26>>0]|0;\n      $29 = ($28<<24>>24)==(37);\n      if (!($29)) {\n       $$0249$lcssa = $$0249321;\n       break L15;\n      }\n      $30 = ((($$0249321)) + 1|0);\n      $31 = ((($27)) + 2|0);\n      HEAP32[$5>>2] = $31;\n      $32 = HEAP8[$31>>0]|0;\n      $33 = ($32<<24>>24)==(37);\n      if ($33) {\n       $$0249321 = $30;$27 = $31;\n      } else {\n       $$0249$lcssa = $30;\n       break;\n      }\n     }\n    }\n   } while(0);\n   $34 = $$0249$lcssa;\n   $35 = $20;\n   $36 = (($34) - ($35))|0;\n   if ($10) {\n    _out($0,$20,$36);\n   }\n   $37 = ($36|0)==(0);\n   if ($37) {\n    break;\n   } else {\n    $$0243 = $36;$$0247 = $$1248;\n   }\n  }\n  $38 = HEAP32[$5>>2]|0;\n  $39 = ((($38)) + 1|0);\n  $40 = HEAP8[$39>>0]|0;\n  $41 = $40 << 24 >> 24;\n  $42 = (_isdigit($41)|0);\n  $43 = ($42|0)==(0);\n  $$pre360 = HEAP32[$5>>2]|0;\n  if ($43) {\n   $$0253 = -1;$$1270 = $$0269$ph;$$sink = 1;\n  } else {\n   $44 = ((($$pre360)) + 2|0);\n   $45 = HEAP8[$44>>0]|0;\n   $46 = ($45<<24>>24)==(36);\n   if ($46) {\n    $47 = ((($$pre360)) + 1|0);\n    $48 = HEAP8[$47>>0]|0;\n    $49 = $48 << 24 >> 24;\n    $50 = (($49) + -48)|0;\n    $$0253 = $50;$$1270 = 1;$$sink = 3;\n   } else {\n    $$0253 = -1;$$1270 = $$0269$ph;$$sink = 1;\n   }\n  }\n  $51 = (($$pre360) + ($$sink)|0);\n  HEAP32[$5>>2] = $51;\n  $52 = HEAP8[$51>>0]|0;\n  $53 = $52 << 24 >> 24;\n  $54 = (($53) + -32)|0;\n  $55 = ($54>>>0)>(31);\n  $56 = 1 << $54;\n  $57 = $56 & 75913;\n  $58 = ($57|0)==(0);\n  $brmerge326 = $55 | $58;\n  if ($brmerge326) {\n   $$0262$lcssa = 0;$$lcssa308 = $52;$storemerge273$lcssa = $51;\n  } else {\n   $$0262328 = 0;$60 = $54;$storemerge273327 = $51;\n   while(1) {\n    $59 = 1 << $60;\n    $61 = $59 | $$0262328;\n    $62 = ((($storemerge273327)) + 1|0);\n    HEAP32[$5>>2] = $62;\n    $63 = HEAP8[$62>>0]|0;\n    $64 = $63 << 24 >> 24;\n    $65 = (($64) + -32)|0;\n    $66 = ($65>>>0)>(31);\n    $67 = 1 << $65;\n    $68 = $67 & 75913;\n    $69 = ($68|0)==(0);\n    $brmerge = $66 | $69;\n    if ($brmerge) {\n     $$0262$lcssa = $61;$$lcssa308 = $63;$storemerge273$lcssa = $62;\n     break;\n    } else {\n     $$0262328 = $61;$60 = $65;$storemerge273327 = $62;\n    }\n   }\n  }\n  $70 = ($$lcssa308<<24>>24)==(42);\n  if ($70) {\n   $71 = ((($storemerge273$lcssa)) + 1|0);\n   $72 = HEAP8[$71>>0]|0;\n   $73 = $72 << 24 >> 24;\n   $74 = (_isdigit($73)|0);\n   $75 = ($74|0)==(0);\n   if ($75) {\n    label = 27;\n   } else {\n    $76 = HEAP32[$5>>2]|0;\n    $77 = ((($76)) + 2|0);\n    $78 = HEAP8[$77>>0]|0;\n    $79 = ($78<<24>>24)==(36);\n    if ($79) {\n     $80 = ((($76)) + 1|0);\n     $81 = HEAP8[$80>>0]|0;\n     $82 = $81 << 24 >> 24;\n     $83 = (($82) + -48)|0;\n     $84 = (($4) + ($83<<2)|0);\n     HEAP32[$84>>2] = 10;\n     $85 = HEAP8[$80>>0]|0;\n     $86 = $85 << 24 >> 24;\n     $87 = (($86) + -48)|0;\n     $88 = (($3) + ($87<<3)|0);\n     $89 = $88;\n     $90 = $89;\n     $91 = HEAP32[$90>>2]|0;\n     $92 = (($89) + 4)|0;\n     $93 = $92;\n     $94 = HEAP32[$93>>2]|0;\n     $95 = ((($76)) + 3|0);\n     $$0259 = $91;$$2271 = 1;$storemerge274 = $95;\n    } else {\n     label = 27;\n    }\n   }\n   if ((label|0) == 27) {\n    label = 0;\n    $96 = ($$1270|0)==(0);\n    if (!($96)) {\n     $$0 = -1;\n     break;\n    }\n    if ($10) {\n     $arglist_current = HEAP32[$2>>2]|0;\n     $97 = $arglist_current;\n     $98 = ((0) + 4|0);\n     $expanded4 = $98;\n     $expanded = (($expanded4) - 1)|0;\n     $99 = (($97) + ($expanded))|0;\n     $100 = ((0) + 4|0);\n     $expanded8 = $100;\n     $expanded7 = (($expanded8) - 1)|0;\n     $expanded6 = $expanded7 ^ -1;\n     $101 = $99 & $expanded6;\n     $102 = $101;\n     $103 = HEAP32[$102>>2]|0;\n     $arglist_next = ((($102)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next;\n     $358 = $103;\n    } else {\n     $358 = 0;\n    }\n    $104 = HEAP32[$5>>2]|0;\n    $105 = ((($104)) + 1|0);\n    $$0259 = $358;$$2271 = 0;$storemerge274 = $105;\n   }\n   HEAP32[$5>>2] = $storemerge274;\n   $106 = ($$0259|0)<(0);\n   $107 = $$0262$lcssa | 8192;\n   $108 = (0 - ($$0259))|0;\n   $spec$select291 = $106 ? $107 : $$0262$lcssa;\n   $spec$select292 = $106 ? $108 : $$0259;\n   $$1260 = $spec$select292;$$1263 = $spec$select291;$$3272 = $$2271;$112 = $storemerge274;\n  } else {\n   $109 = (_getint($5)|0);\n   $110 = ($109|0)<(0);\n   if ($110) {\n    $$0 = -1;\n    break;\n   }\n   $$pre362 = HEAP32[$5>>2]|0;\n   $$1260 = $109;$$1263 = $$0262$lcssa;$$3272 = $$1270;$112 = $$pre362;\n  }\n  $111 = HEAP8[$112>>0]|0;\n  $113 = ($111<<24>>24)==(46);\n  do {\n   if ($113) {\n    $114 = ((($112)) + 1|0);\n    $115 = HEAP8[$114>>0]|0;\n    $116 = ($115<<24>>24)==(42);\n    if (!($116)) {\n     HEAP32[$5>>2] = $114;\n     $152 = (_getint($5)|0);\n     $$pre363$pre = HEAP32[$5>>2]|0;\n     $$0254 = $152;$$pre363 = $$pre363$pre;\n     break;\n    }\n    $117 = ((($112)) + 2|0);\n    $118 = HEAP8[$117>>0]|0;\n    $119 = $118 << 24 >> 24;\n    $120 = (_isdigit($119)|0);\n    $121 = ($120|0)==(0);\n    if (!($121)) {\n     $122 = HEAP32[$5>>2]|0;\n     $123 = ((($122)) + 3|0);\n     $124 = HEAP8[$123>>0]|0;\n     $125 = ($124<<24>>24)==(36);\n     if ($125) {\n      $126 = ((($122)) + 2|0);\n      $127 = HEAP8[$126>>0]|0;\n      $128 = $127 << 24 >> 24;\n      $129 = (($128) + -48)|0;\n      $130 = (($4) + ($129<<2)|0);\n      HEAP32[$130>>2] = 10;\n      $131 = HEAP8[$126>>0]|0;\n      $132 = $131 << 24 >> 24;\n      $133 = (($132) + -48)|0;\n      $134 = (($3) + ($133<<3)|0);\n      $135 = $134;\n      $136 = $135;\n      $137 = HEAP32[$136>>2]|0;\n      $138 = (($135) + 4)|0;\n      $139 = $138;\n      $140 = HEAP32[$139>>2]|0;\n      $141 = ((($122)) + 4|0);\n      HEAP32[$5>>2] = $141;\n      $$0254 = $137;$$pre363 = $141;\n      break;\n     }\n    }\n    $142 = ($$3272|0)==(0);\n    if (!($142)) {\n     $$0 = -1;\n     break L1;\n    }\n    if ($10) {\n     $arglist_current2 = HEAP32[$2>>2]|0;\n     $143 = $arglist_current2;\n     $144 = ((0) + 4|0);\n     $expanded11 = $144;\n     $expanded10 = (($expanded11) - 1)|0;\n     $145 = (($143) + ($expanded10))|0;\n     $146 = ((0) + 4|0);\n     $expanded15 = $146;\n     $expanded14 = (($expanded15) - 1)|0;\n     $expanded13 = $expanded14 ^ -1;\n     $147 = $145 & $expanded13;\n     $148 = $147;\n     $149 = HEAP32[$148>>2]|0;\n     $arglist_next3 = ((($148)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next3;\n     $359 = $149;\n    } else {\n     $359 = 0;\n    }\n    $150 = HEAP32[$5>>2]|0;\n    $151 = ((($150)) + 2|0);\n    HEAP32[$5>>2] = $151;\n    $$0254 = $359;$$pre363 = $151;\n   } else {\n    $$0254 = -1;$$pre363 = $112;\n   }\n  } while(0);\n  $$0252 = 0;$154 = $$pre363;\n  while(1) {\n   $153 = HEAP8[$154>>0]|0;\n   $155 = $153 << 24 >> 24;\n   $156 = (($155) + -65)|0;\n   $157 = ($156>>>0)>(57);\n   if ($157) {\n    $$0 = -1;\n    break L1;\n   }\n   $158 = ((($154)) + 1|0);\n   HEAP32[$5>>2] = $158;\n   $159 = HEAP8[$154>>0]|0;\n   $160 = $159 << 24 >> 24;\n   $161 = (($160) + -65)|0;\n   $162 = ((17913 + (($$0252*58)|0)|0) + ($161)|0);\n   $163 = HEAP8[$162>>0]|0;\n   $164 = $163&255;\n   $165 = (($164) + -1)|0;\n   $166 = ($165>>>0)<(8);\n   if ($166) {\n    $$0252 = $164;$154 = $158;\n   } else {\n    break;\n   }\n  }\n  $167 = ($163<<24>>24)==(0);\n  if ($167) {\n   $$0 = -1;\n   break;\n  }\n  $168 = ($163<<24>>24)==(19);\n  $169 = ($$0253|0)>(-1);\n  do {\n   if ($168) {\n    if ($169) {\n     $$0 = -1;\n     break L1;\n    } else {\n     label = 54;\n    }\n   } else {\n    if ($169) {\n     $170 = (($4) + ($$0253<<2)|0);\n     HEAP32[$170>>2] = $164;\n     $171 = (($3) + ($$0253<<3)|0);\n     $172 = $171;\n     $173 = $172;\n     $174 = HEAP32[$173>>2]|0;\n     $175 = (($172) + 4)|0;\n     $176 = $175;\n     $177 = HEAP32[$176>>2]|0;\n     $178 = $6;\n     $179 = $178;\n     HEAP32[$179>>2] = $174;\n     $180 = (($178) + 4)|0;\n     $181 = $180;\n     HEAP32[$181>>2] = $177;\n     label = 54;\n     break;\n    }\n    if (!($10)) {\n     $$0 = 0;\n     break L1;\n    }\n    _pop_arg($6,$164,$2);\n    $$pre364 = HEAP32[$5>>2]|0;\n    $183 = $$pre364;\n    label = 55;\n   }\n  } while(0);\n  if ((label|0) == 54) {\n   label = 0;\n   if ($10) {\n    $183 = $158;\n    label = 55;\n   } else {\n    $$0243$ph$be = 0;\n   }\n  }\n  L77: do {\n   if ((label|0) == 55) {\n    label = 0;\n    $182 = ((($183)) + -1|0);\n    $184 = HEAP8[$182>>0]|0;\n    $185 = $184 << 24 >> 24;\n    $186 = ($$0252|0)!=(0);\n    $187 = $185 & 15;\n    $188 = ($187|0)==(3);\n    $or$cond276 = $186 & $188;\n    $189 = $185 & -33;\n    $$0235 = $or$cond276 ? $189 : $185;\n    $190 = $$1263 & 8192;\n    $191 = ($190|0)==(0);\n    $192 = $$1263 & -65537;\n    $spec$select = $191 ? $$1263 : $192;\n    L79: do {\n     switch ($$0235|0) {\n     case 110:  {\n      $trunc = $$0252&255;\n      switch ($trunc<<24>>24) {\n      case 0:  {\n       $199 = HEAP32[$6>>2]|0;\n       HEAP32[$199>>2] = $$1248;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 1:  {\n       $200 = HEAP32[$6>>2]|0;\n       HEAP32[$200>>2] = $$1248;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 2:  {\n       $201 = ($$1248|0)<(0);\n       $202 = $201 << 31 >> 31;\n       $203 = HEAP32[$6>>2]|0;\n       $204 = $203;\n       $205 = $204;\n       HEAP32[$205>>2] = $$1248;\n       $206 = (($204) + 4)|0;\n       $207 = $206;\n       HEAP32[$207>>2] = $202;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 3:  {\n       $208 = $$1248&65535;\n       $209 = HEAP32[$6>>2]|0;\n       HEAP16[$209>>1] = $208;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 4:  {\n       $210 = $$1248&255;\n       $211 = HEAP32[$6>>2]|0;\n       HEAP8[$211>>0] = $210;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 6:  {\n       $212 = HEAP32[$6>>2]|0;\n       HEAP32[$212>>2] = $$1248;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 7:  {\n       $213 = ($$1248|0)<(0);\n       $214 = $213 << 31 >> 31;\n       $215 = HEAP32[$6>>2]|0;\n       $216 = $215;\n       $217 = $216;\n       HEAP32[$217>>2] = $$1248;\n       $218 = (($216) + 4)|0;\n       $219 = $218;\n       HEAP32[$219>>2] = $214;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      default: {\n       $$0243$ph$be = 0;\n       break L77;\n      }\n      }\n      break;\n     }\n     case 112:  {\n      $220 = ($$0254>>>0)>(8);\n      $221 = $220 ? $$0254 : 8;\n      $222 = $spec$select | 8;\n      $$1236 = 120;$$1255 = $221;$$3265 = $222;\n      label = 67;\n      break;\n     }\n     case 88: case 120:  {\n      $$1236 = $$0235;$$1255 = $$0254;$$3265 = $spec$select;\n      label = 67;\n      break;\n     }\n     case 111:  {\n      $238 = $6;\n      $239 = $238;\n      $240 = HEAP32[$239>>2]|0;\n      $241 = (($238) + 4)|0;\n      $242 = $241;\n      $243 = HEAP32[$242>>2]|0;\n      $244 = (_fmt_o($240,$243,$11)|0);\n      $245 = $spec$select & 8;\n      $246 = ($245|0)==(0);\n      $247 = $244;\n      $248 = (($12) - ($247))|0;\n      $249 = ($$0254|0)>($248|0);\n      $250 = (($248) + 1)|0;\n      $251 = $246 | $249;\n      $spec$select295 = $251 ? $$0254 : $250;\n      $$0228 = $244;$$1233 = 0;$$1238 = 18377;$$2256 = $spec$select295;$$4266 = $spec$select;$277 = $240;$279 = $243;\n      label = 73;\n      break;\n     }\n     case 105: case 100:  {\n      $252 = $6;\n      $253 = $252;\n      $254 = HEAP32[$253>>2]|0;\n      $255 = (($252) + 4)|0;\n      $256 = $255;\n      $257 = HEAP32[$256>>2]|0;\n      $258 = ($257|0)<(0);\n      if ($258) {\n       $259 = (_i64Subtract(0,0,($254|0),($257|0))|0);\n       $260 = tempRet0;\n       $261 = $6;\n       $262 = $261;\n       HEAP32[$262>>2] = $259;\n       $263 = (($261) + 4)|0;\n       $264 = $263;\n       HEAP32[$264>>2] = $260;\n       $$0232 = 1;$$0237 = 18377;$271 = $259;$272 = $260;\n       label = 72;\n       break L79;\n      } else {\n       $265 = $spec$select & 2048;\n       $266 = ($265|0)==(0);\n       $267 = $spec$select & 1;\n       $268 = ($267|0)==(0);\n       $$ = $268 ? 18377 : (18379);\n       $spec$select296 = $266 ? $$ : (18378);\n       $269 = $spec$select & 2049;\n       $270 = ($269|0)!=(0);\n       $spec$select297 = $270&1;\n       $$0232 = $spec$select297;$$0237 = $spec$select296;$271 = $254;$272 = $257;\n       label = 72;\n       break L79;\n      }\n      break;\n     }\n     case 117:  {\n      $193 = $6;\n      $194 = $193;\n      $195 = HEAP32[$194>>2]|0;\n      $196 = (($193) + 4)|0;\n      $197 = $196;\n      $198 = HEAP32[$197>>2]|0;\n      $$0232 = 0;$$0237 = 18377;$271 = $195;$272 = $198;\n      label = 72;\n      break;\n     }\n     case 99:  {\n      $288 = $6;\n      $289 = $288;\n      $290 = HEAP32[$289>>2]|0;\n      $291 = (($288) + 4)|0;\n      $292 = $291;\n      $293 = HEAP32[$292>>2]|0;\n      $294 = $290&255;\n      HEAP8[$13>>0] = $294;\n      $$2 = $13;$$2234 = 0;$$2239 = 18377;$$5 = 1;$$6268 = $192;$$pre$phiZ2D = $12;\n      break;\n     }\n     case 109:  {\n      $295 = (___errno_location()|0);\n      $296 = HEAP32[$295>>2]|0;\n      $297 = (_strerror($296)|0);\n      $$1 = $297;\n      label = 77;\n      break;\n     }\n     case 115:  {\n      $298 = HEAP32[$6>>2]|0;\n      $299 = ($298|0)==(0|0);\n      $300 = $299 ? 18387 : $298;\n      $$1 = $300;\n      label = 77;\n      break;\n     }\n     case 67:  {\n      $307 = $6;\n      $308 = $307;\n      $309 = HEAP32[$308>>2]|0;\n      $310 = (($307) + 4)|0;\n      $311 = $310;\n      $312 = HEAP32[$311>>2]|0;\n      HEAP32[$8>>2] = $309;\n      HEAP32[$14>>2] = 0;\n      HEAP32[$6>>2] = $8;\n      $$4258370 = -1;\n      label = 81;\n      break;\n     }\n     case 83:  {\n      $313 = ($$0254|0)==(0);\n      if ($313) {\n       _pad_683($0,32,$$1260,0,$spec$select);\n       $$0240313371 = 0;\n       label = 91;\n      } else {\n       $$4258370 = $$0254;\n       label = 81;\n      }\n      break;\n     }\n     case 65: case 71: case 70: case 69: case 97: case 103: case 102: case 101:  {\n      $336 = +HEAPF64[$6>>3];\n      $337 = (_fmt_fp($0,$336,$$1260,$$0254,$spec$select,$$0235)|0);\n      $$0243$ph$be = $337;\n      break L77;\n      break;\n     }\n     default: {\n      $$2 = $20;$$2234 = 0;$$2239 = 18377;$$5 = $$0254;$$6268 = $spec$select;$$pre$phiZ2D = $12;\n     }\n     }\n    } while(0);\n    L103: do {\n     if ((label|0) == 67) {\n      label = 0;\n      $223 = $6;\n      $224 = $223;\n      $225 = HEAP32[$224>>2]|0;\n      $226 = (($223) + 4)|0;\n      $227 = $226;\n      $228 = HEAP32[$227>>2]|0;\n      $229 = $$1236 & 32;\n      $230 = (_fmt_x($225,$228,$11,$229)|0);\n      $231 = ($225|0)==(0);\n      $232 = ($228|0)==(0);\n      $233 = $231 & $232;\n      $234 = $$3265 & 8;\n      $235 = ($234|0)==(0);\n      $or$cond278 = $235 | $233;\n      $236 = $$1236 >>> 4;\n      $237 = (18377 + ($236)|0);\n      $spec$select293 = $or$cond278 ? 18377 : $237;\n      $spec$select294 = $or$cond278 ? 0 : 2;\n      $$0228 = $230;$$1233 = $spec$select294;$$1238 = $spec$select293;$$2256 = $$1255;$$4266 = $$3265;$277 = $225;$279 = $228;\n      label = 73;\n     }\n     else if ((label|0) == 72) {\n      label = 0;\n      $273 = (_fmt_u($271,$272,$11)|0);\n      $$0228 = $273;$$1233 = $$0232;$$1238 = $$0237;$$2256 = $$0254;$$4266 = $spec$select;$277 = $271;$279 = $272;\n      label = 73;\n     }\n     else if ((label|0) == 77) {\n      label = 0;\n      $301 = (_memchr($$1,0,$$0254)|0);\n      $302 = ($301|0)==(0|0);\n      $303 = $301;\n      $304 = $$1;\n      $305 = (($303) - ($304))|0;\n      $306 = (($$1) + ($$0254)|0);\n      $$3257 = $302 ? $$0254 : $305;\n      $$1250 = $302 ? $306 : $301;\n      $$pre368 = $$1250;\n      $$2 = $$1;$$2234 = 0;$$2239 = 18377;$$5 = $$3257;$$6268 = $192;$$pre$phiZ2D = $$pre368;\n     }\n     else if ((label|0) == 81) {\n      label = 0;\n      $314 = HEAP32[$6>>2]|0;\n      $$0229334 = $314;$$0240333 = 0;\n      while(1) {\n       $315 = HEAP32[$$0229334>>2]|0;\n       $316 = ($315|0)==(0);\n       if ($316) {\n        $$0240313 = $$0240333;\n        break;\n       }\n       $317 = (_wctomb($9,$315)|0);\n       $318 = ($317|0)<(0);\n       $319 = (($$4258370) - ($$0240333))|0;\n       $320 = ($317>>>0)>($319>>>0);\n       $or$cond283 = $318 | $320;\n       if ($or$cond283) {\n        label = 85;\n        break;\n       }\n       $321 = ((($$0229334)) + 4|0);\n       $322 = (($317) + ($$0240333))|0;\n       $323 = ($$4258370>>>0)>($322>>>0);\n       if ($323) {\n        $$0229334 = $321;$$0240333 = $322;\n       } else {\n        $$0240313 = $322;\n        break;\n       }\n      }\n      if ((label|0) == 85) {\n       label = 0;\n       if ($318) {\n        $$0 = -1;\n        break L1;\n       } else {\n        $$0240313 = $$0240333;\n       }\n      }\n      _pad_683($0,32,$$1260,$$0240313,$spec$select);\n      $324 = ($$0240313|0)==(0);\n      if ($324) {\n       $$0240313371 = 0;\n       label = 91;\n      } else {\n       $325 = HEAP32[$6>>2]|0;\n       $$1230340 = $325;$$1241339 = 0;\n       while(1) {\n        $326 = HEAP32[$$1230340>>2]|0;\n        $327 = ($326|0)==(0);\n        if ($327) {\n         $$0240313371 = $$0240313;\n         label = 91;\n         break L103;\n        }\n        $328 = (_wctomb($9,$326)|0);\n        $329 = (($328) + ($$1241339))|0;\n        $330 = ($329|0)>($$0240313|0);\n        if ($330) {\n         $$0240313371 = $$0240313;\n         label = 91;\n         break L103;\n        }\n        $331 = ((($$1230340)) + 4|0);\n        _out($0,$9,$328);\n        $332 = ($329>>>0)<($$0240313>>>0);\n        if ($332) {\n         $$1230340 = $331;$$1241339 = $329;\n        } else {\n         $$0240313371 = $$0240313;\n         label = 91;\n         break;\n        }\n       }\n      }\n     }\n    } while(0);\n    if ((label|0) == 73) {\n     label = 0;\n     $274 = ($$2256|0)>(-1);\n     $275 = $$4266 & -65537;\n     $spec$select281 = $274 ? $275 : $$4266;\n     $276 = ($277|0)!=(0);\n     $278 = ($279|0)!=(0);\n     $280 = $276 | $278;\n     $281 = ($$2256|0)!=(0);\n     $or$cond = $281 | $280;\n     $282 = $$0228;\n     $283 = (($12) - ($282))|0;\n     $284 = $280 ^ 1;\n     $285 = $284&1;\n     $286 = (($283) + ($285))|0;\n     $287 = ($$2256|0)>($286|0);\n     $$2256$ = $287 ? $$2256 : $286;\n     $spec$select298 = $or$cond ? $$2256$ : 0;\n     $spec$select299 = $or$cond ? $$0228 : $11;\n     $$2 = $spec$select299;$$2234 = $$1233;$$2239 = $$1238;$$5 = $spec$select298;$$6268 = $spec$select281;$$pre$phiZ2D = $12;\n    }\n    else if ((label|0) == 91) {\n     label = 0;\n     $333 = $spec$select ^ 8192;\n     _pad_683($0,32,$$1260,$$0240313371,$333);\n     $334 = ($$1260|0)>($$0240313371|0);\n     $335 = $334 ? $$1260 : $$0240313371;\n     $$0243$ph$be = $335;\n     break;\n    }\n    $338 = $$2;\n    $339 = (($$pre$phiZ2D) - ($338))|0;\n    $340 = ($$5|0)<($339|0);\n    $spec$select284 = $340 ? $339 : $$5;\n    $341 = (($spec$select284) + ($$2234))|0;\n    $342 = ($$1260|0)<($341|0);\n    $$2261 = $342 ? $341 : $$1260;\n    _pad_683($0,32,$$2261,$341,$$6268);\n    _out($0,$$2239,$$2234);\n    $343 = $$6268 ^ 65536;\n    _pad_683($0,48,$$2261,$341,$343);\n    _pad_683($0,48,$spec$select284,$339,0);\n    _out($0,$$2,$339);\n    $344 = $$6268 ^ 8192;\n    _pad_683($0,32,$$2261,$341,$344);\n    $$0243$ph$be = $$2261;\n   }\n  } while(0);\n  $$0243$ph = $$0243$ph$be;$$0247$ph = $$1248;$$0269$ph = $$3272;\n }\n L125: do {\n  if ((label|0) == 94) {\n   $345 = ($0|0)==(0|0);\n   if ($345) {\n    $346 = ($$0269$ph|0)==(0);\n    if ($346) {\n     $$0 = 0;\n    } else {\n     $$2242320 = 1;\n     while(1) {\n      $347 = (($4) + ($$2242320<<2)|0);\n      $348 = HEAP32[$347>>2]|0;\n      $349 = ($348|0)==(0);\n      if ($349) {\n       break;\n      }\n      $350 = (($3) + ($$2242320<<3)|0);\n      _pop_arg($350,$348,$2);\n      $351 = (($$2242320) + 1)|0;\n      $352 = ($351>>>0)<(10);\n      if ($352) {\n       $$2242320 = $351;\n      } else {\n       $$0 = 1;\n       break L125;\n      }\n     }\n     $$3317 = $$2242320;\n     while(1) {\n      $355 = (($4) + ($$3317<<2)|0);\n      $356 = HEAP32[$355>>2]|0;\n      $357 = ($356|0)==(0);\n      $354 = (($$3317) + 1)|0;\n      if (!($357)) {\n       $$0 = -1;\n       break L125;\n      }\n      $353 = ($354>>>0)<(10);\n      if ($353) {\n       $$3317 = $354;\n      } else {\n       $$0 = 1;\n       break;\n      }\n     }\n    }\n   } else {\n    $$0 = $$1248;\n   }\n  }\n } while(0);\n STACKTOP = sp;return ($$0|0);\n}\nfunction ___lockfile($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 0;\n}\nfunction ___unlockfile($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction _out($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = HEAP32[$0>>2]|0;\n $4 = $3 & 32;\n $5 = ($4|0)==(0);\n if ($5) {\n  (___fwritex($1,$2,$0)|0);\n }\n return;\n}\nfunction _getint($0) {\n $0 = $0|0;\n var $$0$lcssa = 0, $$04 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = HEAP32[$0>>2]|0;\n $2 = HEAP8[$1>>0]|0;\n $3 = $2 << 24 >> 24;\n $4 = (_isdigit($3)|0);\n $5 = ($4|0)==(0);\n if ($5) {\n  $$0$lcssa = 0;\n } else {\n  $$04 = 0;\n  while(1) {\n   $6 = ($$04*10)|0;\n   $7 = HEAP32[$0>>2]|0;\n   $8 = HEAP8[$7>>0]|0;\n   $9 = $8 << 24 >> 24;\n   $10 = (($6) + -48)|0;\n   $11 = (($10) + ($9))|0;\n   $12 = ((($7)) + 1|0);\n   HEAP32[$0>>2] = $12;\n   $13 = HEAP8[$12>>0]|0;\n   $14 = $13 << 24 >> 24;\n   $15 = (_isdigit($14)|0);\n   $16 = ($15|0)==(0);\n   if ($16) {\n    $$0$lcssa = $11;\n    break;\n   } else {\n    $$04 = $11;\n   }\n  }\n }\n return ($$0$lcssa|0);\n}\nfunction _pop_arg($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$mask = 0, $$mask31 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0.0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0.0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current11 = 0, $arglist_current14 = 0, $arglist_current17 = 0;\n var $arglist_current2 = 0, $arglist_current20 = 0, $arglist_current23 = 0, $arglist_current26 = 0, $arglist_current5 = 0, $arglist_current8 = 0, $arglist_next = 0, $arglist_next12 = 0, $arglist_next15 = 0, $arglist_next18 = 0, $arglist_next21 = 0, $arglist_next24 = 0, $arglist_next27 = 0, $arglist_next3 = 0, $arglist_next6 = 0, $arglist_next9 = 0, $expanded = 0, $expanded28 = 0, $expanded30 = 0, $expanded31 = 0;\n var $expanded32 = 0, $expanded34 = 0, $expanded35 = 0, $expanded37 = 0, $expanded38 = 0, $expanded39 = 0, $expanded41 = 0, $expanded42 = 0, $expanded44 = 0, $expanded45 = 0, $expanded46 = 0, $expanded48 = 0, $expanded49 = 0, $expanded51 = 0, $expanded52 = 0, $expanded53 = 0, $expanded55 = 0, $expanded56 = 0, $expanded58 = 0, $expanded59 = 0;\n var $expanded60 = 0, $expanded62 = 0, $expanded63 = 0, $expanded65 = 0, $expanded66 = 0, $expanded67 = 0, $expanded69 = 0, $expanded70 = 0, $expanded72 = 0, $expanded73 = 0, $expanded74 = 0, $expanded76 = 0, $expanded77 = 0, $expanded79 = 0, $expanded80 = 0, $expanded81 = 0, $expanded83 = 0, $expanded84 = 0, $expanded86 = 0, $expanded87 = 0;\n var $expanded88 = 0, $expanded90 = 0, $expanded91 = 0, $expanded93 = 0, $expanded94 = 0, $expanded95 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($1>>>0)>(20);\n L1: do {\n  if (!($3)) {\n   do {\n    switch ($1|0) {\n    case 9:  {\n     $arglist_current = HEAP32[$2>>2]|0;\n     $4 = $arglist_current;\n     $5 = ((0) + 4|0);\n     $expanded28 = $5;\n     $expanded = (($expanded28) - 1)|0;\n     $6 = (($4) + ($expanded))|0;\n     $7 = ((0) + 4|0);\n     $expanded32 = $7;\n     $expanded31 = (($expanded32) - 1)|0;\n     $expanded30 = $expanded31 ^ -1;\n     $8 = $6 & $expanded30;\n     $9 = $8;\n     $10 = HEAP32[$9>>2]|0;\n     $arglist_next = ((($9)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next;\n     HEAP32[$0>>2] = $10;\n     break L1;\n     break;\n    }\n    case 10:  {\n     $arglist_current2 = HEAP32[$2>>2]|0;\n     $11 = $arglist_current2;\n     $12 = ((0) + 4|0);\n     $expanded35 = $12;\n     $expanded34 = (($expanded35) - 1)|0;\n     $13 = (($11) + ($expanded34))|0;\n     $14 = ((0) + 4|0);\n     $expanded39 = $14;\n     $expanded38 = (($expanded39) - 1)|0;\n     $expanded37 = $expanded38 ^ -1;\n     $15 = $13 & $expanded37;\n     $16 = $15;\n     $17 = HEAP32[$16>>2]|0;\n     $arglist_next3 = ((($16)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next3;\n     $18 = ($17|0)<(0);\n     $19 = $18 << 31 >> 31;\n     $20 = $0;\n     $21 = $20;\n     HEAP32[$21>>2] = $17;\n     $22 = (($20) + 4)|0;\n     $23 = $22;\n     HEAP32[$23>>2] = $19;\n     break L1;\n     break;\n    }\n    case 11:  {\n     $arglist_current5 = HEAP32[$2>>2]|0;\n     $24 = $arglist_current5;\n     $25 = ((0) + 4|0);\n     $expanded42 = $25;\n     $expanded41 = (($expanded42) - 1)|0;\n     $26 = (($24) + ($expanded41))|0;\n     $27 = ((0) + 4|0);\n     $expanded46 = $27;\n     $expanded45 = (($expanded46) - 1)|0;\n     $expanded44 = $expanded45 ^ -1;\n     $28 = $26 & $expanded44;\n     $29 = $28;\n     $30 = HEAP32[$29>>2]|0;\n     $arglist_next6 = ((($29)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next6;\n     $31 = $0;\n     $32 = $31;\n     HEAP32[$32>>2] = $30;\n     $33 = (($31) + 4)|0;\n     $34 = $33;\n     HEAP32[$34>>2] = 0;\n     break L1;\n     break;\n    }\n    case 12:  {\n     $arglist_current8 = HEAP32[$2>>2]|0;\n     $35 = $arglist_current8;\n     $36 = ((0) + 8|0);\n     $expanded49 = $36;\n     $expanded48 = (($expanded49) - 1)|0;\n     $37 = (($35) + ($expanded48))|0;\n     $38 = ((0) + 8|0);\n     $expanded53 = $38;\n     $expanded52 = (($expanded53) - 1)|0;\n     $expanded51 = $expanded52 ^ -1;\n     $39 = $37 & $expanded51;\n     $40 = $39;\n     $41 = $40;\n     $42 = $41;\n     $43 = HEAP32[$42>>2]|0;\n     $44 = (($41) + 4)|0;\n     $45 = $44;\n     $46 = HEAP32[$45>>2]|0;\n     $arglist_next9 = ((($40)) + 8|0);\n     HEAP32[$2>>2] = $arglist_next9;\n     $47 = $0;\n     $48 = $47;\n     HEAP32[$48>>2] = $43;\n     $49 = (($47) + 4)|0;\n     $50 = $49;\n     HEAP32[$50>>2] = $46;\n     break L1;\n     break;\n    }\n    case 13:  {\n     $arglist_current11 = HEAP32[$2>>2]|0;\n     $51 = $arglist_current11;\n     $52 = ((0) + 4|0);\n     $expanded56 = $52;\n     $expanded55 = (($expanded56) - 1)|0;\n     $53 = (($51) + ($expanded55))|0;\n     $54 = ((0) + 4|0);\n     $expanded60 = $54;\n     $expanded59 = (($expanded60) - 1)|0;\n     $expanded58 = $expanded59 ^ -1;\n     $55 = $53 & $expanded58;\n     $56 = $55;\n     $57 = HEAP32[$56>>2]|0;\n     $arglist_next12 = ((($56)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next12;\n     $58 = $57&65535;\n     $59 = $58 << 16 >> 16;\n     $60 = ($59|0)<(0);\n     $61 = $60 << 31 >> 31;\n     $62 = $0;\n     $63 = $62;\n     HEAP32[$63>>2] = $59;\n     $64 = (($62) + 4)|0;\n     $65 = $64;\n     HEAP32[$65>>2] = $61;\n     break L1;\n     break;\n    }\n    case 14:  {\n     $arglist_current14 = HEAP32[$2>>2]|0;\n     $66 = $arglist_current14;\n     $67 = ((0) + 4|0);\n     $expanded63 = $67;\n     $expanded62 = (($expanded63) - 1)|0;\n     $68 = (($66) + ($expanded62))|0;\n     $69 = ((0) + 4|0);\n     $expanded67 = $69;\n     $expanded66 = (($expanded67) - 1)|0;\n     $expanded65 = $expanded66 ^ -1;\n     $70 = $68 & $expanded65;\n     $71 = $70;\n     $72 = HEAP32[$71>>2]|0;\n     $arglist_next15 = ((($71)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next15;\n     $$mask31 = $72 & 65535;\n     $73 = $0;\n     $74 = $73;\n     HEAP32[$74>>2] = $$mask31;\n     $75 = (($73) + 4)|0;\n     $76 = $75;\n     HEAP32[$76>>2] = 0;\n     break L1;\n     break;\n    }\n    case 15:  {\n     $arglist_current17 = HEAP32[$2>>2]|0;\n     $77 = $arglist_current17;\n     $78 = ((0) + 4|0);\n     $expanded70 = $78;\n     $expanded69 = (($expanded70) - 1)|0;\n     $79 = (($77) + ($expanded69))|0;\n     $80 = ((0) + 4|0);\n     $expanded74 = $80;\n     $expanded73 = (($expanded74) - 1)|0;\n     $expanded72 = $expanded73 ^ -1;\n     $81 = $79 & $expanded72;\n     $82 = $81;\n     $83 = HEAP32[$82>>2]|0;\n     $arglist_next18 = ((($82)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next18;\n     $84 = $83&255;\n     $85 = $84 << 24 >> 24;\n     $86 = ($85|0)<(0);\n     $87 = $86 << 31 >> 31;\n     $88 = $0;\n     $89 = $88;\n     HEAP32[$89>>2] = $85;\n     $90 = (($88) + 4)|0;\n     $91 = $90;\n     HEAP32[$91>>2] = $87;\n     break L1;\n     break;\n    }\n    case 16:  {\n     $arglist_current20 = HEAP32[$2>>2]|0;\n     $92 = $arglist_current20;\n     $93 = ((0) + 4|0);\n     $expanded77 = $93;\n     $expanded76 = (($expanded77) - 1)|0;\n     $94 = (($92) + ($expanded76))|0;\n     $95 = ((0) + 4|0);\n     $expanded81 = $95;\n     $expanded80 = (($expanded81) - 1)|0;\n     $expanded79 = $expanded80 ^ -1;\n     $96 = $94 & $expanded79;\n     $97 = $96;\n     $98 = HEAP32[$97>>2]|0;\n     $arglist_next21 = ((($97)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next21;\n     $$mask = $98 & 255;\n     $99 = $0;\n     $100 = $99;\n     HEAP32[$100>>2] = $$mask;\n     $101 = (($99) + 4)|0;\n     $102 = $101;\n     HEAP32[$102>>2] = 0;\n     break L1;\n     break;\n    }\n    case 17:  {\n     $arglist_current23 = HEAP32[$2>>2]|0;\n     $103 = $arglist_current23;\n     $104 = ((0) + 8|0);\n     $expanded84 = $104;\n     $expanded83 = (($expanded84) - 1)|0;\n     $105 = (($103) + ($expanded83))|0;\n     $106 = ((0) + 8|0);\n     $expanded88 = $106;\n     $expanded87 = (($expanded88) - 1)|0;\n     $expanded86 = $expanded87 ^ -1;\n     $107 = $105 & $expanded86;\n     $108 = $107;\n     $109 = +HEAPF64[$108>>3];\n     $arglist_next24 = ((($108)) + 8|0);\n     HEAP32[$2>>2] = $arglist_next24;\n     HEAPF64[$0>>3] = $109;\n     break L1;\n     break;\n    }\n    case 18:  {\n     $arglist_current26 = HEAP32[$2>>2]|0;\n     $110 = $arglist_current26;\n     $111 = ((0) + 8|0);\n     $expanded91 = $111;\n     $expanded90 = (($expanded91) - 1)|0;\n     $112 = (($110) + ($expanded90))|0;\n     $113 = ((0) + 8|0);\n     $expanded95 = $113;\n     $expanded94 = (($expanded95) - 1)|0;\n     $expanded93 = $expanded94 ^ -1;\n     $114 = $112 & $expanded93;\n     $115 = $114;\n     $116 = +HEAPF64[$115>>3];\n     $arglist_next27 = ((($115)) + 8|0);\n     HEAP32[$2>>2] = $arglist_next27;\n     HEAPF64[$0>>3] = $116;\n     break L1;\n     break;\n    }\n    default: {\n     break L1;\n    }\n    }\n   } while(0);\n  }\n } while(0);\n return;\n}\nfunction _fmt_x($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$05$lcssa = 0, $$056 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n $4 = ($0|0)==(0);\n $5 = ($1|0)==(0);\n $6 = $4 & $5;\n if ($6) {\n  $$05$lcssa = $2;\n } else {\n  $$056 = $2;$15 = $1;$8 = $0;\n  while(1) {\n   $7 = $8 & 15;\n   $9 = (18429 + ($7)|0);\n   $10 = HEAP8[$9>>0]|0;\n   $11 = $10&255;\n   $12 = $11 | $3;\n   $13 = $12&255;\n   $14 = ((($$056)) + -1|0);\n   HEAP8[$14>>0] = $13;\n   $16 = (_bitshift64Lshr(($8|0),($15|0),4)|0);\n   $17 = tempRet0;\n   $18 = ($16|0)==(0);\n   $19 = ($17|0)==(0);\n   $20 = $18 & $19;\n   if ($20) {\n    $$05$lcssa = $14;\n    break;\n   } else {\n    $$056 = $14;$15 = $17;$8 = $16;\n   }\n  }\n }\n return ($$05$lcssa|0);\n}\nfunction _fmt_o($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0$lcssa = 0, $$06 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($0|0)==(0);\n $4 = ($1|0)==(0);\n $5 = $3 & $4;\n if ($5) {\n  $$0$lcssa = $2;\n } else {\n  $$06 = $2;$11 = $1;$7 = $0;\n  while(1) {\n   $6 = $7&255;\n   $8 = $6 & 7;\n   $9 = $8 | 48;\n   $10 = ((($$06)) + -1|0);\n   HEAP8[$10>>0] = $9;\n   $12 = (_bitshift64Lshr(($7|0),($11|0),3)|0);\n   $13 = tempRet0;\n   $14 = ($12|0)==(0);\n   $15 = ($13|0)==(0);\n   $16 = $14 & $15;\n   if ($16) {\n    $$0$lcssa = $10;\n    break;\n   } else {\n    $$06 = $10;$11 = $13;$7 = $12;\n   }\n  }\n }\n return ($$0$lcssa|0);\n}\nfunction _fmt_u($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$010$lcssa$off0 = 0, $$012 = 0, $$09$lcssa = 0, $$0914 = 0, $$1$lcssa = 0, $$111 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;\n var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($1>>>0)>(0);\n $4 = ($0>>>0)>(4294967295);\n $5 = ($1|0)==(0);\n $6 = $5 & $4;\n $7 = $3 | $6;\n if ($7) {\n  $$0914 = $2;$8 = $0;$9 = $1;\n  while(1) {\n   $10 = (___udivdi3(($8|0),($9|0),10,0)|0);\n   $11 = tempRet0;\n   $12 = (___muldi3(($10|0),($11|0),10,0)|0);\n   $13 = tempRet0;\n   $14 = (_i64Subtract(($8|0),($9|0),($12|0),($13|0))|0);\n   $15 = tempRet0;\n   $16 = $14&255;\n   $17 = $16 | 48;\n   $18 = ((($$0914)) + -1|0);\n   HEAP8[$18>>0] = $17;\n   $19 = ($9>>>0)>(9);\n   $20 = ($8>>>0)>(4294967295);\n   $21 = ($9|0)==(9);\n   $22 = $21 & $20;\n   $23 = $19 | $22;\n   if ($23) {\n    $$0914 = $18;$8 = $10;$9 = $11;\n   } else {\n    break;\n   }\n  }\n  $$010$lcssa$off0 = $10;$$09$lcssa = $18;\n } else {\n  $$010$lcssa$off0 = $0;$$09$lcssa = $2;\n }\n $24 = ($$010$lcssa$off0|0)==(0);\n if ($24) {\n  $$1$lcssa = $$09$lcssa;\n } else {\n  $$012 = $$010$lcssa$off0;$$111 = $$09$lcssa;\n  while(1) {\n   $25 = (($$012>>>0) / 10)&-1;\n   $26 = ($25*10)|0;\n   $27 = (($$012) - ($26))|0;\n   $28 = $27 | 48;\n   $29 = $28&255;\n   $30 = ((($$111)) + -1|0);\n   HEAP8[$30>>0] = $29;\n   $31 = ($$012>>>0)<(10);\n   if ($31) {\n    $$1$lcssa = $30;\n    break;\n   } else {\n    $$012 = $25;$$111 = $30;\n   }\n  }\n }\n return ($$1$lcssa|0);\n}\nfunction _strerror($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (___pthread_self_105()|0);\n $2 = ((($1)) + 188|0);\n $3 = HEAP32[$2>>2]|0;\n $4 = (___strerror_l($0,$3)|0);\n return ($4|0);\n}\nfunction _memchr($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0$lcssa = 0, $$035$lcssa = 0, $$035$lcssa65 = 0, $$03555 = 0, $$036$lcssa = 0, $$036$lcssa64 = 0, $$03654 = 0, $$046 = 0, $$137$lcssa = 0, $$137$lcssa66 = 0, $$13745 = 0, $$140 = 0, $$23839 = 0, $$in = 0, $$lcssa = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond53 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = $1 & 255;\n $4 = $0;\n $5 = $4 & 3;\n $6 = ($5|0)!=(0);\n $7 = ($2|0)!=(0);\n $or$cond53 = $7 & $6;\n L1: do {\n  if ($or$cond53) {\n   $8 = $1&255;\n   $$03555 = $0;$$03654 = $2;\n   while(1) {\n    $9 = HEAP8[$$03555>>0]|0;\n    $10 = ($9<<24>>24)==($8<<24>>24);\n    if ($10) {\n     $$035$lcssa65 = $$03555;$$036$lcssa64 = $$03654;\n     label = 6;\n     break L1;\n    }\n    $11 = ((($$03555)) + 1|0);\n    $12 = (($$03654) + -1)|0;\n    $13 = $11;\n    $14 = $13 & 3;\n    $15 = ($14|0)!=(0);\n    $16 = ($12|0)!=(0);\n    $or$cond = $16 & $15;\n    if ($or$cond) {\n     $$03555 = $11;$$03654 = $12;\n    } else {\n     $$035$lcssa = $11;$$036$lcssa = $12;$$lcssa = $16;\n     label = 5;\n     break;\n    }\n   }\n  } else {\n   $$035$lcssa = $0;$$036$lcssa = $2;$$lcssa = $7;\n   label = 5;\n  }\n } while(0);\n if ((label|0) == 5) {\n  if ($$lcssa) {\n   $$035$lcssa65 = $$035$lcssa;$$036$lcssa64 = $$036$lcssa;\n   label = 6;\n  } else {\n   label = 16;\n  }\n }\n L8: do {\n  if ((label|0) == 6) {\n   $17 = HEAP8[$$035$lcssa65>>0]|0;\n   $18 = $1&255;\n   $19 = ($17<<24>>24)==($18<<24>>24);\n   if ($19) {\n    $38 = ($$036$lcssa64|0)==(0);\n    if ($38) {\n     label = 16;\n     break;\n    } else {\n     $39 = $$035$lcssa65;\n     break;\n    }\n   }\n   $20 = Math_imul($3, 16843009)|0;\n   $21 = ($$036$lcssa64>>>0)>(3);\n   L13: do {\n    if ($21) {\n     $$046 = $$035$lcssa65;$$13745 = $$036$lcssa64;\n     while(1) {\n      $22 = HEAP32[$$046>>2]|0;\n      $23 = $22 ^ $20;\n      $24 = (($23) + -16843009)|0;\n      $25 = $23 & -2139062144;\n      $26 = $25 ^ -2139062144;\n      $27 = $26 & $24;\n      $28 = ($27|0)==(0);\n      if (!($28)) {\n       $$137$lcssa66 = $$13745;$$in = $$046;\n       break L13;\n      }\n      $29 = ((($$046)) + 4|0);\n      $30 = (($$13745) + -4)|0;\n      $31 = ($30>>>0)>(3);\n      if ($31) {\n       $$046 = $29;$$13745 = $30;\n      } else {\n       $$0$lcssa = $29;$$137$lcssa = $30;\n       label = 11;\n       break;\n      }\n     }\n    } else {\n     $$0$lcssa = $$035$lcssa65;$$137$lcssa = $$036$lcssa64;\n     label = 11;\n    }\n   } while(0);\n   if ((label|0) == 11) {\n    $32 = ($$137$lcssa|0)==(0);\n    if ($32) {\n     label = 16;\n     break;\n    } else {\n     $$137$lcssa66 = $$137$lcssa;$$in = $$0$lcssa;\n    }\n   }\n   $$140 = $$in;$$23839 = $$137$lcssa66;\n   while(1) {\n    $33 = HEAP8[$$140>>0]|0;\n    $34 = ($33<<24>>24)==($18<<24>>24);\n    if ($34) {\n     $39 = $$140;\n     break L8;\n    }\n    $35 = ((($$140)) + 1|0);\n    $36 = (($$23839) + -1)|0;\n    $37 = ($36|0)==(0);\n    if ($37) {\n     label = 16;\n     break;\n    } else {\n     $$140 = $35;$$23839 = $36;\n    }\n   }\n  }\n } while(0);\n if ((label|0) == 16) {\n  $39 = 0;\n }\n return ($39|0);\n}\nfunction _pad_683($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$0$lcssa = 0, $$011 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 256|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(256|0);\n $5 = sp;\n $6 = $4 & 73728;\n $7 = ($6|0)==(0);\n $8 = ($2|0)>($3|0);\n $or$cond = $8 & $7;\n if ($or$cond) {\n  $9 = (($2) - ($3))|0;\n  $10 = $1 << 24 >> 24;\n  $11 = ($9>>>0)<(256);\n  $12 = $11 ? $9 : 256;\n  (_memset(($5|0),($10|0),($12|0))|0);\n  $13 = ($9>>>0)>(255);\n  if ($13) {\n   $14 = (($2) - ($3))|0;\n   $$011 = $9;\n   while(1) {\n    _out($0,$5,256);\n    $15 = (($$011) + -256)|0;\n    $16 = ($15>>>0)>(255);\n    if ($16) {\n     $$011 = $15;\n    } else {\n     break;\n    }\n   }\n   $17 = $14 & 255;\n   $$0$lcssa = $17;\n  } else {\n   $$0$lcssa = $9;\n  }\n  _out($0,$5,$$0$lcssa);\n }\n STACKTOP = sp;return;\n}\nfunction _wctomb($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$0 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = ($0|0)==(0|0);\n if ($2) {\n  $$0 = 0;\n } else {\n  $3 = (_wcrtomb($0,$1,0)|0);\n  $$0 = $3;\n }\n return ($$0|0);\n}\nfunction _fmt_fp($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = +$1;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $$ = 0, $$0 = 0, $$0463$lcssa = 0, $$0463588 = 0, $$0464599 = 0, $$0471 = 0.0, $$0479 = 0, $$0487657 = 0, $$0488 = 0, $$0488669 = 0, $$0488671 = 0, $$0497670 = 0, $$0498 = 0, $$0511586 = 0.0, $$0512 = 0, $$0513 = 0, $$0516652 = 0, $$0522 = 0, $$0523 = 0, $$0525 = 0;\n var $$0527 = 0, $$0529 = 0, $$0529$in646 = 0, $$0532651 = 0, $$1465 = 0, $$1467 = 0.0, $$1469 = 0.0, $$1472 = 0.0, $$1480 = 0, $$1482$lcssa = 0, $$1482683 = 0, $$1489656 = 0, $$1499 = 0, $$1510587 = 0, $$1514$lcssa = 0, $$1514614 = 0, $$1517 = 0, $$1526 = 0, $$1528 = 0, $$1530621 = 0;\n var $$1533$lcssa = 0, $$1533645 = 0, $$1604 = 0, $$2 = 0, $$2473 = 0.0, $$2476 = 0, $$2483 = 0, $$2490$lcssa = 0, $$2490638 = 0, $$2500$lcssa = 0, $$2500682 = 0, $$2515 = 0, $$2518634 = 0, $$2531 = 0, $$2534633 = 0, $$3 = 0.0, $$3477 = 0, $$3484$lcssa = 0, $$3484663 = 0, $$3501$lcssa = 0;\n var $$3501676 = 0, $$3535620 = 0, $$4 = 0.0, $$4478$lcssa = 0, $$4478594 = 0, $$4492 = 0, $$4502$lcssa = 0, $$4502662 = 0, $$4520 = 0, $$5$lcssa = 0, $$5486$lcssa = 0, $$5486639 = 0, $$5493603 = 0, $$5503 = 0, $$5521 = 0, $$560 = 0, $$5609 = 0, $$6 = 0, $$6494593 = 0, $$7495608 = 0;\n var $$8 = 0, $$8506 = 0, $$9 = 0, $$9507$lcssa = 0, $$9507625 = 0, $$lcssa583 = 0, $$lobit = 0, $$neg = 0, $$neg571 = 0, $$not = 0, $$pn = 0, $$pr = 0, $$pr564 = 0, $$pre = 0, $$pre$phi713Z2D = 0, $$pre$phi714Z2D = 0, $$pre716 = 0, $$sink755 = 0, $10 = 0, $100 = 0;\n var $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0;\n var $12 = 0, $120 = 0, $121 = 0.0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0;\n var $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0.0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0;\n var $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0;\n var $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0;\n var $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0;\n var $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0;\n var $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0.0;\n var $247 = 0.0, $248 = 0, $249 = 0.0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0;\n var $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0;\n var $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $30 = 0, $300 = 0;\n var $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0;\n var $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0;\n var $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0;\n var $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0.0, $370 = 0, $371 = 0, $372 = 0, $373 = 0;\n var $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0.0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0;\n var $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0;\n var $410 = 0, $411 = 0, $412 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0.0, $54 = 0, $55 = 0, $56 = 0, $57 = 0.0, $58 = 0.0;\n var $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0.0, $62 = 0.0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;\n var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0.0, $91 = 0.0, $92 = 0.0, $93 = 0, $94 = 0;\n var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $not$ = 0, $or$cond = 0, $or$cond3$not = 0, $or$cond543 = 0, $or$cond546 = 0, $or$cond556 = 0, $or$cond559 = 0, $or$cond6 = 0, $scevgep707 = 0, $scevgep707708 = 0, $spec$select = 0, $spec$select539 = 0, $spec$select540 = 0, $spec$select540720 = 0, $spec$select540721 = 0;\n var $spec$select541 = 0, $spec$select544 = 0.0, $spec$select547 = 0, $spec$select548 = 0, $spec$select549 = 0, $spec$select551 = 0, $spec$select554 = 0, $spec$select557 = 0, $spec$select561 = 0.0, $spec$select562 = 0, $spec$select563 = 0, $spec$select565 = 0, $spec$select566 = 0, $spec$select567 = 0.0, $spec$select568 = 0.0, $spec$select569 = 0.0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 560|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(560|0);\n $6 = sp + 8|0;\n $7 = sp;\n $8 = sp + 524|0;\n $9 = $8;\n $10 = sp + 512|0;\n HEAP32[$7>>2] = 0;\n $11 = ((($10)) + 12|0);\n $12 = (___DOUBLE_BITS_684($1)|0);\n $13 = tempRet0;\n $14 = ($13|0)<(0);\n if ($14) {\n  $15 = - $1;\n  $16 = (___DOUBLE_BITS_684($15)|0);\n  $17 = tempRet0;\n  $$0471 = $15;$$0522 = 1;$$0523 = 18394;$25 = $17;$412 = $16;\n } else {\n  $18 = $4 & 2048;\n  $19 = ($18|0)==(0);\n  $20 = $4 & 1;\n  $21 = ($20|0)==(0);\n  $$ = $21 ? (18395) : (18400);\n  $spec$select565 = $19 ? $$ : (18397);\n  $22 = $4 & 2049;\n  $23 = ($22|0)!=(0);\n  $spec$select566 = $23&1;\n  $$0471 = $1;$$0522 = $spec$select566;$$0523 = $spec$select565;$25 = $13;$412 = $12;\n }\n $24 = $25 & 2146435072;\n $26 = (0)==(0);\n $27 = ($24|0)==(2146435072);\n $28 = $26 & $27;\n do {\n  if ($28) {\n   $29 = $5 & 32;\n   $30 = ($29|0)!=(0);\n   $31 = $30 ? 18413 : 18417;\n   $32 = ($$0471 != $$0471) | (0.0 != 0.0);\n   $33 = $30 ? 18421 : 18425;\n   $$0512 = $32 ? $33 : $31;\n   $34 = (($$0522) + 3)|0;\n   $35 = $4 & -65537;\n   _pad_683($0,32,$2,$34,$35);\n   _out($0,$$0523,$$0522);\n   _out($0,$$0512,3);\n   $36 = $4 ^ 8192;\n   _pad_683($0,32,$2,$34,$36);\n   $$sink755 = $34;\n  } else {\n   $37 = (+_frexpl($$0471,$7));\n   $38 = $37 * 2.0;\n   $39 = $38 != 0.0;\n   if ($39) {\n    $40 = HEAP32[$7>>2]|0;\n    $41 = (($40) + -1)|0;\n    HEAP32[$7>>2] = $41;\n   }\n   $42 = $5 | 32;\n   $43 = ($42|0)==(97);\n   if ($43) {\n    $44 = $5 & 32;\n    $45 = ($44|0)==(0);\n    $46 = ((($$0523)) + 9|0);\n    $spec$select = $45 ? $$0523 : $46;\n    $47 = $$0522 | 2;\n    $48 = ($3>>>0)>(11);\n    $49 = (12 - ($3))|0;\n    $50 = ($49|0)==(0);\n    $51 = $48 | $50;\n    do {\n     if ($51) {\n      $$1472 = $38;\n     } else {\n      $$0511586 = 8.0;$$1510587 = $49;\n      while(1) {\n       $52 = (($$1510587) + -1)|0;\n       $53 = $$0511586 * 16.0;\n       $54 = ($52|0)==(0);\n       if ($54) {\n        break;\n       } else {\n        $$0511586 = $53;$$1510587 = $52;\n       }\n      }\n      $55 = HEAP8[$spec$select>>0]|0;\n      $56 = ($55<<24>>24)==(45);\n      if ($56) {\n       $57 = - $38;\n       $58 = $57 - $53;\n       $59 = $53 + $58;\n       $60 = - $59;\n       $$1472 = $60;\n       break;\n      } else {\n       $61 = $38 + $53;\n       $62 = $61 - $53;\n       $$1472 = $62;\n       break;\n      }\n     }\n    } while(0);\n    $63 = HEAP32[$7>>2]|0;\n    $64 = ($63|0)<(0);\n    $65 = (0 - ($63))|0;\n    $66 = $64 ? $65 : $63;\n    $67 = ($66|0)<(0);\n    $68 = $67 << 31 >> 31;\n    $69 = (_fmt_u($66,$68,$11)|0);\n    $70 = ($69|0)==($11|0);\n    if ($70) {\n     $71 = ((($10)) + 11|0);\n     HEAP8[$71>>0] = 48;\n     $$0513 = $71;\n    } else {\n     $$0513 = $69;\n    }\n    $72 = $63 >> 31;\n    $73 = $72 & 2;\n    $74 = (($73) + 43)|0;\n    $75 = $74&255;\n    $76 = ((($$0513)) + -1|0);\n    HEAP8[$76>>0] = $75;\n    $77 = (($5) + 15)|0;\n    $78 = $77&255;\n    $79 = ((($$0513)) + -2|0);\n    HEAP8[$79>>0] = $78;\n    $80 = ($3|0)<(1);\n    $81 = $4 & 8;\n    $82 = ($81|0)==(0);\n    $$0525 = $8;$$2473 = $$1472;\n    while(1) {\n     $83 = (~~(($$2473)));\n     $84 = (18429 + ($83)|0);\n     $85 = HEAP8[$84>>0]|0;\n     $86 = $85&255;\n     $87 = $44 | $86;\n     $88 = $87&255;\n     $89 = ((($$0525)) + 1|0);\n     HEAP8[$$0525>>0] = $88;\n     $90 = (+($83|0));\n     $91 = $$2473 - $90;\n     $92 = $91 * 16.0;\n     $93 = $89;\n     $94 = (($93) - ($9))|0;\n     $95 = ($94|0)==(1);\n     if ($95) {\n      $96 = $92 == 0.0;\n      $or$cond3$not = $80 & $96;\n      $or$cond = $82 & $or$cond3$not;\n      if ($or$cond) {\n       $$1526 = $89;\n      } else {\n       $97 = ((($$0525)) + 2|0);\n       HEAP8[$89>>0] = 46;\n       $$1526 = $97;\n      }\n     } else {\n      $$1526 = $89;\n     }\n     $98 = $92 != 0.0;\n     if ($98) {\n      $$0525 = $$1526;$$2473 = $92;\n     } else {\n      break;\n     }\n    }\n    $99 = ($3|0)==(0);\n    $$pre716 = $$1526;\n    if ($99) {\n     label = 25;\n    } else {\n     $100 = (-2 - ($9))|0;\n     $101 = (($100) + ($$pre716))|0;\n     $102 = ($101|0)<($3|0);\n     if ($102) {\n      $103 = $11;\n      $104 = $79;\n      $105 = (($3) + 2)|0;\n      $106 = (($105) + ($103))|0;\n      $107 = (($106) - ($104))|0;\n      $$0527 = $107;$$pre$phi713Z2D = $103;$$pre$phi714Z2D = $104;\n     } else {\n      label = 25;\n     }\n    }\n    if ((label|0) == 25) {\n     $108 = $11;\n     $109 = $79;\n     $110 = (($108) - ($9))|0;\n     $111 = (($110) - ($109))|0;\n     $112 = (($111) + ($$pre716))|0;\n     $$0527 = $112;$$pre$phi713Z2D = $108;$$pre$phi714Z2D = $109;\n    }\n    $113 = (($$0527) + ($47))|0;\n    _pad_683($0,32,$2,$113,$4);\n    _out($0,$spec$select,$47);\n    $114 = $4 ^ 65536;\n    _pad_683($0,48,$2,$113,$114);\n    $115 = (($$pre716) - ($9))|0;\n    _out($0,$8,$115);\n    $116 = (($$pre$phi713Z2D) - ($$pre$phi714Z2D))|0;\n    $117 = (($115) + ($116))|0;\n    $118 = (($$0527) - ($117))|0;\n    _pad_683($0,48,$118,0,0);\n    _out($0,$79,$116);\n    $119 = $4 ^ 8192;\n    _pad_683($0,32,$2,$113,$119);\n    $$sink755 = $113;\n    break;\n   }\n   $120 = ($3|0)<(0);\n   $spec$select539 = $120 ? 6 : $3;\n   if ($39) {\n    $121 = $38 * 268435456.0;\n    $122 = HEAP32[$7>>2]|0;\n    $123 = (($122) + -28)|0;\n    HEAP32[$7>>2] = $123;\n    $$3 = $121;$$pr = $123;\n   } else {\n    $$pre = HEAP32[$7>>2]|0;\n    $$3 = $38;$$pr = $$pre;\n   }\n   $124 = ($$pr|0)<(0);\n   $125 = ((($6)) + 288|0);\n   $$0498 = $124 ? $6 : $125;\n   $$1499 = $$0498;$$4 = $$3;\n   while(1) {\n    $126 = (~~(($$4))>>>0);\n    HEAP32[$$1499>>2] = $126;\n    $127 = ((($$1499)) + 4|0);\n    $128 = (+($126>>>0));\n    $129 = $$4 - $128;\n    $130 = $129 * 1.0E+9;\n    $131 = $130 != 0.0;\n    if ($131) {\n     $$1499 = $127;$$4 = $130;\n    } else {\n     break;\n    }\n   }\n   $132 = ($$pr|0)>(0);\n   if ($132) {\n    $$1482683 = $$0498;$$2500682 = $127;$134 = $$pr;\n    while(1) {\n     $133 = ($134|0)<(29);\n     $135 = $133 ? $134 : 29;\n     $$0488669 = ((($$2500682)) + -4|0);\n     $136 = ($$0488669>>>0)<($$1482683>>>0);\n     if ($136) {\n      $$2483 = $$1482683;\n     } else {\n      $$0488671 = $$0488669;$$0497670 = 0;\n      while(1) {\n       $137 = HEAP32[$$0488671>>2]|0;\n       $138 = (_bitshift64Shl(($137|0),0,($135|0))|0);\n       $139 = tempRet0;\n       $140 = (_i64Add(($138|0),($139|0),($$0497670|0),0)|0);\n       $141 = tempRet0;\n       $142 = (___udivdi3(($140|0),($141|0),1000000000,0)|0);\n       $143 = tempRet0;\n       $144 = (___muldi3(($142|0),($143|0),1000000000,0)|0);\n       $145 = tempRet0;\n       $146 = (_i64Subtract(($140|0),($141|0),($144|0),($145|0))|0);\n       $147 = tempRet0;\n       HEAP32[$$0488671>>2] = $146;\n       $$0488 = ((($$0488671)) + -4|0);\n       $148 = ($$0488>>>0)<($$1482683>>>0);\n       if ($148) {\n        break;\n       } else {\n        $$0488671 = $$0488;$$0497670 = $142;\n       }\n      }\n      $149 = ($142|0)==(0);\n      if ($149) {\n       $$2483 = $$1482683;\n      } else {\n       $150 = ((($$1482683)) + -4|0);\n       HEAP32[$150>>2] = $142;\n       $$2483 = $150;\n      }\n     }\n     $151 = ($$2500682>>>0)>($$2483>>>0);\n     L57: do {\n      if ($151) {\n       $$3501676 = $$2500682;\n       while(1) {\n        $153 = ((($$3501676)) + -4|0);\n        $154 = HEAP32[$153>>2]|0;\n        $155 = ($154|0)==(0);\n        if (!($155)) {\n         $$3501$lcssa = $$3501676;\n         break L57;\n        }\n        $152 = ($153>>>0)>($$2483>>>0);\n        if ($152) {\n         $$3501676 = $153;\n        } else {\n         $$3501$lcssa = $153;\n         break;\n        }\n       }\n      } else {\n       $$3501$lcssa = $$2500682;\n      }\n     } while(0);\n     $156 = HEAP32[$7>>2]|0;\n     $157 = (($156) - ($135))|0;\n     HEAP32[$7>>2] = $157;\n     $158 = ($157|0)>(0);\n     if ($158) {\n      $$1482683 = $$2483;$$2500682 = $$3501$lcssa;$134 = $157;\n     } else {\n      $$1482$lcssa = $$2483;$$2500$lcssa = $$3501$lcssa;$$pr564 = $157;\n      break;\n     }\n    }\n   } else {\n    $$1482$lcssa = $$0498;$$2500$lcssa = $127;$$pr564 = $$pr;\n   }\n   $159 = ($$pr564|0)<(0);\n   if ($159) {\n    $160 = (($spec$select539) + 25)|0;\n    $161 = (($160|0) / 9)&-1;\n    $162 = (($161) + 1)|0;\n    $163 = ($42|0)==(102);\n    $$3484663 = $$1482$lcssa;$$4502662 = $$2500$lcssa;$165 = $$pr564;\n    while(1) {\n     $164 = (0 - ($165))|0;\n     $166 = ($164|0)<(9);\n     $167 = $166 ? $164 : 9;\n     $168 = ($$3484663>>>0)<($$4502662>>>0);\n     if ($168) {\n      $172 = 1 << $167;\n      $173 = (($172) + -1)|0;\n      $174 = 1000000000 >>> $167;\n      $$0487657 = 0;$$1489656 = $$3484663;\n      while(1) {\n       $175 = HEAP32[$$1489656>>2]|0;\n       $176 = $175 & $173;\n       $177 = $175 >>> $167;\n       $178 = (($177) + ($$0487657))|0;\n       HEAP32[$$1489656>>2] = $178;\n       $179 = Math_imul($176, $174)|0;\n       $180 = ((($$1489656)) + 4|0);\n       $181 = ($180>>>0)<($$4502662>>>0);\n       if ($181) {\n        $$0487657 = $179;$$1489656 = $180;\n       } else {\n        break;\n       }\n      }\n      $182 = HEAP32[$$3484663>>2]|0;\n      $183 = ($182|0)==(0);\n      $184 = ((($$3484663)) + 4|0);\n      $spec$select540 = $183 ? $184 : $$3484663;\n      $185 = ($179|0)==(0);\n      if ($185) {\n       $$5503 = $$4502662;$spec$select540721 = $spec$select540;\n      } else {\n       $186 = ((($$4502662)) + 4|0);\n       HEAP32[$$4502662>>2] = $179;\n       $$5503 = $186;$spec$select540721 = $spec$select540;\n      }\n     } else {\n      $169 = HEAP32[$$3484663>>2]|0;\n      $170 = ($169|0)==(0);\n      $171 = ((($$3484663)) + 4|0);\n      $spec$select540720 = $170 ? $171 : $$3484663;\n      $$5503 = $$4502662;$spec$select540721 = $spec$select540720;\n     }\n     $187 = $163 ? $$0498 : $spec$select540721;\n     $188 = $$5503;\n     $189 = $187;\n     $190 = (($188) - ($189))|0;\n     $191 = $190 >> 2;\n     $192 = ($191|0)>($162|0);\n     $193 = (($187) + ($162<<2)|0);\n     $spec$select541 = $192 ? $193 : $$5503;\n     $194 = HEAP32[$7>>2]|0;\n     $195 = (($194) + ($167))|0;\n     HEAP32[$7>>2] = $195;\n     $196 = ($195|0)<(0);\n     if ($196) {\n      $$3484663 = $spec$select540721;$$4502662 = $spec$select541;$165 = $195;\n     } else {\n      $$3484$lcssa = $spec$select540721;$$4502$lcssa = $spec$select541;\n      break;\n     }\n    }\n   } else {\n    $$3484$lcssa = $$1482$lcssa;$$4502$lcssa = $$2500$lcssa;\n   }\n   $197 = ($$3484$lcssa>>>0)<($$4502$lcssa>>>0);\n   $198 = $$0498;\n   if ($197) {\n    $199 = $$3484$lcssa;\n    $200 = (($198) - ($199))|0;\n    $201 = $200 >> 2;\n    $202 = ($201*9)|0;\n    $203 = HEAP32[$$3484$lcssa>>2]|0;\n    $204 = ($203>>>0)<(10);\n    if ($204) {\n     $$1517 = $202;\n    } else {\n     $$0516652 = $202;$$0532651 = 10;\n     while(1) {\n      $205 = ($$0532651*10)|0;\n      $206 = (($$0516652) + 1)|0;\n      $207 = ($203>>>0)<($205>>>0);\n      if ($207) {\n       $$1517 = $206;\n       break;\n      } else {\n       $$0516652 = $206;$$0532651 = $205;\n      }\n     }\n    }\n   } else {\n    $$1517 = 0;\n   }\n   $208 = ($42|0)==(102);\n   $209 = $208 ? 0 : $$1517;\n   $210 = (($spec$select539) - ($209))|0;\n   $211 = ($42|0)==(103);\n   $212 = ($spec$select539|0)!=(0);\n   $213 = $212 & $211;\n   $$neg = $213 << 31 >> 31;\n   $214 = (($210) + ($$neg))|0;\n   $215 = $$4502$lcssa;\n   $216 = (($215) - ($198))|0;\n   $217 = $216 >> 2;\n   $218 = ($217*9)|0;\n   $219 = (($218) + -9)|0;\n   $220 = ($214|0)<($219|0);\n   if ($220) {\n    $221 = ((($$0498)) + 4|0);\n    $222 = (($214) + 9216)|0;\n    $223 = (($222|0) / 9)&-1;\n    $224 = (($223) + -1024)|0;\n    $225 = (($221) + ($224<<2)|0);\n    $226 = ($223*9)|0;\n    $227 = (($222) - ($226))|0;\n    $228 = ($227|0)<(8);\n    if ($228) {\n     $$0529$in646 = $227;$$1533645 = 10;\n     while(1) {\n      $$0529 = (($$0529$in646) + 1)|0;\n      $229 = ($$1533645*10)|0;\n      $230 = ($$0529$in646|0)<(7);\n      if ($230) {\n       $$0529$in646 = $$0529;$$1533645 = $229;\n      } else {\n       $$1533$lcssa = $229;\n       break;\n      }\n     }\n    } else {\n     $$1533$lcssa = 10;\n    }\n    $231 = HEAP32[$225>>2]|0;\n    $232 = (($231>>>0) / ($$1533$lcssa>>>0))&-1;\n    $233 = Math_imul($232, $$1533$lcssa)|0;\n    $234 = (($231) - ($233))|0;\n    $235 = ($234|0)==(0);\n    $236 = ((($225)) + 4|0);\n    $237 = ($236|0)==($$4502$lcssa|0);\n    $or$cond543 = $237 & $235;\n    if ($or$cond543) {\n     $$4492 = $225;$$4520 = $$1517;$$8 = $$3484$lcssa;\n    } else {\n     $238 = $232 & 1;\n     $239 = ($238|0)==(0);\n     $spec$select544 = $239 ? 9007199254740992.0 : 9007199254740994.0;\n     $240 = $$1533$lcssa >>> 1;\n     $241 = ($234>>>0)<($240>>>0);\n     $242 = ($234|0)==($240|0);\n     $or$cond546 = $237 & $242;\n     $spec$select561 = $or$cond546 ? 1.0 : 1.5;\n     $spec$select567 = $241 ? 0.5 : $spec$select561;\n     $243 = ($$0522|0)==(0);\n     if ($243) {\n      $$1467 = $spec$select567;$$1469 = $spec$select544;\n     } else {\n      $244 = HEAP8[$$0523>>0]|0;\n      $245 = ($244<<24>>24)==(45);\n      $246 = - $spec$select544;\n      $247 = - $spec$select567;\n      $spec$select568 = $245 ? $246 : $spec$select544;\n      $spec$select569 = $245 ? $247 : $spec$select567;\n      $$1467 = $spec$select569;$$1469 = $spec$select568;\n     }\n     $248 = (($231) - ($234))|0;\n     HEAP32[$225>>2] = $248;\n     $249 = $$1469 + $$1467;\n     $250 = $249 != $$1469;\n     if ($250) {\n      $251 = (($248) + ($$1533$lcssa))|0;\n      HEAP32[$225>>2] = $251;\n      $252 = ($251>>>0)>(999999999);\n      if ($252) {\n       $$2490638 = $225;$$5486639 = $$3484$lcssa;\n       while(1) {\n        $253 = ((($$2490638)) + -4|0);\n        HEAP32[$$2490638>>2] = 0;\n        $254 = ($253>>>0)<($$5486639>>>0);\n        if ($254) {\n         $255 = ((($$5486639)) + -4|0);\n         HEAP32[$255>>2] = 0;\n         $$6 = $255;\n        } else {\n         $$6 = $$5486639;\n        }\n        $256 = HEAP32[$253>>2]|0;\n        $257 = (($256) + 1)|0;\n        HEAP32[$253>>2] = $257;\n        $258 = ($257>>>0)>(999999999);\n        if ($258) {\n         $$2490638 = $253;$$5486639 = $$6;\n        } else {\n         $$2490$lcssa = $253;$$5486$lcssa = $$6;\n         break;\n        }\n       }\n      } else {\n       $$2490$lcssa = $225;$$5486$lcssa = $$3484$lcssa;\n      }\n      $259 = $$5486$lcssa;\n      $260 = (($198) - ($259))|0;\n      $261 = $260 >> 2;\n      $262 = ($261*9)|0;\n      $263 = HEAP32[$$5486$lcssa>>2]|0;\n      $264 = ($263>>>0)<(10);\n      if ($264) {\n       $$4492 = $$2490$lcssa;$$4520 = $262;$$8 = $$5486$lcssa;\n      } else {\n       $$2518634 = $262;$$2534633 = 10;\n       while(1) {\n        $265 = ($$2534633*10)|0;\n        $266 = (($$2518634) + 1)|0;\n        $267 = ($263>>>0)<($265>>>0);\n        if ($267) {\n         $$4492 = $$2490$lcssa;$$4520 = $266;$$8 = $$5486$lcssa;\n         break;\n        } else {\n         $$2518634 = $266;$$2534633 = $265;\n        }\n       }\n      }\n     } else {\n      $$4492 = $225;$$4520 = $$1517;$$8 = $$3484$lcssa;\n     }\n    }\n    $268 = ((($$4492)) + 4|0);\n    $269 = ($$4502$lcssa>>>0)>($268>>>0);\n    $spec$select547 = $269 ? $268 : $$4502$lcssa;\n    $$5521 = $$4520;$$8506 = $spec$select547;$$9 = $$8;\n   } else {\n    $$5521 = $$1517;$$8506 = $$4502$lcssa;$$9 = $$3484$lcssa;\n   }\n   $270 = (0 - ($$5521))|0;\n   $271 = ($$8506>>>0)>($$9>>>0);\n   L109: do {\n    if ($271) {\n     $$9507625 = $$8506;\n     while(1) {\n      $273 = ((($$9507625)) + -4|0);\n      $274 = HEAP32[$273>>2]|0;\n      $275 = ($274|0)==(0);\n      if (!($275)) {\n       $$9507$lcssa = $$9507625;$$lcssa583 = 1;\n       break L109;\n      }\n      $272 = ($273>>>0)>($$9>>>0);\n      if ($272) {\n       $$9507625 = $273;\n      } else {\n       $$9507$lcssa = $273;$$lcssa583 = 0;\n       break;\n      }\n     }\n    } else {\n     $$9507$lcssa = $$8506;$$lcssa583 = 0;\n    }\n   } while(0);\n   do {\n    if ($211) {\n     $not$ = $212 ^ 1;\n     $276 = $not$&1;\n     $spec$select548 = (($spec$select539) + ($276))|0;\n     $277 = ($spec$select548|0)>($$5521|0);\n     $278 = ($$5521|0)>(-5);\n     $or$cond6 = $277 & $278;\n     if ($or$cond6) {\n      $279 = (($5) + -1)|0;\n      $$neg571 = (($spec$select548) + -1)|0;\n      $280 = (($$neg571) - ($$5521))|0;\n      $$0479 = $279;$$2476 = $280;\n     } else {\n      $281 = (($5) + -2)|0;\n      $282 = (($spec$select548) + -1)|0;\n      $$0479 = $281;$$2476 = $282;\n     }\n     $283 = $4 & 8;\n     $284 = ($283|0)==(0);\n     if ($284) {\n      if ($$lcssa583) {\n       $285 = ((($$9507$lcssa)) + -4|0);\n       $286 = HEAP32[$285>>2]|0;\n       $287 = ($286|0)==(0);\n       if ($287) {\n        $$2531 = 9;\n       } else {\n        $288 = (($286>>>0) % 10)&-1;\n        $289 = ($288|0)==(0);\n        if ($289) {\n         $$1530621 = 0;$$3535620 = 10;\n         while(1) {\n          $290 = ($$3535620*10)|0;\n          $291 = (($$1530621) + 1)|0;\n          $292 = (($286>>>0) % ($290>>>0))&-1;\n          $293 = ($292|0)==(0);\n          if ($293) {\n           $$1530621 = $291;$$3535620 = $290;\n          } else {\n           $$2531 = $291;\n           break;\n          }\n         }\n        } else {\n         $$2531 = 0;\n        }\n       }\n      } else {\n       $$2531 = 9;\n      }\n      $294 = $$0479 | 32;\n      $295 = ($294|0)==(102);\n      $296 = $$9507$lcssa;\n      $297 = (($296) - ($198))|0;\n      $298 = $297 >> 2;\n      $299 = ($298*9)|0;\n      $300 = (($299) + -9)|0;\n      if ($295) {\n       $301 = (($300) - ($$2531))|0;\n       $302 = ($301|0)>(0);\n       $spec$select549 = $302 ? $301 : 0;\n       $303 = ($$2476|0)<($spec$select549|0);\n       $spec$select562 = $303 ? $$2476 : $spec$select549;\n       $$1480 = $$0479;$$3477 = $spec$select562;\n       break;\n      } else {\n       $304 = (($300) + ($$5521))|0;\n       $305 = (($304) - ($$2531))|0;\n       $306 = ($305|0)>(0);\n       $spec$select551 = $306 ? $305 : 0;\n       $307 = ($$2476|0)<($spec$select551|0);\n       $spec$select563 = $307 ? $$2476 : $spec$select551;\n       $$1480 = $$0479;$$3477 = $spec$select563;\n       break;\n      }\n     } else {\n      $$1480 = $$0479;$$3477 = $$2476;\n     }\n    } else {\n     $$1480 = $5;$$3477 = $spec$select539;\n    }\n   } while(0);\n   $308 = ($$3477|0)!=(0);\n   $309 = $4 >>> 3;\n   $$lobit = $309 & 1;\n   $310 = $308 ? 1 : $$lobit;\n   $311 = $$1480 | 32;\n   $312 = ($311|0)==(102);\n   if ($312) {\n    $313 = ($$5521|0)>(0);\n    $314 = $313 ? $$5521 : 0;\n    $$2515 = 0;$$pn = $314;\n   } else {\n    $315 = ($$5521|0)<(0);\n    $316 = $315 ? $270 : $$5521;\n    $317 = ($316|0)<(0);\n    $318 = $317 << 31 >> 31;\n    $319 = (_fmt_u($316,$318,$11)|0);\n    $320 = $11;\n    $321 = $319;\n    $322 = (($320) - ($321))|0;\n    $323 = ($322|0)<(2);\n    if ($323) {\n     $$1514614 = $319;\n     while(1) {\n      $324 = ((($$1514614)) + -1|0);\n      HEAP8[$324>>0] = 48;\n      $325 = $324;\n      $326 = (($320) - ($325))|0;\n      $327 = ($326|0)<(2);\n      if ($327) {\n       $$1514614 = $324;\n      } else {\n       $$1514$lcssa = $324;\n       break;\n      }\n     }\n    } else {\n     $$1514$lcssa = $319;\n    }\n    $328 = $$5521 >> 31;\n    $329 = $328 & 2;\n    $330 = (($329) + 43)|0;\n    $331 = $330&255;\n    $332 = ((($$1514$lcssa)) + -1|0);\n    HEAP8[$332>>0] = $331;\n    $333 = $$1480&255;\n    $334 = ((($$1514$lcssa)) + -2|0);\n    HEAP8[$334>>0] = $333;\n    $335 = $334;\n    $336 = (($320) - ($335))|0;\n    $$2515 = $334;$$pn = $336;\n   }\n   $337 = (($$0522) + 1)|0;\n   $338 = (($337) + ($$3477))|0;\n   $$1528 = (($338) + ($310))|0;\n   $339 = (($$1528) + ($$pn))|0;\n   _pad_683($0,32,$2,$339,$4);\n   _out($0,$$0523,$$0522);\n   $340 = $4 ^ 65536;\n   _pad_683($0,48,$2,$339,$340);\n   if ($312) {\n    $341 = ($$9>>>0)>($$0498>>>0);\n    $spec$select554 = $341 ? $$0498 : $$9;\n    $342 = ((($8)) + 9|0);\n    $343 = $342;\n    $344 = ((($8)) + 8|0);\n    $$5493603 = $spec$select554;\n    while(1) {\n     $345 = HEAP32[$$5493603>>2]|0;\n     $346 = (_fmt_u($345,0,$342)|0);\n     $347 = ($$5493603|0)==($spec$select554|0);\n     if ($347) {\n      $353 = ($346|0)==($342|0);\n      if ($353) {\n       HEAP8[$344>>0] = 48;\n       $$1465 = $344;\n      } else {\n       $$1465 = $346;\n      }\n     } else {\n      $348 = ($346>>>0)>($8>>>0);\n      if ($348) {\n       $349 = $346;\n       $350 = (($349) - ($9))|0;\n       _memset(($8|0),48,($350|0))|0;\n       $$0464599 = $346;\n       while(1) {\n        $351 = ((($$0464599)) + -1|0);\n        $352 = ($351>>>0)>($8>>>0);\n        if ($352) {\n         $$0464599 = $351;\n        } else {\n         $$1465 = $351;\n         break;\n        }\n       }\n      } else {\n       $$1465 = $346;\n      }\n     }\n     $354 = $$1465;\n     $355 = (($343) - ($354))|0;\n     _out($0,$$1465,$355);\n     $356 = ((($$5493603)) + 4|0);\n     $357 = ($356>>>0)>($$0498>>>0);\n     if ($357) {\n      break;\n     } else {\n      $$5493603 = $356;\n     }\n    }\n    $$not = $308 ^ 1;\n    $358 = $4 & 8;\n    $359 = ($358|0)==(0);\n    $or$cond556 = $359 & $$not;\n    if (!($or$cond556)) {\n     _out($0,18445,1);\n    }\n    $360 = ($356>>>0)<($$9507$lcssa>>>0);\n    $361 = ($$3477|0)>(0);\n    $362 = $360 & $361;\n    if ($362) {\n     $$4478594 = $$3477;$$6494593 = $356;\n     while(1) {\n      $363 = HEAP32[$$6494593>>2]|0;\n      $364 = (_fmt_u($363,0,$342)|0);\n      $365 = ($364>>>0)>($8>>>0);\n      if ($365) {\n       $366 = $364;\n       $367 = (($366) - ($9))|0;\n       _memset(($8|0),48,($367|0))|0;\n       $$0463588 = $364;\n       while(1) {\n        $368 = ((($$0463588)) + -1|0);\n        $369 = ($368>>>0)>($8>>>0);\n        if ($369) {\n         $$0463588 = $368;\n        } else {\n         $$0463$lcssa = $368;\n         break;\n        }\n       }\n      } else {\n       $$0463$lcssa = $364;\n      }\n      $370 = ($$4478594|0)<(9);\n      $371 = $370 ? $$4478594 : 9;\n      _out($0,$$0463$lcssa,$371);\n      $372 = ((($$6494593)) + 4|0);\n      $373 = (($$4478594) + -9)|0;\n      $374 = ($372>>>0)<($$9507$lcssa>>>0);\n      $375 = ($$4478594|0)>(9);\n      $376 = $374 & $375;\n      if ($376) {\n       $$4478594 = $373;$$6494593 = $372;\n      } else {\n       $$4478$lcssa = $373;\n       break;\n      }\n     }\n    } else {\n     $$4478$lcssa = $$3477;\n    }\n    $377 = (($$4478$lcssa) + 9)|0;\n    _pad_683($0,48,$377,9,0);\n   } else {\n    $378 = ((($$9)) + 4|0);\n    $spec$select557 = $$lcssa583 ? $$9507$lcssa : $378;\n    $379 = ($$9>>>0)<($spec$select557>>>0);\n    $380 = ($$3477|0)>(-1);\n    $381 = $379 & $380;\n    if ($381) {\n     $382 = ((($8)) + 9|0);\n     $383 = $4 & 8;\n     $384 = ($383|0)==(0);\n     $385 = $382;\n     $386 = (0 - ($9))|0;\n     $387 = ((($8)) + 8|0);\n     $$5609 = $$3477;$$7495608 = $$9;\n     while(1) {\n      $388 = HEAP32[$$7495608>>2]|0;\n      $389 = (_fmt_u($388,0,$382)|0);\n      $390 = ($389|0)==($382|0);\n      if ($390) {\n       HEAP8[$387>>0] = 48;\n       $$0 = $387;\n      } else {\n       $$0 = $389;\n      }\n      $391 = ($$7495608|0)==($$9|0);\n      do {\n       if ($391) {\n        $395 = ((($$0)) + 1|0);\n        _out($0,$$0,1);\n        $396 = ($$5609|0)<(1);\n        $or$cond559 = $384 & $396;\n        if ($or$cond559) {\n         $$2 = $395;\n         break;\n        }\n        _out($0,18445,1);\n        $$2 = $395;\n       } else {\n        $392 = ($$0>>>0)>($8>>>0);\n        if (!($392)) {\n         $$2 = $$0;\n         break;\n        }\n        $scevgep707 = (($$0) + ($386)|0);\n        $scevgep707708 = $scevgep707;\n        _memset(($8|0),48,($scevgep707708|0))|0;\n        $$1604 = $$0;\n        while(1) {\n         $393 = ((($$1604)) + -1|0);\n         $394 = ($393>>>0)>($8>>>0);\n         if ($394) {\n          $$1604 = $393;\n         } else {\n          $$2 = $393;\n          break;\n         }\n        }\n       }\n      } while(0);\n      $397 = $$2;\n      $398 = (($385) - ($397))|0;\n      $399 = ($$5609|0)>($398|0);\n      $400 = $399 ? $398 : $$5609;\n      _out($0,$$2,$400);\n      $401 = (($$5609) - ($398))|0;\n      $402 = ((($$7495608)) + 4|0);\n      $403 = ($402>>>0)<($spec$select557>>>0);\n      $404 = ($401|0)>(-1);\n      $405 = $403 & $404;\n      if ($405) {\n       $$5609 = $401;$$7495608 = $402;\n      } else {\n       $$5$lcssa = $401;\n       break;\n      }\n     }\n    } else {\n     $$5$lcssa = $$3477;\n    }\n    $406 = (($$5$lcssa) + 18)|0;\n    _pad_683($0,48,$406,18,0);\n    $407 = $11;\n    $408 = $$2515;\n    $409 = (($407) - ($408))|0;\n    _out($0,$$2515,$409);\n   }\n   $410 = $4 ^ 8192;\n   _pad_683($0,32,$2,$339,$410);\n   $$sink755 = $339;\n  }\n } while(0);\n $411 = ($$sink755|0)<($2|0);\n $$560 = $411 ? $2 : $$sink755;\n STACKTOP = sp;return ($$560|0);\n}\nfunction ___DOUBLE_BITS_684($0) {\n $0 = +$0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAPF64[tempDoublePtr>>3] = $0;$1 = HEAP32[tempDoublePtr>>2]|0;\n $2 = HEAP32[tempDoublePtr+4>>2]|0;\n tempRet0 = ($2);\n return ($1|0);\n}\nfunction _frexpl($0,$1) {\n $0 = +$0;\n $1 = $1|0;\n var $2 = 0.0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = (+_frexp($0,$1));\n return (+$2);\n}\nfunction _frexp($0,$1) {\n $0 = +$0;\n $1 = $1|0;\n var $$0 = 0.0, $$016 = 0.0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0.0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0.0, $9 = 0.0, $storemerge = 0, $trunc$clear = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n HEAPF64[tempDoublePtr>>3] = $0;$2 = HEAP32[tempDoublePtr>>2]|0;\n $3 = HEAP32[tempDoublePtr+4>>2]|0;\n $4 = (_bitshift64Lshr(($2|0),($3|0),52)|0);\n $5 = tempRet0;\n $6 = $4&65535;\n $trunc$clear = $6 & 2047;\n switch ($trunc$clear<<16>>16) {\n case 0:  {\n  $7 = $0 != 0.0;\n  if ($7) {\n   $8 = $0 * 1.8446744073709552E+19;\n   $9 = (+_frexp($8,$1));\n   $10 = HEAP32[$1>>2]|0;\n   $11 = (($10) + -64)|0;\n   $$016 = $9;$storemerge = $11;\n  } else {\n   $$016 = $0;$storemerge = 0;\n  }\n  HEAP32[$1>>2] = $storemerge;\n  $$0 = $$016;\n  break;\n }\n case 2047:  {\n  $$0 = $0;\n  break;\n }\n default: {\n  $12 = $4 & 2047;\n  $13 = (($12) + -1022)|0;\n  HEAP32[$1>>2] = $13;\n  $14 = $3 & -2146435073;\n  $15 = $14 | 1071644672;\n  HEAP32[tempDoublePtr>>2] = $2;HEAP32[tempDoublePtr+4>>2] = $15;$16 = +HEAPF64[tempDoublePtr>>3];\n  $$0 = $16;\n }\n }\n return (+$$0);\n}\nfunction _wcrtomb($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($0|0)==(0|0);\n do {\n  if ($3) {\n   $$0 = 1;\n  } else {\n   $4 = ($1>>>0)<(128);\n   if ($4) {\n    $5 = $1&255;\n    HEAP8[$0>>0] = $5;\n    $$0 = 1;\n    break;\n   }\n   $6 = (___pthread_self_430()|0);\n   $7 = ((($6)) + 188|0);\n   $8 = HEAP32[$7>>2]|0;\n   $9 = HEAP32[$8>>2]|0;\n   $10 = ($9|0)==(0|0);\n   if ($10) {\n    $11 = $1 & -128;\n    $12 = ($11|0)==(57216);\n    if ($12) {\n     $14 = $1&255;\n     HEAP8[$0>>0] = $14;\n     $$0 = 1;\n     break;\n    } else {\n     $13 = (___errno_location()|0);\n     HEAP32[$13>>2] = 84;\n     $$0 = -1;\n     break;\n    }\n   }\n   $15 = ($1>>>0)<(2048);\n   if ($15) {\n    $16 = $1 >>> 6;\n    $17 = $16 | 192;\n    $18 = $17&255;\n    $19 = ((($0)) + 1|0);\n    HEAP8[$0>>0] = $18;\n    $20 = $1 & 63;\n    $21 = $20 | 128;\n    $22 = $21&255;\n    HEAP8[$19>>0] = $22;\n    $$0 = 2;\n    break;\n   }\n   $23 = ($1>>>0)<(55296);\n   $24 = $1 & -8192;\n   $25 = ($24|0)==(57344);\n   $or$cond = $23 | $25;\n   if ($or$cond) {\n    $26 = $1 >>> 12;\n    $27 = $26 | 224;\n    $28 = $27&255;\n    $29 = ((($0)) + 1|0);\n    HEAP8[$0>>0] = $28;\n    $30 = $1 >>> 6;\n    $31 = $30 & 63;\n    $32 = $31 | 128;\n    $33 = $32&255;\n    $34 = ((($0)) + 2|0);\n    HEAP8[$29>>0] = $33;\n    $35 = $1 & 63;\n    $36 = $35 | 128;\n    $37 = $36&255;\n    HEAP8[$34>>0] = $37;\n    $$0 = 3;\n    break;\n   }\n   $38 = (($1) + -65536)|0;\n   $39 = ($38>>>0)<(1048576);\n   if ($39) {\n    $40 = $1 >>> 18;\n    $41 = $40 | 240;\n    $42 = $41&255;\n    $43 = ((($0)) + 1|0);\n    HEAP8[$0>>0] = $42;\n    $44 = $1 >>> 12;\n    $45 = $44 & 63;\n    $46 = $45 | 128;\n    $47 = $46&255;\n    $48 = ((($0)) + 2|0);\n    HEAP8[$43>>0] = $47;\n    $49 = $1 >>> 6;\n    $50 = $49 & 63;\n    $51 = $50 | 128;\n    $52 = $51&255;\n    $53 = ((($0)) + 3|0);\n    HEAP8[$48>>0] = $52;\n    $54 = $1 & 63;\n    $55 = $54 | 128;\n    $56 = $55&255;\n    HEAP8[$53>>0] = $56;\n    $$0 = 4;\n    break;\n   } else {\n    $57 = (___errno_location()|0);\n    HEAP32[$57>>2] = 84;\n    $$0 = -1;\n    break;\n   }\n  }\n } while(0);\n return ($$0|0);\n}\nfunction ___pthread_self_430() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (_pthread_self()|0);\n return ($0|0);\n}\nfunction _pthread_self() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (3196|0);\n}\nfunction ___pthread_self_105() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (_pthread_self()|0);\n return ($0|0);\n}\nfunction ___strerror_l($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$012$lcssa = 0, $$01214 = 0, $$016 = 0, $$113 = 0, $$115 = 0, $$115$ph = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $$016 = 0;\n while(1) {\n  $2 = (18447 + ($$016)|0);\n  $3 = HEAP8[$2>>0]|0;\n  $4 = $3&255;\n  $5 = ($4|0)==($0|0);\n  if ($5) {\n   label = 4;\n   break;\n  }\n  $6 = (($$016) + 1)|0;\n  $7 = ($6|0)==(87);\n  if ($7) {\n   $$115$ph = 87;\n   label = 5;\n   break;\n  } else {\n   $$016 = $6;\n  }\n }\n if ((label|0) == 4) {\n  $8 = ($$016|0)==(0);\n  if ($8) {\n   $$012$lcssa = 18535;\n  } else {\n   $$115$ph = $$016;\n   label = 5;\n  }\n }\n if ((label|0) == 5) {\n  $$01214 = 18535;$$115 = $$115$ph;\n  while(1) {\n   $$113 = $$01214;\n   while(1) {\n    $9 = HEAP8[$$113>>0]|0;\n    $10 = ($9<<24>>24)==(0);\n    $11 = ((($$113)) + 1|0);\n    if ($10) {\n     break;\n    } else {\n     $$113 = $11;\n    }\n   }\n   $12 = (($$115) + -1)|0;\n   $13 = ($12|0)==(0);\n   if ($13) {\n    $$012$lcssa = $11;\n    break;\n   } else {\n    $$01214 = $11;$$115 = $12;\n   }\n  }\n }\n $14 = ((($1)) + 20|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = (___lctrans($$012$lcssa,$15)|0);\n return ($16|0);\n}\nfunction ___lctrans($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = (___lctrans_impl($0,$1)|0);\n return ($2|0);\n}\nfunction ___lctrans_impl($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$0 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = ($1|0)==(0|0);\n if ($2) {\n  $$0 = 0;\n } else {\n  $3 = HEAP32[$1>>2]|0;\n  $4 = ((($1)) + 4|0);\n  $5 = HEAP32[$4>>2]|0;\n  $6 = (___mo_lookup($3,$5,$0)|0);\n  $$0 = $6;\n }\n $7 = ($$0|0)==(0|0);\n $8 = $7 ? $0 : $$0;\n return ($8|0);\n}\nfunction ___mo_lookup($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$090 = 0, $$094 = 0, $$191 = 0, $$195 = 0, $$4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;\n var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;\n var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond102 = 0, $or$cond104 = 0, $spec$select = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = HEAP32[$0>>2]|0;\n $4 = (($3) + 1794895138)|0;\n $5 = ((($0)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (_swapc($6,$4)|0);\n $8 = ((($0)) + 12|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = (_swapc($9,$4)|0);\n $11 = ((($0)) + 16|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = (_swapc($12,$4)|0);\n $14 = $1 >>> 2;\n $15 = ($7>>>0)<($14>>>0);\n L1: do {\n  if ($15) {\n   $16 = $7 << 2;\n   $17 = (($1) - ($16))|0;\n   $18 = ($10>>>0)<($17>>>0);\n   $19 = ($13>>>0)<($17>>>0);\n   $or$cond = $18 & $19;\n   if ($or$cond) {\n    $20 = $13 | $10;\n    $21 = $20 & 3;\n    $22 = ($21|0)==(0);\n    if ($22) {\n     $23 = $10 >>> 2;\n     $24 = $13 >>> 2;\n     $$090 = 0;$$094 = $7;\n     while(1) {\n      $25 = $$094 >>> 1;\n      $26 = (($$090) + ($25))|0;\n      $27 = $26 << 1;\n      $28 = (($27) + ($23))|0;\n      $29 = (($0) + ($28<<2)|0);\n      $30 = HEAP32[$29>>2]|0;\n      $31 = (_swapc($30,$4)|0);\n      $32 = (($28) + 1)|0;\n      $33 = (($0) + ($32<<2)|0);\n      $34 = HEAP32[$33>>2]|0;\n      $35 = (_swapc($34,$4)|0);\n      $36 = ($35>>>0)<($1>>>0);\n      $37 = (($1) - ($35))|0;\n      $38 = ($31>>>0)<($37>>>0);\n      $or$cond102 = $36 & $38;\n      if (!($or$cond102)) {\n       $$4 = 0;\n       break L1;\n      }\n      $39 = (($35) + ($31))|0;\n      $40 = (($0) + ($39)|0);\n      $41 = HEAP8[$40>>0]|0;\n      $42 = ($41<<24>>24)==(0);\n      if (!($42)) {\n       $$4 = 0;\n       break L1;\n      }\n      $43 = (($0) + ($35)|0);\n      $44 = (_strcmp($2,$43)|0);\n      $45 = ($44|0)==(0);\n      if ($45) {\n       break;\n      }\n      $62 = ($$094|0)==(1);\n      $63 = ($44|0)<(0);\n      if ($62) {\n       $$4 = 0;\n       break L1;\n      }\n      $$191 = $63 ? $$090 : $26;\n      $64 = (($$094) - ($25))|0;\n      $$195 = $63 ? $25 : $64;\n      $$090 = $$191;$$094 = $$195;\n     }\n     $46 = (($27) + ($24))|0;\n     $47 = (($0) + ($46<<2)|0);\n     $48 = HEAP32[$47>>2]|0;\n     $49 = (_swapc($48,$4)|0);\n     $50 = (($46) + 1)|0;\n     $51 = (($0) + ($50<<2)|0);\n     $52 = HEAP32[$51>>2]|0;\n     $53 = (_swapc($52,$4)|0);\n     $54 = ($53>>>0)<($1>>>0);\n     $55 = (($1) - ($53))|0;\n     $56 = ($49>>>0)<($55>>>0);\n     $or$cond104 = $54 & $56;\n     if ($or$cond104) {\n      $57 = (($0) + ($53)|0);\n      $58 = (($53) + ($49))|0;\n      $59 = (($0) + ($58)|0);\n      $60 = HEAP8[$59>>0]|0;\n      $61 = ($60<<24>>24)==(0);\n      $spec$select = $61 ? $57 : 0;\n      $$4 = $spec$select;\n     } else {\n      $$4 = 0;\n     }\n    } else {\n     $$4 = 0;\n    }\n   } else {\n    $$4 = 0;\n   }\n  } else {\n   $$4 = 0;\n  }\n } while(0);\n return ($$4|0);\n}\nfunction _swapc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $spec$select = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = ($1|0)==(0);\n $3 = (_llvm_bswap_i32(($0|0))|0);\n $spec$select = $2 ? $0 : $3;\n return ($spec$select|0);\n}\nfunction ___fwritex($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$03846 = 0, $$042 = 0, $$1 = 0, $$139 = 0, $$141 = 0, $$143 = 0, $$pre = 0, $$pre48 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0;\n var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ((($2)) + 16|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ($4|0)==(0|0);\n if ($5) {\n  $7 = (___towrite($2)|0);\n  $8 = ($7|0)==(0);\n  if ($8) {\n   $$pre = HEAP32[$3>>2]|0;\n   $12 = $$pre;\n   label = 5;\n  } else {\n   $$1 = 0;\n  }\n } else {\n  $6 = $4;\n  $12 = $6;\n  label = 5;\n }\n L5: do {\n  if ((label|0) == 5) {\n   $9 = ((($2)) + 20|0);\n   $10 = HEAP32[$9>>2]|0;\n   $11 = (($12) - ($10))|0;\n   $13 = ($11>>>0)<($1>>>0);\n   $14 = $10;\n   if ($13) {\n    $15 = ((($2)) + 36|0);\n    $16 = HEAP32[$15>>2]|0;\n    $17 = (FUNCTION_TABLE_iiii[$16 & 255]($2,$0,$1)|0);\n    $$1 = $17;\n    break;\n   }\n   $18 = ((($2)) + 75|0);\n   $19 = HEAP8[$18>>0]|0;\n   $20 = ($19<<24>>24)<(0);\n   $21 = ($1|0)==(0);\n   $or$cond = $20 | $21;\n   L10: do {\n    if ($or$cond) {\n     $$139 = 0;$$141 = $0;$$143 = $1;$32 = $14;\n    } else {\n     $$03846 = $1;\n     while(1) {\n      $23 = (($$03846) + -1)|0;\n      $24 = (($0) + ($23)|0);\n      $25 = HEAP8[$24>>0]|0;\n      $26 = ($25<<24>>24)==(10);\n      if ($26) {\n       break;\n      }\n      $22 = ($23|0)==(0);\n      if ($22) {\n       $$139 = 0;$$141 = $0;$$143 = $1;$32 = $14;\n       break L10;\n      } else {\n       $$03846 = $23;\n      }\n     }\n     $27 = ((($2)) + 36|0);\n     $28 = HEAP32[$27>>2]|0;\n     $29 = (FUNCTION_TABLE_iiii[$28 & 255]($2,$0,$$03846)|0);\n     $30 = ($29>>>0)<($$03846>>>0);\n     if ($30) {\n      $$1 = $29;\n      break L5;\n     }\n     $31 = (($0) + ($$03846)|0);\n     $$042 = (($1) - ($$03846))|0;\n     $$pre48 = HEAP32[$9>>2]|0;\n     $$139 = $$03846;$$141 = $31;$$143 = $$042;$32 = $$pre48;\n    }\n   } while(0);\n   (_memcpy(($32|0),($$141|0),($$143|0))|0);\n   $33 = HEAP32[$9>>2]|0;\n   $34 = (($33) + ($$143)|0);\n   HEAP32[$9>>2] = $34;\n   $35 = (($$139) + ($$143))|0;\n   $$1 = $35;\n  }\n } while(0);\n return ($$1|0);\n}\nfunction ___towrite($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 74|0);\n $2 = HEAP8[$1>>0]|0;\n $3 = $2 << 24 >> 24;\n $4 = (($3) + 255)|0;\n $5 = $4 | $3;\n $6 = $5&255;\n HEAP8[$1>>0] = $6;\n $7 = HEAP32[$0>>2]|0;\n $8 = $7 & 8;\n $9 = ($8|0)==(0);\n if ($9) {\n  $11 = ((($0)) + 8|0);\n  HEAP32[$11>>2] = 0;\n  $12 = ((($0)) + 4|0);\n  HEAP32[$12>>2] = 0;\n  $13 = ((($0)) + 44|0);\n  $14 = HEAP32[$13>>2]|0;\n  $15 = ((($0)) + 28|0);\n  HEAP32[$15>>2] = $14;\n  $16 = ((($0)) + 20|0);\n  HEAP32[$16>>2] = $14;\n  $17 = $14;\n  $18 = ((($0)) + 48|0);\n  $19 = HEAP32[$18>>2]|0;\n  $20 = (($17) + ($19)|0);\n  $21 = ((($0)) + 16|0);\n  HEAP32[$21>>2] = $20;\n  $$0 = 0;\n } else {\n  $10 = $7 | 32;\n  HEAP32[$0>>2] = $10;\n  $$0 = -1;\n }\n return ($$0|0);\n}\nfunction _strlen($0) {\n $0 = $0|0;\n var $$0 = 0, $$014 = 0, $$015$lcssa = 0, $$01518 = 0, $$1$lcssa = 0, $$pn = 0, $$pn29 = 0, $$pre = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;\n var $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = $0;\n $2 = $1 & 3;\n $3 = ($2|0)==(0);\n L1: do {\n  if ($3) {\n   $$015$lcssa = $0;\n   label = 5;\n  } else {\n   $$01518 = $0;$22 = $1;\n   while(1) {\n    $4 = HEAP8[$$01518>>0]|0;\n    $5 = ($4<<24>>24)==(0);\n    if ($5) {\n     $$pn = $22;\n     break L1;\n    }\n    $6 = ((($$01518)) + 1|0);\n    $7 = $6;\n    $8 = $7 & 3;\n    $9 = ($8|0)==(0);\n    if ($9) {\n     $$015$lcssa = $6;\n     label = 5;\n     break;\n    } else {\n     $$01518 = $6;$22 = $7;\n    }\n   }\n  }\n } while(0);\n if ((label|0) == 5) {\n  $$0 = $$015$lcssa;\n  while(1) {\n   $10 = HEAP32[$$0>>2]|0;\n   $11 = (($10) + -16843009)|0;\n   $12 = $10 & -2139062144;\n   $13 = $12 ^ -2139062144;\n   $14 = $13 & $11;\n   $15 = ($14|0)==(0);\n   $16 = ((($$0)) + 4|0);\n   if ($15) {\n    $$0 = $16;\n   } else {\n    break;\n   }\n  }\n  $17 = $10&255;\n  $18 = ($17<<24>>24)==(0);\n  if ($18) {\n   $$1$lcssa = $$0;\n  } else {\n   $$pn29 = $$0;\n   while(1) {\n    $19 = ((($$pn29)) + 1|0);\n    $$pre = HEAP8[$19>>0]|0;\n    $20 = ($$pre<<24>>24)==(0);\n    if ($20) {\n     $$1$lcssa = $19;\n     break;\n    } else {\n     $$pn29 = $19;\n    }\n   }\n  }\n  $21 = $$1$lcssa;\n  $$pn = $21;\n }\n $$014 = (($$pn) - ($1))|0;\n return ($$014|0);\n}\nfunction ___strdup($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (_strlen($0)|0);\n $2 = (($1) + 1)|0;\n $3 = (_malloc($2)|0);\n $4 = ($3|0)==(0|0);\n if ($4) {\n  $$0 = 0;\n } else {\n  $5 = (_memcpy(($3|0),($0|0),($2|0))|0);\n  $$0 = $5;\n }\n return ($$0|0);\n}\nfunction ___overflow($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$0 = 0, $$pre = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = sp;\n $3 = $1&255;\n HEAP8[$2>>0] = $3;\n $4 = ((($0)) + 16|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ($5|0)==(0|0);\n if ($6) {\n  $7 = (___towrite($0)|0);\n  $8 = ($7|0)==(0);\n  if ($8) {\n   $$pre = HEAP32[$4>>2]|0;\n   $12 = $$pre;\n   label = 4;\n  } else {\n   $$0 = -1;\n  }\n } else {\n  $12 = $5;\n  label = 4;\n }\n do {\n  if ((label|0) == 4) {\n   $9 = ((($0)) + 20|0);\n   $10 = HEAP32[$9>>2]|0;\n   $11 = ($10>>>0)<($12>>>0);\n   if ($11) {\n    $13 = $1 & 255;\n    $14 = ((($0)) + 75|0);\n    $15 = HEAP8[$14>>0]|0;\n    $16 = $15 << 24 >> 24;\n    $17 = ($13|0)==($16|0);\n    if (!($17)) {\n     $18 = ((($10)) + 1|0);\n     HEAP32[$9>>2] = $18;\n     HEAP8[$10>>0] = $3;\n     $$0 = $13;\n     break;\n    }\n   }\n   $19 = ((($0)) + 36|0);\n   $20 = HEAP32[$19>>2]|0;\n   $21 = (FUNCTION_TABLE_iiii[$20 & 255]($0,$2,1)|0);\n   $22 = ($21|0)==(1);\n   if ($22) {\n    $23 = HEAP8[$2>>0]|0;\n    $24 = $23&255;\n    $$0 = $24;\n   } else {\n    $$0 = -1;\n   }\n  }\n } while(0);\n STACKTOP = sp;return ($$0|0);\n}\nfunction ___ofl_lock() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n ___lock((21856|0));\n return (21864|0);\n}\nfunction ___ofl_unlock() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n ___unlock((21856|0));\n return;\n}\nfunction _fflush($0) {\n $0 = $0|0;\n var $$0 = 0, $$023 = 0, $$02325 = 0, $$02327 = 0, $$024$lcssa = 0, $$02426 = 0, $$1 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $phitmp = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0|0)==(0|0);\n do {\n  if ($1) {\n   $8 = HEAP32[798]|0;\n   $9 = ($8|0)==(0|0);\n   if ($9) {\n    $29 = 0;\n   } else {\n    $10 = HEAP32[798]|0;\n    $11 = (_fflush($10)|0);\n    $29 = $11;\n   }\n   $12 = (___ofl_lock()|0);\n   $$02325 = HEAP32[$12>>2]|0;\n   $13 = ($$02325|0)==(0|0);\n   if ($13) {\n    $$024$lcssa = $29;\n   } else {\n    $$02327 = $$02325;$$02426 = $29;\n    while(1) {\n     $14 = ((($$02327)) + 76|0);\n     $15 = HEAP32[$14>>2]|0;\n     $16 = ($15|0)>(-1);\n     if ($16) {\n      $17 = (___lockfile($$02327)|0);\n      $26 = $17;\n     } else {\n      $26 = 0;\n     }\n     $18 = ((($$02327)) + 20|0);\n     $19 = HEAP32[$18>>2]|0;\n     $20 = ((($$02327)) + 28|0);\n     $21 = HEAP32[$20>>2]|0;\n     $22 = ($19>>>0)>($21>>>0);\n     if ($22) {\n      $23 = (___fflush_unlocked($$02327)|0);\n      $24 = $23 | $$02426;\n      $$1 = $24;\n     } else {\n      $$1 = $$02426;\n     }\n     $25 = ($26|0)==(0);\n     if (!($25)) {\n      ___unlockfile($$02327);\n     }\n     $27 = ((($$02327)) + 56|0);\n     $$023 = HEAP32[$27>>2]|0;\n     $28 = ($$023|0)==(0|0);\n     if ($28) {\n      $$024$lcssa = $$1;\n      break;\n     } else {\n      $$02327 = $$023;$$02426 = $$1;\n     }\n    }\n   }\n   ___ofl_unlock();\n   $$0 = $$024$lcssa;\n  } else {\n   $2 = ((($0)) + 76|0);\n   $3 = HEAP32[$2>>2]|0;\n   $4 = ($3|0)>(-1);\n   if (!($4)) {\n    $5 = (___fflush_unlocked($0)|0);\n    $$0 = $5;\n    break;\n   }\n   $6 = (___lockfile($0)|0);\n   $phitmp = ($6|0)==(0);\n   $7 = (___fflush_unlocked($0)|0);\n   if ($phitmp) {\n    $$0 = $7;\n   } else {\n    ___unlockfile($0);\n    $$0 = $7;\n   }\n  }\n } while(0);\n return ($$0|0);\n}\nfunction ___fflush_unlocked($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 20|0);\n $2 = HEAP32[$1>>2]|0;\n $3 = ((($0)) + 28|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ($2>>>0)>($4>>>0);\n if ($5) {\n  $6 = ((($0)) + 36|0);\n  $7 = HEAP32[$6>>2]|0;\n  (FUNCTION_TABLE_iiii[$7 & 255]($0,0,0)|0);\n  $8 = HEAP32[$1>>2]|0;\n  $9 = ($8|0)==(0|0);\n  if ($9) {\n   $$0 = -1;\n  } else {\n   label = 3;\n  }\n } else {\n  label = 3;\n }\n if ((label|0) == 3) {\n  $10 = ((($0)) + 4|0);\n  $11 = HEAP32[$10>>2]|0;\n  $12 = ((($0)) + 8|0);\n  $13 = HEAP32[$12>>2]|0;\n  $14 = ($11>>>0)<($13>>>0);\n  if ($14) {\n   $15 = $11;\n   $16 = $13;\n   $17 = (($15) - ($16))|0;\n   $18 = ((($0)) + 40|0);\n   $19 = HEAP32[$18>>2]|0;\n   (FUNCTION_TABLE_iiii[$19 & 255]($0,$17,1)|0);\n  }\n  $20 = ((($0)) + 16|0);\n  HEAP32[$20>>2] = 0;\n  HEAP32[$3>>2] = 0;\n  HEAP32[$1>>2] = 0;\n  HEAP32[$12>>2] = 0;\n  HEAP32[$10>>2] = 0;\n  $$0 = 0;\n }\n return ($$0|0);\n}\nfunction _fputc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = ((($1)) + 76|0);\n $3 = HEAP32[$2>>2]|0;\n $4 = ($3|0)<(0);\n if ($4) {\n  label = 3;\n } else {\n  $5 = (___lockfile($1)|0);\n  $6 = ($5|0)==(0);\n  if ($6) {\n   label = 3;\n  } else {\n   $20 = $0&255;\n   $21 = $0 & 255;\n   $22 = ((($1)) + 75|0);\n   $23 = HEAP8[$22>>0]|0;\n   $24 = $23 << 24 >> 24;\n   $25 = ($21|0)==($24|0);\n   if ($25) {\n    label = 10;\n   } else {\n    $26 = ((($1)) + 20|0);\n    $27 = HEAP32[$26>>2]|0;\n    $28 = ((($1)) + 16|0);\n    $29 = HEAP32[$28>>2]|0;\n    $30 = ($27>>>0)<($29>>>0);\n    if ($30) {\n     $31 = ((($27)) + 1|0);\n     HEAP32[$26>>2] = $31;\n     HEAP8[$27>>0] = $20;\n     $33 = $21;\n    } else {\n     label = 10;\n    }\n   }\n   if ((label|0) == 10) {\n    $32 = (___overflow($1,$0)|0);\n    $33 = $32;\n   }\n   ___unlockfile($1);\n   $$0 = $33;\n  }\n }\n do {\n  if ((label|0) == 3) {\n   $7 = $0&255;\n   $8 = $0 & 255;\n   $9 = ((($1)) + 75|0);\n   $10 = HEAP8[$9>>0]|0;\n   $11 = $10 << 24 >> 24;\n   $12 = ($8|0)==($11|0);\n   if (!($12)) {\n    $13 = ((($1)) + 20|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = ((($1)) + 16|0);\n    $16 = HEAP32[$15>>2]|0;\n    $17 = ($14>>>0)<($16>>>0);\n    if ($17) {\n     $18 = ((($14)) + 1|0);\n     HEAP32[$13>>2] = $18;\n     HEAP8[$14>>0] = $7;\n     $$0 = $8;\n     break;\n    }\n   }\n   $19 = (___overflow($1,$0)|0);\n   $$0 = $19;\n  }\n } while(0);\n return ($$0|0);\n}\nfunction __ZNSt3__217bad_function_callD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNSt3__217bad_function_callD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZNSt3__217bad_function_callD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNKSt3__217bad_function_call4whatEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (20339|0);\n}\nfunction __ZNSt3__214__shared_countD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNSt3__214__shared_countD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _llvm_trap();\n // unreachable;\n}\nfunction __ZNSt3__219__shared_weak_countD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _llvm_trap();\n // unreachable;\n}\nfunction __ZNKSt3__219__shared_weak_count13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZNSt3__219__shared_weak_count14__release_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 8|0);\n $2 = HEAP32[$1>>2]|0;\n $3 = ($2|0)==(0);\n if ($3) {\n  $4 = HEAP32[$0>>2]|0;\n  $5 = ((($4)) + 16|0);\n  $6 = HEAP32[$5>>2]|0;\n  FUNCTION_TABLE_vi[$6 & 511]($0);\n } else {\n  $7 = HEAP32[$1>>2]|0;\n  $8 = (($7) + -1)|0;\n  HEAP32[$1>>2] = $8;\n  $9 = ($7|0)==(0);\n  if ($9) {\n   $10 = HEAP32[$0>>2]|0;\n   $11 = ((($10)) + 16|0);\n   $12 = HEAP32[$11>>2]|0;\n   FUNCTION_TABLE_vi[$12 & 511]($0);\n  }\n }\n return;\n}\nfunction __ZNSt3__25mutex4lockEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (_pthread_mutex_lock(($0|0))|0);\n $2 = ($1|0)==(0);\n if ($2) {\n  return;\n } else {\n  __ZNSt3__220__throw_system_errorEiPKc($1,20445);\n  // unreachable;\n }\n}\nfunction __ZNSt3__25mutex6unlockEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n (_pthread_mutex_unlock(($0|0))|0);\n return;\n}\nfunction __Znwj($0) {\n $0 = $0|0;\n var $$lcssa = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $spec$store$select = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0|0)==(0);\n $spec$store$select = $1 ? 1 : $0;\n while(1) {\n  $2 = (_malloc($spec$store$select)|0);\n  $3 = ($2|0)==(0|0);\n  if (!($3)) {\n   $$lcssa = $2;\n   break;\n  }\n  $4 = (__ZSt15get_new_handlerv()|0);\n  $5 = ($4|0)==(0|0);\n  if ($5) {\n   $$lcssa = 0;\n   break;\n  }\n  FUNCTION_TABLE_v[$4 & 511]();\n }\n return ($$lcssa|0);\n}\nfunction __Znaj($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (__Znwj($0)|0);\n return ($1|0);\n}\nfunction __ZdlPv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _free($0);\n return;\n}\nfunction __ZdaPv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZdlPv($0);\n return;\n}\nfunction __ZNSt3__218__libcpp_refstringC2EPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = (_strlen($1)|0);\n $3 = (($2) + 13)|0;\n $4 = (__Znwj($3)|0);\n HEAP32[$4>>2] = $2;\n $5 = ((($4)) + 4|0);\n HEAP32[$5>>2] = $2;\n $6 = ((($4)) + 8|0);\n HEAP32[$6>>2] = 0;\n $7 = (__ZNSt3__215__refstring_imp12_GLOBAL__N_113data_from_repEPNS1_9_Rep_baseE($4)|0);\n $8 = (($2) + 1)|0;\n _memcpy(($7|0),($1|0),($8|0))|0;\n HEAP32[$0>>2] = $7;\n return;\n}\nfunction __ZNSt3__215__refstring_imp12_GLOBAL__N_113data_from_repEPNS1_9_Rep_baseE($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 12|0);\n return ($1|0);\n}\nfunction __ZNSt11logic_errorC2EPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAP32[$0>>2] = (3620);\n $2 = ((($0)) + 4|0);\n __ZNSt3__218__libcpp_refstringC2EPKc($2,$1);\n return;\n}\nfunction __ZNKSt3__218__libcpp_refstring15__uses_refcountEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 1;\n}\nfunction __ZNSt13runtime_errorC2EPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAP32[$0>>2] = (3640);\n $2 = ((($0)) + 4|0);\n __ZNSt3__218__libcpp_refstringC2EPKc($2,$1);\n return;\n}\nfunction __ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _abort();\n // unreachable;\n}\nfunction __ZNKSt3__221__basic_string_commonILb1EE20__throw_out_of_rangeEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _abort();\n // unreachable;\n}\nfunction __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 11|0);\n $2 = HEAP8[$1>>0]|0;\n $3 = ($2<<24>>24)<(0);\n if ($3) {\n  $4 = HEAP32[$0>>2]|0;\n  __ZdlPv($4);\n }\n return;\n}\nfunction __ZNSt3__211char_traitsIcE7compareEPKcS3_j($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($2|0)==(0);\n if ($3) {\n  $$0 = 0;\n } else {\n  $4 = (_memcmp($0,$1,$2)|0);\n  $$0 = $4;\n }\n return ($$0|0);\n}\nfunction __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$sroa$speculated = 0, $$sroa$speculated19 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var $or$cond = 0, $spec$select = 0, $spec$select31 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($0)) + 11|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = ($6<<24>>24)<(0);\n if ($7) {\n  $8 = ((($0)) + 4|0);\n  $9 = HEAP32[$8>>2]|0;\n  $12 = $9;\n } else {\n  $10 = $6&255;\n  $12 = $10;\n }\n $11 = ($12>>>0)<($1>>>0);\n $13 = ($4|0)==(-1);\n $or$cond = $13 | $11;\n if ($or$cond) {\n  __ZNKSt3__221__basic_string_commonILb1EE20__throw_out_of_rangeEv($0);\n  // unreachable;\n }\n $14 = (($12) - ($1))|0;\n $15 = ($14>>>0)<($2>>>0);\n $$sroa$speculated = $15 ? $14 : $2;\n if ($7) {\n  $16 = HEAP32[$0>>2]|0;\n  $18 = $16;\n } else {\n  $18 = $0;\n }\n $17 = (($18) + ($1)|0);\n $19 = ($$sroa$speculated>>>0)>($4>>>0);\n $$sroa$speculated19 = $19 ? $4 : $$sroa$speculated;\n $20 = (__ZNSt3__211char_traitsIcE7compareEPKcS3_j($17,$3,$$sroa$speculated19)|0);\n $21 = ($20|0)==(0);\n if ($21) {\n  $22 = ($$sroa$speculated>>>0)<($4>>>0);\n  $spec$select = $19&1;\n  $spec$select31 = $22 ? -1 : $spec$select;\n  return ($spec$select31|0);\n } else {\n  return ($20|0);\n }\n return (0)|0;\n}\nfunction __ZNSt3__220__throw_system_errorEiPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _abort();\n // unreachable;\n}\nfunction __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _abort();\n // unreachable;\n}\nfunction __ZL25default_terminate_handlerv() {\n var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer10 = 0, $vararg_buffer3 = 0, $vararg_buffer7 = 0, $vararg_ptr1 = 0;\n var $vararg_ptr2 = 0, $vararg_ptr6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $vararg_buffer10 = sp + 32|0;\n $vararg_buffer7 = sp + 24|0;\n $vararg_buffer3 = sp + 16|0;\n $vararg_buffer = sp;\n $0 = sp + 36|0;\n $1 = (___cxa_get_globals_fast()|0);\n $2 = ($1|0)==(0|0);\n if (!($2)) {\n  $3 = HEAP32[$1>>2]|0;\n  $4 = ($3|0)==(0|0);\n  if (!($4)) {\n   $5 = ((($3)) + 80|0);\n   $6 = ((($3)) + 48|0);\n   $7 = $6;\n   $8 = $7;\n   $9 = HEAP32[$8>>2]|0;\n   $10 = (($7) + 4)|0;\n   $11 = $10;\n   $12 = HEAP32[$11>>2]|0;\n   $13 = $9 & -256;\n   $14 = ($13|0)==(1126902528);\n   $15 = ($12|0)==(1129074247);\n   $16 = $14 & $15;\n   if (!($16)) {\n    HEAP32[$vararg_buffer7>>2] = 20599;\n    _abort_message(20549,$vararg_buffer7);\n    // unreachable;\n   }\n   $17 = ($9|0)==(1126902529);\n   $18 = ($12|0)==(1129074247);\n   $19 = $17 & $18;\n   if ($19) {\n    $20 = ((($3)) + 44|0);\n    $21 = HEAP32[$20>>2]|0;\n    $22 = $21;\n   } else {\n    $22 = $5;\n   }\n   HEAP32[$0>>2] = $22;\n   $23 = HEAP32[$3>>2]|0;\n   $24 = ((($23)) + 4|0);\n   $25 = HEAP32[$24>>2]|0;\n   $26 = HEAP32[322]|0;\n   $27 = ((($26)) + 16|0);\n   $28 = HEAP32[$27>>2]|0;\n   $29 = (FUNCTION_TABLE_iiii[$28 & 255](1288,$23,$0)|0);\n   if ($29) {\n    $30 = HEAP32[$0>>2]|0;\n    $31 = HEAP32[$30>>2]|0;\n    $32 = ((($31)) + 8|0);\n    $33 = HEAP32[$32>>2]|0;\n    $34 = (FUNCTION_TABLE_ii[$33 & 255]($30)|0);\n    HEAP32[$vararg_buffer>>2] = 20599;\n    $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n    HEAP32[$vararg_ptr1>>2] = $25;\n    $vararg_ptr2 = ((($vararg_buffer)) + 8|0);\n    HEAP32[$vararg_ptr2>>2] = $34;\n    _abort_message(20463,$vararg_buffer);\n    // unreachable;\n   } else {\n    HEAP32[$vararg_buffer3>>2] = 20599;\n    $vararg_ptr6 = ((($vararg_buffer3)) + 4|0);\n    HEAP32[$vararg_ptr6>>2] = $25;\n    _abort_message(20508,$vararg_buffer3);\n    // unreachable;\n   }\n  }\n }\n _abort_message(20587,$vararg_buffer10);\n // unreachable;\n}\nfunction ___cxa_get_globals_fast() {\n var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n $0 = (_pthread_once((21868|0),(256|0))|0);\n $1 = ($0|0)==(0);\n if ($1) {\n  $2 = HEAP32[5468]|0;\n  $3 = (_pthread_getspecific(($2|0))|0);\n  STACKTOP = sp;return ($3|0);\n } else {\n  _abort_message(20738,$vararg_buffer);\n  // unreachable;\n }\n return (0)|0;\n}\nfunction _abort_message($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = sp;\n HEAP32[$1>>2] = $varargs;\n $2 = HEAP32[735]|0;\n (_vfprintf($2,$0,$1)|0);\n (_fputc(10,$2)|0);\n _abort();\n // unreachable;\n}\nfunction __ZN10__cxxabiv116__shim_type_infoD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZN10__cxxabiv117__class_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv116__shim_type_info5noop1Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNK10__cxxabiv116__shim_type_info5noop2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $$2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var dest = 0, label = 0, sp = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $3 = sp;\n $4 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0);\n if ($4) {\n  $$2 = 1;\n } else {\n  $5 = ($1|0)==(0|0);\n  if ($5) {\n   $$2 = 0;\n  } else {\n   $6 = (___dynamic_cast($1,1312,1296,0)|0);\n   $7 = ($6|0)==(0|0);\n   if ($7) {\n    $$2 = 0;\n   } else {\n    $8 = ((($3)) + 4|0);\n    dest=$8; stop=dest+52|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));\n    HEAP32[$3>>2] = $6;\n    $9 = ((($3)) + 8|0);\n    HEAP32[$9>>2] = $0;\n    $10 = ((($3)) + 12|0);\n    HEAP32[$10>>2] = -1;\n    $11 = ((($3)) + 48|0);\n    HEAP32[$11>>2] = 1;\n    $12 = HEAP32[$6>>2]|0;\n    $13 = ((($12)) + 28|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = HEAP32[$2>>2]|0;\n    FUNCTION_TABLE_viiii[$14 & 255]($6,$3,$15,1);\n    $16 = ((($3)) + 24|0);\n    $17 = HEAP32[$16>>2]|0;\n    $18 = ($17|0)==(1);\n    if ($18) {\n     $19 = ((($3)) + 16|0);\n     $20 = HEAP32[$19>>2]|0;\n     HEAP32[$2>>2] = $20;\n     $$0 = 1;\n    } else {\n     $$0 = 0;\n    }\n    $$2 = $$0;\n   }\n  }\n }\n STACKTOP = sp;return ($$2|0);\n}\nfunction __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $6 = ((($1)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0);\n if ($8) {\n  __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4);\n }\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($1)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0);\n do {\n  if ($7) {\n   __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3);\n  } else {\n   $8 = HEAP32[$1>>2]|0;\n   $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0);\n   if ($9) {\n    $10 = ((($1)) + 16|0);\n    $11 = HEAP32[$10>>2]|0;\n    $12 = ($11|0)==($2|0);\n    if (!($12)) {\n     $13 = ((($1)) + 20|0);\n     $14 = HEAP32[$13>>2]|0;\n     $15 = ($14|0)==($2|0);\n     if (!($15)) {\n      $18 = ((($1)) + 32|0);\n      HEAP32[$18>>2] = $3;\n      HEAP32[$13>>2] = $2;\n      $19 = ((($1)) + 40|0);\n      $20 = HEAP32[$19>>2]|0;\n      $21 = (($20) + 1)|0;\n      HEAP32[$19>>2] = $21;\n      $22 = ((($1)) + 36|0);\n      $23 = HEAP32[$22>>2]|0;\n      $24 = ($23|0)==(1);\n      if ($24) {\n       $25 = ((($1)) + 24|0);\n       $26 = HEAP32[$25>>2]|0;\n       $27 = ($26|0)==(2);\n       if ($27) {\n        $28 = ((($1)) + 54|0);\n        HEAP8[$28>>0] = 1;\n       }\n      }\n      $29 = ((($1)) + 44|0);\n      HEAP32[$29>>2] = 4;\n      break;\n     }\n    }\n    $16 = ($3|0)==(1);\n    if ($16) {\n     $17 = ((($1)) + 32|0);\n     HEAP32[$17>>2] = 1;\n    }\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 8|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0);\n if ($6) {\n  __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3);\n }\n return;\n}\nfunction __ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($0|0)==($1|0);\n return ($3|0);\n}\nfunction __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 16|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ($5|0)==(0|0);\n do {\n  if ($6) {\n   HEAP32[$4>>2] = $2;\n   $7 = ((($1)) + 24|0);\n   HEAP32[$7>>2] = $3;\n   $8 = ((($1)) + 36|0);\n   HEAP32[$8>>2] = 1;\n  } else {\n   $9 = ($5|0)==($2|0);\n   if (!($9)) {\n    $13 = ((($1)) + 36|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = (($14) + 1)|0;\n    HEAP32[$13>>2] = $15;\n    $16 = ((($1)) + 24|0);\n    HEAP32[$16>>2] = 2;\n    $17 = ((($1)) + 54|0);\n    HEAP8[$17>>0] = 1;\n    break;\n   }\n   $10 = ((($1)) + 24|0);\n   $11 = HEAP32[$10>>2]|0;\n   $12 = ($11|0)==(2);\n   if ($12) {\n    HEAP32[$10>>2] = $3;\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 4|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ($5|0)==($2|0);\n if ($6) {\n  $7 = ((($1)) + 28|0);\n  $8 = HEAP32[$7>>2]|0;\n  $9 = ($8|0)==(1);\n  if (!($9)) {\n   HEAP32[$7>>2] = $3;\n  }\n }\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond22 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($1)) + 53|0);\n HEAP8[$5>>0] = 1;\n $6 = ((($1)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = ($7|0)==($3|0);\n do {\n  if ($8) {\n   $9 = ((($1)) + 52|0);\n   HEAP8[$9>>0] = 1;\n   $10 = ((($1)) + 16|0);\n   $11 = HEAP32[$10>>2]|0;\n   $12 = ($11|0)==(0|0);\n   if ($12) {\n    HEAP32[$10>>2] = $2;\n    $13 = ((($1)) + 24|0);\n    HEAP32[$13>>2] = $4;\n    $14 = ((($1)) + 36|0);\n    HEAP32[$14>>2] = 1;\n    $15 = ((($1)) + 48|0);\n    $16 = HEAP32[$15>>2]|0;\n    $17 = ($16|0)==(1);\n    $18 = ($4|0)==(1);\n    $or$cond = $18 & $17;\n    if (!($or$cond)) {\n     break;\n    }\n    $19 = ((($1)) + 54|0);\n    HEAP8[$19>>0] = 1;\n    break;\n   }\n   $20 = ($11|0)==($2|0);\n   if (!($20)) {\n    $30 = ((($1)) + 36|0);\n    $31 = HEAP32[$30>>2]|0;\n    $32 = (($31) + 1)|0;\n    HEAP32[$30>>2] = $32;\n    $33 = ((($1)) + 54|0);\n    HEAP8[$33>>0] = 1;\n    break;\n   }\n   $21 = ((($1)) + 24|0);\n   $22 = HEAP32[$21>>2]|0;\n   $23 = ($22|0)==(2);\n   if ($23) {\n    HEAP32[$21>>2] = $4;\n    $28 = $4;\n   } else {\n    $28 = $22;\n   }\n   $24 = ((($1)) + 48|0);\n   $25 = HEAP32[$24>>2]|0;\n   $26 = ($25|0)==(1);\n   $27 = ($28|0)==(1);\n   $or$cond22 = $26 & $27;\n   if ($or$cond22) {\n    $29 = ((($1)) + 54|0);\n    HEAP8[$29>>0] = 1;\n   }\n  }\n } while(0);\n return;\n}\nfunction ___dynamic_cast($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond28 = 0, $or$cond30 = 0, $or$cond32 = 0, $spec$select = 0, $spec$select33 = 0, dest = 0, label = 0, sp = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $4 = sp;\n $5 = HEAP32[$0>>2]|0;\n $6 = ((($5)) + -8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (($0) + ($7)|0);\n $9 = ((($5)) + -4|0);\n $10 = HEAP32[$9>>2]|0;\n HEAP32[$4>>2] = $2;\n $11 = ((($4)) + 4|0);\n HEAP32[$11>>2] = $0;\n $12 = ((($4)) + 8|0);\n HEAP32[$12>>2] = $1;\n $13 = ((($4)) + 12|0);\n HEAP32[$13>>2] = $3;\n $14 = ((($4)) + 16|0);\n $15 = ((($4)) + 20|0);\n $16 = ((($4)) + 24|0);\n $17 = ((($4)) + 28|0);\n $18 = ((($4)) + 32|0);\n $19 = ((($4)) + 40|0);\n dest=$14; stop=dest+36|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));HEAP16[$14+36>>1]=0|0;HEAP8[$14+38>>0]=0|0;\n $20 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($10,$2,0)|0);\n L1: do {\n  if ($20) {\n   $21 = ((($4)) + 48|0);\n   HEAP32[$21>>2] = 1;\n   $22 = HEAP32[$10>>2]|0;\n   $23 = ((($22)) + 20|0);\n   $24 = HEAP32[$23>>2]|0;\n   FUNCTION_TABLE_viiiiii[$24 & 255]($10,$4,$8,$8,1,0);\n   $25 = HEAP32[$16>>2]|0;\n   $26 = ($25|0)==(1);\n   $spec$select = $26 ? $8 : 0;\n   $$0 = $spec$select;\n  } else {\n   $27 = ((($4)) + 36|0);\n   $28 = HEAP32[$10>>2]|0;\n   $29 = ((($28)) + 24|0);\n   $30 = HEAP32[$29>>2]|0;\n   FUNCTION_TABLE_viiiii[$30 & 255]($10,$4,$8,1,0);\n   $31 = HEAP32[$27>>2]|0;\n   switch ($31|0) {\n   case 0:  {\n    $32 = HEAP32[$19>>2]|0;\n    $33 = ($32|0)==(1);\n    $34 = HEAP32[$17>>2]|0;\n    $35 = ($34|0)==(1);\n    $or$cond = $33 & $35;\n    $36 = HEAP32[$18>>2]|0;\n    $37 = ($36|0)==(1);\n    $or$cond28 = $or$cond & $37;\n    $38 = HEAP32[$15>>2]|0;\n    $spec$select33 = $or$cond28 ? $38 : 0;\n    $$0 = $spec$select33;\n    break L1;\n    break;\n   }\n   case 1:  {\n    break;\n   }\n   default: {\n    $$0 = 0;\n    break L1;\n   }\n   }\n   $39 = HEAP32[$16>>2]|0;\n   $40 = ($39|0)==(1);\n   if (!($40)) {\n    $41 = HEAP32[$19>>2]|0;\n    $42 = ($41|0)==(0);\n    $43 = HEAP32[$17>>2]|0;\n    $44 = ($43|0)==(1);\n    $or$cond30 = $42 & $44;\n    $45 = HEAP32[$18>>2]|0;\n    $46 = ($45|0)==(1);\n    $or$cond32 = $or$cond30 & $46;\n    if (!($or$cond32)) {\n     $$0 = 0;\n     break;\n    }\n   }\n   $47 = HEAP32[$14>>2]|0;\n   $$0 = $47;\n  }\n } while(0);\n STACKTOP = sp;return ($$0|0);\n}\nfunction __ZN10__cxxabiv120__si_class_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $6 = ((($1)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0);\n if ($8) {\n  __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4);\n } else {\n  $9 = ((($0)) + 8|0);\n  $10 = HEAP32[$9>>2]|0;\n  $11 = HEAP32[$10>>2]|0;\n  $12 = ((($11)) + 20|0);\n  $13 = HEAP32[$12>>2]|0;\n  FUNCTION_TABLE_viiiiii[$13 & 255]($10,$1,$2,$3,$4,$5);\n }\n return;\n}\nfunction __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$037$off038 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($1)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0);\n do {\n  if ($7) {\n   __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3);\n  } else {\n   $8 = HEAP32[$1>>2]|0;\n   $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0);\n   if (!($9)) {\n    $44 = ((($0)) + 8|0);\n    $45 = HEAP32[$44>>2]|0;\n    $46 = HEAP32[$45>>2]|0;\n    $47 = ((($46)) + 24|0);\n    $48 = HEAP32[$47>>2]|0;\n    FUNCTION_TABLE_viiiii[$48 & 255]($45,$1,$2,$3,$4);\n    break;\n   }\n   $10 = ((($1)) + 16|0);\n   $11 = HEAP32[$10>>2]|0;\n   $12 = ($11|0)==($2|0);\n   if (!($12)) {\n    $13 = ((($1)) + 20|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = ($14|0)==($2|0);\n    if (!($15)) {\n     $18 = ((($1)) + 32|0);\n     HEAP32[$18>>2] = $3;\n     $19 = ((($1)) + 44|0);\n     $20 = HEAP32[$19>>2]|0;\n     $21 = ($20|0)==(4);\n     if ($21) {\n      break;\n     }\n     $22 = ((($1)) + 52|0);\n     HEAP8[$22>>0] = 0;\n     $23 = ((($1)) + 53|0);\n     HEAP8[$23>>0] = 0;\n     $24 = ((($0)) + 8|0);\n     $25 = HEAP32[$24>>2]|0;\n     $26 = HEAP32[$25>>2]|0;\n     $27 = ((($26)) + 20|0);\n     $28 = HEAP32[$27>>2]|0;\n     FUNCTION_TABLE_viiiiii[$28 & 255]($25,$1,$2,$2,1,$4);\n     $29 = HEAP8[$23>>0]|0;\n     $30 = ($29<<24>>24)==(0);\n     if ($30) {\n      $$037$off038 = 0;\n      label = 11;\n     } else {\n      $31 = HEAP8[$22>>0]|0;\n      $32 = ($31<<24>>24)==(0);\n      if ($32) {\n       $$037$off038 = 1;\n       label = 11;\n      } else {\n       label = 15;\n      }\n     }\n     do {\n      if ((label|0) == 11) {\n       HEAP32[$13>>2] = $2;\n       $33 = ((($1)) + 40|0);\n       $34 = HEAP32[$33>>2]|0;\n       $35 = (($34) + 1)|0;\n       HEAP32[$33>>2] = $35;\n       $36 = ((($1)) + 36|0);\n       $37 = HEAP32[$36>>2]|0;\n       $38 = ($37|0)==(1);\n       if ($38) {\n        $39 = ((($1)) + 24|0);\n        $40 = HEAP32[$39>>2]|0;\n        $41 = ($40|0)==(2);\n        if ($41) {\n         $42 = ((($1)) + 54|0);\n         HEAP8[$42>>0] = 1;\n         if ($$037$off038) {\n          label = 15;\n          break;\n         } else {\n          $43 = 4;\n          break;\n         }\n        }\n       }\n       if ($$037$off038) {\n        label = 15;\n       } else {\n        $43 = 4;\n       }\n      }\n     } while(0);\n     if ((label|0) == 15) {\n      $43 = 3;\n     }\n     HEAP32[$19>>2] = $43;\n     break;\n    }\n   }\n   $16 = ($3|0)==(1);\n   if ($16) {\n    $17 = ((($1)) + 32|0);\n    HEAP32[$17>>2] = 1;\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 8|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0);\n if ($6) {\n  __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3);\n } else {\n  $7 = ((($0)) + 8|0);\n  $8 = HEAP32[$7>>2]|0;\n  $9 = HEAP32[$8>>2]|0;\n  $10 = ((($9)) + 28|0);\n  $11 = HEAP32[$10>>2]|0;\n  FUNCTION_TABLE_viiii[$11 & 255]($8,$1,$2,$3);\n }\n return;\n}\nfunction __ZNSt9type_infoD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZN10__cxxabiv112_GLOBAL__N_110construct_Ev() {\n var $0 = 0, $1 = 0, $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n $0 = (_pthread_key_create((21872|0),(257|0))|0);\n $1 = ($0|0)==(0);\n if ($1) {\n  STACKTOP = sp;return;\n } else {\n  _abort_message(20787,$vararg_buffer);\n  // unreachable;\n }\n}\nfunction __ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n _free($0);\n $1 = HEAP32[5468]|0;\n $2 = (_pthread_setspecific(($1|0),(0|0))|0);\n $3 = ($2|0)==(0);\n if ($3) {\n  STACKTOP = sp;return;\n } else {\n  _abort_message(20837,$vararg_buffer);\n  // unreachable;\n }\n}\nfunction __ZSt9terminatev() {\n var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (___cxa_get_globals_fast()|0);\n $1 = ($0|0)==(0|0);\n if (!($1)) {\n  $2 = HEAP32[$0>>2]|0;\n  $3 = ($2|0)==(0|0);\n  if (!($3)) {\n   $4 = ((($2)) + 48|0);\n   $5 = $4;\n   $6 = $5;\n   $7 = HEAP32[$6>>2]|0;\n   $8 = (($5) + 4)|0;\n   $9 = $8;\n   $10 = HEAP32[$9>>2]|0;\n   $11 = $7 & -256;\n   $12 = ($11|0)==(1126902528);\n   $13 = ($10|0)==(1129074247);\n   $14 = $12 & $13;\n   if ($14) {\n    $15 = ((($2)) + 12|0);\n    $16 = HEAP32[$15>>2]|0;\n    __ZSt11__terminatePFvvE($16);\n    // unreachable;\n   }\n  }\n }\n $17 = (__ZSt13get_terminatev()|0);\n __ZSt11__terminatePFvvE($17);\n // unreachable;\n}\nfunction __ZSt11__terminatePFvvE($0) {\n $0 = $0|0;\n var $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n FUNCTION_TABLE_v[$0 & 511]();\n _abort_message(20890,$vararg_buffer);\n // unreachable;\n}\nfunction __ZSt13get_terminatev() {\n var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP32[877]|0;\n $1 = (($0) + 0)|0;\n HEAP32[877] = $1;\n $2 = $0;\n return ($2|0);\n}\nfunction __ZNSt9exceptionD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNSt9exceptionD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZdlPv($0);\n return;\n}\nfunction __ZNKSt9exception4whatEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (20930|0);\n}\nfunction __ZNSt11logic_errorD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAP32[$0>>2] = (3620);\n $1 = ((($0)) + 4|0);\n __ZNSt3__218__libcpp_refstringD2Ev($1);\n return;\n}\nfunction __ZNSt11logic_errorD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZNSt11logic_errorD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNKSt11logic_error4whatEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 4|0);\n $2 = (__ZNKSt3__218__libcpp_refstring5c_strEv($1)|0);\n return ($2|0);\n}\nfunction __ZNKSt3__218__libcpp_refstring5c_strEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = HEAP32[$0>>2]|0;\n return ($1|0);\n}\nfunction __ZNSt3__218__libcpp_refstringD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (__ZNKSt3__218__libcpp_refstring15__uses_refcountEv($0)|0);\n if ($1) {\n  $2 = HEAP32[$0>>2]|0;\n  $3 = (__ZNSt3__215__refstring_imp12_GLOBAL__N_113rep_from_dataEPKc_238($2)|0);\n  $4 = ((($3)) + 8|0);\n  $5 = HEAP32[$4>>2]|0;\n  $6 = (($5) + -1)|0;\n  HEAP32[$4>>2] = $6;\n  $7 = (($5) + -1)|0;\n  $8 = ($7|0)<(0);\n  if ($8) {\n   __ZdlPv($3);\n  }\n }\n return;\n}\nfunction __ZNSt3__215__refstring_imp12_GLOBAL__N_113rep_from_dataEPKc_238($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + -12|0);\n return ($1|0);\n}\nfunction __ZNSt13runtime_errorD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAP32[$0>>2] = (3640);\n $1 = ((($0)) + 4|0);\n __ZNSt3__218__libcpp_refstringD2Ev($1);\n return;\n}\nfunction __ZNSt13runtime_errorD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZNSt13runtime_errorD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNKSt13runtime_error4whatEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 4|0);\n $2 = (__ZNKSt3__218__libcpp_refstring5c_strEv($1)|0);\n return ($2|0);\n}\nfunction __ZNSt12length_errorD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZNSt11logic_errorD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZN10__cxxabiv123__fundamental_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0);\n return ($3|0);\n}\nfunction __ZN10__cxxabiv119__pointer_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $$4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, dest = 0, label = 0, sp = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $3 = sp;\n $4 = HEAP32[$2>>2]|0;\n $5 = HEAP32[$4>>2]|0;\n HEAP32[$2>>2] = $5;\n $6 = (__ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,0)|0);\n if ($6) {\n  $$4 = 1;\n } else {\n  $7 = ($1|0)==(0|0);\n  if ($7) {\n   $$4 = 0;\n  } else {\n   $8 = (___dynamic_cast($1,1312,1416,0)|0);\n   $9 = ($8|0)==(0|0);\n   if ($9) {\n    $$4 = 0;\n   } else {\n    $10 = ((($8)) + 8|0);\n    $11 = HEAP32[$10>>2]|0;\n    $12 = ((($0)) + 8|0);\n    $13 = HEAP32[$12>>2]|0;\n    $14 = $13 ^ -1;\n    $15 = $11 & $14;\n    $16 = ($15|0)==(0);\n    if ($16) {\n     $17 = ((($0)) + 12|0);\n     $18 = HEAP32[$17>>2]|0;\n     $19 = ((($8)) + 12|0);\n     $20 = HEAP32[$19>>2]|0;\n     $21 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($18,$20,0)|0);\n     if ($21) {\n      $$4 = 1;\n     } else {\n      $22 = HEAP32[$17>>2]|0;\n      $23 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($22,1448,0)|0);\n      if ($23) {\n       $$4 = 1;\n      } else {\n       $24 = HEAP32[$17>>2]|0;\n       $25 = ($24|0)==(0|0);\n       if ($25) {\n        $$4 = 0;\n       } else {\n        $26 = (___dynamic_cast($24,1312,1296,0)|0);\n        $27 = ($26|0)==(0|0);\n        if ($27) {\n         $$4 = 0;\n        } else {\n         $28 = HEAP32[$19>>2]|0;\n         $29 = ($28|0)==(0|0);\n         if ($29) {\n          $$4 = 0;\n         } else {\n          $30 = (___dynamic_cast($28,1312,1296,0)|0);\n          $31 = ($30|0)==(0|0);\n          if ($31) {\n           $$4 = 0;\n          } else {\n           $32 = ((($3)) + 4|0);\n           dest=$32; stop=dest+52|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));\n           HEAP32[$3>>2] = $30;\n           $33 = ((($3)) + 8|0);\n           HEAP32[$33>>2] = $26;\n           $34 = ((($3)) + 12|0);\n           HEAP32[$34>>2] = -1;\n           $35 = ((($3)) + 48|0);\n           HEAP32[$35>>2] = 1;\n           $36 = HEAP32[$30>>2]|0;\n           $37 = ((($36)) + 28|0);\n           $38 = HEAP32[$37>>2]|0;\n           $39 = HEAP32[$2>>2]|0;\n           FUNCTION_TABLE_viiii[$38 & 255]($30,$3,$39,1);\n           $40 = ((($3)) + 24|0);\n           $41 = HEAP32[$40>>2]|0;\n           $42 = ($41|0)==(1);\n           if ($42) {\n            $43 = ((($3)) + 16|0);\n            $44 = HEAP32[$43>>2]|0;\n            HEAP32[$2>>2] = $44;\n            $$0 = 1;\n           } else {\n            $$0 = 0;\n           }\n           $$4 = $$0;\n          }\n         }\n        }\n       }\n      }\n     }\n    } else {\n     $$4 = 0;\n    }\n   }\n  }\n }\n STACKTOP = sp;return ($$4|0);\n}\nfunction __ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0);\n if ($3) {\n  $$0 = 1;\n } else {\n  $4 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($1,1456,0)|0);\n  $$0 = $4;\n }\n return ($$0|0);\n}\nfunction __ZN10__cxxabiv121__vmi_class_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $6 = ((($1)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0);\n if ($8) {\n  __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4);\n } else {\n  $9 = ((($1)) + 52|0);\n  $10 = HEAP8[$9>>0]|0;\n  $11 = ((($1)) + 53|0);\n  $12 = HEAP8[$11>>0]|0;\n  $13 = ((($0)) + 16|0);\n  $14 = ((($0)) + 12|0);\n  $15 = HEAP32[$14>>2]|0;\n  $16 = (((($0)) + 16|0) + ($15<<3)|0);\n  HEAP8[$9>>0] = 0;\n  HEAP8[$11>>0] = 0;\n  __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($13,$1,$2,$3,$4,$5);\n  $17 = ($15|0)>(1);\n  L4: do {\n   if ($17) {\n    $18 = ((($0)) + 24|0);\n    $19 = ((($1)) + 24|0);\n    $20 = ((($0)) + 8|0);\n    $21 = ((($1)) + 54|0);\n    $$0 = $18;\n    while(1) {\n     $22 = HEAP8[$21>>0]|0;\n     $23 = ($22<<24>>24)==(0);\n     if (!($23)) {\n      break L4;\n     }\n     $24 = HEAP8[$9>>0]|0;\n     $25 = ($24<<24>>24)==(0);\n     if ($25) {\n      $31 = HEAP8[$11>>0]|0;\n      $32 = ($31<<24>>24)==(0);\n      if (!($32)) {\n       $33 = HEAP32[$20>>2]|0;\n       $34 = $33 & 1;\n       $35 = ($34|0)==(0);\n       if ($35) {\n        break L4;\n       }\n      }\n     } else {\n      $26 = HEAP32[$19>>2]|0;\n      $27 = ($26|0)==(1);\n      if ($27) {\n       break L4;\n      }\n      $28 = HEAP32[$20>>2]|0;\n      $29 = $28 & 2;\n      $30 = ($29|0)==(0);\n      if ($30) {\n       break L4;\n      }\n     }\n     HEAP8[$9>>0] = 0;\n     HEAP8[$11>>0] = 0;\n     __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($$0,$1,$2,$3,$4,$5);\n     $36 = ((($$0)) + 8|0);\n     $37 = ($36>>>0)<($16>>>0);\n     if ($37) {\n      $$0 = $36;\n     } else {\n      break;\n     }\n    }\n   }\n  } while(0);\n  HEAP8[$9>>0] = $10;\n  HEAP8[$11>>0] = $12;\n }\n return;\n}\nfunction __ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$0 = 0, $$081$off0 = 0, $$084 = 0, $$085$off0 = 0, $$1 = 0, $$182$off0 = 0, $$186$off0 = 0, $$2 = 0, $$283$off0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;\n var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;\n var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($1)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0);\n L1: do {\n  if ($7) {\n   __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3);\n  } else {\n   $8 = HEAP32[$1>>2]|0;\n   $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0);\n   if (!($9)) {\n    $56 = ((($0)) + 16|0);\n    $57 = ((($0)) + 12|0);\n    $58 = HEAP32[$57>>2]|0;\n    $59 = (((($0)) + 16|0) + ($58<<3)|0);\n    __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($56,$1,$2,$3,$4);\n    $60 = ((($0)) + 24|0);\n    $61 = ($58|0)>(1);\n    if (!($61)) {\n     break;\n    }\n    $62 = ((($0)) + 8|0);\n    $63 = HEAP32[$62>>2]|0;\n    $64 = $63 & 2;\n    $65 = ($64|0)==(0);\n    if ($65) {\n     $66 = ((($1)) + 36|0);\n     $67 = HEAP32[$66>>2]|0;\n     $68 = ($67|0)==(1);\n     if (!($68)) {\n      $74 = $63 & 1;\n      $75 = ($74|0)==(0);\n      if ($75) {\n       $86 = ((($1)) + 54|0);\n       $$2 = $60;\n       while(1) {\n        $87 = HEAP8[$86>>0]|0;\n        $88 = ($87<<24>>24)==(0);\n        if (!($88)) {\n         break L1;\n        }\n        $89 = HEAP32[$66>>2]|0;\n        $90 = ($89|0)==(1);\n        if ($90) {\n         break L1;\n        }\n        __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$2,$1,$2,$3,$4);\n        $91 = ((($$2)) + 8|0);\n        $92 = ($91>>>0)<($59>>>0);\n        if ($92) {\n         $$2 = $91;\n        } else {\n         break L1;\n        }\n       }\n      }\n      $76 = ((($1)) + 24|0);\n      $77 = ((($1)) + 54|0);\n      $$1 = $60;\n      while(1) {\n       $78 = HEAP8[$77>>0]|0;\n       $79 = ($78<<24>>24)==(0);\n       if (!($79)) {\n        break L1;\n       }\n       $80 = HEAP32[$66>>2]|0;\n       $81 = ($80|0)==(1);\n       if ($81) {\n        $82 = HEAP32[$76>>2]|0;\n        $83 = ($82|0)==(1);\n        if ($83) {\n         break L1;\n        }\n       }\n       __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$1,$1,$2,$3,$4);\n       $84 = ((($$1)) + 8|0);\n       $85 = ($84>>>0)<($59>>>0);\n       if ($85) {\n        $$1 = $84;\n       } else {\n        break L1;\n       }\n      }\n     }\n    }\n    $69 = ((($1)) + 54|0);\n    $$0 = $60;\n    while(1) {\n     $70 = HEAP8[$69>>0]|0;\n     $71 = ($70<<24>>24)==(0);\n     if (!($71)) {\n      break L1;\n     }\n     __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$0,$1,$2,$3,$4);\n     $72 = ((($$0)) + 8|0);\n     $73 = ($72>>>0)<($59>>>0);\n     if ($73) {\n      $$0 = $72;\n     } else {\n      break L1;\n     }\n    }\n   }\n   $10 = ((($1)) + 16|0);\n   $11 = HEAP32[$10>>2]|0;\n   $12 = ($11|0)==($2|0);\n   if (!($12)) {\n    $13 = ((($1)) + 20|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = ($14|0)==($2|0);\n    if (!($15)) {\n     $18 = ((($1)) + 32|0);\n     HEAP32[$18>>2] = $3;\n     $19 = ((($1)) + 44|0);\n     $20 = HEAP32[$19>>2]|0;\n     $21 = ($20|0)==(4);\n     if ($21) {\n      break;\n     }\n     $22 = ((($0)) + 16|0);\n     $23 = ((($0)) + 12|0);\n     $24 = HEAP32[$23>>2]|0;\n     $25 = (((($0)) + 16|0) + ($24<<3)|0);\n     $26 = ((($1)) + 52|0);\n     $27 = ((($1)) + 53|0);\n     $28 = ((($1)) + 54|0);\n     $29 = ((($0)) + 8|0);\n     $30 = ((($1)) + 24|0);\n     $$081$off0 = 0;$$084 = $22;$$085$off0 = 0;\n     L32: while(1) {\n      $31 = ($$084>>>0)<($25>>>0);\n      if (!($31)) {\n       $$283$off0 = $$081$off0;\n       label = 18;\n       break;\n      }\n      HEAP8[$26>>0] = 0;\n      HEAP8[$27>>0] = 0;\n      __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($$084,$1,$2,$2,1,$4);\n      $32 = HEAP8[$28>>0]|0;\n      $33 = ($32<<24>>24)==(0);\n      if (!($33)) {\n       $$283$off0 = $$081$off0;\n       label = 18;\n       break;\n      }\n      $34 = HEAP8[$27>>0]|0;\n      $35 = ($34<<24>>24)==(0);\n      do {\n       if ($35) {\n        $$182$off0 = $$081$off0;$$186$off0 = $$085$off0;\n       } else {\n        $36 = HEAP8[$26>>0]|0;\n        $37 = ($36<<24>>24)==(0);\n        if ($37) {\n         $43 = HEAP32[$29>>2]|0;\n         $44 = $43 & 1;\n         $45 = ($44|0)==(0);\n         if ($45) {\n          $$283$off0 = 1;\n          label = 18;\n          break L32;\n         } else {\n          $$182$off0 = 1;$$186$off0 = $$085$off0;\n          break;\n         }\n        }\n        $38 = HEAP32[$30>>2]|0;\n        $39 = ($38|0)==(1);\n        if ($39) {\n         label = 23;\n         break L32;\n        }\n        $40 = HEAP32[$29>>2]|0;\n        $41 = $40 & 2;\n        $42 = ($41|0)==(0);\n        if ($42) {\n         label = 23;\n         break L32;\n        } else {\n         $$182$off0 = 1;$$186$off0 = 1;\n        }\n       }\n      } while(0);\n      $46 = ((($$084)) + 8|0);\n      $$081$off0 = $$182$off0;$$084 = $46;$$085$off0 = $$186$off0;\n     }\n     do {\n      if ((label|0) == 18) {\n       if (!($$085$off0)) {\n        HEAP32[$13>>2] = $2;\n        $47 = ((($1)) + 40|0);\n        $48 = HEAP32[$47>>2]|0;\n        $49 = (($48) + 1)|0;\n        HEAP32[$47>>2] = $49;\n        $50 = ((($1)) + 36|0);\n        $51 = HEAP32[$50>>2]|0;\n        $52 = ($51|0)==(1);\n        if ($52) {\n         $53 = HEAP32[$30>>2]|0;\n         $54 = ($53|0)==(2);\n         if ($54) {\n          HEAP8[$28>>0] = 1;\n          if ($$283$off0) {\n           label = 23;\n           break;\n          } else {\n           $55 = 4;\n           break;\n          }\n         }\n        }\n       }\n       if ($$283$off0) {\n        label = 23;\n       } else {\n        $55 = 4;\n       }\n      }\n     } while(0);\n     if ((label|0) == 23) {\n      $55 = 3;\n     }\n     HEAP32[$19>>2] = $55;\n     break;\n    }\n   }\n   $16 = ($3|0)==(1);\n   if ($16) {\n    $17 = ((($1)) + 32|0);\n    HEAP32[$17>>2] = 1;\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 8|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0);\n L1: do {\n  if ($6) {\n   __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3);\n  } else {\n   $7 = ((($0)) + 16|0);\n   $8 = ((($0)) + 12|0);\n   $9 = HEAP32[$8>>2]|0;\n   $10 = (((($0)) + 16|0) + ($9<<3)|0);\n   __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($7,$1,$2,$3);\n   $11 = ($9|0)>(1);\n   if ($11) {\n    $12 = ((($0)) + 24|0);\n    $13 = ((($1)) + 54|0);\n    $$0 = $12;\n    while(1) {\n     __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($$0,$1,$2,$3);\n     $14 = HEAP8[$13>>0]|0;\n     $15 = ($14<<24>>24)==(0);\n     if (!($15)) {\n      break L1;\n     }\n     $16 = ((($$0)) + 8|0);\n     $17 = ($16>>>0)<($10>>>0);\n     if ($17) {\n      $$0 = $16;\n     } else {\n      break;\n     }\n    }\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($0)) + 4|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = $5 >> 8;\n $7 = $5 & 1;\n $8 = ($7|0)==(0);\n if ($8) {\n  $$0 = $6;\n } else {\n  $9 = HEAP32[$2>>2]|0;\n  $10 = (($9) + ($6)|0);\n  $11 = HEAP32[$10>>2]|0;\n  $$0 = $11;\n }\n $12 = HEAP32[$0>>2]|0;\n $13 = HEAP32[$12>>2]|0;\n $14 = ((($13)) + 28|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = (($2) + ($$0)|0);\n $17 = $5 & 2;\n $18 = ($17|0)==(0);\n $19 = $18 ? 2 : $3;\n FUNCTION_TABLE_viiii[$15 & 255]($12,$1,$16,$19);\n return;\n}\nfunction __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $6 = ((($0)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $7 >> 8;\n $9 = $7 & 1;\n $10 = ($9|0)==(0);\n if ($10) {\n  $$0 = $8;\n } else {\n  $11 = HEAP32[$3>>2]|0;\n  $12 = (($11) + ($8)|0);\n  $13 = HEAP32[$12>>2]|0;\n  $$0 = $13;\n }\n $14 = HEAP32[$0>>2]|0;\n $15 = HEAP32[$14>>2]|0;\n $16 = ((($15)) + 20|0);\n $17 = HEAP32[$16>>2]|0;\n $18 = (($3) + ($$0)|0);\n $19 = $7 & 2;\n $20 = ($19|0)==(0);\n $21 = $20 ? 2 : $4;\n FUNCTION_TABLE_viiiiii[$17 & 255]($14,$1,$2,$18,$21,$5);\n return;\n}\nfunction __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($0)) + 4|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = $6 >> 8;\n $8 = $6 & 1;\n $9 = ($8|0)==(0);\n if ($9) {\n  $$0 = $7;\n } else {\n  $10 = HEAP32[$2>>2]|0;\n  $11 = (($10) + ($7)|0);\n  $12 = HEAP32[$11>>2]|0;\n  $$0 = $12;\n }\n $13 = HEAP32[$0>>2]|0;\n $14 = HEAP32[$13>>2]|0;\n $15 = ((($14)) + 24|0);\n $16 = HEAP32[$15>>2]|0;\n $17 = (($2) + ($$0)|0);\n $18 = $6 & 2;\n $19 = ($18|0)==(0);\n $20 = $19 ? 2 : $3;\n FUNCTION_TABLE_viiiii[$16 & 255]($13,$1,$17,$20,$4);\n return;\n}\nfunction ___cxa_guard_acquire($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = HEAP8[$0>>0]|0;\n $2 = ($1<<24>>24)==(1);\n if ($2) {\n  $$0 = 0;\n } else {\n  HEAP8[$0>>0] = 1;\n  $$0 = 1;\n }\n return ($$0|0);\n}\nfunction ___cxa_guard_release($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZSt15get_new_handlerv() {\n var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP32[5469]|0;\n $1 = (($0) + 0)|0;\n HEAP32[5469] = $1;\n $2 = $0;\n return ($2|0);\n}\nfunction ___cxa_can_catch($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = sp;\n $4 = HEAP32[$2>>2]|0;\n HEAP32[$3>>2] = $4;\n $5 = HEAP32[$0>>2]|0;\n $6 = ((($5)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (FUNCTION_TABLE_iiii[$7 & 255]($0,$1,$3)|0);\n $9 = $8&1;\n if ($8) {\n  $10 = HEAP32[$3>>2]|0;\n  HEAP32[$2>>2] = $10;\n }\n STACKTOP = sp;return ($9|0);\n}\nfunction ___cxa_is_pointer_type($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $phitmp = 0, $phitmp1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0|0)==(0|0);\n if ($1) {\n  $3 = 0;\n } else {\n  $2 = (___dynamic_cast($0,1312,1416,0)|0);\n  $phitmp = ($2|0)!=(0|0);\n  $phitmp1 = $phitmp&1;\n  $3 = $phitmp1;\n }\n return ($3|0);\n}\nfunction runPostSets() {\n}\nfunction ___muldsi3($a, $b) {\n    $a = $a | 0;\n    $b = $b | 0;\n    var $1 = 0, $2 = 0, $3 = 0, $6 = 0, $8 = 0, $11 = 0, $12 = 0;\n    $1 = $a & 65535;\n    $2 = $b & 65535;\n    $3 = Math_imul($2, $1) | 0;\n    $6 = $a >>> 16;\n    $8 = ($3 >>> 16) + (Math_imul($2, $6) | 0) | 0;\n    $11 = $b >>> 16;\n    $12 = Math_imul($11, $1) | 0;\n    return (tempRet0 = (($8 >>> 16) + (Math_imul($11, $6) | 0) | 0) + ((($8 & 65535) + $12 | 0) >>> 16) | 0, 0 | ($8 + $12 << 16 | $3 & 65535)) | 0;\n}\nfunction ___muldi3($a$0, $a$1, $b$0, $b$1) {\n    $a$0 = $a$0 | 0;\n    $a$1 = $a$1 | 0;\n    $b$0 = $b$0 | 0;\n    $b$1 = $b$1 | 0;\n    var $x_sroa_0_0_extract_trunc = 0, $y_sroa_0_0_extract_trunc = 0, $1$0 = 0, $1$1 = 0, $2 = 0;\n    $x_sroa_0_0_extract_trunc = $a$0;\n    $y_sroa_0_0_extract_trunc = $b$0;\n    $1$0 = ___muldsi3($x_sroa_0_0_extract_trunc, $y_sroa_0_0_extract_trunc) | 0;\n    $1$1 = tempRet0;\n    $2 = Math_imul($a$1, $y_sroa_0_0_extract_trunc) | 0;\n    return (tempRet0 = ((Math_imul($b$1, $x_sroa_0_0_extract_trunc) | 0) + $2 | 0) + $1$1 | $1$1 & 0, 0 | $1$0 & -1) | 0;\n}\nfunction _i64Add(a, b, c, d) {\n    /*\n      x = a + b*2^32\n      y = c + d*2^32\n      result = l + h*2^32\n    */\n    a = a|0; b = b|0; c = c|0; d = d|0;\n    var l = 0, h = 0;\n    l = (a + c)>>>0;\n    h = (b + d + (((l>>>0) < (a>>>0))|0))>>>0; // Add carry from low word to high word on overflow.\n    return ((tempRet0 = h,l|0)|0);\n}\nfunction _i64Subtract(a, b, c, d) {\n    a = a|0; b = b|0; c = c|0; d = d|0;\n    var l = 0, h = 0;\n    l = (a - c)>>>0;\n    h = (b - d)>>>0;\n    h = (b - d - (((c>>>0) > (a>>>0))|0))>>>0; // Borrow one from high word to low word on underflow.\n    return ((tempRet0 = h,l|0)|0);\n}\nfunction _llvm_cttz_i32(x) { // Note: Currently doesn't take isZeroUndef()\n    x = x | 0;\n    return (x ? (31 - (Math_clz32((x ^ (x - 1))) | 0) | 0) : 32) | 0;\n}\nfunction ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) {\n    $a$0 = $a$0 | 0;\n    $a$1 = $a$1 | 0;\n    $b$0 = $b$0 | 0;\n    $b$1 = $b$1 | 0;\n    $rem = $rem | 0;\n    var $n_sroa_0_0_extract_trunc = 0, $n_sroa_1_4_extract_shift$0 = 0, $n_sroa_1_4_extract_trunc = 0, $d_sroa_0_0_extract_trunc = 0, $d_sroa_1_4_extract_shift$0 = 0, $d_sroa_1_4_extract_trunc = 0, $4 = 0, $17 = 0, $37 = 0, $49 = 0, $51 = 0, $57 = 0, $58 = 0, $66 = 0, $78 = 0, $86 = 0, $88 = 0, $89 = 0, $91 = 0, $92 = 0, $95 = 0, $105 = 0, $117 = 0, $119 = 0, $125 = 0, $126 = 0, $130 = 0, $q_sroa_1_1_ph = 0, $q_sroa_0_1_ph = 0, $r_sroa_1_1_ph = 0, $r_sroa_0_1_ph = 0, $sr_1_ph = 0, $d_sroa_0_0_insert_insert99$0 = 0, $d_sroa_0_0_insert_insert99$1 = 0, $137$0 = 0, $137$1 = 0, $carry_0203 = 0, $sr_1202 = 0, $r_sroa_0_1201 = 0, $r_sroa_1_1200 = 0, $q_sroa_0_1199 = 0, $q_sroa_1_1198 = 0, $147 = 0, $149 = 0, $r_sroa_0_0_insert_insert42$0 = 0, $r_sroa_0_0_insert_insert42$1 = 0, $150$1 = 0, $151$0 = 0, $152 = 0, $154$0 = 0, $r_sroa_0_0_extract_trunc = 0, $r_sroa_1_4_extract_trunc = 0, $155 = 0, $carry_0_lcssa$0 = 0, $carry_0_lcssa$1 = 0, $r_sroa_0_1_lcssa = 0, $r_sroa_1_1_lcssa = 0, $q_sroa_0_1_lcssa = 0, $q_sroa_1_1_lcssa = 0, $q_sroa_0_0_insert_ext75$0 = 0, $q_sroa_0_0_insert_ext75$1 = 0, $q_sroa_0_0_insert_insert77$1 = 0, $_0$0 = 0, $_0$1 = 0;\n    $n_sroa_0_0_extract_trunc = $a$0;\n    $n_sroa_1_4_extract_shift$0 = $a$1;\n    $n_sroa_1_4_extract_trunc = $n_sroa_1_4_extract_shift$0;\n    $d_sroa_0_0_extract_trunc = $b$0;\n    $d_sroa_1_4_extract_shift$0 = $b$1;\n    $d_sroa_1_4_extract_trunc = $d_sroa_1_4_extract_shift$0;\n    if (($n_sroa_1_4_extract_trunc | 0) == 0) {\n      $4 = ($rem | 0) != 0;\n      if (($d_sroa_1_4_extract_trunc | 0) == 0) {\n        if ($4) {\n          HEAP32[$rem >> 2] = ($n_sroa_0_0_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0);\n          HEAP32[$rem + 4 >> 2] = 0;\n        }\n        $_0$1 = 0;\n        $_0$0 = ($n_sroa_0_0_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0;\n        return (tempRet0 = $_0$1, $_0$0) | 0;\n      } else {\n        if (!$4) {\n          $_0$1 = 0;\n          $_0$0 = 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        HEAP32[$rem >> 2] = $a$0 & -1;\n        HEAP32[$rem + 4 >> 2] = $a$1 & 0;\n        $_0$1 = 0;\n        $_0$0 = 0;\n        return (tempRet0 = $_0$1, $_0$0) | 0;\n      }\n    }\n    $17 = ($d_sroa_1_4_extract_trunc | 0) == 0;\n    do {\n      if (($d_sroa_0_0_extract_trunc | 0) == 0) {\n        if ($17) {\n          if (($rem | 0) != 0) {\n            HEAP32[$rem >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0);\n            HEAP32[$rem + 4 >> 2] = 0;\n          }\n          $_0$1 = 0;\n          $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        if (($n_sroa_0_0_extract_trunc | 0) == 0) {\n          if (($rem | 0) != 0) {\n            HEAP32[$rem >> 2] = 0;\n            HEAP32[$rem + 4 >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_1_4_extract_trunc >>> 0);\n          }\n          $_0$1 = 0;\n          $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_1_4_extract_trunc >>> 0) >>> 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        $37 = $d_sroa_1_4_extract_trunc - 1 | 0;\n        if (($37 & $d_sroa_1_4_extract_trunc | 0) == 0) {\n          if (($rem | 0) != 0) {\n            HEAP32[$rem >> 2] = 0 | $a$0 & -1;\n            HEAP32[$rem + 4 >> 2] = $37 & $n_sroa_1_4_extract_trunc | $a$1 & 0;\n          }\n          $_0$1 = 0;\n          $_0$0 = $n_sroa_1_4_extract_trunc >>> ((_llvm_cttz_i32($d_sroa_1_4_extract_trunc | 0) | 0) >>> 0);\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        $49 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0;\n        $51 = $49 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;\n        if ($51 >>> 0 <= 30) {\n          $57 = $51 + 1 | 0;\n          $58 = 31 - $51 | 0;\n          $sr_1_ph = $57;\n          $r_sroa_0_1_ph = $n_sroa_1_4_extract_trunc << $58 | $n_sroa_0_0_extract_trunc >>> ($57 >>> 0);\n          $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($57 >>> 0);\n          $q_sroa_0_1_ph = 0;\n          $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $58;\n          break;\n        }\n        if (($rem | 0) == 0) {\n          $_0$1 = 0;\n          $_0$0 = 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        HEAP32[$rem >> 2] = 0 | $a$0 & -1;\n        HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;\n        $_0$1 = 0;\n        $_0$0 = 0;\n        return (tempRet0 = $_0$1, $_0$0) | 0;\n      } else {\n        if (!$17) {\n          $117 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0;\n          $119 = $117 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;\n          if ($119 >>> 0 <= 31) {\n            $125 = $119 + 1 | 0;\n            $126 = 31 - $119 | 0;\n            $130 = $119 - 31 >> 31;\n            $sr_1_ph = $125;\n            $r_sroa_0_1_ph = $n_sroa_0_0_extract_trunc >>> ($125 >>> 0) & $130 | $n_sroa_1_4_extract_trunc << $126;\n            $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($125 >>> 0) & $130;\n            $q_sroa_0_1_ph = 0;\n            $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $126;\n            break;\n          }\n          if (($rem | 0) == 0) {\n            $_0$1 = 0;\n            $_0$0 = 0;\n            return (tempRet0 = $_0$1, $_0$0) | 0;\n          }\n          HEAP32[$rem >> 2] = 0 | $a$0 & -1;\n          HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;\n          $_0$1 = 0;\n          $_0$0 = 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        $66 = $d_sroa_0_0_extract_trunc - 1 | 0;\n        if (($66 & $d_sroa_0_0_extract_trunc | 0) != 0) {\n          $86 = (Math_clz32($d_sroa_0_0_extract_trunc | 0) | 0) + 33 | 0;\n          $88 = $86 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;\n          $89 = 64 - $88 | 0;\n          $91 = 32 - $88 | 0;\n          $92 = $91 >> 31;\n          $95 = $88 - 32 | 0;\n          $105 = $95 >> 31;\n          $sr_1_ph = $88;\n          $r_sroa_0_1_ph = $91 - 1 >> 31 & $n_sroa_1_4_extract_trunc >>> ($95 >>> 0) | ($n_sroa_1_4_extract_trunc << $91 | $n_sroa_0_0_extract_trunc >>> ($88 >>> 0)) & $105;\n          $r_sroa_1_1_ph = $105 & $n_sroa_1_4_extract_trunc >>> ($88 >>> 0);\n          $q_sroa_0_1_ph = $n_sroa_0_0_extract_trunc << $89 & $92;\n          $q_sroa_1_1_ph = ($n_sroa_1_4_extract_trunc << $89 | $n_sroa_0_0_extract_trunc >>> ($95 >>> 0)) & $92 | $n_sroa_0_0_extract_trunc << $91 & $88 - 33 >> 31;\n          break;\n        }\n        if (($rem | 0) != 0) {\n          HEAP32[$rem >> 2] = $66 & $n_sroa_0_0_extract_trunc;\n          HEAP32[$rem + 4 >> 2] = 0;\n        }\n        if (($d_sroa_0_0_extract_trunc | 0) == 1) {\n          $_0$1 = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;\n          $_0$0 = 0 | $a$0 & -1;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        } else {\n          $78 = _llvm_cttz_i32($d_sroa_0_0_extract_trunc | 0) | 0;\n          $_0$1 = 0 | $n_sroa_1_4_extract_trunc >>> ($78 >>> 0);\n          $_0$0 = $n_sroa_1_4_extract_trunc << 32 - $78 | $n_sroa_0_0_extract_trunc >>> ($78 >>> 0) | 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n      }\n    } while (0);\n    if (($sr_1_ph | 0) == 0) {\n      $q_sroa_1_1_lcssa = $q_sroa_1_1_ph;\n      $q_sroa_0_1_lcssa = $q_sroa_0_1_ph;\n      $r_sroa_1_1_lcssa = $r_sroa_1_1_ph;\n      $r_sroa_0_1_lcssa = $r_sroa_0_1_ph;\n      $carry_0_lcssa$1 = 0;\n      $carry_0_lcssa$0 = 0;\n    } else {\n      $d_sroa_0_0_insert_insert99$0 = 0 | $b$0 & -1;\n      $d_sroa_0_0_insert_insert99$1 = $d_sroa_1_4_extract_shift$0 | $b$1 & 0;\n      $137$0 = _i64Add($d_sroa_0_0_insert_insert99$0 | 0, $d_sroa_0_0_insert_insert99$1 | 0, -1, -1) | 0;\n      $137$1 = tempRet0;\n      $q_sroa_1_1198 = $q_sroa_1_1_ph;\n      $q_sroa_0_1199 = $q_sroa_0_1_ph;\n      $r_sroa_1_1200 = $r_sroa_1_1_ph;\n      $r_sroa_0_1201 = $r_sroa_0_1_ph;\n      $sr_1202 = $sr_1_ph;\n      $carry_0203 = 0;\n      while (1) {\n        $147 = $q_sroa_0_1199 >>> 31 | $q_sroa_1_1198 << 1;\n        $149 = $carry_0203 | $q_sroa_0_1199 << 1;\n        $r_sroa_0_0_insert_insert42$0 = 0 | ($r_sroa_0_1201 << 1 | $q_sroa_1_1198 >>> 31);\n        $r_sroa_0_0_insert_insert42$1 = $r_sroa_0_1201 >>> 31 | $r_sroa_1_1200 << 1 | 0;\n        _i64Subtract($137$0 | 0, $137$1 | 0, $r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0) | 0;\n        $150$1 = tempRet0;\n        $151$0 = $150$1 >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1;\n        $152 = $151$0 & 1;\n        $154$0 = _i64Subtract($r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0, $151$0 & $d_sroa_0_0_insert_insert99$0 | 0, ((($150$1 | 0) < 0 ? -1 : 0) >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1) & $d_sroa_0_0_insert_insert99$1 | 0) | 0;\n        $r_sroa_0_0_extract_trunc = $154$0;\n        $r_sroa_1_4_extract_trunc = tempRet0;\n        $155 = $sr_1202 - 1 | 0;\n        if (($155 | 0) == 0) {\n          break;\n        } else {\n          $q_sroa_1_1198 = $147;\n          $q_sroa_0_1199 = $149;\n          $r_sroa_1_1200 = $r_sroa_1_4_extract_trunc;\n          $r_sroa_0_1201 = $r_sroa_0_0_extract_trunc;\n          $sr_1202 = $155;\n          $carry_0203 = $152;\n        }\n      }\n      $q_sroa_1_1_lcssa = $147;\n      $q_sroa_0_1_lcssa = $149;\n      $r_sroa_1_1_lcssa = $r_sroa_1_4_extract_trunc;\n      $r_sroa_0_1_lcssa = $r_sroa_0_0_extract_trunc;\n      $carry_0_lcssa$1 = 0;\n      $carry_0_lcssa$0 = $152;\n    }\n    $q_sroa_0_0_insert_ext75$0 = $q_sroa_0_1_lcssa;\n    $q_sroa_0_0_insert_ext75$1 = 0;\n    $q_sroa_0_0_insert_insert77$1 = $q_sroa_1_1_lcssa | $q_sroa_0_0_insert_ext75$1;\n    if (($rem | 0) != 0) {\n      HEAP32[$rem >> 2] = 0 | $r_sroa_0_1_lcssa;\n      HEAP32[$rem + 4 >> 2] = $r_sroa_1_1_lcssa | 0;\n    }\n    $_0$1 = (0 | $q_sroa_0_0_insert_ext75$0) >>> 31 | $q_sroa_0_0_insert_insert77$1 << 1 | ($q_sroa_0_0_insert_ext75$1 << 1 | $q_sroa_0_0_insert_ext75$0 >>> 31) & 0 | $carry_0_lcssa$1;\n    $_0$0 = ($q_sroa_0_0_insert_ext75$0 << 1 | 0 >>> 31) & -2 | $carry_0_lcssa$0;\n    return (tempRet0 = $_0$1, $_0$0) | 0;\n}\nfunction ___udivdi3($a$0, $a$1, $b$0, $b$1) {\n    $a$0 = $a$0 | 0;\n    $a$1 = $a$1 | 0;\n    $b$0 = $b$0 | 0;\n    $b$1 = $b$1 | 0;\n    var $1$0 = 0;\n    $1$0 = ___udivmoddi4($a$0, $a$1, $b$0, $b$1, 0) | 0;\n    return $1$0 | 0;\n}\nfunction _bitshift64Ashr(low, high, bits) {\n    low = low|0; high = high|0; bits = bits|0;\n    var ander = 0;\n    if ((bits|0) < 32) {\n      ander = ((1 << bits) - 1)|0;\n      tempRet0 = high >> bits;\n      return (low >>> bits) | ((high&ander) << (32 - bits));\n    }\n    tempRet0 = (high|0) < 0 ? -1 : 0;\n    return (high >> (bits - 32))|0;\n}\nfunction _bitshift64Lshr(low, high, bits) {\n    low = low|0; high = high|0; bits = bits|0;\n    var ander = 0;\n    if ((bits|0) < 32) {\n      ander = ((1 << bits) - 1)|0;\n      tempRet0 = high >>> bits;\n      return (low >>> bits) | ((high&ander) << (32 - bits));\n    }\n    tempRet0 = 0;\n    return (high >>> (bits - 32))|0;\n}\nfunction _bitshift64Shl(low, high, bits) {\n    low = low|0; high = high|0; bits = bits|0;\n    var ander = 0;\n    if ((bits|0) < 32) {\n      ander = ((1 << bits) - 1)|0;\n      tempRet0 = (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits));\n      return low << bits;\n    }\n    tempRet0 = low << (bits - 32);\n    return 0;\n}\nfunction _llvm_bswap_i32(x) {\n    x = x|0;\n    return (((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24))|0;\n}\nfunction _memcpy(dest, src, num) {\n    dest = dest|0; src = src|0; num = num|0;\n    var ret = 0;\n    var aligned_dest_end = 0;\n    var block_aligned_dest_end = 0;\n    var dest_end = 0;\n    // Test against a benchmarked cutoff limit for when HEAPU8.set() becomes faster to use.\n    if ((num|0) >=\n      8192\n    ) {\n      return _emscripten_memcpy_big(dest|0, src|0, num|0)|0;\n    }\n\n    ret = dest|0;\n    dest_end = (dest + num)|0;\n    if ((dest&3) == (src&3)) {\n      // The initial unaligned < 4-byte front.\n      while (dest & 3) {\n        if ((num|0) == 0) return ret|0;\n        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);\n        dest = (dest+1)|0;\n        src = (src+1)|0;\n        num = (num-1)|0;\n      }\n      aligned_dest_end = (dest_end & -4)|0;\n      block_aligned_dest_end = (aligned_dest_end - 64)|0;\n      while ((dest|0) <= (block_aligned_dest_end|0) ) {\n        HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0);\n        HEAP32[(((dest)+(4))>>2)]=((HEAP32[(((src)+(4))>>2)])|0);\n        HEAP32[(((dest)+(8))>>2)]=((HEAP32[(((src)+(8))>>2)])|0);\n        HEAP32[(((dest)+(12))>>2)]=((HEAP32[(((src)+(12))>>2)])|0);\n        HEAP32[(((dest)+(16))>>2)]=((HEAP32[(((src)+(16))>>2)])|0);\n        HEAP32[(((dest)+(20))>>2)]=((HEAP32[(((src)+(20))>>2)])|0);\n        HEAP32[(((dest)+(24))>>2)]=((HEAP32[(((src)+(24))>>2)])|0);\n        HEAP32[(((dest)+(28))>>2)]=((HEAP32[(((src)+(28))>>2)])|0);\n        HEAP32[(((dest)+(32))>>2)]=((HEAP32[(((src)+(32))>>2)])|0);\n        HEAP32[(((dest)+(36))>>2)]=((HEAP32[(((src)+(36))>>2)])|0);\n        HEAP32[(((dest)+(40))>>2)]=((HEAP32[(((src)+(40))>>2)])|0);\n        HEAP32[(((dest)+(44))>>2)]=((HEAP32[(((src)+(44))>>2)])|0);\n        HEAP32[(((dest)+(48))>>2)]=((HEAP32[(((src)+(48))>>2)])|0);\n        HEAP32[(((dest)+(52))>>2)]=((HEAP32[(((src)+(52))>>2)])|0);\n        HEAP32[(((dest)+(56))>>2)]=((HEAP32[(((src)+(56))>>2)])|0);\n        HEAP32[(((dest)+(60))>>2)]=((HEAP32[(((src)+(60))>>2)])|0);\n        dest = (dest+64)|0;\n        src = (src+64)|0;\n      }\n      while ((dest|0) < (aligned_dest_end|0) ) {\n        HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0);\n        dest = (dest+4)|0;\n        src = (src+4)|0;\n      }\n    } else {\n      // In the unaligned copy case, unroll a bit as well.\n      aligned_dest_end = (dest_end - 4)|0;\n      while ((dest|0) < (aligned_dest_end|0) ) {\n        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);\n        HEAP8[(((dest)+(1))>>0)]=((HEAP8[(((src)+(1))>>0)])|0);\n        HEAP8[(((dest)+(2))>>0)]=((HEAP8[(((src)+(2))>>0)])|0);\n        HEAP8[(((dest)+(3))>>0)]=((HEAP8[(((src)+(3))>>0)])|0);\n        dest = (dest+4)|0;\n        src = (src+4)|0;\n      }\n    }\n    // The remaining unaligned < 4 byte tail.\n    while ((dest|0) < (dest_end|0)) {\n      HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);\n      dest = (dest+1)|0;\n      src = (src+1)|0;\n    }\n    return ret|0;\n}\nfunction _memmove(dest, src, num) {\n    dest = dest|0; src = src|0; num = num|0;\n    var ret = 0;\n    if (((src|0) < (dest|0)) & ((dest|0) < ((src + num)|0))) {\n      // Unlikely case: Copy backwards in a safe manner\n      ret = dest;\n      src = (src + num)|0;\n      dest = (dest + num)|0;\n      while ((num|0) > 0) {\n        dest = (dest - 1)|0;\n        src = (src - 1)|0;\n        num = (num - 1)|0;\n        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);\n      }\n      dest = ret;\n    } else {\n      _memcpy(dest, src, num) | 0;\n    }\n    return dest | 0;\n}\nfunction _memset(ptr, value, num) {\n    ptr = ptr|0; value = value|0; num = num|0;\n    var end = 0, aligned_end = 0, block_aligned_end = 0, value4 = 0;\n    end = (ptr + num)|0;\n\n    value = value & 0xff;\n    if ((num|0) >= 67 /* 64 bytes for an unrolled loop + 3 bytes for unaligned head*/) {\n      while ((ptr&3) != 0) {\n        HEAP8[((ptr)>>0)]=value;\n        ptr = (ptr+1)|0;\n      }\n\n      aligned_end = (end & -4)|0;\n      block_aligned_end = (aligned_end - 64)|0;\n      value4 = value | (value << 8) | (value << 16) | (value << 24);\n\n      while((ptr|0) <= (block_aligned_end|0)) {\n        HEAP32[((ptr)>>2)]=value4;\n        HEAP32[(((ptr)+(4))>>2)]=value4;\n        HEAP32[(((ptr)+(8))>>2)]=value4;\n        HEAP32[(((ptr)+(12))>>2)]=value4;\n        HEAP32[(((ptr)+(16))>>2)]=value4;\n        HEAP32[(((ptr)+(20))>>2)]=value4;\n        HEAP32[(((ptr)+(24))>>2)]=value4;\n        HEAP32[(((ptr)+(28))>>2)]=value4;\n        HEAP32[(((ptr)+(32))>>2)]=value4;\n        HEAP32[(((ptr)+(36))>>2)]=value4;\n        HEAP32[(((ptr)+(40))>>2)]=value4;\n        HEAP32[(((ptr)+(44))>>2)]=value4;\n        HEAP32[(((ptr)+(48))>>2)]=value4;\n        HEAP32[(((ptr)+(52))>>2)]=value4;\n        HEAP32[(((ptr)+(56))>>2)]=value4;\n        HEAP32[(((ptr)+(60))>>2)]=value4;\n        ptr = (ptr + 64)|0;\n      }\n\n      while ((ptr|0) < (aligned_end|0) ) {\n        HEAP32[((ptr)>>2)]=value4;\n        ptr = (ptr+4)|0;\n      }\n    }\n    // The remaining bytes.\n    while ((ptr|0) < (end|0)) {\n      HEAP8[((ptr)>>0)]=value;\n      ptr = (ptr+1)|0;\n    }\n    return (end-num)|0;\n}\nfunction _pthread_mutex_lock(x) {\n    x = x | 0;\n    return 0;\n}\nfunction _pthread_mutex_unlock(x) {\n    x = x | 0;\n    return 0;\n}\nfunction _sbrk(increment) {\n    increment = increment|0;\n    var oldDynamicTop = 0;\n    var oldDynamicTopOnChange = 0;\n    var newDynamicTop = 0;\n    var totalMemory = 0;\n    oldDynamicTop = HEAP32[DYNAMICTOP_PTR>>2]|0;\n    newDynamicTop = oldDynamicTop + increment | 0;\n\n    if (((increment|0) > 0 & (newDynamicTop|0) < (oldDynamicTop|0)) // Detect and fail if we would wrap around signed 32-bit int.\n      | (newDynamicTop|0) < 0) { // Also underflow, sbrk() should be able to be used to subtract.\n      abortOnCannotGrowMemory()|0;\n      ___setErrNo(12);\n      return -1;\n    }\n\n    HEAP32[DYNAMICTOP_PTR>>2] = newDynamicTop;\n    totalMemory = getTotalMemory()|0;\n    if ((newDynamicTop|0) > (totalMemory|0)) {\n      if ((enlargeMemory()|0) == 0) {\n        HEAP32[DYNAMICTOP_PTR>>2] = oldDynamicTop;\n        ___setErrNo(12);\n        return -1;\n      }\n    }\n    return oldDynamicTop|0;\n}\n\n  \nfunction dynCall_i(index) {\n  index = index|0;\n  \n  return FUNCTION_TABLE_i[index&255]()|0;\n}\n\n\nfunction dynCall_ii(index,a1) {\n  index = index|0;\n  a1=a1|0;\n  return FUNCTION_TABLE_ii[index&255](a1|0)|0;\n}\n\n\nfunction dynCall_iii(index,a1,a2) {\n  index = index|0;\n  a1=a1|0; a2=a2|0;\n  return FUNCTION_TABLE_iii[index&255](a1|0,a2|0)|0;\n}\n\n\nfunction dynCall_iiii(index,a1,a2,a3) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0;\n  return FUNCTION_TABLE_iiii[index&255](a1|0,a2|0,a3|0)|0;\n}\n\n\nfunction dynCall_v(index) {\n  index = index|0;\n  \n  FUNCTION_TABLE_v[index&511]();\n}\n\n\nfunction dynCall_vi(index,a1) {\n  index = index|0;\n  a1=a1|0;\n  FUNCTION_TABLE_vi[index&511](a1|0);\n}\n\n\nfunction dynCall_vii(index,a1,a2) {\n  index = index|0;\n  a1=a1|0; a2=a2|0;\n  FUNCTION_TABLE_vii[index&255](a1|0,a2|0);\n}\n\n\nfunction dynCall_viii(index,a1,a2,a3) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0;\n  FUNCTION_TABLE_viii[index&255](a1|0,a2|0,a3|0);\n}\n\n\nfunction dynCall_viiii(index,a1,a2,a3,a4) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0;\n  FUNCTION_TABLE_viiii[index&255](a1|0,a2|0,a3|0,a4|0);\n}\n\n\nfunction dynCall_viiiii(index,a1,a2,a3,a4,a5) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0;\n  FUNCTION_TABLE_viiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0);\n}\n\n\nfunction dynCall_viiiiii(index,a1,a2,a3,a4,a5,a6) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0; a6=a6|0;\n  FUNCTION_TABLE_viiiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0,a6|0);\n}\n\nfunction b0() {\n ; nullFunc_i(0);return 0;\n}\nfunction b1(p0) {\n p0 = p0|0; nullFunc_ii(1);return 0;\n}\nfunction b2(p0,p1) {\n p0 = p0|0;p1 = p1|0; nullFunc_iii(2);return 0;\n}\nfunction b3(p0,p1,p2) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_iiii(3);return 0;\n}\nfunction b4() {\n ; nullFunc_v(4);\n}\nfunction ___cxa_pure_virtual__wrapper() {\n ; ___cxa_pure_virtual();\n}\nfunction b5(p0) {\n p0 = p0|0; nullFunc_vi(5);\n}\nfunction b6(p0,p1) {\n p0 = p0|0;p1 = p1|0; nullFunc_vii(6);\n}\nfunction b7(p0,p1,p2) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_viii(7);\n}\nfunction b8(p0,p1,p2,p3) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0; nullFunc_viiii(8);\n}\nfunction b9(p0,p1,p2,p3,p4) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0; nullFunc_viiiii(9);\n}\nfunction b10(p0,p1,p2,p3,p4,p5) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0;p5 = p5|0; nullFunc_viiiiii(10);\n}\n\n// EMSCRIPTEN_END_FUNCS\nvar FUNCTION_TABLE_i = [b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,__ZN10emscripten8internal12operator_newI6LASZipJEEEPT_DpOT0_,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,__ZN10emscripten8internal12operator_newI13DynamicLASZipJEEEPT_DpOT0_,b0,b0,b0,b0,b0,b0,b0,b0,b0];\nvar FUNCTION_TABLE_ii = [b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZNKSt13runtime_error4whatEv,b1,b1,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEv,b1,b1,b1,b1,b1,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE11target_typeEv,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,___stdio_close,b1,b1,b1,b1,b1,__ZNKSt3__217bad_function_call4whatEv,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZNKSt9exception4whatEv,b1,b1,__ZNKSt11logic_error4whatEv,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZN10emscripten8internal13getActualTypeI6LASZipEEPKvPT_,b1,b1,__ZN10emscripten8internal7InvokerIP6LASZipJEE6invokeEPFS3_vE,b1\n,b1,b1,b1,__ZN6LASZip8getCountEv,b1,__ZN10emscripten8internal13getActualTypeI13DynamicLASZipEEPKvPT_,b1,b1,__ZN10emscripten8internal7InvokerIP13DynamicLASZipJEE6invokeEPFS3_vE,b1,b1,b1,b1,b1,b1,b1,b1];\nvar FUNCTION_TABLE_iii = [b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE6targetERKSt9type_info,b2,b2,b2,b2,b2,b2,b2\n,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE10decompressEPc,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2\n,b2,b2,__ZN6laszip7formats10base_field11compressRawEPKc,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,__ZN6laszip7formats10base_field13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2\n,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info,b2\n,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEE13decompressRawEPc,b2\n,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2\n,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__219__shared_weak_count13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2\n,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2\n,b2,b2,b2,b2,__ZN10emscripten8internal13MethodInvokerIM6LASZipFjvEjPS2_JEE6invokeERKS4_S5_,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2];\nvar FUNCTION_TABLE_iiii = [b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,___stdio_write,___stdio_seek,___stdout_write,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,__ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,__ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3];\nvar FUNCTION_TABLE_v = [b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,___cxa_pure_virtual__wrapper,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,__ZL25default_terminate_handlerv,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,__ZN10__cxxabiv112_GLOBAL__N_110construct_Ev,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4];\nvar FUNCTION_TABLE_vi = [b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE21__on_zero_shared_weakEv,__ZN6laszip13invalid_magicD2Ev,__ZN6laszip13invalid_magicD0Ev,b5,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED0Ev,b5,b5,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7destroyEv,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE18destroy_deallocateEv,b5,b5,b5,__ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED2Ev,__ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED0Ev,b5,__ZN6laszip21old_style_compressionD2Ev,__ZN6laszip21old_style_compressionD0Ev,__ZN6laszip14not_compressedD2Ev\n,__ZN6laszip14not_compressedD0Ev,__ZN6laszip25laszip_format_unsupportedD2Ev,__ZN6laszip25laszip_format_unsupportedD0Ev,__ZN6laszip13no_laszip_vlrD2Ev,__ZN6laszip13no_laszip_vlrD0Ev,__ZN6laszip22chunk_table_read_errorD2Ev,__ZN6laszip22chunk_table_read_errorD0Ev,__ZN6laszip13not_supportedD2Ev,__ZN6laszip13not_supportedD0Ev,__ZN6laszip26unknown_chunk_table_formatD2Ev,__ZN6laszip26unknown_chunk_table_formatD0Ev,__ZN6laszip11end_of_fileD2Ev,__ZN6laszip11end_of_fileD0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE21__on_zero_shared_weakEv,__ZN6laszip19unknown_schema_typeD2Ev,__ZN6laszip19unknown_schema_typeD0Ev,b5,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED0Ev,__ZN6laszip7formats20dynamic_decompressorD2Ev,__ZN6laszip7formats20dynamic_decompressorD0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv\n,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED0Ev,b5,b5,__ZN6laszip7formats10base_fieldD2Ev,__ZN6laszip7formats10base_fieldD0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED0Ev\n,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv\n,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev\n,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED0Ev\n,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,b5,b5,b5,b5,__ZNSt3__217bad_function_callD2Ev,__ZNSt3__217bad_function_callD0Ev,b5,__ZNSt3__214__shared_countD2Ev,__ZNSt3__214__shared_countD0Ev,__ZNSt3__219__shared_weak_countD0Ev,b5,b5,__ZN10__cxxabiv116__shim_type_infoD2Ev,__ZN10__cxxabiv117__class_type_infoD0Ev,__ZNK10__cxxabiv116__shim_type_info5noop1Ev,__ZNK10__cxxabiv116__shim_type_info5noop2Ev\n,b5,b5,b5,b5,__ZN10__cxxabiv120__si_class_type_infoD0Ev,b5,b5,b5,__ZNSt9exceptionD2Ev,__ZNSt9exceptionD0Ev,b5,__ZNSt11logic_errorD2Ev,__ZNSt11logic_errorD0Ev,b5,__ZNSt13runtime_errorD2Ev,__ZNSt13runtime_errorD0Ev,__ZNSt12length_errorD0Ev,__ZN10__cxxabiv123__fundamental_type_infoD0Ev,b5,__ZN10__cxxabiv119__pointer_type_infoD0Ev,b5,__ZN10__cxxabiv121__vmi_class_type_infoD0Ev,b5,b5,b5,b5,__ZN10emscripten8internal14raw_destructorI6LASZipEEvPT_,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,__ZN10emscripten8internal14raw_destructorI13DynamicLASZipEEvPT_,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,__ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5];\nvar FUNCTION_TABLE_vii = [b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEPNS0_6__baseISE_EE,b6,b6,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EEclESA_,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,__ZN6LASZip8getPointEi,b6,b6,b6,b6,b6,b6,b6,b6,b6,__ZN13DynamicLASZip16addFieldFloatingEj,b6,__ZN13DynamicLASZip14addFieldSignedEj,__ZN13DynamicLASZip16addFieldUnsignedEj,__ZN13DynamicLASZip8getPointEi,b6];\nvar FUNCTION_TABLE_viii = [b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,__ZN6LASZip4openEjj\n,b7,b7,__ZN10emscripten8internal13MethodInvokerIM6LASZipFviEvPS2_JiEE6invokeERKS4_S5_i,b7,b7,b7,b7,b7,b7,__ZN13DynamicLASZip4openEjj,b7,b7,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjEvPS2_JjEE6invokeERKS4_S5_j,b7,b7,b7,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFviEvPS2_JiEE6invokeERKS4_S5_i];\nvar FUNCTION_TABLE_viiii = [b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,__ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,__ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,b8,b8\n,__ZN10emscripten8internal13MethodInvokerIM6LASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj,b8,b8,b8,b8,b8,b8,b8,b8,b8,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj,b8,b8,b8,b8,b8,b8];\nvar FUNCTION_TABLE_viiiii = [b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,__ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,__ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9];\nvar FUNCTION_TABLE_viiiiii = [b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,__ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,__ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,__ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10];\n\n  return { __GLOBAL__sub_I_bind_cpp: __GLOBAL__sub_I_bind_cpp, __GLOBAL__sub_I_laz_perf_cpp: __GLOBAL__sub_I_laz_perf_cpp, ___cxa_can_catch: ___cxa_can_catch, ___cxa_is_pointer_type: ___cxa_is_pointer_type, ___errno_location: ___errno_location, ___getTypeName: ___getTypeName, ___muldi3: ___muldi3, ___udivdi3: ___udivdi3, _bitshift64Ashr: _bitshift64Ashr, _bitshift64Lshr: _bitshift64Lshr, _bitshift64Shl: _bitshift64Shl, _fflush: _fflush, _free: _free, _i64Add: _i64Add, _i64Subtract: _i64Subtract, _llvm_bswap_i32: _llvm_bswap_i32, _malloc: _malloc, _memcpy: _memcpy, _memmove: _memmove, _memset: _memset, _pthread_mutex_lock: _pthread_mutex_lock, _pthread_mutex_unlock: _pthread_mutex_unlock, _sbrk: _sbrk, dynCall_i: dynCall_i, dynCall_ii: dynCall_ii, dynCall_iii: dynCall_iii, dynCall_iiii: dynCall_iiii, dynCall_v: dynCall_v, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_viii: dynCall_viii, dynCall_viiii: dynCall_viiii, dynCall_viiiii: dynCall_viiiii, dynCall_viiiiii: dynCall_viiiiii, establishStackSpace: establishStackSpace, getTempRet0: getTempRet0, runPostSets: runPostSets, setTempRet0: setTempRet0, setThrew: setThrew, stackAlloc: stackAlloc, stackRestore: stackRestore, stackSave: stackSave };\n})\n// EMSCRIPTEN_END_ASM\n(Module.asmGlobalArg, Module.asmLibraryArg, buffer);\n\nvar real___GLOBAL__sub_I_bind_cpp = asm[\"__GLOBAL__sub_I_bind_cpp\"]; asm[\"__GLOBAL__sub_I_bind_cpp\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real___GLOBAL__sub_I_bind_cpp.apply(null, arguments);\n};\n\nvar real___GLOBAL__sub_I_laz_perf_cpp = asm[\"__GLOBAL__sub_I_laz_perf_cpp\"]; asm[\"__GLOBAL__sub_I_laz_perf_cpp\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real___GLOBAL__sub_I_laz_perf_cpp.apply(null, arguments);\n};\n\nvar real____cxa_can_catch = asm[\"___cxa_can_catch\"]; asm[\"___cxa_can_catch\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____cxa_can_catch.apply(null, arguments);\n};\n\nvar real____cxa_is_pointer_type = asm[\"___cxa_is_pointer_type\"]; asm[\"___cxa_is_pointer_type\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____cxa_is_pointer_type.apply(null, arguments);\n};\n\nvar real____errno_location = asm[\"___errno_location\"]; asm[\"___errno_location\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____errno_location.apply(null, arguments);\n};\n\nvar real____getTypeName = asm[\"___getTypeName\"]; asm[\"___getTypeName\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____getTypeName.apply(null, arguments);\n};\n\nvar real____muldi3 = asm[\"___muldi3\"]; asm[\"___muldi3\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____muldi3.apply(null, arguments);\n};\n\nvar real____udivdi3 = asm[\"___udivdi3\"]; asm[\"___udivdi3\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____udivdi3.apply(null, arguments);\n};\n\nvar real__bitshift64Ashr = asm[\"_bitshift64Ashr\"]; asm[\"_bitshift64Ashr\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__bitshift64Ashr.apply(null, arguments);\n};\n\nvar real__bitshift64Lshr = asm[\"_bitshift64Lshr\"]; asm[\"_bitshift64Lshr\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__bitshift64Lshr.apply(null, arguments);\n};\n\nvar real__bitshift64Shl = asm[\"_bitshift64Shl\"]; asm[\"_bitshift64Shl\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__bitshift64Shl.apply(null, arguments);\n};\n\nvar real__fflush = asm[\"_fflush\"]; asm[\"_fflush\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__fflush.apply(null, arguments);\n};\n\nvar real__free = asm[\"_free\"]; asm[\"_free\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__free.apply(null, arguments);\n};\n\nvar real__i64Add = asm[\"_i64Add\"]; asm[\"_i64Add\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__i64Add.apply(null, arguments);\n};\n\nvar real__i64Subtract = asm[\"_i64Subtract\"]; asm[\"_i64Subtract\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__i64Subtract.apply(null, arguments);\n};\n\nvar real__llvm_bswap_i32 = asm[\"_llvm_bswap_i32\"]; asm[\"_llvm_bswap_i32\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__llvm_bswap_i32.apply(null, arguments);\n};\n\nvar real__malloc = asm[\"_malloc\"]; asm[\"_malloc\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__malloc.apply(null, arguments);\n};\n\nvar real__memmove = asm[\"_memmove\"]; asm[\"_memmove\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__memmove.apply(null, arguments);\n};\n\nvar real__pthread_mutex_lock = asm[\"_pthread_mutex_lock\"]; asm[\"_pthread_mutex_lock\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__pthread_mutex_lock.apply(null, arguments);\n};\n\nvar real__pthread_mutex_unlock = asm[\"_pthread_mutex_unlock\"]; asm[\"_pthread_mutex_unlock\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__pthread_mutex_unlock.apply(null, arguments);\n};\n\nvar real__sbrk = asm[\"_sbrk\"]; asm[\"_sbrk\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__sbrk.apply(null, arguments);\n};\n\nvar real_establishStackSpace = asm[\"establishStackSpace\"]; asm[\"establishStackSpace\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_establishStackSpace.apply(null, arguments);\n};\n\nvar real_getTempRet0 = asm[\"getTempRet0\"]; asm[\"getTempRet0\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_getTempRet0.apply(null, arguments);\n};\n\nvar real_setTempRet0 = asm[\"setTempRet0\"]; asm[\"setTempRet0\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_setTempRet0.apply(null, arguments);\n};\n\nvar real_setThrew = asm[\"setThrew\"]; asm[\"setThrew\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_setThrew.apply(null, arguments);\n};\n\nvar real_stackAlloc = asm[\"stackAlloc\"]; asm[\"stackAlloc\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_stackAlloc.apply(null, arguments);\n};\n\nvar real_stackRestore = asm[\"stackRestore\"]; asm[\"stackRestore\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_stackRestore.apply(null, arguments);\n};\n\nvar real_stackSave = asm[\"stackSave\"]; asm[\"stackSave\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_stackSave.apply(null, arguments);\n};\nvar __GLOBAL__sub_I_bind_cpp = Module[\"__GLOBAL__sub_I_bind_cpp\"] = asm[\"__GLOBAL__sub_I_bind_cpp\"];\nvar __GLOBAL__sub_I_laz_perf_cpp = Module[\"__GLOBAL__sub_I_laz_perf_cpp\"] = asm[\"__GLOBAL__sub_I_laz_perf_cpp\"];\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = asm[\"___cxa_can_catch\"];\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = asm[\"___cxa_is_pointer_type\"];\nvar ___errno_location = Module[\"___errno_location\"] = asm[\"___errno_location\"];\nvar ___getTypeName = Module[\"___getTypeName\"] = asm[\"___getTypeName\"];\nvar ___muldi3 = Module[\"___muldi3\"] = asm[\"___muldi3\"];\nvar ___udivdi3 = Module[\"___udivdi3\"] = asm[\"___udivdi3\"];\nvar _bitshift64Ashr = Module[\"_bitshift64Ashr\"] = asm[\"_bitshift64Ashr\"];\nvar _bitshift64Lshr = Module[\"_bitshift64Lshr\"] = asm[\"_bitshift64Lshr\"];\nvar _bitshift64Shl = Module[\"_bitshift64Shl\"] = asm[\"_bitshift64Shl\"];\nvar _fflush = Module[\"_fflush\"] = asm[\"_fflush\"];\nvar _free = Module[\"_free\"] = asm[\"_free\"];\nvar _i64Add = Module[\"_i64Add\"] = asm[\"_i64Add\"];\nvar _i64Subtract = Module[\"_i64Subtract\"] = asm[\"_i64Subtract\"];\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = asm[\"_llvm_bswap_i32\"];\nvar _malloc = Module[\"_malloc\"] = asm[\"_malloc\"];\nvar _memcpy = Module[\"_memcpy\"] = asm[\"_memcpy\"];\nvar _memmove = Module[\"_memmove\"] = asm[\"_memmove\"];\nvar _memset = Module[\"_memset\"] = asm[\"_memset\"];\nvar _pthread_mutex_lock = Module[\"_pthread_mutex_lock\"] = asm[\"_pthread_mutex_lock\"];\nvar _pthread_mutex_unlock = Module[\"_pthread_mutex_unlock\"] = asm[\"_pthread_mutex_unlock\"];\nvar _sbrk = Module[\"_sbrk\"] = asm[\"_sbrk\"];\nvar establishStackSpace = Module[\"establishStackSpace\"] = asm[\"establishStackSpace\"];\nvar getTempRet0 = Module[\"getTempRet0\"] = asm[\"getTempRet0\"];\nvar runPostSets = Module[\"runPostSets\"] = asm[\"runPostSets\"];\nvar setTempRet0 = Module[\"setTempRet0\"] = asm[\"setTempRet0\"];\nvar setThrew = Module[\"setThrew\"] = asm[\"setThrew\"];\nvar stackAlloc = Module[\"stackAlloc\"] = asm[\"stackAlloc\"];\nvar stackRestore = Module[\"stackRestore\"] = asm[\"stackRestore\"];\nvar stackSave = Module[\"stackSave\"] = asm[\"stackSave\"];\nvar dynCall_i = Module[\"dynCall_i\"] = asm[\"dynCall_i\"];\nvar dynCall_ii = Module[\"dynCall_ii\"] = asm[\"dynCall_ii\"];\nvar dynCall_iii = Module[\"dynCall_iii\"] = asm[\"dynCall_iii\"];\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = asm[\"dynCall_iiii\"];\nvar dynCall_v = Module[\"dynCall_v\"] = asm[\"dynCall_v\"];\nvar dynCall_vi = Module[\"dynCall_vi\"] = asm[\"dynCall_vi\"];\nvar dynCall_vii = Module[\"dynCall_vii\"] = asm[\"dynCall_vii\"];\nvar dynCall_viii = Module[\"dynCall_viii\"] = asm[\"dynCall_viii\"];\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = asm[\"dynCall_viiii\"];\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = asm[\"dynCall_viiiii\"];\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = asm[\"dynCall_viiiiii\"];\n;\n\n\n\n// === Auto-generated postamble setup entry stuff ===\n\nModule['asm'] = asm;\n\nif (!Module[\"intArrayFromString\"]) Module[\"intArrayFromString\"] = function() { abort(\"'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"intArrayToString\"]) Module[\"intArrayToString\"] = function() { abort(\"'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"ccall\"]) Module[\"ccall\"] = function() { abort(\"'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"cwrap\"]) Module[\"cwrap\"] = function() { abort(\"'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"setValue\"]) Module[\"setValue\"] = function() { abort(\"'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getValue\"]) Module[\"getValue\"] = function() { abort(\"'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"allocate\"]) Module[\"allocate\"] = function() { abort(\"'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getMemory\"]) Module[\"getMemory\"] = function() { abort(\"'getMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"Pointer_stringify\"]) Module[\"Pointer_stringify\"] = function() { abort(\"'Pointer_stringify' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"AsciiToString\"]) Module[\"AsciiToString\"] = function() { abort(\"'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToAscii\"]) Module[\"stringToAscii\"] = function() { abort(\"'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"UTF8ArrayToString\"]) Module[\"UTF8ArrayToString\"] = function() { abort(\"'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"UTF8ToString\"]) Module[\"UTF8ToString\"] = function() { abort(\"'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToUTF8Array\"]) Module[\"stringToUTF8Array\"] = function() { abort(\"'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToUTF8\"]) Module[\"stringToUTF8\"] = function() { abort(\"'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"lengthBytesUTF8\"]) Module[\"lengthBytesUTF8\"] = function() { abort(\"'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"UTF16ToString\"]) Module[\"UTF16ToString\"] = function() { abort(\"'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToUTF16\"]) Module[\"stringToUTF16\"] = function() { abort(\"'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"lengthBytesUTF16\"]) Module[\"lengthBytesUTF16\"] = function() { abort(\"'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"UTF32ToString\"]) Module[\"UTF32ToString\"] = function() { abort(\"'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToUTF32\"]) Module[\"stringToUTF32\"] = function() { abort(\"'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"lengthBytesUTF32\"]) Module[\"lengthBytesUTF32\"] = function() { abort(\"'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"allocateUTF8\"]) Module[\"allocateUTF8\"] = function() { abort(\"'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stackTrace\"]) Module[\"stackTrace\"] = function() { abort(\"'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnPreRun\"]) Module[\"addOnPreRun\"] = function() { abort(\"'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnInit\"]) Module[\"addOnInit\"] = function() { abort(\"'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnPreMain\"]) Module[\"addOnPreMain\"] = function() { abort(\"'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnExit\"]) Module[\"addOnExit\"] = function() { abort(\"'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnPostRun\"]) Module[\"addOnPostRun\"] = function() { abort(\"'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"writeStringToMemory\"]) Module[\"writeStringToMemory\"] = function() { abort(\"'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"writeArrayToMemory\"]) Module[\"writeArrayToMemory\"] = function() { abort(\"'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"writeAsciiToMemory\"]) Module[\"writeAsciiToMemory\"] = function() { abort(\"'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addRunDependency\"]) Module[\"addRunDependency\"] = function() { abort(\"'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"removeRunDependency\"]) Module[\"removeRunDependency\"] = function() { abort(\"'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS\"]) Module[\"FS\"] = function() { abort(\"'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"FS_createFolder\"]) Module[\"FS_createFolder\"] = function() { abort(\"'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createPath\"]) Module[\"FS_createPath\"] = function() { abort(\"'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createDataFile\"]) Module[\"FS_createDataFile\"] = function() { abort(\"'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createPreloadedFile\"]) Module[\"FS_createPreloadedFile\"] = function() { abort(\"'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createLazyFile\"]) Module[\"FS_createLazyFile\"] = function() { abort(\"'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createLink\"]) Module[\"FS_createLink\"] = function() { abort(\"'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createDevice\"]) Module[\"FS_createDevice\"] = function() { abort(\"'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_unlink\"]) Module[\"FS_unlink\"] = function() { abort(\"'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"GL\"]) Module[\"GL\"] = function() { abort(\"'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"staticAlloc\"]) Module[\"staticAlloc\"] = function() { abort(\"'staticAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"dynamicAlloc\"]) Module[\"dynamicAlloc\"] = function() { abort(\"'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"warnOnce\"]) Module[\"warnOnce\"] = function() { abort(\"'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"loadDynamicLibrary\"]) Module[\"loadDynamicLibrary\"] = function() { abort(\"'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"loadWebAssemblyModule\"]) Module[\"loadWebAssemblyModule\"] = function() { abort(\"'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getLEB\"]) Module[\"getLEB\"] = function() { abort(\"'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getFunctionTables\"]) Module[\"getFunctionTables\"] = function() { abort(\"'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"alignFunctionTables\"]) Module[\"alignFunctionTables\"] = function() { abort(\"'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"registerFunctions\"]) Module[\"registerFunctions\"] = function() { abort(\"'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addFunction\"]) Module[\"addFunction\"] = function() { abort(\"'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"removeFunction\"]) Module[\"removeFunction\"] = function() { abort(\"'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getFuncWrapper\"]) Module[\"getFuncWrapper\"] = function() { abort(\"'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"prettyPrint\"]) Module[\"prettyPrint\"] = function() { abort(\"'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"makeBigInt\"]) Module[\"makeBigInt\"] = function() { abort(\"'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"dynCall\"]) Module[\"dynCall\"] = function() { abort(\"'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getCompilerSetting\"]) Module[\"getCompilerSetting\"] = function() { abort(\"'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stackSave\"]) Module[\"stackSave\"] = function() { abort(\"'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stackRestore\"]) Module[\"stackRestore\"] = function() { abort(\"'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stackAlloc\"]) Module[\"stackAlloc\"] = function() { abort(\"'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"intArrayFromBase64\"]) Module[\"intArrayFromBase64\"] = function() { abort(\"'intArrayFromBase64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"tryParseAsDataURI\"]) Module[\"tryParseAsDataURI\"] = function() { abort(\"'tryParseAsDataURI' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };if (!Module[\"ALLOC_NORMAL\"]) Object.defineProperty(Module, \"ALLOC_NORMAL\", { get: function() { abort(\"'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Module[\"ALLOC_STACK\"]) Object.defineProperty(Module, \"ALLOC_STACK\", { get: function() { abort(\"'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Module[\"ALLOC_STATIC\"]) Object.defineProperty(Module, \"ALLOC_STATIC\", { get: function() { abort(\"'ALLOC_STATIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Module[\"ALLOC_DYNAMIC\"]) Object.defineProperty(Module, \"ALLOC_DYNAMIC\", { get: function() { abort(\"'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Module[\"ALLOC_NONE\"]) Object.defineProperty(Module, \"ALLOC_NONE\", { get: function() { abort(\"'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\n\nif (memoryInitializer) {\n  if (!isDataURI(memoryInitializer)) {\n    if (typeof Module['locateFile'] === 'function') {\n      memoryInitializer = Module['locateFile'](memoryInitializer);\n    } else if (Module['memoryInitializerPrefixURL']) {\n      memoryInitializer = Module['memoryInitializerPrefixURL'] + memoryInitializer;\n    }\n  }\n  if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {\n    var data = Module['readBinary'](memoryInitializer);\n    HEAPU8.set(data, GLOBAL_BASE);\n  } else {\n    addRunDependency('memory initializer');\n    var applyMemoryInitializer = function(data) {\n      if (data.byteLength) data = new Uint8Array(data);\n      for (var i = 0; i < data.length; i++) {\n        assert(HEAPU8[GLOBAL_BASE + i] === 0, \"area for memory initializer should not have been touched before it's loaded\");\n      }\n      HEAPU8.set(data, GLOBAL_BASE);\n      // Delete the typed array that contains the large blob of the memory initializer request response so that\n      // we won't keep unnecessary memory lying around. However, keep the XHR object itself alive so that e.g.\n      // its .status field can still be accessed later.\n      if (Module['memoryInitializerRequest']) delete Module['memoryInitializerRequest'].response;\n      removeRunDependency('memory initializer');\n    }\n    function doBrowserLoad() {\n      Module['readAsync'](memoryInitializer, applyMemoryInitializer, function() {\n        throw 'could not load memory initializer ' + memoryInitializer;\n      });\n    }\n    var memoryInitializerBytes = tryParseAsDataURI(memoryInitializer);\n    if (memoryInitializerBytes) {\n      applyMemoryInitializer(memoryInitializerBytes.buffer);\n    } else\n    if (Module['memoryInitializerRequest']) {\n      // a network request has already been created, just use that\n      function useRequest() {\n        var request = Module['memoryInitializerRequest'];\n        var response = request.response;\n        if (request.status !== 200 && request.status !== 0) {\n          var data = tryParseAsDataURI(Module['memoryInitializerRequestURL']);\n          if (data) {\n            response = data.buffer;\n          } else {\n            // If you see this warning, the issue may be that you are using locateFile or memoryInitializerPrefixURL, and defining them in JS. That\n            // means that the HTML file doesn't know about them, and when it tries to create the mem init request early, does it to the wrong place.\n            // Look in your browser's devtools network console to see what's going on.\n            console.warn('a problem seems to have happened with Module.memoryInitializerRequest, status: ' + request.status + ', retrying ' + memoryInitializer);\n            doBrowserLoad();\n            return;\n          }\n        }\n        applyMemoryInitializer(response);\n      }\n      if (Module['memoryInitializerRequest'].response) {\n        setTimeout(useRequest, 0); // it's already here; but, apply it asynchronously\n      } else {\n        Module['memoryInitializerRequest'].addEventListener('load', useRequest); // wait for it\n      }\n    } else {\n      // fetch it from the network ourselves\n      doBrowserLoad();\n    }\n  }\n}\n\n\n\n/**\n * @constructor\n * @extends {Error}\n * @this {ExitStatus}\n */\nfunction ExitStatus(status) {\n  this.name = \"ExitStatus\";\n  this.message = \"Program terminated with exit(\" + status + \")\";\n  this.status = status;\n};\nExitStatus.prototype = new Error();\nExitStatus.prototype.constructor = ExitStatus;\n\nvar initialStackTop;\nvar calledMain = false;\n\ndependenciesFulfilled = function runCaller() {\n  // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\n  if (!Module['calledRun']) run();\n  if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\n}\n\n\n\n\n\n/** @type {function(Array=)} */\nfunction run(args) {\n  args = args || Module['arguments'];\n\n  if (runDependencies > 0) {\n    return;\n  }\n\n  writeStackCookie();\n\n  preRun();\n\n  if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\n  if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\n\n  function doRun() {\n    if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\n    Module['calledRun'] = true;\n\n    if (ABORT) return;\n\n    ensureInitRuntime();\n\n    preMain();\n\n    if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\n\n    assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]');\n\n    postRun();\n  }\n\n  if (Module['setStatus']) {\n    Module['setStatus']('Running...');\n    setTimeout(function() {\n      setTimeout(function() {\n        Module['setStatus']('');\n      }, 1);\n      doRun();\n    }, 1);\n  } else {\n    doRun();\n  }\n  checkStackCookie();\n}\nModule['run'] = run;\n\nfunction checkUnflushedContent() {\n  // Compiler settings do not allow exiting the runtime, so flushing\n  // the streams is not possible. but in ASSERTIONS mode we check\n  // if there was something to flush, and if so tell the user they\n  // should request that the runtime be exitable.\n  // Normally we would not even include flush() at all, but in ASSERTIONS\n  // builds we do so just for this check, and here we see if there is any\n  // content to flush, that is, we check if there would have been\n  // something a non-ASSERTIONS build would have not seen.\n  // How we flush the streams depends on whether we are in NO_FILESYSTEM\n  // mode (which has its own special function for this; otherwise, all\n  // the code is inside libc)\n  var print = Module['print'];\n  var printErr = Module['printErr'];\n  var has = false;\n  Module['print'] = Module['printErr'] = function(x) {\n    has = true;\n  }\n  try { // it doesn't matter if it fails\n    var flush = flush_NO_FILESYSTEM;\n    if (flush) flush(0);\n  } catch(e) {}\n  Module['print'] = print;\n  Module['printErr'] = printErr;\n  if (has) {\n    warnOnce('stdio streams had content in them that was not flushed. you should set NO_EXIT_RUNTIME to 0 (see the FAQ), or make sure to emit a newline when you printf etc.');\n  }\n}\n\nfunction exit(status, implicit) {\n  checkUnflushedContent();\n\n  // if this is just main exit-ing implicitly, and the status is 0, then we\n  // don't need to do anything here and can just leave. if the status is\n  // non-zero, though, then we need to report it.\n  // (we may have warned about this earlier, if a situation justifies doing so)\n  if (implicit && Module['noExitRuntime'] && status === 0) {\n    return;\n  }\n\n  if (Module['noExitRuntime']) {\n    // if exit() was called, we may warn the user if the runtime isn't actually being shut down\n    if (!implicit) {\n      Module.printErr('exit(' + status + ') called, but NO_EXIT_RUNTIME is set, so halting execution but not exiting the runtime or preventing further async execution (build with NO_EXIT_RUNTIME=0, if you want a true shutdown)');\n    }\n  } else {\n\n    ABORT = true;\n    EXITSTATUS = status;\n    STACKTOP = initialStackTop;\n\n    exitRuntime();\n\n    if (Module['onExit']) Module['onExit'](status);\n  }\n\n  if (ENVIRONMENT_IS_NODE) {\n    process['exit'](status);\n  }\n  Module['quit'](status, new ExitStatus(status));\n}\nModule['exit'] = exit;\n\nvar abortDecorators = [];\n\nfunction abort(what) {\n  if (Module['onAbort']) {\n    Module['onAbort'](what);\n  }\n\n  if (what !== undefined) {\n    Module.print(what);\n    Module.printErr(what);\n    what = JSON.stringify(what)\n  } else {\n    what = '';\n  }\n\n  ABORT = true;\n  EXITSTATUS = 1;\n\n  var extra = '';\n  var output = 'abort(' + what + ') at ' + stackTrace() + extra;\n  if (abortDecorators) {\n    abortDecorators.forEach(function(decorator) {\n      output = decorator(output, what);\n    });\n  }\n  throw output;\n}\nModule['abort'] = abort;\n\n// {{PRE_RUN_ADDITIONS}}\n\nif (Module['preInit']) {\n  if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\n  while (Module['preInit'].length > 0) {\n    Module['preInit'].pop()();\n  }\n}\n\n\nModule[\"noExitRuntime\"] = true;\n\nrun();\n\n// {{POST_RUN_ADDITIONS}}\n\n\n\n\n\n// {{MODULE_ADDITIONS}}\n\n\n\n"
  },
  {
    "path": "libs/potree/LICENSE",
    "content": " \n============\n== POTREE ==\n============\n\nhttp://potree.org\n\nCopyright (c) 2011-2020, Markus Schütz\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice,\nthis list of conditions and the following disclaimer in the documentation\nand/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe views and conclusions contained in the software and documentation are those\nof the authors and should not be interpreted as representing official policies,\neither expressed or implied, of the FreeBSD Project.\n"
  },
  {
    "path": "libs/potree/lazylibs/geopackage/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 National Geospatial-Intelligence Agency\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "libs/potree/lazylibs/geopackage/README.md",
    "content": "# GeoPackage JS\n\nGeoPackage JS is an implementation of the OGC GeoPackage spec.  This library works in both the browser and Node 4+.\n\n### Demo ###\n[GeoPackage JS Demo Page](http://ngageoint.github.io/geopackage-js/)\n\nCloning this repository and opening the docs/index.html in your browser will run the demo locally.\n\n### Installation ###\n\n[![Build Status](https://travis-ci.org/ngageoint/geopackage-js.svg?branch=master)](https://travis-ci.org/ngageoint/geopackage-js)\n[![NPM](https://img.shields.io/npm/v/@ngageoint/geopackage.svg)](https://www.npmjs.com/package/@ngageoint/geopackage)\n[![Coverage Status](https://coveralls.io/repos/github/ngageoint/geopackage-js/badge.svg)](https://coveralls.io/github/ngageoint/geopackage-js)\n\n```sh\n$ npm install @ngageoint/geopackage\n```\n\n#### GeoPackage JS Library ####\n\nThe [GeoPackage Libraries](http://ngageoint.github.io/GeoPackage/) were developed at the [National Geospatial-Intelligence Agency (NGA)](http://www.nga.mil/) in collaboration with [BIT Systems](http://www.bit-sys.com/). The government has \"unlimited rights\" and is releasing this software to increase the impact of government investments by providing developers with the opportunity to take things in new directions. The software use, modification, and distribution rights are stipulated within the [MIT license](http://choosealicense.com/licenses/mit/).\n\n### Pull Requests ###\nIf you'd like to contribute to this project, please make a pull request. We'll review the pull request and discuss the changes. All pull request contributions to this project will be released under the MIT license.\n\nSoftware source code previously released under an open source license and then modified by NGA staff is considered a \"joint work\" (see 17 USC § 101); it is partially copyrighted, partially public domain, and as a whole is protected by the copyrights of the non-government authors and must be released according to the terms of the original open source license.\n\n### About ###\n\n[GeoPackage JS](https://github.com/ngageoint/geopackage-js) is a [GeoPackage Library](http://ngageoint.github.io/GeoPackage/) JavaScript implementation of the Open Geospatial Consortium [GeoPackage](http://www.geopackage.org/) [spec](http://www.geopackage.org/spec/).  It is listed as an [OGC GeoPackage Implementation](http://www.geopackage.org/#implementations_nga) by the National Geospatial-Intelligence Agency.\n\nThe GeoPackage JavaScript library currently provides the ability to read GeoPackage files.  This library works both in the browser and in Node.  In the browser tiles are rendered using HTML5 Canvas and GeoPackages are read using [sql.js](https://github.com/kripken/sql.js/).  In Node tiles are rendered  [PureImage](https://github.com/joshmarinacci/node-pureimage) and GeoPackages are read using [node-sqlite3](https://github.com/mapbox/node-sqlite3).\n\n### Changelog\n\n##### 2.1.0\n\n- Implementation of the Feature Style Extension and Contents ID Extension\n\n##### 2.0.8\n\n- Checks for Electron when returning a tile creator\n\n##### 2.0\n\n- All new API utilizing Promises\n\n##### 1.1.4\n\n- Adds a method to retrieve tiles in EPSG:4326\n\n##### 1.1.3\n\n- Fixes issue #115\n\n##### 1.1.2\n\n- fix case where GeoPackage Zoom does not correspond to the web map zoom\n\n##### 1.1.1\n\n- fix more instances of proj4 bug for react\n- fixed tile generation for images with different x and y pixel densities\n\n##### 1.1.0\n\n- accept pull request adding support for react\n- fix bug with projected tiles that spanned the date line\n\n##### 1.0.25\n\n- ensure we use proj4 2.4.3 instead of 2.4.4\n\n##### 1.0.22\n\n- Fixed bug where querying for indexed features only returned the geometry instead of the entire feature\n\n##### 1.0.19\n\n- Remove dependency on Lwip\n\n### Usage ###\n\nView examples using [Bower](https://github.com/ngageoint/geopackage-js/tree/master/docs/bower) and [Browserify](https://github.com/ngageoint/geopackage-js/tree/master/docs)\n\nView the latest [docs](http://ngageoint.github.io/geopackage-js/jsdoc/module-geoPackage-GeoPackage.html) (currently being updated).\n\n#### Browser Usage ####\n```javascript\n\n// attach this method to a file input onchange event\nwindow.loadGeoPackage = function(files) {\n  var f = files[0];\n  var r = new FileReader();\n  r.onload = function() {\n    var array = new Uint8Array(r.result);\n    loadByteArray(array);\n  }\n  r.readAsArrayBuffer(f);\n}\n\nfunction loadByteArray(array, callback) {\n  var db = new SQL.Database(array);\n  GeoPackageConnection.connectWithDatabase(db, function(err, connection) {\n    var geoPackage = new GeoPackage('', '', connection);\n\n    // Now you can operate on the GeoPackage\n\n    // get the tile table names\n    geoPackage.getTileTables(function(err, tileTableNames) {\n      // tileTableNames is an array of all tile table names\n\n      // get the info for the first table\n      geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) {\n        geoPackage.getInfoForTable(tileDao, function(err, info) {\n          // do something with the tile table info\n        });\n\n        // draw a tile into a canvas for an XYZ tile\n        var canvas = canvasFromSomewhere;\n        var gpr = new GeoPackageTileRetriever(tileDao, 256, 256);\n        var x = 0;\n        var y = 0;\n        var zoom = 0;\n\n        console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);\n        gpr.drawTileIn(x, y, zoom, canvas, function() {\n          console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);\n        });\n\n        // or get a tile base64 data URL for an XYZ tile\n        gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) {\n          console.log('got the base64 data url');\n        });\n\n        // or get a tile from a GeoPackage tile column and tile row\n        tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) {\n          var tileData = tile.getTileData();  // the raw bytes from the GeoPackage\n        });\n\n      });\n    });\n\n    // get the feature table names\n    geoPackage.getFeatureTables(function(err, featureTableNames) {\n      // featureTableNames is an array of all feature table names\n\n      // get the info for the first table\n      geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) {\n        geoPackage.getInfoForTable(featureDao, function(err, info) {\n          // do something with the feature table info\n        });\n\n        // query for all features\n        featureDao.queryForEach(function(err, row, rowDone) {\n          var feature = featureDao.getFeatureRow(row);\n          var geometry = currentRow.getGeometry();\n          if (geometry) {\n            var geom = geometry.geometry;\n            var geoJson = geometry.geometry.toGeoJSON();\n\n            geoJson.properties = {};\n            for (var key in feature.values) {\n              if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) {\n                var column = info.columnMap[key];\n                geoJson.properties[column.displayName] = currentRow.values[key];\n              }\n            }\n          }\n          rowDone();\n        });\n      });\n    });\n  });\n}\n\n```\n\n#### NodeJS Usage ####\n\n```javascript\nvar GeoPackageAPI = require('@ngageoint/geopackage')\n  , GeoPackageManager = GeoPackageAPI.GeoPackageManager\n  , GeoPackageConnection = GeoPackageAPI.GeoPackageConnection\n  , GeoPackageTileRetriever = GeoPackageAPI.GeoPackageTileRetriever;\n\nGeoPackageAPI.open(filename, function(err, geoPackage) {\n\n  // Now you can operate on the GeoPackage\n\n  // get the tile table names\n  geoPackage.getTileTables(function(err, tileTableNames) {\n    // tileTableNames is an array of all tile table names\n\n    // get the info for the first table\n    geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) {\n      geoPackage.getInfoForTable(tileDao, function(err, info) {\n        // do something with the tile table info\n      });\n\n      // draw a tile into a canvas for an XYZ tile\n      var canvas = canvasFromSomewhere;\n      var gpr = new GeoPackageTileRetriever(tileDao, 256, 256);\n      var x = 0;\n      var y = 0;\n      var zoom = 0;\n\n      console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);\n      gpr.drawTileIn(x, y, zoom, canvas, function() {\n        console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom);\n      });\n\n      // or get a tile base64 data URL for an XYZ tile\n      gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) {\n        console.log('got the base64 data url');\n      });\n\n      // or get a tile from a GeoPackage tile column and tile row\n      tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) {\n        var tileData = tile.getTileData();  // the raw bytes from the GeoPackage\n      });\n\n    });\n  });\n\n  // get the feature table names\n  geoPackage.getFeatureTables(function(err, featureTableNames) {\n    // featureTableNames is an array of all feature table names\n\n    // get the info for the first table\n    geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) {\n      geoPackage.getInfoForTable(featureDao, function(err, info) {\n        // do something with the feature table info\n      });\n\n      // query for all features\n      featureDao.queryForEach(function(err, row, rowDone) {\n        var feature = featureDao.getFeatureRow(row);\n        var geometry = currentRow.getGeometry();\n        if (geometry) {\n          var geom = geometry.geometry;\n          var geoJson = geometry.geometry.toGeoJSON();\n\n          geoJson.properties = {};\n          for (var key in feature.values) {\n            if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) {\n              var column = info.columnMap[key];\n              geoJson.properties[column.displayName] = currentRow.values[key];\n            }\n          }\n        }\n        rowDone();\n      });\n    });\n  });\n});\n\n```\n"
  },
  {
    "path": "libs/potree/lazylibs/geopackage/geopackage.js",
    "content": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.geopackage = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n\nmodule.exports = require('./lib/api');\nvar proj4Defs = require('./lib/proj4Defs');\nmodule.exports.proj4Defs = proj4Defs;\n\nmodule.exports.GeoPackageTileRetriever = require('./lib/tiles/retriever');\nmodule.exports.GeoPackageConnection = require('./lib/db/geoPackageConnection');\nmodule.exports.TableCreator = require('./lib/db/tableCreator');\nmodule.exports.MediaTable = require('./lib/extension/relatedTables/mediaTable');\nmodule.exports.UserMappingTable = require('./lib/extension/relatedTables/userMappingTable');\nmodule.exports.DublinCoreType = require('./lib/extension/relatedTables/dublinCoreType');\n\nmodule.exports.TileColumn = require('./lib/tiles/user/tileColumn');\nmodule.exports.BoundingBox = require('./lib/boundingBox');\nmodule.exports.TileUtilities = require('./lib/tiles/creator/tileUtilities');\nmodule.exports.FeatureColumn = require('./lib/features/user/featureColumn');\nmodule.exports.UserColumn = require('./lib/user/userColumn');\nmodule.exports.GeometryColumns = require('./lib/features/columns').GeometryColumns;\nmodule.exports.GeometryData = require('./lib/geom/geometryData');\nmodule.exports.DataColumns = require('./lib/dataColumns').DataColumns;\nmodule.exports.DataTypes = require('./lib/db/dataTypes');\nmodule.exports.Metadata = require('./lib/metadata').Metadata;\nmodule.exports.MetadataReference = require('./lib/metadata/reference').MetadataReference;\nmodule.exports.RTreeIndex = require('./lib/extension/rtree').RTreeIndex;\nmodule.exports.CrsWktExtension = require('./lib/extension/crsWkt').CrsWktExtension;\nmodule.exports.SchemaExtension = require('./lib/extension/schema').SchemaExtension;\nmodule.exports.MetadataExtension = require('./lib/extension/metadata').MetadataExtension;\nmodule.exports.WebPExtension = require('./lib/extension/webp').WebPExtension;\nmodule.exports.DataColumnsDao = require('./lib/dataColumns').DataColumnsDao;\nmodule.exports.DataColumnConstraintsDao = require('./lib/dataColumnConstraints').DataColumnConstraintsDao;\n\n},{\"./lib/api\":2,\"./lib/boundingBox\":7,\"./lib/dataColumnConstraints\":12,\"./lib/dataColumns\":13,\"./lib/db/dataTypes\":14,\"./lib/db/geoPackageConnection\":15,\"./lib/db/tableCreator\":19,\"./lib/extension/crsWkt\":24,\"./lib/extension/metadata\":29,\"./lib/extension/relatedTables/dublinCoreType\":30,\"./lib/extension/relatedTables/mediaTable\":35,\"./lib/extension/relatedTables/userMappingTable\":42,\"./lib/extension/rtree\":44,\"./lib/extension/schema\":45,\"./lib/extension/webp\":63,\"./lib/features/columns\":64,\"./lib/features/user/featureColumn\":65,\"./lib/geom/geometryData\":73,\"./lib/metadata\":74,\"./lib/metadata/reference\":75,\"./lib/proj4Defs\":77,\"./lib/tiles/creator/tileUtilities\":82,\"./lib/tiles/retriever\":92,\"./lib/tiles/user/tileColumn\":95,\"./lib/user/userColumn\":105}],2:[function(require,module,exports){\n(function (process){\n\n\nvar wkx = require('wkx')\n  , reproject = require('reproject')\n  , path = require('path')\n  , fs = require('fs')\n  , geojsonvt = require('geojson-vt')\n  , vtpbf = require('vt-pbf')\n  , Pbf = require('pbf')\n  , VectorTile = require('@mapbox/vector-tile');\n\nvar GeoPackage = require('./geoPackage')\n  , GeoPackageValidate = require('./validate/geoPackageValidate')\n  , GeoPackageTileRetriever = require('./tiles/retriever')\n  , GeoPackageConnection = require('./db/geoPackageConnection')\n  , BoundingBox = require('./boundingBox')\n  , GeometryData = require('./geom/geometryData')\n  , TableCreator = require('./db/tableCreator')\n  , TileBoundingBoxUtils = require('./tiles/tileBoundingBoxUtils')\n  , FeatureTile = require('./tiles/features')\n  , FeatureTableIndex = require('./extension/index/featureTableIndex')\n  , DataColumnsDao = require('./dataColumns').DataColumnsDao\n  , DataColumns = require('./dataColumns').DataColumns\n  , DataTypes = require('./db/dataTypes')\n  , GeometryColumns = require('./features/columns').GeometryColumns\n  , FeatureColumn = require('./features/user/featureColumn')\n  , RelationType = require('./extension/relatedTables/relationType')\n  , MediaTable = require('./extension/relatedTables/mediaTable')\n  , SimpleAttributesTable = require('./extension/relatedTables/simpleAttributesTable')\n  , UserColumn = require('./user/userColumn');\n\n/**\n * This module is the entry point to the GeoPackage API, providing static\n * methods for opening and building GeoPackage files.\n *\n * @exports api\n */\nvar GeoPackageAPI = module.exports;\n\n/**\n * In Node, open a GeoPackage file at the given path, or in a browser, load an\n * in-memory GeoPackage from the given byte array.\n * @param  {String|Uint8Array} gppathOrByteArray path to the GeoPackage file or `Uint8Array` of GeoPackage bytes\n * @param  {geopackageCallback=} callback called with an `Error` if one occurred and the open `GeoPackage` object\n * @return {Promise} promise that resolves with the open {@link module:geoPackage~GeoPackage} object or rejects with an `Error`\n */\nGeoPackageAPI.open = function(gppathOrByteArray, callback) {\n  return new Promise(function(resolve, reject) {\n    var valid = (typeof gppathOrByteArray !== 'string') || (typeof gppathOrByteArray === 'string' &&\n    (gppathOrByteArray.indexOf('http') === 0 || !GeoPackageValidate.validateGeoPackageExtension(gppathOrByteArray)));\n    if (!valid) {\n      reject(new Error('Invalid GeoPackage - Invalid GeoPackage Extension'));\n    } else {\n      resolve(gppathOrByteArray);\n    }\n  }).then(function() {\n    return GeoPackageConnection.connect(gppathOrByteArray);\n  }).then(function(connection) {\n    if (gppathOrByteArray && typeof gppathOrByteArray === 'string') {\n      return new GeoPackage(path.basename(gppathOrByteArray), gppathOrByteArray, connection);\n    } else {\n      return new GeoPackage('geopackage', undefined, connection);\n    }\n  })\n  .then(function(geoPackage) {\n    if (GeoPackageValidate.hasMinimumTables(geoPackage)) {\n      return geoPackage;\n    } else {\n      throw new Error('Invalid GeoPackage - GeoPackage does not have the minimum required tables');\n    }\n  })\n  .then(function(geoPackage) {\n    if(callback) callback(null, geoPackage);\n    return geoPackage;\n  })\n  .catch(function(error){\n    if(callback) {\n      callback(error);\n    } else {\n      throw error;\n    }\n  });\n};\n\n/**\n * In Node, create a GeoPackage file at the given file path, or in a browser,\n * create an in-memory GeoPackage.\n * @param  {String|geopackageCallback} gppath path of the created GeoPackage file; ignored in the browser\n * @param  {geopackageCallback=} callback called with an `Error` if one occurred and the open {@link module:geoPackage~GeoPackage} object\n * @return {Promise} promise that resolves with the open {@link module:geoPackage~GeoPackage} object or rejects with an  `Error`\n */\nGeoPackageAPI.create = function(gppath, callback) {\n  if (typeof gppath == 'function') {\n    callback = gppath;\n    gppath = undefined;\n  }\n  var valid = (typeof gppath !== 'string') || (typeof gppath === 'string' && !GeoPackageValidate.validateGeoPackageExtension(gppath));\n  if (!valid) {\n    if (callback) {\n      return callback(new Error('Invalid GeoPackage'));\n    }\n    return Promise.reject(new Error('Invalid GeoPackage'));\n  }\n\n  var promise = new Promise(function(resolve, reject) {\n    if (typeof(process) !== 'undefined' && process.version && gppath) {\n      fs.mkdirSync(path.dirname(gppath));\n    }\n    resolve(gppath);\n  })\n  .catch(function(error) {\n    // could not create directory, just move on\n  })\n  .then(function() {\n    return GeoPackageConnection.connect(gppath);\n  })\n  .then(function(connection) {\n    connection.setApplicationId();\n    return connection;\n  })\n  .then(function(connection) {\n    if (gppath) {\n      return new GeoPackage(path.basename(gppath), gppath, connection);\n    } else {\n      return new GeoPackage('geopackage', undefined, connection);\n    }\n  })\n  .then(function(geopackage) {\n    return geopackage.createRequiredTables();\n  })\n  .then(function(geopackage) {\n    return geopackage.createSupportedExtensions();\n  })\n  .then(function(geopackage) {\n    if (callback) callback(null, geopackage);\n    return geopackage;\n  })\n  .catch(function(error){\n    if (callback) {\n      callback(error);\n    } else {\n      throw error;\n    }\n  });\n\n  return promise;\n};\n\n/**\n * Create the [tables and rows](https://www.geopackage.org/spec121/index.html#tiles)\n * necessary to store tiles according to the ubiquitous [XYZ web/slippy-map tiles](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames) scheme.\n * The extent for the [contents table]{@link module:core/contents~Contents} row,\n * `contentsBoundingBox`, is [informational only](https://www.geopackage.org/spec121/index.html#gpkg_contents_cols),\n * and need not match the [tile matrix set]{@link module:tiles/matrixset~TileMatrixSet}\n * extent, `tileMatrixSetBoundingBox`, which should be the precise bounding box\n * used to calculate the tile row and column coordinates of all tiles in the\n * tile set.  The two SRS ID parameters, `contentsSrsId` and `tileMatrixSetSrsId`,\n * must match, however.  See {@link module:tiles/matrixset~TileMatrixSet} for\n * more information about how GeoPackage consumers use the bouding boxes for a\n * tile set.\n *\n * @param {module:geoPackage~GeoPackage} geopackage the GeoPackage that will store the tiles\n * @param {string} tableName the name of the table that will store the tiles\n * @param {BoundingBox} contentsBoundingBox the bounds stored in the [`gpkg_contents`]{@link module:core/contents~Contents} table row for the tile matrix set\n * @param {SRSRef} contentsSrsId the ID of a [spatial reference system]{@link module:core/srs~SpatialReferenceSystem}; must match `tileMatrixSetSrsId`\n * @param {BoundingBox} tileMatrixSetBoundingBox the bounds stored in the [`gpkg_tile_matrix_set`]{@link module:tiles/matrixset~TileMatrixSet} table row\n * @param {SRSRef} tileMatrixSetSrsId the ID of a [spatial reference system]{@link module:core/srs~SpatialReferenceSystem}\n *   for the [tile matrix set](https://www.geopackage.org/spec121/index.html#_tile_matrix_set) table; must match `contentsSrsId`\n * @param {number} minZoom the zoom level of the lowest resolution [tile matrix]{@link module:tiles/matrix~TileMatrix} in the tile matrix set\n * @param {number} maxZoom the zoom level of the highest resolution [tile matrix]{@link module:tiles/matrix~TileMatrix} in the tile matrix set\n * @param {number=} tileSize the width and height in pixels of the tile images; defaults to 256\n * @returns {Promise} a `Promise` that resolves with the created {@link module:tiles/matrixset~TileMatrixSet} object, or rejects with an `Error`\n *\n * @todo make `tileMatrixSetSrsId` optional because it always has to be the same anyway\n */\nGeoPackageAPI.createStandardWebMercatorTileTable = function(geopackage, tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId, minZoom, maxZoom, tileSize) {\n  tileSize = tileSize || 256;\n  return geopackage.createTileTableWithTableName(tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId)\n  .then(function(tileMatrixSet) {\n    geopackage.createStandardWebMercatorTileMatrix(tileMatrixSetBoundingBox, tileMatrixSet, minZoom, maxZoom, tileSize);\n    return tileMatrixSet;\n  });\n}\n\nGeoPackageAPI.createFeatureTable = function(geopackage, tableName, geometryColumn, featureColumns) {\n  return GeoPackageAPI.createFeatureTableWithDataColumns(geopackage, tableName, geometryColumn, featureColumns, null);\n};\n\nGeoPackageAPI.createFeatureTableWithDataColumns = function(geopackage, tableName, geometryColumn, featureColumns, dataColumns) {\n  var boundingBox = new BoundingBox(-180, 180, -90, 90);\n  return GeoPackageAPI.createFeatureTableWithDataColumnsAndBoundingBox(geopackage, tableName, geometryColumn, featureColumns, dataColumns, boundingBox, 4326);\n};\n\nGeoPackageAPI.createFeatureTableWithDataColumnsAndBoundingBox = function(geopackage, tableName, geometryColumn, featureColumns, dataColumns, boundingBox, boundingBoxSrsId) {\n  return geopackage.createFeatureTableWithGeometryColumnsAndDataColumns(geometryColumn, boundingBox, boundingBoxSrsId, featureColumns, dataColumns)\n  .then(function() {\n    return geopackage.getFeatureDao(tableName);\n  });\n};\n\n/**\n * Create a feature table with the properties specified.\n * @param {module:geoPackage~GeoPackage} geopackage the geopackage object\n * @param {Object[]} properties properties to create columns from\n * @param {string} properties.name name of the column\n * @param {string} properties.dataType name of the data type\n * @return {Promise}\n */\nGeoPackageAPI.createFeatureTableWithProperties = function(geopackage, tableName, properties) {\n  var geometryColumns = new GeometryColumns();\n  geometryColumns.table_name = tableName;\n  geometryColumns.column_name = 'geometry';\n  geometryColumns.geometry_type_name = 'GEOMETRY';\n  geometryColumns.z = 0;\n  geometryColumns.m = 0;\n\n  var boundingBox = new BoundingBox(-180, 180, -80, 80);\n\n  var columns = [];\n  var columnNumber = 0;\n  columns.push(FeatureColumn.createPrimaryKeyColumnWithIndexAndName(columnNumber++, 'id'));\n  columns.push(FeatureColumn.createGeometryColumn(columnNumber++, 'geometry', 'GEOMETRY', false, null));\n\n  for (var i = 0; i < properties.length; i++) {\n    var property = properties[i];\n    columns.push(FeatureColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));\n  }\n\n  return geopackage.createFeatureTableWithGeometryColumns(geometryColumns, boundingBox, 4326, columns);\n};\n\n/**\n * Create a feature table with the properties specified.\n * @param {module:geoPackage~GeoPackage} geopackage the geopackage object\n * @param {Object[]} properties properties to create columns from\n * @param {string} properties.name name of the column\n * @param {string} properties.dataType name of the data type\n * @return {Promise}\n */\nGeoPackageAPI.createAttributeTableWithProperties = function(geopackage, tableName, properties) {\n  var columns = [];\n  var columnNumber = 0;\n  columns.push(UserColumn.createPrimaryKeyColumnWithIndexAndName(columnNumber++, 'id'));\n\n  var dataColumns = [];\n\n  for (var i = 0; i < properties.length; i++) {\n    var property = properties[i];\n    columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));\n    if (property.dataColumn) {\n      var dc = new DataColumns();\n      dc.table_name = property.dataColumn.table_name;\n      dc.column_name = property.dataColumn.column_name;\n      dc.name = property.dataColumn.name;\n      dc.title = property.dataColumn.title;\n      dc.description = property.dataColumn.description;\n      dc.mime_type = property.dataColumn.mime_type;\n      dc.constraint_name = property.dataColumn.constraint_name;\n      dataColumns.push(dc);\n    }\n  }\n\n  return geopackage.createAttributeTable(tableName, columns, dataColumns.length ? dataColumns : undefined);\n};\n\nGeoPackageAPI.addAttributeRow = function(geopackage, tableName, row) {\n  var attributeDao = geopackage.getAttributeDaoWithTableName(tableName);\n  var attributeRow = attributeDao.newRow(row);\n  return attributeDao.create(attributeRow);\n}\n\n/**\n * Create a simple attributes table with the properties specified.\n * @param {module:geoPackage~GeoPackage} geopackage the geopackage object\n * @param {Object[]} properties properties to create columns from\n * @param {string} properties.name name of the column\n * @param {string} properties.dataType name of the data type\n * @return {Promise}\n */\nGeoPackageAPI.createSimpleAttributesTableWithProperties = function(geopackage, tableName, properties) {\n  var relatedTables = geopackage.getRelatedTablesExtension();\n  var columns = [];\n  var columnNumber = SimpleAttributesTable.numRequiredColumns();\n  if (properties) {\n    for (var i = 0; i < properties.length; i++) {\n      var property = properties[i];\n      columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType), true));\n    }\n  }\n  var simpleAttributesTable = SimpleAttributesTable.create(tableName, columns);\n  relatedTables.createRelatedTable(simpleAttributesTable);\n  return relatedTables.getSimpleAttributesDao(simpleAttributesTable);\n};\n\n/**\n * Create a media table with the properties specified.  These properties are added to the required columns\n * @param {module:geoPackage~GeoPackage} geopackage the geopackage object\n * @param {Object[]} properties properties to create columns from\n * @param {string} properties.name name of the column\n * @param {string} properties.dataType name of the data type\n * @return {Promise}\n */\nGeoPackageAPI.createMediaTableWithProperties = function(geopackage, tableName, properties) {\n  var relatedTables = geopackage.getRelatedTablesExtension();\n  var columns = [];\n  var columnNumber = MediaTable.numRequiredColumns();\n  if (properties) {\n    for (var i = 0; i < properties.length; i++) {\n      var property = properties[i];\n      columns.push(UserColumn.createColumnWithIndex(columnNumber++, property.name, DataTypes.fromName(property.dataType)));\n    }\n  }\n  var mediaTable = MediaTable.create(tableName, columns)\n  relatedTables.createRelatedTable(mediaTable);\n  return relatedTables.getMediaDao(mediaTable);\n};\n\nGeoPackageAPI.addMedia = function(geopackage, tableName, dataBuffer, contentType, additionalProperties) {\n  var relatedTables = geopackage.getRelatedTablesExtension();\n  var mediaDao = relatedTables.getMediaDao(tableName);\n  var row = mediaDao.newRow();\n  row.setContentType(contentType);\n  row.setData(dataBuffer);\n  for (var key in additionalProperties) {\n    row.setValueWithColumnName(key, additionalProperties[key]);\n  }\n  return mediaDao.create(row);\n}\n\nGeoPackageAPI.linkMedia = function(geopackage, baseTableName, baseId, mediaTableName, mediaId) {\n  var relatedTables = geopackage.getRelatedTablesExtension();\n  return relatedTables.linkRelatedIds(baseTableName, baseId, mediaTableName, mediaId, RelationType.MEDIA);\n}\n\nGeoPackageAPI.getLinkedMedia = function(geopackage, baseTableName, baseId) {\n  var relationships = GeoPackageAPI.getRelatedRows(geopackage, baseTableName, baseId);\n  var mediaRelationships = [];\n  for (var i = 0; i < relationships.length; i++) {\n    var relationship = relationships[i];\n    if (relationship.relation_name === RelationType.MEDIA.name) {\n      for (var r = 0; r < relationship.mappingRows.length; r++) {\n        var row = relationship.mappingRows[r].row;\n        mediaRelationships.push(row);\n      }\n    }\n  }\n\n  return mediaRelationships;\n}\n\nGeoPackageAPI.getRelatedRows = function(geopackage, baseTableName, baseId) {\n  return geopackage.getRelatedTablesExtension().getRelatedRows(baseTableName, baseId);\n}\n\n/**\n * Adds a GeoJSON feature to the GeoPackage\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {object}   feature    GeoJSON feature to add\n * @param  {String}   tableName  name of the table that will store the feature\n */\nGeoPackageAPI.addGeoJSONFeatureToGeoPackage = function(geopackage, feature, tableName) {\n  var featureDao = geopackage.getFeatureDao(tableName);\n  var srs = featureDao.getSrs();\n  var featureRow = featureDao.newRow();\n  var geometryData = new GeometryData();\n  geometryData.setSrsId(srs.srs_id);\n  var srs = featureDao.getSrs();\n  if (!(srs.organization === 'EPSG' && srs.organization_coordsys_id === 4326)) {\n    feature = reproject.reproject(feature, 'EPSG:4326', featureDao.projection);\n  }\n\n  var featureGeometry = typeof feature.geometry === 'string' ? JSON.parse(feature.geometry) : feature.geometry;\n  var geometry = wkx.Geometry.parseGeoJSON(featureGeometry);\n  geometryData.setGeometry(geometry);\n  featureRow.setGeometry(geometryData);\n  for (var propertyKey in feature.properties) {\n    if (feature.properties.hasOwnProperty(propertyKey)) {\n      featureRow.setValueWithColumnName(propertyKey, feature.properties[propertyKey]);\n    }\n  }\n\n  return featureDao.create(featureRow);\n};\n\n/**\n * Adds a GeoJSON feature to the GeoPackage and updates the FeatureTableIndex extension if it exists\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {object}   feature    GeoJSON feature to add\n * @param  {String}   tableName  name of the table that will store the feature\n */\nGeoPackageAPI.addGeoJSONFeatureToGeoPackageAndIndex = function(geopackage, feature, tableName) {\n  var featureDao = geopackage.getFeatureDao(tableName);\n  if (!featureDao) throw new Error('No feature Dao for table ', + tableName);\n  var srs = featureDao.getSrs();\n  var featureRow = featureDao.newRow();\n  var geometryData = new GeometryData();\n  geometryData.setSrsId(srs.srs_id);\n\n  var reprojectedFeature = reproject.reproject(feature, 'EPSG:4326', featureDao.projection);\n\n  var featureGeometry = typeof reprojectedFeature.geometry === 'string' ? JSON.parse(reprojectedFeature.geometry) : reprojectedFeature.geometry;\n  var geometry = wkx.Geometry.parseGeoJSON(featureGeometry);\n  geometryData.setGeometry(geometry);\n  featureRow.setGeometry(geometryData);\n  for (var propertyKey in feature.properties) {\n    if (feature.properties.hasOwnProperty(propertyKey)) {\n      featureRow.setValueWithColumnName(propertyKey, feature.properties[propertyKey]);\n    }\n  }\n\n  var id = featureDao.create(featureRow);\n  var fti = featureDao.featureTableIndex;\n  var tableIndex = fti.getTableIndex();\n  if (!tableIndex) return id;\n  fti.indexRow(tableIndex, id, geometryData);\n  fti.updateLastIndexed(tableIndex);\n  return id;\n};\n\n/**\n * Queries for GeoJSON features in a feature tables\n * @param  {String}   geoPackagePath  path to the GeoPackage file\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} callback    Caled with err, featureArray\n */\nGeoPackageAPI.queryForGeoJSONFeaturesInTableFromPath = function(geoPackagePath, tableName, boundingBox) {\n  return GeoPackageAPI.open(geoPackagePath)\n  .then(function(geoPackage) {\n    var features = geoPackage.queryForGeoJSONFeaturesInTable(tableName, boundingBox);\n    geoPackage.close();\n    return features;\n  });\n}\n\n/**\n * Queries for GeoJSON features in a feature tables\n * @param  {module:geoPackage~GeoPackage}   geoPackage  open GeoPackage object\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} callback    Caled with err, featureArray\n */\nGeoPackageAPI.queryForGeoJSONFeaturesInTable = function(geoPackage, tableName, boundingBox) {\n  return geoPackage.queryForGeoJSONFeaturesInTable(tableName, boundingBox);\n}\n\n/**\n * Iterates GeoJSON features in a feature table that matches the bounding box\n * @param  {module:geoPackage~GeoPackage}   geoPackage  open GeoPackage object\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} rowCallback    Caled with err, and GeoJSON feature\n * @param  {Function} doneCallback    Caled with err if one occurred\n */\nGeoPackageAPI.iterateGeoJSONFeaturesInTableWithinBoundingBox = function(geoPackage, tableName, boundingBox) {\n  return geoPackage.iterateGeoJSONFeaturesInTableWithinBoundingBox(tableName, boundingBox);\n}\n\n\n/**\n * Iterates GeoJSON features in a feature table that matches the bounding box\n * @param  {String}   geoPackagePath  path to the GeoPackage file\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} rowCallback    Caled with err, and GeoJSON feature\n * @param  {Function} doneCallback    Caled with err if one occurred\n */\nGeoPackageAPI.iterateGeoJSONFeaturesFromPathInTableWithinBoundingBox = function(geoPackagePath, tableName, boundingBox) {\n  return GeoPackageAPI.open(geoPackagePath)\n  .then(function(geoPackage) {\n    return geoPackage.iterateGeoJSONFeaturesInTableWithinBoundingBox(tableName, boundingBox);\n  });\n}\n\nGeoPackageAPI.createDataColumnMap = function(featureDao) {\n  var columnMap = {};\n  var dcd = new DataColumnsDao(featureDao.geoPackage);\n  featureDao.table.columns.forEach(function(column) {\n    var dataColumn = dcd.getDataColumns(featureDao.table.table_name, column.name);\n    columnMap[column.name] = {\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey,\n      dataType: column.dataType ? DataTypes.name(column.dataType) : '',\n      displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,\n      dataColumn: dataColumn\n    };\n  }.bind(this));\n  return columnMap;\n}\n\n/**\n * Iterate GeoJSON features from table\n * @param  {module:geoPackage~GeoPackage} geopackage      open GeoPackage object\n * @param  {String} table           Table name to Iterate\n * @return {Iterator<module:user/feature/featureRow~FeatureRow>}\n */\nGeoPackageAPI.iterateGeoJSONFeaturesFromTable = function(geopackage, table) {\n  var featureDao = geopackage.getFeatureDao(table);\n  if (!featureDao) {\n    throw new Error('No Table exists with the name ' + table);\n  }\n\n  var columnMap = GeoPackageAPI.createDataColumnMap(featureDao);\n\n  var srs = featureDao.getSrs();\n\n  var iterator = featureDao.queryForEach();\n\n  return {\n    srs: srs,\n    featureDao: featureDao,\n    results: {\n      [Symbol.iterator]() {\n        return this;\n      },\n      next: function() {\n        var nextRow = iterator.next();\n        if (!nextRow.done) {\n          var featureRow;\n          var geometry;\n\n          while(!nextRow.done && !geometry) {\n            featureRow = featureDao.getRow(nextRow.value);\n            return {\n              value: GeoPackageAPI.parseFeatureRowIntoGeoJSON(featureRow, srs, columnMap),\n              done: false\n            };\n          }\n        }\n        return {\n          done: true\n        }\n      }.bind(this)\n    }\n  };\n};\n\n/**\n * Gets a GeoJSON feature from the table by id\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table to get the feature from\n * @param  {Number}   featureId  ID of the feature\n * @param  {Function} callback   called with an error if one occurred and the GeoJSON feature\n */\nGeoPackageAPI.getFeature = function(geopackage, table, featureId) {\n  var srs;\n  var featureDao = geopackage.getFeatureDao(table)\n  srs = featureDao.getSrs();\n  var feature = featureDao.queryForId(featureId);\n  if (!feature) {\n    var features = featureDao.queryForAllEq('_feature_id', featureId)\n    if (features.length) {\n      feature = featureDao.getRow(features[0]);\n    } else {\n      var features = featureDao.queryForAllEq('_properties_id', featureId)\n      if (features.length) {\n        feature = featureDao.getRow(features[0]);\n      }\n    }\n  }\n  if (feature) {\n    return GeoPackageAPI.parseFeatureRowIntoGeoJSON(feature, srs);\n  }\n};\n\nGeoPackageAPI.parseFeatureRowIntoGeoJSON = function(featureRow, srs, columnMap) {\n  var geoJson = {\n    type: 'Feature',\n    properties: {}\n  };\n  var geometry = featureRow.getGeometry();\n  if (geometry && geometry.geometry) {\n    var geom = geometry.geometry;\n    var geoJsonGeom = geometry.geometry.toGeoJSON();\n    if (srs.definition && srs.definition !== 'undefined' && (srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id) != 'EPSG:4326') {\n      // geoJsonGeom = reproject.reproject(geoJsonGeom, srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id, 'EPSG:4326');\n      geoJsonGeom = reproject.reproject(geoJsonGeom, srs.getProjection(), 'EPSG:4326');\n\n    }\n    geoJson.geometry = geoJsonGeom;\n  }\n\n  for (var key in featureRow.values) {\n    if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') {\n      if (key.toLowerCase() == '_feature_id') {\n        geoJson.id = featureRow.values[key];\n      } else if (key.toLowerCase() == '_properties_id') {\n        geoJson.properties[key.substring(12)] = featureRow.values[key];\n      } else if (columnMap && columnMap[key]) {\n        geoJson.properties[columnMap[key].displayName] = featureRow.values[key];\n      } else {\n        geoJson.properties[key] = featureRow.values[key];\n      }\n    } else if (featureRow.getGeometryColumn().name === key) {\n      // geoJson.properties[key] = geometry && !geometry.geometryError ? 'Valid' : geometry.geometryError;\n    }\n  }\n  geoJson.id = geoJson.id || featureRow.getId();\n  return geoJson;\n}\n\n\n/**\n * Gets a tile from the specified table\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table to get the tile from\n * @param  {Number}   zoom       zoom level of the tile\n * @param  {Number}   tileRow    row of the tile\n * @param  {Number}   tileColumn column of the tile\n *\n * @todo jsdoc return value\n */\nGeoPackageAPI.getTileFromTable = function(geopackage, table, zoom, tileRow, tileColumn) {\n  var tileDao = geopackage.getTileDao(table);\n  return tileDao.queryForTile(tileColumn, tileRow, zoom);\n};\n\n/**\n * Gets the tiles in the EPSG:4326 bounding box\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the tile table\n * @param  {Number}   zoom       Zoom of the tiles to query for\n * @param  {Number}   west       EPSG:4326 western boundary\n * @param  {Number}   east       EPSG:4326 eastern boundary\n * @param  {Number}   south      EPSG:4326 southern boundary\n * @param  {Number}   north      EPSG:4326 northern boundary\n * @param  {Function} callback   called with an error if one occurred and a tiles object describing the tiles\n */\nGeoPackageAPI.getTilesInBoundingBox = function(geopackage, table, zoom, west, east, south, north) {\n  var tiles = {};\n\n  var tileDao = geopackage.getTileDao(table);\n  if (zoom < tileDao.minZoom || zoom > tileDao.maxZoom) {\n    return\n  }\n  tiles.columns = [];\n  for (var i = 0; i < tileDao.table.columns.length; i++) {\n    var column = tileDao.table.columns[i];\n    tiles.columns.push({\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey\n    });\n  }\n  var srs = tileDao.getSrs();\n  tiles.srs = srs;\n  tiles.tiles = [];\n\n  var tms = tileDao.tileMatrixSet;\n  var tm = tileDao.getTileMatrixWithZoomLevel(zoom);\n  if (!tm) {\n    return tiles;\n  }\n  var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north);\n  tiles.west = Math.max(-180, west).toFixed(2);\n  tiles.east = Math.min(east, 180).toFixed(2);\n  tiles.south = south.toFixed(2);\n  tiles.north = north.toFixed(2);\n  tiles.zoom = zoom;\n  mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id);\n\n  var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox);\n\n  var iterator = tileDao.queryByTileGrid(grid, zoom);\n\n  for (var row of iterator ) {\n    var tile = {};\n    tile.tableName = table;\n    tile.id = row.getId();\n\n    var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow());\n    tile.minLongitude = tileBB.minLongitude;\n    tile.maxLongitude = tileBB.maxLongitude;\n    tile.minLatitude = tileBB.minLatitude;\n    tile.maxLatitude = tileBB.maxLatitude;\n    tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id;\n    tile.values = [];\n    for (var i = 0; i < tiles.columns.length; i++) {\n      var value = row.values[tiles.columns[i].name];\n      if (tiles.columns[i].name === 'tile_data') {\n        tile.values.push('data');\n      } else\n      if (value === null || value === 'null') {\n        tile.values.push('');\n      } else {\n        tile.values.push(value.toString());\n        tile[tiles.columns[i].name] = value;\n      }\n    }\n    tiles.tiles.push(tile);\n  }\n  return tiles;\n};\n\n/**\n * Gets the tiles in the EPSG:4326 bounding box\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the tile table\n * @param  {Number}   zoom       Zoom of the tiles to query for\n * @param  {Number}   west       EPSG:4326 western boundary\n * @param  {Number}   east       EPSG:4326 eastern boundary\n * @param  {Number}   south      EPSG:4326 southern boundary\n * @param  {Number}   north      EPSG:4326 northern boundary\n * @param  {Function} callback   called with an error if one occurred and a tiles object describing the tiles\n */\nGeoPackageAPI.getTilesInBoundingBoxWebZoom = function(geopackage, table, webZoom, west, east, south, north) {\n  var tiles = {};\n\n  var tileDao = geopackage.getTileDao(table);\n  if (webZoom < tileDao.minWebZoom || webZoom > tileDao.maxWebZoom) {\n    return;\n  }\n  tiles.columns = [];\n  for (var i = 0; i < tileDao.table.columns.length; i++) {\n    var column = tileDao.table.columns[i];\n    tiles.columns.push({\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey\n    });\n  }\n  var srs = tileDao.getSrs();\n  tiles.srs = srs;\n  tiles.tiles = [];\n\n  var zoom = tileDao.webZoomToGeoPackageZoom(webZoom);\n\n  var tms = tileDao.tileMatrixSet;\n  var tm = tileDao.getTileMatrixWithZoomLevel(zoom);\n  if (!tm) {\n    return tiles;\n  }\n  var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north);\n  tiles.west = Math.max(-180, west).toFixed(2);\n  tiles.east = Math.min(east, 180).toFixed(2);\n  tiles.south = south.toFixed(2);\n  tiles.north = north.toFixed(2);\n  tiles.zoom = zoom;\n  mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id);\n\n  var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox);\n\n  var iterator = tileDao.queryByTileGrid(grid, zoom);\n  for (var row of iterator) {\n    var tile = {};\n    tile.tableName = table;\n    tile.id = row.getId();\n\n    var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow());\n    tile.minLongitude = tileBB.minLongitude;\n    tile.maxLongitude = tileBB.maxLongitude;\n    tile.minLatitude = tileBB.minLatitude;\n    tile.maxLatitude = tileBB.maxLatitude;\n    tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id;\n    tile.values = [];\n    for (var i = 0; i < tiles.columns.length; i++) {\n      var value = row.values[tiles.columns[i].name];\n      if (tiles.columns[i].name === 'tile_data') {\n        tile.values.push('data');\n      } else\n      if (value === null || value === 'null') {\n        tile.values.push('');\n      } else {\n        tile.values.push(value.toString());\n        tile[tiles.columns[i].name] = value;\n      }\n    }\n    tiles.tiles.push(tile);\n  }\n  return tiles;\n};\n\nGeoPackageAPI.getFeatureTileFromXYZ = function(geopackage, table, x, y, z, width, height) {\n  x = Number(x);\n  y = Number(y);\n  z = Number(z);\n  width = Number(width);\n  height = Number(height);\n  var featureDao = geopackage.getFeatureDao(table)\n  if (!featureDao) return;\n  var ft = new FeatureTile(featureDao, width, height);\n  return ft.drawTile(x, y, z);\n}\n\n/**\n * Gets the features in the EPSG:4326 bounding box\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the feature table\n * @param  {Number}   west       EPSG:4326 western boundary\n * @param  {Number}   east       EPSG:4326 eastern boundary\n * @param  {Number}   south      EPSG:4326 southern boundary\n * @param  {Number}   north      EPSG:4326 northern boundary\n */\nGeoPackageAPI.getGeoJSONFeaturesInTile = function(geopackage, table, x, y, z, skipVerification) {\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z);\n  var bb = webMercatorBoundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326');\n  return geopackage.indexFeatureTable(table)\n  .then(function(indexed) {\n    return geopackage.getFeatureDao(table);\n  })\n  .then(function(featureDao) {\n    if (!featureDao) return;\n    var features = [];\n    var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(bb, skipVerification);\n    for (var feature of iterator) {\n      features.push(feature);\n    }\n    return features;\n  })\n  .catch(function(error) {\n    console.log('error', error);\n  });\n}\n\nGeoPackageAPI.convertPBFToVectorTile = function(pbf) {\n  return new VectorTile.VectorTile(new Pbf(pbf));\n}\n\n/**\n * Gets a mapbox VectorTile for the x y z web mercator tile specified\n * @param  {module:geoPackage~GeoPackage} geopackage open GeoPackage object\n * @param  {String} table      table name\n * @param  {Number} x          x tile\n * @param  {Number} y          y tile\n * @param  {Number} z          web zoom\n * @return {VectorTile}\n */\nGeoPackageAPI.getVectorTile = function(geopackage, table, x, y, z) {\n  return GeoPackageAPI.getVectorTileProtobuf(geopackage, table, x, y, z)\n  .then(function(pbf) {\n    return new VectorTile.VectorTile(new Pbf(pbf));\n  });\n}\n\n/**\n * Gets a protobuf for the x y z web mercator tile specified\n * @param  {module:geoPackage~GeoPackage} geopackage open GeoPackage object\n * @param  {String} table      table name\n * @param  {Number} x          x tile\n * @param  {Number} y          y tile\n * @param  {Number} z          web zoom\n * @return {Protobuf}\n */\nGeoPackageAPI.getVectorTileProtobuf = function(geopackage, table, x, y, z) {\n  return GeoPackageAPI.getGeoJSONFeaturesInTile(geopackage, table, x, y, z, true)\n  .then(function(features) {\n    var featureCollection = {\n      type: 'FeatureCollection',\n      features: features\n    };\n    var tileBuffer = 8;\n    var tileIndex = geojsonvt(featureCollection, {buffer: tileBuffer * 8, maxZoom: z});\n    var layer = {};\n    var tile = tileIndex.getTile(z, x, y);\n\n    var gjvt = {};\n\n    if (tile) {\n      gjvt[table] = tile;\n    } else {\n      gjvt[table] = {features:[]};\n    }\n\n    return vtpbf.fromGeojsonVt(gjvt);\n  });\n}\n\n/**\n * Gets the features in the EPSG:4326 bounding box\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the feature table\n * @param  {Number}   west       EPSG:4326 western boundary\n * @param  {Number}   east       EPSG:4326 eastern boundary\n * @param  {Number}   south      EPSG:4326 southern boundary\n * @param  {Number}   north      EPSG:4326 northern boundary\n */\nGeoPackageAPI.getFeaturesInBoundingBox = function(geopackage, table, west, east, south, north) {\n  return geopackage.indexFeatureTable(table)\n  .then(function(indexed) {\n    var featureDao = geopackage.getFeatureDao(table);\n    if (!featureDao) throw new Error('Unable to find table ' + table);\n    var features = [];\n    var bb = new BoundingBox(west, east, south, north);\n    var iterator = featureDao.queryIndexedFeaturesWithBoundingBox(bb);\n    return iterator;\n  });\n}\n\n/**\n * Gets a tile image for an XYZ tile pyramid location\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table containing the tiles\n * @param  {Number}   x          x index of the tile\n * @param  {Number}   y          y index of the tile\n * @param  {Number}   z          zoom level of the tile\n * @param  {Number}   width      width of the resulting tile\n * @param  {Number}   height     height of the resulting tile\n * @return {Promise}\n */\nGeoPackageAPI.getTileFromXYZ = function(geopackage, table, x, y, z, width, height) {\n  x = Number(x);\n  y = Number(y);\n  z = Number(z);\n  width = Number(width);\n  height = Number(height);\n  var tileDao = geopackage.getTileDao(table);\n  var retriever = new GeoPackageTileRetriever(tileDao, width, height);\n  return retriever.getTile(x, y, z);\n};\n\n/**\n * Draws an XYZ tile pyramid location into the provided canvas\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table containing the tiles\n * @param  {Number}   x          x index of the tile\n * @param  {Number}   y          y index of the tile\n * @param  {Number}   z          zoom level of the tile\n * @param  {Number}   width      width of the resulting tile\n * @param  {Number}   height     height of the resulting tile\n * @param  {Canvas}   canvas     canvas element to draw the tile into\n */\nGeoPackageAPI.drawXYZTileInCanvas = function(geopackage, table, x, y, z, width, height, canvas) {\n  x = Number(x);\n  y = Number(y);\n  z = Number(z);\n  width = Number(width);\n  height = Number(height);\n  var tileDao = geopackage.getTileDao(table)\n  var retriever = new GeoPackageTileRetriever(tileDao, width, height);\n  return retriever.drawTileIn(x, y, z, canvas);\n};\n\n/**\n * Draws a tile specified by the bounds in EPSG:4326 into the canvas\n * @param  {module:geoPackage~GeoPackage}   geopackage open GeoPackage object\n * @param  {String}   table      name of the table containing the tiles\n * @param  {Number}   minLat     minimum latitude bounds of tile\n * @param  {Number}   minLon     minimum longitude bounds of tile\n * @param  {Number}   maxLat     maximum latitude bounds of tile\n * @param  {Number}   maxLon     maximum longitude bounds of tile\n * @param  {Number}   z          zoom level of the tile\n * @param  {Number}   width      width of the resulting tile\n * @param  {Number}   height     height of the resulting tile\n * @param  {Canvas}   canvas     canvas element to draw the tile into\n */\nGeoPackageAPI.draw4326TileInCanvas = function(geopackage, table, minLat, minLon, maxLat, maxLon, z, width, height, canvas) {\n  z = Number(z);\n  width = Number(width);\n  height = Number(height);\n  var tileDao = geopackage.getTileDao(table);\n  var retriever = new GeoPackageTileRetriever(tileDao, width, height);\n  var bounds = new BoundingBox(minLon, maxLon, minLat, maxLat);\n  return retriever.drawTileWithWgs84BoundsInProjection(bounds, z, 'EPSG:4326', canvas);\n}\n\n\n///////////////////\n// JSDoc Globals //\n///////////////////\n\n/**\n * @callback geopackageCallback\n * @param {?Error} error\n * @param {module:geoPackage~GeoPackage=} geopackage a GeoPackage instance\n */\n\n /**\n  * An integer database key referencing a {@link module:core/srs~SpatialReferenceSystem} row in a GeoPackage database\n  * @typedef {number} SRSRef\n  * @see https://www.geopackage.org/spec121/index.html#spatial_ref_sys\n  */\n\n}).call(this,require('_process'))\n},{\"./boundingBox\":7,\"./dataColumns\":13,\"./db/dataTypes\":14,\"./db/geoPackageConnection\":15,\"./db/tableCreator\":19,\"./extension/index/featureTableIndex\":26,\"./extension/relatedTables/mediaTable\":35,\"./extension/relatedTables/relationType\":36,\"./extension/relatedTables/simpleAttributesTable\":39,\"./features/columns\":64,\"./features/user/featureColumn\":65,\"./geoPackage\":70,\"./geom/geometryData\":73,\"./tiles/features\":87,\"./tiles/retriever\":92,\"./tiles/tileBoundingBoxUtils\":93,\"./user/userColumn\":105,\"./validate/geoPackageValidate\":110,\"@mapbox/vector-tile\":113,\"_process\":284,\"fs\":177,\"geojson-vt\":226,\"path\":276,\"pbf\":277,\"reproject\":315,\"vt-pbf\":345,\"wkx\":360}],3:[function(require,module,exports){\n/**\n * @module attributes/attributeDao\n */\n\nvar UserDao = require('../user/userDao')\n  , AttributeRow = require('./attributeRow');\n\nvar util = require('util');\n\n/**\n * Attribute DAO for reading attribute user data tables\n * @class AttributeDao\n * @extends {module:user/userDao~UserDao}\n * @param  {module:geoPackage~GeoPackage} geopackage              geopackage object\n * @param  {module:attributes/attributeTable~AttributeTable} table           attribute table\n */\nvar AttributeDao = function(geoPackage, table) {\n  UserDao.call(this, geoPackage, table);\n  if (!table.contents) {\n    throw new Error('Attributes table has null Contents');\n  }\n  /**\n   * Contents of this AttributeDao\n   * @member {module:core/contents~Contents}\n   */\n  this.contents = table.contents;\n}\n\nutil.inherits(AttributeDao, UserDao);\n\n/**\n * Create a new attribute row with the column types and values\n * @param  {Array} columnTypes column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {moule:attributes/attributeRow~AttributeRow}             attribute row\n */\nAttributeDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new AttributeRow(this.table, columnTypes, values);\n};\n\n/**\n * Create a new attribute row\n * @return {module:attributes/attributeRow~AttributeRow} attribute row\n */\nAttributeDao.prototype.newRow = function () {\n  return new AttributeRow(this.table);\n};\n\nmodule.exports = AttributeDao;\n\n},{\"../user/userDao\":106,\"./attributeRow\":4,\"util\":343}],4:[function(require,module,exports){\n/**\n * AttributeRow module.\n * @module attributes/attributeRow\n */\n\nvar UserRow = require('../user/userRow');\nvar util = require('util');\n\n/**\n * Attribute Row containing the values from a single result set row\n * @class AttributeRow\n * @extends module:user/userRow~UserRow\n * @param  {module:attributes/attributeTable~AttributeTable} attributeTable attribute table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n */\nvar AttributeRow = function(attributeTable, columnTypes, values) {\n  UserRow.call(this, attributeTable, columnTypes, values);\n}\n\nutil.inherits(AttributeRow, UserRow);\n\nmodule.exports = AttributeRow;\n\n},{\"../user/userRow\":107,\"util\":343}],5:[function(require,module,exports){\n/**\n * @module attributes/attributeTable\n */\n\nvar UserTable = require('../user/userTable')\n  , ContentsDao = require('../core/contents').ContentsDao;\n\nvar util = require('util');\n\n/**\n * Represents a user attribute table\n * @class AttributeTable\n * @extends {module:user/userTable~UserTable}\n * @constructor\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   attribute columns\n */\nvar AttributeTable = function(tableName, columns) {\n  /**\n   * Contents of this AttributeTable\n   * @member {module:core/contents~Contents}\n   */\n  this.contents;\n\n  UserTable.call(this, tableName, columns);\n}\n\nutil.inherits(AttributeTable, UserTable);\n\n/**\n * Set the contents\n * @param  {module:core/contents~Contents} contents the contents\n */\nAttributeTable.prototype.setContents = function(contents) {\n  this.contents = contents;\n  if (contents.data_type !== ContentsDao.GPKG_CDT_ATTRIBUTES_NAME) {\n    throw new Error('The Contents of an Attributes Table must have a data type of ' + ContentsDao.GPKG_CDT_ATTRIBUTES_NAME);\n  }\n}\n\nmodule.exports = AttributeTable;\n\n},{\"../core/contents\":8,\"../user/userTable\":108,\"util\":343}],6:[function(require,module,exports){\n/**\n * attributeTableReader module.\n * @module attributes/attributeTableReader\n */\n\nvar UserTableReader = require('../user/userTableReader')\n  , AttributeTable = require('./attributeTable')\n  , DataTypes = require('../db/dataTypes');\n\nvar util = require('util');\n\n/**\n* Reads the metadata from an existing attribute table\n* @class AttributeTableReader\n* @extends {module:user/userTableReader~UserTableReader}\n* @classdesc Reads the metadata from an existing attributes table\n*/\nvar AttributeTableReader = function(tableName) {\n  UserTableReader.call(this, tableName);\n}\n\nutil.inherits(AttributeTableReader, UserTableReader);\n\n/**\n * @inheritdoc\n */\nAttributeTableReader.prototype.createTable = function (tableName, columns) {\n  return new AttributeTable(tableName, columns);\n};\n\nmodule.exports = AttributeTableReader;\n\n},{\"../db/dataTypes\":14,\"../user/userTableReader\":109,\"./attributeTable\":5,\"util\":343}],7:[function(require,module,exports){\nvar proj4 = require('proj4');\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\n/**\n * Create a new bounding box\n * @class BoundingBox\n * @param  {Number} minLongitudeOrBoundingBox minimum longitude or bounding box to copy (west)\n * @param  {Number} maxLongitude              maximum longitude (east)\n * @param  {Number} minLatitude               Minimum latitude (south)\n * @param  {Number} maxLatitude               Maximum latitude (north)\n * @return {BoundingBox}                      newly constructed bounding box\n */\nvar BoundingBox = function(minLongitudeOrBoundingBox, maxLongitude, minLatitude, maxLatitude) {\n  // if there is a second argument the first argument is the minLongitude\n  if (maxLongitude !== undefined) {\n    this.minLongitude = minLongitudeOrBoundingBox;\n    this.maxLongitude = maxLongitude;\n    this.minLatitude = minLatitude;\n    this.maxLatitude = maxLatitude;\n  } else {\n    var boundingBox = minLongitudeOrBoundingBox;\n    this.minLongitude = boundingBox.minLongitude;\n    this.maxLongitude = boundingBox.maxLongitude;\n    this.minLatitude = boundingBox.minLatitude;\n    this.maxLatitude = boundingBox.maxLatitude;\n  }\n}\n\nmodule.exports = BoundingBox;\n\n/**\n * Build a Geometry Envelope from the bounding box\n *\n * @return geometry envelope\n */\nBoundingBox.prototype.buildEnvelope = function () {\n  return {\n    minY: this.minLatitude,\n    minX: this.minLongitude,\n    maxY: this.maxLatitude,\n    maxX: this.maxLongitude\n  };\n};\n\nBoundingBox.prototype.toGeoJSON = function() {\n  return {\n    \"type\": \"Feature\",\n    \"properties\": {},\n    \"geometry\": {\n      \"type\": \"Polygon\",\n      \"coordinates\": [\n        [\n          [this.minLongitude,this.minLatitude],\n          [this.maxLongitude,this.minLatitude],\n          [this.maxLongitude,this.maxLatitude],\n          [this.minLongitude,this.maxLatitude],\n          [this.minLongitude,this.minLatitude]\n        ]\n      ]\n    }\n  };\n}\n\n/**\n * Determine if equal to the provided bounding box\n * @param  {BoundingBox} boundingBox bounding boundingBox\n * @return {Boolean}             true if equal, false if not\n */\nBoundingBox.prototype.equals = function (boundingBox) {\n  if (!boundingBox) {\n    return false;\n  }\n\n  if (this === boundingBox) {\n    return true;\n  }\n\n  return this.maxLatitude === boundingBox.maxLatitude\n    && this.minLatitude === boundingBox.minLatitude\n    && this.maxLongitude === boundingBox.maxLongitude\n    && this.maxLatitude === boundingBox.maxLatitude;\n};\n\nBoundingBox.prototype.projectBoundingBox = function (from, to) {\n  if (from && from !== 'undefined' && to && to !== 'undefined') {\n    var toProj = to.toUpperCase ? proj4(to) : to;\n    var fromProj = from.toUpperCase ? proj4(from) : from;\n    if (to.toUpperCase && to.toUpperCase() === 'EPSG:3857' && from.toUpperCase && from.toUpperCase() === 'EPSG:4326') {\n      this.maxLatitude = this.maxLatitude > 85.0511 ? 85.0511 : this.maxLatitude;\n      this.minLatitude = this.minLatitude < -85.0511 ? -85.0511 : this.minLatitude;\n      this.minLongitude = this.minLongitude < -180.0 ? -180.0 : this.minLongitude;\n      this.maxLongitude = this.maxLongitude > 180.0 ? 180.0 : this.maxLongitude;\n    }\n    var min = proj4(from, to, [this.minLongitude, this.minLatitude]);\n    var max = proj4(from, to, [this.maxLongitude, this.maxLatitude]);\n    var projected = new BoundingBox(min[0], max[0], min[1], max[1]);\n    return projected;\n  } else {\n    return this;\n  }\n};\n\n\n\n// /**\n//  *  Get a Map Rectangle representing the bounding box\n//  *\n//  *  @return map rectangle\n//  */\n// -(MKMapRect) getMapRect;\n//\n// /**\n//  *  Get a Coordinate Region of the bounding box\n//  *\n//  *  @return Coordinate Region\n//  */\n// -(MKCoordinateRegion) getCoordinateRegion;\n//\n// /**\n//  *  Get the Span of the bounding box\n//  *\n//  *  @return Span\n//  */\n// -(MKCoordinateSpan) getSpan;\n//\n// /**\n//  *  Get the center of the bounding box\n//  *\n//  *  @return center location\n//  */\n// -(CLLocationCoordinate2D) getCenter;\n//\n// /**\n//  *  Get with width and height of the bounding box in meters\n//  *\n//  *  @return bounding box size\n//  */\n// -(struct GPKGBoundingBoxSize) sizeInMeters;\n\n},{\"proj4\":285}],8:[function(require,module,exports){\n/**\n * Contents module.\n * @module core/contents\n */\n\nvar Dao = require('../../dao/dao')\n  , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao\n  , SpatialReferenceSystemDao = require('../srs').SpatialReferenceSystemDao\n  , TileMatrixDao = require('../../tiles/matrix').TileMatrixDao\n  , TileMatrixSetDao = require('../../tiles/matrixset').TileMatrixSetDao\n  , ColumnValues = require('../../dao/columnValues');\n\nvar util = require('util');\n\n/**\n * The Contents class models rows in the [`gpkg_contents`](https://www.geopackage.org/spec121/index.html#_contents)\n * table.  The contents table stores identifying and descriptive information\n * that an application can display to a user in a menu of geospatial data\n * available in a GeoPackage.\n * @class Contents\n * @see https://www.geopackage.org/spec121/index.html#_contents\n */\nvar Contents = function() {\n  /**\n   * the name of the tiles, or feature table\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * Type of data stored in the table:. “features” per clause Features,\n   * “tiles” per clause Tiles, or an implementer-defined value for other data\n   * tables per clause in an Extended GeoPackage.\n   * @member {string}\n   */\n  this.data_type;\n\n  /**\n   * A human-readable identifier (e.g. short name) for the table_name content\n   * @member {string}\n   */\n  this.identifier;\n\n  /**\n   * A human-readable description for the table_name content\n   * @member {string}\n   */\n  this.description;\n\n  /**\n   * timestamp value in ISO 8601 format as defined by the strftime function\n   * %Y-%m-%dT%H:%M:%fZ format string applied to the current time\n   * @member {Date}\n   */\n  this.last_change;\n\n  /**\n   * Bounding box minimum easting or longitude for all content in table_name\n   * @member {Number}\n   */\n  this.min_x;\n\n  /**\n   * Bounding box minimum northing or latitude for all content in table_name\n   * @member {Number}\n   */\n  this.min_y;\n\n  /**\n   * Bounding box maximum easting or longitude for all content in table_name\n   * @member {Number}\n   */\n  this.max_x;\n\n  /**\n   * Bounding box maximum northing or latitude for all content in table_name\n   * @member {Number}\n   */\n  this.max_y;\n\n  /**\n   * Unique identifier for each Spatial Reference System within a GeoPackage\n   * @member {SRSRef}\n   */\n  this.srs_id;\n}\n\n/**\n * Contents object. Provides identifying and descriptive information that an\n * application can display to a user in a menu of geospatial data that is\n * available for access and/or update.\n * @class ContentsDao\n * @extends {module:dao/dao~Dao}\n */\nvar ContentsDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(ContentsDao, Dao);\n\n/**\n * Creates a new Contents object\n * @return {module:core/contents~Contents} new Contents object\n */\nContentsDao.prototype.createObject = function () {\n  return new Contents();\n};\n\n/**\n * Get table names by table type\n * @param  {string} [tableType] table type to query for\n * @return {string[]}           Array of table names\n */\nContentsDao.prototype.getTables = function(tableType) {\n  var results;\n  if (tableType) {\n    var fieldValues = new ColumnValues();\n    fieldValues.addColumn(ContentsDao.COLUMN_DATA_TYPE, tableType);\n    results = this.queryForColumns('table_name', fieldValues);\n  } else {\n    results = this.queryForColumns('table_name');\n  }\n  var tableNames = [];\n  for (var i = 0; i < results.length; i++) {\n    tableNames.push(results[i].table_name);\n  }\n  return tableNames;\n}\n\n/**\n * Returns the proj4 projection for the Contents\n * @param  {module:core/contents~Contents} contents Contents to get the projection from\n * @return {proj4}          proj4 projection\n */\nContentsDao.prototype.getProjection = function (contents) {\n  var srs = this.getSrs(contents);\n  var srsDao = this.geoPackage.getSpatialReferenceSystemDao();\n  return srsDao.getProjection(srs);\n};\n\n/**\n * Get the SpatialReferenceSystemDao for the Contents\n * @param  {module:core/contents~Contents} contents Contents to get the SpatialReferenceSystemDao from\n * @return {module:core/srs~SpatialReferenceSystemDao}\n */\nContentsDao.prototype.getSrs = function (contents) {\n  var dao = this.geoPackage.getSpatialReferenceSystemDao();\n  return dao.queryForId(contents.srs_id);\n};\n\n/**\n * Get the GeometryColumns for the Contents\n * @param  {module:core/contents~Contents} contents Contents\n * @return {module:features/columns~GeometryColumns}\n */\nContentsDao.prototype.getGeometryColumns = function (contents) {\n  var dao = this.geoPackage.getGeometryColumnsDao();\n  // TODO what is causing this to need to be here and not up in the require section\n  var GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao;\n  var results = dao.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, contents.table_name);\n  if (!results || !results.length) return;\n  var gc = dao.createObject();\n  dao.populateObjectFromResult(gc, results[0]);\n  return gc;\n};\n\n/**\n * Get the TileMatrixSet for the Contents\n * @param  {module:core/contents~Contents} contents Contents\n * @return {module:tiles/matrixset~TileMatrixSet}\n */\nContentsDao.prototype.getTileMatrixSet = function (contents) {\n  var dao = this.geoPackage.getTileMatrixSetDao();\n  var results = dao.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, contents.table_name);\n  if (!results || !results.length) return;\n  var gc = dao.createObject();\n  dao.populateObjectFromResult(gc, results[0]);\n  return gc;\n};\n\n/**\n * Get the TileMatrix for the Contents\n * @param  {module:core/contents~Contents} contents Contents\n * @return {module:tiles/matrix~TileMatrix}\n */\nContentsDao.prototype.getTileMatrix = function (contents) {\n  var dao = this.geoPackage.getTileMatrixDao();\n  var results = dao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, contents.table_name);\n  if (!results || !results.length) return;\n  var tileMatricies = [];\n  for (var i = 0; i < results.length; i++) {\n    var gc = dao.createObject();\n    dao.populateObjectFromResult(gc, results[i]);\n    tileMatricies.push(gc);\n  }\n  return tileMatricies;\n};\n\nContentsDao.TABLE_NAME = \"gpkg_contents\";\nContentsDao.COLUMN_PK = \"table_name\";\nContentsDao.COLUMN_TABLE_NAME = \"table_name\";\nContentsDao.COLUMN_DATA_TYPE = \"data_type\";\nContentsDao.COLUMN_IDENTIFIER = \"identifier\";\nContentsDao.COLUMN_DESCRIPTION = \"description\";\nContentsDao.COLUMN_LAST_CHANGE = \"last_change\";\nContentsDao.COLUMN_MIN_X = \"min_x\";\nContentsDao.COLUMN_MIN_Y = \"min_y\";\nContentsDao.COLUMN_MAX_X = \"max_x\";\nContentsDao.COLUMN_MAX_Y = \"max_y\";\nContentsDao.COLUMN_SRS_ID = \"srs_id\";\n\nContentsDao.GPKG_CDT_FEATURES_NAME = \"features\";\nContentsDao.GPKG_CDT_TILES_NAME = \"tiles\";\nContentsDao.GPKG_CDT_ATTRIBUTES_NAME = \"attributes\";\n\nContentsDao.prototype.gpkgTableName = ContentsDao.TABLE_NAME;\nContentsDao.prototype.idColumns = [ContentsDao.COLUMN_PK];\n\nmodule.exports.ContentsDao = ContentsDao;\nContents.TABLE_NAME = ContentsDao.TABLE_NAME;\nmodule.exports.Contents = Contents;\n\n},{\"../../dao/columnValues\":10,\"../../dao/dao\":11,\"../../features/columns\":64,\"../../tiles/matrix\":90,\"../../tiles/matrixset\":91,\"../srs\":9,\"util\":343}],9:[function(require,module,exports){\n/**\n * SpatialReferenceSystem module.\n * @module core/srs\n */\n\nvar Dao = require('../../dao/dao');\n\nvar util = require('util')\n  , proj4 = require('proj4');\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\n/**\n * Spatial Reference System object. The coordinate reference system definitions it contains are referenced by the GeoPackage Contents and GeometryColumns objects to relate the vector and tile data in user tables to locations on the earth.\n * @class SpatialReferenceSystem\n */\nvar SpatialReferenceSystem = function() {\n  /**\n   * Human readable name of this SRS\n   * @member {string}\n   */\n  this.srs_name;\n  /**\n   * Unique identifier for each Spatial Reference System within a GeoPackage\n   * @member {Number}\n   */\n  this.srs_id;\n\n  /**\n   * Case-insensitive name of the defining organization e.g. EPSG or epsg\n   * @member {string}\n   */\n  this.organization;\n\n  /**\n   * Numeric ID of the Spatial Reference System assigned by the organization\n   * @member {Number}\n   */\n  this.organization_coordsys_id;\n\n  /**\n   * Well-known Text [32] Representation of the Spatial Reference System\n   * @member {string}\n   */\n  this.definition;\n\n  /**\n   * Human readable description of this SRS\n   * @member {string}\n   */\n  this.description;\n\n  /**\n   * Well-known Text Representation of the Spatial Reference System\n   * @member {string}\n   */\n  this.definition_12_063;\n};\n\n/**\n * Return the proj4 projection specified by this SpatialReferenceSystem\n * @return {proj4}\n */\nSpatialReferenceSystem.prototype.getProjection = function() {\n  if(this.organization === 'NONE') return {};\n  if(this.organization_coordsys_id === 4326 && (this.organization === 'EPSG' || this.organization === 'epsg')) {\n    return proj4('EPSG:4326');\n  } else if (this.definition_12_063 && this.definition_12_063 !== '' && this.definition_12_063 !== 'undefined') {\n      return proj4(this.definition_12_063);\n  } else if (this.definition && this.definition !== '' && this.definition !== 'undefined') {\n      return proj4(this.definition);\n  } else if (this.organization && this.organization_coordsys_id) {\n    return proj4(this.organization.toUpperCase() + ':' + this.organization_coordsys_id);\n  } else {\n    return {};\n  }\n}\n\n/**\n * Spatial Reference System Data Access Object\n * @class SpatialReferenceSystemDao\n * @extends {module:dao/dao~Dao}\n * @param {module:geoPackage~GeoPackage} geoPackage The GeoPackage object\n */\nvar SpatialReferenceSystemDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(SpatialReferenceSystemDao, Dao);\n\n/**\n * Create a new SpatialReferenceSystem object\n * @return {module:core/srs~SpatialReferenceSystem}\n */\nSpatialReferenceSystemDao.prototype.createObject = function () {\n  return new SpatialReferenceSystem();\n};\n\n/**\n * Get the Spatial Reference System for the provided id\n * @param  {Number}   srsId srs id\n * @return {module:core/srs~SpatialReferenceSystem}\n */\nSpatialReferenceSystemDao.prototype.getBySrsId = function(srsId) {\n  return this.queryForId(srsId);\n};\n\n/**\n * Return the proj4 projection specified by this SpatialReferenceSystem\n * @return {proj4}\n */\nSpatialReferenceSystemDao.prototype.getProjection = function (srs) {\n  return srs.getProjection();\n};\n\n/**\n * Creates the required EPSG WGS84 Spatial Reference System (spec\n * Requirement 11)\n * @return {Number} id of the created row\n */\nSpatialReferenceSystemDao.prototype.createWgs84 = function() {\n  var srs = this.getBySrsId(4326);\n  if (srs) {\n    return srs;\n  }\n  var srs = new SpatialReferenceSystem();\n  srs.srs_name = 'WGS 84 geodetic';\n  srs.srs_id = 4326;\n  srs.organization = 'EPSG';\n  srs.organization_coordsys_id = 4326;\n  srs.definition = 'GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]';\n  srs.description = 'longitude/latitude coordinates in decimal degrees on the WGS 84 spheroid';\n  if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {\n    srs.definition_12_063 = 'GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]';\n  }\n  return this.create(srs);\n}\n\n/**\n * Creates the required Undefined Cartesian Spatial Reference System (spec\n * Requirement 11)\n * @return {Number} id of the created row\n */\nSpatialReferenceSystemDao.prototype.createUndefinedCartesian = function() {\n  var srs = this.getBySrsId(-1);\n  if (srs) {\n    return srs;\n  }\n  var srs = new SpatialReferenceSystem();\n  srs.srs_name = 'Undefined cartesian SRS';\n  srs.srs_id = -1;\n  srs.organization = 'NONE';\n  srs.organization_coordsys_id = -1;\n  srs.definition = 'undefined';\n  srs.description = 'undefined cartesian coordinate reference system';\n  if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {\n    srs.definition_12_063 = 'undefined';\n  }\n  return this.create(srs);\n}\n\n/**\n * Creates the required Undefined Geographic Spatial Reference System (spec\n * Requirement 11)\n * @return {Number} id of the created row\n */\nSpatialReferenceSystemDao.prototype.createUndefinedGeographic = function() {\n  var srs = this.getBySrsId(0);\n  if (srs) {\n    return srs;\n  }\n  var srs = new SpatialReferenceSystem();\n  srs.srs_name = 'Undefined geographic SRS';\n  srs.srs_id = 0;\n  srs.organization = 'NONE';\n  srs.organization_coordsys_id = 0;\n  srs.definition = 'undefined';\n  srs.description = 'undefined geographic coordinate reference system';\n  if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {\n    srs.definition_12_063 = 'undefined';\n  }\n  return this.create(srs);\n}\n\n/**\n * Creates the Web Mercator Spatial Reference System if it does not already\n * exist\n * @return {Number} id of the created row\n */\nSpatialReferenceSystemDao.prototype.createWebMercator = function() {\n  var srs = this.getBySrsId(3857);\n  if (srs) {\n    return srs;\n  }\n  var srs = new SpatialReferenceSystem();\n  srs.srs_name = 'WGS 84 / Pseudo-Mercator';\n  srs.srs_id = 3857;\n  srs.organization = 'EPSG';\n  srs.organization_coordsys_id = 3857;\n  srs.definition = 'PROJCS[\"WGS 84 / Pseudo-Mercator\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],EXTENSION[\"PROJ4\",\"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs\"],AUTHORITY[\"EPSG\",\"3857\"]]';\n  srs.description = 'Spherical Mercator projection coordinate system';\n  if(this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) {\n    srs.definition_12_063 = 'PROJCS[\"WGS 84 / Pseudo-Mercator\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],EXTENSION[\"PROJ4\",\"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs\"],AUTHORITY[\"EPSG\",\"3857\"]]';\n  }\n  return this.create(srs);\n}\n\n/**\n * Spatial Reference System Table Name\n * @type {String}\n */\nSpatialReferenceSystemDao.TABLE_NAME = 'gpkg_spatial_ref_sys';\n\n/**\n * Table Name\n * @type {String}\n */\nSpatialReferenceSystemDao.prototype.gpkgTableName = SpatialReferenceSystemDao.TABLE_NAME;\n\n/**\n * srsName field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_SRS_NAME = \"srs_name\";\n\n/**\n * srsId field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_SRS_ID = \"srs_id\";\n\n/**\n * id field name, srsId\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_ID = SpatialReferenceSystemDao.COLUMN_SRS_ID;\n\n/**\n * organization field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_ORGANIZATION = \"organization\";\n\n/**\n * organizationCoordsysId field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_ORGANIZATION_COORDSYS_ID = \"organization_coordsys_id\";\n\n/**\n * definition field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_DEFINITION = \"definition\";\n\n/**\n * description field name\n * @type {String}\n */\nSpatialReferenceSystemDao.COLUMN_DESCRIPTION = \"description\";\n\n\nSpatialReferenceSystemDao.prototype.idColumns = [SpatialReferenceSystemDao.COLUMN_SRS_ID];\n\nmodule.exports.SpatialReferenceSystemDao = SpatialReferenceSystemDao;\nSpatialReferenceSystem.TABLE_NAME = SpatialReferenceSystemDao.TABLE_NAME;\nmodule.exports.SpatialReferenceSystem = SpatialReferenceSystem;\n\n},{\"../../dao/dao\":11,\"proj4\":285,\"util\":343}],10:[function(require,module,exports){\n/**\n * @module dao/columnValues\n */\n\n/**\n * Structure to define columns in a table\n * @class ColumnValues\n */\nvar ColumnValues = function() {\n  this.values = {};\n  this.columns = [];\n}\n\nmodule.exports = ColumnValues;\n\n/**\n * adds a column to the structure\n * @param  {string} columnName  name of column to add\n * @param  {module:user/userColumn~UserColumn} column column to add\n */\nColumnValues.prototype.addColumn = function (columnName, column) {\n  this.columns.push(columnName);\n  this.values[columnName] = column;\n};\n\n/**\n * Gets the column by name\n * @param  {string} columnName name of column\n * @return {module:user/userColumn~UserColumn}            user column\n */\nColumnValues.prototype.getValue = function (columnName) {\n  return this.values[columnName];\n};\n\n},{}],11:[function(require,module,exports){\n/**\n * Dao module.\n * @module dao/dao\n */\n\nvar sqliteQueryBuilder = require('../db/sqliteQueryBuilder')\n  , ColumnValues = require('./columnValues');\n\n/**\n * Base DAO\n * @class Dao\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n */\nvar Dao = function(geoPackage) {\n  /**\n   * GeoPackage object this dao belongs to\n   * @type {module:geoPackage~GeoPackage}\n   */\n  this.geoPackage = geoPackage;\n  /**\n   * Database connection to the sqlite file\n   * @type {module:db/geoPackageConnection~GeoPackageConnection}\n   */\n  this.connection = geoPackage.getDatabase();\n}\n\n/**\n * Copies object properties from result object to the object\n * @param  {Object} object object to copy properties to\n * @param  {Object} result object to copy properties from\n */\nDao.prototype.populateObjectFromResult = function (object, result) {\n  if (!result) return;\n  for (var key in result) {\n    object[key] = result[key];\n  }\n};\n\n/**\n * Checks if the table exists\n * @return  {Boolean}\n */\nDao.prototype.isTableExists = function () {\n  var results = this.connection.isTableExists(this.gpkgTableName);\n  return !!results;\n};\n\n/**\n * Refreshes the object by id\n * @param  {Object} object object to refresh\n * @return {Object}\n */\nDao.prototype.refresh = function(object) {\n  return this.queryForSameId(object);\n}\n\n/**\n * Query for object by id\n * @param  {object} id ID of the object to query for\n * @return {Object} object created from the raw database object\n */\nDao.prototype.queryForId = function(id) {\n  var whereString = this.buildPkWhere(id);\n  var whereArgs = this.buildPkWhereArgs(id);\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString);\n  var result = this.connection.get(query, whereArgs);\n  if (!result) return;\n  var object = this.createObject(result);\n  // TOOD something is wrong here\n  this.populateObjectFromResult(object, result);\n  return object;\n};\n\nDao.prototype.queryForSameId = function (object) {\n  var idArray = this.getMultiId(object);\n  return this.queryForMultiId(idArray);\n};\n\nDao.prototype.getMultiId = function (object) {\n  var idValues = [];\n  for (var i = 0; i < this.idColumns.length; i++) {\n    var idValue = object.values ? object.values[this.idColumns[i]] : object[this.idColumns[i]];\n    if (idValue !== undefined) {\n      idValues.push(idValue);\n    }\n  }\n  return idValues;\n};\n\n/**\n * Query for object by multi id\n * @param  {module:dao/columnValues~ColumnValues} idValues ColumnValues with the multi id\n * @return {Object} object created from the raw database object\n */\nDao.prototype.queryForMultiId = function (idValues) {\n  var whereString = this.buildPkWhere(idValues);\n  var whereArgs = this.buildPkWhereArgs(idValues);\n\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString);\n\n  var result = this.connection.get(query, whereArgs);\n  if (!result) return;\n  var object = this.createObject(result);\n  this.populateObjectFromResult(object, result);\n  return object;\n};\n\n/**\n * Queries for all matches and returns them in the callback.  Be aware this pulls all results into memory\n * @param  {string} [where]     Optional where clause\n * @param  {object[]} [whereArgs] Optional where args array\n * @return {Object[]} raw object array from the database\n */\nDao.prototype.queryForAll = function (where, whereArgs) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, where);\n  return this.connection.all(query, whereArgs);\n};\n\n/**\n * Queries for all matches and returns them in the callback.  Be aware this pulls all results into memory\n * @param  {string} fieldName name of the field to query for\n * @param  {string} value     value of the like clause\n * @return {Object[]} raw object array from the database\n */\nDao.prototype.queryForLike = function(fieldName, value) {\n  var values = new ColumnValues();\n  values.addColumn(fieldName, value);\n  var where = this.buildWhereLike(values);\n  var whereArgs = this.buildWhereArgs(value);\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, where);\n  return this.connection.all(query, whereArgs);\n}\n\n/**\n * Queries for all matches and returns them.  Only queries for the specified column name  Be aware this pulls all results into memory\n * @param {string}  columnName  name of the column to query for\n * @param {module:dao/columnValues~ColumnValues} [fieldValues] optional values to filter on\n * @return {Object[]} raw object array from the database\n */\nDao.prototype.queryForColumns = function (columnName, fieldValues) {\n  var where;\n  var whereArgs;\n  if (fieldValues) {\n    where = this.buildWhere(fieldValues);\n    whereArgs = this.buildWhereArgs(fieldValues);\n  }\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", [columnName], where);\n  return this.connection.all(query, whereArgs);\n};\n\n/**\n * Queries for all items in the table with a page size and page number\n * @param  {Number} pageSize size of the chunk to query for\n * @param  {Number} page     chunk number to query for\n * @return {Object[]} raw object array from the database\n */\nDao.prototype.queryForChunk = function(pageSize, page) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, undefined, undefined, undefined, undefined, this.idColumns[0], pageSize, page * pageSize);\n  return this.connection.all(query);\n};\n\n/**\n * Iterate all items in the table one at a time.  If no parameters are passed, iterates the entire table.  Returns an Iterable object\n * @param  {string} [field]   field to filter on\n * @param  {Object} [value]   value to filter on\n * @param  {string} [groupBy] group by clause\n * @param  {string} [having]  having clause\n * @param  {string} [orderBy] order by clause\n * @return {Iterable} iterable of database objects\n */\nDao.prototype.queryForEach = function (field, value, groupBy, having, orderBy) {\n  if (!field) {\n    var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\");\n    var count = 0;\n    return this.connection.each(query);\n  } else {\n    var whereString = this.buildWhereWithFieldAndValue(field, value);\n    var whereArgs = this.buildWhereArgs(value);\n    var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString);\n    return this.connection.each(query, whereArgs);\n  }\n};\n\n/**\n * Iterate all objects in thet able that match the ColumnValues passed in\n * @param  {module:dao/columnValues~ColumnValues} fieldValues ColumnValues to query for\n * @return {Iterable.Object}\n */\nDao.prototype.queryForFieldValues = function (fieldValues) {\n  var whereString = this.buildWhere(fieldValues);\n  var whereArgs = this.buildWhereArgs(fieldValues);\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString);\n  var count = 0;\n  return this.connection.each(query, whereArgs);\n};\n\n/**\n * Iterate all matching objects\n * @param  {string} join      join clause\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs array of where query values\n * @param  {string[]} columns   columns to query for\n * @return {Iterable.<Object>}\n */\nDao.prototype.queryJoinWhereWithArgs = function(join, where, whereArgs, columns) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", columns, where, join);\n  var count = 0;\n  return this.connection.each(query, whereArgs);\n}\n\n/**\n * Count all matching objects\n * @param  {string} join      join clause\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs array of where query values\n * @param  {string[]} columns   columns to query for\n * @return {Number}\n */\nDao.prototype.countJoinWhereWithArgs = function(join, where, whereArgs, columns) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", columns, where, join);\n  return this.connection.all(query, whereArgs).length;\n}\n\n/**\n * Iterate all distinct matching rows in the table\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs array of where query values\n * @return {Iterable.<Object>}\n */\nDao.prototype.queryWhereWithArgsDistinct = function(where, whereArgs) {\n  var query = sqliteQueryBuilder.buildQuery(true, \"'\"+this.gpkgTableName+\"'\", undefined, where);\n  var count = 0;\n  return this.connection.each(query, whereArgs);\n}\n\n/**\n * Iterate all matching rows\n * @param  {string} [where]     where clause\n * @param  {Object[]} [whereArgs] array of where query values\n * @param  {string} [groupBy]   group by clause\n * @param  {string} [having]    having clause\n * @param  {string} [orderBy]   order by clause\n * @param  {string} [limit]     limit clause\n * @return {Iterable.<Object>}\n */\nDao.prototype.queryWhere = function (where, whereArgs, groupBy, having, orderBy, limit) {\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, where, undefined, groupBy, having, orderBy, limit);\n  return this.connection.each(query, whereArgs);\n};\n\n/**\n * Get the primary key where clause\n * @param  {Object|Object[]} idValue id\n * @return {string} primary key where clause\n */\nDao.prototype.buildPkWhere = function(idValue) {\n  if (Array.isArray(idValue)) {\n    var idValuesArray = idValue;\n    var idColumnValues = new ColumnValues();\n    for (var i = 0; i < idValuesArray.length; i++) {\n      idColumnValues.addColumn(this.idColumns[i], idValuesArray[i]);\n    }\n    return this.buildWhere(idColumnValues);\n  }\n  return this.buildWhereWithFieldAndValue(this.idColumns, idValue);\n};\n\n/**\n * Get the primary key where args\n * @param  {Object} idValue id\n * @return {Object[]} where args\n */\nDao.prototype.buildPkWhereArgs = function (idValue) {\n  if (Array.isArray(idValue)) {\n    var idValuesArray = idValue;\n    var values = [];\n    for (var i = 0; i < idValuesArray.length; i++) {\n      values = values.concat(this.buildWhereArgs(idValuesArray[i]));\n    }\n    return values;\n  }\n  return this.buildWhereArgs(idValue);\n};\n\n/**\n * Build where (or selection) LIKE statement for fields\n * @param  {module:dao/columnValues~ColumnValues} fields    columns and values\n * @param  {string} operation AND or OR\n * @return {string} where clause\n */\nDao.prototype.buildWhereLike = function(fields, operation) {\n  var whereString = '';\n  for (var i = 0; i < fields.columns.length; i++) {\n    var column = fields.columns[i];\n    if (i) {\n      whereString += ' ' + operation + ' ';\n    }\n    whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column), 'like');\n  }\n  return whereString;\n}\n\n/**\n * Build where or selection statement for fields\n * @param  {module:dao/columnValues~ColumnValues} fields    columns and values\n * @param  {string} [operation=AND] AND or OR\n * @return {string} where clause\n */\nDao.prototype.buildWhere = function (fields, operation) {\n  operation = operation || 'and';\n  var whereString = '';\n\n  for (var i = 0; i < fields.columns.length; i++) {\n    var column = fields.columns[i];\n    if (i) {\n      whereString += ' ' + operation + ' ';\n    }\n    whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column));\n  }\n  return whereString;\n};\n\nDao.prototype.buildWhereArgs = function (values) {\n  var args = [];\n  if (Array.isArray(values)) {\n    for (var i = 0; i < values.length; i++) {\n      var value = values[i];\n      if (value !== undefined && value !== null) {\n        args.push(value);\n      }\n    }\n  } else if (values.columns) {\n    for (var i = 0; i < values.columns.length; i++) {\n      var column = values.columns[i];\n      var value = values.getValue(column);\n      if (value !== undefined && value !== null) {\n        args.push(value);\n      }\n    }\n  } else {\n    if(values !== undefined || values !== null) {\n      args.push(values);\n    }\n  }\n  return args.count ? null : args;\n};\n\n/**\n * Builds a where clause from the field and value with an optional operation.  If the value is empty, 'is null' is added to the query for the field\n * @param  {string} field     field name\n * @param  {Object} [value]     optional value to filter on\n * @param  {string} [operation='='] optional operation\n * @return {string} where clause\n */\nDao.prototype.buildWhereWithFieldAndValue = function (field, value, operation) {\n  operation = operation || '=';\n  var whereString = '' + field + ' ';\n  if(value === undefined || value === null){\n    whereString += \"is null\";\n  } else {\n    whereString += operation + ' ?';\n  }\n  return whereString;\n};\n\n/**\n * Query for all rows in the table that match\n * @param  {string} field   field to match\n * @param  {string} value   value to match\n * @param  {string} [groupBy] group by clause\n * @param  {string} [having]  having clause\n * @param  {string} [orderBy] order by clause\n * @return {Object[]} array of raw database objects\n */\nDao.prototype.queryForAllEq = function(field, value, groupBy, having, orderBy) {\n  var whereString = this.buildWhereWithFieldAndValue(field, value);\n  var whereArgs = this.buildWhereArgs(value);\n  var query = sqliteQueryBuilder.buildQuery(false, \"'\"+this.gpkgTableName+\"'\", undefined, whereString, undefined, groupBy, having, orderBy);\n  return this.connection.all(query, whereArgs);\n};\n\n/**\n * Count rows in the table optionally filtered by the parameters specified\n * @param  {module:dao/columnValues~ColumnValues|string} [fields] Either a ColumnValues object or a string specifying a field name\n * @param  {Object} [value]  value to filter on if fields is a string\n * @return {Number} count of objects\n */\nDao.prototype.count = function(fields, value) {\n  if (!fields) {\n    return this.connection.count(this.gpkgTableName);\n  }\n  var where;\n  var whereArgs;\n  var query;\n  if (fields.columns) {\n    where = this.buildWhere(fields, 'and');\n    whereArgs = this.buildWhereArgs(fields);\n    query = sqliteQueryBuilder.buildCount(\"'\"+this.gpkgTableName+\"'\", where);\n  } else {\n    whereString = this.buildWhereWithFieldAndValue(fields, value);\n    whereArgs = this.buildWhereArgs(value);\n    query = sqliteQueryBuilder.buildCount(\"'\"+this.gpkgTableName+\"'\", whereString);\n  }\n  var result = this.connection.get(query, whereArgs);\n  if (!result) return 0;\n  return result.count;\n}\n\n/**\n * Get the min of the column\n * @param  {string} column    column name\n * @param  {string} [where]     where clause\n * @param  {Object[]} [whereArgs] where args\n * @return {Number}\n */\nDao.prototype.minOfColumn = function (column, where, whereArgs) {\n  return this.connection.minOfColumn(\"'\"+this.gpkgTableName+\"'\", column, where, whereArgs);\n};\n\n/**\n * Get the max of the column\n * @param  {string} column    column name\n * @param  {string} [where]     where clause\n * @param  {Object[]} [whereArgs] where args\n * @return {Number}\n */\nDao.prototype.maxOfColumn = function (column, where, whereArgs) {\n  return this.connection.maxOfColumn(\"'\"+this.gpkgTableName+\"'\", column, where, whereArgs);\n};\n\n/**\n * Delete the object passed in.  Object is deleted by id\n * @param  {Object} object object to delete\n * @return {Number} number of objects deleted\n */\nDao.prototype.delete = function(object) {\n  if (object.getId) {\n    return this.deleteById(object.getId());\n  }\n  return this.deleteByMultiId(this.getMultiId(object));\n};\n\n/**\n * Delete the object specified by the id\n * @param  {Object} idValue id value\n * @return {Number} number of objects deleted\n */\nDao.prototype.deleteById = function(idValue) {\n  var where = this.buildPkWhere(idValue);\n  var whereArgs = this.buildPkWhereArgs(idValue);\n\n  return this.connection.delete(\"'\"+this.gpkgTableName+\"'\", where, whereArgs);\n};\n\n/**\n * Delete the object specified by the ids\n * @param  {module:dao/columnValues~ColumnValues} idValue id values\n * @return {Number} number of objects deleted\n */\nDao.prototype.deleteByMultiId = function(idValues) {\n  var where = this.buildPkWhere(idValues);\n  var whereArgs = this.buildPkWhereArgs(idValues);\n\n  return this.connection.delete(\"'\"+this.gpkgTableName+\"'\", where, whereArgs);\n};\n\n/**\n * Delete objects that match the query\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs where arguments\n * @return {Number} number of objects deleted\n */\nDao.prototype.deleteWhere = function(where, whereArgs) {\n  return this.connection.delete(\"'\"+this.gpkgTableName+\"'\", where, whereArgs);\n};\n\n/**\n * Delete all objects in the table\n * @return {Number} number of objects deleted\n */\nDao.prototype.deleteAll = function() {\n  return this.connection.delete(\"'\"+this.gpkgTableName+\"'\", '', []);\n};\n\n/**\n * Insert the object into the table\n * @param  {Object} object object to be inserted\n * @return {Number} id of the inserted object\n */\nDao.prototype.create = function(object) {\n  var sql = sqliteQueryBuilder.buildInsert(\"'\"+this.gpkgTableName+\"'\", object);\n  var insertObject = sqliteQueryBuilder.buildUpdateOrInsertObject(object);\n  return this.connection.insert(sql, insertObject);\n};\n\n/**\n * Update all rows that match the query\n * @param  {module:dao/columnValues~ColumnValues} values    values to insert\n * @param  {string} where     where clause\n * @param  {Object[]} whereArgs where arguments\n * @return {Number} number of objects updated\n */\nDao.prototype.updateWithValues = function (values, where, whereArgs) {\n  var update = sqliteQueryBuilder.buildUpdate(\"'\"+this.gpkgTableName+\"'\", values, where, whereArgs);\n  return this.connection.run(update.sql, update.args);\n};\n\n/**\n * Update the object specified\n * @param  {Object} object object with updated values\n * @return {Number} number of objects updated\n */\nDao.prototype.update = function(object) {\n  var updateValues = sqliteQueryBuilder.buildUpdateOrInsertObject(object);\n  var update = sqliteQueryBuilder.buildObjectUpdate(\"'\"+this.gpkgTableName+\"'\", object);\n  var multiId = this.getMultiId(object);\n  if (multiId.length) {\n  var where = ' where ';\n    for (var i = 0; i < multiId.length; i++) {\n      where += '\"' + this.idColumns[i] + '\" = $' + sqliteQueryBuilder.fixColumnName(this.idColumns[i]);\n      updateValues[sqliteQueryBuilder.fixColumnName(this.idColumns[i])] = multiId[i];\n    }\n    update += where;\n  }\n  return this.connection.run(update, updateValues);\n};\n\n/**\n * Queries for the object by id, and if it exists, updates it, otherwise creates a new object\n * @param  {Object} object object to update or create\n * @return {Number} number of objects modified\n */\nDao.prototype.createOrUpdate = function(object) {\n  var existing = this.queryForSameId(object);\n  if (!existing) {\n    return this.create(object);\n  } else {\n    return this.update(object);\n  }\n};\n\n/**\n * Drops this table\n * @return {Number} results of the drop\n */\nDao.prototype.dropTable = function() {\n  return this.connection.dropTable(this.gpkgTableName);\n};\n\nDao.prototype.rename = function(newName) {\n  var result = this.connection.run('ALTER TABLE ' + '\"' + this.gpkgTableName + '\" RENAME TO \"' + newName + '\"');\n  this.gpkgTableName = newName;\n}\n\nmodule.exports = Dao;\n\n},{\"../db/sqliteQueryBuilder\":17,\"./columnValues\":10}],12:[function(require,module,exports){\n/**\n * DataColumnConstraints module.\n * @module dataColumnConstraints\n */\n\nvar Dao = require('../dao/dao');\n\nvar util = require('util');\n\n/**\n * Contains data to specify restrictions on basic data type column values\n * @class DataColumnConstraints\n */\nvar DataColumnConstraints = function() {\n\n  /**\n   * Case sensitive name of constraint\n   * @member {string}\n   */\n  this.constraint_name;\n\n  /**\n   * Lowercase type name of constraint: range | enum | glob\n   * @member {string}\n   */\n  this.constraint_type;\n\n  /**\n   * Specified case sensitive value for enum or glob or NULL for range constraint_type\n   * @member {string}\n   */\n  this.value;\n\n  /**\n   * Minimum value for 'range' or NULL for 'enum' or 'glob' constraint_type\n   * @member {Number}\n   */\n  this.min;\n\n  /**\n   * 0 (false) if min value is exclusive, or 1 (true) if min value is inclusive\n   * @member {Number}\n   */\n  this.min_is_inclusive;\n\n  /**\n   * Maximum value for 'range' or NULL for 'enum' or 'glob' constraint_type\n   * @member {Number}\n   */\n  this.max;\n\n  /**\n   * 0 (false) if max value is exclusive, or 1 (true) if max value is inclusive\n   * @member {Number}\n   */\n  this.max_is_inclusive;\n\n  /**\n   * For ranges and globs, describes the constraing; for enums, describes the enum value.\n   */\n  this.description;\n\n}\n\n/**\n * Data Column Constraints Data Access Object\n * @class\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @extends {module:dao/dao~Dao}\n */\nvar DataColumnConstraintsDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(DataColumnConstraintsDao, Dao);\n\n/**\n * Creates a new DataColumnConstraints object\n * @return {module:dataColumnConstraints~DataColumnConstraints}\n */\nDataColumnConstraintsDao.prototype.createObject = function () {\n  return new DataColumnConstraints();\n};\n\n/**\n * query by constraint name\n * @param  {String} constraintName     constraint name\n * @return {Iterable}\n */\nDataColumnConstraintsDao.prototype.queryByConstraintName = function (constraintName) {\n  return this.queryForEach(DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, constraintName);\n};\n\n/**\n * Query by the unique column values\n * @param  {String} constraintName     constraint name\n * @param  {String} constraintType     constraint type\n * @param  {String} value              value\n * @return {module:dataColumnConstraints~DataColumnConstraints}\n */\nDataColumnConstraintsDao.prototype.queryUnique = function (constraintName, constraintType, value) {\n  var dataColumnConstraints = new DataColumnConstraints();\n  dataColumnConstraints.constraint_name = constraintName;\n  dataColumnConstraints.constraint_type = constraintType;\n  dataColumnConstraints.value = value;\n\n  return this.queryForSameId(dataColumnConstraints);\n};\n\nDataColumnConstraintsDao.TABLE_NAME = \"gpkg_data_column_constraints\";\nDataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME = \"constraint_name\";\nDataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE = \"constraint_type\";\nDataColumnConstraintsDao.COLUMN_VALUE = \"value\";\nDataColumnConstraintsDao.COLUMN_MIN = \"min\";\nDataColumnConstraintsDao.COLUMN_MIN_IS_INCLUSIVE = \"min_is_inclusive\";\nDataColumnConstraintsDao.COLUMN_MAX = \"max\";\nDataColumnConstraintsDao.COLUMN_MAX_IS_INCLUSIVE = \"max_is_inclusive\";\nDataColumnConstraintsDao.COLUMN_DESCRIPTION = \"description\";\n\nDataColumnConstraintsDao.ENUM_TYPE = 'enum';\nDataColumnConstraintsDao.GLOB_TYPE = 'glob';\nDataColumnConstraintsDao.RANGE_TYPE = 'range';\n\nDataColumnConstraintsDao.prototype.gpkgTableName = DataColumnConstraintsDao.TABLE_NAME;\nDataColumnConstraintsDao.prototype.idColumns = [DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, DataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE, DataColumnConstraintsDao.COLUMN_VALUE];\n\nmodule.exports.DataColumnConstraintsDao = DataColumnConstraintsDao;\nmodule.exports.DataColumnConstraints = DataColumnConstraints;\n\n},{\"../dao/dao\":11,\"util\":343}],13:[function(require,module,exports){\n/**\n * DataColumns module.\n * @module dataColumns\n */\n\nvar Dao = require('../dao/dao')\n  , ContentsDao = require('../core/contents').ContentsDao;\n\nvar util = require('util');\n\n/**\n * Stores minimal application schema identifying, descriptive and MIME type\n * information about columns in user vector feature and tile matrix data tables\n * that supplements the data available from the SQLite sqlite_master table and\n * pragma table_info(table_name) SQL function. The gpkg_data_columns data CAN be\n * used to provide more specific column data types and value ranges and\n * application specific structural and semantic information to enable more\n * informative user menu displays and more effective user decisions on the\n * suitability of GeoPackage contents for specific purposes.\n * @class DataColumns\n */\nvar DataColumns = function() {\n  /**\n   * the name of the tiles, or feature table\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * the name of the table column\n   * @member {string}\n   */\n  this.column_name;\n\n  /**\n   * A human-readable identifier (e.g. short name) for the column_name content\n   * @member {string}\n   */\n  this.name;\n\n  /**\n   * A human-readable formal title for the column_name content\n   * @member {string}\n   */\n  this.title;\n\n  /**\n   * A human-readable description for the table_name contente\n   * @member {string}\n   */\n  this.description;\n\n  /**\n   * MIME type of columnName if BLOB type or NULL for other types\n   * @member {string}\n   */\n  this.mime_type;\n\n  /**\n   * Case sensitive column value constraint name specified\n   */\n  this.constraint_name;\n}\n\n/**\n * Contents object. Provides identifying and descriptive information that an\n * application can display to a user in a menu of geospatial data that is\n * available for access and/or update.\n * @class\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @extends {module:dao/dao~Dao}\n */\nvar DataColumnsDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(DataColumnsDao, Dao);\n\n/**\n * Creates a new {module:dataColumns~DataColumns} object\n * @return {module:dataColumns~DataColumns}\n */\nDataColumnsDao.prototype.createObject = function () {\n  return new DataColumns();\n};\n\n/**\n * Get the Contents from the Data Columns\n * @param  {module:dataColumns~DataColumns} dataColumns data columns\n * @return {module:core/contents~Contents}             contents\n */\nDataColumnsDao.prototype.getContents = function (dataColumns) {\n  var cd = new ContentsDao(this.geoPackage);\n  return cd.queryForId(dataColumns.table_name);\n};\n\n/**\n * Query by constraint name\n * @param  {String} constraintName     constraint name\n * @return {Iterator} iterator of database objects\n */\nDataColumnsDao.prototype.queryByConstraintName = function (constraintName) {\n  return this.queryForEach(DataColumnsDao.COLUMN_CONSTRAINT_NAME, constraintName);\n};\n\n/**\n * Get DataColumn by column name and table name\n * @param  {String} tableName  table name\n * @param  {String} columnName column name\n * @return {module:dataColumns~DataColumns}\n */\nDataColumnsDao.prototype.getDataColumns = function (tableName, columnName) {\n  var exists = this.isTableExists();\n  if (!exists) {\n    return;\n  }\n  var where = this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_TABLE_NAME, tableName) +\n    ' and ' +\n    this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_COLUMN_NAME, columnName);\n  var values = [tableName, columnName];\n  var dataColumn;\n  for (var row of this.queryWhere(where, values)) {\n    dataColumn = row;\n  }\n  return dataColumn;\n};\n\nDataColumnsDao.TABLE_NAME = \"gpkg_data_columns\";\nDataColumnsDao.COLUMN_PK1 = \"table_name\";\nDataColumnsDao.COLUMN_PK2 = \"column_name\";\nDataColumnsDao.COLUMN_TABLE_NAME = \"table_name\";\nDataColumnsDao.COLUMN_COLUMN_NAME = \"column_name\";\nDataColumnsDao.COLUMN_NAME = \"name\";\nDataColumnsDao.COLUMN_TITLE = \"title\";\nDataColumnsDao.COLUMN_DESCRIPTION = \"description\";\nDataColumnsDao.COLUMN_MIME_TYPE = \"mime_type\";\nDataColumnsDao.COLUMN_CONSTRAINT_NAME = \"constraint_name\";\n\nDataColumnsDao.prototype.gpkgTableName = DataColumnsDao.TABLE_NAME;\nDataColumnsDao.prototype.idColumns = [DataColumnsDao.COLUMN_PK1, DataColumnsDao.COLUMN_PK2];\n\nmodule.exports.DataColumnsDao = DataColumnsDao;\nmodule.exports.DataColumns = DataColumns;\n\n},{\"../core/contents\":8,\"../dao/dao\":11,\"util\":343}],14:[function(require,module,exports){\n/**\n * @module db/dataTypes\n */\n\n/**\n * A boolean value representing true or false.\n * @type {String}\n */\nmodule.exports.GPKG_DT_BOOLEAN_NAME = \"BOOLEAN\";\n/**\n * 8-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_TINYINT_NAME = \"TINYINT\";\n/**\n * 16-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_SMALLINT_NAME = \"SMALLINT\";\n/**\n * 32-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_MEDIUMINT_NAME = \"MEDIUMINT\";\n/**\n * 64-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_INT_NAME = \"INT\";\n/**\n * 64-bit signed two’s complement integer.\n * @type {String}\n */\nmodule.exports.GPKG_DT_INTEGER_NAME = \"INTEGER\";\n/**\n * 32-bit IEEE floating point number.\n * @type {String}\n */\nmodule.exports.GPKG_DT_FLOAT_NAME = \"FLOAT\";\n/**\n * 64-bit IEEE floating point number.\n * @type {String}\n */\nmodule.exports.GPKG_DT_DOUBLE_NAME = \"DOUBLE\";\n/**\n * 64-bit IEEE floating point number.\n * @type {String}\n */\nmodule.exports.GPKG_DT_REAL_NAME = \"REAL\";\n/**\n * TEXT{(maxchar_count)}: Variable length string encoded in either UTF-8 or UTF-16, determined by PRAGMA encoding; see http://www.sqlite.org/pragma.html#pragma_encoding.\n * @type {String}\n */\nmodule.exports.GPKG_DT_TEXT_NAME = \"TEXT\";\n/**\n * BLOB{(max_size)}: Variable length binary data.\n * @type {String}\n */\nmodule.exports.GPKG_DT_BLOB_NAME = \"BLOB\";\n/**\n * ISO-8601 date string in the form YYYY-MM-DD encoded in either UTF-8 or UTF-16.\n * @type {String}\n */\nmodule.exports.GPKG_DT_DATE_NAME = \"DATE\";\n/**\n * ISO-8601 date/time string in the form YYYY-MM-DDTHH:MM:SS.SSSZ with T separator character and Z suffix for coordinated universal time (UTC) encoded in either UTF-8 or UTF-16.\n * @type {String}\n */\nmodule.exports.GPKG_DT_DATETIME_NAME = \"DATETIME\";\nmodule.exports.GPKG_DT_GEOMETRY_NAME = \"GEOMETRY\";\n\n/**\n * DataType enumeration\n * @typedef {object} GPKGDataType\n */\nmodule.exports.GPKGDataType = {};\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_BOOLEAN_NAME] = 0;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_TINYINT_NAME] = 1;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_SMALLINT_NAME] = 2;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_MEDIUMINT_NAME] = 3;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_INT_NAME] = 4;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_INTEGER_NAME] = 5;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_FLOAT_NAME] = 6;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_DOUBLE_NAME] = 7;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_REAL_NAME] = 8;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_TEXT_NAME] = 9;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_BLOB_NAME] = 10;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_DATE_NAME] = 11;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_DATETIME_NAME] = 12;\nmodule.exports.GPKGDataType[module.exports.GPKG_DT_GEOMETRY_NAME] = 13;\n\nmodule.exports.GPKGDataType.GPKG_DT_BOOLEAN = 0;\nmodule.exports.GPKGDataType.GPKG_DT_TINYINT = 1;\nmodule.exports.GPKGDataType.GPKG_DT_SMALLINT = 2;\nmodule.exports.GPKGDataType.GPKG_DT_MEDIUMINT = 3;\nmodule.exports.GPKGDataType.GPKG_DT_INT = 4;\nmodule.exports.GPKGDataType.GPKG_DT_INTEGER = 5;\nmodule.exports.GPKGDataType.GPKG_DT_FLOAT = 6;\nmodule.exports.GPKGDataType.GPKG_DT_DOUBLE = 7;\nmodule.exports.GPKGDataType.GPKG_DT_REAL = 8;\nmodule.exports.GPKGDataType.GPKG_DT_TEXT = 9;\nmodule.exports.GPKGDataType.GPKG_DT_BLOB = 10;\nmodule.exports.GPKGDataType.GPKG_DT_DATE = 11;\nmodule.exports.GPKGDataType.GPKG_DT_DATETIME = 12;\nmodule.exports.GPKGDataType.GPKG_DT_GEOMETRY = 13;\n\n\n/**\n * Return the name of the given data type.\n *\n * @param  {module:db/dataTypes~GPKGDataType} dataType the enum to retrieve the name for\n * @return {String} the string name of the given data type enum\n */\nmodule.exports.name = function(dataType) {\n  var name = undefined;\n\n  switch(dataType){\n    case module.exports.GPKGDataType.GPKG_DT_BOOLEAN:\n      name = module.exports.GPKG_DT_BOOLEAN_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_TINYINT:\n      name = module.exports.GPKG_DT_TINYINT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_SMALLINT:\n      name = module.exports.GPKG_DT_SMALLINT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_MEDIUMINT:\n      name = module.exports.GPKG_DT_MEDIUMINT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_INT:\n      name = module.exports.GPKG_DT_INT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_INTEGER:\n      name = module.exports.GPKG_DT_INTEGER_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_FLOAT:\n      name = module.exports.GPKG_DT_FLOAT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_DOUBLE:\n      name = module.exports.GPKG_DT_DOUBLE_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_REAL:\n      name = module.exports.GPKG_DT_REAL_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_TEXT:\n      name = module.exports.GPKG_DT_TEXT_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_BLOB:\n      name = module.exports.GPKG_DT_BLOB_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_DATE:\n      name = module.exports.GPKG_DT_DATE_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_DATETIME:\n      name = module.exports.GPKG_DT_DATETIME_NAME;\n      break;\n    case module.exports.GPKGDataType.GPKG_DT_GEOMETRY:\n      name = module.exports.GPKG_DT_GEOMETRY_NAME;\n      break;\n  }\n\n  return name;\n}\n\n/**\n * Return the data type enum value for the given name, ignoring case.\n *\n * @param  {String} name the name of the data type enum\n * @return {module:db/dataTypes~GPKGDataType} the enum value\n */\nmodule.exports.fromName = function(name) {\n  var value = 9;\n  if (name) {\n    name = name.toUpperCase();\n    value = module.exports.GPKGDataType[name];\n  }\n  return value;\n}\n\n},{}],15:[function(require,module,exports){\n(function (process,Buffer){\n/**\n * Connection to the SQLite file\n * @module db/geoPackageConnection\n */\n\nvar GeoPackageConstants = require('../geoPackageConstants');\n\nif (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) {\n  console.log('Better SQLite');\n} else {\n  console.log('SQL.js');\n}\n\n/**\n * Creates a connection to the SQLite file and when connected, returns a promise that resolves the connection.\n * This will create a {module:db/sqliteAdapter~Adapter} if running in node and the FORCE_SQLJS environment variable is not set.\n * This will create a {module:db/sqljsAdapter~Adapter} if running in the browser or the FORCE_SQLJS environment variable is set\n * @see {module:db/sqliteAdapter~Adapter}\n * @see {module:db/sqljsAdapter~Adapter}\n * @class\n * @param  {string} filePath path to the sqlite file\n * @return {Promise<module:db/geoPackageConnection~GeoPackageConnection>}\n * @todo change this constructor to return an actual `GeoPackageConnection` instance instead of a `Promise`\n */\nvar GeoPackageConnection = function(filePath) {\n  if (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) {\n    this.adapterCreator = require('./sqliteAdapter');\n  } else {\n    this.adapterCreator = require('./sqljsAdapter');\n  }\n\n  var promise = new Promise(function(resolve, reject) {\n    this.adapterCreator.createAdapter(filePath)\n    .then(function(adapter) {\n      this.adapter = adapter;\n      resolve(this);\n    }.bind(this))\n    .catch(function(error) {\n      reject(error);\n    });\n  }.bind(this));\n\n  return promise;\n}\n\n/**\n * Close the database.\n */\nGeoPackageConnection.prototype.close = function() {\n  this.adapter.close();\n}\n\n/**\n * exports the GeoPackage as a file\n * @param  {Function} callback called with an err and the buffer containing the contents of the file\n */\nGeoPackageConnection.prototype.export = function(callback) {\n  this.adapter.export(callback);\n}\n\n/**\n * Gets the raw connection to the database\n * @return {Object}\n */\nGeoPackageConnection.prototype.getDBConnection = function () {\n  return this.adapter.db;\n};\n\n/**\n * Connects to a GeoPackage database\n * @param  {Object} db database to connect to\n * @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)}\n */\nGeoPackageConnection.prototype.setDBConnection = function (db) {\n  return this.adapter = this.adapterCreator.createAdapterFromDb(db);\n};\n\n/**\n* Registers the given function so that it can be used by SQL statements\n* @param  {string} name               name of function to register\n* @param  {Function} functionDefinition function to register\n* @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)} the adapter in use\n*/\nGeoPackageConnection.prototype.registerFunction = function(name, functionDefinition) {\n  this.adapter.registerFunction(name, functionDefinition);\n  return this.adapter;\n}\n\n/**\n * Gets the first result from the query\n * @param  {string} sql    sql query to run\n * @param  {Array|Object} [params] array of substitution parameters\n * @return {object}\n */\nGeoPackageConnection.prototype.get = function (sql, params) {\n  return this.adapter.get(sql, params);\n};\n\n/**\n * Checks if table exists in database\n * @param {String} tableName\n * @returns {Boolean}\n */\nGeoPackageConnection.prototype.isTableExists = function (tableName) {\n  return this.adapter.isTableExists(tableName);\n};\n\n/**\n * Run the given SQL and return the results.\n * @param  {string} sql    sql to run\n * @param  {Array|Object} [params] array of substitution parameters\n * @return {{changes: number, lastInsertROWID: number}} object: `{ \"changes\": number, \"lastInsertROWID\": number }`\n * * `changes`: number of rows the statement changed\n * * `lastInsertROWID`: ID of the last inserted row\n */\nGeoPackageConnection.prototype.run = function (sql, params) {\n  return this.adapter.run(sql, params)\n};\n\n/**\n * Executes the query and returns all results in an array\n * @param  {string} sql sql to run\n * @param  {Array|Object} [params] substitution parameters\n * @return {Object[]}\n */\nGeoPackageConnection.prototype.all = function (sql, params) {\n  return this.adapter.all(sql, params);\n};\n\n/**\n * Executes the query and returns an Iterable object of results\n * @param  {string} sql    sql to run\n * @param  {Array|Object} [params] substitution parameters\n * @return {Iterable<Object>}\n */\nGeoPackageConnection.prototype.each = function (sql, params) {\n  return this.adapter.each(sql, params);\n};\n\n/**\n * Gets the minimum value from the column\n * @param  {string} table     table to query\n * @param  {string} column    column to get the min value from\n * @param  {string} [where]     where clause\n * @param  {Array|Object} [whereArgs] substitution parameters\n * @return {Object}\n */\nGeoPackageConnection.prototype.minOfColumn = function(table, column, where, whereArgs) {\n  var minStatement = 'select min('+column+') as min from ' + table;\n  if(where) {\n    minStatement += ' ';\n    if (where.indexOf('where')) {\n      where = 'where ' + where;\n    }\n    minStatement += where;\n  }\n  return this.adapter.get(minStatement, whereArgs).min;\n};\n\n/**\n * Gets the maximum value from the column\n * @param  {string} table     table to query\n * @param  {string} column    column to get the max value from\n * @param  {string} [where]     where clause\n * @param  {Array|Object} [whereArgs] substitution parameters\n * @return {Object}\n */\nGeoPackageConnection.prototype.maxOfColumn = function(table, column, where, whereArgs, callback) {\n  var maxStatement = 'select max('+column+') as max from ' + table;\n  if(where) {\n    maxStatement += ' ';\n    if (where.indexOf('where')) {\n      where = 'where ' + where;\n    }\n    maxStatement += where;\n  }\n  return this.adapter.get(maxStatement, whereArgs).max;\n};\n\n/**\n * Return the count of objects in the table\n * @param  {string} table table name\n * @param  {string} [where] where clause\n * @param  {Array|Object} [whereArgs] substitution parameters\n * @return {Number}\n */\nGeoPackageConnection.prototype.count = function(table, where, whereArgs) {\n  return this.adapter.count(table, where, whereArgs);\n};\n\n/**\n * Executes an insert statement and returns the last id inserted\n * @param  {string} sql    sql to insert\n * @param  {Array|Object} params substitution parameters\n * @return {Object} last row id inserted\n */\nGeoPackageConnection.prototype.insert = function (sql, params) {\n  return this.adapter.insert(sql, params);\n};\n\n/**\n * Delete from the table\n * @param  {string} tableName table name to delete from\n * @param  {string} [where]     where clause\n * @param  {Array|Object} [whereArgs] substitution parameters\n * @return {Number} number of rows deleted\n */\nGeoPackageConnection.prototype.delete = function(tableName, where, whereArgs) {\n  var deleteStatement = 'DELETE FROM ' + tableName + '';\n\n  if (where) {\n    deleteStatement += ' WHERE ' + where;\n  }\n\n  return this.adapter.delete(deleteStatement, whereArgs);\n};\n\n/**\n * Drops the table specified\n * @param  {string} tableName table to drop\n * @return {Boolean} results of table drop\n */\nGeoPackageConnection.prototype.dropTable = function(tableName) {\n  return this.adapter.dropTable(tableName);\n};\n\n/**\n * Gets information about the table specified.  If data is returned, the table exists\n * @param  {string} tableName table to check\n * @return {Object}\n */\nGeoPackageConnection.prototype.tableExists = function(tableName) {\n  return this.adapter.get('SELECT name FROM sqlite_master WHERE type=\"table\" AND name=?', [tableName]);\n};\n\n/**\n * Checks if a table and column exist\n * @param  {string} tableName  table to check\n * @param  {string} columnName column to check\n * @return {Boolean}\n */\nGeoPackageConnection.prototype.columnAndTableExists = function(tableName, columnName) {\n  var columns = this.adapter.all('PRAGMA table_info(\\''+tableName+'\\')');\n  for (var i = 0; i < columns.length; i++) {\n    if (columns[i].name === columnName) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Sets the APPLICATION_ID and user_version for GeoPackage\n */\nGeoPackageConnection.prototype.setApplicationId = function() {\n  var buff = Buffer.from(GeoPackageConstants.APPLICATION_ID);\n  var applicationId = buff.readUInt32BE(0);\n  this.adapter.run('PRAGMA application_id = ' + applicationId);\n  this.adapter.run('PRAGMA user_version = ' + GeoPackageConstants.USER_VERSION);\n}\n\n/**\n * gets the application_id from the sqlite file\n * @return {Object}\n */\nGeoPackageConnection.prototype.getApplicationId = function() {\n  return this.adapter.get('PRAGMA application_id').application_id;\n}\n\nmodule.exports = GeoPackageConnection;\n\n/**\n * Convenience method\n * @see {module:db/geoPackageConnection~GeoPackageConnection}\n * @see {module:db/sqliteAdapter~Adapter}\n * @see {module:db/sqljsAdapter~Adapter}\n * @param  {string|Buffer} filePath string path to an existing file or a path to where a new file will be created or a Buffer containing the contents of the file, if undefined, an in memory database is created\n * @return {Promise} that resolves\n */\nGeoPackageConnection.connect = function(filePath) {\n  return new GeoPackageConnection(filePath);\n}\n\n/**\n * Convenience method\n * @param  {Object}   db       open database to connect to\n * @return {Promise}\n */\nGeoPackageConnection.connectWithDatabase = function(db) {\n  return new GeoPackageConnection(undefined)\n  .then(function(connection) {\n    connection.setDBConnection(db);\n  });\n}\n\n}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"../geoPackageConstants\":71,\"./sqliteAdapter\":16,\"./sqljsAdapter\":18,\"_process\":284,\"buffer\":182}],16:[function(require,module,exports){\n/**\n * This adapter uses better-sqlite3 to execute queries against the GeoPackage database\n * @module db/sqliteAdapter\n * @see {@link https://github.com/JoshuaWise/better-sqlite3|better-sqlite3}\n */\n\nvar fs = require('fs')\n  , path = require('path')\n  , http = require('http')\n  , Buffer = require('buffer')\n  , os = require('os');\n\n/**\n * Returns a Promise which, when resolved, returns a {module:db/sqliteAdapter~Adapter} which has connected to the GeoPackage database file\n * @param  {string|Buffer} [filePath] string path to an existing file or a path to where a new file will be created or a Buffer containing the contents of the file, if undefined, an in memory database is created\n * @return {Promise<module:db/sqliteAdapter~Adapter>}\n */\nmodule.exports.createAdapter = function(filePath) {\n  var promise = new Promise(function(resolve, reject) {\n    var Database = require('better-sqlite3');\n    try {\n      var db;\n      if (filePath && typeof filePath === 'string') {\n        if (filePath.indexOf('http') === 0) {\n          http.get(filePath, function(response) {\n            if (response.statusCode !== 200) {\n              return reject(new Error('Unable to reach url: ' + filePath));\n            }\n            var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg');\n            var writeStream = fs.createWriteStream(tmpPath);\n            response.pipe(writeStream);\n            writeStream.on('close', function() {\n              try {\n                db = new Database(tmpPath);\n                // verify that this is an actual database\n                var applicationId = db.pragma('application_id');\n                db.pragma('journal_mode = WAL');\n                var adapter = new Adapter(db);\n                adapter.filePath = tmpPath;\n                resolve(adapter);\n              } catch (err) {\n                console.log('error', err);\n                return reject(err);\n              }\n            });\n          });\n        } else {\n          db = new Database(filePath);\n          var adapter = new Adapter(db);\n          adapter.filePath = filePath;\n          resolve(adapter);\n        }\n      } else if (filePath) {\n        // write this byte array to a file then open it\n        var byteArray = filePath;\n        var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg');\n        return fs.writeFile(tmpPath, byteArray, function(err) {\n          db = new Database(tmpPath);\n          // verify that this is an actual database\n          try {\n            var applicationId = db.pragma('application_id');\n            db.pragma('journal_mode = WAL');\n          } catch (err) {\n            console.log('error', err);\n            return reject(err);\n          }\n          var adapter = new Adapter(db);\n          adapter.filePath = tmpPath;\n          resolve(adapter);\n        });\n      } else {\n        console.log('create in memory');\n        db = new Database(\"memory\", {\n          memory: !filePath\n        });\n        var adapter = new Adapter(db);\n        adapter.filePath = filePath;\n        resolve(adapter);\n      }\n\n    } catch (err) {\n      console.log('Error opening database', err);\n      return reject(err);\n    }\n  });\n  return promise;\n}\n/**\n * Creates an adapter from an already established better-sqlite3 database connection\n * @param  {better-sqlite3.Database} db better-sqlite3 database connection\n * @return {module:db/sqliteAdapter~Adapter}\n */\nmodule.exports.createAdapterFromDb = function(db) {\n  return new Adapter(db);\n}\n\n/**\n * Class which adapts generic GeoPackage queries to better-sqlite3 queries\n * @class Adapter\n * @param {better-sqlite3.Database} db better-sqlite3 database connection\n */\nfunction Adapter(db) {\n  this.db = db;\n}\n\n/**\n * Closes the connection to the GeoPackage\n */\nAdapter.prototype.close = function() {\n  this.db.close();\n}\n\n/**\n * Get the connection to the database file\n * @return {better-sqlite3.Database}\n */\nAdapter.prototype.getDBConnection = function () {\n  return this.db;\n};\n\n/**\n * Returns a Buffer containing the contents of the database as a file\n * @param  {Function} callback called when export is complete\n */\nAdapter.prototype.export = function(callback) {\n  fs.readFile(this.filePath, callback);\n}\n\n/**\n * Registers the given function so that it can be used by SQL statements\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#registeroptions-function---this|better-sqlite3 register}\n * @param  {string} name               name of function to register\n * @param  {Function} functionDefinition function to register\n * @return {module:db/sqliteAdapter~Adapter} this\n */\nAdapter.prototype.registerFunction = function(name, functionDefinition) {\n  this.db.function(name, functionDefinition);\n  return this;\n}\n\n/**\n * Gets one row of results from the statement\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#getbindparameters---row|better-sqlite3 get}\n * @param  {string} sql    statement to run\n * @param  {Array|Object} [params] bind parameters\n * @return {Object}\n */\nAdapter.prototype.get = function (sql, params) {\n  var statement = this.db.prepare(sql);\n  if (params) {\n    return statement.get(params);\n  } else {\n    return statement.get();\n  }\n};\n\n/**\n * Determines if a tableName exists in the database\n * @param {String} tableName\n * @returns {Boolean}\n */\nAdapter.prototype.isTableExists = function (tableName) {\n  var statement = this.db.prepare(\"SELECT name FROM sqlite_master WHERE type='table' AND name=:name\");\n  var result;\n  result = statement.get({name: tableName});\n  return !!result;\n};\n\n/**\n * Gets all results from the statement in an array\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#allbindparameters---array-of-rows|better-sqlite3 all}\n * @param  {string} sql    statement to run\n * @param  {Array|Object} [params] bind parameters\n * @return {Object[]}\n */\nAdapter.prototype.all = function (sql, params) {\n  var statement = this.db.prepare(sql);\n  if (params) {\n    return statement.all(params);\n  } else {\n    return statement.all();\n  }\n};\n\n/**\n * Returns an `Iterable` with results from the query\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#iteratebindparameters---iterator|better-sqlite3 iterate}\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {Iterable<Object>}\n */\nAdapter.prototype.each = function (sql, params) {\n  var statement = this.db.prepare(sql);\n  if (params) {\n    return statement.iterate(params);\n  } else {\n    return statement.iterate();\n  }\n};\n\n/**\n * Run the given statement, returning information about what changed.\n *\n * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#runbindparameters---object|better-sqlite3}\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {{changes: number, lastInsertROWID: number}} object: `{ \"changes\": number, \"lastInsertROWID\": number }`\n * * `changes`: number of rows the statement changed\n * * `lastInsertROWID`: ID of the last inserted row\n */\nAdapter.prototype.run = function(sql, params) {\n  var statement = this.db.prepare(sql);\n  if (params) {\n    return statement.run(params);\n  } else {\n    return statement.run();\n  }\n}\n\n/**\n * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {Number} last inserted row id\n */\nAdapter.prototype.insert = function(sql, params) {\n  var statement = this.db.prepare(sql);\n  return statement.run(params).lastInsertRowid;\n};\n\n/**\n * Runs the specified delete statement and returns the number of deleted rows\n * @param  {string} sql    statement to run\n * @param  {Object|Array} params bind parameters\n * @return {number} deleted rows\n */\nAdapter.prototype.delete = function(sql, params) {\n  var statement = this.db.prepare(sql);\n  return statement.run(params).changes;\n};\n\n/**\n * Drops the table\n * @param  {string} table table name\n * @return {Boolean} indicates if the table was dropped\n */\nAdapter.prototype.dropTable = function(table) {\n  try {\n    var statement = this.db.prepare('DROP TABLE IF EXISTS \"' + table + '\"');\n    var result = statement.run();\n    var vacuum = this.db.prepare('VACUUM');\n    vacuum.run();\n    return result.changes == 0;\n  } catch (e) {\n    console.log('Drop Table Error', e);\n    return false;\n  }\n};\n\n/**\n * Counts rows that match the query\n * @param  {string} tableName table name from which to count\n * @param  {string} [where]     where clause\n * @param  {Object|Array} [whereArgs] where args\n * @return {Number} count\n */\nAdapter.prototype.count = function (tableName, where, whereArgs) {\n  var sql = 'SELECT COUNT(*) as count FROM \"' + tableName + '\"';\n  if (where) {\n    sql += ' where ' + where;\n  }\n  var statement = this.db.prepare(sql);\n  if (whereArgs) {\n    return statement.get(whereArgs).count;\n  } else {\n    return statement.get().count;\n  }\n};\n\n},{\"better-sqlite3\":undefined,\"buffer\":182,\"fs\":177,\"http\":329,\"os\":270,\"path\":276}],17:[function(require,module,exports){\n/**\n * SQLite query builder module.\n * @module db/sqliteQueryBuilder\n */\n\n/**\n * Utility class to build sql queries\n * @class\n */\nfunction SqliteQueryBuilder() {}\n\nmodule.exports = SqliteQueryBuilder;\n\n/**\n * Replaces all whitespace in a column name with underscores\n * @param  {string} columnName column name to fix\n * @return {string}\n */\nSqliteQueryBuilder.fixColumnName = function(columnName) {\n  return columnName.replace(/\\W+/g, '_');\n}\n\n/**\n * Builds a query\n * @param  {Boolean} distinct whether query should be distinct or not\n * @param  {string} tables   table names to query, added to the query from clause\n * @param  {string[]} [columns=*]  columns to query for\n * @param  {string} [where]    where clause\n * @param  {string} [join]     join clause\n * @param  {string} [groupBy]  group by clause\n * @param  {string} [having]   having clause\n * @param  {string} [orderBy]  order by clause\n * @param  {Number} [limit]    limit\n * @param  {Number} [offset]   offset\n * @return {string}\n */\nSqliteQueryBuilder.buildQuery = function(distinct, tables, columns, where, join, groupBy, having, orderBy, limit, offset) {\n\n  var query = '';\n  if (isEmpty(groupBy) && !isEmpty(having)) {\n    throw new Error('Illegal Arguments: having clauses require a groupBy clause');\n  }\n\n  query += 'select ';\n  if (distinct) {\n    query += 'distinct ';\n  }\n  if(columns && columns.length) {\n    query = appendColumnsToString(columns, query);\n  } else {\n    query += '* ';\n  }\n\n  query += 'from ' + tables;\n  if (join) {\n    query += ' ' + join;\n  }\n  query = appendClauseToString(query, ' where ', where);\n  query = appendClauseToString(query, ' group by ', groupBy);\n  query = appendClauseToString(query, ' having ', having);\n  query = appendClauseToString(query, ' order by ', orderBy);\n  query = appendClauseToString(query, ' limit ', limit);\n  query = appendClauseToString(query, ' offset ', offset);\n\n  return query;\n}\n\n/**\n * Builds a count statement\n * @param  {string} tables table names to query for\n * @param  {string} [where]  where clause\n * @return {string} count statement\n */\nSqliteQueryBuilder.buildCount = function(tables, where) {\n  var query = 'select count(*) as count from ' + tables;\n  query = appendClauseToString(query, ' where ', where);\n  return query;\n}\n\n/**\n * Builds an insert statement using the properties of the object\n * @param  {string} table  table to insert into\n * @param  {Object} object object to insert\n * @return {string} insert statement\n */\nSqliteQueryBuilder.buildInsert = function(table, object) {\n  if (object.getColumnNames) {\n    return SqliteQueryBuilder.buildInsertFromColumnNames(table, object);\n  }\n  var insert = 'insert into ' + table + ' (';\n  var keys = '';\n  var values = '';\n  var first = true;\n  for (var key in object) {\n    if (object.hasOwnProperty(key)) {\n      if (!first) {\n        keys += ',';\n        values += ',';\n      }\n      first = false;\n      keys += key;\n      values += '$' + SqliteQueryBuilder.fixColumnName(key);\n    }\n  }\n\n  insert += keys + ') values (' + values + ')';\n  return insert;\n}\n\n/**\n * Builds an insert statement from the object.getColumnNames method\n * @param  {string} table  table to insert into\n * @param  {Object} object object with a getColumnNames method\n * @return {string} insert statement\n */\nSqliteQueryBuilder.buildInsertFromColumnNames = function(table, object) {\n  var insert = 'insert into ' + table + ' (';\n  var keys = '';\n  var values = '';\n  var first = true;\n  var columnNames = object.getColumnNames();\n  for (var i = 0; i < columnNames.length; i++) {\n    var key = columnNames[i];\n    if (!first) {\n      keys += ',';\n      values += ',';\n    }\n    first = false;\n    keys += '\"' + key + '\"';\n    values += '$' + SqliteQueryBuilder.fixColumnName(key);\n  }\n\n  insert += keys + ') values (' + values + ')';\n  return insert;\n}\n\n/**\n * Builds an update or insert object to bind to a statement\n * @param  {Object} object object to create bind parameters from\n * @return {Object} bind parameters\n */\nSqliteQueryBuilder.buildUpdateOrInsertObject = function(object) {\n  var insertOrUpdate = {};\n  if (object.getColumnNames) {\n    var columnNames = object.getColumnNames();\n    for (var i = 0; i < columnNames.length; i++) {\n      insertOrUpdate[SqliteQueryBuilder.fixColumnName(columnNames[i])] = object.toDatabaseValue(columnNames[i]);\n    }\n  } else {\n    for (var key in object) {\n      if (object.hasOwnProperty(key)) {\n        if (object.toDatabaseValue) {\n          insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object.toDatabaseValue(key);\n        } else {\n          if (typeof object[key] == 'boolean') {\n            insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key] ? 1 : 0;\n          } else {\n            insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key];\n          }\n        }\n      }\n    }\n  }\n  return insertOrUpdate;\n}\n\n/**\n * Builds an update statement\n * @param  {string} table     table to update\n * @param  {Object} values    object with values to update\n * @param  {string} [where]     where clause\n * @param  {Array|Ojbect} [whereArgs] where bind parameters\n * @return {Object} object with a sql property containing the update statement and an args property with bind arguments\n */\nSqliteQueryBuilder.buildUpdate = function(table, values, where, whereArgs) {\n  var args = [];\n  var update = 'update ' + table + ' set ';\n  var first = true;\n  for (var columnName in values) {\n    if (!first) {\n      update += ', ';\n    }\n    first = false;\n    update += '\"'+ columnName + '\"';\n    args.push(values[columnName]);\n    update += '=?';\n  }\n  if (whereArgs) {\n    for (var i = 0; i < whereArgs.length; i++) {\n      args.push(whereArgs[i]);\n    }\n  }\n  if (where) {\n    update += ' where ';\n    update += where;\n  }\n  return {\n    sql: update,\n    args: args\n  };\n}\n\n/**\n * Builds an update from an object\n * @param  {string} table  table name to update\n * @param  {Object} object object with values to update\n * @return {string} update statement\n */\nSqliteQueryBuilder.buildObjectUpdate = function(table, object) {\n  var update = 'update ' + table + ' set ';\n  var first = true;\n  if (object.getColumnNames) {\n    var columnNames = object.getColumnNames();\n\n    for (var i = 0; i < columnNames.length; i++) {\n      var key = columnNames[i];\n      if (!first) {\n        update += ', ';\n      }\n      first = false;\n      update += '\"' + key + '\"=';\n      update += '$' + SqliteQueryBuilder.fixColumnName(key);\n    }\n  } else {\n    for (var key in object) {\n      if (!first) {\n        update += ', ';\n      }\n      first = false;\n\n      if (object.hasOwnProperty(key)) {\n        update += '\"' + key + '\"=';\n        update += '$' + SqliteQueryBuilder.fixColumnName(key);\n      }\n    }\n  }\n\n  return update;\n}\n\nfunction appendClauseToString(string, name, clause) {\n  if (clause) {\n    string += name + clause;\n  }\n  return string;\n}\n\nfunction appendColumnsToString(columns, string) {\n  if (!columns || columns.length == 0) return string;\n  string += columnToAppend(columns[0]);\n  for (var i = 1; i < columns.length; i++) {\n    string += ', ' + columnToAppend(columns[i]);\n  }\n  string += ' ';\n  return string;\n}\n\nfunction columnToAppend(column) {\n  return column.indexOf('*') != -1 ? column : '\"' + column + '\"';\n}\n\nfunction isEmpty(string) {\n  return !string || string.length === 0;\n}\n\n},{}],18:[function(require,module,exports){\n(function (process,Buffer){\n/**\n * This adapter uses sql.js to execute queries against the GeoPackage database\n * @module db/sqljsAdapter\n * @see {@link http://kripken.github.io/sql.js/documentation/|sqljs}\n */\n\nvar sqljs = require('sql.js/dist/sql-asm-memory-growth.js');\n// var sqljs = require('sql.js/js/sql.js');\n\n/**\n * Returns a Promise which, when resolved, returns a {module:db/sqljsAdapter~Adapter} which has connected to the GeoPackage database file\n * @param  {string|Buffer} [filePath] string path to an existing file or a path to where a new file will be created or a url from which to download a GeoPackage or a Uint8Array containing the contents of the file, if undefined, an in memory database is created\n * @return {Promise<module:db/sqjsAdapter~Adapter>}\n */\nmodule.exports.createAdapter = function(filePath) {\n  var promise = new Promise(function(resolve, reject) {\n    sqljs().then(SQL => {\n      if (filePath && typeof filePath === 'string') {\n        if (typeof (process) !== 'undefined' && process.version) {\n          var fs = require('fs');\n          if (filePath.indexOf('http') === 0) {\n            var http = require('http');\n            http.get(filePath, function(response) {\n              if (response.statusCode !== 200) {\n                return reject(new Error('Unable to reach url: ' + filePath));\n              }\n              var body = [];\n              response.on('data', chunk => body.push(chunk));\n              response.on('end', function() {\n                var t = new Uint8Array(Buffer.concat(body));\n                var db = new SQL.Database(t);\n                var adapter = new Adapter(db);\n                resolve(adapter);\n              });\n            });\n          } else {\n            try {\n              var stats = fs.statSync(filePath);\n            } catch (e) {\n              var db = new SQL.Database();\n              var adapter = new Adapter(db);\n              return resolve(adapter);\n            }\n            var filebuffer = fs.readFileSync(filePath);\n            var t = new Uint8Array(filebuffer);\n            var db = new SQL.Database(t);\n            // console.log('setting wal mode');\n            // var walMode = db.exec('PRAGMA journal_mode=DELETE');\n            // console.log('walMode', walMode);\n            var adapter = new Adapter(db);\n            return resolve(adapter);\n          }\n        } else {\n          var xhr = new XMLHttpRequest();\n          xhr.open('GET', filePath, true);\n          xhr.responseType = 'arraybuffer';\n\n          xhr.onload = function (e) {\n            if (xhr.status !== 200) {\n              return reject(new Error('Unable to reach url: ' + filePath));\n            }\n            var uInt8Array = new Uint8Array(this.response);\n            var db = new SQL.Database(uInt8Array);\n            var adapter = new Adapter(db);\n            return resolve(adapter);\n          };\n          xhr.onerror = function (e) {\n            return reject(new Error('Error reaching url: ' + filePath));\n          };\n          xhr.send();\n        }\n      } else if (filePath) {\n        var byteArray = filePath;\n        var db = new SQL.Database(byteArray);\n        var adapter = new Adapter(db);\n        return resolve(adapter);\n      } else {\n        var db = new SQL.Database();\n        var adapter = new Adapter(db);\n        return resolve(adapter);\n      }\n    });\n  });\n\n  return promise;\n}\n\n/**\n * Creates an adapter from an already established better-sqlite3 database connection\n * @param  {sqljs.Database} db sqljs database connection\n * @return {module:db/sqljsAdapter~Adapter}\n */\nmodule.exports.createAdapterFromDb = function(db) {\n  return new Adapter(db);\n}\n\n/**\n * Class which adapts generic GeoPackage queries to sqljs queries\n * @class Adapter\n * @param {sqljs.Database} db sqljs database connection\n */\nfunction Adapter(db) {\n  this.db = db;\n}\n\n/**\n * Closes the connection to the GeoPackage\n */\nAdapter.prototype.close = function() {\n  this.db.close();\n}\n\n/**\n * Get the connection to the database file\n * @return {sqljs.Database}\n */\nAdapter.prototype.getDBConnection = function () {\n  return this.db;\n};\n\n/**\n * Returns a Uint8Array containing the contents of the database as a file\n * @param  {Function} callback called when export is complete\n */\nAdapter.prototype.export = function(callback) {\n  callback(null, this.db.export());\n}\n\n/**\n * Registers the given function so that it can be used by SQL statements\n * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Database.html#create_function-dynamic|sqljs create_function}\n * @param  {string} name               name of function to register\n * @param  {Function} functionDefinition function to register\n * @return {module:db/sqljsAdapter~Adapter} this\n */\nAdapter.prototype.registerFunction = function(name, functionDefinition) {\n  this.db.create_function(name, functionDefinition);\n  return this;\n}\n\n/**\n * Gets one row of results from the statement\n * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#get-dynamic|sqljs get}\n * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#getAsObject-dynamic|sqljs getAsObject}\n * @param  {string} sql    statement to run\n * @param  {Array|Object} [params] substitution parameters\n * @return {Object}\n */\nAdapter.prototype.get = function (sql, params) {\n  params = params || [];\n  var statement = this.db.prepare(sql);\n  statement.bind(params);\n  var hasResult = statement.step();\n  var row;\n\n  if (hasResult) {\n    row = statement.getAsObject();\n  }\n\n  statement.free();\n  return row;\n};\n\n/**\n * Determines if a tableName exists in the database\n * @param {String} tableName\n * @returns {Boolean}\n */\nAdapter.prototype.isTableExists = function (tableName) {\n  var statement = this.db.prepare(\"SELECT name FROM sqlite_master WHERE type='table' AND name=:name\");\n  statement.bind([tableName]);\n  var hasResult = statement.step();\n  var row;\n  if (hasResult) {\n    row = statement.getAsObject();\n  }\n  statement.free();\n  return !!row;\n};\n\n/**\n * Gets all results from the statement in an array\n * @param  {string} sql    statement to run\n * @param  {Array|Object} [params] bind parameters\n * @return {Object[]}\n */\nAdapter.prototype.all = function (sql, params) {\n  var rows = [];\n  var iterator = this.each(sql, params);\n  for (var row of iterator) {\n    rows.push(row);\n  }\n  return rows;\n};\n\n/**\n * Returns an Iterable with results from the query\n * @param  {string} sql    statement to run\n * @param  {Object|Array} params bind parameters\n * @return {Iterable<Object>}\n */\nAdapter.prototype.each = function (sql, params) {\n  var statement = this.db.prepare(sql);\n  statement.bind(params);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      if (statement.step()) {\n        return {\n          value: statement.getAsObject(),\n          done: false\n        };\n      } else {\n        statement.free();\n        return {\n          done: true\n        }\n      }\n    }\n  }\n};\n\n/**\n * Runs the statement specified, returning information about what changed\n * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#run-dynamic|sqljs run}\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {Object} object containing a changes property indicating the number of rows changed and a lastInsertROWID indicating the last inserted row\n */\nAdapter.prototype.run = function(sql, params) {\n  if (params) {\n    for (var key in params) {\n      params['$' + key] = params[key];\n    }\n  }\n  this.db.run(sql, params);\n  var lastId = this.db.exec('select last_insert_rowid();');\n  var lastInsertedId;\n  if (lastId) {\n    lastInsertedId = lastId[0].values[0][0];\n  }\n  return {\n    lastInsertROWID: lastInsertedId,\n    changes: this.db.getRowsModified()\n  };\n};\n\n/**\n * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {Number} last inserted row id\n */\nAdapter.prototype.insert = function(sql, params) {\n  if (params) {\n    for (var key in params) {\n      params['$' + key] = params[key];\n    }\n  }\n  var statement = this.db.prepare(sql, params);\n  statement.step();\n  statement.free();\n  var lastId = this.db.exec('select last_insert_rowid();');\n  if (lastId) {\n    return lastId[0].values[0][0];\n  } else {\n    return;\n  }\n};\n\n/**\n * Runs the specified delete statement and returns the number of deleted rows\n * @param  {string} sql    statement to run\n * @param  {Object|Array} [params] bind parameters\n * @return {number} deleted rows\n */\nAdapter.prototype.delete = function(sql, params) {\n  var rowsModified = 0;\n  var statement = this.db.prepare(sql, params);\n  statement.step();\n  rowsModified = this.db.getRowsModified();\n  statement.free();\n  return rowsModified;\n};\n\n/**\n * Drops the table\n * @param  {string} table table name\n * @return {Boolean} indicates if the table was dropped\n */\nAdapter.prototype.dropTable = function(table) {\n  var response = this.db.exec('DROP TABLE IF EXISTS \"' + table + '\"');\n  var vacuum = this.db.exec('VACUUM');\n  return !!response;\n};\n\n/**\n * Counts rows that match the query\n * @param  {string} tableName table name from which to count\n * @param  {string} [where]     where clause\n * @param  {Object|Array} [whereArgs] where args\n * @return {Number} count\n */\nAdapter.prototype.count = function (tableName, where, whereArgs) {\n  var sql = 'SELECT COUNT(*) as count FROM \"' + tableName + '\"';\n  if (where) {\n    sql += ' where ' + where;\n  }\n  return this.get(sql, whereArgs).count;\n};\n\n}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"_process\":284,\"buffer\":182,\"fs\":177,\"http\":329,\"sql.js/dist/sql-asm-memory-growth.js\":327}],19:[function(require,module,exports){\n/**\n * Creates tables necessary for GeoPackages\n * @module db/tableCreator\n */\n\nconst SpatialReferenceSystemDao = require('../core/srs').SpatialReferenceSystemDao;\nconst DataTypes = require('./dataTypes');\n\n/**\n * `TableCreator` provides methods for creating the various standard tables in\n * a GeoPackage database.\n *\n * @class\n * @param {module:geoPackage~GeoPackage} geopackage GeoPackage object\n */\nvar TableCreator = function(geopackage) {\n  this.geopackage = geopackage;\n  this.connection = geopackage.getDatabase();\n}\n\nmodule.exports = TableCreator;\n\n/**\n * Creates all required tables and Spatial Reference Systems, in addition to EPSG:3857\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createRequired = function () {\n  var dao = new SpatialReferenceSystemDao(this.geopackage);\n  return Promise.all([this.createSpatialReferenceSystem(), this.createContents()])\n  .then(function() {\n    // Create the required Spatial Reference Systems (spec Requirement 11)\n    dao.createUndefinedGeographic();\n    dao.createWgs84();\n    dao.createUndefinedCartesian();\n    // not required but very common\n    dao.createWebMercator();\n    return true;\n  });\n};\n\n/**\n * Creates the spatial reference system tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createSpatialReferenceSystem = function() {\n  return this.createTable('spatial_reference_system');\n}\n\n/**\n * Creates the contents tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createContents = function() {\n  return this.createTable('contents');\n}\n\n/**\n * Creates the geometry columns tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createGeometryColumns = function() {\n  return this.createTable('geometry_columns');\n}\n\n/**\n * Creates the tile matrix set tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createTileMatrixSet = function() {\n  return this.createTable('tile_matrix_set');\n}\n\n/**\n * Creates the tile matrix tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createTileMatrix = function() {\n  return this.createTable('tile_matrix');\n}\n\n/**\n * Creates the data columns tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createDataColumns = function() {\n  return this.createTable('data_columns');\n}\n\n/**\n * Creates the data column constraints tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createDataColumnConstraints = function() {\n  return this.createTable('data_column_constraints');\n}\n\n/**\n * Creates the metadata tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createMetadata = function() {\n  return this.createTable('metadata');\n}\n\n/**\n * Creates the metadata reference tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createMetadataReference = function() {\n  return this.createTable('metadata_reference');\n}\n\n/**\n * Creates the extensions tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createExtensions = function() {\n  return this.createTable('extensions');\n}\n\n/**\n * Creates the table index tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createTableIndex = function() {\n  return this.createTable('table_index');\n}\n\n/**\n * Creates the geometry index tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createGeometryIndex = function() {\n  return this.createTable('geometry_index');\n}\n\n/**\n * Creates the feature tile link tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createFeatureTileLink = function() {\n  return this.createTable('feature_tile_link');\n}\n\n/**\n * Creates the extended relations tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createExtendedRelations = function() {\n  return this.createTable('extended_relations');\n}\n\n/**\n * Creates the contentsId tables\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createContentsId = function() {\n  return this.createTable('contents_id');\n}\n\n/**\n * Creates all tables necessary for the specified table creation script name in the GeoPackage\n * @param  {string} creationScriptName creation scripts to run\n * @return {Promise<Boolean>}\n */\nTableCreator.prototype.createTable = function(creationScriptName) {\n  var connection = this.connection;\n\n  return tableCreationScripts[creationScriptName].reduce(function(sequence, sql) {\n    return sequence.then(function() {\n      try {\n        return !!connection.run(sql);\n      } catch (error) {\n        if (error.message.indexOf('already exists') === -1) {\n          throw error;\n        }\n      }\n    });\n  }, Promise.resolve());\n}\n\n/**\n * Create the given user table.\n *\n * @param {modle:user/userTable~UserTable} userTable user table to create\n * @return {object} the result of {@link module:db/geoPackageConnection~GeoPackageConnection#run}\n * @throws {Error} if the table already exists\n */\nTableCreator.prototype.createUserTable = function (userTable) {\n  var connection = this.connection;\n  var result = connection.tableExists(userTable.table_name);\n  if (result) {\n    throw new Error('Table already exists and cannot be created: ' + userTable.table_name);\n  }\n  var check = '';\n\n  var sql = 'create table \\'' + userTable.table_name + '\\' (';\n  for (var i = 0; i < userTable.columns.length; i++) {\n    var tc = userTable.columns[i];\n    if (i) {\n      sql += ', ';\n    }\n    sql += '\\n\\'' + tc.name + '\\' ' + tc.getTypeName();\n    if (tc.max != null) {\n      sql += '(' + tc.max + ')';\n      if (check.length) {\n        check += ' AND\\n';\n      }\n      check += '\\tlength(\"'+tc.name+'\") <= ' + tc.max;\n    }\n    if (tc.notNull) {\n      sql += ' not null'\n    }\n    if (tc.primaryKey) {\n      sql += ' primary key autoincrement';\n    }\n    if (tc.defaultValue) {\n      if (tc.dataType === DataTypes.GPKGDataType.GPKG_DT_TEXT) {\n        sql += ' default \\'' + tc.defaultValue + '\\'';\n      } else {\n        sql += ' default ' + tc.defaultValue;\n      }\n    }\n  }\n  for (var i = 0; i < userTable.uniqueConstraints.length; i++) {\n    var uniqueConstraint = userTable.uniqueConstraints[i];\n    sql += ',\\n unique (';\n    for (var j = 0; j < uniqueConstraint.columns.length; j++) {\n      var uniqueColumn = uniqueConstraint.columns[j];\n      if (j) {\n        sql += ', ';\n      }\n      sql += uniqueColumn.name;\n    }\n    sql += ')';\n  }\n\n  if (check.length) {\n    sql += '\\nCHECK(\\n' + check + '\\n)';\n  }\n\n  sql += '\\n);';\n  return connection.run(sql);\n};\n\nvar tableCreationScripts = {\n  spatial_reference_system: [\n    'CREATE TABLE gpkg_spatial_ref_sys ('+\n    '  srs_name TEXT NOT NULL,'+\n    '  srs_id INTEGER NOT NULL PRIMARY KEY,'+\n    '  organization TEXT NOT NULL,'+\n    '  organization_coordsys_id INTEGER NOT NULL,'+\n    '  definition  TEXT NOT NULL,'+\n    '  description TEXT,'+\n    '  definition_12_063 TEXT NOT NULL DEFAULT \"undefined\"'+\n    ')',\n\n    'CREATE VIEW st_spatial_ref_sys AS'+\n    ' SELECT'+\n    '   srs_name,'+\n    '   srs_id,'+\n    '   organization,'+\n    '   organization_coordsys_id,'+\n    '   definition,'+\n    '   description'+\n    ' FROM gpkg_spatial_ref_sys',\n\n    'CREATE VIEW spatial_ref_sys AS'+\n    ' SELECT'+\n    '   srs_id AS srid,'+\n    '   organization AS auth_name,'+\n    '   organization_coordsys_id AS auth_srid,'+\n    '   definition AS srtext'+\n    ' FROM gpkg_spatial_ref_sys'\n  ],\n  contents: [\n    'CREATE TABLE gpkg_contents ('+\n    ' table_name TEXT NOT NULL PRIMARY KEY,'+\n    ' data_type TEXT NOT NULL,'+\n    ' identifier TEXT UNIQUE,'+\n    \" description TEXT DEFAULT '',\"+\n    \" last_change DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),\"+\n    ' min_x DOUBLE,'+\n    ' min_y DOUBLE,'+\n    ' max_x DOUBLE,'+\n    ' max_y DOUBLE,'+\n    ' srs_id INTEGER,'+\n    ' CONSTRAINT fk_gc_r_srs_id FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys(srs_id)'+\n    ')'\n  ],\n  geometry_columns: [\n    'CREATE TABLE gpkg_geometry_columns ('+\n    '  table_name TEXT NOT NULL,'+\n    '  column_name TEXT NOT NULL,'+\n    '  geometry_type_name TEXT NOT NULL,'+\n    '  srs_id INTEGER NOT NULL,'+\n    '  z TINYINT NOT NULL,'+\n    '  m TINYINT NOT NULL,'+\n    '  CONSTRAINT pk_geom_cols PRIMARY KEY (table_name, column_name),'+\n    '  CONSTRAINT uk_gc_table_name UNIQUE (table_name),'+\n    '  CONSTRAINT fk_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+\n    '  CONSTRAINT fk_gc_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+\n    ')',\n\n    'CREATE VIEW st_geometry_columns AS'+\n    '  SELECT'+\n    '    table_name,'+\n    '    column_name,'+\n    '    \"ST_\" || geometry_type_name AS geometry_type_name,'+\n    '    g.srs_id,'+\n    '    srs_name'+\n    '  FROM gpkg_geometry_columns as g JOIN gpkg_spatial_ref_sys AS s'+\n    '  WHERE g.srs_id = s.srs_id',\n\n    'CREATE VIEW geometry_columns AS'+\n    '  SELECT'+\n    '    table_name AS f_table_name,'+\n    '    column_name AS f_geometry_column,'+\n    '    (CASE geometry_type_name'+\n    '    \tWHEN \"GEOMETRY\" THEN 0'+\n    '    \tWHEN \"POINT\" THEN 1'+\n    '    \tWHEN \"LINESTRING\" THEN 2'+\n    '    \tWHEN \"POLYGON\" THEN 3'+\n    '    \tWHEN \"MULTIPOINT\" THEN 4'+\n    '    \tWHEN \"MULTILINESTRING\" THEN 5'+\n    '    \tWHEN \"MULTIPOLYGON\" THEN 6'+\n    '    \tWHEN \"GEOMETRYCOLLECTION\" THEN 7'+\n    '    \tWHEN \"CIRCULARSTRING\" THEN 8'+\n    '    \tWHEN \"COMPOUNDCURVE\" THEN 9'+\n    '    \tWHEN \"CURVEPOLYGON\" THEN 10'+\n    '    \tWHEN \"MULTICURVE\" THEN 11'+\n    '    \tWHEN \"MULTISURFACE\" THEN 12'+\n    '    \tWHEN \"CURVE\" THEN 13'+\n    '    \tWHEN \"SURFACE\" THEN 14'+\n    '    \tWHEN \"POLYHEDRALSURFACE\" THEN 15'+\n    '    \tWHEN \"TIN\" THEN 16'+\n    '    \tWHEN \"TRIANGLE\" THEN 17'+\n    '    \tELSE 0 END) AS geometry_type,'+\n    '    2 + (CASE z WHEN 1 THEN 1 WHEN 2 THEN 1 ELSE 0 END) + (CASE m WHEN 1 THEN 1 WHEN 2 THEN 1 ELSE 0 END) AS coord_dimension,'+\n    '    srs_id AS srid'+\n    '  FROM gpkg_geometry_columns'\n  ],\n  tile_matrix_set: [\n    'CREATE TABLE gpkg_tile_matrix_set ('+\n    '  table_name TEXT NOT NULL PRIMARY KEY,'+\n    '  srs_id INTEGER NOT NULL,'+\n    '  min_x DOUBLE NOT NULL,'+\n    '  min_y DOUBLE NOT NULL,'+\n    '  max_x DOUBLE NOT NULL,'+\n    '  max_y DOUBLE NOT NULL,'+\n    '  CONSTRAINT fk_gtms_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+\n    '  CONSTRAINT fk_gtms_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+\n    ')'\n  ],\n  tile_matrix: [\n    'CREATE TABLE gpkg_tile_matrix ('+\n    '  table_name TEXT NOT NULL,'+\n    '  zoom_level INTEGER NOT NULL,'+\n    '  matrix_width INTEGER NOT NULL,'+\n    '  matrix_height INTEGER NOT NULL,'+\n    '  tile_width INTEGER NOT NULL,'+\n    '  tile_height INTEGER NOT NULL,'+\n    '  pixel_x_size DOUBLE NOT NULL,'+\n    '  pixel_y_size DOUBLE NOT NULL,'+\n    '  CONSTRAINT pk_ttm PRIMARY KEY (table_name, zoom_level),'+\n    '  CONSTRAINT fk_tmm_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+\n    ')',\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')\"+\n    \"WHERE (NEW.zoom_level < 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_update'\"+\n    \"BEFORE UPDATE of zoom_level ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')\"+\n    \"WHERE (NEW.zoom_level < 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')\"+\n    \"WHERE (NEW.matrix_width < 1);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_update'\"+\n    \"BEFORE UPDATE OF matrix_width ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')\"+\n    \"WHERE (NEW.matrix_width < 1);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')\"+\n    \"WHERE (NEW.matrix_height < 1);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_update'\"+\n    \"BEFORE UPDATE OF matrix_height ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')\"+\n    \"WHERE (NEW.matrix_height < 1);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')\"+\n    \"WHERE NOT (NEW.pixel_x_size > 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_update'\"+\n    \"BEFORE UPDATE OF pixel_x_size ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')\"+\n    \"WHERE NOT (NEW.pixel_x_size > 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_insert'\"+\n    \"BEFORE INSERT ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')\"+\n    \"WHERE NOT (NEW.pixel_y_size > 0);\"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_update'\"+\n    \"BEFORE UPDATE OF pixel_y_size ON 'gpkg_tile_matrix'\"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')\"+\n    \"WHERE NOT (NEW.pixel_y_size > 0);\"+\n    \"END\"\n  ],\n  data_columns: [\n    'CREATE TABLE gpkg_data_columns ('+\n    '  table_name TEXT NOT NULL,'+\n    '  column_name TEXT NOT NULL,'+\n    '  name TEXT,'+\n    '  title TEXT,'+\n    '  description TEXT,'+\n    '  mime_type TEXT,'+\n    '  constraint_name TEXT,'+\n    '  CONSTRAINT pk_gdc PRIMARY KEY (table_name, column_name),'+\n    '  CONSTRAINT fk_gdc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+\n    ')'\n  ],\n  data_column_constraints: [\n    'CREATE TABLE gpkg_data_column_constraints ('+\n    '  constraint_name TEXT NOT NULL,'+\n    '  constraint_type TEXT NOT NULL, /* \"range\" | \"enum\" | \"glob\" */'+\n    '  value TEXT,'+\n    '  min NUMERIC,'+\n    '  min_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+\n    '  max NUMERIC,'+\n    '  max_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+\n    '  description TEXT,'+\n    '  CONSTRAINT gdcc_ntv UNIQUE (constraint_name, constraint_type, value)'+\n    ')'\n  ],\n  metadata: [\n    'CREATE TABLE gpkg_metadata ('+\n    '  id INTEGER CONSTRAINT m_pk PRIMARY KEY ASC NOT NULL UNIQUE,'+\n    '  md_scope TEXT NOT NULL DEFAULT \"dataset\",'+\n    '  md_standard_uri TEXT NOT NULL,'+\n    '  mime_type TEXT NOT NULL DEFAULT \"text/xml\",'+\n    '  metadata TEXT NOT NULL'+\n    ')',\n\n    \"CREATE TRIGGER 'gpkg_metadata_md_scope_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata violates \"+\n    \"constraint: md_scope must be one of undefined | fieldSession | \"+\n    \"collectionSession | series | dataset | featureType | feature | \"+\n    \"attributeType | attribute | tile | model | catalogue | schema | \"+\n    \"taxonomy software | service | collectionHardware | \"+\n    \"nonGeographicDataset | dimensionGroup') \"+\n    \"WHERE NOT(NEW.md_scope IN \"+\n    \"('undefined','fieldSession','collectionSession','series','dataset', \"+\n    \"'featureType','feature','attributeType','attribute','tile','model', \"+\n    \"'catalogue','schema','taxonomy','software','service', \"+\n    \"'collectionHardware','nonGeographicDataset','dimensionGroup')); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_md_scope_update' \"+\n    \"BEFORE UPDATE OF 'md_scope' ON 'gpkg_metadata' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata violates \"+\n    \"constraint: md_scope must be one of undefined | fieldSession | \"+\n    \"collectionSession | series | dataset | featureType | feature | \"+\n    \"attributeType | attribute | tile | model | catalogue | schema | \"+\n    \"taxonomy software | service | collectionHardware | \"+\n    \"nonGeographicDataset | dimensionGroup') \"+\n    \"WHERE NOT(NEW.md_scope IN \"+\n    \"('undefined','fieldSession','collectionSession','series','dataset', \"+\n    \"'featureType','feature','attributeType','attribute','tile','model', \"+\n    \"'catalogue','schema','taxonomy','software','service', \"+\n    \"'collectionHardware','nonGeographicDataset','dimensionGroup')); \"+\n    \"END\"\n  ],\n  metadata_reference: [\n    \"CREATE TABLE gpkg_metadata_reference (\" +\n    \"  reference_scope TEXT NOT NULL,\" +\n    \"  table_name TEXT,\" +\n    \"  column_name TEXT,\" +\n    \"  row_id_value INTEGER,\" +\n    \"  timestamp DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),\" +\n    \"  md_file_id INTEGER NOT NULL,\" +\n    \"  md_parent_id INTEGER,\" +\n    \"  CONSTRAINT crmr_mfi_fk FOREIGN KEY (md_file_id) REFERENCES gpkg_metadata(id),\" +\n    \"  CONSTRAINT crmr_mpi_fk FOREIGN KEY (md_parent_id) REFERENCES gpkg_metadata(id)\" +\n    \")\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: reference_scope must be one of \\\"geopackage\\\", \"+\n    \"table\\\", \\\"column\\\", \\\"row\\\", \\\"row/col\\\"') \"+\n    \"WHERE NOT NEW.reference_scope IN \"+\n    \"('geopackage','table','column','row','row/col'); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_update' \"+\n    \"BEFORE UPDATE OF 'reference_scope' ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: referrence_scope must be one of \\\"geopackage\\\", \"+\n    \"\\\"table\\\", \\\"column\\\", \\\"row\\\", \\\"row/col\\\"') \"+\n    \"WHERE NOT NEW.reference_scope IN \"+\n    \"('geopackage','table','column','row','row/col'); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_column_name_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: column name must be NULL when reference_scope \"+\n    \"is \\\"geopackage\\\", \\\"table\\\" or \\\"row\\\"') \"+\n    \"WHERE (NEW.reference_scope IN ('geopackage','table','row') \"+\n    \"AND NEW.column_name IS NOT NULL); \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: column name must be defined for the specified \"+\n    \"table when reference_scope is \\\"column\\\" or \\\"row/col\\\"') \"+\n    \"WHERE (NEW.reference_scope IN ('column','row/col') \"+\n    \"AND NOT NEW.table_name IN ( \"+\n    \"SELECT name FROM SQLITE_MASTER WHERE type = 'table' \"+\n    \"AND name = NEW.table_name \"+\n    \"AND sql LIKE ('%' || NEW.column_name || '%'))); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_column_name_update' \"+\n    \"BEFORE UPDATE OF column_name ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: column name must be NULL when reference_scope \"+\n    \"is \\\"geopackage\\\", \\\"table\\\" or \\\"row\\\"') \"+\n    \"WHERE (NEW.reference_scope IN ('geopackage','table','row') \"+\n    \"AND NEW.column_nameIS NOT NULL); \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: column name must be defined for the specified \"+\n    \"table when reference_scope is \\\"column\\\" or \\\"row/col\\\"') \"+\n    \"WHERE (NEW.reference_scope IN ('column','row/col') \"+\n    \"AND NOT NEW.table_name IN ( \"+\n    \"SELECT name FROM SQLITE_MASTER WHERE type = 'table' \"+\n    \"AND name = NEW.table_name \"+\n    \"AND sql LIKE ('%' || NEW.column_name || '%'))); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: row_id_value must be NULL when reference_scope \"+\n    \"is \\\"geopackage\\\", \\\"table\\\" or \\\"column\\\"') \"+\n    \"WHERE NEW.reference_scope IN ('geopackage','table','column') \"+\n    \"AND NEW.row_id_value IS NOT NULL; \"+\n    \"END \",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_update' \"+\n    \"BEFORE UPDATE OF 'row_id_value' ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: row_id_value must be NULL when reference_scope \"+\n    \"is \\\"geopackage\\\", \\\"table\\\" or \\\"column\\\"') \"+\n    \"WHERE NEW.reference_scope IN ('geopackage','table','column') \"+\n    \"AND NEW.row_id_value IS NOT NULL; \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_timestamp_insert' \"+\n    \"BEFORE INSERT ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference \"+\n    \"violates constraint: timestamp must be a valid time in ISO 8601 \"+\n    \"\\\"yyyy-mm-ddThh:mm:ss.cccZ\\\" form') \"+\n    \"WHERE NOT (NEW.timestamp GLOB \"+\n    \"'[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]Z' \"+\n    \"AND strftime('%s',NEW.timestamp) NOT NULL); \"+\n    \"END\",\n\n    \"CREATE TRIGGER 'gpkg_metadata_reference_timestamp_update' \"+\n    \"BEFORE UPDATE OF 'timestamp' ON 'gpkg_metadata_reference' \"+\n    \"FOR EACH ROW BEGIN \"+\n    \"SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference \"+\n    \"violates constraint: timestamp must be a valid time in ISO 8601 \"+\n    \"\\\"yyyy-mm-ddThh:mm:ss.cccZ\\\" form') \"+\n    \"WHERE NOT (NEW.timestamp GLOB \"+\n    \"'[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]Z' \"+\n    \"AND strftime('%s',NEW.timestamp) NOT NULL); \"+\n    \"END \"\n  ],\n  extensions: [\n    'CREATE TABLE gpkg_extensions ('+\n    '  table_name TEXT,'+\n    '  column_name TEXT,'+\n    '  extension_name TEXT NOT NULL,'+\n    '  definition TEXT NOT NULL,'+\n    '  scope TEXT NOT NULL,'+\n    '  CONSTRAINT ge_tce UNIQUE (table_name, column_name, extension_name)'+\n    ')'\n  ],\n  table_index: [\n    'CREATE TABLE nga_table_index ('+\n    '  table_name TEXT NOT NULL PRIMARY KEY,'+\n    '  last_indexed DATETIME'+\n    ')'\n  ],\n  geometry_index: [\n    'CREATE TABLE nga_geometry_index ('+\n    '  table_name TEXT NOT NULL,'+\n    '  geom_id INTEGER NOT NULL,'+\n    '  min_x DOUBLE NOT NULL,'+\n    '  max_x DOUBLE NOT NULL,'+\n    '  min_y DOUBLE NOT NULL,'+\n    '  max_y DOUBLE NOT NULL,'+\n    '  min_z DOUBLE,'+\n    '  max_z DOUBLE,'+\n    '  min_m DOUBLE,'+\n    '  max_m DOUBLE,'+\n    '  CONSTRAINT pk_ngi PRIMARY KEY (table_name, geom_id),'+\n    '  CONSTRAINT fk_ngi_nti_tn FOREIGN KEY (table_name) REFERENCES nga_table_index(table_name)'+\n    ')'\n  ],\n  feature_tile_link: [\n    'CREATE TABLE nga_feature_tile_link ('+\n    '  feature_table_name TEXT NOT NULL,'+\n    '  tile_table_name TEXT NOT NULL,'+\n    '  CONSTRAINT pk_nftl PRIMARY KEY (feature_table_name, tile_table_name)'+\n    ')'\n  ],\n  extended_relations: [\n    'CREATE TABLE gpkgext_relations (' +\n    '  id INTEGER PRIMARY KEY AUTOINCREMENT,' +\n    '  base_table_name TEXT NOT NULL,' +\n    '  base_primary_column TEXT NOT NULL DEFAULT \\'id\\',' +\n    '  related_table_name TEXT NOT NULL,' +\n    '  related_primary_column TEXT NOT NULL DEFAULT \\'id\\',' +\n    '  relation_name TEXT NOT NULL,' +\n    '  mapping_table_name TEXT NOT NULL UNIQUE' +\n    ')'\n  ],\n  contents_id: [\n    'CREATE TABLE nga_contents_id (' +\n    '  id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' +\n    '  table_name TEXT NOT NULL,' +\n    '  CONSTRAINT uk_nci_table_name UNIQUE (table_name),' +\n    '  CONSTRAINT fk_nci_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)' +\n    ')'\n  ]\n};\n\n},{\"../core/srs\":9,\"./dataTypes\":14}],20:[function(require,module,exports){\n/**\n * Base Extension\n * @module extension/baseExtension\n */\n\nvar Extension = require('./index').Extension\n  , ExtensionDao = require('./index').ExtensionDao;\n/**\n * Abstract base GeoPackage extension\n * @class\n */\nvar BaseExtension = function(geoPackage) {\n  this.geoPackage = geoPackage;\n  this.connection = geoPackage.connection;\n  this.extensionsDao = geoPackage.getExtensionDao();\n}\n\nmodule.exports = BaseExtension;\n\n/**\n * Get the extension or create as needed\n * @param  {String}   extensionName extension name\n * @param  {String}   tableName     table name\n * @param  {String}   columnName    column name\n * @param  {String}   definition    extension definition\n * @param  {String}   scopeType     extension scope type\n * @return {Promise<module:extension/baseExtension~BaseExtension>}\n */\nBaseExtension.prototype.getOrCreate = function(extensionName, tableName, columnName, definition, scopeType) {\n  var extension = this.getExtension(extensionName, tableName, columnName);\n  if (extension) {\n    return Promise.resolve(extension);\n  }\n  return this.extensionsDao.createTable()\n  .then(function() {\n    return this.createExtension(extensionName, tableName, columnName, definition, scopeType);\n  }.bind(this));\n};\n\n/**\n * Get the extension for the name, table name and column name\n * @param  {String}   extensionName extension name\n * @param  {String}   tableName     table name\n * @param  {String}   columnName    column name\n * @param  {Function} callback      Called with err if one occurred and the extension\n */\nBaseExtension.prototype.getExtension = function(extensionName, tableName, columnName) {\n  if (!this.extensionsDao.isTableExists()) {\n    return false;\n  }\n  return this.extensionsDao.queryByExtensionAndTableNameAndColumnName(extensionName, tableName, columnName);\n};\n\n/**\n * Determine if the GeoPackage has the extension\n * @param  {String}   extensionName extension name\n * @param  {String}   tableName     table name\n * @param  {String}   columnName    column name\n */\nBaseExtension.prototype.hasExtension = function(extensionName, tableName, columnName) {\n  var exists = this.getExtension(extensionName, tableName, columnName);\n  return !!this.getExtension(extensionName, tableName, columnName).length;\n};\n\nBaseExtension.prototype.createExtension = function(extensionName, tableName, columnName, definition, scopeType) {\n  var extension = new Extension();\n  extension.table_name = tableName;\n  extension.column_name = columnName;\n  extension.extension_name = extensionName;\n  extension.definition = definition;\n  extension.scope = scopeType;\n  return this.extensionsDao.create(extension);\n};\n\n},{\"./index\":25}],21:[function(require,module,exports){\n/**\n * @memberOf module:extension/contents\n * @class ContentsId\n */\n\n/**\n * Contents Id object, for maintaining a unique identifier for contents tables\n * @constructor\n */\nvar ContentsId = function() {\n  /**\n   * Id column, primary key\n   * @member {Number}\n   */\n  this.id = undefined;\n\n  /**\n   * Table name column\n   * @member {String}\n   */\n  this.table_name = undefined;\n};\n\nmodule.exports = ContentsId;\n\n},{}],22:[function(require,module,exports){\n/**\n * @memberOf module:extension/contents\n * @class ContentsIdDao\n */\n\nvar Dao = require('../../dao/dao')\n  , ContentsId = require('./contentsId');\nvar util = require('util');\n\n/**\n * Contents Id Data Access Object\n * @extends {module:dao/dao~Dao}\n * @constructor\n */\nvar ContentsIdDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(ContentsIdDao, Dao);\n\n/**\n * Create a {module:extension/contents.ContentsId} object\n * @return {module:extension/contents.ContentsId}\n */\nContentsIdDao.prototype.createObject = function() {\n  return new ContentsId();\n};\n\n/**\n * Create the necessary tables for this dao\n * @return {Promise}\n */\nContentsIdDao.prototype.createTable = function() {\n  return this.geoPackage.getTableCreator().createContentsId();\n};\n\n/**\n * Get all the table names\n * @return {string[]}\n */\nContentsIdDao.prototype.getTableNames = function() {\n  var tableNames = [];\n  var tableNameColumns = this.queryForColumns('table_name');\n  for (var i = 0; i < tableNameColumns.length; i++) {\n    tableNames.push(tableNameColumns[i].table_name);\n  }\n  return tableNames;\n};\n\n/**\n * Query by table name\n * @param  {string} tableName name of the table\n * @return {module:extension/contents.ContentsId}\n */\nContentsIdDao.prototype.queryForTableName = function(tableName) {\n  var contentsIds = this.queryForAll(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName));\n  if (contentsIds.length > 0) {\n    return contentsIds[0];\n  } else {\n    return null;\n  }\n};\n\n/**\n * Delete by tableName\n * @param  {string} tableName the table name to delete by\n * @return {number} number of deleted rows\n */\nContentsIdDao.prototype.deleteByTableName = function(tableName) {\n  return this.deleteWhere(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName));\n};\n\nContentsIdDao.TABLE_NAME = 'nga_contents_id';\nContentsIdDao.COLUMN_ID = 'id';\nContentsIdDao.COLUMN_TABLE_NAME = 'table_name';\n\nContentsIdDao.prototype.gpkgTableName = ContentsIdDao.TABLE_NAME;\nContentsIdDao.prototype.idColumns = ['id'];\n\nmodule.exports = ContentsIdDao;\n\n},{\"../../dao/dao\":11,\"./contentsId\":21,\"util\":343}],23:[function(require,module,exports){\n/**\n * @module extension/contents\n */\n\nvar BaseExtension = require('../baseExtension')\n\t, Extension = require('../.').Extension\n\t, ContentsDao = require('../../core/contents').ContentsDao\n\t, ContentsIdDao = require('./contentsIdDao');\n\nvar util = require('util');\n\n/**\n * Style extension\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @extends {module:extension/baseExtension~BaseExtension}\n * @class ContentsIdExtension\n * @constructor\n */\nvar ContentsIdExtension = function(geoPackage) {\n\tBaseExtension.call(this, geoPackage);\n\tthis.contentsIdDao = geoPackage.getContentsIdDao();\n};\n\nutil.inherits(ContentsIdExtension, BaseExtension);\n\n/**\n * Get or create the contents id extension\n * @return {Promise}\n */\nContentsIdExtension.prototype.getOrCreateExtension = function() {\n\treturn this.getOrCreate(ContentsIdExtension.EXTENSION_NAME, null, null, ContentsIdExtension.EXTENSION_DEFINITION, Extension.READ_WRITE)\n\t\t.then(function() {\n\t\t\treturn this.contentsIdDao.createTable();\n\t\t}.bind(this));\n};\n\n/**\n * Get the ContentsIdDao\n * @returns {module:extension/contents.ContentsIdDao}\n */\nContentsIdExtension.prototype.getDao = function() {\n\treturn this.contentsIdDao;\n};\n\nContentsIdExtension.prototype.has = function () {\n\treturn this.hasExtension(ContentsIdExtension.EXTENSION_NAME, null, null) && this.contentsIdDao.isTableExists();\n};\n\n/**\n * Get the ContentsId object\n * @param contents {module:core/contents.Contents}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.get = function (contents) {\n\tvar contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.getByTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Get the ContentsId object\n * @param tableName\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.getByTableName = function (tableName) {\n\tvar contentsId = null;\n\tif (this.contentsIdDao.isTableExists()) {\n\t\tcontentsId = this.contentsIdDao.queryForTableName(tableName);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Get the ContentsId id\n * @param contents {module:core/contents.Contents}\n * @returns {Number}\n */\nContentsIdExtension.prototype.getId = function (contents) {\n\tlet contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.getIdByTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Get the ContentsId id\n * @param tableName\n * @returns {Number}\n */\nContentsIdExtension.prototype.getIdByTableName = function (tableName) {\n\tvar id = null;\n\tif (this.contentsIdDao.isTableExists()) {\n\t\tvar contentsId = this.contentsIdDao.queryForTableName(tableName);\n\t\tif (contentsId) {\n\t\t\tid = contentsId.id;\n\t\t}\n\t}\n\treturn id;\n};\n\n/**\n * Creates contentsId for contents\n * @param contents {module:core/contents.Contents}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.create = function (contents) {\n\tvar contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.createWithTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Creates contentsId for contents\n * @param tableName\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.createWithTableName = function (tableName) {\n\tvar contentsId = this.contentsIdDao.createObject();\n\tcontentsId.table_name = tableName;\n\tcontentsId.id = this.contentsIdDao.create(contentsId);\n\treturn contentsId;\n};\n\n/**\n * Creates contentsId for contents\n * @param contents {module:core/contents.Contents}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.createId = function (contents) {\n\tvar contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.createIdWithTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Creates contentsId for contents\n * @param tableName {string}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.createIdWithTableName = function (tableName) {\n\treturn this.createWithTableName(tableName);\n};\n\n/**\n * Gets or creates contentsId for contents\n * @param contents {module:core/contents.Contents}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.getOrCreateId = function (contents) {\n\tvar contentsId = null;\n\tif (contents && contents.table_name) {\n\t\tcontentsId = this.getOrCreateIdByTableName(contents.table_name);\n\t}\n\treturn contentsId;\n};\n\n/**\n * Gets or creates contentsId for table name\n * @param tableName {string}\n * @returns {module:extension/contents.ContentsId}\n */\nContentsIdExtension.prototype.getOrCreateIdByTableName = function (tableName) {\n\tvar contentId = this.getByTableName(tableName);\n\tif (contentId == null) {\n\t\tcontentId = this.createWithTableName(tableName);\n\t}\n\treturn contentId;\n};\n\n/**\n * Deletes contentsId for contents\n * @param contents {module:core/contents.Contents}\n * @returns {number} number of deleted rows\n */\nContentsIdExtension.prototype.deleteId = function (contents) {\n\tvar deleted = false;\n\tif (contents && contents.table_name) {\n\t\tdeleted = this.deleteIdByTableName(contents.table_name);\n\t}\n\treturn deleted;\n};\n\n/**\n * Deletes contentId for table name\n * @param tableName {string}\n * @returns {number} number of deleted rows\n */\nContentsIdExtension.prototype.deleteIdByTableName = function (tableName) {\n\treturn this.contentsIdDao.deleteByTableName(tableName);\n};\n\n/**\n * Number of contentsIds\n * @returns {number}\n */\nContentsIdExtension.prototype.count = function () {\n\tvar count = 0;\n\tif (this.has()) {\n\t\tcount = this.contentsIdDao.count();\n\t}\n\treturn count;\n};\n\n/**\n * Create contentsIds for contents of type passed in\n * @param type {string} defaults to \"\"\n * @returns {number}\n */\nContentsIdExtension.prototype.createIds = function (type = \"\") {\n\tvar missing = this.getMissing(type);\n\tfor (var i = 0; i < missing.length; i++) {\n\t\tthis.getOrCreateIdByTableName(missing[i].table_name);\n\t}\n\treturn missing.length;\n};\n\n/**\n * Deletes ids by type\n * @param type\n * @returns {number}\n */\nContentsIdExtension.prototype.deleteIds = function (type = \"\") {\n\tvar deleted = 0;\n\tif (this.has()) {\n\t\tif (type.length === 0) {\n\t\t\tdeleted = this.contentsIdDao.deleteAll();\n\t\t} else {\n\t\t\tvar ids = this.getIdsByType(type);\n\t\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\t\tdeleted += this.contentsIdDao.deleteById(ids[i].id);\n\t\t\t}\n\t\t}\n\t}\n\treturn deleted;\n};\n\nContentsIdExtension.prototype.getIdsByType = function (type = \"\") {\n\tvar contentIds = [];\n\tif (this.has()) {\n\t\tvar query = \"SELECT \";\n\t\tquery += ContentsIdDao.COLUMN_ID;\n\t\tquery += \", \";\n\t\tquery += ContentsIdDao.COLUMN_TABLE_NAME;\n\t\tquery += \" FROM \" + ContentsIdDao.TABLE_NAME;\n\t\tquery += \" WHERE \";\n\t\tquery += ContentsIdDao.COLUMN_TABLE_NAME;\n\t\tquery += \" IN (SELECT \";\n\t\tquery += ContentsDao.COLUMN_TABLE_NAME;\n\t\tquery += \" FROM \";\n\t\tquery += ContentsDao.TABLE_NAME;\n\t\tvar where = \"\";\n\t\tvar params = [];\n\t\tif (type != null && type.length > 0) {\n\t\t\twhere += ContentsDao.COLUMN_DATA_TYPE;\n\t\t\twhere += \" = ?\";\n\t\t\tparams.push(type);\n\t\t}\n\t\tif (where.length > 0) {\n\t\t\tquery += \" WHERE \" + where;\n\t\t}\n\t\tquery += \")\";\n\t\tcontentIds = this.connection.all(query, params);\n\t}\n\treturn contentIds;\n};\n\n/**\n * Get contents without contents ids\n * @param type\n * @returns {string[]}\n */\nContentsIdExtension.prototype.getMissing = function (type = \"\") {\n\tvar query = \"SELECT \" + ContentsDao.COLUMN_TABLE_NAME + \" FROM \" + ContentsDao.TABLE_NAME;\n\tvar where = \"\";\n\tvar params = [];\n\tif (type != null && type.length > 0) {\n\t\twhere += ContentsDao.COLUMN_DATA_TYPE;\n\t\twhere += \" = ?\";\n\t\tparams.push(type);\n\t}\n\tif (this.has()) {\n\t\tif (where.length > 0) {\n\t\t\twhere += \" AND \";\n\t\t}\n\t\twhere += ContentsDao.COLUMN_TABLE_NAME;\n\t\twhere += \" NOT IN (SELECT \";\n\t\twhere += ContentsIdDao.COLUMN_TABLE_NAME;\n\t\twhere += \" FROM \";\n\t\twhere += ContentsIdDao.TABLE_NAME;\n\t\twhere += \")\";\n\t}\n\tif (where.length > 0) {\n\t\tquery += \" WHERE \" + where;\n\t}\n\treturn this.connection.all(query, params);\n};\n\n/**\n * Remove contents id extension\n */\nContentsIdExtension.prototype.removeExtension = function() {\n\tif (this.contentsIdDao.isTableExists()) {\n\t\tthis.geoPackage.deleteTable(ContentsIdDao.TABLE_NAME);\n\t}\n\tif (this.extensionsDao.isTableExists()) {\n\t\tthis.extensionsDao.deleteByExtension(ContentsIdDao.EXTENSION_NAME);\n\t}\n};\n\nContentsIdExtension.EXTENSION_NAME = 'nga_contents_id';\nContentsIdExtension.EXTENSION_AUTHOR = 'nga';\nContentsIdExtension.EXTENSION_NAME_NO_AUTHOR = 'contents_id';\nContentsIdExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/contents-id.html';\n\nmodule.exports = ContentsIdExtension;\n\n},{\"../.\":25,\"../../core/contents\":8,\"../baseExtension\":20,\"./contentsIdDao\":22,\"util\":343}],24:[function(require,module,exports){\n/**\n * CrsWktExtension module.\n * @module extension/crsWkt\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension;\n\nvar util = require('util');\n\n/**\n * OGC Well known text representation of Coordinate Reference Systems extensionName\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @class\n * @extends {module:extension/baseExtension~BaseExtension}\n */\nvar CrsWktExtension = function(geoPackage) {\n  BaseExtension.call(this, geoPackage);\n\n  this.extensionName = CrsWktExtension.EXTENSION_NAME;\n\n  this.extensionDefinition = CrsWktExtension.EXTENSION_CRS_WKT_DEFINITION;\n}\n\nutil.inherits(CrsWktExtension, BaseExtension);\n\n/**\n * Get or create the extension\n * @return {Promise<module:extension/crsWkt~CrsWktExtension>}\n */\nCrsWktExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);\n};\n\nCrsWktExtension.EXTENSION_NAME = 'gpkg_crs_wkt';\nCrsWktExtension.EXTENSION_CRS_WKT_AUTHOR = 'gpkg';\nCrsWktExtension.EXTENSION_CRS_WKT_NAME_NO_AUTHOR = 'crs_wkt';\nCrsWktExtension.EXTENSION_CRS_WKT_DEFINITION = 'http://www.geopackage.org/spec/#extension_crs_wkt';\n\nmodule.exports.CrsWktExtension = CrsWktExtension;\n\n},{\"../.\":25,\"../baseExtension\":20,\"util\":343}],25:[function(require,module,exports){\n/**\n * Metadata module.\n * @module extension\n * @see module:dao/dao\n */\n\nvar Dao = require('../dao/dao')\n  , ColumnValues = require('../dao/columnValues')\n  , TableCreator = require('../db/tableCreator');\n\nvar util = require('util');\n\n/**\n  * Indicates that a particular extension applies to a GeoPackage, a table in a\n  * GeoPackage or a column of a table in a GeoPackage. An application that access\n  * a GeoPackage can query the gpkg_extensions table instead of the contents of\n  * all the user data tables to determine if it has the required capabilities to\n  * read or write to tables with extensions, and to “fail fast” and return an\n  * error message if it does not.\n * @class Extension\n */\nvar Extension = function() {\n\n  /**\n   * Name of the table that requires the extension. When NULL, the extension\n   * is required for the entire GeoPackage. SHALL NOT be NULL when the\n   * column_name is not NULL.\n   * @member {String}\n   */\n  this.table_name;\n\n  /**\n   * Name of the column that requires the extension. When NULL, the extension\n   * is required for the entire table.\n   * @member {String}\n   */\n  this.column_name;\n\n  /**\n   * The case sensitive name of the extension that is required, in the form\n   * <author>_<extension_name>.\n   * @member {String}\n   */\n  this.extension_name;\n\n  /**\n   * Definition of the extension in the form specfied by the template in\n   * GeoPackage Extension Template (Normative) or reference thereto.\n   * @member {String}\n   */\n  this.definition;\n\n  /**\n   * Indicates scope of extension effects on readers / writers: read-write or\n   * write-only in lowercase.\n   * @member {String}\n   */\n  this.scope;\n}\n\nExtension.EXTENSION_NAME_DIVIDER = \"_\";\n\nExtension.READ_WRITE = \"read-write\";\nExtension.WRITE_ONLY = \"write-only\";\n\nExtension.prototype.setExtensionName = function(author, extensionName) {\n  this.extension_name = Extension.buildExtensionName(author, extensionName);\n};\n\nExtension.prototype.getAuthor = function() {\n  return Extension.getAuthorWithExtensionName(this.extension_name);\n}\n\nExtension.prototype.getExtensionNameNoAuthor = function() {\n  return Extension.getExtensionNameNoAuthor(this.extension_name);\n}\n\nExtension.buildExtensionName = function(author, extensionName) {\n  return author + Extension.EXTENSION_NAME_DIVIDER + extensionName;\n}\n\nExtension.getAuthorWithExtensionName = function(extensionName) {\n  return extensionName.split(Extension.EXTENSION_NAME_DIVIDER)[0];\n}\n\nExtension.getExtensionNameNoAuthor = function(extensionName) {\n  return extensionName.slice(extensionName.indexOf(Extension.EXTENSION_NAME_DIVIDER)+1);\n}\n\n/**\n * Extension Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar ExtensionDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(ExtensionDao, Dao);\n\nExtensionDao.prototype.createObject = function(row) {\n  var e = new Extension();\n  for (var key in row) {\n    e[key] = row[key];\n  }\n  return e;\n};\n\nExtensionDao.prototype.queryByExtension = function(extensionName) {\n  var results = this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  var e = this.createObject(results[0]);\n  return e;\n}\n\nExtensionDao.prototype.queryAllByExtension = function(extensionName) {\n  var extensions = []\n  for (var row of this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName)) {\n    var e = this.createObject(row);\n    extensions.push(e);\n  }\n  if (extensions.length) {\n    return extensions;\n  } else {\n    return false;\n  }\n}\n\nExtensionDao.prototype.queryByExtensionAndTableName = function(extensionName, tableName) {\n  var values = new ColumnValues();\n  values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);\n  var extensions = [];\n  for (var row of this.queryForFieldValues(values)) {\n    var e = this.createObject(row);\n    extensions.push(e);\n  }\n  if (extensions.length) {\n    return extensions;\n  } else {\n    return false;\n  }\n}\n\nExtensionDao.prototype.queryByExtensionAndTableNameAndColumnName = function (extensionName, tableName, columnName) {\n  var values = new ColumnValues();\n  values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);\n  values.addColumn(ExtensionDao.COLUMN_COLUMN_NAME, columnName);\n  var extensions = [];\n  for (var row of this.queryForFieldValues(values)) {\n    var e = this.createObject(row);\n    extensions.push(e);\n  }\n  if (extensions.length) {\n    return extensions;\n  } else {\n    return false;\n  }\n};\n\nExtensionDao.prototype.createTable = function() {\n  var tc = new TableCreator(this.geoPackage);\n  return tc.createExtensions();\n}\n\nExtensionDao.prototype.deleteByExtension = function(extensionName) {\n  var values = new ColumnValues();\n  values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  this.deleteWhere(this.buildWhere(values, '='), this.buildWhereArgs(values));\n}\n\nExtensionDao.prototype.deleteByExtensionAndTableName = function(extensionName, tableName) {\n  var values = new ColumnValues();\n  values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName);\n  values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName);\n  this.deleteWhere(this.buildWhere(values, 'and'), this.buildWhereArgs(values));\n}\n\nExtensionDao.TABLE_NAME = \"gpkg_extensions\";\nExtensionDao.COLUMN_TABLE_NAME = \"table_name\";\nExtensionDao.COLUMN_COLUMN_NAME = \"column_name\";\nExtensionDao.COLUMN_EXTENSION_NAME = \"extension_name\";\nExtensionDao.COLUMN_DEFINITION = \"definition\";\nExtensionDao.COLUMN_SCOPE = \"scope\";\n\nExtensionDao.prototype.gpkgTableName = ExtensionDao.TABLE_NAME;\nExtensionDao.prototype.idColumns = [ExtensionDao.COLUMN_TABLE_NAME, ExtensionDao.COLUMN_COLUMN_NAME, ExtensionDao.COLUMN_EXTENSION_NAME];\n\nmodule.exports.ExtensionDao = ExtensionDao;\nmodule.exports.Extension = Extension;\n\n},{\"../dao/columnValues\":10,\"../dao/dao\":11,\"../db/tableCreator\":19,\"util\":343}],26:[function(require,module,exports){\n/**\n * Feature Table Index\n * @module extension/index\n */\n\nvar Extension = require('../index').Extension\n  , ExtensionDao = require('../index').ExtensionDao\n  , BaseExtension = require('../baseExtension')\n  , TableIndexDao = require('./tableIndex').TableIndexDao\n  , TableIndex = require('./tableIndex').TableIndex\n  , GeometryIndexDao = require('./geometryIndex').GeometryIndexDao\n  , RTreeIndexDao = require('../rtree').RTreeIndexDao\n  , RTreeIndex = require('../rtree').RTreeIndex\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , EnvelopeBuilder = require('../../geom/envelopeBuilder');\n\nvar proj4 = require('proj4');\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nvar util = require('util');\n\n/**\n * This class will either use the RTree index if it exists, or the\n * Feature Table Index NGA Extension implementation. This extension is used to\n * index Geometries within a feature table by their minimum bounding box for\n * bounding box queries.\n * @extends {module:extension/baseExtension~BaseExtension}\n * @class\n */\nvar FeatureTableIndex = function(geoPackage, featureDao) {\n  BaseExtension.call(this, geoPackage);\n\n  this.progress;\n\n  /**\n   * Feature Dao to index\n   * @type {module:features/user/featureDao~FeatureDao}\n   */\n  this.featureDao = featureDao;\n\n  this.extensionName = Extension.buildExtensionName(FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR, FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR);\n\n  this.extensionDefinition = FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION;\n\n  this.tableName = featureDao.table_name;\n\n  this.columnName = featureDao.getGeometryColumnName();\n\n  this.extensionsDao = geoPackage.getExtensionDao();\n\n  this.tableIndexDao = geoPackage.getTableIndexDao();\n\n  this.geometryIndexDao = geoPackage.getGeometryIndexDao(featureDao);\n\n  this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao);\n  this.rtreeIndexDao.gpkgTableName = 'rtree_'+this.tableName+'_'+this.columnName;\n\n  this.rtreeIndex = new RTreeIndex(geoPackage, featureDao);\n\n  /**\n   * true if the table is indexed with an RTree\n   * @type {Boolean}\n   */\n  this.rtreeIndexed = this.hasExtension('gpkg_rtree_index', this.tableName, this.columnName);\n}\n\nutil.inherits(FeatureTableIndex, BaseExtension);\n\n/**\n * Index the table if not already indexed\n * @param  {Function} progress function which is called with progress while indexing\n * @return {Promise<Boolean>} promise resolved when the indexing is complete\n */\nFeatureTableIndex.prototype.index = function(progress) {\n  return this.indexWithForce(false, progress);\n};\n\n/**\n * Index the table if not already indexed or force is true\n * @param  {Boolean} force force index even if the table is already indexed\n * @param  {Function} progress function which is called with progress while indexing\n * @return {Promise<Boolean>} promise resolved when the indexing is complete\n */\nFeatureTableIndex.prototype.indexWithForce = function(force, progress) {\n  progress = progress || function() {};\n  this.progress = function(message) {\n    setTimeout(progress, 0, message);\n  };\n  var indexed = this.isIndexed();\n  if (force || !indexed) {\n    return this.getOrCreateExtension()\n    .then(function(extension) {\n      return this.getOrCreateTableIndex();\n    }.bind(this))\n    .then(function(tableIndex) {\n      return this.createOrClearGeometryIndicies()\n      .then(function() {\n        return this.indexTable(tableIndex);\n      }.bind(this))\n      .then(function() {\n        return true;\n      });\n    }.bind(this));\n  } else {\n    return Promise.resolve(indexed);\n  }\n}\n\n/**\n * Check if the table is indexed either with an RTree or the NGA Feature Table Index\n * @return {Boolean}\n */\nFeatureTableIndex.prototype.isIndexed = function () {\n  if (this.rtreeIndexed) return true;\n\n  try {\n    var result = this.getFeatureTableIndexExtension();\n    if (result) {\n      var contentsDao = this.geoPackage.getContentsDao();\n      var contents = contentsDao.queryForId(this.tableName);\n      if (!contents) return false;\n      var lastChange = new Date(contents.last_change);\n      var tableIndex = this.tableIndexDao.queryForId(this.tableName);\n      if (!tableIndex || !tableIndex.last_indexed) {\n        return false;\n      }\n      var lastIndexed = new Date(tableIndex.last_indexed);\n      return lastIndexed >= lastChange;\n    } else {\n      return false;\n    }\n  } catch (e) {\n    return false;\n  }\n};\n\n/**\n * Returns the feature table index extension for this table and column name if exists\n * @return {module:extension~Extension}\n */\nFeatureTableIndex.prototype.getFeatureTableIndexExtension = function () {\n  return this.getExtension(this.extensionName, this.tableName, this.columnName);\n};\n\n/**\n * Get or create the extension for this table name and column name\n * @return {module:extension~Extension}\n */\nFeatureTableIndex.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.READ_WRITE);\n};\n\n/**\n * Get or create if needed the table index\n * @return {Promise<TableIndex>}\n */\nFeatureTableIndex.prototype.getOrCreateTableIndex = function() {\n  var tableIndex = this.getTableIndex();\n  if (tableIndex) return Promise.resolve(tableIndex);\n  return this.tableIndexDao.createTable()\n  .then(function() {\n    this.createTableIndex();\n    return this.getTableIndex();\n  }.bind(this));\n};\n\n/**\n * Create the table index\n * @return {module:extension/index~TableIndex}\n */\nFeatureTableIndex.prototype.createTableIndex = function() {\n  var ti = new TableIndex();\n  ti.table_name = this.tableName;\n  ti.last_indexed = this.lastIndexed;\n  return this.tableIndexDao.create(ti);\n};\n\n/**\n * Get the table index\n * @return {module:extension/index~TableIndex}\n */\nFeatureTableIndex.prototype.getTableIndex = function() {\n  if (this.tableIndexDao.isTableExists()) {\n    return this.tableIndexDao.queryForId(this.tableName);\n  } else {\n    return;\n  }\n};\n\n/**\n * Clear the geometry indices or create the table if needed\n * @return {Promise} resolved when complete\n */\nFeatureTableIndex.prototype.createOrClearGeometryIndicies = function() {\n  return this.geometryIndexDao.createTable()\n  .then(function() {\n    return this.clearGeometryIndicies();\n  }.bind(this));\n};\n\n/**\n * Clears the geometry indices\n * @return {Number} number of rows deleted\n */\nFeatureTableIndex.prototype.clearGeometryIndicies = function() {\n  var where = this.geometryIndexDao.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, this.tableName);\n  var whereArgs = this.geometryIndexDao.buildWhereArgs(this.tableName);\n  return this.geometryIndexDao.deleteWhere(where, whereArgs);\n};\n\n/**\n * Indexes the table\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex\n * @return {Promise} resolved when complete\n */\nFeatureTableIndex.prototype.indexTable = function(tableIndex) {\n  return new Promise(function(resolve, reject) {\n    setTimeout(function() {\n      this.indexChunk(0, tableIndex, resolve, reject);\n    }.bind(this));\n  }.bind(this))\n  .then(function(result) {\n    return this.updateLastIndexed(tableIndex);\n  }.bind(this));\n};\n\n/**\n * Indexes a chunk of 100 rows\n * @param  {Number} page       page to start on\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex\n * @param  {Function} resolve    function to call when all chunks are indexed\n * @param  {Function} reject     called if there is an error\n */\nFeatureTableIndex.prototype.indexChunk = function(page, tableIndex, resolve, reject) {\n  var rows = this.featureDao.queryForChunk(100, page);\n  if (rows.length) {\n    this.progress('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100));\n    console.log('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100));\n    rows.forEach(function(row) {\n      var fr = this.featureDao.getRow(row);\n      this.indexRow(tableIndex, fr.getId(), fr.getGeometry());\n    }.bind(this));\n    setTimeout(function() {\n      this.indexChunk(++page, tableIndex, resolve, reject);\n    }.bind(this));\n  } else {\n    resolve();\n  }\n}\n\n/**\n * Indexes a row\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex`\n * @param  {Number} geomId     id of the row\n * @param  {module:geom/geometryData~GeometryData} geomData   GeometryData to index\n * @return {Boolean} success\n */\nFeatureTableIndex.prototype.indexRow = function(tableIndex, geomId, geomData) {\n  if (!geomData) return false;\n  var envelope = geomData.envelope;\n  if (!envelope) {\n    var geometry = geomData.geometry;\n    if (geometry) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geometry);\n    }\n  }\n  if (envelope) {\n    var geometryIndex = this.geometryIndexDao.populate(tableIndex, geomId, envelope);\n    return this.geometryIndexDao.createOrUpdate(geometryIndex);\n  } else {\n    return false;\n  }\n};\n\n/**\n * Update the last time this feature table was indexed\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex\n * @return {Object} update status\n */\nFeatureTableIndex.prototype.updateLastIndexed = function(tableIndex) {\n  if (!tableIndex) {\n    tableIndex = new TableIndex();\n    tableIndex.table_name = this.tableName;\n  }\n  tableIndex.last_indexed = new Date().toISOString();\n  var updateIndex = this.tableIndexDao.createOrUpdate(tableIndex);\n  return updateIndex;\n}\n\n/**\n * Query the index with the specified bounding box and projection\n * @param  {module:boundingBox~BoundingBox} boundingBox bounding box to query for\n * @param  {string} projection  projection the boundingBox is in\n * @return {Iterable}\n */\nFeatureTableIndex.prototype.queryWithBoundingBox = function(boundingBox, projection) {\n  var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection);\n  var envelope = projectedBoundingBox.buildEnvelope();\n  return this.queryWithGeometryEnvelope(envelope);\n}\n\n/**\n * Query witha geometry envelope\n * @param  {Envelope} envelope envelope\n * @return {Iterable}\n */\nFeatureTableIndex.prototype.queryWithGeometryEnvelope = function(envelope) {\n  if (this.rtreeIndexed) {\n    return this.rtreeIndexDao.queryWithGeometryEnvelope(envelope);\n  } else {\n    return this.geometryIndexDao.queryWithGeometryEnvelope(envelope);\n  }\n}\n\n\n/**\n * Count the index with the specified bounding box and projection\n * @param  {module:boundingBox~BoundingBox} boundingBox bounding box to query for\n * @param  {string} projection  projection the boundingBox is in\n * @return {Number}\n */\nFeatureTableIndex.prototype.countWithBoundingBox = function(boundingBox, projection) {\n  var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection);\n  var envelope = projectedBoundingBox.buildEnvelope();\n  return this.countWithGeometryEnvelope(envelope);\n};\n\n/**\n * Count with a geometry envelope\n * @param  {Envelope} envelope envelope\n * @return {Number}\n */\nFeatureTableIndex.prototype.countWithGeometryEnvelope = function(envelope) {\n  if (this.rtreeIndexed) {\n    return this.rtreeIndexDao.countWithGeometryEnvelope(envelope);\n  } else {\n    return this.geometryIndexDao.countWithGeometryEnvelope(envelope);\n  }\n};\n\nFeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR = 'nga';\nFeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR = 'geometry_index';\nFeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/geometry-index.html';\n\nmodule.exports = FeatureTableIndex;\n\n},{\"../../core/contents\":8,\"../../geom/envelopeBuilder\":72,\"../baseExtension\":20,\"../index\":25,\"../rtree\":44,\"./geometryIndex\":27,\"./tableIndex\":28,\"proj4\":285,\"util\":343}],27:[function(require,module,exports){\n/**\n * GeometryIndexDao module.\n * @module extension/index\n */\n\nvar Dao = require('../../dao/dao')\n  , TableIndexDao = require('./tableIndex').TableIndexDao\n  , TableCreator = require('../../db/tableCreator');\n\nvar util = require('util');\n\n/**\n * Geometry Index object, for indexing data within user tables\n * @class\n */\nvar GeometryIndex = function() {\n\n  /**\n   * Name of the table\n   * @member {String}\n   */\n  this.table_name;\n\n  /**\n   * Geometry Id column\n   * @member {Number}\n   */\n  this.geom_id;\n\n  /**\n   * Min X\n   * @member {Number}\n   */\n  this.min_x;\n\n  /**\n   * Max X\n   * @member {Number}\n   */\n  this.max_x;\n\n  /**\n   * Min Y\n   * @member {Number}\n   */\n  this.min_y;\n\n  /**\n   * Max Y\n   * @member {Number}\n   */\n  this.max_y;\n\n  /**\n   * Min Z\n   * @member {Number}\n   */\n  this.min_z;\n\n  /**\n   * Max Z\n   * @member {Number}\n   */\n  this.max_z;\n\n  /**\n   * Min M\n   * @member {Number}\n   */\n  this.min_m;\n\n  /**\n   * Max M\n   * @member {Number}\n   */\n  this.max_m;\n}\n\nGeometryIndex.prototype.setTableIndex = function(tableIndex) {\n  this.table_name = tableIndex.table_name;\n}\n\n/**\n * Geometry Index Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar GeometryIndexDao = function(geoPackage, featureDao) {\n  Dao.call(this, geoPackage);\n  this.featureDao = featureDao;\n};\n\nutil.inherits(GeometryIndexDao, Dao);\n\nGeometryIndexDao.prototype.createObject = function() {\n  return new GeometryIndex();\n};\n\n/**\n * Get the Table Index of the Geometry Index\n *\n * @param {module:extension/index~GeometryIndex} geometryIndex geometry index\n * @return {module:extension/index~TableIndex}\n */\nGeometryIndexDao.prototype.getTableIndex = function(geometryIndex) {\n  var dao = this.geoPackage.getTableIndexDao();\n  return dao.queryForId(geometryIndex.tableName);\n};\n\n/**\n * Query by table name\n * @param  {string} tableName table name\n * @return {Iterable}\n */\nGeometryIndexDao.prototype.queryForTableName = function(tableName) {\n  return this.queryForEach(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);\n};\n\n/**\n *  Count by table name\n *\n *  @param tableName table name\n *\n *  @return count\n */\n/**\n * Count by table name\n * @param  {string}   tableName table name\n * @return {Number}\n */\nGeometryIndexDao.prototype.countByTableName = function(tableName) {\n  return this.count(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);\n};\n\n/**\n *  Populate a new geometry index from an envelope\n *\n *  @param tableIndex table index\n *  @param geomId     geometry id\n *  @param envelope   geometry envelope\n *  @param callback called with results of the populate\n */\n/**\n * Populate a new goemetry index from an envelope\n * @param  {module:extension/index~TableIndex} tableIndex TableIndex\n * @param  {Number} geometryId id of the geometry\n * @param  {Object} envelope   envelope to store\n * @return {module:extension/index~GeometryIndex}\n */\nGeometryIndexDao.prototype.populate = function(tableIndex, geometryId, envelope) {\n  var geometryIndex  = new GeometryIndex();\n  geometryIndex.setTableIndex(tableIndex);\n  geometryIndex.geom_id = geometryId;\n  geometryIndex.min_x = envelope.minX;\n  geometryIndex.min_y = envelope.minY;\n  geometryIndex.max_x = envelope.maxX;\n  geometryIndex.max_y = envelope.maxY;\n  if (envelope.hasZ) {\n    geometryIndex.min_z = envelope.minZ;\n    geometryIndex.max_z = envelope.maxZ;\n  }\n\n  if (envelope.hasM) {\n    geometryIndex.min_m = envelope.minM;\n    geometryIndex.max_m = envelope.maxM;\n  }\n  return geometryIndex;\n};\n\n/**\n * Create the GeometryIndex table\n * @return {Promise}\n */\nGeometryIndexDao.prototype.createTable = function() {\n  var exists = this.isTableExists();\n  if (exists) return Promise.resolve(true);\n  var tc = new TableCreator(this.geoPackage);\n  return tc.createGeometryIndex();\n}\n\n/**\n * Query the index with an envelope\n * @param  {Object} envelope envelope\n * @param  {Number} envelope.minX min x\n * @param  {Number} envelope.maxX max x\n * @param  {Number} envelope.minY min y\n * @param  {Number} envelope.maxY max y\n * @return {Iterable}\n */\nGeometryIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) {\n  var tableName = this.featureDao.gpkgTableName;\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, tableName);\n  where += ' and ';\n  var minXLessThanMaxX = envelope.minX < envelope.maxX;\n  if (minXLessThanMaxX) {\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<=');\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>=');\n  } else {\n    where += '(';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.minX, '>=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.maxX, '<=');\n    where += ')';\n  }\n\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Y, envelope.maxY, '<=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Y, envelope.minY, '>=');\n\n  var whereArgs = [tableName, envelope.maxX, envelope.minX];\n  if (!minXLessThanMaxX) {\n    whereArgs.push(envelope.minX, envelope.maxX);\n  }\n  whereArgs.push(envelope.maxY, envelope.minY);\n  if (envelope.hasZ) {\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Z, envelope.minZ, '<=');\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Z, envelope.maxZ, '>=');\n    whereArgs.push(envelope.maxZ, envelope.minZ);\n  }\n\n  if (envelope.hasM) {\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_M, envelope.minM, '<=');\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_M, envelope.maxM, '>=');\n    whereArgs.push(envelope.maxM, envelope.minM);\n  }\n  return {\n    join: 'inner join \"' + tableName + '\" on \"' + tableName + '\".' + this.featureDao.idColumns[0] + ' = ' + GeometryIndexDao.COLUMN_GEOM_ID,\n    where,\n    whereArgs,\n    tableNameArr: ['\"' + tableName + '\".*']\n  };\n};\n\nGeometryIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) {\n  var result = this._generateGeometryEnvelopeQuery(envelope);\n  return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);\n};\n\nGeometryIndexDao.prototype.countWithGeometryEnvelope = function(envelope) {\n  var result = this._generateGeometryEnvelopeQuery(envelope);\n  return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);\n};\n\nGeometryIndexDao.TABLE_NAME = \"nga_geometry_index\";\nGeometryIndexDao.COLUMN_TABLE_NAME = GeometryIndexDao.TABLE_NAME + \".table_name\";\nGeometryIndexDao.COLUMN_GEOM_ID = GeometryIndexDao.TABLE_NAME + \".geom_id\";\nGeometryIndexDao.COLUMN_MIN_X = GeometryIndexDao.TABLE_NAME + \".min_x\";\nGeometryIndexDao.COLUMN_MAX_X = GeometryIndexDao.TABLE_NAME + \".max_x\";\nGeometryIndexDao.COLUMN_MIN_Y = GeometryIndexDao.TABLE_NAME + \".min_y\";\nGeometryIndexDao.COLUMN_MAX_Y = GeometryIndexDao.TABLE_NAME + \".max_y\";\nGeometryIndexDao.COLUMN_MIN_Z = GeometryIndexDao.TABLE_NAME + \".min_z\";\nGeometryIndexDao.COLUMN_MAX_Z = GeometryIndexDao.TABLE_NAME + \".max_z\";\nGeometryIndexDao.COLUMN_MIN_M = GeometryIndexDao.TABLE_NAME + \".min_m\";\nGeometryIndexDao.COLUMN_MAX_M = GeometryIndexDao.TABLE_NAME + \".max_m\";\n\nGeometryIndexDao.prototype.gpkgTableName = GeometryIndexDao.TABLE_NAME;\nGeometryIndexDao.prototype.idColumns = ['table_name', 'geom_id'];\n\nmodule.exports.GeometryIndexDao = GeometryIndexDao;\nmodule.exports.GeometryIndex = GeometryIndex;\n\n},{\"../../dao/dao\":11,\"../../db/tableCreator\":19,\"./tableIndex\":28,\"util\":343}],28:[function(require,module,exports){\n/**\n * TableIndexDao module.\n * @module extension/index\n */\n\nvar Dao = require('../../dao/dao')\n  , TableCreator = require('../../db/tableCreator');\n\nvar util = require('util');\n\n/**\n * Table Index object, for indexing data within user tables\n * @class TableIndex\n */\nvar TableIndex = function() {\n\n  /**\n   * Name of the table\n   * @member {String}\n   */\n  this.table_name;\n\n  /**\n   * Last indexed date\n   * @member {String}\n   */\n  this.last_indexed;\n}\n\n/**\n * Table Index Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n * @param {module:geoPackage~GeoPackage}  geoPackage The GeoPackage object\n */\nvar TableIndexDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(TableIndexDao, Dao);\n\n/**\n * Create a new TableIndex object\n * @return {module:extension/index~TableIndex}\n */\nTableIndexDao.prototype.createObject = function() {\n  return new TableIndex();\n};\n\nTableIndexDao.prototype.getGeometryIndices = function(tableIndex) {\n\n};\n\nTableIndexDao.prototype.getGeometryIndexCount = function(tableIndex) {\n\n};\n\n/**\n * Creates the tables necessary\n * @return {Promise}\n */\nTableIndexDao.prototype.createTable = function() {\n  var tc = new TableCreator(this.geoPackage);\n  return tc.createTableIndex();\n}\n\n\nTableIndexDao.TABLE_NAME = \"nga_table_index\";\nTableIndexDao.COLUMN_TABLE_NAME = \"table_name\";\nTableIndexDao.COLUMN_LAST_INDEXED = \"last_indexed\";\n\nTableIndexDao.prototype.gpkgTableName = TableIndexDao.TABLE_NAME;\nTableIndexDao.prototype.idColumns = [TableIndexDao.COLUMN_TABLE_NAME];\n\nmodule.exports.TableIndexDao = TableIndexDao;\nmodule.exports.TableIndex = TableIndex;\n\n},{\"../../dao/dao\":11,\"../../db/tableCreator\":19,\"util\":343}],29:[function(require,module,exports){\n/**\n * MetadataExtension module.\n * @module extension/metadata\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension;\n\nvar util = require('util');\n\n/**\n * Metadata extension\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @class\n * @extends {module:extension/baseExtension~BaseExtension}\n */\nvar MetadataExtension = function(geoPackage) {\n  BaseExtension.call(this, geoPackage);\n\n  this.extensionName = MetadataExtension.EXTENSION_NAME;\n\n  this.extensionDefinition = MetadataExtension.EXTENSION_Metadata_DEFINITION;\n}\n\nutil.inherits(MetadataExtension, BaseExtension);\n\n/**\n * Get or create the metadata extension\n * @return {Promise}\n */\nMetadataExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);\n};\n\nMetadataExtension.EXTENSION_NAME = 'gpkg_metadata';\nMetadataExtension.EXTENSION_Metadata_AUTHOR = 'gpkg';\nMetadataExtension.EXTENSION_Metadata_NAME_NO_AUTHOR = 'metadata';\nMetadataExtension.EXTENSION_Metadata_DEFINITION = 'http://www.geopackage.org/spec/#extension_metadata';\n\nmodule.exports.MetadataExtension = MetadataExtension;\n\n},{\"../.\":25,\"../baseExtension\":20,\"util\":343}],30:[function(require,module,exports){\n/**\n * @module  extension/relatedTables\n */\n\n/**\n * Dublin Core Metadata Initiative term types\n * @class\n */\nfunction DublinCoreType() {}\n\nmodule.exports = DublinCoreType;\n\n/**\n * A point or period of time associated with an event in the lifecycle of\n * the resource.\n * @type {Object}\n */\nDublinCoreType.DATE = {\n  name: 'date'\n};\n\n/**\n * An account of the resource.\n * @type {Object}\n */\nDublinCoreType.DESCRIPTION = {\n  name: 'description'\n};\n\n/**\n * The file format, physical medium, or dimensions of the resource.\n * @type {Object}\n */\nDublinCoreType.FORMAT = {\n  name: 'format',\n  synonyms: ['content_type']\n};\n\n/**\n * An unambiguous reference to the resource within a given context.\n * @type {Object}\n */\nDublinCoreType.IDENTIFIER = {\n  name: 'identifier',\n  synonyms: ['id']\n};\n\n/**\n * A related resource from which the described resource is derived.\n * @type {Object}\n */\nDublinCoreType.SOURCE = {\n  name: 'source'\n};\n\n/**\n * A name given to the resource.\n * @type {Object}\n */\nDublinCoreType.TITLE = {\n  name: 'title'\n};\n\n/**\n * Get the Dublin Core Type from the name\n * @param  {string} name name\n * @return {module:extension/relatedTables~DublinCoreType}\n */\nDublinCoreType.fromName = function(name) {\n  for (var prop in module.exports) {\n    var type = module.exports[prop];\n    if (type.name === name) {\n      return type;\n    }\n  }\n  for (var prop in module.exports) {\n    var type = module.exports[prop];\n    if (type.synonyms) {\n      for (var i = 0; i < type.synonyms.length; i++) {\n        if (type.synonyms[i] === name) {\n          return type;\n        }\n      }\n    }\n  }\n}\n\n},{}],31:[function(require,module,exports){\n/**\n * @module extension/relatedTables\n */\n\nvar Dao = require('../../dao/dao')\n  , ColumnValues = require('../../dao/columnValues');\n\nvar util = require('util');\n\n/**\n * Describes the relationships between a base table, a related data table, and a\n * mapping table\n * @class ExtendedRelation\n */\nvar ExtendedRelation = function() {\n\n  /**\n   * Autoincrement primary key\n   * @member {Number}\n   */\n  this.id;\n\n  /**\n   * Name of the table containing the base data (e.g., features) to relate\n   * @member {String}\n   */\n  this.base_table_name;\n\n  /**\n   * Name of the primary key column in base_table_name\n   * @member {String}\n   */\n  this.base_primary_column;\n\n  /**\n   * Name of the table containing the related content\n   * @member {String}\n   */\n  this.related_table_name;\n\n  /**\n   * Name of the primary key column in related_table_name\n   * @member {String}\n   */\n  this.related_primary_column;\n\n  /**\n   * Name (profile) of the relationship\n   * @member {String}\n   */\n  this.relation_name;\n\n  /**\n   * Name of a mapping table\n   * @member {String}\n   */\n  this.mapping_table_name;\n}\n\n/**\n * Extended Relations Data Access Object\n * @class ExtendedRelationDao\n * @extends {module:dao/dao~Dao}\n */\nvar ExtendedRelationDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(ExtendedRelationDao, Dao);\n\n/**\n * Create a {module:extension/relatedTables~ExtendedRelation} object\n * @return {module:extension/relatedTables~ExtendedRelation}\n */\nExtendedRelationDao.prototype.createObject = function() {\n  return new ExtendedRelation();\n};\n\n/**\n * Create the necessary tables for this dao\n * @return {Promise}\n */\nExtendedRelationDao.prototype.createTable = function() {\n  var tc = this.geoPackage.getTableCreator();\n  return tc.createExtendedRelations();\n}\n\n/**\n * Get all the base table names\n * @return {string[]}\n */\nExtendedRelationDao.prototype.getBaseTables = function() {\n  var baseTables = [];\n  var baseTableColumns = this.queryForColumns('base_table_name');\n  for (var i = 0; i < baseTableColumns.length; i++) {\n    baseTables.push(baseTableColumns[i].base_table_name);\n  }\n  return baseTables;\n};\n\n/**\n * Get all the related table names\n * @return {string[]}\n */\nExtendedRelationDao.prototype.getRelatedTables = function() {\n  var relatedTables = [];\n  var relatedTableColumns = this.queryForColumns('related_table_name');\n  for (var i = 0; i < relatedTableColumns.length; i++) {\n    relatedTables.push(relatedTableColumns[i].related_table_name);\n  }\n  return relatedTables;\n};\n\n/**\n * Get all relations for the given base table name\n * @param  {string} baseTable base table name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getBaseTableRelations = function(baseTable) {\n  return this.queryForAllEq(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable);\n}\n\n/**\n * Get all relations for the given related table name\n * @param  {string} relatedTable related table name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getRelatedTableRelations = function(relatedTable) {\n  return this.queryForAllEq(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTable);\n}\n\n/**\n * Get all relations for the base table with the relation name\n * @param  {string} baseTable base table name\n * @param  {string} name      relation name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getBaseTableRelationsWithName = function(baseTable, name) {\n  var fields = new ColumnValues();\n  fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable);\n  fields.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, name);\n  var where = this.buildWhere(fields, 'and');\n  var whereArgs = this.buildWhereArgs(fields);\n  return this.queryForAll(where, whereArgs);\n}\n\n/**\n * Get all relations to the table.  Returns relations where the table is the base table and relations where the table is the related table.\n * @param  {string} table table name to query for\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getTableRelations = function(table) {\n  var fields = new ColumnValues();\n  fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, table);\n  fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, table);\n  var where = this.buildWhere(fields, 'or');\n  var whereArgs = this.buildWhereArgs(fields);\n  return this.queryForAll(where, whereArgs);\n}\n\n/**\n * Gets all relationships in the GeoPackage with an optional base table name and an optional base id\n * @param {String} [baseTableName] base table name\n * @param {String} [relatedTableName] related table name\n * @param {String} [mappingTableName] mapping table name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.getRelations = function(baseTableName, relatedTableName, mappingTableName) {\n  var fields = new ColumnValues();\n  fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTableName);\n  fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTableName);\n  fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName);\n  var where = this.buildWhereLike(fields, 'and');\n  var whereArgs = this.buildWhereArgs(fields);\n  return this.queryForAll(where, whereArgs);\n};\n\n/**\n * Get all relations by the mapping table name\n * @param  {string} mappingTableName name of the mapping table\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nExtendedRelationDao.prototype.queryByMappingTableName = function(mappingTableName) {\n  var fields = new ColumnValues();\n  fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName);\n  var where = this.buildWhere(fields, 'and');\n  var whereArgs = this.buildWhereArgs(fields);\n  return this.queryForAll(where, whereArgs);\n}\n\nExtendedRelationDao.TABLE_NAME = 'gpkgext_relations';\nExtendedRelationDao.COLUMN_ID = ExtendedRelationDao.TABLE_NAME + '.id';\nExtendedRelationDao.COLUMN_BASE_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.base_table_name';\nExtendedRelationDao.COLUMN_BASE_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.base_primary_column';\nExtendedRelationDao.COLUMN_RELATED_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.related_table_name';\nExtendedRelationDao.COLUMN_RELATED_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.related_primary_column';\nExtendedRelationDao.COLUMN_RELATION_NAME = ExtendedRelationDao.TABLE_NAME + '.relation_name';\nExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.mapping_table_name';\n\nExtendedRelationDao.prototype.gpkgTableName = ExtendedRelationDao.TABLE_NAME;\nExtendedRelationDao.prototype.idColumns = ['id'];\n\nmodule.exports.ExtendedRelationDao = ExtendedRelationDao;\nmodule.exports.ExtendedRelation = ExtendedRelation;\n\n},{\"../../dao/columnValues\":10,\"../../dao/dao\":11,\"util\":343}],32:[function(require,module,exports){\n/**\n * RelatedTablesExtension module.\n * @module extension/relatedTables\n * @see module:extension/BaseExtension\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension\n  , ColumnValues = require('../../dao/columnValues')\n  , OptionBuilder = require('../../optionBuilder')\n  , ExtendedRelationDao = require('./extendedRelation').ExtendedRelationDao\n  , ExtendedRelation = require('./extendedRelation').ExtendedRelation\n  , MediaDao = require('./mediaDao')\n  , MediaTable = require('./mediaTable')\n  , SimpleAttributesDao = require('./simpleAttributesDao')\n  , SimpleAttributesTable = require('./simpleAttributesTable')\n  , UserMappingTable = require('./userMappingTable')\n  , UserMappingDao = require('./userMappingDao')\n  , UserCustomDao = require('../../user/custom/userCustomDao')\n  , UserDao = require('../../user/userDao')\n  , UserTableReader = require('../../user/userTableReader')\n  , RelationType = require('./relationType')\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , Contents = require('../../core/contents').Contents\n  , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao;\n\nvar util = require('util');\n\n/**\n * Related Tables Extension\n * @param  {module:geoPackage~GeoPackage} geoPackage the GeoPackage object\n * @class\n * @extends {module:extension/baseExtension~BaseExtension}\n */\nvar RelatedTablesExtension = function(geoPackage) {\n  BaseExtension.call(this, geoPackage);\n  this.extendedRelationDao = geoPackage.getExtendedRelationDao();\n}\n\nutil.inherits(RelatedTablesExtension, BaseExtension);\n\n/**\n * Get or create the extension\n * @return {Promise}\n */\nRelatedTablesExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, 'gpkgext_relations', undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE)\n  .then(function() {\n    return this.extendedRelationDao.createTable();\n  }.bind(this));\n};\n\n/**\n * Get or create the extension for the mapping table\n * @param  {string} mappingTableName user mapping table\n * @return {Promise}\n */\nRelatedTablesExtension.prototype.getOrCreateMappingTable = function(mappingTableName) {\n  return this.getOrCreateExtension()\n  .then(function() {\n    this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, mappingTableName, undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE);\n  }.bind(this));\n}\n\n/**\n * Set the contents in the UserRelatedTable\n * @param  {module:extension/relatedTables~UserRelatedTable} userRelatedTable user related table\n */\nRelatedTablesExtension.prototype.setContents = function(userRelatedTable) {\n  var contents = this.geoPackage.getContentsDao().queryForId(userRelatedTable.table_name);\n  userRelatedTable.setContents(contents);\n}\n\n/**\n * Reads the user table and creates a UserCustomDao\n * @param  {string} tableName       table name to reader\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/custom~UserCustomDao}\n */\nRelatedTablesExtension.prototype.getUserDao = function(tableName, requiredColumns) {\n  return UserCustomDao.readTable(this.geoPackage, tableName, requiredColumns);\n}\n\n/**\n * Gets the UserMappingDao from the mapping table name\n * @param  {string|module:extension/relatedTables~ExtendedRelation} tableName user mapping table name or ExtendedRelation object\n * @return {module:extension/relatedTables~UserMappingDao}\n */\nRelatedTablesExtension.prototype.getMappingDao = function(tableName) {\n  if (tableName.mapping_table_name) {\n    tableName = tableName.mapping_table_name;\n  }\n  return new UserMappingDao(this.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage);\n}\n\n/**\n * Gets all relationships in the GeoPackage with an optional base table name and an optional base id\n * @param {string} [baseTableName] base table name\n * @return {module:extension/relatedTables~ExtendedRelation[]}\n */\nRelatedTablesExtension.prototype.getRelationships = function(baseTableName) {\n  if (this.extendedRelationDao.isTableExists()) {\n    if (baseTableName) {\n      return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(baseTableName);\n    }\n    return this.extendedRelationDao.queryForAll();\n  }\n  return [];\n}\n\n/**\n * Gets all relationships in the GeoPackage with an optional base table name and an optional base id\n * @param {String} [baseTableName] base table name\n * @param {String} [relatedTableName] related table name\n * @param {String} [mappingTableName] mapping table name\n * @return {Boolean}\n */\nRelatedTablesExtension.prototype.hasRelations = function(baseTableName, relatedTableName, mappingTableName) {\n  var relations = [];\n  if (this.extendedRelationDao.isTableExists()) {\n    relations = this.extendedRelationDao.getRelations(baseTableName, relatedTableName, mappingTableName);\n  }\n  return relations;\n};\n\nRelatedTablesExtension.prototype.getRelatedRows = function(baseTableName, baseId) {\n  var relationships = this.getRelationships(baseTableName);\n  for (var i = 0; i < relationships.length; i++) {\n    var relation = relationships[i];\n    var mappingRows = this.getMappingRowsForBase(relation.mapping_table_name, baseId);\n    relation.mappingRows = mappingRows;\n    var userDao;\n    // TODO do this for all known types\n    if (relation.relation_name === 'media') {\n      userDao = MediaDao.readTable(this.geoPackage, relation.related_table_name);\n    } else {\n      userDao = UserDao.readTable(this.geoPackage, relation.related_table_name);\n    }\n    for (var m = 0; m < mappingRows.length; m++) {\n      var mappingRow = mappingRows[m];\n      mappingRow.row = userDao.queryForId(mappingRow.related_id);\n    }\n  }\n  return relationships;\n}\n\nRelatedTablesExtension.RelationshipBuilder = function() {\n  return OptionBuilder([\n    'baseTableName',\n    'relatedTableName',\n    'userMappingTable',\n    'mappingTableName',\n    'relationName',\n    'relationAuthor',\n    'relationType',\n    'relatedTable'\n  ]);\n}\n/**\n * Convience object to build a Relationship object for querying and adding\n * @typedef {Object} module:extension/relatedTables~Relationship\n * @property  {module:extension/relatedTables~RelationType} relationType type of relationship\n * @property  {string} baseTableName base table name\n * @property  {string} relatedTableName related table name\n * @property  {string} relationAuthor relationship author\n * @property  {string} mappingTableName mapping table name\n * @property  {module:extension/relatedTables~UserMappingTable} userMappingTable UserMappingTable\n * @property  {module:extension/relatedTables~UserRelatedTable} relatedTable UserRelatedTable\n */\nRelatedTablesExtension.prototype.getRelationshipBuilder = function() {\n  return RelatedTablesExtension.RelationshipBuilder();\n}\n\n/**\n * Adds a relationship to the GeoPackage\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation|Boolean>}\n */\nRelatedTablesExtension.prototype.addRelationship = function(relationship) {\n  var extendedRelation = this.extendedRelationDao.createObject();\n  var userMappingTable = relationship.userMappingTable;\n  if (relationship.hasOwnProperty('base_table_name')) {\n    extendedRelation = relationship;\n    userMappingTable = UserMappingTable.create(extendedRelation.mapping_table_name);\n  } else {\n    if (relationship.relationType) {\n      relationship.relationName = relationship.relationType.name;\n    }\n    if (relationship.relationAuthor) {\n      relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName);\n    }\n    if (relationship.mappingTableName) {\n      userMappingTable = UserMappingTable.create(relationship.mappingTableName);\n    }\n\n    if (relationship.relatedTable) {\n      this.createRelatedTable(relationship.relatedTable);\n      relationship.relatedTableName = relationship.relatedTable.table_name;\n      relationship.relationName = relationship.relatedTable.relation_name;\n    }\n\n    extendedRelation.base_table_name = relationship.baseTableName;\n    extendedRelation.base_primary_column = this.getPrimaryKeyColumnName(relationship.baseTableName);\n    extendedRelation.related_table_name = relationship.relatedTableName;\n    extendedRelation.related_primary_column = this.getPrimaryKeyColumnName(relationship.relatedTableName);\n    extendedRelation.mapping_table_name = userMappingTable.table_name;\n    extendedRelation.relation_name = relationship.relationName;\n  }\n\n  if (!this.validateRelationship(extendedRelation.base_table_name, extendedRelation.related_table_name, extendedRelation.relation_name)) {\n    return Promise.resolve(false);\n  }\n  return this.createUserMappingTable(userMappingTable)\n  .then(function() {\n    var mappingTableRelations = this.extendedRelationDao.queryByMappingTableName(extendedRelation.mapping_table_name);\n    if (mappingTableRelations.length) {\n      return mappingTableRelations[0];\n    }\n    this.extendedRelationDao.create(extendedRelation);\n    return extendedRelation;\n  }.bind(this));\n}\n\n/**\n * Get the primary key column name from the specified table\n * @param  {string} tableName table name\n * @return {string}\n */\nRelatedTablesExtension.prototype.getPrimaryKeyColumnName = function(tableName) {\n  var reader = new UserTableReader(tableName);\n  var table = reader.readTable(this.geoPackage.getDatabase());\n  return table.getPkColumn().name;\n}\n\n/**\n * Adds a features relationship between the base feature and related feature\n * table. Creates a default user mapping table if needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addFeaturesRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.FEATURES.name;\n  } else {\n    relationship.relationType = RelationType.FEATURES;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Adds a tiles relationship between the base table and related tile\n * table. Creates a default user mapping table if needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addTilesRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.TILES.name;\n  } else {\n    relationship.relationType = RelationType.TILES;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Adds an attributes relationship between the base table and related attribute\n * table. Creates a default user mapping table if needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addAttributesRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.ATTRIBUTES.name;\n  } else {\n    relationship.relationType = RelationType.ATTRIBUTES;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Adds a simple attributes relationship between the base table and user\n * simple attributes related table. Creates a default user mapping table and\n * the simple attributes table if needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addSimpleAttributesRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.SIMPLE_ATTRIBUTES.name;\n  } else {\n    relationship.relationType = RelationType.SIMPLE_ATTRIBUTES;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Adds a media relationship between the base table and user media related\n * table. Creates a default user mapping table and the media table if\n * needed.\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add\n * @return {Promise<module:extension/relatedTables~ExtendedRelation>}\n */\nRelatedTablesExtension.prototype.addMediaRelationship = function(relationship) {\n  if (relationship.hasOwnProperty('relation_name')) {\n    relationship.relation_name = relationship.relation_name || RelationType.MEDIA.name;\n  } else {\n    relationship.relationType = RelationType.MEDIA;\n  }\n  return this.addRelationship(relationship);\n}\n\n/**\n * Remove a specific relationship from the GeoPackage\n * @param  {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to remove\n * @return {Number} number of relationships removed\n */\nRelatedTablesExtension.prototype.removeRelationship = function(relationship) {\n  // this is an ExtendedRelation\n  if (relationship.hasOwnProperty('base_table_name')) {\n    relationship.baseTableName = relationship.base_table_name;\n    relationship.relatedTableName = relationship.related_table_name;\n    relationship.relationName = relationship.relation_name;\n    relationship.userMappingTable = relationship.mapping_table_name;\n  }\n\n  if (relationship.relationType) {\n    relationship.relationName = relationship.relationType.name;\n  }\n  if (relationship.relationAuthor) {\n    relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName);\n  }\n\n  if (this.extendedRelationDao.isTableExists()) {\n\n    var values = new ColumnValues();\n    values.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, relationship.baseTableName);\n    values.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relationship.relatedTableName);\n    values.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, relationship.relationName);\n\n    var iterator = this.extendedRelationDao.queryForFieldValues(values);\n\n    var tablesToDelete = [];\n    for (var extendedRelation of iterator) {\n      tablesToDelete.push(extendedRelation.mapping_table_name);\n    }\n    tablesToDelete.forEach(function(table) {\n      this.geoPackage.deleteTable(table);\n    }.bind(this));\n    this.extensionsDao.deleteByExtensionAndTableName(RelatedTablesExtension.EXTENSION_NAME, relationship.userMappingTable);\n    return this.extendedRelationDao.delete(extendedRelation);\n  }\n\n  return 0;\n}\n\n/**\n * Create a default user mapping table and extension row if either does not\n * exist. When not created, there is no guarantee that an existing table has\n * the same schema as the provided tabled.\n * @param  {string|module:extension/relatedTables~UserMappingTable} userMappingTableOrName user mapping table or name\n * @return {Promise<Boolean>}\n */\nRelatedTablesExtension.prototype.createUserMappingTable = function(userMappingTableOrName) {\n  var userMappingTable = userMappingTableOrName;\n  if (typeof userMappingTableOrName === 'string') {\n    userMappingTable = UserMappingTable.create(userMappingTableOrName);\n  }\n  return this.getOrCreateMappingTable(userMappingTable.table_name)\n  .then(function(){\n    if (!this.geoPackage.isTable(userMappingTable.table_name)) {\n      return this.geoPackage.tableCreator.createUserTable(userMappingTable);\n    }\n    return true;\n  }.bind(this));\n}\n\n/**\n * Create a user related table if it does not exist. When not created, there\n * is no guarantee that an existing table has the same schema as the\n * provided tabled.\n * @param  {module:extension/relatedTables~UserRelatedTable} relatedTable user related table\n * @return {Boolean} true if the table now exists\n */\nRelatedTablesExtension.prototype.createRelatedTable = function(relatedTable) {\n  if (!this.geoPackage.isTable(relatedTable.table_name)) {\n    this.geoPackage.tableCreator.createUserTable(relatedTable);\n\n    var contents = new Contents();\n    contents.table_name = relatedTable.table_name;\n    contents.data_type = relatedTable.data_type;\n    contents.identifier = relatedTable.table_name;\n    this.geoPackage.getContentsDao().create(contents);\n    var refreshed = this.geoPackage.getContentsDao().refresh(contents);\n    relatedTable.setContents(refreshed);\n  }\n  return true;\n}\n\n/**\n * Validate that the relation name is valid between the base and related tables\n * @param  {string} baseTableName    base table name\n * @param  {string} relatedTableName related table name\n * @param  {string} relationName     relation name\n * @return {Boolean}\n */\nRelatedTablesExtension.prototype.validateRelationship = function(baseTableName, relatedTableName, relationName) {\n  // Verify the base and related tables exist\n  if (!this.geoPackage.isTable(baseTableName)) {\n    console.log('Base relationship table does not exist: ' + baseTableName + ', Relation: ' + relationName);\n    return false;\n  }\n  if (!this.geoPackage.isTable(relatedTableName)) {\n    console.log('Related relationship table does not exist: ' + relatedTableName + ', Relation: ' + relationName);\n    return false;\n  }\n  // Verify spec defined relation types\n  var relationType = RelationType.fromName(relationName);\n  if (relationType) {\n    if (!this.geoPackage.isTableType(relationType.dataType, relatedTableName)) {\n      console.log('The related table must be a ' + relationType.dataType + ' table.  Related Table: ' + relatedTableName + ', Type: ' + this.geoPackage.getTableType(relatedTableName));\n      return false;\n    }\n    return true;\n  }\n  return true;\n}\n\n/**\n * Link related Ids\n * @param  {string} baseTableName    base table name\n * @param  {Number} baseId           base row id\n * @param  {string} relatedTableName related table name\n * @param  {Number} relatedId        related row id\n * @param  {module:extension/relatedTables~RelationType} relationType     relation type\n * @return {Promise}\n */\nRelatedTablesExtension.prototype.linkRelatedIds = function(baseTableName, baseId, relatedTableName, relatedId, relationType) {\n  var baseDao = UserDao.readTable(this.geoPackage, baseTableName);\n  var relatedDao = UserDao.readTable(this.geoPackage, relatedTableName);\n\n  var baseRow = baseDao.queryForId(baseId);\n  var relatedRow = relatedDao.queryForId(relatedId);\n\n  return baseDao.linkRelatedRow(baseRow, relatedRow, relationType);\n}\n\n/**\n * Get the related id mappings for the base id\n * @param  {string} mappingTableName mapping table name\n * @param  {Number} baseId           base id\n * @return {Number[]} ids of related items\n */\nRelatedTablesExtension.prototype.getMappingsForBase = function(mappingTableName, baseId) {\n  var mappingDao = this.getMappingDao(mappingTableName);\n  var results = mappingDao.queryByBaseId(baseId);\n  var relatedIds = [];\n  for (var i = 0; i < results.length; i++) {\n    var row = mappingDao.getUserMappingRow(results[i]);\n    relatedIds.push(row.getRelatedId());\n  }\n  return relatedIds;\n}\n\n/**\n * Get the related id mapping rows for the base id\n * @param  {string} mappingTableName mapping table name\n * @param  {Number} baseId           base id\n * @return {module:extension/relatedTables~UserMappingRow[]} user mapping rows\n */\nRelatedTablesExtension.prototype.getMappingRowsForBase = function(mappingTableName, baseId) {\n  var mappingDao = this.getMappingDao(mappingTableName);\n  return mappingDao.queryByBaseId(baseId);\n}\n\n/**\n * Get the base id mappings for the base id\n * @param  {string} mappingTableName mapping table name\n * @param  {Number} relatedId           related id\n * @return {Number[]} ids of base items\n */\nRelatedTablesExtension.prototype.getMappingsForRelated = function(mappingTableName, relatedId) {\n  var mappingDao = this.getMappingDao(mappingTableName);\n  var results = mappingDao.queryByRelatedId(relatedId);\n  var baseIds = [];\n  for (var i = 0; i < results.length; i++) {\n    var row = mappingDao.getUserMappingRow(results[i]);\n    baseIds.push(row.getBaseId());\n  }\n  return baseIds;\n}\n\n/**\n * Returns a {module:extension/relatedTables~MediaDao} from the table specified\n * @param  {string|module:extension/relatedTables~MediaTable} tableName either a table name or a MediaTable\n * @return {module:extension/relatedTables~MediaDao}\n */\nRelatedTablesExtension.prototype.getMediaDao = function(tableName) {\n  var table;\n  if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'media') {\n    table = tableName;\n  } else {\n    if (tableName.related_table_name) {\n      tableName = tableName.related_table_name;\n    }\n    var reader = new UserTableReader(tableName, MediaTable.requiredColumns());\n    var userTable = reader.readTable(this.geoPackage.getDatabase());\n    table = new MediaTable(userTable.table_name, userTable.columns, MediaTable.requiredColumns());\n    table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name));\n  }\n\n  return new MediaDao(this.geoPackage, table);\n}\n\n/**\n * Returns a {module:extension/relatedTables~SimpleAttributesDao} from the table specified\n * @param  {string|module:extension/relatedTables~SimpleAttributesDao} tableName either a table name or a SimpleAttributesDao\n * @return {module:extension/relatedTables~SimpleAttributesDao}\n */\nRelatedTablesExtension.prototype.getSimpleAttributesDao = function(tableName) {\n  var table;\n  if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'simple_attributes') {\n    table = tableName;\n  } else {\n    if (tableName.related_table_name) {\n      tableName = tableName.related_table_name;\n    }\n    var reader = new UserTableReader(tableName, SimpleAttributesTable.requiredColumns());\n    var userTable = reader.readTable(this.geoPackage.getDatabase());\n    table = new SimpleAttributesTable(userTable.table_name, userTable.columns, SimpleAttributesTable.requiredColumns());\n    table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name));\n  }\n\n  return new SimpleAttributesDao(this.geoPackage, table);\n}\n\n/**\n * Builds the custom relation name with the author\n * @param  {string} author author\n * @param  {string} name   name\n * @return {string}\n */\nRelatedTablesExtension.prototype.buildRelationName = function(author, name) {\n  return 'x-' + author + '_' + name;\n}\n\n/**\n * Remove all traces of the extension\n */\nRelatedTablesExtension.prototype.removeExtension = function() {\n  if (this.extendedRelationDao.isTableExists()) {\n    var extendedRelations = this.extendedRelationDao.queryForAll();\n    extendedRelations.forEach(function(relation) {\n      this.geoPackage.deleteTable(relation.mapping_table_name);\n    }.bind(this));\n    this.geoPackage.deleteTable(ExtendedRelationDao.TABLE_NAME);\n  }\n  if (this.extensionsDao.isTableExists()) {\n    this.extensionsDao.deleteByExtension(RelatedTablesExtension.EXTENSION_NAME);\n  }\n}\n\n/**\n * Determine if the GeoPackage has the extension\n * @param  {string} [mappingTableName] mapping table name to check, if not specified, this checks for any mapping table name\n * @return {Boolean}\n */\nRelatedTablesExtension.prototype.has = function(mappingTableName) {\n  if (mappingTableName) {\n    return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME)\n      && this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, mappingTableName);\n  }\n  return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME);\n}\n\nRelatedTablesExtension.EXTENSION_NAME = 'related_tables';\nRelatedTablesExtension.EXTENSION_RELATED_TABLES_AUTHOR = 'gpkg';\nRelatedTablesExtension.EXTENSION_RELATED_TABLES_NAME_NO_AUTHOR = 'related_tables';\nRelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION = 'TBD';\n\nmodule.exports = RelatedTablesExtension;\n\n},{\"../.\":25,\"../../core/contents\":8,\"../../dao/columnValues\":10,\"../../features/columns\":64,\"../../optionBuilder\":76,\"../../user/custom/userCustomDao\":102,\"../../user/userDao\":106,\"../../user/userTableReader\":109,\"../baseExtension\":20,\"./extendedRelation\":31,\"./mediaDao\":33,\"./mediaTable\":35,\"./relationType\":36,\"./simpleAttributesDao\":37,\"./simpleAttributesTable\":39,\"./userMappingDao\":40,\"./userMappingTable\":42,\"util\":343}],33:[function(require,module,exports){\n/**\n * MediaDao module.\n * @module extension/relatedTables\n */\n\nvar MediaRow = require('./mediaRow')\n  , MediaTable = require('./mediaTable')\n  , Dao = require('../../dao/dao')\n  , UserDao = require('../../user/userDao')\n  , UserTableReader = require('../../user/userTableReader');\n\nvar util = require('util');\n\n/**\n * User Media DAO for reading user media data tables\n * @class\n * @extends {module:user/userDao~UserDao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} connection        connection\n * @param  {string} table table name\n */\nvar MediaDao = function(geoPackage, table) {\n  UserDao.call(this, geoPackage, table);\n  this.mediaTable = table;\n}\n\nutil.inherits(MediaDao, UserDao);\n\n/**\n * Reads the table specified from the geopackage\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @param  {string} tableName       table name\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/userDao~UserDao}\n */\nMediaDao.readTable = function(geoPackage, tableName) {\n  var reader = new UserTableReader(tableName);\n  var userTable = reader.readTable(geoPackage.getDatabase());\n  return new MediaDao(geoPackage, userTable);\n}\n\n/**\n * Create a new media row\n * @return {module:extension/relatedTables~MediaRow}\n */\nMediaDao.prototype.newRow = function() {\n  return new MediaRow(this.mediaTable);\n}\n\n/**\n * Create a media row with the column types and values\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/relatedTables~MediaRow}             media row\n */\nMediaDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new MediaRow(this.mediaTable, columnTypes, values);\n};\n\n/**\n * Gets the media table\n * @return {module:extension/relatedTables~MediaTable}\n */\nMediaDao.prototype.getTable = function() {\n  return this.mediaTable;\n}\n\nmodule.exports = MediaDao;\n\n},{\"../../dao/dao\":11,\"../../user/userDao\":106,\"../../user/userTableReader\":109,\"./mediaRow\":34,\"./mediaTable\":35,\"util\":343}],34:[function(require,module,exports){\n/**\n * MediaRow module.\n * @module extension/relatedTables\n */\nvar UserRow = require('../../user/userRow');\n\nvar util = require('util');\n\nvar ImageUtils = require('../../tiles/imageUtils');\n\n/**\n * User Media Row containing the values from a single result set row\n * @class\n * @extends {module:user/userRow~UserRow}\n * @param  {module:extension/relatedTables~MediaTable} mediaTable  media table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n */\nvar MediaRow = function(mediaTable, columnTypes, values) {\n  UserRow.call(this, mediaTable, columnTypes, values);\n  this.mediaTable = mediaTable;\n}\n\nutil.inherits(MediaRow, UserRow);\n\n/**\n * Gets the id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaRow.prototype.getIdColumn = function() {\n  return this.mediaTable.getIdColumn();\n}\n\n/**\n * Gets the id\n * @return {Number}\n */\nMediaRow.prototype.getId = function() {\n  return this.getValueWithColumnName(this.getIdColumn().name);\n}\n\n/**\n * Get the data column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaRow.prototype.getDataColumn = function() {\n  return this.mediaTable.getDataColumn();\n}\n\n/**\n * Gets the data\n * @return {Buffer}\n */\nMediaRow.prototype.getData = function() {\n  return this.getValueWithColumnName(this.getDataColumn().name);\n}\n\n/**\n * Get the data image\n *\n * @return {Promise<Image>}\n */\nMediaRow.prototype.getDataImage = function() {\n  return ImageUtils.getImage(this.getData(), this.getContentType());\n}\n/**\n * Get the scaled data image\n * @param {Number} scale\n * @return {Promise<Image>}\n */\nMediaRow.prototype.getScaledDataImage = function(scale) {\n  return ImageUtils.getScaledImage(this.getData(), scale);\n}\n\n/**\n * Sets the data for the row\n * @param  {Buffer} data data\n */\nMediaRow.prototype.setData = function(data) {\n  this.setValueWithColumnName(this.getDataColumn().name, data);\n}\n\n/**\n * Get the content type column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaRow.prototype.getContentTypeColumn = function() {\n  return this.mediaTable.getContentTypeColumn();\n}\n\n/**\n * Gets the content type\n * @return {string}\n */\nMediaRow.prototype.getContentType = function() {\n  return this.getValueWithColumnName(this.getContentTypeColumn().name);\n}\n\n/**\n * Sets the content type for the row\n * @param  {string} contentType contentType\n */\nMediaRow.prototype.setContentType = function(contentType) {\n  this.setValueWithColumnName(this.getContentTypeColumn().name, contentType);\n}\n\nmodule.exports = MediaRow;\n\n},{\"../../tiles/imageUtils\":89,\"../../user/userRow\":107,\"util\":343}],35:[function(require,module,exports){\n/**\n * mediaTable module.\n * @module extension/relatedTables\n */\n\nvar UserTable = require('../../user/userTable')\n  , UserRelatedTable = require('./userRelatedTable')\n  , UserColumn = require('../../user/userColumn')\n  , DataType = require('../../db/dataTypes')\n  , RelationType = require('./relationType');\n\nvar util = require('util');\n\n/**\n * Media Requirements Class User-Defined Related Data Table\n * @class\n * @extends {module:extension/relatedTables~UserRelatedTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   media columns\n * @param {string[]} requiredColumns required column names\n */\nvar MediaTable = function(tableName, columns, requiredColumns) {\n  UserRelatedTable.call(this, tableName, MediaTable.RELATION_TYPE.name, MediaTable.RELATION_TYPE.dataType, columns, requiredColumns);\n}\n\nutil.inherits(MediaTable, UserRelatedTable);\n\n/**\n * Create a media table with a minimum required columns followed by the additional columns\n * @param  {string} tableName         name of the table\n * @param  {module:user/userColumn~UserColumn[]} additionalColumns additional columns\n * @return {module:extension/relatedTables~MediaTable}\n */\nMediaTable.create = function(tableName, additionalColumns) {\n  var columns = MediaTable.createRequiredColumns();\n  if (additionalColumns) {\n    columns = columns.concat(additionalColumns);\n  }\n  return new MediaTable(tableName, columns, MediaTable.requiredColumns());\n}\n\n/**\n * Get the required columns\n * @param  {string} [idColumnName=id] id column name\n * @return {string[]}\n */\nMediaTable.requiredColumns = function(idColumnName) {\n  var requiredColumns = [];\n  requiredColumns.push(idColumnName || MediaTable.COLUMN_ID);\n  requiredColumns.push(MediaTable.COLUMN_DATA);\n  requiredColumns.push(MediaTable.COLUMN_CONTENT_TYPE);\n  return requiredColumns;\n}\n\n/**\n * Get the number of required columns\n * @return {Number}\n */\nMediaTable.numRequiredColumns = function(){\n  return MediaTable.requiredColumns().length;\n}\n\n/**\n * Create the required columns\n * @param  {Number} [startingIndex=0] starting index of the required columns\n * @param  {string} [idColumnName=id]  id column name\n * @return {module:user/userColumn~UserColumn[]}\n */\nMediaTable.createRequiredColumns = function(startingIndex, idColumnName) {\n  startingIndex = startingIndex || 0;\n  return [\n    MediaTable.createIdColumn(startingIndex++, idColumnName || MediaTable.COLUMN_ID),\n    MediaTable.createDataColumn(startingIndex++),\n    MediaTable.createContentTypeColumn(startingIndex++)\n  ];\n}\n\n/**\n * Create the primary key id column\n * @param  {Number} index        index of the column\n * @param  {string} idColumnName name of the id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.createIdColumn = function(index, idColumnName) {\n  return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName);\n}\n\n/**\n * Create the data column\n * @param  {Number} index        index of the column\n * @param  {string} idColumnName name of the id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.createDataColumn = function(index) {\n  return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_DATA, DataType.GPKGDataType.GPKG_DT_BLOB, true);\n}\n\n/**\n * Create the content type column\n * @param  {Number} index        index of the column\n * @param  {string} idColumnName name of the id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.createContentTypeColumn = function(index) {\n  return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_CONTENT_TYPE, DataType.GPKGDataType.GPKG_DT_TEXT, true);\n}\n\n/**\n * Get the primary key id column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.prototype.getIdColumn = function() {\n  return this.getPkColumn();\n}\n\n/**\n * Get the data column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.prototype.getDataColumn = function() {\n  return this.getColumnWithColumnName(MediaTable.COLUMN_DATA);\n}\n\n/**\n * Get the content type column\n * @return {module:user/userColumn~UserColumn}\n */\nMediaTable.prototype.getContentTypeColumn = function() {\n  return this.getColumnWithColumnName(MediaTable.COLUMN_CONTENT_TYPE);\n}\n\nMediaTable.RELATION_TYPE = RelationType.MEDIA;\nMediaTable.COLUMN_ID = 'id';\nMediaTable.COLUMN_DATA = 'data';\nMediaTable.COLUMN_CONTENT_TYPE = 'content_type';\n\nMediaTable.prototype.TABLE_TYPE = 'media';\n\nmodule.exports = MediaTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"../../user/userTable\":108,\"./relationType\":36,\"./userRelatedTable\":43,\"util\":343}],36:[function(require,module,exports){\n/**\n * @module extension/relatedTables\n */\n\nvar ContentsDao = require('../../core/contents').ContentsDao;\n\n/**\n * Spec supported User-Defined Related Data Tables\n * @class\n */\nvar RelationType = function() {}\n\nmodule.exports = RelationType;\n\n/**\n * Link features with other features\n * @type {Object}\n */\nRelationType.FEATURES = {\n  name: 'features',\n  dataType: ContentsDao.GPKG_CDT_FEATURES_NAME\n};\n\n/**\n * Relate sets of tabular text or numeric data\n * @type {Object}\n */\nRelationType.SIMPLE_ATTRIBUTES = {\n  name: 'simple_attributes',\n  dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME\n};\n\n/**\n * Relate features or attributes to multimedia files such as pictures and videos\n * @type {Object}\n */\nRelationType.MEDIA = {\n  name: 'media',\n  dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME\n};\n\n/**\n * Attribute type relation\n * @type {Object}\n */\nRelationType.ATTRIBUTES = {\n  name: 'attributes',\n  dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME\n};\n\n/**\n * Tile type relation\n * @type {Object}\n */\nRelationType.TILES = {\n  name: 'tiles',\n  dataType: ContentsDao.GPKG_CDT_TILES_NAME\n};\n\n/**\n * Get the relation type from the name\n * @param  {string} name name\n * @return {module:extension/relatedTables~RelationType}\n */\nRelationType.fromName = function(name) {\n  return RelationType[name.toUpperCase()];\n}\n\n},{\"../../core/contents\":8}],37:[function(require,module,exports){\n/**\n * SimpleAttributesDao module.\n * @module extension/relatedTables\n */\n\nvar SimpleAttributesRow = require('./simpleAttributesRow')\n  , SimpleAttributesTable = require('./simpleAttributesTable')\n  , Dao = require('../../dao/dao')\n  , UserDao = require('../../user/userDao');\n\nvar util = require('util');\n\n/**\n * User Simple Attributes DAO for reading user simple attributes data tables\n * @class\n * @extends {module:user/userDao~UserDao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} connection        connection\n * @param  {string} table table name\n */\nvar SimpleAttributesDao = function(geoPackage, table) {\n  UserDao.call(this, geoPackage, table);\n  this.simpleAttributesTable = table;\n}\n\nutil.inherits(SimpleAttributesDao, UserDao);\n\n/**\n * Create a new {module:extension/relatedTables~SimpleAttributesRow}\n * @return {module:extension/relatedTables~SimpleAttributesRow}\n */\nSimpleAttributesDao.prototype.newRow = function() {\n  return new SimpleAttributesRow(this.simpleAttributesTable);\n}\n\n/**\n * Create a new {module:extension/relatedTables~SimpleAttributesRow} with the column types and values\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/relatedTables~SimpleAttributesRow}             simple attributes row\n */\nSimpleAttributesDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new SimpleAttributesRow(this.simpleAttributesTable, columnTypes, values);\n};\n\n/**\n * Gets the {module:extension/relatedTables~SimpleAttributesTable}\n * @return {module:extension/relatedTables~SimpleAttributesTable}\n */\nSimpleAttributesDao.prototype.getTable = function() {\n  return this.simpleAttributesTable;\n}\n\n/**\n * Get the simple attributes rows from this table by ids\n * @param  {Number[]} ids array of ids\n * @return {module:extension/relatedTables~SimpleAttributesRow[]}\n */\nSimpleAttributesDao.prototype.getRows = function(ids) {\n  var simpleAttributesRows = [];\n  for (var i = 0; i < ids.length; i++) {\n    var row = this.queryForId(ids[i]);\n    if (row) {\n      simpleAttributesRows.push(row);\n    }\n  }\n  return simpleAttributesRows;\n}\n\nmodule.exports = SimpleAttributesDao;\n\n},{\"../../dao/dao\":11,\"../../user/userDao\":106,\"./simpleAttributesRow\":38,\"./simpleAttributesTable\":39,\"util\":343}],38:[function(require,module,exports){\n/**\n * SimpleAttributesRow module.\n * @module extension/relatedTables\n */\n\nvar UserRow = require('../../user/userRow');\n\nvar util = require('util');\n\n/**\n * User Simple Attributes Row containing the values from a single result set row\n * @class\n * @extends {module:user/userRow~UserRow}\n * @param  {module:extension/relatedTables~SimpleAttributesTable} simpleAttributesTable simple attributes table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n */\nvar SimpleAttributesRow = function(simpleAttributesTable, columnTypes, values) {\n  UserRow.call(this, simpleAttributesTable, columnTypes, values);\n  this.simpleAttributesTable = simpleAttributesTable;\n}\n\nutil.inherits(SimpleAttributesRow, UserRow);\n\n/**\n * Gets the primary key id column\n * @return {module:user/userColumn~UserColumn}\n */\nSimpleAttributesRow.prototype.getIdColumn = function() {\n  return this.simpleAttributesTable.getIdColumn();\n}\n\n/**\n * Gets the id\n * @return {Number}\n */\nSimpleAttributesRow.prototype.getId = function() {\n  return this.getValueWithColumnName(this.getIdColumn().name);\n}\n\nmodule.exports = SimpleAttributesRow;\n\n},{\"../../user/userRow\":107,\"util\":343}],39:[function(require,module,exports){\n/**\n * simpleAttributesTable module.\n * @module extension/relatedTables\n */\n\nvar UserTable = require('../../user/userTable')\n  , UserRelatedTable = require('./userRelatedTable')\n  , UserColumn = require('../../user/userColumn')\n  , DataTypes = require('../../db/dataTypes')\n  , RelationType = require('./relationType');\n\nvar util = require('util');\n\n/**\n * Simple Attributes Requirements Class User-Defined Related Data Table\n * @class\n * @extends {module:extension/relatedTables~UserRelatedTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   attribute columns\n * @param {string[]} requiredColumns required column names\n */\nvar SimpleAttributesTable = function(tableName, columns, requiredColumns) {\n  UserRelatedTable.call(this, tableName, SimpleAttributesTable.RELATION_TYPE.name, SimpleAttributesTable.RELATION_TYPE.dataType, columns, requiredColumns);\n  this.validateColumns();\n}\n\nutil.inherits(SimpleAttributesTable, UserRelatedTable);\n\n/**\n * Create a simple attributes table with the columns\n * @param  {string} tableName name of the table\n * @param  {module:user/userColumn~UserColumn[]} additionalColumns additional columns\n * @return {module:extension/relatedTables~SimpleAttributesTable}\n */\nSimpleAttributesTable.create = function(tableName, additionalColumns) {\n  var tableColumns = SimpleAttributesTable.createRequiredColumns(0);\n\n  if (additionalColumns) {\n    tableColumns = tableColumns.concat(additionalColumns);\n  }\n\n  return new SimpleAttributesTable(tableName, tableColumns, SimpleAttributesTable.requiredColumns());\n}\n\n/**\n * Get the required columns\n * @param  {string} [idColumnName=id] id column name\n * @return {string[]}\n */\nSimpleAttributesTable.requiredColumns = function(idColumnName) {\n  var requiredColumns = [];\n  requiredColumns.push(idColumnName || SimpleAttributesTable.COLUMN_ID);\n  return requiredColumns;\n}\n\n/**\n * Get the number of required columns\n * @return {Number}\n */\nSimpleAttributesTable.numRequiredColumns = function(){\n  return SimpleAttributesTable.requiredColumns().length;\n}\n\n/**\n * Create the required columns\n * @param  {Number} [startingIndex=0] starting index of the required columns\n * @param  {string} [idColumnName=id]  id column name\n * @return {module:user/userColumn~UserColumn[]}\n */\nSimpleAttributesTable.createRequiredColumns = function(startingIndex, idColumnName) {\n  startingIndex = startingIndex || 0;\n  return [SimpleAttributesTable.createIdColumn(startingIndex++, idColumnName || SimpleAttributesTable.COLUMN_ID)];\n}\n\n/**\n * Create the primary key id column\n * @param  {Number} index        index of the column\n * @param  {string} idColumnName name of the id column\n * @return {module:user/userColumn~UserColumn}\n */\nSimpleAttributesTable.createIdColumn = function(index, idColumnName) {\n  return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName);\n}\n\n/**\n * Validate that Simple Attributes columns to verify at least one non id\n * column exists and that all columns are simple data types\n */\nSimpleAttributesTable.prototype.validateColumns = function() {\n  var columns = this.columns;\n  if (columns.length < 2) {\n    throw new Error('Simple Attributes Tables require at least one non id column');\n  }\n\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    if (!SimpleAttributesTable.isSimple(column)) {\n      throw new Error('Simple Attributes Tables only support simple data types. Column: ' + column.name + ', Non Simple Data Type: ' + column.dataType);\n    }\n  }\n}\n\n/**\n * Get the column index of the id column\n * @return {Number}\n */\nSimpleAttributesTable.prototype.getIdColumnIndex = function() {\n  return this.pkIndex;\n}\n\n/**\n * Get the primary key id column\n * @return {module:user/userColumn~UserColumn}\n */\nSimpleAttributesTable.prototype.getIdColumn = function() {\n  return this.getPkColumn();\n}\n\n/**\n * Determine if the column is a simple column\n * @param  {module:user/userColumn~UserColumn} column column to check\n * @return {Boolean}\n */\nSimpleAttributesTable.isSimple = function(column) {\n  return column.notNull && SimpleAttributesTable.isSimpleDataType(column.dataType);\n}\n\n/**\n * Determine if the data type is a simple type: TEXT, INTEGER, or REAL\n * @param {module:db/dataTypes~GPKGDataType}\n * @return {Boolean}\n */\nSimpleAttributesTable.isSimpleDataType = function(dataType) {\n  return dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB && dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY;\n}\n\nSimpleAttributesTable.RELATION_TYPE = RelationType.SIMPLE_ATTRIBUTES;\nSimpleAttributesTable.COLUMN_ID = 'id';\n\nSimpleAttributesTable.prototype.TABLE_TYPE = 'simple_attributes';\n\nmodule.exports = SimpleAttributesTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"../../user/userTable\":108,\"./relationType\":36,\"./userRelatedTable\":43,\"util\":343}],40:[function(require,module,exports){\n/**\n * @module extension/relatedTables\n */\n\nvar UserMappingRow = require('./userMappingRow')\n  , UserMappingTable = require('./userMappingTable')\n  , UserCustomDao = require('../../user/custom/userCustomDao')\n  , ColumnValues = require('../../dao/columnValues');\n\nvar util = require('util');\n\n/**\n * User Mapping DAO for reading user mapping data tables\n * @class\n * @extends {module:user/custom/userCustomDao~UserCustomDao}\n * @param  {string} table table name\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n */\nvar UserMappingDao = function(userCustomDao, geoPackage) {\n  UserCustomDao.call(this, geoPackage, this.createMappingTable(userCustomDao));\n}\n\nutil.inherits(UserMappingDao, UserCustomDao);\n\n/**\n * Create a new {module:user/custom~UserCustomTable}\n * @param  {module:user/custom~UserCustomDao} userCustomDao\n * @return {module:user/custom~UserCustomTable} userCustomTable user custom table\n */\nUserMappingDao.prototype.createMappingTable = function(userCustomDao) {\n  return new UserMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns);\n}\n\n/**\n * Create a new {module:extension/relatedTables~UserMappingRow}\n * @return {module:extension/relatedTables~UserMappingRow}\n */\nUserMappingDao.prototype.newRow = function() {\n  return new UserMappingRow(this.table);\n}\n\n/**\n * Gets the {module:extension/relatedTables~UserMappingTable}\n * @return {module:extension/relatedTables~UserMappingTable}\n */\nUserMappingDao.prototype.getTable = function() {\n  return this.table;\n}\n\n/**\n * Create a user mapping row\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/relatedTables~UserMappingRow}             user mapping row\n */\nUserMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new UserMappingRow(this.table, columnTypes, values);\n};\n\n/**\n * Gets the user mapping row from the result\n * @param  {Object} result db result\n * @return {module:extension/relatedTables~UserMappingRow}             user mapping row\n */\nUserMappingDao.prototype.getUserMappingRow = function(result) {\n  return this.getRow(result);\n}\n\n/**\n * Query by base id\n * @param  {Number} baseId base id\n * @return {Object[]}\n */\nUserMappingDao.prototype.queryByBaseId = function(baseId) {\n  if (baseId.getBaseId) {\n    baseId = baseId.getBaseId();\n  }\n  return this.queryForAllEq(UserMappingTable.COLUMN_BASE_ID, baseId);\n}\n\n/**\n * Query by related id\n * @param  {Number} relatedId related id\n * @return {Object[]}\n */\nUserMappingDao.prototype.queryByRelatedId = function(relatedId) {\n  if (relatedId.getRelatedId) {\n    relatedId = relatedId.getRelatedId();\n  }\n  return this.queryForAllEq(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n}\n\n/**\n * Query by base id and related id\n * @param  {Number} baseId base id\n * @param  {Number} relatedId related id\n * @return {Object[]}\n */\nUserMappingDao.prototype.queryByIds = function(baseId, relatedId) {\n  if (baseId.getBaseId) {\n    relatedId = baseId.getRelatedId();\n    baseId = baseId.getBaseId();\n  }\n\n  var values = new ColumnValues();\n  values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId);\n  values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n\n  return this.queryForFieldValues(values);\n}\n\n/**\n * The unique related ids\n * @return {Number[]}\n */\nUserMappingDao.prototype.uniqueRelatedIds = function() {\n  var query = 'SELECT DISTINCT ';\n  query += UserMappingTable.COLUMN_RELATED_ID;\n  query += ' FROM ';\n  query += \"'\"+this.gpkgTableName+\"'\";\n  return this.connection.all(query);\n}\n\n/**\n * Count user mapping rows by base id and related id\n * @param  {Number} baseId    base id\n * @param  {Number} relatedId related id\n * @return {Number}\n */\nUserMappingDao.prototype.countByIds = function(baseId, relatedId) {\n  if (baseId.getBaseId) {\n    relatedId = baseId.getRelatedId();\n    baseId = baseId.getBaseId();\n  }\n\n  var values = new ColumnValues();\n  values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId);\n  values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n\n  return this.count(values);\n}\n\n/**\n * Delete by base id\n * @param  {Number} baseId base id\n * @return {Number} number of deleted rows\n */\nUserMappingDao.prototype.deleteByBaseId = function(baseId) {\n  if (baseId.getBaseId) {\n    baseId = baseId.getBaseId();\n  }\n\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);\n  var whereArgs = this.buildWhereArgs([baseId]);\n\n  return this.deleteWhere(where, whereArgs);\n};\n\n/**\n * Delete by related id\n * @param  {Number} relatedId related id\n * @return {Number} number of deleted rows\n */\nUserMappingDao.prototype.deleteByRelatedId = function(relatedId) {\n  if (relatedId.getRelatedId) {\n    relatedId = relatedId.getRelatedId();\n  }\n\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n  var whereArgs = this.buildWhereArgs([relatedId]);\n\n  return this.deleteWhere(where, whereArgs);\n};\n\n/**\n * Delete by base id and related id\n * @param  {Number} baseId    base id\n * @param  {Number} relatedId related id\n * @return {Number} number of deleted rows\n */\nUserMappingDao.prototype.deleteByIds = function(baseId, relatedId) {\n  if (baseId.getBaseId) {\n    relatedId = baseId.getRelatedId();\n    baseId = baseId.getBaseId();\n  }\n\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId);\n  var whereArgs = this.buildWhereArgs([baseId, relatedId]);\n\n  return this.deleteWhere(where, whereArgs);\n}\n\nmodule.exports = UserMappingDao;\n\n},{\"../../dao/columnValues\":10,\"../../user/custom/userCustomDao\":102,\"./userMappingRow\":41,\"./userMappingTable\":42,\"util\":343}],41:[function(require,module,exports){\n/**\n * UserMappingRow module.\n * @module extension/relatedTables\n */\n\nvar UserRow = require('../../user/userRow');\n\nvar util = require('util');\n\n/**\n * User Mapping Row containing the values from a single result set row\n * @class\n * @extends {module:user/userRow~UserRow}\n * @param  {module:extension/relatedTables~UserMappingTable} userMappingTable user mapping table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n */\nvar UserMappingRow = function(userMappingTable, columnTypes, values) {\n  UserRow.call(this, userMappingTable, columnTypes, values);\n}\n\nutil.inherits(UserMappingRow, UserRow);\n\n/**\n * Get the base id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingRow.prototype.getBaseIdColumn = function() {\n  return this.table.getBaseIdColumn();\n}\n\n/**\n * Gets the base id\n * @return {Number}\n */\nUserMappingRow.prototype.getBaseId = function() {\n  return this.getValueWithColumnName(this.getBaseIdColumn().name);\n}\n\n/**\n * Sets the base id\n * @param  {Number} baseId base id\n */\nUserMappingRow.prototype.setBaseId = function(baseId) {\n  this.setValueWithColumnName(this.getBaseIdColumn().name, baseId);\n}\n\n/**\n * Get the related id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingRow.prototype.getRelatedIdColumn = function() {\n  return this.table.getRelatedIdColumn();\n}\n\n/**\n * Gets the related id\n * @return {Number}\n */\nUserMappingRow.prototype.getRelatedId = function() {\n  return this.getValueWithColumnName(this.getRelatedIdColumn().name);\n}\n\n/**\n * Sets the related id\n * @param  {Number} relatedId related id\n */\nUserMappingRow.prototype.setRelatedId = function(relatedId) {\n  this.setValueWithColumnName(this.getRelatedIdColumn().name, relatedId);\n}\n\nmodule.exports = UserMappingRow;\n\n},{\"../../user/userRow\":107,\"util\":343}],42:[function(require,module,exports){\n/**\n * userMappingTable module.\n * @module extension/relatedTables\n */\n\nvar UserTable = require('../../user/userTable')\n  , UserCustomColumn = require('../../user/custom/userCustomColumn')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Contains user mapping table factory and utility methods\n * @class\n * @extends {module:user/userTable~UserTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   user mapping columns\n */\nvar UserMappingTable = function(tableName, columns) {\n  UserTable.call(this, tableName, columns);\n}\n\nutil.inherits(UserMappingTable, UserTable);\n\n/**\n * Creates a user mapping table with the minimum required columns followed by the additional columns\n * @param  {string} tableName name of the table\n * @param  {module:user/userColumn~UserColumn[]} additionalColumns additional columns\n * @return {module:extension/relatedTables~UserMappingTable}\n */\nUserMappingTable.create = function(tableName, columns) {\n  var allColumns = UserMappingTable.createRequiredColumns(0);\n  if (columns) {\n    allColumns = allColumns.concat(columns);\n  }\n  return new UserMappingTable(tableName, allColumns);\n}\n\n/**\n * Get the number of required columns\n * @return {Number}\n */\nUserMappingTable.numRequiredColumns = function() {\n  return UserMappingTable.createRequiredColumns(0).length;\n}\n\n/**\n * Create the required columns\n * @param  {Number} [startingIndex=0] starting index of the required columns\n * @return {module:user/userColumn~UserColumn[]}\n */\nUserMappingTable.createRequiredColumns = function(startingIndex) {\n  startingIndex = startingIndex || 0;\n  return [\n    UserMappingTable.createBaseIdColumn(startingIndex++),\n    UserMappingTable.createRelatedIdColumn(startingIndex)\n  ];\n}\n\n/**\n * Create the base id column\n * @param  {Number} index        index of the column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingTable.createBaseIdColumn = function(index) {\n  var baseIdColumn = UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_BASE_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true);\n  return baseIdColumn;\n}\n\n/**\n * Create the related id column\n * @param  {Number} index        index of the column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingTable.createRelatedIdColumn = function(index) {\n  return UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_RELATED_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true);\n}\n\n/**\n * Get the base id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingTable.prototype.getBaseIdColumn = function() {\n  return this.getColumnWithColumnName(UserMappingTable.COLUMN_BASE_ID);\n}\n\n/**\n * Get the related id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserMappingTable.prototype.getRelatedIdColumn = function() {\n  return this.getColumnWithColumnName(UserMappingTable.COLUMN_RELATED_ID);\n}\n\n/**\n * Get the required columns\n * @return {string[]}\n */\nUserMappingTable.requiredColumns = function() {\n  return [UserMappingTable.COLUMN_BASE_ID, UserMappingTable.COLUMN_RELATED_ID];\n}\n\nUserMappingTable.COLUMN_BASE_ID = 'base_id';\nUserMappingTable.COLUMN_RELATED_ID = 'related_id';\n\nmodule.exports = UserMappingTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/custom/userCustomColumn\":101,\"../../user/userTable\":108,\"util\":343}],43:[function(require,module,exports){\n/**\n * userRelatedTable module.\n * @module extension/relatedTables\n */\n\nvar UserTable = require('../../user/userTable')\n  , UserColumn = require('../../user/userColumn')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * User Defined Related Table\n * @param  {string} tableName table name\n * @param  {array} columns   attribute columns\n */\n/**\n * User Defined Related Table\n * @param  {string} tableName       table name\n * @param  {string} relationName    relation name\n * @param  {string} dataType        Contents data type\n * @param  {module:user/userColumn~UserColumn} columns         columns\n * @param  {string[]} requiredColumns required columns\n * @return {module:extension/relatedTables~UserRelatedTable}\n */\nvar UserRelatedTable = function(tableName, relationName, dataType, columns, requiredColumns) {\n  UserTable.call(this, tableName, columns, requiredColumns);\n  this.relation_name = relationName;\n  this.data_type = dataType;\n}\n\nutil.inherits(UserRelatedTable, UserTable);\n\n/**\n * Sets the contents\n * @param  {module:core/contents~Contents} contents contents\n * @throw Error if the contents data type does not match this data type\n */\nUserRelatedTable.prototype.setContents = function(contents) {\n  this.contents = contents;\n\n  // verify the contents have a relation name data type\n  if (!contents.data_type || contents.data_type !== this.data_type) {\n    throw new Error('The contents of this related table must have a data type of ' + this.data_type);\n  }\n}\n\nmodule.exports = UserRelatedTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"../../user/userTable\":108,\"util\":343}],44:[function(require,module,exports){\n/**\n * RTreeIndexDao module.\n * @module RTreeIndexDao\n * @see module:dao/dao\n */\n\nvar Dao = require('../../dao/dao')\n  , BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension\n  , EnvelopeBuilder = require('../../geom/envelopeBuilder')\n  , GeometryData = require('../../geom/geometryData');\n\nvar util = require('util');\n\nvar RTreeIndex = function(geoPackage, featureDao) {\n  BaseExtension.call(this, geoPackage);\n\n  this.extensionName = Extension.buildExtensionName(RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR, RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR);\n\n  this.extensionDefinition = RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION;\n\n  this.tableName = featureDao.table_name;\n  this.primaryKeyColumn = featureDao.idColumns[0];\n  this.columnName = featureDao.getGeometryColumnName();\n\n  this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao);\n  this.extensionExists = this.hasExtension(this.extensionName, this.tableName, this.columnName);\n}\n\nutil.inherits(RTreeIndex, BaseExtension);\n\nRTreeIndex.prototype.getRTreeIndexExtension = function () {\n  return this.getExtension(this.extensionName, this.tableName, this.columnName);\n};\n\nRTreeIndex.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.WRITE_ONLY);\n};\n\nRTreeIndex.prototype.create = function() {\n  if (this.extensionExists) {\n    return Promise.resolve(this.getRTreeIndexExtension());\n  }\n\n  return this.getOrCreate(this.extensionName, this.tableName, this.columnName, RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION, Extension.WRITE_ONLY)\n  .then(function() {\n    this.createAllFunctions();\n    this.createRTreeIndex();\n    this.loadRTreeIndex();\n    this.createAllTriggers();\n    return this.getRTreeIndexExtension();\n  }.bind(this));\n}\n\nRTreeIndex.prototype.createAllTriggers = function() {\n  var insertTrigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_insert AFTER INSERT ON '+this.tableName+\n  '  WHEN (new.'+this.columnName+' NOT NULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+\n  '    NEW.'+this.primaryKeyColumn+','+\n  '    ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+\n  '    ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+\n  '  ); '+\n  'END;';\n\n  var update1Trigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update1 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+\n  '  WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+\n  '     (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+\n  '    NEW.'+this.primaryKeyColumn+','+\n  '    ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+\n  '    ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+\n  '  ); '+\n  'END;';\n\n  var update2Trigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update2 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+\n  '  WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+\n  '       (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+\n  'END;';\n\n  var update3Trigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update3 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+\n  '  WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+\n  '       (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+\n  '  INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+\n  '    NEW.'+this.primaryKeyColumn+', '+\n  '    ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+\n  '    ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+')'+\n  '  ); '+\n  'END;';\n\n  var update4Trigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update4 AFTER UPDATE ON '+this.tableName+\n  '  WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+\n  '       (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+\n  'BEGIN '+\n  '  DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id IN (OLD.'+this.primaryKeyColumn+', NEW.'+this.primaryKeyColumn+'); '+\n  'END;';\n\n  var deleteTrigger =\n  'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_delete AFTER DELETE ON '+this.tableName+\n  '  WHEN old.'+this.columnName+' NOT NULL '+\n  'BEGIN'+\n  '  DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+\n  'END;';\n\n  this.connection.run(insertTrigger);\n  this.connection.run(update1Trigger);\n  this.connection.run(update2Trigger);\n  this.connection.run(update3Trigger);\n  this.connection.run(update4Trigger);\n  this.connection.run(deleteTrigger);\n}\n\nRTreeIndex.prototype.loadRTreeIndex = function() {\n  this.connection.run('INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' SELECT '+this.primaryKeyColumn+', st_minx('+this.columnName+'), st_maxx('+this.columnName+'), st_miny('+this.columnName+'), st_maxy('+this.columnName+') FROM '+this.tableName);\n}\n\nRTreeIndex.prototype.createRTreeIndex = function() {\n  this.connection.run('CREATE VIRTUAL TABLE rtree_'+this.tableName+'_'+this.columnName+' USING rtree(id, minx, maxx, miny, maxy)');\n}\n\nRTreeIndex.prototype.createAllFunctions = function() {\n  this.createMinXFunction();\n\tthis.createMaxXFunction();\n\tthis.createMinYFunction();\n\tthis.createMaxYFunction();\n\tthis.createIsEmptyFunction();\n}\n\nRTreeIndex.prototype.createMinXFunction = function() {\n  this.connection.registerFunction('ST_MinX', function(buffer) {\n    var geom = new GeometryData(buffer);\n    var envelope = geom.envelope;\n    if (!envelope) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);\n    }\n    return envelope.minX;\n  });\n}\n\nRTreeIndex.prototype.createMinYFunction = function() {\n  this.connection.registerFunction('ST_MinY', function(buffer) {\n    var geom = new GeometryData(buffer);\n    var envelope = geom.envelope;\n    if (!envelope) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);\n    }\n    return envelope.minY;\n  });\n}\n\nRTreeIndex.prototype.createMaxXFunction = function() {\n  this.connection.registerFunction('ST_MaxX', function(buffer) {\n    var geom = new GeometryData(buffer);\n    var envelope = geom.envelope;\n    if (!envelope) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);\n    }\n    return envelope.maxX;\n  });\n}\n\nRTreeIndex.prototype.createMaxYFunction = function() {\n  this.connection.registerFunction('ST_MaxY', function(buffer) {\n    var geom = new GeometryData(buffer);\n    var envelope = geom.envelope;\n    if (!envelope) {\n      envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry);\n    }\n    return envelope.maxY;\n  });\n}\n\nRTreeIndex.prototype.createIsEmptyFunction = function() {\n  this.connection.registerFunction('ST_IsEmpty', function(buffer) {\n    var geom = new GeometryData(buffer);\n    return !geom || geom.empty || !geom.geometry;\n  });\n}\n\n/**\n * RTree Index Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar RTreeIndexDao = function(geoPackage, featureDao) {\n  Dao.call(this, geoPackage);\n  this.featureDao = featureDao;\n\n};\n\nutil.inherits(RTreeIndexDao, Dao);\n\n/**\n * Generate query components\n * @param envelope\n * @returns {{whereArgs: Array, where: string, join: string, tableNameArr: string[]}}\n * @private\n */\nRTreeIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) {\n  var tableName = this.featureDao.gpkgTableName;\n\n  var where = '';\n  var minXLessThanMaxX = envelope.minX < envelope.maxX;\n  if (minXLessThanMaxX) {\n    where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<=');\n    where += ' and ';\n    where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>=');\n  } else {\n    where += '(';\n    where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue('minx', envelope.minX, '>=');\n    where += ' or ';\n    where += this.buildWhereWithFieldAndValue('maxx', envelope.maxX, '<=');\n    where += ')';\n  }\n\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue('miny', envelope.maxY, '<=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue('maxy', envelope.minY, '>=');\n\n  var whereArgs = []\n  whereArgs.push(envelope.maxX, envelope.minX);\n  if (!minXLessThanMaxX) {\n    whereArgs.push(envelope.minX, envelope.maxX);\n  }\n  whereArgs.push(envelope.maxY, envelope.minY);\n\n  return {\n    join: 'inner join ' + tableName + ' on ' + tableName + '.' + this.featureDao.idColumns[0] + ' = ' + this.gpkgTableName+'.id',\n    where,\n    whereArgs,\n    tableNameArr: [tableName + '.*']\n  };\n};\n\nRTreeIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) {\n  var result = this._generateGeometryEnvelopeQuery(envelope)\n  return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);\n};\n\nRTreeIndexDao.prototype.countWithGeometryEnvelope = function(envelope) {\n  var result = this._generateGeometryEnvelopeQuery(envelope)\n  return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr);\n};\n\nRTreeIndexDao.TABLE_NAME = \"rtree\";\nRTreeIndexDao.COLUMN_TABLE_NAME = RTreeIndexDao.TABLE_NAME + \".table_name\";\nRTreeIndexDao.COLUMN_GEOM_ID = RTreeIndexDao.TABLE_NAME + \".geom_id\";\nRTreeIndexDao.COLUMN_MIN_X = RTreeIndexDao.TABLE_NAME + \".minx\";\nRTreeIndexDao.COLUMN_MAX_X = RTreeIndexDao.TABLE_NAME + \".maxx\";\nRTreeIndexDao.COLUMN_MIN_Y = RTreeIndexDao.TABLE_NAME + \".miny\";\nRTreeIndexDao.COLUMN_MAX_Y = RTreeIndexDao.TABLE_NAME + \".maxy\";\nRTreeIndexDao.COLUMN_MIN_Z = RTreeIndexDao.TABLE_NAME + \".minz\";\nRTreeIndexDao.COLUMN_MAX_Z = RTreeIndexDao.TABLE_NAME + \".maxz\";\nRTreeIndexDao.COLUMN_MIN_M = RTreeIndexDao.TABLE_NAME + \".minm\";\nRTreeIndexDao.COLUMN_MAX_M = RTreeIndexDao.TABLE_NAME + \".maxm\";\n\nRTreeIndexDao.EXTENSION_NAME = 'gpkg_rtree_index';\nRTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR = 'gpkg';\nRTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR = 'rtree_index';\nRTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION = 'http://www.geopackage.org/spec/#extension_rtree';\n\nRTreeIndexDao.prototype.gpkgTableName = RTreeIndexDao.TABLE_NAME;\n\nmodule.exports.RTreeIndexDao = RTreeIndexDao;\nmodule.exports.RTreeIndex = RTreeIndex;\n\n},{\"../.\":25,\"../../dao/dao\":11,\"../../geom/envelopeBuilder\":72,\"../../geom/geometryData\":73,\"../baseExtension\":20,\"util\":343}],45:[function(require,module,exports){\n/**\n * SchemaExtension module.\n * @module SchemaExtension\n * @see module:extension/BaseExtension\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension;\n\nvar util = require('util');\n\nvar SchemaExtension = function(geoPackage) {\n  BaseExtension.call(this, geoPackage);\n\n  this.extensionName = SchemaExtension.EXTENSION_NAME;\n\n  this.extensionDefinition = SchemaExtension.EXTENSION_SCHEMA_DEFINITION;\n}\n\nutil.inherits(SchemaExtension, BaseExtension);\n\nSchemaExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE);\n};\n\nSchemaExtension.EXTENSION_NAME = 'gpkg_schema';\nSchemaExtension.EXTENSION_SCHEMA_AUTHOR = 'gpkg';\nSchemaExtension.EXTENSION_SCHEMA_NAME_NO_AUTHOR = 'schema';\nSchemaExtension.EXTENSION_SCHEMA_DEFINITION = 'http://www.geopackage.org/spec/#extension_schema';\n\nmodule.exports.SchemaExtension = SchemaExtension;\n\n},{\"../.\":25,\"../baseExtension\":20,\"util\":343}],46:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class FeatureStyle\n */\n\n/**\n * FeatureStyle constructor\n * @param {module:extension/style.StyleRow} styleRow\n * @param {module:extension/style.IconRow} iconRow\n * @constructor\n */\nvar FeatureStyle = function(styleRow, iconRow) {\n  this.styleRow = styleRow;\n  this.iconRow = iconRow;\n};\n\n/**\n * Set style\n * @param {module:extension/style.StyleRow} styleRow\n */\nFeatureStyle.prototype.setStyle = function(styleRow) {\n  this.styleRow = styleRow;\n};\n\n/**\n * Get style\n * @returns {module:extension/style.StyleRow}\n */\nFeatureStyle.prototype.getStyle = function() {\n  return this.styleRow;\n};\n\n/**\n * Returns true if has style\n * @returns {Boolean}\n */\nFeatureStyle.prototype.hasStyle = function() {\n  return !!this.styleRow;\n};\n\n/**\n * Set icon\n * @param {module:extension/style.IconRow} iconRow\n */\nFeatureStyle.prototype.setIcon = function(iconRow) {\n  this.iconRow = iconRow;\n};\n\n/**\n * Get icon\n * @returns {module:extension/style.IconRow}\n */\nFeatureStyle.prototype.getIcon = function() {\n  return this.iconRow;\n};\n\n/**\n * Returns true if has icon\n * @returns {Boolean}\n */\nFeatureStyle.prototype.hasIcon = function() {\n  return !!this.iconRow;\n};\n\nmodule.exports = FeatureStyle;\n\n},{}],47:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class FeatureStyles\n */\n\n/**\n * FeatureStyles constructor\n * @param {module:extension/style.Styles} styles\n * @param {module:extension/style.Icons} icons\n * @constructor\n */\nvar FeatureStyles = function(styles = null, icons = null) {\n  this.styles = styles;\n  this.icons = icons;\n};\n\n/**\n * Set style\n * @param {module:extension/style.Styles} styles\n */\nFeatureStyles.prototype.setStyles = function(styles) {\n  this.styles = styles;\n};\n\n/**\n * Get style\n * @returns {module:extension/style.Styles}\n */\nFeatureStyles.prototype.getStyles = function() {\n  return this.styles;\n};\n\n/**\n * Set icon\n * @param {module:extension/style.Icons} icons\n */\nFeatureStyles.prototype.setIcons = function(icons) {\n  this.icons = icons;\n};\n\n/**\n * Get icon\n * @returns {module:extension/style.Icons}\n */\nFeatureStyles.prototype.getIcons = function() {\n  return this.icons;\n};\n\nmodule.exports = FeatureStyles;\n\n},{}],48:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class FeatureStyleExtension\n */\n\nvar FeatureStyles = require('./featureStyles')\n\t, FeatureStyle = require('./featureStyle')\n\t, Styles = require('./styles')\n\t, Icons = require('./icons');\n\n\n/**\n * Feature Table Styles, styles and icons for an individual feature table\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @param {String} tableName\n * @constructor\n */\nvar FeatureTableStyles = function(geoPackage, tableName) {\n\tthis.featureStyleExtension = geoPackage.getFeatureStyleExtension();\n\tthis.cachedTableFeatureStyles = new FeatureStyles();\n\tthis.tableName = tableName;\n};\n\n/**\n * Get the feature style extension\n * @return {module:extension/style.FeatureStyleExtension} feature style extension\n */\nFeatureTableStyles.prototype.getFeatureStyleExtension = function() {\n\treturn this.featureStyleExtension;\n};\n\n/**\n * Get the feature table name\n * @return {String} feature table name\n */\nFeatureTableStyles.prototype.getTableName = function() {\n\treturn this.tableName;\n};\n\n/**\n * Determine if the GeoPackage has the extension for the table\n * @return {Boolean} true if has extension\n */\nFeatureTableStyles.prototype.has = function() {\n\treturn this.featureStyleExtension.has(this.tableName);\n};\n\n/**\n * Create style, icon, table style, and table icon relationships for the\n * feature table\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createRelationships = function() {\n\treturn this.featureStyleExtension.createRelationships(this.tableName);\n};\n\n/**\n * Check if feature table has a style, icon, table style, or table icon\n * relationships\n * @return {Boolean} true if has a relationship\n */\nFeatureTableStyles.prototype.hasRelationship = function() {\n\treturn this.featureStyleExtension.hasRelationship(this.tableName);\n};\n\n/**\n * Create a style relationship for the feature table\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createStyleRelationship = function() {\n\treturn this.featureStyleExtension.createStyleRelationship(this.tableName);\n};\n\n/**\n * Determine if a style relationship exists for the feature table\n * @return {Boolean} true if relationship exists\n */\nFeatureTableStyles.prototype.hasStyleRelationship = function() {\n\treturn this.featureStyleExtension.hasStyleRelationship(this.tableName);\n};\n\n/**\n * Create a feature table style relationship\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createTableStyleRelationship = function() {\n\treturn this.featureStyleExtension.createTableStyleRelationship(this.tableName);\n};\n\n/**\n * Determine if feature table style relationship exists\n *\n * @return {Boolean} true if relationship exists\n */\nFeatureTableStyles.prototype.hasTableStyleRelationship = function() {\n\treturn this.featureStyleExtension.hasTableStyleRelationship(this.tableName);\n};\n\n/**\n * Create an icon relationship for the feature table\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createIconRelationship = function() {\n\treturn this.featureStyleExtension.createIconRelationship(this.tableName);\n};\n\n/**\n * Determine if an icon relationship exists for the feature table\n * @return {Boolean} true if relationship exists\n */\nFeatureTableStyles.prototype.hasIconRelationship = function() {\n\treturn this.featureStyleExtension.hasIconRelationship(this.tableName);\n};\n\n/**\n * Create a feature table icon relationship\n * @return {Promise}\n */\nFeatureTableStyles.prototype.createTableIconRelationship = function() {\n\treturn this.featureStyleExtension.createTableIconRelationship(this.tableName);\n};\n\n/**\n * Determine if feature table icon relationship exists\n * @return {Boolean} true if relationship exists\n */\nFeatureTableStyles.prototype.hasTableIconRelationship = function() {\n\treturn this.featureStyleExtension.hasTableIconRelationship(this.tableName);\n};\n\n/**\n * Delete the style and icon table and row relationships for the feature\n * table\n */\nFeatureTableStyles.prototype.deleteRelationships = function() {\n\tthis.featureStyleExtension.deleteRelationships(this.tableName);\n};\n\n/**\n * Delete a style relationship for the feature table\n */\nFeatureTableStyles.prototype.deleteStyleRelationship = function() {\n\tthis.featureStyleExtension.deleteStyleRelationship(this.tableName);\n};\n\n/**\n * Delete a table style relationship for the feature table\n */\nFeatureTableStyles.prototype.deleteTableStyleRelationship = function() {\n\tthis.featureStyleExtension.deleteTableStyleRelationship(this.tableName);\n};\n\n/**\n * Delete a icon relationship for the feature table\n */\nFeatureTableStyles.prototype.deleteIconRelationship = function() {\n\tthis.featureStyleExtension.deleteIconRelationship(this.tableName);\n};\n\n/**\n * Delete a table icon relationship for the feature table\n */\nFeatureTableStyles.prototype.deleteTableIconRelationship = function() {\n\tthis.featureStyleExtension.deleteTableIconRelationship(this.tableName);\n};\n\n/**\n * Get a Style Mapping DAO\n * @return {module:extension/style.StyleMappingDao} style mapping DAO\n */\nFeatureTableStyles.prototype.getStyleMappingDao = function() {\n\treturn this.featureStyleExtension.getStyleMappingDao(this.tableName);\n};\n\n/**\n * Get a Table Style Mapping DAO\n * @return {module:extension/style.StyleMappingDao} table style mapping DAO\n */\nFeatureTableStyles.prototype.getTableStyleMappingDao = function() {\n\treturn this.featureStyleExtension.getTableStyleMappingDao(this.tableName);\n};\n\n/**\n * Get a Icon Mapping DAO\n * @return {module:extension/style.StyleMappingDao} icon mapping DAO\n */\nFeatureTableStyles.prototype.getIconMappingDao = function() {\n\treturn this.featureStyleExtension.getIconMappingDao(this.tableName);\n};\n\n/**\n * Get a Table Icon Mapping DAO\n * @return {module:extension/style.StyleMappingDao} table icon mapping DAO\n */\nFeatureTableStyles.prototype.getTableIconMappingDao = function() {\n\treturn this.featureStyleExtension.getTableIconMappingDao(this.tableName);\n};\n\n/**\n * Get a style DAO\n * @return {module:extension/style.StyleDao} style DAO\n */\nFeatureTableStyles.prototype.getStyleDao = function() {\n\treturn this.featureStyleExtension.getStyleDao();\n};\n\n/**\n * Get a icon DAO\n * @return {module:extension/style.IconDao} icon DAO\n */\nFeatureTableStyles.prototype.getIconDao = function() {\n\treturn this.featureStyleExtension.getIconDao();\n};\n\n/**\n * Get the table feature styles\n * @return {module:extension/style.FeatureStyles} table feature styles or null\n */\nFeatureTableStyles.prototype.getTableFeatureStyles = function() {\n\treturn this.featureStyleExtension.getTableFeatureStyles(this.tableName);\n};\n\n/**\n * Get the table styles\n * @return {module:extension/style.Styles} table styles or null\n */\nFeatureTableStyles.prototype.getTableStyles = function() {\n\treturn this.featureStyleExtension.getTableStyles(this.tableName);\n};\n\n/**\n * Get the cached table styles, querying and caching if needed\n * @return {module:extension/style.Styles} cached table styles\n */\nFeatureTableStyles.prototype.getCachedTableStyles = function() {\n\tvar styles = this.cachedTableFeatureStyles.getStyles();\n\tif (styles === null) {\n\t\tstyles = this.cachedTableFeatureStyles.getStyles();\n\t\tif (styles === null) {\n\t\t\tstyles = this.getTableStyles();\n\t\t\tif (styles === null) {\n\t\t\t\tstyles = new Styles();\n\t\t\t}\n\t\t\tthis.cachedTableFeatureStyles.setStyles(styles);\n\t\t}\n\t}\n\tif (styles.isEmpty()) {\n\t\tstyles = null;\n\t}\n\treturn styles;\n};\n\n/**\n * Get the table style of the geometry type\n * @param {String} geometryType geometry type\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getTableStyle = function(geometryType) {\n\treturn this.featureStyleExtension.getTableStyle(this.tableName, geometryType);\n};\n\n/**\n * Get the table style default\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getTableStyleDefault = function() {\n\treturn this.featureStyleExtension.getTableStyleDefault(this.tableName);\n};\n\n/**\n * Get the table icons\n * @return {module:extension/style.Icons} table icons or null\n */\nFeatureTableStyles.prototype.getTableIcons = function() {\n\treturn this.featureStyleExtension.getTableIcons(this.tableName);\n};\n\n/**\n * Get the cached table icons, querying and caching if needed\n * @return {module:extension/style.Icons} cached table icons\n */\nFeatureTableStyles.prototype.getCachedTableIcons = function() {\n\tvar icons = this.cachedTableFeatureStyles.getIcons();\n\tif (icons === null) {\n\t\ticons = this.cachedTableFeatureStyles.getIcons();\n\t\tif (icons === null) {\n\t\t\ticons = this.getTableIcons();\n\t\t\tif (icons === null) {\n\t\t\t\ticons = new Icons();\n\t\t\t}\n\t\t\tthis.cachedTableFeatureStyles.setIcons(icons);\n\t\t}\n\t}\n\tif (icons.isEmpty()) {\n\t\ticons = null;\n\t}\n\treturn icons;\n};\n\n/**\n * Get the table icon of the geometry type\n * @param {String} geometryType geometry type\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getTableIcon = function(geometryType) {\n\treturn this.featureStyleExtension.getTableIcon(this.tableName, geometryType);\n};\n\n/**\n * Get the table icon default\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getTableIconDefault = function() {\n\treturn this.featureStyleExtension.getTableIconDefault(this.tableName);\n};\n\n/**\n * Get the feature styles for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyles} feature styles or null\n */\nFeatureTableStyles.prototype.getFeatureStylesForFeatureRow = function(featureRow) {\n\treturn this.featureStyleExtension.getFeatureStylesForFeatureRow(featureRow);\n};\n\n/**\n * Get the feature styles for the feature id\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.FeatureStyles} feature styles or null\n */\nFeatureTableStyles.prototype.getFeatureStyles = function(featureId) {\n\treturn this.featureStyleExtension.getFeatureStyles(this.tableName, featureId);\n};\n\n/**\n * Get the feature style (style and icon) of the feature row, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyleForFeatureRow = function(featureRow) {\n\treturn this.getFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Get the feature style (style and icon) of the feature row with the\n * provided geometry type, searching in order: feature geometry type style\n * or icon, feature default style or icon, table geometry type style or\n * icon, table default style or icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\treturn this.getFeatureStyle(featureRow.getId(), geometryType);\n};\n\n/**\n * Get the feature style default (style and icon) of the feature row,\n * searching in order: feature default style or icon, table default style or\n * icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyleDefaultForFeatureRow = function(featureRow) {\n\treturn this.getFeatureStyle(featureRow.getId(), null);\n};\n\n/**\n * Get the feature style (style and icon) of the feature, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyle = function(featureId, geometryType) {\n\tvar featureStyle = null;\n\tvar style = this.getStyle(featureId, geometryType);\n\tvar icon = this.getIcon(featureId, geometryType);\n\tif (style != null || icon != null) {\n\t\tfeatureStyle = new FeatureStyle(style, icon);\n\t}\n\treturn featureStyle;\n};\n\n/**\n * Get the feature style (style and icon) of the feature, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureTableStyles.prototype.getFeatureStyleDefault = function(featureId) {\n\treturn this.getFeatureStyle(featureId, null);\n};\n\n/**\n * Get the styles for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.Styles} styles or null\n */\nFeatureTableStyles.prototype.getStylesForFeatureRow = function(featureRow) {\n\treturn this.featureStyleExtension.getStylesForFeatureRow(featureRow);\n};\n\n/**\n * Get the styles for the feature id\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.Styles}  styles or null\n */\nFeatureTableStyles.prototype.getStylesForFeatureId = function(featureId) {\n\treturn this.featureStyleExtension.getStylesForFeatureId(this.tableName, featureId);\n};\n\n/**\n * Get the style of the feature row, searching in order: feature geometry\n * type style, feature default style, table geometry type style, table\n * default style\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyleForFeatureRow = function(featureRow) {\n\treturn this.getStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Get the style of the feature row with the provided geometry type,\n * searching in order: feature geometry type style, feature default style,\n * table geometry type style, table default style\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\treturn this.getStyle(featureRow.getId(), geometryType);\n};\n\n/**\n * Get the default style of the feature row, searching in order: feature\n * default style, table default style\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyleDefaultForFeatureRow = function(featureRow) {\n\treturn this.getStyle(featureRow.getId(), null);\n};\n\n/**\n * Get the style of the feature, searching in order: feature geometry type\n * style, feature default style, table geometry type style, table default\n * style\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyle = function(featureId, geometryType) {\n\tvar styleRow = this.featureStyleExtension.getStyle(this.tableName, featureId, geometryType, false);\n\tif (styleRow === null) {\n\t\t// Table Style\n\t\tvar styles = this.getCachedTableStyles();\n\t\tif (styles != null) {\n\t\t\tstyleRow = styles.getStyle(geometryType);\n\t\t}\n\t}\n\treturn styleRow;\n};\n\n/**\n * Get the default style of the feature, searching in order: feature default\n * style, table default style\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureTableStyles.prototype.getStyleDefault = function(featureId) {\n\treturn this.getStyle(featureId, null);\n};\n\n/**\n * Get the icons for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.Icons} icons or null\n */\nFeatureTableStyles.prototype.getIconsForFeatureRow = function(featureRow) {\n\treturn this.featureStyleExtension.getIconsForFeatureRow(featureRow);\n};\n\n/**\n * Get the icons for the feature id\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.Icons} icons or null\n */\nFeatureTableStyles.prototype.getIconsForFeatureId = function(featureId) {\n\treturn this.featureStyleExtension.getIconsForFeatureId(this.tableName, featureId);\n};\n\n/**\n * Get the icon of the feature row, searching in order: feature geometry\n * type icon, feature default icon, table geometry type icon, table default\n * icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIconForFeatureRow = function(featureRow) {\n\treturn this.getIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Get the icon of the feature row with the provided geometry type,\n * searching in order: feature geometry type icon, feature default icon,\n * table geometry type icon, table default icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\treturn this.getIcon(featureRow.getId(), geometryType);\n};\n\n/**\n * Get the default icon of the feature row, searching in order: feature\n * default icon, table default icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIconDefaultForFeatureRow = function(featureRow) {\n\treturn this.getIcon(featureRow.getId(), null);\n};\n\n/**\n * Get the icon of the feature, searching in order: feature geometry type\n * icon, feature default icon, table geometry type icon, table default icon\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIcon = function(featureId, geometryType) {\n\tvar iconRow = this.featureStyleExtension.getIcon(this.tableName, featureId, geometryType, false);\n\tif (iconRow === null) {\n\t\t// Table Icon\n\t\tvar icons = this.getCachedTableIcons();\n\t\tif (icons != null) {\n\t\t\ticonRow = icons.getIcon(geometryType);\n\t\t}\n\t}\n\treturn iconRow;\n};\n\n/**\n * Get the default icon of the feature, searching in order: feature default\n * icon, table default icon\n *\n * @param {Number} featureId feature id\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureTableStyles.prototype.getIconDefault = function(featureId) {\n\treturn this.getIcon(featureId, null);\n};\n\n/**\n * Set the feature table default feature styles\n *\n * @param {module:extension/style.FeatureStyles} featureStyles default feature styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableFeatureStyles = function(featureStyles) {\n\treturn this.featureStyleExtension.setTableFeatureStyles(this.tableName, featureStyles).then(function () {\n\t\tthis.clearCachedTableFeatureStyles();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table default styles\n *\n * @param {module:extension/style.Styles} styles default styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableStyles = function(styles) {\n\treturn this.featureStyleExtension.setTableStyles(this.tableName, styles).then(function () {\n\t\tthis.clearCachedTableStyles();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table style default\n *\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableStyleDefault = function(style) {\n\treturn this.featureStyleExtension.setTableStyleDefault(this.tableName, style).then(function () {\n\t\tthis.clearCachedTableStyles();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table style for the geometry type\n *\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableStyle = function(geometryType, style) {\n\treturn this.featureStyleExtension.setTableStyle(this.tableName, geometryType, style).then(function () {\n\t\tthis.clearCachedTableStyles();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table default icons\n *\n * @param {module:extension/style.Icons} icons default icons\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableIcons = function(icons) {\n\treturn this.featureStyleExtension.setTableIcons(this.tableName, icons).then(function () {\n\t\tthis.clearCachedTableIcons();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table icon default\n *\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableIconDefault = function(icon) {\n\treturn this.featureStyleExtension.setTableIconDefault(this.tableName, icon).then(function () {\n\t\tthis.clearCachedTableIcons();\n\t}.bind(this));\n};\n\n/**\n * Set the feature table icon for the geometry type\n *\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setTableIcon = function(geometryType, icon) {\n\treturn this.featureStyleExtension.setTableIcon(this.tableName, geometryType, icon).then(function () {\n\t\tthis.clearCachedTableIcons();\n\t}.bind(this));\n};\n\n/**\n * Set the feature styles for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) {\n\treturn this.featureStyleExtension.setFeatureStylesForFeatureRow(featureRow, featureStyles);\n};\n\n/**\n * Set the feature styles for the feature table and feature id\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyles = function(featureId, featureStyles) {\n\treturn this.featureStyleExtension.setFeatureStyles(this.tableName, featureId, featureStyles);\n};\n\n/**\n * Set the feature style (style and icon) of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyleForFeatureRow(featureRow, featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature row for the\n * specified geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyleForFeatureRowAndGeometryType(featureRow, geometryType, featureStyle);\n};\n\n/**\n * Set the feature style default (style and icon) of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyleDefaultForFeatureRow(featureRow, featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyle = function(featureId, geometryType, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyle(this.tableName, featureId, geometryType, featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setFeatureStyleDefault = function(featureId, featureStyle) {\n\treturn this.featureStyleExtension.setFeatureStyleDefault(this.tableName, featureId, featureStyle);\n};\n\n/**\n * Set the styles for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} styles styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStylesForFeatureRow = function(featureRow, styles) {\n\treturn this.featureStyleExtension.setStylesForFeatureRow(featureRow, styles);\n};\n\n/**\n * Set the styles for the feature table and feature id\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.Styles} styles styles\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyles = function(featureId, styles) {\n\treturn this.featureStyleExtension.setStyles(this.tableName, featureId, styles);\n};\n\n/**\n * Set the style of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyleForFeatureRow = function(featureRow, style) {\n\treturn this.featureStyleExtension.setStyleForFeatureRow(featureRow, style);\n};\n\n/**\n * Set the style of the feature row for the specified geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) {\n\treturn this.featureStyleExtension.setStyleForFeatureRowAndGeometryType(featureRow, geometryType, style);\n};\n\n/**\n * Set the default style of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) {\n\treturn this.featureStyleExtension.setStyleDefaultForFeatureRow(featureRow, style);\n};\n\n/**\n * Set the style of the feature\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyle = function(featureId, geometryType, style) {\n\treturn this.featureStyleExtension.setStyle(this.tableName, featureId, geometryType, style);\n};\n\n/**\n * Set the default style of the feature\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setStyleDefault = function(featureId, style) {\n\treturn this.featureStyleExtension.setStyleDefault(this.tableName, featureId, style);\n};\n\n/**\n * Set the icons for the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.Icons} icons icons\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconsForFeatureRow = function(featureRow, icons) {\n\treturn this.featureStyleExtension.setIconsForFeatureRow(featureRow, icons);\n};\n\n/**\n * Set the icons for the feature table and feature id\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.Icons} icons icons\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIcons = function(featureId, icons) {\n\treturn this.featureStyleExtension.setIcons(this.tableName, featureId, icons);\n};\n\n/**\n * Set the icon of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconForFeatureRow = function(featureRow, icon) {\n\treturn this.featureStyleExtension.setIconForFeatureRow(featureRow, icon);\n};\n\n/**\n * Set the icon of the feature row for the specified geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) {\n\treturn this.featureStyleExtension.setIconForFeatureRowAndGeometryType(featureRow, geometryType, icon);\n};\n\n/**\n * Set the default icon of the feature row\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) {\n\treturn this.featureStyleExtension.setIconDefaultForFeatureRow(featureRow, icon);\n};\n\n/**\n * Get the icon of the feature, searching in order: feature geometry type\n * icon, feature default icon, table geometry type icon, table default icon\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIcon = function(featureId, geometryType, icon) {\n\treturn this.featureStyleExtension.setIcon(this.tableName, featureId, geometryType, icon);\n};\n\n/**\n * Set the default icon of the feature\n *\n * @param {Number} featureId feature id\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureTableStyles.prototype.setIconDefault = function(featureId, icon) {\n\treturn this.featureStyleExtension.setIconDefault(this.tableName, featureId, icon);\n};\n\n/**\n * Delete all feature styles including table styles, table icons, style, and\n * icons\n */\nFeatureTableStyles.prototype.deleteAllFeatureStyles = function() {\n\tthis.featureStyleExtension.deleteAllFeatureStyles(this.tableName);\n\tthis.clearCachedTableFeatureStyles();\n};\n\n/**\n * Delete all styles including table styles and feature row styles\n */\nFeatureTableStyles.prototype.deleteAllStyles = function() {\n\tthis.featureStyleExtension.deleteAllStyles(this.tableName);\n\tthis.clearCachedTableStyles();\n};\n\n/**\n * Delete all icons including table icons and feature row icons\n */\nFeatureTableStyles.prototype.deleteAllIcons = function() {\n\tthis.featureStyleExtension.deleteAllIcons(this.tableName);\n\tthis.clearCachedTableIcons();\n};\n\n/**\n * Delete the feature table feature styles\n */\nFeatureTableStyles.prototype.deleteTableFeatureStyles = function() {\n\tthis.featureStyleExtension.deleteTableFeatureStyles(this.tableName);\n\tthis.clearCachedTableFeatureStyles();\n};\n\n/**\n * Delete the feature table styles\n */\nFeatureTableStyles.prototype.deleteTableStyles = function() {\n\tthis.featureStyleExtension.deleteTableStyles(this.tableName);\n\tthis.clearCachedTableStyles();\n};\n\n/**\n * Delete the feature table default style\n */\nFeatureTableStyles.prototype.deleteTableStyleDefault = function() {\n\tthis.featureStyleExtension.deleteTableStyleDefault(this.tableName);\n\tthis.clearCachedTableStyles();\n};\n\n/**\n * Delete the feature table style for the geometry type\n *\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteTableStyle = function(geometryType) {\n\tthis.featureStyleExtension.deleteTableStyle(this.tableName, geometryType);\n\tthis.clearCachedTableStyles();\n};\n\n/**\n * Delete the feature table icons\n */\nFeatureTableStyles.prototype.deleteTableIcons = function() {\n\tthis.featureStyleExtension.deleteTableIcons(this.tableName);\n\tthis.clearCachedTableIcons();\n};\n\n/**\n * Delete the feature table default icon\n */\nFeatureTableStyles.prototype.deleteTableIconDefault = function() {\n\tthis.featureStyleExtension.deleteTableIconDefault(this.tableName);\n\tthis.clearCachedTableIcons();\n};\n\n/**\n * Delete the feature table icon for the geometry type\n *\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteTableIcon = function(geometryType) {\n\tthis.featureStyleExtension.deleteTableIcon(this.tableName, geometryType);\n\tthis.clearCachedTableIcons();\n};\n\n/**\n * Clear the cached table feature styles\n */\nFeatureTableStyles.prototype.clearCachedTableFeatureStyles = function() {\n\tthis.cachedTableFeatureStyles.setStyles(null);\n\tthis.cachedTableFeatureStyles.setIcons(null);\n};\n\n/**\n * Clear the cached table styles\n */\nFeatureTableStyles.prototype.clearCachedTableStyles = function() {\n\tthis.cachedTableFeatureStyles.setStyles(null);\n};\n\n/**\n * Clear the cached table icons\n */\nFeatureTableStyles.prototype.clearCachedTableIcons = function() {\n\tthis.cachedTableFeatureStyles.setIcons(null);\n};\n\n/**\n * Delete all feature styles\n */\nFeatureTableStyles.prototype.deleteFeatureStyles = function() {\n\tthis.featureStyleExtension.deleteFeatureStyles(this.tableName);\n};\n\n/**\n * Delete all styles\n */\nFeatureTableStyles.prototype.deleteStyles = function() {\n\tthis.featureStyleExtension.deleteStyles(this.tableName);\n};\n\n/**\n * Delete feature row styles\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteStylesForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteStylesForFeatureRow(featureRow);\n};\n\n/**\n * Delete feature row styles\n *\n * @param {Number} featureId feature id\n */\nFeatureTableStyles.prototype.deleteStylesForFeatureId = function(featureId) {\n\tthis.featureStyleExtension.deleteStylesForFeatureId(this.tableName, featureId);\n};\n\n/**\n * Delete the feature row default style\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteStyleDefaultForFeatureRow(featureRow);\n};\n\n/**\n * Delete the feature row default style\n *\n * @param {Number} featureId feature id\n */\nFeatureTableStyles.prototype.deleteStyleDefault = function(featureId) {\n\tthis.featureStyleExtension.deleteStyleDefault(this.tableName, featureId);\n};\n\n/**\n * Delete the feature row style for the feature row geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteStyleForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteStyleForFeatureRow(featureRow);\n};\n\n/**\n * Delete the feature row style for the geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\tthis.featureStyleExtension.deleteStyleForFeatureRowAndGeometryType(featureRow, geometryType);\n};\n\n/**\n * Delete the feature row style for the geometry type\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteStyle = function(featureId, geometryType) {\n\tthis.featureStyleExtension.deleteStyle(this.tableName, featureId, geometryType);\n};\n\n/**\n * Delete all icons\n */\nFeatureTableStyles.prototype.deleteIcons = function() {\n\tthis.featureStyleExtension.deleteIcons(this.tableName);\n};\n\n/**\n * Delete feature row icons\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteIconsForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteIconsForFeatureRow(featureRow);\n};\n\n/**\n * Delete feature row icons\n *\n * @param {Number} featureId feature id\n */\nFeatureTableStyles.prototype.deleteIconsForFeatureId = function(featureId) {\n\tthis.featureStyleExtension.deleteIconsForFeatureId(this.tableName, featureId);\n};\n\n/**\n * Delete the feature row default icon\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteIconDefaultForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteIconDefaultForFeatureRow(featureRow);\n};\n\n/**\n * Delete the feature row default icon\n *\n * @param {Number} featureId feature id\n */\nFeatureTableStyles.prototype.deleteIconDefault = function(featureId) {\n\tthis.featureStyleExtension.deleteIconDefault(this.tableName, featureId);\n};\n\n/**\n * Delete the feature row icon for the feature row geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureTableStyles.prototype.deleteIconForFeatureRow = function(featureRow) {\n\tthis.featureStyleExtension.deleteIconForFeatureRow(featureRow);\n};\n\n/**\n * Delete the feature row icon for the geometry type\n *\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\tthis.featureStyleExtension.deleteIconForFeatureRowAndGeometryType(featureRow, geometryType);\n};\n\n/**\n * Delete the feature row icon for the geometry type\n *\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureTableStyles.prototype.deleteIcon = function(featureId, geometryType) {\n\tthis.featureStyleExtension.deleteIcon(this.tableName, featureId, geometryType);\n};\n\n/**\n * Get all the unique style row ids the table maps to\n *\n * @return {module:extension/style.StyleRow} style row ids\n */\nFeatureTableStyles.prototype.getAllTableStyleIds = function() {\n\treturn this.featureStyleExtension.getAllTableStyleIds(this.tableName);\n};\n\n/**\n * Get all the unique icon row ids the table maps to\n *\n * @return {module:extension/style.IconRow} icon row ids\n */\nFeatureTableStyles.prototype.getAllTableIconIds = function() {\n\treturn this.featureStyleExtension.getAllTableIconIds(this.tableName);\n};\n\n/**\n * Get all the unique style row ids the features map to\n *\n * @return {module:extension/style.StyleRow} style row ids\n */\nFeatureTableStyles.prototype.getAllStyleIds = function() {\n\treturn this.featureStyleExtension.getAllStyleIds(this.tableName);\n};\n\n/**\n * Get all the unique icon row ids the features map to\n *\n * @return {module:extension/style.IconRow} icon row ids\n */\nFeatureTableStyles.prototype.getAllIconIds = function() {\n\treturn this.featureStyleExtension.getAllIconIds(this.tableName);\n};\n\nmodule.exports = FeatureTableStyles;\n\n},{\"./featureStyle\":46,\"./featureStyles\":47,\"./icons\":53,\"./styles\":62}],49:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class IconCache\n */\n\n/**\n * Constructor, created with cache size of {@link #IconCache.DEFAULT_CACHE_SIZE}\n * @constructor\n */\nvar IconCache = function(size = null) {\n  this.cacheSize = size !== null ? size : IconCache.DEFAULT_CACHE_SIZE;\n  this.iconCache = {};\n  this.accessHistory = [];\n};\n\n/**\n * Get the cached image for the icon row or null if not cached\n * @param {module:extension/style.IconRow} iconRow icon row\n * @return {Image} icon image or null\n */\nIconCache.prototype.getIconForIconRow = function(iconRow) {\n  return this.get(iconRow.getId());\n};\n\n/**\n * Get the cached image for the icon row id or null if not cached\n * @param {Number} iconRowId icon row id\n * @return {Image} icon image or null\n */\nIconCache.prototype.get = function(iconRowId) {\n  var image = this.iconCache[iconRowId];\n  if (!!image) {\n    var index = this.accessHistory.indexOf(iconRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }\n    this.accessHistory.push(iconRowId);\n  }\n  return image;\n};\n\n/**\n * Cache the icon image for the icon row\n * @param {module:extension/style.IconRow} iconRow icon row\n * @param {Image} image icon image\n * @return {Image} previous cached icon image or null\n */\nIconCache.prototype.putIconForIconRow = function(iconRow, image) {\n  return this.put(iconRow.getId(), image);\n};\n\n/**\n * Cache the icon image for the icon row id\n * @param {Number} iconRowId icon row id\n * @param {Image} image icon image\n * @return {Image} previous cached icon image or null\n */\nIconCache.prototype.put = function(iconRowId, image) {\n  var previous = this.iconCache[iconRowId];\n  this.iconCache[iconRowId] = image;\n  if (!!previous) {\n    var index = this.accessHistory.indexOf(iconRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }\n  }\n  this.accessHistory.push(iconRowId);\n  if (Object.keys(this.iconCache).length > this.cacheSize) {\n    var iconId = this.accessHistory.shift();\n    if (iconId) {\n      delete this.iconCache[iconId];\n    }\n  }\n  return previous;\n};\n\n/**\n * Remove the cached image for the icon row\n * @param {module:extension/style.IconRow} iconRow icon row\n * @return {Image} removed icon image or null\n */\nIconCache.prototype.removeIconForIconRow = function(iconRow) {\n  return this.remove(iconRow.getId());\n};\n\n/**\n * Remove the cached image for the icon row id\n * @param {Number} iconRowId icon row id\n * @return {Image} removed icon image or null\n */\nIconCache.prototype.remove = function(iconRowId) {\n  var removed = this.iconCache[iconRowId];\n  delete this.iconCache[iconRowId];\n  if (!!removed) {\n    var index = this.accessHistory.indexOf(iconRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }  }\n  return removed;\n};\n\n/**\n * Clear the cache\n */\nIconCache.prototype.clear = function() {\n  this.iconCache = {};\n  this.accessHistory = [];\n};\n\n/**\n * Resize the cache\n * @param {Number} maxSize max size\n */\nIconCache.prototype.resize = function(maxSize) {\n  this.cacheSize = maxSize;\n  var keys = Object.keys(this.iconCache);\n  if (keys.length > maxSize) {\n    var numberToRemove = keys.length - maxSize;\n    for (var i = 0; i < numberToRemove; i++) {\n      delete this.iconCache[this.accessHistory.shift()];\n    }\n  }\n};\n\n/**\n * Create or retrieve from cache an icon image for the icon row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createIcon = function(icon) {\n  return this.createAndCacheIcon(icon, this);\n};\n\n/**\n * Create or retrieve from cache an icon image for the icon row\n * @param {module:extension/style.IconRow} icon icon row\n * @param {Number} scale scale factor\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createScaledIcon = function(icon, scale) {\n  return this.createAndCacheScaledIcon(icon, scale, this);\n};\n\n/**\n * Create an icon image for the icon row without caching\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createIconNoCache = function(icon) {\n  return this.createScaledIconNoCache(icon, 1.0);\n};\n\n/**\n * Create an icon image for the icon row without caching\n * @param icon icon row\n * @param scale scale factor\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createScaledIconNoCache = function(icon, scale) {\n  return this.createAndCacheScaledIcon(icon, scale, null);\n};\n\n/**\n * Create or retrieve from cache an icon image for the icon row\n * @param {module:extension/style.IconRow} icon icon row\n * @param {module:extension/style.IconCache} iconCache icon cache\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createAndCacheIcon = function(icon, iconCache) {\n  return this.createAndCacheScaledIcon(icon, 1.0, iconCache);\n};\n\n/**\n * Create or retrieve from cache an icon image for the icon row\n * @param {module:extension/style.IconRow} icon icon row\n * @param {Number} scale scale factor\n * @param {module:extension/style.IconCache} iconCache icon cache\n * @return {Promise<Image>} icon image\n */\nIconCache.prototype.createAndCacheScaledIcon = async function(icon, scale, iconCache) {\n  var iconImage = null;\n  if (icon != null) {\n    var iconId = icon.getId();\n    if (iconCache !== null) {\n      iconImage = iconCache.get(iconId);\n    }\n    var iconScaledWidth = Math.round(icon.getWidth() * scale);\n    var iconScaledHeight = Math.round(icon.getHeight() * scale);\n    if (!iconImage || iconImage.width !== iconScaledWidth || iconImage.height !== iconScaledHeight) {\n      iconImage = await icon.getScaledDataImage(scale);\n    }\n    if (iconCache !== null) {\n      iconCache.putIconForIconRow(icon, iconImage);\n    }\n  }\n  return iconImage;\n};\n\nIconCache.DEFAULT_CACHE_SIZE = 100;\n\nmodule.exports = IconCache;\n\n},{}],50:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class IconDao\n */\n\nvar IconRow = require('./iconRow')\n  , MediaDao = require('../relatedTables/mediaDao');\n\nvar util = require('util');\n\n/**\n * Icon DAO for reading user icon data tables\n * @extends {module:user/userDao~MediaDao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection\n * @param  {string} table table name\n * @constructor\n */\nvar IconDao = function(geoPackage, table) {\n  MediaDao.call(this, geoPackage, table);\n  this.table = table;\n};\n\nutil.inherits(IconDao, MediaDao);\n\n/**\n * Create a new icon row\n * @return {module:extension/style.IconRow}\n */\nIconDao.prototype.newRow = function() {\n  return new IconRow(this.table);\n};\n\n/**\n * Create a icon row with the column types and values\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/style.IconRow}             icon row\n */\nIconDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new IconRow(this.table, columnTypes, values);\n};\n\nmodule.exports = IconDao;\n\n},{\"../relatedTables/mediaDao\":33,\"./iconRow\":51,\"util\":343}],51:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class IconRow\n */\n\nvar MediaRow = require('../relatedTables/mediaRow');\nvar util = require('util');\nvar ImageUtils = require('../../tiles/imageUtils');\n\n/**\n * Icon Row\n * @extends {module:extension/relatedTables~MediaRow}\n * @param  {module:extension/style.IconTable} iconTable  icon table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @constructor\n */\nvar IconRow = function(iconTable, columnTypes, values) {\n  MediaRow.call(this, iconTable, columnTypes, values);\n  this.iconTable = iconTable;\n};\n\nutil.inherits(IconRow, MediaRow);\n\n/**\n * Get the name column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getNameColumn = function() {\n  return this.iconTable.getNameColumn();\n};\n\n/**\n * Gets the name\n * @return {String}\n */\nIconRow.prototype.getName = function() {\n  return this.getValueWithColumnName(this.getNameColumn().name);\n};\n\n/**\n * Sets the name for the row\n * @param {String} name name\n */\nIconRow.prototype.setName = function(name) {\n  this.setValueWithColumnName(this.getNameColumn().name, name);\n};\n\n/**\n * Get the description column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getDescriptionColumn = function() {\n  return this.iconTable.getDescriptionColumn();\n};\n\n/**\n * Gets the description\n * @return {String}\n */\nIconRow.prototype.getDescription = function() {\n  return this.getValueWithColumnName(this.getDescriptionColumn().name);\n};\n\n/**\n * Sets the description for the row\n * @param {string} description description\n */\nIconRow.prototype.setDescription = function(description) {\n  this.setValueWithColumnName(this.getDescriptionColumn().name, description);\n};\n\n/**\n * Get the width column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getWidthColumn = function() {\n  return this.iconTable.getWidthColumn();\n};\n\n/**\n * Gets the width\n * @return {Number}\n */\nIconRow.prototype.getWidth = function() {\n  return this.getValueWithColumnName(this.getWidthColumn().name);\n};\n\n/**\n * Sets the width for the row\n * @param {Number} width width\n */\nIconRow.prototype.setWidth = function(width) {\n  this.setValueWithColumnName(this.getWidthColumn().name, width);\n};\n\n/**\n * Get the width or derived width from the icon data and scaled as needed\n * for the height\n *\n * @return {Promise<Number>}  derived width\n */\nIconRow.prototype.getDerivedWidth = function() {\n  var width = this.getWidth();\n  if (width === undefined || width === null) {\n    width = this.getDerivedDimensions()[0];\n  }\n  return width;\n};\n\n/**\n * Get the height column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getHeightColumn = function() {\n  return this.iconTable.getHeightColumn();\n};\n\n/**\n * Gets the height\n * @return {Number}\n */\nIconRow.prototype.getHeight = function() {\n  return this.getValueWithColumnName(this.getHeightColumn().name);\n};\n\n/**\n * Sets the height for the row\n * @param {Number} height height\n */\nIconRow.prototype.setHeight = function(height) {\n  this.setValueWithColumnName(this.getHeightColumn().name, height);\n};\n\n/**\n * Get the height or derived height from the icon data and scaled as needed\n * for the width\n *\n * @return {Promise<Number>} derived height\n */\nIconRow.prototype.getDerivedHeight = function() {\n  var height = this.getHeight();\n  if (height === undefined || height === null) {\n    height = this.getDerivedDimensions()[1];\n  }\n  return height;\n};\n\n/**\n * Get the derived width and height from the values and icon data, scaled as needed\n * @return {Number[]} derived dimensions array with two values, width at index 0, height at index 1\n */\nIconRow.prototype.getDerivedDimensions = function() {\n  var width = this.getWidth();\n  var height = this.getHeight();\n  if (width === undefined || width === null || height === undefined || height === null) {\n    var dataWidth;\n    var dataHeight;\n    var imageSize = ImageUtils.getImageSize(this.getData());\n    dataWidth = imageSize.width;\n    dataHeight = imageSize.height;\n    if (width === undefined || width === null) {\n      width = dataWidth;\n      if (height !== undefined && height !== null) {\n        width *= (height / dataHeight);\n      }\n    }\n    if (height === undefined || height === null) {\n      height = dataHeight;\n      if (width !== undefined && width !== null) {\n        height *= (width / dataWidth);\n      }\n    }\n  }\n  return [width, height];\n};\n\n/**\n * Get the anchor_u column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getAnchorUColumn = function() {\n  return this.iconTable.getAnchorUColumn();\n};\n\n/**\n * Gets the anchor_u\n * @return {Number}\n */\nIconRow.prototype.getAnchorU = function() {\n  return this.getValueWithColumnName(this.getAnchorUColumn().name);\n};\n\n/**\n * Sets the anchor_u for the row\n * @param {Number} anchor_u anchor_u\n */\nIconRow.prototype.setAnchorU = function(anchor_u) {\n  this.validateAnchor(anchor_u);\n  this.setValueWithColumnName(this.getAnchorUColumn().name, anchor_u);\n};\n\n/**\n * Get the anchor u value or the default value of 0.5\n * @return {Number} anchor u value\n */\nIconRow.prototype.getAnchorUOrDefault = function() {\n  var anchorU = this.getAnchorU();\n  if (anchorU == null) {\n    anchorU = 0.5;\n  }\n  return anchorU;\n};\n\n/**\n * Get the anchor_v column\n * @return {module:user/userColumn~UserColumn}\n */\nIconRow.prototype.getAnchorVColumn = function() {\n  return this.iconTable.getAnchorVColumn();\n};\n\n/**\n * Gets the anchor_v\n * @return {Number}\n */\nIconRow.prototype.getAnchorV = function() {\n  return this.getValueWithColumnName(this.getAnchorVColumn().name);\n};\n\n/**\n * Sets the anchor_v for the row\n * @param {Number} anchor_v anchor_v\n */\nIconRow.prototype.setAnchorV = function(anchor_v) {\n  this.validateAnchor(anchor_v);\n  this.setValueWithColumnName(this.getAnchorVColumn().name, anchor_v);\n};\n\n/**\n * Get the anchor v value or the default value of 1.0\n * @return {Number} anchor v value\n */\nIconRow.prototype.getAnchorVOrDefault = function() {\n  var anchorV = this.getAnchorV();\n  if (anchorV == null) {\n    anchorV = 1.0;\n  }\n  return anchorV;\n};\n\n/**\n * Validate the anchor value\n * @param {Number} anchor anchor\n */\nIconRow.prototype.validateAnchor = function(anchor) {\n  if (anchor != null && (anchor < 0.0 || anchor > 1.0)) {\n    throw new Error(\"Anchor must be set inclusively between 0.0 and 1.0, invalid value: \" + anchor);\n  }\n};\n\nmodule.exports = IconRow;\n\n},{\"../../tiles/imageUtils\":89,\"../relatedTables/mediaRow\":34,\"util\":343}],52:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class IconTable\n */\n\nvar MediaTable = require('../relatedTables/mediaTable')\n  , UserCustomColumn = require('../../user/custom/userCustomColumn')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Icon Requirements Class Media Table\n * @class\n * @extends {module:extension/relatedTables~MediaTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   media columns\n * @param {string[]} requiredColumns required column names\n */\nvar IconTable = function(tableName, columns, requiredColumns) {\n  MediaTable.call(this, tableName, columns, requiredColumns);\n};\n\nutil.inherits(IconTable, MediaTable);\n\n/**\n * Create a media table with a minimum required columns followed by the additional columns\n * @return {module:extension/relatedTables~MediaTable}\n */\nIconTable.create = function() {\n  return new IconTable(IconTable.TABLE_NAME, IconTable.createColumns(), IconTable.requiredColumns());\n};\n\nIconTable.createRequiredColumns = function() {\n  return MediaTable.createRequiredColumns();\n};\n\n/**\n * Get the required columns\n * @return {string[]}\n */\nIconTable.requiredColumns = function() {\n  return MediaTable.requiredColumns();\n};\n\n/**\n * Create the columns\n * @return {module:user/userColumn~UserColumn[]}\n */\nIconTable.createColumns = function() {\n  var columns = IconTable.createRequiredColumns();\n  var index = columns.length;\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_HEIGHT, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_ANCHOR_U, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index, IconTable.COLUMN_ANCHOR_V, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  return columns;\n};\n\n/**\n * Get the name column index\n * @return int\n */\nIconTable.prototype.getNameColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_NAME);\n};\n\n/**\n * Get the name column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getNameColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_NAME);\n};\n\n/**\n * Get the description column index\n * @return int\n */\nIconTable.prototype.getDescriptionColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_DESCRIPTION);\n};\n\n/**\n * Get the description column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getDescriptionColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_DESCRIPTION);\n};\n\n/**\n * Get the width column index\n * @return int\n */\nIconTable.prototype.getWidthColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_WIDTH);\n};\n\n/**\n * Get the width column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getWidthColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_WIDTH);\n};\n\n/**\n * Get the height column index\n * @return int\n */\nIconTable.prototype.getHeightColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_HEIGHT);\n};\n\n/**\n * Get the height column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getHeightColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_HEIGHT);\n};\n\n/**\n * Get the anchor_u column index\n * @return int\n */\nIconTable.prototype.getAnchorUColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_ANCHOR_U);\n};\n\n/**\n * Get the anchor_u column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getAnchorUColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_U);\n};\n\n/**\n * Get the anchor_v column index\n * @return int\n */\nIconTable.prototype.getAnchorVColumnIndex = function() {\n  return this.getColumnIndex(IconTable.COLUMN_ANCHOR_V);\n};\n\n/**\n * Get the anchor_v column\n * @return {module:user/userColumn~UserColumn}\n */\nIconTable.prototype.getAnchorVColumn = function() {\n  return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_V);\n};\n\nIconTable.TABLE_NAME = 'nga_icon';\nIconTable.COLUMN_NAME = 'name';\nIconTable.COLUMN_DESCRIPTION = 'description';\nIconTable.COLUMN_WIDTH = 'width';\nIconTable.COLUMN_HEIGHT = 'height';\nIconTable.COLUMN_ANCHOR_U = 'anchor_u';\nIconTable.COLUMN_ANCHOR_V = 'anchor_v';\nIconTable.prototype.TABLE_TYPE = 'media';\n\nmodule.exports = IconTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/custom/userCustomColumn\":101,\"../relatedTables/mediaTable\":35,\"util\":343}],53:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class Icons\n */\n\n/**\n * Icons constructor\n * @constructor\n */\nvar Icons = function() {\n  this.defaultIcon = null;\n  this.icons = {};\n};\n\nIcons.prototype.setDefault = function(iconRow) {\n  this.defaultIcon = iconRow;\n};\n\nIcons.prototype.getDefault = function() {\n  return this.defaultIcon;\n};\n\nIcons.prototype.setIcon = function(iconRow, geometryType) {\n  if (geometryType != null) {\n    if (iconRow != null) {\n      this.icons[geometryType] = iconRow;\n    } else {\n      delete this.icons[geometryType];\n    }\n  } else {\n    this.setDefault(iconRow);\n  }\n};\n\nIcons.prototype.getIcon = function(geometryType) {\n  var iconRow = null;\n  if (geometryType != null) {\n    iconRow = this.icons[geometryType];\n  }\n  if (iconRow === null || geometryType === null) {\n    iconRow = this.getDefault();\n  }\n  return iconRow;\n};\n\nIcons.prototype.isEmpty = function() {\n  return Object.keys(this.icons).length === 0 && this.defaultIcon === null;\n};\n\nmodule.exports = Icons;\n\n},{}],54:[function(require,module,exports){\n/**\n * @module extension/style\n */\n\nvar BaseExtension = require('../baseExtension')\n\t, Extension = require('../.').Extension\n\t, ContentsIdDao = require('../contents/contentsIdDao')\n\t, IconTable = require('./iconTable')\n\t, IconDao = require('./iconDao')\n\t, StyleTable = require('./styleTable')\n\t, StyleDao = require('./styleDao')\n\t, StyleMappingTable = require('./styleMappingTable')\n\t, StyleMappingDao = require('./styleMappingDao')\n\t, UserMappingTable = require('../relatedTables/userMappingTable')\n\t, FeatureStyles = require('./featureStyles')\n\t, FeatureStyle = require('./featureStyle')\n\t, Styles = require('./styles')\n\t, Icons = require('./icons')\n\t, StyleTableReader = require('./styleTableReader')\n\t, UserTableReader = require('../../user/userTableReader');\n\nvar util = require('util');\n\n/**\n * Style extension\n * @param  {module:geoPackage~GeoPackage} geoPackage GeoPackage object\n * @extends {module:extension/baseExtension~BaseExtension}\n * @constructor\n */\nvar FeatureStyleExtension = function(geoPackage) {\n\tBaseExtension.call(this, geoPackage);\n\tthis.relatedTablesExtension = geoPackage.getRelatedTablesExtension();\n\tthis.contentsIdExtension = geoPackage.getContentsIdExtension();\n};\n\nutil.inherits(FeatureStyleExtension, BaseExtension);\n\n/**\n * Get or create the metadata extension\n *  @param {module:features/user/featureTable|String} featureTable, defaults to null\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.getOrCreateExtension = function(featureTable) {\n\treturn this.getOrCreate(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null, FeatureStyleExtension.EXTENSION_DEFINITION, Extension.READ_WRITE);\n};\n\n/**\n * Determine if the GeoPackage has the extension or has the extension for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {Boolean}\n */\nFeatureStyleExtension.prototype.has = function (featureTable) {\n\treturn this.hasExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null);\n};\n\n/**\n * Gets featureTables\n * @returns {String[]}\n */\nFeatureStyleExtension.prototype.getTables = function() {\n\tvar tables = [];\n\tif (this.extensionsDao.isTableExists()) {\n\t\tvar extensions = this.extensionsDao.queryAllByExtension(FeatureStyleExtension.EXTENSION_NAME);\n\t\tfor (var i = 0; i < extensions.length; i++) {\n\t\t\ttables.push(extensions[i].table_name);\n\t\t}\n\t}\n\treturn tables;\n};\n\n/**\n * Get the related tables extension\n * @returns {module:extension/relatedTables~RelatedTablesExtension}\n */\nFeatureStyleExtension.prototype.getRelatedTables = function () {\n\treturn this.relatedTablesExtension;\n};\n\n/**\n * Get the contentsId extension\n * @returns {module:extension/contents~ContentsIdExtension}\n */\nFeatureStyleExtension.prototype.getContentsId = function () {\n\treturn this.contentsIdExtension;\n};\n\n/**\n * Create style, icon, table style, and table icon relationships for the\n * feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createRelationships = function(featureTable) {\n\tvar promises = [];\n\tpromises.push(this.createStyleRelationship(featureTable));\n\tpromises.push(this.createTableStyleRelationship(featureTable));\n\tpromises.push(this.createIconRelationship(featureTable));\n\tpromises.push(this.createTableIconRelationship(featureTable));\n\treturn Promise.all(promises);\n};\n\n/**\n * Check if feature table has a style, icon, table style, or table icon\n * relationships\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {boolean}\n */\nFeatureStyleExtension.prototype.hasRelationship = function(featureTable) {\n\treturn this.hasStyleRelationship(featureTable)\n\t\t|| this.hasTableStyleRelationship(featureTable)\n\t\t|| this.hasIconRelationship(featureTable)\n\t\t|| this.hasTableIconRelationship(featureTable);\n};\n\n/**\n * Create a style relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createStyleRelationship = function(featureTable) {\n\treturn this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME);\n};\n\n/**\n * Determine if a style relationship exists for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {boolean}\n */\nFeatureStyleExtension.prototype.hasStyleRelationship = function(featureTable) {\n\treturn this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME);\n};\n\n/**\n * Create a feature table style relationship\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createTableStyleRelationship = function(featureTable) {\n\treturn this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME);\n};\n\n/**\n * Determine if a feature table style relationship exists\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {boolean} true if relationship exists\n */\nFeatureStyleExtension.prototype.hasTableStyleRelationship = function(featureTable) {\n\treturn this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME);\n};\n\n/**\n * Create an icon relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createIconRelationship = function(featureTable) {\n\treturn this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME);\n};\n\n/**\n * Determine if an icon relationship exists for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {boolean} true if relationship exists\n */\nFeatureStyleExtension.prototype.hasIconRelationship = function(featureTable) {\n\treturn this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME);\n};\n\n/**\n * Create a feature table icon relationship\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.createTableIconRelationship = function(featureTable) {\n\treturn this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME);\n};\n\n/**\n * Determine if a feature table icon relationship exists\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @returns {Boolean} true if relationship exists\n */\nFeatureStyleExtension.prototype.hasTableIconRelationship = function(featureTable) {\n\treturn this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME);\n};\n\n/**\n * Get the mapping table name\n * @param tablePrefix table name prefix\n * @param {module:features/user/featureTable|String} featureTable feature table name\n * @returns {String} mapping table name\n */\nFeatureStyleExtension.prototype.getMappingTableName = function(tablePrefix, featureTable) {\n\treturn tablePrefix + this.getFeatureTableName(featureTable);\n};\n\n/**\n * Check if the style extension relationship between a feature table and\n * style extension table exists\n * @param {String} mappingTableName mapping table name\n * @param {String} baseTable base table name\n * @param {String} relatedTable related table name\n * @returns {boolean} true if relationship exists\n */\nFeatureStyleExtension.prototype._hasStyleRelationship = function(mappingTableName, baseTable, relatedTable) {\n\treturn this.relatedTablesExtension.hasRelations(baseTable, relatedTable, mappingTableName).length !== 0;\n};\n\n/**\n * Create a style extension relationship between a feature table and style\n * extension table\n * @param {String} mappingTableName mapping table name\n * @param {String} featureTable feature table\n * @param {String} baseTable base table name\n * @param {String} relatedTable related table name\n * @return {Promise}\n * @private\n */\nFeatureStyleExtension.prototype._createStyleRelationship = function(mappingTableName, featureTable, baseTable, relatedTable) {\n\tif (!this._hasStyleRelationship(mappingTableName, baseTable, relatedTable)) {\n\t\t// Create the extension\n\t\treturn this.getOrCreateExtension(featureTable).then(function () {\n\t\t\tif (baseTable === ContentsIdDao.TABLE_NAME && !this.contentsIdExtension.has()) {\n\t\t\t\treturn this.contentsIdExtension.getOrCreateExtension().then(function () {\n\t\t\t\t\treturn this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable);\n\t\t\t\t}.bind(this));\n\t\t\t} else {\n\t\t\t\treturn this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable);\n\t\t\t}\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Private function to aid in creation of the a style extension relationship between a feature table and style extension table\n * @param {String} mappingTableName\n * @param {String} baseTable\n * @param {String} relatedTable\n * @return {Promise}\n * @private\n */\nFeatureStyleExtension.prototype._handleCreateStyleRelationship = function(mappingTableName, baseTable, relatedTable) {\n\tif (relatedTable === StyleTable.TABLE_NAME) {\n\t\treturn this.relatedTablesExtension.addAttributesRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder()\n\t\t\t.setBaseTableName(baseTable)\n\t\t\t.setUserMappingTable(StyleMappingTable.create(mappingTableName))\n\t\t\t.setRelatedTable(StyleTable.create()));\n\t} else {\n\t\treturn this.relatedTablesExtension.addMediaRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder()\n\t\t\t.setBaseTableName(baseTable)\n\t\t\t.setUserMappingTable(StyleMappingTable.create(mappingTableName))\n\t\t\t.setRelatedTable(IconTable.create()));\n\t}\n};\n\n/**\n * Delete the style and icon table and row relationships for all feature\n * tables\n */\nFeatureStyleExtension.prototype.deleteAllRelationships = function() {\n\tvar tables = this.getTables();\n\tfor (var i = 0; i < tables.length; i++) {\n\t\tthis.deleteRelationships(tables[i]);\n\t}\n};\n\n/**\n * Delete the style and icon table and row relationships for the feature\n * table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteRelationships = function(featureTable) {\n\tthis.deleteStyleRelationship(featureTable);\n\tthis.deleteTableStyleRelationship(featureTable);\n\tthis.deleteIconRelationship(featureTable);\n\tthis.deleteTableIconRelationship(featureTable);\n};\n\n/**\n * Delete a style relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteStyleRelationship = function(featureTable) {\n\tthis._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), featureTable);\n};\n\n/**\n * Delete a table style relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableStyleRelationship = function(featureTable) {\n\tthis._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), featureTable);\n};\n\n/**\n * Delete a icon relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteIconRelationship = function(featureTable) {\n\tthis._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), featureTable);\n};\n\n/**\n * Delete a table icon relationship for the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableIconRelationship = function(featureTable) {\n\tthis._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), featureTable);\n};\n\n/**\n * Delete a style extension feature table relationship and the mapping table\n * @param {String} mappingTableName\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @private\n */\nFeatureStyleExtension.prototype._deleteStyleRelationship = function(mappingTableName, featureTable) {\n\tvar relationships = this.geoPackage.getExtendedRelationDao().queryByMappingTableName(mappingTableName);\n\tfor (var i = 0; i < relationships.length; i++) {\n\t\tthis.relatedTablesExtension.removeRelationship(relationships[i]);\n\t}\n\tif (!this.hasRelationship(featureTable)) {\n\t\tif (this.extensionsDao.isTableExists()) {\n\t\t\tthis.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable));\n\t\t}\n\t}\n};\n\n/**\n * Get a Style Mapping DAO\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} style mapping DAO\n */\nFeatureStyleExtension.prototype.getStyleMappingDao = function (featureTable) {\n\treturn this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable);\n};\n\n/**\n * Get a Table Style Mapping DAO\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} table style mapping DAO\n */\nFeatureStyleExtension.prototype.getTableStyleMappingDao = function (featureTable) {\n\treturn this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable);\n};\n\n/**\n * Get a Icon Mapping DAO\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} icon mapping DAO\n */\nFeatureStyleExtension.prototype.getIconMappingDao = function (featureTable) {\n\treturn this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable);\n};\n\n/**\n * Get a Table Icon Mapping DAO\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} table icon mapping DAO\n */\nFeatureStyleExtension.prototype.getTableIconMappingDao = function (featureTable) {\n\treturn this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable);\n};\n\n/**\n * Get a Style Mapping DAO from a table name\n * @param {String} tablePrefix table name prefix\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleMappingDao} style mapping dao\n * @private\n */\nFeatureStyleExtension.prototype._getMappingDao = function (tablePrefix, featureTable) {\n\tvar featureTableName = this.getFeatureTableName(featureTable);\n\tvar tableName = tablePrefix + featureTableName;\n\tvar dao = null;\n\tif (this.geoPackage.isTable(tableName)) {\n\t\tdao = new StyleMappingDao(this.relatedTablesExtension.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage);\n\t}\n\treturn dao;\n};\n\n/**\n * Get a style DAO\n * @return {module:extension/style.StyleDao} style DAO\n */\nFeatureStyleExtension.prototype.getStyleDao = function () {\n\tvar styleDao = null;\n\tif (this.geoPackage.isTable(StyleTable.TABLE_NAME)) {\n\t\tvar dao = this.geoPackage.getContentsDao();\n\t\tvar contents = dao.queryForId(StyleTable.TABLE_NAME);\n\t\tif (contents) {\n\t\t\tvar reader = new StyleTableReader(contents.table_name);\n\t\t\tvar table = reader.readTable(this.geoPackage.connection);\n\t\t\tthis.relatedTablesExtension.setContents(table);\n\t\t\tstyleDao = new StyleDao(this.geoPackage, table);\n\t\t}\n\t}\n\treturn styleDao;\n};\n\n/**\n * Get a icon DAO\n * @return {module:extension/style.IconDao}\n */\nFeatureStyleExtension.prototype.getIconDao = function() {\n\tvar iconDao = null;\n\tif (this.geoPackage.isTable(IconTable.TABLE_NAME)) {\n\t\tvar reader = new UserTableReader(IconTable.TABLE_NAME, IconTable.requiredColumns());\n\t\tvar userTable = reader.readTable(this.geoPackage.getDatabase());\n\t\tvar table = new IconTable(userTable.table_name, userTable.columns, IconTable.requiredColumns());\n\t\ttable.setContents(this.geoPackage.getContentsDao().queryForId(IconTable.TABLE_NAME));\n\t\ticonDao = new IconDao(this.geoPackage, table);\n\t}\n\treturn iconDao;\n};\n\n/**\n * Get the feature table default feature styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.FeatureStyles} table feature styles or null\n */\nFeatureStyleExtension.prototype.getTableFeatureStyles = function(featureTable) {\n\tvar featureStyles = null;\n\tvar id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\tif (id !== null) {\n\t\tvar styles = this.getTableStyles(featureTable);\n\t\tvar icons = this.getTableIcons(featureTable);\n\t\tif (styles !== null || icons !== null) {\n\t\t\tfeatureStyles = new FeatureStyles(styles, icons);\n\t\t}\n\t}\n\treturn featureStyles;\n};\n\n/**\n * Get the default style of the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureStyleExtension.prototype.getTableStyleDefault = function(featureTable) {\n\treturn this.getTableStyle(featureTable, null);\n};\n\n/**\n * Get the style of the feature table and geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n * @return {module:extension/style.StyleRow} style row\n */\nFeatureStyleExtension.prototype.getTableStyle = function(featureTable, geometryType) {\n\tvar style = null;\n\tvar styles = this.getTableStyles(featureTable);\n\tif (styles !== null) {\n\t\tif (geometryType === null) {\n\t\t\tstyle = styles.getDefault();\n\t\t} else {\n\t\t\tstyle = styles.getStyle(geometryType);\n\t\t}\n\t}\n\treturn style;\n};\n\n/**\n * Get the feature table default styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.Styles} table styles or null\n */\nFeatureStyleExtension.prototype.getTableStyles = function(featureTable) {\n\tvar styles = null;\n\tvar id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\tif (id !== null) {\n\t\tstyles = this.getStyles(id, this.getTableStyleMappingDao(featureTable));\n\t}\n\treturn styles;\n};\n\n/**\n * Get the default icon of the feature table\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureStyleExtension.prototype.getTableIconDefault = function(featureTable) {\n\treturn this.getTableIcon(featureTable, null);\n};\n\n/**\n * Get the icon of the feature table and geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n * @return {module:extension/style.IconRow} icon row\n */\nFeatureStyleExtension.prototype.getTableIcon = function(featureTable, geometryType) {\n\tvar icon = null;\n\tvar icons = this.getTableIcons(featureTable);\n\tif (icons !== null) {\n\t\tif (geometryType === null) {\n\t\t\ticon = icons.getDefault();\n\t\t} else {\n\t\t\ticon = icons.getIcon(geometryType);\n\t\t}\n\t}\n\treturn icon;\n};\n\n/**\n * Get the feature table default icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {module:extension/style.Icons} table icons or null\n */\nFeatureStyleExtension.prototype.getTableIcons = function(featureTable) {\n\tvar icons = null;\n\tvar id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\tif (id !== null) {\n\t\ticons = this.getIcons(id, this.getTableIconMappingDao(featureTable));\n\t}\n\treturn icons;\n};\n\n/**\n * Gets Icons for featureId and mappingDao\n * @param {Number} featureId\n * @param mappingDao\n * @returns {module:extension/style.Icons}\n * @private\n */\nFeatureStyleExtension.prototype.getIcons = function(featureId, mappingDao) {\n\tvar icons = new Icons();\n\tif (mappingDao !== null) {\n\t\tvar iconDao = this.getIconDao();\n\t\tvar styleMappingRows = mappingDao.queryByBaseId(featureId);\n\t\tfor (var i = 0; i < styleMappingRows.length; i++) {\n\t\t\tvar styleMappingRow = mappingDao.createObject(styleMappingRows[i]);\n\t\t\tvar iconRow = iconDao.queryForId(styleMappingRow.getRelatedId());\n\t\t\tif (styleMappingRow.getGeometryTypeName() === null) {\n\t\t\t\ticons.setDefault(iconRow);\n\t\t\t} else {\n\t\t\t\ticons.setIcon(iconRow, styleMappingRow.getGeometryTypeName());\n\t\t\t}\n\t\t}\n\t}\n\tif (icons.isEmpty()) {\n\t\ticons = null;\n\t}\n\treturn icons;\n};\n\n/**\n * Gets Styles for featureId and mappingDao\n * @param {Number} featureId\n * @param {module:extension/style.StyleMappingDao} mappingDao\n * @returns {module:extension/style.Styles}\n */\nFeatureStyleExtension.prototype.getStyles = function(featureId, mappingDao) {\n\tvar styles = new Styles();\n\tif (mappingDao !== null) {\n\t\tvar styleDao = this.getStyleDao();\n\t\tvar styleMappingRows = mappingDao.queryByBaseId(featureId);\n\t\tfor (var i = 0; i < styleMappingRows.length; i++) {\n\t\t\tvar styleMappingRow = mappingDao.createObject(styleMappingRows[i]);\n\t\t\tvar styleRow = styleDao.queryForId(styleMappingRow.getRelatedId());\n\t\t\tif (styleMappingRow.getGeometryTypeName() === null) {\n\t\t\t\tstyles.setDefault(styleRow);\n\t\t\t} else {\n\t\t\t\tstyles.setStyle(styleRow, styleMappingRow.getGeometryTypeName());\n\t\t\t}\n\t\t}\n\t}\n\tif (styles.isEmpty()) {\n\t\tstyles = null;\n\t}\n\treturn styles;\n};\n\n/**\n * Get the feature styles for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyles} feature styles or null\n */\nFeatureStyleExtension.prototype.getFeatureStylesForFeatureRow = function(featureRow) {\n\treturn this.getFeatureStyles(featureRow.featureTable, featureRow.getId());\n};\n/**\n * Get the feature styles for the feature row\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @return {module:extension/style.FeatureStyles} feature styles or null\n */\nFeatureStyleExtension.prototype.getFeatureStyles = function(featureTable, featureId) {\n\tvar styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable));\n\tvar icons = this.getIcons(featureId, this.getIconMappingDao(featureTable));\n\tvar featureStyles = null;\n\tif (styles !== null || icons !== null) {\n\t\tfeatureStyles = new FeatureStyles(styles, icons);\n\t}\n\treturn featureStyles;\n};\n\n/**\n * Get the styles for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.Styles} styles or null\n */\nFeatureStyleExtension.prototype.getStylesForFeatureRow = function(featureRow) {\n\treturn this.getStyles(featureRow.getId(), this.getStyleMappingDao(featureRow.featureTable.table_name));\n};\n/**\n * Get the styles for the feature id\n * @param {String} tableName table name\n * @param {Number} featureId feature id\n * @return {module:extension/style.Styles} styles or null\n */\nFeatureStyleExtension.prototype.getStylesForFeatureId = function(tableName, featureId) {\n\treturn this.getStyles(featureId, this.getStyleMappingDao(tableName));\n};\n\n/**\n * Get the icons for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.Icons} icons or null\n */\nFeatureStyleExtension.prototype.getIconsForFeatureRow = function(featureRow) {\n\treturn this.getIcons(featureRow.getId(), this.getIconMappingDao(featureRow.featureTable.table_name));\n};\n\n/**\n * Get the icons for the feature id\n * @param {String} tableName table name\n * @param {Number} featureId feature id\n * @return {module:extension/style.Icons} icons or null\n */\nFeatureStyleExtension.prototype.getIconsForFeatureId = function(tableName, featureId) {\n\treturn this.getIcons(featureId, this.getIconMappingDao(tableName));\n};\n\n/**\n * Get the feature style (style and icon) of the feature row, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureStyleExtension.prototype.getFeatureStyleForFeatureRow = function(featureRow) {\n\treturn new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true));\n};\n\n/**\n * Get the feature style (style and icon) of the feature, searching in\n * order: feature geometry type style or icon, feature default style or\n * icon, table geometry type style or icon, table default style or icon\n * @param {module:features/user/featureRow} featureRow feature row\n * @return {module:extension/style.FeatureStyle} feature style\n */\nFeatureStyleExtension.prototype.getFeatureStyleDefault = function(featureRow) {\n\treturn new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), null, true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), null, true));\n};\n\n/**\n * Get the icon of the feature, searching in order: feature geometry type\n * icon, feature default icon, when tableIcon enabled continue searching:\n * table geometry type icon, table default icon\n * @param {module:features/user/featureTable|String} featureTable\n * @param {Number} featureId\n * @param {String} geometryType\n * @param {Boolean} tableIcon\n * @returns {module:extension/style.IconRow}\n * @private\n */\nFeatureStyleExtension.prototype.getIcon = function(featureTable, featureId, geometryType, tableIcon) {\n\tvar iconRow = null;\n\tvar icons = this.getIcons(featureId, this.getIconMappingDao(featureTable));\n\tif (icons !== null) {\n\t\ticonRow = icons.getIcon(geometryType);\n\t}\n\tif (iconRow === null && tableIcon) {\n\t\ticonRow = this.getTableIcon(featureTable, geometryType);\n\t}\n\treturn iconRow;\n};\n\n/**\n * Get the style of the feature, searching in order: feature geometry type\n * style, feature default style, when tableStyle enabled continue searching:\n * table geometry type style, table default style\n * @param {module:features/user/featureTable|String} featureTable\n * @param {Number} featureId\n * @param {String} geometryType\n * @param {Boolean} tableStyle\n * @returns {module:extension/style.StyleRow}\n * @private\n */\nFeatureStyleExtension.prototype.getStyle = function(featureTable, featureId, geometryType, tableStyle) {\n\tvar styleRow = null;\n\tvar styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable));\n\tif (styles !== null) {\n\t\tstyleRow = styles.getStyle(geometryType);\n\t}\n\tif (styleRow === null && tableStyle) {\n\t\tstyleRow = this.getTableStyle(featureTable, geometryType);\n\t}\n\treturn styleRow;\n};\n\n/**\n * Set the feature table default feature styles\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableFeatureStyles = function(featureTable, featureStyles) {\n\tif (featureStyles !== null) {\n\t\tvar promises = [];\n\t\tpromises.push(this.setTableStyles(featureTable, featureStyles.getStyles()));\n\t\tpromises.push(this.setTableIcons(featureTable, featureStyles.getIcons()));\n\t\treturn Promise.all(promises);\n\t} else {\n\t\tthis.deleteTableFeatureStyles(featureTable);\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature table default styles\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.Styles} styles default styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableStyles = function(featureTable, styles) {\n\t// var tableName = featureTable.table_name ? featureTable.table_name : featureTable;\n\tthis.deleteTableStyles(featureTable);\n\tif (styles !== null) {\n\t\tvar promises = [];\n\t\tif (styles.getDefault() !== null) {\n\t\t\tpromises.push(this.setTableStyleDefault(featureTable, styles.getDefault()));\n\t\t}\n\t\tvar keys = Object.keys(styles.styles);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tvar value = styles.styles[key];\n\t\t\tpromises.push(this.setTableStyle(featureTable, key, value));\n\t\t}\n\t\treturn Promise.all(promises);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature table style default\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableStyleDefault = function(featureTable, style) {\n\treturn this.setTableStyle(featureTable, null, style);\n};\n\n/**\n * Set the feature table style for the geometry type\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableStyle = function(featureTable, geometryType, style) {\n\tthis.deleteTableStyle(featureTable, geometryType);\n\tif (style !== null) {\n\t\treturn this.createTableStyleRelationship(featureTable).then(function () {\n\t\t\tvar featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable));\n\t\t\tvar styleId = this.getOrInsertStyle(style);\n\t\t\tvar mappingDao = this.getTableStyleMappingDao(featureTable);\n\t\t\tthis.insertStyleMapping(mappingDao, featureContentsId.id, styleId, geometryType);\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature table default icons\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.Icons} icons default icons\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableIcons = function(featureTable, icons) {\n\tthis.deleteTableIcons(featureTable);\n\tif (icons !== null) {\n\t\tvar promises = [];\n\t\tif (icons.getDefault() !== null) {\n\t\t\tpromises.push(this.setTableIconDefault(featureTable, icons.getDefault()));\n\t\t}\n\t\tvar keys = Object.keys(icons.icons);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tvar value = icons.icons[key];\n\t\t\tpromises.push(this.setTableIcon(featureTable, key, value));\n\t\t}\n\t\treturn Promise.all(promises);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n/**\n * Set the feature table icon default\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableIconDefault = function(featureTable, icon) {\n\treturn this.setTableIcon(featureTable, null, icon);\n};\n\n/**\n * Set the feature table icon for the geometry type\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setTableIcon = function(featureTable, geometryType, icon) {\n\tthis.deleteTableIcon(featureTable, geometryType);\n\tif (icon !== null) {\n\t\treturn this.createTableIconRelationship(featureTable).then(function () {\n\t\t\tvar featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable));\n\t\t\tvar iconId = this.getOrInsertIcon(icon);\n\t\t\tvar mappingDao = this.getTableIconMappingDao(featureTable);\n\t\t\tthis.insertStyleMapping(mappingDao, featureContentsId.id, iconId, geometryType);\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature styles for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) {\n\treturn this.setFeatureStyles(featureRow.featureTable.table_name, featureRow.getId(), featureStyles);\n};\n\n/**\n * Set the feature styles for the feature table and feature id\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.FeatureStyles} featureStyles feature styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyles = function(featureTable, featureId, featureStyles) {\n\tif (featureStyles !== null) {\n\t\tvar promises = [];\n\t\tpromises.push(this.setStyles(featureTable, featureId, featureStyles.getStyles()));\n\t\tpromises.push(this.setIcons(featureTable, featureId, featureStyles.getIcons()));\n\t\treturn Promise.all(promises);\n\t} else {\n\t\tthis.deleteStyles(featureTable, featureId);\n\t\tthis.deleteIcons(featureTable, featureId);\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature style (style and icon) of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) {\n\treturn this.setFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature row for the\n * specified geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) {\n\treturn this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, featureStyle);\n};\n\n/**\n * Set the feature style default (style and icon) of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) {\n\treturn this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), null, featureStyle);\n};\n\n/**\n * Set the feature style (style and icon) of the feature\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyle = async function(featureTable, featureId, geometryType, featureStyle) {\n\tif (featureStyle !== null) {\n\t\tvar promises = [];\n\t\tpromises.push(this.setStyle(featureTable, featureId, geometryType, featureStyle.getStyle()));\n\t\tpromises.push(this.setIcon(featureTable, featureId, geometryType, featureStyle.getIcon()));\n\t\treturn Promise.all(promises);\n\t} else {\n\t\tthis.deleteStyle(featureTable, featureId, geometryType);\n\t\tthis.deleteIcon(featureTable, featureId, geometryType);\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the feature style (style and icon) of the feature\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.FeatureStyle} featureStyle feature style\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setFeatureStyleDefault = function(featureTable, featureId, featureStyle) {\n\treturn this.setFeatureStyle(featureTable, featureId, null, featureStyle);\n};\n\n/**\n * Set the styles for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.Styles} styles styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStylesForFeatureRow = function(featureRow, styles) {\n\treturn this.setStyles(featureRow.featureTable.table_name, featureRow.getId(), styles);\n};\n\n/**\n * Set the styles for the feature table and feature id\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.Styles} styles styles\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyles = function(featureTable, featureId, styles) {\n\tthis.deleteStylesForFeatureId(featureTable, featureId);\n\tif (styles !== null) {\n\t\tvar promises = [];\n\t\tif (styles.getDefault() !== null) {\n\t\t\tpromises.push(this.setStyleDefault(featureTable, featureId, styles.getDefault()));\n\t\t}\n\t\tvar keys = Object.keys(styles.styles);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tpromises.push(this.setStyle(featureTable, featureId, keys[i], styles.styles[keys[i]]));\n\t\t}\n\t\treturn Promise.all(promises);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the style of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyleForFeatureRow = function(featureRow, style) {\n\treturn this.setStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), style);\n};\n\n/**\n * Set the style of the feature row for the specified geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) {\n\treturn this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, style);\n};\n\n/**\n * Set the default style of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) {\n\treturn this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), null, style);\n};\n\n/**\n * Set the style of the feature\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyle = function(featureTable, featureId, geometryType, style) {\n\tthis.deleteStyle(featureTable, featureId, geometryType);\n\tif (style !== null) {\n\t\treturn this.createStyleRelationship(featureTable).then(function () {\n\t\t\tvar styleId = this.getOrInsertStyle(style);\n\t\t\tvar mappingDao = this.getStyleMappingDao(featureTable);\n\t\t\tthis.insertStyleMapping(mappingDao, featureId, styleId, geometryType);\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the default style of the feature\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.StyleRow} style style row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setStyleDefault = function(featureTable, featureId, style) {\n\treturn this.setStyle(featureTable, featureId, null, style);\n};\n\n/**\n * Set the icons for the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.Icons} icons icons\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconsForFeatureRow = function(featureRow, icons) {\n\treturn this.setIcons(featureRow.featureTable.table_name, featureRow.getId(), icons);\n};\n\n/**\n * Set the icons for the feature table and feature id\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.Icons} icons icons\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIcons = function(featureTable, featureId, icons) {\n\tthis.deleteIconsForFeatureId(featureTable, featureId);\n\tif (icons !== null) {\n\t\tvar promises = [];\n\t\tif (icons.getDefault() !== null) {\n\t\t\tpromises.push(this.setIconDefault(featureTable, featureId, icons.getDefault()));\n\t\t}\n\t\tvar keys = Object.keys(icons.icons);\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tpromises.push(this.setIcon(featureTable, featureId, keys[i], icons.icons[keys[i]]));\n\t\t}\n\t\treturn Promise.all(promises);\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the icon of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconForFeatureRow = function(featureRow, icon) {\n\treturn this.setIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), icon);\n};\n\n/**\n * Set the icon of the feature row for the specified geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) {\n\treturn this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), geometryType, icon);\n};\n\n/**\n * Set the default icon of the feature row\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) {\n\treturn this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), null, icon);\n};\n\n/**\n * Get the icon of the feature, searching in order: feature geometry type\n * icon, feature default icon, table geometry type icon, table default icon\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIcon = function(featureTable, featureId, geometryType, icon) {\n\tthis.deleteIcon(featureTable, featureId, geometryType);\n\tif (icon !== null) {\n\t\treturn this.createIconRelationship(featureTable).then(function () {\n\t\t\tvar iconId = this.getOrInsertIcon(icon);\n\t\t\tvar mappingDao = this.getIconMappingDao(featureTable);\n\t\t\tthis.insertStyleMapping(mappingDao, featureId, iconId, geometryType);\n\t\t}.bind(this));\n\t} else {\n\t\treturn Promise.resolve();\n\t}\n};\n\n/**\n * Set the default icon of the feature\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Promise}\n */\nFeatureStyleExtension.prototype.setIconDefault = function(featureTable, featureId, icon) {\n\treturn this.setIcon(featureTable, featureId, null, icon);\n};\n\n/**\n * Get the style id, either from the existing style or by inserting a new one\n * @param {module:extension/style.StyleRow} style style row\n * @return {Number} style id\n */\nFeatureStyleExtension.prototype.getOrInsertStyle = function(style) {\n\tvar styleId;\n\tif (style.hasId()) {\n\t\tstyleId = style.getId();\n\t} else {\n\t\tvar styleDao = this.getStyleDao();\n\t\tif (styleDao !== null) {\n\t\t\tstyleId = styleDao.create(style);\n\t\t\tstyle.setId(styleId);\n\t\t}\n\t}\n\treturn styleId;\n};\n\n/**\n * Get the icon id, either from the existing icon or by inserting a new one\n * @param {module:extension/style.IconRow} icon icon row\n * @return {Number} icon id\n */\nFeatureStyleExtension.prototype.getOrInsertIcon = function(icon) {\n\tvar iconId;\n\tif (icon.hasId()) {\n\t\ticonId = icon.getId();\n\t} else {\n\t\tvar iconDao = this.getIconDao();\n\t\tif (iconDao != null) {\n\t\t\ticonId = iconDao.create(icon);\n\t\t\ticon.setId(iconId);\n\t\t}\n\t}\n\treturn iconId;\n};\n\n/**\n * Insert a style mapping row\n * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao\n * @param {Number} baseId base id, either contents id or feature id\n * @param {Number} relatedId related id, either style or icon id\n * @param {String} geometryType geometry type or null\n */\nFeatureStyleExtension.prototype.insertStyleMapping = function(mappingDao, baseId, relatedId, geometryType) {\n\tvar row = mappingDao.newRow();\n\trow.setBaseId(baseId);\n\trow.setRelatedId(relatedId);\n\trow.setGeometryTypeName(geometryType);\n\tmappingDao.create(row);\n};\n\n/**\n * Delete all feature styles including table styles, table icons, style, and icons\n * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteAllFeatureStyles = function(featureTable) {\n\tthis.deleteTableFeatureStyles(featureTable);\n\tthis.deleteFeatureStyles(featureTable);\n};\n\n/**\n * Delete all styles including table styles and feature row style\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteAllStyles = function(featureTable) {\n\tthis.deleteTableStyles(featureTable);\n\tthis.deleteStyles(featureTable);\n};\n\n/**\n * Delete all icons including table icons and feature row icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteAllIcons = function(featureTable) {\n\tthis.deleteTableIcons(featureTable);\n\tthis.deleteIcons(featureTable);\n};\n\n/**\n * Delete the feature table feature styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableFeatureStyles = function(featureTable) {\n\tthis.deleteTableStyles(featureTable);\n\tthis.deleteTableIcons(featureTable);\n};\n\n/**\n * Delete the feature table styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableStyles = function(featureTable) {\n\tthis.deleteTableMappings(this.getTableStyleMappingDao(featureTable), featureTable);\n};\n\n/**\n * Delete the feature table default style\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableStyleDefault = function(featureTable) {\n\tthis.deleteTableStyle(featureTable, null);\n};\n\n/**\n * Delete the feature table style for the geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteTableStyle = function(featureTable, geometryType) {\n\tthis.deleteTableMapping(this.getTableStyleMappingDao(featureTable), featureTable, geometryType);\n};\n\n/**\n * Delete the feature table icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableIcons = function(featureTable) {\n\tthis.deleteTableMappings(this.getTableIconMappingDao(featureTable), featureTable);\n};\n\n/**\n * Delete the feature table default icon\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableIconDefault = function(featureTable) {\n\tthis.deleteTableIcon(featureTable, null);\n};\n\n/**\n * Delete the feature table icon for the geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteTableIcon = function(featureTable, geometryType) {\n\tthis.deleteTableMapping(this.getTableIconMappingDao(featureTable), featureTable, geometryType);\n};\n\n/**\n * Delete the table style mappings\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteTableMappings = function(mappingDao, featureTable) {\n\tif (mappingDao !== null) {\n\t\tvar featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\t\tif (featureContentsId !== null) {\n\t\t\tmappingDao.deleteByBaseId(featureContentsId);\n\t\t}\n\t}\n};\n\n/**\n * Delete the table style mapping with the geometry type value\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteTableMapping = function(mappingDao, featureTable, geometryType) {\n\tif (mappingDao !== null) {\n\t\tvar featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable));\n\t\tif (featureContentsId !== null) {\n\t\t\tmappingDao.deleteByBaseIdAndGeometryType(featureContentsId, geometryType);\n\t\t}\n\t}\n};\n\n/**\n * Delete all feature styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteFeatureStyles = function(featureTable) {\n\tthis.deleteStyles(featureTable);\n\tthis.deleteIcons(featureTable);\n};\n\n/**\n * Delete all styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteStyles = function(featureTable) {\n\tthis.deleteMappings(this.getStyleMappingDao(featureTable));\n};\n\n/**\n * Delete feature row styles\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteStylesForFeatureRow = function(featureRow) {\n\tthis.deleteStylesForFeatureId(featureRow.featureTable.table_name, featureRow.getId());\n};\n\n/**\n * Delete feature row styles\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteStylesForFeatureId = function(featureTable, featureId) {\n\tthis.deleteMappingsForFeatureId(this.getStyleMappingDao(featureTable), featureId);\n};\n\n/**\n * Delete the feature row default style\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) {\n\tthis.deleteStyleForFeatureRowAndGeometryType(featureRow, null);\n};\n\n/**\n * Delete the feature row default style\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteStyleDefault = function(featureTable, featureId) {\n\tthis.deleteStyle(featureTable, featureId, null);\n};\n\n/**\n * Delete the feature row style for the feature row geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteStyleForFeatureRow = function(featureRow) {\n\tthis.deleteStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Delete the feature row style for the geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\tthis.deleteStyle(featureRow.featureTable, featureRow.getId(), geometryType);\n};\n\n/**\n * Delete the feature row style for the geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteStyle = function(featureTable, featureId, geometryType) {\n\tthis.deleteMapping(this.getStyleMappingDao(featureTable), featureId, geometryType);\n};\n\n/**\n * Delete all icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n */\nFeatureStyleExtension.prototype.deleteIcons = function(featureTable) {\n\tthis.deleteMappings(this.getIconMappingDao(featureTable));\n};\n\n/**\n * Delete feature row icons\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteIconsForFeatureRow = function(featureRow) {\n\tthis.deleteIconsForFeatureId(featureRow.featureTable.table_name, featureRow.getId());\n};\n\n/**\n * Delete feature row icons\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteIconsForFeatureId = function(featureTable, featureId) {\n\tthis.deleteMappingsForFeatureId(this.getIconMappingDao(featureTable), featureId);\n};\n\n/**\n * Delete the feature row default icon\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteIconDefaultForFeatureRow = function(featureRow) {\n\tthis.deleteIconDefault(featureRow.featureTable.table_name, featureRow.getId());\n};\n\n/**\n * Delete the feature row default icon\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteIconDefault = function(featureTable, featureId) {\n\tthis.deleteIcon(featureTable, featureId, null);\n};\n\n/**\n * Delete the feature row icon for the feature row geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n */\nFeatureStyleExtension.prototype.deleteIconForFeatureRow = function(featureRow) {\n\tthis.deleteIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType());\n};\n\n/**\n * Delete the feature row icon for the geometry type\n * @param {module:features/user/featureRow} featureRow feature row\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) {\n\tthis.deleteIcon(featureRow.featureTable, featureRow.getId(), geometryType);\n};\n\n/**\n * Delete the feature row icon for the geometry type\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteIcon = function(featureTable, featureId, geometryType) {\n\tthis.deleteMapping(this.getIconMappingDao(featureTable), featureId, geometryType);\n};\n\n/**\n * Delete all style mappings\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n */\nFeatureStyleExtension.prototype.deleteMappings = function(mappingDao) {\n\tif (mappingDao !== null) {\n\t\tmappingDao.deleteAll();\n\t}\n};\n\n/**\n * Delete the style mappings\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n * @param {Number} featureId feature id\n */\nFeatureStyleExtension.prototype.deleteMappingsForFeatureId = function(mappingDao, featureId) {\n\tif (mappingDao !== null) {\n\t\tmappingDao.deleteByBaseId(featureId);\n\t}\n};\n\n/**\n * Delete the style mapping with the geometry type value\n * @param {module:extension/style.StyleMappingDao} mappingDao  mapping dao\n * @param {Number} featureId feature id\n * @param {String} geometryType geometry type\n */\nFeatureStyleExtension.prototype.deleteMapping = function(mappingDao, featureId, geometryType) {\n\tif (mappingDao !== null) {\n\t\tmappingDao.deleteByBaseIdAndGeometryType(featureId, geometryType);\n\t}\n};\n\n/**\n * Get all the unique style row ids the table maps to\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return style row ids\n */\nFeatureStyleExtension.prototype.getAllTableStyleIds = function(featureTable) {\n\tvar styleIds = null;\n\tvar mappingDao = this.getTableStyleMappingDao(featureTable);\n\tif (mappingDao !== null) {\n\t\tstyleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);\n\t}\n\treturn styleIds;\n};\n\n/**\n * Get all the unique icon row ids the table maps to\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return icon row ids\n */\nFeatureStyleExtension.prototype.getAllTableIconIds = function(featureTable) {\n\tvar styleIds = null;\n\tvar mappingDao = this.getTableIconMappingDao(featureTable);\n\tif (mappingDao !== null) {\n\t\tstyleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);\n\t}\n\treturn styleIds;\n};\n\n/**\n * Get all the unique style row ids the features map to\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Number[]} style row ids\n */\nFeatureStyleExtension.prototype.getAllStyleIds = function(featureTable) {\n\tvar styleIds = null;\n\tvar mappingDao = this.getStyleMappingDao(featureTable);\n\tif (mappingDao !== null) {\n\t\tstyleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);\n\t}\n\treturn styleIds;\n};\n\n/**\n * Get all the unique icon row ids the features map to\n * @param {module:features/user/featureTable|String} featureTable feature table\n * @return {Number[]} icon row ids\n */\nFeatureStyleExtension.prototype.getAllIconIds = function(featureTable) {\n\tvar styleIds = null;\n\tvar mappingDao = this.getIconMappingDao(featureTable);\n\tif (mappingDao !== null) {\n\t\tstyleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']);\n\t}\n\treturn styleIds;\n};\n\n/**\n * Get name of feature table\n * @param featureTable\n * @returns {String}\n */\nFeatureStyleExtension.prototype.getFeatureTableName = function(featureTable) {\n\treturn featureTable.table_name ? featureTable.table_name : featureTable;\n};\n\n/**\n * Remove all traces of the extension\n */\nFeatureStyleExtension.prototype.removeExtension = function() {\n\tthis.deleteAllRelationships();\n\tthis.geoPackage.deleteTable(StyleTable.TABLE_NAME);\n\tthis.geoPackage.deleteTable(IconTable.TABLE_NAME);\n\tif (this.extensionsDao.isTableExists()) {\n\t\tthis.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME);\n\t}\n};\n\nFeatureStyleExtension.EXTENSION_NAME = 'nga_feature_style';\nFeatureStyleExtension.EXTENSION_AUTHOR = 'nga';\nFeatureStyleExtension.EXTENSION_NAME_NO_AUTHOR = 'feature_style';\nFeatureStyleExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/feature-style.html';\nFeatureStyleExtension.TABLE_MAPPING_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + \"_style_\";\nFeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + \"_style_default_\";\nFeatureStyleExtension.TABLE_MAPPING_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + \"_icon_\";\nFeatureStyleExtension.TABLE_MAPPING_TABLE_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + \"_icon_default_\";\n\nmodule.exports = FeatureStyleExtension;\n\n},{\"../.\":25,\"../../user/userTableReader\":109,\"../baseExtension\":20,\"../contents/contentsIdDao\":22,\"../relatedTables/userMappingTable\":42,\"./featureStyle\":46,\"./featureStyles\":47,\"./iconDao\":50,\"./iconTable\":52,\"./icons\":53,\"./styleDao\":55,\"./styleMappingDao\":56,\"./styleMappingTable\":58,\"./styleTable\":60,\"./styleTableReader\":61,\"./styles\":62,\"util\":343}],55:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleDao\n */\n\nvar StyleRow = require('./styleRow')\n  , StyleTable = require('./styleTable')\n  , AttributesDao = require('../../attributes/attributeDao');\n\nvar util = require('util');\n\n/**\n * Style DAO for reading style tables\n * @extends {module:attributes/attributeDao~AttributesDao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection\n * @param  {string} table table name\n * @constructor\n */\nvar StyleDao = function(geoPackage, table) {\n  AttributesDao.call(this, geoPackage, table);\n  this.table = table;\n};\n\nutil.inherits(StyleDao, AttributesDao);\n\n/**\n * Creates a StyleRow object from the results\n * @param results\n * @returns {module:extension/style.StyleRow}\n */\nStyleDao.prototype.createObject = function (results) {\n  if (results) {\n    return this.getRow(results);\n  }\n  return this.newRow();\n};\n\n/**\n * Create a new style row\n * @return {module:extension/style.StyleRow}\n */\nStyleDao.prototype.newRow = function() {\n  return new StyleRow(this.table);\n};\n\n/**\n * Create a style row with the column types and values\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:extension/style.StyleRow}             icon row\n */\nStyleDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new StyleRow(this.table, columnTypes, values);\n};\n\nmodule.exports = StyleDao;\n\n},{\"../../attributes/attributeDao\":3,\"./styleRow\":59,\"./styleTable\":60,\"util\":343}],56:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleMappingDao\n */\n\nvar StyleMappingRow = require('./styleMappingRow')\n  , StyleMappingTable = require('./styleMappingTable')\n  , UserMappingTable = require('../relatedTables/userMappingTable')\n  , UserMappingDao = require('../relatedTables/userMappingDao');\n\nvar util = require('util');\n\n/**\n * Style Mapping DAO for reading user mapping data tables\n * @extends {module:extension/relatedTables~UserMappingDao}\n * @param  {module:user/custom~UserCustomDao} userCustomDao\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @constructor\n */\nvar StyleMappingDao = function(userCustomDao, geoPackage) {\n  UserMappingDao.call(this, userCustomDao, geoPackage);\n};\n\nutil.inherits(StyleMappingDao, UserMappingDao);\n\n/**\n * Create a new {module:user/custom~UserCustomTable}\n * @param  {module:user/custom~UserCustomDao} userCustomDao\n * @return {module:user/custom~UserCustomTable} userCustomTable user custom table\n */\nStyleMappingDao.prototype.createMappingTable = function(userCustomDao) {\n  return new StyleMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns);\n};\n\n/**\n * Create a new {module:extension/style.StyleMappingRow}\n * @return {module:extension/style.StyleMappingRow}\n */\nStyleMappingDao.prototype.newRow = function() {\n  return new StyleMappingRow(this.table);\n};\n\n/**\n * Create a user mapping row\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values values\n * @return {module:extension/style.StyleMappingRow} style mapping row\n */\nStyleMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new StyleMappingRow(this.table, columnTypes, values);\n};\n\n/**\n * Delete by base id and geometry type\n * @param  {Number} baseId base id\n * @param  {String} geometryType geometry type\n * @return {Number} number of deleted rows\n */\nStyleMappingDao.prototype.deleteByBaseIdAndGeometryType = function(baseId, geometryType) {\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId);\n  where += ' AND ';\n  where += this.buildWhereWithFieldAndValue(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, geometryType);\n  var whereArgs = this.buildWhereArgs([baseId, geometryType]);\n  return this.deleteWhere(where, whereArgs);\n};\n\nmodule.exports = StyleMappingDao;\n\n},{\"../relatedTables/userMappingDao\":40,\"../relatedTables/userMappingTable\":42,\"./styleMappingRow\":57,\"./styleMappingTable\":58,\"util\":343}],57:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleMappingRow\n */\n\nvar UserMappingRow = require('../relatedTables/userMappingRow');\n\nvar util = require('util');\n\n/**\n * User Mapping Row containing the values from a single result set row\n * @extends {module:extension/relatedTables~UserMappingRow}\n * @param  {module:extension/style.StyleMappingTable} styleMappingTable style mapping table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @constructor\n */\nvar StyleMappingRow = function(styleMappingTable, columnTypes, values) {\n  UserMappingRow.call(this, styleMappingTable, columnTypes, values);\n  this.styleMappingTable = styleMappingTable;\n};\n\nutil.inherits(StyleMappingRow, UserMappingRow);\n\n/**\n * Get the geometry type name column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleMappingRow.prototype.getGeometryTypeNameColumn = function() {\n  return this.styleMappingTable.getGeometryTypeNameColumn();\n};\n\n/**\n * Gets the geometry type name\n * @return {string}\n */\nStyleMappingRow.prototype.getGeometryTypeName = function() {\n  return this.getValueWithColumnName(this.getGeometryTypeNameColumn().name);\n};\n\n/**\n * Sets the geometry type name\n * @param  {string} geometryTypeName geometry type name\n */\nStyleMappingRow.prototype.setGeometryTypeName = function(geometryTypeName) {\n  this.setValueWithColumnName(this.getGeometryTypeNameColumn().name, geometryTypeName);\n};\n\nmodule.exports = StyleMappingRow;\n\n},{\"../relatedTables/userMappingRow\":41,\"util\":343}],58:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleMappingTable\n */\n\nvar UserMappingTable = require('../relatedTables/userMappingTable')\n  , UserCustomColumn = require('../../user/custom/userCustomColumn')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Contains style mapping table factory and utility methods\n * @extends {module:extension/relatedTables~UserMappingTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   style mapping columns\n * @constructor\n */\nvar StyleMappingTable = function(tableName, columns) {\n  UserMappingTable.call(this, tableName, columns);\n};\n\nutil.inherits(StyleMappingTable, UserMappingTable);\n\n/**\n * Creates a user mapping table with the minimum required columns followed by the additional columns\n * @param  {string} tableName name of the table\n * @return {module:extension/relatedTables~UserMappingTable}\n */\nStyleMappingTable.create = function(tableName) {\n  return new StyleMappingTable(tableName, StyleMappingTable.createColumns());\n};\n\n/**\n * Create the columns\n * @return {module:user/userColumn~UserColumn[]}\n */\nStyleMappingTable.createColumns = function() {\n  var columns = UserMappingTable.createRequiredColumns();\n  var index = columns.length;\n  columns.push(UserCustomColumn.createColumn(index, StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined))\n  return columns;\n};\n\n/**\n * Get the geometry type name column index\n * @return int\n */\nStyleMappingTable.prototype.getGeometryTypeNameColumnIndex = function() {\n  return this.getColumnIndex(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME);\n};\n\n/**\n * Get the geometry type name column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleMappingTable.prototype.getGeometryTypeNameColumn = function() {\n  return this.getColumnWithColumnName(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME);\n};\n\nStyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME = 'geometry_type_name';\n\nmodule.exports = StyleMappingTable;\n\n},{\"../../db/dataTypes\":14,\"../../user/custom/userCustomColumn\":101,\"../relatedTables/userMappingTable\":42,\"util\":343}],59:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleRow\n */\n\nvar AttributesRow = require('../../attributes/attributeRow');\n\nvar util = require('util');\n\n/**\n * Color hex pattern\n */\nvar colorPattern = /^#([0-9a-fA-F]{3}){1,2}$/;\n\n/**\n * Style Row\n * @extends {module:attributes/attributeRow~AttributesRow}\n * @param  {module:extension/style.StyleTable} styleTable  style table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @constructor\n */\nvar StyleRow = function(styleTable, columnTypes, values) {\n  AttributesRow.call(this, styleTable, columnTypes, values);\n  this.styleTable = styleTable;\n};\n\nutil.inherits(StyleRow, AttributesRow);\n\n/**\n * Get the name column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getNameColumn = function() {\n  return this.styleTable.getNameColumn();\n};\n\n/**\n * Gets the name\n * @return {String}\n */\nStyleRow.prototype.getName = function() {\n  return this.getValueWithColumnName(this.getNameColumn().name);\n};\n\n/**\n * Sets the name for the row\n * @param {String} name name\n */\nStyleRow.prototype.setName = function(name) {\n  this.setValueWithColumnName(this.getNameColumn().name, name);\n};\n\n/**\n * Get the description column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getDescriptionColumn = function() {\n  return this.styleTable.getDescriptionColumn();\n};\n\n/**\n * Gets the description\n * @return {String}\n */\nStyleRow.prototype.getDescription = function() {\n  return this.getValueWithColumnName(this.getDescriptionColumn().name);\n};\n\n/**\n * Sets the description for the row\n * @param {String} description description\n */\nStyleRow.prototype.setDescription = function(description) {\n  this.setValueWithColumnName(this.getDescriptionColumn().name, description);\n};\n\n/**\n * Get the color column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getColorColumn = function() {\n  return this.styleTable.getColorColumn();\n};\n\n/**\n * Get the style color\n * @return {String} color\n */\nStyleRow.prototype.getColor = function() {\n  return this.createColor(this.getHexColor(), this.getOpacity());\n};\n\n/**\n * Check if the style has a color\n * @return true if has a color\n */\nStyleRow.prototype.hasColor = function() {\n  return this._hasColor(this.getHexColor(), this.getOpacity());\n};\n\n/**\n * Get the color\n * @return {String} color\n */\nStyleRow.prototype.getHexColor = function() {\n  return this.getValueWithColumnName(this.getColorColumn().name);\n};\n\n/**\n * Set the color\n * @param {String} color color\n * @param {Number} opacity opacity\n */\nStyleRow.prototype.setColor = function(color, opacity) {\n  this.setHexColor(color);\n  this.setOpacity(opacity);\n};\n\n/**\n * Sets the color for the row\n * @param {String} color color\n */\nStyleRow.prototype.setHexColor = function(color) {\n  var validatedColor = this.validateColor(color);\n  this.setValueWithColumnName(this.getColorColumn().name, validatedColor);\n};\n\n/**\n * Get the opacity column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getOpacityColumn = function() {\n  return this.styleTable.getOpacityColumn();\n};\n\n/**\n * Gets the opacity\n * @return {Number}\n */\nStyleRow.prototype.getOpacity = function() {\n  return this.getValueWithColumnName(this.getOpacityColumn().name);\n};\n\n/**\n * Get the opacity or default value\n * @return {Number} opacity\n */\nStyleRow.prototype.getOpacityOrDefault = function() {\n  var opacity = this.getOpacity();\n  if (opacity === null) {\n    opacity = 1.0;\n  }\n  return opacity;\n};\n\n/**\n * Sets the opacity for the row\n * @param {Number} opacity opacity\n */\nStyleRow.prototype.setOpacity = function(opacity) {\n  this.validateOpacity(opacity);\n  this.setValueWithColumnName(this.getOpacityColumn().name, opacity);\n};\n\n/**\n * Get the width column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getWidthColumn = function() {\n  return this.styleTable.getWidthColumn();\n};\n\n/**\n * Gets the width\n * @return {int}\n */\nStyleRow.prototype.getWidth = function() {\n  return this.getValueWithColumnName(this.getWidthColumn().name);\n};\n\n/**\n * Sets the width for the row\n * @param {Number} width width\n */\nStyleRow.prototype.setWidth = function(width) {\n  if (width !== null && width < 0.0) {\n    throw new Error(\"Width must be greater than or equal to 0.0, invalid value: \" + width);\n  }\n  this.setValueWithColumnName(this.getWidthColumn().name, width);\n};\n\n/**\n * Get the width value or default width\n * @return width\n */\nStyleRow.prototype.getWidthOrDefault = function() {\n  var width = this.getWidth();\n  if (width === null) {\n    width = 1.0;\n  }\n  return width;\n};\n\n/**\n * Get the fill color column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getFillColorColumn = function() {\n  return this.styleTable.getFillColorColumn();\n};\n\n\n/**\n * Get the style fill color\n * @return {String} color\n */\nStyleRow.prototype.getFillColor = function() {\n  return this.createColor(this.getFillHexColor(), this.getFillOpacity());\n};\n\n/**\n * Check if the style has a fill color\n * @return true if has a color\n */\nStyleRow.prototype.hasFillColor = function() {\n  return this._hasColor(this.getFillHexColor(), this.getFillOpacity());\n};\n\n/**\n * Get the fill color\n * @return {String} color\n */\nStyleRow.prototype.getFillHexColor = function() {\n  return this.getValueWithColumnName(this.getFillColorColumn().name);\n};\n\n/**\n * Set the fill color\n * @param {String} color color\n * @param {Number} opacity opacity\n */\nStyleRow.prototype.setFillColor = function(color, opacity) {\n  this.setFillHexColor(color);\n  this.setFillOpacity(opacity);\n};\n\n/**\n * Sets the fill color for the row\n * @param {String} color color\n */\nStyleRow.prototype.setFillHexColor = function(color) {\n  var validatedColor = this.validateColor(color);\n  this.setValueWithColumnName(this.getFillColorColumn().name, validatedColor);\n};\n\n/**\n * Get the fill opacity column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleRow.prototype.getFillOpacityColumn = function() {\n  return this.styleTable.getFillOpacityColumn();\n};\n\n/**\n * Gets the fill opacity\n * @return {Number}\n */\nStyleRow.prototype.getFillOpacity = function() {\n  return this.getValueWithColumnName(this.getFillOpacityColumn().name);\n};\n\n/**\n * Sets the fill opacity for the row\n * @param {Number} fillOpacity fillOpacity\n */\nStyleRow.prototype.setFillOpacity = function(fillOpacity) {\n  this.validateOpacity(fillOpacity);\n  this.setValueWithColumnName(this.getFillOpacityColumn().name, fillOpacity);\n};\n\n/**\n * Get the fill opacity or default value\n * @return {Number} fill opacity\n */\nStyleRow.prototype.getFillOpacityOrDefault = function() {\n  var fillOpacity = this.getFillOpacity();\n  if (fillOpacity == null) {\n    fillOpacity = 1.0;\n  }\n  return fillOpacity;\n};\n\n/**\n * Validate and adjust the color value\n * @param {String} color color\n */\nStyleRow.prototype.validateColor = function(color) {\n  var validated = color;\n  if (color != null) {\n    if (!color.startsWith(\"#\")) {\n      validated = \"#\" + color;\n    }\n    if (!colorPattern.test(validated)) {\n      throw new Error(\"Color must be in hex format #RRGGBB or #RGB, invalid value: \" + color);\n    }\n    validated = validated.toUpperCase();\n  }\n  return validated;\n};\n\n/**\n * Validate the opacity value\n * @param {Number} opacity opacity\n */\nStyleRow.prototype.validateOpacity = function(opacity) {\n  if (opacity != null && (opacity < 0.0 || opacity > 1.0)) {\n    throw new Error(\"Opacity must be set inclusively between 0.0 and 1.0, invalid value: \" + opacity);\n  }\n};\n\n/**\n * Create a color from the hex color and opacity\n * @param {String} hexColor hex color\n * @param {Number} opacity opacity\n * @return {String} rgba color\n */\nStyleRow.prototype.createColor = function(hexColor, opacity) {\n  var color = '#000000';\n  if (hexColor !== null) {\n    color = hexColor;\n  }\n  if (opacity !== null) {\n    var a = Math.round(opacity * 255).toString(16);\n    if (a.length === 1) {\n      a = \"0\" + a;\n    }\n    color += a;\n  }\n  return color.toUpperCase();\n};\n\n/**\n * Determine if a color exists from the hex color and opacity\n * @param {String} hexColor hex color\n * @param {Number} opacity opacity\n * @return true if has a color\n */\nStyleRow.prototype._hasColor = function(hexColor, opacity) {\n  return hexColor !== null || opacity !== null;\n};\n\nmodule.exports = StyleRow;\n\n},{\"../../attributes/attributeRow\":4,\"util\":343}],60:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleTable\n */\n\nvar AttributesTable = require('../../attributes/attributeTable')\n  , UserColumn = require('../../user/userColumn')\n  , UserCustomColumn = require('../../user/custom/userCustomColumn')\n  , RelationType = require('../relatedTables/relationType')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Icon Requirements Class Media Table\n * @extends {module:attributes/attributeTable~AttributeTable}\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns   media columns\n * @constructor\n */\nvar StyleTable = function(tableName, columns) {\n  this.data_type = RelationType.ATTRIBUTES.dataType;\n  this.relation_name = RelationType.ATTRIBUTES.name;\n  AttributesTable.call(this, tableName, columns);\n};\n\nutil.inherits(StyleTable, AttributesTable);\n\n/**\n * Create a media table with a minimum required columns followed by the additional columns\n * @return {module:extension/style.StyleTable}\n */\nStyleTable.create = function() {\n  return new StyleTable(StyleTable.TABLE_NAME, StyleTable.createColumns());\n};\n\n/**\n * Create the columns\n * @return {module:user/custom~UserCustomColumn[]}\n */\nStyleTable.createColumns = function() {\n  var columns = [];\n  var index = 0;\n  columns.push(UserColumn.createPrimaryKeyColumnWithIndexAndName(index++, StyleTable.COLUMN_ID));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_OPACITY, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_FILL_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  columns.push(UserCustomColumn.createColumn(index, StyleTable.COLUMN_FILL_OPACITY, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined));\n  return columns;\n};\n\n/**\n * Get the name column index\n * @return int\n */\nStyleTable.prototype.getNameColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_NAME);\n};\n\n/**\n * Get the name column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getNameColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_NAME);\n};\n\n/**\n * Get the description column index\n * @return int\n */\nStyleTable.prototype.getDescriptionColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_DESCRIPTION);\n};\n\n/**\n * Get the description column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getDescriptionColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_DESCRIPTION);\n};\n\n/**\n * Get the color column index\n * @return int\n */\nStyleTable.prototype.getColorColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_COLOR);\n};\n\n/**\n * Get the color column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getColorColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_COLOR);\n};\n\n/**\n * Get the opacity column index\n * @return int\n */\nStyleTable.prototype.getOpacityColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_OPACITY);\n};\n\n/**\n * Get the opacity column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getOpacityColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_OPACITY);\n};\n\n/**\n * Get the width column index\n * @return int\n */\nStyleTable.prototype.getWidthColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_WIDTH);\n};\n\n/**\n * Get the width column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getWidthColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_WIDTH);\n};\n\n/**\n * Get the fill_color column index\n * @return int\n */\nStyleTable.prototype.getFillColorColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_FILL_COLOR);\n};\n\n/**\n * Get the fill_color column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getFillColorColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_COLOR);\n};\n\n/**\n * Get the fill_opacity column index\n * @return int\n */\nStyleTable.prototype.getFillOpacityColumnIndex = function() {\n  return this.getColumnIndex(StyleTable.COLUMN_FILL_OPACITY);\n};\n\n/**\n * Get the fill_opacity column\n * @return {module:user/userColumn~UserColumn}\n */\nStyleTable.prototype.getFillOpacityColumn = function() {\n  return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_OPACITY);\n};\n\nStyleTable.TABLE_NAME = 'nga_style';\nStyleTable.COLUMN_ID = 'id';\nStyleTable.COLUMN_NAME = 'name';\nStyleTable.COLUMN_DESCRIPTION = 'description';\nStyleTable.COLUMN_COLOR = 'color';\nStyleTable.COLUMN_OPACITY = 'opacity';\nStyleTable.COLUMN_WIDTH = 'width';\nStyleTable.COLUMN_FILL_COLOR = 'fill_color';\nStyleTable.COLUMN_FILL_OPACITY = 'fill_opacity';\nStyleTable.prototype.TABLE_TYPE = 'media';\n\nmodule.exports = StyleTable;\n\n},{\"../../attributes/attributeTable\":5,\"../../db/dataTypes\":14,\"../../user/custom/userCustomColumn\":101,\"../../user/userColumn\":105,\"../relatedTables/relationType\":36,\"util\":343}],61:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class StyleTableReader\n */\n\nvar AttributeTableReader = require('../../attributes/attributeTableReader')\n  , StyleTable = require('./styleTable');\n\nvar util = require('util');\n\n/**\n * Reads the metadata from an existing attribute table\n * @extends {module:attributes/attributeTableReader}\n * @constructor\n*/\nvar StyleTableReader = function(tableName) {\n  AttributeTableReader.call(this, tableName);\n};\n\nutil.inherits(StyleTableReader, AttributeTableReader);\n\n/**\n *\n * @param {String} tableName\n * @param columns\n * @returns {module:extension/style.StyleTable}\n */\nStyleTableReader.prototype.createTable = function (tableName, columns) {\n  return new StyleTable(tableName, columns);\n};\n\nmodule.exports = StyleTableReader;\n\n},{\"../../attributes/attributeTableReader\":6,\"./styleTable\":60,\"util\":343}],62:[function(require,module,exports){\n/**\n * @memberOf module:extension/style\n * @class Styles\n */\n\n\n/**\n * Styles constructor\n * @constructor\n */\nvar Styles = function() {\n  this.defaultStyle = null;\n  this.styles = {};\n};\n\nStyles.prototype.setDefault = function(styleRow) {\n  this.defaultStyle = styleRow;\n};\n\nStyles.prototype.getDefault = function() {\n  return this.defaultStyle;\n};\n\nStyles.prototype.setStyle = function(styleRow, geometryType) {\n  if (geometryType != null) {\n    if (styleRow != null) {\n      this.styles[geometryType] = styleRow;\n    } else {\n      delete this.styles[geometryType];\n    }\n  } else {\n    this.setDefault(styleRow);\n  }\n};\n\nStyles.prototype.getStyle = function(geometryType) {\n  var styleRow = null;\n  if (geometryType != null) {\n    styleRow = this.styles[geometryType];\n  }\n  if (styleRow === null || geometryType === null) {\n    styleRow = this.getDefault();\n  }\n  return styleRow;\n};\n\nStyles.prototype.isEmpty = function() {\n  return Object.keys(this.styles).length === 0 && this.defaultStyle === null;\n};\n\nmodule.exports = Styles;\n\n},{}],63:[function(require,module,exports){\n/**\n * WebPExtension module.\n * @module WebPExtension\n * @see module:extension/BaseExtension\n */\n\nvar BaseExtension = require('../baseExtension')\n  , Extension = require('../.').Extension;\n\nvar util = require('util');\n\nvar WebPExtension = function(geoPackage, tableName) {\n  BaseExtension.call(this, geoPackage);\n\n  this.tableName = tableName;\n}\n\nutil.inherits(WebPExtension, BaseExtension);\n\nWebPExtension.prototype.getOrCreateExtension = function() {\n  return this.getOrCreate(WebPExtension.EXTENSION_NAME, this.tableName, 'tile_data', WebPExtension.EXTENSION_WEBP_DEFINITION, Extension.READ_WRITE);\n};\n\nWebPExtension.EXTENSION_NAME = 'gpkg_webp';\nWebPExtension.EXTENSION_WEBP_AUTHOR = 'gpkg';\nWebPExtension.EXTENSION_WEBP_NAME_NO_AUTHOR = 'webp';\nWebPExtension.EXTENSION_WEBP_DEFINITION = 'http://www.geopackage.org/spec/#extension_webp';\n\nmodule.exports.WebPExtension = WebPExtension;\n\n},{\"../.\":25,\"../baseExtension\":20,\"util\":343}],64:[function(require,module,exports){\n/**\n * GeometryColumns module.\n * @module features/columns\n */\n\nvar Dao = require('../../dao/dao')\n  , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , Contents = require('../../core/contents').Contents;\n\nvar util = require('util');\n\n/**\n * Spatial Reference System object. The coordinate reference system definitions it contains are referenced by the GeoPackage Contents and GeometryColumns objects to relate the vector and tile data in user tables to locations on the earth.\n * @class GeometryColumns\n */\nvar GeometryColumns = function() {\n  /**\n\t * Name of the table containing the geometry column\n\t * @member {string}\n\t */\n\tthis.table_name;\n\n\t/**\n\t * Name of a column in the feature table that is a Geometry Column\n\t * @member {string}\n\t */\n\tthis.column_name;\n\n\t/**\n\t * Name from Geometry Type Codes (Core) or Geometry Type Codes (Extension)\n\t * in Geometry Types (Normative)\n\t * @member {string}\n\t */\n\tthis.geometry_type_name;\n\n\t/**\n\t * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id\n\t * @member {module:dao/spatialReferenceSystem~SpatialReferenceSystem}\n\t */\n\tthis.srs;\n\n\t/**\n\t * Unique identifier for each Spatial Reference System within a GeoPackage\n\t * @member {Number}\n\t */\n\tthis.srs_id;\n\n\t/**\n\t * 0: z values prohibited; 1: z values mandatory; 2: z values optional\n\t * @member {byte}\n\t */\n\tthis.z;\n\n\t/**\n\t * 0: m values prohibited; 1: m values mandatory; 2: m values optional\n\t * @member {byte}\n\t */\n\tthis.m;\n\n};\n\nGeometryColumns.prototype.getGeometryType = function() {\n  return this.geometry_type_name;\n};\n\n  // /**\n  //  * Contents\n  //  */\n  // @ForeignCollectionField(eager = false)\n  // private ForeignCollection<Contents> contents;\n  //\n  // /**\n  //  * Geometry Columns\n  //  */\n  // @ForeignCollectionField(eager = false)\n  // private ForeignCollection<GeometryColumns> geometryColumns;\n  //\n  // /**\n  //  * Matrix Tile Set\n  //  */\n  // @ForeignCollectionField(eager = false)\n  // private ForeignCollection<TileMatrixSet> tileMatrixSet;\n\n\n\n/**\n * Geometry Columns Data Access Object\n * @class GeometryColumnsDao\n * @extends {module:dao/dao~Dao}\n */\nvar GeometryColumnsDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(GeometryColumnsDao, Dao);\n\nGeometryColumnsDao.prototype.createObject = function () {\n  return new GeometryColumns();\n};\n\n/**\n *  Query for the table name\n *\n *  @param {string} tableName table name\n *  @param {callback} callback called with an error if one occurred and the {module:dao/geometryColumns~GeometryColumns}\n */\nGeometryColumnsDao.prototype.queryForTableName = function (tableName) {\n  var results = this.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, tableName);\n  if (results && results.length) {\n    var gc = this.createObject();\n    this.populateObjectFromResult(gc, results[0]);\n    return gc;\n  }\n  return;\n};\n\n/**\n *  Get the feature table names\n *\n *  @param {callback} callback called with an error if one occurred and an array of the {FeatureTable}\n */\nGeometryColumnsDao.prototype.getFeatureTables = function () {\n  var tableNames = [];\n  for (var result of this.connection.each('select ' + GeometryColumnsDao.COLUMN_TABLE_NAME + ' from ' + this.gpkgTableName)) {\n    tableNames.push(result[GeometryColumnsDao.COLUMN_TABLE_NAME]);\n  }\n  return tableNames;\n};\n\n/**\n *  Get the Spatial Reference System of the Geometry Columns\n *\n *  @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns\n *  @param {callback} callback called with an error if one occurred and the {SpatialReferenceSystem}\n */\nGeometryColumnsDao.prototype.getSrs = function (geometryColumns) {\n  var dao = this.geoPackage.getSpatialReferenceSystemDao();\n  return dao.queryForId(geometryColumns.srs_id);;\n};\n\n/**\n *  Get the Contents of the Geometry Columns\n *\n *  @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns\n *  @return {ContentsDao} contents dao\n */\nGeometryColumnsDao.prototype.getContents = function (geometryColumns) {\n  var dao = this.geoPackage.getContentsDao();\n  return dao.queryForId(geometryColumns.table_name);\n};\n\nGeometryColumnsDao.prototype.getProjection = function (projectionObject) {\n  var srs = this.getSrs(projectionObject);\n  var srsDao = this.geoPackage.getSpatialReferenceSystemDao();\n  return srsDao.getProjection(srs);\n};\n\n/**\n * tableName field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_TABLE_NAME = \"table_name\";\n\n/**\n * columnName field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_COLUMN_NAME = \"column_name\";\n\n/**\n * id 1 field name, tableName\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_ID_1 = GeometryColumnsDao.COLUMN_TABLE_NAME;\n\n/**\n * id 2 field name, columnName\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_ID_2 = GeometryColumnsDao.COLUMN_COLUMN_NAME;\n\n/**\n * geometryTypeName field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME = \"geometry_type_name\";\n\n/**\n * srsId field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_SRS_ID = 'srs_id';\n\n/**\n * z field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_Z = \"z\";\n\n/**\n * m field name\n * @type {String}\n */\nGeometryColumnsDao.COLUMN_M = \"m\";\n\n/**\n * Table Name\n * @type {String}\n */\nGeometryColumnsDao.prototype.gpkgTableName = 'gpkg_geometry_columns';\n\nGeometryColumnsDao.prototype.idColumns = [GeometryColumnsDao.COLUMN_ID_1, GeometryColumnsDao.COLUMN_ID_2];\nGeometryColumnsDao.prototype.columns =\n  [GeometryColumnsDao.COLUMN_TABLE_NAME, GeometryColumnsDao.COLUMN_COLUMN_NAME, GeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME, GeometryColumnsDao.COLUMN_SRS_ID, GeometryColumnsDao.COLUMN_Z, GeometryColumnsDao.COLUMN_M];\n\nGeometryColumns.TABLE_NAME = \"tableName\";\nGeometryColumns.COLUMN_NAME = \"columnName\";\nGeometryColumns.GEOMETRY_TYPE_NAME = \"geometryTypeName\";\nGeometryColumns.SRS_ID = \"srsId\";\nGeometryColumns.Z = \"z\";\nGeometryColumns.M = \"m\";\n\nmodule.exports.GeometryColumnsDao = GeometryColumnsDao;\nmodule.exports.GeometryColumns = GeometryColumns;\n\n},{\"../../core/contents\":8,\"../../core/srs\":9,\"../../dao/dao\":11,\"util\":343}],65:[function(require,module,exports){\n/**\n * @module features/user/featureColumn\n */\n\nconst UserColumn = require('../../user/userColumn');\nconst DataTypes = require('../../db/dataTypes');\nconst util = require('util');\n\n/**\n * Represents a user feature column\n * @class\n * @extends {module:user/userColumn~UserColumn}\n */\nvar FeatureColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType) {\n  UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);\n  this.geometryType = geometryType;\n\n  if (!geometryType && dataType === DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) {\n    throw new Error('Data or Geometry Type is required to create column: ' + name);\n  }\n}\n\nutil.inherits(FeatureColumn, UserColumn);\n\nFeatureColumn.prototype.getTypeName = function () {\n  if (this.isGeometry()) {\n    return DataTypes.name(DataTypes.GPKGDataType.GPKG_DT_GEOMETRY);\n  }\n  return this.dataType !== undefined && DataTypes.name(this.dataType);\n};\n\n/**\n *  Create a new primary key column\n *\n *  @param {Number} index column index\n *  @param {string} name  column name\n *\n *  @return feature column\n */\nFeatureColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) {\n  return new FeatureColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true);\n}\n\n/**\n *  Create a new geometry column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {WKBGeometryType} type         geometry type\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return feature column\n */\nFeatureColumn.createGeometryColumn = function(index, name, type, notNull, defaultValue) {\n  return new FeatureColumn(index, name, type, undefined, notNull, defaultValue, false, type);\n}\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return feature column\n */\nFeatureColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) {\n  return FeatureColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue);\n}\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Number} max max value\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return feature column\n */\nFeatureColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) {\n  return new FeatureColumn(index, name, type, max, notNull, defaultValue, false);\n}\n\n/**\n * Determine if this column is a geometry\n * @return {Boolean} true if a geometry column\n */\nFeatureColumn.prototype.isGeometry = function () {\n  return this.geometryType !== undefined;\n};\n\nmodule.exports = FeatureColumn;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"util\":343}],66:[function(require,module,exports){\n/**\n * featureDao module.\n * @module features/user/featureDao\n */\n\nvar UserDao = require('../../user/userDao')\n  , GeometryColumnsDao = require('../columns').GeometryColumnsDao\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , DataColumnsDao = require('../../dataColumns').DataColumnsDao\n  , FeatureRow = require('./featureRow')\n  , DataTypes = require('../../db/dataTypes')\n  , FeatureTableIndex = require('../../extension/index/featureTableIndex')\n  , BoundingBox = require('../../boundingBox');\n\nvar util = require('util')\n  , reproject = require('reproject')\n  , LineIntersect = require('@turf/line-intersect').default\n  , Intersect = require('@turf/intersect').default\n  , BooleanWithin = require('@turf/boolean-within').default;\n\n/**\n * Feature DAO for reading feature user data tables\n * @class FeatureDao\n * @extends {module:user/userDao~UserDao}\n * @param  {sqlite3} db              database connection\n * @param  {FeatureTable} table           feature table\n * @param  {GeometryColumns} geometryColumns geometry columns\n * @param  {MetadataDb} metadataDb      metadata db\n */\nvar FeatureDao = function(geoPackage, table, geometryColumns, metadataDb) {\n  UserDao.call(this, geoPackage, table);\n  this.geometryColumns = geometryColumns;\n  this.metadataDb = metadataDb;\n  this.dataColumnsDao = new DataColumnsDao(geoPackage);\n  this.featureTableIndex = new FeatureTableIndex(geoPackage, this);\n  var dao = geoPackage.getGeometryColumnsDao();\n  if (!dao.getContents(geometryColumns)) {\n    throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Contents');\n  }\n  if (!dao.getSrs(geometryColumns)) {\n    throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Spatial Reference System');\n  }\n  this.projection = dao.getProjection(geometryColumns);\n}\n\nutil.inherits(FeatureDao, UserDao);\n\nFeatureDao.prototype.createObject = function (results) {\n  if (results) {\n    return this.getRow(results);\n  }\n  return this.newRow();\n};\n\nFeatureDao.prototype.getContents = function() {\n  var dao = this.geoPackage.getGeometryColumnsDao();\n  return dao.getContents(this.geometryColumns);\n}\n\n/**\n * Get the feature table\n * @return {FeatureTable} the feature table\n */\nFeatureDao.prototype.getFeatureTable = function () {\n  return this.table;\n};\n\n/**\n * Create a new feature row with the column types and values\n * @param  {Array} columnTypes column types\n * @param  {Array} values      values\n * @return {FeatureRow}             feature row\n */\nFeatureDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new FeatureRow(this.getFeatureTable(), columnTypes, values);\n};\n\n/**\n * Create a new feature row\n * @return {FeatureRow} feature row\n */\nFeatureDao.prototype.newRow = function () {\n  return new FeatureRow(this.getFeatureTable());\n};\n\n/**\n * Get the geometry column name\n * @return {string} the geometry column name\n */\nFeatureDao.prototype.getGeometryColumnName = function () {\n  return this.geometryColumns.column_name;\n};\n\n/**\n * Get the geometry types\n * @return {WKBGeometryType} well known binary geometry type\n */\nFeatureDao.prototype.getGeometryType = function () {\n  return this.geometryColumns.getGeometryType();\n};\n\nFeatureDao.prototype.getSrs = function() {\n  return this.geoPackage.getGeometryColumnsDao().getSrs(this.geometryColumns);\n};\n\n/**\n * Determine if the feature table is indexed\n * @param  {Function} callback called with err if one occurred and true or false indicating the indexed status\n */\nFeatureDao.prototype.isIndexed = function() {\n  return this.featureTableIndex.isIndexed();\n}\n\n/**\n * Query for count in bounding box\n * @param boundingBox\n * @returns {Number}}\n */\nFeatureDao.prototype.countWebMercatorBoundingBox = function(boundingBox) {\n  var srs = this.getSrs();\n  return this.featureTableIndex.countWithBoundingBox(boundingBox, 'EPSG:3857');\n}\n\nFeatureDao.prototype.fastQueryWebMercatorBoundingBox = function(boundingBox, featureRowCallback) {\n  var srs = this.getSrs();\n  var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857');\n  var thisgetRow = this.getRow.bind(this);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var featureRow = thisgetRow(nextRow.value);\n\n        return {\n          value: featureRow,\n          done: false\n        };\n      } else {\n        return {\n          done: true\n        }\n      }\n    }\n  }\n}\n\nFeatureDao.prototype.queryIndexedFeaturesWithWebMercatorBoundingBox = function(boundingBox) {\n  var srs = this.getSrs();\n  var projection = this.projection;\n\n  var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857');\n  var thisgetRow = this.getRow.bind(this);\n  var projectedBoundingBox = boundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326');\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var featureRow;\n        var geometry;\n\n        while(!nextRow.done && !geometry) {\n          featureRow = thisgetRow(nextRow.value);\n          geometry = reprojectFeature(featureRow, srs, projection);\n          geometry = verifyFeature(geometry, projectedBoundingBox);\n          if (geometry) {\n            geometry.properties = featureRow.values;\n            return {\n              value: featureRow,\n              done: false\n            };\n          } else {\n            nextRow = iterator.next();\n          }\n        }\n      }\n      return {\n        done: true\n      }\n    }\n  }\n}\n\n/**\n * Calls geoJSONFeatureCallback with the geoJSON of each matched feature (always in 4326 projection)\n * @param  {BoundingBox} boundingBox        4326 bounding box to query\n * @param  {function} geoJSONFeatureCallback called with err, geoJSON, doneCallback\n * @param  {function} doneCallback       called when all rows have been returned\n */\nFeatureDao.prototype.queryForGeoJSONIndexedFeaturesWithBoundingBox = function(boundingBox, skipVerification) {\n\n  var columns = [];\n  var columnMap = {};\n\n  var srs = this.getSrs();\n  var projection = this.projection;\n  this.table.columns.forEach(function(column) {\n    var dataColumn = this.dataColumnsDao.getDataColumns(this.table.table_name, column.name);\n    columns.push({\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey,\n      dataType: column.dataType ? DataTypes.name(column.dataType) : '',\n      displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,\n      dataColumn: dataColumn\n    });\n    columnMap[column.name] = columns[columns.length-1];\n  }.bind(this));\n\n  var verifiedCount = 0;\n  var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326')[Symbol.iterator]();\n  var thisgetRow = this.getRow.bind(this);\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var featureRow;\n        var geometry;\n\n        while(!nextRow.done && !geometry) {\n          featureRow = thisgetRow(nextRow.value);\n          geometry = reprojectFeature(featureRow, srs, projection);\n          if (!skipVerification) {\n            geometry = verifyFeature(geometry, boundingBox);\n          }\n          if (geometry) {\n            var geoJson = {\n              properties: {},\n              geometry: geometry\n            };\n            for (var key in featureRow.values) {\n              if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') {\n                if (key.toLowerCase() == '_feature_id') {\n                  geoJson.id = featureRow.values[key];\n                } else if (key.toLowerCase() == '_properties_id') {\n                  geoJson.properties[key.substring(12)] = featureRow.values[key];\n                } else {\n                  geoJson.properties[columnMap[key].displayName] = featureRow.values[key];\n                }\n              }\n            }\n            geoJson.id = geoJson.id || featureRow.getId();\n            return {\n              value: geoJson,\n              done: false\n            };\n          } else {\n            nextRow = iterator.next();\n          }\n        }\n      }\n      return {\n        done: true\n      }\n    }.bind(this)\n  }\n}\n\nfunction reprojectFeature(featureRow, srs, projection) {\n  var geometry = featureRow.getGeometry().toGeoJSON();\n  if (srs.organization + ':' + srs.organization_coordsys_id != 'EPSG:4326') {\n    geometry = reproject.reproject(geometry, projection, 'EPSG:4326');\n  }\n  return geometry;\n}\n\nfunction verifyFeature(geometry, boundingBox) {\n  try {\n    if (geometry.type == 'Point') {\n      return geometry;\n    } else if (geometry.type == 'LineString') {\n      var intersect = LineIntersect(geometry, boundingBox.toGeoJSON().geometry);\n      if (intersect.features.length) {\n        return geometry;\n      } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) {\n        return geometry;\n      }\n    } else if (geometry.type == 'Polygon') {\n      var polyIntersect = Intersect(geometry, boundingBox.toGeoJSON().geometry);\n      if (polyIntersect) {\n        return geometry;\n      } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) {\n        return geometry;\n      }\n    }\n  } catch (e) {}\n}\n\nFeatureDao.prototype.queryIndexedFeaturesWithBoundingBox = function(boundingBox) {\n  var srs = this.getSrs();\n  var projection = this.projection;\n\n  var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326');\n  var thisgetRow = this.getRow.bind(this);\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var featureRow;\n        var geometry;\n\n        while(!nextRow.done && !geometry) {\n          featureRow = thisgetRow(nextRow.value);\n          geometry = reprojectFeature(featureRow, srs, projection);\n          geometry = verifyFeature(geometry, boundingBox);\n          if (geometry) {\n            geometry.properties = featureRow.values;\n            return {\n              value: featureRow,\n              done: false\n            };\n          } else {\n            nextRow = iterator.next();\n          }\n        }\n      }\n      return {\n        done: true\n      }\n    }.bind(this)\n  }\n}\n\nFeatureDao.prototype.getBoundingBox = function () {\n  var contents = this.getContents();\n  return new BoundingBox(contents.min_x, contents.max_x, contents.min_y, contents.max_y);\n};\n\nmodule.exports = FeatureDao;\n\n},{\"../../boundingBox\":7,\"../../core/contents\":8,\"../../dataColumns\":13,\"../../db/dataTypes\":14,\"../../extension/index/featureTableIndex\":26,\"../../user/userDao\":106,\"../columns\":64,\"./featureRow\":67,\"@turf/boolean-within\":120,\"@turf/intersect\":124,\"@turf/line-intersect\":126,\"reproject\":315,\"util\":343}],67:[function(require,module,exports){\n/**\n * featureRow module.\n * @module features/user/featureRow\n */\n\nvar UserRow = require('../../user/userRow')\n  , FeatureColumn = require('./featureColumn')\n  , GeometryData = require('../../geom/geometryData')\n  , DataTypes = require('../../db/dataTypes');\n\nvar util = require('util');\n\n/**\n * Feature Row containing the values from a single result set row\n * @param  {FeatureTable} featureTable feature table\n * @param  {Array} columnTypes  column types\n * @param  {Array} values       values\n */\nvar FeatureRow = function(featureTable, columnTypes, values) {\n  UserRow.call(this, featureTable, columnTypes, values);\n  this.featureTable = featureTable;\n}\n\nutil.inherits(FeatureRow, UserRow);\n\n/**\n * Get the geometry column index\n * @return {Number} geometry column index\n */\nFeatureRow.prototype.getGeometryColumnIndex = function () {\n  return this.featureTable.geometryIndex;\n};\n\n/**\n * Get the geometry column\n * @return {FeatureColumn} geometry column\n */\nFeatureRow.prototype.getGeometryColumn = function () {\n  return this.featureTable.getGeometryColumn();\n};\n\n/**\n * Get the geometry\n * @return {Buffer} geometry data\n */\nFeatureRow.prototype.getGeometry = function () {\n  return this.getValueWithIndex(this.featureTable.geometryIndex);\n};\n\n/**\n * Get the geometry's type\n * @return {String} geometry data\n */\nFeatureRow.prototype.getGeometryType = function () {\n  var geometryType = null;\n  var geometry = this.getValueWithIndex(this.featureTable.geometryIndex);\n  if (geometry !== null) {\n    geometryType = geometry.toGeoJSON().type;\n  }\n  return geometryType;\n};\n\n/**\n * set the geometry\n * @param {Buffer} geometryData geometry data\n */\nFeatureRow.prototype.setGeometry = function (geometryData) {\n  this.setValueWithIndex(this.featureTable.geometryIndex, geometryData);\n};\n\nFeatureRow.prototype.toObjectValue = function (index, value) {\n  var objectValue = value;\n  var column = this.getColumnWithIndex(index);\n  if (column.isGeometry() && value) {\n    objectValue = new GeometryData(value);\n  }\n  return objectValue;\n};\n\nFeatureRow.prototype.toDatabaseValue = function(columnName) {\n  var column = this.getColumnWithColumnName(columnName);\n  var value = this.getValueWithColumnName(columnName);\n  if (column.isGeometry() && value.toData) {\n    return value.toData();\n  } else if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) {\n    return value === true ? 1 : 0;\n  }\n\n  return value;\n}\n\nmodule.exports = FeatureRow;\n\n},{\"../../db/dataTypes\":14,\"../../geom/geometryData\":73,\"../../user/userRow\":107,\"./featureColumn\":65,\"util\":343}],68:[function(require,module,exports){\n/**\n * featureTable module.\n * @module features/user/featureTable\n */\n\nvar UserTable = require('../../user/userTable');\n\nvar util = require('util');\n\n/**\n * Represents a user feature table\n * @param  {string} tableName table name\n * @param  {array} columns   feature columns\n */\nvar FeatureTable = function(tableName, columns) {\n  UserTable.call(this, tableName, columns);\n  var geometry = undefined;\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    if (column.isGeometry()) {\n      this.duplicateCheck(column.index, geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY');\n      geometry = column.index;\n    }\n  }\n  this.missingCheck(geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY');\n  this.geometryIndex = geometry;\n}\n\nutil.inherits(FeatureTable, UserTable);\n\n/**\n * Get the geometry feature column\n * @return {FeatureColumn} geometry feature column\n */\nFeatureTable.prototype.getGeometryColumn = function () {\n  return this.getColumnWithIndex(this.geometryIndex);\n};\n\nFeatureTable.prototype.getTableType = function() {\n  return UserTable.FEATURE_TABLE;\n}\n\n/**\n * The FeatureTable\n * @type {FeatureTable}\n */\nmodule.exports = FeatureTable;\n\n},{\"../../user/userTable\":108,\"util\":343}],69:[function(require,module,exports){\n/**\n * featureTableReader module.\n * @module features/user/featureTableReader\n */\n\nvar UserTableReader = require('../../user/userTableReader')\n  , FeatureTable = require('./featureTable')\n  , FeatureColumn = require('./featureColumn')\n  , GeometryColumnsDao = require('../columns').GeometryColumnsDao\n  , DataTypes = require('../../db/dataTypes')\n  , wkb = require('../../wkb');\n\nvar util = require('util');\n\n/**\n* Reads the metadata from an existing feature table\n* @class FeatureTableReader\n* @extends {module:user~UserTableReader}\n*/\nvar FeatureTableReader = function(tableNameOrGeometryColumns) {\n  if (util.isString(tableNameOrGeometryColumns)) {\n    UserTableReader.call(this, tableNameOrGeometryColumns);\n  } else {\n    UserTableReader.call(this, tableNameOrGeometryColumns.table_name);\n    this.geometryColumns = tableNameOrGeometryColumns;\n  }\n}\n\nutil.inherits(FeatureTableReader, UserTableReader);\n\nFeatureTableReader.prototype.readFeatureTable = function (geoPackage) {\n  if (!this.geometryColumns) {\n    var gcd = new GeometryColumnsDao(geoPackage);\n    this.geometryColumns = gcd.queryForTableName(this.table_name);\n    return this.readTable(geoPackage.getDatabase());\n  } else {\n    return this.readTable(geoPackage.getDatabase());\n  }\n};\n\nFeatureTableReader.prototype.createTable = function (tableName, columns) {\n  return new FeatureTable(tableName, columns);\n};\n\nFeatureTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValue, primaryKey) {\n  var geometry = name === this.geometryColumns.column_name;\n  var geometryType = undefined;\n  var dataType = undefined;\n  if (geometry) {\n    geometryType = wkb.fromName(type);\n  } else {\n    dataType = DataTypes.fromName(type);\n  }\n  var column = new FeatureColumn(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType);\n\n  return column;\n};\n\n/**\n * The FeatureTableReader\n * @type {FeatureTableReader}\n */\nmodule.exports = FeatureTableReader;\n\n},{\"../../db/dataTypes\":14,\"../../user/userTableReader\":109,\"../../wkb\":111,\"../columns\":64,\"./featureColumn\":65,\"./featureTable\":68,\"util\":343}],70:[function(require,module,exports){\n\n/**\n * @module geoPackage\n */\n\nvar SpatialReferenceSystemDao = require('./core/srs').SpatialReferenceSystemDao\n  , GeometryColumnsDao = require('./features/columns').GeometryColumnsDao\n  , FeatureDao = require('./features/user/featureDao')\n  , FeatureTableReader = require('./features/user/featureTableReader')\n  , ContentsDao = require('./core/contents').ContentsDao\n  , Contents = require('./core/contents').Contents\n  , TileMatrixSetDao = require('./tiles/matrixset').TileMatrixSetDao\n  , TileMatrixSet = require('./tiles/matrixset').TileMatrixSet\n  , TileMatrixDao = require('./tiles/matrix').TileMatrixDao\n  , TileMatrix = require('./tiles/matrix').TileMatrix\n  , TileTableReader = require('./tiles/user/tileTableReader')\n  , TileDao = require('./tiles/user/tileDao')\n  , TileTable = require('./tiles/user/tileTable')\n  , TileBoundingBoxUtils = require('./tiles/tileBoundingBoxUtils')\n  , TableCreator = require('./db/tableCreator')\n  , UserTable = require('./user/userTable')\n  , FeatureTable = require('./features/user/featureTable')\n  , DataColumnsDao = require('./dataColumns').DataColumnsDao\n  , DataColumnConstraintsDao = require('./dataColumnConstraints').DataColumnConstraintsDao\n  , MetadataDao = require('./metadata').MetadataDao\n  , MetadataReferenceDao = require('./metadata/reference').MetadataReferenceDao\n  , ExtensionDao = require('./extension').ExtensionDao\n  , CrsWktExtension = require('./extension/crsWkt').CrsWktExtension\n  , SchemaExtension = require('./extension/schema').SchemaExtension\n  , RelatedTablesExtension = require('./extension/relatedTables')\n  , TableIndexDao = require('./extension/index/tableIndex').TableIndexDao\n  , GeometryIndexDao = require('./extension/index/geometryIndex').GeometryIndexDao\n  , ExtendedRelationDao = require('./extension/relatedTables/extendedRelation').ExtendedRelationDao\n  , ContentsIdDao = require('./extension/contents/contentsIdDao')\n  , ContentsIdExtension = require('./extension/contents/.')\n  , FeatureStyleExtension = require('./extension/style/.')\n  , AttributeTable = require('./attributes/attributeTable')\n  , AttributeTableReader = require('./attributes/attributeTableReader')\n  , AttributeDao = require('./attributes/attributeDao')\n  , DataTypes = require('./db/dataTypes');\n\nvar proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4; // Module loading hack\n\nvar defs = require('./proj4Defs');\nfor (var name in defs) {\n  if (defs[name]) {\n    proj4.defs(name, defs[name]);\n  }\n}\n\n/**\n * A `GeoPackage` instance is the interface to a physical GeoPackage SQLite\n * database.\n * @param {string} name\n * @param {string} path\n * @param {module:db/geoPackageConnection~GeoPackageConnection} connection\n * @class\n */\nvar GeoPackage = module.exports = function(name, path, connection) {\n  this.name = name;\n  this.path = path;\n  this.connection = connection;\n  this.tableCreator = new TableCreator(this);\n}\n\nGeoPackage.loadProjections = function(items) {\n  if (!(items instanceof Array)) throw new Error('Invalid array of projections');\n  for (var i = 0; i < items.length; i++) {\n    if (!defs[items[i]]) throw new Error('Projection not found');\n    this.addProjection(items[i], defs[items[i]]);\n  }\n}\n\nGeoPackage.addProjection = function(name, definition) {\n  if (!name || ! definition) throw new Error('Invalid projection name/definition');\n  proj4.defs(''+name, ''+definition);\n}\n\nGeoPackage.hasProjection = function(name) {\n  return proj4.defs(''+name);\n}\n\nGeoPackage.prototype.close = function() {\n  this.connection.close();\n}\n\nGeoPackage.prototype.getDatabase = function() {\n  return this.connection;\n}\n\nGeoPackage.prototype.getPath = function() {\n  return this.path;\n}\n\nGeoPackage.prototype.export = function(callback) {\n  this.connection.export(callback);\n}\n\n/**\n * Get the GeoPackage name\n * @return {String} the GeoPackage name\n */\nGeoPackage.prototype.getName = function() {\n  return this.name;\n}\n\n/**\n * @returns {module:core/srs~SpatialReferenceSystemDao} the DAO to access the [SRS table]{@link module:core/srs~SpatialReferenceSystem} in this `GeoPackage`\n */\nGeoPackage.prototype.getSpatialReferenceSystemDao = function() {\n  return this.spatialReferenceSystemDao || (this.spatialReferenceSystemDao = new SpatialReferenceSystemDao(this));\n}\n\n/**\n * @returns {module:core/contents~ContentsDao} the DAO to access the [contents table]{@link module:core/contents~Contents} in this `GeoPackage`\n */\nGeoPackage.prototype.getContentsDao = function() {\n  return this.contentsDao || (this.contentsDao = new ContentsDao(this));\n}\n\n/**\n * @returns {module:tiles/matrixset~TileMatrixSetDao} the DAO to access the [tile matrix set]{@link module:tiles/matrixset~TileMatrixSet} in this `GeoPackage`\n */\nGeoPackage.prototype.getTileMatrixSetDao = function () {\n  return this.tileMatrixSetDao || (this.tileMatrixSetDao = new TileMatrixSetDao(this));\n};\n\n/**\n * @returns {module:tiles/matrixset~TileMatrixDao} the DAO to access the [tile matrix]{@link module:tiles/matrixset~TileMatrix} in this `GeoPackage`\n */\nGeoPackage.prototype.getTileMatrixDao = function() {\n  return this.tileMatrixDao || (this.tileMatrixDao = new TileMatrixDao(this));\n}\n\nGeoPackage.prototype.getDataColumnsDao = function() {\n  return this.dataColumnsDao || (this.dataColumnsDao = new DataColumnsDao(this));\n}\n\nGeoPackage.prototype.getExtensionDao = function() {\n  return this.extensionDao || (this.extensionDao = new ExtensionDao(this));\n}\n\nGeoPackage.prototype.getTableIndexDao = function() {\n  return this.tableIndexDao || (this.tableIndexDao = new TableIndexDao(this));\n}\n\nGeoPackage.prototype.getGeometryColumnsDao = function () {\n  return this.geometryColumnsDao || (this.geometryColumnsDao = new GeometryColumnsDao(this));\n};\n\nGeoPackage.prototype.getDataColumnConstraintsDao = function () {\n  return this.dataColumnConstraintsDao || (this.dataColumnConstraintsDao = new DataColumnConstraintsDao(this));\n};\n\nGeoPackage.prototype.getMetadataReferenceDao = function () {\n  return this.metadataReferenceDao || (this.metadataReferenceDao = new MetadataReferenceDao(this));\n};\n\nGeoPackage.prototype.getMetadataDao = function () {\n  return this.metadataDao || (this.metadataDao = new MetadataDao(this));\n};\n\nGeoPackage.prototype.getExtendedRelationDao = function() {\n  return this.extendedRelationDao || (this.extendedRelationDao = new ExtendedRelationDao(this));\n}\n\nGeoPackage.prototype.getContentsIdDao = function() {\n  return this.contentsIdDao || (this.contentsIdDao = new ContentsIdDao(this));\n}\n\nGeoPackage.prototype.getContentsIdExtension = function() {\n  return this.contentsIdExtension || (this.contentsIdExtension = new ContentsIdExtension(this));\n}\n\nGeoPackage.prototype.getFeatureStyleExtension = function() {\n  return this.featureStyleExtension || (this.featureStyleExtension = new FeatureStyleExtension(this));\n}\n\nGeoPackage.prototype.getGeometryIndexDao = function(featureDao) {\n  return new GeometryIndexDao(this, featureDao);\n}\n\nGeoPackage.prototype.getRelatedTablesExtension = function() {\n  return this.relatedTablesExtension || (this.relatedTablesExtension = new RelatedTablesExtension(this));\n}\n\nGeoPackage.prototype.getSrs = function(srsId) {\n  var dao = this.getSpatialReferenceSystemDao();\n  return dao.queryForId(srsId);\n}\n\nGeoPackage.prototype.createRequiredTables = function() {\n  var geopackage = this;\n  return this.tableCreator.createRequired()\n  .then(function(results) {\n    return geopackage;\n  });\n}\n\nGeoPackage.prototype.createSupportedExtensions = function() {\n  var crs = new CrsWktExtension(this);\n  crs.getOrCreateExtension();\n  var schema = new SchemaExtension(this);\n  schema.getOrCreateExtension();\n  return this;\n}\n\n/**\n * @returns {module:tiles/user/tileDao~TileDao} the `TileDao` to access [tiles]{@link module:tiles/user/tileTable}\n */\nGeoPackage.prototype.getTileDaoWithTileMatrixSet = function (tileMatrixSet) {\n  var tileMatrices = [];\n  var tileMatrixDao = this.getTileMatrixDao();\n  var results = tileMatrixDao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, tileMatrixSet.table_name, null, null, TileMatrixDao.COLUMN_ZOOM_LEVEL + ' ASC, ' + TileMatrixDao.COLUMN_PIXEL_X_SIZE + ' DESC, ' + TileMatrixDao.COLUMN_PIXEL_Y_SIZE + ' DESC');\n  results.forEach(function(result) {\n    var tm = new TileMatrix();\n    tileMatrixDao.populateObjectFromResult(tm, result);\n    tileMatrices.push(tm);\n  });\n  var tableReader = new TileTableReader(tileMatrixSet);\n  var tileTable = tableReader.readTileTable(this);\n  return new TileDao(this, tileTable, tileMatrixSet, tileMatrices);\n};\n\nGeoPackage.prototype.getTileDaoWithContents = function (contents) {\n  var dao = this.getContentsDao();\n  var tileMatrixSet = dao.getTileMatrixSet(contents);\n  return this.getTileDaoWithTileMatrixSet(tileMatrixSet);\n};\n\nGeoPackage.prototype.getTileDao = function (tableName) {\n  var tms = this.getTileMatrixSetDao();\n  var results = tms.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, tableName);\n  if (results.length > 1) {\n    throw new Error('Unexpected state. More than one Tile Matrix Set matched for table name: ' + tableName + ', count: ' + results.length);\n  } else if (results.length === 0) {\n    throw new Error('No Tile Matrix found for table name: ' + tableName);\n  }\n  var tileMatrixSet = new TileMatrixSet();\n  tms.populateObjectFromResult(tileMatrixSet, results[0]);\n  return this.getTileDaoWithTileMatrixSet(tileMatrixSet);\n};\n\n/**\n * Return a hash containing arrays of table names grouped under keys `features`,\n * `tiles`, and `attributes`.\n * @return {{features: string[], tiles: string[], attributes: string[]}}\n */\nGeoPackage.prototype.getTables = function() {\n  var tables = {};\n  var featureTables = this.getFeatureTables();\n  tables.features = featureTables;\n  var tileTables = this.getTileTables();\n  tables.tiles = tileTables;\n  var attributesTables = this.getAttributesTables();\n  tables.attributes = attributesTables;\n  return tables;\n};\n\nGeoPackage.prototype.getAttributesTables = function() {\n  return this.getContentsDao().getTables(ContentsDao.GPKG_CDT_ATTRIBUTES_NAME);\n}\n\nGeoPackage.prototype.hasAttributeTable = function(attributeTableName) {\n  var tables = this.getAttributesTables();\n  return tables && tables.indexOf(attributeTableName) != -1;\n}\n\n/**\n *  Get the tile tables\n *  @param {callback} callback called with an error if one occurred and the array of {TileTable} names\n */\nGeoPackage.prototype.getTileTables = function () {\n  var tms = this.getTileMatrixSetDao();\n  if (!tms.isTableExists()) {\n    return [];\n  }\n  return tms.getTileTables();\n};\n\n/**\n * Checks if the tile table exists in the GeoPackage\n * @param  {String} tileTableName name of the table to query for\n * @param  {Function} callback   called with an error if one occurred and true or false for the existence of the table\n */\nGeoPackage.prototype.hasTileTable = function(tileTableName) {\n  var tables = this.getTileTables();\n  return tables && tables.indexOf(tileTableName) != -1;\n};\n\n/**\n * Checks if the feature table exists in the GeoPackage\n * @param  {GeoPackage}   geopackage open GeoPackage object\n * @param  {String} featureTableName name of the table to query for\n * @param  {Function} callback   called with an error if one occurred and true or false for the existence of the table\n */\nGeoPackage.prototype.hasFeatureTable = function(featureTableName) {\n  var tables = this.getFeatureTables();\n  return tables && tables.indexOf(featureTableName) != -1;\n};\n\n/**\n *  Get the feature tables\n *  @param {callback} callback called with an error if one occurred and the array of {FeatureTable} names\n */\nGeoPackage.prototype.getFeatureTables = function () {\n  var gcd = this.getGeometryColumnsDao();\n  if (!gcd.isTableExists()) {\n    return [];\n  }\n  return gcd.getFeatureTables();\n};\n\nGeoPackage.prototype.isTable = function(tableName) {\n  return !!this.connection.tableExists(tableName);\n}\n\nGeoPackage.prototype.isTableType = function(type, tableName) {\n  return type === this.getTableType(tableName);\n}\n\nGeoPackage.prototype.getTableType = function(tableName) {\n  var contents = this.getTableContents(tableName);\n  if (contents) {\n    return contents.data_type;\n  }\n}\n\nGeoPackage.prototype.getTableContents = function(tableName) {\n  return this.getContentsDao().queryForId(tableName);\n}\n\nGeoPackage.prototype.deleteTable = function(tableName) {\n  this.connection.dropTable(tableName);\n}\n\nGeoPackage.prototype.getTableCreator = function() {\n  return this.tableCreator;\n}\n\nGeoPackage.prototype.index = function() {\n  var tables = this.getFeatureTables();\n\n  return tables.reduce(function(sequence, table) {\n    return sequence.then(function() {\n      return this.indexFeatureTable(table)\n      .then(function(indexed) {\n        if (indexed) {\n          return true;\n        } else {\n          throw new Error('Unable to index table ' + table);\n        }\n      });\n    }.bind(this))\n  }.bind(this), Promise.resolve());\n}\n\nGeoPackage.prototype.indexFeatureTable = function(table, progress) {\n  var featureDao = this.getFeatureDao(table);\n  var fti = featureDao.featureTableIndex;\n  return new Promise(function(resolve, reject) {\n    var tableIndex = fti.getTableIndex();\n    if (tableIndex) {\n      return resolve(true);\n    }\n    resolve(fti.index(progress));\n  });\n}\n\n/**\n *  Get a Feature DAO from Geometry Columns\n *\n *  @param {GeometryColumns} geometryColumns Geometry Columns\n *  @param {callback} callback called with an error if one occurred and the {FeatureDao}\n */\nGeoPackage.prototype.getFeatureDaoWithGeometryColumns = function (geometryColumns) {\n  if (!geometryColumns) {\n    throw new Error('Non null Geometry Columns is required to create Feature DAO');\n  }\n\n  var tableReader = new FeatureTableReader(geometryColumns);\n  var featureTable = tableReader.readFeatureTable(this);\n  var dao = new FeatureDao(this, featureTable, geometryColumns, this.metadataDb);\n  return dao;\n};\n\n/**\n * Get a Feature DAO from Contents\n * @param  {Contents}   contents Contents\n * @param  {Function} callback callback called with an error if one occurred and the {FeatureDao}\n */\nGeoPackage.prototype.getFeatureDaoWithContents = function (contents) {\n  var dao = this.getContentsDao();\n  var columns = dao.getGeometryColumns(contents);\n  return this.getFeatureDaoWithGeometryColumns(columns);\n};\n\n/**\n * Get a Feature DAO from Contents\n * @param  {string}   tableName table name\n * @param  {Function} callback callback called with an error if one occurred and the {FeatureDao}\n */\nGeoPackage.prototype.getFeatureDao = function (tableName) {\n  var dao = this.getGeometryColumnsDao();\n  var geometryColumns = dao.queryForTableName(tableName);\n  if (!geometryColumns) {\n    throw new Error('No Feature Table exists for table name: ' + tableName);\n  }\n  return this.getFeatureDaoWithGeometryColumns(geometryColumns);\n};\n\n/**\n * Queries for GeoJSON features in a feature table\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} callback    Caled with err, featureArray\n */\nGeoPackage.prototype.queryForGeoJSONFeaturesInTable = function(tableName, boundingBox) {\n  var featureDao = this.getFeatureDao(tableName);\n  var features = [];\n  var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox);\n  for (var feature of iterator) {\n    features.push(feature);\n  }\n  return features;\n}\n\n/**\n * iterates GeoJSON features in a feature table within a bounding box\n * @param  {String}   tableName   Table name to query\n * @param  {BoundingBox}   boundingBox BoundingBox to query\n * @param  {Function} rowCallback    Caled with err, geoJSON\n * @param  {Function} doneCallback    Caled with err if one occurred\n */\nGeoPackage.prototype.iterateGeoJSONFeaturesInTableWithinBoundingBox = function(tableName, boundingBox) {\n  var featureDao = this.getFeatureDao(tableName);\n  return featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox);\n}\n\n/**\n * Create the Geometry Columns table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createGeometryColumnsTable = function () {\n  var dao = this.getGeometryColumnsDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createGeometryColumns();\n};\n\n/**\n * Get a Attribute DAO\n * @param  {string}   tableName table name\n * @param  {Function} callback callback called with an error if one occurred and the {AttributeDao}\n */\nGeoPackage.prototype.getAttributeDaoWithTableName = function (tableName) {\n  var dao = this.getContentsDao();\n  var contents = dao.queryForId(tableName);\n  return this.getAttributeDaoWithContents(contents);\n};\n\n/**\n * Get a Attribute DAO\n * @param  {Contents}   contents Contents\n * @param  {Function} callback callback called with an error if one occurred and the {AttributeDao}\n */\nGeoPackage.prototype.getAttributeDaoWithContents = function (contents) {\n  if (!contents) {\n    throw new Error('Non null Contents is required to create an Attributes DAO');\n  }\n\n  var reader = new AttributeTableReader(contents.table_name);\n  var table = reader.readTable(this.connection);\n  table.setContents(contents);\n  return new AttributeDao(this, table);\n}\n\nGeoPackage.prototype.createAttributeTable = function(tableName, columns, dataColumns) {\n  return Promise.resolve()\n  .then(function() {\n    var attributeTable = new AttributeTable(tableName, columns);\n    var result = this.tableCreator.createUserTable(attributeTable);\n    var contents = new Contents();\n    contents.table_name = tableName;\n    contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME;\n    contents.identifier = tableName;\n    contents.last_change = new Date().toISOString();\n\n    return this.getContentsDao().create(contents);\n  }.bind(this))\n  .then(function() {\n    if (dataColumns) {\n      return this.createDataColumns()\n      .then(function() {\n        var dataColumnsDao = this.getDataColumnsDao();\n        dataColumns.forEach(function(dataColumn) {\n          dataColumnsDao.create(dataColumn);\n        });\n      }.bind(this));\n    }\n  }.bind(this))\n  .then(function() {\n    return true;\n  });\n}\n\n/**\n * Create the given {@link module:features/user/featureTable~FeatureTable}\n * @param  {FeatureTable}   featureTable    feature table\n */\nGeoPackage.prototype.createFeatureTable = function(featureTable) {\n  return this.tableCreator.createUserTable(featureTable);\n};\n\nGeoPackage.prototype.createFeatureTableWithGeometryColumns = function(geometryColumns, boundingBox, srsId, columns) {\n  return this.createFeatureTableWithGeometryColumnsAndDataColumns(geometryColumns, boundingBox, srsId, columns, undefined);\n};\n\nGeoPackage.prototype.createFeatureTableWithGeometryColumnsAndDataColumns = function(geometryColumns, boundingBox, srsId, columns, dataColumns) {\n  return this.createGeometryColumnsTable()\n  .then(function(result) {\n    var featureTable = new FeatureTable(geometryColumns.table_name, columns);\n    var result = this.createFeatureTable(featureTable);\n    var contents = new Contents();\n    contents.table_name = geometryColumns.table_name;\n    contents.data_type = ContentsDao.GPKG_CDT_FEATURES_NAME;\n    contents.identifier = geometryColumns.table_name;\n    contents.last_change = new Date().toISOString();\n    contents.min_x = boundingBox.minLongitude;\n    contents.min_y = boundingBox.minLatitude;\n    contents.max_x = boundingBox.maxLongitude;\n    contents.max_y = boundingBox.maxLatitude;\n    contents.srs_id = srsId;\n\n    this.getContentsDao().create(contents);\n    geometryColumns.srs_id = srsId;\n    return this.getGeometryColumnsDao().create(geometryColumns);\n  }.bind(this))\n  .then(function() {\n    if (dataColumns) {\n      return this.createDataColumns()\n      .then(function() {\n        var dataColumnsDao = this.getDataColumnsDao();\n        dataColumns.forEach(function(dataColumn) {\n          dataColumnsDao.create(dataColumn);\n        });\n      }.bind(this));\n    }\n  }.bind(this))\n  .then(function() {\n    return true;\n  });\n};\n\n/**\n * Create the Tile Matrix Set table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createTileMatrixSetTable = function() {\n  var dao = this.getTileMatrixSetDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createTileMatrixSet();\n}\n\n/**\n * Create the Tile Matrix table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createTileMatrixTable = function() {\n  var dao = this.getTileMatrixDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createTileMatrix();\n};\n\n/**\n * Create the given tile table in this GeoPackage.\n *\n * @param  {module:tiles/user/tileTable~TileTable} tileTable\n * @returns {@link module:db/tableCreator~TableCreator#createUserTable}\n */\nGeoPackage.prototype.createTileTable = function(tileTable) {\n  return this.tableCreator.createUserTable(tileTable);\n};\n\n/**\n * Create a new [tile table]{@link module:tiles/user/tileTable~TileTable} in this GeoPackage.\n *\n * @param {String} tableName tile table name\n * @param {BoundingBox} contentsBoundingBox bounding box of the contents table\n * @param {Number} contentsSrsId srs id of the contents table\n * @param {BoundingBox} tileMatrixSetBoundingBox bounding box of the matrix set\n * @param {Number} tileMatrixSetSrsId srs id of the matrix set\n * @returns {Promise<module:tiles/matrixset~TileMatrixSet>} `Promise` of the created {@link module:tiles/matrixset~TileMatrixSet}\n */\nGeoPackage.prototype.createTileTableWithTableName = function(tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId) {\n  const columns = TileTable.createRequiredColumns();\n  const tileTable = new TileTable(tableName, columns);\n  const contents = new Contents();\n  contents.table_name = tableName;\n  contents.data_type = ContentsDao.GPKG_CDT_TILES_NAME;\n  contents.identifier = tableName;\n  contents.last_change = new Date().toISOString();\n  contents.min_x = contentsBoundingBox.minLongitude;\n  contents.min_y = contentsBoundingBox.minLatitude;\n  contents.max_x = contentsBoundingBox.maxLongitude;\n  contents.max_y = contentsBoundingBox.maxLatitude;\n  contents.srs_id = contentsSrsId;\n\n  const tileMatrixSet = new TileMatrixSet();\n  tileMatrixSet.setContents(contents);\n  tileMatrixSet.srs_id = tileMatrixSetSrsId;\n  tileMatrixSet.min_x = tileMatrixSetBoundingBox.minLongitude;\n  tileMatrixSet.min_y = tileMatrixSetBoundingBox.minLatitude;\n  tileMatrixSet.max_x = tileMatrixSetBoundingBox.maxLongitude;\n  tileMatrixSet.max_y = tileMatrixSetBoundingBox.maxLatitude;\n\n  return this.createTileMatrixSetTable()\n    .then(function() {\n      return this.createTileMatrixTable();\n    }.bind(this))\n    .then(function() {\n      return this.createTileTable(tileTable);\n    }.bind(this))\n    .then(function() {\n      return this.getContentsDao().create(contents);\n    }.bind(this))\n    .then(function() {\n      return this.getTileMatrixSetDao().create(tileMatrixSet);\n    }.bind(this))\n    .then(function() {\n      return tileMatrixSet;\n    });\n};\n\n/**\n * Create the tables and rows necessary to store tiles in a {@link module:tiles/matrixset~TileMatrixSet}.\n * This will create a [tile matrix row]{@link module:tiles/matrix~TileMatrix}\n * for every integral zoom level in the range `[minZoom..maxZoom]`.\n *\n * @param {BoundingBox} epsg3857TileBoundingBox\n * @param {module:tiles/matrixset~TileMatrixSet} tileMatrixSet\n * @param {number} minZoom\n * @param {number} maxZoom\n * @param {number} [tileSize=256] optional tile size in pixels\n * @returns {module:geoPackage~GeoPackage} `this` `GeoPackage`\n */\nGeoPackage.prototype.createStandardWebMercatorTileMatrix = function(epsg3857TileBoundingBox, tileMatrixSet, minZoom, maxZoom, tileSize) {\n  tileSize = tileSize || 256;\n  var tileMatrixDao = this.getTileMatrixDao();\n\n  for (var zoom = minZoom; zoom <= maxZoom; zoom++) {\n    var box = TileBoundingBoxUtils.webMercatorTileBox(epsg3857TileBoundingBox, zoom);\n    var matrixWidth = (box.maxX - box.minX) + 1;\n    var matrixHeight = (box.maxY - box.minY) + 1;\n\n    var pixelXSize = ((epsg3857TileBoundingBox.maxLongitude - epsg3857TileBoundingBox.minLongitude) / matrixWidth) / tileSize;\n    var pixelYSize = ((epsg3857TileBoundingBox.maxLatitude - epsg3857TileBoundingBox.minLatitude) / matrixHeight) / tileSize;\n\n    var tileMatrix = new TileMatrix();\n    tileMatrix.table_name = tileMatrixSet.table_name;\n    tileMatrix.zoom_level = zoom;\n    tileMatrix.matrix_width = matrixWidth;\n    tileMatrix.matrix_height = matrixHeight;\n    tileMatrix.tile_width = tileSize;\n    tileMatrix.tile_height = tileSize;\n    tileMatrix.pixel_x_size = pixelXSize;\n    tileMatrix.pixel_y_size = pixelYSize;\n    tileMatrixDao.create(tileMatrix);\n  }\n\n  return this;\n};\n\n/**\n * Adds a tile to the GeoPackage\n * @param  {object}   tile       Byte array or Buffer containing the tile bytes\n * @param  {String}   tableName  Table name to add the tile to\n * @param  {Number}   zoom       zoom level of this tile\n * @param  {Number}   tileRow    row of this tile\n * @param  {Number}   tileColumn column of this tile\n */\nGeoPackage.prototype.addTile = function(tileStream, tableName, zoom, tileRow, tileColumn) {\n  var tileDao = this.getTileDao(tableName);\n  var newRow = tileDao.newRow();\n  newRow.setZoomLevel(zoom);\n  newRow.setTileColumn(tileColumn);\n  newRow.setTileRow(tileRow);\n  newRow.setTileData(tileStream);\n  return tileDao.create(newRow);\n};\n\n/**\n * Create the Data Columns table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createDataColumns = function() {\n  var dao = this.getDataColumnsDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createDataColumns();\n};\n\n/**\n * Create the Data Column Constraints table if it does not already exist\n * @param  {Function} callback called with an error if one occurred otherwise the table now exists\n */\nGeoPackage.prototype.createDataColumnConstraintsTable = function () {\n  var dao = this.getDataColumnConstraintsDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createDataColumnConstraints();\n};\n\nGeoPackage.prototype.createMetadataTable = function () {\n  var dao = this.getMetadataDao()\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createMetadata();\n};\n\nGeoPackage.prototype.createMetadataReferenceTable = function () {\n  var dao = this.getMetadataReferenceDao()\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createMetadataReference();\n};\n\nGeoPackage.prototype.createExtensionTable = function () {\n  var dao = this.getExtensionDao()\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createExtensions();\n};\n\nGeoPackage.prototype.createTableIndexTable = function () {\n  var dao = this.getTableIndexDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createTableIndex();\n};\n\nGeoPackage.prototype.createGeometryIndexTable = function() {\n  var dao = this.getGeometryIndexDao();\n  if (dao.isTableExists()) {\n    return Promise.resolve().then(function() { return true; });\n  }\n  return this.tableCreator.createGeometryIndex();\n};\n\nGeoPackage.prototype.createStyleMappingTable = function(tableName, columns, dataColumns) {\n  return Promise.resolve()\n    .then(function() {\n      var attributeTable = new StyleMappingTable(tableName, columns);\n      var result = this.tableCreator.createUserTable(attributeTable);\n      var contents = new Contents();\n      contents.table_name = tableName;\n      contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME;\n      contents.identifier = tableName;\n      contents.last_change = new Date().toISOString();\n\n      return this.getContentsDao().create(contents);\n    }.bind(this))\n    .then(function() {\n      if (dataColumns) {\n        return this.createDataColumns()\n          .then(function() {\n            var dataColumnsDao = this.getDataColumnsDao();\n            dataColumns.forEach(function(dataColumn) {\n              dataColumnsDao.create(dataColumn);\n            });\n          }.bind(this));\n      }\n    }.bind(this))\n    .then(function() {\n      return true;\n    });\n}\n\n/**\n * Get the application id of the GeoPackage\n * @param  {Function} callback callback called with the application id\n */\nGeoPackage.prototype.getApplicationId = function() {\n  var connection = this.getDatabase();\n  return connection.getApplicationId();\n}\n\nGeoPackage.prototype.getInfoForTable = function (tableDao) {\n  var info = {};\n  info.tableName = tableDao.table_name;\n  info.tableType = tableDao.table.getTableType();\n  info.count = tableDao.getCount();\n  if (info.tableType === UserTable.FEATURE_TABLE) {\n    info.geometryColumns = {};\n    info.geometryColumns.tableName = tableDao.geometryColumns.table_name;\n    info.geometryColumns.geometryColumn = tableDao.geometryColumns.column_name;\n    info.geometryColumns.geometryTypeName = tableDao.geometryColumns.geometry_type_name;\n    info.geometryColumns.z = tableDao.geometryColumns.z;\n    info.geometryColumns.m = tableDao.geometryColumns.m;\n  }\n  if (info.tableType === UserTable.TILE_TABLE) {\n    info.minZoom = tableDao.minZoom;\n    info.maxZoom = tableDao.maxZoom;\n    info.minWebMapZoom = tableDao.minWebMapZoom;\n    info.maxWebMapZoom = tableDao.maxWebMapZoom;\n    info.zoomLevels = tableDao.tileMatrices.length;\n  }\n\n  var dao;\n  var contentsRetriever;\n  if (info.tableType === UserTable.FEATURE_TABLE) {\n    dao = this.getGeometryColumnsDao();\n    contentsRetriever = tableDao.geometryColumns;\n  } else if (info.tableType === UserTable.TILE_TABLE) {\n    dao = this.getTileMatrixSetDao();\n    contentsRetriever = tableDao.tileMatrixSet;\n    info.tileMatrixSet = {};\n    info.tileMatrixSet.srsId = tableDao.tileMatrixSet.srs_id;\n    info.tileMatrixSet.minX = tableDao.tileMatrixSet.min_x;\n    info.tileMatrixSet.maxX = tableDao.tileMatrixSet.max_x;\n    info.tileMatrixSet.minY = tableDao.tileMatrixSet.min_y;\n    info.tileMatrixSet.maxY = tableDao.tileMatrixSet.max_y;\n  }\n  var contents = dao.getContents(contentsRetriever);\n  info.contents = {};\n  info.contents.tableName = contents.table_name;\n  info.contents.dataType = contents.data_type;\n  info.contents.identifier = contents.identifier;\n  info.contents.description = contents.description;\n  info.contents.lastChange = contents.last_change;\n  info.contents.minX = contents.min_x;\n  info.contents.maxX = contents.max_x;\n  info.contents.minY = contents.min_y;\n  info.contents.maxY = contents.max_y;\n  var contentsDao = this.getContentsDao();\n  var contentsSrs = contentsDao.getSrs(contents);\n  info.contents.srs = {\n    name:contentsSrs.srs_name,\n    id:contentsSrs.srs_id,\n    organization:contentsSrs.organization,\n    organization_coordsys_id:contentsSrs.organization_coordsys_id,\n    definition:contentsSrs.definition,\n    description:contentsSrs.description\n  };\n  var srs = tableDao.getSrs();\n\n  info.srs = {\n    name:srs.srs_name,\n    id:srs.srs_id,\n    organization:srs.organization,\n    organization_coordsys_id:srs.organization_coordsys_id,\n    definition:srs.definition,\n    description:srs.description\n  };\n  info.columns = [];\n  info.columnMap = {};\n\n  var dcd = this.getDataColumnsDao();\n\n  tableDao.table.columns.forEach(function(column) {\n    var dataColumn = dcd.getDataColumns(tableDao.table.table_name, column.name);\n    info.columns.push({\n      index: column.index,\n      name: column.name,\n      max: column.max,\n      min: column.min,\n      notNull: column.notNull,\n      primaryKey: column.primaryKey,\n      dataType: column.dataType ? DataTypes.name(column.dataType) : '',\n      displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name,\n      dataColumn: dataColumn\n    });\n    info.columnMap[column.name] = info.columns[info.columns.length-1];\n  }.bind(this));\n\n  return info;\n};\n\n},{\"./attributes/attributeDao\":3,\"./attributes/attributeTable\":5,\"./attributes/attributeTableReader\":6,\"./core/contents\":8,\"./core/srs\":9,\"./dataColumnConstraints\":12,\"./dataColumns\":13,\"./db/dataTypes\":14,\"./db/tableCreator\":19,\"./extension\":25,\"./extension/contents/.\":23,\"./extension/contents/contentsIdDao\":22,\"./extension/crsWkt\":24,\"./extension/index/geometryIndex\":27,\"./extension/index/tableIndex\":28,\"./extension/relatedTables\":32,\"./extension/relatedTables/extendedRelation\":31,\"./extension/schema\":45,\"./extension/style/.\":54,\"./features/columns\":64,\"./features/user/featureDao\":66,\"./features/user/featureTable\":68,\"./features/user/featureTableReader\":69,\"./metadata\":74,\"./metadata/reference\":75,\"./proj4Defs\":77,\"./tiles/matrix\":90,\"./tiles/matrixset\":91,\"./tiles/tileBoundingBoxUtils\":93,\"./tiles/user/tileDao\":96,\"./tiles/user/tileTable\":99,\"./tiles/user/tileTableReader\":100,\"./user/userTable\":108,\"proj4\":285}],71:[function(require,module,exports){\n/**\n * GeoPackage Constants module.\n * @module dao/geoPackageConstants\n */\n\n/** @constant {string} GEOPACKAGE_EXTENSION Extension to GeoPackage files */\nexports.GEOPACKAGE_EXTENSION = 'gpkg';\n/** @constant {string} GEOPACKAGE_EXTENDED_EXTENSION Extension to GeoPackage extension files */\nexports.GEOPACKAGE_EXTENDED_EXTENSION = 'gpkx';\n/** @constant {string} APPLICATION_ID GeoPackage application id */\nexports.APPLICATION_ID = 'GPKG';\n/** @constant {string} USER_VERSION GeoPackage user version */\nexports.USER_VERSION = '10200';\n/** @constant {string} GEOPACKAGE_EXTENSION_AUTHOR GeoPackage author */\nexports.GEOPACKAGE_EXTENSION_AUTHOR = exports.GEOPACKAGE_EXTENSION;\n/** @constant {string} GEOMETRY_EXTENSION_PREFIX Geometry extension prefix */\nexports.GEOMETRY_EXTENSION_PREFIX = 'geom';\n/** @constant {string} GEOPACKAGE_GEOMETRY_MAGIX_NUMBER Expected magic number */\nexports.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER = 'GP';\n/** @constant {string} GEOPACKAGE_GEOMETRY_VERSION_1 Expected version 1 value */\nexports.GEOPACKAGE_GEOMETRY_VERSION_1 = 0;\n/** @constant {string} SQLITE_HEADER_PREFIX SQLite header string prefix */\nexports.SQLITE_HEADER_PREFIX = 'SQLite format 3';\n\n},{}],72:[function(require,module,exports){\nvar wkx = require('wkx');\nvar turfBbox = require('@turf/bbox');\n\nmodule.exports.buildEnvelopeWithGeometry = function(wkbGeometry) {\n  var geoJson = wkbGeometry.toGeoJSON();\n  var bbox = turfBbox(geoJson);\n  return {\n    minX: bbox[0],\n    minY: bbox[1],\n    maxX: bbox[2],\n    maxY: bbox[3]\n  };\n}\n\nmodule.exports.expandEnvelopeForGeometry = function(envelope, wkbGeometry) {\n\n}\n\n},{\"@turf/bbox\":117,\"wkx\":360}],73:[function(require,module,exports){\n(function (Buffer){\n/**\n * GeometryData module.\n * @module geom/geometryData\n */\n\nvar GeoPackageConstants = require('../geoPackageConstants');\n\nvar wkx = require('wkx');\n\nvar BIG_ENDIAN = 0;\nvar LITTLE_ENDIAN = 1;\n\n/**\n * GeoPackage Geometry Data\n */\nvar GeometryData = function(buffer) {\n  this.empty = true;\n  this.byteOrder = BIG_ENDIAN;\n  if (buffer) {\n    this.fromData(buffer);\n  }\n}\n\nmodule.exports = GeometryData;\n\nGeometryData.prototype.setSrsId = function(srsId) {\n  this.srsId = srsId;\n}\n\nGeometryData.prototype.setGeometry = function(wkbGeometry) {\n  this.empty = false;\n  this.geometry = wkbGeometry;\n}\n\nGeometryData.prototype.setEnvelope = function(envelope) {\n  this.envelope = envelope;\n}\n\nGeometryData.prototype.toGeoJSON = function() {\n  return this.geometry.toGeoJSON();\n}\n\nGeometryData.prototype.fromData = function (buffer) {\n  this.buffer = buffer;\n  if (buffer instanceof Uint8Array) {\n    this.buffer = buffer = Buffer.from(buffer);\n  }\n  var magicString = buffer.toString('ascii', 0, 2);\n  if (magicString !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER) {\n    throw new Error('Unexpected GeoPackage Geometry magic number: ' + magicString + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER);\n  }\n\n  var version = buffer.readUInt8(2);\n  if (version !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1) {\n    throw new Error('Unexpected GeoPackage Geometry version ' + version + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1);\n  }\n\n  var flags = buffer.readUInt8(3);\n  var envelopeIndicator = this.readFlags(flags);\n\n  this.srsId = buffer[this.byteOrder ? 'readUInt32LE' : 'readUInt32BE'](4);\n  var envelopeAndOffset = this.readEnvelope(envelopeIndicator, buffer);\n  this.envelope = envelopeAndOffset.envelope;\n\n  var offset = envelopeAndOffset.offset;\n\n  var wkbBuffer = buffer.slice(offset);\n  try {\n    this.geometry = wkx.Geometry.parse(wkbBuffer);\n    this.geometryError = undefined;\n  } catch (error) {\n    this.geometryError = error.message;\n    console.log('Error parsing geometry');\n  }\n};\n\nGeometryData.prototype.toData = function() {\n  var header = Buffer.alloc(8);\n\n  // Write GP as the 2 byte magic number\n  header.write(GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER);\n\n  // Write a byte as the version value of 0 = version 1\n  header.writeUInt8(GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1, 2);\n\n  // Build and write a flags byte\n  var flags = this.buildFlagsByte();\n  header.writeUInt8(flags, 3);\n\n  // write the 4 byte srs id\n  header[this.byteOrder ? 'writeUInt32LE' : 'writeUInt32BE'](this.srsId, 4);\n\n  var envelopeBuffer = this.writeEnvelope(this.envelope);\n  var concatArray = [header, envelopeBuffer];\n  try {\n    concatArray.push(this.geometry.toWkb());\n    this.geometryError = undefined;\n  } catch (error) {\n    this.geometryError = error.message;\n  }\n\n  this.buffer = Buffer.concat(concatArray);\n  return this.buffer;\n};\n\nGeometryData.prototype.writeEnvelope = function() {\n  if (!this.envelope) return Buffer.alloc(0);\n\n  var writeDoubleMethod = 'writeDouble' + (this.byteOrder ? 'LE' : 'BE');\n\n  var length = 32;\n  if (this.envelope.hasZ) {\n    length += 16;\n  }\n  if (this.envelope.hasM) {\n    length += 16;\n  }\n  var envelopeBuffer = Buffer.alloc(length);\n  envelopeBuffer[writeDoubleMethod](this.envelope.minX, 0);\n  envelopeBuffer[writeDoubleMethod](this.envelope.maxX, 8);\n  envelopeBuffer[writeDoubleMethod](this.envelope.minY, 16);\n  envelopeBuffer[writeDoubleMethod](this.envelope.maxY, 24);\n\n  var position = 32;\n  if (this.envelope.hasZ) {\n    envelopeBuffer[writeDoubleMethod](this.envelope.minZ, position);\n    envelopeBuffer[writeDoubleMethod](this.envelope.maxZ, position+8);\n    position = 48;\n  }\n  if (this.envelope.hasM) {\n    envelopeBuffer[writeDoubleMethod](this.envelope.minM, position);\n    envelopeBuffer[writeDoubleMethod](this.envelope.maxM, position+8);\n  }\n\n  return envelopeBuffer;\n};\n\nGeometryData.prototype.buildFlagsByte = function() {\n  var flag = 0;\n\n  // Add the binary type to bit 5, 0 for standard and 1 for extended\n  var binaryType = this.extended ? 1 : 0;\n  flag += (binaryType << 5);\n\n  // Add the empty geometry flag to bit 4, 0 for non-empty and 1 for empty\n  var emptyValue = this.empty ? 1 : 0;\n  flag += (emptyValue << 4);\n\n  // Add the envelope contents indicator code (3-bit unsigned integer to bits 3, 2, and 1)\n  var envelopeIndicator = !this.envelope ? 0 : this.getIndicatorWithEnvelope(this.envelope);\n  flag += (envelopeIndicator << 1);\n\n  // Add the byte order to bit 0, 0 for Big Endian and 1 for Little Endian\n  var byteOrderValue = (this.byteOrder === BIG_ENDIAN) ? 0 : 1;\n  flag += byteOrderValue;\n\n  return flag;\n};\n\nGeometryData.prototype.getIndicatorWithEnvelope = function(envelope) {\n  var indicator = 1;\n  if (envelope.hasZ) {\n    indicator++;\n  }\n  if (envelope.hasM) {\n    indicator += 2;\n  }\n  return indicator;\n};\n\nGeometryData.prototype.readFlags = function (flagsInt) {\n  // Verify the reserved bits at 7 and 6 are 0\n  var reserved7 = (flagsInt >> 7) & 1;\n  var reserved6 = (flagsInt >> 6) & 1;\n  if (reserved7 !== 0 || reserved6 !== 0) {\n      throw new Error('Unexpected GeoPackage Geometry flags. Flag bit 7 and 6 should both be 0, 7='+reserved7+', 6='+ reserved6);\n  }\n\n  // Get the binary type from bit 5, 0 for standard and 1 for extended\n  var binaryType = (flagsInt >> 5) & 1;\n  this.extended = binaryType == 1;\n\n  // Get the empty geometry flag from bit 4, 0 for non-empty and 1 for\n  // empty\n  var emptyValue = (flagsInt >> 4) & 1;\n  this.empty = emptyValue == 1;\n\n  // Get the envelope contents indicator code (3-bit unsigned integer from\n  // bits 3, 2, and 1)\n  var envelopeIndicator = (flagsInt >> 1) & 7;\n  if (envelopeIndicator > 4) {\n      throw new Error('Unexpected GeoPackage Geometry flags. Envelope contents indicator must be between 0 and 4. Actual: ' + envelopeIndicator);\n  }\n\n  // Get the byte order from bit 0, 0 for Big Endian and 1 for Little Endian\n  var byteOrderValue = flagsInt & 1;\n  this.byteOrder = byteOrderValue;\n  return envelopeIndicator;\n};\n\nGeometryData.prototype.readEnvelope = function (envelopeIndicator, buffer) {\n  var readDoubleMethod = 'readDouble' + (this.byteOrder ? 'LE' : 'BE');\n\n  var envelopeByteOffset = 8;\n  reads = 0;\n  var envelopeAndOffset = {\n    envelope: undefined,\n    offset: envelopeByteOffset\n  };\n\n  if (envelopeIndicator <= 0) {\n    return envelopeAndOffset;\n  }\n  var envelope = {};\n  // Read x and y values and create envelope\n  envelope.minX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  envelope.maxX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  envelope.minY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  envelope.maxY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n\n  envelope.hasZ = false;\n  var minZ = undefined;\n  var maxZ = undefined;\n\n  envelope.hasM = false;\n  var minM = undefined;\n  var maxM = undefined;\n\n  // Read z values\n  if (envelopeIndicator === 2 || envelopeIndicator === 4) {\n    envelope.hasZ = true;\n    envelope.minZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n    envelope.maxZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  }\n\n  // Read m values\n  if (envelopeIndicator === 3 || envelopeIndicator === 4) {\n    envelope.hasM = true;\n    envelope.minM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n    envelope.maxM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++));\n  }\n  envelopeAndOffset.envelope = envelope;\n  envelopeAndOffset.offset = envelopeByteOffset + (8 * reads);\n  return envelopeAndOffset;\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"../geoPackageConstants\":71,\"buffer\":182,\"wkx\":360}],74:[function(require,module,exports){\n/**\n * Metadata module.\n * @module metadata\n * @see module:dao/dao\n */\n\nvar Dao = require('../dao/dao');\n\nvar util = require('util');\n\n/**\n * Contains metadata in MIME encodings structured in accordance with any\n * authoritative metadata specification\n * @class Metadata\n */\nvar Metadata = function() {\n\n  /**\n   * Metadata primary key\n   * @member {Number}\n   */\n  this.id;\n\n  /**\n   * Case sensitive name of the data scope to which this metadata applies; see Metadata Scopes below\n   * @member {string}\n   */\n  this.md_scope;\n\n  /**\n   * URI reference to the metadata structure definition authority\n   * @member {string}\n   */\n  this.md_standard_uri;\n\n  /**\n   * MIME encoding of metadata\n   * @member {string}\n   */\n  this.mime_type;\n\n  /**\n   * metadata\n   * @member {string}\n   */\n  this.metadata;\n}\n\nMetadata.UNDEFINED = \"undefined\";\nMetadata.FIELD_SESSION = \"fieldSession\";\nMetadata.COLLECTION_SESSION = \"collectionSession\";\nMetadata.SERIES = \"series\";\nMetadata.DATASET = \"dataset\";\nMetadata.FEATURE_TYPE = \"featureType\";\nMetadata.FEATURE = \"feature\";\nMetadata.ATTRIBUTE_TYPE = \"attributeType\";\nMetadata.ATTRIBUTE = \"attribute\";\nMetadata.TILE = \"tile\";\nMetadata.MODEL = \"model\";\nMetadata.CATALOG = \"catalog\";\nMetadata.SCHEMA = \"schema\";\nMetadata.TAXONOMY = \"taxonomy\";\nMetadata.SOFTWARE = \"software\";\nMetadata.SERVICE = \"service\";\nMetadata.COLLECTION_HARDWARE = \"collectionHardware\";\nMetadata.NON_GEOGRAPHIC_DATASET = \"nonGeographicDataset\";\nMetadata.DIMENSION_GROUP = \"dimensionGroup\";\n\nMetadata.prototype.getScopeInformation = function(type) {\n  switch(type) {\n    case Metadata.UNDEFINED:\n      return {\n        name: Metadata.UNDEFINED,\n        code: 'NA',\n        definition: 'Metadata information scope is undefined'\n      };\n    case Metadata.FIELD_SESSION:\n      return {\n        name: Metadata.FIELD_SESSION,\n        code: '012',\n        definition: 'Information applies to the field session'\n      };\n    case Metadata.COLLECTION_SESSION:\n      return {\n        name: Metadata.COLLECTION_SESSION,\n        code: '004',\n        definition: 'Information applies to the collection session'\n      };\n    case Metadata.SERIES:\n      return {\n        name: Metadata.SERIES,\n        code: '006',\n        definition: 'Information applies to the (dataset) series'\n      };\n    case Metadata.DATASET:\n      return {\n        name: Metadata.DATASET,\n        code: '005',\n        definition: 'Information applies to the (geographic feature) dataset'\n      };\n    case Metadata.FEATURE_TYPE:\n      return {\n        name: Metadata.FEATURE_TYPE,\n        code: '010',\n        definition: 'Information applies to a feature type (class)'\n      };\n    case Metadata.FEATURE:\n      return {\n        name: Metadata.FEATURE,\n        code: '009',\n        definition: 'Information applies to a feature (instance)'\n      };\n    case Metadata.ATTRIBUTE_TYPE:\n      return {\n        name: Metadata.ATTRIBUTE_TYPE,\n        code: '002',\n        definition: 'Information applies to the attribute class'\n      };\n    case Metadata.ATTRIBUTE:\n      return {\n        name: Metadata.ATTRIBUTE,\n        code: '001',\n        definition: 'Information applies to the characteristic of a feature (instance)'\n      };\n    case Metadata.TILE:\n      return {\n        name: Metadata.TILE,\n        code: '016',\n        definition: 'Information applies to a tile, a spatial subset of geographic data'\n      };\n    case Metadata.MODEL:\n      return {\n        name: Metadata.MODEL,\n        code: '015',\n        definition: 'Information applies to a copy or imitation of an existing or hypothetical object'\n      };\n    case Metadata.CATALOG:\n      return {\n        name: Metadata.CATALOG,\n        code: 'NA',\n        definition: 'Metadata applies to a feature catalog'\n      };\n    case Metadata.SCHEMA:\n      return {\n        name: Metadata.SCHEMA,\n        code: 'NA',\n        definition: 'Metadata applies to an application schema'\n      };\n    case Metadata.TAXONOMY:\n      return {\n        name: Metadata.TAXONOMY,\n        code: 'NA',\n        definition: 'Metadata applies to a taxonomy or knowledge system'\n      };\n    case Metadata.SOFTWARE:\n      return {\n        name: Metadata.SOFTWARE,\n        code: '013',\n        definition: 'Information applies to a computer program or routine'\n      };\n    case Metadata.SERVICE:\n      return {\n        name: Metadata.SERVICE,\n        code: '014',\n        definition: 'Information applies to a capability which a service provider entity makes available to a service user entity through a set of interfaces that define a behaviour, such as a use case'\n      };\n    case Metadata.COLLECTION_HARDWARE:\n      return {\n        name: Metadata.COLLECTION_HARDWARE,\n        code: '003',\n        definition: 'Information applies to the collection hardware class'\n      };\n    case Metadata.NON_GEOGRAPHIC_DATASET:\n      return {\n        name: Metadata.NON_GEOGRAPHIC_DATASET,\n        code: '007',\n        definition: 'Information applies to non-geographic data'\n      };\n    case Metadata.DIMENSION_GROUP:\n      return {\n        name: Metadata.DIMENSION_GROUP,\n        code: '008',\n        definition: 'Information applies to a dimension group'\n      };\n  }\n}\n\n/**\n * Metadata Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar MetadataDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(MetadataDao, Dao);\n\nMetadataDao.prototype.createObject = function() {\n  return new Metadata();\n};\n\nMetadataDao.TABLE_NAME = \"gpkg_metadata\";\nMetadataDao.COLUMN_ID = \"id\";\nMetadataDao.COLUMN_MD_SCOPE = \"md_scope\";\nMetadataDao.COLUMN_MD_STANDARD_URI = \"md_standard_uri\";\nMetadataDao.COLUMN_MIME_TYPE = \"mime_type\";\nMetadataDao.COLUMN_METADATA = \"metadata\";\n\nMetadataDao.prototype.gpkgTableName = MetadataDao.TABLE_NAME;\nMetadataDao.prototype.idColumns = [MetadataDao.COLUMN_ID];\n\nmodule.exports.MetadataDao = MetadataDao;\nmodule.exports.Metadata = Metadata;\n\n},{\"../dao/dao\":11,\"util\":343}],75:[function(require,module,exports){\n/**\n * MetadataReference module.\n * @module metadata/reference\n * @see module:dao/dao\n */\n\nvar Dao = require('../../dao/dao')\n  , ColumnValues = require('../../dao/columnValues');\n\nvar util = require('util');\n\n/**\n * Links metadata in the gpkg_metadata table to data in the feature, and tiles tables\n * @class MetadataReference\n */\nvar MetadataReference = function() {\n\n  /**\n   * Lowercase metadata reference scope; one of ‘geopackage’, ‘table’, ‘column’, ’row’, ’row/col’\n   * @member {string}\n   */\n  this.reference_scope;\n\n  /**\n   * Name of the table to which this metadata reference applies, or NULL for reference_scope of ‘geopackage’.\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * Name of the column to which this metadata reference applies; NULL for\n   * reference_scope of ‘geopackage’,‘table’ or ‘row’, or the name of a column\n   * in the table_name table for reference_scope of ‘column’ or ‘row/col’\n   * @member {string}\n   */\n  this.column_name;\n\n  /**\n   * NULL for reference_scope of ‘geopackage’, ‘table’ or ‘column’, or the\n   * rowed of a row record in the table_name table for reference_scope of\n   * ‘row’ or ‘row/col’\n   * @member {Number}\n   */\n  this.row_id_value;\n\n  /**\n   * timestamp value in ISO 8601 format as defined by the strftime function\n   * '%Y-%m-%dT%H:%M:%fZ' format string applied to the current time\n   * @member {Date}\n   */\n  this.timestamp;\n\n  /**\n   * gpkg_metadata table id column value for the metadata to which this\n   * gpkg_metadata_reference applies\n   * @member {Number}\n   */\n  this.md_file_id;\n\n  /**\n   * gpkg_metadata table id column value for the hierarchical parent\n   * gpkg_metadata for the gpkg_metadata to which this gpkg_metadata_reference\n   * applies, or NULL if md_file_id forms the root of a metadata hierarchy\n   * @member {Number}\n   */\n  this.md_parent_id;\n}\n\nMetadataReference.prototype.toDatabaseValue = function(columnName) {\n  if (columnName === 'timestamp') {\n    return this.timestamp.toISOString();\n  }\n  return this[columnName];\n}\n\n/**\n * Set the metadata\n * @param  {Metadata} metadata metadata\n */\nMetadataReference.prototype.setMetadata = function(metadata) {\n  if (metadata) {\n    this.md_file_id = metadata.id;\n  } else {\n    this.md_file_id = -1;\n  }\n}\n\n/**\n * Set the parent metadata\n * @param  {Metadata} metadata parent metadata\n */\nMetadataReference.prototype.setParentMetadata = function(metadata) {\n  if (metadata) {\n    this.md_parent_id = metadata.id;\n  } else {\n    this.md_parent_id = -1;\n  }\n}\n\nMetadataReference.prototype.setReferenceScopeType = function(referenceScopeType) {\n  this.reference_scope = referenceScopeType;\n  switch(referenceScopeType) {\n    case MetadataReference.GEOPACKAGE:\n      this.table_name = undefined;\n      this.column_name = undefined;\n      this.row_id_value = undefined;\n      break;\n    case MetadataReference.TABLE:\n      this.column_name = undefined;\n      this.row_id_value = undefined;\n      break;\n    case MetadataReference.ROW:\n      this.column_name = undefined;\n      break;\n    case MetadataReference.COLUMN:\n      this.row_id_value = undefined;\n      break;\n  }\n}\n\nMetadataReference.GEOPACKAGE = \"geopackage\";\nMetadataReference.TABLE = \"table\";\nMetadataReference.COLUMN = \"column\";\nMetadataReference.ROW = \"row\";\nMetadataReference.ROW_COL = \"row/col\";\n\n/**\n * Metadata Reference Data Access Object\n * @class\n * @extends {module:dao/dao~Dao}\n */\nvar MetadataReferenceDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n};\n\nutil.inherits(MetadataReferenceDao, Dao);\n\nMetadataReferenceDao.prototype.createObject = function() {\n  return new MetadataReference();\n};\n\nMetadataReferenceDao.prototype.removeMetadataParent = function(parentId) {\n  var values = {};\n  values[MetadataReferenceDao.COLUMN_MD_PARENT_ID] = null;\n\n  var where = this.buildWhereWithFieldAndValue(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);\n  var whereArgs = this.buildWhereArgs(parentId);\n  return this.updateWithValues(values, where, whereArgs);\n}\n\nMetadataReferenceDao.prototype.queryByMetadataAndParent = function (fileId, parentId) {\n  var columnValues = new ColumnValues();\n  columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId);\n  columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);\n  return this.queryForFieldValues(columnValues);\n};\n\nMetadataReferenceDao.prototype.queryByMetadata = function(fileId) {\n  var columnValues = new ColumnValues();\n  columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId);\n  return this.queryForFieldValues(columnValues);\n};\n\nMetadataReferenceDao.prototype.queryByMetadataParent = function(parentId) {\n  var columnValues = new ColumnValues();\n  columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId);\n  return this.queryForFieldValues(columnValues);\n};\n\nMetadataReferenceDao.TABLE_NAME = \"gpkg_metadata_reference\";\nMetadataReferenceDao.COLUMN_REFERENCE_SCOPE = \"reference_scope\";\nMetadataReferenceDao.COLUMN_TABLE_NAME = \"table_name\";\nMetadataReferenceDao.COLUMN_COLUMN_NAME = \"column_name\";\nMetadataReferenceDao.COLUMN_ROW_ID = \"row_id\";\nMetadataReferenceDao.COLUMN_TIMESTAMP = \"timestamp\";\nMetadataReferenceDao.COLUMN_MD_FILE_ID = \"md_file_id\";\nMetadataReferenceDao.COLUMN_MD_PARENT_ID = \"md_parent_id\";\n\n\nMetadataReferenceDao.prototype.gpkgTableName = MetadataReferenceDao.TABLE_NAME;\nMetadataReferenceDao.prototype.idColumns = [MetadataReferenceDao.COLUMN_MD_FILE_ID, MetadataReferenceDao.COLUMN_MD_PARENT_ID];\n\nmodule.exports.MetadataReferenceDao = MetadataReferenceDao;\nmodule.exports.MetadataReference = MetadataReference;\n\n},{\"../../dao/columnValues\":10,\"../../dao/dao\":11,\"util\":343}],76:[function(require,module,exports){\nmodule.exports = function(optionList) {\n  var optionBuilder = {};\n  optionList.forEach(function(option) {\n    optionBuilder['set'+option.slice(0,1).toUpperCase()+option.slice(1)] = function(param) {\n      this[option] = param;\n      return this;\n    }\n    optionBuilder['get'+option.slice(0,1).toUpperCase()+option.slice(1)] = function() {\n      return this[option];\n    }\n  });\n  return optionBuilder;\n}\n\n},{}],77:[function(require,module,exports){\nmodule.exports = {\n  \"EPSG:3819\":'+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs ',\n  \"EPSG:3821\":'+proj=longlat +ellps=aust_SA +no_defs ',\n  \"EPSG:3824\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:3889\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:3906\":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +no_defs ',\n  \"EPSG:4001\":'+proj=longlat +ellps=airy +no_defs ',\n  \"EPSG:4002\":'+proj=longlat +ellps=mod_airy +no_defs ',\n  \"EPSG:4003\":'+proj=longlat +ellps=aust_SA +no_defs ',\n  \"EPSG:4004\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4005\":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs ',\n  \"EPSG:4006\":'+proj=longlat +ellps=bess_nam +no_defs ',\n  \"EPSG:4007\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',\n  \"EPSG:4008\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4009\":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ',\n  \"EPSG:4010\":'+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs ',\n  \"EPSG:4011\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4012\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4013\":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs ',\n  \"EPSG:4014\":'+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs ',\n  \"EPSG:4015\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs ',\n  \"EPSG:4016\":'+proj=longlat +ellps=evrstSS +no_defs ',\n  \"EPSG:4018\":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs ',\n  \"EPSG:4019\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:4020\":'+proj=longlat +ellps=helmert +no_defs ',\n  \"EPSG:4021\":'+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs ',\n  \"EPSG:4022\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4023\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4024\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4025\":'+proj=longlat +ellps=WGS66 +no_defs ',\n  \"EPSG:4027\":'+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs ',\n  \"EPSG:4028\":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs ',\n  \"EPSG:4029\":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ',\n  \"EPSG:4030\":'+proj=longlat +ellps=WGS84 +no_defs ',\n  \"EPSG:4031\":'+proj=longlat +ellps=WGS84 +no_defs ',\n  \"EPSG:4032\":'+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs ',\n  \"EPSG:4033\":'+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs ',\n  \"EPSG:4034\":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ',\n  \"EPSG:4035\":'+proj=longlat +a=6371000 +b=6371000 +no_defs ',\n  \"EPSG:4036\":'+proj=longlat +ellps=GRS67 +no_defs ',\n  \"EPSG:4041\":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ',\n  \"EPSG:4042\":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ',\n  \"EPSG:4043\":'+proj=longlat +ellps=WGS72 +no_defs ',\n  \"EPSG:4044\":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs ',\n  \"EPSG:4045\":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs ',\n  \"EPSG:4046\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4047\":'+proj=longlat +a=6371007 +b=6371007 +no_defs ',\n  \"EPSG:4052\":'+proj=longlat +a=6370997 +b=6370997 +no_defs ',\n  \"EPSG:4053\":'+proj=longlat +a=6371228 +b=6371228 +no_defs ',\n  \"EPSG:4054\":'+proj=longlat +a=6378273 +b=6356889.449 +no_defs ',\n  \"EPSG:4055\":'+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4075\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4081\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4120\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4121\":'+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs ',\n  \"EPSG:4122\":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ',\n  \"EPSG:4123\":'+proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +no_defs ',\n  \"EPSG:4124\":'+proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs ',\n  \"EPSG:4125\":'+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs ',\n  \"EPSG:4126\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:4127\":'+proj=longlat +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +no_defs ',\n  \"EPSG:4128\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4129\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4130\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs ',\n  \"EPSG:4131\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +no_defs ',\n  \"EPSG:4132\":'+proj=longlat +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +no_defs ',\n  \"EPSG:4133\":'+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs ',\n  \"EPSG:4134\":'+proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +no_defs ',\n  \"EPSG:4135\":'+proj=longlat +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +no_defs ',\n  \"EPSG:4136\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4137\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4138\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4139\":'+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs ',\n  \"EPSG:4140\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4141\":'+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs ',\n  \"EPSG:4142\":'+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs ',\n  \"EPSG:4143\":'+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs ',\n  \"EPSG:4144\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +no_defs ',\n  \"EPSG:4145\":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +no_defs ',\n  \"EPSG:4146\":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs ',\n  \"EPSG:4147\":'+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs ',\n  \"EPSG:4148\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4149\":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +no_defs ',\n  \"EPSG:4150\":'+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs ',\n  \"EPSG:4151\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4152\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4153\":'+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs ',\n  \"EPSG:4154\":'+proj=longlat +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +no_defs ',\n  \"EPSG:4155\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs ',\n  \"EPSG:4156\":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +no_defs ',\n  \"EPSG:4157\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',\n  \"EPSG:4158\":'+proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs ',\n  \"EPSG:4159\":'+proj=longlat +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +no_defs ',\n  \"EPSG:4160\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4161\":'+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs ',\n  \"EPSG:4162\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4163\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4164\":'+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs ',\n  \"EPSG:4165\":'+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs ',\n  \"EPSG:4166\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4167\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4168\":'+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs ',\n  \"EPSG:4169\":'+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs ',\n  \"EPSG:4170\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4171\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4172\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4173\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4174\":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ',\n  \"EPSG:4175\":'+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs ',\n  \"EPSG:4176\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4178\":'+proj=longlat +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +no_defs ',\n  \"EPSG:4179\":'+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs ',\n  \"EPSG:4180\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4181\":'+proj=longlat +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +no_defs ',\n  \"EPSG:4182\":'+proj=longlat +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +no_defs ',\n  \"EPSG:4183\":'+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs ',\n  \"EPSG:4184\":'+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs ',\n  \"EPSG:4185\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4188\":'+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',\n  \"EPSG:4189\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4190\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4191\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4192\":'+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs ',\n  \"EPSG:4193\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ',\n  \"EPSG:4194\":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ',\n  \"EPSG:4195\":'+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs ',\n  \"EPSG:4196\":'+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs ',\n  \"EPSG:4197\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4198\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4199\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4200\":'+proj=longlat +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +no_defs ',\n  \"EPSG:4201\":'+proj=longlat +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +no_defs ',\n  \"EPSG:4202\":'+proj=longlat +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +no_defs ',\n  \"EPSG:4203\":'+proj=longlat +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +no_defs ',\n  \"EPSG:4204\":'+proj=longlat +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +no_defs ',\n  \"EPSG:4205\":'+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs ',\n  \"EPSG:4206\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4207\":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs ',\n  \"EPSG:4208\":'+proj=longlat +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +no_defs ',\n  \"EPSG:4209\":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +no_defs ',\n  \"EPSG:4210\":'+proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs ',\n  \"EPSG:4211\":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +no_defs ',\n  \"EPSG:4212\":'+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs ',\n  \"EPSG:4213\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs ',\n  \"EPSG:4214\":'+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs ',\n  \"EPSG:4215\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4216\":'+proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs ',\n  \"EPSG:4218\":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs ',\n  \"EPSG:4219\":'+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs ',\n  \"EPSG:4220\":'+proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs ',\n  \"EPSG:4221\":'+proj=longlat +ellps=intl +towgs84=-148,136,90,0,0,0,0 +no_defs ',\n  \"EPSG:4222\":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +no_defs ',\n  \"EPSG:4223\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +no_defs ',\n  \"EPSG:4224\":'+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs ',\n  \"EPSG:4225\":'+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs ',\n  \"EPSG:4226\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4227\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +no_defs ',\n  \"EPSG:4228\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4229\":'+proj=longlat +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +no_defs ',\n  \"EPSG:4230\":'+proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs ',\n  \"EPSG:4231\":'+proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218 +no_defs ',\n  \"EPSG:4232\":'+proj=longlat +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +no_defs ',\n  \"EPSG:4233\":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ',\n  \"EPSG:4234\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4235\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4236\":'+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs ',\n  \"EPSG:4237\":'+proj=longlat +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs ',\n  \"EPSG:4238\":'+proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +no_defs ',\n  \"EPSG:4239\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs ',\n  \"EPSG:4240\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +no_defs ',\n  \"EPSG:4241\":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ',\n  \"EPSG:4242\":'+proj=longlat +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +no_defs ',\n  \"EPSG:4243\":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ',\n  \"EPSG:4244\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs ',\n  \"EPSG:4245\":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs ',\n  \"EPSG:4246\":'+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs ',\n  \"EPSG:4247\":'+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs ',\n  \"EPSG:4248\":'+proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +no_defs ',\n  \"EPSG:4249\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4250\":'+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs ',\n  \"EPSG:4251\":'+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs ',\n  \"EPSG:4252\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4253\":'+proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs ',\n  \"EPSG:4254\":'+proj=longlat +ellps=intl +towgs84=16,196,93,0,0,0,0 +no_defs ',\n  \"EPSG:4255\":'+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs ',\n  \"EPSG:4256\":'+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs ',\n  \"EPSG:4257\":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs ',\n  \"EPSG:4258\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4259\":'+proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +no_defs ',\n  \"EPSG:4260\":'+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ',\n  \"EPSG:4261\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs ',\n  \"EPSG:4262\":'+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs ',\n  \"EPSG:4263\":'+proj=longlat +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +no_defs ',\n  \"EPSG:4264\":'+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs ',\n  \"EPSG:4265\":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +no_defs ',\n  \"EPSG:4266\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +no_defs ',\n  \"EPSG:4267\":'+proj=longlat +datum=NAD27 +no_defs ',\n  \"EPSG:4268\":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ',\n  \"EPSG:4269\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4270\":'+proj=longlat +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +no_defs ',\n  \"EPSG:4271\":'+proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs ',\n  \"EPSG:4272\":'+proj=longlat +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +no_defs ',\n  \"EPSG:4273\":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs ',\n  \"EPSG:4274\":'+proj=longlat +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +no_defs ',\n  \"EPSG:4275\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs ',\n  \"EPSG:4276\":'+proj=longlat +ellps=WGS66 +no_defs ',\n  \"EPSG:4277\":'+proj=longlat +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +no_defs ',\n  \"EPSG:4278\":'+proj=longlat +ellps=airy +no_defs ',\n  \"EPSG:4279\":'+proj=longlat +ellps=airy +no_defs ',\n  \"EPSG:4280\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4281\":'+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs ',\n  \"EPSG:4282\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +no_defs ',\n  \"EPSG:4283\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4284\":'+proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs ',\n  \"EPSG:4285\":'+proj=longlat +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +no_defs ',\n  \"EPSG:4286\":'+proj=longlat +ellps=helmert +no_defs ',\n  \"EPSG:4287\":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ',\n  \"EPSG:4288\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4289\":'+proj=longlat +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +no_defs ',\n  \"EPSG:4291\":'+proj=longlat +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +no_defs ',\n  \"EPSG:4292\":'+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs ',\n  \"EPSG:4293\":'+proj=longlat +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +no_defs ',\n  \"EPSG:4294\":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ',\n  \"EPSG:4295\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4296\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4297\":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs ',\n  \"EPSG:4298\":'+proj=longlat +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +no_defs ',\n  \"EPSG:4299\":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',\n  \"EPSG:4300\":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ',\n  \"EPSG:4301\":'+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs ',\n  \"EPSG:4302\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs ',\n  \"EPSG:4303\":'+proj=longlat +ellps=helmert +no_defs ',\n  \"EPSG:4304\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs ',\n  \"EPSG:4306\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4307\":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +no_defs ',\n  \"EPSG:4308\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4309\":'+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs ',\n  \"EPSG:4310\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4311\":'+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs ',\n  \"EPSG:4312\":'+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs ',\n  \"EPSG:4313\":'+proj=longlat +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +no_defs ',\n  \"EPSG:4314\":'+proj=longlat +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +no_defs ',\n  \"EPSG:4315\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs ',\n  \"EPSG:4316\":'+proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs ',\n  \"EPSG:4317\":'+proj=longlat +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +no_defs ',\n  \"EPSG:4318\":'+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs ',\n  \"EPSG:4319\":'+proj=longlat +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs ',\n  \"EPSG:4322\":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ',\n  \"EPSG:4324\":'+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs ',\n  \"EPSG:4326\":'+proj=longlat +datum=WGS84 +no_defs ',\n  \"EPSG:4463\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4470\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4475\":'+proj=longlat +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +no_defs ',\n  \"EPSG:4483\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4490\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:4555\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4558\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4600\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4601\":'+proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs ',\n  \"EPSG:4602\":'+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs ',\n  \"EPSG:4603\":'+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs ',\n  \"EPSG:4604\":'+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs ',\n  \"EPSG:4605\":'+proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs ',\n  \"EPSG:4606\":'+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs ',\n  \"EPSG:4607\":'+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs ',\n  \"EPSG:4608\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4609\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:4610\":'+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs ',\n  \"EPSG:4611\":'+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs ',\n  \"EPSG:4612\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4613\":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ',\n  \"EPSG:4614\":'+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs ',\n  \"EPSG:4615\":'+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs ',\n  \"EPSG:4616\":'+proj=longlat +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +no_defs ',\n  \"EPSG:4617\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4618\":'+proj=longlat +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +no_defs ',\n  \"EPSG:4619\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4620\":'+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs ',\n  \"EPSG:4621\":'+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs ',\n  \"EPSG:4622\":'+proj=longlat +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +no_defs ',\n  \"EPSG:4623\":'+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs ',\n  \"EPSG:4624\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4625\":'+proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs ',\n  \"EPSG:4626\":'+proj=longlat +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +no_defs ',\n  \"EPSG:4627\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4628\":'+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs ',\n  \"EPSG:4629\":'+proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +no_defs ',\n  \"EPSG:4630\":'+proj=longlat +ellps=intl +towgs84=84,274,65,0,0,0,0 +no_defs ',\n  \"EPSG:4631\":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ',\n  \"EPSG:4632\":'+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs ',\n  \"EPSG:4633\":'+proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs ',\n  \"EPSG:4634\":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ',\n  \"EPSG:4635\":'+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs ',\n  \"EPSG:4636\":'+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs ',\n  \"EPSG:4637\":'+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs ',\n  \"EPSG:4638\":'+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs ',\n  \"EPSG:4639\":'+proj=longlat +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +no_defs ',\n  \"EPSG:4640\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4641\":'+proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs ',\n  \"EPSG:4642\":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ',\n  \"EPSG:4643\":'+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs ',\n  \"EPSG:4644\":'+proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +no_defs ',\n  \"EPSG:4645\":'+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4646\":'+proj=longlat +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +no_defs ',\n  \"EPSG:4657\":'+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs ',\n  \"EPSG:4658\":'+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs ',\n  \"EPSG:4659\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4660\":'+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +no_defs ',\n  \"EPSG:4661\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4662\":'+proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs ',\n  \"EPSG:4663\":'+proj=longlat +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +no_defs ',\n  \"EPSG:4664\":'+proj=longlat +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs ',\n  \"EPSG:4665\":'+proj=longlat +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +no_defs ',\n  \"EPSG:4666\":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +no_defs ',\n  \"EPSG:4667\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4668\":'+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs ',\n  \"EPSG:4669\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4670\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4671\":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ',\n  \"EPSG:4672\":'+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs ',\n  \"EPSG:4673\":'+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs ',\n  \"EPSG:4674\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4675\":'+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs ',\n  \"EPSG:4676\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4677\":'+proj=longlat +ellps=krass +no_defs ',\n  \"EPSG:4678\":'+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs ',\n  \"EPSG:4679\":'+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs ',\n  \"EPSG:4680\":'+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs ',\n  \"EPSG:4681\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4682\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +no_defs ',\n  \"EPSG:4683\":'+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs ',\n  \"EPSG:4684\":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ',\n  \"EPSG:4685\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4686\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4687\":'+proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +no_defs ',\n  \"EPSG:4688\":'+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs ',\n  \"EPSG:4689\":'+proj=longlat +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +no_defs ',\n  \"EPSG:4690\":'+proj=longlat +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +no_defs ',\n  \"EPSG:4691\":'+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs ',\n  \"EPSG:4692\":'+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs ',\n  \"EPSG:4693\":'+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs ',\n  \"EPSG:4694\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4695\":'+proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs ',\n  \"EPSG:4696\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4697\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4698\":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ',\n  \"EPSG:4699\":'+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs ',\n  \"EPSG:4700\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4701\":'+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs ',\n  \"EPSG:4702\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4703\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4704\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4705\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4706\":'+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs ',\n  \"EPSG:4707\":'+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs ',\n  \"EPSG:4708\":'+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs ',\n  \"EPSG:4709\":'+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs ',\n  \"EPSG:4710\":'+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs ',\n  \"EPSG:4711\":'+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs ',\n  \"EPSG:4712\":'+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs ',\n  \"EPSG:4713\":'+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs ',\n  \"EPSG:4714\":'+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs ',\n  \"EPSG:4715\":'+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs ',\n  \"EPSG:4716\":'+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs ',\n  \"EPSG:4717\":'+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs ',\n  \"EPSG:4718\":'+proj=longlat +ellps=intl +towgs84=230,-199,-752,0,0,0,0 +no_defs ',\n  \"EPSG:4719\":'+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs ',\n  \"EPSG:4720\":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ',\n  \"EPSG:4721\":'+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs ',\n  \"EPSG:4722\":'+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs ',\n  \"EPSG:4723\":'+proj=longlat +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +no_defs ',\n  \"EPSG:4724\":'+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs ',\n  \"EPSG:4725\":'+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs ',\n  \"EPSG:4726\":'+proj=longlat +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +no_defs ',\n  \"EPSG:4727\":'+proj=longlat +ellps=intl +towgs84=403,-81,277,0,0,0,0 +no_defs ',\n  \"EPSG:4728\":'+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs ',\n  \"EPSG:4729\":'+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs ',\n  \"EPSG:4730\":'+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs ',\n  \"EPSG:4731\":'+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs ',\n  \"EPSG:4732\":'+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs ',\n  \"EPSG:4733\":'+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs ',\n  \"EPSG:4734\":'+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs ',\n  \"EPSG:4735\":'+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs ',\n  \"EPSG:4736\":'+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs ',\n  \"EPSG:4737\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4738\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',\n  \"EPSG:4739\":'+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs ',\n  \"EPSG:4740\":'+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs ',\n  \"EPSG:4741\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4742\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:4743\":'+proj=longlat +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +no_defs ',\n  \"EPSG:4744\":'+proj=longlat +ellps=clrk80 +no_defs ',\n  \"EPSG:4745\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4746\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:4747\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4748\":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ',\n  \"EPSG:4749\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4750\":'+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs ',\n  \"EPSG:4751\":'+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs ',\n  \"EPSG:4752\":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ',\n  \"EPSG:4753\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4754\":'+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs ',\n  \"EPSG:4755\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4756\":'+proj=longlat +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +no_defs ',\n  \"EPSG:4757\":'+proj=longlat +ellps=WGS84 +no_defs ',\n  \"EPSG:4758\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4759\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4760\":'+proj=longlat +ellps=WGS66 +no_defs ',\n  \"EPSG:4761\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4762\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4763\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4764\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4765\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:4801\":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs ',\n  \"EPSG:4802\":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs ',\n  \"EPSG:4803\":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +no_defs ',\n  \"EPSG:4804\":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs ',\n  \"EPSG:4805\":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs ',\n  \"EPSG:4806\":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +no_defs ',\n  \"EPSG:4807\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs ',\n  \"EPSG:4808\":'+proj=longlat +ellps=bessel +pm=jakarta +no_defs ',\n  \"EPSG:4809\":'+proj=longlat +ellps=intl +pm=brussels +no_defs ',\n  \"EPSG:4810\":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs ',\n  \"EPSG:4811\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs ',\n  \"EPSG:4813\":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +no_defs ',\n  \"EPSG:4814\":'+proj=longlat +ellps=bessel +pm=stockholm +no_defs ',\n  \"EPSG:4815\":'+proj=longlat +ellps=bessel +pm=athens +no_defs ',\n  \"EPSG:4816\":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +pm=paris +no_defs ',\n  \"EPSG:4817\":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs ',\n  \"EPSG:4818\":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs ',\n  \"EPSG:4819\":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +pm=paris +no_defs ',\n  \"EPSG:4820\":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +no_defs ',\n  \"EPSG:4821\":'+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs ',\n  \"EPSG:4823\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4824\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:4901\":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +no_defs ',\n  \"EPSG:4902\":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs ',\n  \"EPSG:4903\":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs ',\n  \"EPSG:4904\":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +pm=lisbon +no_defs ',\n  \"EPSG:5013\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5132\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:5228\":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +no_defs ',\n  \"EPSG:5229\":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +pm=ferro +no_defs ',\n  \"EPSG:5233\":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +no_defs ',\n  \"EPSG:5246\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:5252\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5264\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5324\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5340\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5354\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5360\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5365\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5371\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5373\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5381\":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5393\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5451\":'+proj=longlat +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +no_defs ',\n  \"EPSG:5464\":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ',\n  \"EPSG:5467\":'+proj=longlat +ellps=clrk66 +no_defs ',\n  \"EPSG:5489\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5524\":'+proj=longlat +ellps=intl +no_defs ',\n  \"EPSG:5527\":'+proj=longlat +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +no_defs ',\n  \"EPSG:5546\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5561\":'+proj=longlat +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +no_defs ',\n  \"EPSG:5593\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:5681\":'+proj=longlat +ellps=bessel +no_defs ',\n  \"EPSG:5886\":'+proj=longlat +ellps=GRS80 +no_defs ',\n  \"EPSG:6135\":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ',\n  \"EPSG:2000\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:2001\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2002\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2003\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2004\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2005\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2006\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2007\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2008\":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2009\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2010\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2011\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2012\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2013\":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2014\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2015\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2016\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2017\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2018\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2019\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2020\":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2021\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2022\":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2023\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2024\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2025\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2026\":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2027\":'+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2028\":'+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2029\":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2030\":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2031\":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2032\":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2033\":'+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2034\":'+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2035\":'+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2036\":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2037\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2038\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2039\":'+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2040\":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2041\":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2042\":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2043\":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2044\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2045\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2046\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2047\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2048\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2049\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2050\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2051\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2052\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2053\":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2054\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2055\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2056\":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2057\":'+proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +gamma=0.5716611944444444 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2058\":'+proj=utm +zone=38 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2059\":'+proj=utm +zone=39 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2060\":'+proj=utm +zone=40 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2061\":'+proj=utm +zone=41 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2062\":'+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs ',\n  \"EPSG:2063\":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2064\":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2065\":'+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:2066\":'+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs ',\n  \"EPSG:2067\":'+proj=utm +zone=20 +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2068\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2069\":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2070\":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2071\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2072\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2073\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2074\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2075\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2076\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2077\":'+proj=utm +zone=32 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2078\":'+proj=utm +zone=33 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2079\":'+proj=utm +zone=34 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2080\":'+proj=utm +zone=35 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2081\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2082\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2083\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2084\":'+proj=utm +zone=19 +south +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2085\":'+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:2086\":'+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:2087\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2088\":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2089\":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2090\":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2091\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2092\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2093\":'+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2094\":'+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:2095\":'+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2096\":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:2097\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:2098\":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:2099\":'+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs ',\n  \"EPSG:2100\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2101\":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2102\":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2103\":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2104\":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2105\":'+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2106\":'+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2107\":'+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2108\":'+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2109\":'+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2110\":'+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2111\":'+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2112\":'+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2113\":'+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2114\":'+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2115\":'+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2116\":'+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2117\":'+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2118\":'+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2119\":'+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2120\":'+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2121\":'+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2122\":'+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2123\":'+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2124\":'+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2125\":'+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2126\":'+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2127\":'+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2128\":'+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2129\":'+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2130\":'+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2131\":'+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2132\":'+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2133\":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2134\":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2135\":'+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2136\":'+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs ',\n  \"EPSG:2137\":'+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2138\":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:2139\":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2140\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2141\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2142\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2143\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2144\":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2145\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2146\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2147\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2148\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2149\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2150\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2151\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2152\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2153\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2154\":'+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2155\":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2156\":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2157\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2158\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2159\":'+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs ',\n  \"EPSG:2160\":'+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs ',\n  \"EPSG:2161\":'+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2162\":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2163\":'+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs ',\n  \"EPSG:2164\":'+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2165\":'+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2166\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2167\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2168\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2169\":'+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +units=m +no_defs ',\n  \"EPSG:2170\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:2171\":'+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2172\":'+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2173\":'+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2174\":'+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2175\":'+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:2176\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2177\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2178\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2179\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2180\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2188\":'+proj=utm +zone=25 +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2189\":'+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2190\":'+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2191\":'+proj=utm +zone=28 +ellps=intl +units=m +no_defs ',\n  \"EPSG:2192\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2193\":'+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2194\":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2195\":'+proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2196\":'+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2197\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2198\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2199\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:2200\":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2201\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2202\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2203\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2204\":'+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:2205\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2206\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2207\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2208\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2209\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2210\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2211\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2212\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2213\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2214\":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2215\":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2216\":'+proj=utm +zone=22 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2217\":'+proj=utm +zone=23 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2219\":'+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2220\":'+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2222\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2223\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2224\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2225\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2226\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2227\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2228\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2229\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2230\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2231\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2232\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2233\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2234\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2235\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2236\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2237\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2238\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2239\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2240\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2241\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2242\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2243\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2244\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2245\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2246\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2247\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2248\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2249\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2250\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2251\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2252\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2253\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2254\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2255\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2256\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2257\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2258\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2259\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2260\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2261\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2262\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2263\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2264\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2265\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2266\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2267\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2268\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2269\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2270\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2271\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2272\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2273\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2274\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2275\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2276\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2277\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2278\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2279\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2280\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2281\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2282\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2283\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2284\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2285\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2286\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2287\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2288\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2289\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2290\":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2291\":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2292\":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2294\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2295\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs ',\n  \"EPSG:2308\":'+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2309\":'+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:2310\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:2311\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:2312\":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:2313\":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:2314\":'+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.3047972654 +no_defs ',\n  \"EPSG:2315\":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2316\":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2317\":'+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2318\":'+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2319\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2320\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2321\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2322\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2323\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2324\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2325\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2326\":'+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs ',\n  \"EPSG:2327\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2328\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2329\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2330\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2331\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2332\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2333\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2334\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2335\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2336\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2337\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2338\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2339\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2340\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2341\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2342\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2343\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2344\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2345\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2346\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2347\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2348\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2349\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2350\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2351\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2352\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2353\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2354\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2355\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2356\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2357\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2358\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2359\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2360\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2361\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2362\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2363\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2364\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2365\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2366\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2367\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2368\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2369\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2370\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2371\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2372\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2373\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2374\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2375\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2376\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2377\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2378\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2379\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2380\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2381\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2382\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2383\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2384\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2385\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2386\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2387\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2388\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2389\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2390\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ',\n  \"EPSG:2391\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:2392\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:2393\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:2394\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:2395\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2396\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2397\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2398\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2399\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2400\":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:2401\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2402\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2403\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2404\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2405\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2406\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2407\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2408\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2409\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2410\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2411\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2412\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2413\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2414\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2415\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2416\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2417\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2418\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2419\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2420\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2421\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2422\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2423\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2424\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2425\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2426\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2427\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2428\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2429\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2430\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2431\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2432\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2433\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2434\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2435\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2436\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2437\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2438\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2439\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2440\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2441\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2442\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2443\":'+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2444\":'+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2445\":'+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2446\":'+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2447\":'+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2448\":'+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2449\":'+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2450\":'+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2451\":'+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2452\":'+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2453\":'+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2454\":'+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2455\":'+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2456\":'+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2457\":'+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2458\":'+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2459\":'+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2460\":'+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2461\":'+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2462\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:2463\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2464\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2465\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2466\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2467\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2468\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2469\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2470\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2471\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2472\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2473\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2474\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2475\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2476\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2477\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2478\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2479\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2480\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2481\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2482\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2483\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2484\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2485\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2486\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2487\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2488\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2489\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2490\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2491\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2492\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2493\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2494\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2495\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2496\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2497\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2498\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2499\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2500\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2501\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2502\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2503\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2504\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2505\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2506\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2507\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2508\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2509\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2510\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2511\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2512\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2513\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2514\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2515\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2516\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2517\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2518\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2519\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2520\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2521\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2522\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2523\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2524\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2525\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2526\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2527\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2528\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2529\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2530\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2531\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2532\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2533\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2534\":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2535\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2536\":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2537\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2538\":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2539\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2540\":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2541\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2542\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2543\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2544\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2545\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2546\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2547\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2548\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2549\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2550\":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2551\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2552\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2553\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2554\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2555\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2556\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2557\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2558\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2559\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2560\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2561\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2562\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2563\":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2564\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2565\":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2566\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2567\":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2568\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2569\":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2570\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2571\":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2572\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2573\":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2574\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2575\":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2576\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2577\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2578\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2579\":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2580\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2581\":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2582\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2583\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2584\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2585\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2586\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2587\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2588\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2589\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2590\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2591\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2592\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2593\":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2594\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2595\":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2596\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2597\":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2598\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2599\":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2600\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2601\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2602\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2603\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2604\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2605\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2606\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2607\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2608\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2609\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2610\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2611\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2612\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2613\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2614\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2615\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2616\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2617\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2618\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2619\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2620\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2621\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2622\":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2623\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2624\":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2625\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2626\":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2627\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2628\":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2629\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2630\":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2631\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2632\":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2633\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2634\":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2635\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2636\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2637\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2638\":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2639\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2640\":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2641\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2642\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2643\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2644\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2645\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2646\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2647\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2648\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2649\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2650\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2651\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2652\":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2653\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2654\":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2655\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2656\":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2657\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2658\":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2659\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2660\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2661\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2662\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2663\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2664\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2665\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2666\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2667\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2668\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2669\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2670\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2671\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2672\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2673\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2674\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2675\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2676\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2677\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2678\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2679\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2680\":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2681\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2682\":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2683\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2684\":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2685\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2686\":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2687\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2688\":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2689\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2690\":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2691\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2692\":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2693\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2694\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2695\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2696\":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2697\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2698\":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2699\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2700\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2701\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2702\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2703\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2704\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2705\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2706\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2707\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2708\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2709\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2710\":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2711\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2712\":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2713\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2714\":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2715\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2716\":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2717\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2718\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2719\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2720\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2721\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2722\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2723\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2724\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2725\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2726\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2727\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2728\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2729\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2730\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2731\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2732\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2733\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2734\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2735\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2736\":'+proj=utm +zone=36 +south +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +units=m +no_defs ',\n  \"EPSG:2737\":'+proj=utm +zone=37 +south +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +units=m +no_defs ',\n  \"EPSG:2738\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2739\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2740\":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2741\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2742\":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2743\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2744\":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2745\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2746\":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2747\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2748\":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2749\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2750\":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2751\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2752\":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2753\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2754\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2755\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2756\":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2757\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2758\":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:2759\":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2760\":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2761\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2762\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2763\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2764\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2765\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2766\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2767\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2768\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2769\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2770\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2771\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2772\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2773\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2774\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2775\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2776\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2777\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2778\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2779\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2780\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2781\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2782\":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2783\":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2784\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2785\":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2786\":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2787\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2788\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2789\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2790\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2791\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2792\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2793\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2794\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2795\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2796\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2797\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2798\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2799\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2800\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2801\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2802\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2803\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2804\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2805\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2806\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2807\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2808\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2809\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2810\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2811\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2812\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2813\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2814\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2815\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2816\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2817\":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2818\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2819\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2820\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2821\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2822\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2823\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2824\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2825\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2826\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2827\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2828\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2829\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2830\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2831\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2832\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2833\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2834\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2835\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2836\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2837\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2838\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2839\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2840\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2841\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2842\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2843\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2844\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2845\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2846\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2847\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2848\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2849\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2850\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2851\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2852\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2853\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2854\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2855\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2856\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2857\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2858\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2859\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2860\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2861\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2862\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2863\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2864\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2865\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2866\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2867\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2868\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2869\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2870\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2871\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2872\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2873\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2874\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2875\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2876\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2877\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2878\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2879\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2880\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2881\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2882\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2883\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2884\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2885\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2886\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2887\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2888\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2889\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2890\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2891\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2892\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2893\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2894\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2895\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2896\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2897\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2898\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2899\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2900\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2901\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2902\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2903\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2904\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2905\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2906\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2907\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2908\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2909\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2910\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2911\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2912\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2913\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2914\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2915\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2916\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2917\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2918\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2919\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2920\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2921\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2922\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2923\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2924\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2925\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2926\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2927\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2928\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2929\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2930\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2931\":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2932\":'+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs ',\n  \"EPSG:2933\":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2934\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:2935\":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2936\":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2937\":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2938\":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2939\":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2940\":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2941\":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:2942\":'+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2943\":'+proj=utm +zone=28 +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2944\":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2945\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2946\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2947\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2948\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2949\":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2950\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2951\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2952\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2953\":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2954\":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2955\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2956\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2957\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2958\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2959\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2960\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2961\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2962\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2964\":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:2965\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2966\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2967\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2968\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:2969\":'+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2970\":'+proj=utm +zone=20 +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2971\":'+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2972\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2973\":'+proj=utm +zone=20 +ellps=intl +towgs84=186,482,151,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2975\":'+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2976\":'+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2977\":'+proj=utm +zone=5 +south +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +units=m +no_defs ',\n  \"EPSG:2978\":'+proj=utm +zone=7 +south +ellps=intl +towgs84=84,274,65,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2979\":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2980\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2981\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2982\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2983\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs ',\n  \"EPSG:2984\":'+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2987\":'+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2988\":'+proj=utm +zone=1 +south +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2989\":'+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2990\":'+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2991\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2992\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2993\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2994\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:2995\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2996\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2997\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs ',\n  \"EPSG:2998\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:2999\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3000\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3001\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3002\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3003\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',\n  \"EPSG:3004\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',\n  \"EPSG:3005\":'+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3006\":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3007\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3008\":'+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3009\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3010\":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3011\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3012\":'+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3013\":'+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3014\":'+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3015\":'+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3016\":'+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3017\":'+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3018\":'+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3019\":'+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3020\":'+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3021\":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3022\":'+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3023\":'+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3024\":'+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ',\n  \"EPSG:3025\":'+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3026\":'+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3027\":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3028\":'+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3029\":'+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3030\":'+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3031\":'+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3032\":'+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3033\":'+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3034\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3035\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3036\":'+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',\n  \"EPSG:3037\":'+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',\n  \"EPSG:3038\":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3039\":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3040\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3041\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3042\":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3043\":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3044\":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3045\":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3046\":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3047\":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3048\":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3049\":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3050\":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3051\":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3054\":'+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3055\":'+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3056\":'+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3057\":'+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3058\":'+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +units=m +no_defs ',\n  \"EPSG:3059\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3060\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3061\":'+proj=utm +zone=28 +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3062\":'+proj=utm +zone=26 +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3063\":'+proj=utm +zone=26 +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3064\":'+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3065\":'+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3066\":'+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3067\":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3068\":'+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:3069\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3070\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3071\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3072\":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3073\":'+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3074\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3075\":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3076\":'+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3077\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3078\":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3079\":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3080\":'+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +datum=NAD27 +units=ft +no_defs ',\n  \"EPSG:3081\":'+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3082\":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3083\":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3084\":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3085\":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3086\":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3087\":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3088\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3089\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3090\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3091\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3092\":'+proj=utm +zone=51 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3093\":'+proj=utm +zone=52 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3094\":'+proj=utm +zone=53 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3095\":'+proj=utm +zone=54 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3096\":'+proj=utm +zone=55 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3097\":'+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3098\":'+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3099\":'+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3100\":'+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3101\":'+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3102\":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3103\":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3104\":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3105\":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3106\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3107\":'+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3108\":'+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3109\":'+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3110\":'+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:3111\":'+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3112\":'+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3113\":'+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3114\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3115\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3116\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3117\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3118\":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3119\":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3120\":'+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3121\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3122\":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3123\":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3124\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3125\":'+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ',\n  \"EPSG:3126\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3127\":'+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3128\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3129\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3130\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3131\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3132\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3133\":'+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3134\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3135\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3136\":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3137\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3138\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3140\":'+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs ',\n  \"EPSG:3141\":'+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3142\":'+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3143\":'+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:3146\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3147\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3148\":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3149\":'+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3150\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:3151\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:3152\":'+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3153\":'+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3154\":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3155\":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3156\":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3157\":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3158\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3159\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3160\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3161\":'+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3162\":'+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3163\":'+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3164\":'+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3165\":'+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3166\":'+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3167\":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs ',\n  \"EPSG:3168\":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs ',\n  \"EPSG:3169\":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3170\":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3171\":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3172\":'+proj=utm +zone=59 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3174\":'+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3175\":'+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3176\":'+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3177\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3178\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3179\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3180\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3181\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3182\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3183\":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3184\":'+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3185\":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3186\":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3187\":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3188\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3189\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3190\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3191\":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3192\":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3193\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3194\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3195\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3196\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3197\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3198\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3199\":'+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3200\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3201\":'+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3202\":'+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3203\":'+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3204\":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3205\":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3206\":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3207\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3208\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3209\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3210\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3211\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3212\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3213\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3214\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3215\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3216\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3217\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3218\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3219\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3220\":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3221\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3222\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3223\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3224\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3225\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3226\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3227\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3228\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3229\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3230\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3231\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3232\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3233\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3234\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3235\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3236\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3237\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3238\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3239\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3240\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3241\":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3242\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3243\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3244\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3245\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3246\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3247\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3248\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3249\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3250\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3251\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3252\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3253\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3254\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3255\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3256\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3257\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3258\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3259\":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3260\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3261\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3262\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3263\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3264\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3265\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3266\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3267\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3268\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3269\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3270\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3271\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3272\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3273\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3274\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3275\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3276\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3277\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3278\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3279\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3280\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3281\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3282\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3283\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3284\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3285\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3286\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3287\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3288\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3289\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3290\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3291\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3292\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3293\":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3294\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3296\":'+proj=utm +zone=5 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',\n  \"EPSG:3297\":'+proj=utm +zone=6 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',\n  \"EPSG:3298\":'+proj=utm +zone=7 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',\n  \"EPSG:3299\":'+proj=utm +zone=8 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ',\n  \"EPSG:3300\":'+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs ',\n  \"EPSG:3301\":'+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3302\":'+proj=utm +zone=7 +south +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +units=m +no_defs ',\n  \"EPSG:3303\":'+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs ',\n  \"EPSG:3304\":'+proj=utm +zone=6 +south +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +units=m +no_defs ',\n  \"EPSG:3305\":'+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs ',\n  \"EPSG:3306\":'+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3307\":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3308\":'+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3309\":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3310\":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3311\":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3312\":'+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3313\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3314\":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3315\":'+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3316\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3317\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3318\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3319\":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3320\":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3321\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3322\":'+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3323\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3324\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3325\":'+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3326\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3327\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3328\":'+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3329\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3330\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3331\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3332\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3333\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3334\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3335\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3336\":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3337\":'+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3338\":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3339\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3340\":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3341\":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3342\":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3343\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3344\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3345\":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3346\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3347\":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3348\":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3349\":'+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3350\":'+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3351\":'+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3352\":'+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3353\":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:3354\":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:3355\":'+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3356\":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=m +no_defs ',\n  \"EPSG:3357\":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=m +no_defs ',\n  \"EPSG:3358\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3359\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3360\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3361\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3362\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3363\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3364\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3365\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3366\":'+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs ',\n  \"EPSG:3367\":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3368\":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3369\":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3370\":'+proj=utm +zone=59 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3371\":'+proj=utm +zone=60 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3372\":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3373\":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3374\":'+proj=utm +zone=29 +ellps=intl +units=m +no_defs ',\n  \"EPSG:3375\":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3376\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +no_uoff +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3377\":'+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3378\":'+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3379\":'+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3380\":'+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3381\":'+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3382\":'+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3383\":'+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3384\":'+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3385\":'+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:3386\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:3387\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ',\n  \"EPSG:3388\":'+proj=merc +lon_0=51 +lat_ts=42 +x_0=0 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3389\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:3390\":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:3391\":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3392\":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3393\":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3394\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs ',\n  \"EPSG:3395\":'+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3396\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3397\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3398\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3399\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:3400\":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3401\":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3402\":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3403\":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3404\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3405\":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs ',\n  \"EPSG:3406\":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs ',\n  \"EPSG:3407\":'+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs ',\n  \"EPSG:3408\":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',\n  \"EPSG:3409\":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',\n  \"EPSG:3410\":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ',\n  \"EPSG:3411\":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',\n  \"EPSG:3412\":'+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',\n  \"EPSG:3413\":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3414\":'+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs ',\n  \"EPSG:3415\":'+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:3416\":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3417\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3418\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3419\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3420\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3421\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3422\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3423\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3424\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3425\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3426\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3427\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3428\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3429\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3430\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3431\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3432\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3433\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3434\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3435\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3436\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3437\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3438\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3439\":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs ',\n  \"EPSG:3440\":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs ',\n  \"EPSG:3441\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3442\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3443\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3444\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3445\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3446\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3447\":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3448\":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3449\":'+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3450\":'+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3451\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3452\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3453\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3454\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3455\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3456\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3457\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3458\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3459\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3460\":'+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:3461\":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3462\":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3463\":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3464\":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3465\":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3466\":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3467\":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3468\":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3469\":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3470\":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3471\":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3472\":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3473\":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3474\":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3475\":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3476\":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3477\":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3478\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3479\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3480\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3481\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3482\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3483\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3484\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3485\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3486\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3487\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3488\":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3489\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3490\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3491\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3492\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3493\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3494\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3495\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3496\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3497\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3498\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3499\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3500\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3501\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3502\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3503\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3504\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3505\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3506\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3507\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3508\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3509\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3510\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3511\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3512\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3513\":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3514\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3515\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3516\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3517\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3518\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3519\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3520\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3521\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3522\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3523\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3524\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3525\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3526\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3527\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3528\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3529\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3530\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3531\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3532\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3533\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3534\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3535\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3536\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3537\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3538\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3539\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3540\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3541\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3542\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3543\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3544\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3545\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3546\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3547\":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3548\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3549\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3550\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3551\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3552\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3553\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3554\":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3555\":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3556\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3557\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3558\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3559\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3560\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3561\":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3562\":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3563\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3564\":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3565\":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3566\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3567\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3568\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3569\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3570\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3571\":'+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3572\":'+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3573\":'+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3574\":'+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3575\":'+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3576\":'+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3577\":'+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3578\":'+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3579\":'+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3580\":'+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3581\":'+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3582\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3583\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3584\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3585\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3586\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3587\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3588\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3589\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3590\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3591\":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3592\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3593\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3594\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3595\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3596\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3597\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3598\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3599\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3600\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3601\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3602\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3603\":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3604\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3605\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3606\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3607\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3608\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3609\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3610\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3611\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3612\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3613\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3614\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3615\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3616\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3617\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3618\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3619\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3620\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3621\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3622\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3623\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3624\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3625\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3626\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3627\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3628\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3629\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3630\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3631\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3632\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3633\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3634\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3635\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3636\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3637\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3638\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3639\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3640\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3641\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3642\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3643\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3644\":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3645\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3646\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3647\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3648\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3649\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3650\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3651\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3652\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3653\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3654\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3655\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3656\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3657\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3658\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3659\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3660\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3661\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3662\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3663\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3664\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3665\":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3666\":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3667\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3668\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3669\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3670\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3671\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3672\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3673\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3674\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3675\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3676\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3677\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3678\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3679\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3680\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3681\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3682\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:3683\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3684\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3685\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3686\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3687\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3688\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3689\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3690\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3691\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3692\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3693\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3694\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3695\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3696\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3697\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3698\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3699\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3700\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3701\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3702\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3703\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3704\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3705\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3706\":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3707\":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3708\":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3709\":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3710\":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3711\":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3712\":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3713\":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3714\":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3715\":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3716\":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3717\":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3718\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3719\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3720\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3721\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3722\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3723\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3724\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3725\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3726\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3727\":'+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3728\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3729\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3730\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3731\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3732\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3733\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3734\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3735\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3736\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3737\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3738\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3739\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3740\":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3741\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3742\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3743\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3744\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3745\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3746\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3747\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3748\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3749\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3750\":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3751\":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3752\":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3753\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3754\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3755\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3756\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3757\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3758\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3759\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3760\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3761\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3762\":'+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3763\":'+proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3764\":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3765\":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3766\":'+proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3767\":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3768\":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3769\":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3770\":'+proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3771\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3772\":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3773\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3774\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3775\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3776\":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3777\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3778\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3779\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3780\":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3781\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3782\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3783\":'+proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3784\":'+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3785\":'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs',\n  \"EPSG:3786\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs ',\n  \"EPSG:3787\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:3788\":'+proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3789\":'+proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3790\":'+proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3791\":'+proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3793\":'+proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3794\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3795\":'+proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3796\":'+proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3797\":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3798\":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3799\":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3800\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:3801\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3802\":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3812\":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3814\":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3815\":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3816\":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3825\":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3826\":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3827\":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs ',\n  \"EPSG:3828\":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs ',\n  \"EPSG:3829\":'+proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3832\":'+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3833\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3834\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3835\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3836\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3837\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3838\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3839\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3840\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3841\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3842\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3843\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3844\":'+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:3845\":'+proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3846\":'+proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3847\":'+proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3848\":'+proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3849\":'+proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3850\":'+proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3851\":'+proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3852\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3854\":'+proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  //\"EPSG:3857\":'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs',\n  \"EPSG:3873\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3874\":'+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3875\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3876\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3877\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3878\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=24500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3879\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3880\":'+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3881\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3882\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3883\":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3884\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3885\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3890\":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3891\":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3892\":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3893\":'+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3907\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3908\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3909\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3910\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3911\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3912\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3920\":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3942\":'+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3943\":'+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3944\":'+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3945\":'+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3946\":'+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3947\":'+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3948\":'+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3949\":'+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3950\":'+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3968\":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3969\":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3970\":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3973\":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3974\":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3975\":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3976\":'+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3978\":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3979\":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3985\":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3986\":'+proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3987\":'+proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3988\":'+proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3989\":'+proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:3991\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3992\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:3994\":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3995\":'+proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3996\":'+proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:3997\":'+proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4026\":'+proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4037\":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4038\":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4048\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4049\":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4050\":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4051\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4056\":'+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4057\":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4058\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4059\":'+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4060\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4061\":'+proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4062\":'+proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4063\":'+proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4071\":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4082\":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4083\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4087\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4088\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs ',\n  \"EPSG:4093\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99998 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4094\":'+proj=tmerc +lat_0=0 +lon_0=10 +k=0.99998 +x_0=400000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4095\":'+proj=tmerc +lat_0=0 +lon_0=11.75 +k=0.99998 +x_0=600000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4096\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=800000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4217\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4399\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4400\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4401\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4402\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4403\":'+proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4404\":'+proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4405\":'+proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4406\":'+proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4407\":'+proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4408\":'+proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4409\":'+proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4410\":'+proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4411\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4412\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4413\":'+proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4414\":'+proj=tmerc +lat_0=13.5 +lon_0=144.75 +k=1 +x_0=100000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4415\":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=-9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4417\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4418\":'+proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4419\":'+proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4420\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4421\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4422\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4423\":'+proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4424\":'+proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4425\":'+proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4426\":'+proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4427\":'+proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4428\":'+proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4429\":'+proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4430\":'+proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4431\":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4432\":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4433\":'+proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4434\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4437\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4438\":'+proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4439\":'+proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4455\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4456\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:4457\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:4462\":'+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=-27 +lon_0=132 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4467\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4471\":'+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4474\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4484\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4485\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4486\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4487\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4488\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4489\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4491\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4492\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4493\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4494\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4495\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4496\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4497\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4498\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4499\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4500\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4501\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4502\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4503\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4504\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4505\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4506\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4507\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4508\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4509\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4510\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4511\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4512\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4513\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4514\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4515\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4516\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4517\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4518\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4519\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4520\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4521\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4522\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4523\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4524\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4525\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4526\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4527\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4528\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4529\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4530\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4531\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4532\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4533\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4534\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4535\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4536\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4537\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4538\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4539\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4540\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4541\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4542\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4543\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4544\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4545\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4546\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4547\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4548\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4549\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4550\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4551\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4552\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4553\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4554\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:4559\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4568\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4569\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4570\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4571\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4572\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4573\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4574\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4575\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4576\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4577\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4578\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4579\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4580\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4581\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4582\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4583\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4584\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4585\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4586\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4587\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4588\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4589\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4647\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4652\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4653\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4654\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4655\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4656\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4766\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4767\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4768\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4769\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4770\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4771\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4772\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4773\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4774\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4775\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4776\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4777\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4778\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4779\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4780\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4781\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4782\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4783\":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4784\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4785\":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4786\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4787\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4788\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4789\":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4790\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4791\":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4792\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4793\":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4794\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4795\":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4796\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4797\":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4798\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4799\":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4800\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4812\":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4822\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ',\n  \"EPSG:4826\":'+proj=lcc +lat_1=15 +lat_2=16.66666666666667 +lat_0=15.83333333333333 +lon_0=-24 +x_0=161587.83 +y_0=128511.202 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:4839\":'+proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4855\":'+proj=tmerc +lat_0=0 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4856\":'+proj=tmerc +lat_0=0 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4857\":'+proj=tmerc +lat_0=0 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4858\":'+proj=tmerc +lat_0=0 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4859\":'+proj=tmerc +lat_0=0 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4860\":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4861\":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4862\":'+proj=tmerc +lat_0=0 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4863\":'+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4864\":'+proj=tmerc +lat_0=0 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4865\":'+proj=tmerc +lat_0=0 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4866\":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4867\":'+proj=tmerc +lat_0=0 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4868\":'+proj=tmerc +lat_0=0 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4869\":'+proj=tmerc +lat_0=0 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4870\":'+proj=tmerc +lat_0=0 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4871\":'+proj=tmerc +lat_0=0 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4872\":'+proj=tmerc +lat_0=0 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4873\":'+proj=tmerc +lat_0=0 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4874\":'+proj=tmerc +lat_0=0 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4875\":'+proj=tmerc +lat_0=0 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4876\":'+proj=tmerc +lat_0=0 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4877\":'+proj=tmerc +lat_0=0 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4878\":'+proj=tmerc +lat_0=0 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4879\":'+proj=tmerc +lat_0=0 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:4880\":'+proj=tmerc +lat_0=0 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5014\":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5015\":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5016\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5018\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5041\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5042\":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5048\":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5069\":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:5070\":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5071\":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5072\":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5105\":'+proj=tmerc +lat_0=58 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5106\":'+proj=tmerc +lat_0=58 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5107\":'+proj=tmerc +lat_0=58 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5108\":'+proj=tmerc +lat_0=58 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5109\":'+proj=tmerc +lat_0=58 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5110\":'+proj=tmerc +lat_0=58 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5111\":'+proj=tmerc +lat_0=58 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5112\":'+proj=tmerc +lat_0=58 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5113\":'+proj=tmerc +lat_0=58 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5114\":'+proj=tmerc +lat_0=58 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5115\":'+proj=tmerc +lat_0=58 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5116\":'+proj=tmerc +lat_0=58 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5117\":'+proj=tmerc +lat_0=58 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5118\":'+proj=tmerc +lat_0=58 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5119\":'+proj=tmerc +lat_0=58 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5120\":'+proj=tmerc +lat_0=58 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5121\":'+proj=tmerc +lat_0=58 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5122\":'+proj=tmerc +lat_0=58 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5123\":'+proj=tmerc +lat_0=58 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5124\":'+proj=tmerc +lat_0=58 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5125\":'+proj=tmerc +lat_0=58 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5126\":'+proj=tmerc +lat_0=58 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5127\":'+proj=tmerc +lat_0=58 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5128\":'+proj=tmerc +lat_0=58 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5129\":'+proj=tmerc +lat_0=58 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5130\":'+proj=tmerc +lat_0=58 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5167\":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5168\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5169\":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5170\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5171\":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5172\":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5173\":'+proj=tmerc +lat_0=38 +lon_0=125.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5174\":'+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5175\":'+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5176\":'+proj=tmerc +lat_0=38 +lon_0=129.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5177\":'+proj=tmerc +lat_0=38 +lon_0=131.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5178\":'+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5179\":'+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5180\":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5181\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5182\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5183\":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5184\":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5185\":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5186\":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5187\":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5188\":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5221\":'+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:5223\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5234\":'+proj=tmerc +lat_0=7.000480277777778 +lon_0=80.77171111111112 +k=0.9999238418 +x_0=200000 +y_0=200000 +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5235\":'+proj=tmerc +lat_0=7.000471527777778 +lon_0=80.77171308333334 +k=0.9999238418 +x_0=500000 +y_0=500000 +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +units=m +no_defs ',\n  \"EPSG:5243\":'+proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5247\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +no_uoff +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:5253\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5254\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5255\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5256\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5257\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5258\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5259\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5266\":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5269\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5270\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5271\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5272\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5273\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5274\":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5275\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5292\":'+proj=tmerc +lat_0=0 +lon_0=90.73333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5293\":'+proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5294\":'+proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5295\":'+proj=tmerc +lat_0=0 +lon_0=90.03333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5296\":'+proj=tmerc +lat_0=0 +lon_0=90.15000000000001 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5297\":'+proj=tmerc +lat_0=0 +lon_0=91.13333333333334 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5298\":'+proj=tmerc +lat_0=0 +lon_0=91.23333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5299\":'+proj=tmerc +lat_0=0 +lon_0=89.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5300\":'+proj=tmerc +lat_0=0 +lon_0=91.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5301\":'+proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5302\":'+proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5303\":'+proj=tmerc +lat_0=0 +lon_0=89.06666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5304\":'+proj=tmerc +lat_0=0 +lon_0=90.26666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5305\":'+proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5306\":'+proj=tmerc +lat_0=0 +lon_0=91.75 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5307\":'+proj=tmerc +lat_0=0 +lon_0=90.5 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5308\":'+proj=tmerc +lat_0=0 +lon_0=90.16666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5309\":'+proj=tmerc +lat_0=0 +lon_0=90.11666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5310\":'+proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5311\":'+proj=tmerc +lat_0=0 +lon_0=90.86666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5316\":'+proj=tmerc +lat_0=0 +lon_0=-7 +k=0.999997 +x_0=200000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5320\":'+proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5321\":'+proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5325\":'+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=1700000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5329\":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:5330\":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:5331\":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:5337\":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5343\":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5344\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5345\":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5346\":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5347\":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5348\":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5349\":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5355\":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5356\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5357\":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5361\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5362\":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5367\":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5382\":'+proj=utm +zone=21 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5383\":'+proj=utm +zone=22 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5387\":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5388\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5389\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5396\":'+proj=utm +zone=26 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5456\":'+proj=lcc +lat_1=10.46666666666667 +lat_0=10.46666666666667 +lon_0=-84.33333333333333 +k_0=0.99995696 +x_0=500000 +y_0=271820.522 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5457\":'+proj=lcc +lat_1=9 +lat_0=9 +lon_0=-83.66666666666667 +k_0=0.99995696 +x_0=500000 +y_0=327987.436 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5458\":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:5459\":'+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5460\":'+proj=lcc +lat_1=13.78333333333333 +lat_0=13.78333333333333 +lon_0=-89 +k_0=0.99996704 +x_0=500000 +y_0=295809.184 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5461\":'+proj=lcc +lat_1=13.86666666666667 +lat_0=13.86666666666667 +lon_0=-85.5 +k_0=0.99990314 +x_0=500000 +y_0=359891.816 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5462\":'+proj=lcc +lat_1=11.73333333333333 +lat_0=11.73333333333333 +lon_0=-85.5 +k_0=0.9999222800000001 +x_0=500000 +y_0=288876.327 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5463\":'+proj=utm +zone=17 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5466\":'+proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs ',\n  \"EPSG:5469\":'+proj=lcc +lat_1=8.416666666666666 +lat_0=8.416666666666666 +lon_0=-80 +k_0=0.99989909 +x_0=500000 +y_0=294865.303 +ellps=clrk66 +units=m +no_defs ',\n  \"EPSG:5472\":'+proj=poly +lat_0=8.25 +lon_0=-81 +x_0=914391.7962 +y_0=999404.7217154861 +ellps=clrk66 +to_meter=0.9143917962 +no_defs ',\n  \"EPSG:5479\":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=163 +x_0=7000000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5480\":'+proj=lcc +lat_1=-73.66666666666667 +lat_2=-75.33333333333333 +lat_0=-74.5 +lon_0=165 +x_0=5000000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5481\":'+proj=lcc +lat_1=-70.66666666666667 +lat_2=-72.33333333333333 +lat_0=-71.5 +lon_0=166 +x_0=3000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5482\":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=180 +k=0.994 +x_0=5000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5490\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5513\":'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5514\":'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5518\":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=175,-38,113,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5519\":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:5520\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5523\":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=1500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5530\":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5531\":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5532\":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5533\":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5534\":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5535\":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5536\":'+proj=utm +zone=21 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:5537\":'+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:5538\":'+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:5539\":'+proj=utm +zone=24 +south +ellps=intl +units=m +no_defs ',\n  \"EPSG:5550\":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5551\":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5552\":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5559\":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5562\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5563\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5564\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5565\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5566\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5567\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5568\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5569\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5570\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5571\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5572\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5573\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5574\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5575\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5576\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5577\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5578\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5579\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5580\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5581\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5582\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5583\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ',\n  \"EPSG:5588\":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=304800 +y_0=304800 +datum=NAD27 +units=ft +no_defs ',\n  \"EPSG:5589\":'+proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs ',\n  \"EPSG:5596\":'+proj=tmerc +lat_0=0 +lon_0=11.33333333333333 +k=1 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5623\":'+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:5624\":'+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:5625\":'+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:5627\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5629\":'+proj=utm +zone=38 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ',\n  \"EPSG:5631\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5632\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5633\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5634\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5635\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5636\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5637\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5638\":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5639\":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5641\":'+proj=merc +lon_0=-43 +lat_ts=-2 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5643\":'+proj=lcc +lat_1=52.66666666666666 +lat_2=54.33333333333334 +lat_0=48 +lon_0=10 +x_0=815000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5644\":'+proj=utm +zone=39 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5646\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:5649\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5650\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5651\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5652\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5653\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5654\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:5655\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:5659\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=500053 +y_0=-3999820 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ',\n  \"EPSG:5663\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5664\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5665\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5666\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5667\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5668\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5669\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5670\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5671\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5672\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ',\n  \"EPSG:5673\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5674\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5675\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5676\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5677\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5678\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5679\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5680\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:5682\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5683\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5684\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5685\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:5700\":'+proj=utm +zone=1 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5825\":'+proj=tmerc +lat_0=-35.31773627777778 +lon_0=149.0092948305555 +k=1.000086 +x_0=200000 +y_0=600000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:5836\":'+proj=utm +zone=37 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5837\":'+proj=utm +zone=40 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5839\":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5842\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5844\":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5858\":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5875\":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5876\":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5877\":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5879\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5880\":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:5887\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs ',\n  \"EPSG:5890\":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=90 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ',\n  \"EPSG:5921\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5922\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5923\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5924\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5925\":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5926\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5927\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5928\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5929\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5930\":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5931\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5932\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5933\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5934\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5935\":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5936\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-150 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5937\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-100 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5938\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-33 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5939\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=18 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:5940\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=105 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6050\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-30 +x_0=25500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6051\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-52 +x_0=18500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6052\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-12 +x_0=20500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6053\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6054\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-39 +x_0=31500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6055\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-10 +x_0=33500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6056\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-64 +x_0=20500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6057\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-39 +x_0=22500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6058\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-14 +x_0=24500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6059\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-62 +x_0=41500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6060\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-42 +x_0=43500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6061\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-22 +x_0=45500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6062\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-56 +x_0=26500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6063\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-38 +x_0=28500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6064\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-20 +x_0=30500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6065\":'+proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-51 +x_0=11500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6066\":'+proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-34 +x_0=13500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6067\":'+proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-52 +x_0=20500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6068\":'+proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-37 +x_0=22500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6069\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=16 +x_0=22500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6070\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=21 +x_0=11500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6071\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=10 +x_0=26500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6072\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=34 +x_0=28500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6073\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=14 +x_0=11500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6074\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=34 +x_0=13500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6075\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=53 +x_0=24500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6076\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=93 +x_0=26500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6077\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=52 +x_0=13500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6078\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=83 +x_0=15500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6079\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=114 +x_0=17500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6080\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=145 +x_0=19500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6081\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=58 +x_0=30500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6082\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=82 +x_0=32500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6083\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=106 +x_0=34500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6084\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=130 +x_0=36500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6085\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=154 +x_0=38500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6086\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=179 +x_0=40500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6087\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=54 +x_0=15500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6088\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=74 +x_0=17500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6089\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=95 +x_0=19500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6090\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=116 +x_0=21500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6091\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=137 +x_0=23500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6092\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=158 +x_0=25500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6093\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=179 +x_0=27500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6094\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-163 +x_0=29500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6095\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-147 +x_0=31500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6096\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-165 +x_0=14500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6097\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-147 +x_0=16500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6098\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-90 +x_0=23500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6099\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-115 +x_0=14500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6100\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-75 +x_0=16500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6101\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-129 +x_0=25500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6102\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-99 +x_0=27500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6103\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6104\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-129 +x_0=14500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6105\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-104 +x_0=16500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6106\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-79 +x_0=18500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6107\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-131 +x_0=33500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6108\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-111 +x_0=35500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6109\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-91 +x_0=37500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6110\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-71 +x_0=39500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6111\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-132 +x_0=18500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6112\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-113 +x_0=20500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6113\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-94 +x_0=22500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6114\":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-75 +x_0=24500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6115\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=30 +x_0=27500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6116\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=90 +x_0=29500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6117\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=150 +x_0=31500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6118\":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-150 +x_0=21500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6119\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=133 +x_0=28500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6120\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=166 +x_0=10500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6121\":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-154 +x_0=12500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6122\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=176 +x_0=21500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6123\":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-153 +x_0=23500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6124\":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-155 +x_0=12500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:6125\":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-5 +x_0=47500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:6128\":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=ft +no_defs ',\n  \"EPSG:6129\":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=ft +no_defs ',\n  \"EPSG:6141\":'+proj=lcc +lat_1=19.33333333333333 +lat_2=19.7 +lat_0=19.33333333333333 +lon_0=80.56666666666666 +x_0=899160 +y_0=579120 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ',\n  \"EPSG:20004\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20005\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20006\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20007\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20008\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20009\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20010\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20011\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20012\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20013\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20014\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20015\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20016\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20017\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20018\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20019\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20020\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20021\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20022\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20023\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20024\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20025\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20026\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20027\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20028\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20029\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20030\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20031\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20032\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20064\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20065\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20066\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20067\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20068\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20069\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20070\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20071\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20072\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20073\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20074\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20075\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20076\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20077\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20078\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20079\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20080\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20081\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20082\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20083\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20084\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20085\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20086\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20087\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20088\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20089\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20090\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20091\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20092\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ',\n  \"EPSG:20135\":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20136\":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20137\":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20138\":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20248\":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20249\":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20250\":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20251\":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20252\":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20253\":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20254\":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20255\":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20256\":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20257\":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20258\":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ',\n  \"EPSG:20348\":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20349\":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20350\":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20351\":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20352\":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20353\":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20354\":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20355\":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20356\":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20357\":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20358\":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20436\":'+proj=utm +zone=36 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20437\":'+proj=utm +zone=37 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20438\":'+proj=utm +zone=38 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20439\":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20440\":'+proj=utm +zone=40 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20499\":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20538\":'+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20539\":'+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20790\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs ',\n  \"EPSG:20791\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs ',\n  \"EPSG:20822\":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20823\":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20824\":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20934\":'+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20935\":'+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:20936\":'+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21035\":'+proj=utm +zone=35 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21036\":'+proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21037\":'+proj=utm +zone=37 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21095\":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21096\":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21097\":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21100\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:21148\":'+proj=utm +zone=48 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21149\":'+proj=utm +zone=49 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21150\":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21291\":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21292\":'+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21413\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21414\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21415\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21416\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21417\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21418\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21419\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21420\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21421\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21422\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21423\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21453\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21454\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21455\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21456\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21457\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21458\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21459\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21460\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21461\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21462\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21463\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21473\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21474\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21475\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21476\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21477\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21478\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21479\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21480\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21481\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21482\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21483\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21500\":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs ',\n  \"EPSG:21780\":'+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +units=m +no_defs ',\n  \"EPSG:21781\":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21782\":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21817\":'+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21818\":'+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21891\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21892\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21893\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21894\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21896\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21897\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21898\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:21899\":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22032\":'+proj=utm +zone=32 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22033\":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22091\":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22092\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22171\":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22172\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22173\":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22174\":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22175\":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22176\":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22177\":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22181\":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22182\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22183\":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22184\":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22185\":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22186\":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22187\":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22191\":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22192\":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22193\":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22194\":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22195\":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22196\":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22197\":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22234\":'+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22235\":'+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22236\":'+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22275\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22277\":'+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22279\":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22281\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22283\":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22285\":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22287\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22289\":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22291\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22293\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22332\":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22391\":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22392\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22521\":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22522\":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22523\":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22524\":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22525\":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22700\":'+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22770\":'+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22780\":'+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22832\":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:22991\":'+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22992\":'+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22993\":'+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:22994\":'+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23028\":'+proj=utm +zone=28 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23029\":'+proj=utm +zone=29 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23030\":'+proj=utm +zone=30 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23031\":'+proj=utm +zone=31 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23032\":'+proj=utm +zone=32 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23033\":'+proj=utm +zone=33 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23034\":'+proj=utm +zone=34 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23035\":'+proj=utm +zone=35 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23036\":'+proj=utm +zone=36 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23037\":'+proj=utm +zone=37 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23038\":'+proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23090\":'+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23095\":'+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23239\":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23240\":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23433\":'+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:23700\":'+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23830\":'+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23831\":'+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23832\":'+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23833\":'+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23834\":'+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23835\":'+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23836\":'+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23837\":'+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23838\":'+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23839\":'+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23840\":'+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23841\":'+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23842\":'+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23843\":'+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23844\":'+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23845\":'+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23846\":'+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23847\":'+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23848\":'+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23849\":'+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23850\":'+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23851\":'+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23852\":'+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23853\":'+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23866\":'+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23867\":'+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23868\":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23869\":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23870\":'+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23871\":'+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23872\":'+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23877\":'+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23878\":'+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23879\":'+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23880\":'+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23881\":'+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23882\":'+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23883\":'+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23884\":'+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23886\":'+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23887\":'+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23888\":'+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23889\":'+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23890\":'+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23891\":'+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23892\":'+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23893\":'+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23894\":'+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23946\":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23947\":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:23948\":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24047\":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24048\":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24100\":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs ',\n  \"EPSG:24200\":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24305\":'+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24306\":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24311\":'+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24312\":'+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24313\":'+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24342\":'+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24343\":'+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24344\":'+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24345\":'+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24346\":'+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24347\":'+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24370\":'+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24371\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24372\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24373\":'+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24374\":'+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24375\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24376\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24377\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24378\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24379\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24380\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24381\":'+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24382\":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ',\n  \"EPSG:24383\":'+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24500\":'+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24547\":'+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24548\":'+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24571\":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs ',\n  \"EPSG:24600\":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24718\":'+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24719\":'+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24720\":'+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24817\":'+proj=utm +zone=17 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24818\":'+proj=utm +zone=18 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24819\":'+proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24820\":'+proj=utm +zone=20 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24821\":'+proj=utm +zone=21 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24877\":'+proj=utm +zone=17 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24878\":'+proj=utm +zone=18 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24879\":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24880\":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24881\":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24882\":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24891\":'+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24892\":'+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:24893\":'+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25000\":'+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25231\":'+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:25391\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25392\":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25393\":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25394\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25395\":'+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25700\":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs ',\n  \"EPSG:25828\":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25829\":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25830\":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25831\":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25832\":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25833\":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25834\":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25835\":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25836\":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25837\":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25838\":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25884\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:25932\":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26191\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26192\":'+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26193\":'+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26194\":'+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26195\":'+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26237\":'+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26331\":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26332\":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26391\":'+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26392\":'+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26393\":'+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26432\":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26591\":'+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs ',\n  \"EPSG:26592\":'+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs ',\n  \"EPSG:26632\":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26692\":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26701\":'+proj=utm +zone=1 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26702\":'+proj=utm +zone=2 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26703\":'+proj=utm +zone=3 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26704\":'+proj=utm +zone=4 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26705\":'+proj=utm +zone=5 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26706\":'+proj=utm +zone=6 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26707\":'+proj=utm +zone=7 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26708\":'+proj=utm +zone=8 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26709\":'+proj=utm +zone=9 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26710\":'+proj=utm +zone=10 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26711\":'+proj=utm +zone=11 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26712\":'+proj=utm +zone=12 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26713\":'+proj=utm +zone=13 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26714\":'+proj=utm +zone=14 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26715\":'+proj=utm +zone=15 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26716\":'+proj=utm +zone=16 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26717\":'+proj=utm +zone=17 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26718\":'+proj=utm +zone=18 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26719\":'+proj=utm +zone=19 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26720\":'+proj=utm +zone=20 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26721\":'+proj=utm +zone=21 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26722\":'+proj=utm +zone=22 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:26729\":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26730\":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26731\":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +no_uoff +gamma=323.1301023611111 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26732\":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26733\":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26734\":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26735\":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26736\":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26737\":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26738\":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26739\":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26740\":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26741\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26742\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26743\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26744\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26745\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26746\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26747\":'+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26748\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26749\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26750\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26751\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26752\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26753\":'+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26754\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26755\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26756\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26757\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26758\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26759\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26760\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26766\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26767\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26768\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26769\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26770\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26771\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26772\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26773\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26774\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26775\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26776\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26777\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26778\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26779\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26780\":'+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26781\":'+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26782\":'+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26783\":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26784\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26785\":'+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26786\":'+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26787\":'+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26791\":'+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26792\":'+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26793\":'+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26794\":'+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26795\":'+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26796\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26797\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26798\":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26799\":'+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:26801\":'+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26802\":'+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26803\":'+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26811\":'+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26812\":'+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26813\":'+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ',\n  \"EPSG:26814\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26815\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26819\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26820\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26821\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26822\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26823\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26824\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26825\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26826\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26830\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26831\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26832\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26833\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26834\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26835\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26836\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26837\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26841\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26842\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26843\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26844\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26845\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26846\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26847\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26848\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26849\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26850\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26851\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26852\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26853\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26854\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26855\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26856\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26857\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26858\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26859\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26860\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26861\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26862\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26863\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26864\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26865\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26866\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26867\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26868\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26869\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26870\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:26891\":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26892\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26893\":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26894\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26895\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26896\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26897\":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26898\":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26899\":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26901\":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26902\":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26903\":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26904\":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26905\":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26906\":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26907\":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26908\":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26909\":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26910\":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26911\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26912\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26913\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26914\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26915\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26916\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26917\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26918\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26919\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26920\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26921\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26922\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26923\":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26929\":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26930\":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26931\":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26932\":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26933\":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26934\":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26935\":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26936\":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26937\":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26938\":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26939\":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26940\":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26941\":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26942\":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26943\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26944\":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26945\":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26946\":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26948\":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26949\":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26950\":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26951\":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26952\":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26953\":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26954\":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26955\":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26956\":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26957\":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26958\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26959\":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26960\":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26961\":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26962\":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26963\":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26964\":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26965\":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26966\":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26967\":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26968\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26969\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26970\":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26971\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26972\":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26973\":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26974\":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26975\":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26976\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26977\":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26978\":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26979\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26980\":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26981\":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26982\":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26983\":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26984\":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26985\":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26986\":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26987\":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26988\":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26989\":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26990\":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26991\":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26992\":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26993\":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26994\":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26995\":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26996\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26997\":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:26998\":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27037\":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27038\":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27039\":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27040\":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27120\":'+proj=utm +zone=20 +ellps=intl +towgs84=-10,375,165,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27200\":'+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27205\":'+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27206\":'+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27207\":'+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27208\":'+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27209\":'+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27210\":'+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27211\":'+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27212\":'+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27213\":'+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27214\":'+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27215\":'+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27216\":'+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27217\":'+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27218\":'+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27219\":'+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27220\":'+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27221\":'+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27222\":'+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27223\":'+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27224\":'+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27225\":'+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27226\":'+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27227\":'+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27228\":'+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27229\":'+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27230\":'+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27231\":'+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27232\":'+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27258\":'+proj=utm +zone=58 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27259\":'+proj=utm +zone=59 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27260\":'+proj=utm +zone=60 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ',\n  \"EPSG:27291\":'+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs ',\n  \"EPSG:27292\":'+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs ',\n  \"EPSG:27391\":'+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27392\":'+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27393\":'+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27394\":'+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27395\":'+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27396\":'+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27397\":'+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27398\":'+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ',\n  \"EPSG:27429\":'+proj=utm +zone=29 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27492\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27493\":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:27500\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +units=m +no_defs ',\n  \"EPSG:27561\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27562\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27563\":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27564\":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27571\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27572\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27573\":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27574\":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27581\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27582\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27583\":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27584\":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27591\":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27592\":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27593\":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27594\":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:27700\":'+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs ',\n  \"EPSG:28191\":'+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',\n  \"EPSG:28192\":'+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',\n  \"EPSG:28193\":'+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ',\n  \"EPSG:28232\":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28348\":'+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28349\":'+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28350\":'+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28351\":'+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28352\":'+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28353\":'+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28354\":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28355\":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28356\":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28357\":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28358\":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28402\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28403\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28404\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28405\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28406\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28407\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28408\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28409\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28410\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28411\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28412\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28413\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28414\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28415\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28416\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28417\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28418\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28419\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28420\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28421\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28422\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28423\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28424\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28425\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28426\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28427\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28428\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28429\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28430\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28431\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28432\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28462\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28463\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28464\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28465\":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28466\":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28467\":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28468\":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28469\":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28470\":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28471\":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28472\":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28473\":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28474\":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28475\":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28476\":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28477\":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28478\":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28479\":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28480\":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28481\":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28482\":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28483\":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28484\":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28485\":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28486\":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28487\":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28488\":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28489\":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28490\":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28491\":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28492\":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ',\n  \"EPSG:28600\":'+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:28991\":'+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs ',\n  \"EPSG:28992\":'+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs ',\n  \"EPSG:29100\":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29101\":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29118\":'+proj=utm +zone=18 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29119\":'+proj=utm +zone=19 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29120\":'+proj=utm +zone=20 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29121\":'+proj=utm +zone=21 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29122\":'+proj=utm +zone=22 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29168\":'+proj=utm +zone=18 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29169\":'+proj=utm +zone=19 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29170\":'+proj=utm +zone=20 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29171\":'+proj=utm +zone=21 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29172\":'+proj=utm +zone=22 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29177\":'+proj=utm +zone=17 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29178\":'+proj=utm +zone=18 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29179\":'+proj=utm +zone=19 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29180\":'+proj=utm +zone=20 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29181\":'+proj=utm +zone=21 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29182\":'+proj=utm +zone=22 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29183\":'+proj=utm +zone=23 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29184\":'+proj=utm +zone=24 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29185\":'+proj=utm +zone=25 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29187\":'+proj=utm +zone=17 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29188\":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29189\":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29190\":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29191\":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29192\":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29193\":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29194\":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29195\":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29220\":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29221\":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29333\":'+proj=utm +zone=33 +south +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29371\":'+proj=tmerc +lat_0=-22 +lon_0=11 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29373\":'+proj=tmerc +lat_0=-22 +lon_0=13 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29375\":'+proj=tmerc +lat_0=-22 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29377\":'+proj=tmerc +lat_0=-22 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29379\":'+proj=tmerc +lat_0=-22 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29381\":'+proj=tmerc +lat_0=-22 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29383\":'+proj=tmerc +lat_0=-22 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29385\":'+proj=tmerc +lat_0=-22 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ',\n  \"EPSG:29635\":'+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:29636\":'+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:29700\":'+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:29702\":'+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs ',\n  \"EPSG:29738\":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29739\":'+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29849\":'+proj=utm +zone=49 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29850\":'+proj=utm +zone=50 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29871\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +to_meter=20.11676512155263 +no_defs ',\n  \"EPSG:29872\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +to_meter=0.3047994715386762 +no_defs ',\n  \"EPSG:29873\":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:29900\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',\n  \"EPSG:29901\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',\n  \"EPSG:29902\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',\n  \"EPSG:29903\":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ',\n  \"EPSG:30161\":'+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30162\":'+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30163\":'+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30164\":'+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30165\":'+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30166\":'+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30167\":'+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30168\":'+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30169\":'+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30170\":'+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30171\":'+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30172\":'+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30173\":'+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30174\":'+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30175\":'+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30176\":'+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30177\":'+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30178\":'+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30179\":'+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30200\":'+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.201166195164 +no_defs ',\n  \"EPSG:30339\":'+proj=utm +zone=39 +ellps=helmert +units=m +no_defs ',\n  \"EPSG:30340\":'+proj=utm +zone=40 +ellps=helmert +units=m +no_defs ',\n  \"EPSG:30491\":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30492\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:30493\":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:30494\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:30729\":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30730\":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30731\":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30732\":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30791\":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30792\":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ',\n  \"EPSG:30800\":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ',\n  \"EPSG:31028\":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs ',\n  \"EPSG:31121\":'+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31154\":'+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31170\":'+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31171\":'+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31251\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31252\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31253\":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31254\":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31255\":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31256\":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31257\":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31258\":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31259\":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31265\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31266\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31267\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31268\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31275\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31276\":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31277\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31278\":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31279\":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31281\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31282\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31283\":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31284\":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31285\":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31286\":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31287\":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31288\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31289\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31290\":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31291\":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31292\":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31293\":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ',\n  \"EPSG:31294\":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31295\":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31296\":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31297\":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ',\n  \"EPSG:31300\":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs ',\n  \"EPSG:31370\":'+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs ',\n  \"EPSG:31461\":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31462\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31463\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31464\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31465\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31466\":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31467\":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31468\":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31469\":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ',\n  \"EPSG:31528\":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31529\":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31600\":'+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31700\":'+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31838\":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31839\":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31900\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31901\":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31965\":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31966\":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31967\":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31968\":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31969\":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31970\":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31971\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31972\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31973\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31974\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31975\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31976\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31977\":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31978\":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31979\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31980\":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31981\":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31982\":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31983\":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31984\":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31985\":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31986\":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31987\":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31988\":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31989\":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31990\":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31991\":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31992\":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31993\":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31994\":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31995\":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31996\":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31997\":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31998\":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:31999\":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32000\":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32001\":'+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32002\":'+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32003\":'+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32005\":'+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32006\":'+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32007\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32008\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32009\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32010\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32011\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32012\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32013\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32014\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32015\":'+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32016\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32017\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32018\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32019\":'+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32020\":'+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32021\":'+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32022\":'+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32023\":'+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32024\":'+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32025\":'+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32026\":'+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32027\":'+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32028\":'+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32029\":'+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32030\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32031\":'+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32033\":'+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32034\":'+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32035\":'+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32036\":'+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32037\":'+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32038\":'+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32039\":'+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32040\":'+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32041\":'+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32042\":'+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32043\":'+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32044\":'+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32045\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32046\":'+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32047\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32048\":'+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32049\":'+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32050\":'+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32051\":'+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32052\":'+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32053\":'+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32054\":'+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32055\":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32056\":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32057\":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32058\":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32061\":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32062\":'+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32064\":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32065\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32066\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32067\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32074\":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32075\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32076\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32077\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32081\":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32082\":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32083\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32084\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32085\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32086\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32098\":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ',\n  \"EPSG:32099\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ',\n  \"EPSG:32100\":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32104\":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32107\":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32108\":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32109\":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32110\":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32111\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32112\":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32113\":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32114\":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32115\":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32116\":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32117\":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32118\":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32119\":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32120\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32121\":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32122\":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32123\":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32124\":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32125\":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32126\":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32127\":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32128\":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32129\":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32130\":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32133\":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32134\":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32135\":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32136\":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32137\":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32138\":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32139\":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32140\":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32141\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32142\":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32143\":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32144\":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32145\":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32146\":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32147\":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32148\":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32149\":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32150\":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32151\":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32152\":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32153\":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32154\":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32155\":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32156\":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32157\":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32158\":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32161\":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32164\":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:32165\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:32166\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:32167\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ',\n  \"EPSG:32180\":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32181\":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32182\":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32183\":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32184\":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32185\":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32186\":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32187\":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32188\":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32189\":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32190\":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32191\":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32192\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32193\":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32194\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32195\":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32196\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32197\":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32198\":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32199\":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32201\":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32202\":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32203\":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32204\":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32205\":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32206\":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32207\":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32208\":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32209\":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32210\":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32211\":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32212\":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32213\":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32214\":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32215\":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32216\":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32217\":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32218\":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32219\":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32220\":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32221\":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32222\":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32223\":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32224\":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32225\":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32226\":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32227\":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32228\":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32229\":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32230\":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32231\":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32232\":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32233\":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32234\":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32235\":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32236\":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32237\":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32238\":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32239\":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32240\":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32241\":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32242\":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32243\":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32244\":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32245\":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32246\":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32247\":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32248\":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32249\":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32250\":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32251\":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32252\":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32253\":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32254\":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32255\":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32256\":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32257\":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32258\":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32259\":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32260\":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32301\":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32302\":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32303\":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32304\":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32305\":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32306\":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32307\":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32308\":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32309\":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32310\":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32311\":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32312\":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32313\":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32314\":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32315\":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32316\":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32317\":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32318\":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32319\":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32320\":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32321\":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32322\":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32323\":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32324\":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32325\":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32326\":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32327\":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32328\":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32329\":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32330\":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32331\":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32332\":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32333\":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32334\":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32335\":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32336\":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32337\":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32338\":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32339\":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32340\":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32341\":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32342\":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32343\":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32344\":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32345\":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32346\":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32347\":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32348\":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32349\":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32350\":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32351\":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32352\":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32353\":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32354\":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32355\":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32356\":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32357\":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32358\":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32359\":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32360\":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ',\n  \"EPSG:32401\":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32402\":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32403\":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32404\":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32405\":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32406\":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32407\":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32408\":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32409\":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32410\":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32411\":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32412\":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32413\":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32414\":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32415\":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32416\":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32417\":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32418\":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32419\":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32420\":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32421\":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32422\":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32423\":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32424\":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32425\":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32426\":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32427\":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32428\":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32429\":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32430\":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32431\":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32432\":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32433\":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32434\":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32435\":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32436\":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32437\":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32438\":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32439\":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32440\":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32441\":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32442\":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32443\":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32444\":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32445\":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32446\":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32447\":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32448\":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32449\":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32450\":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32451\":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32452\":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32453\":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32454\":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32455\":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32456\":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32457\":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32458\":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32459\":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32460\":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32501\":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32502\":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32503\":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32504\":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32505\":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32506\":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32507\":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32508\":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32509\":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32510\":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32511\":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32512\":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32513\":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32514\":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32515\":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32516\":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32517\":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32518\":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32519\":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32520\":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32521\":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32522\":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32523\":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32524\":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32525\":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32526\":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32527\":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32528\":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32529\":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32530\":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32531\":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32532\":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32533\":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32534\":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32535\":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32536\":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32537\":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32538\":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32539\":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32540\":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32541\":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32542\":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32543\":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32544\":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32545\":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32546\":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32547\":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32548\":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32549\":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32550\":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32551\":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32552\":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32553\":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32554\":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32555\":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32556\":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32557\":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32558\":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32559\":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32560\":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ',\n  \"EPSG:32601\":'+proj=utm +zone=1 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32602\":'+proj=utm +zone=2 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32603\":'+proj=utm +zone=3 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32604\":'+proj=utm +zone=4 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32605\":'+proj=utm +zone=5 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32606\":'+proj=utm +zone=6 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32607\":'+proj=utm +zone=7 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32608\":'+proj=utm +zone=8 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32609\":'+proj=utm +zone=9 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32610\":'+proj=utm +zone=10 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32611\":'+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32612\":'+proj=utm +zone=12 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32613\":'+proj=utm +zone=13 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32614\":'+proj=utm +zone=14 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32615\":'+proj=utm +zone=15 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32616\":'+proj=utm +zone=16 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32617\":'+proj=utm +zone=17 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32618\":'+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32619\":'+proj=utm +zone=19 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32620\":'+proj=utm +zone=20 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32621\":'+proj=utm +zone=21 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32622\":'+proj=utm +zone=22 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32623\":'+proj=utm +zone=23 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32624\":'+proj=utm +zone=24 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32625\":'+proj=utm +zone=25 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32626\":'+proj=utm +zone=26 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32627\":'+proj=utm +zone=27 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32628\":'+proj=utm +zone=28 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32629\":'+proj=utm +zone=29 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32630\":'+proj=utm +zone=30 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32631\":'+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32632\":'+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32633\":'+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32634\":'+proj=utm +zone=34 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32635\":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32636\":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32637\":'+proj=utm +zone=37 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32638\":'+proj=utm +zone=38 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32639\":'+proj=utm +zone=39 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32640\":'+proj=utm +zone=40 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32641\":'+proj=utm +zone=41 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32642\":'+proj=utm +zone=42 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32643\":'+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32644\":'+proj=utm +zone=44 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32645\":'+proj=utm +zone=45 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32646\":'+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32647\":'+proj=utm +zone=47 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32648\":'+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32649\":'+proj=utm +zone=49 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32650\":'+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32651\":'+proj=utm +zone=51 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32652\":'+proj=utm +zone=52 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32653\":'+proj=utm +zone=53 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32654\":'+proj=utm +zone=54 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32655\":'+proj=utm +zone=55 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32656\":'+proj=utm +zone=56 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32657\":'+proj=utm +zone=57 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32658\":'+proj=utm +zone=58 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32659\":'+proj=utm +zone=59 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32660\":'+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32661\":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32662\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32663\":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ',\n  \"EPSG:32664\":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',\n  \"EPSG:32665\":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',\n  \"EPSG:32666\":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',\n  \"EPSG:32667\":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ',\n  \"EPSG:32701\":'+proj=utm +zone=1 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32702\":'+proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32703\":'+proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32704\":'+proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32705\":'+proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32706\":'+proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32707\":'+proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32708\":'+proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32709\":'+proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32710\":'+proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32711\":'+proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32712\":'+proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32713\":'+proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32714\":'+proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32715\":'+proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32716\":'+proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32717\":'+proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32718\":'+proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32719\":'+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32720\":'+proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32721\":'+proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32722\":'+proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32723\":'+proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32724\":'+proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32725\":'+proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32726\":'+proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32727\":'+proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32728\":'+proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32729\":'+proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32730\":'+proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32731\":'+proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32732\":'+proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32733\":'+proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32734\":'+proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32735\":'+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32736\":'+proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32737\":'+proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32738\":'+proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32739\":'+proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32740\":'+proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32741\":'+proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32742\":'+proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32743\":'+proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32744\":'+proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32745\":'+proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32746\":'+proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32747\":'+proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32748\":'+proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32749\":'+proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32750\":'+proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32751\":'+proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32752\":'+proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32753\":'+proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32754\":'+proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32755\":'+proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32756\":'+proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32757\":'+proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32758\":'+proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32759\":'+proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32760\":'+proj=utm +zone=60 +south +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32761\":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ',\n  \"EPSG:32766\":'+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs '\n};\n\n},{}],78:[function(require,module,exports){\nvar util = require('util')\n  , fileType = require('file-type');\n\nvar TileCreator = require('./index').TileCreator\n  , TileBoundingBoxUtils = require('../tileBoundingBoxUtils')\n  , TileUtilities = require('./tileUtilities')\n  , ProjectTile = require('./projectTile.js');\n\nfunction CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) {\n  TileCreator.apply(this, arguments);\n  this.canvas = canvas || document.createElement('canvas');\n  this.canvas.width  = width;\n  this.canvas.height = height;\n  this.ctx = this.canvas.getContext('2d');\n\n  this.image = document.createElement('img');\n\n  this.tileCanvas = document.createElement('canvas');\n  this.tileContext = this.tileCanvas.getContext('2d');\n  this.tileCanvas.width = tileMatrix.tile_width;\n  this.tileCanvas.height = tileMatrix.tile_height;\n\n  this.imageData = new Uint8ClampedArray(width * height * 4);\n}\n\nutil.inherits(CanvasTileCreator, TileCreator);\n\nCanvasTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) {\n  var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1);\n  this.imageData.set(color.data, (targetY * this.width * 4) + (targetX * 4));\n};\n\nCanvasTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) {\n  var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow);\n\n  var type = fileType(tileData);\n  var binary = '';\n  var bytes = tileData;\n  var len = bytes.byteLength;\n  for (var i = 0; i < len; i++) {\n    binary += String.fromCharCode( bytes[ i ] );\n  }\n  var base64Data = btoa( binary );\n\n  return new Promise(function(resolve, reject) {\n    this.chunks = [];\n    this.image.onload = function() {\n      resolve(this.tileContext.drawImage(this.image, 0, 0));\n    }.bind(this);\n    this.image.src = 'data:'+type.mime+';base64,' + base64Data;\n  }.bind(this))\n  .then(function() {\n    return this.projectTile(tileData, gridColumn, gridRow);\n  }.bind(this))\n  .then(function() {\n    if (this.chunks && this.chunks.length) {\n      return this.chunks.reduce(function(sequence, chunk) {\n        var type = fileType(tileData);\n\n        var binary = '';\n        var bytes = chunk.chunk;\n        var len = bytes.byteLength;\n        for (var i = 0; i < len; i++) {\n          binary += String.fromCharCode( bytes[ i ] );\n        }\n\n        var base64DataChunk = btoa( binary );\n        var image = document.createElement('img');\n\n        return sequence.then(function() {\n          return new Promise(function(resolve, reject) {\n            image.onload = function() {\n              var p = chunk.position;\n\n              this.ctx.drawImage(image,\n                p.sx,\n                p.sy,\n                p.sWidth,\n                p.sHeight,\n                p.dx,\n                p.dy,\n                p.dWidth,\n                p.dHeight\n              );\n              resolve();\n            }.bind(this);\n            image.src = 'data:'+type.mime+';base64,' + base64DataChunk;\n          }.bind(this));\n        }.bind(this));\n\n      }.bind(this), Promise.resolve());\n    }\n  }.bind(this));\n};\n\nCanvasTileCreator.prototype.getCompleteTile = function (format, callback) {\n  return this.canvas.toDataURL();\n};\n\nCanvasTileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) {\n  var ctx = this.ctx;\n  var width = this.width;\n  var height = this.height;\n\n  var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, this.tileBoundingBox, this.height, this.width, this.projectionTo, this.projectionFrom, this.projectionFromDefinition, this.tileHeightUnitsPerPixel, this.tileWidthUnitsPerPixel, this.tileMatrix.pixel_x_size, this.tileMatrix.pixel_y_size);\n\n  var job = {\n    tileBoundingBox: JSON.stringify(this.tileBoundingBox),\n    tileWidthUnitsPerPixel: this.tileWidthUnitsPerPixel,\n    tileHeightUnitsPerPixel: this.tileHeightUnitsPerPixel,\n    projectionTo: this.projectionTo,\n    projectionFrom: this.projectionFrom,\n    projectionFromDefinition: this.projectionFromDefinition,\n    tileWidth: this.tileMatrix.tile_width,\n    tileHeight: this.tileMatrix.tile_height,\n    pixelYSize: this.tileMatrix.pixel_y_size,\n    pixelXSize: this.tileMatrix.pixel_x_size,\n    height: this.height,\n    width: this.width,\n    tilePieceBoundingBox: JSON.stringify(tilePieceBoundingBox),\n    imageData: this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer\n  };\n\n  return new Promise(function(resolve, reject) {\n    try {\n      var work = require('webworkify');\n      var worker = work(require('./tileWorker.js'));\n\n      worker.onmessage = function(e) {\n        resolve(workerDone(e.data, piecePosition, ctx));\n      };\n\n      worker.postMessage(job, [this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer]);\n\n    } catch (e) {\n      worker = ProjectTile;\n      worker(job, function(err, data) {\n        resolve(workerDone(data, piecePosition, ctx));\n      });\n    }\n  }.bind(this));\n};\n\nfunction workerDone(data, piecePosition, ctx) {\n  if (data.message === 'done') {\n    var imageData = new Uint8ClampedArray(data.imageData);\n    var offsetX = piecePosition.startX;\n    var offsetY = piecePosition.startY;\n    var finalWidth = data.finalWidth;\n    var finalHeight = data.finalHeight;\n\n    var tmpCanvas = document.createElement('canvas');\n    tmpCanvas.width = finalWidth;\n    tmpCanvas.height = finalHeight;\n    tmpCanvas.getContext('2d').putImageData(new ImageData(imageData, finalWidth, finalHeight), 0, 0);\n\n    ctx.drawImage(tmpCanvas, offsetX, offsetY);\n  }\n}\n\n\nmodule.exports = CanvasTileCreator;\n\n},{\"../tileBoundingBoxUtils\":93,\"./index\":79,\"./projectTile.js\":81,\"./tileUtilities\":82,\"./tileWorker.js\":83,\"file-type\":223,\"util\":343,\"webworkify\":347}],79:[function(require,module,exports){\n(function (process){\nvar proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nvar TileBoundingBoxUtils = require('../tileBoundingBoxUtils');\n\nmodule.exports.initialize = function(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) {\n  var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);\n  var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);\n  var isNode = typeof(process) !== 'undefined' && process.version;\n  if (isNode && !isPhantom && !isElectron) {\n    var NodeTileCreator = require('./node');\n    return new NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas);\n  } else {\n    var CanvasTileCreator = require('./canvas');\n    return new CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas);\n  }\n}\n\nfunction TileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo) {\n  this.width = width;\n  this.height = height;\n  this.tileMatrix = tileMatrix;\n  this.projectionFrom = srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id;\n  this.projectionFromDefinition = srs.definition;\n  this.projectionTo = projectionTo.toUpperCase();\n  this.tileBoundingBox = tileBoundingBox;\n  this.tileMatrixSet = tileMatrixSet;\n  this.chunks = [];\n\n  this.tileHeightUnitsPerPixel = (tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude) / height;\n  this.tileWidthUnitsPerPixel = (tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude) / width;\n\n  // use this as a quick check if the projections are equal.  If they are we can shortcut some math\n  // special cases 'EPSG:900913' =='EPSG:3857' == 'EPSG:102113'\n  this.sameProjection = (this.projectionFrom === this.projectionTo) || (this.projectionTo === 'EPSG:3857' && (this.projectionFrom === 'EPSG:900913' || this.projectionFrom === 'EPSG:102113'));\n}\n\nmodule.exports.TileCreator = TileCreator;\n\nTileCreator.prototype.projectTile = function(tileData, gridColumn, gridRow) {\n  var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow);\n  if (!this.sameProjection) {\n    return this.reproject(tileData, bb);\n  } else {\n    return Promise.resolve(this.cutAndScale(tileData, bb));\n  }\n}\n\nTileCreator.prototype.cutAndScale = function (tileData, tilePieceBoundingBox) {\n  var position = TileBoundingBoxUtils.determinePositionAndScale(tilePieceBoundingBox, this.tileMatrix.tile_height, this.tileMatrix.tile_width, this.tileBoundingBox, this.height, this.width);\n  if (position.xPositionInFinalTileStart >= this.width || position.xPositionInFinalTileEnd <= 0 || position.yPositionInFinalTileStart >= this.height || position.yPositionInFinalTileEnd <= 0) {\n    // this tile doesn't belong just skip it\n  } else {\n    this.addChunk(tileData, position);\n  }\n};\n\nTileCreator.prototype.addChunk = function (chunk, position) {\n  this.chunks.push({\n    chunk: chunk,\n    position: position\n  });\n};\n\nTileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) {\n  var y = 0;\n  var x = 0;\n  var height = this.height;\n  var width = this.width;\n  var proj4To = proj4(this.projectionTo);\n  var proj4From;\n  if (this.projectionFrom) {\n    try {\n      proj4From = proj4(this.projectionFrom);\n    } catch (e) {}\n  }\n  if (!proj4From && this.projectionFromDefinition) {\n    proj4From = proj4(this.projectionFromDefinition);\n  }\n  var conversion;\n  try {\n    conversion = proj4(this.projectionTo, this.projectionFrom);\n  } catch (e) {}\n  if (!conversion) {\n    conversion = proj4(this.projectionTo, this.projectionFromDefinition);\n  }\n\n  var latitude;\n\n  var rows = [];\n  for (var i = 0; i < height; i++) {\n    rows.push(i);\n  }\n  var columns = [];\n  for (var i = 0; i < width; i++) {\n    columns.push(i);\n  }\n\n  return rows.reduce(function(rowSequence, row) {\n    return rowSequence.then(function() {\n      latitude = this.tileBoundingBox.maxLatitude - (row * this.tileHeightUnitsPerPixel);\n      var currentColumns = columns.slice();\n      return currentColumns.reduce(function(columnSequence, column) {\n        return columnSequence.then(function() {\n          // loop over all pixels in the target tile\n\n          // determine the position of the current pixel in the target tile\n          var longitude = this.tileBoundingBox.minLongitude + (column * this.tileWidthUnitsPerPixel);\n\n          // project that lat/lng to the source coordinate system\n          var projected = conversion.forward([longitude, latitude]);\n          var projectedLongitude = projected[0];\n          var projectedLatitude = projected[1];\n\n          // now find the source pixel\n          var xPixel = this.tileMatrix.tile_width - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / this.tileMatrix.pixel_x_size);\n          var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / this.tileMatrix.pixel_y_size);\n\n          if (xPixel >= 0 && xPixel < this.tileMatrix.tile_width\n          && yPixel >= 0 && yPixel < this.tileMatrix.tile_height) {\n            this.addPixel(column, row, xPixel, yPixel);\n          }\n        }.bind(this));\n      }.bind(this), Promise.resolve());\n    }.bind(this));\n  }.bind(this), Promise.resolve());\n};\n\n}).call(this,require('_process'))\n},{\"../tileBoundingBoxUtils\":93,\"./canvas\":78,\"./node\":80,\"_process\":284,\"proj4\":285}],80:[function(require,module,exports){\nvar util = require('util')\n  , concat = require('concat-stream')\n  , ImageUtils = require('../imageUtils');\n\nvar TileCreator = require('./index').TileCreator;\n\nfunction NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, projectionFrom, projectionTo, canvas) {\n  TileCreator.apply(this, arguments);\n\n  this.Canvas = require('canvas');\n  this.canvas = canvas || this.Canvas.createCanvas(width, height);\n  this.ctx = this.canvas.getContext('2d');\n\n  this.tileCanvas = this.Canvas.createCanvas(width, height);\n  this.tileContext = this.tileCanvas.getContext('2d');\n  this.tileCanvas.width = tileMatrix.tile_width;\n  this.tileCanvas.height = tileMatrix.tile_height;\n  this.imageData = this.Canvas.createImageData(new Uint8ClampedArray(width * height * 4), width, height);\n  this.pixelAdded = false;\n}\n\nutil.inherits(NodeTileCreator, TileCreator);\n\nNodeTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) {\n  var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1);\n  this.imageData.data.set(color.data, (targetY * this.width * 4) + (targetX * 4));\n  this.pixelAdded = true;\n};\n\nNodeTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) {\n  return ImageUtils.getImage(tileData)\n  .then(function(img) {\n    this.tile = img;\n    this.tileContext.drawImage(img, 0, 0);\n    this.chunks = [];\n  }.bind(this))\n  .then(function() {\n    return this.projectTile(tileData, gridColumn, gridRow);\n  }.bind(this))\n  .then(function() {\n    if (this.pixelAdded) {\n      this.ctx.putImageData(this.imageData, 0, 0);\n    }\n  }.bind(this))\n  .then(function() {\n    if (this.chunks && this.chunks.length) {\n      return this.chunks.reduce(function(sequence, chunk) {\n        return sequence.then(function() {\n          return ImageUtils.getImage(tileData);\n        }.bind(this))\n        .then(function(image) {\n          var p = chunk.position;\n          this.ctx.drawImage(image,\n            p.sx,\n            p.sy,\n            p.sWidth,\n            p.sHeight,\n            p.dx,\n            p.dy,\n            p.dWidth,\n            p.dHeight\n          );\n        }.bind(this));\n      }.bind(this), Promise.resolve());\n    }\n  }.bind(this))\n  .then(function() {\n    return this.canvas;\n  }.bind(this));\n};\n\nNodeTileCreator.prototype.getCompleteTile = function (format) {\n  return new Promise(function (resolve, reject) {\n    var writeStream = concat(function(buffer) {\n      resolve(buffer);\n    });\n    var stream = null;\n    if (format === 'png') {\n      stream = this.canvas.createPNGStream();\n    } else {\n      stream = this.canvas.createJPEGStream();\n    }\n    stream.pipe(writeStream);\n  }.bind(this));\n};\n\nmodule.exports = NodeTileCreator;\n\n},{\"../imageUtils\":89,\"./index\":79,\"canvas\":undefined,\"concat-stream\":185,\"util\":343}],81:[function(require,module,exports){\nvar proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nvar TileUtilities = require('./tileUtilities')\n  , proj4Defs = require('../../proj4Defs');\n\nmodule.exports = function(job, callback) {\n  console.log('Tile Worker - working');\n  console.time('Tile Worker - time');\n  var self = this;\n\n  if (proj4Defs[job.projectionTo]) {\n    proj4.defs(job.projectionTo, proj4Defs[job.projectionTo]);\n  }\n  if (proj4Defs[job.projectionFrom]) {\n    proj4.defs(job.projectionFrom, proj4Defs[job.projectionFrom]);\n  }\n  var proj4To = proj4(job.projectionTo);\n  var proj4From = proj4(job.projectionFrom);\n\n  var conversion;\n  try {\n    conversion = proj4(job.projectionTo, job.projectionFrom);\n  } catch (e) {}\n  if (!conversion) {\n    conversion = proj4(job.projectionTo, job.projectionFromDefinition);\n  }\n\n  var tileBoundingBox = JSON.parse(job.tileBoundingBox);\n  var tilePieceBoundingBox = JSON.parse(job.tilePieceBoundingBox);\n\n  var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, tileBoundingBox, job.height, job.width, job.projectionTo, job.projectionFrom, job.projectionFromDefinition, job.tileHeightUnitsPerPixel, job.tileWidthUnitsPerPixel, job.pixelXSize, job.pixelYSize);\n  var x = piecePosition.startX;\n  var y = piecePosition.startY;\n\n  var finalWidth = (piecePosition.endX - piecePosition.startX);\n  var finalHeight = (piecePosition.endY - piecePosition.startY);\n  if (finalWidth <= 0 || finalHeight <= 0) {\n    console.timeEnd('Tile Worker - time');\n    if (callback) {\n      return callback(null, {message:'donenodata'});\n    } else {\n      postMessage({message:'donenodata'});\n      return self.close();\n    }\n  }\n\n  var imageData = new Uint8ClampedArray(job.imageData);\n\n  var finalImageData = new Uint8ClampedArray(finalWidth * finalHeight * 4);\n  var latitude;\n\n  var yArray = [];\n  for (var i = y; i < piecePosition.endY; i++) {\n    yArray.push(i);\n  }\n\n  var xArray = [];\n  for (var i = x; i < piecePosition.endX; i++) {\n    xArray.push(i);\n  }\n\n  return yArray.reduce(function(ySequence, y) {\n    return ySequence.then(function() {\n      latitude = tileBoundingBox.maxLatitude - (y * job.tileHeightUnitsPerPixel);\n      var currentXArray = xArray.slice();\n      return currentXArray.reduce(function(xSequence, x) {\n        return xSequence.then(function() {\n          longitude = tileBoundingBox.minLongitude + (x * job.tileWidthUnitsPerPixel);\n          var projected = conversion.forward([longitude, latitude]);\n          var projectedLongitude = projected[0];\n          var projectedLatitude = projected[1];\n\n          var xPixel = job.tileWidth - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / job.pixelXSize);\n          var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / job.pixelYSize);\n          if (xPixel >= 0 && xPixel < job.tileWidth\n          && yPixel >= 0 && yPixel < job.tileHeight) {\n            var sliceStart = (yPixel * job.tileWidth * 4) + (xPixel * 4);\n            if (sliceStart >= 0) {\n              finalImageData.set(imageData.slice(sliceStart, sliceStart + 4), ((y-piecePosition.startY)*finalWidth*4) + ((x-piecePosition.startX)*4));\n            }\n          }\n        });\n      }, Promise.resolve());\n    });\n  }, Promise.resolve())\n  .then(function() {\n    console.timeEnd('Tile Worker - time');\n    if (callback) {\n      callback(null, {message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]);\n    } else {\n      postMessage({message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]);\n      self.close();\n    }\n  });\n}\n\n},{\"../../proj4Defs\":77,\"./tileUtilities\":82,\"proj4\":285}],82:[function(require,module,exports){\nvar proj4 = require('proj4');\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nmodule.exports.getPiecePosition = function(tilePieceBoundingBox, tileBoundingBox, height, width, projectionTo, projectionFrom, projectionFromDefinition, tileHeightUnitsPerPixel, tileWidthUnitsPerPixel, pixelXSize, pixelYSize) {\n  var conversion;\n  try {\n    conversion = proj4(projectionTo, projectionFrom);\n  } catch (e) {}\n  if (!conversion) {\n    conversion = proj4(projectionTo, projectionFromDefinition);\n  }\n\n  var maxLatitude = tilePieceBoundingBox.maxLatitude;\n  var minLatitude = tilePieceBoundingBox.minLatitude;\n  var minLongitude = tilePieceBoundingBox.minLongitude - pixelXSize;\n  var maxLongitude = tilePieceBoundingBox.maxLongitude + pixelXSize;\n\n  if (projectionTo.toUpperCase() === 'EPSG:3857' && projectionFrom.toUpperCase() === 'EPSG:4326') {\n    maxLatitude = maxLatitude > 85.0511 ? 85.0511 : maxLatitude;\n    minLatitude = minLatitude < -85.0511 ? -85.0511 : minLatitude;\n    minLongitude = minLongitude < -180.0 ? -180.0 : minLongitude;\n    maxLongitude = maxLongitude > 180.0 ? 180.0 : maxLongitude;\n  }\n\n  // ensure the projeced longitude wont wrap around the world\n  var negative180 = proj4('EPSG:4326', projectionTo, [-180,0]);\n  var positive180 = proj4('EPSG:4326', projectionTo, [180,0]);\n  minLongitude = minLongitude < negative180[0] ? negative180[0] : minLongitude;\n  maxLongitude = maxLongitude > positive180[0] ? positive180[0] : maxLongitude;\n\n  var pieceBoundingBoxInTileProjectionSW = conversion.inverse([minLongitude, minLatitude]);\n  var pieceBoundingBoxInTileProjectionNE = conversion.inverse([maxLongitude, maxLatitude]);\n\n  var pieceBBProjected = {\n    minLatitude: isNaN(pieceBoundingBoxInTileProjectionSW[1]) ? tileBoundingBox.minLatitude : pieceBoundingBoxInTileProjectionSW[1],\n    maxLatitude: isNaN(pieceBoundingBoxInTileProjectionNE[1]) ? tileBoundingBox.maxLatitude : pieceBoundingBoxInTileProjectionNE[1],\n    minLongitude: pieceBoundingBoxInTileProjectionSW[0],\n    maxLongitude: pieceBoundingBoxInTileProjectionNE[0]\n  };\n\n  var startY = y = Math.max(0, Math.floor((tileBoundingBox.maxLatitude - pieceBBProjected.maxLatitude) / tileHeightUnitsPerPixel));\n  var startX = x = Math.max(0, Math.floor((pieceBBProjected.minLongitude - tileBoundingBox.minLongitude) / tileWidthUnitsPerPixel));\n\n  var endY = Math.min(height, height - Math.floor((pieceBBProjected.minLatitude - tileBoundingBox.minLatitude) / tileHeightUnitsPerPixel));\n  var endX = Math.min(width, width - Math.floor((tileBoundingBox.maxLongitude - pieceBBProjected.maxLongitude) / tileWidthUnitsPerPixel));\n\n  return {\n    startY: startY,\n    startX: startX,\n    endY: endY,\n    endX: endX\n  };\n}\n\n},{\"proj4\":285}],83:[function(require,module,exports){\nvar ProjectTile = require('./projectTile');\n\nfunction tileWorker(e) {\n  console.log('Tile Worker - working');\n  console.time('Tile Worker - time');\n  var self = this;\n  var job = e.data;\n\n  ProjectTile(job, function(err, data) {\n    postMessage(data);\n    self.close();\n  });\n}\n\nmodule.exports = function(self) {\n  self.onmessage = tileWorker;\n  self.onerror = function(e) {\n    console.log('error', e);\n  }\n};\n\n},{\"./projectTile\":81}],84:[function(require,module,exports){\n/**\n * Feature Draw Type module.\n * @module tiles/features\n */\nvar FeatureDrawType = {\n  /**\n   * Circle for a point\n   */\n  CIRCLE: 'CIRCLE',\n  /**\n   * Stroke for a line of polygon\n   */\n  STROKE: 'STOKE',\n  /**\n   * Fill for a polygon\n   */\n  FILL: 'FILL'\n};\n\n\nmodule.exports = FeatureDrawType;\n\n},{}],85:[function(require,module,exports){\n/**\n * FeaturePaint module.\n * @module tiles/features\n */\nvar FeaturePaint = function () {\n  this.featurePaints = {};\n};\n\n/**\n * Get the feature paint for the featureDrawType\n * @param {module:tiles/features~FeatureDrawType} featureDrawType\n * @return {module:tiles/features~FeaturePaint} paint\n */\nFeaturePaint.prototype.getPaint = function(featureDrawType) {\n  return this.featurePaints[featureDrawType];\n};\n\n/**\n * Set the feature paint for the featureDrawType\n * @param {module:tiles/features~FeatureDrawType} featureDrawType\n * @param {module:tiles/features~Paint} paint\n */\nFeaturePaint.prototype.setPaint = function(featureDrawType, paint) {\n  this.featurePaints[featureDrawType] = paint;\n};\n\nmodule.exports = FeaturePaint;\n\n},{}],86:[function(require,module,exports){\n/**\n * Feature Paint Cache.\n * @module tiles/features\n */\nvar FeaturePaint = require('./featurePaint');\n\n\n/**\n * Constructor, created with cache size of {@link #DEFAULT_CACHE_SIZE}\n * @constructor\n */\nvar FeaturePaintCache = function(size = null) {\n  this.cacheSize = size !== null ? size : FeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE;\n  this.paintCache = {};\n  this.accessHistory = [];\n};\n\n/**\n * Get the cached featurePaint for the style row or null if not cached\n * @param {module:extension/style~StyleRow} styleRow style row\n * @return {module:tiles/features~FeaturePaint} feature paint or null\n */\nFeaturePaintCache.prototype.getFeaturePaintForStyleRow = function(styleRow) {\n  return this.getFeaturePaint(styleRow.getId());\n};\n\n/**\n * Get the cached featurePaint for the style row id or null if not cached\n * @param {Number} styleRowId style row id\n * @return {module:tiles/features~FeaturePaint} feature paint or null\n */\nFeaturePaintCache.prototype.getFeaturePaint = function(styleRowId) {\n  var featurePaint = this.paintCache[styleRowId];\n  if (!!featurePaint) {\n    var index = this.accessHistory.indexOf(styleRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }\n    this.accessHistory.push(styleRowId);\n  }\n  return featurePaint;\n};\n\n/**\n * Get the paint for the style row and draw type\n * @param {module:extension/style~StyleRow} styleRow style row\n * @param {String} type feature draw type\n * @return {module:tiles/features~Paint} paint\n */\nFeaturePaintCache.prototype.getPaintForStyleRow = function(styleRow, type) {\n  return this.getPaint(styleRow.getId(), type);\n};\n\n/**\n * Get the paint for the style row id and draw type\n * @param {Number} styleId  style row id\n * @param {String} type feature draw type\n * @return {module:tiles/features~Paint} paint\n */\nFeaturePaintCache.prototype.getPaint = function(styleId, type) {\n  var paint = null;\n  var featurePaint = this.getFeaturePaint(styleId);\n  if (featurePaint !== undefined && featurePaint !== null) {\n    paint = featurePaint.getPaint(type);\n  }\n  return paint;\n};\n\n/**\n * Cache the featurePaint for the style row\n * @param {module:extension/style~StyleRow} styleRow style row\n * @param {module:tiles/features~FeatureDrawType} type feature draw type\n * @param {module:tiles/features~Paint} paint paint\n */\nFeaturePaintCache.prototype.setPaintForStyleRow = function(styleRow, type, paint) {\n  this.setPaint(styleRow.getId(), type, paint);\n};\n\n/**\n * Cache the featurePaint for the style row id\n * @param {Number} styleRowId style row id\n * @param {module:tiles/features~FeatureDrawType} type feature draw type\n * @param {module:tiles/features~Paint} paint paint\n */\nFeaturePaintCache.prototype.setPaint = function(styleRowId, type, paint) {\n  var featurePaint = this.paintCache[styleRowId];\n  if (!featurePaint) {\n    featurePaint = new FeaturePaint();\n  } else {\n    var index = this.accessHistory.indexOf(styleRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }\n  }\n  featurePaint.setPaint(type, paint);\n  this.paintCache[styleRowId] = featurePaint;\n  this.accessHistory.push(styleRowId);\n  if (Object.keys(this.paintCache).length > this.cacheSize) {\n    var styleId = this.accessHistory.shift();\n    if (styleId) {\n      delete this.paintCache[styleId];\n    }\n  }\n};\n\n/**\n * Remove the cached featurePaint for the style row id\n * @param {Number} styleRowId style row id\n * @return {module:tiles/features~FeaturePaint} removed feature paint or null\n */\nFeaturePaintCache.prototype.remove = function(styleRowId) {\n  var removed = this.paintCache[styleRowId];\n  delete this.paintCache[styleRowId];\n  if (!!removed) {\n    var index = this.accessHistory.indexOf(styleRowId);\n    if (index > -1) {\n      this.accessHistory.splice(index, 1);\n    }  }\n  return removed;\n};\n\n/**\n * Clear the cache\n */\nFeaturePaintCache.prototype.clear = function() {\n  this.paintCache = {};\n  this.accessHistory = [];\n};\n\n/**\n * Resize the cache\n * @param {Number} maxSize max size\n */\nFeaturePaintCache.prototype.resize = function(maxSize) {\n  this.cacheSize = maxSize;\n  var keys = Object.keys(this.paintCache);\n  if (keys.length > maxSize) {\n    var numberToRemove = keys.length - maxSize;\n    for (var i = 0; i < numberToRemove; i++) {\n      var styleRowId = this.accessHistory.shift();\n      if (!!styleRowId) {\n        delete this.paintCache[styleRowId];\n      }\n    }\n  }\n};\n\nFeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE = 100;\n\n\nmodule.exports = FeaturePaintCache;\n\n},{\"./featurePaint\":85}],87:[function(require,module,exports){\n(function (process){\n/**\n * FeatureTiles module.\n * @module tiles/features\n */\nvar TileBoundingBoxUtils = require('../tileBoundingBoxUtils')\n  , BoundingBox = require('../../boundingBox')\n  , FeatureTableStyles = require('../../extension/style/featureTableStyles')\n  , Paint = require('./paint')\n  , FeaturePaintCache = require('./featurePaintCache')\n  , FeatureDrawType = require('./featureDrawType')\n  , IconCache = require('../../extension/style/iconCache')\n  , ImageUtils = require('../imageUtils');\n\nvar d3geo = require('d3-geo')\n  , concat = require('concat-stream')\n  , reproject = require('reproject')\n  , PolyToLine = require('@turf/polygon-to-line').default;\n\n/**\n *  Tiles drawn from or linked to features. Used to query features and optionally draw tiles\n *  from those features.\n */\nvar FeatureTiles = function(featureDao, tileWidth = null, tileHeight = null) {\n  var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);\n  var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);\n  var isNode = typeof(process) !== 'undefined' && process.version;\n  this.useNodeCanvas =  isNode && !isPhantom && !isElectron;\n  this.featureDao = featureDao;\n  this.tileWidth = tileWidth !== null ? tileWidth : 256;\n  this.tileHeight = tileHeight !== null ? tileHeight : 256;\n  this.compressFormat = 'png';\n  this.pointRadius = 4.0;\n  this.pointPaint = new Paint();\n  this.pointIcon = null;\n  this.linePaint = new Paint();\n  this.linePaint.setStrokeWidth(2.0);\n  this.lineStrokeWidth = 2.0;\n  this.polygonPaint = new Paint();\n  this.polygonPaint.setStrokeWidth(2.0);\n  this.polygonStrokeWidth = 2.0;\n  this.fillPolygon = true;\n  this.polygonFillPaint = new Paint();\n  this.featurePaintCache = new FeaturePaintCache();\n  this.iconCache = new IconCache();\n  this.scale = 1.0;\n  this.geoPackage = this.featureDao.geoPackage;\n  if (this.geoPackage != null) {\n    this.featureTableStyles = new FeatureTableStyles(this.geoPackage, this.featureDao.getTable());\n    if (!this.featureTableStyles.has()) {\n      this.featureTableStyles = null;\n    }\n  }\n  this.maxFeaturesPerTile = null;\n  this.maxFeaturesTileDraw = null;\n  this.calculateDrawOverlap();\n};\n\n/**\n * Manually set the width and height draw overlap\n * @param {Number} pixels pixels\n */\nFeatureTiles.prototype.setDrawOverlap = function (pixels) {\n  this.setWidthDrawOverlap(pixels);\n  this.setHeightDrawOverlap(pixels);\n};\n\n/**\n * Get the width draw overlap\n * @return {Number} width draw overlap\n */\nFeatureTiles.prototype.getWidthDrawOverlap = function () {\n  return this.widthOverlap;\n};\n\n/**\n * Manually set the width draw overlap\n * @param {Number} pixels pixels\n */\nFeatureTiles.prototype.setWidthDrawOverlap = function (pixels) {\n  this.widthOverlap = pixels;\n};\n\n/**\n * Get the height draw overlap\n * @return {Number} height draw overlap\n */\nFeatureTiles.prototype.getHeightDrawOverlap = function () {\n  return this.heightOverlap;\n};\n\n/**\n * Manually set the height draw overlap\n * @param {Number} pixels pixels\n */\nFeatureTiles.prototype.setHeightDrawOverlap = function (pixels) {\n  this.heightOverlap = pixels;\n};\n\n/**\n * Get the feature DAO\n * @return {module:features/user/featureDao} feature dao\n */\nFeatureTiles.prototype.getFeatureDao = function () {\n  return this.featureDao;\n};\n\n/**\n * Get the feature table styles\n * @return {module:extension/style~FeatureTableStyles} feature table styles\n */\nFeatureTiles.prototype.getFeatureTableStyles = function () {\n  return this.featureTableStyles;\n};\n\n/**\n * Set the feature table styles\n * @param {module:extension/style~FeatureTableStyles} featureTableStyles feature table styles\n */\nFeatureTiles.prototype.setFeatureTableStyles = function (featureTableStyles) {\n  this.featureTableStyles = featureTableStyles;\n};\n\n/**\n * Ignore the feature table styles within the GeoPackage\n */\nFeatureTiles.prototype.ignoreFeatureTableStyles = function () {\n  this.setFeatureTableStyles(null);\n  this.calculateDrawOverlap();\n};\n\n/**\n * Clear all caches\n */\nFeatureTiles.prototype.clearCache = function () {\n  this.clearStylePaintCache();\n  this.clearIconCache();\n};\n\n/**\n * Clear the style paint cache\n */\nFeatureTiles.prototype.clearStylePaintCache = function () {\n  this.featurePaintCache.clear();\n};\n\n/**\n * Set / resize the style paint cache size\n *\n * @param {Number} size\n * @since 3.3.0\n */\nFeatureTiles.prototype.setStylePaintCacheSize = function (size) {\n  this.featurePaintCache.resize(size);\n};\n\n/**\n * Clear the icon cache\n */\nFeatureTiles.prototype.clearIconCache = function () {\n  this.iconCache.clear();\n};\n\n/**\n * Set / resize the icon cache size\n * @param {Number} size new size\n */\nFeatureTiles.prototype.setIconCacheSize = function (size) {\n  this.iconCache.resize(size);\n};\n\n/**\n * Get the tile width\n * @return {Number} tile width\n */\nFeatureTiles.prototype.getTileWidth = function () {\n  return this.tileWidth;\n};\n\n/**\n * Set the tile width\n * @param {Number} tileWidth tile width\n */\nFeatureTiles.prototype.setTileWidth = function (tileWidth) {\n  this.tileWidth = tileWidth;\n};\n\n/**\n * Get the tile height\n * @return {Number} tile height\n */\nFeatureTiles.prototype.getTileHeight = function () {\n  return this.tileHeight;\n};\n\n/**\n * Set the tile height\n * @param {Number} tileHeight tile height\n */\nFeatureTiles.prototype.setTileHeight = function (tileHeight) {\n  this.tileHeight = tileHeight;\n};\n\n/**\n * Get the compress format\n * @return {String} compress format\n */\nFeatureTiles.prototype.getCompressFormat = function () {\n  return this.compressFormat;\n};\n\n/**\n * Set the compress format\n * @param {String} compressFormat compress format\n */\nFeatureTiles.prototype.setCompressFormat = function (compressFormat) {\n  this.compressFormat = compressFormat;\n};\n\n/**\n * Set the scale\n *\n * @param {Number} scale scale factor\n */\nFeatureTiles.prototype.setScale = function(scale) {\n  this.scale = scale;\n  this.linePaint.setStrokeWidth(scale * this.lineStrokeWidth);\n  this.polygonPaint.setStrokeWidth(scale * this.polygonStrokeWidth);\n  this.featurePaintCache.clear();\n};\n\n/**\n * Get the scale\n * @return {Number} scale factor\n */\nFeatureTiles.prototype.getScale = function() {\n  return this.scale;\n};\n\nFeatureTiles.prototype.calculateDrawOverlap = function() {\n  if (this.pointIcon) {\n    this.heightOverlap = this.scale * this.pointIcon.getHeight();\n    this.widthOverlap = this.scale * this.pointIcon.getWidth();\n  } else {\n    this.heightOverlap = this.scale * this.pointRadius;\n    this.widthOverlap = this.scale * this.pointRadius;\n  }\n\n  var lineHalfStroke = this.scale * this.lineStrokeWidth / 2.0;\n  this.heightOverlap = Math.max(this.heightOverlap, lineHalfStroke);\n  this.widthOverlap = Math.max(this.widthOverlap, lineHalfStroke);\n\n  var polygonHalfStroke = this.scale * this.polygonStrokeWidth / 2.0;\n  this.heightOverlap = Math.max(this.heightOverlap, polygonHalfStroke);\n  this.widthOverlap = Math.max(this.widthOverlap, polygonHalfStroke);\n\n  if (this.featureTableStyles !== null && this.featureTableStyles.has()) {\n    var styleRowIds = [];\n    var tableStyleIds = this.featureTableStyles.getAllTableStyleIds();\n    if (tableStyleIds !== null) {\n      styleRowIds = styleRowIds.concat(tableStyleIds);\n    }\n    var styleIds = this.featureTableStyles.getAllStyleIds();\n    if (styleIds != null) {\n      styleRowIds = styleRowIds.concat(styleIds.filter(id => styleRowIds.indexOf(id) === -1));\n    }\n    var styleDao = this.featureTableStyles.getStyleDao();\n    for (var i = 0; i < styleRowIds.length; i++) {\n      var styleRowId = styleRowIds[i];\n      var styleRow = styleDao.queryForId(styleRowId);\n      var styleHalfWidth = this.scale * (styleRow.getWidthOrDefault() / 2.0);\n      this.widthOverlap = Math.max(this.widthOverlap, styleHalfWidth);\n      this.heightOverlap = Math.max(this.heightOverlap, styleHalfWidth);\n    }\n\n    var iconRowIds = [];\n    var tableIconIds = this.featureTableStyles.getAllTableIconIds();\n    if (tableIconIds != null) {\n      iconRowIds = iconRowIds.concat(tableIconIds);\n    }\n    var iconIds = this.featureTableStyles.getAllIconIds();\n    if (iconIds != null) {\n      iconRowIds = iconRowIds.concat(iconIds.filter(id => iconRowIds.indexOf(id) === -1));\n    }\n    var iconDao = this.featureTableStyles.getIconDao();\n    for (i = 0; i < iconRowIds.length; i++) {\n      var iconRowId = iconRowIds[i];\n      var iconRow = iconDao.queryForId(iconRowId);\n      var iconDimensions = iconRow.getDerivedDimensions();\n      var iconWidth = this.scale * Math.ceil(iconDimensions[0]);\n      var iconHeight = this.scale * Math.ceil(iconDimensions[1]);\n      this.widthOverlap = Math.max(this.widthOverlap, iconWidth);\n      this.heightOverlap = Math.max(this.heightOverlap, iconHeight);\n    }\n  }\n};\n\nFeatureTiles.prototype.setDrawOverlapsWithPixels = function(pixels) {\n  this.widthOverlap = pixels;\n  this.heightOverlap = pixels;\n};\n\nFeatureTiles.prototype.getFeatureStyle = function(featureRow) {\n  var featureStyle = null;\n  if (this.featureTableStyles !== null) {\n    featureStyle = this.featureTableStyles.getFeatureStyleForFeatureRow(featureRow);\n  }\n  return featureStyle;\n};\n\n/**\n * Get the point paint for the feature style, or return the default paint\n * @param featureStyle feature style\n * @return paint\n */\nFeatureTiles.prototype.getPointPaint = function(featureStyle) {\n  var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.CIRCLE);\n  if (paint == null) {\n    paint = this.pointPaint;\n  }\n  return paint;\n};\n\n/**\n * Get the line paint for the feature style, or return the default paint\n * @param featureStyle feature style\n * @return paint\n */\nFeatureTiles.prototype.getLinePaint = function(featureStyle) {\n  var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE);\n  if (paint === null) {\n    paint = this.linePaint;\n  }\n  return paint;\n};\n\n/**\n * Get the polygon paint for the feature style, or return the default paint\n * @param featureStyle feature style\n * @return paint\n */\nFeatureTiles.prototype.getPolygonPaint = function(featureStyle) {\n  var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE);\n  if (paint == null) {\n    paint = this.polygonPaint;\n  }\n  return paint;\n};\n\n/**\n * Get the polygon fill paint for the feature style, or return the default\n * paint\n * @param featureStyle feature style\n * @return paint\n */\nFeatureTiles.prototype.getPolygonFillPaint = function(featureStyle) {\n  var paint = null;\n  var hasStyleColor = false;\n  if (featureStyle != null) {\n    var style = featureStyle.getStyle();\n    if (style != null) {\n      if (style.hasFillColor()) {\n        paint = this.getStylePaint(style, FeatureDrawType.FILL);\n      } else {\n        hasStyleColor = style.hasColor();\n      }\n    }\n  }\n  if (paint === null && !hasStyleColor && this.fillPolygon) {\n    paint = this.polygonFillPaint;\n  }\n  return paint;\n};\n\n/**\n * Get the feature style paint from cache, or create and cache it\n * @param featureStyle feature style\n * @param drawType draw type\n * @return feature style paint\n */\nFeatureTiles.prototype.getFeatureStylePaint = function(featureStyle, drawType) {\n  var paint = null;\n  if (featureStyle != null) {\n    var style = featureStyle.getStyle();\n    if (style !== null && style.hasColor()) {\n      paint = this.getStylePaint(style, drawType);\n    }\n  }\n  return paint;\n};\n\n/**\n * Get the style paint from cache, or create and cache it\n * @param style style row\n * @param drawType draw type\n * @return {Paint} paint\n */\nFeatureTiles.prototype.getStylePaint = function(style, drawType) {\n  var paint = this.featurePaintCache.getPaintForStyleRow(style, drawType);\n  if (paint === undefined || paint === null) {\n    var color = null;\n    var strokeWidth = null;\n    if (drawType === FeatureDrawType.CIRCLE) {\n      color = style.getColor();\n    } else if (drawType === FeatureDrawType.STROKE) {\n      color = style.getColor();\n      strokeWidth = this.scale * style.getWidthOrDefault();\n    } else if (drawType === FeatureDrawType.FILL) {\n      color = style.getFillColor();\n      strokeWidth = this.scale * style.getWidthOrDefault();\n    } else {\n      throw new Error(\"Unsupported Draw Type: \" + drawType);\n    }\n    var stylePaint = new Paint();\n    stylePaint.setColor(color);\n    if (strokeWidth !== null) {\n      stylePaint.setStrokeWidth(strokeWidth);\n    }\n    paint = this.featurePaintCache.getPaintForStyleRow(style, drawType);\n    if (paint === undefined || paint === null) {\n      this.featurePaintCache.setPaintForStyleRow(style, drawType, stylePaint);\n      paint = stylePaint;\n    }\n  }\n  return paint;\n};\n\n/**\n * Get the point radius\n * @return {Number} radius\n */\nFeatureTiles.prototype.getPointRadius = function() {\n  return this.pointRadius;\n};\n\n/**\n * Set the point radius\n * @param {Number} pointRadius point radius\n */\nFeatureTiles.prototype.setPointRadius = function(pointRadius) {\n  this.pointRadius = pointRadius;\n};\n\n/**\n * Get point color\n * @return {String} color\n */\nFeatureTiles.prototype.getPointColor = function() {\n  return this.pointPaint.getColor();\n};\n\n/**\n * Set point color\n * @param {String} pointColor point color\n */\nFeatureTiles.prototype.setPointColor = function(pointColor) {\n  this.pointPaint.setColor(pointColor);\n};\n\n/**\n * Get the point icon\n * @return {module:tiles/features.FeatureTilePointIcon} icon\n */\nFeatureTiles.prototype.getPointIcon = function() {\n  return this.pointIcon;\n};\n\n/**\n * Set the point icon\n * @param {module:tiles/features.FeatureTilePointIcon} pointIcon point icon\n */\nFeatureTiles.prototype.setPointIcon = function(pointIcon) {\n  this.pointIcon = pointIcon;\n};\n\n/**\n * Get line stroke width\n * @return {Number} width\n */\nFeatureTiles.prototype.getLineStrokeWidth = function() {\n  return this.lineStrokeWidth;\n};\n\n/**\n * Set line stroke width\n * @param {Number} lineStrokeWidth line stroke width\n */\nFeatureTiles.prototype.setLineStrokeWidth = function(lineStrokeWidth) {\n  this.lineStrokeWidth = lineStrokeWidth;\n  this.linePaint.setStrokeWidth(this.scale * this.lineStrokeWidth);\n};\n\n/**\n * Get line color\n * @return {String} color\n */\nFeatureTiles.prototype.getLineColor = function() {\n  return this.linePaint.getColor();\n};\n\n/**\n * Set line color\n * @param {String} lineColor line color\n */\nFeatureTiles.prototype.setLineColor = function(lineColor) {\n  this.linePaint.setColor(lineColor);\n};\n\n/**\n * Get polygon stroke width\n * @return {Number} width\n */\nFeatureTiles.prototype.getPolygonStrokeWidth = function() {\n  return this.polygonStrokeWidth;\n};\n\n/**\n * Set polygon stroke width\n * @param {Number} polygonStrokeWidth polygon stroke width\n */\nFeatureTiles.prototype.setPolygonStrokeWidth = function(polygonStrokeWidth) {\n  this.polygonStrokeWidth = polygonStrokeWidth;\n  this.polygonPaint.setStrokeWidth(this.scale * this.polygonStrokeWidth);\n};\n\n/**\n * Get polygon color\n * @return {String} color\n */\nFeatureTiles.prototype.getPolygonColor = function() {\n  return this.polygonPaint.getColor();\n};\n\n/**\n * Set polygon color\n * @param {String} polygonColor polygon color\n */\nFeatureTiles.prototype.setPolygonColor = function(polygonColor) {\n  this.polygonPaint.setColor(polygonColor);\n};\n\n/**\n * Is fill polygon\n * @return {Boolean} true if fill polygon\n */\nFeatureTiles.prototype.isFillPolygon = function() {\n  return this.fillPolygon;\n};\n\n/**\n * Set the fill polygon\n * @param {Boolean} fillPolygon fill polygon\n */\nFeatureTiles.prototype.setFillPolygon = function(fillPolygon) {\n  this.fillPolygon = fillPolygon;\n};\n\n/**\n * Get polygon fill color\n * @return {String} color\n */\nFeatureTiles.prototype.getPolygonFillColor = function() {\n  return this.polygonFillPaint.getColor();\n};\n\n/**\n * Set polygon fill color\n * @param {String} polygonFillColor polygon fill color\n */\nFeatureTiles.prototype.setPolygonFillColor = function(polygonFillColor) {\n  this.polygonFillPaint.setColor(polygonFillColor);\n};\n\n/**\n * Get the max features per tile\n * @return {Number} max features per tile or null\n */\nFeatureTiles.prototype.getMaxFeaturesPerTile = function() {\n  return this.maxFeaturesPerTile;\n};\n\n/**\n * Set the max features per tile. When more features are returned in a query\n * to create a single tile, the tile is not created.\n * @param {Number} maxFeaturesPerTile  max features per tile\n */\nFeatureTiles.prototype.setMaxFeaturesPerTile = function(maxFeaturesPerTile) {\n  this.maxFeaturesPerTile = maxFeaturesPerTile;\n};\n\n/**\n * Get the max features tile draw, the custom tile drawing implementation\n * for tiles with more features than the max at #getMaxFeaturesPerTile\n * @return {module:tiles/features/custom~CustomFeatureTile} max features tile draw or null\n */\nFeatureTiles.prototype.getMaxFeaturesTileDraw = function() {\n  return this.maxFeaturesTileDraw;\n};\n\n/**\n * Set the max features tile draw, used to draw tiles when more features for\n * a single tile than the max at #getMaxFeaturesPerTile exist\n * @param {module:tiles/features/custom~CustomFeatureTile} maxFeaturesTileDraw max features tile draw\n */\nFeatureTiles.prototype.setMaxFeaturesTileDraw = function(maxFeaturesTileDraw) {\n  this.maxFeaturesTileDraw = maxFeaturesTileDraw;\n};\n\nFeatureTiles.prototype.drawTile = function (x, y, z, canvas = null) {\n  var indexed = this.featureDao.isIndexed();\n  if (indexed) {\n    return this.drawTileQueryIndex(x, y, z, canvas);\n  } else {\n    return this.drawTileQueryAll(x, y, z, canvas);\n  }\n};\n\nFeatureTiles.prototype.drawTileQueryAll = function(x, y, zoom, canvas) {\n  var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  boundingBox = this.expandBoundingBox(boundingBox);\n\n  var count = this.featureDao.getCount();\n  if (this.maxFeaturesPerTile === null || count <= this.maxFeaturesPerTile) {\n    return this.drawTileWithBoundingBox(boundingBox, zoom, canvas);\n  } else if (this.maxFeaturesTileDraw !== null) {\n    return this.maxFeaturesTileDraw.drawUnindexedTile(256, 256, canvas);\n  }\n};\n\nFeatureTiles.prototype.drawTileQueryIndex = async function(x, y, z, tileCanvas) {\n  var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z);\n  var expandedBoundingBox = this.expandBoundingBox(boundingBox);\n\n  var width = 256;\n  var height = 256;\n\n  var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << z), width * (1 << z));\n  var xTranslate = -positionAndScale.xPositionInFinalTileStart;\n  var yTranslate = -positionAndScale.yPositionInFinalTileStart;\n\n  var pi = Math.PI,\n    tau = 2 * pi;\n  var drawProjection = d3geo.geoMercator()\n    .scale((1 << z) * 256 / tau)\n    .center([-180, 85.0511287798066])\n    .translate([xTranslate, yTranslate]);\n\n  var canvas;\n  if (tileCanvas !== null) {\n    canvas = tileCanvas;\n  }\n  var context;\n  if (canvas === undefined || canvas === null) {\n    if (this.useNodeCanvas) {\n      var Canvas = require('canvas');\n      canvas = Canvas.createCanvas(width, height);\n    } else {\n      canvas = document.createElement('canvas');\n      canvas.width = width;\n      canvas.height = height;\n    }\n  }\n  context = canvas.getContext('2d');\n  context.clearRect(0, 0, width, height);\n  var srs = this.featureDao.getSrs();\n  var tileCount = this.featureDao.countWebMercatorBoundingBox(expandedBoundingBox);\n  if (this.maxFeaturesPerTile === null || tileCount <= this.maxFeaturesPerTile) {\n    var iterator = this.featureDao.fastQueryWebMercatorBoundingBox(expandedBoundingBox);\n    var geojsonFeatures = []\n    for (var featureRow of iterator) {\n      geojsonFeatures.push(featureRow.getGeometry().geometry.toGeoJSON());\n    }\n    for (var gj of geojsonFeatures) {\n      var style = this.getFeatureStyle(featureRow);\n      if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) {\n        gj = reproject.toWgs84(gj, this.featureDao.projection);\n      }\n      await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style);\n    }\n    return new Promise(function(resolve, reject) {\n      if (this.useNodeCanvas) {\n        var writeStream = concat(function (buffer) {\n          resolve(buffer);\n        });\n        var stream = null;\n        if (this.compressFormat === 'png') {\n          stream = canvas.createPNGStream();\n        } else {\n          stream = canvas.createJPEGStream();\n        }\n        stream.pipe(writeStream);\n      } else {\n        resolve(canvas.toDataURL('image/' + this.compressFormat));\n      }\n    }.bind(this));\n  } else if (this.maxFeaturesTileDraw !== null) {\n    // Draw the max features tile\n    return this.maxFeaturesTileDraw.drawTile(width, height, tileCount, canvas);\n  }\n};\n\nFeatureTiles.prototype.drawTileWithBoundingBox = async function(boundingBox, zoom, tileCanvas) {\n  var width = 256;\n  var height = 256;\n  var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << zoom), width * (1 << zoom));\n  var xTranslate = -positionAndScale.xPositionInFinalTileStart;\n  var yTranslate = -positionAndScale.yPositionInFinalTileStart;\n\n  var pi = Math.PI,\n    tau = 2 * pi;\n  var drawProjection = d3geo.geoMercator()\n    .scale((1 << zoom) * 256 / tau)\n    .center([-180, 85.0511287798066])\n    .translate([xTranslate, yTranslate]);\n  var canvas;\n  if (tileCanvas !== null) {\n    canvas = tileCanvas;\n  }\n  var context;\n  if (canvas === undefined || canvas === null) {\n    if (this.useNodeCanvas) {\n      var Canvas = require('canvas');\n      canvas = Canvas.createCanvas(width, height);\n    } else {\n      canvas = document.createElement('canvas');\n      canvas.width = width;\n      canvas.height = height;\n    }\n  }\n  context = canvas.getContext('2d');\n  context.clearRect(0, 0, width, height);\n  var featureDao = this.featureDao;\n  var srs = featureDao.getSrs();\n  var each = featureDao.queryForEach();\n  var featureRows = [];\n  for (var row of each) {\n    featureRows.push(featureDao.getRow(row));\n  }\n  for (var fr of featureRows) {\n    var gj = fr.getGeometry().geometry.toGeoJSON();\n    var style = this.getFeatureStyle(fr);\n    if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) {\n      gj = reproject.toWgs84(gj, featureDao.projection);\n    }\n    await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style);\n  }\n  return new Promise(function(resolve, reject) {\n    if (this.useNodeCanvas) {\n      var writeStream = concat(function (buffer) {\n        resolve(buffer);\n      });\n      var stream = null;\n      if (this.compressFormat === 'png') {\n        stream = canvas.createPNGStream();\n      } else {\n        stream = canvas.createJPEGStream();\n      }\n      stream.pipe(writeStream);\n    } else {\n      resolve(canvas.toDataURL('image/' + this.compressFormat));\n    }\n  }.bind(this));\n};\n\n/**\n * Draw a point in the context\n * @param path\n * @param geoJson\n * @param context\n * @param boundingBox\n * @param featureStyle\n * @param drawProjection\n */\nFeatureTiles.prototype.drawPoint = async function(path, geoJson, context, boundingBox, featureStyle, drawProjection) {\n  var width;\n  var height;\n  var iconX;\n  var iconY;\n  var transformedCoords = drawProjection([geoJson.coordinates[0], geoJson.coordinates[1]]);\n  var x = transformedCoords[0];\n  var y = transformedCoords[1];\n\n  if (featureStyle !== undefined && featureStyle !== null && featureStyle.hasIcon()) {\n    var iconRow = featureStyle.getIcon();\n    var image = await iconRow.getDataImage(iconRow);\n    width = Math.round(this.scale * iconRow.getWidth());\n    height = Math.round(this.scale * iconRow.getHeight());\n    if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height && y <= this.tileHeight + height) {\n      var anchorU = iconRow.getAnchorUOrDefault();\n      var anchorV = iconRow.getAnchorVOrDefault();\n      iconX = Math.round(x - (anchorU * width));\n      iconY = Math.round(y - (anchorV * height));\n      context.drawImage(image, iconX, iconY, width, height);\n    }\n  } else if (this.pointIcon !== undefined && this.pointIcon !== null) {\n    width = Math.round(this.scale * this.pointIcon.getWidth());\n    height = Math.round(this.scale * this.pointIcon.getHeight());\n    if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height\n      && y <= this.tileHeight + height) {\n      iconX = Math.round(x - this.scale * this.pointIcon.getXOffset());\n      iconY = Math.round(y - this.scale * this.pointIcon.getYOffset());\n      ImageUtils.scaleBitmap(this.pointIcon.getIcon(), this.scale).then((image) => {\n        context.drawImage(image, iconX, iconY, width, height);\n      });\n    }\n  } else {\n    context.save();\n    var radius = null;\n    if (featureStyle !== undefined && featureStyle !== null) {\n      var styleRow = featureStyle.getStyle();\n      if (styleRow !== undefined && styleRow !== null) {\n        radius = this.scale * (styleRow.getWidthOrDefault() / 2.0);\n      }\n    }\n    if (radius == null) {\n      radius = this.scale * this.pointRadius;\n    }\n    var pointPaint = this.getPointPaint(featureStyle);\n    if (x >= 0 - radius && x <= this.tileWidth + radius && y >= 0 - radius && y <= this.tileHeight + radius) {\n      var circleX = Math.round(x);\n      var circleY = Math.round(y);\n      context.beginPath();\n      context.arc(circleX, circleY, radius, 0, 2 * Math.PI, true);\n      context.closePath()\n      context.fillStyle = pointPaint.getColorRGBA();\n      context.fill();\n    }\n    context.restore();\n  }\n};\n\n/**\n * Draw a line in the context\n * @param path\n * @param geoJson\n * @param context\n * @param featureStyle\n */\nFeatureTiles.prototype.drawLine = function(path, geoJson, context, featureStyle) {\n  context.save();\n  context.beginPath();\n  var paint = this.getLinePaint(featureStyle);\n  context.strokeStyle = paint.getColorRGBA();\n  context.lineWidth = paint.getStrokeWidth();\n  path(geoJson);\n  context.stroke();\n  context.closePath();\n  context.restore();\n};\n\n/**\n * Draw a polygon in the context\n * @param path\n * @param geoJson\n * @param context\n * @param featureStyle\n */\nFeatureTiles.prototype.drawPolygon = function(path, geoJson, context, featureStyle) {\n  context.save();\n  context.beginPath();\n  path(PolyToLine(geoJson).geometry);\n  context.closePath();\n  var fillPaint = this.getPolygonFillPaint(featureStyle);\n  if (fillPaint !== undefined && fillPaint !== null) {\n    context.fillStyle = fillPaint.getColorRGBA();\n    context.fill();\n  }\n  var paint = this.getPolygonPaint(featureStyle);\n  context.strokeStyle = paint.getColorRGBA();\n  context.lineWidth = paint.getStrokeWidth();\n  context.stroke();\n  context.restore();\n};\n\n/**\n * Add a feature to the batch\n * @param geoJson\n * @param context\n * @param drawProjection\n * @param boundingBox\n * @param featureStyle\n */\nFeatureTiles.prototype.addFeatureToBatch = async function(geoJson, context, drawProjection, boundingBox, featureStyle) {\n  var path = new d3geo.geoPath()\n    .context(context)\n    .projection(drawProjection);\n  var i, c;\n  if (geoJson.type === 'Point') {\n    await this.drawPoint(path, geoJson, context, boundingBox, featureStyle, drawProjection);\n  } else if (geoJson.type === 'LineString') {\n    this.drawLine(path, geoJson, context, featureStyle);\n  } else if (geoJson.type === 'Polygon') {\n    this.drawPolygon(path, geoJson, context, featureStyle);\n  } else if (geoJson.type === 'MultiPoint') {\n    for (i = 0; i < geoJson.coordinates.length; i++) {\n      c = geoJson.coordinates[i];\n      var ptGeom = {\n        type: 'Point',\n        coordinates: c\n      };\n      await this.drawPoint(path, ptGeom, context, boundingBox, featureStyle, drawProjection);\n    }\n  } else if (geoJson.type === 'MultiLineString') {\n    for (i = 0; i < geoJson.coordinates.length; i++) {\n      c = geoJson.coordinates[i];\n      var lsGeom = {\n        type: 'LineString',\n        coordinates: c\n      };\n      this.drawLine(path, lsGeom, context, featureStyle);\n    }\n  } else if (geoJson.type === 'MultiPolygon') {\n    for (i = 0; i < geoJson.coordinates.length; i++) {\n      c = geoJson.coordinates[i];\n      var pGeom = {\n        type: 'Polygon',\n        coordinates: c\n      };\n      this.drawPolygon(path, pGeom, context, featureStyle);\n    }\n  }\n};\n\n/**\n * Create an expanded bounding box to handle features outside the tile that overlap\n * @param webMercatorBoundingBox  web mercator bounding box\n * @return {BoundingBox} bounding box\n */\nFeatureTiles.prototype.expandBoundingBox = function(webMercatorBoundingBox) {\n  return this.expandWebMercatorBoundingBox(webMercatorBoundingBox, webMercatorBoundingBox);\n};\n\n/**\n * Create an expanded bounding box to handle features outside the tile that overlap\n * @param webMercatorBoundingBox web mercator bounding box\n * @param tileWebMercatorBoundingBox  tile web mercator bounding box\n * @return {BoundingBox} bounding box\n */\nFeatureTiles.prototype.expandWebMercatorBoundingBox = function(webMercatorBoundingBox, tileWebMercatorBoundingBox) {\n  // Create an expanded bounding box to handle features outside the tile  that overlap\n  var minLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.widthOverlap);\n  var maxLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox,  this.tileWidth + this.widthOverlap);\n  var maxLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.heightOverlap);\n  var minLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, this.tileHeight + this. heightOverlap);\n\n  // Choose the most expanded longitudes and latitudes\n  minLongitude = Math.min(minLongitude, webMercatorBoundingBox.minLongitude);\n  maxLongitude = Math.max(maxLongitude, webMercatorBoundingBox.maxLongitude);\n  minLatitude = Math.min(minLatitude, webMercatorBoundingBox.minLatitude);\n  maxLatitude = Math.max(maxLatitude, webMercatorBoundingBox.maxLatitude);\n\n  // Bound with the web mercator limits\n  minLongitude = Math.max(minLongitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);\n  maxLongitude = Math.min(maxLongitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);\n  minLatitude = Math.max(minLatitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);\n  maxLatitude = Math.min(maxLatitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH);\n\n  return new BoundingBox(minLongitude, maxLongitude, minLatitude, maxLatitude);\n};\n\nmodule.exports = FeatureTiles;\n\n}).call(this,require('_process'))\n},{\"../../boundingBox\":7,\"../../extension/style/featureTableStyles\":48,\"../../extension/style/iconCache\":49,\"../imageUtils\":89,\"../tileBoundingBoxUtils\":93,\"./featureDrawType\":84,\"./featurePaintCache\":86,\"./paint\":88,\"@turf/polygon-to-line\":131,\"_process\":284,\"canvas\":undefined,\"concat-stream\":185,\"d3-geo\":194,\"reproject\":315}],88:[function(require,module,exports){\n/**\n * Paint module.\n * @module tiles/features\n */\nvar Paint = function () {\n  this.color = '#000000FF';\n  this.strokeWidth = 1.0;\n};\n\n/**\n * Get the color\n * @returns {String} color\n */\nPaint.prototype.getColor = function() {\n  return this.color;\n};\n\n/**\n * Get the color\n * @returns {String} color\n */\nPaint.prototype.getColorRGBA = function() {\n  // assumes color is in the format #RRGGBB or #RRGGBBAA\n  var red = parseInt(this.color.substr(1,2), 16);\n  var green = parseInt(this.color.substr(3,2), 16);\n  var blue = parseInt(this.color.substr(5,2), 16);\n  var alpha = 1.0;\n  if (this.color.length > 7) {\n    alpha = parseInt(this.color.substr(7,2), 16) / 255;\n  }\n  return 'rgba(' + red + ',' + green + ',' + blue + ',' + alpha + ')';\n};\n\n/**\n * Set the color\n * @param {String} color\n */\nPaint.prototype.setColor = function(color) {\n  this.color = color;\n};\n\n/**\n * Get the stroke width\n * @returns {Number} strokeWidth\n */\nPaint.prototype.getStrokeWidth = function() {\n  return this.strokeWidth;\n};\n\n/**\n * Set the stroke width\n * @param {Number} strokeWidth\n */\nPaint.prototype.setStrokeWidth = function(strokeWidth) {\n  this.strokeWidth = strokeWidth;\n};\n\nmodule.exports = Paint;\n\n},{}],89:[function(require,module,exports){\n(function (process,Buffer){\nvar sizeOf = require('image-size');\nvar ImageUtils = {};\nvar isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1);\nvar isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom);\nvar isNode = typeof(process) !== 'undefined' && process.version;\nImageUtils.useNodeCanvas =  isNode && !isPhantom && !isElectron;\n\n/**\n * Get image for data\n * @param {Buffer|String} data file data or file path\n * @returns {Object}\n */\nImageUtils.getImageSize = function (data) {\n\treturn sizeOf(data);\n};\n\n/**\n * Get image for data\n * @param {Buffer|String} data file data or file path\n * @param {String} contentType\n * @returns {Promise<Image>}\n */\nImageUtils.getImage = function (data, contentType = 'image/png') {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar image;\n\t\tif (ImageUtils.useNodeCanvas) {\n\t\t\tvar Canvas = require('canvas');\n\t\t\timage = new Canvas.Image();\n\t\t} else {\n\t\t\timage = new Image();\n\t\t}\n\t\timage.onload = () => {\n\t\t\tresolve(image);\n\t\t};\n\t\timage.onerror = (error) => {\n\t\t\treject(error);\n\t\t};\n\t\tvar src = data;\n\t\tif (data instanceof Buffer) {\n\t\t\tsrc = 'data:' + contentType + ';base64,' + data.toString('base64');\n\t\t}\n\t\timage.src = src;\n\t}.bind(this));\n};\n\n/**\n * Get a scaled image\n * @param {Buffer} data\n * @param {Number} scale\n * @returns {Promise<Image>}\n */\nImageUtils.getScaledImage = function (data, scale) {\n\treturn ImageUtils.getImage(data).then(function (image) {\n\t\treturn ImageUtils.scaleBitmap(image, scale);\n\t}.bind(this));\n};\n\n/**\n * Get a scaled image\n * @param {Image} image\n * @param {Number} scale\n * @returns {Promise<Image>}\n */\nImageUtils.scaleBitmap = function (image, scale) {\n\tif (scale === 1.0) {\n\t\treturn Promise.resolve(image);\n\t} else {\n\t\tvar iconWidth = image.width;\n\t\tvar iconHeight = image.height;\n\t\tvar scaledWidth = Math.round(scale * iconWidth);\n\t\tvar scaledHeight = Math.round(scale * iconHeight);\n\t\tvar canvas, ctx, img;\n\t\tif (ImageUtils.useNodeCanvas) {\n\t\t\tvar Canvas = require('canvas');\n\t\t\tcanvas = Canvas.createCanvas(scaledWidth, scaledHeight);\n\t\t\timg = new Canvas.Image();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tcanvas.width = scaledWidth;\n\t\t\tcanvas.height = scaledHeight;\n\t\t\timg = new Image();\n\t\t}\n\t\tctx = canvas.getContext('2d');\n\t\tctx.drawImage(image, 0, 0, iconWidth, iconHeight, 0, 0, scaledWidth, scaledHeight);\n\t\treturn new Promise(function (resolve) {\n\t\t\timg.onload = () => { resolve(img); };\n\t\t\timg.src = canvas.toDataURL();\n\t\t}.bind(this));\n\t}\n};\n\nmodule.exports = ImageUtils;\n\n}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"_process\":284,\"buffer\":182,\"canvas\":undefined,\"image-size\":244}],90:[function(require,module,exports){\n/**\n * @module tiles/matrix\n * @see module:dao/dao\n */\n\nvar Dao = require('../../dao/dao')\n  // , ContentsDao = require('../../core/contents').ContentsDao\n  , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao;\n\nvar util = require('util');\n\n/**\n * Tile Matrix object. Documents the structure of the tile matrix at each zoom\n * level in each tiles table. It allows GeoPackages to contain rectangular as\n * well as square tiles (e.g. for better representation of polar regions). It\n * allows tile pyramids with zoom levels that differ in resolution by factors of\n * 2, irregular intervals, or regular intervals other than factors of 2.\n * @class TileMatrix\n */\nvar TileMatrix = function() {\n\n  /**\n   * Tile Pyramid User Data Table Name\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * 0 ⇐ zoom_level ⇐ max_level for table_name\n   * @member {Number}\n   */\n  this.zoom_level;\n\n  /**\n   * Number of columns (>= 1) in tile matrix at this zoom level\n   * @member {Number}\n   */\n  this.matrix_width;\n\n  /**\n   * Number of rows (>= 1) in tile matrix at this zoom level\n   * @member {Number}\n   */\n  this.matrix_height;\n\n  /**\n   * Tile width in pixels (>= 1)for this zoom level\n   * @member {Number}\n   */\n  this.tile_width;\n\n  /**\n   * Tile height in pixels (>= 1)for this zoom level\n   * @member {Number}\n   */\n  this.tile_height;\n\n  /**\n   * In t_table_name srid units or default meters for srid 0 (>0)\n   * @member {Number}\n   */\n  this.pixel_x_size;\n\n  /**\n   * In t_table_name srid units or default meters for srid 0 (>0)\n   * @member {Number}\n   */\n  this.pixel_y_size;\n};\n\n/**\n * Tile Matrix Set Data Access Object\n * @class TileMatrixDao\n * @extends {module:dao/dao~Dao}\n */\nvar TileMatrixDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(TileMatrixDao, Dao);\n\nTileMatrixDao.prototype.createObject = function () {\n  return new TileMatrix();\n};\n\n/**\n * get the Contents of the Tile matrix\n * @param  {tileMatrix} tileMatrix the tile matrix\n * @param  {Function} callback returns the contents\n */\nTileMatrixDao.prototype.getContents = function (tileMatrix) {\n  var dao = this.geoPackage.getContentsDao();\n  return dao.queryForId(tileMatrix.table_name);\n};\n\nTileMatrixDao.prototype.getTileMatrixSet = function (tileMatrix) {\n  var dao = this.geoPackage.getTileMatrixSetDao();\n  return dao.queryForId(tileMatrix.table_name);\n};\n\nTileMatrixDao.TABLE_NAME = \"gpkg_tile_matrix\";\nTileMatrixDao.COLUMN_PK1 = \"table_name\";\nTileMatrixDao.COLUMN_PK2 = \"zoom_level\";\nTileMatrixDao.COLUMN_TABLE_NAME = \"table_name\";\nTileMatrixDao.COLUMN_ZOOM_LEVEL = \"zoom_level\";\nTileMatrixDao.COLUMN_MATRIX_WIDTH = \"matrix_width\";\nTileMatrixDao.COLUMN_MATRIX_HEIGHT = \"matrix_height\";\nTileMatrixDao.COLUMN_TILE_WIDTH = \"tile_width\";\nTileMatrixDao.COLUMN_TILE_HEIGHT = \"tile_height\";\nTileMatrixDao.COLUMN_PIXEL_X_SIZE = \"pixel_x_size\";\nTileMatrixDao.COLUMN_PIXEL_Y_SIZE = \"pixel_y_size\";\n\nTileMatrix.TABLE_NAME = 'tableName';\nTileMatrix.ZOOM_LEVEL = 'zoomLevel';\nTileMatrix.MATRIX_WIDTH = 'matrixWidth';\nTileMatrix.MATRIX_HEIGHT = 'matrixHeight';\nTileMatrix.TILE_WIDTH = 'tileWidth';\nTileMatrix.TILE_HEIGHT = 'tileHeight';\nTileMatrix.PIXEL_X_SIZE = 'pixelXSize';\nTileMatrix.PIXEL_Y_SIZE = 'pixelYSize';\n\n\nTileMatrixDao.prototype.gpkgTableName = 'gpkg_tile_matrix';\nTileMatrixDao.prototype.idColumns = [TileMatrixDao.COLUMN_PK1, TileMatrixDao.COLUMN_PK2];\nTileMatrixDao.prototype.columns = [TileMatrixDao.COLUMN_TABLE_NAME, TileMatrixDao.COLUMN_ZOOM_LEVEL, TileMatrixDao.COLUMN_MATRIX_WIDTH, TileMatrixDao.COLUMN_MATRIX_HEIGHT, TileMatrixDao.COLUMN_TILE_WIDTH, TileMatrixDao.COLUMN_TILE_HEIGHT, TileMatrixDao.COLUMN_PIXEL_X_SIZE, TileMatrixDao.COLUMN_PIXEL_Y_SIZE];\n\nmodule.exports.TileMatrixDao = TileMatrixDao;\nmodule.exports.TileMatrix = TileMatrix;\n\n},{\"../../dao/dao\":11,\"../matrixset\":91,\"util\":343}],91:[function(require,module,exports){\n/**\n * @module tiles/matrixset\n * @see module:dao/dao\n */\n\nvar Dao = require('../../dao/dao')\n  , BoundingBox = require('../../boundingBox')\n  , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao;\n  // , ContentsDao = require('../../core/contents').ContentsDao;\n\nvar util = require('util');\n\n/**\n * `TileMatrixSet` models the [`gpkg_tile_matrix_set`](https://www.geopackage.org/spec121/index.html#_tile_matrix_set)\n * table.  A row in this table defines the minimum bounding box (min_x, min_y,\n * max_x, max_y) and spatial reference system (srs_id) for all tiles in a\n * [tile pyramid](https://www.geopackage.org/spec121/index.html#tiles_user_tables)\n * user data table.  While the parent [Contents]{@link module:core/contents~Contents}\n * row/object also defines a bounding box, the tile matrix set bounding box is\n * used as the reference for calculating tile column/row matrix coordinates, so\n * (min_x, max_y) in SRS coordinates would be the upper-left corner of the tile\n * at tile matrix coordinate (0, 0).  The parent `Contents` bounding box may be\n * smaller or larger than the `TileMatrixSet` bounding box, and its purpose is\n * to guide a user-facing application to the target region of the tile pyramid.\n * The [`srs_id`]{@link module:tiles/matrixset~TileMatrixSet#srs_id} of the `TileMatrixSet`, on the other hand, must\n * match that of the parent [`Contents`]{@link module:core/contents~Contents#srs_id}.\n *\n * @class TileMatrixSet\n */\nvar TileMatrixSet = function() {\n\n  /**\n   * Name of the [tile pyramid user data table](https://www.geopackage.org/spec121/index.html#tiles_user_tables)\n   * that stores the tiles\n   * @member {string}\n   */\n  this.table_name;\n\n  /**\n   * Unique identifier for each Spatial Reference System within a GeoPackage\n   * @member {SRSRef}\n   */\n  this.srs_id;\n\n  /**\n   * Bounding box minimum easting or longitude for all content in table_name\n   * @member {Number}\n   */\n  this.min_x;\n\n  /**\n   * Bounding box minimum northing or latitude for all content in table_name\n   * @member {Number}\n   */\n  this.min_y;\n\n  /**\n   * Bounding box maximum easting or longitude for all content in table_name\n   * @member {Number}\n   */\n  this.max_x;\n\n  /**\n   * Bounding box maximum northing or latitude for all content in table_name\n   * @member {Number}\n   */\n  this.max_y;\n};\n\nTileMatrixSet.prototype.setBoundingBox = function (boundingBox) {\n  this.min_x = boundingBox.minLongitude;\n  this.max_x = boundingBox.maxLongitude;\n  this.min_y = boundingBox.minLatitude;\n  this.max_y = boundingBox.maxLatitude;\n};\n\nTileMatrixSet.prototype.getBoundingBox = function () {\n  return new BoundingBox(this.min_x, this.max_x, this.min_y, this.max_y);\n};\n\nTileMatrixSet.prototype.setContents = function(contents) {\n  if (contents && contents.data_type === 'tiles') {\n    this.table_name = contents.table_name;\n  }\n}\n\n/**\n * Tile Matrix Set Data Access Object\n * @class TileMatrixSetDao\n * @extends {module:dao/dao~Dao}\n */\nvar TileMatrixSetDao = function(geoPackage) {\n  Dao.call(this, geoPackage);\n}\n\nutil.inherits(TileMatrixSetDao, Dao);\n\nTileMatrixSetDao.prototype.createObject = function () {\n  return new TileMatrixSet();\n};\n\n/**\n * Get the tile table names\n * @param  {Function} callback returns the tile table names\n */\nTileMatrixSetDao.prototype.getTileTables = function () {\n  var tableNames = [];\n  for (var result of this.connection.each('select ' + TileMatrixSetDao.COLUMN_TABLE_NAME + ' from ' + TileMatrixSetDao.TABLE_NAME)) {\n    tableNames.push(result[TileMatrixSetDao.COLUMN_TABLE_NAME]);\n  }\n  return tableNames;\n};\n\nTileMatrixSetDao.prototype.getProjection = function (tileMatrixSet) {\n  var srs = this.getSrs(tileMatrixSet);\n  if (!srs) return;\n  var srsDao = this.geoPackage.getSpatialReferenceSystemDao();\n  return srsDao.getProjection(srs);\n};\n\n/**\n * Get the Spatial Reference System of the Tile Matrix set\n * @param  {TileMatrixSet}   tileMatrixSet tile matrix set\n */\nTileMatrixSetDao.prototype.getSrs = function (tileMatrixSet) {\n  var dao = this.geoPackage.getSpatialReferenceSystemDao();\n  return dao.queryForId(tileMatrixSet.srs_id);\n};\n\nTileMatrixSetDao.prototype.getContents = function (tileMatrixSet) {\n  var dao = this.geoPackage.getContentsDao();\n  return dao.queryForId(tileMatrixSet.table_name);\n};\n\nTileMatrixSet.TABLE_NAME = \"tableName\";\nTileMatrixSet.MIN_X = \"minX\";\nTileMatrixSet.MIN_Y = \"minY\";\nTileMatrixSet.MAX_X = \"maxX\";\nTileMatrixSet.MAX_Y = \"maxY\";\nTileMatrixSet.SRS_ID = \"srsId\";\n\nTileMatrixSetDao.TABLE_NAME = \"gpkg_tile_matrix_set\";\nTileMatrixSetDao.COLUMN_PK = \"table_name\";\nTileMatrixSetDao.COLUMN_TABLE_NAME = \"table_name\";\nTileMatrixSetDao.COLUMN_SRS_ID = \"srs_id\";\nTileMatrixSetDao.COLUMN_MIN_X = \"min_x\";\nTileMatrixSetDao.COLUMN_MIN_Y = \"min_y\";\nTileMatrixSetDao.COLUMN_MAX_X = \"max_x\";\nTileMatrixSetDao.COLUMN_MAX_Y = \"max_y\";\n\nTileMatrixSetDao.prototype.gpkgTableName = 'gpkg_tile_matrix_set';\nTileMatrixSetDao.prototype.idColumns = [TileMatrixSetDao.COLUMN_PK];\nTileMatrixSetDao.prototype.columns = [TileMatrixSetDao.COLUMN_TABLE_NAME, TileMatrixSetDao.COLUMN_SRS_ID, TileMatrixSetDao.COLUMN_MIN_X, TileMatrixSetDao.COLUMN_MIN_Y, TileMatrixSetDao.COLUMN_MAX_X, TileMatrixSetDao.COLUMN_MAX_Y];\n\nTileMatrixSetDao.prototype.columnToPropertyMap = {};\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_TABLE_NAME] = TileMatrixSet.TABLE_NAME;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_SRS_ID] = TileMatrixSet.SRS_ID;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_X] = TileMatrixSet.MIN_X;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_Y] = TileMatrixSet.MIN_Y;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_X] = TileMatrixSet.MAX_X;\nTileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_Y] = TileMatrixSet.MAX_Y;\n\nmodule.exports.TileMatrixSetDao = TileMatrixSetDao;\nmodule.exports.TileMatrixSet = TileMatrixSet;\n\n},{\"../../boundingBox\":7,\"../../core/srs\":9,\"../../dao/dao\":11,\"util\":343}],92:[function(require,module,exports){\nvar TileMatrixSetDao = require('../matrixset').TileMatrixSetDao\n  , TileBoundingBoxUtils = require('../tileBoundingBoxUtils')\n  , TileCreator = require('../creator')\n  , BoundingBox = require('../../boundingBox');\n\nvar proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\nvar GeoPackageTileRetriever = function(tileDao, width, height) {\n  this.tileDao = tileDao;\n  this.tileDao.adjustTileMatrixLengths();\n\n  this.width = width;\n  this.height = height;\n}\n\nmodule.exports = GeoPackageTileRetriever;\n\nGeoPackageTileRetriever.prototype.getWebMercatorBoundingBox = function () {\n  if (this.setWebMercatorBoundingBox) {\n    return this.setWebMercatorBoundingBox;\n  } else {\n    var tileMatrixSetDao = this.tileDao.geoPackage.getTileMatrixSetDao();\n    var tileMatrixSet = this.tileDao.tileMatrixSet;\n    var srs = tileMatrixSetDao.getSrs(tileMatrixSet);\n    this.setProjectionBoundingBox = tileMatrixSet.getBoundingBox();\n    if (srs.organization_coordsys_id === 4326 && srs.organization === 'EPSG') {\n      this.setProjectionBoundingBox.minLatitude = Math.max(this.setProjectionBoundingBox.minLatitude, -85.05);\n      this.setProjectionBoundingBox.maxLatitude = Math.min(this.setProjectionBoundingBox.maxLatitude, 85.05);\n    }\n    this.setWebMercatorBoundingBox = this.setProjectionBoundingBox.projectBoundingBox(this.tileDao.projection, 'EPSG:3857');\n\n    return this.setWebMercatorBoundingBox;\n  }\n};\n\nGeoPackageTileRetriever.prototype.hasTile = function (x, y, zoom) {\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom);\n  var iterator = this.retrieveTileResults(webMercatorBoundingBox, tileMatrix);\n  var exists = false;\n  for (var row of iterator) {\n    exists = true;\n  }\n  return exists;\n};\n\nGeoPackageTileRetriever.prototype.getTile = function (x, y, zoom) {\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);\n  return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');\n};\n\nGeoPackageTileRetriever.prototype.drawTileIn = function (x, y, zoom, canvas) {\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);\n  return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857', canvas);\n};\n\nGeoPackageTileRetriever.prototype.getTileWithWgs84Bounds = function (wgs84BoundingBox, zoom) {\n  var webMercatorBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', 'EPSG:3857');\n  var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);\n  return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');\n};\n\nGeoPackageTileRetriever.prototype.getTileWithWgs84BoundsInProjection = function (wgs84BoundingBox, zoom, targetProjection) {\n  var targetBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', targetProjection);\n  return this.getTileWithBounds(targetBoundingBox, zoom, targetProjection);\n};\n\nGeoPackageTileRetriever.prototype.getWebMercatorTile = function (x, y, zoom) {\n  // need to determine the geoPackage zoom level from the web mercator zoom level\n  var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom);\n  var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom);\n  return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857');\n};\n\nGeoPackageTileRetriever.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) {\n  // find width and height of this tile in geopackage projection\n  var proj4Projection = proj4(this.tileDao.projection, 'EPSG:3857');\n  var ne = proj4Projection.inverse([webMercatorBoundingBox.maxLongitude, webMercatorBoundingBox.maxLatitude]);\n  var sw = proj4Projection.inverse([webMercatorBoundingBox.minLongitude, webMercatorBoundingBox.minLatitude]);\n  var width = (ne[0] - sw[0]);\n  var height = (ne[1] - sw[1]);\n  var gpZoom = undefined;\n  // find the closest zoom for width\n  for (var i = 0; i < this.tileDao.widths.length; i++) {\n    var tileWidth = this.tileDao.widths[i];\n    var difference = Math.abs(width - tileWidth);\n    var tolerance = .001 * tileWidth;\n    if (tileWidth <= width || difference <= tolerance) {\n      gpZoom = this.tileDao.maxZoom - i;\n    }\n  }\n\n  return gpZoom;\n};\n\nGeoPackageTileRetriever.prototype.getTileWithBounds = function (targetBoundingBox, zoom, targetProjection, canvas) {\n  var tiles = [];\n  var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom);\n  if (!tileMatrix) return Promise.resolve();\n  var tileWidth = tileMatrix.tile_width;\n  var tileHeight = tileMatrix.tile_height;\n  var matrixSetBoundsInTargetProjection = this.tileDao.tileMatrixSet.getBoundingBox().projectBoundingBox(this.tileDao.projection, targetProjection);\n\n  var matrixTotalBoundingBox = this.tileDao.tileMatrixSet.getBoundingBox();\n  var targetBoundingBoxInMatrixSetProjection = targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection);\n\n  var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(matrixTotalBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, targetBoundingBoxInMatrixSetProjection);\n  var creator = TileCreator.initialize(this.width || tileWidth, this.height || tileHeight, tileMatrix, this.tileDao.tileMatrixSet, targetBoundingBox, this.tileDao.srs, targetProjection, canvas);\n\n  var iterator = this.retrieveTileResults(targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection), tileMatrix);\n  for (var tile of iterator) {\n    tiles.push({\n      data: tile.getTileData(),\n      gridColumn: tile.getTileColumn(),\n      gridRow: tile.getRow()\n    });\n  }\n\n  return tiles.reduce(function(sequence, tile) {\n    return sequence.then(function() {\n      return creator.addTile(tile.data, tile.gridColumn, tile.gridRow);\n    });\n  }, Promise.resolve())\n  .then(function() {\n    if (!canvas) {\n      return creator.getCompleteTile('png');\n    }\n  });\n};\n\nGeoPackageTileRetriever.prototype.retrieveTileResults = function (tileMatrixProjectionBoundingBox, tileMatrix) {\n  if(tileMatrix) {\n    var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(this.tileDao.tileMatrixSet.getBoundingBox(), tileMatrix.matrix_width, tileMatrix.matrix_height, tileMatrixProjectionBoundingBox);\n    return this.tileDao.queryByTileGrid(tileGrid, tileMatrix.zoom_level);\n  } else {\n    return Promise.resolve();\n  }\n};\n\n},{\"../../boundingBox\":7,\"../creator\":79,\"../matrixset\":91,\"../tileBoundingBoxUtils\":93,\"proj4\":285}],93:[function(require,module,exports){\n\n/**\n * This module exports utility functions for [slippy map (XYZ)](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames)\n * tile calculations.\n *\n * @module tiles/tileBoundingBoxUtils\n */\n\nconst BoundingBox = require('../boundingBox');\nconst TileGrid = require('./tileGrid');\nconst proj4 = ((proj4) => { return 'default' in proj4 ? proj4['default'] : proj4 })(require('proj4'));\n\nvar WEB_MERCATOR_HALF_WORLD_WIDTH = proj4('EPSG:4326', 'EPSG:3857').forward([180, 0])[0];\n\n/**\n * Calculate the bounds in tile coordinates that covers the given bounding box\n * at the given zoom level.  The result object contains the keys `minX`, `maxX`,\n * `minY`, and `maxY`, which are tile column and row values in the XYZ tile\n * scheme.\n *\n * @param {BoundingBox} webMercatorBoundingBox bounds in EPSG:3857 coordinates (meters)\n * @param {number} zoom the integral zoom level\n * @returns {{minX: number, maxX: number, minY: number, maxY: number}} bounds in tile column and row coordinates\n */\nmodule.exports.webMercatorTileBox = function(webMercatorBoundingBox, zoom) {\n  var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom);\n  var tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide);\n\n  const minLonClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLongitude);\n  const maxLonClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLongitude);\n  const minLatClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLatitude);\n  const maxLatClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLatitude);\n\n  var minX = Math.floor((minLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize);\n  var maxX = Math.max(0, Math.ceil((maxLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize) - 1);\n  var minY = Math.floor((WEB_MERCATOR_HALF_WORLD_WIDTH - maxLatClip) / tileSize);\n  var maxY = Math.max(0, Math.ceil((WEB_MERCATOR_HALF_WORLD_WIDTH - minLatClip) / tileSize) - 1);\n\n  return {\n    minX: minX,\n    maxX: maxX,\n    minY: minY,\n    maxY: maxY\n  };\n}\n\nmodule.exports.WEB_MERCATOR_HALF_WORLD_WIDTH = WEB_MERCATOR_HALF_WORLD_WIDTH;\n\nmodule.exports.determinePositionAndScale = function(geoPackageTileBoundingBox, tileHeight, tileWidth, totalBoundingBox, totalHeight, totalWidth) {\n  var p = {};\n\n  var finalTileWidth = totalBoundingBox.maxLongitude - totalBoundingBox.minLongitude;\n  var xoffsetMin = geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude;\n  var xpercentageMin = xoffsetMin / finalTileWidth;\n\n  var finalTileHeight = totalBoundingBox.maxLatitude - totalBoundingBox.minLatitude;\n  var yoffsetMax = totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude;\n  var ypercentageMax = yoffsetMax / finalTileHeight;\n\n  var gpTileWidth = geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude;\n  var gpPixelsPerUnitWidth = tileWidth / gpTileWidth;\n\n  var finalTilePixelsPerUnitWidth = totalWidth / finalTileWidth;\n\n  var xPositionInFinalTileUnits = ((geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth);\n  var widthInFinalTileUnits = Math.round(((geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth));\n\n  var gpTileHeight = geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude;\n  var gpPixelsPerUnitHeight = tileHeight / gpTileHeight;\n\n  var finalTilePixelsPerUnitHeight = totalHeight / finalTileHeight;\n\n  var yPositionInFinalTileUnits = ((totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude) * finalTilePixelsPerUnitHeight);\n  var heightInFinalTileUnits = Math.round((geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude) * finalTilePixelsPerUnitHeight);\n\n  p.yPositionInFinalTileStart = Math.round(ypercentageMax * totalHeight);\n  p.xPositionInFinalTileStart = Math.round(xpercentageMin * totalWidth);\n  p.dx = p.xPositionInFinalTileStart;\n  p.dy = p.yPositionInFinalTileStart;\n  p.sx = 0;\n  p.sy = 0;\n  p.dWidth = widthInFinalTileUnits;\n  p.dHeight = heightInFinalTileUnits;\n  p.sWidth = tileWidth;\n  p.sHeight = tileHeight;\n\n  return p;\n}\n\n/**\n * Calculate the bounds in EPSG:3857 coordinates of the tile at the given XYZ\n * coordinates coordinates and zoom level.\n *\n *  @param {number} x tile column\n *  @param {number} y tile row\n *  @param {number} zoom zoom level\n *  @return {BoundingBox} a bounding box in EPSG:3857 meters\n */\nmodule.exports.getWebMercatorBoundingBoxFromXYZ = function(x, y, zoom, options) {\n  var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom);\n\tvar tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide);\n\n  var meterBuffer = 0;\n  if (options && options.buffer && options.tileSize) {\n    var pixelBuffer = options.buffer;\n    var metersPerPixel = tileSize / options.tileSize;\n    meterBuffer = metersPerPixel * pixelBuffer;\n  }\n\n\tvar minLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + (x * tileSize) - meterBuffer;\n\tvar maxLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + ((x + 1) * tileSize) + meterBuffer;\n\tvar minLat = WEB_MERCATOR_HALF_WORLD_WIDTH - ((y + 1) * tileSize) - meterBuffer;\n\tvar maxLat = WEB_MERCATOR_HALF_WORLD_WIDTH - (y * tileSize) + meterBuffer;\n\n  minLon = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLon);\n  maxLon = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLon);\n  minLat = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLat);\n  maxLat = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLat);\n\n\tvar box = new BoundingBox(minLon, maxLon, minLat, maxLat);\n\n\treturn box;\n}\n\n/**\n *  Get the tile size in meters\n *\n *  @param tilesPerSide tiles per side\n *\n *  @return meters\n */\nmodule.exports.tileSizeWithTilesPerSide = function(tilesPerSide) {\n  return (2 * WEB_MERCATOR_HALF_WORLD_WIDTH) / tilesPerSide;\n}\n\n/**\n *  Get the tiles per side, width and height, at the zoom level\n *\n *  @param zoom zoom level\n *\n *  @return tiles per side\n */\nmodule.exports.tilesPerSideWithZoom = function(zoom) {\n  return 1 << zoom;\n}\n\n/**\n *  Get the tile grid\n *\n *  @param webMercatorTotalBox    web mercator total bounding box\n *  @param matrixWidth            matrix width\n *  @param matrixHeight           matrix height\n *  @param boundingBox            bounding box\n *\n *  @return tile grid\n */\nmodule.exports.getTileGridWithTotalBoundingBox = function(totalBoundingBox, matrixWidth, matrixHeight, boundingBox) {\n  var minColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.minLongitude);\n  var maxColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.maxLongitude, true);\n  if (minColumn < matrixWidth && maxColumn >= 0) {\n    if (minColumn < 0) {\n      minColumn = 0;\n    }\n    if (maxColumn >= matrixWidth) {\n      maxColumn = matrixWidth - 1;\n    }\n  }\n\n  var maxRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.minLatitude, true);\n  var minRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.maxLatitude);\n\n\n  if(minRow < matrixHeight && maxRow >= 0){\n    if(minRow < 0){\n      minRow = 0;\n    }\n    if(maxRow >= matrixHeight){\n      maxRow = matrixHeight - 1;\n    }\n  }\n\n  var tileGrid = new TileGrid(minColumn, maxColumn, minRow, maxRow);\n  return tileGrid;\n}\n\n/**\n *  Get the tile column of the longitude in degrees\n *\n *  @param webMercatorTotalBox web mercator total bounding box\n *  @param matrixWidth         matrix width\n *  @param longitude           longitude\n *\n *  @return tile column\n */\nmodule.exports.getTileColumnWithTotalBoundingBox = function(webMercatorTotalBox, matrixWidth, longitude, max) {\n  var minX = webMercatorTotalBox.minLongitude;\n  var maxX = webMercatorTotalBox.maxLongitude;\n  var tileId;\n  if (longitude < minX) {\n    tileId = -1;\n  } else if (longitude >= maxX) {\n    tileId = matrixWidth;\n  } else {\n    var matrixWidthMeters = maxX - minX;\n    var tileWidth = matrixWidthMeters / matrixWidth;\n    var tileIdDouble = ((longitude - minX) / tileWidth);\n    tileId = ~~tileIdDouble;\n    if (max) {\n      // if the edge lands right on the calculated edge, subtract one\n      if (tileIdDouble === tileId) {\n        tileId--;\n      }\n    }\n  }\n  return tileId;\n}\n\n/**\n *  Get the tile row of the latitude in degrees\n *\n *  @param webMercatorTotalBox web mercator total bounding box\n *  @param matrixHeight        matrix height\n *  @param latitude            latitude\n *\n *  @return tile row\n */\nmodule.exports.getRowWithTotalBoundingBox = function(webMercatorTotalBox, matrixHeight, latitude, max) {\n  var minY = webMercatorTotalBox.minLatitude;\n  var maxY = webMercatorTotalBox.maxLatitude;\n\n  var tileId;\n  if (latitude < minY) {\n    tileId = matrixHeight;\n  } else if (latitude >= maxY) {\n    tileId = -1;\n  } else {\n    var matrixHeightMeters = maxY - minY;\n    var tileHeight = matrixHeightMeters / matrixHeight;\n    var tileIdDouble = ((maxY - latitude) / tileHeight);\n    tileId = ~~tileIdDouble;\n    if (max) {\n      // if the edge lands right on the calculated edge, add one\n      if (tileIdDouble === tileId) {\n        tileId--;\n      }\n    }\n  }\n  return tileId;\n}\n\n/**\n *  Get the web mercator bounding box of the tile column and row in the tile\n *  matrix using the total bounding box\n *\n *  @param webMercatorTotalBox web mercator total bounding box\n *  @param tileMatrix          tile matrix\n *  @param tileColumn          tile column\n *  @param tileRow             tile row\n *\n *  @return web mercator bounding box\n */\nmodule.exports.getTileBoundingBox = function(box, tileMatrix, tileColumn, tileRow) {\n  var tileMatrixWidth = tileMatrix.matrix_width;\n  var tileMatrixHeight = tileMatrix.matrix_height;\n  var tileGrid = new TileGrid(tileColumn, tileColumn, tileRow, tileRow);\n  var matrixMinX = box.minLongitude;\n  var matrixMaxX = box.maxLongitude;\n  var matrixWidth = matrixMaxX - matrixMinX;\n  var tileWidth = matrixWidth / tileMatrixWidth;\n\n  // Find the longitude range\n  var minLon = matrixMinX + (tileWidth * tileGrid.min_x);\n  var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x));\n\n  // Get the tile height\n  var matrixMinY = box.minLatitude;\n  var matrixMaxY = box.maxLatitude;\n  var matrixHeight = matrixMaxY - matrixMinY;\n  var tileHeight = matrixHeight / tileMatrixHeight;\n\n  // Find the latitude range\n  var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y);\n  var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y));\n\n  return new BoundingBox(minLon, maxLon, minLat, maxLat);\n}\n\nmodule.exports.getTileGridBoundingBox = function(matrixSetBoundingBox, tileMatrixWidth, tileMatrixHeight, tileGrid) {\n  // Get the tile width\n  var matrixMinX = matrixSetBoundingBox.minLongitude;\n  var matrixMaxX = matrixSetBoundingBox.maxLongitude;\n  var matrixWidth = matrixMaxX - matrixMinX;\n  var tileWidth = matrixWidth / tileMatrixWidth;\n\n  // Find the longitude range\n  var minLon = matrixMinX + (tileWidth * tileGrid.min_x);\n  var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x));\n\n  // Get the tile height\n  var matrixMinY = matrixSetBoundingBox.minLatitude;\n  var matrixMaxY = matrixSetBoundingBox.maxLatitude;\n  var matrixHeight = matrixMaxY - matrixMinY;\n  var tileHeight = matrixHeight / tileMatrixHeight;\n\n  // Find the latitude range\n  var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y);\n  var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y));\n\n  return new BoundingBox(minLon, maxLon, minLat, maxLat);\n}\n\nmodule.exports.getXPixel = function(width, boundingBox, longitude) {\n  var boxWidth = boundingBox.maxLongitude - boundingBox.minLongitude;\n  var offset = longitude - boundingBox.minLongitude;\n  var percentage = offset / boxWidth;\n  return percentage * width;\n}\n\nmodule.exports.getLongitudeFromPixel = function(width, boundingBox, tileBoundingBox, pixel) {\n  var boxWidth = tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude;\n  var percentage = pixel / width;\n  var offset = percentage * boxWidth;\n  return offset + boundingBox.minLongitude;\n}\n\nmodule.exports.getYPixel = function(height, boundingBox, latitude) {\n  var boxHeight = boundingBox.maxLatitude - boundingBox.minLatitude;\n  var offset = boundingBox.maxLatitude - latitude;\n  var percentage = offset / boxHeight;\n  return percentage * height;\n}\n\nmodule.exports.getLatitudeFromPixel = function(height, boundingBox, tileBoundingBox, pixel) {\n  var boxHeight = tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude;\n  var percentage = pixel / height;\n  var offset = percentage * boxHeight;\n  return boundingBox.maxLatitude - offset;\n}\n\n},{\"../boundingBox\":7,\"./tileGrid\":94,\"proj4\":285}],94:[function(require,module,exports){\n\n/**\n * Tile grid with x and y ranges\n * @module tiles/tileGrid\n * @class\n */\nvar TileGrid = function(minX, maxX, minY, maxY) {\n  this.min_x = minX;\n  this.max_x = maxX;\n  this.min_y = minY;\n  this.max_y = maxY;\n}\n\nTileGrid.prototype.count = function () {\n  return ((this.max_x + 1) - this.min_x) * ((this.max_y + 1) - this.min_y);\n};\n\nTileGrid.prototype.equals = function (tileGrid) {\n  if (!tileGrid) return false;\n  return this.min_x === tileGrid.min_x\n    && this.max_x === tileGrid.max_x\n    && this.min_y === tileGrid.min_y\n    && this.max_y === tileGrid.max_y;\n};\n\nmodule.exports = TileGrid;\n\n},{}],95:[function(require,module,exports){\n/**\n * @module tiles/user/tileColumn\n */\n\nconst UserColumn = require('../../user/userColumn');\nconst DataTypes = require('../../db/dataTypes');\nconst util = require('util');\n\n/**\n * `TileColumn` models columns in [user tile pyramid tables]{@link module:tiles/user/tileTable~TileTable}.\n *\n * @class\n * @extends {module:user/userColumn~UserColumn}\n */\nvar TileColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) {\n  UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);\n  if (dataType === DataTypes.GPKG_DT_GEOMETRY) {\n    throw new Error('Data Type is required to create column: ' + name);\n  }\n}\n\nutil.inherits(TileColumn, UserColumn);\n\n/**\n * Create an id column\n * @param  {number} index Index\n */\nTileColumn.createIdColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, false, null, true);\n}\n\n/**\n * Create a zoom level column\n * @param  {number} index Index\n */\nTileColumn.createZoomLevelColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_ZOOM_LEVEL, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);\n}\n\n/**\n *  Create a tile column column\n *\n *  @param {number} index column index\n */\nTileColumn.createTileColumnColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_TILE_COLUMN, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);\n}\n\n/**\n *  Create a tile row column\n *\n *  @param {number} index column index\n *\n */\nTileColumn.createTileRowColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_TILE_ROW, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false);\n}\n\n/**\n *  Create a tile data column\n *\n *  @param {number} index column index\n */\nTileColumn.createTileDataColumn = function(index) {\n  return new TileColumn(index, TileColumn.COLUMN_TILE_DATA, DataTypes.GPKGDataType.GPKG_DT_BLOB, null, true, null, false);\n}\n\nTileColumn.COLUMN_ID = \"id\";\nTileColumn.COLUMN_ZOOM_LEVEL = \"zoom_level\";\nTileColumn.COLUMN_TILE_COLUMN = \"tile_column\";\nTileColumn.COLUMN_TILE_ROW = \"tile_row\";\nTileColumn.COLUMN_TILE_DATA = \"tile_data\";\n\nmodule.exports = TileColumn;\n\n},{\"../../db/dataTypes\":14,\"../../user/userColumn\":105,\"util\":343}],96:[function(require,module,exports){\n/**\n * tileDao module.\n * @module tiles/user/tileDao\n */\n\nvar UserDao = require('../../user/userDao')\n  , TileGrid = require('../tileGrid')\n  , TileRow = require('./tileRow')\n  , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao\n  , TileMatrixDao = require('../matrix').TileMatrixDao\n  , ContentsDao = require('../../core/contents').ContentsDao\n  , BoundingBox = require('../../boundingBox')\n  , BoundingBoxUtils = require('../tileBoundingBoxUtils')\n  , BoundingBox = require('../../boundingBox')\n  , ColumnValues = require('../../dao/columnValues')\n  , TileColumn = require('./tileColumn')\n  , TileDaoUtils = require('./tileDaoUtils');\n\nvar util = require('util')\n  , proj4 = require('proj4');\n\nproj4 = 'default' in proj4 ? proj4['default'] : proj4;\n\n/**\n * `TileDao` is a {@link module:dao/dao~Dao} subclass for reading\n * [user tile tables]{@link module:tiles/user/tileTable~TileTable}.\n *\n * @class TileDao\n * @extends {module:user/userDao~UserDao}\n * @param  {GeoPackageConnection} connection\n * @param  {TileTable} table\n * @param  {TileMatrixSet} tileMatrixSet\n * @param  {TileMatrix[]} tileMatrices\n */\nvar TileDao = function(geoPackage, table, tileMatrixSet, tileMatrices) {\n  UserDao.call(this, geoPackage, table);\n\n  this.tileMatrixSet = tileMatrixSet;\n  this.tileMatrices = tileMatrices;\n  this.zoomLevelToTileMatrix = [];\n  this.widths = [];\n  this.heights = [];\n\n  if (tileMatrices.length === 0) {\n    this.minZoom = 0;\n    this.maxZoom = 0;\n  } else {\n    this.minZoom = this.tileMatrices[0].zoom_level;\n    this.maxZoom = this.tileMatrices[this.tileMatrices.length-1].zoom_level;\n  }\n\n  // Populate the zoom level to tile matrix and the sorted tile widths and heights\n  for (var i = this.tileMatrices.length-1; i >= 0; i--) {\n    var tileMatrix = this.tileMatrices[i];\n    this.zoomLevelToTileMatrix[tileMatrix.zoom_level] = tileMatrix;\n  }\n\n  this.initialize();\n}\n\nutil.inherits(TileDao, UserDao);\n\nTileDao.prototype.initialize = function() {\n  var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();\n  this.srs = tileMatrixSetDao.getSrs(this.tileMatrixSet);\n  this.projection = this.srs.organization.toUpperCase() + ':' + this.srs.organization_coordsys_id;\n\n  // Populate the zoom level to tile matrix and the sorted tile widths and heights\n  for (var i = this.tileMatrices.length-1; i >= 0; i--) {\n    var tileMatrix = this.tileMatrices[i];\n\n    var width = tileMatrix.pixel_x_size * tileMatrix.tile_width;\n    var height = tileMatrix.pixel_y_size * tileMatrix.tile_height;\n    var proj4Projection = proj4(this.projection);\n    if (proj4Projection.to_meter) {\n      width = proj4Projection.to_meter * tileMatrix.pixel_x_size * tileMatrix.tile_width;\n      height = proj4Projection.to_meter * tileMatrix.pixel_y_size * tileMatrix.tile_height;\n    }\n    this.widths.push(width);\n    this.heights.push(height);\n  }\n  this.setWebMapZoomLevels();\n}\n\nTileDao.prototype.webZoomToGeoPackageZoom = function(webZoom) {\n  var webMercatorBoundingBox = BoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(0, 0, webZoom);\n  return this.determineGeoPackageZoomLevel(webMercatorBoundingBox, webZoom);\n}\n\nTileDao.prototype.setWebMapZoomLevels = function() {\n  this.minWebMapZoom = 20;\n  this.maxWebMapZoom = 0;\n\n  this.webZoomToGeoPackageZooms = {};\n\n  var totalTileWidth = this.tileMatrixSet.max_x - this.tileMatrixSet.min_x;\n  var totalTileHeight = this.tileMatrixSet.max_y - this.tileMatrixSet.min_y;\n  for (var i = 0; i < this.tileMatrices.length; i++) {\n    var tileMatrix = this.tileMatrices[i];\n    var singleTileWidth = totalTileWidth / tileMatrix.matrix_width;\n    var singleTileHeight = totalTileHeight / tileMatrix.matrix_height;\n    var tileBox = new BoundingBox(this.tileMatrixSet.min_x, this.tileMatrixSet.min_x + singleTileWidth, this.tileMatrixSet.min_y, this.tileMatrixSet.min_y + singleTileHeight);\n    var proj4Projection = proj4(this.projection, 'EPSG:4326');\n    var ne = proj4Projection.forward([tileBox.maxLongitude, tileBox.maxLatitude]);\n    var sw = proj4Projection.forward([tileBox.minLongitude, tileBox.minLatitude]);\n    var width = (ne[0] - sw[0]);\n    var height = (ne[1] - sw[1]);\n    var zoom = Math.ceil(Math.log2(360/width));\n    if (this.minWebMapZoom > zoom) {\n      this.minWebMapZoom = zoom;\n    }\n    if (this.maxWebMapZoom < zoom) {\n      this.maxWebMapZoom = zoom;\n    }\n    this.webZoomToGeoPackageZooms[zoom] = tileMatrix.zoom_level;\n  }\n}\n\nTileDao.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) {\n  return this.webZoomToGeoPackageZooms[zoom];\n};\n\n/**\n * Get the bounding box of tiles at the zoom level\n * @param  {Number} zoomLevel zoom level\n * @return {BoundingBox}           bounding box of the zoom level, or null if no tiles\n */\nTileDao.prototype.getBoundingBoxWithZoomLevel = function (zoomLevel) {\n  var boundingBox;\n\n  var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel);\n  if (tileMatrix) {\n    var tileGrid = this.queryForTileGridWithZoomLevel(zoomLevel);\n    if (tileGrid) {\n      var matrixSetBoundingBox = this.getBoundingBox();\n      boundingBox = BoundingBoxUtils.getTileGridBoundingBox(matrixSetBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, tileGrid);\n    }\n    return boundingBox;\n  } else {\n    return boundingBox;\n  }\n};\n\nTileDao.prototype.getBoundingBox = function () {\n  return this.tileMatrixSet.getBoundingBox();\n};\n\nTileDao.prototype.queryForTileGridWithZoomLevel = function (zoomLevel) {\n  var where = this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  var whereArgs = this.buildWhereArgs(zoomLevel);\n  var minX = this.minOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs);\n  var maxX = this.maxOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs);\n  var minY = this.minOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs);\n  var maxY = this.maxOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs);\n  var tileGrid;\n  if (minX != null && minY != null && maxX != null && maxY != null) {\n    tileGrid = new TileGrid(minX, maxX, minY, maxY);\n  }\n  return tileGrid;\n};\n\n/**\n * Get the tile grid of the zoom level\n * @param  {Number} zoomLevel zoom level\n * @return {TileGrid}           tile grid at zoom level, null if no tile matrix at zoom level\n */\nTileDao.prototype.getTileGridWithZoomLevel = function (zoomLevel) {\n  var tileGrid;\n  var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel);\n  if (tileMatrix) {\n    tileGrid = new TileGrid(0, ~~tileMatrix.matrix_width - 1, 0, ~~tileMatrix.matrix_height - 1);\n  }\n  return tileGrid;\n};\n\n/**\n * get the tile table\n * @return {TileTable} tile table\n */\nTileDao.prototype.getTileTable = function () {\n  return this.table;\n};\n\n/**\n * Create a new tile row with the column types and values\n * @param  {Array} columnTypes column types\n * @param  {Array} values      values\n * @return {TileRow}             tile row\n */\nTileDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new TileRow(this.getTileTable(), columnTypes, values);\n};\n\n/**\n * Create a new tile row\n * @return {TileRow} tile row\n */\nTileDao.prototype.newRow = function () {\n  return new TileRow(this.getTileTable());\n};\n\n/**\n * Adjust the tile matrix lengths if needed. Check if the tile matrix width\n * and height need to expand to account for pixel * number of pixels fitting\n * into the tile matrix lengths\n */\nTileDao.prototype.adjustTileMatrixLengths = function () {\n  TileDaoUtils.adjustTileMatrixLengths(this.tileMatrixSet, this.tileMatrices);\n};\n\n/**\n * Get the tile matrix at the zoom level\n * @param  {Number} zoomLevel zoom level\n * @return {TileMatrix}           tile matrix\n */\nTileDao.prototype.getTileMatrixWithZoomLevel = function (zoomLevel) {\n  return this.zoomLevelToTileMatrix[zoomLevel];\n};\n\n/**\n * Query for a tile\n * @param  {Number} column    column\n * @param  {Number} row       row\n * @param  {Number} zoomLevel zoom level\n * @param {Function}           callback called with an error if one occurred and the TileDao\n */\nTileDao.prototype.queryForTile = function (column, row, zoomLevel) {\n  var fieldValues = new ColumnValues();\n  fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column);\n  fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row);\n  fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  var tileRow;\n  for (var row of this.queryForFieldValues(fieldValues)) {\n    tileRow = this.getRow(row);\n  }\n  return tileRow;\n};\n\nTileDao.prototype.queryForTilesWithZoomLevel = function (zoomLevel, tileCallback) {\n  var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  var thisgetRow = this.getRow.bind(this);\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        return {\n          value: thisgetRow(nextRow.value),\n          done: false\n        };\n      }\n      return {\n        done: true\n      }\n    }.bind(this)\n  }\n};\n\n/**\n * Query for Tiles at a zoom level in descending row and column order\n * @param  {Number} zoomLevel    zoom level\n * @param  {Function} tileCallback callback for each tile\n * @param  {Function} doneCallback called when all tiles are retrieved\n */\nTileDao.prototype.queryForTilesDescending = function (zoomLevel, tileCallback) {\n  var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel, undefined, undefined, TileColumn.COLUMN_TILE_COLUMN + ' DESC, ' + TileColumn.COLUMN_TILE_ROW + ', DESC');\n\n  var thisgetRow = this.getRow.bind(this);\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        return {\n          value: thisgetRow(nextRow.value),\n          done: false\n        };\n      }\n      return {\n        done: true\n      }\n    }.bind(this)\n  };\n};\n\n/**\n * Query for tiles at a zoom level and column\n * @param  {Number} column       column\n * @param  {Number} zoomLevel    zoom level\n * @param  {Function} tileCallback called for each tile\n * @param  {Function} doneCallback called when all tiles have been retrieved\n */\nTileDao.prototype.queryForTilesInColumn = function (column, zoomLevel, tileCallback) {\n  var fieldValues = new ColumnValues();\n  fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column);\n  fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n\n  var iterator = this.queryForFieldValues(fieldValues);\n  var thisgetRow = this.getRow.bind(this);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var tileRow = thisgetRow(nextRow.value);\n\n        return {\n          value: tileRow,\n          done: false\n        };\n      } else {\n        return {\n          done: true\n        }\n      }\n    }\n  }\n};\n\n/**\n * Query for tiles at a zoom level and row\n * @param  {Number} row       row\n * @param  {Number} zoomLevel    zoom level\n * @param  {Function} tileCallback called for each tile\n * @param  {Function} doneCallback called when all tiles have been retrieved\n */\nTileDao.prototype.queryForTilesInRow = function (row, zoomLevel, tileCallback, doneCallback) {\n  var fieldValues = new ColumnValues();\n  fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row);\n  fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n\n  var iterator = this.queryForFieldValues(fieldValues);\n  var thisgetRow = this.getRow.bind(this);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var tileRow = thisgetRow(nextRow.value);\n\n        return {\n          value: tileRow,\n          done: false\n        };\n      } else {\n        return {\n          done: true\n        }\n      }\n    }\n  }\n};\n\n/**\n * Query by tile grid and zoom level\n * @param  {TileGrid} tileGrid  tile grid\n * @param  {Number} zoomLevel zoom level\n * @param  {Function} tileCallback called for each tile\n * @param  {Function} doneCallback called when all tiles have been retrieved\n */\nTileDao.prototype.queryByTileGrid = function (tileGrid, zoomLevel) {\n  if (!tileGrid) return doneCallback();\n  var tileCount = 0;\n  var x = tileGrid.min_x;\n\n  var where = '';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.min_x, '>=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.max_x, '<=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.min_y, '>=');\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.max_y, '<=');\n  var whereArgs = this.buildWhereArgs([zoomLevel, tileGrid.min_x, tileGrid.max_x, tileGrid.min_y, tileGrid.max_y]);\n\n  var iterator = this.queryWhereWithArgsDistinct(where, whereArgs);\n  var thisgetRow = this.getRow.bind(this);\n\n  return {\n    [Symbol.iterator]() {\n      return this;\n    },\n    next: function() {\n      var nextRow = iterator.next();\n      if (!nextRow.done) {\n        var tileRow = thisgetRow(nextRow.value);\n\n        return {\n          value: tileRow,\n          done: false\n        };\n      } else {\n        return {\n          done: true\n        }\n      }\n    }\n  }\n};\n\nTileDao.prototype.deleteTile = function(column, row, zoomLevel) {\n  var where = '';\n\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel);\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, column);\n  where += ' and ';\n  where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, row);\n\n  var whereArgs = this.buildWhereArgs([zoomLevel, column, row]);\n\n  return this.deleteWhere(where, whereArgs);\n};\n\nTileDao.prototype.getSrs = function() {\n  return this.geoPackage.getContentsDao().getSrs(this.tileMatrixSet);\n};\n\nTileDao.prototype.dropTable = function() {\n  var tileMatrixDao = this.geoPackage.getTileMatrixDao();\n  var dropResult = UserDao.prototype.dropTable.call(this);\n\n  var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();\n  tileMatrixSetDao.delete(this.tileMatrixSet);\n\n  for (var i = this.tileMatrices.length-1; i >= 0; i--) {\n    var tileMatrix = this.tileMatrices[i];\n    tileMatrixDao.delete(tileMatrix);\n  }\n\n  var dao = this.geoPackage.getContentsDao();\n  dao.deleteById(this.gpkgTableName);\n  return dropResult;\n}\n\nTileDao.prototype.rename = function(newName) {\n  UserDao.prototype.rename.call(this, newName);\n\n  var oldName = this.tileMatrixSet.table_name;\n\n  var values = {};\n  values[TileMatrixSetDao.COLUMN_TABLE_NAME] = newName;\n\n  var where = this.buildWhereWithFieldAndValue(TileMatrixSetDao.COLUMN_TABLE_NAME, oldName);\n  var whereArgs = this.buildWhereArgs([oldName]);\n\n  var contentsDao = this.geoPackage.getContentsDao();\n  var contents = contentsDao.queryForId(oldName);\n  contents.table_name = newName;\n  contents.identifier = newName;\n  contentsDao.create(contents);\n\n  var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao();\n  tileMatrixSetDao.updateWithValues(values, where, whereArgs);\n\n  var tileMatrixDao = this.geoPackage.getTileMatrixDao();\n  var tileMatrixUpdate = {};\n  tileMatrixUpdate[TileMatrixDao.COLUMN_TABLE_NAME] = newName;\n  var tileMatrixWhere = this.buildWhereWithFieldAndValue(TileMatrixDao.COLUMN_TABLE_NAME, oldName);\n\n  tileMatrixDao.updateWithValues(tileMatrixUpdate, tileMatrixWhere, whereArgs);\n\n  contentsDao.deleteById(oldName);\n}\n\nmodule.exports = TileDao;\n\n},{\"../../boundingBox\":7,\"../../core/contents\":8,\"../../dao/columnValues\":10,\"../../user/userDao\":106,\"../matrix\":90,\"../matrixset\":91,\"../tileBoundingBoxUtils\":93,\"../tileGrid\":94,\"./tileColumn\":95,\"./tileDaoUtils\":97,\"./tileRow\":98,\"proj4\":285,\"util\":343}],97:[function(require,module,exports){\n\nmodule.exports.adjustTileMatrixLengths = function(tileMatrixSet, tileMatrices) {\n  var tileMatrixWidth = tileMatrixSet.maxX - tileMatrixSet.minX;\n  var tileMatrixHeight = tileMatrixSet.maxY - tileMatrixSet.minY;\n  for (var i = 0; i < tileMatrices.length; i++) {\n    var tileMatrix = tileMatrices[i];\n    var tempMatrixWidth = ~~((tileMatrixWidth / (tileMatrix.pixelXSize * ~~tileMatrix.tileWidth)));\n    var tempMatrixHeight = ~~((tileMatrixHeight / (tileMatrix.pixelYSize * ~~(tileMatrix.tileHeight))));\n    if(tempMatrixWidth > ~~(tileMatrix.matrixWidth)) {\n      tileMatrix.matrixWidth = ~~(tempMatrixWidth);\n    }\n    if (tempMatrixHeight > ~~(tileMatrix.matrixHeight)) {\n      tileMatrix.matrixHeight = ~~(tempMatrixHeight);\n    }\n  }\n}\n\n},{}],98:[function(require,module,exports){\n/**\n * tileRow module.\n * @module tiles/user/tileRow\n */\n\nvar UserRow = require('../../user/userRow');\n\nvar util = require('util');\n\n/**\n * Tile Row containing the values from a single result set row\n * @param  {TileTable} tileTable tile table\n * @param  {Array} columnTypes  column types\n * @param  {Array} values       values\n */\nvar TileRow = function(tileTable, columnTypes, values) {\n  UserRow.call(this, tileTable, columnTypes, values);\n  this.tileTable = tileTable;\n}\n\nutil.inherits(TileRow, UserRow);\n\nTileRow.prototype.toObjectValue = function (value) {\n  return value;\n};\n\nTileRow.prototype.toDatabaseValue = function (columnName) {\n  return this.getValueWithColumnName(columnName);\n};\n\n/**\n * Get the zoom level column index\n * @return {Number} zoom level column index\n */\nTileRow.prototype.getZoomLevelColumnIndex = function () {\n  return this.tileTable.zoomLevelIndex;\n};\n\n/**\n * Get the zoom level column\n * @return {TileColumn} zoom level column\n */\nTileRow.prototype.getZoomLevelColumn = function() {\n  return this.tileTable.getZoomLevelColumn();\n}\n\n/**\n * Get the zoom level\n * @return {Number} zoom level\n */\nTileRow.prototype.getZoomLevel = function () {\n  return this.getValueWithColumnName(this.getZoomLevelColumn().name);\n};\n\n/**\n * Set the zoom level\n * @param {Number} zoomLevel zoom level\n */\nTileRow.prototype.setZoomLevel = function (zoomLevel) {\n  this.setValueWithIndex(this.getZoomLevelColumnIndex(), zoomLevel);\n};\n\n/**\n * Get the tile column column Index\n * @return {number} tile column column index\n */\nTileRow.prototype.getTileColumnColumnIndex = function () {\n  return this.tileTable.tileColumnIndex;\n};\n\n/**\n * Get the tile column column\n * @return {TileColumn} tile column column\n */\nTileRow.prototype.getTileColumnColumn = function () {\n  return this.tileTable.getTileColumnColumn();\n};\n\n/**\n * Get the tile column\n * @return {Number} tile column\n */\nTileRow.prototype.getTileColumn = function () {\n  return this.getValueWithColumnName(this.getTileColumnColumn().name);\n};\n\n/**\n * Set the tile column\n * @param {number} tileColumn tile column\n */\nTileRow.prototype.setTileColumn = function (tileColumn) {\n  this.setValueWithColumnName(this.getTileColumnColumn().name, tileColumn);\n};\n\n/**\n * Get the tile row column index\n * @return {Number} tile row column index\n */\nTileRow.prototype.getRowColumnIndex = function () {\n  return this.tileTable.tileRowIndex;\n};\n\n/**\n * Get the tile row column\n * @return {TileColumn} tile row column\n */\nTileRow.prototype.getRowColumn = function () {\n  return this.tileTable.getRowColumn();\n};\n\n/**\n * Get the tile row\n * @return {Number} tile row\n */\nTileRow.prototype.getRow = function () {\n  return this.getValueWithColumnName(this.getRowColumn().name);\n};\n\n/**\n * Set the tile row\n * @param {Number} tileRow tile row\n */\nTileRow.prototype.setTileRow = function (tileRow) {\n  this.setValueWithColumnName(this.getRowColumn().name, tileRow);\n};\n\n/**\n * Get the tile data column index\n * @return {Number} tile data column index\n */\nTileRow.prototype.getTileDataColumnIndex = function () {\n  return this.tileTable.tileDataIndex;\n};\n\n/**\n * Get the tile data column\n * @return {TileColumn} tile data column\n */\nTileRow.prototype.getTileDataColumn = function () {\n  return this.tileTable.getTileDataColumn();\n};\n\n/**\n * Get the tile data\n * @return {Buffer} tile data\n */\nTileRow.prototype.getTileData = function () {\n  return this.getValueWithColumnName(this.getTileDataColumn().name);\n};\n\n/**\n * Set the tile data\n * @param {Buffer} tileData tile data\n */\nTileRow.prototype.setTileData = function (tileData) {\n  this.setValueWithColumnName(this.getTileDataColumn().name, tileData);\n};\n\n/**\n * Get the tile data as an image\n * @return {image} tile image\n */\nTileRow.prototype.getTileDataImage = function () {\n  // TODO\n};\n\n\n// /**\n//  *  Get the tile data as a scaled image\n//  *\n//  *  @param scale scale, 0.0 to 1.0\n//  *\n//  *  @return tile image\n//  */\n// -(UIImage *) getTileDataImageWithScale: (CGFloat) scale;\n//\n// /**\n//  *  Set the tile data with an image\n//  *\n//  *  @param image  image\n//  *  @param format image format\n//  */\n// -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format;\n//\n// /**\n//  *  Set the tile data with an image\n//  *\n//  *  @param image  image\n//  *  @param format image format\n//  *  @param quality compression quality, 0.0 to 1.0, used only for GPKG_CF_JPEG\n//  */\n// -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format andQuality: (CGFloat) quality;\n\n\nmodule.exports = TileRow;\n\n},{\"../../user/userRow\":107,\"util\":343}],99:[function(require,module,exports){\n/**\n * @module tiles/user/tileTable\n */\n\nconst UserTable = require('../../user/userTable');\nconst TileColumn = require('./tileColumn');\nconst util = require('util');\n\n/**\n * `TileTable` models [tile pyramid user tables](https://www.geopackage.org/spec121/index.html#tiles_user_tables).\n *\n * @class\n * @extends {module:user/userTable~UserTable}\n * @param {string} tableName\n * @param {module:tiles/user/tileColumn~TileColumn[]} columns\n */\nvar TileTable = module.exports = function(tableName, columns) {\n  UserTable.call(this, tableName, columns);\n\n  var zoomLevel;\n  var tileColumn;\n  var tileRow;\n  var tileData;\n  var uniqueColumns = [];\n\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    var columnName = column.name;\n    var columnIndex = column.index;\n\n    switch(columnName) {\n      case TileColumn.COLUMN_ZOOM_LEVEL:\n      this.duplicateCheck(columnIndex, zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL);\n      zoomLevel = columnIndex;\n      uniqueColumns.push(column);\n      break;\n      case TileColumn.COLUMN_TILE_COLUMN:\n      this.duplicateCheck(columnIndex, tileColumn, TileColumn.COLUMN_TILE_COLUMN);\n      tileColumn = columnIndex;\n      uniqueColumns.push(column);\n      break;\n      case TileColumn.COLUMN_TILE_ROW:\n      this.duplicateCheck(columnIndex, tileRow, TileColumn.COLUMN_TILE_ROW);\n      tileRow = columnIndex;\n      uniqueColumns.push(column);\n      break;\n      case TileColumn.COLUMN_TILE_DATA:\n      this.duplicateCheck(columnIndex, tileData, TileColumn.COLUMN_TILE_DATA);\n      tileData = columnIndex;\n      break;\n    }\n  }\n\n  this.uniqueConstraints = [{columns: uniqueColumns}];\n\n  this.missingCheck(zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL);\n  this.zoomLevelIndex = zoomLevel;\n\n  this.missingCheck(tileColumn, TileColumn.COLUMN_TILE_COLUMN);\n  this.tileColumnIndex = tileColumn;\n\n  this.missingCheck(tileRow, TileColumn.COLUMN_TILE_ROW);\n  this.tileRowIndex = tileRow;\n\n  this.missingCheck(tileData, TileColumn.COLUMN_TILE_DATA);\n  this.tileDataIndex = tileData;\n}\n\nutil.inherits(TileTable, UserTable);\n\nTileTable.prototype.getZoomLevelColumn = function() {\n  return this.getColumnWithIndex(this.zoomLevelIndex);\n};\n\nTileTable.prototype.getTileColumnColumn = function() {\n  return this.getColumnWithIndex(this.tileColumnIndex);\n};\n\nTileTable.prototype.getRowColumn = function() {\n  return this.getColumnWithIndex(this.tileRowIndex);\n};\n\nTileTable.prototype.getTileDataColumn = function() {\n  return this.getColumnWithIndex(this.tileDataIndex);\n};\n\nTileTable.prototype.getTableType = function() {\n  return UserTable.TILE_TABLE;\n}\n\nTileTable.createRequiredColumns = function() {\n  return TileTable.createRequiredColumnsWithStartingIndex(0);\n}\n\nTileTable.createRequiredColumnsWithStartingIndex = function(startingIndex) {\n  var columns = [];\n  columns.push(TileColumn.createIdColumn(startingIndex++));\n  columns.push(TileColumn.createZoomLevelColumn(startingIndex++));\n  columns.push(TileColumn.createTileColumnColumn(startingIndex++));\n  columns.push(TileColumn.createTileRowColumn(startingIndex++));\n  columns.push(TileColumn.createTileDataColumn(startingIndex++));\n  return columns;\n}\n\n},{\"../../user/userTable\":108,\"./tileColumn\":95,\"util\":343}],100:[function(require,module,exports){\n/**\n * tileTableReader module.\n * @module tiles/user/tileTableReader\n */\n\nvar UserTableReader = require('../../user/userTableReader')\n  , DataTypes = require('../../db/dataTypes')\n  , TileMatrixSet = require('../matrixset').TileMatrixSet\n  , TileTable = require('./tileTable')\n  , TileColumn = require('./tileColumn');\n\nvar util = require('util');\n\n/**\n* Reads the metadata from an existing tile table\n* @class TileTableReader\n* @extends {module:user~UserTableReader}\n*/\nvar TileTableReader = function(tileMatrixSet) {\n  UserTableReader.call(this, tileMatrixSet.table_name);\n  this.tileMatrixSet = tileMatrixSet;\n}\n\nutil.inherits(TileTableReader, UserTableReader);\n\nTileTableReader.prototype.readTileTable = function (geoPackage) {\n  return this.readTable(geoPackage.getDatabase());\n};\n\nTileTableReader.prototype.createTable = function (tableName, columns) {\n  return new TileTable(tableName, columns);\n};\n\nTileTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValueIndex, primaryKey) {\n  var dataType = DataTypes.fromName(type);\n  var defaultValue = undefined;\n  if (defaultValueIndex) {\n    // console.log('default value index', defaultValueIndex);\n    // console.log('result', results);\n  }\n  var column = new TileColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);\n\n  return column;\n};\n\n/**\n * The TileTableReader\n * @type {TileTableReader}\n */\nmodule.exports = TileTableReader;\n\n},{\"../../db/dataTypes\":14,\"../../user/userTableReader\":109,\"../matrixset\":91,\"./tileColumn\":95,\"./tileTable\":99,\"util\":343}],101:[function(require,module,exports){\n/**\n * @module user/custom\n */\n\nvar util = require('util');\n\nvar UserColumn = require('../userColumn')\n  , DataTypes = require('../../db/dataTypes')\n\n/**\n * Create a new user custom columnd\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} dataType  data type\n *  @param {Number} max max value\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *  @param {Boolean} primaryKey primary key\n */\nvar UserCustomColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) {\n  UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey);\n  if (dataType == null) {\n    throw new Error('Data type is required to create column: ' + name);\n  }\n}\n\nutil.inherits(UserCustomColumn, UserColumn);\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Number} max max value\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return {module:user/custom~UserCustomColumn} created column\n */\nUserCustomColumn.createColumn = function(index, name, dataType, max, notNull, defaultValue) {\n  return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, false);\n}\n\nmodule.exports = UserCustomColumn;\n\n},{\"../../db/dataTypes\":14,\"../userColumn\":105,\"util\":343}],102:[function(require,module,exports){\n/**\n * @module user/custom\n */\nvar util = require('util');\n\nvar UserDao = require('../userDao')\n  , UserRow = require('../userRow')\n  , UserCustomTableReader = require('./userCustomTableReader');\n\n/**\n * User Custom Dao\n * @class\n * @extends module:user/userDao~UserDao\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @param  {module:user/custom~UserCustomTable} userCustomTable user custom table\n */\nvar UserCustomDao = function(geoPackage, userCustomTable) {\n  UserDao.call(this, geoPackage, userCustomTable);\n}\n\nutil.inherits(UserCustomDao, UserDao);\n\n/**\n * Create a new UserRow\n * @return {module:user/userRow~UserRow}\n */\nUserCustomDao.prototype.newRow = function() {\n  return new UserRow(this.table);\n}\n\n/**\n * Reads the table specified from the geopackage\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @param  {string} tableName       table name\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/custom~UserCustomDao}\n */\nUserCustomDao.readTable = function(geoPackage, tableName, requiredColumns) {\n  var reader = new UserCustomTableReader(tableName, requiredColumns);\n  var userCustomTable = reader.readTable(geoPackage.getDatabase());\n  return new UserCustomDao(geoPackage, userCustomTable);\n}\n\nmodule.exports = UserCustomDao;\n\n},{\"../userDao\":106,\"../userRow\":107,\"./userCustomTableReader\":104,\"util\":343}],103:[function(require,module,exports){\n/**\n * @module user/custom\n */\nvar util = require('util');\n\nvar UserTable = require('../userTable');\n\n/**\n * Create a new user custom table\n * @class\n * @extends module:user/userTable~UserTable\n * @param  {string} tableName       table name\n * @param  {module:user/userColumn~UserColumn[]} columns         user columns\n * @param  {string[]} requiredColumns required columns\n */\nvar UserCustomTable = function(tableName, columns, requiredColumns) {\n  UserTable.call(this, tableName, columns);\n  if (requiredColumns && requiredColumns.length) {\n    var found = {};\n    for (var i = 0; i < columns.length; i++) {\n      var column = columns[i];\n      if (requiredColumns.indexOf(column.name) !== -1) {\n        var previousIndex = found[column.name];\n        this.duplicateCheck(column.index, previousIndex, column.name);\n        found[column.name] = column.index;\n      }\n    }\n    for (var i = 0; i < requiredColumns.length; i++) {\n      this.missingCheck(found[requiredColumns[i]], requiredColumns);\n    }\n  }\n}\n\nutil.inherits(UserCustomTable, UserTable);\n\nmodule.exports = UserCustomTable;\n\n},{\"../userTable\":108,\"util\":343}],104:[function(require,module,exports){\n/**\n * @module user/custom\n */\nvar util = require('util');\n\nvar UserTableReader = require('../userTableReader')\n  , DataTypes = require('../../db/dataTypes')\n  , UserCustomColumn = require('./userCustomColumn')\n  , UserCustomTable = require('./userCustomTable');\n\n/**\n * User custom table reader\n * @class\n * @extends module:user/userTableReader~UserTableReader\n * @param  {string} tableName       table name\n * @param  {string[]} requiredColumns required columns\n */\nvar UserCustomTableReader = function(tableName, requiredColumns) {\n  UserTableReader.call(this, tableName, requiredColumns);\n}\n\nutil.inherits(UserCustomTableReader, UserTableReader);\n\n/**\n * Creates user custom column\n * @param  {string} tableName       table name\n * @param  {module:user/userCustom~UserCustomColumn[]} columnList      columns\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/userCustom~UserCustomTable}\n */\nUserCustomTableReader.prototype.createTable = function(tableName, columnList, requiredColumns) {\n  return new UserCustomTable(tableName, columnList, requiredColumns);\n}\n\n/**\n * Creates a user custom column\n * @param {Object} result\n * @param {Number} index        column index\n * @param {string} name         column name\n * @param {module:db/dataTypes~GPKGDataType} type         data type\n * @param {Number} max max value\n * @param {Boolean} notNull      not null\n * @param {Object} defaultValue default value or nil\n * @param {Boolean} primaryKey primary key\n * @return {module:user/custom~UserCustomColumn}\n */\nUserCustomTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) {\n\n  var dataType = DataTypes.fromName(type);\n  return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);\n}\n\n\nmodule.exports = UserCustomTableReader;\n\n},{\"../../db/dataTypes\":14,\"../userTableReader\":109,\"./userCustomColumn\":101,\"./userCustomTable\":103,\"util\":343}],105:[function(require,module,exports){\n/**\n * @module user/userColumn\n */\n\nvar DataTypes = require('../db/dataTypes');\n\n/**\n * A `UserColumn` is meta-data about a single column from a {@link module:/user/userTable~UserTable}.\n *\n * @class\n * @param {Number} index column index\n * @param {string} name column name\n * @param {module:db/dataTypes~GPKGDataType} dataType data type of the column\n * @param {?Number} max max value\n * @param {Boolean} notNull not null\n * @param {?Object} defaultValue default value or null\n * @param {Boolean} primaryKey `true` if this column is part of the table's primary key\n */\nfunction UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey) {\n  this.index = index;\n  this.name = name;\n  this.dataType = dataType;\n  this.max = max;\n  this.notNull = notNull;\n  this.defaultValue = defaultValue;\n  this.primaryKey = primaryKey;\n  this.validateMax();\n}\n\n/**\n * Gets the type name\n * @return {module:db/dataTypes~GPKGDataType}\n */\nUserColumn.prototype.getTypeName = function () {\n  var type = undefined;\n  if (this.dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) {\n    type = DataTypes.name(this.dataType);\n  }\n  return type;\n};\n\n/**\n * Validate that if max is set, the data type is text or blob\n */\nUserColumn.prototype.validateMax = function () {\n  if(this.max && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_TEXT && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB) {\n    throw new Error('Column max is only supported for TEXT and BLOB columns. column: ' + this.name + ', max: ' + this.max + ', type: ' + this.dataType)\n  }\n};\n\n/**\n *  Create a new primary key column\n *\n *  @param {Number} index column index\n *  @param {string} name  column name\n *\n *  @return {module:user/userColumn~UserColumn} created column\n */\nUserColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) {\n  return new UserColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true);\n}\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return {module:user/userColumn~UserColumn} created column\n */\nUserColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) {\n  return UserColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue);\n}\n\n/**\n *  Create a new column\n *\n *  @param {Number} index        column index\n *  @param {string} name         column name\n *  @param {module:db/dataTypes~GPKGDataType} type         data type\n *  @param {Number} max max value\n *  @param {Boolean} notNull      not null\n *  @param {Object} defaultValue default value or nil\n *\n *  @return {module:user/userColumn~UserColumn} created column\n */\nUserColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) {\n  return new UserColumn(index, name, type, max, notNull, defaultValue, false);\n}\n\nmodule.exports = UserColumn;\n\n},{\"../db/dataTypes\":14}],106:[function(require,module,exports){\n/**\n * UserDao module.\n * @module user/userDao\n */\n\nvar UserRow = require('./userRow')\n  , MediaTable = require('../extension/relatedTables/mediaTable')\n  , SimpleAttributesTable = require('../extension/relatedTables/simpleAttributesTable')\n  , RelationType = require('../extension/relatedTables/relationType')\n  , UserTableReader = require('./userTableReader')\n  , Dao = require('../dao/dao');\n\nvar util = require('util');\n\n/**\n * Abstract User DAO for reading user tables\n * @class UserDao\n * @extends {module:dao/dao~Dao}\n * @param  {module:db/geoPackageConnection~GeoPackageConnection} connection        connection\n * @param  {string} table table name\n */\nvar UserDao = function(geoPackage, table) {\n  Dao.call(this, geoPackage);\n  this.table = table;\n  this.table_name = table.table_name;\n  this.gpkgTableName = table.table_name;\n  if (table.getPkColumn()) {\n    this.idColumns = [table.getPkColumn().name];\n  } else {\n    this.idColumns = [];\n  }\n  this.columns = table.columnNames;\n}\n\nutil.inherits(UserDao, Dao);\n\n/**\n * Reads the table specified from the geopackage\n * @param  {module:geoPackage~GeoPackage} geoPackage      geopackage object\n * @param  {string} tableName       table name\n * @param  {string[]} requiredColumns required columns\n * @return {module:user/userDao~UserDao}\n */\nUserDao.readTable = function(geoPackage, tableName) {\n  var reader = new UserTableReader(tableName);\n  var userTable = reader.readTable(geoPackage.getDatabase());\n  return new UserDao(geoPackage, userTable);\n}\n\n/**\n * Creates a UserRow\n * @param  {Object} [results] results to create the row from if not specified, an empty row is created\n * @return {module:user/userRow~UserRow}\n */\nUserDao.prototype.createObject = function (results) {\n  if (results) {\n    return this.getRow(results);\n  }\n  return this.newRow();\n};\n\n/**\n * Sets the value in the row\n * @param  {module:user/userRow~UserRow} object      user row\n * @param  {Number} columnIndex index\n * @param  {Object} value       value\n */\nUserDao.prototype.setValueInObject = function (object, columnIndex, value) {\n  object.setValueNoValidationWithIndex(columnIndex, value);\n};\n\n/**\n * Get a user row from the current results\n * @param  {Object} results result to create the row from\n * @return {module:user/userRow~UserRow}         the user row\n */\nUserDao.prototype.getRow = function (results) {\n  var row = undefined;\n  if (!this.table) return row;\n  var columns = this.table.columnCount();\n  var columnTypes = {};\n  for (var i = 0; i < columns; i++) {\n    var column = this.table.getColumnWithIndex(i);\n    columnTypes[column.name] = column.dataType;\n  }\n  return this.newRowWithColumnTypes(columnTypes, results);\n};\n\n/**\n * Get the table for this dao\n * @return {module:user/userTable~UserTable}\n */\nUserDao.prototype.getTable = function() {\n  return this.table;\n}\n\n/**\n * Create a user row\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {module:dao/columnValues~ColumnValues[]} values      values\n * @return {module:user/userRow~UserRow}             user row\n */\nUserDao.prototype.newRowWithColumnTypes = function (columnTypes, values) {\n  return new UserRow(this.table, columnTypes, values);\n};\n\n/**\n * Get the projection\n * @return {string} the projection\n */\nUserDao.prototype.getProjection = function () {\n  return this.projection;\n};\n\n/**\n * Links related rows together\n * @param  {module:user/userRow~UserRow} userRow             user row\n * @param  {module:user/userRow~UserRow} relatedRow          related row\n * @param  {string} relationType        relation type\n * @param  {string|module:extension/relatedTables~UserMappingTable} [mappingTable]        mapping table\n * @param  {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values\n * @return {Promise}\n */\nUserDao.prototype.linkRelatedRow = function(userRow, relatedRow, relationType, mappingTable, mappingColumnValues) {\n  var rte = this.geoPackage.getRelatedTablesExtension();\n  var baseTableName = userRow.table.table_name;\n  var relatedTableName = relatedRow.table.table_name;\n  var relationship = rte.getRelationshipBuilder()\n  .setBaseTableName(baseTableName)\n  .setRelatedTableName(relatedTableName)\n  .setRelationType(relationType);\n\n  var mappingTableName;\n  if (!mappingTable || typeof mappingTable === 'string') {\n    var mappingTable = mappingTable || baseTableName + '_' + relatedTableName;\n    relationship.setMappingTableName(mappingTable);\n    mappingTableName = mappingTable;\n  } else {\n    relationship.setUserMappingTable(mappingTable);\n    mappingTableName = mappingTable.table_name;\n  }\n\n  return rte.addRelationship(relationship)\n  .then(function() {\n    var userMappingDao = rte.getMappingDao(mappingTableName);\n    var userMappingRow = userMappingDao.newRow();\n    userMappingRow.setBaseId(userRow.getId());\n    userMappingRow.setRelatedId(relatedRow.getId());\n    for (var column in mappingColumnValues) {\n      userMappingRow.setValueWithColumnName(column, mappingColumnValues[column]);\n    }\n    userMappingDao.create(userMappingRow);\n  });\n}\n\n/**\n * Links a user row to a feature row\n * @param  {module:user/userRow~UserRow} userRow             user row\n * @param  {module:features/user/featureRow~FeatureRow} featureRow          feature row\n * @param  {string|module:extension/relatedTables~UserMappingTable} [mappingTable]        mapping table\n * @param  {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values\n * @return {Promise}\n */\nUserDao.prototype.linkFeatureRow = function(userRow, featureRow, mappingTable, mappingColumnValues) {\n  return this.linkRelatedRow(userRow, featureRow, RelationType.FEATURES, mappingTable, mappingColumnValues);\n}\n\n/**\n * Links a user row to a media row\n * @param  {module:user/userRow~UserRow} userRow             user row\n * @param  {module:extension/relatedTables~MediaRow} mediaRow          media row\n * @param  {string|module:extension/relatedTables~UserMappingTable} [mappingTable]        mapping table\n * @param  {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values\n * @return {Promise}\n */\nUserDao.prototype.linkMediaRow = function(userRow, mediaRow, mappingTable, mappingColumnValues) {\n  return this.linkRelatedRow(userRow, mediaRow, RelationType.MEDIA, mappingTable, mappingColumnValues);\n}\n\n/**\n * Links a user row to a simpleAttributes row\n * @param  {module:user/userRow~UserRow} userRow             user row\n * @param  {module:extension/relatedTables~SimpleAttributesRow} simpleAttributesRow          simple attributes row\n * @param  {string|module:extension/relatedTables~UserMappingTable} [mappingTable]        mapping table\n * @param  {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values\n * @return {Promise}\n */\nUserDao.prototype.linkSimpleAttributesRow = function(userRow, simpleAttrbuteRow, mappingTable, mappingColumnValues) {\n  return this.linkRelatedRow(userRow, simpleAttrbuteRow, RelationType.SIMPLE_ATTRIBUTES, mappingTable, mappingColumnValues);\n}\n\n/**\n * Get all media rows that are linked to this user row\n * @param  {module:user/userRow~UserRow} userRow user row\n * @return {module:extension/relatedTables~MediaRow[]}\n */\nUserDao.prototype.getLinkedMedia = function(userRow) {\n  var mediaRelations = this.getMediaRelations();\n  var rte = this.geoPackage.getRelatedTablesExtension();\n  var linkedMedia = [];\n  for (var i = 0; i < mediaRelations.length; i++) {\n    var mediaRelation = mediaRelations[i];\n    var mediaDao = rte.getMediaDao(mediaRelation);\n    var userMappingDao = rte.getMappingDao(mediaRelation.mapping_table_name);\n    var mappings = userMappingDao.queryByBaseId(userRow.getId());\n    for (var m = 0; m < mappings.length; m++) {\n      var relatedId = mappings[m].related_id;\n      linkedMedia.push(mediaDao.queryForId(relatedId));\n    }\n  }\n  return linkedMedia;\n}\n\n/**\n * Get all simple attribute rows that are linked to this user row\n * @param  {module:user/userRow~UserRow} userRow user row\n * @return {module:extension/relatedTables~SimpleAttributeRow[]}\n */\nUserDao.prototype.getLinkedSimpleAttributes = function(userRow) {\n  var simpleRelations = this.getSimpleAttributesRelations();\n  var rte = this.geoPackage.getRelatedTablesExtension();\n  var linkedSimpleAttributes = [];\n  for (var i = 0; i < simpleRelations.length; i++) {\n    var simpleRelation = simpleRelations[i];\n    var simpleDao = rte.getSimpleAttributesDao(simpleRelation);\n    var userMappingDao = rte.getMappingDao(simpleRelation.mapping_table_name);\n    var mappings = userMappingDao.queryByBaseId(userRow.getId());\n    for (var m = 0; m < mappings.length; m++) {\n      var relatedId = mappings[m].related_id;\n      linkedSimpleAttributes.push(simpleDao.queryForId(relatedId));\n    }\n  }\n  return linkedSimpleAttributes;\n}\n\n/**\n * Get all feature rows that are linked to this user row\n * @param  {module:user/userRow~UserRow} userRow user row\n * @return {module:features/user/featureRow~FeatureRow[]}\n */\nUserDao.prototype.getLinkedFeatures = function(userRow) {\n  var featureRelations = this.getFeatureRelations();\n  var rte = this.geoPackage.getRelatedTablesExtension();\n  var linkedFeatures = [];\n  for (var i = 0; i < featureRelations.length; i++) {\n    var featureRelation = featureRelations[i];\n    var featureDao = this.geoPackage.getFeatureDao(featureRelation.base_table_name);\n    var userMappingDao = rte.getMappingDao(featureRelation.mapping_table_name);\n    var mappings = userMappingDao.queryByBaseId(userRow.getId());\n    for (var m = 0; m < mappings.length; m++) {\n      var relatedId = mappings[m].related_id;\n      linkedFeatures.push(featureDao.queryForId(relatedId));\n    }\n  }\n  return linkedFeatures;\n}\n\n/**\n * Get all simple attribute relations to this table\n * @return {Object[]}\n */\nUserDao.prototype.getSimpleAttributesRelations = function() {\n  return this.getRelationsWithName(SimpleAttributesTable.RELATION_TYPE.name);\n}\n\n/**\n * Get all feature relations to this table\n * @return {Object[]}\n */\nUserDao.prototype.getFeatureRelations = function() {\n  return this.getRelationsWithName(RelationType.FEATURES.name);\n}\n\n/**\n * Get all media relations to this table\n * @return {Object[]}\n */\nUserDao.prototype.getMediaRelations = function() {\n  return this.getRelationsWithName(MediaTable.RELATION_TYPE.name);\n}\n\n/**\n * Get all relations to this table with the specified name\n * @param {string} name\n * @return {Object[]}\n */\nUserDao.prototype.getRelationsWithName = function(name) {\n  return this.geoPackage.getExtendedRelationDao().getBaseTableRelationsWithName(this.table_name, name);\n}\n\n/**\n * Get all relations to this table\n * @return {Object[]}\n */\nUserDao.prototype.getRelations = function() {\n  return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(this.table_name);\n}\n\n/**\n * Gets the rows in this table by id\n * @param  {Number[]} ids ids to query for\n * @return {Object[]}\n */\nUserDao.prototype.getRows = function(ids) {\n  var rows = [];\n  for (var i = 0; i < ids.length; i++) {\n    var row = this.queryForId(ids[i]);\n    if (row) {\n      rows.push(row);\n    }\n  }\n  return rows;\n}\n\n/**\n *  Get the approximate zoom level of where the bounding box of the user data fits into the world\n *\n *  @return zoom level\n */\nUserDao.prototype.getZoomLevel = function () {\n  return 0;\n  // if(self.projection == nil){\n  //     [NSException raise:@\"No Projection\" format:@\"No projection was set which is required to determine the zoom level\"];\n  // }\n  // GPKGBoundingBox * boundingBox = [self getBoundingBox];\n  // if([self.projection.epsg intValue] == PROJ_EPSG_WORLD_GEODETIC_SYSTEM){\n  //     boundingBox = [GPKGTileBoundingBoxUtils boundWgs84BoundingBoxWithWebMercatorLimits:boundingBox];\n  // }\n  // GPKGProjectionTransform * webMercatorTransform = [[GPKGProjectionTransform alloc] initWithFromProjection:self.projection andToEpsg:PROJ_EPSG_WEB_MERCATOR];\n  // GPKGBoundingBox * webMercatorBoundingBox = [webMercatorTransform transformWithBoundingBox:boundingBox];\n  // int zoomLevel = [GPKGTileBoundingBoxUtils getZoomLevelWithWebMercatorBoundingBox:webMercatorBoundingBox];\n  // return zoomLevel;\n};\n\n/**\n * Get count of all rows in this table\n * @return {Number}\n */\nUserDao.prototype.getCount = function () {\n  return this.connection.count(this.table_name);\n};\n\nmodule.exports = UserDao;\n\n},{\"../dao/dao\":11,\"../extension/relatedTables/mediaTable\":35,\"../extension/relatedTables/relationType\":36,\"../extension/relatedTables/simpleAttributesTable\":39,\"./userRow\":107,\"./userTableReader\":109,\"util\":343}],107:[function(require,module,exports){\n(function (Buffer){\n/**\n * UserRow module.\n * @module user/userRow\n */\n\nvar DataTypes = require('../db/dataTypes');\n\n/**\n * User Row containing the values from a single result row\n * @class UserRow\n * @param  {UserTable} table       user table\n * @param  {module:db/dataTypes[]} columnTypes  column types\n * @param  {Array} values      values\n */\nvar UserRow = function(table, columnTypes, values) {\n  /**\n   * User table\n   * @type {UserTable}\n   */\n  this.table = table;\n  /**\n   * Column types of this row, based upon the data values\n   * @type {Object}\n   */\n  this.columnTypes = columnTypes;\n  /**\n   * Array of row values\n   * @type {Object}\n   */\n  this.values = values;\n\n  if (!this.columnTypes) {\n    var columnCount = this.table.columnCount();\n    this.columnTypes = {};\n    this.values = {};\n    for (var i = 0; i < columnCount; i++) {\n      this.columnTypes[this.table.columnNames[i]] = this.table.columns[i].dataType;\n      this.values[this.table.columnNames[i]] = this.table.columns[i].defaultValue;\n    }\n  }\n\n}\n\nmodule.exports = UserRow;\n\n/**\n * Get the column count\n * @return {number} column count\n */\nUserRow.prototype.columnCount = function () {\n  return this.table.columnCount();\n};\n\n/**\n * Get the column names\n * @return {Array} column names\n */\nUserRow.prototype.getColumnNames = function () {\n  return this.table.columnNames;\n};\n\n/**\n * Get the column name at the index\n * @param  {Number} index index\n * @return {string}       column name\n */\nUserRow.prototype.getColumnNameWithIndex = function (index) {\n  return this.table.getColumnNameWithIndex(index);\n};\n\n/**\n * Get the column index of the column name\n * @param  {string} columnName column name\n * @return {Number}            column index\n */\nUserRow.prototype.getColumnIndexWithColumnName = function (columnName) {\n  return this.table.getColumnIndex(columnName);\n};\n\n/**\n * Get the value at the index\n * @param  {Number} index index\n * @return {object}       value\n */\nUserRow.prototype.getValueWithIndex = function (index) {\n  var value = this.values[this.getColumnNameWithIndex(index)];\n  if (value !== undefined) {\n    value = this.toObjectValue(index, value);\n  }\n  return value;\n};\n\n/**\n * Get the value of the column name\n * @param  {string} columnName column name\n * @return {Object}            value\n */\nUserRow.prototype.getValueWithColumnName = function (columnName) {\n  var value = this.values[columnName];\n  var dataType = this.getRowColumnTypeWithColumnName(columnName);\n  if (value === undefined || value === null) return value;\n\n  if (dataType === DataTypes.GPKGDataType.BOOLEAN) {\n    return value === 1 ? true : false;\n  } else if (dataType === DataTypes.GPKGDataType.BLOB) {\n    return Buffer.from(value);\n  }\n  return value;\n};\n\nUserRow.prototype.toObjectValue = function (index, value) {\n  var objectValue = value;\n  var column = this.getColumnWithIndex(index);\n  if (column.dataType === DataTypes.GPKGDataType.BOOLEAN && value) {\n    return value === 1 ? true : false;\n  }\n  return objectValue;\n};\n\nUserRow.prototype.toDatabaseValue = function(columnName) {\n  var column = this.getColumnWithColumnName(columnName);\n  var value = this.getValueWithColumnName(columnName);\n  if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) {\n    return value === true ? 1 : 0;\n  }\n\n  return value;\n}\n\n/**\n * Get the row column type at the index\n * @param  {Number} index index\n * @return {Number}       row column type\n */\nUserRow.prototype.getRowColumnTypeWithIndex = function (index) {\n  return this.columnTypes[this.getColumnNameWithIndex(index)];\n};\n\n/**\n * Get the row column type of the column name\n * @param  {string} columnName column name\n * @return {Number}            row column type\n */\nUserRow.prototype.getRowColumnTypeWithColumnName = function (columnName) {\n  return this.columnTypes[columnName];\n};\n\n/**\n * Get the column at the index\n * @param  {Number} index index\n * @return {UserColumn}       column\n */\nUserRow.prototype.getColumnWithIndex = function (index) {\n  return this.table.getColumnWithIndex(index);\n};\n\n/**\n * Get the column of the column name\n * @param  {string} columnName column name\n * @return {UserColumn}            column\n */\nUserRow.prototype.getColumnWithColumnName = function (columnName) {\n  return this.table.getColumnWithColumnName(columnName);\n};\n\n/**\n * Get the id value, which is the value of the primary key\n * @return {Number} id value\n */\nUserRow.prototype.getId = function () {\n  if (this.getPkColumn()) {\n    return this.getValueWithColumnName(this.getPkColumn().name);\n  }\n};\n\n/**\n * Get the primary key column Index\n * @return {Number} pk index\n */\nUserRow.prototype.getPkColumnIndex = function () {\n  return this.table.pkIndex;\n};\n\n/**\n * Get the primary key column\n * @return {UserColumn} pk column\n */\nUserRow.prototype.getPkColumn = function () {\n  return this.table.getPkColumn();\n};\n\n/**\n * Set the value at the index\n * @param {Number} index index\n * @param {object} value value\n */\nUserRow.prototype.setValueWithIndex = function (index, value) {\n  if (index === this.table.pkIndex) {\n    throw new Error('Cannot update the primary key of the row.  Table Name: ' + this.table.tableName + ', Index: ' + index + ', Name: ' + this.table.getPkColumn().name);\n  }\n  this.setValueWithColumnName(this.getColumnNameWithIndex(index), value);\n};\n\n/**\n * Set the value at the index without validation\n * @param {Number} index index\n * @param {Object} value value\n */\nUserRow.prototype.setValueNoValidationWithIndex = function (index, value) {\n  this.values[this.getColumnNameWithIndex(index)] = value;\n};\n\n/**\n * Set the value of the column name\n * @param {string} columnName column name\n * @param {Object} value      value\n */\nUserRow.prototype.setValueWithColumnName = function (columnName, value) {\n  var dataType = this.getRowColumnTypeWithColumnName(columnName);\n  if (dataType === DataTypes.GPKGDataType.BOOLEAN) {\n    value === true ? this.values[columnName] = 1 : this.values[columnName] = 0;\n  } else if (dataType === DataTypes.GPKGDataType.DATE) {\n    this.values[columnName] = value.toISOString().slice(0,10);\n  } else if (dataType === DataTypes.GPKGDataType.DATETIME) {\n    this.values[columnName] = value.toISOString();\n  } else {\n    this.values[columnName] = value;\n  }\n};\n\nUserRow.prototype.hasIdColumn = function() {\n  return this.table.pkIndex !== undefined;\n}\n\nUserRow.prototype.hasId = function() {\n  var hasId = false;\n  if (this.hasIdColumn()) {\n    var objectValue = this.getValueWithIndex(this.table.pkIndex);\n    hasId = objectValue !== null && objectValue !== undefined && typeof objectValue === 'number';\n  }\n  return hasId;\n}\n\n/**\n * Set the primary key id value\n * @param {Number} id id\n */\nUserRow.prototype.setId = function (id) {\n  this.values[this.table.getPkColumn().name] = id;\n};\n\n/**\n * Clears the id so the row can be used as part of an insert or create\n */\nUserRow.prototype.resetId = function () {\n  this.values[this.table.getPkColumn().name] = undefined;\n};\n\n/**\n * Validate the value and its actual value types against eh column data type class\n * @param  {UserColumn} column     column\n * @param  {Object} value      value\n * @param  {Array} valueTypes value types\n */\nUserRow.prototype.validateValueWithColumn = function (column, value, valueTypes) {\n  // TODO implement validation\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"../db/dataTypes\":14,\"buffer\":182}],108:[function(require,module,exports){\n/**\n * @module user/userTable\n */\n\n/**\n * `UserTable` models optional [user data tables](https://www.geopackage.org/spec121/index.html#_options)\n * in a [GeoPackage]{@link module:geoPackage~GeoPackage}.\n *\n * @class\n * @param  {string} tableName table name\n * @param  {module:user/userColumn~UserColumn[]} columns user columns\n */\nvar UserTable = function(tableName, columns) {\n  /**\n   * The name of the table\n   * @type {string}\n   */\n  this.table_name = tableName;\n\n  // Sort the columns by index\n  columns.sort(function(a, b) {\n    return a.index - b.index;\n  });\n\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    if (column.index != i) {\n      throw new Error('Column has wrong index of ' + column.index + ', found at index: ' + i + ', Table Name: ' + this.table_name);\n    }\n  }\n\n  var pk = undefined;\n  var tempColumnNames = new Array();\n  var tempNameToIndex = {};\n\n  for (var i = 0; i < columns.length; i++) {\n    var column = columns[i];\n    var index = column.index;\n    if (column.primaryKey) {\n      if (pk !== undefined) {\n        throw new Error('More than one primary key column was found for table \\'' + this.table_name + '\\'. Index ' + pk + ' and ' + index);\n      }\n      pk = index;\n    }\n    tempColumnNames.push(column.name);\n    tempNameToIndex[column.name] = index;\n  }\n\n  /**\n   * Array of columns\n   * @type {module:user/userColumn~UserColumn[]}\n   */\n  this.columns = columns;\n\n  /**\n   * Array of column names\n   * @type {string[]}\n   */\n  this.columnNames = tempColumnNames;\n\n  /**\n   * Mapping between column names and their index\n   * @type {Object}\n   */\n  this.nameToIndex = tempNameToIndex;\n  this.uniqueConstraints = [];\n\n  /**\n   * Primary key column Index\n   * @type {Number}\n   */\n  this.pkIndex = pk;\n}\n\n/**\n * Check for duplicate column names\n * @param  {Number} index         index\n * @param  {Number} previousIndex previous index\n * @param  {string} column        column\n * @throws Throws an error if previous index is not undefined\n */\nUserTable.prototype.duplicateCheck = function (index, previousIndex, column) {\n  if(previousIndex !== undefined) {\n    throw new Error('More than one ' + column + ' column was found for table \\'' + this.table_name + '\\'. Index ' + previousIndex + ' and ' + index);\n  }\n};\n\n/**\n * Check for the expected data type\n * @param  {module:db/dataTypes~GPKGDataType} expected expected data type\n * @param  {module:user/userColumn~UserColumn} column   column\n * @throws Will throw an error if the actual column type does not match the expected column type\n */\nUserTable.prototype.typeCheck = function (expected, column) {\n  var actual = column.dataType;\n  if (!actual || actual !== expected) {\n    throw new Error('Unexpected ' + column.name + ' column data type was found for table \\'' + this.table_name + '\\', expected: ' + DataTypes.name(expected) + ', actual: ' + column.dataType);\n  }\n};\n\n/**\n * Check for missing columns\n * @param  {Number} index  index\n * @param  {string} column column\n * @throws Will throw an error if no column is found\n */\nUserTable.prototype.missingCheck = function (index, column) {\n  if (index === undefined || index === null) {\n    throw new Error('No ' + column + ' column was found for table \\'' + this.table_name +'\\'');\n  }\n};\n\n/**\n * Get the column index of the column name\n * @param  {string} columnName column name\n * @return {Number} the column index\n * @throws Will throw an error if the column is not found in the table\n */\nUserTable.prototype.getColumnIndex = function (columnName) {\n  var index = this.nameToIndex[columnName];\n  if (index === undefined || index === null) {\n    throw new Error('Column does not exist in table \\'' + this.table_name + '\\', column: ' + columnName);\n  }\n  return index;\n};\n\n/**\n * Check if the table has the column\n * @param  {string} columnName name of the column\n * @return {Boolean}            true if the column exists in the table\n */\nUserTable.prototype.hasColumn = function(columnName) {\n  try {\n    this.getColumnIndex(columnName);\n    return true;\n  } catch (e) {\n    return false;\n  }\n  return false;\n}\n\n/**\n * Get the column name from the index\n * @param  {Number} index index\n * @return {string} the column name\n */\nUserTable.prototype.getColumnNameWithIndex = function (index) {\n  return this.columnNames[index];\n};\n\n/**\n * Get the column from the index\n * @param  {Number} index index\n * @return {module:user/userColumn~UserColumn} column at the index\n */\nUserTable.prototype.getColumnWithIndex = function (index) {\n  return this.columns[index];\n};\n\n/**\n * Get column with the column name\n * @param  {string} columnName column name\n * @return {module:user/userColumn~UserColumn}            column at the index\n */\nUserTable.prototype.getColumnWithColumnName = function (columnName) {\n  return this.getColumnWithIndex(this.getColumnIndex(columnName));\n};\n\n/**\n * Get the column count\n * @return {Number} the count of the columns\n */\nUserTable.prototype.columnCount = function () {\n  return this.columns.length;\n};\n\n/**\n * Get the primary key column\n * @return {module:user/userColumn~UserColumn} the primary key column\n */\nUserTable.prototype.getPkColumn = function () {\n  return this.columns[this.pkIndex];\n};\n\n/**\n * Get the primary key id column\n * @return {module:user/userColumn~UserColumn}\n */\nUserTable.prototype.getIdColumn = function() {\n  return this.getPkColumn();\n}\n\nUserTable.prototype.addUniqueConstraint = function (uniqueConstraint) {\n  this.uniqueConstraints.push(uniqueConstraint);\n};\n\nUserTable.FEATURE_TABLE = 'FEATURE';\nUserTable.TILE_TABLE = 'TILE';\n\nmodule.exports = UserTable;\n\n},{}],109:[function(require,module,exports){\n/**\n * userTableReader module.\n * @module user/userTableReader\n */\n\nvar UserColumn = require('./userColumn')\n  , UserTable = require('./userTable')\n  , DataTypes = require('../db/dataTypes');\n\n/**\n * @class\n * @param  {string} tableName       name of the table\n * @param  {string[]} requiredColumns array of required column names\n */\nvar UserTableReader = function(tableName, requiredColumns) {\n  this.table_name = tableName;\n  this.requiredColumns = requiredColumns;\n}\n\nvar GPKG_UTR_CID = \"cid\";\nvar GPKG_UTR_NAME = \"name\";\nvar GPKG_UTR_TYPE = \"type\";\nvar GPKG_UTR_NOT_NULL = \"notnull\";\nvar GPKG_UTR_PK = \"pk\";\nvar GPKG_UTR_DFLT_VALUE = \"dflt_value\";\n\n/**\n * Read the table\n * @param  {object} db db connection\n * @return {module:user/userTable~UserTable}\n */\nUserTableReader.prototype.readTable = function (db) {\n  var columnList = [];\n  var results = db.all('PRAGMA table_info(\\''+this.table_name+'\\')');\n  for (var i =0; i < results.length; i++) {\n    var result = results[i];\n    var index = result[GPKG_UTR_CID];\n    var name = result[GPKG_UTR_NAME];\n    var type = result[GPKG_UTR_TYPE];\n    var notNull = result[GPKG_UTR_NOT_NULL] === 1;\n    var primarykey = result[GPKG_UTR_PK] === 1;\n    var max = undefined;\n    if (type && type.lastIndexOf(')') === type.length-1) {\n      var maxStart = type.indexOf('(');\n      if (maxStart > -1) {\n        var maxString = type.substring(maxStart + 1, type.length - 1);\n        if (maxString !== '') {\n          max = parseInt(maxString);\n          type = type.substring(0, maxStart);\n        }\n      }\n    }\n    var defaultValue = undefined;\n    if (result[GPKG_UTR_DFLT_VALUE]) {\n      defaultValue = result[GPKG_UTR_DFLT_VALUE].replace(/\\\\'/g, '');\n    }\n    var column = this.createColumnWithResults(result, index, name, type, max, notNull, defaultValue, primarykey);\n\n    columnList.push(column);\n  }\n\n  if (columnList.length === 0) {\n    throw new Error('Table does not exist: ' + this.table_name);\n  }\n  return this.createTable(this.table_name, columnList, this.requiredColumns);\n};\n\n/**\n * Creates a user column\n * @param {Object} result\n * @param {Number} index        column index\n * @param {string} name         column name\n * @param {module:db/dataTypes~GPKGDataType} type         data type\n * @param {Number} max max value\n * @param {Boolean} notNull      not null\n * @param {Object} defaultValue default value or nil\n * @param {Boolean} primaryKey primary key\n * @return {module:user/custom~UserCustomColumn}\n */\nUserTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) {\n\n  var dataType = DataTypes.fromName(type);\n  return new UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey);\n}\n\n/**\n * Create the table\n * @param  {string} tableName table name\n * @param  {module:dao/columnValues~ColumnValues[]} columns   columns\n * @return {module:user/userTable~UserTable}           the user table\n */\nUserTableReader.prototype.createTable = function (tableName, columns) {\n  return new UserTable(tableName, columns);\n};\n\nmodule.exports = UserTableReader;\n\n},{\"../db/dataTypes\":14,\"./userColumn\":105,\"./userTable\":108}],110:[function(require,module,exports){\n/**\n * GeoPackageValidate module.\n * @module validate/geoPackageValidate\n *\n */\n\nvar path = require('path')\n  , SpatialReferenceSystem = require('../core/srs').SpatialReferenceSystem\n  , Contents = require('../core/contents').Contents\n  , GeoPackageConstants = require('../geoPackageConstants');\n\n/**\n * Check the file extension to see if it is a GeoPackage\n * @param  {string}   filePath Absolute path to the GeoPackage to create\n * @return {boolean} true if GeoPackage extension\n */\nexports.hasGeoPackageExtension = function(filePath) {\n  var extension = path.extname(filePath);\n  return extension && extension !== ''\n    && (extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENSION.toLowerCase()\n      || extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION.toLowerCase());\n}\n\n/**\n * Validate the extension file as a GeoPackage\n * @param  {string}   filePath Absolute path to the GeoPackage to create\n * @return {Error}    error if the extension is not valid\n */\nexports.validateGeoPackageExtension = function(filePath) {\n  if (!exports.hasGeoPackageExtension(filePath)) {\n    return new Error(\"GeoPackage database file '\" + filePath\n  \t\t\t\t\t+ \"' does not have a valid extension of '\"\n  \t\t\t\t\t+ GeoPackageConstants.GEOPACKAGE_EXTENSION + \"' or '\"\n  \t\t\t\t\t+ GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION + \"'\");\n  }\n}\n\n/**\n * Check the GeoPackage for the minimum required tables\n * @param  {Object}   geoPackage GeoPackage to check\n * @param {module:validate/geoPackageValidate~validationCallback} callback - The validation callback\n */\nexports.hasMinimumTables = function(geoPackage) {\n  var srsExists = geoPackage.getSpatialReferenceSystemDao().isTableExists();\n  var contentsExists = geoPackage.getContentsDao().isTableExists();\n  return (srsExists && contentsExists);\n}\n\n/**\n * Validation callback is passed an error if the validation failed.\n * @callback module:validate/geoPackageValidate~validationCallback\n * @param {Error} null if no error, otherwise describes the error\n */\n\n},{\"../core/contents\":8,\"../core/srs\":9,\"../geoPackageConstants\":71,\"path\":276}],111:[function(require,module,exports){\n/**\n * WKB module.\n * @module wkb\n */\n\nvar wkx = require('wkx');\n\nvar wktToEnum = {};\nwktToEnum[wkx.Types.wkt.Point] = wkx.Types.wkb.Point;\nwktToEnum[wkx.Types.wkt.LineString] = wkx.Types.wkb.LineString;\nwktToEnum[wkx.Types.wkt.Polygon] = wkx.Types.wkb.Polygon;\nwktToEnum[wkx.Types.wkt.MultiPoint] = wkx.Types.wkb.MultiPoint;\nwktToEnum[wkx.Types.wkt.MultiLineString] = wkx.Types.wkb.MultiLineString;\nwktToEnum[wkx.Types.wkt.MultiPolygon] = wkx.Types.wkb.MultiPolygon;\nwktToEnum[wkx.Types.wkt.GeometryCollection] = wkx.Types.wkb.GeometryCollection;\n\n/**\n * number from name\n * @param  {string} name name\n * @return {Number}      number corresponding to the wkb name\n */\nmodule.exports.fromName = function(name) {\n  name = name.toUpperCase();\n  if (name === 'GEOMETRY') {\n    return wkx.Types.wkb.GeometryCollection;\n  }\n  return wktToEnum[name];\n}\n\n},{\"wkx\":360}],112:[function(require,module,exports){\n'use strict';\n\nmodule.exports = Point;\n\n/**\n * A standalone point geometry with useful accessor, comparison, and\n * modification methods.\n *\n * @class Point\n * @param {Number} x the x-coordinate. this could be longitude or screen\n * pixels, or any other sort of unit.\n * @param {Number} y the y-coordinate. this could be latitude or screen\n * pixels, or any other sort of unit.\n * @example\n * var point = new Point(-77, 38);\n */\nfunction Point(x, y) {\n    this.x = x;\n    this.y = y;\n}\n\nPoint.prototype = {\n\n    /**\n     * Clone this point, returning a new point that can be modified\n     * without affecting the old one.\n     * @return {Point} the clone\n     */\n    clone: function() { return new Point(this.x, this.y); },\n\n    /**\n     * Add this point's x & y coordinates to another point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    add:     function(p) { return this.clone()._add(p); },\n\n    /**\n     * Subtract this point's x & y coordinates to from point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    sub:     function(p) { return this.clone()._sub(p); },\n\n    /**\n     * Multiply this point's x & y coordinates by point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    multByPoint:    function(p) { return this.clone()._multByPoint(p); },\n\n    /**\n     * Divide this point's x & y coordinates by point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    divByPoint:     function(p) { return this.clone()._divByPoint(p); },\n\n    /**\n     * Multiply this point's x & y coordinates by a factor,\n     * yielding a new point.\n     * @param {Point} k factor\n     * @return {Point} output point\n     */\n    mult:    function(k) { return this.clone()._mult(k); },\n\n    /**\n     * Divide this point's x & y coordinates by a factor,\n     * yielding a new point.\n     * @param {Point} k factor\n     * @return {Point} output point\n     */\n    div:     function(k) { return this.clone()._div(k); },\n\n    /**\n     * Rotate this point around the 0, 0 origin by an angle a,\n     * given in radians\n     * @param {Number} a angle to rotate around, in radians\n     * @return {Point} output point\n     */\n    rotate:  function(a) { return this.clone()._rotate(a); },\n\n    /**\n     * Rotate this point around p point by an angle a,\n     * given in radians\n     * @param {Number} a angle to rotate around, in radians\n     * @param {Point} p Point to rotate around\n     * @return {Point} output point\n     */\n    rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },\n\n    /**\n     * Multiply this point by a 4x1 transformation matrix\n     * @param {Array<Number>} m transformation matrix\n     * @return {Point} output point\n     */\n    matMult: function(m) { return this.clone()._matMult(m); },\n\n    /**\n     * Calculate this point but as a unit vector from 0, 0, meaning\n     * that the distance from the resulting point to the 0, 0\n     * coordinate will be equal to 1 and the angle from the resulting\n     * point to the 0, 0 coordinate will be the same as before.\n     * @return {Point} unit vector point\n     */\n    unit:    function() { return this.clone()._unit(); },\n\n    /**\n     * Compute a perpendicular point, where the new y coordinate\n     * is the old x coordinate and the new x coordinate is the old y\n     * coordinate multiplied by -1\n     * @return {Point} perpendicular point\n     */\n    perp:    function() { return this.clone()._perp(); },\n\n    /**\n     * Return a version of this point with the x & y coordinates\n     * rounded to integers.\n     * @return {Point} rounded point\n     */\n    round:   function() { return this.clone()._round(); },\n\n    /**\n     * Return the magitude of this point: this is the Euclidean\n     * distance from the 0, 0 coordinate to this point's x and y\n     * coordinates.\n     * @return {Number} magnitude\n     */\n    mag: function() {\n        return Math.sqrt(this.x * this.x + this.y * this.y);\n    },\n\n    /**\n     * Judge whether this point is equal to another point, returning\n     * true or false.\n     * @param {Point} other the other point\n     * @return {boolean} whether the points are equal\n     */\n    equals: function(other) {\n        return this.x === other.x &&\n               this.y === other.y;\n    },\n\n    /**\n     * Calculate the distance from this point to another point\n     * @param {Point} p the other point\n     * @return {Number} distance\n     */\n    dist: function(p) {\n        return Math.sqrt(this.distSqr(p));\n    },\n\n    /**\n     * Calculate the distance from this point to another point,\n     * without the square root step. Useful if you're comparing\n     * relative distances.\n     * @param {Point} p the other point\n     * @return {Number} distance\n     */\n    distSqr: function(p) {\n        var dx = p.x - this.x,\n            dy = p.y - this.y;\n        return dx * dx + dy * dy;\n    },\n\n    /**\n     * Get the angle from the 0, 0 coordinate to this point, in radians\n     * coordinates.\n     * @return {Number} angle\n     */\n    angle: function() {\n        return Math.atan2(this.y, this.x);\n    },\n\n    /**\n     * Get the angle from this point to another point, in radians\n     * @param {Point} b the other point\n     * @return {Number} angle\n     */\n    angleTo: function(b) {\n        return Math.atan2(this.y - b.y, this.x - b.x);\n    },\n\n    /**\n     * Get the angle between this point and another point, in radians\n     * @param {Point} b the other point\n     * @return {Number} angle\n     */\n    angleWith: function(b) {\n        return this.angleWithSep(b.x, b.y);\n    },\n\n    /*\n     * Find the angle of the two vectors, solving the formula for\n     * the cross product a x b = |a||b|sin(θ) for θ.\n     * @param {Number} x the x-coordinate\n     * @param {Number} y the y-coordinate\n     * @return {Number} the angle in radians\n     */\n    angleWithSep: function(x, y) {\n        return Math.atan2(\n            this.x * y - this.y * x,\n            this.x * x + this.y * y);\n    },\n\n    _matMult: function(m) {\n        var x = m[0] * this.x + m[1] * this.y,\n            y = m[2] * this.x + m[3] * this.y;\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _add: function(p) {\n        this.x += p.x;\n        this.y += p.y;\n        return this;\n    },\n\n    _sub: function(p) {\n        this.x -= p.x;\n        this.y -= p.y;\n        return this;\n    },\n\n    _mult: function(k) {\n        this.x *= k;\n        this.y *= k;\n        return this;\n    },\n\n    _div: function(k) {\n        this.x /= k;\n        this.y /= k;\n        return this;\n    },\n\n    _multByPoint: function(p) {\n        this.x *= p.x;\n        this.y *= p.y;\n        return this;\n    },\n\n    _divByPoint: function(p) {\n        this.x /= p.x;\n        this.y /= p.y;\n        return this;\n    },\n\n    _unit: function() {\n        this._div(this.mag());\n        return this;\n    },\n\n    _perp: function() {\n        var y = this.y;\n        this.y = this.x;\n        this.x = -y;\n        return this;\n    },\n\n    _rotate: function(angle) {\n        var cos = Math.cos(angle),\n            sin = Math.sin(angle),\n            x = cos * this.x - sin * this.y,\n            y = sin * this.x + cos * this.y;\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _rotateAround: function(angle, p) {\n        var cos = Math.cos(angle),\n            sin = Math.sin(angle),\n            x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),\n            y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _round: function() {\n        this.x = Math.round(this.x);\n        this.y = Math.round(this.y);\n        return this;\n    }\n};\n\n/**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array<Number>|Point|*} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\nPoint.convert = function (a) {\n    if (a instanceof Point) {\n        return a;\n    }\n    if (Array.isArray(a)) {\n        return new Point(a[0], a[1]);\n    }\n    return a;\n};\n\n},{}],113:[function(require,module,exports){\nmodule.exports.VectorTile = require('./lib/vectortile.js');\nmodule.exports.VectorTileFeature = require('./lib/vectortilefeature.js');\nmodule.exports.VectorTileLayer = require('./lib/vectortilelayer.js');\n\n},{\"./lib/vectortile.js\":114,\"./lib/vectortilefeature.js\":115,\"./lib/vectortilelayer.js\":116}],114:[function(require,module,exports){\n'use strict';\n\nvar VectorTileLayer = require('./vectortilelayer');\n\nmodule.exports = VectorTile;\n\nfunction VectorTile(pbf, end) {\n    this.layers = pbf.readFields(readTile, {}, end);\n}\n\nfunction readTile(tag, layers, pbf) {\n    if (tag === 3) {\n        var layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);\n        if (layer.length) layers[layer.name] = layer;\n    }\n}\n\n\n},{\"./vectortilelayer\":116}],115:[function(require,module,exports){\n'use strict';\n\nvar Point = require('@mapbox/point-geometry');\n\nmodule.exports = VectorTileFeature;\n\nfunction VectorTileFeature(pbf, end, extent, keys, values) {\n    // Public\n    this.properties = {};\n    this.extent = extent;\n    this.type = 0;\n\n    // Private\n    this._pbf = pbf;\n    this._geometry = -1;\n    this._keys = keys;\n    this._values = values;\n\n    pbf.readFields(readFeature, this, end);\n}\n\nfunction readFeature(tag, feature, pbf) {\n    if (tag == 1) feature.id = pbf.readVarint();\n    else if (tag == 2) readTag(pbf, feature);\n    else if (tag == 3) feature.type = pbf.readVarint();\n    else if (tag == 4) feature._geometry = pbf.pos;\n}\n\nfunction readTag(pbf, feature) {\n    var end = pbf.readVarint() + pbf.pos;\n\n    while (pbf.pos < end) {\n        var key = feature._keys[pbf.readVarint()],\n            value = feature._values[pbf.readVarint()];\n        feature.properties[key] = value;\n    }\n}\n\nVectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nVectorTileFeature.prototype.loadGeometry = function() {\n    var pbf = this._pbf;\n    pbf.pos = this._geometry;\n\n    var end = pbf.readVarint() + pbf.pos,\n        cmd = 1,\n        length = 0,\n        x = 0,\n        y = 0,\n        lines = [],\n        line;\n\n    while (pbf.pos < end) {\n        if (length <= 0) {\n            var cmdLen = pbf.readVarint();\n            cmd = cmdLen & 0x7;\n            length = cmdLen >> 3;\n        }\n\n        length--;\n\n        if (cmd === 1 || cmd === 2) {\n            x += pbf.readSVarint();\n            y += pbf.readSVarint();\n\n            if (cmd === 1) { // moveTo\n                if (line) lines.push(line);\n                line = [];\n            }\n\n            line.push(new Point(x, y));\n\n        } else if (cmd === 7) {\n\n            // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n            if (line) {\n                line.push(line[0].clone()); // closePolygon\n            }\n\n        } else {\n            throw new Error('unknown command ' + cmd);\n        }\n    }\n\n    if (line) lines.push(line);\n\n    return lines;\n};\n\nVectorTileFeature.prototype.bbox = function() {\n    var pbf = this._pbf;\n    pbf.pos = this._geometry;\n\n    var end = pbf.readVarint() + pbf.pos,\n        cmd = 1,\n        length = 0,\n        x = 0,\n        y = 0,\n        x1 = Infinity,\n        x2 = -Infinity,\n        y1 = Infinity,\n        y2 = -Infinity;\n\n    while (pbf.pos < end) {\n        if (length <= 0) {\n            var cmdLen = pbf.readVarint();\n            cmd = cmdLen & 0x7;\n            length = cmdLen >> 3;\n        }\n\n        length--;\n\n        if (cmd === 1 || cmd === 2) {\n            x += pbf.readSVarint();\n            y += pbf.readSVarint();\n            if (x < x1) x1 = x;\n            if (x > x2) x2 = x;\n            if (y < y1) y1 = y;\n            if (y > y2) y2 = y;\n\n        } else if (cmd !== 7) {\n            throw new Error('unknown command ' + cmd);\n        }\n    }\n\n    return [x1, y1, x2, y2];\n};\n\nVectorTileFeature.prototype.toGeoJSON = function(x, y, z) {\n    var size = this.extent * Math.pow(2, z),\n        x0 = this.extent * x,\n        y0 = this.extent * y,\n        coords = this.loadGeometry(),\n        type = VectorTileFeature.types[this.type],\n        i, j;\n\n    function project(line) {\n        for (var j = 0; j < line.length; j++) {\n            var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;\n            line[j] = [\n                (p.x + x0) * 360 / size - 180,\n                360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90\n            ];\n        }\n    }\n\n    switch (this.type) {\n    case 1:\n        var points = [];\n        for (i = 0; i < coords.length; i++) {\n            points[i] = coords[i][0];\n        }\n        coords = points;\n        project(coords);\n        break;\n\n    case 2:\n        for (i = 0; i < coords.length; i++) {\n            project(coords[i]);\n        }\n        break;\n\n    case 3:\n        coords = classifyRings(coords);\n        for (i = 0; i < coords.length; i++) {\n            for (j = 0; j < coords[i].length; j++) {\n                project(coords[i][j]);\n            }\n        }\n        break;\n    }\n\n    if (coords.length === 1) {\n        coords = coords[0];\n    } else {\n        type = 'Multi' + type;\n    }\n\n    var result = {\n        type: \"Feature\",\n        geometry: {\n            type: type,\n            coordinates: coords\n        },\n        properties: this.properties\n    };\n\n    if ('id' in this) {\n        result.id = this.id;\n    }\n\n    return result;\n};\n\n// classifies an array of rings into polygons with outer rings and holes\n\nfunction classifyRings(rings) {\n    var len = rings.length;\n\n    if (len <= 1) return [rings];\n\n    var polygons = [],\n        polygon,\n        ccw;\n\n    for (var i = 0; i < len; i++) {\n        var area = signedArea(rings[i]);\n        if (area === 0) continue;\n\n        if (ccw === undefined) ccw = area < 0;\n\n        if (ccw === area < 0) {\n            if (polygon) polygons.push(polygon);\n            polygon = [rings[i]];\n\n        } else {\n            polygon.push(rings[i]);\n        }\n    }\n    if (polygon) polygons.push(polygon);\n\n    return polygons;\n}\n\nfunction signedArea(ring) {\n    var sum = 0;\n    for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {\n        p1 = ring[i];\n        p2 = ring[j];\n        sum += (p2.x - p1.x) * (p1.y + p2.y);\n    }\n    return sum;\n}\n\n},{\"@mapbox/point-geometry\":112}],116:[function(require,module,exports){\n'use strict';\n\nvar VectorTileFeature = require('./vectortilefeature.js');\n\nmodule.exports = VectorTileLayer;\n\nfunction VectorTileLayer(pbf, end) {\n    // Public\n    this.version = 1;\n    this.name = null;\n    this.extent = 4096;\n    this.length = 0;\n\n    // Private\n    this._pbf = pbf;\n    this._keys = [];\n    this._values = [];\n    this._features = [];\n\n    pbf.readFields(readLayer, this, end);\n\n    this.length = this._features.length;\n}\n\nfunction readLayer(tag, layer, pbf) {\n    if (tag === 15) layer.version = pbf.readVarint();\n    else if (tag === 1) layer.name = pbf.readString();\n    else if (tag === 5) layer.extent = pbf.readVarint();\n    else if (tag === 2) layer._features.push(pbf.pos);\n    else if (tag === 3) layer._keys.push(pbf.readString());\n    else if (tag === 4) layer._values.push(readValueMessage(pbf));\n}\n\nfunction readValueMessage(pbf) {\n    var value = null,\n        end = pbf.readVarint() + pbf.pos;\n\n    while (pbf.pos < end) {\n        var tag = pbf.readVarint() >> 3;\n\n        value = tag === 1 ? pbf.readString() :\n            tag === 2 ? pbf.readFloat() :\n            tag === 3 ? pbf.readDouble() :\n            tag === 4 ? pbf.readVarint64() :\n            tag === 5 ? pbf.readVarint() :\n            tag === 6 ? pbf.readSVarint() :\n            tag === 7 ? pbf.readBoolean() : null;\n    }\n\n    return value;\n}\n\n// return feature `i` from this layer as a `VectorTileFeature`\nVectorTileLayer.prototype.feature = function(i) {\n    if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');\n\n    this._pbf.pos = this._features[i];\n\n    var end = this._pbf.readVarint() + this._pbf.pos;\n    return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values);\n};\n\n},{\"./vectortilefeature.js\":115}],117:[function(require,module,exports){\nvar each = require('@turf/meta').coordEach;\n\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {(Feature|FeatureCollection)} geojson input features\n * @returns {Array<number>} bbox extent in [minX, minY, maxX, maxY] order\n * @addToMap features, bboxPolygon\n * @example\n * var pt1 = turf.point([114.175329, 22.2524])\n * var pt2 = turf.point([114.170007, 22.267969])\n * var pt3 = turf.point([114.200649, 22.274641])\n * var pt4 = turf.point([114.200649, 22.274641])\n * var pt5 = turf.point([114.186744, 22.265745])\n * var features = turf.featureCollection([pt1, pt2, pt3, pt4, pt5])\n *\n * var bbox = turf.bbox(features);\n *\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //=bbox\n *\n * //=bboxPolygon\n */\nmodule.exports = function (geojson) {\n    var bbox = [Infinity, Infinity, -Infinity, -Infinity];\n    each(geojson, function (coord) {\n        if (bbox[0] > coord[0]) bbox[0] = coord[0];\n        if (bbox[1] > coord[1]) bbox[1] = coord[1];\n        if (bbox[2] < coord[0]) bbox[2] = coord[0];\n        if (bbox[3] < coord[1]) bbox[3] = coord[1];\n    });\n    return bbox;\n};\n\n},{\"@turf/meta\":130}],118:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar invariant_1 = require(\"@turf/invariant\");\n// http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule\n// modified from: https://github.com/substack/point-in-polygon/blob/master/index.js\n// which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\n/**\n * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point\n * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes.\n *\n * @name booleanPointInPolygon\n * @param {Coord} point input point\n * @param {Feature<Polygon|MultiPolygon>} polygon input polygon or multipolygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if\n * the point is inside the polygon otherwise false.\n * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon\n * @example\n * var pt = turf.point([-77, 44]);\n * var poly = turf.polygon([[\n *   [-81, 41],\n *   [-81, 47],\n *   [-72, 47],\n *   [-72, 41],\n *   [-81, 41]\n * ]]);\n *\n * turf.booleanPointInPolygon(pt, poly);\n * //= true\n */\nfunction booleanPointInPolygon(point, polygon, options) {\n    if (options === void 0) { options = {}; }\n    // validation\n    if (!point) {\n        throw new Error(\"point is required\");\n    }\n    if (!polygon) {\n        throw new Error(\"polygon is required\");\n    }\n    var pt = invariant_1.getCoord(point);\n    var geom = invariant_1.getGeom(polygon);\n    var type = geom.type;\n    var bbox = polygon.bbox;\n    var polys = geom.coordinates;\n    // Quick elimination if point is not inside bbox\n    if (bbox && inBBox(pt, bbox) === false) {\n        return false;\n    }\n    // normalize to multipolygon\n    if (type === \"Polygon\") {\n        polys = [polys];\n    }\n    var insidePoly = false;\n    for (var i = 0; i < polys.length && !insidePoly; i++) {\n        // check if it is in the outer ring first\n        if (inRing(pt, polys[i][0], options.ignoreBoundary)) {\n            var inHole = false;\n            var k = 1;\n            // check for the point in any of the holes\n            while (k < polys[i].length && !inHole) {\n                if (inRing(pt, polys[i][k], !options.ignoreBoundary)) {\n                    inHole = true;\n                }\n                k++;\n            }\n            if (!inHole) {\n                insidePoly = true;\n            }\n        }\n    }\n    return insidePoly;\n}\nexports.default = booleanPointInPolygon;\n/**\n * inRing\n *\n * @private\n * @param {Array<number>} pt [x,y]\n * @param {Array<Array<number>>} ring [[x,y], [x,y],..]\n * @param {boolean} ignoreBoundary ignoreBoundary\n * @returns {boolean} inRing\n */\nfunction inRing(pt, ring, ignoreBoundary) {\n    var isInside = false;\n    if (ring[0][0] === ring[ring.length - 1][0] && ring[0][1] === ring[ring.length - 1][1]) {\n        ring = ring.slice(0, ring.length - 1);\n    }\n    for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n        var xi = ring[i][0];\n        var yi = ring[i][1];\n        var xj = ring[j][0];\n        var yj = ring[j][1];\n        var onBoundary = (pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0) &&\n            ((xi - pt[0]) * (xj - pt[0]) <= 0) && ((yi - pt[1]) * (yj - pt[1]) <= 0);\n        if (onBoundary) {\n            return !ignoreBoundary;\n        }\n        var intersect = ((yi > pt[1]) !== (yj > pt[1])) &&\n            (pt[0] < (xj - xi) * (pt[1] - yi) / (yj - yi) + xi);\n        if (intersect) {\n            isInside = !isInside;\n        }\n    }\n    return isInside;\n}\n/**\n * inBBox\n *\n * @private\n * @param {Position} pt point [x,y]\n * @param {BBox} bbox BBox [west, south, east, north]\n * @returns {boolean} true/false if point is inside BBox\n */\nfunction inBBox(pt, bbox) {\n    return bbox[0] <= pt[0] &&\n        bbox[1] <= pt[1] &&\n        bbox[2] >= pt[0] &&\n        bbox[3] >= pt[1];\n}\n\n},{\"@turf/invariant\":125}],119:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Returns true if a point is on a line. Accepts a optional parameter to ignore the\n * start and end vertices of the linestring.\n *\n * @name booleanPointOnLine\n * @param {Coord} pt GeoJSON Point\n * @param {Feature<LineString>} line GeoJSON LineString\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreEndVertices=false] whether to ignore the start and end vertices.\n * @returns {boolean} true/false\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[-1, -1],[1, 1],[1.5, 2.2]]);\n * var isPointOnLine = turf.booleanPointOnLine(pt, line);\n * //=true\n */\nfunction booleanPointOnLine(pt, line, options) {\n    if (options === void 0) { options = {}; }\n    // Normalize inputs\n    var ptCoords = invariant_1.getCoord(pt);\n    var lineCoords = invariant_1.getCoords(line);\n    // Main\n    for (var i = 0; i < lineCoords.length - 1; i++) {\n        var ignoreBoundary = false;\n        if (options.ignoreEndVertices) {\n            if (i === 0) {\n                ignoreBoundary = \"start\";\n            }\n            if (i === lineCoords.length - 2) {\n                ignoreBoundary = \"end\";\n            }\n            if (i === 0 && i + 1 === lineCoords.length - 1) {\n                ignoreBoundary = \"both\";\n            }\n        }\n        if (isPointOnLineSegment(lineCoords[i], lineCoords[i + 1], ptCoords, ignoreBoundary)) {\n            return true;\n        }\n    }\n    return false;\n}\n// See http://stackoverflow.com/a/4833823/1979085\n/**\n * @private\n * @param {Position} lineSegmentStart coord pair of start of line\n * @param {Position} lineSegmentEnd coord pair of end of line\n * @param {Position} pt coord pair of point to check\n * @param {boolean|string} excludeBoundary whether the point is allowed to fall on the line ends.\n * If true which end to ignore.\n * @returns {boolean} true/false\n */\nfunction isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt, excludeBoundary) {\n    var x = pt[0];\n    var y = pt[1];\n    var x1 = lineSegmentStart[0];\n    var y1 = lineSegmentStart[1];\n    var x2 = lineSegmentEnd[0];\n    var y2 = lineSegmentEnd[1];\n    var dxc = pt[0] - x1;\n    var dyc = pt[1] - y1;\n    var dxl = x2 - x1;\n    var dyl = y2 - y1;\n    var cross = dxc * dyl - dyc * dxl;\n    if (cross !== 0) {\n        return false;\n    }\n    if (!excludeBoundary) {\n        if (Math.abs(dxl) >= Math.abs(dyl)) {\n            return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1;\n        }\n        return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1;\n    }\n    else if (excludeBoundary === \"start\") {\n        if (Math.abs(dxl) >= Math.abs(dyl)) {\n            return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1;\n        }\n        return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1;\n    }\n    else if (excludeBoundary === \"end\") {\n        if (Math.abs(dxl) >= Math.abs(dyl)) {\n            return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1;\n        }\n        return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1;\n    }\n    else if (excludeBoundary === \"both\") {\n        if (Math.abs(dxl) >= Math.abs(dyl)) {\n            return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1;\n        }\n        return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1;\n    }\n    return false;\n}\nexports.default = booleanPointOnLine;\n\n},{\"@turf/invariant\":125}],120:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar bbox_1 = require(\"@turf/bbox\");\nvar boolean_point_on_line_1 = require(\"@turf/boolean-point-on-line\");\nvar boolean_point_in_polygon_1 = require(\"@turf/boolean-point-in-polygon\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Boolean-within returns true if the first geometry is completely within the second geometry.\n * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a)\n * must not intersect the exterior of the secondary (geometry b).\n * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`.\n *\n * @name booleanWithin\n * @param {Geometry|Feature<any>} feature1 GeoJSON Feature or Geometry\n * @param {Geometry|Feature<any>} feature2 GeoJSON Feature or Geometry\n * @returns {boolean} true/false\n * @example\n * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]);\n * var point = turf.point([1, 2]);\n *\n * turf.booleanWithin(point, line);\n * //=true\n */\nfunction booleanWithin(feature1, feature2) {\n    var type1 = invariant_1.getType(feature1);\n    var type2 = invariant_1.getType(feature2);\n    var geom1 = invariant_1.getGeom(feature1);\n    var geom2 = invariant_1.getGeom(feature2);\n    switch (type1) {\n        case 'Point':\n            switch (type2) {\n                case 'MultiPoint':\n                    return isPointInMultiPoint(geom1, geom2);\n                case 'LineString':\n                    return boolean_point_on_line_1.default(geom1, geom2, { ignoreEndVertices: true });\n                case 'Polygon':\n                case 'MultiPolygon':\n                    return boolean_point_in_polygon_1.default(geom1, geom2, { ignoreBoundary: true });\n                default:\n                    throw new Error('feature2 ' + type2 + ' geometry not supported');\n            }\n        case 'MultiPoint':\n            switch (type2) {\n                case 'MultiPoint':\n                    return isMultiPointInMultiPoint(geom1, geom2);\n                case 'LineString':\n                    return isMultiPointOnLine(geom1, geom2);\n                case 'Polygon':\n                case 'MultiPolygon':\n                    return isMultiPointInPoly(geom1, geom2);\n                default:\n                    throw new Error('feature2 ' + type2 + ' geometry not supported');\n            }\n        case 'LineString':\n            switch (type2) {\n                case 'LineString':\n                    return isLineOnLine(geom1, geom2);\n                case 'Polygon':\n                case 'MultiPolygon':\n                    return isLineInPoly(geom1, geom2);\n                default:\n                    throw new Error('feature2 ' + type2 + ' geometry not supported');\n            }\n        case 'Polygon':\n            switch (type2) {\n                case 'Polygon':\n                case 'MultiPolygon':\n                    return isPolyInPoly(geom1, geom2);\n                default:\n                    throw new Error('feature2 ' + type2 + ' geometry not supported');\n            }\n        default:\n            throw new Error('feature1 ' + type1 + ' geometry not supported');\n    }\n}\nfunction isPointInMultiPoint(point, multiPoint) {\n    var i;\n    var output = false;\n    for (i = 0; i < multiPoint.coordinates.length; i++) {\n        if (compareCoords(multiPoint.coordinates[i], point.coordinates)) {\n            output = true;\n            break;\n        }\n    }\n    return output;\n}\nfunction isMultiPointInMultiPoint(multiPoint1, multiPoint2) {\n    for (var i = 0; i < multiPoint1.coordinates.length; i++) {\n        var anyMatch = false;\n        for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) {\n            if (compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])) {\n                anyMatch = true;\n            }\n        }\n        if (!anyMatch) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isMultiPointOnLine(multiPoint, lineString) {\n    var foundInsidePoint = false;\n    for (var i = 0; i < multiPoint.coordinates.length; i++) {\n        if (!boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString)) {\n            return false;\n        }\n        if (!foundInsidePoint) {\n            foundInsidePoint = boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString, { ignoreEndVertices: true });\n        }\n    }\n    return foundInsidePoint;\n}\nfunction isMultiPointInPoly(multiPoint, polygon) {\n    var output = true;\n    var oneInside = false;\n    for (var i = 0; i < multiPoint.coordinates.length; i++) {\n        var isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon);\n        if (!isInside) {\n            output = false;\n            break;\n        }\n        if (!oneInside) {\n            isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon, { ignoreBoundary: true });\n        }\n    }\n    return output && isInside;\n}\nfunction isLineOnLine(lineString1, lineString2) {\n    for (var i = 0; i < lineString1.coordinates.length; i++) {\n        if (!boolean_point_on_line_1.default(lineString1.coordinates[i], lineString2)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction isLineInPoly(linestring, polygon) {\n    var polyBbox = bbox_1.default(polygon);\n    var lineBbox = bbox_1.default(linestring);\n    if (!doBBoxOverlap(polyBbox, lineBbox)) {\n        return false;\n    }\n    var foundInsidePoint = false;\n    for (var i = 0; i < linestring.coordinates.length - 1; i++) {\n        if (!boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon)) {\n            return false;\n        }\n        if (!foundInsidePoint) {\n            foundInsidePoint = boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon, { ignoreBoundary: true });\n        }\n        if (!foundInsidePoint) {\n            var midpoint = getMidpoint(linestring.coordinates[i], linestring.coordinates[i + 1]);\n            foundInsidePoint = boolean_point_in_polygon_1.default(midpoint, polygon, { ignoreBoundary: true });\n        }\n    }\n    return foundInsidePoint;\n}\n/**\n * Is Polygon2 in Polygon1\n * Only takes into account outer rings\n *\n * @private\n * @param {Geometry|Feature<Polygon>} feature1 Polygon1\n * @param {Geometry|Feature<Polygon>} feature2 Polygon2\n * @returns {boolean} true/false\n */\nfunction isPolyInPoly(feature1, feature2) {\n    var poly1Bbox = bbox_1.default(feature1);\n    var poly2Bbox = bbox_1.default(feature2);\n    if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) {\n        return false;\n    }\n    for (var i = 0; i < feature1.coordinates[0].length; i++) {\n        if (!boolean_point_in_polygon_1.default(feature1.coordinates[0][i], feature2)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction doBBoxOverlap(bbox1, bbox2) {\n    if (bbox1[0] > bbox2[0])\n        return false;\n    if (bbox1[2] < bbox2[2])\n        return false;\n    if (bbox1[1] > bbox2[1])\n        return false;\n    if (bbox1[3] < bbox2[3])\n        return false;\n    return true;\n}\n/**\n * compareCoords\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {boolean} true/false if coord pairs match\n */\nfunction compareCoords(pair1, pair2) {\n    return pair1[0] === pair2[0] && pair1[1] === pair2[1];\n}\n/**\n * getMidpoint\n *\n * @private\n * @param {Position} pair1 point [x,y]\n * @param {Position} pair2 point [x,y]\n * @returns {Position} midpoint of pair1 and pair2\n */\nfunction getMidpoint(pair1, pair2) {\n    return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2];\n}\nexports.default = booleanWithin;\n\n},{\"@turf/bbox\":121,\"@turf/boolean-point-in-polygon\":118,\"@turf/boolean-point-on-line\":119,\"@turf/invariant\":125}],121:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar meta_1 = require(\"@turf/meta\");\n/**\n * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.\n *\n * @name bbox\n * @param {GeoJSON} geojson any GeoJSON object\n * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order\n * @example\n * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);\n * var bbox = turf.bbox(line);\n * var bboxPolygon = turf.bboxPolygon(bbox);\n *\n * //addToMap\n * var addToMap = [line, bboxPolygon]\n */\nfunction bbox(geojson) {\n    var result = [Infinity, Infinity, -Infinity, -Infinity];\n    meta_1.coordEach(geojson, function (coord) {\n        if (result[0] > coord[0]) {\n            result[0] = coord[0];\n        }\n        if (result[1] > coord[1]) {\n            result[1] = coord[1];\n        }\n        if (result[2] < coord[0]) {\n            result[2] = coord[0];\n        }\n        if (result[3] < coord[1]) {\n            result[3] = coord[1];\n        }\n    });\n    return result;\n}\nexports.default = bbox;\n\n},{\"@turf/meta\":122}],122:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar helpers = require('@turf/helpers');\n\n/**\n * Callback for coordEach\n *\n * @callback coordEachCallback\n * @param {Array<number>} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=currentCoord\n *   //=coordIndex\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n * });\n */\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n    // Handles null Geometry -- Skips this GeoJSON\n    if (geojson === null) return;\n    var j, k, l, geometry, stopG, coords,\n        geometryMaybeCollection,\n        wrapShrink = 0,\n        coordIndex = 0,\n        isGeometryCollection,\n        type = geojson.type,\n        isFeatureCollection = type === 'FeatureCollection',\n        isFeature = type === 'Feature',\n        stop = isFeatureCollection ? geojson.features.length : 1;\n\n    // This logic may look a little weird. The reason why it is that way\n    // is because it's trying to be fast. GeoJSON supports multiple kinds\n    // of objects at its root: FeatureCollection, Features, Geometries.\n    // This function has the responsibility of handling all of them, and that\n    // means that some of the `for` loops you see below actually just don't apply\n    // to certain inputs. For instance, if you give this just a\n    // Point geometry, then both loops are short-circuited and all we do\n    // is gradually rename the input until it's called 'geometry'.\n    //\n    // This also aims to allocate as few resources as possible: just a\n    // few numbers and booleans, rather than any temporary arrays as would\n    // be required with the normalization approach.\n    for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n        geometryMaybeCollection = (isFeatureCollection ? geojson.features[featureIndex].geometry :\n            (isFeature ? geojson.geometry : geojson));\n        isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;\n        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n        for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n            var multiFeatureIndex = 0;\n            var geometryIndex = 0;\n            geometry = isGeometryCollection ?\n                geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n\n            // Handles null Geometry -- Skips this geometry\n            if (geometry === null) continue;\n            coords = geometry.coordinates;\n            var geomType = geometry.type;\n\n            wrapShrink = (excludeWrapCoord && (geomType === 'Polygon' || geomType === 'MultiPolygon')) ? 1 : 0;\n\n            switch (geomType) {\n            case null:\n                break;\n            case 'Point':\n                if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n                coordIndex++;\n                multiFeatureIndex++;\n                break;\n            case 'LineString':\n            case 'MultiPoint':\n                for (j = 0; j < coords.length; j++) {\n                    if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n                    coordIndex++;\n                    if (geomType === 'MultiPoint') multiFeatureIndex++;\n                }\n                if (geomType === 'LineString') multiFeatureIndex++;\n                break;\n            case 'Polygon':\n            case 'MultiLineString':\n                for (j = 0; j < coords.length; j++) {\n                    for (k = 0; k < coords[j].length - wrapShrink; k++) {\n                        if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n                        coordIndex++;\n                    }\n                    if (geomType === 'MultiLineString') multiFeatureIndex++;\n                    if (geomType === 'Polygon') geometryIndex++;\n                }\n                if (geomType === 'Polygon') multiFeatureIndex++;\n                break;\n            case 'MultiPolygon':\n                for (j = 0; j < coords.length; j++) {\n                    geometryIndex = 0;\n                    for (k = 0; k < coords[j].length; k++) {\n                        for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n                            if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n                            coordIndex++;\n                        }\n                        geometryIndex++;\n                    }\n                    multiFeatureIndex++;\n                }\n                break;\n            case 'GeometryCollection':\n                for (j = 0; j < geometry.geometries.length; j++)\n                    if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false;\n                break;\n            default:\n                throw new Error('Unknown Geometry Type');\n            }\n        }\n    }\n}\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Array<number>} currentCoord The current coordinate being processed.\n * @param {number} coordIndex The current index of the coordinate being processed.\n * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=previousValue\n *   //=currentCoord\n *   //=coordIndex\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   return currentCoord;\n * });\n */\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n    var previousValue = initialValue;\n    coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n        if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord;\n        else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex);\n    }, excludeWrapCoord);\n    return previousValue;\n}\n\n/**\n * Callback for propEach\n *\n * @callback propEachCallback\n * @param {Object} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propEach(features, function (currentProperties, featureIndex) {\n *   //=currentProperties\n *   //=featureIndex\n * });\n */\nfunction propEach(geojson, callback) {\n    var i;\n    switch (geojson.type) {\n    case 'FeatureCollection':\n        for (i = 0; i < geojson.features.length; i++) {\n            if (callback(geojson.features[i].properties, i) === false) break;\n        }\n        break;\n    case 'Feature':\n        callback(geojson.properties, 0);\n        break;\n    }\n}\n\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current Properties being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {FeatureCollection|Feature} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {\n *   //=previousValue\n *   //=currentProperties\n *   //=featureIndex\n *   return currentProperties\n * });\n */\nfunction propReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    propEach(geojson, function (currentProperties, featureIndex) {\n        if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties;\n        else previousValue = callback(previousValue, currentProperties, featureIndex);\n    });\n    return previousValue;\n}\n\n/**\n * Callback for featureEach\n *\n * @callback featureEachCallback\n * @param {Feature<any>} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {foo: 'bar'}),\n *   turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.featureEach(features, function (currentFeature, featureIndex) {\n *   //=currentFeature\n *   //=featureIndex\n * });\n */\nfunction featureEach(geojson, callback) {\n    if (geojson.type === 'Feature') {\n        callback(geojson, 0);\n    } else if (geojson.type === 'FeatureCollection') {\n        for (var i = 0; i < geojson.features.length; i++) {\n            if (callback(geojson.features[i], i) === false) break;\n        }\n    }\n}\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {\"foo\": \"bar\"}),\n *   turf.point([36, 53], {\"hello\": \"world\"})\n * ]);\n *\n * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {\n *   //=previousValue\n *   //=currentFeature\n *   //=featureIndex\n *   return currentFeature\n * });\n */\nfunction featureReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    featureEach(geojson, function (currentFeature, featureIndex) {\n        if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature;\n        else previousValue = callback(previousValue, currentFeature, featureIndex);\n    });\n    return previousValue;\n}\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @returns {Array<Array<number>>} coordinate position array\n * @example\n * var features = turf.featureCollection([\n *   turf.point([26, 37], {foo: 'bar'}),\n *   turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * var coords = turf.coordAll(features);\n * //= [[26, 37], [36, 53]]\n */\nfunction coordAll(geojson) {\n    var coords = [];\n    coordEach(geojson, function (coord) {\n        coords.push(coord);\n    });\n    return coords;\n}\n\n/**\n * Callback for geomEach\n *\n * @callback geomEachCallback\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array<number>} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @returns {void}\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n *   //=currentGeometry\n *   //=featureIndex\n *   //=featureProperties\n *   //=featureBBox\n *   //=featureId\n * });\n */\nfunction geomEach(geojson, callback) {\n    var i, j, g, geometry, stopG,\n        geometryMaybeCollection,\n        isGeometryCollection,\n        featureProperties,\n        featureBBox,\n        featureId,\n        featureIndex = 0,\n        isFeatureCollection = geojson.type === 'FeatureCollection',\n        isFeature = geojson.type === 'Feature',\n        stop = isFeatureCollection ? geojson.features.length : 1;\n\n    // This logic may look a little weird. The reason why it is that way\n    // is because it's trying to be fast. GeoJSON supports multiple kinds\n    // of objects at its root: FeatureCollection, Features, Geometries.\n    // This function has the responsibility of handling all of them, and that\n    // means that some of the `for` loops you see below actually just don't apply\n    // to certain inputs. For instance, if you give this just a\n    // Point geometry, then both loops are short-circuited and all we do\n    // is gradually rename the input until it's called 'geometry'.\n    //\n    // This also aims to allocate as few resources as possible: just a\n    // few numbers and booleans, rather than any temporary arrays as would\n    // be required with the normalization approach.\n    for (i = 0; i < stop; i++) {\n\n        geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry :\n            (isFeature ? geojson.geometry : geojson));\n        featureProperties = (isFeatureCollection ? geojson.features[i].properties :\n            (isFeature ? geojson.properties : {}));\n        featureBBox = (isFeatureCollection ? geojson.features[i].bbox :\n            (isFeature ? geojson.bbox : undefined));\n        featureId = (isFeatureCollection ? geojson.features[i].id :\n            (isFeature ? geojson.id : undefined));\n        isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;\n        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n        for (g = 0; g < stopG; g++) {\n            geometry = isGeometryCollection ?\n                geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n\n            // Handle null Geometry\n            if (geometry === null) {\n                if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n                continue;\n            }\n            switch (geometry.type) {\n            case 'Point':\n            case 'LineString':\n            case 'MultiPoint':\n            case 'Polygon':\n            case 'MultiLineString':\n            case 'MultiPolygon': {\n                if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n                break;\n            }\n            case 'GeometryCollection': {\n                for (j = 0; j < geometry.geometries.length; j++) {\n                    if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false;\n                }\n                break;\n            }\n            default:\n                throw new Error('Unknown Geometry Type');\n            }\n        }\n        // Only increase `featureIndex` per each feature\n        featureIndex++;\n    }\n}\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Geometry} currentGeometry The current Geometry being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {Object} featureProperties The current Feature Properties being processed.\n * @param {Array<number>} featureBBox The current Feature BBox being processed.\n * @param {number|string} featureId The current Feature Id being processed.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.point([36, 53], {hello: 'world'})\n * ]);\n *\n * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n *   //=previousValue\n *   //=currentGeometry\n *   //=featureIndex\n *   //=featureProperties\n *   //=featureBBox\n *   //=featureId\n *   return currentGeometry\n * });\n */\nfunction geomReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n        if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry;\n        else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId);\n    });\n    return previousValue;\n}\n\n/**\n * Callback for flattenEach\n *\n * @callback flattenEachCallback\n * @param {Feature} currentFeature The current flattened feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Iterate over flattened features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name flattenEach\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {\n *   //=currentFeature\n *   //=featureIndex\n *   //=multiFeatureIndex\n * });\n */\nfunction flattenEach(geojson, callback) {\n    geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {\n        // Callback for single geometry\n        var type = (geometry === null) ? null : geometry.type;\n        switch (type) {\n        case null:\n        case 'Point':\n        case 'LineString':\n        case 'Polygon':\n            if (callback(helpers.feature(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) return false;\n            return;\n        }\n\n        var geomType;\n\n        // Callback for multi-geometry\n        switch (type) {\n        case 'MultiPoint':\n            geomType = 'Point';\n            break;\n        case 'MultiLineString':\n            geomType = 'LineString';\n            break;\n        case 'MultiPolygon':\n            geomType = 'Polygon';\n            break;\n        }\n\n        for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {\n            var coordinate = geometry.coordinates[multiFeatureIndex];\n            var geom = {\n                type: geomType,\n                coordinates: coordinate\n            };\n            if (callback(helpers.feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false;\n        }\n    });\n}\n\n/**\n * Callback for flattenReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback flattenReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature} currentFeature The current Feature being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n */\n\n/**\n * Reduce flattened features in any GeoJSON object, similar to Array.reduce().\n *\n * @name flattenReduce\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = turf.featureCollection([\n *     turf.point([26, 37], {foo: 'bar'}),\n *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})\n * ]);\n *\n * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {\n *   //=previousValue\n *   //=currentFeature\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   return currentFeature\n * });\n */\nfunction flattenReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) {\n        if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature;\n        else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex);\n    });\n    return previousValue;\n}\n\n/**\n * Callback for segmentEach\n *\n * @callback segmentEachCallback\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n * @returns {void}\n */\n\n/**\n * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n *   //=currentSegment\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   //=segmentIndex\n * });\n *\n * // Calculate the total number of segments\n * var total = 0;\n * turf.segmentEach(polygon, function () {\n *     total++;\n * });\n */\nfunction segmentEach(geojson, callback) {\n    flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n        var segmentIndex = 0;\n\n        // Exclude null Geometries\n        if (!feature.geometry) return;\n        // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n        var type = feature.geometry.type;\n        if (type === 'Point' || type === 'MultiPoint') return;\n\n        // Generate 2-vertex line segments\n        var previousCoords;\n        var previousFeatureIndex = 0;\n        var previousMultiIndex = 0;\n        var prevGeomIndex = 0;\n        if (coordEach(feature, function (currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n            // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`\n            if (previousCoords === undefined || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) {\n                previousCoords = currentCoord;\n                previousFeatureIndex = featureIndex;\n                previousMultiIndex = multiPartIndexCoord;\n                prevGeomIndex = geometryIndex;\n                segmentIndex = 0;\n                return;\n            }\n            var currentSegment = helpers.lineString([previousCoords, currentCoord], feature.properties);\n            if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false;\n            segmentIndex++;\n            previousCoords = currentCoord;\n        }) === false) return false;\n    });\n}\n\n/**\n * Callback for segmentReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback segmentReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentSegment The current Segment being processed.\n * @param {number} featureIndex The current index of the Feature being processed.\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.\n * @param {number} geometryIndex The current index of the Geometry being processed.\n * @param {number} segmentIndex The current index of the Segment being processed.\n */\n\n/**\n * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()\n * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON\n * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {void}\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n *\n * // Iterate over GeoJSON by 2-vertex segments\n * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n *   //= previousSegment\n *   //= currentSegment\n *   //= featureIndex\n *   //= multiFeatureIndex\n *   //= geometryIndex\n *   //= segmentInex\n *   return currentSegment\n * });\n *\n * // Calculate the total number of segments\n * var initialValue = 0\n * var total = turf.segmentReduce(polygon, function (previousValue) {\n *     previousValue++;\n *     return previousValue;\n * }, initialValue);\n */\nfunction segmentReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    var started = false;\n    segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n        if (started === false && initialValue === undefined) previousValue = currentSegment;\n        else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex);\n        started = true;\n    });\n    return previousValue;\n}\n\n/**\n * Callback for lineEach\n *\n * @callback lineEachCallback\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,\n * similar to Array.forEach.\n *\n * @name lineEach\n * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object\n * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @example\n * var multiLine = turf.multiLineString([\n *   [[26, 37], [35, 45]],\n *   [[36, 53], [38, 50], [41, 55]]\n * ]);\n *\n * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=currentLine\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n * });\n */\nfunction lineEach(geojson, callback) {\n    // validation\n    if (!geojson) throw new Error('geojson is required');\n\n    flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) {\n        if (feature.geometry === null) return;\n        var type = feature.geometry.type;\n        var coords = feature.geometry.coordinates;\n        switch (type) {\n        case 'LineString':\n            if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false) return false;\n            break;\n        case 'Polygon':\n            for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n                if (callback(helpers.lineString(coords[geometryIndex], feature.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false;\n            }\n            break;\n        }\n    });\n}\n\n/**\n * Callback for lineReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @callback lineReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed.\n * @param {number} featureIndex The current index of the Feature being processed\n * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed\n * @param {number} geometryIndex The current index of the Geometry being processed\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name lineReduce\n * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object\n * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var multiPoly = turf.multiPolygon([\n *   turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),\n *   turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])\n * ]);\n *\n * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n *   //=previousValue\n *   //=currentLine\n *   //=featureIndex\n *   //=multiFeatureIndex\n *   //=geometryIndex\n *   return currentLine\n * });\n */\nfunction lineReduce(geojson, callback, initialValue) {\n    var previousValue = initialValue;\n    lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n        if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine;\n        else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex);\n    });\n    return previousValue;\n}\n\n/**\n * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n * Point & MultiPoint will always return null.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.segmentIndex=0] Segment Index\n * @param {Object} [options.properties={}] Translate Properties to output LineString\n * @param {BBox} [options.bbox={}] Translate BBox to output LineString\n * @param {number|string} [options.id={}] Translate Id to output LineString\n * @returns {Feature<LineString>} 2-vertex GeoJSON Feature LineString\n * @example\n * var multiLine = turf.multiLineString([\n *     [[10, 10], [50, 30], [30, 40]],\n *     [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findSegment(multiLine);\n * // => Feature<LineString<[[10, 10], [50, 30]]>>\n *\n * // First Segment of 2nd Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: 1});\n * // => Feature<LineString<[[-10, -10], [-50, -30]]>>\n *\n * // Last Segment of Last Multi Feature\n * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});\n * // => Feature<LineString<[[-50, -30], [-30, -40]]>>\n */\nfunction findSegment(geojson, options) {\n    // Optional Parameters\n    options = options || {};\n    if (!helpers.isObject(options)) throw new Error('options is invalid');\n    var featureIndex = options.featureIndex || 0;\n    var multiFeatureIndex = options.multiFeatureIndex || 0;\n    var geometryIndex = options.geometryIndex || 0;\n    var segmentIndex = options.segmentIndex || 0;\n\n    // Find FeatureIndex\n    var properties = options.properties;\n    var geometry;\n\n    switch (geojson.type) {\n    case 'FeatureCollection':\n        if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;\n        properties = properties || geojson.features[featureIndex].properties;\n        geometry = geojson.features[featureIndex].geometry;\n        break;\n    case 'Feature':\n        properties = properties || geojson.properties;\n        geometry = geojson.geometry;\n        break;\n    case 'Point':\n    case 'MultiPoint':\n        return null;\n    case 'LineString':\n    case 'Polygon':\n    case 'MultiLineString':\n    case 'MultiPolygon':\n        geometry = geojson;\n        break;\n    default:\n        throw new Error('geojson is invalid');\n    }\n\n    // Find SegmentIndex\n    if (geometry === null) return null;\n    var coords = geometry.coordinates;\n    switch (geometry.type) {\n    case 'Point':\n    case 'MultiPoint':\n        return null;\n    case 'LineString':\n        if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n        return helpers.lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options);\n    case 'Polygon':\n        if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n        if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n        return helpers.lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options);\n    case 'MultiLineString':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n        return helpers.lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options);\n    case 'MultiPolygon':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n        if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n        return helpers.lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options);\n    }\n    throw new Error('geojson is invalid');\n}\n\n/**\n * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.\n *\n * Negative indexes are permitted.\n *\n * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {number} [options.featureIndex=0] Feature Index\n * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index\n * @param {number} [options.geometryIndex=0] Geometry Index\n * @param {number} [options.coordIndex=0] Coord Index\n * @param {Object} [options.properties={}] Translate Properties to output Point\n * @param {BBox} [options.bbox={}] Translate BBox to output Point\n * @param {number|string} [options.id={}] Translate Id to output Point\n * @returns {Feature<Point>} 2-vertex GeoJSON Feature Point\n * @example\n * var multiLine = turf.multiLineString([\n *     [[10, 10], [50, 30], [30, 40]],\n *     [[-10, -10], [-50, -30], [-30, -40]]\n * ]);\n *\n * // First Segment (defaults are 0)\n * turf.findPoint(multiLine);\n * // => Feature<Point<[10, 10]>>\n *\n * // First Segment of the 2nd Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: 1});\n * // => Feature<Point<[-10, -10]>>\n *\n * // Last Segment of last Multi-Feature\n * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});\n * // => Feature<Point<[-30, -40]>>\n */\nfunction findPoint(geojson, options) {\n    // Optional Parameters\n    options = options || {};\n    if (!helpers.isObject(options)) throw new Error('options is invalid');\n    var featureIndex = options.featureIndex || 0;\n    var multiFeatureIndex = options.multiFeatureIndex || 0;\n    var geometryIndex = options.geometryIndex || 0;\n    var coordIndex = options.coordIndex || 0;\n\n    // Find FeatureIndex\n    var properties = options.properties;\n    var geometry;\n\n    switch (geojson.type) {\n    case 'FeatureCollection':\n        if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;\n        properties = properties || geojson.features[featureIndex].properties;\n        geometry = geojson.features[featureIndex].geometry;\n        break;\n    case 'Feature':\n        properties = properties || geojson.properties;\n        geometry = geojson.geometry;\n        break;\n    case 'Point':\n    case 'MultiPoint':\n        return null;\n    case 'LineString':\n    case 'Polygon':\n    case 'MultiLineString':\n    case 'MultiPolygon':\n        geometry = geojson;\n        break;\n    default:\n        throw new Error('geojson is invalid');\n    }\n\n    // Find Coord Index\n    if (geometry === null) return null;\n    var coords = geometry.coordinates;\n    switch (geometry.type) {\n    case 'Point':\n        return helpers.point(coords, properties, options);\n    case 'MultiPoint':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        return helpers.point(coords[multiFeatureIndex], properties, options);\n    case 'LineString':\n        if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n        return helpers.point(coords[coordIndex], properties, options);\n    case 'Polygon':\n        if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n        if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex;\n        return helpers.point(coords[geometryIndex][coordIndex], properties, options);\n    case 'MultiLineString':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex;\n        return helpers.point(coords[multiFeatureIndex][coordIndex], properties, options);\n    case 'MultiPolygon':\n        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;\n        if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n        if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n        return helpers.point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options);\n    }\n    throw new Error('geojson is invalid');\n}\n\nexports.coordEach = coordEach;\nexports.coordReduce = coordReduce;\nexports.propEach = propEach;\nexports.propReduce = propReduce;\nexports.featureEach = featureEach;\nexports.featureReduce = featureReduce;\nexports.coordAll = coordAll;\nexports.geomEach = geomEach;\nexports.geomReduce = geomReduce;\nexports.flattenEach = flattenEach;\nexports.flattenReduce = flattenReduce;\nexports.segmentEach = segmentEach;\nexports.segmentReduce = segmentReduce;\nexports.lineEach = lineEach;\nexports.lineReduce = lineReduce;\nexports.findSegment = findSegment;\nexports.findPoint = findPoint;\n\n},{\"@turf/helpers\":123}],123:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @module helpers\n */\n/**\n * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.\n *\n * @memberof helpers\n * @type {number}\n */\nexports.earthRadius = 6371008.8;\n/**\n * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.factors = {\n    centimeters: exports.earthRadius * 100,\n    centimetres: exports.earthRadius * 100,\n    degrees: exports.earthRadius / 111325,\n    feet: exports.earthRadius * 3.28084,\n    inches: exports.earthRadius * 39.370,\n    kilometers: exports.earthRadius / 1000,\n    kilometres: exports.earthRadius / 1000,\n    meters: exports.earthRadius,\n    metres: exports.earthRadius,\n    miles: exports.earthRadius / 1609.344,\n    millimeters: exports.earthRadius * 1000,\n    millimetres: exports.earthRadius * 1000,\n    nauticalmiles: exports.earthRadius / 1852,\n    radians: 1,\n    yards: exports.earthRadius / 1.0936,\n};\n/**\n * Units of measurement factors based on 1 meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.unitsFactors = {\n    centimeters: 100,\n    centimetres: 100,\n    degrees: 1 / 111325,\n    feet: 3.28084,\n    inches: 39.370,\n    kilometers: 1 / 1000,\n    kilometres: 1 / 1000,\n    meters: 1,\n    metres: 1,\n    miles: 1 / 1609.344,\n    millimeters: 1000,\n    millimetres: 1000,\n    nauticalmiles: 1 / 1852,\n    radians: 1 / exports.earthRadius,\n    yards: 1 / 1.0936,\n};\n/**\n * Area of measurement factors based on 1 square meter.\n *\n * @memberof helpers\n * @type {Object}\n */\nexports.areaFactors = {\n    acres: 0.000247105,\n    centimeters: 10000,\n    centimetres: 10000,\n    feet: 10.763910417,\n    inches: 1550.003100006,\n    kilometers: 0.000001,\n    kilometres: 0.000001,\n    meters: 1,\n    metres: 1,\n    miles: 3.86e-7,\n    millimeters: 1000000,\n    millimetres: 1000000,\n    yards: 1.195990046,\n};\n/**\n * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.\n *\n * @name feature\n * @param {Geometry} geometry input geometry\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature} a GeoJSON Feature\n * @example\n * var geometry = {\n *   \"type\": \"Point\",\n *   \"coordinates\": [110, 50]\n * };\n *\n * var feature = turf.feature(geometry);\n *\n * //=feature\n */\nfunction feature(geom, properties, options) {\n    if (options === void 0) { options = {}; }\n    var feat = { type: \"Feature\" };\n    if (options.id === 0 || options.id) {\n        feat.id = options.id;\n    }\n    if (options.bbox) {\n        feat.bbox = options.bbox;\n    }\n    feat.properties = properties || {};\n    feat.geometry = geom;\n    return feat;\n}\nexports.feature = feature;\n/**\n * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.\n * For GeometryCollection type use `helpers.geometryCollection`\n *\n * @name geometry\n * @param {string} type Geometry Type\n * @param {Array<any>} coordinates Coordinates\n * @param {Object} [options={}] Optional Parameters\n * @returns {Geometry} a GeoJSON Geometry\n * @example\n * var type = \"Point\";\n * var coordinates = [110, 50];\n * var geometry = turf.geometry(type, coordinates);\n * // => geometry\n */\nfunction geometry(type, coordinates, options) {\n    if (options === void 0) { options = {}; }\n    switch (type) {\n        case \"Point\": return point(coordinates).geometry;\n        case \"LineString\": return lineString(coordinates).geometry;\n        case \"Polygon\": return polygon(coordinates).geometry;\n        case \"MultiPoint\": return multiPoint(coordinates).geometry;\n        case \"MultiLineString\": return multiLineString(coordinates).geometry;\n        case \"MultiPolygon\": return multiPolygon(coordinates).geometry;\n        default: throw new Error(type + \" is invalid\");\n    }\n}\nexports.geometry = geometry;\n/**\n * Creates a {@link Point} {@link Feature} from a Position.\n *\n * @name point\n * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Point>} a Point feature\n * @example\n * var point = turf.point([-75.343, 39.984]);\n *\n * //=point\n */\nfunction point(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"Point\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.point = point;\n/**\n * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.\n *\n * @name points\n * @param {Array<Array<number>>} coordinates an array of Points\n * @param {Object} [properties={}] Translate these properties to each Feature\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Point>} Point Feature\n * @example\n * var points = turf.points([\n *   [-75, 39],\n *   [-80, 45],\n *   [-78, 50]\n * ]);\n *\n * //=points\n */\nfunction points(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    return featureCollection(coordinates.map(function (coords) {\n        return point(coords, properties);\n    }), options);\n}\nexports.points = points;\n/**\n * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.\n *\n * @name polygon\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<Polygon>} Polygon Feature\n * @example\n * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });\n *\n * //=polygon\n */\nfunction polygon(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {\n        var ring = coordinates_1[_i];\n        if (ring.length < 4) {\n            throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");\n        }\n        for (var j = 0; j < ring[ring.length - 1].length; j++) {\n            // Check if first point of Polygon contains two numbers\n            if (ring[ring.length - 1][j] !== ring[0][j]) {\n                throw new Error(\"First and last Position are not equivalent.\");\n            }\n        }\n    }\n    var geom = {\n        type: \"Polygon\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.polygon = polygon;\n/**\n * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.\n *\n * @name polygons\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection\n * @example\n * var polygons = turf.polygons([\n *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],\n *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],\n * ]);\n *\n * //=polygons\n */\nfunction polygons(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    return featureCollection(coordinates.map(function (coords) {\n        return polygon(coords, properties);\n    }), options);\n}\nexports.polygons = polygons;\n/**\n * Creates a {@link LineString} {@link Feature} from an Array of Positions.\n *\n * @name lineString\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<LineString>} LineString Feature\n * @example\n * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});\n * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});\n *\n * //=linestring1\n * //=linestring2\n */\nfunction lineString(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    if (coordinates.length < 2) {\n        throw new Error(\"coordinates must be an array of two or more positions\");\n    }\n    var geom = {\n        type: \"LineString\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.lineString = lineString;\n/**\n * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.\n *\n * @name lineStrings\n * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]\n * associated with the FeatureCollection\n * @param {string|number} [options.id] Identifier associated with the FeatureCollection\n * @returns {FeatureCollection<LineString>} LineString FeatureCollection\n * @example\n * var linestrings = turf.lineStrings([\n *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],\n *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]\n * ]);\n *\n * //=linestrings\n */\nfunction lineStrings(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    return featureCollection(coordinates.map(function (coords) {\n        return lineString(coords, properties);\n    }), options);\n}\nexports.lineStrings = lineStrings;\n/**\n * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.\n *\n * @name featureCollection\n * @param {Feature[]} features input features\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {FeatureCollection} FeatureCollection of Features\n * @example\n * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});\n * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});\n * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});\n *\n * var collection = turf.featureCollection([\n *   locationA,\n *   locationB,\n *   locationC\n * ]);\n *\n * //=collection\n */\nfunction featureCollection(features, options) {\n    if (options === void 0) { options = {}; }\n    var fc = { type: \"FeatureCollection\" };\n    if (options.id) {\n        fc.id = options.id;\n    }\n    if (options.bbox) {\n        fc.bbox = options.bbox;\n    }\n    fc.features = features;\n    return fc;\n}\nexports.featureCollection = featureCollection;\n/**\n * Creates a {@link Feature<MultiLineString>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiLineString\n * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiLineString>} a MultiLineString feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);\n *\n * //=multiLine\n */\nfunction multiLineString(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"MultiLineString\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.multiLineString = multiLineString;\n/**\n * Creates a {@link Feature<MultiPoint>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPoint\n * @param {Array<Array<number>>} coordinates an array of Positions\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPoint>} a MultiPoint feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPt = turf.multiPoint([[0,0],[10,10]]);\n *\n * //=multiPt\n */\nfunction multiPoint(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"MultiPoint\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.multiPoint = multiPoint;\n/**\n * Creates a {@link Feature<MultiPolygon>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name multiPolygon\n * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<MultiPolygon>} a multipolygon feature\n * @throws {Error} if no coordinates are passed\n * @example\n * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);\n *\n * //=multiPoly\n *\n */\nfunction multiPolygon(coordinates, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"MultiPolygon\",\n        coordinates: coordinates,\n    };\n    return feature(geom, properties, options);\n}\nexports.multiPolygon = multiPolygon;\n/**\n * Creates a {@link Feature<GeometryCollection>} based on a\n * coordinate array. Properties can be added optionally.\n *\n * @name geometryCollection\n * @param {Array<Geometry>} geometries an array of GeoJSON Geometries\n * @param {Object} [properties={}] an Object of key-value pairs to add as properties\n * @param {Object} [options={}] Optional Parameters\n * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature\n * @param {string|number} [options.id] Identifier associated with the Feature\n * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature\n * @example\n * var pt = turf.geometry(\"Point\", [100, 0]);\n * var line = turf.geometry(\"LineString\", [[101, 0], [102, 1]]);\n * var collection = turf.geometryCollection([pt, line]);\n *\n * // => collection\n */\nfunction geometryCollection(geometries, properties, options) {\n    if (options === void 0) { options = {}; }\n    var geom = {\n        type: \"GeometryCollection\",\n        geometries: geometries,\n    };\n    return feature(geom, properties, options);\n}\nexports.geometryCollection = geometryCollection;\n/**\n * Round number to precision\n *\n * @param {number} num Number\n * @param {number} [precision=0] Precision\n * @returns {number} rounded number\n * @example\n * turf.round(120.4321)\n * //=120\n *\n * turf.round(120.4321, 2)\n * //=120.43\n */\nfunction round(num, precision) {\n    if (precision === void 0) { precision = 0; }\n    if (precision && !(precision >= 0)) {\n        throw new Error(\"precision must be a positive number\");\n    }\n    var multiplier = Math.pow(10, precision || 0);\n    return Math.round(num * multiplier) / multiplier;\n}\nexports.round = round;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name radiansToLength\n * @param {number} radians in radians across the sphere\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, or kilometers inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} distance\n */\nfunction radiansToLength(radians, units) {\n    if (units === void 0) { units = \"kilometers\"; }\n    var factor = exports.factors[units];\n    if (!factor) {\n        throw new Error(units + \" units is invalid\");\n    }\n    return radians * factor;\n}\nexports.radiansToLength = radiansToLength;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @name lengthToRadians\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, or kilometers inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} radians\n */\nfunction lengthToRadians(distance, units) {\n    if (units === void 0) { units = \"kilometers\"; }\n    var factor = exports.factors[units];\n    if (!factor) {\n        throw new Error(units + \" units is invalid\");\n    }\n    return distance / factor;\n}\nexports.lengthToRadians = lengthToRadians;\n/**\n * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet\n *\n * @name lengthToDegrees\n * @param {number} distance in real units\n * @param {string} [units=\"kilometers\"] can be degrees, radians, miles, or kilometers inches, yards, metres,\n * meters, kilometres, kilometers.\n * @returns {number} degrees\n */\nfunction lengthToDegrees(distance, units) {\n    return radiansToDegrees(lengthToRadians(distance, units));\n}\nexports.lengthToDegrees = lengthToDegrees;\n/**\n * Converts any bearing angle from the north line direction (positive clockwise)\n * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line\n *\n * @name bearingToAzimuth\n * @param {number} bearing angle, between -180 and +180 degrees\n * @returns {number} angle between 0 and 360 degrees\n */\nfunction bearingToAzimuth(bearing) {\n    var angle = bearing % 360;\n    if (angle < 0) {\n        angle += 360;\n    }\n    return angle;\n}\nexports.bearingToAzimuth = bearingToAzimuth;\n/**\n * Converts an angle in radians to degrees\n *\n * @name radiansToDegrees\n * @param {number} radians angle in radians\n * @returns {number} degrees between 0 and 360 degrees\n */\nfunction radiansToDegrees(radians) {\n    var degrees = radians % (2 * Math.PI);\n    return degrees * 180 / Math.PI;\n}\nexports.radiansToDegrees = radiansToDegrees;\n/**\n * Converts an angle in degrees to radians\n *\n * @name degreesToRadians\n * @param {number} degrees angle between 0 and 360 degrees\n * @returns {number} angle in radians\n */\nfunction degreesToRadians(degrees) {\n    var radians = degrees % 360;\n    return radians * Math.PI / 180;\n}\nexports.degreesToRadians = degreesToRadians;\n/**\n * Converts a length to the requested unit.\n * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet\n *\n * @param {number} length to be converted\n * @param {Units} [originalUnit=\"kilometers\"] of the length\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted length\n */\nfunction convertLength(length, originalUnit, finalUnit) {\n    if (originalUnit === void 0) { originalUnit = \"kilometers\"; }\n    if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n    if (!(length >= 0)) {\n        throw new Error(\"length must be a positive number\");\n    }\n    return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nexports.convertLength = convertLength;\n/**\n * Converts a area to the requested unit.\n * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches\n * @param {number} area to be converted\n * @param {Units} [originalUnit=\"meters\"] of the distance\n * @param {Units} [finalUnit=\"kilometers\"] returned unit\n * @returns {number} the converted distance\n */\nfunction convertArea(area, originalUnit, finalUnit) {\n    if (originalUnit === void 0) { originalUnit = \"meters\"; }\n    if (finalUnit === void 0) { finalUnit = \"kilometers\"; }\n    if (!(area >= 0)) {\n        throw new Error(\"area must be a positive number\");\n    }\n    var startFactor = exports.areaFactors[originalUnit];\n    if (!startFactor) {\n        throw new Error(\"invalid original units\");\n    }\n    var finalFactor = exports.areaFactors[finalUnit];\n    if (!finalFactor) {\n        throw new Error(\"invalid final units\");\n    }\n    return (area / startFactor) * finalFactor;\n}\nexports.convertArea = convertArea;\n/**\n * isNumber\n *\n * @param {*} num Number to validate\n * @returns {boolean} true/false\n * @example\n * turf.isNumber(123)\n * //=true\n * turf.isNumber('foo')\n * //=false\n */\nfunction isNumber(num) {\n    return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\\s*$/.test(num);\n}\nexports.isNumber = isNumber;\n/**\n * isObject\n *\n * @param {*} input variable to validate\n * @returns {boolean} true/false\n * @example\n * turf.isObject({elevation: 10})\n * //=true\n * turf.isObject('foo')\n * //=false\n */\nfunction isObject(input) {\n    return (!!input) && (input.constructor === Object);\n}\nexports.isObject = isObject;\n/**\n * Validate BBox\n *\n * @private\n * @param {Array<number>} bbox BBox to validate\n * @returns {void}\n * @throws Error if BBox is not valid\n * @example\n * validateBBox([-180, -40, 110, 50])\n * //=OK\n * validateBBox([-180, -40])\n * //=Error\n * validateBBox('Foo')\n * //=Error\n * validateBBox(5)\n * //=Error\n * validateBBox(null)\n * //=Error\n * validateBBox(undefined)\n * //=Error\n */\nfunction validateBBox(bbox) {\n    if (!bbox) {\n        throw new Error(\"bbox is required\");\n    }\n    if (!Array.isArray(bbox)) {\n        throw new Error(\"bbox must be an Array\");\n    }\n    if (bbox.length !== 4 && bbox.length !== 6) {\n        throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n    }\n    bbox.forEach(function (num) {\n        if (!isNumber(num)) {\n            throw new Error(\"bbox must only contain numbers\");\n        }\n    });\n}\nexports.validateBBox = validateBBox;\n/**\n * Validate Id\n *\n * @private\n * @param {string|number} id Id to validate\n * @returns {void}\n * @throws Error if Id is not valid\n * @example\n * validateId([-180, -40, 110, 50])\n * //=Error\n * validateId([-180, -40])\n * //=Error\n * validateId('Foo')\n * //=OK\n * validateId(5)\n * //=OK\n * validateId(null)\n * //=Error\n * validateId(undefined)\n * //=Error\n */\nfunction validateId(id) {\n    if (!id) {\n        throw new Error(\"id is required\");\n    }\n    if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n        throw new Error(\"id must be a number or a string\");\n    }\n}\nexports.validateId = validateId;\n// Deprecated methods\nfunction radians2degrees() {\n    throw new Error(\"method has been renamed to `radiansToDegrees`\");\n}\nexports.radians2degrees = radians2degrees;\nfunction degrees2radians() {\n    throw new Error(\"method has been renamed to `degreesToRadians`\");\n}\nexports.degrees2radians = degrees2radians;\nfunction distanceToDegrees() {\n    throw new Error(\"method has been renamed to `lengthToDegrees`\");\n}\nexports.distanceToDegrees = distanceToDegrees;\nfunction distanceToRadians() {\n    throw new Error(\"method has been renamed to `lengthToRadians`\");\n}\nexports.distanceToRadians = distanceToRadians;\nfunction radiansToDistance() {\n    throw new Error(\"method has been renamed to `radiansToLength`\");\n}\nexports.radiansToDistance = radiansToDistance;\nfunction bearingToAngle() {\n    throw new Error(\"method has been renamed to `bearingToAzimuth`\");\n}\nexports.bearingToAngle = bearingToAngle;\nfunction convertDistance() {\n    throw new Error(\"method has been renamed to `convertLength`\");\n}\nexports.convertDistance = convertDistance;\n\n},{}],124:[function(require,module,exports){\n\"use strict\";\nvar __importStar = (this && this.__importStar) || function (mod) {\n    if (mod && mod.__esModule) return mod;\n    var result = {};\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n    result[\"default\"] = mod;\n    return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar martinez = __importStar(require(\"martinez-polygon-clipping\"));\n/**\n * Takes two {@link Polygon|polygon} or {@link MultiPolygon|multi-polygon} geometries and\n * finds their polygonal intersection. If they don't intersect, returns null.\n *\n * @name intersect\n * @param {Feature<Polygon | MultiPolygon>} poly1 the first polygon or multipolygon\n * @param {Feature<Polygon | MultiPolygon>} poly2 the second polygon or multipolygon\n * @param {Object} [options={}] Optional Parameters\n * @param {Object} [options.properties={}] Translate GeoJSON Properties to Feature\n * @returns {Feature|null} returns a feature representing the area they share (either a {@link Polygon} or\n * {@link MultiPolygon}). If they do not share any area, returns `null`.\n * @example\n * var poly1 = turf.polygon([[\n *   [-122.801742, 45.48565],\n *   [-122.801742, 45.60491],\n *   [-122.584762, 45.60491],\n *   [-122.584762, 45.48565],\n *   [-122.801742, 45.48565]\n * ]]);\n *\n * var poly2 = turf.polygon([[\n *   [-122.520217, 45.535693],\n *   [-122.64038, 45.553967],\n *   [-122.720031, 45.526554],\n *   [-122.669906, 45.507309],\n *   [-122.723464, 45.446643],\n *   [-122.532577, 45.408574],\n *   [-122.487258, 45.477466],\n *   [-122.520217, 45.535693]\n * ]]);\n *\n * var intersection = turf.intersect(poly1, poly2);\n *\n * //addToMap\n * var addToMap = [poly1, poly2, intersection];\n */\nfunction intersect(poly1, poly2, options) {\n    if (options === void 0) { options = {}; }\n    var geom1 = invariant_1.getGeom(poly1);\n    var geom2 = invariant_1.getGeom(poly2);\n    if (geom1.type === \"Polygon\" && geom2.type === \"Polygon\") {\n        var intersection = martinez.intersection(geom1.coordinates, geom2.coordinates);\n        if (intersection === null || intersection.length === 0) {\n            return null;\n        }\n        if (intersection.length === 1) {\n            var start = intersection[0][0][0];\n            var end = intersection[0][0][intersection[0][0].length - 1];\n            if (start[0] === end[0] && start[1] === end[1]) {\n                return helpers_1.polygon(intersection[0], options.properties);\n            }\n            return null;\n        }\n        return helpers_1.multiPolygon(intersection, options.properties);\n    }\n    else if (geom1.type === \"MultiPolygon\") {\n        var resultCoords = [];\n        // iterate through the polygon and run intersect with each part, adding to the resultCoords.\n        for (var _i = 0, _a = geom1.coordinates; _i < _a.length; _i++) {\n            var coords = _a[_i];\n            var subGeom = invariant_1.getGeom(helpers_1.polygon(coords));\n            var subIntersection = intersect(subGeom, geom2);\n            if (subIntersection) {\n                var subIntGeom = invariant_1.getGeom(subIntersection);\n                if (subIntGeom.type === \"Polygon\") {\n                    resultCoords.push(subIntGeom.coordinates);\n                }\n                else if (subIntGeom.type === \"MultiPolygon\") {\n                    resultCoords = resultCoords.concat(subIntGeom.coordinates);\n                }\n                else {\n                    throw new Error(\"intersection is invalid\");\n                }\n            }\n        }\n        // Make a polygon with the result\n        if (resultCoords.length === 0) {\n            return null;\n        }\n        if (resultCoords.length === 1) {\n            return helpers_1.polygon(resultCoords[0], options.properties);\n        }\n        else {\n            return helpers_1.multiPolygon(resultCoords, options.properties);\n        }\n    }\n    else if (geom2.type === \"MultiPolygon\") {\n        // geom1 is a polygon and geom2 a multiPolygon,\n        // put the multiPolygon first and fallback to the previous case.\n        return intersect(geom2, geom1);\n    }\n    else {\n        // handle invalid geometry types\n        throw new Error(\"poly1 and poly2 must be either polygons or multiPolygons\");\n    }\n}\nexports.default = intersect;\n\n},{\"@turf/helpers\":123,\"@turf/invariant\":125,\"martinez-polygon-clipping\":265}],125:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\n/**\n * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.\n *\n * @name getCoord\n * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers\n * @returns {Array<number>} coordinates\n * @example\n * var pt = turf.point([10, 10]);\n *\n * var coord = turf.getCoord(pt);\n * //= [10, 10]\n */\nfunction getCoord(coord) {\n    if (!coord) {\n        throw new Error(\"coord is required\");\n    }\n    if (!Array.isArray(coord)) {\n        if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n            return coord.geometry.coordinates;\n        }\n        if (coord.type === \"Point\") {\n            return coord.coordinates;\n        }\n    }\n    if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n        return coord;\n    }\n    throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nexports.getCoord = getCoord;\n/**\n * Unwrap coordinates from a Feature, Geometry Object or an Array\n *\n * @name getCoords\n * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array\n * @returns {Array<any>} coordinates\n * @example\n * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);\n *\n * var coords = turf.getCoords(poly);\n * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]\n */\nfunction getCoords(coords) {\n    if (Array.isArray(coords)) {\n        return coords;\n    }\n    // Feature\n    if (coords.type === \"Feature\") {\n        if (coords.geometry !== null) {\n            return coords.geometry.coordinates;\n        }\n    }\n    else {\n        // Geometry\n        if (coords.coordinates) {\n            return coords.coordinates;\n        }\n    }\n    throw new Error(\"coords must be GeoJSON Feature, Geometry Object or an Array\");\n}\nexports.getCoords = getCoords;\n/**\n * Checks if coordinates contains a number\n *\n * @name containsNumber\n * @param {Array<any>} coordinates GeoJSON Coordinates\n * @returns {boolean} true if Array contains a number\n */\nfunction containsNumber(coordinates) {\n    if (coordinates.length > 1 && helpers_1.isNumber(coordinates[0]) && helpers_1.isNumber(coordinates[1])) {\n        return true;\n    }\n    if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n        return containsNumber(coordinates[0]);\n    }\n    throw new Error(\"coordinates must only contain numbers\");\n}\nexports.containsNumber = containsNumber;\n/**\n * Enforce expectations about types of GeoJSON objects for Turf.\n *\n * @name geojsonType\n * @param {GeoJSON} value any GeoJSON object\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction geojsonType(value, type, name) {\n    if (!type || !name) {\n        throw new Error(\"type and name required\");\n    }\n    if (!value || value.type !== type) {\n        throw new Error(\"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type);\n    }\n}\nexports.geojsonType = geojsonType;\n/**\n * Enforce expectations about types of {@link Feature} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name featureOf\n * @param {Feature} feature a feature with an expected geometry type\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} error if value is not the expected type.\n */\nfunction featureOf(feature, type, name) {\n    if (!feature) {\n        throw new Error(\"No feature passed\");\n    }\n    if (!name) {\n        throw new Error(\".featureOf() requires a name\");\n    }\n    if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n        throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n    }\n    if (!feature.geometry || feature.geometry.type !== type) {\n        throw new Error(\"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type);\n    }\n}\nexports.featureOf = featureOf;\n/**\n * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.\n * Internally this uses {@link geojsonType} to judge geometry types.\n *\n * @name collectionOf\n * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged\n * @param {string} type expected GeoJSON type\n * @param {string} name name of calling function\n * @throws {Error} if value is not the expected type.\n */\nfunction collectionOf(featureCollection, type, name) {\n    if (!featureCollection) {\n        throw new Error(\"No featureCollection passed\");\n    }\n    if (!name) {\n        throw new Error(\".collectionOf() requires a name\");\n    }\n    if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n        throw new Error(\"Invalid input to \" + name + \", FeatureCollection required\");\n    }\n    for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {\n        var feature = _a[_i];\n        if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n            throw new Error(\"Invalid input to \" + name + \", Feature with geometry required\");\n        }\n        if (!feature.geometry || feature.geometry.type !== type) {\n            throw new Error(\"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type);\n        }\n    }\n}\nexports.collectionOf = collectionOf;\n/**\n * Get Geometry from Feature or Geometry Object\n *\n * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object\n * @returns {Geometry|null} GeoJSON Geometry Object\n * @throws {Error} if geojson is not a Feature or Geometry Object\n * @example\n * var point = {\n *   \"type\": \"Feature\",\n *   \"properties\": {},\n *   \"geometry\": {\n *     \"type\": \"Point\",\n *     \"coordinates\": [110, 40]\n *   }\n * }\n * var geom = turf.getGeom(point)\n * //={\"type\": \"Point\", \"coordinates\": [110, 40]}\n */\nfunction getGeom(geojson) {\n    if (geojson.type === \"Feature\") {\n        return geojson.geometry;\n    }\n    return geojson;\n}\nexports.getGeom = getGeom;\n/**\n * Get GeoJSON object's type, Geometry type is prioritize.\n *\n * @param {GeoJSON} geojson GeoJSON object\n * @param {string} [name=\"geojson\"] name of the variable to display in error message\n * @returns {string} GeoJSON type\n * @example\n * var point = {\n *   \"type\": \"Feature\",\n *   \"properties\": {},\n *   \"geometry\": {\n *     \"type\": \"Point\",\n *     \"coordinates\": [110, 40]\n *   }\n * }\n * var geom = turf.getType(point)\n * //=\"Point\"\n */\nfunction getType(geojson, name) {\n    if (geojson.type === \"FeatureCollection\") {\n        return \"FeatureCollection\";\n    }\n    if (geojson.type === \"GeometryCollection\") {\n        return \"GeometryCollection\";\n    }\n    if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n        return geojson.geometry.type;\n    }\n    return geojson.type;\n}\nexports.getType = getType;\n\n},{\"@turf/helpers\":123}],126:[function(require,module,exports){\n\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar line_segment_1 = __importDefault(require(\"@turf/line-segment\"));\nvar meta_1 = require(\"@turf/meta\");\nvar geojson_rbush_1 = __importDefault(require(\"geojson-rbush\"));\n/**\n * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s).\n *\n * @name lineIntersect\n * @param {GeoJSON} line1 any LineString or Polygon\n * @param {GeoJSON} line2 any LineString or Polygon\n * @returns {FeatureCollection<Point>} point(s) that intersect both\n * @example\n * var line1 = turf.lineString([[126, -11], [129, -21]]);\n * var line2 = turf.lineString([[123, -18], [131, -14]]);\n * var intersects = turf.lineIntersect(line1, line2);\n *\n * //addToMap\n * var addToMap = [line1, line2, intersects]\n */\nfunction lineIntersect(line1, line2) {\n    var unique = {};\n    var results = [];\n    // First, normalize geometries to features\n    // Then, handle simple 2-vertex segments\n    if (line1.type === \"LineString\") {\n        line1 = helpers_1.feature(line1);\n    }\n    if (line2.type === \"LineString\") {\n        line2 = helpers_1.feature(line2);\n    }\n    if (line1.type === \"Feature\" &&\n        line2.type === \"Feature\" &&\n        line1.geometry !== null &&\n        line2.geometry !== null &&\n        line1.geometry.type === \"LineString\" &&\n        line2.geometry.type === \"LineString\" &&\n        line1.geometry.coordinates.length === 2 &&\n        line2.geometry.coordinates.length === 2) {\n        var intersect = intersects(line1, line2);\n        if (intersect) {\n            results.push(intersect);\n        }\n        return helpers_1.featureCollection(results);\n    }\n    // Handles complex GeoJSON Geometries\n    var tree = geojson_rbush_1.default();\n    tree.load(line_segment_1.default(line2));\n    meta_1.featureEach(line_segment_1.default(line1), function (segment) {\n        meta_1.featureEach(tree.search(segment), function (match) {\n            var intersect = intersects(segment, match);\n            if (intersect) {\n                // prevent duplicate points https://github.com/Turfjs/turf/issues/688\n                var key = invariant_1.getCoords(intersect).join(\",\");\n                if (!unique[key]) {\n                    unique[key] = true;\n                    results.push(intersect);\n                }\n            }\n        });\n    });\n    return helpers_1.featureCollection(results);\n}\n/**\n * Find a point that intersects LineStrings with two coordinates each\n *\n * @private\n * @param {Feature<LineString>} line1 GeoJSON LineString (Must only contain 2 coordinates)\n * @param {Feature<LineString>} line2 GeoJSON LineString (Must only contain 2 coordinates)\n * @returns {Feature<Point>} intersecting GeoJSON Point\n */\nfunction intersects(line1, line2) {\n    var coords1 = invariant_1.getCoords(line1);\n    var coords2 = invariant_1.getCoords(line2);\n    if (coords1.length !== 2) {\n        throw new Error(\"<intersects> line1 must only contain 2 coordinates\");\n    }\n    if (coords2.length !== 2) {\n        throw new Error(\"<intersects> line2 must only contain 2 coordinates\");\n    }\n    var x1 = coords1[0][0];\n    var y1 = coords1[0][1];\n    var x2 = coords1[1][0];\n    var y2 = coords1[1][1];\n    var x3 = coords2[0][0];\n    var y3 = coords2[0][1];\n    var x4 = coords2[1][0];\n    var y4 = coords2[1][1];\n    var denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1));\n    var numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3));\n    var numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3));\n    if (denom === 0) {\n        if (numeA === 0 && numeB === 0) {\n            return null;\n        }\n        return null;\n    }\n    var uA = numeA / denom;\n    var uB = numeB / denom;\n    if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {\n        var x = x1 + (uA * (x2 - x1));\n        var y = y1 + (uA * (y2 - y1));\n        return helpers_1.point([x, y]);\n    }\n    return null;\n}\nexports.default = lineIntersect;\n\n},{\"@turf/helpers\":123,\"@turf/invariant\":125,\"@turf/line-segment\":128,\"@turf/meta\":127,\"geojson-rbush\":224}],127:[function(require,module,exports){\narguments[4][122][0].apply(exports,arguments)\n},{\"@turf/helpers\":123,\"dup\":122}],128:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\nvar meta_1 = require(\"@turf/meta\");\n/**\n * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a\n * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}.\n *\n * @name lineSegment\n * @param {GeoJSON} geojson GeoJSON Polygon or LineString\n * @returns {FeatureCollection<LineString>} 2-vertex line segments\n * @example\n * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);\n * var segments = turf.lineSegment(polygon);\n *\n * //addToMap\n * var addToMap = [polygon, segments]\n */\nfunction lineSegment(geojson) {\n    if (!geojson) {\n        throw new Error(\"geojson is required\");\n    }\n    var results = [];\n    meta_1.flattenEach(geojson, function (feature) {\n        lineSegmentFeature(feature, results);\n    });\n    return helpers_1.featureCollection(results);\n}\n/**\n * Line Segment\n *\n * @private\n * @param {Feature<LineString|Polygon>} geojson Line or polygon feature\n * @param {Array} results push to results\n * @returns {void}\n */\nfunction lineSegmentFeature(geojson, results) {\n    var coords = [];\n    var geometry = geojson.geometry;\n    if (geometry !== null) {\n        switch (geometry.type) {\n            case \"Polygon\":\n                coords = invariant_1.getCoords(geometry);\n                break;\n            case \"LineString\":\n                coords = [invariant_1.getCoords(geometry)];\n        }\n        coords.forEach(function (coord) {\n            var segments = createSegments(coord, geojson.properties);\n            segments.forEach(function (segment) {\n                segment.id = results.length;\n                results.push(segment);\n            });\n        });\n    }\n}\n/**\n * Create Segments from LineString coordinates\n *\n * @private\n * @param {Array<Array<number>>} coords LineString coordinates\n * @param {*} properties GeoJSON properties\n * @returns {Array<Feature<LineString>>} line segments\n */\nfunction createSegments(coords, properties) {\n    var segments = [];\n    coords.reduce(function (previousCoords, currentCoords) {\n        var segment = helpers_1.lineString([previousCoords, currentCoords], properties);\n        segment.bbox = bbox(previousCoords, currentCoords);\n        segments.push(segment);\n        return currentCoords;\n    });\n    return segments;\n}\n/**\n * Create BBox between two coordinates (faster than @turf/bbox)\n *\n * @private\n * @param {Array<number>} coords1 Point coordinate\n * @param {Array<number>} coords2 Point coordinate\n * @returns {BBox} [west, south, east, north]\n */\nfunction bbox(coords1, coords2) {\n    var x1 = coords1[0];\n    var y1 = coords1[1];\n    var x2 = coords2[0];\n    var y2 = coords2[1];\n    var west = (x1 < x2) ? x1 : x2;\n    var south = (y1 < y2) ? y1 : y2;\n    var east = (x1 > x2) ? x1 : x2;\n    var north = (y1 > y2) ? y1 : y2;\n    return [west, south, east, north];\n}\nexports.default = lineSegment;\n\n},{\"@turf/helpers\":123,\"@turf/invariant\":125,\"@turf/meta\":129}],129:[function(require,module,exports){\narguments[4][122][0].apply(exports,arguments)\n},{\"@turf/helpers\":123,\"dup\":122}],130:[function(require,module,exports){\n/**\n * Callback for coordEach\n *\n * @private\n * @callback coordEachCallback\n * @param {[number, number]} currentCoords The current coordinates being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()\n *\n * @name coordEach\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (currentCoords, currentIndex)\n * @param {boolean} [excludeWrapCoord=false] whether or not to include\n * the final coordinate of LinearRings that wraps the ring in its iteration.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.coordEach(features, function (currentCoords, currentIndex) {\n *   //=currentCoords\n *   //=currentIndex\n * });\n */\nfunction coordEach(layer, callback, excludeWrapCoord) {\n    var i, j, k, g, l, geometry, stopG, coords,\n        geometryMaybeCollection,\n        wrapShrink = 0,\n        currentIndex = 0,\n        isGeometryCollection,\n        isFeatureCollection = layer.type === 'FeatureCollection',\n        isFeature = layer.type === 'Feature',\n        stop = isFeatureCollection ? layer.features.length : 1;\n\n  // This logic may look a little weird. The reason why it is that way\n  // is because it's trying to be fast. GeoJSON supports multiple kinds\n  // of objects at its root: FeatureCollection, Features, Geometries.\n  // This function has the responsibility of handling all of them, and that\n  // means that some of the `for` loops you see below actually just don't apply\n  // to certain inputs. For instance, if you give this just a\n  // Point geometry, then both loops are short-circuited and all we do\n  // is gradually rename the input until it's called 'geometry'.\n  //\n  // This also aims to allocate as few resources as possible: just a\n  // few numbers and booleans, rather than any temporary arrays as would\n  // be required with the normalization approach.\n    for (i = 0; i < stop; i++) {\n\n        geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry :\n        (isFeature ? layer.geometry : layer));\n        isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection';\n        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n        for (g = 0; g < stopG; g++) {\n            geometry = isGeometryCollection ?\n            geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n            coords = geometry.coordinates;\n\n            wrapShrink = (excludeWrapCoord &&\n                (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon')) ?\n                1 : 0;\n\n            if (geometry.type === 'Point') {\n                callback(coords, currentIndex);\n                currentIndex++;\n            } else if (geometry.type === 'LineString' || geometry.type === 'MultiPoint') {\n                for (j = 0; j < coords.length; j++) {\n                    callback(coords[j], currentIndex);\n                    currentIndex++;\n                }\n            } else if (geometry.type === 'Polygon' || geometry.type === 'MultiLineString') {\n                for (j = 0; j < coords.length; j++)\n                    for (k = 0; k < coords[j].length - wrapShrink; k++) {\n                        callback(coords[j][k], currentIndex);\n                        currentIndex++;\n                    }\n            } else if (geometry.type === 'MultiPolygon') {\n                for (j = 0; j < coords.length; j++)\n                    for (k = 0; k < coords[j].length; k++)\n                        for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n                            callback(coords[j][k][l], currentIndex);\n                            currentIndex++;\n                        }\n            } else if (geometry.type === 'GeometryCollection') {\n                for (j = 0; j < geometry.geometries.length; j++)\n                    coordEach(geometry.geometries[j], callback, excludeWrapCoord);\n            } else {\n                throw new Error('Unknown Geometry Type');\n            }\n        }\n    }\n}\nmodule.exports.coordEach = coordEach;\n\n/**\n * Callback for coordReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @private\n * @callback coordReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {[number, number]} currentCoords The current coordinate being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Reduce coordinates in any GeoJSON object, similar to Array.reduce()\n *\n * @name coordReduce\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentCoords, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @param {boolean} [excludeWrapCoord=false] whether or not to include\n * the final coordinate of LinearRings that wraps the ring in its iteration.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.coordReduce(features, function (previousValue, currentCoords, currentIndex) {\n *   //=previousValue\n *   //=currentCoords\n *   //=currentIndex\n *   return currentCoords;\n * });\n */\nfunction coordReduce(layer, callback, initialValue, excludeWrapCoord) {\n    var previousValue = initialValue;\n    coordEach(layer, function (currentCoords, currentIndex) {\n        if (currentIndex === 0 && initialValue === undefined) {\n            previousValue = currentCoords;\n        } else {\n            previousValue = callback(previousValue, currentCoords, currentIndex);\n        }\n    }, excludeWrapCoord);\n    return previousValue;\n}\nmodule.exports.coordReduce = coordReduce;\n\n/**\n * Callback for propEach\n *\n * @private\n * @callback propEachCallback\n * @param {*} currentProperties The current properties being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Iterate over properties in any GeoJSON object, similar to Array.forEach()\n *\n * @name propEach\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (currentProperties, currentIndex)\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"foo\": \"bar\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"hello\": \"world\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.propEach(features, function (currentProperties, currentIndex) {\n *   //=currentProperties\n *   //=currentIndex\n * });\n */\nfunction propEach(layer, callback) {\n    var i;\n    switch (layer.type) {\n    case 'FeatureCollection':\n        for (i = 0; i < layer.features.length; i++) {\n            callback(layer.features[i].properties, i);\n        }\n        break;\n    case 'Feature':\n        callback(layer.properties, 0);\n        break;\n    }\n}\nmodule.exports.propEach = propEach;\n\n\n/**\n * Callback for propReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @private\n * @callback propReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentProperties The current properties being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Reduce properties in any GeoJSON object into a single value,\n * similar to how Array.reduce works. However, in this case we lazily run\n * the reduction, so an array of all properties is unnecessary.\n *\n * @name propReduce\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentProperties, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"foo\": \"bar\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"hello\": \"world\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.propReduce(features, function (previousValue, currentProperties, currentIndex) {\n *   //=previousValue\n *   //=currentProperties\n *   //=currentIndex\n *   return currentProperties\n * });\n */\nfunction propReduce(layer, callback, initialValue) {\n    var previousValue = initialValue;\n    propEach(layer, function (currentProperties, currentIndex) {\n        if (currentIndex === 0 && initialValue === undefined) {\n            previousValue = currentProperties;\n        } else {\n            previousValue = callback(previousValue, currentProperties, currentIndex);\n        }\n    });\n    return previousValue;\n}\nmodule.exports.propReduce = propReduce;\n\n/**\n * Callback for featureEach\n *\n * @private\n * @callback featureEachCallback\n * @param {Feature<any>} currentFeature The current feature being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Iterate over features in any GeoJSON object, similar to\n * Array.forEach.\n *\n * @name featureEach\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (currentFeature, currentIndex)\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.featureEach(features, function (currentFeature, currentIndex) {\n *   //=currentFeature\n *   //=currentIndex\n * });\n */\nfunction featureEach(layer, callback) {\n    if (layer.type === 'Feature') {\n        callback(layer, 0);\n    } else if (layer.type === 'FeatureCollection') {\n        for (var i = 0; i < layer.features.length; i++) {\n            callback(layer.features[i], i);\n        }\n    }\n}\nmodule.exports.featureEach = featureEach;\n\n/**\n * Callback for featureReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @private\n * @callback featureReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {Feature<any>} currentFeature The current Feature being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Reduce features in any GeoJSON object, similar to Array.reduce().\n *\n * @name featureReduce\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentFeature, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"foo\": \"bar\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"hello\": \"world\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.featureReduce(features, function (previousValue, currentFeature, currentIndex) {\n *   //=previousValue\n *   //=currentFeature\n *   //=currentIndex\n *   return currentFeature\n * });\n */\nfunction featureReduce(layer, callback, initialValue) {\n    var previousValue = initialValue;\n    featureEach(layer, function (currentFeature, currentIndex) {\n        if (currentIndex === 0 && initialValue === undefined) {\n            previousValue = currentFeature;\n        } else {\n            previousValue = callback(previousValue, currentFeature, currentIndex);\n        }\n    });\n    return previousValue;\n}\nmodule.exports.featureReduce = featureReduce;\n\n/**\n * Get all coordinates from any GeoJSON object.\n *\n * @name coordAll\n * @param {Object} layer any GeoJSON object\n * @returns {Array<Array<number>>} coordinate position array\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * var coords = turf.coordAll(features);\n * //=coords\n */\nfunction coordAll(layer) {\n    var coords = [];\n    coordEach(layer, function (coord) {\n        coords.push(coord);\n    });\n    return coords;\n}\nmodule.exports.coordAll = coordAll;\n\n/**\n * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()\n *\n * @name geomEach\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (currentGeometry, currentIndex)\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.geomEach(features, function (currentGeometry, currentIndex) {\n *   //=currentGeometry\n *   //=currentIndex\n * });\n */\nfunction geomEach(layer, callback) {\n    var i, j, g, geometry, stopG,\n        geometryMaybeCollection,\n        isGeometryCollection,\n        currentIndex = 0,\n        isFeatureCollection = layer.type === 'FeatureCollection',\n        isFeature = layer.type === 'Feature',\n        stop = isFeatureCollection ? layer.features.length : 1;\n\n  // This logic may look a little weird. The reason why it is that way\n  // is because it's trying to be fast. GeoJSON supports multiple kinds\n  // of objects at its root: FeatureCollection, Features, Geometries.\n  // This function has the responsibility of handling all of them, and that\n  // means that some of the `for` loops you see below actually just don't apply\n  // to certain inputs. For instance, if you give this just a\n  // Point geometry, then both loops are short-circuited and all we do\n  // is gradually rename the input until it's called 'geometry'.\n  //\n  // This also aims to allocate as few resources as possible: just a\n  // few numbers and booleans, rather than any temporary arrays as would\n  // be required with the normalization approach.\n    for (i = 0; i < stop; i++) {\n\n        geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry :\n        (isFeature ? layer.geometry : layer));\n        isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection';\n        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n\n        for (g = 0; g < stopG; g++) {\n            geometry = isGeometryCollection ?\n            geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n\n            if (geometry.type === 'Point' ||\n                geometry.type === 'LineString' ||\n                geometry.type === 'MultiPoint' ||\n                geometry.type === 'Polygon' ||\n                geometry.type === 'MultiLineString' ||\n                geometry.type === 'MultiPolygon') {\n                callback(geometry, currentIndex);\n                currentIndex++;\n            } else if (geometry.type === 'GeometryCollection') {\n                for (j = 0; j < geometry.geometries.length; j++) {\n                    callback(geometry.geometries[j], currentIndex);\n                    currentIndex++;\n                }\n            } else {\n                throw new Error('Unknown Geometry Type');\n            }\n        }\n    }\n}\nmodule.exports.geomEach = geomEach;\n\n/**\n * Callback for geomReduce\n *\n * The first time the callback function is called, the values provided as arguments depend\n * on whether the reduce method has an initialValue argument.\n *\n * If an initialValue is provided to the reduce method:\n *  - The previousValue argument is initialValue.\n *  - The currentValue argument is the value of the first element present in the array.\n *\n * If an initialValue is not provided:\n *  - The previousValue argument is the value of the first element present in the array.\n *  - The currentValue argument is the value of the second element present in the array.\n *\n * @private\n * @callback geomReduceCallback\n * @param {*} previousValue The accumulated value previously returned in the last invocation\n * of the callback, or initialValue, if supplied.\n * @param {*} currentGeometry The current Feature being processed.\n * @param {number} currentIndex The index of the current element being processed in the\n * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise.\n */\n\n/**\n * Reduce geometry in any GeoJSON object, similar to Array.reduce().\n *\n * @name geomReduce\n * @param {Object} layer any GeoJSON object\n * @param {Function} callback a method that takes (previousValue, currentGeometry, currentIndex)\n * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.\n * @returns {*} The value that results from the reduction.\n * @example\n * var features = {\n *   \"type\": \"FeatureCollection\",\n *   \"features\": [\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"foo\": \"bar\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [26, 37]\n *       }\n *     },\n *     {\n *       \"type\": \"Feature\",\n *       \"properties\": {\"hello\": \"world\"},\n *       \"geometry\": {\n *         \"type\": \"Point\",\n *         \"coordinates\": [36, 53]\n *       }\n *     }\n *   ]\n * };\n * turf.geomReduce(features, function (previousValue, currentGeometry, currentIndex) {\n *   //=previousValue\n *   //=currentGeometry\n *   //=currentIndex\n *   return currentGeometry\n * });\n */\nfunction geomReduce(layer, callback, initialValue) {\n    var previousValue = initialValue;\n    geomEach(layer, function (currentGeometry, currentIndex) {\n        if (currentIndex === 0 && initialValue === undefined) {\n            previousValue = currentGeometry;\n        } else {\n            previousValue = callback(previousValue, currentGeometry, currentIndex);\n        }\n    });\n    return previousValue;\n}\nmodule.exports.geomReduce = geomReduce;\n\n},{}],131:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar helpers_1 = require(\"@turf/helpers\");\nvar invariant_1 = require(\"@turf/invariant\");\n/**\n * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a\n * {@link FeatureCollection} of {@link LineString|(Multi)LineString}.\n *\n * @name polygonToLine\n * @param {Feature<Polygon|MultiPolygon>} poly Feature to convert\n * @param {Object} [options={}] Optional parameters\n * @param {Object} [options.properties={}] translates GeoJSON properties to Feature\n * @returns {FeatureCollection|Feature<LineString|MultiLinestring>} converted (Multi)Polygon to (Multi)LineString\n * @example\n * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]);\n *\n * var line = turf.polygonToLine(poly);\n *\n * //addToMap\n * var addToMap = [line];\n */\nfunction default_1(poly, options) {\n    if (options === void 0) { options = {}; }\n    var geom = invariant_1.getGeom(poly);\n    if (!options.properties && poly.type === \"Feature\") {\n        options.properties = poly.properties;\n    }\n    switch (geom.type) {\n        case \"Polygon\": return polygonToLine(geom, options);\n        case \"MultiPolygon\": return multiPolygonToLine(geom, options);\n        default: throw new Error(\"invalid poly\");\n    }\n}\nexports.default = default_1;\n/**\n * @private\n */\nfunction polygonToLine(poly, options) {\n    if (options === void 0) { options = {}; }\n    var geom = invariant_1.getGeom(poly);\n    var type = geom.type;\n    var coords = geom.coordinates;\n    var properties = options.properties ? options.properties : poly.type === \"Feature\" ? poly.properties : {};\n    return coordsToLine(coords, properties);\n}\nexports.polygonToLine = polygonToLine;\n/**\n * @private\n */\nfunction multiPolygonToLine(multiPoly, options) {\n    if (options === void 0) { options = {}; }\n    var geom = invariant_1.getGeom(multiPoly);\n    var type = geom.type;\n    var coords = geom.coordinates;\n    var properties = options.properties ? options.properties :\n        multiPoly.type === \"Feature\" ? multiPoly.properties : {};\n    var lines = [];\n    coords.forEach(function (coord) {\n        lines.push(coordsToLine(coord, properties));\n    });\n    return helpers_1.featureCollection(lines);\n}\nexports.multiPolygonToLine = multiPolygonToLine;\n/**\n * @private\n */\nfunction coordsToLine(coords, properties) {\n    if (coords.length > 1) {\n        return helpers_1.multiLineString(coords, properties);\n    }\n    return helpers_1.lineString(coords[0], properties);\n}\nexports.coordsToLine = coordsToLine;\n\n},{\"@turf/helpers\":123,\"@turf/invariant\":125}],132:[function(require,module,exports){\nvar asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n\n},{\"./asn1/api\":133,\"./asn1/base\":135,\"./asn1/constants\":139,\"./asn1/decoders\":141,\"./asn1/encoders\":144,\"bn.js\":147}],133:[function(require,module,exports){\nvar asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n  var named;\n  try {\n    named = require('vm').runInThisContext(\n      '(function ' + this.name + '(entity) {\\n' +\n      '  this._initNamed(entity);\\n' +\n      '})'\n    );\n  } catch (e) {\n    named = function (entity) {\n      this._initNamed(entity);\n    };\n  }\n  inherits(named, base);\n  named.prototype._initNamed = function initnamed(entity) {\n    base.call(this, entity);\n  };\n\n  return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n\n},{\"../asn1\":132,\"inherits\":262,\"vm\":344}],134:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  var res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  var res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!(item instanceof EncoderBuffer))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = new Buffer(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n\n},{\"../base\":135,\"buffer\":182,\"inherits\":262}],135:[function(require,module,exports){\nvar base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n\n},{\"./buffer\":134,\"./node\":136,\"./reporter\":137}],136:[function(require,module,exports){\nvar Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n  var state = {};\n  this._baseState = state;\n\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  var state = this._baseState;\n  var cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  var res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  var state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      var clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  var state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  var state = this._baseState;\n\n  // Filter children and args\n  var children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      var res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        var value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    var state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    var state = this._baseState;\n    var args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  var state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  var state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  var state = this._baseState;\n  var args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  var state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  var state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  var state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  var result = state['default'];\n  var present = true;\n\n  var prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    var tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      var save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  var prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      var explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    var start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      if (state.any)\n        var save = input.save();\n      var body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any)\n      result = result;\n    else if (state.choice === null)\n      result = this._decodeGeneric(state.tag, input, options);\n    else\n      result = this._decodeChoice(input, options);\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      var data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n          ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  var state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n        ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  var state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  var state = this._baseState;\n  var result = null;\n  var match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    var save = input.save();\n    var node = state.choice[key];\n    try {\n      var value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  var state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  var result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  var result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default']\n    else\n      return;\n  }\n\n  // Encode children first\n  var content = null;\n  var primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      var prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      var res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      var child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        var state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  var result;\n  if (!state.any && state.choice === null) {\n    var tag = state.implicit !== null ? state.implicit : state.tag;\n    var cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  var state = this._baseState;\n\n  var node = state.choice[data.type];\n  if (!node) {\n    assert(\n        false,\n        data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  var state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n\n},{\"../base\":135,\"minimalistic-assert\":268}],137:[function(require,module,exports){\nvar inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  var state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  var state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  var state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  var state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  var state = this._reporterState;\n\n  var prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  var state = this._reporterState;\n\n  var now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  var err;\n  var state = this._reporterState;\n\n  var inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  var state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n\n},{\"inherits\":262}],138:[function(require,module,exports){\nvar constants = require('../constants');\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n\n},{\"../constants\":139}],139:[function(require,module,exports){\nvar constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  var res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    var value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n\n},{\"./der\":138}],140:[function(require,module,exports){\nvar inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!(data instanceof base.DecoderBuffer))\n    data = new base.DecoderBuffer(data, options);\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  var state = buffer.save();\n  var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  var decodedTag = derDecodeTag(buffer,\n                                'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  var len = derDecodeLen(buffer,\n                         decodedTag.primitive,\n                         'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  var state = buffer.save();\n  var res = this._skipUntilEnd(\n      buffer,\n      'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  while (true) {\n    var tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    var len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    var res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len)\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n                                                    options) {\n  var result = [];\n  while (!buffer.isEmpty()) {\n    var possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    var res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    var unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    var raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    var str = '';\n    for (var i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    var numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    var printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  var result;\n  var identifiers = [];\n  var ident = 0;\n  while (!buffer.isEmpty()) {\n    var subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  var first = (identifiers[0] / 40) | 0;\n  var second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    var tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  var str = buffer.raw().toString();\n  if (tag === 'gentime') {\n    var year = str.slice(0, 4) | 0;\n    var mon = str.slice(4, 6) | 0;\n    var day = str.slice(6, 8) | 0;\n    var hour = str.slice(8, 10) | 0;\n    var min = str.slice(10, 12) | 0;\n    var sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    var year = str.slice(0, 2) | 0;\n    var mon = str.slice(2, 4) | 0;\n    var day = str.slice(4, 6) | 0;\n    var hour = str.slice(6, 8) | 0;\n    var min = str.slice(8, 10) | 0;\n    var sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  var res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  var raw = buffer.raw();\n  var res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  var tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  var cls = der.tagClass[tag >> 6];\n  var primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    var oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  var tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  var len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  var num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (var i = 0; i < num; i++) {\n    len <<= 8;\n    var j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n\n},{\"../../asn1\":132,\"inherits\":262}],141:[function(require,module,exports){\nvar decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n\n},{\"./der\":140,\"./pem\":142}],142:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  var lines = data.toString().split(/[\\r\\n]+/g);\n\n  var label = options.label.toUpperCase();\n\n  var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  var start = -1;\n  var end = -1;\n  for (var i = 0; i < lines.length; i++) {\n    var match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  var base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n  var input = new Buffer(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n\n},{\"./der\":140,\"buffer\":182,\"inherits\":262}],143:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n                                                              primitive,\n                                                              cls,\n                                                              content) {\n  var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    var header = new Buffer(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  var lenOctets = 1;\n  for (var i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  var header = new Buffer(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    var buf = new Buffer(str.length * 2);\n    for (var i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s\\.]+/g);\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  var size = 0;\n  for (var i = 0; i < id.length; i++) {\n    var ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  var objid = new Buffer(size);\n  var offset = objid.length - 1;\n  for (var i = id.length - 1; i >= 0; i--) {\n    var ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  var str;\n  var date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    var numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = new Buffer(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    var size = num.length;\n    if (num.length === 0)\n      size++;\n\n    var out = new Buffer(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  var size = 1;\n  for (var i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  var out = new Array(size);\n  for (var i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  var state = this._baseState;\n  var i;\n  if (state['default'] === null)\n    return false;\n\n  var data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  var res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n\n},{\"../../asn1\":132,\"buffer\":182,\"inherits\":262}],144:[function(require,module,exports){\nvar encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n\n},{\"./der\":143,\"./pem\":145}],145:[function(require,module,exports){\nvar inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  var buf = DEREncoder.prototype.encode.call(this, data);\n\n  var p = buf.toString('base64');\n  var out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (var i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n\n},{\"./der\":143,\"inherits\":262}],146:[function(require,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n},{}],147:[function(require,module,exports){\n(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    Buffer = require('buffer').Buffer;\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n    }\n\n    if (base === 16) {\n      this._parseHex(number, start);\n    } else {\n      this._parseBase(number, base, start);\n    }\n\n    if (number[0] === '-') {\n      this.negative = 1;\n    }\n\n    this.strip();\n\n    if (endian !== 'le') return;\n\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex (str, start, end) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r <<= 4;\n\n      // 'a' - 'f'\n      if (c >= 49 && c <= 54) {\n        r |= c - 49 + 0xa;\n\n      // 'A' - 'F'\n      } else if (c >= 17 && c <= 22) {\n        r |= c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r |= c & 0xf;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    // Scan 24-bit chunks and add them to the number\n    var off = 0;\n    for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n      w = parseHex(number, i, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n      off += 24;\n      if (off >= 26) {\n        off -= 26;\n        j++;\n      }\n    }\n    if (i + 6 !== start) {\n      w = parseHex(number, start, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n    }\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      r.strip();\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n\n},{\"buffer\":149}],148:[function(require,module,exports){\nvar r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n\n},{\"crypto\":149}],149:[function(require,module,exports){\n\n},{}],150:[function(require,module,exports){\n// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n  var len = (buf.length / 4) | 0\n  var out = new Array(len)\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n\n  return out\n}\n\nfunction scrubVec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0]\n  var SUB_MIX1 = SUB_MIX[1]\n  var SUB_MIX2 = SUB_MIX[2]\n  var SUB_MIX3 = SUB_MIX[3]\n\n  var s0 = M[0] ^ keySchedule[0]\n  var s1 = M[1] ^ keySchedule[1]\n  var s2 = M[2] ^ keySchedule[2]\n  var s3 = M[3] ^ keySchedule[3]\n  var t0, t1, t2, t3\n  var ksRow = 4\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  t0 = t0 >>> 0\n  t1 = t1 >>> 0\n  t2 = t2 >>> 0\n  t3 = t3 >>> 0\n\n  return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n  // Compute double table\n  var d = new Array(256)\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1\n    } else {\n      d[j] = (j << 1) ^ 0x11b\n    }\n  }\n\n  var SBOX = []\n  var INV_SBOX = []\n  var SUB_MIX = [[], [], [], []]\n  var INV_SUB_MIX = [[], [], [], []]\n\n  // Walk GF(2^8)\n  var x = 0\n  var xi = 0\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    SBOX[x] = sx\n    INV_SBOX[sx] = x\n\n    // Compute multiplication\n    var x2 = d[x]\n    var x4 = d[x2]\n    var x8 = d[x4]\n\n    // Compute sub bytes, mix columns tables\n    var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    SUB_MIX[3][x] = t\n\n    // Compute inv sub bytes, inv mix columns tables\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    INV_SUB_MIX[3][sx] = t\n\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  }\n})()\n\nfunction AES (key) {\n  this._key = asUInt32Array(key)\n  this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n  var keyWords = this._key\n  var keySize = keyWords.length\n  var nRounds = keySize + 6\n  var ksRows = (nRounds + 1) * 4\n\n  var keySchedule = []\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k]\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1]\n\n    if (k % keySize === 0) {\n      t = (t << 8) | (t >>> 24)\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n\n      t ^= RCON[(k / keySize) | 0] << 24\n    } else if (keySize > 6 && k % keySize === 4) {\n      t =\n        (G.SBOX[t >>> 24] << 24) |\n        (G.SBOX[(t >>> 16) & 0xff] << 16) |\n        (G.SBOX[(t >>> 8) & 0xff] << 8) |\n        (G.SBOX[t & 0xff])\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t\n  }\n\n  var invKeySchedule = []\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt\n    } else {\n      invKeySchedule[ik] =\n        G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n        G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n        G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n        G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n    }\n  }\n\n  this._nRounds = nRounds\n  this._keySchedule = keySchedule\n  this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M)\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M)\n\n  // swap\n  var m1 = M[1]\n  M[1] = M[3]\n  M[3] = m1\n\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule)\n  scrubVec(this._invKeySchedule)\n  scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n\n},{\"safe-buffer\":318}],151:[function(require,module,exports){\nvar aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) out++\n\n  var len = Math.min(a.length, b.length)\n  for (var i = 0; i < len; ++i) {\n    out += (a[i] ^ b[i])\n  }\n\n  return out\n}\n\nfunction calcIv (self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n  }\n  var ghash = new GHASH(ck)\n  var len = iv.length\n  var toPad = len % 16\n  ghash.update(iv)\n  if (toPad) {\n    toPad = 16 - toPad\n    ghash.update(Buffer.alloc(toPad, 0))\n  }\n  ghash.update(Buffer.alloc(8, 0))\n  var ivBits = len * 8\n  var tail = Buffer.alloc(8)\n  tail.writeUIntBE(ivBits, 0, 8)\n  ghash.update(tail)\n  self._finID = ghash.state\n  var out = Buffer.from(self._finID)\n  incr32(out)\n  return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  var h = Buffer.alloc(4, 0)\n\n  this._cipher = new aes.AES(key)\n  var ck = this._cipher.encryptBlock(h)\n  this._ghash = new GHASH(ck)\n  iv = calcIv(this, iv, ck)\n\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  this._mode = mode\n\n  this._authTag = null\n  this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0)\n      this._ghash.update(rump)\n    }\n  }\n\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n  this._authTag = tag\n  this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n  return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n  this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n  this._ghash.update(buf)\n  this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n\n},{\"./aes\":150,\"./ghash\":155,\"./incr32\":156,\"buffer-xor\":181,\"cipher-base\":184,\"inherits\":262,\"safe-buffer\":318}],152:[function(require,module,exports){\nvar ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n  return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n\n},{\"./decrypter\":153,\"./encrypter\":154,\"./modes/list.json\":164}],153:[function(require,module,exports){\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n  var padded = last[15]\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data')\n  }\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) return\n\n  return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true)\n  }\n\n  return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n\n},{\"./aes\":150,\"./authCipher\":151,\"./modes\":163,\"./streamCipher\":166,\"cipher-base\":184,\"evp_bytestokey\":222,\"inherits\":262,\"safe-buffer\":318}],154:[function(require,module,exports){\nvar MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n  Transform.call(this)\n\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._mode = mode\n  this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n\n  return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = Buffer.allocUnsafe(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n\n  return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  if (typeof password === 'string') password = Buffer.from(password)\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n  if (typeof iv === 'string') iv = Buffer.from(iv)\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv)\n  }\n\n  return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n  var config = MODES[suite.toLowerCase()]\n  if (!config) throw new TypeError('invalid suite type')\n\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n\n},{\"./aes\":150,\"./authCipher\":151,\"./modes\":163,\"./streamCipher\":166,\"cipher-base\":184,\"evp_bytestokey\":222,\"inherits\":262,\"safe-buffer\":318}],155:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\n\nfunction fromArray (out) {\n  var buf = Buffer.allocUnsafe(16)\n  buf.writeUInt32BE(out[0] >>> 0, 0)\n  buf.writeUInt32BE(out[1] >>> 0, 4)\n  buf.writeUInt32BE(out[2] >>> 0, 8)\n  buf.writeUInt32BE(out[3] >>> 0, 12)\n  return buf\n}\n\nfunction GHASH (key) {\n  this.h = key\n  this.state = Buffer.alloc(16, 0)\n  this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsbVi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0]\n      Zi[1] ^= Vi[1]\n      Zi[2] ^= Vi[2]\n      Zi[3] ^= Vi[3]\n    }\n\n    // Store the value of LSB(V_i)\n    lsbVi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]))\n  return this.state\n}\n\nmodule.exports = GHASH\n\n},{\"safe-buffer\":318}],156:[function(require,module,exports){\nfunction incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\nmodule.exports = incr32\n\n},{}],157:[function(require,module,exports){\nvar xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n\n},{\"buffer-xor\":181}],158:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0)\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = Buffer.allocUnsafe(0)\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\n\n},{\"buffer-xor\":181,\"safe-buffer\":318}],159:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\n\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = Buffer.allocUnsafe(buffer.length)\n  buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n\n},{\"safe-buffer\":318}],160:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n\n  self._prev = Buffer.concat([\n    self._prev.slice(1),\n    Buffer.from([decrypt ? byteParam : out])\n  ])\n\n  return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = Buffer.allocUnsafe(len)\n  var i = -1\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n\n  return out\n}\n\n},{\"safe-buffer\":318}],161:[function(require,module,exports){\nvar xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlockRaw(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize)\n  var start = self._cache.length\n  self._cache = Buffer.concat([\n    self._cache,\n    Buffer.allocUnsafe(chunkNum * blockSize)\n  ])\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self)\n    var offset = start + i * blockSize\n    self._cache.writeUInt32BE(out[0], offset + 0)\n    self._cache.writeUInt32BE(out[1], offset + 4)\n    self._cache.writeUInt32BE(out[2], offset + 8)\n    self._cache.writeUInt32BE(out[3], offset + 12)\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n\n},{\"../incr32\":156,\"buffer-xor\":181,\"safe-buffer\":318}],162:[function(require,module,exports){\nexports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n\n},{}],163:[function(require,module,exports){\nvar modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n\n},{\"./cbc\":157,\"./cfb\":158,\"./cfb1\":159,\"./cfb8\":160,\"./ctr\":161,\"./ecb\":162,\"./list.json\":164,\"./ofb\":165}],164:[function(require,module,exports){\nmodule.exports={\n  \"aes-128-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-192-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-256-ecb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 0,\n    \"mode\": \"ECB\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-192-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-256-cbc\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes128\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes192\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes256\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CBC\",\n    \"type\": \"block\"\n  },\n  \"aes-128-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb8\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB8\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-cfb1\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CFB1\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ofb\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"OFB\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-192-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-256-ctr\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 16,\n    \"mode\": \"CTR\",\n    \"type\": \"stream\"\n  },\n  \"aes-128-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 128,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-192-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 192,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  },\n  \"aes-256-gcm\": {\n    \"cipher\": \"AES\",\n    \"key\": 256,\n    \"iv\": 12,\n    \"mode\": \"GCM\",\n    \"type\": \"auth\"\n  }\n}\n\n},{}],165:[function(require,module,exports){\n(function (Buffer){\nvar xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182,\"buffer-xor\":181}],166:[function(require,module,exports){\nvar aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  Transform.call(this)\n\n  this._cipher = new aes.AES(key)\n  this._prev = Buffer.from(iv)\n  this._cache = Buffer.allocUnsafe(0)\n  this._secCache = Buffer.allocUnsafe(0)\n  this._decrypt = decrypt\n  this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n\n},{\"./aes\":150,\"cipher-base\":184,\"inherits\":262,\"safe-buffer\":318}],167:[function(require,module,exports){\nvar DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n  suite = suite.toLowerCase()\n\n  var keyLen, ivLen\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n  if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n  throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n\n},{\"browserify-aes/browser\":152,\"browserify-aes/modes\":163,\"browserify-des\":168,\"browserify-des/modes\":169,\"evp_bytestokey\":222}],168:[function(require,module,exports){\nvar CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key)\n  }\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv)\n  }\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return Buffer.from(this._des.final())\n}\n\n},{\"cipher-base\":184,\"des.js\":195,\"inherits\":262,\"safe-buffer\":318}],169:[function(require,module,exports){\nexports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n\n},{}],170:[function(require,module,exports){\n(function (Buffer){\nvar bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n  var r = getr(priv);\n  var blinder = r.toRed(bn.mont(priv.modulus))\n  .redPow(new bn(priv.publicExponent)).fromRed();\n  return {\n    blinder: blinder,\n    unblinder:r.invm(priv.modulus)\n  };\n}\nfunction crt(msg, priv) {\n  var blinds = blind(priv);\n  var len = priv.modulus.byteLength();\n  var mod = bn.mont(priv.modulus);\n  var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n  var c1 = blinded.toRed(bn.mont(priv.prime1));\n  var c2 = blinded.toRed(bn.mont(priv.prime2));\n  var qinv = priv.coefficient;\n  var p = priv.prime1;\n  var q = priv.prime2;\n  var m1 = c1.redPow(priv.exponent1);\n  var m2 = c2.redPow(priv.exponent2);\n  m1 = m1.fromRed();\n  m2 = m2.fromRed();\n  var h = m1.isub(m2).imul(qinv).umod(p);\n  h.imul(q);\n  m2.iadd(h);\n  return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n  var len = priv.modulus.byteLength();\n  var r = new bn(randomBytes(len));\n  while (r.cmp(priv.modulus) >=  0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n    r = new bn(randomBytes(len));\n  }\n  return r;\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":147,\"buffer\":182,\"randombytes\":298}],171:[function(require,module,exports){\nmodule.exports = require('./browser/algorithms.json')\n\n},{\"./browser/algorithms.json\":172}],172:[function(require,module,exports){\nmodule.exports={\n  \"sha224WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"RSA-SHA224\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"sha256WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"RSA-SHA256\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"sha384WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"RSA-SHA384\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"sha512WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA512\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA1\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"3021300906052b0e03021a05000414\"\n  },\n  \"ecdsa-with-SHA1\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"sha256\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"sha224\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"sha384\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"sha512\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA1\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-RIPEMD160\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"\"\n  },\n  \"ripemd160WithRSA\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"RSA-RIPEMD160\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"md5WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  },\n  \"RSA-MD5\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  }\n}\n\n},{}],173:[function(require,module,exports){\nmodule.exports={\n  \"1.3.132.0.10\": \"secp256k1\",\n  \"1.3.132.0.33\": \"p224\",\n  \"1.2.840.10045.3.1.1\": \"p192\",\n  \"1.2.840.10045.3.1.7\": \"p256\",\n  \"1.3.132.0.34\": \"p384\",\n  \"1.3.132.0.35\": \"p521\"\n}\n\n},{}],174:[function(require,module,exports){\n(function (Buffer){\nvar createHash = require('create-hash')\nvar stream = require('stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = new Buffer(algorithms[key].id, 'hex')\n  algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hashType = data.hash\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nSign.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n  this.end()\n  var hash = this._hash.digest()\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n  return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n  if (typeof sig === 'string') sig = new Buffer(sig, enc)\n\n  this.end()\n  var hash = this._hash.digest()\n  return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n  return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n  return new Verify(algorithm)\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./algorithms.json\":172,\"./sign\":175,\"./verify\":176,\"buffer\":182,\"create-hash\":188,\"inherits\":262,\"stream\":328}],175:[function(require,module,exports){\n(function (Buffer){\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key)\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n    return ecSign(hash, priv)\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong private key type')\n    return dsaSign(hash, priv, hashType)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = priv.modulus.byteLength()\n  var pad = [ 0, 1 ]\n  while (hash.length + pad.length + 1 < len) pad.push(0xff)\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) pad.push(hash[i])\n\n  var out = crt(pad, priv)\n  return out\n}\n\nfunction ecSign (hash, priv) {\n  var curveId = curves[priv.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var key = curve.keyFromPrivate(priv.privateKey)\n  var out = key.sign(hash)\n\n  return new Buffer(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n  var x = priv.params.priv_key\n  var p = priv.params.p\n  var q = priv.params.q\n  var g = priv.params.g\n  var r = new BN(0)\n  var k\n  var H = bits2int(hash, q).mod(q)\n  var s = false\n  var kv = getKey(x, q, hash, algo)\n  while (s === false) {\n    k = makeKey(q, kv, algo)\n    r = makeR(g, k, p, q)\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n    if (s.cmpn(0) === 0) {\n      s = false\n      r = new BN(0)\n    }\n  }\n  return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n  r = r.toArray()\n  s = s.toArray()\n\n  // Pad values\n  if (r[0] & 0x80) r = [ 0 ].concat(r)\n  if (s[0] & 0x80) s = [ 0 ].concat(s)\n\n  var total = r.length + s.length + 4\n  var res = [ 0x30, total, 0x02, r.length ]\n  res = res.concat(r, [ 0x02, s.length ], s)\n  return new Buffer(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n  x = new Buffer(x.toArray())\n  if (x.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - x.length)\n    zeros.fill(0)\n    x = Buffer.concat([ zeros, x ])\n  }\n  var hlen = hash.length\n  var hbits = bits2octets(hash, q)\n  var v = new Buffer(hlen)\n  v.fill(1)\n  var k = new Buffer(hlen)\n  k.fill(0)\n  k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n  var bits = new BN(obits)\n  var shift = (obits.length << 3) - q.bitLength()\n  if (shift > 0) bits.ishrn(shift)\n  return bits\n}\n\nfunction bits2octets (bits, q) {\n  bits = bits2int(bits, q)\n  bits = bits.mod(q)\n  var out = new Buffer(bits.toArray())\n  if (out.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - out.length)\n    zeros.fill(0)\n    out = Buffer.concat([ zeros, out ])\n  }\n  return out\n}\n\nfunction makeKey (q, kv, algo) {\n  var t\n  var k\n\n  do {\n    t = new Buffer(0)\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n      t = Buffer.concat([ t, kv.v ])\n    }\n\n    k = bits2int(t, q)\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n  } while (k.cmp(q) !== -1)\n\n  return k\n}\n\nfunction makeR (g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./curves.json\":173,\"bn.js\":147,\"browserify-rsa\":170,\"buffer\":182,\"create-hmac\":190,\"elliptic\":205,\"parse-asn1\":275}],176:[function(require,module,exports){\n(function (Buffer){\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n  var pub = parseKeys(key)\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n    return ecVerify(sig, hash, pub)\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong public key type')\n    return dsaVerify(sig, hash, pub)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = pub.modulus.byteLength()\n  var pad = [ 1 ]\n  var padNum = 0\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff)\n    padNum++\n  }\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) {\n    pad.push(hash[i])\n  }\n  pad = new Buffer(pad)\n  var red = BN.mont(pub.modulus)\n  sig = new BN(sig).toRed(red)\n\n  sig = sig.redPow(new BN(pub.publicExponent))\n  sig = new Buffer(sig.fromRed().toArray())\n  var out = padNum < 8 ? 1 : 0\n  len = Math.min(sig.length, pad.length)\n  if (sig.length !== pad.length) out = 1\n\n  i = -1\n  while (++i < len) out |= sig[i] ^ pad[i]\n  return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var pubkey = pub.data.subjectPrivateKey.data\n\n  return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n  var p = pub.data.p\n  var q = pub.data.q\n  var g = pub.data.g\n  var y = pub.data.pub_key\n  var unpacked = parseKeys.signature.decode(sig, 'der')\n  var s = unpacked.s\n  var r = unpacked.r\n  checkValue(s, q)\n  checkValue(r, q)\n  var montp = BN.mont(p)\n  var w = s.invm(q)\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q)\n  return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n  if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n  if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./curves.json\":173,\"bn.js\":147,\"buffer\":182,\"elliptic\":205,\"parse-asn1\":275}],177:[function(require,module,exports){\narguments[4][149][0].apply(exports,arguments)\n},{\"dup\":149}],178:[function(require,module,exports){\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":182}],179:[function(require,module,exports){\n'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return -1;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// UTF-8 replacement characters ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd'.repeat(p);\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd'.repeat(p + 1);\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd'.repeat(p + 2);\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character for each buffered byte of a (partial)\n// character needs to be added to the output.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd'.repeat(this.lastTotal - this.lastNeed);\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n},{\"safe-buffer\":178}],180:[function(require,module,exports){\n(function (Buffer){\nvar toString = Object.prototype.toString\n\nvar isModern = (\n  typeof Buffer.alloc === 'function' &&\n  typeof Buffer.allocUnsafe === 'function' &&\n  typeof Buffer.from === 'function'\n)\n\nfunction isArrayBuffer (input) {\n  return toString.call(input).slice(8, -1) === 'ArrayBuffer'\n}\n\nfunction fromArrayBuffer (obj, byteOffset, length) {\n  byteOffset >>>= 0\n\n  var maxLength = obj.byteLength - byteOffset\n\n  if (maxLength < 0) {\n    throw new RangeError(\"'offset' is out of bounds\")\n  }\n\n  if (length === undefined) {\n    length = maxLength\n  } else {\n    length >>>= 0\n\n    if (length > maxLength) {\n      throw new RangeError(\"'length' is out of bounds\")\n    }\n  }\n\n  return isModern\n    ? Buffer.from(obj.slice(byteOffset, byteOffset + length))\n    : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  return isModern\n    ? Buffer.from(string, encoding)\n    : new Buffer(string, encoding)\n}\n\nfunction bufferFrom (value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (isArrayBuffer(value)) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  return isModern\n    ? Buffer.from(value)\n    : new Buffer(value)\n}\n\nmodule.exports = bufferFrom\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182}],181:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182}],182:[function(require,module,exports){\n(function (Buffer){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol.for === 'function')\n    ? Symbol.for('nodejs.util.inspect.custom')\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    var proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n    Buffer[Symbol.species] === Buffer) {\n  Object.defineProperty(Buffer, Symbol.species, {\n    value: null,\n    configurable: true,\n    enumerable: false,\n    writable: false\n  })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayLike(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  var valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  var b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(\n      value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n    )\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      buf = Buffer.from(buf)\n    }\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  var len = string.length\n  var mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  var strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n        : (firstByte > 0xBF) ? 2\n          : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (var i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    var len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nvar hexSliceLookupTable = (function () {\n  var alphabet = '0123456789abcdef'\n  var table = new Array(256)\n  for (var i = 0; i < 16; ++i) {\n    var i16 = i * 16\n    for (var j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"base64-js\":146,\"buffer\":182,\"ieee754\":241}],183:[function(require,module,exports){\nmodule.exports = {\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Unordered Collection\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\n}\n\n},{}],184:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n  Transform.call(this)\n  this.hashMode = typeof hashMode === 'string'\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest\n  } else {\n    this.final = this._finalOrDigest\n  }\n  if (this._final) {\n    this.__final = this._final\n    this._final = null\n  }\n  this._decoder = null\n  this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc)\n  }\n\n  var outData = this._update(data)\n  if (this.hashMode) return this\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc)\n  }\n\n  return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err\n  try {\n    if (this.hashMode) {\n      this._update(data)\n    } else {\n      this.push(this._update(data))\n    }\n  } catch (e) {\n    err = e\n  } finally {\n    next(err)\n  }\n}\nCipherBase.prototype._flush = function (done) {\n  var err\n  try {\n    this.push(this.__final())\n  } catch (e) {\n    err = e\n  }\n\n  done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0)\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true)\n  }\n  return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc)\n    this._encoding = enc\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n  var out = this._decoder.write(value)\n  if (fin) {\n    out += this._decoder.end()\n  }\n\n  return out\n}\n\nmodule.exports = CipherBase\n\n},{\"inherits\":262,\"safe-buffer\":318,\"stream\":328,\"string_decoder\":179}],185:[function(require,module,exports){\n(function (Buffer){\nvar Writable = require('readable-stream').Writable\nvar inherits = require('inherits')\nvar bufferFrom = require('buffer-from')\n\nif (typeof Uint8Array === 'undefined') {\n  var U8 = require('typedarray').Uint8Array\n} else {\n  var U8 = Uint8Array\n}\n\nfunction ConcatStream(opts, cb) {\n  if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb)\n\n  if (typeof opts === 'function') {\n    cb = opts\n    opts = {}\n  }\n  if (!opts) opts = {}\n\n  var encoding = opts.encoding\n  var shouldInferEncoding = false\n\n  if (!encoding) {\n    shouldInferEncoding = true\n  } else {\n    encoding =  String(encoding).toLowerCase()\n    if (encoding === 'u8' || encoding === 'uint8') {\n      encoding = 'uint8array'\n    }\n  }\n\n  Writable.call(this, { objectMode: true })\n\n  this.encoding = encoding\n  this.shouldInferEncoding = shouldInferEncoding\n\n  if (cb) this.on('finish', function () { cb(this.getBody()) })\n  this.body = []\n}\n\nmodule.exports = ConcatStream\ninherits(ConcatStream, Writable)\n\nConcatStream.prototype._write = function(chunk, enc, next) {\n  this.body.push(chunk)\n  next()\n}\n\nConcatStream.prototype.inferEncoding = function (buff) {\n  var firstBuffer = buff === undefined ? this.body[0] : buff;\n  if (Buffer.isBuffer(firstBuffer)) return 'buffer'\n  if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array'\n  if (Array.isArray(firstBuffer)) return 'array'\n  if (typeof firstBuffer === 'string') return 'string'\n  if (Object.prototype.toString.call(firstBuffer) === \"[object Object]\") return 'object'\n  return 'buffer'\n}\n\nConcatStream.prototype.getBody = function () {\n  if (!this.encoding && this.body.length === 0) return []\n  if (this.shouldInferEncoding) this.encoding = this.inferEncoding()\n  if (this.encoding === 'array') return arrayConcat(this.body)\n  if (this.encoding === 'string') return stringConcat(this.body)\n  if (this.encoding === 'buffer') return bufferConcat(this.body)\n  if (this.encoding === 'uint8array') return u8Concat(this.body)\n  return this.body\n}\n\nvar isArray = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]'\n}\n\nfunction isArrayish (arr) {\n  return /Array\\]$/.test(Object.prototype.toString.call(arr))\n}\n\nfunction isBufferish (p) {\n  return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function')\n}\n\nfunction stringConcat (parts) {\n  var strings = []\n  var needsToString = false\n  for (var i = 0; i < parts.length; i++) {\n    var p = parts[i]\n    if (typeof p === 'string') {\n      strings.push(p)\n    } else if (Buffer.isBuffer(p)) {\n      strings.push(p)\n    } else if (isBufferish(p)) {\n      strings.push(bufferFrom(p))\n    } else {\n      strings.push(bufferFrom(String(p)))\n    }\n  }\n  if (Buffer.isBuffer(parts[0])) {\n    strings = Buffer.concat(strings)\n    strings = strings.toString('utf8')\n  } else {\n    strings = strings.join('')\n  }\n  return strings\n}\n\nfunction bufferConcat (parts) {\n  var bufs = []\n  for (var i = 0; i < parts.length; i++) {\n    var p = parts[i]\n    if (Buffer.isBuffer(p)) {\n      bufs.push(p)\n    } else if (isBufferish(p)) {\n      bufs.push(bufferFrom(p))\n    } else {\n      bufs.push(bufferFrom(String(p)))\n    }\n  }\n  return Buffer.concat(bufs)\n}\n\nfunction arrayConcat (parts) {\n  var res = []\n  for (var i = 0; i < parts.length; i++) {\n    res.push.apply(res, parts[i])\n  }\n  return res\n}\n\nfunction u8Concat (parts) {\n  var len = 0\n  for (var i = 0; i < parts.length; i++) {\n    if (typeof parts[i] === 'string') {\n      parts[i] = bufferFrom(parts[i])\n    }\n    len += parts[i].length\n  }\n  var u8 = new U8(len)\n  for (var i = 0, offset = 0; i < parts.length; i++) {\n    var part = parts[i]\n    for (var j = 0; j < part.length; j++) {\n      u8[offset++] = part[j]\n    }\n  }\n  return u8\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182,\"buffer-from\":180,\"inherits\":262,\"readable-stream\":312,\"typedarray\":337}],186:[function(require,module,exports){\n(function (Buffer){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n}).call(this,{\"isBuffer\":require(\"../../is-buffer/index.js\")})\n},{\"../../is-buffer/index.js\":263}],187:[function(require,module,exports){\n(function (Buffer){\nvar elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n  return new ECDH(curve)\n}\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n  this.curveType = aliases[curve]\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    }\n  }\n  this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n  this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair()\n  return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8'\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc)\n  }\n  var otherPub = this.curve.keyFromPublic(other).getPublic()\n  var out = otherPub.mul(this.keys.getPrivate()).getX()\n  return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true)\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7\n    } else {\n      key[0] = 6\n    }\n  }\n  return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc)\n  }\n  this.keys._importPublic(pub)\n  return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8'\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc)\n  }\n\n  var _priv = new BN(priv)\n  _priv = _priv.toString(16)\n  this.keys = this.curve.genKeyPair()\n  this.keys._importPrivate(_priv)\n  return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray()\n  }\n  var buf = new Buffer(bn)\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length)\n    zeros.fill(0)\n    buf = Buffer.concat([zeros, buf])\n  }\n  if (!enc) {\n    return buf\n  } else {\n    return buf.toString(enc)\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":147,\"buffer\":182,\"elliptic\":205}],188:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new MD5()\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n  return new Hash(sha(alg))\n}\n\n},{\"cipher-base\":184,\"inherits\":262,\"md5.js\":266,\"ripemd160\":317,\"sha.js\":320}],189:[function(require,module,exports){\nvar MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest()\n}\n\n},{\"md5.js\":266}],190:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n\n},{\"./legacy\":191,\"cipher-base\":184,\"create-hash/md5\":189,\"inherits\":262,\"ripemd160\":317,\"safe-buffer\":318,\"sha.js\":320}],191:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n\n},{\"cipher-base\":184,\"inherits\":262,\"safe-buffer\":318}],192:[function(require,module,exports){\n'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n  return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n  throw new Error([\n    'sorry, createCredentials is not implemented yet',\n    'we accept pull requests',\n    'https://github.com/crypto-browserify/crypto-browserify'\n  ].join('\\n'))\n}\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n}\n\n},{\"browserify-cipher\":167,\"browserify-sign\":174,\"browserify-sign/algos\":171,\"create-ecdh\":187,\"create-hash\":188,\"create-hmac\":190,\"diffie-hellman\":201,\"pbkdf2\":278,\"public-encrypt\":286,\"randombytes\":298,\"randomfill\":299}],193:[function(require,module,exports){\n// https://d3js.org/d3-array/ v1.2.4 Copyright 2018 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\ntypeof define === 'function' && define.amd ? define(['exports'], factory) :\n(factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) { 'use strict';\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction bisector(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n\nvar ascendingBisect = bisector(ascending);\nvar bisectRight = ascendingBisect.right;\nvar bisectLeft = ascendingBisect.left;\n\nfunction pairs(array, f) {\n  if (f == null) f = pair;\n  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n  while (i < n) pairs[i] = f(p, p = array[++i]);\n  return pairs;\n}\n\nfunction pair(a, b) {\n  return [a, b];\n}\n\nfunction cross(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n\nfunction descending(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\nfunction number(x) {\n  return x === null ? NaN : +x;\n}\n\nfunction variance(values, valueof) {\n  var n = values.length,\n      m = 0,\n      i = -1,\n      mean = 0,\n      value,\n      delta,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  if (m > 1) return sum / (m - 1);\n}\n\nfunction deviation(array, f) {\n  var v = variance(array, f);\n  return v ? Math.sqrt(v) : v;\n}\n\nfunction extent(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n\nvar array = Array.prototype;\n\nvar slice = array.slice;\nvar map = array.map;\n\nfunction constant(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction identity(x) {\n  return x;\n}\n\nfunction range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n\nvar e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction ticks(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nfunction tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n\nfunction sturges(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n\nfunction histogram() {\n  var value = identity,\n      domain = extent,\n      threshold = sturges;\n\n  function histogram(data) {\n    var i,\n        n = data.length,\n        x,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = tickStep(x0, x1, tz);\n      tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n    }\n\n    // Remove any thresholds outside the domain.\n    var m = tz.length;\n    while (tz[0] <= x0) tz.shift(), --m;\n    while (tz[m - 1] > x1) tz.pop(), --m;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    for (i = 0; i < n; ++i) {\n      x = values[i];\n      if (x0 <= x && x <= x1) {\n        bins[bisectRight(tz, x, 0, m)].push(data[i]);\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n  };\n\n  return histogram;\n}\n\nfunction quantile(values, p, valueof) {\n  if (valueof == null) valueof = number;\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction freedmanDiaconis(values, min, max) {\n  values = map.call(values, number).sort(ascending);\n  return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n}\n\nfunction scott(values, min, max) {\n  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n}\n\nfunction max(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n}\n\nfunction mean(values, valueof) {\n  var n = values.length,\n      m = n,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) sum += value;\n      else --m;\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;\n      else --m;\n    }\n  }\n\n  if (m) return sum / m;\n}\n\nfunction median(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      numbers = [];\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  return quantile(numbers.sort(ascending), 0.5);\n}\n\nfunction merge(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n\nfunction min(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  return min;\n}\n\nfunction permute(array, indexes) {\n  var i = indexes.length, permutes = new Array(i);\n  while (i--) permutes[i] = array[indexes[i]];\n  return permutes;\n}\n\nfunction scan(values, compare) {\n  if (!(n = values.length)) return;\n  var n,\n      i = 0,\n      j = 0,\n      xi,\n      xj = values[j];\n\n  if (compare == null) compare = ascending;\n\n  while (++i < n) {\n    if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n      xj = xi, j = i;\n    }\n  }\n\n  if (compare(xj, xj) === 0) return j;\n}\n\nfunction shuffle(array, i0, i1) {\n  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m + i0];\n    array[m + i0] = array[i + i0];\n    array[i + i0] = t;\n  }\n\n  return array;\n}\n\nfunction sum(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (value = +valueof(values[i], i, values)) sum += value;\n    }\n  }\n\n  return sum;\n}\n\nfunction transpose(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n}\n\nfunction length(d) {\n  return d.length;\n}\n\nfunction zip() {\n  return transpose(arguments);\n}\n\nexports.bisect = bisectRight;\nexports.bisectRight = bisectRight;\nexports.bisectLeft = bisectLeft;\nexports.ascending = ascending;\nexports.bisector = bisector;\nexports.cross = cross;\nexports.descending = descending;\nexports.deviation = deviation;\nexports.extent = extent;\nexports.histogram = histogram;\nexports.thresholdFreedmanDiaconis = freedmanDiaconis;\nexports.thresholdScott = scott;\nexports.thresholdSturges = sturges;\nexports.max = max;\nexports.mean = mean;\nexports.median = median;\nexports.merge = merge;\nexports.min = min;\nexports.pairs = pairs;\nexports.permute = permute;\nexports.quantile = quantile;\nexports.range = range;\nexports.scan = scan;\nexports.shuffle = shuffle;\nexports.sum = sum;\nexports.ticks = ticks;\nexports.tickIncrement = tickIncrement;\nexports.tickStep = tickStep;\nexports.transpose = transpose;\nexports.variance = variance;\nexports.zip = zip;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{}],194:[function(require,module,exports){\n// https://d3js.org/d3-geo/ v1.11.6 Copyright 2019 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) :\ntypeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) :\n(factory((global.d3 = global.d3 || {}),global.d3));\n}(this, (function (exports,d3Array) { 'use strict';\n\n// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nfunction adder() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add(temp, y, this.t);\n    add(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n\nvar epsilon = 1e-6;\nvar epsilon2 = 1e-12;\nvar pi = Math.PI;\nvar halfPi = pi / 2;\nvar quarterPi = pi / 4;\nvar tau = pi * 2;\n\nvar degrees = 180 / pi;\nvar radians = pi / 180;\n\nvar abs = Math.abs;\nvar atan = Math.atan;\nvar atan2 = Math.atan2;\nvar cos = Math.cos;\nvar ceil = Math.ceil;\nvar exp = Math.exp;\nvar log = Math.log;\nvar pow = Math.pow;\nvar sin = Math.sin;\nvar sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nvar sqrt = Math.sqrt;\nvar tan = Math.tan;\n\nfunction acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nfunction asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nfunction haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n\nfunction noop() {}\n\nfunction streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nfunction geoStream(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n\nvar areaRingSum = adder();\n\nvar areaSum = adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum.reset();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nfunction area(object) {\n  areaSum.reset();\n  geoStream(object, areaStream);\n  return areaSum * 2;\n}\n\nfunction spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nfunction cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nfunction cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nfunction cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nfunction cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nfunction cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n\nvar lambda0$1, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00$1, phi00$1, // first point\n    p0, // previous 3D point\n    deltaSum = adder(),\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum.reset();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0$1, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign$$1 = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign$$1,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0$1) {\n        if (lambda < lambda0$1) lambda0$1 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0$1, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00$1 = lambda, phi00$1 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00$1, phi00$1);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0$1 = -(lambda1 = 180);\n  range[0] = lambda0$1, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nfunction bounds(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n  ranges = [];\n  geoStream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0$1 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0$1, phi0], [lambda1, phi1]];\n}\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00$2, phi00$2, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00$2, phi00$2);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00$2 = lambda, phi00$2 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = sqrt(cx * cx + cy * cy + cz * cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2 += v * cx;\n  Y2 += v * cy;\n  Z2 += v * cz;\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroid(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 =\n  X2 = Y2 = Z2 = 0;\n  geoStream(object, centroidStream);\n\n  var x = X2,\n      y = Y2,\n      z = Z2,\n      m = x * x + y * y + z * z;\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n    m = x * x + y * y + z * z;\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n\nfunction constant(x) {\n  return function() {\n    return x;\n  };\n}\n\nfunction compose(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nfunction rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nfunction rotation(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nfunction circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nfunction circle() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n\nfunction clipBuffer() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y) {\n      line.push([x, y]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n\nfunction pointEqual(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nfunction clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    // If the first and last points of a segment are coincident, then treat as a\n    // closed ring. TODO if all rings are closed, then the winding order of the\n    // exterior ring should be checked.\n    if (pointEqual(p0, p1)) {\n      stream.lineStart();\n      for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n      stream.lineEnd();\n      return;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n\nvar sum = adder();\n\nfunction longitude(point) {\n  if (abs(point[0]) <= pi)\n    return point[0];\n  else\n    return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nfunction polygonContains(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  sum.reset();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign$$1 = delta >= 0 ? 1 : -1,\n          absDelta = sign$$1 * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign$$1 * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign$$1 * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n\nfunction clip(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = d3Array.merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n\nvar clipAntimeridian = clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n\nfunction clipCircle(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        // Handle degeneracies.\n        // TODO ignore if not clipping polygons.\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n            point1[0] += epsilon;\n            point1[1] += epsilon;\n            v = visible(point1[0], point1[1]);\n          }\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1]);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n\nfunction clipLine(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nfunction clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = d3Array.merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n\nfunction extent() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 960,\n      y1 = 500,\n      cache,\n      cacheStream,\n      clip;\n\n  return clip = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n    },\n    extent: function(_) {\n      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n    }\n  };\n}\n\nvar lengthSum = adder(),\n    lambda0$2,\n    sinPhi0$1,\n    cosPhi0$1;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0$2 = lambda, sinPhi0$1 = sin(phi), cosPhi0$1 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0$2),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,\n      z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;\n}\n\nfunction length(object) {\n  lengthSum.reset();\n  geoStream(object, lengthStream);\n  return +lengthSum;\n}\n\nvar coordinates = [null, null],\n    object = {type: \"LineString\", coordinates: coordinates};\n\nfunction distance(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length(object);\n}\n\nvar containsObjectType = {\n  Feature: function(object, point) {\n    return containsGeometry(object.geometry, point);\n  },\n  FeatureCollection: function(object, point) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n    return false;\n  }\n};\n\nvar containsGeometryType = {\n  Sphere: function() {\n    return true;\n  },\n  Point: function(object, point) {\n    return containsPoint(object.coordinates, point);\n  },\n  MultiPoint: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n    return false;\n  },\n  LineString: function(object, point) {\n    return containsLine(object.coordinates, point);\n  },\n  MultiLineString: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\n    return false;\n  },\n  Polygon: function(object, point) {\n    return containsPolygon(object.coordinates, point);\n  },\n  MultiPolygon: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n    return false;\n  },\n  GeometryCollection: function(object, point) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n    return false;\n  }\n};\n\nfunction containsGeometry(geometry, point) {\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n      ? containsGeometryType[geometry.type](geometry, point)\n      : false;\n}\n\nfunction containsPoint(coordinates, point) {\n  return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n  var ao, bo, ab;\n  for (var i = 0, n = coordinates.length; i < n; i++) {\n    bo = distance(coordinates[i], point);\n    if (bo === 0) return true;\n    if (i > 0) {\n      ab = distance(coordinates[i], coordinates[i - 1]);\n      if (\n        ab > 0 &&\n        ao <= ab &&\n        bo <= ab &&\n        (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n      )\n        return true;\n    }\n    ao = bo;\n  }\n  return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n  return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n  return [point[0] * radians, point[1] * radians];\n}\n\nfunction contains(object, point) {\n  return (object && containsObjectType.hasOwnProperty(object.type)\n      ? containsObjectType[object.type]\n      : containsGeometry)(object, point);\n}\n\nfunction graticuleX(y0, y1, dy) {\n  var y = d3Array.range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = d3Array.range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nfunction graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return d3Array.range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(d3Array.range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(d3Array.range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(d3Array.range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nfunction graticule10() {\n  return graticule()();\n}\n\nfunction interpolate(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos(y0),\n      sy0 = sin(y0),\n      cy1 = cos(y1),\n      sy1 = sin(y1),\n      kx0 = cy0 * cos(x0),\n      ky0 = cy0 * sin(x0),\n      kx1 = cy1 * cos(x1),\n      ky1 = cy1 * sin(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin(t *= d) / k,\n        A = sin(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees,\n      atan2(z, sqrt(x * x + y * y)) * degrees\n    ];\n  } : function() {\n    return [x0 * degrees, y0 * degrees];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n\nfunction identity(x) {\n  return x;\n}\n\nvar areaSum$1 = adder(),\n    areaRingSum$1 = adder(),\n    x00,\n    y00,\n    x0$1,\n    y0$1;\n\nvar areaStream$1 = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream$1.lineStart = areaRingStart$1;\n    areaStream$1.lineEnd = areaRingEnd$1;\n  },\n  polygonEnd: function() {\n    areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop;\n    areaSum$1.add(abs(areaRingSum$1));\n    areaRingSum$1.reset();\n  },\n  result: function() {\n    var area = areaSum$1 / 2;\n    areaSum$1.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart$1() {\n  areaStream$1.point = areaPointFirst$1;\n}\n\nfunction areaPointFirst$1(x, y) {\n  areaStream$1.point = areaPoint$1;\n  x00 = x0$1 = x, y00 = y0$1 = y;\n}\n\nfunction areaPoint$1(x, y) {\n  areaRingSum$1.add(y0$1 * x - x0$1 * y);\n  x0$1 = x, y0$1 = y;\n}\n\nfunction areaRingEnd$1() {\n  areaPoint$1(x00, y00);\n}\n\nvar x0$2 = Infinity,\n    y0$2 = x0$2,\n    x1 = -x0$2,\n    y1 = x1;\n\nvar boundsStream$1 = {\n  point: boundsPoint$1,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0$2, y0$2], [x1, y1]];\n    x1 = y1 = -(y0$2 = x0$2 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint$1(x, y) {\n  if (x < x0$2) x0$2 = x;\n  if (x > x1) x1 = x;\n  if (y < y0$2) y0$2 = y;\n  if (y > y1) y1 = y;\n}\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0$1 = 0,\n    Y0$1 = 0,\n    Z0$1 = 0,\n    X1$1 = 0,\n    Y1$1 = 0,\n    Z1$1 = 0,\n    X2$1 = 0,\n    Y2$1 = 0,\n    Z2$1 = 0,\n    x00$1,\n    y00$1,\n    x0$3,\n    y0$3;\n\nvar centroidStream$1 = {\n  point: centroidPoint$1,\n  lineStart: centroidLineStart$1,\n  lineEnd: centroidLineEnd$1,\n  polygonStart: function() {\n    centroidStream$1.lineStart = centroidRingStart$1;\n    centroidStream$1.lineEnd = centroidRingEnd$1;\n  },\n  polygonEnd: function() {\n    centroidStream$1.point = centroidPoint$1;\n    centroidStream$1.lineStart = centroidLineStart$1;\n    centroidStream$1.lineEnd = centroidLineEnd$1;\n  },\n  result: function() {\n    var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]\n        : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]\n        : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]\n        : [NaN, NaN];\n    X0$1 = Y0$1 = Z0$1 =\n    X1$1 = Y1$1 = Z1$1 =\n    X2$1 = Y2$1 = Z2$1 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint$1(x, y) {\n  X0$1 += x;\n  Y0$1 += y;\n  ++Z0$1;\n}\n\nfunction centroidLineStart$1() {\n  centroidStream$1.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream$1.point = centroidPointLine;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);\n  X1$1 += z * (x0$3 + x) / 2;\n  Y1$1 += z * (y0$3 + y) / 2;\n  Z1$1 += z;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction centroidLineEnd$1() {\n  centroidStream$1.point = centroidPoint$1;\n}\n\nfunction centroidRingStart$1() {\n  centroidStream$1.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd$1() {\n  centroidPointRing(x00$1, y00$1);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream$1.point = centroidPointRing;\n  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0$3,\n      dy = y - y0$3,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1$1 += z * (x0$3 + x) / 2;\n  Y1$1 += z * (y0$3 + y) / 2;\n  Z1$1 += z;\n\n  z = y0$3 * x - x0$3 * y;\n  X2$1 += z * (x0$3 + x);\n  Y2$1 += z * (y0$3 + y);\n  Z2$1 += z * 3;\n  centroidPoint$1(x0$3 = x, y0$3 = y);\n}\n\nfunction PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n\nvar lengthSum$1 = adder(),\n    lengthRing,\n    x00$2,\n    y00$2,\n    x0$4,\n    y0$4;\n\nvar lengthStream$1 = {\n  point: noop,\n  lineStart: function() {\n    lengthStream$1.point = lengthPointFirst$1;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint$1(x00$2, y00$2);\n    lengthStream$1.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum$1;\n    lengthSum$1.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst$1(x, y) {\n  lengthStream$1.point = lengthPoint$1;\n  x00$2 = x0$4 = x, y00$2 = y0$4 = y;\n}\n\nfunction lengthPoint$1(x, y) {\n  x0$4 -= x, y0$4 -= y;\n  lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));\n  x0$4 = x, y0$4 = y;\n}\n\nfunction PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle$1(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle$1(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle$1(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n\nfunction index(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      geoStream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    geoStream(object, projectionStream(areaStream$1));\n    return areaStream$1.result();\n  };\n\n  path.measure = function(object) {\n    geoStream(object, projectionStream(lengthStream$1));\n    return lengthStream$1.result();\n  };\n\n  path.bounds = function(object) {\n    geoStream(object, projectionStream(boundsStream$1));\n    return boundsStream$1.result();\n  };\n\n  path.centroid = function(object) {\n    geoStream(object, projectionStream(centroidStream$1));\n    return centroidStream$1.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n\nfunction transform(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nfunction transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream$1));\n  fitBounds(boundsStream$1.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nfunction fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nfunction fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nfunction fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nfunction fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nfunction resample(project, delta2) {\n  return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample$1(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n  function transform$$1(x, y) {\n    return [dx + k * x, dy - k * y];\n  }\n  transform$$1.invert = function(x, y) {\n    return [(x - dx) / k, (dy - y) / k];\n  };\n  return transform$$1;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform$$1(x, y) {\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform$$1.invert = function(x, y) {\n    return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n  };\n  return transform$$1;\n}\n\nfunction projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nfunction projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n        transform$$1 = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform$$1);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n\nfunction conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n\nfunction cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n\nfunction conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y;\n    return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nfunction conicEqualArea() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n\nfunction albers() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nfunction albersUsa() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n\nfunction azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nfunction azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n\nvar azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nfunction azimuthalEqualArea() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n\nvar azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nfunction azimuthalEquidistant() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n\nfunction mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nfunction mercator() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nfunction mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nfunction conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n    return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nfunction conicConformal() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n\nfunction equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nfunction equirectangular() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n\nfunction conicEquidistantRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin(nx), g - gy * cos(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y;\n    return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nfunction conicEquidistant() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nfunction equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nfunction equalEarth() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n\nfunction gnomonicRaw(x, y) {\n  var cy = cos(y), k = cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nfunction gnomonic() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n\nfunction scaleTranslate$1(kx, ky, tx, ty) {\n  return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n    point: function(x, y) {\n      this.stream.point(x * kx + tx, y * ky + ty);\n    }\n  });\n}\n\nfunction identity$1() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity, // scale, translate and reflect\n      x0 = null, y0, x1, y1, // clip extent\n      postclip = identity,\n      cache,\n      cacheStream,\n      projection;\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return projection = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = transform$$1(postclip(cacheStream = stream));\n    },\n    postclip: function(_) {\n      return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n    },\n    clipExtent: function(_) {\n      return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n    },\n    scale: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n    },\n    translate: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n    },\n    reflectX: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n    },\n    reflectY: function(_) {\n      return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n    },\n    fitExtent: function(extent, object) {\n      return fitExtent(projection, extent, object);\n    },\n    fitSize: function(size, object) {\n      return fitSize(projection, size, object);\n    },\n    fitWidth: function(width, object) {\n      return fitWidth(projection, width, object);\n    },\n    fitHeight: function(height, object) {\n      return fitHeight(projection, height, object);\n    }\n  };\n}\n\nfunction naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nfunction naturalEarth1() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n\nfunction orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nfunction orthographic() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n\nfunction stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nfunction stereographic() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n\nfunction transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nfunction transverseMercator() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n\nexports.geoArea = area;\nexports.geoBounds = bounds;\nexports.geoCentroid = centroid;\nexports.geoCircle = circle;\nexports.geoClipAntimeridian = clipAntimeridian;\nexports.geoClipCircle = clipCircle;\nexports.geoClipExtent = extent;\nexports.geoClipRectangle = clipRectangle;\nexports.geoContains = contains;\nexports.geoDistance = distance;\nexports.geoGraticule = graticule;\nexports.geoGraticule10 = graticule10;\nexports.geoInterpolate = interpolate;\nexports.geoLength = length;\nexports.geoPath = index;\nexports.geoAlbers = albers;\nexports.geoAlbersUsa = albersUsa;\nexports.geoAzimuthalEqualArea = azimuthalEqualArea;\nexports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\nexports.geoAzimuthalEquidistant = azimuthalEquidistant;\nexports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\nexports.geoConicConformal = conicConformal;\nexports.geoConicConformalRaw = conicConformalRaw;\nexports.geoConicEqualArea = conicEqualArea;\nexports.geoConicEqualAreaRaw = conicEqualAreaRaw;\nexports.geoConicEquidistant = conicEquidistant;\nexports.geoConicEquidistantRaw = conicEquidistantRaw;\nexports.geoEqualEarth = equalEarth;\nexports.geoEqualEarthRaw = equalEarthRaw;\nexports.geoEquirectangular = equirectangular;\nexports.geoEquirectangularRaw = equirectangularRaw;\nexports.geoGnomonic = gnomonic;\nexports.geoGnomonicRaw = gnomonicRaw;\nexports.geoIdentity = identity$1;\nexports.geoProjection = projection;\nexports.geoProjectionMutator = projectionMutator;\nexports.geoMercator = mercator;\nexports.geoMercatorRaw = mercatorRaw;\nexports.geoNaturalEarth1 = naturalEarth1;\nexports.geoNaturalEarth1Raw = naturalEarth1Raw;\nexports.geoOrthographic = orthographic;\nexports.geoOrthographicRaw = orthographicRaw;\nexports.geoStereographic = stereographic;\nexports.geoStereographicRaw = stereographicRaw;\nexports.geoTransverseMercator = transverseMercator;\nexports.geoTransverseMercatorRaw = transverseMercatorRaw;\nexports.geoRotation = rotation;\nexports.geoStream = geoStream;\nexports.geoTransform = transform;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{\"d3-array\":193}],195:[function(require,module,exports){\n'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n\n},{\"./des/cbc\":196,\"./des/cipher\":197,\"./des/des\":198,\"./des/ede\":199,\"./des/utils\":200}],196:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n\n},{\"inherits\":262,\"minimalistic-assert\":268}],197:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n\n},{\"minimalistic-assert\":268}],198:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar utils = des.utils;\nvar Cipher = des.Cipher;\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n\n},{\"../des\":195,\"inherits\":262,\"minimalistic-assert\":268}],199:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar Cipher = des.Cipher;\nvar DES = des.DES;\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n\n},{\"../des\":195,\"inherits\":262,\"minimalistic-assert\":268}],200:[function(require,module,exports){\n'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n\n},{}],201:[function(require,module,exports){\n(function (Buffer){\nvar generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./lib/dh\":202,\"./lib/generatePrime\":203,\"./lib/primes.json\":204,\"buffer\":182}],202:[function(require,module,exports){\n(function (Buffer){\nvar BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./generatePrime\":203,\"bn.js\":147,\"buffer\":182,\"miller-rabin\":267,\"randombytes\":298}],203:[function(require,module,exports){\nvar randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n\n},{\"bn.js\":147,\"miller-rabin\":267,\"randombytes\":298}],204:[function(require,module,exports){\nmodule.exports={\n    \"modp1\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n    },\n    \"modp2\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n    },\n    \"modp5\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n    },\n    \"modp14\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n    },\n    \"modp15\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n    },\n    \"modp16\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n    },\n    \"modp17\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n    },\n    \"modp18\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n    }\n}\n},{}],205:[function(require,module,exports){\n'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n\n},{\"../package.json\":220,\"./elliptic/curve\":208,\"./elliptic/curves\":211,\"./elliptic/ec\":212,\"./elliptic/eddsa\":215,\"./elliptic/utils\":219,\"brorand\":148}],206:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  for (var j = 0; j < naf.length; j += doubles.step) {\n    var nafW = 0;\n    for (var k = j + doubles.step - 1; k >= j; k--)\n      nafW = (nafW << 1) + naf[k];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (var j = 0; j < repr.length; j++) {\n      var nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var k = 0; i >= 0 && naf[i] === 0; i--)\n      k++;\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n                                                       points,\n                                                       coeffs,\n                                                       len,\n                                                       jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  for (var i = 0; i < len; i++) {\n    var p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (var i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a]);\n      naf[b] = getNAF(coeffs[b], wndWidth[b]);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b] /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (var j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (var i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (var j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (var j = 0; j < len; j++) {\n      var z = tmp[j];\n      var p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (var i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n                          bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n\n},{\"../utils\":219,\"bn.js\":147}],207:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // E = a * C\n    var e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      var h = this.z.redSqr();\n      // J = F - 2 * H\n      var j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    var e = c.redAdd(d);\n    // H = (c * Z1)^2\n    var h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    var j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n                          this.y,\n                          this.z,\n                          this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n\n},{\"../utils\":219,\"./base\":206,\"bn.js\":147,\"inherits\":262}],208:[function(require,module,exports){\n'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n\n},{\"./base\":206,\"./edwards\":207,\"./mont\":209,\"./short\":210}],209:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n\n},{\"../utils\":219,\"./base\":206,\"bn.js\":147,\"inherits\":262}],210:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16)\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 }\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n  var npoints = this._endoWnafT1;\n  var ncoeffs = this._endoWnafT2;\n  for (var i = 0; i < points.length; i++) {\n    var split = this._endoSplit(coeffs[i]);\n    var p = points[i];\n    var beta = p._getBeta();\n\n    if (split.k1.negative) {\n      split.k1.ineg();\n      p = p.neg(true);\n    }\n    if (split.k2.negative) {\n      split.k2.ineg();\n      beta = beta.neg(true);\n    }\n\n    npoints[i * 2] = p;\n    npoints[i * 2 + 1] = beta;\n    ncoeffs[i * 2] = split.k1;\n    ncoeffs[i * 2 + 1] = split.k2;\n  }\n  var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n  // Clean-up references to points and coefficients\n  for (var j = 0; j < i * 2; j++) {\n    npoints[j] = null;\n    ncoeffs[j] = null;\n  }\n  return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul)\n      }\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1)\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1)\n    }\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point))\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point))\n    }\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate)\n      }\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (var i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (var i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\n},{\"../utils\":219,\"./base\":206,\"bn.js\":147,\"inherits\":262}],211:[function(require,module,exports){\n'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else\n    this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve\n      });\n      return curve;\n    }\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n  ]\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n  ]\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n  ]\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n  ]\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n  ]\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9'\n  ]\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658'\n  ]\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3'\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15'\n    }\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre\n  ]\n});\n\n},{\"./curve\":208,\"./precomputed/secp256k1\":218,\"./utils\":219,\"hash.js\":228}],212:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray()\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  do {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8'\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; true; iter++) {\n    var k = options.k ?\n        options.k(iter) :\n        new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n\n  if (!this.curve._maxwellTrick) {\n    var p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n\n},{\"../curves\":211,\"../utils\":219,\"./key\":213,\"./signature\":214,\"bn.js\":147,\"brorand\":148,\"hmac-drbg\":240}],213:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n\n},{\"../utils\":219,\"bn.js\":147}],214:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n  }\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0 && (r[1] & 0x80)) {\n    r = r.slice(1);\n  }\n  if (s[0] === 0 && (s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n\n},{\"../utils\":219,\"bn.js\":147}],215:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  var curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n               .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n\n},{\"../curves\":211,\"../utils\":219,\"./key\":216,\"./signature\":217,\"hash.js\":228}],216:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n\n},{\"../utils\":219}],217:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength)\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n\n},{\"../utils\":219,\"bn.js\":147}],218:[function(require,module,exports){\nmodule.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n      ]\n    ]\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n      ]\n    ]\n  }\n};\n\n},{}],219:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n  var naf = [];\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n  while (k.cmpn(1) >= 0) {\n    var z;\n    if (k.isOdd()) {\n      var mod = k.andln(ws - 1);\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n    naf.push(z);\n\n    // Optimization, shift by word if possible\n    var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n    for (var i = 1; i < shift; i++)\n      naf.push(0);\n    k.iushrn(shift);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    []\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      var m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      var m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n           this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n                                     bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n\n},{\"bn.js\":147,\"minimalistic-assert\":268,\"minimalistic-crypto-utils\":269}],220:[function(require,module,exports){\nmodule.exports={\n  \"_args\": [\n    [\n      \"elliptic@6.5.1\",\n      \"/Users/caldwell/geopackage-js\"\n    ]\n  ],\n  \"_development\": true,\n  \"_from\": \"elliptic@6.5.1\",\n  \"_id\": \"elliptic@6.5.1\",\n  \"_inBundle\": false,\n  \"_integrity\": \"sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==\",\n  \"_location\": \"/elliptic\",\n  \"_phantomChildren\": {},\n  \"_requested\": {\n    \"type\": \"version\",\n    \"registry\": true,\n    \"raw\": \"elliptic@6.5.1\",\n    \"name\": \"elliptic\",\n    \"escapedName\": \"elliptic\",\n    \"rawSpec\": \"6.5.1\",\n    \"saveSpec\": null,\n    \"fetchSpec\": \"6.5.1\"\n  },\n  \"_requiredBy\": [\n    \"/browserify-sign\",\n    \"/create-ecdh\"\n  ],\n  \"_resolved\": \"https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz\",\n  \"_spec\": \"6.5.1\",\n  \"_where\": \"/Users/caldwell/geopackage-js\",\n  \"author\": {\n    \"name\": \"Fedor Indutny\",\n    \"email\": \"fedor@indutny.com\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/indutny/elliptic/issues\"\n  },\n  \"dependencies\": {\n    \"bn.js\": \"^4.4.0\",\n    \"brorand\": \"^1.0.1\",\n    \"hash.js\": \"^1.0.0\",\n    \"hmac-drbg\": \"^1.0.0\",\n    \"inherits\": \"^2.0.1\",\n    \"minimalistic-assert\": \"^1.0.0\",\n    \"minimalistic-crypto-utils\": \"^1.0.0\"\n  },\n  \"description\": \"EC cryptography\",\n  \"devDependencies\": {\n    \"brfs\": \"^1.4.3\",\n    \"coveralls\": \"^3.0.4\",\n    \"grunt\": \"^1.0.4\",\n    \"grunt-browserify\": \"^5.0.0\",\n    \"grunt-cli\": \"^1.2.0\",\n    \"grunt-contrib-connect\": \"^1.0.0\",\n    \"grunt-contrib-copy\": \"^1.0.0\",\n    \"grunt-contrib-uglify\": \"^1.0.1\",\n    \"grunt-mocha-istanbul\": \"^3.0.1\",\n    \"grunt-saucelabs\": \"^9.0.1\",\n    \"istanbul\": \"^0.4.2\",\n    \"jscs\": \"^3.0.7\",\n    \"jshint\": \"^2.6.0\",\n    \"mocha\": \"^6.1.4\"\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"homepage\": \"https://github.com/indutny/elliptic\",\n  \"keywords\": [\n    \"EC\",\n    \"Elliptic\",\n    \"curve\",\n    \"Cryptography\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"lib/elliptic.js\",\n  \"name\": \"elliptic\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+ssh://git@github.com/indutny/elliptic.git\"\n  },\n  \"scripts\": {\n    \"jscs\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n    \"jshint\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n    \"lint\": \"npm run jscs && npm run jshint\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n    \"version\": \"grunt dist && git add dist/\"\n  },\n  \"version\": \"6.5.1\"\n}\n\n},{}],221:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],222:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n  }\n\n  var keyLen = keyBits / 8\n  var key = Buffer.alloc(keyLen)\n  var iv = Buffer.alloc(ivLen || 0)\n  var tmp = Buffer.alloc(0)\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5()\n    hash.update(tmp)\n    hash.update(password)\n    if (salt) hash.update(salt)\n    tmp = hash.digest()\n\n    var used = 0\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen\n      used = Math.min(keyLen, tmp.length)\n      tmp.copy(key, keyStart, 0, used)\n      keyLen -= used\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen\n      var length = Math.min(ivLen, tmp.length - used)\n      tmp.copy(iv, ivStart, used, used + length)\n      ivLen -= length\n    }\n  }\n\n  tmp.fill(0)\n  return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n\n},{\"md5.js\":266,\"safe-buffer\":318}],223:[function(require,module,exports){\n'use strict';\nconst toBytes = s => [...s].map(c => c.charCodeAt(0));\nconst xpiZipFilename = toBytes('META-INF/mozilla.rsa');\nconst oxmlContentTypes = toBytes('[Content_Types].xml');\nconst oxmlRels = toBytes('_rels/.rels');\n\nmodule.exports = input => {\n\tconst buf = input instanceof Uint8Array ? input : new Uint8Array(input);\n\n\tif (!(buf && buf.length > 1)) {\n\t\treturn null;\n\t}\n\n\tconst check = (header, options) => {\n\t\toptions = Object.assign({\n\t\t\toffset: 0\n\t\t}, options);\n\n\t\tfor (let i = 0; i < header.length; i++) {\n\t\t\t// If a bitmask is set\n\t\t\tif (options.mask) {\n\t\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\t\tif (header[i] !== (options.mask[i] & buf[i + options.offset])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (header[i] !== buf[i + options.offset]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n\n\tconst checkString = (header, options) => check(toBytes(header), options);\n\n\tif (check([0xFF, 0xD8, 0xFF])) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (check([0x47, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\t// Needs to be before `tif` check\n\tif (\n\t\t(check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) &&\n\t\tcheck([0x43, 0x52], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'cr2',\n\t\t\tmime: 'image/x-canon-cr2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x49, 0x49, 0x2A, 0x0]) ||\n\t\tcheck([0x4D, 0x4D, 0x0, 0x2A])\n\t) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4D])) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0xBC])) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (check([0x38, 0x42, 0x50, 0x53])) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\t// Zip-based file formats\n\t// Need to be before the `zip` check\n\tif (check([0x50, 0x4B, 0x3, 0x4])) {\n\t\tif (\n\t\t\tcheck([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'epub',\n\t\t\t\tmime: 'application/epub+zip'\n\t\t\t};\n\t\t}\n\n\t\t// Assumes signed `.xpi` from addons.mozilla.org\n\t\tif (check(xpiZipFilename, {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'xpi',\n\t\t\t\tmime: 'application/x-xpinstall'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.text', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'odt',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.text'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.spreadsheet', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'ods',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.spreadsheet'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.presentation', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'odp',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.presentation'\n\t\t\t};\n\t\t}\n\n\t\t// https://github.com/file/file/blob/master/magic/Magdir/msooxml\n\t\tif (check(oxmlContentTypes, {offset: 30}) || check(oxmlRels, {offset: 30})) {\n\t\t\tconst sliced = buf.subarray(4, 4 + 2000);\n\t\t\tconst nextZipHeaderIndex = arr => arr.findIndex((el, i, arr) => arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4);\n\t\t\tconst header2Pos = nextZipHeaderIndex(sliced);\n\n\t\t\tif (header2Pos !== -1) {\n\t\t\t\tconst slicedAgain = buf.subarray(header2Pos + 8, header2Pos + 8 + 1000);\n\t\t\t\tconst header3Pos = nextZipHeaderIndex(slicedAgain);\n\n\t\t\t\tif (header3Pos !== -1) {\n\t\t\t\t\tconst offset = 8 + header2Pos + header3Pos + 30;\n\n\t\t\t\t\tif (checkString('word/', {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'docx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (checkString('ppt/', {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'pptx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (checkString('xl/', {offset})) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0x50, 0x4B]) &&\n\t\t(buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) &&\n\t\t(buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8)\n\t) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&\n\t\t(buf[6] === 0x0 || buf[6] === 0x1)\n\t) {\n\t\treturn {\n\t\t\text: 'rar',\n\t\t\tmime: 'application/x-rar-compressed'\n\t\t};\n\t}\n\n\tif (check([0x1F, 0x8B, 0x8])) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x5A, 0x68])) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\treturn {\n\t\t\text: '7z',\n\t\t\tmime: 'application/x-7z-compressed'\n\t\t};\n\t}\n\n\tif (check([0x78, 0x01])) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\tif (check([0x33, 0x67, 0x70, 0x35]) || // 3gp5\n\t\t(\n\t\t\tcheck([0x0, 0x0, 0x0]) && check([0x66, 0x74, 0x79, 0x70], {offset: 4}) &&\n\t\t\t\t(\n\t\t\t\t\tcheck([0x6D, 0x70, 0x34, 0x31], {offset: 8}) || // MP41\n\t\t\t\t\tcheck([0x6D, 0x70, 0x34, 0x32], {offset: 8}) || // MP42\n\t\t\t\t\tcheck([0x69, 0x73, 0x6F, 0x6D], {offset: 8}) || // ISOM\n\t\t\t\t\tcheck([0x69, 0x73, 0x6F, 0x32], {offset: 8}) || // ISO2\n\t\t\t\t\tcheck([0x6D, 0x6D, 0x70, 0x34], {offset: 8}) || // MMP4\n\t\t\t\t\tcheck([0x4D, 0x34, 0x56], {offset: 8}) || // M4V\n\t\t\t\t\tcheck([0x64, 0x61, 0x73, 0x68], {offset: 8}) // DASH\n\t\t\t\t)\n\t\t)) {\n\t\treturn {\n\t\t\text: 'mp4',\n\t\t\tmime: 'video/mp4'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x54, 0x68, 0x64])) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\tif (check([0x1A, 0x45, 0xDF, 0xA3])) {\n\t\tconst sliced = buf.subarray(4, 4 + 4096);\n\t\tconst idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82);\n\n\t\tif (idPos !== -1) {\n\t\t\tconst docTypePos = idPos + 3;\n\t\t\tconst findDocType = type => [...type].every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0));\n\n\t\t\tif (findDocType('matroska')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mkv',\n\t\t\t\t\tmime: 'video/x-matroska'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (findDocType('webm')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'webm',\n\t\t\t\t\tmime: 'video/webm'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tif (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) ||\n\t\tcheck([0x66, 0x72, 0x65, 0x65], {offset: 4}) ||\n\t\tcheck([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) ||\n\t\tcheck([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG\n\t\tcheck([0x77, 0x69, 0x64, 0x65], {offset: 4})) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\t// RIFF file format which might be AVI, WAV, QCP, etc\n\tif (check([0x52, 0x49, 0x46, 0x46])) {\n\t\tif (check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'avi',\n\t\t\t\tmime: 'video/x-msvideo'\n\t\t\t};\n\t\t}\n\t\tif (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'wav',\n\t\t\t\tmime: 'audio/x-wav'\n\t\t\t};\n\t\t}\n\t\t// QLCM, QCP file\n\t\tif (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'qcp',\n\t\t\t\tmime: 'audio/qcelp'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\treturn {\n\t\t\text: 'wmv',\n\t\t\tmime: 'video/x-ms-wmv'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x0, 0x0, 0x1, 0xBA]) ||\n\t\tcheck([0x0, 0x0, 0x1, 0xB3])\n\t) {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\tif (check([0x66, 0x74, 0x79, 0x70, 0x33, 0x67], {offset: 4})) {\n\t\treturn {\n\t\t\text: '3gp',\n\t\t\tmime: 'video/3gpp'\n\t\t};\n\t}\n\n\t// Check for MPEG header at different starting offsets\n\tfor (let start = 0; start < 2 && start < (buf.length - 16); start++) {\n\t\tif (\n\t\t\tcheck([0x49, 0x44, 0x33], {offset: start}) || // ID3 header\n\t\t\tcheck([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE2]}) // MPEG 1 or 2 Layer 3 header\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xE4], {offset: start, mask: [0xFF, 0xE4]}) // MPEG 1 or 2 Layer 2 header\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xF8], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 2 layer 0 using ADTS\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xF0], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 4 layer 0 using ADTS\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp4',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) ||\n\t\tcheck([0x4D, 0x34, 0x41, 0x20])\n\t) {\n\t\treturn {\n\t\t\text: 'm4a',\n\t\t\tmime: 'audio/m4a'\n\t\t};\n\t}\n\n\t// Needs to be before `ogg` check\n\tif (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) {\n\t\treturn {\n\t\t\text: 'opus',\n\t\t\tmime: 'audio/opus'\n\t\t};\n\t}\n\n\t// If 'OggS' in first  bytes, then OGG container\n\tif (check([0x4F, 0x67, 0x67, 0x53])) {\n\t\t// This is a OGG container\n\n\t\t// If ' theora' in header.\n\t\tif (check([0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogv',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\t\t// If '\\x01video' in header.\n\t\tif (check([0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogm',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\t\t// If ' FLAC' in header  https://xiph.org/flac/faq.html\n\t\tif (check([0x7F, 0x46, 0x4C, 0x41, 0x43], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'oga',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// 'Speex  ' in header https://en.wikipedia.org/wiki/Speex\n\t\tif (check([0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'spx',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01vorbis' in header\n\t\tif (check([0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogg',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\treturn {\n\t\t\text: 'ogx',\n\t\t\tmime: 'application/ogg'\n\t\t};\n\t}\n\n\tif (check([0x66, 0x4C, 0x61, 0x43])) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x41, 0x43, 0x20])) {\n\t\treturn {\n\t\t\text: 'ape',\n\t\t\tmime: 'audio/ape'\n\t\t};\n\t}\n\n\tif (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x50, 0x44, 0x46])) {\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x5A])) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif (\n\t\t(buf[0] === 0x43 || buf[0] === 0x46) &&\n\t\tcheck([0x57, 0x53], {offset: 1})\n\t) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\tif (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x61, 0x73, 0x6D])) {\n\t\treturn {\n\t\t\text: 'wasm',\n\t\t\tmime: 'application/wasm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x46]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'font/woff'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x32]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'font/woff2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4C, 0x50], {offset: 34}) &&\n\t\t(\n\t\t\tcheck([0x00, 0x00, 0x01], {offset: 8}) ||\n\t\t\tcheck([0x01, 0x00, 0x02], {offset: 8}) ||\n\t\t\tcheck([0x02, 0x00, 0x02], {offset: 8})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/octet-stream'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'font/ttf'\n\t\t};\n\t}\n\n\tif (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'font/otf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x01, 0x00])) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x02, 0x00])) {\n\t\treturn {\n\t\t\text: 'cur',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x56, 0x01])) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x21])) {\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (check([0x53, 0x51, 0x4C, 0x69])) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (check([0x43, 0x72, 0x32, 0x34])) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4D, 0x53, 0x43, 0x46]) ||\n\t\tcheck([0x49, 0x53, 0x63, 0x28])\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\t// Needs to be before `ar` check\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) {\n\t\treturn {\n\t\t\text: 'deb',\n\t\t\tmime: 'application/x-deb'\n\t\t};\n\t}\n\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) {\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\tif (check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x1F, 0xA0]) ||\n\t\tcheck([0x1F, 0x9D])\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x5A, 0x49, 0x50])) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\treturn {\n\t\t\text: 'msi',\n\t\t\tmime: 'application/x-msi'\n\t\t};\n\t}\n\n\tif (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\treturn {\n\t\t\text: 'mxf',\n\t\t\tmime: 'application/mxf'\n\t\t};\n\t}\n\n\tif (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {\n\t\treturn {\n\t\t\text: 'mts',\n\t\t\tmime: 'video/mp2t'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) {\n\t\treturn {\n\t\t\text: 'blend',\n\t\t\tmime: 'application/x-blender'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x50, 0x47, 0xFB])) {\n\t\treturn {\n\t\t\text: 'bpg',\n\t\t\tmime: 'image/bpg'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t// JPEG-2000 family\n\n\t\tif (check([0x6A, 0x70, 0x32, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jp2',\n\t\t\t\tmime: 'image/jp2'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6A, 0x70, 0x78, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jpx',\n\t\t\t\tmime: 'image/jpx'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6A, 0x70, 0x6D, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jpm',\n\t\t\t\tmime: 'image/jpm'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6D, 0x6A, 0x70, 0x32], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'mj2',\n\t\t\t\tmime: 'image/mj2'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (check([0x46, 0x4F, 0x52, 0x4D, 0x00])) {\n\t\treturn {\n\t\t\text: 'aif',\n\t\t\tmime: 'audio/aiff'\n\t\t};\n\t}\n\n\tif (checkString('<?xml ')) {\n\t\treturn {\n\t\t\text: 'xml',\n\t\t\tmime: 'application/xml'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\treturn {\n\t\t\text: 'mobi',\n\t\t\tmime: 'application/x-mobipocket-ebook'\n\t\t};\n\t}\n\n\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\tif (check([0x66, 0x74, 0x79, 0x70], {offset: 4})) {\n\t\tif (check([0x6D, 0x69, 0x66, 0x31], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'heic',\n\t\t\t\tmime: 'image/heif'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6D, 0x73, 0x66, 0x31], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'heic',\n\t\t\t\tmime: 'image/heif-sequence'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x68, 0x65, 0x69, 0x63], {offset: 8}) || check([0x68, 0x65, 0x69, 0x78], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'heic',\n\t\t\t\tmime: 'image/heic'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x68, 0x65, 0x76, 0x63], {offset: 8}) || check([0x68, 0x65, 0x76, 0x78], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'heic',\n\t\t\t\tmime: 'image/heic-sequence'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'ktx',\n\t\t\tmime: 'image/ktx'\n\t\t};\n\t}\n\n\treturn null;\n};\n\n},{}],224:[function(require,module,exports){\nvar rbush = require('rbush');\nvar helpers = require('@turf/helpers');\nvar meta = require('@turf/meta');\nvar turfBBox = require('@turf/bbox').default;\nvar featureEach = meta.featureEach;\nvar coordEach = meta.coordEach;\nvar polygon = helpers.polygon;\nvar featureCollection = helpers.featureCollection;\n\n/**\n * GeoJSON implementation of [RBush](https://github.com/mourner/rbush#rbush) spatial index.\n *\n * @name rbush\n * @param {number} [maxEntries=9] defines the maximum number of entries in a tree node. 9 (used by default) is a\n * reasonable choice for most applications. Higher value means faster insertion and slower search, and vice versa.\n * @returns {RBush} GeoJSON RBush\n * @example\n * var geojsonRbush = require('geojson-rbush').default;\n * var tree = geojsonRbush();\n */\nfunction geojsonRbush(maxEntries) {\n    var tree = rbush(maxEntries);\n    /**\n     * [insert](https://github.com/mourner/rbush#data-format)\n     *\n     * @param {Feature} feature insert single GeoJSON Feature\n     * @returns {RBush} GeoJSON RBush\n     * @example\n     * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n     * tree.insert(poly)\n     */\n    tree.insert = function (feature) {\n        if (feature.type !== 'Feature') throw new Error('invalid feature');\n        feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n        return rbush.prototype.insert.call(this, feature);\n    };\n\n    /**\n     * [load](https://github.com/mourner/rbush#bulk-inserting-data)\n     *\n     * @param {FeatureCollection|Array<Feature>} features load entire GeoJSON FeatureCollection\n     * @returns {RBush} GeoJSON RBush\n     * @example\n     * var polys = turf.polygons([\n     *     [[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]],\n     *     [[[-93, 32], [-83, 32], [-83, 39], [-93, 39], [-93, 32]]]\n     * ]);\n     * tree.load(polys);\n     */\n    tree.load = function (features) {\n        var load = [];\n        // Load an Array of Features\n        if (Array.isArray(features)) {\n            features.forEach(function (feature) {\n                if (feature.type !== 'Feature') throw new Error('invalid features');\n                feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n                load.push(feature);\n            });\n        } else {\n            // Load a FeatureCollection\n            featureEach(features, function (feature) {\n                if (feature.type !== 'Feature') throw new Error('invalid features');\n                feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n                load.push(feature);\n            });\n        }\n        return rbush.prototype.load.call(this, load);\n    };\n\n    /**\n     * [remove](https://github.com/mourner/rbush#removing-data)\n     *\n     * @param {Feature} feature remove single GeoJSON Feature\n     * @param {Function} equals Pass a custom equals function to compare by value for removal.\n     * @returns {RBush} GeoJSON RBush\n     * @example\n     * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n     *\n     * tree.remove(poly);\n     */\n    tree.remove = function (feature, equals) {\n        if (feature.type !== 'Feature') throw new Error('invalid feature');\n        feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature);\n        return rbush.prototype.remove.call(this, feature, equals);\n    };\n\n    /**\n     * [clear](https://github.com/mourner/rbush#removing-data)\n     *\n     * @returns {RBush} GeoJSON Rbush\n     * @example\n     * tree.clear()\n     */\n    tree.clear = function () {\n        return rbush.prototype.clear.call(this);\n    };\n\n    /**\n     * [search](https://github.com/mourner/rbush#search)\n     *\n     * @param {BBox|FeatureCollection|Feature} geojson search with GeoJSON\n     * @returns {FeatureCollection} all features that intersects with the given GeoJSON.\n     * @example\n     * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n     *\n     * tree.search(poly);\n     */\n    tree.search = function (geojson) {\n        var features = rbush.prototype.search.call(this, this.toBBox(geojson));\n        return featureCollection(features);\n    };\n\n    /**\n     * [collides](https://github.com/mourner/rbush#collisions)\n     *\n     * @param {BBox|FeatureCollection|Feature} geojson collides with GeoJSON\n     * @returns {boolean} true if there are any items intersecting the given GeoJSON, otherwise false.\n     * @example\n     * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]);\n     *\n     * tree.collides(poly);\n     */\n    tree.collides = function (geojson) {\n        return rbush.prototype.collides.call(this, this.toBBox(geojson));\n    };\n\n    /**\n     * [all](https://github.com/mourner/rbush#search)\n     *\n     * @returns {FeatureCollection} all the features in RBush\n     * @example\n     * tree.all()\n     */\n    tree.all = function () {\n        var features = rbush.prototype.all.call(this);\n        return featureCollection(features);\n    };\n\n    /**\n     * [toJSON](https://github.com/mourner/rbush#export-and-import)\n     *\n     * @returns {any} export data as JSON object\n     * @example\n     * var exported = tree.toJSON()\n     */\n    tree.toJSON = function () {\n        return rbush.prototype.toJSON.call(this);\n    };\n\n    /**\n     * [fromJSON](https://github.com/mourner/rbush#export-and-import)\n     *\n     * @param {any} json import previously exported data\n     * @returns {RBush} GeoJSON RBush\n     * @example\n     * var exported = {\n     *   \"children\": [\n     *     {\n     *       \"type\": \"Feature\",\n     *       \"geometry\": {\n     *         \"type\": \"Point\",\n     *         \"coordinates\": [110, 50]\n     *       },\n     *       \"properties\": {},\n     *       \"bbox\": [110, 50, 110, 50]\n     *     }\n     *   ],\n     *   \"height\": 1,\n     *   \"leaf\": true,\n     *   \"minX\": 110,\n     *   \"minY\": 50,\n     *   \"maxX\": 110,\n     *   \"maxY\": 50\n     * }\n     * tree.fromJSON(exported)\n     */\n    tree.fromJSON = function (json) {\n        return rbush.prototype.fromJSON.call(this, json);\n    };\n\n    /**\n     * Converts GeoJSON to {minX, minY, maxX, maxY} schema\n     *\n     * @private\n     * @param {BBox|FeatureCollection|Feature} geojson feature(s) to retrieve BBox from\n     * @returns {Object} converted to {minX, minY, maxX, maxY}\n     */\n    tree.toBBox = function (geojson) {\n        var bbox;\n        if (geojson.bbox) bbox = geojson.bbox;\n        else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson;\n        else if (Array.isArray(geojson) && geojson.length === 6) bbox = [geojson[0], geojson[1], geojson[3], geojson[4]];\n        else if (geojson.type === 'Feature') bbox = turfBBox(geojson);\n        else if (geojson.type === 'FeatureCollection') bbox = turfBBox(geojson);\n        else throw new Error('invalid geojson')\n\n        return {\n            minX: bbox[0],\n            minY: bbox[1],\n            maxX: bbox[2],\n            maxY: bbox[3]\n        };\n    };\n    return tree;\n}\n\nmodule.exports = geojsonRbush;\nmodule.exports.default = geojsonRbush;\n\n},{\"@turf/bbox\":117,\"@turf/helpers\":123,\"@turf/meta\":225,\"rbush\":300}],225:[function(require,module,exports){\narguments[4][122][0].apply(exports,arguments)\n},{\"@turf/helpers\":123,\"dup\":122}],226:[function(require,module,exports){\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\ntypeof define === 'function' && define.amd ? define(factory) :\n(global.geojsonvt = factory());\n}(this, (function () { 'use strict';\n\n// calculate simplification data using optimized Douglas-Peucker algorithm\n\nfunction simplify(coords, first, last, sqTolerance) {\n    var maxSqDist = sqTolerance;\n    var mid = (last - first) >> 1;\n    var minPosToMid = last - first;\n    var index;\n\n    var ax = coords[first];\n    var ay = coords[first + 1];\n    var bx = coords[last];\n    var by = coords[last + 1];\n\n    for (var i = first + 3; i < last; i += 3) {\n        var d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by);\n\n        if (d > maxSqDist) {\n            index = i;\n            maxSqDist = d;\n\n        } else if (d === maxSqDist) {\n            // a workaround to ensure we choose a pivot close to the middle of the list,\n            // reducing recursion depth, for certain degenerate inputs\n            // https://github.com/mapbox/geojson-vt/issues/104\n            var posToMid = Math.abs(i - mid);\n            if (posToMid < minPosToMid) {\n                index = i;\n                minPosToMid = posToMid;\n            }\n        }\n    }\n\n    if (maxSqDist > sqTolerance) {\n        if (index - first > 3) simplify(coords, first, index, sqTolerance);\n        coords[index + 2] = maxSqDist;\n        if (last - index > 3) simplify(coords, index, last, sqTolerance);\n    }\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(px, py, x, y, bx, by) {\n\n    var dx = bx - x;\n    var dy = by - y;\n\n    if (dx !== 0 || dy !== 0) {\n\n        var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n        if (t > 1) {\n            x = bx;\n            y = by;\n\n        } else if (t > 0) {\n            x += dx * t;\n            y += dy * t;\n        }\n    }\n\n    dx = px - x;\n    dy = py - y;\n\n    return dx * dx + dy * dy;\n}\n\nfunction createFeature(id, type, geom, tags) {\n    var feature = {\n        id: typeof id === 'undefined' ? null : id,\n        type: type,\n        geometry: geom,\n        tags: tags,\n        minX: Infinity,\n        minY: Infinity,\n        maxX: -Infinity,\n        maxY: -Infinity\n    };\n    calcBBox(feature);\n    return feature;\n}\n\nfunction calcBBox(feature) {\n    var geom = feature.geometry;\n    var type = feature.type;\n\n    if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n        calcLineBBox(feature, geom);\n\n    } else if (type === 'Polygon' || type === 'MultiLineString') {\n        for (var i = 0; i < geom.length; i++) {\n            calcLineBBox(feature, geom[i]);\n        }\n\n    } else if (type === 'MultiPolygon') {\n        for (i = 0; i < geom.length; i++) {\n            for (var j = 0; j < geom[i].length; j++) {\n                calcLineBBox(feature, geom[i][j]);\n            }\n        }\n    }\n}\n\nfunction calcLineBBox(feature, geom) {\n    for (var i = 0; i < geom.length; i += 3) {\n        feature.minX = Math.min(feature.minX, geom[i]);\n        feature.minY = Math.min(feature.minY, geom[i + 1]);\n        feature.maxX = Math.max(feature.maxX, geom[i]);\n        feature.maxY = Math.max(feature.maxY, geom[i + 1]);\n    }\n}\n\n// converts GeoJSON feature into an intermediate projected JSON vector format with simplification data\n\nfunction convert(data, options) {\n    var features = [];\n    if (data.type === 'FeatureCollection') {\n        for (var i = 0; i < data.features.length; i++) {\n            convertFeature(features, data.features[i], options, i);\n        }\n\n    } else if (data.type === 'Feature') {\n        convertFeature(features, data, options);\n\n    } else {\n        // single geometry or a geometry collection\n        convertFeature(features, {geometry: data}, options);\n    }\n\n    return features;\n}\n\nfunction convertFeature(features, geojson, options, index) {\n    if (!geojson.geometry) return;\n\n    var coords = geojson.geometry.coordinates;\n    var type = geojson.geometry.type;\n    var tolerance = Math.pow(options.tolerance / ((1 << options.maxZoom) * options.extent), 2);\n    var geometry = [];\n    var id = geojson.id;\n    if (options.promoteId) {\n        id = geojson.properties[options.promoteId];\n    } else if (options.generateId) {\n        id = index || 0;\n    }\n    if (type === 'Point') {\n        convertPoint(coords, geometry);\n\n    } else if (type === 'MultiPoint') {\n        for (var i = 0; i < coords.length; i++) {\n            convertPoint(coords[i], geometry);\n        }\n\n    } else if (type === 'LineString') {\n        convertLine(coords, geometry, tolerance, false);\n\n    } else if (type === 'MultiLineString') {\n        if (options.lineMetrics) {\n            // explode into linestrings to be able to track metrics\n            for (i = 0; i < coords.length; i++) {\n                geometry = [];\n                convertLine(coords[i], geometry, tolerance, false);\n                features.push(createFeature(id, 'LineString', geometry, geojson.properties));\n            }\n            return;\n        } else {\n            convertLines(coords, geometry, tolerance, false);\n        }\n\n    } else if (type === 'Polygon') {\n        convertLines(coords, geometry, tolerance, true);\n\n    } else if (type === 'MultiPolygon') {\n        for (i = 0; i < coords.length; i++) {\n            var polygon = [];\n            convertLines(coords[i], polygon, tolerance, true);\n            geometry.push(polygon);\n        }\n    } else if (type === 'GeometryCollection') {\n        for (i = 0; i < geojson.geometry.geometries.length; i++) {\n            convertFeature(features, {\n                id: id,\n                geometry: geojson.geometry.geometries[i],\n                properties: geojson.properties\n            }, options, index);\n        }\n        return;\n    } else {\n        throw new Error('Input data is not a valid GeoJSON object.');\n    }\n\n    features.push(createFeature(id, type, geometry, geojson.properties));\n}\n\nfunction convertPoint(coords, out) {\n    out.push(projectX(coords[0]));\n    out.push(projectY(coords[1]));\n    out.push(0);\n}\n\nfunction convertLine(ring, out, tolerance, isPolygon) {\n    var x0, y0;\n    var size = 0;\n\n    for (var j = 0; j < ring.length; j++) {\n        var x = projectX(ring[j][0]);\n        var y = projectY(ring[j][1]);\n\n        out.push(x);\n        out.push(y);\n        out.push(0);\n\n        if (j > 0) {\n            if (isPolygon) {\n                size += (x0 * y - x * y0) / 2; // area\n            } else {\n                size += Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)); // length\n            }\n        }\n        x0 = x;\n        y0 = y;\n    }\n\n    var last = out.length - 3;\n    out[2] = 1;\n    simplify(out, 0, last, tolerance);\n    out[last + 2] = 1;\n\n    out.size = Math.abs(size);\n    out.start = 0;\n    out.end = out.size;\n}\n\nfunction convertLines(rings, out, tolerance, isPolygon) {\n    for (var i = 0; i < rings.length; i++) {\n        var geom = [];\n        convertLine(rings[i], geom, tolerance, isPolygon);\n        out.push(geom);\n    }\n}\n\nfunction projectX(x) {\n    return x / 360 + 0.5;\n}\n\nfunction projectY(y) {\n    var sin = Math.sin(y * Math.PI / 180);\n    var y2 = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI;\n    return y2 < 0 ? 0 : y2 > 1 ? 1 : y2;\n}\n\n/* clip features between two axis-parallel lines:\n *     |        |\n *  ___|___     |     /\n * /   |   \\____|____/\n *     |        |\n */\n\nfunction clip(features, scale, k1, k2, axis, minAll, maxAll, options) {\n\n    k1 /= scale;\n    k2 /= scale;\n\n    if (minAll >= k1 && maxAll < k2) return features; // trivial accept\n    else if (maxAll < k1 || minAll >= k2) return null; // trivial reject\n\n    var clipped = [];\n\n    for (var i = 0; i < features.length; i++) {\n\n        var feature = features[i];\n        var geometry = feature.geometry;\n        var type = feature.type;\n\n        var min = axis === 0 ? feature.minX : feature.minY;\n        var max = axis === 0 ? feature.maxX : feature.maxY;\n\n        if (min >= k1 && max < k2) { // trivial accept\n            clipped.push(feature);\n            continue;\n        } else if (max < k1 || min >= k2) { // trivial reject\n            continue;\n        }\n\n        var newGeometry = [];\n\n        if (type === 'Point' || type === 'MultiPoint') {\n            clipPoints(geometry, newGeometry, k1, k2, axis);\n\n        } else if (type === 'LineString') {\n            clipLine(geometry, newGeometry, k1, k2, axis, false, options.lineMetrics);\n\n        } else if (type === 'MultiLineString') {\n            clipLines(geometry, newGeometry, k1, k2, axis, false);\n\n        } else if (type === 'Polygon') {\n            clipLines(geometry, newGeometry, k1, k2, axis, true);\n\n        } else if (type === 'MultiPolygon') {\n            for (var j = 0; j < geometry.length; j++) {\n                var polygon = [];\n                clipLines(geometry[j], polygon, k1, k2, axis, true);\n                if (polygon.length) {\n                    newGeometry.push(polygon);\n                }\n            }\n        }\n\n        if (newGeometry.length) {\n            if (options.lineMetrics && type === 'LineString') {\n                for (j = 0; j < newGeometry.length; j++) {\n                    clipped.push(createFeature(feature.id, type, newGeometry[j], feature.tags));\n                }\n                continue;\n            }\n\n            if (type === 'LineString' || type === 'MultiLineString') {\n                if (newGeometry.length === 1) {\n                    type = 'LineString';\n                    newGeometry = newGeometry[0];\n                } else {\n                    type = 'MultiLineString';\n                }\n            }\n            if (type === 'Point' || type === 'MultiPoint') {\n                type = newGeometry.length === 3 ? 'Point' : 'MultiPoint';\n            }\n\n            clipped.push(createFeature(feature.id, type, newGeometry, feature.tags));\n        }\n    }\n\n    return clipped.length ? clipped : null;\n}\n\nfunction clipPoints(geom, newGeom, k1, k2, axis) {\n    for (var i = 0; i < geom.length; i += 3) {\n        var a = geom[i + axis];\n\n        if (a >= k1 && a <= k2) {\n            newGeom.push(geom[i]);\n            newGeom.push(geom[i + 1]);\n            newGeom.push(geom[i + 2]);\n        }\n    }\n}\n\nfunction clipLine(geom, newGeom, k1, k2, axis, isPolygon, trackMetrics) {\n\n    var slice = newSlice(geom);\n    var intersect = axis === 0 ? intersectX : intersectY;\n    var len = geom.start;\n    var segLen, t;\n\n    for (var i = 0; i < geom.length - 3; i += 3) {\n        var ax = geom[i];\n        var ay = geom[i + 1];\n        var az = geom[i + 2];\n        var bx = geom[i + 3];\n        var by = geom[i + 4];\n        var a = axis === 0 ? ax : ay;\n        var b = axis === 0 ? bx : by;\n        var exited = false;\n\n        if (trackMetrics) segLen = Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2));\n\n        if (a < k1) {\n            // ---|-->  | (line enters the clip region from the left)\n            if (b > k1) {\n                t = intersect(slice, ax, ay, bx, by, k1);\n                if (trackMetrics) slice.start = len + segLen * t;\n            }\n        } else if (a > k2) {\n            // |  <--|--- (line enters the clip region from the right)\n            if (b < k2) {\n                t = intersect(slice, ax, ay, bx, by, k2);\n                if (trackMetrics) slice.start = len + segLen * t;\n            }\n        } else {\n            addPoint(slice, ax, ay, az);\n        }\n        if (b < k1 && a >= k1) {\n            // <--|---  | or <--|-----|--- (line exits the clip region on the left)\n            t = intersect(slice, ax, ay, bx, by, k1);\n            exited = true;\n        }\n        if (b > k2 && a <= k2) {\n            // |  ---|--> or ---|-----|--> (line exits the clip region on the right)\n            t = intersect(slice, ax, ay, bx, by, k2);\n            exited = true;\n        }\n\n        if (!isPolygon && exited) {\n            if (trackMetrics) slice.end = len + segLen * t;\n            newGeom.push(slice);\n            slice = newSlice(geom);\n        }\n\n        if (trackMetrics) len += segLen;\n    }\n\n    // add the last point\n    var last = geom.length - 3;\n    ax = geom[last];\n    ay = geom[last + 1];\n    az = geom[last + 2];\n    a = axis === 0 ? ax : ay;\n    if (a >= k1 && a <= k2) addPoint(slice, ax, ay, az);\n\n    // close the polygon if its endpoints are not the same after clipping\n    last = slice.length - 3;\n    if (isPolygon && last >= 3 && (slice[last] !== slice[0] || slice[last + 1] !== slice[1])) {\n        addPoint(slice, slice[0], slice[1], slice[2]);\n    }\n\n    // add the final slice\n    if (slice.length) {\n        newGeom.push(slice);\n    }\n}\n\nfunction newSlice(line) {\n    var slice = [];\n    slice.size = line.size;\n    slice.start = line.start;\n    slice.end = line.end;\n    return slice;\n}\n\nfunction clipLines(geom, newGeom, k1, k2, axis, isPolygon) {\n    for (var i = 0; i < geom.length; i++) {\n        clipLine(geom[i], newGeom, k1, k2, axis, isPolygon, false);\n    }\n}\n\nfunction addPoint(out, x, y, z) {\n    out.push(x);\n    out.push(y);\n    out.push(z);\n}\n\nfunction intersectX(out, ax, ay, bx, by, x) {\n    var t = (x - ax) / (bx - ax);\n    out.push(x);\n    out.push(ay + (by - ay) * t);\n    out.push(1);\n    return t;\n}\n\nfunction intersectY(out, ax, ay, bx, by, y) {\n    var t = (y - ay) / (by - ay);\n    out.push(ax + (bx - ax) * t);\n    out.push(y);\n    out.push(1);\n    return t;\n}\n\nfunction wrap(features, options) {\n    var buffer = options.buffer / options.extent;\n    var merged = features;\n    var left  = clip(features, 1, -1 - buffer, buffer,     0, -1, 2, options); // left world copy\n    var right = clip(features, 1,  1 - buffer, 2 + buffer, 0, -1, 2, options); // right world copy\n\n    if (left || right) {\n        merged = clip(features, 1, -buffer, 1 + buffer, 0, -1, 2, options) || []; // center world copy\n\n        if (left) merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center\n        if (right) merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center\n    }\n\n    return merged;\n}\n\nfunction shiftFeatureCoords(features, offset) {\n    var newFeatures = [];\n\n    for (var i = 0; i < features.length; i++) {\n        var feature = features[i],\n            type = feature.type;\n\n        var newGeometry;\n\n        if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n            newGeometry = shiftCoords(feature.geometry, offset);\n\n        } else if (type === 'MultiLineString' || type === 'Polygon') {\n            newGeometry = [];\n            for (var j = 0; j < feature.geometry.length; j++) {\n                newGeometry.push(shiftCoords(feature.geometry[j], offset));\n            }\n        } else if (type === 'MultiPolygon') {\n            newGeometry = [];\n            for (j = 0; j < feature.geometry.length; j++) {\n                var newPolygon = [];\n                for (var k = 0; k < feature.geometry[j].length; k++) {\n                    newPolygon.push(shiftCoords(feature.geometry[j][k], offset));\n                }\n                newGeometry.push(newPolygon);\n            }\n        }\n\n        newFeatures.push(createFeature(feature.id, type, newGeometry, feature.tags));\n    }\n\n    return newFeatures;\n}\n\nfunction shiftCoords(points, offset) {\n    var newPoints = [];\n    newPoints.size = points.size;\n\n    if (points.start !== undefined) {\n        newPoints.start = points.start;\n        newPoints.end = points.end;\n    }\n\n    for (var i = 0; i < points.length; i += 3) {\n        newPoints.push(points[i] + offset, points[i + 1], points[i + 2]);\n    }\n    return newPoints;\n}\n\n// Transforms the coordinates of each feature in the given tile from\n// mercator-projected space into (extent x extent) tile space.\nfunction transformTile(tile, extent) {\n    if (tile.transformed) return tile;\n\n    var z2 = 1 << tile.z,\n        tx = tile.x,\n        ty = tile.y,\n        i, j, k;\n\n    for (i = 0; i < tile.features.length; i++) {\n        var feature = tile.features[i],\n            geom = feature.geometry,\n            type = feature.type;\n\n        feature.geometry = [];\n\n        if (type === 1) {\n            for (j = 0; j < geom.length; j += 2) {\n                feature.geometry.push(transformPoint(geom[j], geom[j + 1], extent, z2, tx, ty));\n            }\n        } else {\n            for (j = 0; j < geom.length; j++) {\n                var ring = [];\n                for (k = 0; k < geom[j].length; k += 2) {\n                    ring.push(transformPoint(geom[j][k], geom[j][k + 1], extent, z2, tx, ty));\n                }\n                feature.geometry.push(ring);\n            }\n        }\n    }\n\n    tile.transformed = true;\n\n    return tile;\n}\n\nfunction transformPoint(x, y, extent, z2, tx, ty) {\n    return [\n        Math.round(extent * (x * z2 - tx)),\n        Math.round(extent * (y * z2 - ty))];\n}\n\nfunction createTile(features, z, tx, ty, options) {\n    var tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent);\n    var tile = {\n        features: [],\n        numPoints: 0,\n        numSimplified: 0,\n        numFeatures: 0,\n        source: null,\n        x: tx,\n        y: ty,\n        z: z,\n        transformed: false,\n        minX: 2,\n        minY: 1,\n        maxX: -1,\n        maxY: 0\n    };\n    for (var i = 0; i < features.length; i++) {\n        tile.numFeatures++;\n        addFeature(tile, features[i], tolerance, options);\n\n        var minX = features[i].minX;\n        var minY = features[i].minY;\n        var maxX = features[i].maxX;\n        var maxY = features[i].maxY;\n\n        if (minX < tile.minX) tile.minX = minX;\n        if (minY < tile.minY) tile.minY = minY;\n        if (maxX > tile.maxX) tile.maxX = maxX;\n        if (maxY > tile.maxY) tile.maxY = maxY;\n    }\n    return tile;\n}\n\nfunction addFeature(tile, feature, tolerance, options) {\n\n    var geom = feature.geometry,\n        type = feature.type,\n        simplified = [];\n\n    if (type === 'Point' || type === 'MultiPoint') {\n        for (var i = 0; i < geom.length; i += 3) {\n            simplified.push(geom[i]);\n            simplified.push(geom[i + 1]);\n            tile.numPoints++;\n            tile.numSimplified++;\n        }\n\n    } else if (type === 'LineString') {\n        addLine(simplified, geom, tile, tolerance, false, false);\n\n    } else if (type === 'MultiLineString' || type === 'Polygon') {\n        for (i = 0; i < geom.length; i++) {\n            addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0);\n        }\n\n    } else if (type === 'MultiPolygon') {\n\n        for (var k = 0; k < geom.length; k++) {\n            var polygon = geom[k];\n            for (i = 0; i < polygon.length; i++) {\n                addLine(simplified, polygon[i], tile, tolerance, true, i === 0);\n            }\n        }\n    }\n\n    if (simplified.length) {\n        var tags = feature.tags || null;\n        if (type === 'LineString' && options.lineMetrics) {\n            tags = {};\n            for (var key in feature.tags) tags[key] = feature.tags[key];\n            tags['mapbox_clip_start'] = geom.start / geom.size;\n            tags['mapbox_clip_end'] = geom.end / geom.size;\n        }\n        var tileFeature = {\n            geometry: simplified,\n            type: type === 'Polygon' || type === 'MultiPolygon' ? 3 :\n                type === 'LineString' || type === 'MultiLineString' ? 2 : 1,\n            tags: tags\n        };\n        if (feature.id !== null) {\n            tileFeature.id = feature.id;\n        }\n        tile.features.push(tileFeature);\n    }\n}\n\nfunction addLine(result, geom, tile, tolerance, isPolygon, isOuter) {\n    var sqTolerance = tolerance * tolerance;\n\n    if (tolerance > 0 && (geom.size < (isPolygon ? sqTolerance : tolerance))) {\n        tile.numPoints += geom.length / 3;\n        return;\n    }\n\n    var ring = [];\n\n    for (var i = 0; i < geom.length; i += 3) {\n        if (tolerance === 0 || geom[i + 2] > sqTolerance) {\n            tile.numSimplified++;\n            ring.push(geom[i]);\n            ring.push(geom[i + 1]);\n        }\n        tile.numPoints++;\n    }\n\n    if (isPolygon) rewind(ring, isOuter);\n\n    result.push(ring);\n}\n\nfunction rewind(ring, clockwise) {\n    var area = 0;\n    for (var i = 0, len = ring.length, j = len - 2; i < len; j = i, i += 2) {\n        area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]);\n    }\n    if (area > 0 === clockwise) {\n        for (i = 0, len = ring.length; i < len / 2; i += 2) {\n            var x = ring[i];\n            var y = ring[i + 1];\n            ring[i] = ring[len - 2 - i];\n            ring[i + 1] = ring[len - 1 - i];\n            ring[len - 2 - i] = x;\n            ring[len - 1 - i] = y;\n        }\n    }\n}\n\nfunction geojsonvt(data, options) {\n    return new GeoJSONVT(data, options);\n}\n\nfunction GeoJSONVT(data, options) {\n    options = this.options = extend(Object.create(this.options), options);\n\n    var debug = options.debug;\n\n    if (debug) console.time('preprocess data');\n\n    if (options.maxZoom < 0 || options.maxZoom > 24) throw new Error('maxZoom should be in the 0-24 range');\n    if (options.promoteId && options.generateId) throw new Error('promoteId and generateId cannot be used together.');\n\n    var features = convert(data, options);\n\n    this.tiles = {};\n    this.tileCoords = [];\n\n    if (debug) {\n        console.timeEnd('preprocess data');\n        console.log('index: maxZoom: %d, maxPoints: %d', options.indexMaxZoom, options.indexMaxPoints);\n        console.time('generate tiles');\n        this.stats = {};\n        this.total = 0;\n    }\n\n    features = wrap(features, options);\n\n    // start slicing from the top tile down\n    if (features.length) this.splitTile(features, 0, 0, 0);\n\n    if (debug) {\n        if (features.length) console.log('features: %d, points: %d', this.tiles[0].numFeatures, this.tiles[0].numPoints);\n        console.timeEnd('generate tiles');\n        console.log('tiles generated:', this.total, JSON.stringify(this.stats));\n    }\n}\n\nGeoJSONVT.prototype.options = {\n    maxZoom: 14,            // max zoom to preserve detail on\n    indexMaxZoom: 5,        // max zoom in the tile index\n    indexMaxPoints: 100000, // max number of points per tile in the tile index\n    tolerance: 3,           // simplification tolerance (higher means simpler)\n    extent: 4096,           // tile extent\n    buffer: 64,             // tile buffer on each side\n    lineMetrics: false,     // whether to calculate line metrics\n    promoteId: null,        // name of a feature property to be promoted to feature.id\n    generateId: false,      // whether to generate feature ids. Cannot be used with promoteId\n    debug: 0                // logging level (0, 1 or 2)\n};\n\nGeoJSONVT.prototype.splitTile = function (features, z, x, y, cz, cx, cy) {\n\n    var stack = [features, z, x, y],\n        options = this.options,\n        debug = options.debug;\n\n    // avoid recursion by using a processing queue\n    while (stack.length) {\n        y = stack.pop();\n        x = stack.pop();\n        z = stack.pop();\n        features = stack.pop();\n\n        var z2 = 1 << z,\n            id = toID(z, x, y),\n            tile = this.tiles[id];\n\n        if (!tile) {\n            if (debug > 1) console.time('creation');\n\n            tile = this.tiles[id] = createTile(features, z, x, y, options);\n            this.tileCoords.push({z: z, x: x, y: y});\n\n            if (debug) {\n                if (debug > 1) {\n                    console.log('tile z%d-%d-%d (features: %d, points: %d, simplified: %d)',\n                        z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified);\n                    console.timeEnd('creation');\n                }\n                var key = 'z' + z;\n                this.stats[key] = (this.stats[key] || 0) + 1;\n                this.total++;\n            }\n        }\n\n        // save reference to original geometry in tile so that we can drill down later if we stop now\n        tile.source = features;\n\n        // if it's the first-pass tiling\n        if (!cz) {\n            // stop tiling if we reached max zoom, or if the tile is too simple\n            if (z === options.indexMaxZoom || tile.numPoints <= options.indexMaxPoints) continue;\n\n        // if a drilldown to a specific tile\n        } else {\n            // stop tiling if we reached base zoom or our target tile zoom\n            if (z === options.maxZoom || z === cz) continue;\n\n            // stop tiling if it's not an ancestor of the target tile\n            var m = 1 << (cz - z);\n            if (x !== Math.floor(cx / m) || y !== Math.floor(cy / m)) continue;\n        }\n\n        // if we slice further down, no need to keep source geometry\n        tile.source = null;\n\n        if (features.length === 0) continue;\n\n        if (debug > 1) console.time('clipping');\n\n        // values we'll use for clipping\n        var k1 = 0.5 * options.buffer / options.extent,\n            k2 = 0.5 - k1,\n            k3 = 0.5 + k1,\n            k4 = 1 + k1,\n            tl, bl, tr, br, left, right;\n\n        tl = bl = tr = br = null;\n\n        left  = clip(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, options);\n        right = clip(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, options);\n        features = null;\n\n        if (left) {\n            tl = clip(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);\n            bl = clip(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);\n            left = null;\n        }\n\n        if (right) {\n            tr = clip(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);\n            br = clip(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);\n            right = null;\n        }\n\n        if (debug > 1) console.timeEnd('clipping');\n\n        stack.push(tl || [], z + 1, x * 2,     y * 2);\n        stack.push(bl || [], z + 1, x * 2,     y * 2 + 1);\n        stack.push(tr || [], z + 1, x * 2 + 1, y * 2);\n        stack.push(br || [], z + 1, x * 2 + 1, y * 2 + 1);\n    }\n};\n\nGeoJSONVT.prototype.getTile = function (z, x, y) {\n    var options = this.options,\n        extent = options.extent,\n        debug = options.debug;\n\n    if (z < 0 || z > 24) return null;\n\n    var z2 = 1 << z;\n    x = ((x % z2) + z2) % z2; // wrap tile x coordinate\n\n    var id = toID(z, x, y);\n    if (this.tiles[id]) return transformTile(this.tiles[id], extent);\n\n    if (debug > 1) console.log('drilling down to z%d-%d-%d', z, x, y);\n\n    var z0 = z,\n        x0 = x,\n        y0 = y,\n        parent;\n\n    while (!parent && z0 > 0) {\n        z0--;\n        x0 = Math.floor(x0 / 2);\n        y0 = Math.floor(y0 / 2);\n        parent = this.tiles[toID(z0, x0, y0)];\n    }\n\n    if (!parent || !parent.source) return null;\n\n    // if we found a parent tile containing the original geometry, we can drill down from it\n    if (debug > 1) console.log('found parent tile z%d-%d-%d', z0, x0, y0);\n\n    if (debug > 1) console.time('drilling down');\n    this.splitTile(parent.source, z0, x0, y0, z, x, y);\n    if (debug > 1) console.timeEnd('drilling down');\n\n    return this.tiles[id] ? transformTile(this.tiles[id], extent) : null;\n};\n\nfunction toID(z, x, y) {\n    return (((1 << z) * y + x) * 32) + z;\n}\n\nfunction extend(dest, src) {\n    for (var i in src) dest[i] = src[i];\n    return dest;\n}\n\nreturn geojsonvt;\n\n})));\n\n},{}],227:[function(require,module,exports){\n'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n  if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n    throw new TypeError(prefix + ' must be a string or a buffer')\n  }\n}\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = Buffer.allocUnsafe(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    this.update(chunk, encoding)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this.digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  throwIfNotStringOrBuffer(data, 'Data')\n  if (this._finalized) throw new Error('Digest already called')\n  if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n\n  // reset state\n  this._block.fill(0)\n  this._blockOffset = 0\n  for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n\n},{\"inherits\":262,\"safe-buffer\":318,\"stream\":328}],228:[function(require,module,exports){\nvar hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n\n},{\"./hash/common\":229,\"./hash/hmac\":230,\"./hash/ripemd\":231,\"./hash/sha\":232,\"./hash/utils\":239}],229:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n\n},{\"./utils\":239,\"minimalistic-assert\":268}],230:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n\n},{\"./utils\":239,\"minimalistic-assert\":268}],231:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n\n},{\"./common\":229,\"./utils\":239}],232:[function(require,module,exports){\n'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n\n},{\"./sha/1\":233,\"./sha/224\":234,\"./sha/256\":235,\"./sha/384\":236,\"./sha/512\":237}],233:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":229,\"../utils\":239,\"./common\":238}],234:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n\n},{\"../utils\":239,\"./256\":235}],235:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":229,\"../utils\":239,\"./common\":238,\"minimalistic-assert\":268}],236:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n\n},{\"../utils\":239,\"./512\":237}],237:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\n},{\"../common\":229,\"../utils\":239,\"minimalistic-assert\":268}],238:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n\n},{\"../utils\":239}],239:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = (c >> 6) | 192;\n          res[p++] = (c & 63) | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = (c >> 18) | 240;\n          res[p++] = ((c >> 12) & 63) | 128;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        } else {\n          res[p++] = (c >> 12) | 224;\n          res[p++] = ((c >> 6) & 63) | 128;\n          res[p++] = (c & 63) | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n\n},{\"inherits\":262,\"minimalistic-assert\":268}],240:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n\n},{\"hash.js\":228,\"minimalistic-assert\":268,\"minimalistic-crypto-utils\":269}],241:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n},{}],242:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst types_1 = require(\"./types\");\nconst keys = Object.keys(types_1.typeHandlers);\n// This map helps avoid validating for every single image type\nconst firstBytes = {\n    0x38: 'psd',\n    0x42: 'bmp',\n    0x44: 'dds',\n    0x47: 'gif',\n    0x49: 'tiff',\n    0x4d: 'tiff',\n    0x52: 'webp',\n    0x69: 'icns',\n    0x89: 'png',\n    0xff: 'jpg'\n};\nfunction detector(buffer) {\n    const byte = buffer[0];\n    if (byte in firstBytes) {\n        const type = firstBytes[byte];\n        if (types_1.typeHandlers[type].validate(buffer)) {\n            return type;\n        }\n    }\n    const finder = (key) => types_1.typeHandlers[key].validate(buffer);\n    return keys.find(finder);\n}\nexports.detector = detector;\n\n},{\"./types\":246}],243:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"fs\");\n// fs.promises polyfill for node 8.x\nif (!('promises' in fs)) {\n    class FileHandle {\n        constructor(fd) {\n            this.fd = fd;\n        }\n        stat() {\n            return new Promise((resolve, reject) => {\n                fs.fstat(this.fd, (err, stats) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve(stats);\n                    }\n                });\n            });\n        }\n        read(buffer, offset, length, position) {\n            return new Promise((resolve, reject) => {\n                fs.read(this.fd, buffer, offset, length, position, (err) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve();\n                    }\n                });\n            });\n        }\n        close() {\n            return new Promise((resolve, reject) => {\n                fs.close(this.fd, (err) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve();\n                    }\n                });\n            });\n        }\n    }\n    Object.defineProperty(fs, 'promises', {\n        value: {\n            open: (filepath, flags) => (new Promise((resolve, reject) => {\n                fs.open(filepath, flags, (err, fd) => {\n                    if (err) {\n                        reject(err);\n                    }\n                    else {\n                        resolve(new FileHandle(fd));\n                    }\n                });\n            })),\n        },\n        writable: false\n    });\n}\n\n},{\"fs\":177}],244:[function(require,module,exports){\n(function (process,Buffer){\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst queue_1 = require(\"queue\");\nconst types_1 = require(\"./types\");\nconst detector_1 = require(\"./detector\");\nrequire(\"./fs.promises\");\n// Maximum buffer size, with a default of 512 kilobytes.\n// TO-DO: make this adaptive based on the initial signature of the image\nconst MaxBufferSize = 512 * 1024;\n// This queue is for async `fs` operations, to avoid reaching file-descriptor limits\nconst queue = new queue_1.default({ concurrency: 100, autostart: true });\n/**\n * Return size information based on a buffer\n *\n * @param {Buffer} buffer\n * @param {String} filepath\n * @returns {Object}\n */\nfunction lookup(buffer, filepath) {\n    // detect the file type.. don't rely on the extension\n    const type = detector_1.detector(buffer);\n    // find an appropriate handler for this file type\n    if (type && type in types_1.typeHandlers) {\n        const size = types_1.typeHandlers[type].calculate(buffer, filepath);\n        if (size !== undefined) {\n            size.type = type;\n            return size;\n        }\n    }\n    // throw up, if we don't understand the file\n    throw new TypeError('unsupported file type: ' + type + ' (file: ' + filepath + ')');\n}\n/**\n * Reads a file into a buffer.\n * @param {String} filepath\n * @returns {Promise<Buffer>}\n */\nfunction asyncFileToBuffer(filepath) {\n    return __awaiter(this, void 0, void 0, function* () {\n        const handle = yield fs.promises.open(filepath, 'r');\n        const { size } = yield handle.stat();\n        if (size <= 0) {\n            throw new Error('Empty file');\n        }\n        const bufferSize = Math.min(size, MaxBufferSize);\n        const buffer = Buffer.alloc(bufferSize);\n        yield handle.read(buffer, 0, bufferSize, 0);\n        yield handle.close();\n        return buffer;\n    });\n}\n/**\n * Synchronously reads a file into a buffer, blocking the nodejs process.\n *\n * @param {String} filepath\n * @returns {Buffer}\n */\nfunction syncFileToBuffer(filepath) {\n    // read from the file, synchronously\n    const descriptor = fs.openSync(filepath, 'r');\n    const size = fs.fstatSync(descriptor).size;\n    const bufferSize = Math.min(size, MaxBufferSize);\n    const buffer = Buffer.alloc(bufferSize);\n    fs.readSync(descriptor, buffer, 0, bufferSize, 0);\n    fs.closeSync(descriptor);\n    return buffer;\n}\nmodule.exports = exports = imageSize; // backwards compatibility\n/**\n * @param {Buffer|string} input - buffer or relative/absolute path of the image file\n * @param {Function=} [callback] - optional function for async detection\n */\nfunction imageSize(input, callback) {\n    // Handle buffer input\n    if (Buffer.isBuffer(input)) {\n        return lookup(input);\n    }\n    // input should be a string at this point\n    if (typeof input !== 'string') {\n        throw new TypeError('invalid invocation');\n    }\n    // resolve the file path\n    const filepath = path.resolve(input);\n    if (typeof callback === 'function') {\n        queue.push(() => asyncFileToBuffer(filepath)\n            .then((buffer) => process.nextTick(callback, null, lookup(buffer, filepath)))\n            .catch(callback));\n    }\n    else {\n        const buffer = syncFileToBuffer(filepath);\n        return lookup(buffer, filepath);\n    }\n}\nexports.imageSize = imageSize;\nexports.setConcurrency = (c) => { queue.concurrency = c; };\nexports.types = Object.keys(types_1.typeHandlers);\n\n}).call(this,require('_process'),require(\"buffer\").Buffer)\n},{\"./detector\":242,\"./fs.promises\":243,\"./types\":246,\"_process\":284,\"buffer\":182,\"fs\":177,\"path\":276,\"queue\":296}],245:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Abstract reading multi-byte unsigned integers\nfunction readUInt(buffer, bits, offset, isBigEndian) {\n    offset = offset || 0;\n    const endian = isBigEndian ? 'BE' : 'LE';\n    const methodName = ('readUInt' + bits + endian);\n    const method = buffer[methodName];\n    return method.call(buffer, offset);\n}\nexports.readUInt = readUInt;\n\n},{}],246:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst bmp_1 = require(\"./types/bmp\");\nconst cur_1 = require(\"./types/cur\");\nconst dds_1 = require(\"./types/dds\");\nconst gif_1 = require(\"./types/gif\");\nconst icns_1 = require(\"./types/icns\");\nconst ico_1 = require(\"./types/ico\");\nconst jpg_1 = require(\"./types/jpg\");\nconst ktx_1 = require(\"./types/ktx\");\nconst png_1 = require(\"./types/png\");\nconst pnm_1 = require(\"./types/pnm\");\nconst psd_1 = require(\"./types/psd\");\nconst svg_1 = require(\"./types/svg\");\nconst tiff_1 = require(\"./types/tiff\");\nconst webp_1 = require(\"./types/webp\");\nexports.typeHandlers = {\n    bmp: bmp_1.BMP,\n    cur: cur_1.CUR,\n    dds: dds_1.DDS,\n    gif: gif_1.GIF,\n    icns: icns_1.ICNS,\n    ico: ico_1.ICO,\n    jpg: jpg_1.JPG,\n    ktx: ktx_1.KTX,\n    png: png_1.PNG,\n    pnm: pnm_1.PNM,\n    psd: psd_1.PSD,\n    svg: svg_1.SVG,\n    tiff: tiff_1.TIFF,\n    webp: webp_1.WEBP,\n};\n\n},{\"./types/bmp\":247,\"./types/cur\":248,\"./types/dds\":249,\"./types/gif\":250,\"./types/icns\":251,\"./types/ico\":252,\"./types/jpg\":253,\"./types/ktx\":254,\"./types/png\":255,\"./types/pnm\":256,\"./types/psd\":257,\"./types/svg\":258,\"./types/tiff\":259,\"./types/webp\":260}],247:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BMP = {\n    validate(buffer) {\n        return ('BM' === buffer.toString('ascii', 0, 2));\n    },\n    calculate(buffer) {\n        return {\n            height: Math.abs(buffer.readInt32LE(22)),\n            width: buffer.readUInt32LE(18)\n        };\n    }\n};\n\n},{}],248:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ico_1 = require(\"./ico\");\nconst TYPE_CURSOR = 2;\nexports.CUR = {\n    validate(buffer) {\n        if (buffer.readUInt16LE(0) !== 0) {\n            return false;\n        }\n        return buffer.readUInt16LE(2) === TYPE_CURSOR;\n    },\n    calculate(buffer) {\n        return ico_1.ICO.calculate(buffer);\n    }\n};\n\n},{\"./ico\":252}],249:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DDS = {\n    validate(buffer) {\n        return buffer.readUInt32LE(0) === 0x20534444;\n    },\n    calculate(buffer) {\n        return {\n            height: buffer.readUInt32LE(12),\n            width: buffer.readUInt32LE(16)\n        };\n    }\n};\n\n},{}],250:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst gifRegexp = /^GIF8[79]a/;\nexports.GIF = {\n    validate(buffer) {\n        const signature = buffer.toString('ascii', 0, 6);\n        return (gifRegexp.test(signature));\n    },\n    calculate(buffer) {\n        return {\n            height: buffer.readUInt16LE(8),\n            width: buffer.readUInt16LE(6)\n        };\n    }\n};\n\n},{}],251:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * ICNS Header\n *\n * | Offset | Size | Purpose                                                |\n * | 0\t    | 4    | Magic literal, must be \"icns\" (0x69, 0x63, 0x6e, 0x73) |\n * | 4      | 4    | Length of file, in bytes, msb first.                   |\n *\n */\nconst SIZE_HEADER = 4 + 4; // 8\nconst FILE_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN\n/**\n * Image Entry\n *\n * | Offset | Size | Purpose                                                          |\n * | 0\t    | 4    | Icon type, see OSType below.                                     |\n * | 4      | 4    | Length of data, in bytes (including type and length), msb first. |\n * | 8      | n    | Icon data                                                        |\n */\nconst ENTRY_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN\n/* tslint:disable:object-literal-sort-keys */\nconst ICON_TYPE_SIZE = {\n    ICON: 32,\n    'ICN#': 32,\n    // m => 16 x 16\n    'icm#': 16,\n    icm4: 16,\n    icm8: 16,\n    // s => 16 x 16\n    'ics#': 16,\n    ics4: 16,\n    ics8: 16,\n    is32: 16,\n    s8mk: 16,\n    icp4: 16,\n    // l => 32 x 32\n    icl4: 32,\n    icl8: 32,\n    il32: 32,\n    l8mk: 32,\n    icp5: 32,\n    ic11: 32,\n    // h => 48 x 48\n    ich4: 48,\n    ich8: 48,\n    ih32: 48,\n    h8mk: 48,\n    // . => 64 x 64\n    icp6: 64,\n    ic12: 32,\n    // t => 128 x 128\n    it32: 128,\n    t8mk: 128,\n    ic07: 128,\n    // . => 256 x 256\n    ic08: 256,\n    ic13: 256,\n    // . => 512 x 512\n    ic09: 512,\n    ic14: 512,\n    // . => 1024 x 1024\n    ic10: 1024,\n};\n/* tslint:enable:object-literal-sort-keys */\nfunction readImageHeader(buffer, imageOffset) {\n    const imageLengthOffset = imageOffset + ENTRY_LENGTH_OFFSET;\n    return [\n        buffer.toString('ascii', imageOffset, imageLengthOffset),\n        buffer.readUInt32BE(imageLengthOffset)\n    ];\n}\nfunction getImageSize(type) {\n    const size = ICON_TYPE_SIZE[type];\n    return { width: size, height: size, type };\n}\nexports.ICNS = {\n    validate(buffer) {\n        return ('icns' === buffer.toString('ascii', 0, 4));\n    },\n    calculate(buffer) {\n        const bufferLength = buffer.length;\n        const fileLength = buffer.readUInt32BE(FILE_LENGTH_OFFSET);\n        let imageOffset = SIZE_HEADER;\n        let imageHeader = readImageHeader(buffer, imageOffset);\n        let imageSize = getImageSize(imageHeader[0]);\n        imageOffset += imageHeader[1];\n        if (imageOffset === fileLength) {\n            return imageSize;\n        }\n        const result = {\n            height: imageSize.height,\n            images: [imageSize],\n            width: imageSize.width\n        };\n        while (imageOffset < fileLength && imageOffset < bufferLength) {\n            imageHeader = readImageHeader(buffer, imageOffset);\n            imageSize = getImageSize(imageHeader[0]);\n            imageOffset += imageHeader[1];\n            result.images.push(imageSize);\n        }\n        return result;\n    }\n};\n\n},{}],252:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst TYPE_ICON = 1;\n/**\n * ICON Header\n *\n * | Offset | Size | Purpose |\n * | 0\t    | 2    | Reserved. Must always be 0.  |\n * | 2      | 2    | Image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid. |\n * | 4      | 2    | Number of images in the file. |\n *\n */\nconst SIZE_HEADER = 2 + 2 + 2; // 6\n/**\n * Image Entry\n *\n * | Offset | Size | Purpose |\n * | 0\t    | 1    | Image width in pixels. Can be any number between 0 and 255. Value 0 means width is 256 pixels. |\n * | 1      | 1    | Image height in pixels. Can be any number between 0 and 255. Value 0 means height is 256 pixels. |\n * | 2      | 1    | Number of colors in the color palette. Should be 0 if the image does not use a color palette. |\n * | 3      | 1    | Reserved. Should be 0. |\n * | 4      | 2    | ICO format: Color planes. Should be 0 or 1. |\n * |        |      | CUR format: The horizontal coordinates of the hotspot in number of pixels from the left. |\n * | 6      | 2    | ICO format: Bits per pixel. |\n * |        |      | CUR format: The vertical coordinates of the hotspot in number of pixels from the top. |\n * | 8      | 4    | The size of the image's data in bytes |\n * | 12     | 4    | The offset of BMP or PNG data from the beginning of the ICO/CUR file |\n *\n */\nconst SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4; // 16\nfunction getSizeFromOffset(buffer, offset) {\n    const value = buffer.readUInt8(offset);\n    return value === 0 ? 256 : value;\n}\nfunction getImageSize(buffer, imageIndex) {\n    const offset = SIZE_HEADER + (imageIndex * SIZE_IMAGE_ENTRY);\n    return {\n        height: getSizeFromOffset(buffer, offset + 1),\n        width: getSizeFromOffset(buffer, offset)\n    };\n}\nexports.ICO = {\n    validate(buffer) {\n        if (buffer.readUInt16LE(0) !== 0) {\n            return false;\n        }\n        return buffer.readUInt16LE(2) === TYPE_ICON;\n    },\n    calculate(buffer) {\n        const nbImages = buffer.readUInt16LE(4);\n        const imageSize = getImageSize(buffer, 0);\n        if (nbImages === 1) {\n            return imageSize;\n        }\n        const result = {\n            height: imageSize.height,\n            images: [imageSize],\n            width: imageSize.width\n        };\n        for (let imageIndex = 1; imageIndex < nbImages; imageIndex += 1) {\n            result.images.push(getImageSize(buffer, imageIndex));\n        }\n        return result;\n    }\n};\n\n},{}],253:[function(require,module,exports){\n\"use strict\";\n// NOTE: we only support baseline and progressive JPGs here\n// due to the structure of the loader class, we only get a buffer\n// with a maximum size of 4096 bytes. so if the SOF marker is outside\n// if this range we can't detect the file size correctly.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst readUInt_1 = require(\"../readUInt\");\nconst EXIF_MARKER = '45786966';\nconst APP1_DATA_SIZE_BYTES = 2;\nconst EXIF_HEADER_BYTES = 6;\nconst TIFF_BYTE_ALIGN_BYTES = 2;\nconst BIG_ENDIAN_BYTE_ALIGN = '4d4d';\nconst LITTLE_ENDIAN_BYTE_ALIGN = '4949';\n// Each entry is exactly 12 bytes\nconst IDF_ENTRY_BYTES = 12;\nconst NUM_DIRECTORY_ENTRIES_BYTES = 2;\nfunction isEXIF(buffer) {\n    return (buffer.toString('hex', 2, 6) === EXIF_MARKER);\n}\nfunction extractSize(buffer, index) {\n    return {\n        height: buffer.readUInt16BE(index),\n        width: buffer.readUInt16BE(index + 2)\n    };\n}\nfunction validateExifBlock(buffer, index) {\n    // Skip APP1 Data Size\n    const exifBlock = buffer.slice(APP1_DATA_SIZE_BYTES, index);\n    // Consider byte alignment\n    const byteAlign = exifBlock.toString('hex', EXIF_HEADER_BYTES, EXIF_HEADER_BYTES + TIFF_BYTE_ALIGN_BYTES);\n    // Ignore Empty EXIF. Validate byte alignment\n    const isBigEndian = byteAlign === BIG_ENDIAN_BYTE_ALIGN;\n    const isLittleEndian = byteAlign === LITTLE_ENDIAN_BYTE_ALIGN;\n    if (isBigEndian || isLittleEndian) {\n        return extractOrientation(exifBlock, isBigEndian);\n    }\n}\nfunction extractOrientation(exifBlock, isBigEndian) {\n    // TODO: assert that this contains 0x002A\n    // let STATIC_MOTOROLA_TIFF_HEADER_BYTES = 2\n    // let TIFF_IMAGE_FILE_DIRECTORY_BYTES = 4\n    // TODO: derive from TIFF_IMAGE_FILE_DIRECTORY_BYTES\n    const idfOffset = 8;\n    // IDF osset works from right after the header bytes\n    // (so the offset includes the tiff byte align)\n    const offset = EXIF_HEADER_BYTES + idfOffset;\n    const idfDirectoryEntries = readUInt_1.readUInt(exifBlock, 16, offset, isBigEndian);\n    for (let directoryEntryNumber = 0; directoryEntryNumber < idfDirectoryEntries; directoryEntryNumber++) {\n        const start = offset + NUM_DIRECTORY_ENTRIES_BYTES + (directoryEntryNumber * IDF_ENTRY_BYTES);\n        const end = start + IDF_ENTRY_BYTES;\n        // Skip on corrupt EXIF blocks\n        if (start > exifBlock.length) {\n            return;\n        }\n        const block = exifBlock.slice(start, end);\n        const tagNumber = readUInt_1.readUInt(block, 16, 0, isBigEndian);\n        // 0x0112 (decimal: 274) is the `orientation` tag ID\n        if (tagNumber === 274) {\n            const dataFormat = readUInt_1.readUInt(block, 16, 2, isBigEndian);\n            if (dataFormat !== 3) {\n                return;\n            }\n            // unsinged int has 2 bytes per component\n            // if there would more than 4 bytes in total it's a pointer\n            const numberOfComponents = readUInt_1.readUInt(block, 32, 4, isBigEndian);\n            if (numberOfComponents !== 1) {\n                return;\n            }\n            return readUInt_1.readUInt(block, 16, 8, isBigEndian);\n        }\n    }\n}\nfunction validateBuffer(buffer, index) {\n    // index should be within buffer limits\n    if (index > buffer.length) {\n        throw new TypeError('Corrupt JPG, exceeded buffer limits');\n    }\n    // Every JPEG block must begin with a 0xFF\n    if (buffer[index] !== 0xFF) {\n        throw new TypeError('Invalid JPG, marker table corrupted');\n    }\n}\nexports.JPG = {\n    validate(buffer) {\n        const SOIMarker = buffer.toString('hex', 0, 2);\n        return ('ffd8' === SOIMarker);\n    },\n    calculate(buffer) {\n        // Skip 4 chars, they are for signature\n        buffer = buffer.slice(4);\n        let orientation;\n        let next;\n        while (buffer.length) {\n            // read length of the next block\n            const i = buffer.readUInt16BE(0);\n            if (isEXIF(buffer)) {\n                orientation = validateExifBlock(buffer, i);\n            }\n            // ensure correct format\n            validateBuffer(buffer, i);\n            // 0xFFC0 is baseline standard(SOF)\n            // 0xFFC1 is baseline optimized(SOF)\n            // 0xFFC2 is progressive(SOF2)\n            next = buffer[i + 1];\n            if (next === 0xC0 || next === 0xC1 || next === 0xC2) {\n                const size = extractSize(buffer, i + 5);\n                // TODO: is orientation=0 a valid answer here?\n                if (!orientation) {\n                    return size;\n                }\n                return {\n                    height: size.height,\n                    orientation,\n                    width: size.width\n                };\n            }\n            // move to the next block\n            buffer = buffer.slice(i + 2);\n        }\n        throw new TypeError('Invalid JPG, no size found');\n    }\n};\n\n},{\"../readUInt\":245}],254:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SIGNATURE = 'KTX 11';\nexports.KTX = {\n    validate(buffer) {\n        return SIGNATURE === buffer.toString('ascii', 1, 7);\n    },\n    calculate(buffer) {\n        return {\n            height: buffer.readUInt32LE(40),\n            width: buffer.readUInt32LE(36),\n        };\n    }\n};\n\n},{}],255:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst pngSignature = 'PNG\\r\\n\\x1a\\n';\nconst pngImageHeaderChunkName = 'IHDR';\n// Used to detect \"fried\" png's: http://www.jongware.com/pngdefry.html\nconst pngFriedChunkName = 'CgBI';\nexports.PNG = {\n    validate(buffer) {\n        if (pngSignature === buffer.toString('ascii', 1, 8)) {\n            let chunkName = buffer.toString('ascii', 12, 16);\n            if (chunkName === pngFriedChunkName) {\n                chunkName = buffer.toString('ascii', 28, 32);\n            }\n            if (chunkName !== pngImageHeaderChunkName) {\n                throw new TypeError('Invalid PNG');\n            }\n            return true;\n        }\n        return false;\n    },\n    calculate(buffer) {\n        if (buffer.toString('ascii', 12, 16) === pngFriedChunkName) {\n            return {\n                height: buffer.readUInt32BE(36),\n                width: buffer.readUInt32BE(32)\n            };\n        }\n        return {\n            height: buffer.readUInt32BE(20),\n            width: buffer.readUInt32BE(16)\n        };\n    }\n};\n\n},{}],256:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst PNMTypes = {\n    P1: 'pbm/ascii',\n    P2: 'pgm/ascii',\n    P3: 'ppm/ascii',\n    P4: 'pbm',\n    P5: 'pgm',\n    P6: 'ppm',\n    P7: 'pam',\n    PF: 'pfm'\n};\nconst Signatures = Object.keys(PNMTypes);\nconst handlers = {\n    default: (lines) => {\n        let dimensions = [];\n        while (lines.length > 0) {\n            const line = lines.shift();\n            if (line[0] === '#') {\n                continue;\n            }\n            dimensions = line.split(' ');\n            break;\n        }\n        if (dimensions.length === 2) {\n            return {\n                height: parseInt(dimensions[1], 10),\n                width: parseInt(dimensions[0], 10),\n            };\n        }\n        else {\n            throw new TypeError('Invalid PNM');\n        }\n    },\n    pam: (lines) => {\n        const size = {};\n        while (lines.length > 0) {\n            const line = lines.shift();\n            if (line.length > 16 || line.charCodeAt(0) > 128) {\n                continue;\n            }\n            const [key, value] = line.split(' ');\n            if (key && value) {\n                size[key.toLowerCase()] = parseInt(value, 10);\n            }\n            if (size.height && size.width) {\n                break;\n            }\n        }\n        if (size.height && size.width) {\n            return {\n                height: size.height,\n                width: size.width\n            };\n        }\n        else {\n            throw new TypeError('Invalid PAM');\n        }\n    }\n};\nexports.PNM = {\n    validate(buffer) {\n        const signature = buffer.toString('ascii', 0, 2);\n        return Signatures.includes(signature);\n    },\n    calculate(buffer) {\n        const signature = buffer.toString('ascii', 0, 2);\n        const type = PNMTypes[signature];\n        // TODO: this probably generates garbage. move to a stream based parser\n        const lines = buffer.toString('ascii', 3).split(/[\\r\\n]+/);\n        const handler = handlers[type] || handlers.default;\n        return handler(lines);\n    }\n};\n\n},{}],257:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PSD = {\n    validate(buffer) {\n        return ('8BPS' === buffer.toString('ascii', 0, 4));\n    },\n    calculate(buffer) {\n        return {\n            height: buffer.readUInt32BE(14),\n            width: buffer.readUInt32BE(18)\n        };\n    }\n};\n\n},{}],258:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst svgReg = /<svg\\s([^>\"']|\"[^\"]*\"|'[^']*')*>/;\nconst extractorRegExps = {\n    height: /\\sheight=(['\"])([^%]+?)\\1/,\n    root: svgReg,\n    viewbox: /\\sviewBox=(['\"])(.+?)\\1/,\n    width: /\\swidth=(['\"])([^%]+?)\\1/,\n};\nconst INCH_CM = 2.54;\nconst units = {\n    cm: 96 / INCH_CM,\n    em: 16,\n    ex: 8,\n    m: 96 / INCH_CM * 100,\n    mm: 96 / INCH_CM / 10,\n    pc: 96 / 72 / 12,\n    pt: 96 / 72,\n};\nfunction parseLength(len) {\n    const m = /([0-9.]+)([a-z]*)/.exec(len);\n    if (!m) {\n        return undefined;\n    }\n    return Math.round(parseFloat(m[1]) * (units[m[2]] || 1));\n}\nfunction parseViewbox(viewbox) {\n    const bounds = viewbox.split(' ');\n    return {\n        height: parseLength(bounds[3]),\n        width: parseLength(bounds[2])\n    };\n}\nfunction parseAttributes(root) {\n    const width = root.match(extractorRegExps.width);\n    const height = root.match(extractorRegExps.height);\n    const viewbox = root.match(extractorRegExps.viewbox);\n    return {\n        height: height && parseLength(height[2]),\n        viewbox: viewbox && parseViewbox(viewbox[2]),\n        width: width && parseLength(width[2]),\n    };\n}\nfunction calculateByDimensions(attrs) {\n    return {\n        height: attrs.height,\n        width: attrs.width,\n    };\n}\nfunction calculateByViewbox(attrs) {\n    const viewbox = attrs && attrs.viewbox;\n    if (!viewbox) {\n        return;\n    }\n    const ratio = viewbox.width / viewbox.height;\n    if (attrs.width) {\n        return {\n            height: Math.floor(attrs.width / ratio),\n            width: attrs.width,\n        };\n    }\n    if (attrs.height) {\n        return {\n            height: attrs.height,\n            width: Math.floor(attrs.height * ratio),\n        };\n    }\n    return {\n        height: viewbox.height,\n        width: viewbox.width,\n    };\n}\nexports.SVG = {\n    validate(buffer) {\n        const str = String(buffer);\n        return svgReg.test(str);\n    },\n    calculate(buffer) {\n        const root = buffer.toString('utf8').match(extractorRegExps.root);\n        if (root) {\n            const attrs = parseAttributes(root[0]);\n            if (attrs.width && attrs.height) {\n                return calculateByDimensions(attrs);\n            }\n            if (attrs.viewbox) {\n                return calculateByViewbox(attrs);\n            }\n        }\n        throw new TypeError('Invalid SVG');\n    }\n};\n\n},{}],259:[function(require,module,exports){\n(function (Buffer){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// based on http://www.compix.com/fileformattif.htm\n// TO-DO: support big-endian as well\nconst fs = require(\"fs\");\nconst readUInt_1 = require(\"../readUInt\");\n// Read IFD (image-file-directory) into a buffer\nfunction readIFD(buffer, filepath, isBigEndian) {\n    const ifdOffset = readUInt_1.readUInt(buffer, 32, 4, isBigEndian);\n    // read only till the end of the file\n    let bufferSize = 1024;\n    const fileSize = fs.statSync(filepath).size;\n    if (ifdOffset + bufferSize > fileSize) {\n        bufferSize = fileSize - ifdOffset - 10;\n    }\n    // populate the buffer\n    const endBuffer = Buffer.alloc(bufferSize);\n    const descriptor = fs.openSync(filepath, 'r');\n    fs.readSync(descriptor, endBuffer, 0, bufferSize, ifdOffset);\n    return endBuffer.slice(2);\n}\n// TIFF values seem to be messed up on Big-Endian, this helps\nfunction readValue(buffer, isBigEndian) {\n    const low = readUInt_1.readUInt(buffer, 16, 8, isBigEndian);\n    const high = readUInt_1.readUInt(buffer, 16, 10, isBigEndian);\n    return (high << 16) + low;\n}\n// move to the next tag\nfunction nextTag(buffer) {\n    if (buffer.length > 24) {\n        return buffer.slice(12);\n    }\n}\n// Extract IFD tags from TIFF metadata\nfunction extractTags(buffer, isBigEndian) {\n    const tags = {};\n    let temp = buffer;\n    while (temp && temp.length) {\n        const code = readUInt_1.readUInt(temp, 16, 0, isBigEndian);\n        const type = readUInt_1.readUInt(temp, 16, 2, isBigEndian);\n        const length = readUInt_1.readUInt(temp, 32, 4, isBigEndian);\n        // 0 means end of IFD\n        if (code === 0) {\n            break;\n        }\n        else {\n            // 256 is width, 257 is height\n            // if (code === 256 || code === 257) {\n            if (length === 1 && (type === 3 || type === 4)) {\n                tags[code] = readValue(temp, isBigEndian);\n            }\n            // move to the next tag\n            temp = nextTag(temp);\n        }\n    }\n    return tags;\n}\n// Test if the TIFF is Big Endian or Little Endian\nfunction determineEndianness(buffer) {\n    const signature = buffer.toString('ascii', 0, 2);\n    if ('II' === signature) {\n        return 'LE';\n    }\n    else if ('MM' === signature) {\n        return 'BE';\n    }\n}\nconst signatures = [\n    // '492049', // currently not supported\n    '49492a00',\n    '4d4d002a',\n];\nexports.TIFF = {\n    validate(buffer) {\n        return signatures.includes(buffer.toString('hex', 0, 4));\n    },\n    calculate(buffer, filepath) {\n        if (!filepath) {\n            throw new TypeError('Tiff doesn\\'t support buffer');\n        }\n        // Determine BE/LE\n        const isBigEndian = determineEndianness(buffer) === 'BE';\n        // read the IFD\n        const ifdBuffer = readIFD(buffer, filepath, isBigEndian);\n        // extract the tags from the IFD\n        const tags = extractTags(ifdBuffer, isBigEndian);\n        const width = tags[256];\n        const height = tags[257];\n        if (!width || !height) {\n            throw new TypeError('Invalid Tiff. Missing tags');\n        }\n        return { height, width };\n    }\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"../readUInt\":245,\"buffer\":182,\"fs\":177}],260:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction calculateExtended(buffer) {\n    return {\n        height: 1 + buffer.readUIntLE(7, 3),\n        width: 1 + buffer.readUIntLE(4, 3)\n    };\n}\nfunction calculateLossless(buffer) {\n    return {\n        height: 1 + (((buffer[4] & 0xF) << 10) | (buffer[3] << 2) | ((buffer[2] & 0xC0) >> 6)),\n        width: 1 + (((buffer[2] & 0x3F) << 8) | buffer[1])\n    };\n}\nfunction calculateLossy(buffer) {\n    // `& 0x3fff` returns the last 14 bits\n    // TO-DO: include webp scaling in the calculations\n    return {\n        height: buffer.readInt16LE(8) & 0x3fff,\n        width: buffer.readInt16LE(6) & 0x3fff\n    };\n}\nexports.WEBP = {\n    validate(buffer) {\n        const riffHeader = 'RIFF' === buffer.toString('ascii', 0, 4);\n        const webpHeader = 'WEBP' === buffer.toString('ascii', 8, 12);\n        const vp8Header = 'VP8' === buffer.toString('ascii', 12, 15);\n        return (riffHeader && webpHeader && vp8Header);\n    },\n    calculate(buffer) {\n        const chunkHeader = buffer.toString('ascii', 12, 16);\n        buffer = buffer.slice(20, 30);\n        // Extended webp stream signature\n        if (chunkHeader === 'VP8X') {\n            const extendedHeader = buffer[0];\n            const validStart = (extendedHeader & 0xc0) === 0;\n            const validEnd = (extendedHeader & 0x01) === 0;\n            if (validStart && validEnd) {\n                return calculateExtended(buffer);\n            }\n            else {\n                // TODO: breaking change\n                throw new TypeError('Invalid WebP');\n            }\n        }\n        // Lossless webp stream signature\n        if (chunkHeader === 'VP8 ' && buffer[0] !== 0x2f) {\n            return calculateLossy(buffer);\n        }\n        // Lossy webp stream signature\n        const signature = buffer.toString('hex', 3, 6);\n        if (chunkHeader === 'VP8L' && signature !== '9d012a') {\n            return calculateLossless(buffer);\n        }\n        throw new TypeError('Invalid WebP');\n    }\n};\n\n},{}],261:[function(require,module,exports){\n\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n},{}],262:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      })\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor\n      var TempCtor = function () {}\n      TempCtor.prototype = superCtor.prototype\n      ctor.prototype = new TempCtor()\n      ctor.prototype.constructor = ctor\n    }\n  }\n}\n\n},{}],263:[function(require,module,exports){\n/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n},{}],264:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n},{}],265:[function(require,module,exports){\n/**\n * martinez v0.4.3\n * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor\n *\n * @author Alex Milevski <info@w8r.name>\n * @license MIT\n * @preserve\n */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.martinez = {})));\n}(this, (function (exports) { 'use strict';\n\n  function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }\n\n  var SplayTree = function SplayTree(compare, noDuplicates) {\n    if ( compare === void 0 ) compare = DEFAULT_COMPARE;\n    if ( noDuplicates === void 0 ) noDuplicates = false;\n\n    this._compare = compare;\n    this._root = null;\n    this._size = 0;\n    this._noDuplicates = !!noDuplicates;\n  };\n\n  var prototypeAccessors = { size: { configurable: true } };\n\n\n  SplayTree.prototype.rotateLeft = function rotateLeft (x) {\n    var y = x.right;\n    if (y) {\n      x.right = y.left;\n      if (y.left) { y.left.parent = x; }\n      y.parent = x.parent;\n    }\n\n    if (!x.parent)              { this._root = y; }\n    else if (x === x.parent.left) { x.parent.left = y; }\n    else                        { x.parent.right = y; }\n    if (y) { y.left = x; }\n    x.parent = y;\n  };\n\n\n  SplayTree.prototype.rotateRight = function rotateRight (x) {\n    var y = x.left;\n    if (y) {\n      x.left = y.right;\n      if (y.right) { y.right.parent = x; }\n      y.parent = x.parent;\n    }\n\n    if (!x.parent)             { this._root = y; }\n    else if(x === x.parent.left) { x.parent.left = y; }\n    else                       { x.parent.right = y; }\n    if (y) { y.right = x; }\n    x.parent = y;\n  };\n\n\n  SplayTree.prototype._splay = function _splay (x) {\n      var this$1 = this;\n\n    while (x.parent) {\n      var p = x.parent;\n      if (!p.parent) {\n        if (p.left === x) { this$1.rotateRight(p); }\n        else            { this$1.rotateLeft(p); }\n      } else if (p.left === x && p.parent.left === p) {\n        this$1.rotateRight(p.parent);\n        this$1.rotateRight(p);\n      } else if (p.right === x && p.parent.right === p) {\n        this$1.rotateLeft(p.parent);\n        this$1.rotateLeft(p);\n      } else if (p.left === x && p.parent.right === p) {\n        this$1.rotateRight(p);\n        this$1.rotateLeft(p);\n      } else {\n        this$1.rotateLeft(p);\n        this$1.rotateRight(p);\n      }\n    }\n  };\n\n\n  SplayTree.prototype.splay = function splay (x) {\n      var this$1 = this;\n\n    var p, gp, ggp, l, r;\n\n    while (x.parent) {\n      p = x.parent;\n      gp = p.parent;\n\n      if (gp && gp.parent) {\n        ggp = gp.parent;\n        if (ggp.left === gp) { ggp.left= x; }\n        else               { ggp.right = x; }\n        x.parent = ggp;\n      } else {\n        x.parent = null;\n        this$1._root = x;\n      }\n\n      l = x.left; r = x.right;\n\n      if (x === p.left) { // left\n        if (gp) {\n          if (gp.left === p) {\n            /* zig-zig */\n            if (p.right) {\n              gp.left = p.right;\n              gp.left.parent = gp;\n            } else { gp.left = null; }\n\n            p.right = gp;\n            gp.parent = p;\n          } else {\n            /* zig-zag */\n            if (l) {\n              gp.right = l;\n              l.parent = gp;\n            } else { gp.right = null; }\n\n            x.left  = gp;\n            gp.parent = x;\n          }\n        }\n        if (r) {\n          p.left = r;\n          r.parent = p;\n        } else { p.left = null; }\n\n        x.right= p;\n        p.parent = x;\n      } else { // right\n        if (gp) {\n          if (gp.right === p) {\n            /* zig-zig */\n            if (p.left) {\n              gp.right = p.left;\n              gp.right.parent = gp;\n            } else { gp.right = null; }\n\n            p.left = gp;\n            gp.parent = p;\n          } else {\n            /* zig-zag */\n            if (r) {\n              gp.left = r;\n              r.parent = gp;\n            } else { gp.left = null; }\n\n            x.right = gp;\n            gp.parent = x;\n          }\n        }\n        if (l) {\n          p.right = l;\n          l.parent = p;\n        } else { p.right = null; }\n\n        x.left = p;\n        p.parent = x;\n      }\n    }\n  };\n\n\n  SplayTree.prototype.replace = function replace (u, v) {\n    if (!u.parent) { this._root = v; }\n    else if (u === u.parent.left) { u.parent.left = v; }\n    else { u.parent.right = v; }\n    if (v) { v.parent = u.parent; }\n  };\n\n\n  SplayTree.prototype.minNode = function minNode (u) {\n      if ( u === void 0 ) u = this._root;\n\n    if (u) { while (u.left) { u = u.left; } }\n    return u;\n  };\n\n\n  SplayTree.prototype.maxNode = function maxNode (u) {\n      if ( u === void 0 ) u = this._root;\n\n    if (u) { while (u.right) { u = u.right; } }\n    return u;\n  };\n\n\n  SplayTree.prototype.insert = function insert (key, data) {\n    var z = this._root;\n    var p = null;\n    var comp = this._compare;\n    var cmp;\n\n    if (this._noDuplicates) {\n      while (z) {\n        p = z;\n        cmp = comp(z.key, key);\n        if (cmp === 0) { return; }\n        else if (comp(z.key, key) < 0) { z = z.right; }\n        else { z = z.left; }\n      }\n    } else {\n      while (z) {\n        p = z;\n        if (comp(z.key, key) < 0) { z = z.right; }\n        else { z = z.left; }\n      }\n    }\n\n    z = { key: key, data: data, left: null, right: null, parent: p };\n\n    if (!p)                        { this._root = z; }\n    else if (comp(p.key, z.key) < 0) { p.right = z; }\n    else                           { p.left= z; }\n\n    this.splay(z);\n    this._size++;\n    return z;\n  };\n\n\n  SplayTree.prototype.find = function find (key) {\n    var z  = this._root;\n    var comp = this._compare;\n    while (z) {\n      var cmp = comp(z.key, key);\n      if    (cmp < 0) { z = z.right; }\n      else if (cmp > 0) { z = z.left; }\n      else            { return z; }\n    }\n    return null;\n  };\n\n  /**\n   * Whether the tree contains a node with the given key\n   * @param{Key} key\n   * @return {boolean} true/false\n   */\n  SplayTree.prototype.contains = function contains (key) {\n    var node     = this._root;\n    var comparator = this._compare;\n    while (node){\n      var cmp = comparator(key, node.key);\n      if    (cmp === 0) { return true; }\n      else if (cmp < 0) { node = node.left; }\n      else              { node = node.right; }\n    }\n\n    return false;\n  };\n\n\n  SplayTree.prototype.remove = function remove (key) {\n    var z = this.find(key);\n\n    if (!z) { return false; }\n\n    this.splay(z);\n\n    if (!z.left) { this.replace(z, z.right); }\n    else if (!z.right) { this.replace(z, z.left); }\n    else {\n      var y = this.minNode(z.right);\n      if (y.parent !== z) {\n        this.replace(y, y.right);\n        y.right = z.right;\n        y.right.parent = y;\n      }\n      this.replace(z, y);\n      y.left = z.left;\n      y.left.parent = y;\n    }\n\n    this._size--;\n    return true;\n  };\n\n\n  SplayTree.prototype.removeNode = function removeNode (z) {\n    if (!z) { return false; }\n\n    this.splay(z);\n\n    if (!z.left) { this.replace(z, z.right); }\n    else if (!z.right) { this.replace(z, z.left); }\n    else {\n      var y = this.minNode(z.right);\n      if (y.parent !== z) {\n        this.replace(y, y.right);\n        y.right = z.right;\n        y.right.parent = y;\n      }\n      this.replace(z, y);\n      y.left = z.left;\n      y.left.parent = y;\n    }\n\n    this._size--;\n    return true;\n  };\n\n\n  SplayTree.prototype.erase = function erase (key) {\n    var z = this.find(key);\n    if (!z) { return; }\n\n    this.splay(z);\n\n    var s = z.left;\n    var t = z.right;\n\n    var sMax = null;\n    if (s) {\n      s.parent = null;\n      sMax = this.maxNode(s);\n      this.splay(sMax);\n      this._root = sMax;\n    }\n    if (t) {\n      if (s) { sMax.right = t; }\n      else { this._root = t; }\n      t.parent = sMax;\n    }\n\n    this._size--;\n  };\n\n  /**\n   * Removes and returns the node with smallest key\n   * @return {?Node}\n   */\n  SplayTree.prototype.pop = function pop () {\n    var node = this._root, returnValue = null;\n    if (node) {\n      while (node.left) { node = node.left; }\n      returnValue = { key: node.key, data: node.data };\n      this.remove(node.key);\n    }\n    return returnValue;\n  };\n\n\n  /* eslint-disable class-methods-use-this */\n\n  /**\n   * Successor node\n   * @param{Node} node\n   * @return {?Node}\n   */\n  SplayTree.prototype.next = function next (node) {\n    var successor = node;\n    if (successor) {\n      if (successor.right) {\n        successor = successor.right;\n        while (successor && successor.left) { successor = successor.left; }\n      } else {\n        successor = node.parent;\n        while (successor && successor.right === node) {\n          node = successor; successor = successor.parent;\n        }\n      }\n    }\n    return successor;\n  };\n\n\n  /**\n   * Predecessor node\n   * @param{Node} node\n   * @return {?Node}\n   */\n  SplayTree.prototype.prev = function prev (node) {\n    var predecessor = node;\n    if (predecessor) {\n      if (predecessor.left) {\n        predecessor = predecessor.left;\n        while (predecessor && predecessor.right) { predecessor = predecessor.right; }\n      } else {\n        predecessor = node.parent;\n        while (predecessor && predecessor.left === node) {\n          node = predecessor;\n          predecessor = predecessor.parent;\n        }\n      }\n    }\n    return predecessor;\n  };\n  /* eslint-enable class-methods-use-this */\n\n\n  /**\n   * @param{forEachCallback} callback\n   * @return {SplayTree}\n   */\n  SplayTree.prototype.forEach = function forEach (callback) {\n    var current = this._root;\n    var s = [], done = false, i = 0;\n\n    while (!done) {\n      // Reach the left most Node of the current Node\n      if (current) {\n        // Place pointer to a tree node on the stack\n        // before traversing the node's left subtree\n        s.push(current);\n        current = current.left;\n      } else {\n        // BackTrack from the empty subtree and visit the Node\n        // at the top of the stack; however, if the stack is\n        // empty you are done\n        if (s.length > 0) {\n          current = s.pop();\n          callback(current, i++);\n\n          // We have visited the node and its left\n          // subtree. Now, it's right subtree's turn\n          current = current.right;\n        } else { done = true; }\n      }\n    }\n    return this;\n  };\n\n\n  /**\n   * Walk key range from `low` to `high`. Stops if `fn` returns a value.\n   * @param{Key}    low\n   * @param{Key}    high\n   * @param{Function} fn\n   * @param{*?}     ctx\n   * @return {SplayTree}\n   */\n  SplayTree.prototype.range = function range (low, high, fn, ctx) {\n      var this$1 = this;\n\n    var Q = [];\n    var compare = this._compare;\n    var node = this._root, cmp;\n\n    while (Q.length !== 0 || node) {\n      if (node) {\n        Q.push(node);\n        node = node.left;\n      } else {\n        node = Q.pop();\n        cmp = compare(node.key, high);\n        if (cmp > 0) {\n          break;\n        } else if (compare(node.key, low) >= 0) {\n          if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned\n        }\n        node = node.right;\n      }\n    }\n    return this;\n  };\n\n  /**\n   * Returns all keys in order\n   * @return {Array<Key>}\n   */\n  SplayTree.prototype.keys = function keys () {\n    var current = this._root;\n    var s = [], r = [], done = false;\n\n    while (!done) {\n      if (current) {\n        s.push(current);\n        current = current.left;\n      } else {\n        if (s.length > 0) {\n          current = s.pop();\n          r.push(current.key);\n          current = current.right;\n        } else { done = true; }\n      }\n    }\n    return r;\n  };\n\n\n  /**\n   * Returns `data` fields of all nodes in order.\n   * @return {Array<Value>}\n   */\n  SplayTree.prototype.values = function values () {\n    var current = this._root;\n    var s = [], r = [], done = false;\n\n    while (!done) {\n      if (current) {\n        s.push(current);\n        current = current.left;\n      } else {\n        if (s.length > 0) {\n          current = s.pop();\n          r.push(current.data);\n          current = current.right;\n        } else { done = true; }\n      }\n    }\n    return r;\n  };\n\n\n  /**\n   * Returns node at given index\n   * @param{number} index\n   * @return {?Node}\n   */\n  SplayTree.prototype.at = function at (index) {\n    // removed after a consideration, more misleading than useful\n    // index = index % this.size;\n    // if (index < 0) index = this.size - index;\n\n    var current = this._root;\n    var s = [], done = false, i = 0;\n\n    while (!done) {\n      if (current) {\n        s.push(current);\n        current = current.left;\n      } else {\n        if (s.length > 0) {\n          current = s.pop();\n          if (i === index) { return current; }\n          i++;\n          current = current.right;\n        } else { done = true; }\n      }\n    }\n    return null;\n  };\n\n  /**\n   * Bulk-load items. Both array have to be same size\n   * @param{Array<Key>}  keys\n   * @param{Array<Value>}[values]\n   * @param{Boolean}     [presort=false] Pre-sort keys and values, using\n   *                                       tree's comparator. Sorting is done\n   *                                       in-place\n   * @return {AVLTree}\n   */\n  SplayTree.prototype.load = function load (keys, values, presort) {\n      if ( keys === void 0 ) keys = [];\n      if ( values === void 0 ) values = [];\n      if ( presort === void 0 ) presort = false;\n\n    if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }\n    var size = keys.length;\n    if (presort) { sort(keys, values, 0, size - 1, this._compare); }\n    this._root = loadRecursive(null, keys, values, 0, size);\n    this._size = size;\n    return this;\n  };\n\n\n  SplayTree.prototype.min = function min () {\n    var node = this.minNode(this._root);\n    if (node) { return node.key; }\n    else    { return null; }\n  };\n\n\n  SplayTree.prototype.max = function max () {\n    var node = this.maxNode(this._root);\n    if (node) { return node.key; }\n    else    { return null; }\n  };\n\n  SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };\n  prototypeAccessors.size.get = function () { return this._size; };\n\n\n  /**\n   * Create a tree and load it with items\n   * @param{Array<Key>}        keys\n   * @param{Array<Value>?}      [values]\n\n   * @param{Function?}          [comparator]\n   * @param{Boolean?}           [presort=false] Pre-sort keys and values, using\n   *                                             tree's comparator. Sorting is done\n   *                                             in-place\n   * @param{Boolean?}           [noDuplicates=false] Allow duplicates\n   * @return {SplayTree}\n   */\n  SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {\n    return new SplayTree(comparator, noDuplicates).load(keys, values, presort);\n  };\n\n  Object.defineProperties( SplayTree.prototype, prototypeAccessors );\n\n\n  function loadRecursive (parent, keys, values, start, end) {\n    var size = end - start;\n    if (size > 0) {\n      var middle = start + Math.floor(size / 2);\n      var key    = keys[middle];\n      var data   = values[middle];\n      var node   = { key: key, data: data, parent: parent };\n      node.left    = loadRecursive(node, keys, values, start, middle);\n      node.right   = loadRecursive(node, keys, values, middle + 1, end);\n      return node;\n    }\n    return null;\n  }\n\n\n  function sort(keys, values, left, right, compare) {\n    if (left >= right) { return; }\n\n    var pivot = keys[(left + right) >> 1];\n    var i = left - 1;\n    var j = right + 1;\n\n    while (true) {\n      do { i++; } while (compare(keys[i], pivot) < 0);\n      do { j--; } while (compare(keys[j], pivot) > 0);\n      if (i >= j) { break; }\n\n      var tmp = keys[i];\n      keys[i] = keys[j];\n      keys[j] = tmp;\n\n      tmp = values[i];\n      values[i] = values[j];\n      values[j] = tmp;\n    }\n\n    sort(keys, values,  left,     j, compare);\n    sort(keys, values, j + 1, right, compare);\n  }\n\n  var NORMAL               = 0;\n  var NON_CONTRIBUTING     = 1;\n  var SAME_TRANSITION      = 2;\n  var DIFFERENT_TRANSITION = 3;\n\n  var INTERSECTION = 0;\n  var UNION        = 1;\n  var DIFFERENCE   = 2;\n  var XOR          = 3;\n\n  /**\n   * @param  {SweepEvent} event\n   * @param  {SweepEvent} prev\n   * @param  {Operation} operation\n   */\n  function computeFields (event, prev, operation) {\n    // compute inOut and otherInOut fields\n    if (prev === null) {\n      event.inOut      = false;\n      event.otherInOut = true;\n\n    // previous line segment in sweepline belongs to the same polygon\n    } else {\n      if (event.isSubject === prev.isSubject) {\n        event.inOut      = !prev.inOut;\n        event.otherInOut = prev.otherInOut;\n\n      // previous line segment in sweepline belongs to the clipping polygon\n      } else {\n        event.inOut      = !prev.otherInOut;\n        event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;\n      }\n\n      // compute prevInResult field\n      if (prev) {\n        event.prevInResult = (!inResult(prev, operation) || prev.isVertical())\n          ? prev.prevInResult : prev;\n      }\n    }\n\n    // check if the line segment belongs to the Boolean operation\n    event.inResult = inResult(event, operation);\n  }\n\n\n  /* eslint-disable indent */\n  function inResult(event, operation) {\n    switch (event.type) {\n      case NORMAL:\n        switch (operation) {\n          case INTERSECTION:\n            return !event.otherInOut;\n          case UNION:\n            return event.otherInOut;\n          case DIFFERENCE:\n            // return (event.isSubject && !event.otherInOut) ||\n            //         (!event.isSubject && event.otherInOut);\n            return (event.isSubject && event.otherInOut) ||\n                    (!event.isSubject && !event.otherInOut);\n          case XOR:\n            return true;\n        }\n        break;\n      case SAME_TRANSITION:\n        return operation === INTERSECTION || operation === UNION;\n      case DIFFERENT_TRANSITION:\n        return operation === DIFFERENCE;\n      case NON_CONTRIBUTING:\n        return false;\n    }\n    return false;\n  }\n  /* eslint-enable indent */\n\n  var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {\n\n    /**\n     * Is left endpoint?\n     * @type {Boolean}\n     */\n    this.left = left;\n\n    /**\n     * @type {Array.<Number>}\n     */\n    this.point = point;\n\n    /**\n     * Other edge reference\n     * @type {SweepEvent}\n     */\n    this.otherEvent = otherEvent;\n\n    /**\n     * Belongs to source or clipping polygon\n     * @type {Boolean}\n     */\n    this.isSubject = isSubject;\n\n    /**\n     * Edge contribution type\n     * @type {Number}\n     */\n    this.type = edgeType || NORMAL;\n\n\n    /**\n     * In-out transition for the sweepline crossing polygon\n     * @type {Boolean}\n     */\n    this.inOut = false;\n\n\n    /**\n     * @type {Boolean}\n     */\n    this.otherInOut = false;\n\n    /**\n     * Previous event in result?\n     * @type {SweepEvent}\n     */\n    this.prevInResult = null;\n\n    /**\n     * Does event belong to result?\n     * @type {Boolean}\n     */\n    this.inResult = false;\n\n\n    // connection step\n\n    /**\n     * @type {Boolean}\n     */\n    this.resultInOut = false;\n\n    this.isExteriorRing = true;\n  };\n\n\n  /**\n   * @param{Array.<Number>}p\n   * @return {Boolean}\n   */\n  SweepEvent.prototype.isBelow = function isBelow (p) {\n    var p0 = this.point, p1 = this.otherEvent.point;\n    return this.left\n      ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0\n      // signedArea(this.point, this.otherEvent.point, p) > 0 :\n      : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;\n      //signedArea(this.otherEvent.point, this.point, p) > 0;\n  };\n\n\n  /**\n   * @param{Array.<Number>}p\n   * @return {Boolean}\n   */\n  SweepEvent.prototype.isAbove = function isAbove (p) {\n    return !this.isBelow(p);\n  };\n\n\n  /**\n   * @return {Boolean}\n   */\n  SweepEvent.prototype.isVertical = function isVertical () {\n    return this.point[0] === this.otherEvent.point[0];\n  };\n\n\n  SweepEvent.prototype.clone = function clone () {\n    var copy = new SweepEvent(\n      this.point, this.left, this.otherEvent, this.isSubject, this.type);\n\n    copy.inResult     = this.inResult;\n    copy.prevInResult = this.prevInResult;\n    copy.isExteriorRing = this.isExteriorRing;\n    copy.inOut        = this.inOut;\n    copy.otherInOut   = this.otherInOut;\n\n    return copy;\n  };\n\n  function equals(p1, p2) {\n    if (p1[0] === p2[0]) {\n      if (p1[1] === p2[1]) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n    return false;\n  }\n\n  // const EPSILON = 1e-9;\n  // const abs = Math.abs;\n  // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164\n  // Precision problem.\n  //\n  // module.exports = function equals(p1, p2) {\n  //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;\n  // };\n\n  /**\n   * Signed area of the triangle (p0, p1, p2)\n   * @param  {Array.<Number>} p0\n   * @param  {Array.<Number>} p1\n   * @param  {Array.<Number>} p2\n   * @return {Number}\n   */\n  function signedArea(p0, p1, p2) {\n    return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);\n  }\n\n  /**\n   * @param  {SweepEvent} e1\n   * @param  {SweepEvent} e2\n   * @return {Number}\n   */\n  function compareEvents(e1, e2) {\n    var p1 = e1.point;\n    var p2 = e2.point;\n\n    // Different x-coordinate\n    if (p1[0] > p2[0]) { return 1; }\n    if (p1[0] < p2[0]) { return -1; }\n\n    // Different points, but same x-coordinate\n    // Event with lower y-coordinate is processed first\n    if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }\n\n    return specialCases(e1, e2, p1, p2);\n  }\n\n\n  /* eslint-disable no-unused-vars */\n  function specialCases(e1, e2, p1, p2) {\n    // Same coordinates, but one is a left endpoint and the other is\n    // a right endpoint. The right endpoint is processed first\n    if (e1.left !== e2.left)\n      { return e1.left ? 1 : -1; }\n\n    // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;\n    // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])\n    // Same coordinates, both events\n    // are left endpoints or right endpoints.\n    // not collinear\n    if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {\n      // the event associate to the bottom segment is processed first\n      return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;\n    }\n\n    return (!e1.isSubject && e2.isSubject) ? 1 : -1;\n  }\n  /* eslint-enable no-unused-vars */\n\n  /**\n   * @param  {SweepEvent} se\n   * @param  {Array.<Number>} p\n   * @param  {Queue} queue\n   * @return {Queue}\n   */\n  function divideSegment(se, p, queue)  {\n    var r = new SweepEvent(p, false, se,            se.isSubject);\n    var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);\n\n    /* eslint-disable no-console */\n    if (equals(se.point, se.otherEvent.point)) {\n\n      console.warn('what is that, a collapsed segment?', se);\n    }\n    /* eslint-enable no-console */\n\n    r.contourId = l.contourId = se.contourId;\n\n    // avoid a rounding error. The left event would be processed after the right event\n    if (compareEvents(l, se.otherEvent) > 0) {\n      se.otherEvent.left = true;\n      l.left = false;\n    }\n\n    // avoid a rounding error. The left event would be processed after the right event\n    // if (compareEvents(se, r) > 0) {}\n\n    se.otherEvent.otherEvent = l;\n    se.otherEvent = r;\n\n    queue.push(l);\n    queue.push(r);\n\n    return queue;\n  }\n\n  //const EPS = 1e-9;\n\n  /**\n   * Finds the magnitude of the cross product of two vectors (if we pretend\n   * they're in three dimensions)\n   *\n   * @param {Object} a First vector\n   * @param {Object} b Second vector\n   * @private\n   * @returns {Number} The magnitude of the cross product\n   */\n  function crossProduct(a, b) {\n    return (a[0] * b[1]) - (a[1] * b[0]);\n  }\n\n  /**\n   * Finds the dot product of two vectors.\n   *\n   * @param {Object} a First vector\n   * @param {Object} b Second vector\n   * @private\n   * @returns {Number} The dot product\n   */\n  function dotProduct(a, b) {\n    return (a[0] * b[0]) + (a[1] * b[1]);\n  }\n\n  /**\n   * Finds the intersection (if any) between two line segments a and b, given the\n   * line segments' end points a1, a2 and b1, b2.\n   *\n   * This algorithm is based on Schneider and Eberly.\n   * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf\n   * Page 244.\n   *\n   * @param {Array.<Number>} a1 point of first line\n   * @param {Array.<Number>} a2 point of first line\n   * @param {Array.<Number>} b1 point of second line\n   * @param {Array.<Number>} b2 point of second line\n   * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints\n   *                                         (meaning connected segments) as\n   *                                         intersections\n   * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of\n   * intersection. If they overlap, the two end points of the overlapping segment.\n   * Otherwise, null.\n   */\n  function intersection (a1, a2, b1, b2, noEndpointTouch) {\n    // The algorithm expects our lines in the form P + sd, where P is a point,\n    // s is on the interval [0, 1], and d is a vector.\n    // We are passed two points. P can be the first point of each pair. The\n    // vector, then, could be thought of as the distance (in x and y components)\n    // from the first point to the second point.\n    // So first, let's make our vectors:\n    var va = [a2[0] - a1[0], a2[1] - a1[1]];\n    var vb = [b2[0] - b1[0], b2[1] - b1[1]];\n    // We also define a function to convert back to regular point form:\n\n    /* eslint-disable arrow-body-style */\n\n    function toPoint(p, s, d) {\n      return [\n        p[0] + s * d[0],\n        p[1] + s * d[1]\n      ];\n    }\n\n    /* eslint-enable arrow-body-style */\n\n    // The rest is pretty much a straight port of the algorithm.\n    var e = [b1[0] - a1[0], b1[1] - a1[1]];\n    var kross    = crossProduct(va, vb);\n    var sqrKross = kross * kross;\n    var sqrLenA  = dotProduct(va, va);\n    //const sqrLenB  = dotProduct(vb, vb);\n\n    // Check for line intersection. This works because of the properties of the\n    // cross product -- specifically, two vectors are parallel if and only if the\n    // cross product is the 0 vector. The full calculation involves relative error\n    // to account for possible very small line segments. See Schneider & Eberly\n    // for details.\n    if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {\n      // If they're not parallel, then (because these are line segments) they\n      // still might not actually intersect. This code checks that the\n      // intersection point of the lines is actually on both line segments.\n      var s = crossProduct(e, vb) / kross;\n      if (s < 0 || s > 1) {\n        // not on line segment a\n        return null;\n      }\n      var t = crossProduct(e, va) / kross;\n      if (t < 0 || t > 1) {\n        // not on line segment b\n        return null;\n      }\n      if (s === 0 || s === 1) {\n        // on an endpoint of line segment a\n        return noEndpointTouch ? null : [toPoint(a1, s, va)];\n      }\n      if (t === 0 || t === 1) {\n        // on an endpoint of line segment b\n        return noEndpointTouch ? null : [toPoint(b1, t, vb)];\n      }\n      return [toPoint(a1, s, va)];\n    }\n\n    // If we've reached this point, then the lines are either parallel or the\n    // same, but the segments could overlap partially or fully, or not at all.\n    // So we need to find the overlap, if any. To do that, we can use e, which is\n    // the (vector) difference between the two initial points. If this is parallel\n    // with the line itself, then the two lines are the same line, and there will\n    // be overlap.\n    //const sqrLenE = dotProduct(e, e);\n    kross = crossProduct(e, va);\n    sqrKross = kross * kross;\n\n    if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {\n    // Lines are just parallel, not the same. No overlap.\n      return null;\n    }\n\n    var sa = dotProduct(va, e) / sqrLenA;\n    var sb = sa + dotProduct(va, vb) / sqrLenA;\n    var smin = Math.min(sa, sb);\n    var smax = Math.max(sa, sb);\n\n    // this is, essentially, the FindIntersection acting on floats from\n    // Schneider & Eberly, just inlined into this function.\n    if (smin <= 1 && smax >= 0) {\n\n      // overlap on an end point\n      if (smin === 1) {\n        return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];\n      }\n\n      if (smax === 0) {\n        return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];\n      }\n\n      if (noEndpointTouch && smin === 0 && smax === 1) { return null; }\n\n      // There's overlap on a segment -- two points of intersection. Return both.\n      return [\n        toPoint(a1, smin > 0 ? smin : 0, va),\n        toPoint(a1, smax < 1 ? smax : 1, va)\n      ];\n    }\n\n    return null;\n  }\n\n  /**\n   * @param  {SweepEvent} se1\n   * @param  {SweepEvent} se2\n   * @param  {Queue}      queue\n   * @return {Number}\n   */\n  function possibleIntersection (se1, se2, queue) {\n    // that disallows self-intersecting polygons,\n    // did cost us half a day, so I'll leave it\n    // out of respect\n    // if (se1.isSubject === se2.isSubject) return;\n    var inter = intersection(\n      se1.point, se1.otherEvent.point,\n      se2.point, se2.otherEvent.point\n    );\n\n    var nintersections = inter ? inter.length : 0;\n    if (nintersections === 0) { return 0; } // no intersection\n\n    // the line segments intersect at an endpoint of both line segments\n    if ((nintersections === 1) &&\n        (equals(se1.point, se2.point) ||\n         equals(se1.otherEvent.point, se2.otherEvent.point))) {\n      return 0;\n    }\n\n    if (nintersections === 2 && se1.isSubject === se2.isSubject) {\n      // if(se1.contourId === se2.contourId){\n      // console.warn('Edges of the same polygon overlap',\n      //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);\n      // }\n      //throw new Error('Edges of the same polygon overlap');\n      return 0;\n    }\n\n    // The line segments associated to se1 and se2 intersect\n    if (nintersections === 1) {\n\n      // if the intersection point is not an endpoint of se1\n      if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {\n        divideSegment(se1, inter[0], queue);\n      }\n\n      // if the intersection point is not an endpoint of se2\n      if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {\n        divideSegment(se2, inter[0], queue);\n      }\n      return 1;\n    }\n\n    // The line segments associated to se1 and se2 overlap\n    var events        = [];\n    var leftCoincide  = false;\n    var rightCoincide = false;\n\n    if (equals(se1.point, se2.point)) {\n      leftCoincide = true; // linked\n    } else if (compareEvents(se1, se2) === 1) {\n      events.push(se2, se1);\n    } else {\n      events.push(se1, se2);\n    }\n\n    if (equals(se1.otherEvent.point, se2.otherEvent.point)) {\n      rightCoincide = true;\n    } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {\n      events.push(se2.otherEvent, se1.otherEvent);\n    } else {\n      events.push(se1.otherEvent, se2.otherEvent);\n    }\n\n    if ((leftCoincide && rightCoincide) || leftCoincide) {\n      // both line segments are equal or share the left endpoint\n      se2.type = NON_CONTRIBUTING;\n      se1.type = (se2.inOut === se1.inOut)\n        ? SAME_TRANSITION : DIFFERENT_TRANSITION;\n\n      if (leftCoincide && !rightCoincide) {\n        // honestly no idea, but changing events selection from [2, 1]\n        // to [0, 1] fixes the overlapping self-intersecting polygons issue\n        divideSegment(events[1].otherEvent, events[0].point, queue);\n      }\n      return 2;\n    }\n\n    // the line segments share the right endpoint\n    if (rightCoincide) {\n      divideSegment(events[0], events[1].point, queue);\n      return 3;\n    }\n\n    // no line segment includes totally the other one\n    if (events[0] !== events[3].otherEvent) {\n      divideSegment(events[0], events[1].point, queue);\n      divideSegment(events[1], events[2].point, queue);\n      return 3;\n    }\n\n    // one line segment includes the other one\n    divideSegment(events[0], events[1].point, queue);\n    divideSegment(events[3].otherEvent, events[2].point, queue);\n\n    return 3;\n  }\n\n  /**\n   * @param  {SweepEvent} le1\n   * @param  {SweepEvent} le2\n   * @return {Number}\n   */\n  function compareSegments(le1, le2) {\n    if (le1 === le2) { return 0; }\n\n    // Segments are not collinear\n    if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||\n      signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {\n\n      // If they share their left endpoint use the right endpoint to sort\n      if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }\n\n      // Different left endpoint: use the left endpoint to sort\n      if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }\n\n      // has the line segment associated to e1 been inserted\n      // into S after the line segment associated to e2 ?\n      if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }\n\n      // The line segment associated to e2 has been inserted\n      // into S after the line segment associated to e1\n      return le1.isBelow(le2.point) ? -1 : 1;\n    }\n\n    if (le1.isSubject === le2.isSubject) { // same polygon\n      var p1 = le1.point, p2 = le2.point;\n      if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {\n        p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;\n        if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }\n        else { return le1.contourId > le2.contourId ? 1 : -1; }\n      }\n    } else { // Segments are collinear, but belong to separate polygons\n      return le1.isSubject ? -1 : 1;\n    }\n\n    return compareEvents(le1, le2) === 1 ? 1 : -1;\n  }\n\n  function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {\n    var sweepLine = new SplayTree(compareSegments);\n    var sortedEvents = [];\n\n    var rightbound = Math.min(sbbox[2], cbbox[2]);\n\n    var prev, next, begin;\n\n    while (eventQueue.length !== 0) {\n      var event = eventQueue.pop();\n      sortedEvents.push(event);\n\n      // optimization by bboxes for intersection and difference goes here\n      if ((operation === INTERSECTION && event.point[0] > rightbound) ||\n          (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {\n        break;\n      }\n\n      if (event.left) {\n        next  = prev = sweepLine.insert(event);\n        begin = sweepLine.minNode();\n\n        if (prev !== begin) { prev = sweepLine.prev(prev); }\n        else                { prev = null; }\n\n        next = sweepLine.next(next);\n\n        var prevEvent = prev ? prev.key : null;\n        var prevprevEvent = (void 0);\n        computeFields(event, prevEvent, operation);\n        if (next) {\n          if (possibleIntersection(event, next.key, eventQueue) === 2) {\n            computeFields(event, prevEvent, operation);\n            computeFields(event, next.key, operation);\n          }\n        }\n\n        if (prev) {\n          if (possibleIntersection(prev.key, event, eventQueue) === 2) {\n            var prevprev = prev;\n            if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }\n            else                    { prevprev = null; }\n\n            prevprevEvent = prevprev ? prevprev.key : null;\n            computeFields(prevEvent, prevprevEvent, operation);\n            computeFields(event,     prevEvent,     operation);\n          }\n        }\n      } else {\n        event = event.otherEvent;\n        next = prev = sweepLine.find(event);\n\n        if (prev && next) {\n\n          if (prev !== begin) { prev = sweepLine.prev(prev); }\n          else                { prev = null; }\n\n          next = sweepLine.next(next);\n          sweepLine.remove(event);\n\n          if (next && prev) {\n            possibleIntersection(prev.key, next.key, eventQueue);\n          }\n        }\n      }\n    }\n    return sortedEvents;\n  }\n\n  /**\n   * @param  {Array.<SweepEvent>} sortedEvents\n   * @return {Array.<SweepEvent>}\n   */\n  function orderEvents(sortedEvents) {\n    var event, i, len, tmp;\n    var resultEvents = [];\n    for (i = 0, len = sortedEvents.length; i < len; i++) {\n      event = sortedEvents[i];\n      if ((event.left && event.inResult) ||\n        (!event.left && event.otherEvent.inResult)) {\n        resultEvents.push(event);\n      }\n    }\n    // Due to overlapping edges the resultEvents array can be not wholly sorted\n    var sorted = false;\n    while (!sorted) {\n      sorted = true;\n      for (i = 0, len = resultEvents.length; i < len; i++) {\n        if ((i + 1) < len &&\n          compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {\n          tmp = resultEvents[i];\n          resultEvents[i] = resultEvents[i + 1];\n          resultEvents[i + 1] = tmp;\n          sorted = false;\n        }\n      }\n    }\n\n\n    for (i = 0, len = resultEvents.length; i < len; i++) {\n      event = resultEvents[i];\n      event.pos = i;\n    }\n\n    // imagine, the right event is found in the beginning of the queue,\n    // when his left counterpart is not marked yet\n    for (i = 0, len = resultEvents.length; i < len; i++) {\n      event = resultEvents[i];\n      if (!event.left) {\n        tmp = event.pos;\n        event.pos = event.otherEvent.pos;\n        event.otherEvent.pos = tmp;\n      }\n    }\n\n    return resultEvents;\n  }\n\n\n  /**\n   * @param  {Number} pos\n   * @param  {Array.<SweepEvent>} resultEvents\n   * @param  {Object>}    processed\n   * @return {Number}\n   */\n  function nextPos(pos, resultEvents, processed, origIndex) {\n    var newPos = pos + 1;\n    var length = resultEvents.length;\n    if (newPos > length - 1) { return pos - 1; }\n    var p  = resultEvents[pos].point;\n    var p1 = resultEvents[newPos].point;\n\n\n    // while in range and not the current one by value\n    while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {\n      if (!processed[newPos]) {\n        return newPos;\n      } else   {\n        newPos++;\n      }\n      p1 = resultEvents[newPos].point;\n    }\n\n    newPos = pos - 1;\n\n    while (processed[newPos] && newPos >= origIndex) {\n      newPos--;\n    }\n    return newPos;\n  }\n\n\n  /**\n   * @param  {Array.<SweepEvent>} sortedEvents\n   * @return {Array.<*>} polygons\n   */\n  function connectEdges(sortedEvents, operation) {\n    var i, len;\n    var resultEvents = orderEvents(sortedEvents);\n\n    // \"false\"-filled array\n    var processed = {};\n    var result = [];\n    var event;\n\n    for (i = 0, len = resultEvents.length; i < len; i++) {\n      if (processed[i]) { continue; }\n      var contour = [[]];\n\n      if (!resultEvents[i].isExteriorRing) {\n        if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {\n          result.push(contour);\n        } else if (result.length === 0) {\n          result.push([[contour]]);\n        } else {\n          result[result.length - 1].push(contour[0]);\n        }\n      } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {\n        result[result.length - 1].push(contour[0]);\n      } else {\n        result.push(contour);\n      }\n\n      var ringId = result.length - 1;\n      var pos = i;\n\n      var initial = resultEvents[i].point;\n      contour[0].push(initial);\n\n      while (pos >= i) {\n        event = resultEvents[pos];\n        processed[pos] = true;\n\n        if (event.left) {\n          event.resultInOut = false;\n          event.contourId   = ringId;\n        } else {\n          event.otherEvent.resultInOut = true;\n          event.otherEvent.contourId   = ringId;\n        }\n\n        pos = event.pos;\n        processed[pos] = true;\n        contour[0].push(resultEvents[pos].point);\n        pos = nextPos(pos, resultEvents, processed, i);\n      }\n\n      pos = pos === -1 ? i : pos;\n\n      event = resultEvents[pos];\n      processed[pos] = processed[event.pos] = true;\n      event.otherEvent.resultInOut = true;\n      event.otherEvent.contourId   = ringId;\n    }\n\n    // Handle if the result is a polygon (eg not multipoly)\n    // Commented it again, let's see what do we mean by that\n    // if (result.length === 1) result = result[0];\n    return result;\n  }\n\n  var tinyqueue = TinyQueue;\n  var default_1 = TinyQueue;\n\n  function TinyQueue(data, compare) {\n      var this$1 = this;\n\n      if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }\n\n      this.data = data || [];\n      this.length = this.data.length;\n      this.compare = compare || defaultCompare;\n\n      if (this.length > 0) {\n          for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }\n      }\n  }\n\n  function defaultCompare(a, b) {\n      return a < b ? -1 : a > b ? 1 : 0;\n  }\n\n  TinyQueue.prototype = {\n\n      push: function (item) {\n          this.data.push(item);\n          this.length++;\n          this._up(this.length - 1);\n      },\n\n      pop: function () {\n          if (this.length === 0) { return undefined; }\n\n          var top = this.data[0];\n          this.length--;\n\n          if (this.length > 0) {\n              this.data[0] = this.data[this.length];\n              this._down(0);\n          }\n          this.data.pop();\n\n          return top;\n      },\n\n      peek: function () {\n          return this.data[0];\n      },\n\n      _up: function (pos) {\n          var data = this.data;\n          var compare = this.compare;\n          var item = data[pos];\n\n          while (pos > 0) {\n              var parent = (pos - 1) >> 1;\n              var current = data[parent];\n              if (compare(item, current) >= 0) { break; }\n              data[pos] = current;\n              pos = parent;\n          }\n\n          data[pos] = item;\n      },\n\n      _down: function (pos) {\n          var this$1 = this;\n\n          var data = this.data;\n          var compare = this.compare;\n          var halfLength = this.length >> 1;\n          var item = data[pos];\n\n          while (pos < halfLength) {\n              var left = (pos << 1) + 1;\n              var right = left + 1;\n              var best = data[left];\n\n              if (right < this$1.length && compare(data[right], best) < 0) {\n                  left = right;\n                  best = data[right];\n              }\n              if (compare(best, item) >= 0) { break; }\n\n              data[pos] = best;\n              pos = left;\n          }\n\n          data[pos] = item;\n      }\n  };\n  tinyqueue.default = default_1;\n\n  var max = Math.max;\n  var min = Math.min;\n\n  var contourId = 0;\n\n\n  function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {\n    var i, len, s1, s2, e1, e2;\n    for (i = 0, len = contourOrHole.length - 1; i < len; i++) {\n      s1 = contourOrHole[i];\n      s2 = contourOrHole[i + 1];\n      e1 = new SweepEvent(s1, false, undefined, isSubject);\n      e2 = new SweepEvent(s2, false, e1,        isSubject);\n      e1.otherEvent = e2;\n\n      if (s1[0] === s2[0] && s1[1] === s2[1]) {\n        continue; // skip collapsed edges, or it breaks\n      }\n\n      e1.contourId = e2.contourId = depth;\n      if (!isExteriorRing) {\n        e1.isExteriorRing = false;\n        e2.isExteriorRing = false;\n      }\n      if (compareEvents(e1, e2) > 0) {\n        e2.left = true;\n      } else {\n        e1.left = true;\n      }\n\n      var x = s1[0], y = s1[1];\n      bbox[0] = min(bbox[0], x);\n      bbox[1] = min(bbox[1], y);\n      bbox[2] = max(bbox[2], x);\n      bbox[3] = max(bbox[3], y);\n\n      // Pushing it so the queue is sorted from left to right,\n      // with object on the left having the highest priority.\n      Q.push(e1);\n      Q.push(e2);\n    }\n  }\n\n\n  function fillQueue(subject, clipping, sbbox, cbbox, operation) {\n    var eventQueue = new tinyqueue(null, compareEvents);\n    var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;\n\n    for (i = 0, ii = subject.length; i < ii; i++) {\n      polygonSet = subject[i];\n      for (j = 0, jj = polygonSet.length; j < jj; j++) {\n        isExteriorRing = j === 0;\n        if (isExteriorRing) { contourId++; }\n        processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);\n      }\n    }\n\n    for (i = 0, ii = clipping.length; i < ii; i++) {\n      polygonSet = clipping[i];\n      for (j = 0, jj = polygonSet.length; j < jj; j++) {\n        isExteriorRing = j === 0;\n        if (operation === DIFFERENCE) { isExteriorRing = false; }\n        if (isExteriorRing) { contourId++; }\n        processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);\n      }\n    }\n\n    return eventQueue;\n  }\n\n  var EMPTY = [];\n\n\n  function trivialOperation(subject, clipping, operation) {\n    var result = null;\n    if (subject.length * clipping.length === 0) {\n      if        (operation === INTERSECTION) {\n        result = EMPTY;\n      } else if (operation === DIFFERENCE) {\n        result = subject;\n      } else if (operation === UNION ||\n                 operation === XOR) {\n        result = (subject.length === 0) ? clipping : subject;\n      }\n    }\n    return result;\n  }\n\n\n  function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {\n    var result = null;\n    if (sbbox[0] > cbbox[2] ||\n        cbbox[0] > sbbox[2] ||\n        sbbox[1] > cbbox[3] ||\n        cbbox[1] > sbbox[3]) {\n      if        (operation === INTERSECTION) {\n        result = EMPTY;\n      } else if (operation === DIFFERENCE) {\n        result = subject;\n      } else if (operation === UNION ||\n                 operation === XOR) {\n        result = subject.concat(clipping);\n      }\n    }\n    return result;\n  }\n\n\n  function boolean(subject, clipping, operation) {\n    if (typeof subject[0][0][0] === 'number') {\n      subject = [subject];\n    }\n    if (typeof clipping[0][0][0] === 'number') {\n      clipping = [clipping];\n    }\n    var trivial = trivialOperation(subject, clipping, operation);\n    if (trivial) {\n      return trivial === EMPTY ? null : trivial;\n    }\n    var sbbox = [Infinity, Infinity, -Infinity, -Infinity];\n    var cbbox = [Infinity, Infinity, -Infinity, -Infinity];\n\n    //console.time('fill queue');\n    var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);\n    //console.timeEnd('fill queue');\n\n    trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);\n    if (trivial) {\n      return trivial === EMPTY ? null : trivial;\n    }\n    //console.time('subdivide edges');\n    var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);\n    //console.timeEnd('subdivide edges');\n\n    //console.time('connect vertices');\n    var result = connectEdges(sortedEvents, operation);\n    //console.timeEnd('connect vertices');\n    return result;\n  }\n\n  function union (subject, clipping) {\n    return boolean(subject, clipping, UNION);\n  }\n\n  function diff (subject, clipping) {\n    return boolean(subject, clipping, DIFFERENCE);\n  }\n\n  function xor (subject, clipping){\n    return boolean(subject, clipping, XOR);\n  }\n\n  function intersection$1 (subject, clipping) {\n    return boolean(subject, clipping, INTERSECTION);\n  }\n\n  /**\n   * @enum {Number}\n   */\n  var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };\n\n  exports.union = union;\n  exports.diff = diff;\n  exports.xor = xor;\n  exports.intersection = intersection$1;\n  exports.operations = operations;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n\n},{}],266:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n  var M = ARRAY16\n  for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n  var a = this._a\n  var b = this._b\n  var c = this._c\n  var d = this._d\n\n  a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n  d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n  c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n  b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n  a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n  d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n  c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n  b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n  a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n  d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n  c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n  b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n  a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n  d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n  c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n  b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n  a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n  d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n  c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n  b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n  a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n  d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n  c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n  b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n  a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n  d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n  c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n  b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n  a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n  d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n  c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n  b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n  a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n  d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n  c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n  b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n  a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n  d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n  c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n  b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n  a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n  d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n  c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n  b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n  a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n  d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n  c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n  b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n  a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n  d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n  c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n  b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n  a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n  d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n  c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n  b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n  a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n  d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n  c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n  b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n  a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n  d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n  c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n  b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n  this._a = (this._a + a) | 0\n  this._b = (this._b + b) | 0\n  this._c = (this._c + c) | 0\n  this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.allocUnsafe(16)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n  return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n\n},{\"hash-base\":227,\"inherits\":262,\"safe-buffer\":318}],267:[function(require,module,exports){\nvar bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n  var len = n.bitLength();\n  var min_bytes = Math.ceil(len / 8);\n\n  // Generage random bytes until a number less than n is found.\n  // This ensures that 0..n-1 have an equal probability of being selected.\n  do\n    var a = new bn(this.rand.generate(min_bytes));\n  while (a.cmp(n) >= 0);\n\n  return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n  // Generate a random number greater than or equal to start and less than stop.\n  var size = stop.sub(start);\n  return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n\n},{\"bn.js\":147,\"brorand\":148}],268:[function(require,module,exports){\nmodule.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n\n},{}],269:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n\n},{}],270:[function(require,module,exports){\nexports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n    if (typeof location !== 'undefined') {\n        return location.hostname\n    }\n    else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n    return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n    return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n    if (typeof navigator !== 'undefined') {\n        return navigator.appVersion;\n    }\n    return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n    return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n\n},{}],271:[function(require,module,exports){\nmodule.exports={\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}\n},{}],272:[function(require,module,exports){\n// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('modulus').int(),\n    this.key('publicExponent').int(),\n    this.key('privateExponent').int(),\n    this.key('prime1').int(),\n    this.key('prime2').int(),\n    this.key('exponent1').int(),\n    this.key('exponent2').int(),\n    this.key('coefficient').int()\n  )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n  this.seq().obj(\n    this.key('modulus').int(),\n    this.key('publicExponent').int()\n  )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('none').null_().optional(),\n    this.key('curve').objid().optional(),\n    this.key('params').seq().obj(\n      this.key('p').int(),\n      this.key('q').int(),\n      this.key('g').int()\n    ).optional()\n  )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').seq().obj(\n      this.key('id').objid(),\n      this.key('decrypt').seq().obj(\n        this.key('kde').seq().obj(\n          this.key('id').objid(),\n          this.key('kdeparams').seq().obj(\n            this.key('salt').octstr(),\n            this.key('iters').int()\n          )\n        ),\n        this.key('cipher').seq().obj(\n          this.key('algo').objid(),\n          this.key('iv').octstr()\n        )\n      )\n    ),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('p').int(),\n    this.key('q').int(),\n    this.key('g').int(),\n    this.key('pub_key').int(),\n    this.key('priv_key').int()\n  )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n  this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('privateKey').octstr(),\n    this.key('parameters').optional().explicit(0).use(ECParameters),\n    this.key('publicKey').optional().explicit(1).bitstr()\n  )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n  this.choice({\n    namedCurve: this.objid()\n  })\n})\n\nexports.signature = asn1.define('signature', function () {\n  this.seq().obj(\n    this.key('r').int(),\n    this.key('s').int()\n  )\n})\n\n},{\"./certificate\":273,\"asn1.js\":132}],273:[function(require,module,exports){\n// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n  this.choice({\n    utcTime: this.utctime(),\n    generalTime: this.gentime()\n  })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n  this.seq().obj(\n    this.key('type').objid(),\n    this.key('value').any()\n  )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('parameters').optional(),\n    this.key('curve').objid().optional()\n  )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n  this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n  this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n  this.choice({\n    rdnSequence: this.use(RDNSequence)\n  })\n})\n\nvar Validity = asn.define('Validity', function () {\n  this.seq().obj(\n    this.key('notBefore').use(Time),\n    this.key('notAfter').use(Time)\n  )\n})\n\nvar Extension = asn.define('Extension', function () {\n  this.seq().obj(\n    this.key('extnID').objid(),\n    this.key('critical').bool().def(false),\n    this.key('extnValue').octstr()\n  )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n  this.seq().obj(\n    this.key('version').explicit(0).int().optional(),\n    this.key('serialNumber').int(),\n    this.key('signature').use(AlgorithmIdentifier),\n    this.key('issuer').use(Name),\n    this.key('validity').use(Validity),\n    this.key('subject').use(Name),\n    this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n    this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n    this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n    this.key('extensions').explicit(3).seqof(Extension).optional()\n  )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n  this.seq().obj(\n    this.key('tbsCertificate').use(TBSCertificate),\n    this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n    this.key('signatureValue').bitstr()\n  )\n})\n\nmodule.exports = X509Certificate\n\n},{\"asn1.js\":132}],274:[function(require,module,exports){\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n  var key = okey.toString()\n  var match = key.match(findProc)\n  var decrypted\n  if (!match) {\n    var match2 = key.match(fullRegex)\n    decrypted = new Buffer(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n  } else {\n    var suite = 'aes' + match[1]\n    var iv = Buffer.from(match[2], 'hex')\n    var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n    var out = []\n    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n    out.push(cipher.update(cipherText))\n    out.push(cipher.final())\n    decrypted = Buffer.concat(out)\n  }\n  var tag = key.match(startRegex)[1]\n  return {\n    tag: tag,\n    data: decrypted\n  }\n}\n\n},{\"browserify-aes\":152,\"evp_bytestokey\":222,\"safe-buffer\":318}],275:[function(require,module,exports){\nvar asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n  var password\n  if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n    password = buffer.passphrase\n    buffer = buffer.key\n  }\n  if (typeof buffer === 'string') {\n    buffer = Buffer.from(buffer)\n  }\n\n  var stripped = fixProc(buffer, password)\n\n  var type = stripped.tag\n  var data = stripped.data\n  var subtype, ndata\n  switch (type) {\n    case 'CERTIFICATE':\n      ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n      // falls through\n    case 'PUBLIC KEY':\n      if (!ndata) {\n        ndata = asn1.PublicKey.decode(data, 'der')\n      }\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n        case '1.2.840.10045.2.1':\n          ndata.subjectPrivateKey = ndata.subjectPublicKey\n          return {\n            type: 'ec',\n            data: ndata\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n          return {\n            type: 'dsa',\n            data: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      throw new Error('unknown key type ' + type)\n    case 'ENCRYPTED PRIVATE KEY':\n      data = asn1.EncryptedPrivateKey.decode(data, 'der')\n      data = decrypt(data, password)\n      // falls through\n    case 'PRIVATE KEY':\n      ndata = asn1.PrivateKey.decode(data, 'der')\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n        case '1.2.840.10045.2.1':\n          return {\n            curve: ndata.algorithm.curve,\n            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n          return {\n            type: 'dsa',\n            params: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      throw new Error('unknown key type ' + type)\n    case 'RSA PUBLIC KEY':\n      return asn1.RSAPublicKey.decode(data, 'der')\n    case 'RSA PRIVATE KEY':\n      return asn1.RSAPrivateKey.decode(data, 'der')\n    case 'DSA PRIVATE KEY':\n      return {\n        type: 'dsa',\n        params: asn1.DSAPrivateKey.decode(data, 'der')\n      }\n    case 'EC PRIVATE KEY':\n      data = asn1.ECPrivateKey.decode(data, 'der')\n      return {\n        curve: data.parameters.value,\n        privateKey: data.privateKey\n      }\n    default: throw new Error('unknown key type ' + type)\n  }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n  var salt = data.algorithm.decrypt.kde.kdeparams.salt\n  var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n  var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n  var iv = data.algorithm.decrypt.cipher.iv\n  var cipherText = data.subjectPrivateKey\n  var keylen = parseInt(algo.split('-')[1], 10) / 8\n  var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n  var cipher = ciphers.createDecipheriv(algo, key, iv)\n  var out = []\n  out.push(cipher.update(cipherText))\n  out.push(cipher.final())\n  return Buffer.concat(out)\n}\n\n},{\"./aesid.json\":271,\"./asn1\":272,\"./fixProc\":274,\"browserify-aes\":152,\"pbkdf2\":278,\"safe-buffer\":318}],276:[function(require,module,exports){\n(function (process){\n// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\n}).call(this,require('_process'))\n},{\"_process\":284}],277:[function(require,module,exports){\n'use strict';\n\nmodule.exports = Pbf;\n\nvar ieee754 = require('ieee754');\n\nfunction Pbf(buf) {\n    this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);\n    this.pos = 0;\n    this.type = 0;\n    this.length = this.buf.length;\n}\n\nPbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nPbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64\nPbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nPbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32\n\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16),\n    SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\nPbf.prototype = {\n\n    destroy: function() {\n        this.buf = null;\n    },\n\n    // === READING =================================================================\n\n    readFields: function(readField, result, end) {\n        end = end || this.length;\n\n        while (this.pos < end) {\n            var val = this.readVarint(),\n                tag = val >> 3,\n                startPos = this.pos;\n\n            this.type = val & 0x7;\n            readField(tag, result, this);\n\n            if (this.pos === startPos) this.skip(val);\n        }\n        return result;\n    },\n\n    readMessage: function(readField, result) {\n        return this.readFields(readField, result, this.readVarint() + this.pos);\n    },\n\n    readFixed32: function() {\n        var val = readUInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n\n    readSFixed32: function() {\n        var val = readInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n\n    // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n    readFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n\n    readSFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n\n    readFloat: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 23, 4);\n        this.pos += 4;\n        return val;\n    },\n\n    readDouble: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 52, 8);\n        this.pos += 8;\n        return val;\n    },\n\n    readVarint: function(isSigned) {\n        var buf = this.buf,\n            val, b;\n\n        b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n        b = buf[this.pos];   val |= (b & 0x0f) << 28;\n\n        return readVarintRemainder(val, isSigned, this);\n    },\n\n    readVarint64: function() { // for compatibility with v2.0.1\n        return this.readVarint(true);\n    },\n\n    readSVarint: function() {\n        var num = this.readVarint();\n        return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n    },\n\n    readBoolean: function() {\n        return Boolean(this.readVarint());\n    },\n\n    readString: function() {\n        var end = this.readVarint() + this.pos,\n            str = readUtf8(this.buf, this.pos, end);\n        this.pos = end;\n        return str;\n    },\n\n    readBytes: function() {\n        var end = this.readVarint() + this.pos,\n            buffer = this.buf.subarray(this.pos, end);\n        this.pos = end;\n        return buffer;\n    },\n\n    // verbose for performance reasons; doesn't affect gzipped size\n\n    readPackedVarint: function(arr, isSigned) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readVarint(isSigned));\n        return arr;\n    },\n    readPackedSVarint: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSVarint());\n        return arr;\n    },\n    readPackedBoolean: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readBoolean());\n        return arr;\n    },\n    readPackedFloat: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFloat());\n        return arr;\n    },\n    readPackedDouble: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readDouble());\n        return arr;\n    },\n    readPackedFixed32: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed32());\n        return arr;\n    },\n    readPackedSFixed32: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed32());\n        return arr;\n    },\n    readPackedFixed64: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed64());\n        return arr;\n    },\n    readPackedSFixed64: function(arr) {\n        if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed64());\n        return arr;\n    },\n\n    skip: function(val) {\n        var type = val & 0x7;\n        if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}\n        else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;\n        else if (type === Pbf.Fixed32) this.pos += 4;\n        else if (type === Pbf.Fixed64) this.pos += 8;\n        else throw new Error('Unimplemented type: ' + type);\n    },\n\n    // === WRITING =================================================================\n\n    writeTag: function(tag, type) {\n        this.writeVarint((tag << 3) | type);\n    },\n\n    realloc: function(min) {\n        var length = this.length || 16;\n\n        while (length < this.pos + min) length *= 2;\n\n        if (length !== this.length) {\n            var buf = new Uint8Array(length);\n            buf.set(this.buf);\n            this.buf = buf;\n            this.length = length;\n        }\n    },\n\n    finish: function() {\n        this.length = this.pos;\n        this.pos = 0;\n        return this.buf.subarray(0, this.length);\n    },\n\n    writeFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n\n    writeSFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n\n    writeFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n\n    writeSFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n\n    writeVarint: function(val) {\n        val = +val || 0;\n\n        if (val > 0xfffffff || val < 0) {\n            writeBigVarint(val, this);\n            return;\n        }\n\n        this.realloc(4);\n\n        this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] =   (val >>> 7) & 0x7f;\n    },\n\n    writeSVarint: function(val) {\n        this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n    },\n\n    writeBoolean: function(val) {\n        this.writeVarint(Boolean(val));\n    },\n\n    writeString: function(str) {\n        str = String(str);\n        this.realloc(str.length * 4);\n\n        this.pos++; // reserve 1 byte for short string length\n\n        var startPos = this.pos;\n        // write the string directly to the buffer and see how much was written\n        this.pos = writeUtf8(this.buf, str, this.pos);\n        var len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n\n    writeFloat: function(val) {\n        this.realloc(4);\n        ieee754.write(this.buf, val, this.pos, true, 23, 4);\n        this.pos += 4;\n    },\n\n    writeDouble: function(val) {\n        this.realloc(8);\n        ieee754.write(this.buf, val, this.pos, true, 52, 8);\n        this.pos += 8;\n    },\n\n    writeBytes: function(buffer) {\n        var len = buffer.length;\n        this.writeVarint(len);\n        this.realloc(len);\n        for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n    },\n\n    writeRawMessage: function(fn, obj) {\n        this.pos++; // reserve 1 byte for short message length\n\n        // write the message directly to the buffer and see how much was written\n        var startPos = this.pos;\n        fn(obj, this);\n        var len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n\n    writeMessage: function(tag, fn, obj) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeRawMessage(fn, obj);\n    },\n\n    writePackedVarint:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr);   },\n    writePackedSVarint:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr);  },\n    writePackedBoolean:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr);  },\n    writePackedFloat:    function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr);    },\n    writePackedDouble:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr);   },\n    writePackedFixed32:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr);  },\n    writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },\n    writePackedFixed64:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr);  },\n    writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },\n\n    writeBytesField: function(tag, buffer) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeBytes(buffer);\n    },\n    writeFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFixed32(val);\n    },\n    writeSFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeSFixed32(val);\n    },\n    writeFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeFixed64(val);\n    },\n    writeSFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeSFixed64(val);\n    },\n    writeVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeVarint(val);\n    },\n    writeSVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeSVarint(val);\n    },\n    writeStringField: function(tag, str) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeString(str);\n    },\n    writeFloatField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFloat(val);\n    },\n    writeDoubleField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeDouble(val);\n    },\n    writeBooleanField: function(tag, val) {\n        this.writeVarintField(tag, Boolean(val));\n    }\n};\n\nfunction readVarintRemainder(l, s, p) {\n    var buf = p.buf,\n        h, b;\n\n    b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n    throw new Error('Expected varint not more than 10 bytes');\n}\n\nfunction readPackedEnd(pbf) {\n    return pbf.type === Pbf.Bytes ?\n        pbf.readVarint() + pbf.pos : pbf.pos + 1;\n}\n\nfunction toNum(low, high, isSigned) {\n    if (isSigned) {\n        return high * 0x100000000 + (low >>> 0);\n    }\n\n    return ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\nfunction writeBigVarint(val, pbf) {\n    var low, high;\n\n    if (val >= 0) {\n        low  = (val % 0x100000000) | 0;\n        high = (val / 0x100000000) | 0;\n    } else {\n        low  = ~(-val % 0x100000000);\n        high = ~(-val / 0x100000000);\n\n        if (low ^ 0xffffffff) {\n            low = (low + 1) | 0;\n        } else {\n            low = 0;\n            high = (high + 1) | 0;\n        }\n    }\n\n    if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n        throw new Error('Given varint doesn\\'t fit into 10 bytes');\n    }\n\n    pbf.realloc(10);\n\n    writeBigVarintLow(low, high, pbf);\n    writeBigVarintHigh(high, pbf);\n}\n\nfunction writeBigVarintLow(low, high, pbf) {\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos]   = low & 0x7f;\n}\n\nfunction writeBigVarintHigh(high, pbf) {\n    var lsb = (high & 0x07) << 4;\n\n    pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f;\n}\n\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n    var extraLen =\n        len <= 0x3fff ? 1 :\n        len <= 0x1fffff ? 2 :\n        len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));\n\n    // if 1 byte isn't enough for encoding message length, shift the data to the right\n    pbf.realloc(extraLen);\n    for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\n\nfunction writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }\nfunction writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }\nfunction writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }\nfunction writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }\nfunction writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }\nfunction writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }\nfunction writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }\nfunction writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }\nfunction writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\nfunction readUInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] * 0x1000000);\n}\n\nfunction writeInt32(buf, val, pos) {\n    buf[pos] = val;\n    buf[pos + 1] = (val >>> 8);\n    buf[pos + 2] = (val >>> 16);\n    buf[pos + 3] = (val >>> 24);\n}\n\nfunction readInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] << 24);\n}\n\nfunction readUtf8(buf, pos, end) {\n    var str = '';\n    var i = pos;\n\n    while (i < end) {\n        var b0 = buf[i];\n        var c = null; // codepoint\n        var bytesPerSequence =\n            b0 > 0xEF ? 4 :\n            b0 > 0xDF ? 3 :\n            b0 > 0xBF ? 2 : 1;\n\n        if (i + bytesPerSequence > end) break;\n\n        var b1, b2, b3;\n\n        if (bytesPerSequence === 1) {\n            if (b0 < 0x80) {\n                c = b0;\n            }\n        } else if (bytesPerSequence === 2) {\n            b1 = buf[i + 1];\n            if ((b1 & 0xC0) === 0x80) {\n                c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n                if (c <= 0x7F) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 3) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n                if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 4) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            b3 = buf[i + 3];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n                if (c <= 0xFFFF || c >= 0x110000) {\n                    c = null;\n                }\n            }\n        }\n\n        if (c === null) {\n            c = 0xFFFD;\n            bytesPerSequence = 1;\n\n        } else if (c > 0xFFFF) {\n            c -= 0x10000;\n            str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n            c = 0xDC00 | c & 0x3FF;\n        }\n\n        str += String.fromCharCode(c);\n        i += bytesPerSequence;\n    }\n\n    return str;\n}\n\nfunction writeUtf8(buf, str, pos) {\n    for (var i = 0, c, lead; i < str.length; i++) {\n        c = str.charCodeAt(i); // code point\n\n        if (c > 0xD7FF && c < 0xE000) {\n            if (lead) {\n                if (c < 0xDC00) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                    lead = c;\n                    continue;\n                } else {\n                    c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n                    lead = null;\n                }\n            } else {\n                if (c > 0xDBFF || (i + 1 === str.length)) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                } else {\n                    lead = c;\n                }\n                continue;\n            }\n        } else if (lead) {\n            buf[pos++] = 0xEF;\n            buf[pos++] = 0xBF;\n            buf[pos++] = 0xBD;\n            lead = null;\n        }\n\n        if (c < 0x80) {\n            buf[pos++] = c;\n        } else {\n            if (c < 0x800) {\n                buf[pos++] = c >> 0x6 | 0xC0;\n            } else {\n                if (c < 0x10000) {\n                    buf[pos++] = c >> 0xC | 0xE0;\n                } else {\n                    buf[pos++] = c >> 0x12 | 0xF0;\n                    buf[pos++] = c >> 0xC & 0x3F | 0x80;\n                }\n                buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n            }\n            buf[pos++] = c & 0x3F | 0x80;\n        }\n    }\n    return pos;\n}\n\n},{\"ieee754\":241}],278:[function(require,module,exports){\nexports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n\n},{\"./lib/async\":279,\"./lib/sync\":282}],279:[function(require,module,exports){\n(function (process,global){\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  'sha': 'SHA-1',\n  'sha-1': 'SHA-1',\n  'sha1': 'SHA-1',\n  'sha256': 'SHA-256',\n  'sha-256': 'SHA-256',\n  'sha384': 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\n\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    process.nextTick(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    process.nextTick(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n\n  if (!algo || typeof global.Promise !== 'function') {\n    return process.nextTick(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n  }\n\n  checkParameters(password, salt, iterations, keylen)\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n    return sync(password, salt, iterations, keylen, digest)\n  }), callback)\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./default-encoding\":280,\"./precondition\":281,\"./sync\":282,\"_process\":284,\"safe-buffer\":318}],280:[function(require,module,exports){\n(function (process){\nvar defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n  defaultEncoding = 'utf-8'\n} else {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n\n}).call(this,require('_process'))\n},{\"_process\":284}],281:[function(require,module,exports){\n(function (Buffer){\nvar MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nfunction checkBuffer (buf, name) {\n  if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n    throw new TypeError(name + ' must be a buffer or string')\n  }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n  checkBuffer(password, 'Password')\n  checkBuffer(salt, 'Salt')\n\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n\n}).call(this,{\"isBuffer\":require(\"../../is-buffer/index.js\")})\n},{\"../../is-buffer/index.js\":263}],282:[function(require,module,exports){\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n  function rmd160Func (data) {\n    return new RIPEMD160().update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  checkParameters(password, salt, iterations, keylen)\n\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n\n},{\"./default-encoding\":280,\"./precondition\":281,\"create-hash/md5\":189,\"ripemd160\":317,\"safe-buffer\":318,\"sha.js\":320}],283:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n\n}).call(this,require('_process'))\n},{\"_process\":284}],284:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],285:[function(require,module,exports){\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.proj4 = factory());\n}(this, (function () { 'use strict';\n\n\tvar globals = function(defs) {\n\t  defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n\t  defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n\t  defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n\t  defs.WGS84 = defs['EPSG:4326'];\n\t  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n\t  defs.GOOGLE = defs['EPSG:3857'];\n\t  defs['EPSG:900913'] = defs['EPSG:3857'];\n\t  defs['EPSG:102113'] = defs['EPSG:3857'];\n\t};\n\n\tvar PJD_3PARAM = 1;\n\tvar PJD_7PARAM = 2;\n\tvar PJD_WGS84 = 4; // WGS84 or equivalent\n\tvar PJD_NODATUM = 5; // WGS84 or equivalent\n\tvar SEC_TO_RAD = 4.84813681109535993589914102357e-6;\n\tvar HALF_PI = Math.PI/2;\n\t// ellipoid pj_set_ell.c\n\tvar SIXTH = 0.1666666666666666667;\n\t/* 1/6 */\n\tvar RA4 = 0.04722222222222222222;\n\t/* 17/360 */\n\tvar RA6 = 0.02215608465608465608;\n\tvar EPSLN = (typeof Number.EPSILON === 'undefined') ? 1.0e-10 : Number.EPSILON;\n\tvar D2R = 0.01745329251994329577;\n\tvar R2D = 57.29577951308232088;\n\tvar FORTPI = Math.PI/4;\n\tvar TWO_PI = Math.PI * 2;\n\t// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n\t// degree range by a tiny amount don't get wrapped. This prevents points that\n\t// have drifted from their original location along the 180th meridian (due to\n\t// floating point error) from changing their sign.\n\tvar SPI = 3.14159265359;\n\n\tvar exports$1 = {};\n\texports$1.greenwich = 0.0; //\"0dE\",\n\texports$1.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\n\texports$1.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\n\texports$1.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\n\texports$1.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\n\texports$1.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\n\texports$1.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\n\texports$1.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\n\texports$1.ferro = -17.666666666667; //\"17d40'W\",\n\texports$1.brussels = 4.367975; //\"4d22'4.71\\\"E\",\n\texports$1.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\n\texports$1.athens = 23.7163375; //\"23d42'58.815\\\"E\",\n\texports$1.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n\n\tvar units = {\n\t  ft: {to_meter: 0.3048},\n\t  'us-ft': {to_meter: 1200 / 3937}\n\t};\n\n\tvar ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\n\tfunction match(obj, key) {\n\t  if (obj[key]) {\n\t    return obj[key];\n\t  }\n\t  var keys = Object.keys(obj);\n\t  var lkey = key.toLowerCase().replace(ignoredChar, '');\n\t  var i = -1;\n\t  var testkey, processedKey;\n\t  while (++i < keys.length) {\n\t    testkey = keys[i];\n\t    processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n\t    if (processedKey === lkey) {\n\t      return obj[testkey];\n\t    }\n\t  }\n\t}\n\n\tvar parseProj = function(defData) {\n\t  var self = {};\n\t  var paramObj = defData.split('+').map(function(v) {\n\t    return v.trim();\n\t  }).filter(function(a) {\n\t    return a;\n\t  }).reduce(function(p, a) {\n\t    var split = a.split('=');\n\t    split.push(true);\n\t    p[split[0].toLowerCase()] = split[1];\n\t    return p;\n\t  }, {});\n\t  var paramName, paramVal, paramOutname;\n\t  var params = {\n\t    proj: 'projName',\n\t    datum: 'datumCode',\n\t    rf: function(v) {\n\t      self.rf = parseFloat(v);\n\t    },\n\t    lat_0: function(v) {\n\t      self.lat0 = v * D2R;\n\t    },\n\t    lat_1: function(v) {\n\t      self.lat1 = v * D2R;\n\t    },\n\t    lat_2: function(v) {\n\t      self.lat2 = v * D2R;\n\t    },\n\t    lat_ts: function(v) {\n\t      self.lat_ts = v * D2R;\n\t    },\n\t    lon_0: function(v) {\n\t      self.long0 = v * D2R;\n\t    },\n\t    lon_1: function(v) {\n\t      self.long1 = v * D2R;\n\t    },\n\t    lon_2: function(v) {\n\t      self.long2 = v * D2R;\n\t    },\n\t    alpha: function(v) {\n\t      self.alpha = parseFloat(v) * D2R;\n\t    },\n\t    lonc: function(v) {\n\t      self.longc = v * D2R;\n\t    },\n\t    x_0: function(v) {\n\t      self.x0 = parseFloat(v);\n\t    },\n\t    y_0: function(v) {\n\t      self.y0 = parseFloat(v);\n\t    },\n\t    k_0: function(v) {\n\t      self.k0 = parseFloat(v);\n\t    },\n\t    k: function(v) {\n\t      self.k0 = parseFloat(v);\n\t    },\n\t    a: function(v) {\n\t      self.a = parseFloat(v);\n\t    },\n\t    b: function(v) {\n\t      self.b = parseFloat(v);\n\t    },\n\t    r_a: function() {\n\t      self.R_A = true;\n\t    },\n\t    zone: function(v) {\n\t      self.zone = parseInt(v, 10);\n\t    },\n\t    south: function() {\n\t      self.utmSouth = true;\n\t    },\n\t    towgs84: function(v) {\n\t      self.datum_params = v.split(\",\").map(function(a) {\n\t        return parseFloat(a);\n\t      });\n\t    },\n\t    to_meter: function(v) {\n\t      self.to_meter = parseFloat(v);\n\t    },\n\t    units: function(v) {\n\t      self.units = v;\n\t      var unit = match(units, v);\n\t      if (unit) {\n\t        self.to_meter = unit.to_meter;\n\t      }\n\t    },\n\t    from_greenwich: function(v) {\n\t      self.from_greenwich = v * D2R;\n\t    },\n\t    pm: function(v) {\n\t      var pm = match(exports$1, v);\n\t      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n\t    },\n\t    nadgrids: function(v) {\n\t      if (v === '@null') {\n\t        self.datumCode = 'none';\n\t      }\n\t      else {\n\t        self.nadgrids = v;\n\t      }\n\t    },\n\t    axis: function(v) {\n\t      var legalAxis = \"ewnsud\";\n\t      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n\t        self.axis = v;\n\t      }\n\t    }\n\t  };\n\t  for (paramName in paramObj) {\n\t    paramVal = paramObj[paramName];\n\t    if (paramName in params) {\n\t      paramOutname = params[paramName];\n\t      if (typeof paramOutname === 'function') {\n\t        paramOutname(paramVal);\n\t      }\n\t      else {\n\t        self[paramOutname] = paramVal;\n\t      }\n\t    }\n\t    else {\n\t      self[paramName] = paramVal;\n\t    }\n\t  }\n\t  if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n\t    self.datumCode = self.datumCode.toLowerCase();\n\t  }\n\t  return self;\n\t};\n\n\tvar NEUTRAL = 1;\n\tvar KEYWORD = 2;\n\tvar NUMBER = 3;\n\tvar QUOTED = 4;\n\tvar AFTERQUOTE = 5;\n\tvar ENDED = -1;\n\tvar whitespace = /\\s/;\n\tvar latin = /[A-Za-z]/;\n\tvar keyword = /[A-Za-z84]/;\n\tvar endThings = /[,\\]]/;\n\tvar digets = /[\\d\\.E\\-\\+]/;\n\t// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\n\tfunction Parser(text) {\n\t  if (typeof text !== 'string') {\n\t    throw new Error('not a string');\n\t  }\n\t  this.text = text.trim();\n\t  this.level = 0;\n\t  this.place = 0;\n\t  this.root = null;\n\t  this.stack = [];\n\t  this.currentObject = null;\n\t  this.state = NEUTRAL;\n\t}\n\tParser.prototype.readCharicter = function() {\n\t  var char = this.text[this.place++];\n\t  if (this.state !== QUOTED) {\n\t    while (whitespace.test(char)) {\n\t      if (this.place >= this.text.length) {\n\t        return;\n\t      }\n\t      char = this.text[this.place++];\n\t    }\n\t  }\n\t  switch (this.state) {\n\t    case NEUTRAL:\n\t      return this.neutral(char);\n\t    case KEYWORD:\n\t      return this.keyword(char)\n\t    case QUOTED:\n\t      return this.quoted(char);\n\t    case AFTERQUOTE:\n\t      return this.afterquote(char);\n\t    case NUMBER:\n\t      return this.number(char);\n\t    case ENDED:\n\t      return;\n\t  }\n\t};\n\tParser.prototype.afterquote = function(char) {\n\t  if (char === '\"') {\n\t    this.word += '\"';\n\t    this.state = QUOTED;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.word = this.word.trim();\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n\t};\n\tParser.prototype.afterItem = function(char) {\n\t  if (char === ',') {\n\t    if (this.word !== null) {\n\t      this.currentObject.push(this.word);\n\t    }\n\t    this.word = null;\n\t    this.state = NEUTRAL;\n\t    return;\n\t  }\n\t  if (char === ']') {\n\t    this.level--;\n\t    if (this.word !== null) {\n\t      this.currentObject.push(this.word);\n\t      this.word = null;\n\t    }\n\t    this.state = NEUTRAL;\n\t    this.currentObject = this.stack.pop();\n\t    if (!this.currentObject) {\n\t      this.state = ENDED;\n\t    }\n\n\t    return;\n\t  }\n\t};\n\tParser.prototype.number = function(char) {\n\t  if (digets.test(char)) {\n\t    this.word += char;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.word = parseFloat(this.word);\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n\t};\n\tParser.prototype.quoted = function(char) {\n\t  if (char === '\"') {\n\t    this.state = AFTERQUOTE;\n\t    return;\n\t  }\n\t  this.word += char;\n\t  return;\n\t};\n\tParser.prototype.keyword = function(char) {\n\t  if (keyword.test(char)) {\n\t    this.word += char;\n\t    return;\n\t  }\n\t  if (char === '[') {\n\t    var newObjects = [];\n\t    newObjects.push(this.word);\n\t    this.level++;\n\t    if (this.root === null) {\n\t      this.root = newObjects;\n\t    } else {\n\t      this.currentObject.push(newObjects);\n\t    }\n\t    this.stack.push(this.currentObject);\n\t    this.currentObject = newObjects;\n\t    this.state = NEUTRAL;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n\t};\n\tParser.prototype.neutral = function(char) {\n\t  if (latin.test(char)) {\n\t    this.word = char;\n\t    this.state = KEYWORD;\n\t    return;\n\t  }\n\t  if (char === '\"') {\n\t    this.word = '';\n\t    this.state = QUOTED;\n\t    return;\n\t  }\n\t  if (digets.test(char)) {\n\t    this.word = char;\n\t    this.state = NUMBER;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n\t};\n\tParser.prototype.output = function() {\n\t  while (this.place < this.text.length) {\n\t    this.readCharicter();\n\t  }\n\t  if (this.state === ENDED) {\n\t    return this.root;\n\t  }\n\t  throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n\t};\n\n\tfunction parseString(txt) {\n\t  var parser = new Parser(txt);\n\t  return parser.output();\n\t}\n\n\tfunction mapit(obj, key, value) {\n\t  if (Array.isArray(key)) {\n\t    value.unshift(key);\n\t    key = null;\n\t  }\n\t  var thing = key ? {} : obj;\n\n\t  var out = value.reduce(function(newObj, item) {\n\t    sExpr(item, newObj);\n\t    return newObj\n\t  }, thing);\n\t  if (key) {\n\t    obj[key] = out;\n\t  }\n\t}\n\n\tfunction sExpr(v, obj) {\n\t  if (!Array.isArray(v)) {\n\t    obj[v] = true;\n\t    return;\n\t  }\n\t  var key = v.shift();\n\t  if (key === 'PARAMETER') {\n\t    key = v.shift();\n\t  }\n\t  if (v.length === 1) {\n\t    if (Array.isArray(v[0])) {\n\t      obj[key] = {};\n\t      sExpr(v[0], obj[key]);\n\t      return;\n\t    }\n\t    obj[key] = v[0];\n\t    return;\n\t  }\n\t  if (!v.length) {\n\t    obj[key] = true;\n\t    return;\n\t  }\n\t  if (key === 'TOWGS84') {\n\t    obj[key] = v;\n\t    return;\n\t  }\n\t  if (!Array.isArray(key)) {\n\t    obj[key] = {};\n\t  }\n\n\t  var i;\n\t  switch (key) {\n\t    case 'UNIT':\n\t    case 'PRIMEM':\n\t    case 'VERT_DATUM':\n\t      obj[key] = {\n\t        name: v[0].toLowerCase(),\n\t        convert: v[1]\n\t      };\n\t      if (v.length === 3) {\n\t        sExpr(v[2], obj[key]);\n\t      }\n\t      return;\n\t    case 'SPHEROID':\n\t    case 'ELLIPSOID':\n\t      obj[key] = {\n\t        name: v[0],\n\t        a: v[1],\n\t        rf: v[2]\n\t      };\n\t      if (v.length === 4) {\n\t        sExpr(v[3], obj[key]);\n\t      }\n\t      return;\n\t    case 'PROJECTEDCRS':\n\t    case 'PROJCRS':\n\t    case 'GEOGCS':\n\t    case 'GEOCCS':\n\t    case 'PROJCS':\n\t    case 'LOCAL_CS':\n\t    case 'GEODCRS':\n\t    case 'GEODETICCRS':\n\t    case 'GEODETICDATUM':\n\t    case 'EDATUM':\n\t    case 'ENGINEERINGDATUM':\n\t    case 'VERT_CS':\n\t    case 'VERTCRS':\n\t    case 'VERTICALCRS':\n\t    case 'COMPD_CS':\n\t    case 'COMPOUNDCRS':\n\t    case 'ENGINEERINGCRS':\n\t    case 'ENGCRS':\n\t    case 'FITTED_CS':\n\t    case 'LOCAL_DATUM':\n\t    case 'DATUM':\n\t      v[0] = ['name', v[0]];\n\t      mapit(obj, key, v);\n\t      return;\n\t    default:\n\t      i = -1;\n\t      while (++i < v.length) {\n\t        if (!Array.isArray(v[i])) {\n\t          return sExpr(v, obj[key]);\n\t        }\n\t      }\n\t      return mapit(obj, key, v);\n\t  }\n\t}\n\n\tvar D2R$1 = 0.01745329251994329577;\n\tfunction rename(obj, params) {\n\t  var outName = params[0];\n\t  var inName = params[1];\n\t  if (!(outName in obj) && (inName in obj)) {\n\t    obj[outName] = obj[inName];\n\t    if (params.length === 3) {\n\t      obj[outName] = params[2](obj[outName]);\n\t    }\n\t  }\n\t}\n\n\tfunction d2r(input) {\n\t  return input * D2R$1;\n\t}\n\n\tfunction cleanWKT(wkt) {\n\t  if (wkt.type === 'GEOGCS') {\n\t    wkt.projName = 'longlat';\n\t  } else if (wkt.type === 'LOCAL_CS') {\n\t    wkt.projName = 'identity';\n\t    wkt.local = true;\n\t  } else {\n\t    if (typeof wkt.PROJECTION === 'object') {\n\t      wkt.projName = Object.keys(wkt.PROJECTION)[0];\n\t    } else {\n\t      wkt.projName = wkt.PROJECTION;\n\t    }\n\t  }\n\t  if (wkt.UNIT) {\n\t    wkt.units = wkt.UNIT.name.toLowerCase();\n\t    if (wkt.units === 'metre') {\n\t      wkt.units = 'meter';\n\t    }\n\t    if (wkt.UNIT.convert) {\n\t      if (wkt.type === 'GEOGCS') {\n\t        if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n\t          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n\t        }\n\t      } else {\n\t        wkt.to_meter = wkt.UNIT.convert, 10;\n\t      }\n\t    }\n\t  }\n\t  var geogcs = wkt.GEOGCS;\n\t  if (wkt.type === 'GEOGCS') {\n\t    geogcs = wkt;\n\t  }\n\t  if (geogcs) {\n\t    //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n\t    //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n\t    //}\n\t    if (geogcs.DATUM) {\n\t      wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n\t    } else {\n\t      wkt.datumCode = geogcs.name.toLowerCase();\n\t    }\n\t    if (wkt.datumCode.slice(0, 2) === 'd_') {\n\t      wkt.datumCode = wkt.datumCode.slice(2);\n\t    }\n\t    if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n\t      wkt.datumCode = 'nzgd49';\n\t    }\n\t    if (wkt.datumCode === 'wgs_1984') {\n\t      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n\t        wkt.sphere = true;\n\t      }\n\t      wkt.datumCode = 'wgs84';\n\t    }\n\t    if (wkt.datumCode.slice(-6) === '_ferro') {\n\t      wkt.datumCode = wkt.datumCode.slice(0, - 6);\n\t    }\n\t    if (wkt.datumCode.slice(-8) === '_jakarta') {\n\t      wkt.datumCode = wkt.datumCode.slice(0, - 8);\n\t    }\n\t    if (~wkt.datumCode.indexOf('belge')) {\n\t      wkt.datumCode = 'rnb72';\n\t    }\n\t    if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n\t      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n\t      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n\t        wkt.ellps = 'intl';\n\t      }\n\n\t      wkt.a = geogcs.DATUM.SPHEROID.a;\n\t      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n\t    }\n\t    if (~wkt.datumCode.indexOf('osgb_1936')) {\n\t      wkt.datumCode = 'osgb36';\n\t    }\n\t  }\n\t  if (wkt.b && !isFinite(wkt.b)) {\n\t    wkt.b = wkt.a;\n\t  }\n\n\t  function toMeter(input) {\n\t    var ratio = wkt.to_meter || 1;\n\t    return input * ratio;\n\t  }\n\t  var renamer = function(a) {\n\t    return rename(wkt, a);\n\t  };\n\t  var list = [\n\t    ['standard_parallel_1', 'Standard_Parallel_1'],\n\t    ['standard_parallel_2', 'Standard_Parallel_2'],\n\t    ['false_easting', 'False_Easting'],\n\t    ['false_northing', 'False_Northing'],\n\t    ['central_meridian', 'Central_Meridian'],\n\t    ['latitude_of_origin', 'Latitude_Of_Origin'],\n\t    ['latitude_of_origin', 'Central_Parallel'],\n\t    ['scale_factor', 'Scale_Factor'],\n\t    ['k0', 'scale_factor'],\n\t    ['latitude_of_center', 'Latitude_of_center'],\n\t    ['lat0', 'latitude_of_center', d2r],\n\t    ['longitude_of_center', 'Longitude_Of_Center'],\n\t    ['longc', 'longitude_of_center', d2r],\n\t    ['x0', 'false_easting', toMeter],\n\t    ['y0', 'false_northing', toMeter],\n\t    ['long0', 'central_meridian', d2r],\n\t    ['lat0', 'latitude_of_origin', d2r],\n\t    ['lat0', 'standard_parallel_1', d2r],\n\t    ['lat1', 'standard_parallel_1', d2r],\n\t    ['lat2', 'standard_parallel_2', d2r],\n\t    ['alpha', 'azimuth', d2r],\n\t    ['srsCode', 'name']\n\t  ];\n\t  list.forEach(renamer);\n\t  if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n\t    wkt.long0 = wkt.longc;\n\t  }\n\t  if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n\t    wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n\t    wkt.lat_ts = wkt.lat1;\n\t  }\n\t}\n\tvar wkt = function(wkt) {\n\t  var lisp = parseString(wkt);\n\t  var type = lisp.shift();\n\t  var name = lisp.shift();\n\t  lisp.unshift(['name', name]);\n\t  lisp.unshift(['type', type]);\n\t  var obj = {};\n\t  sExpr(lisp, obj);\n\t  cleanWKT(obj);\n\t  return obj;\n\t};\n\n\tfunction defs(name) {\n\t  /*global console*/\n\t  var that = this;\n\t  if (arguments.length === 2) {\n\t    var def = arguments[1];\n\t    if (typeof def === 'string') {\n\t      if (def.charAt(0) === '+') {\n\t        defs[name] = parseProj(arguments[1]);\n\t      }\n\t      else {\n\t        defs[name] = wkt(arguments[1]);\n\t      }\n\t    } else {\n\t      defs[name] = def;\n\t    }\n\t  }\n\t  else if (arguments.length === 1) {\n\t    if (Array.isArray(name)) {\n\t      return name.map(function(v) {\n\t        if (Array.isArray(v)) {\n\t          defs.apply(that, v);\n\t        }\n\t        else {\n\t          defs(v);\n\t        }\n\t      });\n\t    }\n\t    else if (typeof name === 'string') {\n\t      if (name in defs) {\n\t        return defs[name];\n\t      }\n\t    }\n\t    else if ('EPSG' in name) {\n\t      defs['EPSG:' + name.EPSG] = name;\n\t    }\n\t    else if ('ESRI' in name) {\n\t      defs['ESRI:' + name.ESRI] = name;\n\t    }\n\t    else if ('IAU2000' in name) {\n\t      defs['IAU2000:' + name.IAU2000] = name;\n\t    }\n\t    else {\n\t      console.log(name);\n\t    }\n\t    return;\n\t  }\n\n\n\t}\n\tglobals(defs);\n\n\tfunction testObj(code){\n\t  return typeof code === 'string';\n\t}\n\tfunction testDef(code){\n\t  return code in defs;\n\t}\n\t var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS']; \n\tfunction testWKT(code){\n\t  return codeWords.some(function (word) {\n\t    return code.indexOf(word) > -1;\n\t  });\n\t}\n\tfunction testProj(code){\n\t  return code[0] === '+';\n\t}\n\tfunction parse(code){\n\t  if (testObj(code)) {\n\t    //check to see if this is a WKT string\n\t    if (testDef(code)) {\n\t      return defs[code];\n\t    }\n\t    if (testWKT(code)) {\n\t      return wkt(code);\n\t    }\n\t    if (testProj(code)) {\n\t      return parseProj(code);\n\t    }\n\t  }else{\n\t    return code;\n\t  }\n\t}\n\n\tvar extend = function(destination, source) {\n\t  destination = destination || {};\n\t  var value, property;\n\t  if (!source) {\n\t    return destination;\n\t  }\n\t  for (property in source) {\n\t    value = source[property];\n\t    if (value !== undefined) {\n\t      destination[property] = value;\n\t    }\n\t  }\n\t  return destination;\n\t};\n\n\tvar msfnz = function(eccent, sinphi, cosphi) {\n\t  var con = eccent * sinphi;\n\t  return cosphi / (Math.sqrt(1 - con * con));\n\t};\n\n\tvar sign = function(x) {\n\t  return x<0 ? -1 : 1;\n\t};\n\n\tvar adjust_lon = function(x) {\n\t  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n\t};\n\n\tvar tsfnz = function(eccent, phi, sinphi) {\n\t  var con = eccent * sinphi;\n\t  var com = 0.5 * eccent;\n\t  con = Math.pow(((1 - con) / (1 + con)), com);\n\t  return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n\t};\n\n\tvar phi2z = function(eccent, ts) {\n\t  var eccnth = 0.5 * eccent;\n\t  var con, dphi;\n\t  var phi = HALF_PI - 2 * Math.atan(ts);\n\t  for (var i = 0; i <= 15; i++) {\n\t    con = eccent * Math.sin(phi);\n\t    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\t  //console.log(\"phi2z has NoConvergence\");\n\t  return -9999;\n\t};\n\n\tfunction init() {\n\t  var con = this.b / this.a;\n\t  this.es = 1 - con * con;\n\t  if(!('x0' in this)){\n\t    this.x0 = 0;\n\t  }\n\t  if(!('y0' in this)){\n\t    this.y0 = 0;\n\t  }\n\t  this.e = Math.sqrt(this.es);\n\t  if (this.lat_ts) {\n\t    if (this.sphere) {\n\t      this.k0 = Math.cos(this.lat_ts);\n\t    }\n\t    else {\n\t      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n\t    }\n\t  }\n\t  else {\n\t    if (!this.k0) {\n\t      if (this.k) {\n\t        this.k0 = this.k;\n\t      }\n\t      else {\n\t        this.k0 = 1;\n\t      }\n\t    }\n\t  }\n\t}\n\n\t/* Mercator forward equations--mapping lat,long to x,y\n\t  --------------------------------------------------*/\n\n\tfunction forward(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  // convert to radians\n\t  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n\t    return null;\n\t  }\n\n\t  var x, y;\n\t  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n\t    return null;\n\t  }\n\t  else {\n\t    if (this.sphere) {\n\t      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n\t      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n\t    }\n\t    else {\n\t      var sinphi = Math.sin(lat);\n\t      var ts = tsfnz(this.e, lat, sinphi);\n\t      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n\t      y = this.y0 - this.a * this.k0 * Math.log(ts);\n\t    }\n\t    p.x = x;\n\t    p.y = y;\n\t    return p;\n\t  }\n\t}\n\n\t/* Mercator inverse equations--mapping x,y to lat/long\n\t  --------------------------------------------------*/\n\tfunction inverse(p) {\n\n\t  var x = p.x - this.x0;\n\t  var y = p.y - this.y0;\n\t  var lon, lat;\n\n\t  if (this.sphere) {\n\t    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n\t  }\n\t  else {\n\t    var ts = Math.exp(-y / (this.a * this.k0));\n\t    lat = phi2z(this.e, ts);\n\t    if (lat === -9999) {\n\t      return null;\n\t    }\n\t  }\n\t  lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$1 = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\n\tvar merc = {\n\t  init: init,\n\t  forward: forward,\n\t  inverse: inverse,\n\t  names: names$1\n\t};\n\n\tfunction init$1() {\n\t  //no-op for longlat\n\t}\n\n\tfunction identity(pt) {\n\t  return pt;\n\t}\n\tvar names$2 = [\"longlat\", \"identity\"];\n\tvar longlat = {\n\t  init: init$1,\n\t  forward: identity,\n\t  inverse: identity,\n\t  names: names$2\n\t};\n\n\tvar projs = [merc, longlat];\n\tvar names$$1 = {};\n\tvar projStore = [];\n\n\tfunction add(proj, i) {\n\t  var len = projStore.length;\n\t  if (!proj.names) {\n\t    console.log(i);\n\t    return true;\n\t  }\n\t  projStore[len] = proj;\n\t  proj.names.forEach(function(n) {\n\t    names$$1[n.toLowerCase()] = len;\n\t  });\n\t  return this;\n\t}\n\n\tfunction get(name) {\n\t  if (!name) {\n\t    return false;\n\t  }\n\t  var n = name.toLowerCase();\n\t  if (typeof names$$1[n] !== 'undefined' && projStore[names$$1[n]]) {\n\t    return projStore[names$$1[n]];\n\t  }\n\t}\n\n\tfunction start() {\n\t  projs.forEach(add);\n\t}\n\tvar projections = {\n\t  start: start,\n\t  add: add,\n\t  get: get\n\t};\n\n\tvar exports$2 = {};\n\texports$2.MERIT = {\n\t  a: 6378137.0,\n\t  rf: 298.257,\n\t  ellipseName: \"MERIT 1983\"\n\t};\n\n\texports$2.SGS85 = {\n\t  a: 6378136.0,\n\t  rf: 298.257,\n\t  ellipseName: \"Soviet Geodetic System 85\"\n\t};\n\n\texports$2.GRS80 = {\n\t  a: 6378137.0,\n\t  rf: 298.257222101,\n\t  ellipseName: \"GRS 1980(IUGG, 1980)\"\n\t};\n\n\texports$2.IAU76 = {\n\t  a: 6378140.0,\n\t  rf: 298.257,\n\t  ellipseName: \"IAU 1976\"\n\t};\n\n\texports$2.airy = {\n\t  a: 6377563.396,\n\t  b: 6356256.910,\n\t  ellipseName: \"Airy 1830\"\n\t};\n\n\texports$2.APL4 = {\n\t  a: 6378137,\n\t  rf: 298.25,\n\t  ellipseName: \"Appl. Physics. 1965\"\n\t};\n\n\texports$2.NWL9D = {\n\t  a: 6378145.0,\n\t  rf: 298.25,\n\t  ellipseName: \"Naval Weapons Lab., 1965\"\n\t};\n\n\texports$2.mod_airy = {\n\t  a: 6377340.189,\n\t  b: 6356034.446,\n\t  ellipseName: \"Modified Airy\"\n\t};\n\n\texports$2.andrae = {\n\t  a: 6377104.43,\n\t  rf: 300.0,\n\t  ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n\t};\n\n\texports$2.aust_SA = {\n\t  a: 6378160.0,\n\t  rf: 298.25,\n\t  ellipseName: \"Australian Natl & S. Amer. 1969\"\n\t};\n\n\texports$2.GRS67 = {\n\t  a: 6378160.0,\n\t  rf: 298.2471674270,\n\t  ellipseName: \"GRS 67(IUGG 1967)\"\n\t};\n\n\texports$2.bessel = {\n\t  a: 6377397.155,\n\t  rf: 299.1528128,\n\t  ellipseName: \"Bessel 1841\"\n\t};\n\n\texports$2.bess_nam = {\n\t  a: 6377483.865,\n\t  rf: 299.1528128,\n\t  ellipseName: \"Bessel 1841 (Namibia)\"\n\t};\n\n\texports$2.clrk66 = {\n\t  a: 6378206.4,\n\t  b: 6356583.8,\n\t  ellipseName: \"Clarke 1866\"\n\t};\n\n\texports$2.clrk80 = {\n\t  a: 6378249.145,\n\t  rf: 293.4663,\n\t  ellipseName: \"Clarke 1880 mod.\"\n\t};\n\n\texports$2.clrk58 = {\n\t  a: 6378293.645208759,\n\t  rf: 294.2606763692654,\n\t  ellipseName: \"Clarke 1858\"\n\t};\n\n\texports$2.CPM = {\n\t  a: 6375738.7,\n\t  rf: 334.29,\n\t  ellipseName: \"Comm. des Poids et Mesures 1799\"\n\t};\n\n\texports$2.delmbr = {\n\t  a: 6376428.0,\n\t  rf: 311.5,\n\t  ellipseName: \"Delambre 1810 (Belgium)\"\n\t};\n\n\texports$2.engelis = {\n\t  a: 6378136.05,\n\t  rf: 298.2566,\n\t  ellipseName: \"Engelis 1985\"\n\t};\n\n\texports$2.evrst30 = {\n\t  a: 6377276.345,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1830\"\n\t};\n\n\texports$2.evrst48 = {\n\t  a: 6377304.063,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1948\"\n\t};\n\n\texports$2.evrst56 = {\n\t  a: 6377301.243,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1956\"\n\t};\n\n\texports$2.evrst69 = {\n\t  a: 6377295.664,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1969\"\n\t};\n\n\texports$2.evrstSS = {\n\t  a: 6377298.556,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest (Sabah & Sarawak)\"\n\t};\n\n\texports$2.fschr60 = {\n\t  a: 6378166.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer (Mercury Datum) 1960\"\n\t};\n\n\texports$2.fschr60m = {\n\t  a: 6378155.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer 1960\"\n\t};\n\n\texports$2.fschr68 = {\n\t  a: 6378150.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer 1968\"\n\t};\n\n\texports$2.helmert = {\n\t  a: 6378200.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Helmert 1906\"\n\t};\n\n\texports$2.hough = {\n\t  a: 6378270.0,\n\t  rf: 297.0,\n\t  ellipseName: \"Hough\"\n\t};\n\n\texports$2.intl = {\n\t  a: 6378388.0,\n\t  rf: 297.0,\n\t  ellipseName: \"International 1909 (Hayford)\"\n\t};\n\n\texports$2.kaula = {\n\t  a: 6378163.0,\n\t  rf: 298.24,\n\t  ellipseName: \"Kaula 1961\"\n\t};\n\n\texports$2.lerch = {\n\t  a: 6378139.0,\n\t  rf: 298.257,\n\t  ellipseName: \"Lerch 1979\"\n\t};\n\n\texports$2.mprts = {\n\t  a: 6397300.0,\n\t  rf: 191.0,\n\t  ellipseName: \"Maupertius 1738\"\n\t};\n\n\texports$2.new_intl = {\n\t  a: 6378157.5,\n\t  b: 6356772.2,\n\t  ellipseName: \"New International 1967\"\n\t};\n\n\texports$2.plessis = {\n\t  a: 6376523.0,\n\t  rf: 6355863.0,\n\t  ellipseName: \"Plessis 1817 (France)\"\n\t};\n\n\texports$2.krass = {\n\t  a: 6378245.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Krassovsky, 1942\"\n\t};\n\n\texports$2.SEasia = {\n\t  a: 6378155.0,\n\t  b: 6356773.3205,\n\t  ellipseName: \"Southeast Asia\"\n\t};\n\n\texports$2.walbeck = {\n\t  a: 6376896.0,\n\t  b: 6355834.8467,\n\t  ellipseName: \"Walbeck\"\n\t};\n\n\texports$2.WGS60 = {\n\t  a: 6378165.0,\n\t  rf: 298.3,\n\t  ellipseName: \"WGS 60\"\n\t};\n\n\texports$2.WGS66 = {\n\t  a: 6378145.0,\n\t  rf: 298.25,\n\t  ellipseName: \"WGS 66\"\n\t};\n\n\texports$2.WGS7 = {\n\t  a: 6378135.0,\n\t  rf: 298.26,\n\t  ellipseName: \"WGS 72\"\n\t};\n\n\tvar WGS84 = exports$2.WGS84 = {\n\t  a: 6378137.0,\n\t  rf: 298.257223563,\n\t  ellipseName: \"WGS 84\"\n\t};\n\n\texports$2.sphere = {\n\t  a: 6370997.0,\n\t  b: 6370997.0,\n\t  ellipseName: \"Normal Sphere (r=6370997)\"\n\t};\n\n\tfunction eccentricity(a, b, rf, R_A) {\n\t  var a2 = a * a; // used in geocentric\n\t  var b2 = b * b; // used in geocentric\n\t  var es = (a2 - b2) / a2; // e ^ 2\n\t  var e = 0;\n\t  if (R_A) {\n\t    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n\t    a2 = a * a;\n\t    es = 0;\n\t  } else {\n\t    e = Math.sqrt(es); // eccentricity\n\t  }\n\t  var ep2 = (a2 - b2) / b2; // used in geocentric\n\t  return {\n\t    es: es,\n\t    e: e,\n\t    ep2: ep2\n\t  };\n\t}\n\tfunction sphere(a, b, rf, ellps, sphere) {\n\t  if (!a) { // do we have an ellipsoid?\n\t    var ellipse = match(exports$2, ellps);\n\t    if (!ellipse) {\n\t      ellipse = WGS84;\n\t    }\n\t    a = ellipse.a;\n\t    b = ellipse.b;\n\t    rf = ellipse.rf;\n\t  }\n\n\t  if (rf && !b) {\n\t    b = (1.0 - 1.0 / rf) * a;\n\t  }\n\t  if (rf === 0 || Math.abs(a - b) < EPSLN) {\n\t    sphere = true;\n\t    b = a;\n\t  }\n\t  return {\n\t    a: a,\n\t    b: b,\n\t    rf: rf,\n\t    sphere: sphere\n\t  };\n\t}\n\n\tvar exports$3 = {};\n\texports$3.wgs84 = {\n\t  towgs84: \"0,0,0\",\n\t  ellipse: \"WGS84\",\n\t  datumName: \"WGS84\"\n\t};\n\n\texports$3.ch1903 = {\n\t  towgs84: \"674.374,15.056,405.346\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"swiss\"\n\t};\n\n\texports$3.ggrs87 = {\n\t  towgs84: \"-199.87,74.79,246.62\",\n\t  ellipse: \"GRS80\",\n\t  datumName: \"Greek_Geodetic_Reference_System_1987\"\n\t};\n\n\texports$3.nad83 = {\n\t  towgs84: \"0,0,0\",\n\t  ellipse: \"GRS80\",\n\t  datumName: \"North_American_Datum_1983\"\n\t};\n\n\texports$3.nad27 = {\n\t  nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n\t  ellipse: \"clrk66\",\n\t  datumName: \"North_American_Datum_1927\"\n\t};\n\n\texports$3.potsdam = {\n\t  towgs84: \"606.0,23.0,413.0\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"Potsdam Rauenberg 1950 DHDN\"\n\t};\n\n\texports$3.carthage = {\n\t  towgs84: \"-263.0,6.0,431.0\",\n\t  ellipse: \"clark80\",\n\t  datumName: \"Carthage 1934 Tunisia\"\n\t};\n\n\texports$3.hermannskogel = {\n\t  towgs84: \"653.0,-212.0,449.0\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"Hermannskogel\"\n\t};\n\n\texports$3.ire65 = {\n\t  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n\t  ellipse: \"mod_airy\",\n\t  datumName: \"Ireland 1965\"\n\t};\n\n\texports$3.rassadiran = {\n\t  towgs84: \"-133.63,-157.5,-158.62\",\n\t  ellipse: \"intl\",\n\t  datumName: \"Rassadiran\"\n\t};\n\n\texports$3.nzgd49 = {\n\t  towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n\t  ellipse: \"intl\",\n\t  datumName: \"New Zealand Geodetic Datum 1949\"\n\t};\n\n\texports$3.osgb36 = {\n\t  towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n\t  ellipse: \"airy\",\n\t  datumName: \"Airy 1830\"\n\t};\n\n\texports$3.s_jtsk = {\n\t  towgs84: \"589,76,480\",\n\t  ellipse: 'bessel',\n\t  datumName: 'S-JTSK (Ferro)'\n\t};\n\n\texports$3.beduaram = {\n\t  towgs84: '-106,-87,188',\n\t  ellipse: 'clrk80',\n\t  datumName: 'Beduaram'\n\t};\n\n\texports$3.gunung_segara = {\n\t  towgs84: '-403,684,41',\n\t  ellipse: 'bessel',\n\t  datumName: 'Gunung Segara Jakarta'\n\t};\n\n\texports$3.rnb72 = {\n\t  towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n\t  ellipse: \"intl\",\n\t  datumName: \"Reseau National Belge 1972\"\n\t};\n\n\tfunction datum(datumCode, datum_params, a, b, es, ep2) {\n\t  var out = {};\n\n\t  if (datumCode === undefined || datumCode === 'none') {\n\t    out.datum_type = PJD_NODATUM;\n\t  } else {\n\t    out.datum_type = PJD_WGS84;\n\t  }\n\n\t  if (datum_params) {\n\t    out.datum_params = datum_params.map(parseFloat);\n\t    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n\t      out.datum_type = PJD_3PARAM;\n\t    }\n\t    if (out.datum_params.length > 3) {\n\t      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n\t        out.datum_type = PJD_7PARAM;\n\t        out.datum_params[3] *= SEC_TO_RAD;\n\t        out.datum_params[4] *= SEC_TO_RAD;\n\t        out.datum_params[5] *= SEC_TO_RAD;\n\t        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n\t      }\n\t    }\n\t  }\n\n\t  out.a = a; //datum object also uses these values\n\t  out.b = b;\n\t  out.es = es;\n\t  out.ep2 = ep2;\n\t  return out;\n\t}\n\n\tfunction Projection$1(srsCode,callback) {\n\t  if (!(this instanceof Projection$1)) {\n\t    return new Projection$1(srsCode);\n\t  }\n\t  callback = callback || function(error){\n\t    if(error){\n\t      throw error;\n\t    }\n\t  };\n\t  var json = parse(srsCode);\n\t  if(typeof json !== 'object'){\n\t    callback(srsCode);\n\t    return;\n\t  }\n\t  var ourProj = Projection$1.projections.get(json.projName);\n\t  if(!ourProj){\n\t    callback(srsCode);\n\t    return;\n\t  }\n\t  if (json.datumCode && json.datumCode !== 'none') {\n\t    var datumDef = match(exports$3, json.datumCode);\n\t    if (datumDef) {\n\t      json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n\t      json.ellps = datumDef.ellipse;\n\t      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n\t    }\n\t  }\n\t  json.k0 = json.k0 || 1.0;\n\t  json.axis = json.axis || 'enu';\n\t  json.ellps = json.ellps || 'wgs84';\n\t  var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n\t  var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n\t  var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);\n\n\t  extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n\t  extend(this, ourProj); // transfer all the methods from the projection\n\n\t  // copy the 4 things over we calulated in deriveConstants.sphere\n\t  this.a = sphere_.a;\n\t  this.b = sphere_.b;\n\t  this.rf = sphere_.rf;\n\t  this.sphere = sphere_.sphere;\n\n\t  // copy the 3 things we calculated in deriveConstants.eccentricity\n\t  this.es = ecc.es;\n\t  this.e = ecc.e;\n\t  this.ep2 = ecc.ep2;\n\n\t  // add in the datum object\n\t  this.datum = datumObj;\n\n\t  // init the projection\n\t  this.init();\n\n\t  // legecy callback from back in the day when it went to spatialreference.org\n\t  callback(null, this);\n\n\t}\n\tProjection$1.projections = projections;\n\tProjection$1.projections.start();\n\n\tfunction compareDatums(source, dest) {\n\t  if (source.datum_type !== dest.datum_type) {\n\t    return false; // false, datums are not equal\n\t  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n\t    // the tolerance for es is to ensure that GRS80 and WGS84\n\t    // are considered identical\n\t    return false;\n\t  } else if (source.datum_type === PJD_3PARAM) {\n\t    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n\t  } else if (source.datum_type === PJD_7PARAM) {\n\t    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n\t  } else {\n\t    return true; // datums are equal\n\t  }\n\t} // cs_compare_datums()\n\n\t/*\n\t * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n\t * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n\t * according to the current ellipsoid parameters.\n\t *\n\t *    Latitude  : Geodetic latitude in radians                     (input)\n\t *    Longitude : Geodetic longitude in radians                    (input)\n\t *    Height    : Geodetic height, in meters                       (input)\n\t *    X         : Calculated Geocentric X coordinate, in meters    (output)\n\t *    Y         : Calculated Geocentric Y coordinate, in meters    (output)\n\t *    Z         : Calculated Geocentric Z coordinate, in meters    (output)\n\t *\n\t */\n\tfunction geodeticToGeocentric(p, es, a) {\n\t  var Longitude = p.x;\n\t  var Latitude = p.y;\n\t  var Height = p.z ? p.z : 0; //Z value not always supplied\n\n\t  var Rn; /*  Earth radius at location  */\n\t  var Sin_Lat; /*  Math.sin(Latitude)  */\n\t  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */\n\t  var Cos_Lat; /*  Math.cos(Latitude)  */\n\n\t  /*\n\t   ** Don't blow up if Latitude is just a little out of the value\n\t   ** range as it may just be a rounding issue.  Also removed longitude\n\t   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.\n\t   */\n\t  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n\t    Latitude = -HALF_PI;\n\t  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n\t    Latitude = HALF_PI;\n\t  } else if ((Latitude < -HALF_PI) || (Latitude > HALF_PI)) {\n\t    /* Latitude out of range */\n\t    //..reportError('geocent:lat out of range:' + Latitude);\n\t    return null;\n\t  }\n\n\t  if (Longitude > Math.PI) {\n\t    Longitude -= (2 * Math.PI);\n\t  }\n\t  Sin_Lat = Math.sin(Latitude);\n\t  Cos_Lat = Math.cos(Latitude);\n\t  Sin2_Lat = Sin_Lat * Sin_Lat;\n\t  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n\t  return {\n\t    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n\t    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n\t    z: ((Rn * (1 - es)) + Height) * Sin_Lat\n\t  };\n\t} // cs_geodetic_to_geocentric()\n\n\tfunction geocentricToGeodetic(p, es, a, b) {\n\t  /* local defintions and variables */\n\t  /* end-criterium of loop, accuracy of sin(Latitude) */\n\t  var genau = 1e-12;\n\t  var genau2 = (genau * genau);\n\t  var maxiter = 30;\n\n\t  var P; /* distance between semi-minor axis and location */\n\t  var RR; /* distance between center and location */\n\t  var CT; /* sin of geocentric latitude */\n\t  var ST; /* cos of geocentric latitude */\n\t  var RX;\n\t  var RK;\n\t  var RN; /* Earth radius at location */\n\t  var CPHI0; /* cos of start or old geodetic latitude in iterations */\n\t  var SPHI0; /* sin of start or old geodetic latitude in iterations */\n\t  var CPHI; /* cos of searched geodetic latitude */\n\t  var SPHI; /* sin of searched geodetic latitude */\n\t  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n\t  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n\t  var X = p.x;\n\t  var Y = p.y;\n\t  var Z = p.z ? p.z : 0.0; //Z value not always supplied\n\t  var Longitude;\n\t  var Latitude;\n\t  var Height;\n\n\t  P = Math.sqrt(X * X + Y * Y);\n\t  RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n\t  /*      special cases for latitude and longitude */\n\t  if (P / a < genau) {\n\n\t    /*  special case, if P=0. (X=0., Y=0.) */\n\t    Longitude = 0.0;\n\n\t    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n\t     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */\n\t    if (RR / a < genau) {\n\t      Latitude = HALF_PI;\n\t      Height = -b;\n\t      return {\n\t        x: p.x,\n\t        y: p.y,\n\t        z: p.z\n\t      };\n\t    }\n\t  } else {\n\t    /*  ellipsoidal (geodetic) longitude\n\t     *  interval: -PI < Longitude <= +PI */\n\t    Longitude = Math.atan2(Y, X);\n\t  }\n\n\t  /* --------------------------------------------------------------\n\t   * Following iterative algorithm was developped by\n\t   * \"Institut for Erdmessung\", University of Hannover, July 1988.\n\t   * Internet: www.ife.uni-hannover.de\n\t   * Iterative computation of CPHI,SPHI and Height.\n\t   * Iteration of CPHI and SPHI to 10**-12 radian resp.\n\t   * 2*10**-7 arcsec.\n\t   * --------------------------------------------------------------\n\t   */\n\t  CT = Z / RR;\n\t  ST = P / RR;\n\t  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n\t  CPHI0 = ST * (1.0 - es) * RX;\n\t  SPHI0 = CT * RX;\n\t  iter = 0;\n\n\t  /* loop to find sin(Latitude) resp. Latitude\n\t   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n\t  do {\n\t    iter++;\n\t    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n\t    /*  ellipsoidal (geodetic) height */\n\t    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n\t    RK = es * RN / (RN + Height);\n\t    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n\t    CPHI = ST * (1.0 - RK) * RX;\n\t    SPHI = CT * RX;\n\t    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n\t    CPHI0 = CPHI;\n\t    SPHI0 = SPHI;\n\t  }\n\t  while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n\t  /*      ellipsoidal (geodetic) latitude */\n\t  Latitude = Math.atan(SPHI / Math.abs(CPHI));\n\t  return {\n\t    x: Longitude,\n\t    y: Latitude,\n\t    z: Height\n\t  };\n\t} // cs_geocentric_to_geodetic()\n\n\t/****************************************************************/\n\t// pj_geocentic_to_wgs84( p )\n\t//  p = point to transform in geocentric coordinates (x,y,z)\n\n\n\t/** point object, nothing fancy, just allows values to be\n\t    passed back and forth by reference rather than by value.\n\t    Other point classes may be used as long as they have\n\t    x and y properties, which will get modified in the transform method.\n\t*/\n\tfunction geocentricToWgs84(p, datum_type, datum_params) {\n\n\t  if (datum_type === PJD_3PARAM) {\n\t    // if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: p.x + datum_params[0],\n\t      y: p.y + datum_params[1],\n\t      z: p.z + datum_params[2],\n\t    };\n\t  } else if (datum_type === PJD_7PARAM) {\n\t    var Dx_BF = datum_params[0];\n\t    var Dy_BF = datum_params[1];\n\t    var Dz_BF = datum_params[2];\n\t    var Rx_BF = datum_params[3];\n\t    var Ry_BF = datum_params[4];\n\t    var Rz_BF = datum_params[5];\n\t    var M_BF = datum_params[6];\n\t    // if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n\t      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n\t      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n\t    };\n\t  }\n\t} // cs_geocentric_to_wgs84\n\n\t/****************************************************************/\n\t// pj_geocentic_from_wgs84()\n\t//  coordinate system definition,\n\t//  point to transform in geocentric coordinates (x,y,z)\n\tfunction geocentricFromWgs84(p, datum_type, datum_params) {\n\n\t  if (datum_type === PJD_3PARAM) {\n\t    //if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: p.x - datum_params[0],\n\t      y: p.y - datum_params[1],\n\t      z: p.z - datum_params[2],\n\t    };\n\n\t  } else if (datum_type === PJD_7PARAM) {\n\t    var Dx_BF = datum_params[0];\n\t    var Dy_BF = datum_params[1];\n\t    var Dz_BF = datum_params[2];\n\t    var Rx_BF = datum_params[3];\n\t    var Ry_BF = datum_params[4];\n\t    var Rz_BF = datum_params[5];\n\t    var M_BF = datum_params[6];\n\t    var x_tmp = (p.x - Dx_BF) / M_BF;\n\t    var y_tmp = (p.y - Dy_BF) / M_BF;\n\t    var z_tmp = (p.z - Dz_BF) / M_BF;\n\t    //if( x[io] === HUGE_VAL )\n\t    //    continue;\n\n\t    return {\n\t      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n\t      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n\t      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n\t    };\n\t  } //cs_geocentric_from_wgs84()\n\t}\n\n\tfunction checkParams(type) {\n\t  return (type === PJD_3PARAM || type === PJD_7PARAM);\n\t}\n\n\tvar datum_transform = function(source, dest, point) {\n\t  // Short cut if the datums are identical.\n\t  if (compareDatums(source, dest)) {\n\t    return point; // in this case, zero is sucess,\n\t    // whereas cs_compare_datums returns 1 to indicate TRUE\n\t    // confusing, should fix this\n\t  }\n\n\t  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n\t  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n\t    return point;\n\t  }\n\n\t  // If this datum requires grid shifts, then apply it to geodetic coordinates.\n\n\t  // Do we need to go through geocentric coordinates?\n\t  if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {\n\t    return point;\n\t  }\n\n\t  // Convert to geocentric coordinates.\n\t  point = geodeticToGeocentric(point, source.es, source.a);\n\t  // Convert between datums\n\t  if (checkParams(source.datum_type)) {\n\t    point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n\t  }\n\t  if (checkParams(dest.datum_type)) {\n\t    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n\t  }\n\t  return geocentricToGeodetic(point, dest.es, dest.a, dest.b);\n\n\t};\n\n\tvar adjust_axis = function(crs, denorm, point) {\n\t  var xin = point.x,\n\t    yin = point.y,\n\t    zin = point.z || 0.0;\n\t  var v, t, i;\n\t  var out = {};\n\t  for (i = 0; i < 3; i++) {\n\t    if (denorm && i === 2 && point.z === undefined) {\n\t      continue;\n\t    }\n\t    if (i === 0) {\n\t      v = xin;\n\t      t = 'x';\n\t    }\n\t    else if (i === 1) {\n\t      v = yin;\n\t      t = 'y';\n\t    }\n\t    else {\n\t      v = zin;\n\t      t = 'z';\n\t    }\n\t    switch (crs.axis[i]) {\n\t    case 'e':\n\t      out[t] = v;\n\t      break;\n\t    case 'w':\n\t      out[t] = -v;\n\t      break;\n\t    case 'n':\n\t      out[t] = v;\n\t      break;\n\t    case 's':\n\t      out[t] = -v;\n\t      break;\n\t    case 'u':\n\t      if (point[t] !== undefined) {\n\t        out.z = v;\n\t      }\n\t      break;\n\t    case 'd':\n\t      if (point[t] !== undefined) {\n\t        out.z = -v;\n\t      }\n\t      break;\n\t    default:\n\t      //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n\t      return null;\n\t    }\n\t  }\n\t  return out;\n\t};\n\n\tvar toPoint = function (array){\n\t  var out = {\n\t    x: array[0],\n\t    y: array[1]\n\t  };\n\t  if (array.length>2) {\n\t    out.z = array[2];\n\t  }\n\t  if (array.length>3) {\n\t    out.m = array[3];\n\t  }\n\t  return out;\n\t};\n\n\tfunction checkNotWGS(source, dest) {\n\t  return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n\t}\n\n\tfunction transform(source, dest, point) {\n\t  var wgs84;\n\t  if (Array.isArray(point)) {\n\t    point = toPoint(point);\n\t  }\n\n\t  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n\t  if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n\t    wgs84 = new Projection$1('WGS84');\n\t    point = transform(source, wgs84, point);\n\t    source = wgs84;\n\t  }\n\t  // DGR, 2010/11/12\n\t  if (source.axis !== 'enu') {\n\t    point = adjust_axis(source, false, point);\n\t  }\n\t  // Transform source points to long/lat, if they aren't already.\n\t  if (source.projName === 'longlat') {\n\t    point = {\n\t      x: point.x * D2R,\n\t      y: point.y * D2R\n\t    };\n\t  }\n\t  else {\n\t    if (source.to_meter) {\n\t      point = {\n\t        x: point.x * source.to_meter,\n\t        y: point.y * source.to_meter\n\t      };\n\t    }\n\t    point = source.inverse(point); // Convert Cartesian to longlat\n\t  }\n\t  // Adjust for the prime meridian if necessary\n\t  if (source.from_greenwich) {\n\t    point.x += source.from_greenwich;\n\t  }\n\n\t  // Convert datums if needed, and if possible.\n\t  point = datum_transform(source.datum, dest.datum, point);\n\n\t  // Adjust for the prime meridian if necessary\n\t  if (dest.from_greenwich) {\n\t    point = {\n\t      x: point.x - dest.from_greenwich,\n\t      y: point.y\n\t    };\n\t  }\n\n\t  if (dest.projName === 'longlat') {\n\t    // convert radians to decimal degrees\n\t    point = {\n\t      x: point.x * R2D,\n\t      y: point.y * R2D\n\t    };\n\t  } else { // else project\n\t    point = dest.forward(point);\n\t    if (dest.to_meter) {\n\t      point = {\n\t        x: point.x / dest.to_meter,\n\t        y: point.y / dest.to_meter\n\t      };\n\t    }\n\t  }\n\n\t  // DGR, 2010/11/12\n\t  if (dest.axis !== 'enu') {\n\t    return adjust_axis(dest, true, point);\n\t  }\n\n\t  return point;\n\t}\n\n\tvar wgs84 = Projection$1('WGS84');\n\n\tfunction transformer(from, to, coords) {\n\t  var transformedArray;\n\t  if (Array.isArray(coords)) {\n\t    transformedArray = transform(from, to, coords);\n\t    if (coords.length === 3) {\n\t      return [transformedArray.x, transformedArray.y, transformedArray.z];\n\t    }\n\t    else {\n\t      return [transformedArray.x, transformedArray.y];\n\t    }\n\t  }\n\t  else {\n\t    return transform(from, to, coords);\n\t  }\n\t}\n\n\tfunction checkProj(item) {\n\t  if (item instanceof Projection$1) {\n\t    return item;\n\t  }\n\t  if (item.oProj) {\n\t    return item.oProj;\n\t  }\n\t  return Projection$1(item);\n\t}\n\tfunction proj4$1(fromProj, toProj, coord) {\n\t  fromProj = checkProj(fromProj);\n\t  var single = false;\n\t  var obj;\n\t  if (typeof toProj === 'undefined') {\n\t    toProj = fromProj;\n\t    fromProj = wgs84;\n\t    single = true;\n\t  }\n\t  else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n\t    coord = toProj;\n\t    toProj = fromProj;\n\t    fromProj = wgs84;\n\t    single = true;\n\t  }\n\t  toProj = checkProj(toProj);\n\t  if (coord) {\n\t    return transformer(fromProj, toProj, coord);\n\t  }\n\t  else {\n\t    obj = {\n\t      forward: function(coords) {\n\t        return transformer(fromProj, toProj, coords);\n\t      },\n\t      inverse: function(coords) {\n\t        return transformer(toProj, fromProj, coords);\n\t      }\n\t    };\n\t    if (single) {\n\t      obj.oProj = toProj;\n\t    }\n\t    return obj;\n\t  }\n\t}\n\n\t/**\n\t * UTM zones are grouped, and assigned to one of a group of 6\n\t * sets.\n\t *\n\t * {int} @private\n\t */\n\tvar NUM_100K_SETS = 6;\n\n\t/**\n\t * The column letters (for easting) of the lower left value, per\n\t * set.\n\t *\n\t * {string} @private\n\t */\n\tvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n\t/**\n\t * The row letters (for northing) of the lower left value, per\n\t * set.\n\t *\n\t * {string} @private\n\t */\n\tvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\n\tvar A = 65; // A\n\tvar I = 73; // I\n\tvar O = 79; // O\n\tvar V = 86; // V\n\tvar Z = 90; // Z\n\tvar mgrs = {\n\t  forward: forward$1,\n\t  inverse: inverse$1,\n\t  toPoint: toPoint$1\n\t};\n\t/**\n\t * Conversion of lat/lon to MGRS.\n\t *\n\t * @param {object} ll Object literal with lat and lon properties on a\n\t *     WGS84 ellipsoid.\n\t * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n\t *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n\t * @return {string} the MGRS string for the given location and accuracy.\n\t */\n\tfunction forward$1(ll, accuracy) {\n\t  accuracy = accuracy || 5; // default accuracy 1m\n\t  return encode(LLtoUTM({\n\t    lat: ll[1],\n\t    lon: ll[0]\n\t  }), accuracy);\n\t}\n\n\t/**\n\t * Conversion of MGRS to lat/lon.\n\t *\n\t * @param {string} mgrs MGRS string.\n\t * @return {array} An array with left (longitude), bottom (latitude), right\n\t *     (longitude) and top (latitude) values in WGS84, representing the\n\t *     bounding box for the provided MGRS reference.\n\t */\n\tfunction inverse$1(mgrs) {\n\t  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n\t  if (bbox.lat && bbox.lon) {\n\t    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n\t  }\n\t  return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n\t}\n\n\tfunction toPoint$1(mgrs) {\n\t  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n\t  if (bbox.lat && bbox.lon) {\n\t    return [bbox.lon, bbox.lat];\n\t  }\n\t  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n\t}\n\t/**\n\t * Conversion from degrees to radians.\n\t *\n\t * @private\n\t * @param {number} deg the angle in degrees.\n\t * @return {number} the angle in radians.\n\t */\n\tfunction degToRad(deg) {\n\t  return (deg * (Math.PI / 180.0));\n\t}\n\n\t/**\n\t * Conversion from radians to degrees.\n\t *\n\t * @private\n\t * @param {number} rad the angle in radians.\n\t * @return {number} the angle in degrees.\n\t */\n\tfunction radToDeg(rad) {\n\t  return (180.0 * (rad / Math.PI));\n\t}\n\n\t/**\n\t * Converts a set of Longitude and Latitude co-ordinates to UTM\n\t * using the WGS84 ellipsoid.\n\t *\n\t * @private\n\t * @param {object} ll Object literal with lat and lon properties\n\t *     representing the WGS84 coordinate to be converted.\n\t * @return {object} Object literal containing the UTM value with easting,\n\t *     northing, zoneNumber and zoneLetter properties, and an optional\n\t *     accuracy property in digits. Returns null if the conversion failed.\n\t */\n\tfunction LLtoUTM(ll) {\n\t  var Lat = ll.lat;\n\t  var Long = ll.lon;\n\t  var a = 6378137.0; //ellip.radius;\n\t  var eccSquared = 0.00669438; //ellip.eccsq;\n\t  var k0 = 0.9996;\n\t  var LongOrigin;\n\t  var eccPrimeSquared;\n\t  var N, T, C, A, M;\n\t  var LatRad = degToRad(Lat);\n\t  var LongRad = degToRad(Long);\n\t  var LongOriginRad;\n\t  var ZoneNumber;\n\t  // (int)\n\t  ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n\t  //Make sure the longitude 180.00 is in Zone 60\n\t  if (Long === 180) {\n\t    ZoneNumber = 60;\n\t  }\n\n\t  // Special zone for Norway\n\t  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n\t    ZoneNumber = 32;\n\t  }\n\n\t  // Special zones for Svalbard\n\t  if (Lat >= 72.0 && Lat < 84.0) {\n\t    if (Long >= 0.0 && Long < 9.0) {\n\t      ZoneNumber = 31;\n\t    }\n\t    else if (Long >= 9.0 && Long < 21.0) {\n\t      ZoneNumber = 33;\n\t    }\n\t    else if (Long >= 21.0 && Long < 33.0) {\n\t      ZoneNumber = 35;\n\t    }\n\t    else if (Long >= 33.0 && Long < 42.0) {\n\t      ZoneNumber = 37;\n\t    }\n\t  }\n\n\t  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n\t  // in middle of\n\t  // zone\n\t  LongOriginRad = degToRad(LongOrigin);\n\n\t  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n\t  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n\t  T = Math.tan(LatRad) * Math.tan(LatRad);\n\t  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n\t  A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n\t  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n\t  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n\t  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n\t  if (Lat < 0.0) {\n\t    UTMNorthing += 10000000.0; //10000000 meter offset for\n\t    // southern hemisphere\n\t  }\n\n\t  return {\n\t    northing: Math.round(UTMNorthing),\n\t    easting: Math.round(UTMEasting),\n\t    zoneNumber: ZoneNumber,\n\t    zoneLetter: getLetterDesignator(Lat)\n\t  };\n\t}\n\n\t/**\n\t * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n\t * class where the Zone can be specified as a single string eg.\"60N\" which\n\t * is then broken down into the ZoneNumber and ZoneLetter.\n\t *\n\t * @private\n\t * @param {object} utm An object literal with northing, easting, zoneNumber\n\t *     and zoneLetter properties. If an optional accuracy property is\n\t *     provided (in meters), a bounding box will be returned instead of\n\t *     latitude and longitude.\n\t * @return {object} An object literal containing either lat and lon values\n\t *     (if no accuracy was provided), or top, right, bottom and left values\n\t *     for the bounding box calculated according to the provided accuracy.\n\t *     Returns null if the conversion failed.\n\t */\n\tfunction UTMtoLL(utm) {\n\n\t  var UTMNorthing = utm.northing;\n\t  var UTMEasting = utm.easting;\n\t  var zoneLetter = utm.zoneLetter;\n\t  var zoneNumber = utm.zoneNumber;\n\t  // check the ZoneNummber is valid\n\t  if (zoneNumber < 0 || zoneNumber > 60) {\n\t    return null;\n\t  }\n\n\t  var k0 = 0.9996;\n\t  var a = 6378137.0; //ellip.radius;\n\t  var eccSquared = 0.00669438; //ellip.eccsq;\n\t  var eccPrimeSquared;\n\t  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n\t  var N1, T1, C1, R1, D, M;\n\t  var LongOrigin;\n\t  var mu, phi1Rad;\n\n\t  // remove 500,000 meter offset for longitude\n\t  var x = UTMEasting - 500000.0;\n\t  var y = UTMNorthing;\n\n\t  // We must know somehow if we are in the Northern or Southern\n\t  // hemisphere, this is the only time we use the letter So even\n\t  // if the Zone letter isn't exactly correct it should indicate\n\t  // the hemisphere correctly\n\t  if (zoneLetter < 'N') {\n\t    y -= 10000000.0; // remove 10,000,000 meter offset used\n\t    // for southern hemisphere\n\t  }\n\n\t  // There are 60 zones with zone 1 being at West -180 to -174\n\t  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n\t  // in middle of\n\t  // zone\n\n\t  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n\t  M = y / k0;\n\t  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n\t  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n\t  // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n\t  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n\t  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n\t  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n\t  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n\t  D = x / (N1 * k0);\n\n\t  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n\t  lat = radToDeg(lat);\n\n\t  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n\t  lon = LongOrigin + radToDeg(lon);\n\n\t  var result;\n\t  if (utm.accuracy) {\n\t    var topRight = UTMtoLL({\n\t      northing: utm.northing + utm.accuracy,\n\t      easting: utm.easting + utm.accuracy,\n\t      zoneLetter: utm.zoneLetter,\n\t      zoneNumber: utm.zoneNumber\n\t    });\n\t    result = {\n\t      top: topRight.lat,\n\t      right: topRight.lon,\n\t      bottom: lat,\n\t      left: lon\n\t    };\n\t  }\n\t  else {\n\t    result = {\n\t      lat: lat,\n\t      lon: lon\n\t    };\n\t  }\n\t  return result;\n\t}\n\n\t/**\n\t * Calculates the MGRS letter designator for the given latitude.\n\t *\n\t * @private\n\t * @param {number} lat The latitude in WGS84 to get the letter designator\n\t *     for.\n\t * @return {char} The letter designator.\n\t */\n\tfunction getLetterDesignator(lat) {\n\t  //This is here as an error flag to show that the Latitude is\n\t  //outside MGRS limits\n\t  var LetterDesignator = 'Z';\n\n\t  if ((84 >= lat) && (lat >= 72)) {\n\t    LetterDesignator = 'X';\n\t  }\n\t  else if ((72 > lat) && (lat >= 64)) {\n\t    LetterDesignator = 'W';\n\t  }\n\t  else if ((64 > lat) && (lat >= 56)) {\n\t    LetterDesignator = 'V';\n\t  }\n\t  else if ((56 > lat) && (lat >= 48)) {\n\t    LetterDesignator = 'U';\n\t  }\n\t  else if ((48 > lat) && (lat >= 40)) {\n\t    LetterDesignator = 'T';\n\t  }\n\t  else if ((40 > lat) && (lat >= 32)) {\n\t    LetterDesignator = 'S';\n\t  }\n\t  else if ((32 > lat) && (lat >= 24)) {\n\t    LetterDesignator = 'R';\n\t  }\n\t  else if ((24 > lat) && (lat >= 16)) {\n\t    LetterDesignator = 'Q';\n\t  }\n\t  else if ((16 > lat) && (lat >= 8)) {\n\t    LetterDesignator = 'P';\n\t  }\n\t  else if ((8 > lat) && (lat >= 0)) {\n\t    LetterDesignator = 'N';\n\t  }\n\t  else if ((0 > lat) && (lat >= -8)) {\n\t    LetterDesignator = 'M';\n\t  }\n\t  else if ((-8 > lat) && (lat >= -16)) {\n\t    LetterDesignator = 'L';\n\t  }\n\t  else if ((-16 > lat) && (lat >= -24)) {\n\t    LetterDesignator = 'K';\n\t  }\n\t  else if ((-24 > lat) && (lat >= -32)) {\n\t    LetterDesignator = 'J';\n\t  }\n\t  else if ((-32 > lat) && (lat >= -40)) {\n\t    LetterDesignator = 'H';\n\t  }\n\t  else if ((-40 > lat) && (lat >= -48)) {\n\t    LetterDesignator = 'G';\n\t  }\n\t  else if ((-48 > lat) && (lat >= -56)) {\n\t    LetterDesignator = 'F';\n\t  }\n\t  else if ((-56 > lat) && (lat >= -64)) {\n\t    LetterDesignator = 'E';\n\t  }\n\t  else if ((-64 > lat) && (lat >= -72)) {\n\t    LetterDesignator = 'D';\n\t  }\n\t  else if ((-72 > lat) && (lat >= -80)) {\n\t    LetterDesignator = 'C';\n\t  }\n\t  return LetterDesignator;\n\t}\n\n\t/**\n\t * Encodes a UTM location as MGRS string.\n\t *\n\t * @private\n\t * @param {object} utm An object literal with easting, northing,\n\t *     zoneLetter, zoneNumber\n\t * @param {number} accuracy Accuracy in digits (1-5).\n\t * @return {string} MGRS string for the given UTM location.\n\t */\n\tfunction encode(utm, accuracy) {\n\t  // prepend with leading zeroes\n\t  var seasting = \"00000\" + utm.easting,\n\t    snorthing = \"00000\" + utm.northing;\n\n\t  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n\t}\n\n\t/**\n\t * Get the two letter 100k designator for a given UTM easting,\n\t * northing and zone number value.\n\t *\n\t * @private\n\t * @param {number} easting\n\t * @param {number} northing\n\t * @param {number} zoneNumber\n\t * @return the two letter 100k designator for the given UTM location.\n\t */\n\tfunction get100kID(easting, northing, zoneNumber) {\n\t  var setParm = get100kSetForZone(zoneNumber);\n\t  var setColumn = Math.floor(easting / 100000);\n\t  var setRow = Math.floor(northing / 100000) % 20;\n\t  return getLetter100kID(setColumn, setRow, setParm);\n\t}\n\n\t/**\n\t * Given a UTM zone number, figure out the MGRS 100K set it is in.\n\t *\n\t * @private\n\t * @param {number} i An UTM zone number.\n\t * @return {number} the 100k set the UTM zone is in.\n\t */\n\tfunction get100kSetForZone(i) {\n\t  var setParm = i % NUM_100K_SETS;\n\t  if (setParm === 0) {\n\t    setParm = NUM_100K_SETS;\n\t  }\n\n\t  return setParm;\n\t}\n\n\t/**\n\t * Get the two-letter MGRS 100k designator given information\n\t * translated from the UTM northing, easting and zone number.\n\t *\n\t * @private\n\t * @param {number} column the column index as it relates to the MGRS\n\t *        100k set spreadsheet, created from the UTM easting.\n\t *        Values are 1-8.\n\t * @param {number} row the row index as it relates to the MGRS 100k set\n\t *        spreadsheet, created from the UTM northing value. Values\n\t *        are from 0-19.\n\t * @param {number} parm the set block, as it relates to the MGRS 100k set\n\t *        spreadsheet, created from the UTM zone. Values are from\n\t *        1-60.\n\t * @return two letter MGRS 100k code.\n\t */\n\tfunction getLetter100kID(column, row, parm) {\n\t  // colOrigin and rowOrigin are the letters at the origin of the set\n\t  var index = parm - 1;\n\t  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n\t  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n\t  // colInt and rowInt are the letters to build to return\n\t  var colInt = colOrigin + column - 1;\n\t  var rowInt = rowOrigin + row;\n\t  var rollover = false;\n\n\t  if (colInt > Z) {\n\t    colInt = colInt - Z + A - 1;\n\t    rollover = true;\n\t  }\n\n\t  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n\t    colInt++;\n\t  }\n\n\t  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n\t    colInt++;\n\n\t    if (colInt === I) {\n\t      colInt++;\n\t    }\n\t  }\n\n\t  if (colInt > Z) {\n\t    colInt = colInt - Z + A - 1;\n\t  }\n\n\t  if (rowInt > V) {\n\t    rowInt = rowInt - V + A - 1;\n\t    rollover = true;\n\t  }\n\t  else {\n\t    rollover = false;\n\t  }\n\n\t  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n\t    rowInt++;\n\t  }\n\n\t  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n\t    rowInt++;\n\n\t    if (rowInt === I) {\n\t      rowInt++;\n\t    }\n\t  }\n\n\t  if (rowInt > V) {\n\t    rowInt = rowInt - V + A - 1;\n\t  }\n\n\t  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n\t  return twoLetter;\n\t}\n\n\t/**\n\t * Decode the UTM parameters from a MGRS string.\n\t *\n\t * @private\n\t * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n\t * @return {object} An object literal with easting, northing, zoneLetter,\n\t *     zoneNumber and accuracy (in meters) properties.\n\t */\n\tfunction decode(mgrsString) {\n\n\t  if (mgrsString && mgrsString.length === 0) {\n\t    throw (\"MGRSPoint coverting from nothing\");\n\t  }\n\n\t  var length = mgrsString.length;\n\n\t  var hunK = null;\n\t  var sb = \"\";\n\t  var testChar;\n\t  var i = 0;\n\n\t  // get Zone number\n\t  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n\t    if (i >= 2) {\n\t      throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n\t    }\n\t    sb += testChar;\n\t    i++;\n\t  }\n\n\t  var zoneNumber = parseInt(sb, 10);\n\n\t  if (i === 0 || i + 3 > length) {\n\t    // A good MGRS string has to be 4-5 digits long,\n\t    // ##AAA/#AAA at least.\n\t    throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n\t  }\n\n\t  var zoneLetter = mgrsString.charAt(i++);\n\n\t  // Should we check the zone letter here? Why not.\n\t  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n\t    throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n\t  }\n\n\t  hunK = mgrsString.substring(i, i += 2);\n\n\t  var set = get100kSetForZone(zoneNumber);\n\n\t  var east100k = getEastingFromChar(hunK.charAt(0), set);\n\t  var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n\t  // We have a bug where the northing may be 2000000 too low.\n\t  // How\n\t  // do we know when to roll over?\n\n\t  while (north100k < getMinNorthing(zoneLetter)) {\n\t    north100k += 2000000;\n\t  }\n\n\t  // calculate the char index for easting/northing separator\n\t  var remainder = length - i;\n\n\t  if (remainder % 2 !== 0) {\n\t    throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n\t  }\n\n\t  var sep = remainder / 2;\n\n\t  var sepEasting = 0.0;\n\t  var sepNorthing = 0.0;\n\t  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n\t  if (sep > 0) {\n\t    accuracyBonus = 100000.0 / Math.pow(10, sep);\n\t    sepEastingString = mgrsString.substring(i, i + sep);\n\t    sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n\t    sepNorthingString = mgrsString.substring(i + sep);\n\t    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n\t  }\n\n\t  easting = sepEasting + east100k;\n\t  northing = sepNorthing + north100k;\n\n\t  return {\n\t    easting: easting,\n\t    northing: northing,\n\t    zoneLetter: zoneLetter,\n\t    zoneNumber: zoneNumber,\n\t    accuracy: accuracyBonus\n\t  };\n\t}\n\n\t/**\n\t * Given the first letter from a two-letter MGRS 100k zone, and given the\n\t * MGRS table set for the zone number, figure out the easting value that\n\t * should be added to the other, secondary easting value.\n\t *\n\t * @private\n\t * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n\t * @param {number} set The MGRS table set for the zone number.\n\t * @return {number} The easting value for the given letter and set.\n\t */\n\tfunction getEastingFromChar(e, set) {\n\t  // colOrigin is the letter at the origin of the set for the\n\t  // column\n\t  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n\t  var eastingValue = 100000.0;\n\t  var rewindMarker = false;\n\n\t  while (curCol !== e.charCodeAt(0)) {\n\t    curCol++;\n\t    if (curCol === I) {\n\t      curCol++;\n\t    }\n\t    if (curCol === O) {\n\t      curCol++;\n\t    }\n\t    if (curCol > Z) {\n\t      if (rewindMarker) {\n\t        throw (\"Bad character: \" + e);\n\t      }\n\t      curCol = A;\n\t      rewindMarker = true;\n\t    }\n\t    eastingValue += 100000.0;\n\t  }\n\n\t  return eastingValue;\n\t}\n\n\t/**\n\t * Given the second letter from a two-letter MGRS 100k zone, and given the\n\t * MGRS table set for the zone number, figure out the northing value that\n\t * should be added to the other, secondary northing value. You have to\n\t * remember that Northings are determined from the equator, and the vertical\n\t * cycle of letters mean a 2000000 additional northing meters. This happens\n\t * approx. every 18 degrees of latitude. This method does *NOT* count any\n\t * additional northings. You have to figure out how many 2000000 meters need\n\t * to be added for the zone letter of the MGRS coordinate.\n\t *\n\t * @private\n\t * @param {char} n Second letter of the MGRS 100k zone\n\t * @param {number} set The MGRS table set number, which is dependent on the\n\t *     UTM zone number.\n\t * @return {number} The northing value for the given letter and set.\n\t */\n\tfunction getNorthingFromChar(n, set) {\n\n\t  if (n > 'V') {\n\t    throw (\"MGRSPoint given invalid Northing \" + n);\n\t  }\n\n\t  // rowOrigin is the letter at the origin of the set for the\n\t  // column\n\t  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n\t  var northingValue = 0.0;\n\t  var rewindMarker = false;\n\n\t  while (curRow !== n.charCodeAt(0)) {\n\t    curRow++;\n\t    if (curRow === I) {\n\t      curRow++;\n\t    }\n\t    if (curRow === O) {\n\t      curRow++;\n\t    }\n\t    // fixing a bug making whole application hang in this loop\n\t    // when 'n' is a wrong character\n\t    if (curRow > V) {\n\t      if (rewindMarker) { // making sure that this loop ends\n\t        throw (\"Bad character: \" + n);\n\t      }\n\t      curRow = A;\n\t      rewindMarker = true;\n\t    }\n\t    northingValue += 100000.0;\n\t  }\n\n\t  return northingValue;\n\t}\n\n\t/**\n\t * The function getMinNorthing returns the minimum northing value of a MGRS\n\t * zone.\n\t *\n\t * Ported from Geotrans' c Lattitude_Band_Value structure table.\n\t *\n\t * @private\n\t * @param {char} zoneLetter The MGRS zone to get the min northing for.\n\t * @return {number}\n\t */\n\tfunction getMinNorthing(zoneLetter) {\n\t  var northing;\n\t  switch (zoneLetter) {\n\t  case 'C':\n\t    northing = 1100000.0;\n\t    break;\n\t  case 'D':\n\t    northing = 2000000.0;\n\t    break;\n\t  case 'E':\n\t    northing = 2800000.0;\n\t    break;\n\t  case 'F':\n\t    northing = 3700000.0;\n\t    break;\n\t  case 'G':\n\t    northing = 4600000.0;\n\t    break;\n\t  case 'H':\n\t    northing = 5500000.0;\n\t    break;\n\t  case 'J':\n\t    northing = 6400000.0;\n\t    break;\n\t  case 'K':\n\t    northing = 7300000.0;\n\t    break;\n\t  case 'L':\n\t    northing = 8200000.0;\n\t    break;\n\t  case 'M':\n\t    northing = 9100000.0;\n\t    break;\n\t  case 'N':\n\t    northing = 0.0;\n\t    break;\n\t  case 'P':\n\t    northing = 800000.0;\n\t    break;\n\t  case 'Q':\n\t    northing = 1700000.0;\n\t    break;\n\t  case 'R':\n\t    northing = 2600000.0;\n\t    break;\n\t  case 'S':\n\t    northing = 3500000.0;\n\t    break;\n\t  case 'T':\n\t    northing = 4400000.0;\n\t    break;\n\t  case 'U':\n\t    northing = 5300000.0;\n\t    break;\n\t  case 'V':\n\t    northing = 6200000.0;\n\t    break;\n\t  case 'W':\n\t    northing = 7000000.0;\n\t    break;\n\t  case 'X':\n\t    northing = 7900000.0;\n\t    break;\n\t  default:\n\t    northing = -1.0;\n\t  }\n\t  if (northing >= 0.0) {\n\t    return northing;\n\t  }\n\t  else {\n\t    throw (\"Invalid zone letter: \" + zoneLetter);\n\t  }\n\n\t}\n\n\tfunction Point(x, y, z) {\n\t  if (!(this instanceof Point)) {\n\t    return new Point(x, y, z);\n\t  }\n\t  if (Array.isArray(x)) {\n\t    this.x = x[0];\n\t    this.y = x[1];\n\t    this.z = x[2] || 0.0;\n\t  } else if(typeof x === 'object') {\n\t    this.x = x.x;\n\t    this.y = x.y;\n\t    this.z = x.z || 0.0;\n\t  } else if (typeof x === 'string' && typeof y === 'undefined') {\n\t    var coords = x.split(',');\n\t    this.x = parseFloat(coords[0], 10);\n\t    this.y = parseFloat(coords[1], 10);\n\t    this.z = parseFloat(coords[2], 10) || 0.0;\n\t  } else {\n\t    this.x = x;\n\t    this.y = y;\n\t    this.z = z || 0.0;\n\t  }\n\t  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n\t}\n\n\tPoint.fromMGRS = function(mgrsStr) {\n\t  return new Point(toPoint$1(mgrsStr));\n\t};\n\tPoint.prototype.toMGRS = function(accuracy) {\n\t  return forward$1([this.x, this.y], accuracy);\n\t};\n\n\tvar version = \"2.4.3\";\n\n\tvar C00 = 1;\n\tvar C02 = 0.25;\n\tvar C04 = 0.046875;\n\tvar C06 = 0.01953125;\n\tvar C08 = 0.01068115234375;\n\tvar C22 = 0.75;\n\tvar C44 = 0.46875;\n\tvar C46 = 0.01302083333333333333;\n\tvar C48 = 0.00712076822916666666;\n\tvar C66 = 0.36458333333333333333;\n\tvar C68 = 0.00569661458333333333;\n\tvar C88 = 0.3076171875;\n\n\tvar pj_enfn = function(es) {\n\t  var en = [];\n\t  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n\t  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n\t  var t = es * es;\n\t  en[2] = t * (C44 - es * (C46 + es * C48));\n\t  t *= es;\n\t  en[3] = t * (C66 - es * C68);\n\t  en[4] = t * es * C88;\n\t  return en;\n\t};\n\n\tvar pj_mlfn = function(phi, sphi, cphi, en) {\n\t  cphi *= sphi;\n\t  sphi *= sphi;\n\t  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n\t};\n\n\tvar MAX_ITER = 20;\n\n\tvar pj_inv_mlfn = function(arg, es, en) {\n\t  var k = 1 / (1 - es);\n\t  var phi = arg;\n\t  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n\t    var s = Math.sin(phi);\n\t    var t = 1 - es * s * s;\n\t    //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n\t    //phi -= t * (t * Math.sqrt(t)) * k;\n\t    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n\t    phi -= t;\n\t    if (Math.abs(t) < EPSLN) {\n\t      return phi;\n\t    }\n\t  }\n\t  //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n\t  return phi;\n\t};\n\n\t// Heavily based on this tmerc projection implementation\n\t// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\n\tfunction init$2() {\n\t  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n\t  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n\t  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n\t  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n\t  if (this.es) {\n\t    this.en = pj_enfn(this.es);\n\t    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n\t  }\n\t}\n\n\t/**\n\t    Transverse Mercator Forward  - long/lat to x/y\n\t    long/lat in radians\n\t  */\n\tfunction forward$2(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  var con;\n\t  var x, y;\n\t  var sin_phi = Math.sin(lat);\n\t  var cos_phi = Math.cos(lat);\n\n\t  if (!this.es) {\n\t    var b = cos_phi * Math.sin(delta_lon);\n\n\t    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n\t      return (93);\n\t    }\n\t    else {\n\t      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n\t      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n\t      b = Math.abs(y);\n\n\t      if (b >= 1) {\n\t        if ((b - 1) > EPSLN) {\n\t          return (93);\n\t        }\n\t        else {\n\t          y = 0;\n\t        }\n\t      }\n\t      else {\n\t        y = Math.acos(y);\n\t      }\n\n\t      if (lat < 0) {\n\t        y = -y;\n\t      }\n\n\t      y = this.a * this.k0 * (y - this.lat0) + this.y0;\n\t    }\n\t  }\n\t  else {\n\t    var al = cos_phi * delta_lon;\n\t    var als = Math.pow(al, 2);\n\t    var c = this.ep2 * Math.pow(cos_phi, 2);\n\t    var cs = Math.pow(c, 2);\n\t    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n\t    var t = Math.pow(tq, 2);\n\t    var ts = Math.pow(t, 2);\n\t    con = 1 - this.es * Math.pow(sin_phi, 2);\n\t    al = al / Math.sqrt(con);\n\t    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n\t    x = this.a * (this.k0 * al * (1 +\n\t      als / 6 * (1 - t + c +\n\t      als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n\t      als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n\t      this.x0;\n\n\t    y = this.a * (this.k0 * (ml - this.ml0 +\n\t      sin_phi * delta_lon * al / 2 * (1 +\n\t      als / 12 * (5 - t + 9 * c + 4 * cs +\n\t      als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n\t      als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n\t      this.y0;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\n\t  return p;\n\t}\n\n\t/**\n\t    Transverse Mercator Inverse  -  x/y to long/lat\n\t  */\n\tfunction inverse$2(p) {\n\t  var con, phi;\n\t  var lat, lon;\n\t  var x = (p.x - this.x0) * (1 / this.a);\n\t  var y = (p.y - this.y0) * (1 / this.a);\n\n\t  if (!this.es) {\n\t    var f = Math.exp(x / this.k0);\n\t    var g = 0.5 * (f - 1 / f);\n\t    var temp = this.lat0 + y / this.k0;\n\t    var h = Math.cos(temp);\n\t    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n\t    lat = Math.asin(con);\n\n\t    if (y < 0) {\n\t      lat = -lat;\n\t    }\n\n\t    if ((g === 0) && (h === 0)) {\n\t      lon = 0;\n\t    }\n\t    else {\n\t      lon = adjust_lon(Math.atan2(g, h) + this.long0);\n\t    }\n\t  }\n\t  else { // ellipsoidal form\n\t    con = this.ml0 + y / this.k0;\n\t    phi = pj_inv_mlfn(con, this.es, this.en);\n\n\t    if (Math.abs(phi) < HALF_PI) {\n\t      var sin_phi = Math.sin(phi);\n\t      var cos_phi = Math.cos(phi);\n\t      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n\t      var c = this.ep2 * Math.pow(cos_phi, 2);\n\t      var cs = Math.pow(c, 2);\n\t      var t = Math.pow(tan_phi, 2);\n\t      var ts = Math.pow(t, 2);\n\t      con = 1 - this.es * Math.pow(sin_phi, 2);\n\t      var d = x * Math.sqrt(con) / this.k0;\n\t      var ds = Math.pow(d, 2);\n\t      con = con * tan_phi;\n\n\t      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n\t        ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n\t        ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n\t        ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n\t      lon = adjust_lon(this.long0 + (d * (1 -\n\t        ds / 6 * (1 + 2 * t + c -\n\t        ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n\t        ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n\t    }\n\t    else {\n\t      lat = HALF_PI * sign(y);\n\t      lon = 0;\n\t    }\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$3 = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\n\tvar tmerc = {\n\t  init: init$2,\n\t  forward: forward$2,\n\t  inverse: inverse$2,\n\t  names: names$3\n\t};\n\n\tvar sinh = function(x) {\n\t  var r = Math.exp(x);\n\t  r = (r - 1 / r) / 2;\n\t  return r;\n\t};\n\n\tvar hypot = function(x, y) {\n\t  x = Math.abs(x);\n\t  y = Math.abs(y);\n\t  var a = Math.max(x, y);\n\t  var b = Math.min(x, y) / (a ? a : 1);\n\n\t  return a * Math.sqrt(1 + Math.pow(b, 2));\n\t};\n\n\tvar log1py = function(x) {\n\t  var y = 1 + x;\n\t  var z = y - 1;\n\n\t  return z === 0 ? x : x * Math.log(y) / z;\n\t};\n\n\tvar asinhy = function(x) {\n\t  var y = Math.abs(x);\n\t  y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n\t  return x < 0 ? -y : y;\n\t};\n\n\tvar gatg = function(pp, B) {\n\t  var cos_2B = 2 * Math.cos(2 * B);\n\t  var i = pp.length - 1;\n\t  var h1 = pp[i];\n\t  var h2 = 0;\n\t  var h;\n\n\t  while (--i >= 0) {\n\t    h = -h2 + cos_2B * h1 + pp[i];\n\t    h2 = h1;\n\t    h1 = h;\n\t  }\n\n\t  return (B + h * Math.sin(2 * B));\n\t};\n\n\tvar clens = function(pp, arg_r) {\n\t  var r = 2 * Math.cos(arg_r);\n\t  var i = pp.length - 1;\n\t  var hr1 = pp[i];\n\t  var hr2 = 0;\n\t  var hr;\n\n\t  while (--i >= 0) {\n\t    hr = -hr2 + r * hr1 + pp[i];\n\t    hr2 = hr1;\n\t    hr1 = hr;\n\t  }\n\n\t  return Math.sin(arg_r) * hr;\n\t};\n\n\tvar cosh = function(x) {\n\t  var r = Math.exp(x);\n\t  r = (r + 1 / r) / 2;\n\t  return r;\n\t};\n\n\tvar clens_cmplx = function(pp, arg_r, arg_i) {\n\t  var sin_arg_r = Math.sin(arg_r);\n\t  var cos_arg_r = Math.cos(arg_r);\n\t  var sinh_arg_i = sinh(arg_i);\n\t  var cosh_arg_i = cosh(arg_i);\n\t  var r = 2 * cos_arg_r * cosh_arg_i;\n\t  var i = -2 * sin_arg_r * sinh_arg_i;\n\t  var j = pp.length - 1;\n\t  var hr = pp[j];\n\t  var hi1 = 0;\n\t  var hr1 = 0;\n\t  var hi = 0;\n\t  var hr2;\n\t  var hi2;\n\n\t  while (--j >= 0) {\n\t    hr2 = hr1;\n\t    hi2 = hi1;\n\t    hr1 = hr;\n\t    hi1 = hi;\n\t    hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n\t    hi = -hi2 + i * hr1 + r * hi1;\n\t  }\n\n\t  r = sin_arg_r * cosh_arg_i;\n\t  i = cos_arg_r * sinh_arg_i;\n\n\t  return [r * hr - i * hi, r * hi + i * hr];\n\t};\n\n\t// Heavily based on this etmerc projection implementation\n\t// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\n\tfunction init$3() {\n\t  if (this.es === undefined || this.es <= 0) {\n\t    throw new Error('incorrect elliptical usage');\n\t  }\n\n\t  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n\t  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n\t  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n\t  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n\t  this.cgb = [];\n\t  this.cbg = [];\n\t  this.utg = [];\n\t  this.gtu = [];\n\n\t  var f = this.es / (1 + Math.sqrt(1 - this.es));\n\t  var n = f / (2 - f);\n\t  var np = n;\n\n\t  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n\t  this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n\t  np = np * n;\n\t  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n\t  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n\t  np = np * n;\n\t  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n\t  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n\t  np = np * n;\n\t  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n\t  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n\t  np = np * n;\n\t  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n\t  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n\t  np = np * n;\n\t  this.cgb[5] = np * (601676 / 22275);\n\t  this.cbg[5] = np * (444337 / 155925);\n\n\t  np = Math.pow(n, 2);\n\t  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n\t  this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n\t  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n\t  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n\t  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n\t  np = np * n;\n\t  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n\t  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n\t  np = np * n;\n\t  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n\t  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n\t  np = np * n;\n\t  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n\t  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n\t  np = np * n;\n\t  this.utg[5] = np * (-20648693 / 638668800);\n\t  this.gtu[5] = np * (212378941 / 319334400);\n\n\t  var Z = gatg(this.cbg, this.lat0);\n\t  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n\t}\n\n\tfunction forward$3(p) {\n\t  var Ce = adjust_lon(p.x - this.long0);\n\t  var Cn = p.y;\n\n\t  Cn = gatg(this.cbg, Cn);\n\t  var sin_Cn = Math.sin(Cn);\n\t  var cos_Cn = Math.cos(Cn);\n\t  var sin_Ce = Math.sin(Ce);\n\t  var cos_Ce = Math.cos(Ce);\n\n\t  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n\t  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n\t  Ce = asinhy(Math.tan(Ce));\n\n\t  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n\t  Cn = Cn + tmp[0];\n\t  Ce = Ce + tmp[1];\n\n\t  var x;\n\t  var y;\n\n\t  if (Math.abs(Ce) <= 2.623395162778) {\n\t    x = this.a * (this.Qn * Ce) + this.x0;\n\t    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n\t  }\n\t  else {\n\t    x = Infinity;\n\t    y = Infinity;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\n\t  return p;\n\t}\n\n\tfunction inverse$3(p) {\n\t  var Ce = (p.x - this.x0) * (1 / this.a);\n\t  var Cn = (p.y - this.y0) * (1 / this.a);\n\n\t  Cn = (Cn - this.Zb) / this.Qn;\n\t  Ce = Ce / this.Qn;\n\n\t  var lon;\n\t  var lat;\n\n\t  if (Math.abs(Ce) <= 2.623395162778) {\n\t    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n\t    Cn = Cn + tmp[0];\n\t    Ce = Ce + tmp[1];\n\t    Ce = Math.atan(sinh(Ce));\n\n\t    var sin_Cn = Math.sin(Cn);\n\t    var cos_Cn = Math.cos(Cn);\n\t    var sin_Ce = Math.sin(Ce);\n\t    var cos_Ce = Math.cos(Ce);\n\n\t    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n\t    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n\t    lon = adjust_lon(Ce + this.long0);\n\t    lat = gatg(this.cgb, Cn);\n\t  }\n\t  else {\n\t    lon = Infinity;\n\t    lat = Infinity;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$4 = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\"];\n\tvar etmerc = {\n\t  init: init$3,\n\t  forward: forward$3,\n\t  inverse: inverse$3,\n\t  names: names$4\n\t};\n\n\tvar adjust_zone = function(zone, lon) {\n\t  if (zone === undefined) {\n\t    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n\t    if (zone < 0) {\n\t      return 0;\n\t    } else if (zone > 60) {\n\t      return 60;\n\t    }\n\t  }\n\t  return zone;\n\t};\n\n\tvar dependsOn = 'etmerc';\n\tfunction init$4() {\n\t  var zone = adjust_zone(this.zone, this.long0);\n\t  if (zone === undefined) {\n\t    throw new Error('unknown utm zone');\n\t  }\n\t  this.lat0 = 0;\n\t  this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;\n\t  this.x0 = 500000;\n\t  this.y0 = this.utmSouth ? 10000000 : 0;\n\t  this.k0 = 0.9996;\n\n\t  etmerc.init.apply(this);\n\t  this.forward = etmerc.forward;\n\t  this.inverse = etmerc.inverse;\n\t}\n\n\tvar names$5 = [\"Universal Transverse Mercator System\", \"utm\"];\n\tvar utm = {\n\t  init: init$4,\n\t  names: names$5,\n\t  dependsOn: dependsOn\n\t};\n\n\tvar srat = function(esinp, exp) {\n\t  return (Math.pow((1 - esinp) / (1 + esinp), exp));\n\t};\n\n\tvar MAX_ITER$1 = 20;\n\tfunction init$6() {\n\t  var sphi = Math.sin(this.lat0);\n\t  var cphi = Math.cos(this.lat0);\n\t  cphi *= cphi;\n\t  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n\t  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n\t  this.phic0 = Math.asin(sphi / this.C);\n\t  this.ratexp = 0.5 * this.C * this.e;\n\t  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n\t}\n\n\tfunction forward$5(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n\t  p.x = this.C * lon;\n\t  return p;\n\t}\n\n\tfunction inverse$5(p) {\n\t  var DEL_TOL = 1e-14;\n\t  var lon = p.x / this.C;\n\t  var lat = p.y;\n\t  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n\t  for (var i = MAX_ITER$1; i > 0; --i) {\n\t    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n\t    if (Math.abs(lat - p.y) < DEL_TOL) {\n\t      break;\n\t    }\n\t    p.y = lat;\n\t  }\n\t  /* convergence failed */\n\t  if (!i) {\n\t    return null;\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$7 = [\"gauss\"];\n\tvar gauss = {\n\t  init: init$6,\n\t  forward: forward$5,\n\t  inverse: inverse$5,\n\t  names: names$7\n\t};\n\n\tfunction init$5() {\n\t  gauss.init.apply(this);\n\t  if (!this.rc) {\n\t    return;\n\t  }\n\t  this.sinc0 = Math.sin(this.phic0);\n\t  this.cosc0 = Math.cos(this.phic0);\n\t  this.R2 = 2 * this.rc;\n\t  if (!this.title) {\n\t    this.title = \"Oblique Stereographic Alternative\";\n\t  }\n\t}\n\n\tfunction forward$4(p) {\n\t  var sinc, cosc, cosl, k;\n\t  p.x = adjust_lon(p.x - this.long0);\n\t  gauss.forward.apply(this, [p]);\n\t  sinc = Math.sin(p.y);\n\t  cosc = Math.cos(p.y);\n\t  cosl = Math.cos(p.x);\n\t  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n\t  p.x = k * cosc * Math.sin(p.x);\n\t  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n\t  p.x = this.a * p.x + this.x0;\n\t  p.y = this.a * p.y + this.y0;\n\t  return p;\n\t}\n\n\tfunction inverse$4(p) {\n\t  var sinc, cosc, lon, lat, rho;\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  p.x /= this.k0;\n\t  p.y /= this.k0;\n\t  if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n\t    var c = 2 * Math.atan2(rho, this.R2);\n\t    sinc = Math.sin(c);\n\t    cosc = Math.cos(c);\n\t    lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n\t    lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n\t  }\n\t  else {\n\t    lat = this.phic0;\n\t    lon = 0;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  gauss.inverse.apply(this, [p]);\n\t  p.x = adjust_lon(p.x + this.long0);\n\t  return p;\n\t}\n\n\tvar names$6 = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\"];\n\tvar sterea = {\n\t  init: init$5,\n\t  forward: forward$4,\n\t  inverse: inverse$4,\n\t  names: names$6\n\t};\n\n\tfunction ssfn_(phit, sinphi, eccen) {\n\t  sinphi *= eccen;\n\t  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n\t}\n\n\tfunction init$7() {\n\t  this.coslat0 = Math.cos(this.lat0);\n\t  this.sinlat0 = Math.sin(this.lat0);\n\t  if (this.sphere) {\n\t    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n\t      this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      if (this.lat0 > 0) {\n\t        //North pole\n\t        //trace('stere:north pole');\n\t        this.con = 1;\n\t      }\n\t      else {\n\t        //South pole\n\t        //trace('stere:south pole');\n\t        this.con = -1;\n\t      }\n\t    }\n\t    this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n\t    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n\t      this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n\t    }\n\t    this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n\t    this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n\t    this.cosX0 = Math.cos(this.X0);\n\t    this.sinX0 = Math.sin(this.X0);\n\t  }\n\t}\n\n\t// Stereographic forward equations--mapping lat,long to x,y\n\tfunction forward$6(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var sinlat = Math.sin(lat);\n\t  var coslat = Math.cos(lat);\n\t  var A, X, sinX, cosX, ts, rh;\n\t  var dlon = adjust_lon(lon - this.long0);\n\n\t  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n\t    //case of the origine point\n\t    //trace('stere:this is the origin point');\n\t    p.x = NaN;\n\t    p.y = NaN;\n\t    return p;\n\t  }\n\t  if (this.sphere) {\n\t    //trace('stere:sphere case');\n\t    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n\t    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n\t    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n\t    return p;\n\t  }\n\t  else {\n\t    X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n\t    cosX = Math.cos(X);\n\t    sinX = Math.sin(X);\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n\t      rh = 2 * this.a * this.k0 * ts / this.cons;\n\t      p.x = this.x0 + rh * Math.sin(lon - this.long0);\n\t      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n\t      //trace(p.toString());\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sinlat0) < EPSLN) {\n\t      //Eq\n\t      //trace('stere:equateur');\n\t      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n\t      p.y = A * sinX;\n\t    }\n\t    else {\n\t      //other case\n\t      //trace('stere:normal case');\n\t      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n\t      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n\t    }\n\t    p.x = A * cosX * Math.sin(dlon) + this.x0;\n\t  }\n\t  //trace(p.toString());\n\t  return p;\n\t}\n\n\t//* Stereographic inverse equations--mapping x,y to lat/long\n\tfunction inverse$6(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var lon, lat, ts, ce, Chi;\n\t  var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  if (this.sphere) {\n\t    var c = 2 * Math.atan(rh / (0.5 * this.a * this.k0));\n\t    lon = this.long0;\n\t    lat = this.lat0;\n\t    if (rh <= EPSLN) {\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n\t    if (Math.abs(this.coslat0) < EPSLN) {\n\t      if (this.lat0 > 0) {\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t      }\n\t      else {\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n\t      }\n\t    }\n\t    else {\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n\t    }\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      if (rh <= EPSLN) {\n\t        lat = this.lat0;\n\t        lon = this.long0;\n\t        p.x = lon;\n\t        p.y = lat;\n\t        //trace(p.toString());\n\t        return p;\n\t      }\n\t      p.x *= this.con;\n\t      p.y *= this.con;\n\t      ts = rh * this.cons / (2 * this.a * this.k0);\n\t      lat = this.con * phi2z(this.e, ts);\n\t      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t    }\n\t    else {\n\t      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n\t      lon = this.long0;\n\t      if (rh <= EPSLN) {\n\t        Chi = this.X0;\n\t      }\n\t      else {\n\t        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n\t      }\n\t      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n\t    }\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  //trace(p.toString());\n\t  return p;\n\n\t}\n\n\tvar names$8 = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\n\tvar stere = {\n\t  init: init$7,\n\t  forward: forward$6,\n\t  inverse: inverse$6,\n\t  names: names$8,\n\t  ssfn_: ssfn_\n\t};\n\n\t/*\n\t  references:\n\t    Formules et constantes pour le Calcul pour la\n\t    projection cylindrique conforme à axe oblique et pour la transformation entre\n\t    des systèmes de référence.\n\t    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n\t  */\n\n\tfunction init$8() {\n\t  var phy0 = this.lat0;\n\t  this.lambda0 = this.long0;\n\t  var sinPhy0 = Math.sin(phy0);\n\t  var semiMajorAxis = this.a;\n\t  var invF = this.rf;\n\t  var flattening = 1 / invF;\n\t  var e2 = 2 * flattening - Math.pow(flattening, 2);\n\t  var e = this.e = Math.sqrt(e2);\n\t  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n\t  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n\t  this.b0 = Math.asin(sinPhy0 / this.alpha);\n\t  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n\t  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n\t  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n\t  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n\t}\n\n\tfunction forward$7(p) {\n\t  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n\t  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n\t  var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n\t  // spheric latitude\n\t  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n\t  // spheric longitude\n\t  var I = this.alpha * (p.x - this.lambda0);\n\n\t  // psoeudo equatorial rotation\n\t  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n\t  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n\t  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n\t  p.x = this.R * rotI + this.x0;\n\t  return p;\n\t}\n\n\tfunction inverse$7(p) {\n\t  var Y = p.x - this.x0;\n\t  var X = p.y - this.y0;\n\n\t  var rotI = Y / this.R;\n\t  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n\t  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n\t  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n\t  var lambda = this.lambda0 + I / this.alpha;\n\n\t  var S = 0;\n\t  var phy = b;\n\t  var prevPhy = -1000;\n\t  var iteration = 0;\n\t  while (Math.abs(phy - prevPhy) > 0.0000001) {\n\t    if (++iteration > 20) {\n\t      //...reportError(\"omercFwdInfinity\");\n\t      return;\n\t    }\n\t    //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n\t    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n\t    prevPhy = phy;\n\t    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n\t  }\n\n\t  p.x = lambda;\n\t  p.y = phy;\n\t  return p;\n\t}\n\n\tvar names$9 = [\"somerc\"];\n\tvar somerc = {\n\t  init: init$8,\n\t  forward: forward$7,\n\t  inverse: inverse$7,\n\t  names: names$9\n\t};\n\n\t/* Initialize the Oblique Mercator  projection\n\t    ------------------------------------------*/\n\tfunction init$9() {\n\t  this.no_off = this.no_off || false;\n\t  this.no_rot = this.no_rot || false;\n\n\t  if (isNaN(this.k0)) {\n\t    this.k0 = 1;\n\t  }\n\t  var sinlat = Math.sin(this.lat0);\n\t  var coslat = Math.cos(this.lat0);\n\t  var con = this.e * sinlat;\n\n\t  this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n\t  this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n\t  var t0 = tsfnz(this.e, this.lat0, sinlat);\n\t  var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n\t  if (dl * dl < 1) {\n\t    dl = 1;\n\t  }\n\t  var fl;\n\t  var gl;\n\t  if (!isNaN(this.longc)) {\n\t    //Central point and azimuth method\n\n\t    if (this.lat0 >= 0) {\n\t      fl = dl + Math.sqrt(dl * dl - 1);\n\t    }\n\t    else {\n\t      fl = dl - Math.sqrt(dl * dl - 1);\n\t    }\n\t    this.el = fl * Math.pow(t0, this.bl);\n\t    gl = 0.5 * (fl - 1 / fl);\n\t    this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n\t    this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n\t  }\n\t  else {\n\t    //2 points method\n\t    var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n\t    var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n\t    if (this.lat0 >= 0) {\n\t      this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n\t    }\n\t    else {\n\t      this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n\t    }\n\t    var hl = Math.pow(t1, this.bl);\n\t    var ll = Math.pow(t2, this.bl);\n\t    fl = this.el / hl;\n\t    gl = 0.5 * (fl - 1 / fl);\n\t    var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n\t    var pl = (ll - hl) / (ll + hl);\n\t    var dlon12 = adjust_lon(this.long1 - this.long2);\n\t    this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n\t    this.long0 = adjust_lon(this.long0);\n\t    var dlon10 = adjust_lon(this.long1 - this.long0);\n\t    this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n\t    this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n\t  }\n\n\t  if (this.no_off) {\n\t    this.uc = 0;\n\t  }\n\t  else {\n\t    if (this.lat0 >= 0) {\n\t      this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n\t    }\n\t    else {\n\t      this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n\t    }\n\t  }\n\n\t}\n\n\t/* Oblique Mercator forward equations--mapping lat,long to x,y\n\t    ----------------------------------------------------------*/\n\tfunction forward$8(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var us, vs;\n\t  var con;\n\t  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n\t    if (lat > 0) {\n\t      con = -1;\n\t    }\n\t    else {\n\t      con = 1;\n\t    }\n\t    vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n\t    us = -1 * con * HALF_PI * this.al / this.bl;\n\t  }\n\t  else {\n\t    var t = tsfnz(this.e, lat, Math.sin(lat));\n\t    var ql = this.el / Math.pow(t, this.bl);\n\t    var sl = 0.5 * (ql - 1 / ql);\n\t    var tl = 0.5 * (ql + 1 / ql);\n\t    var vl = Math.sin(this.bl * (dlon));\n\t    var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n\t    if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n\t      vs = Number.POSITIVE_INFINITY;\n\t    }\n\t    else {\n\t      vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n\t    }\n\t    if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n\t      us = this.al * this.bl * (dlon);\n\t    }\n\t    else {\n\t      us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n\t    }\n\t  }\n\n\t  if (this.no_rot) {\n\t    p.x = this.x0 + us;\n\t    p.y = this.y0 + vs;\n\t  }\n\t  else {\n\n\t    us -= this.uc;\n\t    p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n\t    p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n\t  }\n\t  return p;\n\t}\n\n\tfunction inverse$8(p) {\n\t  var us, vs;\n\t  if (this.no_rot) {\n\t    vs = p.y - this.y0;\n\t    us = p.x - this.x0;\n\t  }\n\t  else {\n\t    vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n\t    us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n\t    us += this.uc;\n\t  }\n\t  var qp = Math.exp(-1 * this.bl * vs / this.al);\n\t  var sp = 0.5 * (qp - 1 / qp);\n\t  var tp = 0.5 * (qp + 1 / qp);\n\t  var vp = Math.sin(this.bl * us / this.al);\n\t  var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n\t  var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n\t  if (Math.abs(up - 1) < EPSLN) {\n\t    p.x = this.long0;\n\t    p.y = HALF_PI;\n\t  }\n\t  else if (Math.abs(up + 1) < EPSLN) {\n\t    p.x = this.long0;\n\t    p.y = -1 * HALF_PI;\n\t  }\n\t  else {\n\t    p.y = phi2z(this.e, ts);\n\t    p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n\t  }\n\t  return p;\n\t}\n\n\tvar names$10 = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];\n\tvar omerc = {\n\t  init: init$9,\n\t  forward: forward$8,\n\t  inverse: inverse$8,\n\t  names: names$10\n\t};\n\n\tfunction init$10() {\n\n\t  // array of:  r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n\t  //double c_lat;                   /* center latitude                      */\n\t  //double c_lon;                   /* center longitude                     */\n\t  //double lat1;                    /* first standard parallel              */\n\t  //double lat2;                    /* second standard parallel             */\n\t  //double r_maj;                   /* major axis                           */\n\t  //double r_min;                   /* minor axis                           */\n\t  //double false_east;              /* x offset in meters                   */\n\t  //double false_north;             /* y offset in meters                   */\n\n\t  if (!this.lat2) {\n\t    this.lat2 = this.lat1;\n\t  } //if lat2 is not defined\n\t  if (!this.k0) {\n\t    this.k0 = 1;\n\t  }\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  // Standard Parallels cannot be equal and on opposite sides of the equator\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\n\t  var temp = this.b / this.a;\n\t  this.e = Math.sqrt(1 - temp * temp);\n\n\t  var sin1 = Math.sin(this.lat1);\n\t  var cos1 = Math.cos(this.lat1);\n\t  var ms1 = msfnz(this.e, sin1, cos1);\n\t  var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n\t  var sin2 = Math.sin(this.lat2);\n\t  var cos2 = Math.cos(this.lat2);\n\t  var ms2 = msfnz(this.e, sin2, cos2);\n\t  var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n\t  var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n\t  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n\t    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n\t  }\n\t  else {\n\t    this.ns = sin1;\n\t  }\n\t  if (isNaN(this.ns)) {\n\t    this.ns = sin1;\n\t  }\n\t  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n\t  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n\t  if (!this.title) {\n\t    this.title = \"Lambert Conformal Conic\";\n\t  }\n\t}\n\n\t// Lambert Conformal conic forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$9(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  // singular cases :\n\t  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n\t    lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n\t  }\n\n\t  var con = Math.abs(Math.abs(lat) - HALF_PI);\n\t  var ts, rh1;\n\t  if (con > EPSLN) {\n\t    ts = tsfnz(this.e, lat, Math.sin(lat));\n\t    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n\t  }\n\t  else {\n\t    con = lat * this.ns;\n\t    if (con <= 0) {\n\t      return null;\n\t    }\n\t    rh1 = 0;\n\t  }\n\t  var theta = this.ns * adjust_lon(lon - this.long0);\n\t  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n\t  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n\t  return p;\n\t}\n\n\t// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$9(p) {\n\n\t  var rh1, con, ts;\n\t  var lat, lon;\n\t  var x = (p.x - this.x0) / this.k0;\n\t  var y = (this.rh - (p.y - this.y0) / this.k0);\n\t  if (this.ns > 0) {\n\t    rh1 = Math.sqrt(x * x + y * y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(x * x + y * y);\n\t    con = -1;\n\t  }\n\t  var theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2((con * x), (con * y));\n\t  }\n\t  if ((rh1 !== 0) || (this.ns > 0)) {\n\t    con = 1 / this.ns;\n\t    ts = Math.pow((rh1 / (this.a * this.f0)), con);\n\t    lat = phi2z(this.e, ts);\n\t    if (lat === -9999) {\n\t      return null;\n\t    }\n\t  }\n\t  else {\n\t    lat = -HALF_PI;\n\t  }\n\t  lon = adjust_lon(theta / this.ns + this.long0);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$11 = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\n\tvar lcc = {\n\t  init: init$10,\n\t  forward: forward$9,\n\t  inverse: inverse$9,\n\t  names: names$11\n\t};\n\n\tfunction init$11() {\n\t  this.a = 6377397.155;\n\t  this.es = 0.006674372230614;\n\t  this.e = Math.sqrt(this.es);\n\t  if (!this.lat0) {\n\t    this.lat0 = 0.863937979737193;\n\t  }\n\t  if (!this.long0) {\n\t    this.long0 = 0.7417649320975901 - 0.308341501185665;\n\t  }\n\t  /* if scale not set default to 0.9999 */\n\t  if (!this.k0) {\n\t    this.k0 = 0.9999;\n\t  }\n\t  this.s45 = 0.785398163397448; /* 45 */\n\t  this.s90 = 2 * this.s45;\n\t  this.fi0 = this.lat0;\n\t  this.e2 = this.es;\n\t  this.e = Math.sqrt(this.e2);\n\t  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n\t  this.uq = 1.04216856380474;\n\t  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n\t  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n\t  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n\t  this.k1 = this.k0;\n\t  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n\t  this.s0 = 1.37008346281555;\n\t  this.n = Math.sin(this.s0);\n\t  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n\t  this.ad = this.s90 - this.uq;\n\t}\n\n\t/* ellipsoid */\n\t/* calculate xy from lat/lon */\n\t/* Constants, identical to inverse transform function */\n\tfunction forward$10(p) {\n\t  var gfi, u, deltav, s, d, eps, ro;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  /* Transformation */\n\t  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n\t  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n\t  deltav = -delta_lon * this.alfa;\n\t  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n\t  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n\t  eps = this.n * d;\n\t  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n\t  p.y = ro * Math.cos(eps) / 1;\n\t  p.x = ro * Math.sin(eps) / 1;\n\n\t  if (!this.czech) {\n\t    p.y *= -1;\n\t    p.x *= -1;\n\t  }\n\t  return (p);\n\t}\n\n\t/* calculate lat/lon from xy */\n\tfunction inverse$10(p) {\n\t  var u, deltav, s, d, eps, ro, fi1;\n\t  var ok;\n\n\t  /* Transformation */\n\t  /* revert y, x*/\n\t  var tmp = p.x;\n\t  p.x = p.y;\n\t  p.y = tmp;\n\t  if (!this.czech) {\n\t    p.y *= -1;\n\t    p.x *= -1;\n\t  }\n\t  ro = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  eps = Math.atan2(p.y, p.x);\n\t  d = eps / Math.sin(this.s0);\n\t  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n\t  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n\t  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n\t  p.x = this.long0 - deltav / this.alfa;\n\t  fi1 = u;\n\t  ok = 0;\n\t  var iter = 0;\n\t  do {\n\t    p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n\t    if (Math.abs(fi1 - p.y) < 0.0000000001) {\n\t      ok = 1;\n\t    }\n\t    fi1 = p.y;\n\t    iter += 1;\n\t  } while (ok === 0 && iter < 15);\n\t  if (iter >= 15) {\n\t    return null;\n\t  }\n\n\t  return (p);\n\t}\n\n\tvar names$12 = [\"Krovak\", \"krovak\"];\n\tvar krovak = {\n\t  init: init$11,\n\t  forward: forward$10,\n\t  inverse: inverse$10,\n\t  names: names$12\n\t};\n\n\tvar mlfn = function(e0, e1, e2, e3, phi) {\n\t  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n\t};\n\n\tvar e0fn = function(x) {\n\t  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n\t};\n\n\tvar e1fn = function(x) {\n\t  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n\t};\n\n\tvar e2fn = function(x) {\n\t  return (0.05859375 * x * x * (1 + 0.75 * x));\n\t};\n\n\tvar e3fn = function(x) {\n\t  return (x * x * x * (35 / 3072));\n\t};\n\n\tvar gN = function(a, e, sinphi) {\n\t  var temp = e * sinphi;\n\t  return a / Math.sqrt(1 - temp * temp);\n\t};\n\n\tvar adjust_lat = function(x) {\n\t  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n\t};\n\n\tvar imlfn = function(ml, e0, e1, e2, e3) {\n\t  var phi;\n\t  var dphi;\n\n\t  phi = ml / e0;\n\t  for (var i = 0; i < 15; i++) {\n\t    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\n\t  //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n\t  return NaN;\n\t};\n\n\tfunction init$12() {\n\t  if (!this.sphere) {\n\t    this.e0 = e0fn(this.es);\n\t    this.e1 = e1fn(this.es);\n\t    this.e2 = e2fn(this.es);\n\t    this.e3 = e3fn(this.es);\n\t    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n\t  }\n\t}\n\n\t/* Cassini forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------------------*/\n\tfunction forward$11(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var x, y;\n\t  var lam = p.x;\n\t  var phi = p.y;\n\t  lam = adjust_lon(lam - this.long0);\n\n\t  if (this.sphere) {\n\t    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n\t    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n\t  }\n\t  else {\n\t    //ellipsoid\n\t    var sinphi = Math.sin(phi);\n\t    var cosphi = Math.cos(phi);\n\t    var nl = gN(this.a, this.e, sinphi);\n\t    var tl = Math.tan(phi) * Math.tan(phi);\n\t    var al = lam * Math.cos(phi);\n\t    var asq = al * al;\n\t    var cl = this.es * cosphi * cosphi / (1 - this.es);\n\t    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n\t    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n\t    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n\t  }\n\n\t  p.x = x + this.x0;\n\t  p.y = y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$11(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var x = p.x / this.a;\n\t  var y = p.y / this.a;\n\t  var phi, lam;\n\n\t  if (this.sphere) {\n\t    var dd = y + this.lat0;\n\t    phi = Math.asin(Math.sin(dd) * Math.cos(x));\n\t    lam = Math.atan2(Math.tan(x), Math.cos(dd));\n\t  }\n\t  else {\n\t    /* ellipsoid */\n\t    var ml1 = this.ml0 / this.a + y;\n\t    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n\t    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n\t      p.x = this.long0;\n\t      p.y = HALF_PI;\n\t      if (y < 0) {\n\t        p.y *= -1;\n\t      }\n\t      return p;\n\t    }\n\t    var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n\t    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n\t    var tl1 = Math.pow(Math.tan(phi1), 2);\n\t    var dl = x * this.a / nl1;\n\t    var dsq = dl * dl;\n\t    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n\t    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n\t  }\n\n\t  p.x = adjust_lon(lam + this.long0);\n\t  p.y = adjust_lat(phi);\n\t  return p;\n\n\t}\n\n\tvar names$13 = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\n\tvar cass = {\n\t  init: init$12,\n\t  forward: forward$11,\n\t  inverse: inverse$11,\n\t  names: names$13\n\t};\n\n\tvar qsfnz = function(eccent, sinphi) {\n\t  var con;\n\t  if (eccent > 1.0e-7) {\n\t    con = eccent * sinphi;\n\t    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n\t  }\n\t  else {\n\t    return (2 * sinphi);\n\t  }\n\t};\n\n\t/*\n\t  reference\n\t    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n\t    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n\t  */\n\n\tvar S_POLE = 1;\n\n\tvar N_POLE = 2;\n\tvar EQUIT = 3;\n\tvar OBLIQ = 4;\n\n\t/* Initialize the Lambert Azimuthal Equal Area projection\n\t  ------------------------------------------------------*/\n\tfunction init$13() {\n\t  var t = Math.abs(this.lat0);\n\t  if (Math.abs(t - HALF_PI) < EPSLN) {\n\t    this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n\t  }\n\t  else if (Math.abs(t) < EPSLN) {\n\t    this.mode = this.EQUIT;\n\t  }\n\t  else {\n\t    this.mode = this.OBLIQ;\n\t  }\n\t  if (this.es > 0) {\n\t    var sinphi;\n\n\t    this.qp = qsfnz(this.e, 1);\n\t    this.mmf = 0.5 / (1 - this.es);\n\t    this.apa = authset(this.es);\n\t    switch (this.mode) {\n\t    case this.N_POLE:\n\t      this.dd = 1;\n\t      break;\n\t    case this.S_POLE:\n\t      this.dd = 1;\n\t      break;\n\t    case this.EQUIT:\n\t      this.rq = Math.sqrt(0.5 * this.qp);\n\t      this.dd = 1 / this.rq;\n\t      this.xmf = 1;\n\t      this.ymf = 0.5 * this.qp;\n\t      break;\n\t    case this.OBLIQ:\n\t      this.rq = Math.sqrt(0.5 * this.qp);\n\t      sinphi = Math.sin(this.lat0);\n\t      this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n\t      this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n\t      this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n\t      this.ymf = (this.xmf = this.rq) / this.dd;\n\t      this.xmf *= this.dd;\n\t      break;\n\t    }\n\t  }\n\t  else {\n\t    if (this.mode === this.OBLIQ) {\n\t      this.sinph0 = Math.sin(this.lat0);\n\t      this.cosph0 = Math.cos(this.lat0);\n\t    }\n\t  }\n\t}\n\n\t/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------------------*/\n\tfunction forward$12(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n\t  var lam = p.x;\n\t  var phi = p.y;\n\n\t  lam = adjust_lon(lam - this.long0);\n\t  if (this.sphere) {\n\t    sinphi = Math.sin(phi);\n\t    cosphi = Math.cos(phi);\n\t    coslam = Math.cos(lam);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n\t      if (y <= EPSLN) {\n\t        return null;\n\t      }\n\t      y = Math.sqrt(2 / y);\n\t      x = y * cosphi * Math.sin(lam);\n\t      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n\t    }\n\t    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n\t      if (this.mode === this.N_POLE) {\n\t        coslam = -coslam;\n\t      }\n\t      if (Math.abs(phi + this.phi0) < EPSLN) {\n\t        return null;\n\t      }\n\t      y = FORTPI - phi * 0.5;\n\t      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n\t      x = y * Math.sin(lam);\n\t      y *= coslam;\n\t    }\n\t  }\n\t  else {\n\t    sinb = 0;\n\t    cosb = 0;\n\t    b = 0;\n\t    coslam = Math.cos(lam);\n\t    sinlam = Math.sin(lam);\n\t    sinphi = Math.sin(phi);\n\t    q = qsfnz(this.e, sinphi);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      sinb = q / this.qp;\n\t      cosb = Math.sqrt(1 - sinb * sinb);\n\t    }\n\t    switch (this.mode) {\n\t    case this.OBLIQ:\n\t      b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n\t      break;\n\t    case this.EQUIT:\n\t      b = 1 + cosb * coslam;\n\t      break;\n\t    case this.N_POLE:\n\t      b = HALF_PI + phi;\n\t      q = this.qp - q;\n\t      break;\n\t    case this.S_POLE:\n\t      b = phi - HALF_PI;\n\t      q = this.qp + q;\n\t      break;\n\t    }\n\t    if (Math.abs(b) < EPSLN) {\n\t      return null;\n\t    }\n\t    switch (this.mode) {\n\t    case this.OBLIQ:\n\t    case this.EQUIT:\n\t      b = Math.sqrt(2 / b);\n\t      if (this.mode === this.OBLIQ) {\n\t        y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n\t      }\n\t      else {\n\t        y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n\t      }\n\t      x = this.xmf * b * cosb * sinlam;\n\t      break;\n\t    case this.N_POLE:\n\t    case this.S_POLE:\n\t      if (q >= 0) {\n\t        x = (b = Math.sqrt(q)) * sinlam;\n\t        y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n\t      }\n\t      else {\n\t        x = y = 0;\n\t      }\n\t      break;\n\t    }\n\t  }\n\n\t  p.x = this.a * x + this.x0;\n\t  p.y = this.a * y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$12(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var x = p.x / this.a;\n\t  var y = p.y / this.a;\n\t  var lam, phi, cCe, sCe, q, rho, ab;\n\t  if (this.sphere) {\n\t    var cosz = 0,\n\t      rh, sinz = 0;\n\n\t    rh = Math.sqrt(x * x + y * y);\n\t    phi = rh * 0.5;\n\t    if (phi > 1) {\n\t      return null;\n\t    }\n\t    phi = 2 * Math.asin(phi);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      sinz = Math.sin(phi);\n\t      cosz = Math.cos(phi);\n\t    }\n\t    switch (this.mode) {\n\t    case this.EQUIT:\n\t      phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n\t      x *= sinz;\n\t      y = cosz * rh;\n\t      break;\n\t    case this.OBLIQ:\n\t      phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n\t      x *= sinz * this.cosph0;\n\t      y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n\t      break;\n\t    case this.N_POLE:\n\t      y = -y;\n\t      phi = HALF_PI - phi;\n\t      break;\n\t    case this.S_POLE:\n\t      phi -= HALF_PI;\n\t      break;\n\t    }\n\t    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n\t  }\n\t  else {\n\t    ab = 0;\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      x /= this.dd;\n\t      y *= this.dd;\n\t      rho = Math.sqrt(x * x + y * y);\n\t      if (rho < EPSLN) {\n\t        p.x = 0;\n\t        p.y = this.phi0;\n\t        return p;\n\t      }\n\t      sCe = 2 * Math.asin(0.5 * rho / this.rq);\n\t      cCe = Math.cos(sCe);\n\t      x *= (sCe = Math.sin(sCe));\n\t      if (this.mode === this.OBLIQ) {\n\t        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n\t        q = this.qp * ab;\n\t        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n\t      }\n\t      else {\n\t        ab = y * sCe / rho;\n\t        q = this.qp * ab;\n\t        y = rho * cCe;\n\t      }\n\t    }\n\t    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n\t      if (this.mode === this.N_POLE) {\n\t        y = -y;\n\t      }\n\t      q = (x * x + y * y);\n\t      if (!q) {\n\t        p.x = 0;\n\t        p.y = this.phi0;\n\t        return p;\n\t      }\n\t      ab = 1 - q / this.qp;\n\t      if (this.mode === this.S_POLE) {\n\t        ab = -ab;\n\t      }\n\t    }\n\t    lam = Math.atan2(x, y);\n\t    phi = authlat(Math.asin(ab), this.apa);\n\t  }\n\n\t  p.x = adjust_lon(this.long0 + lam);\n\t  p.y = phi;\n\t  return p;\n\t}\n\n\t/* determine latitude from authalic latitude */\n\tvar P00 = 0.33333333333333333333;\n\n\tvar P01 = 0.17222222222222222222;\n\tvar P02 = 0.10257936507936507936;\n\tvar P10 = 0.06388888888888888888;\n\tvar P11 = 0.06640211640211640211;\n\tvar P20 = 0.01641501294219154443;\n\n\tfunction authset(es) {\n\t  var t;\n\t  var APA = [];\n\t  APA[0] = es * P00;\n\t  t = es * es;\n\t  APA[0] += t * P01;\n\t  APA[1] = t * P10;\n\t  t *= es;\n\t  APA[0] += t * P02;\n\t  APA[1] += t * P11;\n\t  APA[2] = t * P20;\n\t  return APA;\n\t}\n\n\tfunction authlat(beta, APA) {\n\t  var t = beta + beta;\n\t  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n\t}\n\n\tvar names$14 = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\n\tvar laea = {\n\t  init: init$13,\n\t  forward: forward$12,\n\t  inverse: inverse$12,\n\t  names: names$14,\n\t  S_POLE: S_POLE,\n\t  N_POLE: N_POLE,\n\t  EQUIT: EQUIT,\n\t  OBLIQ: OBLIQ\n\t};\n\n\tvar asinz = function(x) {\n\t  if (Math.abs(x) > 1) {\n\t    x = (x > 1) ? 1 : -1;\n\t  }\n\t  return Math.asin(x);\n\t};\n\n\tfunction init$14() {\n\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2);\n\t  this.e3 = Math.sqrt(this.es);\n\n\t  this.sin_po = Math.sin(this.lat1);\n\t  this.cos_po = Math.cos(this.lat1);\n\t  this.t1 = this.sin_po;\n\t  this.con = this.sin_po;\n\t  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n\t  this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  this.sin_po = Math.sin(this.lat2);\n\t  this.cos_po = Math.cos(this.lat2);\n\t  this.t2 = this.sin_po;\n\t  this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n\t  this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  this.sin_po = Math.sin(this.lat0);\n\t  this.cos_po = Math.cos(this.lat0);\n\t  this.t3 = this.sin_po;\n\t  this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n\t    this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n\t  }\n\t  else {\n\t    this.ns0 = this.con;\n\t  }\n\t  this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n\t  this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n\t}\n\n\t/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n\t  -------------------------------------------------------------------*/\n\tfunction forward$13(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  this.sin_phi = Math.sin(lat);\n\t  this.cos_phi = Math.cos(lat);\n\n\t  var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n\t  var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n\t  var theta = this.ns0 * adjust_lon(lon - this.long0);\n\t  var x = rh1 * Math.sin(theta) + this.x0;\n\t  var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$13(p) {\n\t  var rh1, qs, con, theta, lon, lat;\n\n\t  p.x -= this.x0;\n\t  p.y = this.rh - p.y + this.y0;\n\t  if (this.ns0 >= 0) {\n\t    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = -1;\n\t  }\n\t  theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2(con * p.x, con * p.y);\n\t  }\n\t  con = rh1 * this.ns0 / this.a;\n\t  if (this.sphere) {\n\t    lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n\t  }\n\t  else {\n\t    qs = (this.c - con * con) / this.ns0;\n\t    lat = this.phi1z(this.e3, qs);\n\t  }\n\n\t  lon = adjust_lon(theta / this.ns0 + this.long0);\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\t/* Function to compute phi1, the latitude for the inverse of the\n\t   Albers Conical Equal-Area projection.\n\t-------------------------------------------*/\n\tfunction phi1z(eccent, qs) {\n\t  var sinphi, cosphi, con, com, dphi;\n\t  var phi = asinz(0.5 * qs);\n\t  if (eccent < EPSLN) {\n\t    return phi;\n\t  }\n\n\t  var eccnts = eccent * eccent;\n\t  for (var i = 1; i <= 25; i++) {\n\t    sinphi = Math.sin(phi);\n\t    cosphi = Math.cos(phi);\n\t    con = eccent * sinphi;\n\t    com = 1 - con * con;\n\t    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n\t    phi = phi + dphi;\n\t    if (Math.abs(dphi) <= 1e-7) {\n\t      return phi;\n\t    }\n\t  }\n\t  return null;\n\t}\n\n\tvar names$15 = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\n\tvar aea = {\n\t  init: init$14,\n\t  forward: forward$13,\n\t  inverse: inverse$13,\n\t  names: names$15,\n\t  phi1z: phi1z\n\t};\n\n\t/*\n\t  reference:\n\t    Wolfram Mathworld \"Gnomonic Projection\"\n\t    http://mathworld.wolfram.com/GnomonicProjection.html\n\t    Accessed: 12th November 2009\n\t  */\n\tfunction init$15() {\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.sin_p14 = Math.sin(this.lat0);\n\t  this.cos_p14 = Math.cos(this.lat0);\n\t  // Approximation for projecting points to the horizon (infinity)\n\t  this.infinity_dist = 1000 * this.a;\n\t  this.rc = 1;\n\t}\n\n\t/* Gnomonic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$14(p) {\n\t  var sinphi, cosphi; /* sin and cos value        */\n\t  var dlon; /* delta longitude value      */\n\t  var coslon; /* cos of longitude        */\n\t  var ksp; /* scale factor          */\n\t  var g;\n\t  var x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  dlon = adjust_lon(lon - this.long0);\n\n\t  sinphi = Math.sin(lat);\n\t  cosphi = Math.cos(lat);\n\n\t  coslon = Math.cos(dlon);\n\t  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n\t  ksp = 1;\n\t  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n\t    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n\t    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n\t  }\n\t  else {\n\n\t    // Point is in the opposing hemisphere and is unprojectable\n\t    // We still need to return a reasonable point, so we project\n\t    // to infinity, on a bearing\n\t    // equivalent to the northern hemisphere equivalent\n\t    // This is a reasonable approximation for short shapes and lines that\n\t    // straddle the horizon.\n\n\t    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n\t    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$14(p) {\n\t  var rh; /* Rho */\n\t  var sinc, cosc;\n\t  var c;\n\t  var lon, lat;\n\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  p.x /= this.k0;\n\t  p.y /= this.k0;\n\n\t  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n\t    c = Math.atan2(rh, this.rc);\n\t    sinc = Math.sin(c);\n\t    cosc = Math.cos(c);\n\n\t    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n\t    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n\t    lon = adjust_lon(this.long0 + lon);\n\t  }\n\t  else {\n\t    lat = this.phic0;\n\t    lon = 0;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$16 = [\"gnom\"];\n\tvar gnom = {\n\t  init: init$15,\n\t  forward: forward$14,\n\t  inverse: inverse$14,\n\t  names: names$16\n\t};\n\n\tvar iqsfnz = function(eccent, q) {\n\t  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n\t  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n\t    if (q < 0) {\n\t      return (-1 * HALF_PI);\n\t    }\n\t    else {\n\t      return HALF_PI;\n\t    }\n\t  }\n\t  //var phi = 0.5* q/(1-eccent*eccent);\n\t  var phi = Math.asin(0.5 * q);\n\t  var dphi;\n\t  var sin_phi;\n\t  var cos_phi;\n\t  var con;\n\t  for (var i = 0; i < 30; i++) {\n\t    sin_phi = Math.sin(phi);\n\t    cos_phi = Math.cos(phi);\n\t    con = eccent * sin_phi;\n\t    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\n\t  //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n\t  return NaN;\n\t};\n\n\t/*\n\t  reference:\n\t    \"Cartographic Projection Procedures for the UNIX Environment-\n\t    A User's Manual\" by Gerald I. Evenden,\n\t    USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n\t*/\n\tfunction init$16() {\n\t  //no-op\n\t  if (!this.sphere) {\n\t    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n\t  }\n\t}\n\n\t/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n\t    ------------------------------------------------------------*/\n\tfunction forward$15(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var x, y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  if (this.sphere) {\n\t    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n\t    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n\t  }\n\t  else {\n\t    var qs = qsfnz(this.e, Math.sin(lat));\n\t    x = this.x0 + this.a * this.k0 * dlon;\n\t    y = this.y0 + this.a * qs * 0.5 / this.k0;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n\t    ------------------------------------------------------------*/\n\tfunction inverse$15(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var lon, lat;\n\n\t  if (this.sphere) {\n\t    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n\t    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n\t  }\n\t  else {\n\t    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n\t    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$17 = [\"cea\"];\n\tvar cea = {\n\t  init: init$16,\n\t  forward: forward$15,\n\t  inverse: inverse$15,\n\t  names: names$17\n\t};\n\n\tfunction init$17() {\n\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  this.lat0 = this.lat0 || 0;\n\t  this.long0 = this.long0 || 0;\n\t  this.lat_ts = this.lat_ts || 0;\n\t  this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n\t  this.rc = Math.cos(this.lat_ts);\n\t}\n\n\t// forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$16(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var dlat = adjust_lat(lat - this.lat0);\n\t  p.x = this.x0 + (this.a * dlon * this.rc);\n\t  p.y = this.y0 + (this.a * dlat);\n\t  return p;\n\t}\n\n\t// inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$16(p) {\n\n\t  var x = p.x;\n\t  var y = p.y;\n\n\t  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n\t  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n\t  return p;\n\t}\n\n\tvar names$18 = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\n\tvar eqc = {\n\t  init: init$17,\n\t  forward: forward$16,\n\t  inverse: inverse$16,\n\t  names: names$18\n\t};\n\n\tvar MAX_ITER$2 = 20;\n\n\tfunction init$18() {\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n\t  this.e = Math.sqrt(this.es);\n\t  this.e0 = e0fn(this.es);\n\t  this.e1 = e1fn(this.es);\n\t  this.e2 = e2fn(this.es);\n\t  this.e3 = e3fn(this.es);\n\t  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n\t}\n\n\t/* Polyconic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$17(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var x, y, el;\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  el = dlon * Math.sin(lat);\n\t  if (this.sphere) {\n\t    if (Math.abs(lat) <= EPSLN) {\n\t      x = this.a * dlon;\n\t      y = -1 * this.a * this.lat0;\n\t    }\n\t    else {\n\t      x = this.a * Math.sin(el) / Math.tan(lat);\n\t      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(lat) <= EPSLN) {\n\t      x = this.a * dlon;\n\t      y = -1 * this.ml0;\n\t    }\n\t    else {\n\t      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n\t      x = nl * Math.sin(el);\n\t      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n\t    }\n\n\t  }\n\t  p.x = x + this.x0;\n\t  p.y = y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$17(p) {\n\t  var lon, lat, x, y, i;\n\t  var al, bl;\n\t  var phi, dphi;\n\t  x = p.x - this.x0;\n\t  y = p.y - this.y0;\n\n\t  if (this.sphere) {\n\t    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n\t      lon = adjust_lon(x / this.a + this.long0);\n\t      lat = 0;\n\t    }\n\t    else {\n\t      al = this.lat0 + y / this.a;\n\t      bl = x * x / this.a / this.a + al * al;\n\t      phi = al;\n\t      var tanphi;\n\t      for (i = MAX_ITER$2; i; --i) {\n\t        tanphi = Math.tan(phi);\n\t        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n\t        phi += dphi;\n\t        if (Math.abs(dphi) <= EPSLN) {\n\t          lat = phi;\n\t          break;\n\t        }\n\t      }\n\t      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(y + this.ml0) <= EPSLN) {\n\t      lat = 0;\n\t      lon = adjust_lon(this.long0 + x / this.a);\n\t    }\n\t    else {\n\n\t      al = (this.ml0 + y) / this.a;\n\t      bl = x * x / this.a / this.a + al * al;\n\t      phi = al;\n\t      var cl, mln, mlnp, ma;\n\t      var con;\n\t      for (i = MAX_ITER$2; i; --i) {\n\t        con = this.e * Math.sin(phi);\n\t        cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n\t        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\t        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n\t        ma = mln / this.a;\n\t        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n\t        phi -= dphi;\n\t        if (Math.abs(dphi) <= EPSLN) {\n\t          lat = phi;\n\t          break;\n\t        }\n\t      }\n\n\t      //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n\t      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n\t      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n\t    }\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$19 = [\"Polyconic\", \"poly\"];\n\tvar poly = {\n\t  init: init$18,\n\t  forward: forward$17,\n\t  inverse: inverse$17,\n\t  names: names$19\n\t};\n\n\t/*\n\t  reference\n\t    Department of Land and Survey Technical Circular 1973/32\n\t      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n\t    OSG Technical Report 4.1\n\t      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n\t  */\n\n\t/**\n\t * iterations: Number of iterations to refine inverse transform.\n\t *     0 -> km accuracy\n\t *     1 -> m accuracy -- suitable for most mapping applications\n\t *     2 -> mm accuracy\n\t */\n\n\n\tfunction init$19() {\n\t  this.A = [];\n\t  this.A[1] = 0.6399175073;\n\t  this.A[2] = -0.1358797613;\n\t  this.A[3] = 0.063294409;\n\t  this.A[4] = -0.02526853;\n\t  this.A[5] = 0.0117879;\n\t  this.A[6] = -0.0055161;\n\t  this.A[7] = 0.0026906;\n\t  this.A[8] = -0.001333;\n\t  this.A[9] = 0.00067;\n\t  this.A[10] = -0.00034;\n\n\t  this.B_re = [];\n\t  this.B_im = [];\n\t  this.B_re[1] = 0.7557853228;\n\t  this.B_im[1] = 0;\n\t  this.B_re[2] = 0.249204646;\n\t  this.B_im[2] = 0.003371507;\n\t  this.B_re[3] = -0.001541739;\n\t  this.B_im[3] = 0.041058560;\n\t  this.B_re[4] = -0.10162907;\n\t  this.B_im[4] = 0.01727609;\n\t  this.B_re[5] = -0.26623489;\n\t  this.B_im[5] = -0.36249218;\n\t  this.B_re[6] = -0.6870983;\n\t  this.B_im[6] = -1.1651967;\n\n\t  this.C_re = [];\n\t  this.C_im = [];\n\t  this.C_re[1] = 1.3231270439;\n\t  this.C_im[1] = 0;\n\t  this.C_re[2] = -0.577245789;\n\t  this.C_im[2] = -0.007809598;\n\t  this.C_re[3] = 0.508307513;\n\t  this.C_im[3] = -0.112208952;\n\t  this.C_re[4] = -0.15094762;\n\t  this.C_im[4] = 0.18200602;\n\t  this.C_re[5] = 1.01418179;\n\t  this.C_im[5] = 1.64497696;\n\t  this.C_re[6] = 1.9660549;\n\t  this.C_im[6] = 2.5127645;\n\n\t  this.D = [];\n\t  this.D[1] = 1.5627014243;\n\t  this.D[2] = 0.5185406398;\n\t  this.D[3] = -0.03333098;\n\t  this.D[4] = -0.1052906;\n\t  this.D[5] = -0.0368594;\n\t  this.D[6] = 0.007317;\n\t  this.D[7] = 0.01220;\n\t  this.D[8] = 0.00394;\n\t  this.D[9] = -0.0013;\n\t}\n\n\t/**\n\t    New Zealand Map Grid Forward  - long/lat to x/y\n\t    long/lat in radians\n\t  */\n\tfunction forward$18(p) {\n\t  var n;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lat = lat - this.lat0;\n\t  var delta_lon = lon - this.long0;\n\n\t  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda\n\t  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n\t  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n\t  var d_lambda = delta_lon;\n\t  var d_phi_n = 1; // d_phi^0\n\n\t  var d_psi = 0;\n\t  for (n = 1; n <= 10; n++) {\n\t    d_phi_n = d_phi_n * d_phi;\n\t    d_psi = d_psi + this.A[n] * d_phi_n;\n\t  }\n\n\t  // 2. Calculate theta\n\t  var th_re = d_psi;\n\t  var th_im = d_lambda;\n\n\t  // 3. Calculate z\n\t  var th_n_re = 1;\n\t  var th_n_im = 0; // theta^0\n\t  var th_n_re1;\n\t  var th_n_im1;\n\n\t  var z_re = 0;\n\t  var z_im = 0;\n\t  for (n = 1; n <= 6; n++) {\n\t    th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t    th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t    th_n_re = th_n_re1;\n\t    th_n_im = th_n_im1;\n\t    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n\t    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n\t  }\n\n\t  // 4. Calculate easting and northing\n\t  p.x = (z_im * this.a) + this.x0;\n\t  p.y = (z_re * this.a) + this.y0;\n\n\t  return p;\n\t}\n\n\t/**\n\t    New Zealand Map Grid Inverse  -  x/y to long/lat\n\t  */\n\tfunction inverse$18(p) {\n\t  var n;\n\t  var x = p.x;\n\t  var y = p.y;\n\n\t  var delta_x = x - this.x0;\n\t  var delta_y = y - this.y0;\n\n\t  // 1. Calculate z\n\t  var z_re = delta_y / this.a;\n\t  var z_im = delta_x / this.a;\n\n\t  // 2a. Calculate theta - first approximation gives km accuracy\n\t  var z_n_re = 1;\n\t  var z_n_im = 0; // z^0\n\t  var z_n_re1;\n\t  var z_n_im1;\n\n\t  var th_re = 0;\n\t  var th_im = 0;\n\t  for (n = 1; n <= 6; n++) {\n\t    z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n\t    z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n\t    z_n_re = z_n_re1;\n\t    z_n_im = z_n_im1;\n\t    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n\t    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n\t  }\n\n\t  // 2b. Iterate to refine the accuracy of the calculation\n\t  //        0 iterations gives km accuracy\n\t  //        1 iteration gives m accuracy -- good enough for most mapping applications\n\t  //        2 iterations bives mm accuracy\n\t  for (var i = 0; i < this.iterations; i++) {\n\t    var th_n_re = th_re;\n\t    var th_n_im = th_im;\n\t    var th_n_re1;\n\t    var th_n_im1;\n\n\t    var num_re = z_re;\n\t    var num_im = z_im;\n\t    for (n = 2; n <= 6; n++) {\n\t      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t      th_n_re = th_n_re1;\n\t      th_n_im = th_n_im1;\n\t      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n\t      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n\t    }\n\n\t    th_n_re = 1;\n\t    th_n_im = 0;\n\t    var den_re = this.B_re[1];\n\t    var den_im = this.B_im[1];\n\t    for (n = 2; n <= 6; n++) {\n\t      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t      th_n_re = th_n_re1;\n\t      th_n_im = th_n_im1;\n\t      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n\t      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n\t    }\n\n\t    // Complex division\n\t    var den2 = den_re * den_re + den_im * den_im;\n\t    th_re = (num_re * den_re + num_im * den_im) / den2;\n\t    th_im = (num_im * den_re - num_re * den_im) / den2;\n\t  }\n\n\t  // 3. Calculate d_phi              ...                                    // and d_lambda\n\t  var d_psi = th_re;\n\t  var d_lambda = th_im;\n\t  var d_psi_n = 1; // d_psi^0\n\n\t  var d_phi = 0;\n\t  for (n = 1; n <= 9; n++) {\n\t    d_psi_n = d_psi_n * d_psi;\n\t    d_phi = d_phi + this.D[n] * d_psi_n;\n\t  }\n\n\t  // 4. Calculate latitude and longitude\n\t  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n\t  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n\t  var lon = this.long0 + d_lambda;\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$20 = [\"New_Zealand_Map_Grid\", \"nzmg\"];\n\tvar nzmg = {\n\t  init: init$19,\n\t  forward: forward$18,\n\t  inverse: inverse$18,\n\t  names: names$20\n\t};\n\n\t/*\n\t  reference\n\t    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n\t    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n\t  */\n\n\n\t/* Initialize the Miller Cylindrical projection\n\t  -------------------------------------------*/\n\tfunction init$20() {\n\t  //no-op\n\t}\n\n\t/* Miller Cylindrical forward equations--mapping lat,long to x,y\n\t    ------------------------------------------------------------*/\n\tfunction forward$19(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var x = this.x0 + this.a * dlon;\n\t  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n\t    ------------------------------------------------------------*/\n\tfunction inverse$19(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\n\t  var lon = adjust_lon(this.long0 + p.x / this.a);\n\t  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$21 = [\"Miller_Cylindrical\", \"mill\"];\n\tvar mill = {\n\t  init: init$20,\n\t  forward: forward$19,\n\t  inverse: inverse$19,\n\t  names: names$21\n\t};\n\n\tvar MAX_ITER$3 = 20;\n\tfunction init$21() {\n\t  /* Place parameters in static storage for common use\n\t    -------------------------------------------------*/\n\n\n\t  if (!this.sphere) {\n\t    this.en = pj_enfn(this.es);\n\t  }\n\t  else {\n\t    this.n = 1;\n\t    this.m = 0;\n\t    this.es = 0;\n\t    this.C_y = Math.sqrt((this.m + 1) / this.n);\n\t    this.C_x = this.C_y / (this.m + 1);\n\t  }\n\n\t}\n\n\t/* Sinusoidal forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------*/\n\tfunction forward$20(p) {\n\t  var x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t    -----------------*/\n\t  lon = adjust_lon(lon - this.long0);\n\n\t  if (this.sphere) {\n\t    if (!this.m) {\n\t      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n\t    }\n\t    else {\n\t      var k = this.n * Math.sin(lat);\n\t      for (var i = MAX_ITER$3; i; --i) {\n\t        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n\t        lat -= V;\n\t        if (Math.abs(V) < EPSLN) {\n\t          break;\n\t        }\n\t      }\n\t    }\n\t    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n\t    y = this.a * this.C_y * lat;\n\n\t  }\n\t  else {\n\n\t    var s = Math.sin(lat);\n\t    var c = Math.cos(lat);\n\t    y = this.a * pj_mlfn(lat, s, c, this.en);\n\t    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$20(p) {\n\t  var lat, temp, lon, s;\n\n\t  p.x -= this.x0;\n\t  lon = p.x / this.a;\n\t  p.y -= this.y0;\n\t  lat = p.y / this.a;\n\n\t  if (this.sphere) {\n\t    lat /= this.C_y;\n\t    lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n\t    if (this.m) {\n\t      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n\t    }\n\t    else if (this.n !== 1) {\n\t      lat = asinz(Math.sin(lat) / this.n);\n\t    }\n\t    lon = adjust_lon(lon + this.long0);\n\t    lat = adjust_lat(lat);\n\t  }\n\t  else {\n\t    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n\t    s = Math.abs(lat);\n\t    if (s < HALF_PI) {\n\t      s = Math.sin(lat);\n\t      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n\t      //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n\t      lon = adjust_lon(temp);\n\t    }\n\t    else if ((s - EPSLN) < HALF_PI) {\n\t      lon = this.long0;\n\t    }\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$22 = [\"Sinusoidal\", \"sinu\"];\n\tvar sinu = {\n\t  init: init$21,\n\t  forward: forward$20,\n\t  inverse: inverse$20,\n\t  names: names$22\n\t};\n\n\tfunction init$22() {}\n\t/* Mollweide forward equations--mapping lat,long to x,y\n\t    ----------------------------------------------------*/\n\tfunction forward$21(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  var theta = lat;\n\t  var con = Math.PI * Math.sin(lat);\n\n\t  /* Iterate using the Newton-Raphson method to find theta\n\t      -----------------------------------------------------*/\n\t  for (var i = 0; true; i++) {\n\t    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n\t    theta += delta_theta;\n\t    if (Math.abs(delta_theta) < EPSLN) {\n\t      break;\n\t    }\n\t  }\n\t  theta /= 2;\n\n\t  /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n\t       this is done here because of precision problems with \"cos(theta)\"\n\t       --------------------------------------------------------------------------*/\n\t  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n\t    delta_lon = 0;\n\t  }\n\t  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n\t  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$21(p) {\n\t  var theta;\n\t  var arg;\n\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  arg = p.y / (1.4142135623731 * this.a);\n\n\t  /* Because of division by zero problems, 'arg' can not be 1.  Therefore\n\t       a number very close to one is used instead.\n\t       -------------------------------------------------------------------*/\n\t  if (Math.abs(arg) > 0.999999999999) {\n\t    arg = 0.999999999999;\n\t  }\n\t  theta = Math.asin(arg);\n\t  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n\t  if (lon < (-Math.PI)) {\n\t    lon = -Math.PI;\n\t  }\n\t  if (lon > Math.PI) {\n\t    lon = Math.PI;\n\t  }\n\t  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n\t  if (Math.abs(arg) > 1) {\n\t    arg = 1;\n\t  }\n\t  var lat = Math.asin(arg);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$23 = [\"Mollweide\", \"moll\"];\n\tvar moll = {\n\t  init: init$22,\n\t  forward: forward$21,\n\t  inverse: inverse$21,\n\t  names: names$23\n\t};\n\n\tfunction init$23() {\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  // Standard Parallels cannot be equal and on opposite sides of the equator\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\t  this.lat2 = this.lat2 || this.lat1;\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2);\n\t  this.e = Math.sqrt(this.es);\n\t  this.e0 = e0fn(this.es);\n\t  this.e1 = e1fn(this.es);\n\t  this.e2 = e2fn(this.es);\n\t  this.e3 = e3fn(this.es);\n\n\t  this.sinphi = Math.sin(this.lat1);\n\t  this.cosphi = Math.cos(this.lat1);\n\n\t  this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n\t  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n\t  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n\t    this.ns = this.sinphi;\n\t  }\n\t  else {\n\t    this.sinphi = Math.sin(this.lat2);\n\t    this.cosphi = Math.cos(this.lat2);\n\t    this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n\t    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n\t    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n\t  }\n\t  this.g = this.ml1 + this.ms1 / this.ns;\n\t  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n\t  this.rh = this.a * (this.g - this.ml0);\n\t}\n\n\t/* Equidistant Conic forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------*/\n\tfunction forward$22(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var rh1;\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  if (this.sphere) {\n\t    rh1 = this.a * (this.g - lat);\n\t  }\n\t  else {\n\t    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n\t    rh1 = this.a * (this.g - ml);\n\t  }\n\t  var theta = this.ns * adjust_lon(lon - this.long0);\n\t  var x = this.x0 + rh1 * Math.sin(theta);\n\t  var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$22(p) {\n\t  p.x -= this.x0;\n\t  p.y = this.rh - p.y + this.y0;\n\t  var con, rh1, lat, lon;\n\t  if (this.ns >= 0) {\n\t    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = -1;\n\t  }\n\t  var theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2(con * p.x, con * p.y);\n\t  }\n\n\t  if (this.sphere) {\n\t    lon = adjust_lon(this.long0 + theta / this.ns);\n\t    lat = adjust_lat(this.g - rh1 / this.a);\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    var ml = this.g - rh1 / this.a;\n\t    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n\t    lon = adjust_lon(this.long0 + theta / this.ns);\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\n\t}\n\n\tvar names$24 = [\"Equidistant_Conic\", \"eqdc\"];\n\tvar eqdc = {\n\t  init: init$23,\n\t  forward: forward$22,\n\t  inverse: inverse$22,\n\t  names: names$24\n\t};\n\n\t/* Initialize the Van Der Grinten projection\n\t  ----------------------------------------*/\n\tfunction init$24() {\n\t  //this.R = 6370997; //Radius of earth\n\t  this.R = this.a;\n\t}\n\n\tfunction forward$23(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  /* Forward equations\n\t    -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var x, y;\n\n\t  if (Math.abs(lat) <= EPSLN) {\n\t    x = this.x0 + this.R * dlon;\n\t    y = this.y0;\n\t  }\n\t  var theta = asinz(2 * Math.abs(lat / Math.PI));\n\t  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n\t    x = this.x0;\n\t    if (lat >= 0) {\n\t      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n\t    }\n\t    else {\n\t      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n\t    }\n\t    //  return(OK);\n\t  }\n\t  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n\t  var asq = al * al;\n\t  var sinth = Math.sin(theta);\n\t  var costh = Math.cos(theta);\n\n\t  var g = costh / (sinth + costh - 1);\n\t  var gsq = g * g;\n\t  var m = g * (2 / sinth - 1);\n\t  var msq = m * m;\n\t  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n\t  if (dlon < 0) {\n\t    con = -con;\n\t  }\n\t  x = this.x0 + con;\n\t  //con = Math.abs(con / (Math.PI * this.R));\n\t  var q = asq + g;\n\t  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n\t  if (lat >= 0) {\n\t    //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n\t    y = this.y0 + con;\n\t  }\n\t  else {\n\t    //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n\t    y = this.y0 - con;\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Van Der Grinten inverse equations--mapping x,y to lat/long\n\t  ---------------------------------------------------------*/\n\tfunction inverse$23(p) {\n\t  var lon, lat;\n\t  var xx, yy, xys, c1, c2, c3;\n\t  var a1;\n\t  var m1;\n\t  var con;\n\t  var th1;\n\t  var d;\n\n\t  /* inverse equations\n\t    -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  con = Math.PI * this.R;\n\t  xx = p.x / con;\n\t  yy = p.y / con;\n\t  xys = xx * xx + yy * yy;\n\t  c1 = -Math.abs(yy) * (1 + xys);\n\t  c2 = c1 - 2 * yy * yy + xx * xx;\n\t  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n\t  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n\t  a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n\t  m1 = 2 * Math.sqrt(-a1 / 3);\n\t  con = ((3 * d) / a1) / m1;\n\t  if (Math.abs(con) > 1) {\n\t    if (con >= 0) {\n\t      con = 1;\n\t    }\n\t    else {\n\t      con = -1;\n\t    }\n\t  }\n\t  th1 = Math.acos(con) / 3;\n\t  if (p.y >= 0) {\n\t    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n\t  }\n\t  else {\n\t    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n\t  }\n\n\t  if (Math.abs(xx) < EPSLN) {\n\t    lon = this.long0;\n\t  }\n\t  else {\n\t    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$25 = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\n\tvar vandg = {\n\t  init: init$24,\n\t  forward: forward$23,\n\t  inverse: inverse$23,\n\t  names: names$25\n\t};\n\n\tfunction init$25() {\n\t  this.sin_p12 = Math.sin(this.lat0);\n\t  this.cos_p12 = Math.cos(this.lat0);\n\t}\n\n\tfunction forward$24(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var sinphi = Math.sin(p.y);\n\t  var cosphi = Math.cos(p.y);\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n\t  if (this.sphere) {\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North Pole case\n\t      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n\t      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South Pole case\n\t      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n\t      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else {\n\t      //default case\n\t      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n\t      c = Math.acos(cos_c);\n\t      kp = c / Math.sin(c);\n\t      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n\t      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n\t      return p;\n\t    }\n\t  }\n\t  else {\n\t    e0 = e0fn(this.es);\n\t    e1 = e1fn(this.es);\n\t    e2 = e2fn(this.es);\n\t    e3 = e3fn(this.es);\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North Pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n\t      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n\t      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South Pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n\t      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n\t      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else {\n\t      //Default case\n\t      tanphi = sinphi / cosphi;\n\t      Nl1 = gN(this.a, this.e, this.sin_p12);\n\t      Nl = gN(this.a, this.e, sinphi);\n\t      psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n\t      Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n\t      if (Az === 0) {\n\t        s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n\t      }\n\t      else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n\t        s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n\t      }\n\t      else {\n\t        s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n\t      }\n\t      G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n\t      H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n\t      GH = G * H;\n\t      Hs = H * H;\n\t      s2 = s * s;\n\t      s3 = s2 * s;\n\t      s4 = s3 * s;\n\t      s5 = s4 * s;\n\t      c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n\t      p.x = this.x0 + c * Math.sin(Az);\n\t      p.y = this.y0 + c * Math.cos(Az);\n\t      return p;\n\t    }\n\t  }\n\n\n\t}\n\n\tfunction inverse$24(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F;\n\t  if (this.sphere) {\n\t    rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    if (rh > (2 * HALF_PI * this.a)) {\n\t      return;\n\t    }\n\t    z = rh / this.a;\n\n\t    sinz = Math.sin(z);\n\t    cosz = Math.cos(z);\n\n\t    lon = this.long0;\n\t    if (Math.abs(rh) <= EPSLN) {\n\t      lat = this.lat0;\n\t    }\n\t    else {\n\t      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n\t      con = Math.abs(this.lat0) - HALF_PI;\n\t      if (Math.abs(con) <= EPSLN) {\n\t        if (this.lat0 >= 0) {\n\t          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n\t        }\n\t        else {\n\t          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n\t        }\n\t      }\n\t      else {\n\t        /*con = cosz - this.sin_p12 * Math.sin(lat);\n\t        if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n\t          //no-op, just keep the lon value as is\n\t        } else {\n\t          var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n\t          lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n\t        }*/\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n\t      }\n\t    }\n\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    e0 = e0fn(this.es);\n\t    e1 = e1fn(this.es);\n\t    e2 = e2fn(this.es);\n\t    e3 = e3fn(this.es);\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      M = Mlp - rh;\n\t      lat = imlfn(M / this.a, e0, e1, e2, e3);\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      M = rh - Mlp;\n\n\t      lat = imlfn(M / this.a, e0, e1, e2, e3);\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    else {\n\t      //default case\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      Az = Math.atan2(p.x, p.y);\n\t      N1 = gN(this.a, this.e, this.sin_p12);\n\t      cosAz = Math.cos(Az);\n\t      tmp = this.e * this.cos_p12 * cosAz;\n\t      A = -tmp * tmp / (1 - this.es);\n\t      B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n\t      D = rh / N1;\n\t      Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n\t      F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n\t      psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n\t      lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n\t      lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t  }\n\n\t}\n\n\tvar names$26 = [\"Azimuthal_Equidistant\", \"aeqd\"];\n\tvar aeqd = {\n\t  init: init$25,\n\t  forward: forward$24,\n\t  inverse: inverse$24,\n\t  names: names$26\n\t};\n\n\tfunction init$26() {\n\t  //double temp;      /* temporary variable    */\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.sin_p14 = Math.sin(this.lat0);\n\t  this.cos_p14 = Math.cos(this.lat0);\n\t}\n\n\t/* Orthographic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$25(p) {\n\t  var sinphi, cosphi; /* sin and cos value        */\n\t  var dlon; /* delta longitude value      */\n\t  var coslon; /* cos of longitude        */\n\t  var ksp; /* scale factor          */\n\t  var g, x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  dlon = adjust_lon(lon - this.long0);\n\n\t  sinphi = Math.sin(lat);\n\t  cosphi = Math.cos(lat);\n\n\t  coslon = Math.cos(dlon);\n\t  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n\t  ksp = 1;\n\t  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n\t    x = this.a * ksp * cosphi * Math.sin(dlon);\n\t    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$25(p) {\n\t  var rh; /* height above ellipsoid      */\n\t  var z; /* angle          */\n\t  var sinz, cosz; /* sin of z and cos of z      */\n\t  var con;\n\t  var lon, lat;\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  z = asinz(rh / this.a);\n\n\t  sinz = Math.sin(z);\n\t  cosz = Math.cos(z);\n\n\t  lon = this.long0;\n\t  if (Math.abs(rh) <= EPSLN) {\n\t    lat = this.lat0;\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n\t  con = Math.abs(this.lat0) - HALF_PI;\n\t  if (Math.abs(con) <= EPSLN) {\n\t    if (this.lat0 >= 0) {\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n\t    }\n\t    else {\n\t      lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n\t    }\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$27 = [\"ortho\"];\n\tvar ortho = {\n\t  init: init$26,\n\t  forward: forward$25,\n\t  inverse: inverse$25,\n\t  names: names$27\n\t};\n\n\tvar includedProjections = function(proj4){\n\t  proj4.Proj.projections.add(tmerc);\n\t  proj4.Proj.projections.add(etmerc);\n\t  proj4.Proj.projections.add(utm);\n\t  proj4.Proj.projections.add(sterea);\n\t  proj4.Proj.projections.add(stere);\n\t  proj4.Proj.projections.add(somerc);\n\t  proj4.Proj.projections.add(omerc);\n\t  proj4.Proj.projections.add(lcc);\n\t  proj4.Proj.projections.add(krovak);\n\t  proj4.Proj.projections.add(cass);\n\t  proj4.Proj.projections.add(laea);\n\t  proj4.Proj.projections.add(aea);\n\t  proj4.Proj.projections.add(gnom);\n\t  proj4.Proj.projections.add(cea);\n\t  proj4.Proj.projections.add(eqc);\n\t  proj4.Proj.projections.add(poly);\n\t  proj4.Proj.projections.add(nzmg);\n\t  proj4.Proj.projections.add(mill);\n\t  proj4.Proj.projections.add(sinu);\n\t  proj4.Proj.projections.add(moll);\n\t  proj4.Proj.projections.add(eqdc);\n\t  proj4.Proj.projections.add(vandg);\n\t  proj4.Proj.projections.add(aeqd);\n\t  proj4.Proj.projections.add(ortho);\n\t};\n\n\tproj4$1.defaultDatum = 'WGS84'; //default datum\n\tproj4$1.Proj = Projection$1;\n\tproj4$1.WGS84 = new proj4$1.Proj('WGS84');\n\tproj4$1.Point = Point;\n\tproj4$1.toPoint = toPoint;\n\tproj4$1.defs = defs;\n\tproj4$1.transform = transform;\n\tproj4$1.mgrs = mgrs;\n\tproj4$1.version = version;\n\tincludedProjections(proj4$1);\n\n\treturn proj4$1;\n\n})));\n\n},{}],286:[function(require,module,exports){\nexports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n  return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n  return exports.privateDecrypt(key, buf, true)\n}\n\n},{\"./privateDecrypt\":288,\"./publicEncrypt\":289}],287:[function(require,module,exports){\nvar createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n  var t = Buffer.alloc(0)\n  var i = 0\n  var c\n  while (t.length < len) {\n    c = i2ops(i++)\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n  }\n  return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n  var out = Buffer.allocUnsafe(4)\n  out.writeUInt32BE(c, 0)\n  return out\n}\n\n},{\"create-hash\":188,\"safe-buffer\":318}],288:[function(require,module,exports){\nvar parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n  var padding\n  if (privateKey.padding) {\n    padding = privateKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n\n  var key = parseKeys(privateKey)\n  var k = key.modulus.byteLength()\n  if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error')\n  }\n  var msg\n  if (reverse) {\n    msg = withPublic(new BN(enc), key)\n  } else {\n    msg = crt(enc, key)\n  }\n  var zBuffer = Buffer.alloc(k - msg.length)\n  msg = Buffer.concat([zBuffer, msg], k)\n  if (padding === 4) {\n    return oaep(key, msg)\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    return msg\n  } else {\n    throw new Error('unknown padding')\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  if (msg[0] !== 0) {\n    throw new Error('decryption error')\n  }\n  var maskedSeed = msg.slice(1, hLen + 1)\n  var maskedDb = msg.slice(hLen + 1)\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error')\n  }\n  var i = hLen\n  while (db[i] === 0) {\n    i++\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error')\n  }\n  return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n  var p1 = msg.slice(0, 2)\n  var i = 2\n  var status = 0\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++\n      break\n    }\n  }\n  var ps = msg.slice(2, i - 1)\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n    status++\n  }\n  if (ps.length < 8) {\n    status++\n  }\n  if (status) {\n    throw new Error('decryption error')\n  }\n  return msg.slice(i)\n}\nfunction compare (a, b) {\n  a = Buffer.from(a)\n  b = Buffer.from(b)\n  var dif = 0\n  var len = a.length\n  if (a.length !== b.length) {\n    dif++\n    len = Math.min(a.length, b.length)\n  }\n  var i = -1\n  while (++i < len) {\n    dif += (a[i] ^ b[i])\n  }\n  return dif\n}\n\n},{\"./mgf\":287,\"./withPublic\":290,\"./xor\":291,\"bn.js\":147,\"browserify-rsa\":170,\"create-hash\":188,\"parse-asn1\":275,\"safe-buffer\":318}],289:[function(require,module,exports){\nvar parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n  var padding\n  if (publicKey.padding) {\n    padding = publicKey.padding\n  } else if (reverse) {\n    padding = 1\n  } else {\n    padding = 4\n  }\n  var key = parseKeys(publicKey)\n  var paddedMsg\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg)\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse)\n  } else if (padding === 3) {\n    paddedMsg = new BN(msg)\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus')\n    }\n  } else {\n    throw new Error('unknown padding')\n  }\n  if (reverse) {\n    return crt(paddedMsg, key)\n  } else {\n    return withPublic(paddedMsg, key)\n  }\n}\n\nfunction oaep (key, msg) {\n  var k = key.modulus.byteLength()\n  var mLen = msg.length\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n  var hLen = iHash.length\n  var hLen2 = 2 * hLen\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long')\n  }\n  var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n  var dblen = k - hLen - 1\n  var seed = randomBytes(hLen)\n  var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n  return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n  var mLen = msg.length\n  var k = key.modulus.byteLength()\n  if (mLen > k - 11) {\n    throw new Error('message too long')\n  }\n  var ps\n  if (reverse) {\n    ps = Buffer.alloc(k - mLen - 3, 0xff)\n  } else {\n    ps = nonZero(k - mLen - 3)\n  }\n  return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n  var out = Buffer.allocUnsafe(len)\n  var i = 0\n  var cache = randomBytes(len * 2)\n  var cur = 0\n  var num\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len * 2)\n      cur = 0\n    }\n    num = cache[cur++]\n    if (num) {\n      out[i++] = num\n    }\n  }\n  return out\n}\n\n},{\"./mgf\":287,\"./withPublic\":290,\"./xor\":291,\"bn.js\":147,\"browserify-rsa\":170,\"create-hash\":188,\"parse-asn1\":275,\"randombytes\":298,\"safe-buffer\":318}],290:[function(require,module,exports){\nvar BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n  return Buffer.from(paddedMsg\n    .toRed(BN.mont(key.modulus))\n    .redPow(new BN(key.publicExponent))\n    .fromRed()\n    .toArray())\n}\n\nmodule.exports = withPublic\n\n},{\"bn.js\":147,\"safe-buffer\":318}],291:[function(require,module,exports){\nmodule.exports = function xor (a, b) {\n  var len = a.length\n  var i = -1\n  while (++i < len) {\n    a[i] ^= b[i]\n  }\n  return a\n}\n\n},{}],292:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],293:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n  sep = sep || '&';\n  eq = eq || '=';\n  var obj = {};\n\n  if (typeof qs !== 'string' || qs.length === 0) {\n    return obj;\n  }\n\n  var regexp = /\\+/g;\n  qs = qs.split(sep);\n\n  var maxKeys = 1000;\n  if (options && typeof options.maxKeys === 'number') {\n    maxKeys = options.maxKeys;\n  }\n\n  var len = qs.length;\n  // maxKeys <= 0 means that we should not limit keys count\n  if (maxKeys > 0 && len > maxKeys) {\n    len = maxKeys;\n  }\n\n  for (var i = 0; i < len; ++i) {\n    var x = qs[i].replace(regexp, '%20'),\n        idx = x.indexOf(eq),\n        kstr, vstr, k, v;\n\n    if (idx >= 0) {\n      kstr = x.substr(0, idx);\n      vstr = x.substr(idx + 1);\n    } else {\n      kstr = x;\n      vstr = '';\n    }\n\n    k = decodeURIComponent(kstr);\n    v = decodeURIComponent(vstr);\n\n    if (!hasOwnProperty(obj, k)) {\n      obj[k] = v;\n    } else if (isArray(obj[k])) {\n      obj[k].push(v);\n    } else {\n      obj[k] = [obj[k], v];\n    }\n  }\n\n  return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\n},{}],294:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n  switch (typeof v) {\n    case 'string':\n      return v;\n\n    case 'boolean':\n      return v ? 'true' : 'false';\n\n    case 'number':\n      return isFinite(v) ? v : '';\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n  sep = sep || '&';\n  eq = eq || '=';\n  if (obj === null) {\n    obj = undefined;\n  }\n\n  if (typeof obj === 'object') {\n    return map(objectKeys(obj), function(k) {\n      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n      if (isArray(obj[k])) {\n        return map(obj[k], function(v) {\n          return ks + encodeURIComponent(stringifyPrimitive(v));\n        }).join(sep);\n      } else {\n        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n      }\n    }).join(sep);\n\n  }\n\n  if (!name) return '';\n  return encodeURIComponent(stringifyPrimitive(name)) + eq +\n         encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n  return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n  if (xs.map) return xs.map(f);\n  var res = [];\n  for (var i = 0; i < xs.length; i++) {\n    res.push(f(xs[i], i));\n  }\n  return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n  var res = [];\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n  }\n  return res;\n};\n\n},{}],295:[function(require,module,exports){\n'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n\n},{\"./decode\":293,\"./encode\":294}],296:[function(require,module,exports){\nvar inherits = require('inherits')\nvar EventEmitter = require('events').EventEmitter\n\nmodule.exports = Queue\nmodule.exports.default = Queue\n\nfunction Queue (options) {\n  if (!(this instanceof Queue)) {\n    return new Queue(options)\n  }\n\n  EventEmitter.call(this)\n  options = options || {}\n  this.concurrency = options.concurrency || Infinity\n  this.timeout = options.timeout || 0\n  this.autostart = options.autostart || false\n  this.results = options.results || null\n  this.pending = 0\n  this.session = 0\n  this.running = false\n  this.jobs = []\n  this.timers = {}\n}\ninherits(Queue, EventEmitter)\n\nvar arrayMethods = [\n  'pop',\n  'shift',\n  'indexOf',\n  'lastIndexOf'\n]\n\narrayMethods.forEach(function (method) {\n  Queue.prototype[method] = function () {\n    return Array.prototype[method].apply(this.jobs, arguments)\n  }\n})\n\nQueue.prototype.slice = function (begin, end) {\n  this.jobs = this.jobs.slice(begin, end)\n  return this\n}\n\nQueue.prototype.reverse = function () {\n  this.jobs.reverse()\n  return this\n}\n\nvar arrayAddMethods = [\n  'push',\n  'unshift',\n  'splice'\n]\n\narrayAddMethods.forEach(function (method) {\n  Queue.prototype[method] = function () {\n    var methodResult = Array.prototype[method].apply(this.jobs, arguments)\n    if (this.autostart) {\n      this.start()\n    }\n    return methodResult\n  }\n})\n\nObject.defineProperty(Queue.prototype, 'length', {\n  get: function () {\n    return this.pending + this.jobs.length\n  }\n})\n\nQueue.prototype.start = function (cb) {\n  if (cb) {\n    callOnErrorOrEnd.call(this, cb)\n  }\n\n  this.running = true\n\n  if (this.pending >= this.concurrency) {\n    return\n  }\n\n  if (this.jobs.length === 0) {\n    if (this.pending === 0) {\n      done.call(this)\n    }\n    return\n  }\n\n  var self = this\n  var job = this.jobs.shift()\n  var once = true\n  var session = this.session\n  var timeoutId = null\n  var didTimeout = false\n  var resultIndex = null\n  var timeout = job.timeout || this.timeout\n\n  function next (err, result) {\n    if (once && self.session === session) {\n      once = false\n      self.pending--\n      if (timeoutId !== null) {\n        delete self.timers[timeoutId]\n        clearTimeout(timeoutId)\n      }\n\n      if (err) {\n        self.emit('error', err, job)\n      } else if (didTimeout === false) {\n        if (resultIndex !== null) {\n          self.results[resultIndex] = Array.prototype.slice.call(arguments, 1)\n        }\n        self.emit('success', result, job)\n      }\n\n      if (self.session === session) {\n        if (self.pending === 0 && self.jobs.length === 0) {\n          done.call(self)\n        } else if (self.running) {\n          self.start()\n        }\n      }\n    }\n  }\n\n  if (timeout) {\n    timeoutId = setTimeout(function () {\n      didTimeout = true\n      if (self.listeners('timeout').length > 0) {\n        self.emit('timeout', next, job)\n      } else {\n        next()\n      }\n    }, timeout)\n    this.timers[timeoutId] = timeoutId\n  }\n\n  if (this.results) {\n    resultIndex = this.results.length\n    this.results[resultIndex] = null\n  }\n\n  this.pending++\n  self.emit('start', job)\n  var promise = job(next)\n  if (promise && promise.then && typeof promise.then === 'function') {\n    promise.then(function (result) {\n      return next(null, result)\n    }).catch(function (err) {\n      return next(err || true)\n    })\n  }\n\n  if (this.running && this.jobs.length > 0) {\n    this.start()\n  }\n}\n\nQueue.prototype.stop = function () {\n  this.running = false\n}\n\nQueue.prototype.end = function (err) {\n  clearTimers.call(this)\n  this.jobs.length = 0\n  this.pending = 0\n  done.call(this, err)\n}\n\nfunction clearTimers () {\n  for (var key in this.timers) {\n    var timeoutId = this.timers[key]\n    delete this.timers[key]\n    clearTimeout(timeoutId)\n  }\n}\n\nfunction callOnErrorOrEnd (cb) {\n  var self = this\n  this.on('error', onerror)\n  this.on('end', onend)\n\n  function onerror (err) { self.end(err) }\n  function onend (err) {\n    self.removeListener('error', onerror)\n    self.removeListener('end', onend)\n    cb(err, this.results)\n  }\n}\n\nfunction done (err) {\n  this.session++\n  this.running = false\n  this.emit('end', err)\n}\n\n},{\"events\":221,\"inherits\":262}],297:[function(require,module,exports){\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.quickselect = factory());\n}(this, (function () { 'use strict';\n\nfunction quickselect(arr, k, left, right, compare) {\n    quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n    while (right > left) {\n        if (right - left > 600) {\n            var n = right - left + 1;\n            var m = k - left + 1;\n            var z = Math.log(n);\n            var s = 0.5 * Math.exp(2 * z / 3);\n            var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n            var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n            var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n            quickselectStep(arr, k, newLeft, newRight, compare);\n        }\n\n        var t = arr[k];\n        var i = left;\n        var j = right;\n\n        swap(arr, left, k);\n        if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (compare(arr[i], t) < 0) i++;\n            while (compare(arr[j], t) > 0) j--;\n        }\n\n        if (compare(arr[left], t) === 0) swap(arr, left, j);\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n\n        if (j <= k) left = j + 1;\n        if (k <= j) right = j - 1;\n    }\n}\n\nfunction swap(arr, i, j) {\n    var tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n\nreturn quickselect;\n\n})));\n\n},{}],298:[function(require,module,exports){\n(function (process,global){\n'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n  throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n  var bytes = Buffer.allocUnsafe(size)\n\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n      for (var generated = 0; generated < size; generated += MAX_BYTES) {\n        // buffer.slice automatically checks if the end is past the end of\n        // the buffer so we don't have to here\n        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n      }\n    } else {\n      crypto.getRandomValues(bytes)\n    }\n  }\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":284,\"safe-buffer\":318}],299:[function(require,module,exports){\n(function (process,global){\n'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n  if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n    throw new TypeError('offset must be a number')\n  }\n\n  if (offset > kMaxUint32 || offset < 0) {\n    throw new TypeError('offset must be a uint32')\n  }\n\n  if (offset > kBufferMaxLength || offset > length) {\n    throw new RangeError('offset out of range')\n  }\n}\n\nfunction assertSize (size, offset, length) {\n  if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n    throw new TypeError('size must be a number')\n  }\n\n  if (size > kMaxUint32 || size < 0) {\n    throw new TypeError('size must be a uint32')\n  }\n\n  if (size + offset > length || size > kBufferMaxLength) {\n    throw new RangeError('buffer too small')\n  }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n  exports.randomFill = randomFill\n  exports.randomFillSync = randomFillSync\n} else {\n  exports.randomFill = oldBrowser\n  exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  if (typeof offset === 'function') {\n    cb = offset\n    offset = 0\n    size = buf.length\n  } else if (typeof size === 'function') {\n    cb = size\n    size = buf.length - offset\n  } else if (typeof cb !== 'function') {\n    throw new TypeError('\"cb\" argument must be a function')\n  }\n  assertOffset(offset, buf.length)\n  assertSize(size, offset, buf.length)\n  return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n  if (process.browser) {\n    var ourBuf = buf.buffer\n    var uint = new Uint8Array(ourBuf, offset, size)\n    crypto.getRandomValues(uint)\n    if (cb) {\n      process.nextTick(function () {\n        cb(null, buf)\n      })\n      return\n    }\n    return buf\n  }\n  if (cb) {\n    randombytes(size, function (err, bytes) {\n      if (err) {\n        return cb(err)\n      }\n      bytes.copy(buf, offset)\n      cb(null, buf)\n    })\n    return\n  }\n  var bytes = randombytes(size)\n  bytes.copy(buf, offset)\n  return buf\n}\nfunction randomFillSync (buf, offset, size) {\n  if (typeof offset === 'undefined') {\n    offset = 0\n  }\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n  }\n\n  assertOffset(offset, buf.length)\n\n  if (size === undefined) size = buf.length - offset\n\n  assertSize(size, offset, buf.length)\n\n  return actualFill(buf, offset, size)\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":284,\"randombytes\":298,\"safe-buffer\":318}],300:[function(require,module,exports){\n'use strict';\n\nmodule.exports = rbush;\nmodule.exports.default = rbush;\n\nvar quickselect = require('quickselect');\n\nfunction rbush(maxEntries, format) {\n    if (!(this instanceof rbush)) return new rbush(maxEntries, format);\n\n    // max entries in a node is 9 by default; min node fill is 40% for best performance\n    this._maxEntries = Math.max(4, maxEntries || 9);\n    this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n\n    if (format) {\n        this._initFormat(format);\n    }\n\n    this.clear();\n}\n\nrbush.prototype = {\n\n    all: function () {\n        return this._all(this.data, []);\n    },\n\n    search: function (bbox) {\n\n        var node = this.data,\n            result = [],\n            toBBox = this.toBBox;\n\n        if (!intersects(bbox, node)) return result;\n\n        var nodesToSearch = [],\n            i, len, child, childBBox;\n\n        while (node) {\n            for (i = 0, len = node.children.length; i < len; i++) {\n\n                child = node.children[i];\n                childBBox = node.leaf ? toBBox(child) : child;\n\n                if (intersects(bbox, childBBox)) {\n                    if (node.leaf) result.push(child);\n                    else if (contains(bbox, childBBox)) this._all(child, result);\n                    else nodesToSearch.push(child);\n                }\n            }\n            node = nodesToSearch.pop();\n        }\n\n        return result;\n    },\n\n    collides: function (bbox) {\n\n        var node = this.data,\n            toBBox = this.toBBox;\n\n        if (!intersects(bbox, node)) return false;\n\n        var nodesToSearch = [],\n            i, len, child, childBBox;\n\n        while (node) {\n            for (i = 0, len = node.children.length; i < len; i++) {\n\n                child = node.children[i];\n                childBBox = node.leaf ? toBBox(child) : child;\n\n                if (intersects(bbox, childBBox)) {\n                    if (node.leaf || contains(bbox, childBBox)) return true;\n                    nodesToSearch.push(child);\n                }\n            }\n            node = nodesToSearch.pop();\n        }\n\n        return false;\n    },\n\n    load: function (data) {\n        if (!(data && data.length)) return this;\n\n        if (data.length < this._minEntries) {\n            for (var i = 0, len = data.length; i < len; i++) {\n                this.insert(data[i]);\n            }\n            return this;\n        }\n\n        // recursively build the tree with the given data from scratch using OMT algorithm\n        var node = this._build(data.slice(), 0, data.length - 1, 0);\n\n        if (!this.data.children.length) {\n            // save as is if tree is empty\n            this.data = node;\n\n        } else if (this.data.height === node.height) {\n            // split root if trees have the same height\n            this._splitRoot(this.data, node);\n\n        } else {\n            if (this.data.height < node.height) {\n                // swap trees if inserted one is bigger\n                var tmpNode = this.data;\n                this.data = node;\n                node = tmpNode;\n            }\n\n            // insert the small tree into the large tree at appropriate level\n            this._insert(node, this.data.height - node.height - 1, true);\n        }\n\n        return this;\n    },\n\n    insert: function (item) {\n        if (item) this._insert(item, this.data.height - 1);\n        return this;\n    },\n\n    clear: function () {\n        this.data = createNode([]);\n        return this;\n    },\n\n    remove: function (item, equalsFn) {\n        if (!item) return this;\n\n        var node = this.data,\n            bbox = this.toBBox(item),\n            path = [],\n            indexes = [],\n            i, parent, index, goingUp;\n\n        // depth-first iterative tree traversal\n        while (node || path.length) {\n\n            if (!node) { // go up\n                node = path.pop();\n                parent = path[path.length - 1];\n                i = indexes.pop();\n                goingUp = true;\n            }\n\n            if (node.leaf) { // check current node\n                index = findItem(item, node.children, equalsFn);\n\n                if (index !== -1) {\n                    // item found, remove the item and condense tree upwards\n                    node.children.splice(index, 1);\n                    path.push(node);\n                    this._condense(path);\n                    return this;\n                }\n            }\n\n            if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n                path.push(node);\n                indexes.push(i);\n                i = 0;\n                parent = node;\n                node = node.children[0];\n\n            } else if (parent) { // go right\n                i++;\n                node = parent.children[i];\n                goingUp = false;\n\n            } else node = null; // nothing found\n        }\n\n        return this;\n    },\n\n    toBBox: function (item) { return item; },\n\n    compareMinX: compareNodeMinX,\n    compareMinY: compareNodeMinY,\n\n    toJSON: function () { return this.data; },\n\n    fromJSON: function (data) {\n        this.data = data;\n        return this;\n    },\n\n    _all: function (node, result) {\n        var nodesToSearch = [];\n        while (node) {\n            if (node.leaf) result.push.apply(result, node.children);\n            else nodesToSearch.push.apply(nodesToSearch, node.children);\n\n            node = nodesToSearch.pop();\n        }\n        return result;\n    },\n\n    _build: function (items, left, right, height) {\n\n        var N = right - left + 1,\n            M = this._maxEntries,\n            node;\n\n        if (N <= M) {\n            // reached leaf level; return leaf\n            node = createNode(items.slice(left, right + 1));\n            calcBBox(node, this.toBBox);\n            return node;\n        }\n\n        if (!height) {\n            // target height of the bulk-loaded tree\n            height = Math.ceil(Math.log(N) / Math.log(M));\n\n            // target number of root entries to maximize storage utilization\n            M = Math.ceil(N / Math.pow(M, height - 1));\n        }\n\n        node = createNode([]);\n        node.leaf = false;\n        node.height = height;\n\n        // split the items into M mostly square tiles\n\n        var N2 = Math.ceil(N / M),\n            N1 = N2 * Math.ceil(Math.sqrt(M)),\n            i, j, right2, right3;\n\n        multiSelect(items, left, right, N1, this.compareMinX);\n\n        for (i = left; i <= right; i += N1) {\n\n            right2 = Math.min(i + N1 - 1, right);\n\n            multiSelect(items, i, right2, N2, this.compareMinY);\n\n            for (j = i; j <= right2; j += N2) {\n\n                right3 = Math.min(j + N2 - 1, right2);\n\n                // pack each entry recursively\n                node.children.push(this._build(items, j, right3, height - 1));\n            }\n        }\n\n        calcBBox(node, this.toBBox);\n\n        return node;\n    },\n\n    _chooseSubtree: function (bbox, node, level, path) {\n\n        var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;\n\n        while (true) {\n            path.push(node);\n\n            if (node.leaf || path.length - 1 === level) break;\n\n            minArea = minEnlargement = Infinity;\n\n            for (i = 0, len = node.children.length; i < len; i++) {\n                child = node.children[i];\n                area = bboxArea(child);\n                enlargement = enlargedArea(bbox, child) - area;\n\n                // choose entry with the least area enlargement\n                if (enlargement < minEnlargement) {\n                    minEnlargement = enlargement;\n                    minArea = area < minArea ? area : minArea;\n                    targetNode = child;\n\n                } else if (enlargement === minEnlargement) {\n                    // otherwise choose one with the smallest area\n                    if (area < minArea) {\n                        minArea = area;\n                        targetNode = child;\n                    }\n                }\n            }\n\n            node = targetNode || node.children[0];\n        }\n\n        return node;\n    },\n\n    _insert: function (item, level, isNode) {\n\n        var toBBox = this.toBBox,\n            bbox = isNode ? item : toBBox(item),\n            insertPath = [];\n\n        // find the best node for accommodating the item, saving all nodes along the path too\n        var node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n        // put the item into the node\n        node.children.push(item);\n        extend(node, bbox);\n\n        // split on node overflow; propagate upwards if necessary\n        while (level >= 0) {\n            if (insertPath[level].children.length > this._maxEntries) {\n                this._split(insertPath, level);\n                level--;\n            } else break;\n        }\n\n        // adjust bboxes along the insertion path\n        this._adjustParentBBoxes(bbox, insertPath, level);\n    },\n\n    // split overflowed node into two\n    _split: function (insertPath, level) {\n\n        var node = insertPath[level],\n            M = node.children.length,\n            m = this._minEntries;\n\n        this._chooseSplitAxis(node, m, M);\n\n        var splitIndex = this._chooseSplitIndex(node, m, M);\n\n        var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n        newNode.height = node.height;\n        newNode.leaf = node.leaf;\n\n        calcBBox(node, this.toBBox);\n        calcBBox(newNode, this.toBBox);\n\n        if (level) insertPath[level - 1].children.push(newNode);\n        else this._splitRoot(node, newNode);\n    },\n\n    _splitRoot: function (node, newNode) {\n        // split root node\n        this.data = createNode([node, newNode]);\n        this.data.height = node.height + 1;\n        this.data.leaf = false;\n        calcBBox(this.data, this.toBBox);\n    },\n\n    _chooseSplitIndex: function (node, m, M) {\n\n        var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;\n\n        minOverlap = minArea = Infinity;\n\n        for (i = m; i <= M - m; i++) {\n            bbox1 = distBBox(node, 0, i, this.toBBox);\n            bbox2 = distBBox(node, i, M, this.toBBox);\n\n            overlap = intersectionArea(bbox1, bbox2);\n            area = bboxArea(bbox1) + bboxArea(bbox2);\n\n            // choose distribution with minimum overlap\n            if (overlap < minOverlap) {\n                minOverlap = overlap;\n                index = i;\n\n                minArea = area < minArea ? area : minArea;\n\n            } else if (overlap === minOverlap) {\n                // otherwise choose distribution with minimum area\n                if (area < minArea) {\n                    minArea = area;\n                    index = i;\n                }\n            }\n        }\n\n        return index;\n    },\n\n    // sorts node children by the best axis for split\n    _chooseSplitAxis: function (node, m, M) {\n\n        var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,\n            compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,\n            xMargin = this._allDistMargin(node, m, M, compareMinX),\n            yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n        // if total distributions margin value is minimal for x, sort by minX,\n        // otherwise it's already sorted by minY\n        if (xMargin < yMargin) node.children.sort(compareMinX);\n    },\n\n    // total margin of all possible split distributions where each node is at least m full\n    _allDistMargin: function (node, m, M, compare) {\n\n        node.children.sort(compare);\n\n        var toBBox = this.toBBox,\n            leftBBox = distBBox(node, 0, m, toBBox),\n            rightBBox = distBBox(node, M - m, M, toBBox),\n            margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),\n            i, child;\n\n        for (i = m; i < M - m; i++) {\n            child = node.children[i];\n            extend(leftBBox, node.leaf ? toBBox(child) : child);\n            margin += bboxMargin(leftBBox);\n        }\n\n        for (i = M - m - 1; i >= m; i--) {\n            child = node.children[i];\n            extend(rightBBox, node.leaf ? toBBox(child) : child);\n            margin += bboxMargin(rightBBox);\n        }\n\n        return margin;\n    },\n\n    _adjustParentBBoxes: function (bbox, path, level) {\n        // adjust bboxes along the given tree path\n        for (var i = level; i >= 0; i--) {\n            extend(path[i], bbox);\n        }\n    },\n\n    _condense: function (path) {\n        // go through the path, removing empty nodes and updating bboxes\n        for (var i = path.length - 1, siblings; i >= 0; i--) {\n            if (path[i].children.length === 0) {\n                if (i > 0) {\n                    siblings = path[i - 1].children;\n                    siblings.splice(siblings.indexOf(path[i]), 1);\n\n                } else this.clear();\n\n            } else calcBBox(path[i], this.toBBox);\n        }\n    },\n\n    _initFormat: function (format) {\n        // data format (minX, minY, maxX, maxY accessors)\n\n        // uses eval-type function compilation instead of just accepting a toBBox function\n        // because the algorithms are very sensitive to sorting functions performance,\n        // so they should be dead simple and without inner calls\n\n        var compareArr = ['return a', ' - b', ';'];\n\n        this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));\n        this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));\n\n        this.toBBox = new Function('a',\n            'return {minX: a' + format[0] +\n            ', minY: a' + format[1] +\n            ', maxX: a' + format[2] +\n            ', maxY: a' + format[3] + '};');\n    }\n};\n\nfunction findItem(item, items, equalsFn) {\n    if (!equalsFn) return items.indexOf(item);\n\n    for (var i = 0; i < items.length; i++) {\n        if (equalsFn(item, items[i])) return i;\n    }\n    return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n    distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n    if (!destNode) destNode = createNode(null);\n    destNode.minX = Infinity;\n    destNode.minY = Infinity;\n    destNode.maxX = -Infinity;\n    destNode.maxY = -Infinity;\n\n    for (var i = k, child; i < p; i++) {\n        child = node.children[i];\n        extend(destNode, node.leaf ? toBBox(child) : child);\n    }\n\n    return destNode;\n}\n\nfunction extend(a, b) {\n    a.minX = Math.min(a.minX, b.minX);\n    a.minY = Math.min(a.minY, b.minY);\n    a.maxX = Math.max(a.maxX, b.maxX);\n    a.maxY = Math.max(a.maxY, b.maxY);\n    return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n    return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n           (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n    var minX = Math.max(a.minX, b.minX),\n        minY = Math.max(a.minY, b.minY),\n        maxX = Math.min(a.maxX, b.maxX),\n        maxY = Math.min(a.maxY, b.maxY);\n\n    return Math.max(0, maxX - minX) *\n           Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n    return a.minX <= b.minX &&\n           a.minY <= b.minY &&\n           b.maxX <= a.maxX &&\n           b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n    return b.minX <= a.maxX &&\n           b.minY <= a.maxY &&\n           b.maxX >= a.minX &&\n           b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n    return {\n        children: children,\n        height: 1,\n        leaf: true,\n        minX: Infinity,\n        minY: Infinity,\n        maxX: -Infinity,\n        maxY: -Infinity\n    };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n    var stack = [left, right],\n        mid;\n\n    while (stack.length) {\n        right = stack.pop();\n        left = stack.pop();\n\n        if (right - left <= n) continue;\n\n        mid = left + Math.ceil((right - left) / n / 2) * n;\n        quickselect(arr, mid, left, right, compare);\n\n        stack.push(left, mid, mid, right);\n    }\n}\n\n},{\"quickselect\":297}],301:[function(require,module,exports){\nmodule.exports = require('./lib/_stream_duplex.js');\n\n},{\"./lib/_stream_duplex.js\":302}],302:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};\n},{\"./_stream_readable\":304,\"./_stream_writable\":306,\"core-util-is\":186,\"inherits\":262,\"process-nextick-args\":283}],303:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};\n},{\"./_stream_transform\":305,\"core-util-is\":186,\"inherits\":262}],304:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, unpipeInfo);\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./_stream_duplex\":302,\"./internal/streams/BufferList\":307,\"./internal/streams/destroy\":308,\"./internal/streams/stream\":309,\"_process\":284,\"core-util-is\":186,\"events\":221,\"inherits\":262,\"isarray\":264,\"process-nextick-args\":283,\"safe-buffer\":310,\"string_decoder/\":333,\"util\":149}],305:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}\n},{\"./_stream_duplex\":302,\"core-util-is\":186,\"inherits\":262}],306:[function(require,module,exports){\n(function (process,global,setImmediate){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n  if (state.corkedRequestsFree) {\n    state.corkedRequestsFree.next = corkReq;\n  } else {\n    state.corkedRequestsFree = corkReq;\n  }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {},require(\"timers\").setImmediate)\n},{\"./_stream_duplex\":302,\"./internal/streams/destroy\":308,\"./internal/streams/stream\":309,\"_process\":284,\"core-util-is\":186,\"inherits\":262,\"process-nextick-args\":283,\"safe-buffer\":310,\"timers\":335,\"util-deprecate\":340}],307:[function(require,module,exports){\n'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    if (this.length === 1) return this.head.data;\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}\n},{\"safe-buffer\":310,\"util\":149}],308:[function(require,module,exports){\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n      pna.nextTick(emitErrorNT, this, err);\n    }\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      pna.nextTick(emitErrorNT, _this, err);\n      if (_this._writableState) {\n        _this._writableState.errorEmitted = true;\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};\n},{\"process-nextick-args\":283}],309:[function(require,module,exports){\nmodule.exports = require('events').EventEmitter;\n\n},{\"events\":221}],310:[function(require,module,exports){\narguments[4][178][0].apply(exports,arguments)\n},{\"buffer\":182,\"dup\":178}],311:[function(require,module,exports){\nmodule.exports = require('./readable').PassThrough\n\n},{\"./readable\":312}],312:[function(require,module,exports){\nexports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n\n},{\"./lib/_stream_duplex.js\":302,\"./lib/_stream_passthrough.js\":303,\"./lib/_stream_readable.js\":304,\"./lib/_stream_transform.js\":305,\"./lib/_stream_writable.js\":306}],313:[function(require,module,exports){\nmodule.exports = require('./readable').Transform\n\n},{\"./readable\":312}],314:[function(require,module,exports){\nmodule.exports = require('./lib/_stream_writable.js');\n\n},{\"./lib/_stream_writable.js\":306}],315:[function(require,module,exports){\n'use strict';\n\nvar proj4 = require('proj4').hasOwnProperty('default') ? require('proj4').default : require('proj4');\n// Checks if `list` looks like a `[x, y]`.\nfunction isXY(list) {\n  return list.length >= 2 &&\n    typeof list[0] === 'number' &&\n    typeof list[1] === 'number';\n}\n\nfunction traverseCoords(coordinates, callback) {\n  if (isXY(coordinates)) return callback(coordinates);\n  return coordinates.map(function(coord){return traverseCoords(coord, callback);});\n}\n\n// Simplistic shallow clone that will work for a normal GeoJSON object.\nfunction clone(obj) {\n  if (null == obj || 'object' !== typeof obj) return obj;\n  var copy = obj.constructor();\n  for (var attr in obj) {\n    if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];\n  }\n  return copy;\n}\n\nfunction traverseGeoJson(geometryCb, nodeCb, geojson) {\n  if (geojson == null) return geojson;\n\n  var r = clone(geojson);\n  var self = traverseGeoJson.bind(this, geometryCb, nodeCb);\n\n  switch (geojson.type) {\n  case 'Feature':\n    r.geometry = self(geojson.geometry);\n    break;\n  case 'FeatureCollection':\n    r.features = r.features.map(self);\n    break;\n  case 'GeometryCollection':\n    r.geometries = r.geometries.map(self);\n    break;\n  default:\n    geometryCb(r);\n    break;\n  }\n\n  if (nodeCb) nodeCb(r);\n\n  return r;\n}\n\nfunction detectCrs(geojson, projs) {\n  var crsInfo = geojson.crs,\n      crs;\n\n  if (crsInfo === undefined) {\n    throw new Error('Unable to detect CRS, GeoJSON has no \"crs\" property.');\n  }\n\n  if (crsInfo.type === 'name') {\n    crs = projs[crsInfo.properties.name];\n  } else if (crsInfo.type === 'EPSG') {\n    crs = projs['EPSG:' + crsInfo.properties.code];\n  }\n\n  if (!crs) {\n    throw new Error('CRS defined in crs section could not be identified: ' + JSON.stringify(crsInfo));\n  }\n\n  return crs;\n}\n\nfunction determineCrs(crs, projs) {\n  if (typeof crs === 'string' || crs instanceof String) {\n    return projs[crs] || proj4.Proj(crs);\n  }\n\n  return crs;\n}\n\nfunction calcBbox(geojson) {\n  var min = [Number.MAX_VALUE, Number.MAX_VALUE],\n      max = [-Number.MAX_VALUE, -Number.MAX_VALUE];\n  traverseGeoJson(function(_gj) {\n    traverseCoords(_gj.coordinates, function(xy) {\n      min[0] = Math.min(min[0], xy[0]);\n      min[1] = Math.min(min[1], xy[1]);\n      max[0] = Math.max(max[0], xy[0]);\n      max[1] = Math.max(max[1], xy[1]);\n    });\n  }, null, geojson);\n  return [min[0], min[1], max[0], max[1]];\n}\n\nfunction reproject(geojson, from, to, projs) {\n  projs = projs || {};\n  if (!from) {\n    from = detectCrs(geojson, projs);\n  } else {\n    from = determineCrs(from, projs);\n  }\n\n  to = determineCrs(to, projs);\n  var transform = proj4(from, to).forward.bind(transform);\n\n  var transformGeometryCoords = function(gj) {\n    // No easy way to put correct CRS info into the GeoJSON,\n    // and definitely wrong to keep the old, so delete it.\n    if (gj.crs) {\n      delete gj.crs;\n    }\n    gj.coordinates = traverseCoords(gj.coordinates, transform);\n  }\n\n  var transformBbox = function(gj) {\n    if (gj.bbox) {\n      gj.bbox = calcBbox(gj);\n    }\n  }\n\n  return traverseGeoJson(transformGeometryCoords, transformBbox, geojson);\n}\n\nmodule.exports = {\n  detectCrs: detectCrs,\n\n  reproject: reproject,\n\n  reverse: function(geojson) {\n    return traverseGeoJson(function(gj) {\n      gj.coordinates = traverseCoords(gj.coordinates, function(xy) {\n        return [ xy[1], xy[0] ];\n      });\n    }, null, geojson);\n  },\n\n  toWgs84: function(geojson, from, projs) {\n    return reproject(geojson, from, proj4.WGS84, projs);\n  }\n};\n\n},{\"proj4\":316}],316:[function(require,module,exports){\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.proj4 = factory());\n}(this, (function () { 'use strict';\n\n\tvar globals = function(defs) {\n\t  defs('EPSG:4326', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n\t  defs('EPSG:4269', \"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\");\n\t  defs('EPSG:3857', \"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\");\n\n\t  defs.WGS84 = defs['EPSG:4326'];\n\t  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857\n\t  defs.GOOGLE = defs['EPSG:3857'];\n\t  defs['EPSG:900913'] = defs['EPSG:3857'];\n\t  defs['EPSG:102113'] = defs['EPSG:3857'];\n\t};\n\n\tvar PJD_3PARAM = 1;\n\tvar PJD_7PARAM = 2;\n\tvar PJD_WGS84 = 4; // WGS84 or equivalent\n\tvar PJD_NODATUM = 5; // WGS84 or equivalent\n\tvar SEC_TO_RAD = 4.84813681109535993589914102357e-6;\n\tvar HALF_PI = Math.PI/2;\n\t// ellipoid pj_set_ell.c\n\tvar SIXTH = 0.1666666666666666667;\n\t/* 1/6 */\n\tvar RA4 = 0.04722222222222222222;\n\t/* 17/360 */\n\tvar RA6 = 0.02215608465608465608;\n\tvar EPSLN = 1.0e-10;\n\t// you'd think you could use Number.EPSILON above but that makes\n\t// Mollweide get into an infinate loop.\n\n\tvar D2R = 0.01745329251994329577;\n\tvar R2D = 57.29577951308232088;\n\tvar FORTPI = Math.PI/4;\n\tvar TWO_PI = Math.PI * 2;\n\t// SPI is slightly greater than Math.PI, so values that exceed the -180..180\n\t// degree range by a tiny amount don't get wrapped. This prevents points that\n\t// have drifted from their original location along the 180th meridian (due to\n\t// floating point error) from changing their sign.\n\tvar SPI = 3.14159265359;\n\n\tvar exports$1 = {};\n\texports$1.greenwich = 0.0; //\"0dE\",\n\texports$1.lisbon = -9.131906111111; //\"9d07'54.862\\\"W\",\n\texports$1.paris = 2.337229166667; //\"2d20'14.025\\\"E\",\n\texports$1.bogota = -74.080916666667; //\"74d04'51.3\\\"W\",\n\texports$1.madrid = -3.687938888889; //\"3d41'16.58\\\"W\",\n\texports$1.rome = 12.452333333333; //\"12d27'8.4\\\"E\",\n\texports$1.bern = 7.439583333333; //\"7d26'22.5\\\"E\",\n\texports$1.jakarta = 106.807719444444; //\"106d48'27.79\\\"E\",\n\texports$1.ferro = -17.666666666667; //\"17d40'W\",\n\texports$1.brussels = 4.367975; //\"4d22'4.71\\\"E\",\n\texports$1.stockholm = 18.058277777778; //\"18d3'29.8\\\"E\",\n\texports$1.athens = 23.7163375; //\"23d42'58.815\\\"E\",\n\texports$1.oslo = 10.722916666667; //\"10d43'22.5\\\"E\"\n\n\tvar units = {\n\t  ft: {to_meter: 0.3048},\n\t  'us-ft': {to_meter: 1200 / 3937}\n\t};\n\n\tvar ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\n\tfunction match(obj, key) {\n\t  if (obj[key]) {\n\t    return obj[key];\n\t  }\n\t  var keys = Object.keys(obj);\n\t  var lkey = key.toLowerCase().replace(ignoredChar, '');\n\t  var i = -1;\n\t  var testkey, processedKey;\n\t  while (++i < keys.length) {\n\t    testkey = keys[i];\n\t    processedKey = testkey.toLowerCase().replace(ignoredChar, '');\n\t    if (processedKey === lkey) {\n\t      return obj[testkey];\n\t    }\n\t  }\n\t}\n\n\tvar parseProj = function(defData) {\n\t  var self = {};\n\t  var paramObj = defData.split('+').map(function(v) {\n\t    return v.trim();\n\t  }).filter(function(a) {\n\t    return a;\n\t  }).reduce(function(p, a) {\n\t    var split = a.split('=');\n\t    split.push(true);\n\t    p[split[0].toLowerCase()] = split[1];\n\t    return p;\n\t  }, {});\n\t  var paramName, paramVal, paramOutname;\n\t  var params = {\n\t    proj: 'projName',\n\t    datum: 'datumCode',\n\t    rf: function(v) {\n\t      self.rf = parseFloat(v);\n\t    },\n\t    lat_0: function(v) {\n\t      self.lat0 = v * D2R;\n\t    },\n\t    lat_1: function(v) {\n\t      self.lat1 = v * D2R;\n\t    },\n\t    lat_2: function(v) {\n\t      self.lat2 = v * D2R;\n\t    },\n\t    lat_ts: function(v) {\n\t      self.lat_ts = v * D2R;\n\t    },\n\t    lon_0: function(v) {\n\t      self.long0 = v * D2R;\n\t    },\n\t    lon_1: function(v) {\n\t      self.long1 = v * D2R;\n\t    },\n\t    lon_2: function(v) {\n\t      self.long2 = v * D2R;\n\t    },\n\t    alpha: function(v) {\n\t      self.alpha = parseFloat(v) * D2R;\n\t    },\n\t    lonc: function(v) {\n\t      self.longc = v * D2R;\n\t    },\n\t    x_0: function(v) {\n\t      self.x0 = parseFloat(v);\n\t    },\n\t    y_0: function(v) {\n\t      self.y0 = parseFloat(v);\n\t    },\n\t    k_0: function(v) {\n\t      self.k0 = parseFloat(v);\n\t    },\n\t    k: function(v) {\n\t      self.k0 = parseFloat(v);\n\t    },\n\t    a: function(v) {\n\t      self.a = parseFloat(v);\n\t    },\n\t    b: function(v) {\n\t      self.b = parseFloat(v);\n\t    },\n\t    r_a: function() {\n\t      self.R_A = true;\n\t    },\n\t    zone: function(v) {\n\t      self.zone = parseInt(v, 10);\n\t    },\n\t    south: function() {\n\t      self.utmSouth = true;\n\t    },\n\t    towgs84: function(v) {\n\t      self.datum_params = v.split(\",\").map(function(a) {\n\t        return parseFloat(a);\n\t      });\n\t    },\n\t    to_meter: function(v) {\n\t      self.to_meter = parseFloat(v);\n\t    },\n\t    units: function(v) {\n\t      self.units = v;\n\t      var unit = match(units, v);\n\t      if (unit) {\n\t        self.to_meter = unit.to_meter;\n\t      }\n\t    },\n\t    from_greenwich: function(v) {\n\t      self.from_greenwich = v * D2R;\n\t    },\n\t    pm: function(v) {\n\t      var pm = match(exports$1, v);\n\t      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;\n\t    },\n\t    nadgrids: function(v) {\n\t      if (v === '@null') {\n\t        self.datumCode = 'none';\n\t      }\n\t      else {\n\t        self.nadgrids = v;\n\t      }\n\t    },\n\t    axis: function(v) {\n\t      var legalAxis = \"ewnsud\";\n\t      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {\n\t        self.axis = v;\n\t      }\n\t    }\n\t  };\n\t  for (paramName in paramObj) {\n\t    paramVal = paramObj[paramName];\n\t    if (paramName in params) {\n\t      paramOutname = params[paramName];\n\t      if (typeof paramOutname === 'function') {\n\t        paramOutname(paramVal);\n\t      }\n\t      else {\n\t        self[paramOutname] = paramVal;\n\t      }\n\t    }\n\t    else {\n\t      self[paramName] = paramVal;\n\t    }\n\t  }\n\t  if(typeof self.datumCode === 'string' && self.datumCode !== \"WGS84\"){\n\t    self.datumCode = self.datumCode.toLowerCase();\n\t  }\n\t  return self;\n\t};\n\n\tvar NEUTRAL = 1;\n\tvar KEYWORD = 2;\n\tvar NUMBER = 3;\n\tvar QUOTED = 4;\n\tvar AFTERQUOTE = 5;\n\tvar ENDED = -1;\n\tvar whitespace = /\\s/;\n\tvar latin = /[A-Za-z]/;\n\tvar keyword = /[A-Za-z84]/;\n\tvar endThings = /[,\\]]/;\n\tvar digets = /[\\d\\.E\\-\\+]/;\n\t// const ignoredChar = /[\\s_\\-\\/\\(\\)]/g;\n\tfunction Parser(text) {\n\t  if (typeof text !== 'string') {\n\t    throw new Error('not a string');\n\t  }\n\t  this.text = text.trim();\n\t  this.level = 0;\n\t  this.place = 0;\n\t  this.root = null;\n\t  this.stack = [];\n\t  this.currentObject = null;\n\t  this.state = NEUTRAL;\n\t}\n\tParser.prototype.readCharicter = function() {\n\t  var char = this.text[this.place++];\n\t  if (this.state !== QUOTED) {\n\t    while (whitespace.test(char)) {\n\t      if (this.place >= this.text.length) {\n\t        return;\n\t      }\n\t      char = this.text[this.place++];\n\t    }\n\t  }\n\t  switch (this.state) {\n\t    case NEUTRAL:\n\t      return this.neutral(char);\n\t    case KEYWORD:\n\t      return this.keyword(char)\n\t    case QUOTED:\n\t      return this.quoted(char);\n\t    case AFTERQUOTE:\n\t      return this.afterquote(char);\n\t    case NUMBER:\n\t      return this.number(char);\n\t    case ENDED:\n\t      return;\n\t  }\n\t};\n\tParser.prototype.afterquote = function(char) {\n\t  if (char === '\"') {\n\t    this.word += '\"';\n\t    this.state = QUOTED;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.word = this.word.trim();\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in afterquote yet, index ' + this.place);\n\t};\n\tParser.prototype.afterItem = function(char) {\n\t  if (char === ',') {\n\t    if (this.word !== null) {\n\t      this.currentObject.push(this.word);\n\t    }\n\t    this.word = null;\n\t    this.state = NEUTRAL;\n\t    return;\n\t  }\n\t  if (char === ']') {\n\t    this.level--;\n\t    if (this.word !== null) {\n\t      this.currentObject.push(this.word);\n\t      this.word = null;\n\t    }\n\t    this.state = NEUTRAL;\n\t    this.currentObject = this.stack.pop();\n\t    if (!this.currentObject) {\n\t      this.state = ENDED;\n\t    }\n\n\t    return;\n\t  }\n\t};\n\tParser.prototype.number = function(char) {\n\t  if (digets.test(char)) {\n\t    this.word += char;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.word = parseFloat(this.word);\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in number yet, index ' + this.place);\n\t};\n\tParser.prototype.quoted = function(char) {\n\t  if (char === '\"') {\n\t    this.state = AFTERQUOTE;\n\t    return;\n\t  }\n\t  this.word += char;\n\t  return;\n\t};\n\tParser.prototype.keyword = function(char) {\n\t  if (keyword.test(char)) {\n\t    this.word += char;\n\t    return;\n\t  }\n\t  if (char === '[') {\n\t    var newObjects = [];\n\t    newObjects.push(this.word);\n\t    this.level++;\n\t    if (this.root === null) {\n\t      this.root = newObjects;\n\t    } else {\n\t      this.currentObject.push(newObjects);\n\t    }\n\t    this.stack.push(this.currentObject);\n\t    this.currentObject = newObjects;\n\t    this.state = NEUTRAL;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in keyword yet, index ' + this.place);\n\t};\n\tParser.prototype.neutral = function(char) {\n\t  if (latin.test(char)) {\n\t    this.word = char;\n\t    this.state = KEYWORD;\n\t    return;\n\t  }\n\t  if (char === '\"') {\n\t    this.word = '';\n\t    this.state = QUOTED;\n\t    return;\n\t  }\n\t  if (digets.test(char)) {\n\t    this.word = char;\n\t    this.state = NUMBER;\n\t    return;\n\t  }\n\t  if (endThings.test(char)) {\n\t    this.afterItem(char);\n\t    return;\n\t  }\n\t  throw new Error('havn\\'t handled \"' +char + '\" in neutral yet, index ' + this.place);\n\t};\n\tParser.prototype.output = function() {\n\t  while (this.place < this.text.length) {\n\t    this.readCharicter();\n\t  }\n\t  if (this.state === ENDED) {\n\t    return this.root;\n\t  }\n\t  throw new Error('unable to parse string \"' +this.text + '\". State is ' + this.state);\n\t};\n\n\tfunction parseString(txt) {\n\t  var parser = new Parser(txt);\n\t  return parser.output();\n\t}\n\n\tfunction mapit(obj, key, value) {\n\t  if (Array.isArray(key)) {\n\t    value.unshift(key);\n\t    key = null;\n\t  }\n\t  var thing = key ? {} : obj;\n\n\t  var out = value.reduce(function(newObj, item) {\n\t    sExpr(item, newObj);\n\t    return newObj\n\t  }, thing);\n\t  if (key) {\n\t    obj[key] = out;\n\t  }\n\t}\n\n\tfunction sExpr(v, obj) {\n\t  if (!Array.isArray(v)) {\n\t    obj[v] = true;\n\t    return;\n\t  }\n\t  var key = v.shift();\n\t  if (key === 'PARAMETER') {\n\t    key = v.shift();\n\t  }\n\t  if (v.length === 1) {\n\t    if (Array.isArray(v[0])) {\n\t      obj[key] = {};\n\t      sExpr(v[0], obj[key]);\n\t      return;\n\t    }\n\t    obj[key] = v[0];\n\t    return;\n\t  }\n\t  if (!v.length) {\n\t    obj[key] = true;\n\t    return;\n\t  }\n\t  if (key === 'TOWGS84') {\n\t    obj[key] = v;\n\t    return;\n\t  }\n\t  if (!Array.isArray(key)) {\n\t    obj[key] = {};\n\t  }\n\n\t  var i;\n\t  switch (key) {\n\t    case 'UNIT':\n\t    case 'PRIMEM':\n\t    case 'VERT_DATUM':\n\t      obj[key] = {\n\t        name: v[0].toLowerCase(),\n\t        convert: v[1]\n\t      };\n\t      if (v.length === 3) {\n\t        sExpr(v[2], obj[key]);\n\t      }\n\t      return;\n\t    case 'SPHEROID':\n\t    case 'ELLIPSOID':\n\t      obj[key] = {\n\t        name: v[0],\n\t        a: v[1],\n\t        rf: v[2]\n\t      };\n\t      if (v.length === 4) {\n\t        sExpr(v[3], obj[key]);\n\t      }\n\t      return;\n\t    case 'PROJECTEDCRS':\n\t    case 'PROJCRS':\n\t    case 'GEOGCS':\n\t    case 'GEOCCS':\n\t    case 'PROJCS':\n\t    case 'LOCAL_CS':\n\t    case 'GEODCRS':\n\t    case 'GEODETICCRS':\n\t    case 'GEODETICDATUM':\n\t    case 'EDATUM':\n\t    case 'ENGINEERINGDATUM':\n\t    case 'VERT_CS':\n\t    case 'VERTCRS':\n\t    case 'VERTICALCRS':\n\t    case 'COMPD_CS':\n\t    case 'COMPOUNDCRS':\n\t    case 'ENGINEERINGCRS':\n\t    case 'ENGCRS':\n\t    case 'FITTED_CS':\n\t    case 'LOCAL_DATUM':\n\t    case 'DATUM':\n\t      v[0] = ['name', v[0]];\n\t      mapit(obj, key, v);\n\t      return;\n\t    default:\n\t      i = -1;\n\t      while (++i < v.length) {\n\t        if (!Array.isArray(v[i])) {\n\t          return sExpr(v, obj[key]);\n\t        }\n\t      }\n\t      return mapit(obj, key, v);\n\t  }\n\t}\n\n\tvar D2R$1 = 0.01745329251994329577;\n\tfunction rename(obj, params) {\n\t  var outName = params[0];\n\t  var inName = params[1];\n\t  if (!(outName in obj) && (inName in obj)) {\n\t    obj[outName] = obj[inName];\n\t    if (params.length === 3) {\n\t      obj[outName] = params[2](obj[outName]);\n\t    }\n\t  }\n\t}\n\n\tfunction d2r(input) {\n\t  return input * D2R$1;\n\t}\n\n\tfunction cleanWKT(wkt) {\n\t  if (wkt.type === 'GEOGCS') {\n\t    wkt.projName = 'longlat';\n\t  } else if (wkt.type === 'LOCAL_CS') {\n\t    wkt.projName = 'identity';\n\t    wkt.local = true;\n\t  } else {\n\t    if (typeof wkt.PROJECTION === 'object') {\n\t      wkt.projName = Object.keys(wkt.PROJECTION)[0];\n\t    } else {\n\t      wkt.projName = wkt.PROJECTION;\n\t    }\n\t  }\n\t  if (wkt.UNIT) {\n\t    wkt.units = wkt.UNIT.name.toLowerCase();\n\t    if (wkt.units === 'metre') {\n\t      wkt.units = 'meter';\n\t    }\n\t    if (wkt.UNIT.convert) {\n\t      if (wkt.type === 'GEOGCS') {\n\t        if (wkt.DATUM && wkt.DATUM.SPHEROID) {\n\t          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;\n\t        }\n\t      } else {\n\t        wkt.to_meter = wkt.UNIT.convert, 10;\n\t      }\n\t    }\n\t  }\n\t  var geogcs = wkt.GEOGCS;\n\t  if (wkt.type === 'GEOGCS') {\n\t    geogcs = wkt;\n\t  }\n\t  if (geogcs) {\n\t    //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){\n\t    //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;\n\t    //}\n\t    if (geogcs.DATUM) {\n\t      wkt.datumCode = geogcs.DATUM.name.toLowerCase();\n\t    } else {\n\t      wkt.datumCode = geogcs.name.toLowerCase();\n\t    }\n\t    if (wkt.datumCode.slice(0, 2) === 'd_') {\n\t      wkt.datumCode = wkt.datumCode.slice(2);\n\t    }\n\t    if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {\n\t      wkt.datumCode = 'nzgd49';\n\t    }\n\t    if (wkt.datumCode === 'wgs_1984') {\n\t      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {\n\t        wkt.sphere = true;\n\t      }\n\t      wkt.datumCode = 'wgs84';\n\t    }\n\t    if (wkt.datumCode.slice(-6) === '_ferro') {\n\t      wkt.datumCode = wkt.datumCode.slice(0, - 6);\n\t    }\n\t    if (wkt.datumCode.slice(-8) === '_jakarta') {\n\t      wkt.datumCode = wkt.datumCode.slice(0, - 8);\n\t    }\n\t    if (~wkt.datumCode.indexOf('belge')) {\n\t      wkt.datumCode = 'rnb72';\n\t    }\n\t    if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {\n\t      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\\_18/, 'clrk');\n\t      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {\n\t        wkt.ellps = 'intl';\n\t      }\n\n\t      wkt.a = geogcs.DATUM.SPHEROID.a;\n\t      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);\n\t    }\n\n\t    if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {\n\t      wkt.datum_params = geogcs.DATUM.TOWGS84;\n\t    }\n\t    if (~wkt.datumCode.indexOf('osgb_1936')) {\n\t      wkt.datumCode = 'osgb36';\n\t    }\n\t    if (~wkt.datumCode.indexOf('osni_1952')) {\n\t      wkt.datumCode = 'osni52';\n\t    }\n\t    if (~wkt.datumCode.indexOf('tm65')\n\t      || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {\n\t      wkt.datumCode = 'ire65';\n\t    }\n\t    if (wkt.datumCode === 'ch1903+') {\n\t      wkt.datumCode = 'ch1903';\n\t    }\n\t    if (~wkt.datumCode.indexOf('israel')) {\n\t      wkt.datumCode = 'isr93';\n\t    }\n\t  }\n\t  if (wkt.b && !isFinite(wkt.b)) {\n\t    wkt.b = wkt.a;\n\t  }\n\n\t  function toMeter(input) {\n\t    var ratio = wkt.to_meter || 1;\n\t    return input * ratio;\n\t  }\n\t  var renamer = function(a) {\n\t    return rename(wkt, a);\n\t  };\n\t  var list = [\n\t    ['standard_parallel_1', 'Standard_Parallel_1'],\n\t    ['standard_parallel_2', 'Standard_Parallel_2'],\n\t    ['false_easting', 'False_Easting'],\n\t    ['false_northing', 'False_Northing'],\n\t    ['central_meridian', 'Central_Meridian'],\n\t    ['latitude_of_origin', 'Latitude_Of_Origin'],\n\t    ['latitude_of_origin', 'Central_Parallel'],\n\t    ['scale_factor', 'Scale_Factor'],\n\t    ['k0', 'scale_factor'],\n\t    ['latitude_of_center', 'Latitude_Of_Center'],\n\t    ['latitude_of_center', 'Latitude_of_center'],\n\t    ['lat0', 'latitude_of_center', d2r],\n\t    ['longitude_of_center', 'Longitude_Of_Center'],\n\t    ['longitude_of_center', 'Longitude_of_center'],\n\t    ['longc', 'longitude_of_center', d2r],\n\t    ['x0', 'false_easting', toMeter],\n\t    ['y0', 'false_northing', toMeter],\n\t    ['long0', 'central_meridian', d2r],\n\t    ['lat0', 'latitude_of_origin', d2r],\n\t    ['lat0', 'standard_parallel_1', d2r],\n\t    ['lat1', 'standard_parallel_1', d2r],\n\t    ['lat2', 'standard_parallel_2', d2r],\n\t    ['azimuth', 'Azimuth'],\n\t    ['alpha', 'azimuth', d2r],\n\t    ['srsCode', 'name']\n\t  ];\n\t  list.forEach(renamer);\n\t  if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {\n\t    wkt.long0 = wkt.longc;\n\t  }\n\t  if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {\n\t    wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);\n\t    wkt.lat_ts = wkt.lat1;\n\t  }\n\t}\n\tvar wkt = function(wkt) {\n\t  var lisp = parseString(wkt);\n\t  var type = lisp.shift();\n\t  var name = lisp.shift();\n\t  lisp.unshift(['name', name]);\n\t  lisp.unshift(['type', type]);\n\t  var obj = {};\n\t  sExpr(lisp, obj);\n\t  cleanWKT(obj);\n\t  return obj;\n\t};\n\n\tfunction defs(name) {\n\t  /*global console*/\n\t  var that = this;\n\t  if (arguments.length === 2) {\n\t    var def = arguments[1];\n\t    if (typeof def === 'string') {\n\t      if (def.charAt(0) === '+') {\n\t        defs[name] = parseProj(arguments[1]);\n\t      }\n\t      else {\n\t        defs[name] = wkt(arguments[1]);\n\t      }\n\t    } else {\n\t      defs[name] = def;\n\t    }\n\t  }\n\t  else if (arguments.length === 1) {\n\t    if (Array.isArray(name)) {\n\t      return name.map(function(v) {\n\t        if (Array.isArray(v)) {\n\t          defs.apply(that, v);\n\t        }\n\t        else {\n\t          defs(v);\n\t        }\n\t      });\n\t    }\n\t    else if (typeof name === 'string') {\n\t      if (name in defs) {\n\t        return defs[name];\n\t      }\n\t    }\n\t    else if ('EPSG' in name) {\n\t      defs['EPSG:' + name.EPSG] = name;\n\t    }\n\t    else if ('ESRI' in name) {\n\t      defs['ESRI:' + name.ESRI] = name;\n\t    }\n\t    else if ('IAU2000' in name) {\n\t      defs['IAU2000:' + name.IAU2000] = name;\n\t    }\n\t    else {\n\t      console.log(name);\n\t    }\n\t    return;\n\t  }\n\n\n\t}\n\tglobals(defs);\n\n\tfunction testObj(code){\n\t  return typeof code === 'string';\n\t}\n\tfunction testDef(code){\n\t  return code in defs;\n\t}\n\t var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];\n\tfunction testWKT(code){\n\t  return codeWords.some(function (word) {\n\t    return code.indexOf(word) > -1;\n\t  });\n\t}\n\tvar codes = ['3857', '900913', '3785', '102113'];\n\tfunction checkMercator(item) {\n\t  var auth = match(item, 'authority');\n\t  if (!auth) {\n\t    return;\n\t  }\n\t  var code = match(auth, 'epsg');\n\t  return code && codes.indexOf(code) > -1;\n\t}\n\tfunction checkProjStr(item) {\n\t  var ext = match(item, 'extension');\n\t  if (!ext) {\n\t    return;\n\t  }\n\t  return match(ext, 'proj4');\n\t}\n\tfunction testProj(code){\n\t  return code[0] === '+';\n\t}\n\tfunction parse(code){\n\t  if (testObj(code)) {\n\t    //check to see if this is a WKT string\n\t    if (testDef(code)) {\n\t      return defs[code];\n\t    }\n\t    if (testWKT(code)) {\n\t      var out = wkt(code);\n\t      // test of spetial case, due to this being a very common and often malformed\n\t      if (checkMercator(out)) {\n\t        return defs['EPSG:3857'];\n\t      }\n\t      var maybeProjStr = checkProjStr(out);\n\t      if (maybeProjStr) {\n\t        return parseProj(maybeProjStr);\n\t      }\n\t      return out;\n\t    }\n\t    if (testProj(code)) {\n\t      return parseProj(code);\n\t    }\n\t  }else{\n\t    return code;\n\t  }\n\t}\n\n\tvar extend = function(destination, source) {\n\t  destination = destination || {};\n\t  var value, property;\n\t  if (!source) {\n\t    return destination;\n\t  }\n\t  for (property in source) {\n\t    value = source[property];\n\t    if (value !== undefined) {\n\t      destination[property] = value;\n\t    }\n\t  }\n\t  return destination;\n\t};\n\n\tvar msfnz = function(eccent, sinphi, cosphi) {\n\t  var con = eccent * sinphi;\n\t  return cosphi / (Math.sqrt(1 - con * con));\n\t};\n\n\tvar sign = function(x) {\n\t  return x<0 ? -1 : 1;\n\t};\n\n\tvar adjust_lon = function(x) {\n\t  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));\n\t};\n\n\tvar tsfnz = function(eccent, phi, sinphi) {\n\t  var con = eccent * sinphi;\n\t  var com = 0.5 * eccent;\n\t  con = Math.pow(((1 - con) / (1 + con)), com);\n\t  return (Math.tan(0.5 * (HALF_PI - phi)) / con);\n\t};\n\n\tvar phi2z = function(eccent, ts) {\n\t  var eccnth = 0.5 * eccent;\n\t  var con, dphi;\n\t  var phi = HALF_PI - 2 * Math.atan(ts);\n\t  for (var i = 0; i <= 15; i++) {\n\t    con = eccent * Math.sin(phi);\n\t    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\t  //console.log(\"phi2z has NoConvergence\");\n\t  return -9999;\n\t};\n\n\tfunction init() {\n\t  var con = this.b / this.a;\n\t  this.es = 1 - con * con;\n\t  if(!('x0' in this)){\n\t    this.x0 = 0;\n\t  }\n\t  if(!('y0' in this)){\n\t    this.y0 = 0;\n\t  }\n\t  this.e = Math.sqrt(this.es);\n\t  if (this.lat_ts) {\n\t    if (this.sphere) {\n\t      this.k0 = Math.cos(this.lat_ts);\n\t    }\n\t    else {\n\t      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n\t    }\n\t  }\n\t  else {\n\t    if (!this.k0) {\n\t      if (this.k) {\n\t        this.k0 = this.k;\n\t      }\n\t      else {\n\t        this.k0 = 1;\n\t      }\n\t    }\n\t  }\n\t}\n\n\t/* Mercator forward equations--mapping lat,long to x,y\n\t  --------------------------------------------------*/\n\n\tfunction forward(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  // convert to radians\n\t  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {\n\t    return null;\n\t  }\n\n\t  var x, y;\n\t  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n\t    return null;\n\t  }\n\t  else {\n\t    if (this.sphere) {\n\t      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n\t      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));\n\t    }\n\t    else {\n\t      var sinphi = Math.sin(lat);\n\t      var ts = tsfnz(this.e, lat, sinphi);\n\t      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);\n\t      y = this.y0 - this.a * this.k0 * Math.log(ts);\n\t    }\n\t    p.x = x;\n\t    p.y = y;\n\t    return p;\n\t  }\n\t}\n\n\t/* Mercator inverse equations--mapping x,y to lat/long\n\t  --------------------------------------------------*/\n\tfunction inverse(p) {\n\n\t  var x = p.x - this.x0;\n\t  var y = p.y - this.y0;\n\t  var lon, lat;\n\n\t  if (this.sphere) {\n\t    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));\n\t  }\n\t  else {\n\t    var ts = Math.exp(-y / (this.a * this.k0));\n\t    lat = phi2z(this.e, ts);\n\t    if (lat === -9999) {\n\t      return null;\n\t    }\n\t  }\n\t  lon = adjust_lon(this.long0 + x / (this.a * this.k0));\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$1 = [\"Mercator\", \"Popular Visualisation Pseudo Mercator\", \"Mercator_1SP\", \"Mercator_Auxiliary_Sphere\", \"merc\"];\n\tvar merc = {\n\t  init: init,\n\t  forward: forward,\n\t  inverse: inverse,\n\t  names: names$1\n\t};\n\n\tfunction init$1() {\n\t  //no-op for longlat\n\t}\n\n\tfunction identity(pt) {\n\t  return pt;\n\t}\n\tvar names$2 = [\"longlat\", \"identity\"];\n\tvar longlat = {\n\t  init: init$1,\n\t  forward: identity,\n\t  inverse: identity,\n\t  names: names$2\n\t};\n\n\tvar projs = [merc, longlat];\n\tvar names = {};\n\tvar projStore = [];\n\n\tfunction add(proj, i) {\n\t  var len = projStore.length;\n\t  if (!proj.names) {\n\t    console.log(i);\n\t    return true;\n\t  }\n\t  projStore[len] = proj;\n\t  proj.names.forEach(function(n) {\n\t    names[n.toLowerCase()] = len;\n\t  });\n\t  return this;\n\t}\n\n\tfunction get(name) {\n\t  if (!name) {\n\t    return false;\n\t  }\n\t  var n = name.toLowerCase();\n\t  if (typeof names[n] !== 'undefined' && projStore[names[n]]) {\n\t    return projStore[names[n]];\n\t  }\n\t}\n\n\tfunction start() {\n\t  projs.forEach(add);\n\t}\n\tvar projections = {\n\t  start: start,\n\t  add: add,\n\t  get: get\n\t};\n\n\tvar exports$2 = {};\n\texports$2.MERIT = {\n\t  a: 6378137.0,\n\t  rf: 298.257,\n\t  ellipseName: \"MERIT 1983\"\n\t};\n\n\texports$2.SGS85 = {\n\t  a: 6378136.0,\n\t  rf: 298.257,\n\t  ellipseName: \"Soviet Geodetic System 85\"\n\t};\n\n\texports$2.GRS80 = {\n\t  a: 6378137.0,\n\t  rf: 298.257222101,\n\t  ellipseName: \"GRS 1980(IUGG, 1980)\"\n\t};\n\n\texports$2.IAU76 = {\n\t  a: 6378140.0,\n\t  rf: 298.257,\n\t  ellipseName: \"IAU 1976\"\n\t};\n\n\texports$2.airy = {\n\t  a: 6377563.396,\n\t  b: 6356256.910,\n\t  ellipseName: \"Airy 1830\"\n\t};\n\n\texports$2.APL4 = {\n\t  a: 6378137,\n\t  rf: 298.25,\n\t  ellipseName: \"Appl. Physics. 1965\"\n\t};\n\n\texports$2.NWL9D = {\n\t  a: 6378145.0,\n\t  rf: 298.25,\n\t  ellipseName: \"Naval Weapons Lab., 1965\"\n\t};\n\n\texports$2.mod_airy = {\n\t  a: 6377340.189,\n\t  b: 6356034.446,\n\t  ellipseName: \"Modified Airy\"\n\t};\n\n\texports$2.andrae = {\n\t  a: 6377104.43,\n\t  rf: 300.0,\n\t  ellipseName: \"Andrae 1876 (Den., Iclnd.)\"\n\t};\n\n\texports$2.aust_SA = {\n\t  a: 6378160.0,\n\t  rf: 298.25,\n\t  ellipseName: \"Australian Natl & S. Amer. 1969\"\n\t};\n\n\texports$2.GRS67 = {\n\t  a: 6378160.0,\n\t  rf: 298.2471674270,\n\t  ellipseName: \"GRS 67(IUGG 1967)\"\n\t};\n\n\texports$2.bessel = {\n\t  a: 6377397.155,\n\t  rf: 299.1528128,\n\t  ellipseName: \"Bessel 1841\"\n\t};\n\n\texports$2.bess_nam = {\n\t  a: 6377483.865,\n\t  rf: 299.1528128,\n\t  ellipseName: \"Bessel 1841 (Namibia)\"\n\t};\n\n\texports$2.clrk66 = {\n\t  a: 6378206.4,\n\t  b: 6356583.8,\n\t  ellipseName: \"Clarke 1866\"\n\t};\n\n\texports$2.clrk80 = {\n\t  a: 6378249.145,\n\t  rf: 293.4663,\n\t  ellipseName: \"Clarke 1880 mod.\"\n\t};\n\n\texports$2.clrk58 = {\n\t  a: 6378293.645208759,\n\t  rf: 294.2606763692654,\n\t  ellipseName: \"Clarke 1858\"\n\t};\n\n\texports$2.CPM = {\n\t  a: 6375738.7,\n\t  rf: 334.29,\n\t  ellipseName: \"Comm. des Poids et Mesures 1799\"\n\t};\n\n\texports$2.delmbr = {\n\t  a: 6376428.0,\n\t  rf: 311.5,\n\t  ellipseName: \"Delambre 1810 (Belgium)\"\n\t};\n\n\texports$2.engelis = {\n\t  a: 6378136.05,\n\t  rf: 298.2566,\n\t  ellipseName: \"Engelis 1985\"\n\t};\n\n\texports$2.evrst30 = {\n\t  a: 6377276.345,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1830\"\n\t};\n\n\texports$2.evrst48 = {\n\t  a: 6377304.063,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1948\"\n\t};\n\n\texports$2.evrst56 = {\n\t  a: 6377301.243,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1956\"\n\t};\n\n\texports$2.evrst69 = {\n\t  a: 6377295.664,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest 1969\"\n\t};\n\n\texports$2.evrstSS = {\n\t  a: 6377298.556,\n\t  rf: 300.8017,\n\t  ellipseName: \"Everest (Sabah & Sarawak)\"\n\t};\n\n\texports$2.fschr60 = {\n\t  a: 6378166.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer (Mercury Datum) 1960\"\n\t};\n\n\texports$2.fschr60m = {\n\t  a: 6378155.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer 1960\"\n\t};\n\n\texports$2.fschr68 = {\n\t  a: 6378150.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Fischer 1968\"\n\t};\n\n\texports$2.helmert = {\n\t  a: 6378200.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Helmert 1906\"\n\t};\n\n\texports$2.hough = {\n\t  a: 6378270.0,\n\t  rf: 297.0,\n\t  ellipseName: \"Hough\"\n\t};\n\n\texports$2.intl = {\n\t  a: 6378388.0,\n\t  rf: 297.0,\n\t  ellipseName: \"International 1909 (Hayford)\"\n\t};\n\n\texports$2.kaula = {\n\t  a: 6378163.0,\n\t  rf: 298.24,\n\t  ellipseName: \"Kaula 1961\"\n\t};\n\n\texports$2.lerch = {\n\t  a: 6378139.0,\n\t  rf: 298.257,\n\t  ellipseName: \"Lerch 1979\"\n\t};\n\n\texports$2.mprts = {\n\t  a: 6397300.0,\n\t  rf: 191.0,\n\t  ellipseName: \"Maupertius 1738\"\n\t};\n\n\texports$2.new_intl = {\n\t  a: 6378157.5,\n\t  b: 6356772.2,\n\t  ellipseName: \"New International 1967\"\n\t};\n\n\texports$2.plessis = {\n\t  a: 6376523.0,\n\t  rf: 6355863.0,\n\t  ellipseName: \"Plessis 1817 (France)\"\n\t};\n\n\texports$2.krass = {\n\t  a: 6378245.0,\n\t  rf: 298.3,\n\t  ellipseName: \"Krassovsky, 1942\"\n\t};\n\n\texports$2.SEasia = {\n\t  a: 6378155.0,\n\t  b: 6356773.3205,\n\t  ellipseName: \"Southeast Asia\"\n\t};\n\n\texports$2.walbeck = {\n\t  a: 6376896.0,\n\t  b: 6355834.8467,\n\t  ellipseName: \"Walbeck\"\n\t};\n\n\texports$2.WGS60 = {\n\t  a: 6378165.0,\n\t  rf: 298.3,\n\t  ellipseName: \"WGS 60\"\n\t};\n\n\texports$2.WGS66 = {\n\t  a: 6378145.0,\n\t  rf: 298.25,\n\t  ellipseName: \"WGS 66\"\n\t};\n\n\texports$2.WGS7 = {\n\t  a: 6378135.0,\n\t  rf: 298.26,\n\t  ellipseName: \"WGS 72\"\n\t};\n\n\tvar WGS84 = exports$2.WGS84 = {\n\t  a: 6378137.0,\n\t  rf: 298.257223563,\n\t  ellipseName: \"WGS 84\"\n\t};\n\n\texports$2.sphere = {\n\t  a: 6370997.0,\n\t  b: 6370997.0,\n\t  ellipseName: \"Normal Sphere (r=6370997)\"\n\t};\n\n\tfunction eccentricity(a, b, rf, R_A) {\n\t  var a2 = a * a; // used in geocentric\n\t  var b2 = b * b; // used in geocentric\n\t  var es = (a2 - b2) / a2; // e ^ 2\n\t  var e = 0;\n\t  if (R_A) {\n\t    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));\n\t    a2 = a * a;\n\t    es = 0;\n\t  } else {\n\t    e = Math.sqrt(es); // eccentricity\n\t  }\n\t  var ep2 = (a2 - b2) / b2; // used in geocentric\n\t  return {\n\t    es: es,\n\t    e: e,\n\t    ep2: ep2\n\t  };\n\t}\n\tfunction sphere(a, b, rf, ellps, sphere) {\n\t  if (!a) { // do we have an ellipsoid?\n\t    var ellipse = match(exports$2, ellps);\n\t    if (!ellipse) {\n\t      ellipse = WGS84;\n\t    }\n\t    a = ellipse.a;\n\t    b = ellipse.b;\n\t    rf = ellipse.rf;\n\t  }\n\n\t  if (rf && !b) {\n\t    b = (1.0 - 1.0 / rf) * a;\n\t  }\n\t  if (rf === 0 || Math.abs(a - b) < EPSLN) {\n\t    sphere = true;\n\t    b = a;\n\t  }\n\t  return {\n\t    a: a,\n\t    b: b,\n\t    rf: rf,\n\t    sphere: sphere\n\t  };\n\t}\n\n\tvar exports$3 = {};\n\texports$3.wgs84 = {\n\t  towgs84: \"0,0,0\",\n\t  ellipse: \"WGS84\",\n\t  datumName: \"WGS84\"\n\t};\n\n\texports$3.ch1903 = {\n\t  towgs84: \"674.374,15.056,405.346\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"swiss\"\n\t};\n\n\texports$3.ggrs87 = {\n\t  towgs84: \"-199.87,74.79,246.62\",\n\t  ellipse: \"GRS80\",\n\t  datumName: \"Greek_Geodetic_Reference_System_1987\"\n\t};\n\n\texports$3.nad83 = {\n\t  towgs84: \"0,0,0\",\n\t  ellipse: \"GRS80\",\n\t  datumName: \"North_American_Datum_1983\"\n\t};\n\n\texports$3.nad27 = {\n\t  nadgrids: \"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",\n\t  ellipse: \"clrk66\",\n\t  datumName: \"North_American_Datum_1927\"\n\t};\n\n\texports$3.potsdam = {\n\t  towgs84: \"606.0,23.0,413.0\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"Potsdam Rauenberg 1950 DHDN\"\n\t};\n\n\texports$3.carthage = {\n\t  towgs84: \"-263.0,6.0,431.0\",\n\t  ellipse: \"clark80\",\n\t  datumName: \"Carthage 1934 Tunisia\"\n\t};\n\n\texports$3.hermannskogel = {\n\t  towgs84: \"653.0,-212.0,449.0\",\n\t  ellipse: \"bessel\",\n\t  datumName: \"Hermannskogel\"\n\t};\n\n\texports$3.osni52 = {\n\t  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n\t  ellipse: \"airy\",\n\t  datumName: \"Irish National\"\n\t};\n\n\texports$3.ire65 = {\n\t  towgs84: \"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",\n\t  ellipse: \"mod_airy\",\n\t  datumName: \"Ireland 1965\"\n\t};\n\n\texports$3.rassadiran = {\n\t  towgs84: \"-133.63,-157.5,-158.62\",\n\t  ellipse: \"intl\",\n\t  datumName: \"Rassadiran\"\n\t};\n\n\texports$3.nzgd49 = {\n\t  towgs84: \"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",\n\t  ellipse: \"intl\",\n\t  datumName: \"New Zealand Geodetic Datum 1949\"\n\t};\n\n\texports$3.osgb36 = {\n\t  towgs84: \"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",\n\t  ellipse: \"airy\",\n\t  datumName: \"Airy 1830\"\n\t};\n\n\texports$3.s_jtsk = {\n\t  towgs84: \"589,76,480\",\n\t  ellipse: 'bessel',\n\t  datumName: 'S-JTSK (Ferro)'\n\t};\n\n\texports$3.beduaram = {\n\t  towgs84: '-106,-87,188',\n\t  ellipse: 'clrk80',\n\t  datumName: 'Beduaram'\n\t};\n\n\texports$3.gunung_segara = {\n\t  towgs84: '-403,684,41',\n\t  ellipse: 'bessel',\n\t  datumName: 'Gunung Segara Jakarta'\n\t};\n\n\texports$3.rnb72 = {\n\t  towgs84: \"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",\n\t  ellipse: \"intl\",\n\t  datumName: \"Reseau National Belge 1972\"\n\t};\n\n\tfunction datum(datumCode, datum_params, a, b, es, ep2) {\n\t  var out = {};\n\n\t  if (datumCode === undefined || datumCode === 'none') {\n\t    out.datum_type = PJD_NODATUM;\n\t  } else {\n\t    out.datum_type = PJD_WGS84;\n\t  }\n\n\t  if (datum_params) {\n\t    out.datum_params = datum_params.map(parseFloat);\n\t    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {\n\t      out.datum_type = PJD_3PARAM;\n\t    }\n\t    if (out.datum_params.length > 3) {\n\t      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {\n\t        out.datum_type = PJD_7PARAM;\n\t        out.datum_params[3] *= SEC_TO_RAD;\n\t        out.datum_params[4] *= SEC_TO_RAD;\n\t        out.datum_params[5] *= SEC_TO_RAD;\n\t        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;\n\t      }\n\t    }\n\t  }\n\n\t  out.a = a; //datum object also uses these values\n\t  out.b = b;\n\t  out.es = es;\n\t  out.ep2 = ep2;\n\t  return out;\n\t}\n\n\tfunction Projection(srsCode,callback) {\n\t  if (!(this instanceof Projection)) {\n\t    return new Projection(srsCode);\n\t  }\n\t  callback = callback || function(error){\n\t    if(error){\n\t      throw error;\n\t    }\n\t  };\n\t  var json = parse(srsCode);\n\t  if(typeof json !== 'object'){\n\t    callback(srsCode);\n\t    return;\n\t  }\n\t  var ourProj = Projection.projections.get(json.projName);\n\t  if(!ourProj){\n\t    callback(srsCode);\n\t    return;\n\t  }\n\t  if (json.datumCode && json.datumCode !== 'none') {\n\t    var datumDef = match(exports$3, json.datumCode);\n\t    if (datumDef) {\n\t      json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;\n\t      json.ellps = datumDef.ellipse;\n\t      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;\n\t    }\n\t  }\n\t  json.k0 = json.k0 || 1.0;\n\t  json.axis = json.axis || 'enu';\n\t  json.ellps = json.ellps || 'wgs84';\n\t  var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);\n\t  var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);\n\t  var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);\n\n\t  extend(this, json); // transfer everything over from the projection because we don't know what we'll need\n\t  extend(this, ourProj); // transfer all the methods from the projection\n\n\t  // copy the 4 things over we calulated in deriveConstants.sphere\n\t  this.a = sphere_.a;\n\t  this.b = sphere_.b;\n\t  this.rf = sphere_.rf;\n\t  this.sphere = sphere_.sphere;\n\n\t  // copy the 3 things we calculated in deriveConstants.eccentricity\n\t  this.es = ecc.es;\n\t  this.e = ecc.e;\n\t  this.ep2 = ecc.ep2;\n\n\t  // add in the datum object\n\t  this.datum = datumObj;\n\n\t  // init the projection\n\t  this.init();\n\n\t  // legecy callback from back in the day when it went to spatialreference.org\n\t  callback(null, this);\n\n\t}\n\tProjection.projections = projections;\n\tProjection.projections.start();\n\n\t'use strict';\n\tfunction compareDatums(source, dest) {\n\t  if (source.datum_type !== dest.datum_type) {\n\t    return false; // false, datums are not equal\n\t  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {\n\t    // the tolerance for es is to ensure that GRS80 and WGS84\n\t    // are considered identical\n\t    return false;\n\t  } else if (source.datum_type === PJD_3PARAM) {\n\t    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);\n\t  } else if (source.datum_type === PJD_7PARAM) {\n\t    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);\n\t  } else {\n\t    return true; // datums are equal\n\t  }\n\t} // cs_compare_datums()\n\n\t/*\n\t * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates\n\t * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),\n\t * according to the current ellipsoid parameters.\n\t *\n\t *    Latitude  : Geodetic latitude in radians                     (input)\n\t *    Longitude : Geodetic longitude in radians                    (input)\n\t *    Height    : Geodetic height, in meters                       (input)\n\t *    X         : Calculated Geocentric X coordinate, in meters    (output)\n\t *    Y         : Calculated Geocentric Y coordinate, in meters    (output)\n\t *    Z         : Calculated Geocentric Z coordinate, in meters    (output)\n\t *\n\t */\n\tfunction geodeticToGeocentric(p, es, a) {\n\t  var Longitude = p.x;\n\t  var Latitude = p.y;\n\t  var Height = p.z ? p.z : 0; //Z value not always supplied\n\n\t  var Rn; /*  Earth radius at location  */\n\t  var Sin_Lat; /*  Math.sin(Latitude)  */\n\t  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */\n\t  var Cos_Lat; /*  Math.cos(Latitude)  */\n\n\t  /*\n\t   ** Don't blow up if Latitude is just a little out of the value\n\t   ** range as it may just be a rounding issue.  Also removed longitude\n\t   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.\n\t   */\n\t  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {\n\t    Latitude = -HALF_PI;\n\t  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {\n\t    Latitude = HALF_PI;\n\t  } else if (Latitude < -HALF_PI) {\n\t    /* Latitude out of range */\n\t    //..reportError('geocent:lat out of range:' + Latitude);\n\t    return { x: -Infinity, y: -Infinity, z: p.z };\n\t  } else if (Latitude > HALF_PI) {\n\t    /* Latitude out of range */\n\t    return { x: Infinity, y: Infinity, z: p.z };\n\t  }\n\n\t  if (Longitude > Math.PI) {\n\t    Longitude -= (2 * Math.PI);\n\t  }\n\t  Sin_Lat = Math.sin(Latitude);\n\t  Cos_Lat = Math.cos(Latitude);\n\t  Sin2_Lat = Sin_Lat * Sin_Lat;\n\t  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));\n\t  return {\n\t    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),\n\t    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),\n\t    z: ((Rn * (1 - es)) + Height) * Sin_Lat\n\t  };\n\t} // cs_geodetic_to_geocentric()\n\n\tfunction geocentricToGeodetic(p, es, a, b) {\n\t  /* local defintions and variables */\n\t  /* end-criterium of loop, accuracy of sin(Latitude) */\n\t  var genau = 1e-12;\n\t  var genau2 = (genau * genau);\n\t  var maxiter = 30;\n\n\t  var P; /* distance between semi-minor axis and location */\n\t  var RR; /* distance between center and location */\n\t  var CT; /* sin of geocentric latitude */\n\t  var ST; /* cos of geocentric latitude */\n\t  var RX;\n\t  var RK;\n\t  var RN; /* Earth radius at location */\n\t  var CPHI0; /* cos of start or old geodetic latitude in iterations */\n\t  var SPHI0; /* sin of start or old geodetic latitude in iterations */\n\t  var CPHI; /* cos of searched geodetic latitude */\n\t  var SPHI; /* sin of searched geodetic latitude */\n\t  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */\n\t  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */\n\n\t  var X = p.x;\n\t  var Y = p.y;\n\t  var Z = p.z ? p.z : 0.0; //Z value not always supplied\n\t  var Longitude;\n\t  var Latitude;\n\t  var Height;\n\n\t  P = Math.sqrt(X * X + Y * Y);\n\t  RR = Math.sqrt(X * X + Y * Y + Z * Z);\n\n\t  /*      special cases for latitude and longitude */\n\t  if (P / a < genau) {\n\n\t    /*  special case, if P=0. (X=0., Y=0.) */\n\t    Longitude = 0.0;\n\n\t    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis\n\t     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */\n\t    if (RR / a < genau) {\n\t      Latitude = HALF_PI;\n\t      Height = -b;\n\t      return {\n\t        x: p.x,\n\t        y: p.y,\n\t        z: p.z\n\t      };\n\t    }\n\t  } else {\n\t    /*  ellipsoidal (geodetic) longitude\n\t     *  interval: -PI < Longitude <= +PI */\n\t    Longitude = Math.atan2(Y, X);\n\t  }\n\n\t  /* --------------------------------------------------------------\n\t   * Following iterative algorithm was developped by\n\t   * \"Institut for Erdmessung\", University of Hannover, July 1988.\n\t   * Internet: www.ife.uni-hannover.de\n\t   * Iterative computation of CPHI,SPHI and Height.\n\t   * Iteration of CPHI and SPHI to 10**-12 radian resp.\n\t   * 2*10**-7 arcsec.\n\t   * --------------------------------------------------------------\n\t   */\n\t  CT = Z / RR;\n\t  ST = P / RR;\n\t  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);\n\t  CPHI0 = ST * (1.0 - es) * RX;\n\t  SPHI0 = CT * RX;\n\t  iter = 0;\n\n\t  /* loop to find sin(Latitude) resp. Latitude\n\t   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */\n\t  do {\n\t    iter++;\n\t    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);\n\n\t    /*  ellipsoidal (geodetic) height */\n\t    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);\n\n\t    RK = es * RN / (RN + Height);\n\t    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);\n\t    CPHI = ST * (1.0 - RK) * RX;\n\t    SPHI = CT * RX;\n\t    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;\n\t    CPHI0 = CPHI;\n\t    SPHI0 = SPHI;\n\t  }\n\t  while (SDPHI * SDPHI > genau2 && iter < maxiter);\n\n\t  /*      ellipsoidal (geodetic) latitude */\n\t  Latitude = Math.atan(SPHI / Math.abs(CPHI));\n\t  return {\n\t    x: Longitude,\n\t    y: Latitude,\n\t    z: Height\n\t  };\n\t} // cs_geocentric_to_geodetic()\n\n\t/****************************************************************/\n\t// pj_geocentic_to_wgs84( p )\n\t//  p = point to transform in geocentric coordinates (x,y,z)\n\n\n\t/** point object, nothing fancy, just allows values to be\n\t    passed back and forth by reference rather than by value.\n\t    Other point classes may be used as long as they have\n\t    x and y properties, which will get modified in the transform method.\n\t*/\n\tfunction geocentricToWgs84(p, datum_type, datum_params) {\n\n\t  if (datum_type === PJD_3PARAM) {\n\t    // if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: p.x + datum_params[0],\n\t      y: p.y + datum_params[1],\n\t      z: p.z + datum_params[2],\n\t    };\n\t  } else if (datum_type === PJD_7PARAM) {\n\t    var Dx_BF = datum_params[0];\n\t    var Dy_BF = datum_params[1];\n\t    var Dz_BF = datum_params[2];\n\t    var Rx_BF = datum_params[3];\n\t    var Ry_BF = datum_params[4];\n\t    var Rz_BF = datum_params[5];\n\t    var M_BF = datum_params[6];\n\t    // if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,\n\t      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,\n\t      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF\n\t    };\n\t  }\n\t} // cs_geocentric_to_wgs84\n\n\t/****************************************************************/\n\t// pj_geocentic_from_wgs84()\n\t//  coordinate system definition,\n\t//  point to transform in geocentric coordinates (x,y,z)\n\tfunction geocentricFromWgs84(p, datum_type, datum_params) {\n\n\t  if (datum_type === PJD_3PARAM) {\n\t    //if( x[io] === HUGE_VAL )\n\t    //    continue;\n\t    return {\n\t      x: p.x - datum_params[0],\n\t      y: p.y - datum_params[1],\n\t      z: p.z - datum_params[2],\n\t    };\n\n\t  } else if (datum_type === PJD_7PARAM) {\n\t    var Dx_BF = datum_params[0];\n\t    var Dy_BF = datum_params[1];\n\t    var Dz_BF = datum_params[2];\n\t    var Rx_BF = datum_params[3];\n\t    var Ry_BF = datum_params[4];\n\t    var Rz_BF = datum_params[5];\n\t    var M_BF = datum_params[6];\n\t    var x_tmp = (p.x - Dx_BF) / M_BF;\n\t    var y_tmp = (p.y - Dy_BF) / M_BF;\n\t    var z_tmp = (p.z - Dz_BF) / M_BF;\n\t    //if( x[io] === HUGE_VAL )\n\t    //    continue;\n\n\t    return {\n\t      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,\n\t      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,\n\t      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp\n\t    };\n\t  } //cs_geocentric_from_wgs84()\n\t}\n\n\tfunction checkParams(type) {\n\t  return (type === PJD_3PARAM || type === PJD_7PARAM);\n\t}\n\n\tvar datum_transform = function(source, dest, point) {\n\t  // Short cut if the datums are identical.\n\t  if (compareDatums(source, dest)) {\n\t    return point; // in this case, zero is sucess,\n\t    // whereas cs_compare_datums returns 1 to indicate TRUE\n\t    // confusing, should fix this\n\t  }\n\n\t  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest\n\t  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {\n\t    return point;\n\t  }\n\n\t  // If this datum requires grid shifts, then apply it to geodetic coordinates.\n\n\t  // Do we need to go through geocentric coordinates?\n\t  if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {\n\t    return point;\n\t  }\n\n\t  // Convert to geocentric coordinates.\n\t  point = geodeticToGeocentric(point, source.es, source.a);\n\t  // Convert between datums\n\t  if (checkParams(source.datum_type)) {\n\t    point = geocentricToWgs84(point, source.datum_type, source.datum_params);\n\t  }\n\t  if (checkParams(dest.datum_type)) {\n\t    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);\n\t  }\n\t  return geocentricToGeodetic(point, dest.es, dest.a, dest.b);\n\n\t};\n\n\tvar adjust_axis = function(crs, denorm, point) {\n\t  var xin = point.x,\n\t    yin = point.y,\n\t    zin = point.z || 0.0;\n\t  var v, t, i;\n\t  var out = {};\n\t  for (i = 0; i < 3; i++) {\n\t    if (denorm && i === 2 && point.z === undefined) {\n\t      continue;\n\t    }\n\t    if (i === 0) {\n\t      v = xin;\n\t      t = 'x';\n\t    }\n\t    else if (i === 1) {\n\t      v = yin;\n\t      t = 'y';\n\t    }\n\t    else {\n\t      v = zin;\n\t      t = 'z';\n\t    }\n\t    switch (crs.axis[i]) {\n\t    case 'e':\n\t      out[t] = v;\n\t      break;\n\t    case 'w':\n\t      out[t] = -v;\n\t      break;\n\t    case 'n':\n\t      out[t] = v;\n\t      break;\n\t    case 's':\n\t      out[t] = -v;\n\t      break;\n\t    case 'u':\n\t      if (point[t] !== undefined) {\n\t        out.z = v;\n\t      }\n\t      break;\n\t    case 'd':\n\t      if (point[t] !== undefined) {\n\t        out.z = -v;\n\t      }\n\t      break;\n\t    default:\n\t      //console.log(\"ERROR: unknow axis (\"+crs.axis[i]+\") - check definition of \"+crs.projName);\n\t      return null;\n\t    }\n\t  }\n\t  return out;\n\t};\n\n\tvar toPoint = function (array){\n\t  var out = {\n\t    x: array[0],\n\t    y: array[1]\n\t  };\n\t  if (array.length>2) {\n\t    out.z = array[2];\n\t  }\n\t  if (array.length>3) {\n\t    out.m = array[3];\n\t  }\n\t  return out;\n\t};\n\n\tvar checkSanity = function (point) {\n\t  checkCoord(point.x);\n\t  checkCoord(point.y);\n\t};\n\tfunction checkCoord(num) {\n\t  if (typeof Number.isFinite === 'function') {\n\t    if (Number.isFinite(num)) {\n\t      return;\n\t    }\n\t    throw new TypeError('coordinates must be finite numbers');\n\t  }\n\t  if (typeof num !== 'number' || num !== num || !isFinite(num)) {\n\t    throw new TypeError('coordinates must be finite numbers');\n\t  }\n\t}\n\n\tfunction checkNotWGS(source, dest) {\n\t  return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');\n\t}\n\n\tfunction transform(source, dest, point) {\n\t  var wgs84;\n\t  if (Array.isArray(point)) {\n\t    point = toPoint(point);\n\t  }\n\t  checkSanity(point);\n\t  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84\n\t  if (source.datum && dest.datum && checkNotWGS(source, dest)) {\n\t    wgs84 = new Projection('WGS84');\n\t    point = transform(source, wgs84, point);\n\t    source = wgs84;\n\t  }\n\t  // DGR, 2010/11/12\n\t  if (source.axis !== 'enu') {\n\t    point = adjust_axis(source, false, point);\n\t  }\n\t  // Transform source points to long/lat, if they aren't already.\n\t  if (source.projName === 'longlat') {\n\t    point = {\n\t      x: point.x * D2R,\n\t      y: point.y * D2R\n\t    };\n\t  }\n\t  else {\n\t    if (source.to_meter) {\n\t      point = {\n\t        x: point.x * source.to_meter,\n\t        y: point.y * source.to_meter\n\t      };\n\t    }\n\t    point = source.inverse(point); // Convert Cartesian to longlat\n\t  }\n\t  // Adjust for the prime meridian if necessary\n\t  if (source.from_greenwich) {\n\t    point.x += source.from_greenwich;\n\t  }\n\n\t  // Convert datums if needed, and if possible.\n\t  point = datum_transform(source.datum, dest.datum, point);\n\n\t  // Adjust for the prime meridian if necessary\n\t  if (dest.from_greenwich) {\n\t    point = {\n\t      x: point.x - dest.from_greenwich,\n\t      y: point.y\n\t    };\n\t  }\n\n\t  if (dest.projName === 'longlat') {\n\t    // convert radians to decimal degrees\n\t    point = {\n\t      x: point.x * R2D,\n\t      y: point.y * R2D\n\t    };\n\t  } else { // else project\n\t    point = dest.forward(point);\n\t    if (dest.to_meter) {\n\t      point = {\n\t        x: point.x / dest.to_meter,\n\t        y: point.y / dest.to_meter\n\t      };\n\t    }\n\t  }\n\n\t  // DGR, 2010/11/12\n\t  if (dest.axis !== 'enu') {\n\t    return adjust_axis(dest, true, point);\n\t  }\n\n\t  return point;\n\t}\n\n\tvar wgs84 = Projection('WGS84');\n\n\tfunction transformer(from, to, coords) {\n\t  var transformedArray, out, keys;\n\t  if (Array.isArray(coords)) {\n\t    transformedArray = transform(from, to, coords);\n\t    if (coords.length === 3) {\n\t      return [transformedArray.x, transformedArray.y, transformedArray.z];\n\t    }\n\t    else {\n\t      return [transformedArray.x, transformedArray.y];\n\t    }\n\t  }\n\t  else {\n\t    out = transform(from, to, coords);\n\t    keys = Object.keys(coords);\n\t    if (keys.length === 2) {\n\t      return out;\n\t    }\n\t    keys.forEach(function (key) {\n\t      if (key === 'x' || key === 'y') {\n\t        return;\n\t      }\n\t      out[key] = coords[key];\n\t    });\n\t    return out;\n\t  }\n\t}\n\n\tfunction checkProj(item) {\n\t  if (item instanceof Projection) {\n\t    return item;\n\t  }\n\t  if (item.oProj) {\n\t    return item.oProj;\n\t  }\n\t  return Projection(item);\n\t}\n\tfunction proj4$1(fromProj, toProj, coord) {\n\t  fromProj = checkProj(fromProj);\n\t  var single = false;\n\t  var obj;\n\t  if (typeof toProj === 'undefined') {\n\t    toProj = fromProj;\n\t    fromProj = wgs84;\n\t    single = true;\n\t  }\n\t  else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {\n\t    coord = toProj;\n\t    toProj = fromProj;\n\t    fromProj = wgs84;\n\t    single = true;\n\t  }\n\t  toProj = checkProj(toProj);\n\t  if (coord) {\n\t    return transformer(fromProj, toProj, coord);\n\t  }\n\t  else {\n\t    obj = {\n\t      forward: function(coords) {\n\t        return transformer(fromProj, toProj, coords);\n\t      },\n\t      inverse: function(coords) {\n\t        return transformer(toProj, fromProj, coords);\n\t      }\n\t    };\n\t    if (single) {\n\t      obj.oProj = toProj;\n\t    }\n\t    return obj;\n\t  }\n\t}\n\n\t/**\n\t * UTM zones are grouped, and assigned to one of a group of 6\n\t * sets.\n\t *\n\t * {int} @private\n\t */\n\tvar NUM_100K_SETS = 6;\n\n\t/**\n\t * The column letters (for easting) of the lower left value, per\n\t * set.\n\t *\n\t * {string} @private\n\t */\n\tvar SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';\n\n\t/**\n\t * The row letters (for northing) of the lower left value, per\n\t * set.\n\t *\n\t * {string} @private\n\t */\n\tvar SET_ORIGIN_ROW_LETTERS = 'AFAFAF';\n\n\tvar A = 65; // A\n\tvar I = 73; // I\n\tvar O = 79; // O\n\tvar V = 86; // V\n\tvar Z = 90; // Z\n\tvar mgrs = {\n\t  forward: forward$1,\n\t  inverse: inverse$1,\n\t  toPoint: toPoint$1\n\t};\n\t/**\n\t * Conversion of lat/lon to MGRS.\n\t *\n\t * @param {object} ll Object literal with lat and lon properties on a\n\t *     WGS84 ellipsoid.\n\t * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for\n\t *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.\n\t * @return {string} the MGRS string for the given location and accuracy.\n\t */\n\tfunction forward$1(ll, accuracy) {\n\t  accuracy = accuracy || 5; // default accuracy 1m\n\t  return encode(LLtoUTM({\n\t    lat: ll[1],\n\t    lon: ll[0]\n\t  }), accuracy);\n\t}\n\n\t/**\n\t * Conversion of MGRS to lat/lon.\n\t *\n\t * @param {string} mgrs MGRS string.\n\t * @return {array} An array with left (longitude), bottom (latitude), right\n\t *     (longitude) and top (latitude) values in WGS84, representing the\n\t *     bounding box for the provided MGRS reference.\n\t */\n\tfunction inverse$1(mgrs) {\n\t  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n\t  if (bbox.lat && bbox.lon) {\n\t    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];\n\t  }\n\t  return [bbox.left, bbox.bottom, bbox.right, bbox.top];\n\t}\n\n\tfunction toPoint$1(mgrs) {\n\t  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));\n\t  if (bbox.lat && bbox.lon) {\n\t    return [bbox.lon, bbox.lat];\n\t  }\n\t  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];\n\t}\n\t/**\n\t * Conversion from degrees to radians.\n\t *\n\t * @private\n\t * @param {number} deg the angle in degrees.\n\t * @return {number} the angle in radians.\n\t */\n\tfunction degToRad(deg) {\n\t  return (deg * (Math.PI / 180.0));\n\t}\n\n\t/**\n\t * Conversion from radians to degrees.\n\t *\n\t * @private\n\t * @param {number} rad the angle in radians.\n\t * @return {number} the angle in degrees.\n\t */\n\tfunction radToDeg(rad) {\n\t  return (180.0 * (rad / Math.PI));\n\t}\n\n\t/**\n\t * Converts a set of Longitude and Latitude co-ordinates to UTM\n\t * using the WGS84 ellipsoid.\n\t *\n\t * @private\n\t * @param {object} ll Object literal with lat and lon properties\n\t *     representing the WGS84 coordinate to be converted.\n\t * @return {object} Object literal containing the UTM value with easting,\n\t *     northing, zoneNumber and zoneLetter properties, and an optional\n\t *     accuracy property in digits. Returns null if the conversion failed.\n\t */\n\tfunction LLtoUTM(ll) {\n\t  var Lat = ll.lat;\n\t  var Long = ll.lon;\n\t  var a = 6378137.0; //ellip.radius;\n\t  var eccSquared = 0.00669438; //ellip.eccsq;\n\t  var k0 = 0.9996;\n\t  var LongOrigin;\n\t  var eccPrimeSquared;\n\t  var N, T, C, A, M;\n\t  var LatRad = degToRad(Lat);\n\t  var LongRad = degToRad(Long);\n\t  var LongOriginRad;\n\t  var ZoneNumber;\n\t  // (int)\n\t  ZoneNumber = Math.floor((Long + 180) / 6) + 1;\n\n\t  //Make sure the longitude 180.00 is in Zone 60\n\t  if (Long === 180) {\n\t    ZoneNumber = 60;\n\t  }\n\n\t  // Special zone for Norway\n\t  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {\n\t    ZoneNumber = 32;\n\t  }\n\n\t  // Special zones for Svalbard\n\t  if (Lat >= 72.0 && Lat < 84.0) {\n\t    if (Long >= 0.0 && Long < 9.0) {\n\t      ZoneNumber = 31;\n\t    }\n\t    else if (Long >= 9.0 && Long < 21.0) {\n\t      ZoneNumber = 33;\n\t    }\n\t    else if (Long >= 21.0 && Long < 33.0) {\n\t      ZoneNumber = 35;\n\t    }\n\t    else if (Long >= 33.0 && Long < 42.0) {\n\t      ZoneNumber = 37;\n\t    }\n\t  }\n\n\t  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin\n\t  // in middle of\n\t  // zone\n\t  LongOriginRad = degToRad(LongOrigin);\n\n\t  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n\t  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));\n\t  T = Math.tan(LatRad) * Math.tan(LatRad);\n\t  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);\n\t  A = Math.cos(LatRad) * (LongRad - LongOriginRad);\n\n\t  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));\n\n\t  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);\n\n\t  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));\n\t  if (Lat < 0.0) {\n\t    UTMNorthing += 10000000.0; //10000000 meter offset for\n\t    // southern hemisphere\n\t  }\n\n\t  return {\n\t    northing: Math.round(UTMNorthing),\n\t    easting: Math.round(UTMEasting),\n\t    zoneNumber: ZoneNumber,\n\t    zoneLetter: getLetterDesignator(Lat)\n\t  };\n\t}\n\n\t/**\n\t * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience\n\t * class where the Zone can be specified as a single string eg.\"60N\" which\n\t * is then broken down into the ZoneNumber and ZoneLetter.\n\t *\n\t * @private\n\t * @param {object} utm An object literal with northing, easting, zoneNumber\n\t *     and zoneLetter properties. If an optional accuracy property is\n\t *     provided (in meters), a bounding box will be returned instead of\n\t *     latitude and longitude.\n\t * @return {object} An object literal containing either lat and lon values\n\t *     (if no accuracy was provided), or top, right, bottom and left values\n\t *     for the bounding box calculated according to the provided accuracy.\n\t *     Returns null if the conversion failed.\n\t */\n\tfunction UTMtoLL(utm) {\n\n\t  var UTMNorthing = utm.northing;\n\t  var UTMEasting = utm.easting;\n\t  var zoneLetter = utm.zoneLetter;\n\t  var zoneNumber = utm.zoneNumber;\n\t  // check the ZoneNummber is valid\n\t  if (zoneNumber < 0 || zoneNumber > 60) {\n\t    return null;\n\t  }\n\n\t  var k0 = 0.9996;\n\t  var a = 6378137.0; //ellip.radius;\n\t  var eccSquared = 0.00669438; //ellip.eccsq;\n\t  var eccPrimeSquared;\n\t  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));\n\t  var N1, T1, C1, R1, D, M;\n\t  var LongOrigin;\n\t  var mu, phi1Rad;\n\n\t  // remove 500,000 meter offset for longitude\n\t  var x = UTMEasting - 500000.0;\n\t  var y = UTMNorthing;\n\n\t  // We must know somehow if we are in the Northern or Southern\n\t  // hemisphere, this is the only time we use the letter So even\n\t  // if the Zone letter isn't exactly correct it should indicate\n\t  // the hemisphere correctly\n\t  if (zoneLetter < 'N') {\n\t    y -= 10000000.0; // remove 10,000,000 meter offset used\n\t    // for southern hemisphere\n\t  }\n\n\t  // There are 60 zones with zone 1 being at West -180 to -174\n\t  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin\n\t  // in middle of\n\t  // zone\n\n\t  eccPrimeSquared = (eccSquared) / (1 - eccSquared);\n\n\t  M = y / k0;\n\t  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));\n\n\t  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);\n\t  // double phi1 = ProjMath.radToDeg(phi1Rad);\n\n\t  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));\n\t  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);\n\t  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);\n\t  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);\n\t  D = x / (N1 * k0);\n\n\t  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);\n\t  lat = radToDeg(lat);\n\n\t  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);\n\t  lon = LongOrigin + radToDeg(lon);\n\n\t  var result;\n\t  if (utm.accuracy) {\n\t    var topRight = UTMtoLL({\n\t      northing: utm.northing + utm.accuracy,\n\t      easting: utm.easting + utm.accuracy,\n\t      zoneLetter: utm.zoneLetter,\n\t      zoneNumber: utm.zoneNumber\n\t    });\n\t    result = {\n\t      top: topRight.lat,\n\t      right: topRight.lon,\n\t      bottom: lat,\n\t      left: lon\n\t    };\n\t  }\n\t  else {\n\t    result = {\n\t      lat: lat,\n\t      lon: lon\n\t    };\n\t  }\n\t  return result;\n\t}\n\n\t/**\n\t * Calculates the MGRS letter designator for the given latitude.\n\t *\n\t * @private\n\t * @param {number} lat The latitude in WGS84 to get the letter designator\n\t *     for.\n\t * @return {char} The letter designator.\n\t */\n\tfunction getLetterDesignator(lat) {\n\t  //This is here as an error flag to show that the Latitude is\n\t  //outside MGRS limits\n\t  var LetterDesignator = 'Z';\n\n\t  if ((84 >= lat) && (lat >= 72)) {\n\t    LetterDesignator = 'X';\n\t  }\n\t  else if ((72 > lat) && (lat >= 64)) {\n\t    LetterDesignator = 'W';\n\t  }\n\t  else if ((64 > lat) && (lat >= 56)) {\n\t    LetterDesignator = 'V';\n\t  }\n\t  else if ((56 > lat) && (lat >= 48)) {\n\t    LetterDesignator = 'U';\n\t  }\n\t  else if ((48 > lat) && (lat >= 40)) {\n\t    LetterDesignator = 'T';\n\t  }\n\t  else if ((40 > lat) && (lat >= 32)) {\n\t    LetterDesignator = 'S';\n\t  }\n\t  else if ((32 > lat) && (lat >= 24)) {\n\t    LetterDesignator = 'R';\n\t  }\n\t  else if ((24 > lat) && (lat >= 16)) {\n\t    LetterDesignator = 'Q';\n\t  }\n\t  else if ((16 > lat) && (lat >= 8)) {\n\t    LetterDesignator = 'P';\n\t  }\n\t  else if ((8 > lat) && (lat >= 0)) {\n\t    LetterDesignator = 'N';\n\t  }\n\t  else if ((0 > lat) && (lat >= -8)) {\n\t    LetterDesignator = 'M';\n\t  }\n\t  else if ((-8 > lat) && (lat >= -16)) {\n\t    LetterDesignator = 'L';\n\t  }\n\t  else if ((-16 > lat) && (lat >= -24)) {\n\t    LetterDesignator = 'K';\n\t  }\n\t  else if ((-24 > lat) && (lat >= -32)) {\n\t    LetterDesignator = 'J';\n\t  }\n\t  else if ((-32 > lat) && (lat >= -40)) {\n\t    LetterDesignator = 'H';\n\t  }\n\t  else if ((-40 > lat) && (lat >= -48)) {\n\t    LetterDesignator = 'G';\n\t  }\n\t  else if ((-48 > lat) && (lat >= -56)) {\n\t    LetterDesignator = 'F';\n\t  }\n\t  else if ((-56 > lat) && (lat >= -64)) {\n\t    LetterDesignator = 'E';\n\t  }\n\t  else if ((-64 > lat) && (lat >= -72)) {\n\t    LetterDesignator = 'D';\n\t  }\n\t  else if ((-72 > lat) && (lat >= -80)) {\n\t    LetterDesignator = 'C';\n\t  }\n\t  return LetterDesignator;\n\t}\n\n\t/**\n\t * Encodes a UTM location as MGRS string.\n\t *\n\t * @private\n\t * @param {object} utm An object literal with easting, northing,\n\t *     zoneLetter, zoneNumber\n\t * @param {number} accuracy Accuracy in digits (1-5).\n\t * @return {string} MGRS string for the given UTM location.\n\t */\n\tfunction encode(utm, accuracy) {\n\t  // prepend with leading zeroes\n\t  var seasting = \"00000\" + utm.easting,\n\t    snorthing = \"00000\" + utm.northing;\n\n\t  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);\n\t}\n\n\t/**\n\t * Get the two letter 100k designator for a given UTM easting,\n\t * northing and zone number value.\n\t *\n\t * @private\n\t * @param {number} easting\n\t * @param {number} northing\n\t * @param {number} zoneNumber\n\t * @return the two letter 100k designator for the given UTM location.\n\t */\n\tfunction get100kID(easting, northing, zoneNumber) {\n\t  var setParm = get100kSetForZone(zoneNumber);\n\t  var setColumn = Math.floor(easting / 100000);\n\t  var setRow = Math.floor(northing / 100000) % 20;\n\t  return getLetter100kID(setColumn, setRow, setParm);\n\t}\n\n\t/**\n\t * Given a UTM zone number, figure out the MGRS 100K set it is in.\n\t *\n\t * @private\n\t * @param {number} i An UTM zone number.\n\t * @return {number} the 100k set the UTM zone is in.\n\t */\n\tfunction get100kSetForZone(i) {\n\t  var setParm = i % NUM_100K_SETS;\n\t  if (setParm === 0) {\n\t    setParm = NUM_100K_SETS;\n\t  }\n\n\t  return setParm;\n\t}\n\n\t/**\n\t * Get the two-letter MGRS 100k designator given information\n\t * translated from the UTM northing, easting and zone number.\n\t *\n\t * @private\n\t * @param {number} column the column index as it relates to the MGRS\n\t *        100k set spreadsheet, created from the UTM easting.\n\t *        Values are 1-8.\n\t * @param {number} row the row index as it relates to the MGRS 100k set\n\t *        spreadsheet, created from the UTM northing value. Values\n\t *        are from 0-19.\n\t * @param {number} parm the set block, as it relates to the MGRS 100k set\n\t *        spreadsheet, created from the UTM zone. Values are from\n\t *        1-60.\n\t * @return two letter MGRS 100k code.\n\t */\n\tfunction getLetter100kID(column, row, parm) {\n\t  // colOrigin and rowOrigin are the letters at the origin of the set\n\t  var index = parm - 1;\n\t  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);\n\t  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);\n\n\t  // colInt and rowInt are the letters to build to return\n\t  var colInt = colOrigin + column - 1;\n\t  var rowInt = rowOrigin + row;\n\t  var rollover = false;\n\n\t  if (colInt > Z) {\n\t    colInt = colInt - Z + A - 1;\n\t    rollover = true;\n\t  }\n\n\t  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {\n\t    colInt++;\n\t  }\n\n\t  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {\n\t    colInt++;\n\n\t    if (colInt === I) {\n\t      colInt++;\n\t    }\n\t  }\n\n\t  if (colInt > Z) {\n\t    colInt = colInt - Z + A - 1;\n\t  }\n\n\t  if (rowInt > V) {\n\t    rowInt = rowInt - V + A - 1;\n\t    rollover = true;\n\t  }\n\t  else {\n\t    rollover = false;\n\t  }\n\n\t  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {\n\t    rowInt++;\n\t  }\n\n\t  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {\n\t    rowInt++;\n\n\t    if (rowInt === I) {\n\t      rowInt++;\n\t    }\n\t  }\n\n\t  if (rowInt > V) {\n\t    rowInt = rowInt - V + A - 1;\n\t  }\n\n\t  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);\n\t  return twoLetter;\n\t}\n\n\t/**\n\t * Decode the UTM parameters from a MGRS string.\n\t *\n\t * @private\n\t * @param {string} mgrsString an UPPERCASE coordinate string is expected.\n\t * @return {object} An object literal with easting, northing, zoneLetter,\n\t *     zoneNumber and accuracy (in meters) properties.\n\t */\n\tfunction decode(mgrsString) {\n\n\t  if (mgrsString && mgrsString.length === 0) {\n\t    throw (\"MGRSPoint coverting from nothing\");\n\t  }\n\n\t  var length = mgrsString.length;\n\n\t  var hunK = null;\n\t  var sb = \"\";\n\t  var testChar;\n\t  var i = 0;\n\n\t  // get Zone number\n\t  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {\n\t    if (i >= 2) {\n\t      throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n\t    }\n\t    sb += testChar;\n\t    i++;\n\t  }\n\n\t  var zoneNumber = parseInt(sb, 10);\n\n\t  if (i === 0 || i + 3 > length) {\n\t    // A good MGRS string has to be 4-5 digits long,\n\t    // ##AAA/#AAA at least.\n\t    throw (\"MGRSPoint bad conversion from: \" + mgrsString);\n\t  }\n\n\t  var zoneLetter = mgrsString.charAt(i++);\n\n\t  // Should we check the zone letter here? Why not.\n\t  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {\n\t    throw (\"MGRSPoint zone letter \" + zoneLetter + \" not handled: \" + mgrsString);\n\t  }\n\n\t  hunK = mgrsString.substring(i, i += 2);\n\n\t  var set = get100kSetForZone(zoneNumber);\n\n\t  var east100k = getEastingFromChar(hunK.charAt(0), set);\n\t  var north100k = getNorthingFromChar(hunK.charAt(1), set);\n\n\t  // We have a bug where the northing may be 2000000 too low.\n\t  // How\n\t  // do we know when to roll over?\n\n\t  while (north100k < getMinNorthing(zoneLetter)) {\n\t    north100k += 2000000;\n\t  }\n\n\t  // calculate the char index for easting/northing separator\n\t  var remainder = length - i;\n\n\t  if (remainder % 2 !== 0) {\n\t    throw (\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\" + mgrsString);\n\t  }\n\n\t  var sep = remainder / 2;\n\n\t  var sepEasting = 0.0;\n\t  var sepNorthing = 0.0;\n\t  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;\n\t  if (sep > 0) {\n\t    accuracyBonus = 100000.0 / Math.pow(10, sep);\n\t    sepEastingString = mgrsString.substring(i, i + sep);\n\t    sepEasting = parseFloat(sepEastingString) * accuracyBonus;\n\t    sepNorthingString = mgrsString.substring(i + sep);\n\t    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;\n\t  }\n\n\t  easting = sepEasting + east100k;\n\t  northing = sepNorthing + north100k;\n\n\t  return {\n\t    easting: easting,\n\t    northing: northing,\n\t    zoneLetter: zoneLetter,\n\t    zoneNumber: zoneNumber,\n\t    accuracy: accuracyBonus\n\t  };\n\t}\n\n\t/**\n\t * Given the first letter from a two-letter MGRS 100k zone, and given the\n\t * MGRS table set for the zone number, figure out the easting value that\n\t * should be added to the other, secondary easting value.\n\t *\n\t * @private\n\t * @param {char} e The first letter from a two-letter MGRS 100´k zone.\n\t * @param {number} set The MGRS table set for the zone number.\n\t * @return {number} The easting value for the given letter and set.\n\t */\n\tfunction getEastingFromChar(e, set) {\n\t  // colOrigin is the letter at the origin of the set for the\n\t  // column\n\t  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);\n\t  var eastingValue = 100000.0;\n\t  var rewindMarker = false;\n\n\t  while (curCol !== e.charCodeAt(0)) {\n\t    curCol++;\n\t    if (curCol === I) {\n\t      curCol++;\n\t    }\n\t    if (curCol === O) {\n\t      curCol++;\n\t    }\n\t    if (curCol > Z) {\n\t      if (rewindMarker) {\n\t        throw (\"Bad character: \" + e);\n\t      }\n\t      curCol = A;\n\t      rewindMarker = true;\n\t    }\n\t    eastingValue += 100000.0;\n\t  }\n\n\t  return eastingValue;\n\t}\n\n\t/**\n\t * Given the second letter from a two-letter MGRS 100k zone, and given the\n\t * MGRS table set for the zone number, figure out the northing value that\n\t * should be added to the other, secondary northing value. You have to\n\t * remember that Northings are determined from the equator, and the vertical\n\t * cycle of letters mean a 2000000 additional northing meters. This happens\n\t * approx. every 18 degrees of latitude. This method does *NOT* count any\n\t * additional northings. You have to figure out how many 2000000 meters need\n\t * to be added for the zone letter of the MGRS coordinate.\n\t *\n\t * @private\n\t * @param {char} n Second letter of the MGRS 100k zone\n\t * @param {number} set The MGRS table set number, which is dependent on the\n\t *     UTM zone number.\n\t * @return {number} The northing value for the given letter and set.\n\t */\n\tfunction getNorthingFromChar(n, set) {\n\n\t  if (n > 'V') {\n\t    throw (\"MGRSPoint given invalid Northing \" + n);\n\t  }\n\n\t  // rowOrigin is the letter at the origin of the set for the\n\t  // column\n\t  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);\n\t  var northingValue = 0.0;\n\t  var rewindMarker = false;\n\n\t  while (curRow !== n.charCodeAt(0)) {\n\t    curRow++;\n\t    if (curRow === I) {\n\t      curRow++;\n\t    }\n\t    if (curRow === O) {\n\t      curRow++;\n\t    }\n\t    // fixing a bug making whole application hang in this loop\n\t    // when 'n' is a wrong character\n\t    if (curRow > V) {\n\t      if (rewindMarker) { // making sure that this loop ends\n\t        throw (\"Bad character: \" + n);\n\t      }\n\t      curRow = A;\n\t      rewindMarker = true;\n\t    }\n\t    northingValue += 100000.0;\n\t  }\n\n\t  return northingValue;\n\t}\n\n\t/**\n\t * The function getMinNorthing returns the minimum northing value of a MGRS\n\t * zone.\n\t *\n\t * Ported from Geotrans' c Lattitude_Band_Value structure table.\n\t *\n\t * @private\n\t * @param {char} zoneLetter The MGRS zone to get the min northing for.\n\t * @return {number}\n\t */\n\tfunction getMinNorthing(zoneLetter) {\n\t  var northing;\n\t  switch (zoneLetter) {\n\t  case 'C':\n\t    northing = 1100000.0;\n\t    break;\n\t  case 'D':\n\t    northing = 2000000.0;\n\t    break;\n\t  case 'E':\n\t    northing = 2800000.0;\n\t    break;\n\t  case 'F':\n\t    northing = 3700000.0;\n\t    break;\n\t  case 'G':\n\t    northing = 4600000.0;\n\t    break;\n\t  case 'H':\n\t    northing = 5500000.0;\n\t    break;\n\t  case 'J':\n\t    northing = 6400000.0;\n\t    break;\n\t  case 'K':\n\t    northing = 7300000.0;\n\t    break;\n\t  case 'L':\n\t    northing = 8200000.0;\n\t    break;\n\t  case 'M':\n\t    northing = 9100000.0;\n\t    break;\n\t  case 'N':\n\t    northing = 0.0;\n\t    break;\n\t  case 'P':\n\t    northing = 800000.0;\n\t    break;\n\t  case 'Q':\n\t    northing = 1700000.0;\n\t    break;\n\t  case 'R':\n\t    northing = 2600000.0;\n\t    break;\n\t  case 'S':\n\t    northing = 3500000.0;\n\t    break;\n\t  case 'T':\n\t    northing = 4400000.0;\n\t    break;\n\t  case 'U':\n\t    northing = 5300000.0;\n\t    break;\n\t  case 'V':\n\t    northing = 6200000.0;\n\t    break;\n\t  case 'W':\n\t    northing = 7000000.0;\n\t    break;\n\t  case 'X':\n\t    northing = 7900000.0;\n\t    break;\n\t  default:\n\t    northing = -1.0;\n\t  }\n\t  if (northing >= 0.0) {\n\t    return northing;\n\t  }\n\t  else {\n\t    throw (\"Invalid zone letter: \" + zoneLetter);\n\t  }\n\n\t}\n\n\tfunction Point(x, y, z) {\n\t  if (!(this instanceof Point)) {\n\t    return new Point(x, y, z);\n\t  }\n\t  if (Array.isArray(x)) {\n\t    this.x = x[0];\n\t    this.y = x[1];\n\t    this.z = x[2] || 0.0;\n\t  } else if(typeof x === 'object') {\n\t    this.x = x.x;\n\t    this.y = x.y;\n\t    this.z = x.z || 0.0;\n\t  } else if (typeof x === 'string' && typeof y === 'undefined') {\n\t    var coords = x.split(',');\n\t    this.x = parseFloat(coords[0], 10);\n\t    this.y = parseFloat(coords[1], 10);\n\t    this.z = parseFloat(coords[2], 10) || 0.0;\n\t  } else {\n\t    this.x = x;\n\t    this.y = y;\n\t    this.z = z || 0.0;\n\t  }\n\t  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');\n\t}\n\n\tPoint.fromMGRS = function(mgrsStr) {\n\t  return new Point(toPoint$1(mgrsStr));\n\t};\n\tPoint.prototype.toMGRS = function(accuracy) {\n\t  return forward$1([this.x, this.y], accuracy);\n\t};\n\n\tvar version = \"2.5.0\";\n\n\tvar C00 = 1;\n\tvar C02 = 0.25;\n\tvar C04 = 0.046875;\n\tvar C06 = 0.01953125;\n\tvar C08 = 0.01068115234375;\n\tvar C22 = 0.75;\n\tvar C44 = 0.46875;\n\tvar C46 = 0.01302083333333333333;\n\tvar C48 = 0.00712076822916666666;\n\tvar C66 = 0.36458333333333333333;\n\tvar C68 = 0.00569661458333333333;\n\tvar C88 = 0.3076171875;\n\n\tvar pj_enfn = function(es) {\n\t  var en = [];\n\t  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));\n\t  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));\n\t  var t = es * es;\n\t  en[2] = t * (C44 - es * (C46 + es * C48));\n\t  t *= es;\n\t  en[3] = t * (C66 - es * C68);\n\t  en[4] = t * es * C88;\n\t  return en;\n\t};\n\n\tvar pj_mlfn = function(phi, sphi, cphi, en) {\n\t  cphi *= sphi;\n\t  sphi *= sphi;\n\t  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));\n\t};\n\n\tvar MAX_ITER = 20;\n\n\tvar pj_inv_mlfn = function(arg, es, en) {\n\t  var k = 1 / (1 - es);\n\t  var phi = arg;\n\t  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */\n\t    var s = Math.sin(phi);\n\t    var t = 1 - es * s * s;\n\t    //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;\n\t    //phi -= t * (t * Math.sqrt(t)) * k;\n\t    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;\n\t    phi -= t;\n\t    if (Math.abs(t) < EPSLN) {\n\t      return phi;\n\t    }\n\t  }\n\t  //..reportError(\"cass:pj_inv_mlfn: Convergence error\");\n\t  return phi;\n\t};\n\n\t// Heavily based on this tmerc projection implementation\n\t// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js\n\n\tfunction init$2() {\n\t  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n\t  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n\t  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n\t  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n\t  if (this.es) {\n\t    this.en = pj_enfn(this.es);\n\t    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);\n\t  }\n\t}\n\n\t/**\n\t    Transverse Mercator Forward  - long/lat to x/y\n\t    long/lat in radians\n\t  */\n\tfunction forward$2(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  var con;\n\t  var x, y;\n\t  var sin_phi = Math.sin(lat);\n\t  var cos_phi = Math.cos(lat);\n\n\t  if (!this.es) {\n\t    var b = cos_phi * Math.sin(delta_lon);\n\n\t    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {\n\t      return (93);\n\t    }\n\t    else {\n\t      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;\n\t      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));\n\t      b = Math.abs(y);\n\n\t      if (b >= 1) {\n\t        if ((b - 1) > EPSLN) {\n\t          return (93);\n\t        }\n\t        else {\n\t          y = 0;\n\t        }\n\t      }\n\t      else {\n\t        y = Math.acos(y);\n\t      }\n\n\t      if (lat < 0) {\n\t        y = -y;\n\t      }\n\n\t      y = this.a * this.k0 * (y - this.lat0) + this.y0;\n\t    }\n\t  }\n\t  else {\n\t    var al = cos_phi * delta_lon;\n\t    var als = Math.pow(al, 2);\n\t    var c = this.ep2 * Math.pow(cos_phi, 2);\n\t    var cs = Math.pow(c, 2);\n\t    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;\n\t    var t = Math.pow(tq, 2);\n\t    var ts = Math.pow(t, 2);\n\t    con = 1 - this.es * Math.pow(sin_phi, 2);\n\t    al = al / Math.sqrt(con);\n\t    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);\n\n\t    x = this.a * (this.k0 * al * (1 +\n\t      als / 6 * (1 - t + c +\n\t      als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +\n\t      als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +\n\t      this.x0;\n\n\t    y = this.a * (this.k0 * (ml - this.ml0 +\n\t      sin_phi * delta_lon * al / 2 * (1 +\n\t      als / 12 * (5 - t + 9 * c + 4 * cs +\n\t      als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +\n\t      als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +\n\t      this.y0;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\n\t  return p;\n\t}\n\n\t/**\n\t    Transverse Mercator Inverse  -  x/y to long/lat\n\t  */\n\tfunction inverse$2(p) {\n\t  var con, phi;\n\t  var lat, lon;\n\t  var x = (p.x - this.x0) * (1 / this.a);\n\t  var y = (p.y - this.y0) * (1 / this.a);\n\n\t  if (!this.es) {\n\t    var f = Math.exp(x / this.k0);\n\t    var g = 0.5 * (f - 1 / f);\n\t    var temp = this.lat0 + y / this.k0;\n\t    var h = Math.cos(temp);\n\t    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));\n\t    lat = Math.asin(con);\n\n\t    if (y < 0) {\n\t      lat = -lat;\n\t    }\n\n\t    if ((g === 0) && (h === 0)) {\n\t      lon = 0;\n\t    }\n\t    else {\n\t      lon = adjust_lon(Math.atan2(g, h) + this.long0);\n\t    }\n\t  }\n\t  else { // ellipsoidal form\n\t    con = this.ml0 + y / this.k0;\n\t    phi = pj_inv_mlfn(con, this.es, this.en);\n\n\t    if (Math.abs(phi) < HALF_PI) {\n\t      var sin_phi = Math.sin(phi);\n\t      var cos_phi = Math.cos(phi);\n\t      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;\n\t      var c = this.ep2 * Math.pow(cos_phi, 2);\n\t      var cs = Math.pow(c, 2);\n\t      var t = Math.pow(tan_phi, 2);\n\t      var ts = Math.pow(t, 2);\n\t      con = 1 - this.es * Math.pow(sin_phi, 2);\n\t      var d = x * Math.sqrt(con) / this.k0;\n\t      var ds = Math.pow(d, 2);\n\t      con = con * tan_phi;\n\n\t      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -\n\t        ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -\n\t        ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -\n\t        ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));\n\n\t      lon = adjust_lon(this.long0 + (d * (1 -\n\t        ds / 6 * (1 + 2 * t + c -\n\t        ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -\n\t        ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));\n\t    }\n\t    else {\n\t      lat = HALF_PI * sign(y);\n\t      lon = 0;\n\t    }\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$3 = [\"Transverse_Mercator\", \"Transverse Mercator\", \"tmerc\"];\n\tvar tmerc = {\n\t  init: init$2,\n\t  forward: forward$2,\n\t  inverse: inverse$2,\n\t  names: names$3\n\t};\n\n\tvar sinh = function(x) {\n\t  var r = Math.exp(x);\n\t  r = (r - 1 / r) / 2;\n\t  return r;\n\t};\n\n\tvar hypot = function(x, y) {\n\t  x = Math.abs(x);\n\t  y = Math.abs(y);\n\t  var a = Math.max(x, y);\n\t  var b = Math.min(x, y) / (a ? a : 1);\n\n\t  return a * Math.sqrt(1 + Math.pow(b, 2));\n\t};\n\n\tvar log1py = function(x) {\n\t  var y = 1 + x;\n\t  var z = y - 1;\n\n\t  return z === 0 ? x : x * Math.log(y) / z;\n\t};\n\n\tvar asinhy = function(x) {\n\t  var y = Math.abs(x);\n\t  y = log1py(y * (1 + y / (hypot(1, y) + 1)));\n\n\t  return x < 0 ? -y : y;\n\t};\n\n\tvar gatg = function(pp, B) {\n\t  var cos_2B = 2 * Math.cos(2 * B);\n\t  var i = pp.length - 1;\n\t  var h1 = pp[i];\n\t  var h2 = 0;\n\t  var h;\n\n\t  while (--i >= 0) {\n\t    h = -h2 + cos_2B * h1 + pp[i];\n\t    h2 = h1;\n\t    h1 = h;\n\t  }\n\n\t  return (B + h * Math.sin(2 * B));\n\t};\n\n\tvar clens = function(pp, arg_r) {\n\t  var r = 2 * Math.cos(arg_r);\n\t  var i = pp.length - 1;\n\t  var hr1 = pp[i];\n\t  var hr2 = 0;\n\t  var hr;\n\n\t  while (--i >= 0) {\n\t    hr = -hr2 + r * hr1 + pp[i];\n\t    hr2 = hr1;\n\t    hr1 = hr;\n\t  }\n\n\t  return Math.sin(arg_r) * hr;\n\t};\n\n\tvar cosh = function(x) {\n\t  var r = Math.exp(x);\n\t  r = (r + 1 / r) / 2;\n\t  return r;\n\t};\n\n\tvar clens_cmplx = function(pp, arg_r, arg_i) {\n\t  var sin_arg_r = Math.sin(arg_r);\n\t  var cos_arg_r = Math.cos(arg_r);\n\t  var sinh_arg_i = sinh(arg_i);\n\t  var cosh_arg_i = cosh(arg_i);\n\t  var r = 2 * cos_arg_r * cosh_arg_i;\n\t  var i = -2 * sin_arg_r * sinh_arg_i;\n\t  var j = pp.length - 1;\n\t  var hr = pp[j];\n\t  var hi1 = 0;\n\t  var hr1 = 0;\n\t  var hi = 0;\n\t  var hr2;\n\t  var hi2;\n\n\t  while (--j >= 0) {\n\t    hr2 = hr1;\n\t    hi2 = hi1;\n\t    hr1 = hr;\n\t    hi1 = hi;\n\t    hr = -hr2 + r * hr1 - i * hi1 + pp[j];\n\t    hi = -hi2 + i * hr1 + r * hi1;\n\t  }\n\n\t  r = sin_arg_r * cosh_arg_i;\n\t  i = cos_arg_r * sinh_arg_i;\n\n\t  return [r * hr - i * hi, r * hi + i * hr];\n\t};\n\n\t// Heavily based on this etmerc projection implementation\n\t// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js\n\n\tfunction init$3() {\n\t  if (this.es === undefined || this.es <= 0) {\n\t    throw new Error('incorrect elliptical usage');\n\t  }\n\n\t  this.x0 = this.x0 !== undefined ? this.x0 : 0;\n\t  this.y0 = this.y0 !== undefined ? this.y0 : 0;\n\t  this.long0 = this.long0 !== undefined ? this.long0 : 0;\n\t  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;\n\n\t  this.cgb = [];\n\t  this.cbg = [];\n\t  this.utg = [];\n\t  this.gtu = [];\n\n\t  var f = this.es / (1 + Math.sqrt(1 - this.es));\n\t  var n = f / (2 - f);\n\t  var np = n;\n\n\t  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));\n\t  this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));\n\n\t  np = np * n;\n\t  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));\n\t  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));\n\n\t  np = np * n;\n\t  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));\n\t  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));\n\n\t  np = np * n;\n\t  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));\n\t  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));\n\n\t  np = np * n;\n\t  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));\n\t  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));\n\n\t  np = np * n;\n\t  this.cgb[5] = np * (601676 / 22275);\n\t  this.cbg[5] = np * (444337 / 155925);\n\n\t  np = Math.pow(n, 2);\n\t  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));\n\n\t  this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));\n\t  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));\n\n\t  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));\n\t  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));\n\n\t  np = np * n;\n\t  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));\n\t  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));\n\n\t  np = np * n;\n\t  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));\n\t  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));\n\n\t  np = np * n;\n\t  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));\n\t  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));\n\n\t  np = np * n;\n\t  this.utg[5] = np * (-20648693 / 638668800);\n\t  this.gtu[5] = np * (212378941 / 319334400);\n\n\t  var Z = gatg(this.cbg, this.lat0);\n\t  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));\n\t}\n\n\tfunction forward$3(p) {\n\t  var Ce = adjust_lon(p.x - this.long0);\n\t  var Cn = p.y;\n\n\t  Cn = gatg(this.cbg, Cn);\n\t  var sin_Cn = Math.sin(Cn);\n\t  var cos_Cn = Math.cos(Cn);\n\t  var sin_Ce = Math.sin(Ce);\n\t  var cos_Ce = Math.cos(Ce);\n\n\t  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);\n\t  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));\n\t  Ce = asinhy(Math.tan(Ce));\n\n\t  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);\n\n\t  Cn = Cn + tmp[0];\n\t  Ce = Ce + tmp[1];\n\n\t  var x;\n\t  var y;\n\n\t  if (Math.abs(Ce) <= 2.623395162778) {\n\t    x = this.a * (this.Qn * Ce) + this.x0;\n\t    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;\n\t  }\n\t  else {\n\t    x = Infinity;\n\t    y = Infinity;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\n\t  return p;\n\t}\n\n\tfunction inverse$3(p) {\n\t  var Ce = (p.x - this.x0) * (1 / this.a);\n\t  var Cn = (p.y - this.y0) * (1 / this.a);\n\n\t  Cn = (Cn - this.Zb) / this.Qn;\n\t  Ce = Ce / this.Qn;\n\n\t  var lon;\n\t  var lat;\n\n\t  if (Math.abs(Ce) <= 2.623395162778) {\n\t    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);\n\n\t    Cn = Cn + tmp[0];\n\t    Ce = Ce + tmp[1];\n\t    Ce = Math.atan(sinh(Ce));\n\n\t    var sin_Cn = Math.sin(Cn);\n\t    var cos_Cn = Math.cos(Cn);\n\t    var sin_Ce = Math.sin(Ce);\n\t    var cos_Ce = Math.cos(Ce);\n\n\t    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));\n\t    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);\n\n\t    lon = adjust_lon(Ce + this.long0);\n\t    lat = gatg(this.cgb, Cn);\n\t  }\n\t  else {\n\t    lon = Infinity;\n\t    lat = Infinity;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$4 = [\"Extended_Transverse_Mercator\", \"Extended Transverse Mercator\", \"etmerc\"];\n\tvar etmerc = {\n\t  init: init$3,\n\t  forward: forward$3,\n\t  inverse: inverse$3,\n\t  names: names$4\n\t};\n\n\tvar adjust_zone = function(zone, lon) {\n\t  if (zone === undefined) {\n\t    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;\n\n\t    if (zone < 0) {\n\t      return 0;\n\t    } else if (zone > 60) {\n\t      return 60;\n\t    }\n\t  }\n\t  return zone;\n\t};\n\n\tvar dependsOn = 'etmerc';\n\tfunction init$4() {\n\t  var zone = adjust_zone(this.zone, this.long0);\n\t  if (zone === undefined) {\n\t    throw new Error('unknown utm zone');\n\t  }\n\t  this.lat0 = 0;\n\t  this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;\n\t  this.x0 = 500000;\n\t  this.y0 = this.utmSouth ? 10000000 : 0;\n\t  this.k0 = 0.9996;\n\n\t  etmerc.init.apply(this);\n\t  this.forward = etmerc.forward;\n\t  this.inverse = etmerc.inverse;\n\t}\n\n\tvar names$5 = [\"Universal Transverse Mercator System\", \"utm\"];\n\tvar utm = {\n\t  init: init$4,\n\t  names: names$5,\n\t  dependsOn: dependsOn\n\t};\n\n\tvar srat = function(esinp, exp) {\n\t  return (Math.pow((1 - esinp) / (1 + esinp), exp));\n\t};\n\n\tvar MAX_ITER$1 = 20;\n\tfunction init$6() {\n\t  var sphi = Math.sin(this.lat0);\n\t  var cphi = Math.cos(this.lat0);\n\t  cphi *= cphi;\n\t  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);\n\t  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));\n\t  this.phic0 = Math.asin(sphi / this.C);\n\t  this.ratexp = 0.5 * this.C * this.e;\n\t  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));\n\t}\n\n\tfunction forward$5(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;\n\t  p.x = this.C * lon;\n\t  return p;\n\t}\n\n\tfunction inverse$5(p) {\n\t  var DEL_TOL = 1e-14;\n\t  var lon = p.x / this.C;\n\t  var lat = p.y;\n\t  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);\n\t  for (var i = MAX_ITER$1; i > 0; --i) {\n\t    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;\n\t    if (Math.abs(lat - p.y) < DEL_TOL) {\n\t      break;\n\t    }\n\t    p.y = lat;\n\t  }\n\t  /* convergence failed */\n\t  if (!i) {\n\t    return null;\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$7 = [\"gauss\"];\n\tvar gauss = {\n\t  init: init$6,\n\t  forward: forward$5,\n\t  inverse: inverse$5,\n\t  names: names$7\n\t};\n\n\tfunction init$5() {\n\t  gauss.init.apply(this);\n\t  if (!this.rc) {\n\t    return;\n\t  }\n\t  this.sinc0 = Math.sin(this.phic0);\n\t  this.cosc0 = Math.cos(this.phic0);\n\t  this.R2 = 2 * this.rc;\n\t  if (!this.title) {\n\t    this.title = \"Oblique Stereographic Alternative\";\n\t  }\n\t}\n\n\tfunction forward$4(p) {\n\t  var sinc, cosc, cosl, k;\n\t  p.x = adjust_lon(p.x - this.long0);\n\t  gauss.forward.apply(this, [p]);\n\t  sinc = Math.sin(p.y);\n\t  cosc = Math.cos(p.y);\n\t  cosl = Math.cos(p.x);\n\t  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);\n\t  p.x = k * cosc * Math.sin(p.x);\n\t  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);\n\t  p.x = this.a * p.x + this.x0;\n\t  p.y = this.a * p.y + this.y0;\n\t  return p;\n\t}\n\n\tfunction inverse$4(p) {\n\t  var sinc, cosc, lon, lat, rho;\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  p.x /= this.k0;\n\t  p.y /= this.k0;\n\t  if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {\n\t    var c = 2 * Math.atan2(rho, this.R2);\n\t    sinc = Math.sin(c);\n\t    cosc = Math.cos(c);\n\t    lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);\n\t    lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);\n\t  }\n\t  else {\n\t    lat = this.phic0;\n\t    lon = 0;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  gauss.inverse.apply(this, [p]);\n\t  p.x = adjust_lon(p.x + this.long0);\n\t  return p;\n\t}\n\n\tvar names$6 = [\"Stereographic_North_Pole\", \"Oblique_Stereographic\", \"Polar_Stereographic\", \"sterea\",\"Oblique Stereographic Alternative\",\"Double_Stereographic\"];\n\tvar sterea = {\n\t  init: init$5,\n\t  forward: forward$4,\n\t  inverse: inverse$4,\n\t  names: names$6\n\t};\n\n\tfunction ssfn_(phit, sinphi, eccen) {\n\t  sinphi *= eccen;\n\t  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));\n\t}\n\n\tfunction init$7() {\n\t  this.coslat0 = Math.cos(this.lat0);\n\t  this.sinlat0 = Math.sin(this.lat0);\n\t  if (this.sphere) {\n\t    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n\t      this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      if (this.lat0 > 0) {\n\t        //North pole\n\t        //trace('stere:north pole');\n\t        this.con = 1;\n\t      }\n\t      else {\n\t        //South pole\n\t        //trace('stere:south pole');\n\t        this.con = -1;\n\t      }\n\t    }\n\t    this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));\n\t    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {\n\t      this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));\n\t    }\n\t    this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);\n\t    this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;\n\t    this.cosX0 = Math.cos(this.X0);\n\t    this.sinX0 = Math.sin(this.X0);\n\t  }\n\t}\n\n\t// Stereographic forward equations--mapping lat,long to x,y\n\tfunction forward$6(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var sinlat = Math.sin(lat);\n\t  var coslat = Math.cos(lat);\n\t  var A, X, sinX, cosX, ts, rh;\n\t  var dlon = adjust_lon(lon - this.long0);\n\n\t  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {\n\t    //case of the origine point\n\t    //trace('stere:this is the origin point');\n\t    p.x = NaN;\n\t    p.y = NaN;\n\t    return p;\n\t  }\n\t  if (this.sphere) {\n\t    //trace('stere:sphere case');\n\t    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));\n\t    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;\n\t    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;\n\t    return p;\n\t  }\n\t  else {\n\t    X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;\n\t    cosX = Math.cos(X);\n\t    sinX = Math.sin(X);\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);\n\t      rh = 2 * this.a * this.k0 * ts / this.cons;\n\t      p.x = this.x0 + rh * Math.sin(lon - this.long0);\n\t      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);\n\t      //trace(p.toString());\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sinlat0) < EPSLN) {\n\t      //Eq\n\t      //trace('stere:equateur');\n\t      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));\n\t      p.y = A * sinX;\n\t    }\n\t    else {\n\t      //other case\n\t      //trace('stere:normal case');\n\t      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));\n\t      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;\n\t    }\n\t    p.x = A * cosX * Math.sin(dlon) + this.x0;\n\t  }\n\t  //trace(p.toString());\n\t  return p;\n\t}\n\n\t//* Stereographic inverse equations--mapping x,y to lat/long\n\tfunction inverse$6(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var lon, lat, ts, ce, Chi;\n\t  var rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  if (this.sphere) {\n\t    var c = 2 * Math.atan(rh / (2 * this.a * this.k0));\n\t    lon = this.long0;\n\t    lat = this.lat0;\n\t    if (rh <= EPSLN) {\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);\n\t    if (Math.abs(this.coslat0) < EPSLN) {\n\t      if (this.lat0 > 0) {\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t      }\n\t      else {\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n\t      }\n\t    }\n\t    else {\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));\n\t    }\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    if (Math.abs(this.coslat0) <= EPSLN) {\n\t      if (rh <= EPSLN) {\n\t        lat = this.lat0;\n\t        lon = this.long0;\n\t        p.x = lon;\n\t        p.y = lat;\n\t        //trace(p.toString());\n\t        return p;\n\t      }\n\t      p.x *= this.con;\n\t      p.y *= this.con;\n\t      ts = rh * this.cons / (2 * this.a * this.k0);\n\t      lat = this.con * phi2z(this.e, ts);\n\t      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t    }\n\t    else {\n\t      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));\n\t      lon = this.long0;\n\t      if (rh <= EPSLN) {\n\t        Chi = this.X0;\n\t      }\n\t      else {\n\t        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));\n\t      }\n\t      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));\n\t    }\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  //trace(p.toString());\n\t  return p;\n\n\t}\n\n\tvar names$8 = [\"stere\", \"Stereographic_South_Pole\", \"Polar Stereographic (variant B)\"];\n\tvar stere = {\n\t  init: init$7,\n\t  forward: forward$6,\n\t  inverse: inverse$6,\n\t  names: names$8,\n\t  ssfn_: ssfn_\n\t};\n\n\t/*\n\t  references:\n\t    Formules et constantes pour le Calcul pour la\n\t    projection cylindrique conforme à axe oblique et pour la transformation entre\n\t    des systèmes de référence.\n\t    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf\n\t  */\n\n\tfunction init$8() {\n\t  var phy0 = this.lat0;\n\t  this.lambda0 = this.long0;\n\t  var sinPhy0 = Math.sin(phy0);\n\t  var semiMajorAxis = this.a;\n\t  var invF = this.rf;\n\t  var flattening = 1 / invF;\n\t  var e2 = 2 * flattening - Math.pow(flattening, 2);\n\t  var e = this.e = Math.sqrt(e2);\n\t  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));\n\t  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));\n\t  this.b0 = Math.asin(sinPhy0 / this.alpha);\n\t  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));\n\t  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));\n\t  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));\n\t  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;\n\t}\n\n\tfunction forward$7(p) {\n\t  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));\n\t  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));\n\t  var S = -this.alpha * (Sa1 + Sa2) + this.K;\n\n\t  // spheric latitude\n\t  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);\n\n\t  // spheric longitude\n\t  var I = this.alpha * (p.x - this.lambda0);\n\n\t  // psoeudo equatorial rotation\n\t  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));\n\n\t  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));\n\n\t  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;\n\t  p.x = this.R * rotI + this.x0;\n\t  return p;\n\t}\n\n\tfunction inverse$7(p) {\n\t  var Y = p.x - this.x0;\n\t  var X = p.y - this.y0;\n\n\t  var rotI = Y / this.R;\n\t  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);\n\n\t  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));\n\t  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));\n\n\t  var lambda = this.lambda0 + I / this.alpha;\n\n\t  var S = 0;\n\t  var phy = b;\n\t  var prevPhy = -1000;\n\t  var iteration = 0;\n\t  while (Math.abs(phy - prevPhy) > 0.0000001) {\n\t    if (++iteration > 20) {\n\t      //...reportError(\"omercFwdInfinity\");\n\t      return;\n\t    }\n\t    //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));\n\t    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));\n\t    prevPhy = phy;\n\t    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;\n\t  }\n\n\t  p.x = lambda;\n\t  p.y = phy;\n\t  return p;\n\t}\n\n\tvar names$9 = [\"somerc\"];\n\tvar somerc = {\n\t  init: init$8,\n\t  forward: forward$7,\n\t  inverse: inverse$7,\n\t  names: names$9\n\t};\n\n\t/* Initialize the Oblique Mercator  projection\n\t    ------------------------------------------*/\n\tfunction init$9() {\n\t  this.no_off = this.no_off || false;\n\t  this.no_rot = this.no_rot || false;\n\n\t  if (isNaN(this.k0)) {\n\t    this.k0 = 1;\n\t  }\n\t  var sinlat = Math.sin(this.lat0);\n\t  var coslat = Math.cos(this.lat0);\n\t  var con = this.e * sinlat;\n\n\t  this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));\n\t  this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);\n\t  var t0 = tsfnz(this.e, this.lat0, sinlat);\n\t  var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));\n\t  if (dl * dl < 1) {\n\t    dl = 1;\n\t  }\n\t  var fl;\n\t  var gl;\n\t  if (!isNaN(this.longc)) {\n\t    //Central point and azimuth method\n\n\t    if (this.lat0 >= 0) {\n\t      fl = dl + Math.sqrt(dl * dl - 1);\n\t    }\n\t    else {\n\t      fl = dl - Math.sqrt(dl * dl - 1);\n\t    }\n\t    this.el = fl * Math.pow(t0, this.bl);\n\t    gl = 0.5 * (fl - 1 / fl);\n\t    this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);\n\t    this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;\n\n\t  }\n\t  else {\n\t    //2 points method\n\t    var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));\n\t    var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));\n\t    if (this.lat0 >= 0) {\n\t      this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n\t    }\n\t    else {\n\t      this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);\n\t    }\n\t    var hl = Math.pow(t1, this.bl);\n\t    var ll = Math.pow(t2, this.bl);\n\t    fl = this.el / hl;\n\t    gl = 0.5 * (fl - 1 / fl);\n\t    var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);\n\t    var pl = (ll - hl) / (ll + hl);\n\t    var dlon12 = adjust_lon(this.long1 - this.long2);\n\t    this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;\n\t    this.long0 = adjust_lon(this.long0);\n\t    var dlon10 = adjust_lon(this.long1 - this.long0);\n\t    this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);\n\t    this.alpha = Math.asin(dl * Math.sin(this.gamma0));\n\t  }\n\n\t  if (this.no_off) {\n\t    this.uc = 0;\n\t  }\n\t  else {\n\t    if (this.lat0 >= 0) {\n\t      this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n\t    }\n\t    else {\n\t      this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));\n\t    }\n\t  }\n\n\t}\n\n\t/* Oblique Mercator forward equations--mapping lat,long to x,y\n\t    ----------------------------------------------------------*/\n\tfunction forward$8(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var us, vs;\n\t  var con;\n\t  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {\n\t    if (lat > 0) {\n\t      con = -1;\n\t    }\n\t    else {\n\t      con = 1;\n\t    }\n\t    vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));\n\t    us = -1 * con * HALF_PI * this.al / this.bl;\n\t  }\n\t  else {\n\t    var t = tsfnz(this.e, lat, Math.sin(lat));\n\t    var ql = this.el / Math.pow(t, this.bl);\n\t    var sl = 0.5 * (ql - 1 / ql);\n\t    var tl = 0.5 * (ql + 1 / ql);\n\t    var vl = Math.sin(this.bl * (dlon));\n\t    var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;\n\t    if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {\n\t      vs = Number.POSITIVE_INFINITY;\n\t    }\n\t    else {\n\t      vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;\n\t    }\n\t    if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {\n\t      us = this.al * this.bl * (dlon);\n\t    }\n\t    else {\n\t      us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;\n\t    }\n\t  }\n\n\t  if (this.no_rot) {\n\t    p.x = this.x0 + us;\n\t    p.y = this.y0 + vs;\n\t  }\n\t  else {\n\n\t    us -= this.uc;\n\t    p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);\n\t    p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);\n\t  }\n\t  return p;\n\t}\n\n\tfunction inverse$8(p) {\n\t  var us, vs;\n\t  if (this.no_rot) {\n\t    vs = p.y - this.y0;\n\t    us = p.x - this.x0;\n\t  }\n\t  else {\n\t    vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);\n\t    us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);\n\t    us += this.uc;\n\t  }\n\t  var qp = Math.exp(-1 * this.bl * vs / this.al);\n\t  var sp = 0.5 * (qp - 1 / qp);\n\t  var tp = 0.5 * (qp + 1 / qp);\n\t  var vp = Math.sin(this.bl * us / this.al);\n\t  var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;\n\t  var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);\n\t  if (Math.abs(up - 1) < EPSLN) {\n\t    p.x = this.long0;\n\t    p.y = HALF_PI;\n\t  }\n\t  else if (Math.abs(up + 1) < EPSLN) {\n\t    p.x = this.long0;\n\t    p.y = -1 * HALF_PI;\n\t  }\n\t  else {\n\t    p.y = phi2z(this.e, ts);\n\t    p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);\n\t  }\n\t  return p;\n\t}\n\n\tvar names$10 = [\"Hotine_Oblique_Mercator\", \"Hotine Oblique Mercator\", \"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\", \"Hotine_Oblique_Mercator_Azimuth_Center\", \"omerc\"];\n\tvar omerc = {\n\t  init: init$9,\n\t  forward: forward$8,\n\t  inverse: inverse$8,\n\t  names: names$10\n\t};\n\n\tfunction init$10() {\n\n\t  // array of:  r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north\n\t  //double c_lat;                   /* center latitude                      */\n\t  //double c_lon;                   /* center longitude                     */\n\t  //double lat1;                    /* first standard parallel              */\n\t  //double lat2;                    /* second standard parallel             */\n\t  //double r_maj;                   /* major axis                           */\n\t  //double r_min;                   /* minor axis                           */\n\t  //double false_east;              /* x offset in meters                   */\n\t  //double false_north;             /* y offset in meters                   */\n\n\t  if (!this.lat2) {\n\t    this.lat2 = this.lat1;\n\t  } //if lat2 is not defined\n\t  if (!this.k0) {\n\t    this.k0 = 1;\n\t  }\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  // Standard Parallels cannot be equal and on opposite sides of the equator\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\n\t  var temp = this.b / this.a;\n\t  this.e = Math.sqrt(1 - temp * temp);\n\n\t  var sin1 = Math.sin(this.lat1);\n\t  var cos1 = Math.cos(this.lat1);\n\t  var ms1 = msfnz(this.e, sin1, cos1);\n\t  var ts1 = tsfnz(this.e, this.lat1, sin1);\n\n\t  var sin2 = Math.sin(this.lat2);\n\t  var cos2 = Math.cos(this.lat2);\n\t  var ms2 = msfnz(this.e, sin2, cos2);\n\t  var ts2 = tsfnz(this.e, this.lat2, sin2);\n\n\t  var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));\n\n\t  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n\t    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);\n\t  }\n\t  else {\n\t    this.ns = sin1;\n\t  }\n\t  if (isNaN(this.ns)) {\n\t    this.ns = sin1;\n\t  }\n\t  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));\n\t  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);\n\t  if (!this.title) {\n\t    this.title = \"Lambert Conformal Conic\";\n\t  }\n\t}\n\n\t// Lambert Conformal conic forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$9(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  // singular cases :\n\t  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {\n\t    lat = sign(lat) * (HALF_PI - 2 * EPSLN);\n\t  }\n\n\t  var con = Math.abs(Math.abs(lat) - HALF_PI);\n\t  var ts, rh1;\n\t  if (con > EPSLN) {\n\t    ts = tsfnz(this.e, lat, Math.sin(lat));\n\t    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);\n\t  }\n\t  else {\n\t    con = lat * this.ns;\n\t    if (con <= 0) {\n\t      return null;\n\t    }\n\t    rh1 = 0;\n\t  }\n\t  var theta = this.ns * adjust_lon(lon - this.long0);\n\t  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;\n\t  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;\n\n\t  return p;\n\t}\n\n\t// Lambert Conformal Conic inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$9(p) {\n\n\t  var rh1, con, ts;\n\t  var lat, lon;\n\t  var x = (p.x - this.x0) / this.k0;\n\t  var y = (this.rh - (p.y - this.y0) / this.k0);\n\t  if (this.ns > 0) {\n\t    rh1 = Math.sqrt(x * x + y * y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(x * x + y * y);\n\t    con = -1;\n\t  }\n\t  var theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2((con * x), (con * y));\n\t  }\n\t  if ((rh1 !== 0) || (this.ns > 0)) {\n\t    con = 1 / this.ns;\n\t    ts = Math.pow((rh1 / (this.a * this.f0)), con);\n\t    lat = phi2z(this.e, ts);\n\t    if (lat === -9999) {\n\t      return null;\n\t    }\n\t  }\n\t  else {\n\t    lat = -HALF_PI;\n\t  }\n\t  lon = adjust_lon(theta / this.ns + this.long0);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$11 = [\"Lambert Tangential Conformal Conic Projection\", \"Lambert_Conformal_Conic\", \"Lambert_Conformal_Conic_2SP\", \"lcc\"];\n\tvar lcc = {\n\t  init: init$10,\n\t  forward: forward$9,\n\t  inverse: inverse$9,\n\t  names: names$11\n\t};\n\n\tfunction init$11() {\n\t  this.a = 6377397.155;\n\t  this.es = 0.006674372230614;\n\t  this.e = Math.sqrt(this.es);\n\t  if (!this.lat0) {\n\t    this.lat0 = 0.863937979737193;\n\t  }\n\t  if (!this.long0) {\n\t    this.long0 = 0.7417649320975901 - 0.308341501185665;\n\t  }\n\t  /* if scale not set default to 0.9999 */\n\t  if (!this.k0) {\n\t    this.k0 = 0.9999;\n\t  }\n\t  this.s45 = 0.785398163397448; /* 45 */\n\t  this.s90 = 2 * this.s45;\n\t  this.fi0 = this.lat0;\n\t  this.e2 = this.es;\n\t  this.e = Math.sqrt(this.e2);\n\t  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));\n\t  this.uq = 1.04216856380474;\n\t  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);\n\t  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);\n\t  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;\n\t  this.k1 = this.k0;\n\t  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));\n\t  this.s0 = 1.37008346281555;\n\t  this.n = Math.sin(this.s0);\n\t  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);\n\t  this.ad = this.s90 - this.uq;\n\t}\n\n\t/* ellipsoid */\n\t/* calculate xy from lat/lon */\n\t/* Constants, identical to inverse transform function */\n\tfunction forward$10(p) {\n\t  var gfi, u, deltav, s, d, eps, ro;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  /* Transformation */\n\t  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));\n\t  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);\n\t  deltav = -delta_lon * this.alfa;\n\t  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));\n\t  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));\n\t  eps = this.n * d;\n\t  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);\n\t  p.y = ro * Math.cos(eps) / 1;\n\t  p.x = ro * Math.sin(eps) / 1;\n\n\t  if (!this.czech) {\n\t    p.y *= -1;\n\t    p.x *= -1;\n\t  }\n\t  return (p);\n\t}\n\n\t/* calculate lat/lon from xy */\n\tfunction inverse$10(p) {\n\t  var u, deltav, s, d, eps, ro, fi1;\n\t  var ok;\n\n\t  /* Transformation */\n\t  /* revert y, x*/\n\t  var tmp = p.x;\n\t  p.x = p.y;\n\t  p.y = tmp;\n\t  if (!this.czech) {\n\t    p.y *= -1;\n\t    p.x *= -1;\n\t  }\n\t  ro = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  eps = Math.atan2(p.y, p.x);\n\t  d = eps / Math.sin(this.s0);\n\t  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);\n\t  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));\n\t  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));\n\t  p.x = this.long0 - deltav / this.alfa;\n\t  fi1 = u;\n\t  ok = 0;\n\t  var iter = 0;\n\t  do {\n\t    p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);\n\t    if (Math.abs(fi1 - p.y) < 0.0000000001) {\n\t      ok = 1;\n\t    }\n\t    fi1 = p.y;\n\t    iter += 1;\n\t  } while (ok === 0 && iter < 15);\n\t  if (iter >= 15) {\n\t    return null;\n\t  }\n\n\t  return (p);\n\t}\n\n\tvar names$12 = [\"Krovak\", \"krovak\"];\n\tvar krovak = {\n\t  init: init$11,\n\t  forward: forward$10,\n\t  inverse: inverse$10,\n\t  names: names$12\n\t};\n\n\tvar mlfn = function(e0, e1, e2, e3, phi) {\n\t  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));\n\t};\n\n\tvar e0fn = function(x) {\n\t  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));\n\t};\n\n\tvar e1fn = function(x) {\n\t  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));\n\t};\n\n\tvar e2fn = function(x) {\n\t  return (0.05859375 * x * x * (1 + 0.75 * x));\n\t};\n\n\tvar e3fn = function(x) {\n\t  return (x * x * x * (35 / 3072));\n\t};\n\n\tvar gN = function(a, e, sinphi) {\n\t  var temp = e * sinphi;\n\t  return a / Math.sqrt(1 - temp * temp);\n\t};\n\n\tvar adjust_lat = function(x) {\n\t  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));\n\t};\n\n\tvar imlfn = function(ml, e0, e1, e2, e3) {\n\t  var phi;\n\t  var dphi;\n\n\t  phi = ml / e0;\n\t  for (var i = 0; i < 15; i++) {\n\t    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\n\t  //..reportError(\"IMLFN-CONV:Latitude failed to converge after 15 iterations\");\n\t  return NaN;\n\t};\n\n\tfunction init$12() {\n\t  if (!this.sphere) {\n\t    this.e0 = e0fn(this.es);\n\t    this.e1 = e1fn(this.es);\n\t    this.e2 = e2fn(this.es);\n\t    this.e3 = e3fn(this.es);\n\t    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n\t  }\n\t}\n\n\t/* Cassini forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------------------*/\n\tfunction forward$11(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var x, y;\n\t  var lam = p.x;\n\t  var phi = p.y;\n\t  lam = adjust_lon(lam - this.long0);\n\n\t  if (this.sphere) {\n\t    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));\n\t    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);\n\t  }\n\t  else {\n\t    //ellipsoid\n\t    var sinphi = Math.sin(phi);\n\t    var cosphi = Math.cos(phi);\n\t    var nl = gN(this.a, this.e, sinphi);\n\t    var tl = Math.tan(phi) * Math.tan(phi);\n\t    var al = lam * Math.cos(phi);\n\t    var asq = al * al;\n\t    var cl = this.es * cosphi * cosphi / (1 - this.es);\n\t    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\n\t    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));\n\t    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);\n\n\n\t  }\n\n\t  p.x = x + this.x0;\n\t  p.y = y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$11(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var x = p.x / this.a;\n\t  var y = p.y / this.a;\n\t  var phi, lam;\n\n\t  if (this.sphere) {\n\t    var dd = y + this.lat0;\n\t    phi = Math.asin(Math.sin(dd) * Math.cos(x));\n\t    lam = Math.atan2(Math.tan(x), Math.cos(dd));\n\t  }\n\t  else {\n\t    /* ellipsoid */\n\t    var ml1 = this.ml0 / this.a + y;\n\t    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);\n\t    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {\n\t      p.x = this.long0;\n\t      p.y = HALF_PI;\n\t      if (y < 0) {\n\t        p.y *= -1;\n\t      }\n\t      return p;\n\t    }\n\t    var nl1 = gN(this.a, this.e, Math.sin(phi1));\n\n\t    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);\n\t    var tl1 = Math.pow(Math.tan(phi1), 2);\n\t    var dl = x * this.a / nl1;\n\t    var dsq = dl * dl;\n\t    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);\n\t    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);\n\n\t  }\n\n\t  p.x = adjust_lon(lam + this.long0);\n\t  p.y = adjust_lat(phi);\n\t  return p;\n\n\t}\n\n\tvar names$13 = [\"Cassini\", \"Cassini_Soldner\", \"cass\"];\n\tvar cass = {\n\t  init: init$12,\n\t  forward: forward$11,\n\t  inverse: inverse$11,\n\t  names: names$13\n\t};\n\n\tvar qsfnz = function(eccent, sinphi) {\n\t  var con;\n\t  if (eccent > 1.0e-7) {\n\t    con = eccent * sinphi;\n\t    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));\n\t  }\n\t  else {\n\t    return (2 * sinphi);\n\t  }\n\t};\n\n\t/*\n\t  reference\n\t    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n\t    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n\t  */\n\n\tvar S_POLE = 1;\n\n\tvar N_POLE = 2;\n\tvar EQUIT = 3;\n\tvar OBLIQ = 4;\n\n\t/* Initialize the Lambert Azimuthal Equal Area projection\n\t  ------------------------------------------------------*/\n\tfunction init$13() {\n\t  var t = Math.abs(this.lat0);\n\t  if (Math.abs(t - HALF_PI) < EPSLN) {\n\t    this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;\n\t  }\n\t  else if (Math.abs(t) < EPSLN) {\n\t    this.mode = this.EQUIT;\n\t  }\n\t  else {\n\t    this.mode = this.OBLIQ;\n\t  }\n\t  if (this.es > 0) {\n\t    var sinphi;\n\n\t    this.qp = qsfnz(this.e, 1);\n\t    this.mmf = 0.5 / (1 - this.es);\n\t    this.apa = authset(this.es);\n\t    switch (this.mode) {\n\t    case this.N_POLE:\n\t      this.dd = 1;\n\t      break;\n\t    case this.S_POLE:\n\t      this.dd = 1;\n\t      break;\n\t    case this.EQUIT:\n\t      this.rq = Math.sqrt(0.5 * this.qp);\n\t      this.dd = 1 / this.rq;\n\t      this.xmf = 1;\n\t      this.ymf = 0.5 * this.qp;\n\t      break;\n\t    case this.OBLIQ:\n\t      this.rq = Math.sqrt(0.5 * this.qp);\n\t      sinphi = Math.sin(this.lat0);\n\t      this.sinb1 = qsfnz(this.e, sinphi) / this.qp;\n\t      this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);\n\t      this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);\n\t      this.ymf = (this.xmf = this.rq) / this.dd;\n\t      this.xmf *= this.dd;\n\t      break;\n\t    }\n\t  }\n\t  else {\n\t    if (this.mode === this.OBLIQ) {\n\t      this.sinph0 = Math.sin(this.lat0);\n\t      this.cosph0 = Math.cos(this.lat0);\n\t    }\n\t  }\n\t}\n\n\t/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------------------*/\n\tfunction forward$12(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;\n\t  var lam = p.x;\n\t  var phi = p.y;\n\n\t  lam = adjust_lon(lam - this.long0);\n\t  if (this.sphere) {\n\t    sinphi = Math.sin(phi);\n\t    cosphi = Math.cos(phi);\n\t    coslam = Math.cos(lam);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;\n\t      if (y <= EPSLN) {\n\t        return null;\n\t      }\n\t      y = Math.sqrt(2 / y);\n\t      x = y * cosphi * Math.sin(lam);\n\t      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;\n\t    }\n\t    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n\t      if (this.mode === this.N_POLE) {\n\t        coslam = -coslam;\n\t      }\n\t      if (Math.abs(phi + this.phi0) < EPSLN) {\n\t        return null;\n\t      }\n\t      y = FORTPI - phi * 0.5;\n\t      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));\n\t      x = y * Math.sin(lam);\n\t      y *= coslam;\n\t    }\n\t  }\n\t  else {\n\t    sinb = 0;\n\t    cosb = 0;\n\t    b = 0;\n\t    coslam = Math.cos(lam);\n\t    sinlam = Math.sin(lam);\n\t    sinphi = Math.sin(phi);\n\t    q = qsfnz(this.e, sinphi);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      sinb = q / this.qp;\n\t      cosb = Math.sqrt(1 - sinb * sinb);\n\t    }\n\t    switch (this.mode) {\n\t    case this.OBLIQ:\n\t      b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;\n\t      break;\n\t    case this.EQUIT:\n\t      b = 1 + cosb * coslam;\n\t      break;\n\t    case this.N_POLE:\n\t      b = HALF_PI + phi;\n\t      q = this.qp - q;\n\t      break;\n\t    case this.S_POLE:\n\t      b = phi - HALF_PI;\n\t      q = this.qp + q;\n\t      break;\n\t    }\n\t    if (Math.abs(b) < EPSLN) {\n\t      return null;\n\t    }\n\t    switch (this.mode) {\n\t    case this.OBLIQ:\n\t    case this.EQUIT:\n\t      b = Math.sqrt(2 / b);\n\t      if (this.mode === this.OBLIQ) {\n\t        y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);\n\t      }\n\t      else {\n\t        y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;\n\t      }\n\t      x = this.xmf * b * cosb * sinlam;\n\t      break;\n\t    case this.N_POLE:\n\t    case this.S_POLE:\n\t      if (q >= 0) {\n\t        x = (b = Math.sqrt(q)) * sinlam;\n\t        y = coslam * ((this.mode === this.S_POLE) ? b : -b);\n\t      }\n\t      else {\n\t        x = y = 0;\n\t      }\n\t      break;\n\t    }\n\t  }\n\n\t  p.x = this.a * x + this.x0;\n\t  p.y = this.a * y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$12(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var x = p.x / this.a;\n\t  var y = p.y / this.a;\n\t  var lam, phi, cCe, sCe, q, rho, ab;\n\t  if (this.sphere) {\n\t    var cosz = 0,\n\t      rh, sinz = 0;\n\n\t    rh = Math.sqrt(x * x + y * y);\n\t    phi = rh * 0.5;\n\t    if (phi > 1) {\n\t      return null;\n\t    }\n\t    phi = 2 * Math.asin(phi);\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      sinz = Math.sin(phi);\n\t      cosz = Math.cos(phi);\n\t    }\n\t    switch (this.mode) {\n\t    case this.EQUIT:\n\t      phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);\n\t      x *= sinz;\n\t      y = cosz * rh;\n\t      break;\n\t    case this.OBLIQ:\n\t      phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);\n\t      x *= sinz * this.cosph0;\n\t      y = (cosz - Math.sin(phi) * this.sinph0) * rh;\n\t      break;\n\t    case this.N_POLE:\n\t      y = -y;\n\t      phi = HALF_PI - phi;\n\t      break;\n\t    case this.S_POLE:\n\t      phi -= HALF_PI;\n\t      break;\n\t    }\n\t    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);\n\t  }\n\t  else {\n\t    ab = 0;\n\t    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {\n\t      x /= this.dd;\n\t      y *= this.dd;\n\t      rho = Math.sqrt(x * x + y * y);\n\t      if (rho < EPSLN) {\n\t        p.x = 0;\n\t        p.y = this.phi0;\n\t        return p;\n\t      }\n\t      sCe = 2 * Math.asin(0.5 * rho / this.rq);\n\t      cCe = Math.cos(sCe);\n\t      x *= (sCe = Math.sin(sCe));\n\t      if (this.mode === this.OBLIQ) {\n\t        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;\n\t        q = this.qp * ab;\n\t        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;\n\t      }\n\t      else {\n\t        ab = y * sCe / rho;\n\t        q = this.qp * ab;\n\t        y = rho * cCe;\n\t      }\n\t    }\n\t    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {\n\t      if (this.mode === this.N_POLE) {\n\t        y = -y;\n\t      }\n\t      q = (x * x + y * y);\n\t      if (!q) {\n\t        p.x = 0;\n\t        p.y = this.phi0;\n\t        return p;\n\t      }\n\t      ab = 1 - q / this.qp;\n\t      if (this.mode === this.S_POLE) {\n\t        ab = -ab;\n\t      }\n\t    }\n\t    lam = Math.atan2(x, y);\n\t    phi = authlat(Math.asin(ab), this.apa);\n\t  }\n\n\t  p.x = adjust_lon(this.long0 + lam);\n\t  p.y = phi;\n\t  return p;\n\t}\n\n\t/* determine latitude from authalic latitude */\n\tvar P00 = 0.33333333333333333333;\n\n\tvar P01 = 0.17222222222222222222;\n\tvar P02 = 0.10257936507936507936;\n\tvar P10 = 0.06388888888888888888;\n\tvar P11 = 0.06640211640211640211;\n\tvar P20 = 0.01641501294219154443;\n\n\tfunction authset(es) {\n\t  var t;\n\t  var APA = [];\n\t  APA[0] = es * P00;\n\t  t = es * es;\n\t  APA[0] += t * P01;\n\t  APA[1] = t * P10;\n\t  t *= es;\n\t  APA[0] += t * P02;\n\t  APA[1] += t * P11;\n\t  APA[2] = t * P20;\n\t  return APA;\n\t}\n\n\tfunction authlat(beta, APA) {\n\t  var t = beta + beta;\n\t  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));\n\t}\n\n\tvar names$14 = [\"Lambert Azimuthal Equal Area\", \"Lambert_Azimuthal_Equal_Area\", \"laea\"];\n\tvar laea = {\n\t  init: init$13,\n\t  forward: forward$12,\n\t  inverse: inverse$12,\n\t  names: names$14,\n\t  S_POLE: S_POLE,\n\t  N_POLE: N_POLE,\n\t  EQUIT: EQUIT,\n\t  OBLIQ: OBLIQ\n\t};\n\n\tvar asinz = function(x) {\n\t  if (Math.abs(x) > 1) {\n\t    x = (x > 1) ? 1 : -1;\n\t  }\n\t  return Math.asin(x);\n\t};\n\n\tfunction init$14() {\n\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2);\n\t  this.e3 = Math.sqrt(this.es);\n\n\t  this.sin_po = Math.sin(this.lat1);\n\t  this.cos_po = Math.cos(this.lat1);\n\t  this.t1 = this.sin_po;\n\t  this.con = this.sin_po;\n\t  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);\n\t  this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  this.sin_po = Math.sin(this.lat2);\n\t  this.cos_po = Math.cos(this.lat2);\n\t  this.t2 = this.sin_po;\n\t  this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);\n\t  this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  this.sin_po = Math.sin(this.lat0);\n\t  this.cos_po = Math.cos(this.lat0);\n\t  this.t3 = this.sin_po;\n\t  this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);\n\n\t  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {\n\t    this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);\n\t  }\n\t  else {\n\t    this.ns0 = this.con;\n\t  }\n\t  this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;\n\t  this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;\n\t}\n\n\t/* Albers Conical Equal Area forward equations--mapping lat,long to x,y\n\t  -------------------------------------------------------------------*/\n\tfunction forward$13(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  this.sin_phi = Math.sin(lat);\n\t  this.cos_phi = Math.cos(lat);\n\n\t  var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);\n\t  var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;\n\t  var theta = this.ns0 * adjust_lon(lon - this.long0);\n\t  var x = rh1 * Math.sin(theta) + this.x0;\n\t  var y = this.rh - rh1 * Math.cos(theta) + this.y0;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$13(p) {\n\t  var rh1, qs, con, theta, lon, lat;\n\n\t  p.x -= this.x0;\n\t  p.y = this.rh - p.y + this.y0;\n\t  if (this.ns0 >= 0) {\n\t    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = -1;\n\t  }\n\t  theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2(con * p.x, con * p.y);\n\t  }\n\t  con = rh1 * this.ns0 / this.a;\n\t  if (this.sphere) {\n\t    lat = Math.asin((this.c - con * con) / (2 * this.ns0));\n\t  }\n\t  else {\n\t    qs = (this.c - con * con) / this.ns0;\n\t    lat = this.phi1z(this.e3, qs);\n\t  }\n\n\t  lon = adjust_lon(theta / this.ns0 + this.long0);\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\t/* Function to compute phi1, the latitude for the inverse of the\n\t   Albers Conical Equal-Area projection.\n\t-------------------------------------------*/\n\tfunction phi1z(eccent, qs) {\n\t  var sinphi, cosphi, con, com, dphi;\n\t  var phi = asinz(0.5 * qs);\n\t  if (eccent < EPSLN) {\n\t    return phi;\n\t  }\n\n\t  var eccnts = eccent * eccent;\n\t  for (var i = 1; i <= 25; i++) {\n\t    sinphi = Math.sin(phi);\n\t    cosphi = Math.cos(phi);\n\t    con = eccent * sinphi;\n\t    com = 1 - con * con;\n\t    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n\t    phi = phi + dphi;\n\t    if (Math.abs(dphi) <= 1e-7) {\n\t      return phi;\n\t    }\n\t  }\n\t  return null;\n\t}\n\n\tvar names$15 = [\"Albers_Conic_Equal_Area\", \"Albers\", \"aea\"];\n\tvar aea = {\n\t  init: init$14,\n\t  forward: forward$13,\n\t  inverse: inverse$13,\n\t  names: names$15,\n\t  phi1z: phi1z\n\t};\n\n\t/*\n\t  reference:\n\t    Wolfram Mathworld \"Gnomonic Projection\"\n\t    http://mathworld.wolfram.com/GnomonicProjection.html\n\t    Accessed: 12th November 2009\n\t  */\n\tfunction init$15() {\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.sin_p14 = Math.sin(this.lat0);\n\t  this.cos_p14 = Math.cos(this.lat0);\n\t  // Approximation for projecting points to the horizon (infinity)\n\t  this.infinity_dist = 1000 * this.a;\n\t  this.rc = 1;\n\t}\n\n\t/* Gnomonic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$14(p) {\n\t  var sinphi, cosphi; /* sin and cos value        */\n\t  var dlon; /* delta longitude value      */\n\t  var coslon; /* cos of longitude        */\n\t  var ksp; /* scale factor          */\n\t  var g;\n\t  var x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  dlon = adjust_lon(lon - this.long0);\n\n\t  sinphi = Math.sin(lat);\n\t  cosphi = Math.cos(lat);\n\n\t  coslon = Math.cos(dlon);\n\t  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n\t  ksp = 1;\n\t  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n\t    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;\n\t    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;\n\t  }\n\t  else {\n\n\t    // Point is in the opposing hemisphere and is unprojectable\n\t    // We still need to return a reasonable point, so we project\n\t    // to infinity, on a bearing\n\t    // equivalent to the northern hemisphere equivalent\n\t    // This is a reasonable approximation for short shapes and lines that\n\t    // straddle the horizon.\n\n\t    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);\n\t    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$14(p) {\n\t  var rh; /* Rho */\n\t  var sinc, cosc;\n\t  var c;\n\t  var lon, lat;\n\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  p.x /= this.k0;\n\t  p.y /= this.k0;\n\n\t  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {\n\t    c = Math.atan2(rh, this.rc);\n\t    sinc = Math.sin(c);\n\t    cosc = Math.cos(c);\n\n\t    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);\n\t    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);\n\t    lon = adjust_lon(this.long0 + lon);\n\t  }\n\t  else {\n\t    lat = this.phic0;\n\t    lon = 0;\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$16 = [\"gnom\"];\n\tvar gnom = {\n\t  init: init$15,\n\t  forward: forward$14,\n\t  inverse: inverse$14,\n\t  names: names$16\n\t};\n\n\tvar iqsfnz = function(eccent, q) {\n\t  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));\n\t  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {\n\t    if (q < 0) {\n\t      return (-1 * HALF_PI);\n\t    }\n\t    else {\n\t      return HALF_PI;\n\t    }\n\t  }\n\t  //var phi = 0.5* q/(1-eccent*eccent);\n\t  var phi = Math.asin(0.5 * q);\n\t  var dphi;\n\t  var sin_phi;\n\t  var cos_phi;\n\t  var con;\n\t  for (var i = 0; i < 30; i++) {\n\t    sin_phi = Math.sin(phi);\n\t    cos_phi = Math.cos(phi);\n\t    con = eccent * sin_phi;\n\t    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));\n\t    phi += dphi;\n\t    if (Math.abs(dphi) <= 0.0000000001) {\n\t      return phi;\n\t    }\n\t  }\n\n\t  //console.log(\"IQSFN-CONV:Latitude failed to converge after 30 iterations\");\n\t  return NaN;\n\t};\n\n\t/*\n\t  reference:\n\t    \"Cartographic Projection Procedures for the UNIX Environment-\n\t    A User's Manual\" by Gerald I. Evenden,\n\t    USGS Open File Report 90-284and Release 4 Interim Reports (2003)\n\t*/\n\tfunction init$16() {\n\t  //no-op\n\t  if (!this.sphere) {\n\t    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));\n\t  }\n\t}\n\n\t/* Cylindrical Equal Area forward equations--mapping lat,long to x,y\n\t    ------------------------------------------------------------*/\n\tfunction forward$15(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var x, y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  if (this.sphere) {\n\t    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);\n\t    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);\n\t  }\n\t  else {\n\t    var qs = qsfnz(this.e, Math.sin(lat));\n\t    x = this.x0 + this.a * this.k0 * dlon;\n\t    y = this.y0 + this.a * qs * 0.5 / this.k0;\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long\n\t    ------------------------------------------------------------*/\n\tfunction inverse$15(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var lon, lat;\n\n\t  if (this.sphere) {\n\t    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));\n\t    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));\n\t  }\n\t  else {\n\t    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);\n\t    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$17 = [\"cea\"];\n\tvar cea = {\n\t  init: init$16,\n\t  forward: forward$15,\n\t  inverse: inverse$15,\n\t  names: names$17\n\t};\n\n\tfunction init$17() {\n\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  this.lat0 = this.lat0 || 0;\n\t  this.long0 = this.long0 || 0;\n\t  this.lat_ts = this.lat_ts || 0;\n\t  this.title = this.title || \"Equidistant Cylindrical (Plate Carre)\";\n\n\t  this.rc = Math.cos(this.lat_ts);\n\t}\n\n\t// forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$16(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var dlat = adjust_lat(lat - this.lat0);\n\t  p.x = this.x0 + (this.a * dlon * this.rc);\n\t  p.y = this.y0 + (this.a * dlat);\n\t  return p;\n\t}\n\n\t// inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$16(p) {\n\n\t  var x = p.x;\n\t  var y = p.y;\n\n\t  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));\n\t  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));\n\t  return p;\n\t}\n\n\tvar names$18 = [\"Equirectangular\", \"Equidistant_Cylindrical\", \"eqc\"];\n\tvar eqc = {\n\t  init: init$17,\n\t  forward: forward$16,\n\t  inverse: inverse$16,\n\t  names: names$18\n\t};\n\n\tvar MAX_ITER$2 = 20;\n\n\tfunction init$18() {\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles\n\t  this.e = Math.sqrt(this.es);\n\t  this.e0 = e0fn(this.es);\n\t  this.e1 = e1fn(this.es);\n\t  this.e2 = e2fn(this.es);\n\t  this.e3 = e3fn(this.es);\n\t  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas\n\t}\n\n\t/* Polyconic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$17(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var x, y, el;\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  el = dlon * Math.sin(lat);\n\t  if (this.sphere) {\n\t    if (Math.abs(lat) <= EPSLN) {\n\t      x = this.a * dlon;\n\t      y = -1 * this.a * this.lat0;\n\t    }\n\t    else {\n\t      x = this.a * Math.sin(el) / Math.tan(lat);\n\t      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(lat) <= EPSLN) {\n\t      x = this.a * dlon;\n\t      y = -1 * this.ml0;\n\t    }\n\t    else {\n\t      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);\n\t      x = nl * Math.sin(el);\n\t      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));\n\t    }\n\n\t  }\n\t  p.x = x + this.x0;\n\t  p.y = y + this.y0;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$17(p) {\n\t  var lon, lat, x, y, i;\n\t  var al, bl;\n\t  var phi, dphi;\n\t  x = p.x - this.x0;\n\t  y = p.y - this.y0;\n\n\t  if (this.sphere) {\n\t    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {\n\t      lon = adjust_lon(x / this.a + this.long0);\n\t      lat = 0;\n\t    }\n\t    else {\n\t      al = this.lat0 + y / this.a;\n\t      bl = x * x / this.a / this.a + al * al;\n\t      phi = al;\n\t      var tanphi;\n\t      for (i = MAX_ITER$2; i; --i) {\n\t        tanphi = Math.tan(phi);\n\t        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);\n\t        phi += dphi;\n\t        if (Math.abs(dphi) <= EPSLN) {\n\t          lat = phi;\n\t          break;\n\t        }\n\t      }\n\t      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));\n\t    }\n\t  }\n\t  else {\n\t    if (Math.abs(y + this.ml0) <= EPSLN) {\n\t      lat = 0;\n\t      lon = adjust_lon(this.long0 + x / this.a);\n\t    }\n\t    else {\n\n\t      al = (this.ml0 + y) / this.a;\n\t      bl = x * x / this.a / this.a + al * al;\n\t      phi = al;\n\t      var cl, mln, mlnp, ma;\n\t      var con;\n\t      for (i = MAX_ITER$2; i; --i) {\n\t        con = this.e * Math.sin(phi);\n\t        cl = Math.sqrt(1 - con * con) * Math.tan(phi);\n\t        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);\n\t        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);\n\t        ma = mln / this.a;\n\t        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);\n\t        phi -= dphi;\n\t        if (Math.abs(dphi) <= EPSLN) {\n\t          lat = phi;\n\t          break;\n\t        }\n\t      }\n\n\t      //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);\n\t      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);\n\t      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));\n\t    }\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$19 = [\"Polyconic\", \"poly\"];\n\tvar poly = {\n\t  init: init$18,\n\t  forward: forward$17,\n\t  inverse: inverse$17,\n\t  names: names$19\n\t};\n\n\t/*\n\t  reference\n\t    Department of Land and Survey Technical Circular 1973/32\n\t      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf\n\t    OSG Technical Report 4.1\n\t      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf\n\t  */\n\n\t/**\n\t * iterations: Number of iterations to refine inverse transform.\n\t *     0 -> km accuracy\n\t *     1 -> m accuracy -- suitable for most mapping applications\n\t *     2 -> mm accuracy\n\t */\n\n\n\tfunction init$19() {\n\t  this.A = [];\n\t  this.A[1] = 0.6399175073;\n\t  this.A[2] = -0.1358797613;\n\t  this.A[3] = 0.063294409;\n\t  this.A[4] = -0.02526853;\n\t  this.A[5] = 0.0117879;\n\t  this.A[6] = -0.0055161;\n\t  this.A[7] = 0.0026906;\n\t  this.A[8] = -0.001333;\n\t  this.A[9] = 0.00067;\n\t  this.A[10] = -0.00034;\n\n\t  this.B_re = [];\n\t  this.B_im = [];\n\t  this.B_re[1] = 0.7557853228;\n\t  this.B_im[1] = 0;\n\t  this.B_re[2] = 0.249204646;\n\t  this.B_im[2] = 0.003371507;\n\t  this.B_re[3] = -0.001541739;\n\t  this.B_im[3] = 0.041058560;\n\t  this.B_re[4] = -0.10162907;\n\t  this.B_im[4] = 0.01727609;\n\t  this.B_re[5] = -0.26623489;\n\t  this.B_im[5] = -0.36249218;\n\t  this.B_re[6] = -0.6870983;\n\t  this.B_im[6] = -1.1651967;\n\n\t  this.C_re = [];\n\t  this.C_im = [];\n\t  this.C_re[1] = 1.3231270439;\n\t  this.C_im[1] = 0;\n\t  this.C_re[2] = -0.577245789;\n\t  this.C_im[2] = -0.007809598;\n\t  this.C_re[3] = 0.508307513;\n\t  this.C_im[3] = -0.112208952;\n\t  this.C_re[4] = -0.15094762;\n\t  this.C_im[4] = 0.18200602;\n\t  this.C_re[5] = 1.01418179;\n\t  this.C_im[5] = 1.64497696;\n\t  this.C_re[6] = 1.9660549;\n\t  this.C_im[6] = 2.5127645;\n\n\t  this.D = [];\n\t  this.D[1] = 1.5627014243;\n\t  this.D[2] = 0.5185406398;\n\t  this.D[3] = -0.03333098;\n\t  this.D[4] = -0.1052906;\n\t  this.D[5] = -0.0368594;\n\t  this.D[6] = 0.007317;\n\t  this.D[7] = 0.01220;\n\t  this.D[8] = 0.00394;\n\t  this.D[9] = -0.0013;\n\t}\n\n\t/**\n\t    New Zealand Map Grid Forward  - long/lat to x/y\n\t    long/lat in radians\n\t  */\n\tfunction forward$18(p) {\n\t  var n;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lat = lat - this.lat0;\n\t  var delta_lon = lon - this.long0;\n\n\t  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda\n\t  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.\n\t  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;\n\t  var d_lambda = delta_lon;\n\t  var d_phi_n = 1; // d_phi^0\n\n\t  var d_psi = 0;\n\t  for (n = 1; n <= 10; n++) {\n\t    d_phi_n = d_phi_n * d_phi;\n\t    d_psi = d_psi + this.A[n] * d_phi_n;\n\t  }\n\n\t  // 2. Calculate theta\n\t  var th_re = d_psi;\n\t  var th_im = d_lambda;\n\n\t  // 3. Calculate z\n\t  var th_n_re = 1;\n\t  var th_n_im = 0; // theta^0\n\t  var th_n_re1;\n\t  var th_n_im1;\n\n\t  var z_re = 0;\n\t  var z_im = 0;\n\t  for (n = 1; n <= 6; n++) {\n\t    th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t    th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t    th_n_re = th_n_re1;\n\t    th_n_im = th_n_im1;\n\t    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;\n\t    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;\n\t  }\n\n\t  // 4. Calculate easting and northing\n\t  p.x = (z_im * this.a) + this.x0;\n\t  p.y = (z_re * this.a) + this.y0;\n\n\t  return p;\n\t}\n\n\t/**\n\t    New Zealand Map Grid Inverse  -  x/y to long/lat\n\t  */\n\tfunction inverse$18(p) {\n\t  var n;\n\t  var x = p.x;\n\t  var y = p.y;\n\n\t  var delta_x = x - this.x0;\n\t  var delta_y = y - this.y0;\n\n\t  // 1. Calculate z\n\t  var z_re = delta_y / this.a;\n\t  var z_im = delta_x / this.a;\n\n\t  // 2a. Calculate theta - first approximation gives km accuracy\n\t  var z_n_re = 1;\n\t  var z_n_im = 0; // z^0\n\t  var z_n_re1;\n\t  var z_n_im1;\n\n\t  var th_re = 0;\n\t  var th_im = 0;\n\t  for (n = 1; n <= 6; n++) {\n\t    z_n_re1 = z_n_re * z_re - z_n_im * z_im;\n\t    z_n_im1 = z_n_im * z_re + z_n_re * z_im;\n\t    z_n_re = z_n_re1;\n\t    z_n_im = z_n_im1;\n\t    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;\n\t    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;\n\t  }\n\n\t  // 2b. Iterate to refine the accuracy of the calculation\n\t  //        0 iterations gives km accuracy\n\t  //        1 iteration gives m accuracy -- good enough for most mapping applications\n\t  //        2 iterations bives mm accuracy\n\t  for (var i = 0; i < this.iterations; i++) {\n\t    var th_n_re = th_re;\n\t    var th_n_im = th_im;\n\t    var th_n_re1;\n\t    var th_n_im1;\n\n\t    var num_re = z_re;\n\t    var num_im = z_im;\n\t    for (n = 2; n <= 6; n++) {\n\t      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t      th_n_re = th_n_re1;\n\t      th_n_im = th_n_im1;\n\t      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n\t      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n\t    }\n\n\t    th_n_re = 1;\n\t    th_n_im = 0;\n\t    var den_re = this.B_re[1];\n\t    var den_im = this.B_im[1];\n\t    for (n = 2; n <= 6; n++) {\n\t      th_n_re1 = th_n_re * th_re - th_n_im * th_im;\n\t      th_n_im1 = th_n_im * th_re + th_n_re * th_im;\n\t      th_n_re = th_n_re1;\n\t      th_n_im = th_n_im1;\n\t      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);\n\t      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);\n\t    }\n\n\t    // Complex division\n\t    var den2 = den_re * den_re + den_im * den_im;\n\t    th_re = (num_re * den_re + num_im * den_im) / den2;\n\t    th_im = (num_im * den_re - num_re * den_im) / den2;\n\t  }\n\n\t  // 3. Calculate d_phi              ...                                    // and d_lambda\n\t  var d_psi = th_re;\n\t  var d_lambda = th_im;\n\t  var d_psi_n = 1; // d_psi^0\n\n\t  var d_phi = 0;\n\t  for (n = 1; n <= 9; n++) {\n\t    d_psi_n = d_psi_n * d_psi;\n\t    d_phi = d_phi + this.D[n] * d_psi_n;\n\t  }\n\n\t  // 4. Calculate latitude and longitude\n\t  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.\n\t  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);\n\t  var lon = this.long0 + d_lambda;\n\n\t  p.x = lon;\n\t  p.y = lat;\n\n\t  return p;\n\t}\n\n\tvar names$20 = [\"New_Zealand_Map_Grid\", \"nzmg\"];\n\tvar nzmg = {\n\t  init: init$19,\n\t  forward: forward$18,\n\t  inverse: inverse$18,\n\t  names: names$20\n\t};\n\n\t/*\n\t  reference\n\t    \"New Equal-Area Map Projections for Noncircular Regions\", John P. Snyder,\n\t    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.\n\t  */\n\n\n\t/* Initialize the Miller Cylindrical projection\n\t  -------------------------------------------*/\n\tfunction init$20() {\n\t  //no-op\n\t}\n\n\t/* Miller Cylindrical forward equations--mapping lat,long to x,y\n\t    ------------------------------------------------------------*/\n\tfunction forward$19(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var x = this.x0 + this.a * dlon;\n\t  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Miller Cylindrical inverse equations--mapping x,y to lat/long\n\t    ------------------------------------------------------------*/\n\tfunction inverse$19(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\n\t  var lon = adjust_lon(this.long0 + p.x / this.a);\n\t  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$21 = [\"Miller_Cylindrical\", \"mill\"];\n\tvar mill = {\n\t  init: init$20,\n\t  forward: forward$19,\n\t  inverse: inverse$19,\n\t  names: names$21\n\t};\n\n\tvar MAX_ITER$3 = 20;\n\tfunction init$21() {\n\t  /* Place parameters in static storage for common use\n\t    -------------------------------------------------*/\n\n\n\t  if (!this.sphere) {\n\t    this.en = pj_enfn(this.es);\n\t  }\n\t  else {\n\t    this.n = 1;\n\t    this.m = 0;\n\t    this.es = 0;\n\t    this.C_y = Math.sqrt((this.m + 1) / this.n);\n\t    this.C_x = this.C_y / (this.m + 1);\n\t  }\n\n\t}\n\n\t/* Sinusoidal forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------*/\n\tfunction forward$20(p) {\n\t  var x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t    -----------------*/\n\t  lon = adjust_lon(lon - this.long0);\n\n\t  if (this.sphere) {\n\t    if (!this.m) {\n\t      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;\n\t    }\n\t    else {\n\t      var k = this.n * Math.sin(lat);\n\t      for (var i = MAX_ITER$3; i; --i) {\n\t        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));\n\t        lat -= V;\n\t        if (Math.abs(V) < EPSLN) {\n\t          break;\n\t        }\n\t      }\n\t    }\n\t    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));\n\t    y = this.a * this.C_y * lat;\n\n\t  }\n\t  else {\n\n\t    var s = Math.sin(lat);\n\t    var c = Math.cos(lat);\n\t    y = this.a * pj_mlfn(lat, s, c, this.en);\n\t    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);\n\t  }\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$20(p) {\n\t  var lat, temp, lon, s;\n\n\t  p.x -= this.x0;\n\t  lon = p.x / this.a;\n\t  p.y -= this.y0;\n\t  lat = p.y / this.a;\n\n\t  if (this.sphere) {\n\t    lat /= this.C_y;\n\t    lon = lon / (this.C_x * (this.m + Math.cos(lat)));\n\t    if (this.m) {\n\t      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);\n\t    }\n\t    else if (this.n !== 1) {\n\t      lat = asinz(Math.sin(lat) / this.n);\n\t    }\n\t    lon = adjust_lon(lon + this.long0);\n\t    lat = adjust_lat(lat);\n\t  }\n\t  else {\n\t    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);\n\t    s = Math.abs(lat);\n\t    if (s < HALF_PI) {\n\t      s = Math.sin(lat);\n\t      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));\n\t      //temp = this.long0 + p.x / (this.a * Math.cos(lat));\n\t      lon = adjust_lon(temp);\n\t    }\n\t    else if ((s - EPSLN) < HALF_PI) {\n\t      lon = this.long0;\n\t    }\n\t  }\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$22 = [\"Sinusoidal\", \"sinu\"];\n\tvar sinu = {\n\t  init: init$21,\n\t  forward: forward$20,\n\t  inverse: inverse$20,\n\t  names: names$22\n\t};\n\n\tfunction init$22() {}\n\t/* Mollweide forward equations--mapping lat,long to x,y\n\t    ----------------------------------------------------*/\n\tfunction forward$21(p) {\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  var delta_lon = adjust_lon(lon - this.long0);\n\t  var theta = lat;\n\t  var con = Math.PI * Math.sin(lat);\n\n\t  /* Iterate using the Newton-Raphson method to find theta\n\t      -----------------------------------------------------*/\n\t  while (true) {\n\t    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));\n\t    theta += delta_theta;\n\t    if (Math.abs(delta_theta) < EPSLN) {\n\t      break;\n\t    }\n\t  }\n\t  theta /= 2;\n\n\t  /* If the latitude is 90 deg, force the x coordinate to be \"0 + false easting\"\n\t       this is done here because of precision problems with \"cos(theta)\"\n\t       --------------------------------------------------------------------------*/\n\t  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {\n\t    delta_lon = 0;\n\t  }\n\t  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;\n\t  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;\n\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$21(p) {\n\t  var theta;\n\t  var arg;\n\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  arg = p.y / (1.4142135623731 * this.a);\n\n\t  /* Because of division by zero problems, 'arg' can not be 1.  Therefore\n\t       a number very close to one is used instead.\n\t       -------------------------------------------------------------------*/\n\t  if (Math.abs(arg) > 0.999999999999) {\n\t    arg = 0.999999999999;\n\t  }\n\t  theta = Math.asin(arg);\n\t  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));\n\t  if (lon < (-Math.PI)) {\n\t    lon = -Math.PI;\n\t  }\n\t  if (lon > Math.PI) {\n\t    lon = Math.PI;\n\t  }\n\t  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;\n\t  if (Math.abs(arg) > 1) {\n\t    arg = 1;\n\t  }\n\t  var lat = Math.asin(arg);\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$23 = [\"Mollweide\", \"moll\"];\n\tvar moll = {\n\t  init: init$22,\n\t  forward: forward$21,\n\t  inverse: inverse$21,\n\t  names: names$23\n\t};\n\n\tfunction init$23() {\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  // Standard Parallels cannot be equal and on opposite sides of the equator\n\t  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {\n\t    return;\n\t  }\n\t  this.lat2 = this.lat2 || this.lat1;\n\t  this.temp = this.b / this.a;\n\t  this.es = 1 - Math.pow(this.temp, 2);\n\t  this.e = Math.sqrt(this.es);\n\t  this.e0 = e0fn(this.es);\n\t  this.e1 = e1fn(this.es);\n\t  this.e2 = e2fn(this.es);\n\t  this.e3 = e3fn(this.es);\n\n\t  this.sinphi = Math.sin(this.lat1);\n\t  this.cosphi = Math.cos(this.lat1);\n\n\t  this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);\n\t  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);\n\n\t  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {\n\t    this.ns = this.sinphi;\n\t  }\n\t  else {\n\t    this.sinphi = Math.sin(this.lat2);\n\t    this.cosphi = Math.cos(this.lat2);\n\t    this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);\n\t    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);\n\t    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);\n\t  }\n\t  this.g = this.ml1 + this.ms1 / this.ns;\n\t  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);\n\t  this.rh = this.a * (this.g - this.ml0);\n\t}\n\n\t/* Equidistant Conic forward equations--mapping lat,long to x,y\n\t  -----------------------------------------------------------*/\n\tfunction forward$22(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var rh1;\n\n\t  /* Forward equations\n\t      -----------------*/\n\t  if (this.sphere) {\n\t    rh1 = this.a * (this.g - lat);\n\t  }\n\t  else {\n\t    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);\n\t    rh1 = this.a * (this.g - ml);\n\t  }\n\t  var theta = this.ns * adjust_lon(lon - this.long0);\n\t  var x = this.x0 + rh1 * Math.sin(theta);\n\t  var y = this.y0 + this.rh - rh1 * Math.cos(theta);\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Inverse equations\n\t  -----------------*/\n\tfunction inverse$22(p) {\n\t  p.x -= this.x0;\n\t  p.y = this.rh - p.y + this.y0;\n\t  var con, rh1, lat, lon;\n\t  if (this.ns >= 0) {\n\t    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = 1;\n\t  }\n\t  else {\n\t    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);\n\t    con = -1;\n\t  }\n\t  var theta = 0;\n\t  if (rh1 !== 0) {\n\t    theta = Math.atan2(con * p.x, con * p.y);\n\t  }\n\n\t  if (this.sphere) {\n\t    lon = adjust_lon(this.long0 + theta / this.ns);\n\t    lat = adjust_lat(this.g - rh1 / this.a);\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    var ml = this.g - rh1 / this.a;\n\t    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);\n\t    lon = adjust_lon(this.long0 + theta / this.ns);\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\n\t}\n\n\tvar names$24 = [\"Equidistant_Conic\", \"eqdc\"];\n\tvar eqdc = {\n\t  init: init$23,\n\t  forward: forward$22,\n\t  inverse: inverse$22,\n\t  names: names$24\n\t};\n\n\t/* Initialize the Van Der Grinten projection\n\t  ----------------------------------------*/\n\tfunction init$24() {\n\t  //this.R = 6370997; //Radius of earth\n\t  this.R = this.a;\n\t}\n\n\tfunction forward$23(p) {\n\n\t  var lon = p.x;\n\t  var lat = p.y;\n\n\t  /* Forward equations\n\t    -----------------*/\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var x, y;\n\n\t  if (Math.abs(lat) <= EPSLN) {\n\t    x = this.x0 + this.R * dlon;\n\t    y = this.y0;\n\t  }\n\t  var theta = asinz(2 * Math.abs(lat / Math.PI));\n\t  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {\n\t    x = this.x0;\n\t    if (lat >= 0) {\n\t      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);\n\t    }\n\t    else {\n\t      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);\n\t    }\n\t    //  return(OK);\n\t  }\n\t  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));\n\t  var asq = al * al;\n\t  var sinth = Math.sin(theta);\n\t  var costh = Math.cos(theta);\n\n\t  var g = costh / (sinth + costh - 1);\n\t  var gsq = g * g;\n\t  var m = g * (2 / sinth - 1);\n\t  var msq = m * m;\n\t  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);\n\t  if (dlon < 0) {\n\t    con = -con;\n\t  }\n\t  x = this.x0 + con;\n\t  //con = Math.abs(con / (Math.PI * this.R));\n\t  var q = asq + g;\n\t  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);\n\t  if (lat >= 0) {\n\t    //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n\t    y = this.y0 + con;\n\t  }\n\t  else {\n\t    //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);\n\t    y = this.y0 - con;\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\t/* Van Der Grinten inverse equations--mapping x,y to lat/long\n\t  ---------------------------------------------------------*/\n\tfunction inverse$23(p) {\n\t  var lon, lat;\n\t  var xx, yy, xys, c1, c2, c3;\n\t  var a1;\n\t  var m1;\n\t  var con;\n\t  var th1;\n\t  var d;\n\n\t  /* inverse equations\n\t    -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  con = Math.PI * this.R;\n\t  xx = p.x / con;\n\t  yy = p.y / con;\n\t  xys = xx * xx + yy * yy;\n\t  c1 = -Math.abs(yy) * (1 + xys);\n\t  c2 = c1 - 2 * yy * yy + xx * xx;\n\t  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;\n\t  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;\n\t  a1 = (c1 - c2 * c2 / 3 / c3) / c3;\n\t  m1 = 2 * Math.sqrt(-a1 / 3);\n\t  con = ((3 * d) / a1) / m1;\n\t  if (Math.abs(con) > 1) {\n\t    if (con >= 0) {\n\t      con = 1;\n\t    }\n\t    else {\n\t      con = -1;\n\t    }\n\t  }\n\t  th1 = Math.acos(con) / 3;\n\t  if (p.y >= 0) {\n\t    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n\t  }\n\t  else {\n\t    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;\n\t  }\n\n\t  if (Math.abs(xx) < EPSLN) {\n\t    lon = this.long0;\n\t  }\n\t  else {\n\t    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);\n\t  }\n\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$25 = [\"Van_der_Grinten_I\", \"VanDerGrinten\", \"vandg\"];\n\tvar vandg = {\n\t  init: init$24,\n\t  forward: forward$23,\n\t  inverse: inverse$23,\n\t  names: names$25\n\t};\n\n\tfunction init$25() {\n\t  this.sin_p12 = Math.sin(this.lat0);\n\t  this.cos_p12 = Math.cos(this.lat0);\n\t}\n\n\tfunction forward$24(p) {\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  var sinphi = Math.sin(p.y);\n\t  var cosphi = Math.cos(p.y);\n\t  var dlon = adjust_lon(lon - this.long0);\n\t  var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;\n\t  if (this.sphere) {\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North Pole case\n\t      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);\n\t      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South Pole case\n\t      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);\n\t      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else {\n\t      //default case\n\t      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);\n\t      c = Math.acos(cos_c);\n\t      kp = c / Math.sin(c);\n\t      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);\n\t      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));\n\t      return p;\n\t    }\n\t  }\n\t  else {\n\t    e0 = e0fn(this.es);\n\t    e1 = e1fn(this.es);\n\t    e2 = e2fn(this.es);\n\t    e3 = e3fn(this.es);\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North Pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n\t      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);\n\t      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South Pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      Ml = this.a * mlfn(e0, e1, e2, e3, lat);\n\t      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);\n\t      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);\n\t      return p;\n\t    }\n\t    else {\n\t      //Default case\n\t      tanphi = sinphi / cosphi;\n\t      Nl1 = gN(this.a, this.e, this.sin_p12);\n\t      Nl = gN(this.a, this.e, sinphi);\n\t      psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));\n\t      Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));\n\t      if (Az === 0) {\n\t        s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n\t      }\n\t      else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {\n\t        s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));\n\t      }\n\t      else {\n\t        s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));\n\t      }\n\t      G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);\n\t      H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);\n\t      GH = G * H;\n\t      Hs = H * H;\n\t      s2 = s * s;\n\t      s3 = s2 * s;\n\t      s4 = s3 * s;\n\t      s5 = s4 * s;\n\t      c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);\n\t      p.x = this.x0 + c * Math.sin(Az);\n\t      p.y = this.y0 + c * Math.cos(Az);\n\t      return p;\n\t    }\n\t  }\n\n\n\t}\n\n\tfunction inverse$24(p) {\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F;\n\t  if (this.sphere) {\n\t    rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t    if (rh > (2 * HALF_PI * this.a)) {\n\t      return;\n\t    }\n\t    z = rh / this.a;\n\n\t    sinz = Math.sin(z);\n\t    cosz = Math.cos(z);\n\n\t    lon = this.long0;\n\t    if (Math.abs(rh) <= EPSLN) {\n\t      lat = this.lat0;\n\t    }\n\t    else {\n\t      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);\n\t      con = Math.abs(this.lat0) - HALF_PI;\n\t      if (Math.abs(con) <= EPSLN) {\n\t        if (this.lat0 >= 0) {\n\t          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n\t        }\n\t        else {\n\t          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n\t        }\n\t      }\n\t      else {\n\t        /*con = cosz - this.sin_p12 * Math.sin(lat);\n\t        if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {\n\t          //no-op, just keep the lon value as is\n\t        } else {\n\t          var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));\n\t          lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));\n\t        }*/\n\t        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));\n\t      }\n\t    }\n\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  else {\n\t    e0 = e0fn(this.es);\n\t    e1 = e1fn(this.es);\n\t    e2 = e2fn(this.es);\n\t    e3 = e3fn(this.es);\n\t    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {\n\t      //North pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      M = Mlp - rh;\n\t      lat = imlfn(M / this.a, e0, e1, e2, e3);\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {\n\t      //South pole case\n\t      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      M = rh - Mlp;\n\n\t      lat = imlfn(M / this.a, e0, e1, e2, e3);\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t    else {\n\t      //default case\n\t      rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t      Az = Math.atan2(p.x, p.y);\n\t      N1 = gN(this.a, this.e, this.sin_p12);\n\t      cosAz = Math.cos(Az);\n\t      tmp = this.e * this.cos_p12 * cosAz;\n\t      A = -tmp * tmp / (1 - this.es);\n\t      B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);\n\t      D = rh / N1;\n\t      Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;\n\t      F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;\n\t      psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);\n\t      lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));\n\t      lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es));\n\t      p.x = lon;\n\t      p.y = lat;\n\t      return p;\n\t    }\n\t  }\n\n\t}\n\n\tvar names$26 = [\"Azimuthal_Equidistant\", \"aeqd\"];\n\tvar aeqd = {\n\t  init: init$25,\n\t  forward: forward$24,\n\t  inverse: inverse$24,\n\t  names: names$26\n\t};\n\n\tfunction init$26() {\n\t  //double temp;      /* temporary variable    */\n\n\t  /* Place parameters in static storage for common use\n\t      -------------------------------------------------*/\n\t  this.sin_p14 = Math.sin(this.lat0);\n\t  this.cos_p14 = Math.cos(this.lat0);\n\t}\n\n\t/* Orthographic forward equations--mapping lat,long to x,y\n\t    ---------------------------------------------------*/\n\tfunction forward$25(p) {\n\t  var sinphi, cosphi; /* sin and cos value        */\n\t  var dlon; /* delta longitude value      */\n\t  var coslon; /* cos of longitude        */\n\t  var ksp; /* scale factor          */\n\t  var g, x, y;\n\t  var lon = p.x;\n\t  var lat = p.y;\n\t  /* Forward equations\n\t      -----------------*/\n\t  dlon = adjust_lon(lon - this.long0);\n\n\t  sinphi = Math.sin(lat);\n\t  cosphi = Math.cos(lat);\n\n\t  coslon = Math.cos(dlon);\n\t  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;\n\t  ksp = 1;\n\t  if ((g > 0) || (Math.abs(g) <= EPSLN)) {\n\t    x = this.a * ksp * cosphi * Math.sin(dlon);\n\t    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);\n\t  }\n\t  p.x = x;\n\t  p.y = y;\n\t  return p;\n\t}\n\n\tfunction inverse$25(p) {\n\t  var rh; /* height above ellipsoid      */\n\t  var z; /* angle          */\n\t  var sinz, cosz; /* sin of z and cos of z      */\n\t  var con;\n\t  var lon, lat;\n\t  /* Inverse equations\n\t      -----------------*/\n\t  p.x -= this.x0;\n\t  p.y -= this.y0;\n\t  rh = Math.sqrt(p.x * p.x + p.y * p.y);\n\t  z = asinz(rh / this.a);\n\n\t  sinz = Math.sin(z);\n\t  cosz = Math.cos(z);\n\n\t  lon = this.long0;\n\t  if (Math.abs(rh) <= EPSLN) {\n\t    lat = this.lat0;\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);\n\t  con = Math.abs(this.lat0) - HALF_PI;\n\t  if (Math.abs(con) <= EPSLN) {\n\t    if (this.lat0 >= 0) {\n\t      lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));\n\t    }\n\t    else {\n\t      lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));\n\t    }\n\t    p.x = lon;\n\t    p.y = lat;\n\t    return p;\n\t  }\n\t  lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));\n\t  p.x = lon;\n\t  p.y = lat;\n\t  return p;\n\t}\n\n\tvar names$27 = [\"ortho\"];\n\tvar ortho = {\n\t  init: init$26,\n\t  forward: forward$25,\n\t  inverse: inverse$25,\n\t  names: names$27\n\t};\n\n\t// QSC projection rewritten from the original PROJ4\n\t// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c\n\n\t/* constants */\n\tvar FACE_ENUM = {\n\t    FRONT: 1,\n\t    RIGHT: 2,\n\t    BACK: 3,\n\t    LEFT: 4,\n\t    TOP: 5,\n\t    BOTTOM: 6\n\t};\n\n\tvar AREA_ENUM = {\n\t    AREA_0: 1,\n\t    AREA_1: 2,\n\t    AREA_2: 3,\n\t    AREA_3: 4\n\t};\n\n\tfunction init$27() {\n\n\t  this.x0 = this.x0 || 0;\n\t  this.y0 = this.y0 || 0;\n\t  this.lat0 = this.lat0 || 0;\n\t  this.long0 = this.long0 || 0;\n\t  this.lat_ts = this.lat_ts || 0;\n\t  this.title = this.title || \"Quadrilateralized Spherical Cube\";\n\n\t  /* Determine the cube face from the center of projection. */\n\t  if (this.lat0 >= HALF_PI - FORTPI / 2.0) {\n\t    this.face = FACE_ENUM.TOP;\n\t  } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {\n\t    this.face = FACE_ENUM.BOTTOM;\n\t  } else if (Math.abs(this.long0) <= FORTPI) {\n\t    this.face = FACE_ENUM.FRONT;\n\t  } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {\n\t    this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;\n\t  } else {\n\t    this.face = FACE_ENUM.BACK;\n\t  }\n\n\t  /* Fill in useful values for the ellipsoid <-> sphere shift\n\t   * described in [LK12]. */\n\t  if (this.es !== 0) {\n\t    this.one_minus_f = 1 - (this.a - this.b) / this.a;\n\t    this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;\n\t  }\n\t}\n\n\t// QSC forward equations--mapping lat,long to x,y\n\t// -----------------------------------------------------------------\n\tfunction forward$26(p) {\n\t  var xy = {x: 0, y: 0};\n\t  var lat, lon;\n\t  var theta, phi;\n\t  var t, mu;\n\t  /* nu; */\n\t  var area = {value: 0};\n\n\t  // move lon according to projection's lon\n\t  p.x -= this.long0;\n\n\t  /* Convert the geodetic latitude to a geocentric latitude.\n\t   * This corresponds to the shift from the ellipsoid to the sphere\n\t   * described in [LK12]. */\n\t  if (this.es !== 0) {//if (P->es != 0) {\n\t    lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));\n\t  } else {\n\t    lat = p.y;\n\t  }\n\n\t  /* Convert the input lat, lon into theta, phi as used by QSC.\n\t   * This depends on the cube face and the area on it.\n\t   * For the top and bottom face, we can compute theta and phi\n\t   * directly from phi, lam. For the other faces, we must use\n\t   * unit sphere cartesian coordinates as an intermediate step. */\n\t  lon = p.x; //lon = lp.lam;\n\t  if (this.face === FACE_ENUM.TOP) {\n\t    phi = HALF_PI - lat;\n\t    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n\t      area.value = AREA_ENUM.AREA_0;\n\t      theta = lon - HALF_PI;\n\t    } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {\n\t      area.value = AREA_ENUM.AREA_1;\n\t      theta = (lon > 0.0 ? lon - SPI : lon + SPI);\n\t    } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {\n\t      area.value = AREA_ENUM.AREA_2;\n\t      theta = lon + HALF_PI;\n\t    } else {\n\t      area.value = AREA_ENUM.AREA_3;\n\t      theta = lon;\n\t    }\n\t  } else if (this.face === FACE_ENUM.BOTTOM) {\n\t    phi = HALF_PI + lat;\n\t    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {\n\t      area.value = AREA_ENUM.AREA_0;\n\t      theta = -lon + HALF_PI;\n\t    } else if (lon < FORTPI && lon >= -FORTPI) {\n\t      area.value = AREA_ENUM.AREA_1;\n\t      theta = -lon;\n\t    } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {\n\t      area.value = AREA_ENUM.AREA_2;\n\t      theta = -lon - HALF_PI;\n\t    } else {\n\t      area.value = AREA_ENUM.AREA_3;\n\t      theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);\n\t    }\n\t  } else {\n\t    var q, r, s;\n\t    var sinlat, coslat;\n\t    var sinlon, coslon;\n\n\t    if (this.face === FACE_ENUM.RIGHT) {\n\t      lon = qsc_shift_lon_origin(lon, +HALF_PI);\n\t    } else if (this.face === FACE_ENUM.BACK) {\n\t      lon = qsc_shift_lon_origin(lon, +SPI);\n\t    } else if (this.face === FACE_ENUM.LEFT) {\n\t      lon = qsc_shift_lon_origin(lon, -HALF_PI);\n\t    }\n\t    sinlat = Math.sin(lat);\n\t    coslat = Math.cos(lat);\n\t    sinlon = Math.sin(lon);\n\t    coslon = Math.cos(lon);\n\t    q = coslat * coslon;\n\t    r = coslat * sinlon;\n\t    s = sinlat;\n\n\t    if (this.face === FACE_ENUM.FRONT) {\n\t      phi = Math.acos(q);\n\t      theta = qsc_fwd_equat_face_theta(phi, s, r, area);\n\t    } else if (this.face === FACE_ENUM.RIGHT) {\n\t      phi = Math.acos(r);\n\t      theta = qsc_fwd_equat_face_theta(phi, s, -q, area);\n\t    } else if (this.face === FACE_ENUM.BACK) {\n\t      phi = Math.acos(-q);\n\t      theta = qsc_fwd_equat_face_theta(phi, s, -r, area);\n\t    } else if (this.face === FACE_ENUM.LEFT) {\n\t      phi = Math.acos(-r);\n\t      theta = qsc_fwd_equat_face_theta(phi, s, q, area);\n\t    } else {\n\t      /* Impossible */\n\t      phi = theta = 0;\n\t      area.value = AREA_ENUM.AREA_0;\n\t    }\n\t  }\n\n\t  /* Compute mu and nu for the area of definition.\n\t   * For mu, see Eq. (3-21) in [OL76], but note the typos:\n\t   * compare with Eq. (3-14). For nu, see Eq. (3-38). */\n\t  mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));\n\t  t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));\n\n\t  /* Apply the result to the real area. */\n\t  if (area.value === AREA_ENUM.AREA_1) {\n\t    mu += HALF_PI;\n\t  } else if (area.value === AREA_ENUM.AREA_2) {\n\t    mu += SPI;\n\t  } else if (area.value === AREA_ENUM.AREA_3) {\n\t    mu += 1.5 * SPI;\n\t  }\n\n\t  /* Now compute x, y from mu and nu */\n\t  xy.x = t * Math.cos(mu);\n\t  xy.y = t * Math.sin(mu);\n\t  xy.x = xy.x * this.a + this.x0;\n\t  xy.y = xy.y * this.a + this.y0;\n\n\t  p.x = xy.x;\n\t  p.y = xy.y;\n\t  return p;\n\t}\n\n\t// QSC inverse equations--mapping x,y to lat/long\n\t// -----------------------------------------------------------------\n\tfunction inverse$26(p) {\n\t  var lp = {lam: 0, phi: 0};\n\t  var mu, nu, cosmu, tannu;\n\t  var tantheta, theta, cosphi, phi;\n\t  var t;\n\t  var area = {value: 0};\n\n\t  /* de-offset */\n\t  p.x = (p.x - this.x0) / this.a;\n\t  p.y = (p.y - this.y0) / this.a;\n\n\t  /* Convert the input x, y to the mu and nu angles as used by QSC.\n\t   * This depends on the area of the cube face. */\n\t  nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));\n\t  mu = Math.atan2(p.y, p.x);\n\t  if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {\n\t    area.value = AREA_ENUM.AREA_0;\n\t  } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {\n\t    area.value = AREA_ENUM.AREA_1;\n\t    mu -= HALF_PI;\n\t  } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {\n\t    area.value = AREA_ENUM.AREA_2;\n\t    mu = (mu < 0.0 ? mu + SPI : mu - SPI);\n\t  } else {\n\t    area.value = AREA_ENUM.AREA_3;\n\t    mu += HALF_PI;\n\t  }\n\n\t  /* Compute phi and theta for the area of definition.\n\t   * The inverse projection is not described in the original paper, but some\n\t   * good hints can be found here (as of 2011-12-14):\n\t   * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302\n\t   * (search for \"Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>\") */\n\t  t = (SPI / 12) * Math.tan(mu);\n\t  tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));\n\t  theta = Math.atan(tantheta);\n\t  cosmu = Math.cos(mu);\n\t  tannu = Math.tan(nu);\n\t  cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));\n\t  if (cosphi < -1) {\n\t    cosphi = -1;\n\t  } else if (cosphi > +1) {\n\t    cosphi = +1;\n\t  }\n\n\t  /* Apply the result to the real area on the cube face.\n\t   * For the top and bottom face, we can compute phi and lam directly.\n\t   * For the other faces, we must use unit sphere cartesian coordinates\n\t   * as an intermediate step. */\n\t  if (this.face === FACE_ENUM.TOP) {\n\t    phi = Math.acos(cosphi);\n\t    lp.phi = HALF_PI - phi;\n\t    if (area.value === AREA_ENUM.AREA_0) {\n\t      lp.lam = theta + HALF_PI;\n\t    } else if (area.value === AREA_ENUM.AREA_1) {\n\t      lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);\n\t    } else if (area.value === AREA_ENUM.AREA_2) {\n\t      lp.lam = theta - HALF_PI;\n\t    } else /* area.value == AREA_ENUM.AREA_3 */ {\n\t      lp.lam = theta;\n\t    }\n\t  } else if (this.face === FACE_ENUM.BOTTOM) {\n\t    phi = Math.acos(cosphi);\n\t    lp.phi = phi - HALF_PI;\n\t    if (area.value === AREA_ENUM.AREA_0) {\n\t      lp.lam = -theta + HALF_PI;\n\t    } else if (area.value === AREA_ENUM.AREA_1) {\n\t      lp.lam = -theta;\n\t    } else if (area.value === AREA_ENUM.AREA_2) {\n\t      lp.lam = -theta - HALF_PI;\n\t    } else /* area.value == AREA_ENUM.AREA_3 */ {\n\t      lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);\n\t    }\n\t  } else {\n\t    /* Compute phi and lam via cartesian unit sphere coordinates. */\n\t    var q, r, s;\n\t    q = cosphi;\n\t    t = q * q;\n\t    if (t >= 1) {\n\t      s = 0;\n\t    } else {\n\t      s = Math.sqrt(1 - t) * Math.sin(theta);\n\t    }\n\t    t += s * s;\n\t    if (t >= 1) {\n\t      r = 0;\n\t    } else {\n\t      r = Math.sqrt(1 - t);\n\t    }\n\t    /* Rotate q,r,s into the correct area. */\n\t    if (area.value === AREA_ENUM.AREA_1) {\n\t      t = r;\n\t      r = -s;\n\t      s = t;\n\t    } else if (area.value === AREA_ENUM.AREA_2) {\n\t      r = -r;\n\t      s = -s;\n\t    } else if (area.value === AREA_ENUM.AREA_3) {\n\t      t = r;\n\t      r = s;\n\t      s = -t;\n\t    }\n\t    /* Rotate q,r,s into the correct cube face. */\n\t    if (this.face === FACE_ENUM.RIGHT) {\n\t      t = q;\n\t      q = -r;\n\t      r = t;\n\t    } else if (this.face === FACE_ENUM.BACK) {\n\t      q = -q;\n\t      r = -r;\n\t    } else if (this.face === FACE_ENUM.LEFT) {\n\t      t = q;\n\t      q = r;\n\t      r = -t;\n\t    }\n\t    /* Now compute phi and lam from the unit sphere coordinates. */\n\t    lp.phi = Math.acos(-s) - HALF_PI;\n\t    lp.lam = Math.atan2(r, q);\n\t    if (this.face === FACE_ENUM.RIGHT) {\n\t      lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);\n\t    } else if (this.face === FACE_ENUM.BACK) {\n\t      lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);\n\t    } else if (this.face === FACE_ENUM.LEFT) {\n\t      lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);\n\t    }\n\t  }\n\n\t  /* Apply the shift from the sphere to the ellipsoid as described\n\t   * in [LK12]. */\n\t  if (this.es !== 0) {\n\t    var invert_sign;\n\t    var tanphi, xa;\n\t    invert_sign = (lp.phi < 0 ? 1 : 0);\n\t    tanphi = Math.tan(lp.phi);\n\t    xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);\n\t    lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));\n\t    if (invert_sign) {\n\t      lp.phi = -lp.phi;\n\t    }\n\t  }\n\n\t  lp.lam += this.long0;\n\t  p.x = lp.lam;\n\t  p.y = lp.phi;\n\t  return p;\n\t}\n\n\t/* Helper function for forward projection: compute the theta angle\n\t * and determine the area number. */\n\tfunction qsc_fwd_equat_face_theta(phi, y, x, area) {\n\t  var theta;\n\t  if (phi < EPSLN) {\n\t    area.value = AREA_ENUM.AREA_0;\n\t    theta = 0.0;\n\t  } else {\n\t    theta = Math.atan2(y, x);\n\t    if (Math.abs(theta) <= FORTPI) {\n\t      area.value = AREA_ENUM.AREA_0;\n\t    } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {\n\t      area.value = AREA_ENUM.AREA_1;\n\t      theta -= HALF_PI;\n\t    } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {\n\t      area.value = AREA_ENUM.AREA_2;\n\t      theta = (theta >= 0.0 ? theta - SPI : theta + SPI);\n\t    } else {\n\t      area.value = AREA_ENUM.AREA_3;\n\t      theta += HALF_PI;\n\t    }\n\t  }\n\t  return theta;\n\t}\n\n\t/* Helper function: shift the longitude. */\n\tfunction qsc_shift_lon_origin(lon, offset) {\n\t  var slon = lon + offset;\n\t  if (slon < -SPI) {\n\t    slon += TWO_PI;\n\t  } else if (slon > +SPI) {\n\t    slon -= TWO_PI;\n\t  }\n\t  return slon;\n\t}\n\n\tvar names$28 = [\"Quadrilateralized Spherical Cube\", \"Quadrilateralized_Spherical_Cube\", \"qsc\"];\n\tvar qsc = {\n\t  init: init$27,\n\t  forward: forward$26,\n\t  inverse: inverse$26,\n\t  names: names$28\n\t};\n\n\t// Robinson projection\n\t// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c\n\t// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039\n\n\tvar COEFS_X = [\n\t    [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],\n\t    [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],\n\t    [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],\n\t    [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],\n\t    [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],\n\t    [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],\n\t    [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],\n\t    [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],\n\t    [0.9216, -0.00467746, -0.00010457, 4.81243e-06],\n\t    [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],\n\t    [0.8679, -0.00609363, -0.000113898, 3.32484e-06],\n\t    [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],\n\t    [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],\n\t    [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],\n\t    [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],\n\t    [0.6732, -0.00986209, -0.000199569, 1.91974e-05],\n\t    [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],\n\t    [0.5722, -0.00906601, 0.000182, 6.24051e-06],\n\t    [0.5322, -0.00677797, 0.000275608, 6.24051e-06]\n\t];\n\n\tvar COEFS_Y = [\n\t    [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],\n\t    [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],\n\t    [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],\n\t    [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],\n\t    [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],\n\t    [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],\n\t    [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],\n\t    [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],\n\t    [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],\n\t    [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],\n\t    [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],\n\t    [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],\n\t    [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],\n\t    [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],\n\t    [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],\n\t    [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],\n\t    [0.9394, 0.00840947, -0.000192841, -4.2106e-06],\n\t    [0.9761, 0.00616527, -0.000256, -4.2106e-06],\n\t    [1.0000, 0.00328947, -0.000319159, -4.2106e-06]\n\t];\n\n\tvar FXC = 0.8487;\n\tvar FYC = 1.3523;\n\tvar C1 = R2D/5; // rad to 5-degree interval\n\tvar RC1 = 1/C1;\n\tvar NODES = 18;\n\n\tvar poly3_val = function(coefs, x) {\n\t    return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));\n\t};\n\n\tvar poly3_der = function(coefs, x) {\n\t    return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);\n\t};\n\n\tfunction newton_rapshon(f_df, start, max_err, iters) {\n\t    var x = start;\n\t    for (; iters; --iters) {\n\t        var upd = f_df(x);\n\t        x -= upd;\n\t        if (Math.abs(upd) < max_err) {\n\t            break;\n\t        }\n\t    }\n\t    return x;\n\t}\n\n\tfunction init$28() {\n\t    this.x0 = this.x0 || 0;\n\t    this.y0 = this.y0 || 0;\n\t    this.long0 = this.long0 || 0;\n\t    this.es = 0;\n\t    this.title = this.title || \"Robinson\";\n\t}\n\n\tfunction forward$27(ll) {\n\t    var lon = adjust_lon(ll.x - this.long0);\n\n\t    var dphi = Math.abs(ll.y);\n\t    var i = Math.floor(dphi * C1);\n\t    if (i < 0) {\n\t        i = 0;\n\t    } else if (i >= NODES) {\n\t        i = NODES - 1;\n\t    }\n\t    dphi = R2D * (dphi - RC1 * i);\n\t    var xy = {\n\t        x: poly3_val(COEFS_X[i], dphi) * lon,\n\t        y: poly3_val(COEFS_Y[i], dphi)\n\t    };\n\t    if (ll.y < 0) {\n\t        xy.y = -xy.y;\n\t    }\n\n\t    xy.x = xy.x * this.a * FXC + this.x0;\n\t    xy.y = xy.y * this.a * FYC + this.y0;\n\t    return xy;\n\t}\n\n\tfunction inverse$27(xy) {\n\t    var ll = {\n\t        x: (xy.x - this.x0) / (this.a * FXC),\n\t        y: Math.abs(xy.y - this.y0) / (this.a * FYC)\n\t    };\n\n\t    if (ll.y >= 1) { // pathologic case\n\t        ll.x /= COEFS_X[NODES][0];\n\t        ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;\n\t    } else {\n\t        // find table interval\n\t        var i = Math.floor(ll.y * NODES);\n\t        if (i < 0) {\n\t            i = 0;\n\t        } else if (i >= NODES) {\n\t            i = NODES - 1;\n\t        }\n\t        for (;;) {\n\t            if (COEFS_Y[i][0] > ll.y) {\n\t                --i;\n\t            } else if (COEFS_Y[i+1][0] <= ll.y) {\n\t                ++i;\n\t            } else {\n\t                break;\n\t            }\n\t        }\n\t        // linear interpolation in 5 degree interval\n\t        var coefs = COEFS_Y[i];\n\t        var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);\n\t        // find t so that poly3_val(coefs, t) = ll.y\n\t        t = newton_rapshon(function(x) {\n\t            return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);\n\t        }, t, EPSLN, 100);\n\n\t        ll.x /= poly3_val(COEFS_X[i], t);\n\t        ll.y = (5 * i + t) * D2R;\n\t        if (xy.y < 0) {\n\t            ll.y = -ll.y;\n\t        }\n\t    }\n\n\t    ll.x = adjust_lon(ll.x + this.long0);\n\t    return ll;\n\t}\n\n\tvar names$29 = [\"Robinson\", \"robin\"];\n\tvar robin = {\n\t  init: init$28,\n\t  forward: forward$27,\n\t  inverse: inverse$27,\n\t  names: names$29\n\t};\n\n\tvar includedProjections = function(proj4){\n\t  proj4.Proj.projections.add(tmerc);\n\t  proj4.Proj.projections.add(etmerc);\n\t  proj4.Proj.projections.add(utm);\n\t  proj4.Proj.projections.add(sterea);\n\t  proj4.Proj.projections.add(stere);\n\t  proj4.Proj.projections.add(somerc);\n\t  proj4.Proj.projections.add(omerc);\n\t  proj4.Proj.projections.add(lcc);\n\t  proj4.Proj.projections.add(krovak);\n\t  proj4.Proj.projections.add(cass);\n\t  proj4.Proj.projections.add(laea);\n\t  proj4.Proj.projections.add(aea);\n\t  proj4.Proj.projections.add(gnom);\n\t  proj4.Proj.projections.add(cea);\n\t  proj4.Proj.projections.add(eqc);\n\t  proj4.Proj.projections.add(poly);\n\t  proj4.Proj.projections.add(nzmg);\n\t  proj4.Proj.projections.add(mill);\n\t  proj4.Proj.projections.add(sinu);\n\t  proj4.Proj.projections.add(moll);\n\t  proj4.Proj.projections.add(eqdc);\n\t  proj4.Proj.projections.add(vandg);\n\t  proj4.Proj.projections.add(aeqd);\n\t  proj4.Proj.projections.add(ortho);\n\t  proj4.Proj.projections.add(qsc);\n\t  proj4.Proj.projections.add(robin);\n\t};\n\n\tproj4$1.defaultDatum = 'WGS84'; //default datum\n\tproj4$1.Proj = Projection;\n\tproj4$1.WGS84 = new proj4$1.Proj('WGS84');\n\tproj4$1.Point = Point;\n\tproj4$1.toPoint = toPoint;\n\tproj4$1.defs = defs;\n\tproj4$1.transform = transform;\n\tproj4$1.mgrs = mgrs;\n\tproj4$1.version = version;\n\tincludedProjections(proj4$1);\n\n\treturn proj4$1;\n\n})));\n\n},{}],317:[function(require,module,exports){\n'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16\n  for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n  var al = this._a | 0\n  var bl = this._b | 0\n  var cl = this._c | 0\n  var dl = this._d | 0\n  var el = this._e | 0\n\n  var ar = this._a | 0\n  var br = this._b | 0\n  var cr = this._c | 0\n  var dr = this._d | 0\n  var er = this._e | 0\n\n  // computation\n  for (var i = 0; i < 80; i += 1) {\n    var tl\n    var tr\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n    } else { // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n    }\n\n    al = el\n    el = dl\n    dl = rotl(cl, 10)\n    cl = bl\n    bl = tl\n\n    ar = er\n    er = dr\n    dr = rotl(cr, 10)\n    cr = br\n    br = tr\n  }\n\n  // update state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n\n},{\"buffer\":182,\"hash-base\":227,\"inherits\":262}],318:[function(require,module,exports){\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":182}],319:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = Buffer.from(data, enc)\n  }\n\n  var block = this._block\n  var blockSize = this._blockSize\n  var length = data.length\n  var accum = this._len\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize\n    var remainder = Math.min(length - offset, blockSize - assigned)\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i]\n    }\n\n    accum += remainder\n    offset += remainder\n\n    if ((accum % blockSize) === 0) {\n      this._update(block)\n    }\n  }\n\n  this._len += length\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize\n\n  this._block[rem] = 0x80\n\n  // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n  this._block.fill(0, rem + 1)\n\n  if (rem >= this._finalSize) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  var bits = this._len * 8\n\n  // uint32\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n  // uint64\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0\n    var highBits = (bits - lowBits) / 0x100000000\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8)\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n  }\n\n  this._update(this._block)\n  var hash = this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n\n},{\"safe-buffer\":318}],320:[function(require,module,exports){\nvar exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n\n},{\"./sha\":321,\"./sha1\":322,\"./sha224\":323,\"./sha256\":324,\"./sha384\":325,\"./sha512\":326}],321:[function(require,module,exports){\n/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n\n},{\"./hash\":319,\"inherits\":262,\"safe-buffer\":318}],322:[function(require,module,exports){\n/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n\n},{\"./hash\":319,\"inherits\":262,\"safe-buffer\":318}],323:[function(require,module,exports){\n/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n\n},{\"./hash\":319,\"./sha256\":324,\"inherits\":262,\"safe-buffer\":318}],324:[function(require,module,exports){\n/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n\n},{\"./hash\":319,\"inherits\":262,\"safe-buffer\":318}],325:[function(require,module,exports){\nvar inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n\n},{\"./hash\":319,\"./sha512\":326,\"inherits\":262,\"safe-buffer\":318}],326:[function(require,module,exports){\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n\n},{\"./hash\":319,\"inherits\":262,\"safe-buffer\":318}],327:[function(require,module,exports){\n(function (process,Buffer,__dirname){\n\n// We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n// https://github.com/kripken/emscripten/issues/5820\n// In addition, When you use emcc's modularization, it still expects to export a global object called `Module`,\n// which is able to be used/called before the WASM is loaded.\n// The modularization below exports a promise that loads and resolves to the actual sql.js module.\n// That way, this module can't be used before the WASM is finished loading.\n\n// We are going to define a function that a user will call to start loading initializing our Sql.js library\n// However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module\n// Instead, we want to return the previously loaded module\n\n// TODO: Make this not declare a global if used in the browser\nvar initSqlJsPromise = undefined;\n\nvar initSqlJs = function (moduleConfig) {\n\n    if (initSqlJsPromise){\n      return initSqlJsPromise;\n    }\n    // If we're here, we've never called this function before\n    initSqlJsPromise = new Promise((resolveModule, reject) => {\n\n        // We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n        // https://github.com/kripken/emscripten/issues/5820\n\n        // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add\n        // properties to it, like `preRun`, `postRun`, etc\n        // We are using that to get notified when the WASM has finished loading.\n        // Only then will we return our promise\n\n        // If they passed in a moduleConfig object, use that\n        // Otherwise, initialize Module to the empty object\n        var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {};\n\n        // EMCC only allows for a single onAbort function (not an array of functions)\n        // So if the user defined their own onAbort function, we remember it and call it\n        var originalOnAbortFunction = Module['onAbort'];\n        Module['onAbort'] = function (errorThatCausedAbort) {\n            reject(new Error(errorThatCausedAbort));\n            if (originalOnAbortFunction){\n              originalOnAbortFunction(errorThatCausedAbort);\n            }\n        };\n\n        Module['postRun'] = Module['postRun'] || [];\n        Module['postRun'].push(function () {\n            // When Emscripted calls postRun, this promise resolves with the built Module\n            resolveModule(Module);\n        });\n\n        // There is a section of code in the emcc-generated code below that looks like this:\n        // (Note that this is lowercase `module`)\n        // if (typeof module !== 'undefined') {\n        //     module['exports'] = Module;\n        // }\n        // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js!\n        // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags,\n        // but that carries with it additional unnecessary baggage/bugs we don't want either.\n        // So, we have three options:\n        // 1) We undefine `module`\n        // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later\n        // 3) We write a script to remove those lines of code as part of the Make process.\n        //\n        // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward\n        // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future.\n        // That's a nice side effect since we're handling the modularization efforts ourselves\n        module = undefined;\n        \n        // The emcc-generated code and shell-post.js code goes below,\n        // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort\nvar aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {});\nvar wa=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.ga=a;this.db=b;this.oa=1;this.Ha=[]}a.prototype.bind=function(a){if(!this.ga)throw\"Statement closed\";this.reset();return Array.isArray(a)?this.pb(a):this.qb(a)};a.prototype.step=function(){var a;if(!this.ga)throw\"Statement closed\";this.oa=1;switch(a=fc(this.ga)){case c.lb:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.wb=function(a){null==a&&(a=this.oa++);return hc(this.ga,a)};a.prototype.xb=\nfunction(a){null==a&&(a=this.oa++);return ic(this.ga,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.oa++);var c=jc(this.ga,a);var d=kc(this.ga,a);var e=new Uint8Array(c);for(a=b=0;0<=c?b<c:b>c;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=pb(this.ga);0<=d?b<d:b>d;a=0<=d?++b:--b)switch(lc(this.ga,a)){case c.kb:case c.FLOAT:e.push(this.wb(a));break;case c.mb:e.push(this.xb(a));break;case c.cb:e.push(this.getBlob(a));\nbreak;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=pb(this.ga);0<=b?a<b:a>b;d=0<=b?++a:--a)c.push(mc(this.ga,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b<c;a=++b){var Oa=e[a];g[Oa]=d[a]}return g};a.prototype.run=function(a){null!=a&&this.bind(a);this.step();return this.reset()};a.prototype.tb=function(a,b){var c;null==b&&(b=this.oa++);a=ba(a);this.Ha.push(c=\nca(a));this.db.handleError(da(this.ga,b,c,a.length-1,0))};a.prototype.ob=function(a,b){var c;null==b&&(b=this.oa++);this.Ha.push(c=ca(a));this.db.handleError(Pa(this.ga,b,c,a.length,0))};a.prototype.sb=function(a,b){null==b&&(b=this.oa++);this.db.handleError((a===(a|0)?nc:oc)(this.ga,b,a))};a.prototype.rb=function(a){null==a&&(a=this.oa++);Pa(this.ga,a,0,0,0)};a.prototype.Ta=function(a,b){null==b&&(b=this.oa++);switch(typeof a){case \"string\":this.tb(a,b);break;case \"number\":case \"boolean\":this.sb(a+\n0,b);break;case \"object\":if(null===a)this.rb(b);else if(null!=a.length)this.ob(a,b);else throw\"Wrong API use : tried to bind a value of an unknown type (\"+a+\").\";}};a.prototype.qb=function(a){var b;for(b in a){var c=a[b];var d=pc(this.ga,b);0!==d&&this.Ta(c,d)}return!0};a.prototype.pb=function(a){var b,c;var d=b=0;for(c=a.length;b<c;d=++b){var e=a[d];this.Ta(e,d+1)}return!0};a.prototype.reset=function(){this.freemem();return qc(this.ga)===c.Aa&&rc(this.ga)===c.Aa};a.prototype.freemem=function(){for(var a;a=\nthis.Ha.pop();)fa(a);return null};a.prototype.free=function(){this.freemem();var a=sc(this.ga)===c.Aa;delete this.db.Ea[this.ga];this.ga=ea;return a};return a}();var e=function(){function a(a){this.filename=\"dbfile_\"+(4294967295*Math.random()>>>0);if(null!=a){var c=this.filename,d=c?m(\"/\",c):\"/\";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if(\"string\"===typeof a){for(var e=Array(a.length),k=0,Oa=a.length;k<Oa;++k)e[k]=a.charCodeAt(k);a=e}ka(d,c|146);e=p(d,\"w\");la(e,a,0,a.length,0,void 0);\nma(e);ka(d,c)}}this.handleError(g(this.filename,b));this.db=q(b,\"i32\");tc(this.db);this.Ea={};this.qa={}}a.prototype.run=function(a,c){if(!this.db)throw\"Database closed\";c?(a=this.prepare(a,c),a.step(),a.free()):this.handleError(n(this.db,a,0,0,b));return this};a.prototype.exec=function(a){if(!this.db)throw\"Database closed\";var c=na();var e=oa(a)+1;var g=h(e);r(a,l,g,e);a=g;e=h(4);for(g=[];q(a,\"i8\")!==ea;){pa(b);pa(e);this.handleError(ha(this.db,a,-1,b,e));var k=q(b,\"i32\");a=q(e,\"i32\");if(k!==ea){var n=\nnew d(k,this);for(k=null;n.step();)null===k&&(k={columns:n.getColumnNames(),values:[]},g.push(k)),k.values.push(n.get());n.free()}}qa(c);return g};a.prototype.each=function(a,b,c,d){\"function\"===typeof b&&(d=c,c=b,b=void 0);for(a=this.prepare(a,b);a.step();)c(a.getAsObject());a.free();if(\"function\"===typeof d)return d()};a.prototype.prepare=function(a,c){pa(b);this.handleError(A(this.db,a,-1,b,ea));a=q(b,\"i32\");if(a===ea)throw\"Nothing to prepare\";var e=new d(a,this);null!=c&&e.bind(c);return this.Ea[a]=\ne};a.prototype[\"export\"]=function(){var a;var c=this.Ea;for(e in c){var d=c[e];d.free()}d=this.qa;for(e in d)c=d[e],t[c-ra]=null;this.qa={};this.handleError(k(this.db));d=this.filename;var e=e={encoding:\"binary\"};e.flags=e.flags||\"r\";e.encoding=e.encoding||\"binary\";if(\"utf8\"!==e.encoding&&\"binary\"!==e.encoding)throw Error('Invalid encoding type \"'+e.encoding+'\"');c=p(d,e.flags);d=sa(d).size;var n=new Uint8Array(d);ta(c,n,0,d,0);\"utf8\"===e.encoding?a=u(n,0):\"binary\"===e.encoding&&(a=n);ma(c);this.handleError(g(this.filename,\nb));this.db=q(b,\"i32\");return a};a.prototype.close=function(){var a;var b=this.Ea;for(a in b){var c=b[a];c.free()}c=this.qa;for(a in c)b=c[a],t[b-ra]=null;this.qa={};this.handleError(k(this.db));ua(\"/\"+this.filename);return this.db=null};a.prototype.handleError=function(a){if(a===c.Aa)return null;a=uc(this.db);throw Error(a);};a.prototype.getRowsModified=function(){return v(this.db)};a.prototype.create_function=function(a,b){a in this.qa&&(t[this.qa[a]-ra]=null,delete this.qa[a]);var d=va(function(a,\nc,d){var e,g;var k=[];for(e=g=0;0<=c?g<c:g>c;e=0<=c?++g:--g){var n=q(d+4*e,\"i32\");var A=wc(n);e=function(){switch(!1){case 1!==A:return ub;case 2!==A:return ub;case 3!==A:return xc;case 4!==A:return function(a){var b,c;var d=zc(a);var e=Ac(a);a=new Uint8Array(d);for(b=c=0;0<=d?c<d:c>d;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(n);k.push(e)}try{var v=b.apply(null,k)}catch(yc){v=yc;vb(a,v,-1);return}switch(typeof v){case \"boolean\":Bc(a,v?1:0);break;case \"number\":Cc(a,\nv);break;case \"string\":Dc(a,v,-1,-1);break;case \"object\":null===v?wb(a):null!=v.length?(c=ca(v),Ec(a,c,v.length,-1),fa(c)):vb(a,\"Wrong API use : tried to return a value of an unknown type (\"+v+\").\",-1);break;default:wb(a)}});this.qa[a]=d;this.handleError(Fc(this.db,a,b.length,c.nb,0,d,0,0,0));return this};return a}();var g=f.cwrap(\"sqlite3_open\",\"number\",[\"string\",\"number\"]);var k=f.cwrap(\"sqlite3_close_v2\",\"number\",[\"number\"]);var n=f.cwrap(\"sqlite3_exec\",\"number\",[\"number\",\"string\",\"number\",\"number\",\n\"number\"]);f.cwrap(\"sqlite3_free\",\"\",[\"number\"]);var v=f.cwrap(\"sqlite3_changes\",\"number\",[\"number\"]);var A=f.cwrap(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"string\",\"number\",\"number\",\"number\"]);var ha=f.cwrap(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var da=f.cwrap(\"sqlite3_bind_text\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var Pa=f.cwrap(\"sqlite3_bind_blob\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var oc=f.cwrap(\"sqlite3_bind_double\",\n\"number\",[\"number\",\"number\",\"number\"]);var nc=f.cwrap(\"sqlite3_bind_int\",\"number\",[\"number\",\"number\",\"number\"]);var pc=f.cwrap(\"sqlite3_bind_parameter_index\",\"number\",[\"number\",\"string\"]);var fc=f.cwrap(\"sqlite3_step\",\"number\",[\"number\"]);var uc=f.cwrap(\"sqlite3_errmsg\",\"string\",[\"number\"]);var pb=f.cwrap(\"sqlite3_data_count\",\"number\",[\"number\"]);var hc=f.cwrap(\"sqlite3_column_double\",\"number\",[\"number\",\"number\"]);var ic=f.cwrap(\"sqlite3_column_text\",\"string\",[\"number\",\"number\"]);var kc=f.cwrap(\"sqlite3_column_blob\",\n\"number\",[\"number\",\"number\"]);var jc=f.cwrap(\"sqlite3_column_bytes\",\"number\",[\"number\",\"number\"]);var lc=f.cwrap(\"sqlite3_column_type\",\"number\",[\"number\",\"number\"]);var mc=f.cwrap(\"sqlite3_column_name\",\"string\",[\"number\",\"number\"]);var rc=f.cwrap(\"sqlite3_reset\",\"number\",[\"number\"]);var qc=f.cwrap(\"sqlite3_clear_bindings\",\"number\",[\"number\"]);var sc=f.cwrap(\"sqlite3_finalize\",\"number\",[\"number\"]);var Fc=f.cwrap(\"sqlite3_create_function_v2\",\"number\",\"number string number number number number number number number\".split(\" \"));\nvar wc=f.cwrap(\"sqlite3_value_type\",\"number\",[\"number\"]);var zc=f.cwrap(\"sqlite3_value_bytes\",\"number\",[\"number\"]);var xc=f.cwrap(\"sqlite3_value_text\",\"string\",[\"number\"]);f.cwrap(\"sqlite3_value_int\",\"number\",[\"number\"]);var Ac=f.cwrap(\"sqlite3_value_blob\",\"number\",[\"number\"]);var ub=f.cwrap(\"sqlite3_value_double\",\"number\",[\"number\"]);var Cc=f.cwrap(\"sqlite3_result_double\",\"\",[\"number\",\"number\"]);var wb=f.cwrap(\"sqlite3_result_null\",\"\",[\"number\"]);var Dc=f.cwrap(\"sqlite3_result_text\",\"\",[\"number\",\n\"string\",\"number\",\"number\"]);var Ec=f.cwrap(\"sqlite3_result_blob\",\"\",[\"number\",\"number\",\"number\",\"number\"]);var Bc=f.cwrap(\"sqlite3_result_int\",\"\",[\"number\",\"number\"]);f.cwrap(\"sqlite3_result_int64\",\"\",[\"number\",\"number\"]);var vb=f.cwrap(\"sqlite3_result_error\",\"\",[\"number\",\"string\",\"number\"]);var tc=f.cwrap(\"RegisterExtensionFunctions\",\"number\",[\"number\"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var ea=0;c.Aa=0;c.Dd=1;c.Wd=2;c.ge=3;c.Gb=4;c.Ib=5;c.Zd=6;c.NOMEM=7;c.je=8;c.Xd=9;c.Yd=\n10;c.Lb=11;c.NOTFOUND=12;c.Vd=13;c.Jb=14;c.he=15;c.EMPTY=16;c.ke=17;c.le=18;c.Kb=19;c.$d=20;c.be=21;c.ce=22;c.Hb=23;c.Ud=24;c.ie=25;c.de=26;c.ee=27;c.me=28;c.lb=100;c.DONE=101;c.kb=1;c.FLOAT=2;c.mb=3;c.cb=4;c.fe=5;c.nb=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(wa);var xa={},w;for(w in f)f.hasOwnProperty(w)&&(xa[w]=f[w]);f.arguments=[];f.thisProgram=\"./this.program\";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var ya=!1,x=!1,y=!1,za=!1;ya=\"object\"===typeof window;\nx=\"function\"===typeof importScripts;y=\"object\"===typeof process&&\"function\"===typeof require&&!ya&&!x;za=!ya&&!y&&!x;var z=\"\";\nif(y){z=__dirname+\"/\";var Aa,Ba;f.read=function(a,b){var c=B(a);c||(Aa||(Aa=require(\"fs\")),Ba||(Ba=require(\"path\")),a=Ba.normalize(a),c=Aa.readFileSync(a));return b?c:c.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1<process.argv.length&&(f.thisProgram=process.argv[1].replace(/\\\\/g,\"/\"));f.arguments=process.argv.slice(2);\"undefined\"!==typeof module&&(module.exports=f);process.on(\"unhandledRejection\",C);f.quit=function(a){process.exit(a)};\nf.inspect=function(){return\"[Emscripten Module object]\"}}else if(za)\"undefined\"!=typeof read&&(f.read=function(a){var b=B(a);return b?Ca(b):read(a)}),f.readBinary=function(a){var b;if(b=B(a))return b;if(\"function\"===typeof readbuffer)return new Uint8Array(readbuffer(a));b=read(a,\"binary\");assert(\"object\"===typeof b);return b},\"undefined\"!=typeof scriptArgs?f.arguments=scriptArgs:\"undefined\"!=typeof arguments&&(f.arguments=arguments),\"function\"===typeof quit&&(f.quit=function(a){quit(a)});else if(ya||\nx)x?z=self.location.href:document.currentScript&&(z=document.currentScript.src),z=0!==z.indexOf(\"blob:\")?z.substr(0,z.lastIndexOf(\"/\")+1):\"\",f.read=function(a){try{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.send(null);return b.responseText}catch(c){if(a=B(a))return Ca(a);throw c;}},x&&(f.readBinary=function(a){try{var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.responseType=\"arraybuffer\";b.send(null);return new Uint8Array(b.response)}catch(c){if(a=B(a))return a;throw c;}}),f.readAsync=function(a,\nb,c){var d=new XMLHttpRequest;d.open(\"GET\",a,!0);d.responseType=\"arraybuffer\";d.onload=function(){if(200==d.status||0==d.status&&d.response)b(d.response);else{var e=B(a);e?b(e.buffer):c()}};d.onerror=c;d.send(null)},f.setWindowTitle=function(a){document.title=a};var Da=f.print||(\"undefined\"!==typeof console?console.log.bind(console):\"undefined\"!==typeof print?print:null),Ea=f.printErr||(\"undefined\"!==typeof printErr?printErr:\"undefined\"!==typeof console&&console.warn.bind(console)||Da);\nfor(w in xa)xa.hasOwnProperty(w)&&(f[w]=xa[w]);xa=void 0;function Fa(a){var b=D[Ga>>2];a=b+a+15&-16;if(a<=Ha())D[Ga>>2]=a;else if(!Ia(a))return 0;return b}var ra=1,t=Array(64);function va(a){for(var b=0;64>b;b++)if(!t[b])return t[b]=a,ra+b;throw\"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.\";}var Ja=0;\nfunction q(a,b){b=b||\"i8\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":return l[a>>0];case \"i8\":return l[a>>0];case \"i16\":return Ka[a>>1];case \"i32\":return D[a>>2];case \"i64\":return D[a>>2];case \"float\":return La[a>>2];case \"double\":return Ma[a>>3];default:C(\"invalid type for getValue: \"+b)}return null}var Na=!1;function assert(a,b){a||C(\"Assertion failed: \"+b)}function Qa(a){var b=f[\"_\"+a];assert(b,\"Cannot call unknown function \"+a+\", make sure it is exported\");return b}\nfunction Ra(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,E,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Qa(a),k=[];a=0;if(d)for(var n=0;n<d.length;n++){var v=e[c[n]];v?(0===a&&(a=na()),k[n]=v(d[n])):k[n]=d[n]}c=g.apply(null,k);c=function(a){return\"string\"===b?F(a):\"boolean\"===b?!!a:a}(c);0!==a&&qa(a);return c}\nfunction pa(a){var b=\"i32\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":l[a>>0]=0;break;case \"i8\":l[a>>0]=0;break;case \"i16\":Ka[a>>1]=0;break;case \"i32\":D[a>>2]=0;break;case \"i64\":aa=[0,1<=+Sa(0)?~~+Ta(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case \"float\":La[a>>2]=0;break;case \"double\":Ma[a>>3]=0;break;default:C(\"invalid type for setValue: \"+b)}}var Ua=0,Va=3;\nfunction ca(a){var b=Ua;if(\"number\"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;var e;b==Va?e=g:e=[Wa,h,Fa][b](Math.max(d,1));if(c){var g=e;assert(0==(e&3));for(a=e+(d&-4);g<a;g+=4)D[g>>2]=0;for(a=e+d;g<a;)l[g++>>0]=0;return e}a.subarray||a.slice?E.set(a,e):E.set(new Uint8Array(a),e);return e}var Xa=\"undefined\"!==typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;\nfunction u(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.subarray&&Xa)return Xa.decode(a.subarray(b,c));for(d=\"\";b<c;){var e=a[b++];if(e&128){var g=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|g);else{var k=a[b++]&63;e=224==(e&240)?(e&15)<<12|g<<6|k:(e&7)<<18|g<<12|k<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function F(a){return a?u(E,a,void 0):\"\"}\nfunction r(a,b,c,d){if(!(0<d))return 0;var e=c;d=c+d-1;for(var g=0;g<a.length;++g){var k=a.charCodeAt(g);if(55296<=k&&57343>=k){var n=a.charCodeAt(++g);k=65536+((k&1023)<<10)|n&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e}\nfunction oa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}\"undefined\"!==typeof TextDecoder&&new TextDecoder(\"utf-16le\");function Ya(a){return a.replace(/__Z[\\w\\d_]+/g,function(a){return a===a?a:a+\" [\"+a+\"]\"})}function Za(a){0<a%16777216&&(a+=16777216-a%16777216);return a}var buffer,l,E,Ka,D,La,Ma;\nfunction $a(){f.HEAP8=l=new Int8Array(buffer);f.HEAP16=Ka=new Int16Array(buffer);f.HEAP32=D=new Int32Array(buffer);f.HEAPU8=E=new Uint8Array(buffer);f.HEAPU16=new Uint16Array(buffer);f.HEAPU32=new Uint32Array(buffer);f.HEAPF32=La=new Float32Array(buffer);f.HEAPF64=Ma=new Float64Array(buffer)}var Ga=60240,ab=f.TOTAL_MEMORY||16777216;5242880>ab&&Ea(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+ab+\"! (TOTAL_STACK=5242880)\");f.buffer?buffer=f.buffer:buffer=new ArrayBuffer(ab);$a();D[Ga>>2]=5303376;\nfunction bb(a){for(;0<a.length;){var b=a.shift();if(\"function\"==typeof b)b();else{var c=b.vb;\"number\"===typeof c?void 0===b.Ia?f.dynCall_v(c):f.dynCall_vi(c,b.Ia):c(void 0===b.Ia?null:b.Ia)}}}var cb=[],db=[],eb=[],fb=[],gb=!1;function hb(){var a=f.preRun.shift();cb.unshift(a)}var Sa=Math.abs,Ta=Math.ceil,G=0,ib=null,jb=null;f.preloadedImages={};f.preloadedAudios={};var H=null,kb=\"data:application/octet-stream;base64,\";db.push({vb:function(){lb()}});H=\"data:application/octet-stream;base64,AAAAAAAAAABkCgEQAABzAAQFAABnAAEDHgB6AAQGAABxAAQJAABRAAQKAAB3AAQOAABjAAAIAABvCAAAAAJ1CgAQAAB4EAAAEAFYEAAAAARmAAEBAABlAAECHgBFAAECDgBHAAEDDgBpCgEQAABuAAAEAAAlAAAHAABwEAANAAFUAAALAABTAAAMAAByCgEPAAAAAAAAAAAwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OWFiY2RlZgAAAAAAAAAAAAAAAAAAAAAAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6W1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AwAAADQAAAAAAgAAAAAAANF5AADYcwAAQQAAAEEAAABBAAAAQgAAAAAAAAAAAAAAAAAAAAAAAABCAAAAQQAAAEIAAABDAAAAQwAAAEQAAABEAAAARQAAAAMAAAA0AAAAAAIAAAAAAADWeQAA3HMAAEEAAABBAAAAQQAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAEEAAABCAAAAQwAAAEMAAABEAAAARAAAAEUAAAADAAAANAAAAAACAAAAAAAA4HkAAOBzAABBAAAAQQAAAEEAAABCAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABBAAAAQgAAAEMAAABDAAAARAAAAEQAAABFAAAAAwAAADQAAAAAAgAAAAAAAO15AADYcwAAQQAAAEEAAABBAAAAQgAAAAAAAAAAAAAAAAAAAAAAAABCAAAAQQAAAEIAAABDAAAAQwAAAEQAAABEAAAARQAAAAQFAwUBBQEFAgUCBQEFAQUEBQMFAQUBBQIFAgUBBQEFnwAAAGwAAAAfAAUBWgAAAVEBAABFAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAEAgABAAACAAAAAAAAAAAAMDAwMDAwMDAwMAAAAAAAAAAoKCgoKCgICAgICAgICAgICAgICAgICAgICgAAAAECAKioqKioqIiIiIiIiIiIiIiIiIiIiIiIiIiIAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAUkVJTkRFWEVERVNDQVBFQUNIRUNLRVlCRUZPUkVJR05PUkVHRVhQTEFJTlNURUFEREFUQUJBU0VMRUNUQUJMRUZUSEVOREVGRVJSQUJMRUxTRVhDTFVERUxFVEVNUE9SQVJZQ09OU1RSQUlOVEVSU0VDVElFU0FWRVBPSU5UT0ZGU0VUUkFOU0FDVElPTkFUVVJBTFRFUkFJU0VYQ0VQVFJJR0dFUkVGRVJFTkNFU1VOSVFVRVJZV0lUSE9VVEVSRUxFQVNFWENMVVNJVkVYSVNUU0FUVEFDSEFWSU5HTE9CRUdJTk5FUkFOR0VCRVRXRUVOT1RISU5HUk9VUFNDQVNDQURFVEFDSENBU0VDT0xMQVRFQ1JFQVRFQ1VSUkVOVF9EQVRFSU1NRURJQVRFSk9JTlNFUlRMSUtFTUFUQ0hQTEFOQUxZWkVQUkFHTUFCT1JUVVBEQVRFVkFMVUVTVklSVFVBTElNSVRXSEVOT1ROVUxMV0hFUkVDVVJTSVZFQUZURVJFTkFNRUFOREVGQVVMVEFVVE9JTkNSRU1FTlRDQVNUQ09MVU1OQ09NTUlUQ09ORkxJQ1RDUk9TU0NVUlJFTlRfVElNRVNUQU1QQVJUSVRJT05ERUZFUlJFRElTVElOQ1REUk9QUkVDRURJTkdGQUlMRklMVEVSRVBMQUNFRk9MTE9XSU5HRlJPTUZVTExJRklTTlVMTE9SREVSRVNUUklDVE9USEVSU09WRVJJR0hUUk9MTEJBQ0tST1dTVU5CT1VOREVEVU5JT05VU0lOR1ZBQ1VVTVZJRVdJTkRPV0JZSU5JVElBTExZUFJJTUFSWQAAAAAAAAAAAAAAAAAAAgACAAgACQAOABAAFAAXABkAGQAdACEAJAApAC4A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7gGmAHkBeQF7AkMDQwN7AuwC2wNeCF4IXgjAAS0ALQCTAeQB9gFqAA0C/AEQAhoC7gHuAe4B7gHuAe4B7gHuAe4BVADuAe4B7gHuAe4B7gHuAe4B7gHuAe4B7gELAQsBCwHuAe4B7gHuAQED7gHuAe4BBADdAe4B7gEUA+4B7gHuAe4B7gHuAe4B7gHXAgUAhwDZA9kD2QPZAwoChwCHAB0DRgFrA9oDyAMMBAwEDgTIA8gDDgTMAzkEXgSqBKoEqgQMBPUC9QKyAwkDSwROBDUFAgUCBWUFZQUCBREFNgWOBX4FKgWoBagFqAWoBQIFqwUqBSoFNgWOBX4FfgUqBQIFqwVBBZoFAgWrBcsFAgWrBQIFqwXLBXwFfAV8BawFywV8BX0FfAWsBXwFfAXLBY8FjwXLBX8FnQV/BZ0FfwWdBX8FnQUCBbYFtgWDBYoFAQYCBYgFgwWUBZcFKgUTBhgGJwYnBjAGMAYwBl4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IXgheCF4IPQDVAnYBOATGAAMDGwGoBJoEpgRTBMUEtgTKBMsE0ATRBNgE2gSlBGkE5QTYALoE3wTgBOEEawR/BPoEDQXEBL4ERQZIBjcGswVABvUFRgY+BkIG1gXUBekFTgbgBVQG5gVZBm8G6wXjBfsFOwZVBuoFRwZKBkwGTQYABhAGYgb9BYUGggZzBh4G8gVJBnIGSwZDBmcGCwYmBnsGgAaDBhkGIQaEBlYGhwaIBoEGiQZYBoYGigZeBn4GjQYXBpEGkgYNBpQGlQaTBpgGmgacBpsGnwaeBjEGogapBlEGoAarBjwGrQahBqYGqAavBnQGiwZ6BqwGjAZ4BrIGvgbDBsIGwQbFBroGxgatBskGygbOBs8GzQbRBtMG3wbVBtYG2AbZBtcG2wbdBnwGdQZ3BnkGfQbhBvEGAAcAAAAAAAC4ALgAAwEEAQUBAwEEAQUBsACxALIAswC0ALUAuADQANQA1QC6ABMAvADNAM4AGAHNAN0AFgDDABgAwwDQAB8AwwDNAB0AzQDOAP8AIQAnAMgAyQDKACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AM0A4wDkAOMA5AA7AOMA5AADAQQBBQH8AEEA8QDwALgA8ADfAOAA8AD0APUA+gADAQQBBQETAP0ANgA3ADgAOQA6ALgA/wC4AM0AzgBgAGEAYgBjAGQAZQBmAGcAaABpAGoALgAvADAAMQAuACgBKQFuABsBEwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAYABhAGIAYwBkAGUAZgBnAGgAaQBqAF4AKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAbgBqAEkA+wByAEkAsgCzALQAtQA7ALgAJAFRALoAJwG8ANoAbAATAHIAuAALAMMAuABTALgAVQA2ADcAOAA5AM0AzgB8AJEAkgCTAGAAYQBiAGMAZABlAGYAZwBoAGkAagB4AHkAegB4AGYAUQDjAOQA3AATABAAbQBuAG8AgwCEABoAuAC4APAA5QBgAGEAYgBjAGQAZQBmAGcAaABpAGoA/QArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQBkAGUAZgBnAGgAaQBqAIMAhABqAH8ARQCBAIIAGwFwAHEAcgBzAHQAdQB2AFEATQBMAE8AKAF8ACoBywC4ABMAVAA7AFYAeQB6AFkAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAIwDNAM4AFgBxACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AM0AzgCDAIQAZABlACMBJAFyAEMAJwFCAGwAbQBuAG8AigBxAHwASgA7ALMAuAC1ALgAeQAWAA8BugATALwAuAAUATsAGAC4APEAwwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAkQA7AJMAuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQB7AOMA5ABuACgBKQEWABcAuABmAGcAaABpAGoA8ABtAG4AbwBwAMMAzABzAHQAdQAWALgA4gD9ANQAzQDOAH0AbQBuAG8AFgBkAGUAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAOwDjAOQAeQB6ADsAFQEbARMAIQEiATsAFwBMAPAA8QCPAEwASAC9AM0AzgA7AFYA+gBUAFkAVgDLAF8AWQAZASsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5AOMA5AC4AG0AbgBvAAwAuABtAG4AbwC4ALgA8ABtAG4AbwC4AMMA1gA7ABsAuADNAM4AbQBuAG8AzQDOALgABwGKAM0AzgC4ACoAFgBgAGEAYgBjAGQAZQBmAGcAaABpAGoACgHjAOQAOwAOARQBXgBCAD8AEwDxABYAGgAXAPAA8QBIADsASQD6APEAbQBuAFIAFgA7AHIA3wDgAPoA/AA7AFsAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOwC4ABoAOwAMAW0AbgBvALgAkQCSAJMAcAA7AMsAcwB0AHUAFQFtAG4AbwDNAM4AwwB9ABUBbQBuAG8AZABlAIsAbQBuAG8A2wC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagBvAG0AbgBvAG0AbgBvAOMA5AATALgAiAC4ABcAbQBuAG8AyADJAMoA8AADAQQBBQHDAIgAkQC4AJMAuAC4AIgA1gArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDNAM4AzQDOAOMA5AC4AOUA4wDkAIMAhAC4ADsA2wC4ANsA8AAjASQBuADwACcBaQBqABYAFwDNAM4AGgC4APsAuADNAM4AuADNAM4AYABhAGIAYwBkAGUAZgBnAGgAaQBqAPsA2wDNAM4AzQDOALgAzQDOABMAuAAQALgAFwDxAG4A2wAVANsAuADxANsAHgEfAcMAuADDAM0AzgDJAMoAzQDOACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ALgAXwAWABcAuAAaABoA3ADjAOQA4wDkAMQAuAAXAPEAGgAaAMMA8QC4APAADADwAE0AGgBPAMMAUAAiAckAygDYALgA2gDDALgAGwBgAGEAYgBjAGQAZQBmAGcAaABpAGoADQHjAOQAKgC4AM0AzgC4ALgAEwDjAOQAwAAXAPAAdADEAEwA4wDkAHgAeQB6APAAPwD+AF8AVgDNAM4AWQDwALgAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAuAANAbgAmQCZAG8AuAAHAAgACQC4AIoAuAC4AMQAuAB4AHkAegC4AIoAzQDOALgAZgC4ALgAzQDOAJwAiADNAM4AzQDOAMYAxwCHAGAAYQBiAGMAZABlAGYAZwBoAGkAagC4AIAAuAC4ALgA/gCFALgA7QATAO8A5QDiABcAJAG4AOIAJwHiAOIAuADNAM4AzQDOAM0AzgC4ACQBEwC4ACcB/AArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDNAM4AuADNAM4AKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAnQCeABoAzQDOAP4AGgD8ALgADwC4ALgAuAAkAbgA/AAnARgAYABhAGIAYwBkAGUAZgBnAGgAaQBqAM0AzgDNAM4AzQDOAM0AzgC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagC4ALgAuAA7ALgAPAC4AOUAuADNAM4AuAACAbgAEwC4ABMAuAD2ALgAAgHNAM4AzQDOAM0AzgDNAM4AzQDOALgAzQDOAM0AzgDNAM4AzQDOAM0AzgAkAeIAlwAnAbgA5AAmAbgAdwC4AM0AzgBuAJYAJgGYALgA8AC4ABYAFwAXABMAuAAaAM0AzgCOAM0AzgDNAM4AuADGAMcAgwCEAM0AzgDNAM4AFgATABgAzQDOACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ALgAbQC4AG0AuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQAuAM0AzgDNAM4AzQDOAOgAuAC4ALgAXwC4ABwBHQH0APUA8gBgAGEAYgBjAGQAZQBmAGcAaABpAGoAzQDOAM0AzgDNAM4AuAAWALgAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAGAAXALgAuAAaALgAzQDOAM0AzgC4AB8AbACAABYAegC4ADUAhQAnAM0AzgAWAJcAzQDOAM0AzgBxAHIAFwDNAM4AGgA7ABcAFwCQABoAGgC4ABcAFwATABoAGgAHAAgAGAAXANYAFwAaAD0AGgA7ABcAFwAXABoAGgAaAJEAEwCTADsAuAArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQCRABcAkwBuABoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAFwC4ALgAGgBuALgAuAC4AIYAuAC4ALgAuAC4AG4AuAC4ALgAYABhAGIAYwBkAGUAZgBnAGgAaQBqALgAuAC4AIYALAG4APMAuAC4AGAAYQBiAGMAZABlAGYAZwBoAGkAagC4ALgAuAC4ALgA4AC4ABoBEQETABABywC2APMA8wDmANEAFgHzAOcA0AAJARYB6gDqAOoA2QDVADwAEwDzANAA7QDpACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQDQAPcAuwCGAPcA9wAmAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkA7QDnAL8AvwAXARcBGgGPAL8AbAAMARYAEwAUAAABFgArAAEBYABhAGIAYwBkAGUAZgBnAGgAaQBqACQA3gCOAOoAEgC/AOEAEgC+AGAAYQBiAGMAZABlAGYAZwBoAGkAagDhAL8A4QA7AOEAAQHqAOoAAAHeAN4AvgDqAJYAPgBHABMBEgG/ABMAFAC+ABYAFgDSAFEAvwC+ANIAvwBsAL4AzwDPAEAAzwAkANcAXgDSAM8A0QB3AM8AZABlAM8AagAwANcAzwBrANIAbQBuAG8ACwELAXIAOwDSAPkAiQBsAPgAvwD5APgAWAD5AI0ARwD4ACsBigCDAIQAFgC/APkAKwHtAFIA7gCWAAYBjABXAIsAkQCSAJMAlACVAF4A+ADuAOwAGQDrAGQAZQDqAMIAGgDBAA0AawAGAG0AbgBvAAgBuQByALkAtwDFALcAywC3AMsAywDFAMsA0wDTAAQAxQADAMsAFgCbAA8AIAHLAF0AIAEdARcAEADLAMsAFwCEAJEAkgCTAJQAlQAAAAEAAgCPAHsABQAYAIcAFAAQAAoACwAMAA0ADgCJAAEAEQCHAJAAEwAUAHsAFgA9AI8AJQB7ADUAbQAeADUAIAA1ADUAhgAiACQAAQAFACgAFgBsAJkAGgBEAEsARAApAIYAbAAYABQAfAATAHYAFwBDABYAQwA7ABYAFgAWABYAQwAcACUAFwCOAEYAFgBHABcAnQAXABcAGgBOABcAFgBRABcAUgAYABYAGACGAFcAFwATABQAXAAWAG0AXgAXABYAIgAiAIgAZABlABoAIgBVACIAJABrAFMAbQBuAG8AIgBaAHIAIgAXAEsASwAsABYAGAAaACIAFwB+ABoAFwAXADsAgwCEABcAFwAaABcAFgALABYAFgAWAEcAFwAXABYAkQCSAJMAlACVABoAFwBSAJoAhgCAAIYAVwCGAA8AAQAtAYYALQFeAC0BLQEtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwABAAIAcgAtAQUALQEtAS0BLQEKAAsADAANAA4ALQEtAREALQEtAS0BLQETABQALQEWAC0BLQEtAS0BHgAtASAALQGRAJIAkwCUAJUAJAAoAC0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtATsALQEtAS0BLQEtAS0BLQFGAC0BLQEtAUcALQEtAS0BTgAtAS0BUQATABQALQEWAC0BLQEtAS0BLQEtAVwALQEtAS0BLQFeAC0BJAAtAS0BLQFkAGUAZgAtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAtAS0BLQEtATsALQEtAS0BfgAtAS0BLQEtAYMAhAAtAUcALQEtAS0BLQEtAS0BLQETABQALQEWAC0BLQGRAJIAkwCUAJUALQGaAC0BLQFeAC0BJAAtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAFAC0BLQEtATsACgALAAwADQAOAC0BLQERAC0BLQEtAUcALQEtAS0BLQEtAS0BLQEtAR4ALQEgAC0BLQGRAJIAkwCUAJUAKAAtAS0BLQFeAC0BLQEtAS0BLQFkAGUALQEtAS0BLQEtAWsALQFtAG4AbwAtAS0BcgAtAS0BLQEtAS0BRgAtAS0BLQEtAS0BLQEtAU4ALQEtAVEALQEtAS0BLQEtAS0BLQEtAS0BLQFcAC0BLQGRAJIAkwCUAJUALQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAX4ALQEtAS0BLQGDAIQALQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BmgAtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEtAS0BLQEAAAAAAAAAAAAAAAAAABcCKwVwAG0A0QBwAG0A0QCIBAEAAQAcAgIAjAQXAgwFzAS3BCEBgAGGACoAKgCTBX4BzAQJANkE8gDsAQsFkwN1AXsBAgRGAEYAqwECBJQDEQIRAhECdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAfAEIAQgBCAEIAW4ECAEIAXAAbQDRAI0BxgEFAhQC6wEUAtEE0QQUAu8AzgDtAXAAbQDRANAB2wB2AHYAdgB2AG8AiQG4AbwBEAAQAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHLA8sD1gPZA+sAtwVfAW4EowGAAXQAdAB0AHQAcwBzAHIAcgByAHEAnwF0AHQAdAB0AHMAcwByAHIAcgBxAJ8BwQN3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgC4A58BrQMqAbcDrQPIBRwCAgCMBFsEFwKyBaAAIQEGAIYA4AWFAZYBzwNSAQAE2QRRAUEExAVBBHYAdgB2AHYAKgAqAEkBtwO3A7kDdAB0AHQAdABzAHMAcgByAHIAcQCfATcBrgErATcBcQOgAAgBCAGRAYABRAFbBFwEXQQgAQ4CYACfAKEFFAKNAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHbAHcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AHMAcwByAHIAcgBxAJ8BIAEOApMBFQJ5AGYDZgOjAfoACwFQAdsBSwHaAewAoAA/ATwEQgG5BUkBXgEMABcCgAH2AVsEPASzATgBPAR0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwJEAyoAKgCKAKoBdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYARgBGACABDgKcAZsB4AGxBU8BTwAGANkBdARbBFwEXQT1AXYETgFFAysDzAUAAowEFgJ1BHsAuwAhAYABhgDAAbIBWwRQAF0B8gHZBHQAdAB0AHQAcwBzAHIAcgByAHEAnwF3BFsEdwTLAXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AJQBCAEIASsDtwX6AXABhAQXAnIAcgByAHEAnwEUAlsEXARdBOcABgLcBdgB1QHUAa8A8QGmAdsAsgRGAEYA0wFbBFwEXQSwAMkAyAB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwJbBAgBCAGzATgBWwQRAaMBgAEBAqoFWwRGATwEFAIFAlIAPASnAIQBRQBFAFsEPAQHAv0BPAQ8BAwAhQQ8BKQBdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAAgECARcCWwRcBF0EFQQXAlsEXARdBCsFFwIUAlsEXARdBCgB4wG7BDIDFgTAAUYARgBbBFwEXQQyADIAwAFkAfQBRgBGAM8AFwQgAHQAdAB0AHQAcwBzAHIAcgByAHEAnwHFAQgBCAFbBMIBwQHBA/wBWAOAAQUCBQCEAzYDFALkAbUAWwRZAwQCBQIyA7gD+wEDAFsEtwPPBM8E4gGOAVsERwR3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgBbBBcC7gBbBG8FWwRcBF0EnwC3A7cDuQPnAFsEAwHYAdUB1AE2AVsEXARdBA0ADQApAdMBFAFbBFwEXQScAZsBRwRbBFwEXQSLAWMBdAB0AHQAdABzAHMAcgByAHIAcQCfAdAAWwRcBF0EWwRcBF0ECAEIAYABUQGGA4kBLwNbBFwEXQSdAZ0BnQEUAnAAbQDRADUBhAN3BBcCdwQXAokBhQO6BHcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AA0ADQANAA0ACQEJARcCjwAIAQgBIAEOAhcCXwSQARcCkgEUAv4BsQUAAhQCBgBxAJ8BKwT6BUYARgD6BRcCDwEXAkYARgAXAg0ADQB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BEAEVAQ0ADQANAA0AFwINAA0AgAEXAjABqQFMBBwBXwS4ACEDuQBSAR0BAgL8BXEB1wSeBZ4ERgBGAKkBqAFGAEYAdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAvgApBCsE+wW6AWsA+wWYAQgBCAEIAQgBfwF0BQUBmgFfAIQD5QGeAaUBFAIVBBQCLQFtBC8B6AGxAasFdAV2BRYBFwIWAQgCmwUWBHQAdAB0AHQAcwBzAHIAcgByAHEAnwGpAQgBCAEXBL4ANgA2ABcCIwGAAQgBCAFqAcIDFALsA3gBPAQIAQgBBQQFBMgBFAILAg4BKQQ8BDcANwA8BBQCugF3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgAXAnQFvgAuAWcF0AAXAhUDFgMXAxcCAwIXAisFcwFRAeoA6QDoAMsBAwIPAA8AywHdAcsBywEsACwAiACEAzgAOAA5ADkAoQSGAcUAdAB0AHQAdABzAHMAcgByAHIAcQCfARcCbAMXAroBFwISAWsDKwVlAYABYQGMAJIFsgOvBSsFbgUGANgE1AQkAToAOgA7ADsAPAA8ABcCsAWAARcCBgCPAXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AD0APQAXAi0ALQB3AHgAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgDFBd8BygAuAC4AEwFfAMcBFwLUABcCUQEXAq4FFwKZAQYA8gB0AHQAdAB0AHMAcwByAHIAcgBxAJ8BMAAwADEAMQA+AD4APwA/ABcCdAB0AHQAdABzAHMAcgByAHIAcQCfARcCywEXAm4EFwJ/BBcCjgAXAkAAQAAXAjoFFwLuARcCvgEXAvAEFwI5BQ4ADgBBAEEAfQB9AEIAQgAzADMAFwJDAEMARABEADQANACTAJMAlACUAK0FPQFiAAYAFwLdBOEBFwI7AxcCSwBLAG4EZgDhAWQAFwIUAhcCcAEqBN8FgAEXAk0DNQA1AF0ARwBHAH4AfgAnARAChgEgAQ4CSABIAH8AfwCLAIABJgCAAIAAdwB4AG4AcARwBNUD2APOA84DdQB1AHYAdgB2AHYAFwLvARcCvwEXAncAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AOsAfAB8AJIAkgCRAJEAHwEXAv0EFwKFBBcChwGhAAcBzgB9AXQAdAB0AHQAcwBzAHIAcgByAHEAnwGEAIQAgwCDAIEAgQAXAh4AFwJ0AHQAdAB0AHMAcwByAHIAcgBxAJ8BFwLYACYE/AQXAnIBFwKCAIIASgBKABcCkwOFAWwDEQC1Aa0BHwBrA5QDTABMAAoBZQBJAEkAKwArAEMDQgM0AS8ALwBfADkDrwO5AaoD8QDxADEBuwE5AYAB8QBfAEoDSwPBANEBuQRHAe0AtAFfAPMD7wONA2kD7QDxAGsA/wOAAf8DuwOHBXcAeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AP4DKQP+AzkDiQB3AGwAbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgBqA4YFwwFrAPMDOgH5BD4B2gBBAUMBRQHIBLgEuwNKAVMBVAF0AHQAdAB0AHMAcwByAHIAcgBxAJ8BBQUqBewE1QW+BfcEGwEJAjAFdAB0AHQAdABzAHMAcgByAHIAcQCfAacEoASVBJQElgQKAs8F0wDMAYABAAHHAG8B6QRWAcMA1gEzAVgBCwBNAQ0CvQEbBSMFdwHLALcEfwSAAVoBawW8AGgBeABuAHAEcATVA9gDzgPOA3UAdQB2AHYAdgB2AGoFrAHSBfUALAFcAXwEbgBwBHAE1QPYA84DzgN1AHUAdgB2AHYAdgC9AMYAmgWYBU4AUQCjAFIAiAG3AXAFrQBpAA8CIwAEAJ0AIAV0AHQAdAB0AHMAcwByAHIAcgBxAJ8BEgKlAF0AGAWvAbABqADPAd0AdAB0AHQAdABzAHMAcgByAHIAcQCfAakAxAGqAKABqwB2AXQBtgEkACYFsQDhAGUFVwDKAQwCewU8AQEBaQAPAuMABAC2AM0BoABAAeQAeQGXBNwB5QDLBMoElQHJBBICwgTBA3oBrwSuBDsDTAFnAGcArQSXAQgAwQTeBWgA5wGgARkCGAIZARoBtwOgAeoB9ATwAVwAVQHzAPUEVwH0APMEegAMAlkBtQUDAiABDgIKAGIB8gS0BWAB+AHiBGMAVwVeAPcB8wG3A7cDuQO6AxsAwQNbAeEEwgD7AGYBZwBnAGcBnQQiABoCVgRoAP8AoAEZAhgCHgH8ALcD/gAbApUAkgSLBY0EjAWKBZYAiQWHABcBEQOXAKEBqwTEACIB0gCCAaoEDQGDAaIA/QOFAE0AqAT7A6cDtwO3A7kDugMbAMcFUASiAaQAmQAMAdkApgBbAzIBbgFuAW0B/QBrAdwACwQeA6wAqwNpAA8CmwAEAIoBrgCMAZwAUwAOBNUAVAAmAVUAVgDfAN4AEgIKBJAAJQESAOAAOwHxAAMEeQSyAMkB4gCzACUAIANOAc4B5gBIAdIBtADXAaABWAATABQAWQAYAUYDngC/AFoA1wDeAQwCSQTMAMAA2wNbAJgALgQnAJoALwT4AeYBKADpAc0A+QEEAWkADwLWAAQAjAPBAwYBtwDwABUAhwNnAGcAawAWAD4EFwASAmgAQASgARkCGAIYAEUEtwMZADIEQgRGBAcAIQD/AboAGgDqA4EBXwDcA9oDoAEgAQ4C3gMUBPYAEwT3AN8DHAApAGoADAK8AyoDHQC3A7cDuQO6AxsAEwJpAfgBpwH4AGUD+QD3AdcFbAFRBIkE1gWJBMEDiQSJBIkEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAlAEogG3A4kEDAGJBIkEiQSJBG4BbgFtAf0AawGJBIkEHgOJBIkEiQSJBGkADwKJBAQAiQSJBIkEiQTVAIkEJgGJBLcDtwO5A7oDGwASAiUBiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEoAGJBIkEiQSJBIkEiQSJBNcAiQSJBIkEDAKJBIkEiQSYAIkEiQSaAGkADwKJBAQAiQSJBIkEiQSJBIkE1gCJBIkEiQSJBMEDiQQSAokEiQSJBGcAZwBwA4kEiQSJBIkEaACJBKABGQIYAokEiQS3A4kEiQSJBIkEoAGJBIkEiQSBAYkEiQSJBIkEIAEOAokEDAKJBIkEiQSJBIkEiQSJBGEADwKJBAQAiQSJBLcDtwO5A7oDGwCJBKcBiQSJBMEDiQQSAokEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAokEiQS3AwwBiQSJBIkEoAFuAW4BbQH9AGsBiQSJBB4DiQSJBIkEDAKJBIkEiQSJBIkEiQSJBIkE1QCJBCYBiQSJBLcDtwO5A7oDGwAlAYkEiQSJBMEDiQSJBIkEiQSJBGcAZwCJBIkEiQSJBIkEaACJBKABGQIYAokEiQS3A4kEiQSJBIkEiQTXAIkEiQSJBIkEiQSJBIkEmACJBIkEmgCJBIkEiQSJBIkEiQSJBIkEiQSJBNYAiQSJBLcDtwO5A7oDGwCJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEgQGJBIkEiQSJBCABDgKJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSJBIkEiQSnAQAAAAAABgAGAAZgBYcE8QSHBIcEhwRgBWAFYAWHBA8FDwWVBaYEhwSHBIcEhwSHBIcEhwSHBIcEhwRfBYcEhwSHBIcEswWzBYcEhwSHBIcEhwSHBIcEhwSHBBUFhwSHBIcEhwSHBGEFYgWHBIcEhwSUBZYFcQUfBR4FHQUcBYMFAgUaBRMFFwVbBVwFWgVeBWIFYQWHBBYFPgVMBT0FhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBEYFSwVRBUoFRwVABT8FQQVCBYcEnATNBIcEhwSHBIcEpwWmBYcEhwSmBEMFRAVOBU0FnAXUBdMFcgWHBIcEhwSHBIcEhwSzBYcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBLMFswWHBKYEswWzBaIEOAU3BaIECQWHBKIF8QToBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSZBZcFhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTtBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTOBYcEfgXbBO0E7QTtBO0E7wTcBNoE5wSmBI4E+AUZBQQFBAX1BRkFGQX1BbQE4gWxBA8FDwUPBQQFCQUJBV0F7gTnBIcE+AX2BPYE9wX3BfYEcgUiBSgF0AQZBdYE1gTWBNYE9gSZBBkFGQUiBSgF0ATQBBkF9gSZBIIF8gX2BJkEaAX2BJkE9gSZBGgFzgTOBM4EwwRoBc4EtATOBMMEzgTOBGgFbAVsBWgFCAUDBQgFAwUIBQMFCAUDBfYEvQW9BRQFCQVjBfYEhwQUBRIFEAUZBZ8ExgTRBdEFzQXNBc0F/QX9BaIF3QWmBKYEpgSmBN0FtgS2BKYEpgSmBKYE3QWHBIcEhwSHBIcEhwTYBYcEcwX6BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcELQWHBIoEnwWHBIcEnQWHBIcEhwSHBIcEhwT7BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBPQFhwSHBIcEhwSHBIcEgQWABYcEhwT4BIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwQRBYcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwTCBQoFhwSHBOsFhwSHBIcEhwSHBIcEhwSHBIcEhwSHBIcEhwSHBOYF3gQvBYcELgUyBYcEkwSHBAAAAAAAAP/9//0A/////v7+/fv6/wD9/wD7/gD+/gD8+v4A/vz8/Pz9/fv+/Pz//gD/AP7+/f39/v7///79/gD+/gD//vn7+/YAAP0A/v///P4A9/z//fz//f/+//f2/Pv//wAA+/37/gAA/v4A+ff5+QD+//3//fv9//79/P4AAP3+/AAA/fz+//8AAP0A/gD+/Pz6AP74+/n9+/n5APX4/P7/AP39//3///37//////36+/z6+//7/f39/f39/f3+/fv+/f38/v7+//77//77/fv7/Pv7/P4A/wAA/f8A/fT/AAD9+/0A/vz+/f4A/fv6+/r+/vv1//4A///9AP79/v39/vj4+v38+v////z6/QD+//3//fr5//j//PgA//3//v36+P/9+/v6/Pv//gD9+v///v/+/v4A/v7+//77/QD7//7///7+AP/+/wD+/P7//////////gD+/v3/AP/////+/////////////wD9/wD/AAD///3+APz+AAAAAAAAAAAAAJSwAAABAAAAOogAAAEAAAC0ALQAswC1ALYAtgC2ALYAtQC1ALUAtQC1ALoAvAC+AL4AvQC9ALsAuwDCAMIAxADGAMYAxgDHAMsAzADMAMwAzADMAMwAzADMAMwAzADMAMwAzADRANEA0wDTANUA1QDVANUA1gDWANYA1gDWANQA1ADXANcA1wDBANkA2gDaANoA2gDaAN0AzwDPAN4A3gDfAN8AtQDhAOEAtQC1ALUAwwDDAMMA4wDmAOYA5gDkAOQA8ADwAOcA5wDnAPIA6ADoAOgA8wDzAOkA6QD1APUA9AD0APQA9AC/AL8A4gDiAPsA+wD7APsA9gD2APYA9gD4APgA9wD3APcA+QD5AO0A7QDbANsA0ADQANAA6wDrAOwA7ADuAO4A7gDuALUA6gDqALUA/gD+AP4A/gC1ALUAAQEBAQEBAQH/AP8AAAEAAfwA/ADOAM4AzgDOAM4AzQDNAM0AzgDOAM4AzgDOAM4AzgDNAM4AzgDOAM4AzgDOAM4AzgDOAAMBzgDOAM4AzgDOAM4AzgDOAM4ABAEEAc4ABQEFAc4AzgDOAM4AzgDOAAgBCAEJAQkBBwEHAfoA8QDxAAYBBgG1AAoBCgHSANIA3ADcAAsBCwG1ALUAtQAMAQwBtQC1ALUAtQC1AMkAygC1AA4BEAEQARABEQERAREBEwETAQ8BDwEVARYBFgEUARQBFAEUAc4AzgDgAOAA4AC1ALUAtQAYARgBtQC1ALUAtQC1ALUAGQG1ALUAtQAbAR0BHgEeAR8B/QD9AOUA5QAhASEBIgEjASMBIwEjASMBIwEkASQBJAEnASkBKQEqASoBKAEoASsBKwEsASwBLAHvAAIBAgEmASYBsACxALEAsgCyALIAtwC3ALcAuQC5ALUAwADAALgAuAC4AMYAxwDIAMgAxQDFAMwAwQDYANgA2QDdAN8A4wDkAPIA8wDOAAMB+gANAQ0BDQENAQ0ByQASARIBFQEWARcBFwEaARoBHAEcAR0BIAEgASAB/QAAAEkAAAAkAAoAWgAAADQACQCAAAAAWgABAFMAAABOAAAACwALAAUAAgBGAAAAdQAAAFOeAABMAAAAVwAAAFIAAABengAAVgAAAFcAAABSAAAAaZ4AAFYAAABXAAAAUgAAAG6eAABZAAAAUgAAAFcAAAB7ngAAWQAAAFMAAABXAAAAhZ4AAEwAAABSAAAAVwAAAIueAABMAAAAVwAAAFcAAACQngAATAAAAFcAAABSAAAAMOoAAPGiAAD3ogAA/KIAAAGjAAAAAAAAAAAAAAAAAAAKCgkJCAgHBwcGBgYFBQUEBAQEAwMDAwMDAgICAgICAomUAABAAAAAWaoAAEIAAABeqgAAQQAAAGOqAABDAAAAEawAAEasAAB5rAAAsawAAOWsAAAAAAAAAAAAAAAAAAA5AAAAOQAAADYAAAA5AAAAOQAAAAAAAAAAAAAAAAAAAG5hdHVyYWxlZnRvdXRlcmlnaHRmdWxsaW5uZXJjcm9zcwAAAAAAAAAAAAAAAAAAAAAHBAYEKAoFIA4FMBMEOBcFARwFAwAAAAAAAAAAAAAAMwACAHkAAABcAAIAegAAAHUAAAAAAAAAAAAAAAAAAAACAAAAXgABAy8BCABGAAIAZQECAS8BCABGAAEAqgAAAFEBAQAAAAAAAAAAAAAAAAACAAEAXgABBBIBAABFAAIAXwAHAAAAAAAAAAAAAAAAAFMBAAAwAQQAbgADAFEDAQBFAAAAbgADAAsAAwAAAAAAi7IAAAEAAACQsgAAAQAAAJayAAACAAAAn7IAAAMAAACosgAAAgAAALCyAAADAAAAuLIAAAAAAAC/sgAAAAAAAAAAAAAAAAAAAAAAAAAAAABvbm9mZmFsc2V5ZXN0cnVleHRyYWZ1bGwAAAAAAAAAABK2AAAAAAIAGbYAAAAABAAAAAAAAAAAAAAAAAAAAAAAIbYAAAEAAAAktgAAAgAAACe2AAAGAAAA3YwAAIAAAAAAAAAAAAAAAAAAAAAAAAAAWP/v/6QA1gA2AVr/SP/u/2IAVv8xATsBXf8//07///6LAZEB3AHeAQACdQAPAhEC9wH9ARQC/wAoAiwCLgJfAiUAmAFSAp0BzgEvAjECWQJiAmoCAv8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/wL/Av8C/5H/cwKKArMCuQK9Ar8C5ALmAugC/wICAxYDMAMyAzQDNgNNA1kDWwNdA18DYQNkA2YDaANqA2wDeAOHA4oDjAOTA5UDmgPAA8IDxAPcA94D4AP3A/kDBQQJBAsEEAQC/wL/Av8C/wL/Av8C/wL/Av++AA4BPP+gAGD/wgGHAgQBygEEAcoBTgAC/wL/Av8C/84AzgDOAEABVgL7/6MC5wJs/1QBg//LAdIB0gG1AqP/zQHfAcICxgLKAswCzQKpAEn/RQE6AcACTQHrAloD+P8zAzUC8wKGApQCBQIJAckCFwPIAhsDIwOWA7cCXAN9A6cDqwNL/1T/bf+l/9L//f+iAK0A5wBSAbUBOwJmAnYCiwL4AqMD3QMIBBYEJv8mAC4ESARtBG4EcQRyBHMEdQR2BHcEeAQkAcMBGgR5BHsEfAR9BC0DiQSKBIsEVAQZBI4EkAR6BJEEogCdBJ4EnwSgBKEEowRMBE8EfgRvBHAEdASABC0DfgR+BIEElQSrBEIEggSPBJIEUASDBIQEVQSUBJYEmwSZBKQEtQSTBIgErARhBI0EswTMBIUE3ATdBIYEhwTiBJcEqQSnBNkEzwTbBOkE6wTtBPwEAAXmBOcEzgTSBPUE9gTsBAwFFwXHBMkEHQUhBRAFJQUnBSgFKwUUBRsFHAUeBRgFHwUjBSIFJgUkBSkFLQUsBfcE+AQ0BQ4FEgUTBRUFFgUaBSAFMQVMBegE7wQvBS4FGQVZBTIFPAU/BUIFRgVvBXIFggWEBYcFiQWLBTAFMwU3BXoFdgV4BXkFewWABXQFdQWBBYYFjAWNBYUFAQAAAAEgAAAAAAAAAAAAAEYAAAAAAAAAAAAAAAAAAAANwAAAAAAAAAEAAAABIAAAAAAAAAAAAABHAAAAAAAAAAAAAAAAAAAAJ8AAAAAAAAABAAAAAQwAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAEDAAAAAAAAAAgAAAAEMAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAABJwAAAAAAAAAEAAAABDAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAVMAAAAAAAAABAAAAAQgAAAEAAAAAAAAASQAAAAAAAAAAAAAAAAAAAFvAAAAAAAAAAgAAAAEIAAABAAAAAAAAAEkAAAAAAAAAAAAAAAAAAABbwAAAAAAAAAEAAAABCAAAAgAAAAAAAABJAAAAAAAAAAAAAAAAAAAAYcAAAAAAAAACAAAAAQgAAAIAAAAAAAAASQAAAAAAAAAAAAAAAAAAAGHAAAAAAAAAAQAAAAEIAAADAAAAAAAAAEkAAAAAAAAAAAAAAAAAAABnwAAAAAAAAAIAAAABCAAAAwAAAAAAAABJAAAAAAAAAAAAAAAAAAAAZ8AAAAAAAAD/AAAAIQgAAAAAAAAAAAAASgAAAAAAAAAAAAAAAAAAABetAAAAAAAAAAAAACEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXrQAAAAAAAAEAAAAhEAAAAAAAAAAAAABLAAAAQgAAAEMAAAAAAAAAF60AAAAAAAD/AAAAIQgAAAEAAAAAAAAASgAAAAAAAAAAAAAAAAAAAButAAAAAAAAAAAAACEIAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbrQAAAAAAAAEAAAAhEAAAAQAAAAAAAABLAAAAQgAAAEMAAAAAAAAAG60AAAAAAAABAAAAgQgAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAGzAAAAAAAAAAQAAAEEIAAAAAAAAAAAAAE0AAAAAAAAAAAAAAAAAAABzwAAAAAAAAAIAAAABCAAAAAAAAAAAAABOAAAAAAAAAAAAAAAAAAAAesAAAAAAAAD/AAAAAQgAAAAAAAAAAAAATwAAAAAAAAAAAAAAAAAAAIDAAAAAAAAAAQAAAAEIAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACHwAAAAAAAAP8AAAABCAAAAAAAAAAAAABRAAAAAAAAAAAAAAAAAAAAj8AAAAAAAAABAAAAAQgAAAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAJTAAAAAAAAAAQAAAAEIAAAAAAAAAAAAAFMAAAAAAAAAAAAAAAAAAACYwAAAAAAAAAIAAAABCAAAAAAAAAAAAABTAAAAAAAAAAAAAAAAAAAAmMAAAAAAAAABAAAAAQgAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAJ7AAAAAAAAAAQAAAAEIAAAAAAAAAAAAAFUAAAAAAAAAAAAAAAAAAACkwAAAAAAAAAEAAAABCAAAAAAAAAAAAABWAAAAAAAAAAAAAAAAAAAAqsAAAAAAAAACAAAAAQoAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAK7AAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFcAAAAAAAAAAAAAAAAAAAC1wAAAAAAAAAEAAAABAAAAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAvMAAAAAAAAACAAAAIQgAAAAAAAAAAAAAWQAAAAAAAAAAAAAAAAAAAMfAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAADOwAAAAAAAAAAAAAABIAAAAAAAAAAAAABaAAAAAAAAAAAAAAAAAAAA3cAAAAAAAAACAAAAAQgAAAAAAAAAAAAAWwAAAAAAAAAAAAAAAAAAAO7AAAAAAAAAAQAAAAEIAAAAAAAAAAAAAFwAAAAAAAAAAAAAAAAAAAD5wAAAAAAAAAAAAAABAAAAAAAAAAAAAABdAAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAXgAAAAAAAAAAAAAAAAAAABHBAAAAAAAAAAAAAAEAAAAAAAAAAAAAAF8AAAAAAAAAAAAAAAAAAAAZwQAAAAAAAAMAAAABCAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAJ8EAAAAAAAABAAAAAQgAAAAAAAAAAAAAYQAAAAAAAAAAAAAAAAAAAC/BAAAAAAAAAgAAAAEIAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAA4wQAAAAAAAAMAAAABCAAAAAAAAAAAAABiAAAAAAAAAAAAAAAAAAAAOMEAAAAAAAABAAAAAQAAAAAAAAAAAAAAYwAAAEQAAABEAAAAZAAAAD/BAAAAAAAAAQAAAAEAAAAAAAAAAAAAAGMAAABFAAAARQAAAGQAAABDwQAAAAAAAAEAAAABAAAAAAAAAAAAAABjAAAARgAAAEYAAABkAAAAScEAAAAAAAAAAAAAAQEAAAAAAAAAAAAAZQAAAEcAAABHAAAAZgAAAE3BAAAAAAAAAQAAAAEAAAAAAAAAAAAAAGUAAABHAAAARwAAAGYAAABNwQAAAAAAAAEAAAABAAAAAAAAAAAAAABnAAAASAAAAEkAAABoAAAAU8EAAAAAAAACAAAAAQAAAAAAAAAAAAAAZwAAAEgAAABJAAAAaAAAAFPBAAAAAAAAAgAAAA0IAACzegAAAAAAAGkAAAAAAAAAAAAAAAAAAABZqgAAAAAAAAIAAAAFCAAAt3oAAAAAAABpAAAAAAAAAAAAAAAAAAAAXqoAAAAAAAADAAAABQgAALd6AAAAAAAAaQAAAAAAAAAAAAAAAAAAAF6qAAAAAAAAAQAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgwQAAAAAAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYMEAAAAAAAD/AAAAAQoAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAGDBAAAAAAAAAAAAAAAAAABTkAAATpAAAGrBAABvwQAASZAAAAAAAAAAAAAAAAAAADAxMjM0NTY3ODlBQkNERUYJAAAAAQgEAAAAAAAAAAAAagAAAAAAAAAAAAAAAAAAAJHBAAAAAAAABwAAAAEIBAAAAAAAAAAAAGsAAAAAAAAAAAAAAAAAAACmwQAAAAAAAAUAAAABCAQAAAAAAAAAAABsAAAAAAAAAAAAAAAAAAAAusEAAAAAAAAAAAAAAAAAAAAAAAABAAEAAAAAAAAAAABtAAAASgAAAEoAAABuAAAAU54AAAAAAAAAAAAAAQABAAAAAAAAAAAAbwAAAEsAAABLAAAAbgAAAF6eAAAAAAAAAAAAAAEAAQAAAAAAAAAAAHAAAABMAAAATAAAAG4AAABpngAAAAAAAAAAAAABAAEAAAAAAAAAAABxAAAATQAAAE0AAAByAAAAbp4AAAAAAAAAAAAAAQABAAAAAAAAAAAAcwAAAE4AAABOAAAAdAAAAHueAAAAAAAAAQAAAAEAAQAAAAAAAAAAAHUAAABPAAAATwAAAHYAAACFngAAAAAAAAEAAAABAAEAAAAAAAAAAAB3AAAAUAAAAFEAAAB4AAAA9cEAAAAAAAACAAAAAQABAAAAAAAAAAAAeQAAAFIAAABTAAAAbgAAAMGpAAAAAAAAAQAAAAEAAQAAAAAAAAAAAHoAAABUAAAAUwAAAG4AAADLqQAAAAAAAAEAAAABAAEAAAAAAAAAAABuAAAAUwAAAFMAAABuAAAAi54AAAAAAAACAAAAAQABAAAAAAAAAAAAbgAAAFMAAABTAAAAbgAAAIueAAAAAAAAAwAAAAEAAQAAAAAAAAAAAG4AAABTAAAAUwAAAG4AAACLngAAAAAAAAEAAAABAAEAAAAAAAAAAABuAAAAUwAAAFMAAABuAAAAkJ4AAAAAAAACAAAAAQABAAAAAAAAAAAAbgAAAFMAAABTAAAAbgAAAJCeAAAAAAAAAwAAAAEAAQAAAAAAAAAAAG4AAABTAAAAUwAAAG4AAACQngAAAAAAAAAAAAAAAAAA/wAAAAEoAABwcgAAAAAAAHsAAAAAAAAAAAAAAAAAAAAtwgAAAAAAAP8AAAABKAAAcHIAAAAAAAB8AAAAAAAAAAAAAAAAAAAAN8IAAAAAAAD/AAAAASgAAHByAAAAAAAAfQAAAAAAAAAAAAAAAAAAADzCAAAAAAAA/wAAAAEoAABwcgAAAAAAAH4AAAAAAAAAAAAAAAAAAABBwgAAAAAAAP8AAAABKAAAcHIAAAAAAAB/AAAAAAAAAAAAAAAAAAAASsIAAAAAAAAAAAAAASAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAFPCAAAAAAAAAAAAAAEgAAAAAAAAAAAAAIEAAAAAAAAAAAAAAAAAAABgwgAAAAAAAAAAAAABIAAAAAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAcsIAAAAAAAAABgAAN8MAAAAAsOolBltCAAAAAABAj0AABgAAPsMAAAAAAKVb0/xBAAAAAABM7UAABAAARcMAAAAAALBQv55BAAAAAEB3S0EAAwAAHMMAAAAAAECLf1RBAAAAAHCZlEEBBQAAEcMAAAAAAAAQjQVBAAAAANlP40ECBAAAF8MAAAAAAACAvMxAAAAAsMReHUIqxAAAN8QAAAAAAABHxAAAYMQAAG7EAACBxAAAD4gAAJrEAAC/xAAAy8QAANrEAAD7xAAADcUAACbFAABDxQAAAAAAAP2GAAD3eQAAVMUAAGbFAAB4xQAAmsUAALnFAAAAAAAAzsUAAOjFAAD/xQAAFMYAAAAAAAAAAAAAAAAAADAAAAAH6AAABmwBAC/sAQAHrAIAAdACAAPYAgAB7AIAAfwCAAFcAwAB3AMABAgLAA5ICwAHlAsAAbQLAIG8CwAB1A0AAfgNAAIQDgABHA4AAdgPAAgIEgAGaBUAAiQWAAE8FgA3RBYAAswXAAUAGAAWGBgAAngYABUsGQAEqBkAAcAZAAFQGwAPWBsAB5wbAAL0GwAOABwAATwcAAFEHAAbwBwAC5geAAmsHwAE2B8ABFggAAlsIAADlCAABaQgAA/AIAADZCEAAXghABuQIwAEACQAA+gkABL4JAAHRCUABIglAAHAJQADBCYAAfAmAAf4JgACHCcAAywnAAFcJwACiCcAAsgnAALoJwADBCgAAfAoAAX4KAACHCkAAywpAAFEKQACwCkAAdQpAAMEKgAB8CoACPgqAAMcKwADLCsAAogrAALAKwADBCwAAfAsAAf4LAACHC0AAywtAAJYLQACiC0AAcAtAAEILgAF+C4AAxgvAAQoLwABXC8ACMwvAAMEMAAH+DAAAxgxAAQoMQACVDEAAogxAAH8MQACCDIAAfAyAAf4MgADGDMABCgzAAJUMwACiDMAAgg0AAf4NAADGDUABCg1AAFcNQACiDUAAeQ1AAIINgABKDcABjw3AAFYNwAIYDcAA8g3AAHEOAAH0DgAAfw4AAkcOQACaDkAAcQ6AAbQOgAC7DoABiA7AB8EPAAM0DwAF8Q9AAs0PgAkZD4AD/g+AA04PwAUrEAABihBAARYQQADeEEAA4hBAAecQQAExEEADAhCAAE8QgAGaEIAAexDAAx0TQAKQE4AAQBQAAK0WQABAFoAAmxaAAOsWwADSFwABchcAAJIXQACyF0AI9BeAARgXwABdF8ADwBgAAGkYgAMgGQADMBkAAEAZQACEGUAEcBmAAIgZwAieGcABVxoAAJ4aAAKVGkAHYBpAAH8aQAHgGoABqBqAAUAbAAR0GwAI2htAAMAbgANhG4ADphvAATwbwAUkHAABexwAAL4cQAIAHMAGUBzAAG0cwADyHMAJwB3AATwdwAB9H4AA/x+AAM0fwADdH8AA7R/AAL0fwBlAIAABqiBAAXogQAFKIIAGoCCACFAgwACAIQABAyEAAIghAABUIQAA1iEAAZ4hAABlIQAAZyEAAGkhAABuIQAAuiEAAUAhQAEKIUAATyFAGRChgAnAJAACwCRAE5wkgAAApQAdQScALlTngAKQK0ABpSzAAO8swAE5LMAAvizAAHAtQAB/LUAT4C3AAzAuAAaALoAWWy6ANYAvAAMwL8ABQDAABkgwAAHqMAAAtjAAAP0wAAEZMIAAYDCAAHswwACQMYACljGACQAxwAfAMgAHqjIAAFAyQAggMkAJyjKAD8AywAAAcwAQAA3ATdAkgIC+JMCAzSYAhC8mQIBfJoCCMCbAhcAnAICgJwCAiSeAgEIoAIBGKACASygAgmMoAIE2KACBNChAgIAogIR0KICAjijAhKAowID4KMCCpikAg0cpQIBfKUCBACmAhvMpgICeKcCDqSoAgEMqQICMKkCBHCpAgPcqQIB7KkCAcCqAgPIqgIC3KoCAviqAgEEqwICeKsCB6yrAgLUqwILjK8CAQBgAwL8bQMC/G8DAfx/AwF47AMBpOwDEMjuAwL49AMC8PcDGgD4AweA+AMjwPgDE1D5AwSg+QMB/PsDDwT8Awdo/AMG7PwDC2z9AweA/wMHoP8DBeT/AwMABAQJ3AQEEeQFBAxABgQuQAcEAXwOBAFADwQBXCEEAXwkBAH8JAQDBCgEAhQoBAQwKAQD4CgEAfwoBAlAKQQB/CkEB+QsBAMAQAQW4EAEAwBCBBLAQgQDAEQEDpxEBAQARQQDAEYEDsxGBAQURwQNrFoEBMCRBC5EvQUEPL4F9gBABycARAe1pEQHRgBIB1cATAcBBFsHAWxbBwHsWwcBVFwHAdRcBwE8XQcBvF0HASReBwGkXgcBDF8HAsC7BywAwAdkwMAHD4DCBw7EwgcPBMMHD0TDBx9AxAc8wMQHK8DFBx2YxwcrQMgHCQDJBwJAyQchAMwHBsDMB0bczAcUAM4HJYDOBwUYzwcRgM8HPwDQBwEA0Qe2CNEHBOTTBz4A1AcEANUHGEDVB0bs1wcLFNkHRgDaB3QA3AcBBAA4YIAAOPAABDgAAAAAAAAAAP///////wD8AQAA+AEAAPhBAA4atQBAAcAADhfYAA4HAAEBMDIBAQY5AQEQSgEBLngBdAF5AQEGfwFoAYEBMgGCAQEEhgEsAYcBAAGJASoCiwEAAY4BIAGPASYBkAEoAZEBAAGTASoBlAEuAZYBNAGXATABmAEAAZwBNAGdATYBnwE4AaABAQamATwBpwEAAakBPAGsAQABrgE8Aa8BAAGxAToCswEBBLcBPgG4AQABvAEAAcQBAgHFAQABxwECAcgBAAHKAQIBywEBEt4BARLxAQIB8gEBBPYBegH3AYYB+AEBKCACbgEiAgESOgJGATsCAAE9AmwBPgJEAUECAAFDAmoBRAIcAUUCHgFGAgEKRQMkAXADAQR2AwABhgMSAYgDEAOMAxoBjgMYApEDDhGjAw4JwgMAAc8DBAHQA4wB0QOOAdUDkgHWA5AB2AMBGPADiAHxA4oB9AOCAfUDgAH3AwAB+QOYAfoDAAH9A24DAAQiEBAEDiBgBAEiigQBNsAEBgHBBAEO0AQBWDEFFiagEEImxxBCAc0QQgEAHgGWmx6EAZ4eYAGgHgFgCB+WCBgflgYoH5YIOB+WCEgflgZZH5cIaB+WCIgflgiYH5YIqB+WCLgflgK6H34CvB+UAb4fZAHIH3wEzB+UAdgflgLaH3gC6B+WAuofdgLsH5gB+B9wAvofcgL8H5QBJiFiASohXAErIV4BMiEMAWAhCBCDIQABtiQKGgAsFi9gLAABYixYAWMsZgFkLFoBZywBBm0sVAFuLFYBbyxQAXAsUgFyLAABdSwAAX4sTgKALAFk6ywBBPIsAAFApgEugKYBGCKnAQ4ypwE+eacBBH2nTAF+pwEKi6cAAY2nSgGQpwEEoKcBCqqnSAEh/w4aAAAAAAEAAgAIAA8AEAAaABwAIAAlACYAKAAwAD8AQABFAEcATwBQAHQAygDLAM0AzgDPANEA0gDTANUA1gDZANoA2wAHA2AcKCorKrxa2Fr8dcHV4dXi1eTVA9YJ1hnWQd+630Hio+L74xrx9P49/13/fv+A/4L/h/+Q/5z/n/+q/7b/wP/E/8b/yP/K/9D/4v/n/+r/8f/3//j/+f8AAAAAAAAAAAUHOAdDB2MHiAeUB8sH6Af4BwwIPgh4CJ4I2AjuCCgJTwmoCbgJ1AkkCmwKrAreChoLTguKC6gLuAvUCwgNgA1wDoAOkA6gDrYO+A44D0gPWA9oD4APqA/ID9gPChAqEEoQahCKEKoQyBDYEPgQOBFIEVoReBGIEZgRBBg2GHgYiBjYGB0ZaRmBGQjwHPBI8F7wmPCq8Mrw6PD48AjxHvFY8WjxePGM8bjxyPHa8fzxLvJu8qryyvLo8vjyCvMs817znPPK8+rzDvRI9Fr0ePSM9LD0uPTA9Mj0CvUu9W71qvXM9f71OPZK9mr2jvbO9gr3KvdO94j3nvcAAAAAAGFjZWlub3V5eWFjZGVlZ2hpamtsbm9yc3R1dXd5em91YWlvdfXhZ2tv72pnbuFhZWlvcnVzdGhhZe9v73kAAAAAAAAAAGFi42Rk5WXlZmdoaGnpa2zsbG1u73By8nJz83R19XZ3d3h5emh0d3lh4eHhZeXlaW/v7+919fV5AAA8yAAAaMgAAKzIAADIyAAA5cgAAADJAAAcyQAANckAAE3JAACOyQAAyckAAA3KAAA9ygAArcoAADTLAABoywAAqssAANXLAAAQzAAAN8wAAGPMAACMzAAAu8wAAOXMAAAw6gAAMOoAAAvNAABCzQAAf80AAPbNAABdzgAAlM4AAM7OAAA5zwAAiM8AAMnPAAAF0AAANdAAAJ/QAADo0AAAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAQEBAAEBAQABAQEBAQABAQEBAQABAQECAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAcNYAAAIABABz1gAAAwEDAHfWAAADAQIAe9YAAAQAAQBOxwAAhAAAAFbHAACFAAAA3pIAAIYAAABexwAAhwAAAAAAAACK3AAAtdwAANjcAAD83AAAAAAAAAAAAAAAAAAAlt0AAMvdAAD43QAALN4AAGLeAACP3gAAyd4AAADfAADi4gAA9+IAAAPjAAAP4wAAJ+MAADTjAABI4wAAAAAAAOnjAAABAAEAiAAAAO7jAAABAAEAiQAAAPPjAAABAAEAigAAAPjjAAACAAEAiwAAAP3jAAACAAEAiwAAAAPkAAABAAEAjAAAAAnkAAABAAEAjQAAAA/kAAABAAEAjgAAABXkAAACAAEAjwAAACDkAAABAAEAkAAAACjkAAABAAEAkQAAADDkAAABAAEAkgAAADTkAAABAAEAkwAAADjkAAABAAEAlAAAADzkAAABAAEAlQAAAEDkAAABAAEAlgAAAEXkAAABAAEAlwAAAErkAAABAAEAmAAAAE/kAAABAAEAmQAAAFTkAAABAAEAmgAAAFjkAAABAAEAmwAAAFzkAAABAAEAnAAAAGLkAAACAAEAnQAAAGjkAAABAAEAngAAAG3kAAABAAEAnwAAAHLkAAABAAEAoAAAAHnkAAABAAEAoQAAAH7kAAABAAEAogAAAITkAAAAAAEBowAAAIfkAAACAAEApAAAAJHkAAACAAEApQAAAJHkAAADAAEApQAAAJvkAAACAAEApgAAAKPkAAACAAEApwAAAKzkAAABAAEAqAAAALTkAAABAAEAqQAAALvkAAACAAEAqgAAAMDkAAACAAEAqwAAAMXkAAACAAEArAAAAMrkAAACAAEArQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgICAgICAgMDAwMDAwMDBAQEBAQEBAQAAAAAgDAAAIAgDgCAIMgDAAAAAID///8A+P//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwABAgAAAgIEBQUAAQIGAgMAAQACAAIAAAAAAAAAAQIDAAECAAACAgQFBQABAgYCAwABAAIAAgAAAAAAVCEiGQ0BAgMRSxwMEAQLHRIeJ2hub3BxYiAFBg8TFBUaCBYHKCQXGAkKDhsfJSODgn0mKis8PT4/Q0dKTVhZWltcXV5fYGFjZGVmZ2lqa2xyc3R5ent8AAAAAAAAAAAASWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBz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MTk6NDk6NTMgODg0YjRiN2U1MDJiNGU5OTE2NzdiNTM5NzEyNzdhZGZhZjBhMDRhMjg0ZjhlNDgzZTI1NTNkMGY4MzE1NmI1MABjYW5ub3QgZnN0YXQgZGIgZmlsZSAlcwBmaWxlIHVubGlua2VkIHdoaWxlIG9wZW46ICVzAG11bHRpcGxlIGxpbmtzIHRvIGZpbGU6ICVzAGZpbGUgcmVuYW1lZCB3aGlsZSBvcGVuOiAlcwBvcGVuAGNsb3NlAGFjY2VzcwBnZXRjd2QAc3RhdABmc3RhdABmdHJ1bmNhdGUAZmNudGwAcmVhZABwcmVhZABwcmVhZDY0AHdyaXRlAHB3cml0ZQBwd3JpdGU2NABmY2htb2QAZmFsbG9jYXRlAHVubGluawBvcGVuRGlyZWN0b3J5AG1rZGlyAHJtZGlyAGZjaG93bgBnZXRldWlkAG1tYXAAbXVubWFwAG1yZW1hcABnZXRwYWdlc2l6ZQByZWFkbGluawBsc3RhdABpb2N0bABhdHRlbXB0IHRvIG9wZW4gIiVzIiBhcyBmaWxlIGRlc2NyaXB0b3IgJWQAL2Rldi9udWxsAG9zX3VuaXguYzolZDogKCVkKSAlcyglcykgLSAlcwBjYW5ub3Qgb3BlbiBmaWxlACVzIGF0IGxpbmUgJWQgb2YgWyUuMTBzXQBmdWxsX2ZzeW5jACVzL2V0aWxxc18lbGx4JWMAL3Zhci90bXAAL3Vzci90bXAAL3RtcABTUUxJVEVfVE1QRElSAFRNUERJUgAlcy1zaG0AcmVhZG9ubHlfc2htAG1vZGVvZgBwc293ACVzLmxvY2sAZnN5bmMAL2Rldi91cmFuZG9tAHVuYWJsZSB0byBvcGVuIGEgdGVtcG9yYXJ5IGRhdGFiYXNlIGZpbGUgZm9yIHN0b3JpbmcgdGVtcG9yYXJ5IHRhYmxlcwA6bWVtb3J5OgAtam91cm5hbAAALXdhbAAAbm9sb2NrAGltbXV0YWJsZQByZWNvdmVyZWQgJWQgZnJhbWVzIGZyb20gV0FMIGZpbGUgJXMAZGF0YWJhc2UgY29ycnVwdGlvbgBjYW5ub3QgbGltaXQgV0FMIHNpemU6ICVzANnVBfkgoWPXcmVjb3ZlcmVkICVkIHBhZ2VzIGZyb20gJXMAQCAgAEFQSSBjYWxsZWQgd2l0aCBmaW5hbGl6ZWQgcHJlcGFyZWQgc3RhdGVtZW50AEZPUkVJR04gS0VZIGNvbnN0cmFpbnQgZmFpbGVkACVzLW1qWFhYWFhYOVhYegBNSiBkZWxldGU6ICVzAE1KIGNvbGxpZGU6ICVzAC1taiUwNlg5JTAyWAAlbGxkACUhLjE1ZwA5MjIzMzcyMDM2ODU0Nzc1ODAAQVBJIGNhbGxlZCB3aXRoIE5VTEwgcHJlcGFyZWQgc3RhdGVtZW50ACUuMngAU2F2ZXBvaW50AEF1dG9Db21taXQAVHJhbnNhY3Rpb24AU29ydGVyTmV4dABQcmV2AE5leHQAQ2hlY2twb2ludABKb3VybmFsTW9kZQBWYWN1dW0AVkZpbHRlcgBWVXBkYXRlAEdvdG8AR29zdWIASW5pdENvcm91dGluZQBZaWVsZABNdXN0QmVJbnQASnVtcABPbmNlAElmAE5vdABJZk5vdABJZk51bGxSb3cAU2Vla0xUAFNlZWtMRQBTZWVrR0UAU2Vla0dUAElmTm9Ib3BlAE5vQ29uZmxpY3QATm90Rm91bmQARm91bmQAU2Vla1Jvd2lkAE5vdEV4aXN0cwBMYXN0AElmU21hbGxlcgBTb3J0ZXJTb3J0AFNvcnQAUmV3aW5kAElkeExFAElkeEdUAElkeExUAElkeEdFAFJvd1NldFJlYWQAUm93U2V0VGVzdABPcgBBbmQAUHJvZ3JhbQBGa0lmWmVybwBJZlBvcwBJZk5vdFplcm8ARGVjckp1bXBaZXJvAElzTnVsbABOb3ROdWxsAE5lAEVxAEd0AExlAEx0AEdlAEVsc2VOb3RFcQBJbmNyVmFjdXVtAFZOZXh0AEluaXQAUHVyZUZ1bmMwAEZ1bmN0aW9uMABQdXJlRnVuYwBGdW5jdGlvbgBSZXR1cm4ARW5kQ29yb3V0aW5lAEhhbHRJZk51bGwASGFsdABJbnRlZ2VyAEludDY0AFN0cmluZwBOdWxsAFNvZnROdWxsAEJsb2IAVmFyaWFibGUATW92ZQBDb3B5AFNDb3B5AEludENvcHkAUmVzdWx0Um93AENvbGxTZXEAQWRkSW1tAFJlYWxBZmZpbml0eQBDYXN0AFBlcm11dGF0aW9uAENvbXBhcmUASXNUcnVlAE9mZnNldABDb2x1bW4AQWZmaW5pdHkATWFrZVJlY29yZABDb3VudABSZWFkQ29va2llAFNldENvb2tpZQBCaXRBbmQAQml0T3IAU2hpZnRMZWZ0AFNoaWZ0UmlnaHQAQWRkAFN1YnRyYWN0AE11bHRpcGx5AERpdmlkZQBSZW1haW5kZXIAQ29uY2F0AFJlb3BlbklkeABCaXROb3QAT3BlblJlYWQAT3BlbldyaXRlAFN0cmluZzgAT3BlbkR1cABPcGVuQXV0b2luZGV4AE9wZW5FcGhlbWVyYWwAU29ydGVyT3BlbgBTZXF1ZW5jZVRlc3QAT3BlblBzZXVkbwBDbG9zZQBDb2x1bW5zVXNlZABTZWVrSGl0AFNlcXVlbmNlAE5ld1Jvd2lkAEluc2VydABEZWxldGUAUmVzZXRDb3VudABTb3J0ZXJDb21wYXJlAFNvcnRlckRhdGEAUm93RGF0YQBSb3dpZABOdWxsUm93AFNlZWtFbmQAU29ydGVySW5zZXJ0AElkeEluc2VydABJZHhEZWxldGUARGVmZXJyZWRTZWVrAElkeFJvd2lkAERlc3Ryb3kAQ2xlYXIAUmVzZXRTb3J0ZXIAQ3JlYXRlQnRyZWUAU3FsRXhlYwBQYXJzZVNjaGVtYQBMb2FkQW5hbHlzaXMARHJvcFRhYmxlAERyb3BJbmRleABSZWFsAERyb3BUcmlnZ2VyAEludGVncml0eUNrAFJvd1NldEFkZABQYXJhbQBGa0NvdW50ZXIATWVtTWF4AE9mZnNldExpbWl0AEFnZ0ludmVyc2UAQWdnU3RlcABBZ2dTdGVwMQBBZ2dWYWx1ZQBBZ2dGaW5hbABFeHBpcmUAVGFibGVMb2NrAFZCZWdpbgBWQ3JlYXRlAFZEZXN0cm95AFZPcGVuAFZDb2x1bW4AVlJlbmFtZQBQYWdlY291bnQATWF4UGdjbnQAVHJhY2UAQ3Vyc29ySGludABOb29wAEV4cGxhaW4AQWJvcnRhYmxlAGsoJWQAQklOQVJZAEIALCVzJXMALQApACglLjIwcykAJXMoJWQpACVkACUuMTZnAChibG9iKQB2dGFiOiVwACwlZABdAHByb2dyYW0ATk9UIE5VTEwAVU5JUVVFAENIRUNLAEZPUkVJR04gS0VZACVzIGNvbnN0cmFpbnQgZmFpbGVkACV6OiAlcwBhYm9ydCBhdCAlZCBpbiBbJXNdOiAlcwABAAABAQAAAQABAAEBAAEAAAEAAAAAAQIAAgIAAQIBAQECAQJjYW5ub3Qgb3BlbiBzYXZlcG9pbnQgLSBTUUwgc3RhdGVtZW50cyBpbiBwcm9ncmVzcwBubyBzdWNoIHNhdmVwb2ludDogJXMAY2Fubm90IHJlbGVhc2Ugc2F2ZXBvaW50IC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAY2Fubm90IGNvbW1pdCB0cmFuc2FjdGlvbiAtIFNRTCBzdGF0ZW1lbnRzIGluIHByb2dyZXNzAGNhbm5vdCBzdGFydCBhIHRyYW5zYWN0aW9uIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGNhbm5vdCByb2xsYmFjayAtIG5vIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZQBjYW5ub3QgY29tbWl0IC0gbm8gdHJhbnNhY3Rpb24gaXMgYWN0aXZlAGRhdGFiYXNlIHNjaGVtYSBoYXMgY2hhbmdlZABzcWxpdGVfbWFzdGVyAFNFTEVDVCBuYW1lLCByb290cGFnZSwgc3FsIEZST00gJyVxJy4lcyBXSEVSRSAlcyBPUkRFUiBCWSByb3dpZAB0b28gbWFueSBsZXZlbHMgb2YgdHJpZ2dlciByZWN1cnNpb24AY2Fubm90IGNoYW5nZSAlcyB3YWwgbW9kZSBmcm9tIHdpdGhpbiBhIHRyYW5zYWN0aW9uAGludG8Ab3V0IG9mAGRhdGFiYXNlIHRhYmxlIGlzIGxvY2tlZDogJXMALS0gJXMAc3RhdGVtZW50IGFib3J0cyBhdCAlZDogWyVzXSAlcwBvdXQgb2YgbWVtb3J5AAABAgMEBggAAABzcWxpdGVfdGVtcF9tYXN0ZXIAMQBDUkVBVEUgVEFCTEUgeCh0eXBlIHRleHQsbmFtZSB0ZXh0LHRibF9uYW1lIHRleHQscm9vdHBhZ2UgaW50LHNxbCB0ZXh0KQBhdHRhY2hlZCBkYXRhYmFzZXMgbXVzdCB1c2UgdGhlIHNhbWUgdGV4dCBlbmNvZGluZyBhcyBtYWluIGRhdGFiYXNlAHVuc3VwcG9ydGVkIGZpbGUgZm9ybWF0AFNFTEVDVCBuYW1lLCByb290cGFnZSwgc3FsIEZST00gIiV3Ii4lcyBPUkRFUiBCWSByb3dpZABjcmVhdGUgAGludmFsaWQgcm9vdHBhZ2UAb3JwaGFuIGluZGV4AD8AbWFsZm9ybWVkIGRhdGFiYXNlIHNjaGVtYSAoJXMpACV6IC0gJXMAc3FsaXRlX3N0YXQxAFNFTEVDVCB0YmwsaWR4LHN0YXQgRlJPTSAlUS5zcWxpdGVfc3RhdDEAdW5vcmRlcmVkKgBzej1bMC05XSoAbm9za2lwc2NhbioATWFpbiBmcmVlbGlzdDogAG1heCByb290cGFnZSAoJWQpIGRpc2FncmVlcyB3aXRoIGhlYWRlciAoJWQpAGluY3JlbWVudGFsX3ZhY3V1bSBlbmFibGVkIHdpdGggYSBtYXggcm9vdHBhZ2Ugb2YgemVybwBQYWdlICVkIGlzIG5ldmVyIHVzZWQAUG9pbnRlciBtYXAgcGFnZSAlZCBpcyByZWZlcmVuY2VkAGZhaWxlZCB0byBnZXQgcGFnZSAlZABmcmVlbGlzdCBsZWFmIGNvdW50IHRvbyBiaWcgb24gcGFnZSAlZAAlcyBpcyAlZCBidXQgc2hvdWxkIGJlICVkAHNpemUAb3ZlcmZsb3cgbGlzdCBsZW5ndGgAaW52YWxpZCBwYWdlIG51bWJlciAlZAAybmQgcmVmZXJlbmNlIHRvIHBhZ2UgJWQACgBGYWlsZWQgdG8gcmVhZCBwdHJtYXAga2V5PSVkAEJhZCBwdHIgbWFwIGVudHJ5IGtleT0lZCBleHBlY3RlZD0oJWQsJWQpIGdvdD0oJWQsJWQpAFBhZ2UgJWQ6IAB1bmFibGUgdG8gZ2V0IHRoZSBwYWdlLiBlcnJvciBjb2RlPSVkAGJ0cmVlSW5pdFBhZ2UoKSByZXR1cm5zIGVycm9yIGNvZGUgJWQAZnJlZSBzcGFjZSBjb3JydXB0aW9uAE9uIHRyZWUgcGFnZSAlZCBjZWxsICVkOiAAT24gcGFnZSAlZCBhdCByaWdodCBjaGlsZDogAE9mZnNldCAlZCBvdXQgb2YgcmFuZ2UgJWQuLiVkAEV4dGVuZHMgb2ZmIGVuZCBvZiBwYWdlAFJvd2lkICVsbGQgb3V0IG9mIG9yZGVyAENoaWxkIHBhZ2UgZGVwdGggZGlmZmVycwBNdWx0aXBsZSB1c2VzIGZvciBieXRlICV1IG9mIHBhZ2UgJWQARnJhZ21lbnRhdGlvbiBvZiAlZCBieXRlcyByZXBvcnRlZCBhcyAlZCBvbiBwYWdlICVkAGRlbGV0ZQBwZXJzaXN0AG9mZgB0cnVuY2F0ZQBtZW1vcnkAd2FsAGNhbm5vdCBWQUNVVU0gZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbgBjYW5ub3QgVkFDVVVNIC0gU1FMIHN0YXRlbWVudHMgaW4gcHJvZ3Jlc3MAbm9uLXRleHQgZmlsZW5hbWUAQVRUQUNIICVRIEFTIHZhY3V1bV9kYgBvdXRwdXQgZmlsZSBhbHJlYWR5IGV4aXN0cwBCRUdJTgBTRUxFQ1Qgc3FsIEZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J3RhYmxlJ0FORCBuYW1lPD4nc3FsaXRlX3NlcXVlbmNlJyBBTkQgY29hbGVzY2Uocm9vdHBhZ2UsMSk+MABTRUxFQ1Qgc3FsIEZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGU9J2luZGV4JwBTRUxFQ1QnSU5TRVJUIElOVE8gdmFjdXVtX2RiLid8fHF1b3RlKG5hbWUpfHwnIFNFTEVDVCpGUk9NIiV3Ii4nfHxxdW90ZShuYW1lKUZST00gdmFjdXVtX2RiLnNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUnQU5EIGNvYWxlc2NlKHJvb3RwYWdlLDEpPjAASU5TRVJUIElOVE8gdmFjdXVtX2RiLnNxbGl0ZV9tYXN0ZXIgU0VMRUNUKkZST00gIiV3Ii5zcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgSU4oJ3ZpZXcnLCd0cmlnZ2VyJykgT1IodHlwZT0ndGFibGUnQU5EIHJvb3RwYWdlPTApAAEBAwAFAAYACABDUkUASU5TAG5vIHN1Y2ggbW9kdWxlOiAlcwB2dGFibGUgY29uc3RydWN0b3IgY2FsbGVkIHJlY3Vyc2l2ZWx5OiAlcwB2dGFibGUgY29uc3RydWN0b3IgZmFpbGVkOiAlcwB2dGFibGUgY29uc3RydWN0b3IgZGlkIG5vdCBkZWNsYXJlIHNjaGVtYTogJXMAaGlkZGVuAGJpbmQgb24gYSBidXN5IHByZXBhcmVkIHN0YXRlbWVudDogWyVzXQAtLSAAJyUuKnEnAHplcm9ibG9iKCVkKQB4JwAlMDJ4ACcAY2Fubm90IG9wZW4gdmFsdWUgb2YgdHlwZSAlcwBudWxsAHJlYWwAaW50ZWdlcgBubyBzdWNoIHJvd2lkOiAlbGxkAHByYWdtYV8Abm8gc3VjaCB2aWV3AG5vIHN1Y2ggdGFibGUAJXM6ICVzLiVzACVzOiAlcwBhcHBsaWNhdGlvbl9pZABhdXRvX3ZhY3V1bQBhdXRvbWF0aWNfaW5kZXgAYnVzeV90aW1lb3V0AGNhY2hlX3NpemUAY2FjaGVfc3BpbGwAY2FzZV9zZW5zaXRpdmVfbGlrZQBjZWxsX3NpemVfY2hlY2sAY2hlY2twb2ludF9mdWxsZnN5bmMAY29sbGF0aW9uX2xpc3QAY29tcGlsZV9vcHRpb25zAGNvdW50X2NoYW5nZXMAZGF0YV92ZXJzaW9uAGRhdGFiYXNlX2xpc3QAZGVmYXVsdF9jYWNoZV9zaXplAGRlZmVyX2ZvcmVpZ25fa2V5cwBlbXB0eV9yZXN1bHRfY2FsbGJhY2tzAGVuY29kaW5nAGZvcmVpZ25fa2V5X2NoZWNrAGZvcmVpZ25fa2V5X2xpc3QAZm9yZWlnbl9rZXlzAGZyZWVsaXN0X2NvdW50AGZ1bGxfY29sdW1uX25hbWVzAGZ1bGxmc3luYwBpZ25vcmVfY2hlY2tfY29uc3RyYWludHMAaW5jcmVtZW50YWxfdmFjdXVtAGluZGV4X2luZm8AaW5kZXhfbGlzdABpbmRleF94aW5mbwBpbnRlZ3JpdHlfY2hlY2sAam91cm5hbF9tb2RlAGpvdXJuYWxfc2l6ZV9saW1pdABsZWdhY3lfYWx0ZXJfdGFibGUAbGVnYWN5X2ZpbGVfZm9ybWF0AGxvY2tpbmdfbW9kZQBtYXhfcGFnZV9jb3VudABtbWFwX3NpemUAb3B0aW1pemUAcGFnZV9jb3VudABwYWdlX3NpemUAcXVlcnlfb25seQBxdWlja19jaGVjawByZWFkX3VuY29tbWl0dGVkAHJlY3Vyc2l2ZV90cmlnZ2VycwByZXZlcnNlX3Vub3JkZXJlZF9zZWxlY3RzAHNjaGVtYV92ZXJzaW9uAHNlY3VyZV9kZWxldGUAc2hvcnRfY29sdW1uX25hbWVzAHNocmlua19tZW1vcnkAc29mdF9oZWFwX2xpbWl0AHN5bmNocm9ub3VzAHRhYmxlX2luZm8AdGFibGVfeGluZm8AdGVtcF9zdG9yZQB0ZW1wX3N0b3JlX2RpcmVjdG9yeQB0aHJlYWRzAHVzZXJfdmVyc2lvbgB3YWxfYXV0b2NoZWNrcG9pbnQAd2FsX2NoZWNrcG9pbnQAd3JpdGFibGVfc2NoZW1hAENSRUFURSBUQUJMRSB4ACVjIiVzIgAoIiVzIgAsYXJnIEhJRERFTgAsc2NoZW1hIEhJRERFTgBpZABzZXEAdGFibGUAZnJvbQB0bwBvbl91cGRhdGUAb25fZGVsZXRlAG1hdGNoAGNpZABuYW1lAHR5cGUAbm90bnVsbABkZmx0X3ZhbHVlAHBrAHNlcW5vAGRlc2MAY29sbABrZXkAdGJsAGlkeAB3ZHRoAGhnaHQAZmxncwB1bmlxdWUAb3JpZ2luAHBhcnRpYWwAcm93aWQAcGFyZW50AGZraWQAZmlsZQBidXN5AGNoZWNrcG9pbnRlZABidWlsdGluAGRhdGFiYXNlAHN0YXR1cwB0aW1lb3V0AFBSQUdNQSAAJVEuAD0lUQB0b28gbWFueSBjb2x1bW5zIG9uICVzAHVub3BlbmVkAEFQSSBjYWxsIHdpdGggJXMgZGF0YWJhc2UgY29ubmVjdGlvbiBwb2ludGVyAGRhdGFiYXNlIHNjaGVtYSBpcyBsb2NrZWQ6ICVzAHN0YXRlbWVudCB0b28gbG9uZwBhZGRyAG9wY29kZQBwMQBwMgBwMwBwNABwNQBjb21tZW50AG5vdHVzZWQAZGV0YWlsAG5vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlOiAlcwB1bnJlY29nbml6ZWQgdG9rZW46ICIlLipzIgAlcyBpbiAiJXMiAHVua25vd24gdGFibGUgb3B0aW9uOiAlLipzAHNldCBsaXN0AG5lYXIgIiVUIjogc3ludGF4IGVycm9yAHF1YWxpZmllZCB0YWJsZSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgb24gSU5TRVJULCBVUERBVEUsIGFuZCBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIElOREVYRUQgQlkgY2xhdXNlIGlzIG5vdCBhbGxvd2VkIG9uIFVQREFURSBvciBERUxFVEUgc3RhdGVtZW50cyB3aXRoaW4gdHJpZ2dlcnMAdGhlIE5PVCBJTkRFWEVEIGNsYXVzZSBpcyBub3QgYWxsb3dlZCBvbiBVUERBVEUgb3IgREVMRVRFIHN0YXRlbWVudHMgd2l0aGluIHRyaWdnZXJzAHBhcnNlciBzdGFjayBvdmVyZmxvdwBCAEMARABFAG1pc3VzZSBvZiBhZ2dyZWdhdGU6ICVzKCkAdW5rbm93biBmdW5jdGlvbjogJXMoKQAlZCBjb2x1bW5zIGFzc2lnbmVkICVkIHZhbHVlcwByb3cgdmFsdWUgbWlzdXNlZABSQUlTRSgpIG1heSBvbmx5IGJlIHVzZWQgd2l0aGluIGEgdHJpZ2dlci1wcm9ncmFtACVzJXMAMHgAaGV4IGxpdGVyYWwgdG9vIGJpZzogJXMlcwBzdWItc2VsZWN0IHJldHVybnMgJWQgY29sdW1ucyAtIGV4cGVjdGVkICVkAFJFVVNFIFNVQlFVRVJZICVkACVzU0NBTEFSIFNVQlFVRVJZICVkAENPUlJFTEFURUQgAFVTSU5HIFJPV0lEIFNFQVJDSCBPTiBUQUJMRSAlcyBGT1IgSU4tT1BFUkFUT1IAVVNJTkcgSU5ERVggJXMgRk9SIElOLU9QRVJBVE9SAFJFVVNFIExJU1QgU1VCUVVFUlkgJWQAJXNMSVNUIFNVQlFVRVJZICVkAG5vdCBhdXRob3JpemVkAGF1dGhvcml6ZXIgbWFsZnVuY3Rpb24AUk9MTEJBQ0sAQ09NTUlUAFJFTEVBU0UAdGVtcG9yYXJ5IHRhYmxlIG5hbWUgbXVzdCBiZSB1bnF1YWxpZmllZAACBAgGdGFibGUgJVQgYWxyZWFkeSBleGlzdHMAdGhlcmUgaXMgYWxyZWFkeSBhbiBpbmRleCBuYW1lZCAlcwBzcWxpdGVfc2VxdWVuY2UABgAAAAAAY29ycnVwdCBkYXRhYmFzZQB1bmtub3duIGRhdGFiYXNlICVUAHNxbGl0ZV8Ab2JqZWN0IG5hbWUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZTogJXMAQVVUT0lOQ1JFTUVOVCBub3QgYWxsb3dlZCBvbiBXSVRIT1VUIFJPV0lEIHRhYmxlcwBQUklNQVJZIEtFWSBtaXNzaW5nIG9uIHRhYmxlICVzAFRBQkxFAHZpZXcAVklFVwBDUkVBVEUgJXMgJS4qcwBVUERBVEUgJVEuJXMgU0VUIHR5cGU9JyVzJywgbmFtZT0lUSwgdGJsX25hbWU9JVEsIHJvb3RwYWdlPSMlZCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABDUkVBVEUgVEFCTEUgJVEuc3FsaXRlX3NlcXVlbmNlKG5hbWUsc2VxKQB0YmxfbmFtZT0nJXEnIEFORCB0eXBlIT0ndHJpZ2dlcicAdGhlICIuIiBvcGVyYXRvcgBzZWNvbmQgYXJndW1lbnQgdG8gbGlrZWxpaG9vZCgpIG11c3QgYmUgYSBjb25zdGFudCBiZXR3ZWVuIDAuMCBhbmQgMS4wAG5vdCBhdXRob3JpemVkIHRvIHVzZSBmdW5jdGlvbjogJXMAbm9uLWRldGVybWluaXN0aWMgZnVuY3Rpb25zACUuKnMoKSBtYXkgbm90IGJlIHVzZWQgYXMgYSB3aW5kb3cgZnVuY3Rpb24Ad2luZG93AGFnZ3JlZ2F0ZQBtaXN1c2Ugb2YgJXMgZnVuY3Rpb24gJS4qcygpAG5vIHN1Y2ggZnVuY3Rpb246ICUuKnMAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiAlLipzKCkAc3VicXVlcmllcwBwYXJhbWV0ZXJzAHBhcnRpYWwgaW5kZXggV0hFUkUgY2xhdXNlcwBpbmRleCBleHByZXNzaW9ucwBDSEVDSyBjb25zdHJhaW50cwAlcyBwcm9oaWJpdGVkIGluICVzAG5ldwBvbGQAZXhjbHVkZWQAbWlzdXNlIG9mIGFsaWFzZWQgYWdncmVnYXRlICVzAG1pc3VzZSBvZiBhbGlhc2VkIHdpbmRvdyBmdW5jdGlvbiAlcwBkb3VibGUtcXVvdGVkIHN0cmluZyBsaXRlcmFsOiAiJXciAG5vIHN1Y2ggY29sdW1uAGFtYmlndW91cyBjb2x1bW4gbmFtZQAlczogJXMuJXMuJXMAUk9XSUQAJXMuJXMAJXMuJXoAYWNjZXNzIHRvICV6IGlzIHByb2hpYml0ZWQAUkFOR0Ugd2l0aCBvZmZzZXQgUFJFQ0VESU5HL0ZPTExPV0lORyByZXF1aXJlcyBvbmUgT1JERVIgQlkgZXhwcmVzc2lvbgBGSUxURVIgY2xhdXNlIG1heSBvbmx5IGJlIHVzZWQgd2l0aCBhZ2dyZWdhdGUgd2luZG93IGZ1bmN0aW9ucwByb3dfbnVtYmVyAGRlbnNlX3JhbmsAcmFuawBwZXJjZW50X3JhbmsAY3VtZV9kaXN0AG50aWxlAGxlYWQAbGFnAG5vIHN1Y2ggd2luZG93OiAlcwBhIEdST1VQIEJZIGNsYXVzZSBpcyByZXF1aXJlZCBiZWZvcmUgSEFWSU5HAE9SREVSAEdST1VQAGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHRoZSBHUk9VUCBCWSBjbGF1c2UAdG9vIG1hbnkgcmVmZXJlbmNlcyB0byAiJXMiOiBtYXggNjU1MzUAKgAlcy4lcy4lcwBubyBzdWNoIHRhYmxlOiAlcwBubyB0YWJsZXMgc3BlY2lmaWVkAHRvbyBtYW55IGNvbHVtbnMgaW4gcmVzdWx0IHNldABtdWx0aXBsZSByZWZlcmVuY2VzIHRvIHJlY3Vyc2l2ZSB0YWJsZTogJXMAY2lyY3VsYXIgcmVmZXJlbmNlOiAlcwB0YWJsZSAlcyBoYXMgJWQgdmFsdWVzIGZvciAlZCBjb2x1bW5zAG11bHRpcGxlIHJlY3Vyc2l2ZSByZWZlcmVuY2VzOiAlcwByZWN1cnNpdmUgcmVmZXJlbmNlIGluIGEgc3VicXVlcnk6ICVzAGNvbHVtbiVkACUuKno6JXUAc3VicXVlcnlfJXUAJyVzJyBpcyBub3QgYSBmdW5jdGlvbgB2aWV3ICVzIGlzIGNpcmN1bGFybHkgZGVmaW5lZABubyBzdWNoIGluZGV4OiAlcwBhIE5BVFVSQUwgam9pbiBtYXkgbm90IGhhdmUgYW4gT04gb3IgVVNJTkcgY2xhdXNlAGNhbm5vdCBoYXZlIGJvdGggT04gYW5kIFVTSU5HIGNsYXVzZXMgaW4gdGhlIHNhbWUgam9pbgBjYW5ub3Qgam9pbiB1c2luZyBjb2x1bW4gJXMgLSBjb2x1bW4gbm90IHByZXNlbnQgaW4gYm90aCB0YWJsZXMAJXIgJXMgQlkgdGVybSBvdXQgb2YgcmFuZ2UgLSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAlZAB0b28gbWFueSB0ZXJtcyBpbiAlcyBCWSBjbGF1c2UAYWxsIFZBTFVFUyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHRlcm1zAFNFTEVDVHMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mICVzIGRvIG5vdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiByZXN1bHQgY29sdW1ucwBVTklPTiBBTEwASU5URVJTRUNUAEVYQ0VQVABVTklPTgB0b28gbWFueSB0ZXJtcyBpbiBPUkRFUiBCWSBjbGF1c2UAJXIgT1JERVIgQlkgdGVybSBkb2VzIG5vdCBtYXRjaCBhbnkgY29sdW1uIGluIHRoZSByZXN1bHQgc2V0AEV4cHJlc3Npb24gdHJlZSBpcyB0b28gbGFyZ2UgKG1heGltdW0gZGVwdGggJWQpACwACiAgACwKICAACikAQ1JFQVRFIFRBQkxFIAAgVEVYVAAgTlVNACBJTlQAIFJFQUwAZHVwbGljYXRlIGNvbHVtbiBuYW1lOiAlcwBkZWZhdWx0IHZhbHVlIG9mIGNvbHVtbiBbJXNdIGlzIG5vdCBjb25zdGFudAB0cnVlAGZhbHNlAHRhYmxlICIlcyIgaGFzIG1vcmUgdGhhbiBvbmUgcHJpbWFyeSBrZXkAQVVUT0lOQ1JFTUVOVCBpcyBvbmx5IGFsbG93ZWQgb24gYW4gSU5URUdFUiBQUklNQVJZIEtFWQBpbmRleABjYW5ub3QgY3JlYXRlIGEgVEVNUCBpbmRleCBvbiBub24tVEVNUCB0YWJsZSAiJXMiAHRhYmxlICVzIG1heSBub3QgYmUgaW5kZXhlZAB2aWV3cyBtYXkgbm90IGJlIGluZGV4ZWQAdmlydHVhbCB0YWJsZXMgbWF5IG5vdCBiZSBpbmRleGVkAHRoZXJlIGlzIGFscmVhZHkgYSB0YWJsZSBuYW1lZCAlcwBpbmRleCAlcyBhbHJlYWR5IGV4aXN0cwBzcWxpdGVfYXV0b2luZGV4XyVzXyVkAGV4cHJlc3Npb25zIHByb2hpYml0ZWQgaW4gUFJJTUFSWSBLRVkgYW5kIFVOSVFVRSBjb25zdHJhaW50cwBjb25mbGljdGluZyBPTiBDT05GTElDVCBjbGF1c2VzIHNwZWNpZmllZABDUkVBVEUlcyBJTkRFWCAlLipzACBVTklRVUUASU5TRVJUIElOVE8gJVEuJXMgVkFMVUVTKCdpbmRleCcsJVEsJVEsIyVkLCVRKTsAbmFtZT0nJXEnIEFORCB0eXBlPSdpbmRleCcAJXMgJVQgY2Fubm90IHJlZmVyZW5jZSBvYmplY3RzIGluIGRhdGFiYXNlICVzACVzIGNhbm5vdCB1c2UgdmFyaWFibGVzAGluZGV4ICclcScALCAAZm9yZWlnbiBrZXkgb24gJXMgc2hvdWxkIHJlZmVyZW5jZSBvbmx5IG9uZSBjb2x1bW4gb2YgdGFibGUgJVQAbnVtYmVyIG9mIGNvbHVtbnMgaW4gZm9yZWlnbiBrZXkgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSByZWZlcmVuY2VkIHRhYmxlAHVua25vd24gY29sdW1uICIlcyIgaW4gZm9yZWlnbiBrZXkgZGVmaW5pdGlvbgBzcWxpdGVfc3RhdAB0YWJsZSAlcyBtYXkgbm90IGJlIGRyb3BwZWQAdXNlIERST1AgVEFCTEUgdG8gZGVsZXRlIHRhYmxlICVzAHVzZSBEUk9QIFZJRVcgdG8gZGVsZXRlIHZpZXcgJXMAc3FsaXRlX3N0YXQlZABERUxFVEUgRlJPTSAlUS4lcyBXSEVSRSAlcz0lUQBERUxFVEUgRlJPTSAlUS5zcWxpdGVfc2VxdWVuY2UgV0hFUkUgbmFtZT0lUQBERUxFVEUgRlJPTSAlUS4lcyBXSEVSRSB0YmxfbmFtZT0lUSBhbmQgdHlwZSE9J3RyaWdnZXInAERFTEVURSBGUk9NICVRLiVzIFdIRVJFIG5hbWU9JVEgQU5EIHR5cGU9J3RyaWdnZXInAGNvcnJ1cHQgc2NoZW1hAFVQREFURSAlUS4lcyBTRVQgcm9vdHBhZ2U9JWQgV0hFUkUgIyVkIEFORCByb290cGFnZT0jJWQAcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgaW4gdmlld3MAZXhwZWN0ZWQgJWQgY29sdW1ucyBmb3IgJyVzJyBidXQgZ290ICVkAENPLVJPVVRJTkUgJXUATUFURVJJQUxJWkUgJXUARElTVElOQ1QAR1JPVVAgQlkAUklHSFQgUEFSVCBPRiBPUkRFUiBCWQBPUkRFUiBCWQB0b28gbWFueSBGUk9NIGNsYXVzZSB0ZXJtcywgbWF4OiAlZAAlcyBjbGF1c2Ugc2hvdWxkIGNvbWUgYWZ0ZXIgJXMgbm90IGJlZm9yZQBMSU1JVABDT01QT1VORCBRVUVSWQBMRUZULU1PU1QgU1VCUVVFUlkAJXMgVVNJTkcgVEVNUCBCLVRSRUUAU0NBTiAlZCBDT05TVEFOVCBST1clcwBTAGNhbm5vdCB1c2Ugd2luZG93IGZ1bmN0aW9ucyBpbiByZWN1cnNpdmUgcXVlcmllcwBTRVRVUAByZWN1cnNpdmUgYWdncmVnYXRlIHF1ZXJpZXMgbm90IHN1cHBvcnRlZABSRUNVUlNJVkUgU1RFUABNRVJHRSAoJXMpAExFRlQAUklHSFQAbnRoX3ZhbHVlAGZpcnN0X3ZhbHVlAGF0IG1vc3QgJWQgdGFibGVzIGluIGEgam9pbgBTQ0FOIENPTlNUQU5UIFJPVwB0b28gbWFueSBhcmd1bWVudHMgb24gJXMoKSAtIG1heCAlZABPTiBjbGF1c2UgcmVmZXJlbmNlcyB0YWJsZXMgdG8gaXRzIHJpZ2h0AE5PQ0FTRQBnbG9iAGxpa2UAcmVnZXhwAGFiYnJldmlhdGVkIHF1ZXJ5IGFsZ29yaXRobSBzZWFyY2gAJXMueEJlc3RJbmRleCBtYWxmdW5jdGlvbgBubyBxdWVyeSBzb2x1dGlvbgBhdXRvbWF0aWMgaW5kZXggb24gJXMoJXMpAGF1dG8taW5kZXgAU0VBUkNIAFNDQU4AIFNVQlFVRVJZICV1ACBUQUJMRSAlcwAgQVMgJXMAUFJJTUFSWSBLRVkAQVVUT01BVElDIFBBUlRJQUwgQ09WRVJJTkcgSU5ERVgAQVVUT01BVElDIENPVkVSSU5HIElOREVYAENPVkVSSU5HIElOREVYICVzAElOREVYICVzACBVU0lORyAAPQA+PyBBTkQgcm93aWQ8AD4APAAgVVNJTkcgSU5URUdFUiBQUklNQVJZIEtFWSAocm93aWQlcz8pACBWSVJUVUFMIFRBQkxFIElOREVYICVkOiVzACAoACBBTkQgACVzPT8AQU5ZKCVzKQA8ZXhwcj4AKAAZFxYYAAAkIBkWGBcoJiUnTVVMVEktSU5ERVggT1IASU5ERVggJWQABQQkIGZyYW1lIHN0YXJ0aW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIAc2Vjb25kIGFyZ3VtZW50IHRvIG50aF92YWx1ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcgBmcmFtZSBzdGFydGluZyBvZmZzZXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIAZnJhbWUgZW5kaW5nIG9mZnNldCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcgBtaW4AbWF4AFVTRSBURU1QIEItVFJFRSBGT1IgJXMARElTVElOQ1QgYWdncmVnYXRlcyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgYXJndW1lbnQAU0NBTiBUQUJMRSAlcyVzJXMAIFVTSU5HIENPVkVSSU5HIElOREVYIAB0b28gbWFueSB0ZXJtcyBpbiBjb21wb3VuZCBTRUxFQ1QAYSBKT0lOIGNsYXVzZSBpcyByZXF1aXJlZCBiZWZvcmUgJXMAT04AVVNJTkcAIAB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGpvaW4gdHlwZTogJVQgJVQlcyVUAFJJR0hUIGFuZCBGVUxMIE9VVEVSIEpPSU5zIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZAByb3dzIGRlbGV0ZWQAdGFibGUgJXMgbWF5IG5vdCBiZSBtb2RpZmllZABjYW5ub3QgbW9kaWZ5ICVzIGJlY2F1c2UgaXQgaXMgYSB2aWV3AC0tIFRSSUdHRVIgJXMAZm9yZWlnbiBrZXkgbWlzbWF0Y2ggLSAiJXciIHJlZmVyZW5jaW5nICIldyIAdG9vIG1hbnkgY29sdW1ucyBpbiAlcwBubyBzdWNoIGNvbHVtbjogJXMAcm93cyB1cGRhdGVkACVzLnJvd2lkAHRhYmxlICVTIGhhcyBubyBjb2x1bW4gbmFtZWQgJXMAdGFibGUgJVMgaGFzICVkIGNvbHVtbnMgYnV0ICVkIHZhbHVlcyB3ZXJlIHN1cHBsaWVkACVkIHZhbHVlcyBmb3IgJWQgY29sdW1ucwBVUFNFUlQgbm90IGltcGxlbWVudGVkIGZvciB2aXJ0dWFsIHRhYmxlICIlcyIAcm93cyBpbnNlcnRlZABPTiBDT05GTElDVCBjbGF1c2UgZG9lcyBub3QgbWF0Y2ggYW55IFBSSU1BUlkgS0VZIG9yIFVOSVFVRSBjb25zdHJhaW50AHZhcmlhYmxlIG51bWJlciBtdXN0IGJlIGJldHdlZW4gPzEgYW5kID8lZAB0b28gbWFueSBTUUwgdmFyaWFibGVzAHRvbyBtYW55IGFyZ3VtZW50cyBvbiBmdW5jdGlvbiAlVABESVNUSU5DVCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3aW5kb3cgZnVuY3Rpb25zADAAc3ludGF4IGVycm9yIGFmdGVyIGNvbHVtbiBuYW1lICIlLipzIgBubyBzdWNoIGluZGV4OiAlUwBpbmRleCBhc3NvY2lhdGVkIHdpdGggVU5JUVVFIG9yIFBSSU1BUlkgS0VZIGNvbnN0cmFpbnQgY2Fubm90IGJlIGRyb3BwZWQAREVMRVRFIEZST00gJVEuJXMgV0hFUkUgbmFtZT0lUSBBTkQgdHlwZT0naW5kZXgnAC0lVABmYXN0AG5vcm1hbABleGNsdXNpdmUAbm90IGEgd3JpdGFibGUgZGlyZWN0b3J5AFNhZmV0eSBsZXZlbCBtYXkgbm90IGJlIGNoYW5nZWQgaW5zaWRlIGEgdHJhbnNhY3Rpb24AaXNzaXNpaQBpc3Npc2kAaWlzWABpc2lYAGMAdQBpc2lzaQBpc3MAaXMAaWlzc3Nzc3MATk9ORQBzaVgAKioqIGluIGRhdGFiYXNlICVzICoqKgoATlVMTCB2YWx1ZSBpbiAlcy4lcwBDSEVDSyBjb25zdHJhaW50IGZhaWxlZCBpbiAlcwByb3cgACBtaXNzaW5nIGZyb20gaW5kZXggAG5vbi11bmlxdWUgZW50cnkgaW4gaW5kZXggAHdyb25nICMgb2YgZW50cmllcyBpbiBpbmRleCAAb2sAVVRGOABVVEYtOABVVEYtMTZsZQBVVEYtMTZiZQBVVEYxNmxlAFVURjE2YmUAVVRGLTE2AFVURjE2AHVuc3VwcG9ydGVkIGVuY29kaW5nOiAlcwACAAEAXwAAAAIAAABeAAEAUQEBAGZ1bGwAcmVzdGFydABBTkFMWVpFICIldyIuIiV3IgBub25lAGluY3JlbWVudGFsAHRlbXBvcmFyeSBzdG9yYWdlIGNhbm5vdCBiZSBjaGFuZ2VkIGZyb20gd2l0aGluIGEgdHJhbnNhY3Rpb24AAQAAAAEBAwJTRVQgTlVMTABTRVQgREVGQVVMVABDQVNDQURFAFJFU1RSSUNUAE5PIEFDVElPTgAlXwAATElLRSBvciBHTE9CIHBhdHRlcm4gdG9vIGNvbXBsZXgARVNDQVBFIGV4cHJlc3Npb24gbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIASU5TRVJUIElOVE8gJVEuJXMgVkFMVUVTKCd0cmlnZ2VyJywlUSwlUSwwLCdDUkVBVEUgVFJJR0dFUiAlcScpAHR5cGU9J3RyaWdnZXInIEFORCBuYW1lPSclcScAdGVtcG9yYXJ5IHRyaWdnZXIgbWF5IG5vdCBoYXZlIHF1YWxpZmllZCBuYW1lAGNhbm5vdCBjcmVhdGUgdHJpZ2dlcnMgb24gdmlydHVhbCB0YWJsZXMAdHJpZ2dlciAlVCBhbHJlYWR5IGV4aXN0cwBjYW5ub3QgY3JlYXRlIHRyaWdnZXIgb24gc3lzdGVtIHRhYmxlAGNhbm5vdCBjcmVhdGUgJXMgdHJpZ2dlciBvbiB2aWV3OiAlUwBCRUZPUkUAQUZURVIAY2Fubm90IGNyZWF0ZSBJTlNURUFEIE9GIHRyaWdnZXIgb24gdGFibGU6ICVTAG5vIHN1Y2ggdHJpZ2dlcjogJVMAc3FsaXRlX2F0dGFjaAB0b28gbWFueSBhdHRhY2hlZCBkYXRhYmFzZXMgLSBtYXggJWQAZGF0YWJhc2UgJXMgaXMgYWxyZWFkeSBpbiB1c2UAZGF0YWJhc2UgaXMgYWxyZWFkeSBhdHRhY2hlZAB1bmFibGUgdG8gb3BlbiBkYXRhYmFzZTogJXMAZmlsZToAbG9jYWxob3N0AGludmFsaWQgdXJpIGF1dGhvcml0eTogJS4qcwB2ZnMAY2FjaGUAc2hhcmVkAHByaXZhdGUAcm8AcncAcndjAG5vIHN1Y2ggJXMgbW9kZTogJXMAJXMgbW9kZSBub3QgYWxsb3dlZDogJXMAbm8gc3VjaCB2ZnM6ICVzAHNxbGl0ZV9kZXRhY2gAbm8gc3VjaCBkYXRhYmFzZTogJXMAY2Fubm90IGRldGFjaCBkYXRhYmFzZSAlcwBkYXRhYmFzZSAlcyBpcyBsb2NrZWQAdW5hYmxlIHRvIGlkZW50aWZ5IHRoZSBvYmplY3QgdG8gYmUgcmVpbmRleGVkAHRibCxpZHgsc3RhdABzcWxpdGVfc3RhdDMAc3FsaXRlX3N0YXQ0AENSRUFURSBUQUJMRSAlUS4lcyglcykAc3FsaXRlXF8lAEJCQgBzdGF0X2luaXQAc3RhdF9wdXNoAHN0YXRfZ2V0ACVsbHUAICVsbHUAdGhlcmUgaXMgYWxyZWFkeSBhbm90aGVyIHRhYmxlIG9yIGluZGV4IHdpdGggdGhpcyBuYW1lOiAlcwB2aWV3ICVzIG1heSBub3QgYmUgYWx0ZXJlZABVUERBVEUgIiV3Ii4lcyBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV90YWJsZSglUSwgdHlwZSwgbmFtZSwgc3FsLCAlUSwgJVEsICVkKSBXSEVSRSAodHlwZSE9J2luZGV4JyBPUiB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSlBTkQgICBuYW1lIE5PVCBMSUtFICdzcWxpdGVfJSUnAFVQREFURSAlUS4lcyBTRVQgdGJsX25hbWUgPSAlUSwgbmFtZSA9IENBU0UgV0hFTiB0eXBlPSd0YWJsZScgVEhFTiAlUSBXSEVOIG5hbWUgTElLRSAnc3FsaXRlX2F1dG9pbmRleCUlJyBBTkQgdHlwZT0naW5kZXgnIFRIRU4gJ3NxbGl0ZV9hdXRvaW5kZXhfJyB8fCAlUSB8fCBzdWJzdHIobmFtZSwlZCsxOCkgRUxTRSBuYW1lIEVORCBXSEVSRSB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSBBTkQgKHR5cGU9J3RhYmxlJyBPUiB0eXBlPSdpbmRleCcgT1IgdHlwZT0ndHJpZ2dlcicpOwBVUERBVEUgIiV3Ii5zcWxpdGVfc2VxdWVuY2Ugc2V0IG5hbWUgPSAlUSBXSEVSRSBuYW1lID0gJVEAVVBEQVRFIHNxbGl0ZV90ZW1wX21hc3RlciBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV90YWJsZSglUSwgdHlwZSwgbmFtZSwgc3FsLCAlUSwgJVEsIDEpLCB0YmxfbmFtZSA9IENBU0UgV0hFTiB0YmxfbmFtZT0lUSBDT0xMQVRFIG5vY2FzZSBBTkQgICAgICAgICAgIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAxKSBUSEVOICVRIEVMU0UgdGJsX25hbWUgRU5EIFdIRVJFIHR5cGUgSU4gKCd2aWV3JywgJ3RyaWdnZXInKQB0YWJsZSAlcyBtYXkgbm90IGJlIGFsdGVyZWQAU0VMRUNUIDEgRlJPTSAiJXciLiVzIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZV8lJScgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScgQU5EIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAlZCk9TlVMTCAAU0VMRUNUIDEgRlJPTSB0ZW1wLiVzIFdIRVJFIG5hbWUgTk9UIExJS0UgJ3NxbGl0ZV8lJScgQU5EIHNxbCBOT1QgTElLRSAnY3JlYXRlIHZpcnR1YWwlJScgQU5EIHNxbGl0ZV9yZW5hbWVfdGVzdCglUSwgc3FsLCB0eXBlLCBuYW1lLCAxKT1OVUxMIABDYW5ub3QgYWRkIGEgUFJJTUFSWSBLRVkgY29sdW1uAENhbm5vdCBhZGQgYSBVTklRVUUgY29sdW1uAENhbm5vdCBhZGQgYSBSRUZFUkVOQ0VTIGNvbHVtbiB3aXRoIG5vbi1OVUxMIGRlZmF1bHQgdmFsdWUAQ2Fubm90IGFkZCBhIE5PVCBOVUxMIGNvbHVtbiB3aXRoIGRlZmF1bHQgdmFsdWUgTlVMTABDYW5ub3QgYWRkIGEgY29sdW1uIHdpdGggbm9uLWNvbnN0YW50IGRlZmF1bHQAVVBEQVRFICIldyIuJXMgU0VUIHNxbCA9IHN1YnN0cihzcWwsMSwlZCkgfHwgJywgJyB8fCAlUSB8fCBzdWJzdHIoc3FsLCVkKSBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQgbmFtZSA9ICVRAHZpcnR1YWwgdGFibGVzIG1heSBub3QgYmUgYWx0ZXJlZABDYW5ub3QgYWRkIGEgY29sdW1uIHRvIGEgdmlldwBzcWxpdGVfYWx0ZXJ0YWJfJXMAVVBEQVRFICIldyIuJXMgU0VUIHNxbCA9IHNxbGl0ZV9yZW5hbWVfY29sdW1uKHNxbCwgdHlwZSwgbmFtZSwgJVEsICVRLCAlZCwgJVEsICVkLCAlZCkgV0hFUkUgbmFtZSBOT1QgTElLRSAnc3FsaXRlXyUlJyBBTkQgKHR5cGUgIT0gJ2luZGV4JyBPUiB0YmxfbmFtZSA9ICVRKSBBTkQgc3FsIE5PVCBMSUtFICdjcmVhdGUgdmlydHVhbCUlJwBVUERBVEUgdGVtcC4lcyBTRVQgc3FsID0gc3FsaXRlX3JlbmFtZV9jb2x1bW4oc3FsLCB0eXBlLCBuYW1lLCAlUSwgJVEsICVkLCAlUSwgJWQsIDEpIFdIRVJFIHR5cGUgSU4gKCd0cmlnZ2VyJywgJ3ZpZXcnKQB2aXJ0dWFsIHRhYmxlAGNhbm5vdCByZW5hbWUgY29sdW1ucyBvZiAlcyAiJXMiAENSRUFURSBWSVJUVUFMIFRBQkxFICVUAFVQREFURSAlUS4lcyBTRVQgdHlwZT0ndGFibGUnLCBuYW1lPSVRLCB0YmxfbmFtZT0lUSwgcm9vdHBhZ2U9MCwgc3FsPSVRIFdIRVJFIHJvd2lkPSMlZABuYW1lPSclcScgQU5EIHR5cGU9J3RhYmxlJwBkdXBsaWNhdGUgV0lUSCB0YWJsZSBuYW1lOiAlcwBQQVJUSVRJT04gY2xhdXNlAE9SREVSIEJZIGNsYXVzZQBmcmFtZSBzcGVjaWZpY2F0aW9uAGNhbm5vdCBvdmVycmlkZSAlcyBvZiB3aW5kb3c6ICVzAHVuc3VwcG9ydGVkIGZyYW1lIHNwZWNpZmljYXRpb24AaW5jb21wbGV0ZSBpbnB1dABzcWxpdGVfY29tcGlsZW9wdGlvbl91c2VkAHNxbGl0ZV9jb21waWxlb3B0aW9uX2dldAB1bmxpa2VseQBsaWtlbGlob29kAGxpa2VseQBsdHJpbQBydHJpbQB0cmltAHR5cGVvZgBsZW5ndGgAaW5zdHIAcHJpbnRmAHVuaWNvZGUAY2hhcgBhYnMAcm91bmQAdXBwZXIAbG93ZXIAaGV4AGlmbnVsbAByYW5kb20AcmFuZG9tYmxvYgBudWxsaWYAc3FsaXRlX3ZlcnNpb24Ac3FsaXRlX3NvdXJjZV9pZABzcWxpdGVfbG9nAHF1b3RlAGxhc3RfaW5zZXJ0X3Jvd2lkAGNoYW5nZXMAdG90YWxfY2hhbmdlcwByZXBsYWNlAHplcm9ibG9iAHN1YnN0cgBzdW0AdG90YWwAYXZnAGNvdW50AGdyb3VwX2NvbmNhdABjb2FsZXNjZQABdGV4dABibG9iAGludGVnZXIgb3ZlcmZsb3cAJS4qZgAlIS4yMGUAc3FsaXRlX3JlbmFtZV9jb2x1bW4Ac3FsaXRlX3JlbmFtZV90YWJsZQBzcWxpdGVfcmVuYW1lX3Rlc3QAIiV3IgBlcnJvciBpbiAlcyAlcyVzOiAlcwAgYWZ0ZXIgcmVuYW1lAGxhc3RfdmFsdWUAYXJndW1lbnQgb2YgbnRpbGUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIAanVsaWFuZGF5AGRhdGUAdGltZQBkYXRldGltZQBzdHJmdGltZQBjdXJyZW50X3RpbWUAY3VycmVudF90aW1lc3RhbXAAY3VycmVudF9kYXRlAG5vdwA0MGYtMjFhLTIxZAAyMGM6MjBlADIwZQAyMGI6MjBlAG5vbi1kZXRlcm1pbmlzdGljIGZ1bmN0aW9uIGluIGluZGV4IGV4cHJlc3Npb24gb3IgQ0hFQ0sgY29uc3RyYWludABsb2NhbHRpbWUAdW5peGVwb2NoAHV0YwB3ZWVrZGF5IABzdGFydCBvZiAAbW9udGgAeWVhcgBkYXkAbG9jYWwgdGltZSB1bmF2YWlsYWJsZQBzZWNvbmQAbWludXRlAGhvdXIAJTA0ZC0lMDJkLSUwMmQAJTAyZDolMDJkOiUwMmQAJTA0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQAJTAyZAAlMDYuM2YAJTAzZAAlMDRkAGZhaWxlZCB0byBhbGxvY2F0ZSAldSBieXRlcyBvZiBtZW1vcnkAZmFpbGVkIG1lbW9yeSByZXNpemUgJXUgdG8gJXUgYnl0ZXMAdW5hYmxlIHRvIGNsb3NlIGR1ZSB0byB1bmZpbmFsaXplZCBzdGF0ZW1lbnRzIG9yIHVuZmluaXNoZWQgYmFja3VwcwBub3QgYW4gZXJyb3IAU1FMIGxvZ2ljIGVycm9yAGFjY2VzcyBwZXJtaXNzaW9uIGRlbmllZABxdWVyeSBhYm9ydGVkAGRhdGFiYXNlIGlzIGxvY2tlZABkYXRhYmFzZSB0YWJsZSBpcyBsb2NrZWQAYXR0ZW1wdCB0byB3cml0ZSBhIHJlYWRvbmx5IGRhdGFiYXNlAGludGVycnVwdGVkAGRpc2sgSS9PIGVycm9yAGRhdGFiYXNlIGRpc2sgaW1hZ2UgaXMgbWFsZm9ybWVkAHVua25vd24gb3BlcmF0aW9uAGRhdGFiYXNlIG9yIGRpc2sgaXMgZnVsbAB1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSBmaWxlAGxvY2tpbmcgcHJvdG9jb2wAY29uc3RyYWludCBmYWlsZWQAZGF0YXR5cGUgbWlzbWF0Y2gAYmFkIHBhcmFtZXRlciBvciBvdGhlciBBUEkgbWlzdXNlAGxhcmdlIGZpbGUgc3VwcG9ydCBpcyBkaXNhYmxlZABhdXRob3JpemF0aW9uIGRlbmllZABjb2x1bW4gaW5kZXggb3V0IG9mIHJhbmdlAGZpbGUgaXMgbm90IGEgZGF0YWJhc2UAbm90aWZpY2F0aW9uIG1lc3NhZ2UAd2FybmluZyBtZXNzYWdlAHVua25vd24gZXJyb3IAYWJvcnQgZHVlIHRvIFJPTExCQUNLAGFub3RoZXIgcm93IGF2YWlsYWJsZQBubyBtb3JlIHJvd3MgYXZhaWxhYmxlAHVuYWJsZSB0byBkZWxldGUvbW9kaWZ5IHVzZXItZnVuY3Rpb24gZHVlIHRvIGFjdGl2ZSBzdGF0ZW1lbnRzAHVuYWJsZSB0byB1c2UgZnVuY3Rpb24gJXMgaW4gdGhlIHJlcXVlc3RlZCBjb250ZXh0AG1haW4AaW52YWxpZABSVFJJTQBNQVRDSABhdXRvbWF0aWMgZXh0ZW5zaW9uIGxvYWRpbmcgZmFpbGVkOiAlcwBzaW1wbGUAcG9ydGVyAHVuaWNvZGU2MQBmdHMzX3Rva2VuaXplcgBzbmlwcGV0AG9mZnNldHMAbWF0Y2hpbmZvAGZ0czMAZnRzNAByZW1vdmVfZGlhY3JpdGljcz0xAHJlbW92ZV9kaWFjcml0aWNzPTAAcmVtb3ZlX2RpYWNyaXRpY3M9MgB0b2tlbmNoYXJzPQBzZXBhcmF0b3JzPQBmdHM0YXV4AENSRUFURSBUQUJMRSB4KHRlcm0sIGNvbCwgZG9jdW1lbnRzLCBvY2N1cnJlbmNlcywgbGFuZ3VhZ2VpZCBISURERU4pAGludmFsaWQgYXJndW1lbnRzIHRvIGZ0czRhdXggY29uc3RydWN0b3IAREVMRVRFIEZST00gJVEuJyVxX2NvbnRlbnQnIFdIRVJFIHJvd2lkID0gPwBTRUxFQ1QgTk9UIEVYSVNUUyhTRUxFQ1QgZG9jaWQgRlJPTSAlUS4nJXFfY29udGVudCcgV0hFUkUgcm93aWQhPT8pAERFTEVURSBGUk9NICVRLiclcV9jb250ZW50JwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnbWVudHMnAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInAERFTEVURSBGUk9NICVRLiclcV9kb2NzaXplJwBERUxFVEUgRlJPTSAlUS4nJXFfc3RhdCcAU0VMRUNUICVzIFdIRVJFIHJvd2lkPT8AU0VMRUNUIChTRUxFQ1QgbWF4KGlkeCkgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8pICsgMQBSRVBMQUNFIElOVE8gJVEuJyVxX3NlZ21lbnRzJyhibG9ja2lkLCBibG9jaykgVkFMVUVTKD8sID8pAFNFTEVDVCBjb2FsZXNjZSgoU0VMRUNUIG1heChibG9ja2lkKSBGUk9NICVRLiclcV9zZWdtZW50cycpICsgMSwgMSkAUkVQTEFDRSBJTlRPICVRLiclcV9zZWdkaXInIFZBTFVFUyg/LD8sPyw/LD8sPykAU0VMRUNUIGlkeCwgc3RhcnRfYmxvY2ssIGxlYXZlc19lbmRfYmxvY2ssIGVuZF9ibG9jaywgcm9vdCBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPyBPUkRFUiBCWSBpZHggQVNDAFNFTEVDVCBpZHgsIHN0YXJ0X2Jsb2NrLCBsZWF2ZXNfZW5kX2Jsb2NrLCBlbmRfYmxvY2ssIHJvb3QgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID9PUkRFUiBCWSBsZXZlbCBERVNDLCBpZHggQVNDAFNFTEVDVCBjb3VudCgqKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsID0gPwBTRUxFQ1QgbWF4KGxldmVsKSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBERUxFVEUgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8AREVMRVRFIEZST00gJVEuJyVxX3NlZ21lbnRzJyBXSEVSRSBibG9ja2lkIEJFVFdFRU4gPyBBTkQgPwBJTlNFUlQgSU5UTyAlUS4nJXFfY29udGVudCcgVkFMVUVTKCVzKQBERUxFVEUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQgPSA/AFJFUExBQ0UgSU5UTyAlUS4nJXFfZG9jc2l6ZScgVkFMVUVTKD8sPykAU0VMRUNUIHNpemUgRlJPTSAlUS4nJXFfZG9jc2l6ZScgV0hFUkUgZG9jaWQ9PwBTRUxFQ1QgdmFsdWUgRlJPTSAlUS4nJXFfc3RhdCcgV0hFUkUgaWQ9PwBSRVBMQUNFIElOVE8gJVEuJyVxX3N0YXQnIFZBTFVFUyg/LD8pAERFTEVURSBGUk9NICVRLiclcV9zZWdkaXInIFdIRVJFIGxldmVsIEJFVFdFRU4gPyBBTkQgPwBTRUxFQ1QgPyBVTklPTiBTRUxFQ1QgbGV2ZWwgLyAoMTAyNCAqID8pIEZST00gJVEuJyVxX3NlZ2RpcicAU0VMRUNUIGxldmVsLCBjb3VudCgqKSBBUyBjbnQgRlJPTSAlUS4nJXFfc2VnZGlyJyAgIEdST1VQIEJZIGxldmVsIEhBVklORyBjbnQ+PT8gIE9SREVSIEJZIChsZXZlbCAlJSAxMDI0KSBBU0MgTElNSVQgMQBTRUxFQ1QgMiAqIHRvdGFsKDEgKyBsZWF2ZXNfZW5kX2Jsb2NrIC0gc3RhcnRfYmxvY2spICAgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCA9ID8gQU5EIGlkeCA8ID8AREVMRVRFIEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgaWR4ID0gPyBXSEVSRSBsZXZlbD0/IEFORCBpZHg9PwBTRUxFQ1QgaWR4LCBzdGFydF9ibG9jaywgbGVhdmVzX2VuZF9ibG9jaywgZW5kX2Jsb2NrLCByb290IEZST00gJVEuJyVxX3NlZ2RpcicgV0hFUkUgbGV2ZWwgPSA/IEFORCBpZHggPSA/AFVQREFURSAlUS4nJXFfc2VnZGlyJyBTRVQgc3RhcnRfYmxvY2sgPSA/LCByb290ID0gP1dIRVJFIGxldmVsID0gPyBBTkQgaWR4ID0gPwBTRUxFQ1QgMSBGUk9NICVRLiclcV9zZWdtZW50cycgV0hFUkUgYmxvY2tpZD0/IEFORCBibG9jayBJUyBOVUxMAFNFTEVDVCBpZHggRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbD0/IE9SREVSIEJZIDEgQVNDAFNFTEVDVCBtYXgoIGxldmVsICUlIDEwMjQgKSBGUk9NICVRLiclcV9zZWdkaXInAFNFTEVDVCBsZXZlbCwgaWR4LCBlbmRfYmxvY2sgRlJPTSAlUS4nJXFfc2VnZGlyJyBXSEVSRSBsZXZlbCBCRVRXRUVOID8gQU5EID8gT1JERVIgQlkgbGV2ZWwgREVTQywgaWR4IEFTQwBVUERBVEUgT1IgRkFJTCAlUS4nJXFfc2VnZGlyJyBTRVQgbGV2ZWw9LTEsaWR4PT8gV0hFUkUgbGV2ZWw9PyBBTkQgaWR4PT8AVVBEQVRFIE9SIEZBSUwgJVEuJyVxX3NlZ2RpcicgU0VUIGxldmVsPT8gV0hFUkUgbGV2ZWw9LTEAJXNfc2VnbWVudHMAYmxvY2sAYXJndW1lbnQgdHlwZSBtaXNtYXRjaABmdHMzdG9rZW5pemUgZGlzYWJsZWQAdW5rbm93biB0b2tlbml6ZXI6ICVzAHRva2VuaXplAHByZWZpeABjb21wcmVzcwB1bmNvbXByZXNzAG9yZGVyAGNvbnRlbnQAbGFuZ3VhZ2VpZABub3RpbmRleGVkAHVucmVjb2duaXplZCBtYXRjaGluZm86ICVzAGFzYwB1bnJlY29nbml6ZWQgb3JkZXI6ICVzAHVucmVjb2duaXplZCBwYXJhbWV0ZXI6ICVzAGVycm9yIHBhcnNpbmcgcHJlZml4IHBhcmFtZXRlcjogJXMAbWlzc2luZyAlcyBwYXJhbWV0ZXIgaW4gZnRzNCBjb25zdHJ1Y3RvcgB1bmtub3duIHRva2VuaXplcgBTRUxFQ1QgKiBGUk9NICVRLiVRAGRvY2lkACwlcyh4LidjJWQlcScpACwgeC4lUQBsYW5naWQALCB4LiclcScAIEZST00gJyVxJy4nJXElcycgQVMgeABfY29udGVudAAsJXMoPykALCA/AGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVkAJXosICdjJWQlcScAJXosIGxhbmdpZABDUkVBVEUgVEFCTEUgJVEuJyVxX2NvbnRlbnQnKCVzKQBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ21lbnRzJyhibG9ja2lkIElOVEVHRVIgUFJJTUFSWSBLRVksIGJsb2NrIEJMT0IpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX3NlZ2RpcicobGV2ZWwgSU5URUdFUixpZHggSU5URUdFUixzdGFydF9ibG9jayBJTlRFR0VSLGxlYXZlc19lbmRfYmxvY2sgSU5URUdFUixlbmRfYmxvY2sgSU5URUdFUixyb290IEJMT0IsUFJJTUFSWSBLRVkobGV2ZWwsIGlkeCkpOwBDUkVBVEUgVEFCTEUgJVEuJyVxX2RvY3NpemUnKGRvY2lkIElOVEVHRVIgUFJJTUFSWSBLRVksIHNpemUgQkxPQik7AENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICVRLiclcV9zdGF0JyhpZCBJTlRFR0VSIFBSSU1BUlkgS0VZLCB2YWx1ZSBCTE9CKTsAUFJBR01BICVRLnBhZ2Vfc2l6ZQBfX2xhbmdpZAAlUSwgACV6JVEsIABDUkVBVEUgVEFCTEUgeCglcyAlUSBISURERU4sIGRvY2lkIEhJRERFTiwgJVEgSElEREVOKQBERVNDAEFTQwBEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfc2VnbWVudHMnO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9zZWdkaXInO0RST1AgVEFCTEUgSUYgRVhJU1RTICVRLiclcV9kb2NzaXplJztEUk9QIFRBQkxFIElGIEVYSVNUUyAlUS4nJXFfc3RhdCc7JXMgRFJPUCBUQUJMRSBJRiBFWElTVFMgJVEuJyVxX2NvbnRlbnQnOwAtLQBTRUxFQ1QgJXMgV0hFUkUgcm93aWQgQkVUV0VFTiAlbGxkIEFORCAlbGxkIE9SREVSIEJZIHJvd2lkICVzAFNFTEVDVCAlcyBPUkRFUiBCWSByb3dpZCAlcwBGVFMgZXhwcmVzc2lvbiB0cmVlIGlzIHRvbyBsYXJnZSAobWF4aW11bSBkZXB0aCAlZCkAbWFsZm9ybWVkIE1BVENIIGV4cHJlc3Npb246IFslc10AT1IAQU5EAE5PVABORUFSAFNFTEVDVCAlcyBXSEVSRSByb3dpZCA9ID8AZnRzM2N1cnNvcgByZWJ1aWxkAGludGVncml0eS1jaGVjawBtZXJnZT0AYXV0b21lcmdlPQAlbGxkICVsbGQAU0VMRUNUICVzACVzX3N0YXQAPGI+ADwvYj4APGI+Li4uPC9iPgB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHRvIGZ1bmN0aW9uIHNuaXBwZXQoKQBpbGxlZ2FsIGZpcnN0IGFyZ3VtZW50IHRvICVzACVkICVkICVkICVkIABJbmRleCBvcHRpbWl6ZWQASW5kZXggYWxyZWFkeSBvcHRpbWFsAFNBVkVQT0lOVCBmdHMzAFJFTEVBU0UgZnRzMwBST0xMQkFDSyBUTyBmdHMzAHBjeAB1bnJlY29nbml6ZWQgbWF0Y2hpbmZvIHJlcXVlc3Q6ICVjAEFMVEVSIFRBQkxFICVRLiclcV9jb250ZW50JyAgUkVOQU1FIFRPICclcV9jb250ZW50JzsAQUxURVIgVEFCTEUgJVEuJyVxX2RvY3NpemUnICBSRU5BTUUgVE8gJyVxX2RvY3NpemUnOwBBTFRFUiBUQUJMRSAlUS4nJXFfc3RhdCcgIFJFTkFNRSBUTyAnJXFfc3RhdCc7AEFMVEVSIFRBQkxFICVRLiclcV9zZWdtZW50cycgUkVOQU1FIFRPICclcV9zZWdtZW50cyc7AEFMVEVSIFRBQkxFICVRLiclcV9zZWdkaXInICAgUkVOQU1FIFRPICclcV9zZWdkaXInOwBkb2NzaXplAHNlZ2RpcgBzZWdtZW50cwBmdHMzdG9rZW5pemUAQ1JFQVRFIFRBQkxFIHgoaW5wdXQsIHRva2VuLCBzdGFydCwgZW5kLCBwb3NpdGlvbikAcnRyZWVub2RlAHJ0cmVlZGVwdGgAcnRyZWVjaGVjawBydHJlZQBydHJlZV9pMzIAeyVsbGQAICVnAH0ASW52YWxpZCBhcmd1bWVudCB0byBydHJlZWRlcHRoKCkAd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBmdW5jdGlvbiBydHJlZWNoZWNrKCkAU0VMRUNUICogRlJPTSAlUS4nJXFfcm93aWQnAFNjaGVtYSBjb3JydXB0IG9yIG5vdCBhbiBydHJlZQBfcm93aWQAX3BhcmVudABFTkQAJXolcyV6AE5vZGUgJWxsZCBpcyB0b28gc21hbGwgKCVkIGJ5dGVzKQBSdHJlZSBkZXB0aCBvdXQgb2YgcmFuZ2UgKCVkKQBOb2RlICVsbGQgaXMgdG9vIHNtYWxsIGZvciBjZWxsIGNvdW50IG9mICVkICglZCBieXRlcykAU0VMRUNUIGRhdGEgRlJPTSAlUS4nJXFfbm9kZScgV0hFUkUgbm9kZW5vPT8ATm9kZSAlbGxkIG1pc3NpbmcgZnJvbSBkYXRhYmFzZQBEaW1lbnNpb24gJWQgb2YgY2VsbCAlZCBvbiBub2RlICVsbGQgaXMgY29ycnVwdABEaW1lbnNpb24gJWQgb2YgY2VsbCAlZCBvbiBub2RlICVsbGQgaXMgY29ycnVwdCByZWxhdGl2ZSB0byBwYXJlbnQAU0VMRUNUIHBhcmVudG5vZGUgRlJPTSAlUS4nJXFfcGFyZW50JyBXSEVSRSBub2Rlbm89PzEAU0VMRUNUIG5vZGVubyBGUk9NICVRLiclcV9yb3dpZCcgV0hFUkUgcm93aWQ9PzEATWFwcGluZyAoJWxsZCAtPiAlbGxkKSBtaXNzaW5nIGZyb20gJXMgdGFibGUAJV9yb3dpZAAlX3BhcmVudABGb3VuZCAoJWxsZCAtPiAlbGxkKSBpbiAlcyB0YWJsZSwgZXhwZWN0ZWQgKCVsbGQgLT4gJWxsZCkAU0VMRUNUIGNvdW50KCopIEZST00gJVEuJyVxJXMnAFdyb25nIG51bWJlciBvZiBlbnRyaWVzIGluICUlJXMgdGFibGUgLSBleHBlY3RlZCAlbGxkLCBhY3R1YWwgJWxsZABXcm9uZyBudW1iZXIgb2YgY29sdW1ucyBmb3IgYW4gcnRyZWUgdGFibGUAVG9vIGZldyBjb2x1bW5zIGZvciBhbiBydHJlZSB0YWJsZQBUb28gbWFueSBjb2x1bW5zIGZvciBhbiBydHJlZSB0YWJsZQBBdXhpbGlhcnkgcnRyZWUgY29sdW1ucyBtdXN0IGJlIGxhc3QAQ1JFQVRFIFRBQkxFIHgoJXMALCVzACk7AFNFTEVDVCBsZW5ndGgoZGF0YSkgRlJPTSAnJXEnLiclcV9ub2RlJyBXSEVSRSBub2Rlbm8gPSAxAHVuZGVyc2l6ZSBSVHJlZSBibG9icyBpbiAiJXFfbm9kZSIASU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnJXEnLiclcV9ub2RlJyBWQUxVRVMoPzEsID8yKQBERUxFVEUgRlJPTSAnJXEnLiclcV9ub2RlJyBXSEVSRSBub2Rlbm8gPSA/MQBTRUxFQ1Qgbm9kZW5vIEZST00gJyVxJy4nJXFfcm93aWQnIFdIRVJFIHJvd2lkID0gPzEASU5TRVJUIE9SIFJFUExBQ0UgSU5UTyAnJXEnLiclcV9yb3dpZCcgVkFMVUVTKD8xLCA/MikAREVMRVRFIEZST00gJyVxJy4nJXFfcm93aWQnIFdIRVJFIHJvd2lkID0gPzEAU0VMRUNUIHBhcmVudG5vZGUgRlJPTSAnJXEnLiclcV9wYXJlbnQnIFdIRVJFIG5vZGVubyA9ID8xAElOU0VSVCBPUiBSRVBMQUNFIElOVE8gJyVxJy4nJXFfcGFyZW50JyBWQUxVRVMoPzEsID8yKQBERUxFVEUgRlJPTSAnJXEnLiclcV9wYXJlbnQnIFdIRVJFIG5vZGVubyA9ID8xAENSRUFURSBUQUJMRSAiJXciLiIld19yb3dpZCIocm93aWQgSU5URUdFUiBQUklNQVJZIEtFWSxub2Rlbm8ALGElZAApO0NSRUFURSBUQUJMRSAiJXciLiIld19ub2RlIihub2Rlbm8gSU5URUdFUiBQUklNQVJZIEtFWSxkYXRhKTsAQ1JFQVRFIFRBQkxFICIldyIuIiV3X3BhcmVudCIobm9kZW5vIElOVEVHRVIgUFJJTUFSWSBLRVkscGFyZW50bm9kZSk7AElOU0VSVCBJTlRPICIldyIuIiV3X25vZGUiVkFMVUVTKDEsemVyb2Jsb2IoJWQpKQBJTlNFUlQgSU5UTyIldyIuIiV3X3Jvd2lkIihyb3dpZCxub2Rlbm8pVkFMVUVTKD8xLD8yKU9OIENPTkZMSUNUKHJvd2lkKURPIFVQREFURSBTRVQgbm9kZW5vPWV4Y2x1ZGVkLm5vZGVubwBTRUxFQ1QgKiBGUk9NICIldyIuIiV3X3Jvd2lkIiBXSEVSRSByb3dpZD0/MQBVUERBVEUgIiV3Ii4iJXdfcm93aWQiU0VUIABhJWQ9Y29hbGVzY2UoPyVkLGElZCkAYSVkPT8lZAAgV0hFUkUgcm93aWQ9PzEAU0VMRUNUIHN0YXQgRlJPTSAlUS5zcWxpdGVfc3RhdDEgV0hFUkUgdGJsID0gJyVxX3Jvd2lkJwBEUk9QIFRBQkxFICclcScuJyVxX25vZGUnO0RST1AgVEFCTEUgJyVxJy4nJXFfcm93aWQnO0RST1AgVEFCTEUgJyVxJy4nJXFfcGFyZW50JzsAJXNfbm9kZQBkYXRhAFJ0cmVlTWF0Y2hBcmcAVU5JUVVFIGNvbnN0cmFpbnQgZmFpbGVkOiAlcy4lcwBydHJlZSBjb25zdHJhaW50IGZhaWxlZDogJXMuKCVzPD0lcykAQUxURVIgVEFCTEUgJVEuJyVxX25vZGUnICAgUkVOQU1FIFRPICIld19ub2RlIjtBTFRFUiBUQUJMRSAlUS4nJXFfcGFyZW50JyBSRU5BTUUgVE8gIiV3X3BhcmVudCI7QUxURVIgVEFCTEUgJVEuJyVxX3Jvd2lkJyAgUkVOQU1FIFRPICIld19yb3dpZCI7AG5vZGUAdW5hYmxlIHRvIGRlbGV0ZS9tb2RpZnkgY29sbGF0aW9uIHNlcXVlbmNlIGR1ZSB0byBhY3RpdmUgc3RhdGVtZW50cwBtaXN1c2UAX1JPV0lEXwBPSUQAQ09NUElMRVI9Y2xhbmctNi4wLjEARElTQUJMRV9MRlMARU5BQkxFX0ZUUzMARU5BQkxFX0ZUUzNfUEFSRU5USEVTSVMARU5BQkxFX1JUUkVFAE9NSVRfTE9BRF9FWFRFTlNJT04AVEhSRUFEU0FGRT0wAHN0ZGV2AHZhcmlhbmNlAG1vZGUAbWVkaWFuAGxvd2VyX3F1YXJ0aWxlAHVwcGVyX3F1YXJ0aWxlAGFyZ2M9PTEAc3FsaXRlLXNyYy9zcWxpdGUtYW1hbGdhbWF0aW9uLTMyODAwMDAvZXh0ZW5zaW9uLWZ1bmN0aW9ucy5jAG1vZGVTdGVwAHZhcmlhbmNlU3RlcABhY29zAGFzaW4AYXRhbgBhdG4yAGF0YW4yAGFjb3NoAGFzaW5oAGF0YW5oAGRpZmZlcmVuY2UAZGVncmVlcwByYWRpYW5zAGNvcwBzaW4AdGFuAGNvdABjb3NoAHNpbmgAdGFuaABjb3RoAGV4cABsb2cAbG9nMTAAcG93ZXIAc2lnbgBzcXJ0AHNxdWFyZQBjZWlsAGZsb29yAHBpAHJlcGxpY2F0ZQBjaGFyaW5kZXgAbGVmdHN0cgByaWdodHN0cgByZXZlcnNlAHByb3BlcgBwYWRsAHBhZHIAcGFkYwBzdHJmaWx0ZXIAYXJnYz09MgBzdHJmaWx0ZXJGdW5jAHBhZGNGdW5jAGRvbWFpbiBlcnJvcgBwYWRyRnVuYwBwYWRsRnVuYwBwcm9wZXJGdW5jADE9PWFyZ2MAcmV2ZXJzZUZ1bmMAcmlnaHRGdW5jAGxlZnRGdW5jAGFyZ2M9PTMgfHxhcmdjPT0yAGNoYXJpbmRleEZ1bmMAZmxvb3JGdW5jAGNlaWxGdW5jAHNxdWFyZUZ1bmMAc3FydEZ1bmMAc2lnbkZ1bmMAcG93ZXJGdW5jAGxvZzEwRnVuYwBsb2dGdW5jAGV4cEZ1bmMAY290aEZ1bmMAdGFuaEZ1bmMAc2luaEZ1bmMAY29zaEZ1bmMAY290RnVuYwB0YW5GdW5jAHNpbkZ1bmMAY29zRnVuYwBkZWcycmFkRnVuYwByYWQyZGVnRnVuYwBkaWZmZXJlbmNlRnVuYwA/MDAwAGF0YW5oRnVuYwBhc2luaEZ1bmMAYWNvc2hGdW5jAGF0bjJGdW5jAGF0YW5GdW5jAGFzaW5GdW5jAGFjb3NGdW5jAC9wcm9jL3NlbGYvZmQv\";\nvar I={};\nfunction mb(a){if(mb.pa){var b=D[a>>2];var c=D[b>>2]}else mb.pa=!0,I.USER=I.LOGNAME=\"web_user\",I.PATH=\"/\",I.PWD=\"/\",I.HOME=\"/home/web_user\",I.LANG=\"C.UTF-8\",I._=f.thisProgram,c=gb?Wa(1024):Fa(1024),b=gb?Wa(256):Fa(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in I)if(\"string\"===typeof I[e]){var g=e+\"=\"+I[e];a.push(g);d+=g.length}if(1024<d)throw Error(\"Environment size exceeded TOTAL_ENV_SIZE!\");for(e=0;e<a.length;e++){d=g=a[e];for(var k=c,n=0;n<d.length;++n)l[k++>>0]=d.charCodeAt(n);l[k>>0]=0;D[b+\n4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function nb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function ob(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];\".\"===e?a.splice(d,1):\"..\"===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift(\"..\");return a}function qb(a){var b=\"/\"===a.charAt(0),c=\"/\"===a.substr(-1);(a=ob(a.split(\"/\").filter(function(a){return!!a}),!b).join(\"/\"))||b||(a=\".\");a&&c&&(a+=\"/\");return(b?\"/\":\"\")+a}\nfunction rb(a){var b=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return\".\";b&&(b=b.substr(0,b.length-1));return a+b}function sb(a){if(\"/\"===a)return\"/\";var b=a.lastIndexOf(\"/\");return-1===b?a:a.substr(b+1)}function tb(){var a=Array.prototype.slice.call(arguments,0);return qb(a.join(\"/\"))}function m(a,b){return qb(a+\"/\"+b)}\nfunction xb(){for(var a=\"\",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:\"/\";if(\"string\"!==typeof b)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!b)return\"\";a=b+\"/\"+a;b=\"/\"===b.charAt(0)}a=ob(a.split(\"/\").filter(function(a){return!!a}),!b).join(\"/\");return(b?\"/\":\"\")+a||\".\"}var yb=[];function zb(a,b){yb[a]={input:[],output:[],wa:b};Ab(a,Bb)}\nvar Bb={open:function(a){var b=yb[a.node.rdev];if(!b)throw new J(K.Fa);a.tty=b;a.seekable=!1},close:function(a){a.tty.wa.flush(a.tty)},flush:function(a){a.tty.wa.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.wa.$a)throw new J(K.Ra);for(var e=0,g=0;g<d;g++){try{var k=a.tty.wa.$a(a.tty)}catch(n){throw new J(K.Oa);}if(void 0===k&&0===e)throw new J(K.fb);if(null===k||void 0===k)break;e++;b[c+g]=k}e&&(a.node.timestamp=Date.now());return e},write:function(a,b,c,d){if(!a.tty||!a.tty.wa.La)throw new J(K.Ra);\ntry{for(var e=0;e<d;e++)a.tty.wa.La(a.tty,b[c+e])}catch(g){throw new J(K.Oa);}d&&(a.node.timestamp=Date.now());return e}},Cb={$a:function(a){if(!a.input.length){var b=null;if(y){var c=new Buffer(256),d=0,e=process.stdin.fd;if(\"win32\"!=process.platform){var g=!1;try{e=fs.openSync(\"/dev/stdin\",\"r\"),g=!0}catch(k){}}try{d=fs.readSync(e,c,0,256,null)}catch(k){if(-1!=k.toString().indexOf(\"EOF\"))d=0;else throw k;}g&&fs.closeSync(e);0<d?b=c.slice(0,d).toString(\"utf-8\"):b=null}else\"undefined\"!=typeof window&&\n\"function\"==typeof window.prompt?(b=window.prompt(\"Input: \"),null!==b&&(b+=\"\\n\")):\"function\"==typeof readline&&(b=readline(),null!==b&&(b+=\"\\n\"));if(!b)return null;a.input=ba(b,!0)}return a.input.shift()},La:function(a,b){null===b||10===b?(Da(u(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(Da(u(a.output,0)),a.output=[])}},Db={La:function(a,b){null===b||10===b?(Ea(u(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&\n(Ea(u(a.output,0)),a.output=[])}},L={na:null,ka:function(){return L.createNode(null,\"/\",16895,0)},createNode:function(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new J(K.ib);L.na||(L.na={dir:{node:{ma:L.ba.ma,ia:L.ba.ia,lookup:L.ba.lookup,ya:L.ba.ya,rename:L.ba.rename,unlink:L.ba.unlink,rmdir:L.ba.rmdir,readdir:L.ba.readdir,symlink:L.ba.symlink},stream:{ra:L.ea.ra}},file:{node:{ma:L.ba.ma,ia:L.ba.ia},stream:{ra:L.ea.ra,read:L.ea.read,write:L.ea.write,Sa:L.ea.Sa,Ca:L.ea.Ca,Da:L.ea.Da}},link:{node:{ma:L.ba.ma,\nia:L.ba.ia,readlink:L.ba.readlink},stream:{}},Va:{node:{ma:L.ba.ma,ia:L.ba.ia},stream:Eb}});c=Fb(a,b,c,d);M(c.mode)?(c.ba=L.na.dir.node,c.ea=L.na.dir.stream,c.da={}):32768===(c.mode&61440)?(c.ba=L.na.file.node,c.ea=L.na.file.stream,c.ha=0,c.da=null):40960===(c.mode&61440)?(c.ba=L.na.link.node,c.ea=L.na.link.stream):8192===(c.mode&61440)&&(c.ba=L.na.Va.node,c.ea=L.na.Va.stream);c.timestamp=Date.now();a&&(a.da[b]=c);return c},ne:function(a){if(a.da&&a.da.subarray){for(var b=[],c=0;c<a.ha;++c)b.push(a.da[c]);\nreturn b}return a.da},oe:function(a){return a.da?a.da.subarray?a.da.subarray(0,a.ha):new Uint8Array(a.da):new Uint8Array},Wa:function(a,b){var c=a.da?a.da.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.da,a.da=new Uint8Array(b),0<a.ha&&a.da.set(c.subarray(0,a.ha),0))},Cb:function(a,b){if(a.ha!=b)if(0==b)a.da=null,a.ha=0;else{if(!a.da||a.da.subarray){var c=a.da;a.da=new Uint8Array(new ArrayBuffer(b));c&&a.da.set(c.subarray(0,Math.min(b,a.ha)))}else if(a.da||(a.da=\n[]),a.da.length>b)a.da.length=b;else for(;a.da.length<b;)a.da.push(0);a.ha=b}},ba:{ma:function(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;M(a.mode)?b.size=4096:32768===(a.mode&61440)?b.size=a.ha:40960===(a.mode&61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.sa=4096;b.blocks=Math.ceil(b.size/b.sa);return b},ia:function(a,b){void 0!==b.mode&&(a.mode=\nb.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&L.Cb(a,b.size)},lookup:function(){throw Gb[K.gb];},ya:function(a,b,c,d){return L.createNode(a,b,c,d)},rename:function(a,b,c){if(M(a.mode)){try{var d=N(b,c)}catch(g){}if(d)for(var e in d.da)throw new J(K.Qa);}delete a.parent.da[a.name];a.name=c;b.da[c]=a;a.parent=b},unlink:function(a,b){delete a.da[b]},rmdir:function(a,b){var c=N(a,b),d;for(d in c.da)throw new J(K.Qa);delete a.da[b]},readdir:function(a){var b=[\".\",\"..\"],c;for(c in a.da)a.da.hasOwnProperty(c)&&\nb.push(c);return b},symlink:function(a,b,c){a=L.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(40960!==(a.mode&61440))throw new J(K.ja);return a.link}},ea:{read:function(a,b,c,d,e){var g=a.node.da;if(e>=a.node.ha)return 0;a=Math.min(a.node.ha-e,d);if(8<a&&g.subarray)b.set(g.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=g[e+d];return a},write:function(a,b,c,d,e,g){g=!1;if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.da||a.da.subarray)){if(g)return a.da=b.subarray(c,\nc+d),a.ha=d;if(0===a.ha&&0===e)return a.da=new Uint8Array(b.subarray(c,c+d)),a.ha=d;if(e+d<=a.ha)return a.da.set(b.subarray(c,c+d),e),d}L.Wa(a,e+d);if(a.da.subarray&&b.subarray)a.da.set(b.subarray(c,c+d),e);else for(g=0;g<d;g++)a.da[e+g]=b[c+g];a.ha=Math.max(a.ha,e+d);return d},ra:function(a,b,c){1===c?b+=a.position:2===c&&32768===(a.node.mode&61440)&&(b+=a.node.ha);if(0>b)throw new J(K.ja);return b},Sa:function(a,b,c){L.Wa(a.node,b+c);a.node.ha=Math.max(a.node.ha,b+c)},Ca:function(a,b,c,d,e,g,k){if(32768!==\n(a.node.mode&61440))throw new J(K.Fa);c=a.node.da;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0<e||e+d<a.node.ha)c.subarray?c=c.subarray(e,e+d):c=Array.prototype.slice.call(c,e,e+d);a=!0;d=Wa(d);if(!d)throw new J(K.Pa);b.set(c,d)}else a=!1,d=c.byteOffset;return{Bb:d,Ga:a}},Da:function(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new J(K.Fa);if(e&2)return 0;L.ea.write(a,b,0,d,c,!1);return 0}}},O={Ba:!1,Eb:function(){O.Ba=!!process.platform.match(/^win/);var a=process.binding(\"constants\");a.fs&&\n(a=a.fs);O.Xa={1024:a.O_APPEND,64:a.O_CREAT,128:a.O_EXCL,0:a.O_RDONLY,2:a.O_RDWR,4096:a.O_SYNC,512:a.O_TRUNC,1:a.O_WRONLY}},Ua:function(a){return Buffer.pa?Buffer.from(a):new Buffer(a)},ka:function(a){assert(y);return O.createNode(null,\"/\",O.Za(a.Ka.root),0)},createNode:function(a,b,c){if(!M(c)&&32768!==(c&61440)&&40960!==(c&61440))throw new J(K.ja);a=Fb(a,b,c);a.ba=O.ba;a.ea=O.ea;return a},Za:function(a){try{var b=fs.lstatSync(a);O.Ba&&(b.mode=b.mode|(b.mode&292)>>2)}catch(c){if(!c.code)throw c;\nthrow new J(K[c.code]);}return b.mode},la:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.ka.Ka.root);b.reverse();return tb.apply(null,b)},ub:function(a){a&=-2656257;var b=0,c;for(c in O.Xa)a&c&&(b|=O.Xa[c],a^=c);if(a)throw new J(K.ja);return b},ba:{ma:function(a){a=O.la(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}O.Ba&&!b.sa&&(b.sa=4096);O.Ba&&!b.blocks&&(b.blocks=(b.size+b.sa-1)/b.sa|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink,\nuid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,sa:b.sa,blocks:b.blocks}},ia:function(a,b){var c=O.la(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},lookup:function(a,b){var c=m(O.la(a),b);c=O.Za(c);return O.createNode(a,b,c)},ya:function(a,b,c,d){a=O.createNode(a,b,c,d);b=O.la(a);try{M(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,\"\",{mode:a.mode})}catch(e){if(!e.code)throw e;\nthrow new J(K[e.code]);}return a},rename:function(a,b,c){a=O.la(a);b=m(O.la(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},unlink:function(a,b){a=m(O.la(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},rmdir:function(a,b){a=m(O.la(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},readdir:function(a){a=O.la(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new J(K[b.code]);}},symlink:function(a,\nb,c){a=m(O.la(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},readlink:function(a){var b=O.la(a);try{return b=fs.readlinkSync(b),b=Hb.relative(Hb.resolve(a.ka.Ka.root),b)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}}},ea:{open:function(a){var b=O.la(a.node);try{32768===(a.node.mode&61440)&&(a.za=fs.openSync(b,O.ub(a.flags)))}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.za&&fs.closeSync(a.za)}catch(b){if(!b.code)throw b;\nthrow new J(K[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.za,O.Ua(b.buffer),c,d,e)}catch(g){throw new J(K[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.za,O.Ua(b.buffer),c,d,e)}catch(g){throw new J(K[g.code]);}},ra:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.za).size}catch(d){throw new J(K[d.code]);}if(0>b)throw new J(K.ja);return b}}},Ib=null,Jb={},P=[],Kb=1,Q=null,Lb=!0,R={},J=null,\nGb={};function S(a,b){a=xb(\"/\",a);b=b||{};if(!a)return{path:\"\",node:null};var c={Ya:!0,Ma:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.Ma)throw new J(40);a=ob(a.split(\"/\").filter(function(a){return!!a}),!1);var e=Ib;c=\"/\";for(d=0;d<a.length;d++){var g=d===a.length-1;if(g&&b.parent)break;e=N(e,a[d]);c=m(c,a[d]);e.ua&&(!g||g&&b.Ya)&&(e=e.ua.root);if(!g||b.ta)for(g=0;40960===(e.mode&61440);)if(e=Mb(c),c=xb(rb(c),e),e=S(c,{Ma:b.Ma}).node,40<g++)throw new J(40);}return{path:c,node:e}}\nfunction Nb(a){for(var b;;){if(a===a.parent)return a=a.ka.bb,b?\"/\"!==a[a.length-1]?a+\"/\"+b:a+b:a;b=b?a.name+\"/\"+b:a.name;a=a.parent}}function Ob(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%Q.length}function Pb(a){var b=Ob(a.parent.id,a.name);a.va=Q[b];Q[b]=a}function Qb(a){var b=Ob(a.parent.id,a.name);if(Q[b]===a)Q[b]=a.va;else for(b=Q[b];b;){if(b.va===a){b.va=a.va;break}b=b.va}}\nfunction N(a,b){var c;if(c=(c=Rb(a,\"x\"))?c:a.ba.lookup?0:13)throw new J(c,a);for(c=Q[Ob(a.id,b)];c;c=c.va){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ba.lookup(a,b)}\nfunction Fb(a,b,c,d){Sb||(Sb=function(a,b,c,d){a||(a=this);this.parent=a;this.ka=a.ka;this.ua=null;this.id=Kb++;this.name=b;this.mode=c;this.ba={};this.ea={};this.rdev=d},Sb.prototype={},Object.defineProperties(Sb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Sb(a,b,c,d);Pb(a);return a}\nfunction M(a){return 16384===(a&61440)}var Tb={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};function Ub(a){var b=[\"r\",\"w\",\"rw\"][a&3];a&512&&(b+=\"w\");return b}function Rb(a,b){if(Lb)return 0;if(-1===b.indexOf(\"r\")||a.mode&292){if(-1!==b.indexOf(\"w\")&&!(a.mode&146)||-1!==b.indexOf(\"x\")&&!(a.mode&73))return 13}else return 13;return 0}function Vb(a,b){try{return N(a,b),17}catch(c){}return Rb(a,\"wx\")}\nfunction Wb(a,b,c){try{var d=N(a,b)}catch(e){return e.fa}if(a=Rb(a,\"wx\"))return a;if(c){if(!M(d.mode))return 20;if(d===d.parent||\"/\"===Nb(d))return 16}else if(M(d.mode))return 21;return 0}function Xb(a){var b=4096;for(a=a||0;a<=b;a++)if(!P[a])return a;throw new J(24);}\nfunction Yb(a,b){Zb||(Zb=function(){},Zb.prototype={},Object.defineProperties(Zb.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new Zb,d;for(d in a)c[d]=a[d];a=c;b=Xb(b);a.fd=b;return P[b]=a}var Eb={open:function(a){a.ea=Jb[a.node.rdev].ea;a.ea.open&&a.ea.open(a)},ra:function(){throw new J(29);}};function Ab(a,b){Jb[a]={ea:b}}\nfunction $b(a,b){var c=\"/\"===b,d=!b;if(c&&Ib)throw new J(16);if(!c&&!d){var e=S(b,{Ya:!1});b=e.path;e=e.node;if(e.ua)throw new J(16);if(!M(e.mode))throw new J(20);}b={type:a,Ka:{},bb:b,Ab:[]};a=a.ka(b);a.ka=b;b.root=a;c?Ib=a:e&&(e.ua=b,e.ka&&e.ka.Ab.push(b))}function ja(a,b,c){var d=S(a,{parent:!0}).node;a=sb(a);if(!a||\".\"===a||\"..\"===a)throw new J(22);var e=Vb(d,a);if(e)throw new J(e);if(!d.ba.ya)throw new J(1);return d.ba.ya(d,a,b,c)}function T(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)}\nfunction ac(a,b,c){\"undefined\"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function bc(a,b){if(!xb(a))throw new J(2);var c=S(b,{parent:!0}).node;if(!c)throw new J(2);b=sb(b);var d=Vb(c,b);if(d)throw new J(d);if(!c.ba.symlink)throw new J(1);c.ba.symlink(c,b,a)}\nfunction ua(a){var b=S(a,{parent:!0}).node,c=sb(a),d=N(b,c),e=Wb(b,c,!1);if(e)throw new J(e);if(!b.ba.unlink)throw new J(1);if(d.ua)throw new J(16);try{R.willDeletePath&&R.willDeletePath(a)}catch(g){console.log(\"FS.trackingDelegate['willDeletePath']('\"+a+\"') threw an exception: \"+g.message)}b.ba.unlink(b,c);Qb(d);try{if(R.onDeletePath)R.onDeletePath(a)}catch(g){console.log(\"FS.trackingDelegate['onDeletePath']('\"+a+\"') threw an exception: \"+g.message)}}\nfunction Mb(a){a=S(a).node;if(!a)throw new J(2);if(!a.ba.readlink)throw new J(22);return xb(Nb(a.parent),a.ba.readlink(a))}function sa(a,b){a=S(a,{ta:!b}).node;if(!a)throw new J(2);if(!a.ba.ma)throw new J(1);return a.ba.ma(a)}function cc(a){return sa(a,!0)}function ka(a,b){var c;\"string\"===typeof a?c=S(a,{ta:!0}).node:c=a;if(!c.ba.ia)throw new J(1);c.ba.ia(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})}\nfunction dc(a){var b;\"string\"===typeof a?b=S(a,{ta:!0}).node:b=a;if(!b.ba.ia)throw new J(1);b.ba.ia(b,{timestamp:Date.now()})}function ec(a,b){if(0>b)throw new J(22);var c;\"string\"===typeof a?c=S(a,{ta:!0}).node:c=a;if(!c.ba.ia)throw new J(1);if(M(c.mode))throw new J(21);if(32768!==(c.mode&61440))throw new J(22);if(a=Rb(c,\"w\"))throw new J(a);c.ba.ia(c,{size:b,timestamp:Date.now()})}\nfunction p(a,b,c,d){if(\"\"===a)throw new J(2);if(\"string\"===typeof b){var e=Tb[b];if(\"undefined\"===typeof e)throw Error(\"Unknown file open mode: \"+b);b=e}c=b&64?(\"undefined\"===typeof c?438:c)&4095|32768:0;if(\"object\"===typeof a)var g=a;else{a=qb(a);try{g=S(a,{ta:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new J(17);}else g=ja(a,c,0),e=!0;if(!g)throw new J(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!M(g.mode))throw new J(20);if(!e&&(c=g?40960===(g.mode&61440)?40:M(g.mode)&&\n(\"r\"!==Ub(b)||b&512)?21:Rb(g,Ub(b)):2))throw new J(c);b&512&&ec(g,0);b&=-641;d=Yb({node:g,path:Nb(g),flags:b,seekable:!0,position:0,ea:g.ea,Fb:[],error:!1},d);d.ea.open&&d.ea.open(d);!f.logReadFiles||b&1||(vc||(vc={}),a in vc||(vc[a]=1,console.log(\"FS.trackingDelegate error on read file: \"+a)));try{R.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),R.onOpenFile(a,g))}catch(k){console.log(\"FS.trackingDelegate['onOpenFile']('\"+a+\"', flags) threw an exception: \"+k.message)}return d}\nfunction ma(a){if(null===a.fd)throw new J(9);a.Ja&&(a.Ja=null);try{a.ea.close&&a.ea.close(a)}catch(b){throw b;}finally{P[a.fd]=null}a.fd=null}function Gc(a,b,c){if(null===a.fd)throw new J(9);if(!a.seekable||!a.ea.ra)throw new J(29);if(0!=c&&1!=c&&2!=c)throw new J(22);a.position=a.ea.ra(a,b,c);a.Fb=[]}\nfunction ta(a,b,c,d,e){if(0>d||0>e)throw new J(22);if(null===a.fd)throw new J(9);if(1===(a.flags&2097155))throw new J(9);if(M(a.node.mode))throw new J(21);if(!a.ea.read)throw new J(22);var g=\"undefined\"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new J(29);b=a.ea.read(a,b,c,d,e);g||(a.position+=b);return b}\nfunction la(a,b,c,d,e,g){if(0>d||0>e)throw new J(22);if(null===a.fd)throw new J(9);if(0===(a.flags&2097155))throw new J(9);if(M(a.node.mode))throw new J(21);if(!a.ea.write)throw new J(22);a.flags&1024&&Gc(a,0,2);var k=\"undefined\"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new J(29);b=a.ea.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&R.onWriteToFile)R.onWriteToFile(a.path)}catch(n){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+a.path+\"') threw an exception: \"+n.message)}return b}\nfunction Hc(){J||(J=function(a,b){this.node=b;this.Db=function(a){this.fa=a};this.Db(a);this.message=\"FS error\";this.stack&&Object.defineProperty(this,\"stack\",{value:Error().stack,writable:!0})},J.prototype=Error(),J.prototype.constructor=J,[2].forEach(function(a){Gb[a]=new J(a);Gb[a].stack=\"<generic error, no stack>\"}))}var Ic;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c}\nfunction Jc(a,b,c){a=m(\"/dev\",a);var d=ia(!!b,!!c);Kc||(Kc=64);var e=Kc++<<8|0;Ab(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k<e;k++){try{var n=b()}catch(Pa){throw new J(5);}if(void 0===n&&0===g)throw new J(11);if(null===n||void 0===n)break;g++;c[d+k]=n}g&&(a.node.timestamp=Date.now());return g},write:function(a,b,d,e){for(var g=0;g<e;g++)try{c(b[d+g])}catch(ha){throw new J(5);}e&&(a.node.timestamp=Date.now());return g}});\nac(a,d,e)}\nvar Kc,U={},Sb,Zb,vc,K={ib:1,gb:2,Hd:3,wc:4,Oa:5,Ra:6,Mb:7,Xc:8,Na:9,bc:10,fb:11,Rd:11,Pa:12,eb:13,pc:14,ld:15,Zb:16,oc:17,Sd:18,Fa:19,hb:20,yc:21,ja:22,Sc:23,Kc:24,qd:25,Od:26,qc:27,gd:28,Gd:29,Cd:30,Lc:31,wd:32,lc:33,jb:34,bd:42,tc:43,cc:44,Ac:45,Bc:46,Cc:47,Ic:48,Pd:49,Vc:50,zc:51,ic:35,Yc:37,Sb:52,Vb:53,Td:54,Tc:55,Wb:56,Xb:57,jc:35,Yb:59,jd:60,Wc:61,Ld:62,hd:63,cd:64,dd:65,Bd:66,Zc:67,Pb:68,Id:69,dc:70,xd:71,Nc:72,mc:73,Ub:74,rd:76,Tb:77,Ad:78,Dc:79,Ec:80,Hc:81,Gc:82,Fc:83,kd:38,Qa:39,Oc:36,\nJc:40,sd:95,vd:96,hc:104,Uc:105,Qb:97,zd:91,od:88,ed:92,Ed:108,fc:111,Nb:98,ec:103,Rc:101,Pc:100,Md:110,rc:112,sc:113,vc:115,Rb:114,kc:89,Mc:90,yd:93,Fd:94,Ob:99,Qc:102,xc:106,md:107,Nd:109,Qd:87,nc:122,Jd:116,pd:95,$c:123,uc:84,td:75,$b:125,nd:131,ud:130,Kd:86},Lc={};\nfunction Mc(a,b,c){try{var d=a(b)}catch(e){if(e&&e.node&&qb(b)!==qb(Nb(e.node)))return-K.hb;throw e;}D[c>>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var V=0;\nfunction W(){V+=4;return D[V-4>>2]}function X(){return F(W())}function Y(){var a=P[W()];if(!a)throw new J(K.Na);return a}function Nc(a,b){V=b;return 0}function Ha(){return l.length}\nfunction Oc(a){try{var b=new ArrayBuffer(a);if(b.byteLength!=a)return!1;(new Int8Array(b)).set(l)}catch(c){return!1}f._emscripten_replace_memory(b);l=new Int8Array(b);Ka=new Int16Array(b);D=new Int32Array(b);E=new Uint8Array(b);new Uint16Array(b);new Uint32Array(b);La=new Float32Array(b);Ma=new Float64Array(b);return buffer=b}\nfunction Ia(a){if(2130706432<a)return!1;for(var b=Math.max(Ha(),16777216);b<a;)536870912>=b?b=Za(2*b):b=Math.min(Za((3*b+2147483648)/4),2130706432);a=Oc(b);if(!a||a.byteLength!=b)return!1;$a();return!0}function Pc(a){if(0===a)return 0;a=F(a);if(!I.hasOwnProperty(a))return 0;Pc.pa&&fa(Pc.pa);a=I[a];var b=oa(a)+1,c=Wa(b);c&&r(a,l,c,b);Pc.pa=c;return Pc.pa}function Qc(a){return Math.log(a)/Math.LN10}r(\"GMT\",E,60384,4);\nfunction Rc(){function a(a){return(a=a.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?a[1]:\"GMT\"}if(!Rc.pa){Rc.pa=!0;D[Sc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Tc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ca(ba(d));e=ca(ba(e));c.getTimezoneOffset()<b.getTimezoneOffset()?(D[Uc()>>2]=d,D[Uc()+4>>2]=e):(D[Uc()>>2]=e,D[Uc()+4>>2]=d)}}\nfunction Vc(a,b){Rc();a=new Date(1E3*D[a>>2]);D[b>>2]=a.getSeconds();D[b+4>>2]=a.getMinutes();D[b+8>>2]=a.getHours();D[b+12>>2]=a.getDate();D[b+16>>2]=a.getMonth();D[b+20>>2]=a.getFullYear()-1900;D[b+24>>2]=a.getDay();var c=new Date(a.getFullYear(),0,1);D[b+28>>2]=(a.getTime()-c.getTime())/864E5|0;D[b+36>>2]=-(60*a.getTimezoneOffset());var d=(new Date(2E3,6,1)).getTimezoneOffset();c=c.getTimezoneOffset();a=(d!=c&&a.getTimezoneOffset()==Math.min(c,d))|0;D[b+32>>2]=a;a=D[Uc()+(a?4:0)>>2];D[b+40>>2]=\na;return b}function Wc(a){a/=1E3;if((ya||x)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b<a;);else for(b=Date.now();Date.now()-b<a;);return 0}f._usleep=Wc;Hc();Q=Array(4096);$b(L,\"/\");T(\"/tmp\");T(\"/home\");T(\"/home/web_user\");\n(function(){T(\"/dev\");Ab(259,{read:function(){return 0},write:function(a,b,c,k){return k}});ac(\"/dev/null\",259);zb(1280,Cb);zb(1536,Db);ac(\"/dev/tty\",1280);ac(\"/dev/tty1\",1536);if(\"object\"===typeof crypto&&\"function\"===typeof crypto.getRandomValues){var a=new Uint8Array(1);var b=function(){crypto.getRandomValues(a);return a[0]}}else if(y)try{var c=require(\"crypto\");b=function(){return c.randomBytes(1)[0]}}catch(d){}b||(b=function(){C(\"random_device\")});Jc(\"random\",b);Jc(\"urandom\",b);T(\"/dev/shm\");\nT(\"/dev/shm/tmp\")})();T(\"/proc\");T(\"/proc/self\");T(\"/proc/self/fd\");$b({ka:function(){var a=Fb(\"/proc/self\",\"fd\",16895,73);a.ba={lookup:function(a,c){var b=P[+c];if(!b)throw new J(9);a={parent:null,ka:{bb:\"fake\"},ba:{readlink:function(){return b.path}}};return a.parent=a}};return a}},\"/proc/self/fd\");if(y){var fs=require(\"fs\"),Hb=require(\"path\");O.Eb()}var Xc=!1;function ba(a,b){var c=Array(oa(a)+1);a=r(a,c,0,c.length);b&&(c.length=a);return c}\nfunction Ca(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];255<d&&(Xc&&assert(!1,\"Character code \"+d+\" (\"+String.fromCharCode(d)+\")  at offset \"+c+\" not in 0x00-0xFF.\"),d&=255);b.push(String.fromCharCode(d))}return b.join(\"\")}\nvar Yc=\"function\"===typeof atob?atob:function(a){var b=\"\",c=0;a=a.replace(/[^A-Za-z0-9\\+\\/=]/g,\"\");do{var d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var g=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));var k=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(a.charAt(c++));d=d<<2|e>>4;\ne=(e&15)<<4|g>>2;var n=(g&3)<<6|k;b+=String.fromCharCode(d);64!==g&&(b+=String.fromCharCode(e));64!==k&&(b+=String.fromCharCode(n))}while(c<a.length);return b};\nfunction B(a){if(String.prototype.startsWith?a.startsWith(kb):0===a.indexOf(kb)){a=a.slice(kb.length);if(\"boolean\"===typeof y&&y){try{var b=Buffer.from(a,\"base64\")}catch(g){b=new Buffer(a,\"base64\")}var c=new Uint8Array(b.buffer,b.byteOffset,b.byteLength)}else try{var d=Yc(a),e=new Uint8Array(d.length);for(b=0;b<d.length;++b)e[b]=d.charCodeAt(b);c=e}catch(g){throw Error(\"Converting base64 string to bytes failed.\");}return c}}\nvar Zc={Math:Math,Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Float32Array:Float32Array,Float64Array:Float64Array,Infinity:Infinity},bd={a:C,b:function(a){Ja=a},c:function(){return Ja},d:function(a){return t[a]()},e:function(a,b){return t[a](b)},f:function(a,b,c){return t[a](b,c)},g:function(a,b,c,d){return t[a](b,c,d)},h:function(a,b,c,d,e){return t[a](b,c,d,e)},i:function(a,b,c,d,e,g){return t[a](b,c,d,e,g)},j:function(a,b,c,d,e,\ng,k){return t[a](b,c,d,e,g,k)},k:function(a,b){t[a](b)},l:function(a,b,c){t[a](b,c)},m:function(a,b,c,d){t[a](b,c,d)},n:function(a,b,c,d,e){t[a](b,c,d,e)},o:function(a,b,c,d,e,g,k){t[a](b,c,d,e,g,k)},p:function(a,b,c,d){C(\"Assertion failed: \"+F(a)+\", at: \"+[b?F(b):\"unknown filename\",c,d?F(d):\"unknown function\"])},q:mb,r:nb,s:function(a,b){V=b;try{var c=X();ua(c);return 0}catch(d){return\"undefined\"!==typeof U&&d instanceof J||C(d),-d.fa}},t:function(a,b){V=b;try{return Y(),0}catch(c){return\"undefined\"!==\ntypeof U&&c instanceof J||C(c),-c.fa}},u:function(a,b){V=b;try{var c=Y();W();var d=W(),e=W(),g=W();Gc(c,d,g);D[e>>2]=c.position;c.Ja&&0===d&&0===g&&(c.Ja=null);return 0}catch(k){return\"undefined\"!==typeof U&&k instanceof J||C(k),-k.fa}},v:function(a,b){V=b;try{var c=X(),d=W();ka(c,d);return 0}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},w:function(a,b){V=b;try{var c=W(),d=W();if(0===d)return-K.ja;if(d<oa(\"/\")+1)return-K.jb;r(\"/\",E,c,d);return c}catch(e){return\"undefined\"!==\ntypeof U&&e instanceof J||C(e),-e.fa}},x:function(a,b){V=b;try{var c=W(),d=W(),e=W(),g=W(),k=W(),n=W();n<<=12;a=!1;if(-1===k){var v=$c(16384,d);if(!v)return-K.Pa;ad(v,0,d);a=!0}else{var A=P[k];if(!A)return-K.Na;b=E;if(1===(A.flags&2097155))throw new J(13);if(!A.ea.Ca)throw new J(19);var ha=A.ea.Ca(A,b,c,d,n,e,g);v=ha.Bb;a=ha.Ga}Lc[v]={zb:v,yb:d,Ga:a,fd:k,flags:g};return v}catch(da){return\"undefined\"!==typeof U&&da instanceof J||C(da),-da.fa}},y:function(a,b){V=b;try{var c=W();W();var d=W();W();var e=\nP[c];if(!e)throw new J(9);if(0===(e.flags&2097155))throw new J(22);ec(e.node,d);return 0}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},z:function(a,b){V=b;try{var c=X(),d=W();return Mc(sa,c,d)}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},A:function(a,b){V=b;try{var c=X(),d=W();return Mc(cc,c,d)}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},B:function(a,b){V=b;try{var c=Y(),d=W();return Mc(sa,c.path,d)}catch(e){return\"undefined\"!==\ntypeof U&&e instanceof J||C(e),-e.fa}},C:function(a,b){V=b;return 42},D:function(a,b){return Nc(a,b)},E:Nc,F:function(a,b){V=b;try{var c=W();W();W();var d=P[c];if(!d)throw new J(9);dc(d.node);return 0}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},G:function(a,b){V=b;try{var c=X();W();W();dc(c);return 0}catch(d){return\"undefined\"!==typeof U&&d instanceof J||C(d),-d.fa}},H:function(a,b){V=b;try{var c=Y();switch(W()){case 0:var d=W();return 0>d?-K.ja:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0;\ncase 3:return c.flags;case 4:return d=W(),c.flags|=d,0;case 12:return d=W(),Ka[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-K.ja;case 9:return nb(K.ja),-1;default:return-K.ja}}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},I:function(a,b){V=b;try{var c=Y(),d=W(),e=W();return ta(c,l,d,e)}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},J:function(a,b){V=b;try{var c=X();var d=W();if(d&-8)var e=-K.ja;else{var g=S(c,{ta:!0}).node;a=\"\";d&4&&(a+=\"r\");\nd&2&&(a+=\"w\");d&1&&(a+=\"x\");e=a&&Rb(g,a)?-K.eb:0}return e}catch(k){return\"undefined\"!==typeof U&&k instanceof J||C(k),-k.fa}},K:function(a,b){V=b;try{var c=X(),d=W();a=c;a=qb(a);\"/\"===a[a.length-1]&&(a=a.substr(0,a.length-1));T(a,d);return 0}catch(e){return\"undefined\"!==typeof U&&e instanceof J||C(e),-e.fa}},L:function(a,b){V=b;try{var c=Y(),d=W(),e=W();return la(c,l,d,e)}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},M:function(a,b){V=b;try{var c=X(),d=S(c,{parent:!0}).node,\ne=sb(c),g=N(d,e),k=Wb(d,e,!0);if(k)throw new J(k);if(!d.ba.rmdir)throw new J(1);if(g.ua)throw new J(16);try{R.willDeletePath&&R.willDeletePath(c)}catch(n){console.log(\"FS.trackingDelegate['willDeletePath']('\"+c+\"') threw an exception: \"+n.message)}d.ba.rmdir(d,e);Qb(g);try{if(R.onDeletePath)R.onDeletePath(c)}catch(n){console.log(\"FS.trackingDelegate['onDeletePath']('\"+c+\"') threw an exception: \"+n.message)}return 0}catch(n){return\"undefined\"!==typeof U&&n instanceof J||C(n),-n.fa}},N:function(a,b){V=\nb;try{var c=X(),d=W(),e=W();return p(c,d,e).fd}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},O:function(a,b){V=b;try{var c=Y();ma(c);return 0}catch(d){return\"undefined\"!==typeof U&&d instanceof J||C(d),-d.fa}},P:function(a,b){V=b;try{var c=X(),d=W();var e=W();if(0>=e)var g=-K.ja;else{var k=Mb(c),n=Math.min(e,oa(k)),v=l[d+n];r(k,E,d,e+1);l[d+n]=v;g=n}return g}catch(A){return\"undefined\"!==typeof U&&A instanceof J||C(A),-A.fa}},Q:function(a,b){V=b;try{var c=W(),d=W(),e=Lc[c];if(!e)return 0;\nif(d===e.yb){var g=P[e.fd],k=e.flags,n=new Uint8Array(E.subarray(c,c+d));g&&g.ea.Da&&g.ea.Da(g,n,0,d,k);Lc[c]=null;e.Ga&&fa(e.zb)}return 0}catch(v){return\"undefined\"!==typeof U&&v instanceof J||C(v),-v.fa}},R:function(a,b){V=b;try{var c=W(),d=W(),e=P[c];if(!e)throw new J(9);ka(e.node,d);return 0}catch(g){return\"undefined\"!==typeof U&&g instanceof J||C(g),-g.fa}},S:Ha,T:function(a,b,c){E.set(E.subarray(b,b+c),a)},U:Ia,V:Pc,W:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0},\nX:Qc,Y:function(a){return Qc(a)},Z:function(){C(\"trap!\")},_:function(a){return Vc(a,60336)},$:Vc,aa:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Wc(1E6*c+a/1E3)},ab:function(a){switch(a){case 30:return 16384;case 85:return 130048;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;\ncase 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;\ncase 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return\"object\"===typeof navigator?navigator.hardwareConcurrency||1:1}nb(22);return-1},\nac:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},ad:Rc,ae:Wc,af:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=F(a);try{b=c;var d=S(a,{ta:!0}).node;d.ba.ia(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof J)){a+=\" : \";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d=\"(no stack trace available)\";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+=\"\\n\"+f.extraStackTrace());d=Ya(d);throw a+d;}nb(a.fa);return-1}},\nag:function(){C(\"OOM\")},ah:Oc,ai:60480,aj:Ga};// EMSCRIPTEN_START_ASM\nvar Z=(/** @suppress {uselessCode} */ function(global,env,buffer) {\n\"almost asm\";var a=new global.Int8Array(buffer),b=new global.Int16Array(buffer),c=new global.Int32Array(buffer),d=new global.Uint8Array(buffer),e=new global.Uint16Array(buffer),f=new global.Float32Array(buffer),g=new global.Float64Array(buffer),h=env.ai|0,i=env.aj|0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=global.Infinity,s=global.Math.floor,t=global.Math.abs,u=global.Math.sqrt,v=global.Math.pow,w=global.Math.cos,x=global.Math.sin,y=global.Math.tan,z=global.Math.acos,A=global.Math.asin,B=global.Math.atan,C=global.Math.atan2,D=global.Math.exp,E=global.Math.log,F=global.Math.ceil,G=global.Math.imul,H=global.Math.min,I=global.Math.clz32,J=env.a,K=env.b,L=env.c,M=env.d,N=env.e,O=env.f,P=env.g,Q=env.h,R=env.i,S=env.j,T=env.k,U=env.l,V=env.m,W=env.n,X=env.o,Y=env.p,Z=env.q,_=env.r,$=env.s,aa=env.t,ba=env.u,ca=env.v,da=env.w,ea=env.x,fa=env.y,ga=env.z,ha=env.A,ia=env.B,ja=env.C,ka=env.D,la=env.E,ma=env.F,na=env.G,oa=env.H,pa=env.I,qa=env.J,ra=env.K,sa=env.L,ta=env.M,ua=env.N,va=env.O,wa=env.P,xa=env.Q,ya=env.R,za=env.S,Aa=env.T,Ba=env.U,Ca=env.V,Da=env.W,Ea=env.X,Fa=env.Y,Ga=env.Z,Ha=env._,Ia=env.$,Ja=env.aa,Ka=env.ab,La=env.ac,Ma=env.ad,Na=env.ae,Oa=env.af,Pa=env.ag,Qa=env.ah,Ra=60496,Sa=5303376,Ta=0.0;function Ua(newBuffer){a=new Int8Array(newBuffer);d=new Uint8Array(newBuffer);b=new Int16Array(newBuffer);e=new Uint16Array(newBuffer);c=new Int32Array(newBuffer);f=new Float32Array(newBuffer);g=new Float64Array(newBuffer);buffer=newBuffer;return true}\n// EMSCRIPTEN_START_FUNCS\nfunction Rg(f){f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,$a=0,db=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Eb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,_b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,$c=0,ad=0,bd=0,cd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Od=0,Pd=0,Qd=0,Rd=0,Td=0,Ud=0,Vd=0,Wd=0,Yd=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Ef=0,Ff=0,Gf=0,Hf=0;Hf=Ra;Ra=Ra+864|0;nf=Hf+848|0;yf=Hf+840|0;Be=Hf+832|0;Gf=Hf+816|0;Ff=Hf+800|0;Ef=Hf+792|0;ze=Hf+784|0;ye=Hf+776|0;xe=Hf+768|0;we=Hf+760|0;ve=Hf+752|0;ue=Hf+736|0;te=Hf+728|0;bf=Hf+720|0;Ye=Hf+712|0;Xe=Hf+704|0;We=Hf+696|0;Ue=Hf+688|0;Te=Hf+664|0;Se=Hf+656|0;Re=Hf+648|0;Qe=Hf+640|0;Oe=Hf+624|0;Ne=Hf+608|0;Me=Hf+592|0;Le=Hf+576|0;Ke=Hf+560|0;Je=Hf+544|0;ef=Hf+536|0;df=Hf+528|0;cf=Hf+520|0;Ie=Hf+512|0;He=Hf+504|0;Ge=Hf+496|0;Fe=Hf+488|0;Ee=Hf+472|0;De=Hf+456|0;Ce=Hf+440|0;Ae=Hf+432|0;lf=Hf+416|0;gf=Hf+408|0;kf=Hf+400|0;ff=Hf+392|0;rf=Hf+352|0;Hd=Hf+112|0;Td=Hf+280|0;Yd=Hf;ee=Hf+272|0;je=Hf+852|0;le=f+104|0;q=c[le>>2]|0;Cf=c[f>>2]|0;sd=a[Cf+78>>0]|0;xd=f+88|0;o=c[xd>>2]|0;i=c[f+156>>2]|0;if(i|0?(k=c[Cf+16>>2]|0,l=c[Cf+20>>2]|0,(l|0)>0):0){h=0;do{if(((h|0)!=1?1<<h&i|0:0)?(m=c[k+(h<<4)+4>>2]|0,m|0):0)c[(c[m+4>>2]|0)+4>>2]=c[m>>2];h=h+1|0}while((h|0)!=(l|0))}Af=Cf+320|0;if(!(c[Af>>2]|0))h=-1;else{h=c[Cf+328>>2]|0;h=h-(((c[f+176>>2]|0)>>>0)%(h>>>0)|0)|0}Bf=f+40|0;a:do if((c[Bf>>2]|0)==7){l=q;n=0;k=0;m=q;j=h;i=Cf+81|0;oa=3892}else{Zc=f+56|0;c[Zc>>2]=0;c[Zc+4>>2]=0;Zc=f+120|0;c[Zc>>2]=0;c[Cf+404>>2]=0;lc=Cf+264|0;b:do if(!(c[lc>>2]|0)){xf=f+36|0;mc=f+100|0;qf=Cf+88|0;nc=f+196|0;oc=f+96|0;pc=f+147|0;uf=Cf+16|0;vf=f+149|0;qc=rf+8|0;rc=f+44|0;sc=Cf+100|0;tc=Cf+104|0;uc=f+168|0;vc=Hd+8|0;wc=Hd+10|0;xc=Hd+4|0;zc=Hd+8|0;Ac=Hd+10|0;Bc=Hd+4|0;Cc=Cf+90|0;Dc=Td+4|0;Ec=Td+12|0;Fc=Td+16|0;Gc=Td+20|0;Hc=Td+24|0;Ic=Td+28|0;Jc=Td+8|0;Kc=Td+64|0;Lc=Td+40|0;Mc=Td+44|0;Nc=Td+48|0;Oc=Td+52|0;Pc=Td+56|0;Qc=Td+60|0;Rc=Td+61|0;Sc=Cf+32|0;$c=Cf+272|0;Tc=rf+8|0;Uc=rf+4|0;mf=f+124|0;Vc=Cf+332|0;Wc=rf+32|0;sa=rf+8|0;ad=Cf+184|0;ta=f+92|0;zf=Cf+81|0;ua=f+32|0;bd=Cf+176|0;qd=Cf+444|0;va=f+24|0;wa=Yd+8|0;xa=Yd+10|0;ya=Yd+4|0;za=Yd+14|0;Aa=Hd+8|0;Ba=Hd+4|0;Ca=Cf+232|0;Da=Cf+108|0;Ea=rf+8|0;Fa=rf+32|0;Ga=rf+24|0;Ha=Cf+172|0;hf=Cf+24|0;Ia=rf+8|0;Ja=rf+4|0;Ka=rf+16|0;Ze=Cf+480|0;La=f+204|0;Ma=Cf+148|0;Na=Cf+472|0;Oa=f+64|0;Pa=Cf+464|0;Xc=Cf+276|0;Qa=rf+12|0;Sa=Hd+8|0;Ta=Hd+32|0;Ua=rf+8|0;Va=rf+4|0;$a=Cf+4|0;db=Cf+356|0;fb=Cf+328|0;gb=Cf+324|0;hb=sd<<24>>24==1;ib=f+184|0;_e=Cf+304|0;$e=Cf+308|0;af=Cf+300|0;jb=Hd+8|0;kb=Hd+32|0;lb=Hd+24|0;mb=rf+16|0;nb=rf+12|0;ob=Cf+165|0;pb=rf+12|0;qb=rf+20|0;Yc=Cf+288|0;rb=rf+20|0;tb=rf+8|0;ub=rf+4|0;vb=rf+20|0;wb=f+108|0;hd=f+188|0;Fd=Cf+456|0;Gd=Cf+452|0;xb=rf+16|0;yb=rf+28|0;zb=Cf+40|0;Ab=Hd+8|0;Bb=Hd+20|0;Cb=Hd+24|0;Eb=Hd+16|0;Gb=Hd+12|0;Hb=f+216|0;Ib=f+28|0;cd=Cf+296|0;ed=Cf+284|0;Jb=rf+10|0;Kb=rf+20|0;Lb=Cf+180|0;of=Cf+196|0;pf=Cf+200|0;Mb=rf+8|0;Nb=rf+8|0;fd=Cf+292|0;Ob=rf+16|0;Pb=Cf+348|0;Qb=rf+24|0;Rb=Cf+86|0;gd=Cf+79|0;Sb=rf+32|0;Tb=Cf+228|0;Ub=rf+8|0;Vb=Cf+344|0;Wb=Cf+340|0;Xb=rf+12|0;Yb=Hd+16|0;_b=Hd+8|0;ac=Hd+12|0;bc=f+48|0;ra=Cf+80|0;cc=rf+8|0;dc=Cf+336|0;ec=rf+20|0;Id=Cf+87|0;fc=Hd+24|0;sf=Cf+20|0;jf=Cf+56|0;gc=f+72|0;hc=f+80|0;ic=rf+8|0;Jd=f+146|0;jc=Cf+8|0;kc=rf+4|0;m=q;p=q+((c[xf>>2]|0)*20|0)|0;K=0;k=0;qa=0;n=0;pa=o;c:while(1){n=n+1|0;z=a[p>>0]|0;d:do switch(z<<24>>24){case 81:{oa=153;break c}case 1:{oa=922;break c}case 11:{i=K;oa=20;break}case 12:{i=c[p+4>>2]|0;b[pa+(i*40|0)+8>>1]=4;oa=(p-m|0)/20|0;i=pa+(i*40|0)|0;c[i>>2]=oa;c[i+4>>2]=((oa|0)<0)<<31>>31;i=K;oa=28;break}case 66:{l=c[p+4>>2]|0;p=m+((c[pa+(l*40|0)>>2]|0)*20|0)|0;b[pa+(l*40|0)+8>>1]=128;l=m;q=pa;o=qa;i=K;break}case 13:{na=c[p+4>>2]|0;la=(c[p+12>>2]|0)+-1|0;ma=pa+(na*40|0)|0;c[ma>>2]=la;c[ma+4>>2]=((la|0)<0)<<31>>31;b[pa+(na*40|0)+8>>1]=4;if(!(c[p+8>>2]|0)){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 67:{l=c[p+4>>2]|0;p=m+(((c[m+((c[pa+(l*40|0)>>2]|0)*20|0)+8>>2]|0)+-1|0)*20|0)|0;b[pa+(l*40|0)+8>>1]=128;l=m;q=pa;o=qa;i=K;break}case 14:{l=c[p+4>>2]|0;b[pa+(l*40|0)+8>>1]=4;l=pa+(l*40|0)|0;i=c[l>>2]|0;q=(p-m|0)/20|0;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;p=m+(i*20|0)|0;i=K;break}case 68:{if(!(b[pa+((c[p+12>>2]|0)*40|0)+8>>1]&1)){l=m;q=pa;o=qa;i=K}else oa=34;break}case 69:{oa=34;break}case 70:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;q=c[p+4>>2]|0;l=i;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 71:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=c[p+16>>2]|0;q=c[o+4>>2]|0;l=i;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case -111:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;b[i+8>>1]=8;g[i>>3]=+g[c[p+16>>2]>>3];l=m;q=pa;o=qa;i=K;break}case 110:{oa=c[xd>>2]|0;s=p+8|0;l=c[s>>2]|0;i=oa+(l*40|0)|0;l=oa+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;a[p>>0]=72;q=p+16|0;o=c[q>>2]|0;if(!o)l=0;else l=(Eu(o)|0)&1073741823;r=p+4|0;c[r>>2]=l;if(hb)i=K;else{if(yc(i,o,-1,1,0)|0){oa=3891;break c}o=i+8|0;l=b[o>>1]|0;if((l&2)!=0?(a[i+10>>0]|0)!=sd<<24>>24:0){if(Ig(i,sd)|0){l=p;j=h;i=zf;oa=3892;break a}l=b[o>>1]|0}c[i+24>>2]=0;b[o>>1]=l|2048;l=p+1|0;e:do if((a[l>>0]|0)==-7?(ae=c[q>>2]|0,ae|0):0){if(c[Ze>>2]|0){Xd(Cf,ae);break}o=ae;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;c[ae>>2]=c[af>>2];c[af>>2]=ae;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](ae);break}else{oa=Wa[c[29352>>2]&127](ae)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ae);break}}while(0);a[l>>0]=-7;c[q>>2]=c[i+16>>2];l=c[i+12>>2]|0;c[r>>2]=l;i=0}if((l|0)>(c[Da>>2]|0)){oa=3891;break c}else{l=s;oa=83}break}case 72:{l=p+8|0;i=K;oa=83;break}case 73:{o=c[xd>>2]|0;q=p+8|0;i=c[q>>2]|0;l=o+(i*40|0)|0;o=o+(i*40|0)+8|0;if(!(b[o>>1]&9216))b[o>>1]=4;else{lh(l)|0;i=c[q>>2]|0}i=(c[p+12>>2]|0)-i|0;r=(c[p+4>>2]|0)==0?1:257;b[l+8>>1]=r;c[l+12>>2]=0;if((i|0)>0)while(1){o=l;l=l+40|0;q=o+48|0;if(!(b[q>>1]&9216))b[q>>1]=1;else Dg(l);b[q>>1]=r;c[o+52>>2]=0;if((i|0)<=1){l=m;q=pa;o=qa;i=K;break}else i=i+-1|0}else{l=m;q=pa;o=qa;i=K}break}case 74:{l=pa+((c[p+4>>2]|0)*40|0)+8|0;b[l>>1]=b[l>>1]&-160|1;l=m;q=pa;o=qa;i=K;break}case 75:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;yc(i,c[p+16>>2]|0,c[p+4>>2]|0,0,0)|0;a[i+10>>0]=sd;l=m;q=pa;o=qa;i=K;break}case 76:{o=c[mc>>2]|0;q=(c[p+4>>2]|0)+-1|0;r=o+(q*40|0)|0;l=e[o+(q*40|0)+8>>1]|0;if(l&18|0){i=c[o+(q*40|0)+12>>2]|0;if(l&16384)i=(c[r>>2]|0)+i|0;if((i|0)>(c[(c[o+(q*40|0)+32>>2]|0)+108>>2]|0)){oa=3891;break c}}l=c[p+8>>2]|0;i=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(b[l>>1]&9216)Dg(i);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];c[i+16>>2]=c[r+16>>2];b[l>>1]=b[l>>1]&-7201|2080;l=m;q=pa;o=qa;i=K;break}case 77:{q=pa+((c[p+4>>2]|0)*40|0)|0;r=c[p+12>>2]|0;s=pa+((c[p+8>>2]|0)*40|0)|0;while(1){t=s+8|0;if(!((b[t>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);ea=s;l=q;fa=ea+40|0;do{c[ea>>2]=c[l>>2];ea=ea+4|0;l=l+4|0}while((ea|0)<(fa|0));b[q+8>>1]=1;c[q+24>>2]=0;i=b[t>>1]|0;if(i&4096){l=i&65535;do if(l&18){do if(l&16384){o=s+12|0;l=(c[s>>2]|0)+(c[o>>2]|0)|0;if((l|0)<1)if(!(i&16))break;else i=1;else i=l;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[o>>2]|0)|0,0,c[s>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+(c[s>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}while(0);b[t>>1]=i&-4097}r=r+-1|0;if(!r){l=m;q=pa;o=qa;i=K;break}else{q=q+40|0;s=s+40|0}}break}case 78:{q=c[p+12>>2]|0;r=pa+((c[p+4>>2]|0)*40|0)|0;s=pa+((c[p+8>>2]|0)*40|0)|0;while(1){t=s+8|0;if(!(b[t>>1]&9216)){c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];c[s+16>>2]=c[r+16>>2];if(!(b[r+8>>1]&2048))b[t>>1]=b[t>>1]&-7169|4096}else mh(s,r,4096);i=b[t>>1]|0;if(i&4096){l=i&65535;do if(l&18){do if(l&16384){o=s+12|0;l=(c[s>>2]|0)+(c[o>>2]|0)|0;if((l|0)<1)if(!(i&16))break;else i=1;else i=l;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[o>>2]|0)|0,0,c[s>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+(c[s>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}while(0);b[t>>1]=i&-4097}if(!q){l=m;q=pa;o=qa;i=K;break d}q=q+-1|0;r=r+40|0;s=s+40|0}}case 79:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;q=c[p+8>>2]|0;o=pa+(q*40|0)|0;q=pa+(q*40|0)+8|0;if(b[q>>1]&9216){mh(o,l,4096);l=m;q=pa;o=qa;i=K;break d};c[o>>2]=c[l>>2];c[o+4>>2]=c[l+4>>2];c[o+8>>2]=c[l+8>>2];c[o+12>>2]=c[l+12>>2];c[o+16>>2]=c[l+16>>2];if(!(b[pa+(i*40|0)+8>>1]&2048)){b[q>>1]=b[q>>1]&-7169|4096;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 80:{q=c[p+8>>2]|0;i=pa+(q*40|0)|0;o=pa+((c[p+4>>2]|0)*40|0)|0;l=c[o>>2]|0;o=c[o+4>>2]|0;q=pa+(q*40|0)+8|0;if(!(b[q>>1]&9216)){c[i>>2]=l;c[i+4>>2]=o;b[q>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(i,l,o);l=m;q=pa;o=qa;i=K;break d}}case 105:{z=c[p+4>>2]|0;s=pa+(z*40|0)|0;x=c[p+8>>2]|0;w=pa+(x*40|0)|0;A=c[p+12>>2]|0;y=pa+(A*40|0)|0;r=pa+(z*40|0)+8|0;l=b[r>>1]|0;t=pa+(x*40|0)+8|0;i=b[t>>1]|0;if((i|l)&1){i=pa+(A*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(y);l=m;q=pa;o=qa;i=K;break d}}do if(l&16384){q=pa+(z*40|0)+12|0;o=(c[s>>2]|0)+(c[q>>2]|0)|0;if((o|0)<1)if(!(l&16))break;else i=1;else i=o;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[pa+(z*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[s>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[s>>2]|0);l=b[r>>1]&-16897;b[r>>1]=l;i=b[t>>1]|0}while(0);do if(i&16384){q=pa+(x*40|0)+12|0;o=(c[w>>2]|0)+(c[q>>2]|0)|0;if((o|0)<1)if(!(i&16))break;else i=1;else i=o;if(Eg(w,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[pa+(x*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[w>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i;l=b[r>>1]|0}while(0);if(!(l&18)){if(Hg(s,sd,0)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}if((i&18)==0?Hg(w,sd,0)|0:0){l=p;j=h;i=zf;oa=3892;break a}q=pa+(z*40|0)+12|0;r=pa+(x*40|0)+12|0;s=(c[r>>2]|0)+(c[q>>2]|0)|0;if((s|0)>(c[Da>>2]|0)){oa=3891;break c}l=(A|0)==(x|0);if(Eg(y,s+2|0,l&1)|0){l=p;j=h;i=zf;oa=3892;break a}o=pa+(A*40|0)+8|0;b[o>>1]=b[o>>1]&15904|2;i=pa+(x*40|0)+16|0;if(!l){na=pa+(A*40|0)+16|0;ew(c[na>>2]|0,c[i>>2]|0,c[r>>2]|0)|0;i=na}ew((c[i>>2]|0)+(c[r>>2]|0)|0,c[pa+(z*40|0)+16>>2]|0,c[q>>2]|0)|0;a[(c[i>>2]|0)+s>>0]=0;a[(c[i>>2]|0)+(s+1)>>0]=0;b[o>>1]=b[o>>1]|512;c[pa+(A*40|0)+12>>2]=s;a[pa+(A*40|0)+10>>0]=sd;l=m;q=pa;o=qa;i=K;break}case 104:case 103:case 102:case 101:case 100:{s=c[p+4>>2]|0;t=pa+(s*40|0)|0;r=pa+(s*40|0)+8|0;i=e[r>>1]|0;l=i&12;if(!l)if(!(i&18))B=0;else B=nh(t)|0;else B=l&65535;x=c[p+8>>2]|0;y=pa+(x*40|0)|0;w=pa+(x*40|0)+8|0;i=e[w>>1]|0;l=i&12;if(!l)if(!(i&18))A=0;else A=nh(y)|0;else A=l&65535;C=c[p+12>>2]|0;D=pa+(C*40|0)|0;f:do if(!((B&4&A)<<16>>16)){if(!((b[w>>1]|b[r>>1])&1)){z=0;oa=245}}else{i=t;o=c[i>>2]|0;i=c[i+4>>2]|0;q=y;l=c[q>>2]|0;q=c[q+4>>2]|0;g:do switch(a[p>>0]|0){case 100:{if((i|0)>-1|(i|0)==-1&o>>>0>4294967295){na=Tv(-1,2147483647,l|0,q|0)|0;ma=L()|0;if(((q|0)>0|(q|0)==0&l>>>0>0)&((ma|0)<(i|0)|(ma|0)==(i|0)&na>>>0<o>>>0)){z=1;oa=245;break f}}else if((q|0)<0?(ma=Tv(1,-2147483648,l|0,q|0)|0,ka=L()|0,na=Sv(o|0,i|0,1,0)|0,la=L()|0,(ka|0)>(la|0)|(ka|0)==(la|0)&ma>>>0>na>>>0):0){z=1;oa=245;break f}l=Sv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 101:{if((o|0)==0&(i|0)==-2147483648)if((q|0)>-1|(q|0)==-1&l>>>0>4294967295){z=1;oa=245;break f}else{i=q^-2147483648;break g}if((i|0)<0|(i|0)==0&o>>>0<1){na=Tv(0,0,o|0,i|0)|0;la=L()|0;ma=Tv(-1,2147483647,l|0,q|0)|0;ka=L()|0;if(((q|0)>0|(q|0)==0&l>>>0>0)&((ka|0)<(la|0)|(ka|0)==(la|0)&ma>>>0<na>>>0)){z=1;oa=245;break f}}else if((q|0)<0?(ma=Tv(1,-2147483648,l|0,q|0)|0,ka=L()|0,na=Tv(1,0,o|0,i|0)|0,la=L()|0,(ka|0)>(la|0)|(ka|0)==(la|0)&ma>>>0>na>>>0):0){z=1;oa=245;break f}l=Tv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 102:{do if((i|0)>0|(i|0)==0&o>>>0>0){na=_v(-1,2147483647,o|0,i|0)|0;ma=L()|0;if((q|0)>(ma|0)|(q|0)==(ma|0)&l>>>0>na>>>0){z=1;oa=245;break f}na=Wv(0,-2147483648,o|0,i|0)|0;ma=L()|0;if((q|0)<(ma|0)|(q|0)==(ma|0)&l>>>0<na>>>0){z=1;oa=245;break f}}else if((i|0)<0){if((q|0)>0|(q|0)==0&l>>>0>0){na=Wv(0,-2147483648,l|0,q|0)|0;ma=L()|0;if((ma|0)>(i|0)|(ma|0)==(i|0)&na>>>0>o>>>0){z=1;oa=245;break f}else break}if((q|0)<0){if((o|0)==0&(i|0)==-2147483648|(l|0)==0&(q|0)==-2147483648){z=1;oa=245;break f}na=Tv(0,0,l|0,q|0)|0;la=L()|0;ma=Tv(0,0,o|0,i|0)|0;ma=Wv(-1,2147483647,ma|0,L()|0)|0;ka=L()|0;if((ka|0)<(la|0)|(ka|0)==(la|0)&ma>>>0<na>>>0){z=1;oa=245;break f}}}while(0);l=Yv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 103:{if((o|0)==0&(i|0)==0)break f;if((o|0)==-1&(i|0)==-1&((l|0)==0&(q|0)==-2147483648)){z=1;oa=245;break f}l=Wv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}default:{switch(o|0){case 0:{if(!i)break f;break}case -1:{if((i|0)==-1){o=1;i=0}break}default:{}}l=Zv(l|0,q|0,o|0,i|0)|0;i=L()|0}}while(0);q=D;c[q>>2]=l;c[q+4>>2]=i;l=pa+(C*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break d}while(0);h:do if((oa|0)==245){oa=0;i=e[r>>1]|0;do if(!(i&8)){if(i&4|0){na=t;v=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(i&18))v=0.0;else v=+Kg(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)}else v=+g[t>>3];while(0);i=e[w>>1]|0;do if(!(i&8)){if(i&4|0){na=y;u=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(i&18))u=0.0;else u=+Kg(a[pa+(x*40|0)+10>>0]|0,c[pa+(x*40|0)+12>>2]|0,c[pa+(x*40|0)+16>>2]|0)}else u=+g[y>>3];while(0);switch(a[p>>0]|0){case 100:{u=v+u;break}case 101:{u=u-v;break}case 102:{u=v*u;break}case 103:{if(v==0.0)break h;u=u/v;break}default:{i=e[r>>1]|0;do if(!(i&4)){if(i&8|0){r=Mg(+g[t>>3])|0;i=L()|0;break}if(!(i&18)){r=0;i=0}else{r=Ng(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)|0;i=L()|0}}else{i=t;r=c[i>>2]|0;i=c[i+4>>2]|0}while(0);l=e[w>>1]|0;do if(!(l&4)){if(l&8|0){o=Mg(+g[y>>3])|0;q=L()|0;break}if(!(l&18)){o=0;q=0}else{o=Ng(a[pa+(x*40|0)+10>>0]|0,c[pa+(x*40|0)+12>>2]|0,c[pa+(x*40|0)+16>>2]|0)|0;q=L()|0}}else{q=y;o=c[q>>2]|0;q=c[q+4>>2]|0}while(0);switch(r|0){case 0:{if(!i)break h;else l=r;break}case -1:{if((i|0)==-1){l=1;i=0}else l=r;break}default:l=r}u=+((Zv(o|0,q|0,l|0,i|0)|0)>>>0)+4294967296.0*+(L()|0)}}g[rf>>3]=u;g[Hd>>3]=+g[rf>>3];if(+g[rf>>3]==+g[Hd>>3]){g[D>>3]=u;o=pa+(C*40|0)+8|0;q=b[o>>1]&15904;b[o>>1]=q|8;if(((A|B)&8)!=0|z<<24>>24!=0){l=m;q=pa;o=qa;i=K;break d}i=Mg(u)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&u==+(i>>>0)+4294967296.0*+(l|0))){l=m;q=pa;o=qa;i=K;break d}na=D;c[na>>2]=i;c[na+4>>2]=l;b[o>>1]=q|4;l=m;q=pa;o=qa;i=K;break d}}while(0);i=pa+(C*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(D);l=m;q=pa;o=qa;i=K;break d}}case 82:{i=c[p+4>>2]|0;if(i){l=pa+(i*40|0)|0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216)){c[l>>2]=0;c[l+4>>2]=0;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(l,0,0);l=m;q=pa;o=qa;i=K;break d}}else{l=m;q=pa;o=qa;i=K}break}case 99:case 98:case 97:case 96:{s=c[p+4>>2]|0;l=c[p+8>>2]|0;w=c[p+12>>2]|0;x=pa+(w*40|0)|0;q=pa+(s*40|0)+8|0;o=b[q>>1]|0;i=b[pa+(l*40|0)+8>>1]|0;if((i|o)&1){i=pa+(w*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(x);l=m;q=pa;o=qa;i=K;break d}}r=pa+(l*40|0)|0;t=pa+(s*40|0)|0;i=i&65535;do if(!(i&4)){if(i&8|0){l=Mg(+g[r>>3])|0;i=L()|0;break}if(!(i&18)){l=0;i=0}else{l=Ng(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0)|0;i=L()|0;o=b[q>>1]|0}}else{i=r;l=c[i>>2]|0;i=c[i+4>>2]|0}while(0);o=o&65535;do if(!(o&4)){if(o&8|0){q=Mg(+g[t>>3])|0;s=L()|0;break}if(!(o&18)){q=0;s=0}else{q=Ng(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)|0;s=L()|0}}else{s=t;q=c[s>>2]|0;s=c[s+4>>2]|0}while(0);o=a[p>>0]|0;i:do switch(o<<24>>24){case 96:{l=q&l;i=s&i;break}case 97:{l=q|l;i=s|i;break}default:if(!((q|0)==0&(s|0)==0)){la=(s|0)<0;ma=(s|0)>-1|(s|0)==-1&q>>>0>4294967232;ka=Tv(0,0,q|0,s|0)|0;na=L()|0;r=la?197-(o&255)&255:o;q=la?(ma?ka:64):q;o=la?(ma?na:0):s;if((o|0)>0|(o|0)==0&q>>>0>63){i=((i|0)<0&r<<24>>24!=98)<<31>>31;l=i;i=((i|0)<0)<<31>>31;break i}if(r<<24>>24==98){l=cw(l|0,i|0,q|0)|0;i=L()|0;break i}else{l=bw(l|0,i|0,q|0)|0;na=L()|0;ma=(i|0)<0;la=Tv(64,0,q|0,o|0)|0;L()|0;la=cw(-1,-1,la|0)|0;i=L()|0;l=(ma?la:0)|l;i=(ma?i:0)|na;break i}}}while(0);q=x;c[q>>2]=l;c[q+4>>2]=i;l=pa+(w*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break}case 83:{i=c[p+4>>2]|0;r=pa+(i*40|0)|0;s=pa+(i*40|0)+8|0;q=b[s>>1]|0;l=q&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[r>>3])|0;o=L()|0;i=q;break}if(!(l&18)){l=0;o=0;i=q}else{l=Ng(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)|0;o=L()|0;i=b[s>>1]|0}}else{o=r;l=c[o>>2]|0;o=c[o+4>>2]|0;i=q}while(0);q=r;c[q>>2]=l;c[q+4>>2]=o;b[s>>1]=i&15904|4;q=c[p+8>>2]|0;o=Sv(l|0,o|0,q|0,((q|0)<0)<<31>>31|0)|0;q=L()|0;l=r;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case 15:{q=c[p+4>>2]|0;s=pa+(q*40|0)+8|0;i=b[s>>1]|0;if(!(i&4)){r=pa+(q*40|0)|0;l=i&65535;do if(!(l&4)){if(l&8|0){v=+g[r>>3];l=Mg(v)|0;o=L()|0;na=Sv(l|0,o|0,1,-2147483648)|0;ma=L()|0;q=i&15904|4;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(l>>>0)+4294967296.0*+(o|0)))break;i=r;c[i>>2]=l;c[i+4>>2]=o;b[s>>1]=q;i=q;break}if(l&2){l=a[pa+(q*40|0)+10>>0]|0;o=pa+(q*40|0)+16|0;i=pa+(q*40|0)+12|0;if(!(Lg(c[o>>2]|0,rf,c[i>>2]|0,l)|0))i=b[s>>1]|0;else{if(Og(c[o>>2]|0,Hd,c[i>>2]|0,l)|0){v=+g[rf>>3];g[r>>3]=v;l=b[s>>1]|0;i=l|8;b[s>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)){i=r;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=334}}else{na=Hd;oa=c[na+4>>2]|0;i=r;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[s>>1]|0;oa=334}if((oa|0)==334){oa=0;i=i|4;b[s>>1]=i}i=i&-3;b[s>>1]=i}}}while(0);if(!(i&4))if(!(c[p+8>>2]|0)){i=20;oa=3855;break c}else{i=K;oa=28;break d}}b[s>>1]=i&15904|4;l=m;q=pa;o=qa;i=K;break}case 84:{l=c[p+4>>2]|0;q=pa+(l*40|0)+8|0;i=b[q>>1]|0;if(!(i&4)){l=m;q=pa;o=qa;i=K}else{r=pa+(l*40|0)|0;o=i&65535;do if(!(o&8)){if(o&4|0){na=r;u=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(o&18))u=0.0;else{u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);i=b[q>>1]|0}}else u=+g[r>>3];while(0);g[r>>3]=u;b[q>>1]=i&15904|8;l=m;q=pa;o=qa;i=K}break}case 85:{o=c[p+4>>2]|0;s=pa+(o*40|0)|0;q=pa+(o*40|0)+8|0;l=b[q>>1]|0;do if(l&16384){r=pa+(o*40|0)+12|0;i=(c[s>>2]|0)+(c[r>>2]|0)|0;if((i|0)<1)if(!(l&16)){i=0;break}else i=1;if(!(Eg(s,i,1)|0)){gw((c[pa+(o*40|0)+16>>2]|0)+(c[r>>2]|0)|0,0,c[s>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[s>>2]|0);b[q>>1]=b[q>>1]&-16897;i=0}else i=7}else i=0;while(0);Sg(s,c[p+8>>2]&255,sd);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 57:case 54:case 55:case 56:case 52:case 53:{s=c[p+4>>2]|0;y=pa+(s*40|0)|0;w=c[p+12>>2]|0;x=pa+(w*40|0)|0;A=pa+(s*40|0)+8|0;i=b[A>>1]|0;B=pa+(w*40|0)+8|0;l=b[B>>1]|0;q=i&65535;t=l&65535;r=(l|i)&65535;C=p+2|0;o=e[C>>1]|0;do if(r&1){if(o&128|0){if(!((i&1&l)<<16>>16!=0&(t&256|0)==0)){r=(t<<1&2^2)+-1|0;oa=389;break}q=z;o=(z&255)+-52|0;oa=392;break}if(!(o&32))if(!(o&16)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}else{l=pa+((c[p+8>>2]|0)*40|0)+8|0;b[l>>1]=b[l>>1]&15904|1;l=m;q=pa;o=1;i=K;break d}}else{o=o&71;if(o>>>0>66){if(r&2){if((q&14|0)==2){o=a[pa+(s*40|0)+10>>0]|0;q=pa+(s*40|0)+16|0;l=pa+(s*40|0)+12|0;if(Lg(c[q>>2]|0,rf,c[l>>2]|0,o)|0){if(!(Og(c[q>>2]|0,Hd,c[l>>2]|0,o)|0)){na=Hd;oa=c[na+4>>2]|0;l=y;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=4}else{g[y>>3]=+g[rf>>3];l=8}b[A>>1]=b[A>>1]&-3|l}r=b[B>>1]|0}else r=l;if((r&14)==2){o=a[pa+(w*40|0)+10>>0]|0;q=pa+(w*40|0)+16|0;l=pa+(w*40|0)+12|0;if(!(Lg(c[q>>2]|0,rf,c[l>>2]|0,o)|0))l=b[B>>1]|0;else{if(!(Og(c[q>>2]|0,Hd,c[l>>2]|0,o)|0)){na=Hd;oa=c[na+4>>2]|0;l=x;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=4}else{g[x>>3]=+g[rf>>3];l=8}l=b[B>>1]&-3|l;b[B>>1]=l}s=r}else{s=r;l=r}}else s=l;if(!((l&4&b[A>>1])<<16>>16))l=s;else{r=x;q=c[r>>2]|0;r=c[r+4>>2]|0;o=y;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((r|0)>(o|0)|(r|0)==(o|0)&q>>>0>l>>>0)){r=((r|0)<(o|0)|(r|0)==(o|0)&q>>>0<l>>>0)<<31>>31;l=s;oa=389;break}o=a[p>>0]|0;r=1;l=s;q=o;o=(o&255)+-52|0;oa=393;break}}else if((o|0)==66){if(!((q&2|0)!=0|(q&12|0)==0)){Hg(y,sd,1)|0;i=(q&49631|b[A>>1]&15904)&65535}if(!((t&2|0)!=0|(t&12|0)==0)){Hg(x,sd,1)|0;l=(t&49631|b[B>>1]&15904)&65535}}r=Tg(x,y,c[p+16>>2]|0)|0;oa=389}while(0);do if((oa|0)==389){oa=0;if((r|0)>=0){q=a[p>>0]|0;o=(q&255)+-52|0;if(!r){oa=392;break}else{oa=393;break}}else{na=a[p>>0]|0;s=r;o=34207+((na&255)+-52)|0;r=na;break}}while(0);if((oa|0)==392){oa=0;s=0;o=34213+o|0;r=q}else if((oa|0)==393){oa=0;s=r;o=34219+o|0;r=q}o=a[o>>0]|0;q=o&255;b[A>>1]=i;b[B>>1]=l;l=e[C>>1]|0;if(!(l&32))if(!(o<<24>>24)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}i=c[p+8>>2]|0;if(l&8|0?(q|0)==(r<<24>>24==53|0):0){l=m;q=pa;o=s;i=K;break d}l=pa+(i*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=pa+(i*40|0)|0;c[l>>2]=o&255;c[l+4>>2]=0;l=m;q=pa;o=s;i=K;break}case 58:{if(!qa){l=m;q=pa;o=0;i=K}else{i=K;oa=28}break}case -88:case 61:{l=a[qf>>0]|0;do if(l&65?((d[vf>>0]|d[vf+1>>0]<<8)&16)==0:0){i=c[p+16>>2]|0;if(!i){i=c[hd>>2]|0;if(!i)break}if(l&64){na=c[of>>2]|0;i=_c(f,i)|0;bb[na&127](c[pf>>2]|0,i);if(!i)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}if((c[Lb>>2]|0)<=1){Za[c[of>>2]&127](1,c[pf>>2]|0,f,i)|0;break}c[ze>>2]=i;i=dd(Cf,34793,ze)|0;Za[c[of>>2]&127](1,c[pf>>2]|0,f,i)|0;if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);q=p+4|0;i=c[q>>2]|0;if((i|0)>=(c[7392]|0)){if((a[p>>0]|0)==-88){l=m;q=pa;o=qa;i=K;break d}l=c[wb>>2]|0;if((l|0)>1){o=c[le>>2]|0;i=1;do{if((a[o+(i*20|0)>>0]|0)==17)c[o+(i*20|0)+4>>2]=0;i=i+1|0}while((i|0)!=(l|0))}c[q>>2]=0;i=0}c[q>>2]=i+1;c[ib>>2]=(c[ib>>2]|0)+1;i=K;oa=28;break}case 87:{if(!(b[p+2>>1]&1))q=0;else q=(c[p+-4>>2]|0)+4|0;s=c[p+12>>2]|0;t=c[p+16>>2]|0;w=c[p+4>>2]|0;x=c[p+8>>2]|0;if((s|0)>0){r=t+16|0;j:do if(!q){l=0;while(1){i=a[(c[r>>2]|0)+l>>0]|0;o=Tg(pa+((l+w|0)*40|0)|0,pa+((l+x|0)*40|0)|0,c[t+20+(l<<2)>>2]|0)|0;l=l+1|0;if(o|0)break j;if((l|0)>=(s|0)){l=m;q=pa;o=0;i=K;break d}}}else{l=0;while(1){o=c[q+(l<<2)>>2]|0;i=a[(c[r>>2]|0)+l>>0]|0;o=Tg(pa+((o+w|0)*40|0)|0,pa+((o+x|0)*40|0)|0,c[t+20+(l<<2)>>2]|0)|0;l=l+1|0;if(o|0)break j;if((l|0)>=(s|0)){l=m;q=pa;o=0;i=K;break d}}}while(0);l=m;q=pa;o=i<<24>>24==0?o:0-o|0;i=K}else{l=m;q=pa;o=qa;i=K}break}case 16:{if((qa|0)<0){l=m;q=pa;o=qa;p=m+(((c[p+4>>2]|0)+-1|0)*20|0)|0;i=K;break d}if(!qa){l=m;q=pa;o=0;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0;i=K;break d}else{l=m;q=pa;o=qa;p=m+(((c[p+12>>2]|0)+-1|0)*20|0)|0;i=K;break d}}case 43:case 44:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(!(o&4))if(!(o&1)){if(!(o&8))if(!(o&18))u=0.0;else u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0);else u=+g[l>>3];q=u!=0.0&1}else q=2;else{q=l;q=((c[q>>2]|0)!=0|(c[q+4>>2]|0)!=0)&1}i=c[p+8>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(!(o&4))if(!(o&1)){if(!(o&8))if(!(o&18))u=0.0;else u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0);else u=+g[l>>3];i=u!=0.0&1}else i=2;else{i=l;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}i=a[((a[p>>0]|0)==44?34225:34234)+(i+(q*3|0))>>0]|0;l=c[p+12>>2]|0;if(i<<24>>24==2){l=pa+(l*40|0)+8|0;b[l>>1]=b[l>>1]&15904|1;l=m;q=pa;o=qa;i=K;break d}else{q=pa+(l*40|0)|0;c[q>>2]=i&255;c[q+4>>2]=0;l=pa+(l*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break d}}case 88:{r=c[p+8>>2]|0;s=pa+(r*40|0)|0;l=c[p+4>>2]|0;o=pa+(l*40|0)|0;q=e[pa+(l*40|0)+8>>1]|0;if(!(q&4)){i=c[p+12>>2]|0;if(!(q&1)){if(!(q&8))if(!(q&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0&1}}else{i=o;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}l=c[p+16>>2]^i;o=((l|0)<0)<<31>>31;i=pa+(r*40|0)+8|0;if(!(b[i>>1]&9216)){q=s;c[q>>2]=l;c[q+4>>2]=o;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(s,l,o);l=m;q=pa;o=qa;i=K;break d}}case 19:{l=c[p+4>>2]|0;q=c[p+8>>2]|0;r=pa+(q*40|0)|0;i=b[pa+(l*40|0)+8>>1]|0;if(i&1){i=pa+(q*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(r);l=m;q=pa;o=qa;i=K;break d}}o=pa+(l*40|0)|0;i=i&65535;if(!(i&4))if(!(i&1)){if(!(i&8))if(!(i&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0}else i=0;else{i=o;i=(c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0}l=(i^1)&1;i=pa+(q*40|0)+8|0;if(!(b[i>>1]&9216)){q=r;c[q>>2]=l;c[q+4>>2]=0;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(r,l,0);l=m;q=pa;o=qa;i=K;break d}}case 107:{o=c[p+4>>2]|0;i=c[p+8>>2]|0;r=pa+(i*40|0)|0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(r);l=pa+(o*40|0)+8|0;if(!(b[l>>1]&1)){q=pa+(o*40|0)|0;b[i>>1]=4;i=e[l>>1]|0;do if(!(i&4)){if(i&8|0){i=Mg(+g[q>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[pa+(o*40|0)+10>>0]|0,c[pa+(o*40|0)+12>>2]|0,c[pa+(o*40|0)+16>>2]|0)|0;l=L()|0}}else{l=q;i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);q=r;c[q>>2]=~i;c[q+4>>2]=~l;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 17:{i=c[nc>>2]|0;if(!i){l=c[(c[le>>2]|0)+4>>2]|0;i=p+4|0;if((l|0)==(c[i>>2]|0)){i=K;oa=28;break d}}else{o=(p-(c[le>>2]|0)|0)/20|0;i=(c[i+24>>2]|0)+(o>>>3)|0;l=d[i>>0]|0;o=1<<(o&7);if(o&l|0){i=K;oa=28;break d}a[i>>0]=o|l;i=p+4|0;l=c[(c[le>>2]|0)+4>>2]|0}c[i>>2]=l;l=m;q=pa;o=qa;i=K;break}case 18:{l=c[p+4>>2]|0;o=pa+(l*40|0)|0;q=e[pa+(l*40|0)+8>>1]|0;if(!(q&4)){i=c[p+12>>2]|0;if(!(q&1)){if(!(q&8))if(!(q&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0&1}}else{i=o;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}if(!i){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 20:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(o&4|0){na=l;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}if(o&1|0)if(!(c[p+12>>2]|0)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}if(!(o&8)){if(!(o&18)){i=K;oa=28;break d}u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)}else u=+g[l>>3];if(u!=0.0){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 50:{if(!(b[pa+((c[p+4>>2]|0)*40|0)+8>>1]&1)){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 51:{if(!(b[pa+((c[p+4>>2]|0)*40|0)+8>>1]&1)){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 21:{if(a[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+2>>0]|0){i=c[p+12>>2]|0;l=pa+(i*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=1;i=K;oa=28;break d}else{Dg(pa+(i*40|0)|0);i=K;oa=28;break d}}else{l=m;q=pa;o=qa;i=K}break}case 90:{o=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=c[p+8>>2]|0;do if(!(a[o+3>>0]|0)){if(a[c[o+40>>2]>>0]|0){i=sh(o)|0;oa=508}}else{i=c[o+24>>2]|0;if(i|0?(Kd=c[i+(l+1<<2)>>2]|0,(Kd|0)>0):0){l=Kd+-1|0;o=c[o+36>>2]|0;break}i=rh(o)|0;oa=508}while(0);if((oa|0)==508){oa=0;if(i){oa=601;break c}}F=c[p+12>>2]|0;H=pa+(F*40|0)|0;E=c[o+72>>2]|0;r=o+28|0;i=c[ua>>2]|0;k:do if((c[r>>2]|0)!=(i|0)){do if(a[o+2>>0]|0){if((a[o>>0]|0)==3){q=c[o+32>>2]|0;x=c[pa+(q*40|0)+12>>2]|0;c[o+84>>2]=x;c[o+80>>2]=x;q=c[pa+(q*40|0)+16>>2]|0;x=o+76|0;c[x>>2]=q;break}i=pa+(F*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;break k}else{Dg(H);break k}}else{na=c[o+40>>2]|0;bg(na);oa=c[na+44>>2]|0;c[o+80>>2]=oa;i=e[na+48>>1]|0;q=c[na+40>>2]|0;na=(c[(c[na+116>>2]|0)+60>>2]|0)-q|0;c[o+84>>2]=(na|0)<(i|0)?((na|0)>0?na:0):i;i=o+76|0;c[i>>2]=q;if(oa>>>0>(c[Da>>2]|0)>>>0){oa=518;break c}x=i;i=c[ua>>2]|0}while(0);c[r>>2]=i;oa=a[q>>0]|0;i=oa&255;if(oa<<24>>24>-1){c[E>>2]=i;w=1}else{r=d[q+1>>0]|0;do if(r&128){s=d[q+2>>0]|0;if(!(s&128)){c[E>>2]=(i<<14|s)&2080895|r<<7&16256;i=3;break}else{i=Of(q,rf)|0;na=rf;oa=c[na>>2]|0;c[E>>2]=((oa|0)==(oa|0)?0==(c[na+4>>2]|0):0)?oa:-1;break}}else{c[E>>2]=i<<7&16256|r;i=2}while(0);w=i&255}t=o+48|0;c[t>>2]=w;r=o+58|0;b[r>>1]=0;i=o+84|0;s=c[E>>2]|0;if((c[i>>2]|0)>>>0>=s>>>0){q=c[x>>2]|0;i=0;oa=540;break}c[x>>2]=0;c[i>>2]=0;oa=c[E>>2]|0;if(oa>>>0<=98307?oa>>>0<=(c[o+80>>2]|0)>>>0:0){i=0;oa=532}else oa=597}else{i=o+58|0;r=i;i=b[i>>1]|0;oa=532}while(0);do if((oa|0)==532){if((l|0)<(i&65535|0)){r=c[o+88+(l<<2)>>2]|0;oa=576;break}x=o+48|0;w=c[x>>2]|0;s=c[E>>2]|0;if(w>>>0<s>>>0){q=c[o+76>>2]|0;if(!q){ea=Hd;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));s=c[o+40>>2]|0;t=c[E>>2]|0;oa=e[s+48>>1]|0;q=c[s+40>>2]|0;na=(c[(c[s+116>>2]|0)+60>>2]|0)-q|0;if(t>>>0>((na|0)<(oa|0)?((na|0)>0?na:0):oa)>>>0){i=uh(s,0,t,Hd)|0;if(i|0){oa=601;break c}i=b[r>>1]|0;s=c[x>>2]|0;q=c[Yb>>2]|0}else{c[Yb>>2]=q;b[_b>>1]=4112;c[ac>>2]=t;s=w}t=x;w=s;s=c[E>>2]|0;oa=540}else{t=x;oa=540}}else{q=0;oa=566}}while(0);do if((oa|0)==540){B=i&65535;D=q+s|0;i=B;s=q+w|0;B=c[E+(B<<2)>>2]|0;C=0;do{oa=a[s>>0]|0;w=oa&255;A=o+88+(i<<2)|0;c[A>>2]=w;if(oa<<24>>24>-1){s=s+1|0;y=w;w=d[3520+w>>0]|0;x=0}else{x=d[s>>0]|0;y=d[s+1>>0]|0;do if(y&128){z=d[s+2>>0]|0;if(!(z&128)){w=3;x=(x<<14|z)&2080895|y<<7&16256;oa=549;break}w=Of(s,rf)|0;oa=rf;x=c[oa>>2]|0;if((x|0)==(x|0)?0==(c[oa+4>>2]|0):0)oa=549;else{c[A>>2]=-1;x=-1;s=s+(w&255)|0;oa=550}}else{w=2;x=x<<7&16256|y;oa=549}while(0);if((oa|0)==549){oa=0;s=s+(w&255)|0;c[A>>2]=x;if(x>>>0>127)oa=550;else w=d[3520+x>>0]|0}if((oa|0)==550)w=(x+-12|0)>>>1;y=x;x=0}B=Sv(w|0,x|0,B|0,C|0)|0;C=L()|0;oa=i;i=i+1|0;c[E+(i<<2)>>2]=B;w=s>>>0<D>>>0}while((oa|0)<(l|0)&w);if(!w)if(s>>>0<=D>>>0?((C|0)==0?(B|0)==(c[o+80>>2]|0):0):0){w=C;x=B;oa=558}else oa=559;else{w=0;x=c[o+80>>2]|0;oa=558}if((oa|0)==558){oa=0;if(C>>>0>w>>>0|(C|0)==(w|0)&B>>>0>x>>>0)oa=559}if((oa|0)==559)if(!(c[E>>2]|0)){i=0;s=D}else{if(c[o+76>>2]|0){oa=597;break}if((b[_b>>1]&9216)==0&(c[fc>>2]|0)==0){oa=597;break}Cg(Hd);oa=597;break}i=i&65535;b[r>>1]=i;c[t>>2]=s-q;if((c[o+76>>2]|0)==0?!((b[_b>>1]&9216)==0&(c[fc>>2]|0)==0):0){Cg(Hd);q=y;i=b[r>>1]|0;oa=566}else{q=y;oa=566}}while(0);do if((oa|0)==566){oa=0;if((l|0)>=(i&65535|0)){if((a[p+1>>0]|0)!=-11){i=pa+(F*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;break}else{Dg(H);break}}l=c[p+16>>2]|0;i=pa+(F*40|0)+8|0;if(b[i>>1]&9216){mh(H,l,2048);break};c[H>>2]=c[l>>2];c[H+4>>2]=c[l+4>>2];c[H+8>>2]=c[l+8>>2];c[H+12>>2]=c[l+12>>2];c[H+16>>2]=c[l+16>>2];if(!(b[l+8>>1]&2048))b[i>>1]=b[i>>1]&-7169|2048}else{r=q;oa=576}}else if((oa|0)==597){oa=0;i=c[m+12>>2]|0;if((i|0)<=0){oa=599;break c}p=m+((i+-1|0)*20|0)|0}while(0);l:do if((oa|0)==576){oa=0;s=pa+(F*40|0)+8|0;if(b[s>>1]&9216)Dg(H);if((c[o+84>>2]|0)>>>0>=(c[E+(l+1<<2)>>2]|0)>>>0){o=(c[o+76>>2]|0)+(c[E+(l<<2)>>2]|0)|0;if(r>>>0<12){Ug(o,r,H)|0;break}q=(r+-12|0)>>>1;c[pa+(F*40|0)+12>>2]=q;a[pa+(F*40|0)+10>>0]=sd;i=q+2|0;if((c[pa+(F*40|0)+24>>2]|0)<(i|0)){b[s>>1]=1;if(Eg(H,i,0)|0){oa=602;break c}l=pa+(F*40|0)+16|0;i=l;l=c[l>>2]|0}else{l=c[pa+(F*40|0)+20>>2]|0;i=pa+(F*40|0)+16|0;c[i>>2]=l}ew(l|0,o|0,q|0)|0;a[(c[i>>2]|0)+q>>0]=0;a[(c[i>>2]|0)+(q+1)>>0]=0;b[s>>1]=b[31112+((r&1)<<1)>>1]|0;break}a[pa+(F*40|0)+10>>0]=sd;na=b[p+2>>1]|0;if(!((na&192)!=0?!((r>>>0<12|(r&1|0)!=0)&(na&128)==0):0))oa=588;do if((oa|0)==588){oa=0;if(r>>>0<=127){i=a[3520+r>>0]|0;if(!(i<<24>>24))break;else q=i&255}else q=(r+-12|0)>>>1;o=c[o+40>>2]|0;i=c[E+(l<<2)>>2]|0;na=e[o+48>>1]|0;l=c[o+40>>2]|0;ma=(c[(c[o+116>>2]|0)+60>>2]|0)-l|0;if((i+q|0)>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(o,i,q,H)|0;if(i|0){oa=601;break c}i=c[pa+(F*40|0)+16>>2]|0}else{i=l+i|0;c[pa+(F*40|0)+16>>2]=i;b[s>>1]=4112;c[pa+(F*40|0)+12>>2]=q}Ug(i,r,H)|0;b[s>>1]=b[s>>1]&-4097;break l}while(0);Ug(59040,r,H)|0}while(0);l=m;q=pa;o=qa;i=0;break}case 91:{i=c[p+16>>2]|0;s=i;t=pa+((c[p+4>>2]|0)*40|0)|0;i=a[i>>0]|0;while(1){s=s+1|0;do if(i<<24>>24>66){r=t+8|0;o=b[r>>1]|0;i=o&65535;if(!(i&4)){if(i&8|0){v=+g[t>>3];i=Mg(v)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(i>>>0)+4294967296.0*+(l|0)))break;na=t;c[na>>2]=i;c[na+4>>2]=l;b[r>>1]=o&15904|4;break}if(i&2|0?(Ld=a[t+10>>0]|0,Md=t+16|0,Od=t+12|0,Lg(c[Md>>2]|0,rf,c[Od>>2]|0,Ld)|0):0){if(Og(c[Md>>2]|0,Hd,c[Od>>2]|0,Ld)|0){v=+g[rf>>3];g[t>>3]=v;l=b[r>>1]|0;i=l|8;b[r>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)){i=t;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=613}}else{na=Hd;oa=c[na+4>>2]|0;i=t;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[r>>1]|0;oa=613}if((oa|0)==613){oa=0;i=i|4;b[r>>1]=i}b[r>>1]=i&-3}}}else if(i<<24>>24==66){l=t+8|0;i=b[l>>1]|0;na=i&65535;if(!((na&2|0)!=0|(na&12|0)==0)){Hg(t,sd,1)|0;i=b[l>>1]|0}b[l>>1]=i&-13}while(0);i=a[s>>0]|0;if(!(i<<24>>24)){l=m;q=pa;o=qa;i=K;break}else t=t+40|0}break}case 92:{i=c[p+16>>2]|0;E=pa+((c[p+4>>2]|0)*40|0)|0;F=E+(((c[p+8>>2]|0)+-1|0)*40|0)|0;x=a[pc>>0]|0;H=c[p+12>>2]|0;I=pa+(H*40|0)|0;if(i|0){t=E;w=i;i=a[i>>0]|0;do{s=t;t=t+40|0;w=w+1|0;do if(i<<24>>24>66){r=s+8|0;o=b[r>>1]|0;i=o&65535;if(!(i&4)){if(i&8|0){v=+g[s>>3];i=Mg(v)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(i>>>0)+4294967296.0*+(l|0)))break;na=s;c[na>>2]=i;c[na+4>>2]=l;b[r>>1]=o&15904|4;break}if(i&2|0?(Pd=a[s+10>>0]|0,Qd=s+16|0,Rd=s+12|0,Lg(c[Qd>>2]|0,rf,c[Rd>>2]|0,Pd)|0):0){do if(!(Og(c[Qd>>2]|0,Hd,c[Rd>>2]|0,Pd)|0)){na=Hd;oa=c[na+4>>2]|0;i=s;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[r>>1]|0;oa=634}else{v=+g[rf>>3];g[s>>3]=v;l=b[r>>1]|0;i=l|8;b[r>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)))break;i=s;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=634}while(0);if((oa|0)==634){oa=0;i=i|4;b[r>>1]=i}b[r>>1]=i&-3}}}else if(i<<24>>24==66){l=s+8|0;i=b[l>>1]|0;na=i&65535;if(!((na&2|0)!=0|(na&12|0)==0)){Hg(s,sd,1)|0;i=b[l>>1]|0}b[l>>1]=i&-13}while(0);i=a[w>>0]|0}while(i<<24>>24!=0)}B=(x&255)>3;C=0;A=F;z=0;y=0;s=0;t=0;while(1){w=A+8|0;r=b[w>>1]|0;l=r&65535;do if(!(l&1)){if(!(l&4)){if(l&8|0){o=8;x=7;break}i=c[A+12>>2]|0;if(l&16384)i=(c[A>>2]|0)+i|0;o=i;x=(i<<1)+12|l>>>1&1;break}l=A;i=c[l>>2]|0;l=c[l+4>>2]|0;q=aw(i|0,l|0,63)|0;q=q^i;o=(L()|0)^l;if(o>>>0<0|(o|0)==0&q>>>0<128){if(!(B&((i&1|0)==(i|0)&0==(l|0)))){o=1;x=1;break}o=0;x=q+8|0;break}if(!(o>>>0<0|(o|0)==0&q>>>0<32768))if(o>>>0<0|(o|0)==0&q>>>0<8388608){o=3;x=3}else{na=o>>>0<0|(o|0)==0&q>>>0<2147483648;x=o>>>0<32768|(o|0)==32768&q>>>0<0;o=na?4:x?6:8;x=na?4:x?5:6}else{o=2;x=2}}else{o=0;x=0}while(0);do if(!(r&16384)){i=o;oa=666}else{if(!x){w=Sv(z|0,y|0,o|0,0)|0;i=10;o=1;x=L()|0;D=s;break}if((z|0)==0&(y|0)==0){i=c[A>>2]|0;s=Sv(s|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;i=o-i|0;t=L()|0;oa=666;break}l=A+12|0;i=(c[A>>2]|0)+(c[l>>2]|0)|0;if((i|0)<1)if(!(r&16)){i=o;oa=666;break}else i=1;if(Eg(A,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[A+16>>2]|0)+(c[l>>2]|0)|0,0,c[A>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[A>>2]|0);b[w>>1]=b[w>>1]&-16897;i=o;oa=666}while(0);if((oa|0)==666){oa=0;q=Sv(z|0,y|0,i|0,0)|0;r=L()|0;if(x>>>0<128){i=x;o=1;w=q;x=r;D=s}else{o=1;i=x;l=0;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0){i=x;w=q;x=r;D=s;break}else o=o+1|0}}}C=o+C|0;c[A+28>>2]=i;if((A|0)==(E|0))break;else{A=A+-40|0;z=w;y=x;s=D}}if(C>>>0<127)r=C+1|0;else{r=1;i=C;l=0;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0)break;else r=r+1|0}l=r+C|0;i=1;o=l;q=0;while(1){o=bw(o|0,q|0,7)|0;q=L()|0;if((o|0)==0&(q|0)==0)break;else i=i+1|0}r=l+(r>>>0<i>>>0&1)|0}q=((r|0)<0)<<31>>31;z=Sv(w|0,x|0,r|0,q|0)|0;i=Sv(z|0,L()|0,D|0,t|0)|0;l=L()|0;o=c[pa+(H*40|0)+24>>2]|0;na=((o|0)<0)<<31>>31;do if((l|0)>(na|0)|(l|0)==(na|0)&i>>>0>o>>>0){na=c[Da>>2]|0;ma=((na|0)<0)<<31>>31;if((l|0)>(ma|0)|(l|0)==(ma|0)&i>>>0>na>>>0){oa=3891;break c}if((o|0)>=(z|0)){y=c[pa+(H*40|0)+20>>2]|0;c[pa+(H*40|0)+16>>2]=y;na=pa+(H*40|0)+8|0;b[na>>1]=b[na>>1]&13;break}if(Eg(I,z,0)|0){l=p;j=h;i=zf;oa=3892;break a}y=c[pa+(H*40|0)+16>>2]|0}else{y=c[pa+(H*40|0)+20>>2]|0;c[pa+(H*40|0)+16>>2]=y}while(0);do if(r>>>0>=128)if(r>>>0<16384){i=bw(r|0,q|0,7)|0;L()|0;a[y>>0]=i&255|-128;a[y+1>>0]=r&127;i=2;break}else{i=wh(y,r,q)|0;break}else{a[y>>0]=r;i=1}while(0);o=i&255;x=r;w=E;while(1){l=c[w+28>>2]|0;do if(l>>>0<128){a[y+o>>0]=l;i=o+1|0;o=y+x|0;if((l+-1|0)>>>0>=7)if(l>>>0>11){oa=699;break}else{l=0;break}s=w;l=d[3520+l>>0]|0;q=l;r=c[s>>2]|0;s=c[s+4>>2]|0;do{q=q+-1|0;a[o+q>>0]=r;r=bw(r|0,s|0,8)|0;s=L()|0}while((q|0)!=0)}else{i=y+o|0;if(l>>>0<16384){a[i>>0]=l>>>7&255|-128;a[i+1>>0]=l&127;i=2}else i=wh(i,l,0)|0;i=(i&255)+o|0;o=y+x|0;oa=699}while(0);if((oa|0)==699){oa=0;l=c[w+12>>2]|0;if(!l)l=0;else ew(o|0,c[w+16>>2]|0,l|0)|0}w=w+40|0;if(w>>>0>F>>>0)break;else{o=i;x=l+x|0}}c[pa+(H*40|0)+12>>2]=z;i=pa+(H*40|0)+8|0;b[i>>1]=16;if((D|0)==0&(t|0)==0){l=m;q=pa;o=qa;i=K}else{c[I>>2]=D;b[i>>1]=16400;l=m;q=pa;o=qa;i=K}break}case 93:{F=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;i=xh(F)|0;switch(i|0){case 16:{q=0;o=0;break}case 0:{y=F+116|0;z=F+70|0;A=F+68|0;B=F+50|0;C=F+1|0;D=F+20|0;E=F+2|0;q=0;o=0;m:while(1){l=c[y>>2]|0;if(!(a[l+8>>0]|0)){t=(a[l+2>>0]|0)==0;r=b[l+24>>1]|0;q=Sv((t?r&65535:0)|0,(t?0:0)|0,q|0,o|0)|0;o=L()|0;t=l;x=b[z>>1]|0;s=l}else{q=Sv(q|0,o|0,e[l+24>>1]|0,0)|0;o=L()|0;do{i=a[A>>0]|0;if(!(i<<24>>24))break m;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;s=b[F+72+((i<<24>>24)+-1<<1)>>1]|0;b[z>>1]=s;r=i+-1<<24>>24;a[A>>0]=r;r=c[F+120+(r<<24>>24<<2)>>2]|0;c[y>>2]=r;i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);l=c[y>>2]|0;w=l;i=b[z>>1]|0}else{w=c[i+20>>2]|0;l=w+120|0;c[l>>2]=(c[l>>2]|0)+-1;w=w+136|0;c[i+16>>2]=c[w>>2];c[w>>2]=i;w=r;l=r;i=s}r=b[l+24>>1]|0}while((i&65535)>=(r&65535));x=i+1<<16>>16;b[z>>1]=x;t=l;s=w}i=c[t+56>>2]|0;if(x<<16>>16==r<<16>>16){i=i+((d[t+9>>0]|0)+8)|0;l=a[A>>0]|0;if(l<<24>>24>18){oa=717;break c}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];na=c[D>>2]|0;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;ma=l<<24>>24;b[F+72+(ma<<1)>>1]=x;c[F+120+(ma<<2)>>2]=s;b[z>>1]=0;a[A>>0]=l+1<<24>>24;i=yh(na,i,y,F,d[E>>0]|0)|0}else{l=(c[t+64>>2]|0)+((x&65535)<<1)|0;i=i+((d[l>>0]<<8|d[l+1>>0])&e[t+26>>1])|0;l=a[A>>0]|0;if(l<<24>>24>18){oa=720;break c}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];na=c[D>>2]|0;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;ma=l<<24>>24;b[F+72+(ma<<1)>>1]=x;c[F+120+(ma<<2)>>2]=s;b[z>>1]=0;a[A>>0]=l+1<<24>>24;i=yh(na,i,y,F,d[E>>0]|0)|0}if(i){oa=3845;break c}}i=xh(F)|0;if(i){oa=3855;break c}break}default:{oa=3855;break c}}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=q;c[l+4>>2]=o;l=m;q=pa;o=qa;i=0;break}case 0:{w=c[p+4>>2]|0;A=c[p+16>>2]|0;if(!w){if((c[bd>>2]|0)>0){oa=730;break c}if(!A)z=0;else z=(Eu(A)|0)&1073741823;x=(c[Gd>>2]|0)+(c[Fd>>2]|0)|0;n:do if(c[db>>2]|0){y=x+1|0;w=0;while(1){if((w|0)>=(c[Vc>>2]|0))break n;t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;o:do if((l|0)!=0?(c[i>>2]|0)>1:0){s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=y;if(!i){q=0;i=o}else{q=Xa[i&255](l,x)|0;i=c[s>>2]|0}l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break o}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3846;break c}}}while(0);l=z+33|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=761;else{l=m;q=pa;o=qa;i=0;break d}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=761}while(0);if((oa|0)==761){oa=0;i=_d(Cf,l,0)|0}if(!i){l=m;q=pa;o=qa;i=0;break d}na=i+32|0;c[i>>2]=na;ew(na|0,A|0,z+1|0)|0;if(!(a[gd>>0]|0))c[Gd>>2]=(c[Gd>>2]|0)+1;else{a[gd>>0]=0;a[Id>>0]=1}c[i+24>>2]=c[qd>>2];c[qd>>2]=i;l=Pa;q=c[l+4>>2]|0;o=i+8|0;c[o>>2]=c[l>>2];c[o+4>>2]=q;o=Na;q=c[o+4>>2]|0;l=i+16|0;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;i=0;break d}i=c[qd>>2]|0;if(!i){oa=774;break c}q=d[208+(d[A>>0]|0)>>0]|0;B=i;r=0;while(1){l=c[B>>2]|0;na=a[l>>0]|0;i=(d[208+(na&255)>>0]|0)-q|0;if(!(na<<24>>24==0|(i|0)!=0)){o=A;do{l=l+1|0;o=o+1|0;na=a[l>>0]|0;i=(d[208+(na&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(i|0)!=0))}if(!i)break;i=c[B+24>>2]|0;if(!i){oa=774;break c}else{B=i;r=r+1|0}}z=(w|0)==1;if(z&(c[bd>>2]|0)>0){oa=776;break c}A=B+24|0;if(!(c[A>>2]|0)){i=(a[Id>>0]|0)!=0;if(z&i){ma=c[f>>2]|0;na=ma+464|0;ma=ma+472|0;na=Sv(c[ma>>2]|0,c[ma+4>>2]|0,c[na>>2]|0,c[na+4>>2]|0)|0;ma=L()|0;if((ma|0)>0|(ma|0)==0&na>>>0>0){oa=780;break c}a[gd>>0]=1;if((pg(f)|0)==5){oa=782;break c}a[Id>>0]=0;y=r;i=c[Bf>>2]|0;q=1}else{q=i;oa=784}}else{q=0;oa=784}if((oa|0)==784){oa=0;s=(c[Gd>>2]|0)-r|0;x=s+-1|0;t=(w|0)==2;if(t){l=c[hf>>2]&1;if((c[sf>>2]|0)>0){o=l^1;i=0;while(1){r=jg(c[(c[uf>>2]|0)+(i<<4)+4>>2]|0,516,o)|0;i=i+1|0;if(r|0){oa=3854;break c}r=c[sf>>2]|0;if((i|0)>=(r|0)){i=0;oa=790;break}}}else i=K}else{l=0;i=K;r=c[sf>>2]|0;oa=790}p:do if((oa|0)==790){oa=0;if((r|0)>0){i=(s|0)<1;if(!t){if(!i){s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=wf(c[r>>2]|0,w,x)|0;if(i|0){oa=3853;break c}i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[r+44>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3853;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=wf(c[r>>2]|0,w,x)|0;if(i|0){oa=3852;break c}o=r+44|0;if(b[r+22>>1]&16)c[o>>2]=0;i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[o>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3852;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}if(!i){s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=c[r+8>>2]|0;if(i|0?(Vd=$f(i,0,0)|0,Vd|0):0){i=Vd;oa=3851;break c}i=wf(c[r>>2]|0,2,x)|0;if(i|0){oa=3851;break c}i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[r+44>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3851;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=c[r+8>>2]|0;if(i|0?(Ud=$f(i,0,0)|0,Ud|0):0){i=Ud;oa=3850;break c}i=wf(c[r>>2]|0,2,x)|0;if(i|0){oa=3850;break c}o=r+44|0;if(b[r+22>>1]&16)c[o>>2]=0;i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[o>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3850;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break}}}}while(0);if(!l)y=x;else{l=c[$a>>2]|0;if(l|0)do{na=l+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|1;a[na>>0]=ma;a[na+1>>0]=ma>>8;l=c[l+8>>2]|0}while((l|0)!=0);$b(Cf);c[hf>>2]=c[hf>>2]|1;y=x}}l=c[qd>>2]|0;if((l|0)!=(B|0))do{c[qd>>2]=c[l+24>>2];q:do if(l|0){if(c[Ze>>2]|0){Xd(Cf,l);break}o=l;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;c[l>>2]=c[af>>2];c[af>>2]=l;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[Gd>>2]=(c[Gd>>2]|0)+-1;l=c[qd>>2]|0}while((l|0)!=(B|0));if(z){c[qd>>2]=c[A>>2];do if(!(c[Ze>>2]|0)){na=B;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[B>>2]=c[af>>2];c[af>>2]=B;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{na=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}else Xd(Cf,B);while(0);if(q){Wd=1;oa=859}else c[Gd>>2]=(c[Gd>>2]|0)+-1}else{Wd=B+8|0;oa=c[Wd+4>>2]|0;na=Pa;c[na>>2]=c[Wd>>2];c[na+4>>2]=oa;na=B+16|0;oa=c[na+4>>2]|0;Wd=Na;c[Wd>>2]=c[na>>2];c[Wd+4>>2]=oa;Wd=q;oa=859}if((oa|0)==859?(oa=0,!((w|0)==2|Wd^1)):0)if(!i){l=m;q=pa;o=qa;i=0;break d}else{oa=3855;break c}if(!(c[db>>2]|0)){l=m;q=pa;o=qa;i=0}else{x=y+1|0;switch(w|0){case 0:while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;r:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=x;if(!i){q=0;i=o}else{q=Xa[i&255](l,y)|0;i=c[s>>2]|0}l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break r}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3848;break c}}case 2:{w=0;while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;s:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+88>>2]|0;do if(!i){q=0;i=o}else{if((c[t+20>>2]|0)<=(y|0)){q=0;i=o;break}q=Xa[i&255](l,y)|0;i=c[s>>2]|0}while(0);l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break s}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3849;break c}}}default:{w=0;while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;t:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+84>>2]|0;do if(!i){q=0;i=o}else{if((c[t+20>>2]|0)<=(y|0)){q=0;i=o;break}q=Xa[i&255](l,y)|0;i=c[s>>2]|0}while(0);l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break t}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3847;break c}}}}}break}case 2:{c[rf>>2]=0;o=p+8|0;i=c[o>>2]|0;if(i|0?!((c[Sc>>2]&1048576|0)==0&0==0):0){l=8;oa=1017;break c}z=p+4|0;y=c[(c[uf>>2]|0)+(c[z>>2]<<4)+4>>2]|0;do if(y){l=Zb(y,i,rf)|0;if(l|0){oa=950;break c}if((c[o>>2]|0)!=0?((d[vf>>0]|d[vf+1>>0]<<8)&128)!=0:0){if(a[gd>>0]|0?(c[Ha>>2]|0)<=1:0){i=0;break}i=c[bc>>2]|0;if(!i){l=(c[Fd>>2]|0)+1|0;c[Fd>>2]=l;l=(c[Gd>>2]|0)+l|0;c[bc>>2]=l}else l=i;x=l+-1|0;u:do if(!(c[db>>2]|0))oa=979;else{w=0;while(1){if((w|0)>=(c[Vc>>2]|0))break;t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;q=c[r>>2]|0;v:do if(q){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=l;if(!i)i=0;else{i=Xa[i&255](q,x)|0;o=c[s>>2]|0}q=c[t>>2]|0;na=o+-1|0;c[s>>2]=na;if(na|0)break;o=c[r>>2]|0;if(o|0)Wa[c[(c[o>>2]|0)+16>>2]&127](o)|0;do if(q|0){if(c[q+480>>2]|0){Xd(q,t);break v}o=t;if((c[q+304>>2]|0)>>>0>o>>>0)break;if((c[q+308>>2]|0)>>>0<=o>>>0)break;na=q+300|0;c[t>>2]=c[na>>2];c[na>>2]=t;break v}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{na=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else i=0;while(0);if(!i)w=w+1|0;else break u}l=c[bc>>2]|0;oa=979}while(0);if((oa|0)==979){oa=0;i=c[y+4>>2]|0;c[i+4>>2]=c[y>>2];i=c[i>>2]|0;if((c[i+96>>2]|0)<(l|0)?(a[i+6>>0]|0)!=0:0)i=Vf(i,l)|0;else i=0}na=Pa;ma=c[na+4>>2]|0;la=gc;c[la>>2]=c[na>>2];c[la+4>>2]=ma;la=Na;ma=c[la+4>>2]|0;na=hc;c[na>>2]=c[la>>2];c[na+4>>2]=ma}else i=0}else i=K;while(0);if(b[p+2>>1]|0){if((c[rf>>2]|0)!=(c[p+12>>2]|0)){oa=986;break c}if((c[(c[(c[uf>>2]|0)+(c[z>>2]<<4)+12>>2]|0)+4>>2]|0)!=(c[p+16>>2]|0)){oa=986;break c}}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 94:{i=c[p+12>>2]|0;l=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;o=c[l+4>>2]|0;c[o+4>>2]=c[l>>2];if((i|0)==15)o=(c[l+20>>2]|0)+(c[(c[o>>2]|0)+100>>2]|0)|0;else{o=(c[(c[o+12>>2]|0)+56>>2]|0)+((i<<2)+36)|0;o=d[o+1>>0]<<16|d[o>>0]<<24|d[o+2>>0]<<8|d[o+3>>0]}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=o;c[l+4>>2]=((o|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 95:{w=c[uf>>2]|0;x=p+4|0;y=c[x>>2]|0;l=c[w+(y<<4)+4>>2]|0;z=p+8|0;s=c[z>>2]|0;A=p+12|0;q=c[A>>2]|0;t=c[l+4>>2]|0;c[t+4>>2]=c[l>>2];l=c[t+12>>2]|0;r=c[l+56>>2]|0;l=c[l+72>>2]|0;o=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[o+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[o+96>>2]|0))oa=1035;else{i=Ve(l)|0;oa=1034}else oa=1030;do if((oa|0)==1030){oa=0;i=c[o+40>>2]|0;if(!i)if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){i=Wf(l)|0;oa=1034;break}else{i=Xf(l)|0;oa=1034;break}else o=0}while(0);if((oa|0)==1034){oa=0;if(!i)oa=1035;else o=0}if((oa|0)==1035){oa=0;na=r+((s<<2)+36)|0;a[na>>0]=q>>>24;a[na+1>>0]=q>>>16;a[na+2>>0]=q>>>8;i=q&255;a[na+3>>0]=i;if((s|0)==7){a[t+18>>0]=i;i=0;o=1}else{i=0;o=1}}switch(c[z>>2]|0){case 1:{c[c[w+(y<<4)+12>>2]>>2]=c[A>>2];c[hf>>2]=c[hf>>2]|1;break}case 2:{a[(c[w+(y<<4)+12>>2]|0)+76>>0]=c[A>>2];break}default:{}}if((c[x>>2]|0)==1){l=c[$a>>2]|0;if(l|0)do{na=l+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|1;a[na>>0]=ma;a[na+1>>0]=ma>>8;l=c[l+8>>2]|0}while((l|0)!=0);na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8}if(o){l=m;q=pa;o=qa}else{oa=3855;break c}break}case 106:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((i|0)!=0?(c[i+52>>2]|0)==(c[p+8>>2]|0):0){o=i;i=K;l=p+2|0;oa=1074}else oa=1049;break}case 109:case 108:{oa=1049;break}case 111:{l=c[oc>>2]|0;w=c[l+(c[p+8>>2]<<2)>>2]|0;q=c[p+4>>2]|0;s=b[w+56>>1]|0;t=s<<16>>16;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;o=t<<3;r=o+96|0;o=o+296|0;l=c[l+(q<<2)>>2]|0;if(l|0){na=l+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(o|0)){if(Eg(i,o,0)|0){l=p;j=h;i=zf;oa=3892;break a}o=i+16|0;l=o;o=c[o>>2]|0}else{o=c[i+20>>2]|0;l=i+16|0;c[l>>2]=o;na=i+8|0;b[na>>1]=b[na>>1]&13}c[(c[oc>>2]|0)+(q<<2)>>2]=o;i=o+1|0;ea=o;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=-1;b[o+56>>1]=s;c[o+72>>2]=o+88+(t<<2);na=(c[l>>2]|0)+r|0;i=o+40|0;c[i>>2]=na;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;if(!o){l=p;j=h;i=zf;oa=3892;break a}a[o+2>>0]=1;l=o+5|0;q=a[l>>0]|1;a[l>>0]=q;na=c[w+44>>2]|0;c[o+44>>2]=na;a[o+4>>0]=a[w+4>>0]|0;ma=c[w+52>>2]|0;c[o+52>>2]=ma;a[l>>0]=a[w+5>>0]&4|q&-5;l=m;q=pa;o=qa;i=Vg(c[w+8>>2]|0,ma,4,na,c[i>>2]|0)|0;break}case 113:case 112:{o=c[p+4>>2]|0;q=(c[oc>>2]|0)+(o<<2)|0;i=c[q>>2]|0;if(!i){s=c[p+8>>2]|0;i=c[xd>>2]|0;if((o|0)>0)i=i+(((c[va>>2]|0)-o|0)*40|0)|0;l=s<<3;r=l+96|0;l=l+296|0;if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}w=i+16|0;l=w;i=(c[oc>>2]|0)+(o<<2)|0;w=c[w>>2]|0}else{w=c[i+20>>2]|0;l=i+16|0;c[l>>2]=w;i=i+8|0;b[i>>1]=b[i>>1]&13;i=q}c[i>>2]=w;i=w+1|0;ea=w;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=-1;b[w+56>>1]=s;c[w+72>>2]=w+88+(s<<2);na=(c[l>>2]|0)+r|0;q=w+40|0;c[q>>2]=na;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;if(!w){l=p;j=h;i=zf;oa=3892;break a}a[w+2>>0]=1;s=w+5|0;a[s>>0]=a[s>>0]|1;r=w+8|0;t=p+2|0;i=Pe(c[Cf>>2]|0,0,Cf,r,(b[t>>1]|5)&65535,1054)|0;do if(!i){i=Zb(c[r>>2]|0,1,0)|0;if(!i){l=c[p+16>>2]|0;c[w+44>>2]=l;if(!l){c[w+52>>2]=1;i=Vg(c[r>>2]|0,1,4,0,c[q>>2]|0)|0;a[w+4>>0]=1;break}o=w+52|0;i=Wg(c[r>>2]|0,o,(b[t>>1]|2)&65535)|0;if(!i)i=Vg(c[r>>2]|0,c[o>>2]|0,4,l,c[q>>2]|0)|0;a[w+4>>0]=0}}while(0);a[s>>0]=((b[t>>1]|0)!=8&1)<<2&255|a[s>>0]&-5}else{l=c[i+8>>2]|0;q=c[i+52>>2]|0;o=l+4|0;r=c[o>>2]|0;c[r+4>>2]=c[l>>2];i=c[r+8>>2]|0;w:do if(i|0){x:do if(q)while(1){if((c[i+64>>2]|0)==(q|0))break x;i=c[i+24>>2]|0;if(!i)break w}while(0);i=$f(i,q,0)|0;if(i|0){oa=3855;break c}}while(0);l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,md=c[(c[o>>2]|0)+8>>2]|0,md|0):0){i=md;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(q|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(r,q,0,0)|0}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 114:{q=c[p+4>>2]|0;r=c[p+8>>2]|0;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;l=(r<<3)+96|0;o=c[(c[oc>>2]|0)+(q<<2)>>2]|0;if(o|0){na=o+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}s=c[i+16>>2]|0}else{s=c[i+20>>2]|0;c[i+16>>2]=s;na=i+8|0;b[na>>1]=b[na>>1]&13}c[(c[oc>>2]|0)+(q<<2)>>2]=s;ea=s;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[s>>0]=1;a[s+1>>0]=-1;b[s+56>>1]=r;c[s+72>>2]=s+88+(r<<2);if(!s){l=p;j=h;i=zf;oa=3892;break a}q=c[p+16>>2]|0;l=s+44|0;c[l>>2]=q;o=c[p+12>>2]|0;q=e[q+6>>1]<<2;r=q+156|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=1133;else{oa=1135;break c}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<r>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;t=i;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;t=i;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=1133}while(0);if((oa|0)==1133){oa=0;t=_d(Cf,r,0)|0}if(!t){oa=1135;break c}gw(t|0,0,r|0)|0;c[s+40>>2]=t;na=t+136|0;c[t+28>>2]=na;ew(na|0,c[l>>2]|0,q+20|0)|0;c[t+148>>2]=0;if(o|0)b[t+142>>1]=o;i=c[uf>>2]|0;l=c[(c[(c[i+4>>2]|0)+4>>2]|0)+32>>2]|0;c[t+12>>2]=l;a[t+59>>0]=1;a[t+58>>0]=-1;a[t+57>>0]=0;c[t+24>>2]=Cf;c[t+72>>2]=t;if((a[ra>>0]|0)!=2?(ma=G(c[7379]|0,l)|0,c[t>>2]=ma,na=c[(c[i+12>>2]|0)+80>>2]|0,la=(na|0)<0,be=((l|0)<0)<<31>>31,na=Yv((la?-1024:l)|0,(la?-1:be)|0,na|0,((na|0)<0)<<31>>31|0)|0,la=L()|0,ka=(la|0)<0|(la|0)==0&na>>>0<536870912,na=ka?na:536870912,ka?la:0,c[t+4>>2]=(ma|0)>(na|0)?ma:na,(c[7329]|0)==0):0){c[t+52>>2]=l;na=Sv(l|0,be|0,-1,-1)|0;ma=L()|0;do if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390)i=0;else{if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;break}o=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(!i){i=0;break}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);c[t+40>>2]=i;i=(i|0)==0?7:0}else i=0;do if((e[t+144>>1]|0)<13){na=c[t+156>>2]|0;if(na|0?(na|0)!=(c[jc>>2]|0):0)break;a[t+60>>0]=3}while(0);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 115:{la=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+16|0;na=la;ma=c[na>>2]|0;na=c[na+4>>2]|0;ja=Sv(ma|0,na|0,1,0)|0;ka=L()|0;c[la>>2]=ja;c[la+4>>2]=ka;if((ma|0)==0&(na|0)==0){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 116:{q=c[p+4>>2]|0;r=c[p+12>>2]|0;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;l=(r<<3)+96|0;o=c[(c[oc>>2]|0)+(q<<2)>>2]|0;if(o|0){na=o+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}i=c[i+16>>2]|0}else{na=c[i+20>>2]|0;c[i+16>>2]=na;i=i+8|0;b[i>>1]=b[i>>1]&13;i=na}c[(c[oc>>2]|0)+(q<<2)>>2]=i;ea=i;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=3;a[i+1>>0]=-1;b[i+56>>1]=r;c[i+72>>2]=i+88+(r<<2);if(!i){l=p;j=h;i=zf;oa=3892;break a}a[i+2>>0]=1;c[i+32>>2]=c[p+8>>2];a[i+4>>0]=1;c[i+40>>2]=59954;l=m;q=pa;o=qa;i=K;break}case 117:{l=p+4|0;tg(f,c[(c[oc>>2]|0)+(c[l>>2]<<2)>>2]|0);c[(c[oc>>2]|0)+(c[l>>2]<<2)>>2]=0;l=m;q=pa;o=qa;i=K;break}case 25:case 24:case 23:case 22:{w=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=z&255;a[w+2>>0]=0;y:do if(!(a[w+4>>0]|0)){i=c[w+40>>2]|0;o=(d[i+3>>0]|0)>>>1&1;oa=c[p+16>>2]|0;c[Yd>>2]=c[w+44>>2];b[wa>>1]=oa;a[xa>>0]=(l<<1&2^2)+255;c[ya>>2]=pa+((c[p+12>>2]|0)*40|0);a[za>>0]=0;i=Xg(i,Yd,0,0,0,Td)|0;if(i|0){oa=1213;break c}i=o&255;if(o<<24>>24!=0&(a[za>>0]|0)==0)if(!(c[Td>>2]|0)){p=p+20|0;oa=1212}else{i=0;oa=1211}else{o=i;oa=1194}}else{r=c[p+12>>2]|0;t=pa+(r*40|0)|0;s=pa+(r*40|0)+8|0;i=b[s>>1]|0;if((i&14)==2){i=a[pa+(r*40|0)+10>>0]|0;o=pa+(r*40|0)+16|0;q=pa+(r*40|0)+12|0;if(!(Lg(c[o>>2]|0,rf,c[q>>2]|0,i)|0))i=b[s>>1]|0;else{if(!(Og(c[o>>2]|0,Hd,c[q>>2]|0,i)|0)){na=Hd;oa=c[na+4>>2]|0;i=t;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=4}else{g[t>>3]=+g[rf>>3];i=8}i=b[s>>1]&-3|i;b[s>>1]=i}}i=i&65535;do if(!(i&4)){if(i&8|0){o=Mg(+g[t>>3])|0;q=L()|0;break}if(!(i&18)){o=0;q=0}else{o=Ng(a[pa+(r*40|0)+10>>0]|0,c[pa+(r*40|0)+12>>2]|0,c[pa+(r*40|0)+16>>2]|0)|0;q=L()|0;i=e[s>>1]|0}}else{q=t;o=c[q>>2]|0;q=c[q+4>>2]|0}while(0);do if(!(i&4)){if(!(i&8)){i=K;oa=1211;break y}u=+g[t>>3];v=+(o>>>0)+4294967296.0*+(q|0);if(u<v){l=(l<<31>>31)+l|0;break}else{l=((l&1|0)==0&u>v&1)+l|0;break}}while(0);i=Xg(c[w+40>>2]|0,0,o,q,0,Td)|0;oa=w+64|0;c[oa>>2]=o;c[oa+4>>2]=q;if(!i){o=0;oa=1194}else{oa=1213;break c}}while(0);z:do if((oa|0)==1194){oa=0;a[w+3>>0]=0;c[w+28>>2]=0;i=c[Td>>2]|0;if((l|0)>23){if((i|0)>=0?!((l|0)==25&(i|0)==0):0)c[Td>>2]=0;else oa=1197;A:do if((oa|0)==1197){c[Td>>2]=0;i=Yg(c[w+40>>2]|0,0)|0;switch(i|0){case 0:break A;case 101:break;default:{oa=1213;break c}}c[Td>>2]=1;i=0;oa=1211;break z}while(0);p=(o|0)==0?p:p+20|0;oa=1212;break}if((i|0)<=0?!((l|0)==22&(i|0)==0):0){oa=(a[c[w+40>>2]>>0]|0)!=0;c[Td>>2]=oa&1;if(oa){i=0;oa=1211;break}else{p=(o|0)==0?p:p+20|0;oa=1212;break}}c[Td>>2]=0;i=c[w+40>>2]|0;na=i+1|0;a[na>>0]=a[na>>0]&-15;b[i+50>>1]=0;if(((a[i>>0]|0)==0?(ce=i+70|0,de=b[ce>>1]|0,de<<16>>16!=0):0)?(a[(c[i+116>>2]|0)+8>>0]|0)!=0:0)b[ce>>1]=de+-1<<16>>16;else oa=1206;B:do if((oa|0)==1206){i=Hh(i)|0;switch(i|0){case 0:break B;case 101:break;default:{oa=1213;break c}}c[Td>>2]=1;i=0;oa=1211;break z}while(0);p=(o|0)==0?p:p+20|0;oa=1212}while(0);if((oa|0)==1211){oa=28;break d}else if((oa|0)==1212){oa=0;l=m;q=pa;o=qa;i=0;break d}break}case 119:{l=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+5|0;a[l>>0]=(c[p+8>>2]&255)<<3&8|a[l>>0]&-9;l=m;q=pa;o=qa;i=K;break}case 26:{if(!(a[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+5>>0]&8))oa=1216;else{l=m;q=pa;o=qa;i=K}break}case 29:case 28:case 27:{oa=1216;break}case 30:{i=p+12|0;o=c[i>>2]|0;t=pa+(o*40|0)+8|0;w=b[t>>1]|0;if(!(w&4)){s=pa+(o*40|0)|0;l=w&65535;do if(!(l&4)){if(l&8|0){v=+g[s>>3];o=Mg(v)|0;q=L()|0;oa=Sv(o|0,q|0,1,-2147483648)|0;na=L()|0;l=w&15904|4;if(!((na>>>0>0|(na|0)==0&oa>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0))){l=w;break}oa=s;c[oa>>2]=o;c[oa+4>>2]=q;b[t>>1]=l;break}if(l&2){q=a[pa+(o*40|0)+10>>0]|0;r=pa+(o*40|0)+16|0;l=pa+(o*40|0)+12|0;if(!(Lg(c[r>>2]|0,rf,c[l>>2]|0,q)|0))l=b[t>>1]|0;else{if(Og(c[r>>2]|0,Hd,c[l>>2]|0,q)|0){v=+g[rf>>3];g[s>>3]=v;o=b[t>>1]|0;l=o|8;b[t>>1]=l;q=Mg(v)|0;r=L()|0;na=Sv(q|0,r|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(q>>>0)+4294967296.0*+(r|0)){l=s;c[l>>2]=q;c[l+4>>2]=r;l=o&15904;oa=1281}}else{na=Hd;oa=c[na+4>>2]|0;l=s;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=b[t>>1]|0;oa=1281}if((oa|0)==1281){l=l|4;b[t>>1]=l}l=l&-3;b[t>>1]=l}}else l=w}else l=w;while(0);b[t>>1]=w;if(!(l&4)){i=K;oa=28}else oa=1287}else oa=1287;break}case 31:{i=p+12|0;oa=1287;break}case 120:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+16|0;q=l;o=c[q>>2]|0;q=c[q+4>>2]|0;ma=Sv(o|0,q|0,1,0)|0;na=L()|0;c[l>>2]=ma;c[l+4>>2]=na;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case 121:{na=rf;c[na>>2]=0;c[na+4>>2]=0;c[Hd>>2]=0;na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;y=i}else{lh(i)|0;y=i}z=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=z+5|0;do if(!(a[x>>0]&2)){l=z+40|0;i=$g(c[l>>2]|0,Hd)|0;if(i|0){oa=1328;break c}if(c[Hd>>2]|0){i=rf;c[i>>2]=1;c[i+4>>2]=0;i=0;break}l=c[l>>2]|0;bg(l);l=l+32|0;i=c[l>>2]|0;l=c[l+4>>2]|0;na=rf;c[na>>2]=i;c[na+4>>2]=l;if((i|0)==-1&(l|0)==2147483647){a[x>>0]=a[x>>0]|2;i=0;break}else{ma=Sv(i|0,l|0,1,0)|0;na=L()|0;i=rf;c[i>>2]=ma;c[i+4>>2]=na;i=0;break}}else i=K;while(0);r=c[p+12>>2]|0;if(r|0){l=c[nc>>2]|0;if(!l)o=pa;else{while(1){o=c[l+4>>2]|0;if(!o)break;else l=o}o=c[l+16>>2]|0}w=o+(r*40|0)|0;s=o+(r*40|0)+8|0;l=b[s>>1]|0;q=l&65535;do if(!(q&4)){if(q&8|0){q=Mg(+g[w>>3])|0;o=L()|0;oa=1317;break}if(!(q&18)){t=w;c[t>>2]=0;c[t+4>>2]=0;b[s>>1]=l&15904|4;t=0;q=0;break}else{q=Ng(a[o+(r*40|0)+10>>0]|0,c[o+(r*40|0)+12>>2]|0,c[o+(r*40|0)+16>>2]|0)|0;o=L()|0;l=b[s>>1]|0;oa=1317;break}}else{o=w;q=c[o>>2]|0;o=c[o+4>>2]|0;oa=1317}while(0);if((oa|0)==1317){oa=0;na=w;c[na>>2]=q;c[na+4>>2]=o;b[s>>1]=l&15904|4;if((q|0)==-1&(o|0)==2147483647){i=13;oa=1328;break c}else t=o}if(a[x>>0]&2){i=13;oa=1328;break c}l=rf;o=c[l>>2]|0;l=c[l+4>>2]|0;r=Sv(q|0,t|0,1,0)|0;s=L()|0;if(!((l|0)>(t|0)|(l|0)==(t|0)&o>>>0>q>>>0)){o=rf;c[o>>2]=r;c[o+4>>2]=s;o=r;l=s}na=w;c[na>>2]=o;c[na+4>>2]=l}if(a[x>>0]&2){o=z+40|0;l=0;do{Fb(8,rf);q=rf;q=Sv(c[q>>2]|0,c[q+4>>2]&1073741823|0,1,0)|0;i=L()|0;na=rf;c[na>>2]=q;c[na+4>>2]=i;i=Xg(c[o>>2]|0,0,q,i,0,Hd)|0;q=c[Hd>>2]|0;if(q|i|0)break;l=l+1|0}while(l>>>0<100);if(i|0){oa=1328;break c}if(!q){i=13;oa=1328;break c}else i=0}a[z+3>>0]=0;c[z+28>>2]=0;o=rf;q=c[o+4>>2]|0;l=y;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;break}case 122:{i=c[p+8>>2]|0;s=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=pa+((c[p+12>>2]|0)*40|0)|0;t=c[w>>2]|0;w=c[w+4>>2]|0;na=qc;c[na>>2]=t;c[na+4>>2]=w;if((a[p+1>>0]|0)==-6?(c[Ca>>2]|0)!=0:0){q=c[(c[uf>>2]|0)+(a[s+1>>0]<<4)>>2]|0;r=c[p+16>>2]|0}else{q=0;r=0}x=p+2|0;l=b[x>>1]|0;if(l&1)c[rc>>2]=(c[rc>>2]|0)+1;if(l&32){na=zb;c[na>>2]=t;c[na+4>>2]=w}c[xb>>2]=c[pa+(i*40|0)+16>>2];c[yb>>2]=c[pa+(i*40|0)+12>>2];if(!(l&16))o=0;else o=c[s+32>>2]|0;if(!(b[pa+(i*40|0)+8>>1]&16384))i=0;else i=c[pa+(i*40|0)>>2]|0;c[Sb>>2]=i;c[rf>>2]=0;i=ah(c[s+40>>2]|0,rf,l&10,o)|0;a[s+3>>0]=0;c[s+28>>2]=0;if(i|0){oa=1345;break c}if(r|0)eb[c[Ca>>2]&127](c[Tb>>2]|0,(b[x>>1]&4)==0?18:23,q,c[r>>2]|0,t,w);l=m;q=pa;o=qa;i=0;break}case 123:{q=c[p+8>>2]|0;r=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((a[p+1>>0]|0)==-6?(c[Ca>>2]|0)!=0:0){i=c[(c[uf>>2]|0)+(a[r+1>>0]<<4)>>2]|0;l=c[p+16>>2]|0;if((b[p+2>>1]&2)!=0?(a[r+4>>0]|0)!=0:0){ma=c[r+40>>2]|0;bg(ma);ma=ma+32|0;na=c[ma+4>>2]|0;o=r+64|0;c[o>>2]=c[ma>>2];c[o+4>>2]=na;o=i}else o=i}else{o=0;l=0}i=bh(c[r+40>>2]|0,b[p+2>>1]&255)|0;c[r+28>>2]=0;c[r+32>>2]=0;if(i|0){oa=3855;break c}if(((q&1|0)!=0?(c[rc>>2]=(c[rc>>2]|0)+1,ge=c[Ca>>2]|0,(ge|0)!=0):0)?(c[l+36>>2]&32|0)==0:0){q=r+64|0;eb[ge&127](c[Tb>>2]|0,9,o,c[l>>2]|0,c[q>>2]|0,c[q+4>>2]|0);l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}break}case 124:{l=c[rc>>2]|0;c[sc>>2]=l;c[tc>>2]=(c[tc>>2]|0)+l;c[rc>>2]=0;l=m;q=pa;o=qa;i=K;break}case 125:{t=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+12>>2]|0;x=c[p+16>>2]|0;s=c[t+40>>2]|0;r=s+32|0;i=c[r>>2]|0;t=c[t+44>>2]|0;if(!i){q=((e[t+6>>1]|0)*40|0)+56|0;o=c[t+12>>2]|0;C:do if(!o){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;oa=1381;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(!i){oa=1382;break c}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){oa=1382;break c}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<q>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1381;break C}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1381;break C}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,q,0)|0;oa=1381}while(0);if((oa|0)==1381){oa=0;if(!i){oa=1382;break c}}c[i+4>>2]=i+16;c[i>>2]=t;c[r>>2]=i;b[i+8>>1]=x;o=i}else o=i;if(!(a[s+56>>0]|0)){l=c[s+36>>2]|0;i=l+8|0}else{l=c[s+20>>2]|0;na=c[l+12>>2]|0;l=c[(c[l+8>>2]|0)+4>>2]|0;i=c[na+(l*56|0)+32>>2]|0;l=na+(l*56|0)+20|0}_g(t,c[l>>2]|0,i,o);if((x|0)>0){l=c[o+4>>2]|0;i=0;do{if(b[l+(i*40|0)+8>>1]&1){i=0;oa=28;break d}i=i+1|0}while((i|0)<(x|0))}if(!(Fh(c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0,o,0)|0)){l=m;q=pa;o=qa;i=0}else{i=0;oa=28}break}case 126:{s=c[p+8>>2]|0;i=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;if(!(a[i+56>>0]|0)){i=c[i+36>>2]|0;r=i+8|0}else{i=c[i+20>>2]|0;na=c[i+12>>2]|0;i=c[(c[i+8>>2]|0)+4>>2]|0;r=c[na+(i*56|0)+32>>2]|0;i=na+(i*56|0)+20|0}i=c[i>>2]|0;if((c[pa+(s*40|0)+24>>2]|0)<(i|0)){if(Eg(pa+(s*40|0)|0,i,0)|0){i=7;oa=3855;break c}o=pa+(s*40|0)+8|0;l=o;o=b[o>>1]|0;q=c[pa+(s*40|0)+16>>2]|0}else{q=c[pa+(s*40|0)+20>>2]|0;c[pa+(s*40|0)+16>>2]=q;l=pa+(s*40|0)+8|0;o=b[l>>1]&13;b[l>>1]=o}c[pa+(s*40|0)+12>>2]=i;b[l>>1]=o&15904|16;ew(q|0,r|0,i|0)|0;c[(c[(c[oc>>2]|0)+(c[p+12>>2]<<2)>>2]|0)+28>>2]=0;l=m;q=pa;o=qa;i=0;break}case 127:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;q=i}else{lh(i)|0;q=i}i=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;bg(i);l=c[i+44>>2]|0;if(l>>>0>(c[Da>>2]|0)>>>0){oa=3891;break c}na=e[i+48>>1]|0;o=c[i+40>>2]|0;ma=(c[(c[i+116>>2]|0)+60>>2]|0)-o|0;if(l>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(i,0,l,q)|0;if(i|0){oa=3855;break c}}else{c[q+16>>2]=o;b[q+8>>1]=4112;c[q+12>>2]=l}if((c[p+12>>2]|0)==0?(he=q+8|0,ie=b[he>>1]|0,(ie&4096)!=0):0){i=ie&65535;do if(!(i&18))i=ie;else{do if(!(i&16384))i=ie;else{l=q+12|0;i=(c[q>>2]|0)+(c[l>>2]|0)|0;if((i|0)<1)if(!(ie&16)){i=ie;break}else i=1;if(Eg(q,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[q+16>>2]|0)+(c[l>>2]|0)|0,0,c[q>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[q>>2]|0);i=b[he>>1]&-16897;b[he>>1]=i}while(0);if(c[q+24>>2]|0?(c[q+16>>2]|0)==(c[q+20>>2]|0):0)break;if(Jg(q)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[he>>1]|0}while(0);b[he>>1]=i&-4097;l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}break}case -128:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;w=i}else{lh(i)|0;w=i}l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;q=l+2|0;D:do if(!(a[q>>0]|0)){do if(!(a[l+3>>0]|0)){if((a[l>>0]|0)!=2){o=l+40|0;i=c[o>>2]|0;do if(a[i>>0]|0){i=sh(l)|0;if(i|0){oa=1481;break c}if(!(a[q>>0]|0)){i=c[o>>2]|0;break}else{b[w+8>>1]=1;i=0;break D}}while(0);bg(i);o=i+32|0;l=c[o>>2]|0;o=c[o+4>>2]|0;i=rf;c[i>>2]=l;c[i+4>>2]=o;i=0;break}i=c[l+40>>2]|0;t=c[i>>2]|0;i=Xa[c[(c[t>>2]|0)+48>>2]&255](i,rf)|0;t=t+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;E:do if(l|0){do if(q|0){if(c[q+480>>2]|0){Xd(q,l);break E}o=l;if((c[q+304>>2]|0)>>>0>o>>>0)break;if((c[q+308>>2]|0)>>>0<=o>>>0)break;na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break E}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;F:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;G:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break F}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=1464;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break F}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break F}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1464;break G}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1464;break G}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=1464}while(0);if((oa|0)==1464){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=1481;break c}o=rf;i=0;l=c[o>>2]|0;o=c[o+4>>2]|0}else{o=l+64|0;l=c[o>>2]|0;o=c[o+4>>2]|0;i=rf;c[i>>2]=l;c[i+4>>2]=o;i=K}while(0);na=w;c[na>>2]=l;c[na+4>>2]=o}else{b[w+8>>1]=1;i=K}while(0);l=m;q=pa;o=qa;break}case -127:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;a[i+2>>0]=1;c[i+28>>2]=0;if(!(a[i>>0]|0)){i=c[i+40>>2]|0;l=i+16|0;o=c[l>>2]|0;do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[l>>2]=0;a[i>>0]=1;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 32:case -126:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[l+40>>2]|0;c[rf>>2]=0;if(z<<24>>24==-126?(c[l+32>>2]=-1,(a[i>>0]|0)==0):0){l=m;q=pa;o=qa;i=K;break d}r=$g(i,rf)|0;i=c[rf>>2]|0;a[l+2>>0]=i;a[l+3>>0]=0;c[l+28>>2]=0;if(r|0){oa=1492;break c}if((i|0)!=0&(c[p+8>>2]|0)>0){i=0;oa=28}else{l=m;q=pa;o=qa;i=0}break}case 33:{s=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;i=ch(s,rf)|0;if(i|0){oa=1519;break c}do if(!(c[rf>>2]|0)){if((a[s>>0]|0)==0?(ke=c[s+116>>2]|0,a[ke+8>>0]|0):0){i=e[ke+24>>1]|0;l=a[s+68>>0]|0;if(l<<24>>24>0){q=l<<24>>24;o=0;r=0;l=0;do{i=Yv(i|0,l|0,e[(c[s+120+(r<<2)>>2]|0)+24>>1]|0,0)|0;l=L()|0;o=o+1<<24>>24;r=o&255}while((r|0)<(q|0))}else l=0;if(l>>>0<0|(l|0)==0&i>>>0<8)if(l>>>0<0|(l|0)==0&i>>>0<2)i=0;else{o=40;do{o=(o&65535)+65526|0;i=cw(i|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&i>>>0<8);o=o&65535;oa=1514}else{if(l>>>0>0|(l|0)==0&i>>>0>255){o=40;do{o=(o&65535)+40|0;oa=i;i=bw(i|0,l|0,4)|0;na=l;l=L()|0}while(na>>>0>0|(na|0)==0&oa>>>0>4095);o=o&65535}else o=40;if(l>>>0>0|(l|0)==0&i>>>0>15){do{o=(o&65535)+10&65535;oa=i;i=bw(i|0,l|0,1)|0;na=l;l=L()|0}while(na>>>0>0|(na|0)==0&oa>>>0>31);oa=1514}else oa=1514}if((oa|0)==1514){oa=0;i=(o&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)|0}if((c[p+12>>2]|0)>(i<<16>>16|0)){c[rf>>2]=1;break}}l=m;q=pa;o=qa;i=0;break d}while(0);i=0;oa=28;break}case 35:case 34:{c[uc>>2]=(c[uc>>2]|0)+1;oa=1521;break}case 36:{oa=1521;break}case 3:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[l+40>>2]|0;if(a[i+56>>0]|0){c[rf>>2]=0;i=fi(c[i+20>>2]|0,rf)|0;i=(i|0)==0&(c[rf>>2]|0)!=0?101:i;oa=2160;break d}q=i+36|0;o=c[q>>2]|0;oa=o+4|0;c[q>>2]=c[oa>>2];c[oa>>2]=0;do if(!((o|0)==0|(c[i+40>>2]|0)!=0)){if(c[Ze>>2]|0){Xd(Cf,o);break}oa=o;if((c[_e>>2]|0)>>>0<=oa>>>0?(c[$e>>2]|0)>>>0>oa>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{oa=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);i=(c[q>>2]|0)==0?101:0;oa=2160;break}case 5:case 4:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=i;i=Xa[c[p+16>>2]&255](c[i+40>>2]|0,c[p+12>>2]|0)|0;oa=2160;break}case -124:case -125:{t=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+8>>2]|0;o=pa+(w*40|0)|0;s=p+2|0;if(b[s>>1]&1)c[rc>>2]=(c[rc>>2]|0)+1;q=pa+(w*40|0)+8|0;l=b[q>>1]|0;do if(!(l&16384))i=z;else{r=pa+(w*40|0)+12|0;i=(c[o>>2]|0)+(c[r>>2]|0)|0;if((i|0)<1)if(!(l&16)){i=z;break}else i=1;if(Eg(o,i,1)|0){oa=2221;break c}gw((c[pa+(w*40|0)+16>>2]|0)+(c[r>>2]|0)|0,0,c[o>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[o>>2]|0);b[q>>1]=b[q>>1]&-16897;i=a[p>>0]|0}while(0);if(i<<24>>24==-125){t=c[t+40>>2]|0;F=pa+(w*40|0)+16|0;l=c[F>>2]|0;o=l+1|0;na=a[o>>0]|0;i=na&255;do if(na<<24>>24<=-1){q=d[l+2>>0]|0;if(!(q&128)){i=i<<7&16256|q;break}l=d[l+3>>0]|0;if(!(l&128)){i=(i<<14|l)&2080895|q<<7&16256;break}else{Of(o,rf)|0;na=rf;i=c[na>>2]|0;i=((i|0)==(i|0)?0==(c[na+4>>2]|0):0)?i:-1;break}}while(0);do if(!((i|0)!=7&(i+-1|0)>>>0<9)){l=t+60|0;if((i|0)<11|(i&1|0)==0){a[l>>0]=0;break}else{a[l>>0]=a[l>>0]&2;break}}else{na=t+60|0;a[na>>0]=a[na>>0]&1}while(0);E=pa+(w*40|0)+12|0;D=c[E>>2]|0;o=1;i=D;l=((D|0)<0)<<31>>31;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0)break;else o=o+1|0}s=D+8|0;q=o+D|0;B=t+4|0;l=c[B>>2]|0;do if(!l)i=0;else{if(!(c[t+40>>2]|0)){i=t+44|0;na=c[i>>2]|0;if((na|0)<=(l|0)?!(c[14768]|0?(na|0)>(c[t>>2]|0):0):0){i=0;break}}else{na=c[t+48>>2]|0;if((na|0)==0|(na+s|0)<=(l|0)){i=0;break}i=t+44|0}na=Vh(t)|0;c[i>>2]=0;c[t+48>>2]=0;i=na}while(0);o=t+36|0;l=t+44|0;c[l>>2]=(c[l>>2]|0)+q;l=t+8|0;if((q|0)>(c[l>>2]|0))c[l>>2]=q;A=t+40|0;l=c[A>>2]|0;r=l;if(l){C=t+48|0;q=c[C>>2]|0;y=q+s|0;z=t+52|0;s=c[z>>2]|0;if((y|0)>(s|0)){q=c[o>>2]|0;x=((y|0)<0)<<31>>31;w=s;t=((s|0)<0)<<31>>31;do{w=cw(w|0,t|0,1)|0;t=L()|0}while((t|0)<(x|0)|(t|0)==(x|0)&w>>>0<y>>>0);s=(q|0)==0?-1:q-r|0;q=c[B>>2]|0;r=((q|0)<0)<<31>>31;na=(t|0)>(r|0)|(t|0)==(r|0)&w>>>0>q>>>0;q=na?q:w;r=na?r:t;na=(r|0)<(x|0)|(r|0)==(x|0)&q>>>0<y>>>0;q=na?y:q;r=sb(l,q,na?x:r)|0;if(!r){oa=2221;break c}if((s|0)>-1)c[o>>2]=r+s;c[A>>2]=r;c[z>>2]=q;l=r;q=c[C>>2]|0}l=l+q|0;c[C>>2]=q+(D+15&-8);q=c[o>>2]|0;if(q)c[l+4>>2]=q-r}else{na=Sv(s|0,((s|0)<0)<<31>>31|0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){oa=2221;break c}do if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;if(!l){oa=2221;break c}}else{r=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;l=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,q|0,r|0,((r|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](r)|0;if(!l){oa=2221;break c}q=Wa[c[29352>>2]&127](l)|0;q=(c[14978]|0)+q|0;c[14978]=q;if(q>>>0>(c[14982]|0)>>>0)c[14982]=q;q=(c[14981]|0)+1|0;c[14981]=q;if(q>>>0<=(c[14987]|0)>>>0)break;c[14987]=q}while(0);c[l+4>>2]=c[o>>2]}ew(l+8|0,c[F>>2]|0,c[E>>2]|0)|0;c[l>>2]=c[E>>2];c[o>>2]=l}else{na=c[pa+(w*40|0)+12>>2]|0;i=Ab;c[i>>2]=na;c[i+4>>2]=((na|0)<0)<<31>>31;c[Hd>>2]=c[pa+(w*40|0)+16>>2];c[Bb>>2]=pa+((c[p+12>>2]|0)*40|0);b[Cb>>1]=c[p+16>>2];i=e[s>>1]|0;if(!(i&16))l=0;else l=c[t+32>>2]|0;i=ah(c[t+40>>2]|0,Hd,i&10,l)|0;c[t+28>>2]=0}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -123:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;o=c[l+40>>2]|0;c[Hd>>2]=c[l+44>>2];b[vc>>1]=c[p+12>>2];a[wc>>0]=0;c[xc>>2]=pa+((c[p+8>>2]|0)*40|0);i=Xg(o,Hd,0,0,0,rf)|0;if(i|0){oa=2226;break c}if((c[rf>>2]|0)==0?(me=bh(o,4)|0,me|0):0){i=me;oa=2226;break c}c[l+28>>2]=0;c[l+32>>2]=0;l=m;q=pa;o=qa;i=0;break}case -121:case -122:{s=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=s+40|0;if(a[c[i>>2]>>0]|0?(ne=sh(s)|0,ne|0):0){i=ne;oa=3855;break c}if(a[s+2>>0]|0){i=c[p+8>>2]|0;l=pa+(i*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=1;l=m;q=pa;o=qa;i=0;break d}else{Dg(pa+(i*40|0)|0);l=m;q=pa;o=qa;i=0;break d}}i=c[i>>2]|0;bg(i);l=c[i+44>>2]|0;b[jb>>1]=0;c[kb>>2]=Cf;c[lb>>2]=0;na=e[i+48>>1]|0;o=c[i+40>>2]|0;ma=(c[(c[i+116>>2]|0)+60>>2]|0)-o|0;if(l>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(i,0,l,Hd)|0;if(i|0){oa=2256;break c}o=c[Eb>>2]|0}else{c[Eb>>2]=o;b[jb>>1]=4112;c[Gb>>2]=l}na=a[o>>0]|0;i=na&255;do if(na<<24>>24<=-1){l=d[o+1>>0]|0;if(!(l&128)){i=i<<7&16256|l;oa=2241;break}q=d[o+2>>0]|0;if(q&128){Of(o,rf)|0;na=rf;i=c[na>>2]|0;if((i|0)==(i|0)?0==(c[na+4>>2]|0):0){oa=2241;break}else{i=-1;break}}else{i=(i<<14|q)&2080895|l<<7&16256;oa=2241;break}}else oa=2241;while(0);if((oa|0)==2241){oa=0;if(i>>>0<3){oa=2253;break c}}if(i>>>0>(c[Gb>>2]|0)>>>0){oa=2253;break c}o=c[Eb>>2]|0;r=o+(i+-1)|0;na=a[r>>0]|0;l=na&255;do if(na<<24>>24<=-1){o=d[o+i>>0]|0;if(!(o&128)){l=l<<7&16256|o;break}q=d[r+2>>0]|0;if(!(q&128)){l=(l<<14|q)&2080895|o<<7&16256;break}else{Of(r,rf)|0;na=rf;l=c[na>>2]|0;l=((l|0)==(l|0)?0==(c[na+4>>2]|0):0)?l:-1;break}}while(0);if((l|0)==7|(l+-1|0)>>>0>8){oa=2253;break c}o=d[3520+l>>0]|0;q=c[Gb>>2]|0;if(q>>>0<(i+o|0)>>>0){oa=2253;break c}Ug((c[Eb>>2]|0)+(q-o)|0,l,Td)|0;q=Td;o=c[q>>2]|0;q=c[q+4>>2]|0;if(!((b[jb>>1]&9216)==0&(c[lb>>2]|0)==0))Cg(Hd);if((a[p>>0]|0)==-122){l=c[(c[oc>>2]|0)+(c[p+12>>2]<<2)>>2]|0;a[l+2>>0]=0;i=l+64|0;c[i>>2]=o;c[i+4>>2]=q;a[l+3>>0]=1;c[l+24>>2]=c[p+16>>2];c[l+36>>2]=s;l=m;q=pa;o=qa;i=0;break d}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=0;break}case 40:case 39:case 38:case 37:{o=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;c[Hd>>2]=c[o+44>>2];b[zc>>1]=c[p+16>>2];a[Ac>>0]=((z&255)<39)<<31>>31;c[Bc>>2]=pa+((c[p+12>>2]|0)*40|0);o=c[o+40>>2]|0;bg(o);i=c[o+44>>2]|0;if((i|0)<1){oa=2267;break c}b[Ea>>1]=0;c[Fa>>2]=Cf;c[Ga>>2]=0;na=e[o+48>>1]|0;l=c[o+40>>2]|0;ma=(c[(c[o+116>>2]|0)+60>>2]|0)-l|0;if(i>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(o,0,i,rf)|0;if(i|0){oa=2274;break c}i=c[nb>>2]|0;l=c[mb>>2]|0}else{c[mb>>2]=l;b[Ea>>1]=4112;c[nb>>2]=i}i=Fh(i,l,Hd,0)|0;if(!((b[Ea>>1]&9216)==0&(c[Ga>>2]|0)==0))Cg(rf);if((((a[p>>0]&1)==0?i+1|0:0-i|0)|0)>0){i=0;oa=28}else{l=m;q=pa;o=qa;i=0}break}case -120:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;A=i}else{lh(i)|0;A=i}B=A+8|0;b[B>>1]=1;if((c[Ha>>2]|0)>((c[ad>>2]|0)+1|0)){oa=2280;break c}C=c[p+12>>2]|0;x=c[(c[uf>>2]|0)+(C<<4)+4>>2]|0;z=p+4|0;s=c[z>>2]|0;y=x+4|0;w=c[y>>2]|0;c[w+4>>2]=c[x>>2];if((c[w+44>>2]|0)>>>0<s>>>0){oa=2282;break c}l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,s,rf,0)|0;if(l|0){oa=2286;break c}i=c[rf>>2]|0;r=c[i+8>>2]|0;q=r+4|0;if((c[q>>2]|0)!=(s|0)){c[r+56>>2]=c[i+4>>2];c[r+72>>2]=i;c[r+52>>2]=w;c[q>>2]=s;a[r+9>>0]=(s|0)==1?100:0}o=c[y>>2]|0;c[o+4>>2]=c[x>>2];i=c[o+8>>2]|0;H:do if(i|0){I:do if(s)while(1){if((c[i+64>>2]|0)==(s|0))break I;i=c[i+24>>2]|0;if(!i)break H}while(0);i=$f(i,s,0)|0;if(i|0){j=i;oa=2301;break c}}while(0);l=x+11|0;if(a[l>>0]|0?(a[l>>0]=0,kd=c[(c[y>>2]|0)+8>>2]|0,kd|0):0){i=kd;do{do if(a[i+1>>0]&16){a[l>>0]=1;if((c[i+64>>2]|0)!=(s|0))break;a[i>>0]=1}while(0);i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(o,s,0,0)|0;if(i|0){j=i;oa=2301;break c}if(!(a[w+17>>0]|0)){i=Bh(c[r+52>>2]|0,r,c[q>>2]|0)|0;do if(r|0){l=c[r+72>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{na=c[l+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[l+16>>2]=c[na>>2];c[na>>2]=l;break}}while(0);b[B>>1]=4;na=A;c[na>>2]=0;c[na+4>>2]=0;if(!i){l=m;q=pa;o=qa;i=0;break d}else{oa=3855;break c}}t=c[y>>2]|0;c[t+4>>2]=c[x>>2];t=c[(c[t+12>>2]|0)+56>>2]|0;t=d[t+53>>0]<<16|d[t+52>>0]<<24|d[t+54>>0]<<8|d[t+55>>0];if((t|0)==(s|0)){l=Bh(c[r+52>>2]|0,r,c[q>>2]|0)|0;do if(r|0){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);if(!l)i=0;else{i=0;j=l;oa=2353;break c}}else{do if(r|0){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,t,rf,0)|0;if(l|0){oa=2319;break c}i=c[rf>>2]|0;o=c[i+8>>2]|0;l=o+4|0;if((c[l>>2]|0)!=(t|0)){c[o+56>>2]=c[i+4>>2];c[o+72>>2]=i;c[o+52>>2]=w;c[l>>2]=t;a[o+9>>0]=(t|0)==1?100:0}l=gg(w,o,1,0,s,0)|0;do if(o|0){i=c[o+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);if(l|0){i=0;j=l;oa=2353;break c}l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,t,rf,0)|0;if(l|0){oa=2329;break c}i=c[rf>>2]|0;o=c[i+8>>2]|0;l=o+4|0;if((c[l>>2]|0)==(t|0)){l=o+72|0;i=c[o+52>>2]|0}else{c[o+56>>2]=c[i+4>>2];na=o+72|0;c[na>>2]=i;c[o+52>>2]=w;c[l>>2]=t;a[o+9>>0]=(t|0)==1?100:0;l=na;i=w}o=Bh(i,o,t)|0;i=c[l>>2]|0;if(!(b[i+28>>1]&32))Df(i);else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i}if(!o)i=t;else{i=0;j=o;oa=2353;break c}}q=1073741824/((c[w+32>>2]|0)>>>0)|0;r=q+1|0;o=w+36|0;l=t;while(1){s=l+-1|0;if((s|0)!=(r|0)){if(s>>>0<2)l=0;else{l=l+-3|0;l=l-((l>>>0)%(((((c[o>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;l=((l+1|0)==(q|0)?3:2)+l|0}if((l|0)!=(s|0))break}l=s}o=c[y>>2]|0;c[o+4>>2]=c[x>>2];o=c[o+12>>2]|0;l=c[o+56>>2]|0;o=c[o+72>>2]|0;q=c[o+20>>2]|0;do if(!(b[o+28>>1]&4))oa=2344;else{if((c[q+24>>2]|0)>>>0<(c[o+24>>2]|0)>>>0){oa=2344;break}if(!(c[q+96>>2]|0))break;j=Ve(o)|0;oa=2348}while(0);do if((oa|0)==2344){j=c[q+40>>2]|0;if(j|0){oa=2353;break c}if((c[q+148>>2]|0)>>>0>(c[q+152>>2]|0)>>>0){j=Wf(o)|0;oa=2348;break}else{j=Xf(o)|0;oa=2348;break}}while(0);if((oa|0)==2348?(oa=0,j|0):0){oa=2353;break c}a[l+52>>0]=s>>>24;a[l+53>>0]=s>>>16;a[l+54>>0]=s>>>8;a[l+55>>0]=s;b[B>>1]=4;na=A;c[na>>2]=i;c[na+4>>2]=((i|0)<0)<<31>>31;if(!i){l=m;q=pa;o=qa;i=0}else{q=c[z>>2]|0;o=c[(c[uf>>2]|0)+(C<<4)+12>>2]|0;k=c[o+16>>2]|0;if(k|0)do{l=(c[k+8>>2]|0)+28|0;if((c[l>>2]|0)==(i|0))c[l>>2]=q;k=c[k>>2]|0}while((k|0)!=0);k=c[o+32>>2]|0;if(k|0)do{l=(c[k+8>>2]|0)+44|0;if((c[l>>2]|0)==(i|0))c[l>>2]=q;k=c[k>>2]|0}while((k|0)!=0);k=C+1&255;l=m;q=pa;o=qa;i=0}break}case -119:{c[rf>>2]=0;l=c[(c[uf>>2]|0)+(c[p+8>>2]<<4)+4>>2]|0;r=c[p+4>>2]|0;t=p+12|0;q=(c[t>>2]|0)==0?0:rf;o=l+4|0;s=c[o>>2]|0;c[s+4>>2]=c[l>>2];i=c[s+8>>2]|0;J:do if(i){K:do if(r)while(1){if((c[i+64>>2]|0)==(r|0))break K;i=c[i+24>>2]|0;if(!i){oa=2373;break J}}while(0);i=$f(i,r,0)|0;if(!i)oa=2373}else oa=2373;while(0);if((oa|0)==2373){oa=0;l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,ld=c[(c[o>>2]|0)+8>>2]|0,ld|0):0){i=ld;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(r|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(s,r,0,q)|0}l=c[t>>2]|0;if(l|0?(oe=c[rf>>2]|0,c[rc>>2]=(c[rc>>2]|0)+oe,pe=pa+(l*40|0)|0,(l|0)>0):0){la=pe;la=Sv(c[la>>2]|0,c[la+4>>2]|0,oe|0,((oe|0)<0)<<31>>31|0)|0;ma=L()|0;na=pe;c[na>>2]=la;c[na+4>>2]=ma}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -118:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((a[i>>0]|0)==1){wg(Cf,c[i+40>>2]|0);l=m;q=pa;o=qa;i=K;break d}q=c[i+40>>2]|0;l=c[q+8>>2]|0;q=c[q+64>>2]|0;o=l+4|0;r=c[o>>2]|0;c[r+4>>2]=c[l>>2];i=c[r+8>>2]|0;L:do if(i|0){M:do if(q)while(1){if((c[i+64>>2]|0)==(q|0))break M;i=c[i+24>>2]|0;if(!i)break L}while(0);i=$f(i,q,0)|0;if(i|0){oa=3855;break c}}while(0);l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,jd=c[(c[o>>2]|0)+8>>2]|0,jd|0):0){i=jd;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(q|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(r,q,0,0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -117:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;c[rf>>2]=0;l=Wg(c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0,rf,c[p+12>>2]|0)|0;if(l|0){oa=2406;break c}q=c[rf>>2]|0;l=i;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;i=0;break}case -116:{a[Cc>>0]=(a[Cc>>0]|0)+1<<24>>24;i=nd(Cf,c[p+16>>2]|0,0,0,0)|0;a[Cc>>0]=(a[Cc>>0]|0)+-1<<24>>24;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -115:{i=c[p+4>>2]|0;l=p+16|0;if(!(c[l>>2]|0)){dh(c[(c[uf>>2]|0)+(i<<4)+12>>2]|0);c[hf>>2]=c[hf>>2]&-17;i=eh(Cf,i,mf,1)|0;c[hf>>2]=c[hf>>2]|1;na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8}else{c[rf>>2]=Cf;c[Ia>>2]=i;c[Ja>>2]=mf;c[Ka>>2]=0;l=c[l>>2]|0;c[Ne>>2]=c[(c[uf>>2]|0)+(i<<4)>>2];c[Ne+4>>2]=34585;c[Ne+8>>2]=l;l=dd(Cf,34599,Ne)|0;if(!l){oa=2424;break c}a[ob>>0]=1;c[pb>>2]=0;c[qb>>2]=0;i=nd(Cf,l,77,rf,0)|0;i=(i|0)==0?c[pb>>2]|0:i;if(!(i|c[qb>>2])){c[Oe>>2]=32306;c[Oe+4>>2]=89378;c[Oe+8>>2]=31517;Db(11,32001,Oe);i=11}do if(!(c[Ze>>2]|0)){na=l;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[l>>2]=c[af>>2];c[af>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(Cf,l);while(0);a[ob>>0]=0}switch(i|0){case 7:{oa=2424;break c}case 0:break;default:{oa=2425;break c}}l=m;q=pa;o=qa;i=0;break}case -114:{i=gh(Cf,c[p+4>>2]|0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -113:{i=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+8|0,c[p+16>>2]|0,0)|0;do if(i|0){if(c[Ze>>2]|0){Vi(Cf,i);break}ma=i+32|0;na=(c[ma>>2]|0)+-1|0;c[ma>>2]=na;if(!na)Vi(Cf,i)}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K;break}case -112:{o=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+24|0,c[p+16>>2]|0,0)|0;do if(o|0){l=(c[o+12>>2]|0)+8|0;i=c[l>>2]|0;if((i|0)==(o|0)){c[l>>2]=c[o+20>>2];i=c[o+36>>2]|0;if(i|0)ni(Cf,i);i=c[o+40>>2]|0;if(i|0)ri(Cf,i);i=c[o+16>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);na=o+55|0;N:do if((d[na>>0]|d[na+1>>0]<<8)&16?(qe=c[o+32>>2]|0,qe|0):0){if(c[Ze>>2]|0){Xd(Cf,qe);break}i=qe;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[qe>>2]=c[af>>2];c[af>>2]=qe;break N}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](qe);break}else{na=Wa[c[29352>>2]&127](qe)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](qe);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,o);break}na=o;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}O:do if(i|0){while(1){l=c[i+20>>2]|0;if((l|0)==(o|0))break;if(!l)break O;else i=l}c[i+20>>2]=c[o+20>>2]}while(0);i=c[o+36>>2]|0;if(i|0)ni(Cf,i);i=c[o+40>>2]|0;if(i|0)ri(Cf,i);i=c[o+16>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);na=o+55|0;P:do if((d[na>>0]|d[na+1>>0]<<8)&16?(re=c[o+32>>2]|0,re|0):0){if(c[Ze>>2]|0){Xd(Cf,re);break}i=re;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[re>>2]=c[af>>2];c[af>>2]=re;break P}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](re);break}else{na=Wa[c[29352>>2]&127](re)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](re);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,o);break}na=o;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K;break}case -110:{x=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+40|0,c[p+16>>2]|0,0)|0;if(!x){l=m;q=pa;o=qa;i=K}else{q=c[x+20>>2]|0;Q:do if((q|0)==(c[x+24>>2]|0)){w=x+4|0;t=c[w>>2]|0;r=c[q+20>>2]|0;if(!r){l=q+12|0;i=q+16|0}else{l=a[t>>0]|0;if(!(l<<24>>24))i=0;else{i=0;o=t;do{o=o+1|0;i=G(i+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[o>>0]|0}while(l<<24>>24!=0)}i=(i>>>0)%((c[q+8>>2]|0)>>>0)|0;l=r+(i<<3)|0;i=r+(i<<3)+4|0}l=c[l>>2]|0;R:do if(!l)i=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;l=l+-1|0;q=c[i+12>>2]|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-s|0;if(!(na<<24>>24==0|(o|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(o|0)!=0))}if(!o)break R;if(!l){i=59292;break}}}while(0);i=(c[i+8>>2]|0)+68|0;while(1){na=c[i>>2]|0;l=na+32|0;if((na|0)==(x|0))break;else i=l}c[i>>2]=c[l>>2];Xi(Cf,c[x+28>>2]|0);i=c[x>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[w>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+12>>2]|0;if(i|0)ni(Cf,i);r=c[x+16>>2]|0;S:do if(r|0){q=r+4|0;i=c[r>>2]|0;if((c[q>>2]|0)>0){o=0;do{i=c[i+(o<<3)>>2]|0;T:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break T}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=o+1|0;i=c[r>>2]|0}while((o|0)<(c[q>>2]|0))}U:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break U}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,r);break}i=r;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[r>>2]=c[af>>2];c[af>>2]=r;break S}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{na=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,x);break}i=x;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[x>>2]=c[af>>2];c[af>>2]=x;break Q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{na=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}else{Xi(Cf,c[x+28>>2]|0);i=c[x>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+4>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+12>>2]|0;if(i|0)ni(Cf,i);r=c[x+16>>2]|0;V:do if(r|0){q=r+4|0;i=c[r>>2]|0;if((c[q>>2]|0)>0){o=0;do{i=c[i+(o<<3)>>2]|0;W:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break W}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=o+1|0;i=c[r>>2]|0}while((o|0)<(c[q>>2]|0))}X:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break X}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,r);break}i=r;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[r>>2]=c[af>>2];c[af>>2]=r;break V}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{na=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,x);break}na=x;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[x>>2]=c[af>>2];c[af>>2]=x;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{na=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K}break}case -109:{w=c[p+8>>2]|0;C=c[p+4>>2]|0;D=pa+(C*40|0)|0;i=c[(c[uf>>2]|0)+(e[p+2>>1]<<4)+4>>2]|0;x=(c[p+16>>2]|0)+4|0;E=pa+((c[p+12>>2]|0)*40|0)|0;na=(c[E>>2]|0)+1|0;z=c[i+4>>2]|0;y=z+4|0;B=(c[y>>2]|0)+32|0;A=c[B>>2]|0;B=c[B+4>>2]|0;c[y>>2]=c[i>>2];c[Td>>2]=z;c[Dc>>2]=c[z>>2];i=c[z+44>>2]|0;c[Ec>>2]=i;c[Fc>>2]=na;c[Jc>>2]=0;c[Kc>>2]=0;c[Gc>>2]=0;c[Gc+4>>2]=0;c[Gc+8>>2]=0;c[Gc+12>>2]=0;c[Gc+16>>2]=0;c[Mc>>2]=Yd;c[Lc>>2]=0;c[Nc>>2]=100;c[Oc>>2]=1e9;c[Pc>>2]=0;a[Qc>>0]=0;a[Rc>>0]=1;Y:do if(i){i=i>>>3;q=i+1|0;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;if(!i)oa=2649}else{o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<=i>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(i){l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else oa=2649}if((oa|0)==2649){c[Jc>>2]=0;c[Hc>>2]=1;oa=2710;break}gw(i|0,0,q|0)|0;c[Jc>>2]=i;t=z+32|0;q=c[t>>2]|0;if((c[14813]|0)>=(q|0)?(se=c[14819]|0,(se|0)!=0):0){c[14819]=c[se>>2];na=c[14820]|0;c[14820]=na+-1;c[14821]=(na|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<q>>>0)c[14986]=q;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0){c[14983]=i;i=se}else i=se}else oa=2656;Z:do if((oa|0)==2656){oa=0;na=Sv(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;ma=L()|0;_:do if(!(ma>>>0>0|(ma|0)==0&na>>>0>2147483390)){do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;if(!i)break _}else{l=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;i=59064;o=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](l)|0;if(!i)break _;l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);l=Wa[c[29352>>2]&127](i)|0;if((c[14986]|0)>>>0<q>>>0)c[14986]=q;l=(c[14980]|0)+l|0;c[14980]=l;if(l>>>0<=(c[14984]|0)>>>0)break Z;c[14984]=l;break Z}while(0);c[Kc>>2]=0;c[Hc>>2]=1;break Y}while(0);c[Kc>>2]=i;i=(1073741824/((c[t>>2]|0)>>>0)|0)+1|0;if(i>>>0<=(c[Ec>>2]|0)>>>0){na=(c[Jc>>2]|0)+(i>>>3)|0;a[na>>0]=1<<(i&7)|d[na>>0]}c[Ic>>2]=35261;o=z+12|0;s=c[(c[o>>2]|0)+56>>2]|0;si(Td,1,d[s+33>>0]<<16|d[s+32>>0]<<24|d[s+34>>0]<<8|d[s+35>>0],d[s+37>>0]<<16|d[s+36>>0]<<24|d[s+38>>0]<<8|d[s+39>>0]);c[Ic>>2]=0;s=z+17|0;if(!(a[s>>0]|0)){na=c[(c[o>>2]|0)+56>>2]|0;if(d[na+65>>0]<<16|d[na+64>>0]<<24|d[na+66>>0]<<8|d[na+67>>0]|0)ti(Td,35322,Re)}else{if((w|0)>0){i=0;l=0;do{na=c[x+(i<<2)>>2]|0;l=(l|0)<(na|0)?na:l;i=i+1|0}while((i|0)!=(w|0))}else l=0;i=c[(c[o>>2]|0)+56>>2]|0;i=d[i+53>>0]<<16|d[i+52>>0]<<24|d[i+54>>0]<<8|d[i+55>>0];if((l|0)!=(i|0)){c[Qe>>2]=l;c[Qe+4>>2]=i;ti(Td,35277,Qe)}}l=(c[y>>2]|0)+32|0;ma=l;na=c[ma+4>>2]|0;i=l;c[i>>2]=c[ma>>2]&-2097153;c[i+4>>2]=na;i=c[Fc>>2]|0;if((w|0)>0&(i|0)!=0){r=0;do{o=x+(r<<2)|0;q=c[o>>2]|0;if(q){if((q|0)>1&(a[s>>0]|0)!=0){i=eg(c[Td>>2]|0,q,rf,Hd)|0;$:do if((i|0)<7){switch(i|0){case 0:break;default:{oa=2689;break $}}i=a[rf>>0]|0;l=c[Hd>>2]|0;if(i<<24>>24==1&(l|0)==0)break;c[Te>>2]=q;c[Te+4>>2]=1;c[Te+8>>2]=0;c[Te+12>>2]=i&255;c[Te+16>>2]=l;ti(Td,35625,Te)}else{if((i|0)<3082)switch(i|0){case 7:break;default:{oa=2689;break $}}else switch(i|0){case 3082:break;default:{oa=2689;break $}}c[Hc>>2]=1;oa=2689}while(0);if((oa|0)==2689){oa=0;c[Se>>2]=q;ti(Td,35596,Se)}i=c[o>>2]|0}else i=q;ui(Td,i,ee,-1,2147483647)|0;i=c[Fc>>2]|0}r=r+1|0}while((r|0)<(w|0)&(i|0)!=0);l=(c[y>>2]|0)+32|0}na=l;c[na>>2]=A;c[na+4>>2]=B;if((i|0)!=0&(c[Ec>>2]|0)!=0){r=z+36|0;q=1;do{l=q>>>3;o=1<<(q&7);do if(!(o&d[(c[Jc>>2]|0)+l>>0])){if(q>>>0<2)i=0;else{i=q+-2|0;i=i-((i>>>0)%(((((c[r>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[t>>2]|0)>>>0)|0|0)?3:2)+i|0}if((i|0)==(q|0)?a[s>>0]|0:0)break;c[Ue>>2]=q;ti(Td,35377,Ue);if(o&d[(c[Jc>>2]|0)+l>>0]|0)oa=2704}else oa=2704;while(0);do if((oa|0)==2704){oa=0;if(q>>>0<2)i=0;else{i=q+-2|0;i=i-((i>>>0)%(((((c[r>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[t>>2]|0)>>>0)|0|0)?3:2)+i|0}if((i|0)!=(q|0))break;if(!(a[s>>0]|0))break;c[We>>2]=q;ti(Td,35399,We)}while(0);q=q+1|0}while(c[Fc>>2]|0?q>>>0<=(c[Ec>>2]|0)>>>0:0);oa=2710}else oa=2710}else oa=2710;while(0);aa:do if((oa|0)==2710?(oa=0,pd=c[Kc>>2]|0,pd|0):0){i=pd;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[pd>>2]=c[14819];c[14819]=pd;na=(c[14820]|0)+1|0;c[14820]=na;c[14821]=(na|0)<(c[14815]|0)&1;break aa}else{i=Wa[c[29352>>2]&127](pd)|0;break}else i=Wa[c[29352>>2]&127](pd)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](pd);break}else{na=Wa[c[29352>>2]&127](pd)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](pd);break}}while(0);i=c[Jc>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);if(!(c[Hc>>2]|0))r=c[Gc>>2]|0;else{if(a[Rc>>0]&4){i=c[Lc>>2]|0;l=c[Mc>>2]|0;ba:do if(l|0){do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break ba}o=l;if((c[i+304>>2]|0)>>>0<=o>>>0){if((c[i+308>>2]|0)>>>0<=o>>>0)break;na=i+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break ba}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);a[Rc>>0]=a[Rc>>0]&-5}c[Nc>>2]=0;c[Pc>>2]=0;c[Mc>>2]=0;r=(c[Gc>>2]|0)+1|0;c[Gc>>2]=r}q=(r|0)==0;if(!q){i=c[Mc>>2]|0;if(((i|0)!=0?(a[i+(c[Pc>>2]|0)>>0]=0,(c[Oc>>2]|0)!=0):0)?(a[Rc>>0]&4)==0:0)i=$d(Lc)|0;else oa=2756}else{if(a[Rc>>0]&4){i=c[Lc>>2]|0;l=c[Mc>>2]|0;ca:do if(l|0){do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break ca}o=l;if((c[i+304>>2]|0)>>>0>o>>>0)break;if((c[i+308>>2]|0)>>>0<=o>>>0)break;oa=i+300|0;c[l>>2]=c[oa>>2];c[oa>>2]=l;break ca}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);a[Rc>>0]=a[Rc>>0]&-5}c[Nc>>2]=0;c[Pc>>2]=0;c[Mc>>2]=0;oa=2756}if((oa|0)==2756){oa=0;i=c[Mc>>2]|0}l=pa+(C*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=1;else Dg(D);if(!q){if(!i){l=p;j=h;i=zf;oa=3892;break a}la=r+-1|0;ma=E;la=Tv(c[ma>>2]|0,c[ma+4>>2]|0,la|0,((la|0)<0)<<31>>31|0)|0;ma=L()|0;na=E;c[na>>2]=la;c[na+4>>2]=ma;yc(D,i,-1,1,90)|0}if((b[l>>1]&2)!=0?(a[pa+(C*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(D,sd)|0;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case -108:{i=c[p+4>>2]|0;l=c[p+8>>2]|0;if((b[pa+(i*40|0)+8>>1]&16)==0?hh(pa+(i*40|0)|0)|0:0){l=p;j=h;i=zf;oa=3892;break a}t=c[pa+(i*40|0)+16>>2]|0;s=pa+(l*40|0)|0;r=c[s>>2]|0;s=c[s+4>>2]|0;q=t+24|0;l=b[q>>1]|0;if(l<<16>>16){na=t+16|0;i=c[na>>2]|0;b[q>>1]=l+-1<<16>>16;c[na>>2]=i+16;if(!i){l=m;q=pa;o=qa;i=K;break d}}else{o=c[t+4>>2]|0;da:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))oa=2779;else{l=m;q=pa;o=qa;i=K;break d}else{do if((e[o+276>>1]|0)>=1016){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break da}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break da}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;oa=2779}while(0);if((oa|0)==2779){oa=0;i=_d(o,1016,0)|0}if(!i){l=m;q=pa;o=qa;i=K;break d}c[i>>2]=c[t>>2];c[t>>2]=i;b[q>>1]=62;c[t+16>>2]=i+24;i=i+8|0}l=i;c[l>>2]=r;c[l+4>>2]=s;c[i+8>>2]=0;l=t+12|0;o=c[l>>2]|0;if(!o)c[t+8>>2]=i;else{na=o;ma=c[na+4>>2]|0;if(!((ma|0)<(s|0)|((ma|0)==(s|0)?(c[na>>2]|0)>>>0<r>>>0:0))){na=t+26|0;b[na>>1]=b[na>>1]&-2}c[o+8>>2]=i}c[l>>2]=i;l=m;q=pa;o=qa;i=K;break}case 41:{l=c[p+4>>2]|0;B=pa+(l*40|0)|0;C=pa+(l*40|0)+8|0;i=b[C>>1]|0;do if(i&16){D=c[pa+(l*40|0)+16>>2]|0;E=D+26|0;A=b[E>>1]|0;i=A&65535;if(!(i&2)){if(!(i&1)){z=D+8|0;i=c[z>>2]|0;gw(Hd|0,0,160)|0;if(!i)i=0;else{l=0;while(1){na=i+8|0;o=i;i=c[na>>2]|0;c[na>>2]=0;if(!l)l=Hd;else{y=0;x=Hd;while(1){q=rf;ea:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=o;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[q+8>>2]=o;q=c[o+8>>2]|0;if(!q){q=o;break ea}else{na=o;o=q;q=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[q+8>>2]=l;q=l}l=c[l+8>>2]|0;if(!l){l=o;break}}c[q+8>>2]=l;o=c[Nb>>2]|0;c[x>>2]=0;y=y+1|0;q=Hd+(y<<2)|0;l=c[q>>2]|0;if(!l){l=q;break}else x=q}}c[l>>2]=o;l=c[Hd>>2]|0;if(!i){i=l;break}}}w=1;do{o=c[Hd+(w<<2)>>2]|0;if(o)if(!i)i=o;else{l=rf;fa:while(1){t=i;s=c[t>>2]|0;t=c[t+4>>2]|0;while(1){r=o;q=c[r>>2]|0;r=c[r+4>>2]|0;if(!((t|0)>(r|0)|(t|0)==(r|0)&s>>>0>q>>>0))break;c[l+8>>2]=o;l=c[o+8>>2]|0;if(!l){l=o;break fa}else{na=o;o=l;l=na}}if((t|0)<(r|0)|(t|0)==(r|0)&s>>>0<q>>>0){c[l+8>>2]=i;l=i}i=c[i+8>>2]|0;if(!i){i=o;break}}c[l+8>>2]=i;i=c[Mb>>2]|0}w=w+1|0}while((w|0)!=40);c[z>>2]=i}b[E>>1]=A|3}s=D+8|0;i=c[s>>2]|0;if(!i){i=b[C>>1]|0;break}w=i;t=c[w>>2]|0;w=c[w+4>>2]|0;na=c[i+8>>2]|0;c[s>>2]=na;if(!na){i=c[D>>2]|0;if(i|0){r=D+4|0;do{l=i;i=c[i>>2]|0;o=c[r>>2]|0;do if(!o)oa=2830;else{if(c[o+480>>2]|0){Xd(o,l);break}q=l;if((c[o+304>>2]|0)>>>0>q>>>0){oa=2830;break}if((c[o+308>>2]|0)>>>0<=q>>>0){oa=2830;break}na=o+300|0;c[l>>2]=c[na>>2];c[na>>2]=l}while(0);do if((oa|0)==2830){oa=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0)}while((i|0)!=0)}c[D>>2]=0;b[D+24>>1]=0;c[s>>2]=0;c[D+12>>2]=0;c[D+20>>2]=0;b[E>>1]=1}l=c[p+12>>2]|0;i=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(!(b[l>>1]&9216)){o=i;c[o>>2]=t;c[o+4>>2]=w;b[l>>1]=4;l=m;o=pa;i=K;oa=21;break d}else{Pg(i,t,w);l=m;o=pa;i=K;oa=21;break d}}while(0);if(!(i&9216)){b[C>>1]=1;i=K;oa=20;break d}else{Dg(B);i=K;oa=20;break d}}case 42:{l=c[p+4>>2]|0;i=pa+((c[p+12>>2]|0)*40|0)|0;J=c[p+16>>2]|0;if((b[pa+(l*40|0)+8>>1]&16)==0?hh(pa+(l*40|0)|0)|0:0){l=p;j=h;i=zf;oa=3892;break a}I=pa+(l*40|0)+16|0;if(J){B=c[I>>2]|0;H=i;F=c[H>>2]|0;H=c[H+4>>2]|0;C=B+28|0;if((c[C>>2]|0)!=(J|0)){D=B+8|0;l=c[D>>2]|0;if(l|0){A=B+20|0;E=B+26|0;if(!(b[E>>1]&1)){gw(Hd|0,0,160)|0;z=l;l=0;do{na=z+8|0;o=z;z=c[na>>2]|0;c[na>>2]=0;if(!l)l=Hd;else{y=0;x=Hd;while(1){q=rf;ga:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=o;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[q+8>>2]=o;q=c[o+8>>2]|0;if(!q){q=o;break ga}else{na=o;o=q;q=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[q+8>>2]=l;q=l}l=c[l+8>>2]|0;if(!l){l=o;break}}c[q+8>>2]=l;o=c[Ub>>2]|0;c[x>>2]=0;y=y+1|0;q=Hd+(y<<2)|0;l=c[q>>2]|0;if(!l){l=q;break}else x=q}}c[l>>2]=o;l=c[Hd>>2]|0}while((z|0)!=0);x=1;do{q=c[Hd+(x<<2)>>2]|0;do if(q){if(!l){l=q;break}o=rf;ha:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=q;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[o+8>>2]=q;o=c[q+8>>2]|0;if(!o){o=q;break ha}else{na=q;q=o;o=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0<r>>>0){c[o+8>>2]=l;o=l}l=c[l+8>>2]|0;if(!l){l=q;break}}c[o+8>>2]=l;l=c[ic>>2]|0}while(0);x=x+1|0}while((x|0)!=40)}o=c[A>>2]|0;ia:do if(!o){s=A;oa=2889}else{while(1){x=o+8|0;r=o+12|0;o=c[r>>2]|0;if(!o)break;wi(o,Hd,Td);c[r>>2]=0;o=rf;w=c[Hd>>2]|0;ja:do{t=w;s=c[t>>2]|0;t=c[t+4>>2]|0;while(1){r=l;q=c[r>>2]|0;r=c[r+4>>2]|0;if(!((t|0)>(r|0)|(t|0)==(r|0)&s>>>0>q>>>0))break;c[o+8>>2]=l;o=c[l+8>>2]|0;if(!o){o=l;l=w;break ja}else{na=l;l=o;o=na}}if((t|0)<(r|0)|(t|0)==(r|0)&s>>>0<q>>>0){c[o+8>>2]=w;o=w}w=c[w+8>>2]|0}while((w|0)!=0);c[o+8>>2]=l;l=c[cc>>2]|0;o=c[x>>2]|0;if(!o){s=x;oa=2889;break ia}}na=l+8|0;o=c[na>>2]|0;c[rf>>2]=o;c[na>>2]=0;c[l+12>>2]=0;if(!o){c[r>>2]=l;break}q=1;while(1){na=o+8|0;c[rf>>2]=c[na>>2];c[o+12>>2]=l;l=xi(rf,q)|0;c[na>>2]=l;l=c[rf>>2]|0;if(!l)break;else{na=o;q=q+1|0;o=l;l=na}}c[r>>2]=o}while(0);ka:do if((oa|0)==2889){oa=0;t=B+24|0;q=b[t>>1]|0;la:do if(q<<16>>16){na=B+16|0;o=c[na>>2]|0;b[t>>1]=q+-1<<16>>16;c[na>>2]=o+16;c[s>>2]=o;if(!o)break ka}else{r=c[B+4>>2]|0;ma:do if(c[r+272>>2]|0){if(!(a[r+81>>0]|0))oa=2900}else{do if((e[r+276>>1]|0)>=1016){q=r+300|0;o=c[q>>2]|0;if(o|0){c[q>>2]=c[o>>2];oa=r+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=2901;break ma}q=r+296|0;o=c[q>>2]|0;if(!o){o=r+292|0;break}else{c[q>>2]=c[o>>2];oa=r+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=2901;break ma}}else o=r+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;oa=2900}while(0);if((oa|0)==2900){o=_d(r,1016,0)|0;oa=2901}do if((oa|0)==2901){oa=0;if(!o)break;c[o>>2]=c[B>>2];c[B>>2]=o;na=o+8|0;b[t>>1]=62;c[B+16>>2]=o+24;c[s>>2]=na;o=na;break la}while(0);c[s>>2]=0;break ka}while(0);na=o;c[na>>2]=0;c[na+4>>2]=0;c[o+8>>2]=0;na=l+8|0;q=c[na>>2]|0;c[rf>>2]=q;c[na>>2]=0;c[l+12>>2]=0;if(q){r=1;while(1){na=q+8|0;c[rf>>2]=c[na>>2];c[q+12>>2]=l;l=xi(rf,r)|0;c[na>>2]=l;l=c[rf>>2]|0;if(!l){l=q;break}else{na=q;r=r+1|0;q=l;l=na}}}c[o+12>>2]=l}while(0);c[D>>2]=0;c[B+12>>2]=0;b[E>>1]=b[E>>1]|1}c[C>>2]=J}l=c[B+20>>2]|0;if(l|0)do{o=c[l+12>>2]|0;if(o|0)do{r=o;q=c[r>>2]|0;r=c[r+4>>2]|0;if((r|0)<(H|0)|(r|0)==(H|0)&q>>>0<F>>>0)o=o+8|0;else{if(!((r|0)>(H|0)|(r|0)==(H|0)&q>>>0>F>>>0)){i=K;oa=28;break d}o=o+12|0}o=c[o>>2]|0}while((o|0)!=0);l=c[l+8>>2]|0}while((l|0)!=0);if((J|0)<=-1){l=m;q=pa;o=qa;i=K;break d}}t=c[I>>2]|0;s=i;r=c[s>>2]|0;s=c[s+4>>2]|0;q=t+24|0;l=b[q>>1]|0;if(l<<16>>16){na=t+16|0;i=c[na>>2]|0;b[q>>1]=l+-1<<16>>16;c[na>>2]=i+16;if(!i){l=m;q=pa;o=qa;i=K;break d}}else{o=c[t+4>>2]|0;na:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))oa=2933;else{l=m;q=pa;o=qa;i=K;break d}else{do if((e[o+276>>1]|0)>=1016){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break na}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break na}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;oa=2933}while(0);if((oa|0)==2933){oa=0;i=_d(o,1016,0)|0}if(!i){l=m;q=pa;o=qa;i=K;break d}c[i>>2]=c[t>>2];c[t>>2]=i;b[q>>1]=62;c[t+16>>2]=i+24;i=i+8|0}l=i;c[l>>2]=r;c[l+4>>2]=s;c[i+8>>2]=0;l=t+12|0;o=c[l>>2]|0;if(!o)c[t+8>>2]=i;else{na=o;ma=c[na+4>>2]|0;if(!((ma|0)<(s|0)|((ma|0)==(s|0)?(c[na>>2]|0)>>>0<r>>>0:0))){na=t+26|0;b[na>>1]=b[na>>1]&-2}c[o+8>>2]=i}c[l>>2]=i;l=m;q=pa;o=qa;i=K;break}case 45:{z=c[p+16>>2]|0;s=c[p+12>>2]|0;t=pa+(s*40|0)|0;if(b[p+2>>1]|0?(rd=c[z+20>>2]|0,od=c[nc>>2]|0,od|0):0){i=od;do{if((c[i+28>>2]|0)==(rd|0)){l=m;q=pa;o=qa;i=K;break d}i=c[i+4>>2]|0}while((i|0)!=0)}if((c[La>>2]|0)>=(c[Ma>>2]|0)){oa=2968;break c}o=pa+(s*40|0)+8|0;if(!(b[o>>1]&16)){q=z+12|0;r=c[q>>2]|0;w=r+(c[z+8>>2]|0)+((r|0)==0&1)|0;y=z+4|0;r=(r<<2)+80+(((c[y>>2]|0)+7|0)/8|0)+(w*40|0)|0;l=((r|0)<0)<<31>>31;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=2958;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<l>>>0|(0==(l|0)?(e[Xc>>1]|0)>>>0<r>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;x=i;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;x=i;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=2958}while(0);if((oa|0)==2958)x=_d(Cf,r,l)|0;if(!x){l=p;j=h;i=zf;oa=3892;break a}gw(x|0,0,r|0)|0;if(!((b[o>>1]&9216)==0?!(c[pa+(s*40|0)+24>>2]|0):0))Cg(t);b[o>>1]=1040;c[pa+(s*40|0)+16>>2]=x;c[pa+(s*40|0)+12>>2]=r;c[pa+(s*40|0)+36>>2]=93;c[x>>2]=f;c[x+60>>2]=w;r=c[q>>2]|0;c[x+64>>2]=r;c[x+48>>2]=(p-m|0)/20|0;c[x+16>>2]=c[xd>>2];c[x+56>>2]=c[va>>2];c[x+20>>2]=c[oc>>2];c[x+44>>2]=c[Ib>>2];c[x+8>>2]=c[le>>2];c[x+52>>2]=c[wb>>2];c[x+28>>2]=c[z+20>>2];m=x+80|0;l=m+(w*40|0)|0;if((l|0)==(m|0)){o=x;p=m;q=m;m=y;l=x;i=r}else{i=m;do{b[i+8>>1]=128;c[i+32>>2]=Cf;i=i+40|0}while((i|0)!=(l|0));o=x;p=m;q=m;m=y;l=x;i=r}}else{l=c[pa+(s*40|0)+16>>2]|0;q=l+80|0;o=l;p=q;m=z+4|0;i=c[z+12>>2]|0}c[La>>2]=(c[La>>2]|0)+1;c[o+4>>2]=c[nc>>2];na=zb;pa=c[na+4>>2]|0;oa=o+32|0;c[oa>>2]=c[na>>2];c[oa+4>>2]=pa;c[o+68>>2]=c[rc>>2];c[o+72>>2]=c[(c[f>>2]|0)+100>>2];c[o+40>>2]=c[Hb>>2];c[Hb>>2]=0;c[rc>>2]=0;c[nc>>2]=l;c[xd>>2]=p;p=c[o+60>>2]|0;c[va>>2]=p;c[Ib>>2]=c[o+64>>2]&65535;p=q+(p*40|0)|0;c[oc>>2]=p;p=p+(i<<2)|0;c[o+24>>2]=p;gw(p|0,0,((c[m>>2]|0)+7|0)/8|0|0)|0;p=c[z>>2]|0;c[le>>2]=p;c[wb>>2]=c[m>>2];l=p;p=p+-20|0;o=q;i=K;oa=21;break}case -107:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=c[nc>>2]|0;l=c[o+16>>2]|0;o=(c[(c[o+8>>2]|0)+((c[o+48>>2]|0)*20|0)+4>>2]|0)+(c[p+4>>2]|0)|0;q=l+(o*40|0)|0;r=i+8|0;if(b[r>>1]&9216){mh(i,q,4096);l=m;q=pa;o=qa;i=K;break d};c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];c[i+12>>2]=c[q+12>>2];c[i+16>>2]=c[q+16>>2];if(!(b[l+(o*40|0)+8>>1]&2048)){b[r>>1]=b[r>>1]&-7169|4096;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case -106:{if(!((c[Sc>>2]&524288|0)==0&0==0)){o=c[p+8>>2]|0;q=Na;o=Sv(c[q>>2]|0,c[q+4>>2]|0,o|0,((o|0)<0)<<31>>31|0)|0;q=L()|0;l=Na;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}i=c[p+8>>2]|0;l=((i|0)<0)<<31>>31;if(!(c[p+4>>2]|0)){o=Oa;o=Sv(c[o>>2]|0,c[o+4>>2]|0,i|0,l|0)|0;q=L()|0;l=Oa;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}else{o=Pa;o=Sv(c[o>>2]|0,c[o+4>>2]|0,i|0,l|0)|0;q=L()|0;l=Pa;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}}case 46:if(!(c[p+4>>2]|0)){na=Oa;if(!((c[na>>2]|0)==0&(c[na+4>>2]|0)==0)){l=m;q=pa;o=qa;i=K;break d}na=Na;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}else{na=Pa;if(!((c[na>>2]|0)==0&(c[na+4>>2]|0)==0)){l=m;q=pa;o=qa;i=K;break d}na=Na;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}case -105:{i=c[nc>>2]|0;if(!i)l=pa;else{while(1){l=c[i+4>>2]|0;if(!l)break;else i=l}l=c[i+16>>2]|0}o=c[p+4>>2]|0;t=l+(o*40|0)|0;r=l+(o*40|0)+8|0;i=b[r>>1]|0;q=i&65535;do if(!(q&4)){if(q&8|0){l=Mg(+g[t>>3])|0;o=L()|0;break}if(!(q&18)){l=0;o=0}else{l=Ng(a[l+(o*40|0)+10>>0]|0,c[l+(o*40|0)+12>>2]|0,c[l+(o*40|0)+16>>2]|0)|0;o=L()|0;i=b[r>>1]|0}}else{o=t;l=c[o>>2]|0;o=c[o+4>>2]|0}while(0);s=t;c[s>>2]=l;c[s+4>>2]=o;b[r>>1]=i&15904|4;i=c[p+8>>2]|0;r=pa+(i*40|0)|0;s=pa+(i*40|0)+8|0;q=b[s>>1]|0;l=q&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[r>>3])|0;o=L()|0;i=q;break}if(!(l&18)){l=0;o=0;i=q}else{l=Ng(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)|0;o=L()|0;i=b[s>>1]|0}}else{o=r;l=c[o>>2]|0;o=c[o+4>>2]|0;i=q}while(0);na=r;c[na>>2]=l;c[na+4>>2]=o;b[s>>1]=i&15904|4;na=t;ma=c[na+4>>2]|0;if((ma|0)<(o|0)|((ma|0)==(o|0)?(c[na>>2]|0)>>>0<l>>>0:0)){q=t;c[q>>2]=l;c[q+4>>2]=o;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 47:{i=pa+((c[p+4>>2]|0)*40|0)|0;o=i;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[p+12>>2]|0;na=Tv(l|0,o|0,na|0,((na|0)<0)<<31>>31|0)|0;oa=L()|0;c[i>>2]=na;c[i+4>>2]=oa;i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case -104:{o=c[p+4>>2]|0;q=c[p+12>>2]|0;na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=pa+(o*40|0)|0;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((o|0)<0|(o|0)==0&l>>>0<1)?(ud=pa+(q*40|0)|0,td=c[ud>>2]|0,ud=c[ud+4>>2]|0,na=(ud|0)>0|(ud|0)==0&td>>>0>0,td=na?td:0,ud=na?ud:0,na=Tv(-1,2147483647,l|0,o|0)|0,ma=L()|0,!(((ud|0)>-1|(ud|0)==-1&td>>>0>4294967295)&((ma|0)<(ud|0)|(ma|0)==(ud|0)&na>>>0<td>>>0))):0){o=Sv(td|0,ud|0,l|0,o|0)|0;q=L()|0;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}l=i;c[l>>2]=-1;c[l+4>>2]=-1;l=m;q=pa;o=qa;i=K;break}case 48:{i=pa+((c[p+4>>2]|0)*40|0)|0;o=i;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((l|0)==0&(o|0)==0))if((o|0)>0|(o|0)==0&l>>>0>0){na=Sv(l|0,o|0,-1,-1)|0;oa=L()|0;c[i>>2]=na;c[i+4>>2]=oa;i=K;oa=28}else{i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 49:{i=pa+((c[p+4>>2]|0)*40|0)|0;na=i;ma=c[na>>2]|0;na=c[na+4>>2]|0;l=Sv(ma|0,na|0,-1,-1)|0;o=L()|0;if(!((ma|0)==0&(na|0)==-2147483648)?(na=i,c[na>>2]=l,c[na+4>>2]=o,(l|0)==0&(o|0)==0):0){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case -102:case -103:{o=b[p+2>>1]|0;q=o&65535;l=(q<<2)+68|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=3026;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=3026}while(0);if((oa|0)==3026)i=_d(Cf,l,0)|0;if(!i){l=p;j=h;i=zf;oa=3892;break a}c[i+8>>2]=0;s=i+28+(q<<2)|0;c[i>>2]=s;b[s+8>>1]=1;c[s+32>>2]=Cf;c[s+24>>2]=0;s=p+16|0;c[i+4>>2]=c[s>>2];c[i+16>>2]=(p-m|0)/20|0;c[i+12>>2]=f;a[i+24>>0]=0;c[i+20>>2]=0;a[i+25>>0]=o;a[p+1>>0]=-16;c[s>>2]=i;a[p>>0]=-101;s=i;oa=3029;break}case -101:{s=c[p+16>>2]|0;oa=3029;break}case -99:case -100:{o=c[p+4>>2]|0;r=pa+(o*40|0)|0;q=p+12|0;i=c[q>>2]|0;if(!i){l=c[p+16>>2]|0;c[Qa>>2]=0;c[Qa+4>>2]=0;c[Qa+8>>2]=0;c[Qa+12>>2]=0;c[Qa+16>>2]=0;ea=Hd;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));b[Sa>>1]=1;i=pa+(o*40|0)+32|0;c[Ta>>2]=c[i>>2];c[rf>>2]=Hd;c[Ua>>2]=r;c[Va>>2]=l;ab[c[l+20>>2]&127](rf);do if((c[pa+(o*40|0)+24>>2]|0)>0){l=c[i>>2]|0;i=c[pa+(o*40|0)+20>>2]|0;if(l|0){if(c[l+480>>2]|0){Xd(l,i);break}na=i;if((c[l+304>>2]|0)>>>0<=na>>>0?(c[l+308>>2]|0)>>>0>na>>>0:0){na=l+300|0;c[i>>2]=c[na>>2];c[na>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=r;l=Hd;fa=ea+40|0;do{c[ea>>2]=c[l>>2];ea=ea+4|0;l=l+4|0}while((ea|0)<(fa|0));o=r;l=c[rb>>2]|0}else{l=pa+(i*40|0)|0;o=c[p+16>>2]|0;c[rf>>2]=0;c[rf+4>>2]=0;c[rf+8>>2]=0;c[rf+12>>2]=0;c[rf+16>>2]=0;c[rf+20>>2]=0;c[rf+24>>2]=0;c[rf+28>>2]=0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(l);c[rf>>2]=l;c[tb>>2]=r;c[ub>>2]=o;ab[c[o+24>>2]&127](rf);o=pa+((c[q>>2]|0)*40|0)|0;l=c[vb>>2]|0}if(l|0){oa=3073;break c}l=o+8|0;i=b[l>>1]|0;if((i&2)!=0?(a[o+10>>0]|0)!=sd<<24>>24:0){Ig(o,sd)|0;i=b[l>>1]|0}l=i&65535;if(l&18){i=c[o+12>>2]|0;if(l&16384)i=(c[o>>2]|0)+i|0;if((i|0)>(c[(c[o+32>>2]|0)+108>>2]|0)){oa=3891;break c}else{l=m;q=pa;o=qa;i=0}}else{l=m;q=pa;o=qa;i=0}break}case 6:{c[rf>>2]=0;c[Tc>>2]=-1;c[Uc>>2]=-1;i=Nd(Cf,c[p+4>>2]|0,c[p+8>>2]|0,Uc,Tc)|0;switch(i|0){case 0:{l=c[rf>>2]|0;break}case 5:{c[rf>>2]=1;l=1;break}default:{oa=3094;break c}}q=c[p+12>>2]|0;i=pa+(q*40|0)|0;o=((l|0)<0)<<31>>31;q=pa+(q*40|0)+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);i=i+40|0;l=c[Uc>>2]|0;o=((l|0)<0)<<31>>31;q=i+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);i=i+40|0;l=c[Tc>>2]|0;o=((l|0)<0)<<31>>31;q=i+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);l=m;q=pa;o=qa;i=0;break}case 7:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;B=i}else{lh(i)|0;B=i}i=c[p+12>>2]|0;x=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;s=x+4|0;z=c[c[s>>2]>>2]|0;o=a[z+5>>0]|0;A=o&255;i=(i|0)==-1?A:i;if((d[z+16>>0]|0)<=2){if((c[c[z+64>>2]>>2]|0)!=0?(na=z+72|0,ma=c[na+4>>2]|0,(ma|0)>0|(ma|0)==0&(c[na>>2]|0)>>>0>0):0)oa=3101}else oa=3101;if((oa|0)==3101){oa=0;i=A}if(!(a[z+15>>0]|0))l=c[z+168>>2]|0;else l=59952;if((i|0)==5)if(((l|0)!=0?((Eu(l)|0)&1073741823|0)!=0:0)?(wd=c[c[z+60>>2]>>2]|0,(a[z+13>>0]|0)==0):0)if(!(a[z+4>>0]|0))if((c[wd>>2]|0)>1?(c[wd+52>>2]|0)!=0:0){y=5;oa=3111}else{l=A;i=K}else{y=5;oa=3111}else{l=A;i=K}else{y=i;oa=3111}oa:do if((oa|0)==3111){oa=0;if((y|0)!=(A|0)){i=o<<24>>24==5;w=(y|0)==5;if(i|w){if(!(a[gd>>0]|0)){oa=3115;break c}if((c[Ha>>2]|0)>1){oa=3115;break c}if(!i){if(o<<24>>24==4)jh(z,2)|0;if(K|0){l=y;i=K;break}}else{o=z+216|0;i=c[o>>2]|0;if(!i){c[rf>>2]=0;l=z+17|0;i=a[l>>0]|0;pa:do switch(i<<24>>24){case 0:case 5:{do if(!(a[z+13>>0]|0)){i=c[z+60>>2]|0;i=Xa[c[(c[i>>2]|0)+28>>2]&255](i,1)|0;if(!i){i=a[l>>0]|0;break}else{l=y;break oa}}while(0);if(i<<24>>24==5)break pa;a[l>>0]=1;break}default:{}}while(0);i=c[z>>2]|0;i=Za[c[i+32>>2]&127](i,c[z+220>>2]|0,0,rf)|0;if((i|0)==0&(c[rf>>2]|0)!=0)i=Uf(z)|0;if(i|0){l=y;break}i=c[o>>2]|0;if(i|0){r=l;oa=3130}}else{r=z+17|0;oa=3130}do if((oa|0)==3130){oa=0;switch(a[r>>0]|0){case 0:case 1:case 2:case 3:case 5:{q=z+13|0;do if(!(a[q>>0]|0)){l=z+60|0;i=c[l>>2]|0;i=Xa[c[(c[i>>2]|0)+28>>2]&255](i,4)|0;if(!i){i=c[o>>2]|0;break}l=c[l>>2]|0;o=c[l>>2]|0;if(!o){l=y;break oa}if(!(a[q>>0]|0))Xa[c[o+32>>2]&255](l,1)|0;if((a[r>>0]|0)==5){l=y;break oa}a[r>>0]=1;l=y;break oa}while(0);a[r>>0]=4;break}default:{}}i=Pf(i,Cf,d[z+11>>0]|0,c[z+152>>2]|0,c[z+208>>2]|0)|0;c[o>>2]=0;if(!i)break;if(a[z+4>>0]|0){l=y;break oa}l=c[z+60>>2]|0;o=c[l>>2]|0;if(!o){l=y;break oa}if(!(a[z+13>>0]|0))Xa[c[o+32>>2]&255](l,1)|0;if((a[r>>0]|0)==5){l=y;break oa}a[r>>0]=1;l=y;break oa}while(0);jh(z,y)|0}l=c[s>>2]|0;t=l+22|0;i=b[t>>1]|0;b[t>>1]=w?i&-33:i|32;i=Zb(x,0,0)|0;qa:do if(!i){l=l+12|0;r=c[(c[l>>2]|0)+56>>2]|0;s=r+18|0;na=a[s>>0]|0;q=w?2:1;if(na<<24>>24==q<<24>>24?(a[r+19>>0]|0)==na<<24>>24:0){i=0;break}i=Zb(x,2,0)|0;if(i|0)break;l=c[(c[l>>2]|0)+72>>2]|0;o=c[l+20>>2]|0;do if(!(b[l+28>>1]&4))oa=3159;else{if((c[o+24>>2]|0)>>>0<(c[l+24>>2]|0)>>>0){oa=3159;break}if(!(c[o+96>>2]|0))break;id=Ve(l)|0;oa=3163}while(0);do if((oa|0)==3159){oa=0;i=c[o+40>>2]|0;if(i|0)break qa;if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){id=Wf(l)|0;oa=3163;break}else{id=Xf(l)|0;oa=3163;break}}while(0);if((oa|0)==3163?(oa=0,id|0):0){i=id;break}a[s>>0]=q;a[r+19>>0]=q;i=0}while(0);b[t>>1]=b[t>>1]&-33;l=y}else{l=y;i=K}}else{l=A;i=K}}while(0);o=(i|0)!=0;l=jh(z,o?A:l)|0;b[B+8>>1]=2562;if((l|0)==6){c[B+16>>2]=0;l=0}else{l=c[3664+(l<<2)>>2]|0;c[B+16>>2]=l;l=(Eu(l)|0)&1073741823}c[B+12>>2]=l;a[B+10>>0]=1;if(!hb)Ig(B,sd)|0;if(o){oa=3855;break c}else{l=m;q=pa;o=qa;i=0}break}case 8:{i=c[p+8>>2]|0;i=kh(mf,Cf,c[p+4>>2]|0,(i|0)==0?0:pa+(i*40|0)|0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 59:{na=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;w=c[na+4>>2]|0;c[w+4>>2]=c[na>>2];if(a[w+17>>0]|0){x=w+44|0;t=c[x>>2]|0;y=w+12|0;r=c[(c[y>>2]|0)+56>>2]|0;r=d[r+37>>0]<<16|d[r+36>>0]<<24|d[r+38>>0]<<8|d[r+39>>0];l=((c[w+36>>2]|0)>>>0)/5|0;if(t>>>0<2){i=0;o=1073741824/((c[w+32>>2]|0)>>>0)|0;q=l+1|0}else{q=l+1|0;i=t+-2|0;i=i-((i>>>0)%(q>>>0)|0)|0;o=1073741824/((c[w+32>>2]|0)>>>0)|0;i=((i+1|0)==(o|0)?3:2)+i|0}s=t-r-(((l-t+r+i|0)>>>0)/(l>>>0)|0)|0;l=o+1|0;s=s+((l>>>0<t>>>0&s>>>0<l>>>0)<<31>>31)|0;while(1){if(s>>>0<2)i=0;else{i=s+-2|0;i=i-((i>>>0)%(q>>>0)|0)|0;i=((i+1|0)==(o|0)?3:2)+i|0}if((s|0)==(l|0)|(i|0)==(s|0))s=s+-1|0;else break}if(t>>>0<s>>>0){oa=3182;break c}if(r){l=w+8|0;i=c[l>>2]|0;if(i){i=$f(i,0,0)|0;if(!i){i=c[l>>2]|0;if(!i)oa=3189;else{do{oa=i+1|0;a[oa>>0]=a[oa>>0]&-5;i=c[i+24>>2]|0}while((i|0)!=0);oa=3189}}}else oa=3189;if((oa|0)==3189){oa=0;i=_f(w,s,t,0)|0;if(!i){l=c[(c[y>>2]|0)+72>>2]|0;o=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[o+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[o+96>>2]|0))i=0;else i=Ve(l)|0;else oa=3194;do if((oa|0)==3194){oa=0;i=c[o+40>>2]|0;if(!i)if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){i=Wf(l)|0;break}else{i=Xf(l)|0;break}}while(0);na=c[(c[y>>2]|0)+56>>2]|0;ma=c[x>>2]|0;a[na+28>>0]=ma>>>24;a[na+29>>0]=ma>>>16;a[na+30>>0]=ma>>>8;a[na+31>>0]=ma}}switch(i|0){case 101:{i=0;oa=28;break}case 0:{l=m;q=pa;o=qa;break}default:{oa=3855;break c}}}else{i=0;oa=28}}else{i=0;oa=28}break}case -98:{l=c[p+8>>2]|0;if(c[p+4>>2]|0){l=(d[vf>>0]|d[vf+1>>0]<<8)&-4|l+1&3;a[vf>>0]=l;a[vf+1>>0]=l>>8;l=m;q=pa;o=qa;i=K;break d}i=c[$a>>2]|0;if(!i){l=m;q=pa;o=qa;i=K}else{l=l+1&3;do{na=i+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|l;a[na>>0]=ma;a[na+1>>0]=ma>>8;i=c[i+8>>2]|0}while((i|0)!=0);l=m;q=pa;o=qa;i=K}break}case -97:{i=c[p+12>>2]|0;if((i&255|0)==0?!((c[Sc>>2]&1024|0)==0&0==0):0){l=m;q=pa;o=qa;i=K;break d}r=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;s=c[p+8>>2]|0;if(a[r+9>>0]|0){t=i+1&255;o=c[r+4>>2]|0;c[o+4>>2]=c[r>>2];if((c[o+76>>2]|0)!=(r|0)?b[o+22>>1]&64:0){oa=3236;break c}q=o+72|0;i=c[q>>2]|0;ra:do if(!i)oa=3222;else{l=i;do{if(((c[l>>2]|0)!=(r|0)?(c[l+4>>2]|0)==(s|0):0)?(a[l+8>>0]|0)!=t<<24>>24:0){oa=3215;break c}l=c[l+12>>2]|0}while((l|0)!=0);while(1){if((c[i+4>>2]|0)==(s|0)?(c[i>>2]|0)==(r|0):0)break ra;i=c[i+12>>2]|0;if(!i){oa=3222;break}}}while(0);if((oa|0)==3222){oa=0;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;if(!i){i=7;oa=3855;break c}}else{i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=7;oa=3855;break c}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}na=i+8|0;a[na>>0]=0;a[na+1>>0]=0;a[na+2>>0]=0;a[na+3>>0]=0;c[i+4>>2]=s;c[i>>2]=r;c[i+12>>2]=c[q>>2];c[q>>2]=i}i=i+8|0;if((d[i>>0]|0)<(t&255)){a[i>>0]=t;l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}}else{l=m;q=pa;o=qa;i=0}break}case -96:{x=c[p+16>>2]|0;s=c[Vc>>2]|0;q=(s|0)>0;if(q?(c[db>>2]|0)==0:0){i=6;oa=3268}else oa=3239;sa:do if((oa|0)==3239){oa=0;if(!x){l=m;q=pa;o=qa;i=0;break d}l=x+8|0;i=c[l>>2]|0;w=c[i>>2]|0;t=w+56|0;o=c[t>>2]|0;if(o){if(q){r=c[db>>2]|0;q=0;do{if((c[r+(q<<2)>>2]|0)==(x|0)){i=0;oa=3268;break sa}q=q+1|0}while((q|0)<(s|0))}if(!((s|0)%5|0)){o=cw(s|0,((s|0)<0)<<31>>31|0,2)|0;o=Sv(o|0,L()|0,20,0)|0;q=L()|0;i=c[db>>2]|0;ta:do if(!i){if(c[$c>>2]|0){if(a[zf>>0]|0){i=7;oa=3268;break sa}}else{do if(q>>>0>0|((q|0)==0?o>>>0>(e[Xc>>1]|0)>>>0:0))i=Yc;else{i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3261;break ta}i=c[cd>>2]|0;if(!i){i=fd;break}c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3261;break ta}while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(Cf,o,q)|0;oa=3261}else{na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){if(!(q>>>0>0|((q|0)==0?o>>>0>(e[Xc>>1]|0)>>>0:0))){o=s;break}i=Zd(Cf,i,o,q)|0;oa=3261;break}i=Zd(Cf,i,o,q)|0;oa=3261}while(0);if((oa|0)==3261){if(!i){i=7;oa=3268;break}o=c[Vc>>2]|0}o=i+(o<<2)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[db>>2]=i;o=c[t>>2]|0;i=c[l>>2]|0}i=Wa[o&127](i)|0;if(!i){i=(c[Gd>>2]|0)+(c[Fd>>2]|0)|0;na=c[db>>2]|0;oa=c[Vc>>2]|0;c[Vc>>2]=oa+1;c[na+(oa<<2)>>2]=x;oa=x+12|0;c[oa>>2]=(c[oa>>2]|0)+1;if((i|0)!=0?(yd=c[w+80>>2]|0,(yd|0)!=0):0){c[x+20>>2]=i;i=Xa[yd&255](c[l>>2]|0,i+-1|0)|0;oa=3270}else{i=0;oa=3270}}else oa=3268}else{i=0;oa=3270}}while(0);if((oa|0)==3268){oa=0;if(x){l=x+8|0;oa=3270}}if((oa|0)==3270){oa=0;t=(c[l>>2]|0)+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;ua:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;va:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break ua}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3306;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break ua}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break ua}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3306;break va}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3306;break va}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3306}while(0);if((oa|0)==3306){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -95:{ea=rf;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));c[Wc>>2]=Cf;na=c[p+8>>2]|0;i=pa+(na*40|0)|0;c[rf>>2]=c[i>>2];c[rf+4>>2]=c[i+4>>2];c[rf+8>>2]=c[i+8>>2];c[rf+12>>2]=c[i+12>>2];c[rf+16>>2]=c[i+16>>2];i=b[sa>>1]&-1025;b[sa>>1]=i;i=i&65535;wa:do if((i&18|0)!=0?(b[pa+(na*40|0)+8>>1]&2048)==0:0){l=(i|4096)&65535;b[sa>>1]=l;do if(i&16384){i=(c[rf>>2]|0)+(c[Xb>>2]|0)|0;if((i|0)<1)if(!(l&16)){oa=3322;break}else i=1;if(Eg(rf,i,1)|0){i=7;break wa}gw((c[Ob>>2]|0)+(c[Xb>>2]|0)|0,0,c[rf>>2]|0)|0;c[Xb>>2]=(c[Xb>>2]|0)+(c[rf>>2]|0);i=b[sa>>1]&-16897;b[sa>>1]=i;if(!((c[Qb>>2]|0)!=0?(c[Ob>>2]|0)==(c[ec>>2]|0):0))oa=3322}else oa=3322;while(0);if((oa|0)==3322){oa=0;i=Jg(rf)|0;if(i|0)break;i=b[sa>>1]|0}b[sa>>1]=i&-4097;i=0}else i=0;while(0);l=b[sa>>1]|0;if(!((l&514)==514&(a[Jb>>0]|0)==1)){if(!(l&1)){l=Gg(rf,1)|0;oa=3329}}else{l=c[Ob>>2]|0;oa=3329}xa:do if((oa|0)==3329){oa=0;if(l){w=Sd(Cf,l,c[(c[uf>>2]|0)+(c[p+4>>2]<<4)>>2]|0)|0;t=c[c[w+60>>2]>>2]|0;q=c[Pb>>2]|0;if(!q){l=Wb;i=Vb}else{l=a[t>>0]|0;if(!(l<<24>>24))i=0;else{i=0;o=t;do{o=o+1|0;i=G(i+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[o>>0]|0}while(l<<24>>24!=0)}i=(i>>>0)%((c[dc>>2]|0)>>>0)|0;l=q+(i<<3)|0;i=q+(i<<3)+4|0}l=c[l>>2]|0;ya:do if(!l)i=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;l=l+-1|0;q=c[i+12>>2]|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-s|0;if(!(na<<24>>24==0|(o|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(o|0)!=0))}if(!o)break ya;if(!l){i=59292;break}}}while(0);i=c[i+8>>2]|0;if((i|0?(zd=c[i>>2]|0,Ad=c[zd+4>>2]|0,Ad|0):0)?c[zd+20>>2]|0:0){i=Ai(Cf,w,i,Ad,mf)|0;if(i|0)break;s=w+64|0;i=c[s>>2]|0;if(!i){i=0;break}l=i;while(1){if((c[l>>2]|0)==(Cf|0))break;l=c[l+24>>2]|0;if(!l){i=0;break xa}}l=c[Vc>>2]|0;if(!((l|0)%5|0)){q=cw(l|0,((l|0)<0)<<31>>31|0,2)|0;q=Sv(q|0,L()|0,20,0)|0;r=L()|0;i=c[db>>2]|0;za:do if(!i){if(c[$c>>2]|0){if(a[zf>>0]|0){i=7;break xa}}else{do if(r>>>0>0|((r|0)==0?q>>>0>(e[Xc>>1]|0)>>>0:0))i=Yc;else{i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3367;break za}i=c[cd>>2]|0;if(!i){i=fd;break}c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3367;break za}while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(Cf,q,r)|0;oa=3367}else{o=i;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;if(!(r>>>0>0|((r|0)==0?q>>>0>(e[Xc>>1]|0)>>>0:0)))break za;i=Zd(Cf,i,q,r)|0;oa=3367;break za}while(0);i=Zd(Cf,i,q,r)|0;oa=3367}while(0);if((oa|0)==3367){oa=0;if(!i){i=7;break}l=c[Vc>>2]|0}na=i+(l<<2)|0;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;c[db>>2]=i;i=c[s>>2]|0}Aa:do if(!i)i=0;else while(1){if((c[i>>2]|0)==(Cf|0))break Aa;i=c[i+24>>2]|0;if(!i){i=0;break}}while(0);ma=c[db>>2]|0;na=c[Vc>>2]|0;c[Vc>>2]=na+1;c[ma+(na<<2)>>2]=i;i=i+12|0;c[i>>2]=(c[i>>2]|0)+1;i=0;break}c[we>>2]=t;i=dd(Cf,36690,we)|0;c[mf>>2]=i;i=1}}while(0);if(!((b[sa>>1]&9216)==0&(c[Qb>>2]|0)==0))Cg(rf);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -94:{i=(c[ad>>2]|0)+1|0;c[ad>>2]=i;l=Sd(Cf,c[p+16>>2]|0,c[(c[uf>>2]|0)+(c[p+4>>2]<<4)>>2]|0)|0;do if(l|0?(Bd=l+64|0,Cd=c[Bd>>2]|0,Cd|0):0){l=Cd;do{if((c[(c[l+8>>2]|0)+4>>2]|0)>0){j=6;oa=3401;break c}l=c[l+24>>2]|0}while((l|0)!=0);c[Bd>>2]=0;r=Cd;l=0;while(1){o=c[r>>2]|0;q=r+24|0;i=r;r=c[q>>2]|0;if((o|0)==(Cf|0)){c[Bd>>2]=i;c[q>>2]=0;o=i}else{o=o+360|0;c[q>>2]=c[o>>2];c[o>>2]=i;o=l}if(!r)break;else l=o}i=o+8|0;l=Wa[c[(c[c[o+4>>2]>>2]|0)+20>>2]&127](c[i>>2]|0)|0;if(l|0){oa=3400;break c}c[i>>2]=0;c[Bd>>2]=0;i=c[o>>2]|0;ma=o+12|0;na=(c[ma>>2]|0)+-1|0;c[ma>>2]=na;if(!na){if(i|0){if(c[i+480>>2]|0){Xd(i,o);break}na=o;if((c[i+304>>2]|0)>>>0<=na>>>0?(c[i+308>>2]|0)>>>0>na>>>0:0){na=i+300|0;c[o>>2]=c[na>>2];c[na>>2]=o;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}}while(0);c[ad>>2]=(c[ad>>2]|0)+-1;l=m;q=pa;o=qa;i=0;break}case -93:{c[rf>>2]=0;w=c[(c[p+16>>2]|0)+8>>2]|0;if(!w){i=6;oa=3458;break c}x=c[w>>2]|0;if(!x){i=6;oa=3458;break c}i=Xa[c[x+24>>2]&255](w,rf)|0;t=w+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Ba:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ca:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ba}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3440;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ba}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ba}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3440;break Ca}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3440;break Ca}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3440}while(0);if((oa|0)==3440){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=3458;break c}c[c[rf>>2]>>2]=w;o=c[p+4>>2]|0;i=c[xd>>2]|0;if((o|0)>0)i=i+(((c[va>>2]|0)-o|0)*40|0)|0;l=c[(c[oc>>2]|0)+(o<<2)>>2]|0;if(l|0){na=l+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(o<<2)>>2]|0);c[(c[oc>>2]|0)+(o<<2)>>2]=0}if((c[i+24>>2]|0)<96){if(Eg(i,96,0)|0){oa=3459;break c}i=c[i+16>>2]|0}else{na=c[i+20>>2]|0;c[i+16>>2]=na;i=i+8|0;b[i>>1]=b[i>>1]&13;i=na}c[(c[oc>>2]|0)+(o<<2)>>2]=i;ea=i;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=2;a[i+1>>0]=-1;b[i+56>>1]=0;c[i+72>>2]=i+88;if(!i){oa=3459;break c}c[i+40>>2]=c[rf>>2];l=w+4|0;c[l>>2]=(c[l>>2]|0)+1;l=m;q=pa;o=qa;i=0;break}case 9:{q=pa+((c[p+12>>2]|0)*40|0)|0;l=q+40|0;w=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=c[w+40>>2]|0;s=c[x>>2]|0;y=c[s>>2]|0;o=c[l>>2]|0;q=c[q>>2]|0;r=c[ta>>2]|0;if((o|0)>0){i=0;do{na=i;i=i+1|0;c[r+(na<<2)>>2]=l+(i*40|0)}while((i|0)!=(o|0))}i=_a[c[y+32>>2]&127](x,q,c[p+16>>2]|0,o,r)|0;t=s+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Da:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ea:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Da}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3499;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Da}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Da}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3499;break Ea}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3499;break Ea}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3499}while(0);if((oa|0)==3499){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=3855;break c}na=Wa[c[y+40>>2]&127](x)|0;a[w+2>>0]=0;if(!na){l=m;q=pa;o=qa;i=0}else{i=0;oa=28}break}case -92:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=c[p+12>>2]|0;y=pa+(x*40|0)|0;if(a[i+2>>0]|0){i=pa+(x*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(y);l=m;q=pa;o=qa;i=K;break d}i=i+40|0;q=c[c[i>>2]>>2]|0;l=c[q>>2]|0;c[kc>>2]=0;c[kc+4>>2]=0;c[kc+8>>2]=0;c[kc+12>>2]=0;c[kc+16>>2]=0;c[kc+20>>2]=0;c[kc+24>>2]=0;c[rf>>2]=y;w=pa+(x*40|0)+8|0;o=b[w>>1]|0;if(!(b[p+2>>1]&1))b[w>>1]=o&15904|1;else{if(!(o&9216))b[w>>1]=1;else Dg(y);b[w>>1]=16385;c[y>>2]=0}i=Ya[c[l+44>>2]&127](c[i>>2]|0,rf,c[p+8>>2]|0)|0;t=q+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Fa:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ga:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Fa}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3554;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Fa}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Fa}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3554;break Ga}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3554;break Ga}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3554}while(0);if((oa|0)==3554){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if((c[Kb>>2]|0)>0){i=b[w>>1]|0;if((i&514)==514?(a[pa+(x*40|0)+10>>0]|0)==1:0)i=c[pa+(x*40|0)+16>>2]|0;else if(!(i&1))i=Gg(y,1)|0;else i=0;c[xe>>2]=i;Ag(f,31408,xe);i=c[Kb>>2]|0}l=b[w>>1]|0;if((l&2)!=0?(a[pa+(x*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(y,sd)|0;l=b[w>>1]|0}o=l&65535;if(o&18){l=c[pa+(x*40|0)+12>>2]|0;if(o&16384)l=(c[y>>2]|0)+l|0;if((l|0)>(c[(c[pa+(x*40|0)+32>>2]|0)+108>>2]|0)){oa=3576;break c}else l=(i|0)==0?7:12}else l=(i|0)==0?7:12;switch(l&15){case 12:{oa=3855;break c}case 15:{oa=3891;break c}case 7:{l=m;q=pa;o=qa;break}default:{h=0;oa=3900;break c}}break}case 60:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if(!(a[i+2>>0]|0)){t=i+40|0;i=c[t>>2]|0;x=c[i>>2]|0;w=c[x>>2]|0;i=Wa[c[w+36>>2]&127](i)|0;x=x+8|0;if(c[x>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[x>>2]|0;Ha:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ia:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ha}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3616;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ha}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ha}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3616;break Ia}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3616;break Ia}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3616}while(0);if((oa|0)==3616)if(!l){l=0;break}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[x>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[x>>2]=0}if(i|0){oa=3855;break c}if(!(Wa[c[w+40>>2]&127](c[t>>2]|0)|0)){i=0;oa=20}else{l=m;o=pa;i=0;oa=21}}else{l=m;q=pa;o=qa;i=K}break}case -91:{i=Sc;o=c[i>>2]|0;i=c[i+4>>2]|0;q=Sc;c[q>>2]=o|67108864;c[q+4>>2]=i;q=c[(c[p+16>>2]|0)+8>>2]|0;i=c[p+4>>2]|0;l=pa+(i*40|0)|0;if((b[pa+(i*40|0)+8>>1]&2?(a[pa+(i*40|0)+10>>0]|0)!=1:0)?(Dd=Ig(l,1)|0,Dd|0):0){i=Dd;oa=3855;break c}i=Xa[c[(c[q>>2]|0)+76>>2]&255](q,c[pa+(i*40|0)+16>>2]|0)|0;if((o&67108864|0)==0&0==0){la=Sc;ma=c[la+4>>2]|0;na=Sc;c[na>>2]=c[la>>2]&-67108865;c[na+4>>2]=ma}t=q+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Ja:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ka:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ja}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3666;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0<s>>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ja}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ja}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<s>>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3666;break Ka}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3666;break Ka}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3666}while(0);if((oa|0)==3666){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 10:{if(a[zf>>0]|0){i=2;j=K;break c}y=p+16|0;t=c[(c[y>>2]|0)+8>>2]|0;if(!t){i=12;j=6;break c}i=c[t>>2]|0;if(!i){i=12;j=6;break c}s=c[p+8>>2]|0;o=i+52|0;i=c[o>>2]|0;La:do if(i){r=a[Rb>>0]|0;q=c[ta>>2]|0;if((s|0)>0){i=pa+((c[p+12>>2]|0)*40|0)|0;l=0;while(1){c[q+(l<<2)>>2]=i;l=l+1|0;if((l|0)==(s|0))break;else i=i+40|0}i=c[o>>2]|0}w=p+2|0;a[Rb>>0]=b[w>>1];x=Za[i&127](t,s,q,rf)|0;a[Rb>>0]=r;s=t+8|0;if(c[s>>2]|0){o=c[f>>2]|0;i=c[mf>>2]|0;Ma:do if(i|0){do if(o|0){if(c[o+480>>2]|0){Xd(o,i);break Ma}l=i;if((c[o+304>>2]|0)>>>0>l>>>0)break;if((c[o+308>>2]|0)>>>0<=l>>>0)break;na=o+300|0;c[i>>2]=c[na>>2];c[na>>2]=i;break Ma}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);q=c[s>>2]|0;Na:do if(!q)i=0;else{r=(Eu(q)|0)+1|0;Oa:do if(!o){na=Sv(r|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){i=0;break Na}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](r)|0;oa=3718;break}i=Wa[c[29356>>2]&127](r)|0;if((c[14985]|0)>>>0<r>>>0)c[14985]=r;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break Na}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){i=0;break Na}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<r>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3718;break Oa}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3718;break Oa}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,r,0)|0;oa=3718}while(0);if((oa|0)==3718){oa=0;if(!i){i=0;break}}ew(i|0,q|0,r|0)|0}while(0);c[mf>>2]=i;i=c[s>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[s>>2]=0}if(!x){if(c[p+4>>2]|0){la=rf;ma=c[la+4>>2]|0;na=zb;c[na>>2]=c[la>>2];c[na+4>>2]=ma}c[rc>>2]=(c[rc>>2]|0)+1;i=0;break}else{if((x&255|0)!=19){oa=3733;break c}if(!(a[(c[y>>2]|0)+16>>0]|0)){oa=3733;break c}i=b[w>>1]|0;switch(i<<16>>16){case 5:{i=2;oa=3732;break c}case 4:{i=0;break La}default:{oa=3731;break c}}}}else i=K;while(0);l=m;q=pa;o=qa;break}case -90:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=c[(c[(c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0)+4>>2]|0)+44>>2];c[l+4>>2]=0;l=m;q=pa;o=qa;i=K;break}case -89:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;q=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;l=c[p+12>>2]|0;o=c[q+4>>2]|0;if(!l)l=0;else{na=c[o+44>>2]|0;l=na>>>0<l>>>0?l:na}c[o+4>>2]=c[q>>2];o=(c[o>>2]|0)+156|0;if((l|0)>0)c[o>>2]=l;else l=c[o>>2]|0;q=i;c[q>>2]=l;c[q+4>>2]=((l|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 63:case 62:{o=b[p+2>>1]|0;l=((o&65535)<<2)+28|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=3758;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0<l>>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=3758}while(0);if((oa|0)==3758)i=_d(Cf,l,0)|0;if(!i){l=p;j=h;i=zf;oa=3892;break a}c[i>>2]=0;oa=p+16|0;c[i+4>>2]=c[oa>>2];c[i+16>>2]=(p-m|0)/20|0;c[i+12>>2]=f;c[i+20>>2]=0;a[i+25>>0]=o;a[p+1>>0]=-16;c[oa>>2]=i;a[p>>0]=(d[p>>0]|0)+2;oa=3761;break}case 65:case 64:{oa=3761;break}default:{l=m;q=pa;o=qa;i=K}}while(0);Pa:do if((oa|0)==34){oa=0;i=c[p+4>>2]|0;if(i|0){oa=39;break c}i=c[nc>>2]|0;if(!i){oa=38;break c}c[nc>>2]=c[i+4>>2];c[La>>2]=(c[La>>2]|0)+-1;m=c[rc>>2]|0;c[sc>>2]=m;c[tc>>2]=(c[tc>>2]|0)+m;i=sg(i)|0;m=c[le>>2]|0;if((c[p+8>>2]|0)==4)i=(c[m+(i*20|0)+8>>2]|0)+-1|0;l=m;q=c[xd>>2]|0;o=qa;p=m+(i*20|0)|0;i=K}else if((oa|0)==83){oa=0;na=c[xd>>2]|0;o=c[l>>2]|0;l=na+(o*40|0)|0;o=na+(o*40|0)+8|0;if(!(b[o>>1]&9216))b[o>>1]=4;else lh(l)|0;o=l+8|0;b[o>>1]=2562;c[l+16>>2]=c[p+16>>2];c[l+12>>2]=c[p+4>>2];a[l+10>>0]=sd;l=c[p+12>>2]|0;if((l|0)>0?(na=pa+(l*40|0)|0,(c[na+4>>2]|0)==0?(c[na>>2]|0)==(e[p+2>>1]|0):0):0){b[o>>1]=2576;l=m;q=pa;o=qa}else{l=m;q=pa;o=qa}}else if((oa|0)==1049){if(((d[vf>>0]|d[vf+1>>0]<<8)&3)==1){i=516;oa=3855;break c}w=c[p+8>>2]|0;A=c[p+12>>2]|0;i=c[uf>>2]|0;C=c[i+(A<<4)+4>>2]|0;l=p+2|0;q=b[l>>1]|0;if(z<<24>>24==109){o=(q&8|4)&65535;i=a[(c[i+(A<<4)+12>>2]|0)+76>>0]|0;if((i&255)<(d[pc>>0]|0)){a[pc>>0]=i;B=o}else B=o}else B=0;if(q&16){s=pa+(w*40|0)|0;t=pa+(w*40|0)+8|0;r=b[t>>1]|0;i=r&65535;do if(!(i&4)){if(i&8|0){o=Mg(+g[s>>3])|0;q=L()|0;i=r;break}if(!(i&18)){o=0;q=0;i=r}else{o=Ng(a[pa+(w*40|0)+10>>0]|0,c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0)|0;q=L()|0;i=b[t>>1]|0}}else{q=s;o=c[q>>2]|0;q=c[q+4>>2]|0;i=r}while(0);w=s;c[w>>2]=o;c[w+4>>2]=q;b[t>>1]=i&15904|4;w=o}z=p+1|0;switch(a[z>>0]|0){case -9:{y=c[p+16>>2]|0;x=e[y+8>>1]|0;break}case -3:{x=c[p+16>>2]|0;y=0;break}default:{x=0;y=0}}s=c[p+4>>2]|0;i=c[xd>>2]|0;if((s|0)>0)i=i+(((c[va>>2]|0)-s|0)*40|0)|0;o=x<<3;t=o+96|0;o=o+296|0;q=c[(c[oc>>2]|0)+(s<<2)>>2]|0;if(q|0){oa=q+5|0;a[oa>>0]=a[oa>>0]&-2;tg(f,c[(c[oc>>2]|0)+(s<<2)>>2]|0);c[(c[oc>>2]|0)+(s<<2)>>2]=0}if((c[i+24>>2]|0)<(o|0)){if(Eg(i,o,0)|0){l=p;j=h;i=zf;oa=3892;break a}o=i+16|0;r=o;o=c[o>>2]|0}else{o=c[i+20>>2]|0;r=i+16|0;c[r>>2]=o;oa=i+8|0;b[oa>>1]=b[oa>>1]&13}c[(c[oc>>2]|0)+(s<<2)>>2]=o;i=A&255;q=o+1|0;ea=o;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[q>>0]=i;b[o+56>>1]=x;c[o+72>>2]=o+88+(x<<2);oa=(c[r>>2]|0)+t|0;i=o+40|0;c[i>>2]=oa;c[oa>>2]=0;c[oa+4>>2]=0;c[oa+8>>2]=0;c[oa+12>>2]=0;c[oa+16>>2]=0;if(!o){l=p;j=h;i=zf;oa=3892;break a}a[o+2>>0]=1;oa=o+5|0;a[oa>>0]=a[oa>>0]|4;c[o+52>>2]=w;i=Vg(C,w,B,y,c[i>>2]|0)|0;c[o+44>>2]=y;a[o+4>>0]=(a[z>>0]|0)!=-9&1;oa=1074}else if((oa|0)==1216){oa=0;x=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+12>>2]|0;r=pa+(w*40|0)|0;i=c[p+16>>2]|0;if((i|0)>0){c[Hd>>2]=c[x+44>>2];b[Aa>>1]=i;c[Ba>>2]=r;s=0;r=Hd;i=z;q=0}else{o=pa+(w*40|0)+8|0;l=b[o>>1]|0;do if(l&16384){q=pa+(w*40|0)+12|0;i=(c[r>>2]|0)+(c[q>>2]|0)|0;if((i|0)<1)if(!(l&16))break;else i=1;if(Eg(r,i,1)|0){oa=1268;break c}gw((c[pa+(w*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[r>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[r>>2]|0);b[o>>1]=b[o>>1]&-16897}while(0);r=x+44|0;s=c[r>>2]|0;t=s+6|0;q=((e[t>>1]|0)*40|0)+56|0;o=c[s+12>>2]|0;Qa:do if(!o){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;oa=1246;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](o)|0;if(!l){oa=1268;break c}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){oa=1268;break c}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<q>>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1246;break Qa}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1246;break Qa}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,q,0)|0;oa=1246}while(0);if((oa|0)==1246)if(!i){oa=1268;break c}else l=i;c[l+4>>2]=l+16;c[l>>2]=s;b[l+8>>1]=(e[t>>1]|0)+1;_g(c[r>>2]|0,c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0,l);s=l;r=l;i=a[p>>0]|0;q=l}a[r+10>>0]=0;Ra:do if(i<<24>>24==27?(fe=b[r+8>>1]|0,fe<<16>>16!=0):0){l=c[r+4>>2]|0;o=fe&65535;i=0;while(1){if(b[l+(i*40|0)+8>>1]&1){o=1;break Ra}i=i+1|0;if(i>>>0>=o>>>0){o=0;break}}}else o=0;while(0);i=Xg(c[x+40>>2]|0,r,0,0,0,rf)|0;do if(s|0){if(c[Ze>>2]|0){Xd(Cf,q);break}oa=q;if((c[_e>>2]|0)>>>0<=oa>>>0?(c[$e>>2]|0)>>>0>oa>>>0:0){c[q>>2]=c[af>>2];c[af>>2]=q;break}if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{oa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);if(i|0){oa=1270;break c}i=c[rf>>2]|0;c[x+32>>2]=i;l=(i|0)==0;a[x+2>>0]=(l^1)&1;a[x+3>>0]=0;c[x+28>>2]=0;if((a[p>>0]|0)==29)if(l)oa=1269;else oa=1267;else if(!(i|o))oa=1267;else oa=1269;if((oa|0)==1267){oa=0;l=m;q=pa;o=qa;i=0;break}else if((oa|0)==1269){i=0;oa=28;break}}else if((oa|0)==1287){oa=0;la=c[i>>2]|0;ma=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[ma+40>>2]|0;c[je>>2]=0;la=pa+(la*40|0)|0;ka=c[la>>2]|0;la=c[la+4>>2]|0;i=Xg(i,0,ka,la,0,je)|0;na=ma+64|0;c[na>>2]=ka;c[na+4>>2]=la;a[ma+2>>0]=0;c[ma+28>>2]=0;a[ma+3>>0]=0;na=c[je>>2]|0;c[ma+32>>2]=na;if(!na)if(!i){l=m;q=pa;o=qa;i=0;break}else{oa=3855;break c}else if(!(c[p+8>>2]|0)){oa=1289;break c}else{oa=28;break}}else if((oa|0)==1521){oa=0;na=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;c[Yd>>2]=1;do if((a[na>>0]|0)==1){ma=c[na+40>>2]|0;if(!(a[ma+56>>0]|0)){i=ma+36|0;if(!(c[i>>2]|0)){c[Yd>>2]=1;a[na+2>>0]=1;break}else{c[Yd>>2]=0;i=Uh(ma+64|0,i)|0;oa=2142;break}}i=Vh(ma)|0;if(i|0){oa=2145;break c}la=ma+59|0;R=0;ka=0;while(1){if(ka>>>0>=(d[la>>0]|0)>>>0){oa=2138;break}ha=ma+64+(ka*72|0)|0;c[rf>>2]=0;ia=ma+64+(ka*72|0)+28|0;i=c[ia>>2]|0;l=((i|0)<0)<<31>>31;if((i|0)>16){ga=0;o=16;q=0;while(1){o=cw(o|0,q|0,4)|0;q=L()|0;ja=ga+1|0;if(!((q|0)<(l|0)|(q|0)==(l|0)&o>>>0<i>>>0))break;else ga=ja}fa=Hd;c[fa>>2]=0;c[fa+4>>2]=0;if((i|0)>=17){i=c[7389]|0;if((i|0)!=0?(Wa[i&127](100)|0)!=0:0){S=0;U=0}else oa=1537;Sa:do if((oa|0)==1537){oa=0;do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](976)|0;if(!i){S=0;U=0;break Sa}}else{i=Wa[c[29356>>2]&127](976)|0;if((c[14985]|0)>>>0<976)c[14985]=976;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;da=L()|0;c[14768]=((da|0)<0|(da|0)==0&ea>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){S=0;U=0;break Sa}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);S=i+16|0;gw(S|0,0,960)|0;c[i>>2]=16;c[i+4>>2]=0;c[i+12>>2]=S;c[i+8>>2]=i+912;S=i;U=i}while(0);c[rf>>2]=U;fa=(U|0)==0;i=fa?7:0;l=c[ia>>2]|0;if((l|0)>0&(fa^1)){ba=(ga|0)==0;ca=ma+64+(ka*72|0)+8|0;da=ma+64+(ka*72|0)+64|0;o=0;aa=0;do{c[Td>>2]=0;i=l-aa|0;i=$h(ha,(i|0)<16?i:16,Hd,Td)|0;do if(!i){$=o+1|0;Z=c[Td>>2]|0;i=c[7389]|0;if((i|0)!=0?(Wa[i&127](100)|0)!=0:0)oa=1566;else oa=1554;Ta:do if((oa|0)==1554){oa=0;do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](64)|0;if(!i){oa=1566;break Ta}else l=i}else{i=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;q=59064;l=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,q|0,i|0,((i|0)<0)<<31>>31|0)|0;_=L()|0;c[14768]=((_|0)<0|(_|0)==0&ea>>>0<=fa>>>0)&1}l=Wa[c[29340>>2]&127](i)|0;if(!l){oa=1566;break Ta}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0<=(c[14987]|0)>>>0)break;c[14987]=i}while(0);ea=l+8|0;fa=ea+56|0;do{a[ea>>0]=0;ea=ea+1|0}while((ea|0)<(fa|0));c[l+4>>2]=Z;c[l>>2]=ha;_=c[ca>>2]|0;Z=(c[_+8>>2]|0)+9|0;_=(c[_+4>>2]|0)/2|0;_=(Z|0)>(_|0)?Z:_;c[l+16>>2]=_;Z=da;_=Sv(c[Z>>2]|0,c[Z+4>>2]|0,_|0,((_|0)<0)<<31>>31|0)|0;Z=L()|0;i=da;c[i>>2]=_;c[i+4>>2]=Z;i=0;Z=l;_=l}while(0);do if((oa|0)==1566){oa=0;if(!Z){i=7;Z=0;_=0;break}if((c[Z>>2]|0)>0){X=Z+12|0;W=0;do{l=c[X>>2]|0;Y=l+(W*56|0)|0;i=c[l+(W*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(W*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);P=c[l+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{l=c[T>>2]|0;V=l+(O*56|0)|0;i=c[l+(O*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(O*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);J=c[l+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{l=c[M>>2]|0;N=l+(I*56|0)|0;i=c[l+(I*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(I*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);D=c[l+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{l=c[F>>2]|0;H=l+(C*56|0)|0;i=c[l+(C*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(C*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);y=c[l+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{l=c[A>>2]|0;B=l+(x*56|0)|0;i=c[l+(x*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(x*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);s=c[l+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{l=c[w>>2]|0;q=l+(r*56|0)|0;i=c[l+(r*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(r*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(r*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=Y;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[Z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Z);i=7;Z=0;_=0;break}else{i=Wa[c[29352>>2]&127](Z)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Z);i=7;Z=0;_=0;break}}while(0);Ua:do if(ba){if(!i){i=U;oa=1830}}else{q=1;l=1;do{q=q<<4;l=l+1|0}while((l|0)!=(ja|0));if(i|0)break;i=U;w=1;Va:while(1){t=(c[i+12>>2]|0)+((((o|0)/(q|0)|0|0)%16|0)*56|0)+48|0;i=c[t>>2]|0;if(!i){i=c[7389]|0;if(i|0?Wa[i&127](100)|0:0){i=7;break Ua}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](976)|0;if(!i){i=7;break Ua}else l=i}else{i=Wa[c[29356>>2]&127](976)|0;if((c[14985]|0)>>>0<976)c[14985]=976;r=59064;l=c[r>>2]|0;r=c[r+4>>2]|0;if((r|0)>0|(r|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,r|0,i|0,((i|0)<0)<<31>>31|0)|0;Y=L()|0;c[14768]=((Y|0)<0|(Y|0)==0&ea>>>0<=fa>>>0)&1}l=Wa[c[29340>>2]&127](i)|0;if(!l){i=7;break Ua}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0<=(c[14987]|0)>>>0)break;c[14987]=i}while(0);i=l+16|0;gw(i|0,0,960)|0;Y=l+12|0;c[l>>2]=16;c[l+4>>2]=0;c[Y>>2]=i;c[l+8>>2]=l+912;i=c[7389]|0;if(i|0?Wa[i&127](100)|0:0){oa=1702;break}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](64)|0;if(!i){oa=1714;break Va}}else{i=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;s=59064;r=c[s>>2]|0;s=c[s+4>>2]|0;if((s|0)>0|(s|0)==0&r>>>0>0){fa=c[14978]|0;ea=Tv(r|0,s|0,i|0,((i|0)<0)<<31>>31|0)|0;X=L()|0;c[14768]=((X|0)<0|(X|0)==0&ea>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){oa=1714;break Va}r=Wa[c[29352>>2]&127](i)|0;r=(c[14978]|0)+r|0;c[14978]=r;if(r>>>0>(c[14982]|0)>>>0)c[14982]=r;r=(c[14981]|0)+1|0;c[14981]=r;if(r>>>0<=(c[14987]|0)>>>0)break;c[14987]=r}while(0);ea=i+8|0;fa=ea+56|0;do{a[ea>>0]=0;ea=ea+1|0}while((ea|0)<(fa|0));c[t>>2]=i;c[i+4>>2]=l;c[i>>2]=ha;Y=c[ca>>2]|0;ea=(c[Y+8>>2]|0)+9|0;Y=(c[Y+4>>2]|0)/2|0;Y=(ea|0)>(Y|0)?ea:Y;c[i+16>>2]=Y;ea=da;Y=Sv(c[ea>>2]|0,c[ea+4>>2]|0,Y|0,((Y|0)<0)<<31>>31|0)|0;ea=L()|0;fa=da;c[fa>>2]=Y;c[fa+4>>2]=ea}i=c[i+4>>2]|0;if(w>>>0<ga>>>0){q=(q|0)/16|0;w=w+1|0}else{oa=1830;break Ua}}if((oa|0)==1702){oa=0;c[t>>2]=0}else if((oa|0)==1714){oa=0;c[t>>2]=0}if((c[l>>2]|0)>0){W=0;do{o=c[Y>>2]|0;X=o+(W*56|0)|0;i=c[o+(W*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(W*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);P=c[o+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{o=c[T>>2]|0;V=o+(O*56|0)|0;i=c[o+(O*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(O*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;i=c[o+(I*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(I*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;i=c[o+(C*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(C*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;i=c[o+(x*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(x*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;i=c[o+(r*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(r*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(r*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=X;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[l>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);i=7;break}else{i=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);i=7;break}}while(0);if((oa|0)==1830){oa=0;c[(c[i+12>>2]|0)+(((o|0)%16|0)*56|0)+48>>2]=_;o=$;i=0;break}if(!Z){o=$;break}X=c[Z+4>>2]|0;do if(X|0){if((c[X>>2]|0)>0){Y=X+12|0;W=0;do{o=c[Y>>2]|0;Z=o+(W*56|0)|0;l=c[o+(W*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(W*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);P=c[o+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{o=c[T>>2]|0;V=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);zg(c[o+(r*56|0)+48>>2]|0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=Z;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[X>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](X);break}else{fa=Wa[c[29352>>2]&127](X)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](X);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](_);o=$;break}else{o=Wa[c[29352>>2]&127](_)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](_);o=$;break}}while(0);aa=aa+16|0;l=c[ia>>2]|0}while((i|0)==0&(l|0)>(aa|0))}}else oa=1534}else{oa=Hd;c[oa>>2]=0;c[oa+4>>2]=0;oa=1534}if((oa|0)==1534){oa=0;i=$h(ha,i,Hd,rf)|0;S=c[rf>>2]|0;U=S}T=(i|0)==0;do if(!T){if(U){if((c[U>>2]|0)>0){P=U+12|0;O=0;do{o=c[P>>2]|0;Q=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+48>>2]|0;do if(l|0){xg(c[l+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{ja=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{ja=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{ja=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{ja=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{ja=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{ja=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{ja=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{ja=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=Q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[U>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](S);break}else{ja=Wa[c[29352>>2]&127](S)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](S);break}}}else R=U;while(0);if(T)ka=ka+1|0;else{oa=2043;break}}do if((oa|0)==2043)if(R){if((c[R>>2]|0)>0){P=R+12|0;O=0;do{o=c[P>>2]|0;Q=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+48>>2]|0;do if(l|0){xg(c[l+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{oa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{oa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{oa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{oa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{oa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{oa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{oa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{oa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=Q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[R>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](R);oa=2139;break}else{oa=Wa[c[29352>>2]&127](R)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](R);oa=2139;break}}else oa=2139;else if((oa|0)==2138){oa=0;i=_h(ma+64|0,R)|0;c[ma+20>>2]=R;if(!i)i=0;else oa=2139}while(0);c[Yd>>2]=0;oa=2142}else{i=ch(c[na+40>>2]|0,Yd)|0;a[na+3>>0]=0;c[na+28>>2]=0;oa=2142}while(0);if((oa|0)==2142){oa=0;if(i|0){oa=2145;break c}ma=c[Yd>>2]|0;a[na+2>>0]=ma;if(!ma){l=m;q=pa;o=qa;i=0;break}}i=0;oa=28}else if((oa|0)==2160){c[l+28>>2]=0;switch(i|0){case 0:{a[l+2>>0]=0;i=f+160+(e[p+2>>1]<<2)|0;c[i>>2]=(c[i>>2]|0)+1;i=0;oa=20;break Pa}case 101:{a[l+2>>0]=1;l=m;o=pa;i=0;oa=21;break Pa}default:{oa=3855;break c}}}else if((oa|0)==3029){oa=0;o=c[p+12>>2]|0;i=pa+(o*40|0)|0;l=s+8|0;if((c[l>>2]|0)!=(i|0)?(c[l>>2]=i,vd=a[s+25>>0]|0,vd<<24>>24):0){l=c[p+8>>2]|0;i=vd&255;do{na=i;i=i+-1|0;c[s+28+(i<<2)>>2]=pa+((i+l|0)*40|0)}while((na|0)>1)}i=pa+(o*40|0)+12|0;c[i>>2]=(c[i>>2]|0)+1;i=c[s+4>>2]|0;if(!(c[p+4>>2]|0))cb[c[i+16>>2]&255](s,d[s+25>>0]|0,s+28|0);else cb[c[i+28>>2]&255](s,d[s+25>>0]|0,s+28|0);r=s+20|0;i=c[r>>2]|0;if(i){if((i|0)>0){i=c[s>>2]|0;do if(i){l=b[i+8>>1]|0;if((l&514)==514?(a[i+10>>0]|0)==1:0){i=c[i+16>>2]|0;break}if(!(l&1))i=Gg(i,1)|0;else i=0}else i=0;while(0);c[Ye>>2]=i;Ag(f,31408,Ye);i=c[r>>2]|0}else i=K;o=s+24|0;if(a[o>>0]|0){l=c[p+-16>>2]|0;do if(l|0){q=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(!(b[l>>1]&9216)){na=q;c[na>>2]=1;c[na+4>>2]=0;b[l>>1]=4;break}else{Pg(q,1,0);break}}while(0);a[o>>0]=0}o=c[s>>2]|0;l=o+8|0;if(!((b[l>>1]&9216)==0?(c[o+24>>2]|0)==0:0)){Cg(o);l=(c[s>>2]|0)+8|0}b[l>>1]=1;c[r>>2]=0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}}else{l=m;q=pa;o=qa;i=K}}else if((oa|0)==3761){oa=0;q=c[p+16>>2]|0;y=c[p+12>>2]|0;x=pa+(y*40|0)|0;if((c[q>>2]|0)!=(x|0)){c[q>>2]=x;i=a[q+25>>0]|0;if(!(i<<24>>24))i=0;else{o=c[p+8>>2]|0;l=i&255;do{na=l;l=l+-1|0;c[q+28+(l<<2)>>2]=pa+((l+o|0)*40|0)}while((na|0)>1)}}else i=a[q+25>>0]|0;w=pa+(y*40|0)+8|0;b[w>>1]=b[w>>1]&15904|1;cb[c[(c[q+4>>2]|0)+16>>2]&255](q,i&255,q+28|0);t=q+20|0;i=c[t>>2]|0;if(i){if((i|0)>0){i=b[w>>1]|0;if((i&514)==514?(a[pa+(y*40|0)+10>>0]|0)==1:0)i=c[pa+(y*40|0)+16>>2]|0;else if(!(i&1))i=Gg(x,1)|0;else i=0;c[ye>>2]=i;Ag(f,31408,ye);i=c[t>>2]|0}else i=K;r=c[q+16>>2]|0;s=c[p+4>>2]|0;o=c[Hb>>2]|0;Wa:do if(o|0){if((r|0)<0)while(1){l=c[o+12>>2]|0;if(l|0)ab[l&127](c[o+8>>2]|0);c[Hb>>2]=c[o+16>>2];Xa:do if(!(c[Ze>>2]|0)){l=o;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[o>>2]=c[af>>2];c[af>>2]=o;break Xa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else Xd(Cf,o);while(0);o=c[Hb>>2]|0;if(!o)break Wa}l=Hb;do{Ya:do if((c[o>>2]|0)==(r|0)?(Ed=c[o+4>>2]|0,(Ed|0)>-1):0){if((Ed|0)<=31?1<<Ed&s|0:0){oa=3803;break}q=c[o+12>>2]|0;if(q|0)ab[q&127](c[o+8>>2]|0);c[l>>2]=c[o+16>>2];if(c[Ze>>2]|0){Xd(Cf,o);break}q=o;do if((c[_e>>2]|0)>>>0<=q>>>0){if((c[$e>>2]|0)>>>0<=q>>>0)break;c[o>>2]=c[af>>2];c[af>>2]=o;break Ya}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else oa=3803;while(0);if((oa|0)==3803){oa=0;l=o+16|0}o=c[l>>2]|0}while((o|0)!=0)}while(0);c[t>>2]=0;if(!i)i=0;else{oa=3855;break c}}else i=K;l=b[w>>1]|0;if(l&18){if((l&2)!=0?(a[pa+(y*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(x,sd)|0;l=b[w>>1]|0}o=l&65535;if(o&18){l=c[pa+(y*40|0)+12>>2]|0;if(o&16384)l=(c[x>>2]|0)+l|0;if((l|0)>(c[(c[pa+(y*40|0)+32>>2]|0)+108>>2]|0)){oa=3891;break c}else{l=m;q=pa;o=qa}}else{l=m;q=pa;o=qa}}else{l=m;q=pa;o=qa}}while(0);if((oa|0)==20){l=m;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0;o=pa;oa=21}else if((oa|0)==28){oa=0;l=m;q=pa;o=qa;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0}else if((oa|0)==1074){oa=0;a[(c[o+40>>2]|0)+3>>0]=b[l>>1]&3;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break}}Za:do if((oa|0)==21){oa=0;if(c[lc>>2]|0){j=n;i=zf;break b}if(n>>>0<h>>>0){q=o;o=qa}else while(1){m=c[Af>>2]|0;if(!m){q=o;o=qa;break Za}pa=c[fb>>2]|0;h=pa+h|0;if(Wa[m&127](c[gb>>2]|0)|0){oa=3844;break c}if(n>>>0<h>>>0){q=o;o=qa;break}}}while(0);m=l;p=p+20|0;K=i;qa=o;pa=q}switch(oa|0){case 38:{c[Bf>>2]=0;a[Jd>>0]=c[p+8>>2];c[xf>>2]=(p-m|0)/20|0;oa=44;break}case 39:{j=p+4|0;l=(p-m|0)/20|0;c[Bf>>2]=i;a[Jd>>0]=c[p+8>>2];c[xf>>2]=l;i=b[p+2>>1]|0;if(i<<16>>16){c[ff>>2]=c[3504+((i&65535)+-1<<2)>>2];Ag(f,34155,ff);i=c[p+16>>2]|0;if(i|0){c[kf>>2]=c[mf>>2];c[kf+4>>2]=i;zf=dd(Cf,34176,kf)|0;c[mf>>2]=zf}}else{c[gf>>2]=c[p+16>>2];Ag(f,31408,gf)}oa=c[j>>2]|0;yf=c[hd>>2]|0;zf=c[mf>>2]|0;c[lf>>2]=l;c[lf+4>>2]=yf;c[lf+8>>2]=zf;Db(oa,34183,lf);oa=44;break}case 153:{vf=Oa;uf=c[vf+4>>2]|0;if((uf|0)>0|(uf|0)==0&(c[vf>>2]|0)>>>0>0){c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,Ae);o=k;q=h;h=1;i=zf;break a}if(c[(c[f>>2]|0)+456>>2]|0?c[bc>>2]|0:0)Bg(f,1)|0;c[ua>>2]=(c[ua>>2]|0)+2|1;t=pa+((c[p+4>>2]|0)*40|0)|0;c[Zc>>2]=t;r=p+8|0;if((c[r>>2]|0)>0){q=0;do{s=t+(q*40|0)|0;o=s+8|0;i=b[o>>1]|0;if(i&4096){j=i&65535;do if(j&18){do if(j&16384){l=s+12|0;j=(c[s>>2]|0)+(c[l>>2]|0)|0;if((j|0)<1)if(!(i&16))break;else i=1;else i=j;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[l>>2]|0)|0,0,c[s>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[s>>2]|0);i=b[o>>1]&-16897;b[o>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[o>>1]|0}while(0);i=i&-4097;b[o>>1]=i}if((i&514)==2)Jg(s)|0;q=q+1|0}while((q|0)<(c[r>>2]|0))}if(a[zf>>0]|0){l=p;j=m;i=zf;oa=3898;break a}if(a[qf>>0]&4)Za[c[of>>2]&127](4,c[pf>>2]|0,f,0)|0;c[xf>>2]=((p-m|0)/20|0)+1;o=k;l=100;oa=3884;break a}case 518:{oa=3891;break}case 599:{c[Ce>>2]=32306;c[Ce+4>>2]=86318;c[Ce+8>>2]=31517;Db(11,32001,Ce);i=11;oa=601;break}case 602:{l=p;j=h;i=zf;oa=3892;break a}case 717:{c[De>>2]=32306;c[De+4>>2]=68229;c[De+8>>2]=31517;Db(11,32001,De);o=k;q=h;h=11;i=zf;break a}case 720:{c[Ee>>2]=32306;c[Ee+4>>2]=68229;c[Ee+8>>2]=31517;Db(11,32001,Ee);o=k;q=h;h=11;i=zf;break a}case 730:{Ag(f,34243,Fe);o=k;q=h;h=5;i=zf;break a}case 774:{c[Ge>>2]=A;Ag(f,34294,Ge);o=k;q=h;h=1;i=zf;break a}case 776:{Ag(f,34316,He);o=k;q=h;h=5;i=zf;break a}case 780:{c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,Ie);o=k;l=1;oa=3884;break a}case 782:{c[xf>>2]=(p-m|0)/20|0;a[gd>>0]=0;c[Bf>>2]=5;o=k;l=5;oa=3884;break a}case 922:{j=c[p+4>>2]|0;i=c[p+8>>2]|0;if((j|0)==(d[gd>>0]|0)){Ag(f,(j|0)==0?34425:(i|0)==0?34516:34473,ef);o=k;q=h;h=1;i=zf;break a}do if(!i){if(j|0?(c[bd>>2]|0)>0:0){Ag(f,34370,cf);o=k;q=h;h=5;i=zf;break a}yf=c[f>>2]|0;zf=yf+464|0;yf=yf+472|0;zf=Sv(c[yf>>2]|0,c[yf+4>>2]|0,c[zf>>2]|0,c[zf+4>>2]|0)|0;yf=L()|0;if((yf|0)>0|(yf|0)==0&zf>>>0>0){c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,df);o=k;l=1;oa=3884;break a}else{i=j&255;break}}else{rg(Cf,516);i=1}while(0);a[gd>>0]=i;if((pg(f)|0)==5){c[xf>>2]=(p-m|0)/20|0;a[gd>>0]=1-j;c[Bf>>2]=5;o=k;l=5;oa=3884;break a}i=c[qd>>2]|0;if(i|0)do{c[qd>>2]=c[i+24>>2];do if(!(c[Ze>>2]|0)){zf=i;if((c[_e>>2]|0)>>>0<=zf>>>0?(c[$e>>2]|0)>>>0>zf>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{zf=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-zf;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(Cf,i);while(0);i=c[qd>>2]|0}while((i|0)!=0);c[Gd>>2]=0;c[Fd>>2]=0;a[Id>>0]=0;o=k;l=(c[Bf>>2]|0)==0?101:1;oa=3884;break a}case 950:{if((l&255|0)==5){c[xf>>2]=(p-m|0)/20|0;c[Bf>>2]=l;o=k;oa=3884;break a}else oa=1017;break}case 986:{i=c[mf>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}yf=i;if((c[_e>>2]|0)>>>0<=yf>>>0?(c[$e>>2]|0)>>>0>yf>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{yf=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-yf;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=1003;else i=0;else{if((e[Xc>>1]|0)>=28){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=1004;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=1004;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=1003}while(0);if((oa|0)==1003){i=_d(Cf,28,0)|0;oa=1004}if((oa|0)==1004)if(!i)i=0;else{ea=i;l=34557;fa=ea+28|0;do{a[ea>>0]=a[l>>0]|0;ea=ea+1|0;l=l+1|0}while((ea|0)<(fa|0))}c[mf>>2]=i;j=c[uf>>2]|0;i=c[z>>2]|0;l=c[j+(i<<4)+12>>2]|0;_a:do if((c[l>>2]|0)!=(c[rf>>2]|0)){if((i|0)>-1){yf=l+78|0;b[yf>>1]=b[yf>>1]|8;yf=(c[j+28>>2]|0)+78|0;b[yf>>1]=b[yf>>1]|8;c[hf>>2]=c[hf>>2]&-17}if((c[jf>>2]|0)==0?(tf=c[sf>>2]|0,(tf|0)>0):0){i=0;l=tf;while(1){j=c[j+(i<<4)+12>>2]|0;if(!(b[j+78>>1]&8))j=l;else{dh(j);j=c[sf>>2]|0}i=i+1|0;if((i|0)>=(j|0))break _a;l=j;j=c[uf>>2]|0}}}while(0);l=(d[vf>>0]|d[vf+1>>0]<<8)&-4|1;a[vf>>0]=l;a[vf+1>>0]=l>>8;l=17;oa=1017;break}case 1135:{c[s+40>>2]=0;o=k;q=h;h=7;i=zf;break a}case 1213:{o=k;q=h;h=i;i=zf;break a}case 1268:{l=p;j=h;i=zf;oa=3892;break a}case 1270:{o=k;q=h;h=i;i=zf;break a}case 1289:{c[Je>>2]=32306;c[Je+4>>2]=87969;c[Je+8>>2]=31517;Db(11,32001,Je);o=k;q=h;h=11;i=zf;break a}case 1328:{o=k;q=h;h=i;i=zf;break a}case 1345:{o=k;q=h;h=i;i=zf;break a}case 1382:{c[r>>2]=0;o=k;q=h;h=7;i=zf;break a}case 1481:{o=k;q=h;h=i;i=zf;break a}case 1492:{o=k;q=h;h=r;i=zf;break a}case 1519:{o=k;q=h;h=i;i=zf;break a}case 2145:{o=k;q=h;h=i;i=zf;break a}case 2221:{o=k;q=h;h=7;i=zf;break a}case 2226:{o=k;q=h;h=i;i=zf;break a}case 2253:{if(!((b[jb>>1]&9216)==0&(c[lb>>2]|0)==0))Cg(Hd);c[Ke>>2]=32306;c[Ke+4>>2]=81024;c[Ke+8>>2]=31517;Db(11,32001,Ke);i=11;oa=2256;break}case 2267:{c[Le>>2]=32306;c[Le+4>>2]=81057;c[Le+8>>2]=31517;Db(11,32001,Le);i=11;oa=2274;break}case 2280:{a[Jd>>0]=2;o=k;q=h;h=6;i=zf;break a}case 2282:{c[Me>>2]=32306;c[Me+4>>2]=72453;c[Me+8>>2]=31517;Db(11,32001,Me);i=0;j=11;oa=2353;break}case 2286:{i=0;j=l;oa=2353;break}case 2301:{if(r){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);i=0;oa=2353;break}else{oa=c[i+20>>2]|0;yf=oa+120|0;c[yf>>2]=(c[yf>>2]|0)+-1;oa=oa+136|0;c[i+16>>2]=c[oa>>2];c[oa>>2]=i;i=0;oa=2353;break}}else{i=0;oa=2353}break}case 2319:{i=0;j=l;oa=2353;break}case 2329:{i=0;j=l;oa=2353;break}case 2406:{o=k;q=h;h=l;i=zf;break a}case 2424:{$b(Cf);l=p;j=h;i=zf;oa=3892;break a}case 2425:{$b(Cf);o=k;q=h;h=i;i=zf;break a}case 2968:{Ag(f,34663,Xe);o=k;q=h;h=1;i=zf;break a}case 3073:{do if(o){i=b[o+8>>1]|0;if((i&514)==514?(a[o+10>>0]|0)==1:0){i=c[o+16>>2]|0;break}if(!(i&1))i=Gg(o,1)|0;else i=0}else i=0;while(0);c[bf>>2]=i;Ag(f,31408,bf);o=k;q=h;h=l;i=zf;break a}case 3094:{o=k;q=h;h=i;i=zf;break a}case 3115:{c[te>>2]=w?34752:34757;Ag(f,34700,te);o=k;q=h;h=1;i=zf;break a}case 3182:{c[ue>>2]=32306;c[ue+4>>2]=67051;c[ue+8>>2]=31517;Db(11,32001,ue);o=k;q=h;h=11;i=zf;break a}case 3215:{if(t<<24>>24==2){oa=o+22|0;b[oa>>1]=b[oa>>1]|128;oa=3236}else oa=3236;break}case 3400:{j=l;i=c[ad>>2]|0;oa=3401;break}case 3458:{o=k;q=h;h=i;i=zf;break a}case 3459:{Wa[c[x+28>>2]&127](c[rf>>2]|0)|0;l=p;j=h;i=zf;oa=3892;break a}case 3576:{oa=3891;break}case 3731:{i=i&65535;oa=3732;break}case 3733:{c[rc>>2]=(c[rc>>2]|0)+1;i=12;j=x;break}case 3844:{o=k;q=-1;m=l;h=9;i=zf;break a}case 3845:{o=k;q=h;h=i;i=zf;break a}case 3846:{o=k;q=h;h=i;i=zf;break a}case 3847:{o=k;q=h;h=i;i=zf;break a}case 3848:{o=k;q=h;h=i;i=zf;break a}case 3849:{o=k;q=h;h=i;i=zf;break a}case 3850:{o=k;q=h;h=i;i=zf;break a}case 3851:{o=k;q=h;h=i;i=zf;break a}case 3852:{o=k;q=h;h=i;i=zf;break a}case 3853:{o=k;q=h;h=i;i=zf;break a}case 3854:{o=k;q=h;h=r;i=zf;break a}case 3855:{o=k;q=h;h=i;i=zf;break a}case 3900:{Ra=Hf;return h|0}}switch(oa|0){case 44:if((pg(f)|0)==5){c[Bf>>2]=5;o=k;l=5;oa=3884;break a}else{o=k;l=(c[Bf>>2]|0)==0?101:1;oa=3884;break a}case 601:{o=k;q=h;h=i;i=zf;break a}case 1017:{o=k;q=h;h=l;i=zf;break a}case 2256:{o=k;q=h;h=i;i=zf;break a}case 2274:{o=k;q=h;h=i;i=zf;break a}case 2353:{b[B>>1]=4;o=A;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;o=k;q=h;h=j;i=zf;break a}case 3236:{c[ve>>2]=c[p+16>>2];Ag(f,34764,ve);o=k;q=h;h=262;i=zf;break a}case 3401:{c[ad>>2]=i+-1;o=k;q=h;h=j;i=zf;break a}case 3732:{a[Jd>>0]=i;i=12;j=x;break}case 3891:{Ag(f,31223,Be);o=k;q=h;h=18;i=zf;break a}}switch(i&15){case 12:{o=k;q=h;h=j;i=zf;break a}case 2:{l=p;j=h;i=zf;oa=3892;break a}default:h=0}Ra=Hf;return h|0}else{p=q;j=0;k=0;l=q;i=Cf+81|0}while(0);zf=(a[i>>0]|0)==0?9:7;c[Bf>>2]=zf;c[nf>>2]=c[22960+(zf<<2)>>2];Ag(f,31408,nf);n=j;o=k;q=h;m=l;h=zf}while(0);if((oa|0)==3892)if((a[i>>0]|0)==0?(a[Cf+82>>0]|0)==0:0){a[i>>0]=1;if((c[Cf+180>>2]|0)>0)c[Cf+264>>2]=1;h=Cf+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Cf+236>>2]|0;if(h){c[h+12>>2]=7;h=j;j=m;oa=3898}else{h=j;j=m;oa=3898}}else{h=j;j=m;oa=3898}if((oa|0)==3898){Ag(f,34831,yf);o=k;q=h;m=j;p=l;h=7}$a:while(1){if((oa|0)==3884){if(n>>>0<h>>>0)break;j=Cf+328|0;k=Cf+324|0;while(1){i=c[Af>>2]|0;if(!i)break $a;zf=c[j>>2]|0;h=zf+h|0;if(Wa[i&127](c[k>>2]|0)|0)break;if(n>>>0<h>>>0)break $a}q=-1;h=9;i=Cf+81|0}k=(a[i>>0]|0)==0?h:7;j=f+124|0;if((c[j>>2]|0)==0&(k|0)!=3082){switch(k|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=k&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}c[Ef>>2]=h;Ag(f,31408,Ef)}c[Bf>>2]=k;if((k|0)==3082){yf=c[f+188>>2]|0;zf=c[j>>2]|0;c[Gf>>2]=(p-m|0)/20|0;c[Gf+4>>2]=yf;c[Gf+8>>2]=zf;Db(3082,34799,Gf);pg(f)|0;if((a[i>>0]|0)==0?(a[Cf+82>>0]|0)==0:0){a[i>>0]=1;if((c[Cf+180>>2]|0)>0)c[Cf+264>>2]=1;h=Cf+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Cf+236>>2]|0;if(h|0)c[h+12>>2]=7}}else{if((k&251|4|0)==14){h=c[Cf>>2]|0;i=c[h+68>>2]|0;if(!i)h=0;else h=Ya[i&127](h,0,0)|0;c[Cf+72>>2]=h}yf=c[f+188>>2]|0;zf=c[j>>2]|0;c[Ff>>2]=(p-m|0)/20|0;c[Ff+4>>2]=yf;c[Ff+8>>2]=zf;Db(k,34799,Ff);pg(f)|0}if(!(o<<24>>24)){o=0;h=q;l=1;oa=3884;continue}k=Cf+16|0;i=c[k>>2]|0;zf=(c[i+((o&255)+-1<<4)+12>>2]|0)+78|0;b[zf>>1]=b[zf>>1]|8;zf=(c[i+28>>2]|0)+78|0;b[zf>>1]=b[zf>>1]|8;zf=Cf+24|0;c[zf>>2]=c[zf>>2]&-17;if(c[Cf+56>>2]|0){h=q;l=1;oa=3884;continue}l=Cf+20|0;j=c[l>>2]|0;if((j|0)<=0){h=q;l=1;oa=3884;continue}h=0;while(1){i=c[i+(h<<4)+12>>2]|0;if(b[i+78>>1]&8){dh(i);j=c[l>>2]|0}h=h+1|0;if((h|0)>=(j|0)){h=q;l=1;oa=3884;continue $a}i=c[k>>2]|0}}Gf=f+176|0;c[Gf>>2]=(c[Gf>>2]|0)+n;Gf=l;Ra=Hf;return Gf|0}\nfunction $i(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,fd=0,gd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0;ud=Ra;Ra=Ra+1392|0;Qc=ud+1352|0;Nc=ud+1344|0;Mc=ud+1328|0;Lc=ud+1320|0;Kc=ud+1304|0;mb=ud+1296|0;Cc=ud+1288|0;Bc=ud+1280|0;ic=ud+1272|0;Eb=ud+1264|0;na=ud+1256|0;bc=ud+1248|0;_b=ud+1232|0;ac=ud+1216|0;$b=ud+1200|0;Xb=ud+1176|0;Wb=ud+1136|0;Ub=ud+1128|0;Db=ud+1120|0;Bb=ud+1112|0;Ma=ud+1104|0;kc=ud+1096|0;Ja=ud+1088|0;Ia=ud+1080|0;Zb=ud+1056|0;Ab=ud+1048|0;xb=ud+1040|0;lb=ud+1032|0;kb=ud+1024|0;jb=ud+1016|0;fb=ud+1008|0;eb=ud+1e3|0;Vc=ud+992|0;Jc=ud+976|0;Uc=ud+960|0;Tc=ud+944|0;wc=ud+920|0;vc=ud+904|0;uc=ud+872|0;tc=ud+840|0;Ib=ud+832|0;Hb=ud+824|0;wb=ud+816|0;ib=ud+808|0;hb=ud+800|0;dc=ud+792|0;jc=ud+784|0;Pc=ud+776|0;Va=ud+768|0;Qa=ud+760|0;Yb=ud+752|0;Vb=ud+744|0;cc=ud+736|0;qc=ud+728|0;o=ud+720|0;n=ud+712|0;i=ud+704|0;od=ud+696|0;nd=ud+688|0;md=ud+680|0;ld=ud+672|0;jd=ud+664|0;id=ud+648|0;gd=ud+640|0;$c=ud+632|0;Yc=ud+624|0;Fc=ud+616|0;Ec=ud+608|0;hc=ud+600|0;bb=ud+592|0;_a=ud+584|0;Za=ud+576|0;Xc=ud+568|0;Wc=ud+544|0;mc=ud+536|0;Ic=ud+528|0;Hc=ud+512|0;Gc=ud+504|0;Oc=ud;pc=ud+496|0;Tb=ud+488|0;Sb=ud+480|0;Mb=ud+472|0;Lb=ud+464|0;Ua=ud+456|0;Ta=ud+448|0;t=ud+440|0;H=ud+432|0;ka=ud+424|0;s=ud+416|0;_=ud+408|0;M=ud+400|0;w=ud+392|0;$=ud+384|0;va=ud+376|0;ua=ud+368|0;ta=ud+360|0;sa=ud+352|0;v=ud+344|0;X=ud+336|0;K=ud+328|0;Fa=ud+320|0;ra=ud+312|0;ja=ud+304|0;u=ud+296|0;qa=ud+288|0;ia=ud+280|0;J=ud+272|0;yc=ud+264|0;Xa=ud+256|0;ha=ud+248|0;Na=ud+240|0;pa=ud+232|0;oa=ud+224|0;ma=ud+216|0;Ka=ud+208|0;Ha=ud+200|0;la=ud+192|0;nc=ud+184|0;U=ud+176|0;gb=ud+168|0;vb=ud+160|0;ub=ud+152|0;tb=ud+144|0;sb=ud+136|0;rb=ud+128|0;yb=ud+120|0;W=ud+112|0;V=ud+104|0;I=ud+96|0;F=ud+88|0;T=ud+80|0;qd=ud+48|0;_c=ud+24|0;Qb=ud+1368|0;td=c[f>>2]|0;sd=a[16752+g>>0]|0;if(sd<<24>>24==0?td>>>0>=(c[f+1208>>2]|0)>>>0:0){l=f+4|0;m=c[l>>2]|0;i=f+8|0;if(td>>>0>i>>>0?(c[f>>2]=td+-12,aj(m,b[td+2>>1]|0,td+4|0),O=c[f>>2]|0,O>>>0>i>>>0):0){k=O;do{td=c[l>>2]|0;c[f>>2]=k+-12;aj(td,b[k+2>>1]|0,k+4|0);k=c[f>>2]|0}while(k>>>0>i>>>0)}cd(m,38790,T);c[l>>2]=m;f=0;Ra=ud;return f|0}a:do switch(g|0){case 0:{a[j+199>>0]=1;break}case 1:{a[j+199>>0]=2;break}case 2:{w=c[j>>2]|0;if(!(a[j+18>>0]|0)){A=w+81|0;if((a[A>>0]|0)==0?(kd=j+36|0,(c[kd>>2]|0)==0):0){z=j+8|0;k=c[z>>2]|0;if(!k){if((c[j+116>>2]|0)==0?(b[w+76>>1]&8)==0:0)a[j+23>>0]=1;b:do if(!(c[w+272>>2]|0)){do if((e[w+276>>1]|0)>=224){k=w+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];qd=w+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break b}k=w+296|0;l=c[k>>2]|0;if(!l){k=w+292|0;break}else{c[k>>2]=c[l>>2];qd=w+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break b}}else k=w+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=29}else rd=29;while(0);if((rd|0)==29)l=_d(w,224,0)|0;if(l|0){I=l+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[l>>2]=w;k=w+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=j;c[z>>2]=l;Di(l,61,0,1,0)|0;rd=34}}else{l=k;rd=34}if((rd|0)==34){x=l+108|0;k=c[x>>2]|0;y=l+112|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;I=c[l+104>>2]|0;a[I+(k*20|0)>>0]=69;I=I+(k*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}else Di(l,69,0,0,0)|0;do if(!(a[A>>0]|0)){v=j+84|0;i=c[v>>2]|0;if(!i){if(!(c[j+68>>2]|0))break;k=c[x>>2]|0;if(!(a[(c[l>>2]|0)+81>>0]|0))m=c[l+104>>2]|0;else m=59308}else{k=c[x>>2]|0;if(!(a[(c[l>>2]|0)+81>>0]|0))m=c[l+104>>2]|0;else m=59308}c[m+8>>2]=k;o=w+20|0;c:do if((c[o>>2]|0)>0){p=l+152|0;q=w+16|0;r=j+80|0;s=l+104|0;t=l+156|0;u=w+165|0;k=0;while(1){m=1<<k;do if(m&i|0){c[p>>2]=c[p>>2]|m;if((k|0)!=1?a[(c[(c[(c[l>>2]|0)+16>>2]|0)+(k<<4)+4>>2]|0)+9>>0]|0:0)c[t>>2]=c[t>>2]|m;n=c[(c[q>>2]|0)+(k<<4)+12>>2]|0;i=(c[r>>2]&m|0)!=0&1;h=c[n>>2]|0;n=c[n+4>>2]|0;m=c[x>>2]|0;if((c[y>>2]|0)>(m|0)){c[x>>2]=m+1;qd=c[s>>2]|0;a[qd+(m*20|0)>>0]=2;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=k;c[qd+(m*20|0)+8>>2]=i;c[qd+(m*20|0)+12>>2]=h;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(l,2,k,i,h)|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){qd=c[s>>2]|0;a[qd+(m*20|0)+1>>0]=-3;c[qd+(m*20|0)+16>>2]=n}if(a[u>>0]|0)break;m=c[x>>2]|0;if((m|0)<=0)break;b[(c[s>>2]|0)+((m+-1|0)*20|0)+2>>1]=1}while(0);k=k+1|0;if((k|0)>=(c[o>>2]|0))break c;i=c[v>>2]|0}}while(0);o=j+204|0;if((c[o>>2]|0)>0){p=j+252|0;q=l+104|0;n=0;do{k=c[(c[(c[p>>2]|0)+(n<<2)>>2]|0)+64>>2]|0;d:do if(!k)k=0;else while(1){if((c[k>>2]|0)==(w|0))break d;k=c[k+24>>2]|0;if(!k){k=0;break}}while(0);m=c[x>>2]|0;if((c[y>>2]|0)>(m|0)){c[x>>2]=m+1;I=c[q>>2]|0;a[I+(m*20|0)>>0]=-96;I=I+(m*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}else m=Di(l,160,0,0,0)|0;do if(!(a[(c[l>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[x>>2]|0)+-1|0;i=c[q>>2]|0;h=i+(m*20|0)+1|0;if(a[h>>0]|0){Ei(l,i+(m*20|0)|0,k,-12);break}if(!k)break;c[i+(m*20|0)+16>>2]=k;a[h>>0]=-12;qd=k+12|0;c[qd>>2]=(c[qd>>2]|0)+1}while(0);n=n+1|0}while((n|0)<(c[o>>2]|0))}c[o>>2]=0;k=c[z>>2]|0;e:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;f:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=91;else{k=0;break e}else{do if((e[i+276>>1]|0)>=224){m=i+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];qd=i+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break f}m=i+296|0;k=c[m>>2]|0;if(!k){k=i+292|0;break}else{c[m>>2]=c[k>>2];qd=i+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break f}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=91}while(0);if((rd|0)==91)k=_d(i,224,0)|0;if(!k)k=0;else{I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=i;m=i+4|0;i=c[m>>2]|0;if(i|0)c[i+4>>2]=k;c[k+8>>2]=i;c[k+4>>2]=0;c[m>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[z>>2]=k;Di(k,61,0,1,0)|0}}while(0);p=j+104|0;if((c[p>>2]|0)>0){q=j+108|0;r=k+108|0;s=k+112|0;t=k+104|0;o=0;do{u=c[q>>2]|0;i=c[u+(o<<4)>>2]|0;h=c[u+(o<<4)+4>>2]|0;n=d[u+(o<<4)+8>>0]|0;u=c[u+(o<<4)+12>>2]|0;m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;qd=c[t>>2]|0;a[qd+(m*20|0)>>0]=-97;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=i;c[qd+(m*20|0)+8>>2]=h;c[qd+(m*20|0)+12>>2]=n;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(k,159,i,h,n)|0;do if(!(a[(c[k>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;i=c[t>>2]|0;h=i+(m*20|0)+1|0;if(a[h>>0]|0){Ei(k,i+(m*20|0)|0,u,-1);break}if(!u)break;c[i+(m*20|0)+16>>2]=u;a[h>>0]=-1}while(0);o=o+1|0}while((o|0)<(c[p>>2]|0))}o=c[z>>2]|0;k=c[j+112>>2]|0;g:do if(k|0){p=(c[j>>2]|0)+16|0;q=o+108|0;r=o+112|0;s=o+104|0;t=j+40|0;do{n=c[k+8>>2]|0;h=c[k+12>>2]|0;Gj(j,0,n,c[(c[(c[p>>2]|0)+(n<<4)+12>>2]|0)+72>>2]|0,108);n=h+-1|0;i=c[c[k+4>>2]>>2]|0;m=c[q>>2]|0;if((c[r>>2]|0)>(m|0)){c[q>>2]=m+1;qd=c[s>>2]|0;a[qd+(m*20|0)>>0]=110;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=0;c[qd+(m*20|0)+8>>2]=n;c[qd+(m*20|0)+12>>2]=0;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(o,110,0,n,0)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[q>>2]|0)+-1|0;Ei(o,(c[s>>2]|0)+(m*20|0)|0,i,0)}m=ed(o,12,17904)|0;if(!m)break g;c[m+8>>2]=h;qd=h+2|0;c[m+12>>2]=qd;c[m+52>>2]=h;c[m+64>>2]=n;c[m+72>>2]=h;b[m+62>>1]=16;c[m+88>>2]=h+1;c[m+112>>2]=h;c[m+124>>2]=h;c[m+148>>2]=qd;c[m+144>>2]=h;c[m+208>>2]=h;if(!(c[t>>2]|0))c[t>>2]=1;k=c[k>>2]|0}while((k|0)!=0)}while(0);o=c[j+68>>2]|0;if(o|0?(a[j+23>>0]=0,(c[o>>2]|0)>0):0){n=0;do{k=c[o+4+(n*20|0)>>2]|0;p=c[o+4+(n*20|0)+16>>2]|0;do if(k){if((a[k>>0]|0)!=-88){h=Jj(j,k,p)|0;rd=132;break}h=c[z>>2]|0;k=c[k+28>>2]|0;m=h+108|0;i=c[m>>2]|0;if((c[h+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[h+104>>2]|0;a[qd+(i*20|0)>>0]=78;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=k;c[qd+(i*20|0)+8>>2]=p;c[qd+(i*20|0)+12>>2]=0;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0;break}else{Di(h,78,k,p,0)|0;break}}else{h=Jj(j,0,p)|0;rd=132}while(0);do if((rd|0)==132){rd=0;if((h|0)==(p|0))break;k=c[z>>2]|0;if(!k)break;m=k+108|0;i=c[m>>2]|0;if((c[k+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[k+104>>2]|0;a[qd+(i*20|0)>>0]=79;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=h;c[qd+(i*20|0)+8>>2]=p;c[qd+(i*20|0)+12>>2]=0;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0;break}else{Di(k,79,h,p,0)|0;break}}while(0);n=n+1|0}while((n|0)<(c[o>>2]|0))}k=c[x>>2]|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;rd=c[l+104>>2]|0;a[rd+(k*20|0)>>0]=11;b[rd+(k*20|0)+2>>1]=0;c[rd+(k*20|0)+4>>2]=0;c[rd+(k*20|0)+8>>2]=1;c[rd+(k*20|0)+12>>2]=0;c[rd+(k*20|0)+16>>2]=0;a[rd+(k*20|0)+1>>0]=0;break}else{Di(l,11,0,1,0)|0;break}}while(0);if((c[kd>>2]|0)==0?(a[A>>0]|0)==0:0){hd(l,j);c[j+12>>2]=101;break a}}c[j+12>>2]=1;break a}k=j+12|0;if(!(c[k>>2]|0))c[k>>2]=1}break}case 3:{o=c[td+-8>>2]|0;n=c[j>>2]|0;do if(((a[n+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(z=c[n+312>>2]|0,z|0):0){k=$a[z&127](c[n+316>>2]|0,22,36223,0,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,F);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,I);c[j+12>>2]=1;break a}}while(0);h=j+8|0;k=c[h>>2]|0;if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;h:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=167;else break a;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break h}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break h}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=167}while(0);if((rd|0)==167)m=_d(i,224,0)|0;if(!m)break a;I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;r=m}else r=k;if((o|0)==7){k=r+108|0;l=c[k>>2]|0;if((c[r+112>>2]|0)>(l|0)){c[k>>2]=l+1;I=c[r+104>>2]|0;a[I+(l*20|0)>>0]=1;I=I+(l*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));break a}else{Di(r,1,0,0,0)|0;break a}}q=n+20|0;if((c[q>>2]|0)>0){h=(o|0)==9?2:1;m=r+108|0;k=r+112|0;n=r+104|0;o=r+152|0;p=r+156|0;i=0;do{l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;j=c[n>>2]|0;a[j+(l*20|0)>>0]=2;b[j+(l*20|0)+2>>1]=0;c[j+(l*20|0)+4>>2]=i;c[j+(l*20|0)+8>>2]=h;c[j+(l*20|0)+12>>2]=0;c[j+(l*20|0)+16>>2]=0;a[j+(l*20|0)+1>>0]=0}else Di(r,2,i,h,0)|0;l=1<<i;c[o>>2]=c[o>>2]|l;if((i|0)!=1?a[(c[(c[(c[r>>2]|0)+16>>2]|0)+(i<<4)+4>>2]|0)+9>>0]|0:0)c[p>>2]=c[p>>2]|l;i=i+1|0}while((i|0)<(c[q>>2]|0))}else{m=r+108|0;k=r+112|0}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;I=c[r+104>>2]|0;a[I+(l*20|0)>>0]=1;I=I+(l*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));break a}else{Di(r,1,0,0,0)|0;break a}}case 4:{c[td+16>>2]=7;break}case 300:case 7:case 6:case 5:{c[td+4>>2]=e[td+2>>1];break}case 9:case 8:{k=(b[td+-10>>1]|0)==12;h=k&1;k=k?39254:39263;l=c[j>>2]|0;do if(((a[l+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(S=c[l+312>>2]|0,S|0):0){k=$a[S&127](c[l+316>>2]|0,22,k,0,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,V);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,W);c[j+12>>2]=1;break a}}while(0);i=j+8|0;k=c[i>>2]|0;if(!k){m=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;i:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=213;else break a;else{do if((e[m+276>>1]|0)>=224){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break i}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break i}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=213}while(0);if((rd|0)==213)k=_d(m,224,0)|0;if(!k)break a;I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=m;l=m+4|0;m=c[l>>2]|0;if(m|0)c[m+4>>2]=k;c[k+8>>2]=m;c[k+4>>2]=0;c[l>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[i>>2]=k;Di(k,61,0,1,0)|0}l=k+108|0;m=c[l>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[k+104>>2]|0;a[j+(m*20|0)>>0]=1;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=1;c[j+(m*20|0)+8>>2]=h;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break a}else{Di(k,1,1,h,0)|0;break a}}case 10:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;j:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;k:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=236;else break j;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break k}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break k}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=236}while(0);if((rd|0)==236)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=241}}else{i=k;rd=241}while(0);l:do if((rd|0)==241){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(pb=c[k+312>>2]|0,pb|0):0){k=$a[pb&127](c[k+316>>2]|0,32,36223,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,yb);c[j+12>>2]=23;break l}if((k|2|0)==2)if(!k)break;else break l;else{cd(j,39231,rb);c[j+12>>2]=1;break l}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=(c[i+104>>2]|0)+(k*20|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0}else k=Di(i,0,0,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 11:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;m:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;n:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=291;else break m;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break n}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break n}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=291}while(0);if((rd|0)==291)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=296}}else{i=k;rd=296}while(0);o:do if((rd|0)==296){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(qb=c[k+312>>2]|0,qb|0):0){k=$a[qb&127](c[k+316>>2]|0,32,39270,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,sb);c[j+12>>2]=23;break o}if((k|2|0)==2)if(!k)break;else break o;else{cd(j,39231,tb);c[j+12>>2]=1;break o}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=c[i+104>>2]|0;a[j+(k*20|0)>>0]=0;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=1;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(i,0,1,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 12:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;p:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;q:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=346;else break p;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break q}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break q}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=346}while(0);if((rd|0)==346)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=351}}else{i=k;rd=351}while(0);r:do if((rd|0)==351){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(nb=c[k+312>>2]|0,nb|0):0){k=$a[nb&127](c[k+316>>2]|0,32,39254,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,ub);c[j+12>>2]=23;break r}if((k|2|0)==2)if(!k)break;else break r;else{cd(j,39231,vb);c[j+12>>2]=1;break r}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=c[i+104>>2]|0;a[j+(k*20|0)>>0]=0;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=2;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(i,0,2,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 13:{bj(j,td+-8|0,td+4|0,c[td+-44>>2]|0,0,0,c[td+-20>>2]|0);break}case 14:{rd=j+24|0;a[rd>>0]=(a[rd>>0]|0)+1<<24>>24;j=(c[j>>2]|0)+272|0;c[j>>2]=(c[j>>2]|0)+1;break}case 226:case 93:case 76:case 67:case 57:case 42:case 21:case 18:case 15:{c[td+16>>2]=0;break}case 16:{c[td+-20>>2]=1;break}case 43:case 17:{c[td+4>>2]=1;break}case 19:{cj(j,td+-20|0,td+-8|0,c[td+4>>2]&255,0);break}case 20:{k=td+4|0;cj(j,0,0,0,c[k>>2]|0);k=c[k>>2]|0;if(k|0)pi(c[j>>2]|0,k,1);break}case 22:{i=c[td+8>>2]|0;k=c[td+4>>2]|0;do if((i|0)==5)if(!k)k=0;else{l=a[k>>0]|0;do if(!(l<<24>>24)){l=38132;rd=397}else{qd=l&255;l=208+qd|0;if((qd|32|0)==114){l=a[k+1>>0]|0;if(!(l<<24>>24)){l=38133;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==111){l=a[k+2>>0]|0;if(!(l<<24>>24)){l=38134;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==119){l=a[k+3>>0]|0;if(!(l<<24>>24)){l=38135;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==105){l=a[k+4>>0]|0;if(!(l<<24>>24)){l=38136;rd=397;break}l=l&255;if((l|32|0)==100)break;else{m=100;l=208+l|0}}else m=105}else m=119}else m=111}else m=114;cb=d[l>>0]|0;rd=401}while(0);if((rd|0)==397){cb=0;m=a[208+(d[l>>0]|0)>>0]|0;rd=401}if((rd|0)==401?(cb|0)!=(m&255|0):0)break;c[td+-8>>2]=96;break a}while(0);c[td+-8>>2]=0;c[gb>>2]=i;c[gb+4>>2]=k;cd(j,38466,gb);break}case 23:{h=td+-8|0;q=c[j>>2]|0;n=c[j+228>>2]|0;if(n|0){t=n+42|0;if((c[q+116>>2]|0)<=(b[t>>1]|0)){c[U>>2]=c[n>>2];cd(j,38221,U);break a}i=td+-4|0;s=td+8|0;m=(c[i>>2]|0)+2+(c[s>>2]|0)|0;p=q+272|0;s:do if(c[p>>2]|0)if(!(a[q+81>>0]|0))rd=417;else break a;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){k=q+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=q+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break s}k=q+296|0;l=c[k>>2]|0;if(!l){k=q+292|0;break}else{c[k>>2]=c[l>>2];r=q+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break s}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=417}while(0);if((rd|0)==417)r=_d(q,m,0)|0;if(r|0){t:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;u:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=443;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){pd=c[14978]|0;od=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;nd=L()|0;c[14768]=((nd|0)<0|(nd|0)==0&od>>>0<=pd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break t;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break t}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=443;break u}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=443;break u}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=443}while(0);if((rd|0)==443)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=r;nd=h;od=c[nd+4>>2]|0;pd=l;c[pd>>2]=c[nd>>2];c[pd+4>>2]=od;pd=j+272|0;c[k+12>>2]=c[pd>>2];c[pd>>2]=k}while(0);ew(r|0,c[h>>2]|0,c[i>>2]|0)|0;a[r+(c[i>>2]|0)>>0]=0;k=a[r>>0]|0;if((a[880+(k&255)>>0]|0)<0){i=k<<24>>24==91?93:k;m=0;k=1;while(1){l=a[r+k>>0]|0;if(l<<24>>24==i<<24>>24){k=k+1|0;l=r+m|0;if((a[r+k>>0]|0)!=i<<24>>24)break;a[l>>0]=i}else a[r+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0}pd=b[t>>1]|0;k=pd<<16>>16;o=n+4|0;v:do if(pd<<16>>16>0){n=c[o>>2]|0;h=0;while(1){m=c[n+(h<<4)>>2]|0;if(m|0){pd=a[r>>0]|0;l=(d[208+(pd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(pd<<24>>24==0|(l|0)!=0)){i=r;do{i=i+1|0;m=m+1|0;pd=a[i>>0]|0;l=(d[208+(pd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(l|0)!=0))}if(!l)break}h=h+1|0;if((h|0)>=(k|0))break v}c[nc>>2]=r;cd(j,41735,nc);if(c[q+480>>2]|0){Xd(q,r);break a}j=r;if((c[q+304>>2]|0)>>>0<=j>>>0?(c[q+308>>2]|0)>>>0>j>>>0:0){j=q+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break a}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break a}}while(0);do if(!(k&7)){l=c[o>>2]|0;m=(k<<4)+128|0;w:do if(!l){if(c[p>>2]|0){if(a[q+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){k=q+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];sc=q+284|0;c[sc>>2]=(c[sc>>2]|0)+1;sc=l;rd=488;break w}k=q+296|0;l=c[k>>2]|0;if(!l){k=q+292|0;break}else{c[k>>2]=c[l>>2];sc=q+284|0;c[sc>>2]=(c[sc>>2]|0)+1;sc=l;rd=488;break w}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}sc=_d(q,m,0)|0;rd=488}else{rd=l;if((c[q+304>>2]|0)>>>0<=rd>>>0?(c[q+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){rd=498;break}sc=Zd(q,l,m,0)|0;rd=488;break}sc=Zd(q,l,m,0)|0;rd=488}while(0);if((rd|0)==488?sc|0:0){l=sc;k=b[t>>1]|0;rd=498}if((rd|0)==498){c[o>>2]=l;q=k;p=l;break}if(c[q+480>>2]|0){Xd(q,r);break a}j=r;if((c[q+304>>2]|0)>>>0<=j>>>0?(c[q+308>>2]|0)>>>0>j>>>0:0){j=q+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break a}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break a}}else{q=k;p=c[o>>2]|0}while(0);o=p+(q<<4)|0;k=p+(q<<4)+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[o>>2]=r;k=c[s>>2]|0;if(!k){a[p+(q<<4)+13>>0]=65;a[p+(q<<4)+14>>0]=1}else{n=r+((Eu(r)|0)&1073741823)+1|0;ew(n|0,c[td+4>>2]|0,k|0)|0;a[n+(c[s>>2]|0)>>0]=0;k=a[n>>0]|0;if((a[880+(k&255)>>0]|0)<0){i=k<<24>>24==91?93:k;m=0;k=1;while(1){l=a[n+k>>0]|0;if(l<<24>>24==i<<24>>24){k=k+1|0;l=n+m|0;if((a[n+k>>0]|0)!=i<<24>>24)break;a[l>>0]=i}else a[n+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0;k=a[n>>0]|0}x:do if(!(k<<24>>24)){k=0;m=67}else{l=67;h=0;i=n;m=0;while(1){h=h<<8|d[208+(k&255)>>0];i=i+1|0;y:do if((h|0)<1685026146){if((h|0)<1667785074){switch(h|0){case 1651273570:break;default:{rd=521;break y}}switch(l<<24>>24){case 69:case 67:break;default:{rd=520;break y}}k=a[i>>0]|0;m=k<<24>>24==40?i:m;l=65;break}if((h|0)<1668050786)switch(h|0){case 1667785074:{k=i;l=66;rd=522;break y}default:{rd=521;break y}}switch(h|0){case 1668050786:break;default:{rd=521;break y}}k=m;l=66;rd=522}else{if((h|0)>=1919246700)if((h|0)<1952807028){switch(h|0){case 1919246700:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}else{rd=520;break}}else{switch(h|0){case 1952807028:break;default:{rd=521;break y}}k=m;l=66;rd=522;break}if((h|0)<1718382433){switch(h|0){case 1685026146:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}}else{switch(h|0){case 1718382433:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}}k=m;rd=522}while(0);if((rd|0)==520){k=m;rd=522}else if((rd|0)==521){rd=0;if((h&16777215|0)==6909556){k=m;m=68;break x}else{k=m;rd=522}}if((rd|0)==522){rd=0;m=k;k=a[i>>0]|0}if(!(k<<24>>24)){k=m;m=l;break}}}while(0);if(o|0){c[qd>>2]=0;z:do if(m<<24>>24<67){if(!k){c[qd>>2]=16;k=5;rd=533;break}l=a[k>>0]|0;if(l<<24>>24){while(1){if(((l&255)+-48|0)>>>0<10)break;k=k+1|0;l=a[k>>0]|0;if(!(l<<24>>24)){k=1;rd=533;break z}}ii(k,qd)|0;k=c[qd>>2]|0;if((k|0)<1016){k=((k|0)/4|0)+1|0;rd=533}else k=255}else{k=1;rd=533}}else{k=1;rd=533}while(0);a[p+(q<<4)+14>>0]=k}a[p+(q<<4)+13>>0]=m;rd=p+(q<<4)+15|0;a[rd>>0]=a[rd>>0]|4}b[t>>1]=(b[t>>1]|0)+1<<16>>16;c[j+76>>2]=0}}break}case 99:case 60:case 24:{c[td+20>>2]=0;c[td+16>>2]=0;break}case 25:{c[td+-28>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-32>>2]|0);break}case 26:{c[td+-52>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-56>>2]|0);break}case 27:{c[td+-4>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-8>>2]|0);break}case 28:{c[td+16>>2]=h;break}case 62:case 29:{qd=td+4|0;rd=c[qd+4>>2]|0;j=j+72|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 30:{dj(j,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 31:{dj(j,c[td+-8>>2]|0,(c[td+-20>>2]|0)+1|0,c[td+4>>2]|0);break}case 32:{dj(j,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 33:{rd=ej(j,165,c[td+-8>>2]|0,0)|0;dj(j,rd,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 34:{o=td+4|0;p=td+8|0;q=fj(j,110,c[o>>2]|0,c[p>>2]|0)|0;do if(q|0?(c[q+4>>2]&67108864|0)==0:0){l=c[q+8>>2]|0;n=a[l>>0]|0;h=d[208+(n&255)>>0]|0;k=h+-116|0;n=n<<24>>24==0;if(!(n|(k|0)!=0)){m=41806;i=l;do{i=i+1|0;m=m+1|0;rd=a[i>>0]|0;k=(d[208+(rd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(rd<<24>>24==0|(k|0)!=0))}if(k|0){k=h+-102|0;if(!(n|(k|0)!=0)){m=41811;do{l=l+1|0;m=m+1|0;rd=a[l>>0]|0;k=(d[208+(rd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(rd<<24>>24==0|(k|0)!=0))}if(k|0)break}a[q>>0]=-97}while(0);rd=c[o>>2]|0;dj(j,q,rd,rd+(c[p>>2]|0)|0);break}case 35:{i=c[td+4>>2]|0;m=c[j+228>>2]|0;if(((m|0?(aa=m+42|0,l=b[aa>>1]|0,l<<16>>16>=1):0)?(rd=c[m+4>>2]|0,j=(l<<16>>16)+-1|0,a[rd+(j<<4)+12>>0]=i,qd=m+36|0,c[qd>>2]=c[qd>>2]|512,a[rd+(j<<4)+15>>0]&8):0)?(k=c[m+8>>2]|0,k|0):0)while(1){if(((l<<16>>16)+-1|0)==(b[c[k+4>>2]>>1]|0)){j=k+55|0;rd=d[j>>0]|d[j+1>>0]<<8|8;a[j>>0]=rd;a[j+1>>0]=rd>>8}k=c[k+20>>2]|0;if(!k)break a;l=b[aa>>1]|0}break}case 36:{gj(j,0,c[td+-8>>2]|0,c[td+4>>2]|0,c[td+-20>>2]|0);break}case 37:{hj(j,0,0,0,0,c[td+4>>2]|0,0,0,0,0,1);break}case 38:{k=c[td+-8>>2]|0;l=c[j+228>>2]|0;m=c[j>>2]|0;if((l|0?(Ob=j+200|0,(a[Ob>>0]|0)!=1):0)?(b[(c[(c[(c[m+16>>2]|0)+(d[m+164>>0]<<4)+4>>2]|0)+4>>2]|0)+22>>1]&1)==0:0){o=l+24|0;n=nj(m,c[o>>2]|0,k)|0;c[o>>2]=n;o=c[j+76>>2]|0;if(!o)break a;s=j+72|0;if(!n)break a;p=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;q=c[s>>2]|0;A:do if(q){i=Sv(o|0,0,1,0)|0;h=L()|0;B:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=586;else{rd=588;break A}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break B}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break B}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=586}while(0);if((rd|0)==586)r=_d(m,i,h)|0;if(r){ew(r|0,q|0,o|0)|0;a[r+o>>0]=0;k=n+4+(p*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=588}else rd=588;while(0);if((rd|0)==588){k=n+4+(p*20|0)+4|0;c[k>>2]=0}if((d[Ob>>0]|0)<=1)break a;i=c[k>>2]|0;m=c[j>>2]|0;C:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=621;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=621;break C}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=621;break C}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=621}while(0);if((rd|0)==621)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k;break a}if(k|0)ni(m,k);break}case 39:{ij(j,0,td+-20|0,c[td+-8>>2]|0,c[td+4>>2]|0);break}case 40:{l=c[td+4>>2]|0;k=c[j+228>>2]|0;if(k|0?(x=c[k+16>>2]|0,x|0):0)a[x+24>>0]=l;break}case 41:{m=c[j+228>>2]|0;if(m|0?(wa=(b[m+42>>1]|0)+-1|0,ba=c[j>>2]|0,ca=qj(ba,td+4|0)|0,ca|0):0){l=c[j>>2]|0;k=a[l+78>>0]|0;qd=a[l+165>>0]|0;l=Zi(l,k,ca,qd&255)|0;do if(!(qd<<24>>24)){if(!l){N=_i(j,k,0,ca)|0;rd=636;break}if(!(c[l+12>>2]|0)){N=_i(j,k,l,ca)|0;rd=636}}else{N=l;rd=636}while(0);if((rd|0)==636?(N|0)==0:0){if(ba|0){if(c[ba+480>>2]|0){Xd(ba,ca);break a}j=ca;if((c[ba+304>>2]|0)>>>0<=j>>>0?(c[ba+308>>2]|0)>>>0>j>>>0:0){j=ba+300|0;c[ca>>2]=c[j>>2];c[j>>2]=ca;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](ca);break a}else{j=Wa[c[29352>>2]&127](ca)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ca);break a}}l=m+4|0;k=c[(c[l>>2]|0)+(wa<<4)+8>>2]|0;do if(k|0){if(ba|0){if(c[ba+480>>2]|0){Xd(ba,k);break}j=k;if((c[ba+304>>2]|0)>>>0<=j>>>0?(c[ba+308>>2]|0)>>>0>j>>>0:0){j=ba+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[(c[l>>2]|0)+(wa<<4)+8>>2]=ca;k=c[m+8>>2]|0;if(k|0)do{if((wa|0)==(b[c[k+4>>2]>>1]|0))c[c[k+32>>2]>>2]=c[(c[l>>2]|0)+(wa<<4)+8>>2];k=c[k+20>>2]|0}while((k|0)!=0)}break}case 44:{c[td+16>>2]=0;break}case 45:{j=td+-8|0;c[j>>2]=c[j>>2]&~c[td+8>>2]|c[td+4>>2];break}case 46:{c[td+-8>>2]=0;c[td+-4>>2]=0;break}case 47:{c[td+-20>>2]=0;c[td+-16>>2]=0;break}case 48:{c[td+-20>>2]=c[td+4>>2];c[td+-16>>2]=255;break}case 49:{c[td+-20>>2]=c[td+4>>2]<<8;c[td+-16>>2]=65280;break}case 50:{c[td+-8>>2]=8;break}case 51:{c[td+-8>>2]=9;break}case 52:{c[td+4>>2]=10;break}case 53:{c[td+4>>2]=7;break}case 54:{c[td+-8>>2]=0;break}case 55:{c[td+-20>>2]=0;break}case 156:case 71:case 56:{c[td+-8>>2]=c[td+4>>2];break}case 227:case 201:case 198:case 75:case 58:{c[td+-8>>2]=1;break}case 59:{c[td+-8>>2]=0;break}case 61:{c[j+76>>2]=0;break}case 63:{gj(j,c[td+-32>>2]|0,c[td+4>>2]|0,c[td+-20>>2]|0,0);break}case 64:{hj(j,0,0,0,c[td+-20>>2]|0,c[td+4>>2]|0,0,0,0,0,1);break}case 65:{k=c[td+-20>>2]|0;l=c[j+228>>2]|0;m=c[j>>2]|0;if((l|0?(Pb=j+200|0,(a[Pb>>0]|0)!=1):0)?(b[(c[(c[(c[m+16>>2]|0)+(d[m+164>>0]<<4)+4>>2]|0)+4>>2]|0)+22>>1]&1)==0:0){o=l+24|0;n=nj(m,c[o>>2]|0,k)|0;c[o>>2]=n;o=c[j+76>>2]|0;if(!o)break a;s=j+72|0;if(!n)break a;p=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;q=c[s>>2]|0;D:do if(q){i=Sv(o|0,0,1,0)|0;h=L()|0;E:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=695;else{rd=697;break D}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break E}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break E}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=695}while(0);if((rd|0)==695)r=_d(m,i,h)|0;if(r){ew(r|0,q|0,o|0)|0;a[r+o>>0]=0;k=n+4+(p*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=697}else rd=697;while(0);if((rd|0)==697){k=n+4+(p*20|0)+4|0;c[k>>2]=0}if((d[Pb>>0]|0)<=1)break a;i=c[k>>2]|0;m=c[j>>2]|0;F:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=730;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=730;break F}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=730;break F}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=730}while(0);if((rd|0)==730)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k;break a}if(k|0)ni(m,k);break}case 66:{ij(j,c[td+-68>>2]|0,td+-32|0,c[td+-20>>2]|0,c[td+-8>>2]|0);l=c[td+4>>2]|0;k=c[j+228>>2]|0;if(k|0?(y=c[k+16>>2]|0,y|0):0)a[y+24>>0]=l;break}case 70:case 68:{c[td+16>>2]=11;break}case 69:{c[td+-20>>2]=c[td+4>>2];break}case 72:{c[td+4>>2]=4;break}case 157:case 73:{c[td+4>>2]=5;break}case 74:{jj(j,c[td+4>>2]|0,0,c[td+-8>>2]|0);break}case 77:{h=td+-44|0;i=td+-32|0;o=c[td+-20>>2]|0;l=c[td+4>>2]|0;k=c[td+-80>>2]|0;m=c[td+-56>>2]|0;p=c[j>>2]|0;if((b[j+196>>1]|0)<=0){bj(j,h,i,k,1,0,m);n=c[j+228>>2]|0;if((n|0)!=0?(c[j+36>>2]|0)==0:0){k=c[j>>2]|0;do if(c[td+-28>>2]|0){if(a[k+165>>0]|0){cd(j,39404,Ha);h=0;break}if((wk(k,h)|0)<0){c[Ka>>2]=h;cd(j,39421,Ka);h=i}else h=i}while(0);m=c[n+72>>2]|0;if(!m)k=-1e6;else{i=c[p+16>>2]|0;k=0;while(1)if((c[i+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}pd=c[j>>2]|0;c[Qb>>2]=j;pd=c[pd+16>>2]|0;c[Qb+12>>2]=c[pd+(k<<4)>>2];c[Qb+4>>2]=c[pd+(k<<4)+12>>2];c[Qb+16>>2]=39579;c[Qb+20>>2]=h;c[Qb+8>>2]=(k|0)==1&1;if(!(cl(Qb,l)|0)){if((d[j+200>>0]|0)>1)k=0;else{k=l;l=fk(p,l,1)|0}c[n+12>>2]=l;pd=gk(p,o,1)|0;c[n+24>>2]=pd;if(!(a[p+81>>0]|0)){m=j+188|0;l=c[m>>2]|0;m=c[m+4>>2]|0;i=_c;c[i>>2]=l;c[i+4>>2]=m;i=l;if((a[i>>0]|0)!=59){l=i+m|0;c[_c>>2]=l}m=_c+4|0;c[m>>2]=0;i=c[td+-92>>2]|0;l=l-i|0;do l=l+-1|0;while((a[880+(d[i+l>>0]|0)>>0]&1)!=0);c[_c>>2]=i+l;c[m>>2]=1;cj(j,0,_c,0,0)}}else k=l}else k=l}else{cd(j,43004,la);k=l}if(k|0)pi(p,k,1);if((d[j+200>>0]|0)>1){if(o|0){k=qd+8|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[qd>>2]=j;c[qd+4>>2]=124;k=c[o>>2]|0;if((k|0)>0){l=o+4|0;while(1){m=c[l>>2]|0;if(m|0?_j(qd,m)|0:0)break;if((k|0)>1){k=k+-1|0;l=l+20|0}else break}h=c[o>>2]|0;if((h|0)>0){m=j+272|0;l=0;do{i=c[o+4+(l*20|0)+4>>2]|0;k=c[m>>2]|0;G:do if(k|0){while(1){if((c[k>>2]|0)==(i|0))break;k=c[k+12>>2]|0;if(!k)break G}c[k>>2]=0}while(0);l=l+1|0}while((l|0)!=(h|0))}}rd=781}}else rd=781;if((rd|0)==781?o|0:0)ri(p,o);break}case 78:{jj(j,c[td+4>>2]|0,1,c[td+-8>>2]|0);break}case 79:{c[qd>>2]=c[7517];c[qd+4>>2]=c[7518];c[qd+8>>2]=c[7519];c[qd+12>>2]=c[7520];c[qd+16>>2]=c[7521];c[qd+20>>2]=c[7522];k=td+4|0;kj(j,c[k>>2]|0,qd)|0;k=c[k>>2]|0;if(k|0)pi(c[j>>2]|0,k,1);break}case 80:{q=c[td+4>>2]|0;do if(!q){o=c[j>>2]|0;p=c[td+-8>>2]|0;if(p|0){H:do if((c[p>>2]|0)>0){m=o+480|0;i=o+304|0;h=o+308|0;n=o+300|0;if(!o){l=0;while(1){k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(0,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(0,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=l+1|0;if((l|0)>=(c[p>>2]|0))break H}}l=0;do{k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(o,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(o,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0){if(c[m>>2]|0){Xd(o,k);break}j=k;if((c[i>>2]|0)>>>0<=j>>>0?(c[h>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[n>>2];c[n>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);l=l+1|0}while((l|0)<(c[p>>2]|0))}while(0);if(o|0){if(c[o+480>>2]|0){Xd(o,p);break}j=p;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[p>>2]=c[j>>2];c[j>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{j=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}}else{c[q+64>>2]=c[td+-8>>2];k=c[q+52>>2]|0;if(k|0){c[q+56>>2]=0;h=q+8|0;c[h>>2]=c[h>>2]|256;m=q;i=0;while(1){i=i+1|0;l=c[k+52>>2]|0;c[k+56>>2]=m;rd=k+8|0;c[rd>>2]=c[rd>>2]|256;if(!l)break;else{m=k;k=l}}if((c[h>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,ma)}}while(0);c[td+-20>>2]=q;break}case 81:{q=c[td+4>>2]|0;do if(!q){o=c[j>>2]|0;p=c[td+-8>>2]|0;if(p|0){I:do if((c[p>>2]|0)>0){m=o+480|0;i=o+304|0;h=o+308|0;n=o+300|0;if(!o){l=0;while(1){k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(0,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(0,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=l+1|0;if((l|0)>=(c[p>>2]|0))break I}}l=0;do{k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(o,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(o,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0){if(c[m>>2]|0){Xd(o,k);break}j=k;if((c[i>>2]|0)>>>0<=j>>>0?(c[h>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[n>>2];c[n>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);l=l+1|0}while((l|0)<(c[p>>2]|0))}while(0);if(o|0){if(c[o+480>>2]|0){Xd(o,p);break}j=p;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[p>>2]=c[j>>2];c[j>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{j=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}}else{c[q+64>>2]=c[td+-8>>2];k=c[q+52>>2]|0;if(k|0){c[q+56>>2]=0;h=q+8|0;c[h>>2]=c[h>>2]|256;m=q;i=0;while(1){i=i+1|0;l=c[k+52>>2]|0;c[k+56>>2]=m;rd=k+8|0;c[rd>>2]=c[rd>>2]|256;if(!l)break;else{m=k;k=l}}if((c[h>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,oa)}}while(0);c[td+-32>>2]=q;break}case 82:{h=td+4|0;n=c[h>>2]|0;if(n|0?(da=c[n+52>>2]|0,da|0):0){c[n+56>>2]=0;o=n+8|0;c[o>>2]=c[o>>2]|256;m=n;i=0;l=da;while(1){i=i+1|0;k=c[l+52>>2]|0;c[l+56>>2]=m;rd=l+8|0;c[rd>>2]=c[rd>>2]|256;if(!k)break;else{m=l;l=k}}if((c[o>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,pa)}c[h>>2]=n;break}case 83:{k=c[td+4>>2]|0;p=td+-20|0;o=c[p>>2]|0;do if(k){l=k+52|0;m=c[l>>2]|0;if(m){c[qd+4>>2]=0;c[k+56>>2]=0;n=k+8|0;c[n>>2]=c[n>>2]|256;i=k;h=0;while(1){h=h+1|0;l=c[m+52>>2]|0;c[m+56>>2]=i;pd=m+8|0;c[pd>>2]=c[pd>>2]|256;if(!l)break;else{i=m;m=l}}if((c[n>>2]&1024|0)==0?(pd=c[(c[j>>2]|0)+124>>2]|0,(pd|0)>0&(h|0)>=(pd|0)):0)cd(j,44434,Na);l=mj(j,0,lj(j,0,0,0,qd,k,0,0)|0,0,0,0,0,0,0)|0;if(!l){rd=899;break}k=l;l=l+52|0}m=td+-8|0;a[k+4>>0]=c[m>>2];c[l>>2]=o;if(o|0){qd=o+8|0;c[qd>>2]=c[qd>>2]&-1025}qd=k+8|0;c[qd>>2]=c[qd>>2]&-1025;if((c[m>>2]|0)!=128)a[j+22>>0]=1}else rd=899;while(0);if((rd|0)==899)if(!o)k=0;else{pi(c[j>>2]|0,o,1);k=0}c[p>>2]=k;break}case 86:case 84:{c[td+4>>2]=e[td+2>>1];break}case 85:{c[td+-8>>2]=128;break}case 87:{j=mj(j,c[td+-68>>2]|0,c[td+-56>>2]|0,c[td+-44>>2]|0,c[td+-32>>2]|0,c[td+-20>>2]|0,c[td+-8>>2]|0,c[td+-80>>2]|0,c[td+4>>2]|0)|0;c[td+-92>>2]=j;break}case 88:{k=mj(j,c[td+-80>>2]|0,c[td+-68>>2]|0,c[td+-56>>2]|0,c[td+-44>>2]|0,c[td+-32>>2]|0,c[td+-8>>2]|0,c[td+-92>>2]|0,c[td+4>>2]|0)|0;c[td+-104>>2]=k;if(k|0){c[k+72>>2]=c[td+-20>>2];break a}l=c[j>>2]|0;k=c[td+-20>>2]|0;if(k|0)do{j=k;k=c[k+32>>2]|0;oi(l,j)}while((k|0)!=0);break}case 89:{j=mj(j,c[td+-8>>2]|0,0,0,0,0,0,512,0)|0;c[td+-32>>2]=j;break}case 90:{m=td+-44|0;k=c[m>>2]|0;l=mj(j,c[td+-8>>2]|0,0,0,0,0,0,1536,0)|0;if(k|0){j=k+8|0;c[j>>2]=c[j>>2]&-1025}if(l){a[l+4>>0]=-128;c[l+52>>2]=k;k=l}c[m>>2]=k;break}case 91:{c[td+4>>2]=1;break}case 92:{c[td+4>>2]=2;break}case 222:case 217:case 214:case 134:case 127:case 94:{c[td+16>>2]=0;break}case 95:{r=td+-44|0;k=nj(c[j>>2]|0,c[r>>2]|0,c[td+-20>>2]|0)|0;c[r>>2]=k;o=c[td+8>>2]|0;if(o){s=td+4|0;J:do if(k|0){p=(c[k>>2]|0)+-1|0;i=c[j>>2]|0;q=c[s>>2]|0;K:do if(q){h=Sv(o|0,0,1,0)|0;n=L()|0;L:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=932;else{rd=934;break K}else{do if(0<0|(0==0?o>>>0<(e[i+276>>1]|0)>>>0:0)){l=i+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=m;break L}l=i+296|0;m=c[l>>2]|0;if(!m){l=i+292|0;break}else{c[l>>2]=c[m>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=m;break L}}else l=i+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;rd=932}while(0);if((rd|0)==932)n=_d(i,h,n)|0;if(n){ew(n|0,q|0,o|0)|0;a[n+o>>0]=0;k=k+4+(p*20|0)+4|0;c[k>>2]=n;l=a[n>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[n+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=n+i|0;if((a[n+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[n+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=934}else rd=934;while(0);if((rd|0)==934){k=k+4+(p*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;M:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=967;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break J;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break J}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=967;break M}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=967;break M}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=967}while(0);if((rd|0)==967)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;od=s;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}}while(0);k=c[r>>2]|0}l=c[td+-32>>2]|0;m=c[td+-8>>2]|0;o=c[j>>2]|0;if(k|0){p=k+4+(((c[k>>2]|0)+-1|0)*20|0)+8|0;k=c[p>>2]|0;do if(k|0){if(o|0){if(c[o+480>>2]|0){Xd(o,k);break}j=k;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);n=l;while(1)if(!(a[880+(d[n>>0]|0)>>0]&1))break;else n=n+1|0;k=m-n|0;N:do if((k|0)<=0)if(!n)k=0;else{l=k;rd=988}else while(1){l=k+-1|0;if(!(a[880+(d[n+l>>0]|0)>>0]&1)){l=k;rd=988;break N}if((k|0)>1)k=l;else{rd=988;break}}while(0);O:do if((rd|0)==988){i=Sv(l|0,((l|0)<0)<<31>>31|0,1,0)|0;h=L()|0;P:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))rd=998;else{k=0;break O}else{do if(!(h>>>0>0|((h|0)==0?i>>>0>(e[o+276>>1]|0)>>>0:0))){m=o+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];j=o+284|0;c[j>>2]=(c[j>>2]|0)+1;break P}m=o+296|0;k=c[m>>2]|0;if(!k){k=o+292|0;break}else{c[m>>2]=c[k>>2];j=o+284|0;c[j>>2]=(c[j>>2]|0)+1;break P}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=998}while(0);if((rd|0)==998)k=_d(o,i,h)|0;if(!k)k=0;else{ew(k|0,n|0,l|0)|0;a[k+l>>0]=0}}while(0);c[p>>2]=k}break}case 96:{rd=c[j>>2]|0;c[qd>>2]=0;c[qd+4>>2]=0;qd=oj(rd,172,qd,0)|0;rd=td+-20|0;j=nj(c[j>>2]|0,c[rd>>2]|0,qd)|0;c[rd>>2]=j;break}case 97:{qd=ej(j,172,0,0)|0;qd=ej(j,134,oj(c[j>>2]|0,59,td+-20|0,1)|0,qd)|0;rd=td+-44|0;j=nj(c[j>>2]|0,c[rd>>2]|0,qd)|0;c[rd>>2]=j;break}case 239:case 238:case 109:case 98:{qd=td+4|0;rd=c[qd+4>>2]|0;j=td+-8|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 100:{m=c[j>>2]|0;Q:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](80)|0;rd=1028;break}k=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1029}else rd=1029}else k=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if((e[m+276>>1]|0)>=80){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1028;break Q}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1028;break Q}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,80,0)|0;rd=1028}while(0);if((rd|0)==1028)if(!k)k=0;else rd=1029;if((rd|0)==1029){I=k;J=I+80|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}c[td+16>>2]=k;break}case 101:{l=c[td+4>>2]|0;c[td+-8>>2]=l;if(l|0){k=c[l>>2]|0;if((k|0)>1)do{j=k;k=k+-1|0;a[l+8+(k*72|0)+36>>0]=a[l+8+((j+-2|0)*72|0)+36>>0]|0}while((j|0)>2);a[l+44>>0]=0}break}case 102:{k=c[td+-8>>2]|0;if(k|0?(p=c[k>>2]|0,(p|0)>0):0)a[k+8+((p+-1|0)*72|0)+36>>0]=c[td+4>>2];break}case 103:{c[td+16>>2]=0;break}case 104:{l=td+-68|0;k=lj(j,c[l>>2]|0,td+-56|0,td+-44|0,td+-32|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[l>>2]=k;l=td+-20|0;if(k|0?(P=c[td+-16>>2]|0,P|0):0){m=(c[k>>2]|0)+-1|0;if((P|0)==1?(c[l>>2]|0)==0:0){j=k+8+(m*72|0)+37|0;a[j>>0]=a[j>>0]|1;break a}j=qj(c[j>>2]|0,l)|0;c[k+8+(m*72|0)+64>>2]=j;j=k+8+(m*72|0)+37|0;a[j>>0]=a[j>>0]|2}break}case 105:{l=td+-92|0;k=lj(j,c[l>>2]|0,td+-80|0,td+-68|0,td+-20|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[l>>2]=k;l=c[td+-44>>2]|0;if(k|0){j=(c[k>>2]|0)+-1|0;c[k+8+(j*72|0)+64>>2]=l;j=k+8+(j*72|0)+37|0;a[j>>0]=a[j>>0]|4;break a}if(l|0)ri(c[j>>2]|0,l);break}case 106:{rd=td+-68|0;j=lj(j,c[rd>>2]|0,0,0,td+-20|0,c[td+-44>>2]|0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 107:{i=td+-68|0;l=c[i>>2]|0;if((((l|0)==0?(c[td+-16>>2]|0)==0:0)?(c[td+-8>>2]|0)==0:0)?(c[td+4>>2]|0)==0:0){c[i>>2]=c[td+-44>>2];break a}p=td+-44|0;m=c[p>>2]|0;k=c[m>>2]|0;if((k|0)==1){o=lj(j,l,0,0,td+-20|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[i>>2]=o;if(o|0){k=(c[o>>2]|0)+-1|0;l=c[p>>2]|0;m=l+16|0;c[o+8+(k*72|0)+8>>2]=c[m>>2];i=l+12|0;c[o+8+(k*72|0)+4>>2]=c[i>>2];h=l+28|0;c[o+8+(k*72|0)+20>>2]=c[h>>2];n=l+45|0;if(a[n>>0]&4){rd=l+72|0;c[o+8+(k*72|0)+64>>2]=c[rd>>2];c[rd>>2]=0;a[n>>0]=a[n>>0]&-5;rd=o+8+(k*72|0)+37|0;a[rd>>0]=a[rd>>0]|4}c[i>>2]=0;c[m>>2]=0;c[h>>2]=0}qi(c[j>>2]|0,c[p>>2]|0);break a}if(!m)k=0;else{if((k|0)>1)do{rd=k;k=k+-1|0;a[m+8+(k*72|0)+36>>0]=a[m+8+((rd+-2|0)*72|0)+36>>0]|0}while((rd|0)>2);a[m+44>>0]=0;k=c[p>>2]|0}rd=mj(j,0,k,0,0,0,0,2048,0)|0;j=lj(j,c[i>>2]|0,0,0,td+-20|0,rd,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[i>>2]=j;break}case 122:case 108:{c[td+16>>2]=0;c[td+20>>2]=0;break}case 110:{i=td+4|0;h=pj(j,0,i,0)|0;R:do if(!((h|0)==0|(d[j+200>>0]|0)<2)){n=c[h+16>>2]|0;m=c[j>>2]|0;S:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1093;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break R;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break R}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1093;break S}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1093;break S}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1093}while(0);if((rd|0)==1093)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=n;pd=i;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}while(0);c[i>>2]=h;break}case 111:{i=td+-20|0;h=td+4|0;n=pj(j,0,i,h)|0;T:do if(!((n|0)==0|(d[j+200>>0]|0)<2)){o=c[n+16>>2]|0;m=c[j>>2]|0;U:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1120;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break T;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break T}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1120;break U}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1120;break U}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1120}while(0);if((rd|0)==1120)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=o;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}while(0);c[i>>2]=n;break}case 112:{rd=td+4|0;j=pj(j,0,rd,0)|0;c[rd>>2]=j;break}case 113:{rd=td+-20|0;j=pj(j,0,rd,td+4|0)|0;c[rd>>2]=j;break}case 114:{k=td+-44|0;rd=pj(j,0,k,td+-20|0)|0;c[k>>2]=rd;if(rd|0){j=qj(c[j>>2]|0,td+4|0)|0;c[(c[k>>2]|0)+20>>2]=j}break}case 115:{k=td+-20|0;rd=pj(j,0,k,0)|0;c[k>>2]=rd;if(rd|0){j=qj(c[j>>2]|0,td+4|0)|0;c[(c[k>>2]|0)+20>>2]=j}break}case 116:{c[td+4>>2]=1;break}case 117:{rd=td+-8|0;j=rj(j,rd,0,0)|0;c[rd>>2]=j;break}case 118:{rd=td+-20|0;j=rj(j,rd,td+-8|0,0)|0;c[rd>>2]=j;break}case 119:{rd=td+-32|0;j=rj(j,rd,td+-20|0,td+-8|0)|0;c[rd>>2]=j;break}case 231:case 210:case 144:case 137:case 120:{c[td+-8>>2]=c[td+4>>2];break}case 232:case 213:case 211:case 143:case 138:case 136:case 121:{c[td+16>>2]=0;break}case 123:{qd=td+4|0;rd=c[qd+4>>2]|0;j=td+-20|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 124:{c[td+-8>>2]=0;c[td+-4>>2]=1;break}case 125:{c[td+-32>>2]=c[td+-8>>2];break}case 158:case 126:{c[td+16>>2]=0;break}case 135:case 128:{c[td+-20>>2]=c[td+4>>2];break}case 129:{l=td+-32|0;k=nj(c[j>>2]|0,c[l>>2]|0,c[td+-8>>2]|0)|0;c[l>>2]=k;l=c[td+4>>2]|0;if(!((k|0)==0|(l|0)<0))a[k+4+(((c[k>>2]|0)+-1|0)*20|0)+12>>0]=l;break}case 130:{l=td+-8|0;k=nj(c[j>>2]|0,0,c[l>>2]|0)|0;c[l>>2]=k;l=c[td+4>>2]|0;if(!((k|0)==0|(l|0)<0))a[k+4+(((c[k>>2]|0)+-1|0)*20|0)+12>>0]=l;break}case 131:{c[td+4>>2]=0;break}case 132:{c[td+4>>2]=1;break}case 133:{c[td+16>>2]=-1;break}case 139:{j=ej(j,141,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 140:{j=ej(j,141,c[td+-20>>2]|0,c[td+4>>2]|0)|0;c[td+-32>>2]=j;break}case 141:{j=ej(j,141,c[td+4>>2]|0,c[td+-20>>2]|0)|0;c[td+-32>>2]=j;break}case 142:{k=td+-20|0;l=c[k>>2]|0;m=td+-8|0;do if(l|0?(Y=c[td+-4>>2]|0,Y|0):0){i=(c[l>>2]|0)+-1|0;if((Y|0)==1?(c[m>>2]|0)==0:0){rd=l+8+(i*72|0)+37|0;a[rd>>0]=a[rd>>0]|1;break}rd=qj(c[j>>2]|0,m)|0;c[l+8+(i*72|0)+64>>2]=rd;rd=l+8+(i*72|0)+37|0;a[rd>>0]=a[rd>>0]|2}while(0);sj(j,c[k>>2]|0,c[td+4>>2]|0);break}case 145:{i=td+-44|0;k=c[i>>2]|0;l=td+-32|0;do if(k|0?(Z=c[td+-28>>2]|0,Z|0):0){m=(c[k>>2]|0)+-1|0;if((Z|0)==1?(c[l>>2]|0)==0:0){rd=k+8+(m*72|0)+37|0;a[rd>>0]=a[rd>>0]|1;break}rd=qj(c[j>>2]|0,l)|0;c[k+8+(m*72|0)+64>>2]=rd;rd=k+8+(m*72|0)+37|0;a[rd>>0]=a[rd>>0]|2}while(0);l=td+-8|0;k=c[l>>2]|0;if(k){if((c[k>>2]|0)>(c[(c[j>>2]|0)+116>>2]|0)){c[ha>>2]=38493;cd(j,44753,ha);k=c[l>>2]|0}}else k=0;tj(j,c[i>>2]|0,k,c[td+4>>2]|0,c[td+-56>>2]|0,0);break}case 146:{s=td+-44|0;n=nj(c[j>>2]|0,c[s>>2]|0,c[td+4>>2]|0)|0;c[s>>2]=n;s=td+-20|0;if(n|0){o=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;p=c[s>>2]|0;q=c[td+-16>>2]|0;V:do if(p){i=Sv(q|0,0,1,0)|0;h=L()|0;W:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1179;else{rd=1181;break V}else{do if(0<0|(0==0?q>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break W}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break W}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1179}while(0);if((rd|0)==1179)r=_d(m,i,h)|0;if(r){ew(r|0,p|0,q|0)|0;a[r+q>>0]=0;k=n+4+(o*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1181}else rd=1181;while(0);if((rd|0)==1181){k=n+4+(o*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;X:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1214;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1214;break X}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1214;break X}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1214}while(0);if((rd|0)==1214)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}break}case 147:{rd=td+-68|0;j=uj(j,c[rd>>2]|0,c[td+-32>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 148:{r=nj(c[j>>2]|0,0,c[td+4>>2]|0)|0;s=td+-20|0;Y:do if(r|0){n=(c[r>>2]|0)+-1|0;m=c[j>>2]|0;o=c[s>>2]|0;p=c[td+-16>>2]|0;Z:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;_:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1229;else{rd=1231;break Z}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break _}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break _}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1229}while(0);if((rd|0)==1229)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=r+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1231}else rd=1231;while(0);if((rd|0)==1231){k=r+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;$:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1264;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break Y;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break Y}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1264;break $}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1264;break $}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1264}while(0);if((rd|0)==1264)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[s>>2]=r;break}case 149:{j=uj(j,0,c[td+-32>>2]|0,c[td+4>>2]|0)|0;c[td+-44>>2]=j;break}case 150:{vj(j,c[td+-32>>2]|0,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+-56>>2]|0,c[td+4>>2]|0);break}case 151:{vj(j,c[td+-32>>2]|0,0,c[td+-20>>2]|0,c[td+-56>>2]|0,0);break}case 152:{c[td+16>>2]=0;break}case 153:{i=c[j>>2]|0;h=c[td+-80>>2]|0;n=c[td+-56>>2]|0;o=c[td+-8>>2]|0;p=c[td+4>>2]|0;aa:do if(!i){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1294;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1303}else rd=1303}else rd=1295}else{if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=1295;break}}else{do if((e[i+276>>1]|0)>=36){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1294;break aa}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1294;break aa}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,36,0)|0;rd=1294}while(0);if((rd|0)==1294)if(!k)rd=1295;else rd=1303;if((rd|0)==1295){if(h|0)ri(i,h);if(n|0)ni(i,n);if(o|0)ri(i,o);if(!p)k=0;else{ni(i,p);k=0}}else if((rd|0)==1303){c[k>>2]=h;c[k+4>>2]=n;c[k+8>>2]=o;c[k+12>>2]=p;c[k+16>>2]=0}c[td+-116>>2]=k;break}case 154:{i=c[j>>2]|0;h=c[td+-44>>2]|0;n=c[td+-20>>2]|0;ba:do if(!i){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1328;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1333}else rd=1333}else rd=1329}else{if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=1329;break}}else{do if((e[i+276>>1]|0)>=36){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1328;break ba}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1328;break ba}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,36,0)|0;rd=1328}while(0);if((rd|0)==1328)if(!k)rd=1329;else rd=1333;if((rd|0)==1329){if(h|0)ri(i,h);if(!n)k=0;else{ni(i,n);k=0}}else if((rd|0)==1333){c[k>>2]=h;c[k+4>>2]=n;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}c[td+-80>>2]=k;break}case 155:{m=c[j>>2]|0;ca:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1358;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1359}else rd=1359}else k=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if((e[m+276>>1]|0)>=36){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1358;break ca}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1358;break ca}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,36,0)|0;rd=1358}while(0);if((rd|0)==1358)if(!k)k=0;else rd=1359;if((rd|0)==1359){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}c[td+-32>>2]=k;break}case 159:{c[td+-20>>2]=c[td+-8>>2];break}case 160:{rd=td+-20|0;j=wj(j,c[rd>>2]|0,td+4|0)|0;c[rd>>2]=j;break}case 161:{rd=td+4|0;j=wj(j,0,rd)|0;c[rd>>2]=j;break}case 162:{c[td+-20>>2]=c[td+-8>>2];break}case 164:case 163:{rd=td+4|0;j=fj(j,59,c[rd>>2]|0,c[td+8>>2]|0)|0;c[rd>>2]=j;break}case 165:{h=td+-20|0;n=oj(c[j>>2]|0,59,h,1)|0;i=td+4|0;o=oj(c[j>>2]|0,59,i,1)|0;da:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;ea:do if(!m){if(!(c[7324]|0)){La=Wa[c[29340>>2]&127](16)|0;rd=1390;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l|0){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;k=l;rd=1391}else{k=l;rd=1391}}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];La=m+284|0;c[La>>2]=(c[La>>2]|0)+1;La=l;rd=1390;break ea}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];La=m+284|0;c[La>>2]=(c[La>>2]|0)+1;La=l;rd=1390;break ea}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}La=_d(m,16,0)|0;rd=1390}while(0);if((rd|0)==1390?La|0:0){k=La;rd=1391}if((rd|0)==1391){l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=o;od=i;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}m=c[j>>2]|0;fa:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1415;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break da;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break da}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1415;break fa}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1415;break fa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1415}while(0);if((rd|0)==1415)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=n;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;rd=j+272|0;c[k+12>>2]=c[rd>>2];c[rd>>2]=k}while(0);j=ej(j,134,n,o)|0;c[h>>2]=j;break}case 166:{n=td+-44|0;o=oj(c[j>>2]|0,59,n,1)|0;p=td+-20|0;q=oj(c[j>>2]|0,59,p,1)|0;i=td+4|0;h=oj(c[j>>2]|0,59,i,1)|0;r=ej(j,134,q,h)|0;ga:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;ha:do if(!m){if(!(c[7324]|0)){Ya=Wa[c[29340>>2]&127](16)|0;rd=1442;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l|0){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;k=l;rd=1443}else{k=l;rd=1443}}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Ya=m+284|0;c[Ya>>2]=(c[Ya>>2]|0)+1;Ya=l;rd=1442;break ha}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];Ya=m+284|0;c[Ya>>2]=(c[Ya>>2]|0)+1;Ya=l;rd=1442;break ha}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Ya=_d(m,16,0)|0;rd=1442}while(0);if((rd|0)==1442?Ya|0:0){k=Ya;rd=1443}if((rd|0)==1443){l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=h;od=i;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}m=c[j>>2]|0;ia:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1467;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break ga;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break ga}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1467;break ia}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1467;break ia}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1467}while(0);if((rd|0)==1467)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=q;pd=p;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;rd=j+272|0;c[k+12>>2]=c[rd>>2];c[rd>>2]=k}while(0);j=ej(j,134,o,r)|0;c[n>>2]=j;break}case 168:case 167:{rd=td+4|0;j=fj(j,e[td+2>>1]|0,c[rd>>2]|0,c[td+8>>2]|0)|0;c[rd>>2]=j;break}case 169:{rd=td+4|0;j=oj(c[j>>2]|0,147,rd,1)|0;c[rd>>2]=j;break}case 170:{m=td+4|0;k=c[m>>2]|0;if((a[k>>0]|0)==35?((d[k+1>>0]|0)+-48|0)>>>0<10:0){pd=m;l=c[pd>>2]|0;pd=c[pd+4>>2]|0;rd=qd;c[rd>>2]=l;c[rd+4>>2]=pd;if(a[j+18>>0]|0){k=ej(j,168,0,0)|0;c[m>>2]=k;if(k|0)ii(l+1|0,k+28|0)|0}else{c[J>>2]=qd;cd(j,38502,J);c[m>>2]=0}break a}u=c[td+8>>2]|0;w=fj(j,148,k,u)|0;c[m>>2]=w;v=c[j>>2]|0;if(w|0){t=c[w+8>>2]|0;k=t+1|0;l=a[k>>0]|0;ja:do if(!(l<<24>>24)){rd=j+196|0;k=(b[rd>>1]|0)+1<<16>>16;b[rd>>1]=k}else{if((a[t>>0]|0)==63){if((u|0)==2){i=(l<<24>>24)+-48|0;m=((i|0)<0)<<31>>31;k=qd;c[k>>2]=i;c[k+4>>2]=m;k=0}else{k=(Og(k,qd,u+-1|0,1)|0)!=0;i=qd;m=c[i+4>>2]|0;i=c[i>>2]|0}l=c[v+144>>2]|0;qd=((l|0)<0)<<31>>31;if(k|((m|0)<0|(m|0)==0&i>>>0<1)|((m|0)>(qd|0)|(m|0)==(qd|0)&i>>>0>l>>>0)){c[Xa>>2]=l;cd(j,45057,Xa);break a}k=i&65535;l=j+196|0;ka:do if((b[l>>1]|0)>=k<<16>>16){h=k<<16>>16;m=j+216|0;l=c[m>>2]|0;if(!l)l=0;else{n=c[l+4>>2]|0;i=2;while(1){if((c[l+(i<<2)>>2]|0)==(h|0))break;i=(c[l+(i+1<<2)>>2]|0)+i|0;if((i|0)>=(n|0))break ka}break ja}}else{b[l>>1]=k;l=j+216|0;m=l;l=c[l>>2]|0}while(0)}else{m=j+216|0;l=c[m>>2]|0;la:do if(l|0){h=c[l+4>>2]|0;k=2;while(1){i=l+(k+2<<2)|0;if((av(i,t,u)|0)==0?(a[i+u>>0]|0)==0:0)break;k=(c[l+(k+1<<2)>>2]|0)+k|0;if((k|0)>=(h|0))break la}k=c[l+(k<<2)>>2]|0;if(k&65535|0){k=k&65535;break ja}}while(0);qd=j+196|0;k=(b[qd>>1]|0)+1<<16>>16;b[qd>>1]=k}r=k<<16>>16;i=(u|0)/4|0;s=i+3|0;q=(l|0)==0;ma:do if(!q){o=l+4|0;i=c[o>>2]|0;h=i+s|0;n=c[l>>2]|0;if((h|0)>(n|0)){i=cw(n|0,((n|0)<0)<<31>>31|0,1)|0;i=Sv(i|0,L()|0,s|0,((s|0)<0)<<31>>31|0)|0;h=cw(i|0,L()|0,2)|0;n=L()|0;rd=l;if((c[v+304>>2]|0)>>>0<=rd>>>0?(c[v+308>>2]|0)>>>0>rd>>>0:0){if(!(n>>>0>0|((n|0)==0?h>>>0>(e[v+276>>1]|0)>>>0:0))){rd=1518;break}n=Zd(v,l,h,n)|0;rd=1515;break}n=Zd(v,l,h,n)|0;rd=1515}else{n=o;rd=1519}}else{i=i+13|0;o=cw(i|0,((i|0)<0)<<31>>31|0,2)|0;p=L()|0;if(c[v+272>>2]|0){if(a[v+81>>0]|0){l=0;break}}else{do if(!(p>>>0>0|((p|0)==0?o>>>0>(e[v+276>>1]|0)>>>0:0))){h=v+300|0;n=c[h>>2]|0;if(n|0){c[h>>2]=c[n>>2];rd=v+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1515;break ma}h=v+296|0;n=c[h>>2]|0;if(!n){h=v+292|0;break}else{c[h>>2]=c[n>>2];rd=v+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1515;break ma}}else h=v+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}n=_d(v,o,p)|0;rd=1515}while(0);if((rd|0)==1515)if(n)if(q){c[n+4>>2]=2;l=n;rd=1518}else{l=n;rd=1518}if((rd|0)==1518){c[l>>2]=i;n=l+4|0;i=c[n>>2]|0;h=i+s|0;rd=1519}if((rd|0)==1519){c[l+(i<<2)>>2]=r;c[l+(i+1<<2)>>2]=s;rd=l+(i+2<<2)|0;c[n>>2]=h;ew(rd|0,t|0,u|0)|0;a[rd+u>>0]=0}c[m>>2]=l}while(0);b[w+32>>1]=k;if((c[v+144>>2]|0)<(k<<16>>16|0))cd(j,45100,yc)}break}case 171:{l=td+-20|0;k=c[l>>2]|0;if((c[td+8>>2]|0)!=0?(A=oj(c[j>>2]|0,106,td+4|0,1)|0,(A|0)!=0):0){c[A+12>>2]=k;k=A+4|0;c[k>>2]=c[k>>2]|4352;k=A}c[l>>2]=k;break}case 172:{i=oj(c[j>>2]|0,36,td+-8|0,1)|0;c[td+-56>>2]=i;k=c[j>>2]|0;l=c[td+-32>>2]|0;m=(l|0)==0;if(!i){if(m)break a;ni(k,l);break a}if(!m){c[i+12>>2]=l;j=i+4|0;c[j>>2]=c[j>>2]|c[l+4>>2]&2097412}Ym(i);break}case 173:{l=c[td+-8>>2]|0;n=td+-44|0;h=c[td+-20>>2]|0;m=c[j>>2]|0;k=oj(m,161,n,1)|0;i=(l|0)==0;if(!k)if(i)k=0;else{ri(m,l);k=0}else{if(!i?(c[l>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ia>>2]=n;cd(j,45123,ia)}c[k+20>>2]=l;l=k+4|0;c[l>>2]=c[l>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),xa=c[(c[j>>2]|0)+120>>2]|0,(xa|0)<(c[k+24>>2]|0)):0){c[qa>>2]=xa;cd(j,41637,qa)}if((h|0)==1)c[l>>2]=c[l>>2]|2}c[n>>2]=k;break}case 174:{l=td+-32|0;k=oj(c[j>>2]|0,161,l,1)|0;if(k){c[k+20>>2]=0;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),B=c[(c[j>>2]|0)+120>>2]|0,(B|0)<(c[k+24>>2]|0)):0){c[u>>2]=B;cd(j,41637,u)}}else k=0;c[l>>2]=k;break}case 175:{l=c[td+-20>>2]|0;n=td+-56|0;h=c[td+-32>>2]|0;m=c[j>>2]|0;k=oj(m,161,n,1)|0;i=(l|0)==0;if(k){if(!i?(c[l>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ja>>2]=n;cd(j,45123,ja)}c[k+20>>2]=l;m=k+4|0;c[m>>2]=c[m>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),ya=c[(c[j>>2]|0)+120>>2]|0,(ya|0)<(c[k+24>>2]|0)):0){c[ra>>2]=ya;cd(j,41637,ra)}if((h|0)==1)c[m>>2]=c[m>>2]|2;l=c[td+4>>2]|0;if((l|0)!=0?(c[k+44>>2]=l,rd=c[m>>2]|0,c[m>>2]=rd|16777216,c[l+68>>2]=k,(rd&2|0)!=0):0)cd(j,45157,Fa)}else{if(!i)ri(m,l);oi(c[j>>2]|0,c[td+4>>2]|0);k=0}c[n>>2]=k;break}case 176:{i=td+-44|0;k=oj(c[j>>2]|0,161,i,1)|0;if(k){c[k+20>>2]=0;m=k+4|0;c[m>>2]=c[m>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),Q=c[(c[j>>2]|0)+120>>2]|0,(Q|0)<(c[k+24>>2]|0)):0){c[K>>2]=Q;cd(j,41637,K)}l=c[td+4>>2]|0;if((l|0)!=0?(c[k+44>>2]=l,rd=c[m>>2]|0,c[m>>2]=rd|16777216,c[l+68>>2]=k,(rd&2|0)!=0):0)cd(j,45157,X)}else{oi(c[j>>2]|0,c[td+4>>2]|0);k=0}c[i>>2]=k;break}case 177:{l=td+4|0;k=oj(c[j>>2]|0,161,l,1)|0;if(k){c[k+20>>2]=0;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),C=c[(c[j>>2]|0)+120>>2]|0,(C|0)<(c[k+24>>2]|0)):0){c[v>>2]=C;cd(j,41637,v)}}else k=0;c[l>>2]=k;break}case 178:{k=nj(c[j>>2]|0,c[td+-32>>2]|0,c[td+-8>>2]|0)|0;l=ej(j,169,0,0)|0;c[td+-44>>2]=l;if(l|0){c[l+20>>2]=k;break a}if(k|0)ri(c[j>>2]|0,k);break}case 186:case 185:case 184:case 183:case 182:case 181:case 180:case 179:{rd=td+-20|0;j=ej(j,e[td+-10>>1]|0,c[rd>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 187:{qd=td+4|0;j=c[qd+4>>2]|0;rd=td+-8|0;c[rd>>2]=c[qd>>2];c[rd+4>>2]=j;c[td+-4>>2]=j|-2147483648;break}case 188:{l=td+-8|0;m=td+-4|0;n=c[m>>2]|0;c[m>>2]=n&2147483647;m=nj(c[j>>2]|0,0,c[td+4>>2]|0)|0;o=td+-20|0;m=nj(c[j>>2]|0,m,c[o>>2]|0)|0;i=c[j>>2]|0;k=oj(i,161,l,1)|0;h=(m|0)==0;if(!k)if(h)k=0;else{ri(i,m);k=0}else{if(!h?(c[m>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[sa>>2]=l;cd(j,45123,sa)}c[k+20>>2]=m;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),za=c[(c[j>>2]|0)+120>>2]|0,(za|0)<(c[k+24>>2]|0)):0){c[ta>>2]=za;cd(j,41637,ta)}}c[o>>2]=k;if((n|0)<0){k=ej(j,19,k,0)|0;c[o>>2]=k}if(k|0){j=k+4|0;c[j>>2]=c[j>>2]|128}break}case 189:{l=td+-32|0;m=td+-28|0;n=c[m>>2]|0;c[m>>2]=n&2147483647;m=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;o=td+-44|0;m=nj(c[j>>2]|0,m,c[o>>2]|0)|0;m=nj(c[j>>2]|0,m,c[td+4>>2]|0)|0;i=c[j>>2]|0;k=oj(i,161,l,1)|0;h=(m|0)==0;if(!k)if(h)k=0;else{ri(i,m);k=0}else{if(!h?(c[m>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ua>>2]=l;cd(j,45123,ua)}c[k+20>>2]=m;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),Aa=c[(c[j>>2]|0)+120>>2]|0,(Aa|0)<(c[k+24>>2]|0)):0){c[va>>2]=Aa;cd(j,41637,va)}}c[o>>2]=k;if((n|0)<0){k=ej(j,19,k,0)|0;c[o>>2]=k}if(k|0){j=k+4|0;c[j>>2]=c[j>>2]|128}break}case 190:{rd=td+-8|0;j=ej(j,e[td+2>>1]|0,c[rd>>2]|0,0)|0;c[rd>>2]=j;break}case 191:{rd=td+-20|0;j=ej(j,51,c[rd>>2]|0,0)|0;c[rd>>2]=j;break}case 192:{m=td+-20|0;rd=td+4|0;k=ej(j,45,c[m>>2]|0,c[rd>>2]|0)|0;c[m>>2]=k;rd=c[rd>>2]|0;m=c[j>>2]|0;if(((k|0)!=0&(rd|0)!=0?(a[rd>>0]|0)==114:0)?(d[j+200>>0]|0)<=1:0){a[k>>0]=50;k=k+16|0;l=c[k>>2]|0;if(l|0)ni(m,l);c[k>>2]=0}break}case 193:{m=td+-32|0;rd=td+4|0;k=ej(j,160,c[m>>2]|0,c[rd>>2]|0)|0;c[m>>2]=k;rd=c[rd>>2]|0;m=c[j>>2]|0;if(((k|0)!=0&(rd|0)!=0?(a[rd>>0]|0)==114:0)?(d[j+200>>0]|0)<=1:0){a[k>>0]=51;k=k+16|0;l=c[k>>2]|0;if(l|0)ni(m,l);c[k>>2]=0}break}case 195:case 194:{j=ej(j,e[td+-10>>1]|0,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 196:{j=ej(j,(b[td+-10>>1]|0)==100?166:165,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 200:case 197:{c[td+4>>2]=0;break}case 199:{k=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;k=nj(c[j>>2]|0,k,c[td+4>>2]|0)|0;l=td+-44|0;m=ej(j,48,c[l>>2]|0,0)|0;c[l>>2]=m;if(!m){if(k|0)ri(c[j>>2]|0,k)}else c[m+20>>2]=k;if(c[td+-32>>2]|0){j=ej(j,19,c[l>>2]|0,0)|0;c[l>>2]=j}break}case 202:{m=td+-8|0;k=c[m>>2]|0;if(!k){if((d[j+200>>0]|0)>=2)break a;k=td+-44|0;l=c[k>>2]|0;if(l|0)ni(c[j>>2]|0,l);j=oj(c[j>>2]|0,147,17136+(c[td+-32>>2]<<3)|0,1)|0;c[k>>2]=j;break a}if((c[k>>2]|0)==1){k=k+4|0;l=c[k>>2]|0;c[k>>2]=0;k=c[m>>2]|0;if(k|0)ri(c[j>>2]|0,k);if(l|0){rd=l+4|0;c[rd>>2]=c[rd>>2]&-769|512}rd=td+-44|0;j=ej(j,(c[td+-32>>2]|0)==0?53:52,c[rd>>2]|0,l)|0;c[rd>>2]=j;break a}l=td+-44|0;k=ej(j,49,c[l>>2]|0,0)|0;c[l>>2]=k;if(!k){k=c[m>>2]|0;if(k|0)ri(c[j>>2]|0,k)}else{c[k+20>>2]=c[m>>2];k=c[l>>2]|0;if((c[j+36>>2]|0)==0?(Ym(k),ea=c[(c[j>>2]|0)+120>>2]|0,(ea|0)<(c[k+24>>2]|0)):0){c[$>>2]=ea;cd(j,41637,$)}}if(c[td+-32>>2]|0){j=ej(j,19,c[l>>2]|0,0)|0;c[l>>2]=j}break}case 203:{k=ej(j,131,0,0)|0;c[td+-20>>2]=k;l=c[td+-8>>2]|0;if(!k){if(!l)break a;pi(c[j>>2]|0,l,1);break a}c[k+20>>2]=l;rd=k+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(k),D=c[(c[j>>2]|0)+120>>2]|0,(D|0)<(c[k+24>>2]|0)):0){c[w>>2]=D;cd(j,41637,w)}break}case 204:{k=td+-44|0;l=ej(j,49,c[k>>2]|0,0)|0;c[k>>2]=l;m=c[td+-8>>2]|0;if(!l){if(m|0)pi(c[j>>2]|0,m,1)}else{c[l+20>>2]=m;rd=l+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(l),R=c[(c[j>>2]|0)+120>>2]|0,(R|0)<(c[l+24>>2]|0)):0){c[M>>2]=R;cd(j,41637,M)}}if(c[td+-32>>2]|0){j=ej(j,19,c[k>>2]|0,0)|0;c[k>>2]=j}break}case 205:{k=pj(j,0,td+-20|0,td+-8|0)|0;m=mj(j,0,k,0,0,0,0,0,0)|0;l=c[td+4>>2]|0;do if(l|0)if((k|0)==0|(m|0)==0){ri(c[j>>2]|0,l);break}else{rd=(c[k>>2]|0)+-1|0;c[k+8+(rd*72|0)+64>>2]=l;rd=k+8+(rd*72|0)+37|0;a[rd>>0]=a[rd>>0]|4;break}while(0);k=td+-44|0;l=ej(j,49,c[k>>2]|0,0)|0;c[k>>2]=l;if(!l){if(m|0)pi(c[j>>2]|0,m,1)}else{c[l+20>>2]=m;rd=l+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(l),fa=c[(c[j>>2]|0)+120>>2]|0,(fa|0)<(c[l+24>>2]|0)):0){c[_>>2]=fa;cd(j,41637,_)}}if(c[td+-32>>2]|0){j=ej(j,19,c[k>>2]|0,0)|0;c[k>>2]=j}break}case 206:{k=ej(j,20,0,0)|0;c[td+-32>>2]=k;l=c[td+-8>>2]|0;if(!k){if(!l)break a;pi(c[j>>2]|0,l,1);break a}c[k+20>>2]=l;rd=k+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(k),E=c[(c[j>>2]|0)+120>>2]|0,(E|0)<(c[k+24>>2]|0)):0){c[s>>2]=E;cd(j,41637,s)}break}case 207:{l=ej(j,149,c[td+-32>>2]|0,0)|0;i=td+-44|0;c[i>>2]=l;if(!l){k=c[td+-20>>2]|0;if(k|0)ri(c[j>>2]|0,k);k=c[td+-8>>2]|0;if(!k)break a;ni(c[j>>2]|0,k);break a}m=c[td+-8>>2]|0;k=c[td+-20>>2]|0;if(m){k=nj(c[j>>2]|0,k,m)|0;l=c[i>>2]|0}c[l+20>>2]=k;k=c[i>>2]|0;if((c[j+36>>2]|0)==0?(Ym(k),Ba=c[(c[j>>2]|0)+120>>2]|0,(Ba|0)<(c[k+24>>2]|0)):0){c[ka>>2]=Ba;cd(j,41637,ka)}break}case 208:{rd=td+-44|0;qd=nj(c[j>>2]|0,c[rd>>2]|0,c[td+-20>>2]|0)|0;c[rd>>2]=qd;j=nj(c[j>>2]|0,qd,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 209:{qd=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;rd=td+-32|0;c[rd>>2]=qd;j=nj(c[j>>2]|0,qd,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 316:{c[td+-44>>2]=c[td+-8>>2];break}case 215:{rd=td+-20|0;j=nj(c[j>>2]|0,c[rd>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 216:{rd=td+4|0;j=nj(c[j>>2]|0,0,c[rd>>2]|0)|0;c[rd>>2]=j;break}case 223:case 218:{c[td+-20>>2]=c[td+-8>>2];break}case 219:{h=td+-44|0;qd=pj(j,0,h,0)|0;hj(j,td+-80|0,td+-68|0,qd,c[td+-20>>2]|0,c[td+-116>>2]|0,td+-128|0,c[td+4>>2]|0,0,c[td+-92>>2]|0,0);if((d[j+200>>0]|0)>1?(q=c[j+232>>2]|0,q|0):0){i=c[q>>2]|0;m=c[j>>2]|0;na:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1732;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1732;break na}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1732;break na}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1732}while(0);if((rd|0)==1732)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}break}case 262:case 220:{c[td+4>>2]=2;break}case 221:{c[td+16>>2]=0;break}case 224:{r=td+-44|0;s=td+-20|0;pd=c[td+-8>>2]|0;qd=c[td+4>>2]|0;t=nj(c[j>>2]|0,c[r>>2]|0,0)|0;if((pd|0)!=0|(qd|0)!=-1?(a[(c[j>>2]|0)+165>>0]|0)==0:0){qd=c[s>>2]|0;c[H>>2]=c[td+-16>>2];c[H+4>>2]=qd;cd(j,45206,H)}oa:do if(t|0){n=(c[t>>2]|0)+-1|0;m=c[j>>2]|0;o=c[s>>2]|0;p=c[td+-16>>2]|0;pa:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;qa:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1751;else{rd=1753;break pa}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break qa}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break qa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1751}while(0);if((rd|0)==1751)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=t+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1753}else rd=1753;while(0);if((rd|0)==1753){k=t+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;ra:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1786;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break oa;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break oa}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1786;break ra}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1786;break ra}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1786}while(0);if((rd|0)==1786)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[r>>2]=t;break}case 225:{r=td+-20|0;pd=c[td+-8>>2]|0;qd=c[td+4>>2]|0;s=nj(c[j>>2]|0,0,0)|0;if((pd|0)!=0|(qd|0)!=-1?(a[(c[j>>2]|0)+165>>0]|0)==0:0){qd=c[r>>2]|0;c[t>>2]=c[td+-16>>2];c[t+4>>2]=qd;cd(j,45206,t)}sa:do if(s|0){n=(c[s>>2]|0)+-1|0;m=c[j>>2]|0;o=c[r>>2]|0;p=c[td+-16>>2]|0;ta:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;ua:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1804;else{rd=1806;break ta}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break ua}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break ua}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1804}while(0);if((rd|0)==1804)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=s+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1806}else rd=1806;while(0);if((rd|0)==1806){k=s+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;va:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1839;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break sa;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break sa}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1839;break va}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1839;break va}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1839}while(0);if((rd|0)==1839)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=r;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[r>>2]=s;break}case 228:{x=c[td+4>>2]|0;o=c[td+-8>>2]|0;y=c[j>>2]|0;wa:do if(!(a[y+81>>0]|0)){xa:do if(!(a[y+165>>0]|0)){m=j+4|0;i=y+24|0;h=(c[i>>2]&1|0)==0;n=y+16|0;pd=c[(c[n>>2]|0)+12>>2]|0;a[y+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(Ca=eh(y,0,m,0)|0,(Ca|0)!=0):0)k=Ca;else rd=1846;ya:do if((rd|0)==1846){k=c[y+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[n>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Oa=eh(y,k,m,0)|0,Oa|0):0){k=Oa;break ya}}while((l|0)>2);if(h)c[i>>2]=c[i>>2]&-2;if(!(a[y+89>>0]|0))break xa;c[i>>2]=c[i>>2]|16;break xa}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break wa}while(0);k=c[x+12>>2]|0;w=hi(y,c[x+16>>2]|0,k)|0;if(!w){if(!o){c[Ta>>2]=x;c[Ta+4>>2]=0;cd(j,45244,Ta)}else hl(j,k);a[j+17>>0]=1;break}pd=w+55|0;if((d[pd>>0]|d[pd+1>>0]<<8)&3){c[Ua>>2]=0;cd(j,45262,Ua);break}l=c[w+24>>2]|0;u=y+16|0;m=c[u>>2]|0;if(!l)v=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){v=k;break}else k=k+1|0}n=c[w+12>>2]|0;o=c[m+(v<<4)>>2]|0;t=(v|0)==1;k=t?34855:34585;m=c[j>>2]|0;l=a[m+165>>0]|0;if(!(l<<24>>24))if((a[j+200>>0]|0)==0?(Kb=c[m+312>>2]|0,(Kb|0)!=0):0){k=$a[Kb&127](c[m+316>>2]|0,9,k,0,o,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Lb);c[j+12>>2]=23;break}if((k|2|0)!=2){cd(j,39231,Mb);c[j+12>>2]=1;break}if(k|0)break;m=c[j>>2]|0;h=a[m+165>>0]|0}else h=0;else h=l;i=(v|0)==0?10:12;l=c[w>>2]|0;k=c[n>>2]|0;do if((h<<24>>24==0?(a[j+200>>0]|0)==0:0)?(Rb=c[m+312>>2]|0,Rb|0):0){k=$a[Rb&127](c[m+316>>2]|0,i,l,k,o,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Sb);c[j+12>>2]=23;break wa}if((k|2|0)==2)if(!k)break;else break wa;else{cd(j,39231,Tb);c[j+12>>2]=1;break wa}}while(0);s=j+8|0;k=c[s>>2]|0;i=j+116|0;if(!k){m=c[j>>2]|0;if((c[i>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;za:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1897;else break wa;else{do if((e[m+276>>1]|0)>=224){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];pd=m+284|0;c[pd>>2]=(c[pd>>2]|0)+1;break za}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];pd=m+284|0;c[pd>>2]=(c[pd>>2]|0)+1;break za}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1897}while(0);if((rd|0)==1897)l=_d(m,224,0)|0;if(!l)break;I=l+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[l>>2]=m;k=m+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=j;c[s>>2]=l;Di(l,61,0,1,0)|0;r=l}else r=k;q=c[i>>2]|0;q=(q|0)==0?j:q;k=q+84|0;l=c[k>>2]|0;p=1<<v;Aa:do if((((l&p|0)==0?(c[k>>2]=l|p,t):0)?(Dc=c[q>>2]|0,rc=Dc+16|0,(c[(c[rc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[Dc>>2]|0,0,Dc,qd,0,542)|0;if(k|0){cd(q,32157,pc);c[q+12>>2]=k;break}qd=c[qd>>2]|0;c[(c[rc>>2]|0)+20>>2]=qd;k=c[Dc+92>>2]|0;i=c[qd+4>>2]|0;c[i+4>>2]=c[qd>>2];do if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=1917;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=1917}while(0);do if((rd|0)==1917){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);rd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((rd|0)!=7)break;k=Dc+81|0;do if(!(a[k>>0]|0)){if(a[Dc+82>>0]|0)break;a[k>>0]=1;if((c[Dc+180>>2]|0)>0)c[Dc+264>>2]=1;k=Dc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Dc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break Aa}while(0)}while(0);l=q+80|0;c[l>>2]=c[l>>2]|p;l=q+20|0;a[l>>0]=a[l>>0]|1;l=c[w>>2]|0;c[Oc>>2]=c[(c[u>>2]|0)+(v<<4)>>2];c[Oc+4>>2]=34585;c[Oc+8>>2]=l;Ak(j,45335,Oc);l=c[w>>2]|0;m=c[(c[(c[j>>2]|0)+16>>2]|0)+(v<<4)>>2]|0;c[Gc>>2]=1;Cb(24,Oc,42737,Gc)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Hc>>2]=m;c[Hc+4>>2]=Oc;c[Hc+8>>2]=38091;c[Hc+12>>2]=l;Ak(j,42751,Hc)}c[Ic>>2]=2;Cb(24,Oc,42737,Ic)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Kc>>2]=m;c[Kc+4>>2]=Oc;c[Kc+8>>2]=38091;c[Kc+12>>2]=l;Ak(j,42751,Kc)}c[Lc>>2]=3;Cb(24,Oc,42737,Lc)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Mc>>2]=m;c[Mc+4>>2]=Oc;c[Mc+8>>2]=38091;c[Mc+12>>2]=l;Ak(j,42751,Mc)}c[Nc>>2]=4;Cb(24,Oc,42737,Nc)|0;k=c[j>>2]|0;if(Sd(k,Oc,m)|0){c[Qc>>2]=m;c[Qc+4>>2]=Oc;c[Qc+8>>2]=38091;c[Qc+12>>2]=l;Ak(j,42751,Qc);k=c[j>>2]|0}i=c[s>>2]|0;k=(c[c[(c[k+16>>2]|0)+(v<<4)+12>>2]>>2]|0)+1|0;m=i+108|0;l=c[m>>2]|0;if((c[i+112>>2]|0)>(l|0)){c[m>>2]=l+1;rd=c[i+104>>2]|0;a[rd+(l*20|0)>>0]=95;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=v;c[rd+(l*20|0)+8>>2]=1;c[rd+(l*20|0)+12>>2]=k;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(i,95,v,1,k)|0;kl(j,c[w+44>>2]|0,v);m=c[w>>2]|0;l=r+108|0;k=c[l>>2]|0;if((c[r+112>>2]|0)>(k|0)){c[l>>2]=k+1;j=c[r+104>>2]|0;a[j+(k*20|0)>>0]=-112;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=v;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(r,144,v,0,0)|0;if(!(a[(c[r>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[l>>2]|0)+-1|0;Ei(r,(c[r+104>>2]|0)+(k*20|0)|0,m,0)}}while(0);qi(y,x);break}case 229:{xj(j,0,c[td+4>>2]|0);break}case 230:{xj(j,td+-8|0,c[td+4>>2]|0);break}case 233:{yj(j,td+-8|0,td+4|0,0,0);break}case 234:{yj(j,td+-32|0,td+-20|0,td+4|0,0);break}case 235:{yj(j,td+-44|0,td+-32|0,td+-8|0,0);break}case 236:{yj(j,td+-32|0,td+-20|0,td+4|0,1);break}case 237:{yj(j,td+-44|0,td+-32|0,td+-8|0,1);break}case 240:{v=c[td+-32>>2]|0;w=(c[td+4>>2]|0)-v+(c[td+8>>2]|0)|0;k=c[td+-8>>2]|0;p=j+236|0;l=c[p>>2]|0;A=c[j>>2]|0;c[p>>2]=0;Ba:do if((l|0)!=0&(c[j+36>>2]|0)==0){z=c[l>>2]|0;i=c[l+20>>2]|0;if(!i)y=-1e6;else{h=c[A+16>>2]|0;m=0;while(1)if((c[h+(m<<4)+12>>2]|0)==(i|0)){y=m;break}else m=m+1|0}m=l+28|0;c[m>>2]=k;h=(k|0)==0;if(!h){i=k;do{c[i+4>>2]=l;i=c[i+36>>2]|0}while((i|0)!=0)}c[Qb>>2]=z;if(!z)i=0;else i=(Eu(z)|0)&1073741823;c[Qb+4>>2]=i;c[_c>>2]=j;x=A+16|0;q=c[x>>2]|0;c[_c+12>>2]=c[q+(y<<4)>>2];c[_c+4>>2]=c[q+(y<<4)+12>>2];c[_c+16>>2]=31419;c[_c+20>>2]=Qb;q=(y|0)==1;c[_c+8>>2]=q&1;if(!h)do{if(cl(_c,c[k+8>>2]|0)|0){k=0;rd=2083;break Ba}if(dl(_c,c[k+16>>2]|0)|0){k=0;rd=2083;break Ba}n=c[k+20>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}o=c[k+28>>2]|0;if(o|0){n=c[o>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}if(dl(_c,c[o+4>>2]|0)|0){k=0;rd=2083;break Ba}n=c[o+8>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}if(dl(_c,c[o+12>>2]|0)|0){k=0;rd=2083;break Ba}}k=c[k+36>>2]|0}while((k|0)!=0);if(!(dl(_c,c[l+12>>2]|0)|0)){if((d[j+200>>0]|0)<=1){k=A+165|0;if(!(a[k>>0]|0)){u=j+8|0;i=c[u>>2]|0;o=j+116|0;if(!i){n=c[j>>2]|0;if((c[o>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[j+23>>0]=1;Ca:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))rd=2e3;else{k=0;r=l;rd=2085;break Ba}else{do if((e[n+276>>1]|0)>=224){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];od=n+284|0;c[od>>2]=(c[od>>2]|0)+1;break Ca}i=n+296|0;h=c[i>>2]|0;if(!h){i=n+292|0;break}else{c[i>>2]=c[h>>2];od=n+284|0;c[od>>2]=(c[od>>2]|0)+1;break Ca}}else i=n+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;rd=2e3}while(0);if((rd|0)==2e3)h=_d(n,224,0)|0;if(!h){k=0;r=l;rd=2085;break}I=h+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[h>>2]=n;m=n+4|0;i=c[m>>2]|0;if(i|0)c[i+4>>2]=h;c[h+8>>2]=i;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=j;c[u>>2]=h;Di(h,61,0,1,0)|0;t=h}else t=i;s=c[o>>2]|0;s=(s|0)==0?j:s;m=s+84|0;i=c[m>>2]|0;r=1<<y;Da:do if((((i&r|0)==0?(c[m>>2]=i|r,q):0)?(Ac=c[s>>2]|0,oc=Ac+16|0,(c[(c[oc>>2]|0)+20>>2]|0)==0):0)?(a[s+199>>0]|0)==0:0){m=Pe(c[Ac>>2]|0,0,Ac,qd,0,542)|0;if(m|0){cd(s,32157,mc);c[s+12>>2]=m;break}qd=c[qd>>2]|0;c[(c[oc>>2]|0)+20>>2]=qd;m=c[Ac+92>>2]|0;n=c[qd+4>>2]|0;c[n+4>>2]=c[qd>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((m+-512|0)>>>0<65025){if(m+-1&m|0)break;c[o>>2]=m;h=n+80|0;m=c[h>>2]|0;if(!m)break;i=m+-4|0;c[h>>2]=i;m=i;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](i)|0;rd=2020;break}else{m=Wa[c[29352>>2]&127](i)|0;rd=2020}while(0);do if((rd|0)==2020){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{qd=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[h>>2]=0}while(0);qd=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((qd|0)!=7)break;m=Ac+81|0;do if(!(a[m>>0]|0)){if(a[Ac+82>>0]|0)break;a[m>>0]=1;if((c[Ac+180>>2]|0)>0)c[Ac+264>>2]=1;m=Ac+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[Ac+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);break Da}while(0)}while(0);o=s+80|0;c[o>>2]=c[o>>2]|r;o=v;Ea:do if(v){h=Sv(w|0,0,1,0)|0;n=L()|0;Fa:do if(c[A+272>>2]|0)if(!(a[A+81>>0]|0))rd=2044;else{i=0;break Ea}else{do if(0<0|(0==0?w>>>0<(e[A+276>>1]|0)>>>0:0)){m=A+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];qd=A+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Fa}m=A+296|0;i=c[m>>2]|0;if(!i){m=A+292|0;break}else{c[m>>2]=c[i>>2];qd=A+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Fa}}else m=A+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;rd=2044}while(0);if((rd|0)==2044)i=_d(A,h,n)|0;if(i){ew(i|0,o|0,w|0)|0;a[i+w>>0]=0}else i=0}else i=0;while(0);rd=c[l+4>>2]|0;c[Wc>>2]=c[(c[x>>2]|0)+(y<<4)>>2];c[Wc+4>>2]=34585;c[Wc+8>>2]=z;c[Wc+12>>2]=rd;c[Wc+16>>2]=i;Ak(j,46058,Wc);Ga:do if(i|0){if(c[A+480>>2]|0){Xd(A,i);break}m=i;do if((c[A+304>>2]|0)>>>0<=m>>>0){if((c[A+308>>2]|0)>>>0<=m>>>0)break;rd=A+300|0;c[i>>2]=c[rd>>2];c[rd>>2]=i;break Ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{rd=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);n=c[u>>2]|0;m=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(y<<4)+12>>2]>>2]|0)+1|0;i=n+108|0;h=c[i>>2]|0;if((c[n+112>>2]|0)>(h|0)){c[i>>2]=h+1;j=c[n+104>>2]|0;a[j+(h*20|0)>>0]=95;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=y;c[j+(h*20|0)+8>>2]=1;c[j+(h*20|0)+12>>2]=m;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0}else Di(n,95,y,1,m)|0;c[Xc>>2]=z;Bk(t,y,dd(A,46122,Xc)|0);rd=2060}}else{c[p>>2]=l;l=0;k=A+165|0;rd=2060}if((rd|0)==2060)if(!(a[k>>0]|0)){k=0;rd=2083;break}q=mi((c[(c[x>>2]|0)+(y<<4)+12>>2]|0)+40|0,z,l)|0;if(q|0){k=A+81|0;if(a[k>>0]|0){k=0;l=q;rd=2083;break}if(a[A+82>>0]|0){k=0;l=q;rd=2083;break}a[k>>0]=1;if((c[A+180>>2]|0)>0)c[A+264>>2]=1;k=A+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[A+236>>2]|0;if(!k){k=0;l=q;rd=2083;break}c[k+12>>2]=7;k=0;l=q;rd=2083;break}h=c[l+20>>2]|0;if((h|0)==(c[l+24>>2]|0)){p=c[l+4>>2]|0;n=c[h+20>>2]|0;if(!n){m=h+12|0;k=h+16|0}else{m=a[p>>0]|0;if(!(m<<24>>24))k=0;else{k=0;i=p;do{i=i+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[i>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[h+8>>2]|0)>>>0)|0;m=n+(k<<3)|0;k=n+(k<<3)+4|0}m=c[m>>2]|0;Ha:do if(!m)k=59292;else{o=d[208+(d[p>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;h=c[k+12>>2]|0;j=a[h>>0]|0;i=(d[208+(j&255)>>0]|0)-o|0;if(!(j<<24>>24==0|(i|0)!=0)){n=p;do{h=h+1|0;n=n+1|0;j=a[h>>0]|0;i=(d[208+(j&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(j<<24>>24==0|(i|0)!=0))}if(!i)break Ha;if(!m){k=59292;break}}}while(0);k=(c[k+8>>2]|0)+68|0;c[l+32>>2]=c[k>>2];c[k>>2]=l;k=0;l=q;rd=2083}else{k=0;l=q;rd=2083}}else{k=0;r=l;rd=2085}}else rd=2083;while(0);if((rd|0)==2083)if(l){r=l;m=l+28|0;rd=2085}do if((rd|0)==2085){Xi(A,c[m>>2]|0);l=c[l>>2]|0;do if(l|0){if(A|0){if(c[A+480>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[r+4>>2]|0;do if(l|0){if(A|0){if(c[A+480>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[r+12>>2]|0;if(l|0)ni(A,l);l=c[r+16>>2]|0;if(l|0){q=l+4|0;m=c[l>>2]|0;Ia:do if((c[q>>2]|0)>0){h=A+480|0;n=A+304|0;o=A+308|0;p=A+300|0;if(!A){i=0;while(1){m=c[m+(i<<3)>>2]|0;do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{j=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);i=i+1|0;m=c[l>>2]|0;if((i|0)>=(c[q>>2]|0))break Ia}}i=0;do{m=c[m+(i<<3)>>2]|0;do if(m|0){if(c[h>>2]|0){Xd(A,m);break}j=m;if((c[n>>2]|0)>>>0<=j>>>0?(c[o>>2]|0)>>>0>j>>>0:0){c[m>>2]=c[p>>2];c[p>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{j=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);i=i+1|0;m=c[l>>2]|0}while((i|0)<(c[q>>2]|0))}while(0);Ja:do if(m){do if(A|0){i=A+480|0;if(!(c[i>>2]|0)){h=m;if((c[A+304>>2]|0)>>>0>h>>>0)break;if((c[A+308>>2]|0)>>>0<=h>>>0)break;j=A+300|0;c[m>>2]=c[j>>2];c[j>>2]=m}else Xd(A,m);m=i;rd=2140;break Ja}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);rd=2138;break}else{rd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);rd=2138;break}}else rd=2138;while(0);if((rd|0)==2138)if(!A){pd=l;rd=2145}else{m=A+480|0;rd=2140}do if((rd|0)==2140){if(c[m>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l}else{pd=l;rd=2145}}while(0);do if((rd|0)==2145?pd|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](pd);break}else{j=Wa[c[29352>>2]&127](pd)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](pd);break}while(0);if(!r)break}if(A|0){if(c[A+480>>2]|0){Xd(A,r);break}j=r;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);Xi(A,k);break}case 241:{H=td+-80|0;K=td+-68|0;y=c[td+-56>>2]|0;D=c[td+-44>>2]|0;k=c[td+-40>>2]|0;E=c[td+-20>>2]|0;F=c[td+4>>2]|0;M=td+-116|0;v=c[td+-92>>2]|0;N=c[j>>2]|0;x=(c[M>>2]|0)!=0;O=td+-64|0;l=(c[O>>2]|0)==0;do if(x)if(l)if(!E){rd=2387;break}else{l=1;m=H;rd=2171;break}else{cd(j,46151,Za);rd=2387;break}else{if(!l){if(a[N+165>>0]|0){cd(j,39404,_a);rd=2387;break}l=wk(N,H)|0;if((l|0)<0){c[bb>>2]=H;cd(j,39421,bb);rd=2387;break}else m=K}else{l=d[N+164>>0]|0;m=H}if((E|0)!=0&(l|0)>-1)rd=2171;else rd=2387}while(0);Ka:do if((rd|0)==2171){B=N+81|0;if(!(a[B>>0]|0)){t=N+165|0;if((l|0)!=1&(a[t>>0]|0)!=0){i=E+12|0;h=c[i>>2]|0;do if(h|0){if(c[N+480>>2]|0){Xd(N,h);break}pd=h;if((c[N+304>>2]|0)>>>0<=pd>>>0?(c[N+308>>2]|0)>>>0>pd>>>0:0){pd=N+300|0;c[h>>2]=c[pd>>2];c[pd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{pd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[i>>2]=0}s=E+8|0;h=c[s>>2]|0;if(!h)i=E+12|0;else{n=c[(c[j>>2]|0)+16>>2]|0;i=0;while(1)if((c[n+(i<<4)+12>>2]|0)==(h|0))break;else i=i+1|0;i=n+(i<<4)|0}C=E+16|0;i=bd(j,0,c[C>>2]|0,c[i>>2]|0)|0;h=c[j>>2]|0;u=E+24|0;n=c[u>>2]|0;do if(n|0){if(h|0?c[h+480>>2]|0:0){Vi(h,n);break}kd=n+32|0;pd=(c[kd>>2]|0)+-1|0;c[kd>>2]=pd;if(!pd)Vi(h,n)}while(0);c[u>>2]=i;La:do if(i){pd=i+32|0;c[pd>>2]=(c[pd>>2]|0)+1;if(a[E+45>>0]&2){q=c[E+72>>2]|0;h=c[i+8>>2]|0;Ma:do if(h|0){r=d[208+(d[q>>0]|0)>>0]|0;while(1){o=c[h>>2]|0;pd=a[o>>0]|0;n=(d[208+(pd&255)>>0]|0)-r|0;if(!(pd<<24>>24==0|(n|0)!=0)){p=q;do{o=o+1|0;p=p+1|0;pd=a[o>>0]|0;n=(d[208+(pd&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(n|0)!=0))}if(!n)break;h=c[h+20>>2]|0;if(!h)break Ma}c[E+76>>2]=h;break La}while(0);c[hc>>2]=q;c[hc+4>>2]=0;cd(j,41107,hc);a[j+17>>0]=1;i=0}}else i=0;while(0);if((a[t>>0]|0)==0?(i|0)!=0&(c[O>>2]|0)==0:0)A=(c[i+72>>2]|0)==(c[(c[N+16>>2]|0)+28>>2]|0)?1:l;else A=l;if((a[B>>0]|0)==0?(Zc=c[j>>2]|0,c[_c>>2]=j,Zc=c[Zc+16>>2]|0,c[_c+12>>2]=c[Zc+(A<<4)>>2],c[_c+4>>2]=c[Zc+(A<<4)+12>>2],c[_c+16>>2]=31419,c[_c+20>>2]=m,Zc=(A|0)==1,c[_c+8>>2]=Zc&1,(al(_c,E)|0)==0):0){i=c[s>>2]|0;if(!i)l=E+12|0;else{h=c[(c[j>>2]|0)+16>>2]|0;l=0;while(1)if((c[h+(l<<4)+12>>2]|0)==(i|0))break;else l=l+1|0;l=h+(l<<4)|0}z=bd(j,0,c[C>>2]|0,c[l>>2]|0)|0;l=c[j>>2]|0;i=c[u>>2]|0;do if(i|0){if(l|0?c[l+480>>2]|0:0){Vi(l,i);break}kd=i+32|0;pd=(c[kd>>2]|0)+-1|0;c[kd>>2]=pd;if(!pd)Vi(l,i)}while(0);c[u>>2]=z;Na:do if(z|0){pd=z+32|0;c[pd>>2]=(c[pd>>2]|0)+1;Oa:do if(a[E+45>>0]&2){o=c[E+72>>2]|0;l=c[z+8>>2]|0;Pa:do if(l|0){p=d[208+(d[o>>0]|0)>>0]|0;while(1){h=c[l>>2]|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-p|0;if(!(pd<<24>>24==0|(i|0)!=0)){n=o;do{h=h+1|0;n=n+1|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(i|0)!=0))}if(!i)break;l=c[l+20>>2]|0;if(!l)break Pa}c[E+76>>2]=l;break Oa}while(0);c[Ec>>2]=o;c[Ec+4>>2]=0;cd(j,41107,Ec);a[j+17>>0]=1;break Na}while(0);if(c[z+56>>2]|0){cd(j,46197,Fc);rd=2387;break Ka}w=qj(N,m)|0;if(!w){rd=2387;break Ka}Qa:do if(!(vk(j,w)|0)){u=j+200|0;t=a[u>>0]|0;s=(t&255)>1;do if(!s){n=c[(c[N+16>>2]|0)+(A<<4)+12>>2]|0;o=c[n+52>>2]|0;if(!o){i=n+44|0;l=n+48|0}else{i=a[w>>0]|0;if(!(i<<24>>24))l=0;else{l=0;h=w;do{h=h+1|0;l=G(l+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[h>>0]|0}while(i<<24>>24!=0)}l=(l>>>0)%((c[n+40>>2]|0)>>>0)|0;i=o+(l<<3)|0;l=o+(l<<3)+4|0}i=c[i>>2]|0;Ra:do if(!i)l=59292;else{p=d[208+(d[w>>0]|0)>>0]|0;while(1){l=c[l>>2]|0;i=i+-1|0;n=c[l+12>>2]|0;pd=a[n>>0]|0;h=(d[208+(pd&255)>>0]|0)-p|0;if(!(pd<<24>>24==0|(h|0)!=0)){o=w;do{n=n+1|0;o=o+1|0;pd=a[n>>0]|0;h=(d[208+(pd&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(h|0)!=0))}if(!h)break Ra;if(!i){l=59292;break}}}while(0);if(!(c[l+8>>2]|0))break;if(!v){c[Yc>>2]=m;cd(j,46238,Yc);rd=2378;break Qa}h=c[j+116>>2]|0;h=(h|0)==0?j:h;m=h+84|0;i=c[m>>2]|0;l=1<<A;if(i&l|0){rd=2378;break Qa}c[m>>2]=i|l;if(!Zc){rd=2378;break Qa}q=c[h>>2]|0;l=q+16|0;if(c[(c[l>>2]|0)+20>>2]|0){rd=2378;break Qa}if(a[h+199>>0]|0){rd=2378;break Qa}m=Pe(c[q>>2]|0,0,q,qd,0,542)|0;if(m|0){cd(h,32157,$c);c[h+12>>2]=m;rd=2378;break Qa}qd=c[qd>>2]|0;c[(c[l>>2]|0)+20>>2]=qd;l=c[q+92>>2]|0;h=c[qd+4>>2]|0;c[h+4>>2]=c[qd>>2];do if(!(b[h+22>>1]&2)){n=h+32|0;o=h+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[n>>2]=l;i=h+80|0;l=c[i>>2]|0;if(!l)break;m=l+-4|0;c[i>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;rd=2270;break}else{l=Wa[c[29352>>2]&127](m)|0;rd=2270}while(0);do if((rd|0)==2270){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{rd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[i>>2]=0}while(0);rd=Se(c[h>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((rd|0)!=7)break;l=q+81|0;do if(!(a[l>>0]|0)){if(a[q+82>>0]|0)break;a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;l=q+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[q+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);rd=2378;break Qa}while(0);rd=2378;break Qa}while(0);r=c[z>>2]|0;do if(r|0){l=a[r>>0]|0;Sa:do if(!(l<<24>>24)){l=39441;rd=2285}else{qd=l&255;l=208+qd|0;do if((qd|32|0)==115){l=a[r+1>>0]|0;if(!(l<<24>>24)){l=39442;rd=2285;break Sa}l=l&255;if((l|32|0)!=113){m=113;l=208+l|0;break}l=a[r+2>>0]|0;if(!(l<<24>>24)){l=39443;rd=2285;break Sa}l=l&255;if((l|32|0)!=108){m=108;l=208+l|0;break}l=a[r+3>>0]|0;if(!(l<<24>>24)){l=39444;rd=2285;break Sa}l=l&255;if((l|32|0)!=105){m=105;l=208+l|0;break}l=a[r+4>>0]|0;if(!(l<<24>>24)){l=39445;rd=2285;break Sa}l=l&255;if((l|32|0)!=116){m=116;l=208+l|0;break}l=a[r+5>>0]|0;if(!(l<<24>>24)){l=39446;rd=2285;break Sa}l=l&255;if((l|32|0)!=101){m=101;l=208+l|0;break}l=a[r+6>>0]|0;if(!(l<<24>>24)){l=39447;rd=2285;break Sa}if(l<<24>>24==95)break Sa;else{m=95;l=208+(l&255)|0}}else m=115;while(0);fd=d[l>>0]|0;ad=m;rd=2289}while(0);if((rd|0)==2285){fd=0;ad=a[208+(d[l>>0]|0)>>0]|0;rd=2289}if((rd|0)==2289?(fd|0)!=(ad&255|0):0)break;cd(j,46264,gd);rd=2378;break Qa}while(0);l=c[z+12>>2]|0;if((y|0)!=65&(l|0)!=0){c[id>>2]=(y|0)==33?46339:46346;c[id+4>>2]=E;c[id+8>>2]=0;cd(j,46302,id);rd=2378;break}q=(y|0)==65;if(q&(l|0)==0){c[jd>>2]=E;c[jd+4>>2]=0;cd(j,46352,jd);rd=2378;break}do if(s){h=q?33:y;if(N|0){rd=2319;break}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](36)|0;i=1;l=h;rd=2341;break}l=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){qd=c[14978]|0;pd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}m=Wa[c[29340>>2]&127](l)|0;if(!m)break Qa;l=Wa[c[29352>>2]&127](m)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){q=m;i=1;break}c[14987]=l;q=m;i=1}else{m=c[z+72>>2]|0;i=c[N+16>>2]|0;if(!m)l=-1e6;else{l=0;while(1)if((c[i+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}p=c[i+(l<<4)>>2]|0;if(x)n=c[i+16>>2]|0;else n=p;o=(l|0)==1;h=x|o?5:7;i=c[j>>2]|0;l=a[i+165>>0]|0;do if(!((l|t)<<24>>24)){m=c[i+312>>2]|0;if(!m)break;l=$a[m&127](c[i+316>>2]|0,h,w,r,n,c[j+240>>2]|0)|0;if((l|0)==1){cd(j,39216,ld);c[j+12>>2]=23;rd=2378;break Qa}if((l|2|0)!=2){cd(j,39231,md);c[j+12>>2]=1;rd=2378;break Qa}if(l|0){rd=2378;break Qa}i=c[j>>2]|0;l=a[i+165>>0]|0}while(0);m=o?34855:34585;do if(!(l<<24>>24)){if(a[u>>0]|0)break;l=c[i+312>>2]|0;if(!l)break;l=$a[l&127](c[i+316>>2]|0,18,m,0,p,c[j+240>>2]|0)|0;if((l|0)==1){cd(j,39216,nd);c[j+12>>2]=23;rd=2378;break Qa}if((l|2|0)==2)if(!l)break;else{rd=2378;break Qa}else{cd(j,39231,od);c[j+12>>2]=1;rd=2378;break Qa}}while(0);h=q?33:y;rd=2319}while(0);Ta:do if((rd|0)==2319){if(c[N+272>>2]|0){if(a[B>>0]|0){rd=2379;break Qa}}else{do if((e[N+276>>1]|0)>=36){l=N+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];i=N+284|0;c[i>>2]=(c[i>>2]|0)+1;i=0;l=h;rd=2341;break Ta}l=N+296|0;m=c[l>>2]|0;if(!m){l=N+292|0;break}else{c[l>>2]=c[m>>2];i=N+284|0;c[i>>2]=(c[i>>2]|0)+1;i=0;l=h;rd=2341;break Ta}}else l=N+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}m=_d(N,36,0)|0;i=0;l=h;rd=2341}while(0);if((rd|0)==2341)if(!m){rd=2378;break}else{q=m;h=l}p=q+4|0;I=p;J=I+32|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[q>>2]=w;n=c[C>>2]|0;Ua:do if(!n)i=0;else{o=(Eu(n)|0)+1|0;Va:do if(i){qd=Sv(o|0,0,-1,-1)|0;pd=L()|0;if(pd>>>0>0|(pd|0)==0&qd>>>0>2147483390){i=0;break Ua}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;rd=2367;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){qd=c[14978]|0;pd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){i=0;break Ua}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[N+272>>2]|0){if(a[B>>0]|0){i=0;break Ua}}else{do if(!(0<0|(0==0?(e[N+276>>1]|0)>>>0<o>>>0:0))){m=N+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];rd=N+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2367;break Va}m=N+296|0;l=c[m>>2]|0;if(!l){l=N+292|0;break}else{c[m>>2]=c[l>>2];rd=N+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2367;break Va}}else l=N+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(N,o,0)|0;rd=2367}while(0);if((rd|0)==2367)if(!l){i=0;break}ew(l|0,n|0,o|0)|0;i=l}while(0);c[p>>2]=i;c[q+20>>2]=c[(c[N+16>>2]|0)+(A<<4)+12>>2];c[q+24>>2]=c[z+72>>2];a[q+8>>0]=D;a[q+9>>0]=(h|0)==33?1:2;Wa:do if((d[u>>0]|0)>1){m=c[C>>2]|0;l=c[j+272>>2]|0;if(!l){m=0;l=F;break}while(1){if((c[l>>2]|0)==(m|0))break;l=c[l+12>>2]|0;if(!l){m=0;l=F;break Wa}}c[l>>2]=i;m=0;l=F}else{if(!F){m=F;l=0;break}m=F;l=dk(N,F,1,0)|0}while(0);c[q+12>>2]=l;c[q+16>>2]=k;c[j+236>>2]=q;qi(N,E);l=q;k=m;r=q;break Ka}else rd=2378;while(0);if((rd|0)==2378?N|0:0)rd=2379;do if((rd|0)==2379){if(c[N+480>>2]|0){Xd(N,w);rd=2387;break Ka}l=w;if((c[N+304>>2]|0)>>>0>l>>>0)break;if((c[N+308>>2]|0)>>>0<=l>>>0)break;rd=N+300|0;c[w>>2]=c[rd>>2];c[rd>>2]=w;rd=2387;break Ka}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](w);rd=2387;break Ka}else{rd=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);rd=2387;break Ka}}while(0);if((a[N+164>>0]|0)==1){rd=N+166|0;a[rd>>0]=a[rd>>0]|1;rd=2387}else rd=2387}else rd=2387}else rd=2387}while(0);do if((rd|0)==2387){qi(N,E);if(k){p=k+4|0;l=c[k>>2]|0;Xa:do if((c[p>>2]|0)>0){i=N+480|0;h=N+304|0;n=N+308|0;o=N+300|0;if(!N){m=0;while(1){l=c[l+(m<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=m+1|0;l=c[k>>2]|0;if((m|0)>=(c[p>>2]|0))break Xa}}m=0;do{l=c[l+(m<<3)>>2]|0;do if(l|0){if(c[i>>2]|0){Xd(N,l);break}rd=l;if((c[h>>2]|0)>>>0<=rd>>>0?(c[n>>2]|0)>>>0>rd>>>0:0){c[l>>2]=c[o>>2];c[o>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);m=m+1|0;l=c[k>>2]|0}while((m|0)<(c[p>>2]|0))}while(0);Ya:do if(l){do if(N|0){m=N+480|0;if(!(c[m>>2]|0)){i=l;if((c[N+304>>2]|0)>>>0>i>>>0)break;if((c[N+308>>2]|0)>>>0<=i>>>0)break;rd=N+300|0;c[l>>2]=c[rd>>2];c[rd>>2]=l}else Xd(N,l);l=m;rd=2420;break Ya}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);rd=2418;break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);rd=2418;break}}else rd=2418;while(0);if((rd|0)==2418)if(N){l=N+480|0;rd=2420}if((rd|0)==2420){if(c[l>>2]|0){Xd(N,k);l=0;k=F;r=0;break}rd=k;if((c[N+304>>2]|0)>>>0<=rd>>>0?(c[N+308>>2]|0)>>>0>rd>>>0:0){l=N+300|0;c[k>>2]=c[l>>2];c[l>>2]=k;l=0;k=F;r=0;break}}if(k)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);l=0;k=F;r=0;break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);l=0;k=F;r=0;break}else{l=0;k=F;r=0}}else{l=0;k=F;r=0}}while(0);if(k|0)ni(N,k);do if(!((l|0)==0|(c[j+236>>2]|0)!=0)){Xi(N,c[l+28>>2]|0);k=c[l>>2]|0;do if(k|0){if(N|0){if(c[N+480>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=c[l+4>>2]|0;do if(k|0){if(N|0){if(c[N+480>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=c[l+12>>2]|0;if(k|0)ni(N,k);k=c[l+16>>2]|0;do if(k|0){q=k+4|0;l=c[k>>2]|0;Za:do if((c[q>>2]|0)>0){h=N+480|0;n=N+304|0;o=N+308|0;p=N+300|0;if(!N){m=0;while(1){l=c[l+(m<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=m+1|0;l=c[k>>2]|0;if((m|0)>=(c[q>>2]|0))break Za}}i=0;do{l=c[l+(i<<3)>>2]|0;_a:do if(l|0){if(c[h>>2]|0){Xd(N,l);break}m=l;do if((c[n>>2]|0)>>>0<=m>>>0){if((c[o>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[p>>2];c[p>>2]=l;break _a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);i=i+1|0;l=c[k>>2]|0}while((i|0)<(c[q>>2]|0))}while(0);$a:do if(l){do if(N|0){m=N+480|0;if(!(c[m>>2]|0)){i=l;if((c[N+304>>2]|0)>>>0>i>>>0)break;if((c[N+308>>2]|0)>>>0<=i>>>0)break;j=N+300|0;c[l>>2]=c[j>>2];c[j>>2]=l}else Xd(N,l);l=m;rd=2487;break $a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);rd=2485;break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);rd=2485;break}}else rd=2485;while(0);if((rd|0)==2485)if(N){l=N+480|0;rd=2487}if((rd|0)==2487){if(c[l>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(r|0){if(N|0){if(c[N+480>>2]|0){Xd(N,r);break}j=r;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}}while(0);if(!(c[O>>2]|0)){qd=H;rd=c[qd+4>>2]|0;j=M;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break a}else{qd=K;rd=c[qd+4>>2]|0;j=M;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break a}}case 242:{c[td+4>>2]=e[td+2>>1];break}case 243:{c[td+-8>>2]=65;break}case 244:{c[td+16>>2]=33;break}case 246:case 245:{c[td+4>>2]=e[td+2>>1];c[td+8>>2]=0;break}case 247:{c[td+-20>>2]=122;c[td+-16>>2]=c[td+4>>2];break}case 315:case 267:case 248:{c[td+16>>2]=0;break}case 268:case 249:{c[td+-8>>2]=c[td+4>>2];break}case 250:{rd=td+-8|0;j=td+-20|0;c[(c[(c[j>>2]|0)+40>>2]|0)+36>>2]=c[rd>>2];c[(c[j>>2]|0)+40>>2]=c[rd>>2];break}case 251:{j=c[td+-8>>2]|0;c[j+40>>2]=j;break}case 252:{pd=td+4|0;qd=c[pd+4>>2]|0;rd=td+-20|0;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;cd(j,38526,i);break}case 253:{cd(j,38621,n);break}case 254:{cd(j,38705,o);break}case 255:{l=c[td+-20>>2]|0;m=c[td+-8>>2]|0;i=c[td+-68>>2]&255;h=td+-80|0;n=c[j>>2]|0;o=an(j,122,td+-56|0,c[h>>2]|0,c[td+4>>2]|0)|0;if(!o)k=m;else{if((d[j+200>>0]|0)<=1){j=gk(n,l,1)|0;c[o+20>>2]=j;if(!m){k=m;m=0}else{k=m;m=dk(n,m,1,0)|0}}else{c[o+20>>2]=l;l=0;k=0}c[o+16>>2]=m;a[o+1>>0]=i}if(l|0)ri(n,l);if(k|0)ni(n,k);c[h>>2]=o;break}case 256:{q=c[td+-32>>2]|0;l=c[td+-20>>2]|0;m=c[td+-68>>2]&255;r=c[td+-8>>2]|0;s=td+-80|0;t=c[j>>2]|0;u=an(j,120,td+-44|0,c[s>>2]|0,c[td+4>>2]|0)|0;do if(!u){do if(q|0){p=q+4|0;k=c[q>>2]|0;ab:do if((c[p>>2]|0)>0){i=t+480|0;h=t+304|0;n=t+308|0;o=t+300|0;if(!t){m=0;while(1){k=c[k+(m<<3)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);m=m+1|0;k=c[q>>2]|0;if((m|0)>=(c[p>>2]|0))break ab}}m=0;do{k=c[k+(m<<3)>>2]|0;do if(k|0){if(c[i>>2]|0){Xd(t,k);break}j=k;if((c[h>>2]|0)>>>0<=j>>>0?(c[n>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[o>>2];c[o>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);m=m+1|0;k=c[q>>2]|0}while((m|0)<(c[p>>2]|0))}while(0);bb:do if(k){do if(t|0){m=t+480|0;if(!(c[m>>2]|0)){i=k;if((c[t+304>>2]|0)>>>0>i>>>0)break;if((c[t+308>>2]|0)>>>0<=i>>>0)break;j=t+300|0;c[k>>2]=c[j>>2];c[j>>2]=k}else Xd(t,k);k=q;rd=2569;break bb}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);rd=2567;break}else{rd=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);rd=2567;break}}else rd=2567;while(0);if((rd|0)==2567)if(!t)k=q;else{m=t+480|0;k=q;rd=2569}if((rd|0)==2569){if(c[m>>2]|0){Xd(t,k);break}j=k;if((c[t+304>>2]|0)>>>0<=j>>>0?(c[t+308>>2]|0)>>>0>j>>>0:0){j=t+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(r){k=c[r>>2]|0;if(k|0)ri(t,k);k=c[r+4>>2]|0;if(k|0)ni(t,k);k=c[r+8>>2]|0;if(k|0)ri(t,k);k=c[r+12>>2]|0;if(k|0)ni(t,k);if(t|0){if(c[t+480>>2]|0){Xd(t,r);k=l;break}j=r;if((c[t+304>>2]|0)>>>0<=j>>>0?(c[t+308>>2]|0)>>>0>j>>>0:0){k=t+300|0;c[r>>2]=c[k>>2];c[k>>2]=r;k=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);k=l;break}else{k=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);k=l;break}}else k=l}else{if((d[j+200>>0]|0)>1)k=0;else{k=l;l=fk(t,l,1)|0}c[u+8>>2]=l;c[u+24>>2]=q;c[u+28>>2]=r;a[u+1>>0]=m}while(0);if(k|0)pi(t,k,1);c[s>>2]=u;break}case 257:{l=c[td+-8>>2]|0;m=td+-56|0;i=c[j>>2]|0;h=an(j,121,td+-32|0,c[m>>2]|0,c[td+4>>2]|0)|0;if(!h)k=l;else{if((d[j+200>>0]|0)<=1)if(!l){k=l;l=0}else{k=l;l=dk(i,l,1,0)|0}else k=0;c[h+16>>2]=l;a[h+1>>0]=11}if(k|0)ni(i,k);c[m>>2]=h;break}case 258:{p=c[j>>2]|0;i=c[td+-8>>2]|0;q=td+-20|0;o=c[q>>2]|0;h=c[td+4>>2]|0;cb:do if(!p){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](44)|0;rd=2630;break}k=Wa[c[29356>>2]&127](44)|0;if((c[14985]|0)>>>0<44)c[14985]=44;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=2633}else rd=2633}else rd=2631}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){rd=2631;break}}else{do if((e[p+276>>1]|0)>=44){l=p+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=p+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2630;break cb}l=p+296|0;k=c[l>>2]|0;if(!k){k=p+292|0;break}else{c[l>>2]=c[k>>2];rd=p+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2630;break cb}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(p,44,0)|0;rd=2630}while(0);if((rd|0)==2630)if(!k)rd=2631;else rd=2633;if((rd|0)==2631)if(!i)k=0;else{pi(p,i,1);k=0}else if((rd|0)==2633){I=k+2|0;J=I+42|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));a[k>>0]=-125;c[k+8>>2]=i;a[k+1>>0]=11;while(1)if(!(a[880+(d[o>>0]|0)>>0]&1))break;else o=o+1|0;l=h-o|0;db:do if((l|0)<=0)if(!o)l=0;else{m=l;rd=2640}else while(1){m=l+-1|0;if(!(a[880+(d[o+m>>0]|0)>>0]&1)){m=l;rd=2640;break db}if((l|0)>1)l=m;else{rd=2640;break}}while(0);eb:do if((rd|0)==2640){h=Sv(m|0,((m|0)<0)<<31>>31|0,1,0)|0;n=L()|0;fb:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))rd=2650;else{l=0;break eb}else{do if(!(n>>>0>0|((n|0)==0?h>>>0>(e[p+276>>1]|0)>>>0:0))){i=p+300|0;l=c[i>>2]|0;if(l|0){c[i>>2]=c[l>>2];j=p+284|0;c[j>>2]=(c[j>>2]|0)+1;break fb}i=p+296|0;l=c[i>>2]|0;if(!l){l=p+292|0;break}else{c[i>>2]=c[l>>2];j=p+284|0;c[j>>2]=(c[j>>2]|0)+1;break fb}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;rd=2650}while(0);if((rd|0)==2650)l=_d(p,h,n)|0;if(l){ew(l|0,o|0,m|0)|0;a[l+m>>0]=0;m=a[l>>0]|0;if(m<<24>>24){h=0;i=l;do{if(a[880+(m&255)>>0]&1)a[i>>0]=32;h=h+1|0;i=l+h|0;m=a[i>>0]|0}while(m<<24>>24!=0)}}else l=0}while(0);c[k+32>>2]=l}c[q>>2]=k;break}case 259:{k=ej(j,71,0,0)|0;c[td+-32>>2]=k;if(k|0)a[k+1>>0]=4;break}case 260:{k=oj(c[j>>2]|0,71,td+-8|0,1)|0;c[td+-56>>2]=k;if(k|0)a[k+1>>0]=c[td+-32>>2];break}case 261:{c[td+4>>2]=1;break}case 263:{c[td+4>>2]=3;break}case 264:{v=c[td+4>>2]|0;u=c[td+-8>>2]|0;w=c[j>>2]|0;gb:do if(!(a[w+81>>0]|0)){hb:do if(!(a[w+165>>0]|0)){i=j+4|0;h=w+24|0;n=(c[h>>2]&1|0)==0;o=w+16|0;qd=c[(c[o>>2]|0)+12>>2]|0;a[w+78>>0]=a[qd+77>>0]|0;if((b[qd+78>>1]&1)==0?(Da=eh(w,0,i,0)|0,(Da|0)!=0):0)k=Da;else rd=2670;ib:do if((rd|0)==2670){k=w+20|0;l=c[k>>2]|0;if((l|0)>1)do{m=l;l=l+-1|0;if((b[(c[(c[o>>2]|0)+(l<<4)+12>>2]|0)+78>>1]&1)==0?(Sa=eh(w,l,i,0)|0,Sa|0):0){k=Sa;break ib}}while((m|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[w+89>>0]|0))break hb;c[h>>2]=c[h>>2]|16;break hb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break gb}else k=w+20|0;while(0);t=c[v+12>>2]|0;s=c[v+16>>2]|0;q=c[k>>2]|0;if((q|0)>0){r=(t|0)==0;p=c[w+16>>2]|0;k=0;o=0;do{h=o^o>>>0<2;if(!r){m=c[p+(h<<4)>>2]|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(qd<<24>>24==0|(l|0)!=0)){i=t;do{m=m+1|0;i=i+1|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(l|0)!=0))}if(!l)rd=2687}else rd=2687;if((rd|0)==2687){rd=0;i=c[p+(h<<4)+12>>2]|0;h=c[i+52>>2]|0;if(!h){l=i+44|0;k=i+48|0}else{l=a[s>>0]|0;if(!(l<<24>>24))k=0;else{k=0;m=s;do{m=m+1|0;k=G(k+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[m>>0]|0}while(l<<24>>24!=0)}k=(k>>>0)%((c[i+40>>2]|0)>>>0)|0;l=h+(k<<3)|0;k=h+(k<<3)+4|0}l=c[l>>2]|0;jb:do if(!l)k=59292;else{n=d[208+(d[s>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;l=l+-1|0;i=c[k+12>>2]|0;qd=a[i>>0]|0;m=(d[208+(qd&255)>>0]|0)-n|0;if(!(qd<<24>>24==0|(m|0)!=0)){h=s;do{i=i+1|0;h=h+1|0;qd=a[i>>0]|0;m=(d[208+(qd&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(m|0)!=0))}if(!m)break jb;if(!l){k=59292;break}}}while(0);k=c[k+8>>2]|0;if(k){rd=2702;break}}o=o+1|0}while((o|0)<(q|0));if(k|0){jl(j,k);break}}if(!u){c[qc>>2]=v;c[qc+4>>2]=0;cd(j,46398,qc)}else hl(j,t);a[j+17>>0]=1}while(0);qi(w,v);break}case 265:{rd=c[td+-32>>2]|0;cn(j,24,30104,rd,rd,c[td+-8>>2]|0,c[td+4>>2]|0);break}case 266:{rd=c[td+4>>2]|0;cn(j,25,30144,rd,0,0,rd);break}case 269:{m=c[j>>2]|0;kb:do if(!(a[m+165>>0]|0)){i=j+4|0;h=m+24|0;n=(c[h>>2]&1|0)==0;o=m+16|0;pd=c[(c[o>>2]|0)+12>>2]|0;a[m+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(ga=eh(m,0,i,0)|0,(ga|0)!=0):0)k=ga;else rd=2715;lb:do if((rd|0)==2715){k=c[m+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[o>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Ga=eh(m,k,i,0)|0,Ga|0):0){k=Ga;break lb}}while((l|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[m+89>>0]|0))break kb;c[h>>2]=c[h>>2]|16;break kb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break a}while(0);k=c[j>>2]|0;w=k+20|0;l=c[w>>2]|0;if((l|0)>0){x=j+116|0;v=0;u=c[k+16>>2]|0;k=l;while(1){l=c[(c[u+12>>2]|0)+16>>2]|0;if(l){do{k=c[l+8>>2]|0;if((c[k+56>>2]|0)==0?(ec=c[k+8>>2]|0,ec|0):0){t=k+72|0;s=ec;do{m=c[t>>2]|0;if(!m)k=-1e6;else{i=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[i+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}r=c[x>>2]|0;r=(r|0)==0?j:r;m=r+84|0;i=c[m>>2]|0;q=1<<k;mb:do if((((i&q|0)==0?(c[m>>2]=i|q,(k|0)==1):0)?(fc=c[r>>2]|0,gc=fc+16|0,(c[(c[gc>>2]|0)+20>>2]|0)==0):0)?(a[r+199>>0]|0)==0:0){k=Pe(c[fc>>2]|0,0,fc,qd,0,542)|0;if(k|0){cd(r,32157,cc);c[r+12>>2]=k;break}pd=c[qd>>2]|0;c[(c[gc>>2]|0)+20>>2]=pd;k=c[fc+92>>2]|0;h=c[pd+4>>2]|0;c[h+4>>2]=c[pd>>2];do if(!(b[h+22>>1]&2)){n=h+32|0;o=h+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[n>>2]=k;i=h+80|0;k=c[i>>2]|0;if(!k)break;m=k+-4|0;c[i>>2]=m;k=m;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;pd=(c[14820]|0)+1|0;c[14820]=pd;c[14821]=(pd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](m)|0;rd=2750;break}else{k=Wa[c[29352>>2]&127](m)|0;rd=2750}while(0);do if((rd|0)==2750){rd=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{pd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[i>>2]=0}while(0);pd=Se(c[h>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((pd|0)!=7)break;k=fc+81|0;do if(!(a[k>>0]|0)){if(a[fc+82>>0]|0)break;a[k>>0]=1;if((c[fc+180>>2]|0)>0)c[fc+264>>2]=1;k=fc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[fc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break mb}while(0)}while(0);pd=r+80|0;c[pd>>2]=c[pd>>2]|q;bl(j,s,-1);s=c[s+20>>2]|0}while((s|0)!=0)}l=c[l>>2]|0}while((l|0)!=0);k=c[w>>2]|0}v=v+1|0;if((v|0)>=(k|0))break;else u=u+16|0}}break}case 270:{l=td+-8|0;s=td+4|0;v=c[j>>2]|0;nb:do if(!(a[v+165>>0]|0)){i=j+4|0;h=v+24|0;n=(c[h>>2]&1|0)==0;o=v+16|0;pd=c[(c[o>>2]|0)+12>>2]|0;a[v+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(Ea=eh(v,0,i,0)|0,(Ea|0)!=0):0)k=Ea;else rd=2770;ob:do if((rd|0)==2770){k=c[v+20>>2]|0;if((k|0)>1)do{m=k;k=k+-1|0;if((b[(c[(c[o>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Pa=eh(v,k,i,0)|0,Pa|0):0){k=Pa;break ob}}while((m|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[v+89>>0]|0))break nb;c[h>>2]=c[h>>2]|16;break nb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break a}while(0);k=c[j>>2]|0;do if(!(c[s>>2]|0)){q=qj(k,l)|0;if(!q)break a;p=a[v+78>>0]|0;h=c[v+392>>2]|0;if(!h){m=v+384|0;k=v+388|0}else{m=a[q>>0]|0;if(!(m<<24>>24))k=0;else{k=0;i=q;do{i=i+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[i>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[v+380>>2]|0)>>>0)|0;m=h+(k<<3)|0;k=h+(k<<3)+4|0}m=c[m>>2]|0;pb:do if(!m)k=59292;else{o=d[208+(d[q>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;h=c[k+12>>2]|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-o|0;if(!(pd<<24>>24==0|(i|0)!=0)){n=q;do{h=h+1|0;n=n+1|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(i|0)!=0))}if(!i)break pb;if(!m){k=59292;break}}}while(0);pd=c[k+8>>2]|0;if((pd|0)==0|(pd+(((p&255)+-1|0)*20|0)|0)==0){do if(v){if(c[v+480>>2]|0){Xd(v,q);break}pd=q;if((c[v+304>>2]|0)>>>0<=pd>>>0?(c[v+308>>2]|0)>>>0>pd>>>0:0){pd=v+300|0;c[q>>2]=c[pd>>2];c[pd>>2]=q}else rd=2818}else rd=2818;while(0);do if((rd|0)==2818)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{pd=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);k=c[j>>2]|0;if(!(c[td+8>>2]|0)){m=d[k+164>>0]|0;break}if(a[k+165>>0]|0){cd(j,39404,Vb);break a}k=wk(k,l)|0;if((k|0)>=0){l=s;m=k;break}c[Yb>>2]=l;cd(j,39421,Yb);break a}k=c[j>>2]|0;h=k+20|0;l=c[h>>2]|0;if((l|0)>0){i=0;m=c[k+16>>2]|0;while(1){k=c[(c[m+12>>2]|0)+16>>2]|0;if(!k)k=l;else{do{gn(j,c[k+8>>2]|0,q);k=c[k>>2]|0}while((k|0)!=0);k=c[h>>2]|0}i=i+1|0;if((i|0)>=(k|0))break;else{m=m+16|0;l=k}}}if(v|0){if(c[v+480>>2]|0){Xd(v,q);break a}j=q;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[q>>2]=c[j>>2];c[j>>2]=q;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break a}else{j=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break a}}else{if(!(c[td+8>>2]|0)){m=d[k+164>>0]|0;break}if(a[k+165>>0]|0){cd(j,39404,Qa);break a}k=wk(k,l)|0;if((k|0)<0){c[Va>>2]=l;cd(j,39421,Va);break a}else{l=s;m=k}}while(0);u=qj(v,l)|0;if(u|0){k=c[(c[v+16>>2]|0)+(m<<4)>>2]|0;l=Sd(v,u,k)|0;if(!l){r=hi(v,u,k)|0;do if(!(c[v+480>>2]|0)){pd=u;if((c[v+304>>2]|0)>>>0<=pd>>>0?(c[v+308>>2]|0)>>>0>pd>>>0:0){pd=v+300|0;c[u>>2]=c[pd>>2];c[pd>>2]=u;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{pd=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}else Xd(v,u);while(0);if(!r){cd(j,46778,dc);break a}q=c[j+116>>2]|0;q=(q|0)==0?j:q;k=q+84|0;l=c[k>>2]|0;p=1<<m;do if((((l&p|0)==0?(c[k>>2]=l|p,(m|0)==1):0)?(xc=c[q>>2]|0,lc=xc+16|0,(c[(c[lc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[xc>>2]|0,0,xc,qd,0,542)|0;if(k|0){cd(q,32157,jc);c[q+12>>2]=k;break}qd=c[qd>>2]|0;c[(c[lc>>2]|0)+20>>2]=qd;k=c[xc+92>>2]|0;i=c[qd+4>>2]|0;c[i+4>>2]=c[qd>>2];if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025?(k+-1&k|0)==0:0){c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2903;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2903}while(0);do if((rd|0)==2903){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);rd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((rd|0)==7){k=xc+81|0;do if(!(a[k>>0]|0)){if(a[xc+82>>0]|0)break;a[k>>0]=1;if((c[xc+180>>2]|0)>0)c[xc+264>>2]=1;k=xc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[xc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break}}}while(0);rd=q+80|0;c[rd>>2]=c[rd>>2]|p;bl(j,r,-1);break a}if((c[l+56>>2]|0)==0?(r=c[l+8>>2]|0,(r|0)!=0):0){s=l+72|0;t=j+116|0;do{l=c[s>>2]|0;if(!l)k=-1e6;else{m=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0}q=c[t>>2]|0;q=(q|0)==0?j:q;l=q+84|0;m=c[l>>2]|0;p=1<<k;qb:do if((((m&p|0)==0?(c[l>>2]=m|p,(k|0)==1):0)?(Rc=c[q>>2]|0,Sc=Rc+16|0,(c[(c[Sc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[Rc>>2]|0,0,Rc,qd,0,542)|0;if(k|0){cd(q,32157,Pc);c[q+12>>2]=k;break}pd=c[qd>>2]|0;c[(c[Sc>>2]|0)+20>>2]=pd;k=c[Rc+92>>2]|0;i=c[pd+4>>2]|0;c[i+4>>2]=c[pd>>2];do if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;pd=(c[14820]|0)+1|0;c[14820]=pd;c[14821]=(pd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2856;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2856}while(0);do if((rd|0)==2856){rd=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{pd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);pd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((pd|0)!=7)break;k=Rc+81|0;do if(!(a[k>>0]|0)){if(a[Rc+82>>0]|0)break;a[k>>0]=1;if((c[Rc+180>>2]|0)>0)c[Rc+264>>2]=1;k=Rc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Rc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break qb}while(0)}while(0);pd=q+80|0;c[pd>>2]=c[pd>>2]|p;bl(j,r,-1);r=c[r+20>>2]|0}while((r|0)!=0);if(v|0)rd=2871}else rd=2871;if((rd|0)==2871){if(c[v+480>>2]|0){Xd(v,u);break a}j=u;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[u>>2]=c[j>>2];c[j>>2]=u;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break a}else{j=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break a}}break}case 271:{zj(j,0,0);break}case 272:{zj(j,td+-8|0,td+4|0);break}case 273:{w=c[td+-32>>2]|0;i=td+4|0;x=c[j>>2]|0;y=x+24|0;z=c[y>>2]|0;do if(!(a[x+81>>0]|0)){l=c[w+8>>2]|0;if(!l)k=w+12|0;else{m=c[x+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}s=bd(j,0,c[w+16>>2]|0,c[k>>2]|0)|0;if(s){l=c[s+72>>2]|0;if(!l)u=-1e6;else{m=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){u=k;break}else k=k+1|0}v=c[(c[x+16>>2]|0)+(u<<4)>>2]|0;c[y>>2]=c[y>>2]|2;t=qj(x,i)|0;if(t){rb:do if(!(Sd(x,t,v)|0)){if(hi(x,t,v)|0){c[ib>>2]=t;cd(j,46940,ib);rd=3010;break}if((on(j,s)|0)==0?(vk(j,t)|0)==0:0){l=c[s>>2]|0;if(c[s+12>>2]|0){c[wb>>2]=l;cd(j,46999,wb);rd=3010;break}k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(Gb=c[k+312>>2]|0,Gb|0):0){k=$a[Gb&127](c[k+316>>2]|0,26,v,l,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Hb);c[j+12>>2]=23;rd=3010;break rb}if((k|2|0)==2)if(!k)break;else{rd=3010;break rb}else{cd(j,39231,Ib);c[j+12>>2]=1;rd=3010;break rb}}while(0);if(!(Sk(j,s)|0)){if(!(c[s+56>>2]|0))q=0;else{k=c[s+64>>2]|0;sb:do if(!k)k=0;else while(1){if((c[k>>2]|0)==(x|0))break sb;k=c[k+24>>2]|0;if(!k){k=0;break}}while(0);q=(c[(c[c[k+8>>2]>>2]|0)+76>>2]|0)==0?0:k}r=j+8|0;k=c[r>>2]|0;h=j+116|0;tb:do if(!k){i=c[j>>2]|0;do if(!(c[h>>2]|0)){if(b[i+76>>1]&8)break;a[j+23>>0]=1}while(0);ub:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=2968;else break tb;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break ub}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break ub}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=2968}while(0);if((rd|0)==2968)m=_d(i,224,0)|0;if(!m)break;I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[r>>2]=m;Di(m,61,0,1,0)|0;p=m;rd=2973}else{p=k;rd=2973}while(0);vb:do if((rd|0)==2973){h=c[h>>2]|0;a[((h|0)==0?j:h)+21>>0]=1;h=c[s>>2]|0;m=a[h>>0]|0;if((h|0)!=(-1|0)&m<<24>>24!=0){l=h;k=0;do{i=l+1|0;if((m&255)>191){l=i;while(1){m=a[l>>0]|0;if((m&-64)<<24>>24==-128)l=l+1|0;else break}}else{l=i;m=a[i>>0]|0}k=k+1|0}while(m<<24>>24!=0&(l|0)!=(-1|0))}else k=0;n=(u|0)==1;o=n&1;c[tc>>2]=v;c[tc+4>>2]=34585;c[tc+8>>2]=v;c[tc+12>>2]=h;c[tc+16>>2]=t;c[tc+20>>2]=o;c[tc+24>>2]=h;Ak(j,47026,tc);c[uc>>2]=v;c[uc+4>>2]=34585;c[uc+8>>2]=t;c[uc+12>>2]=t;c[uc+16>>2]=t;c[uc+20>>2]=k;c[uc+24>>2]=h;Ak(j,47187,uc);if(Sd(x,39382,v)|0){qd=c[s>>2]|0;c[vc>>2]=v;c[vc+4>>2]=t;c[vc+8>>2]=qd;Ak(j,47464,vc)}if(!n){c[wc>>2]=v;c[wc+4>>2]=h;c[wc+8>>2]=t;c[wc+12>>2]=h;c[wc+16>>2]=v;c[wc+20>>2]=t;Ak(j,47522,wc)}do if(q|0){i=j+44|0;l=(c[i>>2]|0)+1|0;c[i>>2]=l;i=p+108|0;k=c[i>>2]|0;m=p+112|0;if((c[m>>2]|0)>(k|0)){c[i>>2]=k+1;qd=c[p+104>>2]|0;a[qd+(k*20|0)>>0]=110;b[qd+(k*20|0)+2>>1]=0;c[qd+(k*20|0)+4>>2]=0;c[qd+(k*20|0)+8>>2]=l;c[qd+(k*20|0)+12>>2]=0;c[qd+(k*20|0)+16>>2]=0;a[qd+(k*20|0)+1>>0]=0}else k=Di(p,110,0,l,0)|0;if(!(a[(c[p>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[i>>2]|0)+-1|0;Ei(p,(c[p+104>>2]|0)+(k*20|0)|0,t,0)}k=c[i>>2]|0;if((c[m>>2]|0)>(k|0)){c[i>>2]=k+1;qd=c[p+104>>2]|0;a[qd+(k*20|0)>>0]=-91;b[qd+(k*20|0)+2>>1]=0;c[qd+(k*20|0)+4>>2]=l;c[qd+(k*20|0)+8>>2]=0;c[qd+(k*20|0)+12>>2]=0;c[qd+(k*20|0)+16>>2]=0;a[qd+(k*20|0)+1>>0]=0}else k=Di(p,165,l,0,0)|0;if(a[(c[p>>2]|0)+81>>0]|0)break;if((k|0)<0)k=(c[i>>2]|0)+-1|0;l=c[p+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=q;a[m>>0]=-12;qd=q+12|0;c[qd>>2]=(c[qd>>2]|0)+1;break}else{Ei(p,l+(k*20|0)|0,q,-12);break}}while(0);i=c[r>>2]|0;do if(!i){c[Jc>>2]=v;c[Jc+4>>2]=34585;c[Jc+8>>2]=v;c[Jc+12>>2]=o;Ak(j,47804,Jc);if(n)break vb}else{k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(u<<4)+12>>2]>>2]|0)+1|0;l=i+108|0;m=c[l>>2]|0;if((c[i+112>>2]|0)>(m|0)){c[l>>2]=m+1;qd=c[i+104>>2]|0;a[qd+(m*20|0)>>0]=95;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=u;c[qd+(m*20|0)+8>>2]=1;c[qd+(m*20|0)+12>>2]=k;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else Di(i,95,u,1,k)|0;Bk(c[r>>2]|0,u,0);if(n){c[Tc>>2]=v;c[Tc+4>>2]=34585;c[Tc+8>>2]=v;c[Tc+12>>2]=o;Ak(j,47804,Tc);break vb}else{Bk(c[r>>2]|0,1,0);c[Uc>>2]=v;c[Uc+4>>2]=34585;c[Uc+8>>2]=v;c[Uc+12>>2]=o;Ak(j,47804,Uc);break}}while(0);c[Vc>>2]=34585;c[Vc+4>>2]=v;Ak(j,47948,Vc)}while(0);qi(x,w);if(x|0)rd=3013}else rd=3010}else rd=3010}else{c[hb>>2]=t;cd(j,46940,hb);rd=3010}while(0);if((rd|0)==3010){qi(x,w);rd=3013}if((rd|0)==3013){if(c[x+480>>2]|0){Xd(x,t);break}j=t;if((c[x+304>>2]|0)>>>0<=j>>>0?(c[x+308>>2]|0)>>>0>j>>>0:0){j=x+300|0;c[t>>2]=c[j>>2];c[j>>2]=t;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{j=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else rd=3011}else rd=3011}else rd=3011;while(0);if((rd|0)==3011)qi(x,w);c[y>>2]=z;break}case 274:{h=td+-8|0;o=td+-4|0;c[o>>2]=(c[j+188>>2]|0)-(c[h>>2]|0)+(c[j+192>>2]|0);s=c[j>>2]|0;if((c[j+36>>2]|0)==0?(Nb=s+81|0,(a[Nb>>0]|0)==0):0){r=c[j+228>>2]|0;l=c[r+72>>2]|0;m=c[s+16>>2]|0;if(!l)t=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){t=k;break}else k=k+1|0}p=c[m+(t<<4)>>2]|0;q=(c[r>>2]|0)+16|0;m=c[r+4>>2]|0;i=(b[r+42>>1]|0)+-1|0;l=c[m+(i<<4)+4>>2]|0;k=Sd(s,q,p)|0;k=c[k>>2]|0;do if(((a[s+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(db=c[s+312>>2]|0,db|0):0){k=$a[db&127](c[s+316>>2]|0,26,p,k,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,eb);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,fb);c[j+12>>2]=1;break a}}while(0);if(!l)l=0;else l=(a[c[l+12>>2]>>0]|0)==114?0:l;if(a[m+(i<<4)+15>>0]&1){cd(j,48091,jb);break a}if(c[r+8>>2]|0){cd(j,48123,kb);break a}if(!(0==0?(c[s+32>>2]&16384|0)==0:0)?(l|0)!=0&(c[r+16>>2]|0)!=0:0){cd(j,48150,lb);break a}k=(l|0)!=0;if(!(k|(a[m+(i<<4)+12>>0]|0)==0)){cd(j,48209,xb);break a}wb:do if(k){c[qd>>2]=0;do if(!(Wj(s,l,1,65,qd)|0)){m=c[qd>>2]|0;if(!m){cd(j,48262,Ab);break}if(!((b[m+8>>1]&9216)==0?!(c[m+24>>2]|0):0))Cg(m);k=c[m+32>>2]|0;do if(!k)rd=3059;else{if(c[k+480>>2]|0){Xd(k,m);break}l=m;if((c[k+304>>2]|0)>>>0>l>>>0){rd=3059;break}if((c[k+308>>2]|0)>>>0<=l>>>0){rd=3059;break}qd=k+300|0;c[m>>2]=c[qd>>2];c[qd>>2]=m}while(0);do if((rd|0)==3059)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{qd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);break wb}while(0);break a}while(0);h=c[h>>2]|0;n=c[o>>2]|0;xb:do if(h|0){m=Sv(n|0,0,1,0)|0;i=L()|0;yb:do if(c[s+272>>2]|0)if(!(a[Nb>>0]|0))rd=3075;else break xb;else{do if(0<0|(0==0?n>>>0<(e[s+276>>1]|0)>>>0:0)){k=s+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];qd=s+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break yb}k=s+296|0;l=c[k>>2]|0;if(!l){k=s+292|0;break}else{c[k>>2]=c[l>>2];qd=s+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break yb}}else k=s+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3075}while(0);if((rd|0)==3075)l=_d(s,m,i)|0;if(l|0){ew(l|0,h|0,n|0)|0;a[l+n>>0]=0;k=(c[o>>2]|0)+-1|0;m=s+24|0;i=c[m>>2]|0;if((k|0)>0){k=l+k|0;do{qd=a[k>>0]|0;if(qd<<24>>24!=59?(a[880+(qd&255)>>0]&1)==0:0)break;a[k>>0]=0;k=k+-1|0}while(k>>>0>l>>>0);k=c[m>>2]|0}else k=i;c[m>>2]=k|2;qd=c[r+52>>2]|0;c[Zb>>2]=p;c[Zb+4>>2]=34585;c[Zb+8>>2]=qd;c[Zb+12>>2]=l;c[Zb+16>>2]=qd+1;c[Zb+20>>2]=q;Ak(j,48308,Zb);zb:do if(!(c[s+480>>2]|0)){k=l;do if((c[s+304>>2]|0)>>>0<=k>>>0){if((c[s+308>>2]|0)>>>0<=k>>>0)break;qd=s+300|0;c[l>>2]=c[qd>>2];c[qd>>2]=l;break zb}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{qd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(s,l);while(0);c[m>>2]=i}}while(0);p=j+8|0;k=c[p>>2]|0;Ab:do if(!k){m=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;Bb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3106;else break Ab;else{do if((e[m+276>>1]|0)>=224){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Bb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Bb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3106}while(0);if((rd|0)==3106)k=_d(m,224,0)|0;if(k|0){I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=m;l=m+4|0;m=c[l>>2]|0;if(m|0)c[m+4>>2]=k;c[k+8>>2]=m;c[k+4>>2]=0;c[l>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[p>>2]=k;Di(k,61,0,1,0)|0;rd=3111}}else rd=3111;while(0);do if((rd|0)==3111){o=j+19|0;l=a[o>>0]|0;if(!(l<<24>>24)){rd=j+44|0;n=(c[rd>>2]|0)+1|0;c[rd>>2]=n}else{n=l+-1<<24>>24;a[o>>0]=n;n=c[j+148+((n&255)<<2)>>2]|0}i=k+108|0;l=c[i>>2]|0;h=k+112|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=94;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=t;c[rd+(l*20|0)+8>>2]=n;c[rd+(l*20|0)+12>>2]=2;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,94,t,n,2)|0;l=1<<t;rd=k+152|0;c[rd>>2]=c[rd>>2]|l;if((t|0)!=1?a[(c[(c[(c[k>>2]|0)+16>>2]|0)+(t<<4)+4>>2]|0)+9>>0]|0:0){rd=k+156|0;c[rd>>2]=c[rd>>2]|l}l=c[i>>2]|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=83;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=n;c[rd+(l*20|0)+8>>2]=-2;c[rd+(l*20|0)+12>>2]=0;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,83,n,-2,0)|0;l=c[i>>2]|0;m=l+2|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=47;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=n;c[rd+(l*20|0)+8>>2]=m;c[rd+(l*20|0)+12>>2]=0;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,47,n,m,0)|0;l=c[i>>2]|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=95;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=t;c[rd+(l*20|0)+8>>2]=2;c[rd+(l*20|0)+12>>2]=3;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,95,t,2,3)|0;if(!n)break;k=a[o>>0]|0;if((k&255)>=8)break;a[o>>0]=k+1<<24>>24;c[j+148+((k&255)<<2)>>2]=n}while(0);i=c[p>>2]|0;if(i|0){k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(t<<4)+12>>2]>>2]|0)+1|0;l=i+108|0;m=c[l>>2]|0;if((c[i+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[i+104>>2]|0;a[j+(m*20|0)>>0]=95;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=t;c[j+(m*20|0)+8>>2]=1;c[j+(m*20|0)+12>>2]=k;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(i,95,t,1,k)|0;Bk(c[p>>2]|0,t,0);if((t|0)!=1)Bk(c[p>>2]|0,1,0)}}break}case 275:{D=j+24|0;a[D>>0]=(a[D>>0]|0)+1<<24>>24;D=c[j>>2]|0;E=D+272|0;c[E>>2]=(c[E>>2]|0)+1;F=c[td+4>>2]|0;H=D+81|0;Cb:do if(!(a[H>>0]|0)){l=c[F+8>>2]|0;if(!l)k=F+12|0;else{m=c[D+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}C=bd(j,0,c[F+16>>2]|0,c[k>>2]|0)|0;if(C|0){if(c[C+56>>2]|0){cd(j,48417,Ia);break}if(c[C+12>>2]|0){cd(j,48451,Ja);break}if(!(on(j,C)|0)){l=c[C+72>>2]|0;if(!l)A=-1e6;else{m=c[D+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){A=k;break}else k=k+1|0}B=(D|0)==0;Db:do if(B){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](80)|0;rd=3176;break}k=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break Cb;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[E>>2]|0){if(a[H>>0]|0)break Cb}else{do if((e[D+276>>1]|0)>=80){l=D+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3176;break Db}l=D+296|0;k=c[l>>2]|0;if(!k){k=D+292|0;break}else{c[l>>2]=c[k>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3176;break Db}}else k=D+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(D,80,0)|0;rd=3176}while(0);if((rd|0)==3176)if(!k)break;I=k;J=I+80|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[j+228>>2]=k;y=k+32|0;c[y>>2]=1;h=b[C+42>>1]|0;z=k+42|0;b[z>>1]=h;h=((((h<<16>>16)+-1|0)/8|0)<<7)+128|0;Eb:do if(B){j=Sv(h|0,0,-1,-1)|0;qd=L()|0;if(!(qd>>>0>0|(qd|0)==0&j>>>0>2147483390)){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](h)|0;rd=3201;break}l=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){j=c[14978]|0;qd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(l){m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;rd=3202}else rd=3202}else l=0}else l=0}else{if(c[E>>2]|0){if(a[H>>0]|0){l=0;break}}else{do if(!(0<0|(0==0?(e[D+276>>1]|0)>>>0<h>>>0:0))){m=D+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3201;break Eb}m=D+296|0;l=c[m>>2]|0;if(!l){l=D+292|0;break}else{c[m>>2]=c[l>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3201;break Eb}}else l=D+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(D,h,0)|0;rd=3201}while(0);if((rd|0)==3201)if(!l)l=0;else rd=3202;if((rd|0)==3202)gw(l|0,0,h|0)|0;x=k+4|0;c[x>>2]=l;c[kc>>2]=c[C>>2];j=dd(D,48481,kc)|0;c[k>>2]=j;l=c[x>>2]|0;if(!((j|0)==0|(l|0)==0)){ew(l|0,c[C+4>>2]|0,b[z>>1]<<4|0)|0;if((b[z>>1]|0)>0){p=D+276|0;q=D+288|0;r=D+300|0;s=D+296|0;t=D+284|0;u=D+292|0;o=0;do{v=c[x>>2]|0;w=v+(o<<4)|0;h=c[w>>2]|0;Fb:do if(!h)l=0;else{n=(Eu(h)|0)+1|0;Gb:do if(B){j=Sv(n|0,0,-1,-1)|0;qd=L()|0;if(qd>>>0>0|(qd|0)==0&j>>>0>2147483390){l=0;break Fb}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](n)|0;rd=3229;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){j=c[14978]|0;qd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Fb}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[E>>2]|0){if(a[H>>0]|0){l=0;break Fb}}else{do if(0<0|(0==0?(e[p>>1]|0)>>>0<n>>>0:0))l=q;else{l=c[r>>2]|0;if(l|0){c[r>>2]=c[l>>2];c[t>>2]=(c[t>>2]|0)+1;rd=3229;break Gb}l=c[s>>2]|0;if(!l){l=u;break}c[s>>2]=c[l>>2];c[t>>2]=(c[t>>2]|0)+1;rd=3229;break Gb}while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(D,n,0)|0;rd=3229}while(0);if((rd|0)==3229){rd=0;if(!l){l=0;break}}ew(l|0,h|0,n|0)|0}while(0);c[w>>2]=l;c[v+(o<<4)+8>>2]=0;c[v+(o<<4)+4>>2]=0;o=o+1|0}while((o|0)<(b[z>>1]|0))}c[k+72>>2]=c[(c[D+16>>2]|0)+(A<<4)+12>>2];c[k+52>>2]=c[C+52>>2];c[y>>2]=1}}}}while(0);qi(D,F);break}case 276:{u=c[td+-56>>2]|0;i=td+-20|0;p=td+4|0;v=c[j>>2]|0;l=c[u+8>>2]|0;if(!l)k=u+12|0;else{m=c[v+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}r=bd(j,0,c[u+16>>2]|0,c[k>>2]|0)|0;Hb:do if(r|0?(on(j,r)|0)==0:0){k=(c[r+56>>2]|0)==0?((c[r+12>>2]|0)==0?0:39579):48814;if(k|0){rd=c[r>>2]|0;c[Ma>>2]=k;c[Ma+4>>2]=rd;cd(j,48828,Ma);break}l=c[r+72>>2]|0;m=c[v+16>>2]|0;if(!l)t=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){t=k;break}else k=k+1|0}s=c[m+(t<<4)>>2]|0;k=c[r>>2]|0;l=c[j>>2]|0;do if(((a[l+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(zb=c[l+312>>2]|0,zb|0):0){k=$a[zb&127](c[l+316>>2]|0,26,s,k,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Bb);c[j+12>>2]=23;break Hb}if((k|2|0)==2)if(!k)break;else break Hb;else{cd(j,39231,Db);c[j+12>>2]=1;break Hb}}while(0);q=qj(v,i)|0;if(q|0){qd=b[r+42>>1]|0;o=qd<<16>>16;Ib:do if(qd<<16>>16>0){h=c[r+4>>2]|0;n=d[208+(d[q>>0]|0)>>0]|0;k=0;do{m=c[h+(k<<4)>>2]|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-n|0;if(!(qd<<24>>24==0|(l|0)!=0)){i=q;do{m=m+1|0;i=i+1|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(l|0)!=0))}if(!l)break Ib;k=k+1|0}while((k|0)<(o|0))}else k=0;while(0);Jb:do if((k|0)!=(o|0)){l=c[j+116>>2]|0;a[((l|0)==0?j:l)+21>>0]=1;l=qj(v,p)|0;if(!l)l=0;else{h=a[880+(d[c[p>>2]>>0]|0)>>0]&-128&255;n=c[r>>2]|0;o=(t|0)==1;p=o&1;c[Wb>>2]=s;c[Wb+4>>2]=34585;c[Wb+8>>2]=s;c[Wb+12>>2]=n;c[Wb+16>>2]=k;c[Wb+20>>2]=l;c[Wb+24>>2]=h;c[Wb+28>>2]=p;c[Wb+32>>2]=n;Ak(j,48500,Wb);n=c[r>>2]|0;c[Xb>>2]=34585;c[Xb+4>>2]=s;c[Xb+8>>2]=n;c[Xb+12>>2]=k;c[Xb+16>>2]=l;c[Xb+20>>2]=h;Ak(j,48694,Xb);h=j+8|0;n=c[h>>2]|0;do if(!n){c[_b>>2]=s;c[_b+4>>2]=34585;c[_b+8>>2]=s;c[_b+12>>2]=p;Ak(j,47804,_b);if(o)break Jb}else{k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(t<<4)+12>>2]>>2]|0)+1|0;m=n+108|0;i=c[m>>2]|0;if((c[n+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[n+104>>2]|0;a[qd+(i*20|0)>>0]=95;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=t;c[qd+(i*20|0)+8>>2]=1;c[qd+(i*20|0)+12>>2]=k;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0}else Di(n,95,t,1,k)|0;Bk(c[h>>2]|0,t,0);if(o){c[$b>>2]=s;c[$b+4>>2]=34585;c[$b+8>>2]=s;c[$b+12>>2]=p;Ak(j,47804,$b);break Jb}else{Bk(c[h>>2]|0,1,0);c[ac>>2]=s;c[ac+4>>2]=34585;c[ac+8>>2]=s;c[ac+12>>2]=p;Ak(j,47804,ac);break}}while(0);c[bc>>2]=34585;c[bc+4>>2]=s;Ak(j,47948,bc)}}else{c[Ub>>2]=q;cd(j,31333,Ub);l=0}while(0);qi(v,u);k=(v|0)==0;do if(!k){if(c[v+480>>2]|0){Xd(v,q);break}j=q;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[q>>2]=c[j>>2];c[j>>2]=q}else rd=3281}else rd=3281;while(0);do if((rd|0)==3281)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{j=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);if(!l)break a;if(!k){if(c[v+480>>2]|0){Xd(v,l);break a}j=l;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break a}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break a}}}while(0);qi(v,u);break}case 277:{Aj(j,0);break}case 278:{Aj(j,td+4|0);break}case 279:{o=td+4|0;bj(j,td+-32|0,td+-20|0,0,0,1,c[td+-44>>2]|0);r=c[j+228>>2]|0;if(r|0){q=c[j>>2]|0;h=qj(q,o)|0;p=r+56|0;rd=c[p>>2]|0;m=(rd<<2)+8|0;i=c[j>>2]|0;if((rd+3|0)>=(c[i+116>>2]|0)){c[na>>2]=c[r>>2];cd(j,38221,na)}n=r+60|0;k=c[n>>2]|0;Kb:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=3317;break}}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3316;break Kb}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3316;break Kb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,m,0)|0;rd=3316}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3326;break}k=Zd(i,k,m,0)|0;rd=3316;break}k=Zd(i,k,m,0)|0;rd=3316}while(0);if((rd|0)==3316)if(!k)rd=3317;else rd=3326;do if((rd|0)==3317){if(h|0){if(c[i+480>>2]|0){Xd(i,h);break}qd=h;if((c[i+304>>2]|0)>>>0<=qd>>>0?(c[i+308>>2]|0)>>>0>qd>>>0:0){qd=i+300|0;c[h>>2]=c[qd>>2];c[qd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{qd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}else if((rd|0)==3326){pd=c[p>>2]|0;qd=pd+1|0;c[p>>2]=qd;c[k+(pd<<2)>>2]=h;c[k+(qd<<2)>>2]=0;c[n>>2]=k}while(0);qd=c[p>>2]|0;m=(qd<<2)+8|0;i=c[j>>2]|0;if((qd+3|0)>=(c[i+116>>2]|0)){c[Eb>>2]=c[r>>2];cd(j,38221,Eb)}k=c[n>>2]|0;Lb:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Jb=i+284|0;c[Jb>>2]=(c[Jb>>2]|0)+1;Jb=l;rd=3346;break Lb}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];Jb=i+284|0;c[Jb>>2]=(c[Jb>>2]|0)+1;Jb=l;rd=3346;break Lb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Jb=_d(i,m,0)|0;rd=3346}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3347;break}Jb=Zd(i,k,m,0)|0;rd=3346;break}Jb=Zd(i,k,m,0)|0;rd=3346}while(0);if((rd|0)==3346?Jb|0:0){k=Jb;rd=3347}if((rd|0)==3347){pd=c[p>>2]|0;qd=pd+1|0;c[p>>2]=qd;c[k+(pd<<2)>>2]=0;c[k+(qd<<2)>>2]=0;c[n>>2]=k}i=c[r>>2]|0;Mb:do if(!i)h=0;else{h=(Eu(i)|0)+1|0;Nb:do if(!q){qd=Sv(h|0,0,-1,-1)|0;pd=L()|0;if(pd>>>0>0|(pd|0)==0&qd>>>0>2147483390){h=0;break Mb}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](h)|0;rd=3373;break}k=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){h=0;break Mb}l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){h=0;break Mb}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<h>>>0:0))){l=q+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=q+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3373;break Nb}l=q+296|0;k=c[l>>2]|0;if(!k){k=q+292|0;break}else{c[l>>2]=c[k>>2];rd=q+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3373;break Nb}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(q,h,0)|0;rd=3373}while(0);if((rd|0)==3373)if(!k){h=0;break}ew(k|0,i|0,h|0)|0;h=k}while(0);rd=c[p>>2]|0;m=(rd<<2)+8|0;i=c[j>>2]|0;if((rd+3|0)>=(c[i+116>>2]|0)){c[ic>>2]=c[r>>2];cd(j,38221,ic)}k=c[n>>2]|0;Ob:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=3395;break}}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3394;break Ob}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3394;break Ob}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,m,0)|0;rd=3394}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0<m>>>0:0))){rd=3404;break}k=Zd(i,k,m,0)|0;rd=3394;break}k=Zd(i,k,m,0)|0;rd=3394}while(0);if((rd|0)==3394)if(!k)rd=3395;else rd=3404;do if((rd|0)==3395){if(h|0){if(c[i+480>>2]|0){Xd(i,h);break}rd=h;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){rd=i+300|0;c[h>>2]=c[rd>>2];c[rd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{rd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}else if((rd|0)==3404){qd=c[p>>2]|0;rd=qd+1|0;c[p>>2]=rd;c[k+(qd<<2)>>2]=h;c[k+(rd<<2)>>2]=0;c[n>>2]=k}while(0);c[j+184>>2]=(c[o>>2]|0)+(c[td+8>>2]|0)-(c[j+180>>2]|0);h=c[n>>2]|0;if(h|0){m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[q+16>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}i=c[r>>2]|0;l=c[h>>2]|0;m=c[j>>2]|0;k=c[(c[m+16>>2]|0)+(k<<4)>>2]|0;if(((a[m+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(zc=c[m+312>>2]|0,zc|0):0){k=$a[zc&127](c[m+316>>2]|0,29,i,l,k,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Bc);c[j+12>>2]=23;break a}if((k|2|0)!=2){cd(j,39231,Cc);c[j+12>>2]=1}}}}break}case 280:{p=j+244|0;n=c[p>>2]|0;do if(n|0?(ob=c[j+228>>2]|0,ob|0):0){o=c[j+248>>2]|0;m=c[j>>2]|0;i=Sv(o|0,((o|0)<0)<<31>>31|0,1,0)|0;h=L()|0;Pb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3428;else n=0;else{do if(!(h>>>0>0|((h|0)==0?i>>>0>(e[m+276>>1]|0)>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3429;break Pb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3429;break Pb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3428}while(0);if((rd|0)==3428){k=_d(m,i,h)|0;rd=3429}if((rd|0)==3429)if(!k)n=0;else{ew(k|0,n|0,o|0)|0;a[k+o>>0]=0;n=k}o=ob+56|0;qd=c[o>>2]|0;i=(qd<<2)+8|0;h=c[j>>2]|0;if((qd+3|0)>=(c[h+116>>2]|0)){c[mb>>2]=c[ob>>2];cd(j,38221,mb)}m=ob+60|0;k=c[m>>2]|0;Qb:do if(!k){if(c[h+272>>2]|0){if(a[h+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[h+276>>1]|0)>>>0<i>>>0:0))){k=h+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Fb=h+284|0;c[Fb>>2]=(c[Fb>>2]|0)+1;Fb=l;rd=3450;break Qb}k=h+296|0;l=c[k>>2]|0;if(!l){k=h+292|0;break}else{c[k>>2]=c[l>>2];Fb=h+284|0;c[Fb>>2]=(c[Fb>>2]|0)+1;Fb=l;rd=3450;break Qb}}else k=h+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Fb=_d(h,i,0)|0;rd=3450}else{rd=k;if((c[h+304>>2]|0)>>>0<=rd>>>0?(c[h+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[h+276>>1]|0)>>>0<i>>>0:0))){rd=3460;break}Fb=Zd(h,k,i,0)|0;rd=3450;break}Fb=Zd(h,k,i,0)|0;rd=3450}while(0);if((rd|0)==3450?Fb|0:0){k=Fb;rd=3460}if((rd|0)==3460){qd=c[o>>2]|0;rd=qd+1|0;c[o>>2]=rd;c[k+(qd<<2)>>2]=n;c[k+(rd<<2)>>2]=0;c[m>>2]=k;break}if(n|0){if(c[h+480>>2]|0){Xd(h,n);break}rd=n;if((c[h+304>>2]|0)>>>0<=rd>>>0?(c[h+308>>2]|0)>>>0>rd>>>0:0){rd=h+300|0;c[n>>2]=c[rd>>2];c[rd>>2]=n;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{rd=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}}while(0);c[p>>2]=0;c[j+248>>2]=0;break}case 283:case 282:case 281:{k=j+244|0;l=c[k>>2]|0;m=c[td+4>>2]|0;if(!l){c[k>>2]=m;k=c[td+8>>2]|0}else k=m+(c[td+8>>2]|0)-l|0;c[j+248>>2]=k;break}case 285:case 284:{k=c[td+4>>2]|0;if(k|0){rd=j+264|0;c[k+4>>2]=c[rd>>2];c[rd>>2]=k;c[j+268>>2]=k}break}case 286:{rd=td+-56|0;j=Bj(j,0,rd,c[td+-44>>2]|0,c[td+-8>>2]|0)|0;c[rd>>2]=j;break}case 287:{rd=td+-80|0;j=Bj(j,c[rd>>2]|0,td+-56|0,c[td+-44>>2]|0,c[td+-8>>2]|0)|0;c[rd>>2]=j;break}case 314:{m=c[j>>2]|0;Rb:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](92)|0;rd=3591;break}k=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){rd=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=rd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;rd=3592}else rd=3592}else rd=3607}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){rd=3607;break}}else{do if((e[m+276>>1]|0)>=92){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3591;break Rb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3591;break Rb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,92,0)|0;rd=3591}while(0);if((rd|0)==3591)if(!k)rd=3607;else{l=k;rd=3592}if((rd|0)==3592){I=l;J=I+92|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));i=c[j>>2]|0;o=c[td+4>>2]|0;p=c[td+8>>2]|0;Sb:do if(o){h=Sv(p|0,0,1,0)|0;n=L()|0;Tb:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=3603;else{k=0;break Sb}else{do if(0<0|(0==0?p>>>0<(e[i+276>>1]|0)>>>0:0)){m=i+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];j=i+284|0;c[j>>2]=(c[j>>2]|0)+1;break Tb}m=i+296|0;k=c[m>>2]|0;if(!k){k=i+292|0;break}else{c[m>>2]=c[k>>2];j=i+284|0;c[j>>2]=(c[j>>2]|0)+1;break Tb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3603}while(0);if((rd|0)==3603)k=_d(i,h,n)|0;if(k){ew(k|0,o|0,p|0)|0;a[k+p>>0]=0}else k=0}else k=0;while(0);c[l>>2]=k;c[l+36>>2]=c[td+-20>>2];k=l}else if((rd|0)==3607){k=c[td+-20>>2]|0;if(!k)k=0;else{ni(c[j>>2]|0,k);k=0}}c[td+-20>>2]=k;break}case 289:{qd=td+4|0;rd=td+-20|0;Cj(j,c[qd>>2]|0,c[rd>>2]|0);c[(c[qd>>2]|0)+32>>2]=c[rd>>2];c[rd>>2]=c[qd>>2];break}case 290:{p=td+-8|0;if(!(c[p>>2]|0))k=0;else{m=c[j>>2]|0;n=c[td+-44>>2]|0;o=c[td+-40>>2]|0;Ub:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Vb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3483;else{k=0;break Ub}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Vb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Vb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3483}while(0);if((rd|0)==3483)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[c[p>>2]>>2]=k;k=c[p>>2]|0}c[td+-44>>2]=k;break}case 291:{k=c[td+4>>2]|0;l=c[td+-20>>2]|0;m=c[td+-8>>2]|0;if(!k){if(l|0)ri(c[j>>2]|0,l);if(m|0)ri(c[j>>2]|0,m)}else{c[k+8>>2]=l;c[k+12>>2]=m}c[td+-44>>2]=k;break}case 292:{p=c[td+4>>2]|0;k=c[td+-20>>2]|0;l=c[td+-8>>2]|0;q=td+-56|0;if(!p){if(k|0)ri(c[j>>2]|0,k);if(l|0)ri(c[j>>2]|0,l)}else{c[p+8>>2]=k;c[p+12>>2]=l;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-52>>2]|0;Wb:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Xb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3507;else{k=0;break Wb}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Xb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Xb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3507}while(0);if((rd|0)==3507)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 293:{k=c[td+4>>2]|0;l=c[td+-8>>2]|0;if(!k){if(l|0)ri(c[j>>2]|0,l)}else{c[k+8>>2]=0;c[k+12>>2]=l}c[td+-32>>2]=k;break}case 294:{p=c[td+4>>2]|0;k=c[td+-8>>2]|0;q=td+-44|0;if(!p){if(k|0)ri(c[j>>2]|0,k)}else{c[p+8>>2]=0;c[p+12>>2]=k;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-40>>2]|0;Yb:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Zb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3533;else{k=0;break Yb}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Zb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Zb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3533}while(0);if((rd|0)==3533)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 313:{rd=c[td+-8>>2]|0;j=td+-44|0;c[rd+36>>2]=c[j>>2];c[j>>2]=rd;break}case 296:{p=c[td+4>>2]|0;q=td+-8|0;if(p|0){c[p+8>>2]=0;c[p+12>>2]=0;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-4>>2]|0;_b:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;$b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3552;else{k=0;break _b}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break $b}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break $b}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3552}while(0);if((rd|0)==3552)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 297:{j=Dj(j,0,87,0,82,0,0)|0;c[td+16>>2]=j;break}case 298:{rd=td+-20|0;j=Dj(j,c[rd>>2]|0,c[td+-8>>2]|0,c[td+-4>>2]|0,82,0,a[td+4>>0]|0)|0;c[rd>>2]=j;break}case 299:{rd=td+-56|0;j=Dj(j,c[rd>>2]|0,c[td+-32>>2]|0,c[td+-28>>2]|0,c[td+-8>>2]|0,c[td+-4>>2]|0,a[td+4>>0]|0)|0;c[rd>>2]=j;break}case 312:{c[td+-8>>2]=c[td+4>>2];break}case 311:{a[td+4>>0]=b[td+2>>1];break}case 306:case 304:case 302:{c[td+-8>>2]=e[td+-10>>1];c[td+-4>>2]=0;break}case 305:{rd=td+-8|0;j=c[rd>>2]|0;c[rd>>2]=e[td+2>>1];c[td+-4>>2]=j;break}case 307:{a[td+16>>0]=0;break}case 308:{a[td+-8>>0]=a[td+4>>0]|0;break}case 310:case 309:{a[td+-8>>0]=b[td+-10>>1];break}default:{}}while(0);j=b[17152+(g<<1)>>1]|0;sd=sd<<24>>24;g=b[11376+((b[18656+(e[td+(sd*12|0)>>1]<<1)>>1]|0)+(j&65535)<<1)>>1]|0;sd=sd+1|0;rd=td+(sd*12|0)|0;c[f>>2]=rd;b[rd>>1]=g;b[td+(sd*12|0)+2>>1]=j;f=g;Ra=ud;return f|0}\nfunction zj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+64|0;B=I+48|0;A=I+40|0;s=I+32|0;r=I+24|0;q=I+16|0;p=I+8|0;u=I;F=I+52|0;G=c[f>>2]|0;a:do if(!(a[G+165>>0]|0)){n=f+4|0;o=G+24|0;k=(c[o>>2]&1|0)==0;l=G+16|0;C=c[(c[l>>2]|0)+12>>2]|0;a[G+78>>0]=a[C+77>>0]|0;if(!((b[C+78>>1]&1)==0?(i=eh(G,0,n,0)|0,(i|0)!=0):0))H=4;b:do if((H|0)==4){i=c[G+20>>2]|0;if((i|0)>1)do{j=i;i=i+-1|0;if((b[(c[(c[l>>2]|0)+(i<<4)+12>>2]|0)+78>>1]&1)==0?(m=eh(G,i,n,0)|0,m|0):0){i=m;break b}}while((j|0)>2);if(k)c[o>>2]=c[o>>2]&-2;if(!(a[G+89>>0]|0))break a;c[o>>2]=c[o>>2]|16;break a}while(0);c[f+12>>2]=i;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;Ra=I;return}while(0);c:do if(!g){n=G+20|0;if((c[n>>2]|0)>0){o=f+116|0;p=f+40|0;q=f+44|0;r=f+8|0;s=f+23|0;m=0;do{d:do if((m|0)!=1){l=c[(c[(c[f>>2]|0)+16>>2]|0)+(m<<4)+12>>2]|0;k=c[o>>2]|0;k=(k|0)==0?f:k;i=k+84|0;g=c[i>>2]|0;j=1<<m;if(!(g&j))c[i>>2]=g|j;g=k+80|0;c[g>>2]=c[g>>2]|j;g=c[p>>2]|0;c[p>>2]=g+3;hn(f,m,g,0,0);j=(c[q>>2]|0)+1|0;k=c[p>>2]|0;i=c[l+16>>2]|0;if(i|0)do{jn(f,c[i+8>>2]|0,0,g,j,k);i=c[i>>2]|0}while((i|0)!=0);i=c[r>>2]|0;if(!i){j=c[f>>2]|0;if((c[o>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[s>>0]=1;e:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=37;else break d;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break e}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break e}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=37}while(0);if((H|0)==37){H=0;i=_d(j,224,0)|0}if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[r>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=m;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,m,0,0)|0;break}}while(0);m=m+1|0}while((m|0)<(c[n>>2]|0))}}else{j=h+4|0;do if(!(c[j>>2]|0)){C=wk(G,g)|0;i=c[f>>2]|0;if((C|0)<=-1){if(!(c[j>>2]|0)){i=d[i+164>>0]|0;break}if(a[i+165>>0]|0){cd(f,39404,r);break c}i=wk(i,g)|0;if((i|0)>=0){g=h;break}c[s>>2]=g;cd(f,39421,s);break c}p=c[(c[i+16>>2]|0)+(C<<4)+12>>2]|0;q=f+116|0;o=c[q>>2]|0;o=(o|0)==0?f:o;i=o+84|0;g=c[i>>2]|0;n=1<<C;do if((((g&n|0)==0?(c[i>>2]=g|n,(C|0)==1):0)?(x=c[o>>2]|0,t=x+16|0,(c[(c[t>>2]|0)+20>>2]|0)==0):0)?(a[o+199>>0]|0)==0:0){i=Pe(c[x>>2]|0,0,x,F,0,542)|0;if(i|0){cd(o,32157,u);c[o+12>>2]=i;break}F=c[F>>2]|0;c[(c[t>>2]|0)+20>>2]=F;i=c[x+92>>2]|0;j=c[F+4>>2]|0;c[j+4>>2]=c[F>>2];if(!(b[j+22>>1]&2)){k=j+32|0;l=j+36|0;m=(c[k>>2]|0)-(c[l>>2]|0)|0;if(((i+-512|0)>>>0<65025?(i+-1&i|0)==0:0)?(c[k>>2]=i,w=j+80|0,v=c[w>>2]|0,v|0):0){g=v+-4|0;c[w>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=63;break}else{i=Wa[c[29352>>2]&127](g)|0;H=63}while(0);do if((H|0)==63){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[w>>2]=0}F=Se(c[j>>2]|0,k,m)|0;c[l>>2]=(c[k>>2]|0)-(m&65535);if((F|0)==7){i=x+81|0;do if((a[i>>0]|0)==0?(a[x+82>>0]|0)==0:0){a[i>>0]=1;if((c[x+180>>2]|0)>0)c[x+264>>2]=1;i=x+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[x+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=o+80|0;c[k>>2]=c[k>>2]|n;k=f+40|0;g=c[k>>2]|0;c[k>>2]=g+3;hn(f,C,g,0,0);j=(c[f+44>>2]|0)+1|0;k=c[k>>2]|0;i=c[p+16>>2]|0;if(i|0)do{jn(f,c[i+8>>2]|0,0,g,j,k);i=c[i>>2]|0}while((i|0)!=0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[q>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;f:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=93;else break c;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break f}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break f}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=93}while(0);if((H|0)==93)i=_d(j,224,0)|0;if(!i)break c;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=C;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break c}else{Di(i,142,C,0,0)|0;break c}}else{i=c[f>>2]|0;if(a[i+165>>0]|0){cd(f,39404,p);break c}i=wk(i,g)|0;if((i|0)<0){c[q>>2]=g;cd(f,39421,q);break c}else g=h}while(0);if(!(c[j>>2]|0))i=0;else i=c[(c[G+16>>2]|0)+(i<<4)>>2]|0;t=qj(G,g)|0;if(t|0){s=hi(G,t,i)|0;g:do if(!s){q=bd(f,0,t,i)|0;if(q|0){g=c[q+72>>2]|0;if(!g)s=-1e6;else{j=c[(c[f>>2]|0)+16>>2]|0;i=0;while(1)if((c[j+(i<<4)+12>>2]|0)==(g|0)){s=i;break}else i=i+1|0}r=f+116|0;p=c[r>>2]|0;p=(p|0)==0?f:p;i=p+84|0;g=c[i>>2]|0;o=1<<s;do if((((g&o|0)==0?(c[i>>2]=g|o,(s|0)==1):0)?(E=c[p>>2]|0,z=E+16|0,(c[(c[z>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){i=Pe(c[E>>2]|0,0,E,F,0,542)|0;if(i|0){cd(p,32157,B);c[p+12>>2]=i;break}F=c[F>>2]|0;c[(c[z>>2]|0)+20>>2]=F;i=c[E+92>>2]|0;k=c[F+4>>2]|0;c[k+4>>2]=c[F>>2];if(!(b[k+22>>1]&2)){l=k+32|0;m=k+36|0;n=(c[l>>2]|0)-(c[m>>2]|0)|0;do if((i+-512|0)>>>0<65025){if(i+-1&i|0)break;c[l>>2]=i;j=k+80|0;i=c[j>>2]|0;if(!i)break;g=i+-4|0;c[j>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=187;break}else{i=Wa[c[29352>>2]&127](g)|0;H=187}while(0);do if((H|0)==187){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[j>>2]=0}while(0);F=Se(c[k>>2]|0,l,n)|0;c[m>>2]=(c[l>>2]|0)-(n&65535);if((F|0)==7){i=E+81|0;do if(!(a[i>>0]|0)){if(a[E+82>>0]|0)break;a[i>>0]=1;if((c[E+180>>2]|0)>0)c[E+264>>2]=1;i=E+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[E+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=p+80|0;c[k>>2]=c[k>>2]|o;k=f+40|0;i=c[k>>2]|0;c[k>>2]=i+3;hn(f,s,i,c[q>>2]|0,38087);jn(f,q,0,i,(c[f+44>>2]|0)+1|0,c[k>>2]|0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[r>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=214;else break g;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break h}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break h}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=214}while(0);if((H|0)==214)i=_d(j,224,0)|0;if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=s;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,s,0,0)|0;break}}}else{q=c[s+12>>2]|0;g=c[q+72>>2]|0;if(!g)h=-1e6;else{j=c[(c[f>>2]|0)+16>>2]|0;i=0;while(1)if((c[j+(i<<4)+12>>2]|0)==(g|0)){h=i;break}else i=i+1|0}r=f+116|0;p=c[r>>2]|0;p=(p|0)==0?f:p;i=p+84|0;g=c[i>>2]|0;o=1<<h;do if((((g&o|0)==0?(c[i>>2]=g|o,(h|0)==1):0)?(D=c[p>>2]|0,y=D+16|0,(c[(c[y>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){i=Pe(c[D>>2]|0,0,D,F,0,542)|0;if(i|0){cd(p,32157,A);c[p+12>>2]=i;break}F=c[F>>2]|0;c[(c[y>>2]|0)+20>>2]=F;i=c[D+92>>2]|0;k=c[F+4>>2]|0;c[k+4>>2]=c[F>>2];if(!(b[k+22>>1]&2)){l=k+32|0;m=k+36|0;n=(c[l>>2]|0)-(c[m>>2]|0)|0;do if((i+-512|0)>>>0<65025?(i+-1&i|0)==0:0){c[l>>2]=i;j=k+80|0;i=c[j>>2]|0;if(!i)break;g=i+-4|0;c[j>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=133;break}else{i=Wa[c[29352>>2]&127](g)|0;H=133}while(0);do if((H|0)==133){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[j>>2]=0}while(0);F=Se(c[k>>2]|0,l,n)|0;c[m>>2]=(c[l>>2]|0)-(n&65535);if((F|0)==7){i=D+81|0;do if(!(a[i>>0]|0)){if(a[D+82>>0]|0)break;a[i>>0]=1;if((c[D+180>>2]|0)>0)c[D+264>>2]=1;i=D+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[D+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=p+80|0;c[k>>2]=c[k>>2]|o;k=f+40|0;i=c[k>>2]|0;c[k>>2]=i+3;hn(f,h,i,c[s>>2]|0,38091);jn(f,q,s,i,(c[f+44>>2]|0)+1|0,c[k>>2]|0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[r>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;i:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=160;else break g;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break i}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break i}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=160}while(0);if((H|0)==160)i=_d(j,224,0)|0;if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=h;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,h,0,0)|0;break}}while(0);if(G|0){if(c[G+480>>2]|0){Xd(G,t);break}F=t;if((c[G+304>>2]|0)>>>0<=F>>>0?(c[G+308>>2]|0)>>>0>F>>>0:0){F=G+300|0;c[t>>2]=c[F>>2];c[F>>2]=t;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{F=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}}while(0);if(a[G+90>>0]|0){Ra=I;return}k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;j:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=246;else{Ra=I;return}else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];G=j+284|0;c[G>>2]=(c[G>>2]|0)+1;break j}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];G=j+284|0;c[G>>2]=(c[G>>2]|0)+1;break j}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=246}while(0);if((H|0)==246)i=_d(j,224,0)|0;if(!i){Ra=I;return}g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;g=c[i+104>>2]|0;a[g+(j*20|0)>>0]=-98;g=g+(j*20|0)+1|0;l=g+19|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(l|0));Ra=I;return}else{Di(i,158,0,0,0)|0;Ra=I;return}}function Aj(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+48|0;t=w+40|0;s=w+16|0;q=w+8|0;n=w;o=d+228|0;u=c[o>>2]|0;v=c[d>>2]|0;if(!u){Ra=w;return}p=d+244|0;m=c[p>>2]|0;do if(m){l=c[d+248>>2]|0;j=Sv(l|0,((l|0)<0)<<31>>31|0,1,0)|0;k=L()|0;a:do if(c[v+272>>2]|0)if(!(a[v+81>>0]|0))r=14;else m=0;else{do if(!(k>>>0>0|((k|0)==0?j>>>0>(e[v+276>>1]|0)>>>0:0))){i=v+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];r=v+284|0;c[r>>2]=(c[r>>2]|0)+1;r=15;break a}i=v+296|0;g=c[i>>2]|0;if(!g){g=v+292|0;break}else{c[i>>2]=c[g>>2];r=v+284|0;c[r>>2]=(c[r>>2]|0)+1;r=15;break a}}else g=v+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;r=14}while(0);if((r|0)==14){g=_d(v,j,k)|0;r=15}if((r|0)==15)if(!g)m=0;else{ew(g|0,m|0,l|0)|0;a[g+l>>0]=0;m=g}g=u+56|0;l=c[g>>2]|0;j=(l<<2)+8|0;k=c[d>>2]|0;if((l+3|0)>=(c[k+116>>2]|0)){c[n>>2]=c[u>>2];cd(d,38221,n)}l=u+60|0;i=c[l>>2]|0;b:do if(!i){if(c[k+272>>2]|0){if(a[k+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<j>>>0:0))){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;r=36;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;r=36;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(k,j,0)|0;r=36}else{r=i;if((c[k+304>>2]|0)>>>0<=r>>>0?(c[k+308>>2]|0)>>>0>r>>>0:0){if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<j>>>0:0))){h=i;r=46;break}h=Zd(k,i,j,0)|0;r=36;break}h=Zd(k,i,j,0)|0;r=36}while(0);if((r|0)==36?h|0:0)r=46;if((r|0)==46){k=c[g>>2]|0;n=k+1|0;c[g>>2]=n;c[h+(k<<2)>>2]=m;c[h+(n<<2)>>2]=0;c[l>>2]=h;break}if(m){if(c[k+480>>2]|0){Xd(k,m);break}n=m;if((c[k+304>>2]|0)>>>0<=n>>>0?(c[k+308>>2]|0)>>>0>n>>>0:0){n=k+300|0;c[m>>2]=c[n>>2];c[n>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}else g=u+56|0;while(0);c[p>>2]=0;if((c[g>>2]|0)<1){Ra=w;return}if(a[v+165>>0]|0){if(!(mi((c[u+72>>2]|0)+8|0,c[u>>2]|0,u)|0)){c[o>>2]=0;Ra=w;return}g=v+81|0;if(a[g>>0]|0){Ra=w;return}if(a[v+82>>0]|0){Ra=w;return}a[g>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;g=v+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[v+236>>2]|0;if(!g){Ra=w;return}c[g+12>>2]=7;Ra=w;return}if(!f)g=d+180|0;else{g=d+180|0;c[d+184>>2]=(c[f>>2]|0)-(c[g>>2]|0)+(c[f+4>>2]|0)}c[q>>2]=g;j=dd(v,48861,q)|0;h=c[u+72>>2]|0;i=c[v+16>>2]|0;if(!h)m=-1e6;else{g=0;while(1)if((c[i+(g<<4)+12>>2]|0)==(h|0)){m=g;break}else g=g+1|0}p=c[u>>2]|0;q=c[d+88>>2]|0;c[s>>2]=c[i+(m<<4)>>2];c[s+4>>2]=34585;c[s+8>>2]=p;c[s+12>>2]=p;c[s+16>>2]=j;c[s+20>>2]=q;Ak(d,48885,s);do if(j|0){if(c[v+480>>2]|0){Xd(v,j);break}s=j;if((c[v+304>>2]|0)>>>0<=s>>>0?(c[v+308>>2]|0)>>>0>s>>>0:0){s=v+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);k=d+8|0;g=c[k>>2]|0;c:do if(!g){j=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[d+23>>0]=1;d:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))r=78;else{l=0;break c}else{do if((e[j+276>>1]|0)>=224){g=j+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];i=j+284|0;c[i>>2]=(c[i>>2]|0)+1;i=h;break d}g=j+296|0;h=c[g>>2]|0;if(!h){g=j+292|0;break}else{c[g>>2]=c[h>>2];i=j+284|0;c[i>>2]=(c[i>>2]|0)+1;i=h;break d}}else g=j+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;r=78}while(0);if((r|0)==78)i=_d(j,224,0)|0;if(!i)l=0;else{g=i+104|0;h=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[i>>2]=j;g=j+4|0;h=c[g>>2]|0;if(h|0)c[h+4>>2]=i;c[i+8>>2]=h;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=d;c[k>>2]=i;Di(i,61,0,1,0)|0;l=i}}else l=g;while(0);g=c[k>>2]|0;h=(c[c[(c[(c[d>>2]|0)+16>>2]|0)+(m<<4)+12>>2]>>2]|0)+1|0;i=g+108|0;j=c[i>>2]|0;if((c[g+112>>2]|0)>(j|0)){c[i>>2]=j+1;s=c[g+104>>2]|0;a[s+(j*20|0)>>0]=95;b[s+(j*20|0)+2>>1]=0;c[s+(j*20|0)+4>>2]=m;c[s+(j*20|0)+8>>2]=1;c[s+(j*20|0)+12>>2]=h;c[s+(j*20|0)+16>>2]=0;a[s+(j*20|0)+1>>0]=0}else Di(g,95,m,1,h)|0;j=l+108|0;g=c[j>>2]|0;k=l+112|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;h=c[l+104>>2]|0;a[h+(g*20|0)>>0]=-98;g=h+(g*20|0)+1|0;h=g+19|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0))}else Di(l,158,0,0,0)|0;c[t>>2]=c[u>>2];Bk(l,m,dd(v,48973,t)|0);h=d+44|0;i=(c[h>>2]|0)+1|0;c[h>>2]=i;h=c[u>>2]|0;g=c[j>>2]|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;v=c[l+104>>2]|0;a[v+(g*20|0)>>0]=110;b[v+(g*20|0)+2>>1]=0;c[v+(g*20|0)+4>>2]=0;c[v+(g*20|0)+8>>2]=i;c[v+(g*20|0)+12>>2]=0;c[v+(g*20|0)+16>>2]=0;a[v+(g*20|0)+1>>0]=0}else g=Di(l,110,0,i,0)|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){if((g|0)<0)g=(c[j>>2]|0)+-1|0;Ei(l,(c[l+104>>2]|0)+(g*20|0)|0,h,0)}g=c[j>>2]|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;v=c[l+104>>2]|0;a[v+(g*20|0)>>0]=-95;b[v+(g*20|0)+2>>1]=0;c[v+(g*20|0)+4>>2]=m;c[v+(g*20|0)+8>>2]=i;c[v+(g*20|0)+12>>2]=0;c[v+(g*20|0)+16>>2]=0;a[v+(g*20|0)+1>>0]=0;Ra=w;return}else{Di(l,161,m,i,0)|0;Ra=w;return}}function Bj(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;o=s;r=c[b>>2]|0;q=qj(r,g)|0;n=(f|0)!=0;if(n&(q|0)!=0?(j=c[f>>2]|0,(j|0)>0):0){m=0;g=j;do{k=c[f+8+(m<<4)>>2]|0;l=a[q>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0;if(!(l<<24>>24==0|(j|0)!=0)){l=q;do{l=l+1|0;k=k+1|0;t=a[l>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){c[o>>2]=q;cd(b,49e3,o);g=c[f>>2]|0}m=m+1|0}while((m|0)<(g|0))}a:do if(n){g=(c[f>>2]<<4)+24|0;t=f;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<g>>>0:0))){g=f;break}g=Zd(r,f,g,0)|0;break}g=Zd(r,f,g,0)|0}else{b:do if(!r){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](24)|0;p=39;break}k=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;j=59064;g=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&g>>>0>0){t=c[14978]|0;o=Tv(g|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&o>>>0<=t>>>0)&1}g=Wa[c[29340>>2]&127](k)|0;if(!g){g=0;break a}j=Wa[c[29352>>2]&127](g)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[r+272>>2]|0){if(a[r+81>>0]|0){g=0;break a}}else{do if((e[r+276>>1]|0)>=24){j=r+300|0;g=c[j>>2]|0;if(g|0){c[j>>2]=c[g>>2];p=r+284|0;c[p>>2]=(c[p>>2]|0)+1;p=39;break b}j=r+296|0;g=c[j>>2]|0;if(!g){g=r+292|0;break}else{c[j>>2]=c[g>>2];p=r+284|0;c[p>>2]=(c[p>>2]|0)+1;p=39;break b}}else g=r+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(r,24,0)|0;p=39}while(0);if((p|0)==39)if(!g){g=0;break}j=g;k=j+24|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}while(0);if(!(a[r+81>>0]|0)){r=g+8|0;t=c[g>>2]|0;c[r+(t<<4)+8>>2]=i;c[r+(t<<4)+4>>2]=h;c[r+(t<<4)>>2]=q;c[r+(t<<4)+12>>2]=0;c[g>>2]=t+1;t=g;Ra=s;return t|0}if(h|0)ri(r,h);if(i|0)pi(r,i,1);if(!q){t=f;Ra=s;return t|0}if(c[r+480>>2]|0){Xd(r,q);t=f;Ra=s;return t|0}t=q;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){t=r+300|0;c[q>>2]=c[t>>2];c[t>>2]=q;t=f;Ra=s;return t|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);t=f;Ra=s;return t|0}else{t=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);t=f;Ra=s;return t|0}return 0}function Cj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;m=p+8|0;k=p;n=e+4|0;l=c[n>>2]|0;if(!l){Ra=p;return}o=c[b>>2]|0;a:do if(f|0){j=d[208+(d[l>>0]|0)>>0]|0;while(1){h=c[f>>2]|0;i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-j|0;if(!(i<<24>>24==0|(g|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;q=a[h>>0]|0;g=(d[208+(q&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(g|0)!=0))}if(!g)break;f=c[f+32>>2]|0;if(!f)break a}if(!f){Ra=p;return}g=e+8|0;do if(!(c[g>>2]|0)){h=f+12|0;if(c[h>>2]|0?c[e+12>>2]|0:0){f=49047;break}if(!(a[f+19>>0]|0))f=49063;else{f=gk(o,c[f+8>>2]|0,0)|0;c[g>>2]=f;f=c[h>>2]|0;if(f|0){q=gk(o,f,0)|0;c[e+12>>2]=q}f=c[n>>2]|0;do if(f|0){if(o|0){if(c[o+480>>2]|0){Xd(o,f);break}q=f;if((c[o+304>>2]|0)>>>0<=q>>>0?(c[o+308>>2]|0)>>>0>q>>>0:0){q=o+300|0;c[f>>2]=c[q>>2];c[q>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[n>>2]=0;Ra=p;return}}else f=49030;while(0);c[m>>2]=f;c[m+4>>2]=l;cd(b,49083,m);Ra=p;return}while(0);c[k>>2]=l;cd(b,40596,k);Ra=p;return}function Dj(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;l=r;p=(f|0)==0;q=p&1;a:do if((g|0)==82&(i|0)==85)o=4;else{if((g|0)==83)switch(i|0){case 82:case 85:{o=4;break a}default:{}}n=c[d>>2]|0;b:do if(!n){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](92)|0;o=28;break}l=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){s=c[14978]|0;n=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=s>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l)break a;m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0)break a}else{do if((e[n+276>>1]|0)>=92){m=n+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];o=n+284|0;c[o>>2]=(c[o>>2]|0)+1;o=28;break b}m=n+296|0;l=c[m>>2]|0;if(!l){l=n+292|0;break}else{c[m>>2]=c[l>>2];o=n+284|0;c[o>>2]=(c[o>>2]|0)+1;o=28;break b}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(n,92,0)|0;o=28}while(0);if((o|0)==28)if(!l)break;m=l;n=m+92|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));a[l+16>>0]=p?86:f&255;a[l+17>>0]=g;a[l+18>>0]=i;if(!(k<<24>>24))k=(b[(c[d>>2]|0)+76>>1]&2)==0?0:66;a[l+20>>0]=k;a[l+19>>0]=q;s=pn(d,j)|0;c[l+28>>2]=s;s=pn(d,h)|0;c[l+24>>2]=s;s=l;Ra=r;return s|0}while(0);if((o|0)==4)cd(d,49116,l);if(j|0)ni(c[d>>2]|0,j);if(!h){s=0;Ra=r;return s|0}ni(c[d>>2]|0,h);s=0;Ra=r;return s|0}function Ej(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=d+8|0;e=c[i>>2]|0;if(e|0){i=e;return i|0}e=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[e+76>>1]&8)==0:0)a[d+23>>0]=1;h=Yd(e,224,0)|0;if(!h){i=0;return i|0}f=h+104|0;g=f+120|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[h>>2]=e;e=e+4|0;f=c[e>>2]|0;if(f|0)c[f+4>>2]=h;c[h+8>>2]=f;c[h+4>>2]=0;c[e>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[i>>2]=h;Di(h,61,0,1,0)|0;i=h;return i|0}function Fj(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0;k=d+108|0;l=c[k>>2]|0;if((c[d+112>>2]|0)>(l|0)){c[k>>2]=l+1;k=c[d+104>>2]|0;a[k+(l*20|0)>>0]=e;b[k+(l*20|0)+2>>1]=0;c[k+(l*20|0)+4>>2]=f;c[k+(l*20|0)+8>>2]=g;c[k+(l*20|0)+12>>2]=h;c[k+(l*20|0)+16>>2]=0;a[k+(l*20|0)+1>>0]=0;gd(d,l,i,j);return l|0}else{l=Di(d,e,f,g,h)|0;gd(d,l,i,j);return l|0}return 0}function Gj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0;p=f+8|0;k=c[p>>2]|0;a:do if(!k){o=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))n=15;else{o=0;break a}else{do if((e[o+276>>1]|0)>=224){k=o+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}k=o+296|0;l=c[k>>2]|0;if(!l){k=o+292|0;break}else{c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;n=15}while(0);if((n|0)==15)m=_d(o,224,0)|0;if(!m)o=0;else{k=m+104|0;l=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[m>>2]=o;k=o+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[p>>2]=m;Di(m,61,0,1,0)|0;o=m}}else o=k;while(0);k=i+28|0;Hj(f,h,c[k>>2]|0,(j|0)==109&1,c[i>>2]|0);if(!(c[i+36>>2]&32)){m=c[k>>2]|0;n=b[i+42>>1]|0;l=o+108|0;k=c[l>>2]|0;if((c[o+112>>2]|0)>(k|0)){c[l>>2]=k+1;f=c[o+104>>2]|0;a[f+(k*20|0)>>0]=j;b[f+(k*20|0)+2>>1]=0;c[f+(k*20|0)+4>>2]=g;c[f+(k*20|0)+8>>2]=m;c[f+(k*20|0)+12>>2]=h;c[f+(k*20|0)+16>>2]=0;a[f+(k*20|0)+1>>0]=0}else k=Di(o,j,g,m,h)|0;if(a[(c[o>>2]|0)+81>>0]|0)return;j=c[o+104>>2]|0;a[j+(k*20|0)+1>>0]=-3;c[j+(k*20|0)+16>>2]=n;return}k=c[i+8>>2]|0;c:do if(!k)k=0;else while(1){i=k+55|0;if(((d[i>>0]|d[i+1>>0]<<8)&3)==2)break c;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);l=c[k+44>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;i=c[o+104>>2]|0;a[i+(n*20|0)>>0]=j;b[i+(n*20|0)+2>>1]=0;c[i+(n*20|0)+4>>2]=g;c[i+(n*20|0)+8>>2]=l;c[i+(n*20|0)+12>>2]=h;c[i+(n*20|0)+16>>2]=0;a[i+(n*20|0)+1>>0]=0}else Di(o,j,g,l,h)|0;m=c[p>>2]|0;l=Ij(f,k)|0;if(!l)return;k=c[m>>2]|0;if(!(a[k+81>>0]|0)){h=c[m+104>>2]|0;j=(c[m+108>>2]|0)+-1|0;a[h+(j*20|0)+1>>0]=-9;c[h+(j*20|0)+16>>2]=l;return}if(c[k+480>>2]|0)return;j=(c[l>>2]|0)+-1|0;c[l>>2]=j;if(j|0)return;k=c[l+12>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,l);return}j=l;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);return}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);return}}function Hj(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;l=c[b+116>>2]|0;l=(l|0)==0?b:l;if((d|0)==1)return;if(!(a[(c[(c[(c[b>>2]|0)+16>>2]|0)+(d<<4)+4>>2]|0)+9>>0]|0))return;r=l+104|0;p=c[r>>2]|0;i=l+108|0;a:do if((p|0)<=0){j=c[i>>2]|0;k=(p<<4)+16|0;n=c[l>>2]|0;m=((k|0)<0)<<31>>31;if(!j){b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))q=21;else{b=l;q=39;break a}else{do if(!(0<m>>>0|(0==(m|0)?(e[n+276>>1]|0)>>>0<k>>>0:0))){j=n+300|0;b=c[j>>2]|0;if(b|0){c[j>>2]=c[b>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}j=n+296|0;b=c[j>>2]|0;if(!b){b=n+292|0;break}else{c[j>>2]=c[b>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else b=n+288|0;while(0);c[b>>2]=(c[b>>2]|0)+1;q=21}while(0);if((q|0)==21)b=_d(n,k,m)|0;c[i>>2]=b;if(!b)b=l;else q=37}else{b=l;o=j;j=k;q=22}}else{j=c[i>>2]|0;b=0;while(1){if((c[j+(b<<4)>>2]|0)==(d|0)?(c[j+(b<<4)+4>>2]|0)==(f|0):0)break;b=b+1|0;if((b|0)>=(p|0)){q=9;break}}if((q|0)==9){k=(p<<4)+16|0;b=l;o=j;n=c[l>>2]|0;m=((k|0)<0)<<31>>31;j=k;q=22;break}r=j+(b<<4)+8|0;a[r>>0]=(a[r>>0]|g)<<24>>24!=0&1;return}while(0);do if((q|0)==22){k=o;l=n+304|0;if(((c[l>>2]|0)>>>0<=k>>>0?(c[n+308>>2]|0)>>>0>k>>>0:0)?!(m>>>0>0|((m|0)==0?j>>>0>(e[n+276>>1]|0)>>>0:0)):0){c[i>>2]=o;b=o;i=p;q=38;break}j=Zd(n,o,j,m)|0;if(j|0){c[i>>2]=j;b=j;q=37;break}if(c[n+480>>2]|0){Xd(n,o);q=39;break}if((c[l>>2]|0)>>>0<=k>>>0?(c[n+308>>2]|0)>>>0>k>>>0:0){q=n+300|0;c[o>>2]=c[q>>2];c[q>>2]=o;q=39;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);q=39;break}else{q=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);q=39;break}}while(0);if((q|0)==37){i=c[r>>2]|0;q=38}else if((q|0)==39)c[i>>2]=0;if((q|0)==38){c[r>>2]=i+1;c[b+(i<<4)>>2]=d;c[b+(i<<4)+4>>2]=f;a[b+(i<<4)+8>>0]=g;c[b+(i<<4)+12>>2]=h;return}c[r>>2]=0;b=c[b>>2]|0;i=b+81|0;if(a[i>>0]|0)return;if(a[b+82>>0]|0)return;a[i>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;r=b+272|0;c[r>>2]=(c[r>>2]|0)+1;b=c[b+236>>2]|0;if(!b)return;c[b+12>>2]=7;return}function Ij(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=b[g+52>>1]|0;r=q&65535;j=b[g+50>>1]|0;s=f+36|0;if(c[s>>2]|0){t=0;return t|0}t=g+55|0;n=c[f>>2]|0;l=r*5|0;k=l+20|0;o=n+272|0;h=(c[o>>2]|0)==0;do if(!((d[t>>0]|d[t+1>>0]<<8)&8)){a:do if(!h)if(!(a[n+81>>0]|0))m=32;else{t=0;return t|0}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<k>>>0:0))){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}i=n+296|0;h=c[i>>2]|0;if(!h){h=n+292|0;break}else{c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;m=32}while(0);if((m|0)==32)h=_d(n,k,0)|0;if(h|0){c[h+16>>2]=h+20+(r<<2);b[h+6>>1]=q;b[h+8>>1]=q;a[h+4>>0]=a[n+78>>0]|0;c[h+12>>2]=n;c[h>>2]=1;gw(h+24|0,0,l+-4|0)|0;p=h;o=h;break}i=n+81|0;if((a[i>>0]|0)==0?(a[n+82>>0]|0)==0:0){a[i>>0]=1;if((c[n+180>>2]|0)>0)c[n+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;i=c[n+236>>2]|0;if(i){c[i+12>>2]=7;m=41}else m=41}else m=41}else{b:do if(!h)if(!(a[n+81>>0]|0))m=13;else{t=0;return t|0}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<k>>>0:0))){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=n+296|0;h=c[i>>2]|0;if(!h){h=n+292|0;break}else{c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;m=13}while(0);if((m|0)==13)h=_d(n,k,0)|0;if(h|0){c[h+16>>2]=h+20+(r<<2);b[h+6>>1]=j;b[h+8>>1]=q;a[h+4>>0]=a[n+78>>0]|0;c[h+12>>2]=n;c[h>>2]=1;gw(h+24|0,0,l+-4|0)|0;p=h;o=h;break}i=n+81|0;if((a[i>>0]|0)==0?(a[n+82>>0]|0)==0:0){a[i>>0]=1;if((c[n+180>>2]|0)>0)c[n+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;i=c[n+236>>2]|0;if(i){c[i+12>>2]=7;m=41}else m=41}else m=41}while(0);if((m|0)==41)if(!h){t=0;return t|0}else{p=h;o=0}if(q<<16>>16){n=g+32|0;l=g+28|0;m=p+16|0;k=0;do{i=c[(c[n>>2]|0)+(k<<2)>>2]|0;do if((i|0)!=34049){h=c[f>>2]|0;j=a[h+78>>0]|0;g=a[h+165>>0]|0;h=Zi(h,j,i,g&255)|0;if(!(g<<24>>24)){if(!h){h=_i(f,j,0,i)|0;break}if(!(c[h+12>>2]|0))h=_i(f,j,h,i)|0}}else h=0;while(0);c[p+20+(k<<2)>>2]=h;a[(c[m>>2]|0)+k>>0]=a[(c[l>>2]|0)+k>>0]|0;k=k+1|0}while((k|0)!=(r|0))}if(!(c[s>>2]|0)){t=p;return t|0}h=d[t>>0]|d[t+1>>0]<<8;if(!(h&256)){s=h|256;a[t>>0]=s;a[t+1>>0]=s>>8;c[f+12>>2]=513}t=(c[p>>2]|0)+-1|0;c[p>>2]=t;if(t|0){t=0;return t|0}h=c[p+12>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,o);t=0;return t|0}t=p;if((c[h+304>>2]|0)>>>0<=t>>>0?(c[h+308>>2]|0)>>>0>t>>>0:0){t=h+300|0;c[p>>2]=c[t>>2];c[t>>2]=o;t=0;return t|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);t=0;return t|0}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);t=0;return t|0}return 0}function Jj(f,i,j){f=f|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+208|0;m=Z+80|0;l=Z+72|0;s=Z+64|0;n=Z+56|0;t=Z+48|0;p=Z+40|0;w=Z+32|0;S=Z;R=Z+144|0;T=Z+140|0;W=Z+136|0;E=Z+84|0;M=f+8|0;Y=c[M>>2]|0;c[T>>2]=0;c[W>>2]=0;if(!Y){j=0;Ra=Z;return j|0}Q=i;a:while(1){if(!Q)v=114;else v=d[Q>>0]|0;u=v&255;switch(u<<24>>24){case -92:{X=6;break a}case -94:{X=12;break a}case -109:{X=36;break a}case -97:{X=37;break a}case -111:{X=40;break a}case 110:{X=80;break a}case 114:{X=87;break a}case -110:{X=90;break a}case -108:{X=127;break a}case -88:{X=138;break a}case 36:{X=139;break a}case -96:case 45:{X=157;break a}case 53:case 52:case 57:case 54:case 55:case 56:{l=0;k=v;X=158;break a}case 105:case 99:case 98:case 103:case 97:case 96:case 104:case 101:case 102:case 100:case 43:case 44:{X=228;break a}case -91:{X=231;break a}case 19:case 107:{X=276;break a}case -89:{X=279;break a}case 51:case 50:{X=284;break a}case -93:{X=296;break a}case -95:{X=299;break a}case -125:case 20:{X=420;break a}case -86:{X=424;break a}case 49:{X=436;break a}case 48:{X=451;break a}case 77:{X=453;break a}case -87:{X=461;break a}case -85:{X=462;break a}case 71:{X=542;break a}case -90:case 106:case -83:break;default:{X=469;break a}}Q=c[Q+12>>2]|0}b:switch(X|0){case 6:{i=c[Q+40>>2]|0;k=c[i+28>>2]|0;l=b[Q+34>>1]|0;if(!(a[i>>0]|0)){j=c[k+(l*24|0)+16>>2]|0;Ra=Z;return j|0}if(a[i+1>>0]|0){m=c[i+8>>2]|0;i=c[k+(l*24|0)+12>>2]|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=90;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=m;c[Y+(l*20|0)+8>>2]=i;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,90,m,i,j)|0;Ra=Z;return j|0}}else X=12;break}case 36:{Kj(f,Q,0,j);Ra=Z;return j|0}case 37:{i=(a[(c[Q+8>>2]|0)+4>>0]|0)==0&1;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=70;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=j;c[Y+(l*20|0)+12>>2]=0;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,70,i,j,0)|0;Ra=Z;return j|0}}case 40:{i=c[Q+8>>2]|0;if(!i){Ra=Z;return j|0}Lg(i,S,(Eu(i)|0)&1073741823,1)|0;l=c[Y>>2]|0;c:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=51;else X=71;else{do if((e[l+276>>1]|0)>=8){i=l+300|0;k=c[i>>2]|0;if(k|0){c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=52;break c}i=l+296|0;k=c[i>>2]|0;if(!k){i=l+292|0;break}else{c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=52;break c}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=51}while(0);if((X|0)==51){k=_d(l,8,0)|0;X=52}do if((X|0)==52)if(k){i=S;W=c[i>>2]|0;i=c[i+4>>2]|0;m=k;f=m;a[f>>0]=W;a[f+1>>0]=W>>8;a[f+2>>0]=W>>16;a[f+3>>0]=W>>24;m=m+4|0;a[m>>0]=i;a[m+1>>0]=i>>8;a[m+2>>0]=i>>16;a[m+3>>0]=i>>24;m=Y+108|0;i=c[m>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;l=c[Y>>2]|0;if(!(a[l+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(i*20|0)+16>>2]=k;a[m>>0]=-13;break}else{Ei(Y,l+(i*20|0)|0,k,-13);break}}if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Y=k;if((c[l+304>>2]|0)>>>0<=Y>>>0?(c[l+308>>2]|0)>>>0>Y>>>0:0){Y=l+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else X=71;while(0);if((X|0)==71){k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[k>>2]|0)+-1|0;k=c[Y+104>>2]|0;if(a[k+(i*20|0)+1>>0]|0)Ei(Y,k+(i*20|0)|0,0,-13)}}Ra=Z;return j|0}case 80:{l=c[Q+8>>2]|0;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=110;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,110,0,j,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}if((i|0)<0)i=(c[k>>2]|0)+-1|0;Ei(Y,(c[Y+104>>2]|0)+(i*20|0)|0,l,0);Ra=Z;return j|0}case 87:{i=Y+108|0;k=c[i>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[i>>2]=k+1;Y=c[Y+104>>2]|0;a[Y+(k*20|0)>>0]=73;b[Y+(k*20|0)+2>>1]=0;c[Y+(k*20|0)+4>>2]=0;c[Y+(k*20|0)+8>>2]=j;c[Y+(k*20|0)+12>>2]=0;c[Y+(k*20|0)+16>>2]=0;a[Y+(k*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,73,0,j,0)|0;Ra=Z;return j|0}}case 90:{q=(c[Q+8>>2]|0)+2|0;p=(Eu(q)|0)&1073741823;r=p+-1|0;k=c[Y>>2]|0;s=(r|0)/2|0;m=s+1|0;n=((m|0)<0)<<31>>31;d:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))X=100;else{m=0;n=1}else{do if(!(0<n>>>0|(0==(n|0)?(e[k+276>>1]|0)>>>0<m>>>0:0))){i=k+300|0;l=c[i>>2]|0;if(l|0){c[i>>2]=c[l>>2];X=k+284|0;c[X>>2]=(c[X>>2]|0)+1;X=101;break d}i=k+296|0;l=c[i>>2]|0;if(!l){i=k+292|0;break}else{c[i>>2]=c[l>>2];X=k+284|0;c[X>>2]=(c[X>>2]|0)+1;X=101;break d}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=100}while(0);if((X|0)==100){l=_d(k,m,n)|0;X=101}if((X|0)==101){k=p+-2|0;if(!l){m=0;n=1}else{if(p>>>0>2){i=0;do{f=a[q+i>>0]|0;X=a[q+(i|1)>>0]|0;a[l+(i>>>1)>>0]=(0-(X>>>6&1)&9)+X&15|(0-(f>>>6&1)&9)+f<<4;i=i+2|0}while((i|0)<(k|0));i=r>>>1}else i=0;a[l+i>>0]=0;m=l;n=0}}l=Y+108|0;i=c[l>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[l>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=75;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=s;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,75,s,j,0)|0;k=c[Y>>2]|0;if(!(a[k+81>>0]|0)){if((i|0)<0)i=(c[l>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(Y,k+(i*20|0)|0,m,-7);Ra=Z;return j|0}if(n){Ra=Z;return j|0}c[k+(i*20|0)+16>>2]=m;a[l>>0]=-7;Ra=Z;return j|0}if(n){Ra=Z;return j|0}if(k|0){if(c[k+480>>2]|0){Xd(k,m);Ra=Z;return j|0}Y=m;if((c[k+304>>2]|0)>>>0<=Y>>>0?(c[k+308>>2]|0)>>>0>Y>>>0:0){Y=k+300|0;c[m>>2]=c[Y>>2];c[Y>>2]=m;Ra=Z;return j|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);Ra=Z;return j|0}else{Y=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);Ra=Z;return j|0}}case 127:{l=Q+32|0;i=b[l>>1]|0;n=Y+108|0;k=c[n>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[n>>2]=k+1;X=c[Y+104>>2]|0;a[X+(k*20|0)>>0]=76;b[X+(k*20|0)+2>>1]=0;c[X+(k*20|0)+4>>2]=i;c[X+(k*20|0)+8>>2]=j;c[X+(k*20|0)+12>>2]=0;c[X+(k*20|0)+16>>2]=0;a[X+(k*20|0)+1>>0]=0}else Di(Y,76,i,j,0)|0;if(!(a[(c[Q+8>>2]|0)+1>>0]|0)){Ra=Z;return j|0}m=c[f+216>>2]|0;k=b[l>>1]|0;e:do if(!m)i=0;else{l=c[m+4>>2]|0;i=2;while(1){if((c[m+(i<<2)>>2]|0)==(k|0))break;i=(c[m+(i+1<<2)>>2]|0)+i|0;if((i|0)>=(l|0)){i=0;break e}}i=m+(i+2<<2)|0}while(0);c[m>>2]=0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}f=c[Y+104>>2]|0;Y=(c[n>>2]|0)+-1|0;a[f+(Y*20|0)+1>>0]=-1;c[f+(Y*20|0)+16>>2]=i;Ra=Z;return j|0}case 138:{j=c[Q+28>>2]|0;Ra=Z;return j|0}case 139:{i=Jj(f,c[Q+12>>2]|0,j)|0;do if((i|0)!=(j|0)){k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;f=c[Y+104>>2]|0;a[f+(l*20|0)>>0]=79;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=i;c[f+(l*20|0)+8>>2]=j;c[f+(l*20|0)+12>>2]=0;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0;break}else{Di(Y,79,i,j,0)|0;break}}while(0);k=c[Q+8>>2]|0;l=a[k>>0]|0;f:do if(!(l<<24>>24))i=67;else{i=67;m=0;do{m=m<<8|d[208+(l&255)>>0];k=k+1|0;g:do if((m|0)<1685026146){if((m|0)<1667785074){switch(m|0){case 1651273570:break;default:{X=152;break g}}switch(i<<24>>24){case 69:case 67:{i=65;break g}default:{X=151;break g}}}if((m|0)<1668050786)switch(m|0){case 1667785074:{i=66;break g}default:{X=152;break g}}else switch(m|0){case 1668050786:{i=66;break g}default:{X=152;break g}}}else{if((m|0)>=1919246700){if((m|0)>=1952807028)switch(m|0){case 1952807028:{i=66;break g}default:{X=152;break g}}switch(m|0){case 1919246700:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}else{X=151;break}}if((m|0)<1718382433){switch(m|0){case 1685026146:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}}else{switch(m|0){case 1718382433:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}}}while(0);if((X|0)==151)X=0;else if((X|0)==152){X=0;if((m&16777215|0)==6909556){i=68;break f}}l=a[k>>0]|0}while(l<<24>>24!=0)}while(0);i=i<<24>>24;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=85;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=j;c[Y+(l*20|0)+8>>2]=i;c[Y+(l*20|0)+12>>2]=0;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,85,j,i,0)|0;Ra=Z;return j|0}}case 157:{l=128;k=(v|0)==45?53:52;X=158;break}case 228:{m=Lj(f,c[Q+12>>2]|0,T)|0;i=Lj(f,c[Q+16>>2]|0,W)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=u;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=m;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;m=j;break}else{Di(Y,v,i,m,j)|0;m=j;break}}case 231:{k=Q+12|0;i=c[k>>2]|0;switch(a[i>>0]|0){case -109:{Kj(f,i,1,j);Ra=Z;return j|0}case -111:{i=c[i+8>>2]|0;if(!i){Ra=Z;return j|0}Lg(i,S,(Eu(i)|0)&1073741823,1)|0;o=-+g[S>>3];g[S>>3]=o;l=c[Y>>2]|0;h:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=244;else X=264;else{do if((e[l+276>>1]|0)>=8){i=l+300|0;k=c[i>>2]|0;if(k|0){c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=245;break h}i=l+296|0;k=c[i>>2]|0;if(!k){i=l+292|0;break}else{c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=245;break h}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=244}while(0);if((X|0)==244){k=_d(l,8,0)|0;X=245}do if((X|0)==245)if(k){g[h>>3]=o;a[k>>0]=a[h>>0];a[k+1>>0]=a[h+1>>0];a[k+2>>0]=a[h+2>>0];a[k+3>>0]=a[h+3>>0];a[k+4>>0]=a[h+4>>0];a[k+5>>0]=a[h+5>>0];a[k+6>>0]=a[h+6>>0];a[k+7>>0]=a[h+7>>0];m=Y+108|0;i=c[m>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;l=c[Y>>2]|0;if(!(a[l+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(i*20|0)+16>>2]=k;a[m>>0]=-13;break}else{Ei(Y,l+(i*20|0)|0,k,-13);break}}if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Y=k;if((c[l+304>>2]|0)>>>0<=Y>>>0?(c[l+308>>2]|0)>>>0>Y>>>0:0){Y=l+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else X=264;while(0);if((X|0)==264){k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[k>>2]|0)+-1|0;k=c[Y+104>>2]|0;if(a[k+(i*20|0)+1>>0]|0)Ei(Y,k+(i*20|0)|0,0,-13)}}Ra=Z;return j|0}default:{a[E>>0]=-109;c[E+4>>2]=17408;c[E+8>>2]=0;m=Lj(f,E,T)|0;i=Lj(f,c[k>>2]|0,W)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=101;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=m;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;m=j;break b}else{Di(Y,101,i,m,j)|0;m=j;break b}}}}case 276:{i=Lj(f,c[Q+12>>2]|0,T)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[Y+104>>2]|0;a[m+(l*20|0)>>0]=u;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=i;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;m=j;break}else{Di(Y,v,i,j,0)|0;m=j;break}}case 279:{l=Lj(f,c[Q+12>>2]|0,T)|0;n=(a[(c[(c[Q+16>>2]|0)+8>>2]|0)+4>>0]|0)==0;m=(n^1)&1;n=(n^(a[Q+38>>0]|0)==45)&1;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=88;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=l;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=m;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else i=Di(Y,88,l,j,m)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){m=c[Y+104>>2]|0;a[m+(i*20|0)+1>>0]=-3;c[m+(i*20|0)+16>>2]=n;m=j}else m=j;break}case 284:{k=Y+108|0;i=c[k>>2]|0;m=Y+112|0;if((c[m>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=70;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=1;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,70,1,j,0)|0;i=Lj(f,c[Q+12>>2]|0,T)|0;l=c[k>>2]|0;if((c[m>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[Y+104>>2]|0;a[S+(l*20|0)>>0]=u;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=0;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else l=Di(Y,v,i,0,0)|0;i=c[k>>2]|0;if((c[m>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=70;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=0;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,70,0,j,0)|0;k=c[k>>2]|0;if(!(a[(c[Y>>2]|0)+81>>0]|0))i=(c[Y+104>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else i=59308;c[i+8>>2]=k;m=j;break}case 296:{i=c[Q+40>>2]|0;if(!i){c[p>>2]=c[Q+8>>2];cd(f,38820,p);m=j;break}j=c[(c[i+40>>2]|0)+(b[Q+34>>1]<<4)+8>>2]|0;Ra=Z;return j|0}case 299:{x=c[f>>2]|0;k=a[x+78>>0]|0;w=Q+4|0;i=c[w>>2]|0;if(i&16777216|0){j=c[(c[Q+44>>2]|0)+52>>2]|0;Ra=Z;return j|0}do if(a[f+23>>0]|0){R=S+20|0;a[R>>0]=2;c[S+4>>2]=127;c[S+8>>2]=128;c[S+24>>2]=0;_j(S,Q)|0;if(!(a[R>>0]|0)){i=c[w>>2]|0;break}j=Nj(f,Q,-1)|0;Ra=Z;return j|0}while(0);if((i&16384|0)==0?(r=c[Q+20>>2]|0,(r|0)!=0):0){A=r;B=c[r>>2]|0;s=1}else{A=0;B=0;s=0}i=c[Q+8>>2]|0;v=Jd(x,i,B,k,0)|0;if(v|0?(c[v+20>>2]|0)==0:0){t=v+4|0;i=c[t>>2]|0;if(i&512|0){i=f+56|0;t=c[i>>2]|0;s=t+-1|0;c[i>>2]=s;i=c[A+4>>2]|0;do if(i){if((a[i>>0]|0)!=-88){z=Jj(f,i,j)|0;X=319;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(m,78,i,j,0)|0;break}}else{z=Jj(f,0,j)|0;X=319}while(0);do if(((X|0)==319?(z|0)!=(j|0):0)?(y=c[M>>2]|0,y|0):0){i=y+108|0;k=c[i>>2]|0;if((c[y+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[y+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=z;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(y,79,z,j,0)|0;break}}while(0);if((B|0)>1){p=Y+108|0;q=Y+112|0;r=Y+104|0;n=1;do{i=c[p>>2]|0;if((c[q>>2]|0)>(i|0)){c[p>>2]=i+1;S=c[r>>2]|0;a[S+(i*20|0)>>0]=51;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=j;c[S+(i*20|0)+8>>2]=s;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,51,j,s,0)|0;i=c[A+4+(n*20|0)>>2]|0;do if(i){if((a[i>>0]|0)!=-88){D=Jj(f,i,j)|0;X=336;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(m,78,i,j,0)|0;break}}else{D=Jj(f,0,j)|0;X=336}while(0);do if(((X|0)==336?(X=0,(D|0)!=(j|0)):0)?(C=c[M>>2]|0,C|0):0){i=C+108|0;k=c[i>>2]|0;if((c[C+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[C+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=D;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(C,79,D,j,0)|0;break}}while(0);n=n+1|0}while((n|0)!=(B|0))}k=c[Y+12>>2]|0;i=0-t|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);m=j;break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[Y+108>>2];m=j;break}}if(i&1024|0){j=Jj(f,c[A+4>>2]|0,j)|0;Ra=Z;return j|0}if((B|0)>0){m=S+20|0;p=S+4|0;q=S+8|0;r=S+24|0;i=0;n=0;l=0;do{if(l>>>0<32){k=c[A+4+(l*20|0)>>2]|0;a[m>>0]=1;c[p>>2]=127;c[q>>2]=128;c[r>>2]=0;if(!k)k=1<<l;else{_j(S,k)|0;k=(a[m>>0]|0)==0?0:1<<l}i=k|i}if(!((n|0)!=0|(c[t>>2]&32|0)==0))n=Yi(f,c[A+4+(l*20|0)>>2]|0)|0;l=l+1|0}while((l|0)!=(B|0));u=i}else{u=0;n=0}if(s){do if(!u)if((B|0)==1){i=f+19|0;k=a[i>>0]|0;if(!(k<<24>>24)){W=f+44|0;l=(c[W>>2]|0)+1|0;c[W>>2]=l;break}else{l=k+-1<<24>>24;a[i>>0]=l;l=c[f+148+((l&255)<<2)>>2]|0;break}}else{i=f+32|0;l=c[i>>2]|0;k=f+28|0;m=c[k>>2]|0;if((m|0)<(B|0)){W=f+44|0;l=c[W>>2]|0;c[W>>2]=l+B;l=l+1|0;break}else{c[i>>2]=l+B;c[k>>2]=m-B;break}}else{W=f+44|0;l=c[W>>2]|0;c[W>>2]=l+B;l=l+1|0}while(0);i=c[t>>2]&192;i:do if(i|0){k=c[A+4>>2]|0;switch(a[k>>0]|0){case -92:case -94:break;default:break i}a[k+38>>0]=i}while(0);Oj(f,A,l,0,3);r=l}else r=0;if((B|0)>1)if(!(c[w>>2]&128))X=375;else{i=A+24|0;X=376}else if((B|0)==1)X=375;else q=v;if((X|0)==375){i=A+4|0;X=376}if((X|0)==376)q=Pj(x,v,B,c[i>>2]|0)|0;do if(c[q+4>>2]&32){if(!n)n=c[x+8>>2]|0;p=Y+108|0;i=c[p>>2]|0;k=Y+112|0;if((c[k>>2]|0)>(i|0)){c[p>>2]=i+1;l=c[Y+104>>2]|0;a[l+(i*20|0)>>0]=82;l=l+(i*20|0)+1|0;m=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0))}else i=Di(Y,82,0,0,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[p>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(a[m>>0]|0){Ei(Y,l+(i*20|0)|0,n,-2);break}if(!n)break;c[l+(i*20|0)+16>>2]=n;a[m>>0]=-2}}else{p=Y+108|0;k=Y+112|0}while(0);l=(c[f+52>>2]|0)==0?63:62;i=c[p>>2]|0;if((c[k>>2]|0)>(i|0)){c[p>>2]=i+1;X=c[Y+104>>2]|0;a[X+(i*20|0)>>0]=l;b[X+(i*20|0)+2>>1]=0;c[X+(i*20|0)+4>>2]=u;c[X+(i*20|0)+8>>2]=r;c[X+(i*20|0)+12>>2]=j;c[X+(i*20|0)+16>>2]=0;a[X+(i*20|0)+1>>0]=0}else i=Di(Y,l,u,r,j)|0;k=c[Y>>2]|0;j:do if(!(a[k+81>>0]|0)){if((i|0)<0)i=(c[p>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(Y,k+(i*20|0)|0,q,-8);break}if(q|0){c[k+(i*20|0)+16>>2]=q;a[l>>0]=-8}}else if(c[q+4>>2]&16|0){do if(k|0){if(c[k+480>>2]|0){Xd(k,q);break j}i=q;if((c[k+304>>2]|0)>>>0>i>>>0)break;if((c[k+308>>2]|0)>>>0<=i>>>0)break;X=k+300|0;c[q>>2]=c[X>>2];c[X>>2]=q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{X=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-X;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);i=c[p>>2]|0;if((i|0)>0)b[(c[Y+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=B&255;if(!((B|0)!=0&(u|0)==0)){Ra=Z;return j|0}if((B|0)!=1){i=f+28|0;if((c[i>>2]|0)>=(B|0)){Ra=Z;return j|0}c[i>>2]=B;c[f+32>>2]=r;Ra=Z;return j|0}if(!r){Ra=Z;return j|0}i=f+19|0;k=a[i>>0]|0;if((k&255)>=8){Ra=Z;return j|0}a[i>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=r;Ra=Z;return j|0}c[t>>2]=i;cd(f,38846,t);m=j;break}case 420:{if((v|0)==131?(k=c[c[c[Q+20>>2]>>2]>>2]|0,(k|0)!=1):0){c[n>>2]=k;c[n+4>>2]=1;cd(f,39001,n);m=j;break}j=Qj(f,Q)|0;Ra=Z;return j|0}case 424:{m=Q+12|0;i=c[m>>2]|0;if(!(c[i+28>>2]|0)){j=Qj(f,i)|0;i=c[m>>2]|0;c[i+28>>2]=j}l=c[Q+28>>2]|0;if(l){k=a[i>>0]|0;if(k<<24>>24==-88)k=a[i+38>>0]|0;switch(k<<24>>24){case -87:{k=i+20|0;X=432;break}case -125:{k=c[i+20>>2]|0;X=432;break}default:k=1}if((X|0)==432)k=c[c[k>>2]>>2]|0;if((l|0)!=(k|0)){c[s>>2]=l;c[s+4>>2]=k;cd(f,38869,s);i=c[m>>2]|0}}j=(c[i+28>>2]|0)+(b[Q+32>>1]|0)|0;Ra=Z;return j|0}case 436:{p=f+56|0;n=c[p>>2]|0;i=n+-2|0;c[p>>2]=i;p=Y+108|0;k=c[p>>2]|0;m=Y+112|0;if((c[m>>2]|0)>(k|0)){c[p>>2]=k+1;X=c[Y+104>>2]|0;a[X+(k*20|0)>>0]=73;b[X+(k*20|0)+2>>1]=0;c[X+(k*20|0)+4>>2]=0;c[X+(k*20|0)+8>>2]=j;c[X+(k*20|0)+12>>2]=0;c[X+(k*20|0)+16>>2]=0;a[X+(k*20|0)+1>>0]=0}else Di(Y,73,0,j,0)|0;Rj(f,Q,n+-1|0,i);i=c[p>>2]|0;if((c[m>>2]|0)>(i|0)){c[p>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=70;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=1;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(Y,70,1,j,0)|0;l=Y+12|0;i=c[l>>2]|0;k=0-n|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,Y,k);else c[(c[i+64>>2]|0)+(k<<2)>>2]=c[p>>2];i=c[p>>2]|0;if((c[m>>2]|0)>(i|0)){c[p>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=83;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=j;c[f+(i*20|0)+8>>2]=0;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(Y,83,j,0,0)|0;k=c[l>>2]|0;i=1-n|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);Ra=Z;return j|0}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[p>>2];Ra=Z;return j|0}}case 451:{Sj(f,c[Q+12>>2]|0,c[Q+20>>2]|0,j,0,0);Ra=Z;return j|0}case 453:{m=c[Q+44>>2]|0;k=G((b[m+42>>1]|0)+1|0,c[Q+28>>2]|0)|0;i=Q+32|0;k=(b[i>>1]|0)+1+k|0;n=Y+108|0;l=c[n>>2]|0;p=Y+112|0;if((c[p>>2]|0)>(l|0)){c[n>>2]=l+1;S=c[Y+104>>2]|0;a[S+(l*20|0)>>0]=-107;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=k;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else Di(Y,149,k,j,0)|0;S=b[i>>1]|0;if(S<<16>>16>-1?(a[(c[m+4>>2]|0)+(S<<16>>16<<4)+13>>0]|0)==69:0){i=c[n>>2]|0;if((c[p>>2]|0)>(i|0)){c[n>>2]=i+1;m=c[Y+104>>2]|0;a[m+(i*20|0)>>0]=84;b[m+(i*20|0)+2>>1]=0;c[m+(i*20|0)+4>>2]=j;c[m+(i*20|0)+8>>2]=0;c[m+(i*20|0)+12>>2]=0;c[m+(i*20|0)+16>>2]=0;a[m+(i*20|0)+1>>0]=0;m=j;break}else{Di(Y,84,j,0,0)|0;m=j;break}}else m=j;break}case 461:{cd(f,38899,l);m=j;break}case 462:{i=c[Q+28>>2]|0;l=Y+108|0;k=c[l>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[l>>2]=k+1;S=c[Y+104>>2]|0;a[S+(k*20|0)>>0]=21;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=i;c[S+(k*20|0)+8>>2]=0;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else k=Di(Y,21,i,0,0)|0;m=Jj(f,c[Q+12>>2]|0,j)|0;i=c[l>>2]|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){j=(k|0)<0?i+-1|0:k;Y=c[Y+104>>2]|0;c[Y+(j*20|0)+8>>2]=i;i=Y+(j*20|0)|0}else{c[14829]=i;i=59308}c[i+12>>2]=m;break}case 469:{C=c[Q+20>>2]|0;D=c[C>>2]|0;F=f+56|0;I=c[F>>2]|0;H=I+-1|0;c[F>>2]=H;i=c[Q+12>>2]|0;z=(i|0)!=0;if(z){l=E;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k=c[i+4>>2]|0;ew(E|0,i|0,((k&16384|0)==0?((k&8192|0)==0?52:28):12)|0)|0;k=a[E>>0]|0;y=E+38|0;switch((k<<24>>24==-88?a[y>>0]|0:k)<<24>>24){case -87:{l=c[E+20>>2]|0;i=l;X=473;break}case -125:{l=c[E+20>>2]|0;i=c[l>>2]|0;X=473;break}default:X=474}k:do if((X|0)==473){x=c[i>>2]|0;if((x|0)!=1){c[T>>2]=0;if(k<<24>>24==-125){i=Qj(f,E)|0;break}Q=f+44|0;P=c[Q>>2]|0;i=P+1|0;c[Q>>2]=P+x;if((x|0)>0){r=E+20|0;s=f+23|0;t=S+20|0;u=S+4|0;v=S+8|0;w=S+24|0;k=0;while(1){l=c[l+4+(k*20|0)>>2]|0;q=k+i|0;do if(!(a[s>>0]|0))if(!l){B=Jj(f,0,q)|0;X=491}else X=485;else{a[t>>0]=2;c[u>>2]=127;c[v>>2]=128;c[w>>2]=0;if(l){_j(S,l)|0;if(!(a[t>>0]|0)){X=485;break}}Nj(f,l,q)|0}while(0);do if((X|0)==485){X=0;if((a[l>>0]|0)!=-88){B=Jj(f,l,q)|0;X=491;break}p=c[M>>2]|0;l=c[l+28>>2]|0;m=p+108|0;n=c[m>>2]|0;if((c[p+112>>2]|0)>(n|0)){c[m>>2]=n+1;Q=c[p+104>>2]|0;a[Q+(n*20|0)>>0]=78;b[Q+(n*20|0)+2>>1]=0;c[Q+(n*20|0)+4>>2]=l;c[Q+(n*20|0)+8>>2]=q;c[Q+(n*20|0)+12>>2]=0;c[Q+(n*20|0)+16>>2]=0;a[Q+(n*20|0)+1>>0]=0;break}else{Di(p,78,l,q,0)|0;break}}while(0);do if(((X|0)==491?(X=0,(B|0)!=(q|0)):0)?(A=c[M>>2]|0,A|0):0){l=A+108|0;m=c[l>>2]|0;if((c[A+112>>2]|0)>(m|0)){c[l>>2]=m+1;Q=c[A+104>>2]|0;a[Q+(m*20|0)>>0]=79;b[Q+(m*20|0)+2>>1]=0;c[Q+(m*20|0)+4>>2]=B;c[Q+(m*20|0)+8>>2]=q;c[Q+(m*20|0)+12>>2]=0;c[Q+(m*20|0)+16>>2]=0;a[Q+(m*20|0)+1>>0]=0;break}else{Di(A,79,B,q,0)|0;break}}while(0);k=k+1|0;if((k|0)==(x|0))break k;l=c[r>>2]|0}}}else X=474}while(0);if((X|0)==474)i=Lj(f,E,T)|0;a[y>>0]=a[E>>0]|0;a[E>>0]=-88;c[E+28>>2]=i;l=E+4|0;c[l>>2]=c[l>>2]&-4097;l=R;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));a[R>>0]=53;c[R+12>>2]=E;c[T>>2]=0;i=R}else i=0;w=D+-1|0;if((D|0)>1){r=R+16|0;s=Y+108|0;t=Y+112|0;u=Y+104|0;v=Y+12|0;q=0;do{k=c[C+4+(q*20|0)>>2]|0;if(z)c[r>>2]=k;else i=k;p=c[F>>2]|0;k=p+-1|0;c[F>>2]=k;Tj(f,i,k,16);k=c[C+4+((q|1)*20|0)>>2]|0;do if(k){if((a[k>>0]|0)!=-88){K=Jj(f,k,j)|0;X=510;break}n=c[M>>2]|0;k=c[k+28>>2]|0;l=n+108|0;m=c[l>>2]|0;if((c[n+112>>2]|0)>(m|0)){c[l>>2]=m+1;S=c[n+104>>2]|0;a[S+(m*20|0)>>0]=78;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=k;c[S+(m*20|0)+8>>2]=j;c[S+(m*20|0)+12>>2]=0;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0;break}else{Di(n,78,k,j,0)|0;break}}else{K=Jj(f,0,j)|0;X=510}while(0);do if(((X|0)==510?(X=0,(K|0)!=(j|0)):0)?(J=c[M>>2]|0,J|0):0){k=J+108|0;l=c[k>>2]|0;if((c[J+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[J+104>>2]|0;a[S+(l*20|0)>>0]=79;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=K;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(J,79,K,j,0)|0;break}}while(0);k=c[s>>2]|0;if((c[t>>2]|0)>(k|0)){c[s>>2]=k+1;S=c[u>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=H;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(Y,11,0,H,0)|0;l=c[v>>2]|0;k=0-p|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Y,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[s>>2];q=q+2|0}while((q|0)<(w|0))}l:do if(!(D&1)){i=Y+108|0;k=c[i>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[Y+104>>2]|0;a[S+(k*20|0)>>0]=73;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(Y,73,0,j,0)|0;break}}else{i=c[C+4+(w*20|0)>>2]|0;do if(i){if((a[i>>0]|0)!=-88){l=Jj(f,i,j)|0;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break l}else{Di(m,78,i,j,0)|0;break l}}else l=Jj(f,0,j)|0;while(0);if((l|0)!=(j|0)?(L=c[M>>2]|0,L|0):0){i=L+108|0;k=c[i>>2]|0;if((c[L+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[L+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=l;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(L,79,l,j,0)|0;break}}}while(0);k=c[Y+12>>2]|0;i=0-I|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,Y,i);else c[(c[k+64>>2]|0)+(i<<2)>>2]=c[Y+108>>2];m=j;break}case 542:{if(!(c[f+120>>2]|0)){cd(f,38917,m);j=0;Ra=Z;return j|0}i=a[Q+1>>0]|0;switch(i<<24>>24){case 2:{Y=c[f+116>>2]|0;a[((Y|0)==0?f:Y)+21>>0]=1;break}case 4:{l=c[Q+8>>2]|0;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=69;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=0;c[S+(i*20|0)+8>>2]=4;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else i=Di(Y,69,0,4,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){m=j;break b}if((i|0)<0)i=(c[k>>2]|0)+-1|0;Ei(Y,(c[Y+104>>2]|0)+(i*20|0)|0,l,0);m=j;break b}default:{}}Uj(f,1811,i<<24>>24,c[Q+8>>2]|0,0,0);m=j;break}}if((X|0)==12){i=c[Q+28>>2]|0;if(!(c[Q+4>>2]&8)){do if((i|0)<0){i=c[f+52>>2]|0;if((i|0)>=0){i=i+-1|0;break}j=(b[Q+32>>1]|0)-i|0;Ra=Z;return j|0}while(0);k=a[Q+38>>0]|0;Vj(Y,c[Q+44>>2]|0,i,b[Q+32>>1]|0,j);if(!(k<<24>>24)){Ra=Z;return j|0}i=c[Y+108>>2]|0;if((i|0)<=0){Ra=Z;return j|0}b[(c[Y+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=k&255;Ra=Z;return j|0}m=Jj(f,c[Q+12>>2]|0,j)|0;i=b[Q+32>>1]|0;if(i<<16>>16>-1){i=a[(c[(c[Q+44>>2]|0)+4>>2]|0)+(i<<16>>16<<4)+13>>0]|0;if(i<<24>>24==65){j=m;Ra=Z;return j|0}else l=i<<24>>24}else l=68;n=Y+108|0;do if((m|0)!=(j|0)){i=c[n>>2]|0;k=Y+112|0;if((c[k>>2]|0)>(i|0)){c[n>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=79;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=m;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0;break}else{Di(Y,79,m,j,0)|0;break}}else k=Y+112|0;while(0);m=38812+((l<<1)+-132)|0;i=c[n>>2]|0;if((c[k>>2]|0)>(i|0)){c[n>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=91;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=j;c[f+(i*20|0)+8>>2]=1;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,91,j,1,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}if((i|0)<0)i=(c[n>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(i*20|0)+16>>2]=m;a[l>>0]=-1;Ra=Z;return j|0}else{Ei(Y,k+(i*20|0)|0,m,-1);Ra=Z;return j|0}}do if((X|0)==158){N=c[Q+12>>2]|0;n=a[N>>0]|0;m=n<<24>>24==-88;if(m)i=a[N+38>>0]|0;else i=n;switch(i<<24>>24){case -87:{q=N+20|0;X=163;break}case -125:{q=c[N+20>>2]|0;X=163;break}default:{}}if((X|0)==163?(c[c[q>>2]>>2]|0)>=2:0){M=k&255;p=l&255;L=c[Q+16>>2]|0;if(m)i=a[N+38>>0]|0;else i=n;switch(i<<24>>24){case -87:{i=N+20|0;X=169;break}case -125:{i=c[N+20>>2]|0;X=169;break}default:l=1}if((X|0)==169)l=c[c[i>>2]>>2]|0;i=f+56|0;K=c[i>>2]|0;J=K+-1|0;c[i>>2]=J;i=a[L>>0]|0;if(i<<24>>24==-88)k=a[L+38>>0]|0;else k=i;switch(k<<24>>24){case -87:{k=L+20|0;X=175;break}case -125:{k=c[L+20>>2]|0;X=175;break}default:k=1}if((X|0)==175)k=c[c[k>>2]>>2]|0;if((l|0)!=(k|0)){cd(f,38899,w);m=j;break}k=M<<24>>24==55?56:M;if(n<<24>>24==-125){H=Qj(f,N)|0;i=a[L>>0]|0}else H=0;if(i<<24>>24==-125)t=Qj(f,L)|0;else t=0;u=N+38|0;v=N+20|0;w=N+28|0;x=N+20|0;y=L+38|0;z=L+20|0;A=L+28|0;B=L+20|0;C=f+19|0;D=l+-1|0;I=Y+108|0;E=Y+112|0;F=Y+104|0;s=l+-2|0;i=p|32;r=0;k=k<<24>>24==57?54:k;while(1){c[S>>2]=0;c[R>>2]=0;switch(a[N>>0]|0){case -88:{m=a[u>>0]|0;switch(m<<24>>24){case -87:{l=x;X=186;break}case -125:{l=c[v>>2]|0;X=186;break}default:l=N}do if((X|0)==186){X=0;if((c[c[l>>2]>>2]|0)>=2)if(m<<24>>24==-125){l=c[(c[c[v>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}else{l=c[(c[x>>2]|0)+4+(r*20|0)>>2]|0;break}else l=N}while(0);p=(c[w>>2]|0)+r|0;break}case -125:{p=r+H|0;l=c[(c[c[v>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}default:{l=c[(c[v>>2]|0)+4+(r*20|0)>>2]|0;p=Lj(f,l,S)|0}}switch(a[L>>0]|0){case -88:{n=a[y>>0]|0;switch(n<<24>>24){case -87:{m=B;X=196;break}case -125:{m=c[z>>2]|0;X=196;break}default:m=L}do if((X|0)==196){X=0;if((c[c[m>>2]>>2]|0)>=2)if(n<<24>>24==-125){m=c[(c[c[z>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}else{m=c[(c[B>>2]|0)+4+(r*20|0)>>2]|0;break}else m=L}while(0);n=(c[A>>2]|0)+r|0;break}case -125:{n=r+t|0;m=c[(c[c[z>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}default:{m=c[(c[z>>2]|0)+4+(r*20|0)>>2]|0;n=Lj(f,m,R)|0}}q=i&255;Mj(f,l,m,k&255,p,n,j,q);l=c[S>>2]|0;if(l|0?(O=a[C>>0]|0,(O&255)<8):0){a[C>>0]=O+1<<24>>24;c[f+148+((O&255)<<2)>>2]=l}l=c[R>>2]|0;if(l|0?(P=a[C>>0]|0,(P&255)<8):0){a[C>>0]=P+1<<24>>24;c[f+148+((P&255)<<2)>>2]=l}if((r|0)==(D|0))break;switch(k<<24>>24){case 53:{i=c[I>>2]|0;if((c[E>>2]|0)>(i|0)){c[I>>2]=i+1;Q=c[F>>2]|0;a[Q+(i*20|0)>>0]=20;b[Q+(i*20|0)+2>>1]=0;c[Q+(i*20|0)+4>>2]=j;c[Q+(i*20|0)+8>>2]=J;c[Q+(i*20|0)+12>>2]=0;c[Q+(i*20|0)+16>>2]=0;a[Q+(i*20|0)+1>>0]=0}else Di(Y,20,j,J,0)|0;i=(q|8)&255;k=53;break}case 52:{i=c[I>>2]|0;if((c[E>>2]|0)>(i|0)){c[I>>2]=i+1;Q=c[F>>2]|0;a[Q+(i*20|0)>>0]=18;b[Q+(i*20|0)+2>>1]=0;c[Q+(i*20|0)+4>>2]=j;c[Q+(i*20|0)+8>>2]=J;c[Q+(i*20|0)+12>>2]=0;c[Q+(i*20|0)+16>>2]=0;a[Q+(i*20|0)+1>>0]=0}else Di(Y,18,j,J,0)|0;i=(q|8)&255;k=52;break}default:{l=c[I>>2]|0;if((c[E>>2]|0)>(l|0)){c[I>>2]=l+1;Q=c[F>>2]|0;a[Q+(l*20|0)>>0]=58;b[Q+(l*20|0)+2>>1]=0;c[Q+(l*20|0)+4>>2]=0;c[Q+(l*20|0)+8>>2]=J;c[Q+(l*20|0)+12>>2]=0;c[Q+(l*20|0)+16>>2]=0;a[Q+(l*20|0)+1>>0]=0}else Di(Y,58,0,J,0)|0;k=(r|0)==(s|0)?M:k}}r=r+1|0}k=c[Y+12>>2]|0;i=0-K|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);m=j;break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[I>>2];m=j;break}}Y=Lj(f,N,T)|0;X=Q+16|0;m=Lj(f,c[X>>2]|0,W)|0;Mj(f,N,c[X>>2]|0,k,Y,m,j,l|32);m=j}while(0);i=c[T>>2]|0;if(i|0?(U=f+19|0,V=a[U>>0]|0,(V&255)<8):0){a[U>>0]=V+1<<24>>24;c[f+148+((V&255)<<2)>>2]=i}i=c[W>>2]|0;if(!i){j=m;Ra=Z;return j|0}k=f+19|0;l=a[k>>0]|0;if((l&255)>=8){j=m;Ra=Z;return j|0}a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=i;j=m;Ra=Z;return j|0}function Kj(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+32|0;s=w+16|0;u=w+8|0;n=w;v=c[f+8>>2]|0;if(c[h+4>>2]&1024|0){l=c[h+8>>2]|0;l=(i|0)==0?l:0-l|0;h=v+108|0;k=c[h>>2]|0;if((c[v+112>>2]|0)>(k|0)){c[h>>2]=k+1;v=c[v+104>>2]|0;a[v+(k*20|0)>>0]=70;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=l;c[v+(k*20|0)+8>>2]=j;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0;Ra=w;return}else{Di(v,70,l,j,0)|0;Ra=w;return}}q=c[h+8>>2]|0;h=Vd(q,n)|0;r=(i|0)!=0;do if(!((h|0)==2|(r|(h|0)!=3)^1)?(o=n,m=c[o>>2]|0,o=c[o+4>>2]|0,!(r&((m|0)==0&(o|0)==-2147483648))):0){if(r){h=(h|0)==3;m=Tv(0,0,m|0,o|0)|0;o=L()|0;m=h?0:m;o=h?-2147483648:o;c[n>>2]=m;c[n+4>>2]=o}n=c[v>>2]|0;a:do if(c[n+272>>2]|0){if(!(a[n+81>>0]|0))t=68}else{do if((e[n+276>>1]|0)>=8){h=n+300|0;l=c[h>>2]|0;if(l|0){c[h>>2]=c[l>>2];t=n+284|0;c[t>>2]=(c[t>>2]|0)+1;t=69;break a}h=n+296|0;l=c[h>>2]|0;if(!l){h=n+292|0;break}else{c[h>>2]=c[l>>2];t=n+284|0;c[t>>2]=(c[t>>2]|0)+1;t=69;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;t=68}while(0);if((t|0)==68){l=_d(n,8,0)|0;t=69}if((t|0)==69?l|0:0){n=l;h=n;a[h>>0]=m;a[h+1>>0]=m>>8;a[h+2>>0]=m>>16;a[h+3>>0]=m>>24;n=n+4|0;a[n>>0]=o;a[n+1>>0]=o>>8;a[n+2>>0]=o>>16;a[n+3>>0]=o>>24;n=v+108|0;h=c[n>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[n>>2]=h+1;o=c[v+104>>2]|0;a[o+(h*20|0)>>0]=71;b[o+(h*20|0)+2>>1]=0;c[o+(h*20|0)+4>>2]=0;c[o+(h*20|0)+8>>2]=j;c[o+(h*20|0)+12>>2]=0;c[o+(h*20|0)+16>>2]=0;a[o+(h*20|0)+1>>0]=0}else h=Di(v,71,0,j,0)|0;m=c[v>>2]|0;if(!(a[m+81>>0]|0)){if((h|0)<0)h=(c[n>>2]|0)+-1|0;m=c[v+104>>2]|0;n=m+(h*20|0)+1|0;if(!(a[n>>0]|0)){c[m+(h*20|0)+16>>2]=l;a[n>>0]=-14;break}else{Ei(v,m+(h*20|0)|0,l,-14);break}}if(m|0){if(c[m+480>>2]|0){Xd(m,l);break}o=l;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[l>>2]=c[o>>2];c[o>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}l=v+108|0;h=c[l>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[l>>2]=h+1;o=c[v+104>>2]|0;a[o+(h*20|0)>>0]=71;b[o+(h*20|0)+2>>1]=0;c[o+(h*20|0)+4>>2]=0;c[o+(h*20|0)+8>>2]=j;c[o+(h*20|0)+12>>2]=0;c[o+(h*20|0)+16>>2]=0;a[o+(h*20|0)+1>>0]=0}else h=Di(v,71,0,j,0)|0;if(!(a[(c[v>>2]|0)+81>>0]|0)){if((h|0)<0)h=(c[l>>2]|0)+-1|0;l=c[v+104>>2]|0;if(a[l+(h*20|0)+1>>0]|0)Ei(v,l+(h*20|0)|0,0,-14)}}else t=7;while(0);do if((t|0)==7?q|0:0){l=a[q>>0]|0;do if(!(l<<24>>24)){h=38972;t=9}else{h=l&255;if(l<<24>>24==48){h=a[q+1>>0]|0;if(!(h<<24>>24)){h=38973;t=9;break}h=h&255;if((h|32|0)==120)break;else k=120}else k=48;p=d[208+h>>0]|0;t=13}while(0);if((t|0)==9){p=0;k=a[208+(d[h>>0]|0)>>0]|0;t=13}if((t|0)==13?(p|0)!=(k&255|0):0){Lg(q,u,(Eu(q)|0)&1073741823,1)|0;if(i|0)g[u>>3]=-+g[u>>3];l=c[v>>2]|0;b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))t=27;else t=47;else{do if((e[l+276>>1]|0)>=8){h=l+300|0;k=c[h>>2]|0;if(k|0){c[h>>2]=c[k>>2];m=l+284|0;c[m>>2]=(c[m>>2]|0)+1;m=k;t=28;break b}h=l+296|0;k=c[h>>2]|0;if(!k){h=l+292|0;break}else{c[h>>2]=c[k>>2];m=l+284|0;c[m>>2]=(c[m>>2]|0)+1;m=k;t=28;break b}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;t=27}while(0);if((t|0)==27){m=_d(l,8,0)|0;t=28}do if((t|0)==28)if(m){h=u;s=c[h>>2]|0;h=c[h+4>>2]|0;l=m;u=l;a[u>>0]=s;a[u+1>>0]=s>>8;a[u+2>>0]=s>>16;a[u+3>>0]=s>>24;l=l+4|0;a[l>>0]=h;a[l+1>>0]=h>>8;a[l+2>>0]=h>>16;a[l+3>>0]=h>>24;l=v+108|0;h=c[l>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[l>>2]=h+1;u=c[v+104>>2]|0;a[u+(h*20|0)>>0]=-111;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=0;c[u+(h*20|0)+8>>2]=j;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else h=Di(v,145,0,j,0)|0;k=c[v>>2]|0;if(!(a[k+81>>0]|0)){if((h|0)<0)h=(c[l>>2]|0)+-1|0;k=c[v+104>>2]|0;l=k+(h*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(h*20|0)+16>>2]=m;a[l>>0]=-13;break}else{Ei(v,k+(h*20|0)|0,m,-13);break}}if(k|0){if(c[k+480>>2]|0){Xd(k,m);break}v=m;if((c[k+304>>2]|0)>>>0<=v>>>0?(c[k+308>>2]|0)>>>0>v>>>0:0){v=k+300|0;c[m>>2]=c[v>>2];c[v>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{v=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else t=47;while(0);if((t|0)==47){k=v+108|0;h=c[k>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[k>>2]=h+1;u=c[v+104>>2]|0;a[u+(h*20|0)>>0]=-111;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=0;c[u+(h*20|0)+8>>2]=j;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else h=Di(v,145,0,j,0)|0;if(!(a[(c[v>>2]|0)+81>>0]|0)){if((h|0)<0)h=(c[k>>2]|0)+-1|0;k=c[v+104>>2]|0;if(a[k+(h*20|0)+1>>0]|0)Ei(v,k+(h*20|0)|0,0,-13)}}break}c[s>>2]=r?34064:59952;c[s+4>>2]=q;cd(f,38975,s)}while(0);Ra=w;return}function Lj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+32|0;g=i;a:do if(!d)f=0;else while(1){f=c[d+4>>2]|0;if(!(f&4096)){f=d;break a}if(!(f&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){f=0;break}}while(0);if((a[b+23>>0]|0?(a[f>>0]|0)!=-88:0)?(d=g+20|0,a[d>>0]=2,c[g+4>>2]=127,c[g+8>>2]=128,c[g+24>>2]=0,_j(g,f)|0,a[d>>0]|0):0){c[e>>2]=0;e=Nj(b,f,-1)|0;Ra=i;return e|0}g=b+19|0;d=a[g>>0]|0;if(!(d<<24>>24)){j=b+44|0;d=(c[j>>2]|0)+1|0;c[j>>2]=d}else{d=d+-1<<24>>24;a[g>>0]=d;d=c[b+148+((d&255)<<2)>>2]|0}f=Jj(b,f,d)|0;if((f|0)!=(d|0))if((d|0)!=0?(h=a[g>>0]|0,(h&255)<8):0){a[g>>0]=h+1<<24>>24;c[b+148+((h&255)<<2)>>2]=d;d=0}else d=0;c[e>>2]=d;j=f;Ra=i;return j|0}function Mj(d,e,f,g,h,i,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0;do if(!(c[e+4>>2]&256)){if(f|0?c[f+4>>2]&256|0:0){n=Yi(d,f)|0;break}l=Yi(d,e)|0;if(!l)n=Yi(d,f)|0;else n=l}else n=Yi(d,e)|0;while(0);f=Xj(f)|0;l=Xj(e)|0;if(f<<24>>24==0|l<<24>>24==0)l=(l|f)<<24>>24==0?65:(l&255)+(f&255)|0;else l=f<<24>>24>66|l<<24>>24>66?67:65;m=l|k;k=d+8|0;d=c[k>>2]|0;f=d+108|0;l=c[f>>2]|0;if((c[d+112>>2]|0)>(l|0)){c[f>>2]=l+1;e=c[d+104>>2]|0;a[e+(l*20|0)>>0]=g;b[e+(l*20|0)+2>>1]=0;c[e+(l*20|0)+4>>2]=i;c[e+(l*20|0)+8>>2]=j;c[e+(l*20|0)+12>>2]=h;c[e+(l*20|0)+16>>2]=0;a[e+(l*20|0)+1>>0]=0}else l=Di(d,g,i,j,h)|0;do if(!(a[(c[d>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[f>>2]|0)+-1|0;f=c[d+104>>2]|0;e=f+(l*20|0)+1|0;if(a[e>>0]|0){Ei(d,f+(l*20|0)|0,n,-2);break}if(n|0){c[f+(l*20|0)+16>>2]=n;a[e>>0]=-2}}while(0);l=c[k>>2]|0;f=c[l+108>>2]|0;if((f|0)<=0)return;b[(c[l+104>>2]|0)+((f+-1|0)*20|0)+2>>1]=m&255;return}function Nj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=b+68|0;h=c[j>>2]|0;i=(e|0)<0;a:do if(i&(h|0)!=0?(f=c[h>>2]|0,(f|0)>0):0){g=h+4|0;while(1){if(a[g+13>>0]&4?(bk(0,c[g>>2]|0,d,-1)|0)==0:0)break;if((f|0)>1){f=f+-1|0;g=g+20|0}else break a}j=c[g+16>>2]|0;return j|0}while(0);if(!d)f=0;else f=dk(c[b>>2]|0,d,0,0)|0;g=nj(c[b>>2]|0,h,f)|0;if(g){f=(c[g>>2]|0)+-1|0;h=g+4+(f*20|0)+13|0;a[h>>0]=a[h>>0]&-5|e>>>29&4;if(i){i=b+44|0;e=(c[i>>2]|0)+1|0;c[i>>2]=e}c[g+4+(f*20|0)+16>>2]=e}c[j>>2]=g;j=e;return j|0}function Oj(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=Ra;Ra=Ra+32|0;A=F;i=h&255;D=79-(i&1)|0;y=c[d+8>>2]|0;j=c[e>>2]|0;if((j|0)<=0){Ra=F;return}w=((a[d+23>>0]|0)==0?i&253:h)&255;q=(w&4|0)==0;r=(w&2|0)==0;s=A+20|0;t=A+4|0;u=A+8|0;v=A+24|0;w=(w&8|0)==0;x=(D|0)==78;l=g+-1|0;m=y+108|0;n=y+112|0;o=y+104|0;p=D&255;k=e+4|0;h=0;i=j;while(1){g=c[k>>2]|0;do if(!q?(j=b[k+16>>1]|0,z=j&65535,j<<16>>16!=0):0){if(!w){h=h+-1|0;i=i+-1|0;break}g=l+z|0;e=h+f|0;j=c[m>>2]|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=j+1;G=c[o>>2]|0;a[G+(j*20|0)>>0]=p;b[G+(j*20|0)+2>>1]=0;c[G+(j*20|0)+4>>2]=g;c[G+(j*20|0)+8>>2]=e;c[G+(j*20|0)+12>>2]=0;c[G+(j*20|0)+16>>2]=0;a[G+(j*20|0)+1>>0]=0;break}else{Di(y,D,g,e,0)|0;break}}else E=10;while(0);a:do if((E|0)==10){E=0;do if(!r){a[s>>0]=2;c[t>>2]=127;c[u>>2]=128;c[v>>2]=0;if(g){_j(A,g)|0;if(!(a[s>>0]|0))break}Nj(d,g,h+f|0)|0;break a}while(0);j=h+f|0;e=Jj(d,g,j)|0;if((e|0)!=(j|0)){if(x){if(!(a[(c[y>>2]|0)+81>>0]|0))g=(c[o>>2]|0)+(((c[m>>2]|0)+-1|0)*20|0)|0;else g=59308;if(((a[g>>0]|0)==78?(B=g+12|0,C=(c[B>>2]|0)+1|0,(C+(c[g+4>>2]|0)|0)==(e|0)):0)?(C+(c[g+8>>2]|0)|0)==(j|0):0){c[B>>2]=C;break}}g=c[m>>2]|0;if((c[n>>2]|0)>(g|0)){c[m>>2]=g+1;G=c[o>>2]|0;a[G+(g*20|0)>>0]=p;b[G+(g*20|0)+2>>1]=0;c[G+(g*20|0)+4>>2]=e;c[G+(g*20|0)+8>>2]=j;c[G+(g*20|0)+12>>2]=0;c[G+(g*20|0)+16>>2]=0;a[G+(g*20|0)+1>>0]=0;break}else{Di(y,D,e,j,0)|0;break}}}while(0);h=h+1|0;if((h|0)>=(i|0))break;else k=k+20|0}Ra=F;return}function Pj(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;l=n+4|0;m=n;c[l>>2]=0;c[m>>2]=0;if(!g){m=d;Ra=n;return m|0}if((a[g>>0]|0)!=-94){m=d;Ra=n;return m|0}g=c[g+44>>2]|0;if(!g){m=d;Ra=n;return m|0}if(!(c[g+56>>2]|0)){m=d;Ra=n;return m|0}g=g+64|0;while(1){g=c[g>>2]|0;if((c[g>>2]|0)==(b|0))break;else g=g+24|0}g=c[g+8>>2]|0;h=c[(c[g>>2]|0)+72>>2]|0;if(!h){m=d;Ra=n;return m|0}k=d+32|0;if(!(_a[h&127](g,f,c[k>>2]|0,l,m)|0)){m=d;Ra=n;return m|0}g=c[k>>2]|0;if(!g)i=41;else i=((Eu(g)|0)&1073741823)+41|0;a:do if(!b){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](i)|0;j=34;break}g=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;f=59064;h=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&h>>>0>0){b=c[14978]|0;f=Tv(h|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&f>>>0<=b>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){m=d;Ra=n;return m|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;b=h}else b=h}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){m=d;Ra=n;return m|0}}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<i>>>0:0))){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];j=b+284|0;c[j>>2]=(c[j>>2]|0)+1;j=34;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];j=b+284|0;c[j>>2]=(c[j>>2]|0)+1;j=34;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,i,0)|0;j=34}while(0);if((j|0)==34)if(!g){m=d;Ra=n;return m|0}else b=g;gw(b+40|0,0,i+-40|0)|0;f=b;g=d;h=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));f=b+40|0;c[b+32>>2]=f;h=c[k>>2]|0;if(!h)g=1;else g=((Eu(h)|0)&1073741823)+1|0;ew(f|0,h|0,g|0)|0;c[b+16>>2]=c[l>>2];c[b+8>>2]=c[m>>2];m=b+4|0;c[m>>2]=c[m>>2]|16;m=b;Ra=n;return m|0}function Qj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+48|0;k=r+8|0;h=r;o=r+16|0;q=c[d+8>>2]|0;p=c[e+20>>2]|0;f=e+4|0;g=c[f>>2]|0;do if(!(g&32)){if(g&33554432|0){c[h>>2]=c[p+20>>2];nk(d,0,39045,h);f=c[e+48>>2]|0;g=c[e+44>>2]|0;h=q+108|0;i=c[h>>2]|0;if((c[q+112>>2]|0)>(i|0)){c[h>>2]=i+1;q=c[q+104>>2]|0;a[q+(i*20|0)>>0]=12;b[q+(i*20|0)+2>>1]=0;c[q+(i*20|0)+4>>2]=f;c[q+(i*20|0)+8>>2]=g;c[q+(i*20|0)+12>>2]=0;c[q+(i*20|0)+16>>2]=0;a[q+(i*20|0)+1>>0]=0}else Di(q,12,f,g,0)|0;q=c[e+28>>2]|0;Ra=r;return q|0}c[f>>2]=g|33554432;i=d+44|0;f=(c[i>>2]|0)+1|0;c[i>>2]=f;c[e+48>>2]=f;i=q+108|0;g=c[i>>2]|0;j=q+112|0;if((c[j>>2]|0)>(g|0)){n=g+1|0;c[i>>2]=n;m=c[q+104>>2]|0;a[m+(g*20|0)>>0]=70;b[m+(g*20|0)+2>>1]=0;c[m+(g*20|0)+4>>2]=0;c[m+(g*20|0)+8>>2]=f;c[m+(g*20|0)+12>>2]=0;c[m+(g*20|0)+16>>2]=0;a[m+(g*20|0)+1>>0]=0;f=n}else f=(Di(q,70,0,f,0)|0)+1|0;c[e+44>>2]=f;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;f=c[q+104>>2]|0;a[f+(h*20|0)>>0]=17;f=f+(h*20|0)+1|0;g=f+19|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));n=h;break}else{n=Di(q,17,0,0,0)|0;break}}else n=0;while(0);m=(n|0)!=0;f=c[p+20>>2]|0;c[k>>2]=m?59952:39084;c[k+4>>2]=f;nk(d,1,39063,k);f=(a[e>>0]|0)==-125;if(f)i=c[c[p>>2]>>2]|0;else i=1;s=d+44|0;j=c[s>>2]|0;k=j+1|0;a[o>>0]=0;l=o+4|0;c[l>>2]=k;c[o+16>>2]=0;g=o+8|0;c[g>>2]=0;h=o+12|0;c[h>>2]=0;j=j+i|0;c[s>>2]=j;do if(f){a[o>>0]=10;c[g>>2]=k;c[h>>2]=i;f=q+108|0;g=c[f>>2]|0;if((c[q+112>>2]|0)>(g|0)){c[f>>2]=g+1;s=c[q+104>>2]|0;a[s+(g*20|0)>>0]=73;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=0;c[s+(g*20|0)+8>>2]=k;c[s+(g*20|0)+12>>2]=j;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0;break}else{Di(q,73,0,k,j)|0;break}}else{a[o>>0]=3;g=q+108|0;f=c[g>>2]|0;if((c[q+112>>2]|0)>(f|0)){c[g>>2]=f+1;s=c[q+104>>2]|0;a[s+(f*20|0)>>0]=70;b[s+(f*20|0)+2>>1]=0;c[s+(f*20|0)+4>>2]=0;c[s+(f*20|0)+8>>2]=k;c[s+(f*20|0)+12>>2]=0;c[s+(f*20|0)+16>>2]=0;a[s+(f*20|0)+1>>0]=0;break}else{Di(q,70,0,k,0)|0;break}}while(0);i=oj(c[d>>2]|0,147,17144,0)|0;h=p+60|0;f=c[h>>2]|0;if(!f){s=ej(d,141,i,0)|0;c[h>>2]=s}else{f=f+12|0;g=c[f>>2]|0;if(g){ni(c[d>>2]|0,g);f=(c[h>>2]|0)+12|0}c[f>>2]=i}c[p+12>>2]=0;if(kj(d,p,o)|0){s=0;Ra=r;return s|0}i=c[l>>2]|0;c[e+28>>2]=i;if(!m){s=i;Ra=r;return s|0}h=q+108|0;g=c[h>>2]|0;if(!(a[(c[q>>2]|0)+81>>0]|0))f=(c[q+104>>2]|0)+(((n|0)<0?g+-1|0:n)*20|0)|0;else f=59308;c[f+8>>2]=g;f=c[e+48>>2]|0;if((c[q+112>>2]|0)>(g|0)){c[h>>2]=g+1;s=c[q+104>>2]|0;a[s+(g*20|0)>>0]=66;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=f;c[s+(g*20|0)+8>>2]=0;c[s+(g*20|0)+12>>2]=0;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0}else Di(q,66,f,0,0)|0;f=c[e+44>>2]|0;g=c[h>>2]|0;if(!(a[(c[q>>2]|0)+81>>0]|0))f=(c[q+104>>2]|0)+((((f|0)<1?g:f)+-1|0)*20|0)|0;else f=59308;c[f+4>>2]=g+-1;s=i;Ra=r;return s|0}function Rj(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+48|0;G=U+12|0;E=U+8|0;m=U+4|0;D=U;c[E>>2]=0;c[D>>2]=0;B=f+12|0;N=c[B>>2]|0;if(ok(d,f)|0){Ra=U;return}T=pk(d,f)|0;j=c[B>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;J=7;break}case -125:{i=c[j+20>>2]|0;J=7;break}default:K=1}if((J|0)==7)K=c[c[i>>2]>>2]|0;k=c[d>>2]|0;l=(K*5|0)+1|0;a:do if(!k){Q=Sv(l|0,0,-1,-1)|0;P=L()|0;if(!(P>>>0>0|(P|0)==0&Q>>>0>2147483390)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;J=32;break}i=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){Q=c[14978]|0;P=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&P>>>0<=Q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;J=33}else J=33}else Q=0}else Q=0}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){Q=0;break}}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<l>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];J=k+284|0;c[J>>2]=(c[J>>2]|0)+1;J=32;break a}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];J=k+284|0;c[J>>2]=(c[J>>2]|0)+1;J=32;break a}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(k,l,0)|0;J=32}while(0);if((J|0)==32)if(!i)Q=0;else J=33;if((J|0)==33){gw(i|0,0,l|0)|0;Q=i}i=c[d>>2]|0;if(!(a[i+81>>0]|0)){w=d+8|0;P=c[w>>2]|0;C=(g|0)==(h|0);z=qk(d,f,3,C?0:E,Q,D)|0;j=a[N>>0]|0;if(j<<24>>24==-88)i=a[N+38>>0]|0;else i=j;switch(i<<24>>24){case -87:{i=N+20|0;J=40;break}case -125:{i=c[N+20>>2]|0;J=40;break}default:J=41}do if((J|0)==40){v=c[c[i>>2]>>2]|0;if((v|0)!=1){c[m>>2]=0;if(j<<24>>24==-125){O=Qj(d,N)|0;break}O=d+44|0;M=c[O>>2]|0;n=M+1|0;c[O>>2]=M+v;if((v|0)>0){o=N+20|0;p=d+23|0;q=G+20|0;r=G+4|0;s=G+8|0;t=G+24|0;m=0;do{i=c[(c[o>>2]|0)+4+(m*20|0)>>2]|0;u=m+n|0;do if(!(a[p>>0]|0))if(!i){y=Jj(d,0,u)|0;J=58}else J=52;else{a[q>>0]=2;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(i){_j(G,i)|0;if(!(a[q>>0]|0)){J=52;break}}Nj(d,i,u)|0}while(0);do if((J|0)==52){J=0;if((a[i>>0]|0)!=-88){y=Jj(d,i,u)|0;J=58;break}l=c[w>>2]|0;i=c[i+28>>2]|0;j=l+108|0;k=c[j>>2]|0;if((c[l+112>>2]|0)>(k|0)){c[j>>2]=k+1;O=c[l+104>>2]|0;a[O+(k*20|0)>>0]=78;b[O+(k*20|0)+2>>1]=0;c[O+(k*20|0)+4>>2]=i;c[O+(k*20|0)+8>>2]=u;c[O+(k*20|0)+12>>2]=0;c[O+(k*20|0)+16>>2]=0;a[O+(k*20|0)+1>>0]=0;break}else{Di(l,78,i,u,0)|0;break}}while(0);do if(((J|0)==58?(J=0,(y|0)!=(u|0)):0)?(x=c[w>>2]|0,x|0):0){i=x+108|0;j=c[i>>2]|0;if((c[x+112>>2]|0)>(j|0)){c[i>>2]=j+1;O=c[x+104>>2]|0;a[O+(j*20|0)>>0]=79;b[O+(j*20|0)+2>>1]=0;c[O+(j*20|0)+4>>2]=y;c[O+(j*20|0)+8>>2]=u;c[O+(j*20|0)+12>>2]=0;c[O+(j*20|0)+16>>2]=0;a[O+(j*20|0)+1>>0]=0;break}else{Di(x,79,y,u,0)|0;break}}while(0);m=m+1|0}while((m|0)!=(v|0));O=n}else O=n}else J=41}while(0);if((J|0)==41)O=Lj(d,N,m)|0;r=(K|0)>0;b:do if(r){i=0;do{if((c[Q+(i<<2)>>2]|0)!=(i|0))break b;i=i+1|0}while((i|0)<(K|0))}else i=0;while(0);if((i|0)!=(K|0)){do if((K|0)==1){i=d+19|0;j=a[i>>0]|0;if(!(j<<24>>24)){M=d+44|0;j=(c[M>>2]|0)+1|0;c[M>>2]=j;break}else{j=j+-1<<24>>24;a[i>>0]=j;j=c[d+148+((j&255)<<2)>>2]|0;break}}else{i=d+32|0;j=c[i>>2]|0;k=d+28|0;l=c[k>>2]|0;if((l|0)<(K|0)){M=d+44|0;j=c[M>>2]|0;c[M>>2]=j+K;j=j+1|0;break}else{c[i>>2]=j+K;c[k>>2]=l-K;break}}while(0);if(r){k=P+108|0;l=P+112|0;m=P+104|0;i=0;do{n=i+O|0;o=(c[Q+(i<<2)>>2]|0)+j|0;p=c[k>>2]|0;if((c[l>>2]|0)>(p|0)){c[k>>2]=p+1;M=c[m>>2]|0;a[M+(p*20|0)>>0]=78;b[M+(p*20|0)+2>>1]=0;c[M+(p*20|0)+4>>2]=n;c[M+(p*20|0)+8>>2]=o;c[M+(p*20|0)+12>>2]=0;c[M+(p*20|0)+16>>2]=0;a[M+(p*20|0)+1>>0]=0}else Di(P,78,n,o,0)|0;i=i+1|0}while((i|0)!=(K|0));M=j}else M=j}else M=O;c:do if((z|0)==5){v=c[f+20>>2]|0;s=Yi(d,c[B>>2]|0)|0;u=d+56|0;x=c[u>>2]|0;t=x+-1|0;c[u>>2]=t;u=(h|0)!=(g|0);do if(u){i=d+19|0;j=a[i>>0]|0;if(!(j<<24>>24)){N=d+44|0;i=(c[N>>2]|0)+1|0;c[N>>2]=i}else{N=j+-1<<24>>24;a[i>>0]=N;i=c[d+148+((N&255)<<2)>>2]|0}j=P+108|0;k=c[j>>2]|0;if((c[P+112>>2]|0)>(k|0)){c[j>>2]=k+1;w=c[P+104>>2]|0;a[w+(k*20|0)>>0]=96;b[w+(k*20|0)+2>>1]=0;c[w+(k*20|0)+4>>2]=M;c[w+(k*20|0)+8>>2]=M;c[w+(k*20|0)+12>>2]=i;c[w+(k*20|0)+16>>2]=0;a[w+(k*20|0)+1>>0]=0;w=i;break}else{Di(P,96,M,M,i)|0;w=i;break}}else w=0;while(0);if((c[v>>2]|0)>0){m=(w|0)==0;n=P+108|0;o=P+112|0;p=P+104|0;q=d+19|0;r=(s|0)==0;l=0;do{i=v+4+(l*20|0)|0;k=Lj(d,c[i>>2]|0,G)|0;d:do if(!m){i=c[i>>2]|0;j=a[i>>0]|0;if((j+91&255)<2)do{i=c[i+12>>2]|0;j=a[i>>0]|0}while((j+91&255)<2);if(j<<24>>24==-88)j=a[i+38>>0]|0;e:do switch(j<<24>>24){case -110:case -111:case 110:case -109:break d;case -94:{if(!(c[i+4>>2]&1048576)){j=c[i+44>>2]|0;if(!j)break e;i=b[i+32>>1]|0;if(i<<16>>16<=-1)break d;if(a[(c[j+4>>2]|0)+(i<<16>>16<<4)+12>>0]|0)break d}break}default:{}}while(0);i=c[n>>2]|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=96;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=w;c[N+(i*20|0)+8>>2]=k;c[N+(i*20|0)+12>>2]=w;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0;break}else{Di(P,96,w,k,w)|0;break}}while(0);i=c[n>>2]|0;j=(c[o>>2]|0)>(i|0);if(u|(l|0)<((c[v>>2]|0)+-1|0)){if(j){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=53;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=M;c[N+(i*20|0)+8>>2]=t;c[N+(i*20|0)+12>>2]=k;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else i=Di(P,53,M,t,k)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[p>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(P,j+(i*20|0)|0,s,-2);break}if(r)break;c[j+(i*20|0)+16>>2]=s;a[k>>0]=-2}while(0);i=c[n>>2]|0;if((i|0)>0)b[(c[p>>2]|0)+((i+-1|0)*20|0)+2>>1]=a[T>>0]|0}else{if(j){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=52;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=M;c[N+(i*20|0)+8>>2]=g;c[N+(i*20|0)+12>>2]=k;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else i=Di(P,52,M,g,k)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[p>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(P,j+(i*20|0)|0,s,-2);break}if(r)break;c[j+(i*20|0)+16>>2]=s;a[k>>0]=-2}while(0);i=c[n>>2]|0;if((i|0)>0)b[(c[p>>2]|0)+((i+-1|0)*20|0)+2>>1]=(a[T>>0]|16)<<24>>24}i=c[G>>2]|0;if(i|0?(F=a[q>>0]|0,(F&255)<8):0){a[q>>0]=F+1<<24>>24;c[d+148+((F&255)<<2)>>2]=i}l=l+1|0}while((l|0)<(c[v>>2]|0))}l=(w|0)==0;do if(!l){j=P+108|0;i=c[j>>2]|0;k=P+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;N=c[P+104>>2]|0;a[N+(i*20|0)>>0]=50;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=w;c[N+(i*20|0)+8>>2]=h;c[N+(i*20|0)+12>>2]=0;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else Di(P,50,w,h,0)|0;i=c[j>>2]|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;h=c[P+104>>2]|0;a[h+(i*20|0)>>0]=11;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=0;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=0;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);j=c[P+12>>2]|0;i=0-x|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,P,i);else c[(c[j+64>>2]|0)+(i<<2)>>2]=c[P+108>>2];if(!l?(H=d+19|0,I=a[H>>0]|0,(I&255)<8):0){a[H>>0]=I+1<<24>>24;c[d+148+((I&255)<<2)>>2]=w}}else{if(C){l=g;q=0}else{l=d+56|0;q=(c[l>>2]|0)+-1|0;c[l>>2]=q;l=q}f:do if(r){n=P+108|0;o=P+112|0;p=P+104|0;m=0;while(1){i=c[B>>2]|0;k=a[i>>0]|0;if(k<<24>>24==-88)j=a[i+38>>0]|0;else j=k;switch(j<<24>>24){case -87:{j=i+20|0;J=158;break}case -125:{j=c[i+20>>2]|0;J=158;break}default:{}}do if((J|0)==158){J=0;if((c[c[j>>2]>>2]|0)>=2){if(k<<24>>24!=-125?(a[i+38>>0]|0)!=-125:0){i=c[(c[i+20>>2]|0)+4+(m*20|0)>>2]|0;break}i=c[(c[c[i+20>>2]>>2]|0)+4+(m*20|0)>>2]|0}}while(0);j=a[i>>0]|0;if((j+91&255)<2)do{i=c[i+12>>2]|0;j=a[i>>0]|0}while((j+91&255)<2);if(j<<24>>24==-88)j=a[i+38>>0]|0;g:do switch(j<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if((c[i+4>>2]&1048576|0)==0?(A=c[i+44>>2]|0,(A|0)!=0):0){i=b[i+32>>1]|0;if(i<<16>>16<=-1)break g;if(!(a[(c[A+4>>2]|0)+(i<<16>>16<<4)+12>>0]|0))J=173}else J=173;break}default:J=173}while(0);do if((J|0)==173){J=0;i=m+M|0;j=c[n>>2]|0;if((c[o>>2]|0)>(j|0)){c[n>>2]=j+1;I=c[p>>2]|0;a[I+(j*20|0)>>0]=50;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=i;c[I+(j*20|0)+8>>2]=l;c[I+(j*20|0)+12>>2]=0;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0;break}else{Di(P,50,i,l,0)|0;break}}while(0);m=m+1|0;if((m|0)==(K|0))break f}}while(0);do if((z|0)==1){l=c[D>>2]|0;j=P+108|0;i=c[j>>2]|0;k=P+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=30;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=l;c[I+(i*20|0)+8>>2]=g;c[I+(i*20|0)+12>>2]=M;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else Di(P,30,l,g,M)|0;i=c[j>>2]|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;j=c[P+104>>2]|0;a[j+(i*20|0)>>0]=11;j=j+(i*20|0)+1|0;k=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));z=l;break}else{i=Di(P,11,0,0,0)|0;z=l;break}}else{n=P+108|0;i=c[n>>2]|0;m=P+112|0;if((c[m>>2]|0)>(i|0)){c[n>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=91;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=M;c[I+(i*20|0)+8>>2]=K;c[I+(i*20|0)+12>>2]=0;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else i=Di(P,91,M,K,0)|0;j=c[P>>2]|0;h:do if(a[j+81>>0]|0){if((K|0)!=-12)kg(j,K,T)}else{if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[P+104>>2]|0;k=j+(i*20|0)|0;do if((K|0)<=-1){l=j+(i*20|0)+1|0;if(a[l>>0]|0)break;if((K|0)==-3){c[j+(i*20|0)+16>>2]=T;a[l>>0]=-3;break h}if(!T)break h;c[j+(i*20|0)+16>>2]=T;a[l>>0]=K;if((K|0)!=-12)break h;I=T+12|0;c[I>>2]=(c[I>>2]|0)+1;break h}while(0);Ei(P,k,T,K)}while(0);k=c[D>>2]|0;i=c[n>>2]|0;j=(c[m>>2]|0)>(i|0);if(C){if(j){c[n>>2]=i+1;h=c[P+104>>2]|0;a[h+(i*20|0)>>0]=28;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=k;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=M;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0}else i=Di(P,28,k,g,M)|0;if(a[(c[P>>2]|0)+81>>0]|0)break c;g=c[P+104>>2]|0;a[g+(i*20|0)+1>>0]=-3;c[g+(i*20|0)+16>>2]=K;break c}else{if(j){c[n>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=29;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=k;c[I+(i*20|0)+8>>2]=0;c[I+(i*20|0)+12>>2]=M;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else i=Di(P,29,k,0,M)|0;if(a[(c[P>>2]|0)+81>>0]|0){z=k;break}z=c[P+104>>2]|0;a[z+(i*20|0)+1>>0]=-3;c[z+(i*20|0)+16>>2]=K;z=k;break}}while(0);j=c[E>>2]|0;do if((K|0)==1&(j|0)!=0){k=P+108|0;l=c[k>>2]|0;if((c[P+112>>2]|0)>(l|0)){c[k>>2]=l+1;I=c[P+104>>2]|0;a[I+(l*20|0)>>0]=51;b[I+(l*20|0)+2>>1]=0;c[I+(l*20|0)+4>>2]=j;c[I+(l*20|0)+8>>2]=g;c[I+(l*20|0)+12>>2]=0;c[I+(l*20|0)+16>>2]=0;a[I+(l*20|0)+1>>0]=0;break}else{Di(P,51,j,g,0)|0;break}}while(0);do if(C){j=P+108|0;k=c[j>>2]|0;if((c[P+112>>2]|0)>(k|0)){c[j>>2]=k+1;I=c[P+104>>2]|0;a[I+(k*20|0)>>0]=11;b[I+(k*20|0)+2>>1]=0;c[I+(k*20|0)+4>>2]=0;c[I+(k*20|0)+8>>2]=g;c[I+(k*20|0)+12>>2]=0;c[I+(k*20|0)+16>>2]=0;a[I+(k*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);do if(q|0){k=c[P+12>>2]|0;j=~q;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,P,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[P+108>>2];break}}while(0);y=P+108|0;j=c[y>>2]|0;f=P+112|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;x=c[P+104>>2]|0;a[x+(j*20|0)>>0]=36;b[x+(j*20|0)+2>>1]=0;c[x+(j*20|0)+4>>2]=z;c[x+(j*20|0)+8>>2]=g;c[x+(j*20|0)+12>>2]=0;c[x+(j*20|0)+16>>2]=0;a[x+(j*20|0)+1>>0]=0;x=j}else x=Di(P,36,z,g,0)|0;v=(K|0)>1;if(v){I=d+56|0;w=(c[I>>2]|0)+-1|0;c[I>>2]=w}else w=g;i:do if(r){p=d+19|0;q=d+44|0;r=N+38|0;s=N+20|0;t=N+20|0;u=P+104|0;o=0;while(1){j=a[p>>0]|0;if(!(j<<24>>24)){n=(c[q>>2]|0)+1|0;c[q>>2]=n}else{n=j+-1<<24>>24;a[p>>0]=n;n=c[d+148+((n&255)<<2)>>2]|0}k=a[N>>0]|0;if(k<<24>>24==-88)j=a[r>>0]|0;else j=k;switch(j<<24>>24){case -87:{j=s;J=237;break}case -125:{j=c[t>>2]|0;J=237;break}default:j=N}j:do if((J|0)==237){J=0;if((c[c[j>>2]>>2]|0)<2){j=N;break}do if(k<<24>>24!=-125){if((a[r>>0]|0)==-125)break;j=c[(c[s>>2]|0)+4+(o*20|0)>>2]|0;break j}while(0);j=c[(c[c[t>>2]>>2]|0)+4+(o*20|0)>>2]|0}while(0);m=Yi(d,j)|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;I=c[u>>2]|0;a[I+(j*20|0)>>0]=90;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=z;c[I+(j*20|0)+8>>2]=o;c[I+(j*20|0)+12>>2]=n;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else Di(P,90,z,o,n)|0;k=o+M|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;I=c[u>>2]|0;a[I+(j*20|0)>>0]=52;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=k;c[I+(j*20|0)+8>>2]=w;c[I+(j*20|0)+12>>2]=n;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else j=Di(P,52,k,w,n)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[y>>2]|0)+-1|0;k=c[u>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(P,k+(j*20|0)|0,m,-2);break}if(!m)break;c[k+(j*20|0)+16>>2]=m;a[l>>0]=-2}while(0);do if(n|0){j=a[p>>0]|0;if((j&255)>=8)break;a[p>>0]=j+1<<24>>24;c[d+148+((j&255)<<2)>>2]=n}while(0);o=o+1|0;if((o|0)==(K|0))break i}}while(0);j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;N=c[P+104>>2]|0;a[N+(j*20|0)>>0]=11;b[N+(j*20|0)+2>>1]=0;c[N+(j*20|0)+4>>2]=0;c[N+(j*20|0)+8>>2]=h;c[N+(j*20|0)+12>>2]=0;c[N+(j*20|0)+16>>2]=0;a[N+(j*20|0)+1>>0]=0}else Di(P,11,0,h,0)|0;do if(v){k=c[P+12>>2]|0;j=~w;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,P,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[y>>2];j=x+1|0;k=c[y>>2]|0;if((c[f>>2]|0)>(k|0)){c[y>>2]=k+1;h=c[P+104>>2]|0;a[h+(k*20|0)>>0]=5;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=z;c[h+(k*20|0)+8>>2]=j;c[h+(k*20|0)+12>>2]=0;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0}else Di(P,5,z,j,0)|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;h=c[P+104>>2]|0;a[h+(j*20|0)>>0]=11;b[h+(j*20|0)+2>>1]=0;c[h+(j*20|0)+4>>2]=0;c[h+(j*20|0)+8>>2]=g;c[h+(j*20|0)+12>>2]=0;c[h+(j*20|0)+16>>2]=0;a[h+(j*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);j=c[y>>2]|0;if(!(a[(c[P>>2]|0)+81>>0]|0))i=(c[P+104>>2]|0)+(((i|0)<0?j+-1|0:i)*20|0)|0;else i=59308;c[i+8>>2]=j}while(0);if(!((M|0)==(O|0)|(M|0)==0)?(R=d+19|0,S=a[R>>0]|0,(S&255)<8):0){a[R>>0]=S+1<<24>>24;c[d+148+((S&255)<<2)>>2]=M}i=c[d>>2]|0}do if(Q|0){if(i|0){if(c[i+480>>2]|0){Xd(i,Q);break}S=Q;if((c[i+304>>2]|0)>>>0<=S>>>0?(c[i+308>>2]|0)>>>0>S>>>0:0){S=i+300|0;c[Q>>2]=c[S>>2];c[S>>2]=Q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{S=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);i=c[d>>2]|0;if(!T){Ra=U;return}if(i|0){if(c[i+480>>2]|0){Xd(i,T);Ra=U;return}d=T;if((c[i+304>>2]|0)>>>0<=d>>>0?(c[i+308>>2]|0)>>>0>d>>>0:0){d=i+300|0;c[T>>2]=c[d>>2];c[d>>2]=T;Ra=U;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](T);Ra=U;return}else{d=Wa[c[29352>>2]&127](T)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](T);Ra=U;return}}function Sj(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+240|0;y=E+212|0;C=E+160|0;j=E+108|0;k=E+56|0;B=E+4|0;D=E;c[D>>2]=0;l=j;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=k;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=C;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=B;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));w=c[e+4>>2]|0;ew(B|0,e|0,((w&16384|0)==0?((w&8192|0)==0?52:28):12)|0)|0;a[C>>0]=44;c[C+12>>2]=j;c[C+16>>2]=k;a[j>>0]=57;c[j+12>>2]=B;c[j+16>>2]=c[f+4>>2];a[k>>0]=55;c[k+12>>2]=B;c[k+16>>2]=c[f+24>>2];f=a[B>>0]|0;w=B+38|0;switch((f<<24>>24==-88?a[w>>0]|0:f)<<24>>24){case -87:{j=c[B+20>>2]|0;e=j;x=4;break}case -125:{j=c[B+20>>2]|0;e=c[j>>2]|0;x=4;break}default:x=5}a:do if((x|0)==4){v=c[e>>2]|0;if((v|0)!=1){c[D>>2]=0;if(f<<24>>24==-125){e=Qj(d,B)|0;break}u=d+44|0;t=c[u>>2]|0;e=t+1|0;c[u>>2]=t+v;if((v|0)>0){o=B+20|0;p=d+23|0;q=y+20|0;r=y+4|0;s=y+8|0;t=y+24|0;u=d+8|0;f=0;while(1){j=c[j+4+(f*20|0)>>2]|0;n=f+e|0;do if(!(a[p>>0]|0))if(!j){A=Jj(d,0,n)|0;x=22}else x=16;else{a[q>>0]=2;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(j){_j(y,j)|0;if(!(a[q>>0]|0)){x=16;break}}Nj(d,j,n)|0}while(0);do if((x|0)==16){x=0;if((a[j>>0]|0)!=-88){A=Jj(d,j,n)|0;x=22;break}m=c[u>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[m+104>>2]|0;a[m+(l*20|0)>>0]=78;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=j;c[m+(l*20|0)+8>>2]=n;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,n,0)|0;break}}while(0);do if(((x|0)==22?(x=0,(A|0)!=(n|0)):0)?(z=c[u>>2]|0,z|0):0){j=z+108|0;k=c[j>>2]|0;if((c[z+112>>2]|0)>(k|0)){c[j>>2]=k+1;m=c[z+104>>2]|0;a[m+(k*20|0)>>0]=79;b[m+(k*20|0)+2>>1]=0;c[m+(k*20|0)+4>>2]=A;c[m+(k*20|0)+8>>2]=n;c[m+(k*20|0)+12>>2]=0;c[m+(k*20|0)+16>>2]=0;a[m+(k*20|0)+1>>0]=0;break}else{Di(z,79,A,n,0)|0;break}}while(0);f=f+1|0;if((f|0)==(v|0))break a;j=c[o>>2]|0}}}else x=5}while(0);if((x|0)==5)e=Lj(d,B,D)|0;a[w>>0]=a[B>>0]|0;a[B>>0]=-88;c[B+28>>2]=e;e=B+4|0;f=c[e>>2]&-4097;c[e>>2]=f;if(!h){c[e>>2]=f|1;Jj(d,C,g)|0}else db[h&127](d,C,g,i);e=c[D>>2]|0;if(!e){Ra=E;return}f=d+19|0;j=a[f>>0]|0;if((j&255)>=8){Ra=E;return}a[f>>0]=j+1<<24>>24;c[d+148+((j&255)<<2)>>2]=e;Ra=E;return}function Tj(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;m=t+8|0;p=t+4|0;s=t;o=c[d+8>>2]|0;c[p>>2]=0;c[s>>2]=0;if((e|0)==0|(o|0)==0){Ra=t;return}h=a[e>>0]|0;j=h^1;k=j&255;a:do switch(h<<24>>24){case 44:{Tj(d,c[e+12>>2]|0,f,g);Tj(d,c[e+16>>2]|0,f,g);break}case 43:{l=d+56|0;m=c[l>>2]|0;h=m+-1|0;c[l>>2]=h;tk(d,c[e+12>>2]|0,h,g^16);Tj(d,c[e+16>>2]|0,f,g);h=c[o+12>>2]|0;g=0-m|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}case 19:{tk(d,c[e+12>>2]|0,f,g);break}case -89:{o=(a[e+38>>0]|0)==-96;h=c[e+12>>2]|0;g=o?0:16;if(o^(a[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>0]|0)==0){Tj(d,h,f,g);break a}else{tk(d,h,f,g);break a}}case -96:case 45:{g=128;i=h<<24>>24==45?52:53;n=12;break}case 53:case 52:case 57:case 54:case 55:case 56:{i=k;n=12;break}case 51:case 50:{h=Lj(d,c[e+12>>2]|0,p)|0;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=j;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break a}else{Di(o,k,h,f,0)|0;break a}}case 48:{Sj(d,c[e+12>>2]|0,c[e+20>>2]|0,f,66,g);break}case 49:{if(g|0){Rj(d,e,f,f);break a}m=d+56|0;g=c[m>>2]|0;h=g+-1|0;c[m>>2]=h;Rj(d,e,f,h);h=c[o+12>>2]|0;g=0-g|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}default:{c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)==0&1;else h=0;n=36}}while(0);do if((n|0)==12){j=e+12|0;k=c[j>>2]|0;h=a[k>>0]|0;if(h<<24>>24==-88)h=a[k+38>>0]|0;switch(h<<24>>24){case -87:{l=k+20|0;n=17;break}case -125:{l=c[k+20>>2]|0;n=17;break}default:{}}if((n|0)==17?(c[c[l>>2]>>2]|0)>=2:0){c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)==0&1;else h=0;n=36;break}m=Lj(d,k,p)|0;e=e+16|0;o=Lj(d,c[e>>2]|0,s)|0;Mj(d,c[j>>2]|0,c[e>>2]|0,i,m,o,f,g)}while(0);do if((n|0)==36){if(h|0){h=o+108|0;g=c[h>>2]|0;if((c[o+112>>2]|0)>(g|0)){c[h>>2]=g+1;o=c[o+104>>2]|0;a[o+(g*20|0)>>0]=11;b[o+(g*20|0)+2>>1]=0;c[o+(g*20|0)+4>>2]=0;c[o+(g*20|0)+8>>2]=f;c[o+(g*20|0)+12>>2]=0;c[o+(g*20|0)+16>>2]=0;a[o+(g*20|0)+1>>0]=0;break}else{Di(o,11,0,f,0)|0;break}}c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0){if(c[m>>2]|0)break}else n=42;j=Lj(d,e,p)|0;h=(g|0)!=0&1;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=20;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=j;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break}else{Di(o,20,j,f,h)|0;break}}while(0);h=c[p>>2]|0;if(h|0?(q=d+19|0,r=a[q>>0]|0,(r&255)<8):0){a[q>>0]=r+1<<24>>24;c[d+148+((r&255)<<2)>>2]=h}h=c[s>>2]|0;if(!h){Ra=t;return}g=d+19|0;i=a[g>>0]|0;if((i&255)>=8){Ra=t;return}a[g>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=h;Ra=t;return}function Uj(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=d+8|0;k=c[p>>2]|0;a:do if(!k){o=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))n=15;else{p=0;break a}else{do if((e[o+276>>1]|0)>=224){k=o+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}k=o+296|0;l=c[k>>2]|0;if(!l){k=o+292|0;break}else{c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;n=15}while(0);if((n|0)==15)m=_d(o,224,0)|0;if(!m)p=0;else{k=m+104|0;l=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[m>>2]=o;k=o+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=d;c[p>>2]=m;Di(m,61,0,1,0)|0;p=m}}else p=k;while(0);if((g|0)==2){o=c[d+116>>2]|0;a[((o|0)==0?d:o)+21>>0]=1}n=i<<24>>24;o=p+108|0;k=c[o>>2]|0;if((c[p+112>>2]|0)>(k|0)){c[o>>2]=k+1;d=c[p+104>>2]|0;a[d+(k*20|0)>>0]=69;b[d+(k*20|0)+2>>1]=0;c[d+(k*20|0)+4>>2]=f;c[d+(k*20|0)+8>>2]=g;c[d+(k*20|0)+12>>2]=0;c[d+(k*20|0)+16>>2]=0;a[d+(k*20|0)+1>>0]=0}else k=Di(p,69,f,g,0)|0;l=c[p>>2]|0;do if(a[l+81>>0]|0){if(i<<24>>24!=-12)kg(l,n,h)}else{if((k|0)<0)k=(c[o>>2]|0)+-1|0;l=c[p+104>>2]|0;m=l+(k*20|0)|0;if(i<<24>>24<=-1?(q=l+(k*20|0)+1|0,(a[q>>0]|0)==0):0){if(i<<24>>24==-3){c[l+(k*20|0)+16>>2]=h;a[q>>0]=-3;break}if(!h)break;c[l+(k*20|0)+16>>2]=h;a[q>>0]=i;if(i<<24>>24!=-12)break;q=h+12|0;c[q>>2]=(c[q>>2]|0)+1;break}Ei(p,m,h,n)}while(0);k=c[o>>2]|0;if((k|0)<=0)return;b[(c[p+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=j&255;return}function Vj(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r;if(!f){j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;e=c[e+104>>2]|0;a[e+(k*20|0)>>0]=90;b[e+(k*20|0)+2>>1]=0;c[e+(k*20|0)+4>>2]=g;c[e+(k*20|0)+8>>2]=h;c[e+(k*20|0)+12>>2]=i;c[e+(k*20|0)+16>>2]=0;a[e+(k*20|0)+1>>0]=0;Ra=r;return}else{Di(e,90,g,h,i)|0;Ra=r;return}}do if((h|0)>=0?(b[f+40>>1]|0)!=(h|0):0){m=(c[f+56>>2]|0)!=0;n=m?164:90;if(m|(c[f+36>>2]&32|0)==0)j=h;else{j=c[f+8>>2]|0;a:do if(!j)j=0;else while(1){m=j+55|0;if(((d[m>>0]|d[m+1>>0]<<8)&3)==2)break a;j=c[j+20>>2]|0;if(!j){j=0;break}}while(0);m=h&65535;k=b[j+52>>1]|0;b:do if(!(k<<16>>16))j=-1;else{l=c[j+4>>2]|0;k=k&65535;j=0;while(1){if((b[l+(j<<1)>>1]|0)==m<<16>>16)break b;j=j+1|0;if(j>>>0>=k>>>0){j=-1;break}}}while(0);j=j<<16>>16}k=e+108|0;l=c[k>>2]|0;if((c[e+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[e+104>>2]|0;a[m+(l*20|0)>>0]=n;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=g;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=i;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;break}else{Di(e,n,g,j,i)|0;break}}else o=7;while(0);do if((o|0)==7){j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;o=c[e+104>>2]|0;a[o+(k*20|0)>>0]=-128;b[o+(k*20|0)+2>>1]=0;c[o+(k*20|0)+4>>2]=g;c[o+(k*20|0)+8>>2]=i;c[o+(k*20|0)+12>>2]=0;c[o+(k*20|0)+16>>2]=0;a[o+(k*20|0)+1>>0]=0;break}else{Di(e,128,g,i,0)|0;break}}while(0);if((h|0)<=-1){Ra=r;return}if(!(c[f+12>>2]|0)){c[p>>2]=0;m=c[e>>2]|0;j=f+4|0;k=c[j>>2]|0;l=c[k+(h<<4)+4>>2]|0;do if(l|0?(Wj(m,l,a[m+78>>0]|0,a[k+(h<<4)+13>>0]|0,p)|0,q=c[p>>2]|0,q|0):0){k=c[e>>2]|0;if(!(a[k+81>>0]|0)){g=c[e+104>>2]|0;p=(c[e+108>>2]|0)+-1|0;a[g+(p*20|0)+1>>0]=-11;c[g+(p*20|0)+16>>2]=q;break}else{kg(k,-11,q);break}}while(0)}else j=f+4|0;if((a[(c[j>>2]|0)+(h<<4)+13>>0]|0)!=69){Ra=r;return}j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;e=c[e+104>>2]|0;a[e+(k*20|0)>>0]=84;b[e+(k*20|0)+2>>1]=0;c[e+(k*20|0)+4>>2]=i;c[e+(k*20|0)+8>>2]=0;c[e+(k*20|0)+12>>2]=0;c[e+(k*20|0)+16>>2]=0;a[e+(k*20|0)+1>>0]=0;Ra=r;return}else{Di(e,84,i,0,0)|0;Ra=r;return}}function Wj(f,i,j,k,l){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+32|0;u=H+16|0;D=H+8|0;E=H;F=H+24|0;c[F>>2]=0;p=i;a:while(1){i=a[p>>0]|0;switch(i<<24>>24){case -90:case -83:break;default:break a}p=c[p+12>>2]|0}if(i<<24>>24==-88)i=d[p+38>>0]|0;else i=i&255;b:do switch((i&255)<<24>>24){case 36:{i=c[p+8>>2]|0;n=a[i>>0]|0;c:do if(!(n<<24>>24))m=67;else{m=67;o=0;do{o=o<<8|d[208+(n&255)>>0];i=i+1|0;d:do if((o|0)<1685026146){if((o|0)<1667785074){switch(o|0){case 1651273570:break;default:{G=16;break d}}switch(m<<24>>24){case 69:case 67:{m=65;break d}default:{G=15;break d}}}if((o|0)<1668050786)switch(o|0){case 1667785074:{m=66;break d}default:{G=16;break d}}else switch(o|0){case 1668050786:{m=66;break d}default:{G=16;break d}}}else{if((o|0)>=1919246700){if((o|0)>=1952807028)switch(o|0){case 1952807028:{m=66;break d}default:{G=16;break d}}switch(o|0){case 1919246700:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}else{G=15;break}}if((o|0)<1718382433){switch(o|0){case 1685026146:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}}else{switch(o|0){case 1718382433:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}}}while(0);if((G|0)==15)G=0;else if((G|0)==16){G=0;if((o&16777215|0)==6909556){m=68;break c}}n=a[i>>0]|0}while(n<<24>>24!=0)}while(0);s=Wj(f,c[p+12>>2]|0,j,m,l)|0;i=c[l>>2]|0;if(!i){l=s;Ra=H;return l|0}Sg(i,m,1);r=c[l>>2]|0;if(k<<24>>24<=66){if(k<<24>>24!=66){l=s;Ra=H;return l|0}m=r+8|0;i=b[m>>1]|0;l=i&65535;if(!((l&2|0)!=0|(l&12|0)==0)){Hg(r,1,1)|0;i=b[m>>1]|0}b[m>>1]=i&-13;l=s;Ra=H;return l|0}p=r+8|0;n=b[p>>1]|0;i=n&65535;if(i&4|0){l=s;Ra=H;return l|0}if(i&8|0){q=+g[r>>3];i=Mg(q)|0;m=L()|0;l=Sv(i|0,m|0,1,-2147483648)|0;G=L()|0;if(!((G>>>0>0|(G|0)==0&l>>>0>1)&q==+(i>>>0)+4294967296.0*+(m|0))){l=s;Ra=H;return l|0}l=r;c[l>>2]=i;c[l+4>>2]=m;b[p>>1]=n&15904|4;l=s;Ra=H;return l|0}if(!(i&2)){l=s;Ra=H;return l|0}i=a[r+10>>0]|0;m=r+16|0;n=r+12|0;if(Lg(c[m>>2]|0,D,c[n>>2]|0,i)|0){if(Og(c[m>>2]|0,E,c[n>>2]|0,i)|0){q=+g[D>>3];g[r>>3]=q;m=b[p>>1]|0;i=m|8;b[p>>1]=i;n=Mg(q)|0;o=L()|0;l=Sv(n|0,o|0,1,-2147483648)|0;f=L()|0;if((f>>>0>0|(f|0)==0&l>>>0>1)&q==+(n>>>0)+4294967296.0*+(o|0)){i=r;c[i>>2]=n;c[i+4>>2]=o;i=m&15904;G=28}}else{l=E;G=c[l+4>>2]|0;i=r;c[i>>2]=c[l>>2];c[i+4>>2]=G;i=b[p>>1]|0;G=28}if((G|0)==28){i=i|4;b[p>>1]=i}b[p>>1]=i&-3}l=s;Ra=H;return l|0}case -91:{i=c[p+12>>2]|0;m=a[i>>0]|0;switch(m<<24>>24){case -111:case -109:break;default:{G=107;break b}}t=34064;p=i;s=m&255;o=-1;r=-1;G=39;break}default:{t=59952;s=i;o=1;r=0;G=39}}while(0);e:do if((G|0)==39){f:do switch(s|0){case 110:case 145:case 147:{g:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=64;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){C=c[14978]|0;B=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&B>>>0<=C>>>0)&1}m=Wa[c[29340>>2]&127](i)|0;if(m){i=Wa[c[29352>>2]&127](m)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;C=m}else C=m}else G=65}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=65;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=64;break g}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=64;break g}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=64}while(0);if((G|0)==64)if(!i)G=65;else C=i;if((G|0)==65){c[F>>2]=0;n=0;m=0;break f}m=C;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));B=C+8|0;b[B>>1]=1;c[C+32>>2]=f;c[F>>2]=C;i=C;if(!(c[p+4>>2]&1024)){m=c[p+8>>2]|0;c[u>>2]=t;c[u+4>>2]=m;m=dd(f,38967,u)|0;if(!m){n=C;m=C;break f}yc(C,m,-1,1,116)|0}else{u=c[p+8>>2]|0;u=Yv(o|0,r|0,u|0,((u|0)<0)<<31>>31|0)|0;F=L()|0;f=C;c[f>>2]=u;c[f+4>>2]=F;b[B>>1]=4}do if(k<<24>>24==65&(s|2|0)==147){o=b[B>>1]|0;m=o&65535;if(!(m&4)){if(m&8|0){q=+g[C>>3];m=Mg(q)|0;n=L()|0;f=Sv(m|0,n|0,1,-2147483648)|0;F=L()|0;if(!((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0)))break;f=C;c[f>>2]=m;c[f+4>>2]=n;b[B>>1]=o&15904|4;break}if(m&2|0?(v=a[C+10>>0]|0,w=C+16|0,x=C+12|0,Lg(c[w>>2]|0,D,c[x>>2]|0,v)|0):0){if(Og(c[w>>2]|0,E,c[x>>2]|0,v)|0){q=+g[D>>3];g[C>>3]=q;n=b[B>>1]|0;m=n|8;b[B>>1]=m;o=Mg(q)|0;p=L()|0;f=Sv(o|0,p|0,1,-2147483648)|0;F=L()|0;if((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(o>>>0)+4294967296.0*+(p|0)){m=C;c[m>>2]=o;c[m+4>>2]=p;m=n&15904;G=79}}else{f=E;G=c[f+4>>2]|0;m=C;c[m>>2]=c[f>>2];c[m+4>>2]=G;m=b[B>>1]|0;G=79}if((G|0)==79){m=m|4;b[B>>1]=m}b[B>>1]=m&-3}}}else{if(k<<24>>24<=66){if(k<<24>>24!=66)break;m=b[B>>1]|0;f=m&65535;if(!((f&2|0)!=0|(f&12|0)==0)){Hg(C,1,1)|0;m=b[B>>1]|0}b[B>>1]=m&-13;break}o=b[B>>1]|0;m=o&65535;if(!(m&4)){if(m&8|0){q=+g[C>>3];m=Mg(q)|0;n=L()|0;f=Sv(m|0,n|0,1,-2147483648)|0;F=L()|0;if(!((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0)))break;f=C;c[f>>2]=m;c[f+4>>2]=n;b[B>>1]=o&15904|4;break}if(m&2|0?(y=a[C+10>>0]|0,z=C+16|0,A=C+12|0,Lg(c[z>>2]|0,D,c[A>>2]|0,y)|0):0){if(Og(c[z>>2]|0,E,c[A>>2]|0,y)|0){q=+g[D>>3];g[C>>3]=q;n=b[B>>1]|0;m=n|8;b[B>>1]=m;o=Mg(q)|0;p=L()|0;f=Sv(o|0,p|0,1,-2147483648)|0;F=L()|0;if((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(o>>>0)+4294967296.0*+(p|0)){m=C;c[m>>2]=o;c[m+4>>2]=p;m=n&15904;G=93}}else{f=E;G=c[f+4>>2]|0;m=C;c[m>>2]=c[f>>2];c[m+4>>2]=G;m=b[B>>1]|0;G=93}if((G|0)==93){m=m|4;b[B>>1]=m}b[B>>1]=m&-3}}}while(0);m=b[B>>1]|0;n=m&65535;if(n&12){m=n&65533;b[B>>1]=m}if(j<<24>>24==1|(m&2)==0){m=0;break e}if((a[C+10>>0]|0)==j<<24>>24){m=0;break e}m=Ig(C,j)|0;break e}case 165:{i=c[p+12>>2]|0;G=107;break e}case 114:{h:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=154;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){G=c[14978]|0;j=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&j>>>0<=G>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;G=156}else G=156}else G=155}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=155;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=154;break h}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=154;break h}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=154}while(0);if((G|0)==154)if(!i)G=155;else G=156;if((G|0)==155){c[F>>2]=0;n=0;m=0;break f}else if((G|0)==156){m=i;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));b[i+8>>1]=1;c[i+32>>2]=f;c[F>>2]=i;oh(i);m=0;break e}break}case 146:{i:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=180;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){j=c[14978]|0;E=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;D=L()|0;c[14768]=((D|0)<0|(D|0)==0&E>>>0<=j>>>0)&1}m=Wa[c[29340>>2]&127](i)|0;if(m){i=Wa[c[29352>>2]&127](m)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;v=m}else v=m}else G=181}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=181;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=180;break i}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=180;break i}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=180}while(0);if((G|0)==180)if(!i)G=181;else v=i;if((G|0)==181){c[F>>2]=0;n=0;m=0;break f}m=v;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));b[v+8>>1]=1;c[v+32>>2]=f;c[F>>2]=v;i=v;s=(c[p+8>>2]|0)+2|0;r=(Eu(s)|0)&1073741823;t=r+-1|0;u=(t|0)/2|0;o=u+1|0;p=((o|0)<0)<<31>>31;j:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))G=192;else m=0;else{do if(!(0<p>>>0|(0==(p|0)?(e[f+276>>1]|0)>>>0<o>>>0:0))){n=f+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=193;break j}n=f+296|0;m=c[n>>2]|0;if(!m){m=f+292|0;break}else{c[n>>2]=c[m>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=193;break j}}else m=f+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;G=192}while(0);if((G|0)==192){m=_d(f,o,p)|0;G=193}if((G|0)==193){o=r+-2|0;if(!m)m=0;else{if(r>>>0>2){n=0;do{f=a[s+n>>0]|0;j=a[s+(n|1)>>0]|0;a[m+(n>>>1)>>0]=(0-(j>>>6&1)&9)+j&15|(0-(f>>>6&1)&9)+f<<4;n=n+2|0}while((n|0)<(o|0));n=t>>>1}else n=0;a[m+n>>0]=0}}yc(v,m,u,0,116)|0;m=0;break e}case 159:{k:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=223;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){G=c[14978]|0;j=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&j>>>0<=G>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;G=225}else G=225}else G=224}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=224;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=223;break k}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=223;break k}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=223}while(0);if((G|0)==223)if(!i)G=224;else G=225;if((G|0)==224){c[F>>2]=0;m=0;i=0;break e}else if((G|0)==225){m=i;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));c[i+32>>2]=f;c[F>>2]=i;b[i+8>>1]=4;m=i;c[m>>2]=(a[(c[p+8>>2]|0)+4>>0]|0)==0&1;c[m+4>>2]=0;m=0;break e}break}default:{m=0;i=0;break e}}while(0);i=f+81|0;if((a[i>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;i=f+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[f+236>>2]|0;if(i|0)c[i+12>>2]=7}if(!n){l=7;Ra=H;return l|0}if(!((b[n+8>>1]&9216)==0?!(c[n+24>>2]|0):0))Cg(n);i=c[n+32>>2]|0;if(i|0){if(c[i+480>>2]|0){Xd(i,m);l=7;Ra=H;return l|0}l=n;if((c[i+304>>2]|0)>>>0<=l>>>0?(c[i+308>>2]|0)>>>0>l>>>0:0){l=i+300|0;c[n>>2]=c[l>>2];c[l>>2]=m;l=7;Ra=H;return l|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);l=7;Ra=H;return l|0}else{l=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);l=7;Ra=H;return l|0}}while(0);do if((G|0)==107){f=(Wj(f,i,j,k,F)|0)==0;p=c[F>>2]|0;s=p;if(f&(p|0)!=0){oh(p);r=p+8|0;i=b[r>>1]|0;do if(!(i&8)){n=p;m=c[n>>2]|0;n=c[n+4>>2]|0;if((m|0)==0&(n|0)==-2147483648){g[p>>3]=9223372036854775808.0;i=i&15904|8;b[r>>1]=i;q=9223372036854775808.0;break}else{F=Tv(0,0,m|0,n|0)|0;f=L()|0;C=p;c[C>>2]=F;c[C+4>>2]=f;c[h>>2]=F;c[h+4>>2]=f;q=+g[h>>3];break}}else{q=-+g[p>>3];g[p>>3]=q}while(0);if(k<<24>>24<=66){if(k<<24>>24!=66){m=0;i=s;break}G=i&65535;if(!((G&2|0)!=0|(G&12|0)==0)){Hg(p,j,1)|0;i=b[r>>1]|0}b[r>>1]=i&-13;m=0;i=s;break}m=i&65535;if(!(m&4)){if(m&8|0){m=Mg(q)|0;n=L()|0;G=Sv(m|0,n|0,1,-2147483648)|0;f=L()|0;if(!((f>>>0>0|(f|0)==0&G>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0))){m=0;i=s;break}G=p;c[G>>2]=m;c[G+4>>2]=n;b[r>>1]=i&15904|4;m=0;i=s;break}if(m&2){i=a[p+10>>0]|0;m=p+16|0;n=p+12|0;if(Lg(c[m>>2]|0,D,c[n>>2]|0,i)|0){if(Og(c[m>>2]|0,E,c[n>>2]|0,i)|0){q=+g[D>>3];g[p>>3]=q;m=b[r>>1]|0;i=m|8;b[r>>1]=i;n=Mg(q)|0;o=L()|0;f=Sv(n|0,o|0,1,-2147483648)|0;j=L()|0;if((j>>>0>0|(j|0)==0&f>>>0>1)&q==+(n>>>0)+4294967296.0*+(o|0)){i=p;c[i>>2]=n;c[i+4>>2]=o;i=m&15904;G=122}}else{f=E;G=c[f+4>>2]|0;i=p;c[i>>2]=c[f>>2];c[i+4>>2]=G;i=b[r>>1]|0;G=122}if((G|0)==122){i=i|4;b[r>>1]=i}b[r>>1]=i&-3}m=0;i=s}else{m=0;i=s}}else{m=0;i=s}}else{m=0;i=s}}while(0);c[l>>2]=i;l=m;Ra=H;return l|0}function Xj(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a:while(1){f=c[e+4>>2]|0;if(f&4096)do{if(!(f&262144))e=e+12|0;else e=(c[e+20>>2]|0)+4|0;e=c[e>>2]|0;f=c[e+4>>2]|0}while((f&4096|0)!=0);if(f&512|0){g=0;k=31;break}f=a[e>>0]|0;if(f<<24>>24==-125)e=(c[c[e+20>>2]>>2]|0)+4|0;else{if(f<<24>>24==-88)f=d[e+38>>0]|0;else f=f&255;switch((f&255)<<24>>24){case 36:{k=15;break a}case -94:case -92:{k=26;break a}case -86:break;default:break a}e=(c[c[(c[e+12>>2]|0)+20>>2]>>2]|0)+4+((b[e+32>>1]|0)*20|0)|0}e=c[e>>2]|0}if((k|0)==15){f=c[e+8>>2]|0;g=a[f>>0]|0;if(!(g<<24>>24)){k=67;return k|0}h=67;i=0;while(1){i=i<<8|d[208+(g&255)>>0];f=f+1|0;b:do if((i|0)<1685026146){if((i|0)<1667785074){switch(i|0){case 1651273570:break;default:{k=24;break b}}switch(h<<24>>24){case 69:case 67:{j=65;break b}default:{k=23;break b}}}if((i|0)<1668050786)switch(i|0){case 1667785074:{j=66;break b}default:{k=24;break b}}else switch(i|0){case 1668050786:{j=66;break b}default:{k=24;break b}}}else{if((i|0)>=1919246700){if((i|0)>=1952807028)switch(i|0){case 1952807028:{j=66;break b}default:{k=24;break b}}switch(i|0){case 1919246700:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}else{k=23;break}}if((i|0)<1718382433){switch(i|0){case 1685026146:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}}else{switch(i|0){case 1718382433:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}}j=h}while(0);if((k|0)==23){k=0;j=h}else if((k|0)==24){k=0;if((i&16777215|0)==6909556){g=68;k=31;break}else j=h}g=a[f>>0]|0;if(!(g<<24>>24)){g=j;k=31;break}else h=j}if((k|0)==31)return g|0}else if((k|0)==26){f=c[e+44>>2]|0;if(f|0){e=b[e+32>>1]|0;if(e<<16>>16<=-1){k=68;return k|0}k=a[(c[f+4>>2]|0)+(e<<16>>16<<4)+13>>0]|0;return k|0}}else if((k|0)==31)return g|0;k=a[e+1>>0]|0;return k|0}function Yj(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=b+20|0;m=a[l>>0]|0;n=m<<24>>24==2;if(n?c[e+4>>2]&1|0:0){a[l>>0]=0;n=2;return n|0}a:do switch(a[e>>0]|0){case -95:{if((m&255)>3){n=0;return n|0}if(c[e+4>>2]&524288|0){n=0;return n|0}a[l>>0]=0;n=2;return n|0}case 59:{if(!(c[e+4>>2]&67108864)){g=c[e+8>>2]|0;k=a[g>>0]|0;j=d[208+(k&255)>>0]|0;f=j+-116|0;k=k<<24>>24==0;if(!(k|(f|0)!=0)){h=41806;i=g;do{i=i+1|0;h=h+1|0;o=a[i>>0]|0;f=(d[208+(o&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(f|0)!=0))}if(f|0){f=j+-102|0;if(!(k|(f|0)!=0)){h=41811;do{g=g+1|0;h=h+1|0;o=a[g>>0]|0;f=(d[208+(o&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(f|0)!=0))}if(f|0){f=18;break a}}a[e>>0]=-97;o=1;return o|0}else f=18;break}case -92:case -93:case -94:{f=18;break}case -88:case -85:break;case -108:switch(m<<24>>24){case 5:{a[e>>0]=114;o=0;return o|0}case 4:{a[l>>0]=0;o=2;return o|0}default:{o=0;return o|0}}default:{o=0;return o|0}}while(0);do if((f|0)==18){if(c[e+4>>2]&8|0){if(n)break;else f=0;return f|0}if(m<<24>>24==3?(c[e+28>>2]|0)==(c[b+24>>2]|0):0){o=0;return o|0}}while(0);a[l>>0]=0;o=2;return o|0}function Zj(b,c){b=b|0;c=c|0;a[b+20>>0]=0;return 2}function _j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=b+4|0;e=Xa[c[f>>2]&255](b,d)|0;a:do if(!e){p=d;while(1){if(c[p+4>>2]&8404992|0){g=0;d=56;break}d=c[p+12>>2]|0;if(d|0?_j(b,d)|0:0){g=2;d=56;break}e=c[p+16>>2]|0;if(!e){d=9;break}d=Xa[c[f>>2]&255](b,e)|0;if(!d)p=e;else{q=d;break a}}if((d|0)==9){k=p+4|0;b:do if(!(c[k>>2]&2048)){d=c[p+20>>2]|0;if(d|0?(i=c[d>>2]|0,(i|0)>0):0){f=d+4|0;d=i;while(1){e=c[f>>2]|0;if(e|0?_j(b,e)|0:0){g=2;break}if((d|0)>1){f=f+20|0;d=d+-1|0}else break b}return g|0}}else{e=c[p+20>>2]|0;if(e|0?(m=b+8|0,h=c[m>>2]|0,h|0):0){j=b+12|0;d=Xa[h&255](b,e)|0;c:do if(!d){d:while(1){if(ak(b,e)|0){g=2;d=56;break}d=c[e+32>>2]|0;f=c[d>>2]|0;if((f|0)>0){i=d+8|0;while(1){d=c[i+20>>2]|0;if(d|0?$j(b,d)|0:0){g=2;d=56;break d}if((a[i+37>>0]&4?(n=c[i+64>>2]|0,n|0):0)?(o=c[n>>2]|0,(o|0)>0):0){d=n+4|0;g=o;while(1){h=c[d>>2]|0;if(h|0?_j(b,h)|0:0){g=2;d=56;break d}if((g|0)>1){d=d+20|0;g=g+-1|0}else break}}if((f|0)>1){i=i+72|0;f=f+-1|0}else break}}d=c[j>>2]|0;if(d|0)bb[d&127](b,e);e=c[e+52>>2]|0;if(!e)break b;d=Xa[c[m>>2]&255](b,e)|0;if(d|0){l=d;break c}}if((d|0)==56)return g|0}else l=d;while(0);if(l&2|0){s=2;return s|0}}}while(0);if(!(c[k>>2]&16777216)){s=0;return s|0}d=c[p+44>>2]|0;if(!d){s=0;return s|0}e:while(1){e=c[d+12>>2]|0;if(e|0?(s=c[e>>2]|0,(s|0)>0):0){e=e+4|0;f=s;while(1){g=c[e>>2]|0;if(g|0?_j(b,g)|0:0){g=2;d=56;break e}if((f|0)>1){e=e+20|0;f=f+-1|0}else break}}e=c[d+8>>2]|0;if(e|0?(r=c[e>>2]|0,(r|0)>0):0){e=e+4|0;f=r;while(1){g=c[e>>2]|0;if(g|0?_j(b,g)|0:0){g=2;d=56;break e}if((f|0)>1){e=e+20|0;f=f+-1|0}else break}}e=c[d+36>>2]|0;if(e|0?_j(b,e)|0:0){g=2;d=56;break}d=c[d+32>>2]|0;if(!d){g=0;d=56;break}}if((d|0)==56)return g|0}else if((d|0)==56)return g|0}else q=e;while(0);s=q&2;return s|0}function $j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!d){m=0;return m|0}l=b+8|0;e=c[l>>2]|0;if(!e){m=0;return m|0}m=b+12|0;e=Xa[e&255](b,d)|0;a:do if(!e){b:while(1){if(ak(b,d)|0){e=2;d=23;break}e=c[d+32>>2]|0;f=c[e>>2]|0;if((f|0)>0){i=e+8|0;while(1){e=c[i+20>>2]|0;if(e|0?$j(b,e)|0:0){e=2;d=23;break b}if((a[i+37>>0]&4?(j=c[i+64>>2]|0,j|0):0)?(k=c[j>>2]|0,(k|0)>0):0){e=j+4|0;g=k;while(1){h=c[e>>2]|0;if(h|0?_j(b,h)|0:0){e=2;d=23;break b}if((g|0)>1){e=e+20|0;g=g+-1|0}else break}}if((f|0)>1){i=i+72|0;f=f+-1|0}else break}}e=c[m>>2]|0;if(e|0)bb[e&127](b,d);d=c[d+52>>2]|0;if(!d){e=0;d=23;break}e=Xa[c[l>>2]&255](b,d)|0;if(e|0)break a}if((d|0)==23)return e|0}while(0);m=e&2;return m|0}function ak(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[b>>2]|0;a:do if(e|0?(f=c[e>>2]|0,(f|0)>0):0){g=e+4|0;e=f;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break a}return e|0}while(0);e=c[b+36>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[b+40>>2]|0;b:do if(e|0?(h=c[e>>2]|0,(h|0)>0):0){g=e+4|0;e=h;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break b}return e|0}while(0);e=c[b+44>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[b+48>>2]|0;c:do if(e|0?(i=c[e>>2]|0,(i|0)>0):0){g=e+4|0;e=i;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break c}return e|0}while(0);e=c[b+60>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[a>>2]|0;if(!e){k=0;return k|0}if((d[e+200>>0]|0)<=1){k=0;return k|0}e=c[b+72>>2]|0;if(!e){k=0;return k|0}d:while(1){f=c[e+12>>2]|0;if(f|0?(j=c[f>>2]|0,(j|0)>0):0){f=f+4|0;g=j;while(1){h=c[f>>2]|0;if(h|0?_j(a,h)|0:0){e=2;f=44;break d}if((g|0)>1){f=f+20|0;g=g+-1|0}else break}}f=c[e+8>>2]|0;if(f|0?(k=c[f>>2]|0,(k|0)>0):0){f=f+4|0;g=k;while(1){h=c[f>>2]|0;if(h|0?_j(a,h)|0:0){e=2;f=44;break d}if((g|0)>1){f=f+20|0;g=g+-1|0}else break}}f=c[e+36>>2]|0;if(f|0?_j(a,f)|0:0){e=2;f=44;break}e=c[e+32>>2]|0;if(!e){e=0;f=44;break}}if((f|0)==44)return e|0;return 0}function bk(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;j=t;if((g|0)==0|(h|0)==0){i=(h|0)==(g|0)?0:2;Ra=t;return i|0}do if(f|0?(a[g>>0]|0)==-108:0){c[j>>2]=0;Wj(c[f>>2]|0,h,1,65,j)|0;s=c[j>>2]|0;if(!s)break;n=b[g+32>>1]|0;j=n<<16>>16;o=c[f+8>>2]|0;n=n<<16>>16>31;k=o+208|0;o=o+208|0;c[(n?o:k)>>2]=c[(n?o:k)>>2]|(n?-2147483648:1<<j+-1);k=c[f+220>>2]|0;a:do if((k|0)!=0?(o=c[k+100>>2]|0,q=j+-1|0,p=o+(q*40|0)|0,q=o+(q*40|0)+8|0,(b[q>>1]&1)==0):0){n=c[k>>2]|0;b:do if(!n){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](40)|0;r=32;break}j=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){o=c[14978]|0;m=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=o>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){n=0;l=0;m=0;k=1;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;o=k}else o=k}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0){n=0;l=0;m=0;k=1;break a}}else{do if((e[n+276>>1]|0)>=40){k=n+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=32;break b}k=n+296|0;j=c[k>>2]|0;if(!j){j=n+292|0;break}else{c[k>>2]=c[j>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=32;break b}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(n,40,0)|0;r=32}while(0);if((r|0)==32)if(!j){n=0;l=0;m=0;k=1;break}else o=j;j=o;k=j+40|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));m=o+8|0;b[m>>1]=1;c[o+32>>2]=n;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];j=b[m>>1]&-1025;b[m>>1]=j;j=j&65535;c:do if(j&18|0?(b[q>>1]&2048)==0:0){k=(j|4096)&65535;b[m>>1]=k;do if(j&16384){l=o+12|0;j=(c[o>>2]|0)+(c[l>>2]|0)|0;if((j|0)<1)if(!(k&16)){r=41;break}else j=1;if(Eg(o,j,1)|0)break c;q=o+16|0;gw((c[q>>2]|0)+(c[l>>2]|0)|0,0,c[o>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[o>>2]|0);j=b[m>>1]&-16897;b[m>>1]=j;if(!((c[o+24>>2]|0)!=0?(c[q>>2]|0)==(c[o+20>>2]|0):0))r=41}else r=41;while(0);if((r|0)==41){if(Jg(o)|0)break;j=b[m>>1]|0}b[m>>1]=j&-4097}while(0);j=b[m>>1]|0;do if((j&15|16)<<16>>16==18){if((j&514)==514){if(!((j&1)==0&(a[o+10>>0]|0)!=1))break}else if(j&1)break;Gg(o,1)|0}while(0);n=(Tg(o,s,0)|0)==0&1;l=o;m=o;k=0}else{n=0;l=0;m=0;k=1}while(0);if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j){if(c[j+480>>2]|0){Xd(j,s);break}q=s;if((c[j+304>>2]|0)>>>0<=q>>>0?(c[j+308>>2]|0)>>>0>q>>>0:0){q=j+300|0;c[s>>2]=c[q>>2];c[q>>2]=s}else r=59}else r=59;while(0);do if((r|0)==59)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);do if(!k){if(!((b[l+8>>1]&9216)==0?!(c[l+24>>2]|0):0))Cg(l);j=c[l+32>>2]|0;if(j|0){if(c[j+480>>2]|0){Xd(j,m);break}s=m;if((c[j+304>>2]|0)>>>0<=s>>>0?(c[j+308>>2]|0)>>>0>s>>>0:0){s=j+300|0;c[m>>2]=c[s>>2];c[s>>2]=m;break}}if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);if(n|0){i=0;Ra=t;return i|0}}while(0);o=g+4|0;p=c[o>>2]|0;n=h+4|0;k=c[n>>2]|0;q=k|p;if(q&1024|0){if(p&1024&k|0?(c[g+8>>2]|0)==(c[h+8>>2]|0):0){i=0;Ra=t;return i|0}i=2;Ra=t;return i|0}m=a[g>>0]|0;j=a[h>>0]|0;if(m<<24>>24==71?1:m<<24>>24!=j<<24>>24){do if(m<<24>>24==106)if((bk(f,c[g+12>>2]|0,h,i)|0)<2){i=1;Ra=t;return i|0}else{j=a[h>>0]|0;break}while(0);if(j<<24>>24==106?(bk(f,g,c[h+12>>2]|0,i)|0)<2:0){i=1;Ra=t;return i|0}i=2;Ra=t;return i|0}d:do switch(m<<24>>24){case -92:case -94:{j=p;break}default:{l=c[g+8>>2]|0;if(!l)j=p;else switch(m<<24>>24){case -95:{m=c[h+8>>2]|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(j|0)!=0))do{l=l+1|0;m=m+1|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(j|0)!=0));if(j|0){i=2;Ra=t;return i|0}if(!(p&16777216)){j=p;break d}if(!(ck(f,c[g+44>>2]|0,c[h+44>>2]|0)|0)){k=c[n>>2]|0;j=c[o>>2]|0;break d}else{i=2;Ra=t;return i|0}}case 106:{m=c[h+8>>2]|0;if(!m){i=2;Ra=t;return i|0}s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(j|0)!=0))do{l=l+1|0;m=m+1|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(j|0)!=0));if(!j){j=p;break d}else j=2;Ra=t;return j|0}case 114:{i=0;Ra=t;return i|0}default:{j=c[h+8>>2]|0;if(!j){j=p;break d}if(!(Bu(l,j)|0)){j=p;break d}else j=2;Ra=t;return j|0}}}}while(0);if((k^j)&2|0){i=2;Ra=t;return i|0}e:do if(!(q&16384)){if(q&2048|0){i=2;Ra=t;return i|0}if((q&8|0)==0?bk(f,c[g+12>>2]|0,c[h+12>>2]|0,i)|0:0){i=2;Ra=t;return i|0}if(bk(f,c[g+16>>2]|0,c[h+16>>2]|0,i)|0){i=2;Ra=t;return i|0}l=c[g+20>>2]|0;m=c[h+20>>2]|0;j=(l|0)==0;k=(m|0)==0;f:do if(!(j&k)){if(j|k){i=2;Ra=t;return i|0}j=c[l>>2]|0;if((j|0)!=(c[m>>2]|0)){i=2;Ra=t;return i|0}if((j|0)>0){j=0;while(1){if((a[l+4+(j*20|0)+12>>0]|0)!=(a[m+4+(j*20|0)+12>>0]|0)){j=2;r=125;break}if(bk(0,c[l+4+(j*20|0)>>2]|0,c[m+4+(j*20|0)>>2]|0,i)|0){j=2;r=125;break}j=j+1|0;if((j|0)>=(c[l>>2]|0))break f}if((r|0)==125){Ra=t;return j|0}}}while(0);switch(a[g>>0]|0){case -97:case 110:break e;default:{}}if(!(q&8192)){if((b[g+32>>1]|0)!=(b[h+32>>1]|0)){i=2;Ra=t;return i|0}g=c[g+28>>2]|0;h=c[h+28>>2]|0;if((g|0)!=(h|0)?(g|0)!=(i|0)|(h|0)>-1:0){i=2;Ra=t;return i|0}}}while(0);i=0;Ra=t;return i|0}function ck(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((a[d+16>>0]|0)!=(a[e+16>>0]|0)){e=1;return e|0}if((a[d+17>>0]|0)!=(a[e+17>>0]|0)){e=1;return e|0}if((a[d+18>>0]|0)!=(a[e+18>>0]|0)){e=1;return e|0}if((a[d+20>>0]|0)!=(a[e+20>>0]|0)){e=1;return e|0}if(bk(b,c[d+24>>2]|0,c[e+24>>2]|0,-1)|0){e=1;return e|0}if(bk(b,c[d+28>>2]|0,c[e+28>>2]|0,-1)|0){e=1;return e|0}g=c[d+8>>2]|0;h=c[e+8>>2]|0;b=(g|0)==0;f=(h|0)==0;a:do if(!(b&f)){if(b|f){e=1;return e|0}b=c[g>>2]|0;if((b|0)!=(c[h>>2]|0)){e=1;return e|0}if((b|0)>0){b=0;while(1){if((a[g+4+(b*20|0)+12>>0]|0)!=(a[h+4+(b*20|0)+12>>0]|0)){b=1;f=23;break}if(bk(0,c[g+4+(b*20|0)>>2]|0,c[h+4+(b*20|0)>>2]|0,-1)|0){b=1;f=23;break}b=b+1|0;if((b|0)>=(c[g>>2]|0))break a}if((f|0)==23)return b|0}}while(0);h=c[d+12>>2]|0;g=c[e+12>>2]|0;b=(h|0)==0;f=(g|0)==0;if(b&f){e=0;return e|0}if(b|f){e=1;return e|0}b=c[h>>2]|0;if((b|0)!=(c[g>>2]|0)){e=1;return e|0}if((b|0)<=0){e=0;return e|0}b=0;while(1){if((a[h+4+(b*20|0)+12>>0]|0)!=(a[g+4+(b*20|0)+12>>0]|0)){b=1;f=23;break}if(bk(0,c[h+4+(b*20|0)>>2]|0,c[g+4+(b*20|0)>>2]|0,-1)|0){b=1;f=23;break}b=b+1|0;if((b|0)>=(c[h>>2]|0)){b=0;f=23;break}}if((f|0)==23)return b|0;return 0}function dk(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;r=t;s=(g|0)!=0;a:do if(s){m=134217728;q=c[g>>2]|0}else{j=ek(d,f)|0;k=((j|0)<0)<<31>>31;if(c[b+272>>2]|0){if(a[b+81>>0]|0){c[r>>2]=0;b=0;Ra=t;return b|0}}else{do if(!(0<k>>>0|(0==(k|0)?(e[b+276>>1]|0)>>>0<j>>>0:0))){h=b+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=0;q=i;break a}h=b+296|0;i=c[h>>2]|0;if(!i){h=b+292|0;break}else{c[h>>2]=c[i>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=0;q=i;break a}}else h=b+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}m=0;q=_d(b,j,k)|0}while(0);c[r>>2]=q;if(!q){b=q;Ra=t;return b|0}n=(f|0)==0;if((!n?(a[d>>0]|0)!=-86:0)?(c[d+4>>2]&16777216|0)==0:0)if(!(c[d+12>>2]|0))j=(c[d+20>>2]|0)==0?16396:8220;else j=8220;else j=52;k=j&60;o=d+4|0;h=c[o>>2]|0;if((h&1024|0)==0?(l=c[d+8>>2]|0,(l|0)!=0):0)i=((Eu(l)|0)&1073741823)+1|0;else i=0;if(n){h=(h&16384|0)==0?((h&8192|0)==0?52:28):12;ew(q|0,d|0,h|0)|0;if(h>>>0<52)gw(q+h|0,0,52-h|0)|0}else ew(q|0,d|0,k|0)|0;l=q+4|0;h=j&24576|m|c[l>>2]&-134307841;c[l>>2]=h;if(i){h=q+k|0;c[q+8>>2]=h;ew(h|0,c[d+8>>2]|0,i|0)|0;h=c[l>>2]|0}i=c[o>>2]|0;do if(!((h|i)&8404992)){h=d+20|0;if(!(i&2048)){f=gk(b,c[h>>2]|0,f)|0;c[q+20>>2]=f;break}else{f=fk(b,c[h>>2]|0,f)|0;c[q+20>>2]=f;break}}while(0);j=c[l>>2]|0;if(!(j&16801792)){if(c[o>>2]&8404992|0){b=q;Ra=t;return b|0}h=d+12|0;if((a[q>>0]|0)==-86)c[q+12>>2]=c[h>>2];else{h=c[h>>2]|0;if(!h)h=0;else h=dk(b,h,0,0)|0;c[q+12>>2]=h}h=c[d+16>>2]|0;if(!h)h=0;else h=dk(b,h,0,0)|0;c[q+16>>2]=h;b=q;Ra=t;return b|0}if((!n?(a[d>>0]|0)!=-86:0)?(c[o>>2]&16777216|0)==0:0)if(!(c[d+12>>2]|0))i=(c[d+20>>2]|0)==0?12:28;else i=28;else i=52;h=c[o>>2]|0;if((h&1024|0)==0?(p=c[d+8>>2]|0,(p|0)!=0):0)i=((Eu(p)|0)&1073741823)+(i|1)|0;c[r>>2]=q+(i+7&-8);if(!(j&8404992)){h=c[d+12>>2]|0;if(!h)h=0;else h=dk(b,h,1,r)|0;c[q+12>>2]=h;h=c[d+16>>2]|0;if(!h)h=0;else h=dk(b,h,1,r)|0;c[q+16>>2]=h;h=c[o>>2]|0}if(h&16777216|0){b=hk(b,q,c[d+44>>2]|0)|0;c[q+44>>2]=b}if(!s){b=q;Ra=t;return b|0}c[g>>2]=c[r>>2];b=q;Ra=t;return b|0}function ek(b,d){b=b|0;d=d|0;var e=0,f=0;if(!b){d=0;return d|0}if(((d|0)!=0?(a[b>>0]|0)!=-86:0)?(c[b+4>>2]&16777216|0)==0:0)if(!(c[b+12>>2]|0))e=(c[b+20>>2]|0)==0?12:28;else e=28;else e=52;if((c[b+4>>2]&1024|0)==0?(f=c[b+8>>2]|0,(f|0)!=0):0)e=((Eu(f)|0)&1073741823)+(e|1)|0;e=e+7&-8;if(!(d&1)){d=e;return d|0}else{f=ek(c[b+12>>2]|0,d)|0;return f+e+(ek(c[b+16>>2]|0,d)|0)|0}return 0}function fk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+32|0;A=G+4|0;B=G;c[B>>2]=0;C=d+81|0;if(!f){F=0;Ra=G;return F|0}D=d+272|0;E=d+276|0;F=d+288|0;s=d+300|0;t=d+296|0;u=d+284|0;v=d+292|0;w=A+4|0;x=A+8|0;y=A+12|0;z=A+24|0;j=0;r=B;a:while(1){do if(c[D>>2]|0)if(!(a[C>>0]|0))q=11;else break a;else{if((e[E>>1]|0)>=76){h=c[s>>2]|0;if(h|0){c[s>>2]=c[h>>2];c[u>>2]=(c[u>>2]|0)+1;break}h=c[t>>2]|0;if(!h)h=v;else{c[t>>2]=c[h>>2];c[u>>2]=(c[u>>2]|0)+1;break}}else h=F;c[h>>2]=(c[h>>2]|0)+1;q=11}while(0);if((q|0)==11){q=0;h=_d(d,76,0)|0}if(!h)break;i=gk(d,c[f>>2]|0,g)|0;c[h>>2]=i;i=ik(d,c[f+32>>2]|0,g)|0;c[h+32>>2]=i;i=c[f+36>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+36>>2]=i;i=gk(d,c[f+40>>2]|0,g)|0;c[h+40>>2]=i;i=c[f+44>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+44>>2]=i;p=gk(d,c[f+48>>2]|0,g)|0;c[h+48>>2]=p;a[h+4>>0]=a[f+4>>0]|0;c[h+56>>2]=j;p=r;r=h+52|0;c[r>>2]=0;i=c[f+60>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+60>>2]=i;c[h+12>>2]=0;c[h+16>>2]=0;c[h+8>>2]=c[f+8>>2]&-33;c[h+24>>2]=-1;c[h+28>>2]=-1;b[h+6>>1]=b[f+6>>1]|0;o=c[f+64>>2]|0;b:do if(o){j=c[o>>2]<<4|8;do if(c[D>>2]|0)if(!(a[C>>0]|0))q=28;else{i=0;break b}else{if(!(0<0|(0==0?(e[E>>1]|0)>>>0<j>>>0:0))){i=c[s>>2]|0;if(i|0){c[s>>2]=c[i>>2];c[u>>2]=(c[u>>2]|0)+1;break}i=c[t>>2]|0;if(!i)i=v;else{c[t>>2]=c[i>>2];c[u>>2]=(c[u>>2]|0)+1;break}}else i=F;c[i>>2]=(c[i>>2]|0)+1;q=28}while(0);if((q|0)==28){q=0;i=_d(d,j,0)|0}if(i){gw(i|0,0,j|0)|0;c[i>>2]=c[o>>2];if((c[o>>2]|0)>0){n=i+8|0;m=0;do{k=fk(d,c[o+8+(m<<4)+8>>2]|0,0)|0;c[n+(m<<4)+8>>2]=k;k=gk(d,c[o+8+(m<<4)+4>>2]|0,0)|0;c[n+(m<<4)+4>>2]=k;k=c[o+8+(m<<4)>>2]|0;c:do if(k){l=(Eu(k)|0)+1|0;d:do if(c[D>>2]|0)if(!(a[C>>0]|0))q=41;else{j=0;break c}else{do if(0<0|(0==0?(e[E>>1]|0)>>>0<l>>>0:0))j=F;else{j=c[s>>2]|0;if(j|0){c[s>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break d}j=c[t>>2]|0;if(!j){j=v;break}c[t>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break d}while(0);c[j>>2]=(c[j>>2]|0)+1;q=41}while(0);if((q|0)==41){q=0;j=_d(d,l,0)|0}if(j)ew(j|0,k|0,l|0)|0;else j=0}else j=0;while(0);c[n+(m<<4)>>2]=j;m=m+1|0}while((m|0)<(c[o>>2]|0))}}else i=0}else i=0;while(0);c[h+64>>2]=i;c[h+68>>2]=0;i=c[f+72>>2]|0;c[A>>2]=0;if(!i)i=0;else{k=A;while(1){j=hk(d,0,i)|0;c[k>>2]=j;if(!j)break;i=c[i+32>>2]|0;if(!i)break;else k=j+32|0}i=c[A>>2]|0}c[h+72>>2]=i;if(c[f+68>>2]|0){c[w>>2]=137;c[x>>2]=138;c[y>>2]=0;c[A>>2]=0;c[z>>2]=h;$j(A,h)|0}c[h+20>>2]=c[f+20>>2];c[p>>2]=h;f=c[f+52>>2]|0;if(!f)break;else j=h}F=c[B>>2]|0;Ra=G;return F|0}function gk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if(!f){A=0;return A|0}A=(d|0)==0;if((!A?(h=f,(c[d+304>>2]|0)>>>0<=h>>>0):0)?(c[d+308>>2]|0)>>>0>h>>>0:0)j=e[d+276>>1]|0;else j=Wa[c[29352>>2]&127](f)|0;k=((j|0)<0)<<31>>31;z=d+272|0;a:do if(c[z>>2]|0)if(!(a[d+81>>0]|0))y=17;else{A=0;return A|0}else{do if(!(0<k>>>0|(0==(k|0)?(e[d+276>>1]|0)>>>0<j>>>0:0))){i=d+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];x=d+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}i=d+296|0;h=c[i>>2]|0;if(!h){h=d+292|0;break}else{c[i>>2]=c[h>>2];x=d+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}}else h=d+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;y=17}while(0);if((y|0)==17)h=_d(d,j,k)|0;if(!h){A=0;return A|0}c[h>>2]=c[f>>2];if((c[f>>2]|0)<=0){A=h;return A|0}r=d+276|0;s=d+81|0;t=d+288|0;u=d+300|0;v=d+296|0;w=d+284|0;x=d+292|0;o=h+4|0;i=0;p=0;q=f+4|0;while(1){j=c[q>>2]|0;do if(j){k=dk(d,j,g,0)|0;c[o>>2]=k;if(!((k|0)==0|(a[j>>0]|0)!=-86))if(!(b[k+32>>1]|0)){n=c[k+16>>2]|0;c[k+12>>2]=n;break}else{c[k+12>>2]=i;n=i;break}else n=i}else{c[o>>2]=0;n=i}while(0);l=c[q+4>>2]|0;b:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;do if(A){k=Sv(m|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&k>>>0>2147483390){i=0;break b}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;y=50;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){B=c[14978]|0;k=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break b}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[z>>2]|0){if(a[s>>0]|0){i=0;break b}}else{if(!(0<0|(0==0?(e[r>>1]|0)>>>0<m>>>0:0))){i=c[u>>2]|0;if(i|0){c[u>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=50;break}i=c[v>>2]|0;if(!i)i=x;else{c[v>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=50;break}}else i=t;c[i>>2]=(c[i>>2]|0)+1}i=_d(d,m,0)|0;y=50}while(0);if((y|0)==50){y=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[o+4>>2]=i;l=c[q+8>>2]|0;c:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;do if(A){B=Sv(m|0,0,-1,-1)|0;k=L()|0;if(k>>>0>0|(k|0)==0&B>>>0>2147483390){i=0;break c}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;y=75;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){B=c[14978]|0;k=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break c}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[z>>2]|0){if(a[s>>0]|0){i=0;break c}}else{if(!(0<0|(0==0?(e[r>>1]|0)>>>0<m>>>0:0))){i=c[u>>2]|0;if(i|0){c[u>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=75;break}i=c[v>>2]|0;if(!i)i=x;else{c[v>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=75;break}}else i=t;c[i>>2]=(c[i>>2]|0)+1}i=_d(d,m,0)|0;y=75}while(0);if((y|0)==75){y=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[o+8>>2]=i;a[o+12>>0]=a[q+12>>0]|0;B=o+13|0;l=a[B>>0]|0;a[B>>0]=l&-2;m=q+13|0;l=a[m>>0]&2|l&-4;a[B>>0]=l;a[B>>0]=l&-10|a[m>>0]&8;c[o+16>>2]=c[q+16>>2];p=p+1|0;if((p|0)>=(c[f>>2]|0))break;else{o=o+20|0;i=n;q=q+20|0}}return h|0}function hk(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!f){d=0;return d|0}j=(b|0)==0;a:do if(j){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](92)|0;m=25;break}g=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){l=c[14978]|0;k=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&k>>>0<=l>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){d=0;return d|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){d=0;return d|0}}else{do if((e[b+276>>1]|0)>=92){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=25;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=25;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,92,0)|0;m=25}while(0);if((m|0)==25)if(!g){d=0;return d|0}else h=g;g=h;i=g+92|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(i|0));k=c[f>>2]|0;b:do if(!k)g=0;else{l=(Eu(k)|0)+1|0;c:do if(j){j=Sv(l|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](l)|0;m=51;break}g=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){n=c[14978]|0;j=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}i=Wa[c[29352>>2]&127](g)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){g=0;break b}}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<l>>>0:0))){i=b+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=51;break c}i=b+296|0;g=c[i>>2]|0;if(!g){g=b+292|0;break}else{c[i>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=51;break c}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,l,0)|0;m=51}while(0);if((m|0)==51)if(!g){g=0;break}ew(g|0,k|0,l|0)|0}while(0);c[h>>2]=g;g=c[f+36>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+36>>2]=g;c[h+40>>2]=c[f+40>>2];g=gk(b,c[f+8>>2]|0,0)|0;c[h+8>>2]=g;g=gk(b,c[f+12>>2]|0,0)|0;c[h+12>>2]=g;a[h+16>>0]=a[f+16>>0]|0;a[h+18>>0]=a[f+18>>0]|0;a[h+17>>0]=a[f+17>>0]|0;a[h+20>>0]=a[f+20>>0]|0;g=c[f+24>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+24>>2]=g;g=c[f+28>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+28>>2]=g;c[h+68>>2]=d;n=h;return n|0}function ik(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!d){f=0;return f|0}i=c[d>>2]|0;v=(i|0)>0;i=(i*72|0)+8|0;j=v?i:80;i=v?((i|0)<0)<<31>>31:0;v=b+272|0;a:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))u=12;else{f=0;return f|0}else{do if(!(i>>>0>0|((i|0)==0?j>>>0>(e[b+276>>1]|0)>>>0:0))){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;u=12}while(0);if((u|0)==12)g=_d(b,j,i)|0;if(!g){f=0;return f|0}t=c[d>>2]|0;c[g+4>>2]=t;c[g>>2]=t;if((c[d>>2]|0)<=0){f=g;return f|0}m=g+8|0;n=b+276|0;o=b+81|0;p=b+288|0;q=b+300|0;r=b+296|0;s=b+284|0;t=b+292|0;l=0;do{c[m+(l*72|0)>>2]=c[d+8+(l*72|0)>>2];i=c[d+8+(l*72|0)+4>>2]|0;b:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=25;else{h=0;break b}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=25}while(0);if((u|0)==25){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+4>>2]=h;i=c[d+8+(l*72|0)+8>>2]|0;c:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=37;else{h=0;break c}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=37}while(0);if((u|0)==37){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+8>>2]=h;i=c[d+8+(l*72|0)+12>>2]|0;d:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=49;else{h=0;break d}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=49}while(0);if((u|0)==49){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+12>>2]=h;c[m+(l*72|0)+36>>2]=c[d+8+(l*72|0)+36>>2];c[m+(l*72|0)+40>>2]=c[d+8+(l*72|0)+40>>2];c[m+(l*72|0)+24>>2]=c[d+8+(l*72|0)+24>>2];c[m+(l*72|0)+28>>2]=c[d+8+(l*72|0)+28>>2];k=m+(l*72|0)+37|0;h=a[k>>0]|0;if(h&2){i=c[d+8+(l*72|0)+64>>2]|0;e:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=62;else{h=0;break e}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<j>>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=62}while(0);if((u|0)==62){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+64>>2]=h;h=a[k>>0]|0}c[m+(l*72|0)+68>>2]=c[d+8+(l*72|0)+68>>2];if(h&4){k=gk(b,c[d+8+(l*72|0)+64>>2]|0,f)|0;c[m+(l*72|0)+64>>2]=k}h=c[d+8+(l*72|0)+16>>2]|0;c[m+(l*72|0)+16>>2]=h;if(h|0){k=h+32|0;c[k>>2]=(c[k>>2]|0)+1}h=fk(b,c[d+8+(l*72|0)+20>>2]|0,f)|0;c[m+(l*72|0)+20>>2]=h;h=c[d+8+(l*72|0)+44>>2]|0;if(!h)h=0;else h=dk(b,h,f,0)|0;c[m+(l*72|0)+44>>2]=h;i=jk(b,c[d+8+(l*72|0)+48>>2]|0)|0;c[m+(l*72|0)+48>>2]=i;i=d+8+(l*72|0)+56|0;j=c[i+4>>2]|0;k=m+(l*72|0)+56|0;c[k>>2]=c[i>>2];c[k+4>>2]=j;l=l+1|0}while((l|0)<(c[d>>2]|0));return g|0}function jk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!d){v=0;return v|0}v=b+272|0;a:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))t=12;else{v=0;return v|0}else{do if((e[b+276>>1]|0)>=8){g=b+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];u=b+284|0;c[u>>2]=(c[u>>2]|0)+1;break a}g=b+296|0;f=c[g>>2]|0;if(!f){f=b+292|0;break}else{c[g>>2]=c[f>>2];u=b+284|0;c[u>>2]=(c[u>>2]|0)+1;break a}}else f=b+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;t=12}while(0);if((t|0)==12)f=_d(b,8,0)|0;if(!f){v=0;return v|0}u=d+4|0;c[f+4>>2]=c[u>>2];i=c[u>>2]<<3;b:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))t=25;else c[f>>2]=0;else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<i>>>0:0))){g=b+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;t=26;break b}g=b+296|0;h=c[g>>2]|0;if(!h){g=b+292|0;break}else{c[g>>2]=c[h>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;t=26;break b}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;t=25}while(0);if((t|0)==25){h=_d(b,i,0)|0;t=26}if((t|0)==26?(c[f>>2]=h,h|0):0){if((c[u>>2]|0)<=0){v=f;return v|0}n=b+276|0;o=b+81|0;p=b+288|0;q=b+300|0;r=b+296|0;s=b+284|0;m=b+292|0;g=0;while(1){l=c[d>>2]|0;j=c[l+(g<<3)>>2]|0;c:do if(j){k=(Eu(j)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))t=46;else{i=0;break c}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0<k>>>0:0))){i=c[q>>2]|0;if(i|0){c[q>>2]=c[i>>2];c[s>>2]=(c[s>>2]|0)+1;break}i=c[r>>2]|0;if(!i)i=m;else{c[r>>2]=c[i>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else i=p;c[i>>2]=(c[i>>2]|0)+1;t=46}while(0);if((t|0)==46){t=0;i=_d(b,k,0)|0}if(i)ew(i|0,j|0,k|0)|0;else i=0}else i=0;while(0);c[h+(g<<3)>>2]=i;c[h+(g<<3)+4>>2]=c[l+(g<<3)+4>>2];g=g+1|0;if((g|0)>=(c[u>>2]|0))break;h=c[f>>2]|0}return f|0}if(c[b+480>>2]|0){Xd(b,f);v=0;return v|0}v=f;if((c[b+304>>2]|0)>>>0<=v>>>0?(c[b+308>>2]|0)>>>0>v>>>0:0){v=b+300|0;c[f>>2]=c[v>>2];c[v>>2]=f;v=0;return v|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);v=0;return v|0}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);v=0;return v|0}return 0}function kk(b,d){b=b|0;d=d|0;var e=0;if((a[d>>0]|0)!=-95)return 0;d=d+44|0;e=c[d>>2]|0;if(!e)return 0;b=b+24|0;c[e+32>>2]=c[(c[b>>2]|0)+68>>2];c[(c[b>>2]|0)+68>>2]=c[d>>2];return 0}function lk(a,b){a=a|0;b=b|0;return (c[a+24>>2]|0)!=(b|0)|0}function mk(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=10-(c[b+56>>2]|0)|0;l=c[b>>2]|0;m=b+64|0;j=c[m>>2]|0;k=n<<2;a:do if(!j){b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))i=12;else{i=28;break a}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0))){g=l+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];l=l+284|0;c[l>>2]=(c[l>>2]|0)+1;break b}g=l+296|0;h=c[g>>2]|0;if(!h){g=l+292|0;break}else{c[g>>2]=c[h>>2];l=l+284|0;c[l>>2]=(c[l>>2]|0)+1;break b}}else g=l+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;i=12}while(0);if((i|0)==12)h=_d(l,k,0)|0;c[m>>2]=h;g=b+60|0;if(h)i=30}else{g=j;i=l+304|0;if(((c[i>>2]|0)>>>0<=g>>>0?(c[l+308>>2]|0)>>>0>g>>>0:0)?!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0)):0){h=j;g=b+60|0;i=30;break}h=Zd(l,j,k,0)|0;if(h|0){c[m>>2]=h;g=b+60|0;i=30;break}if(c[l+480>>2]|0){Xd(l,j);i=28;break}if((c[i>>2]|0)>>>0<=g>>>0?(c[l+308>>2]|0)>>>0>g>>>0:0){i=l+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;i=28;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);i=28;break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);i=28;break}}while(0);if((i|0)==28){c[m>>2]=0;g=b+60|0}else if((i|0)==30){c[g>>2]=n;c[h+(f<<2)>>2]=c[d+108>>2];return}c[g>>2]=0;return}function nk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=Ra;Ra=Ra+16|0;g=h;if((a[b+199>>0]|0)!=2){Ra=h;return}c[g>>2]=f;f=Me(c[b>>2]|0,e,g)|0;i=c[b+8>>2]|0;g=c[i+108>>2]|0;e=b+212|0;Fj(i,171,g,c[e>>2]|0,0,f,-7)|0;if(d<<24>>24)c[e>>2]=g;Ra=h;return}function ok(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+32|0;i=l+16|0;h=l+8|0;k=l;g=c[d+12>>2]|0;e=a[g>>0]|0;if(e<<24>>24==-88)e=a[g+38>>0]|0;switch(e<<24>>24){case -87:{e=g+20|0;j=6;break}case -125:{e=c[g+20>>2]|0;j=6;break}default:f=1}if((j|0)==6)f=c[c[e>>2]>>2]|0;if(c[d+4>>2]&2048|0){e=c[c[c[d+20>>2]>>2]>>2]|0;if((f|0)==(e|0)){k=0;Ra=l;return k|0}c[k>>2]=e;c[k+4>>2]=f;cd(b,39001,k);k=1;Ra=l;return k|0}if((f|0)==1){k=0;Ra=l;return k|0}if(!(c[g+4>>2]&2048)){cd(b,38899,i);k=1;Ra=l;return k|0}else{c[h>>2]=c[c[c[g+20>>2]>>2]>>2];c[h+4>>2]=1;cd(b,39001,h);k=1;Ra=l;return k|0}return 0}function pk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c[d+12>>2]|0;f=a[n>>0]|0;if(f<<24>>24==-88)f=a[n+38>>0]|0;switch(f<<24>>24){case -87:{f=n+20|0;l=6;break}case -125:{f=c[n+20>>2]|0;l=6;break}default:m=1}if((l|0)==6)m=c[c[f>>2]>>2]|0;if(!(c[d+4>>2]&2048))k=0;else k=c[d+20>>2]|0;b=c[b>>2]|0;h=m+1|0;g=((h|0)<0)<<31>>31;a:do if(!b){j=Sv(h|0,g|0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){n=0;return n|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;l=33;break}b=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;d=59064;f=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&f>>>0>0){j=c[14978]|0;i=Tv(f|0,d|0,b|0,((b|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](b)|0;if(!f){n=0;return n|0}d=Wa[c[29352>>2]&127](f)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){n=0;return n|0}}else{do if(!(0<g>>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0<h>>>0:0))){d=b+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];l=b+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break a}d=b+296|0;f=c[d>>2]|0;if(!f){f=b+292|0;break}else{c[d>>2]=c[f>>2];l=b+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break a}}else f=b+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(b,h,g)|0;l=33}while(0);if((l|0)==33)if(!f){n=0;return n|0}b:do if((m|0)>0){h=n+38|0;i=n+20|0;j=n+20|0;if(!k){g=0;while(1){b=a[n>>0]|0;if(b<<24>>24==-88)d=a[h>>0]|0;else d=b;switch(d<<24>>24){case -87:{d=i;l=42;break}case -125:{d=c[j>>2]|0;l=42;break}default:d=n}do if((l|0)==42){l=0;if((c[c[d>>2]>>2]|0)<2)d=n;else{if(b<<24>>24!=-125?(a[h>>0]|0)!=-125:0){d=c[(c[i>>2]|0)+4+(g*20|0)>>2]|0;break}d=c[(c[c[j>>2]>>2]|0)+4+(g*20|0)>>2]|0}}while(0);k=Xj(d)|0;a[f+g>>0]=k;g=g+1|0;if((g|0)==(m|0))break b}}g=0;while(1){b=a[n>>0]|0;if(b<<24>>24==-88)d=a[h>>0]|0;else d=b;switch(d<<24>>24){case -87:{d=i;l=52;break}case -125:{d=c[j>>2]|0;l=52;break}default:d=n}do if((l|0)==52){l=0;if((c[c[d>>2]>>2]|0)<2)d=n;else{if(b<<24>>24!=-125?(a[h>>0]|0)!=-125:0){d=c[(c[i>>2]|0)+4+(g*20|0)>>2]|0;break}d=c[(c[c[j>>2]>>2]|0)+4+(g*20|0)>>2]|0}}while(0);d=Xj(d)|0;b=Xj(c[(c[k>>2]|0)+4+(g*20|0)>>2]|0)|0;if(d<<24>>24==0|b<<24>>24==0)d=(b|d)<<24>>24==0?65:(b&255)+(d&255)&255;else d=d<<24>>24>66|b<<24>>24>66?67:65;a[f+g>>0]=d;g=g+1|0;if((g|0)==(m|0))break b}}while(0);a[f+m>>0]=0;n=f;return n|0}\nfunction gm(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;m=c[j>>2]|0;l=c[m+12>>2]|0;k=a[l>>0]|0;if(k<<24>>24==-88)k=a[l+38>>0]|0;switch(k<<24>>24){case -87:{k=l+20|0;v=6;break}case -125:{k=c[l+20>>2]|0;v=6;break}default:k=1}if((v|0)==6)k=c[c[k>>2]>>2]|0;r=(e[h+52>>1]|0)-i|0;r=(k|0)<(r|0)?k:r;s=h+28|0;if((r|0)<=1){v=1;return v|0}t=h+4|0;u=h+12|0;q=h+32|0;k=1;while(1){o=c[(c[l+20>>2]|0)+4+(k*20|0)>>2]|0;p=c[m+16>>2]|0;l=p+20|0;if(c[p+4>>2]&2048)l=c[l>>2]|0;n=c[(c[l>>2]|0)+4+(k*20|0)>>2]|0;if((a[o>>0]|0)!=-94){v=36;break}if((c[o+28>>2]|0)!=(g|0)){v=36;break}h=b[o+32>>1]|0;p=k+i|0;if(h<<16>>16!=(b[(c[t>>2]|0)+(p<<1)>>1]|0)){v=36;break}m=c[s>>2]|0;if((a[m+p>>0]|0)!=(a[m+i>>0]|0)){v=36;break}l=Xj(o)|0;m=Xj(n)|0;if(l<<24>>24==0|m<<24>>24==0)m=(m|l)<<24>>24==0?65:(m&255)+(l&255)&255;else m=l<<24>>24>66|m<<24>>24>66?67:65;if(h<<16>>16>-1)l=a[(c[(c[u>>2]|0)+4>>2]|0)+(h<<16>>16<<4)+13>>0]|0;else l=68;if(m<<24>>24!=l<<24>>24){v=36;break}do if(!(c[o+4>>2]&256)){if(n|0?c[n+4>>2]&256|0:0){l=Yi(f,n)|0;v=29;break}l=Yi(f,o)|0;if(!l){l=Yi(f,n)|0;v=29}}else{l=Yi(f,o)|0;v=29}while(0);if((v|0)==29){v=0;if(!l){v=36;break}}m=c[l>>2]|0;h=c[(c[q>>2]|0)+(p<<2)>>2]|0;p=a[m>>0]|0;l=(d[208+(p&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(p<<24>>24==0|(l|0)!=0))do{m=m+1|0;h=h+1|0;p=a[m>>0]|0;l=(d[208+(p&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(l|0)!=0));if(l|0){v=36;break}k=k+1|0;if((k|0)>=(r|0)){v=36;break}m=c[j>>2]|0;l=c[m+12>>2]|0}if((v|0)==36)return k|0;return 0}function hm(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0;eb=Ra;Ra=Ra+96|0;$a=eb;ab=j&65535;if(j<<16>>16?b[(c[c[f>>2]>>2]|0)+76>>1]&64:0){db=0;Ra=eb;return db|0}Ea=c[g>>2]|0;j=Ea&65535;if(j>>>0>63){db=0;Ra=eb;return db|0}Fa=cw(1,0,j|0)|0;Fa=Sv(Fa|0,L()|0,-1,-1)|0;Ga=L()|0;i=i&65535;Ca=i&2048;Ba=(Ca|0)==0;Ca=Ca>>>11&65535|386;a:do if(!((Fa|0)==0&(Ga|0)==0)){ba=h+24|0;ca=f+4|0;da=(j|0)==0;ea=f+80|0;fa=Ca&65535;ga=$a+4|0;ha=$a+12|0;ia=$a+16|0;ja=$a+8|0;ka=$a+20|0;la=$a+24|0;ma=$a+28|0;na=$a+17|0;oa=$a+18|0;pa=$a+72|0;qa=$a+20|0;ra=$a+4|0;sa=$a+8|0;ta=$a+24|0;ua=f+488|0;xa=(j|0)!=0;ya=(i&192|0)==0;X=(i&64|0)==0;C=1;m=0;W=0;S=0;T=0;i=0;h=0;A=0;B=0;b:while(1){if(!W){U=i;V=h}else{V=m+8|0;U=c[V>>2]|i;V=c[V+4>>2]|h}if(W>>>0<ab>>>0){i=c[(c[ba>>2]|0)+(W<<2)>>2]|0;if(Ba){Na=i;za=10}else{r=C;s=i;q=B;p=A;o=S;n=T}}else{Na=k;za=10}if((za|0)==10){za=0;z=Na+36|0;i=c[z>>2]|0;P=Na+24|0;if(i&1024|0){za=11;break}Q=Na+30|0;b[Q>>1]=0;R=c[(c[ca>>2]|0)+8+((d[Na+16>>0]|0)*72|0)+40>>2]|0;if(da){o=A;p=B}else{v=~U;w=~V;x=Na+40|0;y=Na+48|0;u=0;h=A;m=B;do{s=cw(1,0,u|0)|0;t=L()|0;c:do if((s&h|0)==0&(t&m|0)==0){r=g+4+(u*20|0)|0;i=c[r>>2]|0;n=c[i+4>>2]|0;if(n&4096)do{if(!(n&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;n=c[i+4>>2]|0}while((n&4096|0)!=0);if((a[i>>0]|0)==-94?(c[i+28>>2]|0)==(R|0):0){q=i+32|0;i=b[q>>1]|0;c[$a>>2]=ea;c[ga>>2]=ea;c[ha>>2]=0;a[ia>>0]=0;c[ja>>2]=0;c[ka>>2]=fa;c[la>>2]=0;c[ma>>2]=R;a[na>>0]=1;a[oa>>0]=1;if(i<<16>>16!=-2?(b[pa>>1]=i,Qa=Tl($a)|0,Qa|0):0){o=0;p=Qa;while(1){n=p+32|0;i=c[n>>2]|0;n=c[n+4>>2]|0;if((i&v|0)==0&(n&w|0)==0){if((i|0)==0&(n|0)==0?(Sa=b[p+12>>1]|0,Sa&130):0){za=29;break}Ka=(o|0)==0?p:o}else Ka=o;i=Tl($a)|0;if(!i){za=33;break}else{o=Ka;p=i}}if((za|0)==29){za=0;Ha=p;Ta=Sa}else if((za|0)==33){za=0;if(!Ka)break;Ha=Ka;Ta=b[Ka+12>>1]|0}d:do if(Ta<<16>>16==1){i=b[x>>1]|0;if(!(i<<16>>16))break c;o=c[y>>2]|0;n=i&65535;i=0;while(1){if((Ha|0)==(c[o+(i<<2)>>2]|0))break d;i=i+1|0;if(i>>>0>=n>>>0)break c}}while(0);do if(Ta&130){if((b[q>>1]|0)<=-1)break;p=c[f>>2]|0;o=c[Ha>>2]|0;i=Yi(p,c[r>>2]|0)|0;if(!i)n=c[(c[p>>2]|0)+8>>2]|0;else n=i;i=Yi(p,o)|0;if(!i)i=c[(c[p>>2]|0)+8>>2]|0;n=c[n>>2]|0;o=c[i>>2]|0;O=a[n>>0]|0;i=(d[208+(O&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(O<<24>>24==0|(i|0)!=0))do{n=n+1|0;o=o+1|0;O=a[n>>0]|0;i=(d[208+(O&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(i|0)!=0));if(i|0)break c}while(0);h=s|h;m=t|m;break}}}while(0);u=u+1|0}while((u|0)!=(j|0));i=c[z>>2]|0;o=h;p=m}do if(!(i&4096)){if(!(i&256)){m=c[Na+32>>2]|0;if(!m){bb=0;za=135;break b}O=m+55|0;if((d[O>>0]|d[O+1>>0]<<8)&4){bb=0;za=135;break b}h=b[m+52>>1]|0;i=(a[m+54>>0]|0)!=0&1;if(!(h<<16>>16)){La=i;Va=o;Wa=p;za=117;break}else{n=m;O=b[m+50>>1]|0;N=h&65535}}else{n=0;O=0;i=C;N=1}F=Na+42|0;G=(n|0)==0;H=Na+48|0;I=n+4|0;J=n+28|0;K=n+12|0;M=n+40|0;C=n+32|0;D=cw(1,0,W|0)|0;E=L()|0;h=0;y=0;A=0;B=0;z=o;x=p;e:while(1){o=e[P>>1]|0;q=B>>>0<o>>>0;f:do if(q?B>>>0>=(e[F>>1]|0)>>>0:0){p=c[H>>2]|0;m=c[p+(B<<2)>>2]|0;w=b[m+12>>1]|0;n=w&65535;if((w&Ca)<<16>>16){Aa=h;Y=y;Z=A;$=(n&256|0)==0?i:0;aa=B+1|0;va=z;wa=x;break}if((n&1|0)!=0?(Ua=c[m>>2]|0,Oa=B+1|0,Oa>>>0<o>>>0):0){m=Oa;while(1){if((c[c[p+(m<<2)>>2]>>2]|0)==(Ua|0)){Da=0;za=68;break f}m=m+1|0;if(m>>>0>=o>>>0){Da=1;za=68;break}}}else{Da=1;za=68}}else{Da=1;za=68}while(0);if((za|0)==68){za=0;if(!G){o=b[(c[I>>2]|0)+(B<<1)>>1]|0;m=a[(c[J>>2]|0)+B>>0]|0;n=c[K>>2]|0;o=o<<16>>16==(b[n+40>>1]|0)?-1:o<<16>>16;if(q|(i<<24>>24==0|(o|0)<0)){u=o;_=i}else{u=o;_=(a[(c[n+4>>2]|0)+(o<<4)+12>>0]|0)==0?0:i}}else{m=0;u=-1;_=i}if(!(xa&Da<<24>>24!=0)){za=114;break}s=(u|0)>-2;t=(u|0)==-1;i=0;n=1;g:while(1){v=cw(1,0,i|0)|0;w=L()|0;do if((v&z|0)==0&(w&x|0)==0){r=g+4+(i*20|0)|0;o=c[r>>2]|0;h:do if(!o)o=0;else while(1){p=c[o+4>>2]|0;if(!(p&4096))break h;if(!(p&262144))o=o+12|0;else o=(c[o+20>>2]|0)+4|0;o=c[o>>2]|0;if(!o){o=0;break}}while(0);n=ya?0:n;if(s){if((a[o>>0]|0)!=-94)break;if((c[o+28>>2]|0)!=(R|0))break;if((u|0)!=(b[o+32>>1]|0))break}else{p=c[(c[M>>2]|0)+4+(B*20|0)>>2]|0;i:do if(!o)o=0;else while(1){q=c[o+4>>2]|0;if(!(q&4096))break i;if(!(q&262144))o=o+12|0;else o=(c[o+20>>2]|0)+4|0;o=c[o>>2]|0;if(!o){o=0;break}}while(0);j:do if(!p)p=0;else while(1){q=c[p+4>>2]|0;if(!(q&4096))break j;if(!(q&262144))p=p+12|0;else p=(c[p+20>>2]|0)+4|0;p=c[p>>2]|0;if(!p){p=0;break}}while(0);if(bk(0,o,p,R)|0)break}if(t){n=-1;break g}p=c[f>>2]|0;o=Yi(p,c[r>>2]|0)|0;if(!o)o=c[(c[p>>2]|0)+8>>2]|0;p=c[o>>2]|0;q=c[(c[C>>2]|0)+(B<<2)>>2]|0;r=a[p>>0]|0;o=(d[208+(r&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0;if(!(r<<24>>24==0|(o|0)!=0))do{p=p+1|0;q=q+1|0;r=a[p>>0]|0;o=(d[208+(r&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(o|0)!=0));if(!o){n=u;break g}}while(0);i=i+1|0;if(!(i>>>0<j>>>0&n<<24>>24!=0)){za=114;break e}}o=B+1|0;b[Q>>1]=o;do if(X){if(h<<24>>24)if((m^y)<<24>>24==(a[g+4+(i*20|0)+12>>0]|0)){i=y;break}else{za=114;break e}i=a[g+4+(i*20|0)+12>>0]^m;if(!(i<<24>>24)){h=1;i=0;break}wa=l;Aa=c[wa+4>>2]|E;h=l;c[h>>2]=c[wa>>2]|D;c[h+4>>2]=Aa;h=1}else i=y;while(0);Aa=h;Y=i;Z=(n|0)==-1?1:A;$=_;aa=o;va=v|z;wa=w|x}if(aa>>>0<N>>>0){h=Aa;y=Y;A=Z;B=aa;i=$;z=va;x=wa}else{Ja=Z;Pa=$;Xa=va;Ya=wa;break}}if((za|0)==114){za=0;Ja=A;Pa=(B|0)==0|B>>>0<(O&65535)>>>0?0:_;Xa=z;Ya=x}if(!(Ja<<24>>24)){La=Pa;Va=Xa;Wa=Ya;za=117}else{Ma=1;Za=Xa;_a=Ya}}else{La=C;Va=o;Wa=p;za=117}while(0);if((za|0)==117){za=0;if(!(La<<24>>24)){Ia=0;cb=Va;db=Wa;break a}else{Ma=La;Za=Va;_a=Wa}}v=Na+8|0;u=c[v>>2]|S;v=c[v+4>>2]|T;if(da){r=Ma;s=Na;q=_a;p=Za;o=u;n=v}else{s=~u;t=~v;r=0;q=Za;i=_a;while(1){o=cw(1,0,r|0)|0;p=L()|0;do if((o&q|0)==0&(p&i|0)==0){m=c[g+4+(r*20|0)>>2]|0;if(m){n=Pl(ua,m)|0;h=L()|0;if((n|0)==0&(h|0)==0){a[qa>>0]=1;c[ra>>2]=127;c[sa>>2]=128;c[ta>>2]=0;_j($a,m)|0;if(!(a[qa>>0]|0)){h=q;break}else{n=0;h=0}}}else{n=0;h=0}T=(n&s|0)==0&(h&t|0)==0;h=(T?o:0)|q;i=(T?p:0)|i}else h=q;while(0);r=r+1|0;if((r|0)==(j|0)){r=Ma;s=Na;q=i;p=h;o=u;n=v;break}else q=h}}}if(W>>>0>=ab>>>0|(q>>>0>Ga>>>0|(q|0)==(Ga|0)&p>>>0>=Fa>>>0|r<<24>>24==0)){Ia=r;cb=p;db=q;break a}else{C=r;m=s;W=W+1|0;S=o;T=n;i=U;h=V;A=p;B=q}}if((za|0)==11){db=(a[P+5>>0]|0)==0;Ia=C;cb=db?A:Fa;db=db?B:Ga;break}else if((za|0)==135){Ra=eb;return bb|0}}else{Ia=1;cb=0;db=0}while(0);if((cb|0)==(Fa|0)&(db|0)==(Ga|0)){db=Ea&255;Ra=eb;return db|0}if(Ia<<24>>24){db=-1;Ra=eb;return db|0}if(j>>>0<=1){db=0;Ra=eb;return db|0}while(1){i=j;j=j+-1|0;$a=cw(1,0,j|0)|0;$a=Sv($a|0,L()|0,-1,-1)|0;ab=L()|0;if(($a&cb|0)==($a|0)&(ab&db|0)==(ab|0))break;if((i|0)<=2){bb=0;za=135;break}}if((za|0)==135){Ra=eb;return bb|0}db=j&255;Ra=eb;return db|0}function im(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;do if(h|0){h=d+16|0;j=c[h>>2]|0;k=j+5|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;s=(c[d+4>>2]|0)+j|0;a[s>>0]=a[43977]|0;a[s+1>>0]=a[43978]|0;a[s+2>>0]=a[43979]|0;a[s+3>>0]=a[43980]|0;a[s+4>>0]=a[43981]|0;break}else{wb(d,43977,5);break}}while(0);s=(f|0)>1;do if(s){h=d+16|0;j=c[h>>2]|0;k=j+1|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;a[(c[d+4>>2]|0)+j>>0]=40;break}else{wb(d,44003,1);break}}else if((f|0)!=1){h=d+16|0;j=c[h>>2]|0;k=j+1|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;a[(c[d+4>>2]|0)+j>>0]=a[i>>0]|0;return}else{wb(d,i,1);return}}while(0);o=e+4|0;q=d+16|0;r=d+8|0;m=e+12|0;n=d+4|0;l=0;do{do if(l|0){h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[n>>2]|0)+h>>0]=44;break}else{wb(d,41685,1);break}}while(0);h=b[(c[o>>2]|0)+(l+g<<1)>>1]|0;switch(h<<16>>16){case -2:{h=43996;p=21;break}case -1:{h=38132;p=21;break}default:{h=c[(c[(c[m>>2]|0)+4>>2]|0)+(h<<16>>16<<4)>>2]|0;if(!h){e=0;h=0}else p=21}}if((p|0)==21){p=0;e=(Eu(h)|0)&1073741823}j=c[q>>2]|0;k=j+e|0;if(k>>>0<(c[r>>2]|0)>>>0){if(e|0){c[q>>2]=k;ew((c[n>>2]|0)+j|0,h|0,e|0)|0}}else wb(d,h,e);l=l+1|0}while((l|0)!=(f|0));h=c[q>>2]|0;j=h+1|0;k=j>>>0<(c[r>>2]|0)>>>0;do if(s){if(k){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=41}else wb(d,34066,1);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=a[i>>0]|0}else wb(d,i,1);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=40;break}else{wb(d,44003,1);break}}else if(k){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=a[i>>0]|0;break}else{wb(d,i,1);break}while(0);e=d+4|0;k=0;do{do if(k|0){h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[e>>2]|0)+h>>0]=44;break}else{wb(d,41685,1);break}}while(0);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[e>>2]|0)+h>>0]=63}else wb(d,35133,1);k=k+1|0}while((k|0)!=(f|0));if(!s)return;h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=41;return}else{wb(d,34066,1);return}}function jm(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+16|0;J=M;y=c[f>>2]|0;K=c[d+8>>2]|0;a:do switch(a[y>>0]|0){case 45:case 53:{j=Jj(d,c[y+16>>2]|0,j)|0;break}case 50:{k=K+108|0;i=c[k>>2]|0;if((c[K+112>>2]|0)>(i|0)){c[k>>2]=i+1;K=c[K+104>>2]|0;a[K+(i*20|0)>>0]=73;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=0;c[K+(i*20|0)+8>>2]=j;c[K+(i*20|0)+12>>2]=0;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0;break a}else{Di(K,73,0,j,0)|0;break a}}default:{D=c[g+64>>2]|0;H=D+36|0;if((c[H>>2]&1024|0)==0?(k=c[D+32>>2]|0,(k|0)!=0):0)i=(a[(c[k+28>>2]|0)+h>>0]|0)==0?i:(i|0)==0&1;G=(h|0)>0;b:do if(G){l=c[D+48>>2]|0;k=0;while(1){F=c[l+(k<<2)>>2]|0;if(F|0?(c[F>>2]|0)==(y|0):0)break;k=k+1|0;if((k|0)>=(h|0))break b}lm(g,f);g=j;Ra=M;return g|0}while(0);F=D+40|0;m=e[F>>1]|0;if((m|0)>(h|0)){n=c[D+48>>2]|0;k=0;l=h;do{k=k+((c[c[n+(l<<2)>>2]>>2]|0)==(y|0)&1)|0;l=l+1|0}while((l|0)<(m|0));C=k}else C=0;c[J>>2]=0;if((c[y+4>>2]&2048|0)!=0?(c[c[c[y+20>>2]>>2]>>2]|0)!=1:0){A=c[d>>2]|0;B=dk(A,y,0,0)|0;u=A+81|0;if(!(a[u>>0]|0)){s=B+20|0;q=c[c[s>>2]>>2]|0;t=B+12|0;r=c[(c[t>>2]|0)+20>>2]|0;m=b[F>>1]|0;if((m&65535|0)>(h|0)){p=D+48|0;k=0;o=h;l=0;do{n=c[(c[p>>2]|0)+(o<<2)>>2]|0;if((c[n>>2]|0)==(y|0)?(v=(c[n+24>>2]|0)+-1|0,w=q+4+(v*20|0)|0,x=c[w>>2]|0,(x|0)!=0):0){l=nj(c[d>>2]|0,l,x)|0;c[w>>2]=0;m=r+4+(v*20|0)|0;k=nj(c[d>>2]|0,k,c[m>>2]|0)|0;c[m>>2]=0;m=b[F>>1]|0}o=o+1|0}while((o|0)<(m&65535|0))}else{l=0;k=0}if(q|0)ri(A,q);if(r|0)ri(A,r);c[(c[t>>2]|0)+20>>2]=k;c[c[s>>2]>>2]=l;if(k|0?(c[k>>2]|0)==1:0){l=k+4|0;k=c[l>>2]|0;c[l>>2]=0;l=c[t>>2]|0;if(l|0)ni(A,l);c[t>>2]=k}l=c[(c[s>>2]|0)+48>>2]|0;if(l|0?(z=c[l>>2]|0,(z|0)>0):0){k=0;do{b[l+4+(k*20|0)+16>>1]=0;k=k+1|0}while((k|0)!=(z|0))}if(!(a[u>>0]|0)){m=c[d>>2]|0;n=C<<2;c:do if(!m){z=Sv(n|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390)k=0;else{if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;E=66;break}k=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){z=c[14978]|0;y=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){k=0;break}l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){E=67;break}c[14987]=l;E=67}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];E=m+284|0;c[E>>2]=(c[E>>2]|0)+1;E=66;break c}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];E=m+284|0;c[E>>2]=(c[E>>2]|0)+1;E=66;break c}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;E=66}while(0);if((E|0)==66)if(!k)k=0;else E=67;if((E|0)==67)gw(k|0,0,n|0)|0;m=qk(d,B,4,0,k,J)|0;n=c[J>>2]|0;c[(c[f>>2]|0)+28>>2]=n;l=k}else{l=0;m=5;n=0;k=0}}else{l=0;m=5;n=0;k=0}if(B|0)ni(A,B);y=c[f>>2]|0;B=k}else{m=qk(d,y,4,0,0,J)|0;l=0;n=c[J>>2]|0;B=0}x=(((m|0)==4?(i|0)==0&1:i)|0)!=0;k=x?32:36;z=K+108|0;i=c[z>>2]|0;A=K+112|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;w=c[K+104>>2]|0;a[w+(i*20|0)>>0]=k;b[w+(i*20|0)+2>>1]=0;c[w+(i*20|0)+4>>2]=n;c[w+(i*20|0)+8>>2]=0;c[w+(i*20|0)+12>>2]=0;c[w+(i*20|0)+16>>2]=0;a[w+(i*20|0)+1>>0]=0}else Di(K,k,n,0,0)|0;c[H>>2]=c[H>>2]|2048;t=g+56|0;k=c[t>>2]|0;if(!k){w=d+56|0;k=(c[w>>2]|0)+-1|0;c[w>>2]=k;c[g+16>>2]=k;k=c[t>>2]|0}q=k+C|0;c[t>>2]=q;r=c[d>>2]|0;s=g+60|0;i=c[s>>2]|0;q=q*20|0;d:do if(!i){e:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))E=88;else{E=126;break d}else{do if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0))){n=r+300|0;i=c[n>>2]|0;if(i|0){c[n>>2]=c[i>>2];C=r+284|0;c[C>>2]=(c[C>>2]|0)+1;break e}n=r+296|0;i=c[n>>2]|0;if(!i){i=r+292|0;break}else{c[n>>2]=c[i>>2];C=r+284|0;c[C>>2]=(c[C>>2]|0)+1;break e}}else i=r+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;E=88}while(0);if((E|0)==88)i=_d(r,q,0)|0;c[s>>2]=i;if(!i)E=127;else E=103}else{o=i;p=r+304|0;if(((c[p>>2]|0)>>>0<=o>>>0?(c[r+308>>2]|0)>>>0>o>>>0:0)?!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0)):0){E=103;break}n=Zd(r,i,q,0)|0;if(n|0){c[s>>2]=n;i=n;E=103;break}if(c[r+480>>2]|0){Xd(r,i);E=126;break}if((c[p>>2]|0)>>>0<=o>>>0?(c[r+308>>2]|0)>>>0>o>>>0:0){E=r+300|0;c[i>>2]=c[E>>2];c[E>>2]=i;E=126;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);E=126;break}else{E=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);E=126;break}}while(0);if((E|0)==103){n=b[F>>1]|0;if((n&65535|0)>(h|0)){v=D+48|0;w=j-h|0;s=(m|0)==1;t=(l|0)==0;u=K+104|0;r=x?4:5;o=0;m=i+(k*20|0)|0;q=h;i=n;while(1){if((c[c[(c[v>>2]|0)+(q<<2)>>2]>>2]|0)==(y|0)){p=w+q|0;do if(s){n=c[J>>2]|0;k=c[z>>2]|0;if((c[A>>2]|0)>(k|0)){c[z>>2]=k+1;i=c[u>>2]|0;a[i+(k*20|0)>>0]=-128;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=n;c[i+(k*20|0)+8>>2]=p;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;i=k;k=o;break}else{i=Di(K,128,n,p,0)|0;k=o;break}}else{if(t){k=o;n=0}else{k=o+1|0;n=c[l+(o<<2)>>2]|0}o=c[J>>2]|0;i=c[z>>2]|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;D=c[u>>2]|0;a[D+(i*20|0)>>0]=90;b[D+(i*20|0)+2>>1]=0;c[D+(i*20|0)+4>>2]=o;c[D+(i*20|0)+8>>2]=n;c[D+(i*20|0)+12>>2]=p;c[D+(i*20|0)+16>>2]=0;a[D+(i*20|0)+1>>0]=0;n=o;break}else{i=Di(K,90,o,n,p)|0;n=o;break}}while(0);c[m+4>>2]=i;i=c[z>>2]|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;D=c[u>>2]|0;a[D+(i*20|0)>>0]=50;b[D+(i*20|0)+2>>1]=0;c[D+(i*20|0)+4>>2]=p;c[D+(i*20|0)+8>>2]=0;c[D+(i*20|0)+12>>2]=0;c[D+(i*20|0)+16>>2]=0;a[D+(i*20|0)+1>>0]=0}else Di(K,50,p,0,0)|0;do if((q|0)==(h|0)){c[m>>2]=n;a[m+16>>0]=r;if(G?(I=c[H>>2]|0,(I&1024|0)==0):0){c[m+8>>2]=w;c[m+12>>2]=h;c[H>>2]=I|262144;break}c[m+12>>2]=0}else a[m+16>>0]=-86;while(0);m=m+20|0;i=b[F>>1]|0}else k=o;q=q+1|0;if((q|0)>=(i&65535|0))break;else o=k}}}else if((E|0)==126){c[s>>2]=0;E=127}if((E|0)==127)c[t>>2]=0;k=c[d>>2]|0;do if(B|0){if(k|0){if(c[k+480>>2]|0){Xd(k,B);break}K=B;if((c[k+304>>2]|0)>>>0<=K>>>0?(c[k+308>>2]|0)>>>0>K>>>0:0){K=k+300|0;c[B>>2]=c[K>>2];c[K>>2]=B;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{K=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}while(0)}}while(0);lm(g,f);g=j;Ra=M;return g|0}function km(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!e){k=Jj(d,0,f)|0;if((k|0)==(f|0))return;h=c[d+8>>2]|0;if(!h)return;i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[h+104>>2]|0;a[d+(j*20|0)>>0]=79;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(h,79,k,f,0)|0;return}}h=a[e>>0]|0;j=h<<24>>24==-88;if(j)h=a[e+38>>0]|0;switch(h<<24>>24){case -87:{i=e+20|0;q=7;break}case -125:{i=c[e+20>>2]|0;q=7;break}default:{}}if((q|0)==7?(c[c[i>>2]>>2]|0)>=2:0){if(c[e+4>>2]&2048|0){l=c[d+8>>2]|0;k=Qj(d,e)|0;h=g+-1|0;i=l+108|0;j=c[i>>2]|0;if((c[l+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[l+104>>2]|0;a[d+(j*20|0)>>0]=78;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=h;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(l,78,k,f,h)|0;return}}e=c[e+20>>2]|0;if((g|0)<=0)return;m=d+8|0;l=0;do{h=c[e+4+(l*20|0)>>2]|0;n=l+f|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(d,h,n)|0;q=21;break}k=c[m>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;k=c[k+104>>2]|0;a[k+(j*20|0)>>0]=78;b[k+(j*20|0)+2>>1]=0;c[k+(j*20|0)+4>>2]=h;c[k+(j*20|0)+8>>2]=n;c[k+(j*20|0)+12>>2]=0;c[k+(j*20|0)+16>>2]=0;a[k+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,n,0)|0;break}}else{p=Jj(d,0,n)|0;q=21}while(0);do if(((q|0)==21?(q=0,(p|0)!=(n|0)):0)?(o=c[m>>2]|0,o|0):0){h=o+108|0;i=c[h>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[h>>2]=i+1;k=c[o+104>>2]|0;a[k+(i*20|0)>>0]=79;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=p;c[k+(i*20|0)+8>>2]=n;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;break}else{Di(o,79,p,n,0)|0;break}}while(0);l=l+1|0}while((l|0)!=(g|0));return}if(j){k=c[d+8>>2]|0;h=c[e+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[k+104>>2]|0;a[d+(j*20|0)>>0]=78;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=h;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(k,78,h,f,0)|0;return}}k=Jj(d,e,f)|0;if((k|0)==(f|0))return;h=c[d+8>>2]|0;if(!h)return;i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[h+104>>2]|0;a[d+(j*20|0)>>0]=79;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(h,79,k,f,0)|0;return}}function lm(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=e+10|0;g=b[h>>1]|0;if(g&4)return;q=d+72|0;if(!(c[d>>2]|0)){m=q;l=c[m>>2]|0;m=c[m+4>>2]|0;f=e;k=0;i=g;n=h;while(1){j=f+40|0;if(!((c[j>>2]&l|0)==0?(c[j+4>>2]&m|0)==0:0)){d=22;break}if((k|0)!=0?(o=i&65535,(o&1024|0)!=0):0)d=(o|512)&65535;else d=i|4;b[n>>1]=d;j=c[f+16>>2]|0;if((j|0)<0){d=22;break}d=c[(c[f+4>>2]|0)+20>>2]|0;i=d+(j*48|0)+14|0;n=(a[i>>0]|0)+-1<<24>>24;a[i>>0]=n;if(n<<24>>24){d=22;break}n=d+(j*48|0)+10|0;i=b[n>>1]|0;if(i&4){d=22;break}else{f=d+(j*48|0)|0;k=k+1|0}}if((d|0)==22)return}i=0;while(1){if(!(c[(c[e>>2]|0)+4>>2]&1)){d=22;break}o=q;n=e+40|0;if(!((c[n>>2]&c[o>>2]|0)==0?(c[n+4>>2]&c[o+4>>2]|0)==0:0)){d=22;break}if((i|0)!=0?(p=g&65535,(p&1024|0)!=0):0)d=(p|512)&65535;else d=g|4;b[h>>1]=d;f=c[e+16>>2]|0;if((f|0)<0){d=22;break}d=c[(c[e+4>>2]|0)+20>>2]|0;n=d+(f*48|0)+14|0;o=(a[n>>0]|0)+-1<<24>>24;a[n>>0]=o;if(o<<24>>24){d=22;break}h=d+(f*48|0)+10|0;g=b[h>>1]|0;if(g&4){d=22;break}else{e=d+(f*48|0)|0;i=i+1|0}}if((d|0)==22)return}function mm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((a[d>>0]|0)==44)do{mm(c[d+12>>2]|0,e,f);d=c[d+16>>2]|0}while((a[d>>0]|0)==44);i=f+12|0;if((c[i>>2]|0)<=0)return;f=c[f+20>>2]|0;g=0;while(1){h=f+10|0;if((b[h>>1]&4)==0?(bk(0,c[f>>2]|0,d,e)|0)==0:0)b[h>>1]=b[h>>1]|4;g=g+1|0;if((g|0)>=(c[i>>2]|0))break;else f=f+48|0}return}function nm(d,e){d=d|0;e=e|0;d=c[d+24>>2]|0;if(bk(0,e,c[d>>2]|0,c[d+4>>2]|0)|0){e=0;return e|0}a[e>>0]=-94;c[e+28>>2]=c[d+8>>2];b[e+32>>1]=c[d+12>>2];c[e+44>>2]=0;e=1;return e|0}function om(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=c[c[c[a>>2]>>2]>>2]|0;d=c[a+12>>2]|0;o=a+20|0;if((d|0)>0){p=(q|0)==0;i=q+480|0;j=q+304|0;k=q+308|0;l=q+300|0;h=c[o>>2]|0;while(1){g=d;d=d+-1|0;f=h+10|0;e=b[f>>1]|0;if((e&1)!=0?(m=c[h>>2]|0,(m|0)!=0):0){ni(q,m);e=b[f>>1]|0}e=e&65535;do if(!(e&16)){if(e&32|0?(n=c[h+28>>2]|0,om(n),n|0):0){if(!p){if(c[i>>2]|0){Xd(q,n);break}f=n;if((c[j>>2]|0)>>>0<=f>>>0?(c[k>>2]|0)>>>0>f>>>0:0){c[n>>2]=c[l>>2];c[l>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}}else{e=c[h+28>>2]|0;om(e);if(e|0){if(!p){if(c[i>>2]|0){Xd(q,e);break}f=e;if((c[j>>2]|0)>>>0<=f>>>0?(c[k>>2]|0)>>>0>f>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}}while(0);if((g|0)<=1)break;else h=h+48|0}}d=c[o>>2]|0;if((d|0)==(a+24|0))return;if(!d)return;if(q|0){if(c[q+480>>2]|0){Xd(q,d);return}a=d;if((c[q+304>>2]|0)>>>0<=a>>>0?(c[q+308>>2]|0)>>>0>a>>>0:0){q=q+300|0;c[d>>2]=c[q>>2];c[q>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{q=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function pm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))j=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);p=d+19|0;i=a[p>>0]|0;if(!(i<<24>>24)){n=d+44|0;o=(c[n>>2]|0)+1|0;c[n>>2]=o}else{o=i+-1<<24>>24;a[p>>0]=o;o=c[d+148+((o&255)<<2)>>2]|0}m=h+108|0;i=c[m>>2]|0;n=h+112|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=70;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=0;c[l+(i*20|0)+8>>2]=o;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else Di(h,70,0,o,0)|0;do if((g|0)>2){i=a[p>>0]|0;if(!(i<<24>>24)){k=d+44|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l}else{l=i+-1<<24>>24;a[p>>0]=l;l=c[d+148+((l&255)<<2)>>2]|0}i=c[m>>2]|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;k=c[h+104>>2]|0;a[k+(i*20|0)>>0]=110;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=0;c[k+(i*20|0)+8>>2]=l;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else i=Di(h,110,0,l,0)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;j=c[h+104>>2]|0;k=j+(i*20|0)+1|0;if(!(a[k>>0]|0)){c[j+(i*20|0)+16>>2]=59952;a[k>>0]=-1;break}else{Ei(h,j+(i*20|0)|0,59952,-1);break}}while(0);i=c[m>>2]|0;j=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;k=c[h+104>>2]|0;a[k+(i*20|0)>>0]=57;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=l;c[k+(i*20|0)+8>>2]=j;c[k+(i*20|0)+12>>2]=f;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else Di(h,57,l,j,f)|0;i=c[m>>2]|0;if((i|0)>0)b[(c[h+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=83}else{i=c[m>>2]|0;j=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=15;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=f;c[l+(i*20|0)+8>>2]=j;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0;break}else{Di(h,15,f,j,0)|0;break}}while(0);j=c[18208+(g<<2)>>2]|0;i=c[m>>2]|0;k=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=j;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=o;c[l+(i*20|0)+8>>2]=k;c[l+(i*20|0)+12>>2]=f;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else Di(h,j,o,k,f)|0;i=c[d+116>>2]|0;a[((i|0)==0?d:i)+21>>0]=1;i=c[m>>2]|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[h+104>>2]|0;a[f+(i*20|0)>>0]=69;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=1;c[f+(i*20|0)+8>>2]=2;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(h,69,1,2,0)|0;if(!(a[(c[h>>2]|0)+81>>0]|0)){n=c[18176+(g<<2)>>2]|0;f=c[h+104>>2]|0;g=(c[m>>2]|0)+-1|0;a[f+(g*20|0)+1>>0]=-1;c[f+(g*20|0)+16>>2]=n}if(!o)return;h=a[p>>0]|0;if((h&255)>=8)return;a[p>>0]=h+1<<24>>24;c[d+148+((h&255)<<2)>>2]=o;return}function qm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))q=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;q=15}while(0);if((q|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);if(!f)return;n=f+84|0;o=h+108|0;p=h+112|0;g=(g|0)==0;m=h+104|0;do{if(((c[n>>2]|0)==0?(c[(c[f+40>>2]|0)+4>>2]&4096|0)!=0:0)?(a[f+17>>0]|0)!=87:0){d=f+52|0;i=c[d>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=73;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=i;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,73,0,i,0)|0;i=f+56|0;j=c[i>>2]|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;l=c[m>>2]|0;a[l+(k*20|0)>>0]=32;b[l+(k*20|0)+2>>1]=0;c[l+(k*20|0)+4>>2]=j;c[l+(k*20|0)+8>>2]=0;c[l+(k*20|0)+12>>2]=0;c[l+(k*20|0)+16>>2]=0;a[l+(k*20|0)+1>>0]=0}else Di(h,32,j,0,0)|0;k=c[i>>2]|0;i=c[d>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=90;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=0;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,90,k,0,i)|0;j=c[o>>2]|0;if(!(a[(c[h>>2]|0)+81>>0]|0))i=(c[m>>2]|0)+((((j|0)<2?-1:-2)+j|0)*20|0)|0;else i=59308;c[i+8>>2]=j}else q=37;do if((q|0)==37?(q=0,(c[f+60>>2]|0)==0):0){i=c[(c[f+68>>2]|0)+20>>2]|0;if(!i)d=0;else d=c[i>>2]|0;l=f+48|0;k=c[l>>2]|0;if(g){i=c[f+52>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=-100;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=d;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,156,k,d,i)|0;i=c[f+40>>2]|0;j=c[h>>2]|0;if(!(a[j+81>>0]|0)){d=c[m>>2]|0;l=(c[o>>2]|0)+-1|0;a[d+(l*20|0)+1>>0]=-8;c[d+(l*20|0)+16>>2]=i;break}if(!(c[i+4>>2]&16))break;if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}l=i;if((c[j+304>>2]|0)>>>0<=l>>>0?(c[j+308>>2]|0)>>>0>l>>>0:0){l=j+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}i=c[o>>2]|0;if((c[p>>2]|0)>(i|0)){c[o>>2]=i+1;j=c[m>>2]|0;a[j+(i*20|0)>>0]=-99;b[j+(i*20|0)+2>>1]=0;c[j+(i*20|0)+4>>2]=k;c[j+(i*20|0)+8>>2]=d;c[j+(i*20|0)+12>>2]=0;c[j+(i*20|0)+16>>2]=0;a[j+(i*20|0)+1>>0]=0}else Di(h,157,k,d,0)|0;i=c[f+40>>2]|0;j=c[h>>2]|0;do if(a[j+81>>0]|0){if(c[i+4>>2]&16|0){if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}d=i;if((c[j+304>>2]|0)>>>0<=d>>>0?(c[j+308>>2]|0)>>>0>d>>>0:0){d=j+300|0;c[i>>2]=c[d>>2];c[d>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}else{k=c[m>>2]|0;d=(c[o>>2]|0)+-1|0;a[k+(d*20|0)+1>>0]=-8;c[k+(d*20|0)+16>>2]=i}while(0);i=c[l>>2]|0;j=c[f+52>>2]|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;d=c[m>>2]|0;a[d+(k*20|0)>>0]=78;b[d+(k*20|0)+2>>1]=0;c[d+(k*20|0)+4>>2]=i;c[d+(k*20|0)+8>>2]=j;c[d+(k*20|0)+12>>2]=0;c[d+(k*20|0)+16>>2]=0;a[d+(k*20|0)+1>>0]=0}else Di(h,78,i,j,0)|0;i=c[l>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=73;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=i;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0;break}else{Di(h,73,0,i,0)|0;break}}while(0);f=c[f+32>>2]|0}while((f|0)!=0);return}function rm(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;J=d+4|0;K=c[J>>2]|0;M=c[d+8>>2]|0;l=K+84|0;L=c[d>>2]|0;do if(!(c[l>>2]|0)){if(!K){j=M+108|0;h=M+112|0;break}s=L+56|0;t=L+19|0;u=L+44|0;j=M+108|0;h=M+112|0;v=M+104|0;w=K+44|0;x=M+12|0;r=K;do{o=(c[r+40>>2]|0)+32|0;f=c[o>>2]|0;if((f|0)==43457|(f|0)==43467){m=c[r+56>>2]|0;p=c[s>>2]|0;k=p+-1|0;c[s>>2]=k;f=a[t>>0]|0;if(!(f<<24>>24)){n=(c[u>>2]|0)+1|0;c[u>>2]=n}else{n=f+-1<<24>>24;a[t>>0]=n;n=c[L+148+((n&255)<<2)>>2]|0}l=r+52|0;f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=73;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=0;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,73,0,f,0)|0;do if((c[o>>2]|0)!=43457){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=70;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=1;c[K+(f*20|0)+8>>2]=n;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0;break}else{Di(M,70,1,n,0)|0;break}}else{f=c[w>>2]|0;g=(c[r+76>>2]|0)+1|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=f;c[K+(i*20|0)+8>>2]=g;c[K+(i*20|0)+12>>2]=n;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,90,f,g,n)|0;pm(L,n,2)}while(0);f=r+60|0;g=c[f>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=100;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=g;c[K+(i*20|0)+12>>2]=n;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,100,n,g,n)|0;f=(c[f>>2]|0)+1|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=54;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=f;c[K+(g*20|0)+8>>2]=k;c[K+(g*20|0)+12>>2]=n;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,54,f,k,n)|0;f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=30;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=m;c[K+(f*20|0)+8>>2]=0;c[K+(f*20|0)+12>>2]=n;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,30,m,0,n)|0;i=c[r+76>>2]|0;f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=90;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=m;c[K+(g*20|0)+8>>2]=i;c[K+(g*20|0)+12>>2]=f;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,90,m,i,f)|0;g=c[x>>2]|0;f=0-p|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,M,f);else c[(c[g+64>>2]|0)+(f<<2)>>2]=c[j>>2];if(n|0?(y=a[t>>0]|0,(y&255)<8):0){a[t>>0]=y+1<<24>>24;c[L+148+((y&255)<<2)>>2]=n}}else if((f|0)==40587|(f|0)==40592){k=c[c[(c[r+68>>2]|0)+20>>2]>>2]|0;n=c[r+56>>2]|0;q=c[s>>2]|0;m=q+-1|0;c[s>>2]=m;f=a[t>>0]|0;if(!(f<<24>>24)){p=(c[u>>2]|0)+1|0;c[u>>2]=p}else{p=f+-1<<24>>24;a[t>>0]=p;p=c[L+148+((p&255)<<2)>>2]|0}l=c[w>>2]|0;do if((k|0)<3){f=c[r+52>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=73;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=0;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0;break}else{Di(M,73,0,f,0)|0;break}}else{f=(c[r+76>>2]|0)+2|0;g=c[r+52>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=l;c[K+(i*20|0)+8>>2]=f;c[K+(i*20|0)+12>>2]=g;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0;break}else{Di(M,90,l,f,g)|0;break}}while(0);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=-128;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=l;c[K+(f*20|0)+8>>2]=p;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,128,l,p,0)|0;f=(c[o>>2]|0)==40587;do if((k|0)<2){f=f?1:-1;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=83;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=p;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0;break}else{Di(M,83,p,f,0)|0;break}}else{k=f?100:101;f=a[t>>0]|0;if(!(f<<24>>24)){i=(c[u>>2]|0)+1|0;c[u>>2]=i}else{i=f+-1<<24>>24;a[t>>0]=i;i=c[L+148+((i&255)<<2)>>2]|0}f=(c[r+76>>2]|0)+1|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=90;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=l;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=i;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,90,l,f,i)|0;f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=k;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=i;c[K+(f*20|0)+8>>2]=p;c[K+(f*20|0)+12>>2]=p;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,k,i,p,p)|0;if(i|0?(z=a[t>>0]|0,(z&255)<8):0){a[t>>0]=z+1<<24>>24;c[L+148+((z&255)<<2)>>2]=i}}while(0);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=30;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=n;c[K+(f*20|0)+8>>2]=m;c[K+(f*20|0)+12>>2]=p;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,30,n,m,p)|0;f=c[r+76>>2]|0;g=c[r+52>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=f;c[K+(i*20|0)+12>>2]=g;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,90,n,f,g)|0;g=c[x>>2]|0;f=0-q|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,M,f);else c[(c[g+64>>2]|0)+(f<<2)>>2]=c[j>>2];if(p|0?(A=a[t>>0]|0,(A&255)<8):0){a[t>>0]=A+1<<24>>24;c[L+148+((A&255)<<2)>>2]=p}}r=c[r+32>>2]|0}while((r|0)!=0)}else{C=c[K+56>>2]|0;n=K+12|0;f=c[n>>2]|0;if(!f)E=0;else E=c[f>>2]|0;D=L+56|0;A=c[D>>2]|0;y=A+-1|0;m=A+-2|0;c[D>>2]=m;D=L+19|0;f=a[D>>0]|0;do if(f<<24>>24){B=f+-1<<24>>24;a[D>>0]=B;g=c[L+148+((B&255)<<2)>>2]|0;if(!(B<<24>>24)){h=L+44|0;f=h;h=c[h>>2]|0;t=8;break}else{f=f+-2<<24>>24;a[D>>0]=f;B=c[L+148+((f&255)<<2)>>2]|0;break}}else{f=L+44|0;h=(c[f>>2]|0)+1|0;c[f>>2]=h;g=h;t=8}while(0);if((t|0)==8){B=h+1|0;c[f>>2]=B;f=0}z=(E|0)!=0;a:do if(z)if((E|0)!=1){j=L+32|0;h=c[j>>2]|0;k=L+28|0;f=c[k>>2]|0;if((f|0)<(E|0)){x=L+44|0;i=c[x>>2]|0;c[x>>2]=i+E;i=i+1|0}else{x=h+E|0;c[j>>2]=x;f=f-E|0;c[k>>2]=f;i=h;h=x}if((f|0)<(E|0)){w=L+44|0;x=c[w>>2]|0;c[w>>2]=x+E;w=i;x=x+1|0;break}else{c[j>>2]=h+E;c[k>>2]=f-E;w=i;x=h;break}}else{do if(f<<24>>24){x=f+-1<<24>>24;a[D>>0]=x;h=c[L+148+((x&255)<<2)>>2]|0;if(!(x<<24>>24)){i=L+44|0;f=i;i=c[i>>2]|0;break}else{x=f+-2<<24>>24;a[D>>0]=x;w=h;x=c[L+148+((x&255)<<2)>>2]|0;break a}}else{f=L+44|0;i=(c[f>>2]|0)+1|0;c[f>>2]=i;h=i}while(0);x=i+1|0;c[f>>2]=x;w=h;break}else{w=0;x=0}while(0);k=K+44|0;f=c[k>>2]|0;j=M+108|0;i=c[j>>2]|0;h=M+112|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;v=M+104|0;u=c[v>>2]|0;a[u+(i*20|0)>>0]=-128;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=f;c[u+(i*20|0)+8>>2]=g;c[u+(i*20|0)+12>>2]=0;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0}else{Di(M,128,f,g,0)|0;v=M+104|0}vm(d,c[k>>2]|0,w);f=K;do{i=c[f+48>>2]|0;k=c[j>>2]|0;if((c[h>>2]|0)>(k|0)){c[j>>2]=k+1;u=c[v>>2]|0;a[u+(k*20|0)>>0]=73;b[u+(k*20|0)+2>>1]=0;c[u+(k*20|0)+4>>2]=0;c[u+(k*20|0)+8>>2]=i;c[u+(k*20|0)+12>>2]=0;c[u+(k*20|0)+16>>2]=0;a[u+(k*20|0)+1>>0]=0}else Di(M,73,0,i,0)|0;f=c[f+32>>2]|0}while((f|0)!=0);f=c[l>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;u=c[v>>2]|0;a[u+(i*20|0)>>0]=24;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=C;c[u+(i*20|0)+8>>2]=m;c[u+(i*20|0)+12>>2]=f;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0}else Di(M,24,C,m,f)|0;u=c[j>>2]|0;if((c[h>>2]|0)>(u|0)){c[j>>2]=u+1;s=c[v>>2]|0;a[s+(u*20|0)>>0]=-128;b[s+(u*20|0)+2>>1]=0;c[s+(u*20|0)+4>>2]=C;c[s+(u*20|0)+8>>2]=B;c[s+(u*20|0)+12>>2]=0;c[s+(u*20|0)+16>>2]=0;a[s+(u*20|0)+1>>0]=0}else Di(M,128,C,B,0)|0;f=c[K+88>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;s=c[v>>2]|0;a[s+(i*20|0)>>0]=54;b[s+(i*20|0)+2>>1]=0;c[s+(i*20|0)+4>>2]=f;c[s+(i*20|0)+8>>2]=m;c[s+(i*20|0)+12>>2]=B;c[s+(i*20|0)+16>>2]=0;a[s+(i*20|0)+1>>0]=0}else Di(M,54,f,m,B)|0;s=K+20|0;f=a[s>>0]|0;b:do switch(f<<24>>24){case 82:{f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=53;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=g;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=B;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break b}else{Di(M,53,g,y,B)|0;break b}}case 66:break;default:{p=c[n>>2]|0;if(!p){k=0;l=0}else{q=c[L>>2]|0;r=c[p>>2]|0;m=r+1|0;n=m*5|0;k=n+20|0;l=q+272|0;c:do if(c[l>>2]|0)if(!(a[q+81>>0]|0))t=56;else{f=0;i=0}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<k>>>0:0))){f=q+300|0;i=c[f>>2]|0;if(i|0){c[f>>2]=c[i>>2];o=q+284|0;c[o>>2]=(c[o>>2]|0)+1;o=i;t=57;break c}f=q+296|0;i=c[f>>2]|0;if(!i){f=q+292|0;break}else{c[f>>2]=c[i>>2];o=q+284|0;c[o>>2]=(c[o>>2]|0)+1;o=i;t=57;break c}}else f=q+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;t=56}while(0);if((t|0)==56){o=_d(q,k,0)|0;t=57}d:do if((t|0)==57){if(o|0){l=o+16|0;c[l>>2]=o+20+(m<<2);b[o+6>>1]=r;b[o+8>>1]=m;a[o+4>>0]=a[q+78>>0]|0;c[o+12>>2]=q;c[o>>2]=1;gw(o+24|0,0,n+-4|0)|0;if((r|0)<=0){f=o;i=o;break}i=p+4|0;k=0;while(1){f=Yi(L,c[i>>2]|0)|0;if(!f)f=c[(c[L>>2]|0)+8>>2]|0;c[o+20+(k<<2)>>2]=f;a[(c[l>>2]|0)+k>>0]=a[i+12>>0]|0;k=k+1|0;if((k|0)==(r|0)){f=o;i=o;break d}else i=i+20|0}}f=q+81|0;if((a[f>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[f>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[l>>2]=(c[l>>2]|0)+1;f=c[q+236>>2]|0;if(f){c[f+12>>2]=7;f=o;i=0}else{f=o;i=0}}else{f=o;i=0}}while(0);k=f;f=a[s>>0]|0;l=i}do if(f<<24>>24==91){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;m=c[v>>2]|0;a[m+(f*20|0)>>0]=53;b[m+(f*20|0)+2>>1]=0;c[m+(f*20|0)+4>>2]=g;c[m+(f*20|0)+8>>2]=0;c[m+(f*20|0)+12>>2]=B;c[m+(f*20|0)+16>>2]=0;a[m+(f*20|0)+1>>0]=0;m=f;break}else{m=Di(M,53,g,0,B)|0;break}}else m=0;while(0);do if(!k){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=11;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=0;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=0;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break}else{Di(M,11,0,y,0)|0;break}}else{vm(d,C,x);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=87;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=x;c[t+(f*20|0)+8>>2]=w;c[t+(f*20|0)+12>>2]=E;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0}else Di(M,87,x,w,E)|0;f=c[M>>2]|0;e:do if(a[f+81>>0]|0){if(!((l|0)==0|(c[f+480>>2]|0)!=0)?(t=(c[l>>2]|0)+-1|0,c[l>>2]=t,(t|0)==0):0){f=c[l+12>>2]|0;do if(f|0){if(c[f+480>>2]|0){Xd(f,l);break e}i=l;if((c[f+304>>2]|0)>>>0>i>>>0)break;if((c[f+308>>2]|0)>>>0<=i>>>0)break;t=f+300|0;c[l>>2]=c[t>>2];c[t>>2]=l;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else{s=c[v>>2]|0;t=(c[j>>2]|0)+-1|0;a[s+(t*20|0)+1>>0]=-9;c[s+(t*20|0)+16>>2]=l}while(0);f=c[j>>2]|0;i=f+1|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=i;t=c[v>>2]|0;a[t+(f*20|0)>>0]=16;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=i;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=i;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break}else{Di(M,16,i,y,i)|0;break}}while(0);if(m|0){i=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))f=(c[v>>2]|0)+(((m|0)<0?i+-1|0:m)*20|0)|0;else f=59308;c[f+8>>2]=i}}}while(0);wm(L,K,C,0,c[d+20>>2]|0);i=c[M+12>>2]|0;f=0-A|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,M,f);else c[(c[i+64>>2]|0)+(f<<2)>>2]=c[j>>2];f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=5;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=C;c[K+(f*20|0)+8>>2]=u;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,5,C,u,0)|0;i=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0)){f=c[v>>2]|0;c[f+((((u|0)<1?i:u)+-1|0)*20|0)+8>>2]=i;f=f+(((u|0)<-1?i+-1|0:u+1|0)*20|0)|0}else{c[14829]=i;f=59308}c[f+8>>2]=i;if(B|0?(F=a[D>>0]|0,(F&255)<8):0){a[D>>0]=F+1<<24>>24;c[L+148+((F&255)<<2)>>2]=B}if(g|0?(G=a[D>>0]|0,(G&255)<8):0){a[D>>0]=G+1<<24>>24;c[L+148+((G&255)<<2)>>2]=g}do if(z){if((E|0)!=1){f=L+28|0;if((c[f>>2]|0)>=(E|0))break;c[f>>2]=E;c[L+32>>2]=x;break}if(x|0?(H=a[D>>0]|0,(H&255)<8):0){a[D>>0]=H+1<<24>>24;c[L+148+((H&255)<<2)>>2]=x}if(w|0?(I=a[D>>0]|0,(I&255)<8):0){a[D>>0]=I+1<<24>>24;c[L+148+((I&255)<<2)>>2]=w}}while(0);qm(c[d>>2]|0,c[J>>2]|0,1)}while(0);i=c[d+12>>2]|0;f=c[d+16>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;M=c[M+104>>2]|0;a[M+(g*20|0)>>0]=12;b[M+(g*20|0)+2>>1]=0;c[M+(g*20|0)+4>>2]=i;c[M+(g*20|0)+8>>2]=f;c[M+(g*20|0)+12>>2]=0;c[M+(g*20|0)+16>>2]=0;a[M+(g*20|0)+1>>0]=0;return}else{Di(M,12,i,f,0)|0;return}}function sm(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;n=d+8|0;j=c[n>>2]|0;a:do if(!j){m=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))r=15;else{t=0;break a}else{do if((e[m+276>>1]|0)>=224){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];t=m+284|0;c[t>>2]=(c[t>>2]|0)+1;break b}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];t=m+284|0;c[t>>2]=(c[t>>2]|0)+1;break b}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;r=15}while(0);if((r|0)==15)k=_d(m,224,0)|0;if(!k)t=0;else{j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=m;j=m+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=d;c[n>>2]=k;Di(k,61,0,1,0)|0;t=k}}else t=j;while(0);if(!f){j=t+108|0;k=c[j>>2]|0;if((c[t+112>>2]|0)>(k|0)){c[j>>2]=k+1;h=c[t+104>>2]|0;a[h+(k*20|0)>>0]=11;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=0;c[h+(k*20|0)+8>>2]=i;c[h+(k*20|0)+12>>2]=0;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0;return}else{Di(t,11,0,i,0)|0;return}}s=c[f>>2]|0;o=c[d>>2]|0;m=s+1|0;n=m*5|0;l=n+20|0;p=o+272|0;c:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))r=31;else{l=0;k=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];q=o+284|0;c[q>>2]=(c[q>>2]|0)+1;q=k;r=32;break c}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];q=o+284|0;c[q>>2]=(c[q>>2]|0)+1;q=k;r=32;break c}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;r=31}while(0);if((r|0)==31){q=_d(o,l,0)|0;r=32}if((r|0)==32){if(!q){j=o+81|0;if((a[j>>0]|0)==0?(a[o+82>>0]|0)==0:0){a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(j){c[j+12>>2]=7;l=0;k=1}else{l=0;k=1}}else{l=0;k=1}}else{c[q+16>>2]=q+20+(m<<2);b[q+6>>1]=s;b[q+8>>1]=m;a[q+4>>0]=a[o+78>>0]|0;c[q+12>>2]=o;c[q>>2]=1;gw(q+24|0,0,n+-4|0)|0;l=q;k=0}if((s|0)>0&(q|0)!=0){o=q+16|0;m=f+4|0;n=0;while(1){j=Yi(d,c[m>>2]|0)|0;if(!j)j=c[(c[d>>2]|0)+8>>2]|0;c[q+20+(n<<2)>>2]=j;a[(c[o>>2]|0)+n>>0]=a[m+12>>0]|0;n=n+1|0;if((n|0)==(s|0))break;else m=m+20|0}}}m=t+108|0;j=c[m>>2]|0;n=t+112|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=j+1;d=c[t+104>>2]|0;a[d+(j*20|0)>>0]=87;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=h;c[d+(j*20|0)+8>>2]=g;c[d+(j*20|0)+12>>2]=s;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0}else Di(t,87,h,g,s)|0;j=c[t>>2]|0;do if(a[j+81>>0]|0){if(!(k|(c[j+480>>2]|0)!=0)?(d=(c[l>>2]|0)+-1|0,c[l>>2]=d,(d|0)==0):0){j=c[l+12>>2]|0;if(j|0){if(c[j+480>>2]|0){Xd(j,l);break}d=l;if((c[j+304>>2]|0)>>>0<=d>>>0?(c[j+308>>2]|0)>>>0>d>>>0:0){d=j+300|0;c[l>>2]=c[d>>2];c[d>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{d=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else{f=c[t+104>>2]|0;d=(c[m>>2]|0)+-1|0;a[f+(d*20|0)+1>>0]=-9;c[f+(d*20|0)+16>>2]=l}while(0);j=c[m>>2]|0;k=j+1|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=k;d=c[t+104>>2]|0;a[d+(j*20|0)>>0]=16;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=i;c[d+(j*20|0)+12>>2]=k;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0}else Di(t,16,k,i,k)|0;j=s+-1|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=78;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=g;c[i+(k*20|0)+8>>2]=h;c[i+(k*20|0)+12>>2]=j;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;return}else{Di(t,78,g,h,j)|0;return}}function tm(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;y=c[d>>2]|0;l=d+4|0;u=c[l>>2]|0;A=c[d+8>>2]|0;h=a[u+16>>0]|0;s=h<<24>>24!=76;m=y+56|0;z=c[m>>2]|0;i=z+-1|0;c[m>>2]=i;m=(e|0)==2;if(m?(a[u+17>>0]|0)==87:0){A=0;return A|0}do if((f|0)>0){k=A+108|0;j=c[k>>2]|0;if(h<<24>>24!=86)if((c[A+112>>2]|0)>(j|0)){c[k>>2]=j+1;n=c[A+104>>2]|0;a[n+(j*20|0)>>0]=47;b[n+(j*20|0)+2>>1]=0;c[n+(j*20|0)+4>>2]=f;c[n+(j*20|0)+8>>2]=0;c[n+(j*20|0)+12>>2]=1;c[n+(j*20|0)+16>>2]=0;a[n+(j*20|0)+1>>0]=0;n=0;f=j;r=14;break}else{n=0;f=Di(A,47,f,0,1)|0;r=14;break}if(!m){um(d,54,c[d+44>>2]|0,f,c[d+36>>2]|0,i);n=j;f=0;r=14;break}if((a[u+17>>0]|0)==83)um(d,55,c[d+36>>2]|0,f,c[d+28>>2]|0,i);else um(d,57,c[d+28>>2]|0,f,c[d+36>>2]|0,i);l=0;m=k;k=c[k>>2]|0;r=19}else{n=0;f=0;r=14}while(0);do if((r|0)==14){if((e|0)==1){if(!(c[u+84>>2]|0))qm(c[d>>2]|0,c[l>>2]|0,0);j=A+108|0;p=c[j>>2]|0;t=c[d+36>>2]|0;q=c[d+40>>2]|0;rm(d);v=f;break}o=A+108|0;k=c[o>>2]|0;if(!m){h=c[d+44>>2]|0;j=c[d+48>>2]|0;if(!(c[u+84>>2]|0)){wm(y,u,h,0,c[d+20>>2]|0);t=h;q=j;v=f;p=k;j=o;break}i=c[u+88>>2]|0;if((c[A+112>>2]|0)>(k|0)){c[o>>2]=k+1;t=c[A+104>>2]|0;a[t+(k*20|0)>>0]=83;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=i;c[t+(k*20|0)+8>>2]=1;c[t+(k*20|0)+12>>2]=0;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=h;q=j;v=f;p=k;j=o;break}else{Di(A,83,i,1,0)|0;t=h;q=j;v=f;p=k;j=o;break}}else{j=n;l=f;m=o;r=19}}while(0);do if((r|0)==19){h=c[d+28>>2]|0;f=c[d+32>>2]|0;i=c[u+84>>2]|0;if(!i){wm(y,u,h,1,c[d+20>>2]|0);t=h;n=j;q=f;v=l;p=k;j=m;break}if((c[A+112>>2]|0)>(k|0)){c[A+108>>2]=k+1;t=c[A+104>>2]|0;a[t+(k*20|0)>>0]=83;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=i;c[t+(k*20|0)+8>>2]=1;c[t+(k*20|0)+12>>2]=0;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=h;n=j;q=f;v=l;p=k;j=m;break}else{Di(A,83,i,1,0)|0;t=h;n=j;q=f;v=l;p=k;j=m;break}}while(0);if((c[d+24>>2]|0)==(e|0)){h=A+108|0;i=c[h>>2]|0;if((c[A+112>>2]|0)>(i|0)){c[h>>2]=i+1;e=c[A+104>>2]|0;a[e+(i*20|0)>>0]=123;b[e+(i*20|0)+2>>1]=0;c[e+(i*20|0)+4>>2]=t;c[e+(i*20|0)+8>>2]=0;c[e+(i*20|0)+12>>2]=0;c[e+(i*20|0)+16>>2]=0;a[e+(i*20|0)+1>>0]=0}else Di(A,123,t,0,0)|0;h=c[h>>2]|0;if((h|0)>0)b[(c[A+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=2}h=c[j>>2]|0;do if(!g){h=(s?2:1)+h|0;f=A+108|0;i=c[f>>2]|0;k=A+112|0;if((c[k>>2]|0)>(i|0)){c[f>>2]=i+1;g=c[A+104>>2]|0;a[g+(i*20|0)>>0]=5;b[g+(i*20|0)+2>>1]=0;c[g+(i*20|0)+4>>2]=t;c[g+(i*20|0)+8>>2]=h;c[g+(i*20|0)+12>>2]=0;c[g+(i*20|0)+16>>2]=0;a[g+(i*20|0)+1>>0]=0}else Di(A,5,t,h,0)|0;if(s){j=c[f>>2]|0;if((c[k>>2]|0)>(j|0)){c[f>>2]=j+1;i=c[A+104>>2]|0;a[i+(j*20|0)>>0]=11;i=i+(j*20|0)+1|0;f=i+19|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(f|0));f=0;r=50;break}else{f=0;j=Di(A,11,0,0,0)|0;r=50;break}}else{f=0;j=0}}else{h=h+2|0;j=A+108|0;i=c[j>>2]|0;f=A+112|0;if((c[f>>2]|0)>(i|0)){c[j>>2]=i+1;g=c[A+104>>2]|0;a[g+(i*20|0)>>0]=5;b[g+(i*20|0)+2>>1]=0;c[g+(i*20|0)+4>>2]=t;c[g+(i*20|0)+8>>2]=h;c[g+(i*20|0)+12>>2]=0;c[g+(i*20|0)+16>>2]=0;a[g+(i*20|0)+1>>0]=0}else Di(A,5,t,h,0)|0;h=c[j>>2]|0;if((c[f>>2]|0)>(h|0)){c[j>>2]=h+1;i=c[A+104>>2]|0;a[i+(h*20|0)>>0]=11;i=i+(h*20|0)+1|0;f=i+19|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(f|0))}else h=Di(A,11,0,0,0)|0;if(s){f=h;j=0;r=50}else{f=h;j=0}}while(0);do if((r|0)==50){o=u+12|0;h=c[o>>2]|0;a:do if(!h){k=0;i=0}else{i=c[h>>2]|0;switch(i|0){case 0:{k=i;break a}case 1:{h=y+19|0;i=a[h>>0]|0;if(!(i<<24>>24)){i=y+44|0;k=(c[i>>2]|0)+1|0;c[i>>2]=k;i=1;break a}else{k=i+-1<<24>>24;a[h>>0]=k;k=c[y+148+((k&255)<<2)>>2]|0;i=1;break a}}default:{h=y+32|0;k=c[h>>2]|0;l=y+28|0;m=c[l>>2]|0;if((m|0)<(i|0)){u=y+44|0;k=c[u>>2]|0;c[u>>2]=k+i;k=k+1|0;break a}else{c[h>>2]=k+i;c[l>>2]=m-i;break a}}}}while(0);vm(d,t,k);sm(y,c[o>>2]|0,k,q,p);if((i|0)!=1){h=y+28|0;if((c[h>>2]|0)>=(i|0))break;c[h>>2]=i;c[y+32>>2]=k;break}if((k|0)!=0?(w=y+19|0,x=a[w>>0]|0,(x&255)<8):0){a[w>>0]=x+1<<24>>24;c[y+148+((x&255)<<2)>>2]=k}}while(0);do if(n|0){h=A+108|0;i=c[h>>2]|0;if((c[A+112>>2]|0)>(i|0)){c[h>>2]=i+1;y=c[A+104>>2]|0;a[y+(i*20|0)>>0]=11;b[y+(i*20|0)+2>>1]=0;c[y+(i*20|0)+4>>2]=0;c[y+(i*20|0)+8>>2]=n;c[y+(i*20|0)+12>>2]=0;c[y+(i*20|0)+16>>2]=0;a[y+(i*20|0)+1>>0]=0;break}else{Di(A,11,0,n,0)|0;break}}while(0);i=c[A+12>>2]|0;h=0-z|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,A,h);else c[(c[i+64>>2]|0)+(h<<2)>>2]=c[A+108>>2];if(j|0){i=c[A+108>>2]|0;if(!(a[(c[A>>2]|0)+81>>0]|0))h=(c[A+104>>2]|0)+(((j|0)<0?i+-1|0:j)*20|0)|0;else h=59308;c[h+8>>2]=i}if(!v){A=f;return A|0}i=c[A+108>>2]|0;if(!(a[(c[A>>2]|0)+81>>0]|0))h=(c[A+104>>2]|0)+(((v|0)<0?i+-1|0:v)*20|0)|0;else h=59308;c[h+8>>2]=i;A=f;return A|0}function um(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=c[d>>2]|0;o=w+8|0;k=c[o>>2]|0;a:do if(!k){n=c[w>>2]|0;if((c[w+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[w+23>>0]=1;b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))p=15;else{t=0;break a}else{do if((e[n+276>>1]|0)>=224){k=n+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];u=n+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}k=n+296|0;l=c[k>>2]|0;if(!l){k=n+292|0;break}else{c[k>>2]=c[l>>2];u=n+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}}else k=n+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;p=15}while(0);if((p|0)==15)l=_d(n,224,0)|0;if(!l)t=0;else{k=l+104|0;m=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));c[l>>2]=n;k=n+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=w;c[o>>2]=l;Di(l,61,0,1,0)|0;t=l}}else t=k;while(0);u=w+19|0;l=a[u>>0]|0;if(l<<24>>24){s=l+-1<<24>>24;a[u>>0]=s;k=c[w+148+((s&255)<<2)>>2]|0;if(!(s<<24>>24))p=23;else{s=l+-2<<24>>24;a[u>>0]=s;q=w+44|0;r=k;s=c[w+148+((s&255)<<2)>>2]|0;l=q;k=c[q>>2]|0}}else{p=w+44|0;k=(c[p>>2]|0)+1|0;c[p>>2]=k;p=23}if((p|0)==23){l=w+44|0;q=(c[l>>2]|0)+1|0;c[l>>2]=q;r=k;s=q;k=q}p=k+1|0;c[l>>2]=p;n=(a[(c[(c[d+4>>2]|0)+12>>2]|0)+16>>0]|0)==0;q=n?100:101;f=n?f:(f|0)==57?55:(f|0)==54?56:57;vm(d,g,r);vm(d,i,s);n=t+108|0;k=c[n>>2]|0;o=t+112|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=110;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=0;c[i+(k*20|0)+8>>2]=p;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(t,110,0,p,0)|0;do if(!(a[(c[t>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;l=c[t+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=59952;a[m>>0]=-1;break}else{Ei(t,l+(k*20|0)|0,59952,-1);break}}while(0);k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=57;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=p;c[i+(k*20|0)+8>>2]=0;c[i+(k*20|0)+12>>2]=r;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(t,57,p,0,r)|0;l=c[n>>2]|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;i=c[t+104>>2]|0;a[i+(l*20|0)>>0]=q;b[i+(l*20|0)+2>>1]=0;c[i+(l*20|0)+4>>2]=h;c[i+(l*20|0)+8>>2]=r;c[i+(l*20|0)+12>>2]=r;c[i+(l*20|0)+16>>2]=0;a[i+(l*20|0)+1>>0]=0}else Di(t,q,h,r,r)|0;l=c[n>>2]|0;if(!(a[(c[t>>2]|0)+81>>0]|0))k=(c[t+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;h=c[t+104>>2]|0;a[h+(l*20|0)>>0]=f;b[h+(l*20|0)+2>>1]=0;c[h+(l*20|0)+4>>2]=s;c[h+(l*20|0)+8>>2]=j;c[h+(l*20|0)+12>>2]=r;c[h+(l*20|0)+16>>2]=0;a[h+(l*20|0)+1>>0]=0}else Di(t,f,s,j,r)|0;k=c[n>>2]|0;if((k|0)>0)b[(c[t+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=128;if(r|0?(v=a[u>>0]|0,(v&255)<8):0){a[u>>0]=v+1<<24>>24;c[w+148+((v&255)<<2)>>2]=r}if(!s)return;k=a[u>>0]|0;if((k&255)>=8)return;a[u>>0]=k+1<<24>>24;c[w+148+((k&255)<<2)>>2]=s;return}function vm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=c[d+4>>2]|0;o=c[g+12>>2]|0;if(!o)return;n=Ej(c[d>>2]|0)|0;d=c[g+8>>2]|0;if(!d)d=0;else d=c[d>>2]|0;g=d+(c[g+72>>2]|0)|0;if((c[o>>2]|0)<=0)return;h=n+108|0;i=n+112|0;j=n+104|0;d=0;do{k=g+d|0;l=d+f|0;m=c[h>>2]|0;if((c[i>>2]|0)>(m|0)){c[h>>2]=m+1;p=c[j>>2]|0;a[p+(m*20|0)>>0]=90;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=e;c[p+(m*20|0)+8>>2]=k;c[p+(m*20|0)+12>>2]=l;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0}else Di(n,90,e,k,l)|0;d=d+1|0}while((d|0)<(c[o>>2]|0));return}function wm(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;m=d+8|0;j=c[m>>2]|0;a:do if(!j){l=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[l+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))F=15;else{j=0;break a}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];E=l+284|0;c[E>>2]=(c[E>>2]|0)+1;break b}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];E=l+284|0;c[E>>2]=(c[E>>2]|0)+1;break b}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;F=15}while(0);if((F|0)==15)j=_d(l,224,0)|0;if(!j)j=0;else{n=j+104|0;o=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(o|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=d;c[m>>2]=j;Di(j,61,0,1,0)|0}}while(0);if(!f)return;t=f+84|0;u=j+108|0;v=j+112|0;w=f+44|0;x=j+104|0;y=1-h|0;z=(h|0)==0;A=d+19|0;B=z?154:153;C=d+44|0;D=B&255;E=i+1|0;s=f;do{r=c[s+40>>2]|0;q=s+68|0;k=c[(c[q>>2]|0)+20>>2]|0;if(k){o=c[k>>2]|0;if((o|0)>0){f=r+32|0;p=s+76|0;n=0;do{do if((n|0)==1?(c[f>>2]|0)==43457:0){k=c[w>>2]|0;l=(c[p>>2]|0)+1|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=90;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=k;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=E;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,90,k,l,E)|0;break}}else F=27;while(0);do if((F|0)==27){F=0;k=(c[p>>2]|0)+n|0;l=n+i|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=90;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=g;c[H+(m*20|0)+8>>2]=k;c[H+(m*20|0)+12>>2]=l;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,90,g,k,l)|0;break}}while(0);n=n+1|0}while((n|0)!=(o|0));p=o}else p=o}else p=0;if(((c[t>>2]|0)==0?(c[r+4>>2]&4096|0)!=0:0)?(a[s+17>>0]|0)!=87:0){k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;H=c[x>>2]|0;a[H+(k*20|0)>>0]=50;b[H+(k*20|0)+2>>1]=0;c[H+(k*20|0)+4>>2]=i;c[H+(k*20|0)+8>>2]=0;c[H+(k*20|0)+12>>2]=0;c[H+(k*20|0)+16>>2]=0;a[H+(k*20|0)+1>>0]=0}else k=Di(j,50,i,0,0)|0;do if(z){o=s+60|0;l=(c[o>>2]|0)+1|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=83;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=l;c[H+(m*20|0)+8>>2]=1;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,83,l,1,0)|0;l=c[o>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=79;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=i;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,79,i,l,0)|0;l=c[o>>2]|0;m=l+2|0;n=c[u>>2]|0;if((c[v>>2]|0)>(n|0)){c[u>>2]=n+1;H=c[x>>2]|0;a[H+(n*20|0)>>0]=92;b[H+(n*20|0)+2>>1]=0;c[H+(n*20|0)+4>>2]=l;c[H+(n*20|0)+8>>2]=2;c[H+(n*20|0)+12>>2]=m;c[H+(n*20|0)+16>>2]=0;a[H+(n*20|0)+1>>0]=0}else Di(j,92,l,2,m)|0;n=c[s+56>>2]|0;l=(c[o>>2]|0)+2|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=-124;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=n;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,132,n,l,0)|0;break}}else{n=s+56|0;m=c[n>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=24;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=m;c[H+(l*20|0)+8>>2]=0;c[H+(l*20|0)+12>>2]=i;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else l=Di(j,24,m,0,i)|0;if(!(a[(c[j>>2]|0)+81>>0]|0)){H=c[x>>2]|0;a[H+(l*20|0)+1>>0]=-3;c[H+(l*20|0)+16>>2]=1}l=c[n>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=123;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=l;c[H+(m*20|0)+8>>2]=0;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,123,l,0,0)|0;m=c[u>>2]|0;if(!(a[(c[j>>2]|0)+81>>0]|0))l=(c[x>>2]|0)+((((m|0)<2?-1:-2)+m|0)*20|0)|0;else l=59308;c[l+8>>2]=m}while(0);l=c[u>>2]|0;if(!(a[(c[j>>2]|0)+81>>0]|0))k=(c[x>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l}else F=67;do if((F|0)==67){F=0;k=c[s+60>>2]|0;if(k|0){k=y+k|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=83;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=k;c[H+(l*20|0)+8>>2]=1;c[H+(l*20|0)+12>>2]=0;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0;break}else{Di(j,83,k,1,0)|0;break}}if((c[r+16>>2]|0)!=110){if(c[s+36>>2]|0){k=a[A>>0]|0;if(!(k<<24>>24)){m=(c[C>>2]|0)+1|0;c[C>>2]=m}else{m=k+-1<<24>>24;a[A>>0]=m;m=c[d+148+((m&255)<<2)>>2]|0}k=(c[s+76>>2]|0)+p|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=90;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=g;c[H+(l*20|0)+8>>2]=k;c[H+(l*20|0)+12>>2]=m;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else Di(j,90,g,k,m)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;H=c[x>>2]|0;a[H+(k*20|0)>>0]=20;b[H+(k*20|0)+2>>1]=0;c[H+(k*20|0)+4>>2]=m;c[H+(k*20|0)+8>>2]=0;c[H+(k*20|0)+12>>2]=1;c[H+(k*20|0)+16>>2]=0;a[H+(k*20|0)+1>>0]=0}else k=Di(j,20,m,0,1)|0;if((m|0)!=0?(G=a[A>>0]|0,(G&255)<8):0){a[A>>0]=G+1<<24>>24;c[d+148+((G&255)<<2)>>2]=m;f=k}else f=k}else f=0;do if(c[r+4>>2]&32|0){k=Yi(d,c[(c[(c[q>>2]|0)+20>>2]|0)+4>>2]|0)|0;if(!k)k=c[(c[d>>2]|0)+8>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;n=c[x>>2]|0;a[n+(l*20|0)>>0]=82;n=n+(l*20|0)+1|0;o=n+19|0;do{a[n>>0]=0;n=n+1|0}while((n|0)<(o|0))}else l=Di(j,82,0,0,0)|0;if(!(a[(c[j>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[u>>2]|0)+-1|0;m=c[x>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(j,m+(l*20|0)|0,k,-2);break}if(k|0){c[m+(l*20|0)+16>>2]=k;a[n>>0]=-2}}}while(0);k=c[s+48>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=D;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=h;c[H+(l*20|0)+8>>2]=i;c[H+(l*20|0)+12>>2]=k;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else Di(j,B,h,i,k)|0;k=c[j>>2]|0;do if(a[k+81>>0]|0){if(c[r+4>>2]&16|0){if(k|0){if(c[k+480>>2]|0){Xd(k,r);break}H=r;if((c[k+304>>2]|0)>>>0<=H>>>0?(c[k+308>>2]|0)>>>0>H>>>0:0){H=k+300|0;c[r>>2]=c[H>>2];c[H>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{H=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}}else{q=c[x>>2]|0;H=(c[u>>2]|0)+-1|0;a[q+(H*20|0)+1>>0]=-8;c[q+(H*20|0)+16>>2]=r}while(0);l=c[u>>2]|0;if((l|0)>0)b[(c[x>>2]|0)+((l+-1|0)*20|0)+2>>1]=p&255;if(f|0){if(!(a[(c[j>>2]|0)+81>>0]|0))k=(c[x>>2]|0)+(((f|0)<0?l+-1|0:f)*20|0)|0;else k=59308;c[k+8>>2]=l}}}while(0);s=c[s+32>>2]|0}while((s|0)!=0);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;return}function ym(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=c[d+8>>2]|0;n=d+19|0;i=a[n>>0]|0;if(!(i<<24>>24)){k=d+44|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l}else{l=i+-1<<24>>24;a[n>>0]=l;l=c[d+148+((l&255)<<2)>>2]|0}k=m+108|0;i=c[k>>2]|0;j=m+112|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=29;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=e;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else i=Di(m,29,e,f,h)|0;if(!(a[(c[m>>2]|0)+81>>0]|0)){o=c[m+104>>2]|0;a[o+(i*20|0)+1>>0]=-3;c[o+(i*20|0)+16>>2]=g}i=c[k>>2]|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=92;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=g;c[o+(i*20|0)+12>>2]=l;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(m,92,h,g,l)|0;i=c[k>>2]|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=-124;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=e;c[o+(i*20|0)+8>>2]=l;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else i=Di(m,132,e,l,h)|0;if(!(a[(c[m>>2]|0)+81>>0]|0)){o=c[m+104>>2]|0;a[o+(i*20|0)+1>>0]=-3;c[o+(i*20|0)+16>>2]=g}i=c[k>>2]|0;if((i|0)>0)b[(c[m+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=16;if(!l)return;i=a[n>>0]|0;if((i&255)>=8)return;a[n>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=l;return}function zm(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;E=d+8|0;J=c[E>>2]|0;F=f+32|0;n=a[F>>0]&1;p=n<<24>>24==0;n=(n^1)&255;l=c[f>>2]|0;C=c[l>>2]|0;H=C+n+j|0;D=f+4|0;I=c[D>>2]|0;o=(k|0)==0;if(o){B=d+44|0;G=c[B>>2]|0;c[B>>2]=G+H;G=G+1|0}else G=h-k|0;k=c[g+16>>2]|0;if(!k)B=c[g+12>>2]|0;else B=k+1|0;z=d+56|0;y=(c[z>>2]|0)+-1|0;c[z>>2]=y;A=f+24|0;c[A>>2]=y;Oj(d,l,G,i,(i|0)==0?1:5);do if(p){k=c[f+8>>2]|0;l=G+C|0;i=J+108|0;m=c[i>>2]|0;if((c[J+112>>2]|0)>(m|0)){c[i>>2]=m+1;y=c[J+104>>2]|0;a[y+(m*20|0)>>0]=120;b[y+(m*20|0)+2>>1]=0;c[y+(m*20|0)+4>>2]=k;c[y+(m*20|0)+8>>2]=l;c[y+(m*20|0)+12>>2]=0;c[y+(m*20|0)+16>>2]=0;a[y+(m*20|0)+1>>0]=0;break}else{Di(J,120,k,l,0)|0;break}}while(0);do if((j|0)>0&o){l=G+C+n|0;k=c[E>>2]|0;i=k+108|0;m=c[i>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[i>>2]=m+1;y=c[k+104>>2]|0;a[y+(m*20|0)>>0]=77;b[y+(m*20|0)+2>>1]=0;c[y+(m*20|0)+4>>2]=h;c[y+(m*20|0)+8>>2]=l;c[y+(m*20|0)+12>>2]=j;c[y+(m*20|0)+16>>2]=0;a[y+(m*20|0)+1>>0]=0;break}else{Di(k,77,h,l,j)|0;break}}while(0);if((I|0)>0){l=c[D>>2]|0;n=c[E>>2]|0;w=d+44|0;o=(c[w>>2]|0)+1|0;c[w>>2]=o;k=c[f+36>>2]|0;if(k|0)Oj(d,c[g>>2]|0,c[k>>2]|0,0,a[k+4>>0]|0);m=l+G|0;k=H-l|0;l=n+108|0;i=c[l>>2]|0;if((c[n+112>>2]|0)>(i|0)){c[l>>2]=i+1;y=c[n+104>>2]|0;a[y+(i*20|0)>>0]=92;b[y+(i*20|0)+2>>1]=0;c[y+(i*20|0)+4>>2]=m;c[y+(i*20|0)+8>>2]=k;c[y+(i*20|0)+12>>2]=o;c[y+(i*20|0)+16>>2]=0;a[y+(i*20|0)+1>>0]=0}else Di(n,92,m,k,o)|0;v=c[w>>2]|0;y=v+1|0;n=c[D>>2]|0;c[w>>2]=n+v;do if(p){k=G+C|0;m=J+108|0;l=c[m>>2]|0;i=J+112|0;if((c[i>>2]|0)>(l|0)){c[m>>2]=l+1;u=c[J+104>>2]|0;a[u+(l*20|0)>>0]=20;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=0;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;v=m;break}else{u=Di(J,20,k,0,0)|0;v=m;break}}else{k=c[f+8>>2]|0;m=J+108|0;l=c[m>>2]|0;i=J+112|0;if((c[i>>2]|0)>(l|0)){c[m>>2]=l+1;u=c[J+104>>2]|0;a[u+(l*20|0)>>0]=115;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=0;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;v=m;break}else{u=Di(J,115,k,0,0)|0;v=m;break}}while(0);k=c[D>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;t=c[J+104>>2]|0;a[t+(l*20|0)>>0]=87;b[t+(l*20|0)+2>>1]=0;c[t+(l*20|0)+4>>2]=y;c[t+(l*20|0)+8>>2]=G;c[t+(l*20|0)+12>>2]=k;c[t+(l*20|0)+16>>2]=0;a[t+(l*20|0)+1>>0]=0}else Di(J,87,y,G,k)|0;k=c[f+20>>2]|0;if((k|0)<0)k=(c[v>>2]|0)+-1|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(k*20|0)|0;else k=59308;if(a[(c[d>>2]|0)+81>>0]|0)return;c[k+8>>2]=H-n;t=k+16|0;n=c[t>>2]|0;h=n+6|0;gw(c[n+16>>2]|0,0,e[h>>1]|0)|0;k=c[J>>2]|0;a:do if(!(a[k+81>>0]|0)){k=(c[v>>2]|0)+-1|0;l=c[J+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(J,l+(k*20|0)|0,n,-9);break}if(n|0){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9}}else if(!((n|0)==0|(c[k+480>>2]|0)!=0)?(s=(c[n>>2]|0)+-1|0,c[n>>2]=s,(s|0)==0):0){k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;s=k+300|0;c[n>>2]=c[s>>2];c[s>>2]=n;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);r=c[f>>2]|0;q=c[d>>2]|0;s=c[r>>2]|0;p=s-I|0;n=p+((e[n+8>>1]|0)-(e[h>>1]|0))|0;h=n*5|0;m=h+20|0;j=q+272|0;b:do if(c[j>>2]|0)if(!(a[q+81>>0]|0))x=62;else k=0;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){l=q+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;x=63;break b}l=q+296|0;k=c[l>>2]|0;if(!k){k=q+292|0;break}else{c[l>>2]=c[k>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;x=63;break b}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;x=62}while(0);if((x|0)==62){k=_d(q,m,0)|0;x=63}if((x|0)==63){do if(!k){l=q+81|0;if((a[l>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[j>>2]=(c[j>>2]|0)+1;l=c[q+236>>2]|0;if(!l)break;c[l+12>>2]=7}}else{c[k+16>>2]=k+20+(n<<2);b[k+6>>1]=p;b[k+8>>1]=n;a[k+4>>0]=a[q+78>>0]|0;c[k+12>>2]=q;c[k>>2]=1;gw(k+24|0,0,h+-4|0)|0}while(0);if((s|0)>(I|0)&(k|0)!=0){h=k+16|0;m=r+4+(I*20|0)|0;n=I;while(1){l=Yi(d,c[m>>2]|0)|0;if(!l)l=c[(c[d>>2]|0)+8>>2]|0;x=n-I|0;c[k+20+(x<<2)>>2]=l;a[(c[h>>2]|0)+x>>0]=a[m+12>>0]|0;n=n+1|0;if((n|0)==(s|0))break;else m=m+20|0}}}c[t>>2]=k;n=c[v>>2]|0;k=n+1|0;if((c[i>>2]|0)>(n|0)){c[v>>2]=k;x=c[J+104>>2]|0;a[x+(n*20|0)>>0]=16;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=k;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=k;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0}else Di(J,16,k,0,k)|0;m=(c[z>>2]|0)+-1|0;c[z>>2]=m;c[f+16>>2]=m;l=(c[w>>2]|0)+1|0;c[w>>2]=l;c[f+12>>2]=l;k=c[v>>2]|0;if((c[i>>2]|0)>(k|0)){c[v>>2]=k+1;z=c[J+104>>2]|0;a[z+(k*20|0)>>0]=12;b[z+(k*20|0)+2>>1]=0;c[z+(k*20|0)+4>>2]=l;c[z+(k*20|0)+8>>2]=m;c[z+(k*20|0)+12>>2]=0;c[z+(k*20|0)+16>>2]=0;a[z+(k*20|0)+1>>0]=0}else Di(J,12,l,m,0)|0;k=c[f+8>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;z=c[J+104>>2]|0;a[z+(l*20|0)>>0]=-118;b[z+(l*20|0)+2>>1]=0;c[z+(l*20|0)+4>>2]=k;c[z+(l*20|0)+8>>2]=0;c[z+(l*20|0)+12>>2]=0;c[z+(l*20|0)+16>>2]=0;a[z+(l*20|0)+1>>0]=0}else Di(J,138,k,0,0)|0;do if(B|0){k=c[A>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;A=c[J+104>>2]|0;a[A+(l*20|0)>>0]=20;b[A+(l*20|0)+2>>1]=0;c[A+(l*20|0)+4>>2]=B;c[A+(l*20|0)+8>>2]=k;c[A+(l*20|0)+12>>2]=0;c[A+(l*20|0)+16>>2]=0;a[A+(l*20|0)+1>>0]=0;break}else{Di(J,20,B,k,0)|0;break}}while(0);l=c[v>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((u|0)<0?l+-1|0:u)*20|0)|0;else k=59308;c[k+8>>2]=l;l=c[D>>2]|0;k=c[E>>2]|0;i=k+108|0;m=c[i>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[i>>2]=m+1;A=c[k+104>>2]|0;a[A+(m*20|0)>>0]=77;b[A+(m*20|0)+2>>1]=0;c[A+(m*20|0)+4>>2]=G;c[A+(m*20|0)+8>>2]=y;c[A+(m*20|0)+12>>2]=l;c[A+(m*20|0)+16>>2]=0;a[A+(m*20|0)+1>>0]=0}else Di(k,77,G,y,l)|0;l=c[v>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((n|0)<0?l+-1|0:n)*20|0)|0;else k=59308;c[k+8>>2]=l}else o=0;do if(B){m=c[f+8>>2]|0;i=J+108|0;k=c[i>>2]|0;l=k+4|0;n=J+112|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;A=c[J+104>>2]|0;a[A+(k*20|0)>>0]=48;b[A+(k*20|0)+2>>1]=0;c[A+(k*20|0)+4>>2]=B;c[A+(k*20|0)+8>>2]=l;c[A+(k*20|0)+12>>2]=0;c[A+(k*20|0)+16>>2]=0;a[A+(k*20|0)+1>>0]=0}else Di(J,48,B,l,0)|0;k=c[i>>2]|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;B=c[J+104>>2]|0;a[B+(k*20|0)>>0]=32;b[B+(k*20|0)+2>>1]=0;c[B+(k*20|0)+4>>2]=m;c[B+(k*20|0)+8>>2]=0;c[B+(k*20|0)+12>>2]=0;c[B+(k*20|0)+16>>2]=0;a[B+(k*20|0)+1>>0]=0}else Di(J,32,m,0,0)|0;l=G+I|0;k=c[i>>2]|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;B=c[J+104>>2]|0;a[B+(k*20|0)>>0]=37;b[B+(k*20|0)+2>>1]=0;c[B+(k*20|0)+4>>2]=m;c[B+(k*20|0)+8>>2]=0;c[B+(k*20|0)+12>>2]=l;c[B+(k*20|0)+16>>2]=0;a[B+(k*20|0)+1>>0]=0}else k=Di(J,37,m,0,l)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){B=c[J+104>>2]|0;a[B+(k*20|0)+1>>0]=-3;c[B+(k*20|0)+16>>2]=C-I}l=c[i>>2]|0;if((c[n>>2]|0)>(l|0)){c[i>>2]=l+1;C=c[J+104>>2]|0;a[C+(l*20|0)>>0]=123;b[C+(l*20|0)+2>>1]=0;c[C+(l*20|0)+4>>2]=m;c[C+(l*20|0)+8>>2]=0;c[C+(l*20|0)+12>>2]=0;c[C+(l*20|0)+16>>2]=0;a[C+(l*20|0)+1>>0]=0;break}else{Di(J,123,m,0,0)|0;break}}else k=0;while(0);do if(!o){i=c[D>>2]|0;h=c[E>>2]|0;l=d+44|0;o=(c[l>>2]|0)+1|0;c[l>>2]=o;l=c[f+36>>2]|0;if(l|0)Oj(d,c[g>>2]|0,c[l>>2]|0,0,a[l+4>>0]|0);n=i+G|0;l=H-i|0;i=h+108|0;m=c[i>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[i>>2]=m+1;g=c[h+104>>2]|0;a[g+(m*20|0)>>0]=92;b[g+(m*20|0)+2>>1]=0;c[g+(m*20|0)+4>>2]=n;c[g+(m*20|0)+8>>2]=l;c[g+(m*20|0)+12>>2]=o;c[g+(m*20|0)+16>>2]=0;a[g+(m*20|0)+1>>0]=0;break}else{Di(h,92,n,l,o)|0;break}}while(0);m=132-(a[F>>0]&1)|0;n=c[f+8>>2]|0;i=G+I|0;h=J+108|0;l=c[h>>2]|0;if((c[J+112>>2]|0)>(l|0)){c[h>>2]=l+1;G=c[J+104>>2]|0;a[G+(l*20|0)>>0]=m;b[G+(l*20|0)+2>>1]=0;c[G+(l*20|0)+4>>2]=n;c[G+(l*20|0)+8>>2]=o;c[G+(l*20|0)+12>>2]=i;c[G+(l*20|0)+16>>2]=0;a[G+(l*20|0)+1>>0]=0}else l=Di(J,m,n,o,i)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){G=c[J+104>>2]|0;a[G+(l*20|0)+1>>0]=-3;c[G+(l*20|0)+16>>2]=H-I}if(!k)return;l=c[f+28>>2]|0;if(!l){l=c[h>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;return}if((k|0)<0)k=(c[h>>2]|0)+-1|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(k*20|0)|0;else k=59308;c[k+8>>2]=l;return}function Am(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+64|0;l=m;if((a[d>>0]|0)==44){l=0;Ra=m;return l|0}e=c[b+24>>2]|0;j=c[b>>2]|0;i=c[e+40>>2]|0;k=l+20|0;a[k>>0]=1;c[l+4>>2]=149;c[l+8>>2]=0;c[l+24>>2]=i;c[l>>2]=j;_j(l,d)|0;if(!(a[k>>0]|0)){l=1;Ra=m;return l|0}j=c[c[b>>2]>>2]|0;k=oj(j,147,17144,0)|0;if(!k){l=1;Ra=m;return l|0}e=e+36|0;f=c[e>>2]|0;g=l;h=k;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=k;h=d;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=d;h=l;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=Xk(j,f,k)|0;c[e>>2]=l;a[b+20>>0]=1;l=1;Ra=m;return l|0}function Bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=c[b+24>>2]|0;a:do if((c[h>>2]|0)>0){g=0;while(1){e=c[h+4+(g*20|0)>>2]|0;if((bk(0,d,e,-1)|0)<2){f=c[b>>2]|0;e=Yi(f,e)|0;if(!e){e=c[(c[f>>2]|0)+8>>2]|0;if(!e){e=1;f=12;break}}if((c[e+12>>2]|0)==78?(c[e+8>>2]|0)==0:0){e=1;f=12;break}}g=g+1|0;if((g|0)>=(c[h>>2]|0))break a}if((f|0)==12)return e|0}while(0);if(!(c[d+4>>2]&2048)){d=Yj(b,d)|0;return d|0}else{a[b+20>>0]=0;d=2;return d|0}return 0}function Cm(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=c[f+24>>2]|0;s=c[h>>2]|0;j=c[h+4>>2]|0;t=c[h+8>>2]|0;switch(a[g>>0]|0){case -94:case -92:{if(!j){t=1;return t|0}i=c[j>>2]|0;if((i|0)<=0){t=1;return t|0}o=g+28|0;l=c[o>>2]|0;h=0;f=j+8|0;while(1){if((l|0)==(c[f+40>>2]|0))break;h=h+1|0;if((h|0)>=(i|0)){f=1;r=80;break}else f=f+72|0}if((r|0)==80)return f|0;j=t+28|0;n=t+32|0;p=c[n>>2]|0;a:do if((p|0)>0){k=c[j>>2]|0;i=g+32|0;h=k;f=0;while(1){if((c[h+4>>2]|0)==(l|0)?(c[h+8>>2]|0)==(b[i>>1]|0):0)break a;f=f+1|0;if((f|0)>=(p|0))break;else h=h+24|0}m=j;f=k;r=13}else{m=j;f=c[j>>2]|0;r=13}while(0);b:do if((r|0)==13){l=c[s>>2]|0;h=((p|0)<0)<<31>>31;k=Sv(p|0,h|0,-1,-1)|0;c:do if((k&p|0)==0&((L()|0)&h|0)==0){i=(p|0)==0;j=Yv(p|0,h|0,48,0)|0;k=L()|0;j=i?24:j;k=i?0:k;d:do if(!f){if(c[l+272>>2]|0){if(a[l+81>>0]|0){f=0;break}}else{do if(!(k>>>0>0|((k|0)==0?j>>>0>(e[l+276>>1]|0)>>>0:0))){i=l+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=l+284|0;c[r>>2]=(c[r>>2]|0)+1;r=31;break d}i=l+296|0;h=c[i>>2]|0;if(!h){h=l+292|0;break}else{c[i>>2]=c[h>>2];r=l+284|0;c[r>>2]=(c[r>>2]|0)+1;r=31;break d}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,j,k)|0;r=31}else{r=f;if((c[l+304>>2]|0)>>>0<=r>>>0?(c[l+308>>2]|0)>>>0>r>>>0:0){if(!(k>>>0>0|((k|0)==0?j>>>0>(e[l+276>>1]|0)>>>0:0)))break c;h=Zd(l,f,j,k)|0;r=31;break}h=Zd(l,f,j,k)|0;r=31}while(0);if((r|0)==31)if(h){f=h;break}c[m>>2]=f;f=-1;break b}while(0);h=f+(p*24|0)|0;j=h+24|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));c[n>>2]=(c[n>>2]|0)+1;c[m>>2]=f;if((p|0)>-1){c[f+(p*24|0)>>2]=c[g+44>>2];j=c[o>>2]|0;c[f+(p*24|0)+4>>2]=j;k=b[g+32>>1]|0;c[f+(p*24|0)+8>>2]=k<<16>>16;s=s+44|0;i=(c[s>>2]|0)+1|0;c[s>>2]=i;c[f+(p*24|0)+16>>2]=i;i=f+(p*24|0)+12|0;c[i>>2]=-1;c[f+(p*24|0)+20>>2]=g;f=c[t+24>>2]|0;e:do if(f|0?(q=c[f>>2]|0,(q|0)>0):0){h=f+4|0;f=0;while(1){s=c[h>>2]|0;if(((a[s>>0]|0)==-94?(c[s+28>>2]|0)==(j|0):0)?(b[s+32>>1]|0)==k<<16>>16:0)break;f=f+1|0;if((f|0)<(q|0))h=h+20|0;else break e}c[i>>2]=f;f=p;break b}while(0);s=t+12|0;f=c[s>>2]|0;c[s>>2]=f+1;c[i>>2]=f;f=p}else f=p}while(0);c[g+40>>2]=t;a[g>>0]=-92;b[g+34>>1]=f;t=1;return t|0}case -93:{if(b[h+24>>1]&8){t=0;return t|0}if((c[f+16>>2]|0)!=(d[g+38>>0]|0)){t=0;return t|0}p=t+40|0;o=t+44|0;h=c[o>>2]|0;f:do if((h|0)>0){h=c[p>>2]|0;f=0;while(1){if(!(bk(0,c[h>>2]|0,g,-1)|0))break;f=f+1|0;i=c[o>>2]|0;if((f|0)<(i|0))h=h+16|0;else break f}i=c[o>>2]|0}else{f=0;i=h}while(0);g:do if((f|0)>=(i|0)){m=c[s>>2]|0;n=a[m+78>>0]|0;f=c[p>>2]|0;h=((i|0)<0)<<31>>31;q=Sv(i|0,h|0,-1,-1)|0;h:do if((q&i|0)==0&((L()|0)&h|0)==0){q=(i|0)==0;k=cw(i|0,h|0,5)|0;l=L()|0;k=q?16:k;l=q?0:l;i:do if(!f){if(c[m+272>>2]|0){if(a[m+81>>0]|0){f=0;break}}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[m+276>>1]|0)>>>0:0))){j=m+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=71;break i}j=m+296|0;h=c[j>>2]|0;if(!h){h=m+292|0;break}else{c[j>>2]=c[h>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=71;break i}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(m,k,l)|0;r=71}else{r=f;if((c[m+304>>2]|0)>>>0<=r>>>0?(c[m+308>>2]|0)>>>0>r>>>0:0){if(!(l>>>0>0|((l|0)==0?k>>>0>(e[m+276>>1]|0)>>>0:0)))break h;h=Zd(m,f,k,l)|0;r=71;break}h=Zd(m,f,k,l)|0;r=71}while(0);if((r|0)==71)if(h){f=h;break}c[p>>2]=f;f=-1;break g}while(0);h=f+(i<<4)|0;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));c[o>>2]=(c[o>>2]|0)+1;c[p>>2]=f;if((i|0)>-1){c[f+(i<<4)>>2]=g;r=s+44|0;h=(c[r>>2]|0)+1|0;c[r>>2]=h;c[f+(i<<4)+8>>2]=h;h=c[g+20>>2]|0;if(!h)h=0;else h=c[h>>2]|0;r=Jd(c[s>>2]|0,c[g+8>>2]|0,h,n,0)|0;c[f+(i<<4)+4>>2]=r;if(!(c[g+4>>2]&2)){c[f+(i<<4)+12>>2]=-1;f=i;break}else{r=s+40|0;s=c[r>>2]|0;c[r>>2]=s+1;c[f+(i<<4)+12>>2]=s;f=i;break}}else f=i}while(0);b[g+34>>1]=f;c[g+40>>2]=t;t=1;return t|0}default:{t=0;return t|0}}return 0}function Dm(a,b){a=a|0;b=b|0;b=a+16|0;c[b>>2]=(c[b>>2]|0)+1;return 0}function Em(a,b){a=a|0;b=b|0;b=a+16|0;c[b>>2]=(c[b>>2]|0)+-1;return}function Fm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l+8|0;i=l;do if(!(c[d+56>>2]|0)){f=c[d+36>>2]|0;if(f&1025|0){g=c[b>>2]|0;h=c[g+32>>2]|0;if(f&1|0){if((h&268435457|0)==1&0==0)break;if(!(a[b+18>>0]|0)){k=12;break}else break}if((!((h&268435456|0)==0&0==0)?(c[g+352>>2]|0)==0:0)?(c[g+180>>2]|0)==0:0)k=12}}else{g=c[b>>2]|0;f=d+64|0;while(1){f=c[f>>2]|0;if((c[f>>2]|0)==(g|0))break;else f=f+24|0}if(!(c[(c[c[f+4>>2]>>2]|0)+52>>2]|0))k=12}while(0);if((k|0)==12){c[i>>2]=c[d>>2];cd(b,44627,i);k=1;Ra=l;return k|0}if(e|0){k=0;Ra=l;return k|0}if(!(c[d+12>>2]|0)){k=0;Ra=l;return k|0}c[j>>2]=c[d>>2];cd(b,44656,j);k=1;Ra=l;return k|0}function Gm(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+32|0;o=q;p=c[b>>2]|0;j=c[d+72>>2]|0;if(!j)k=-1e6;else{i=c[p+16>>2]|0;h=0;while(1)if((c[i+(h<<4)+12>>2]|0)==(j|0)){k=h;break}else h=h+1|0}if(!f)m=0;else m=dk(p,f,0,0)|0;n=pj(b,0,0,0)|0;if(!n)h=mj(b,0,0,m,0,0,0,131072,0)|0;else{f=c[d>>2]|0;a:do if(!f)h=0;else{d=(Eu(f)|0)+1|0;b:do if(!p){j=Sv(d|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){h=0;break a}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](d)|0;l=32;break}h=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=r>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){h=0;break a}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){h=0;break a}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<d>>>0:0))){i=p+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];l=p+284|0;c[l>>2]=(c[l>>2]|0)+1;l=32;break b}i=p+296|0;h=c[i>>2]|0;if(!h){h=p+292|0;break}else{c[i>>2]=c[h>>2];l=p+284|0;c[l>>2]=(c[l>>2]|0)+1;l=32;break b}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(p,d,0)|0;l=32}while(0);if((l|0)==32)if(!h){h=0;break}ew(h|0,f|0,d|0)|0}while(0);c[n+16>>2]=h;j=c[(c[p+16>>2]|0)+(k<<4)>>2]|0;c:do if(j){f=(Eu(j)|0)+1|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))l=45;else{h=0;break c}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<f>>>0:0))){i=p+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=p+284|0;c[r>>2]=(c[r>>2]|0)+1;break d}i=p+296|0;h=c[i>>2]|0;if(!h){h=p+292|0;break}else{c[i>>2]=c[h>>2];r=p+284|0;c[r>>2]=(c[r>>2]|0)+1;break d}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;l=45}while(0);if((l|0)==45)h=_d(p,f,0)|0;if(h)ew(h|0,j|0,f|0)|0;else h=0}else h=0;while(0);c[n+12>>2]=h;h=mj(b,0,n,m,0,0,0,131072,0)|0}a[o>>0]=12;c[o+4>>2]=g;c[o+16>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;kj(b,h,o)|0;if(!h){Ra=q;return}pi(p,h,1);Ra=q;return}function Hm(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;if(c[g+56>>2]|0){f=0;return f|0}q=c[f>>2]|0;o=c[g+72>>2]|0;if(!o)y=-1e6;else{p=c[q+16>>2]|0;n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0)){y=n;break}else n=n+1|0}z=f+8|0;n=c[z>>2]|0;a:do if(!n){if((c[f+116>>2]|0)==0?(b[q+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))r=19;else{n=0;break a}else{do if((e[q+276>>1]|0)>=224){o=q+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;break b}o=q+296|0;n=c[o>>2]|0;if(!n){n=q+292|0;break}else{c[o>>2]=c[n>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;break b}}else n=q+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;r=19}while(0);if((r|0)==19)n=_d(q,224,0)|0;if(!n)n=0;else{o=n+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[n>>2]=q;o=q+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=n;c[n+8>>2]=p;c[n+4>>2]=0;c[o>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[z>>2]=n;Di(n,61,0,1,0)|0}}while(0);if((j|0)<0)p=c[f+40>>2]|0;else p=j;o=p+1|0;q=(l|0)!=0;if(q)c[l>>2]=p;x=g+36|0;do if(!(c[x>>2]&32)){if(k|0?(a[k>>0]|0)==0:0){r=32;break}Gj(f,p,y,g,h)}else r=32;while(0);if((r|0)==32)Hj(f,y,c[g+28>>2]|0,(h|0)==109&1,c[g>>2]|0);if(m|0)c[m>>2]=o;p=c[g+8>>2]|0;if(!p)p=0;else{m=q^1;s=(k|0)==0;t=n+108|0;u=n+112|0;v=n+104|0;w=h&255;r=p;p=0;while(1){g=o+1|0;j=r+55|0;if(((d[j>>0]|d[j+1>>0]<<8)&3)==2){q=(c[x>>2]&32|0)==0;if(q|m)j=q?i:0;else{c[l>>2]=o;j=0}}else j=i;if(!(!s?!(a[k+(p+1)>>0]|0):0)){q=c[r+44>>2]|0;i=c[t>>2]|0;if((c[u>>2]|0)>(i|0)){c[t>>2]=i+1;A=c[v>>2]|0;a[A+(i*20|0)>>0]=w;b[A+(i*20|0)+2>>1]=0;c[A+(i*20|0)+4>>2]=o;c[A+(i*20|0)+8>>2]=q;c[A+(i*20|0)+12>>2]=y;c[A+(i*20|0)+16>>2]=0;a[A+(i*20|0)+1>>0]=0}else Di(n,h,o,q,y)|0;o=c[z>>2]|0;i=Ij(f,r)|0;c:do if(i|0){q=c[o>>2]|0;if(!(a[q+81>>0]|0)){q=c[o+104>>2]|0;A=(c[o+108>>2]|0)+-1|0;a[q+(A*20|0)+1>>0]=-9;c[q+(A*20|0)+16>>2]=i;break}if((c[q+480>>2]|0)==0?(A=(c[i>>2]|0)+-1|0,c[i>>2]=A,(A|0)==0):0){o=c[i+12>>2]|0;do if(o|0){if(c[o+480>>2]|0){Xd(o,i);break c}q=i;if((c[o+304>>2]|0)>>>0>q>>>0)break;if((c[o+308>>2]|0)>>>0<=q>>>0)break;A=o+300|0;c[i>>2]=c[A>>2];c[A>>2]=i;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{A=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);o=c[t>>2]|0;if((o|0)>0)b[(c[v>>2]|0)+((o+-1|0)*20|0)+2>>1]=j&255}p=p+1|0;r=c[r+20>>2]|0;if(!r){o=g;break}else{i=j;o=g}}}n=f+40|0;if((o|0)<=(c[n>>2]|0)){A=p;return A|0}c[n>>2]=o;A=p;return A|0}function Im(f,g,h,i,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0;N=f+8|0;Q=c[N>>2]|0;I=f+56|0;P=c[I>>2]|0;O=P+-1|0;c[I>>2]=O;I=(c[g+36>>2]&32|0)==0?31:28;J=o<<24>>24==0;if(J){r=Q+108|0;q=c[r>>2]|0;if((c[Q+112>>2]|0)>(q|0)){c[r>>2]=q+1;M=c[Q+104>>2]|0;a[M+(q*20|0)>>0]=I;b[M+(q*20|0)+2>>1]=0;c[M+(q*20|0)+4>>2]=i;c[M+(q*20|0)+8>>2]=O;c[M+(q*20|0)+12>>2]=k;c[M+(q*20|0)+16>>2]=0;a[M+(q*20|0)+1>>0]=0}else q=Di(Q,I&255,i,O,k)|0;if(!(a[(c[Q>>2]|0)+81>>0]|0)){M=c[Q+104>>2]|0;a[M+(q*20|0)+1>>0]=-3;c[M+(q*20|0)+16>>2]=l<<16>>16}}if(!(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)){w=c[g>>2]|0;t=c[g+72>>2]|0;u=c[t+68>>2]|0;if(!u){r=t+60|0;q=t+64|0}else{r=a[w>>0]|0;if(!(r<<24>>24))q=0;else{q=0;s=w;do{s=s+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[s>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[t+56>>2]|0)>>>0)|0;r=u+(q<<3)|0;q=u+(q<<3)+4|0}r=c[r>>2]|0;a:do if(!r)q=59292;else{v=d[208+(d[w>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;t=c[q+12>>2]|0;M=a[t>>0]|0;s=(d[208+(M&255)>>0]|0)-v|0;if(!(M<<24>>24==0|(s|0)!=0)){u=w;do{t=t+1|0;u=u+1|0;M=a[t>>0]|0;s=(d[208+(M&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(s|0)!=0))}if(!s)break a;if(!r){q=59292;break}}}while(0);if(!(c[q+8>>2]|0)){q=(c[g+16>>2]|0)!=0&1;M=23}else M=24}else{q=0;M=23}if((M|0)==23)if((h|0)!=0|(q|0)!=0)M=24;else F=0;if((M|0)==24){H=n&255;u=(h|0)==0;if(u)q=0;else{t=f+116|0;q=0;s=h;do{do if((a[s+8>>0]|0)==121?(a[s+9>>0]&3)!=0:0){r=c[t>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;b:do if(!r)M=33;else while(1){if((c[r>>2]|0)==(s|0)?(c[r+12>>2]|0)==(H|0):0)break b;r=c[r+4>>2]|0;if(!r){M=33;break}}while(0);if((M|0)==33){M=0;r=Nm(f,s,g,H)|0;if(!r)break}q=c[r+16>>2]|q}while(0);s=c[s+32>>2]|0}while((s|0)!=0)}s=Km(f,g)|0|q;C=f+44|0;F=(c[C>>2]|0)+1|0;t=g+42|0;c[C>>2]=F+(b[t>>1]|0);D=Q+108|0;q=c[D>>2]|0;E=Q+112|0;if((c[E>>2]|0)>(q|0)){c[D>>2]=q+1;B=c[Q+104>>2]|0;a[B+(q*20|0)>>0]=78;b[B+(q*20|0)+2>>1]=0;c[B+(q*20|0)+4>>2]=k;c[B+(q*20|0)+8>>2]=F;c[B+(q*20|0)+12>>2]=0;c[B+(q*20|0)+16>>2]=0;a[B+(q*20|0)+1>>0]=0}else Di(Q,78,k,F,0)|0;q=b[t>>1]|0;c:do if(q<<16>>16>0){if((s|0)==-1){q=0;while(1){B=q;q=q+1|0;Vj(Q,g,i,B,q+F|0);if((q|0)>=(b[t>>1]|0))break c}}r=0;do{if(r>>>0<32?(1<<r&s|0)!=0:0){Vj(Q,g,i,r,r+1+F|0);q=b[t>>1]|0}r=r+1|0}while((r|0)<(q<<16>>16|0))}while(0);A=c[D>>2]|0;if(u)q=A;else{y=f+116|0;z=f+23|0;x=h;do{do if((a[x+8>>0]|0)==121?(a[x+9>>0]|0)==1:0){q=c[N>>2]|0;d:do if(!q){s=c[f>>2]|0;if((c[y>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[z>>0]=1;e:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))M=66;else{q=0;break d}else{do if((e[s+276>>1]|0)>=224){r=s+300|0;q=c[r>>2]|0;if(q|0){c[r>>2]=c[q>>2];B=s+284|0;c[B>>2]=(c[B>>2]|0)+1;break e}r=s+296|0;q=c[r>>2]|0;if(!q){q=s+292|0;break}else{c[r>>2]=c[q>>2];B=s+284|0;c[B>>2]=(c[B>>2]|0)+1;break e}}else q=s+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;M=66}while(0);if((M|0)==66){M=0;q=_d(s,224,0)|0}if(!q)q=0;else{v=q+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[q>>2]=s;r=s+4|0;s=c[r>>2]|0;if(s|0)c[s+4>>2]=q;c[q+8>>2]=s;c[q+4>>2]=0;c[r>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[N>>2]=q;Di(q,61,0,1,0)|0}}while(0);r=c[y>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;f:do if(!r)M=76;else while(1){if((c[r>>2]|0)==(x|0)?(c[r+12>>2]|0)==(H|0):0)break f;r=c[r+4>>2]|0;if(!r){M=76;break}}while(0);if((M|0)==76){M=0;r=Nm(f,x,g,H)|0;if(!r)break}if(!(c[x>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}s=(c[C>>2]|0)+1|0;c[C>>2]=s;u=c[r+8>>2]|0;v=q+108|0;r=c[v>>2]|0;if((c[q+112>>2]|0)>(r|0)){c[v>>2]=r+1;B=c[q+104>>2]|0;a[B+(r*20|0)>>0]=45;b[B+(r*20|0)+2>>1]=0;c[B+(r*20|0)+4>>2]=F;c[B+(r*20|0)+8>>2]=O;c[B+(r*20|0)+12>>2]=s;c[B+(r*20|0)+16>>2]=0;a[B+(r*20|0)+1>>0]=0}else r=Di(q,45,F,O,s)|0;do if(!(a[(c[q>>2]|0)+81>>0]|0)){if((r|0)<0)r=(c[v>>2]|0)+-1|0;s=c[q+104>>2]|0;t=s+(r*20|0)+1|0;if(a[t>>0]|0){Ei(q,s+(r*20|0)|0,u,-4);break}if(!u)break;c[s+(r*20|0)+16>>2]=u;a[t>>0]=-4}while(0);r=c[v>>2]|0;if((r|0)>0)b[(c[q+104>>2]|0)+((r+-1|0)*20|0)+2>>1]=w}while(0);x=c[x+32>>2]|0}while((x|0)!=0);q=c[D>>2]|0}if((A|0)<(q|0)){if((c[E>>2]|0)>(q|0)){c[D>>2]=q+1;H=c[Q+104>>2]|0;a[H+(q*20|0)>>0]=I;b[H+(q*20|0)+2>>1]=0;c[H+(q*20|0)+4>>2]=i;c[H+(q*20|0)+8>>2]=O;c[H+(q*20|0)+12>>2]=k;c[H+(q*20|0)+16>>2]=0;a[H+(q*20|0)+1>>0]=0}else q=Di(Q,I&255,i,O,k)|0;if(!(a[(c[Q>>2]|0)+81>>0]|0)){k=c[Q+104>>2]|0;a[k+(q*20|0)+1>>0]=-3;c[k+(q*20|0)+16>>2]=l<<16>>16;q=-1}else q=-1}else q=p;Lm(f,g,F,0,0,0);p=q}if(!(c[g+12>>2]|0)){Mm(f,g,i,j,0,p);q=m<<24>>24!=0&1;t=Q+108|0;r=c[t>>2]|0;u=Q+112|0;if((c[u>>2]|0)>(r|0)){c[t>>2]=r+1;m=c[Q+104>>2]|0;a[m+(r*20|0)>>0]=123;b[m+(r*20|0)+2>>1]=0;c[m+(r*20|0)+4>>2]=i;c[m+(r*20|0)+8>>2]=q;c[m+(r*20|0)+12>>2]=0;c[m+(r*20|0)+16>>2]=0;a[m+(r*20|0)+1>>0]=0}else Di(Q,123,i,q,0)|0;if(a[f+18>>0]|0){r=c[g>>2]|0;if(r|0){m=a[r>>0]|0;q=(d[208+(m&255)>>0]|0)+-115|0;if(!(m<<24>>24==0|(q|0)!=0)){s=35174;do{r=r+1|0;s=s+1|0;m=a[r>>0]|0;q=(d[208+(m&255)>>0]|0)-(d[208+(d[s>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(q|0)!=0))}if(!q)M=110}}else M=110;if((M|0)==110?(a[(c[Q>>2]|0)+81>>0]|0)==0:0){j=c[Q+104>>2]|0;m=(c[t>>2]|0)+-1|0;a[j+(m*20|0)+1>>0]=-6;c[j+(m*20|0)+16>>2]=g}if(!J?(K=c[t>>2]|0,(K|0)>0):0)b[(c[Q+104>>2]|0)+((K+-1|0)*20|0)+2>>1]=4;do if(!((p|0)<0|(p|0)==(i|0))){q=c[t>>2]|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;K=c[Q+104>>2]|0;a[K+(q*20|0)>>0]=123;b[K+(q*20|0)+2>>1]=0;c[K+(q*20|0)+4>>2]=p;c[K+(q*20|0)+8>>2]=0;c[K+(q*20|0)+12>>2]=0;c[K+(q*20|0)+16>>2]=0;a[K+(q*20|0)+1>>0]=0;break}else{Di(Q,123,p,0,0)|0;break}}while(0);q=c[t>>2]|0;if((q|0)>0)b[(c[Q+104>>2]|0)+((q+-1|0)*20|0)+2>>1]=o<<24>>24==2?2:0}if(!(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)){v=c[g>>2]|0;t=c[g+72>>2]|0;u=c[t+68>>2]|0;if(!u){r=t+60|0;q=t+64|0}else{r=a[v>>0]|0;if(!(r<<24>>24))q=0;else{q=0;s=v;do{s=s+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[s>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[t+56>>2]|0)>>>0)|0;r=u+(q<<3)|0;q=u+(q<<3)+4|0}r=c[r>>2]|0;g:do if(!r)q=59292;else{p=d[208+(d[v>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;t=c[q+12>>2]|0;o=a[t>>0]|0;s=(d[208+(o&255)>>0]|0)-p|0;if(!(o<<24>>24==0|(s|0)!=0)){u=v;do{t=t+1|0;u=u+1|0;o=a[t>>0]|0;s=(d[208+(o&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(s|0)!=0))}if(!s)break g;if(!r){q=59292;break}}}while(0);q=c[q+8>>2]|0;if(q|0){x=f+116|0;y=f+23|0;z=f+44|0;do{u=Rm(f,g,q,0)|0;do if(u|0){r=c[N>>2]|0;h:do if(!r){t=c[f>>2]|0;if((c[x>>2]|0)==0?(b[t+76>>1]&8)==0:0)a[y>>0]=1;i:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))M=152;else{r=0;break h}else{do if((e[t+276>>1]|0)>=224){s=t+300|0;r=c[s>>2]|0;if(r|0){c[s>>2]=c[r>>2];o=t+284|0;c[o>>2]=(c[o>>2]|0)+1;break i}s=t+296|0;r=c[s>>2]|0;if(!r){r=t+292|0;break}else{c[s>>2]=c[r>>2];o=t+284|0;c[o>>2]=(c[o>>2]|0)+1;break i}}else r=t+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1;M=152}while(0);if((M|0)==152){M=0;r=_d(t,224,0)|0}if(!r)r=0;else{v=r+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[r>>2]=t;s=t+4|0;t=c[s>>2]|0;if(t|0)c[t+4>>2]=r;c[r+8>>2]=t;c[r+4>>2]=0;c[s>>2]=r;c[r+20>>2]=381479589;c[r+12>>2]=f;c[N>>2]=r;Di(r,61,0,1,0)|0}}while(0);s=c[x>>2]|0;s=c[((s|0)==0?f:s)+260>>2]|0;j:do if(!s)M=162;else while(1){if((c[s>>2]|0)==(u|0)?(c[s+12>>2]|0)==2:0)break j;s=c[s+4>>2]|0;if(!s){M=162;break}}while(0);if((M|0)==162){M=0;s=Nm(f,u,g,2)|0;if(!s)break}if(!(c[u>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}t=(c[z>>2]|0)+1|0;c[z>>2]=t;p=c[s+8>>2]|0;v=r+108|0;s=c[v>>2]|0;if((c[r+112>>2]|0)>(s|0)){c[v>>2]=s+1;o=c[r+104>>2]|0;a[o+(s*20|0)>>0]=45;b[o+(s*20|0)+2>>1]=0;c[o+(s*20|0)+4>>2]=F;c[o+(s*20|0)+8>>2]=0;c[o+(s*20|0)+12>>2]=t;c[o+(s*20|0)+16>>2]=0;a[o+(s*20|0)+1>>0]=0}else s=Di(r,45,F,0,t)|0;do if(!(a[(c[r>>2]|0)+81>>0]|0)){if((s|0)<0)s=(c[v>>2]|0)+-1|0;t=c[r+104>>2]|0;u=t+(s*20|0)+1|0;if(a[u>>0]|0){Ei(r,t+(s*20|0)|0,p,-4);break}if(p|0){c[t+(s*20|0)+16>>2]=p;a[u>>0]=-4}}while(0);s=c[v>>2]|0;if((s|0)>0)b[(c[r+104>>2]|0)+((s+-1|0)*20|0)+2>>1]=w}while(0);q=c[q+12>>2]|0}while((q|0)!=0)}}x=n&255;if(h|0){y=f+116|0;z=f+23|0;A=f+44|0;w=h;do{do if((a[w+8>>0]|0)==121?(a[w+9>>0]|0)==2:0){q=c[N>>2]|0;k:do if(!q){s=c[f>>2]|0;if((c[y>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[z>>0]=1;l:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))M=196;else{q=0;break k}else{do if((e[s+276>>1]|0)>=224){r=s+300|0;q=c[r>>2]|0;if(q|0){c[r>>2]=c[q>>2];h=s+284|0;c[h>>2]=(c[h>>2]|0)+1;break l}r=s+296|0;q=c[r>>2]|0;if(!q){q=s+292|0;break}else{c[r>>2]=c[q>>2];h=s+284|0;c[h>>2]=(c[h>>2]|0)+1;break l}}else q=s+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;M=196}while(0);if((M|0)==196){M=0;q=_d(s,224,0)|0}if(!q)q=0;else{v=q+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[q>>2]=s;r=s+4|0;s=c[r>>2]|0;if(s|0)c[s+4>>2]=q;c[q+8>>2]=s;c[q+4>>2]=0;c[r>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[N>>2]=q;Di(q,61,0,1,0)|0}}while(0);r=c[y>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;m:do if(!r)M=206;else while(1){if((c[r>>2]|0)==(w|0)?(c[r+12>>2]|0)==(x|0):0)break m;r=c[r+4>>2]|0;if(!r){M=206;break}}while(0);if((M|0)==206){M=0;r=Nm(f,w,g,x)|0;if(!r)break}if(!(c[w>>2]|0))v=0;else{v=(c[f>>2]|0)+32|0;v=bw(c[v>>2]|0,c[v+4>>2]|0,13)|0;L()|0;v=v&1^1}s=(c[A>>2]|0)+1|0;c[A>>2]=s;u=c[r+8>>2]|0;p=q+108|0;r=c[p>>2]|0;if((c[q+112>>2]|0)>(r|0)){c[p>>2]=r+1;h=c[q+104>>2]|0;a[h+(r*20|0)>>0]=45;b[h+(r*20|0)+2>>1]=0;c[h+(r*20|0)+4>>2]=F;c[h+(r*20|0)+8>>2]=O;c[h+(r*20|0)+12>>2]=s;c[h+(r*20|0)+16>>2]=0;a[h+(r*20|0)+1>>0]=0}else r=Di(q,45,F,O,s)|0;do if(!(a[(c[q>>2]|0)+81>>0]|0)){if((r|0)<0)r=(c[p>>2]|0)+-1|0;s=c[q+104>>2]|0;t=s+(r*20|0)+1|0;if(a[t>>0]|0){Ei(q,s+(r*20|0)|0,u,-4);break}if(u|0){c[s+(r*20|0)+16>>2]=u;a[t>>0]=-4}}while(0);r=c[p>>2]|0;if((r|0)>0)b[(c[q+104>>2]|0)+((r+-1|0)*20|0)+2>>1]=v}while(0);w=c[w+32>>2]|0}while((w|0)!=0)}r=c[Q+12>>2]|0;q=0-P|0;if(((c[r+56>>2]|0)+(c[r+60>>2]|0)|0)<0){mk(r,Q,q);return}else{c[(c[r+64>>2]|0)+(q<<2)>>2]=c[Q+108>>2];return}}function Jm(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=c[f+20>>2]|0;if((t|0)<=0){v=0;return v|0}q=b[e+42>>1]|0;u=q<<16>>16>0;s=e+4|0;r=e+40|0;n=(h|0)==0;o=q<<16>>16;p=q<<16>>16;q=q<<16>>16;m=0;a:while(1){l=c[f+36+(m<<3)+4>>2]|0;b:do if(u){k=(l|0)==0;if(!n){j=0;while(1){if(!((c[g+(j<<2)>>2]|0)<=-1?(j|0)!=(b[r>>1]|0):0))v=8;do if((v|0)==8){v=0;e=c[s>>2]|0;if(k)if(!(a[e+(j<<4)+15>>0]&1))break;else{e=1;v=28;break a}h=c[e+(j<<4)>>2]|0;i=a[h>>0]|0;e=(d[208+(i&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(e|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(e|0)!=0))}if(!e){e=1;v=28;break a}}while(0);j=j+1|0;if((j|0)>=(o|0))break b}}if(k){e=0;while(1){if((c[g+(e<<2)>>2]|0)>-1?a[(c[s>>2]|0)+(e<<4)+15>>0]&1:0){e=1;v=28;break a}e=e+1|0;if((e|0)>=(p|0))break b}}j=0;do{if((c[g+(j<<2)>>2]|0)>-1){h=c[(c[s>>2]|0)+(j<<4)>>2]|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(w<<24>>24==0|(e|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(e|0)!=0))}if(!e){e=1;v=28;break a}}j=j+1|0}while((j|0)<(q|0))}while(0);m=m+1|0;if((m|0)>=(t|0)){e=0;v=28;break}}if((v|0)==28)return e|0;return 0}function Km(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+16|0;o=q;if(0==0?(c[(c[e>>2]|0)+32>>2]&16384|0)==0:0){p=0;Ra=q;return p|0}g=c[f+16>>2]|0;if(!g)g=0;else{j=g;g=0;do{i=c[j+20>>2]|0;if((i|0)>0){h=0;do{n=c[j+36+(h<<3)>>2]|0;g=((n|0)>31?-1:1<<n)|g;h=h+1|0}while((h|0)<(i|0))}j=c[j+4>>2]|0}while((j|0)!=0)}n=c[f>>2]|0;k=c[f+72>>2]|0;l=c[k+68>>2]|0;if(!l){i=k+60|0;h=k+64|0}else{i=a[n>>0]|0;if(!(i<<24>>24))h=0;else{h=0;j=n;do{j=j+1|0;h=G(h+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[j>>0]|0}while(i<<24>>24!=0)}h=(h>>>0)%((c[k+56>>2]|0)>>>0)|0;i=l+(h<<3)|0;h=l+(h<<3)+4|0}i=c[i>>2]|0;a:do if(!i)h=59292;else{m=d[208+(d[n>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;i=i+-1|0;k=c[h+12>>2]|0;l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-m|0;if(!(l<<24>>24==0|(j|0)!=0)){l=n;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j)break a;if(!i){h=59292;break}}}while(0);h=c[h+8>>2]|0;if(!h){r=g;Ra=q;return r|0}do{c[o>>2]=0;Om(e,f,h,o,0)|0;i=c[o>>2]|0;if((i|0)!=0?(p=b[i+50>>1]|0,p<<16>>16!=0):0){j=c[i+4>>2]|0;k=p&65535;i=0;do{r=b[j+(i<<1)>>1]|0;g=(r<<16>>16>31?-1:1<<(r<<16>>16))|g;i=i+1|0}while(i>>>0<k>>>0)}h=c[h+12>>2]|0}while((h|0)!=0);Ra=q;return g|0}function Lm(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;_=Ra;Ra=Ra+16|0;X=_+8|0;Y=_+4|0;S=_;Z=c[f>>2]|0;R=f+146|0;V=a[R>>0]|0;W=Z+32|0;if((c[W>>2]&16384|0)==0&0==0){Ra=_;return}T=g+72|0;p=c[T>>2]|0;m=c[Z+16>>2]|0;if(!p)l=-1e6;else{l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(p|0))break;else l=l+1|0}Q=c[m+(l<<4)>>2]|0;m=c[g+16>>2]|0;do if(!m)l=g;else{x=(j|0)==0;y=V<<24>>24==0;z=g+40|0;A=(k|0)==0;B=Z+81|0;C=f+8|0;D=f+40|0;E=(h|0)==0;F=Z+312|0;H=f+116|0;I=(i|0)==0;J=h+1|0;K=f+23|0;L=(Z|0)==0;M=Z+480|0;N=Z+304|0;O=Z+308|0;P=Z+300|0;a:while(1){c[X>>2]=0;c[Y>>2]=0;b:do if(!x){p=c[g>>2]|0;n=c[m+8>>2]|0;if(p){if(n|0){U=a[p>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(U<<24>>24==0|(o|0)!=0)U=16;else{q=n;do{p=p+1|0;q=q+1|0;U=a[p>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(U<<24>>24==0|(o|0)!=0));U=16}}}else{o=((n|0)!=0)<<31>>31;U=16}if((U|0)==16?(U=0,(o|0)==0):0){U=26;break}r=c[m+20>>2]|0;if((r|0)>0){if(A){p=0;while(1){if((c[j+(c[m+36+(p<<3)>>2]<<2)>>2]|0)>-1){U=26;break b}p=p+1|0;if((p|0)>=(r|0))break b}}p=0;do{q=c[m+36+(p<<3)>>2]|0;if((c[j+(q<<2)>>2]|0)>-1){U=26;break b}p=p+1|0;if((q|0)==(b[z>>1]|0)){U=26;break b}}while((p|0)<(r|0))}}else{n=c[m+8>>2]|0;U=26}while(0);c:do if((U|0)==26){U=0;if(!(a[R>>0]|0))w=bd(f,0,n,Q)|0;else w=Sd(Z,n,Q)|0;n=(w|0)==0;if(!n?(Om(f,w,m,X,Y)|0)==0:0){n=c[Y>>2]|0;if(!n){c[S>>2]=c[m+36>>2];n=S}u=m+20|0;if((c[u>>2]|0)>0){v=w+4|0;r=c[X>>2]|0;s=w+40|0;t=r+4|0;if(!r){q=0;r=0;do{p=n+(r<<2)|0;if((c[p>>2]|0)==(b[z>>1]|0))c[p>>2]=-1;if(c[F>>2]|0)q=(Ik(f,c[w>>2]|0,c[(c[v>>2]|0)+(b[s>>1]<<4)>>2]|0,l)|0)==2&1;r=r+1|0}while((r|0)<(c[u>>2]|0));p=w}else{q=0;r=0;do{p=n+(r<<2)|0;if((c[p>>2]|0)==(b[z>>1]|0))c[p>>2]=-1;if(c[F>>2]|0)q=(Ik(f,c[w>>2]|0,c[(c[v>>2]|0)+(b[(c[t>>2]|0)+(r<<1)>>1]<<4)>>2]|0,l)|0)==2&1;r=r+1|0}while((r|0)<(c[u>>2]|0));p=w}}else{q=0;p=w}Hj(f,l,c[w+28>>2]|0,0,c[p>>2]|0);c[D>>2]=(c[D>>2]|0)+1;if(!E)Pm(f,l,w,c[X>>2]|0,m,n,h,-1,q);do if(!I){p=c[H>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;if(p|0){p=c[p>>2]|0;if((p|0)==(c[m+28>>2]|0)?(a[m+25>>0]|0)==8:0)break;if((p|0)==(c[m+32>>2]|0)?(a[m+26>>0]|0)==8:0)break}Pm(f,l,w,c[X>>2]|0,m,n,i,1,q)}while(0);n=c[Y>>2]|0;if(!n)break;do if(!L){if(c[M>>2]|0){Xd(Z,n);break c}p=n;if((c[N>>2]|0)>>>0<=p>>>0){if((c[O>>2]|0)>>>0<=p>>>0)break;c[n>>2]=c[P>>2];c[P>>2]=n;break c}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{w=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}if(y)break a;if(a[B>>0]|0)break a;if(n){n=c[C>>2]|0;d:do if(!n){r=c[f>>2]|0;if((c[H>>2]|0)==0?(b[r+76>>1]&8)==0:0)a[K>>0]=1;e:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))U=48;else{n=0;break d}else{do if((e[r+276>>1]|0)>=224){p=r+300|0;n=c[p>>2]|0;if(n|0){c[p>>2]=c[n>>2];w=r+284|0;c[w>>2]=(c[w>>2]|0)+1;break e}p=r+296|0;n=c[p>>2]|0;if(!n){n=r+292|0;break}else{c[p>>2]=c[n>>2];w=r+284|0;c[w>>2]=(c[w>>2]|0)+1;break e}}else n=r+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;U=48}while(0);if((U|0)==48){U=0;n=_d(r,224,0)|0}if(!n)n=0;else{p=n+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[n>>2]=r;p=r+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=n;c[n+8>>2]=q;c[n+4>>2]=0;c[p>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[C>>2]=n;Di(n,61,0,1,0)|0}}while(0);v=n+108|0;q=c[v>>2]|0;s=m+20|0;u=c[s>>2]|0;t=q+1+u|0;w=n+112|0;if((u|0)>0){u=n+104|0;r=0;do{p=J+(c[m+36+(r<<3)>>2]|0)|0;if((c[w>>2]|0)>(q|0)){c[v>>2]=q+1;$=c[u>>2]|0;a[$+(q*20|0)>>0]=50;b[$+(q*20|0)+2>>1]=0;c[$+(q*20|0)+4>>2]=p;c[$+(q*20|0)+8>>2]=t;c[$+(q*20|0)+12>>2]=0;c[$+(q*20|0)+16>>2]=0;a[$+(q*20|0)+1>>0]=0}else Di(n,50,p,t,0)|0;r=r+1|0;q=c[v>>2]|0}while((r|0)<(c[s>>2]|0))}p=d[m+24>>0]|0;if((c[w>>2]|0)>(q|0)){c[v>>2]=q+1;$=c[n+104>>2]|0;a[$+(q*20|0)>>0]=-106;b[$+(q*20|0)+2>>1]=0;c[$+(q*20|0)+4>>2]=p;c[$+(q*20|0)+8>>2]=-1;c[$+(q*20|0)+12>>2]=0;c[$+(q*20|0)+16>>2]=0;a[$+(q*20|0)+1>>0]=0;break}else{Di(n,150,p,-1,0)|0;break}}}while(0);m=c[m+4>>2]|0;if(!m){U=100;break}}if((U|0)==100){l=g;p=c[T>>2]|0;break}Ra=_;return}while(0);r=c[l>>2]|0;o=c[p+68>>2]|0;if(!o){m=p+60|0;l=p+64|0}else{m=a[r>>0]|0;if(!(m<<24>>24))l=0;else{l=0;n=r;do{n=n+1|0;l=G(l+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[n>>0]|0}while(m<<24>>24!=0)}l=(l>>>0)%((c[p+56>>2]|0)>>>0)|0;m=o+(l<<3)|0;l=o+(l<<3)+4|0}m=c[m>>2]|0;f:do if(!m)l=59292;else{q=d[208+(d[r>>0]|0)>>0]|0;while(1){l=c[l>>2]|0;m=m+-1|0;o=c[l+12>>2]|0;$=a[o>>0]|0;n=(d[208+($&255)>>0]|0)-q|0;if(!($<<24>>24==0|(n|0)!=0)){p=r;do{o=o+1|0;p=p+1|0;$=a[o>>0]|0;n=(d[208+($&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!($<<24>>24==0|(n|0)!=0))}if(!n)break f;if(!m){l=59292;break}}}while(0);l=c[l+8>>2]|0;if(!l){Ra=_;return}B=(j|0)!=0;C=f+116|0;p=V<<24>>24==0;q=f+20|0;r=f+40|0;s=(i|0)==0;t=Z+81|0;u=(Z|0)==0;v=(h|0)==0;w=Z+480|0;x=B&1;y=Z+304|0;z=Z+308|0;A=Z+300|0;g:while(1){c[X>>2]=0;c[Y>>2]=0;if(B?(Jm(g,l,j,k)|0)==0:0)U=142;else U=118;do if((U|0)==118){U=0;o=l+24|0;if((((a[o>>0]|0)==0?(c[W>>2]&524288|0)==0&0==0:0)?(c[C>>2]|0)==0:0)?(a[q>>0]|0)==0:0){U=142;break}if(Om(f,g,l,X,Y)|0){if(p){U=124;break g}if(!(a[t>>0]|0))break;else{U=145;break g}}m=pj(f,0,0,0)|0;if(m|0){$=c[l>>2]|0;c[m+24>>2]=$;n=m+16|0;c[n>>2]=c[$>>2];$=$+32|0;c[$>>2]=(c[$>>2]|0)+1;$=c[r>>2]|0;c[r>>2]=$+1;c[m+48>>2]=$;if(!s)Qm(f,m,g,c[X>>2]|0,l,c[Y>>2]|0,i,-1);if(!v?($=a[l+25+x>>0]|0,Qm(f,m,g,c[X>>2]|0,l,c[Y>>2]|0,h,1),($|2)<<24>>24!=10&(a[o>>0]|0)==0):0){$=c[C>>2]|0;a[(($|0)==0?f:$)+21>>0]=1}c[n>>2]=0;qi(Z,m)}m=c[Y>>2]|0;if(m){if(!u){if(c[w>>2]|0){Xd(Z,m);U=142;break}$=m;if((c[y>>2]|0)>>>0<=$>>>0?(c[z>>2]|0)>>>0>$>>>0:0){c[m>>2]=c[A>>2];c[A>>2]=m;U=142;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);U=142;break}else{U=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);U=142;break}}else U=142}while(0);l=c[l+12>>2]|0;if(!l){U=145;break}}if((U|0)==124){Ra=_;return}else if((U|0)==145){Ra=_;return}}function Mm(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;w=z;x=f+8|0;y=c[x>>2]|0;n=c[g+8>>2]|0;a:do if(!(c[g+36>>2]&32))g=0;else{if(!n){Ra=z;return}g=n;while(1){v=g+55|0;if(((d[v>>0]|d[v+1>>0]<<8)&3)==2)break a;g=c[g+20>>2]|0;if(!g){g=0;break}}}while(0);if(!n){Ra=z;return}t=y+108|0;u=y+112|0;v=y+104|0;if(!j){l=-1;m=0;p=n;q=0;while(1){do if((p|0)!=(g|0)?(r=q+i|0,(r|0)!=(k|0)):0){l=el(f,p,h,0,1,w,m,l)|0;m=p+55|0;m=e[(((d[m>>0]|d[m+1>>0]<<8)&8)==0?p+52|0:p+50|0)>>1]|0;n=c[t>>2]|0;if((c[u>>2]|0)>(n|0)){c[t>>2]=n+1;s=c[v>>2]|0;a[s+(n*20|0)>>0]=-123;b[s+(n*20|0)+2>>1]=0;c[s+(n*20|0)+4>>2]=r;c[s+(n*20|0)+8>>2]=l;c[s+(n*20|0)+12>>2]=m;c[s+(n*20|0)+16>>2]=0;a[s+(n*20|0)+1>>0]=0}else Di(y,133,r,l,m)|0;m=c[w>>2]|0;if(m){n=c[x>>2]|0;o=c[n+12>>2]|0;m=~m;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,n,m);m=p;break}else{c[(c[o+64>>2]|0)+(m<<2)>>2]=c[n+108>>2];m=p;break}}else m=p}while(0);p=c[p+20>>2]|0;if(!p)break;else q=q+1|0}Ra=z;return}else{l=-1;m=0;p=n;q=0;while(1){do if(!((p|0)==(g|0)?1:(c[j+(q<<2)>>2]|0)==0)?(s=q+i|0,(s|0)!=(k|0)):0){l=el(f,p,h,0,1,w,m,l)|0;m=p+55|0;m=e[(((d[m>>0]|d[m+1>>0]<<8)&8)==0?p+52|0:p+50|0)>>1]|0;n=c[t>>2]|0;if((c[u>>2]|0)>(n|0)){c[t>>2]=n+1;r=c[v>>2]|0;a[r+(n*20|0)>>0]=-123;b[r+(n*20|0)+2>>1]=0;c[r+(n*20|0)+4>>2]=s;c[r+(n*20|0)+8>>2]=l;c[r+(n*20|0)+12>>2]=m;c[r+(n*20|0)+16>>2]=0;a[r+(n*20|0)+1>>0]=0}else Di(y,133,s,l,m)|0;m=c[w>>2]|0;if(m){n=c[x>>2]|0;o=c[n+12>>2]|0;m=~m;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,n,m);m=p;break}else{c[(c[o+64>>2]|0)+(m<<2)>>2]=c[n+108>>2];m=p;break}}else m=p}while(0);p=c[p+20>>2]|0;if(!p)break;else q=q+1|0}Ra=z;return}}function Nm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;$=Ra;Ra=Ra+96|0;X=$+16|0;q=$+8|0;p=$;W=$+56|0;r=$+24|0;Y=c[f+116>>2]|0;Y=(Y|0)==0?f:Y;_=c[f>>2]|0;m=(_|0)==0;a:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](24)|0;P=24;break}j=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){Z=c[14978]|0;U=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;T=L()|0;c[14768]=((T|0)<0|(T|0)==0&U>>>0<=Z>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){_=0;Ra=$;return _|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;Z=k}else Z=k}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){_=0;Ra=$;return _|0}}else{do if((e[_+276>>1]|0)>=24){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=24;break a}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=24;break a}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,24,0)|0;P=24}while(0);if((P|0)==24)if(!j){_=0;Ra=$;return _|0}else Z=j;l=Z;n=l+24|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));U=Y+260|0;c[Z+4>>2]=c[U>>2];c[U>>2]=Z;b:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](28)|0;P=48;break}j=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){U=c[14978]|0;T=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;S=L()|0;c[14768]=((S|0)<0|(S|0)==0&T>>>0<=U>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(k){j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;Q=k}else Q=k}else P=49}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){P=49;break}}else{do if((e[_+276>>1]|0)>=28){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=48;break b}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=48;break b}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,28,0)|0;P=48}while(0);if((P|0)==48)if(!j)P=49;else Q=j;if((P|0)==49){c[Z+8>>2]=0;_=0;Ra=$;return _|0}l=Q;n=l+24|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));c[Z+8>>2]=Q;R=(c[Y+8>>2]|0)+212|0;c[Q+24>>2]=c[R>>2];c[R>>2]=Q;c[Z>>2]=g;c[Z+12>>2]=i;R=Z+16|0;c[R>>2]=-1;S=Z+20|0;c[S>>2]=-1;c:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](276)|0;P=73;break}j=Wa[c[29356>>2]&127](276)|0;if((c[14985]|0)>>>0<276)c[14985]=276;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){U=c[14978]|0;T=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&T>>>0<=U>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){_=0;Ra=$;return _|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;U=k}else U=k}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){_=0;Ra=$;return _|0}}else{do if((e[_+276>>1]|0)>=276){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=73;break c}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=73;break c}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,276,0)|0;P=73}while(0);if((P|0)==73)if(!j){_=0;Ra=$;return _|0}else U=j;O=U+4|0;gw(O|0,0,272)|0;k=r+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[r>>2]=U;c[U>>2]=_;c[U+120>>2]=h;c[U+116>>2]=Y;k=c[g>>2]|0;c[U+240>>2]=k;a[U+144>>0]=a[g+8>>0]|0;c[U+132>>2]=c[f+132>>2];a[U+25>>0]=a[f+25>>0]|0;o=U+8|0;j=c[o>>2]|0;T=U;d:do if(!j){e:do if(c[_+272>>2]|0)if(!(a[_+81>>0]|0))P=86;else k=_;else{do if((e[_+276>>1]|0)>=224){j=_+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=87;break e}j=_+296|0;k=c[j>>2]|0;if(!k){j=_+292|0;break}else{c[j>>2]=c[k>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=87;break e}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;P=86}while(0);if((P|0)==86){k=_d(_,224,0)|0;P=87}do if((P|0)==87){if(k|0){l=k+104|0;n=l+120|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));c[k>>2]=_;j=_+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=U;c[o>>2]=k;Di(k,61,0,1,0)|0;N=k;j=c[g>>2]|0;P=91;break d}j=c[U>>2]|0;k=c[U+64>>2]|0;if(k){if(j|0){if(c[j+480>>2]|0){Xd(j,k);k=j;break}Y=k;if((c[j+304>>2]|0)>>>0<=Y>>>0?(c[j+308>>2]|0)>>>0>Y>>>0:0){Y=j+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;k=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);k=j;break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);k=j;break}}else k=j}while(0);j=c[U+68>>2]|0;if(j|0)ri(k,j);j=U+24|0;if(k){Y=k+272|0;c[Y>>2]=(c[Y>>2]|0)-(d[j>>0]|0)}}else{N=j;j=k;P=91}while(0);if((P|0)==91){do if(j|0){c[p>>2]=j;m=dd(_,44694,p)|0;j=c[N>>2]|0;if(!(a[j+81>>0]|0)){j=(c[N+108>>2]|0)+-1|0;k=c[N+104>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(N,k+(j*20|0)|0,m,-7);break}if(!m)break;c[k+(j*20|0)+16>>2]=m;a[l>>0]=-7;break}if(m|0){if(j|0){if(c[j+480>>2]|0){Xd(j,m);break}M=m;if((c[j+304>>2]|0)>>>0<=M>>>0?(c[j+308>>2]|0)>>>0>M>>>0:0){M=j+300|0;c[m>>2]=c[M>>2];c[M>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{M=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}while(0);j=c[g+12>>2]|0;do if(!j)j=0;else{h=dk(_,j,0,0)|0;n=(h|0)==0;do if(n)P=115;else{k=r+24|0;l=e[k>>1]|0;b[k>>1]=l&28655;c[W>>2]=T;c[W+4>>2]=125;c[W+8>>2]=126;c[W+12>>2]=0;c[W+24>>2]=r;m=h+24|0;j=U+208|0;M=(c[j>>2]|0)+(c[m>>2]|0)|0;c[j>>2]=M;j=c[(c[U>>2]|0)+120>>2]|0;if((j|0)>=(M|0)){_j(W,h)|0;j=c[W>>2]|0;M=j+208|0;c[M>>2]=(c[M>>2]|0)-(c[m>>2]|0);M=b[k>>1]|0;K=h+4|0;c[K>>2]=c[K>>2]|M&-32752&65535;b[k>>1]=l&36880|M&65535;if((c[r+20>>2]|0)<=0)if((c[j+36>>2]|0)<1){P=115;break}else{j=0;break}}else{c[q>>2]=j;cd(U,41637,q)}j=0}while(0);if((P|0)==115){if(!(a[_+81>>0]|0)){M=U+56|0;j=(c[M>>2]|0)+-1|0;c[M>>2]=j;Tj(U,h,j,16)}else j=0;if(n)break}ni(_,h)}while(0);I=c[o>>2]|0;J=c[U>>2]|0;k=c[g+28>>2]|0;f:do if(k|0){K=(i|0)==11;M=U+145|0;u=i&255;v=I+108|0;w=I+112|0;x=W+4|0;y=I+104|0;z=(J|0)==0;A=J+272|0;B=J+276|0;C=J+81|0;D=J+288|0;E=J+300|0;F=J+296|0;G=J+284|0;H=J+292|0;while(1){if(K)l=d[k+1>>0]|0;else l=u;a[M>>0]=l;l=c[k+32>>2]|0;g:do if(l|0){c[X>>2]=l;h=dd(J,34793,X)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;t=c[y>>2]|0;a[t+(l*20|0)>>0]=-88;b[t+(l*20|0)+2>>1]=0;c[t+(l*20|0)+4>>2]=2147483647;c[t+(l*20|0)+8>>2]=1;c[t+(l*20|0)+12>>2]=0;c[t+(l*20|0)+16>>2]=0;a[t+(l*20|0)+1>>0]=0}else l=Di(I,168,2147483647,1,0)|0;m=c[I>>2]|0;if(!(a[m+81>>0]|0)){if((l|0)<0)l=(c[v>>2]|0)+-1|0;m=c[y>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(I,m+(l*20|0)|0,h,-7);break}if(!h)break;c[m+(l*20|0)+16>>2]=h;a[n>>0]=-7;break}if(h|0){do if(m|0){if(c[m+480>>2]|0){Xd(m,h);break g}l=h;if((c[m+304>>2]|0)>>>0<=l>>>0){if((c[m+308>>2]|0)>>>0<=l>>>0)break;t=m+300|0;c[h>>2]=c[t>>2];c[t>>2]=h;break g}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}while(0);switch(a[k>>0]|0){case 122:{p=c[U>>2]|0;q=pj(U,0,0,0)|0;if(q|0){h=c[k+12>>2]|0;h:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;i:do if(!p){t=Sv(o|0,0,-1,-1)|0;s=L()|0;if(s>>>0>0|(s|0)==0&t>>>0>2147483390){l=0;break h}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=171;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){t=c[14978]|0;s=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&s>>>0<=t>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break h}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break h}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=171;break i}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=171;break i}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=171}while(0);if((P|0)==171){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;j:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;k:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=188;else{l=0;break j}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];t=p+284|0;c[t>>2]=(c[t>>2]|0)+1;break k}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];t=p+284|0;c[t>>2]=(c[t>>2]|0)+1;break k}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=188}while(0);if((P|0)==188){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+4>>2]=l}}m=gk(J,c[k+20>>2]|0,0)|0;l=c[k+16>>2]|0;if(!l)l=0;else l=dk(J,l,0,0)|0;tj(U,q,m,l,d[M>>0]|0,0);break}case 120:{p=c[U>>2]|0;t=pj(U,0,0,0)|0;if(t|0){h=c[k+12>>2]|0;l:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;m:do if(!p){s=Sv(o|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&s>>>0>2147483390){l=0;break l}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=221;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){s=c[14978]|0;i=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;r=L()|0;c[14768]=((r|0)<0|(r|0)==0&i>>>0<=s>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break l}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break l}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=221;break m}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=221;break m}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=221}while(0);if((P|0)==221){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[t+8+(((c[t>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;n:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;o:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=238;else{l=0;break n}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];s=p+284|0;c[s>>2]=(c[s>>2]|0)+1;break o}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];s=p+284|0;c[s>>2]=(c[s>>2]|0)+1;break o}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=238}while(0);if((P|0)==238){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[t+8+(((c[t>>2]|0)+-1|0)*72|0)+4>>2]=l}}r=fk(J,c[k+8>>2]|0,0)|0;i=jk(J,c[k+24>>2]|0)|0;s=d[M>>0]|0;m=c[k+28>>2]|0;do if(!m)l=0;else{q=gk(J,c[m>>2]|0,0)|0;l=c[m+4>>2]|0;if(!l)p=0;else p=dk(J,l,0,0)|0;o=gk(J,c[m+8>>2]|0,0)|0;l=c[m+12>>2]|0;if(!l)h=0;else h=dk(J,l,0,0)|0;p:do if(z){if(!(c[7324]|0)){V=Wa[c[29340>>2]&127](36)|0;P=268;break}l=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){aa=c[14978]|0;n=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=aa>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l)break;m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){P=277;break}c[14987]=m;P=277}else{if(c[A>>2]|0){if(a[C>>0]|0)break}else{do if((e[B>>1]|0)<36)l=D;else{l=c[E>>2]|0;if(l|0){c[E>>2]=c[l>>2];c[G>>2]=(c[G>>2]|0)+1;V=l;P=268;break p}l=c[F>>2]|0;if(!l){l=H;break}c[F>>2]=c[l>>2];c[G>>2]=(c[G>>2]|0)+1;V=l;P=268;break p}while(0);c[l>>2]=(c[l>>2]|0)+1}V=_d(J,36,0)|0;P=268}while(0);if((P|0)==268?(P=0,V|0):0){l=V;P=277}if((P|0)==277){P=0;c[l>>2]=q;c[l+4>>2]=p;c[l+8>>2]=o;c[l+12>>2]=h;c[l+16>>2]=0;break}if(q|0)ri(J,q);if(p|0)ni(J,p);if(o|0)ri(J,o);if(!h){l=0;break}ni(J,h);l=0}while(0);vj(U,t,r,i,s,l);break}case 121:{p=c[U>>2]|0;q=pj(U,0,0,0)|0;if(q|0){h=c[k+12>>2]|0;q:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;r:do if(!p){aa=Sv(o|0,0,-1,-1)|0;t=L()|0;if(t>>>0>0|(t|0)==0&aa>>>0>2147483390){l=0;break q}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=305;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){aa=c[14978]|0;t=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;s=L()|0;c[14768]=((s|0)<0|(s|0)==0&t>>>0<=aa>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break q}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break q}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<o>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=305;break r}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=305;break r}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=305}while(0);if((P|0)==305){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;s:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;t:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=322;else{l=0;break s}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<h>>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];aa=p+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break t}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];aa=p+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break t}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=322}while(0);if((P|0)==322){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+4>>2]=l}}l=c[k+16>>2]|0;if(!l)l=0;else l=dk(J,l,0,0)|0;sj(U,q,l);break}default:{l=fk(J,c[k+8>>2]|0,0)|0;a[W>>0]=4;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;kj(U,l,W)|0;if(l|0)pi(J,l,1)}}do if((a[k>>0]|0)!=-125){l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;n=c[y>>2]|0;a[n+(l*20|0)>>0]=124;l=n+(l*20|0)+1|0;n=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));break}else{Di(I,124,0,0,0)|0;break}}while(0);k=c[k+36>>2]|0;if(!k)break f}}while(0);do if(j|0){k=c[N+12>>2]|0;j=~j;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,N,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[N+108>>2];break}}while(0);m=N+108|0;j=c[m>>2]|0;if((c[N+112>>2]|0)>(j|0)){c[m>>2]=j+1;l=c[N+104>>2]|0;a[l+(j*20|0)>>0]=69;l=l+(j*20|0)+1|0;n=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0))}else Di(N,69,0,0,0)|0;l=f+36|0;do if(c[l>>2]|0){k=c[U>>2]|0;j=c[O>>2]|0;if(j|0){if(k|0){if(c[k+480>>2]|0){Xd(k,j);break}aa=j;if((c[k+304>>2]|0)>>>0<=aa>>>0?(c[k+308>>2]|0)>>>0>aa>>>0:0){aa=k+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}}else{c[f+4>>2]=c[O>>2];c[l>>2]=c[U+36>>2];c[f+12>>2]=c[U+12>>2]}while(0);if((a[_+81>>0]|0)==0?(c[l>>2]|0)==0:0){f=N+104|0;aa=c[f>>2]|0;Fi(N,Y+96|0);c[Q+4>>2]=c[m>>2];c[f>>2]=0;c[Q>>2]=aa}c[Q+8>>2]=c[U+44>>2];c[Q+12>>2]=c[U+40>>2];c[Q+20>>2]=g;c[R>>2]=c[U+136>>2];c[S>>2]=c[U+140>>2];l=c[N>>2]|0;kb(l,N);m=c[N+4>>2]|0;k=N+8|0;j=c[k>>2]|0;if(!m)c[l+4>>2]=j;else{c[m+8>>2]=j;j=c[k>>2]|0}if(j|0)c[j+4>>2]=m;c[N+20>>2]=1443283912;c[N>>2]=0;do if(l){if(c[l+480>>2]|0){Xd(l,N);break}aa=N;if((c[l+304>>2]|0)>>>0<=aa>>>0?(c[l+308>>2]|0)>>>0>aa>>>0:0){aa=l+300|0;c[N>>2]=c[aa>>2];c[aa>>2]=N}else P=370}else P=370;while(0);do if((P|0)==370)if(!(c[7324]|0)){ab[c[29344>>2]&127](N);break}else{aa=Wa[c[29352>>2]&127](N)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](N);break}while(0);l=c[U>>2]|0;j=c[U+64>>2]|0;u:do if(j|0){do if(l|0){if(c[l+480>>2]|0){Xd(l,j);break u}k=j;if((c[l+304>>2]|0)>>>0>k>>>0)break;if((c[l+308>>2]|0)>>>0<=k>>>0)break;aa=l+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[U+68>>2]|0;if(j|0)ri(l,j);j=U+24|0;if(l){aa=l+272|0;c[aa>>2]=(c[aa>>2]|0)-(d[j>>0]|0)}}a[j>>0]=0;if(c[_+480>>2]|0){Xd(_,U);aa=Z;Ra=$;return aa|0}if((c[_+304>>2]|0)>>>0<=T>>>0?(c[_+308>>2]|0)>>>0>T>>>0:0){aa=_+300|0;c[U>>2]=c[aa>>2];c[aa>>2]=U;aa=Z;Ra=$;return aa|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](U);aa=Z;Ra=$;return aa|0}else{aa=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);aa=Z;Ra=$;return aa|0}return 0}function Om(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;z=B;A=c[h+20>>2]|0;o=c[h+40>>2]|0;do if((A|0)==1){x=b[g+40>>1]|0;k=x<<16>>16;if(x<<16>>16>-1){if(!o){A=0;Ra=B;return A|0}l=c[(c[g+4>>2]|0)+(k<<4)>>2]|0;x=a[l>>0]|0;k=(d[208+(x&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(x<<24>>24==0|(k|0)!=0)){m=o;do{l=l+1|0;m=m+1|0;x=a[l>>0]|0;k=(d[208+(x&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(k|0)!=0))}if(!k){A=0;Ra=B;return A|0}else{x=0;w=0}}else{x=0;w=0}}else if(j){m=c[f>>2]|0;n=A<<2;a:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))y=19;else{A=1;Ra=B;return A|0}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];x=m+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];x=m+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;y=19}while(0);if((y|0)==19)k=_d(m,n,0)|0;if(!k){A=1;Ra=B;return A|0}else{c[j>>2]=k;x=k;w=k;break}}else{x=0;w=0}while(0);k=c[g+8>>2]|0;b:do if(k|0){u=(o|0)==0;v=(A|0)>0;s=g+4|0;t=(x|0)==0;r=k;c:while(1){do if(((A|0)==(e[r+50>>1]|0)?a[r+54>>0]|0:0)?(c[r+36>>2]|0)==0:0){if(u){q=r+55|0;if(((d[q>>0]|d[q+1>>0]<<8)&3)==2){y=29;break c}else break}d:do if(v){q=r+32|0;p=c[r+4>>2]|0;k=0;do{g=b[p+(k<<1)>>1]|0;j=g<<16>>16;if(g<<16>>16<0)break d;o=c[s>>2]|0;n=c[o+(j<<4)+8>>2]|0;n=(n|0)==0?34049:n;m=c[(c[q>>2]|0)+(k<<2)>>2]|0;g=a[m>>0]|0;l=(d[208+(g&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(g<<24>>24==0|(l|0)!=0))do{m=m+1|0;n=n+1|0;g=a[m>>0]|0;l=(d[208+(g&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(g<<24>>24==0|(l|0)!=0));if(l|0)break d;o=c[o+(j<<4)>>2]|0;g=d[208+(d[o>>0]|0)>>0]|0;l=0;do{n=c[h+36+(l<<3)+4>>2]|0;j=a[n>>0]|0;m=(d[208+(j&255)>>0]|0)-g|0;if(!(j<<24>>24==0|(m|0)!=0)){j=o;do{n=n+1|0;j=j+1|0;C=a[n>>0]|0;m=(d[208+(C&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(m|0)!=0))}if(!m){y=45;break}l=l+1|0}while((l|0)<(A|0));if((y|0)==45){y=0;if(!t)c[x+(k<<2)>>2]=c[h+36+(l<<3)>>2]}if((l|0)==(A|0))break d;k=k+1|0}while((k|0)<(A|0))}else k=0;while(0);if((k|0)==(A|0))break c}while(0);k=c[r+20>>2]|0;if(!k)break b;else r=k}if((y|0)==29?(x|0)!=0&v:0){k=0;do{c[x+(k<<2)>>2]=c[h+36+(k<<3)>>2];k=k+1|0}while((k|0)!=(A|0))}c[i>>2]=r;C=0;Ra=B;return C|0}while(0);if(!(a[f+146>>0]|0)){C=c[h+8>>2]|0;c[z>>2]=c[c[h>>2]>>2];c[z+4>>2]=C;cd(f,44708,z)}k=c[f>>2]|0;if(!w){C=1;Ra=B;return C|0}if(k|0){if(c[k+480>>2]|0){Xd(k,w);C=1;Ra=B;return C|0}C=w;if((c[k+304>>2]|0)>>>0<=C>>>0?(c[k+308>>2]|0)>>>0>C>>>0:0){C=k+300|0;c[w>>2]=c[C>>2];c[C>>2]=w;C=1;Ra=B;return C|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](w);C=1;Ra=B;return C|0}else{C=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);C=1;Ra=B;return C|0}return 0}function Pm(f,g,h,i,j,k,l,m,n){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;A=f+8|0;o=c[A>>2]|0;a:do if(!o){r=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[r+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))L=15;else{J=0;break a}else{do if((e[r+276>>1]|0)>=224){o=r+300|0;p=c[o>>2]|0;if(p|0){c[o>>2]=c[p>>2];K=r+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}o=r+296|0;p=c[o>>2]|0;if(!p){o=r+292|0;break}else{c[o>>2]=c[p>>2];K=r+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}}else o=r+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;L=15}while(0);if((L|0)==15)p=_d(r,224,0)|0;if(!p)J=0;else{o=p+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[p>>2]=r;o=r+4|0;q=c[o>>2]|0;if(q|0)c[q+4>>2]=p;c[p+8>>2]=q;c[p+4>>2]=0;c[o>>2]=p;c[p+20>>2]=381479589;c[p+12>>2]=f;c[A>>2]=p;Di(p,61,0,1,0)|0;J=p}}else J=o;while(0);K=(c[f+40>>2]|0)+-1|0;D=f+56|0;I=c[D>>2]|0;H=I+-1|0;c[D>>2]=H;do if((m|0)<0){o=d[j+24>>0]|0;p=J+108|0;q=c[p>>2]|0;if((c[J+112>>2]|0)>(q|0)){c[p>>2]=q+1;D=c[J+104>>2]|0;a[D+(q*20|0)>>0]=46;b[D+(q*20|0)+2>>1]=0;c[D+(q*20|0)+4>>2]=o;c[D+(q*20|0)+8>>2]=H;c[D+(q*20|0)+12>>2]=0;c[D+(q*20|0)+16>>2]=0;a[D+(q*20|0)+1>>0]=0;break}else{Di(J,46,o,H,0)|0;break}}while(0);v=j+20|0;o=c[v>>2]|0;if((o|0)>0){r=l+1|0;s=J+108|0;t=J+112|0;u=J+104|0;q=0;do{o=r+(c[k+(q<<2)>>2]|0)|0;p=c[s>>2]|0;if((c[t>>2]|0)>(p|0)){c[s>>2]=p+1;D=c[u>>2]|0;a[D+(p*20|0)>>0]=50;b[D+(p*20|0)+2>>1]=0;c[D+(p*20|0)+4>>2]=o;c[D+(p*20|0)+8>>2]=H;c[D+(p*20|0)+12>>2]=0;c[D+(p*20|0)+16>>2]=0;a[D+(p*20|0)+1>>0]=0}else Di(J,50,o,H,0)|0;q=q+1|0;o=c[v>>2]|0}while((q|0)<(o|0));D=o}else D=o;do if(!n){if(!i){u=f+19|0;o=a[u>>0]|0;if(!(o<<24>>24)){G=f+44|0;t=(c[G>>2]|0)+1|0;c[G>>2]=t}else{t=o+-1<<24>>24;a[u>>0]=t;t=c[f+148+((t&255)<<2)>>2]|0}o=l+1+(c[k>>2]|0)|0;r=J+108|0;p=c[r>>2]|0;s=J+112|0;if((c[s>>2]|0)>(p|0)){c[r>>2]=p+1;G=c[J+104>>2]|0;a[G+(p*20|0)>>0]=79;b[G+(p*20|0)+2>>1]=0;c[G+(p*20|0)+4>>2]=o;c[G+(p*20|0)+8>>2]=t;c[G+(p*20|0)+12>>2]=0;c[G+(p*20|0)+16>>2]=0;a[G+(p*20|0)+1>>0]=0}else Di(J,79,o,t,0)|0;o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;q=c[J+104>>2]|0;a[q+(o*20|0)>>0]=15;b[q+(o*20|0)+2>>1]=0;c[q+(o*20|0)+4>>2]=t;c[q+(o*20|0)+8>>2]=0;c[q+(o*20|0)+12>>2]=0;c[q+(o*20|0)+16>>2]=0;a[q+(o*20|0)+1>>0]=0;q=o}else q=Di(J,15,t,0,0)|0;if((m|0)==1?(c[j>>2]|0)==(h|0):0){o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;G=c[J+104>>2]|0;a[G+(o*20|0)>>0]=53;b[G+(o*20|0)+2>>1]=0;c[G+(o*20|0)+4>>2]=l;c[G+(o*20|0)+8>>2]=H;c[G+(o*20|0)+12>>2]=t;c[G+(o*20|0)+16>>2]=0;a[G+(o*20|0)+1>>0]=0}else Di(J,53,l,H,t)|0;o=c[r>>2]|0;if((o|0)>0)b[(c[J+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=144}Gj(f,K,g,h,108);o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=31;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=K;c[l+(o*20|0)+8>>2]=0;c[l+(o*20|0)+12>>2]=t;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else Di(J,31,K,0,t)|0;o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=11;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=0;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=0;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else Di(J,11,0,H,0)|0;p=c[r>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){o=c[J+104>>2]|0;c[o+((((p|0)<2?-1:-2)+p|0)*20|0)+8>>2]=p;o=o+(((q|0)<0?p+-1|0:q)*20|0)|0}else{c[14829]=p;o=59308}c[o+8>>2]=p;if(!t)break;o=a[u>>0]|0;if((o&255)>=8)break;a[u>>0]=o+1<<24>>24;c[f+148+((o&255)<<2)>>2]=t;break}C=(D|0)==1;do if(C){o=f+19|0;p=a[o>>0]|0;if(!(p<<24>>24)){z=f+44|0;B=(c[z>>2]|0)+1|0;c[z>>2]=B;break}else{B=p+-1<<24>>24;a[o>>0]=B;B=c[f+148+((B&255)<<2)>>2]|0;break}}else{o=f+32|0;p=c[o>>2]|0;q=f+28|0;r=c[q>>2]|0;if((r|0)<(D|0)){z=f+44|0;B=c[z>>2]|0;c[z>>2]=B+D;B=B+1|0;break}else{c[o>>2]=p+D;c[q>>2]=r-D;B=p;break}}while(0);z=f+19|0;o=a[z>>0]|0;if(!(o<<24>>24)){x=f+44|0;y=(c[x>>2]|0)+1|0;c[x>>2]=y}else{y=o+-1<<24>>24;a[z>>0]=y;y=c[f+148+((y&255)<<2)>>2]|0}o=c[i+44>>2]|0;w=J+108|0;p=c[w>>2]|0;x=J+112|0;if((c[x>>2]|0)>(p|0)){c[w>>2]=p+1;n=c[J+104>>2]|0;a[n+(p*20|0)>>0]=108;b[n+(p*20|0)+2>>1]=0;c[n+(p*20|0)+4>>2]=K;c[n+(p*20|0)+8>>2]=o;c[n+(p*20|0)+12>>2]=g;c[n+(p*20|0)+16>>2]=0;a[n+(p*20|0)+1>>0]=0}else Di(J,108,K,o,g)|0;o=c[A>>2]|0;q=Ij(f,i)|0;do if(q|0){p=c[o>>2]|0;if(!(a[p+81>>0]|0)){A=c[o+104>>2]|0;g=(c[o+108>>2]|0)+-1|0;a[A+(g*20|0)+1>>0]=-9;c[A+(g*20|0)+16>>2]=q;break}if((c[p+480>>2]|0)==0?(g=(c[q>>2]|0)+-1|0,c[q>>2]=g,(g|0)==0):0){o=c[q+12>>2]|0;if(o|0){if(c[o+480>>2]|0){Xd(o,q);break}g=q;if((c[o+304>>2]|0)>>>0<=g>>>0?(c[o+308>>2]|0)>>>0>g>>>0:0){g=o+300|0;c[q>>2]=c[g>>2];c[g>>2]=q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{g=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}}while(0);u=(D|0)>0;if(u){p=l+1|0;q=J+104|0;o=0;do{r=p+(c[k+(o<<2)>>2]|0)|0;s=o+B|0;t=c[w>>2]|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;g=c[q>>2]|0;a[g+(t*20|0)>>0]=78;b[g+(t*20|0)+2>>1]=0;c[g+(t*20|0)+4>>2]=r;c[g+(t*20|0)+8>>2]=s;c[g+(t*20|0)+12>>2]=0;c[g+(t*20|0)+16>>2]=0;a[g+(t*20|0)+1>>0]=0}else Di(J,78,r,s,0)|0;o=o+1|0}while((o|0)!=(D|0))}do if((m|0)==1?(c[j>>2]|0)==(h|0):0){o=c[w>>2]|0;n=D+1+o|0;if(u){u=l+1|0;v=i+4|0;s=h+40|0;t=J+104|0;r=0;do{p=u+(c[k+(r<<2)>>2]|0)|0;q=b[(c[v>>2]|0)+(r<<1)>>1]|0;q=(q<<16>>16==(b[s>>1]|0)?0:(q<<16>>16)+1|0)+l|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;h=c[t>>2]|0;a[h+(o*20|0)>>0]=52;b[h+(o*20|0)+2>>1]=0;c[h+(o*20|0)+4>>2]=p;c[h+(o*20|0)+8>>2]=n;c[h+(o*20|0)+12>>2]=q;c[h+(o*20|0)+16>>2]=0;a[h+(o*20|0)+1>>0]=0}else Di(J,52,p,n,q)|0;o=c[w>>2]|0;if((o|0)>0)b[(c[t>>2]|0)+((o+-1|0)*20|0)+2>>1]=16;r=r+1|0}while((r|0)!=(D|0))}if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=11;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=0;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=0;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0;break}else{Di(J,11,0,H,0)|0;break}}while(0);r=gl(c[f>>2]|0,i)|0;o=c[w>>2]|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=92;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=B;c[l+(o*20|0)+8>>2]=D;c[l+(o*20|0)+12>>2]=y;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else o=Di(J,92,B,D,y)|0;p=c[J>>2]|0;do if(a[p+81>>0]|0){if((D|0)!=-12)kg(p,D,r)}else{if((o|0)<0)o=(c[w>>2]|0)+-1|0;p=c[J+104>>2]|0;q=p+(o*20|0)|0;if((D|0)<=-1?(E=p+(o*20|0)+1|0,(a[E>>0]|0)==0):0){if((D|0)==-3){c[p+(o*20|0)+16>>2]=r;a[E>>0]=-3;break}if(!r)break;c[p+(o*20|0)+16>>2]=r;a[E>>0]=D;if((D|0)!=-12)break;l=r+12|0;c[l>>2]=(c[l>>2]|0)+1;break}Ei(J,q,r,D)}while(0);o=c[w>>2]|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=29;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=K;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=y;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else o=Di(J,29,K,H,y)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){H=c[J+104>>2]|0;a[H+(o*20|0)+1>>0]=-3;c[H+(o*20|0)+16>>2]=0}if(y|0?(F=a[z>>0]|0,(F&255)<8):0){a[z>>0]=F+1<<24>>24;c[f+148+((F&255)<<2)>>2]=y}if(!C){o=f+28|0;if((c[o>>2]|0)>=(D|0))break;c[o>>2]=D;c[f+32>>2]=B;break}if(B|0?(G=a[z>>0]|0,(G&255)<8):0){a[z>>0]=G+1<<24>>24;c[f+148+((G&255)<<2)>>2]=B}}while(0);o=a[j+24>>0]|0;p=o<<24>>24==0;do if(p){if(((0==0?(c[(c[f>>2]|0)+32>>2]&524288|0)==0:0)?(c[f+116>>2]|0)==0:0)?(a[f+20>>0]|0)==0:0){Uj(f,787,2,0,-1,4);break}if(!((m|0)<1|p^1)){L=c[f+116>>2]|0;a[((L|0)==0?f:L)+21>>0]=1;L=141}else L=141}else L=141;while(0);do if((L|0)==141){o=o&255;p=J+108|0;q=c[p>>2]|0;if((c[J+112>>2]|0)>(q|0)){c[p>>2]=q+1;f=c[J+104>>2]|0;a[f+(q*20|0)>>0]=-106;b[f+(q*20|0)+2>>1]=0;c[f+(q*20|0)+4>>2]=o;c[f+(q*20|0)+8>>2]=m;c[f+(q*20|0)+12>>2]=0;c[f+(q*20|0)+16>>2]=0;a[f+(q*20|0)+1>>0]=0;break}else{Di(J,150,o,m,0)|0;break}}while(0);p=c[J+12>>2]|0;o=0-I|0;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0){mk(p,J,o);o=J+108|0}else{m=J+108|0;c[(c[p+64>>2]|0)+(o<<2)>>2]=c[m>>2];o=m}p=c[o>>2]|0;if((c[J+112>>2]|0)>(p|0)){c[o>>2]=p+1;m=c[J+104>>2]|0;a[m+(p*20|0)>>0]=117;b[m+(p*20|0)+2>>1]=0;c[m+(p*20|0)+4>>2]=K;c[m+(p*20|0)+8>>2]=0;c[m+(p*20|0)+12>>2]=0;c[m+(p*20|0)+16>>2]=0;a[m+(p*20|0)+1>>0]=0;return}else{Di(J,117,K,0,0)|0;return}}function Qm(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+80|0;N=P;M=P+40|0;L=P+8|0;O=c[f>>2]|0;q=f+8|0;n=c[q>>2]|0;a:do if(!n){if((c[f+116>>2]|0)==0?(b[O+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[O+272>>2]|0)if(!(a[O+81>>0]|0))p=15;else{K=0;break a}else{do if((e[O+276>>1]|0)>=224){n=O+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];K=O+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}n=O+296|0;o=c[n>>2]|0;if(!o){n=O+292|0;break}else{c[n>>2]=c[o>>2];K=O+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}}else n=O+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;p=15}while(0);if((p|0)==15)o=_d(O,224,0)|0;if(!o)K=0;else{n=o+104|0;p=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(p|0));c[o>>2]=O;n=O+4|0;p=c[n>>2]|0;if(p|0)c[p+4>>2]=o;c[o+8>>2]=p;c[o+4>>2]=0;c[n>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[q>>2]=o;Di(o,61,0,1,0)|0;K=o}}else K=n;while(0);do if((m|0)<0){n=d[j+24>>0]|0;o=K+108|0;p=c[o>>2]|0;if((c[K+112>>2]|0)>(p|0)){c[o>>2]=p+1;H=c[K+104>>2]|0;a[H+(p*20|0)>>0]=46;b[H+(p*20|0)+2>>1]=0;c[H+(p*20|0)+4>>2]=n;c[H+(p*20|0)+8>>2]=0;c[H+(p*20|0)+12>>2]=0;c[H+(p*20|0)+16>>2]=0;a[H+(p*20|0)+1>>0]=0;H=p;break}else{H=Di(K,46,n,0,0)|0;break}}else H=0;while(0);t=j+20|0;if((c[t>>2]|0)>0){u=(i|0)==0;v=M+4|0;w=i+4|0;x=(k|0)==0;y=j+36|0;z=M+4|0;A=h+40|0;B=h+4|0;C=l+1|0;D=M+4|0;E=M+4|0;r=0;s=0;do{if(u)o=-1;else o=b[(c[w>>2]|0)+(s<<1)>>1]|0;p=o&65535;q=c[f>>2]|0;c[M>>2]=0;c[v>>2]=0;n=oj(q,168,M,0)|0;do if(!n)n=0;else{if(p<<16>>16>-1?(b[A>>1]|0)!=p<<16>>16:0){p=c[B>>2]|0;c[n+28>>2]=C+o;a[n+1>>0]=a[p+(o<<4)+13>>0]|0;o=c[p+(o<<4)+8>>2]|0;if(o|0){c[M>>2]=o;q=(Eu(o)|0)&1073741823;c[D>>2]=q;if((q|0)!=0?(F=oj(c[f>>2]|0,106,M,0)|0,(F|0)!=0):0){c[F+12>>2]=n;n=F+4|0;c[n>>2]=c[n>>2]|4352;n=F}break}o=c[c[q+8>>2]>>2]|0;c[M>>2]=o;if(o){q=(Eu(o)|0)&1073741823;c[E>>2]=q;if((q|0)!=0?(G=oj(c[f>>2]|0,106,M,0)|0,(G|0)!=0):0){c[G+12>>2]=n;n=G+4|0;c[n>>2]=c[n>>2]|4352;n=G}}else c[E>>2]=0;break}c[n+28>>2]=l;a[n+1>>0]=68}while(0);o=c[(c[(c[j>>2]|0)+4>>2]|0)+(c[(x?y:k+(s<<2)|0)>>2]<<16>>16<<4)>>2]|0;c[M>>2]=o;if(!o)o=0;else o=(Eu(o)|0)&1073741823;c[z>>2]=o;r=Xk(O,r,ej(f,53,n,oj(O,59,M,0)|0)|0)|0;s=s+1|0}while((s|0)<(c[t>>2]|0));n=j}else{r=0;n=j}if((m|0)>0?(c[n>>2]|0)==(h|0):0){if(!(c[h+36>>2]&32)){n=c[f>>2]|0;c[M>>2]=0;c[M+4>>2]=0;n=oj(n,168,M,0)|0;if(!n)n=0;else{c[n+28>>2]=l;a[n+1>>0]=68}o=c[g+48>>2]|0;c[M>>2]=0;c[M+4>>2]=0;p=oj(O,162,M,0)|0;if(p|0){c[p+44>>2]=h;c[p+28>>2]=o;b[p+32>>1]=-1}n=ej(f,52,n,p)|0}else{C=i+50|0;if(!(b[C>>1]|0))n=0;else{y=i+4|0;z=M+4|0;A=h+4|0;B=M+4|0;u=h+40|0;v=l+1|0;w=M+4|0;x=M+4|0;n=0;t=0;do{p=b[(c[y>>2]|0)+(t<<1)>>1]|0;q=c[f>>2]|0;c[M>>2]=0;c[z>>2]=0;o=oj(q,168,M,0)|0;s=p<<16>>16;do if(!o)p=0;else{if(p<<16>>16>-1?(b[u>>1]|0)!=p<<16>>16:0){p=c[A>>2]|0;c[o+28>>2]=v+s;a[o+1>>0]=a[p+(s<<4)+13>>0]|0;p=c[p+(s<<4)+8>>2]|0;if(p|0){c[M>>2]=p;h=(Eu(p)|0)&1073741823;c[w>>2]=h;if((h|0)!=0?(I=oj(c[f>>2]|0,106,M,0)|0,(I|0)!=0):0){c[I+12>>2]=o;o=I+4|0;c[o>>2]=c[o>>2]|4352;o=I}p=o;break}p=c[c[q+8>>2]>>2]|0;c[M>>2]=p;if(p){h=(Eu(p)|0)&1073741823;c[x>>2]=h;if((h|0)!=0?(J=oj(c[f>>2]|0,106,M,0)|0,(J|0)!=0):0){c[J+12>>2]=o;o=J+4|0;c[o>>2]=c[o>>2]|4352;o=J}}else c[x>>2]=0;p=o;break}c[o+28>>2]=l;a[o+1>>0]=68;p=o}while(0);o=c[(c[A>>2]|0)+(s<<4)>>2]|0;c[M>>2]=o;if(!o)o=0;else o=(Eu(o)|0)&1073741823;c[B>>2]=o;n=Xk(O,n,ej(f,45,p,oj(O,59,M,0)|0)|0)|0;t=t+1|0}while(t>>>0<(e[C>>1]|0)>>>0)}n=ej(f,19,n,0)|0}r=Xk(O,r,n)|0}s=L+8|0;c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=0;c[s+16>>2]=0;c[s+20>>2]=0;c[L+4>>2]=g;c[L>>2]=f;s=(r|0)==0;do if(!s){p=L+24|0;b[p>>1]=0;c[M>>2]=f;c[M+4>>2]=125;c[M+8>>2]=126;c[M+12>>2]=0;c[M+24>>2]=L;n=r+24|0;o=f+208|0;L=(c[o>>2]|0)+(c[n>>2]|0)|0;c[o>>2]=L;o=c[(c[f>>2]|0)+120>>2]|0;if((o|0)<(L|0)){c[N>>2]=o;cd(f,41637,N);break}else{_j(M,r)|0;N=(c[M>>2]|0)+208|0;c[N>>2]=(c[N>>2]|0)-(c[n>>2]|0);N=r+4|0;c[N>>2]=c[N>>2]|b[p>>1]&-32752&65535;break}}while(0);if(!(c[f+36>>2]|0)){q=ql(f,g,r,0,0,0,0)|0;n=d[j+24>>0]|0;o=K+108|0;p=c[o>>2]|0;if((c[K+112>>2]|0)>(p|0)){c[o>>2]=p+1;j=c[K+104>>2]|0;a[j+(p*20|0)>>0]=-106;b[j+(p*20|0)+2>>1]=0;c[j+(p*20|0)+4>>2]=n;c[j+(p*20|0)+8>>2]=m;c[j+(p*20|0)+12>>2]=0;c[j+(p*20|0)+16>>2]=0;a[j+(p*20|0)+1>>0]=0}else Di(K,150,n,m,0)|0;if(q|0)sl(q)}if(!s)ni(O,r);if(!H){Ra=P;return}o=c[K+108>>2]|0;if(!(a[(c[K>>2]|0)+81>>0]|0))n=(c[K+104>>2]|0)+(((H|0)<0?o+-1|0:H)*20|0)|0;else n=59308;c[n+8>>2]=o;Ra=P;return}function Rm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;aa=Ra;Ra=Ra+48|0;V=aa+16|0;Q=aa+36|0;T=aa+32|0;W=aa+8|0;R=aa;S=aa+24|0;$=c[f>>2]|0;_=(i|0)!=0;i=_&1;Y=a[h+25+i>>0]|0;U=Y<<24>>24==7;if(U?!(0==0?(c[$+32>>2]&524288|0)==0:0):0){$=0;Ra=aa;return $|0}Z=h+28+(i<<2)|0;i=c[Z>>2]|0;if(Y<<24>>24==0|(i|0)!=0){$=i;Ra=aa;return $|0}c[Q>>2]=0;c[T>>2]=0;a:do if(!(Om(f,g,h,Q,T)|0)){u=h+20|0;if((c[u>>2]|0)>0){w=29616;v=c[w>>2]|0;w=c[w+4>>2]|0;y=29624;x=c[y>>2]|0;y=c[y+4>>2]|0;z=h+36|0;A=g+4|0;B=g+40|0;C=S+4|0;D=R+4|0;P=Y<<24>>24!=7&(_|Y<<24>>24!=10);E=$+272|0;F=$+276|0;G=$+81|0;H=$+288|0;I=$+300|0;J=f+200|0;K=$+296|0;M=$+284|0;N=$+292|0;O=f+272|0;s=0;t=0;m=0;j=0;while(1){k=V;c[k>>2]=v;c[k+4>>2]=w;k=W;c[k>>2]=x;c[k+4>>2]=y;k=c[T>>2]|0;k=c[((k|0)==0?z:k+(t<<2)|0)>>2]|0;i=c[Q>>2]|0;if(!i)i=B;else i=(c[i+4>>2]|0)+(t<<1)|0;i=c[(c[A>>2]|0)+(b[i>>1]<<4)>>2]|0;c[S>>2]=i;if(!i)i=0;else i=(Eu(i)|0)&1073741823;c[C>>2]=i;i=c[(c[(c[h>>2]|0)+4>>2]|0)+(k<<4)>>2]|0;c[R>>2]=i;if(!i)i=0;else i=(Eu(i)|0)&1073741823;c[D>>2]=i;r=oj($,59,V,0)|0;r=ej(f,134,r,oj($,59,S,0)|0)|0;j=Xk($,j,ej(f,53,r,oj($,59,R,0)|0)|0)|0;if(_){q=oj($,59,V,0)|0;q=ej(f,134,q,oj($,59,S,0)|0)|0;r=oj($,59,W,0)|0;s=Xk($,s,ej(f,45,q,ej(f,134,r,oj($,59,S,0)|0)|0)|0)|0}b:do if(P){c:do switch(Y<<24>>24){case 10:{i=ej(f,134,oj($,59,W,0)|0,oj($,59,S,0)|0)|0;break}case 9:{i=c[(c[(c[h>>2]|0)+4>>2]|0)+(k<<4)+4>>2]|0;if(i|0){i=dk($,i,0,0)|0;break c}d:do if(c[E>>2]|0)if(!(a[G>>0]|0))X=28;else{i=0;break c}else{do if((e[F>>1]|0)<52)i=H;else{i=c[I>>2]|0;if(i|0){c[I>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break d}i=c[K>>2]|0;if(!i){i=N;break}c[K>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break d}while(0);c[i>>2]=(c[i>>2]|0)+1;X=28}while(0);if((X|0)==28){X=0;i=_d($,52,0)|0}if(i){k=i;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[i>>0]=114;b[i+34>>1]=-1;c[i+24>>2]=1}break}default:{do if(c[E>>2]|0)if(!(a[G>>0]|0))X=39;else{i=0;break c}else{if((e[F>>1]|0)>=52){i=c[I>>2]|0;if(i|0){c[I>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break}i=c[K>>2]|0;if(!i)i=N;else{c[K>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break}}else i=H;c[i>>2]=(c[i>>2]|0)+1;X=39}while(0);if((X|0)==39){X=0;i=_d($,52,0)|0}if(i){k=i;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[i>>0]=114;b[i+34>>1]=-1;c[i+24>>2]=1}}}while(0);r=nj(c[f>>2]|0,m,i)|0;if(r){q=(c[r>>2]|0)+-1|0;l=c[f>>2]|0;o=c[R>>2]|0;p=c[D>>2]|0;e:do if(o){m=Sv(p|0,0,1,0)|0;n=L()|0;f:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=54;else{m=0;break e}else{do if(0<0|(0==0?p>>>0<(e[l+276>>1]|0)>>>0:0)){k=l+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];n=l+284|0;c[n>>2]=(c[n>>2]|0)+1;break f}k=l+296|0;i=c[k>>2]|0;if(!i){i=l+292|0;break}else{c[k>>2]=c[i>>2];n=l+284|0;c[n>>2]=(c[n>>2]|0)+1;break f}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=54}while(0);if((X|0)==54){X=0;i=_d(l,m,n)|0}if(i){ew(i|0,o|0,p|0)|0;a[i+p>>0]=0;m=i}else m=0}else m=0;while(0);c[r+4+(q*20|0)+4>>2]=m;if((d[J>>0]|0)>1){l=c[f>>2]|0;g:do if(!l){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;X=81;break}i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){q=c[14978]|0;p=Tv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;o=L()|0;c[14768]=((o|0)<0|(o|0)==0&p>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=r;break b}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){i=r;break b}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=81;break g}k=l+296|0;i=c[k>>2]|0;if(!i){i=l+292|0;break}else{c[k>>2]=c[i>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=81;break g}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(l,16,0)|0;X=81}while(0);if((X|0)==81){X=0;if(!i){i=r;break}}o=i+4|0;p=o;a[p>>0]=0;a[p+1>>0]=0;a[p+2>>0]=0;a[p+3>>0]=0;o=o+4|0;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;c[i>>2]=m;o=R;p=c[o+4>>2]|0;q=i+4|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;c[i+12>>2]=c[O>>2];c[O>>2]=i;i=r}else i=r}else i=0}else i=m;while(0);t=t+1|0;if((t|0)>=(c[u>>2]|0)){t=i;break}else m=i}}else{s=0;t=0;j=0}i=c[T>>2]|0;do if(i|0){if($|0){if(c[$+480>>2]|0){Xd($,i);break}T=i;if((c[$+304>>2]|0)>>>0<=T>>>0?(c[$+308>>2]|0)>>>0>T>>>0:0){T=$+300|0;c[i>>2]=c[T>>2];c[T>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{T=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=c[c[h>>2]>>2]|0;if(!o)n=0;else n=(Eu(o)|0)&1073741823;if(U){c[W>>2]=o;c[W+4>>2]=n;c[V>>2]=32436;c[V+4>>2]=29;i=oj($,71,V,0)|0;if(!i)i=nj(c[f>>2]|0,0,0)|0;else{a[i+1>>0]=2;i=nj(c[f>>2]|0,0,i)|0}r=mj(f,i,pj(f,0,W,0)|0,j,0,0,0,0,0)|0;p=0}else{r=0;p=j}q=$+272|0;i=(c[q>>2]|0)+1|0;c[q>>2]=i;m=n+81|0;h:do if(!$){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;X=124;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){W=c[14978]|0;V=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;U=L()|0;c[14768]=((U|0)<0|(U|0)==0&V>>>0<=W>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(j){i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;l=j;X=125}else{l=j;X=125}}else{m=0;k=0;i=s;l=0}}else{if(i){if(a[$+81>>0]|0){m=0;k=0;i=s;l=0;break}}else{do if(!(0<0|(0==0?(e[$+276>>1]|0)>>>0<m>>>0:0))){j=$+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];X=$+284|0;c[X>>2]=(c[X>>2]|0)+1;X=124;break h}j=$+296|0;i=c[j>>2]|0;if(!i){i=$+292|0;break}else{c[j>>2]=c[i>>2];X=$+284|0;c[X>>2]=(c[X>>2]|0)+1;X=124;break h}}else i=$+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d($,m,0)|0;X=124}while(0);if((X|0)==124)if(!i){m=0;k=0;i=s;l=0}else{l=i;X=125}if((X|0)==125){gw(l|0,0,m|0)|0;k=l+36|0;c[l+28>>2]=k;W=l+80|0;c[l+48>>2]=W;ew(W|0,o|0,n|0)|0;if(!p)i=0;else i=dk($,p,1,0)|0;c[l+52>>2]=i;W=gk($,t,1)|0;c[l+56>>2]=W;W=fk($,r,1)|0;c[l+44>>2]=W;if(!s){m=l;i=0}else{j=ej(f,19,s,0)|0;if(!j)i=0;else i=dk($,j,1,0)|0;c[l+12>>2]=i;m=l;i=j}}c[q>>2]=(c[q>>2]|0)+-1;if(p|0)ni($,p);if(i|0)ni($,i);if(t|0)ri($,t);if(r|0)pi($,r,1);if((a[$+81>>0]|0)!=1){switch(Y<<24>>24){case 7:{i=-125;break}case 10:{if(_)X=159;else i=121;break}default:X=159}if((X|0)==159)i=122;a[k>>0]=i;c[k+4>>2]=m;$=c[g+72>>2]|0;c[m+20>>2]=$;c[m+24>>2]=$;c[Z>>2]=m;a[m+8>>0]=_?122:121;$=l;Ra=aa;return $|0}if(l|0){j=c[l+28>>2]|0;i=c[j+16>>2]|0;if(i|0)ni($,i);i=c[j+20>>2]|0;if(i|0)ri($,i);i=c[j+8>>2]|0;if(i|0)pi($,i,1);i=c[l+12>>2]|0;if(i|0)ni($,i);if(c[$+480>>2]|0){Xd($,m);break}i=l;do if((c[$+304>>2]|0)>>>0<=i>>>0){if((c[$+308>>2]|0)>>>0<=i>>>0)break;$=$+300|0;c[l>>2]=c[$>>2];c[$>>2]=l;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{$=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}while(0);$=0;Ra=aa;return $|0}\nfunction Sm(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;p=c[d+8>>2]|0;e=c[d+112>>2]|0;if(!e)return;r=(c[d>>2]|0)+16|0;s=d+19|0;t=d+44|0;n=p+108|0;u=p+112|0;o=p+104|0;while(1){j=c[r>>2]|0;k=e+8|0;l=c[k>>2]|0;m=c[e+12>>2]|0;f=a[s>>0]|0;if(!(f<<24>>24)){i=(c[t>>2]|0)+1|0;c[t>>2]=i}else{i=f+-1<<24>>24;a[s>>0]=i;i=c[d+148+((i&255)<<2)>>2]|0}g=m+2|0;f=c[n>>2]|0;h=f+7|0;if((c[u>>2]|0)>(f|0)){c[n>>2]=f+1;v=c[o>>2]|0;a[v+(f*20|0)>>0]=55;b[v+(f*20|0)+2>>1]=0;c[v+(f*20|0)+4>>2]=g;c[v+(f*20|0)+8>>2]=h;c[v+(f*20|0)+12>>2]=m;c[v+(f*20|0)+16>>2]=0;a[v+(f*20|0)+1>>0]=0}else Di(p,55,g,h,m)|0;Gj(d,0,c[k>>2]|0,c[(c[j+(l<<4)+12>>2]|0)+72>>2]|0,109);f=ed(p,5,18320)|0;if(!f){e=14;break}v=m+1|0;c[f+4>>2]=v;c[f+28>>2]=v;c[f+44>>2]=m+-1;c[f+52>>2]=i;c[f+68>>2]=i;c[f+72>>2]=v;b[f+62>>1]=8;if(i|0?(q=a[s>>0]|0,(q&255)<8):0){a[s>>0]=q+1<<24>>24;c[d+148+((q&255)<<2)>>2]=i}e=c[e>>2]|0;if(!e){e=14;break}}if((e|0)==14)return}function Tm(f,g,h,i,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;Ja=Ra;Ra=Ra+48|0;T=Ja+16|0;S=Ja+8|0;P=Ja;Q=Ja+20|0;Ha=(l|0)!=0;U=c[f>>2]|0;Ia=f+8|0;s=c[Ia>>2]|0;a:do if(!s){if((c[f+116>>2]|0)==0?(b[U+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[U+272>>2]|0)if(!(a[U+81>>0]|0))Ca=15;else{Ga=0;break a}else{do if((e[U+276>>1]|0)>=224){s=U+300|0;t=c[s>>2]|0;if(t|0){c[s>>2]=c[t>>2];Ga=U+284|0;c[Ga>>2]=(c[Ga>>2]|0)+1;break b}s=U+296|0;t=c[s>>2]|0;if(!t){s=U+292|0;break}else{c[s>>2]=c[t>>2];Ga=U+284|0;c[Ga>>2]=(c[Ga>>2]|0)+1;break b}}else s=U+288|0;while(0);c[s>>2]=(c[s>>2]|0)+1;Ca=15}while(0);if((Ca|0)==15)t=_d(U,224,0)|0;if(!t)Ga=0;else{y=t+104|0;z=y+120|0;do{c[y>>2]=0;y=y+4|0}while((y|0)<(z|0));c[t>>2]=U;s=U+4|0;u=c[s>>2]|0;if(u|0)c[u+4>>2]=t;c[t+8>>2]=u;c[t+4>>2]=0;c[s>>2]=t;c[t+20>>2]=381479589;c[t+12>>2]=f;c[Ia>>2]=t;Di(t,61,0,1,0)|0;Ga=t}}else Ga=s;while(0);t=b[g+42>>1]|0;M=t<<16>>16;Fa=g+36|0;if(!(c[Fa>>2]&32)){Ea=0;Da=1}else{s=g+8|0;while(1){s=c[s>>2]|0;Ea=s+55|0;if(((d[Ea>>0]|d[Ea+1>>0]<<8)&3)==2)break;else s=s+20|0}Ea=s;Da=e[s+50>>1]|0}if(t<<16>>16>0){A=g+40|0;B=(q|0)==0;C=g+4|0;D=n<<24>>24==11;E=k+1|0;F=Ga+108|0;H=Ga+112|0;I=f+56|0;J=f+116|0;K=Ga+104|0;L=Ga+12|0;z=0;do{c:do if((z|0)!=(b[A>>1]|0)){if(!B?(c[q+(z<<2)>>2]|0)<0:0)break;u=c[C>>2]|0;s=a[u+(z<<4)+12>>0]|0;if(s<<24>>24){Ba=D?(s<<24>>24==11?2:s):n;s=Ba&255;if(Ba<<24>>24==5)s=(c[u+(z<<4)+4>>2]|0)==0?2:s;switch((s&255)<<24>>24){case 5:{Ca=33;break}case 2:{t=0;Ca=51;break}case 3:case 1:{t=0;break}default:{s=z+E|0;t=c[F>>2]|0;if((c[H>>2]|0)>(t|0)){c[F>>2]=t+1;Ba=c[K>>2]|0;a[Ba+(t*20|0)>>0]=50;b[Ba+(t*20|0)+2>>1]=0;c[Ba+(t*20|0)+4>>2]=s;c[Ba+(t*20|0)+8>>2]=o;c[Ba+(t*20|0)+12>>2]=0;c[Ba+(t*20|0)+16>>2]=0;a[Ba+(t*20|0)+1>>0]=0;break c}else{Di(Ga,50,s,o,0)|0;break c}}}do if((Ca|0)==33){Ca=0;t=(c[I>>2]|0)+-1|0;c[I>>2]=t;y=z+E|0;s=c[F>>2]|0;if((c[H>>2]|0)>(s|0)){c[F>>2]=s+1;Ba=c[K>>2]|0;a[Ba+(s*20|0)>>0]=51;b[Ba+(s*20|0)+2>>1]=0;c[Ba+(s*20|0)+4>>2]=y;c[Ba+(s*20|0)+8>>2]=t;c[Ba+(s*20|0)+12>>2]=0;c[Ba+(s*20|0)+16>>2]=0;a[Ba+(s*20|0)+1>>0]=0}else Di(Ga,51,y,t,0)|0;s=c[(c[C>>2]|0)+(z<<4)+4>>2]|0;do if(s){if((a[s>>0]|0)!=-88){O=Jj(f,s,y)|0;Ca=43;break}w=c[Ia>>2]|0;s=c[s+28>>2]|0;u=w+108|0;v=c[u>>2]|0;if((c[w+112>>2]|0)>(v|0)){c[u>>2]=v+1;Ba=c[w+104>>2]|0;a[Ba+(v*20|0)>>0]=78;b[Ba+(v*20|0)+2>>1]=0;c[Ba+(v*20|0)+4>>2]=s;c[Ba+(v*20|0)+8>>2]=y;c[Ba+(v*20|0)+12>>2]=0;c[Ba+(v*20|0)+16>>2]=0;a[Ba+(v*20|0)+1>>0]=0;break}else{Di(w,78,s,y,0)|0;break}}else{O=Jj(f,0,y)|0;Ca=43}while(0);do if(((Ca|0)==43?(0,(O|0)!=(y|0)):0)?(N=c[Ia>>2]|0,N|0):0){s=N+108|0;u=c[s>>2]|0;if((c[N+112>>2]|0)>(u|0)){c[s>>2]=u+1;Ca=c[N+104>>2]|0;a[Ca+(u*20|0)>>0]=79;b[Ca+(u*20|0)+2>>1]=0;c[Ca+(u*20|0)+4>>2]=O;c[Ca+(u*20|0)+8>>2]=y;c[Ca+(u*20|0)+12>>2]=0;c[Ca+(u*20|0)+16>>2]=0;a[Ca+(u*20|0)+1>>0]=0;break}else{Di(N,79,O,y,0)|0;break}}while(0);s=c[F>>2]|0;if((c[H>>2]|0)>(s|0)){c[F>>2]=s+1;Ca=c[K>>2]|0;a[Ca+(s*20|0)>>0]=51;b[Ca+(s*20|0)+2>>1]=0;c[Ca+(s*20|0)+4>>2]=y;c[Ca+(s*20|0)+8>>2]=t;c[Ca+(s*20|0)+12>>2]=0;c[Ca+(s*20|0)+16>>2]=0;a[Ca+(s*20|0)+1>>0]=0;s=2;Ca=51;break}else{Di(Ga,51,y,t,0)|0;s=2;Ca=51;break}}while(0);if((Ca|0)==51){Ca=0;u=c[J>>2]|0;a[((u|0)==0?f:u)+21>>0]=1;u=c[C>>2]|0}w=c[u+(z<<4)>>2]|0;c[P>>2]=c[g>>2];c[P+4>>2]=w;w=dd(U,40358,P)|0;u=z+E|0;v=c[F>>2]|0;if((c[H>>2]|0)>(v|0)){c[F>>2]=v+1;Ba=c[K>>2]|0;a[Ba+(v*20|0)>>0]=68;b[Ba+(v*20|0)+2>>1]=0;c[Ba+(v*20|0)+4>>2]=1299;c[Ba+(v*20|0)+8>>2]=s;c[Ba+(v*20|0)+12>>2]=u;c[Ba+(v*20|0)+16>>2]=0;a[Ba+(v*20|0)+1>>0]=0}else Di(Ga,68,1299,s,u)|0;s=c[Ga>>2]|0;do if(a[s+81>>0]|0){if(w|0){if(s|0){if(c[s+480>>2]|0){Xd(s,w);break}Ba=w;if((c[s+304>>2]|0)>>>0<=Ba>>>0?(c[s+308>>2]|0)>>>0>Ba>>>0:0){Ba=s+300|0;c[w>>2]=c[Ba>>2];c[Ba>>2]=w;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](w);break}else{Ba=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);break}}}else{Aa=c[K>>2]|0;Ba=(c[F>>2]|0)+-1|0;a[Aa+(Ba*20|0)+1>>0]=-7;c[Aa+(Ba*20|0)+16>>2]=w}while(0);u=c[F>>2]|0;if((u|0)>0)b[(c[K>>2]|0)+((u+-1|0)*20|0)+2>>1]=1;if(t|0){v=c[L>>2]|0;s=~t;if(((c[v+56>>2]|0)+(c[v+60>>2]|0)|0)<0){mk(v,Ga,s);break}else{c[(c[v+64>>2]|0)+(s<<2)>>2]=u;break}}}}while(0);z=z+1|0}while((z|0)!=(M|0))}B=c[g+24>>2]|0;if(B|0?(0==0?(c[U+32>>2]&512|0)==0:0):0){C=f+52|0;c[C>>2]=~k;t=n<<24>>24==11?2:n&255;d:do if((c[B>>2]|0)>0){D=f+56|0;y=Q+20|0;z=Q+4|0;A=Q+24|0;E=Ga+108|0;F=Ga+112|0;H=Ga+12|0;I=Ga+104|0;if(!q){w=0;while(1){Aa=c[B+4+(w*20|0)>>2]|0;v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,Aa,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0)mk(u,Ga,s);else c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];w=w+1|0;if((w|0)>=(c[B>>2]|0))break d}}if(!(m<<24>>24)){w=0;do{s=c[B+4+(w*20|0)>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[z>>2]=136;c[A>>2]=q;do if((s|0)!=0?(_j(Q,s)|0,(a[y>>0]&-3)<<24>>24!=0):0){v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,s,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0){mk(u,Ga,s);break}else{c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];break}}while(0);w=w+1|0}while((w|0)<(c[B>>2]|0))}else{w=0;do{s=c[B+4+(w*20|0)>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[z>>2]=136;c[A>>2]=q;do if((s|0)!=0?(_j(Q,s)|0,(a[y>>0]|0)!=0):0){v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,s,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0){mk(u,Ga,s);break}else{c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];break}}while(0);w=w+1|0}while((w|0)<(c[B>>2]|0))}}while(0);c[C>>2]=0}do if(r)if(c[r>>2]|0){t=c[r+16>>2]|0;if(t){s=Ga+108|0;u=c[s>>2]|0;if((c[Ga+112>>2]|0)>(u|0)){c[s>>2]=u+1;y=c[Ga+104>>2]|0;a[y+(u*20|0)>>0]=11;y=y+(u*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));Ba=t;Aa=u;break}else{Ba=t;Aa=Di(Ga,11,0,0,0)|0;break}}else{Ba=0;Aa=0}}else{n=4;r=0;Ba=0;Aa=0}else{r=0;Ba=0;Aa=0}while(0);if(m<<24>>24!=0&(Ea|0)==0){t=f+56|0;D=c[t>>2]|0;v=D+-1|0;c[t>>2]=v;t=a[g+48>>0]|0;s=n&255;t=n<<24>>24==11?(t<<24>>24==11?2:t&255):s;if((r|0)!=0?(c[r+16>>2]|0)==0:0){E=0;t=(c[r+8>>2]|0)==0?4:6}else Ca=135;do if((Ca|0)==135)if(!((t|0)!=5|(t|0)==(s|0)))if(c[g+8>>2]|0){s=Ga+108|0;t=c[s>>2]|0;if((c[Ga+112>>2]|0)>(t|0)){u=t+1|0;c[s>>2]=u;y=c[Ga+104>>2]|0;a[y+(t*20|0)>>0]=11;y=y+(t*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));E=u;t=5;break}else{E=(Di(Ga,11,0,0,0)|0)+1|0;t=5;break}}else{E=0;t=5}else E=0;while(0);C=Ga+108|0;s=c[C>>2]|0;B=Ga+112|0;if(Ha){if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;za=c[Ga+104>>2]|0;a[za+(s*20|0)>>0]=53;b[za+(s*20|0)+2>>1]=0;c[za+(s*20|0)+4>>2]=k;c[za+(s*20|0)+8>>2]=v;c[za+(s*20|0)+12>>2]=l;c[za+(s*20|0)+16>>2]=0;a[za+(s*20|0)+1>>0]=0}else Di(Ga,53,k,v,l)|0;s=c[C>>2]|0;if((s|0)>0)b[(c[Ga+104>>2]|0)+((s+-1|0)*20|0)+2>>1]=144}if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;za=c[Ga+104>>2]|0;a[za+(s*20|0)>>0]=31;b[za+(s*20|0)+2>>1]=0;c[za+(s*20|0)+4>>2]=i;c[za+(s*20|0)+8>>2]=v;c[za+(s*20|0)+12>>2]=k;c[za+(s*20|0)+16>>2]=0;a[za+(s*20|0)+1>>0]=0}else Di(Ga,31,i,v,k)|0;e:do switch(t|0){case 3:case 2:case 1:{Ca=151;break}case 5:{s=c[f>>2]|0;A=c[s+32>>2]|0;do if(!((0==0?(c[U+32>>2]&8192|0)==0:0)|(A&262144|0)==0&0==0)?(R=c[(c[s+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){z=c[g+72>>2]|0;if((z|0)!=(R|0)?(x=c[R+48>>2]|0,(x|0)!=0):0){y=g+68|0;s=0;do{w=c[x+8>>2]|0;do if((c[w+24>>2]|0)==(z|0)){u=c[w+4>>2]|0;v=c[g>>2]|0;za=a[u>>0]|0;t=(d[208+(za&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0;if(!(za<<24>>24==0|(t|0)!=0))do{u=u+1|0;v=v+1|0;za=a[u>>0]|0;t=(d[208+(za&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(t|0)!=0));if(t|0)break;if(!s)s=c[y>>2]|0;c[w+32>>2]=s;s=w}while(0);x=c[x>>2]|0}while((x|0)!=0);if(!s)Ca=170}else Ca=170;if((Ca|0)==170){s=c[g+68>>2]|0;if(!s){Ca=176;break}}t=0;u=s;do{if((a[u+8>>0]|0)==121)t=t|d[u+9>>0];u=c[u+32>>2]|0}while((u|0)!=0);if((s|0)==0|(t|0)==0)Ca=176}else Ca=176;while(0);do if((Ca|0)==176){if(!((A&16384|0)==0&0==0)){y=c[g>>2]|0;v=c[g+72>>2]|0;w=c[v+68>>2]|0;if(!w){t=v+60|0;s=v+64|0}else{t=a[y>>0]|0;if(!(t<<24>>24))s=0;else{s=0;u=y;do{u=u+1|0;s=G(s+(d[208+(t&255)>>0]|0)|0,-1640531535)|0;t=a[u>>0]|0}while(t<<24>>24!=0)}s=(s>>>0)%((c[v+56>>2]|0)>>>0)|0;t=w+(s<<3)|0;s=w+(s<<3)+4|0}t=c[t>>2]|0;f:do if(!t)s=59292;else{x=d[208+(d[y>>0]|0)>>0]|0;while(1){s=c[s>>2]|0;t=t+-1|0;v=c[s+12>>2]|0;za=a[v>>0]|0;u=(d[208+(za&255)>>0]|0)-x|0;if(!(za<<24>>24==0|(u|0)!=0)){w=y;do{v=v+1|0;w=w+1|0;za=a[v>>0]|0;u=(d[208+(za&255)>>0]|0)-(d[208+(d[w>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(u|0)!=0))}if(!u)break f;if(!t){s=59292;break}}}while(0);if(c[s+8>>2]|0){s=0;break}if(c[g+16>>2]|0){s=0;break}}if(!(c[g+8>>2]|0)){u=1;break e}u=c[f+116>>2]|0;a[((u|0)==0?f:u)+20>>0]=1;Mm(f,g,i,j,0,-1);u=1;break e}while(0);u=c[f+116>>2]|0;a[((u|0)==0?f:u)+20>>0]=1;Im(f,g,s,i,j,k,1,0,5,1,-1);u=1;break}case 6:{za=r+8|0;Ca=r+12|0;tj(f,ik(c[f>>2]|0,c[r+20>>2]|0,0)|0,c[za>>2]|0,c[Ca>>2]|0,2,r);c[za>>2]=0;c[Ca>>2]=0;Ca=196;break}case 4:{Ca=196;break}default:{t=2;Ca=151}}while(0);do if((Ca|0)==151){s=b[g+40>>1]|0;v=c[f>>2]|0;u=c[g>>2]|0;if(s<<16>>16>-1){s=c[(c[g+4>>2]|0)+(s<<16>>16<<4)>>2]|0;c[S>>2]=u;c[S+4>>2]=s;u=1555;s=dd(v,40358,S)|0}else{c[T>>2]=u;u=2579;s=dd(v,44808,T)|0}Uj(f,u,t,s,-7,2);u=0}else if((Ca|0)==196){s=c[C>>2]|0;if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;u=c[Ga+104>>2]|0;a[u+(s*20|0)>>0]=11;b[u+(s*20|0)+2>>1]=0;c[u+(s*20|0)+4>>2]=0;c[u+(s*20|0)+8>>2]=o;c[u+(s*20|0)+12>>2]=0;c[u+(s*20|0)+16>>2]=0;a[u+(s*20|0)+1>>0]=0;u=0;break}else{Di(Ga,11,0,o,0)|0;u=0;break}}while(0);t=c[Ga+12>>2]|0;s=0-D|0;if(((c[t+56>>2]|0)+(c[t+60>>2]|0)|0)<0)mk(t,Ga,s);else c[(c[t+64>>2]|0)+(s<<2)>>2]=c[C>>2];if(!E){v=0;za=0}else{v=c[C>>2]|0;if((c[B>>2]|0)>(v|0)){c[C>>2]=v+1;y=c[Ga+104>>2]|0;a[y+(v*20|0)>>0]=11;y=y+(v*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0))}else v=Di(Ga,11,0,0,0)|0;t=c[C>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))s=(c[Ga+104>>2]|0)+((((E|0)<1?t:E)+-1|0)*20|0)|0;else s=59308;c[s+8>>2]=t;za=E}}else{u=0;v=0;za=0}na=g+8|0;s=c[na>>2]|0;if(s){oa=Aa+1|0;pa=Ga+108|0;qa=Ga+112|0;ra=(Ba|0)==0;sa=f+56|0;ta=Ga+104|0;ua=k+1|0;va=(Aa|0)<0;wa=g+40|0;xa=~k;ya=f+52|0;ja=m<<24>>24==0;ka=Ga+12|0;la=n<<24>>24==11;ma=r+8|0;U=U+32|0;V=g+16|0;T=f+146|0;W=(Da|0)==1;m=g+72|0;X=f+19|0;Y=f+32|0;Z=f+28|0;_=g+68|0;$=r+28|0;aa=f+44|0;ba=Ea+50|0;ca=Da&65535;da=f+116|0;ea=r+20|0;fa=r+12|0;ga=Ea+4|0;ha=Ea+32|0;ia=l+1|0;S=0;w=0;t=0;while(1){H=h+(S<<2)|0;g:do if(c[H>>2]|0){Q=(Ba|0)==(s|0);if(Q){w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;y=c[ta>>2]|0;a[y+(w*20|0)>>0]=11;y=y+(w*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));y=w}else y=Di(Ga,11,0,0,0)|0;x=c[pa>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))w=(c[ta>>2]|0)+((va?x+-1|0:Aa)*20|0)|0;else w=59308;c[w+8>>2]=x;q=oa}else{q=(c[sa>>2]|0)+-1|0;c[sa>>2]=q;y=w}if((ra|Q)&t<<24>>24==0){zk(Ga,g,ua);R=1}else R=t;O=S+j|0;t=s+36|0;if(c[t>>2]|0){w=c[H>>2]|0;x=c[pa>>2]|0;if((c[qa>>2]|0)>(x|0)){c[pa>>2]=x+1;P=c[ta>>2]|0;a[P+(x*20|0)>>0]=73;b[P+(x*20|0)+2>>1]=0;c[P+(x*20|0)+4>>2]=0;c[P+(x*20|0)+8>>2]=w;c[P+(x*20|0)+12>>2]=0;c[P+(x*20|0)+16>>2]=0;a[P+(x*20|0)+1>>0]=0}else Di(Ga,73,0,w,0)|0;c[ya>>2]=xa;t=c[t>>2]|0;w=c[f>>2]|0;if(!t)t=0;else t=dk(w,t,0,0)|0;if(!(a[w+81>>0]|0))Tj(f,t,q,16);if(t|0)ni(w,t);c[ya>>2]=0}t=c[H>>2]|0;P=t+1|0;N=s+52|0;if(!(b[N>>1]|0))x=0;else{E=s+4|0;F=s+40|0;D=0;do{t=b[(c[E>>2]|0)+(D<<1)>>1]|0;switch(t<<16>>16){case -2:{c[ya>>2]=xa;t=c[(c[F>>2]|0)+4+(D*20|0)>>2]|0;A=D+P|0;C=c[f>>2]|0;if(!t)B=0;else B=dk(C,t,0,0)|0;h:do if(!(a[C+81>>0]|0)){do if(B){if((a[B>>0]|0)!=-88){z=Jj(f,B,A)|0;break}t=c[Ia>>2]|0;w=c[B+28>>2]|0;x=t+108|0;z=c[x>>2]|0;if((c[t+112>>2]|0)>(z|0)){c[x>>2]=z+1;Ca=c[t+104>>2]|0;a[Ca+(z*20|0)>>0]=78;b[Ca+(z*20|0)+2>>1]=0;c[Ca+(z*20|0)+4>>2]=w;c[Ca+(z*20|0)+8>>2]=A;c[Ca+(z*20|0)+12>>2]=0;c[Ca+(z*20|0)+16>>2]=0;a[Ca+(z*20|0)+1>>0]=0;Ca=252;break h}else{Di(t,78,w,A,0)|0;Ca=252;break h}}else z=Jj(f,0,A)|0;while(0);if((z|0)==(A|0)){Ca=251;break}t=c[Ia>>2]|0;if(!t){Ca=251;break}w=t+108|0;x=c[w>>2]|0;if((c[t+112>>2]|0)>(x|0)){c[w>>2]=x+1;Ca=c[t+104>>2]|0;a[Ca+(x*20|0)>>0]=79;b[Ca+(x*20|0)+2>>1]=0;c[Ca+(x*20|0)+4>>2]=z;c[Ca+(x*20|0)+8>>2]=A;c[Ca+(x*20|0)+12>>2]=0;c[Ca+(x*20|0)+16>>2]=0;a[Ca+(x*20|0)+1>>0]=0;Ca=251;break}else{Di(t,79,z,A,0)|0;Ca=251;break}}else Ca=251;while(0);if((Ca|0)==251?(Ca=0,B|0):0)Ca=252;if((Ca|0)==252){Ca=0;ni(C,B)}c[ya>>2]=0;break}case -1:{z=k;Ca=255;break}default:{z=t<<16>>16==(b[wa>>1]|0)?k:ua+(t<<16>>16)|0;Ca=255}}do if((Ca|0)==255){Ca=0;x=((t&65535)>>>15)+79<<16>>16;t=D+P|0;w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;M=c[ta>>2]|0;a[M+(w*20|0)>>0]=x;b[M+(w*20|0)+2>>1]=0;c[M+(w*20|0)+4>>2]=z;c[M+(w*20|0)+8>>2]=t;c[M+(w*20|0)+12>>2]=0;c[M+(w*20|0)+16>>2]=0;a[M+(w*20|0)+1>>0]=0;break}else{Di(Ga,x&65535,z,t,0)|0;break}}while(0);D=D+1|0;t=b[N>>1]|0}while(D>>>0<(t&65535)>>>0);x=t&65535;t=c[H>>2]|0}w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;M=c[ta>>2]|0;a[M+(w*20|0)>>0]=92;b[M+(w*20|0)+2>>1]=0;c[M+(w*20|0)+4>>2]=P;c[M+(w*20|0)+8>>2]=x;c[M+(w*20|0)+12>>2]=t;c[M+(w*20|0)+16>>2]=0;a[M+(w*20|0)+1>>0]=0}else Di(Ga,92,P,x,t)|0;F=(Ea|0)==(s|0);if(ja&(Ha&F)){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break}}t=a[s+54>>0]|0;if(!(t<<24>>24)){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break}}if(Q)E=(c[ma>>2]|0)==0?4:6;else E=(la?(t<<24>>24==11?2:t):n)&255;i:do if(!S){if(!(F&(E|0)==5&(c[s+20>>2]|0)==0))break;D=c[U>>2]|0;do if(!((D&8192|0)==0&0==0)){t=c[f>>2]|0;if(0==0?(c[t+32>>2]&262144|0)==0:0)break;t=c[(c[t+16>>2]|0)+28>>2]|0;if(a[T>>0]|0)break;C=c[m>>2]|0;do if((C|0)!=(t|0)){t=c[t+48>>2]|0;if(!t){Ca=291;break}B=t;t=0;do{A=c[B+8>>2]|0;do if((c[A+24>>2]|0)==(C|0)){x=c[A+4>>2]|0;z=c[g>>2]|0;M=a[x>>0]|0;w=(d[208+(M&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0;if(!(M<<24>>24==0|(w|0)!=0))do{x=x+1|0;z=z+1|0;M=a[x>>0]|0;w=(d[208+(M&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(w|0)!=0));if(w|0)break;if(!t)t=c[_>>2]|0;c[A+32>>2]=t;t=A}while(0);B=c[B>>2]|0}while((B|0)!=0);if(!t)Ca=291}else Ca=291;while(0);if((Ca|0)==291){Ca=0;t=c[_>>2]|0;if(!t)break}w=0;x=t;do{if((a[x+8>>0]|0)==121)w=w|d[x+9>>0];x=c[x+32>>2]|0}while((x|0)!=0);if(!((t|0)==0|(w|0)==0))break i}while(0);if(!((D&16384|0)==0&0==0)){if(c[V>>2]|0)break;C=c[g>>2]|0;z=c[m>>2]|0;A=c[z+68>>2]|0;if(!A){w=z+60|0;t=z+64|0}else{w=a[C>>0]|0;if(!(w<<24>>24))t=0;else{t=0;x=C;do{x=x+1|0;t=G(t+(d[208+(w&255)>>0]|0)|0,-1640531535)|0;w=a[x>>0]|0}while(w<<24>>24!=0)}t=(t>>>0)%((c[z+56>>2]|0)>>>0)|0;w=A+(t<<3)|0;t=A+(t<<3)+4|0}w=c[w>>2]|0;j:do if(!w)t=59292;else{B=d[208+(d[C>>0]|0)>>0]|0;while(1){t=c[t>>2]|0;w=w+-1|0;z=c[t+12>>2]|0;M=a[z>>0]|0;x=(d[208+(M&255)>>0]|0)-B|0;if(!(M<<24>>24==0|(x|0)!=0)){A=C;do{z=z+1|0;A=A+1|0;M=a[z>>0]|0;x=(d[208+(M&255)>>0]|0)-(d[208+(d[A>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(x|0)!=0))}if(!x)break j;if(!w){t=59292;break}}}while(0);if(c[t+8>>2]|0)break}w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break g}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break g}}while(0);w=e[s+50>>1]|0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;M=c[ta>>2]|0;a[M+(t*20|0)>>0]=27;b[M+(t*20|0)+2>>1]=0;c[M+(t*20|0)+4>>2]=O;c[M+(t*20|0)+8>>2]=q;c[M+(t*20|0)+12>>2]=P;c[M+(t*20|0)+16>>2]=0;a[M+(t*20|0)+1>>0]=0}else t=Di(Ga,27,O,q,P)|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0)){M=c[ta>>2]|0;a[M+(t*20|0)+1>>0]=-3;c[M+(t*20|0)+16>>2]=w}do if(!F)if(W){t=a[X>>0]|0;if(!(t<<24>>24)){M=(c[aa>>2]|0)+1|0;c[aa>>2]=M;break}else{M=t+-1<<24>>24;a[X>>0]=M;M=c[f+148+((M&255)<<2)>>2]|0;break}}else{t=c[Y>>2]|0;w=c[Z>>2]|0;if((w|0)<(Da|0)){M=c[aa>>2]|0;c[aa>>2]=M+Da;M=M+1|0;break}else{c[Y>>2]=t+Da;c[Z>>2]=w-Da;M=t;break}}else M=P;while(0);do if(Ha|(E|0)==5){if(!(c[Fa>>2]&32)){t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=-121;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=O;c[L+(t*20|0)+8>>2]=M;c[L+(t*20|0)+12>>2]=0;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else Di(Ga,135,O,M,0)|0;if(!Ha)break;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=53;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=M;c[L+(t*20|0)+8>>2]=q;c[L+(t*20|0)+12>>2]=l;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else Di(Ga,53,M,q,l)|0;t=c[pa>>2]|0;if((t|0)<=0)break;b[(c[ta>>2]|0)+((t+-1|0)*20|0)+2>>1]=144;break}do if(!F){if(!(b[ba>>1]|0))break;B=s+4|0;A=0;do{x=b[(c[ga>>2]|0)+(A<<1)>>1]|0;t=b[N>>1]|0;k:do if(!(t<<16>>16))t=-1;else{z=c[B>>2]|0;w=t&65535;t=0;while(1){if((b[z+(t<<1)>>1]|0)==x<<16>>16)break k;t=t+1|0;if(t>>>0>=w>>>0){t=-1;break}}}while(0);t=t<<16>>16;w=A+M|0;x=c[pa>>2]|0;if((c[qa>>2]|0)>(x|0)){c[pa>>2]=x+1;L=c[ta>>2]|0;a[L+(x*20|0)>>0]=90;b[L+(x*20|0)+2>>1]=0;c[L+(x*20|0)+4>>2]=O;c[L+(x*20|0)+8>>2]=t;c[L+(x*20|0)+12>>2]=w;c[L+(x*20|0)+16>>2]=0;a[L+(x*20|0)+1>>0]=0}else Di(Ga,90,O,t,w)|0;A=A+1|0}while(A>>>0<(e[ba>>1]|0)>>>0)}while(0);if(!Ha)break;D=s+55|0;D=((d[D>>0]|d[D+1>>0]<<8)&3)==2?P:M;t=b[ba>>1]|0;if(!(t<<16>>16))break;C=52;A=(c[pa>>2]|0)+(t&65535)|0;B=0;do{t=c[(c[ha>>2]|0)+(B<<2)>>2]|0;x=c[f>>2]|0;w=a[x+78>>0]|0;L=a[x+165>>0]|0;x=Zi(x,w,t,L&255)|0;do if(!(L<<24>>24)){if(!x){x=_i(f,w,0,t)|0;break}if(c[x+12>>2]|0)break;x=_i(f,w,x,t)|0}while(0);w=(B|0)==((e[ba>>1]|0)+-1|0);A=w?q:A;C=w?53:C;w=ia+(b[(c[ga>>2]|0)+(B<<1)>>1]|0)|0;z=B+D|0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=C;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=w;c[L+(t*20|0)+8>>2]=A;c[L+(t*20|0)+12>>2]=z;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else t=Di(Ga,C,w,A,z)|0;do if(!(a[(c[Ga>>2]|0)+81>>0]|0)){if((t|0)<0)t=(c[pa>>2]|0)+-1|0;w=c[ta>>2]|0;z=w+(t*20|0)+1|0;if(a[z>>0]|0){Ei(Ga,w+(t*20|0)|0,x,-2);break}if(!x)break;c[w+(t*20|0)+16>>2]=x;a[z>>0]=-2}while(0);t=c[pa>>2]|0;if((t|0)>0)b[(c[ta>>2]|0)+((t+-1|0)*20|0)+2>>1]=144;B=B+1|0}while(B>>>0<(e[ba>>1]|0)>>>0)}while(0);switch((E&255)<<24>>24){case 3:case 2:case 1:{fl(f,E,s);break}case 6:{K=c[Ia>>2]|0;L=c[f>>2]|0;J=c[$>>2]|0;do if((J|0)!=(O|0)){if(!(c[Fa>>2]&32)){t=a[X>>0]|0;if(!(t<<24>>24)){z=(c[aa>>2]|0)+1|0;c[aa>>2]=z}else{z=t+-1<<24>>24;a[X>>0]=z;z=c[f+148+((z&255)<<2)>>2]|0}w=K+108|0;t=c[w>>2]|0;x=K+112|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=-121;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=O;c[Ca+(t*20|0)+8>>2]=z;c[Ca+(t*20|0)+12>>2]=0;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else Di(K,135,O,z,0)|0;t=c[w>>2]|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=30;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=J;c[Ca+(t*20|0)+8>>2]=0;c[Ca+(t*20|0)+12>>2]=z;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else Di(K,30,J,0,z)|0;if(!z)break;t=a[X>>0]|0;if((t&255)>=8)break;a[X>>0]=t+1<<24>>24;c[f+148+((t&255)<<2)>>2]=z;break}t=c[na>>2]|0;l:do if(!t)t=0;else while(1){Ca=t+55|0;if(((d[Ca>>0]|d[Ca+1>>0]<<8)&3)==2)break l;t=c[t+20>>2]|0;if(!t){t=0;break}}while(0);Ca=b[t+50>>1]|0;I=Ca&65535;F=c[aa>>2]|0;H=F+1|0;c[aa>>2]=F+I;if(!(Ca<<16>>16)){A=K+108|0;w=K+112|0}else{D=t+4|0;A=K+108|0;w=K+112|0;E=s+4|0;F=K+104|0;C=0;do{z=b[(c[D>>2]|0)+(C<<1)>>1]|0;t=b[N>>1]|0;m:do if(!(t<<16>>16))t=-1;else{B=c[E>>2]|0;x=t&65535;t=0;while(1){if((b[B+(t<<1)>>1]|0)==z<<16>>16)break m;t=t+1|0;if(t>>>0>=x>>>0){t=-1;break}}}while(0);t=t<<16>>16;x=C+H|0;z=c[A>>2]|0;if((c[w>>2]|0)>(z|0)){c[A>>2]=z+1;Ca=c[F>>2]|0;a[Ca+(z*20|0)>>0]=90;b[Ca+(z*20|0)+2>>1]=0;c[Ca+(z*20|0)+4>>2]=O;c[Ca+(z*20|0)+8>>2]=t;c[Ca+(z*20|0)+12>>2]=x;c[Ca+(z*20|0)+16>>2]=0;a[Ca+(z*20|0)+1>>0]=0}else Di(K,90,O,t,x)|0;C=C+1|0}while((C|0)!=(I|0))}t=c[A>>2]|0;if((c[w>>2]|0)>(t|0)){c[A>>2]=t+1;z=c[K+104>>2]|0;a[z+(t*20|0)>>0]=29;b[z+(t*20|0)+2>>1]=0;c[z+(t*20|0)+4>>2]=J;c[z+(t*20|0)+8>>2]=0;c[z+(t*20|0)+12>>2]=H;c[z+(t*20|0)+16>>2]=0;a[z+(t*20|0)+1>>0]=0;z=t}else z=Di(K,29,J,0,H)|0;if(!(a[(c[K>>2]|0)+81>>0]|0)){Ca=c[K+104>>2]|0;a[Ca+(z*20|0)+1>>0]=-3;c[Ca+(z*20|0)+16>>2]=I}t=c[A>>2]|0;if((c[w>>2]|0)>(t|0)){c[A>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=69;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=11;c[Ca+(t*20|0)+8>>2]=2;c[Ca+(t*20|0)+12>>2]=0;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else t=Di(K,69,11,2,0)|0;do if(!(a[(c[K>>2]|0)+81>>0]|0)){if((t|0)<0)t=(c[A>>2]|0)+-1|0;w=c[K+104>>2]|0;x=w+(t*20|0)+1|0;if(!(a[x>>0]|0)){c[w+(t*20|0)+16>>2]=39404;a[x>>0]=-1;break}else{Ei(K,w+(t*20|0)|0,39404,-1);break}}while(0);w=c[A>>2]|0;if(!(a[(c[K>>2]|0)+81>>0]|0))t=(c[K+104>>2]|0)+(((z|0)<0?w+-1|0:z)*20|0)|0;else t=59308;c[t+8>>2]=w}while(0);tj(f,ik(L,c[ea>>2]|0,0)|0,c[ma>>2]|0,c[fa>>2]|0,2,r);c[ma>>2]=0;c[fa>>2]=0;Ca=421;break}case 4:{Ca=421;break}default:{t=c[f>>2]|0;C=c[t+32>>2]|0;do if(!((c[U>>2]&8192|0)==0&0==0|(C&262144|0)==0&0==0)){t=c[(c[t+16>>2]|0)+28>>2]|0;if(a[T>>0]|0){Ca=445;break}B=c[m>>2]|0;do if((B|0)!=(t|0)){t=c[t+48>>2]|0;if(!t){Ca=439;break}A=t;t=0;do{z=c[A+8>>2]|0;do if((c[z+24>>2]|0)==(B|0)){w=c[z+4>>2]|0;x=c[g>>2]|0;N=a[w>>0]|0;u=(d[208+(N&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(N<<24>>24==0|(u|0)!=0))do{w=w+1|0;x=x+1|0;N=a[w>>0]|0;u=(d[208+(N&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(u|0)!=0));if(u|0)break;if(!t)t=c[_>>2]|0;c[z+32>>2]=t;t=z}while(0);A=c[A>>2]|0}while((A|0)!=0);if(!t)Ca=439}else Ca=439;while(0);if((Ca|0)==439){t=c[_>>2]|0;if(!t){Ca=445;break}}u=0;w=t;do{if((a[w+8>>0]|0)==121)u=u|d[w+9>>0];w=c[w+32>>2]|0}while((w|0)!=0);if(!((t|0)==0|(u|0)==0))Ca=461;else Ca=445}else Ca=445;while(0);do if((Ca|0)==445){Ca=0;if((C&16384|0)==0&0==0){t=0;break}B=c[g>>2]|0;x=c[m>>2]|0;z=c[x+68>>2]|0;if(!z){u=x+60|0;t=x+64|0}else{u=a[B>>0]|0;if(!(u<<24>>24))t=0;else{t=0;w=B;do{w=w+1|0;t=G(t+(d[208+(u&255)>>0]|0)|0,-1640531535)|0;u=a[w>>0]|0}while(u<<24>>24!=0)}t=(t>>>0)%((c[x+56>>2]|0)>>>0)|0;u=z+(t<<3)|0;t=z+(t<<3)+4|0}u=c[u>>2]|0;n:do if(!u)t=59292;else{A=d[208+(d[B>>0]|0)>>0]|0;while(1){t=c[t>>2]|0;u=u+-1|0;x=c[t+12>>2]|0;N=a[x>>0]|0;w=(d[208+(N&255)>>0]|0)-A|0;if(!(N<<24>>24==0|(w|0)!=0)){z=B;do{x=x+1|0;z=z+1|0;N=a[x>>0]|0;w=(d[208+(N&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(w|0)!=0))}if(!w)break n;if(!u){t=59292;break}}}while(0);if(c[t+8>>2]|0){t=0;Ca=461;break}if(!(c[V>>2]|0))t=0;else{t=0;Ca=461}}while(0);if((Ca|0)==461){Ca=0;N=c[da>>2]|0;a[((N|0)==0?f:N)+20>>0]=1}Im(f,g,t,i,j,M,ca,0,5,F&1,O);u=1}}do if((Ca|0)==421){Ca=0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;O=c[ta>>2]|0;a[O+(t*20|0)>>0]=11;b[O+(t*20|0)+2>>1]=0;c[O+(t*20|0)+4>>2]=0;c[O+(t*20|0)+8>>2]=o;c[O+(t*20|0)+12>>2]=0;c[O+(t*20|0)+16>>2]=0;a[O+(t*20|0)+1>>0]=0;break}else{Di(Ga,11,0,o,0)|0;break}}while(0);do if(!Q){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];break}}else{t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;Q=c[ta>>2]|0;a[Q+(t*20|0)>>0]=11;b[Q+(t*20|0)+2>>1]=0;c[Q+(t*20|0)+4>>2]=0;c[Q+(t*20|0)+8>>2]=oa;c[Q+(t*20|0)+12>>2]=0;c[Q+(t*20|0)+16>>2]=0;a[Q+(t*20|0)+1>>0]=0}else Di(Ga,11,0,oa,0)|0;w=c[pa>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))t=(c[ta>>2]|0)+(((y|0)<0?w+-1|0:y)*20|0)|0;else t=59308;c[t+8>>2]=w}while(0);if((M|0)==(P|0)){w=y;t=R;break}if(!W){if((c[Z>>2]|0)>=(Da|0)){w=y;t=R;break}c[Z>>2]=Da;c[Y>>2]=M;w=y;t=R;break}if(!M){w=y;t=R;break}t=a[X>>0]|0;if((t&255)>=8){w=y;t=R;break}a[X>>0]=t+1<<24>>24;c[f+148+((t&255)<<2)>>2]=M;w=y;t=R}while(0);s=c[s+20>>2]|0;if(!s)break;else S=S+1|0}}if(!za){c[p>>2]=u;Ra=Ja;return}s=Ga+108|0;t=c[s>>2]|0;if((c[Ga+112>>2]|0)>(t|0)){c[s>>2]=t+1;o=c[Ga+104>>2]|0;a[o+(t*20|0)>>0]=11;b[o+(t*20|0)+2>>1]=0;c[o+(t*20|0)+4>>2]=0;c[o+(t*20|0)+8>>2]=za;c[o+(t*20|0)+12>>2]=0;c[o+(t*20|0)+16>>2]=0;a[o+(t*20|0)+1>>0]=0}else Di(Ga,11,0,za,0)|0;t=c[s>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))s=(c[Ga+104>>2]|0)+(((v|0)<0?t+-1|0:v)*20|0)|0;else s=59308;c[s+8>>2]=t;c[p>>2]=u;Ra=Ja;return}function Um(f,g,h,i,j,k,l,m,n){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;t=f+8|0;o=c[t>>2]|0;a:do if(!o){s=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))r=15;else{C=0;break a}else{do if((e[s+276>>1]|0)>=224){o=s+300|0;p=c[o>>2]|0;if(p|0){c[o>>2]=c[p>>2];q=s+284|0;c[q>>2]=(c[q>>2]|0)+1;q=p;break b}o=s+296|0;p=c[o>>2]|0;if(!p){o=s+292|0;break}else{c[o>>2]=c[p>>2];q=s+284|0;c[q>>2]=(c[q>>2]|0)+1;q=p;break b}}else o=s+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;r=15}while(0);if((r|0)==15)q=_d(s,224,0)|0;if(!q)C=0;else{o=q+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[q>>2]=s;o=s+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=q;c[q+8>>2]=p;c[q+4>>2]=0;c[o>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[t>>2]=q;Di(q,61,0,1,0)|0;C=q}}else C=o;while(0);p=c[g+8>>2]|0;if(!p){u=0;o=g+36|0}else{y=(n|0)==0?0:16;x=C+108|0;z=C+112|0;o=g+36|0;A=C+104|0;B=(l&2|(y|1)&255)&255;w=0;u=0;while(1){t=k+(w<<2)|0;s=c[t>>2]|0;if(s){do if(c[p+36>>2]|0){q=c[x>>2]|0;r=q+2|0;if((c[z>>2]|0)>(q|0)){c[x>>2]=q+1;v=c[A>>2]|0;a[v+(q*20|0)>>0]=50;b[v+(q*20|0)+2>>1]=0;c[v+(q*20|0)+4>>2]=s;c[v+(q*20|0)+8>>2]=r;c[v+(q*20|0)+12>>2]=0;c[v+(q*20|0)+16>>2]=0;a[v+(q*20|0)+1>>0]=0;break}else{Di(C,50,s,r,0)|0;break}}while(0);q=p+55|0;q=d[q>>0]|d[q+1>>0]<<8;if((q&3)==2)v=(c[o>>2]&32|0)==0?y:B;else v=y;u=w+i|0;s=c[t>>2]|0;t=s+1|0;r=e[((q&8)==0?p+52|0:p+50|0)>>1]|0;q=c[x>>2]|0;if((c[z>>2]|0)>(q|0)){c[x>>2]=q+1;D=c[A>>2]|0;a[D+(q*20|0)>>0]=-124;b[D+(q*20|0)+2>>1]=0;c[D+(q*20|0)+4>>2]=u;c[D+(q*20|0)+8>>2]=s;c[D+(q*20|0)+12>>2]=t;c[D+(q*20|0)+16>>2]=0;a[D+(q*20|0)+1>>0]=0}else q=Di(C,132,u,s,t)|0;if(!(a[(c[C>>2]|0)+81>>0]|0)){D=c[A>>2]|0;a[D+(q*20|0)+1>>0]=-3;c[D+(q*20|0)+16>>2]=r}q=c[x>>2]|0;if((q|0)>0){b[(c[A>>2]|0)+((q+-1|0)*20|0)+2>>1]=v&255;u=1}else u=1}p=c[p+20>>2]|0;if(!p)break;else w=w+1|0}}if(c[o>>2]&32|0)return;q=j+1|0;o=f+19|0;p=a[o>>0]|0;if(!(p<<24>>24)){D=f+44|0;r=(c[D>>2]|0)+1|0;c[D>>2]=r}else{r=p+-1<<24>>24;a[o>>0]=r;r=c[f+148+((r&255)<<2)>>2]|0}o=b[g+42>>1]|0;s=C+108|0;p=c[s>>2]|0;t=C+112|0;if((c[t>>2]|0)>(p|0)){c[s>>2]=p+1;D=c[C+104>>2]|0;a[D+(p*20|0)>>0]=92;b[D+(p*20|0)+2>>1]=0;c[D+(p*20|0)+4>>2]=q;c[D+(p*20|0)+8>>2]=o;c[D+(p*20|0)+12>>2]=r;c[D+(p*20|0)+16>>2]=0;a[D+(p*20|0)+1>>0]=0}else Di(C,92,q,o,r)|0;if(!(u<<24>>24))zk(C,g,0);q=f+18|0;p=(a[q>>0]|0)==0?((l|0)==0?33:(l|1)&255):0;p=(m|0)==0?p:p|8;p=(n|0)==0?p:p|16;o=c[s>>2]|0;if((c[t>>2]|0)>(o|0)){c[s>>2]=o+1;D=c[C+104>>2]|0;a[D+(o*20|0)>>0]=122;b[D+(o*20|0)+2>>1]=0;c[D+(o*20|0)+4>>2]=h;c[D+(o*20|0)+8>>2]=r;c[D+(o*20|0)+12>>2]=j;c[D+(o*20|0)+16>>2]=0;a[D+(o*20|0)+1>>0]=0}else Di(C,122,h,r,j)|0;if((a[q>>0]|0)==0?(a[(c[C>>2]|0)+81>>0]|0)==0:0){j=c[C+104>>2]|0;D=(c[s>>2]|0)+-1|0;a[j+(D*20|0)+1>>0]=-6;c[j+(D*20|0)+16>>2]=g}o=c[s>>2]|0;if((o|0)<=0)return;b[(c[C+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=p&255;return}function Vm(d,e){d=d|0;e=e|0;if((a[e>>0]|0)!=-94)return 0;e=b[e+32>>1]|0;if(e<<16>>16<=-1){d=d+20|0;a[d>>0]=a[d>>0]|2;return 0}if((c[(c[d+24>>2]|0)+(e<<16>>16<<2)>>2]|0)<=-1)return 0;d=d+20|0;a[d>>0]=a[d>>0]|1;return 0}function Wm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(!(c[g+36>>2]&8)){l=0;return l|0}j=c[d>>2]|0;if(c[j+24>>2]&4|0){l=0;return l|0}k=c[d+116>>2]|0;k=(k|0)==0?d:k;i=c[(c[(c[j+16>>2]|0)+(f<<4)+12>>2]|0)+72>>2]|0;if(((i|0?(c[i+36>>2]&32|0)==0:0)?(c[i+56>>2]|0)==0:0)?(b[i+42>>1]|0)==2:0){i=k+112|0;d=c[i>>2]|0;a:do if(!d)l=12;else while(1){if((c[d+4>>2]|0)==(g|0))break a;d=c[d>>2]|0;if(!d){l=12;break}}while(0);do if((l|0)==12){b:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))l=22;else{l=0;return l|0}else{do if((e[j+276>>1]|0)>=16){h=j+300|0;d=c[h>>2]|0;if(d|0){c[h>>2]=c[d>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}h=j+296|0;d=c[h>>2]|0;if(!d){d=j+292|0;break}else{c[h>>2]=c[d>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}}else d=j+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;l=22}while(0);if((l|0)==22)d=_d(j,16,0)|0;if(!d){l=0;return l|0}else{c[d>>2]=c[i>>2];c[i>>2]=d;c[d+4>>2]=g;c[d+8>>2]=f;l=k+44|0;k=c[l>>2]|0;c[d+12>>2]=k+2;c[l>>2]=k+4;break}}while(0);l=c[d+12>>2]|0;return l|0}l=d+36|0;c[l>>2]=(c[l>>2]|0)+1;c[d+12>>2]=523;l=0;return l|0}function Xm(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;h=b[f+50>>1]|0;t=g+50|0;if(h<<16>>16!=(b[t>>1]|0)){g=0;return g|0}if((a[f+54>>0]|0)!=(a[g+54>>0]|0)){g=0;return g|0}a:do if(h<<16>>16){l=g+4|0;m=f+4|0;n=g+40|0;o=f+40|0;p=g+28|0;q=f+28|0;r=g+32|0;s=f+32|0;k=0;while(1){h=b[(c[l>>2]|0)+(k<<1)>>1]|0;if(h<<16>>16!=(b[(c[m>>2]|0)+(k<<1)>>1]|0)){h=0;i=18;break}if(h<<16>>16==-2?bk(0,c[(c[n>>2]|0)+4+(k*20|0)>>2]|0,c[(c[o>>2]|0)+4+(k*20|0)>>2]|0,-1)|0:0){h=0;i=18;break}if((a[(c[p>>2]|0)+k>>0]|0)!=(a[(c[q>>2]|0)+k>>0]|0)){h=0;i=18;break}i=c[(c[r>>2]|0)+(k<<2)>>2]|0;j=c[(c[s>>2]|0)+(k<<2)>>2]|0;if(i){if(!j){h=0;i=18;break}u=a[i>>0]|0;h=(d[208+(u&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(u<<24>>24==0|(h|0)!=0))do{i=i+1|0;j=j+1|0;u=a[i>>0]|0;h=(d[208+(u&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(h|0)!=0))}else h=((j|0)!=0)<<31>>31;k=k+1|0;if(h|0){h=0;i=18;break}if(k>>>0>=(e[t>>1]|0)>>>0)break a}if((i|0)==18)return h|0}while(0);u=(bk(0,c[g+36>>2]|0,c[f+36>>2]|0,-1)|0)==0&1;return u|0}function Ym(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=c[a+12>>2]|0;if(!b)b=0;else{b=c[b+24>>2]|0;b=(b|0)>0?b:0}d=c[a+16>>2]|0;if(d){k=c[d+24>>2]|0;b=(k|0)>(b|0)?k:b}j=a+4|0;k=c[j>>2]|0;d=a+20|0;if(!(k&2048)){h=c[d>>2]|0;if(!h){m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}i=c[h>>2]|0;g=(i|0)>0;if(g){f=0;e=i;while(1){d=c[h+4+(f*20|0)>>2]|0;if(!d)d=e;else{m=c[d+24>>2]|0;d=(m|0)>(b|0);b=d?m:b;d=d?i:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}if(g){d=0;e=0;do{d=c[(c[h+4+(e*20|0)>>2]|0)+4>>2]|d;e=e+1|0}while((e|0)!=(i|0));d=d&2097412}else d=0}else d=0;c[j>>2]=d|k;m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}d=c[d>>2]|0;if(!d){m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}do{e=c[d+36>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}e=c[d+44>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}e=c[d+60>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}h=c[d>>2]|0;if((h|0)!=0?(i=c[h>>2]|0,(i|0)>0):0){g=0;f=i;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?i:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}h=c[d+40>>2]|0;if((h|0)!=0?(l=c[h>>2]|0,(l|0)>0):0){g=0;f=l;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?l:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}h=c[d+48>>2]|0;if((h|0)!=0?(m=c[h>>2]|0,(m|0)>0):0){g=0;f=m;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?m:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}d=c[d+52>>2]|0}while((d|0)!=0);m=b+1|0;a=a+24|0;c[a>>2]=m;return}function Zm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Ra;Ra=Ra+16|0;g=i;a:do if(((d[b>>0]|0)+-48|0)>>>0<10){c[g>>2]=0;ii(b,g)|0;f=c[g>>2]&255}else{h=Eu(b)|0;g=(h&1073741823|0)==2;b:do if(!e){if(g){if(!(Ib(18544,b,2)|0)){f=0;break}if(!(Ib(18545,b,2)|0)){f=1;break}else break a}switch(h&1073741823|0){case 3:{if(!(Ib(18546,b,3)|0)){f=2;break b}if(!(Ib(18553,b,3)|0)){f=4;break b}else break a}case 5:{if(!(Ib(18548,b,5)|0)){f=3;break b}if(!(Ib(18559,b,5)|0)){f=6;break b}else break a}case 4:{if(!(Ib(18556,b,4)|0)){f=5;break b}if(!(Ib(18564,b,4)|0)){f=7;break b}else break a}default:break a}}else{if(g){if(!(Ib(18544,b,2)|0)){f=0;break}if(!(Ib(18545,b,2)|0)){f=1;break}else break a}switch(h&1073741823|0){case 3:{if(!(Ib(18546,b,3)|0)){f=2;break b}if(!(Ib(18553,b,3)|0)){f=4;break b}else break a}case 5:if(!(Ib(18548,b,5)|0)){f=3;break b}else break a;case 4:if(!(Ib(18556,b,4)|0)){f=5;break b}else break a;default:break a}}while(0);f=a[45920+f>>0]|0}while(0);Ra=i;return f|0}function _m(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=Ra;Ra=Ra+16|0;g=i;c[g>>2]=f;f=0;a:while(1){switch(a[e+f>>0]|0){case 0:break a;case 115:{k=(c[g>>2]|0)+(4-1)&~(4-1);j=c[k>>2]|0;c[g>>2]=k+4;Fj(b,(j|0)==0?73:110,0,f+d|0,0,j,0)|0;break}case 105:{j=(c[g>>2]|0)+(4-1)&~(4-1);k=c[j>>2]|0;c[g>>2]=j+4;Ci(b,70,k,f+d|0)|0;break}default:{h=7;break a}}f=f+1|0}if((h|0)==7){Ra=i;return}Ci(b,81,d,f)|0;Ra=i;return}function $m(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;k=c[(c[e>>2]|0)+32>>2]|0;o=c[(c[e+4>>2]|0)+8>>2]|0;h=c[g>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){n=c[h+16>>2]|0;break}if(!(i&1))n=Gg(h,1)|0;else n=0}else n=0;while(0);h=c[g+4>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){m=c[h+16>>2]|0;break}if(!(i&1))m=Gg(h,1)|0;else m=0}else m=0;while(0);j=c[g>>2]|0;h=b[j+8>>1]|0;if((h&2)!=0?(a[j+10>>0]|0)==1:0)h=c[j+12>>2]|0;else l=16;do if((l|0)==16){i=h&65535;if(!(i&16)){if(i&1|0){h=0;break}h=Fg(j,1)|0;break}else{h=c[j+12>>2]|0;if(!(i&16384))break;h=(c[j>>2]|0)+h|0;break}}while(0);if((h|0)>(c[k+140>>2]|0)){c[e+20>>2]=1;yc(c[e>>2]|0,45980,-1,1,-1)|0;return}do if((f|0)==3){h=c[g+8>>2]|0;if(!h)return;i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0)g=c[h+16>>2]|0;else l=28;do if((l|0)==28)if(!(i&1)){g=Gg(h,1)|0;break}else return;while(0);if(!g)return;k=a[g>>0]|0;if((g|0)!=(-1|0)&k<<24>>24!=0){h=g;f=0;j=k;while(1){i=h+1|0;if((j&255)>191){h=i;while(1){j=a[h>>0]|0;if((j&-64)<<24>>24==-128)h=h+1|0;else break}}else{h=i;j=a[i>>0]|0}if(j<<24>>24!=0&(h|0)!=(-1|0))f=f+1|0;else break}if(!f){j=g+1|0;h=k&255;if((k&255)<=191)break;h=d[2736+(h+-192)>>0]|0;i=a[j>>0]|0;if((i&-64)<<24>>24==-128)do{j=j+1|0;h=h<<6|i&63;i=a[j>>0]|0}while((i&-64)<<24>>24==-128);h=(h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)?65533:h;break}}c[e+20>>2]=1;yc(c[e>>2]|0,46013,-1,1,-1)|0;return}else h=d[o+2>>0]|0;while(0);if(!((n|0)!=0&(m|0)!=0))return;i=(md(n,m,o,h)|0)==0;h=c[e>>2]|0;i=i&1;j=h+8|0;if(!(b[j>>1]&9216)){o=h;c[o>>2]=i;c[o+4>>2]=0;b[j>>1]=4;return}else{Pg(h,i,0);return}}function an(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=c[b>>2]|0;o=g+4|0;m=(c[o>>2]|0)+45|0;a:do if(!p){r=Sv(m|0,0,-1,-1)|0;n=L()|0;if(n>>>0>0|(n|0)==0&r>>>0>2147483390){g=0;return g|0}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;q=25;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){r=c[14978]|0;n=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&n>>>0<=r>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){g=0;return g|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;r=k}else r=k}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){g=0;return g|0}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<m>>>0:0))){k=p+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];q=p+284|0;c[q>>2]=(c[q>>2]|0)+1;q=25;break a}k=p+296|0;j=c[k>>2]|0;if(!j){j=p+292|0;break}else{c[k>>2]=c[j>>2];q=p+284|0;c[q>>2]=(c[q>>2]|0)+1;q=25;break a}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,m,0)|0;q=25}while(0);if((q|0)==25)if(!j){g=0;return g|0}else r=j;gw(r|0,0,m|0)|0;n=r+44|0;ew(n|0,c[g>>2]|0,c[o>>2]|0)|0;j=a[n>>0]|0;if((a[880+(j&255)>>0]|0)<0){m=j<<24>>24==91?93:j;l=0;j=1;while(1){k=a[n+j>>0]|0;if(k<<24>>24==m<<24>>24){j=j+1|0;k=n+l|0;if((a[n+j>>0]|0)!=m<<24>>24)break;a[k>>0]=m}else a[n+l>>0]=k;l=l+1|0;j=j+1|0}a[k>>0]=0}o=r+12|0;c[o>>2]=n;a[r>>0]=f;while(1)if(!(a[880+(d[h>>0]|0)>>0]&1))break;else h=h+1|0;j=i-h|0;b:do if((j|0)<=0)if(!h)j=0;else{k=j;q=41}else while(1){k=j+-1|0;if(!(a[880+(d[h+k>>0]|0)>>0]&1)){k=j;q=41;break b}if((j|0)>1)j=k;else{q=41;break}}while(0);c:do if((q|0)==41){m=Sv(k|0,((k|0)<0)<<31>>31|0,1,0)|0;n=L()|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))q=51;else{j=0;break c}else{do if(!(n>>>0>0|((n|0)==0?m>>>0>(e[p+276>>1]|0)>>>0:0))){l=p+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break d}l=p+296|0;j=c[l>>2]|0;if(!j){j=p+292|0;break}else{c[l>>2]=c[j>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break d}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;q=51}while(0);if((q|0)==51)j=_d(p,m,n)|0;if(j){ew(j|0,h|0,k|0)|0;a[j+k>>0]=0;k=a[j>>0]|0;if(k<<24>>24){m=0;l=j;do{if(a[880+(k&255)>>0]&1)a[l>>0]=32;m=m+1|0;l=j+m|0;k=a[l>>0]|0}while(k<<24>>24!=0)}}else j=0}while(0);c[r+32>>2]=j;if((d[b+200>>0]|0)<=1){g=r;return g|0}m=c[o>>2]|0;l=c[b>>2]|0;e:do if(!l){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;q=82;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){p=c[14978]|0;i=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&i>>>0<=p>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){g=r;return g|0}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){g=r;return g|0}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];q=l+284|0;c[q>>2]=(c[q>>2]|0)+1;q=82;break e}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];q=l+284|0;c[q>>2]=(c[q>>2]|0)+1;q=82;break e}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(l,16,0)|0;q=82}while(0);if((q|0)==82)if(!j){g=r;return g|0}k=j+4|0;l=k+12|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[j>>2]=m;p=g;q=c[p+4>>2]|0;g=j+4|0;c[g>>2]=c[p>>2];c[g+4>>2]=q;g=b+272|0;c[j+12>>2]=c[g>>2];c[g>>2]=j;g=r;return g|0}function bn(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+64|0;D=H+40|0;E=H+32|0;w=H+24|0;v=H+16|0;n=H+8|0;k=H;x=H+60|0;t=H+56|0;r=H+52|0;F=H+48|0;s=H+44|0;G=c[(c[f>>2]|0)+32>>2]|0;c[x>>2]=0;c[t>>2]=0;c[F>>2]=0;g=c[h>>2]|0;do if(g){i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0){j=c[g+16>>2]|0;break}if(!(i&1))j=Gg(g,1)|0;else j=0}else j=0;while(0);g=c[h+4>>2]|0;do if(g){i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(i&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);A=(j|0)==0?59952:j;u=(g|0)==0?59952:g;z=G+20|0;m=c[z>>2]|0;g=c[G+136>>2]|0;a:do if((m|0)<(g+2|0)){y=G+16|0;l=c[y>>2]|0;b:do if((m|0)>0){k=d[208+(d[u>>0]|0)>>0]|0;h=0;while(1){i=c[l+(h<<4)>>2]|0;q=a[i>>0]|0;g=(d[208+(q&255)>>0]|0)-k|0;if(!(q<<24>>24==0|(g|0)!=0)){j=u;do{i=i+1|0;j=j+1|0;q=a[i>>0]|0;g=(d[208+(q&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(g|0)!=0))}h=h+1|0;if(!g)break;if((h|0)>=(m|0))break b}c[n>>2]=u;i=dd(G,46469,n)|0;c[F>>2]=i;g=0;C=142;break a}while(0);c:do if((l|0)==(G+412|0)){d:do if(c[G+272>>2]|0)if(!(a[G+81>>0]|0))C=34;else{Ra=H;return}else{do if((e[G+276>>1]|0)>=48){i=G+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break d}i=G+296|0;g=c[i>>2]|0;if(!g){g=G+292|0;break}else{c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break d}}else g=G+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;C=34}while(0);if((C|0)==34)g=_d(G,48,0)|0;if(!g){Ra=H;return}else{p=c[y>>2]|0;c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];c[g+16>>2]=c[p+16>>2];c[g+20>>2]=c[p+20>>2];c[g+24>>2]=c[p+24>>2];c[g+28>>2]=c[p+28>>2];p=g;break}}else{j=(m<<4)+16|0;e:do if(!l){if(c[G+272>>2]|0){if(a[G+81>>0]|0){Ra=H;return}}else{do if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<j>>>0:0))){i=G+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break e}i=G+296|0;g=c[i>>2]|0;if(!g){g=G+292|0;break}else{c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break e}}else g=G+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(G,j,0)|0}else{q=l;if((c[G+304>>2]|0)>>>0<=q>>>0?(c[G+308>>2]|0)>>>0>q>>>0:0){if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<j>>>0:0))){p=l;break c}g=Zd(G,l,j,0)|0;break}g=Zd(G,l,j,0)|0}while(0);if(!g){Ra=H;return}else p=g}while(0);c[y>>2]=p;q=c[z>>2]|0;o=p+(q<<4)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[r>>2]=c[G+60>>2];switch(dn(c[(c[G>>2]|0)+16>>2]|0,A,r,s,x,t)|0){case 0:{g=c[r>>2]|256;c[r>>2]=g;k=p+(q<<4)+4|0;g=Pe(c[s>>2]|0,c[x>>2]|0,G,k,0,g)|0;c[z>>2]=(c[z>>2]|0)+1;h=(Eu(u)|0)+1|0;r=G+272|0;f:do if(c[r>>2]|0)if(!(a[G+81>>0]|0))C=76;else i=0;else{do if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0<h>>>0:0))){j=G+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];C=G+284|0;c[C>>2]=(c[C>>2]|0)+1;C=77;break f}j=G+296|0;i=c[j>>2]|0;if(!i){i=G+292|0;break}else{c[j>>2]=c[i>>2];C=G+284|0;c[C>>2]=(c[C>>2]|0)+1;C=77;break f}}else i=G+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;C=76}while(0);if((C|0)==76){i=_d(G,h,0)|0;C=77}if((C|0)==77)if(!i)i=0;else ew(i|0,u|0,h|0)|0;c[o>>2]=i;a[G+89>>0]=0;switch(g|0){case 19:{g=dd(G,46499,v)|0;c[F>>2]=g;g=1;C=98;break}case 0:{g=en(G,c[k>>2]|0)|0;c[p+(q<<4)+12>>2]=g;if(g)if((a[g+76>>0]|0)!=0?(a[g+77>>0]|0)!=(a[G+78>>0]|0):0){g=dd(G,34948,w)|0;c[F>>2]=g;g=1}else g=0;else g=7;j=c[k>>2]|0;k=c[j>>2]|0;h=c[j+4>>2]|0;l=h+4|0;c[l>>2]=k;m=c[h>>2]|0;i=a[G+83>>0]|0;n=(a[m+12>>0]|0)==0;do if(n){w=c[m+216>>2]|0;if(w|0?(a[w+43>>0]|0)==2:0)break;a[m+4>>0]=i}while(0);i=c[(c[y>>2]|0)+4>>2]|0;if(!i)i=0;else{w=c[i+4>>2]|0;c[w+4>>2]=c[i>>2];i=(e[w+22>>1]|0)>>>2&3}if(j|0){c[l>>2]=k;w=h+22|0;b[w>>1]=i<<2|b[w>>1]&-13&65535}h=c[G+32>>2]|0;c[l>>2]=k;j=n^1;a[m+7>>0]=j&1;a[m+8>>0]=n&1;a[m+9>>0]=0;do if(n){i=m+10|0;if(!(h&8)){a[i>>0]=2;i=2;break}else{a[i>>0]=3;i=3;break}}else{a[m+10>>0]=0;i=0}while(0);w=(i<<2|(n?i:0))&255;a[m+11>>0]=(h&16|0)==0|j?w:w|12;w=m+20|0;v=d[w>>0]|0;a[w>>0]=(h&32|0)==0?v|1:v&254;a[p+(q<<4)+8>>0]=3;if(!g)g=(c[o>>2]|0)==0?7:0;break}default:C=98}if((C|0)==98)a[p+(q<<4)+8>>0]=3;i=c[x>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{x=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);g:do if(!g){g=c[z>>2]|0;h=c[y>>2]|0;if((g|0)>0){i=0;do{j=c[h+(i<<4)+4>>2]|0;if(j|0)c[(c[j+4>>2]|0)+4>>2]=c[j>>2];i=i+1|0}while((i|0)!=(g|0))}a[G+164>>0]=0;j=G+24|0;k=c[j>>2]|0;c[j>>2]=k&-17;k=(k&1|0)==0;x=c[h+12>>2]|0;a[G+78>>0]=a[x+77>>0]|0;if(!(b[x+78>>1]&1)){g=eh(G,0,F,0)|0;if(g|0)break;g=c[z>>2]|0}if((g|0)>1)do{i=g;g=g+-1|0;if((b[(c[(c[y>>2]|0)+(g<<4)+12>>2]|0)+78>>1]&1)==0?(B=eh(G,g,F,0)|0,B|0):0){g=B;break g}}while((i|0)>2);if(!k){Ra=H;return}c[j>>2]=c[j>>2]&-2;Ra=H;return}while(0);i=(c[z>>2]|0)+-1|0;j=c[(c[y>>2]|0)+(i<<4)+4>>2]|0;if(j|0){ug(j);B=c[y>>2]|0;c[B+(i<<4)+4>>2]=0;c[B+(i<<4)+12>>2]=0}$b(G);c[z>>2]=i;if((g|0)<3082)switch(g|0){case 7:break;default:C=140}else switch(g|0){case 3082:break;default:C=140}if((C|0)==140){i=c[F>>2]|0;if(i|0){C=143;break a}c[D>>2]=A;i=dd(G,46528,D)|0;c[F>>2]=i;C=142;break a}i=G+81|0;if((a[i>>0]|0)==0?(a[G+82>>0]|0)==0:0){a[i>>0]=1;if((c[G+180>>2]|0)>0)c[G+264>>2]=1;c[r>>2]=(c[r>>2]|0)+1;i=c[G+236>>2]|0;if(i|0)c[i+12>>2]=7}i=c[F>>2]|0;do if(i|0){if(c[G+480>>2]|0){Xd(G,i);break}D=i;if((c[G+304>>2]|0)>>>0<=D>>>0?(c[G+308>>2]|0)>>>0>D>>>0:0){D=G+300|0;c[i>>2]=c[D>>2];c[D>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{D=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=dd(G,34831,E)|0;c[F>>2]=i;C=142;break a}case 7:{g=G+81|0;if((a[g>>0]|0)==0?(a[G+82>>0]|0)==0:0){a[g>>0]=1;if((c[G+180>>2]|0)>0)c[G+264>>2]=1;g=G+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[G+236>>2]|0;if(g|0)c[g+12>>2]=7}break}default:{}}g=c[t>>2]|0;c[f+20>>2]=1;yc(c[f>>2]|0,g,-1,1,-1)|0;if(!g){Ra=H;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=H;return}else{f=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=H;return}}else{c[k>>2]=g;i=dd(G,46432,k)|0;c[F>>2]=i;g=0;C=142}while(0);if((C|0)==142)if(i)C=143;do if((C|0)==143){c[f+20>>2]=1;yc(c[f>>2]|0,i,-1,1,-1)|0;i=c[F>>2]|0;if(i){if(G|0){if(c[G+480>>2]|0){Xd(G,i);break}F=i;if((c[G+304>>2]|0)>>>0<=F>>>0?(c[G+308>>2]|0)>>>0>F>>>0:0){G=G+300|0;c[i>>2]=c[G>>2];c[G>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{G=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);if(!g){Ra=H;return}c[f+20>>2]=g;i=c[f>>2]|0;if(!(b[i+8>>1]&1)){Ra=H;return}switch(g|0){case 516:{g=50738;break}case 100:{g=50760;break}case 101:{g=50782;break}default:{g=g&255;if(g>>>0<29?(520028155>>>g&1|0)!=0:0)g=c[22960+(g<<2)>>2]|0;else g=50724}}yc(i,g,-1,1,0)|0;Ra=H;return}function cn(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+112|0;x=J+32|0;w=J+24|0;t=J+16|0;r=J+8|0;n=J;s=J+72|0;u=J+40|0;I=c[f>>2]|0;a:do if(!(c[f+36>>2]|0)){z=u+4|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[u>>2]=f;z=(j|0)==0;m=f;do if(z)m=0;else{if((a[j>>0]|0)==59){a[j>>0]=110;m=0;break}p=u+24|0;b[p>>1]=0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;o=j+24|0;m=f+208|0;A=(c[m>>2]|0)+(c[o>>2]|0)|0;c[m>>2]=A;m=c[I+120>>2]|0;if((m|0)>=(A|0)){_j(s,j)|0;n=c[s>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[o>>2]|0);m=b[p>>1]|0;A=j+4|0;c[A>>2]=c[A>>2]|m&-32752&65535;if((c[u+20>>2]|0)<=0)if((c[n+36>>2]|0)<1)break;else{F=121;break a}}else{c[n>>2]=m;cd(f,41637,n)}F=121;break a}while(0);A=(k|0)==0;do if(!A){if((a[k>>0]|0)==59){a[k>>0]=110;break}q=u+24|0;o=m&65535;b[q>>1]=o&28655;m=c[u>>2]|0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;p=k+24|0;n=m+208|0;y=(c[n>>2]|0)+(c[p>>2]|0)|0;c[n>>2]=y;n=c[(c[m>>2]|0)+120>>2]|0;if((n|0)>=(y|0)){_j(s,k)|0;n=c[s>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);m=b[q>>1]|0;y=k+4|0;c[y>>2]=c[y>>2]|m&-32752&65535;m=(o&36880|m&65535)&65535;b[q>>1]=m;if((c[u+20>>2]|0)<=0)if((c[n+36>>2]|0)<1)break;else{F=120;break a}}else{c[r>>2]=n;cd(m,41637,r)}F=120;break a}while(0);y=(l|0)==0;do if(!y){if((a[l>>0]|0)==59){a[l>>0]=110;break}q=u+24|0;p=m&65535;b[q>>1]=p&28655;m=c[u>>2]|0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;o=l+24|0;n=m+208|0;r=(c[n>>2]|0)+(c[o>>2]|0)|0;c[n>>2]=r;n=c[(c[m>>2]|0)+120>>2]|0;if((n|0)>=(r|0)){_j(s,l)|0;m=c[s>>2]|0;t=m+208|0;c[t>>2]=(c[t>>2]|0)-(c[o>>2]|0);t=b[q>>1]|0;s=l+4|0;c[s>>2]=c[s>>2]|t&-32752&65535;b[q>>1]=p&36880|t&65535;if((c[u+20>>2]|0)<=0)if((c[m+36>>2]|0)<1)break;else{F=120;break a}}else{c[t>>2]=n;cd(m,41637,t)}F=120;break a}while(0);do if(i|0){if((a[i>>0]|0)==110)m=c[i+8>>2]|0;else m=0;n=c[f>>2]|0;if(((a[n+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(v=c[n+312>>2]|0,v|0):0){m=$a[v&127](c[n+316>>2]|0,g,m,0,0,c[f+240>>2]|0)|0;if((m|0)==1){cd(f,39216,w);c[f+12>>2]=23;F=120;break a}if((m|2|0)==2)if(!m)break;else{F=120;break a}else{cd(f,39231,x);c[f+12>>2]=1;F=120;break a}}}while(0);s=f+8|0;m=c[s>>2]|0;b:do if(!m){p=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[p+76>>1]&8)==0:0)a[f+23>>0]=1;c:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))F=51;else{t=0;break b}else{do if((e[p+276>>1]|0)>=224){m=p+300|0;n=c[m>>2]|0;if(n|0){c[m>>2]=c[n>>2];x=p+284|0;c[x>>2]=(c[x>>2]|0)+1;break c}m=p+296|0;n=c[m>>2]|0;if(!n){m=p+292|0;break}else{c[m>>2]=c[n>>2];x=p+284|0;c[x>>2]=(c[x>>2]|0)+1;break c}}else m=p+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;F=51}while(0);if((F|0)==51)n=_d(p,224,0)|0;if(!n)t=0;else{m=n+104|0;o=m+120|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(o|0));c[n>>2]=p;m=p+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=n;c[n+8>>2]=o;c[n+4>>2]=0;c[m>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[s>>2]=n;Di(n,61,0,1,0)|0;t=n}}else t=m;while(0);n=f+32|0;o=c[n>>2]|0;m=f+28|0;p=c[m>>2]|0;if((p|0)<4){m=f+44|0;n=c[m>>2]|0;r=n+1|0;n=n+4|0}else{c[n>>2]=o+4;r=o;n=p+-4|0}c[m>>2]=n;do if(!z){if((a[j>>0]|0)!=-88){C=Jj(f,j,r)|0;F=66;break}m=c[s>>2]|0;n=c[j+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;z=c[m+104>>2]|0;a[z+(p*20|0)>>0]=78;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=n;c[z+(p*20|0)+8>>2]=r;c[z+(p*20|0)+12>>2]=0;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,r,0)|0;break}}else{C=Jj(f,0,r)|0;F=66}while(0);do if(((F|0)==66?(C|0)!=(r|0):0)?(B=c[s>>2]|0,B|0):0){m=B+108|0;n=c[m>>2]|0;if((c[B+112>>2]|0)>(n|0)){c[m>>2]=n+1;B=c[B+104>>2]|0;a[B+(n*20|0)>>0]=79;b[B+(n*20|0)+2>>1]=0;c[B+(n*20|0)+4>>2]=C;c[B+(n*20|0)+8>>2]=r;c[B+(n*20|0)+12>>2]=0;c[B+(n*20|0)+16>>2]=0;a[B+(n*20|0)+1>>0]=0;break}else{Di(B,79,C,r,0)|0;break}}while(0);q=r+1|0;do if(!A){if((a[k>>0]|0)!=-88){E=Jj(f,k,q)|0;F=78;break}m=c[s>>2]|0;n=c[k+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;C=c[m+104>>2]|0;a[C+(p*20|0)>>0]=78;b[C+(p*20|0)+2>>1]=0;c[C+(p*20|0)+4>>2]=n;c[C+(p*20|0)+8>>2]=q;c[C+(p*20|0)+12>>2]=0;c[C+(p*20|0)+16>>2]=0;a[C+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,q,0)|0;break}}else{E=Jj(f,0,q)|0;F=78}while(0);do if(((F|0)==78?(E|0)!=(q|0):0)?(D=c[s>>2]|0,D|0):0){m=D+108|0;n=c[m>>2]|0;if((c[D+112>>2]|0)>(n|0)){c[m>>2]=n+1;D=c[D+104>>2]|0;a[D+(n*20|0)>>0]=79;b[D+(n*20|0)+2>>1]=0;c[D+(n*20|0)+4>>2]=E;c[D+(n*20|0)+8>>2]=q;c[D+(n*20|0)+12>>2]=0;c[D+(n*20|0)+16>>2]=0;a[D+(n*20|0)+1>>0]=0;break}else{Di(D,79,E,q,0)|0;break}}while(0);q=r+2|0;do if(!y){if((a[l>>0]|0)!=-88){H=Jj(f,l,q)|0;F=90;break}m=c[s>>2]|0;n=c[l+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;f=c[m+104>>2]|0;a[f+(p*20|0)>>0]=78;b[f+(p*20|0)+2>>1]=0;c[f+(p*20|0)+4>>2]=n;c[f+(p*20|0)+8>>2]=q;c[f+(p*20|0)+12>>2]=0;c[f+(p*20|0)+16>>2]=0;a[f+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,q,0)|0;break}}else{H=Jj(f,0,q)|0;F=90}while(0);do if(((F|0)==90?(H|0)!=(q|0):0)?(G=c[s>>2]|0,G|0):0){m=G+108|0;n=c[m>>2]|0;if((c[G+112>>2]|0)>(n|0)){c[m>>2]=n+1;G=c[G+104>>2]|0;a[G+(n*20|0)>>0]=79;b[G+(n*20|0)+2>>1]=0;c[G+(n*20|0)+4>>2]=H;c[G+(n*20|0)+8>>2]=q;c[G+(n*20|0)+12>>2]=0;c[G+(n*20|0)+16>>2]=0;a[G+(n*20|0)+1>>0]=0;break}else{Di(G,79,H,q,0)|0;break}}while(0);if(t){n=r+3|0;o=n-(a[h>>0]|0)|0;p=t+108|0;m=c[p>>2]|0;q=t+112|0;if((c[q>>2]|0)>(m|0)){c[p>>2]=m+1;H=c[t+104>>2]|0;a[H+(m*20|0)>>0]=63;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=0;c[H+(m*20|0)+8>>2]=o;c[H+(m*20|0)+12>>2]=n;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else m=Di(t,63,0,o,n)|0;n=c[t>>2]|0;d:do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[p>>2]|0)+-1|0;n=c[t+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=h;a[o>>0]=-8;break}else{Ei(t,n+(m*20|0)|0,h,-8);break}}else if(c[h+4>>2]&16|0){do if(n|0){if(c[n+480>>2]|0){Xd(n,h);break d}m=h;if((c[n+304>>2]|0)>>>0<=m>>>0){if((c[n+308>>2]|0)>>>0<=m>>>0)break;H=n+300|0;c[h>>2]=c[H>>2];c[H>>2]=h;break d}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{H=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);n=c[p>>2]|0;if((n|0)>0)b[(c[t+104>>2]|0)+((n+-1|0)*20|0)+2>>1]=d[h>>0]|0;m=(g|0)==24&1;if((c[q>>2]|0)>(n|0)){c[p>>2]=n+1;F=c[t+104>>2]|0;a[F+(n*20|0)>>0]=-98;b[F+(n*20|0)+2>>1]=0;c[F+(n*20|0)+4>>2]=m;c[F+(n*20|0)+8>>2]=0;c[F+(n*20|0)+12>>2]=0;c[F+(n*20|0)+16>>2]=0;a[F+(n*20|0)+1>>0]=0;F=120;break}else{Di(t,158,m,0,0)|0;F=120;break}}else F=120}else F=120;while(0);if((F|0)==120?j|0:0)F=121;if((F|0)==121)ni(I,j);if(k|0)ni(I,k);if(!l){Ra=J;return}ni(I,l);Ra=J;return}function dn(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+32|0;v=w+24|0;t=w+16|0;s=w+8|0;n=w;j=c[e>>2]|0;a:do if(d){i=(Eu(d)|0)&1073741823;if(i>>>0>4&(c[7327]|j&64|0)!=0?(Lu(d,46556,5)|0)==0:0){j=j|64;k=0;l=i+2|0;m=0;do{l=Sv(l|0,m|0,(a[d+k>>0]|0)==38|0,0)|0;m=L()|0;k=k+1|0}while((k|0)!=(i|0));k=pb(l,m)|0;if(!k){g=7;Ra=w;return g|0}b:do if((a[d+5>>0]|0)==47?(a[d+6>>0]|0)==47:0){l=7;c:while(1){switch(a[d+l>>0]|0){case 0:case 47:break c;default:{}}l=l+1|0}switch(l&2147483647|0){case 7:{l=7;break b}case 16:{i=d+7|0;if(!(Lu(46562,i,9)|0)){l=16;break b}break}default:i=d+7|0}c[n>>2]=l+-7;c[n+4>>2]=i;l=k;i=1;k=Bb(46572,n)|0;u=86;break a}else l=5;while(0);i=0;n=0;d:while(1){p=k+(i+-1)|0;e:while(1){m=a[d+l>>0]|0;switch(m<<24>>24){case 0:case 35:break d;default:{}}o=l+1|0;f:do if((m<<24>>24==37?(q=a[d+o>>0]|0,(a[880+(q&255)>>0]&8)!=0):0)?(r=a[d+(l+2)>>0]|0,(a[880+(r&255)>>0]&8)!=0):0){m=q<<24>>24;l=l+3|0;o=r<<24>>24;m=(0-(o>>>6&1)&9)+o&15|(0-(m>>>6&1)&9)+m<<4&240;if(m|0){u=37;break e}switch(n|0){case 0:while(1){switch(a[d+l>>0]|0){case 63:case 35:case 0:break f;default:{}}l=l+1|0}case 1:while(1){switch(a[d+l>>0]|0){case 38:case 61:case 35:case 0:break f;default:{}}l=l+1|0}case 2:while(1){switch(a[d+l>>0]|0){case 38:case 35:case 0:break f;default:{}}l=l+1|0}default:while(1){switch(a[d+l>>0]|0){case 35:case 0:break f;default:{}}l=l+1|0}}}else u=38;while(0);g:do if((u|0)==38){u=0;switch(n|0){case 0:{u=47;break e}case 2:{u=48;break e}case 1:break;default:{l=o;break e}}switch(m<<24>>24){case 38:case 61:break;default:{n=1;l=o;break e}}if(a[p>>0]|0){u=45;break e}l=o;while(1){switch(a[d+l>>0]|0){case 35:case 0:break g;default:{}}if((a[d+(l+-1)>>0]|0)==38)break g;l=l+1|0}}while(0)}if((u|0)==37){u=0;m=m&255}else if((u|0)==45){u=0;if(m<<24>>24==38){a[k+i>>0]=0;m=0;i=i+1|0;n=1;l=o}else{m=0;n=2;l=o}}else if((u|0)==47){u=0;if(m<<24>>24==63)u=49;else{n=0;l=o}}else if((u|0)==48){u=0;if(m<<24>>24==38)u=49;else{n=2;l=o}}if((u|0)==49){u=0;m=0;n=1;l=o}a[k+i>>0]=m;i=i+1|0}if((n|0)==1){a[k+i>>0]=0;i=i+1|0}a[k+i>>0]=0;a[k+(i+1)>>0]=0;i=k+(((Eu(k)|0)&1073741823)+1)|0;if(a[i>>0]|0){r=b;b=i;h:while(1){i:do if(!b){i=1;l=(Eu(1)|0)&1073741823;u=71}else{d=Eu(b)|0;i=b+((d&1073741823)+1)|0;l=(Eu(i)|0)&1073741823;switch(d&1073741823|0){case 3:if(!(Lu(46600,b,3)|0)){m=i;break i}else{u=71;break i}case 5:{if(!(Lu(46604,b,5)|0)){o=393216;p=-393217;q=46604;n=18576}else{u=71;break i}break}case 4:{if(!(Lu(58212,b,4)|0)){o=j&135;p=-136;q=31701;n=18608}else{u=71;break i}break}default:{u=71;break i}}b=c[n>>2]|0;if(!b){u=67;break h}m=0;while(1){if((l|0)==((Eu(b)|0)&1073741823|0)?(Lu(i,b,l)|0)==0:0)break;m=m+1|0;b=c[n+(m<<3)>>2]|0;if(!b){u=67;break h}}b=c[n+(m<<3)+4>>2]|0;if(!b){u=67;break h}if((b&-129|0)>(o|0)){u=69;break h}j=b|p&j;u=71}while(0);if((u|0)==71){u=0;m=r}b=i+(l+1)|0;if(!(a[b>>0]|0)){b=m;u=77;break a}else r=m}if((u|0)==67){c[s>>2]=q;c[s+4>>2]=i;l=k;i=1;k=Bb(46635,s)|0;u=86;break}else if((u|0)==69){c[t>>2]=q;c[t+4>>2]=i;l=k;i=3;k=Bb(46655,t)|0;u=86;break}}else u=77}else u=73}else{i=0;u=73}while(0);if((u|0)==73){k=pb(i+2|0,0)|0;if(!k){g=7;Ra=w;return g|0}if(i|0)ew(k|0,d|0,i|0)|0;a[k+i>>0]=0;a[k+(i+1)>>0]=0;j=j&-65;u=77}j:do if((u|0)==77){k:do if(!(mb()|0)){i=c[14770]|0;l=(i|0)==0;if((b|0)==0|l){c[f>>2]=i;if(l)break;else{i=0;break j}}while(1){if(!(Bu(b,c[i+16>>2]|0)|0))break;i=c[i+12>>2]|0;if(!i){u=83;break k}}c[f>>2]=i;i=0;break j}else u=83;while(0);if((u|0)==83)c[f>>2]=0;c[v>>2]=b;l=k;i=1;k=Bb(46679,v)|0;u=86}while(0);do if((u|0)==86){c[h>>2]=k;if(l)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);k=0;break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);k=0;break}else k=0}while(0);c[e>>2]=j;c[g>>2]=k;g=i;Ra=w;return g|0}function en(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;do if(d){i=c[d+4>>2]|0;c[i+4>>2]=c[d>>2];h=i+48|0;d=c[h>>2]|0;if(!d){if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](84)|0;if(!d)g=26;else g=27}else{d=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){g=c[14978]|0;f=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&f>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](d)|0;if(d){e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0){c[14987]=e;g=27}else g=27}else g=26}if((g|0)==26){c[h>>2]=0;c[i+52>>2]=95;break}else if((g|0)==27){f=d;g=f+84|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));c[h>>2]=d;c[i+52>>2]=95;g=34;break}}else g=34}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](84)|0;if(!d)break}else{d=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){i=c[14978]|0;h=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e)break;d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0){c[14987]=d;d=e}else d=e}f=d;g=f+84|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));g=34}while(0);if((g|0)==34){if(a[d+76>>0]|0){b=d;return b|0}e=d+77|0;f=d+8|0;g=f+64|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[e>>0]=1;b=d;return b|0}d=b+81|0;if(a[d>>0]|0){b=0;return b|0}if(a[b+82>>0]|0){b=0;return b|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){b=0;return b|0}c[d+12>>2]=7;b=0;return b|0}function fn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;w=Ra;Ra=Ra+160|0;r=w+144|0;q=w+136|0;p=w+128|0;o=w;f=c[g>>2]|0;do if(f){g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0){f=c[f+16>>2]|0;break}if(!(g&1))f=Gg(f,1)|0;else f=0}else f=0;while(0);v=c[(c[e>>2]|0)+32>>2]|0;n=(f|0)==0?59952:f;t=v+20|0;l=c[t>>2]|0;a:do if((l|0)>0){u=v+16|0;m=c[u>>2]|0;f=0;while(1){j=m+(f<<4)+4|0;k=c[j>>2]|0;if(k|0){h=c[m+(f<<4)>>2]|0;i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=n;do{h=h+1|0;i=i+1|0;x=a[h>>0]|0;g=(d[208+(x&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(g|0)!=0))}if(!g)break}f=f+1|0;if((f|0)>=(l|0)){s=15;break a}}if(f>>>0<2){c[q>>2]=n;Cb(128,o,46730,q)|0;break}if((a[k+8>>0]|0)==0?(c[k+16>>2]|0)==0:0){ug(k);c[j>>2]=0;c[m+(f<<4)+12>>2]=0;if((c[t>>2]|0)>2){j=v+480|0;k=v+304|0;l=v+308|0;m=v+300|0;i=2;f=2;do{g=c[u>>2]|0;h=g+(i<<4)|0;if(!(c[g+(i<<4)+4>>2]|0)){g=c[h>>2]|0;do if(g|0){if(c[j>>2]|0){Xd(v,g);break}x=g;if((c[k>>2]|0)>>>0<=x>>>0?(c[l>>2]|0)>>>0>x>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[h>>2]=0}else{if((f|0)<(i|0)){x=g+(f<<4)|0;c[x>>2]=c[h>>2];c[x+4>>2]=c[h+4>>2];c[x+8>>2]=c[h+8>>2];c[x+12>>2]=c[h+12>>2]}f=f+1|0}i=i+1|0}while((i|0)<(c[t>>2]|0));c[t>>2]=f;if((f|0)>=3){Ra=w;return}}else c[t>>2]=2;f=c[u>>2]|0;g=v+412|0;if((f|0)==(g|0)){Ra=w;return};c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];c[g+16>>2]=c[f+16>>2];c[g+20>>2]=c[f+20>>2];c[g+24>>2]=c[f+24>>2];c[g+28>>2]=c[f+28>>2];do if(f|0){if(c[v+480>>2]|0){Xd(v,f);break}x=f;if((c[v+304>>2]|0)>>>0<=x>>>0?(c[v+308>>2]|0)>>>0>x>>>0:0){x=v+300|0;c[f>>2]=c[x>>2];c[x>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[u>>2]=g;Ra=w;return}c[r>>2]=n;Cb(128,o,46756,r)|0}else s=15;while(0);if((s|0)==15){c[p>>2]=n;Cb(128,o,46709,p)|0}c[e+20>>2]=1;yc(c[e>>2]|0,o,-1,1,-1)|0;Ra=w;return}function gn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(c[f+56>>2]|0)return;h=c[f+8>>2]|0;if(!h)return;p=f+72|0;o=e+116|0;if(!g){do{i=c[p>>2]|0;if(!i)f=-1e6;else{j=c[(c[e>>2]|0)+16>>2]|0;f=0;while(1)if((c[j+(f<<4)+12>>2]|0)==(i|0))break;else f=f+1|0}l=c[o>>2]|0;l=(l|0)==0?e:l;i=l+84|0;j=c[i>>2]|0;k=1<<f;if((j&k|0)==0?(c[i>>2]=j|k,(f|0)==1):0)Oe(l)|0;g=l+80|0;c[g>>2]=c[g>>2]|k;bl(e,h,-1);h=c[h+20>>2]|0}while((h|0)!=0);return}do{f=b[h+52>>1]|0;a:do if(f<<16>>16){m=c[h+4>>2]|0;n=h+32|0;l=f&65535;k=0;while(1){if((b[m+(k<<1)>>1]|0)>-1){i=c[(c[n>>2]|0)+(k<<2)>>2]|0;j=a[i>>0]|0;f=(d[208+(j&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(j<<24>>24==0|(f|0)!=0)){j=g;do{i=i+1|0;j=j+1|0;q=a[i>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break}k=k+1|0;if(k>>>0>=l>>>0)break a}i=c[p>>2]|0;if(!i)f=-1e6;else{j=c[(c[e>>2]|0)+16>>2]|0;f=0;while(1)if((c[j+(f<<4)+12>>2]|0)==(i|0))break;else f=f+1|0}l=c[o>>2]|0;l=(l|0)==0?e:l;i=l+84|0;j=c[i>>2]|0;k=1<<f;if((j&k|0)==0?(c[i>>2]=j|k,(f|0)==1):0)Oe(l)|0;q=l+80|0;c[q>>2]=c[q>>2]|k;bl(e,h,-1)}while(0);h=c[h+20>>2]|0}while((h|0)!=0);return}function hn(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+96|0;t=A+64|0;r=A+48|0;q=A+32|0;p=A+16|0;o=A;y=A+80|0;z=A+92|0;x=c[d>>2]|0;m=d+8|0;j=c[m>>2]|0;do if(!j){if((c[d+116>>2]|0)==0?(b[x+76>>1]&8)==0:0)a[d+23>>0]=1;a:do if(c[x+272>>2]|0){if(!(a[x+81>>0]|0))l=15}else{do if((e[x+276>>1]|0)>=224){j=x+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=16;break a}j=x+296|0;k=c[j>>2]|0;if(!k){j=x+292|0;break}else{c[j>>2]=c[k>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=16;break a}}else j=x+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;l=15}while(0);if((l|0)==15){k=_d(x,224,0)|0;l=16}if((l|0)==16?k|0:0){j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=x;j=x+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=d;c[m>>2]=k;Di(k,61,0,1,0)|0;u=k;break}Ra=A;return}else u=j;while(0);n=(c[x+16>>2]|0)+(f<<4)|0;j=d+92|0;v=u+108|0;s=u+112|0;w=u+104|0;k=c[n>>2]|0;l=Sd(x,35174,k)|0;m=(l|0)==0;do if(!h){do if(!m){k=c[l+28>>2]|0;c[y>>2]=k;a[z>>0]=0;Hj(d,f,k,1,35174);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;l=c[w>>2]|0;a[l+(j*20|0)>>0]=-119;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=f;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0;l=0;break}else{Di(u,137,k,f,0)|0;l=0;break}}else{c[o>>2]=k;c[o+4>>2]=35174;c[o+8>>2]=46824;Ak(d,46863,o);k=c[j>>2]|0;c[y>>2]=k;a[z>>0]=16;l=16}while(0);j=Sd(x,46837,c[n>>2]|0)|0;do if(j|0){j=c[j+28>>2]|0;c[y+4>>2]=j;a[z+1>>0]=0;Hj(d,f,j,1,46837);m=c[v>>2]|0;if((c[s>>2]|0)>(m|0)){c[v>>2]=m+1;t=c[w>>2]|0;a[t+(m*20|0)>>0]=-119;b[t+(m*20|0)+2>>1]=0;c[t+(m*20|0)+4>>2]=j;c[t+(m*20|0)+8>>2]=f;c[t+(m*20|0)+12>>2]=0;c[t+(m*20|0)+16>>2]=0;a[t+(m*20|0)+1>>0]=0;break}else{Di(u,137,j,f,0)|0;break}}while(0);j=Sd(x,46850,c[n>>2]|0)|0;if(j){m=c[j+28>>2]|0;c[y+8>>2]=m;a[z+2>>0]=0;Hj(d,f,m,1,46850);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;z=c[w>>2]|0;a[z+(j*20|0)>>0]=-119;b[z+(j*20|0)+2>>1]=0;c[z+(j*20|0)+4>>2]=m;c[z+(j*20|0)+8>>2]=f;c[z+(j*20|0)+12>>2]=0;c[z+(j*20|0)+16>>2]=0;a[z+(j*20|0)+1>>0]=0;break}else{Di(u,137,m,f,0)|0;break}}}else{if(m){c[p>>2]=k;c[p+4>>2]=35174;c[p+8>>2]=46824;Ak(d,46863,p);k=c[j>>2]|0;c[y>>2]=k;a[z>>0]=16;l=16}else{k=c[l+28>>2]|0;c[y>>2]=k;a[z>>0]=0;Hj(d,f,k,1,35174);c[q>>2]=c[n>>2];c[q+4>>2]=35174;c[q+8>>2]=i;c[q+12>>2]=h;Ak(d,42751,q);l=0}j=c[n>>2]|0;m=Sd(x,46837,j)|0;if(m){j=c[m+28>>2]|0;c[y+4>>2]=j;a[z+1>>0]=0;Hj(d,f,j,1,46837);c[r>>2]=c[n>>2];c[r+4>>2]=46837;c[r+8>>2]=i;c[r+12>>2]=h;Ak(d,42751,r);j=c[n>>2]|0}j=Sd(x,46850,j)|0;if(j){x=c[j+28>>2]|0;c[y+8>>2]=x;a[z+2>>0]=0;Hj(d,f,x,1,46850);c[t>>2]=c[n>>2];c[t+4>>2]=46850;c[t+8>>2]=i;c[t+12>>2]=h;Ak(d,42751,t)}}while(0);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;z=c[w>>2]|0;a[z+(j*20|0)>>0]=109;b[z+(j*20|0)+2>>1]=0;c[z+(j*20|0)+4>>2]=g;c[z+(j*20|0)+8>>2]=k;c[z+(j*20|0)+12>>2]=f;c[z+(j*20|0)+16>>2]=0;a[z+(j*20|0)+1>>0]=0}else j=Di(u,109,g,k,f)|0;if(!(a[(c[u>>2]|0)+81>>0]|0)){g=c[w>>2]|0;a[g+(j*20|0)+1>>0]=-3;c[g+(j*20|0)+16>>2]=3}j=c[v>>2]|0;if((j|0)<=0){Ra=A;return}b[(c[w>>2]|0)+((j+-1|0)*20|0)+2>>1]=l&255;Ra=A;return}function jn(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=Ra;Ra=Ra+16|0;t=fa+8|0;s=fa;Z=c[f>>2]|0;_=j+1|0;$=j+2|0;ea=j+3|0;da=j+4|0;ca=j+5|0;ba=j+6|0;W=j+7|0;X=f+44|0;Y=c[X>>2]|0;c[X>>2]=(Y|0)>(W|0)?Y:W;Y=f+8|0;l=c[Y>>2]|0;if(!l){if((c[f+116>>2]|0)==0?(b[Z+76>>1]&8)==0:0)a[f+23>>0]=1;a:do if(c[Z+272>>2]|0)if(!(a[Z+81>>0]|0))V=15;else{Ra=fa;return}else{do if((e[Z+276>>1]|0)>=224){l=Z+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];aa=Z+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break a}l=Z+296|0;m=c[l>>2]|0;if(!m){l=Z+292|0;break}else{c[l>>2]=c[m>>2];aa=Z+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break a}}else l=Z+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;V=15}while(0);if((V|0)==15)m=_d(Z,224,0)|0;if(!m){Ra=fa;return}o=m+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[m>>2]=Z;l=Z+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[Y>>2]=m;Di(m,61,0,1,0)|0;aa=m}else aa=l;if((g|0)==0|(aa|0)==0){Ra=fa;return}q=g+28|0;m=c[q>>2]|0;if(!m){Ra=fa;return}l=c[g>>2]|0;if(!(md(46886,l,31415,92)|0)){Ra=fa;return}o=c[g+72>>2]|0;p=c[Z+16>>2]|0;if(!o)n=-1e6;else{n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0))break;else n=n+1|0}o=c[p+(n<<4)>>2]|0;p=c[f>>2]|0;do if(((a[p+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(r=c[p+312>>2]|0,(r|0)!=0):0){l=$a[r&127](c[p+316>>2]|0,28,l,0,o,c[f+240>>2]|0)|0;if((l|0)==1){cd(f,39216,s);c[f+12>>2]=23;Ra=fa;return}if((l|2|0)!=2){cd(f,39231,t);c[f+12>>2]=1;Ra=fa;return}if(!l){m=c[q>>2]|0;l=c[g>>2]|0;break}else{Ra=fa;return}}while(0);Hj(f,n,m,0,l);S=k+1|0;T=k+2|0;m=f+40|0;l=c[m>>2]|0;c[m>>2]=(l|0)>(T|0)?l:T;Gj(f,k,n,g,108);m=c[g>>2]|0;T=aa+108|0;l=c[T>>2]|0;U=aa+112|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;R=c[aa+104>>2]|0;a[R+(l*20|0)>>0]=110;b[R+(l*20|0)+2>>1]=0;c[R+(l*20|0)+4>>2]=0;c[R+(l*20|0)+8>>2]=da;c[R+(l*20|0)+12>>2]=0;c[R+(l*20|0)+16>>2]=0;a[R+(l*20|0)+1>>0]=0}else l=Di(aa,110,0,da,0)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[T>>2]|0)+-1|0;Ei(aa,(c[aa+104>>2]|0)+(l*20|0)|0,m,0)}m=c[g+8>>2]|0;R=(h|0)==0;if(!m)l=1;else{B=g+36|0;C=aa+104|0;D=f+56|0;E=Z+272|0;F=Z+276|0;G=Z+81|0;H=Z+288|0;I=Z+300|0;J=Z+296|0;K=Z+284|0;L=Z+292|0;M=aa+12|0;N=(Z|0)==0;O=Z+480|0;P=Z+304|0;Q=Z+308|0;l=1;do{b:do if(R|(m|0)==(h|0)){l=(c[m+36>>2]|0)==0?0:l;o=m+55|0;o=d[o>>0]|d[o+1>>0]<<8;if(!((c[B>>2]&32|0)!=0&(o&3)==2)){q=e[m+52>>1]|0;p=c[m>>2]|0;if(!(o&8))t=q;else t=e[m+50>>1]|0}else{q=e[m+50>>1]|0;t=q;p=c[g>>2]|0}A=t+-1|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=110;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=0;c[z+(o*20|0)+8>>2]=ca;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else o=Di(aa,110,0,ca,0)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(aa,(c[C>>2]|0)+(o*20|0)|0,p,0)}p=c[X>>2]|0;o=A+W|0;c[X>>2]=(p|0)>(o|0)?p:o;o=c[m+44>>2]|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;z=c[C>>2]|0;a[z+(p*20|0)>>0]=108;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=S;c[z+(p*20|0)+8>>2]=o;c[z+(p*20|0)+12>>2]=n;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0}else Di(aa,108,S,o,n)|0;o=c[Y>>2]|0;r=Ij(f,m)|0;c:do if(r|0){p=c[o>>2]|0;if(!(a[p+81>>0]|0)){y=c[o+104>>2]|0;z=(c[o+108>>2]|0)+-1|0;a[y+(z*20|0)+1>>0]=-9;c[y+(z*20|0)+16>>2]=r;break}if(c[p+480>>2]|0)break;z=(c[r>>2]|0)+-1|0;c[r>>2]=z;if(z|0)break;o=c[r+12>>2]|0;do if(o|0){if(c[o+480>>2]|0){Xd(o,r);break c}p=r;if((c[o+304>>2]|0)>>>0>p>>>0)break;if((c[o+308>>2]|0)>>>0<=p>>>0)break;z=o+300|0;c[r>>2]=c[z>>2];c[z>>2]=r;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{z=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=70;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=q;c[z+(o*20|0)+8>>2]=$;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else Di(aa,70,q,$,0)|0;s=m+50|0;o=e[s>>1]|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;z=c[C>>2]|0;a[z+(p*20|0)>>0]=70;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=o;c[z+(p*20|0)+8>>2]=ea;c[z+(p*20|0)+12>>2]=0;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0}else Di(aa,70,o,ea,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=63;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=0;c[z+(o*20|0)+8>>2]=$;c[z+(o*20|0)+12>>2]=_;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else o=Di(aa,63,0,$,_)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30184;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30184,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=2;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=36;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=S;c[z+(o*20|0)+8>>2]=0;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0;z=o}else z=Di(aa,36,S,0,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;y=c[C>>2]|0;a[y+(o*20|0)>>0]=70;b[y+(o*20|0)+2>>1]=0;c[y+(o*20|0)+4>>2]=0;c[y+(o*20|0)+8>>2]=$;c[y+(o*20|0)+12>>2]=0;c[y+(o*20|0)+16>>2]=0;a[y+(o*20|0)+1>>0]=0}else Di(aa,70,0,$,0)|0;o=c[T>>2]|0;d:do if(t>>>0>1){y=c[D>>2]|0;w=y+-1|0;c[D>>2]=w;p=A<<2;e:do if(c[E>>2]|0)if(!(a[G>>0]|0))V=105;else break b;else{do if(0<0|(0==0?(e[F>>1]|0)>>>0<p>>>0:0))o=H;else{o=c[I>>2]|0;if(o|0){c[I>>2]=c[o>>2];c[K>>2]=(c[K>>2]|0)+1;x=o;break e}o=c[J>>2]|0;if(!o){o=L;break}c[J>>2]=c[o>>2];c[K>>2]=(c[K>>2]|0)+1;x=o;break e}while(0);c[o>>2]=(c[o>>2]|0)+1;V=105}while(0);if((V|0)==105){V=0;x=_d(Z,p,0)|0}if(!x)break b;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;p=c[C>>2]|0;a[p+(o*20|0)>>0]=11;o=p+(o*20|0)+1|0;p=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(p|0))}else Di(aa,11,0,0,0)|0;r=c[T>>2]|0;do if((A|0)==1){if((b[s>>1]|0)!=1)break;if(!(a[m+54>>0]|0))break;if((c[U>>2]|0)>(r|0)){c[T>>2]=r+1;v=c[C>>2]|0;a[v+(r*20|0)>>0]=51;b[v+(r*20|0)+2>>1]=0;c[v+(r*20|0)+4>>2]=W;c[v+(r*20|0)+8>>2]=w;c[v+(r*20|0)+12>>2]=0;c[v+(r*20|0)+16>>2]=0;a[v+(r*20|0)+1>>0]=0;break}else{Di(aa,51,W,w,0)|0;break}}while(0);v=m+32|0;u=0;do{o=c[(c[v>>2]|0)+(u<<2)>>2]|0;q=c[f>>2]|0;p=a[q+78>>0]|0;t=a[q+165>>0]|0;q=Zi(q,p,o,t&255)|0;do if(!(t<<24>>24)){if(!q){q=_i(f,p,0,o)|0;break}if(c[q+12>>2]|0)break;q=_i(f,p,q,o)|0}while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;t=c[C>>2]|0;a[t+(o*20|0)>>0]=70;b[t+(o*20|0)+2>>1]=0;c[t+(o*20|0)+4>>2]=u;c[t+(o*20|0)+8>>2]=$;c[t+(o*20|0)+12>>2]=0;c[t+(o*20|0)+16>>2]=0;a[t+(o*20|0)+1>>0]=0}else Di(aa,70,u,$,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;t=c[C>>2]|0;a[t+(o*20|0)>>0]=90;b[t+(o*20|0)+2>>1]=0;c[t+(o*20|0)+4>>2]=S;c[t+(o*20|0)+8>>2]=u;c[t+(o*20|0)+12>>2]=ea;c[t+(o*20|0)+16>>2]=0;a[t+(o*20|0)+1>>0]=0}else Di(aa,90,S,u,ea)|0;o=u+W|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;t=c[C>>2]|0;a[t+(p*20|0)>>0]=52;b[t+(p*20|0)+2>>1]=0;c[t+(p*20|0)+4>>2]=ea;c[t+(p*20|0)+8>>2]=0;c[t+(p*20|0)+12>>2]=o;c[t+(p*20|0)+16>>2]=0;a[t+(p*20|0)+1>>0]=0}else p=Di(aa,52,ea,0,o)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((p|0)<0)o=(c[T>>2]|0)+-1|0;else o=p;s=c[C>>2]|0;t=s+(o*20|0)+1|0;if(a[t>>0]|0){Ei(aa,s+(o*20|0)|0,q,-2);break}if(!q)break;c[s+(o*20|0)+16>>2]=q;a[t>>0]=-2}while(0);c[x+(u<<2)>>2]=p;o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=128;u=u+1|0}while((u|0)<(A|0));if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;v=c[C>>2]|0;a[v+(o*20|0)>>0]=70;b[v+(o*20|0)+2>>1]=0;c[v+(o*20|0)+4>>2]=A;c[v+(o*20|0)+8>>2]=$;c[v+(o*20|0)+12>>2]=0;c[v+(o*20|0)+16>>2]=0;a[v+(o*20|0)+1>>0]=0}else Di(aa,70,A,$,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;v=c[C>>2]|0;a[v+(o*20|0)>>0]=11;b[v+(o*20|0)+2>>1]=0;c[v+(o*20|0)+4>>2]=0;c[v+(o*20|0)+8>>2]=w;c[v+(o*20|0)+12>>2]=0;c[v+(o*20|0)+16>>2]=0;a[v+(o*20|0)+1>>0]=0}else Di(aa,11,0,w,0)|0;q=c[T>>2]|0;p=a[(c[aa>>2]|0)+81>>0]|0;if(!(p<<24>>24))o=(c[C>>2]|0)+((((r|0)<1?q:r)+-1|0)*20|0)|0;else o=59308;c[o+8>>2]=q;o=0;s=q;while(1){q=c[x+(o<<2)>>2]|0;if(!(p<<24>>24))p=(c[C>>2]|0)+(((q|0)<0?s+-1|0:q)*20|0)|0;else p=59308;c[p+8>>2]=s;p=o+W|0;if((c[U>>2]|0)>(s|0)){c[T>>2]=s+1;w=c[C>>2]|0;a[w+(s*20|0)>>0]=90;b[w+(s*20|0)+2>>1]=0;c[w+(s*20|0)+4>>2]=S;c[w+(s*20|0)+8>>2]=o;c[w+(s*20|0)+12>>2]=p;c[w+(s*20|0)+16>>2]=0;a[w+(s*20|0)+1>>0]=0}else Di(aa,90,S,o,p)|0;o=o+1|0;if((o|0)>=(A|0))break;p=a[(c[aa>>2]|0)+81>>0]|0;s=c[T>>2]|0}p=c[M>>2]|0;o=0-y|0;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0)mk(p,aa,o);else c[(c[p+64>>2]|0)+(o<<2)>>2]=c[T>>2];do if(!N){if(c[O>>2]|0){Xd(Z,x);break d}o=x;if((c[P>>2]|0)>>>0>o>>>0)break;if((c[Q>>2]|0)>>>0<=o>>>0)break;c[x>>2]=c[I>>2];c[I>>2]=x;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{A=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}else r=o;while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=63;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=1;c[A+(o*20|0)+8>>2]=_;c[A+(o*20|0)+12>>2]=ea;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,63,1,_,ea)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30224;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30224,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=2;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=5;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=S;c[A+(o*20|0)+8>>2]=r;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,5,S,r,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=63;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=0;c[A+(o*20|0)+8>>2]=_;c[A+(o*20|0)+12>>2]=ba;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,63,0,_,ba)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30264;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30264,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=1;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=92;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=da;c[A+(o*20|0)+8>>2]=3;c[A+(o*20|0)+12>>2]=ea;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,92,da,3,ea)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(aa,(c[C>>2]|0)+(o*20|0)|0,46896,0)}o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=121;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=i;c[A+(o*20|0)+8>>2]=j;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,121,i,j,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=122;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=i;c[A+(o*20|0)+8>>2]=ea;c[A+(o*20|0)+12>>2]=j;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,122,i,ea,j)|0;p=c[T>>2]|0;if((p|0)>0)b[(c[C>>2]|0)+((p+-1|0)*20|0)+2>>1]=8;if(!(a[(c[aa>>2]|0)+81>>0]|0))o=(c[C>>2]|0)+(((z|0)<0?p+-1|0:z)*20|0)|0;else o=59308;c[o+8>>2]=p}while(0);m=c[m+20>>2]|0}while((m|0)!=0)}if(l<<24>>24==0|R^1){Ra=fa;return}l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;$=c[aa+104>>2]|0;a[$+(l*20|0)>>0]=93;b[$+(l*20|0)+2>>1]=0;c[$+(l*20|0)+4>>2]=k;c[$+(l*20|0)+8>>2]=ba;c[$+(l*20|0)+12>>2]=0;c[$+(l*20|0)+16>>2]=0;a[$+(l*20|0)+1>>0]=0}else Di(aa,93,k,ba,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;n=c[aa+104>>2]|0;a[n+(l*20|0)>>0]=20;b[n+(l*20|0)+2>>1]=0;c[n+(l*20|0)+4>>2]=ba;c[n+(l*20|0)+8>>2]=0;c[n+(l*20|0)+12>>2]=0;c[n+(l*20|0)+16>>2]=0;a[n+(l*20|0)+1>>0]=0;n=l}else n=Di(aa,20,ba,0,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;ba=c[aa+104>>2]|0;a[ba+(l*20|0)>>0]=73;b[ba+(l*20|0)+2>>1]=0;c[ba+(l*20|0)+4>>2]=0;c[ba+(l*20|0)+8>>2]=ca;c[ba+(l*20|0)+12>>2]=0;c[ba+(l*20|0)+16>>2]=0;a[ba+(l*20|0)+1>>0]=0}else Di(aa,73,0,ca,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;ca=c[aa+104>>2]|0;a[ca+(l*20|0)>>0]=92;b[ca+(l*20|0)+2>>1]=0;c[ca+(l*20|0)+4>>2]=da;c[ca+(l*20|0)+8>>2]=3;c[ca+(l*20|0)+12>>2]=ea;c[ca+(l*20|0)+16>>2]=0;a[ca+(l*20|0)+1>>0]=0}else l=Di(aa,92,da,3,ea)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[T>>2]|0)+-1|0;Ei(aa,(c[aa+104>>2]|0)+(l*20|0)|0,46896,0)}l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;da=c[aa+104>>2]|0;a[da+(l*20|0)>>0]=121;b[da+(l*20|0)+2>>1]=0;c[da+(l*20|0)+4>>2]=i;c[da+(l*20|0)+8>>2]=j;c[da+(l*20|0)+12>>2]=0;c[da+(l*20|0)+16>>2]=0;a[da+(l*20|0)+1>>0]=0}else Di(aa,121,i,j,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;da=c[aa+104>>2]|0;a[da+(l*20|0)>>0]=122;b[da+(l*20|0)+2>>1]=0;c[da+(l*20|0)+4>>2]=i;c[da+(l*20|0)+8>>2]=ea;c[da+(l*20|0)+12>>2]=j;c[da+(l*20|0)+16>>2]=0;a[da+(l*20|0)+1>>0]=0}else Di(aa,122,i,ea,j)|0;m=c[T>>2]|0;if((m|0)>0)b[(c[aa+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=8;if(!(a[(c[aa>>2]|0)+81>>0]|0))l=(c[aa+104>>2]|0)+(((n|0)<0?m+-1|0:n)*20|0)|0;else l=59308;c[l+8>>2]=m;Ra=fa;return}function kn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=c[h>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){o=Mg(+g[f>>3])|0;L()|0;break}if(!(i&18))o=0;else{o=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0}}else o=c[f>>2]|0;while(0);p=o+1&-2;f=c[h+4>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){l=Mg(+g[f>>3])|0;L()|0;break}if(!(i&18))l=0;else{l=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0}}else l=c[f>>2]|0;while(0);m=(p<<3)+60|0;n=c[(c[d>>2]|0)+32>>2]|0;h=((m|0)<0)<<31>>31;a:do if(!n){h=Sv(m|0,h|0,-1,-1)|0;i=L()|0;if(!(i>>>0>0|(i|0)==0&h>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;k=37;break}h=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){q=c[14978]|0;i=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&i>>>0<=q>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(f|0){i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;k=47}else k=47}}}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0)break}else{do if(!(0<h>>>0|(0==(h|0)?(e[n+276>>1]|0)>>>0<m>>>0:0))){f=n+300|0;i=c[f>>2]|0;if(i|0){c[f>>2]=c[i>>2];j=n+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;k=37;break a}f=n+296|0;i=c[f>>2]|0;if(!i){f=n+292|0;break}else{c[f>>2]=c[i>>2];j=n+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;k=37;break a}}else f=n+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}j=_d(n,m,h)|0;k=37}while(0);if((k|0)==37?j|0:0){f=j;k=47}if((k|0)==47){gw(f|0,0,m|0)|0;c[f+56>>2]=n;c[f>>2]=0;c[f+8>>2]=o;c[f+12>>2]=l;q=f+60|0;c[f+24>>2]=q;c[f+20>>2]=q+(p<<2);if((yc(c[d>>2]|0,f,60,0,96)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}f=c[d>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[d>>2]|0}c[d+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0)return;if(a[f+82>>0]|0)return;a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;q=f+272|0;c[q>>2]=(c[q>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function ln(a){a=a|0;var b=0,d=0;b=c[a+56>>2]|0;if(!a)return;if(b|0){if(c[b+480>>2]|0){Xd(b,a);return}d=a;if((c[b+304>>2]|0)>>>0<=d>>>0?(c[b+308>>2]|0)>>>0>d>>>0:0){d=b+300|0;c[a>>2]=c[d>>2];c[d>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function mn(b,d,f){b=b|0;d=d|0;f=f|0;var h=0,i=0,j=0;j=mc(c[f>>2]|0)|0;b=c[f+4>>2]|0;d=e[b+8>>1]|0;do if(!(d&4)){if(d&8|0){i=Mg(+g[b>>3])|0;L()|0;break}if(!(d&18))i=0;else{i=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;L()|0}}else i=c[b>>2]|0;while(0);if(!(c[j>>2]|0)){d=j+8|0;if((c[d>>2]|0)<=0){i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}f=c[j+20>>2]|0;b=0;do{c[f+(b<<2)>>2]=1;b=b+1|0}while((b|0)<(c[d>>2]|0));i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}if((i|0)>0){d=c[j+20>>2]|0;b=0;do{h=d+(b<<2)|0;c[h>>2]=(c[h>>2]|0)+1;b=b+1|0}while((b|0)!=(i|0))}d=j+8|0;if((i|0)>=(c[d>>2]|0)){i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}f=c[j+24>>2]|0;h=c[j+20>>2]|0;b=i;do{i=f+(b<<2)|0;c[i>>2]=(c[i>>2]|0)+1;c[h+(b<<2)>>2]=1;b=b+1|0}while((b|0)<(c[d>>2]|0));i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}function nn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=Ra;Ra=Ra+16|0;l=m+8|0;i=m;j=mc(c[f>>2]|0)|0;k=j+12|0;h=((c[k>>2]|0)*25|0)+25|0;g=Sv(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;f=L()|0;do if(!(f>>>0>0|(f|0)==0&g>>>0>2147483390)){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](h)|0;if(!e)break}else{e=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){n=c[14978]|0;g=Tv(f|0,g|0,e|0,((e|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=n>>>0)&1}e=Wa[c[29340>>2]&127](e)|0;if(!e)break;f=Wa[c[29352>>2]&127](e)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(e|0,0,h|0)|0;n=i;c[n>>2]=c[j>>2];c[n+4>>2]=0;Cb(24,e,46929,i)|0;if((c[k>>2]|0)>0){i=j+24|0;g=0;h=e+((Eu(e)|0)&1073741823)|0;while(1){o=(c[(c[i>>2]|0)+(g<<2)>>2]|0)+1|0;f=c[j>>2]|0;n=Sv(o|0,0,-1,-1)|0;f=Sv(n|0,L()|0,f|0,0)|0;o=_v(f|0,L()|0,o|0,0)|0;f=L()|0;n=l;c[n>>2]=o;c[n+4>>2]=f;Cb(24,h,46934,l)|0;if(!h)f=0;else f=(Eu(h)|0)&1073741823;g=g+1|0;if((g|0)>=(c[k>>2]|0))break;else h=h+f|0}}if((yc(c[d>>2]|0,e,-1,1,90)|0)!=18){Ra=m;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=m;return}while(0);e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0){Ra=m;return}if(a[e+82>>0]|0){Ra=m;return}a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;o=e+272|0;c[o>>2]=(c[o>>2]|0)+1;e=c[e+236>>2]|0;if(!e){Ra=m;return}c[e+12>>2]=7;Ra=m;return}function on(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;k=l;j=c[e>>2]|0;a:do if(j){f=a[j>>0]|0;do if(!(f<<24>>24)){f=39441;i=3}else{h=f&255;f=208+h|0;if((h|32|0)==115){f=a[j+1>>0]|0;if(!(f<<24>>24)){f=39442;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==113){f=a[j+2>>0]|0;if(!(f<<24>>24)){f=39443;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==108){f=a[j+3>>0]|0;if(!(f<<24>>24)){f=39444;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==105){f=a[j+4>>0]|0;if(!(f<<24>>24)){f=39445;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==116){f=a[j+5>>0]|0;if(!(f<<24>>24)){f=39446;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==101){f=a[j+6>>0]|0;if(!(f<<24>>24)){f=39447;i=3;break}if(f<<24>>24==95)break a;else{h=95;f=208+(f&255)|0}}else h=101}else h=116}else h=105}else h=108}else h=113}else h=115;g=d[f>>0]|0;f=h}while(0);if((i|0)==3){g=0;f=a[208+(d[f>>0]|0)>>0]|0}if((g|0)!=(f&255|0))i=8}else i=8;while(0);if((i|0)==8){if(!(c[e+36>>2]&1024)){k=0;Ra=l;return k|0}f=c[b>>2]|0;if(0==0?(c[f+32>>2]&268435456|0)==0:0){k=0;Ra=l;return k|0}if(c[f+180>>2]|0){k=0;Ra=l;return k|0}}c[k>>2]=j;cd(b,47776,k);k=1;Ra=l;return k|0}function pn(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+32|0;h=k;i=h+20|0;a[i>>0]=1;c[h+4>>2]=127;c[h+8>>2]=128;c[h+24>>2]=0;if(!g){j=0;Ra=k;return j|0}_j(h,g)|0;if(a[i>>0]|0){j=g;Ra=k;return j|0}if((d[f+200>>0]|0)>1){i=h+8|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[h>>2]=f;c[h+4>>2]=124;_j(h,g)|0}ni(c[f>>2]|0,g);g=c[f>>2]|0;a:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))j=15;else{j=0;Ra=k;return j|0}else{do if((e[g+276>>1]|0)>=52){f=g+300|0;h=c[f>>2]|0;if(h|0){c[f>>2]=c[h>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;break a}f=g+296|0;h=c[f>>2]|0;if(!h){f=g+292|0;break}else{c[f>>2]=c[h>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;break a}}else f=g+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(g,52,0)|0;if(!h){j=h;Ra=k;return j|0}f=h;g=f+52|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[h>>0]=114;b[h+34>>1]=-1;c[h+24>>2]=1;j=h;Ra=k;return j|0}function qn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0;e=c[f>>2]|0;if(!e)return;f=b[e+8>>1]|0;if((f&514)==514?(a[e+10>>0]|0)==1:0)e=c[e+16>>2]|0;else g=5;do if((g|0)==5)if(!(f&1)){e=Gg(e,1)|0;break}else return;while(0);if(!e)return;h=Wd(e)|0;e=c[d>>2]|0;f=((h|0)<0)<<31>>31;g=e+8|0;if(!(b[g>>1]&9216)){d=e;c[d>>2]=h;c[d+4>>2]=f;b[g>>1]=4;return}else{Pg(e,h,f);return}}function rn(b,d,f){b=b|0;d=d|0;f=f|0;d=c[f>>2]|0;f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){d=Mg(+g[d>>3])|0;L()|0;f=7;break}if(!(f&18)){d=26464;f=8}else{d=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0;f=7}}else{d=c[d>>2]|0;f=7}while(0);if((f|0)==7)if(d>>>0<7){d=26464+(d<<2)|0;f=8}else d=0;if((f|0)==8)d=c[d>>2]|0;if((yc(c[b>>2]|0,d,-1,1,0)|0)!=18)return;c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0;return}function sn(a,b,d){a=a|0;b=b|0;d=d|0;if((yc(c[a>>2]|0,31142,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function tn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=c[g>>2]|0;i=b[h+8>>1]|0;if((h|0)==0|(-1431655766>>>(i&31)&1|0)!=0)return;if((i&514)==514?(a[h+10>>0]|0)==1:0)i=c[h+16>>2]|0;else q=5;do if((q|0)==5)if(!(i&1)){i=Gg(h,1)|0;break}else return;while(0);if(!i)return;k=c[g>>2]|0;h=b[k+8>>1]|0;if((h&2)!=0?(a[k+10>>0]|0)==1:0)h=c[k+12>>2]|0;else q=11;do if((q|0)==11){j=h&65535;if(!(j&16)){if(j&1|0){h=0;break}h=Fg(k,1)|0;break}else{h=c[k+12>>2]|0;if(!(j&16384))break;h=(c[k>>2]|0)+h|0;break}}while(0);a:do if((f|0)!=1){j=c[g+4>>2]|0;if(!j)return;k=b[j+8>>1]|0;if((k&514)==514?(a[j+10>>0]|0)==1:0)p=c[j+16>>2]|0;else q=21;do if((q|0)==21)if(!(k&1)){p=Gg(j,1)|0;break}else return;while(0);if(!p)return;k=a[p>>0]|0;if(k<<24>>24){j=p;l=0;do{f=j+1|0;if((k&255)>191){j=f;while(1){k=a[j>>0]|0;if((k&-64)<<24>>24==-128)j=j+1|0;else break}}else{j=f;k=a[f>>0]|0}l=l+1|0}while(k<<24>>24!=0);f=Yv(l|0,0,5,0)|0;j=L()|0;k=c[e>>2]|0;o=c[(c[k+32>>2]|0)+108>>2]|0;n=((o|0)<0)<<31>>31;if((j|0)>(n|0)|(j|0)==(n|0)&f>>>0>o>>>0){c[e+20>>2]=18;yc(k,31223,-1,1,0)|0;return}o=Sv(f|0,j|0,-1,-1)|0;n=L()|0;do if(!(n>>>0>0|(n|0)==0&o>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](f)|0;if(!j)break}else{g=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){o=c[14978]|0;n=Tv(j|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}j=Wa[c[29340>>2]&127](g)|0;if(!j)break;k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}m=j+(l<<2)|0;if(!(a[p>>0]|0))break a;g=0;k=p;while(1){c[j+(g<<2)>>2]=k;f=k+1|0;l=k;if((d[k>>0]|0)>191){k=f;while(1)if((a[k>>0]&-64)<<24>>24==-128)k=k+1|0;else break}else k=f;a[m+g>>0]=k-l;f=g+1|0;if(!(a[k>>0]|0)){o=j;n=j;q=60;break a}else g=f}}while(0);h=c[e>>2]|0;i=h+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(h);h=c[e>>2]|0}c[e+20>>2]=7;h=c[h+32>>2]|0;i=h+81|0;if(a[i>>0]|0)return;if(a[h+82>>0]|0)return;a[i>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;e=h+272|0;c[e>>2]=(c[e>>2]|0)+1;h=c[h+236>>2]|0;if(!h)return;c[h+12>>2]=7;return}}else{p=0;o=30304;m=49513;f=1;n=30304;q=60}while(0);do if((q|0)==60){l=c[(c[e+4>>2]|0)+8>>2]|0;b:do if((l&1|0)!=0&(h|0)>0)do{j=0;while(1){k=a[m+j>>0]|0;g=k&255;if((h|0)>=(g|0)?(Lu(i,c[o+(j<<2)>>2]|0,g)|0)==0:0)break;j=j+1|0;if(j>>>0>=f>>>0){q=67;break b}}g=k&255;i=i+g|0;h=h-g|0}while((h|0)>0);else q=67;while(0);c:do if((q|0)==67)if((l&2|0)!=0&(h|0)>0)while(1){j=0;while(1){k=d[m+j>>0]|0;if((h|0)>=(k|0)?(r=h-k|0,(Lu(i+r|0,c[o+(j<<2)>>2]|0,k)|0)==0):0)break;j=j+1|0;if(j>>>0>=f>>>0)break c}if((r|0)>0)h=r;else{h=r;break}}while(0);if(!((n|0)==0|(p|0)==0))if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{r=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if((yc(c[e>>2]|0,i,h,1,-1)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}function un(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=((c[(c[a+4>>2]|0)+8>>2]|0)!=0)<<31>>31;i=c[(c[(c[a+12>>2]|0)+104>>2]|0)+(((c[a+16>>2]|0)+-1|0)*20|0)+16>>2]|0;f=c[e>>2]|0;if(-1431655766>>>(b[f+8>>1]&31)&1|0)return;do if((d|0)>1){h=0;f=1;while(1){g=c[e+(f<<2)>>2]|0;if(-1431655766>>>(b[g+8>>1]&31)&1|0){g=8;break}g=((Tg(c[e+(h<<2)>>2]|0,g,i)|0)^j|0)>-1;h=g?f:h;f=f+1|0;if((f|0)>=(d|0)){g=6;break}}if((g|0)==6){f=c[e+(h<<2)>>2]|0;break}else if((g|0)==8)return}while(0);Dc(a,f);return}function vn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[f>>2]|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))i=Ic(d,40)|0;else i=c[e+16>>2]|0;if(!i)return;h=g+8|0;j=i+8|0;e=(b[j>>1]|0)!=0;if(-1431655766>>>(b[h>>1]&31)&1|0){if(!e)return;c[d+20>>2]=-1;a[d+24>>0]=1;return}if(!e){c[i+32>>2]=c[(c[d>>2]|0)+32>>2];c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=49;do if((k|0)==49)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}e=(c[(c[d+4>>2]|0)+8>>2]|0)!=0;f=Tg(i,g,c[(c[(c[d+12>>2]|0)+104>>2]|0)+(((c[d+16>>2]|0)+-1|0)*20|0)+16>>2]|0)|0;if(e&(f|0)<0){if(b[j>>1]&9216)Dg(i);c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=22;do if((k|0)==22)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}if(!((f|0)>0&(e^1))){c[d+20>>2]=-1;a[d+24>>0]=1;return}if(b[j>>1]&9216)Dg(i);c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=36;do if((k|0)==36)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}function wn(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+8|0;if(!((b[e>>1]|0)!=0?(Dc(a,d),(b[e>>1]&9216)!=0):0))f=7;if((f|0)==7?(c[d+24>>2]|0)==0:0)return;Cg(d);return}function xn(a){a=a|0;var d=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;if(!(b[d+8>>1]|0))return;Dc(a,d);return}function yn(a,e,f){a=a|0;e=e|0;f=f|0;if((yc(c[a>>2]|0,c[21712+((d[816+(b[(c[f>>2]|0)+8>>1]&31)>>0]|0)+-1<<2)>>2]|0,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function zn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[f>>2]|0;e=b[g+8>>1]|0;switch(a[816+(e&31)>>0]|0){case 2:case 1:case 4:{if((e&2)!=0?(a[g+10>>0]|0)==1:0)f=c[g+12>>2]|0;else i=5;do if((i|0)==5){e=e&65535;if(!(e&16)){if(e&1|0){f=0;break}f=Fg(g,1)|0;break}else{f=c[g+12>>2]|0;if(!(e&16384))break;f=(c[g>>2]|0)+f|0;break}}while(0);e=c[d>>2]|0;g=((f|0)<0)<<31>>31;h=e+8|0;if(!(b[h>>1]&9216)){d=e;c[d>>2]=f;c[d+4>>2]=g;b[h>>1]=4;return}else{Pg(e,f,g);return}}case 3:{if(!g)return;if((e&514)==514?(a[g+10>>0]|0)==1:0)h=c[g+16>>2]|0;else i=17;do if((i|0)==17)if(!(e&1)){h=Gg(g,1)|0;break}else return;while(0);if(!h)return;g=a[h>>0]|0;if(!(g<<24>>24)){f=h;e=h}else{e=h;f=h;do{f=f+1|0;h=a[f>>0]|0;if((g&255)>191&(h&-64)<<24>>24==-128)do{f=f+1|0;e=e+1|0;g=a[f>>0]|0}while((g&-64)<<24>>24==-128);else g=h}while(g<<24>>24!=0)}h=f-e|0;e=c[d>>2]|0;f=((h|0)<0)<<31>>31;g=e+8|0;if(!(b[g>>1]&9216)){d=e;c[d>>2]=h;c[d+4>>2]=f;b[g>>1]=4;return}else{Pg(e,h,f);return}}default:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;return}else{Dg(e);return}}}}function An(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=c[f>>2]|0;e=b[g+8>>1]|0;m=e&31;n=f+4|0;i=c[n>>2]|0;j=b[i+8>>1]|0;l=j&31;if((-1431655766>>>l|-1431655766>>>m)&1|0)return;if((e&2)!=0?(a[g+10>>0]|0)==1:0){h=c[g+12>>2]|0;e=j}else k=5;do if((k|0)==5){e=e&65535;if(!(e&16)){if(e&1|0){h=0;e=j;break}h=Fg(g,1)|0;i=c[n>>2]|0;e=b[i+8>>1]|0;break}else{h=c[g+12>>2]|0;if(!(e&16384)){e=j;break}h=(c[g>>2]|0)+h|0;e=j;break}}while(0);if((e&2)!=0?(a[i+10>>0]|0)==1:0){o=c[i+12>>2]|0;k=18}else k=13;do if((k|0)==13){g=e&65535;if(!(g&16)){if(g&1|0){e=1;i=0;break}o=Fg(i,1)|0;k=18;break}else{e=c[i+12>>2]|0;if(!(g&16384)){o=e;k=18;break}o=(c[i>>2]|0)+e|0;k=18;break}}while(0);a:do if((k|0)==18)if((o|0)>0){g=c[f>>2]|0;do if(!((m|16|0)==16&(l|16|0)==16)){do if(g){e=b[g+8>>1]|0;if((e&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(e&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);i=c[n>>2]|0;if(!i)return;e=b[i+8>>1]|0;if((e&514)==514?(a[i+10>>0]|0)==1:0){e=1;k=c[i+16>>2]|0;break}if(!(e&1)){e=1;k=Gg(i,1)|0;break}else return}else{g=mc(g)|0;e=0;k=mc(c[n>>2]|0)|0}while(0);if(!k)return;if((h|0)!=0&(g|0)==0)return;l=a[k>>0]|0;if((o|0)>(h|0)){e=0;i=0}else{b:do if(!e){e=1;while(1){if((a[g>>0]|0)==l<<24>>24?(Lu(g,k,o)|0)==0:0)break b;if((o|0)<(h|0)){e=e+1|0;h=h+-1|0;g=g+1|0}else{e=0;i=0;break a}}}else{e=1;j=g;g=a[g>>0]|0;while(1){if(g<<24>>24==l<<24>>24?(Lu(j,k,o)|0)==0:0)break b;while(1){i=h+-1|0;j=j+1|0;g=a[j>>0]|0;if((g&-64)<<24>>24!=-128)break;else h=i}if((o|0)<(h|0)){e=e+1|0;h=i}else{e=0;i=0;break a}}}while(0);i=0}}else{e=1;i=0}while(0);g=c[d>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){d=g;c[d>>2]=e;c[d+4>>2]=i;b[h>>1]=4;return}else{Pg(g,e,i);return}}function Bn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;l=n;k=n+32|0;m=n+8|0;j=c[(c[d>>2]|0)+32>>2]|0;if((e|0)<=0){Ra=n;return}h=c[f>>2]|0;if(!h){Ra=n;return}g=b[h+8>>1]|0;if((g&514)==514?(a[h+10>>0]|0)==1:0)g=c[h+16>>2]|0;else i=6;do if((i|0)==6)if(!(g&1)){g=Gg(h,1)|0;break}else{Ra=n;return}while(0);if(!g){Ra=n;return}c[k>>2]=e+-1;c[k+4>>2]=0;c[k+8>>2]=f+4;h=c[j+108>>2]|0;i=m+4|0;c[i>>2]=0;c[m>>2]=j;c[m+8>>2]=0;e=m+12|0;c[e>>2]=h;h=m+16|0;c[h>>2]=0;a[m+20>>0]=0;f=m+21|0;a[f>>0]=2;c[l>>2]=k;Eb(m,g,l);h=c[h>>2]|0;g=c[i>>2]|0;if(((g|0)!=0?(a[g+h>>0]=0,(c[e>>2]|0)!=0):0)?(a[f>>0]&4)==0:0)g=$d(m)|0;else g=c[i>>2]|0;if((yc(c[d>>2]|0,g,h,1,116)|0)!=18){Ra=n;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=n;return}function Cn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0;f=c[g>>2]|0;if(!f)return;g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)f=c[f+16>>2]|0;else h=5;do if((h|0)==5)if(!(g&1)){f=Gg(f,1)|0;break}else return;while(0);if(!f)return;g=a[f>>0]|0;if(!(g<<24>>24))return;h=f+1|0;f=g&255;if((g&255)>191){f=d[2736+(f+-192)>>0]|0;g=a[h>>0]|0;if((g&-64)<<24>>24==-128)do{h=h+1|0;f=f<<6|g&63;g=a[h>>0]|0}while((g&-64)<<24>>24==-128);f=(f&-2|0)==65534|(f>>>0<128|(f&-2048|0)==55296)?65533:f}g=c[e>>2]|0;h=((f|0)<0)<<31>>31;e=g+8|0;if(!(b[e>>1]&9216)){c[g>>2]=f;c[g+4>>2]=h;b[e>>1]=4;return}else{Pg(g,f,h);return}}function Dn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=f<<2|1;q=pb(q,((q|0)<0)<<31>>31)|0;if(!q){i=c[d>>2]|0;j=i+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(i);i=c[d>>2]|0}c[d+20>>2]=7;i=c[i+32>>2]|0;j=i+81|0;if(a[j>>0]|0)return;if(a[i+82>>0]|0)return;a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;d=i+272|0;c[d>>2]=(c[d>>2]|0)+1;i=c[i+236>>2]|0;if(!i)return;c[i+12>>2]=7;return}if((f|0)>0){o=0;i=q;do{j=c[h+(o<<2)>>2]|0;k=e[j+8>>1]|0;do if(!(k&4)){if(k&8|0){k=Mg(+g[j>>3])|0;j=L()|0;p=19;break}if(!(k&18)){n=i;m=1;j=0}else{k=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;j=L()|0;p=19}}else{k=j;j=c[k+4>>2]|0;k=c[k>>2]|0;p=19}while(0);do if((p|0)==19){p=0;l=k&2097151;if(!(j>>>0>0|(j|0)==0&k>>>0>1114111)){if(l>>>0<128){n=i;m=1;j=l;break}if(l>>>0<2048){a[i>>0]=k>>>6&31|192;n=i+1|0;m=2;j=k&63|128;break}if(l>>>0<65536)j=l;else{a[i>>0]=l>>>18|240;a[i+1>>0]=k>>>12&63|128;a[i+2>>0]=k>>>6&63|128;n=i+3|0;m=4;j=k&63|128;break}}else j=65533;a[i>>0]=j>>>12&15|224;a[i+1>>0]=j>>>6&63|128;n=i+2|0;m=3;j=j&63|128}while(0);i=i+m|0;a[n>>0]=j;o=o+1|0}while((o|0)!=(f|0))}else i=q;i=i-q|0;if((i|0)>=0){if((yc(c[d>>2]|0,q,i,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}do if(90!=-1)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{p=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}function En(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;i=l+8|0;j=l;f=c[f>>2]|0;e=b[f+8>>1]|0;switch(a[816+(e&31)>>0]|0){case 1:{e=e&65535;do if(!(e&4)){if(e&8|0){e=Mg(+g[f>>3])|0;f=L()|0;k=8;break}if(!(e&18)){e=0;j=0}else{e=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;k=8}}else{e=f;f=c[e+4>>2]|0;e=c[e>>2]|0;k=8}while(0);do if((k|0)==8)if((f|0)<0){if(!((e|0)==0&(f|0)==-2147483648)){e=Tv(0,0,e|0,f|0)|0;j=L()|0;break}c[d+20>>2]=1;yc(c[d>>2]|0,49524,-1,1,-1)|0;Ra=l;return}else j=f;while(0);f=c[d>>2]|0;i=f+8|0;if(!(b[i>>1]&9216)){d=f;c[d>>2]=e;c[d+4>>2]=j;b[i>>1]=4;Ra=l;return}else{Pg(f,e,j);Ra=l;return}}case 5:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;Ra=l;return}else{Dg(e);Ra=l;return}}default:{e=e&65535;do if(!(e&8)){if(e&4|0){k=f;h=+((c[k>>2]|0)>>>0)+4294967296.0*+(c[k+4>>2]|0);break}if(!(e&18))h=0.0;else h=+Kg(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)}else h=+g[f>>3];while(0);h=h<0.0?-h:h;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(e);g[i>>3]=h;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){Ra=l;return}g[e>>3]=h;b[f>>1]=8;Ra=l;return}}}function Fn(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;j=n+24|0;l=n+16|0;m=n+8|0;k=n;a:do if((e|0)==2){h=c[f+4>>2]|0;e=b[h+8>>1]|0;if(-1431655766>>>(e&31)&1|0){Ra=n;return}e=e&65535;do if(!(e&4)){if(e&8|0){e=Mg(+g[h>>3])|0;L()|0;break}if(!(e&18)){e=0;break a}e=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}else e=c[h>>2]|0;while(0);if((e|0)<30){if((e|0)<=0){e=0;break}}else e=30}else e=0;while(0);f=c[f>>2]|0;h=b[f+8>>1]|0;if(-1431655766>>>(h&31)&1|0){Ra=n;return}h=h&65535;do if(!(h&8)){if(h&4|0){i=+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0);break}if(!(h&18))i=0.0;else i=+Kg(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)}else i=+g[f>>3];while(0);g[k>>3]=i;h=(e|0)==0;do if(i<9223372036854775808.0&(h&i>=0.0)){i=i+.5;i=+(~~i>>>0>>>0)+4294967296.0*+((+t(i)>=1.0?(i>0.0?~~+H(+s(i/4294967296.0),4294967295.0)>>>0:~~+F((i-+(~~i>>>0))/4294967296.0)>>>0):0)|0);g[k>>3]=i}else{if(i>-9223372036854775808.0&(h&i<0.0)){i=.5-i;i=-(+(~~i>>>0>>>0)+4294967296.0*+((+t(i)>=1.0?(i>0.0?~~+H(+s(i/4294967296.0),4294967295.0)>>>0:~~+F((i-+(~~i>>>0))/4294967296.0)>>>0):0)|0));g[k>>3]=i;break}c[j>>2]=e;g[j+8>>3]=i;e=Bb(49541,j)|0;if(e|0){Lg(e,k,(Eu(e)|0)&1073741823,1)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}e=c[d>>2]|0;h=e+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;h=e+81|0;if(a[h>>0]|0){Ra=n;return}if(a[e+82>>0]|0){Ra=n;return}a[h>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e){Ra=n;return}c[e+12>>2]=7;Ra=n;return}while(0);i=+g[k>>3];e=c[d>>2]|0;h=e+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else Dg(e);g[l>>3]=i;g[m>>3]=+g[l>>3];if(!(+g[l>>3]==+g[m>>3])){Ra=n;return}g[e>>3]=i;b[h>>1]=8;Ra=n;return}function Gn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=c[f>>2]|0;e=b[g+8>>1]|0;if((e&514)==514?(a[g+10>>0]|0)==1:0){j=c[g+16>>2]|0;f=g}else if(!(e&1)){j=Gg(g,1)|0;f=c[f>>2]|0}else{j=0;f=g}e=b[f+8>>1]|0;if((e&2)!=0?(a[f+10>>0]|0)==1:0)i=c[f+12>>2]|0;else h=9;do if((h|0)==9){e=e&65535;if(!(e&16)){if(e&1|0){i=0;break}i=Fg(f,1)|0;break}else{g=c[f+12>>2]|0;if(!(e&16384)){i=g;break}i=(c[f>>2]|0)+g|0;break}}while(0);if(!j)return;g=Sv(i|0,((i|0)<0)<<31>>31|0,1,0)|0;L()|0;e=c[d>>2]|0;if((i|0)>=(c[(c[e+32>>2]|0)+108>>2]|0)){c[d+20>>2]=18;yc(e,31223,-1,1,0)|0;return}do if(i>>>0<=2147483390){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](g)|0;if(!e)break}else{f=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){h=c[14978]|0;g=Tv(e|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&g>>>0<=h>>>0)&1}e=Wa[c[29340>>2]&127](f)|0;if(!e)break;g=Wa[c[29352>>2]&127](e)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}if((i|0)>0){g=0;do{h=a[j+g>>0]|0;a[e+g>>0]=h&~(a[880+(h&255)>>0]&32);g=g+1|0}while((g|0)!=(i|0))}if((yc(c[d>>2]|0,e,i,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;if(a[g>>0]|0)return;if(a[e+82>>0]|0)return;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Hn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=c[g>>2]|0;f=b[h+8>>1]|0;if((f&514)==514?(a[h+10>>0]|0)==1:0){k=c[h+16>>2]|0;g=h}else if(!(f&1)){k=Gg(h,1)|0;g=c[g>>2]|0}else{k=0;g=h}f=b[g+8>>1]|0;if((f&2)!=0?(a[g+10>>0]|0)==1:0)j=c[g+12>>2]|0;else i=9;do if((i|0)==9){f=f&65535;if(!(f&16)){if(f&1|0){j=0;break}j=Fg(g,1)|0;break}else{h=c[g+12>>2]|0;if(!(f&16384)){j=h;break}j=(c[g>>2]|0)+h|0;break}}while(0);if(!k)return;h=Sv(j|0,((j|0)<0)<<31>>31|0,1,0)|0;L()|0;f=c[e>>2]|0;if((j|0)>=(c[(c[f+32>>2]|0)+108>>2]|0)){c[e+20>>2]=18;yc(f,31223,-1,1,0)|0;return}do if(j>>>0<=2147483390){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;if(!f)break}else{g=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;h=59064;f=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&f>>>0>0){i=c[14978]|0;h=Tv(f|0,h|0,g|0,((g|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}f=Wa[c[29340>>2]&127](g)|0;if(!f)break;h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}if((j|0)>0){h=0;do{a[f+h>>0]=a[208+(d[k+h>>0]|0)>>0]|0;h=h+1|0}while((h|0)!=(j|0))}if((yc(c[e>>2]|0,f,j,1,90)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[e>>2]|0;h=f+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;h=f+81|0;if(a[h>>0]|0)return;if(a[f+82>>0]|0)return;a[h>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function In(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=mc(c[g>>2]|0)|0;h=c[g>>2]|0;f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)g=c[h+12>>2]|0;else i=4;do if((i|0)==4){f=f&65535;if(!(f&16)){if(f&1|0){g=0;break}g=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(f&16384))break;g=(c[h>>2]|0)+g|0;break}}while(0);i=cw(g|0,((g|0)<0)<<31>>31|0,1)|0;f=L()|0;i=i|1;h=c[e>>2]|0;k=c[(c[h+32>>2]|0)+108>>2]|0;j=((k|0)<0)<<31>>31;if((f|0)>(j|0)|(f|0)==(j|0)&i>>>0>k>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;return}k=Sv(i|0,f|0,-1,-1)|0;j=L()|0;do if(!(j>>>0>0|(j|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f)break;else h=f}else{j=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;f=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&f>>>0>0){k=c[14978]|0;i=Tv(f|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=k>>>0)&1}h=Wa[c[29340>>2]&127](j)|0;if(!h)break;f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}k=g<<1;if((g|0)>0){j=h;f=l;i=0;while(1){l=d[f>>0]|0;a[j>>0]=a[21744+(l>>>4)>>0]|0;a[j+1>>0]=a[21744+(l&15)>>0]|0;i=i+1|0;if((i|0)==(g|0))break;else{j=j+2|0;f=f+1|0}}f=h+k|0}else f=h;a[f>>0]=0;if((yc(c[e>>2]|0,h,k,1,90)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[e>>2]|0;g=f+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;g=f+81|0;if(a[g>>0]|0)return;if(a[f+82>>0]|0)return;a[g>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function Jn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;d=h;Fb(8,d);f=d;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)<0){g=Tv(0,0,e|0,f&2147483647|0)|0;f=L()|0;e=d;c[e>>2]=g;c[e+4>>2]=f}else g=e;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=g;c[a+4>>2]=f;b[e>>1]=4;Ra=h;return}else{Pg(d,g,f);Ra=h;return}}function Kn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){h=Mg(+g[f>>3])|0;f=L()|0;j=7;break}if(!(h&18)){i=0;f=1}else{h=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;j=7}}else{h=f;f=c[h+4>>2]|0;h=c[h>>2]|0;j=7}while(0);if((j|0)==7){j=(f|0)>0|(f|0)==0&h>>>0>1;i=j?f:0;f=j?h:1}h=c[d>>2]|0;j=c[(c[h+32>>2]|0)+108>>2]|0;k=((j|0)<0)<<31>>31;if((i|0)>(k|0)|(i|0)==(k|0)&f>>>0>j>>>0){c[d+20>>2]=18;yc(h,31223,-1,1,0)|0;return}k=Sv(f|0,i|0,-1,-1)|0;j=L()|0;do if(!(j>>>0>0|(j|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;if(!h)break}else{h=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){k=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=k>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h)break;i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}Fb(f,h);if((yc(c[d>>2]|0,h,f,0,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[d>>2]|0;h=f+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(f);f=c[d>>2]|0}c[d+20>>2]=7;f=c[f+32>>2]|0;h=f+81|0;if(a[h>>0]|0)return;if(a[f+82>>0]|0)return;a[h>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;k=f+272|0;c[k>>2]=(c[k>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function Ln(a,b,d){a=a|0;b=b|0;d=d|0;if(!(Tg(c[d>>2]|0,c[d+4>>2]|0,c[(c[(c[a+12>>2]|0)+104>>2]|0)+(((c[a+16>>2]|0)+-1|0)*20|0)+16>>2]|0)|0))return;Dc(a,c[d>>2]|0);return}function Mn(a,b,d){a=a|0;b=b|0;d=d|0;if((yc(c[a>>2]|0,31497,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function Nn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;j=k;d=c[h>>2]|0;f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){i=Mg(+g[d>>3])|0;L()|0;break}if(!(f&18))i=0;else{i=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0}}else i=c[d>>2]|0;while(0);d=c[h+4>>2]|0;do if(d){f=b[d+8>>1]|0;if((f&514)==514?(a[d+10>>0]|0)==1:0){d=c[d+16>>2]|0;break}if(!(f&1))d=Gg(d,1)|0;else d=0}else d=0;while(0);c[j>>2]=d;Db(i,31408,j);Ra=k;return}function On(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+80|0;n=q+72|0;m=q+64|0;k=q+56|0;l=q;i=c[h>>2]|0;f=b[i+8>>1]|0;switch(a[816+(f&31)>>0]|0){case 2:{f=f&65535;do if(!(f&8)){if(f&4|0){p=i;j=+((c[p>>2]|0)>>>0)+4294967296.0*+(c[p+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else j=+g[i>>3];while(0);g[m>>3]=j;Cb(50,l,32529,m)|0;Lg(l,k,20,1)|0;if(j!=+g[k>>3]){g[n>>3]=j;Cb(50,l,49546,n)|0}if((yc(c[e>>2]|0,l,-1,1,-1)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}Ra=q;return}case 1:{Dc(e,i);Ra=q;return}case 4:{m=mc(i)|0;h=c[h>>2]|0;f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)l=c[h+12>>2]|0;else o=17;do if((o|0)==17){f=f&65535;if(!(f&16)){if(f&1|0){l=0;break}l=Fg(h,1)|0;break}else{i=c[h+12>>2]|0;if(!(f&16384)){l=i;break}l=(c[h>>2]|0)+i|0;break}}while(0);f=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;i=L()|0;k=Sv(f|0,i|0,4,0)|0;n=L()|0;h=c[e>>2]|0;p=c[(c[h+32>>2]|0)+108>>2]|0;o=((p|0)<0)<<31>>31;if((n|0)>(o|0)|(n|0)==(o|0)&k>>>0>p>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;Ra=q;return}p=Sv(f|0,i|0,3,0)|0;o=L()|0;do if(!(o>>>0>0|(o|0)==0&p>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){p=c[14978]|0;o=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=p>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(!f)break;i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}if((l|0)>0){i=0;do{o=m+i|0;p=i<<1;a[f+(p+2)>>0]=a[21744+((d[o>>0]|0)>>>4)>>0]|0;a[f+(p+3)>>0]=a[21744+(a[o>>0]&15)>>0]|0;i=i+1|0}while((i|0)!=(l|0))}p=l<<1;a[f+(p+2)>>0]=39;a[f+(p+3)>>0]=0;a[f>>0]=88;a[f+1>>0]=39;if((yc(c[e>>2]|0,f,-1,1,-1)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=q;return}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=q;return}}while(0);f=c[e>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0){Ra=q;return}if(a[f+82>>0]|0){Ra=q;return}a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f){Ra=q;return}c[f+12>>2]=7;Ra=q;return}case 3:{if(!i){Ra=q;return}if((f&514)==514?(a[i+10>>0]|0)==1:0)p=c[i+16>>2]|0;else o=57;do if((o|0)==57)if(!(f&1)){p=Gg(i,1)|0;break}else{Ra=q;return}while(0);if(!p){Ra=q;return}h=0;f=0;i=0;a:while(1){switch(a[p+h>>0]|0){case 0:break a;case 39:{f=Sv(f|0,i|0,1,0)|0;i=L()|0;break}default:{}}h=h+1|0}f=Sv(f|0,i|0,h|0,0)|0;i=L()|0;k=Sv(f|0,i|0,3,0)|0;m=L()|0;h=c[e>>2]|0;o=c[(c[h+32>>2]|0)+108>>2]|0;n=((o|0)<0)<<31>>31;if((m|0)>(n|0)|(m|0)==(n|0)&k>>>0>o>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;Ra=q;return}o=Sv(f|0,i|0,2,0)|0;n=L()|0;do if(!(n>>>0>0|(n|0)==0&o>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){o=c[14978]|0;n=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(!f)break;i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}a[f>>0]=39;i=a[p>>0]|0;h=f+1|0;if(!(i<<24>>24))i=2;else{k=1;n=0;m=i;l=p;i=2;do{a[h>>0]=m;if((a[l>>0]|0)==39){a[f+i>>0]=39;k=k+2|0}else k=i;n=n+1|0;l=p+n|0;m=a[l>>0]|0;i=k+1|0;h=f+k|0}while(m<<24>>24!=0)}a[h>>0]=39;a[f+i>>0]=0;if((yc(c[e>>2]|0,f,i,1,90)|0)!=18){Ra=q;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=q;return}while(0);f=c[e>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0){Ra=q;return}if(a[f+82>>0]|0){Ra=q;return}a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f){Ra=q;return}c[f+12>>2]=7;Ra=q;return}default:{if((yc(c[e>>2]|0,31171,4,1,0)|0)!=18){Ra=q;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=q;return}}}function Pn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;e=c[a>>2]|0;a=(c[e+32>>2]|0)+40|0;f=c[a>>2]|0;a=c[a+4>>2]|0;d=e+8|0;if(!(b[d>>1]&9216)){c[e>>2]=f;c[e+4>>2]=a;b[d>>1]=4;return}else{Pg(e,f,a);return}}function Qn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a>>2]|0;e=c[(c[d+32>>2]|0)+100>>2]|0;f=((e|0)<0)<<31>>31;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function Rn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a>>2]|0;e=c[(c[d+32>>2]|0)+104>>2]|0;f=((e|0)<0)<<31>>31;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function Sn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;i=c[(c[d>>2]|0)+32>>2]|0;e=c[f>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)A=c[e+16>>2]|0;else B=5;do if((B|0)==5)if(!(g&1)){A=Gg(e,1)|0;break}else return;while(0);if(!A)return;h=c[f>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)z=c[h+12>>2]|0;else B=11;do if((B|0)==11){e=e&65535;if(!(e&16)){if(e&1|0){z=0;break}z=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){z=g;break}z=(c[h>>2]|0)+g|0;break}}while(0);h=f+4|0;e=c[h>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)y=c[e+16>>2]|0;else B=20;do if((B|0)==20)if(!(g&1)){y=Gg(e,1)|0;break}else return;while(0);if(!y)return;if(!(a[y>>0]|0)){Dc(d,c[f>>2]|0);return}h=c[h>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)x=c[h+12>>2]|0;else B=28;do if((B|0)==28){e=e&65535;if(!(e&16)){if(e&1|0){x=0;break}x=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){x=g;break}x=(c[h>>2]|0)+g|0;break}}while(0);h=f+8|0;e=c[h>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)w=c[e+16>>2]|0;else B=37;do if((B|0)==37)if(!(g&1)){w=Gg(e,1)|0;break}else return;while(0);if(!w)return;h=c[h>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)v=c[h+12>>2]|0;else B=43;do if((B|0)==43){e=e&65535;if(!(e&16)){if(e&1|0){v=0;break}v=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){v=g;break}v=(c[h>>2]|0)+g|0;break}}while(0);k=z+1|0;j=((k|0)<0)<<31>>31;e=c[d>>2]|0;if((c[(c[e+32>>2]|0)+108>>2]|0)<=(z|0)){c[d+20>>2]=18;yc(e,31223,-1,1,0)|0;return}u=Sv(k|0,j|0,-1,-1)|0;t=L()|0;a:do if(!(t>>>0>0|(t|0)==0&u>>>0>2147483390)){do if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h)break a}else{e=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){u=c[14978]|0;t=Tv(g|0,h|0,e|0,((e|0)<0)<<31>>31|0)|0;s=L()|0;c[14768]=((s|0)<0|(s|0)==0&t>>>0<=u>>>0)&1}h=Wa[c[29340>>2]&127](e)|0;if(!h)break a;e=Wa[c[29352>>2]&127](h)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0)break;c[14987]=e}while(0);u=z-x|0;b:do if((u|0)>=0){r=v-x|0;s=((r|0)<0)<<31>>31;o=i+108|0;t=x+-1|0;p=~z;q=((p|0)<0)<<31>>31;if((v|0)<=(x|0)){g=0;e=0;while(1){f=A+e|0;i=a[f>>0]|0;do if(i<<24>>24==(a[y>>0]|0)){if(Lu(f,y,x)|0){B=86;break}ew(h+g|0,w|0,v|0)|0;g=g+v|0;f=t+e|0}else B=86;while(0);if((B|0)==86){B=0;a[h+g>>0]=i;g=g+1|0;f=e}e=f+1|0;if((f|0)>=(u|0))break b}}n=0;g=0;e=0;c:while(1){f=A+e|0;i=a[f>>0]|0;do if(i<<24>>24==(a[y>>0]|0)){if(Lu(f,y,x)|0){B=77;break}j=Sv(k|0,j|0,r|0,s|0)|0;l=L()|0;k=Sv(j|0,l|0,-1,-1)|0;f=L()|0;m=c[o>>2]|0;i=((m|0)<0)<<31>>31;if((f|0)>(i|0)|(f|0)==(i|0)&k>>>0>m>>>0){B=87;break c}i=n+1|0;if(!(i&n)){if(mb()|0)break c;n=aw(0,j|0,32)|0;f=L()|0;m=Sv(j|0,l|0,p|0,q|0)|0;f=Sv(m|0,L()|0,n|0,f|0)|0;f=sb(h,f,L()|0)|0;if(!f)break c;else h=f}ew(h+g|0,w|0,v|0)|0;g=g+v|0;m=t+e|0;f=i;k=j;i=l}else B=77;while(0);if((B|0)==77){B=0;a[h+g>>0]=i;g=g+1|0;m=e;f=n;i=j}e=m+1|0;if((m|0)<(u|0)){n=f;j=i}else break b}if((B|0)==87){c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;if(!h)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;do if(!(a[g>>0]|0)){if(a[e+82>>0]|0)break;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)break;c[e+12>>2]=7}while(0);if(!h)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}else{g=0;e=0}while(0);B=z-e|0;ew(h+g|0,A+e|0,B|0)|0;B=g+B|0;a[h+B>>0]=0;if((yc(c[d>>2]|0,h,B,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;if(a[g>>0]|0)return;if(a[e+82>>0]|0)return;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Tn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){h=Mg(+g[f>>3])|0;f=L()|0;j=7;break}if(!(h&18)){f=0;i=0}else{h=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;j=7}}else{h=f;f=c[h+4>>2]|0;h=c[h>>2]|0;j=7}while(0);if((j|0)==7){i=(f|0)>0|(f|0)==0&h>>>0>0;f=i?f:0;i=i?h:0}h=c[d>>2]|0;j=c[(c[h+32>>2]|0)+108>>2]|0;k=((j|0)<0)<<31>>31;if(f>>>0>k>>>0|(f|0)==(k|0)&i>>>0>j>>>0){c[d+20>>2]=18;if(!(b[h+8>>1]&1))return;yc(h,31223,-1,1,0)|0;return}f=h+8|0;if(!((b[f>>1]&9216)==0?!(c[h+24>>2]|0):0))Cg(h);b[f>>1]=16400;c[h+12>>2]=0;c[h>>2]=(i|0)>0?i:0;a[h+10>>0]=1;c[h+16>>2]=0;return}function Un(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;k=c[h+4>>2]|0;i=b[k+8>>1]|0;if(-1431655766>>>(i&31)&1|0)return;n=(f|0)==3;if(n?-1431655766>>>(b[(c[h+8>>2]|0)+8>>1]&31)&1|0:0)return;j=c[h>>2]|0;l=b[j+8>>1]&15;f=i&65535;do if(!(f&4)){if(f&8|0){r=Mg(+g[k>>3])|0;L()|0;break}if(!(f&18))r=0;else{r=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0;j=c[h>>2]|0}}else r=c[k>>2]|0;while(0);q=((r|0)<0)<<31>>31;t=(l|16)<<16>>16==16;if(t){f=b[j+8>>1]|0;if((f&2)!=0?(a[j+10>>0]|0)==1:0){i=c[j+12>>2]|0;f=j}else s=14;do if((s|0)==14){f=f&65535;if(!(f&16)){if(f&1|0){i=0;f=j;break}i=Fg(j,1)|0;f=c[h>>2]|0;break}else{i=c[j+12>>2]|0;if(!(f&16384)){f=j;break}i=(c[j>>2]|0)+i|0;f=j;break}}while(0);f=mc(f)|0;if(!f)return;else{p=f;o=i}}else{if(!j)return;f=b[j+8>>1]|0;if((f&514)==514?(a[j+10>>0]|0)==1:0)l=c[j+16>>2]|0;else s=24;do if((s|0)==24)if(!(f&1)){l=Gg(j,1)|0;break}else return;while(0);if(!l)return;if((r|0)<0?(m=a[l>>0]|0,m<<24>>24!=0):0){k=0;f=l;j=m;while(1){i=f+1|0;if((j&255)>191){f=i;while(1){j=a[f>>0]|0;if((j&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=i;j=a[i>>0]|0}i=k+1|0;if(!(j<<24>>24)){p=l;o=i;break}else k=i}}else{p=l;o=0}}if(n){f=c[h+8>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){f=Mg(+g[f>>3])|0;L()|0;s=42;break}if(!(i&18)){i=0;f=0;j=0}else{f=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0;s=42}}else{f=c[f>>2]|0;s=42}while(0);if((s|0)==42){j=((f|0)<0)<<31>>31;h=(f|0)<0;n=Tv(0,0,f|0,j|0)|0;s=L()|0;i=f;f=h?n:f;j=h?s:j}l=i>>>31;i=j}else{i=c[(c[(c[d>>2]|0)+32>>2]|0)+108>>2]|0;l=0;f=i;i=((i|0)<0)<<31>>31}do if((r|0)>=0)if(!r){j=((i|0)>0|(i|0)==0&f>>>0>0)<<31>>31;f=Sv(f|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;j=0;k=0;i=L()|0;break}else{j=Sv(r|0,q|0,-1,-1)|0;k=L()|0;break}else{j=Sv(o|0,((o|0)<0)<<31>>31|0,r|0,q|0)|0;k=L()|0;q=(k|0)<0;h=Sv(f|0,i|0,j|0,k|0)|0;s=L()|0;r=(s|0)>0|(s|0)==0&h>>>0>0;j=q?0:j;k=q?0:k;f=q?(r?h:0):f;i=q?(r?s:0):i}while(0);r=(l|0)==0;m=Tv(j|0,k|0,f|0,i|0)|0;l=L()|0;s=(l|0)<0;m=r?j:s?0:m;l=r?k:s?0:l;n=r?f:s?j:f;k=r?i:s?k:i;if(t){r=Sv(m|0,l|0,n|0,k|0)|0;t=L()|0;f=((o|0)<0)<<31>>31;r=(t|0)>(f|0)|(t|0)==(f|0)&r>>>0>o>>>0;f=Tv(o|0,f|0,m|0,l|0)|0;t=L()|0;s=(t|0)>0|(t|0)==0&f>>>0>0;f=r?(s?f:0):n;t=r?(s?t:0):k;if(t>>>0>0|(t|0)==0&f>>>0>2147483647){if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}else{if((yc(c[d>>2]|0,p+m|0,f,0,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}i=a[p>>0]|0;if(((m|0)!=0|(l|0)!=0)&i<<24>>24!=0){f=p;do{j=f+1|0;if((i&255)>191){f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=j;i=a[j>>0]|0}m=Sv(m|0,l|0,-1,-1)|0;l=L()|0}while(((m|0)!=0|(l|0)!=0)&i<<24>>24!=0);m=f}else m=p;if(i<<24>>24!=0&((n|0)!=0|(k|0)!=0)){f=m;l=n;do{j=f+1|0;if((i&255)>191){f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=j;i=a[j>>0]|0}l=Sv(l|0,k|0,-1,-1)|0;k=L()|0}while(i<<24>>24!=0&((l|0)!=0|(k|0)!=0))}else f=m;f=f-m|0;if((f|0)<0){if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}else{if((yc(c[d>>2]|0,m,f,1,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}function Vn(f,h,i){f=f|0;h=h|0;i=i|0;var j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=Ra;Ra=Ra+16|0;n=q+8|0;o=q;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))p=Ic(f,32)|0;else p=c[h+16>>2]|0;l=c[i>>2]|0;m=l+8|0;f=b[m>>1]&31;k=d[816+f>>0]|0;if((f|16|0)==18){h=a[l+10>>0]|0;f=l+16|0;k=l+12|0;if(!(Lg(c[f>>2]|0,n,c[k>>2]|0,h)|0))h=b[m>>1]|0;else{if(!(Og(c[f>>2]|0,o,c[k>>2]|0,h)|0)){n=o;o=c[n+4>>2]|0;h=l;c[h>>2]=c[n>>2];c[h+4>>2]=o;h=4}else{g[l>>3]=+g[n>>3];h=8}h=b[m>>1]&-3|h;b[m>>1]=h}k=d[816+(h&31)>>0]|0}if(!((p|0)!=0&(k|0)!=5)){Ra=q;return}h=p+16|0;o=h;o=Sv(c[o>>2]|0,c[o+4>>2]|0,1,0)|0;f=L()|0;c[h>>2]=o;c[h+4>>2]=f;h=c[i>>2]|0;f=e[h+8>>1]|0;if((k|0)!=1){do if(!(f&8)){if(f&4|0){i=h;j=+((c[i>>2]|0)>>>0)+4294967296.0*+(c[i+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else j=+g[h>>3];while(0);g[p>>3]=j+ +g[p>>3];a[p+25>>0]=1;Ra=q;return}do if(!(f&4)){if(f&8|0){m=Mg(+g[h>>3])|0;n=L()|0;break}if(!(f&18)){m=0;n=0}else{m=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;n=L()|0}}else{n=h;m=c[n>>2]|0;n=c[n+4>>2]|0}while(0);g[p>>3]=+g[p>>3]+(+(m>>>0)+4294967296.0*+(n|0));o=p+25|0;i=p+24|0;if((a[i>>0]|a[o>>0])<<24>>24){Ra=q;return}h=p+8|0;k=h;f=c[k>>2]|0;k=c[k+4>>2]|0;if((n|0)>-1|(n|0)==-1&m>>>0>4294967295){p=Tv(-1,2147483647,f|0,k|0)|0;l=L()|0;if(((k|0)>0|(k|0)==0&f>>>0>0)&((l|0)<(n|0)|(l|0)==(n|0)&p>>>0<m>>>0))l=26;else l=25}else if((k|0)<0?(l=Tv(1,-2147483648,f|0,k|0)|0,s=L()|0,p=Sv(m|0,n|0,1,0)|0,r=L()|0,(s|0)>(r|0)|(s|0)==(r|0)&l>>>0>p>>>0):0)l=26;else l=25;if((l|0)==25){p=Sv(f|0,k|0,m|0,n|0)|0;r=L()|0;s=h;c[s>>2]=p;c[s+4>>2]=r;Ra=q;return}else if((l|0)==26){a[i>>0]=1;a[o>>0]=1;Ra=q;return}}function Wn(d){d=d|0;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0;j=Ra;Ra=Ra+16|0;f=j+8|0;h=j;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e){Ra=j;return}k=e+16|0;l=c[k+4>>2]|0;if(!((l|0)>0|(l|0)==0&(c[k>>2]|0)>>>0>0)){Ra=j;return}if(a[e+24>>0]|0){c[d+20>>2]=1;yc(c[d>>2]|0,49524,-1,1,-1)|0;Ra=j;return}if(!(a[e+25>>0]|0)){h=e+8|0;f=c[h>>2]|0;h=c[h+4>>2]|0;e=c[d>>2]|0;d=e+8|0;if(!(b[d>>1]&9216)){l=e;c[l>>2]=f;c[l+4>>2]=h;b[d>>1]=4;Ra=j;return}else{Pg(e,f,h);Ra=j;return}}i=+g[e>>3];e=c[d>>2]|0;d=e+8|0;if(!(b[d>>1]&9216))b[d>>1]=1;else Dg(e);g[f>>3]=i;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=j;return}g[e>>3]=i;b[d>>1]=8;Ra=j;return}function Xn(f,h,i){f=f|0;h=h|0;i=i|0;var j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;n=q+8|0;o=q;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))p=Ic(f,32)|0;else p=c[h+16>>2]|0;l=c[i>>2]|0;m=l+8|0;k=b[m>>1]&31;h=d[816+k>>0]|0;if((k|16|0)==18){h=a[l+10>>0]|0;f=l+16|0;k=l+12|0;if(!(Lg(c[f>>2]|0,n,c[k>>2]|0,h)|0))h=b[m>>1]|0;else{if(!(Og(c[f>>2]|0,o,c[k>>2]|0,h)|0)){n=o;o=c[n+4>>2]|0;h=l;c[h>>2]=c[n>>2];c[h+4>>2]=o;h=4}else{g[l>>3]=+g[n>>3];h=8}h=b[m>>1]&-3|h;b[m>>1]=h}h=d[816+(h&31)>>0]|0}if(!((p|0)!=0&(h|0)!=5)){Ra=q;return}o=p+16|0;m=o;m=Sv(c[m>>2]|0,c[m+4>>2]|0,-1,-1)|0;n=L()|0;c[o>>2]=m;c[o+4>>2]=n;if((h|0)==1?(a[p+25>>0]|0)==0:0){h=c[i>>2]|0;f=e[h+8>>1]|0;do if(!(f&4)){if(f&8|0){h=Mg(+g[h>>3])|0;f=L()|0;break}if(!(f&18)){h=0;f=0}else{h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;f=L()|0}}else{f=h;h=c[f>>2]|0;f=c[f+4>>2]|0}while(0);g[p>>3]=+g[p>>3]-(+(h>>>0)+4294967296.0*+(f|0));p=p+8|0;o=p;o=Tv(c[o>>2]|0,c[o+4>>2]|0,h|0,f|0)|0;i=L()|0;c[p>>2]=o;c[p+4>>2]=i;Ra=q;return}h=c[i>>2]|0;f=e[h+8>>1]|0;do if(!(f&8)){if(f&4|0){i=h;j=+((c[i>>2]|0)>>>0)+4294967296.0*+(c[i+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else j=+g[h>>3];while(0);g[p>>3]=+g[p>>3]-j;Ra=q;return}function Yn(a){a=a|0;var d=0,e=0.0,f=0,h=0,i=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)e=0.0;else e=+g[d>>3];d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216))b[a>>1]=1;else Dg(d);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[d>>3]=e;b[a>>1]=8;Ra=i;return}function Zn(a){a=a|0;var d=0,e=0,f=0,h=0.0,i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;i=k+8|0;j=k;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){Ra=k;return}f=d+16|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if(!((f|0)>0|(f|0)==0&e>>>0>0)){Ra=k;return}h=+g[d>>3]/(+(e>>>0)+4294967296.0*+(f|0));d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[i>>3]=h;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){Ra=k;return}g[d>>3]=h;b[e>>1]=8;Ra=k;return}function _n(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=c[a+8>>2]|0;if(!(b[f+8>>1]&8192))a=Ic(a,8)|0;else a=c[f+16>>2]|0;if(!d){if(!a)return}else if(!(a|0?(1431655765>>>(b[(c[e>>2]|0)+8>>1]&31)&1|0)!=0:0))return;f=a;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;d=L()|0;e=a;c[e>>2]=f;c[e+4>>2]=d;return}function $n(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){e=0;f=0}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function ao(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=c[a+8>>2]|0;if(!(b[f+8>>1]&8192))a=Ic(a,8)|0;else a=c[f+16>>2]|0;if(!d){if(!a)return}else if(!(a|0?(1431655765>>>(b[(c[e>>2]|0)+8>>1]&31)&1|0)!=0:0))return;f=a;f=Sv(c[f>>2]|0,c[f+4>>2]|0,-1,-1)|0;d=L()|0;e=a;c[e>>2]=f;c[e+4>>2]=d;return}function bo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0)return;g=c[d+8>>2]|0;if(!(b[g+8>>1]&8192))k=Ic(d,24)|0;else k=c[g+16>>2]|0;if(!k)return;h=k+12|0;i=(c[h>>2]|0)==0;c[h>>2]=c[(c[(c[d>>2]|0)+32>>2]|0)+108>>2];do if(!i){if((e|0)==2){d=f+4|0;e=c[d>>2]|0;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)h=c[e+16>>2]|0;else if(!(g&1)){h=Gg(e,1)|0;e=c[d>>2]|0}else h=0;g=b[e+8>>1]|0;if((g&2)!=0?(a[e+10>>0]|0)==1:0)g=c[e+12>>2]|0;else j=16;do if((j|0)==16){d=g&65535;if(!(d&16)){if(d&1|0){g=0;break}g=Fg(e,1)|0;break}else{g=c[e+12>>2]|0;if(!(d&16384))break;g=(c[e>>2]|0)+g|0;break}}while(0);if(!h)break;else d=h}else{g=1;d=41685}e=k+16|0;h=c[e>>2]|0;i=h+g|0;if(i>>>0>=(c[k+8>>2]|0)>>>0){wb(k,d,g);break}if(g|0){c[e>>2]=i;ew((c[k+4>>2]|0)+h|0,d|0,g|0)|0}}while(0);d=c[f>>2]|0;g=b[d+8>>1]|0;if((g&514)==514?(a[d+10>>0]|0)==1:0){i=c[d+16>>2]|0;e=d}else if(!(g&1)){i=Gg(d,1)|0;e=c[f>>2]|0}else{i=0;e=d}g=b[e+8>>1]|0;if((g&2)!=0?(a[e+10>>0]|0)==1:0)d=c[e+12>>2]|0;else j=34;do if((j|0)==34){g=g&65535;if(!(g&16)){if(g&1|0){d=0;break}d=Fg(e,1)|0;break}else{d=c[e+12>>2]|0;if(!(g&16384))break;d=(c[e>>2]|0)+d|0;break}}while(0);if(!i)return;g=k+16|0;e=c[g>>2]|0;h=e+d|0;if(h>>>0>=(c[k+8>>2]|0)>>>0){wb(k,i,d);return}if(!d)return;c[g>>2]=h;ew((c[k+4>>2]|0)+e|0,i|0,d|0)|0;return}function co(d){d=d|0;var e=0,f=0,g=0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e)return;switch(a[e+20>>0]|0){case 18:{c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}case 7:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}default:{f=e+4|0;g=c[f>>2]|0;if(((g|0)!=0?(a[g+(c[e+16>>2]|0)>>0]=0,(c[e+12>>2]|0)!=0):0)?(a[e+21>>0]&4)==0:0)e=$d(e)|0;else e=c[f>>2]|0;if((yc(c[d>>2]|0,e,-1,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}}function eo(d){d=d|0;var e=0,f=0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e)return;switch(a[e+20>>0]|0){case 18:{c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}case 7:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}default:{f=c[e+16>>2]|0;if(!f)e=0;else{e=e+4|0;a[(c[e>>2]|0)+f>>0]=0;e=c[e>>2]|0}if((yc(c[d>>2]|0,e,-1,1,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}}function fo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0)return;g=c[d+8>>2]|0;if(!(b[g+8>>1]&8192))k=Ic(d,24)|0;else k=c[g+16>>2]|0;if(!k)return;h=c[f>>2]|0;d=b[h+8>>1]|0;if((d&2)!=0?(a[h+10>>0]|0)==1:0)j=c[h+12>>2]|0;else i=9;do if((i|0)==9){d=d&65535;if(!(d&16)){if(d&1|0){j=0;break}j=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(d&16384)){j=g;break}j=(c[h>>2]|0)+g|0;break}}while(0);do if((e|0)==2){h=c[f+4>>2]|0;d=b[h+8>>1]|0;if(d&2?(a[h+10>>0]|0)==1:0){d=c[h+12>>2]|0;break}g=d&65535;if(!(g&16)){if(g&1|0){d=0;break}d=Fg(h,1)|0;break}else{d=c[h+12>>2]|0;if(!(g&16384))break;d=(c[h>>2]|0)+d|0;break}}else d=1;while(0);d=d+j|0;g=k+16|0;h=c[g>>2]|0;if((h|0)>(d|0)){f=h-d|0;c[g>>2]=f;e=c[k+4>>2]|0;fw(e|0,e+d|0,f|0)|0;if(c[g>>2]|0)return}else c[g>>2]=0;c[k+12>>2]=0;return}function go(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=Ra;Ra=Ra+368|0;F=J+16|0;r=J;q=J+356|0;G=J+336|0;H=J+60|0;u=J+32|0;I=c[(c[f>>2]|0)+32>>2]|0;h=c[i>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){B=c[h+16>>2]|0;break}if(!(j&1))B=Gg(h,1)|0;else B=0}else B=0;while(0);h=c[i+12>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){t=c[h+16>>2]|0;break}if(!(j&1))t=Gg(h,1)|0;else t=0}else t=0;while(0);h=c[i+16>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){y=c[h+16>>2]|0;break}if(!(j&1))y=Gg(h,1)|0;else y=0}else y=0;while(0);h=c[i+20>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){x=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))x=0;else{x=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else x=c[h>>2]|0;while(0);h=c[i+24>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){A=c[h+16>>2]|0;break}if(!(j&1))A=Gg(h,1)|0;else A=0}else A=0;while(0);h=c[i+28>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){z=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))z=0;else{z=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else z=c[h>>2]|0;while(0);h=c[i+32>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){l=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))l=0;else{l=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else l=c[h>>2]|0;while(0);C=I+312|0;D=c[C>>2]|0;if((x|0)<0|((B|0)==0|(y|0)==0|(A|0)==0)){Ra=J;return}m=c[I+20>>2]|0;n=(m|0)>0;if(n){j=c[I+16>>2]|0;h=0;do{k=c[j+(h<<4)+4>>2]|0;if(k|0)c[(c[k+4>>2]|0)+4>>2]=c[k>>2];h=h+1|0}while((h|0)!=(m|0))}p=Sd(I,y,t)|0;if(!p){Ra=J;return}if((x|0)>=(b[p+42>>1]|0)){Ra=J;return}w=c[(c[p+4>>2]|0)+(x<<4)>>2]|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;s=G+8|0;c[s>>2]=(x|0)==(b[p+40>>1]|0)?-1:x;c[C>>2]=0;c[q>>2]=0;o=(l|0)==0;if(o){a:do if(t){j=m+-1|0;if(n){h=j;m=(c[I+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){v=a[k>>0]|0;j=(d[208+(v&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(j|0)!=0)){l=t;do{k=k+1|0;l=l+1|0;v=a[k>>0]|0;j=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!h)break;j=h+-1|0;if((h|0)>0){h=j;m=m+-16|0}else{h=j;break a}}h=109-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!h){j=t;k=50919;do{k=k+1|0;j=j+1|0;v=a[k>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=j}else h=-1;while(0);h=h&255}else h=1;j=I+164|0;a[j>>0]=h;v=H+4|0;gw(v|0,0,272)|0;a[H+200>>0]=2;c[H>>2]=I;c[H+132>>2]=1;h=ud(H,B,q)|0;c[v>>2]=c[q>>2];k=I+81|0;h=(a[k>>0]|0)==0?h:7;if(!h)if(((c[H+228>>2]|0)==0?(c[H+232>>2]|0)==0:0)?(c[H+236>>2]|0)==0:0){c[r>>2]=32306;c[r+4>>2]=103316;c[r+8>>2]=31517;Db(11,32001,r);h=11}else h=0;a[j>>0]=0;n=u+12|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[u>>2]=H;c[u+4>>2]=150;c[u+8>>2]=151;c[u+24>>2]=G;n=G+12|0;c[n>>2]=p;b:do if(!h){q=H+228|0;l=c[q>>2]|0;m=l;do if(l){j=c[l+12>>2]|0;if(j|0){h=H+12|0;c[h>>2]=0;Kk(H,j,0);h=(a[k>>0]|0)==0?c[h>>2]|0:7;if(h|0){E=171;break b}$j(u,j)|0;break}j=c[l>>2]|0;do if(!j){c[n>>2]=m;u=0}else{t=a[y>>0]|0;h=(d[208+(t&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(t<<24>>24==0|(h|0)!=0)){k=y;do{k=k+1|0;j=j+1|0;t=a[k>>0]|0;h=(d[208+(t&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(h|0)!=0))}c[n>>2]=m;if(h|0){u=0;break}m=c[(c[l+4>>2]|0)+(x<<4)>>2]|0;k=H+272|0;h=c[k>>2]|0;c:do if(h|0){l=k;while(1){j=h+12|0;if((c[h>>2]|0)==(m|0))break;h=c[j>>2]|0;if(!h)break c;else l=j}c[l>>2]=c[j>>2];c[j>>2]=c[G>>2];c[G>>2]=h;t=G+4|0;c[t>>2]=(c[t>>2]|0)+1}while(0);d:do if((c[s>>2]|0)<0){l=(c[q>>2]|0)+40|0;h=c[k>>2]|0;if(!h)break;while(1){j=h+12|0;if((c[h>>2]|0)==(l|0))break;h=c[j>>2]|0;if(!h)break d;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[G>>2];c[G>>2]=h;t=G+4|0;c[t>>2]=(c[t>>2]|0)+1}while(0);h=c[q>>2]|0;k=c[h+24>>2]|0;do if(k){j=c[k>>2]|0;if((j|0)<=0)break;h=k+4|0;while(1){k=c[h>>2]|0;if(k|0?_j(u,k)|0:0)break;if((j|0)>1){j=j+-1|0;h=h+20|0}else break}h=c[q>>2]|0}while(0);h=c[h+8>>2]|0;if(h|0)do{k=c[h+40>>2]|0;e:do if(k|0){j=c[k>>2]|0;if((j|0)<=0)break;k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(u,l)|0:0)break e;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}}while(0);h=c[h+20>>2]|0}while((h|0)!=0);h=c[H+232>>2]|0;if(!h){u=1;break}while(1){k=c[h+40>>2]|0;f:do if(k|0){j=c[k>>2]|0;if((j|0)<=0)break;k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(u,l)|0:0)break f;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}}while(0);h=c[h+20>>2]|0;if(!h){u=1;break}}}while(0);h=c[(c[q>>2]|0)+16>>2]|0;if(h|0){q=H+272|0;r=((w|0)!=0)<<31>>31;s=(w|0)==0;t=G+4|0;do{o=c[h+20>>2]|0;if((o|0)>0){p=h+8|0;n=0;do{g:do if(u){m=h+36+(n<<3)|0;if((c[m>>2]|0)!=(x|0))break;j=c[q>>2]|0;if(!j)break;l=q;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break g;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[G>>2];c[G>>2]=j;c[t>>2]=(c[t>>2]|0)+1}while(0);k=c[p>>2]|0;h:do if(k|0){m=a[k>>0]|0;j=(d[208+(m&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(j|0)!=0)){l=y;do{k=k+1|0;l=l+1|0;m=a[k>>0]|0;j=(d[208+(m&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(j|0)!=0))}if(j|0)break;m=c[h+36+(n<<3)+4>>2]|0;do if(!m)j=r;else{if(s)break h;l=a[m>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[208+(d[w>>0]|0)>>0]|0)|0;if(l<<24>>24==0|(j|0)!=0)break;k=w;l=m;do{l=l+1|0;k=k+1|0;K=a[l>>0]|0;j=(d[208+(K&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(K<<24>>24==0|(j|0)!=0))}while(0);if(j|0)break;j=c[q>>2]|0;if(!j)break;l=q;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break h;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[G>>2];c[G>>2]=j;c[t>>2]=(c[t>>2]|0)+1}while(0);n=n+1|0}while((n|0)<(o|0))}h=c[h+4>>2]|0}while((h|0)!=0)}}else{l=H+232|0;h=c[l>>2]|0;if(h|0){k=c[h+40>>2]|0;do if(k){j=c[k>>2]|0;if((j|0)<=0)break;h=k+4|0;while(1){k=c[h>>2]|0;if(k|0?_j(u,k)|0:0)break;if((j|0)>1){j=j+-1|0;h=h+20|0}else break}h=c[l>>2]|0}while(0);h=c[h+36>>2]|0;if(!h)break;_j(u,h)|0;break}h=lo(H,o?t:0)|0;if(h|0){E=171;break b}k=H+236|0;h=c[(c[k>>2]|0)+28>>2]|0;if(h|0)do{j=c[h+12>>2]|0;do if(j|0){if((bd(H,0,j,t)|0)!=(p|0))break;j=c[h+28>>2]|0;if(j|0)mo(H,G,c[j+8>>2]|0,w);no(H,G,c[h+24>>2]|0,w);mo(H,G,c[h+20>>2]|0,w)}while(0);h=c[h+36>>2]|0}while((h|0)!=0);if((c[H+120>>2]|0)==(p|0))no(H,G,c[(c[k>>2]|0)+16>>2]|0,w);oo(u,c[k>>2]|0)}while(0);h=po(f,G,B,A,z)|0;if(h|0)E=171}else E=171;while(0);do if((E|0)==171){if(!(c[v>>2]|0)){c[f+20>>2]=h;j=c[f>>2]|0;if(!(b[j+8>>1]&1))break;i:do switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29){if(!(520028155>>>h&1)){h=50724;break i}h=c[22960+(h<<2)>>2]|0}else h=50724}}while(0);yc(j,h,-1,1,0)|0;break}j=c[i+4>>2]|0;k=c[i+8>>2]|0;j:do if(j){h=b[j+8>>1]|0;do if((h&514)==514){if((a[j+10>>0]|0)!=1)break;j=c[j+16>>2]|0;break j}while(0);if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);k:do if(!k)h=0;else{h=b[k+8>>1]|0;do if((h&514)==514){if((a[k+10>>0]|0)!=1)break;h=c[k+16>>2]|0;break k}while(0);if(h&1){h=0;break}h=Gg(k,1)|0}while(0);K=c[v>>2]|0;c[F>>2]=j;c[F+4>>2]=h;c[F+8>>2]=59952;c[F+12>>2]=K;h=Bb(49618,F)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(H);ro(I,c[G>>2]|0);c[C>>2]=D;Ra=J;return}\nfunction oe(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+48|0;j=r+16|0;n=r+8|0;m=r;p=r+24|0;q=c[a+36>>2]|0;h=c[q>>2]|0;o=(1<<f+d)-(1<<d)|0;if(g&1|0){i=c[h+32>>2]|0;if(!i)h=0;else{h=0;do{if((i|0)!=(q|0))h=b[i+10>>1]|h;i=c[i+4>>2]|0}while((i|0)!=0)}i=o&65535;if(((o&(h&65535)|0)==0?(l=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0,(l|0)>-1):0)?(b[p>>1]=2,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[m>>2]=p,(Ya[f&127](l,13,m)|0)==-1):0){q=5;Ra=r;return q|0}p=~i;f=q+12|0;b[f>>1]=(e[f>>1]|0)&p;q=q+10|0;b[q>>1]=(e[q>>1]|0)&p;q=0;Ra=r;return q|0}h=c[h+32>>2]|0;i=(h|0)==0;if(!(g&4)){a:do if(!i){while(1){if(o&(e[h+12>>1]|0)|0){h=5;i=33;break}if(o&(e[h+10>>1]|0)|0){h=5;i=33;break}h=c[h+4>>2]|0;if(!h)break a}if((i|0)==33){Ra=r;return h|0}}while(0);h=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0;if((h|0)>-1?(b[p>>1]=1,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[j>>2]=p,(Ya[f&127](h,13,j)|0)==-1):0){q=5;Ra=r;return q|0}q=q+12|0;b[q>>1]=o|(e[q>>1]|0);q=0;Ra=r;return q|0}else{b:do if(i)h=0;else{i=0;while(1){if(o&(e[h+12>>1]|0)|0){h=5;break}i=b[h+10>>1]|i;h=c[h+4>>2]|0;if(!h){h=i;break b}}Ra=r;return h|0}while(0);if(((o&(h&65535)|0)==0?(k=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0,(k|0)>-1):0)?(b[p>>1]=0,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[n>>2]=p,(Ya[f&127](k,13,n)|0)==-1):0){q=5;Ra=r;return q|0}q=q+10|0;b[q>>1]=o|(e[q>>1]|0);q=0;Ra=r;return q|0}return 0}function pe(a){a=a|0;return}function qe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=a+36|0;f=c[e>>2]|0;if(!f)return 0;g=c[f>>2]|0;d=g+32|0;while(1){h=c[d>>2]|0;if((h|0)==(f|0))break;else d=h+4|0}c[d>>2]=c[f+4>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}c[e>>2]=0;f=g+28|0;h=(c[f>>2]|0)+-1|0;c[f>>2]=h;if(h|0)return 0;if(b|0?(c[g+12>>2]|0)>-1:0)Wa[c[2532>>2]&127](c[g+8>>2]|0)|0;Ae(a);return 0}function re(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=0;return 0}function se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function te(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+192|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;h=j+104|0;d=j+28|0;if(b[a+18>>1]&128){Ra=j;return}if(Xa[c[2400>>2]&255](c[a+12>>2]|0,d)|0){c[e>>2]=c[a+32>>2];Db(28,31582,e);Ra=j;return}switch(c[d+16>>2]|0){case 0:{c[f>>2]=c[a+32>>2];Db(28,31606,f);Ra=j;return}case 1:{e=a+8|0;if(!(c[e>>2]|0)){Ra=j;return}d=a+32|0;if(!(Xa[c[2388>>2]&255](c[d>>2]|0,h)|0)){a=(c[e>>2]|0)+8|0;if((c[a+4>>2]|0)==0?(c[a>>2]|0)==(c[h+72>>2]|0):0){Ra=j;return}}c[i>>2]=c[d>>2];Db(28,31662,i);Ra=j;return}default:{c[g>>2]=c[a+32>>2];Db(28,31635,g);Ra=j;return}}}function ue(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=d;d=Mu(a,b,f)|0;Ra=e;return d|0}function ve(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+576|0;g=j+552|0;h=j+536|0;e=j+528|0;k=j+520|0;f=j;c[k>>2]=b;Cb(512,f,31408,k)|0;b=Eu(f)|0;a:do if((b|0)>0)while(1){if((a[f+b>>0]|0)==47)break a;if((b|0)>1)b=b+-1|0;else{i=5;break}}else i=5;while(0);if((i|0)==5)if((a[f>>0]|0)==47)b=1;else{a[f>>0]=46;b=1}a[f+b>>0]=0;while(1){b=Ya[c[2340>>2]&127](f,524288,420)|0;if((b|0)<0){k=uu()|0;if((c[k>>2]|0)!=4){i=14;break}}else{if((b|0)>2){i=13;break}Wa[c[2352>>2]&127](b)|0;c[e>>2]=f;c[e+4>>2]=b;Db(28,31900,e);if((Ya[c[2340>>2]&127](31943,0,0)|0)<0){b=-1;i=14;break}}}if((i|0)==13){c[d>>2]=b;k=0;Ra=j;return k|0}else if((i|0)==14){c[d>>2]=b;c[h>>2]=31984;c[h+4>>2]=36187;c[h+8>>2]=31517;Db(14,32001,h);i=uu()|0;i=c[i>>2]|0;k=dv(i)|0;c[g>>2]=36187;c[g+4>>2]=i;c[g+8>>2]=31807;c[g+12>>2]=f;c[g+16>>2]=k;Db(14,31953,g);k=14;Ra=j;return k|0}return 0}function we(){return Ka(30)|0}function xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+96|0;h=k;i=k+8|0;j=(d|0)!=0;f=j?d:420;g=b|524288;while(1){e=Ya[c[2340>>2]&127](a,g,f)|0;if((e|0)<0){l=uu()|0;if((c[l>>2]|0)!=4){a=13;break}}else{if((e|0)>2){a=7;break}Wa[c[2352>>2]&127](e)|0;c[h>>2]=a;c[h+4>>2]=e;Db(28,31900,h);if((Ya[c[2340>>2]&127](31943,b,d)|0)<0){e=-1;a=13;break}}}if((a|0)==7){if(!j){l=e;Ra=k;return l|0}if(((Xa[c[2400>>2]&255](e,i)|0)==0?(c[i+36>>2]|0)==0:0)?(c[i+12>>2]&511|0)!=(d|0):0)Xa[c[2508>>2]&255](e,d)|0;l=e;Ra=k;return l|0}else if((a|0)==13){Ra=k;return e|0}return 0}function ye(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=Ra;Ra=Ra+112|0;j=k+80|0;i=k;a[d>>0]=0;e=c[14771]|0;if(!(c[672]|0)){g=Ca(32077)|0;c[672]=g}if(!(c[673]|0)){g=Ca(32091)|0;c[673]=g}f=i+12|0;g=e;e=0;while(1){if(((g|0?(Xa[c[2388>>2]&255](g,i)|0)==0:0)?(c[f>>2]&61440|0)==16384:0)?(Xa[c[2364>>2]&255](g,3)|0)==0:0)break;if(e>>>0>5){h=11;break}g=c[2688+(e<<2)>>2]|0;e=e+1|0}if((h|0)==11){j=6410;Ra=k;return j|0}f=d+(b+-2)|0;e=0;while(1){Fb(8,i);a[f>>0]=0;l=i;m=c[l>>2]|0;l=c[l+4>>2]|0;c[j>>2]=g;h=j+8|0;c[h>>2]=m;c[h+4>>2]=l;c[j+16>>2]=0;Cb(b,d,32037,j)|0;if(e>>>0>10|(a[f>>0]|0)!=0){e=1;h=16;break}if(!(Xa[c[2364>>2]&255](d,0)|0))e=e+1|0;else{e=0;h=16;break}}if((h|0)==16){Ra=k;return e|0}return 0}function ze(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=Ra;Ra=Ra+80|0;l=m+48|0;i=m+24|0;h=m+16|0;k=m;f=m+56|0;b[f+2>>1]=0;c[f+4>>2]=128;c[f+8>>2]=1;b[f>>1]=1;o=c[606]|0;g=e+12|0;n=c[g>>2]|0;c[k>>2]=f;if(Ya[o&127](n,12,k)|0){o=3850;Ra=m;return o|0}a:do switch(b[f>>1]|0){case 2:{if(a[e+22>>0]|0){a[e+23>>0]=1;o=1288;Ra=m;return o|0}d=d+8|0;f=c[(c[(c[d>>2]|0)+40>>2]|0)+12>>2]|0;if((f|0)>-1?(b[k>>1]=1,b[k+2>>1]=0,c[k+4>>2]=128,c[k+8>>2]=1,o=c[606]|0,c[h>>2]=k,(Ya[o&127](f,13,h)|0)==-1):0){o=5;Ra=m;return o|0}f=c[g>>2]|0;do{g=Xa[c[2412>>2]&255](f,3)|0;if((g|0)>=0){j=12;break}o=uu()|0}while((c[o>>2]|0)==4);if((j|0)==12?(g|0)==0:0)break a;n=c[e+8>>2]|0;l=uu()|0;l=c[l>>2]|0;o=dv(l)|0;c[i>>2]=36954;c[i+4>>2]=l;c[i+8>>2]=31726;c[i+12>>2]=(n|0)==0?59952:n;c[i+16>>2]=o;Db(4618,31953,i);o=4618;Ra=m;return o|0}case 1:{o=5;Ra=m;return o|0}default:d=d+8|0}while(0);d=c[(c[(c[d>>2]|0)+40>>2]|0)+12>>2]|0;if((d|0)>-1){b[k>>1]=0;b[k+2>>1]=0;c[k+4>>2]=128;c[k+8>>2]=1;o=c[606]|0;c[l>>2]=k;d=(Ya[o&127](d,13,l)|0)==-1;d=d?5:0}else d=0;o=d;Ra=m;return o|0}function Ae(a){a=a|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+32|0;m=n;l=c[(c[a+8>>2]|0)+40>>2]|0;if(!l){Ra=n;return}if(c[l+28>>2]|0){Ra=n;return}f=Va[c[2640>>2]&127]()|0;f=(f|0)<32768?1:(f|0)/32768|0;h=l+20|0;if(!(b[h>>1]|0))d=l+24|0;else{i=l+12|0;d=l+24|0;j=l+16|0;g=0;do{do if((c[i>>2]|0)<=-1){k=c[(c[d>>2]|0)+(g<<2)>>2]|0;if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{o=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xa[c[2616>>2]&255](c[(c[d>>2]|0)+(g<<2)>>2]|0,c[j>>2]|0)|0;while(0);g=g+f|0}while((g|0)<(e[h>>1]|0))}d=c[d>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);f=l+12|0;d=c[f>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){if(!a)d=0;else d=c[a+32>>2]|0;a=uu()|0;a=c[a>>2]|0;o=dv(a)|0;c[m>>2]=36897;c[m+4>>2]=a;c[m+8>>2]=31695;c[m+12>>2]=(d|0)==0?59952:d;c[m+16>>2]=o;Db(4106,31953,m)}c[f>>2]=-1}c[(c[l>>2]|0)+40>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);Ra=n;return}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);Ra=n;return}}function Be(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=Ra;Ra=Ra+32|0;e=f;b=a+12|0;d=c[b>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){g=c[a+32>>2]|0;h=uu()|0;h=c[h>>2]|0;d=dv(h)|0;c[e>>2]=34584;c[e+4>>2]=h;c[e+8>>2]=31695;c[e+12>>2]=(g|0)==0?59952:g;c[e+16>>2]=d;Db(4106,31953,e)}c[b>>2]=-1}b=c[a+28>>2]|0;if(!b){b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}return 0}function Ce(a,b){a=a|0;b=b|0;return 0}function De(a,b){a=a|0;b=b|0;return 0}function Ee(a,b){a=a|0;b=b|0;c[b>>2]=0;return 0}function Fe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=Ra;Ra=Ra+32|0;f=g;e=b+24|0;d=b+16|0;do if(a[d>>0]|0){if((Wa[c[2568>>2]&127](c[e>>2]|0)|0)>=0){a[d>>0]=0;break}d=uu()|0;d=c[d>>2]|0;if((d|0)!=2)c[b+20>>2]=d}while(0);d=c[e>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+12|0;e=c[d>>2]|0;if((e|0)>-1){if(Wa[c[2352>>2]&127](e)|0){h=c[b+32>>2]|0;i=uu()|0;i=c[i>>2]|0;e=dv(i)|0;c[f>>2]=34584;c[f+4>>2]=i;c[f+8>>2]=31695;c[f+12>>2]=(h|0)==0?59952:h;c[f+16>>2]=e;Db(4106,31953,f)}c[d>>2]=-1}d=c[b+28>>2]|0;if(!d){d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}return 0}function Ge(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+24>>2]|0;f=b+16|0;if(a[f>>0]|0){a[f>>0]=d;Oa(e|0,0)|0;b=0;return b|0}e=Xa[c[2556>>2]&255](e,511)|0;if((e|0)>=0){a[f>>0]=d;b=e;return b|0}d=uu()|0;d=c[d>>2]|0;switch(d|0){case 1:{e=3;break}case 37:case 4:case 16:case 110:case 11:case 13:case 17:{b=5;return b|0}default:e=3850}c[b+20>>2]=d;b=e;return b|0}function He(b,e){b=b|0;e=e|0;var f=0,g=0;f=c[b+24>>2]|0;g=b+16|0;if((d[g>>0]|0|0)==(e|0)){b=0;return b|0}if((e|0)==1){a[g>>0]=1;b=0;return b|0}if((Wa[c[2568>>2]&127](f)|0)>=0){a[g>>0]=0;b=0;return b|0}e=uu()|0;e=c[e>>2]|0;if((e|0)==2){b=0;return b|0}c[b+20>>2]=e;b=2058;return b|0}function Ie(a,b){a=a|0;b=b|0;a=(Xa[c[2364>>2]&255](c[a+24>>2]|0,0)|0)==0&1;c[b>>2]=a;return 0}function Je(a,b){a=a|0;b=b|0;return 29744}function Ke(a,b){a=a|0;b=b|0;return 29820}function Le(a,b){a=a|0;b=b|0;var d=0;if((b|0)==3082)return;if((b&251|4|0)!=14)return;b=c[a>>2]|0;d=c[b+68>>2]|0;if(!d)b=0;else b=Ya[d&127](b,0,0)|0;c[a+72>>2]=b;return}function Me(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=Ra;Ra=Ra+96|0;h=f+72|0;g=c[b+108>>2]|0;c[h+4>>2]=f;c[h>>2]=b;c[h+8>>2]=70;c[h+12>>2]=g;c[h+16>>2]=0;g=h+20|0;a[g>>0]=0;a[h+21>>0]=1;tb(h,d,e);e=yb(h)|0;if((a[g>>0]|0)!=7){Ra=f;return e|0}d=b+81|0;if(a[d>>0]|0){Ra=f;return e|0}if(a[b+82>>0]|0){Ra=f;return e|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){Ra=f;return e|0}c[d+12>>2]=7;Ra=f;return e|0}function Ne(a,d){a=a|0;d=d|0;var e=0,f=0;e=c[a+260>>2]|0;do if(e|0){f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;break}else{Dg(e);break}}while(0);if((d|0)==3082)return;if((d&251|4|0)!=14)return;d=c[a>>2]|0;e=c[d+68>>2]|0;if(!e)d=0;else d=Ya[e&127](d,0,0)|0;c[a+72>>2]=d;return}function Oe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;d=h+4|0;f=c[b>>2]|0;g=f+16|0;if(c[(c[g>>2]|0)+20>>2]|0){g=0;Ra=h;return g|0}if(a[b+199>>0]|0){g=0;Ra=h;return g|0}e=Pe(c[f>>2]|0,0,f,d,0,542)|0;if(e|0){cd(b,32157,h);c[b+12>>2]=e;g=1;Ra=h;return g|0}e=c[d>>2]|0;c[(c[g>>2]|0)+20>>2]=e;if((Ud(e,c[f+92>>2]|0,-1,0)|0)==7){Fc(f);g=1;Ra=h;return g|0}else{g=0;Ra=h;return g|0}return 0}function Pe(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+128|0;p=J+104|0;D=J+120|0;A=J+116|0;H=J;G=(f|0)==0;if(!G){k=(a[f>>0]|0)==0;if(Bu(f,32227)|0)if(k)B=4;else{k=0;B=5}else B=6}else B=4;if((B|0)==4)if((a[g+80>>0]|0)==2){k=1;B=6}else{k=1;B=5}if((B|0)==5)if(!(j&128)){F=0;E=i}else B=6;if((B|0)==6){F=1;E=i|2}C=(j&256|0)!=0&(F|k)?j&-769|512:j;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](48)|0;if(!i){h=7;Ra=J;return h|0}else I=i}else{i=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;l=59064;j=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&j>>>0>0){I=c[14978]|0;z=Tv(j|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&z>>>0<=I>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(!j){h=7;Ra=J;return h|0}i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;I=j}else I=j}l=I+4|0;s=l+44|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(s|0));c[I>>2]=g;c[I+32>>2]=I;c[I+36>>2]=1;a:do if(!k?!((C&131072|0)==0|F&(C&64|0)==0):0){if(G)k=0;else k=(Eu(f)|0)&1073741823;l=k+1|0;m=(c[e+8>>2]|0)+1|0;k=(m|0)>(l|0)?m:l;z=Sv(k|0,0,-1,-1)|0;y=L()|0;do if(!(y>>>0>0|(y|0)==0&z>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](k)|0;a[I+9>>0]=1;if(!k)break;else n=k}else{j=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;k=59064;i=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&i>>>0>0){z=c[14978]|0;y=Tv(i|0,k|0,j|0,((j|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(!i){B=33;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;a[I+9>>0]=1;n=i}if(!F){a[n>>0]=0;k=Za[c[e+36>>2]&127](e,f,m,n)|0;if(k|0){if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{h=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=k;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=k;Ra=J;return h|0}}}else ew(n|0,f|0,l|0)|0;j=c[14822]|0;b:do if(!j)j=0;else{while(1){k=c[j>>2]|0;if((Bu(n,c[k+168>>2]|0)|0)==0?(c[k>>2]|0)==(e|0):0)break;j=c[j+68>>2]|0;if(!j){j=0;break b}}k=c[g+20>>2]|0;c:do if((k|0)>0){l=c[g+16>>2]|0;while(1){i=k;k=k+-1|0;z=c[l+(k<<4)+4>>2]|0;if(z|0?(c[z+4>>2]|0)==(j|0):0)break;if((i|0)<=1)break c}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{h=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=19;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=19;Ra=J;return h|0}}while(0);c[I+4>>2]=j;z=j+64|0;c[z>>2]=(c[z>>2]|0)+1}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{z=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!j){B=69;break a}if(!(a[I+9>>0]|0))break a;else{B=213;break a}}else B=33;while(0);if((B|0)==33)a[I+9>>0]=1;if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=7;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=7;Ra=J;return h|0}}else B=69;while(0);d:do if((B|0)==69){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](84)|0;if(!j)k=7;else B=80}else{k=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){z=c[14978]|0;y=Tv(i|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}j=Wa[c[29340>>2]&127](k)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;B=80}else B=80}else k=7}do if((B|0)==80){l=j+4|0;s=l+80|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(s|0));y=E&1;z=(y|0)!=0;c[D>>2]=4096;s=e+4|0;u=c[s>>2]|0;u=((u|0)>72?u:72)+7&-8;c[j>>2]=0;do if(!(E&2))if(!G)if(a[f>>0]|0){o=e+8|0;m=(c[o>>2]|0)+1|0;k=m<<1;B=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;x=L()|0;if(!(x>>>0>0|(x|0)==0&B>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](k)|0;if(!k){k=7;B=229;break}else i=k}else{l=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;k=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&k>>>0>0){B=c[14978]|0;x=Tv(k|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&x>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](l)|0;if(!i){k=7;B=229;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}a[i>>0]=0;k=Za[c[e+36>>2]&127](e,f,m,i)|0;n=(Eu(i)|0)&1073741823;m=f+(((Eu(f)|0)&1073741823)+1)|0;if(!(a[m>>0]|0))l=m;else{l=m;do{l=l+(((Eu(l)|0)&1073741823)+1)|0;l=l+(((Eu(l)|0)&1073741823)+1)|0}while((a[l>>0]|0)!=0)}if(!k){if((n+8|0)<=(c[o>>2]|0)){x=0;r=l+1-m|0;p=m;q=1;B=119;break}c[p>>2]=31984;c[p+4>>2]=55390;c[p+8>>2]=31517;Db(14,32001,p);k=14}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);B=229;break}else{B=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);B=229;break}}else{k=7;B=229}}else{x=0;r=0;p=0;i=0;n=0;q=1;B=119}else{f=0;x=0;r=0;p=0;i=0;n=0;q=0;B=119}else if(!G)if(a[f>>0]|0){m=(Eu(f)|0)+1|0;B=Sv(m|0,0,-1,-1)|0;x=L()|0;if(x>>>0>0|(x|0)==0&B>>>0>2147483390){k=7;B=229}else{if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](m)|0;if(!k){k=7;B=229;break}}else{k=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){B=c[14978]|0;x=Tv(i|0,l|0,k|0,((k|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&x>>>0<=B>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){k=7;B=229;break}i=Wa[c[29352>>2]&127](k)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}ew(k|0,f|0,m|0)|0;f=0;x=1;r=0;p=0;i=k;n=(Eu(k)|0)&1073741823;q=0;B=119}}else{x=1;r=0;p=0;i=0;n=0;q=1;B=119}else{f=0;x=1;r=0;p=0;i=0;n=0;q=0;B=119}while(0);e:do if((B|0)==119){o=(u<<1)+17+(n*3|0)+r+((c[s>>2]|0)+279&-8)|0;w=Sv(o|0,0,-1,-1)|0;v=L()|0;do if(!(v>>>0>0|(v|0)==0&w>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;if(!k)break;else w=k}else{k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){w=c[14978]|0;v=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;t=L()|0;c[14768]=((t|0)<0|(t|0)==0&v>>>0<=w>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l)break;k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;w=l}else w=l}gw(w|0,0,o|0)|0;t=w+212|0;c[t>>2]=w+224;k=w+272|0;v=w+60|0;c[v>>2]=k;k=k+((c[s>>2]|0)+7&-8)|0;c[w+68>>2]=k;k=k+u|0;c[w+64>>2]=k;k=k+u|0;m=w+168|0;c[m>>2]=k;do if(i|0){l=n+1|0;o=w+172|0;c[o>>2]=k+(r+l);ew(k|0,i|0,n|0)|0;if(r|0)ew((c[m>>2]|0)+l|0,p|0,r|0)|0;ew(c[o>>2]|0,i|0,n|0)|0;l=(c[o>>2]|0)+n|0;k=32236;s=l+10|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(s|0));s=(c[o>>2]|0)+(n+9)|0;u=w+220|0;c[u>>2]=s;ew(s|0,i|0,n|0)|0;u=(c[u>>2]|0)+n|0;a[u>>0]=a[32246]|0;a[u+1>>0]=a[32247]|0;a[u+2>>0]=a[32248]|0;a[u+3>>0]=a[32249]|0;a[u+4>>0]=a[32250]|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{u=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[w>>2]=e;c[w+144>>2]=C;f:do if(q?(a[f>>0]|0)!=0:0){c[A>>2]=0;k=_a[c[e+24>>2]&127](e,c[m>>2]|0,c[v>>2]|0,C&556927,A)|0;m=c[A>>2]&1;if(k|0)break;l=c[v>>2]|0;l=Wa[c[(c[l>>2]|0)+48>>2]&127](l)|0;g:do if(!m){do if(!(a[w+12>>0]|0)){B=c[v>>2]|0;if((Wa[c[(c[B>>2]|0)+48>>2]&127](B)|0)&4096|0)break;k=c[v>>2]|0;i=c[(c[k>>2]|0)+44>>2]|0;do if(i){B=Wa[i&127](k)|0;k=(B|0)<65536?B:65536;if((B|0)<32){k=512;break}c[w+148>>2]=k;if(k>>>0<=4096)break g;if(k>>>0>8192){c[D>>2]=8192;break g}else{c[D>>2]=k;break g}}else k=4096;while(0);c[w+148>>2]=k;break g}while(0);c[w+148>>2]=512}while(0);k=f+(((Eu(f)|0)&1073741823)+1)|0;h:do if(!(a[k>>0]|0))k=0;else{while(1){B=Bu(k,32252)|0;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!B)break;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!(a[k>>0]|0)){k=0;break h}}k=(Zm(k,1,0)|0)<<24>>24!=0}while(0);a[w+13>>0]=k&1;i:do if(!(l&8192)){k=f+(((Eu(f)|0)&1073741823)+1)|0;j:do if(a[k>>0]|0){while(1){B=Bu(k,32259)|0;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!B)break;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!(a[k>>0]|0))break j}if((Zm(k,1,0)|0)<<24>>24)break i}while(0);q=m;f=0;B=170;break f}while(0);k=C|1;B=168}else{k=C;B=168}while(0);if((B|0)==168){a[w+16>>0]=1;a[w+17>>0]=4;a[w+13>>0]=1;q=k&1;f=1;B=170}if((B|0)==170){k=Se(w,D,-1)|0;if(!k){p=c[D>>2]|0;r=(x|0)==0;i=x^1;k=r?119:0;n=c[t>>2]|0;l=n;s=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(s|0));o=n+24|0;c[o>>2]=1;l=n+28|0;c[l>>2]=88;a[n+32>>0]=i;a[n+33>>0]=2;c[n+36>>2]=k;c[n+40>>2]=w;k=n+16|0;c[k>>2]=100;c[n+20>>2]=1;m=Ya[c[29424>>2]&127](p,128,i)|0;if(!m)k=7;else{i=c[7357]|0;k=c[k>>2]|0;if((k|0)<=-1){C=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;D=L()|0;k=(c[l>>2]|0)+(c[o>>2]|0)|0;k=Wv(C|0,D|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[i&127](m,k);k=n+44|0;i=c[k>>2]|0;if(i|0)ab[c[29452>>2]&127](i);c[k>>2]=m;c[o>>2]=p;a[w+6>>0]=y^1;c[w+156>>2]=1073741823;a[w+12>>0]=f;a[w+4>>0]=f;a[w+18>>0]=f;a[w+15>>0]=x;a[w+14>>0]=q;a[w+7>>0]=f;do if(!(f<<24>>24)){a[w+8>>0]=1;a[w+9>>0]=0;a[w+10>>0]=2;a[w+11>>0]=10;b[w+140>>1]=88;D=w+160|0;c[D>>2]=-1;c[D+4>>2]=-1;D=c[v>>2]|0;if((Wa[c[(c[D>>2]|0)+48>>2]&127](D)|0)&4096|0){k=512;break}k=c[v>>2]|0;i=c[(c[k>>2]|0)+44>>2]|0;if(!i){k=4096;break}k=Wa[i&127](k)|0;k=(k|0)<32?512:(k|0)<65536?k:65536}else{b[w+140>>1]=88;k=w+160|0;c[k>>2]=-1;c[k+4>>2]=-1;k=512}while(0);c[w+148>>2]=k;if(z|r^1)a[w+5>>0]=((y&255)<<1&255^2)+2<<24>>24;c[w+200>>2]=92;c[w+204>>2]=(c[w+40>>2]|0)==0?74:75;c[j>>2]=w;D=g+48|0;s=c[D+4>>2]|0;l=w+128|0;c[l>>2]=c[D>>2];c[l+4>>2]=s;l=H;s=l+100|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(s|0));k=c[v>>2]|0;i=c[k>>2]|0;if(i|0){k=_a[c[i+8>>2]&127](k,H,100,0,0)|0;switch(k|0){case 0:case 522:break;default:{B=230;break e}}}a[j+16>>0]=E;c[j+4>>2]=g;k=c[j>>2]|0;i=k+176|0;c[i>>2]=117;c[k+180>>2]=j;l=c[k+60>>2]|0;m=c[l>>2]|0;if(!m)l=k;else{Ya[c[m+40>>2]&127](l,15,i)|0;l=c[j>>2]|0}c[I+4>>2]=j;c[j+8>>2]=0;c[j+12>>2]=0;if(a[l+14>>0]|0){E=j+22|0;b[E>>1]=b[E>>1]|1}k=d[H+17>>0]<<16|d[H+16>>0]<<8;m=j+32|0;c[m>>2]=k;do if((k+-512|0)>>>0>65024)B=205;else{if(k+16777215&k|0){B=205;break}k=a[H+20>>0]|0;i=j+22|0;b[i>>1]=b[i>>1]|2;a[j+17>>0]=(d[H+53>>0]<<16|d[H+52>>0]<<24|d[H+54>>0]<<8|d[H+55>>0]|0)!=0&1;i=(d[H+65>>0]<<16|d[H+64>>0]<<24|d[H+66>>0]<<8|d[H+67>>0]|0)!=0&1;B=208}while(0);do if((B|0)==205){c[m>>2]=0;if(G|F){k=0;break}a[j+17>>0]=0;k=0;i=0;B=208}while(0);if((B|0)==208)a[j+18>>0]=i;i=k&255;k=Se(l,m,i)|0;if(k|0){B=230;break e}c[j+36>>2]=(c[m>>2]|0)-i;c[j+64>>2]=1;if(!(a[I+9>>0]|0))break d;c[j+68>>2]=c[14822];c[14822]=j;B=213;break d}}}i=c[v>>2]|0;l=c[i>>2]|0;if(l|0){Wa[c[l+4>>2]&127](i)|0;c[i>>2]=0}l=c[w+208>>2]|0;k:do if(l|0){i=l;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;break k}else{i=Wa[c[29352>>2]&127](l)|0;break}else i=Wa[c[29352>>2]&127](l)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{g=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](w);B=229;break e}else{B=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);B=229;break e}}while(0);if(i)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);k=7;B=229;break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);k=7;B=229;break}else{k=7;B=229}}while(0);if((B|0)==229)if(j)B=230;if((B|0)==230){i=c[j>>2]|0;if(i)Te(i,0)}if(j)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{g=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](I);else{g=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I)}c[h>>2]=0;h=k;Ra=J;return h|0}while(0);l:do if((B|0)==213){m=c[g+20>>2]|0;if((m|0)>0){l=c[g+16>>2]|0;k=0;while(1){i=c[l+(k<<4)+4>>2]|0;if(i|0?a[i+9>>0]|0:0)break;k=k+1|0;if((k|0)>=(m|0))break l}while(1){k=c[i+28>>2]|0;if(!k)break;else i=k}m=c[I+4>>2]|0;if(m>>>0<(c[i+4>>2]|0)>>>0){c[I+24>>2]=i;c[I+28>>2]=0;c[i+28>>2]=I;break}k=i+24|0;l=c[k>>2]|0;m:do if(!l)B=224;else{while(1){if((c[l+4>>2]|0)>>>0>=m>>>0)break;k=l+24|0;i=c[k>>2]|0;if(!i){i=l;B=224;break m}else{g=l;l=i;i=g}}c[I+24>>2]=l;c[I+28>>2]=i;c[l+28>>2]=I}while(0);if((B|0)==224){c[I+24>>2]=0;c[I+28>>2]=i}c[k>>2]=I}}while(0);c[h>>2]=I;k=c[I+4>>2]|0;c[k+4>>2]=c[I>>2];if(!(c[k+48>>2]|0)){h=c[(c[k>>2]|0)+212>>2]|0;c[h+16>>2]=-2e3;g=c[7357]|0;I=c[h+44>>2]|0;h=(c[h+28>>2]|0)+(c[h+24>>2]|0)|0;h=Wv(2048e3,0,h|0,((h|0)<0)<<31>>31|0)|0;L()|0;bb[g&127](I,h)}k=c[(c[j>>2]|0)+60>>2]|0;i=c[k>>2]|0;if(!i){h=0;Ra=J;return h|0}Ya[c[i+40>>2]&127](k,30,j+4|0)|0;h=0;Ra=J;return h|0}function Qe(d){d=d|0;var e=0;e=c[d+8>>2]|0;if(!(a[e>>0]|0))return;a[e>>0]=0;if((b[d+30>>1]|0)<=1)return;Gf(e)|0;return}function Re(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[b+4>>2]|0;b=c[(c[b>>2]|0)+60>>2]|0;d=c[f+396>>2]|0;if(!d){g=0;return g|0}g=f+404|0;e=c[g>>2]|0;if((e|0)<0){g=0;return g|0}if(!(a[f+408>>0]|0))b=Xa[d&255](c[f+400>>2]|0,e)|0;else b=Ya[d&127](c[f+400>>2]|0,e,b)|0;if(!b)d=-1;else d=(c[g>>2]|0)+1|0;c[g>>2]=d;g=b;return g|0}function Se(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+16|0;o=r;p=c[f>>2]|0;if(!((a[e+15>>0]|0)!=0?(c[e+24>>2]|0)!=0:0))l=3;a:do if(((l|0)==3?(m=e+212|0,p|0?(c[(c[m>>2]|0)+12>>2]|0)==0:0):0)?(q=e+152|0,(p|0)!=(c[q>>2]|0)):0){n=o;c[n>>2]=0;c[n+4>>2]=0;if(((a[e+16>>0]|0)!=0?(i=c[e+60>>2]|0,j=c[i>>2]|0,(j|0)!=0):0)?(k=Xa[c[j+24>>2]&255](i,o)|0,(k|0)!=0):0)g=k;else l=8;b:do if((l|0)==8){k=p+8|0;if((c[14813]|0)>=(k|0)?(h=c[14819]|0,(h|0)!=0):0){c[14819]=c[h>>2];n=c[14820]|0;c[14820]=n+-1;c[14821]=(n|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0)c[14983]=i}else{n=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;l=L()|0;if(l>>>0>0|(l|0)==0&n>>>0>2147483390){g=7;break}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h){g=7;break}}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){n=c[14978]|0;l=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&l>>>0<=n>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){g=7;break}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}i=Wa[c[29352>>2]&127](h)|0;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14980]|0)+i|0;c[14980]=i;if(i>>>0>(c[14984]|0)>>>0)c[14984]=i}k=h+p|0;n=k;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;Ff(e);k=c[m>>2]|0;m=k+24|0;do if(c[m>>2]|0){j=k+28|0;n=Ya[c[29424>>2]&127](p,(c[j>>2]|0)+40|0,d[k+32>>0]|0)|0;if(n|0){l=c[7357]|0;i=c[k+16>>2]|0;if((i|0)<=-1){t=Yv(i|0,((i|0)<0)<<31>>31|0,-1024,-1)|0;s=L()|0;i=(c[j>>2]|0)+(c[m>>2]|0)|0;i=Wv(t|0,s|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0}bb[l&127](n,i);i=k+44|0;j=c[i>>2]|0;if(j|0)ab[c[29452>>2]&127](j);c[i>>2]=n;c[m>>2]=p;break}g=h;do if((c[14816]|0)>>>0<=g>>>0)if((c[14817]|0)>>>0>g>>>0){c[14979]=(c[14979]|0)+-1;c[h>>2]=c[14819];c[14819]=h;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;g=7;break b}else{g=Wa[c[29352>>2]&127](h)|0;break}else g=Wa[c[29352>>2]&127](h)|0;while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);g=7;break b}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);g=7;break b}}while(0);j=e+208|0;k=c[j>>2]|0;c:do if(k|0){i=k;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break c}else{i=Wa[c[29352>>2]&127](k)|0;break}else i=Wa[c[29352>>2]&127](k)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[j>>2]=h;t=o;s=c[t>>2]|0;t=c[t+4>>2]|0;o=Sv(p|0,0,-1,-1)|0;t=Sv(o|0,L()|0,s|0,t|0)|0;t=Wv(t|0,L()|0,p|0,0)|0;L()|0;c[e+24>>2]=t;c[q>>2]=p;break a}while(0);c[f>>2]=c[q>>2];t=g;Ra=r;return t|0}while(0);c[f>>2]=c[e+152>>2];h=e+142|0;if((g|0)<0)g=b[h>>1]|0;b[h>>1]=g;t=0;Ra=r;return t|0}function Te(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;h=o;n=c[b+208>>2]|0;f=c[b+136>>2]|0;if(f|0)do{g=f;f=c[f+16>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);l=b+4|0;a[l>>0]=0;do if((e|0)!=0?(0==0?(c[e+32>>2]&2048|0)==0:0):0){c[h>>2]=0;if((((a[b+12>>0]|0)==0?(c[b+24>>2]|0)!=0:0)?(i=c[b+60>>2]|0,j=c[i>>2]|0,(j|0)!=0):0)?(k=Ya[c[j+40>>2]&127](i,20,h)|0,(k|0)!=12):0){if(c[h>>2]|k|0){f=0;break}}else m=14;f=n}else f=0;while(0);k=b+216|0;Pf(c[k>>2]|0,e,d[b+11>>0]|0,c[b+152>>2]|0,f)|0;c[k>>2]=0;Ff(b);if(!(a[b+15>>0]|0)){h=b+64|0;f=c[h>>2]|0;g=c[f>>2]|0;a:do if(g|0){if(!(a[b+7>>0]|0)){f=Xa[c[g+20>>2]&255](f,2)|0;if(!f){f=c[h>>2]|0;g=c[f>>2]|0;m=22}}else m=22;if((m|0)==22)f=Xa[c[g+24>>2]&255](f,b+80|0)|0;switch((f&255)<<24>>24){case 10:case 13:break;default:break a}c[b+40>>2]=f;a[b+16>>0]=6;c[b+204>>2]=(f|0)==0?74:75}while(0);switch(a[b+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[l>>0]|0))uf(b,0,0)|0;break}default:tf(b)|0}vf(b)}else vf(b);f=c[b+64>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}f=c[b+60>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}b:do if(n|0){f=n;do if((c[14816]|0)>>>0<=f>>>0)if((c[14817]|0)>>>0>f>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;n=(c[14820]|0)+1|0;c[14820]=n;c[14821]=(n|0)<(c[14815]|0)&1;break b}else{f=Wa[c[29352>>2]&127](n)|0;break}else f=Wa[c[29352>>2]&127](n)|0;while(0);c[14980]=(c[14980]|0)-f;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{m=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);ab[c[29452>>2]&127](c[(c[b+212>>2]|0)+44>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=o;return}else{n=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=o;return}}function Ue(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=d+40|0;if(c[h>>2]|0){e=0;return e|0}g=a[d+20>>0]|0;if(g<<24>>24){if(g&3){e=0;return e|0}if(b[e+28>>1]&8){e=0;return e|0}}j=d+196|0;c[j>>2]=(c[j>>2]|0)+1;c[e+16>>2]=0;do if(c[d+216>>2]|0){f=Ve(e)|0;if(!f){f=We(d,e,0,0)|0;i=12}}else{if(!((b[e+28>>1]&8)==0?(a[d+16>>0]|0)!=3:0))i=10;if((i|0)==10?(f=Xe(d,1)|0,f|0):0)break;f=Ye(d,e)|0;i=12}while(0);if((i|0)==12)if(!f){j=c[e+12>>2]|0;f=j+8|0;g=e+36|0;d=c[g>>2]|0;if((c[f>>2]|0)==(e|0))c[f>>2]=d;h=c[e+32>>2]|0;i=(h|0)==0;if(i){c[j+4>>2]=d;f=d}else{c[h+36>>2]=d;f=c[g>>2]|0}if(!f){c[j>>2]=h;if(i)a[j+33>>0]=2}else c[f+32>>2]=h;i=e+28|0;b[i>>1]=b[i>>1]&-16|1;if(b[e+30>>1]|0){e=0;return e|0}if(!(a[j+32>>0]|0)){e=0;return e|0}cb[c[29440>>2]&255](c[j+44>>2]|0,c[e>>2]|0,0);e=0;return e|0}switch((f&255)<<24>>24){case 10:case 13:break;default:{e=f;return e|0}}c[h>>2]=f;a[d+16>>0]=6;c[d+204>>2]=75;e=f;return e|0}function Ve(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;r=v;q=c[b+20>>2]|0;s=b+24|0;i=c[s>>2]|0;t=q+96|0;g=c[t>>2]|0;if((g|0)<=0){u=0;Ra=v;return u|0}u=q+92|0;m=c[u>>2]|0;n=i+-1|0;l=0;a:while(1){b:do if((c[m+(l*48|0)+20>>2]|0)>>>0>=i>>>0){h=c[m+(l*48|0)+16>>2]|0;e=c[h>>2]|0;if(n>>>0>=e>>>0)break a;f=c[h+8>>2]|0;if(!f)j=n;else{j=n;k=h;do{e=(j>>>0)/(f>>>0)|0;k=c[k+12+(e<<2)>>2]|0;if(!k)break a;j=j-(G(e,f)|0)|0;f=c[k+8>>2]|0}while((f|0)!=0);h=k;e=c[k>>2]|0}if(e>>>0<4001)if(!(1<<(j&7)&d[h+12+(j>>>3)>>0]))break a;else break;k=j+1|0;e=(j>>>0)%125|0;f=c[h+12+(e<<2)>>2]|0;if(!f)break a;while(1){if((f|0)==(k|0))break b;e=((e+1|0)>>>0)%125|0;f=c[h+12+(e<<2)>>2]|0;if(!f)break a}}while(0);l=l+1|0;if((l|0)>=(g|0)){e=0;p=35;break}}if((p|0)==35){Ra=v;return e|0}e=a[q+5>>0]|0;do if(e<<24>>24!=2){k=q+68|0;h=c[k>>2]|0;c:do if(!(c[h>>2]|0)){do if(e<<24>>24!=4?(o=c[7334]|0,(a[q+21>>0]|0)==0):0){e=c[q>>2]|0;f=h;g=f+72|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));if(o|0){g=o;f=(o|0)>0?o:1020;break}e=_a[c[e+24>>2]&127](e,0,h,8222,0)|0;if(!e)break c;Ra=v;return e|0}else p=22;while(0);if((p|0)==22){e=c[q>>2]|0;f=h;g=f+72|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));g=-1;f=1020}c[h+4>>2]=f;c[h>>2]=29896;c[h+8>>2]=g;c[h+56>>2]=8222;c[h+64>>2]=0;c[h+60>>2]=e}while(0);i=c[b+4>>2]|0;j=q+52|0;f=q+152|0;g=(c[f>>2]|0)+4|0;g=Yv(g|0,((g|0)<0)<<31>>31|0,c[j>>2]|0,0)|0;h=L()|0;e=c[k>>2]|0;q=c[s>>2]|0;a[r>>0]=q>>>24;a[r+1>>0]=q>>>16;a[r+2>>0]=q>>>8;a[r+3>>0]=q;e=_a[c[(c[e>>2]|0)+12>>2]&127](e,r,4,g,h)|0;if(e|0){u=e;Ra=v;return u|0}b=c[k>>2]|0;q=c[f>>2]|0;r=Sv(g|0,h|0,4,0)|0;e=L()|0;e=_a[c[(c[b>>2]|0)+12>>2]&127](b,i,q,r,e)|0;if(!e){e=j;g=c[t>>2]|0;i=c[s>>2]|0;break}else{u=e;Ra=v;return u|0}}else e=q+52|0;while(0);c[e>>2]=(c[e>>2]|0)+1;if((g|0)<=0){u=0;Ra=v;return u|0}e=0;h=0;while(1){f=c[u>>2]|0;if((c[f+(h*48|0)+20>>2]|0)>>>0<i>>>0)f=g;else{e=df(c[f+(h*48|0)+16>>2]|0,i)|0|e;f=c[t>>2]|0}h=h+1|0;if((h|0)>=(f|0))break;else g=f}Ra=v;return e|0}function We(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=Ra;Ra=Ra+48|0;sa=za+32|0;qa=za;k=za+36|0;c[k>>2]=f;R=(h|0)==0;if(!R){c[k>>2]=f;if(!f){ya=0;f=0}else{i=f;f=0;j=k;do{xa=(c[i+24>>2]|0)>>>0>g>>>0;ya=i+16|0;f=f+((xa^1)&1)|0;j=xa?j:ya;i=c[ya>>2]|0;c[j>>2]=i}while((i|0)!=0);ya=c[k>>2]|0}}else{ya=f;f=1}xa=e+192|0;c[xa>>2]=(c[xa>>2]|0)+f;if((c[ya+24>>2]|0)==1){va=c[ya+20>>2]|0;va=(d[va+105>>0]<<16|d[va+104>>0]<<24|d[va+106>>0]<<8|d[va+107>>0])+1|0;xa=ya+4|0;wa=c[xa>>2]|0;oa=va>>>24&255;a[wa+24>>0]=oa;ra=va>>>16&255;a[wa+25>>0]=ra;ua=va>>>8&255;a[wa+26>>0]=ua;va=va&255;a[wa+27>>0]=va;wa=c[xa>>2]|0;a[wa+92>>0]=oa;a[wa+93>>0]=ra;a[wa+94>>0]=ua;a[wa+95>>0]=va;xa=c[xa>>2]|0;a[xa+96>>0]=0;a[xa+97>>0]=46;a[xa+98>>0]=52;a[xa+99>>0]=32}wa=c[e+216>>2]|0;ua=c[e+152>>2]|0;U=d[e+11>>0]|0;va=wa+32|0;f=c[c[va>>2]>>2]|0;xa=wa+52|0;if(!(Lu(xa,f,48)|0))B=0;else B=(c[f+16>>2]|0)+1|0;o=wa+40|0;if(!(b[o>>1]|0)){a:do if(!(c[f+96>>2]|0)){l=wa+43|0;$=20}else{Fb(4,qa);k=wa+43|0;b:do if(!(a[k>>0]|0)){f=c[wa+4>>2]|0;f=Za[c[(c[f>>2]|0)+56>>2]&127](f,4,4,10)|0;switch(f|0){case 0:{$=15;break b}case 5:break b;default:{}}p=f;break a}else $=15;while(0);if(($|0)==15){m=c[qa>>2]|0;i=c[va>>2]|0;f=c[i>>2]|0;j=f+96|0;$=wa+84|0;oa=wa+112|0;c[oa>>2]=(c[oa>>2]|0)+1;c[wa+68>>2]=0;oa=$+1|0;ra=$+2|0;n=$+3|0;l=(d[oa>>0]<<16|d[$>>0]<<24|d[ra>>0]<<8|d[n>>0])+1|0;a[$>>0]=l>>>24;a[oa>>0]=l>>>16;a[ra>>0]=l>>>8;a[n>>0]=l;c[wa+88>>2]=m;i=c[i>>2]|0;a[wa+64>>0]=1;c[xa>>2]=3007e3;n=c[xa+4>>2]|0;l=n+6014e3+(c[xa+8>>2]|0)|0;n=n+3007e3+(c[xa+12>>2]|0)+l|0;l=n+l|0;n=n+(c[xa+20>>2]|0)+l|0;l=l+(c[xa+24>>2]|0)+n|0;n=n+(c[xa+28>>2]|0)+l|0;l=l+(c[xa+32>>2]|0)+n|0;c[wa+92>>2]=l;c[wa+96>>2]=n+m+l;l=i+48|0;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));if((a[k>>0]|0)!=2){ra=c[wa+4>>2]|0;ab[c[(c[ra>>2]|0)+60>>2]&127](ra)}l=i;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));c[j>>2]=0;c[f+128>>2]=0;c[f+104>>2]=0;c[f+108>>2]=-1;c[f+112>>2]=-1;c[f+116>>2]=-1;if(!(a[k>>0]|0)){ra=c[wa+4>>2]|0;Za[c[(c[ra>>2]|0)+56>>2]&127](ra,4,4,9)|0}}l=k;$=20}while(0);if(($|0)==20){if(!(a[l>>0]|0)){ra=c[wa+4>>2]|0;Za[c[(c[ra>>2]|0)+56>>2]&127](ra,3,1,5)|0}b[o>>1]=-1;f=0;do{f=f+1|0;i=gf(wa,qa,1,f)|0}while((i|0)==-1);p=i}if(p|0){g=p;Ra=za;return g|0}}ra=wa+68|0;l=c[ra>>2]|0;c:do if(!l){a[qa>>0]=55;a[qa+1>>0]=127;a[qa+2>>0]=6;a[qa+3>>0]=-126;f=qa+4|0;a[f>>0]=0;a[qa+5>>0]=45;a[qa+6>>0]=-30;a[qa+7>>0]=24;i=qa+8|0;a[i>>0]=ua>>>24;a[qa+9>>0]=ua>>>16;a[qa+10>>0]=ua>>>8;a[qa+11>>0]=ua;j=qa+12|0;oa=c[wa+112>>2]|0;a[j>>0]=oa>>>24;a[qa+13>>0]=oa>>>16;a[qa+14>>0]=oa>>>8;a[qa+15>>0]=oa;k=wa+84|0;if(!oa)Fb(8,k);oa=k;Y=c[oa>>2]|0;oa=c[oa+4>>2]|0;W=qa+16|0;c[W>>2]=Y;c[W+4>>2]=oa;W=c[qa>>2]|0;X=(c[f>>2]|0)+W|0;f=X+W+(c[i>>2]|0)|0;i=(c[j>>2]|0)+X+f|0;f=f+Y+i|0;i=i+oa+f|0;a[qa+24>>0]=f>>>24;a[qa+25>>0]=f>>>16;a[qa+26>>0]=f>>>8;a[qa+27>>0]=f;a[qa+28>>0]=i>>>24;a[qa+29>>0]=i>>>16;a[qa+30>>0]=i>>>8;a[qa+31>>0]=i;c[wa+36>>2]=ua;a[wa+65>>0]=0;c[wa+76>>2]=f;c[wa+80>>2]=i;a[wa+47>>0]=1;i=wa+8|0;f=c[i>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,qa,32,0,0)|0;do if(!f){if((a[wa+48>>0]|0?(q=c[i>>2]|0,r=U>>>2&3,r|0):0)?(s=Xa[c[(c[q>>2]|0)+20>>2]&255](q,r)|0,s|0):0){f=s;break}Y=i;break c}while(0);g=f;Ra=za;return g|0}else Y=wa+8|0;while(0);V=c[Y>>2]|0;W=ua+24|0;X=((W|0)<0)<<31>>31;i=Yv(l|0,0,W|0,X|0)|0;i=Sv(i|0,L()|0,32,0)|0;f=L()|0;oa=(ya|0)==0;d:do if(!oa){q=(B|0)==0;r=V;s=U&3;t=(s|0)==0;u=wa+104|0;v=((ua|0)<0)<<31>>31;p=ya;m=0;o=f;n=i;e:while(1){do if(q)$=47;else{j=p+16|0;if(!(R|(c[j>>2]|0)!=0)){K=0;S=l+1|0;$=49;break}c[qa>>2]=0;ef(wa,c[p+24>>2]|0,qa)|0;k=c[qa>>2]|0;if(k>>>0<B>>>0){$=47;break}f=Yv(k+-1|0,0,W|0,X|0)|0;f=Sv(f|0,L()|0,56,0)|0;i=L()|0;if(((c[u>>2]|0)+-1|0)>>>0>=k>>>0)c[u>>2]=k;C=c[Y>>2]|0;C=_a[c[(c[C>>2]|0)+12>>2]&127](C,c[p+4>>2]|0,ua,f,i)|0;if(C|0){$=45;break e}w=p+28|0;b[w>>1]=b[w>>1]&-65;w=l;x=m;y=j;z=n;A=o}while(0);if(($|0)==47){f=l+1|0;if(R){M=0;T=f;$=50}else{K=c[p+16>>2]|0;S=f;$=49}}if(($|0)==49){M=(K|0)==0?g:0;T=S;$=50}if(($|0)==50){$=0;m=c[p+4>>2]|0;mf(wa,c[p+24>>2]|0,M,m,qa);if(!(o>>>0<4294967295|(o|0)==-1&n>>>0<4294967272)){l=0-n|0;f=_a[c[(c[r>>2]|0)+12>>2]&127](r,qa,l,n,o)|0;if(f|0){E=f;$=63;break}f=Sv(n|0,o|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;j=n+24|0;if(t)k=0;else k=Xa[c[(c[r>>2]|0)+20>>2]&255](r,s)|0;if((j|0)!=0&(k|0)==0){H=j;J=qa+l|0;N=f;O=i;$=55}else F=k}else{H=24;J=qa;N=n;O=o;$=55}if(($|0)==55){$=0;F=_a[c[(c[r>>2]|0)+12>>2]&127](r,J,H,N,O)|0}if(F|0){E=F;$=63;break}f=Sv(n|0,o|0,24,0)|0;i=L()|0;Sv(f|0,i|0,ua|0,v|0)|0;if(!((o|0)>-1|(o|0)==-1&n>>>0>4294967271|(L()|0)<0)){l=-24-n|0;j=_a[c[(c[r>>2]|0)+12>>2]&127](r,m,l,f,i)|0;if(j|0){E=j;$=63;break}f=Sv(f|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;j=ua-l|0;if(t)k=0;else k=Xa[c[(c[r>>2]|0)+20>>2]&255](r,s)|0;if((j|0)!=0&(k|0)==0){G=j;I=m+l|0;P=f;Q=i;$=62}else D=k}else{G=ua;I=m;P=f;Q=i;$=62}if(($|0)==62){$=0;D=_a[c[(c[r>>2]|0)+12>>2]&127](r,I,G,P,Q)|0}f=p+28|0;if(D|0){da=D;$=127;break}z=Sv(n|0,o|0,W|0,X|0)|0;A=L()|0;b[f>>1]=b[f>>1]|64;w=T;x=p;y=p+16|0}p=c[y>>2]|0;if(!p){ma=w;ta=x;Z=z;_=A;break d}else{l=w;m=x;o=A;n=z}}if(($|0)==45){g=C;Ra=za;return g|0}else if(($|0)==63){g=E;Ra=za;return g|0}else if(($|0)==127){Ra=za;return da|0}}else{ma=l;ta=0;Z=i;_=f}while(0);A=(h|0)!=0;if(A){i=wa+104|0;if(c[i>>2]|0){m=(c[wa+36>>2]|0)+24|0;v=nb(m)|0;if(!v){g=7;Ra=za;return g|0}p=c[i>>2]|0;o=(p|0)==1;n=((m|0)<0)<<31>>31;p=Yv(p+-2|0,0,m|0,n|0)|0;p=Sv(p|0,L()|0,48,0)|0;f=L()|0;q=c[Y>>2]|0;f=_a[c[(c[q>>2]|0)+8>>2]&127](q,v,8,o?24:p,o?0:f)|0;o=v+1|0;p=v+2|0;q=v+3|0;c[wa+76>>2]=d[o>>0]<<16|d[v>>0]<<24|d[p>>0]<<8|d[q>>0];r=v+4|0;s=v+5|0;t=v+6|0;u=v+7|0;c[wa+80>>2]=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0];j=c[i>>2]|0;c[i>>2]=0;f:do if(!((f|0)!=0|j>>>0>ma>>>0)){l=v+24|0;do{i=Yv(j+-1|0,0,m|0,n|0)|0;i=Sv(i|0,L()|0,32,0)|0;k=L()|0;f=c[Y>>2]|0;f=_a[c[(c[f>>2]|0)+8>>2]&127](f,v,m,i,k)|0;if(f|0)break f;mf(wa,d[o>>0]<<16|d[v>>0]<<24|d[p>>0]<<8|d[q>>0],d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0],l,qa);f=c[Y>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,qa,24,i,k)|0;j=j+1|0}while(!(j>>>0>ma>>>0|(f|0)!=0))}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](v);else{T=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v)}if(f|0){g=f;Ra=za;return g|0}}z=U&3;do if(!z){i=0;k=0}else{if(a[wa+49>>0]|0){f=c[Y>>2]|0;i=c[(c[f>>2]|0)+44>>2]|0;if(!i){f=4096;i=0}else{i=Wa[i&127](f)|0;U=(i|0)<32;i=(i|0)<65536?i:65536;f=U?512:i;i=U?0:((i|0)<0)<<31>>31}y=Sv(Z|0,_|0,-1,-1)|0;y=Sv(y|0,L()|0,f|0,i|0)|0;v=L()|0;u=Zv(y|0,v|0,f|0,i|0)|0;u=Tv(y|0,v|0,u|0,L()|0)|0;v=L()|0;y=(u|0)==(Z|0)&(v|0)==(_|0);g:do if((v|0)>(_|0)|(v|0)==(_|0)&u>>>0>Z>>>0){s=ta+4|0;t=ta+24|0;w=V;x=((ua|0)<0)<<31>>31;k=0;r=Z;q=_;while(1){p=c[s>>2]|0;mf(wa,c[t>>2]|0,g,p,qa);n=Sv(r|0,q|0,24,0)|0;o=L()|0;if(!((v|0)>(o|0)|(v|0)==(o|0)&u>>>0>n>>>0)){m=Tv(u|0,v|0,r|0,q|0)|0;L()|0;f=_a[c[(c[w>>2]|0)+12>>2]&127](w,qa,m,r,q)|0;if(f|0){ba=f;break}f=Sv(r|0,q|0,m|0,((m|0)<0)<<31>>31|0)|0;i=L()|0;j=24-m|0;l=Xa[c[(c[w>>2]|0)+20>>2]&255](w,z)|0;if((j|0)!=0&(l|0)==0){fa=j;ha=qa+m|0;ia=f;ja=i;$=89}else ca=l}else{fa=24;ha=qa;ia=r;ja=q;$=89}if(($|0)==89){$=0;ca=_a[c[(c[w>>2]|0)+12>>2]&127](w,ha,fa,ia,ja)|0}if(ca|0){ba=ca;break}_=Sv(n|0,o|0,ua|0,x|0)|0;Z=L()|0;if(!((v|0)<(o|0)|(v|0)==(o|0)&u>>>0<=n>>>0|((Z|0)<(v|0)|(Z|0)==(v|0)&_>>>0<u>>>0))){m=Tv(u|0,v|0,n|0,o|0)|0;L()|0;f=_a[c[(c[w>>2]|0)+12>>2]&127](w,p,m,n,o)|0;if(f|0){ba=f;break}f=Sv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;i=L()|0;j=ua-m|0;l=Xa[c[(c[w>>2]|0)+20>>2]&255](w,z)|0;if((j|0)!=0&(l|0)==0){ea=j;ga=p+m|0;ka=f;la=i;$=94}else aa=l}else{ea=ua;ga=p;ka=n;la=o;$=94}if(($|0)==94){$=0;aa=_a[c[(c[w>>2]|0)+12>>2]&127](w,ga,ea,ka,la)|0}if(aa|0){da=aa;$=127;break}r=Sv(r|0,q|0,W|0,X|0)|0;q=L()|0;k=k+1|0;if(!((v|0)>(q|0)|(v|0)==(q|0)&u>>>0>r>>>0))break g}if(($|0)==127){Ra=za;return da|0}g=ba;Ra=za;return g|0}else k=0;while(0);if(!y){i=0;break}}else k=0;i=V;i=Xa[c[(c[i>>2]|0)+20>>2]&255](i,z)|0}while(0);m=wa+47|0;if((a[m>>0]|0)!=0?(pa=wa+16|0,na=c[pa>>2]|0,pa=c[pa+4>>2]|0,(pa|0)>-1|(pa|0)==-1&na>>>0>4294967295):0){l=Yv(k+ma|0,0,W|0,X|0)|0;l=Sv(l|0,L()|0,32,0)|0;j=L()|0;f=(j|0)>(pa|0)|(j|0)==(pa|0)&l>>>0>na>>>0;l=f?l:na;j=f?j:pa;f=c[Y>>2]|0;f=Xa[c[(c[f>>2]|0)+24>>2]&255](f,qa)|0;pa=c[qa+4>>2]|0;if((f|0)==0&((pa|0)>(j|0)|((pa|0)==(j|0)?(c[qa>>2]|0)>>>0>l>>>0:0))){f=c[Y>>2]|0;f=Ya[c[(c[f>>2]|0)+16>>2]&127](f,l,j)|0}if(f|0){c[sa>>2]=c[wa+108>>2];Db(f,32326,sa)}a[m>>0]=0}}else{i=0;k=0}f=c[ra>>2]|0;if((ya|0)!=0&(i|0)==0){l=ya;do{j=f+1|0;if(!(b[l+28>>1]&64))i=0;else{i=ff(wa,j,c[l+24>>2]|0)|0;f=j}l=c[l+16>>2]|0}while((i|0)==0&(l|0)!=0)}j=(i|0)==0;if((k|0)>0&j){l=ta+24|0;while(1){f=f+1|0;i=ff(wa,f,c[l>>2]|0)|0;j=(i|0)==0;if((k|0)>1&j)k=k+-1|0;else{k=f;break}}}else k=f;if(j){b[wa+66>>1]=ua&65280|ua>>>16;c[ra>>2]=k;if(A){f=wa+60|0;m=c[f>>2]|0;c[f>>2]=m+1;c[wa+72>>2]=g;f=c[c[va>>2]>>2]|0;a[wa+64>>0]=1;c[xa>>2]=3007e3;l=c[xa+4>>2]|0;m=m+6014001+l|0;l=l+3007e3+(c[xa+12>>2]|0)+m|0;m=m+k+l|0;l=l+g+m|0;m=m+(c[xa+24>>2]|0)+l|0;l=l+(c[xa+28>>2]|0)+m|0;m=m+(c[xa+32>>2]|0)+l|0;l=l+(c[xa+36>>2]|0)+m|0;c[wa+92>>2]=m;c[wa+96>>2]=l;l=f+48|0;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));if((a[wa+43>>0]|0)!=2){g=c[wa+4>>2]|0;ab[c[(c[g>>2]|0)+60>>2]&127](g)}l=f;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));c[wa+12>>2]=k}}else if(i|0){g=i;Ra=za;return g|0}j=e+88|0;i=c[j>>2]|0;if((i|0)==0|oa){g=0;Ra=za;return g|0}f=ya;while(1){if(i|0)nf(i,c[f+24>>2]|0,c[f+4>>2]|0);f=c[f+16>>2]|0;if(!f){da=0;break}i=c[j>>2]|0}Ra=za;return da|0}function Xe(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+32|0;l=t+16|0;p=t;f=c[d+40>>2]|0;if(f|0){d=f;Ra=t;return d|0}a:do if(!(c[d+216>>2]|0)){k=d+17|0;g=d+13|0;h=d+60|0;i=d+176|0;j=d+180|0;b:while(1){switch(a[k>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:break a}if(a[g>>0]|0){g=7;break}f=c[h>>2]|0;f=Xa[c[(c[f>>2]|0)+28>>2]&255](f,4)|0;switch(f|0){case 0:{g=7;break b}case 5:break;default:{g=36;break b}}if(!(Wa[c[i>>2]&127](c[j>>2]|0)|0)){f=5;g=36;break}}if((g|0)==7){a[k>>0]=4;break}else if((g|0)==36){Ra=t;return f|0}}while(0);do if(!(a[d+7>>0]|0)){j=d+64|0;if(c[c[j>>2]>>2]|0?(a[d+5>>0]|0)!=4:0){i=c[d+60>>2]|0;i=Wa[c[(c[i>>2]|0)+48>>2]&127](i)|0;k=(i&512|0)==0;c:do if(k){g=p;c[g>>2]=-117058087;c[g+4>>2]=-681336544;g=c[d+44>>2]|0;a[p+8>>0]=g>>>24;a[p+9>>0]=g>>>16;a[p+10>>0]=g>>>8;a[p+11>>0]=g;g=d+72|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((f|0)==0&(g|0)==0){g=0;h=0}else{f=Sv(f|0,g|0,-1,-1)|0;h=L()|0;g=c[d+148>>2]|0;h=Wv(f|0,h|0,g|0,0)|0;h=Sv(h|0,L()|0,1,0)|0;g=Yv(h|0,L()|0,g|0,0)|0;h=L()|0}f=c[j>>2]|0;f=_a[c[(c[f>>2]|0)+8>>2]&127](f,l,8,g,h)|0;if(!f)if(!(Lu(l,32352,8)|0)){f=c[j>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,59953,1,g,h)|0;g=19}else g=20;else g=19;if((g|0)==19)switch(f|0){case 0:case 522:{g=20;break}default:{}}do if((g|0)==20){g=i&1024;if(((g|0)==0&(a[d+8>>0]|0)!=0?(m=c[j>>2]|0,n=a[d+10>>0]|0,n<<24>>24):0)?(o=Xa[c[(c[m>>2]|0)+20>>2]&255](m,n&255)|0,o|0):0){f=o;break}o=c[j>>2]|0;f=d+80|0;f=_a[c[(c[o>>2]|0)+12>>2]&127](o,p,12,c[f>>2]|0,c[f+4>>2]|0)|0;if(!f){f=g;break c}}while(0);d=f;Ra=t;return d|0}else f=i&1024;while(0);if(((f|0)==0?(q=c[j>>2]|0,r=a[d+10>>0]|0,r=(r<<24>>24==3?16:0)|r&255,r|0):0)?(s=Xa[c[(c[q>>2]|0)+20>>2]&255](q,r)|0,s|0):0){d=s;Ra=t;return d|0}q=d+72|0;r=c[q+4>>2]|0;s=d+80|0;c[s>>2]=c[q>>2];c[s+4>>2]=r;if((e|0)==0|k^1)break;c[d+44>>2]=0;f=of(d)|0;if(!f)break;Ra=t;return f|0}q=d+72|0;r=c[q+4>>2]|0;s=d+80|0;c[s>>2]=c[q>>2];c[s+4>>2]=r}while(0);g=c[d+212>>2]|0;f=c[g>>2]|0;if(f|0)do{s=f+28|0;b[s>>1]=b[s>>1]&-9;f=c[f+32>>2]|0}while((f|0)!=0);c[g+8>>2]=c[g+4>>2];a[d+16>>0]=4;d=0;Ra=t;return d|0}function Ye(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=Ra;Ra=Ra+16|0;l=t;s=e+60|0;h=c[s>>2]|0;if((c[h>>2]|0)==0?(g=c[e>>2]|0,g=_a[c[g+24>>2]&127](g,0,h,c[e+144>>2]&556897|30,0)|0,g|0):0){s=g;Ra=t;return s|0}k=e+36|0;h=c[k>>2]|0;j=e+24|0;g=c[j>>2]|0;do if(h>>>0<g>>>0){if((c[f+16>>2]|0)==0?(c[f+24>>2]|0)>>>0<=h>>>0:0)break;r=c[e+152>>2]|0;r=Yv(r|0,((r|0)<0)<<31>>31|0,g|0,0)|0;i=L()|0;h=l;c[h>>2]=r;c[h+4>>2]=i;h=c[s>>2]|0;i=c[h>>2]|0;if(i){Ya[c[i+40>>2]&127](h,5,l)|0;g=c[j>>2]|0}c[k>>2]=g}while(0);if(!f){s=0;Ra=t;return s|0}n=e+24|0;o=e+152|0;p=e+104|0;q=e+32|0;r=e+192|0;m=e+88|0;do{e=c[f+24>>2]|0;if(e>>>0<=(c[n>>2]|0)>>>0?(b[f+28>>1]&16)==0:0){g=c[o>>2]|0;h=Yv(g|0,((g|0)<0)<<31>>31|0,e+-1|0,0)|0;i=L()|0;j=(e|0)==1;if(j){k=c[f+20>>2]|0;k=((d[k+105>>0]|0)<<16|(d[k+104>>0]|0)<<24|(d[k+106>>0]|0)<<8|(d[k+107>>0]|0))+1|0;l=f+4|0;g=c[l>>2]|0;w=k>>>24&255;a[g+24>>0]=w;v=k>>>16&255;a[g+25>>0]=v;u=k>>>8&255;a[g+26>>0]=u;k=k&255;a[g+27>>0]=k;g=c[l>>2]|0;a[g+92>>0]=w;a[g+93>>0]=v;a[g+94>>0]=u;a[g+95>>0]=k;g=c[l>>2]|0;a[g+96>>0]=0;a[g+97>>0]=46;a[g+98>>0]=52;a[g+99>>0]=32;g=c[o>>2]|0}else l=f+4|0;k=c[l>>2]|0;w=c[s>>2]|0;g=_a[c[(c[w>>2]|0)+12>>2]&127](w,k,g,h,i)|0;if(j){j=p;h=k+24|0;i=j+16|0;do{a[j>>0]=a[h>>0]|0;j=j+1|0;h=h+1|0}while((j|0)<(i|0))}if(e>>>0>(c[q>>2]|0)>>>0)c[q>>2]=e;c[r>>2]=(c[r>>2]|0)+1;h=c[m>>2]|0;if(h)nf(h,e,c[l>>2]|0)}else g=0;f=c[f+16>>2]|0}while((g|0)==0&(f|0)!=0);Ra=t;return g|0}function Ze(a){a=a|0;var b=0,d=0,e=0;d=a+16|0;a=c[d>>2]|0;if(!a){c[d>>2]=0;return 0}do{b=a;a=c[a>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}}while((a|0)!=0);c[d>>2]=0;return 0}function _e(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=a+40|0;k=l;a:do if((e|0)==0&(f|0)==0|((c[k>>2]|0)!=(e|0)?1:(c[k+4>>2]|0)!=(f|0))){g=c[a+16>>2]|0;if(!g)g=0;else{j=c[a+4>>2]|0;k=((j|0)<0)<<31>>31;h=0;i=0;while(1){h=Sv(h|0,i|0,j|0,k|0)|0;i=L()|0;if((i|0)>(f|0)|(i|0)==(f|0)&h>>>0>e>>>0)break a;g=c[g>>2]|0;if(!g){g=0;break}}}}else g=c[a+48>>2]|0;while(0);k=a+4|0;i=c[k>>2]|0;j=Zv(e|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0;i=i-j|0;h=(i|0)>(d|0)?d:i;ew(b|0,g+4+j|0,h|0)|0;i=d-i|0;b:do if((i|0)>-1){j=b;do{g=c[g>>2]|0;if(!((i|0)!=0&(g|0)!=0))break b;j=j+h|0;b=c[k>>2]|0;h=(i|0)<(b|0)?i:b;ew(j|0,g+4|0,h|0)|0;i=i-b|0}while((i|0)>-1)}while(0);b=(g|0)==0;e=Sv(d|0,((d|0)<0)<<31>>31|0,e|0,f|0)|0;f=L()|0;c[l>>2]=b?0:e;c[l+4>>2]=b?0:f;c[a+48>>2]=g;return 0}function $e(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;I=Ra;Ra=Ra+32|0;G=I;H=a+8|0;g=c[H>>2]|0;if((g|0)>0?(F=Sv(d|0,((d|0)<0)<<31>>31|0,e|0,f|0)|0,D=L()|0,E=((g|0)<0)<<31>>31,(D|0)>(E|0)|(D|0)==(E|0)&F>>>0>g>>>0):0){m=c[a>>2]|0;t=a+4|0;u=c[t>>2]|0;D=H;C=c[D>>2]|0;D=c[D+4>>2]|0;v=a+16|0;g=c[v>>2]|0;w=a+20|0;x=c[w>>2]|0;y=a+24|0;F=y;E=c[F>>2]|0;F=c[F+4>>2]|0;z=a+32|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[G+16>>2]=c[z+16>>2];c[G+20>>2]=c[z+20>>2];A=a+56|0;B=c[A>>2]|0;n=a+60|0;o=c[n>>2]|0;p=a+64|0;q=c[p>>2]|0;r=a+68|0;s=c[r>>2]|0;h=a;i=h+72|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));h=_a[c[o+24>>2]&127](o,q,a,B&556927,0)|0;a:do if(!h){if(g|0){i=u;j=g;k=0;l=0;do{J=Sv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;K=L()|0;h=Tv(E|0,F|0,k|0,l|0)|0;L()|0;i=(K|0)>(F|0)|(K|0)==(F|0)&J>>>0>E>>>0?h:i;h=_a[c[(c[a>>2]|0)+12>>2]&127](a,j+4|0,i,k,l)|0;if(h|0){i=a;break a}k=Sv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;l=L()|0;j=c[j>>2]|0}while((j|0)!=0);do{h=g;g=c[g>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0)}K=_a[c[(c[a>>2]|0)+12>>2]&127](a,b,d,e,f)|0;Ra=I;return K|0}else i=a;while(0);j=c[i>>2]|0;if(j|0){Wa[c[j+4>>2]&127](a)|0;c[i>>2]=0}c[a>>2]=m;c[t>>2]=u;K=H;c[K>>2]=C;c[K+4>>2]=D;c[v>>2]=g;c[w>>2]=x;K=y;c[K>>2]=E;c[K+4>>2]=F;c[z>>2]=c[G>>2];c[z+4>>2]=c[G+4>>2];c[z+8>>2]=c[G+8>>2];c[z+12>>2]=c[G+12>>2];c[z+16>>2]=c[G+16>>2];c[z+20>>2]=c[G+20>>2];c[A>>2]=B;c[n>>2]=o;c[p>>2]=q;c[r>>2]=s;K=h;Ra=I;return K|0}b:do if((d|0)>0){m=a+24|0;n=a+32|0;o=a+4|0;p=a+16|0;i=m;l=d;h=c[i>>2]|0;i=c[i+4>>2]|0;while(1){g=c[n>>2]|0;j=c[o>>2]|0;i=Zv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0;k=j-i|0;k=(l|0)<(k|0)?l:k;if(!i){h=nb(j+4|0)|0;if(!h){g=3082;break}c[h>>2]=0;if(!g)c[p>>2]=h;else c[g>>2]=h;c[n>>2]=h;g=h}ew(g+4+i|0,b|0,k|0)|0;l=l-k|0;h=m;h=Sv(c[h>>2]|0,c[h+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;i=L()|0;K=m;c[K>>2]=h;c[K+4>>2]=i;if((l|0)<=0)break b;else b=b+k|0}Ra=I;return g|0}while(0);c[a+12>>2]=e+d;K=0;Ra=I;return K|0}function af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((b|0)==0&(d|0)==0))return 0;e=a+16|0;b=c[e>>2]|0;if(b|0)do{d=b;b=c[b>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{f=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0);c[e>>2]=0;c[a+12>>2]=0;c[a+32>>2]=0;f=a+24|0;c[f>>2]=0;c[f+4>>2]=0;c[a+48>>2]=0;f=a+40|0;c[f>>2]=0;c[f+4>>2]=0;return 0}function bf(a,b){a=a|0;b=b|0;return 0}function cf(a,b){a=a|0;b=b|0;var d=0;d=a+24|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function df(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!b){m=0;return m|0}e=e+-1|0;a:do if((c[b>>2]|0)>>>0>4e3){l=b;j=b;while(1){i=c[l+8>>2]|0;if(!i)break;h=(e>>>0)/(i>>>0)|0;e=e-(G(h,i)|0)|0;h=l+12+(h<<2)|0;b=c[h>>2]|0;if(!b){if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](512)|0;if(!b){m=17;break}}else{b=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){l=c[14978]|0;k=Tv(f|0,g|0,b|0,((b|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=l>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){m=17;break}f=Wa[c[29352>>2]&127](b)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(b+4|0,0,508)|0;c[b>>2]=i;c[h>>2]=b}if((c[b>>2]|0)>>>0>4e3){l=b;j=b}else break a}if((m|0)==17){c[h>>2]=0;m=7;return m|0}i=l+8|0;k=e+1|0;b=(e>>>0)%125|0;h=l+12|0;f=l+12+(b<<2)|0;e=c[f>>2]|0;if(!e){b=l+4|0;e=c[b>>2]|0;if(e>>>0<124)m=46}else{f=b;do{if((e|0)==(k|0)){e=0;m=47;break}e=f+1|0;f=e>>>0>124?0:e;e=c[l+12+(f<<2)>>2]|0}while((e|0)!=0);if((m|0)==47)return e|0;b=l+4|0;e=c[b>>2]|0;if(e>>>0<=61){f=l+12+(f<<2)|0;m=46}}if((m|0)==46){c[b>>2]=e+1;c[f>>2]=k;m=0;return m|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](500)|0;if(!e){m=7;return m|0}else g=e}else{b=Wa[c[29356>>2]&127](500)|0;if((c[14985]|0)>>>0<500)c[14985]=500;e=59064;f=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&f>>>0>0){m=c[14978]|0;g=Tv(f|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=m>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){m=7;return m|0}e=Wa[c[29352>>2]&127](b)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0){c[14987]=e;g=b}else g=b}ew(g|0,h|0,500)|0;gw(h|0,0,500)|0;c[i>>2]=(((c[j>>2]|0)+124|0)>>>0)/125|0;e=df(l,k)|0;f=0;do{b=c[g+(f<<2)>>2]|0;if(b)e=df(l,b)|0|e;f=f+1|0}while((f|0)!=125);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);m=e;return m|0}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);m=e;return m|0}}while(0);m=b+12+(e>>>3)|0;a[m>>0]=1<<(e&7)|(d[m>>0]|0);m=0;return m|0}function ef(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+32|0;A=C;x=C+12|0;z=c[d+68>>2]|0;do if(z|0){if((b[d+40>>1]|0)==0?(a[d+50>>0]|0)==0:0)break;r=d+100|0;s=((c[r>>2]|0)+33|0)>>>12;h=(z+33|0)>>>12;a:do if(h>>>0<s>>>0)h=0;else{t=x+4|0;u=d+24|0;v=d+32|0;w=x+8|0;q=f*383&8191;p=h;b:while(1){if((c[u>>2]|0)>(p|0)?(y=c[(c[v>>2]|0)+(p<<2)>>2]|0,c[t>>2]=y,(y|0)!=0):0)h=y;else{h=kf(d,p,t)|0;if(h|0)break;h=c[t>>2]|0}n=h+16384|0;c[x>>2]=n;if(!p){h=h+136|0;c[t>>2]=h;o=0}else o=(p<<12)+-34|0;c[w>>2]=o;m=h+-4|0;c[t>>2]=m;i=n+(q<<1)|0;if(b[i>>1]|0){k=8192;l=q;h=0;while(1){j=o+(e[i>>1]|0)|0;if(j>>>0<=z>>>0?j>>>0>=(c[r>>2]|0)>>>0:0)h=(c[m+(e[i>>1]<<2)>>2]|0)==(f|0)?j:h;if(!k){B=22;break b}l=l+1&8191;i=n+(l<<1)|0;if(!(b[i>>1]|0))break;else k=k+-1|0}if(h|0)break a}if((p|0)>(s|0))p=p+-1|0;else{h=0;break a}}if((B|0)==22){c[A>>2]=32306;c[A+4>>2]=61232;c[A+8>>2]=31517;Db(11,32001,A);h=11}B=h;Ra=C;return B|0}while(0);c[g>>2]=h;B=0;Ra=C;return B|0}while(0);c[g>>2]=0;B=0;Ra=C;return B|0}function ff(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+48|0;r=s;p=s+24|0;l=s+12|0;j=d+33|0;k=j>>>12;m=l+4|0;n=a+24|0;if(!((c[n>>2]|0)>(k|0)?(g=c[(c[a+32>>2]|0)+(k<<2)>>2]|0,c[m>>2]=g,(g|0)!=0):0))i=3;do if((i|0)==3){g=kf(a,k,m)|0;if(!g){g=c[m>>2]|0;break}else{f=g;Ra=s;return f|0}}while(0);q=g+16384|0;c[l>>2]=q;if(!k){k=g+136|0;c[m>>2]=k;i=0}else{i=(j&-4096)+-34|0;k=g}c[l+8>>2]=i;j=k+-4|0;c[m>>2]=j;o=d-i|0;if((o|0)==1)gw(k|0,0,g+32768-k|0)|0;m=j+(o<<2)|0;if(c[m>>2]|0){d=a+68|0;g=c[d>>2]|0;do if(g|0){g=g+33|0;i=g>>>12;k=p+4|0;if(!((c[n>>2]|0)>(i|0)?(h=c[(c[a+32>>2]|0)+(i<<2)>>2]|0,c[k>>2]=h,(h|0)!=0):0)){if(kf(a,i,k)|0)break;h=c[k>>2]|0}l=h+16384|0;c[p>>2]=l;if(!i){j=h+136|0;c[k>>2]=j;g=0}else{g=(g&-4096)+-34|0;j=h}c[p+8>>2]=g;c[k>>2]=j+-4;h=(c[d>>2]|0)-g|0;g=0;do{i=l+(g<<1)|0;if((h|0)<(e[i>>1]|0))b[i>>1]=0;g=g+1|0}while((g|0)!=8192);p=j+(h<<2)|0;gw(p|0,0,l-p|0)|0}while(0)}h=f*383&8191;g=q+(h<<1)|0;a:do if(b[g>>1]|0){i=o;while(1){if(!i)break;h=h+1&8191;g=q+(h<<1)|0;if(!(b[g>>1]|0))break a;else i=i+-1|0}c[r>>2]=32306;c[r+4>>2]=59401;c[r+8>>2]=31517;Db(11,32001,r);f=11;Ra=s;return f|0}while(0);c[m>>2]=f;b[g>>1]=o;f=0;Ra=s;return f|0}function gf(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+64|0;u=A+32|0;k=A;j=A+48|0;v=A+44|0;w=A+40|0;do if((h|0)>5)if((h|0)>100){d=15;Ra=A;return d|0}else{z=h+-9|0;z=G(z*39|0,z)|0;y=c[d>>2]|0;Xa[c[y+60>>2]&255](y,(h|0)>9?z:1)|0;break}while(0);a:do if(!g){z=d+50|0;if(!(a[z>>0]|0)){g=hf(d,f)|0;b:do if((g|0)==5){if(!(c[c[d+32>>2]>>2]|0)){d=-1;Ra=A;return d|0}h=d+43|0;if(a[h>>0]|0){d=-1;Ra=A;return d|0}i=d+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,2,1,6)|0;switch(g|0){case 0:break;case 5:{d=261;Ra=A;return d|0}default:break b}if(a[h>>0]|0){d=-1;Ra=A;return d|0}d=c[i>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,2,1,5)|0;d=-1;Ra=A;return d|0}while(0);if(g|0){d=g;Ra=A;return d|0}if(!(a[z>>0]|0)){j=d+32|0;m=(c[c[j>>2]>>2]|0)+96|0;l=d+52|0;h=d+68|0;if((c[m>>2]|0)!=(c[h>>2]|0)){g=0;break}k=d+43|0;i=a[k>>0]|0;if(!(i<<24>>24)){g=c[d+4>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,3,1,6)|0;i=a[k>>0]|0}else g=0;if(i<<24>>24!=2){f=c[d+4>>2]|0;ab[c[(c[f>>2]|0)+60>>2]&127](f)}switch(g|0){case 5:break a;case 0:break;default:{d=g;Ra=A;return d|0}}if(!(Lu(c[c[j>>2]>>2]|0,l,48)|0)){b[d+40>>1]=0;d=0;Ra=A;return d|0}if(a[k>>0]|0){d=-1;Ra=A;return d|0}d=c[d+4>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,3,1,5)|0;d=-1;Ra=A;return d|0}}x=d+43|0;y=d+4|0;if(!(a[x>>0]|0)){g=c[y>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,3,1,6)|0;switch(g|0){case 0:{t=17;break}case 5:{g=-1;t=35;break}default:t=34}}else t=17;c:do if((t|0)==17){b[d+40>>1]=0;g=c[y>>2]|0;g=_a[c[(c[g>>2]|0)+52>>2]&127](g,0,32768,0,j)|0;switch(g|0){case 8:{g=-1;t=35;break c}case 1288:break;default:{t=34;break c}}g=d+52|0;h=c[c[d+32>>2]>>2]|0;i=g+48|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));t=d+8|0;g=c[t>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,u)|0;if(!g){s=u;r=c[s+4>>2]|0;if((r|0)<0|(r|0)==0&(c[s>>2]|0)>>>0<32){c[f>>2]=1;g=((c[d+68>>2]|0)!=0)<<31>>31;t=34;break}g=c[t>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,k,32,0,0)|0;if(!g)if(!(Lu(d+84|0,k+16|0,8)|0)){g=d+66|0;n=(e[g>>1]|0)+24|0;o=pb(n,0)|0;if(o){m=o+24|0;p=d+76|0;q=c[p>>2]|0;r=d+80|0;s=c[r>>2]|0;i=Yv((e[g>>1]|0)+24|0,0,c[d+68>>2]|0,0)|0;i=Sv(i|0,L()|0,32,0)|0;j=L()|0;g=Sv(i|0,j|0,n|0,0)|0;h=L()|0;l=u;k=c[l+4>>2]|0;d:do if((h|0)>(k|0)|((h|0)==(k|0)?g>>>0>(c[l>>2]|0)>>>0:0))g=0;else{l=g;k=h;h=i;g=j;while(1){j=c[t>>2]|0;g=_a[c[(c[j>>2]|0)+8>>2]&127](j,o,n,h,g)|0;if(g|0)break;if(!(lf(d,v,w,m,o)|0)){g=0;break}if(c[w>>2]|0){g=-1;break d}g=Sv(l|0,k|0,n|0,0)|0;h=L()|0;j=u;i=c[j+4>>2]|0;if((h|0)>(i|0)|((h|0)==(i|0)?g>>>0>(c[j>>2]|0)>>>0:0)){g=0;break d}else{i=k;j=l;l=g;k=h;g=i;h=j}}}while(0);c[p>>2]=q;c[r>>2]=s;if(!(c[7324]|0)){ab[c[29344>>2]&127](o);t=34;break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);t=34;break}}else{g=7;t=35}}else{g=-1;t=35}else t=35}else t=35}while(0);if((t|0)==34)if(!g)g=0;else t=35;if((t|0)==35){i=d+24|0;if((c[i>>2]|0)>0){j=d+32|0;h=0;do{k=c[(c[j>>2]|0)+(h<<2)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[(c[j>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)<(c[i>>2]|0))}a[z>>0]=0;h=d+44|0;if(a[h>>0]|0){if(!(a[x>>0]|0)){z=c[y>>2]|0;Za[c[(c[z>>2]|0)+56>>2]&127](z,0,1,9)|0}a[h>>0]=0;c[d+104>>2]=0;a[d+47>>0]=0}h=d+40|0;i=b[h>>1]|0;if(i<<16>>16>-1){if(!(a[x>>0]|0)){d=c[y>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,(i<<16>>16)+3|0,1,5)|0}b[h>>1]=-1}c[f>>2]=1}d=g;Ra=A;return d|0}else{g=0;l=d+52|0;h=d+68|0;m=(c[c[d+32>>2]>>2]|0)+96|0}while(0);s=c[h>>2]|0;i=m+8|0;o=c[i>>2]|0;k=o>>>0>s>>>0;o=k?0:o;n=m+12|0;p=c[n>>2]|0;y=o>>>0>p>>>0|p>>>0>s>>>0;p=y?o:p;o=m+16|0;f=c[o>>2]|0;x=p>>>0>f>>>0|f>>>0>s>>>0;f=x?p:f;p=m+20|0;j=c[p>>2]|0;z=f>>>0>j>>>0|j>>>0>s>>>0;k=z?(x?(y?(k^1)&1:2):3):4;j=z?f:j;e:do if(!(a[d+46>>0]&2)){if((k|0)==0|j>>>0<s>>>0){q=d+43|0;r=d+4|0;f:do if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,4,1,10)|0;switch(g|0){case 0:{k=1;h=4;g=i;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,5,1,10)|0;switch(g|0){case 0:{k=2;h=5;g=n;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,6,1,10)|0;switch(g|0){case 0:{k=3;h=6;g=o;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,7,1,10)|0;switch(g|0){case 5:{t=69;break e}case 0:{k=4;h=7;g=p;break f}default:{}}Ra=A;return g|0}else{k=4;h=7;g=p}}else{k=3;h=6;g=o}}else{k=2;h=5;g=n}}else{k=1;h=4;g=i}while(0);c[g>>2]=s;if(!(a[q>>0]|0)){j=c[r>>2]|0;Za[c[(c[j>>2]|0)+56>>2]&127](j,h,1,9)|0;j=s}else j=s}}else t=69;while(0);if((t|0)==69)if(!k){d=(g|0)==5?-1:1288;Ra=A;return d|0}h=k+3|0;i=d+43|0;g=a[i>>0]|0;do if(!(g<<24>>24)){g=c[d+4>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,h,1,6)|0;if(!g){g=a[i>>0]|0;break}d=(g|0)==5?-1:g;Ra=A;return d|0}while(0);c[d+100>>2]=(c[m>>2]|0)+1;if(g<<24>>24!=2){f=c[d+4>>2]|0;ab[c[(c[f>>2]|0)+60>>2]&127](f)}if((c[m+4+(k<<2)>>2]|0)==(j|0)?(Lu(c[c[d+32>>2]>>2]|0,l,48)|0)==0:0){b[d+40>>1]=k;d=0;Ra=A;return d|0}if(a[i>>0]|0){d=-1;Ra=A;return d|0}d=c[d+4>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,h,1,5)|0;d=-1;Ra=A;return d|0}function hf(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0;O=Ra;Ra=Ra+96|0;K=O+64|0;G=O+56|0;p=O+40|0;B=O+32|0;m=O;C=O+84|0;D=O+80|0;j=O+76|0;N=e+24|0;if((c[N>>2]|0)>0?(M=c[c[e+32>>2]>>2]|0,c[j>>2]=M,(M|0)!=0):0){g=0;M=6}else{g=kf(e,0,j)|0;switch(g|0){case 0:break;case 1288:{a[e+50>>0]=1;a[e+43>>0]=2;c[f>>2]=1;break}default:{N=g;Ra=O;return N|0}}if(!(c[j>>2]|0)){h=1;M=7}else M=6}if((M|0)==6){h=jf(e,f)|0;if(!h)M=67;else M=7}do if((M|0)==7){if((a[e+50>>0]|0)==0?a[e+46>>0]&2:0){h=e+43|0;if(a[h>>0]|0){g=264;break}i=e+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,0,1,6)|0;if(g|0)break;if(a[h>>0]|0){g=264;break}g=c[i>>2]|0;Za[c[(c[g>>2]|0)+56>>2]&127](g,0,1,5)|0;g=264;break}I=e+43|0;if((a[I>>0]|0)==0?(i=c[e+4>>2]|0,i=Za[c[(c[i>>2]|0)+56>>2]&127](i,0,1,10)|0,i|0):0){g=i;break}H=e+44|0;a[H>>0]=1;if((c[N>>2]|0)>0?(F=c[c[e+32>>2]>>2]|0,c[j>>2]=F,(F|0)!=0):0)M=18;else{g=kf(e,0,j)|0;if(!g)M=18}if((M|0)==18){h=jf(e,f)|0;if(!h){h=0;g=0}else{F=d[e+45>>0]|0;E=F+1|0;F=2-F|0;if(!(a[I>>0]|0)){i=e+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,E,F,10)|0;if(!g)if((a[I>>0]|0)==0?(k=c[i>>2]|0,k=Za[c[(c[k>>2]|0)+56>>2]&127](k,4,4,10)|0,(k|0)!=0):0)if(!(a[I>>0]|0)){g=c[i>>2]|0;Za[c[(c[g>>2]|0)+56>>2]&127](g,E,F,9)|0;g=k}else g=k;else M=25}else M=25;if((M|0)==25){A=e+52|0;i=A;l=i+48|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(l|0));z=e+8|0;g=c[z>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,B)|0;a:do if(!g){y=B;x=c[y+4>>2]|0;b:do if((x|0)>0|(x|0)==0&(c[y>>2]|0)>>>0>32){g=c[z>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,m,32,0,0)|0;c:do if(!g){g=d[m+3>>0]|0;i=m+8|0;n=d[m+9>>0]<<16|d[i>>0]<<24;o=d[m+10>>0]<<8;l=n|o|d[m+11>>0];if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|g&254|0)==931071618?!((l+-512|0)>>>0>65024|(l+-1&l|0)!=0):0){x=g&1;a[e+65>>0]=x;c[e+36>>2]=l;g=m+12|0;c[e+112>>2]=d[m+13>>0]<<16|d[g>>0]<<24|d[m+14>>0]<<8|d[m+15>>0];w=m+16|0;j=c[w>>2]|0;w=c[w+4>>2]|0;y=e+84|0;c[y>>2]=j;c[y+4>>2]=w;y=e+76|0;if(!x){x=c[m>>2]|0;k=c[m+4>>2]|0;w=k+x|0;x=w+x+(c[i>>2]|0)|0;i=(c[g>>2]|0)+w+x|0;g=i+(c[m+20>>2]|0)|0;i=x+j+i|0}else{w=dw(c[m>>2]|0)|0;k=c[m+4>>2]|0;x=(dw(k|0)|0)+w|0;i=x+w+(dw(c[i>>2]|0)|0)|0;g=(dw(c[g>>2]|0)|0)+x+i|0;i=i+(dw(j|0)|0)+g|0;g=g+(dw(c[m+20>>2]|0)|0)|0}g=g+i|0;c[y>>2]=i;x=e+80|0;c[x>>2]=g;do if((i|0)==(d[m+25>>0]<<16|d[m+24>>0]<<24|d[m+26>>0]<<8|d[m+27>>0]|0)){if((g|0)!=(d[m+29>>0]<<16|d[m+28>>0]<<24|d[m+30>>0]<<8|d[m+31>>0]|0))break;if((d[m+5>>0]<<16|k<<24|d[m+6>>0]<<8|d[m+7>>0]|0)!=3007e3){c[p>>2]=31984;c[p+4>>2]=59539;c[p+8>>2]=31517;Db(14,32001,p);g=14;break a}r=l+24|0;s=((r|0)<0)<<31>>31;w=pb(r,s)|0;if(!w){g=7;break c}t=w+24|0;g=Sv(r|0,s|0,32,0)|0;m=L()|0;v=B;u=c[v+4>>2]|0;d:do if((m|0)>(u|0)|((m|0)==(u|0)?g>>>0>(c[v>>2]|0)>>>0:0)){g=0;i=0;j=0}else{u=e+68|0;v=e+72|0;p=(n>>>16|o)&65535;q=e+66|0;o=0;i=0;j=0;k=32;l=0;n=g;while(1){o=o+1|0;g=c[z>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,w,r,k,l)|0;if(g|0)break;if(!(lf(e,C,D,t,w)|0)){g=0;break}g=ff(e,o,c[C>>2]|0)|0;if(g|0)break;g=c[D>>2]|0;if(g){c[u>>2]=o;c[v>>2]=g;b[q>>1]=p;i=c[y>>2]|0;j=c[x>>2]|0}g=Sv(n|0,m|0,r|0,s|0)|0;k=L()|0;l=B;P=c[l+4>>2]|0;if((k|0)>(P|0)|((k|0)==(P|0)?g>>>0>(c[l>>2]|0)>>>0:0)){g=0;break d}else{l=m;P=n;n=g;m=k;k=P}}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](w);else{P=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w)}if(!g){g=j;break b}else break a}while(0);i=0;g=0;break b}i=0;g=0;break b}while(0);break a}else{i=0;g=0}while(0);c[e+76>>2]=i;c[e+80>>2]=g;j=e+32|0;k=c[c[j>>2]>>2]|0;a[e+64>>0]=1;c[A>>2]=3007e3;P=c[A+4>>2]|0;l=P+6014e3+(c[A+8>>2]|0)|0;P=P+3007e3+(c[A+12>>2]|0)+l|0;l=(c[A+16>>2]|0)+l+P|0;P=(c[A+20>>2]|0)+P+l|0;l=l+i+P|0;i=P+g+l|0;g=l+(c[A+32>>2]|0)+i|0;i=i+(c[A+36>>2]|0)+g|0;c[e+92>>2]=g;c[e+96>>2]=i;i=k+48|0;g=A;l=i+48|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(l|0));if((a[I>>0]|0)!=2){P=c[e+4>>2]|0;ab[c[(c[P>>2]|0)+60>>2]&127](P)}i=k;g=A;l=i+48|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(l|0));j=c[c[j>>2]>>2]|0;c[j+96>>2]=0;g=e+68|0;c[j+128>>2]=c[g>>2];c[j+100>>2]=0;i=j+104|0;c[i>>2]=-1;c[j+108>>2]=-1;c[j+112>>2]=-1;c[j+116>>2]=-1;j=c[g>>2]|0;if(j|0)c[i>>2]=j;if(!(c[e+72>>2]|0))g=0;else{P=c[e+108>>2]|0;c[G>>2]=c[g>>2];c[G+4>>2]=P;Db(283,32269,G);g=0}}while(0);if((a[I>>0]|0)==0?(J=e+4|0,P=c[J>>2]|0,Za[c[(c[P>>2]|0)+56>>2]&127](P,E,F,9)|0,(a[I>>0]|0)==0):0){P=c[J>>2]|0;Za[c[(c[P>>2]|0)+56>>2]&127](P,4,4,9)|0}}c[f>>2]=1}}a[H>>0]=0;if(!(a[I>>0]|0)){P=c[e+4>>2]|0;Za[c[(c[P>>2]|0)+56>>2]&127](P,0,1,9)|0}if(!h)M=67}while(0);if((M|0)==67)if((c[e+52>>2]|0)!=3007e3){c[K>>2]=31984;c[K+4>>2]=60517;c[K+8>>2]=31517;Db(14,32001,K);g=14}i=e+50|0;if(!(a[i>>0]|0)){P=g;Ra=O;return P|0}l=e+43|0;if(!g)g=0;else{if((c[N>>2]|0)>0){j=e+32|0;h=0;do{k=c[(c[j>>2]|0)+(h<<2)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{P=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[(c[j>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)<(c[N>>2]|0))}if((a[l>>0]|0)!=2){P=c[e+4>>2]|0;Xa[c[(c[P>>2]|0)+64>>2]&255](P,0)|0}a[i>>0]=0;g=(g|0)==522?-1:g}a[l>>0]=0;P=g;Ra=O;return P|0}function jf(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+96|0;k=l+48|0;g=l;h=c[c[b+32>>2]>>2]|0;f=k;i=h;j=f+48|0;do{a[f>>0]=a[i>>0]|0;f=f+1|0;i=i+1|0}while((f|0)<(j|0));if((a[b+43>>0]|0)!=2){j=c[b+4>>2]|0;ab[c[(c[j>>2]|0)+60>>2]&127](j)}f=g;i=h+48|0;j=f+48|0;do{a[f>>0]=a[i>>0]|0;f=f+1|0;i=i+1|0}while((f|0)<(j|0));if(Lu(k,g,48)|0){k=1;Ra=l;return k|0}if(!(a[k+12>>0]|0)){k=1;Ra=l;return k|0}g=c[k>>2]|0;f=(c[k+4>>2]|0)+g|0;g=g+f+(c[k+8>>2]|0)|0;f=(c[k+12>>2]|0)+f+g|0;g=g+f+(c[k+16>>2]|0)|0;f=(c[k+20>>2]|0)+f+g|0;g=g+f+(c[k+24>>2]|0)|0;f=(c[k+28>>2]|0)+f+g|0;g=g+f+(c[k+32>>2]|0)|0;if((g|0)!=(c[k+40>>2]|0)){k=1;Ra=l;return k|0}if(((c[k+36>>2]|0)+f+g|0)!=(c[k+44>>2]|0)){k=1;Ra=l;return k|0}f=b+52|0;if(!(Lu(f,k,48)|0)){k=0;Ra=l;return k|0}c[d>>2]=1;i=k;j=f+48|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));k=e[b+66>>1]|0;c[b+36>>2]=k<<16&65536|k&65024;k=0;Ra=l;return k|0}function kf(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;h=b+24|0;do if((c[h>>2]|0)<=(e|0)){i=e+1|0;j=b+32|0;k=c[j>>2]|0;if((mb()|0)==0?(g=sb(k,i<<2,0)|0,g|0):0){k=c[h>>2]|0;gw(g+(k<<2)|0,0,i-k<<2|0)|0;c[j>>2]=g;c[h>>2]=i;break}c[f>>2]=0;f=7;return f|0}while(0);if((a[b+43>>0]|0)!=2){h=c[b+4>>2]|0;g=b+32|0;h=_a[c[(c[h>>2]|0)+52>>2]&127](h,e,32768,d[b+44>>0]|0,(c[g>>2]|0)+(e<<2)|0)|0;i=b+46|0;if((h&255|0)==8){a[i>>0]=a[i>>0]|2;h=(h|0)==8?0:h}}else{if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](32768)|0;if(!g)g=0;else l=18}else{g=Wa[c[29356>>2]&127](32768)|0;if((c[14985]|0)>>>0<32768)c[14985]=32768;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){k=c[14978]|0;j=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=k>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=18}else l=18}else g=0}if((l|0)==18)gw(g|0,0,32768)|0;b=b+32|0;c[(c[b>>2]|0)+(e<<2)>>2]=g;h=(c[(c[b>>2]|0)+(e<<2)>>2]|0)==0?7:0;g=b}c[f>>2]=c[(c[g>>2]|0)+(e<<2)>>2];f=h;return f|0}function lf(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=b+76|0;if(Lu(b+84|0,h+8|0,8)|0){n=0;return n|0}l=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];if(!l){n=0;return n|0}i=c[n>>2]|0;m=b+80|0;j=c[m>>2]|0;if(!(a[b+65>>0]|0)){i=i+j+(c[h>>2]|0)|0;o=(c[h+4>>2]|0)+j+i|0;c[n>>2]=i;c[m>>2]=o;k=g+(c[b+36>>2]|0)|0;j=g;b=o;do{i=i+b+(c[j>>2]|0)|0;b=(c[j+4>>2]|0)+b+i|0;j=j+8|0}while(j>>>0<k>>>0)}else{i=i+j+(dw(c[h>>2]|0)|0)|0;o=(dw(c[h+4>>2]|0)|0)+j+i|0;c[n>>2]=i;c[m>>2]=o;k=g+(c[b+36>>2]|0)|0;j=g;b=o;do{i=i+b+(dw(c[j>>2]|0)|0)|0;b=(dw(c[j+4>>2]|0)|0)+b+i|0;j=j+8|0}while(j>>>0<k>>>0)}c[n>>2]=i;c[m>>2]=b;if((i|0)!=(d[h+17>>0]<<16|d[h+16>>0]<<24|d[h+18>>0]<<8|d[h+19>>0]|0)){o=0;return o|0}if((b|0)!=(d[h+21>>0]<<16|d[h+20>>0]<<24|d[h+22>>0]<<8|d[h+23>>0]|0)){o=0;return o|0}c[e>>2]=l;c[f>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];o=1;return o|0}function mf(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;j=b+76|0;a[h>>0]=e>>>24;a[h+1>>0]=e>>>16;a[h+2>>0]=e>>>8;a[h+3>>0]=e;a[h+4>>0]=f>>>24;a[h+5>>0]=f>>>16;a[h+6>>0]=f>>>8;a[h+7>>0]=f;e=h+8|0;if(c[b+104>>2]|0){f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));return}i=b+84|0;k=i;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;i=i+4|0;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;f=e;a[f>>0]=k;a[f+1>>0]=k>>8;a[f+2>>0]=k>>16;a[f+3>>0]=k>>24;e=e+4|0;a[e>>0]=i;a[e+1>>0]=i>>8;a[e+2>>0]=i>>16;a[e+3>>0]=i>>24;e=c[j>>2]|0;i=b+80|0;f=c[i>>2]|0;if(!(a[b+65>>0]|0)){k=e+f+(c[h>>2]|0)|0;e=(c[h+4>>2]|0)+f+k|0;c[j>>2]=k;c[i>>2]=e;b=g+(c[b+36>>2]|0)|0;f=k;do{f=f+e+(c[g>>2]|0)|0;e=(c[g+4>>2]|0)+e+f|0;g=g+8|0}while(g>>>0<b>>>0)}else{k=e+f+(dw(c[h>>2]|0)|0)|0;e=(dw(c[h+4>>2]|0)|0)+f+k|0;c[j>>2]=k;c[i>>2]=e;b=g+(c[b+36>>2]|0)|0;f=k;do{f=f+e+(dw(c[g>>2]|0)|0)|0;e=(dw(c[g+4>>2]|0)|0)+e+f|0;g=g+8|0}while(g>>>0<b>>>0)}c[j>>2]=f;c[i>>2]=e;a[h+16>>0]=f>>>24;a[h+17>>0]=f>>>16;a[h+18>>0]=f>>>8;a[h+19>>0]=f;k=c[i>>2]|0;a[h+20>>0]=k>>>24;a[h+21>>0]=k>>>16;a[h+22>>0]=k>>>8;a[h+23>>0]=k;return}function nf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;do{e=a+28|0;switch(c[e>>2]|0){case 6:case 0:case 5:{if((c[a+16>>2]|0)>>>0>b>>>0?(f=_b(a,b,d,1)|0,f|0):0)c[e>>2]=f;break}default:{}}a=c[a+44>>2]|0}while((a|0)!=0);return}function of(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;k=c[b+208>>2]|0;j=b+152|0;m=c[j>>2]|0;l=b+148|0;i=c[l>>2]|0;m=m>>>0>i>>>0?i:m;h=c[b+96>>2]|0;if((h|0)>0){e=c[b+92>>2]|0;f=b+72|0;d=0;do{g=e+(d*48|0)+8|0;n=g;if((c[n>>2]|0)==0&(c[n+4>>2]|0)==0){p=f;o=c[p+4>>2]|0;n=g;c[n>>2]=c[p>>2];c[n+4>>2]=o}d=d+1|0}while((d|0)<(h|0));g=f}else g=b+72|0;e=g;d=c[e>>2]|0;e=c[e+4>>2]|0;if((d|0)==0&(e|0)==0){d=0;e=0}else{d=Sv(d|0,e|0,-1,-1)|0;d=Wv(d|0,L()|0,i|0,0)|0;d=Sv(d|0,L()|0,1,0)|0;d=Yv(d|0,L()|0,i|0,0)|0;e=L()|0}p=g;c[p>>2]=d;c[p+4>>2]=e;p=b+80|0;c[p>>2]=d;c[p+4>>2]=e;if(((a[b+7>>0]|0)==0?(a[b+5>>0]|0)!=4:0)?(p=c[b+60>>2]|0,((Wa[c[(c[p>>2]|0)+48>>2]&127](p)|0)&512|0)==0):0){d=k;e=d+12|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(e|0))}else{p=k;o=p;a[o>>0]=-117058087;a[o+1>>0]=-117058087>>8;a[o+2>>0]=-117058087>>16;a[o+3>>0]=-117058087>>24;p=p+4|0;a[p>>0]=-681336544;a[p+1>>0]=-681336544>>8;a[p+2>>0]=-681336544>>16;a[p+3>>0]=-681336544>>24;p=k+8|0;a[p>>0]=-1;a[p+1>>0]=-1>>8;a[p+2>>0]=-1>>16;a[p+3>>0]=-1>>24}f=b+48|0;Fb(4,f);f=c[f>>2]|0;a[k+12>>0]=f>>>24;a[k+13>>0]=f>>>16;a[k+14>>0]=f>>>8;a[k+15>>0]=f;f=c[b+28>>2]|0;a[k+16>>0]=f>>>24;a[k+17>>0]=f>>>16;a[k+18>>0]=f>>>8;a[k+19>>0]=f;f=c[l>>2]|0;a[k+20>>0]=f>>>24;a[k+21>>0]=f>>>16;a[k+22>>0]=f>>>8;a[k+23>>0]=f;f=c[j>>2]|0;a[k+24>>0]=f>>>24;a[k+25>>0]=f>>>16;a[k+26>>0]=f>>>8;a[k+27>>0]=f;gw(k+28|0,0,m+-28|0)|0;f=b+64|0;e=0;while(1){if(e>>>0>=(c[l>>2]|0)>>>0){d=0;e=17;break}n=c[f>>2]|0;d=g;d=_a[c[(c[n>>2]|0)+12>>2]&127](n,k,m,c[d>>2]|0,c[d+4>>2]|0)|0;n=g;n=Sv(c[n>>2]|0,c[n+4>>2]|0,m|0,0)|0;o=L()|0;p=g;c[p>>2]=n;c[p+4>>2]=o;if(!d)e=e+m|0;else{e=17;break}}if((e|0)==17)return d|0;return 0}function pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[d>>2]=0;return c[a+40>>2]|0}function qf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+32|0;l=q+16|0;h=q;if(!e){c[h>>2]=32306;c[h+4>>2]=56058;c[h+8>>2]=31517;Db(11,32001,h);d=11;Ra=q;return d|0}p=d+212|0;h=c[p>>2]|0;h=Ya[c[29436>>2]&127](c[h+44>>2]|0,e,a[h+33>>0]&3)|0;a:do if(!h){j=c[p>>2]|0;if((a[j+33>>0]|0)!=2){k=j+44|0;n=Wa[c[29432>>2]&127](c[k>>2]|0)|0;b:do if((n|0)>(c[j+20>>2]|0)){i=j+8|0;h=c[i>>2]|0;c:do if(!h)m=12;else{while(1){if((b[h+30>>1]|0)==0?(b[h+28>>1]&8)==0:0)break;h=c[h+36>>2]|0;if(!h){m=12;break c}}c[i>>2]=h}while(0);d:do if((m|0)==12){c[i>>2]=0;h=c[j+4>>2]|0;if(!h)break b;while(1){if(!(b[h+30>>1]|0))break d;h=c[h+36>>2]|0;if(!h)break b}}while(0);h=Xa[c[j+36>>2]&255](c[j+40>>2]|0,h)|0;switch(h|0){case 0:case 5:break;default:break a}}while(0);h=Ya[c[29436>>2]&127](c[k>>2]|0,e,2)|0;if(h)m=18;else h=7}else h=7}else m=18;while(0);do if((m|0)==18){i=c[p>>2]|0;j=c[h+4>>2]|0;if(!(c[j>>2]|0))n=sf(i,e,h)|0;else{n=i+12|0;c[n>>2]=(c[n>>2]|0)+1;n=j+30|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;n=j}c[f>>2]=n;h=g&1;i=n+20|0;j=(h|0)!=0;if(!(j|(c[i>>2]|0)==0)){d=d+184|0;c[d>>2]=(c[d>>2]|0)+1;d=0;Ra=q;return d|0}do if((e|0)>=0?(o=d+152|0,((1073741824/(c[o>>2]|0)|0)+1|0)!=(e|0)):0){c[i>>2]=d;if(c[c[d+60>>2]>>2]|0?((h|0)==0?(c[d+24>>2]|0)>>>0>=e>>>0:0):0){h=d+188|0;c[h>>2]=(c[h>>2]|0)+1;h=rf(n)|0;if(!h)h=0;else break;Ra=q;return h|0}if((c[d+156>>2]|0)>>>0<e>>>0)h=13;else{if(j){if((c[d+28>>2]|0)>>>0>=e>>>0)df(c[d+56>>2]|0,e)|0;g=d+96|0;h=c[g>>2]|0;if((h|0)>0){k=d+92|0;j=0;do{i=c[k>>2]|0;if((c[i+(j*48|0)+20>>2]|0)>>>0>=e>>>0){df(c[i+(j*48|0)+16>>2]|0,e)|0;h=c[g>>2]|0}j=j+1|0}while((j|0)<(h|0))}}gw(c[n+4>>2]|0,0,c[o>>2]|0)|0;d=0;Ra=q;return d|0}}else m=38;while(0);if((m|0)==38){c[l>>2]=32306;c[l+4>>2]=56090;c[l+8>>2]=31517;Db(11,32001,l);if(!n){h=11;break}else h=11}m=c[n+12>>2]|0;do if(b[n+28>>1]&2){i=m+8|0;j=n+36|0;k=c[j>>2]|0;if((c[i>>2]|0)==(n|0))c[i>>2]=k;g=c[n+32>>2]|0;l=(g|0)==0;if(l){c[m+4>>2]=k;i=k}else{c[g+36>>2]=k;i=c[j>>2]|0}if(i|0){c[i+32>>2]=g;break}c[m>>2]=g;if(l)a[m+33>>0]=2}while(0);o=m+12|0;c[o>>2]=(c[o>>2]|0)+-1;cb[c[29440>>2]&255](c[m+44>>2]|0,c[n>>2]|0,1)}while(0);if(!(c[(c[p>>2]|0)+12>>2]|0)){switch(a[d+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[d+4>>0]|0))uf(d,0,0)|0;break}default:tf(d)|0}vf(d)}c[f>>2]=0;d=h;Ra=q;return d|0}function rf(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=Ra;Ra=Ra+16|0;f=k;i=c[b+20>>2]|0;c[f>>2]=0;g=i+216|0;d=c[g>>2]|0;h=b+24|0;if(d){d=ef(d,c[h>>2]|0,f)|0;if(d|0){b=d;Ra=k;return b|0}d=c[f>>2]|0;if(d){l=c[g>>2]|0;f=c[i+152>>2]|0;m=c[b+4>>2]|0;n=c[l+8>>2]|0;l=e[l+66>>1]|0;l=l<<16&65536|l&65024;g=Yv(l|24|0,0,d+-1|0,0)|0;g=Sv(g|0,L()|0,56,0)|0;d=L()|0;d=_a[c[(c[n>>2]|0)+8>>2]&127](n,m,(l|0)<(f|0)?l:f,g,d)|0}else j=5}else j=5;if((j|0)==5){m=c[i+152>>2]|0;n=Yv((c[h>>2]|0)+-1|0,0,m|0,((m|0)<0)<<31>>31|0)|0;d=L()|0;l=c[i+60>>2]|0;d=_a[c[(c[l>>2]|0)+8>>2]&127](l,c[b+4>>2]|0,m,n,d)|0;d=(d|0)==522?0:d}if((c[h>>2]|0)!=1){n=d;Ra=k;return n|0}if(!d){g=i+104|0;d=(c[b+4>>2]|0)+24|0;f=g+16|0;do{a[g>>0]=a[d>>0]|0;g=g+1|0;d=d+1|0}while((g|0)<(f|0));n=0;Ra=k;return n|0}else{n=i+104|0;c[n>>2]=-1;c[n+4>>2]=-1;c[n+8>>2]=-1;c[n+12>>2]=-1;n=d;Ra=k;return n|0}return 0}function sf(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=f+4|0;h=c[g>>2]|0;do{i=h+16|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[h>>2]=f;c[h+4>>2]=c[f>>2];i=h+40|0;c[h+8>>2]=i;j=i;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;i=i+4|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;c[h+12>>2]=d;c[h+24>>2]=e;b[h+28>>1]=1;h=c[g>>2]|0}while(!(c[h>>2]|0));j=d+12|0;c[j>>2]=(c[j>>2]|0)+1;j=h+30|0;b[j>>1]=(b[j>>1]|0)+1<<16>>16;return h|0}function tf(b){b=b|0;var e=0,f=0,g=0;g=b+16|0;f=a[g>>0]|0;if(f<<24>>24==6){g=c[b+40>>2]|0;return g|0}if((f&255)<2){g=0;return g|0}do if(!(c[b+216>>2]|0)){if(!(f<<24>>24==2?1:(c[c[b+64>>2]>>2]|0)==0)){e=xf(b,0)|0;break}e=uf(b,0,0)|0;if((f&255)>2&(a[b+15>>0]|0)==0){c[b+40>>2]=4;a[g>>0]=6;c[b+204>>2]=75;g=e;return g|0}}else{e=wf(b,2,-1)|0;f=uf(b,d[b+19>>0]|0,0)|0;e=(e|0)==0?f:e}while(0);switch((e&255)<<24>>24){case 10:case 13:break;default:{g=e;return g|0}}c[b+40>>2]=e;a[g>>0]=6;c[b+204>>2]=(e|0)==0?74:75;g=e;return g|0}function uf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+16|0;w=B;A=e+16|0;if((d[A>>0]|0)<2?(d[e+17>>0]|0)<2:0){A=0;Ra=B;return A|0}l=e+96|0;if((c[l>>2]|0)>0){k=e+92|0;i=0;do{yf(c[(c[k>>2]|0)+(i*48|0)+16>>2]|0);i=i+1|0}while((i|0)<(c[l>>2]|0))}z=e+4|0;k=c[e+68>>2]|0;i=c[k>>2]|0;if(!(a[z>>0]|0)){if(i|0)y=9}else if((i|0)==29896){i=29896;y=9}if((y|0)==9){Wa[c[i+4>>2]&127](k)|0;c[k>>2]=0}i=e+92|0;k=c[i>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[i>>2]=0;c[l>>2]=0;c[e+52>>2]=0;n=e+64|0;o=c[n>>2]|0;m=c[o>>2]|0;a:do if(!m)i=0;else{if((m|0)==29896){l=o+16|0;i=c[l>>2]|0;if(i|0)do{k=i;i=c[i>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((i|0)!=0);c[l>>2]=0;c[o>>2]=0;i=0;break}i=a[e+5>>0]|0;switch(i<<24>>24){case 3:{k=e+72|0;s=k;if(!((c[s>>2]|0)==0&(c[s+4>>2]|0)==0)){i=Ya[c[m+16>>2]&127](o,0,0)|0;if(!i)if((a[e+8>>0]|0)!=0?(p=c[n>>2]|0,q=a[e+10>>0]|0,q<<24>>24!=0):0)i=Xa[c[(c[p>>2]|0)+20>>2]&255](p,q&255)|0;else i=0}else i=0;s=k;c[s>>2]=0;c[s+4>>2]=0;break a}case 1:break;default:if(i<<24>>24==5|(a[z>>0]|0)==0){s=(a[e+12>>0]|0)==0;Wa[c[m+4>>2]&127](o)|0;c[o>>2]=0;if(!s){i=0;break a}i=c[e>>2]|0;i=Ya[c[i+28>>2]&127](i,c[e+172>>2]|0,d[e+9>>0]|0)|0;break a}}if(!f)i=(a[e+12>>0]|0)!=0&1;else i=1;f=e+72|0;s=f;if(!((c[s>>2]|0)==0&(c[s+4>>2]|0)==0)){l=e+160|0;k=c[l>>2]|0;l=c[l+4>>2]|0;if((i|0)!=0|(k|0)==0&(l|0)==0)i=Ya[c[m+16>>2]&127](o,0,0)|0;else i=_a[c[m+12>>2]&127](o,59008,28,0,0)|0;if(!i){if(!(a[e+7>>0]|0)){i=c[n>>2]|0;i=Xa[c[(c[i>>2]|0)+20>>2]&255](i,(a[e+10>>0]|16)&255)|0}else i=0;if(((l|0)>0|(l|0)==0&k>>>0>0)&(i|0)==0){i=c[n>>2]|0;i=Xa[c[(c[i>>2]|0)+24>>2]&255](i,w)|0;s=w;r=c[s+4>>2]|0;if((i|0)==0&((r|0)>(l|0)|((r|0)==(l|0)?(c[s>>2]|0)>>>0>k>>>0:0))){i=c[n>>2]|0;i=Ya[c[(c[i>>2]|0)+16>>2]&127](i,k,l)|0}}}}else i=0;s=f;c[s>>2]=0;c[s+4>>2]=0}while(0);s=e+56|0;yf(c[s>>2]|0);c[s>>2]=0;c[e+44>>2]=0;s=(i|0)==0;if(s){do if((a[e+15>>0]|0)==0?(a[e+12>>0]|0)!=0:0){if(g|0?c[c[e+60>>2]>>2]|0:0){l=c[e+212>>2]|0;k=c[l+16>>2]|0;if((k|0)<=-1){q=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;r=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(q|0,r|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}l=c[l>>2]|0;if(!l){l=0;f=0}else{f=0;do{f=f+1|0;l=c[l+32>>2]|0}while((l|0)!=0);l=Yv(f|0,0,100,0)|0;f=L()|0}if(k|0?(r=Wv(l|0,f|0,k|0,((k|0)<0)<<31>>31|0)|0,L()|0,(r|0)>=25):0){y=60;break}}l=c[e+212>>2]|0;k=c[l>>2]|0;if(k|0)do{r=k+28|0;b[r>>1]=b[r>>1]&-13;k=c[k+32>>2]|0}while((k|0)!=0);c[l+8>>2]=c[l+4>>2]}else y=60;while(0);if((y|0)==60){r=e+212|0;l=c[r>>2]|0;k=c[l>>2]|0;if(k){do{q=c[k+12>>2]|0;f=q+8|0;m=k+36|0;n=c[m>>2]|0;if((c[f>>2]|0)==(k|0))c[f>>2]=n;o=c[k+32>>2]|0;p=(o|0)==0;if(p){c[q+4>>2]=n;f=n}else{c[o+36>>2]=n;f=c[m>>2]|0}if(!f){c[q>>2]=o;if(p)a[q+33>>0]=2}else c[f+32>>2]=o;p=k+28|0;b[p>>1]=b[p>>1]&-16|1;if((b[k+30>>1]|0)==0?a[q+32>>0]|0:0)cb[c[29440>>2]&255](c[q+44>>2]|0,c[k>>2]|0,0);k=c[l>>2]|0}while((k|0)!=0);l=c[r>>2]|0}}k=c[e+24>>2]|0;r=l+44|0;if(c[r>>2]|0){f=c[l>>2]|0;if(f|0)do{p=f;f=c[f+32>>2]|0;if((c[p+24>>2]|0)>>>0>k>>>0){q=c[p+12>>2]|0;n=q+8|0;o=p+36|0;m=c[o>>2]|0;if((c[n>>2]|0)==(p|0))c[n>>2]=m;n=(f|0)==0;if(n)c[q+4>>2]=m;else{c[f+36>>2]=m;m=c[o>>2]|0}if(!m){c[q>>2]=f;if(n)a[q+33>>0]=2}else c[m+32>>2]=f;o=p+28|0;b[o>>1]=b[o>>1]&-16|1;if((b[p+30>>1]|0)==0?a[q+32>>0]|0:0)cb[c[29440>>2]&255](c[q+44>>2]|0,c[p>>2]|0,0)}}while((f|0)!=0);if(!k)if((c[l+12>>2]|0)!=0?(t=Ya[c[29436>>2]&127](c[r>>2]|0,1,0)|0,(t|0)!=0):0){gw(c[t>>2]|0,0,c[l+24>>2]|0)|0;k=1}else k=0;bb[c[29448>>2]&127](c[r>>2]|0,k+1|0)}}q=e+216|0;k=c[q>>2]|0;if(!k)if((g|0)!=0&s){n=e+32|0;o=c[e+24>>2]|0;if(((c[n>>2]|0)>>>0>o>>>0?(x=e+60|0,u=c[x>>2]|0,v=c[u>>2]|0,(v|0)!=0):0)?((a[A>>0]|0)+-1&255)>2:0){p=c[e+152>>2]|0;i=Xa[c[v+24>>2]&255](u,w)|0;l=((p|0)<0)<<31>>31;f=Yv(p|0,l|0,o|0,0)|0;m=L()|0;do if(!i){k=w;i=c[k>>2]|0;k=c[k+4>>2]|0;if((i|0)==(f|0)&(k|0)==(m|0))h=0;else{if(!((k|0)>(m|0)|(k|0)==(m|0)&i>>>0>f>>>0)){w=Sv(i|0,k|0,p|0,l|0)|0;v=L()|0;if(!((v|0)>(m|0)|(v|0)==(m|0)&w>>>0>f>>>0)){w=c[e+208>>2]|0;gw(w|0,0,p|0)|0;x=c[x>>2]|0;y=Tv(f|0,m|0,p|0,l|0)|0;h=L()|0;h=_a[c[(c[x>>2]|0)+12>>2]&127](x,w,p,y,h)|0;y=117}}else{h=c[x>>2]|0;h=Ya[c[(c[h>>2]|0)+16>>2]&127](h,f,m)|0;y=117}if((y|0)==117?h|0:0)break;c[n>>2]=o;h=0}}else h=i;while(0)}else h=0}else h=i;else{h=k+44|0;if(!(a[h>>0]|0))h=i;else{if(!(a[k+43>>0]|0)){y=c[k+4>>2]|0;Za[c[(c[y>>2]|0)+56>>2]&127](y,0,1,9)|0}a[h>>0]=0;c[k+104>>2]=0;a[k+47>>0]=0;h=i}}do if((g|0)!=0&(h|0)==0){h=c[e+60>>2]|0;i=c[h>>2]|0;if(i|0?(j=Ya[c[i+40>>2]&127](h,22,0)|0,(j|0)!=12):0)break;j=0}else j=h;while(0);b:do if(!(a[z>>0]|0)){h=c[q>>2]|0;do if(h|0){i=h+43|0;if(!(a[i>>0]|0)){h=0;break b}a[i>>0]=0;z=c[h+4>>2]|0;if(!(Za[c[(c[z>>2]|0)+56>>2]&127](z,(b[h+40>>1]|0)+3|0,1,6)|0))if(!(a[i>>0]|0))break;else{h=0;break b}else{a[i>>0]=1;h=0;break b}}while(0);h=c[e+60>>2]|0;i=c[h>>2]|0;if(i){if(!(a[e+13>>0]|0))h=Xa[c[i+32>>2]&255](h,1)|0;else h=0;i=e+17|0;if((a[i>>0]|0)!=5)a[i>>0]=1}else h=0;a[e+18>>0]=0}else h=0;while(0);a[A>>0]=1;a[e+19>>0]=0;A=(j|0)==0?h:j;Ra=B;return A|0}function vf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=d+56|0;yf(c[g>>2]|0);c[g>>2]=0;g=d+96|0;if((c[g>>2]|0)>0){f=d+92|0;e=0;do{yf(c[(c[f>>2]|0)+(e*48|0)+16>>2]|0);e=e+1|0}while((e|0)<(c[g>>2]|0))}h=d+4|0;f=c[d+68>>2]|0;e=c[f>>2]|0;if(!(a[h>>0]|0)){if(e|0)k=7}else if((e|0)==29896){e=29896;k=7}if((k|0)==7){Wa[c[e+4>>2]&127](f)|0;c[f>>2]=0}e=d+92|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[g>>2]=0;c[d+52>>2]=0;g=c[d+216>>2]|0;if(!g){if(!(a[h>>0]|0)){e=d+60|0;f=c[e>>2]|0;g=c[f>>2]|0;if(!(((g|0)!=0?((Wa[c[g+48>>2]&127](f)|0)&2048|0)!=0:0)?(a[d+5>>0]&5)==1:0))k=25;if((k|0)==25?(i=c[d+64>>2]|0,j=c[i>>2]|0,j|0):0){Wa[c[j+4>>2]&127](i)|0;c[i>>2]=0}e=c[e>>2]|0;f=c[e>>2]|0;if(f|0){if(!(a[d+13>>0]|0))f=Xa[c[f+32>>2]&255](e,0)|0;else f=0;e=d+17|0;if((a[e>>0]|0)!=5)a[e>>0]=0;if(f|0?(a[d+16>>0]|0)==6:0)a[e>>0]=5}a[d+18>>0]=0;k=36}}else{e=g+44|0;if(a[e>>0]|0){if(!(a[g+43>>0]|0)){l=c[g+4>>2]|0;Za[c[(c[l>>2]|0)+56>>2]&127](l,0,1,9)|0}a[e>>0]=0;c[g+104>>2]=0;a[g+47>>0]=0}e=g+40|0;f=b[e>>1]|0;if(f<<16>>16>-1){if(!(a[g+43>>0]|0)){l=c[g+4>>2]|0;Za[c[(c[l>>2]|0)+56>>2]&127](l,(f<<16>>16)+3|0,1,5)|0}b[e>>1]=-1;k=36}else k=36}if((k|0)==36)a[d+16>>0]=0;f=d+40|0;if(!(c[f>>2]|0)){l=d+72|0;d=d+19|0;a[d>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;return}if(!(a[d+12>>0]|0)){Ff(d);a[d+18>>0]=0;e=0}else e=(c[c[d+64>>2]>>2]|0)==0&1;a[d+16>>0]=e;c[f>>2]=0;c[d+204>>2]=74;l=d+72|0;d=d+19|0;a[d>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;return}function wf(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;x=y+8|0;w=y;h=c[d+40>>2]|0;if(h|0){d=h;Ra=y;return d|0}k=d+96|0;h=c[k>>2]|0;if((h|0)<=(g|0)){d=0;Ra=y;return d|0}j=(f|0)==1;g=((j^1)&1)+g|0;if((g|0)<(h|0)){f=d+92|0;h=g;do{yf(c[(c[f>>2]|0)+(h*48|0)+16>>2]|0);h=h+1|0}while((h|0)<(c[k>>2]|0))}c[k>>2]=g;if(j){if(g|0){d=0;Ra=y;return d|0}g=c[d+68>>2]|0;h=c[g>>2]|0;if(!h){d=0;Ra=y;return d|0}if((h|0)==29896){i=g+16|0;h=c[i>>2]|0;if(h|0)do{f=h;h=c[h>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}}while((h|0)!=0);c[i>>2]=0;c[g+12>>2]=0;c[g+32>>2]=0;x=g+24|0;c[x>>2]=0;c[x+4>>2]=0;c[g+48>>2]=0;x=g+40|0;c[x>>2]=0;c[x+4>>2]=0}c[d+52>>2]=0;d=0;Ra=y;return d|0}s=d+216|0;if((c[s>>2]|0)==0?(c[c[d+64>>2]>>2]|0)==0:0){d=0;Ra=y;return d|0}if((g|0)!=0?(l=g+-1|0,u=c[d+92>>2]|0,m=u+(l*48|0)|0,l=u+(l*48|0)+20|0,(m|0)!=0):0){j=c[l>>2]|0;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](512)|0;if(!h){d=7;Ra=y;return d|0}}else{h=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){u=c[14978]|0;r=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=u>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){d=7;Ra=y;return d|0}f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(h+4|0,0,508)|0;c[h>>2]=j;u=h;h=l;g=d+28|0;r=m;q=1}else{g=d+28|0;u=0;h=g;r=0;q=0}f=d+24|0;c[f>>2]=c[h>>2];a[d+18>>0]=a[d+12>>0]|0;a:do if(q){l=d+72|0;f=l;i=c[f>>2]|0;f=c[f+4>>2]|0;if(!(c[s>>2]|0)){j=r+8|0;g=c[j>>2]|0;j=c[j+4>>2]|0;h=(g|0)==0&(j|0)==0;g=h?i:g;j=h?f:j;h=r;k=c[h>>2]|0;h=c[h+4>>2]|0;p=l;c[p>>2]=k;c[p+4>>2]=h;if((h|0)<(j|0)|(h|0)==(j|0)&k>>>0<g>>>0)while(1){h=zf(d,l,u,1,1)|0;if(h|0){p=i;o=f;break a}h=l;k=c[h>>2]|0;h=c[h+4>>2]|0;if(!((h|0)<(j|0)|(h|0)==(j|0)&k>>>0<g>>>0)){p=i;t=71;break}}else{p=i;t=71}}else{h=l;t=70}}else{o=c[s>>2]|0;if(!o){h=d+72|0;f=h;i=c[f>>2]|0;f=c[f+4>>2]|0;t=70;break}c[f>>2]=c[g>>2];if(a[o+44>>0]|0){n=o+68|0;l=c[n>>2]|0;m=o+32|0;j=c[m>>2]|0;h=o+52|0;f=c[j>>2]|0;g=h+48|0;do{a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0}while((h|0)<(g|0));f=c[n>>2]|0;h=f+1|0;if(h>>>0>l>>>0)h=0;else{k=h;g=j;while(1){h=f+34|0;f=h>>>12;if(!f)h=(c[g>>2]|0)+(h<<2)|0;else h=(c[g+(f<<2)>>2]|0)+((h&4095)<<2)|0;h=Bf(d,c[h>>2]|0)|0;f=k+1|0;if(f>>>0>l>>>0|(h|0)!=0)break;w=k;k=f;g=c[m>>2]|0;f=w}f=c[n>>2]|0}if((l|0)!=(f|0))do if(f|0){f=f+33|0;g=f>>>12;k=x+4|0;if(!((c[o+24>>2]|0)>(g|0)?(i=c[(c[m>>2]|0)+(g<<2)>>2]|0,c[k>>2]=i,(i|0)!=0):0)){if(kf(o,g,k)|0)break;i=c[k>>2]|0}l=i+16384|0;c[x>>2]=l;if(!g){j=i+136|0;c[k>>2]=j;f=0}else{f=(f&-4096)+-34|0;j=i}c[x+8>>2]=f;c[k>>2]=j+-4;i=(c[n>>2]|0)-f|0;f=0;do{g=l+(f<<1)|0;if((i|0)<(e[g>>1]|0))b[g>>1]=0;f=f+1|0}while((f|0)!=8192);x=j+(i<<2)|0;gw(x|0,0,l-x|0)|0}while(0)}else h=0;f=Cf(c[d+212>>2]|0)|0;if(!((h|0)==0&(f|0)!=0)){d=h;Ra=y;return d|0}do{h=f;f=c[f+16>>2]|0;h=Bf(d,c[h+24>>2]|0)|0}while((f|0)!=0&(h|0)==0);Ra=y;return h|0}while(0);if((t|0)==70){l=h;c[l>>2]=0;c[l+4>>2]=0;l=h;h=0;k=0;p=i;t=71}b:do if((t|0)==71){m=d+80|0;n=d+148|0;o=d+152|0;if((h|0)<(f|0)|(h|0)==(f|0)&k>>>0<p>>>0)while(1){c[x>>2]=0;h=Af(d,0,p,f,x,w)|0;i=c[x>>2]|0;if(!i){i=m;i=Sv(c[i>>2]|0,c[i+4>>2]|0,c[n>>2]|0,0)|0;g=L()|0;t=l;if((i|0)==(c[t>>2]|0)?(g|0)==(c[t+4>>2]|0):0){k=Tv(p|0,f|0,i|0,g|0)|0;t=L()|0;i=(c[o>>2]|0)+8|0;i=Wv(k|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0;c[x>>2]=i;t=76}else t=81}else t=76;c:do if((t|0)==76){t=0;if((h|0)==0&(i|0)!=0){j=0;while(1){g=l;h=c[g>>2]|0;g=c[g+4>>2]|0;if(!((g|0)<(f|0)|(g|0)==(f|0)&h>>>0<p>>>0))break;h=zf(d,l,u,1,1)|0;j=j+1|0;if(!(j>>>0<i>>>0&(h|0)==0)){t=81;break c}}i=g}else t=81}while(0);if((t|0)==81){t=0;if(h|0){o=f;break b}h=l;i=c[h+4>>2]|0;h=c[h>>2]|0}if(!((i|0)<(f|0)|(i|0)==(f|0)&h>>>0<p>>>0)){h=0;o=f;break}}else{h=0;o=f}}while(0);if(q){n=r+24|0;f=c[n>>2]|0;m=(c[d+152>>2]|0)+4|0;m=Yv(m|0,((m|0)<0)<<31>>31|0,f|0,0)|0;q=L()|0;k=w;c[k>>2]=m;c[k+4>>2]=q;k=c[s>>2]|0;if(!k){if(!h)t=105}else{h=r+28|0;i=r+40|0;g=k+112|0;if((c[i>>2]|0)==(c[g>>2]|0))h=c[h>>2]|0;else{c[h>>2]=0;c[i>>2]=c[g>>2];h=0}m=k+68|0;if(h>>>0<(c[m>>2]|0)>>>0){c[m>>2]=h;c[k+76>>2]=c[r+32>>2];c[k+80>>2]=c[r+36>>2];do if(h|0){h=h+33|0;i=h>>>12;j=x+4|0;if((c[k+24>>2]|0)>(i|0)?(v=c[(c[k+32>>2]|0)+(i<<2)>>2]|0,c[j>>2]=v,(v|0)!=0):0)f=v;else{if(kf(k,i,j)|0)break;f=c[j>>2]|0}k=f+16384|0;c[x>>2]=k;if(!i){g=f+136|0;c[j>>2]=g;h=0}else{h=(h&-4096)+-34|0;g=f}c[x+8>>2]=h;c[j>>2]=g+-4;f=(c[m>>2]|0)-h|0;h=0;do{i=k+(h<<1)|0;if((f|0)<(e[i>>1]|0))b[i>>1]=0;h=h+1|0}while((h|0)!=8192);x=g+(f<<2)|0;gw(x|0,0,k-x|0)|0}while(0);f=c[n>>2]|0;t=105}else t=105}d:do if((t|0)==105){i=d+52|0;while(1){if(f>>>0>=(c[i>>2]|0)>>>0){h=0;break d}h=zf(d,w,u,0,1)|0;if(!h)f=f+1|0;else break}}while(0)}yf(u);if(h|0){d=h;Ra=y;return d|0}d=l;c[d>>2]=p;c[d+4>>2]=o;d=0;Ra=y;return d|0}function xf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+48|0;K=M+16|0;H=M+8|0;I=M+40|0;x=M;y=M+36|0;z=M+32|0;G=M+28|0;A=M+24|0;h=c[b>>2]|0;c[z>>2]=0;c[G>>2]=1;w=b+152|0;c[A>>2]=c[w>>2];C=b+64|0;g=c[C>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,x)|0;a:do if(!g){B=b+208|0;f=c[B>>2]|0;g=Ef(c[C>>2]|0,f,(c[(c[b>>2]|0)+8>>2]|0)+1|0)|0;if(!g){if(!(a[f>>0]|0))f=0;else f=Za[c[h+32>>2]&127](h,f,0,G)|0;b:do if((f|0)==0&(c[G>>2]|0)!=0){p=b+72|0;q=p;c[q>>2]=0;c[q+4>>2]=0;q=b+148|0;r=b+80|0;s=b+60|0;t=b+24|0;u=b+16|0;v=b+32|0;f=0;h=d;c:while(1){do{g=x;g=Af(b,d,c[g>>2]|0,c[g+4>>2]|0,y,z)|0;switch(g|0){case 101:{h=f;break b}case 0:break;default:{e=g;J=37;break b}}g=c[y>>2]|0;if((g|0)==-1){n=x;n=Tv(c[n>>2]|0,c[n+4>>2]|0,c[q>>2]|0,0)|0;o=L()|0;g=(c[w>>2]|0)+8|0;g=Wv(n|0,o|0,g|0,((g|0)<0)<<31>>31|0)|0;L()|0;c[y>>2]=g}if(!(g|d)){j=r;l=c[q>>2]|0;j=Sv(c[j>>2]|0,c[j+4>>2]|0,l|0,0)|0;i=L()|0;m=p;k=c[m>>2]|0;m=c[m+4>>2]|0;if((j|0)==(k|0)&(i|0)==(m|0)){o=x;o=Tv(c[o>>2]|0,c[o+4>>2]|0,j|0,i|0)|0;k=L()|0;g=(c[w>>2]|0)+8|0;g=Wv(o|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;L()|0;c[y>>2]=g;k=j;j=0}else{i=m;j=0}}else{i=p;k=c[i>>2]|0;l=c[q>>2]|0;i=c[i+4>>2]|0;j=0}if((k|0)==(l|0)&(i|0)==(j|0)){n=c[z>>2]|0;i=c[s>>2]|0;j=c[i>>2]|0;if(j|0?((a[u>>0]|0)+-1&255)>2:0){o=c[w>>2]|0;i=Xa[c[j+24>>2]&255](i,H)|0;k=((o|0)<0)<<31>>31;l=Yv(o|0,k|0,n|0,0)|0;m=L()|0;if(i|0){e=i;break c}j=H;i=c[j>>2]|0;j=c[j+4>>2]|0;if(!((i|0)==(l|0)&(j|0)==(m|0))){do if((j|0)>(m|0)|(j|0)==(m|0)&i>>>0>l>>>0){e=c[s>>2]|0;e=Ya[c[(c[e>>2]|0)+16>>2]&127](e,l,m)|0;J=24}else{j=Sv(i|0,j|0,o|0,k|0)|0;i=L()|0;if((i|0)>(m|0)|(i|0)==(m|0)&j>>>0>l>>>0)break;j=c[B>>2]|0;gw(j|0,0,o|0)|0;i=c[s>>2]|0;J=Tv(l|0,m|0,o|0,k|0)|0;e=L()|0;e=_a[c[(c[i>>2]|0)+12>>2]&127](i,j,o,J,e)|0;J=24}while(0);if((J|0)==24?(J=0,e|0):0)break c;c[v>>2]=n}}c[t>>2]=n}}while(!(g|0));i=0;d:while(1){if(h|0)Ff(b);h=zf(b,p,0,1,0)|0;switch(h|0){case 522:{h=f;break b}case 101:{J=35;break d}case 0:break;default:{e=h;J=37;break b}}f=f+1|0;i=i+1|0;if(i>>>0>=g>>>0)break;else h=0}if((J|0)==35){J=0;m=x;n=c[m+4>>2]|0;o=p;c[o>>2]=c[m>>2];c[o+4>>2]=n}h=0}J=38;break a}else{e=f;f=0;J=37}while(0);if((J|0)==37)if(!e)h=f;else{J=38;break}g=Se(b,A,-1)|0;e=b+12|0;a[b+18>>0]=a[e>>0]|0;if(!g){s=c[B>>2]|0;g=Ef(c[C>>2]|0,s,(c[(c[b>>2]|0)+8>>2]|0)+1|0)|0;if(!g){if(((a[b+16>>0]|0)+-1&255)>2){i=b+60|0;f=c[i>>2]|0;g=c[f>>2]|0;if(g|0){g=Ya[c[g+40>>2]&127](f,21,0)|0;switch(g|0){case 0:case 12:break;default:break a}}if(((a[b+7>>0]|0)==0?(D=c[i>>2]|0,E=a[b+10>>0]|0,E<<24>>24):0)?(F=Xa[c[(c[D>>2]|0)+20>>2]&255](D,E&255)|0,F|0):0){g=F;break}}g=uf(b,(a[s>>0]|0)!=0&1,0)|0;if(!g)if((a[s>>0]|0)!=0&(c[G>>2]|0)!=0){r=c[b>>2]|0;j=r+4|0;k=c[j>>2]<<1;G=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;F=L()|0;do if(!(F>>>0>0|(F|0)==0&G>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f){f=7;break}else q=f}else{f=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;g=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&g>>>0>0){G=c[14978]|0;F=Tv(g|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=G>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(!g){f=7;break}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;q=g}else q=g}gw(q|0,0,k|0)|0;o=q+(c[j>>2]|0)|0;p=r+24|0;f=_a[c[p>>2]&127](r,s,q,16385,0)|0;e:do if(!f){f=Xa[c[(c[q>>2]|0)+24>>2]&255](q,H)|0;if(!f){n=(c[r+8>>2]|0)+1|0;G=H;G=Sv(c[G>>2]|0,c[G+4>>2]|0,n|0,((n|0)<0)<<31>>31|0)|0;F=L()|0;f=Sv(G|0,F|0,1,0)|0;L()|0;if(!(F>>>0>0|(F|0)==0&G>>>0>2147483390)){do if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](f)|0;if(!f){f=7;break e}else g=f}else{i=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){G=c[14978]|0;F=Tv(f|0,g|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=G>>>0)&1}g=Wa[c[29340>>2]&127](i)|0;if(!g){f=7;break e}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0<=(c[14987]|0)>>>0)break;c[14987]=f}while(0);f=c[H>>2]|0;m=g+(f+1)|0;f=_a[c[(c[q>>2]|0)+8>>2]&127](q,g,f,0,0)|0;if(!f){a[g+(c[H>>2]|0)>>0]=0;k=g;G=H;F=c[G+4>>2]|0;f:do if((F|0)>0|(F|0)==0&(c[G>>2]|0)>>>0>0){l=r+32|0;j=g;g:while(1){f=Za[c[l>>2]&127](r,j,0,I)|0;if(f|0)break;do if(c[I>>2]|0){f=_a[c[p>>2]&127](r,j,o,2049,0)|0;if(f|0)break g;f=Ef(o,m,n)|0;i=c[o>>2]|0;if(i|0){Wa[c[i+4>>2]&127](o)|0;c[o>>2]=0}if(f|0)break g;if(!(a[m>>0]|0))break;if(!(Bu(m,s)|0)){f=0;break g}}while(0);j=j+(((Eu(j)|0)&1073741823)+1)|0;G=j-k|0;E=((G|0)<0)<<31>>31;F=H;D=c[F+4>>2]|0;if(!((D|0)>(E|0)|((D|0)==(E|0)?(c[F>>2]|0)>>>0>G>>>0:0))){J=88;break f}}}else J=88;while(0);if((J|0)==88){f=c[q>>2]|0;if(f|0){Wa[c[f+4>>2]&127](q)|0;c[q>>2]=0}f=Ya[c[r+28>>2]&127](r,s,0)|0}if(!g)break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{I=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else f=7}}while(0);g=c[q>>2]|0;if(g|0){Wa[c[g+4>>2]&127](q)|0;c[q>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{I=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else f=7;while(0);g=f}else g=0}}}else{f=0;e=g;J=38}}else{f=0;e=g;J=38}while(0);if((J|0)==38){J=b+12|0;a[b+18>>0]=a[J>>0]|0;h=f;g=e;e=J}if((d|0)!=0&(h|0)!=0){d=c[b+172>>2]|0;c[K>>2]=h;c[K+4>>2]=d;Db(539,32360,K)}if(a[e>>0]|0){K=512;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}e=b+60|0;K=c[e>>2]|0;if((Wa[c[(c[K>>2]|0)+48>>2]&127](K)|0)&4096|0){K=512;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}e=c[e>>2]|0;f=c[(c[e>>2]|0)+44>>2]|0;if(!f){K=4096;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}K=Wa[f&127](e)|0;K=(K|0)<32?512:(K|0)<65536?K:65536;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}function yf(a){a=a|0;var b=0,d=0;if(!a)return;if(c[a+8>>2]|0){d=a+12|0;b=0;do{yf(c[d+(b<<2)>>2]|0);b=b+1|0}while((b|0)!=125)}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function zf(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0;K=Ra;Ra=Ra+16|0;v=K+4|0;J=K;I=c[f+208>>2]|0;C=(i|0)!=0;r=c[(C?f+64|0:f+68|0)>>2]|0;k=g;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,v,4,c[k>>2]|0,c[k+4>>2]|0)|0;if(k|0){J=k;Ra=K;return J|0}s=v+1|0;t=v+2|0;u=v+3|0;D=d[s>>0]<<16|d[v>>0]<<24|d[t>>0]<<8|d[u>>0];H=f+152|0;q=c[H>>2]|0;w=g;w=Sv(c[w>>2]|0,c[w+4>>2]|0,4,0)|0;k=L()|0;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,I,q,w,k)|0;if(k|0){J=k;Ra=K;return J|0}k=c[H>>2]|0;p=(i<<2)+4+k|0;q=g;p=Sv(c[q>>2]|0,c[q+4>>2]|0,p|0,((p|0)<0)<<31>>31|0)|0;q=L()|0;w=g;c[w>>2]=p;c[w+4>>2]=q;if(!D){J=101;Ra=K;return J|0}if((D|0)==((1073741824/(k|0)|0)+1|0)){J=101;Ra=K;return J|0}if(D>>>0>(c[f+24>>2]|0)>>>0){J=0;Ra=K;return J|0}w=(h|0)==0;a:do if(!w?(m=D+-1|0,n=c[h>>2]|0,m>>>0<n>>>0):0){l=c[h+8>>2]|0;if(!l){o=h;k=n}else{n=h;do{k=(m>>>0)/(l>>>0)|0;n=c[n+12+(k<<2)>>2]|0;if(!n)break a;m=m-(G(k,l)|0)|0;l=c[n+8>>2]|0}while((l|0)!=0);o=n;k=c[n>>2]|0}if(k>>>0<4001){if(!(1<<(m&7)&d[o+12+(m>>>3)>>0]))break;else k=0;Ra=K;return k|0}n=m+1|0;k=(m>>>0)%125|0;l=c[o+12+(k<<2)>>2]|0;if(l|0){while(1){if((l|0)==(n|0)){k=0;break}k=((k+1|0)>>>0)%125|0;l=c[o+12+(k<<2)>>2]|0;if(!l)break a}Ra=K;return k|0}}while(0);if(C){q=Sv(p|0,q|0,-4,-1)|0;k=L()|0;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,v,4,q,k)|0;if(k|0){J=k;Ra=K;return J|0}m=d[s>>0]<<16|d[v>>0]<<24|d[t>>0]<<8|d[u>>0];if(!j){k=c[f+48>>2]|0;l=c[H>>2]|0;if((l|0)>200)do{j=l;l=l+-200|0;k=k+(d[I+l>>0]|0)|0}while((j|0)>400);if((k|0)!=(m|0)){J=101;Ra=K;return J|0}}}if(!w?(x=df(h,D)|0,x|0):0){J=x;Ra=K;return J|0}p=(D|0)==1;if(p?(y=f+142|0,z=a[I+20>>0]|0,(b[y>>1]|0)!=(z&255|0)):0)b[y>>1]=z&255;do if((c[f+216>>2]|0)==0?(A=f+212|0,B=Ya[c[29436>>2]&127](c[(c[A>>2]|0)+44>>2]|0,D,0)|0,(B|0)!=0):0){k=c[A>>2]|0;l=c[B+4>>2]|0;if(!(c[l>>2]|0)){l=sf(k,D,B)|0;break}else{B=k+12|0;c[B>>2]=(c[B>>2]|0)+1;B=l+30|0;b[B>>1]=(b[B>>1]|0)+1<<16>>16;break}}else l=0;while(0);c[J>>2]=l;if(C)if(!(a[f+7>>0]|0)){C=g;B=c[C+4>>2]|0;k=f+80|0;g=c[k+4>>2]|0;k=((B|0)<(g|0)|((B|0)==(g|0)?(c[C>>2]|0)>>>0<=(c[k>>2]|0)>>>0:0))&1}else k=1;else if(!l)k=1;else k=((e[l+28>>1]|0)>>>3&1^1)&65535;m=c[f+60>>2]|0;n=c[m>>2]|0;do if(n){o=a[f+16>>0]|0;if((o&255)>3){if(!k){F=51;break}}else if(!((k|0)!=0&o<<24>>24==0)){F=51;break}E=c[H>>2]|0;k=Yv(E|0,((E|0)<0)<<31>>31|0,D+-1|0,0)|0;l=L()|0;l=_a[c[n+12>>2]&127](m,I,E,k,l)|0;k=f+32|0;if(D>>>0>(c[k>>2]|0)>>>0)c[k>>2]=D;k=c[f+88>>2]|0;if(!k)n=l;else{nf(k,D,I);n=l}}else F=51;while(0);if((F|0)==51)if((i|0)==0&(l|0)==0){F=f+20|0;a[F>>0]=a[F>>0]|2;k=Za[c[f+204>>2]&127](f,D,J,1)|0;a[F>>0]=a[F>>0]&-3;if(k|0){J=k;Ra=K;return J|0}n=c[J>>2]|0;l=n+28|0;k=e[l>>1]|0;if((k&17|0)!=0?(E=k&65519,b[l>>1]=E,(k&1|0)!=0):0){m=(E^3)&65535;b[l>>1]=m;k=c[n+12>>2]|0;c[n+36>>2]=0;l=c[k>>2]|0;c[n+32>>2]=l;if(!l){c[k+4>>2]=n;if(a[k+32>>0]|0)a[k+33>>0]=1}else c[l+36>>2]=n;c[k>>2]=n;k=k+8|0;if((m&8)==0&(c[k>>2]|0)==0){c[k>>2]=n;n=0}else n=0}else n=0}else n=0;k=c[J>>2]|0;if(!k){J=n;Ra=K;return J|0}k=c[k+4>>2]|0;ew(k|0,I|0,c[H>>2]|0)|0;ab[c[f+200>>2]&127](c[J>>2]|0);if(p){m=f+104|0;k=k+24|0;l=m+16|0;do{a[m>>0]=a[k>>0]|0;m=m+1|0;k=k+1|0}while((m|0)<(l|0))}Df(c[J>>2]|0);J=n;Ra=K;return J|0}function Af(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+32|0;p=t+16|0;k=t+8|0;q=t;s=a+72|0;j=s;i=c[j>>2]|0;j=c[j+4>>2]|0;if((i|0)==0&(j|0)==0){i=a+148|0;r=i;n=0;o=0;i=c[i>>2]|0;j=0}else{o=Sv(i|0,j|0,-1,-1)|0;n=L()|0;r=a+148|0;i=c[r>>2]|0;n=Wv(o|0,n|0,i|0,0)|0;n=Sv(n|0,L()|0,1,0)|0;n=Yv(n|0,L()|0,i|0,0)|0;o=L()|0;j=0}m=s;c[m>>2]=n;c[m+4>>2]=o;m=Sv(n|0,o|0,i|0,j|0)|0;l=L()|0;if((l|0)>(f|0)|(l|0)==(f|0)&m>>>0>e>>>0){s=101;Ra=t;return s|0}if((b|0)==0?(m=a+80|0,(n|0)==(c[m>>2]|0)?(o|0)==(c[m+4>>2]|0):0):0)e=a+64|0;else{i=a+64|0;j=c[i>>2]|0;j=_a[c[(c[j>>2]|0)+8>>2]&127](j,k,8,n,o)|0;if(j|0){s=j;Ra=t;return s|0}if(!(Lu(k,32352,8)|0))e=i;else{s=101;Ra=t;return s|0}}l=c[e>>2]|0;m=Sv(n|0,o|0,8,0)|0;i=L()|0;i=_a[c[(c[l>>2]|0)+8>>2]&127](l,p,4,m,i)|0;if(i|0){s=i;Ra=t;return s|0}k=p+1|0;l=p+2|0;m=p+3|0;c[g>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);f=c[e>>2]|0;g=Sv(n|0,o|0,12,0)|0;i=L()|0;i=_a[c[(c[f>>2]|0)+8>>2]&127](f,p,4,g,i)|0;if(i|0){s=i;Ra=t;return s|0}c[a+48>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);f=c[e>>2]|0;g=Sv(n|0,o|0,16,0)|0;i=L()|0;i=_a[c[(c[f>>2]|0)+8>>2]&127](f,p,4,g,i)|0;if(i|0){s=i;Ra=t;return s|0}c[h>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);j=s;b=c[j>>2]|0;j=c[j+4>>2]|0;a:do if((b|0)==0&(j|0)==0){g=c[e>>2]|0;h=Sv(n|0,o|0,20,0)|0;i=L()|0;i=_a[c[(c[g>>2]|0)+8>>2]&127](g,p,4,h,i)|0;do if(!i){f=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);h=c[e>>2]|0;o=Sv(n|0,o|0,24,0)|0;i=L()|0;i=_a[c[(c[h>>2]|0)+8>>2]&127](h,p,4,o,i)|0;if(i|0)break;i=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);c[q>>2]=i;if(!i){i=c[a+152>>2]|0;c[q>>2]=i}if((!((f+-32|0)>>>0>65504|(i+-512|0)>>>0>65024)?(i+-1&i|0)==0:0)?(f+-1&f|0)==0:0){e=Se(a,q,-1)|0;c[r>>2]=f;j=s;b=c[j>>2]|0;j=c[j+4>>2]|0;i=f;break a}else i=101}while(0);s=i;Ra=t;return s|0}else{e=0;i=c[r>>2]|0}while(0);q=Sv(b|0,j|0,i|0,0)|0;r=L()|0;c[s>>2]=q;c[s+4>>2]=r;s=e;Ra=t;return s|0}function Bf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=d+212|0;h=Ya[c[29436>>2]&127](c[(c[f>>2]|0)+44>>2]|0,e,0)|0;do if(!h)g=0;else{f=c[f>>2]|0;g=c[h+4>>2]|0;if(!(c[g>>2]|0)){f=sf(f,e,h)|0;if(!f){g=0;break}g=f;f=b[f+30>>1]|0}else{k=f+12|0;c[k>>2]=(c[k>>2]|0)+1;k=g+30|0;f=(b[k>>1]|0)+1<<16>>16;b[k>>1]=f}if(f<<16>>16!=1){f=rf(g)|0;if(!f){ab[c[d+200>>2]&127](g);if(!(b[g+28>>1]&32)){Df(g);g=0;break}else{k=c[g+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[g+16>>2]=c[k>>2];c[k>>2]=g;g=0;break}}else if(!(b[g+28>>1]&32)){Df(g);g=f;break}else{k=c[g+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[g+16>>2]=c[k>>2];c[k>>2]=g;g=f;break}}k=c[g+12>>2]|0;do if(b[g+28>>1]&2){f=k+8|0;e=g+36|0;h=c[e>>2]|0;if((c[f>>2]|0)==(g|0))c[f>>2]=h;i=c[g+32>>2]|0;j=(i|0)==0;if(j){c[k+4>>2]=h;f=h}else{c[i+36>>2]=h;f=c[e>>2]|0}if(f|0){c[f+32>>2]=i;break}c[k>>2]=i;if(j)a[k+33>>0]=2}while(0);j=k+12|0;c[j>>2]=(c[j>>2]|0)+-1;cb[c[29440>>2]&255](c[k+44>>2]|0,c[g>>2]|0,1);g=0}while(0);f=c[d+88>>2]|0;if(!f)return g|0;do{c[f+16>>2]=1;f=c[f+44>>2]|0}while((f|0)!=0);return g|0}function Cf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+176|0;m=o+128|0;n=o;e=c[a>>2]|0;d=(e|0)==0;if(!d){a=e;do{l=a;a=c[a+32>>2]|0;c[l+16>>2]=a}while((a|0)!=0);a=n;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));if(d)a=0;else{l=m+16|0;j=m+16|0;k=n+124|0;do{h=e+16|0;a=e;e=c[h>>2]|0;c[h>>2]=0;h=0;while(1){i=n+(h<<2)|0;b=c[i>>2]|0;if(!b){b=9;break}d=m;g=b;a:while(1){f=c[g+24>>2]|0;b=d;while(1){b=b+16|0;if(f>>>0<(c[a+24>>2]|0)>>>0)break;c[b>>2]=a;b=c[a+16>>2]|0;if(!b){b=a;a=g;break a}else{d=a;a=b;b=d}}c[b>>2]=g;b=c[g+16>>2]|0;if(!b){b=g;break}else{d=g;g=b}}c[b+16>>2]=a;a=c[l>>2]|0;c[i>>2]=0;h=h+1|0;if(h>>>0>=31){b=16;break}}if((b|0)==9)c[i>>2]=a;else if((b|0)==16?(0,(h|0)==31):0){b=m;f=c[k>>2]|0;b:while(1){d=c[f+24>>2]|0;while(1){b=b+16|0;if(d>>>0<(c[a+24>>2]|0)>>>0)break;c[b>>2]=a;b=c[a+16>>2]|0;if(!b){b=a;a=f;break b}else{i=a;a=b;b=i}}c[b>>2]=f;b=c[f+16>>2]|0;if(!b){b=f;break}else{i=f;f=b;b=i}}c[b+16>>2]=a;c[k>>2]=c[j>>2]}}while((e|0)!=0);a=c[n>>2]|0}}else{a=n;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));a=0}g=m+16|0;f=1;do{b=c[n+(f<<2)>>2]|0;if(b)if(!a)a=b;else{d=m;c:while(1){e=c[a+24>>2]|0;while(1){d=d+16|0;if(e>>>0<(c[b+24>>2]|0)>>>0)break;c[d>>2]=b;d=c[b+16>>2]|0;if(!d){d=b;break c}else{l=b;b=d;d=l}}c[d>>2]=a;d=c[a+16>>2]|0;if(!d){d=a;a=b;break}else{l=a;a=d;d=l}}c[d+16>>2]=a;a=c[g>>2]|0}f=f+1|0}while((f|0)!=32);Ra=o;return a|0}function Df(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=c[d+12>>2]|0;m=k+12|0;c[m>>2]=(c[m>>2]|0)+-1;m=d+30|0;n=(b[m>>1]|0)+-1<<16>>16;b[m>>1]=n;if(n<<16>>16)return;m=b[d+28>>1]|0;if(m&1){if(!(a[k+32>>0]|0))return;cb[c[29440>>2]&255](c[k+44>>2]|0,c[d>>2]|0,0);return}n=k+8|0;e=c[n>>2]|0;j=d+36|0;g=c[j>>2]|0;if((e|0)==(d|0)){c[n>>2]=g;l=g}else l=e;i=d+32|0;f=c[i>>2]|0;h=(f|0)==0;if(h){c[k+4>>2]=g;e=g}else{c[f+36>>2]=g;e=c[j>>2]|0}do if(!e){c[k>>2]=f;if(h){a[k+33>>0]=2;c[j>>2]=0;c[i>>2]=0;e=k;g=16;break}else{c[j>>2]=0;e=k;g=15;break}}else{c[e+32>>2]=f;f=c[k>>2]|0;c[j>>2]=0;c[i>>2]=f;if(!f){e=k;g=16}else{e=k;g=15}}while(0);if((g|0)==15)c[f+36>>2]=d;else if((g|0)==16){c[k+4>>2]=d;if(a[k+32>>0]|0)a[k+33>>0]=1}c[e>>2]=d;if(!((m&8)==0&(l|0)==0))return;c[n>>2]=d;return}function Ef(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+32|0;l=p+16|0;n=p;o=p+8|0;a[e>>0]=0;i=Xa[c[(c[b>>2]|0)+24>>2]&255](b,n)|0;h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;if((i|0)!=0|((h|0)<0|(h|0)==0&g>>>0<16)){e=i;Ra=p;return e|0}m=Sv(g|0,h|0,-16,-1)|0;g=L()|0;g=_a[c[(c[b>>2]|0)+8>>2]&127](b,l,4,m,g)|0;if(g|0){e=g;Ra=p;return e|0}i=l+1|0;j=l+2|0;k=l+3|0;m=d[i>>0]<<16|d[l>>0]<<24|d[j>>0]<<8|d[k>>0];if(m>>>0>=f>>>0){e=0;Ra=p;return e|0}h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;f=Sv(g|0,h|0,-16,-1)|0;q=L()|0;if((m|0)==0|((q|0)<0|(q|0)==0&f>>>0<m>>>0)){q=0;Ra=p;return q|0}q=Sv(g|0,h|0,-12,-1)|0;g=L()|0;g=_a[c[(c[b>>2]|0)+8>>2]&127](b,l,4,q,g)|0;if(g|0){q=g;Ra=p;return q|0}g=d[i>>0]<<16|d[l>>0]<<24|d[j>>0]<<8|d[k>>0];q=n;q=Sv(c[q>>2]|0,c[q+4>>2]|0,-8,-1)|0;h=L()|0;h=_a[c[(c[b>>2]|0)+8>>2]&127](b,o,8,q,h)|0;if(h|0){q=h;Ra=p;return q|0}if(Lu(o,32352,8)|0){q=0;Ra=p;return q|0}q=n;h=c[q>>2]|0;q=c[q+4>>2]|0;o=Tv(-16,-1,m|0,0)|0;q=Sv(o|0,L()|0,h|0,q|0)|0;h=L()|0;h=_a[c[(c[b>>2]|0)+8>>2]&127](b,e,m,q,h)|0;if(h|0){q=h;Ra=p;return q|0}h=0;do{g=g-(a[e+h>>0]|0)|0;h=h+1|0}while((h|0)!=(m|0));a[e+((g|0)==0?m:0)>>0]=0;q=0;Ra=p;return q|0}function Ff(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=d+100|0;c[e>>2]=(c[e>>2]|0)+1;e=c[d+88>>2]|0;if(e|0)do{c[e+16>>2]=1;e=c[e+44>>2]|0}while((e|0)!=0);j=c[d+212>>2]|0;k=j+44|0;if(!(c[k>>2]|0))return;e=c[j>>2]|0;if(e|0)do{h=e;e=c[e+32>>2]|0;if(c[h+24>>2]|0){i=c[h+12>>2]|0;f=i+8|0;g=h+36|0;d=c[g>>2]|0;if((c[f>>2]|0)==(h|0))c[f>>2]=d;f=(e|0)==0;if(f)c[i+4>>2]=d;else{c[e+36>>2]=d;d=c[g>>2]|0}if(!d){c[i>>2]=e;if(f)a[i+33>>0]=2}else c[d+32>>2]=e;g=h+28|0;b[g>>1]=b[g>>1]&-16|1;if((b[h+30>>1]|0)==0?a[i+32>>0]|0:0)cb[c[29440>>2]&255](c[i+44>>2]|0,c[h>>2]|0,0)}}while((e|0)!=0);if((c[j+12>>2]|0)!=0?(l=Ya[c[29436>>2]&127](c[k>>2]|0,1,0)|0,(l|0)!=0):0){gw(c[l>>2]|0,0,c[j+24>>2]|0)|0;e=2}else e=1;bb[c[29448>>2]&127](c[k>>2]|0,e);return}function Gf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+48|0;o=p+32|0;g=p+16|0;f=p;k=c[e+52>>2]|0;l=c[e+56>>2]|0;m=d[e+9>>0]|0;n=l+m|0;q=d[n>>0]|0;j=q>>>3;h=j&255;a[e+8>>0]=h;j=4-(j<<2)|0;a[e+10>>0]=j;i=e+76|0;c[i>>2]=120;switch((q&247)<<24>>24){case 5:{a[e+2>>0]=1;f=e+3|0;if(!(h<<24>>24)){a[f>>0]=0;c[i>>2]=121;f=181}else{a[f>>0]=1;f=180}c[e+80>>2]=f;b[e+14>>1]=b[k+28>>1]|0;f=k+30|0;break}case 2:{a[e+2>>0]=0;a[e+3>>0]=0;c[e+80>>2]=179;b[e+14>>1]=b[k+24>>1]|0;f=k+26|0;break}default:{c[f>>2]=32306;c[f+4>>2]=65035;c[f+8>>2]=31517;Db(11,32001,f);c[g>>2]=32306;c[g+4>>2]=65185;c[g+8>>2]=31517;Db(11,32001,g);q=11;Ra=p;return q|0}}b[e+16>>1]=b[f>>1]|0;a[e+11>>0]=a[k+21>>0]|0;q=c[k+32>>2]|0;b[e+26>>1]=q+65535;a[e+12>>0]=0;j=j&252;b[e+18>>1]=m+8+j;c[e+64>>2]=n+j+8;c[e+60>>2]=l+(c[k+36>>2]|0);c[e+68>>2]=l+j;n=n+3|0;n=(d[n>>0]|0)<<8|(d[n+1>>0]|0);b[e+24>>1]=n;if(n>>>0>(((q+-8|0)>>>0)/6|0)>>>0){c[o>>2]=32306;c[o+4>>2]=65199;c[o+8>>2]=31517;Db(11,32001,o);q=11;Ra=p;return q|0}c[e+20>>2]=-1;a[e>>0]=1;if(0==0?(c[(c[k+4>>2]|0)+32>>2]&2097152|0)==0:0){q=0;Ra=p;return q|0}q=Hf(e)|0;Ra=p;return q|0}function Hf(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;q=r+16|0;p=r;k=e[f+18>>1]|0;m=f+24|0;l=b[m>>1]|0;n=((l&65535)<<1)+k|0;h=c[(c[f+52>>2]|0)+36>>2]|0;i=c[f+56>>2]|0;o=((a[f+8>>0]|0)==0?-5:-4)+h|0;if(!(l<<16>>16)){q=0;Ra=r;return q|0}j=f+76|0;g=0;while(1){l=i+((g<<1)+k)|0;l=d[l>>0]<<8|d[l+1>>0];if(l>>>0<n>>>0|(l|0)>(o|0)){f=5;break}g=g+1|0;if((l+((Xa[c[j>>2]&255](f,i+l|0)|0)&65535)|0)>(h|0)){f=7;break}if(g>>>0>=(e[m>>1]|0)>>>0){g=0;f=8;break}}if((f|0)==5){c[p>>2]=32306;c[p+4>>2]=65148;c[p+8>>2]=31517;Db(11,32001,p);q=11;Ra=r;return q|0}else if((f|0)==7){c[q>>2]=32306;c[q+4>>2]=65153;c[q+8>>2]=31517;Db(11,32001,q);q=11;Ra=r;return q|0}else if((f|0)==8){Ra=r;return g|0}return 0}function If(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0;i=f+(d[b+10>>0]|0)|0;j=a[i>>0]|0;h=j&255;if(j<<24>>24<0){g=0;h=h&127;do{g=g+1|0;j=a[i+g>>0]|0;h=h<<7|j&127}while(j<<24>>24<0&g>>>0<8);i=i+g|0;j=h}else j=h;if(!(a[b+2>>0]|0))g=i+1|0;else{g=1;do{h=g;g=g+1|0}while((a[i+h>>0]|0)<0&g>>>0<10);g=i+g|0}h=e[b+14>>1]|0;if(j>>>0>h>>>0){i=e[b+16>>1]|0;b=(((j-i|0)>>>0)%(((c[(c[b+52>>2]|0)+36>>2]|0)+-4|0)>>>0)|0)+i|0;f=(g-f&65535)+4+(b>>>0>h>>>0?i:b)|0;f=f&65535;return f|0}else{f=g-f+j|0;f=f>>>0>4?f:4;f=f&65535;return f|0}return 0}function Jf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=a[f>>0]|0;i=n&255;if(n<<24>>24<0){h=0;i=i&127;do{h=h+1|0;n=a[f+h>>0]|0;i=i<<7|n&127}while(n<<24>>24<0&h>>>0<8);n=f+h|0}else n=f;h=n+1|0;m=a[h>>0]|0;j=m&255;do if(m<<24>>24<0){j=cw(j|0,0,7)|0;L()|0;h=n+2|0;m=a[h>>0]|0;j=j&16256|m&127;if(m<<24>>24<=-1){k=2;h=1;l=0;while(1){if(h>>>0>6){m=10;break}j=cw(j|0,l|0,7)|0;l=L()|0;h=k+1|0;m=a[n+h>>0]|0;j=j|m&127;if(m<<24>>24>-1){m=11;break}else{m=k;k=h;h=m}}if((m|0)==10){m=cw(j|0,l|0,8)|0;l=L()|0;j=n+k+1|0;h=j;j=m|(d[j>>0]|0);break}else if((m|0)==11){h=n+h|0;break}}else l=0}else l=0;while(0);k=h+1|0;h=g;c[h>>2]=j;c[h+4>>2]=l;c[g+12>>2]=i;c[g+8>>2]=k;h=b[e+14>>1]|0;if(i>>>0>(h&65535)>>>0){Nf(h,b[e+16>>1]|0,c[(c[e+52>>2]|0)+36>>2]|0,f,g);return}else{f=k-f+i|0;b[g+18>>1]=(f&65532|0)==0?4:f&65535;b[g+16>>1]=i;return}}function Kf(b,c){b=b|0;c=c|0;var d=0;b=4;do{d=b;b=b+1|0}while((a[c+d>>0]|0)<0&b>>>0<13);return b&65535|0}function Lf(a,d,e){a=a|0;d=d|0;e=e|0;d=((Of(d+4|0,e)|0)&255)+4&65535;b[e+18>>1]=d;c[e+12>>2]=0;b[e+16>>1]=0;c[e+8>>2]=0;return}function Mf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f+(d[e+10>>0]|0)|0;i=a[k>>0]|0;j=i&255;if(i<<24>>24<0){h=0;i=j&127;do{h=h+1|0;j=a[k+h>>0]|0;i=i<<7|j&127}while(j<<24>>24<0&h>>>0<8);h=k+h|0;j=i}else h=k;h=h+1|0;i=g;c[i>>2]=j;c[i+4>>2]=0;c[g+12>>2]=j;c[g+8>>2]=h;i=b[e+14>>1]|0;if(j>>>0>(i&65535)>>>0){Nf(i,b[e+16>>1]|0,c[(c[e+52>>2]|0)+36>>2]|0,f,g);return}else{f=h-f+j|0;b[g+18>>1]=(f&65532|0)==0?4:f&65535;b[g+16>>1]=j;return}}function Nf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=d&65535;e=((((c[g+12>>2]|0)-h|0)>>>0)%((e+-4|0)>>>0)|0)+h|0;a=(e|0)>(a&65535|0);b[g+16>>1]=a?d:e&65535;b[g+18>>1]=4-f+((c[g+8>>2]|0)+(a?h:e&65535));return}function Of(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a[b>>0]|0;g=f&255;do if(g&128){f=d[b+1>>0]|0;if(!(f&128)){l=2;j=0;f=g<<7&16256|f;break}l=d[b+2>>0]|0;g=(g<<14|l)&2080895;if(!(l&128)){l=3;j=0;f=g|f<<7&16256;break}l=d[b+3>>0]|0;f=(f<<14|l)&2080895;if(!(l&128)){l=4;j=0;f=f|g<<7;break}k=a[b+4>>0]|0;l=k&255;h=g<<14|l;if(!(l&128)){l=5;j=g>>>18;f=h|f<<7;break}j=f|g<<7;l=d[b+5>>0]|0;i=f<<14|l;if(!(l&128)){l=6;j=j>>>18;f=i|h<<7&266354560;break}l=d[b+6>>0]|0;f=h<<14|l;if(!(l&128)){l=7;j=j>>>11;f=f&-266354561|i<<7&266354560;break}g=f&2080895;l=d[b+7>>0]|0;f=i<<14|l;if(!(l&128)){l=8;j=j>>>4;f=f&-266354561|g<<7;break}else{l=9;j=(k&120)>>>3|j<<4;f=f<<8&532709120|g<<15|(d[b+8>>0]|0);break}}else{l=1;j=0;f=f&255}while(0);c[e>>2]=f;c[e+4>>2]=j;return l|0}function Pf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;l=n+8|0;k=n;j=n+12|0;if(!b){b=0;Ra=n;return b|0}if(g){i=b+4|0;h=c[i>>2]|0;h=Xa[c[(c[h>>2]|0)+28>>2]&255](h,4)|0;if(!h){h=b+43|0;if(!(a[h>>0]|0))a[h>>0]=1;h=Qf(b,d,0,0,0,e,f,g,0,0)|0;if(!h){c[j>>2]=-1;h=c[i>>2]|0;d=c[h>>2]|0;if((d|0)!=0?(Ya[c[d+40>>2]&127](h,10,j)|0,(c[j>>2]|0)==1):0){j=b+16|0;i=c[j+4>>2]|0;if((i|0)>-1|(i|0)==-1&(c[j>>2]|0)>>>0>4294967295){d=b+8|0;h=c[d>>2]|0;h=Xa[c[(c[h>>2]|0)+24>>2]&255](h,k)|0;j=c[k+4>>2]|0;if((h|0)==0&((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)){h=c[d>>2]|0;h=Ya[c[(c[h>>2]|0)+16>>2]&127](h,0,0)|0}if(h|0){c[l>>2]=c[b+108>>2];Db(h,32326,l)}h=0}else h=0}else h=1;j=0}else{j=h;h=0}}else{j=h;h=0}}else{j=0;h=0}g=b+43|0;d=a[g>>0]|0;if(d<<24>>24!=2?(a[b+50>>0]|0)==0:0)m=27;else{i=b+24|0;if((c[i>>2]|0)>0){e=b+32|0;d=0;do{f=c[(c[e>>2]|0)+(d<<2)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[(c[e>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)<(c[i>>2]|0));d=a[g>>0]|0}if(d<<24>>24!=2)m=27}if((m|0)==27){m=c[b+4>>2]|0;Xa[c[(c[m>>2]|0)+64>>2]&255](m,h)|0}d=c[b+8>>2]|0;e=c[d>>2]|0;if(e|0){Wa[c[e+4>>2]&127](d)|0;c[d>>2]=0}if(h|0){m=c[b>>2]|0;Ya[c[m+28>>2]&127](m,c[b+108>>2]|0,0)|0}h=c[b+32>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=j;Ra=n;return b|0}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=j;Ra=n;return b|0}return 0}function Qf(f,g,h,i,j,k,l,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;la=Ra;Ra=Ra+144|0;r=la+120|0;fa=la;Z=la+104|0;ia=la+132|0;c[ia>>2]=0;if(a[f+46>>0]|0){h=8;Ra=la;return h|0}ka=f+43|0;if((a[ka>>0]|0)==0?(p=c[f+4>>2]|0,p=Za[c[(c[p>>2]|0)+56>>2]&127](p,1,1,10)|0,p|0):0){h=p;Ra=la;return h|0}ja=f+45|0;a[ja>>0]=1;a:do if(!h){p=0;ea=14}else{p=f+4|0;b:do if(!i){if(!(a[ka>>0]|0)){q=c[p>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,0,1,10)|0;ea=12}}else while(1){if(a[ka>>0]|0)break b;q=c[p>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,0,1,10)|0;if((q|0)!=5){ea=12;break b}if(!(Wa[i&127](j)|0)){p=0;i=0;ea=14;break a}}while(0);if((ea|0)==12)switch(q|0){case 5:{p=0;i=0;ea=14;break a}case 0:break;default:{ha=h;break a}}a[f+44>>0]=1;p=h;ea=14}while(0);if((ea|0)==14){ha=p;q=hf(f,ia)|0}c:do if(!q){ga=f+68|0;s=c[ga>>2]|0;aa=e[f+66>>1]|0;aa=aa<<16&65536|aa&65024;if(!((s|0)==0|(aa|0)==(l|0))){c[r>>2]=32306;c[r+4>>2]=61939;c[r+8>>2]=31517;Db(11,32001,r);q=11;break}da=f+32|0;S=c[c[da>>2]>>2]|0;ca=S+96|0;d:do if((c[ca>>2]|0)>>>0<s>>>0){_=f+72|0;$=c[_>>2]|0;ba=f+4|0;p=S+104|0;l=c[p>>2]|0;e:do if(s>>>0>l>>>0){f:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,10)|0;i=0}else{i=0;ea=28}else while(1){if(a[ka>>0]|0){ea=28;break f}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,10)|0;if((q|0)!=5)break f;if(!(Wa[i&127](j)|0)){i=0;q=5;break e}}while(0);if((ea|0)==28){c[p>>2]=s;q=0;l=s;break}switch(q|0){case 5:{i=0;break e}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=s;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,9)|0;q=0;l=s}else{q=0;l=s}}else{q=0;l=s}while(0);p=S+108|0;r=c[p>>2]|0;g:do if(l>>>0>r>>>0){h:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,10)|0}else ea=161;else while(1){if(a[ka>>0]|0){ea=161;break h}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,10)|0;if((q|0)!=5)break h;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break g}}while(0);if((ea|0)==161){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break g}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,9)|0;q=0}else q=0}while(0);p=S+112|0;r=c[p>>2]|0;i:do if(l>>>0>r>>>0){j:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,10)|0}else ea=173;else while(1){if(a[ka>>0]|0){ea=173;break j}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,10)|0;if((q|0)!=5)break j;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break i}}while(0);if((ea|0)==173){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break i}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,9)|0;q=0}else q=0}while(0);p=S+116|0;r=c[p>>2]|0;k:do if(l>>>0>r>>>0){l:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,10)|0}else ea=185;else while(1){if(a[ka>>0]|0){ea=185;break l}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,10)|0;if((q|0)!=5)break l;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break k}}while(0);if((ea|0)==185){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break k}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,9)|0;q=0}else q=0}while(0);m:do if((c[ca>>2]|0)>>>0<l>>>0){q=c[ca>>2]|0;P=c[ga>>2]|0;Q=(P+33|0)>>>12;p=(P<<1)+28+(Q*20|0)|0;W=pb(p,0)|0;if(!W){q=7;break c}gw(W|0,0,p|0)|0;R=W+4|0;c[R>>2]=Q+1;N=pb((P>>>0<4096?P:4096)<<1,0)|0;O=(N|0)==0;p=(q+34|0)>>>12;n:do if(p>>>0>Q>>>0|O)q=O?7:0;else{H=Z+4|0;I=f+24|0;J=Z+8|0;K=W+8|0;M=fa+4|0;while(1){if((c[I>>2]|0)>(p|0)?(T=c[(c[da>>2]|0)+(p<<2)>>2]|0,c[H>>2]=T,(T|0)!=0):0)q=T;else{q=kf(f,p,H)|0;if(q|0)break;q=c[H>>2]|0}r=q+16384|0;c[Z>>2]=r;if(!p){q=q+136|0;c[H>>2]=q;s=0}else s=(p<<12)+-34|0;c[H>>2]=q;G=q;E=(p|0)==(Q|0)?P-s|0:r-G>>2;F=K+((c[R>>2]|0)*20|0)+(s<<1)|0;D=s+1|0;c[J>>2]=D;if((E|0)>0){r=0;do{b[F+(r<<1)>>1]=r;r=r+1|0}while((r|0)!=(E|0));v=fa;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));C=0;do{t=F+(C<<1)|0;if(!(C&1)){u=0;r=1;s=M}else{r=1;A=0;s=M;while(1){B=c[s>>2]|0;z=c[fa+(A<<3)>>2]|0;u=(r|0)>0;s=(z|0)>0;if(u|s){w=0;y=0;v=0;while(1){do if(s){s=B+(v<<1)|0;if(u?(U=t+(w<<1)|0,(c[q+(e[s>>1]<<2)>>2]|0)>>>0>=(c[q+(e[U>>1]<<2)>>2]|0)>>>0):0){s=U;ea=57;break}u=v+1|0}else{s=t+(w<<1)|0;ea=57}while(0);if((ea|0)==57){ea=0;u=v;w=w+1|0}v=b[s>>1]|0;s=c[q+((v&65535)<<2)>>2]|0;x=y+1|0;b[N+(y<<1)>>1]=v;if((u|0)<(z|0))v=u+((c[q+(e[B+(u<<1)>>1]<<2)>>2]|0)==(s|0)&1)|0;else v=u;u=(w|0)<(r|0);s=(v|0)<(z|0);if(!(u|s)){r=x;break}else y=x}}else r=0;ew(B|0,N|0,r<<1|0)|0;t=A+1|0;s=fa+(t<<3)+4|0;if(!(1<<t&C)){u=t;t=B;break}else{A=t;t=B}}}c[s>>2]=t;c[fa+(u<<3)>>2]=r;C=C+1|0}while((C|0)!=(E|0));s=u+1|0;if(s>>>0<13)ea=64;else q=r}else{v=fa;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));r=0;s=1;t=0;ea=64}if((ea|0)==64){ea=0;do{if(1<<s&E){B=c[fa+(s<<3)+4>>2]|0;A=c[fa+(s<<3)>>2]|0;v=(r|0)>0;u=(A|0)>0;if(v|u){x=0;z=0;w=0;while(1){do if(u){u=B+(w<<1)|0;if(v?(V=t+(x<<1)|0,(c[q+(e[u>>1]<<2)>>2]|0)>>>0>=(c[q+(e[V>>1]<<2)>>2]|0)>>>0):0){u=V;ea=73;break}v=w+1|0}else{u=t+(x<<1)|0;ea=73}while(0);if((ea|0)==73){ea=0;v=w;x=x+1|0}C=b[u>>1]|0;u=c[q+((C&65535)<<2)>>2]|0;y=z+1|0;b[N+(z<<1)>>1]=C;if((v|0)<(A|0))w=v+((c[q+(e[B+(v<<1)>>1]<<2)>>2]|0)==(u|0)&1)|0;else w=v;v=(x|0)<(r|0);u=(w|0)<(A|0);if(!(v|u)){r=y;break}else z=y}}else r=0;ew(B|0,N|0,r<<1|0)|0;t=B}s=s+1|0}while((s|0)!=13);q=r}c[K+(p*20|0)+16>>2]=D;c[K+(p*20|0)+12>>2]=q;c[K+(p*20|0)+4>>2]=F;c[K+(p*20|0)+8>>2]=G;if(p>>>0<Q>>>0)p=p+1|0;else{q=0;break n}}}while(0);do if(!O)if(!(c[7324]|0)){ab[c[29344>>2]&127](N);break}else{V=Wa[c[29352>>2]&127](N)|0;c[14978]=(c[14978]|0)-V;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](N);break}while(0);if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](W);p=0;l=0;ea=129;break}else{p=Wa[c[29352>>2]&127](W)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](W);p=0;l=0;ea=129;break}o:do if(!i){if(a[ka>>0]|0)break;X=c[ba>>2]|0;X=Za[c[(c[X>>2]|0)+56>>2]&127](X,3,1,10)|0;ea=95}else while(1){if(a[ka>>0]|0)break o;p=c[ba>>2]|0;p=Za[c[(c[p>>2]|0)+56>>2]&127](p,3,1,10)|0;if((p|0)!=5){X=p;ea=95;break o}if(!(Wa[i&127](j)|0)){p=W;l=W;break m}}while(0);if((ea|0)==95?X|0:0){q=X;p=W;l=W;ea=129;break}F=c[ca>>2]|0;c[S+128>>2]=l;E=f+8|0;p=c[E>>2]|0;G=k>>>2&3;H=(G|0)==0;if(!H?(Y=Xa[c[(c[p>>2]|0)+20>>2]&255](p,G)|0,(Y|0)!=0):0)q=Y;else ea=98;p:do if((ea|0)==98){k=Yv($|0,0,aa|0,0)|0;Y=L()|0;q=fa;c[q>>2]=k;c[q+4>>2]=Y;q=c[ba>>2]|0;q=Xa[c[(c[q>>2]|0)+24>>2]&255](q,Z)|0;if(q|0)break;Y=Z;X=c[Y+4>>2]|0;Z=fa;k=c[Z+4>>2]|0;do if((X|0)<(k|0)|((X|0)==(k|0)?(c[Y>>2]|0)>>>0<(c[Z>>2]|0)>>>0:0)){p=c[ba>>2]|0;q=c[p>>2]|0;if(!q)break;Ya[c[q+40>>2]&127](p,5,fa)|0}while(0);C=g+264|0;D=aa|24;p=c[R>>2]|0;q:do if((p|0)>0){q=0;while(1){B=c[W>>2]|0;r=-1;A=p;while(1){z=A;A=A+-1|0;u=W+8+(A*20|0)|0;s=c[u>>2]|0;v=c[W+8+(A*20|0)+12>>2]|0;r:do if((s|0)<(v|0)){w=c[W+8+(A*20|0)+8>>2]|0;x=c[W+8+(A*20|0)+4>>2]|0;while(1){t=b[x+(s<<1)>>1]|0;y=c[w+((t&65535)<<2)>>2]|0;if(y>>>0>B>>>0)break;s=s+1|0;c[u>>2]=s;if((s|0)>=(v|0)){s=q;break r}}if(y>>>0>=r>>>0){s=q;break}s=(c[W+8+(A*20|0)+16>>2]|0)+(t&65535)|0;r=y}else s=q;while(0);if((z|0)<=1)break;else q=s}c[W>>2]=r;if((r|0)==-1)break q;if(c[C>>2]|0)break;if(!(s>>>0<=F>>>0|s>>>0>l>>>0|r>>>0>$>>>0)){Z=Yv(s+-1|0,0,D|0,0)|0;Z=Sv(Z|0,L()|0,56,0)|0;q=L()|0;Y=c[E>>2]|0;q=_a[c[(c[Y>>2]|0)+8>>2]&127](Y,m,aa,Z,q)|0;if(q|0)break p;Z=Yv(r+-1|0,0,aa|0,0)|0;q=L()|0;Y=c[ba>>2]|0;q=_a[c[(c[Y>>2]|0)+12>>2]&127](Y,m,aa,Z,q)|0;if(q|0)break p;p=c[R>>2]|0}if((p|0)>0)q=s;else{ea=105;break q}}q=(a[g+81>>0]|0)==0?9:7;break p}else ea=105;while(0);if((ea|0)==105)c[W>>2]=-1;do if((l|0)==(c[(c[c[da>>2]>>2]|0)+16>>2]|0)){ea=Yv(c[_>>2]|0,0,aa|0,0)|0;q=L()|0;m=c[ba>>2]|0;q=Ya[c[(c[m>>2]|0)+16>>2]&127](m,ea,q)|0;if(q|0)break p;p=c[ba>>2]|0;if(H)break;q=Xa[c[(c[p>>2]|0)+20>>2]&255](p,G)|0;if(q|0)break p}while(0);c[ca>>2]=l;q=0}while(0);if(a[ka>>0]|0){p=W;l=W;ea=129;break}p=c[ba>>2]|0;Za[c[(c[p>>2]|0)+56>>2]&127](p,3,1,9)|0;p=W;l=W;ea=129}else{p=0;l=0;ea=129}while(0);if((ea|0)==129)if((q|0)!=5){u=l;ea=131;break}q=0;u=l;ea=131}else{q=0;p=0;u=0;ea=131}while(0);do if((ea|0)==131){if((ha|0)!=0&(q|0)==0)if((c[ca>>2]|0)>>>0>=(c[ga>>2]|0)>>>0)if((ha|0)>1){Fb(4,fa);t=f+4|0;s:do if(!i)if(!(a[ka>>0]|0)){q=c[t>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,4,10)|0;ea=141}else ea=142;else while(1){if(a[ka>>0]|0){ea=142;break s}q=c[t>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,4,10)|0;if((q|0)!=5){ea=141;break s}if(!(Wa[i&127](j)|0)){q=5;break}}while(0);if((ea|0)==141)if(!q)ea=142;if((ea|0)==142){if((ha|0)==3){s=c[fa>>2]|0;i=c[da>>2]|0;q=c[i>>2]|0;l=q+96|0;ea=f+84|0;fa=f+112|0;c[fa>>2]=(c[fa>>2]|0)+1;c[ga>>2]=0;fa=ea+1|0;v=ea+2|0;r=ea+3|0;w=(d[fa>>0]<<16|d[ea>>0]<<24|d[v>>0]<<8|d[r>>0])+1|0;a[ea>>0]=w>>>24;a[fa>>0]=w>>>16;a[v>>0]=w>>>8;a[r>>0]=w;c[f+88>>2]=s;i=c[i>>2]|0;r=f+52|0;a[f+64>>0]=1;c[r>>2]=3007e3;w=c[r+4>>2]|0;v=w+6014e3+(c[r+8>>2]|0)|0;w=w+3007e3+(c[r+12>>2]|0)+v|0;v=w+v|0;w=w+(c[r+20>>2]|0)+v|0;v=v+(c[r+24>>2]|0)+w|0;w=w+(c[r+28>>2]|0)+v|0;v=v+(c[r+32>>2]|0)+w|0;c[f+92>>2]=v;c[f+96>>2]=w+s+v;v=i+48|0;s=r;w=v+48|0;do{a[v>>0]=a[s>>0]|0;v=v+1|0;s=s+1|0}while((v|0)<(w|0));if((a[ka>>0]|0)!=2){fa=c[t>>2]|0;ab[c[(c[fa>>2]|0)+60>>2]&127](fa)}v=i;s=r;w=v+48|0;do{a[v>>0]=a[s>>0]|0;v=v+1|0;s=s+1|0}while((v|0)<(w|0));c[l>>2]=0;c[q+128>>2]=0;c[q+104>>2]=0;c[q+108>>2]=-1;c[q+112>>2]=-1;c[q+116>>2]=-1;q=c[f+8>>2]|0;q=Ya[c[(c[q>>2]|0)+16>>2]&127](q,0,0)|0}else q=0;if(!(a[ka>>0]|0)){fa=c[t>>2]|0;Za[c[(c[fa>>2]|0)+56>>2]&127](fa,4,4,9)|0}}}else q=0;else q=5;if(p)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{fa=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);switch(q|0){case 0:case 5:break;default:break c}if(n|0)c[n>>2]=c[ga>>2];if(o)c[o>>2]=c[(c[c[da>>2]>>2]|0)+96>>2]}while(0);if(c[ia>>2]|0){v=f+52|0;w=v+48|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0))}p=f+44|0;if(a[p>>0]|0){if(!(a[ka>>0]|0)){ia=c[f+4>>2]|0;Za[c[(c[ia>>2]|0)+56>>2]&127](ia,0,1,9)|0}a[p>>0]=0;c[f+104>>2]=0;a[f+47>>0]=0}if(!(a[ka>>0]|0)){ka=c[f+4>>2]|0;Za[c[(c[ka>>2]|0)+56>>2]&127](ka,1,1,9)|0}a[ja>>0]=0;h=(ha|0)==(h|0)|(q|0)!=0?q:5;Ra=la;return h|0}function Rf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=e+44|0;if(c[l>>2]|0){n=0;return n|0}m=c[e+12>>2]|0;j=m+56|0;n=c[j>>2]|0;i=c[m+72>>2]|0;h=c[i+20>>2]|0;if((b[i+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[i+24>>2]|0)>>>0:0){if(c[h+96>>2]|0){f=Ve(i)|0;g=10}}else g=6;do if((g|0)==6){f=c[h+40>>2]|0;if(f|0){n=f;return n|0}if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(i)|0;g=10;break}else{f=Xf(i)|0;g=10;break}}while(0);if((g|0)==10?f|0:0){n=f;return n|0}f=n;g=2720;h=f+16|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(h|0));f=e+32|0;a[n+16>>0]=(c[f>>2]|0)>>>8;a[n+17>>0]=(c[f>>2]|0)>>>16;a[n+18>>0]=1;a[n+19>>0]=1;a[n+20>>0]=(c[f>>2]|0)-(c[e+36>>2]|0);a[n+21>>0]=64;a[n+22>>0]=32;a[n+23>>0]=32;f=n+24|0;h=f+76|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(h|0));h=c[j>>2]|0;i=m+52|0;j=c[i>>2]|0;k=d[m+9>>0]|0;if(!(b[j+22>>1]&12)){f=h+k|0;g=j+36|0}else{g=j+36|0;f=h+k|0;gw(f|0,0,(c[g>>2]|0)-k|0)|0}a[f>>0]=13;f=k+8|0;o=h+(k+1)|0;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;a[h+(k+7)>>0]=0;k=h+(k+5)|0;a[k>>0]=(c[g>>2]|0)>>>8;a[k+1>>0]=c[g>>2];c[m+20>>2]=(c[g>>2]|0)-f&65535;a[m+8>>0]=1;a[m+10>>0]=0;c[m+76>>2]=120;k=c[i>>2]|0;a[m+2>>0]=1;a[m+3>>0]=1;c[m+80>>2]=180;b[m+14>>1]=b[k+28>>1]|0;b[m+16>>1]=b[k+30>>1]|0;a[m+11>>0]=a[k+21>>0]|0;b[m+18>>1]=f;c[m+60>>2]=h+(c[g>>2]|0);c[m+64>>2]=h+f;c[m+68>>2]=h;a[m+12>>0]=0;b[m+26>>1]=(c[j+32>>2]|0)+65535;b[m+24>>1]=0;a[m>>0]=1;m=e+22|0;b[m>>1]=b[m>>1]|2;m=a[e+17>>0]|0;a[n+52>>0]=0;a[n+53>>0]=0;a[n+54>>0]=0;a[n+55>>0]=m;m=a[e+18>>0]|0;a[n+64>>0]=0;a[n+65>>0]=0;a[n+66>>0]=0;a[n+67>>0]=m;c[l>>2]=1;a[n+31>>0]=1;n=0;return n|0}function Sf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+48|0;p=F+16|0;D=F;u=F+32|0;h=F+28|0;B=d+216|0;f=c[B>>2]|0;a:do if(!f){A=d+16|0;b:do if(!(a[A>>0]|0)){q=d+17|0;z=d+13|0;y=d+60|0;f=d+176|0;g=d+180|0;c:while(1){e=a[q>>0]|0;switch(e<<24>>24){case 0:case 5:break;default:{t=11;break c}}if(a[z>>0]|0){t=8;break}e=c[y>>2]|0;e=Xa[c[(c[e>>2]|0)+28>>2]&255](e,1)|0;switch(e|0){case 0:{t=7;break c}case 5:break;default:{t=136;break a}}if(!(Wa[c[f>>2]&127](c[g>>2]|0)|0)){e=5;t=138;break a}}if((t|0)==7){e=a[q>>0]|0;t=8}else if((t|0)==11)if((e&255)<2)t=12;else t=48;if((t|0)==8)if(e<<24>>24==5)t=48;else{a[q>>0]=1;t=12}if((t|0)==12){g=c[d>>2]|0;c[u>>2]=1;j=d+64|0;k=(c[c[j>>2]>>2]|0)!=0;if(k){e=0;f=1}else{e=Za[c[g+32>>2]&127](g,c[d+172>>2]|0,0,u)|0;f=c[u>>2]|0}if((f|0)!=0&(e|0)==0){c[h>>2]=0;e=c[y>>2]|0;e=Xa[c[(c[e>>2]|0)+36>>2]&255](e,h)|0;d:do if(!(c[h>>2]|e)){e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(i=c[e+72>>2]|0,(i|0)!=0):0){e=i;t=22}else t=19;do if((t|0)==19){e=c[y>>2]|0;f=c[e>>2]|0;if(f){i=D;c[i>>2]=0;c[i+4>>2]=0;e=Xa[c[f+24>>2]&255](e,D)|0;if(!e){i=D;t=c[d+152>>2]|0;e=((t|0)<0)<<31>>31;i=Sv(c[i>>2]|0,c[i+4>>2]|0,-1,-1)|0;i=Sv(i|0,L()|0,t|0,e|0)|0;e=Wv(i|0,L()|0,t|0,e|0)|0;L()|0;t=22;break}else{f=0;break d}}else{l=0;t=25}}while(0);if((t|0)==22){f=d+156|0;if(e>>>0>(c[f>>2]|0)>>>0)c[f>>2]=e;else{l=e;t=25}}if((t|0)==25?!(k|(l|0)!=0):0){e=a[q>>0]|0;switch(e<<24>>24){case 0:case 1:case 5:{if(!(a[z>>0]|0)){n=c[y>>2]|0;if(Xa[c[(c[n>>2]|0)+28>>2]&255](n,2)|0){f=0;e=0;break d}e=a[q>>0]|0}if(e<<24>>24!=5)a[q>>0]=2;break}default:{}}Ya[c[g+28>>2]&127](g,c[d+172>>2]|0,0)|0;if(a[d+4>>0]|0){f=0;e=0;break}e=c[y>>2]|0;f=c[e>>2]|0;if(!f){f=0;e=0;break}if(!(a[z>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[q>>0]|0)==5){f=0;e=0;break}a[q>>0]=1;f=0;e=0;break}e:do if(!k){c[D>>2]=2049;e=_a[c[g+24>>2]&127](g,c[d+172>>2]|0,c[j>>2]|0,2049,D)|0;switch(e|0){case 0:break e;case 14:break;default:{f=0;break d}}f=1;e=0;break d}while(0);a[D>>0]=0;e=c[j>>2]|0;e=_a[c[(c[e>>2]|0)+8>>2]&127](e,D,1,0,0)|0;e=(e|0)==522?0:e;if(!k?(m=c[j>>2]|0,n=c[m>>2]|0,n|0):0){Wa[c[n+4>>2]&127](m)|0;c[m>>2]=0}f=(a[D>>0]|0)!=0&1}else f=0;while(0)}else f=0;if(e|0){t=138;break a}if(f|0)t=48}do if((t|0)==48){if(a[d+14>>0]|0){e=776;t=138;break a}switch(a[q>>0]|0){case 0:case 1:case 2:case 3:case 5:{if((a[z>>0]|0)==0?(o=c[y>>2]|0,o=Xa[c[(c[o>>2]|0)+28>>2]&255](o,4)|0,o|0):0){e=o;t=138;break a}a[q>>0]=4;break}default:{}}h=d+64|0;e=c[h>>2]|0;f=c[e>>2]|0;if(!f){f=c[d>>2]|0;g=d+172|0;e=Za[c[f+32>>2]&127](f,c[g>>2]|0,0,D)|0;if((e|0)==0&(c[D>>2]|0)!=0){c[u>>2]=0;e=_a[c[f+24>>2]&127](f,c[g>>2]|0,c[h>>2]|0,2050,u)|0;if(!e)if(c[u>>2]&1){c[p>>2]=31984;c[p+4>>2]=55845;c[p+8>>2]=31517;Db(14,32001,p);e=c[h>>2]|0;f=c[e>>2]|0;if(!f)e=14;else{Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0;e=14}}else e=0}g=c[h>>2]|0;f=c[g>>2]|0;if(!f)if((a[d+4>>0]|0)==0?(r=c[y>>2]|0,s=c[r>>2]|0,(s|0)!=0):0){if(!(a[z>>0]|0))Xa[c[s+32>>2]&255](r,1)|0;if((a[q>>0]|0)!=5){a[q>>0]=1;t=72}else t=72}else t=72;else{e=g;t=61}}else t=61;do if((t|0)==61){if(!(a[d+7>>0]|0)){e=Xa[c[f+20>>2]&255](e,2)|0;if(e|0)break;e=c[h>>2]|0;f=c[e>>2]|0}e=Xa[c[f+24>>2]&255](e,d+80|0)|0;if(!e){e=xf(d,(a[d+12>>0]|0)==0&1)|0;a[A>>0]=0;t=72}}while(0);if((t|0)==72)if(!e)break;switch((e&255)<<24>>24){case 10:case 13:break;default:{t=138;break a}}c[d+40>>2]=e;a[A>>0]=6;c[d+204>>2]=75;t=138;break a}while(0);h=d+12|0;if(!(a[h>>0]|0)){if(a[d+23>>0]|0){e=c[y>>2]|0;e=_a[c[(c[e>>2]|0)+8>>2]&127](e,D,16,24,0)|0;switch(e|0){case 0:break;case 522:{c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;c[D+12>>2]=0;break}default:{t=136;break a}}if(Lu(d+104|0,D,16)|0)Ff(d);if(a[h>>0]|0){e=0;break}}e=c[d>>2]|0;g=d+220|0;e=Za[c[e+32>>2]&127](e,c[g>>2]|0,0,u)|0;f:do if(!e){if(!(c[u>>2]|0)){e=d+5|0;if((a[e>>0]|0)!=5){e=0;break}a[e>>0]=0;e=0;break}e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(v=c[e+72>>2]|0,(v|0)!=0):0){f=v;t=91}else t=88;do if((t|0)==88?(w=c[y>>2]|0,x=c[w>>2]|0,x|0):0){e=D;c[e>>2]=0;c[e+4>>2]=0;e=Xa[c[x+24>>2]&255](w,D)|0;if(!e){x=D;t=c[d+152>>2]|0;f=((t|0)<0)<<31>>31;x=Sv(c[x>>2]|0,c[x+4>>2]|0,-1,-1)|0;x=Sv(x|0,L()|0,t|0,f|0)|0;f=Wv(x|0,L()|0,t|0,f|0)|0;L()|0;t=91;break}else break b}while(0);do if((t|0)==91){e=d+156|0;if(f>>>0<=(c[e>>2]|0)>>>0){if(!f)break}else c[e>>2]=f;if(a[h>>0]|0)Ga();if(c[B>>2]|0)Ga();e=c[c[y>>2]>>2]|0;if(a[z>>0]|0){e=14;break f}if(!(a[d+4>>0]|0)){if((c[e>>2]|0)<=1){e=14;break f}if(!(c[e+52>>2]|0)){e=14;break f}}e=c[d+64>>2]|0;f=c[e>>2]|0;if(f|0){Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0}e=Uf(d)|0;if(e|0)break f;a[d+5>>0]=5;a[A>>0]=0;e=0;break f}while(0);e=c[d>>2]|0;e=Ya[c[e+28>>2]&127](e,c[g>>2]|0,0)|0}while(0)}else e=0}else e=0;while(0);f=c[B>>2]|0;if(!f)t=124;else t=111}else t=111;while(0);if((t|0)==111){c[D>>2]=0;e=f+44|0;if(a[e>>0]|0){if(!(a[f+43>>0]|0)){A=c[f+4>>2]|0;Za[c[(c[A>>2]|0)+56>>2]&127](A,0,1,9)|0}a[e>>0]=0;c[f+104>>2]=0;a[f+47>>0]=0}e=f+40|0;g=b[e>>1]|0;if(g<<16>>16>-1){if(!(a[f+43>>0]|0)){A=c[f+4>>2]|0;Za[c[(c[A>>2]|0)+56>>2]&127](A,(g<<16>>16)+3|0,1,5)|0}b[e>>1]=-1}g=c[B>>2]|0;f=0;do{f=f+1|0;e=gf(g,D,0,f)|0}while((e|0)==-1);if(c[D>>2]|e|0)Ff(d);t=124}g:do if((t|0)==124)if((a[d+12>>0]|0)==0?(E=d+16|0,(e|0)==0&(a[E>>0]|0)==0):0){g=d+24|0;e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(C=c[e+72>>2]|0,(C|0)!=0):0){e=C;t=133}else t=129;do if((t|0)==129){e=c[d+60>>2]|0;f=c[e>>2]|0;if(f){C=D;c[C>>2]=0;c[C+4>>2]=0;e=Xa[c[f+24>>2]&255](e,D)|0;if(!e){t=c[d+152>>2]|0;e=((t|0)<0)<<31>>31;D=Sv(c[D>>2]|0,c[D+4>>2]|0,-1,-1)|0;D=Sv(D|0,L()|0,t|0,e|0)|0;e=Wv(D|0,L()|0,t|0,e|0)|0;L()|0;t=133;break}else{t=138;break g}}else e=0}while(0);if((t|0)==133){f=d+156|0;if(e>>>0>(c[f>>2]|0)>>>0)c[f>>2]=e}c[g>>2]=e;e=E;t=139}else t=136;while(0);if((t|0)==136)if(!e){e=d+16|0;t=139}else t=138;if((t|0)==138){vf(d);d=e;Ra=F;return d|0}else if((t|0)==139){a[e>>0]=1;a[d+23>>0]=1;d=0;Ra=F;return d|0}return 0}function Tf(a){a=a|0;var b=0,d=0,e=0;d=a+80|0;a=c[d>>2]|0;if(!a)return;b=a+-4|0;c[d>>2]=b;a=b;do if((c[14816]|0)>>>0<=a>>>0)if((c[14817]|0)>>>0>a>>>0){c[14979]=(c[14979]|0)+-1;c[b>>2]=c[14819];c[14819]=b;b=(c[14820]|0)+1|0;c[14820]=b;c[14821]=(b|0)<(c[14815]|0)&1;break}else{a=Wa[c[29352>>2]&127](b)|0;e=7;break}else{a=Wa[c[29352>>2]&127](b)|0;e=7}while(0);do if((e|0)==7){c[14980]=(c[14980]|0)-a;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}while(0);c[d>>2]=0;return}function Uf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;s=u;f=d+4|0;e=a[f>>0]|0;a:do if(!(e<<24>>24))e=0;else{i=d+17|0;switch(a[i>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:break a}h=d+13|0;do if(!(a[h>>0]|0)){e=d+60|0;g=c[e>>2]|0;g=Xa[c[(c[g>>2]|0)+28>>2]&255](g,4)|0;if(!g){e=a[f>>0]|0;break}e=c[e>>2]|0;f=c[e>>2]|0;if(!f){t=g;Ra=u;return t|0}if(!(a[h>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[i>>0]|0)==5){t=g;Ra=u;return t|0}a[i>>0]=1;t=g;Ra=u;return t|0}while(0);a[i>>0]=4}while(0);n=c[d>>2]|0;p=c[d+60>>2]|0;o=c[d+220>>2]|0;k=d+160|0;j=c[k>>2]|0;k=c[k+4>>2]|0;q=d+216|0;c[q>>2]=0;i=(c[n+4>>2]|0)+120|0;r=Sv(i|0,0,-1,-1)|0;m=L()|0;do if(!(m>>>0>0|(m|0)==0&r>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f){e=7;break}else r=f}else{f=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){r=c[14978]|0;m=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=r>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(!g){e=7;break}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;r=g}else r=g}gw(r|0,0,i|0)|0;c[r>>2]=n;i=r+120|0;l=r+8|0;c[l>>2]=i;m=r+4|0;c[m>>2]=p;b[r+40>>1]=-1;f=r+16|0;c[f>>2]=j;c[f+4>>2]=k;c[r+108>>2]=o;f=r+48|0;a[f>>0]=1;g=r+49|0;a[g>>0]=1;d=r+43|0;a[d>>0]=e<<24>>24==0?0:2;c[s>>2]=524294;e=_a[c[n+24>>2]&127](n,o,i,524294,s)|0;if(!e){if(c[s>>2]&1|0)a[r+46>>0]=1;e=Wa[c[(c[p>>2]|0)+48>>2]&127](p)|0;if(e&1024|0)a[f>>0]=0;if(e&4096|0)a[g>>0]=0;c[q>>2]=r;e=0;break}f=a[d>>0]|0;if(f<<24>>24!=2?(a[r+50>>0]|0)==0:0)t=38;else{i=r+24|0;if((c[i>>2]|0)>0){g=r+32|0;f=0;do{h=c[(c[g>>2]|0)+(f<<2)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[(c[g>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)<(c[i>>2]|0));f=a[d>>0]|0}if(f<<24>>24!=2)t=38}if((t|0)==38){t=c[m>>2]|0;Xa[c[(c[t>>2]|0)+64>>2]&255](t,0)|0}f=c[l>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{t=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else e=7;while(0);t=e;Ra=u;return t|0}function Vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;n=a+96|0;e=c[n>>2]|0;d=a+92|0;q=sb(c[d>>2]|0,b*48|0,0)|0;if(!q){r=7;return r|0}gw(q+(e*48|0)|0,0,(b-e|0)*48|0)|0;c[d>>2]=q;if((e|0)>=(b|0)){r=0;return r|0}i=a+24|0;j=a+64|0;k=a+148|0;l=a+52|0;m=a+72|0;h=a+216|0;d=e;while(1){g=c[i>>2]|0;c[q+(d*48|0)+20>>2]=g;if((c[c[j>>2]>>2]|0)!=0?(p=m,o=c[p>>2]|0,p=c[p+4>>2]|0,(p|0)>0|(p|0)==0&o>>>0>0):0){a=o;e=p}else{a=c[k>>2]|0;e=0}f=q+(d*48|0)|0;c[f>>2]=a;c[f+4>>2]=e;c[q+(d*48|0)+24>>2]=c[l>>2];if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](512)|0;if(!a)break}else{a=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){s=c[14978]|0;f=Tv(e|0,f|0,a|0,((a|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&f>>>0<=s>>>0)&1}a=Wa[c[29340>>2]&127](a)|0;if(!a)break;e=Wa[c[29352>>2]&127](a)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}gw(a+4|0,0,508)|0;c[a>>2]=g;c[q+(d*48|0)+16>>2]=a;a=c[h>>2]|0;if(a|0){c[q+(d*48|0)+28>>2]=c[a+68>>2];c[q+(d*48|0)+32>>2]=c[a+76>>2];c[q+(d*48|0)+36>>2]=c[a+80>>2];c[q+(d*48|0)+40>>2]=c[a+112>>2]}d=d+1|0;c[n>>2]=d;if((d|0)>=(b|0)){d=0;r=22;break}}if((r|0)==22)return d|0;c[q+(d*48|0)+16>>2]=0;s=7;return s|0}function Wf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;s=C;x=c[e+20>>2]|0;w=x+152|0;g=((c[x+148>>2]|0)>>>0)/((c[w>>2]|0)>>>0)|0;B=x+20|0;a[B>>0]=a[B>>0]|4;p=e+24|0;i=c[p>>2]|0;f=i+-1|0;e=0-g|0;q=f&e;A=q+1|0;e=~(f&e);f=c[x+24>>2]|0;if(i>>>0>f>>>0)z=i+1+e|0;else z=(q+g|0)>>>0>f>>>0?f+1+e|0:g;r=(z|0)>0;if(!r){A=0;z=a[B>>0]|0;z=z&-5;a[B>>0]=z;Ra=C;return A|0}m=x+56|0;n=x+204|0;o=x+212|0;h=0;g=0;e=i;a:while(1){l=h+A|0;b:do if(((l|0)!=(e|0)?(t=c[m>>2]|0,(t|0)!=0):0)?(u=h+q|0,v=c[t>>2]|0,u>>>0<v>>>0):0){e=c[t+8>>2]|0;if(!e){f=u;k=t;e=v}else{i=u;j=t;do{f=(i>>>0)/(e>>>0)|0;j=c[j+12+(f<<2)>>2]|0;if(!j){y=20;break b}i=i-(G(f,e)|0)|0;e=c[j+8>>2]|0}while((e|0)!=0);f=i;k=j;e=c[j>>2]|0}c:do if(e>>>0<4001){if(!(1<<(f&7)&(d[k+12+(f>>>3)>>0]|0))){y=20;break b}}else{i=f+1|0;e=(f>>>0)%125|0;f=c[k+12+(e<<2)>>2]|0;if(!f){y=20;break b}while(1){if((f|0)==(i|0))break c;e=((e+1|0)>>>0)%125|0;f=c[k+12+(e<<2)>>2]|0;if(!f){y=20;break b}}}while(0);f=Ya[c[29436>>2]&127](c[(c[o>>2]|0)+44>>2]|0,l,0)|0;if(!f){c[s>>2]=0;e=0;break}i=c[o>>2]|0;e=c[f+4>>2]|0;if(!(c[e>>2]|0)){e=sf(i,l,f)|0;c[s>>2]=e;if(!e){e=0;break}}else{l=i+12|0;c[l>>2]=(c[l>>2]|0)+1;l=e+30|0;b[l>>1]=(b[l>>1]|0)+1<<16>>16;c[s>>2]=e}l=b[e+28>>1]|0;g=(l&8)==0?g:1;if(!(l&32)){Df(e);e=0;break}else{l=c[e+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[e+16>>2]=c[l>>2];c[l>>2]=e;e=0;break}}else y=20;while(0);do if((y|0)==20){y=0;if((l|0)!=((1073741824/(c[w>>2]|0)|0)+1|0)){e=Za[c[n>>2]&127](x,l,s,0)|0;if(e|0){y=22;break a}e=Xf(c[s>>2]|0)|0;f=c[s>>2]|0;l=b[f+28>>1]|0;g=(l&8)==0?g:1;if(!(l&32)){Df(f);break}else{l=c[f+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[f+16>>2]=c[l>>2];c[l>>2]=f;break}}else e=0}while(0);h=h+1|0;f=(e|0)==0;if(!((h|0)<(z|0)&f))break;e=c[p>>2]|0}if((y|0)==22)f=0;if(!((g|0)!=0&f&r)){A=e;z=a[B>>0]|0;z=z&-5;a[B>>0]=z;Ra=C;return A|0}k=x+212|0;j=0;do{g=j+A|0;h=Ya[c[29436>>2]&127](c[(c[k>>2]|0)+44>>2]|0,g,0)|0;do if(h|0){i=c[k>>2]|0;f=c[h+4>>2]|0;if(!(c[f>>2]|0)){f=sf(i,g,h)|0;if(!f)break}else{y=i+12|0;c[y>>2]=(c[y>>2]|0)+1;y=f+30|0;b[y>>1]=(b[y>>1]|0)+1<<16>>16}x=f+28|0;y=b[x>>1]|0;b[x>>1]=y|8;if(!(y&32)){Df(f);break}else{y=c[f+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[f+16>>2]=c[y>>2];c[y>>2]=f;break}}while(0);j=j+1|0}while((j|0)!=(z|0));A=a[B>>0]|0;A=A&-5;a[B>>0]=A;Ra=C;return e|0}\nfunction Zc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!d){i=0;return i|0}h=(Eu(d)|0)&1073741823;if(!b){i=0;return i|0}g=c[b+128>>2]|0;if(!g){i=0;return i|0}f=c[g+4>>2]|0;b=2;while(1){e=g+(b+2<<2)|0;if((av(e,d,h)|0)==0?(a[e+h>>0]|0)==0:0)break;b=(c[g+(b+1<<2)>>2]|0)+b|0;if((b|0)>=(f|0)){b=0;i=9;break}}if((i|0)==9)return b|0;i=c[g+(b<<2)>>2]|0;return i|0}function _c(f,h){f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=Ra;Ra=Ra+224|0;D=N+184|0;C=N+176|0;F=N+168|0;E=N+160|0;B=N+152|0;A=N+144|0;w=N+220|0;x=N+216|0;I=N+192|0;y=N+104|0;i=N;c[x>>2]=0;z=c[f>>2]|0;L=c[z+108>>2]|0;K=I+4|0;c[K>>2]=i;c[I>>2]=0;J=I+8|0;c[J>>2]=100;H=I+12|0;c[H>>2]=L;L=I+16|0;c[L>>2]=0;G=I+20|0;a[G>>0]=0;M=I+21|0;a[M>>0]=0;a:do if((c[z+180>>2]|0)>1){f=a[h>>0]|0;if(f<<24>>24)while(1){i=h+1|0;b:do if(f<<24>>24!=10)do{f=a[i>>0]|0;if(!(f<<24>>24))break b;i=i+1|0}while(f<<24>>24!=10);while(0);f=c[L>>2]|0;j=f+3|0;if(j>>>0<(c[J>>2]|0)>>>0){c[L>>2]=j;F=(c[K>>2]|0)+f|0;a[F>>0]=a[36874]|0;a[F+1>>0]=a[36875]|0;a[F+2>>0]=a[36876]|0}else wb(I,36874,3);f=i-h|0;j=c[L>>2]|0;k=j+f|0;if(k>>>0<(c[J>>2]|0)>>>0){if(f|0){c[L>>2]=k;ew((c[K>>2]|0)+j|0,h|0,f|0)|0}}else wb(I,h,f);f=a[i>>0]|0;if(!(f<<24>>24))break;else h=i}}else{if(!(b[f+16>>1]|0)){if(!h)break;f=(Eu(h)|0)&1073741823;if(f>>>0>=100){wb(I,h,f);break}if(!f)break;c[L>>2]=f;ew(i|0,h|0,f|0)|0;break}if(a[h>>0]|0){v=f+100|0;n=f+128|0;o=z+78|0;p=y+32|0;q=y+8|0;r=y+12|0;s=y+16|0;t=y+10|0;u=y+24|0;m=1;do{f=0;i=h;while(1){j=Bi(i,w)|0;if((c[w>>2]|0)==148){l=j;break}f=j+f|0;i=i+j|0;if(!(a[i>>0]|0)){l=0;break}}i=c[L>>2]|0;j=i+f|0;if(j>>>0<(c[J>>2]|0)>>>0){if(f|0){c[L>>2]=j;ew((c[K>>2]|0)+i|0,h|0,f|0)|0}}else wb(I,h,f);h=h+f|0;if(!l)break a;do if((a[h>>0]|0)==63)if((l|0)>1){ii(h+1|0,x)|0;f=c[x>>2]|0;break}else{c[x>>2]=m;f=m;break}else{j=c[n>>2]|0;c:do if(!j)f=0;else{k=c[j+4>>2]|0;f=2;while(1){i=j+(f+2<<2)|0;if((av(i,h,l)|0)==0?(a[i+l>>0]|0)==0:0)break;f=(c[j+(f+1<<2)>>2]|0)+f|0;if((f|0)>=(k|0)){f=0;break c}}f=c[j+(f<<2)>>2]|0}while(0);c[x>>2]=f}while(0);h=h+l|0;m=f+1|0;l=c[v>>2]|0;k=f+-1|0;f=l+(k*40|0)|0;i=e[l+(k*40|0)+8>>1]|0;do if(!(i&1)){if(i&4|0){j=f;k=c[j+4>>2]|0;l=A;c[l>>2]=c[j>>2];c[l+4>>2]=k;Eb(I,32524,A);break}if(i&8|0){g[B>>3]=+g[f>>3];Eb(I,32529,B);break}if(i&2|0){f=a[o>>0]|0;if(f<<24>>24==1){j=c[l+(k*40|0)+16>>2]|0;c[F>>2]=c[l+(k*40|0)+12>>2];c[F+4>>2]=j;Eb(I,36878,F);break}i=y;j=i+40|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[p>>2]=z;yc(y,c[l+(k*40|0)+16>>2]|0,c[l+(k*40|0)+12>>2]|0,f,0)|0;if(!((b[q>>1]&2)==0|(a[t>>0]|0)==1)?(Ig(y,1)|0)==7:0){a[G>>0]=7;c[J>>2]=0}l=c[s>>2]|0;c[E>>2]=c[r>>2];c[E+4>>2]=l;Eb(I,36878,E);if((b[q>>1]&9216)==0&(c[u>>2]|0)==0)break;Cg(y);break}if(i&16384|0){c[C>>2]=c[f>>2];Eb(I,36885,C);break}f=c[L>>2]|0;i=f+2|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;j=(c[K>>2]|0)+f|0;a[j>>0]=120;a[j+1>>0]=39}else wb(I,36898,2);j=c[l+(k*40|0)+12>>2]|0;if((j|0)>0){i=l+(k*40|0)+16|0;f=0;do{c[D>>2]=d[(c[i>>2]|0)+f>>0];Eb(I,36901,D);f=f+1|0}while((f|0)!=(j|0))}f=c[L>>2]|0;i=f+1|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;a[(c[K>>2]|0)+f>>0]=39;break}else{wb(I,36906,1);break}}else{f=c[L>>2]|0;i=f+4|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;l=(c[K>>2]|0)+f|0;a[l>>0]=78;a[l+1>>0]=85;a[l+2>>0]=76;a[l+3>>0]=76;break}else{wb(I,31171,4);break}}while(0)}while((a[h>>0]|0)!=0)}}while(0);if(!(a[G>>0]|0)){f=c[K>>2]|0;if((f|0?(a[f+(c[L>>2]|0)>>0]=0,c[H>>2]|0):0)?(a[M>>0]&4)==0:0){M=$d(I)|0;Ra=N;return M|0}}else{if(a[M>>0]&4){f=c[I>>2]|0;i=c[K>>2]|0;do if(i|0){if(f|0){if(c[f+480>>2]|0){Xd(f,i);break}I=i;if((c[f+304>>2]|0)>>>0<=I>>>0?(c[f+308>>2]|0)>>>0>I>>>0:0){I=f+300|0;c[i>>2]=c[I>>2];c[I>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);a[M>>0]=a[M>>0]&-5}c[J>>2]=0;c[L>>2]=0;c[K>>2]=0}M=c[K>>2]|0;Ra=N;return M|0}function $c(e){e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;j=m+8|0;k=m;l=e+8|0;f=b[l>>1]&31;if((f|16|0)!=18){l=d[816+f>>0]|0;Ra=m;return l|0}f=a[e+10>>0]|0;h=e+16|0;i=e+12|0;if(!(Lg(c[h>>2]|0,j,c[i>>2]|0,f)|0))f=b[l>>1]|0;else{if(!(Og(c[h>>2]|0,k,c[i>>2]|0,f)|0)){j=k;k=c[j+4>>2]|0;f=e;c[f>>2]=c[j>>2];c[f+4>>2]=k;f=4}else{g[e>>3]=+g[j>>3];f=8}f=b[l>>1]&-3|f;b[l>>1]=f}l=d[816+(f&31)>>0]|0;Ra=m;return l|0}function ad(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;ea=Ra;Ra=Ra+336|0;ca=ea+40|0;Y=ea+32|0;_=ea+24|0;Z=ea+16|0;X=ea+8|0;W=ea;ba=ea+320|0;da=ea+44|0;c[ba>>2]=0;c[m>>2]=0;P=(l|0)!=0;Q=P&1;aa=(f|0)==0;a:do if(aa){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](32)|0;u=24;break}l=Wa[c[29356>>2]&127](32)|0;if((c[14985]|0)>>>0<32)c[14985]=32;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){$=c[14978]|0;V=Tv(n|0,o|0,l|0,((l|0)<0)<<31>>31|0)|0;U=L()|0;c[14768]=((U|0)<0|(U|0)==0&V>>>0<=$>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(l){n=Wa[c[29352>>2]&127](l)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0>(c[14987]|0)>>>0){c[14987]=n;u=25}else u=25}else O=0}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){O=0;break}}else{do if((e[f+276>>1]|0)>=32){n=f+300|0;l=c[n>>2]|0;if(l|0){c[n>>2]=c[l>>2];u=f+284|0;c[u>>2]=(c[u>>2]|0)+1;u=24;break a}n=f+296|0;l=c[n>>2]|0;if(!l){l=f+292|0;break}else{c[n>>2]=c[l>>2];u=f+284|0;c[u>>2]=(c[u>>2]|0)+1;u=24;break a}}else l=f+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(f,32,0)|0;u=24}while(0);if((u|0)==24)if(!l)O=0;else u=25;if((u|0)==25){n=l;p=n+32|0;do{a[n>>0]=0;n=n+1|0}while((n|0)<(p|0));O=l}M=(O|0)!=0;C=f+20|0;D=f+16|0;S=f+480|0;T=f+304|0;U=f+308|0;V=f+300|0;E=O+28|0;F=O+24|0;G=f+32|0;N=O+16|0;H=O+8|0;I=O+20|0;$=f+81|0;J=da+8|0;K=da+196|0;A=da+44|0;B=da+40|0;z=0;l=0;while(1){gw(da|0,0,276)|0;if(!M){u=117;break}c[da>>2]=f;n=c[ba>>2]|0;do if(n|0){if(!aa){if(c[S>>2]|0){Xd(f,n);break}y=n;if((c[T>>2]|0)>>>0<=y>>>0?(c[U>>2]|0)>>>0>y>>>0:0){c[n>>2]=c[V>>2];c[V>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{y=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[ba>>2]=0;o=c[C>>2]|0;if((o|0)>0){p=c[D>>2]|0;n=0;do{q=c[p+(n<<4)+4>>2]|0;if(q|0)c[(c[q+4>>2]|0)+4>>2]=c[q>>2];n=n+1|0}while((n|0)!=(o|0))}y=bd(da,0,h,g)|0;if(!y){u=50;break}if(c[y+56>>2]|0){u=45;break}if(c[y+36>>2]&32|0){u=47;break}if(c[y+12>>2]|0){u=49;break}c[E>>2]=y;p=c[D>>2]|0;w=y+72|0;o=c[w>>2]|0;if(!o)n=-1e6;else{n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0))break;else n=n+1|0}c[F>>2]=c[p+(n<<4)>>2];x=y+42|0;v=b[x>>1]|0;t=v<<16>>16;b:do if(v<<16>>16>0){r=c[y+4>>2]|0;s=d[208+(d[i>>0]|0)>>0]|0;n=0;while(1){p=c[r+(n<<4)>>2]|0;v=a[p>>0]|0;o=(d[208+(v&255)>>0]|0)-s|0;if(!(v<<24>>24==0|(o|0)!=0)){q=i;do{p=p+1|0;q=q+1|0;v=a[p>>0]|0;o=(d[208+(v&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(o|0)!=0))}if(!o){v=n;break b}n=n+1|0;if((n|0)>=(t|0)){v=n;break}}}else v=0;while(0);if((v|0)==(t|0)){u=63;break}if(P){if(!((c[G>>2]&16384|0)==0&0==0)?(R=c[y+16>>2]|0,(R|0)!=0):0){q=R;n=0;do{p=c[q+20>>2]|0;if((p|0)>0){o=0;do{n=(c[q+36+(o<<3)>>2]|0)==(v|0)?31354:n;o=o+1|0}while((o|0)<(p|0))}q=c[q+4>>2]|0}while((q|0)!=0);o=n}else o=0;n=c[y+8>>2]|0;if(!n)n=o;else{do{p=b[n+50>>1]|0;if(p<<16>>16){r=c[n+4>>2]|0;q=p&65535;p=0;do{u=b[r+(p<<1)>>1]|0;o=u<<16>>16==-2|(v|0)==(u<<16>>16|0)?31366:o;p=p+1|0}while(p>>>0<q>>>0)}n=c[n+20>>2]|0}while((n|0)!=0);n=o}if(n|0){u=79;break}}q=c[da>>2]|0;c:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))u=90;else u=94;else{do if((e[q+276>>1]|0)>=224){n=q+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];u=q+284|0;c[u>>2]=(c[u>>2]|0)+1;u=91;break c}n=q+296|0;o=c[n>>2]|0;if(!o){n=q+292|0;break}else{c[n>>2]=c[o>>2];u=q+284|0;c[u>>2]=(c[u>>2]|0)+1;u=91;break c}}else n=q+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;u=90}while(0);if((u|0)==90){o=_d(q,224,0)|0;u=91}do if((u|0)==91){u=0;if(!o)u=94;else{t=o+104|0;n=t;p=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(p|0));c[o>>2]=q;n=q+4|0;p=c[n>>2]|0;if(p|0)c[p+4>>2]=o;c[o+8>>2]=p;c[o+4>>2]=0;c[n>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=da;c[J>>2]=o;Di(o,61,0,1,0)|0;c[N>>2]=o;q=c[w>>2]|0;if(!q)s=-1e6;else{p=c[D>>2]|0;n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(q|0)){s=n;break}else n=n+1|0}p=c[q>>2]|0;q=c[q+4>>2]|0;r=o+108|0;n=c[r>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[r>>2]=n+1;w=c[t>>2]|0;a[w+(n*20|0)>>0]=2;b[w+(n*20|0)+2>>1]=0;c[w+(n*20|0)+4>>2]=s;c[w+(n*20|0)+8>>2]=Q;c[w+(n*20|0)+12>>2]=p;c[w+(n*20|0)+16>>2]=0;a[w+(n*20|0)+1>>0]=0}else n=Di(o,2,s,Q,p)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){w=c[t>>2]|0;a[w+(n*20|0)+1>>0]=-3;c[w+(n*20|0)+16>>2]=q}n=c[r>>2]|0;if((n|0)>0)b[(c[t>>2]|0)+((n+-1|0)*20|0)+2>>1]=1;p=ed(o,6,848)|0;n=1<<s;w=o+152|0;c[w>>2]=c[w>>2]|n;do if((s|0)!=1){if(!(a[(c[(c[(c[o>>2]|0)+16>>2]|0)+(s<<4)+4>>2]|0)+9>>0]|0))break;w=o+156|0;c[w>>2]=c[w>>2]|n}while(0);if(a[$>>0]|0)break;c[p+4>>2]=s;n=y+28|0;c[p+8>>2]=c[n>>2];c[p+12>>2]=Q;if((a[(c[o>>2]|0)+81>>0]|0)==0?(Ei(o,(c[t>>2]|0)+40|0,c[y>>2]|0,0),a[$>>0]|0):0)break;if(P)a[p+20>>0]=109;c[p+28>>2]=c[n>>2];c[p+32>>2]=s;a[p+21>>0]=-3;c[p+36>>2]=(b[x>>1]|0)+1;c[p+68>>2]=b[x>>1];b[K>>1]=0;c[A>>2]=1;c[B>>2]=1;hd(o,da)}}while(0);if((u|0)==94)c[N>>2]=0;b[H>>1]=v;c[I>>2]=f;if(a[$>>0]|0){u=116;break}l=id(O,j,k,ba)|0;z=z+1|0;if(!(z>>>0<50&(l|0)==17)){u=116;break}else l=17}if((u|0)==45){c[W>>2]=h;cd(da,31246,W);u=50}else if((u|0)==47){c[X>>2]=h;cd(da,31276,X);u=50}else if((u|0)==49){c[Z>>2]=h;cd(da,31312,Z);u=50}else if((u|0)==63){c[_>>2]=i;l=dd(f,31333,_)|0;c[ba>>2]=l;l=1;u=119}else if((u|0)==79){c[Y>>2]=n;l=dd(f,31374,Y)|0;c[ba>>2]=l;l=1;u=119}else if((u|0)==116)if(!l)u=117;else u=119;if((u|0)==50){l=da+4|0;n=c[l>>2]|0;if(!n){l=1;u=119}else{c[ba>>2]=n;c[l>>2]=0;l=1;u=119}}else if((u|0)==117)if(!(a[$>>0]|0)){c[m>>2]=O;o=0}else{l=0;u=119}do if((u|0)==119)if(M){r=c[N>>2]|0;do if(r|0){s=r+20|0;n=c[s>>2]|0;if((n|0)<832317811)switch(n|0){case 770837923:{u=122;break}default:{}}else switch(n|0){case 832317811:{u=122;break}default:{}}if((u|0)==122)kc(r)|0;p=c[r>>2]|0;kb(p,r);q=c[r+4>>2]|0;o=r+8|0;n=c[o>>2]|0;if(!q)c[p+4>>2]=n;else{c[q+8>>2]=n;n=c[o>>2]|0}if(n|0)c[n+4>>2]=q;c[s>>2]=1443283912;c[r>>2]=0;if(p|0){if(c[p+480>>2]|0){Xd(p,r);break}m=r;if((c[p+304>>2]|0)>>>0<=m>>>0?(c[p+308>>2]|0)>>>0>m>>>0:0){m=p+300|0;c[r>>2]=c[m>>2];c[m>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{m=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(!aa){if(c[S>>2]|0){Xd(f,O);o=l;break}m=O;if((c[T>>2]|0)>>>0<=m>>>0?(c[U>>2]|0)>>>0>m>>>0:0){c[O>>2]=c[V>>2];c[V>>2]=O;o=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](O);o=l;break}else{o=Wa[c[29352>>2]&127](O)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](O);o=l;break}}else o=l;while(0);l=c[ba>>2]|0;ba=(l|0)==0;c[ca>>2]=l;Vb(f,o,ba?0:31408,ca);do if(!ba){if(!aa){if(c[S>>2]|0){Xd(f,l);break}ca=l;if((c[T>>2]|0)>>>0<=ca>>>0?(c[U>>2]|0)>>>0>ca>>>0:0){c[l>>2]=c[V>>2];c[V>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);n=c[da>>2]|0;l=c[da+64>>2]|0;do if(l|0){if(n|0){if(c[n+480>>2]|0){Xd(n,l);break}ca=l;if((c[n+304>>2]|0)>>>0<=ca>>>0?(c[n+308>>2]|0)>>>0>ca>>>0:0){ca=n+300|0;c[l>>2]=c[ca>>2];c[ca>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[da+68>>2]|0;if(l|0)ri(n,l);l=da+24|0;if(n|0){da=n+272|0;c[da>>2]=(c[da>>2]|0)-(d[l>>0]|0)}a[l>>0]=0;if((o|0)==3082|(a[$>>0]|0)!=0){og(f);f=7;Ra=ea;return f|0}else{f=c[f+68>>2]&o;Ra=ea;return f|0}return 0}function bd(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+64|0;E=F+48|0;D=F+32|0;C=F+24|0;A=F+16|0;y=F+8|0;w=F;B=F+56|0;s=c[f>>2]|0;p=s+24|0;k=c[p>>2]|0;a:do if((k&16|0)==0?(a[s+165>>0]|0)==0:0){n=f+4|0;l=(k&1|0)==0;m=s+16|0;v=c[(c[m>>2]|0)+12>>2]|0;a[s+78>>0]=a[v+77>>0]|0;if(!((b[v+78>>1]&1)==0?(j=eh(s,0,n,0)|0,(j|0)!=0):0))x=5;b:do if((x|0)==5){j=c[s+20>>2]|0;if((j|0)>1)do{k=j;j=j+-1|0;if((b[(c[(c[m>>2]|0)+(j<<4)+12>>2]|0)+78>>1]&1)==0?(o=eh(s,j,n,0)|0,o|0):0){j=o;break b}}while((k|0)>2);if(l)c[p>>2]=c[p>>2]&-2;if(!(a[s+89>>0]|0))break a;c[p>>2]=c[p>>2]|16;break a}while(0);c[f+12>>2]=j;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;f=0;Ra=F;return f|0}while(0);j=Sd(s,h,i)|0;do if(!j){c:do if(!(a[f+25>>0]|0)){m=c[s+348>>2]|0;if(!m){k=s+340|0;j=s+344|0}else{k=a[h>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=h;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[s+336>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;d:do if(!k)j=59292;else{o=d[208+(d[h>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-o|0;if(!(v<<24>>24==0|(l|0)!=0)){n=h;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0))}if(!l)break d;if(!k){j=59292;break}}}while(0);l=c[j+8>>2]|0;do if((h|0)==0|(l|0)!=0)r=l;else{j=a[h>>0]|0;e:do if(!(j<<24>>24)){j=36975;x=32}else{v=j&255;j=208+v|0;do if((v|32|0)==112){j=a[h+1>>0]|0;if(!(j<<24>>24)){j=36976;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==114){j=a[h+2>>0]|0;if(!(j<<24>>24)){j=36977;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==97){j=a[h+3>>0]|0;if(!(j<<24>>24)){j=36978;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==103){j=a[h+4>>0]|0;if(!(j<<24>>24)){j=36979;x=32;break e}j=j&255;if((j|32|0)!=109){k=109;j=208+j|0;break}j=a[h+5>>0]|0;if(!(j<<24>>24)){j=36980;x=32;break e}j=j&255;if((j|32|0)!=97){k=97;j=208+j|0;break}j=a[h+6>>0]|0;if(!(j<<24>>24)){j=36981;x=32;break e}if(j<<24>>24==95)break e;else{k=95;j=208+(j&255)|0}}else k=103}else k=97}else k=114}else k=112;while(0);r=d[j>>0]|0;q=k;x=36}while(0);if((x|0)==32){r=0;q=a[208+(d[j>>0]|0)>>0]|0;x=36}if((x|0)==36?(r|0)!=(q&255|0):0){r=l;break}p=h+7|0;v=a[p>>0]|0;q=d[208+(v&255)>>0]|0;f:do if(!(v<<24>>24)){k=0;l=59;while(1){j=(k+l|0)/2|0;m=q-(d[208+(d[c[4544+(j<<4)>>2]>>0]|0)>>0]|0)|0;if(!m)break f;v=(m|0)<0;k=v?k:j+1|0;l=v?j+-1|0:l;if((k|0)>(l|0))break c}}else{n=0;o=59;while(1){j=(n+o|0)/2|0;l=c[4544+(j<<4)>>2]|0;k=q-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!k){m=p;do{m=m+1|0;l=l+1|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0));if(!k)break f}v=(k|0)<0;n=v?n:j+1|0;o=v?j+-1|0:o;if((n|0)>(o|0))break c}}while(0);if(!(a[4544+(j<<4)+5>>0]&48))break c;r=Hi(s,h,29972,4544+(j<<4)|0,0)|0}while(0);if(r|0){s=c[r>>2]|0;c[B>>2]=0;u=c[f>>2]|0;v=r+16|0;j=c[v>>2]|0;g:do if(!j){t=c[s+4>>2]|0;if(!((t|0)!=0?(t|0)!=(c[s+8>>2]|0):0))x=53;h:do if((x|0)==53){t=(u|0)==0;i:do if(t){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](80)|0;x=76;break}j=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){q=c[14978]|0;p=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;o=L()|0;c[14768]=((o|0)<0|(o|0)==0&p>>>0<=q>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k)break h;j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0)break h}else{do if((e[u+276>>1]|0)>=80){k=u+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=76;break i}k=u+296|0;j=c[k>>2]|0;if(!j){j=u+292|0;break}else{c[k>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=76;break i}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,80,0)|0;x=76}while(0);if((x|0)==76)if(!j)break;else k=j;j=k;l=j+80|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));n=c[r+4>>2]|0;j:do if(!n)x=105;else{o=(Eu(n)|0)+1|0;k:do if(t){q=Sv(o|0,0,-1,-1)|0;p=L()|0;do if(!(p>>>0>0|(p|0)==0&q>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;x=103;break k}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){q=c[14978]|0;p=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&p>>>0<=q>>>0)&1}l=Wa[c[29340>>2]&127](j)|0;if(!l)break;j=Wa[c[29352>>2]&127](l)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){p=l;break k}c[14987]=j;p=l;break k}while(0);c[k>>2]=0;break j}else{do if(!(c[u+272>>2]|0)){do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<o>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=103;break k}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=103;break k}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}else{if(!(a[u+81>>0]|0))break;c[k>>2]=0;x=106;break j}while(0);j=_d(u,o,0)|0;x=103}while(0);if((x|0)==103)if(!j){x=105;break}else p=j;ew(p|0,n|0,o|0)|0;c[k>>2]=p;c[v>>2]=k;c[k+32>>2]=1;c[k+72>>2]=c[(c[u+16>>2]|0)+12>>2];b[k+40>>1]=-1;n=(Eu(p)|0)+1|0;l:do if(t){q=Sv(n|0,0,-1,-1)|0;o=L()|0;if(o>>>0>0|(o|0)==0&q>>>0>2147483390)j=0;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](n)|0;x=138;break}j=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){q=c[14978]|0;o=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&o>>>0<=q>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break}l=Wa[c[29352>>2]&127](j)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){x=139;break}c[14987]=l;x=139}}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0){j=0;break}}else{do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<n>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=138;break l}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=138;break l}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,n,0)|0;x=138}while(0);if((x|0)==138)if(!j)j=0;else x=139;if((x|0)==139)ew(j|0,p|0,n|0)|0;q=k+56|0;x=c[q>>2]|0;n=(x<<2)+8|0;o=c[f>>2]|0;if((x+3|0)>=(c[o+116>>2]|0)){c[w>>2]=c[k>>2];cd(f,38221,w)}p=k+60|0;l=c[p>>2]|0;m:do if(!l){if(c[o+272>>2]|0){if(a[o+81>>0]|0){x=160;break}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<n>>>0:0))){m=o+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];x=o+284|0;c[x>>2]=(c[x>>2]|0)+1;x=159;break m}m=o+296|0;l=c[m>>2]|0;if(!l){l=o+292|0;break}else{c[m>>2]=c[l>>2];x=o+284|0;c[x>>2]=(c[x>>2]|0)+1;x=159;break m}}else l=o+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(o,n,0)|0;x=159}else{m=l;do if((c[o+304>>2]|0)>>>0<=m>>>0){if((c[o+308>>2]|0)>>>0<=m>>>0)break;if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<n>>>0:0))){x=169;break m}l=Zd(o,l,n,0)|0;x=159;break m}while(0);l=Zd(o,l,n,0)|0;x=159}while(0);if((x|0)==159)if(!l)x=160;else x=169;n:do if((x|0)==160){if(!j)break;if(c[o+480>>2]|0){Xd(o,j);break}l=j;do if((c[o+304>>2]|0)>>>0<=l>>>0){if((c[o+308>>2]|0)>>>0<=l>>>0)break;w=o+300|0;c[j>>2]=c[w>>2];c[w>>2]=j;break n}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{w=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else if((x|0)==169){o=c[q>>2]|0;w=o+1|0;c[q>>2]=w;c[l+(o<<2)>>2]=j;c[l+(w<<2)>>2]=0;c[p>>2]=l}while(0);w=c[q>>2]|0;m=(w<<2)+8|0;n=c[f>>2]|0;if((w+3|0)>=(c[n+116>>2]|0)){c[y>>2]=c[k>>2];cd(f,38221,y)}j=c[p>>2]|0;o:do if(!j){if(c[n+272>>2]|0){if(a[n+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){j=n+300|0;l=c[j>>2]|0;if(l|0){c[j>>2]=c[l>>2];z=n+284|0;c[z>>2]=(c[z>>2]|0)+1;z=l;x=189;break o}j=n+296|0;l=c[j>>2]|0;if(!l){j=n+292|0;break}else{c[j>>2]=c[l>>2];z=n+284|0;c[z>>2]=(c[z>>2]|0)+1;z=l;x=189;break o}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}z=_d(n,m,0)|0;x=189}else{l=j;do if((c[n+304>>2]|0)>>>0<=l>>>0){if((c[n+308>>2]|0)>>>0<=l>>>0)break;if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){x=190;break o}z=Zd(n,j,m,0)|0;x=189;break o}while(0);z=Zd(n,j,m,0)|0;x=189}while(0);if((x|0)==189?z|0:0){j=z;x=190}if((x|0)==190){y=c[q>>2]|0;z=y+1|0;c[q>>2]=z;c[j+(y<<2)>>2]=0;c[j+(z<<2)>>2]=0;c[p>>2]=j}n=c[k>>2]|0;p:do if(!n)o=0;else{o=(Eu(n)|0)+1|0;q:do if(t){z=Sv(o|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){o=0;break p}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;x=216;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){z=c[14978]|0;y=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&y>>>0<=z>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){o=0;break p}l=Wa[c[29352>>2]&127](j)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0){o=0;break p}}else{do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0<o>>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=216;break q}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=216;break q}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,o,0)|0;x=216}while(0);if((x|0)==216)if(!j){o=0;break}ew(j|0,n|0,o|0)|0;o=j}while(0);z=c[q>>2]|0;m=(z<<2)+8|0;n=c[f>>2]|0;if((z+3|0)>=(c[n+116>>2]|0)){c[A>>2]=c[k>>2];cd(f,38221,A)}j=c[p>>2]|0;r:do if(!j){if(c[n+272>>2]|0){if(a[n+81>>0]|0){x=238;break}}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){l=n+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=n+284|0;c[x>>2]=(c[x>>2]|0)+1;x=237;break r}l=n+296|0;j=c[l>>2]|0;if(!j){j=n+292|0;break}else{c[l>>2]=c[j>>2];x=n+284|0;c[x>>2]=(c[x>>2]|0)+1;x=237;break r}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(n,m,0)|0;x=237}else{l=j;do if((c[n+304>>2]|0)>>>0<=l>>>0){if((c[n+308>>2]|0)>>>0<=l>>>0)break;if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0<m>>>0:0))){x=247;break r}j=Zd(n,j,m,0)|0;x=237;break r}while(0);j=Zd(n,j,m,0)|0;x=237}while(0);if((x|0)==237)if(!j)x=238;else x=247;s:do if((x|0)==238){if(!o)break;if(c[n+480>>2]|0){Xd(n,o);break}j=o;do if((c[n+304>>2]|0)>>>0<=j>>>0){if((c[n+308>>2]|0)>>>0<=j>>>0)break;A=n+300|0;c[o>>2]=c[A>>2];c[A>>2]=o;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{A=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else if((x|0)==247){z=c[q>>2]|0;A=z+1|0;c[q>>2]=A;c[j+(z<<2)>>2]=o;c[j+(A<<2)>>2]=0;c[p>>2]=j}while(0);if(!(Ai(u,k,r,c[s+8>>2]|0,B)|0)){j=c[v>>2]|0;break g}k=c[B>>2]|0;c[C>>2]=k;cd(f,31408,C);t:do if(k|0){do if(!t){if(c[u+480>>2]|0){Xd(u,k);break t}j=k;if((c[u+304>>2]|0)>>>0>j>>>0)break;if((c[u+308>>2]|0)>>>0<=j>>>0)break;C=u+300|0;c[k>>2]=c[C>>2];c[C>>2]=k;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{C=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);j=c[v>>2]|0;if(!j)break h;C=j+36|0;c[C>>2]=c[C>>2]|2;do if(t)x=263;else{if(!(c[u+480>>2]|0)){x=263;break}Vi(u,j)}while(0);do if((x|0)==263){B=j+32|0;C=(c[B>>2]|0)+-1|0;c[B>>2]=C;if(C|0)break;Vi(u,j)}while(0);c[v>>2]=0;break h}while(0);if((x|0)==105?(c[k>>2]=0,!t):0)x=106;if((x|0)==106){if(c[u+480>>2]|0){Xd(u,k);break}C=k;if((c[u+304>>2]|0)>>>0<=C>>>0?(c[u+308>>2]|0)>>>0>C>>>0:0){C=u+300|0;c[k>>2]=c[C>>2];c[C>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{C=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);break c}while(0);f=j;Ra=F;return f|0}}while(0);if(!(g&2)){a[f+17>>0]=1;break}else{f=0;Ra=F;return f|0}}else{if(!(c[j+56>>2]|0)){f=j;Ra=F;return f|0}if(!(a[f+25>>0]|0)){f=j;Ra=F;return f|0}}while(0);j=(g&1|0)==0?36996:36983;if(!i){c[E>>2]=j;c[E+4>>2]=h;cd(f,37020,E);f=0;Ra=F;return f|0}else{c[D>>2]=j;c[D+4>>2]=i;c[D+8>>2]=h;cd(f,37010,D);f=0;Ra=F;return f|0}return 0}function cd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+112|0;k=n+88|0;o=n;m=c[b>>2]|0;c[o>>2]=e;g=c[m+108>>2]|0;i=k+4|0;c[i>>2]=n+16;c[k>>2]=m;c[k+8>>2]=70;f=k+12|0;c[f>>2]=g;g=k+16|0;c[g>>2]=0;j=k+20|0;a[j>>0]=0;h=k+21|0;a[h>>0]=1;tb(k,d,o);e=c[i>>2]|0;if(((e|0)!=0?(a[e+(c[g>>2]|0)>>0]=0,(c[f>>2]|0)!=0):0)?(a[h>>0]&4)==0:0)f=$d(k)|0;else f=c[i>>2]|0;if(((a[j>>0]|0)==7?(l=m+81|0,(a[l>>0]|0)==0):0)?(a[m+82>>0]|0)==0:0){a[l>>0]=1;if((c[m+180>>2]|0)>0)c[m+264>>2]=1;e=m+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[m+236>>2]|0;if(e|0)c[e+12>>2]=7}if(!(a[m+85>>0]|0)){e=b+36|0;c[e>>2]=(c[e>>2]|0)+1;e=b+4|0;d=c[e>>2]|0;do if(d|0){if(c[m+480>>2]|0){Xd(m,d);break}o=d;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);c[e>>2]=f;c[b+12>>2]=1;Ra=n;return}if(!f){Ra=n;return}if(c[m+480>>2]|0){Xd(m,f);Ra=n;return}o=f;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;Ra=n;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=n;return}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=n;return}}function dd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=Ra;Ra=Ra+112|0;h=f+88|0;i=f;c[i>>2]=e;g=c[b+108>>2]|0;c[h+4>>2]=f+16;c[h>>2]=b;c[h+8>>2]=70;c[h+12>>2]=g;c[h+16>>2]=0;g=h+20|0;a[g>>0]=0;a[h+21>>0]=1;tb(h,d,i);e=yb(h)|0;if((a[g>>0]|0)!=7){Ra=f;return e|0}d=b+81|0;if(a[d>>0]|0){Ra=f;return e|0}if(a[b+82>>0]|0){Ra=f;return e|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){Ra=f;return e|0}c[d+12>>2]=7;Ra=f;return e|0}function ed(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=d+108|0;h=c[o>>2]|0;n=d+112|0;i=c[n>>2]|0;if((h+f|0)>(i|0)){m=c[d+12>>2]|0;k=(i|0)==0;h=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;j=L()|0;h=k?51:h;j=k?0:j;k=c[m>>2]|0;l=c[k+128>>2]|0;i=((l|0)<0)<<31>>31;if((j|0)>(i|0)|(j|0)==(i|0)&h>>>0>l>>>0){h=k+81|0;if(a[h>>0]|0){o=0;return o|0}if(a[k+82>>0]|0){o=0;return o|0}a[h>>0]=1;if((c[k+180>>2]|0)>0)c[k+264>>2]=1;h=k+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[k+236>>2]|0;if(!h){o=0;return o|0}c[h+12>>2]=7;o=0;return o|0}l=d+104|0;i=c[l>>2]|0;d=Yv(h|0,j|0,20,0)|0;j=L()|0;a:do if(!i){if(c[k+272>>2]|0){if(a[k+81>>0]|0){o=0;return o|0}}else{do if(!(j>>>0>0|((j|0)==0?d>>>0>(e[k+276>>1]|0)>>>0:0))){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];d=k+284|0;c[d>>2]=(c[d>>2]|0)+1;d=27;break a}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];d=k+284|0;c[d>>2]=(c[d>>2]|0)+1;d=27;break a}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}i=_d(k,d,j)|0;d=27}else{h=i;if((c[k+304>>2]|0)>>>0<=h>>>0?(c[k+308>>2]|0)>>>0>h>>>0:0){if(!(j>>>0>0|((j|0)==0?d>>>0>(e[k+276>>1]|0)>>>0:0))){h=k;d=29;break}i=Zd(k,i,d,j)|0;d=27;break}i=Zd(k,i,d,j)|0;d=27}while(0);do if((d|0)==27)if(i){h=c[m>>2]|0;if(!h){h=i;d=31;break}else{d=29;break}}else{o=0;return o|0}while(0);if((d|0)==29){k=i;if((c[h+304>>2]|0)>>>0<=k>>>0?(c[h+308>>2]|0)>>>0>k>>>0:0)h=e[h+276>>1]|0;else{h=i;d=31}}if((d|0)==31){i=h;h=Wa[c[29352>>2]&127](h)|0}c[m+48>>2]=h;c[n>>2]=(h>>>0)/20|0;c[l>>2]=i;h=c[o>>2]|0}else i=c[d+104>>2]|0;l=i+(h*20|0)|0;if((f|0)>0){j=l;k=0;h=g;while(1){g=a[h>>0]|0;a[j>>0]=g;c[j+4>>2]=a[h+1>>0];n=a[h+2>>0]|0;i=n<<24>>24;d=j+8|0;c[d>>2]=i;if(n<<24>>24>0?(a[4368+(g&255)>>0]&1)!=0:0)c[d>>2]=(c[o>>2]|0)+i;c[j+12>>2]=a[h+3>>0];a[j+1>>0]=0;c[j+16>>2]=0;b[j+2>>1]=0;k=k+1|0;if((k|0)==(f|0))break;else{j=j+20|0;h=h+4|0}}h=c[o>>2]|0}c[o>>2]=h+f;o=l;return o|0}function fd(b,d){b=b|0;d=d|0;var e=0,f=0;e=1<<d;f=b+152|0;c[f>>2]=c[f>>2]|e;if((d|0)==1)return;if(!(a[(c[(c[(c[b>>2]|0)+16>>2]|0)+(d<<4)+4>>2]|0)+9>>0]|0))return;f=b+156|0;c[f>>2]=c[f>>2]|e;return}function gd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[b>>2]|0;if(a[g+81>>0]|0){if((f|0)==-12)return;kg(g,f,e);return}if((d|0)<0)d=(c[b+108>>2]|0)+-1|0;g=c[b+104>>2]|0;h=g+(d*20|0)|0;if((f|0)<=-1?(i=g+(d*20|0)+1|0,(a[i>>0]|0)==0):0){if((f|0)==-3){c[g+(d*20|0)+16>>2]=e;a[i>>0]=-3;return}if(!e)return;c[g+(d*20|0)+16>>2]=e;a[i>>0]=f;if((f|0)!=-12)return;f=e+12|0;c[f>>2]=(c[f>>2]|0)+1;return}Ei(b,h,e,f);return}function hd(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;m=F;E=c[f>>2]|0;D=b[g+196>>1]|0;j=D<<16>>16;i=c[g+44>>2]|0;B=c[g+40>>2]|0;c[m>>2]=c[g+96>>2];i=B+i|0;i=i+((B|0)==0&(i|0)>0&1)|0;k=((c[f+108>>2]|0)*20|0)+7&-8;n=(c[f+104>>2]|0)+k|0;k=(c[g+48>>2]|0)-k&-8;l=((k|0)<0)<<31>>31;Fi(f,m);if(!(a[g+20>>0]|0))h=0;else h=((a[g+21>>0]|0)!=0&1)<<7&65535;C=f+149|0;p=(d[C>>0]|d[C+1>>0]<<8)&-129|h;a[C>>0]=p;a[C+1>>0]=p>>8;y=g+199|0;i=(i|0)<10&(a[y>>0]|0)!=0?10:i;p=p&-4;a[C>>0]=p;a[C+1>>0]=p>>8;p=i*40|0;t=(l|0)<0|(l|0)==0&k>>>0<p>>>0;q=Tv(k|0,l|0,p|0,0)|0;z=L()|0;x=t?k:q;l=t?l:z;z=f+88|0;c[z>>2]=t?0:n+q|0;q=j*40|0;s=(l|0)<0|(l|0)==0&x>>>0<q>>>0;r=Tv(x|0,l|0,q|0,0)|0;v=L()|0;x=s?x:r;v=s?l:v;t=Sv((s?q:0)|0,(s?0:0)|0,(t?p:0)|0,(t?0:0)|0)|0;l=L()|0;w=f+100|0;c[w>>2]=s?0:n+r|0;r=Sv(c[m>>2]<<2|0,0,7,0)|0;r=r&-8;s=(L()|0)&1;u=(v|0)<(s|0)|(v|0)==(s|0)&x>>>0<r>>>0;A=Tv(x|0,v|0,r|0,s|0)|0;k=L()|0;x=u?x:A;k=u?v:k;m=Sv(t|0,l|0,(u?r:0)|0,(u?s:0)|0)|0;l=L()|0;t=f+92|0;c[t>>2]=u?0:n+A|0;A=B<<2;u=Sv(A|0,0,7,0)|0;u=u&-8;v=(L()|0)&1;h=(k|0)<(v|0)|(k|0)==(v|0)&x>>>0<u>>>0;k=Tv(x|0,k|0,u|0,v|0)|0;L()|0;l=Sv(m|0,l|0,(h?u:0)|0,(h?v:0)|0)|0;m=L()|0;x=f+96|0;c[x>>2]=h?0:n+k|0;if(!((l|0)==0&(m|0)==0)){a:do if(c[E+272>>2]|0)if(!(a[E+81>>0]|0))o=15;else n=0;else{do if(!(m>>>0>0|((m|0)==0?l>>>0>(e[E+276>>1]|0)>>>0:0))){h=E+300|0;k=c[h>>2]|0;if(k|0){c[h>>2]=c[k>>2];n=E+284|0;c[n>>2]=(c[n>>2]|0)+1;n=k;break a}h=E+296|0;k=c[h>>2]|0;if(!k){h=E+292|0;break}else{c[h>>2]=c[k>>2];n=E+284|0;c[n>>2]=(c[n>>2]|0)+1;n=k;break a}}else h=E+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;o=15}while(0);if((o|0)==15)n=_d(E,l,m)|0;c[f+192>>2]=n;h=E+81|0;if(!(a[h>>0]|0)){k=c[z>>2]|0;if(!k)if(m>>>0<0|(m|0)==0&l>>>0<p>>>0)k=0;else{l=Tv(l|0,m|0,p|0,0)|0;k=n+l|0;m=L()|0}c[z>>2]=k;k=c[w>>2]|0;if(!k)if((m|0)<0|(m|0)==0&l>>>0<q>>>0)k=0;else{l=Tv(l|0,m|0,q|0,0)|0;k=n+l|0;m=L()|0}c[w>>2]=k;k=c[t>>2]|0;if(!k)if((m|0)<(s|0)|(m|0)==(s|0)&l>>>0<r>>>0)k=0;else{l=Tv(l|0,m|0,r|0,s|0)|0;k=n+l|0;m=L()|0}c[t>>2]=k;k=c[x>>2]|0;if(!k)if((m|0)<(v|0)|(m|0)==(v|0)&l>>>0<u>>>0)k=0;else{k=Tv(l|0,m|0,u|0,v|0)|0;L()|0;k=n+k|0}c[x>>2]=k}}else h=E+81|0;g=g+216|0;c[f+128>>2]=c[g>>2];c[g>>2]=0;g=(d[C>>0]|d[C+1>>0]<<8)&-13|a[y>>0]<<2&12;a[C>>0]=g;a[C+1>>0]=g>>8;if(a[h>>0]|0){b[f+16>>1]=0;c[f+28>>2]=0;c[f+24>>2]=0;E=f+20|0;c[E>>2]=770837923;E=f+36|0;c[E>>2]=-1;E=f+40|0;c[E>>2]=0;E=f+146|0;a[E>>0]=2;E=f+44|0;c[E>>2]=0;E=f+32|0;c[E>>2]=1;E=f+147|0;a[E>>0]=-1;E=f+48|0;c[E>>2]=0;E=f+64|0;f=E;c[f>>2]=0;E=E+4|0;c[E>>2]=0;Ra=F;return}c[f+28>>2]=B;b[f+16>>1]=D;if(D<<16>>16>0){h=c[w>>2]|0;while(1){c[h+32>>2]=E;b[h+8>>1]=1;c[h+24>>2]=0;if((j|0)>1){j=j+-1|0;h=h+40|0}else break}}c[f+24>>2]=i;if((i|0)>0){h=c[z>>2]|0;while(1){c[h+32>>2]=E;b[h+8>>1]=128;c[h+24>>2]=0;if((i|0)>1){i=i+-1|0;h=h+40|0}else break}}gw(c[x>>2]|0,0,A|0)|0;E=f+20|0;c[E>>2]=770837923;E=f+36|0;c[E>>2]=-1;E=f+40|0;c[E>>2]=0;E=f+146|0;a[E>>0]=2;E=f+44|0;c[E>>2]=0;E=f+32|0;c[E>>2]=1;E=f+147|0;a[E>>0]=-1;E=f+48|0;c[E>>2]=0;E=f+64|0;f=E;c[f>>2]=0;E=E+4|0;c[E>>2]=0;Ra=F;return}function id(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;n=r+16|0;m=r+8|0;o=r;q=f+16|0;l=c[q>>2]|0;j=c[l+88>>2]|0;b[j+48>>1]=4;j=j+40|0;c[j>>2]=g;c[j+4>>2]=h;j=l+36|0;if((c[j>>2]|0)>4){c[j>>2]=4;k=Rg(l)|0}else k=Gc(c[q>>2]|0)|0;if((k|0)!=100){j=c[q>>2]|0;if(!j){p=0;q=k;c[i>>2]=p;Ra=r;return q|0}k=gc(j)|0;c[q>>2]=0;j=c[f+20>>2]|0;if(!k){p=m;c[p>>2]=g;c[p+4>>2]=h;p=dd(j,36955,m)|0;q=1;c[i>>2]=p;Ra=r;return q|0}else{p=pd(j)|0;c[n>>2]=p;p=dd(j,31408,n)|0;q=k;c[i>>2]=p;Ra=r;return q|0}}l=c[c[l+96>>2]>>2]|0;j=b[f+8>>1]|0;a:do if((e[l+58>>1]|0)>(j&65535)){j=j&65535;k=c[l+88+(j<<2)>>2]|0;if(k>>>0<12){j=c[f+20>>2]|0;switch(k|0){case 7:{k=36942;break a}case 0:{p=9;break a}default:{}}k=36947;break}c[f+4>>2]=c[l+88+((b[l+56>>1]|0)+j<<2)>>2];if(k>>>0>127)j=(k+-12|0)>>>1;else j=d[3520+k>>0]|0;c[f>>2]=j;p=c[l+40>>2]|0;c[f+12>>2]=p;q=p+1|0;a[q>>0]=a[q>>0]|16;a[(c[p+8>>2]|0)+11>>0]=1;p=0;q=0;c[i>>2]=p;Ra=r;return q|0}else{j=c[f+20>>2]|0;p=9}while(0);if((p|0)==9)k=36937;c[o>>2]=k;p=dd(j,36908,o)|0;gc(c[q>>2]|0)|0;c[q>>2]=0;q=1;c[i>>2]=p;Ra=r;return q|0}function jd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=Ra;Ra=Ra+16|0;h=m;if(!b){c[h>>2]=58063;c[h+4>>2]=91595;c[h+8>>2]=31517;Db(21,32001,h);l=21;Ra=m;return l|0}k=c[b+20>>2]|0;i=b+16|0;j=c[i>>2]|0;do if((f|e|0)>=0?(n=Sv(f|0,((f|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0,p=L()|0,h=c[b>>2]|0,o=((h|0)<0)<<31>>31,!((p|0)>(o|0)|(p|0)==(o|0)&n>>>0>h>>>0)):0)if(!j){h=4;l=24}else{h=c[b+12>>2]|0;p=c[h+8>>2]|0;c[(c[p+4>>2]|0)+4>>2]=c[p>>2];h=Za[g&127](h,(c[b+4>>2]|0)+f|0,e,d)|0;if((h|0)!=4){c[j+40>>2]=h;c[k+64>>2]=h;if(h|0){l=27;break}if(!(c[k+260>>2]|0)){h=0;break}Ne(k,0);h=0;break}f=j+20|0;h=c[f>>2]|0;if((h|0)<832317811)switch(h|0){case 770837923:{l=8;break}default:{}}else switch(h|0){case 832317811:{l=8;break}default:{}}if((l|0)==8)kc(j)|0;d=c[j>>2]|0;kb(d,j);e=c[j+4>>2]|0;b=j+8|0;h=c[b>>2]|0;if(!e)c[d+4>>2]=h;else{c[e+8>>2]=h;h=c[b>>2]|0}if(h|0)c[h+4>>2]=e;c[f>>2]=1443283912;c[j>>2]=0;do if(d){if(c[d+480>>2]|0){Xd(d,j);break}p=j;if((c[d+304>>2]|0)>>>0<=p>>>0?(c[d+308>>2]|0)>>>0>p>>>0:0){p=d+300|0;c[j>>2]=c[p>>2];c[p>>2]=j}else l=20}else l=20;while(0);do if((l|0)==20)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0;h=4;l=24}else{h=1;l=24}while(0);if((l|0)==24){c[k+64>>2]=h;l=27}if((l|0)==27)Ne(k,h);if((h|0)==3082|(a[k+81>>0]|0)!=0){og(k);p=7;Ra=m;return p|0}else{p=c[k+68>>2]&h;Ra=m;return p|0}return 0}function kd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(!(a[b>>0]|0)){e=cg(b,c,d,e,0)|0;return e|0}else{e=Gi(b,c,d,e)|0;return e|0}return 0}function ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+32|0;j=k+16|0;f=k;h=k+20|0;if(!b){c[f>>2]=58063;c[f+4>>2]=91693;c[f+8>>2]=31517;Db(21,32001,f);j=21;Ra=k;return j|0}i=c[b+20>>2]|0;if(!(c[b+16>>2]|0))f=4;else{f=id(b,d,e,h)|0;do if(f|0?(g=c[h>>2]|0,h=(g|0)==0,c[j>>2]=g,Vb(i,f,h?0:31408,j),!h):0){if(i|0){if(c[i+480>>2]|0){Xd(i,g);break}j=g;if((c[i+304>>2]|0)>>>0<=j>>>0?(c[i+308>>2]|0)>>>0>j>>>0:0){j=i+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);j=7;Ra=k;return j|0}else{j=c[i+68>>2]&f;Ra=k;return j|0}return 0}function md(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;M=Ra;Ra=Ra+16|0;I=M;C=d[e+1>>0]|0;D=d[e>>0]|0;B=e+2|0;G=(a[e+3>>0]|0)==0;r=0;a:while(1){x=c;c=b;while(1){j=a[c>>0]|0;c=c+1|0;b=j&255;if(j<<24>>24>-1)if(!(j<<24>>24)){E=124;break a}else{g=c;A=b;E=10}else if((j&255)>191){b=d[2736+(b+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);if((b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)){y=c;z=65533}else{g=c;A=b;E=10}}else{g=c;A=b;E=10}if((E|0)==10){E=0;if((A|0)==(D|0)){E=11;break a}else{y=g;z=A}}if((z|0)!=(f|0)){i=z;w=r;u=y;break}if(!(a[B>>0]|0)){E=66;break}c=x+1|0;b=a[x>>0]|0;j=b&255;if((b&255)<=191)if(!(b<<24>>24)){h=1;E=125;break a}else q=c;else{b=d[2736+(j+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);q=c;j=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}c=y+1|0;b=a[y>>0]|0;k=b&255;do if((b&255)<=191){if(b<<24>>24==94){l=y+2|0;p=a[c>>0]|0;c=p&255;if((p&255)>191){c=d[2736+(c+-192)>>0]|0;k=a[l>>0]|0;if((k&-64)<<24>>24==-128){b=c;c=l;do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128)}else{b=c;c=l}n=1;m=0;k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b;break}else{n=1;k=c;c=l}}else n=0;if((k|0)==93){m=(j|0)==93&1;l=c+1|0;p=a[c>>0]|0;k=p&255;if((p&255)>191){c=d[2736+(k+-192)>>0]|0;k=a[l>>0]|0;if((k&-64)<<24>>24==-128){b=c;c=l;do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128)}else{b=c;c=l}k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}else c=l}else m=0}else{b=d[2736+(k+-192)>>0]|0;k=a[c>>0]|0;if((k&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128);n=0;m=0;k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}while(0);p=0;o=m;b:while(1){switch(k|0){case 0:{h=1;E=125;break a}case 93:break b;case 45:{m=a[c>>0]|0;if(m<<24>>24!=93?(p|0)!=0&m<<24>>24!=0:0){b=c+1|0;l=m&255;if((m&255)>191){l=d[2736+(l+-192)>>0]|0;m=a[b>>0]|0;if((m&-64)<<24>>24==-128)do{b=b+1|0;l=l<<6|m&63;m=a[b>>0]|0}while((m&-64)<<24>>24==-128);l=(l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)?65533:l}v=0;t=b;s=j>>>0<p>>>0|j>>>0>l>>>0?o:1}else E=105;break}default:E=105}if((E|0)==105){E=0;v=k;t=c;s=(j|0)==(k|0)?1:o}c=t+1|0;p=a[t>>0]|0;k=p&255;if((p&255)>191){b=d[2736+(k+-192)>>0]|0;k=a[c>>0]|0;if((k&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128);k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}p=v;o=s}if((o|0)==(n|0)){h=1;E=125;break a}else x=q}do if((E|0)==66){E=0;b=y+1|0;c=a[y>>0]|0;i=c&255;if((c&255)<=191)if(!(c<<24>>24)){h=1;E=125;break a}else{w=b;u=b;break}c=d[2736+(i+-192)>>0]|0;i=a[b>>0]|0;if((i&-64)<<24>>24==-128)do{b=b+1|0;c=c<<6|i&63;i=a[b>>0]|0}while((i&-64)<<24>>24==-128);i=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c;w=b;u=b}while(0);r=a[x>>0]|0;c=x+1|0;b=r&255;if((r&255)>191){b=d[2736+(b+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);b=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}do if((i|0)!=(b|0)){if(!G?((b|i)>>>0<128?(a[208+(i&255)>>0]|0)==(a[208+(b&255)>>0]|0):0):0)break;if((i|0)!=(C|0)){h=1;E=125;break a}if(!((u|0)!=(w|0)&(b|0)!=0)){h=1;E=125;break a}}while(0);r=w;b=u}if((E|0)==11){j=x;c:while(1){while(1){A=a[g>>0]|0;g=g+1|0;c=A&255;if((A&255)>191){c=d[2736+(c+-192)>>0]|0;i=a[g>>0]|0;if((i&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|i&63;i=a[g>>0]|0}while((i&-64)<<24>>24==-128);b=g;c=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c}else b=g;g=(c|0)==(C|0);if(!((c|0)==(D|0)|g))break c;if(g)break;else g=b}g=j+1|0;i=a[j>>0]|0;if((i&255)>191){if((a[g>>0]&-64)<<24>>24==-128)do g=g+1|0;while((a[g>>0]&-64)<<24>>24==-128)}else if(!(i<<24>>24)){h=2;E=125;break}j=g;g=b}if((E|0)==125){Ra=M;return h|0}if(!c){f=0;Ra=M;return f|0}do if((c|0)==(f|0)){if(!(a[B>>0]|0)){g=b+1|0;c=a[b>>0]|0;h=c&255;if((c&255)<=191){if(!(c<<24>>24))h=2;else{F=h;H=g;E=43;break}Ra=M;return h|0}c=d[2736+(h+-192)>>0]|0;h=a[g>>0]|0;if((h&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|h&63;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);if((c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)){J=65533;K=g;break}else{F=c;H=g;E=43;break}}i=b+-1|0;c=a[j>>0]|0;if(!(c<<24>>24)){f=2;Ra=M;return f|0}g=j;while(1){h=md(i,g,e,f)|0;if((h|0)!=1){E=125;break}h=g+1|0;if((c&255)>191){g=h;while(1){c=a[g>>0]|0;if((c&-64)<<24>>24==-128)g=g+1|0;else break}}else{g=h;c=a[h>>0]|0}if(!(c<<24>>24)){h=2;E=125;break}}if((E|0)==125){Ra=M;return h|0}}else{F=c;H=b;E=43}while(0);if((E|0)==43)if(F>>>0<129){if(G){a[I>>0]=F;g=0}else{g=F&255;a[I>>0]=F&(~(a[880+g>>0]&32)&255);g=a[208+g>>0]|0;a[I+2>>0]=0}a[I+1>>0]=g;g=j+(Mv(j,I)|0)|0;d:do if(a[g>>0]|0){while(1){g=g+1|0;c=md(H,g,e,f)|0;if((c|0)!=1)break;g=g+(Mv(g,I)|0)|0;if(!(a[g>>0]|0))break d}f=c;Ra=M;return f|0}while(0);f=2;Ra=M;return f|0}else{J=F;K=H}g=j;while(1){h=a[g>>0]|0;g=g+1|0;c=h&255;if(h<<24>>24>-1){if(!(h<<24>>24)){h=2;E=125;break}}else if((h&255)>191){c=d[2736+(c+-192)>>0]|0;h=a[g>>0]|0;if((h&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|h&63;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);c=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c}if((c|0)==(J|0)?(L=md(K,g,e,f)|0,(L|0)!=1):0){h=L;E=125;break}}if((E|0)==125){Ra=M;return h|0}}else if((E|0)==124){f=(a[x>>0]|0)!=0&1;Ra=M;return f|0}else if((E|0)==125){Ra=M;return h|0}return 0}function nd(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+48|0;n=T+24|0;m=T+16|0;l=T+8|0;k=T;J=T+40|0;K=T+36|0;c[K>>2]=0;a:do if(!f){c[k>>2]=31171;Db(21,38253,k)}else{k=c[f+96>>2]|0;b:do if((k|0)<-264537850){switch(k|0){case -1607883113:break;default:break b}R=f+64|0;c[R>>2]=0;if(c[f+260>>2]|0)Ne(f,0);x=(h|0)==0;y=f+32|0;z=f+272|0;A=f+276|0;M=f+81|0;B=f+288|0;N=f+300|0;C=f+296|0;D=f+284|0;E=f+292|0;F=f+82|0;G=f+180|0;H=f+264|0;I=f+236|0;O=f+480|0;P=f+304|0;Q=f+308|0;l=(g|0)==0?59952:g;c:while(1){if(!(a[l>>0]|0)){k=0;w=135;break}c[K>>2]=0;k=qd(f,l,-1,128,0,K,J)|0;do if(!k){p=c[K>>2]|0;if(!p){k=0;l=c[J>>2]|0;break}o=0;m=0;n=0;g=0;l=0;q=0;while(1){k=Gc(p)|0;if(!x){v=(k|0)==100;if(v)if(!n)w=20;else{u=m;t=n;v=g;w=48}else{if((n|0)!=0|(k|0)!=101){w=105;break}if((c[y>>2]&256|0)==0&0==0){w=105;break}else w=20}if((w|0)==20){w=0;n=(p|0)==0;if(n)u=0;else u=e[p+144>>1]|0;m=u<<3|4;d:do if(c[z>>2]|0)if(!(a[M>>0]|0))w=30;else{l=0;w=136;break c}else{do if(0<0|(0==0?(e[A>>1]|0)>>>0<m>>>0:0))l=B;else{l=c[N>>2]|0;if(l|0){c[N>>2]=c[l>>2];c[D>>2]=(c[D>>2]|0)+1;break d}l=c[C>>2]|0;if(!l){l=E;break}c[C>>2]=c[l>>2];c[D>>2]=(c[D>>2]|0)+1;break d}while(0);c[l>>2]=(c[l>>2]|0)+1;w=30}while(0);if((w|0)==30){w=0;l=_d(f,m,0)|0}if(!l){l=0;w=136;break c}do if(u|0){s=p+144|0;t=p+116|0;if(n){gw(l|0,0,u<<2|0)|0;break}r=0;do{q=c[p>>2]|0;do if(r>>>0<(e[s>>1]|0)>>>0){m=c[t>>2]|0;n=m+(r*40|0)|0;e:do if(!n)m=0;else{g=b[m+(r*40|0)+8>>1]|0;do if((g&514)==514){if((a[m+(r*40|0)+10>>0]|0)!=1)break;m=c[m+(r*40|0)+16>>2]|0;break e}while(0);if(g&1){m=0;break}m=Gg(n,1)|0}while(0);n=q+81|0;if(!(a[n>>0]|0))break;if(c[q+180>>2]|0){m=0;break}a[n>>0]=0;c[q+264>>2]=0;m=q+272|0;c[m>>2]=(c[m>>2]|0)+-1;m=0}else m=0;while(0);c[l+(r<<2)>>2]=m;r=r+1|0}while((r|0)!=(u|0))}while(0);if(v){t=1;v=l;q=l;w=48}else{m=u;n=1;g=l;q=l}}if((w|0)==48){w=0;s=v+(u<<2)|0;f:do if((u|0)>0){m=0;while(1){o=(p|0)==0;g:do if(o)n=29576;else{n=c[p+120>>2]|0;do if(n|0){if(m>>>0>=(e[p+144>>1]|0)>>>0)break;n=n+(m*40|0)|0;break g}while(0);n=c[p>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576}while(0);g=b[n+8>>1]|0;do if((g&514)==514){if((a[n+10>>0]|0)!=1){w=58;break}r=c[n+16>>2]|0}else w=58;while(0);do if((w|0)==58){w=0;if(g&1){r=0;break}r=Gg(n,1)|0}while(0);if(!o){g=c[p>>2]|0;o=p+40|0;n=c[o>>2]|0;if((n|0)==3082|(a[g+81>>0]|0)!=0){og(g);n=7}else n=c[g+68>>2]&n;c[o>>2]=n}c[s+(m<<2)>>2]=r;if(!r){p=c[K>>2]|0;if(!p)n=1;else{n=c[p+120>>2]|0;do if(!n)w=70;else{if(m>>>0>=(e[p+144>>1]|0)>>>0){w=70;break}n=n+(m*40|0)|0;g=p}while(0);if((w|0)==70){w=0;n=c[p>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576;g=p}n=b[n+8>>1]&31;g=c[g>>2]|0;r=p+40|0;o=c[r>>2]|0;if((o|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7}else g=c[g+68>>2]&o;c[r>>2]=g}if(!(-1431655766>>>n&1)){w=76;break c}}m=m+1|0;if((m|0)>=(u|0))break f;p=c[K>>2]|0}}else m=0;while(0);c[s+(m<<2)>>2]=0;o=s;m=u;n=t;g=v}if(Za[h&127](i,m,o,g)|0){w=86;break c}}if((k|0)!=100){w=104;break}p=c[K>>2]|0}if((w|0)==104){w=0;p=c[K>>2]|0}else if((w|0)==105)w=0;o=p+20|0;k=c[o>>2]|0;if((k|0)<832317811)switch(k|0){case 770837923:{w=107;break}default:k=0}else switch(k|0){case 832317811:{w=107;break}default:k=0}if((w|0)==107){w=0;k=kc(p)|0}n=c[p>>2]|0;kb(n,p);g=c[p+4>>2]|0;m=p+8|0;l=c[m>>2]|0;if(!g)c[n+4>>2]=l;else{c[g+8>>2]=l;l=c[m>>2]|0}if(l|0)c[l+4>>2]=g;c[o>>2]=1443283912;c[p>>2]=0;do if(n){if(c[n+480>>2]|0){Xd(n,p);break}v=p;if((c[n+304>>2]|0)>>>0<=v>>>0?(c[n+308>>2]|0)>>>0>v>>>0:0){v=n+300|0;c[p>>2]=c[v>>2];c[v>>2]=p}else w=119}else w=119;while(0);do if((w|0)==119)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{w=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}while(0);c[K>>2]=0;l=c[J>>2]|0;while(1)if(!(a[880+(d[l>>0]|0)>>0]&1))break;else l=l+1|0;if(q){if(c[O>>2]|0){Xd(f,q);break}w=q;if((c[P>>2]|0)>>>0<=w>>>0?(c[Q>>2]|0)>>>0>w>>>0:0){c[q>>2]=c[N>>2];c[N>>2]=q;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{w=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}}while(0);if(k){w=135;break}}if((w|0)==76)if((a[M>>0]|0)==0?(a[F>>0]|0)==0:0){a[M>>0]=1;if((c[G>>2]|0)>0)c[H>>2]=1;c[z>>2]=(c[z>>2]|0)+1;m=c[I>>2]|0;if(m){c[m+12>>2]=7;w=136}else w=136}else w=136;else if((w|0)==86){o=c[K>>2]|0;p=o+20|0;k=c[p>>2]|0;if((k|0)<832317811)switch(k|0){case 770837923:{w=87;break}default:{}}else switch(k|0){case 832317811:{w=87;break}default:{}}if((w|0)==87)kc(o)|0;n=c[o>>2]|0;kb(n,o);g=c[o+4>>2]|0;m=o+8|0;k=c[m>>2]|0;if(!g)c[n+4>>2]=k;else{c[g+8>>2]=k;k=c[m>>2]|0}if(k|0)c[k+4>>2]=g;c[p>>2]=1443283912;c[o>>2]=0;do if(n){if(c[n+480>>2]|0){Xd(n,o);break}J=o;if((c[n+304>>2]|0)>>>0<=J>>>0?(c[n+308>>2]|0)>>>0>J>>>0:0){J=n+300|0;c[o>>2]=c[J>>2];c[J>>2]=o}else w=99}else w=99;while(0);do if((w|0)==99)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{J=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[K>>2]=0;c[R>>2]=4;Ne(f,4);k=4}else if((w|0)==135){l=0;p=c[K>>2]|0;w=136}do if((w|0)==136)if(p){q=p+20|0;m=c[q>>2]|0;if((m|0)<832317811)switch(m|0){case 770837923:{w=138;break}default:{}}else switch(m|0){case 832317811:{w=138;break}default:{}}if((w|0)==138)kc(p)|0;g=c[p>>2]|0;kb(g,p);o=c[p+4>>2]|0;n=p+8|0;m=c[n>>2]|0;if(!o)c[g+4>>2]=m;else{c[o+8>>2]=m;m=c[n>>2]|0}if(m|0)c[m+4>>2]=o;c[q>>2]=1443283912;c[p>>2]=0;if(g|0){if(c[g+480>>2]|0){Xd(g,p);break}K=p;if((c[g+304>>2]|0)>>>0<=K>>>0?(c[g+308>>2]|0)>>>0>K>>>0:0){K=g+300|0;c[p>>2]=c[K>>2];c[K>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{K=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if(l|0){if(c[O>>2]|0){Xd(f,l);break}O=l;if((c[P>>2]|0)>>>0<=O>>>0?(c[Q>>2]|0)>>>0>O>>>0:0){c[l>>2]=c[N>>2];c[N>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Q=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if((k|0)==3082|(a[M>>0]|0)!=0){og(f);g=7}else g=c[f+68>>2]&k;k=(j|0)!=0;if(!(k&(g|0)!=0)){if(!k){j=g;Ra=T;return j|0}c[j>>2]=0;j=g;Ra=T;return j|0}n=pd(f)|0;do if(n|0?(S=(Eu(n)|0)+1|0,Q=Sv(S|0,0,-1,-1)|0,P=L()|0,!(P>>>0>0|(P|0)==0&Q>>>0>2147483390)):0){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](S)|0;if(!k)break}else{k=Wa[c[29356>>2]&127](S)|0;if((c[14985]|0)>>>0<S>>>0)c[14985]=S;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){Q=c[14978]|0;P=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&P>>>0<=Q>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}ew(k|0,n|0,S|0)|0;c[j>>2]=k;j=g;Ra=T;return j|0}while(0);c[j>>2]=0;c[R>>2]=7;Ne(f,7);j=7;Ra=T;return j|0}else{if((k|0)<1266094736)switch(k|0){case -264537850:break;default:break b}else switch(k|0){case 1266094736:break;default:break b}c[m>>2]=38244;Db(21,38253,m);break a}while(0);c[l>>2]=50924;Db(21,38253,l)}while(0);c[n>>2]=58063;c[n+4>>2]=118947;c[n+8>>2]=31517;Db(21,32001,n);j=21;Ra=T;return j|0}function od(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return qd(a,b,c,128,0,d,e)|0}function pd(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;g=i+8|0;f=i;a:do if(d){e=c[d+96>>2]|0;b:do if((e|0)>=-264537850)if((e|0)<1266094736)switch(e|0){case -264537850:break b;default:{h=3;break b}}else switch(e|0){case 1266094736:break b;default:{h=3;break b}}else switch(e|0){case -1607883113:break;default:h=3}while(0);if((h|0)==3){c[f>>2]=50924;Db(21,38253,f);c[g>>2]=58063;c[g+4>>2]=157025;c[g+8>>2]=31517;Db(21,32001,g);e=50552;break}if(!(a[d+81>>0]|0)){h=d+64|0;e=c[h>>2]|0;c:do if(!e)e=0;else{g=c[d+260>>2]|0;do if(g){f=b[g+8>>1]|0;if((f&514)==514?(a[g+10>>0]|0)==1:0)e=c[g+16>>2]|0;else{if(f&1)break;e=Gg(g,1)|0}if(e|0)break a;e=c[h>>2]|0}while(0);switch(e|0){case 516:{e=50738;break a}case 100:{e=50760;break a}case 101:{e=50782;break a}default:{e=e&255;if(e>>>0<29)break c;else{e=50724;break a}}}}while(0);if(!(520028155>>>e&1))e=50724;else e=c[22960+(e<<2)>>2]|0}else e=34831}else e=34831;while(0);Ra=i;return e|0}function qd(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;za=Ra;Ra=Ra+352|0;ya=za+56|0;xa=za+48|0;wa=za+40|0;p=za+24|0;o=za+16|0;n=za+8|0;m=za;ta=za+336|0;ua=za+60|0;c[k>>2]=0;a:do if(!f){c[m>>2]=31171;Db(21,38253,m)}else{m=c[f+96>>2]|0;b:do if((m|0)<-264537850){switch(m|0){case -1607883113:break;default:break b}if(!g)break a;ma=f+20|0;n=c[ma>>2]|0;na=f+16|0;if((n|0)>0){o=c[na>>2]|0;m=0;do{p=c[o+(m<<4)+4>>2]|0;if(p|0)c[(c[p+4>>2]|0)+4>>2]=c[p>>2];m=m+1|0}while((m|0)!=(n|0))}D=ua+188|0;E=ua+220|0;F=(i&1|0)==0;G=i>>>2&1;H=ua+25|0;I=ua+24|0;J=f+272|0;K=f+360|0;M=ua+64|0;N=(h|0)>-1;O=f+4|0;P=ua+68|0;Q=(h|0)==0;R=ua+12|0;S=f+112|0;T=g+(h+-1)|0;U=ua+17|0;V=f+81|0;W=f+68|0;X=g+h|0;Y=ua+224|0;Z=Sv(h|0,((h|0)<0)<<31>>31|0,1,0)|0;_=L()|0;$=(l|0)==0;aa=f+276|0;ba=f+288|0;ca=f+300|0;da=f+480|0;ea=ua+8|0;fa=f+165|0;ga=f+296|0;ha=f+284|0;ia=f+304|0;ja=ua+199|0;ka=g;v=i&255;w=f+292|0;x=f+308|0;y=v<<24>>24>-1;z=f+64|0;A=ua+260|0;B=f+260|0;C=f+56|0;u=0;c:while(1){d:while(1){c[ta>>2]=0;gw(ua|0,0,148)|0;m=D;n=m+88|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));c[E>>2]=j;if(!F){a[I>>0]=1;c[J>>2]=(c[J>>2]|0)+1}a[H>>0]=G;i=c[ma>>2]|0;e:do if((i|0)>0){p=c[na>>2]|0;m=0;f:while(1){o=c[p+(m<<4)+4>>2]|0;if(o|0?(va=c[o+4>>2]|0,c[va+4>>2]=c[o>>2],a[o+9>>0]|0):0){if((c[va+76>>2]|0)!=(o|0)?b[va+22>>1]&64:0)break;n=c[va+72>>2]|0;if(n|0)do{do if((c[n>>2]|0)!=(o|0)){if((c[n+4>>2]|0)!=1)break;if((a[n+8>>0]|0)!=1)break f}while(0);n=c[n+12>>2]|0}while((n|0)!=0)}m=m+1|0;if((m|0)>=(i|0)){la=31;break e}}c[wa>>2]=c[p+(m<<4)>>2];Vb(f,262,38298,wa);n=262}else la=31;while(0);g:do if((la|0)==31){la=0;n=c[K>>2]|0;c[K>>2]=0;if(n|0){m=c[O>>2]|0;if(m|0)do{t=m+149|0;s=(d[t>>0]|d[t+1>>0]<<8)&-4|1;a[t>>0]=s;a[t+1>>0]=s>>8;m=c[m+8>>2]|0}while((m|0)!=0);do{o=n;n=c[n+24>>2]|0;p=c[o>>2]|0;s=o+12|0;t=(c[s>>2]|0)+-1|0;c[s>>2]=t;h:do if(!t){m=c[o+8>>2]|0;if(m|0)Wa[c[(c[m>>2]|0)+16>>2]&127](m)|0;do if(p|0){if(c[p+480>>2]|0){Xd(p,o);break h}m=o;if((c[p+304>>2]|0)>>>0>m>>>0)break;if((c[p+308>>2]|0)>>>0<=m>>>0)break;t=p+300|0;c[o>>2]=c[t>>2];c[t>>2]=o;break h}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0)}while((n|0)!=0)}c[ua>>2]=f;i:do if(N){if(!Q?(a[T>>0]|0)==0:0){la=75;break}if((c[S>>2]|0)<(h|0)){Vb(f,18,38328,xa);if(!(a[V>>0]|0)){n=c[W>>2]&18;break g}else{og(f);n=7;break g}}j:do if(c[J>>2]|0){if(!(a[V>>0]|0))la=64}else{do if(_>>>0>0|((_|0)==0?Z>>>0>(e[aa>>1]|0)>>>0:0))m=ba;else{m=c[ca>>2]|0;if(m|0){c[ca>>2]=c[m>>2];c[ha>>2]=(c[ha>>2]|0)+1;oa=m;la=65;break j}m=c[ga>>2]|0;if(!m){m=w;break}c[ga>>2]=c[m>>2];c[ha>>2]=(c[ha>>2]|0)+1;oa=m;la=65;break j}while(0);c[m>>2]=(c[m>>2]|0)+1;la=64}while(0);if((la|0)==64){oa=_d(f,Z,_)|0;la=65}if((la|0)==65?(la=0,oa|0):0){ew(oa|0,g|0,h|0)|0;a[oa+h>>0]=0;ud(ua,oa,ta)|0;m=oa;c[Y>>2]=g+((c[Y>>2]|0)-m);if(c[da>>2]|0){Xd(f,oa);break}do if((c[ia>>2]|0)>>>0<=m>>>0){if((c[x>>2]|0)>>>0<=m>>>0)break;c[oa>>2]=c[ca>>2];c[ca>>2]=oa;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](oa);break}else{t=Wa[c[29352>>2]&127](oa)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](oa);break}}c[Y>>2]=X}else la=75;while(0);if((la|0)==75){la=0;ud(ua,g,ta)|0}if((c[R>>2]|0)==101)c[R>>2]=0;k:do if(a[U>>0]|0?(pa=c[ua>>2]|0,qa=pa+20|0,(c[qa>>2]|0)>0):0){q=pa+16|0;r=pa+24|0;s=pa+56|0;i=0;l:while(1){m=c[q>>2]|0;t=c[m+(i<<4)+4>>2]|0;do if(t|0){if(!(a[t+8>>0]|0)){m=Zb(t,0,0)|0;if((m|0)>=7)break l;switch(m|0){case 0:break;default:break k}o=c[t+4>>2]|0;c[o+4>>2]=c[t>>2];o=c[(c[o+12>>2]|0)+56>>2]|0;p=1;o=d[o+41>>0]<<16|d[o+40>>0]<<24|d[o+42>>0]<<8|d[o+43>>0];m=c[q>>2]|0}else{o=c[t+4>>2]|0;c[o+4>>2]=c[t>>2];o=c[(c[o+12>>2]|0)+56>>2]|0;p=0;o=d[o+41>>0]<<16|d[o+40>>0]<<24|d[o+42>>0]<<8|d[o+43>>0]}n=c[m+(i<<4)+12>>2]|0;if((o|0)!=(c[n>>2]|0)){o=n+78|0;b[o>>1]=b[o>>1]|8;o=(c[m+28>>2]|0)+78|0;b[o>>1]=b[o>>1]|8;c[r>>2]=c[r>>2]&-17;m:do if(!(c[s>>2]|0)){n=c[qa>>2]|0;if((n|0)<=0)break;o=0;while(1){m=c[m+(o<<4)+12>>2]|0;if(b[m+78>>1]&8){dh(m);n=c[qa>>2]|0}m=o+1|0;if((m|0)>=(n|0))break m;o=m;m=c[q>>2]|0}}while(0);c[R>>2]=17}if(!p)break;c[(c[t+4>>2]|0)+4>>2]=c[t>>2];if(cc(t,0)|0)break;bc(t,0)|0}while(0);i=i+1|0;if((i|0)>=(c[qa>>2]|0))break k}if((m|0)<3082)switch(m|0){case 7:break;default:break k}else switch(m|0){case 3082:break;default:break k}m=pa+81|0;if((a[m>>0]|0)==0?(a[pa+82>>0]|0)==0:0){a[m>>0]=1;if((c[pa+180>>2]|0)>0)c[pa+264>>2]=1;m=pa+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[pa+236>>2]|0;if(!m)break;c[m+12>>2]=7}}while(0);if(a[V>>0]|0)c[R>>2]=7;if(!$)c[l>>2]=c[Y>>2];t=c[R>>2]|0;s=(t|0)==0;n:do if(s?(ra=c[ea>>2]|0,ra|0):0){switch(a[ja>>0]|0){case 0:break n;case 2:{Wi(ra,4);m=12;n=8;break}default:{Wi(ra,8);m=8;n=0}}o=n;do{p=c[ea>>2]|0;if(!(a[(c[p>>2]|0)+81>>0]|0))yc((c[p+116>>2]|0)+((o-n|0)*40|0)|0,c[5696+(o<<2)>>2]|0,-1,1,0)|0;o=o+1|0}while(o>>>0<m>>>0)}while(0);do if(!(a[fa>>0]|0)){r=c[ea>>2]|0;q=(c[Y>>2]|0)-ka|0;if(!r){m=0;la=155;break}a[r+148>>0]=v;if(y)c[r+208>>2]=0;o=c[r>>2]|0;p=Sv(q|0,((q|0)<0)<<31>>31|0,1,0)|0;i=L()|0;o:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))la=132;else m=0;else{do if(!(i>>>0>0|((i|0)==0?p>>>0>(e[o+276>>1]|0)>>>0:0))){n=o+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];la=o+284|0;c[la>>2]=(c[la>>2]|0)+1;la=133;break o}n=o+296|0;m=c[n>>2]|0;if(!m){m=o+292|0;break}else{c[n>>2]=c[m>>2];la=o+284|0;c[la>>2]=(c[la>>2]|0)+1;la=133;break o}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;la=132}while(0);if((la|0)==132){m=_d(o,p,i)|0;la=133}do if((la|0)==133){if(!m){m=0;break}ew(m|0,g|0,q|0)|0;a[m+q>>0]=0}while(0);c[r+188>>2]=m;la=136}else la=136;while(0);p:do if((la|0)==136){la=0;q=c[ea>>2]|0;m=q;if(!q){la=155;break}if(s?(a[V>>0]|0)==0:0){la=155;break}r=q+20|0;n=c[r>>2]|0;if((n|0)<832317811)switch(n|0){case 770837923:{la=140;break}default:{}}else switch(n|0){case 832317811:{la=140;break}default:{}}if((la|0)==140){la=0;kc(q)|0}p=c[q>>2]|0;kb(p,q);i=c[q+4>>2]|0;o=q+8|0;n=c[o>>2]|0;if(!i)c[p+4>>2]=n;else{c[i+8>>2]=n;n=c[o>>2]|0}if(n|0)c[n+4>>2]=i;c[r>>2]=1443283912;c[q>>2]=0;do if(p|0){if(c[p+480>>2]|0){Xd(p,q);break p}if((c[p+304>>2]|0)>>>0>m>>>0)break;if((c[p+308>>2]|0)>>>0<=m>>>0)break;r=p+300|0;c[q>>2]=c[r>>2];c[r>>2]=q;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{r=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);if((la|0)==155){la=0;c[k>>2]=m}n=c[ta>>2]|0;q:do if(n){c[ya>>2]=n;Vb(f,t,31408,ya);if(c[da>>2]|0){Xd(f,n);break}m=n;do if((c[ia>>2]|0)>>>0<=m>>>0){if((c[x>>2]|0)>>>0<=m>>>0)break;c[n>>2]=c[ca>>2];c[ca>>2]=n;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else{c[z>>2]=t;if(!s){Ne(f,t);break}if(!(c[B>>2]|0))break;Ne(f,0)}while(0);m=c[A>>2]|0;if(!m){n=t;break}while(1){c[A>>2]=c[m+4>>2];r:do if(!(c[da>>2]|0)){n=m;do if((c[ia>>2]|0)>>>0<=n>>>0){if((c[x>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[ca>>2];c[ca>>2]=m;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(f,m);while(0);m=c[A>>2]|0;if(!m){n=t;break}}}while(0);o=c[ua>>2]|0;m=c[M>>2]|0;do if(m|0){if(o|0){if(c[o+480>>2]|0){Xd(o,m);break}t=m;if((c[o+304>>2]|0)>>>0<=t>>>0?(c[o+308>>2]|0)>>>0>t>>>0:0){t=o+300|0;c[m>>2]=c[t>>2];c[t>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{t=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);m=c[P>>2]|0;if(m|0)ri(o,m);if(o|0){t=o+272|0;c[t>>2]=(c[t>>2]|0)-(d[I>>0]|0)}switch(n|0){case 513:break;case 17:break d;default:{la=205;break c}}}if((c[C>>2]|0)==0?(sa=c[ma>>2]|0,(sa|0)>0):0){o=0;m=sa;do{n=c[(c[na>>2]|0)+(o<<4)+12>>2]|0;if(b[n+78>>1]&8){dh(n);m=c[ma>>2]|0}o=o+1|0}while((o|0)<(m|0))}if(!u)u=1;else{la=202;break}}if((la|0)==202)if(!(a[V>>0]|0)){ya=c[W>>2]&17;Ra=za;return ya|0}else{og(f);ya=7;Ra=za;return ya|0}else if((la|0)==205)if((n|0)==3082|(a[V>>0]|0)!=0){og(f);ya=7;Ra=za;return ya|0}else{ya=c[W>>2]&n;Ra=za;return ya|0}}else{if((m|0)<1266094736)switch(m|0){case -264537850:break;default:break b}else switch(m|0){case 1266094736:break;default:break b}c[o>>2]=38244;Db(21,38253,o);break a}while(0);c[n>>2]=50924;Db(21,38253,n)}while(0);c[p>>2]=58063;c[p+4>>2]=124395;c[p+8>>2]=31517;Db(21,32001,p);ya=21;Ra=za;return ya|0}function rd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+16|0;n=o;k=c[b+348>>2]|0;if(!k){i=b+340|0;h=b+344|0}else{i=a[e>>0]|0;if(!(i<<24>>24))h=0;else{h=0;j=e;do{j=j+1|0;h=G(h+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[j>>0]|0}while(i<<24>>24!=0)}h=(h>>>0)%((c[b+336>>2]|0)>>>0)|0;i=k+(h<<3)|0;h=k+(h<<3)+4|0}i=c[i>>2]|0;a:do if(!i)h=59292;else{m=d[208+(d[e>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;i=i+-1|0;k=c[h+12>>2]|0;l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-m|0;if(!(l<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;p=a[k>>0]|0;j=(d[208+(p&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(j|0)!=0))}if(!j)break a;if(!i){h=59292;break}}}while(0);if(!(c[h+8>>2]|0)){Hi(b,e,f,g,0)|0;h=0}else{c[n>>2]=58063;c[n+4>>2]=134381;c[n+8>>2]=31517;Db(21,32001,n);h=21}if(!(a[b+81>>0]|0)){p=c[b+68>>2]&h;Ra=o;return p|0}else{og(b);p=7;Ra=o;return p|0}return 0}function sd(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;o=p;l=c[b+348>>2]|0;if(!l){j=b+340|0;i=b+344|0}else{j=a[e>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=e;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}i=(i>>>0)%((c[b+336>>2]|0)>>>0)|0;j=l+(i<<3)|0;i=l+(i<<3)+4|0}j=c[j>>2]|0;a:do if(!j)i=59292;else{n=d[208+(d[e>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=e;do{l=l+1|0;m=m+1|0;q=a[l>>0]|0;k=(d[208+(q&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!j){i=59292;break}}}while(0);if(!(c[i+8>>2]|0)){Hi(b,e,f,g,h)|0;i=0}else{c[o>>2]=58063;c[o+4>>2]=134381;c[o+8>>2]=31517;Db(21,32001,o);i=21}if(!(a[b+81>>0]|0))i=c[b+68>>2]&i;else{og(b);i=7}if(!((h|0)!=0&(i|0)!=0)){Ra=p;return i|0}ab[h&127](g);Ra=p;return i|0}function td(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+304|0;j=q+16|0;g=q;h=q+296|0;p=q+20|0;c[h>>2]=0;i=c[e+352>>2]|0;if(i|0?(m=i+12|0,(c[m>>2]|0)==0):0){l=c[i+4>>2]|0;gw(p+4|0,0,272)|0;n=p+200|0;a[n>>0]=1;c[p>>2]=e;c[p+132>>2]=1;if(((((ud(p,f,h)|0)==0?(k=c[p+228>>2]|0,(k|0)!=0):0)?(a[e+81>>0]|0)==0:0)?(c[k+12>>2]|0)==0:0)?(c[k+56>>2]|0)==0:0){g=l+4|0;if(!(c[g>>2]|0)){h=k+4|0;c[g>>2]=c[h>>2];f=k+42|0;b[l+42>>1]=b[f>>1]|0;j=k+36|0;g=l+36|0;c[g>>2]=c[g>>2]|c[j>>2]&96;b[f>>1]=0;c[h>>2]=0;if((c[j>>2]&32|0)!=0?(c[(c[c[(c[i>>2]|0)+4>>2]>>2]|0)+52>>2]|0)!=0:0){g=k+8|0;while(1){g=c[g>>2]|0;j=g+55|0;if(((d[j>>0]|d[j+1>>0]<<8)&3)==2)break;else g=g+20|0}g=(b[g+50>>1]|0)!=1&1}else g=0;f=k+8|0;h=c[f>>2]|0;if(h){c[l+8>>2]=h;c[f>>2]=0;c[h+12>>2]=l}}else g=0;c[m>>2]=1;l=g}else o=18;do if((o|0)==18){g=c[h>>2]|0;m=(g|0)==0;c[j>>2]=g;Vb(e,1,m?0:31408,j);if(!m){if(c[e+480>>2]|0){Xd(e,g);l=1;break}m=g;if((c[e+304>>2]|0)>>>0<=m>>>0?(c[e+308>>2]|0)>>>0>m>>>0:0){l=e+300|0;c[g>>2]=c[l>>2];c[l>>2]=g;l=1;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);l=1;break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);l=1;break}}else l=1}while(0);a[n>>0]=0;j=c[p+8>>2]|0;do if(j|0){k=j+20|0;g=c[k>>2]|0;if((g|0)<832317811)switch(g|0){case 770837923:{o=29;break}default:{}}else switch(g|0){case 832317811:{o=29;break}default:{}}if((o|0)==29)kc(j)|0;i=c[j>>2]|0;kb(i,j);h=c[j+4>>2]|0;f=j+8|0;g=c[f>>2]|0;if(!h)c[i+4>>2]=g;else{c[h+8>>2]=g;g=c[f>>2]|0}if(g|0)c[g+4>>2]=h;c[k>>2]=1443283912;c[j>>2]=0;if(i|0){if(c[i+480>>2]|0){Xd(i,j);break}o=j;if((c[i+304>>2]|0)>>>0<=o>>>0?(c[i+308>>2]|0)>>>0>o>>>0:0){o=i+300|0;c[j>>2]=c[o>>2];c[o>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{o=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);g=c[p+228>>2]|0;do if(g|0){if(e|0?c[e+480>>2]|0:0){Vi(e,g);break}n=g+32|0;o=(c[n>>2]|0)+-1|0;c[n>>2]=o;if(!o)Vi(e,g)}while(0);f=c[p>>2]|0;g=c[p+64>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}o=g;if((c[f+304>>2]|0)>>>0<=o>>>0?(c[f+308>>2]|0)>>>0>o>>>0:0){o=f+300|0;c[g>>2]=c[o>>2];c[o>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{o=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[p+68>>2]|0;if(g|0)ri(f,g);g=p+24|0;if(f|0){p=f+272|0;c[p>>2]=(c[p>>2]|0)-(d[g>>0]|0)}a[g>>0]=0;if(!(a[e+81>>0]|0)){e=c[e+68>>2]&l;Ra=q;return e|0}else{og(e);e=7;Ra=q;return e|0}}c[e+64>>2]=21;Ne(e,21);c[g>>2]=58063;c[g+4>>2]=135056;c[g+8>>2]=31517;Db(21,32001,g);e=21;Ra=q;return e|0}function ud(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;V=Ra;Ra=Ra+1280|0;O=V+48|0;M=V+40|0;I=V+32|0;H=V+24|0;G=V+16|0;F=V+8|0;C=V+1272|0;D=V;E=V+1268|0;i=V+56|0;S=c[d>>2]|0;j=c[S+112>>2]|0;if(!(c[S+168>>2]|0))c[S+264>>2]=0;N=d+12|0;c[N>>2]=0;P=d+224|0;c[P>>2]=f;J=i+4|0;c[J>>2]=d;h=i+8|0;c[i>>2]=h;b[h>>1]=0;b[i+10>>1]=0;B=i+1208|0;c[B>>2]=i+1196;T=S+236|0;U=d+124|0;c[U>>2]=c[T>>2];c[T>>2]=d;k=Bi(f,E)|0;j=j-k|0;a:do if((j|0)>=0){w=S+264|0;x=d+188|0;y=d+192|0;z=i+8|0;v=D+4|0;u=C+4|0;l=-1;b:while(1){m=k;t=j;while(1){j=c[E>>2]|0;if((j|0)<=155){s=m;break}if(c[w>>2]|0){Q=10;break b}if((j|0)!=174){Q=13;break}f=f+m|0;j=Bi(f,E)|0;k=t-j|0;if((k|0)<0){Q=7;break a}else{m=j;t=k}}c:do if((Q|0)==13){Q=0;if(!(a[f>>0]|0)){switch(l|0){case 0:{j=f;break a}case 1:{j=0;break}default:j=1}c[E>>2]=j;s=0;break}switch(j|0){case 156:{j=f+6|0;d:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=23;break d}default:{Q=20;break d}}}do if((Q|0)==20){Q=0;if((k|0)>=95){j=59;break}if((b[5744+(k<<1)>>1]|0)!=59)if((k|0)==59)Q=25;else j=59;else Q=23}while(0);if((Q|0)==23)Q=25;do if((Q|0)==25){e:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=29;break e}default:{Q=27;break e}}}if((Q|0)==27?(Q=0,(k|0)<95):0)if((b[5744+(k<<1)>>1]|0)==59)Q=29;else{j=(k|0)==24?156:59;break}if((Q|0)==29){Q=0;c[C>>2]=59}j=59}while(0);c[E>>2]=j;s=m;break c}case 157:{f:do if((l|0)==23){j=f+4|0;g:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:break g;default:{Q=36;break g}}}do if((Q|0)==36){Q=0;if((k|0)<95?(b[5744+(k<<1)>>1]|0)==59:0)break;switch(k|0){case 22:case 59:{j=157;break f}default:{}}j=59;break f}while(0);j=157}else j=59;while(0);c[E>>2]=j;s=m;break c}case 158:{do if((l|0)==23){j=f+6|0;h:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=47;break h}default:{Q=45;break h}}}if((Q|0)==45?(Q=0,(k|0)<95):0)if((b[5744+(k<<1)>>1]|0)!=59)if((k|0)==22){j=158;break}else{Q=50;break}else Q=47;if((Q|0)==47)c[C>>2]=59;Q=50}else Q=50;while(0);if((Q|0)==50){Q=0;j=59}c[E>>2]=j;s=m;break c}default:{Q=52;break b}}}while(0);c[x>>2]=f;c[y>>2]=s;q=f;p=c[J>>2]|0;o=c[i>>2]|0;r=j&65535;k=b[o>>1]|0;while(1){n=k&65535;if((k&65535)<=540){l=e[5936+(n<<1)>>1]|0;m=r;while(1){j=m&65535;k=j+l|0;if(k>>>0<=2168?(b[7024+(k<<1)>>1]|0)==m<<16>>16:0){Q=64;break}if((m&65535)>=95){Q=60;break}j=b[5744+(j<<1)>>1]|0;if(!(j<<16>>16)){Q=60;break}else m=j}do if((Q|0)==60){Q=0;j=l+95|0;if(j>>>0<2169?!(m<<16>>16==0?1:(b[7024+(j<<1)>>1]|0)!=95):0){j=11376+(j<<1)|0;break}j=15664+(n<<1)|0}else if((Q|0)==64){Q=0;j=11376+(k<<1)|0}while(0);k=b[j>>1]|0}if((k&65535)<=1161){Q=68;break}k=$i(i,(k&65535)+-1162|0,f,s,p)|0;j=c[i>>2]|0;if(j>>>0<=h>>>0)break;else o=j}do if((Q|0)==68){Q=0;if((k&65535)>=1159){if(k<<16>>16==1160){c[i>>2]=o+-12;break}c[D>>2]=q;c[v>>2]=s;c[C>>2]=f;c[u>>2]=s;j=c[J>>2]|0;if(!(a[f>>0]|0))cd(j,49148,I);else{c[H>>2]=C;cd(j,38502,H)}c[J>>2]=j;aj(j,r,D);break}j=o+12|0;c[i>>2]=j;if(j>>>0<=(c[B>>2]|0)>>>0){b[j>>1]=(k&65535)>540?(k&65535)+378&65535:k;b[o+14>>1]=r;c[o+16>>2]=q;c[o+20>>2]=s;break}c[i>>2]=o;k=c[J>>2]|0;if(o>>>0>z>>>0?(c[i>>2]=o+-12,aj(k,b[o+2>>1]|0,o+4|0),A=c[i>>2]|0,A>>>0>z>>>0):0){j=A;do{r=c[J>>2]|0;c[i>>2]=j+-12;aj(r,b[j+2>>1]|0,j+4|0);j=c[i>>2]|0}while(j>>>0>z>>>0)}cd(k,38790,G);c[J>>2]=k}while(0);f=f+s|0;if(c[N>>2]|0){j=f;break a}l=c[E>>2]|0;k=Bi(f,E)|0;j=t-k|0;if((j|0)<0){Q=7;break a}}if((Q|0)==10){c[N>>2]=9;j=f;break}else if((Q|0)==52){c[F>>2]=m;c[F+4>>2]=f;cd(d,38428,F);j=f;break}}else Q=7;while(0);if((Q|0)==7){c[N>>2]=18;j=f}f=c[i>>2]|0;if(f>>>0>h>>>0)do{c[i>>2]=f+-12;aj(c[J>>2]|0,b[f+2>>1]|0,f+4|0);f=c[i>>2]|0}while(f>>>0>h>>>0);if(!(a[S+81>>0]|0)){h=c[N>>2]|0;switch(h|0){case 101:case 0:break;default:{K=h;Q=90}}}else{c[N>>2]=7;K=7;Q=90}if((Q|0)==90?(L=d+4|0,(c[L>>2]|0)==0):0){switch(K|0){case 516:{h=50738;break}case 100:{h=50760;break}default:{h=K&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}c[M>>2]=h;M=dd(S,31408,M)|0;c[L>>2]=M}h=d+4|0;f=c[h>>2]|0;if(!f)p=0;else{c[g>>2]=f;p=c[N>>2]|0;g=c[P>>2]|0;c[O>>2]=f;c[O+4>>2]=g;Db(p,38455,O);c[h>>2]=0;p=1}c[P>>2]=j;i=d+8|0;j=c[i>>2]|0;if((j|0?(c[d+36>>2]|0)>0:0)?(a[d+18>>0]|0)==0:0){k=c[j>>2]|0;kb(k,j);l=c[j+4>>2]|0;f=j+8|0;h=c[f>>2]|0;if(!l)c[k+4>>2]=h;else{c[l+8>>2]=h;h=c[f>>2]|0}if(h|0)c[h+4>>2]=l;c[j+20>>2]=1443283912;c[j>>2]=0;do if(k){if(c[k+480>>2]|0){Xd(k,j);break}P=j;if((c[k+304>>2]|0)>>>0<=P>>>0?(c[k+308>>2]|0)>>>0>P>>>0:0){P=k+300|0;c[j>>2]=c[P>>2];c[P>>2]=j}else Q=113}else Q=113;while(0);do if((Q|0)==113)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{Q=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}if(!(a[d+18>>0]|0)){h=d+108|0;f=c[h>>2]|0;do if(f|0){if(c[S+480>>2]|0){Xd(S,f);break}Q=f;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[f>>2]=c[Q>>2];c[Q>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[h>>2]=0;c[d+104>>2]=0}h=c[d+252>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=d+200|0;h=a[f>>0]|0;if(!(h<<24>>24)){h=c[d+228>>2]|0;do if(h|0){if(c[S+480>>2]|0){Vi(S,h);break}P=h+32|0;Q=(c[P>>2]|0)+-1|0;c[P>>2]=Q;if(!Q)Vi(S,h)}while(0);h=a[f>>0]|0}do if((h&255)<=1?(R=c[d+236>>2]|0,R|0):0){Xi(S,c[R+28>>2]|0);h=c[R>>2]|0;do if(h|0){if(c[S+480>>2]|0){Xd(S,h);break}Q=h;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[R+4>>2]|0;do if(h|0){if(c[S+480>>2]|0){Xd(S,h);break}Q=h;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[R+12>>2]|0;if(h|0)ni(S,h);h=c[R+16>>2]|0;i:do if(h){k=h+4|0;f=c[h>>2]|0;if((c[k>>2]|0)>0){l=S+480|0;m=S+304|0;n=S+308|0;o=S+300|0;j=0;do{f=c[f+(j<<3)>>2]|0;j:do if(f|0){if(c[l>>2]|0){Xd(S,f);break}i=f;do if((c[m>>2]|0)>>>0<=i>>>0){if((c[n>>2]|0)>>>0<=i>>>0)break;c[f>>2]=c[o>>2];c[o>>2]=f;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);j=j+1|0;f=c[h>>2]|0}while((j|0)<(c[k>>2]|0))}k:do if(f){do if(S|0){i=S+480|0;if(!(c[i>>2]|0)){j=f;if((c[S+304>>2]|0)>>>0>j>>>0)break;if((c[S+308>>2]|0)>>>0<=j>>>0)break;Q=S+300|0;c[f>>2]=c[Q>>2];c[Q>>2]=f}else Xd(S,f);f=i;Q=187;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Q=185;break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Q=185;break}}else Q=185;while(0);do if((Q|0)==185){if(!S)break;f=S+480|0;Q=187}while(0);do if((Q|0)==187){if(c[f>>2]|0){Xd(S,h);Q=196;break i}f=h;if((c[S+304>>2]|0)>>>0>f>>>0)break;if((c[S+308>>2]|0)>>>0<=f>>>0)break;Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;Q=196;break i}while(0);do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{P=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);if(!S)h=R;else{h=R;Q=198}}else Q=196;while(0);if((Q|0)==196){h=R;Q=198}if((Q|0)==198){if(c[S+480>>2]|0){Xd(S,h);break}Q=R;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[R>>2]=c[Q>>2];c[Q>>2]=R;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);n=c[d+268>>2]|0;do if(n|0){l:do if((c[n>>2]|0)>0){j=S+480|0;k=S+304|0;l=S+308|0;m=S+300|0;if(!S){f=0;while(1){h=c[n+8+(f<<4)+4>>2]|0;if(h|0)ri(0,h);h=c[n+8+(f<<4)+8>>2]|0;if(h|0)pi(0,h,1);h=c[n+8+(f<<4)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=f+1|0;if((f|0)>=(c[n>>2]|0))break l}}i=0;do{h=c[n+8+(i<<4)+4>>2]|0;if(h|0)ri(S,h);h=c[n+8+(i<<4)+8>>2]|0;if(h|0)pi(S,h,1);h=c[n+8+(i<<4)>>2]|0;m:do if(h|0){if(c[j>>2]|0){Xd(S,h);break}f=h;do if((c[k>>2]|0)>>>0<=f>>>0){if((c[l>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[m>>2];c[m>>2]=h;break m}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0}while((i|0)<(c[n>>2]|0))}while(0);if(S|0){if(c[S+480>>2]|0){Xd(S,n);break}R=n;if((c[S+304>>2]|0)>>>0<=R>>>0?(c[S+308>>2]|0)>>>0>R>>>0:0){R=S+300|0;c[n>>2]=c[R>>2];c[R>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{R=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);h=c[d+216>>2]|0;do if(h|0){if(S|0){if(c[S+480>>2]|0){Xd(S,h);break}R=h;if((c[S+304>>2]|0)>>>0<=R>>>0?(c[S+308>>2]|0)>>>0>R>>>0:0){R=S+300|0;c[h>>2]=c[R>>2];c[R>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);m=d+112|0;h=c[m>>2]|0;n:do if(h|0){i=S+480|0;j=S+304|0;k=S+308|0;l=S+300|0;if(!S)while(1){c[m>>2]=c[h>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[m>>2]|0;if(!h)break n}do{c[m>>2]=c[h>>2];o:do if(!(c[i>>2]|0)){f=h;do if((c[j>>2]|0)>>>0<=f>>>0){if((c[k>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[l>>2];c[l>>2]=h;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(S,h);while(0);h=c[m>>2]|0}while((h|0)!=0)}while(0);i=d+256|0;h=c[i>>2]|0;if(!h){S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}f=S+480|0;if(!S){do{f=c[h+76>>2]|0;c[i>>2]=f;d=h+32|0;S=(c[d>>2]|0)+-1|0;c[d>>2]=S;if(!S){Vi(0,h);h=c[i>>2]|0}else h=f}while((h|0)!=0);S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}do{c[i>>2]=c[h+76>>2];if(!((c[f>>2]|0)==0?(R=h+32|0,d=(c[R>>2]|0)+-1|0,c[R>>2]=d,(d|0)!=0):0))Vi(S,h);h=c[i>>2]|0}while((h|0)!=0);S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}function vd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+48|0;f=i+32|0;h=i+16|0;g=i;c[g>>2]=e;do if((d|0)==1){d=c[b+352>>2]|0;if(!d){c[h>>2]=58063;c[h+4>>2]=135531;c[h+8>>2]=31517;Db(21,32001,h);break}b=(c[g>>2]|0)+(4-1)&~(4-1);h=c[b>>2]|0;c[g>>2]=b+4;a[(c[d>>2]|0)+16>>0]=h;h=0;Ra=i;return h|0}else{c[f>>2]=58063;c[f+4>>2]=135539;c[f+8>>2]=31517;Db(21,32001,f)}while(0);c[b+64>>2]=21;Ne(b,21);h=21;Ra=i;return h|0}function wd(d){d=d|0;var f=0,g=0,h=0;a:do if(!d)f=ob(40,0)|0;else{if(c[d+272>>2]|0){if(a[d+81>>0]|0){d=0;return d|0}}else{do if((e[d+276>>1]|0)>=40){g=d+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];h=d+284|0;c[h>>2]=(c[h>>2]|0)+1;break a}g=d+296|0;f=c[g>>2]|0;if(!f){f=d+292|0;break}else{c[g>>2]=c[f>>2];h=d+284|0;c[h>>2]=(c[h>>2]|0)+1;break a}}else f=d+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(d,40,0)|0}while(0);if(!f){d=0;return d|0}g=f;h=g+40|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));b[f+8>>1]=1;c[f+32>>2]=d;d=f;return d|0}function xd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+48|0;g=h+40|0;f=h+32|0;e=h+16|0;d=h;if(c[7380]|0){c[e>>2]=58063;c[e+4>>2]=154986;c[e+8>>2]=31517;Db(21,32001,e);b=21;Ra=h;return b|0}c[d>>2]=b;do switch(a|0){case 4:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7335]=c[a>>2];c[7336]=c[a+4>>2];c[7337]=c[a+8>>2];c[7338]=c[a+12>>2];c[7339]=c[a+16>>2];c[7340]=c[a+20>>2];c[7341]=c[a+24>>2];c[7342]=c[a+28>>2];a=0;break}case 5:{if(!(c[7335]|0)){c[f>>2]=30308;xd(4,f)|0}b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=c[7335];c[a+4>>2]=c[7336];c[a+8>>2]=c[7337];c[a+12>>2]=c[7338];c[a+16>>2]=c[7339];c[a+20>>2]=c[7340];c[a+24>>2]=c[7341];c[a+28>>2]=c[7342];a=0;break}case 9:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7324]=a;a=0;break}case 27:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7329]=a;a=0;break}case 7:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7374]=a;a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7375]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7376]=a;a=0;break}case 24:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=160;a=0;break}case 14:{a=0;break}case 15:{a=1;break}case 18:{a=(c[d>>2]|0)+(4-1)&~(4-1);e=c[a>>2]|0;c[d>>2]=a+4;a=29408;d=e;e=a+52|0;do{c[a>>2]=c[d>>2];a=a+4|0;d=d+4|0}while((a|0)<(e|0));a=0;break}case 19:{if(!(c[7354]|0)){c[g>>2]=30340;xd(18,g)|0}e=(c[d>>2]|0)+(4-1)&~(4-1);a=c[e>>2]|0;c[d>>2]=e+4;d=29408;e=a+52|0;do{c[a>>2]=c[d>>2];a=a+4|0;d=d+4|0}while((a|0)<(e|0));a=0;break}case 13:{a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7332]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7333]=a;a=0;break}case 16:{a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7387]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7388]=a;a=0;break}case 17:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7327]=a;a=0;break}case 20:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7328]=a;a=0;break}case 22:{c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;c[7370]=0;c[7371]=0;c[7372]=0;c[7373]=0;a=0;break}case 25:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7379]=a;a=0;break}case 26:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7334]=a;a=0;break}default:a=1}while(0);b=a;Ra=h;return b|0}function yd(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;h=n;c[h>>2]=f;do switch(e|0){case 1e3:{l=(c[h>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[h>>2]=l+4;c[c[b+16>>2]>>2]=m;m=0;Ra=n;return m|0}case 1001:{j=(c[h>>2]|0)+(4-1)&~(4-1);k=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);m=c[j>>2]|0;c[h>>2]=j+4;m=zd(b,k,l,m)|0;Ra=n;return m|0}case 1002:{k=0;break}case 1003:{k=1;break}case 1004:{k=2;break}case 1005:{k=3;break}case 1006:{k=4;break}case 1007:{k=5;break}case 1008:{k=6;break}case 1009:{k=7;break}case 1010:{k=8;break}case 1011:{k=9;break}default:{m=1;Ra=n;return m|0}}while(0);j=(c[h>>2]|0)+(4-1)&~(4-1);e=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[h>>2]=j+4;j=b+32|0;i=j;h=c[i>>2]|0;i=c[i+4>>2]|0;if((e|0)<=0)if(!e){e=h&~c[2208+(k<<3)+4>>2];f=i;m=17}else{e=h;f=i}else{e=h|c[2208+(k<<3)+4>>2];f=i;m=17}if((m|0)==17){m=j;c[m>>2]=e;c[m+4>>2]=f}if(!((h|0)==(e|0)&(i|0)==(f|0))?(g=c[b+4>>2]|0,g|0):0)do{m=g+149|0;b=(d[m>>0]|d[m+1>>0]<<8)&-4|1;a[m>>0]=b;a[m+1>>0]=b>>8;g=c[g+8>>2]|0}while((g|0)!=0);if(!l){m=0;Ra=n;return m|0}c[l>>2]=(0?1:(c[j>>2]&c[2208+(k<<3)+4>>2]|0)!=0)&1;m=0;Ra=n;return m|0}function zd(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d+296|0;h=c[q>>2]|0;if(!h)i=0;else{i=0;do{h=c[h>>2]|0;i=i+1|0}while((h|0)!=0)}p=d+300|0;h=c[p>>2]|0;if(!h)h=0;else{j=0;do{h=c[h>>2]|0;j=j+1|0}while((h|0)!=0);h=j}m=d+280|0;if(((c[m>>2]|0)-(h+i)|0)>0){e=5;return e|0}n=d+272|0;o=d+278|0;do if(a[o>>0]|0?(k=c[d+304>>2]|0,k|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=f&-8;k=(l|0)<5?0:l;i=(g|0)>0?g:0;if(!((g|0)<1|(k|0)==0))if(!e){h=Yv(k|0,((k|0)<0)<<31>>31|0,i|0,0)|0;g=Sv(h|0,L()|0,-1,-1)|0;f=L()|0;do if(!(f>>>0>0|(f|0)==0&g>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](h)|0;break}f=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){g=c[14978]|0;j=Tv(h|0,j|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=g>>>0)&1}j=Wa[c[29340>>2]&127](f)|0;if(j){h=Wa[c[29352>>2]&127](j)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else j=0}else j=0;while(0);if(!j)h=0;else{h=j;i=(Wa[c[29352>>2]&127](j)|0)/(l|0)|0}}else h=e;else{h=0;k=0}j=d+304|0;c[j>>2]=h;c[q>>2]=0;c[p>>2]=0;b[d+276>>1]=k;if(!h){c[j>>2]=d;c[d+308>>2]=d;c[n>>2]=1;a[o>>0]=0;c[m>>2]=0;e=0;return e|0}c[m>>2]=i;if((i|0)>0){j=0;while(1){c[h>>2]=j;f=h+k|0;j=h;if((i|0)<=1)break;else{h=f;i=i+-1|0}}c[q>>2]=h;h=f}c[d+308>>2]=h;c[n>>2]=0;a[o>>0]=(e|0)==0&1;e=0;return e|0}function Ad(a){a=a|0;return c[a+100>>2]|0}function Bd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;o=p+24|0;g=p+8|0;f=p;if(!b){o=0;Ra=p;return o|0}n=b+96|0;e=c[n>>2]|0;a:do if((e|0)>=-264537850)if((e|0)<1266094736)switch(e|0){case -264537850:break a;default:{h=3;break a}}else switch(e|0){case 1266094736:break a;default:{h=3;break a}}else switch(e|0){case -1607883113:break;default:h=3}while(0);if((h|0)==3){c[f>>2]=50924;Db(21,38253,f);c[g>>2]=58063;c[g+4>>2]=155713;c[g+8>>2]=31517;Db(21,32001,g);o=21;Ra=p;return o|0}if(!(a[b+88>>0]&8)){Bp(b);e=b+356|0;k=c[e>>2]|0;if(k|0){c[e>>2]=0;i=b+332|0;if((c[i>>2]|0)>0){h=0;do{j=c[k+(h<<2)>>2]|0;g=j+8|0;e=c[g>>2]|0;if(e|0?(m=c[(c[e>>2]|0)+68>>2]|0,m|0):0)Wa[m&127](e)|0;c[j+20>>2]=0;f=c[j>>2]|0;e=j+12|0;l=(c[e>>2]|0)+-1|0;c[e>>2]=l;do if(!l){e=c[g>>2]|0;if(e|0)Wa[c[(c[e>>2]|0)+16>>2]&127](e)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,j);break}l=j;if((c[f+304>>2]|0)>>>0<=l>>>0?(c[f+308>>2]|0)>>>0>l>>>0:0){l=f+300|0;c[j>>2]=c[l>>2];c[l>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);h=h+1|0}while((h|0)<(c[i>>2]|0))}do if(!(c[b+480>>2]|0)){m=k;if((c[b+304>>2]|0)>>>0<=m>>>0?(c[b+308>>2]|0)>>>0>m>>>0:0){m=b+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(b,k);while(0);c[i>>2]=0}}else{Za[c[b+196>>2]&127](8,c[b+200>>2]|0,b,0)|0;Bp(b);e=b+356|0;k=c[e>>2]|0;if(k|0){c[e>>2]=0;i=b+332|0;if((c[i>>2]|0)>0){h=0;do{j=c[k+(h<<2)>>2]|0;f=j+8|0;e=c[f>>2]|0;if(e|0?(l=c[(c[e>>2]|0)+68>>2]|0,l|0):0)Wa[l&127](e)|0;c[j+20>>2]=0;g=c[j>>2]|0;e=j+12|0;m=(c[e>>2]|0)+-1|0;c[e>>2]=m;do if(!m){e=c[f>>2]|0;if(e|0)Wa[c[(c[e>>2]|0)+16>>2]&127](e)|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}m=j;if((c[g+304>>2]|0)>>>0<=m>>>0?(c[g+308>>2]|0)>>>0>m>>>0:0){m=g+300|0;c[j>>2]=c[m>>2];c[m>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{m=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);h=h+1|0}while((h|0)<(c[i>>2]|0))}do if(!(c[b+480>>2]|0)){m=k;if((c[b+304>>2]|0)>>>0<=m>>>0?(c[b+308>>2]|0)>>>0>m>>>0:0){m=b+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(b,k);while(0);c[i>>2]=0}}b:do if(!d){c:do if(!(c[b+4>>2]|0)){f=c[b+20>>2]|0;if((f|0)<=0)break b;g=c[b+16>>2]|0;e=0;while(1){d=c[g+(e<<4)+4>>2]|0;if(d|0?c[d+16>>2]|0:0)break c;e=e+1|0;if((e|0)>=(f|0))break b}}while(0);Vb(b,5,50150,o);o=5;Ra=p;return o|0}while(0);c[n>>2]=1691352191;fc(b);o=0;Ra=p;return o|0}function Cd(a){a=a|0;return Bd(a,1)|0}function Dd(a,b,d){a=a|0;b=b|0;d=d|0;if(((b*1e3|0)+1e3|0)>(c[a+448>>2]|0)){d=0;return d|0}d=c[a>>2]|0;Xa[c[d+60>>2]&255](d,1e6)|0;d=1;return d|0}function Ed(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;d=Hd(b,d,e,f,g,h,i,j,0,0,0)|0;if((d|0)==3082|(a[b+81>>0]|0)!=0){og(b);b=7;return b|0}else{b=c[b+68>>2]&d;return b|0}return 0}function Fd(a,b,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0;do if(l){m=ob(12,0)|0;if(!m){Fc(a);ab[l&127](f);b=1;break}c[m>>2]=0;c[m+4>>2]=l;c[m+8>>2]=f;b=Hd(a,b,d,e,f,g,h,i,j,k,m)|0;if(!(c[m>>2]|0)){ab[l&127](f);qb(m)}}else b=Hd(a,b,d,e,f,g,h,i,j,k,0)|0;while(0);return ic(a,b)|0}function Gd(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return Fd(a,b,c,d,e,f,g,h,0,0,i)|0}function Hd(b,e,f,g,h,i,j,k,l,m,n){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+32|0;p=s+16|0;o=s;if((((e|0?(r=(i|0)!=0,!(r&(k|0)!=0)):0)?!((j|0)==0^(k|0)==0):0)?!((f+1|0)>>>0>128|(l|0)==0^(m|0)==0):0)?((Eu(e)|0)&1073741568|0)==0:0){q=g&2048;switch(g&7){case 4:{o=2;break}case 5:{o=Hd(b,e,f,q|1,h,i,j,k,l,m,n)|0;if(o|0){m=o;Ra=s;return m|0}o=Hd(b,e,f,q|2,h,i,j,k,l,m,n)|0;if(!o)o=3;else{m=o;Ra=s;return m|0}break}default:o=g&7}g=o&255;t=Jd(b,e,f,g,0)|0;if((t|0?(c[t+4>>2]&3|0)==(o|0):0)?(a[t>>0]|0)==(f|0):0){if(c[b+168>>2]|0){Vb(b,5,50805,p);t=5;Ra=s;return t|0}o=c[b+4>>2]|0;if(o|0)do{t=o+149|0;p=(d[t>>0]|d[t+1>>0]<<8)&-4|1;a[t>>0]=p;a[t+1>>0]=p>>8;o=c[o+8>>2]|0}while((o|0)!=0)}o=Jd(b,e,f,g,1)|0;if(!o){t=7;Ra=s;return t|0}g=o+36|0;p=c[g>>2]|0;do if(p|0?(t=(c[p>>2]|0)+-1|0,c[p>>2]=t,(t|0)==0):0){ab[c[p+4>>2]&127](c[p+8>>2]|0);if(b|0){if(c[b+480>>2]|0){Xd(b,p);break}t=p;if((c[b+304>>2]|0)>>>0<=t>>>0?(c[b+308>>2]|0)>>>0>t>>>0:0){t=b+300|0;c[p>>2]=c[t>>2];c[t>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{t=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);if(n|0)c[n>>2]=(c[n>>2]|0)+1;c[g>>2]=n;t=o+4|0;c[t>>2]=c[t>>2]&3|q;c[o+16>>2]=r?i:j;c[o+20>>2]=k;c[o+24>>2]=l;c[o+28>>2]=m;c[o+8>>2]=h;a[o>>0]=f;t=0;Ra=s;return t|0}c[o>>2]=58063;c[o+4>>2]=156338;c[o+8>>2]=31517;Db(21,32001,o);t=21;Ra=s;return t|0}function Id(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;if(Jd(b,d,e,1,0)|0){b=0;Ra=j;return b|0}i=Bb(d,j)|0;if(!i){b=7;Ra=j;return b|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](12)|0;if(!f)h=14;else{g=f;h=23}}else{f=Wa[c[29356>>2]&127](12)|0;if((c[14985]|0)>>>0<12)c[14985]=12;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){k=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=k>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(g){f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;h=23}else h=23}else h=14}do if((h|0)==14){f=b+81|0;if((a[f>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[f>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;f=b+272|0;c[f>>2]=(c[f>>2]|0)+1;f=c[b+236>>2]|0;if(f|0)c[f+12>>2]=7}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);f=1;break}else{f=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);f=1;break}}else if((h|0)==23){c[g>>2]=0;c[g+4>>2]=90;c[g+8>>2]=i;f=Hd(b,d,e,1,i,174,0,0,0,0,g)|0;if(!(c[g>>2]|0)){if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{k=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);if((f|0)==3082|(a[b+81>>0]|0)!=0){og(b);k=7;Ra=j;return k|0}else{k=c[b+68>>2]&f;Ra=j;return k|0}return 0}function Jd(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!f)t=0;else t=(Eu(f)|0)&1073741823;u=b+364|0;m=c[b+376>>2]|0;if(!m){k=b+368|0;j=b+372|0}else{k=a[f>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=f;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[u>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;a:do if(!k)j=59292;else{o=d[208+(d[f>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;n=a[m>>0]|0;l=(d[208+(n&255)>>0]|0)-o|0;if(!(n<<24>>24==0|(l|0)!=0)){n=f;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0))}if(!l)break a;if(!k){j=59292;break}}}while(0);j=c[j+8>>2]|0;b:do if(!j){l=0;j=0}else{o=h&255;if((g|0)==-2){l=0;k=0;while(1){o=(c[j+16>>2]|0)==0?0:6;v=(o|0)>(k|0);k=v?o:k;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;break b}}}l=0;n=0;while(1){v=a[j>>0]|0;k=v<<24>>24;do if(!(v<<24>>24>-1&(k|0)!=(g|0))){k=(k|0)==(g|0)?4:1;m=c[j+4>>2]|0;if((m&3|0)==(o|0)){k=k|2;break}else{k=((m&o)>>>1&1)+k|0;break}}else k=0;while(0);v=(k|0)>(n|0);k=v?k:n;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;break}else n=k}}while(0);c:do if(!(i<<24>>24)){if(l|0?(c[b+24>>2]&2|0)==0:0){q=l;r=0;o=94;break}o=d[208+(d[f>>0]|0)>>0]|0;j=c[59088+((((t+o|0)>>>0)%23|0)<<2)>>2]|0;if(j){while(1){m=c[j+32>>2]|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-o|0;if(!(v<<24>>24==0|(k|0)!=0)){n=f;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k)break;j=c[j+36>>2]|0;if(!j){j=0;o=46;break c}}if(!j){j=0;o=46}else{o=h&255;if((g|0)==-2){k=0;while(1){o=(c[j+16>>2]|0)==0?0:6;v=(o|0)>(k|0);k=v?o:k;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;o=46;break c}}}n=0;while(1){v=a[j>>0]|0;k=v<<24>>24;do if(!(v<<24>>24>-1&(k|0)!=(g|0))){k=(k|0)==(g|0)?4:1;m=c[j+4>>2]|0;if((m&3|0)==(o|0)){k=k|2;break}else{k=((m&o)>>>1&1)+k|0;break}}else k=0;while(0);v=(k|0)>(n|0);k=v?k:n;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;o=46;break}else n=k}}}else{p=l;s=0;o=93}}else o=46;while(0);d:do if((o|0)==46){k=i<<24>>24!=0;if(k&(j|0)<6){n=t+41|0;i=(b|0)==0;e:do if(i){v=Sv(n|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&v>>>0>2147483390)break d;if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](n)|0;o=71;break}j=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){v=c[14978]|0;m=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=v>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k)break d;j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;m=k}else m=k}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0)break d}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<n>>>0:0))){k=b+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=71;break e}k=b+296|0;j=c[k>>2]|0;if(!j){j=b+292|0;break}else{c[k>>2]=c[j>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=71;break e}}else j=b+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(b,n,0)|0;o=71}while(0);if((o|0)==71)if(!j)break;else m=j;gw(m|0,0,n|0)|0;j=m+40|0;l=m+32|0;c[l>>2]=j;a[m>>0]=g;c[m+4>>2]=h&255;ew(j|0,f|0,t+1|0)|0;k=a[j>>0]|0;if(k<<24>>24){do{a[j>>0]=a[208+(k&255)>>0]|0;j=j+1|0;k=a[j>>0]|0}while(k<<24>>24!=0);j=c[l>>2]|0}j=mi(u,j,m)|0;if((j|0)!=(m|0)){c[m+12>>2]=j;v=m;return v|0}do if(!i){if(c[b+480>>2]|0){Xd(b,m);break}v=m;if((c[b+304>>2]|0)>>>0<=v>>>0?(c[b+308>>2]|0)>>>0>v>>>0:0){v=b+300|0;c[m>>2]=c[v>>2];c[v>>2]=m}else o=83}else o=83;while(0);do if((o|0)==83)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{v=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);j=b+81|0;if(a[j>>0]|0){v=0;return v|0}if(a[b+82>>0]|0){v=0;return v|0}a[j>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;j=b+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[b+236>>2]|0;if(!j){v=0;return v|0}c[j+12>>2]=7;v=0;return v|0}else{p=l;s=k;o=93}}while(0);if((o|0)==93?p|0:0){q=p;r=s;o=94}if((o|0)==94?r|(c[q+16>>2]|0)!=0:0){v=q;return v|0}v=0;return v|0}function Kd(a,b,d){a=a|0;b=b|0;d=d|0;d=Ra;Ra=Ra+16|0;b=d;c[b>>2]=c[(c[a+4>>2]|0)+8>>2];b=Bb(50868,b)|0;c[a+20>>2]=1;yc(c[a>>2]|0,b,-1,1,-1)|0;if(!b){Ra=d;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=d;return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=d;return}}function Ld(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)>(d|0))return 0;Md(b,c,0,0,0)|0;return 0}function Md(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=Ra;Ra=Ra+16|0;o=q;if(g|0)c[g>>2]=-1;if(h|0)c[h>>2]=-1;if(f>>>0>3){b=21;Ra=q;return b|0}if((e|0)!=0?(i=a[e>>0]|0,i<<24>>24!=0):0){n=c[b+20>>2]|0;j=n+-1|0;a:do if((n|0)>0){n=208+(i&255)|0;i=j;m=(c[b+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[n>>0]|0)|0;if(!(l<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!i)break;j=i+-1|0;if((i|0)>0){i=j;m=m+-16|0}else{i=j;break a}}i=109-(d[n>>0]|0)|0;if(!i){j=e;k=50919;do{k=k+1|0;j=j+1|0;r=a[k>>0]|0;i=(d[208+(r&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(i|0)!=0))}i=((i|0)!=0)<<31>>31}else i=j;while(0);if((i|0)<0){c[o>>2]=e;Vb(b,1,31432,o);i=1}else p=23}else{i=10;p=23}do if((p|0)==23){c[b+404>>2]=0;i=Nd(b,i,f,g,h)|0;c[b+64>>2]=i;if(i|0){Ne(b,i);break}if(!(c[b+260>>2]|0))i=0;else{Ne(b,0);i=0}}while(0);if((i|0)==3082|(a[b+81>>0]|0)!=0){og(b);i=7}else i=c[b+68>>2]&i;if(c[b+168>>2]|0){r=i;Ra=q;return r|0}c[b+264>>2]=0;r=i;Ra=q;return r|0}function Nd(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=b+20|0;k=c[o>>2]|0;if((k|0)<=0){n=0;o=0;f=1;n=(n|0)!=0;n=f&n;o=n?5:o;return o|0}n=b+16|0;m=(f|0)==0;if((e|0)==10){b=c[(c[n>>2]|0)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){i=c[i>>2]|0;j=c[i+216>>2]|0;if(!j)b=0;else{if(m)b=0;else b=c[i+176>>2]|0;b=Qf(j,l,f,b,c[i+180>>2]|0,d[i+11>>0]|0,c[i+152>>2]|0,c[i+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;j=(b|0)==5;i=j?0:b;j=j&1;b=(i|0)==0;if(!(b&(k|0)>1)){n=j;o=i;f=b;n=(n|0)!=0;n=f&n;o=n?5:o;return o|0}h=1;do{b=c[(c[n>>2]|0)+(h<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;g=c[b>>2]|0;c[i+4>>2]=g;if(!(a[i+20>>0]|0)){i=c[i>>2]|0;l=c[i+216>>2]|0;if(!l)b=0;else{if(m)b=0;else b=c[i+176>>2]|0;b=Qf(l,g,f,b,c[i+180>>2]|0,d[i+11>>0]|0,c[i+152>>2]|0,c[i+208>>2]|0,0,0)|0;k=c[o>>2]|0}}else b=6}else b=0;e=(b|0)==5;i=e?0:b;j=e?1:j;h=h+1|0;b=(i|0)==0}while(b&(h|0)<(k|0));o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}if(m){m=0;j=0;while(1){if((m|0)==(e|0)){b=c[(c[n>>2]|0)+(e<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){b=c[i>>2]|0;i=c[b+216>>2]|0;if(!i)b=0;else{b=Qf(i,l,0,0,c[b+180>>2]|0,d[b+11>>0]|0,c[b+152>>2]|0,c[b+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;i=(b|0)==5;j=i?1:j;i=i?0:b;l=0;g=0}else{i=0;l=h}m=m+1|0;b=(i|0)==0;if(!(b&(m|0)<(k|0)))break;else h=l}o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}else{m=0;j=0;while(1){if((m|0)==(e|0)){b=c[(c[n>>2]|0)+(e<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){b=c[i>>2]|0;i=c[b+216>>2]|0;if(!i)b=0;else{b=Qf(i,l,f,c[b+176>>2]|0,c[b+180>>2]|0,d[b+11>>0]|0,c[b+152>>2]|0,c[b+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;i=(b|0)==5;j=i?1:j;i=i?0:b;l=0;g=0}else{i=0;l=h}m=m+1|0;b=(i|0)==0;if(!(b&(m|0)<(k|0)))break;else h=l}o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}return 0}function Od(a,b){a=a|0;b=b|0;return Pd(a,b,6,0)|0}function Pd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=Ra;Ra=Ra+128|0;F=H+88|0;E=H+80|0;z=H+64|0;y=H+56|0;x=H+48|0;v=H+32|0;u=H+24|0;t=H+16|0;q=H;w=H+112|0;r=H+104|0;G=H+108|0;s=H+100|0;c[r>>2]=f;c[G>>2]=0;c[s>>2]=0;c[e>>2]=0;h=mb()|0;if(h|0){G=h;Ra=H;return G|0}if((f&32768|0)==0&(c[7325]|0)!=0)k=(f&65536|0)==0?c[7326]|0:1;else k=0;if(!(f&262144)){if(c[7378]|0){f=f|131072;c[r>>2]=f}}else{f=f&-131073;c[r>>2]=f}p=f&-655129;c[r>>2]=p;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](488)|0;if(!h){h=0;B=148}else B=19}else{h=Wa[c[29356>>2]&127](488)|0;if((c[14985]|0)>>>0<488)c[14985]=488;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){D=c[14978]|0;C=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;B=L()|0;c[14768]=((B|0)<0|(B|0)==0&C>>>0<=D>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(h){i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;B=19}else B=19}else{h=0;B=148}}a:do if((B|0)==19){gw(h|0,0,488)|0;if(k|0)c[h+12>>2]=8;C=h+68|0;c[C>>2]=255;c[h+20>>2]=2;D=h+96|0;c[D>>2]=-264537850;n=h+16|0;c[n>>2]=h+412;o=h+272|0;c[o>>2]=1;i=h+108|0;j=2288;k=i+44|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[h+152>>2]=0;a[h+79>>0]=1;a[h+84>>0]=-1;m=29480;A=c[m+4>>2]|0;i=h+48|0;c[i>>2]=c[m>>2];c[i+4>>2]=A;c[h+92>>2]=0;c[h+156>>2]=2147483647;i=h+32|0;c[i>>2]=295008;c[i+4>>2]=0;i=h+380|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;A=h+336|0;c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;Qd(h,34049,1,0,78,0)|0;Qd(h,34049,3,0,78,0)|0;Qd(h,34049,2,0,78,0)|0;Qd(h,43602,1,0,79,0)|0;Qd(h,50932,1,1,78,0)|0;A=h+81|0;b:do if(!(a[A>>0]|0)){k=c[h+392>>2]|0;if(!k){j=h+384|0;i=h+388|0}else{i=783505461%((c[i>>2]|0)>>>0)|0;j=k+(i<<3)|0;i=k+(i<<3)+4|0}j=c[j>>2]|0;c:do if(!j)i=59292;else while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)+-98|0;if(!(m<<24>>24==0|(k|0)!=0)){m=34049;do{l=l+1|0;m=m+1|0;I=a[l>>0]|0;k=(d[208+(I&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(I<<24>>24==0|(k|0)!=0))}if(!k)break c;if(!j){i=59292;break}}while(0);c[h+8>>2]=c[i+8>>2];c[h+60>>2]=p;d:do if(!(1<<(f&7)&70)){c[q>>2]=58063;c[q+4>>2]=157776;c[q+8>>2]=31517;Db(21,32001,q);i=21}else{i=dn(g,b,r,h,G,s)|0;switch(i|0){case 0:break;case 7:{if(a[A>>0]|0){i=7;break d}if(a[h+82>>0]|0){i=7;break d}a[A>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;f=c[h+236>>2]|0;if(!f){i=7;break d}c[f+12>>2]=7;i=7;break d}default:break d}f=Pe(c[h>>2]|0,c[G>>2]|0,h,(c[n>>2]|0)+4|0,0,c[r>>2]|256)|0;e:do if((f|0)<3082){switch(f|0){case 0:break;default:{B=46;break e}}f=c[(c[n>>2]|0)+4>>2]|0;c[(c[f+4>>2]|0)+4>>2]=c[f>>2];f=en(h,f)|0;c[(c[n>>2]|0)+12>>2]=f;if(!(a[A>>0]|0))a[h+78>>0]=a[f+77>>0]|0;B=en(h,0)|0;I=c[n>>2]|0;c[I+28>>2]=B;c[I>>2]=50919;a[I+8>>0]=3;c[I+16>>2]=31427;a[I+24>>0]=1;c[D>>2]=-1607883113;if(a[A>>0]|0){B=148;break a}p=h+64|0;c[p>>2]=0;if(c[h+260>>2]|0)Ne(h,0);do if((Id(h,50938,2)|0)==7?(a[A>>0]|0)==0:0){if(a[h+82>>0]|0)break;a[A>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;f=c[h+236>>2]|0;if(!f)break;c[f+12>>2]=7}while(0);f=c[D>>2]|0;f:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:{B=62;break f}default:{B=61;break f}}else switch(f|0){case 1266094736:{B=62;break f}default:{B=61;break f}}else switch(f|0){case -1607883113:{B=62;break}default:B=61}while(0);g:do if((B|0)==61){c[u>>2]=50924;Db(21,38253,u);c[v>>2]=58063;c[v+4>>2]=157091;c[v+8>>2]=31517;Db(21,32001,v);f=21;B=142}else if((B|0)==62){if(a[A>>0]|0){f=7;B=142;break}f=c[C>>2]&c[p>>2];if(f|0){B=142;break}h:do if(0){f=1;k=0;i=0;do{j=c[0+(k<<2)>>2]|0;c[w>>2]=0;if(j){i=Ya[j&127](h,w,0)|0;if(i){c[x>>2]=c[w>>2];Vb(h,i,50944,x);f=0}i=c[w>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);if(!f)break h;else i=0}k=k+1|0}while(k>>>0<i>>>0)}while(0);f=c[D>>2]|0;i:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:break i;default:{B=78;break i}}else switch(f|0){case 1266094736:break i;default:{B=78;break i}}else switch(f|0){case -1607883113:break;default:B=78}while(0);if((B|0)==78){c[y>>2]=50924;Db(21,38253,y);c[z>>2]=58063;c[z+4>>2]=157091;c[z+8>>2]=31517;Db(21,32001,z);break b}if(a[A>>0]|0)break b;if(c[C>>2]&c[p>>2]|0)break b;f=rd(h,51142,30516,0)|0;if(f|0){B=142;break}if(mb()|0){f=7;B=142;break}do if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](20)|0;if(!f){f=7;B=142;break g}else i=f}else{f=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){I=c[14978]|0;z=Tv(i|0,j|0,f|0,((f|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&z>>>0<=I>>>0)&1}i=Wa[c[29340>>2]&127](f)|0;if(!i){f=7;B=142;break g}f=Wa[c[29352>>2]&127](i)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0<=(c[14987]|0)>>>0)break;c[14987]=f}while(0);a[i>>0]=1;m=i+1|0;a[m>>0]=1;n=i+4|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;do if(!(Ep(i,50983,7,30612)|0)){if(Ep(i,50990,7,30640)|0){f=7;B=111;break}if(Ep(i,50997,10,30488)|0){f=7;B=111;break}f=Hd(h,51007,1,5,i,175,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=111;break}f=c[C>>2]&f;if(f|0){B=111;break}f=Hd(h,51007,2,5,i,175,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=111;break}f=c[C>>2]&f;if(f|0){B=111;break}f=Id(h,51022,-1)|0;if(f|0){B=111;break}f=Id(h,51030,1)|0;if(f|0){B=111;break}f=Id(h,51038,1)|0;if(f|0){B=111;break}f=Id(h,51038,2)|0;if(f|0){B=111;break}f=Id(h,37598,1)|0;if(f|0){B=111;break}f=sd(h,51048,30392,i,91)|0;if(f|0){B=142;break g}f=sd(h,51053,30392,i,0)|0;if(f|0){B=142;break g}f=rd(h,55534,30668,i)|0}else{f=7;B=111}while(0);do if((B|0)==111){k=i+8|0;j=c[k>>2]|0;c[k>>2]=0;k=i+16|0;l=c[k>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[k>>2]=0;c[i+12>>2]=0;if(j|0)do{k=j;j=c[j>>2]|0;do if(a[m>>0]|0){l=c[k+12>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{I=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((j|0)!=0);c[n>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if((f|0)==0&(a[A>>0]|0)==0){f=Hd(h,55598,2,1,0,176,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=Hd(h,55608,1,1,0,177,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=Hd(h,55619,-1,1,0,178,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=sd(h,55630,30764,0,0)|0;if(f|0){B=142;break}f=sd(h,55636,30764,1,0)|0}if(f|0)B=142}while(0);if((B|0)==142){c[p>>2]=f;Ne(h,f)}zd(h,0,c[7332]|0,c[7333]|0)|0;c[h+240>>2]=76;c[h+244>>2]=1e3;break b}else switch(f|0){case 3082:{f=7;break}default:B=46}while(0);c[h+64>>2]=f;Ne(h,f);break b}while(0);f=c[s>>2]|0;I=(f|0)==0;c[t>>2]=f;Vb(h,i,I?0:31408,t);if(!I)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{I=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[D>>2]|0;j:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:{B=146;break j}default:{B=145;break j}}else switch(f|0){case 1266094736:{B=146;break j}default:{B=145;break j}}else switch(f|0){case -1607883113:{B=146;break}default:B=145}while(0);if((B|0)==145){c[E>>2]=50924;Db(21,38253,E);c[F>>2]=58063;c[F+4>>2]=157091;c[F+8>>2]=31517;Db(21,32001,F);f=21}else if((B|0)==146){if(a[A>>0]|0){B=148;break}f=c[C>>2]&c[h+64>>2];switch(f|0){case 7:{B=148;break a}case 0:break a;default:{}}}c[D>>2]=1266094736}while(0);if((B|0)==148){Bd(h,0)|0;f=7;h=0}c[e>>2]=h;h=c[G>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{I=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);I=f&255;Ra=H;return I|0}function Qd(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=Ra;Ra=Ra+32|0;k=t+16|0;j=t;s=f&255;switch(f<<24>>24){case 4:case 8:{r=2;break}default:if((s+-1|0)>>>0>2){c[j>>2]=58063;c[j+4>>2]=157148;c[j+8>>2]=31517;Db(21,32001,j);s=21;Ra=t;return s|0}else r=s}q=r&255;j=Zi(b,q,e,0)|0;if(j|0?c[j+12>>2]|0:0){if(c[b+168>>2]|0){Vb(b,5,57995,k);s=5;Ra=t;return s|0}f=c[b+4>>2]|0;if(f|0)do{p=f+149|0;o=(d[p>>0]|d[p+1>>0]<<8)&-4|1;a[p>>0]=o;a[p+1>>0]=o>>8;f=c[f+8>>2]|0}while((f|0)!=0);p=j+4|0;f=a[p>>0]|0;if((r|0)==(f&-9&255|0)){m=c[b+392>>2]|0;if(!m){k=b+384|0;j=b+388|0}else{k=a[e>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=e;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[b+380>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;a:do if(!k)j=59292;else{o=d[208+(d[e>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;n=a[m>>0]|0;l=(d[208+(n&255)>>0]|0)-o|0;if(!(n<<24>>24==0|(l|0)!=0)){n=e;do{m=m+1|0;n=n+1|0;u=a[m>>0]|0;l=(d[208+(u&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(l|0)!=0))}if(!l)break a;if(!k){j=59292;break}}}while(0);k=c[j+8>>2]|0;if((a[k+4>>0]|0)==f<<24>>24){j=c[k+16>>2]|0;if(j){ab[j&127](c[k+8>>2]|0);f=a[p>>0]|0}c[k+12>>2]=0}if((a[k+24>>0]|0)==f<<24>>24){j=c[k+36>>2]|0;if(j){ab[j&127](c[k+28>>2]|0);f=a[p>>0]|0}c[k+32>>2]=0}if((a[k+44>>0]|0)==f<<24>>24){f=c[k+56>>2]|0;if(f|0)ab[f&127](c[k+48>>2]|0);c[k+52>>2]=0}}}f=Zi(b,q,e,1)|0;if(!f){u=7;Ra=t;return u|0}c[f+12>>2]=h;c[f+8>>2]=g;c[f+16>>2]=i;a[f+4>>0]=r|s&8;c[b+64>>2]=0;if(!(c[b+260>>2]|0)){u=0;Ra=t;return u|0}Ne(b,0);u=0;Ra=t;return u|0}function Rd(e,f,g,h,i,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=Ra;Ra=Ra+16|0;y=z+8|0;w=z;x=z+12|0;c[x>>2]=0;r=e+20|0;n=c[r>>2]|0;t=e+16|0;q=c[t>>2]|0;if((n|0)>0){o=0;do{p=c[q+(o<<4)+4>>2]|0;if(p|0)c[(c[p+4>>2]|0)+4>>2]=c[p>>2];o=o+1|0}while((o|0)!=(n|0))}p=e+24|0;s=(c[p>>2]&1|0)==0;v=c[q+12>>2]|0;a[e+78>>0]=a[v+77>>0]|0;if(!(b[v+78>>1]&1)){n=eh(e,0,x,0)|0;if(!n){n=c[r>>2]|0;v=9}else v=16}else v=9;a:do if((v|0)==9){if((n|0)>1)do{o=n;n=n+-1|0;if((b[(c[(c[t>>2]|0)+(n<<4)+12>>2]|0)+78>>1]&1)==0?(u=eh(e,n,x,0)|0,u|0):0){n=u;v=16;break a}}while((o|0)>2);if(s)c[p>>2]=c[p>>2]&-2;u=Sd(e,g,f)|0;if((u|0)!=0?(c[u+12>>2]|0)==0:0){do if(h){f=b[u+42>>1]|0;t=f<<16>>16;b:do if(f<<16>>16>0){s=c[u+4>>2]|0;f=d[208+(d[h>>0]|0)>>0]|0;n=0;do{o=s+(n<<4)|0;q=c[o>>2]|0;r=a[q>>0]|0;p=(d[208+(r&255)>>0]|0)-f|0;if(!(r<<24>>24==0|(p|0)!=0)){r=h;do{q=q+1|0;r=r+1|0;A=a[q>>0]|0;p=(d[208+(A&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(p|0)!=0))}if(!p)break b;n=n+1|0}while((n|0)<(t|0))}else{n=0;o=0}while(0);if((n|0)==(t|0)){if(c[u+36>>2]&32|0){o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0;break a}r=a[h>>0]|0;q=d[208+(r&255)>>0]|0;n=q+-95|0;r=r<<24>>24==0;if(!(r|(n|0)!=0)){o=58070;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){n=q+-114|0;if(!(r|(n|0)!=0)){o=40352;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){n=q+-111|0;if(!(r|(n|0)!=0)){o=58078;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0;break a}}}A=b[u+40>>1]|0;n=A<<16>>16;if(A<<16>>16<=-1){q=0;n=1;s=0;r=0;p=31453;break}q=n;o=(c[u+4>>2]|0)+(n<<4)|0}else q=n;if(o){n=a[o+15>>0]|0;if(!(n&4))p=0;else{p=c[o>>2]|0;p=p+(Eu(p)|0)+1|0}r=c[o+8>>2]|0;o=(a[o+12>>0]|0)!=0&1;n=n&1;if((q|0)==(b[u+40>>1]|0)){q=(c[u+36>>2]|0)>>>3&1;s=o}else{q=0;s=o}}else{q=0;n=1;s=0;r=0;p=31453}}else{q=0;n=1;s=0;r=0;p=31453}while(0);o=0;t=q;f=n;r=(r|0)==0?34049:r;q=0}else{o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0}}while(0);if((v|0)==16){o=n;u=0;t=0;f=0;s=0;r=0;p=0;q=(n|0)!=0}if(i|0)c[i>>2]=p;if(j|0)c[j>>2]=r;if(k|0)c[k>>2]=s;if(l|0)c[l>>2]=f;if(m|0)c[m>>2]=t;n=c[x>>2]|0;if(!(q|(u|0)!=0)){do if(n|0){if(e|0){if(c[e+480>>2]|0){Xd(e,n);break}A=n;if((c[e+304>>2]|0)>>>0<=A>>>0?(c[e+308>>2]|0)>>>0>A>>>0:0){A=e+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[w>>2]=g;c[w+4>>2]=h;n=dd(e,31461,w)|0;c[x>>2]=n;o=1}c[y>>2]=n;Vb(e,o,(n|0)==0?0:31408,y);n=c[x>>2]|0;do if(n|0){if(e|0){if(c[e+480>>2]|0){Xd(e,n);break}A=n;if((c[e+304>>2]|0)>>>0<=A>>>0?(c[e+308>>2]|0)>>>0>A>>>0:0){A=e+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if((o|0)==3082|(a[e+81>>0]|0)!=0){og(e);A=7;Ra=z;return A|0}else{A=c[e+68>>2]&o;Ra=z;return A|0}return 0}function Sd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[a+20>>2]|0;l=(d|0)==0;e=a+16|0;if((k|0)<=0){a=b;while(1){if(Hb(a,34585)|0){h=0;a=18;break}if(!(Gb(d,c[(c[e>>2]|0)+16>>2]|0)|0))a=34855;else{h=0;a=18;break}}if((a|0)==18)return h|0}f=c[e>>2]|0;g=f+16|0;a:while(1){if(l){a=0;do{j=ji((c[f+((a^a>>>0<2)<<4)+12>>2]|0)+8|0,b)|0;if(j|0){a=16;break a}a=a+1|0}while((a|0)<(k|0))}else{a=0;do{e=a^a>>>0<2;if((Hb(d,c[f+(e<<4)>>2]|0)|0)==0?(i=ji((c[f+(e<<4)+12>>2]|0)+8|0,b)|0,i|0):0){a=17;break a}a=a+1|0}while((a|0)<(k|0))}if(Hb(b,34585)|0){h=0;a=18;break}if(!(Gb(d,c[g>>2]|0)|0))b=34855;else{h=0;a=18;break}}if((a|0)==16){l=j;return l|0}else if((a|0)==17){l=i;return l|0}else if((a|0)==18)return h|0;return 0}function Td(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(e){j=c[b+20>>2]|0;g=j+-1|0;a:do if((j|0)>0){f=g;j=(c[b+16>>2]|0)+(g<<4)|0;while(1){h=c[j>>2]|0;if(h|0){i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=e;do{h=h+1|0;i=i+1|0;k=a[h>>0]|0;g=(d[208+(k&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(g|0)!=0))}if(!g)break a}if(!f)break;g=f+-1|0;if((f|0)>0){f=g;j=j+-16|0}else{f=g;break a}}f=109-(d[208+(d[e>>0]|0)>>0]|0)|0;if(!f){g=50919;do{g=g+1|0;e=e+1|0;k=a[g>>0]|0;f=(d[208+(k&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(f|0)!=0))}f=((f|0)!=0)<<31>>31}else f=g;while(0);if((f|0)<0){k=0;return k|0}}else f=0;k=c[(c[b+16>>2]|0)+(f<<4)+4>>2]|0;return k|0}function Ud(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=c[a+4>>2]|0;c[h+4>>2]=c[a>>2];g=h+22|0;if(b[g>>1]&2){h=8;return h|0}if((e|0)<0)e=(c[h+32>>2]|0)-(c[h+36>>2]|0)|0;if((d+-512|0)>>>0<65025?(d+-1&d|0)==0:0){c[h+32>>2]=d;Tf(h)}d=h+32|0;a=Se(c[h>>2]|0,d,e)|0;c[h+36>>2]=(c[d>>2]|0)-(e&65535);if(!f){h=a;return h|0}b[g>>1]=b[g>>1]|2;h=a;return h|0}function Vd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if((a[b>>0]|0)!=48){i=xb(b)|0;d=Og(b,d,i,1)|0;return d|0}switch(a[b+1>>0]|0){case 88:case 120:break;default:{i=xb(b)|0;d=Og(b,d,i,1)|0;return d|0}}i=2;while(1){h=a[b+i>>0]|0;if(h<<24>>24==48)i=i+1|0;else break}if(!(a[880+(h&255)>>0]&8)){f=i;g=0;e=0}else{f=i;g=0;e=0;do{j=cw(g|0,e|0,4)|0;e=L()|0;g=h<<24>>24;g=j|(0-(g>>>6&1)&9)+g&15;f=f+1|0;h=a[b+f>>0]|0}while((a[880+(h&255)>>0]&8)!=0)}j=d;c[j>>2]=g;c[j+4>>2]=e;return ((a[b+f>>0]|0)==0?((f-i|0)>16?2:0):2)|0}function Wd(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if(!b){w=0;return w|0}c=a[b>>0]|0;do if(!(c<<24>>24)){c=31489;f=3}else{o=c&255;c=208+o|0;if((o|32|0)==115){c=a[b+1>>0]|0;if(!(c<<24>>24)){c=31490;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==113){c=a[b+2>>0]|0;if(!(c<<24>>24)){c=31491;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==108){c=a[b+3>>0]|0;if(!(c<<24>>24)){c=31492;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==105){c=a[b+4>>0]|0;if(!(c<<24>>24)){c=31493;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==116){c=a[b+5>>0]|0;if(!(c<<24>>24)){c=31494;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==101){c=a[b+6>>0]|0;if(!(c<<24>>24)){c=31495;f=3;break}if(c<<24>>24==95){e=b+7|0;break}else{f=95;c=208+(c&255)|0}}else f=101}else f=116}else f=105}else f=108}else f=113}else f=115;e=d[c>>0]|0;c=f;f=7}while(0);if((f|0)==3){e=0;c=a[208+(d[c>>0]|0)>>0]|0;f=7}if((f|0)==7)e=(e|0)==(c&255|0)?b+7|0:b;o=(Eu(e)|0)&1073741823;if(!o){w=0;return w|0}f=e;h=58082;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=11;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=13;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=16;break}}if((f|0)==11){i=0;j=a[208+(d[h>>0]|0)>>0]|0;f=15}else if((f|0)==13){i=c&255;j=g;f=15}if((f|0)==15?(i|0)==(j&255|0):0)f=16;if((f|0)==16?(a[880+(d[58082+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58103;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=23;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=21;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=25;break}}if((f|0)==21){k=c&255;l=g;f=24}else if((f|0)==23){k=0;l=a[208+(d[h>>0]|0)>>0]|0;f=24}if((f|0)==24?(k|0)==(l&255|0):0)f=25;if((f|0)==25?(a[880+(d[58103+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58115;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=31;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=29;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=33;break}}if((f|0)==29){m=c&255;n=g;f=32}else if((f|0)==31){m=0;n=a[208+(d[h>>0]|0)>>0]|0;f=32}if((f|0)==32?(m|0)==(n&255|0):0)f=33;if((f|0)==33?(a[880+(d[58115+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58127;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=39;break}g=a[208+(c&255)>>0]|0;c=a[208+(d[h>>0]|0)>>0]|0;if(g<<24>>24!=c<<24>>24){f=37;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=41;break}}if((f|0)==37){p=g&255;q=c;f=40}else if((f|0)==39){p=0;q=a[208+(d[h>>0]|0)>>0]|0;f=40}if((f|0)==40?(p|0)==(q&255|0):0)f=41;if((f|0)==41?(a[880+(d[58127+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58151;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=47;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=45;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=49;break}}if((f|0)==45){r=c&255;s=g;f=48}else if((f|0)==47){r=0;s=a[208+(d[h>>0]|0)>>0]|0;f=48}if((f|0)==48?(r|0)==(s&255|0):0)f=49;if((f|0)==49?(a[880+(d[58151+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58164;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=55;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=53;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=57;break}}if((f|0)==53){t=c&255;u=g;f=56}else if((f|0)==55){t=0;u=a[208+(d[h>>0]|0)>>0]|0;f=56}if((f|0)==56?(t|0)==(u&255|0):0)f=57;if((f|0)==57?(a[880+(d[58164+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}g=58184;f=o;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){f=63;break}c=a[208+(c&255)>>0]|0;b=a[208+(d[g>>0]|0)>>0]|0;if(c<<24>>24!=b<<24>>24){f=61;break}if((f|0)>1){e=e+1|0;g=g+1|0;f=f+-1|0}else{f=65;break}}if((f|0)==61){v=c&255;w=b;f=64}else if((f|0)==63){v=0;w=a[208+(d[g>>0]|0)>>0]|0;f=64}if((f|0)==64?(v|0)==(w&255|0):0)f=65;if((f|0)==65?(a[880+(d[58184+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}w=0;return w|0}function Xd(a,b){a=a|0;b=b|0;var d=0;if(((a|0)!=0?(d=b,(c[a+304>>2]|0)>>>0<=d>>>0):0)?(c[a+308>>2]|0)>>>0>d>>>0:0)b=e[a+276>>1]|0;else b=Wa[c[29352>>2]&127](b)|0;a=c[a+480>>2]|0;c[a>>2]=(c[a>>2]|0)+b;return}function Yd(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0;if(c[b+272>>2]|0){if(a[b+81>>0]|0){f=0;return f|0}}else{do if(0<f>>>0|(0==(f|0)?(e[b+276>>1]|0)>>>0<d>>>0:0))g=b+288|0;else{g=b+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];f=b+284|0;c[f>>2]=(c[f>>2]|0)+1;f=h;return f|0}g=b+296|0;h=c[g>>2]|0;if(!h){g=b+292|0;break}c[g>>2]=c[h>>2];f=b+284|0;c[f>>2]=(c[f>>2]|0)+1;f=h;return f|0}while(0);c[g>>2]=(c[g>>2]|0)+1}f=_d(b,d,f)|0;return f|0}function Zd(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=b+81|0;if(a[h>>0]|0){m=0;return m|0}l=d;m=b+304|0;if((c[m>>2]|0)>>>0<=l>>>0?(k=b+308|0,(c[k>>2]|0)>>>0>l>>>0):0){a:do if(!(c[b+272>>2]|0)){do if(!(0<g>>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0<f>>>0:0))){i=b+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];g=b+284|0;c[g>>2]=(c[g>>2]|0)+1;break a}i=b+296|0;h=c[i>>2]|0;if(!h){h=b+292|0;break}else{c[i>>2]=c[h>>2];g=b+284|0;c[g>>2]=(c[g>>2]|0)+1;break a}}else h=b+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=13}else j=13;while(0);if((j|0)==13)h=_d(b,f,g)|0;if(!h){m=0;return m|0}ew(h|0,d|0,e[b+276>>1]|0)|0;if(!d){m=h;return m|0}if(c[b+480>>2]|0){Xd(b,d);m=h;return m|0}if((c[m>>2]|0)>>>0<=l>>>0?(c[k>>2]|0)>>>0>l>>>0:0){m=b+300|0;c[d>>2]=c[m>>2];c[m>>2]=d;m=h;return m|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);m=h;return m|0}else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);m=h;return m|0}}if((mb()|0)==0?(i=sb(d,f,g)|0,i|0):0){m=i;return m|0}if(a[h>>0]|0){m=0;return m|0}if(a[b+82>>0]|0){m=0;return m|0}a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(!h){m=0;return m|0}c[h+12>>2]=7;m=0;return m|0}function _d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Sv(d|0,e|0,-1,-1)|0;e=L()|0;do if(!(e>>>0>0|(e|0)==0&f>>>0>2147483390)){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](d)|0;if(!e)break;return e|0}f=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;d=59064;e=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&e>>>0>0){g=c[14978]|0;d=Tv(e|0,d|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&d>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(d|0){e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0){g=d;return g|0}c[14987]=e;g=d;return g|0}}while(0);e=b+81|0;if(a[e>>0]|0){g=0;return g|0}if(a[b+82>>0]|0){g=0;return g|0}a[e>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;e=b+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[b+236>>2]|0;if(!e){g=0;return g|0}c[e+12>>2]=7;g=0;return g|0}function $d(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0;g=c[b>>2]|0;k=b+16|0;j=(c[k>>2]|0)+1|0;a:do if(!g){h=Sv(j|0,0,-1,-1)|0;g=L()|0;if(!(g>>>0>0|(g|0)==0&h>>>0>2147483390)){if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](j)|0;i=25;break}h=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){j=c[14978]|0;g=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(f|0){d=Wa[c[29352>>2]&127](f)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0){c[14987]=d;d=f;i=26}else{d=f;i=26}}}}else{if(c[g+272>>2]|0){if(a[g+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[g+276>>1]|0)>>>0<j>>>0:0))){f=g+300|0;d=c[f>>2]|0;if(d|0){c[f>>2]=c[d>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;i=25;break a}f=g+296|0;d=c[f>>2]|0;if(!d){d=g+292|0;break}else{c[f>>2]=c[d>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;i=25;break a}}else d=g+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(g,j,0)|0;i=25}while(0);if((i|0)==25?d|0:0)i=26;if((i|0)==26){ew(d|0,c[b+4>>2]|0,(c[k>>2]|0)+1|0)|0;k=b+21|0;a[k>>0]=a[k>>0]|4;k=d;b=b+4|0;c[b>>2]=k;return k|0}a[b+20>>0]=7;if(!(c[b+12>>2]|0)){k=0;b=b+4|0;c[b>>2]=k;return k|0}f=b+21|0;if(!(a[f>>0]&4))d=b+4|0;else{g=c[b>>2]|0;d=b+4|0;h=c[d>>2]|0;do if(h|0){if(g|0){if(c[g+480>>2]|0){Xd(g,h);break}j=h;if((c[g+304>>2]|0)>>>0<=j>>>0?(c[g+308>>2]|0)>>>0>j>>>0:0){j=g+300|0;c[h>>2]=c[j>>2];c[j>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{j=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);a[f>>0]=a[f>>0]&-5}c[b+8>>2]=0;c[k>>2]=0;c[d>>2]=0;k=0;b=b+4|0;c[b>>2]=k;return k|0}function ae(a,b){a=a|0;b=b|0;return 29668}function be(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=Ra;Ra=Ra+48|0;i=j+24|0;g=j;h=a+8|0;f=c[h>>2]|0;te(a);ie(a,0)|0;h=c[h>>2]|0;if(c[f+24>>2]|0){f=a+28|0;d=c[f>>2]|0;e=h+32|0;c[d+8>>2]=c[e>>2];c[e>>2]=d;c[a+12>>2]=-1;c[f>>2]=0}do if(h|0?(e=h+36|0,f=(c[e>>2]|0)+-1|0,c[e>>2]=f,(f|0)==0):0){e=h+32|0;b=c[e>>2]|0;if(b|0){f=a+32|0;do{d=b;b=c[b+8>>2]|0;if(Wa[c[2352>>2]&127](c[d>>2]|0)|0){l=c[f>>2]|0;m=uu()|0;m=c[m>>2]|0;k=dv(m)|0;c[g>>2]=33804;c[g+4>>2]=m;c[g+8>>2]=31695;c[g+12>>2]=(l|0)==0?59952:l;c[g+16>>2]=k;Db(4106,31953,g)}if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0)}c[e>>2]=0;e=c[h+48>>2]|0;d=h+44|0;b=c[d>>2]|0;if(!e)c[14795]=b;else{c[e+44>>2]=b;b=c[d>>2]|0}if(b|0)c[b+48>>2]=e;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);b=a+12|0;d=c[b>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){l=c[a+32>>2]|0;k=uu()|0;k=c[k>>2]|0;m=dv(k)|0;c[i>>2]=34584;c[i+4>>2]=k;c[i+8>>2]=31695;c[i+12>>2]=(l|0)==0?59952:l;c[i+16>>2]=m;Db(4106,31953,i)}c[b>>2]=-1}b=c[a+28>>2]|0;if(!b){b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}return 0}function ce(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=a+12|0;g=0;h=d;i=b;while(1){if((xv(c[l>>2]|0,e,0)|0)<0){f=3;break}j=Ya[c[2436>>2]&127](c[l>>2]|0,i,h)|0;if((h|0)==(j|0)){f=10;break}if((j|0)<0){k=uu()|0;if((c[k>>2]|0)==4)k=1;else{f=7;break}}else{e=Sv(e|0,f|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;k=j;g=j+g|0;h=h-j|0;i=(j|0)==0?i:i+j|0}if((k|0)<=0){h=0;f=10;break}}if((f|0)==3){g=uu()|0;c[a+20>>2]=c[g>>2];g=-1}else if((f|0)==7){h=uu()|0;c[a+20>>2]=c[h>>2];h=j;g=0;f=10}if((f|0)==10)g=g+h|0;if((g|0)==(d|0)){d=0;return d|0}if((g|0)<0){d=266;return d|0}c[a+20>>2]=0;gw(b+g|0,0,d-g|0)|0;d=522;return d|0}function de(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=a+12|0;j=d;h=f;a:while(1){d=c[i>>2]|0;g=j&131071;while(1){if((xv(d,e,0)|0)<0){f=-1;b=6;break a}f=Ya[c[2472>>2]&127](d,b,g)|0;if((f|0)>=0)break;k=uu()|0;if((c[k>>2]|0)!=4){b=6;break a}}d=(j|0)>(f|0);if(!(d&(f|0)!=0)){b=9;break}k=Sv(e|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;j=j-f|0;b=b+f|0;h=L()|0;e=k}if((b|0)==6){d=a+20|0;b=uu()|0;b=c[b>>2]|0;c[d>>2]=b;if((j|0)<=(f|0)){k=0;return k|0}if((b|0)!=28){k=778;return k|0}}else if((b|0)==9)if(d)d=a+20|0;else{k=0;return k|0}c[d>>2]=0;k=13;return k|0}function ee(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;h=j;f=c[a+40>>2]|0;g=((f|0)<0)<<31>>31;d=Sv(b|0,d|0,-1,-1)|0;d=Sv(d|0,L()|0,f|0,g|0)|0;e=L()|0;if((f|0)>0){b=Zv(d|0,e|0,f|0,g|0)|0;b=Tv(d|0,e|0,b|0,L()|0)|0;L()|0}d=c[a+12>>2]|0;do{e=Xa[c[2412>>2]&255](d,b)|0;if((e|0)>=0){i=6;break}g=uu()|0}while((c[g>>2]|0)==4);if((i|0)==6?(e|0)==0:0){i=0;Ra=j;return i|0}g=uu()|0;c[a+20>>2]=c[g>>2];a=c[a+32>>2]|0;g=uu()|0;g=c[g>>2]|0;i=dv(g)|0;c[h>>2]=36273;c[h+4>>2]=g;c[h+8>>2]=31726;c[h+12>>2]=(a|0)==0?59952:a;c[h+16>>2]=i;Db(1546,31953,h);i=1546;Ra=j;return i|0}function fe(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+48|0;g=h+24|0;d=h;f=h+44|0;if(zv(c[a+12>>2]|0)|0){f=uu()|0;c[a+20>>2]=c[f>>2];f=c[a+32>>2]|0;a=uu()|0;a=c[a>>2]|0;g=dv(a)|0;c[d>>2]=36228;c[d+4>>2]=a;c[d+8>>2]=32026;c[d+12>>2]=(f|0)==0?59952:f;c[d+16>>2]=g;Db(1034,31953,d);g=1034;Ra=h;return g|0}e=a+18|0;if(!(b[e>>1]&8)){g=0;Ra=h;return g|0}d=a+32|0;if((Xa[c[2544>>2]&255](c[d>>2]|0,f)|0)==0?(zv(c[f>>2]|0)|0,Wa[c[2352>>2]&127](c[f>>2]|0)|0):0){a=c[d>>2]|0;d=uu()|0;d=c[d>>2]|0;f=dv(d)|0;c[g>>2]=36242;c[g+4>>2]=d;c[g+8>>2]=31695;c[g+12>>2]=(a|0)==0?59952:a;c[g+16>>2]=f;Db(4106,31953,g)}b[e>>1]=b[e>>1]&-9;g=0;Ra=h;return g|0}function ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Ra;Ra=Ra+80|0;d=e;if(!(Xa[c[2400>>2]&255](c[a+12>>2]|0,d)|0)){a=c[d+36>>2]|0;f=(a|0)==1;d=b;c[d>>2]=f?0:a;c[d+4>>2]=f?0:((a|0)<0)<<31>>31;d=0;Ra=e;return d|0}else{f=uu()|0;c[a+20>>2]=c[f>>2];f=1802;Ra=e;return f|0}return 0}function he(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+96|0;r=C+56|0;t=C+48|0;q=C+40|0;s=C+32|0;l=C+24|0;m=C+16|0;h=C+8|0;j=C;y=C+80|0;x=C+64|0;B=d+16|0;g=a[B>>0]|0;if((g&255|0)>=(e|0)){d=0;Ra=C;return d|0}w=d+8|0;v=c[w>>2]|0;A=v+28|0;f=a[A>>0]|0;if(g<<24>>24!=f<<24>>24?(e|0)>1|(f&255)>2:0){d=5;Ra=C;return d|0}k=(e|0)==1;do if(!k){f=x+8|0;c[f>>2]=1;b[x+2>>1]=0;if((e|0)==4)if((g&255)<3){o=f;z=10}else z=43;else z=42}else{if((f+-1&255)>=2){o=x+8|0;c[o>>2]=1;b[x+2>>1]=0;z=10;break}a[B>>0]=1;d=v+20|0;c[d>>2]=(c[d>>2]|0)+1;d=v+24|0;c[d>>2]=(c[d>>2]|0)+1;d=0;Ra=C;return d|0}while(0);a:do if((z|0)==10){b[x>>1]=(k^1)&1;n=x+4|0;c[n>>2]=1073741824;p=d+18|0;do if((b[p>>1]&3)==1){g=v+29|0;if(!(a[g>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=1073741826;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;f=c[d+12>>2]|0;c[j>>2]=y;f=Ya[z&127](f,13,j)|0;if((f|0)<0){z=17;break}else{a[g>>0]=1;i=v+24|0;c[i>>2]=(c[i>>2]|0)+1;i=f;z=16;break}}}else{z=c[606]|0;i=c[d+12>>2]|0;c[h>>2]=x;i=Ya[z&127](i,13,h)|0;z=16}while(0);if((z|0)==16?i|0:0)z=17;if((z|0)==17){g=uu()|0;g=c[g>>2]|0;switch(g|0){case 1:{f=3;break}case 37:case 4:case 16:case 110:case 11:case 13:{d=5;Ra=C;return d|0}default:f=3850}c[d+20>>2]=g;d=f;Ra=C;return d|0}if(k){f=1073741826;c[n>>2]=f;c[o>>2]=510;h=c[w>>2]|0;do if((b[p>>1]&3)==1){g=h+29|0;if(!(a[g>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=f;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;f=c[d+12>>2]|0;c[m>>2]=y;f=Ya[z&127](f,13,m)|0;if((f|0)<0){z=28;break}else{a[g>>0]=1;z=h+24|0;c[z>>2]=(c[z>>2]|0)+1;z=27;break}}else{f=0;g=0}}else{z=c[606]|0;f=c[d+12>>2]|0;c[l>>2]=x;f=Ya[z&127](f,13,l)|0;z=27}while(0);if((z|0)==27)if(!f){f=0;g=0}else z=28;b:do if((z|0)==28){f=uu()|0;f=c[f>>2]|0;switch(f|0){case 37:case 4:case 16:case 110:case 11:case 13:{g=5;break b}case 1:{f=1;g=3;break b}default:{g=3850;break b}}}while(0);c[n>>2]=1073741824;c[o>>2]=1;b[x>>1]=2;j=c[w>>2]|0;do if((b[p>>1]&3)==1){i=j+29|0;if(!(a[i>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=1073741826;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;h=c[d+12>>2]|0;c[s>>2]=y;h=Ya[z&127](h,13,s)|0;if((h|0)<0){z=37;break}else{a[i>>0]=1;z=j+24|0;c[z>>2]=(c[z>>2]|0)+1;z=37;break}}else z=39}else{z=c[606]|0;h=c[d+12>>2]|0;c[q>>2]=x;h=Ya[z&127](h,13,q)|0;z=37}while(0);if((z|0)==37)if((g|0)==0&(h|0)!=0){f=uu()|0;g=2058;f=c[f>>2]|0}else z=39;c:do if((z|0)==39)switch(g&4095){case 0:{a[B>>0]=1;z=v+24|0;c[z>>2]=(c[z>>2]|0)+1;c[v+20>>2]=1;z=58;break a}case 5:{d=5;Ra=C;return d|0}default:break c}while(0);c[d+20>>2]=f;d=g;Ra=C;return d|0}else{f=o;z=42}}while(0);if((z|0)==42)if((e|0)!=4){b[x>>1]=1;if((e|0)==2){h=1073741825;i=1073741824;g=1;z=48}else{g=1073741824;z=47}}else z=43;if((z|0)==43)if((c[v+20>>2]|0)>1){f=5;z=60}else{b[x>>1]=1;g=1073741824;z=47}if((z|0)==47){h=g+2|0;i=g;g=510;z=48}d:do if((z|0)==48){c[x+4>>2]=h;c[f>>2]=g;h=c[w>>2]|0;do if((b[d+18>>1]&3)==1){g=h+29|0;if(a[g>>0]|0){z=58;break d}b[y+2>>1]=0;c[y+4>>2]=i+2;c[y+8>>2]=510;b[y>>1]=1;x=c[606]|0;f=c[d+12>>2]|0;c[t>>2]=y;f=Ya[x&127](f,13,t)|0;if((f|0)<0)break;else{a[g>>0]=1;u=h+24|0;c[u>>2]=(c[u>>2]|0)+1;u=f;z=54;break}}else{z=c[606]|0;u=c[d+12>>2]|0;c[r>>2]=x;u=Ya[z&127](u,13,r)|0;z=54}while(0);if((z|0)==54?(u|0)==0:0){z=58;break}g=uu()|0;g=c[g>>2]|0;switch(g|0){case 37:case 4:case 16:case 110:case 11:case 13:{f=5;break}case 1:{f=3;z=57;break}default:{f=3850;z=57}}if((z|0)==57)c[d+20>>2]=g;if((e|0)==4)z=60;else{d=f;Ra=C;return d|0}}while(0);if((z|0)==58){d=e&255;a[B>>0]=d;a[A>>0]=d;d=0;Ra=C;return d|0}else if((z|0)==60){a[B>>0]=3;a[A>>0]=3;d=f;Ra=C;return d|0}return 0}function ie(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;z=Ra;Ra=Ra+112|0;y=z+48|0;r=z+40|0;t=z+32|0;n=z+24|0;o=z+16|0;k=z+8|0;l=z;s=z+88|0;q=z+72|0;x=d+16|0;f=a[x>>0]|0;if((f&255|0)<=(e|0)){y=0;Ra=z;return y|0}v=d+8|0;w=c[v>>2]|0;do if((f&255)>1){a:do if((e|0)==1){b[q>>1]=0;j=q+2|0;b[j>>1]=0;i=1073741826;h=q+4|0;c[h>>2]=i;g=q+8|0;c[g>>2]=510;f=d+18|0;do if((b[f>>1]&3)==1){k=w+29|0;if(a[k>>0]|0){i=w;break a}b[s+2>>1]=0;c[s+4>>2]=i;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;i=c[d+12>>2]|0;c[l>>2]=s;i=Ya[A&127](i,13,l)|0;if((i|0)<0)break;else{a[k>>0]=1;m=w+24|0;c[m>>2]=(c[m>>2]|0)+1;m=i;u=11;break}}else{u=c[606]|0;m=c[d+12>>2]|0;c[k>>2]=q;m=Ya[u&127](m,13,k)|0;u=11}while(0);if((u|0)==11?(m|0)==0:0){i=c[v>>2]|0;break}A=uu()|0;c[d+20>>2]=c[A>>2];A=2314;Ra=z;return A|0}else{j=q+2|0;h=q+4|0;g=q+8|0;f=d+18|0;i=w}while(0);b[q>>1]=2;b[j>>1]=0;c[h>>2]=1073741824;c[g>>2]=2;do if((b[f>>1]&3)==1){g=i+29|0;if(!(a[g>>0]|0)){b[s+2>>1]=0;c[s+4>>2]=1073741826;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;f=c[d+12>>2]|0;c[o>>2]=s;f=Ya[A&127](f,13,o)|0;if((f|0)<0)break;else{a[g>>0]=1;p=i+24|0;c[p>>2]=(c[p>>2]|0)+1;p=f;u=20;break}}else u=21}else{u=c[606]|0;p=c[d+12>>2]|0;c[n>>2]=q;p=Ya[u&127](p,13,n)|0;u=20}while(0);if((u|0)==20?(p|0)==0:0)u=21;if((u|0)==21){a[w+28>>0]=1;break}A=uu()|0;c[d+20>>2]=c[A>>2];A=2058;Ra=z;return A|0}while(0);if(!e){u=w+20|0;A=(c[u>>2]|0)+-1|0;c[u>>2]=A;if(!A){b[q>>1]=2;b[q+2>>1]=0;c[q+8>>2]=0;c[q+4>>2]=0;h=c[v>>2]|0;do if((b[d+18>>1]&3)==1){g=h+29|0;if(!(a[g>>0]|0)){b[s+2>>1]=0;c[s+4>>2]=1073741826;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;f=c[d+12>>2]|0;c[t>>2]=s;f=Ya[A&127](f,13,t)|0;if((f|0)<0){u=33;break}else{a[g>>0]=1;u=h+24|0;c[u>>2]=(c[u>>2]|0)+1;u=31;break}}else u=32}else{u=c[606]|0;f=c[d+12>>2]|0;c[r>>2]=q;f=Ya[u&127](f,13,r)|0;u=31}while(0);if((u|0)==31)if(!f)u=32;else u=33;if((u|0)==32){f=0;g=w+28|0}else if((u|0)==33){f=uu()|0;c[d+20>>2]=c[f>>2];a[w+28>>0]=0;f=2058;g=x}a[g>>0]=0;j=f}else j=0;w=w+24|0;A=(c[w>>2]|0)+-1|0;c[w>>2]=A;if(!A){i=(c[v>>2]|0)+32|0;f=c[i>>2]|0;if(f|0){h=d+32|0;do{g=f;f=c[f+8>>2]|0;if(Wa[c[2352>>2]&127](c[g>>2]|0)|0){d=c[h>>2]|0;w=uu()|0;w=c[w>>2]|0;A=dv(w)|0;c[y>>2]=33804;c[y+4>>2]=w;c[y+8>>2]=31695;c[y+12>>2]=(d|0)==0?59952:d;c[y+16>>2]=A;Db(4106,31953,y)}if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{A=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0)}c[i>>2]=0}if(j|0){A=j;Ra=z;return A|0}}a[x>>0]=e;A=0;Ra=z;return A|0}function je(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+32|0;h=j;i=j+8|0;g=c[e+8>>2]|0;if((d[g+28>>0]|0)>1){i=0;h=1;c[f>>2]=h;Ra=j;return i|0}if(a[g+29>>0]|0){i=0;h=0;c[f>>2]=h;Ra=j;return i|0}b[i+2>>1]=0;c[i+4>>2]=1073741825;c[i+8>>2]=1;b[i>>1]=1;k=c[606]|0;g=c[e+12>>2]|0;c[h>>2]=i;if(!(Ya[k&127](g,12,h)|0)){g=0;e=(b[i>>1]|0)!=2&1}else{g=uu()|0;c[e+20>>2]=c[g>>2];g=3594;e=0}k=g;i=e;c[f>>2]=i;Ra=j;return k|0}function ke(a,f,g){a=a|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+80|0;h=v;m=v+4|0;do switch(f|0){case 1:{c[g>>2]=d[a+16>>0];a=0;Ra=v;return a|0}case 4:{c[g>>2]=c[a+20>>2];a=0;Ra=v;return a|0}case 6:{c[a+40>>2]=c[g>>2];a=0;Ra=v;return a|0}case 5:{h=g;f=c[h>>2]|0;h=c[h+4>>2]|0;i=a+40|0;if((c[i>>2]|0)<=0){a=0;Ra=v;return a|0}o=a+12|0;a:do if(!(Xa[c[2400>>2]&255](c[o>>2]|0,m)|0)){g=c[i>>2]|0;j=((g|0)<0)<<31>>31;f=Sv(f|0,h|0,-1,-1)|0;f=Sv(f|0,L()|0,g|0,j|0)|0;k=L()|0;j=Zv(f|0,k|0,g|0,j|0)|0;j=Tv(f|0,k|0,j|0,L()|0)|0;k=L()|0;f=c[m+36>>2]|0;g=((f|0)<0)<<31>>31;b:do if((k|0)>(g|0)|(k|0)==(g|0)&j>>>0>f>>>0?(p=c[m+40>>2]|0,n=f+-1+p-((f|0)%(p|0)|0)|0,l=((n|0)<0)<<31>>31,q=((p|0)<0)<<31>>31,r=Sv(j|0,k|0,-1,-1)|0,s=L()|0,t=Sv(r|0,s|0,p|0,q|0)|0,u=L()|0,(u|0)>(l|0)|(u|0)==(l|0)&t>>>0>n>>>0):0){h=l;f=n;c:while(1){n=(h|0)<(k|0)|(h|0)==(k|0)&f>>>0<j>>>0;i=n?f:r;f=n?h:s;h=c[o>>2]|0;while(1){if((xv(h,i,0)|0)<0)break c;g=Ya[c[2472>>2]&127](h,59952,1)|0;if((g|0)>=0)break;n=uu()|0;if((c[n>>2]|0)!=4)break c}f=Sv(i|0,f|0,p|0,q|0)|0;h=L()|0;if((g|0)!=1){f=778;break a}if(!((h|0)<(u|0)|(h|0)==(u|0)&f>>>0<t>>>0))break b}f=uu()|0;c[a+20>>2]=c[f>>2];f=778;break a}while(0);a=0;Ra=v;return a|0}else f=1802;while(0);a=f;Ra=v;return a|0}case 10:{i=c[g>>2]|0;if((i|0)<0){c[g>>2]=(e[a+18>>1]|0)>>>2&1;a=0;Ra=v;return a|0}f=a+18|0;h=e[f>>1]|0;if(!i){b[f>>1]=h&65531;a=0;Ra=v;return a|0}else{b[f>>1]=h|4;a=0;Ra=v;return a|0}}case 13:{i=c[g>>2]|0;if((i|0)<0){c[g>>2]=(e[a+18>>1]|0)>>>4&1;a=0;Ra=v;return a|0}f=a+18|0;h=e[f>>1]|0;if(!i){b[f>>1]=h&65519;a=0;Ra=v;return a|0}else{b[f>>1]=h|16;a=0;Ra=v;return a|0}}case 12:{c[h>>2]=c[(c[a+4>>2]|0)+16>>2];a=Bb(31408,h)|0;c[g>>2]=a;a=0;Ra=v;return a|0}case 16:{f=a+4|0;h=c[(c[f>>2]|0)+8>>2]|0;h=pb(h,((h|0)<0)<<31>>31)|0;if(!h){a=0;Ra=v;return a|0}ye(c[(c[f>>2]|0)+8>>2]|0,h)|0;c[g>>2]=h;a=0;Ra=v;return a|0}case 20:{f=a+8|0;if(c[f>>2]|0)if(!(Xa[c[2388>>2]&255](c[a+32>>2]|0,m)|0)){f=(c[f>>2]|0)+8|0;f=(c[f+4>>2]|0?1:(c[f>>2]|0)!=(c[m+72>>2]|0))&1}else f=1;else f=0;c[g>>2]=f;a=0;Ra=v;return a|0}default:{a=12;Ra=v;return a|0}}while(0);return 0}function le(a){a=a|0;var d=0,e=0;d=a+44|0;e=c[d>>2]|0;if(e|0)return e|0;if(b[a+18>>1]&16){e=a+48|0;c[e>>2]=c[e>>2]|4096}c[d>>2]=4096;e=4096;return e|0}function me(a){a=a|0;var d=0,e=0;d=a+44|0;if(!(c[d>>2]|0)){if(b[a+18>>1]&16){e=a+48|0;c[e>>2]=c[e>>2]|4096}c[d>>2]=4096}return c[a+48>>2]|0}function ne(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+176|0;C=D+72|0;y=D+48|0;v=D+24|0;u=D+8|0;r=D;x=D+92|0;B=Va[c[2640>>2]&127]()|0;B=(B|0)<32768?1:(B|0)/32768|0;w=d+36|0;j=c[w>>2]|0;if(!j){if(mb()|0){i=7;Ra=D;return i|0}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;if(!j){i=7;Ra=D;return i|0}else t=j}else{j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){t=c[14978]|0;q=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=t>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){i=7;Ra=D;return i|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;t=k}else t=k};c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;o=d+8|0;p=c[o>>2]|0;k=c[p+40>>2]|0;a:do if(!k){n=d+32|0;l=c[n>>2]|0;b:do if(!(Xa[c[2400>>2]&255](c[d+12>>2]|0,x)|0)){m=Eu(l)|0;j=m+42|0;k=pb(j,0)|0;if(!k)j=7;else{gw(k|0,0,j|0)|0;q=k+36|0;c[k+8>>2]=q;c[r>>2]=l;Cb(m+6|0,q,32098,r)|0;l=k+12|0;c[l>>2]=-1;r=c[o>>2]|0;c[r+40>>2]=k;c[k>>2]=r;if(c[7325]|0)c[k+4>>2]=8;if(!(a[p+29>>0]|0)){j=c[n>>2]|0;c:do if((j|0)!=0?(s=j+(((Eu(j)|0)&1073741823)+1)|0,(a[s>>0]|0)!=0):0){j=s;while(1){s=Bu(j,32105)|0;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!s)break;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!(a[j>>0]|0)){A=26;break c}}if((Zm(j,1,0)|0)<<24>>24)m=c[l>>2]|0;else A=26}else A=26;while(0);if((A|0)==26){m=xe(q,66,c[x+12>>2]&511)|0;c[l>>2]=m}do if((m|0)<0){m=xe(q,0,c[x+12>>2]&511)|0;c[l>>2]=m;if((m|0)<0){c[u>>2]=31984;c[u+4>>2]=37077;c[u+8>>2]=31517;Db(14,32001,u);i=uu()|0;i=c[i>>2]|0;j=dv(i)|0;c[v>>2]=37077;c[v+4>>2]=i;c[v+8>>2]=31690;c[v+12>>2]=q;c[v+16>>2]=j;Db(14,31953,v);j=14;break b}else{a[k+22>>0]=1;break}}while(0);j=c[x+20>>2]|0;l=c[x+24>>2]|0;if(!(Va[c[2592>>2]&127]()|0))Ya[c[2580>>2]&127](m,j,l)|0;j=ze(d,k)|0;switch(j|0){case 0:case 1288:break;default:break b}}else j=0;break a}}else j=1802;while(0);Ae(d);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=j;Ra=D;return i|0}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=j;Ra=D;return i|0}}else j=0;while(0);c[t>>2]=k;v=k+28|0;c[v>>2]=(c[v>>2]|0)+1;c[w>>2]=t;w=k+32|0;c[t+4>>2]=c[w>>2];c[w>>2]=t;if(!j)j=t;else{i=j;Ra=D;return i|0}}t=c[j>>2]|0;j=t+23|0;do if(a[j>>0]|0){k=ze(d,t)|0;if(!k){a[j>>0]=0;A=44;break}else{j=t+20|0;break}}else A=44;while(0);if((A|0)==44){q=B+f|0;q=q-((q|0)%(B|0)|0)|0;s=t+20|0;if((q|0)>(e[s>>1]|0)){k=G(q,g)|0;c[t+16>>2]=g;r=t+12|0;j=c[r>>2]|0;d:do if((j|0)>-1)if(!(Xa[c[2400>>2]&255](j,x)|0)){j=c[x+36>>2]|0;if((j|0)<(k|0))if(h){j=(j|0)/4096|0;n=(k|0)/4096|0;if((j|0)<(n|0)){e:while(1){k=c[r>>2]|0;l=j<<12|4095;while(1){if((xv(k,l,0)|0)<0){A=56;break e}m=Ya[c[2472>>2]&127](k,59952,1)|0;if((m|0)>=0)break;h=uu()|0;if((c[h>>2]|0)!=4){A=56;break e}}j=j+1|0;if((m|0)!=1)break;if((j|0)>=(n|0)){A=59;break d}}C=c[t+8>>2]|0;g=uu()|0;g=c[g>>2]|0;j=dv(g)|0;c[y>>2]=37221;c[y+4>>2]=g;c[y+8>>2]=31761;c[y+12>>2]=(C|0)==0?59952:C;c[y+16>>2]=j;Db(4874,31953,y);j=4874}else A=59}else j=0;else A=59}else j=4874;else A=59;while(0);f:do if((A|0)==59){m=t+24|0;j=c[m>>2]|0;k=q<<2;if((mb()|0)==0?(z=sb(j,(k|0)>0?k:0,0)|0,(z|0)!=0):0){c[m>>2]=z;j=e[s>>1]|0;if((q|0)>(j|0)){n=G(B,g)|0;o=t+22|0;p=((n|0)<0)<<31>>31;g:do if((B|0)>0)while(1){k=c[r>>2]|0;if((k|0)>-1){j=G(j,g)|0;j=$a[c[2604>>2]&127](0,n,(a[o>>0]|0)==0?3:1,1,k,j)|0;if((j|0)==(-1|0))break g}else{j=pb(n,p)|0;if(!j){j=7;break f}gw(j|0,0,n|0)|0}l=e[s>>1]|0;k=0;do{A=j+(G(k,g)|0)|0;c[(c[m>>2]|0)+(k+l<<2)>>2]=A;k=k+1|0}while((k|0)!=(B|0));j=B+l|0;b[s>>1]=j;j=j&65535;if((q|0)<=(j|0)){j=0;break f}}else while(1){k=c[r>>2]|0;if((k|0)>-1){A=G(j,g)|0;if(($a[c[2604>>2]&127](0,n,(a[o>>0]|0)==0?3:1,1,k,A)|0)==(-1|0))break g}else{j=pb(n,p)|0;if(!j){j=7;break f}gw(j|0,0,n|0)|0}j=B+(e[s>>1]|0)|0;b[s>>1]=j;j=j&65535;if((q|0)<=(j|0)){j=0;break f}}while(0);g=c[t+8>>2]|0;B=uu()|0;B=c[B>>2]|0;j=dv(B)|0;c[C>>2]=37248;c[C+4>>2]=B;c[C+8>>2]=31848;c[C+12>>2]=(g|0)==0?59952:g;c[C+16>>2]=j;Db(5386,31953,C);j=5386}else j=0}else j=3082}while(0);k=j;j=s}else{k=0;j=s}}if((e[j>>1]|0)>(f|0))j=c[(c[t+24>>2]|0)+(f<<2)>>2]|0;else j=0;c[i>>2]=j;i=(k|0)==0&(a[t+22>>0]|0)!=0?8:k;Ra=D;return i|0}\nfunction fb(a){a=a|0;var b=0;b=Ra;Ra=Ra+a|0;Ra=Ra+15&-16;return b|0}function gb(){return Ra|0}function hb(a){a=a|0;Ra=a}function ib(a,b){a=a|0;b=b|0;Ra=a;Sa=b}function jb(a){a=a|0;var b=0,d=0,e=0;e=c[a+20>>2]|0;if((e|0)<=0)return;b=c[a+16>>2]|0;a=0;do{d=c[b+(a<<4)+4>>2]|0;if(d|0)c[(c[d+4>>2]|0)+4>>2]=c[d>>2];a=a+1|0}while((a|0)<(e|0));return}function kb(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=e+116|0;f=c[s>>2]|0;g=b[e+144>>1]|0;a:do if((f|0)!=0&g<<16>>16!=0){o=f+(((g&65535)<<1)*40|0)|0;j=c[f+32>>2]|0;k=j+480|0;g=(j|0)==0;l=j+304|0;m=j+308|0;n=j+300|0;if(c[k>>2]|0){if(g)while(1){do if(c[f+24>>2]|0?(h=c[f+20>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{n=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=f+40|0;if(f>>>0>=o>>>0)break a}while(1){do if(c[f+24>>2]|0?(i=c[f+20>>2]|0,i|0):0){if(c[k>>2]|0){Xd(j,i);break}h=i;if((c[l>>2]|0)>>>0<=h>>>0?(c[m>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);f=f+40|0;if(f>>>0>=o>>>0)break a}}if(g)while(1){g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{n=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0;if(f>>>0>=o>>>0)break a}do{g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(!(c[k>>2]|0)){t=i;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(j,i);while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0}while(f>>>0<o>>>0)}while(0);f=c[e+212>>2]|0;if(f|0){k=(d|0)==0;l=d+480|0;m=d+304|0;n=d+308|0;o=d+300|0;do{i=f;f=c[f+24>>2]|0;j=c[i>>2]|0;g=c[i+4>>2]|0;if(j){if((g|0)>=1){g=j+((g+-1|0)*20|0)|0;do{h=a[g+1>>0]|0;if(h<<24>>24<-6)kg(d,h<<24>>24,c[g+16>>2]|0);g=g+-20|0}while(g>>>0>=j>>>0)}do if(!k){if(c[l>>2]|0){Xd(d,j);break}t=j;if((c[m>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j}else p=63}else p=63;while(0);do if((p|0)==63){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{t=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);if(i|0)p=67}else p=67;do if((p|0)==67){p=0;if(!k){if(c[l>>2]|0){Xd(d,i);break}t=i;if((c[m>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[o>>2];c[o>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0)}while((f|0)!=0)}do if((c[e+20>>2]|0)!=381479589){f=c[e+100>>2]|0;g=b[e+16>>1]|0;b:do if((f|0)!=0&g<<16>>16!=0){o=f+((g<<16>>16)*40|0)|0;j=c[f+32>>2]|0;k=j+480|0;g=(j|0)==0;l=j+304|0;m=j+308|0;n=j+300|0;if(c[k>>2]|0){if(g)while(1){do if(c[f+24>>2]|0?(q=c[f+20>>2]|0,q|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{t=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);f=f+40|0;if(f>>>0>=o>>>0)break b}while(1){do if(c[f+24>>2]|0?(r=c[f+20>>2]|0,r|0):0){if(c[k>>2]|0){Xd(j,r);break}t=r;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[r>>2]=c[n>>2];c[n>>2]=r;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{t=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);f=f+40|0;if(f>>>0>=o>>>0)break b}}if(g)while(1){g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0;if(f>>>0>=o>>>0)break b}do{g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(!(c[k>>2]|0)){t=i;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(j,i);while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0}while(f>>>0<o>>>0)}while(0);f=c[e+128>>2]|0;do if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+192>>2]|0;if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}}while(0);h=c[e+104>>2]|0;f=c[e+108>>2]|0;do if(h|0){if((f|0)>=1){f=h+((f+-1|0)*20|0)|0;do{g=a[f+1>>0]|0;if(g<<24>>24<-6)kg(d,g<<24>>24,c[f+16>>2]|0);f=f+-20|0}while(f>>>0>=h>>>0)}if(d|0){if(c[d+480>>2]|0){Xd(d,h);break}t=h;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[h>>2]=c[t>>2];c[t>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);f=c[s>>2]|0;do if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+188>>2]|0;if(!f)return;if(d|0){if(c[d+480>>2]|0){Xd(d,f);return}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);return}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);return}}function lb(a,b){a=a|0;b=b|0;var d=0;if(!b)return;if(a|0){if(c[a+480>>2]|0){Xd(a,b);return}d=b;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[b>>2]=c[d>>2];c[d>>2]=b;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function mb(){var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;n=p+8|0;b=p;if(c[7380]|0){o=0;Ra=p;return o|0}c[7382]=1;if(!(c[7383]|0)){if(!(c[7335]|0)){c[b>>2]=30308;xd(4,b)|0};c[14764]=0;c[14765]=0;c[14766]=0;c[14767]=0;c[14768]=0;c[14769]=0;c[14764]=8;if((c[7374]|0)==0|(c[7375]|0)<512|(c[7376]|0)<1){c[7374]=0;c[7375]=0}b=Wa[c[29360>>2]&127](c[7342]|0)|0;if(b|0){c[14764]=0;c[14765]=0;c[14766]=0;c[14767]=0;c[14768]=0;c[14769]=0;o=b;Ra=p;return o|0}}c[7383]=1;if(!(c[7386]|0))c[7386]=8;e=(c[7385]|0)+1|0;c[7385]=e;if(!(c[7381]|c[7380])){c[7381]=1;b=59088;e=b+92|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));k=c[5448]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;a:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=23;break a}}if(e){b=e+12|0;c[5443]=c[b>>2]}else o=23}else o=23;while(0);if((o|0)==23){c[5443]=0;c[5449]=j}c[b>>2]=21760;k=c[5458]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;b:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=35;break b}}if(e){b=e+12|0;c[5453]=c[b>>2]}else o=35}else o=35;while(0);if((o|0)==35){c[5453]=0;c[5459]=j}c[b>>2]=21800;k=c[5468]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;c:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=47;break c}}if(e){b=e+12|0;c[5463]=c[b>>2]}else o=47}else o=47;while(0);if((o|0)==47){c[5463]=0;c[5469]=j}c[b>>2]=21840;l=0;do{m=21888+(l*40|0)|0;k=c[21888+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;d:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;h=a[g>>0]|0;f=(d[208+(h&255)>>0]|0)-i|0;if(!(h<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=60;break d}}if(e){b=e+12|0;c[21888+(l*40|0)+12>>2]=c[b>>2]}else o=60}else o=60;while(0);if((o|0)==60){o=0;c[21888+(l*40|0)+12>>2]=0;c[21888+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=15);l=0;do{m=22496+(l*40|0)|0;k=c[22496+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;e:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-i|0;if(!(q<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=74;break e}}if(e){b=e+12|0;c[22496+(l*40|0)+12>>2]=c[b>>2]}else o=74}else o=74;while(0);if((o|0)==74){o=0;c[22496+(l*40|0)+12>>2]=0;c[22496+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=8);l=0;do{m=19424+(l*40|0)|0;k=c[19424+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;f:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-i|0;if(!(q<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=88;break f}}if(e){b=e+12|0;c[19424+(l*40|0)+12>>2]=c[b>>2]}else o=88}else o=88;while(0);if((o|0)==88){o=0;c[19424+(l*40|0)+12>>2]=0;c[19424+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=57);if(!(c[7384]|0)){b=c[7354]|0;if(!b){c[n>>2]=30340;xd(18,n)|0;b=c[7354]|0}b=Wa[b&127](c[7353]|0)|0;if(!b)o=94}else o=94;g:do if((o|0)==94){c[7384]=1;if(!(mb()|0)){do if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](10)|0;if(!b){b=7;break g}}else{b=Wa[c[29356>>2]&127](10)|0;if((c[14985]|0)>>>0<10)c[14985]=10;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){q=c[14978]|0;o=Tv(e|0,f|0,b|0,((b|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=q>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){b=7;break g}e=Wa[c[29352>>2]&127](b)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0)break;c[14987]=e}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{q=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==464){b=c[119]|0;c[14770]=b}else{if(!b){b=0;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=464&(f|0)!=0)e=f;else break}if((f|0)!=464)break;c[e+12>>2]=c[119]}while(0);c[119]=b;c[14770]=464}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==552){b=c[141]|0;c[14770]=b;o=138}else{if(!b){o=140;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=552&(f|0)!=0)e=f;else break}if((f|0)!=552){o=138;break}c[e+12>>2]=c[141];o=138}while(0);do if((o|0)==138){if(!b){o=140;break}b=b+12|0;c[141]=c[b>>2]}while(0);if((o|0)==140){c[141]=0;b=59080}c[b>>2]=552}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==640){b=c[163]|0;c[14770]=b;o=150}else{if(!b){o=152;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=640&(f|0)!=0)e=f;else break}if((f|0)!=640){o=150;break}c[e+12>>2]=c[163];o=150}while(0);do if((o|0)==150){if(!b){o=152;break}b=b+12|0;c[163]=c[b>>2]}while(0);if((o|0)==152){c[163]=0;b=59080}c[b>>2]=640}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==728){b=c[185]|0;c[14770]=b;o=162}else{if(!b){o=164;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=728&(f|0)!=0)e=f;else break}if((f|0)!=728){o=162;break}c[e+12>>2]=c[185];o=162}while(0);do if((o|0)==162){if(!b){o=164;break}b=b+12|0;c[185]=c[b>>2]}while(0);if((o|0)==164){c[185]=0;b=59080}c[b>>2]=728}b=c[7374]|0;if(c[14810]|0){i=(b|0)==0;j=i?0:c[7376]|0;e=(j|0)==0;i=i|e?0:c[7375]&-8;c[14813]=i;c[14820]=j;c[14814]=j;if((j|0)>90)f=10;else f=((j|0)/10|0)+1|0;c[14815]=f;c[14816]=b;c[14819]=0;c[14821]=0;if(!e){g=G(i,j+-1|0)|0;e=b;f=j;h=0;while(1){f=f+-1|0;c[e>>2]=h;h=e;if(!f)break;else e=e+i|0}q=G(i,j)|0;c[14819]=b+g;b=b+q|0}c[14817]=b}c[7380]=1;b=0}else b=7}while(0);c[7381]=0;e=c[7385]|0}else b=0;c[7385]=e+-1;if((e|0)>=2){q=b;Ra=p;return q|0}c[7386]=0;q=b;Ra=p;return q|0}function nb(a){a=a|0;var b=0,d=0,e=0;if((a|0)<1|(mb()|0)!=0){d=0;return d|0}d=Sv(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;b=L()|0;if(b>>>0>0|(b|0)==0&d>>>0>2147483390){d=0;return d|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](a)|0;return d|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;b=59064;a=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&a>>>0>0){e=c[14978]|0;b=Tv(a|0,b|0,d|0,((d|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&b>>>0<=e>>>0)&1}b=Wa[c[29340>>2]&127](d)|0;if(!b){e=0;return e|0}a=Wa[c[29352>>2]&127](b)|0;a=(c[14978]|0)+a|0;c[14978]=a;if(a>>>0>(c[14982]|0)>>>0)c[14982]=a;a=(c[14981]|0)+1|0;c[14981]=a;if(a>>>0<=(c[14987]|0)>>>0){e=b;return e|0}c[14987]=a;e=b;return e|0}function ob(a,b){a=a|0;b=b|0;var d=0,e=0;d=Sv(a|0,b|0,-1,-1)|0;b=L()|0;if(b>>>0>0|(b|0)==0&d>>>0>2147483390){d=0;return d|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](a)|0;return d|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;a=59064;b=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&b>>>0>0){e=c[14978]|0;a=Tv(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&a>>>0<=e>>>0)&1}a=Wa[c[29340>>2]&127](d)|0;if(!a){e=0;return e|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0<=(c[14987]|0)>>>0){e=a;return e|0}c[14987]=b;e=a;return e|0}function pb(a,b){a=a|0;b=b|0;var d=0,e=0;d=(mb()|0)!=0;b=Sv(a|0,b|0,-1,-1)|0;e=L()|0;if(e>>>0>0|(e|0)==0&b>>>0>2147483390|d){e=0;return e|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](a)|0;return e|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;a=59064;b=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&b>>>0>0){e=c[14978]|0;a=Tv(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&a>>>0<=e>>>0)&1}a=Wa[c[29340>>2]&127](d)|0;if(!a){e=0;return e|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0<=(c[14987]|0)>>>0){e=a;return e|0}c[14987]=b;e=a;return e|0}function qb(a){a=a|0;var b=0;if(!a)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function rb(a){a=a|0;return Wa[c[29352>>2]&127](a)|0}function sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if(!a){e=Sv(b|0,d|0,-1,-1)|0;a=L()|0;if(a>>>0>0|(a|0)==0&e>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](b)|0;return e|0}a=Wa[c[29356>>2]&127](b)|0;if((c[14985]|0)>>>0<b>>>0)c[14985]=b;b=59064;d=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&d>>>0>0){e=c[14978]|0;b=Tv(d|0,b|0,a|0,((a|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&b>>>0<=e>>>0)&1}b=Wa[c[29340>>2]&127](a)|0;if(!b){e=0;return e|0}d=Wa[c[29352>>2]&127](b)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0<=(c[14987]|0)>>>0){e=b;return e|0}c[14987]=d;e=b;return e|0}if((b|0)==0&(d|0)==0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);e=0;return e|0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);e=0;return e|0}if(d>>>0>0|(d|0)==0&b>>>0>2147483391){e=0;return e|0}e=Wa[c[29352>>2]&127](a)|0;d=Wa[c[29356>>2]&127](b)|0;if((d|0)==(e|0)){e=a;return e|0}if(!(c[7324]|0)){e=Xa[c[29348>>2]&255](a,d)|0;return e|0}if((c[14985]|0)>>>0<b>>>0)c[14985]=b;b=Xa[c[29348>>2]&255](a,d)|0;f=59064;g=c[f+4>>2]|0;if((b|0)==0&((g|0)>0|(g|0)==0&(c[f>>2]|0)>>>0>0))b=Xa[c[29348>>2]&255](a,d)|0;if(!b){g=0;return g|0}d=(Wa[c[29352>>2]&127](b)|0)-e|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0<=(c[14982]|0)>>>0){g=b;return g|0}c[14982]=d;g=b;return g|0}function tb(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=Ra;Ra=Ra+96|0;X=fa+80|0;Z=fa+72|0;_=fa;ba=f+21|0;if(!(a[ba>>0]&2)){I=1;J=0}else{I=(c[i>>2]|0)+(4-1)&~(4-1);J=c[I>>2]|0;c[i>>2]=I+4;I=0}Q=J+4|0;R=J+8|0;ca=f+16|0;da=f+8|0;ea=f+4|0;S=f+20|0;T=_+1|0;U=_+2|0;V=_+3|0;W=f+12|0;j=0;H=0;a:while(1){switch(a[h>>0]|0){case 0:{F=543;break a}case 37:{z=j;break}default:{j=h;b:while(1){j=j+1|0;switch(a[j>>0]|0){case 37:case 0:break b;default:{}}}k=j-h|0;l=c[ca>>2]|0;m=l+k|0;if(m>>>0<(c[da>>2]|0)>>>0){if(k|0){c[ca>>2]=m;ew((c[ea>>2]|0)+l|0,h|0,k|0)|0}}else wb(f,h,k);if(!(a[j>>0]|0)){F=543;break a}else{z=h;h=j}}}l=h+1|0;h=a[l>>0]|0;if(!(h<<24>>24)){F=13;break}k=h<<24>>24;m=-1;h=0;y=0;j=0;x=0;E=0;D=0;v=0;w=l;c:while(1){switch(k|0){case 108:{F=24;break c}case 45:{p=x;q=E;u=D;n=1;k=w;break}case 43:{j=43;p=x;q=E;u=D;n=y;k=w;break}case 32:{j=32;p=x;q=E;u=D;n=y;k=w;break}case 35:{p=1;q=E;u=D;n=y;k=w;break}case 33:{p=x;q=1;u=D;n=y;k=w;break}case 48:{p=x;q=E;u=1;n=y;k=w;break}case 44:{p=x;q=E;u=D;v=44;n=y;k=w;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{h=k+-48|0;n=w+1|0;p=a[n>>0]|0;l=p<<24>>24;if((p+-48&255)<10){k=n;while(1){h=l+(h*10|0)+-48|0;n=k+1|0;p=a[n>>0]|0;l=p<<24>>24;if((p+-48&255)<10)k=n;else break}}else k=w;h=h&2147483647;switch(p<<24>>24){case 46:case 108:{p=x;q=E;u=D;n=y;break}default:{G=n;n=0;k=l;break c}}break}case 42:{do if(!I){h=c[Q>>2]|0;if((c[J>>2]|0)>(h|0)){k=c[R>>2]|0;c[Q>>2]=h+1;h=c[k+(h<<2)>>2]|0;k=e[h+8>>1]|0;if(k&4|0){h=c[h>>2]|0;F=39;break}if(k&8|0){h=Mg(+g[h>>3])|0;L()|0;F=39;break}if(k&18){h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;F=39}else{h=0;F=40}}else{h=0;F=40}}else{F=(c[i>>2]|0)+(4-1)&~(4-1);h=c[F>>2]|0;c[i>>2]=F+4;F=39}while(0);if((F|0)==39){F=0;if((h|0)<0){l=1;h=(h|0)==-2147483648?0:0-h|0}else F=40}if((F|0)==40){F=0;l=y}k=a[w+1>>0]|0;switch(k<<24>>24){case 46:case 108:{p=x;q=E;u=D;n=l;k=w;break}default:{F=61;break c}}break}case 46:{l=w+1|0;k=a[l>>0]|0;if(k<<24>>24==42){do if(!I){k=c[Q>>2]|0;if((c[J>>2]|0)>(k|0)){l=c[R>>2]|0;c[Q>>2]=k+1;k=c[l+(k<<2)>>2]|0;l=e[k+8>>1]|0;if(l&4|0){k=c[k>>2]|0;F=52;break}if(l&8|0){k=Mg(+g[k>>3])|0;L()|0;F=52;break}if(l&18){k=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0;F=52}else k=0}else k=0}else{F=(c[i>>2]|0)+(4-1)&~(4-1);k=c[F>>2]|0;c[i>>2]=F+4;F=52}while(0);if((F|0)==52){F=0;k=(k|0)<0?((k|0)==-2147483648?-1:0-k|0):k}l=w+2|0;p=a[l>>0]|0}else{k=k<<24>>24;if((k+-48|0)>>>0<10){n=0;do{n=k+-48+(n*10|0)|0;l=l+1|0;m=a[l>>0]|0;k=m<<24>>24}while((k+-48|0)>>>0<10);k=m<<24>>24}else n=0;p=k;k=n&2147483647}if((p|0)==108){p=x;q=E;u=D;n=y;m=k;k=l+-1|0}else{G=l;n=0;m=k;k=p;break c}break}default:{G=w;n=0;break c}}l=k+1|0;k=a[l>>0]|0;if(!(k<<24>>24)){F=543;break a}else{k=k<<24>>24;y=n;x=p;E=q;D=u;w=l}}if((F|0)==24){F=0;k=w+1|0;l=a[k>>0]|0;if(l<<24>>24==108){k=w+2|0;G=k;n=2;k=a[k>>0]|0}else{G=k;n=1;k=l<<24>>24}}else if((F|0)==61){F=0;G=w+1|0;y=l;n=0;k=k<<24>>24}d:do switch(k|0){case 100:{C=0;break}case 115:{C=1;break}case 103:{C=2;break}case 122:{C=3;break}case 113:{C=4;break}case 81:{C=5;break}case 119:{C=6;break}case 99:{C=7;break}case 111:{C=8;break}case 117:{C=9;break}case 120:{C=10;break}case 88:{C=11;break}case 102:{C=12;break}case 101:{C=13;break}case 69:{C=14;break}case 71:{C=15;break}case 105:{C=16;break}case 110:{C=17;break}case 37:{C=18;break}case 112:{C=19;break}case 84:{C=20;break}default:{switch(k|0){case 83:{C=21;break d}case 114:break;default:{F=543;break a}}C=22}}while(0);k=a[16+(C*6|0)+3>>0]|0;e:do switch(k<<24>>24){case 13:{k=1;F=86;break}case 0:case 15:{k=n;F=86;break}case 16:{k=n;F=87;break}case 3:case 2:case 1:{do if(I){F=(c[i>>2]|0)+(8-1)&~(8-1);o=+g[F>>3];c[i>>2]=F+8;F=208}else{l=c[Q>>2]|0;if((c[J>>2]|0)>(l|0)){n=c[R>>2]|0;c[Q>>2]=l+1;l=c[n+(l<<2)>>2]|0;n=e[l+8>>1]|0;if(n&8|0){o=+g[l>>3];F=208;break}if(n&4|0){F=l;o=+((c[F>>2]|0)>>>0)+4294967296.0*+(c[F+4>>2]|0);F=208;break}if(n&18|0){o=+Kg(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0);F=208;break}}o=0.0;B=j;l=(m|0)<0?6:m}while(0);if((F|0)==208){F=0;l=(m|0)<0?6:m;if(o<0.0){o=-o;B=45}else B=j}q=(C|0)==2|(C|0)==15;p=l+((q&(l|0)>0)<<31>>31)|0;j=p&4095;if(!j)r=.5;else{r=.5;while(1){r=r*.1;if((j|0)>1)j=j+-1|0;else break}}n=(C|0)==12;o=n?o+r:o;g[X>>3]=o;g[Z>>3]=+g[X>>3];if(+g[X>>3]==+g[Z>>3]){if(o>0.0){s=1.0;m=0;while(1){t=s*1.e+100;if(m>>>0<351&o>=t){s=t;m=m+100|0}else break}while(1){t=s*1.0e10;if(m>>>0<351&o>=t){s=t;m=m+10|0}else break}while(1){t=s*10.0;if(m>>>0<351&o>=t){s=t;m=m+1|0}else break}o=o/s;if(o<1.0e-08)do{o=o*1.0e8;m=m+-8|0}while(o<1.0e-08);if(o<1.0)do{o=o*10.0;m=m+-1|0}while(o<1.0);j=B<<24>>24!=0;if((m|0)>350){n=_+(j&1)|0;a[_>>0]=B;a[n>>0]=73;a[n+1>>0]=110;a[n+2>>0]=102;a[n+3>>0]=0;n=j?4:3;j=_;m=H;q=0;break e}}else m=0;if(!n){o=r+o;if(o>=10.0){o=o*.1;m=m+1|0}}z=(m|0)<-4|(p|0)<(m|0);A=q?x<<24>>24==0&1:E;l=q?p-(z?0:m)|0:l;z=(q?(z?2:1):k)<<24>>24==2;p=z?0:m;j=Sv(l|0,((l|0)<0)<<31>>31|0,h|0,((h|0)<0)<<31>>31|0)|0;j=Sv(j|0,L()|0,((p|0)>0?p:0)|0,0)|0;k=L()|0;f:do if((k|0)>0|(k|0)==0&j>>>0>55){u=Sv(j|0,k|0,15,0)|0;n=L()|0;if(a[S>>0]|0){F=543;break a}if((n|0)>0|((n|0)==0?u>>>0>(c[da>>2]|0)>>>0:0)?($=c[W>>2]|0,(n|0)>0|(n|0)==0&u>>>0>$>>>0):0){F=236;break a}q=c[f>>2]|0;g:do if(!q){w=Sv(j|0,k|0,14,0)|0;v=L()|0;if(v>>>0>0|(v|0)==0&w>>>0>2147483390){F=278;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](u)|0;break}n=Wa[c[29356>>2]&127](u)|0;if((c[14985]|0)>>>0<u>>>0)c[14985]=u;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){w=c[14978]|0;v=Tv(j|0,k|0,n|0,((n|0)<0)<<31>>31|0)|0;u=L()|0;c[14768]=((u|0)<0|(u|0)==0&v>>>0<=w>>>0)&1}k=Wa[c[29340>>2]&127](n)|0;if(!k){F=278;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){j=k;q=k;break f}c[14987]=j;j=k;q=k;break f}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){F=278;break a}}else{do if(!(n>>>0>0|((n|0)==0?u>>>0>(e[q+276>>1]|0)>>>0:0))){j=q+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];w=q+284|0;c[w>>2]=(c[w>>2]|0)+1;break g}j=q+296|0;k=c[j>>2]|0;if(!k){j=q+292|0;break}else{c[j>>2]=c[k>>2];w=q+284|0;c[w>>2]=(c[w>>2]|0)+1;break g}}else j=q+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}k=_d(q,u,n)|0}while(0);if(!k){F=278;break a}else{j=k;q=k}}else{j=_;q=0}while(0);n=((E&255)*10|0)+16|0;v=(E|x)&255|(l|0)>0;if(!(B<<24>>24))k=j;else{a[j>>0]=B;k=j+1|0}if((p|0)<0){a[k>>0]=48;k=k+1|0}else{u=k;while(1){w=(n|0)<1;x=~~o;o=w?o:(o-+(x|0))*10.0;n=n+((w^1)<<31>>31)|0;k=u+1|0;a[u>>0]=w?48:x+48&255;if((p|0)>0){u=k;p=p+-1|0}else{p=-1;break}}}w=(v|0)==0;if(!w){a[k>>0]=46;k=k+1|0}if((p|0)<-1){gw(k|0,48,~p|0)|0;while(1){k=k+1|0;l=l+-1|0;if((p|0)<-2)p=p+1|0;else break}}if((l|0)>0){v=n;while(1){n=(v|0)<1;p=~~o;u=k+1|0;a[k>>0]=n?48:p+48&255;if((l|0)>1){l=l+-1|0;k=u;v=v+((n^1)<<31>>31)|0;o=n?o:(o-+(p|0))*10.0}else{k=u;break}}}h:do if(!(A<<24>>24==0|w)){i:while(1){l=k+-1|0;switch(a[l>>0]|0){case 46:break i;case 48:break;default:break h}a[l>>0]=0;k=l}if(!(E<<24>>24)){a[l>>0]=0;k=l;break}else{a[k>>0]=48;k=k+1|0;break}}while(0);if(z){n=k+1|0;a[k>>0]=a[160+(d[16+(C*6|0)+4>>0]|0)>>0]|0;l=k+2|0;if((m|0)<0){a[n>>0]=45;m=0-m|0}else a[n>>0]=43;if((m|0)>99){E=(m>>>0)/100|0;a[l>>0]=E+48;l=k+3|0;k=m-(E*100|0)|0}else k=m;E=(k|0)/10|0;a[l>>0]=E+48;a[l+1>>0]=k-(E*10|0)+48;k=l+2|0}a[k>>0]=0;k=k-j|0;if(y<<24>>24==0&D<<24>>24!=0&(h|0)>(k|0)){l=h-k|0;if((k|0)>=0){k=h;while(1){a[j+k>>0]=a[j+(k-l)>>0]|0;if((k|0)>(l|0))k=k+-1|0;else break}}if(!l){n=h;m=H}else{gw(j+(B<<24>>24!=0&1)|0,48,l|0)|0;n=h;m=H}}else{n=k;m=H}}else{n=3;j=31167;m=H;q=0}break}case 4:{if(I){h=c[ca>>2]|0;j=(c[i>>2]|0)+(4-1)&~(4-1);n=c[j>>2]|0;c[i>>2]=j+4;c[n>>2]=h;n=0;h=0;j=z;m=H;q=0}else{n=0;h=0;j=z;m=H;q=0}break}case 7:{a[_>>0]=37;n=1;j=_;m=H;q=0;break}case 8:{j:do if(I){F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4;if(j>>>0<128){a[_>>0]=j;n=1;break}if(j>>>0<2048){a[_>>0]=j>>>6&31|192;a[T>>0]=j&63|128;n=2;break}if(j>>>0<65536){a[_>>0]=j>>>12&15|224;a[T>>0]=j>>>6&63|128;a[U>>0]=j&63|128;n=3;break}else{a[_>>0]=j>>>18&7|240;a[T>>0]=j>>>12&63|128;a[U>>0]=j>>>6&63|128;a[V>>0]=j&63|128;n=4;break}}else{j=c[Q>>2]|0;do if((c[J>>2]|0)>(j|0)?(aa=c[R>>2]|0,c[Q>>2]=j+1,aa=c[aa+(j<<2)>>2]|0,aa|0):0){j=b[aa+8>>1]|0;if((j&514)==514?(a[aa+10>>0]|0)==1:0)k=c[aa+16>>2]|0;else{if(j&1)break;k=Gg(aa,1)|0}if(k|0){F=a[k>>0]|0;a[_>>0]=F;if((F&255)<=191){n=1;break j}j=a[k+1>>0]|0;if((j&-64)<<24>>24!=-128){n=1;break j}a[T>>0]=j;j=a[k+2>>0]|0;if((j&-64)<<24>>24!=-128){n=2;break j}a[U>>0]=j;j=a[k+3>>0]|0;if((j&-64)<<24>>24!=-128){n=3;break j}a[V>>0]=j;n=4;break j}}while(0);a[_>>0]=0;n=1}while(0);if((m|0)>1){h=1-m+h|0;do if(!((h|0)<2|y<<24>>24!=0)){h=h+-1|0;F=Sv(c[ca>>2]|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?F>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)<1){h=0;break}}while(1){E=c[ea>>2]|0;F=c[ca>>2]|0;c[ca>>2]=F+1;a[E+F>>0]=32;if((h|0)>1)h=h+-1|0;else{h=0;break}}}while(0);j=m;while(1){k=c[ca>>2]|0;l=k+n|0;if(l>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,_|0,n|0)|0}else wb(f,_,n);if((j|0)>2)j=j+-1|0;else{j=_;m=1;q=0;k=n;F=395;break}}}else{j=_;m=1;q=0;k=n;F=395}break}case 6:case 5:{do if(!I){j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)?(K=c[R>>2]|0,c[Q>>2]=j+1,K=c[K+(j<<2)>>2]|0,(K|0)!=0):0){j=b[K+8>>1]|0;if((j&514)==514?(a[K+10>>0]|0)==1:0){j=c[K+16>>2]|0;k=5;F=369;break}if(!(j&1)){j=Gg(K,1)|0;k=5;F=369}else{p=59952;k=0;F=380}}else{p=59952;k=0;F=380}}else{F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4;F=369}while(0);if((F|0)==369){F=0;if(j)if(k<<24>>24==6)if((c[ca>>2]|0)==0?(m|0)<0&((h|0)==0&(c[W>>2]|0)!=0):0)if(!(a[S>>0]|0)){c[ea>>2]=j;h=c[f>>2]|0;if(((h|0)!=0?(M=j,(c[h+304>>2]|0)>>>0<=M>>>0):0)?(c[h+308>>2]|0)>>>0>M>>>0:0)h=e[h+276>>1]|0;else h=Wa[c[29352>>2]&127](j)|0;c[da>>2]=h;n=(Eu(j)|0)&2147483647;c[ca>>2]=n;a[ba>>0]=a[ba>>0]|4;n=0;h=0;m=H;q=0;break e}else{l=j;h=0;k=j}else{p=j;k=j;F=380}else{p=j;k=0;F=380}else{p=59952;k=0;F=380}}if((F|0)==380){F=0;if((m|0)>-1){j=(m|0)!=0;if(!(E<<24>>24)){if(!j){n=0;j=p;m=H;q=k;break e}j=0;while(1){if(!(a[p+j>>0]|0)){n=j;j=p;m=H;q=k;break e}j=j+1|0;if((j|0)>=(m|0)){n=j;j=p;m=H;q=k;break e}}}k:do if(j){j=p;while(1){n=m;m=m+-1|0;l=a[j>>0]|0;if(!(l<<24>>24)){l=j;break k}j=j+1|0;if((l&255)>191)while(1)if((a[j>>0]&-64)<<24>>24==-128)j=j+1|0;else break;if((n|0)<=1){l=j;break}}}else l=p;while(0);j=p;m=E;q=k;k=l-p|0;F=395;break e}else l=p}j=l;m=E;q=k;k=(Eu(l)|0)&2147483647;F=395;break}case 14:case 10:case 9:{x=(C|0)==6?34:39;do if(!I){j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)?(N=c[R>>2]|0,c[Q>>2]=j+1,N=c[N+(j<<2)>>2]|0,(N|0)!=0):0){j=b[N+8>>1]|0;if((j&514)==514?(a[N+10>>0]|0)==1:0){j=c[N+16>>2]|0;break}if(!(j&1))j=Gg(N,1)|0;else j=0}else j=0}else{F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4}while(0);q=(j|0)==0;p=(C|0)==5;w=q?(p?31171:31176):j;l:do if(!m){l=0;v=0}else{n=x&255;if(!(E<<24>>24)){l=0;k=0;while(1){j=a[w+k>>0]|0;if(!(j<<24>>24)){v=k;break l}j=l+((j<<24>>24|0)==(n|0)&1)|0;k=k+1|0;m=m+-1|0;if(!m){l=j;v=k;break l}else l=j}}l=0;j=0;while(1){F=a[w+j>>0]|0;k=F<<24>>24;if(!(F<<24>>24)){v=j;break l}l=l+((k|0)==(n|0)&1)|0;if((k&192|0)==192)do j=j+1|0;while((a[w+j>>0]&-64)<<24>>24==-128);else j=j+1|0;m=m+-1|0;if(!m){v=j;break}}}while(0);u=p&(q^1);n=v+3+l|0;m:do if((n|0)>70){l=((n|0)<0)<<31>>31;if(a[S>>0]|0){F=543;break a}if(0<(l|0)|(0==(l|0)?(c[da>>2]|0)>>>0<n>>>0:0)?(O=c[W>>2]|0,0<(l|0)|0==(l|0)&O>>>0<n>>>0):0){F=423;break a}m=c[f>>2]|0;n:do if(!m){F=Sv(n|0,l|0,-1,-1)|0;D=L()|0;if(D>>>0>0|(D|0)==0&F>>>0>2147483390){F=465;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){F=c[14978]|0;D=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;C=L()|0;c[14768]=((C|0)<0|(C|0)==0&D>>>0<=F>>>0)&1}k=Wa[c[29340>>2]&127](l)|0;if(!k){F=465;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){j=k;q=k;break m}c[14987]=j;j=k;q=k;break m}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){F=465;break a}}else{do if(!(0<l>>>0|(0==(l|0)?(e[m+276>>1]|0)>>>0<n>>>0:0))){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];F=m+284|0;c[F>>2]=(c[F>>2]|0)+1;break n}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];F=m+284|0;c[F>>2]=(c[F>>2]|0)+1;break n}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}k=_d(m,n,l)|0}while(0);if(!k){F=465;break a}else{j=k;q=k}}else{j=_;q=0}while(0);if(u){a[j>>0]=x;k=1}else k=0;if((v|0)>0){p=x&255;n=0;do{l=a[w+n>>0]|0;m=k+1|0;a[j+k>>0]=l;if((l<<24>>24|0)==(p|0)){a[j+m>>0]=l;k=k+2|0}else k=m;n=n+1|0}while((n|0)!=(v|0))}if(u){a[j+k>>0]=x;k=k+1|0}a[j+k>>0]=0;m=E;F=395;break}case 11:{if(!(a[ba>>0]&1)){F=543;break a}E=(c[i>>2]|0)+(4-1)&~(4-1);h=c[E>>2]|0;c[i>>2]=E+4;if((h|0)!=0?(P=c[h+4>>2]|0,(P|0)!=0):0){h=c[h>>2]|0;j=c[ca>>2]|0;k=j+P|0;if(k>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=k;ew((c[ea>>2]|0)+j|0,h|0,P|0)|0;n=0;h=0;j=z;m=H;q=0;break e}else{wb(f,h,P);n=0;h=0;j=z;m=H;q=0;break e}}else{n=0;h=0;j=z;m=H;q=0}break}case 12:{if(!(a[ba>>0]&1)){F=543;break a}h=(c[i>>2]|0)+(4-1)&~(4-1);m=c[h>>2]|0;c[i>>2]=h+4;h=(c[i>>2]|0)+(4-1)&~(4-1);n=c[h>>2]|0;c[i>>2]=h+4;h=c[m+8+(n*72|0)+4>>2]|0;do if(h|0){j=(Eu(h)|0)&1073741823;k=c[ca>>2]|0;l=k+j|0;if(l>>>0<(c[da>>2]|0)>>>0){if(j|0){c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,h|0,j|0)|0}}else wb(f,h,j);h=c[ca>>2]|0;j=h+1|0;if(j>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=j;a[(c[ea>>2]|0)+h>>0]=46;break}else{wb(f,31183,1);break}}while(0);j=c[m+8+(n*72|0)+8>>2]|0;if(!j)h=0;else h=(Eu(j)|0)&1073741823;k=c[ca>>2]|0;l=k+h|0;if(l>>>0>=(c[da>>2]|0)>>>0){wb(f,j,h);n=0;h=0;j=z;m=H;q=0;break e}if(!h){n=0;h=0;j=z;m=H;q=0}else{c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,j|0,h|0)|0;n=0;h=0;j=z;m=H;q=0}break}default:{F=543;break a}}while(0);if((F|0)==86){v=0;F=87}else if((F|0)==395){F=0;if(m<<24>>24!=0&(h|0)>0&(k|0)>0){l=k;do{E=l;l=l+-1|0;h=h+((a[j+l>>0]&-64)<<24>>24==-128&1)|0}while((E|0)>1);n=k;m=H}else{n=k;m=H}}if((F|0)==87){F=0;o:do if(4067322>>>C&1){if(I)switch(k<<24>>24){case 0:{j=(c[i>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[i>>2]=j+4;j=0;k=0;F=113;break o}case 2:{j=(c[i>>2]|0)+(8-1)&~(8-1);k=j;l=c[k>>2]|0;k=c[k+4>>2]|0;c[i>>2]=j+8;j=0;F=113;break o}default:{j=(c[i>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[i>>2]=j+4;j=0;k=0;F=113;break o}}j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)){k=c[R>>2]|0;c[Q>>2]=j+1;j=c[k+(j<<2)>>2]|0;k=e[j+8>>1]|0;if(k&4|0){k=j;j=0;l=c[k>>2]|0;k=c[k+4>>2]|0;F=113;break}if(k&8|0){l=Mg(+g[j>>3])|0;j=0;k=L()|0;F=113;break}if(k&18){l=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;j=0;k=L()|0;F=113}else{j=0;F=114}}else{j=0;F=114}}else{do if(I)if(k<<24>>24!=2){p=(c[i>>2]|0)+(4-1)&~(4-1);n=c[p>>2]|0;c[i>>2]=p+4;p=((n|0)<0)<<31>>31;l=Tv(0,0,n|0,p|0)|0;k=L()|0;if((n|0)<0)break;else{l=n;k=p;F=113;break o}}else{F=(c[i>>2]|0)+(8-1)&~(8-1);k=F;l=c[k>>2]|0;k=c[k+4>>2]|0;c[i>>2]=F+8;F=99;break}else{k=c[Q>>2]|0;if((c[J>>2]|0)<=(k|0)){F=114;break o}l=c[R>>2]|0;c[Q>>2]=k+1;k=c[l+(k<<2)>>2]|0;l=e[k+8>>1]|0;if(l&4|0){l=k;k=c[l+4>>2]|0;l=c[l>>2]|0;F=99;break}if(l&8|0){l=Mg(+g[k>>3])|0;k=L()|0;F=99;break}if(!(l&18)){F=114;break o}l=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;k=L()|0;F=99}while(0);if((F|0)==99){p=(l|0)==0&(k|0)==-2147483648;n=Tv(0,0,l|0,k|0)|0;q=L()|0;if((k|0)<0){l=p?0:n;k=p?-2147483648:q}else{F=113;break}}j=45;F=113}while(0);if((F|0)==113){F=0;if((l|0)==0&(k|0)==0)F=114;else z=j}if((F|0)==114){F=0;z=j;l=0;k=0;x=0}u=h-(z<<24>>24!=0&1)|0;u=D<<24>>24==0?m:(m|0)<(u|0)?u:m;if((u|0)<37){n=_;q=0;w=70}else{m=Sv(u|0,((u|0)<0)<<31>>31|0,10,0)|0;j=L()|0;if(!(v<<24>>24))q=j;else{m=Sv(m|0,j|0,(u>>>0)/3|0|0,0)|0;q=L()|0}if(a[S>>0]|0){F=543;break}if((q|0)>0|((q|0)==0?m>>>0>(c[da>>2]|0)>>>0:0)?(Y=c[W>>2]|0,(q|0)>0|(q|0)==0&m>>>0>Y>>>0):0){F=121;break}p=c[f>>2]|0;p:do if(!p){E=Sv(m|0,q|0,-1,-1)|0;D=L()|0;if(D>>>0>0|(D|0)==0&E>>>0>2147483390){F=164;break a}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;F=162;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;p=59064;n=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&n>>>0>0){E=c[14978]|0;D=Tv(n|0,p|0,j|0,((j|0)<0)<<31>>31|0)|0;B=L()|0;c[14768]=((B|0)<0|(B|0)==0&D>>>0<=E>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){F=164;break a}n=Wa[c[29352>>2]&127](j)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0>(c[14987]|0)>>>0)c[14987]=n}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){F=164;break a}}else{do if(!(q>>>0>0|((q|0)==0?m>>>0>(e[p+276>>1]|0)>>>0:0))){n=p+300|0;j=c[n>>2]|0;if(j|0){c[n>>2]=c[j>>2];F=p+284|0;c[F>>2]=(c[F>>2]|0)+1;F=162;break p}n=p+296|0;j=c[n>>2]|0;if(!j){j=p+292|0;break}else{c[n>>2]=c[j>>2];F=p+284|0;c[F>>2]=(c[F>>2]|0)+1;F=162;break p}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,m,q)|0;F=162}while(0);if((F|0)==162){F=0;if(!j){F=164;break}}n=j;q=j;w=(j|0)==0?H:m}m=n+(w+-1)|0;if((C|0)==22){E=_v(l|0,k|0,10,0)|0;j=L()|0;H=Yv(E|0,j|0,10,0)|0;H=Tv(l|0,k|0,H|0,L()|0)|0;L()|0;j=$v(E|0,j|0,10,0)|0;j=(H|0)>3|(j|0)==1&(L()|0)==0;H=(j?0:H)<<1;j=m+-1|0;a[j>>0]=a[31151+(H|1)>>0]|0;j=j+-1|0;a[j>>0]=a[31151+H>>0]|0}else j=m;n=160+(d[16+(C*6|0)+4>>0]|0)|0;p=d[16+(C*6|0)+1>>0]|0;do{H=l;l=_v(l|0,k|0,p|0,0)|0;E=k;k=L()|0;D=Yv(l|0,k|0,p|0,0)|0;D=Tv(H|0,E|0,D|0,L()|0)|0;L()|0;j=j+-1|0;a[j>>0]=a[n+D>>0]|0}while(!(E>>>0<0|(E|0)==0&H>>>0<p>>>0));p=m;k=j;l=p-k|0;if((u|0)>(l|0)){j=j+(p-u-k)|0;gw(j|0,48,u+k-p|0)|0;l=u}if(v<<24>>24){k=l+-1|0;m=(k|0)/3|0;j=j+(0-m)|0;if((l|0)>3){k=k-(m*3|0)+1|0;l=0;do{a[j+l>>0]=a[j+(l+m)>>0]|0;k=k+-1|0;n=l+1|0;if(!k){a[j+n>>0]=v;k=3;m=m+-1|0;l=l+2|0}else l=n}while((m|0)>0)}}if(z<<24>>24){j=j+-1|0;a[j>>0]=z}if(x<<24>>24!=0?(7860991>>>C&1|0)==0:0){k=31160+(d[16+(C*6|0)+5>>0]|0)|0;l=k;k=a[k>>0]|0;do{j=j+-1|0;a[j>>0]=k;l=l+1|0;k=a[l>>0]|0}while(k<<24>>24!=0)}n=p-j|0;m=w}h=h-n|0;do if((h|0)>0){l=c[ca>>2]|0;if(!(y<<24>>24)){H=Sv(l|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?H>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)>=1)F=514}else F=514;if((F|0)==514){F=0;while(1){E=c[ea>>2]|0;H=c[ca>>2]|0;c[ca>>2]=H+1;a[E+H>>0]=32;if((h|0)>1)h=h+-1|0;else break}}h=c[ca>>2]|0;k=h+n|0;if(k>>>0>=(c[da>>2]|0)>>>0){wb(f,j,n);break}if(!n)break;c[ca>>2]=k;ew((c[ea>>2]|0)+h|0,j|0,n|0)|0;break}else{k=l+n|0;if(k>>>0<(c[da>>2]|0)>>>0){if(n|0){c[ca>>2]=k;ew((c[ea>>2]|0)+l|0,j|0,n|0)|0}}else wb(f,j,n);H=Sv(c[ca>>2]|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?H>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)<1)break}while(1){E=c[ea>>2]|0;H=c[ca>>2]|0;c[ca>>2]=H+1;a[E+H>>0]=32;if((h|0)>1)h=h+-1|0;else break}}}else{h=c[ca>>2]|0;k=h+n|0;if(k>>>0>=(c[da>>2]|0)>>>0){wb(f,j,n);break}if(n|0){c[ca>>2]=k;ew((c[ea>>2]|0)+h|0,j|0,n|0)|0}}while(0);do if(q|0){h=c[f>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,q);break}H=q;if((c[h+304>>2]|0)>>>0<=H>>>0?(c[h+308>>2]|0)>>>0>H>>>0:0){H=h+300|0;c[q>>2]=c[H>>2];c[H>>2]=q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{H=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);h=G+1|0;H=m}if((F|0)==13){h=c[ca>>2]|0;j=h+1|0;if(j>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=j;a[(c[ea>>2]|0)+h>>0]=37;Ra=fa;return}else{wb(f,31149,1);Ra=fa;return}}else if((F|0)==121){a[S>>0]=18;if(Y|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==164){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==236){a[S>>0]=18;if($|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==278){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==423){a[S>>0]=18;if(O|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==465){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==543){Ra=fa;return}}function ub(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+16|0;f=c[e>>2]|0;g=f+d|0;if(g>>>0>=(c[a+8>>2]|0)>>>0){wb(a,b,d);return}if(!d)return;c[e>>2]=g;ew((c[a+4>>2]|0)+f|0,b|0,d|0)|0;return}function vb(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;q=b+20|0;if(a[q>>0]|0){s=0;return s|0}p=b+12|0;i=c[p>>2]|0;if(!i){a[q>>0]=18;f=c[b>>2]|0;if(f|0?(g=c[f+236>>2]|0,g|0):0){c[g+12>>2]=18;s=g+36|0;c[s>>2]=(c[s>>2]|0)+1}s=(c[b+8>>2]|0)+-1-(c[b+16>>2]|0)|0;return s|0}s=b+21|0;g=a[s>>0]|0;f=(g&4)==0;if(f)j=0;else j=c[b+4>>2]|0;r=b+16|0;k=c[r>>2]|0;v=d+1|0;v=Sv(k|0,0,v|0,((v|0)<0)<<31>>31|0)|0;t=L()|0;k=Sv(v|0,t|0,k|0,0)|0;o=L()|0;u=(o|0)>0|(o|0)==0&k>>>0>i>>>0;k=u?v:k;o=u?t:o;if((o|0)>0|(o|0)==0&k>>>0>i>>>0){if(!f){f=c[b>>2]|0;h=b+4|0;g=c[h>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}v=g;if((c[f+304>>2]|0)>>>0<=v>>>0?(c[f+308>>2]|0)>>>0>v>>>0:0){v=f+300|0;c[g>>2]=c[v>>2];c[v>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{v=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=a[s>>0]&-5;a[s>>0]=g;v=c[p>>2]|0;f=b+8|0;c[f>>2]=0;c[r>>2]=0;c[h>>2]=0;a[q>>0]=18;if(v|0)n=23}else{f=b+8|0;c[f>>2]=0;c[r>>2]=0;c[b+4>>2]=0;a[q>>0]=18;n=23}if((n|0)==23){if(g&4)a[s>>0]=g&-5;c[f>>2]=0;c[r>>2]=0;c[b+4>>2]=0}f=c[b>>2]|0;if(!f){v=0;return v|0}f=c[f+236>>2]|0;if(!f){v=0;return v|0}c[f+12>>2]=18;v=f+36|0;c[v>>2]=(c[v>>2]|0)+1;v=0;return v|0}o=b+8|0;c[o>>2]=k;i=c[b>>2]|0;a:do if(!i){if(!(mb()|0)){h=sb(j,k,0)|0;n=49}}else{if(j|0){v=j;if((c[i+304>>2]|0)>>>0<=v>>>0?(c[i+308>>2]|0)>>>0>v>>>0:0){if(!(0>0|(0==0?k>>>0>(e[i+276>>1]|0)>>>0:0))){h=j;n=51;break}h=Zd(i,j,k,0)|0;n=49;break}h=Zd(i,j,k,0)|0;n=49;break}if(c[i+272>>2]|0){if(a[i+81>>0]|0)break}else{do if(!(0>0|(0==0?k>>>0>(e[i+276>>1]|0)>>>0:0))){f=i+300|0;h=c[f>>2]|0;if(h|0){c[f>>2]=c[h>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=49;break a}f=i+296|0;h=c[f>>2]|0;if(!h){f=i+292|0;break}else{c[f>>2]=c[h>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=49;break a}}else f=i+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}h=_d(i,k,0)|0;n=49}while(0);if((n|0)==49?h|0:0){g=a[s>>0]|0;n=51}if((n|0)==51){if((g&4)==0?(l=c[r>>2]|0,l|0):0)ew(h|0,c[b+4>>2]|0,l|0)|0;c[b+4>>2]=h;f=c[b>>2]|0;if(((f|0)!=0?(m=h,(c[f+304>>2]|0)>>>0<=m>>>0):0)?(c[f+308>>2]|0)>>>0>m>>>0:0)f=e[f+276>>1]|0;else f=Wa[c[29352>>2]&127](h)|0;c[o>>2]=f;a[s>>0]=a[s>>0]|4;v=d;return v|0}f=a[s>>0]|0;if(!(f&4))g=b+4|0;else{f=c[b>>2]|0;g=b+4|0;h=c[g>>2]|0;do if(h|0){if(f|0){if(c[f+480>>2]|0){Xd(f,h);break}v=h;if((c[f+304>>2]|0)>>>0<=v>>>0?(c[f+308>>2]|0)>>>0>v>>>0:0){v=f+300|0;c[h>>2]=c[v>>2];c[v>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{v=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);f=a[s>>0]&-5;a[s>>0]=f}c[o>>2]=0;c[r>>2]=0;c[g>>2]=0;a[q>>0]=7;if(!(c[p>>2]|0)){v=0;return v|0}if(f&4)a[s>>0]=f&-5;c[o>>2]=0;c[r>>2]=0;c[b+4>>2]=0;v=0;return v|0}function wb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;d=vb(a,d)|0;if((d|0)<=0)return;e=a+16|0;ew((c[a+4>>2]|0)+(c[e>>2]|0)|0,b|0,d|0)|0;c[e>>2]=(c[e>>2]|0)+d;return}function xb(a){a=a|0;if(!a){a=0;return a|0}a=(Eu(a)|0)&1073741823;return a|0}function yb(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0?(a[e+(c[b+16>>2]|0)>>0]=0,c[b+12>>2]|0):0)?(a[b+21>>0]&4)==0:0){e=$d(b)|0;return e|0}e=c[d>>2]|0;return e|0}function zb(b){b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){b=29632;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](24)|0;if(!d){b=29632;return b|0}}else{f=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=29632;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}if(!b){c[d+4>>2]=0;c[d>>2]=0;c[d+8>>2]=0;c[d+12>>2]=1e9;c[d+16>>2]=0;a[d+20>>0]=0;a[d+21>>0]=0;g=d;return g|0}else{g=c[b+108>>2]|0;c[d+4>>2]=0;c[d>>2]=0;c[d+8>>2]=0;c[d+12>>2]=g;c[d+16>>2]=0;a[d+20>>0]=0;a[d+21>>0]=0;g=d;return g|0}return 0}function Ab(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+96|0;f=j+72|0;if(mb()|0){i=0;Ra=j;return i|0}g=f+4|0;c[g>>2]=j;c[f>>2]=0;c[f+8>>2]=70;h=f+12|0;c[h>>2]=1e9;i=f+16|0;c[i>>2]=0;a[f+20>>0]=0;e=f+21|0;a[e>>0]=0;tb(f,b,d);b=c[g>>2]|0;if((b|0?(a[b+(c[i>>2]|0)>>0]=0,c[h>>2]|0):0)?(a[e>>0]&4)==0:0){i=$d(f)|0;Ra=j;return i|0}i=c[g>>2]|0;Ra=j;return i|0}function Bb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+112|0;j=k+88|0;h=k;if(mb()|0){j=0;Ra=k;return j|0}c[h>>2]=d;do if(!(mb()|0)){i=j+4|0;c[i>>2]=k+16;c[j>>2]=0;c[j+8>>2]=70;e=j+12|0;c[e>>2]=1e9;f=j+16|0;c[f>>2]=0;a[j+20>>0]=0;g=j+21|0;a[g>>0]=0;tb(j,b,h);d=c[i>>2]|0;if((d|0?(a[d+(c[f>>2]|0)>>0]=0,c[e>>2]|0):0)?(a[g>>0]&4)==0:0){d=$d(j)|0;break}d=c[i>>2]|0}else d=0;while(0);j=d;Ra=k;return j|0}function Cb(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=Ra;Ra=Ra+48|0;h=j+16|0;i=j;c[i>>2]=g;if((d|0)<1){Ra=j;return e|0}c[h+4>>2]=e;c[h>>2]=0;c[h+8>>2]=d;g=h+12|0;c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;tb(h,f,i);a[e+(c[h+16>>2]|0)>>0]=0;Ra=j;return e|0}function Db(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+256|0;k=l+232|0;g=l;if(!(c[7387]|0)){Ra=l;return}c[g>>2]=f;i=k+4|0;c[i>>2]=l+16;c[k>>2]=0;c[k+8>>2]=210;j=k+12|0;h=k+21|0;c[j>>2]=0;c[j+4>>2]=0;b[j+8>>1]=0;tb(k,e,g);e=c[7387]|0;g=c[7388]|0;f=c[i>>2]|0;if(((f|0)!=0?(a[f+(c[k+16>>2]|0)>>0]=0,(c[j>>2]|0)!=0):0)?(a[h>>0]&4)==0:0)f=$d(k)|0;else f=c[i>>2]|0;cb[e&255](g,d,f);Ra=l;return}function Eb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=d;tb(a,b,f);Ra=e;return}function Fb(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=Ra;Ra=Ra+256|0;h=i;if(mb()|0){Ra=i;return}if((b|0)<1|(e|0)==0){a[59955]=0;Ra=i;return}if(!(a[59955]|0)){a[59957]=0;a[59956]=0;f=(mb()|0)==0;f=f?c[14770]|0:0;Ya[c[f+56>>2]&127](f,256,h)|0;f=0;do{a[59958+f>>0]=f;f=f+1|0}while((f|0)!=256);f=0;g=a[59957]|0;do{j=59958+f|0;m=a[j>>0]|0;l=(d[h+f>>0]|0)+(m&255)+(g&255)|0;g=l&255;l=59958+(l&255)|0;k=a[l>>0]|0;a[l>>0]=m;a[j>>0]=k;f=f+1|0}while((f|0)!=256);a[59957]=g;a[59955]=1}while(1){l=(a[59956]|0)+1<<24>>24;a[59956]=l;l=59958+(l&255)|0;j=a[l>>0]|0;m=j&255;k=(d[59957]|0)+m|0;a[59957]=k;k=59958+(k&255)|0;a[l>>0]=a[k>>0]|0;a[k>>0]=j;a[e>>0]=a[59958+((d[l>>0]|0)+m&255)>>0]|0;b=b+-1|0;if(!b)break;else e=e+1|0}Ra=i;return}function Gb(b,c){b=b|0;c=c|0;var e=0,f=0;if(!b){e=((c|0)!=0)<<31>>31;return e|0}if(!c){e=1;return e|0}f=a[b>>0]|0;e=(d[208+(f&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(f<<24>>24==0|(e|0)!=0){f=e;return f|0}e=c;do{b=b+1|0;e=e+1|0;f=a[b>>0]|0;c=(d[208+(f&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(f<<24>>24==0|(c|0)!=0));return c|0}function Hb(b,c){b=b|0;c=c|0;var e=0,f=0;f=a[b>>0]|0;e=(d[208+(f&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(f<<24>>24==0|(e|0)!=0){f=e;return f|0}e=c;do{b=b+1|0;e=e+1|0;f=a[b>>0]|0;c=(d[208+(f&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(f<<24>>24==0|(c|0)!=0));return c|0}function Ib(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!b){g=((c|0)!=0)<<31>>31;return g|0}if(!c){g=1;return g|0}if((e|0)<=0){g=0;return g|0}f=e;while(1){e=a[b>>0]|0;if(!(e<<24>>24)){f=7;break}e=a[208+(e&255)>>0]|0;g=a[208+(d[c>>0]|0)>>0]|0;if(e<<24>>24!=g<<24>>24){f=9;break}if((f|0)>1){b=b+1|0;c=c+1|0;f=f+-1|0}else{b=0;f=12;break}}if((f|0)==7){e=0;b=a[208+(d[c>>0]|0)>>0]|0}else if((f|0)==9){e=e&255;b=g}else if((f|0)==12)return b|0;g=e-(b&255)|0;return g|0}function Jb(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=Ra;Ra=Ra+1232|0;E=H+1200|0;D=H+1192|0;F=H+1168|0;w=H+1144|0;v=H+1128|0;G=H+1048|0;C=H+528|0;n=H;m=g&-256;s=g&16;z=g&8;q=g&4;k=g&1;r=g&2;a:do if(!q)A=0;else{b:do if((m|0)>=16384)if((m|0)<524288)switch(m|0){case 16384:{A=1;break a}default:break b}else switch(m|0){case 524288:{A=1;break a}default:break b}else switch(m|0){case 2048:{A=1;break a}default:{}}while(0);A=0}while(0);y=c[14796]|0;if((y|0)!=(Ju()|0)?(y=Ju()|0,c[14796]=y,(mb()|0)==0):0)a[59955]=0;o=f;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));y=(m|0)==256;if(!y)if(!e){i=ye(c[d+8>>2]|0,n)|0;if(!i){u=n;i=-1}else{f=i;Ra=H;return f|0}}else{u=e;i=-1}else{c:do if(((c[14795]|0)!=0?(Xa[c[2388>>2]&255](e,G)|0)==0:0)?(i=c[14795]|0,(i|0)!=0):0){m=c[G>>2]|0;n=c[G+72>>2]|0;while(1){if((c[i>>2]|0)==(m|0)?(u=i+8|0,(c[u+4>>2]|0)==0?(c[u>>2]|0)==(n|0):0):0)break;i=c[i+44>>2]|0;if(!i){B=20;break c}}i=i+32|0;m=c[i>>2]|0;if(m){while(1){n=m+8|0;if((c[m+4>>2]|0)==(g|0))break;m=c[n>>2]|0;if(!m){B=20;break c}else i=n}c[i>>2]=c[n>>2];i=m;m=c[m>>2]|0}else B=20}else B=20;while(0);do if((B|0)==20){if(mb()|0){f=7;Ra=H;return f|0}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](12)|0;if(!i)i=7;else{m=-1;break}Ra=H;return i|0}i=Wa[c[29356>>2]&127](12)|0;if((c[14985]|0)>>>0<12)c[14985]=12;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){u=c[14978]|0;t=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&t>>>0<=u>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){f=7;Ra=H;return f|0}m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m;m=-1}while(0);c[f+28>>2]=i;u=e;i=m}t=(r|0)!=0;q=q<<4|r;q=(s|0)==0?q:q|131200;d:do if((i|0)<0){i=g&526336;e:do if(!i)if(!z)if(!((g&64|0)==0|(u|0)==0)?(l=u+(((Eu(u)|0)&1073741823)+1)|0,(a[l>>0]|0)!=0):0){while(1){s=Bu(l,32118)|0;l=l+(((Eu(l)|0)&1073741823)+1)|0;if(!s)break;l=l+(((Eu(l)|0)&1073741823)+1)|0;if(!(a[l>>0]|0)){p=0;n=0;m=0;break e}}if(!(Xa[c[2388>>2]&255](l,G)|0)){l=0;m=c[G+24>>2]|0;n=c[G+20>>2]|0;o=c[G+12>>2]&511}else{l=1802;m=0;n=0;o=0}B=57}else{p=0;n=0;m=0}else{p=0;n=0;m=384}else{if(!u)l=-1;else l=((Eu(u)|0)&1073741823)+-1|0;m=a[u+l>>0]|0;f:do if(m<<24>>24!=45){while(1){if(m<<24>>24==46|(l|0)==0)break;l=l+-1|0;m=a[u+l>>0]|0;if(m<<24>>24==45)break f}p=0;n=0;m=0;break e}while(0);ew(C|0,u|0,l|0)|0;a[C+l>>0]=0;if(!(Xa[c[2388>>2]&255](C,G)|0)){m=c[G+24>>2]|0;l=0;n=c[G+20>>2]|0;o=c[G+12>>2]&511}else{m=0;l=1802;n=0;o=0}B=57}while(0);if((B|0)==57)if(!l){p=m;m=o}else{f=l;Ra=H;return f|0}l=xe(u,q,m)|0;do if((l|0)<0){if((A?(s=uu()|0,(c[s>>2]|0)==13):0)?(Xa[c[2364>>2]&255](u,0)|0)!=0:0)i=1544;else{s=uu()|0;if(t&(c[s>>2]|0)!=21?(x=xe(u,q&131200,m)|0,(x|0)>=0):0){m=g&-8|1;k=1;l=x;i=g&526336;break}else i=0}c[v>>2]=31984;c[v+4>>2]=38565;c[v+8>>2]=31517;Db(14,32001,v);G=uu()|0;G=c[G>>2]|0;j=dv(G)|0;c[w>>2]=38565;c[w+4>>2]=G;c[w+8>>2]=31690;c[w+12>>2]=(u|0)==0?59952:u;c[w+16>>2]=j;Db(14,31953,w);j=(i|0)==0?14:i;i=f+28|0;break d}else m=g;while(0);if((i|0)!=0?(Va[c[2592>>2]&127]()|0)==0:0){Ya[c[2580>>2]&127](l,n,p)|0;o=l;B=69}else{o=l;B=69}}else{m=g;o=i;B=69}while(0);g:do if((B|0)==69){if(h|0)c[h>>2]=m;p=f+28|0;i=c[p>>2]|0;if(i|0){c[i>>2]=o;c[i+4>>2]=m}if(z|0)Wa[c[2532>>2]&127](u)|0;l=z<<2;l=(k|0)==0?l:l|2;l=y?l:l|128;l=A?l|8:l;A=l|m&64;m=f+12|0;c[m>>2]=o;c[f+4>>2]=d;n=f+32|0;c[n>>2]=e;i=A&255;k=f+18|0;b[k>>1]=i;h:do if(!((e|0)==0|(A&64|0)==0)?(j=e+(((Eu(e)|0)&1073741823)+1)|0,(a[j>>0]|0)!=0):0){while(1){A=Bu(j,32125)|0;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!A)break;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!(a[j>>0]|0)){B=82;break h}}if((Zm(j,1,1)|0)<<24>>24){i=b[k>>1]|0;B=82}}else B=82;while(0);if((B|0)==82)b[k>>1]=i|16;if(!(Bu(c[d+16>>2]|0,31213)|0))b[k>>1]=b[k>>1]|1;i:do if(!(l&128)){i=Xa[c[c[d+20>>2]>>2]&255](e,f)|0;if((i|0)!=29668){if((i|0)!=29820)break;i=(Eu(e)|0)+6|0;j=pb(i,((i|0)<0)<<31>>31)|0;if(j|0){c[D>>2]=e;Cb(i,j,32130,D)|0;c[f+24>>2]=j;i=29820;break}c[f+24>>2]=0;c[f+20>>2]=0;if((o|0)<=-1){j=7;i=p;break g}if(!(Wa[c[2352>>2]&127](o)|0)){j=7;i=p;break g}i=c[n>>2]|0;f=uu()|0;f=c[f>>2]|0;j=dv(f)|0;c[E>>2]=38152;c[E+4>>2]=f;c[E+8>>2]=31695;c[E+12>>2]=(i|0)==0?59952:i;c[E+16>>2]=j;Db(4106,31953,E);j=7;i=p;break g}l=f+8|0;j:do if(!(Xa[c[2400>>2]&255](c[m>>2]|0,C)|0)){i=G;c[i>>2]=0;c[i+4>>2]=0;c[G>>2]=c[C>>2];i=G+8|0;c[i>>2]=c[C+72>>2];c[i+4>>2]=0;i=c[14795]|0;k:do if(!i)B=93;else{while(1){if(!(Lu(G,i,16)|0))break;i=c[i+44>>2]|0;if(!i){B=93;break k}}G=i+36|0;c[G>>2]=(c[G>>2]|0)+1}while(0);if((B|0)==93){if(mb()|0){j=7;break}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](56)|0;if(!i){j=7;break j}}else{i=Wa[c[29356>>2]&127](56)|0;if((c[14985]|0)>>>0<56)c[14985]=56;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){E=c[14978]|0;D=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&D>>>0<=E>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){j=7;break j}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}while(0);j=i+16|0;o=j;p=o+40|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[i>>2]=c[G>>2];c[i+4>>2]=c[G+4>>2];c[i+8>>2]=c[G+8>>2];c[i+12>>2]=c[G+12>>2];if(c[7325]|0)c[j>>2]=8;c[i+36>>2]=1;j=c[14795]|0;c[i+44>>2]=j;c[i+48>>2]=0;if(j|0)c[j+48>>2]=i;c[14795]=i}c[l>>2]=i;i=29668;break i}else{j=uu()|0;j=c[j>>2]|0;c[f+20>>2]=j;j=(j|0)==75?22:10}while(0);if(Wa[c[2352>>2]&127](o)|0){if(!f)i=0;else i=c[n>>2]|0;E=uu()|0;E=c[E>>2]|0;G=dv(E)|0;c[F>>2]=38067;c[F+4>>2]=E;c[F+8>>2]=31695;c[F+12>>2]=(i|0)==0?59952:i;c[F+16>>2]=G;Db(4106,31953,F)}c[f+20>>2]=0;i=p;break g}else i=29744;while(0);c[f+20>>2]=0;c[f>>2]=i;te(f);f=0;Ra=H;return f|0}while(0);i=c[i>>2]|0;if(!i){f=j;Ra=H;return f|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);f=j;Ra=H;return f|0}else{f=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);f=j;Ra=H;return f|0}return 0}function Kb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+80|0;g=h+48|0;e=h+24|0;a=h;f=h+68|0;if((Wa[c[2532>>2]&127](b)|0)==-1){g=uu()|0;if((c[g>>2]|0)==2){g=5898;Ra=h;return g|0}f=uu()|0;f=c[f>>2]|0;g=dv(f)|0;c[a>>2]=38695;c[a+4>>2]=f;c[a+8>>2]=31800;c[a+12>>2]=(b|0)==0?59952:b;c[a+16>>2]=g;Db(2570,31953,a);g=2570;Ra=h;return g|0}if(!(d&1)){g=0;Ra=h;return g|0}if(!(Xa[c[2544>>2]&255](b,f)|0)){if(!(zv(c[f>>2]|0)|0))a=0;else{d=uu()|0;d=c[d>>2]|0;a=dv(d)|0;c[e>>2]=38705;c[e+4>>2]=d;c[e+8>>2]=32138;c[e+12>>2]=(b|0)==0?59952:b;c[e+16>>2]=a;Db(1290,31953,e);a=1290}if(Wa[c[2352>>2]&127](c[f>>2]|0)|0){d=uu()|0;d=c[d>>2]|0;f=dv(d)|0;c[g>>2]=38707;c[g+4>>2]=d;c[g+8>>2]=31695;c[g+12>>2]=59952;c[g+16>>2]=f;Db(4106,31953,g)}}else a=0;g=a;Ra=h;return g|0}function Lb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Ra;Ra=Ra+80|0;a=f;if(!d){d=(Xa[c[2388>>2]&255](b,a)|0)==0;c[e>>2]=d&(c[a+36>>2]|0)>0&1;Ra=f;return 0}else{d=(Xa[c[2364>>2]&255](b,6)|0)==0&1;c[e>>2]=d;Ra=f;return 0}return 0}function Mb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+256|0;z=B+168|0;y=B+152|0;x=B+128|0;w=B+112|0;u=B+96|0;t=B+72|0;s=B+56|0;r=B+40|0;v=B+16|0;q=B;l=B+172|0;m=l+12|0;n=e+-1|0;o=e+-2|0;p=(f|0)==0;b=0;g=1;while(1){if(!(Xa[c[2664>>2]&255](d,l)|0))if((c[m>>2]&61440|0)==40960){if(!b){b=nb(e)|0;if(!b){b=0;d=7;C=34;break}else j=g}else if((g|0)>99){C=9;break}else j=g+1|0;g=Ya[c[2652>>2]&127](d,b,n)|0;if((g|0)<0){C=11;break}do if((a[b>>0]|0)!=47){a:do if((d|0)!=0?(A=(Eu(d)|0)&1073741823,(A|0)!=0):0){h=A;while(1){i=h+-1|0;if((a[d+i>>0]|0)==47)break a;if((h|0)>1)h=i;else{h=i;break}}}else h=0;while(0);i=h+g|0;if((i|0)<(e|0)){fw(b+h|0,b|0,g+1|0)|0;ew(b|0,d|0,h|0)|0;g=i;d=0;break}else{c[u>>2]=31984;c[u+4>>2]=38842;c[u+8>>2]=31517;Db(14,32001,u);d=14;break}}else d=0;while(0);a[b+g>>0]=0;k=b;g=j;i=0}else{k=d;d=0;i=1}else{k=uu()|0;if((c[k>>2]|0)==2){k=d;d=0;i=1}else{C=4;break}}if((d|0)!=0|(k|0)==(f|0)){if(i){C=36;break}}else{d=(k|0)==0;if(d)h=0;else h=(Eu(k)|0)&1073741823;if((a[k>>0]|0)==47)d=0;else{if(!(Xa[c[2376>>2]&255](f,o)|0)){C=27;break}if(p)d=0;else d=(Eu(f)|0)&1073741823;a[f+d>>0]=47;d=d+1|0}if((d+h|0)>=(e|0)){C=32;break}c[z>>2]=k;Cb(e-d|0,f+d|0,31408,z)|0;if(i){d=0;C=36;break}else d=0}if(!d)d=f;else break}if((C|0)==4){c[q>>2]=31984;c[q+4>>2]=38819;c[q+8>>2]=31517;Db(14,32001,q);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[v>>2]=38819;c[v+4>>2]=f;c[v+8>>2]=31888;c[v+12>>2]=(d|0)==0?59952:d;c[v+16>>2]=A;Db(14,31953,v);d=14;C=36}else if((C|0)==9){c[r>>2]=31984;c[r+4>>2]=38830;c[r+8>>2]=31517;Db(14,32001,r);d=14;C=34}else if((C|0)==11){c[s>>2]=31984;c[s+4>>2]=38836;c[s+8>>2]=31517;Db(14,32001,s);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[t>>2]=38836;c[t+4>>2]=f;c[t+8>>2]=31879;c[t+12>>2]=(d|0)==0?59952:d;c[t+16>>2]=A;Db(14,31953,t);d=14;C=34}else if((C|0)==27){c[w>>2]=31984;c[w+4>>2]=38762;c[w+8>>2]=31517;Db(14,32001,w);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[x>>2]=38762;c[x+4>>2]=f;c[x+8>>2]=31708;c[x+12>>2]=d?59952:k;c[x+16>>2]=A;Db(14,31953,x);d=14;C=34}else if((C|0)==32){a[f+d>>0]=0;c[y>>2]=31984;c[y+4>>2]=38771;c[y+8>>2]=31517;Db(14,32001,y);d=14;C=34}if(!b){Ra=B;return d|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=B;return d|0}else{C=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=B;return d|0}return 0}function Nb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+32|0;h=i+8|0;g=i;b=i+28|0;gw(e|0,0,d|0)|0;f=Ju()|0;c[14796]=f;while(1){f=Ya[c[2340>>2]&127](32144,524288,420)|0;if((f|0)<0){f=uu()|0;if((c[f>>2]|0)!=4){j=8;break}}else{if((f|0)>2)break;Wa[c[2352>>2]&127](f)|0;c[g>>2]=32144;c[g+4>>2]=f;Db(28,31900,g);if((Ya[c[2340>>2]&127](31943,0,0)|0)<0){j=8;break}}}if((j|0)==8){La(b|0)|0;j=c[b>>2]|0;a[e>>0]=j;a[e+1>>0]=j>>8;a[e+2>>0]=j>>16;a[e+3>>0]=j>>24;j=e+4|0;e=c[14796]|0;a[j>>0]=e;a[j+1>>0]=e>>8;a[j+2>>0]=e>>16;a[j+3>>0]=e>>24;j=8;Ra=i;return j|0}do{if((Ya[c[2436>>2]&127](f,e,d)|0)>=0)break;j=uu()|0}while((c[j>>2]|0)==4);if(!(Wa[c[2352>>2]&127](f)|0)){j=d;Ra=i;return j|0}e=uu()|0;e=c[e>>2]|0;j=dv(e)|0;c[h>>2]=38966;c[h+4>>2]=e;c[h+8>>2]=31695;c[h+12>>2]=59952;c[h+16>>2]=j;Db(4106,31953,h);j=d;Ra=i;return j|0}function Ob(a,b){a=a|0;b=b|0;b=(b+999999|0)/1e6|0;Av(b)|0;return b*1e6|0}function Pb(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0;a=Ra;Ra=Ra+16|0;e=a;Da(e|0,0)|0;h=c[e>>2]|0;h=Yv(h|0,((h|0)<0)<<31>>31|0,1e3,0)|0;h=Sv(h|0,L()|0,1045635584,49096)|0;f=L()|0;e=(c[e+4>>2]|0)/1e3|0;e=Sv(h|0,f|0,e|0,((e|0)<0)<<31>>31|0)|0;d=(+(e>>>0)+4294967296.0*+(L()|0))/864.0e5;g[b>>3]=d;Ra=a;return 0}function Qb(a,b,d){a=a|0;b=b|0;d=d|0;d=uu()|0;return c[d>>2]|0}function Rb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=Ra;Ra=Ra+16|0;e=a;Da(e|0,0)|0;f=c[e>>2]|0;f=Yv(f|0,((f|0)<0)<<31>>31|0,1e3,0)|0;f=Sv(f|0,L()|0,1045635584,49096)|0;d=L()|0;e=(c[e+4>>2]|0)/1e3|0;e=Sv(f|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;d=L()|0;c[b>>2]=e;c[b+4>>2]=d;Ra=a;return 0}function Sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b|0){do if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(!(Bu(b,c[632]|0)|0))e=16;else{if(!(Bu(b,c[635]|0)|0)){e=17;break}if(!(Bu(b,c[638]|0)|0)){e=18;break}if(!(Bu(b,c[641]|0)|0)){e=19;break}if(!(Bu(b,c[644]|0)|0)){e=20;break}if(!(Bu(b,c[647]|0)|0)){e=21;break}if(!(Bu(b,c[650]|0)|0)){e=22;break}if(!(Bu(b,c[653]|0)|0)){e=23;break}if(!(Bu(b,c[656]|0)|0)){e=24;break}if(!(Bu(b,c[659]|0)|0)){e=25;break}if(!(Bu(b,c[662]|0)|0)){e=26;break}if(!(Bu(b,c[665]|0)|0)){e=27;break}if(!(Bu(b,c[668]|0)|0)){e=28;break}else a=12;return a|0}else e=15;else e=14;else e=13;else e=12;else e=11;else e=10;else e=9;else e=8;else e=7;else e=6;else e=5;else e=4;else e=3;else e=2;else e=1;else e=0;while(0);b=2336+(e*12|0)+8|0;a=c[b>>2]|0;if(!a){a=c[2336+(e*12|0)+4>>2]|0;c[b>>2]=a}c[2336+(e*12|0)+4>>2]=(d|0)==0?a:d;d=0;return d|0}a=c[586]|0;if(a|0)c[585]=a;a=c[589]|0;if(a|0)c[588]=a;a=c[592]|0;if(a|0)c[591]=a;a=c[595]|0;if(a|0)c[594]=a;a=c[598]|0;if(a|0)c[597]=a;a=c[601]|0;if(a|0)c[600]=a;a=c[604]|0;if(a|0)c[603]=a;a=c[607]|0;if(a|0)c[606]=a;a=c[610]|0;if(a|0)c[609]=a;a=c[613]|0;if(a|0)c[612]=a;a=c[616]|0;if(a|0)c[615]=a;a=c[619]|0;if(a|0)c[618]=a;a=c[622]|0;if(a|0)c[621]=a;a=c[625]|0;if(a|0)c[624]=a;a=c[628]|0;if(a|0)c[627]=a;a=c[631]|0;if(a|0)c[630]=a;a=c[634]|0;if(a|0)c[633]=a;a=c[637]|0;if(a|0)c[636]=a;a=c[640]|0;if(a|0)c[639]=a;a=c[643]|0;if(a|0)c[642]=a;a=c[646]|0;if(a|0)c[645]=a;a=c[649]|0;if(a|0)c[648]=a;a=c[652]|0;if(a|0)c[651]=a;a=c[655]|0;if(a|0)c[654]=a;a=c[658]|0;if(a|0)c[657]=a;a=c[661]|0;if(a|0)c[660]=a;a=c[664]|0;if(a|0)c[663]=a;a=c[667]|0;if(a|0)c[666]=a;a=c[670]|0;if(!a){d=0;return d|0}c[669]=a;d=0;return d|0}function Tb(a,b){a=a|0;b=b|0;do if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(Bu(b,c[632]|0)|0)if(Bu(b,c[635]|0)|0)if(!(Bu(b,c[638]|0)|0))a=18;else{if(!(Bu(b,c[641]|0)|0)){a=19;break}if(!(Bu(b,c[644]|0)|0)){a=20;break}if(!(Bu(b,c[647]|0)|0)){a=21;break}if(!(Bu(b,c[650]|0)|0)){a=22;break}if(!(Bu(b,c[653]|0)|0)){a=23;break}if(!(Bu(b,c[656]|0)|0)){a=24;break}if(!(Bu(b,c[659]|0)|0)){a=25;break}if(!(Bu(b,c[662]|0)|0)){a=26;break}if(!(Bu(b,c[665]|0)|0)){a=27;break}if(!(Bu(b,c[668]|0)|0)){a=28;break}else a=0;return a|0}else a=17;else a=16;else a=15;else a=14;else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;while(0);b=c[2336+(a*12|0)+4>>2]|0;return b|0}function Ub(a,b){a=a|0;b=b|0;var d=0;do if(b)if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(Bu(b,c[632]|0)|0)if(!(Bu(b,c[635]|0)|0))a=17;else{if(!(Bu(b,c[638]|0)|0)){a=18;break}if(!(Bu(b,c[641]|0)|0)){a=19;break}if(!(Bu(b,c[644]|0)|0)){a=20;break}if(!(Bu(b,c[647]|0)|0)){a=21;break}if(!(Bu(b,c[650]|0)|0)){a=22;break}if(!(Bu(b,c[653]|0)|0)){a=23;break}if(!(Bu(b,c[656]|0)|0)){a=24;break}if(!(Bu(b,c[659]|0)|0)){a=25;break}if(!(Bu(b,c[662]|0)|0)){a=26;break}if(!(Bu(b,c[665]|0)|0)){a=27;break}else a=0;return a|0}else a=16;else a=15;else a=14;else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;else a=-1;while(0);while(1){b=a;a=a+1|0;if(c[2336+(a*12|0)+4>>2]|0)break;if((b|0)>=27){a=0;d=8;break}}if((d|0)==8)return a|0;d=c[2336+(a*12|0)>>2]|0;return d|0}function Vb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=Ra;Ra=Ra+16|0;f=g;c[a+64>>2]=b;Le(a,b);if(!d){Xb(a,b);Ra=g;return}b=a+260|0;if((c[b>>2]|0)==0?(h=wd(a)|0,c[b>>2]=h,(h|0)==0):0){Ra=g;return}c[f>>2]=e;a=Me(a,d,f)|0;b=c[b>>2]|0;if(b|0)yc(b,a,-1,1,116)|0;Ra=g;return}function Wb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Sv(a|0,b|0,-1,-1)|0;d=L()|0;if(d>>>0>0|(d|0)==0&e>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](a)|0;if(!b){e=0;return e|0}}else{b=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0<a>>>0)c[14985]=a;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){f=c[14978]|0;e=Tv(d|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=f>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){f=0;return f|0}d=Wa[c[29352>>2]&127](b)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}gw(b|0,0,a|0)|0;f=b;return f|0}function Xb(a,b){a=a|0;b=b|0;c[a+64>>2]=b;if(b|0){Ne(a,b);return}if(!(c[a+260>>2]|0))return;Ne(a,0);return}function Yb(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;v=F;D=d+24|0;i=c[D>>2]|0;h=c[i+4>>2]|0;c[h+4>>2]=c[i>>2];E=d+28|0;g=c[E>>2]|0;switch(g|0){case 6:case 0:case 5:break;default:{E=g;Ra=F;return E|0}}u=c[h>>2]|0;x=d+4|0;w=c[c[(c[x>>2]|0)+4>>2]>>2]|0;if((c[d>>2]|0)!=0?(a[h+20>>0]|0)==2:0){C=0;g=5}else if(!(a[i+8>>0]|0)){C=1;g=Zb(i,0,0)|0}else{C=0;g=0}o=d+12|0;if((c[o>>2]|g|0)==0?(t=c[x>>2]|0,j=c[(c[(c[D>>2]|0)+4>>2]|0)+32>>2]|0,p=c[t+4>>2]|0,c[p+4>>2]=c[t>>2],(b[p+22>>1]&2)==0):0){k=p+32|0;l=p+36|0;m=(c[k>>2]|0)-(c[l>>2]|0)|0;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[k>>2]=j,q=p+80|0,n=c[q>>2]|0,n|0):0){i=n+-4|0;c[q>>2]=i;h=i;do if((c[14816]|0)>>>0<=h>>>0)if((c[14817]|0)>>>0>h>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{h=Wa[c[29352>>2]&127](i)|0;B=16;break}else{h=Wa[c[29352>>2]&127](i)|0;B=16}while(0);do if((B|0)==16){c[14980]=(c[14980]|0)-h;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[q>>2]=0}t=Se(c[p>>2]|0,k,m)|0;c[l>>2]=(c[k>>2]|0)-(m&65535);if((t|0)==7)g=7;else B=21}else B=21;if((B|0)==21)if(!g)if(!(c[o>>2]|0)){g=Zb(c[x>>2]|0,2,d+8|0)|0;if(!g){c[o>>2]=1;g=0}}else g=0;l=c[(c[D>>2]|0)+4>>2]|0;t=c[l+32>>2]|0;n=c[(c[x>>2]|0)+4>>2]|0;s=c[n+32>>2]|0;n=(a[(c[n>>2]|0)+5>>0]|0)==5;g=(t|0)==(s|0)|(g|0)==0&n^1?g:8;l=c[l+44>>2]|0;a:do if(e){j=d+16|0;k=u+204|0;i=0;h=c[j>>2]|0;do{if(!((g|0)==0&h>>>0<=l>>>0))break a;if((h|0)==((1073741824/((c[(c[(c[D>>2]|0)+4>>2]|0)+32>>2]|0)>>>0)|0)+1|0))g=0;else{g=Za[c[k>>2]&127](u,h,v,2)|0;do if(!g){g=_b(d,h,c[(c[v>>2]|0)+4>>2]|0,0)|0;h=c[v>>2]|0;if(h)if(!(b[h+28>>1]&32)){Df(h);break}else{q=c[h+20>>2]|0;p=q+120|0;c[p>>2]=(c[p>>2]|0)+-1;q=q+136|0;c[h+16>>2]=c[q>>2];c[q>>2]=h;break}}while(0);h=c[j>>2]|0}h=h+1|0;c[j>>2]=h;i=i+1|0}while(i>>>0<e>>>0)}while(0);switch(g|0){case 0:{c[d+36>>2]=l;e=c[d+16>>2]|0;c[d+32>>2]=l+1-e;if(e>>>0<=l>>>0){f=d+40|0;if(!(c[f>>2]|0)){A=(c[c[(c[D>>2]|0)+4>>2]>>2]|0)+88|0;c[d+44>>2]=c[A>>2];c[A>>2]=d;c[f>>2]=1;f=0}else f=0}else B=40;break}case 101:{B=40;break}default:f=g}b:do if((B|0)==40){if(!l){e=c[x>>2]|0;g=c[e+4>>2]|0;c[g+4>>2]=c[e>>2];c[g+44>>2]=0;g=Rf(g)|0;switch(g|0){case 0:case 101:{m=1;break}default:{f=g;break b}}}else m=l;i=c[x>>2]|0;h=(c[d+8>>2]|0)+1|0;j=c[i+4>>2]|0;c[j+4>>2]=c[i>>2];j=c[j+12>>2]|0;i=c[j+56>>2]|0;j=c[j+72>>2]|0;k=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){r=Ve(j)|0;B=50}}else B=46;do if((B|0)==46){g=c[k+40>>2]|0;if(g|0){f=g;break b}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){r=Wf(j)|0;B=50;break}else{r=Xf(j)|0;B=50;break}}while(0);if((B|0)==50?r|0:0){f=r;break}a[i+40>>0]=h>>>24;a[i+41>>0]=h>>>16;a[i+42>>0]=h>>>8;a[i+43>>0]=h;g=c[d>>2]|0;if(g|0)$b(g);c:do if(n){i=c[x>>2]|0;g=c[i+4>>2]|0;l=g+22|0;b[l>>1]=b[l>>1]&-33;h=Zb(i,0,0)|0;d:do if(!h){h=g+12|0;j=c[(c[h>>2]|0)+56>>2]|0;k=j+18|0;if(!((a[k>>0]|0)==2?(a[j+19>>0]|0)==2:0)){g=Zb(i,2,0)|0;if(g|0){f=g;break}g=c[(c[h>>2]|0)+72>>2]|0;h=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[h+96>>2]|0){f=Ve(g)|0;B=66}}else B=62;do if((B|0)==62){f=c[h+40>>2]|0;if(f|0)break d;if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(g)|0;B=66;break}else{f=Xf(g)|0;B=66;break}}while(0);if((B|0)==66?f|0:0)break;a[k>>0]=2;a[j+19>>0]=2}b[l>>1]=b[l>>1]&-33;break c}else f=h;while(0);b[l>>1]=b[l>>1]&-33;break b}while(0);if((t|0)<(s|0)){f=(s|0)/(t|0)|0;f=(m+-1+f|0)/(f|0)|0;g=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0;f=f+(((f|0)==((1073741824/(g>>>0)|0)+1|0))<<31>>31)|0;n=((t|0)<0)<<31>>31;o=Yv(m|0,((m|0)<0)<<31>>31|0,t|0,n|0)|0;p=L()|0;q=w+60|0;m=c[q>>2]|0;j=c[w+24>>2]|0;if(f>>>0<=j>>>0){k=w+204|0;i=f;f=0;h=1073741824;while(1){if((i|0)!=(((h>>>0)/(g>>>0)|0)+1|0)){f=Za[c[k>>2]&127](w,i,v,0)|0;do if(!f){g=c[v>>2]|0;h=c[g+20>>2]|0;do if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(!(c[h+96>>2]|0)){f=0;break}f=Ve(g)|0}else B=79;while(0);do if((B|0)==79){B=0;f=c[h+40>>2]|0;if(!f)if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(g)|0;break}else{f=Xf(g)|0;break}}while(0);g=c[v>>2]|0;if(g)if(!(b[g+28>>1]&32)){Df(g);break}else{d=c[g+20>>2]|0;r=d+120|0;c[r>>2]=(c[r>>2]|0)+-1;d=d+136|0;c[g+16>>2]=c[d>>2];c[d>>2]=g;break}}while(0)}g=i+1|0;h=(f|0)==0;if(g>>>0>j>>>0|h^1)break;i=g;h=1073741824;g=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0}if(h)B=91}else B=91;if((B|0)==91)f=ac(w,0,1)|0;k=1073741824+s|0;l=((k|0)<0)<<31>>31;h=(p|0)>(l|0)|(p|0)==(l|0)&o>>>0>k>>>0;k=h?k:o;l=h?l:p;h=1073741824+t|0;i=((h|0)<0)<<31>>31;g=(f|0)==0;if(((l|0)>(i|0)|(l|0)==(i|0)&k>>>0>h>>>0)&g){j=u+204|0;do{c[v>>2]=0;f=Wv(h|0,i|0,t|0,n|0)|0;L()|0;f=Za[c[j>>2]&127](u,f+1|0,v,0)|0;if(!f)f=_a[c[(c[m>>2]|0)+12>>2]&127](m,c[(c[v>>2]|0)+4>>2]|0,t,h,i)|0;g=c[v>>2]|0;do if(g|0)if(!(b[g+28>>1]&32)){Df(g);break}else{s=c[g+20>>2]|0;d=s+120|0;c[d>>2]=(c[d>>2]|0)+-1;s=s+136|0;c[g+16>>2]=c[s>>2];c[s>>2]=g;break}while(0);h=Sv(h|0,i|0,t|0,n|0)|0;i=L()|0;g=(f|0)==0}while(((i|0)<(l|0)|(i|0)==(l|0)&h>>>0<k>>>0)&g)}if(!g)break;f=Xa[c[(c[m>>2]|0)+24>>2]&255](m,v)|0;u=c[v+4>>2]|0;if((f|0)==0&((u|0)>(p|0)|((u|0)==(p|0)?(c[v>>2]|0)>>>0>o>>>0:0)))f=Ya[c[(c[m>>2]|0)+16>>2]&127](m,o,p)|0;if(f|0)break;f=c[q>>2]|0;g=c[f>>2]|0;if(g|0){f=Ya[c[g+40>>2]&127](f,21,0)|0;switch(f|0){case 0:case 12:break;default:break b}}if((a[w+7>>0]|0)==0?(z=c[q>>2]|0,A=a[w+10>>0]|0,A<<24>>24):0){y=Xa[c[(c[z>>2]|0)+20>>2]&255](z,A&255)|0;B=111}}else{y=G((t|0)/(s|0)|0,m)|0;c[w+24>>2]=y;y=ac(w,0,0)|0;B=111}if((B|0)==111?y|0:0){f=y;break}f=bc(c[x>>2]|0,0)|0;f=(f|0)==0?101:f}while(0);if(C|0){cc(c[D>>2]|0,0)|0;bc(c[D>>2]|0,0)|0}D=(f|0)==3082?7:f;c[E>>2]=D;E=D;Ra=F;return E|0}function Zb(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;X=Ra;Ra=Ra+16|0;Q=X;K=X+12|0;W=c[e+4>>2]|0;m=c[e>>2]|0;P=W+4|0;c[P>>2]=m;U=e+8|0;n=a[U>>0]|0;do if(n<<24>>24!=2?(R=(f|0)!=0,R|n<<24>>24!=1):0){if(!(0==0?(c[m+32>>2]&33554432|0)==0:0)?(a[(c[W>>2]|0)+14>>0]|0)==0:0){T=W+22|0;b[T>>1]=b[T>>1]&-2}L=W+22|0;q=b[L>>1]|0;if(R&(q&1)!=0){e=8;Ra=X;return e|0}a:do if(R)if((q&128)==0&(a[W+20>>0]|0)!=2){if((f|0)>1?(o=c[W+72>>2]|0,o|0):0){m=o;do{n=c[m>>2]|0;if((n|0)!=(e|0)){p=n;J=16;break a}m=c[m+12>>2]|0}while((m|0)!=0)}}else J=10;else if(q&128)J=10;while(0);if((J|0)==10){p=c[W+76>>2]|0;J=16}if((J|0)==16?c[p>>2]|0:0){e=262;Ra=X;return e|0}I=e+9|0;b:do if(a[I>>0]|0){if(!((q&64)==0?1:(c[W+76>>2]|0)==(e|0))){e=262;Ra=X;return e|0}m=c[W+72>>2]|0;if(m|0){while(1){if(((c[m>>2]|0)!=(e|0)?(c[m+4>>2]|0)==1:0)?(a[m+8>>0]|0)!=1:0){h=262;break}m=c[m+12>>2]|0;if(!m)break b}Ra=X;return h|0}}while(0);b[L>>1]=q&-17;T=W+44|0;if(!(c[T>>2]|0))b[L>>1]=q|16;G=W+12|0;H=W+20|0;v=W+36|0;w=W+24|0;x=W+26|0;y=W+28|0;z=W+30|0;A=W+21|0;B=W+32|0;C=W+80|0;D=W+17|0;E=W+18|0;F=(f|0)<2;n=0;c:while(1){d:do if(!(c[G>>2]|0)){e:while(1){m=Sf(c[W>>2]|0)|0;if(m|0){J=135;break d}m=c[W>>2]|0;m=Za[c[m+204>>2]&127](m,1,K,0)|0;if(m|0){J=35;break}n=c[K>>2]|0;m=c[n+8>>2]|0;o=m+4|0;if((c[o>>2]|0)==1)s=c[m+56>>2]|0;else{s=c[n+4>>2]|0;c[m+56>>2]=s;c[m+72>>2]=n;c[m+52>>2]=W;c[o>>2]=1;a[m+9>>0]=100}t=m;n=d[s+29>>0]<<16|d[s+28>>0]<<24|d[s+30>>0]<<8|d[s+31>>0];u=c[W>>2]|0;r=c[u+24>>2]|0;if(!((n|0)!=0?(Lu(s+24|0,s+92|0,4)|0)==0:0))n=r;p=c[(c[P>>2]|0)+32>>2]|0;q=(p&33554432|0)==0&0==0?n:0;do if(!q){n=c[v>>2]|0;J=85}else{if(Lu(s,2720,16)|0){n=26;break e}if((d[s+18>>0]|0)>2)b[L>>1]=b[L>>1]|1;n=a[s+19>>0]|0;if((n&255)>2){n=26;break e}do if(n<<24>>24==2){if(b[L>>1]&32){J=62;break}if(a[u+12>>0]|0){J=62;break}if(c[u+216>>2]|0){J=62;break}n=c[c[u+60>>2]>>2]|0;if(a[u+13>>0]|0){n=14;break e}if(!(a[u+4>>0]|0)){if((c[n>>2]|0)<=1){n=14;break e}if(!(c[n+52>>2]|0)){n=14;break e}}n=c[u+64>>2]|0;o=c[n>>2]|0;if(o|0){Wa[c[o+4>>2]&127](n)|0;c[n>>2]=0}n=Uf(u)|0;if(n|0)break e;a[u+5>>0]=5;a[u+16>>0]=0;u=c[m+72>>2]|0;m=c[u+20>>2]|0;Df(u);if(c[(c[m+212>>2]|0)+12>>2]|0)break;f:do switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(a[m+4>>0]|0)break f;uf(m,0,0)|0;break}default:tf(m)|0}while(0);vf(m)}else J=62;while(0);if((J|0)==62){J=0;if(Lu(s+21|0,32387,3)|0){n=26;break e}o=d[s+17>>0]<<16|d[s+16>>0]<<8;if((o+-257|0)>>>0>65279|(o+16777215&o|0)!=0){n=26;break e}b[L>>1]=b[L>>1]|2;u=d[s+20>>0]|0;n=o-u|0;if((o|0)==(c[B>>2]|0)){if(((p&268435457|0)!=1|0!=0)&q>>>0>r>>>0){J=82;break e}if(n>>>0<480){n=26;break e}c[B>>2]=o;c[v>>2]=n;a[D>>0]=(d[s+53>>0]<<16|d[s+52>>0]<<24|d[s+54>>0]<<8|d[s+55>>0]|0)!=0&1;a[E>>0]=(d[s+65>>0]<<16|d[s+64>>0]<<24|d[s+66>>0]<<8|d[s+67>>0]|0)!=0&1;J=85;break}t=c[m+72>>2]|0;m=c[t+20>>2]|0;Df(t);if(!(c[(c[m+212>>2]|0)+12>>2]|0)){g:do switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(a[m+4>>0]|0)break g;uf(m,0,0)|0;break}default:tf(m)|0}while(0);vf(m)}c[v>>2]=n;c[B>>2]=o;m=c[C>>2]|0;if(m|0){n=m+-4|0;c[C>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;J=77;break}else{m=Wa[c[29352>>2]&127](n)|0;J=77}while(0);do if((J|0)==77){J=0;c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{t=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[C>>2]=0}m=Se(c[W>>2]|0,B,u)|0;if(m|0){J=135;break d}}m=c[G>>2]|0}while(0);if((J|0)==85){J=0;u=((((n<<6)+-768|0)>>>0)/255|0)+65513|0;s=u&65535;b[w>>1]=s;r=((((n<<5)+-384|0)>>>0)/255|0)+65513&65535;b[x>>1]=r;b[y>>1]=n+65501;b[z>>1]=r;a[A>>0]=(s&65535)>127?127:u&255;c[G>>2]=t;c[T>>2]=q}if(m|0){n=0;J=96;break d}}if((J|0)==35){J=135;break}else if((J|0)==82){c[Q>>2]=32306;c[Q+4>>2]=66365;c[Q+8>>2]=31517;Db(11,32001,Q);n=11}J=c[m+72>>2]|0;m=c[J+20>>2]|0;Df(J);if(!(c[(c[m+212>>2]|0)+12>>2]|0)){switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[m+4>>0]|0))uf(m,0,0)|0;break}default:tf(m)|0}vf(m)}c[G>>2]=0;m=n;J=135}else J=96;while(0);h:do if((J|0)==96){J=0;i:do if(R&(n|0)==0){if(b[L>>1]&1){m=8;J=135;break h}u=c[W>>2]|0;n=c[u+40>>2]|0;j:do if(!n){a[u+21>>0]=(a[(c[e>>2]|0)+80>>0]|0)==2&1;t=u+16|0;if((a[t>>0]|0)==1){p=u+216|0;m=c[p>>2]|0;k:do if(!m){s=u+17|0;m=a[s>>0]|0;l:do switch(m<<24>>24){case 0:case 1:case 5:{if(!(a[u+13>>0]|0)){n=c[u+60>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,2)|0;if(n|0){J=132;break j}m=a[s>>0]|0}if(m<<24>>24==5){m=5;break l}a[s>>0]=2;m=2;break}default:{}}while(0);if(!F){o=u+13|0;p=u+60|0;q=u+176|0;r=u+180|0;m:while(1){switch(m<<24>>24){case 0:case 1:case 2:case 3:case 5:break;default:break k}if(a[o>>0]|0)break;n=c[p>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,4)|0;switch(n|0){case 0:break m;case 5:break;default:{J=132;break j}}if(!(Wa[c[q>>2]&127](c[r>>2]|0)|0)){m=5;J=135;break h}m=a[s>>0]|0}a[s>>0]=4}}else{do if(a[u+4>>0]|0){n=m+43|0;if(a[n>>0]|0)break;o=u+17|0;n:do switch(a[o>>0]|0){case 0:case 1:case 2:case 3:case 5:{if(a[u+13>>0]|0){a[o>>0]=4;J=108;break n}n=c[u+60>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,4)|0;if(n|0){J=132;break j}m=c[p>>2]|0;n=m+43|0;s=a[n>>0]|0;a[o>>0]=4;if(!(s<<24>>24))J=108;break}default:J=108}while(0);if((J|0)==108){J=c[m+4>>2]|0;Za[c[(c[J>>2]|0)+56>>2]&127](J,(b[m+40>>1]|0)+3|0,1,5)|0;m=c[p>>2]|0}a[n>>0]=1}while(0);if(a[m+46>>0]|0){m=8;J=135;break h}n=m+43|0;if((a[n>>0]|0)==0?(M=c[m+4>>2]|0,M=Za[c[(c[M>>2]|0)+56>>2]&127](M,0,1,10)|0,M|0):0){n=M;J=132;break j}o=m+44|0;a[o>>0]=1;if(!(Lu(m+52|0,c[c[m+32>>2]>>2]|0,48)|0))break;if(!(a[n>>0]|0)){J=c[m+4>>2]|0;Za[c[(c[J>>2]|0)+56>>2]&127](J,0,1,9)|0}a[o>>0]=0;J=134;break j}while(0);a[t>>0]=2;J=c[u+24>>2]|0;c[u+36>>2]=J;c[u+32>>2]=J;c[u+28>>2]=J;J=u+72|0;c[J>>2]=0;c[J+4>>2]=0;J=133}else J=133}else J=132;while(0);if((J|0)==132){J=0;switch(n|0){case 0:{J=133;break}case 517:{J=134;break}default:break i}}if((J|0)==133){J=0;n=Rf(W)|0;break}else if((J|0)==134){m=(a[H>>0]|0)==0?5:517;J=135;break h}}while(0);if(!n){n=0;break c}else s=0}while(0);if((J|0)==135){J=0;n=m;s=(m|0)==0}if(((a[H>>0]|0)==0?(N=c[G>>2]|0,N|0):0)?(c[G>>2]=0,u=c[N+72>>2]|0,O=c[u+20>>2]|0,Df(u),(c[(c[O+212>>2]|0)+12>>2]|0)==0):0){switch(a[O+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[O+4>>0]|0))uf(O,0,0)|0;break}default:tf(O)|0}vf(O)}if((n&255|0)!=5){J=156;break}if(a[H>>0]|0){J=156;break}o=c[P>>2]|0;m=c[(c[W>>2]|0)+60>>2]|0;p=c[o+396>>2]|0;if(!p){J=154;break}r=o+404|0;q=c[r>>2]|0;if((q|0)<0){J=154;break}if(!(a[o+408>>0]|0))m=Xa[p&255](c[o+400>>2]|0,q)|0;else m=Ya[p&127](c[o+400>>2]|0,q,m)|0;if(!m){J=153;break}c[r>>2]=(c[r>>2]|0)+1}if((J|0)==153){c[r>>2]=-1;if(!s){e=n;Ra=X;return e|0}}else if((J|0)==154){if(!s){e=n;Ra=X;return e|0}}else if((J|0)==156)if(!s){e=n;Ra=X;return e|0}if((a[U>>0]|0)==0?(Q=W+40|0,c[Q>>2]=(c[Q>>2]|0)+1,a[I>>0]|0):0){a[e+40>>0]=1;Q=W+72|0;c[e+44>>2]=c[Q>>2];c[Q>>2]=e+32}m=R?2:1;a[U>>0]=m;if((m&255)>(d[H>>0]|0))a[H>>0]=m;if(R?(S=c[G>>2]|0,c[W+76>>2]=e,h=b[L>>1]|0,b[L>>1]=(f|0)>1?h|64:h&-65,h=c[T>>2]|0,V=S+56|0,j=c[V>>2]|0,i=j+28|0,l=j+29|0,k=j+30|0,j=j+31|0,(h|0)!=(d[l>>0]<<16|d[i>>0]<<24|d[k>>0]<<8|d[j>>0]|0)):0){m=c[S+72>>2]|0;n=c[m+20>>2]|0;if((b[m+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[m+24>>2]|0)>>>0:0){if(c[n+96>>2]|0){h=Ve(m)|0;J=172}}else J=168;do if((J|0)==168){h=c[n+40>>2]|0;if(h|0){e=h;Ra=X;return e|0}if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){h=Wf(m)|0;J=172;break}else{h=Xf(m)|0;J=172;break}}while(0);do if((J|0)==172)if(!h){i=c[V>>2]|0;l=i+29|0;k=i+30|0;j=i+31|0;i=i+28|0;h=c[T>>2]|0;break}else{e=h;Ra=X;return e|0}while(0);a[i>>0]=h>>>24;a[l>>0]=h>>>16;a[k>>0]=h>>>8;a[j>>0]=h;break}if(n|0){e=n;Ra=X;return e|0}}while(0);if(g|0){V=c[(c[W+12>>2]|0)+56>>2]|0;c[g>>2]=d[V+41>>0]<<16|d[V+40>>0]<<24|d[V+42>>0]<<8|d[V+43>>0]}if(!f){e=0;Ra=X;return e|0}i=c[W>>2]|0;h=c[(c[e>>2]|0)+452>>2]|0;if((c[i+96>>2]|0)>=(h|0)){e=0;Ra=X;return e|0}if(!(a[i+6>>0]|0)){e=0;Ra=X;return e|0}e=Vf(i,h)|0;Ra=X;return e|0}function _b(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;w=z;x=d+4|0;q=c[(c[x>>2]|0)+4>>2]|0;v=c[q>>2]|0;u=d+24|0;r=c[(c[(c[u>>2]|0)+4>>2]|0)+32>>2]|0;q=c[q+32>>2]|0;s=(r|0)<(q|0)?r:q;t=((r|0)<0)<<31>>31;o=Yv(r|0,t|0,e|0,0)|0;p=L()|0;if((r|0)==(q|0))d=0;else d=(a[v+12>>0]|0)==0?0:8;if(!((r|0)>0&(d|0)==0)){y=d;Ra=z;return y|0}e=Tv(o|0,p|0,r|0,t|0)|0;m=((q|0)<0)<<31>>31;n=v+204|0;l=(g|0)==0;g=L()|0;d=q;while(1){c[w>>2]=0;j=Wv(e|0,g|0,q|0,m|0)|0;k=L()|0;do if((1073741824/(d>>>0)|0|0)!=(j|0)){d=Za[c[n>>2]&127](v,j+1|0,w,0)|0;a:do if(!d){h=c[w>>2]|0;i=c[h+20>>2]|0;if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0))d=h;else{d=Ve(h)|0;y=15}else y=11;do if((y|0)==11){y=0;d=c[i+40>>2]|0;if(d|0)break a;if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){d=Wf(h)|0;y=15;break}else{d=Xf(h)|0;y=15;break}}while(0);if((y|0)==15){y=0;if(d|0)break;d=c[w>>2]|0}i=Zv(e|0,g|0,r|0,t|0)|0;L()|0;h=c[d+4>>2]|0;d=Yv(j|0,k|0,q|0,m|0)|0;d=Tv(e|0,g|0,d|0,L()|0)|0;L()|0;d=h+d|0;ew(d|0,f+i|0,s|0)|0;a[c[(c[w>>2]|0)+8>>2]>>0]=0;if(l&((e|0)==0&(g|0)==0)){d=d+28|0;k=c[(c[(c[u>>2]|0)+4>>2]|0)+44>>2]|0;a[d>>0]=k>>>24;a[d+1>>0]=k>>>16;a[d+2>>0]=k>>>8;a[d+3>>0]=k;d=0}else d=0}while(0);h=c[w>>2]|0;if(h)if(!(b[h+28>>1]&32)){Df(h);break}else{k=c[h+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[h+16>>2]=c[k>>2];c[k>>2]=h;break}}else d=0;while(0);e=Sv(e|0,g|0,q|0,m|0)|0;g=L()|0;if(!(((g|0)<(p|0)|(g|0)==(p|0)&e>>>0<o>>>0)&(d|0)==0))break;d=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0}Ra=z;return d|0}function $b(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=a+20|0;e=c[i>>2]|0;f=(e|0)>0;if(f){g=c[a+16>>2]|0;d=0;do{h=c[g+(d<<4)+4>>2]|0;if(h|0)c[(c[h+4>>2]|0)+4>>2]=c[h>>2];d=d+1|0}while((d|0)!=(e|0));if(f){h=a+16|0;d=a+56|0;g=0;do{f=c[(c[h>>2]|0)+(g<<4)+12>>2]|0;do if(f)if(!(c[d>>2]|0)){dh(f);e=c[i>>2]|0;break}else{f=f+78|0;b[f>>1]=b[f>>1]|8;break}while(0);g=g+1|0}while((g|0)<(e|0))}else j=7}else j=7;if((j|0)==7)d=a+56|0;j=a+24|0;c[j>>2]=c[j>>2]&-18;Ti(a);if(c[d>>2]|0)return;Ui(a);return}function ac(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=Ra;Ra=Ra+16|0;z=C+8|0;r=C;h=c[e+40>>2]|0;if(h|0){e=h;Ra=C;return e|0}h=c[7389]|0;if(h|0?Wa[h&127](400)|0:0){e=10;Ra=C;return e|0}B=e+16|0;if((d[B>>0]|0)<3){e=0;Ra=C;return e|0}do if(a[e+12>>0]|0){if(c[c[e+60>>2]>>2]|0){i=c[e+212>>2]|0;h=c[i+16>>2]|0;if((h|0)<=-1){n=Yv(h|0,((h|0)<0)<<31>>31|0,-1024,-1)|0;p=L()|0;h=(c[i+28>>2]|0)+(c[i+24>>2]|0)|0;h=Wv(n|0,p|0,h|0,((h|0)<0)<<31>>31|0)|0;L()|0}i=c[i>>2]|0;if(!i){i=0;j=0}else{j=0;do{j=j+1|0;i=c[i+32>>2]|0}while((i|0)!=0);i=Yv(j|0,0,100,0)|0;j=L()|0}if(h|0?(p=Wv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0,L()|0,(p|0)>=25):0){A=18;break}}h=c[e+88>>2]|0;if(h|0)do{c[h+16>>2]=1;h=c[h+44>>2]|0}while((h|0)!=0)}else A=18;while(0);do if((A|0)==18){if(!(c[e+216>>2]|0)){k=e+18|0;if((a[k>>0]|0)==0?c[e+24>>2]|0:0){h=Za[c[e+204>>2]&127](e,1,z,0)|0;a:do if(!h){j=c[z>>2]|0;i=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0))h=j;else{h=Ve(j)|0;A=53}else A=49;do if((A|0)==49){h=c[i+40>>2]|0;if(h|0)break a;if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){h=Wf(j)|0;A=53;break}else{h=Xf(j)|0;A=53;break}}while(0);if((A|0)==53){if(h|0)break;h=c[z>>2]|0;i=c[h+20>>2]|0}o=(d[i+105>>0]<<16|d[i+104>>0]<<24|d[i+106>>0]<<8|d[i+107>>0])+1|0;h=h+4|0;p=c[h>>2]|0;l=o>>>24&255;a[p+24>>0]=l;m=o>>>16&255;a[p+25>>0]=m;n=o>>>8&255;a[p+26>>0]=n;o=o&255;a[p+27>>0]=o;p=c[h>>2]|0;a[p+92>>0]=l;a[p+93>>0]=m;a[p+94>>0]=n;a[p+95>>0]=o;h=c[h>>2]|0;a[h+96>>0]=0;a[h+97>>0]=46;a[h+98>>0]=52;a[h+99>>0]=32;a[k>>0]=1;h=0}while(0);i=c[z>>2]|0;do if(i|0)if(!(b[i+28>>1]&32)){Df(i);break}else{p=c[i+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[i+16>>2]=c[p>>2];c[p>>2]=i;break}while(0);if(h|0){e=h;Ra=C;return e|0}}b:do if(((f|0)!=0?(a[e+5>>0]|0)!=4:0)?(s=e+64|0,q=c[s>>2]|0,(c[q>>2]|0)!=0):0){a[e+19>>0]=1;h=a[f>>0]|0;if(!(h<<24>>24)){i=0;j=0}else{j=0;i=0;do{i=i+(h<<24>>24)|0;j=j+1|0;h=a[f+j>>0]|0}while(h<<24>>24!=0)}p=e+72|0;k=p;h=c[k>>2]|0;k=c[k+4>>2]|0;if(!(a[e+8>>0]|0))l=h;else{if((h|0)==0&(k|0)==0){h=0;k=0}else{o=Sv(h|0,k|0,-1,-1)|0;k=L()|0;h=c[e+148>>2]|0;k=Wv(o|0,k|0,h|0,0)|0;k=Sv(k|0,L()|0,1,0)|0;h=Yv(k|0,L()|0,h|0,0)|0;k=L()|0}l=p;c[l>>2]=h;c[l+4>>2]=k;l=h}h=(1073741824/(c[e+152>>2]|0)|0)+1|0;a[z>>0]=h>>>24;m=z+1|0;a[m>>0]=h>>>16;n=z+2|0;a[n>>0]=h>>>8;o=z+3|0;a[o>>0]=h;h=_a[c[(c[q>>2]|0)+12>>2]&127](q,z,4,l,k)|0;do if(!h){h=c[s>>2]|0;k=Sv(l|0,k|0,4,0)|0;l=L()|0;h=_a[c[(c[h>>2]|0)+12>>2]&127](h,f,j,k,l)|0;if(!h){h=c[s>>2]|0;k=Sv(k|0,l|0,j|0,0)|0;l=L()|0;a[z>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;h=_a[c[(c[h>>2]|0)+12>>2]&127](h,z,4,k,l)|0;if(!h){D=c[s>>2]|0;q=Sv(k|0,l|0,4,0)|0;h=L()|0;a[z>>0]=i>>>24;a[m>>0]=i>>>16;a[n>>0]=i>>>8;a[o>>0]=i;h=_a[c[(c[D>>2]|0)+12>>2]&127](D,z,4,q,h)|0;if(!h){q=c[s>>2]|0;D=Sv(k|0,l|0,8,0)|0;h=L()|0;h=_a[c[(c[q>>2]|0)+12>>2]&127](q,32352,8,D,h)|0;if(!h){q=p;q=Sv(c[q>>2]|0,c[q+4>>2]|0,j+20|0,0)|0;D=L()|0;h=p;c[h>>2]=q;c[h+4>>2]=D;h=c[s>>2]|0;h=Xa[c[(c[h>>2]|0)+24>>2]&255](h,r)|0;if(h|0)break;D=r;r=c[D+4>>2]|0;i=p;h=c[i>>2]|0;i=c[i+4>>2]|0;if(!((r|0)>(i|0)|((r|0)==(i|0)?(c[D>>2]|0)>>>0>h>>>0:0))){A=79;break b}D=c[s>>2]|0;h=Ya[c[(c[D>>2]|0)+16>>2]&127](D,h,i)|0;if(!h)break b;Ra=C;return h|0}}}}}while(0);D=h;Ra=C;return D|0}else A=79;while(0);h=Xe(e,0)|0;if(h|0){D=h;Ra=C;return D|0}h=e+212|0;i=Ye(e,Cf(c[h>>2]|0)|0)|0;if(i|0){D=i;Ra=C;return D|0}o=c[h>>2]|0;h=c[o>>2]|0;if(h|0)do{n=c[h+12>>2]|0;i=n+8|0;j=h+36|0;k=c[j>>2]|0;if((c[i>>2]|0)==(h|0))c[i>>2]=k;l=c[h+32>>2]|0;m=(l|0)==0;if(m){c[n+4>>2]=k;i=k}else{c[l+36>>2]=k;i=c[j>>2]|0}if(!i){c[n>>2]=l;if(m)a[n+33>>0]=2}else c[i+32>>2]=l;D=h+28|0;b[D>>1]=b[D>>1]&-16|1;if((b[h+30>>1]|0)==0?a[n+32>>0]|0:0)cb[c[29440>>2]&255](c[n+44>>2]|0,c[h>>2]|0,0);h=c[o>>2]|0}while((h|0)!=0);h=c[e+24>>2]|0;m=e+32|0;c:do if((h>>>0>(c[m>>2]|0)>>>0?(w=c[e+152>>2]|0,x=h-((h|0)==((1073741824/(w|0)|0)+1|0)&1)|0,y=e+60|0,t=c[y>>2]|0,u=c[t>>2]|0,u|0):0)?((a[B>>0]|0)+-1&255)>2:0){h=Xa[c[u+24>>2]&255](t,z)|0;j=((w|0)<0)<<31>>31;k=Yv(x|0,0,w|0,j|0)|0;l=L()|0;do if(!h){i=z;h=c[i>>2]|0;i=c[i+4>>2]|0;if(!((h|0)==(k|0)&(i|0)==(l|0))){do if((i|0)>(l|0)|(i|0)==(l|0)&h>>>0>k>>>0){v=c[y>>2]|0;v=Ya[c[(c[v>>2]|0)+16>>2]&127](v,k,l)|0;A=107}else{D=Sv(h|0,i|0,w|0,j|0)|0;z=L()|0;if((z|0)>(l|0)|(z|0)==(l|0)&D>>>0>k>>>0)break;D=c[e+208>>2]|0;gw(D|0,0,w|0)|0;z=c[y>>2]|0;A=Tv(k|0,l|0,w|0,j|0)|0;v=L()|0;v=_a[c[(c[z>>2]|0)+12>>2]&127](z,D,w,A,v)|0;A=107}while(0);if((A|0)==107?v|0:0){h=v;break}c[m>>2]=x}break c}while(0);D=h;Ra=C;return D|0}while(0);if(g|0)break;j=e+60|0;h=c[j>>2]|0;i=c[h>>2]|0;d:do if(i|0){h=Ya[c[i+40>>2]&127](h,21,f)|0;switch(h|0){case 0:case 12:break d;default:{}}Ra=C;return h|0}while(0);if(a[e+7>>0]|0)break;h=c[j>>2]|0;i=a[e+10>>0]|0;if(!(i<<24>>24))break;h=Xa[c[(c[h>>2]|0)+20>>2]&255](h,i&255)|0}else{c[z>>2]=0;j=e+212|0;h=Cf(c[j>>2]|0)|0;if(!h){h=Za[c[e+204>>2]&127](e,1,z,0)|0;i=c[z>>2]|0;c[i+16>>2]=0;if(i){h=i;A=21}}else A=21;do if((A|0)==21){h=We(e,h,c[e+24>>2]|0,1)|0;i=c[z>>2]|0;if(i)if(!(b[i+28>>1]&32)){Df(i);break}else{D=c[i+20>>2]|0;A=D+120|0;c[A>>2]=(c[A>>2]|0)+-1;D=D+136|0;c[i+16>>2]=c[D>>2];c[D>>2]=i;break}}while(0);if((h|0)==0?(o=c[j>>2]|0,m=c[o>>2]|0,m|0):0)do{n=c[m+12>>2]|0;j=n+8|0;l=m+36|0;i=c[l>>2]|0;if((c[j>>2]|0)==(m|0))c[j>>2]=i;j=c[m+32>>2]|0;k=(j|0)==0;if(k)c[n+4>>2]=i;else{c[j+36>>2]=i;i=c[l>>2]|0}if(!i){c[n>>2]=j;if(k)a[n+33>>0]=2}else c[i+32>>2]=j;D=m+28|0;b[D>>1]=b[D>>1]&-16|1;if((b[m+30>>1]|0)==0?a[n+32>>0]|0:0)cb[c[29440>>2]&255](c[n+44>>2]|0,c[m>>2]|0,0);m=c[o>>2]|0}while((m|0)!=0)}if(h|0){D=h;Ra=C;return D|0}}while(0);if(c[e+216>>2]|0){D=0;Ra=C;return D|0}a[B>>0]=5;D=0;Ra=C;return D|0}function bc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a[b+8>>0]|0;if(!(f<<24>>24)){l=0;return l|0}l=c[b+4>>2]|0;c[l+4>>2]=c[b>>2];if(f<<24>>24==2){i=c[l>>2]|0;j=i+40|0;f=c[j>>2]|0;a:do if(!f){g=i+16|0;if(((a[g>>0]|0)==2?a[i+4>>0]|0:0)?(a[i+5>>0]|0)==1:0){a[g>>0]=1;break}f=i+100|0;c[f>>2]=(c[f>>2]|0)+1;f=uf(i,d[i+19>>0]|0,1)|0;switch((f&255)<<24>>24){case 10:case 13:break;default:{h=f;k=10;break a}}c[j>>2]=f;a[g>>0]=6;c[i+204>>2]=(f|0)==0?74:75;h=f;k=10}else{h=f;k=10}while(0);if((k|0)==10?(e|0)==0&(h|0)!=0:0){l=h;return l|0}e=b+20|0;c[e>>2]=(c[e>>2]|0)+-1;a[l+20>>0]=1;l=l+60|0;yf(c[l>>2]|0);c[l>>2]=0}Zf(b);l=0;return l|0}function cc(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+32|0;o=v+16|0;g=v;if((a[e+8>>0]|0)!=2){u=0;Ra=v;return u|0}u=c[e+4>>2]|0;c[u+4>>2]=c[e>>2];do if(a[u+17>>0]|0){t=c[u>>2]|0;k=c[u+8>>2]|0;l=(k|0)==0;if(!l){e=k;do{r=e+1|0;a[r>>0]=a[r>>0]&-5;e=c[e+24>>2]|0}while((e|0)!=0)}if(!(a[u+18>>0]|0)){r=u+44|0;h=c[r>>2]|0;i=h>>>0<2;if(i)e=0;else{e=h+-2|0;e=e-((e>>>0)%(((((c[u+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;e=((e+1|0)==(1073741824/((c[u+32>>2]|0)>>>0)|0|0)?3:2)+e|0}if((e|0)!=(h|0)?(m=1073741824/((c[u+32>>2]|0)>>>0)|0,n=m+1|0,(h|0)!=(n|0)):0){q=u+12|0;p=c[(c[q>>2]|0)+56>>2]|0;p=d[p+37>>0]<<16|d[p+36>>0]<<24|d[p+38>>0]<<8|d[p+39>>0];g=((c[u+36>>2]|0)>>>0)/5|0;j=g+1|0;if(i)e=0;else{e=h+-2|0;e=e-((e>>>0)%(j>>>0)|0)|0;e=((e+1|0)==(m|0)?3:2)+e|0}i=h-p-(((g-h+p+e|0)>>>0)/(g>>>0)|0)|0;i=i+((n>>>0<h>>>0&i>>>0<n>>>0)<<31>>31)|0;while(1){if(i>>>0<2)e=0;else{e=i+-2|0;e=e-((e>>>0)%(j>>>0)|0)|0;e=((e+1|0)==(m|0)?3:2)+e|0}if((i|0)==(n|0)|(e|0)==(i|0))i=i+-1|0;else break}if(i>>>0>h>>>0){c[o>>2]=32306;c[o+4>>2]=67104;c[o+8>>2]=31517;Db(11,32001,o);u=11;Ra=v;return u|0}if(l|i>>>0>=h>>>0)e=0;else e=$f(k,0,0)|0;g=(e|0)==0;if(h>>>0>i>>>0&g)do{e=_f(u,i,h,1)|0;h=h+-1|0;g=(e|0)==0}while(g&h>>>0>i>>>0);if((p|0)!=0&((e|0)==101|g)){g=c[(c[q>>2]|0)+72>>2]|0;h=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[h+96>>2]|0))e=0;else e=Ve(g)|0;else s=30;do if((s|0)==30){e=c[h+40>>2]|0;if(!e)if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){e=Wf(g)|0;break}else{e=Xf(g)|0;break}}while(0);s=(c[(c[q>>2]|0)+56>>2]|0)+32|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;s=(c[(c[q>>2]|0)+56>>2]|0)+36|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;s=c[(c[q>>2]|0)+56>>2]|0;a[s+28>>0]=i>>>24;a[s+29>>0]=i>>>16;a[s+30>>0]=i>>>8;a[s+31>>0]=i;a[u+19>>0]=1;c[r>>2]=i}if(!e)break;tf(t)|0;u=e;Ra=v;return u|0}c[g>>2]=32306;c[g+4>>2]=67099;c[g+8>>2]=31517;Db(11,32001,g);u=11;Ra=v;return u|0}}while(0);e=c[u>>2]|0;if(a[u+19>>0]|0)c[e+24>>2]=c[u+44>>2];u=ac(e,f,0)|0;Ra=v;return u|0}function dc(a){a=a|0;var b=0,d=0,e=0;if(!a){e=0;return e|0}e=c[a+20>>2]|0;b=c[a+24>>2]|0;d=c[b+4>>2]|0;c[d+4>>2]=c[b>>2];if(c[a>>2]|0){b=b+16|0;c[b>>2]=(c[b>>2]|0)+-1}if(c[a+40>>2]|0){b=(c[d>>2]|0)+88|0;while(1){d=c[b>>2]|0;if((d|0)==(a|0))break;else b=d+44|0}c[b>>2]=c[a+44>>2]}ec(c[a+4>>2]|0,0,0);d=c[a+28>>2]|0;d=(d|0)==101?0:d;b=c[a>>2]|0;do if(b|0){c[b+64>>2]=d;if(!d){if(c[b+260>>2]|0)Ne(b,0)}else Ne(b,d);fc(c[a>>2]|0);if(c[a>>2]|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);fc(e);e=d;return e|0}function ec(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;h=k;j=c[b+4>>2]|0;c[j+4>>2]=c[b>>2];if(!e){f=c[j+8>>2]|0;if(f|0?(g=$f(f,0,0)|0,g|0):0){e=g;f=0;i=4}}else i=4;if((i|0)==4)jg(b,e,f)|0;if((a[b+8>>0]|0)!=2){Zf(b);Ra=k;return}tf(c[j>>2]|0)|0;i=c[j>>2]|0;if(!(Za[c[i+204>>2]&127](i,1,h,0)|0)){f=c[h>>2]|0;g=c[f+8>>2]|0;e=g+4|0;if((c[e>>2]|0)==1)f=c[g+56>>2]|0;else{i=c[f+4>>2]|0;c[g+56>>2]=i;c[g+72>>2]=f;c[g+52>>2]=j;c[e>>2]=1;a[g+9>>0]=100;f=i}f=d[f+29>>0]<<16|d[f+28>>0]<<24|d[f+30>>0]<<8|d[f+31>>0];if(!f)f=c[(c[j>>2]|0)+24>>2]|0;c[j+44>>2]=f;i=c[g+72>>2]|0;f=c[i+20>>2]|0;Df(i);if(!(c[(c[f+212>>2]|0)+12>>2]|0)){switch(a[f+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[f+4>>0]|0))uf(f,0,0)|0;break}default:tf(f)|0}vf(f)}}a[j+20>>0]=1;j=j+60|0;yf(c[j>>2]|0);c[j>>2]=0;Zf(b);Ra=k;return}function fc(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=e+96|0;if((c[t>>2]|0)!=1691352191)return;l=e+4|0;if(c[l>>2]|0)return;p=e+20|0;h=c[p>>2]|0;a:do if((h|0)>0){g=c[e+16>>2]|0;f=0;while(1){r=c[g+(f<<4)+4>>2]|0;if(r|0?c[r+16>>2]|0:0)break;f=f+1|0;if((f|0)>=(h|0))break a}return}while(0);rg(e,0);g=e+444|0;f=c[g>>2]|0;if(f|0){h=e+480|0;i=e+304|0;j=e+308|0;k=e+300|0;do{c[g>>2]=c[f+24>>2];do if(!(c[h>>2]|0)){r=f;if((c[i>>2]|0)>>>0<=r>>>0?(c[j>>2]|0)>>>0>r>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{r=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}else Xd(e,f);while(0);f=c[g>>2]|0}while((f|0)!=0)}c[e+452>>2]=0;c[e+456>>2]=0;a[e+87>>0]=0;r=e+16|0;f=c[r>>2]|0;if((c[p>>2]|0)>0){i=0;do{g=f+(i<<4)+4|0;h=c[g>>2]|0;if(h|0?(ug(h),c[g>>2]=0,(i|0)!=1):0)c[f+(i<<4)+12>>2]=0;i=i+1|0;f=c[r>>2]|0}while((i|0)<(c[p>>2]|0))}f=c[f+28>>2]|0;if(f|0)dh(f);m=e+360|0;g=c[m>>2]|0;c[m>>2]=0;if(g|0){f=c[l>>2]|0;if(f|0)do{m=f+149|0;l=(d[m>>0]|d[m+1>>0]<<8)&-4|1;a[m>>0]=l;a[m+1>>0]=l>>8;f=c[f+8>>2]|0}while((f|0)!=0);f=g;do{g=f;f=c[f+24>>2]|0;h=c[g>>2]|0;l=g+12|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;do if(!m){i=c[g+8>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}m=g;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[g>>2]=c[m>>2];c[m>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}while((f|0)!=0)}if((c[p>>2]|0)>2){j=e+480|0;k=e+304|0;l=e+308|0;m=e+300|0;i=2;f=2;do{g=c[r>>2]|0;h=g+(i<<4)|0;if(!(c[g+(i<<4)+4>>2]|0)){g=c[h>>2]|0;do if(g|0){if(c[j>>2]|0){Xd(e,g);break}u=g;if((c[k>>2]|0)>>>0<=u>>>0?(c[l>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[h>>2]=0}else{if((f|0)<(i|0)){u=g+(f<<4)|0;c[u>>2]=c[h>>2];c[u+4>>2]=c[h+4>>2];c[u+8>>2]=c[h+8>>2];c[u+12>>2]=c[h+12>>2]}f=f+1|0}i=i+1|0}while((i|0)<(c[p>>2]|0));c[p>>2]=f;if((f|0)<3)q=64}else{c[p>>2]=2;q=64}if((q|0)==64?(n=c[r>>2]|0,o=e+412|0,(n|0)!=(o|0)):0){c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];c[o+20>>2]=c[n+20>>2];c[o+24>>2]=c[n+24>>2];c[o+28>>2]=c[n+28>>2];do if(n|0){if(c[e+480>>2]|0){Xd(e,n);break}u=n;if((c[e+304>>2]|0)>>>0<=u>>>0?(c[e+308>>2]|0)>>>0>u>>>0:0){u=e+300|0;c[n>>2]=c[u>>2];c[u>>2]=n;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{u=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[r>>2]=o}m=e+372|0;f=c[m>>2]|0;if(!f)f=0;else{i=e+480|0;j=e+304|0;k=e+308|0;l=e+300|0;do{h=c[f+8>>2]|0;do{g=c[h+36>>2]|0;do if(g|0?(u=(c[g>>2]|0)+-1|0,c[g>>2]=u,(u|0)==0):0){ab[c[g+4>>2]&127](c[g+8>>2]|0);if(c[i>>2]|0){Xd(e,g);break}u=g;if((c[j>>2]|0)>>>0<=u>>>0?(c[k>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[l>>2];c[l>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=h;h=c[h+12>>2]|0;do if(g|0){if(c[i>>2]|0){Xd(e,g);break}u=g;if((c[j>>2]|0)>>>0<=u>>>0?(c[k>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[l>>2];c[l>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}while((h|0)!=0);f=c[f>>2]|0}while((f|0)!=0);f=c[m>>2]|0}c[m>>2]=0;g=e+376|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+364>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+368>>2]=0;m=e+388|0;f=c[m>>2]|0;if(!f)f=0;else{i=e+480|0;j=e+304|0;k=e+308|0;l=e+300|0;do{h=c[f+8>>2]|0;g=c[h+16>>2]|0;if(g|0)ab[g&127](c[h+8>>2]|0);g=c[h+36>>2]|0;if(g|0)ab[g&127](c[h+28>>2]|0);g=c[h+56>>2]|0;if(g|0)ab[g&127](c[h+48>>2]|0);b:do if(!(c[i>>2]|0)){g=h;do if((c[j>>2]|0)>>>0<=g>>>0){if((c[k>>2]|0)>>>0<=g>>>0)break;c[h>>2]=c[l>>2];c[l>>2]=h;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(e,h);while(0);f=c[f>>2]|0}while((f|0)!=0);f=c[m>>2]|0}c[m>>2]=0;g=e+392|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+380>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+384>>2]=0;n=e+344|0;f=c[n>>2]|0;if(!f)f=0;else{j=e+480|0;k=e+304|0;l=e+308|0;m=e+300|0;do{i=c[f+8>>2]|0;g=c[i+12>>2]|0;if(g|0)ab[g&127](c[i+8>>2]|0);g=i+16|0;h=c[g>>2]|0;if(h|0){u=h+36|0;c[u>>2]=c[u>>2]|2;do if(!(c[j>>2]|0)){q=h+32|0;u=(c[q>>2]|0)+-1|0;c[q>>2]=u;if(u|0)break;Vi(e,h)}else Vi(e,h);while(0);c[g>>2]=0}c:do if(!(c[j>>2]|0)){g=i;do if((c[k>>2]|0)>>>0<=g>>>0){if((c[l>>2]|0)>>>0<=g>>>0)break;c[i>>2]=c[m>>2];c[m>>2]=i;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{u=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(e,i);while(0);f=c[f>>2]|0}while((f|0)!=0);f=c[n>>2]|0}c[n>>2]=0;g=e+348|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+336>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+340>>2]=0;c[e+64>>2]=0;f=e+260|0;d:do if(c[f>>2]|0?(Ne(e,0),s=c[f>>2]|0,s|0):0){if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);f=c[s+32>>2]|0;do if(f|0){if(c[f+480>>2]|0){Xd(f,s);break d}g=s;if((c[f+304>>2]|0)>>>0>g>>>0)break;if((c[f+308>>2]|0)>>>0<=g>>>0)break;u=f+300|0;c[s>>2]=c[u>>2];c[u>>2]=s;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{u=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);c[t>>2]=-1254786768;f=c[(c[r>>2]|0)+28>>2]|0;e:do if(f|0){if(c[e+480>>2]|0){Xd(e,f);break}g=f;do if((c[e+304>>2]|0)>>>0<=g>>>0){if((c[e+308>>2]|0)>>>0<=g>>>0)break;u=e+300|0;c[f>>2]=c[u>>2];c[u>>2]=f;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{u=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[t>>2]=-1623446221;do if(a[e+278>>0]|0){f=c[e+304>>2]|0;if(!f)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{u=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{u=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function gc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+32|0;d=l+8|0;if(!b){k=0;Ra=l;return k|0}k=c[b>>2]|0;if(!k){Db(21,32391,l);c[d>>2]=58063;c[d+4>>2]=81403;c[d+8>>2]=31517;Db(21,32001,d);k=21;Ra=l;return k|0}i=b+136|0;h=c[i+4>>2]|0;if((h|0)>0|(h|0)==0&(c[i>>2]|0)>>>0>0)hc(k,b);i=b+20|0;d=c[i>>2]|0;if((d|0)<832317811)switch(d|0){case 770837923:{j=6;break}default:f=0}else switch(d|0){case 832317811:{j=6;break}default:f=0}if((j|0)==6)f=kc(b)|0;g=c[b>>2]|0;kb(g,b);h=c[b+4>>2]|0;e=b+8|0;d=c[e>>2]|0;if(!h)c[g+4>>2]=d;else{c[h+8>>2]=d;d=c[e>>2]|0}if(d|0)c[d+4>>2]=h;c[i>>2]=1443283912;c[b>>2]=0;do if(g){if(c[g+480>>2]|0){Xd(g,b);break}i=b;if((c[g+304>>2]|0)>>>0<=i>>>0?(c[g+308>>2]|0)>>>0>i>>>0:0){i=g+300|0;c[b>>2]=c[i>>2];c[i>>2]=b}else j=18}else j=18;while(0);do if((j|0)==18)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if((f|0)==3082|(a[k+81>>0]|0)!=0){og(k);d=7}else d=c[k+68>>2]&f;fc(k);k=d;Ra=l;return k|0}function hc(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;k=Ra;Ra=Ra+32|0;e=k+16|0;f=k+8|0;j=k;h=c[b>>2]|0;if((c[h>>2]|0)>1?(i=c[h+72>>2]|0,(i|0)!=0):0){Xa[i&255](h,f)|0;e=c[f>>2]|0;f=c[f+4>>2]|0}else{Xa[c[h+64>>2]&255](h,e)|0;l=+g[e>>3]*864.0e5;e=~~l>>>0;i=+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0;c[f>>2]=e;c[f+4>>2]=i;f=i}i=d+136|0;h=i;e=Tv(e|0,f|0,c[h>>2]|0,c[h+4>>2]|0)|0;e=Yv(e|0,L()|0,1e6,0)|0;f=L()|0;h=j;c[h>>2]=e;c[h+4>>2]=f;h=c[b+204>>2]|0;if(h|0)db[h&127](c[b+208>>2]|0,c[d+188>>2]|0,e,f);if(!(a[b+88>>0]&2)){j=i;d=j;c[d>>2]=0;j=j+4|0;c[j>>2]=0;Ra=k;return}Za[c[b+196>>2]&127](2,c[b+200>>2]|0,d,j)|0;j=i;d=j;c[d>>2]=0;j=j+4|0;c[j>>2]=0;Ra=k;return}function ic(b,d){b=b|0;d=d|0;if((d|0)==3082|(a[b+81>>0]|0)!=0){og(b);d=7;return d|0}else{d=c[b+68>>2]&d;return d|0}return 0}function jc(b){b=b|0;var d=0,e=0,f=0;if(!b){e=0;return e|0}e=c[b>>2]|0;d=b+136|0;f=c[d+4>>2]|0;if((f|0)>0|(f|0)==0&(c[d>>2]|0)>>>0>0)hc(e,b);d=kc(b)|0;c[b+20>>2]=770837923;c[b+36>>2]=-1;c[b+40>>2]=0;a[b+146>>0]=2;c[b+44>>2]=0;c[b+32>>2]=1;a[b+147>>0]=-1;c[b+48>>2]=0;f=b+64|0;c[f>>2]=0;c[f+4>>2]=0;if((d|0)==3082|(a[e+81>>0]|0)!=0){og(e);f=7;return f|0}else{f=c[e+68>>2]&d;return f|0}return 0}function kc(b){b=b|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+16|0;f=h;g=c[b>>2]|0;pg(b)|0;if((c[b+36>>2]|0)>-1){qg(b)|0;e=b+149|0;f=d[e>>0]|d[e+1>>0]<<8;if(f&64){f=f&-4|1;a[e>>0]=f;a[e+1>>0]=f>>8}}else{e=c[b+40>>2]|0;if(e|0?(i=b+149|0,(d[i>>0]|d[i+1>>0]<<8)&3):0){i=c[b+124>>2]|0;c[f>>2]=i;Vb(g,e,(i|0)==0?0:31408,f)}}e=b+124|0;f=c[e>>2]|0;do if(f|0){if(g|0){if(c[g+480>>2]|0){Xd(g,f);break}i=f;if((c[g+304>>2]|0)>>>0<=i>>>0?(c[g+308>>2]|0)>>>0>i>>>0:0){i=g+300|0;c[f>>2]=c[i>>2];c[i>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[e>>2]=0;c[b+120>>2]=0;c[b+20>>2]=1224384374;Ra=h;return c[g+68>>2]&c[b+40>>2]|0}function lc(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+16|0;f=b[k>>1]|0;if(f<<16>>16>0){l=e+100|0;j=0;g=c[l>>2]|0;do{h=g+(j*40|0)|0;i=g+(j*40|0)+8|0;if(!((b[i>>1]&9216)==0?(c[g+(j*40|0)+24>>2]|0)==0:0)){Cg(h);g=c[l>>2]|0;i=g+(j*40|0)+8|0;f=b[k>>1]|0}b[i>>1]=1;j=j+1|0}while((j|0)<(f<<16>>16|0))}if(!(c[e+208>>2]|0))return 0;l=e+149|0;k=(d[l>>0]|d[l+1>>0]<<8)&-4|1;a[l>>0]=k;a[l+1>>0]=k>>8;return 0}function mc(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=d+8|0;f=b[i>>1]|0;e=f&65535;if(!(e&18)){if((f&514)==514?(a[d+10>>0]|0)==1:0){i=c[d+16>>2]|0;return i|0}if(f&1){i=0;return i|0}i=Gg(d,1)|0;return i|0}g=d+12|0;h=c[g>>2]|0;do if(e&16384){e=(c[d>>2]|0)+h|0;if((e|0)<1)if(!(f&16)){e=h;break}else e=1;if(!(Eg(d,e,1)|0)){gw((c[d+16>>2]|0)+(c[g>>2]|0)|0,0,c[d>>2]|0)|0;e=(c[g>>2]|0)+(c[d>>2]|0)|0;c[g>>2]=e;f=b[i>>1]&-16897;b[i>>1]=f;break}else{i=0;return i|0}}else e=h;while(0);b[i>>1]=f|16;if(!e){i=0;return i|0}i=c[d+16>>2]|0;return i|0}function nc(d){d=d|0;var e=0;if(!d){e=0;return e|0}e=b[d+8>>1]|0;if((e&514)==514?(a[d+10>>0]|0)==1:0){e=c[d+16>>2]|0;return e|0}if(e&1){e=0;return e|0}e=Gg(d,1)|0;return e|0}function oc(d){d=d|0;var e=0,f=0;e=b[d+8>>1]|0;if(e&2?(a[d+10>>0]|0)==1:0){d=c[d+12>>2]|0;return d|0}e=e&65535;if(!(e&16)){if(e&1|0){d=0;return d|0}d=Fg(d,1)|0;return d|0}else{f=c[d+12>>2]|0;if(!(e&16384)){d=f;return d|0}d=(c[d>>2]|0)+f|0;return d|0}return 0}function pc(b){b=b|0;var d=0,f=0.0;d=e[b+8>>1]|0;if(d&8|0){f=+g[b>>3];return +f}if(d&4|0){d=b;f=+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0);return +f}if(!(d&18)){f=0.0;return +f}f=+Kg(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0);return +f}function qc(b){b=b|0;var d=0;d=e[b+8>>1]|0;if(d&4|0){d=c[b>>2]|0;return d|0}if(d&8|0){d=Mg(+g[b>>3])|0;L()|0;return d|0}if(!(d&18)){d=0;return d|0}d=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;L()|0;return d|0}function rc(b){b=b|0;var d=0;d=e[b+8>>1]|0;if(d&4|0){d=b;b=c[d+4>>2]|0;d=c[d>>2]|0;K(b|0);return d|0}if(d&8|0){d=Mg(+g[b>>3])|0;b=L()|0;K(b|0);return d|0}if(!(d&18)){b=0;d=0;K(b|0);return d|0}d=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;b=L()|0;K(b|0);return d|0}function sc(a){a=a|0;return d[816+(b[a+8>>1]&31)>>0]|0|0}function tc(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!a){i=0;return i|0}if(mb()|0){i=0;return i|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](40)|0;if(!d){i=0;return i|0}else e=d}else{f=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){h=c[14978]|0;g=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&g>>>0<=h>>>0)&1}e=Wa[c[29340>>2]&127](f)|0;if(!e){i=0;return i|0}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}h=e+20|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];c[e+16>>2]=c[a+16>>2];h=e+8|0;d=b[h>>1]&-1025;b[h>>1]=d;g=e+32|0;c[g>>2]=0;d=d&65535;if(!(d&18)){i=e;return i|0}f=(d&58367|4096)&65535;b[h>>1]=f;do if(d&16384){a=e+12|0;d=(c[e>>2]|0)+(c[a>>2]|0)|0;if((d|0)<1)if(!(f&16)){i=21;break}else d=1;if(!(Eg(e,d,1)|0)){gw((c[e+16>>2]|0)+(c[a>>2]|0)|0,0,c[e>>2]|0)|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);d=b[h>>1]&-16897;b[h>>1]=d;if((c[e+24>>2]|0)!=0?(c[e+16>>2]|0)==(c[e+20>>2]|0):0)i=23;else i=21}}else i=21;while(0);if((i|0)==21?(Jg(e)|0)==0:0){d=b[h>>1]|0;i=23}if((i|0)==23){b[h>>1]=d&-4097;i=e;return i|0}if(!((b[h>>1]&9216)==0?!(c[e+24>>2]|0):0))Cg(e);d=c[g>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);i=0;return i|0}i=e;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[e>>2]=c[i>>2];c[i>>2]=e;i=0;return i|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);i=0;return i|0}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);i=0;return i|0}return 0}function uc(a){a=a|0;var d=0,e=0;if(!a)return;if(!((b[a+8>>1]&9216)==0?!(c[a+24>>2]|0):0))Cg(a);d=c[a+32>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,a);return}e=a;if((c[d+304>>2]|0)>>>0<=e>>>0?(c[d+308>>2]|0)>>>0>e>>>0:0){e=d+300|0;c[a>>2]=c[e>>2];c[e>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function vc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((yc(c[a>>2]|0,b,d,0,e)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function wc(a,d){a=a|0;d=+d;var e=0,f=0,h=0,i=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;a=c[a>>2]|0;e=a+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(a);g[f>>3]=d;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[a>>3]=d;b[e>>1]=8;Ra=i;return}function xc(a,b,d){a=a|0;b=b|0;d=d|0;c[a+20>>2]=1;yc(c[a>>2]|0,b,d,1,-1)|0;return}function yc(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!f){g=d+8|0;if(!(b[g>>1]&9216)){b[g>>1]=1;s=0;return s|0}else{Dg(d);s=0;return s|0}}k=d+32|0;l=c[k>>2]|0;m=(l|0)==0;if(m)s=1e9;else s=c[l+108>>2]|0;p=h<<24>>24==0;j=p?16:2;if((g|0)<0){a:do if(h<<24>>24!=1)if((s|0)<0)g=0;else{g=0;do{if(!((a[f+(g|1)>>0]|a[f+g>>0])<<24>>24))break a;g=g+2|0}while((g|0)<=(s|0))}else g=(Eu(f)|0)&2147483647;while(0);o=j|512;q=g}else{o=j;q=g}do if((i|0)==(-1|0)){k=((o&512)==0?0:h<<24>>24==1?1:2)+q|0;if((q|0)>(s|0)){if(m){s=18;return s|0}g=c[l+236>>2]|0;if(!g){s=18;return s|0}c[g+12>>2]=18;s=g+36|0;c[s>>2]=(c[s>>2]|0)+1;s=18;return s|0}else{g=k>>>0>32?k:32;do if((c[d+24>>2]|0)<(g|0))if(!(Eg(d,g,0)|0)){j=d+8|0;g=c[d+16>>2]|0;break}else{s=7;return s|0}else{g=c[d+20>>2]|0;c[d+16>>2]=g;j=d+8|0;b[j>>1]=b[j>>1]&13}while(0);ew(g|0,f|0,k|0)|0;i=o;break}}else{j=d+8|0;if(!((b[j>>1]&9216)==0?!(c[d+24>>2]|0):0))Cg(d);c[d+16>>2]=f;if((i|0)!=116){c[d+36>>2]=i;i=(((i|0)==0?2048:1024)|o&65535)&65535;break}c[d+20>>2]=f;g=c[k>>2]|0;if(((g|0)!=0?(n=f,(c[g+304>>2]|0)>>>0<=n>>>0):0)?(c[g+308>>2]|0)>>>0>n>>>0:0)g=e[g+276>>1]|0;else g=Wa[c[29352>>2]&127](f)|0;c[d+24>>2]=g;i=o}while(0);f=d+12|0;c[f>>2]=q;b[j>>1]=i;h=p?1:h;n=d+10|0;a[n>>0]=h;do if(h<<24>>24!=1&(q|0)>1){o=d+16|0;g=c[o>>2]|0;l=a[g>>0]|0;k=a[g+1>>0]|0;if(!(l<<24>>24==-1&k<<24>>24==-2))if(l<<24>>24==-2&k<<24>>24==-1)m=3;else break;else m=2;k=i&65535;do if(k&18){do if(k&16384){g=(c[d>>2]|0)+q|0;if((g|0)<1)if(!(i&16)){k=q;g=i;break}else g=1;if(!(Eg(d,g,1)|0)){gw((c[o>>2]|0)+(c[f>>2]|0)|0,0,c[d>>2]|0)|0;k=(c[f>>2]|0)+(c[d>>2]|0)|0;c[f>>2]=k;g=b[j>>1]&-16897;b[j>>1]=g;break}else{s=7;return s|0}}else{k=q;g=i}while(0);if(c[d+24>>2]|0?(r=c[o>>2]|0,(r|0)==(c[d+20>>2]|0)):0){l=g;g=r;break}if(!(Jg(d)|0)){l=b[j>>1]|0;k=c[f>>2]|0;g=c[o>>2]|0;break}else{s=7;return s|0}}else{l=i;k=q}while(0);b[j>>1]=l&-4097;r=k+-2|0;c[f>>2]=r;fw(g|0,g+2|0,r|0)|0;a[(c[o>>2]|0)+(c[f>>2]|0)>>0]=0;a[(c[o>>2]|0)+((c[f>>2]|0)+1)>>0]=0;b[j>>1]=b[j>>1]|512;a[n>>0]=m}while(0);s=(q|0)>(s|0)?18:0;return s|0}function zc(a,d){a=a|0;d=d|0;var e=0,f=0;a=c[a>>2]|0;e=((d|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}else{Pg(a,d,e);return}}function Ac(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;a=c[a>>2]|0;f=a+8|0;if(!(b[f>>1]&9216)){c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}else{Pg(a,d,e);return}}function Bc(a){a=a|0;var d=0;a=c[a>>2]|0;d=a+8|0;if(!(b[d>>1]&9216)){b[d>>1]=1;return}else{Dg(a);return}}function Cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((yc(c[a>>2]|0,b,d,1,e)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function Dc(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;f=c[a>>2]|0;g=f+8|0;if(b[g>>1]&9216)Dg(f);c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];e=b[g>>1]&-1025;b[g>>1]=e;e=e&65535;if(!(e&18))return;if(b[d+8>>1]&2048)return;a=(e|4096)&65535;b[g>>1]=a;do if(e&16384){e=f+12|0;d=(c[f>>2]|0)+(c[e>>2]|0)|0;if((d|0)<1)if(!(a&16))break;else a=1;else a=d;if(!(Eg(f,a,1)|0)){gw((c[f+16>>2]|0)+(c[e>>2]|0)|0,0,c[f>>2]|0)|0;c[e>>2]=(c[e>>2]|0)+(c[f>>2]|0);a=b[g>>1]&-16897;b[g>>1]=a;break}else return}while(0);if(!((c[f+24>>2]|0)!=0?(c[f+16>>2]|0)==(c[f+20>>2]|0):0))h=12;do if((h|0)==12)if(!(Jg(f)|0)){a=b[g>>1]|0;break}else return;while(0);b[g>>1]=a&-4097;return}function Ec(d){d=d|0;var e=0,f=0;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;f=c[e+32>>2]|0;e=f+81|0;if(a[e>>0]|0)return;if(a[f+82>>0]|0)return;a[e>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[f+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Fc(b){b=b|0;var d=0;d=b+81|0;if(a[d>>0]|0)return;if(a[b+82>>0]|0)return;a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;b=c[b+236>>2]|0;if(!b)return;c[b+12>>2]=7;return}function Gc(f){f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0.0;Ga=Ra;Ra=Ra+384|0;Aa=Ga+368|0;za=Ga+360|0;ya=Ga+352|0;xa=Ga+344|0;wa=Ga+336|0;va=Ga+328|0;ua=Ga+320|0;ta=Ga+312|0;sa=Ga+304|0;ra=Ga+296|0;qa=Ga+288|0;pa=Ga+280|0;oa=Ga+272|0;Ca=Ga+264|0;Ba=Ga+256|0;i=Ga+240|0;h=Ga+232|0;fa=Ga;ia=Ga+372|0;do if(!f)Db(21,32555,Ga+224|0);else{Fa=c[f>>2]|0;if(!Fa){Db(21,32391,h);break}ba=f+149|0;ca=(d[ba>>0]|d[ba+1>>0]<<8)&-17;a[ba>>0]=ca;a[ba+1>>0]=ca>>8;ca=f+20|0;da=f+136|0;C=f+36|0;Ea=f+40|0;D=f+146|0;E=f+44|0;G=f+32|0;I=f+147|0;J=f+48|0;K=f+64|0;L=f+148|0;M=f+88|0;N=f+188|0;O=f+120|0;P=f+8|0;Q=f+4|0;R=f+208|0;S=f+160|0;T=f+180|0;U=f+108|0;V=f+100|0;W=f+104|0;X=fa+4|0;Y=fa+8|0;Z=fa+12|0;_=fa+16|0;$=fa+21|0;aa=f+144|0;B=0;a:while(1){if((c[ca>>2]|0)!=770837923){h=c[f>>2]|0;Da=da;A=c[Da+4>>2]|0;if((A|0)>0|(A|0)==0&(c[Da>>2]|0)>>>0>0)hc(h,f);Da=kc(f)|0;c[ca>>2]=770837923;c[C>>2]=-1;c[Ea>>2]=0;a[D>>0]=2;c[E>>2]=0;c[G>>2]=1;a[I>>0]=-1;c[J>>2]=0;A=K;c[A>>2]=0;c[A+4>>2]=0;if((Da|0)==3082|(a[h+81>>0]|0)!=0)og(h)}A=c[f>>2]|0;if(a[A+81>>0]|0){Da=13;break}do if((c[C>>2]|0)<0){if((d[ba>>0]|d[ba+1>>0]<<8)&3){c[Ea>>2]=17;h=1;Da=246;break}h=A+168|0;if(!(c[h>>2]|0))c[A+264>>2]=0;do if(((a[A+88>>0]&-126)<<24>>24?(a[A+165>>0]|0)==0:0)?c[N>>2]|0:0){i=c[A>>2]|0;if((c[i>>2]|0)>1?(na=c[i+72>>2]|0,na|0):0){Xa[na&255](i,da)|0;break}Xa[c[i+64>>2]&255](i,fa)|0;Ha=+g[fa>>3]*864.0e5;z=+t(Ha)>=1.0?(Ha>0.0?~~+H(+s(Ha/4294967296.0),4294967295.0)>>>0:~~+F((Ha-+(~~Ha>>>0))/4294967296.0)>>>0):0;Da=da;c[Da>>2]=~~Ha>>>0;c[Da+4>>2]=z}while(0);c[h>>2]=(c[h>>2]|0)+1;h=d[ba>>0]|d[ba+1>>0]<<8;if(!(h&256)){h=A+176|0;c[h>>2]=(c[h>>2]|0)+1;h=d[ba>>0]|d[ba+1>>0]<<8}if(h&512){Da=A+172|0;c[Da>>2]=(c[Da>>2]|0)+1}c[C>>2]=0;Da=31}else Da=31;while(0);if((Da|0)==31){Da=0;h=(d[ba>>0]|d[ba+1>>0]<<8)&12;b:do if(!(h<<16>>16)){z=A+180|0;c[z>>2]=(c[z>>2]|0)+1;h=Rg(f)|0;c[z>>2]=(c[z>>2]|0)+-1;if((h|0)==100)h=100;else Da=226}else{z=c[f>>2]|0;y=c[M>>2]|0;x=y+40|0;if(h<<16>>16==4)r=1;else r=0?1:(c[z+32>>2]&16777216|0)!=0;m=c[y+72>>2]|0;n=m+480|0;h=(m|0)==0;o=m+304|0;p=m+308|0;q=m+300|0;c:do if(c[n>>2]|0){if(!h){h=1;while(1){d:do if(c[y+(h*40|0)+24>>2]|0?(ha=c[y+(h*40|0)+20>>2]|0,ha|0):0){if(c[n>>2]|0){Xd(m,ha);break}i=ha;do if((c[o>>2]|0)>>>0<=i>>>0){if((c[p>>2]|0)>>>0<=i>>>0)break;c[ha>>2]=c[q>>2];c[q>>2]=ha;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](ha);break}else{w=Wa[c[29352>>2]&127](ha)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ha);break}}while(0);h=h+1|0;if((h|0)==9)break c}}do if(c[y+64>>2]|0?(ga=c[y+60>>2]|0,ga|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ga);break}else{w=Wa[c[29352>>2]&127](ga)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ga);break}while(0);do if(c[y+104>>2]|0?(ja=c[y+100>>2]|0,ja|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ja);break}else{w=Wa[c[29352>>2]&127](ja)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ja);break}while(0);do if(c[y+144>>2]|0?(ka=c[y+140>>2]|0,ka|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ka);break}else{w=Wa[c[29352>>2]&127](ka)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ka);break}while(0);do if(c[y+184>>2]|0?(la=c[y+180>>2]|0,la|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](la);break}else{w=Wa[c[29352>>2]&127](la)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](la);break}while(0);do if(c[y+224>>2]|0){h=c[y+220>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(c[y+264>>2]|0){h=c[y+260>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(c[y+304>>2]|0){h=c[y+300>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);if(!(c[y+344>>2]|0))break;h=c[y+340>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else{if(h){h=1;while(1){i=y+(h*40|0)+8|0;if(!(b[i>>1]&9216)){j=y+(h*40|0)+24|0;if(c[j>>2]|0){k=c[y+(h*40|0)+20>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[j>>2]=0}}else Cg(y+(h*40|0)|0);b[i>>1]=128;h=h+1|0;if((h|0)==9)break c}}h=1;do{i=y+(h*40|0)+8|0;if(!(b[i>>1]&9216)){j=y+(h*40|0)+24|0;if(c[j>>2]|0){k=c[y+(h*40|0)+20>>2]|0;e:do if(!(c[n>>2]|0)){l=k;do if((c[o>>2]|0)>>>0<=l>>>0){if((c[p>>2]|0)>>>0<=l>>>0)break;c[k>>2]=c[q>>2];c[q>>2]=k;break e}while(0);if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(m,k);while(0);c[j>>2]=0}}else Cg(y+(h*40|0)|0);b[i>>1]=128;h=h+1|0}while((h|0)!=9)}while(0);c[O>>2]=0;if((c[Ea>>2]|0)==7){h=z+81|0;if(a[h>>0]|0){h=1;Da=226;break}if(a[z+82>>0]|0){h=1;Da=226;break}a[h>>0]=1;if((c[z+180>>2]|0)>0)c[z+264>>2]=1;h=z+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[z+236>>2]|0;if(!h){h=1;Da=226;break}c[h+12>>2]=7;h=1;Da=226;break}o=c[U>>2]|0;if(r){h=c[M>>2]|0;j=h+360|0;if(b[h+368>>1]&16){k=(c[h+372>>2]|0)>>>2;l=c[h+376>>2]|0;if(!k){q=o;k=0}else{h=o;i=0;do{h=(c[(c[l+(i<<2)>>2]|0)+4>>2]|0)+h|0;i=i+1|0}while((i|0)!=(k|0));q=h}}else{q=o;k=0;l=0}}else{j=0;q=o;k=0;l=0}i=c[C>>2]|0;h=i+1|0;c[C>>2]=h;f:do if((i|0)<(q|0)){u=j+16|0;v=j+8|0;w=j+12|0;g:do if(r){h=o;while(1){if((i|0)<(h|0))p=(c[W>>2]|0)+(i*20|0)|0;else{i=i-h|0;h=c[l>>2]|0;m=c[h+4>>2]|0;if((i|0)>=(m|0)){n=0;do{i=i-m|0;n=n+1|0;h=c[l+(n<<2)>>2]|0;m=c[h+4>>2]|0}while((i|0)>=(m|0))}p=(c[h>>2]|0)+(i*20|0)|0}do if((a[p+1>>0]|0)==-4){o=k+1|0;n=o<<2;h:do if((k|0)>0){m=c[p+16>>2]|0;h=0;do{if((c[l+(h<<2)>>2]|0)==(m|0))break h;h=h+1|0}while((h|0)<(k|0))}else h=0;while(0);if((h|0)!=(k|0)){n=q;break}r=Eg(j,n,(k|0)!=0&1)|0;c[Ea>>2]=r;if(r|0){h=1;Da=226;break b}l=c[u>>2]|0;r=p+16|0;c[l+(k<<2)>>2]=c[r>>2];b[v>>1]=b[v>>1]|16;c[w>>2]=n;n=(c[(c[r>>2]|0)+4>>2]|0)+q|0;k=o}else n=q;while(0);h=d[ba>>0]|d[ba+1>>0]<<8;if(!(h&8))break g;switch(a[p>>0]|0){case -85:break g;case 61:{m=c[C>>2]|0;if((m|0)>1)break g;else i=m;break}default:i=c[C>>2]|0}c[C>>2]=i+1;if((i|0)>=(n|0))break f;q=n;h=c[U>>2]|0}}else{n=d[ba>>0]|d[ba+1>>0]<<8;if(!(n&8)){if((i|0)<(o|0)){p=(c[W>>2]|0)+(i*20|0)|0;h=n;break}i=i-o|0;h=c[l>>2]|0;j=c[h+4>>2]|0;if((i|0)>=(j|0)){k=0;do{i=i-j|0;k=k+1|0;h=c[l+(k<<2)>>2]|0;j=c[h+4>>2]|0}while((i|0)>=(j|0))}p=(c[h>>2]|0)+(i*20|0)|0;h=n;break}m=h;while(1){if((i|0)<(o|0))h=(c[W>>2]|0)+(i*20|0)|0;else{i=i-o|0;h=c[l>>2]|0;j=c[h+4>>2]|0;if((i|0)>=(j|0)){k=0;do{i=i-j|0;k=k+1|0;h=c[l+(k<<2)>>2]|0;j=c[h+4>>2]|0}while((i|0)>=(j|0))}h=(c[h>>2]|0)+(i*20|0)|0}switch(a[h>>0]|0){case -85:{p=h;h=n;break g}case 61:{if((m|0)>1){p=h;h=n;break g}break}default:{}}h=m+1|0;c[C>>2]=h;if((m|0)<(q|0)){i=m;m=h}else break f}}while(0);if(c[z+264>>2]|0){c[Ea>>2]=9;Ag(f,50367,Ba);h=1;Da=226;break b}if((h&12)==4){b[y+48>>1]=4;q=x;c[q>>2]=i;c[q+4>>2]=((i|0)<0)<<31>>31;b[y+88>>1]=2562;q=c[2800+(d[p>>0]<<2)>>2]|0;c[y+96>>2]=q;q=(Eu(q)|0)&1073741823;c[y+92>>2]=q;a[y+90>>0]=1;q=y+120|0}else q=x;b[q+8>>1]=4;i=c[p+4>>2]|0;o=q;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;b[q+48>>1]=4;o=c[p+8>>2]|0;i=q+40|0;c[i>>2]=o;c[i+4>>2]=((o|0)<0)<<31>>31;b[q+88>>1]=4;i=c[p+12>>2]|0;o=q+80|0;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;o=q+120|0;i=q+144|0;j=c[i>>2]|0;if((j|0)<100){if(Eg(o,100,0)|0){h=1;Da=226;break b}h=q+136|0;k=q+128|0;n=h;h=c[h>>2]|0;j=c[i>>2]|0}else{h=c[q+140>>2]|0;n=q+136|0;c[n>>2]=h;k=q+128|0;b[k>>1]=b[k>>1]&13}b[k>>1]=514;c[X>>2]=h;c[fa>>2]=0;c[Y>>2]=j;c[Z>>2]=0;c[Z+4>>2]=0;b[Z+8>>1]=0;i:do switch(a[p+1>>0]|0){case -9:{k=c[p+16>>2]|0;l=k+6|0;c[Ca>>2]=e[l>>1];Eb(fa,34044,Ca);if(b[l>>1]|0){m=k+16|0;j=0;do{i=c[k+20+(j<<2)>>2]|0;if(!i)i=59952;else i=c[i>>2]|0;z=(Bu(i,34049)|0)==0;c[oa>>2]=(a[(c[m>>2]|0)+j>>0]|0)==0?59952:34064;c[oa+4>>2]=z?34056:i;Eb(fa,34058,oa);j=j+1|0}while(j>>>0<(e[l>>1]|0)>>>0)}i=c[_>>2]|0;j=i+1|0;if(j>>>0<(c[Y>>2]|0)>>>0){c[_>>2]=j;a[(c[X>>2]|0)+i>>0]=41;break i}else{wb(fa,34066,1);break i}}case -2:{c[pa>>2]=c[c[p+16>>2]>>2];Eb(fa,34068,pa);break}case -8:{y=c[p+16>>2]|0;z=a[y>>0]|0;c[qa>>2]=c[y+32>>2];c[qa+4>>2]=z;Eb(fa,34076,qa);break}case -14:{x=c[p+16>>2]|0;y=c[x+4>>2]|0;z=ra;c[z>>2]=c[x>>2];c[z+4>>2]=y;Eb(fa,32524,ra);break}case -3:{c[sa>>2]=c[p+16>>2];Eb(fa,34083,sa);break}case -13:{g[ta>>3]=+g[c[p+16>>2]>>3];Eb(fa,34086,ta);break}case -11:{i=c[p+16>>2]|0;j=e[i+8>>1]|0;if(j&2|0){h=c[i+16>>2]|0;break i}if(j&4|0){x=i;y=c[x+4>>2]|0;z=ua;c[z>>2]=c[x>>2];c[z+4>>2]=y;Eb(fa,32524,ua);break i}if(!(j&8)){h=(j&1|0)==0?34092:31171;break i}else{g[va>>3]=+g[i>>3];Eb(fa,34086,va);break i}}case -12:{c[wa>>2]=c[(c[p+16>>2]|0)+8>>2];Eb(fa,34099,wa);break}case -15:{k=c[p+16>>2]|0;l=c[k>>2]|0;if((l|0)<1)k=0;else{i=1;while(1){c[xa>>2]=c[k+(i<<2)>>2];Eb(fa,34107,xa);if((i|0)==(l|0))break;else i=i+1|0}k=c[_>>2]|0;j=c[Y>>2]|0}a[h>>0]=91;i=k+1|0;if(i>>>0<j>>>0){c[_>>2]=i;a[(c[X>>2]|0)+k>>0]=93;break i}else{wb(fa,34111,1);break i}}case -4:{Eb(fa,34113,ya);break}case -5:case -17:{a[h>>0]=0;break}case -6:{c[za>>2]=c[c[p+16>>2]>>2];Eb(fa,31408,za);break}default:{i=c[p+16>>2]|0;if(i|0){h=i;break i}a[h>>0]=0}}while(0);i=c[X>>2]|0;do if(i|0){a[i+(c[_>>2]|0)>>0]=0;if(!(c[Z>>2]|0))break;if(a[$>>0]&4)break;$d(fa)|0}while(0);if((h|0)==(c[n>>2]|0)){if(!h)h=0;else h=(Eu(h)|0)&1073741823;c[q+132>>2]=h;a[q+130>>0]=1}else{c[q+132>>2]=0;yc(o,h,-1,1,0)|0}h=(d[ba>>0]|d[ba+1>>0]<<8)&12;if(h<<16>>16==4){if((c[q+184>>2]|0)<4){if(Eg(q+160|0,4,0)|0){h=1;Da=226;break b}h=q+168|0;i=c[q+176>>2]|0}else{i=c[q+180>>2]|0;c[q+176>>2]=i;h=q+168|0;b[h>>1]=b[h>>1]&13}b[h>>1]=514;c[q+172>>2]=2;c[Aa>>2]=e[p+2>>1];Cb(3,i,32595,Aa)|0;a[q+170>>0]=1;b[q+208>>1]=1;h=(d[ba>>0]|d[ba+1>>0]<<8)&12}b[aa>>1]=12-(h&65535);c[O>>2]=(c[M>>2]|0)+40;c[Ea>>2]=0;h=100;break b}while(0);c[Ea>>2]=0;h=101;Da=226}while(0);do if((Da|0)==226){Da=0;z=da;y=c[z+4>>2]|0;if((y|0)>0|(y|0)==0&(c[z>>2]|0)>>>0>0)hc(A,f);if((h|0)==101)if(!(a[A+79>>0]|0))h=101;else{m=A+20|0;h=c[m>>2]|0;if((h|0)>0){n=A+16|0;o=A+240|0;p=A+244|0;l=0;i=0;do{k=c[n>>2]|0;j=c[k+(l<<4)+4>>2]|0;do if(((j|0)!=0?(ea=c[j+4>>2]|0,c[ea+4>>2]=c[j>>2],ea=c[(c[ea>>2]|0)+216>>2]|0,(ea|0)!=0):0)?(z=ea+12|0,ma=c[z>>2]|0,c[z>>2]=0,(ma|0)>0):0){j=c[o>>2]|0;if(!((i|0)==0&(j|0)!=0))break;i=Za[j&127](c[p>>2]|0,A,c[k+(l<<4)>>2]|0,ma)|0;h=c[m>>2]|0}while(0);l=l+1|0}while((l|0)<(h|0));c[Ea>>2]=i;if(i|0){h=1;break}}else c[Ea>>2]=0;h=101}}while(0);c[A+64>>2]=h;i=c[f>>2]|0;j=c[Ea>>2]|0;if(!((j|0)==3082|(a[i+81>>0]|0)!=0)){if((c[i+68>>2]&j|0)==7)Da=244}else{og(i);Da=244}if((Da|0)==244){Da=0;c[Ea>>2]=7}if((h|1|0)!=101)Da=246}if((Da|0)==246){Da=0;if((a[L>>0]|0)<0)h=qg(f)|0}h=c[A+68>>2]&h;if((h|0)!=17){Da=322;break}u=B+1|0;if(B>>>0>=50){h=17;Da=322;break}r=c[C>>2]|0;i=c[f>>2]|0;n=qd(i,c[N>>2]|0,-1,d[L>>0]|0,f,ia,0)|0;switch(n|0){case 7:{Da=251;break a}case 0:break;default:{Da=281;break a}}q=c[ia>>2]|0;ew(fa|0,q|0,224)|0;ew(q|0,f|0,224)|0;ew(f|0,fa|0,224)|0;p=q+8|0;o=c[p>>2]|0;c[p>>2]=c[P>>2];c[P>>2]=o;o=q+4|0;B=c[o>>2]|0;c[o>>2]=c[Q>>2];c[Q>>2]=B;B=q+188|0;l=c[B>>2]|0;c[B>>2]=c[N>>2];c[N>>2]=l;c[R>>2]=c[q+208>>2];a[L>>0]=a[q+148>>0]|0;l=q+160|0;c[S>>2]=c[l>>2];c[S+4>>2]=c[l+4>>2];c[S+8>>2]=c[l+8>>2];c[S+12>>2]=c[l+12>>2];c[S+16>>2]=c[l+16>>2];c[S+20>>2]=c[l+20>>2];c[S+24>>2]=c[l+24>>2];c[T>>2]=(c[T>>2]|0)+1;l=q+16|0;if((b[l>>1]|0)>0){m=q+100|0;k=0;do{B=c[V>>2]|0;h=B+(k*40|0)|0;n=c[m>>2]|0;i=n+(k*40|0)|0;if(!((b[B+(k*40|0)+8>>1]&9216)==0?!(c[B+(k*40|0)+24>>2]|0):0))Cg(h);j=h+40|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));b[n+(k*40|0)+8>>1]=1;c[n+(k*40|0)+24>>2]=0;k=k+1|0}while((k|0)<(b[l>>1]|0))}c[q+40>>2]=0;k=q+20|0;h=c[k>>2]|0;if((h|0)<832317811)switch(h|0){case 770837923:{Da=264;break}default:{}}else switch(h|0){case 832317811:{Da=264;break}default:{}}if((Da|0)==264){Da=0;kc(q)|0}j=c[q>>2]|0;kb(j,q);i=c[o>>2]|0;h=c[p>>2]|0;if(!i)c[j+4>>2]=h;else{c[i+8>>2]=h;h=c[p>>2]|0}if(h|0)c[h+4>>2]=i;c[k>>2]=1443283912;c[q>>2]=0;do if(j){if(c[j+480>>2]|0){Xd(j,q);break}B=q;if((c[j+304>>2]|0)>>>0<=B>>>0?(c[j+308>>2]|0)>>>0>B>>>0:0){B=j+300|0;c[q>>2]=c[B>>2];c[B>>2]=q}else Da=276}else Da=276;while(0);do if((Da|0)==276)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Da=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);h=c[f>>2]|0;Da=da;B=c[Da+4>>2]|0;if((B|0)>0|(B|0)==0&(c[Da>>2]|0)>>>0>0)hc(h,f);Da=kc(f)|0;c[ca>>2]=770837923;c[C>>2]=-1;c[Ea>>2]=0;a[D>>0]=2;c[E>>2]=0;c[G>>2]=1;a[I>>0]=-1;c[J>>2]=0;B=K;c[B>>2]=0;c[B+4>>2]=0;if((Da|0)==3082|(a[h+81>>0]|0)!=0)og(h);if((r|0)>-1){Da=d[ba>>0]|d[ba+1>>0]<<8|16;a[ba>>0]=Da;a[ba+1>>0]=Da>>8}B=u}if((Da|0)==13){c[Ea>>2]=7;Fa=7;Ra=Ga;return Fa|0}else if((Da|0)==251){h=i+81|0;if((a[h>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[h>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;h=i+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i+236>>2]|0;if(h|0)c[h+12>>2]=7}n=7}else if((Da|0)!=281)if((Da|0)==322){Ra=Ga;return h|0}h=c[Fa+260>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){l=c[h+16>>2]|0;break}if(!(i&1))l=Gg(h,1)|0;else l=0}else l=0;while(0);m=f+124|0;h=c[m>>2]|0;do if(h|0){if(c[Fa+480>>2]|0){Xd(Fa,h);break}f=h;if((c[Fa+304>>2]|0)>>>0<=f>>>0?(c[Fa+308>>2]|0)>>>0>f>>>0:0){f=Fa+300|0;c[h>>2]=c[f>>2];c[f>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{f=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);k=Fa+81|0;if(a[k>>0]|0){c[m>>2]=0;c[Ea>>2]=7;Fa=7;Ra=Ga;return Fa|0}if(l){j=(Eu(l)|0)+1|0;j:do if(!(c[Fa+272>>2]|0)){do if(!(0<0|(0==0?(e[Fa+276>>1]|0)>>>0<j>>>0:0))){i=Fa+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=Fa+284|0;c[f>>2]=(c[f>>2]|0)+1;break j}i=Fa+296|0;h=c[i>>2]|0;if(!h){h=Fa+292|0;break}else{c[i>>2]=c[h>>2];f=Fa+284|0;c[f>>2]=(c[f>>2]|0)+1;break j}}else h=Fa+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Da=308}else Da=308;while(0);if((Da|0)==308)h=_d(Fa,j,0)|0;if(h)ew(h|0,l|0,j|0)|0;else h=0}else h=0;c[m>>2]=h;if((n|0)==3082|(a[k>>0]|0)!=0){og(Fa);h=7}else h=c[Fa+68>>2]&n;c[Ea>>2]=h;Fa=h;Ra=Ga;return Fa|0}while(0);c[i>>2]=58063;c[i+4>>2]=81990;c[i+8>>2]=31517;Db(21,32001,i);Fa=21;Ra=Ga;return Fa|0}function Hc(a,d){a=a|0;d=d|0;var e=0;e=c[a+8>>2]|0;if(!(b[e+8>>1]&8192)){e=Ic(a,d)|0;return e|0}else{e=c[e+16>>2]|0;return e|0}return 0}function Ic(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=c[a+8>>2]|0;if((d|0)<1){e=h+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(h);c[h+16>>2]=0;h=0;return h|0}if((c[h+24>>2]|0)<(d|0)){Eg(h,d,0)|0;g=h+16|0;e=h+8|0;f=g;g=c[g>>2]|0}else{g=c[h+20>>2]|0;f=h+16|0;c[f>>2]=g;e=h+8|0;b[e>>1]=b[e>>1]&13}b[e>>1]=8192;c[h>>2]=c[a+4>>2];if(!g){h=g;return h|0}gw(g|0,0,d|0)|0;h=c[f>>2]|0;return h|0}function Jc(a){a=a|0;if(!a){a=0;return a|0}if(!(c[a+120>>2]|0)){a=0;return a|0}a=e[a+144>>1]|0;return a|0}function Kc(b,d){b=b|0;d=d|0;var f=0,g=0;if(!b){g=mc(29576)|0;return g|0}f=c[b+120>>2]|0;if((f|0)!=0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;f=b}else{d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576;f=b}g=mc(d)|0;f=c[f>>2]|0;b=b+40|0;d=c[b>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[b>>2]=d;return g|0}function Lc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=(d|0)==0;do if(j)h=29576;else{g=c[d+120>>2]|0;if(g|0?(e[d+144>>1]|0)>>>0>f>>>0:0){h=g+(f*40|0)|0;break}h=c[d>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)g=c[h+12>>2]|0;else i=9;do if((i|0)==9){f=f&65535;if(!(f&16)){if(f&1|0){g=0;break}g=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(f&16384))break;g=(c[h>>2]|0)+g|0;break}}while(0);if(j)return g|0;h=c[d>>2]|0;i=d+40|0;f=c[i>>2]|0;if((f|0)==3082|(a[h+81>>0]|0)!=0){og(h);f=7}else f=c[h+68>>2]&f;c[i>>2]=f;return g|0}function Mc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0.0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&8)){if(f&4|0){f=d;i=+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0);break}if(!(f&18))i=0.0;else i=+Kg(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)}else i=+g[d>>3];while(0);if(h)return +i;f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;return +i}function Nc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){i=Mg(+g[d>>3])|0;L()|0;break}if(!(f&18))i=0;else{i=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0}}else i=c[d>>2]|0;while(0);if(h)return i|0;f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;return i|0}function Oc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0,j=0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){j=Mg(+g[d>>3])|0;i=L()|0;break}if(!(f&18)){i=0;j=0}else{j=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;i=L()|0}}else{j=d;i=c[j+4>>2]|0;j=c[j>>2]|0}while(0);if(h){K(i|0);return j|0}f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;K(i|0);return j|0}function Pc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0;h=(d|0)==0;do if(h)f=29576;else{g=c[d+120>>2]|0;if(g|0?(e[d+144>>1]|0)>>>0>f>>>0:0){f=g+(f*40|0)|0;break}f=c[d>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}while(0);g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)i=c[f+16>>2]|0;else if(!(g&1))i=Gg(f,1)|0;else i=0;if(h)return i|0;g=c[d>>2]|0;h=d+40|0;f=c[h>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[h>>2]=f;return i|0}function Qc(f,g){f=f|0;g=g|0;var h=0,i=0,j=0;i=(f|0)==0;do if(i)g=29576;else{h=c[f+120>>2]|0;if(h|0?(e[f+144>>1]|0)>>>0>g>>>0:0){g=h+(g*40|0)|0;break}g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);j=d[816+(b[g+8>>1]&31)>>0]|0;if(i)return j|0;h=c[f>>2]|0;i=f+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g;return j|0}function Rc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0;i=c[d>>2]|0;if(!d){i=0;return i|0}if((e[d+144>>1]|0)>>>0<=f>>>0){i=0;return i|0}h=c[d+116>>2]|0;d=h+(f*40|0)|0;do if(d){g=b[h+(f*40|0)+8>>1]|0;if((g&514)==514?(a[h+(f*40|0)+10>>0]|0)==1:0){d=c[h+(f*40|0)+16>>2]|0;break}if(!(g&1))d=Gg(d,1)|0;else d=0}else d=0;while(0);g=i+81|0;if(!(a[g>>0]|0)){i=d;return i|0}if(c[i+180>>2]|0){i=0;return i|0}a[g>>0]=0;c[i+264>>2]=0;i=i+272|0;c[i>>2]=(c[i>>2]|0)+-1;i=0;return i|0}function Sc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=Vc(b,d)|0;if(h|0){switch(g|0){case 0:case -1:{b=h;return b|0}default:{}}ab[g&127](e);b=h;return b|0}if(!e){b=0;return b|0}e=yc((c[b+100>>2]|0)+((d+-1|0)*40|0)|0,e,f,0,g)|0;if(!e){b=0;return b|0}d=c[b>>2]|0;c[d+64>>2]=e;Ne(d,e);d=c[b>>2]|0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);b=7;return b|0}else{b=c[d+68>>2]&e;return b|0}return 0}function Tc(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0;j=Vc(d,e)|0;if(j|0){switch(h|0){case 0:case -1:{d=j;return d|0}default:{}}ab[h&127](f);d=j;return d|0}if(!f){d=0;return d|0}m=c[d+100>>2]|0;k=e+-1|0;l=m+(k*40|0)|0;e=yc(l,f,g,i,h)|0;do if(!(i<<24>>24==0|(e|0)!=0)){j=a[(c[d>>2]|0)+78>>0]|0;if(!(b[m+(k*40|0)+8>>1]&2)){d=0;return d|0}if((a[m+(k*40|0)+10>>0]|0)==j<<24>>24){d=0;return d|0}else{e=Ig(l,j)|0;break}}while(0);if(!e){d=0;return d|0}j=c[d>>2]|0;c[j+64>>2]=e;Ne(j,e);j=c[d>>2]|0;if((e|0)==3082|(a[j+81>>0]|0)!=0){og(j);d=7;return d|0}else{d=c[j+68>>2]&e;return d|0}return 0}function Uc(a,d,e){a=a|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;f=j+8|0;h=j;i=Vc(a,d)|0;if(i|0){Ra=j;return i|0}k=c[a+100>>2]|0;d=d+-1|0;a=k+(d*40|0)|0;d=k+(d*40|0)+8|0;if(!(b[d>>1]&9216))b[d>>1]=1;else Dg(a);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=j;return i|0}g[a>>3]=e;b[d>>1]=8;Ra=j;return i|0}function Vc(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+64|0;i=l+40|0;k=l+32|0;j=l+16|0;h=l+8|0;do if(!e)Db(21,32555,l);else{g=c[e>>2]|0;if(!g){Db(21,32391,h);break}if((c[e+20>>2]|0)==770837923?(c[e+36>>2]|0)<=-1:0){if((f|0)>=1?(b[e+16>>1]|0)>=(f|0):0){j=f+-1|0;k=c[e+100>>2]|0;h=k+(j*40|0)|0;i=k+(j*40|0)+8|0;if(!((b[i>>1]&9216)==0?(c[k+(j*40|0)+24>>2]|0)==0:0)){Cg(h);g=c[e>>2]|0}b[i>>1]=1;c[g+64>>2]=0;g=c[e+208>>2]|0;if(!g){f=0;Ra=l;return f|0}if(!(g&((f|0)>31?-2147483648:1<<j))){f=0;Ra=l;return f|0}f=e+149|0;e=(d[f>>0]|d[f+1>>0]<<8)&-4|1;a[f>>0]=e;a[f+1>>0]=e>>8;f=0;Ra=l;return f|0}c[g+64>>2]=25;Ne(g,25);f=25;Ra=l;return f|0}c[g+64>>2]=21;Ne(g,21);c[k>>2]=c[e+188>>2];Db(21,36834,k);c[i>>2]=58063;c[i+4>>2]=82575;c[i+8>>2]=31517;Db(21,32001,i);f=21;Ra=l;return f|0}while(0);c[j>>2]=58063;c[j+4>>2]=82567;c[j+8>>2]=31517;Db(21,32001,j);f=21;Ra=l;return f|0}function Wc(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=((e|0)<0)<<31>>31;g=Vc(a,d)|0;if(g|0)return g|0;h=c[a+100>>2]|0;d=d+-1|0;a=h+(d*40|0)|0;d=h+(d*40|0)+8|0;if(!(b[d>>1]&9216)){h=a;c[h>>2]=e;c[h+4>>2]=f;b[d>>1]=4;return g|0}else{Pg(a,e,f);return g|0}return 0}function Xc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Tc(a,b,c,d,e,1)|0}function Yc(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;i=t+8|0;j=t;h=b[f+8>>1]|0;switch(a[816+(h&31)>>0]|0){case 1:{j=f;i=c[j>>2]|0;j=c[j+4>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}d=c[d+100>>2]|0;f=e+-1|0;h=d+(f*40|0)|0;f=d+(f*40|0)+8|0;if(!(b[f>>1]&9216)){d=h;c[d>>2]=i;c[d+4>>2]=j;b[f>>1]=4;d=0;Ra=t;return d|0}else{Pg(h,i,j);d=0;Ra=t;return d|0}}case 2:{k=+g[f>>3];h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}d=c[d+100>>2]|0;f=e+-1|0;h=d+(f*40|0)|0;f=d+(f*40|0)+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(h);g[i>>3]=k;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){d=0;Ra=t;return d|0}g[h>>3]=k;b[f>>1]=8;d=0;Ra=t;return d|0}case 4:{if(h&16384){l=c[f>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}j=c[d+100>>2]|0;h=e+-1|0;f=j+(h*40|0)|0;i=j+(h*40|0)+8|0;if(!((b[i>>1]&9216)==0?!(c[j+(h*40|0)+24>>2]|0):0))Cg(f);b[i>>1]=16400;c[j+(h*40|0)+12>>2]=0;c[f>>2]=(l|0)>0?l:0;a[j+(h*40|0)+10>>0]=1;c[j+(h*40|0)+16>>2]=0;d=0;Ra=t;return d|0}r=c[f+16>>2]|0;f=c[f+12>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}if(!r){d=0;Ra=t;return d|0}q=c[d+100>>2]|0;p=e+-1|0;n=q+(p*40|0)|0;l=c[q+(p*40|0)+32>>2]|0;e=(l|0)==0;if(e)i=1e9;else i=c[l+108>>2]|0;a:do if((f|0)<0)if((i|0)<0){o=528;j=0}else{h=0;while(1){if(!((a[r+(h|1)>>0]|a[r+h>>0])<<24>>24)){o=528;j=h;break a}h=h+2|0;if((h|0)>(i|0)){o=528;j=h;break}}}else{o=16;j=f}while(0);m=j+((o&65535)>>>8&65535)|0;do if((j|0)>(i|0))if(!e?(s=c[l+236>>2]|0,(s|0)!=0):0){c[s+12>>2]=18;f=s+36|0;c[f>>2]=(c[f>>2]|0)+1;f=18}else f=18;else{h=m>>>0>32?m:32;if((c[q+(p*40|0)+24>>2]|0)<(h|0)){if(Eg(n,h,0)|0){f=7;break}h=q+(p*40|0)+8|0;f=c[q+(p*40|0)+16>>2]|0}else{f=c[q+(p*40|0)+20>>2]|0;c[q+(p*40|0)+16>>2]=f;h=q+(p*40|0)+8|0;b[h>>1]=b[h>>1]&13}ew(f|0,r|0,m|0)|0;c[q+(p*40|0)+12>>2]=j;b[h>>1]=o;a[q+(p*40|0)+10>>0]=1;d=0;Ra=t;return d|0}while(0);h=c[d>>2]|0;c[h+64>>2]=f;Ne(h,f);h=c[d>>2]|0;if(!(a[h+81>>0]|0)){d=c[h+68>>2]&f;Ra=t;return d|0}else{og(h);d=7;Ra=t;return d|0}}case 3:{d=Tc(d,e,c[f+16>>2]|0,c[f+12>>2]|0,-1,a[f+10>>0]|0)|0;Ra=t;return d|0}default:{d=Vc(d,e)|0;Ra=t;return d|0}}return 0}\nfunction ho(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+400|0;F=J+16|0;p=J;r=J+360|0;G=J+80|0;H=J+60|0;z=J+32|0;I=c[(c[f>>2]|0)+32>>2]|0;h=c[i>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){u=c[h+16>>2]|0;break}if(!(j&1))u=Gg(h,1)|0;else u=0}else u=0;while(0);h=c[i+12>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){B=c[h+16>>2]|0;break}if(!(j&1))B=Gg(h,1)|0;else B=0}else B=0;while(0);h=c[i+16>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){x=c[h+16>>2]|0;break}if(!(j&1))x=Gg(h,1)|0;else x=0}else x=0;while(0);h=c[i+20>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){A=c[h+16>>2]|0;break}if(!(j&1))A=Gg(h,1)|0;else A=0}else A=0;while(0);h=c[i+24>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){m=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))m=0;else{m=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else m=c[h>>2]|0;while(0);if(!((B|0)!=0&(x|0)!=0&(A|0)!=0)){Ra=J;return}C=I+312|0;D=c[C>>2]|0;c[C>>2]=0;n=I+20|0;l=c[n>>2]|0;if((l|0)>0){j=c[I+16>>2]|0;h=0;do{k=c[j+(h<<4)+4>>2]|0;if(k|0)c[(c[k+4>>2]|0)+4>>2]=c[k>>2];h=h+1|0}while((h|0)!=(l|0))};c[H>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;c[H+12>>2]=0;c[H+16>>2]=0;o=Sd(I,x,u)|0;w=H+12|0;c[w>>2]=o;o=z+12|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[z>>2]=G;c[z+4>>2]=152;c[z+8>>2]=153;c[z+24>>2]=H;c[r>>2]=0;o=(m|0)==0;if(o){a:do if(u){y=c[n>>2]|0;j=y+-1|0;if((y|0)>0){h=j;m=(c[I+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){y=a[k>>0]|0;j=(d[208+(y&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!(y<<24>>24==0|(j|0)!=0)){l=u;do{k=k+1|0;l=l+1|0;y=a[k>>0]|0;j=(d[208+(y&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!h)break;j=h+-1|0;if((h|0)>0){h=j;m=m+-16|0}else{h=j;break a}}h=109-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!h){j=u;k=50919;do{k=k+1|0;j=j+1|0;y=a[k>>0]|0;h=(d[208+(y&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=j}else h=-1;while(0);h=h&255}else h=1;j=I+164|0;a[j>>0]=h;y=G+4|0;gw(y|0,0,272)|0;a[G+200>>0]=3;c[G>>2]=I;c[G+132>>2]=1;h=ud(G,B,r)|0;c[y>>2]=c[r>>2];h=(a[I+81>>0]|0)==0?h:7;b:do if(!h){q=c[G+228>>2]|0;h=(q|0)==0;if((h?(c[G+232>>2]|0)==0:0)?(c[G+236>>2]|0)==0:0){c[p>>2]=32306;c[p+4>>2]=103316;c[p+8>>2]=31517;Db(11,32001,p);h=11;E=58;break}a[j>>0]=0;k=c[I+32>>2]|0;n=k&67108864;c:do if(h){m=G+232|0;h=c[m>>2]|0;if(h|0){l=c[h>>2]|0;h=G+272|0;j=c[h>>2]|0;d:do if(j|0){while(1){k=j+12|0;if((c[j>>2]|0)==(l|0))break;j=c[k>>2]|0;if(!j)break d;else h=k}c[h>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;x=H+4|0;c[x>>2]=(c[x>>2]|0)+1}while(0);if(n|0)break;h=c[(c[m>>2]|0)+36>>2]|0;if(!h)break;_j(z,h)|0;break}m=c[G+236>>2]|0;l=c[m+4>>2]|0;e:do if(l|0){s=a[l>>0]|0;h=(d[208+(s&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(h|0)!=0)){j=x;k=l;do{k=k+1|0;j=j+1|0;s=a[k>>0]|0;h=(d[208+(s&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(h|0)!=0))}if(((h|0)==0?(c[(c[w>>2]|0)+72>>2]|0)==(c[m+24>>2]|0):0)?(t=G+272|0,v=c[t>>2]|0,v|0):0){k=t;h=v;while(1){j=h+12|0;if((c[h>>2]|0)==(l|0))break;h=c[j>>2]|0;if(!h)break e;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[H>>2];c[H>>2]=h;w=H+4|0;c[w>>2]=(c[w>>2]|0)+1}}while(0);if(!n){h=lo(G,o?u:0)|0;if(h|0){E=131;break b}oo(z,m);h=c[m+28>>2]|0;if(h|0){n=G+272|0;o=H+4|0;do{m=c[h+12>>2]|0;f:do if(m|0){z=a[m>>0]|0;j=(d[208+(z&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(z<<24>>24==0|(j|0)!=0)){k=x;l=m;do{l=l+1|0;k=k+1|0;z=a[l>>0]|0;j=(d[208+(z&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(z<<24>>24==0|(j|0)!=0))}if(j|0)break;j=c[n>>2]|0;if(!j)break;l=n;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break f;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;c[o>>2]=(c[o>>2]|0)+1}while(0);h=c[h+36>>2]|0}while((h|0)!=0)}}}else{j=q+12|0;p=(n|0)==0;if(c[j>>2]|0){if(!p)break;x=r+4|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;c[x+24>>2]=0;c[r>>2]=G;Kk(G,c[j>>2]|0,r);x=(c[G+36>>2]|0)==0;h=c[G+12>>2]|0;$j(z,c[j>>2]|0)|0;if(x|(h|0)==0)break;else{E=131;break b}}if(!((k&16384|0)==0&0==0&(p^1))?(s=c[q+16>>2]|0,s|0):0){n=G+272|0;o=H+4|0;l=s;do{m=c[l+8>>2]|0;g:do if(m|0){v=a[m>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(h|0)!=0)){j=x;k=m;do{k=k+1|0;j=j+1|0;v=a[k>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(h|0)!=0))}if(h|0)break;h=c[n>>2]|0;if(!h)break;k=n;while(1){j=h+12|0;if((c[h>>2]|0)==(m|0))break;h=c[j>>2]|0;if(!h)break g;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[H>>2];c[H>>2]=h;c[o>>2]=(c[o>>2]|0)+1}while(0);l=c[l+4>>2]|0}while((l|0)!=0)}l=c[q>>2]|0;if(l|0){v=a[x>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(h|0)!=0)){k=l;j=x;do{j=j+1|0;k=k+1|0;x=a[j>>0]|0;h=(d[208+(x&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(h|0)!=0))}if(!h){c[w>>2]=q;do if(p){j=c[q+24>>2]|0;if(!j)break;h=c[j>>2]|0;if((h|0)<=0)break;k=h;h=j+4|0;while(1){j=c[h>>2]|0;if(j|0?_j(z,j)|0:0)break;if((k|0)>1){k=k+-1|0;h=h+20|0}else break}l=c[q>>2]|0}while(0);h=G+272|0;j=c[h>>2]|0;if(j|0){while(1){k=j+12|0;if((c[j>>2]|0)==(l|0))break;j=c[k>>2]|0;if(!j)break c;else h=k}c[h>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;z=H+4|0;c[z>>2]=(c[z>>2]|0)+1}}}}while(0);h=po(f,H,B,A,1)|0;if(h|0)E=131}else E=58;while(0);if((E|0)==58){a[j>>0]=0;E=131}do if((E|0)==131){if(!(c[y>>2]|0)){c[f+20>>2]=h;j=c[f>>2]|0;if(!(b[j+8>>1]&1))break;switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(j,h,-1,1,0)|0;break}j=c[i+4>>2]|0;k=c[i+8>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);do if(k){h=b[k+8>>1]|0;if((h&514)==514?(a[k+10>>0]|0)==1:0){h=c[k+16>>2]|0;break}if(!(h&1))h=Gg(k,1)|0;else h=0}else h=0;while(0);i=c[y>>2]|0;c[F>>2]=j;c[F+4>>2]=h;c[F+8>>2]=59952;c[F+12>>2]=i;h=Bb(49618,F)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{f=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(G);ro(I,c[H>>2]|0);c[C>>2]=D;Ra=J;return}function io(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=Ra;Ra=Ra+352|0;u=A+16|0;r=A;s=A+312|0;z=A+32|0;v=c[(c[f>>2]|0)+32>>2]|0;j=c[i>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);h=c[i+4>>2]|0;do if(h){k=b[h+8>>1]|0;if((k&514)==514?(a[h+10>>0]|0)==1:0){o=c[h+16>>2]|0;break}if(!(k&1))o=Gg(h,1)|0;else o=0}else o=0;while(0);h=c[i+16>>2]|0;k=e[h+8>>1]|0;do if(!(k&4)){if(k&8|0){h=Mg(+g[h>>3])|0;L()|0;break}if(!(k&18))h=0;else{h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else h=c[h>>2]|0;while(0);p=c[v+32>>2]|0;w=v+312|0;x=c[w>>2]|0;c[w>>2]=0;if(!((j|0)!=0&(o|0)!=0)){c[w>>2]=x;Ra=A;return}c[s>>2]=0;q=(h|0)==0;if(q){n=c[v+20>>2]|0;k=n+-1|0;a:do if((n|0)>0){h=k;n=(c[v+16>>2]|0)+(k<<4)|0;while(1){l=c[n>>2]|0;if(l|0){m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(k|0)!=0)){m=j;do{l=l+1|0;m=m+1|0;B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0))}if(!k)break a}if(!h)break;k=h+-1|0;if((h|0)>0){h=k;n=n+-16|0}else{h=k;break a}}h=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!h){k=j;l=50919;do{l=l+1|0;k=k+1|0;B=a[l>>0]|0;h=(d[208+(B&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=k;while(0);h=h&255}else h=1;l=v+164|0;a[l>>0]=h;m=z+4|0;gw(m|0,0,272)|0;a[z+200>>0]=3;c[z>>2]=v;c[z+132>>2]=1;B=ud(z,o,s)|0;c[m>>2]=c[s>>2];do if((B|0)==0&(a[v+81>>0]|0)==0){h=c[z+228>>2]|0;k=(h|0)==0;if((k?(c[z+232>>2]|0)==0:0)?(c[z+236>>2]|0)==0:0){c[r>>2]=32306;c[r+4>>2]=103316;c[r+8>>2]=31517;Db(11,32001,r);y=40;break}a[l>>0]=0;l=(p&67108864|0)==0&0==0;if(!(k|l^1)?(t=h+12|0,c[t>>2]|0):0){B=s+4|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[B+24>>2]=0;c[s>>2]=z;Kk(z,c[t>>2]|0,s);if((c[z+36>>2]|0)==0|(c[z+12>>2]|0)==0)break;else{y=68;break}}k=z+236|0;h=c[k>>2]|0;if(h|0){if(l){if(lo(z,q?j:0)|0){y=68;break}h=c[k>>2]|0}k=c[h+24>>2]|0;if(!k)o=-1e6;else{l=c[v+16>>2]|0;h=0;while(1)if((c[l+(h<<4)+12>>2]|0)==(k|0)){o=h;break}else h=h+1|0}B=c[v+20>>2]|0;k=B+-1|0;b:do if((B|0)>0){h=k;n=(c[v+16>>2]|0)+(k<<4)|0;while(1){l=c[n>>2]|0;if(l|0){B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(B<<24>>24==0|(k|0)!=0)){m=j;do{l=l+1|0;m=m+1|0;B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0))}if(!k)break b}if(!h)break;k=h+-1|0;if((h|0)>0){h=k;n=n+-16|0}else{h=k;break b}}h=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!h){k=50919;do{k=k+1|0;j=j+1|0;B=a[k>>0]|0;h=(d[208+(B&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=k;while(0);if((o|0)==(h|0)){h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216)){B=h;c[B>>2]=1;c[B+4>>2]=0;b[j>>1]=4;break}else{Pg(h,1,0);break}}}}else y=40;while(0);if((y|0)==40){a[l>>0]=0;y=68}do if((y|0)==68){j=c[i+8>>2]|0;k=c[i+12>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);do if(k){h=b[k+8>>1]|0;if((h&514)==514?(a[k+10>>0]|0)==1:0){h=c[k+16>>2]|0;break}if(!(h&1))h=Gg(k,1)|0;else h=0}else h=0;while(0);B=c[m>>2]|0;c[u>>2]=j;c[u+4>>2]=h;c[u+8>>2]=49639;c[u+12>>2]=B;h=Bb(49618,u)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{B=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(z);c[w>>2]=x;Ra=A;return}function jo(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=c[d+24>>2]|0;switch(a[e>>0]|0){case 77:{if((c[i+8>>2]|0)!=(b[e+32>>1]|0))return 0;d=c[d>>2]|0;if((c[d+120>>2]|0)!=(c[i+12>>2]|0))return 0;d=d+272|0;f=c[d>>2]|0;if(!f)return 0;while(1){h=f+12|0;if((c[f>>2]|0)==(e|0))break;g=c[h>>2]|0;if(!g){j=16;break}else{d=h;f=g}}if((j|0)==16)return 0;c[d>>2]=c[h>>2];c[h>>2]=c[i>>2];c[i>>2]=f;j=i+4|0;c[j>>2]=(c[j>>2]|0)+1;return 0}case -94:{if((c[i+8>>2]|0)!=(b[e+32>>1]|0))return 0;if((c[i+12>>2]|0)!=(c[e+44>>2]|0))return 0;d=(c[d>>2]|0)+272|0;f=c[d>>2]|0;if(!f)return 0;while(1){h=f+12|0;if((c[f>>2]|0)==(e|0))break;g=c[h>>2]|0;if(!g){j=16;break}else{d=h;f=g}}if((j|0)==16)return 0;c[d>>2]=c[h>>2];c[h>>2]=c[i>>2];c[i>>2]=f;j=i+4|0;c[j>>2]=(c[j>>2]|0)+1;return 0}default:return 0}return 0}function ko(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=Ra;Ra=Ra+32|0;g=h;e=b+64|0;b=c[e>>2]|0;if(!b){Ra=h;return 0}if((c[b>>2]|0)<=0){Ra=h;return 0}f=g+4|0;d=0;do{i=c[b+8+(d<<4)+8>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;j=c[a>>2]|0;c[g>>2]=j;Kk(j,i,g);$j(a,i)|0;d=d+1|0;b=c[e>>2]|0}while((d|0)<(c[b>>2]|0));Ra=h;return 0}function lo(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;ea=Ra;Ra=Ra+208|0;aa=ea+128|0;$=ea+120|0;_=ea+112|0;ca=ea+104|0;ba=ea+96|0;Z=ea+88|0;n=ea+80|0;W=ea+168|0;X=ea+136|0;Y=ea;k=c[d>>2]|0;o=c[d+236>>2]|0;i=X+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[X>>2]=d;i=c[o+4>>2]|0;j=c[k+16>>2]|0;h=c[o+24>>2]|0;m=d;if(!h)g=-1e6;else{g=0;while(1)if((c[j+(g<<4)+12>>2]|0)==(h|0))break;else g=g+1|0}g=Sd(k,i,c[j+(g<<4)>>2]|0)|0;c[d+120>>2]=g;a[d+144>>0]=a[o+8>>0]|0;if(g|0?(l=Sk(d,g)|0,l|0):0){da=l;Ra=ea;return da|0}i=c[o+12>>2]|0;if(!i)g=0;else{j=X+24|0;b[j>>1]=0;c[W>>2]=m;c[W+4>>2]=125;c[W+8>>2]=126;c[W+12>>2]=0;c[W+24>>2]=X;h=i+24|0;g=d+208|0;U=(c[g>>2]|0)+(c[h>>2]|0)|0;c[g>>2]=U;g=c[(c[d>>2]|0)+120>>2]|0;if((g|0)>=(U|0)){_j(W,i)|0;g=c[W>>2]|0;U=g+208|0;c[U>>2]=(c[U>>2]|0)-(c[h>>2]|0);U=i+4|0;c[U>>2]=c[U>>2]|b[j>>1]&-32752&65535;if((c[X+20>>2]|0)>0)g=1;else g=(c[g+36>>2]|0)>0&1}else{c[n>>2]=g;cd(d,41637,n);g=1}}h=c[o+28>>2]|0;if(!((g|0)==0&(h|0)!=0)){da=g;Ra=ea;return da|0}q=d+36|0;r=d+12|0;s=Y+16|0;t=Y+24|0;u=X+4|0;v=X+24|0;w=W+4|0;x=W+8|0;y=W+12|0;z=W+24|0;A=X+8|0;B=X+20|0;C=W+4|0;D=W+8|0;E=W+12|0;F=W+24|0;G=W+4|0;H=W+8|0;I=W+12|0;J=W+24|0;K=W+4|0;L=W+8|0;M=W+12|0;N=W+24|0;O=W+4|0;P=W+8|0;Q=W+12|0;R=W+24|0;S=W+4|0;T=W+8|0;U=W+12|0;p=W+24|0;while(1){g=c[h+8>>2]|0;if((g|0?(Kk(d,g,X),c[q>>2]|0):0)?(V=c[r>>2]|0,V|0):0){g=V;da=76;break}k=h+12|0;g=c[k>>2]|0;if(!g)g=0;else{j=bd(d,0,g,f)|0;if(!j){g=1;da=76;break}g=Sk(d,j)|0;if(g|0){da=76;break}g=Y;i=g+80|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(i|0));c[Y>>2]=1;c[s>>2]=c[k>>2];c[t>>2]=j;c[u>>2]=Y;j=c[h+16>>2]|0;do if(!j)da=26;else{k=e[v>>1]|0;b[v>>1]=k&28655;g=c[X>>2]|0;c[W>>2]=g;c[w>>2]=125;c[x>>2]=126;c[y>>2]=0;c[z>>2]=X;l=j+24|0;i=g+208|0;o=(c[i>>2]|0)+(c[l>>2]|0)|0;c[i>>2]=o;i=c[(c[g>>2]|0)+120>>2]|0;if((i|0)>=(o|0)){_j(W,j)|0;g=c[W>>2]|0;o=g+208|0;c[o>>2]=(c[o>>2]|0)-(c[l>>2]|0);o=b[v>>1]|0;n=j+4|0;c[n>>2]=c[n>>2]|o&-32752&65535;b[v>>1]=k&36880|o&65535;if((c[B>>2]|0)<=0)if((c[g+36>>2]|0)<1){da=26;break}else{g=1;break}}else{c[Z>>2]=i;cd(g,41637,Z)}g=1}while(0);a:do if((da|0)==26){da=0;k=c[h+20>>2]|0;if((k|0)!=0?(c[k>>2]|0)>0:0){j=0;while(1){l=c[k+4+(j*20|0)>>2]|0;if(l){m=e[v>>1]|0;b[v>>1]=m&28655;g=c[X>>2]|0;c[W>>2]=g;c[C>>2]=125;c[D>>2]=126;c[E>>2]=0;c[F>>2]=X;n=l+24|0;i=g;fa=i+208|0;o=(c[fa>>2]|0)+(c[n>>2]|0)|0;c[fa>>2]=o;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(o|0)){da=33;break}_j(W,l)|0;g=c[W>>2]|0;fa=g+208|0;c[fa>>2]=(c[fa>>2]|0)-(c[n>>2]|0);fa=b[v>>1]|0;o=l+4|0;c[o>>2]=c[o>>2]|fa&-32752&65535;b[v>>1]=m&36880|fa&65535;if((c[B>>2]|0)>0)break;if((c[g+36>>2]|0)>=1){g=2;break a}}j=j+1|0;if((j|0)>=(c[k>>2]|0)){g=0;break a}}if((da|0)==33){da=0;c[ba>>2]=i;cd(g,41637,ba)}g=2}else g=0}while(0);o=c[h+28>>2]|0;if(o){c[o+20>>2]=Y;c[A>>2]=o;b[v>>1]=512;n=c[o>>2]|0;b:do if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;g=512;while(1){l=c[n+4+(m*20|0)>>2]|0;if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=X;k=l+24|0;i=g;ga=i+208|0;fa=(c[ga>>2]|0)+(c[k>>2]|0)|0;c[ga>>2]=fa;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(fa|0)){da=45;break}_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)>=1){g=2;break b}}m=m+1|0;if((m|0)>=(c[n>>2]|0)){da=49;break b}}if((da|0)==45){da=0;c[ca>>2]=i;cd(g,41637,ca)}g=2}else{g=512;da=49}while(0);c:do if((da|0)==49){da=0;n=c[o+8>>2]|0;d:do if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;while(1){l=c[n+4+(m*20|0)>>2]|0;if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[O>>2]=125;c[P>>2]=126;c[Q>>2]=0;c[R>>2]=X;k=l+24|0;i=g;fa=i+208|0;ga=(c[fa>>2]|0)+(c[k>>2]|0)|0;c[fa>>2]=ga;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(ga|0)){da=56;break}_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)>=1){g=2;break c}}m=m+1|0;if((m|0)>=(c[n>>2]|0))break d}if((da|0)==56){da=0;c[_>>2]=i;cd(g,41637,_)}g=2;break c}while(0);l=c[o+12>>2]|0;e:do if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[K>>2]=125;c[L>>2]=126;c[M>>2]=0;c[N>>2]=X;k=l+24|0;i=g+208|0;ga=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=ga;i=c[(c[g>>2]|0)+120>>2]|0;do if((i|0)>=(ga|0)){_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)<1)break e;else{g=1;break c}}else{c[$>>2]=i;cd(g,41637,$)}while(0);g=1;break c}while(0);l=c[o+4>>2]|0;do if(!l)g=0;else{j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[S>>2]=125;c[T>>2]=126;c[U>>2]=0;c[p>>2]=X;k=l+24|0;i=g+208|0;ga=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=ga;i=c[(c[g>>2]|0)+120>>2]|0;if((i|0)<(ga|0)){c[aa>>2]=i;cd(g,41637,aa);g=1;break}_j(W,l)|0;g=c[W>>2]|0;ga=g+208|0;c[ga>>2]=(c[ga>>2]|0)-(c[k>>2]|0);ga=b[v>>1]|0;fa=l+4|0;c[fa>>2]=c[fa>>2]|ga&-32752&65535;b[v>>1]=j&36880|ga&65535;if((c[B>>2]|0)>0){g=1;break}g=(c[g+36>>2]|0)>0&1}while(0)}while(0);b[v>>1]=0}c[u>>2]=0}h=c[h+36>>2]|0;if(!((g|0)==0&(h|0)!=0)){da=76;break}}if((da|0)==76){Ra=ea;return g|0}return 0}function mo(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!f)return;p=c[f>>2]|0;if((p|0)<=0)return;m=((g|0)!=0)<<31>>31;n=b+272|0;o=e+4|0;if(!g){h=0;do{a:do if((c[f+4+(h*20|0)+4>>2]|0)==0?(k=c[n>>2]|0,k|0):0){i=n;b=k;while(1){j=b+12|0;if(!(c[b>>2]|0))break;b=c[j>>2]|0;if(!b)break a;else i=j}c[i>>2]=c[j>>2];c[j>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);h=h+1|0}while((h|0)<(p|0));return}j=0;do{k=c[f+4+(j*20|0)+4>>2]|0;if(k){i=a[k>>0]|0;b=(d[208+(i&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(b|0)!=0)){h=g;i=k;do{i=i+1|0;h=h+1|0;q=a[i>>0]|0;b=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(b|0)!=0))}}else b=m;b:do if((b|0)==0?(l=c[n>>2]|0,l|0):0){h=n;b=l;while(1){i=b+12|0;if((c[b>>2]|0)==(k|0))break;b=c[i>>2]|0;if(!b)break b;else h=i}c[h>>2]=c[i>>2];c[i>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);j=j+1|0}while((j|0)<(p|0));return}function no(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!f)return;p=c[f+4>>2]|0;if((p|0)<=0)return;m=((g|0)!=0)<<31>>31;n=b+272|0;o=e+4|0;if(!g){h=0;do{a:do if((c[(c[f>>2]|0)+(h<<3)>>2]|0)==0?(k=c[n>>2]|0,k|0):0){i=n;b=k;while(1){j=b+12|0;if(!(c[b>>2]|0))break;b=c[j>>2]|0;if(!b)break a;else i=j}c[i>>2]=c[j>>2];c[j>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);h=h+1|0}while((h|0)<(p|0));return}j=0;do{k=c[(c[f>>2]|0)+(j<<3)>>2]|0;if(k){i=a[k>>0]|0;b=(d[208+(i&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(b|0)!=0)){h=g;i=k;do{i=i+1|0;h=h+1|0;q=a[i>>0]|0;b=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(b|0)!=0))}}else b=m;b:do if((b|0)==0?(l=c[n>>2]|0,l|0):0){h=n;b=l;while(1){i=b+12|0;if((c[b>>2]|0)==(k|0))break;b=c[i>>2]|0;if(!b)break b;else h=i}c[h>>2]=c[i>>2];c[i>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);j=j+1|0}while((j|0)<(p|0));return}function oo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[b+12>>2]|0;if(d|0)_j(a,d)|0;b=c[b+28>>2]|0;if(!b)return;do{$j(a,c[b+8>>2]|0)|0;d=c[b+16>>2]|0;if(d|0)_j(a,d)|0;d=c[b+20>>2]|0;a:do if(d|0?(h=c[d>>2]|0,(h|0)>0):0){f=h;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break a;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);g=c[b+28>>2]|0;if(g|0){d=c[g>>2]|0;b:do if(d|0?(i=c[d>>2]|0,(i|0)>0):0){f=i;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break b;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);d=c[g+8>>2]|0;c:do if(d|0?(j=c[d>>2]|0,(j|0)>0):0){f=j;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break c;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);d=c[g+12>>2]|0;if(d|0)_j(a,d)|0;d=c[g+4>>2]|0;if(d|0)_j(a,d)|0}b=c[b+36>>2]|0}while((b|0)!=0);return}function po(b,f,g,h,i){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;j=z;if(!h)k=0;else k=(Eu(h)|0)&1073741823;if(!g)n=0;else n=(Eu(g)|0)&1073741823;x=c[(c[b>>2]|0)+32>>2]|0;c[j>>2]=h;y=dd(x,49613,j)|0;if(!y){y=7;Ra=z;return y|0}w=(Eu(y)|0)&1073741823;u=(i|0)==0;v=u?k:w;u=u?h:y;h=n+1+(G(c[f+4>>2]|0,w)|0)|0;i=((h|0)<0)<<31>>31;t=(x|0)==0;a:do if(t){s=Sv(h|0,i|0,-1,-1)|0;r=L()|0;if(!(r>>>0>0|(r|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](h)|0;l=30;break}j=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;k=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&k>>>0>0){s=c[14978]|0;r=Tv(k|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;l=31}else l=31}else j=7}else j=7}else{if(c[x+272>>2]|0){if(a[x+81>>0]|0){j=7;break}}else{do if(!(0<i>>>0|(0==(i|0)?(e[x+276>>1]|0)>>>0<h>>>0:0))){k=x+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=30;break a}k=x+296|0;j=c[k>>2]|0;if(!j){j=x+292|0;break}else{c[k>>2]=c[j>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=30;break a}}else j=x+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(x,h,i)|0;l=30}while(0);if((l|0)==30)if(!j)j=7;else l=31;do if((l|0)==31){gw(j+n|0,0,(h>>>0>n>>>0?h-n|0:0)|0)|0;ew(j|0,g|0,n|0)|0;l=c[f>>2]|0;b:do if(l|0){s=g;o=x+480|0;p=x+304|0;q=x+308|0;r=x+300|0;if(t)while(1){k=c[l+12>>2]|0;if(!k)m=l;else{h=k;i=l;do{i=(c[h+4>>2]|0)>>>0>(c[i+4>>2]|0)>>>0?h:i;h=c[h+12>>2]|0}while((h|0)!=0);m=i}if((l|0)==(m|0))k=f;else{if((k|0)==(m|0))k=l;else while(1){i=c[k+12>>2]|0;if((i|0)==(m|0))break;else k=i}k=k+12|0}c[k>>2]=c[m+12>>2];g=c[m+4>>2]|0;l=(a[880+(d[g>>0]|0)>>0]&70)==0;h=l?w:v;g=g-s|0;k=m+8|0;i=c[k>>2]|0;if((i|0)==(h|0))k=n;else{r=g+i|0;fw(j+(h+g)|0,j+r|0,n-r|0)|0;k=h-(c[k>>2]|0)+n|0;a[j+k>>0]=0}ew(j+g|0,(l?y:u)|0,h|0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{r=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}l=c[f>>2]|0;if(!l)break b;else n=k}while(1){k=c[l+12>>2]|0;if(!k)m=l;else{h=k;i=l;do{i=(c[h+4>>2]|0)>>>0>(c[i+4>>2]|0)>>>0?h:i;h=c[h+12>>2]|0}while((h|0)!=0);m=i}if((l|0)==(m|0))k=f;else{if((k|0)==(m|0))k=l;else while(1){i=c[k+12>>2]|0;if((i|0)==(m|0))break;else k=i}k=k+12|0}c[k>>2]=c[m+12>>2];g=c[m+4>>2]|0;l=(a[880+(d[g>>0]|0)>>0]&70)==0;h=l?w:v;g=g-s|0;k=m+8|0;i=c[k>>2]|0;if((i|0)==(h|0))k=n;else{i=g+i|0;fw(j+(h+g)|0,j+i|0,n-i|0)|0;k=h-(c[k>>2]|0)+n|0;a[j+k>>0]=0}ew(j+g|0,(l?y:u)|0,h|0)|0;do if(!(c[o>>2]|0)){n=m;if((c[p>>2]|0)>>>0<=n>>>0?(c[q>>2]|0)>>>0>n>>>0:0){c[m>>2]=c[r>>2];c[r>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(x,m);while(0);l=c[f>>2]|0;if(!l)break;else n=k}}while(0);if((yc(c[b>>2]|0,j,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}if(!t){if(c[x+480>>2]|0){Xd(x,j);j=0;break}f=j;if((c[x+304>>2]|0)>>>0<=f>>>0?(c[x+308>>2]|0)>>>0>f>>>0:0){x=x+300|0;c[j>>2]=c[x>>2];c[x>>2]=j;j=0;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=0;break}else{x=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=0;break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);y=j;Ra=z;return y|0}else{x=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);y=j;Ra=z;return y|0}return 0}function qo(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=c[b>>2]|0;i=c[b+8>>2]|0;do if(i|0){j=i+20|0;e=c[j>>2]|0;if((e|0)<832317811)switch(e|0){case 770837923:{m=3;break}default:{}}else switch(e|0){case 832317811:{m=3;break}default:{}}if((m|0)==3)kc(i)|0;g=c[i>>2]|0;kb(g,i);h=c[i+4>>2]|0;f=i+8|0;e=c[f>>2]|0;if(!h)c[g+4>>2]=e;else{c[h+8>>2]=e;e=c[f>>2]|0}if(e|0)c[e+4>>2]=h;c[j>>2]=1443283912;c[i>>2]=0;if(g|0){if(c[g+480>>2]|0){Xd(g,i);break}m=i;if((c[g+304>>2]|0)>>>0<=m>>>0?(c[g+308>>2]|0)>>>0>m>>>0:0){m=g+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);e=c[b+228>>2]|0;do if(e|0){if(o|0?c[o+480>>2]|0:0){Vi(o,e);break}l=e+32|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;if(!m)Vi(o,e)}while(0);g=b+232|0;e=c[g>>2]|0;if(e|0){h=(o|0)==0;i=o+480|0;j=o+304|0;k=o+308|0;l=o+300|0;do{c[g>>2]=c[e+20>>2];f=c[e+36>>2]|0;if(f|0)ni(o,f);f=c[e+40>>2]|0;if(f|0)ri(o,f);f=c[e+16>>2]|0;do if(f|0){if(!h){if(c[i>>2]|0){Xd(o,f);break}m=f;if((c[j>>2]|0)>>>0<=m>>>0?(c[k>>2]|0)>>>0>m>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{m=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);m=e+55|0;a:do if(((d[m>>0]|d[m+1>>0]<<8)&16)!=0?(n=c[e+32>>2]|0,(n|0)!=0):0){do if(!h){if(!(c[i>>2]|0)){f=n;if((c[j>>2]|0)>>>0>f>>>0)break;if((c[k>>2]|0)>>>0<=f>>>0)break;c[n>>2]=c[l>>2];c[l>>2]=n}else Xd(o,n);f=e;m=53;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);m=52;break}else{m=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);m=52;break}}else m=52;while(0);if((m|0)==52)if(h)m=58;else{f=e;m=53}do if((m|0)==53){m=0;if(c[i>>2]|0){Xd(o,f);break}p=e;if((c[j>>2]|0)>>>0<=p>>>0?(c[k>>2]|0)>>>0>p>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e}else{e=f;m=58}}while(0);do if((m|0)==58)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[g>>2]|0}while((e|0)!=0)}n=c[b+236>>2]|0;do if(n|0){Xi(o,c[n+28>>2]|0);e=c[n>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[n+4>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[n+12>>2]|0;if(e|0)ni(o,e);e=c[n+16>>2]|0;b:do if(e){l=e+4|0;f=c[e>>2]|0;c:do if((c[l>>2]|0)>0){h=o+480|0;i=o+304|0;j=o+308|0;k=o+300|0;if(!o){g=0;while(1){f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[e>>2]|0;if((g|0)>=(c[l>>2]|0))break c}}g=0;do{f=c[f+(g<<3)>>2]|0;do if(f|0){if(c[h>>2]|0){Xd(o,f);break}p=f;if((c[i>>2]|0)>>>0<=p>>>0?(c[j>>2]|0)>>>0>p>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);g=g+1|0;f=c[e>>2]|0}while((g|0)<(c[l>>2]|0))}while(0);d:do if(f){do if(o|0){g=o+480|0;if(!(c[g>>2]|0)){h=f;if((c[o+304>>2]|0)>>>0>h>>>0)break;if((c[o+308>>2]|0)>>>0<=h>>>0)break;p=o+300|0;c[f>>2]=c[p>>2];c[p>>2]=f}else Xd(o,f);f=g;g=e;m=118;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);m=116;break}else{m=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);m=116;break}}else m=116;while(0);if((m|0)==116)if(o){f=o+480|0;g=e;m=118}do if((m|0)==118){if(!(c[f>>2]|0)){e=g;if((c[o+304>>2]|0)>>>0>e>>>0){e=g;break}if((c[o+308>>2]|0)>>>0<=e>>>0){e=g;break}p=o+300|0;c[g>>2]=c[p>>2];c[p>>2]=g}else Xd(o,g);e=n;m=129;break b}while(0);if(e)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);m=128;break}else{m=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);m=128;break}else m=128}else m=128;while(0);if((m|0)==128)if(!o)e=n;else{e=n;m=129}if((m|0)==129){if(c[o+480>>2]|0){Xd(o,e);break}p=n;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[n>>2]=c[p>>2];c[p>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[b+4>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);ro(o,c[b+272>>2]|0);f=c[b>>2]|0;e=c[b+64>>2]|0;do if(e|0){if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}p=e;if((c[f+304>>2]|0)>>>0<=p>>>0?(c[f+308>>2]|0)>>>0>p>>>0:0){p=f+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[b+68>>2]|0;if(e|0)ri(f,e);e=b+24|0;if(!f){a[e>>0]=0;return}p=f+272|0;c[p>>2]=(c[p>>2]|0)-(d[e>>0]|0);a[e>>0]=0;return}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;e=a+480|0;f=a+304|0;g=a+308|0;h=a+300|0;if(!a){do{d=b;b=c[b+12>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0);return}do{d=b;b=c[b+12>>2]|0;do if(!(c[e>>2]|0)){i=d;if((c[f>>2]|0)>>>0<=i>>>0?(c[g>>2]|0)>>>0>i>>>0:0){c[d>>2]=c[h>>2];c[h>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}else Xd(a,d);while(0)}while((b|0)!=0);return}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=c[b+24>>2]|0;if((a[d>>0]|0)!=-94)return 0;f=d+44|0;if((c[g+12>>2]|0)!=(c[f>>2]|0))return 0;d=(c[b>>2]|0)+272|0;b=c[d>>2]|0;if(!b)return 0;while(1){e=b+12|0;if((c[b>>2]|0)==(f|0))break;b=c[e>>2]|0;if(!b){h=8;break}else d=e}if((h|0)==8)return 0;c[d>>2]=c[e>>2];c[e>>2]=c[g>>2];c[g>>2]=b;h=g+4|0;c[h>>2]=(c[h>>2]|0)+1;return 0}function to(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+32|0;p=q;m=c[a+24>>2]|0;n=c[b+32>>2]|0;if(!n){p=2;Ra=q;return p|0}o=c[n>>2]|0;if((o|0)>0){g=m+12|0;h=m+4|0;f=0;do{a:do if((c[n+8+(f*72|0)+16>>2]|0)==(c[g>>2]|0)?(i=c[n+8+(f*72|0)+8>>2]|0,j=(c[a>>2]|0)+272|0,k=c[j>>2]|0,k|0):0){e=j;d=k;while(1){l=d+12|0;if((c[d>>2]|0)==(i|0))break;d=c[l>>2]|0;if(!d)break a;else e=l}c[e>>2]=c[l>>2];c[l>>2]=c[m>>2];c[m>>2]=d;c[h>>2]=(c[h>>2]|0)+1}while(0);f=f+1|0}while((f|0)<(o|0))}f=b+64|0;d=c[f>>2]|0;if(!d){p=0;Ra=q;return p|0}if((c[d>>2]|0)<=0){p=0;Ra=q;return p|0}b=p+4|0;e=0;do{o=c[d+8+(e<<4)+8>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;n=c[a>>2]|0;c[p>>2]=n;Kk(n,o,p);$j(a,o)|0;e=e+1|0;d=c[f>>2]|0}while((e|0)<(c[d>>2]|0));d=0;Ra=q;return d|0}function uo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;f=d;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;e=L()|0;a=d;c[a>>2]=f;c[a+4>>2]=e;return}function vo(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d){e=0;f=0}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function wo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;return}function xo(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+8|0;h=e;g=d;f=c[g>>2]|0;g=c[g+4>>2]|0;if(!((c[h>>2]|0)==0&(c[h+4>>2]|0)==0)){f=Sv(f|0,g|0,1,0)|0;g=L()|0;h=d;c[h>>2]=f;c[h+4>>2]=g;h=e;c[h>>2]=0;c[h+4>>2]=0}d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){h=d;c[h>>2]=f;c[h+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}function yo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;f=d+8|0;e=f;e=Sv(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;a=L()|0;c[f>>2]=e;c[f+4>>2]=a;f=d;if(!((c[f>>2]|0)==0&(c[f+4>>2]|0)==0))return;f=d;c[f>>2]=e;c[f+4>>2]=a;return}function zo(a){a=a|0;var d=0,e=0,f=0,g=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))e=Ic(a,24)|0;else e=c[d+16>>2]|0;if(!e)return;g=e;f=c[g>>2]|0;g=c[g+4>>2]|0;d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=f;c[d+4>>2]=g;b[a>>1]=4}else Pg(d,f,g);g=e;c[g>>2]=0;c[g+4>>2]=0;return}function Ao(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Bo(a){a=a|0;var d=0,e=0,f=0.0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l+8|0;k=l;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d){Ra=l;return}i=d+8|0;h=c[i>>2]|0;i=c[i+4>>2]|0;e=d;c[e>>2]=h;c[e+4>>2]=i;e=d+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>1){d=Sv(d|0,e|0,-1,-1)|0;f=(+(h>>>0)+4294967296.0*+(i|0))/(+(d>>>0)+4294967296.0*+(L()|0));d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[j>>3]=f;g[k>>3]=+g[j>>3];if(!(+g[j>>3]==+g[k>>3])){Ra=l;return}g[d>>3]=f;b[e>>1]=8;Ra=l;return}else{d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[j>>3]=0.0;g[k>>3]=+g[j>>3];if(!(+g[j>>3]==+g[k>>3])){Ra=l;return}g[d>>3]=0.0;b[e>>1]=8;Ra=l;return}}function Co(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+8|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Do(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Eo(a){a=a|0;var d=0,e=0.0,f=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){Ra=i;return}j=d+8|0;d=d+16|0;e=(+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0))/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0));d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216))b[a>>1]=1;else Dg(d);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[d>>3]=e;b[a>>1]=8;Ra=i;return}function Fo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+8|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Go(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0;f=c[d+8>>2]|0;if(!(b[f+8>>1]&8192))i=Ic(d,24)|0;else i=c[f+16>>2]|0;if(!i)return;f=i;do if((c[f>>2]|0)==0&(c[f+4>>2]|0)==0){f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){j=Mg(+g[f>>3])|0;k=L()|0;l=13;break}if(!(h&18)){h=i+8|0;c[h>>2]=0;c[h+4>>2]=0;break}else{j=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;k=L()|0;l=13;break}}else{k=f;j=c[k>>2]|0;k=c[k+4>>2]|0;l=13}while(0);if((l|0)==13?(l=i+8|0,c[l>>2]=j,c[l+4>>2]=k,!((k|0)<0|(k|0)==0&j>>>0<1)):0)break;c[d+20>>2]=1;yc(c[d>>2]|0,49664,-1,1,-1)|0}while(0);j=i;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=L()|0;l=i;c[l>>2]=j;c[l+4>>2]=k;return}function Ho(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))l=Ic(a,24)|0;else l=c[d+16>>2]|0;if(!l)return;e=l+8|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if(!((e|0)>0|(e|0)==0&d>>>0>0))return;g=l;f=c[g>>2]|0;g=c[g+4>>2]|0;m=Wv(f|0,g|0,d|0,e|0)|0;L()|0;if(!m){f=l+16|0;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}n=((m|0)<0)<<31>>31;h=Yv(d|0,e|0,m|0,n|0)|0;f=Tv(f|0,g|0,h|0,L()|0)|0;g=L()|0;h=m+1|0;i=((h|0)<0)<<31>>31;j=Yv(f|0,g|0,h|0,i|0)|0;k=L()|0;e=l+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)<(k|0)|(e|0)==(k|0)&d>>>0<j>>>0){f=Wv(d|0,e|0,h|0,i|0)|0;f=Sv(f|0,L()|0,1,0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}else{l=Sv(f|0,g|0,1,0)|0;g=L()|0;f=Tv(d|0,e|0,j|0,k|0)|0;f=Wv(f|0,L()|0,m|0,n|0)|0;f=Sv(l|0,g|0,f|0,L()|0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}}function Io(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Jo(d,e,f){d=d|0;e=e|0;f=f|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,8)|0;else e=c[e+16>>2]|0;if(!e)return;uc(c[e>>2]|0);f=tc(c[f>>2]|0)|0;c[e>>2]=f;if(f|0){d=e+4|0;c[d>>2]=(c[d>>2]|0)+1;return}e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Ko(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function Lo(a){a=a|0;var d=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;d=c[d>>2]|0;if(!d)return;Dc(a,d);return}function Mo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+4|0;a=(c[e>>2]|0)+-1|0;c[e>>2]=a;if(a|0)return;uc(c[d>>2]|0);c[d>>2]=0;return}function No(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;o=x+8|0;p=x;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))r=Ic(f,16)|0;else r=c[h+16>>2]|0;if(!r){Ra=x;return}q=i+4|0;m=c[q>>2]|0;n=m+8|0;l=b[n>>1]&31;h=d[816+l>>0]|0;if((l|16|0)==18){h=a[m+10>>0]|0;j=m+16|0;l=m+12|0;if(!(Lg(c[j>>2]|0,o,c[l>>2]|0,h)|0))h=b[n>>1]|0;else{if(!(Og(c[j>>2]|0,p,c[l>>2]|0,h)|0)){o=p;p=c[o+4>>2]|0;h=m;c[h>>2]=c[o>>2];c[h+4>>2]=p;h=4}else{g[m>>3]=+g[o>>3];h=8}h=b[n>>1]&-3|h;b[n>>1]=h}h=d[816+(h&31)>>0]|0}a:do switch((h&255)<<24>>24){case 1:{h=c[q>>2]|0;j=e[h+8>>1]|0;if(j&4|0){v=h;u=c[v+4>>2]|0;v=c[v>>2]|0;w=27;break a}if(j&8|0){v=Mg(+g[h>>3])|0;u=L()|0;w=27;break a}if(j&18|0){v=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;u=L()|0;w=27}break}case 2:{h=c[q>>2]|0;j=e[h+8>>1]|0;do if(!(j&8)){if(j&4|0){q=h;k=+((c[q>>2]|0)>>>0)+4294967296.0*+(c[q+4>>2]|0);break}if(!(j&18))k=0.0;else k=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else k=+g[h>>3];while(0);h=~~k>>>0;j=+t(k)>=1.0?(k>0.0?~~+H(+s(k/4294967296.0),4294967295.0)>>>0:~~+F((k-+(~~k>>>0))/4294967296.0)>>>0):0;if(k==+(h>>>0)+4294967296.0*+(j|0)){u=j;v=h;w=27}break}default:{}}while(0);if((w|0)==27?!((u|0)<0|(u|0)==0&v>>>0<1):0){q=r;q=Sv(c[q>>2]|0,c[q+4>>2]|0,1,0)|0;w=L()|0;p=r;c[p>>2]=q;c[p+4>>2]=w;if(!((v|0)==(q|0)&(u|0)==(w|0))){Ra=x;return}w=tc(c[i>>2]|0)|0;c[r+8>>2]=w;if(w|0){Ra=x;return}h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(h);h=c[f>>2]|0}c[f+20>>2]=7;h=c[h+32>>2]|0;j=h+81|0;if(a[j>>0]|0){Ra=x;return}if(a[h+82>>0]|0){Ra=x;return}a[j>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;f=h+272|0;c[f>>2]=(c[f>>2]|0)+1;h=c[h+236>>2]|0;if(!h){Ra=x;return}c[h+12>>2]=7;Ra=x;return}c[f+20>>2]=1;yc(c[f>>2]|0,44153,-1,1,-1)|0;Ra=x;return}function Oo(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;d=d+8|0;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function Po(a){a=a|0;return}function Qo(d,e,f){d=d|0;e=e|0;f=f|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,16)|0;else e=c[e+16>>2]|0;if(!e)return;e=e+8|0;if(c[e>>2]|0)return;f=tc(c[f>>2]|0)|0;c[e>>2]=f;if(f|0)return;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Ro(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,16)|0;else d=c[d+16>>2]|0;if(!d)return;d=d+8|0;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function So(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+64|0;p=r+56|0;q=r+48|0;o=r;if(_o(d,e,f,o)|0){Ra=r;return}l=o+40|0;do if(!(a[l>>0]|0)){n=o+42|0;if(a[n>>0]|0){e=c[o+8>>2]|0;if((e+4713|0)>>>0<=14712){i=c[o+12>>2]|0;j=c[o+16>>2]|0;k=e;m=6}}else{i=1;j=1;k=2e3;m=6}if((m|0)==6?(a[o+41>>0]|0)==0:0){e=(i|0)<3;f=k+(e<<31>>31)|0;h=(+(j+2+((f|0)/-100|0)+((f|0)/400|0)+((((e?i+12|0:i)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;f=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;j=o;c[j>>2]=f;c[j+4>>2]=e;a[l>>0]=1;j=o+43|0;if(!(a[j>>0]|0))break;i=G(c[o+20>>2]|0,36e5)|0;i=((c[o+24>>2]|0)*6e4|0)+i|0;h=+g[o+32>>3]*1.0e3;f=Sv(~~h>>>0|0,(+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0)|0,f|0,e|0)|0;f=Sv(f|0,L()|0,i|0,((i|0)<0)<<31>>31|0)|0;e=L()|0;i=o;c[i>>2]=f;c[i+4>>2]=e;i=o+44|0;if(!(a[i>>0]|0))break;m=(c[o+28>>2]|0)*6e4|0;f=Tv(f|0,e|0,m|0,((m|0)<0)<<31>>31|0)|0;e=L()|0;c[o>>2]=f;c[o+4>>2]=e;a[n>>0]=0;a[j>>0]=0;a[i>>0]=0;break}e=o;f=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));a[o+46>>0]=1;f=0;e=0}else{e=o;f=c[e>>2]|0;e=c[e+4>>2]|0}while(0);h=(+(f>>>0)+4294967296.0*+(e|0))/864.0e5;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(e);g[p>>3]=h;g[q>>3]=+g[p>>3];if(!(+g[p>>3]==+g[q>>3])){Ra=r;return}g[e>>3]=h;b[f>>1]=8;Ra=r;return}function To(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+176|0;j=k+152|0;h=k+104|0;i=k;if(_o(b,d,e,h)|0){Ra=k;return}g=h+42|0;a:do if(!(a[g>>0]|0)){do if(a[h+40>>0]|0){e=h;d=c[e>>2]|0;e=c[e+4>>2]|0;if(e>>>0>108096|(e|0)==108096&d>>>0>275971583){d=h;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[h+46>>0]=1;e=0;f=0;d=0;break a}else{e=Sv(d|0,e|0,432e5,0)|0;e=Wv(e|0,L()|0,864e5,0)|0;L()|0;d=~~((+(e|0)+-1867216.25)/36524.25);d=e+1525+d+((d|0)/-4|0)|0;e=~~((+(d|0)+-122.1)/365.25);d=d-((((e&32767)*36525|0)>>>0)/100|0)|0;f=~~(+(d|0)/30.6001);d=d-~~(+(f|0)*30.6001)|0;c[h+16>>2]=d;f=((f|0)<14?-1:-13)+f|0;c[h+12>>2]=f;e=((f|0)>2?-4716:-4715)+e|0;c[h+8>>2]=e;break}}else{c[h+8>>2]=2e3;c[h+12>>2]=1;c[h+16>>2]=1;d=1;f=1;e=2e3}while(0);a[g>>0]=1}else{e=c[h+8>>2]|0;f=c[h+12>>2]|0;d=c[h+16>>2]|0}while(0);c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=d;Cb(100,i,49994,j)|0;if((yc(c[b>>2]|0,i,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}Ra=k;return}function Uo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+176|0;o=p+152|0;m=p+104|0;n=p;if(_o(b,d,e,m)|0){Ra=p;return}l=m+43|0;if(!(a[l>>0]|0)){d=m+40|0;do if(!(a[d>>0]|0)){if(a[m+42>>0]|0){e=c[m+8>>2]|0;if((e+4713|0)>>>0<=14712){h=c[m+12>>2]|0;i=c[m+16>>2]|0;j=e;k=8}}else{h=1;i=1;j=2e3;k=8}if((k|0)==8?(a[m+41>>0]|0)==0:0){e=(h|0)<3;k=j+(e<<31>>31)|0;f=(+(i+2+((k|0)/-100|0)+((k|0)/400|0)+((((e?h+12|0:h)*306001|0)+306001|0)/1e4|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~f>>>0;e=+t(f)>=1.0?(f>0.0?~~+H(+s(f/4294967296.0),4294967295.0)>>>0:~~+F((f-+(~~f>>>0))/4294967296.0)>>>0):0;j=m;c[j>>2]=k;c[j+4>>2]=e;a[d>>0]=1;d=k;break}d=m;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[m+46>>0]=1;d=0;e=0}else{e=m;d=c[e>>2]|0;e=c[e+4>>2]|0}while(0);j=Sv(d|0,e|0,432e5,0)|0;j=Zv(j|0,L()|0,864e5,0)|0;L()|0;f=+(j|0)/1.0e3;j=~~f;e=(j|0)/3600|0;c[m+20>>2]=e;k=(G(e,-3600)|0)+j|0;d=(k|0)/60|0;c[m+24>>2]=d;f=f-+(j|0)+ +((G(d,-60)|0)+k|0);g[m+32>>3]=f;a[m+41>>0]=0;a[l>>0]=1}else{f=+g[m+32>>3];e=c[m+20>>2]|0;d=c[m+24>>2]|0}c[o>>2]=e;c[o+4>>2]=d;c[o+8>>2]=~~f;Cb(100,n,50009,o)|0;if((yc(c[b>>2]|0,n,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}Ra=p;return}function Vo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0;i=Ra;Ra=Ra+176|0;h=i+152|0;e=i+104|0;f=i;if(_o(a,b,d,e)|0){Ra=i;return}dp(e);l=c[e+12>>2]|0;k=c[e+16>>2]|0;j=c[e+20>>2]|0;b=c[e+24>>2]|0;d=~~+g[e+32>>3];c[h>>2]=c[e+8>>2];c[h+4>>2]=l;c[h+8>>2]=k;c[h+12>>2]=j;c[h+16>>2]=b;c[h+20>>2]=d;Cb(100,f,50024,h)|0;if((yc(c[a>>2]|0,f,-1,1,-1)|0)==18){c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0}Ra=i;return}function Wo(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0.0;$=Ra;Ra=Ra+240|0;Y=$+232|0;X=$+224|0;W=$+216|0;V=$+208|0;U=$+200|0;T=$+192|0;S=$+184|0;_=$+176|0;Z=$+168|0;R=$+160|0;Q=$+152|0;O=$+104|0;P=$;if(!f){Ra=$;return}i=c[h>>2]|0;if(!i){Ra=$;return}j=b[i+8>>1]|0;if((j&514)==514?(a[i+10>>0]|0)==1:0)N=c[i+16>>2]|0;else M=6;do if((M|0)==6)if(!(j&1)){N=Gg(i,1)|0;break}else{Ra=$;return}while(0);if(!N){Ra=$;return}if(_o(d,f+-1|0,h+4|0,O)|0){Ra=$;return}i=c[d>>2]|0;k=c[i+32>>2]|0;j=0;h=1;f=0;a:while(1){b:do switch(a[N+j>>0]|0){case 0:break a;case 37:{j=j+1|0;switch(a[N+j>>0]|0){case 37:case 119:break b;case 87:case 83:case 77:case 109:case 72:case 100:{h=Sv(h|0,f|0,1,0)|0;f=L()|0;break b}case 102:{h=Sv(h|0,f|0,8,0)|0;f=L()|0;break b}case 106:{h=Sv(h|0,f|0,3,0)|0;f=L()|0;break b}case 89:{h=Sv(h|0,f|0,8,0)|0;f=L()|0;break b}case 74:case 115:{h=Sv(h|0,f|0,50,0)|0;f=L()|0;break b}default:{M=86;break a}}}default:{}}while(0);h=Sv(h|0,f|0,1,0)|0;j=j+1|0;f=L()|0}if((M|0)==86){Ra=$;return}do if(f>>>0<0|(f|0)==0&h>>>0<100)i=P;else{K=c[k+108>>2]|0;J=((K|0)<0)<<31>>31;if(f>>>0>J>>>0|(f|0)==(J|0)&h>>>0>K>>>0){c[d+20>>2]=18;yc(i,31223,-1,1,0)|0;Ra=$;return}f=aw(0,h|0,32)|0;h=L()|0;c:do if(c[k+272>>2]|0){if(!(a[k+81>>0]|0))M=32}else{do if(!(h>>>0>0|((h|0)==0?f>>>0>(e[k+276>>1]|0)>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];M=k+284|0;c[M>>2]=(c[M>>2]|0)+1;M=33;break c}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];M=k+284|0;c[M>>2]=(c[M>>2]|0)+1;M=33;break c}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;M=32}while(0);if((M|0)==32){i=_d(k,f,h)|0;M=33}if((M|0)==33){if(i|0)break;i=c[d>>2]|0}j=i+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(i);i=c[d>>2]|0}c[d+20>>2]=7;i=c[i+32>>2]|0;j=i+81|0;if(a[j>>0]|0){Ra=$;return}if(a[i+82>>0]|0){Ra=$;return}a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;d=i+272|0;c[d>>2]=(c[d>>2]|0)+1;i=c[i+236>>2]|0;if(!i){Ra=$;return}c[i+12>>2]=7;Ra=$;return}while(0);h=O+40|0;K=O+42|0;do if(!(a[h>>0]|0)){if(a[K>>0]|0){j=c[O+8>>2]|0;if((j+4713|0)>>>0<=14712){l=c[O+12>>2]|0;m=c[O+16>>2]|0;n=j;M=47}}else{l=1;m=1;n=2e3;M=47}if((M|0)==47?(a[O+41>>0]|0)==0:0){f=(l|0)<3;j=n+(f<<31>>31)|0;o=(+(m+2+((j|0)/-100|0)+((j|0)/400|0)+((((f?l+12|0:l)*306001|0)+306001|0)/1e4|0)+(((j*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;j=~~o>>>0;f=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0;k=O;c[k>>2]=j;c[k+4>>2]=f;a[h>>0]=1;k=O+43|0;if(!(a[k>>0]|0))break;h=G(c[O+20>>2]|0,36e5)|0;h=((c[O+24>>2]|0)*6e4|0)+h|0;o=+g[O+32>>3]*1.0e3;j=Sv(~~o>>>0|0,(+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0)|0,j|0,f|0)|0;j=Sv(j|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;h=O;c[h>>2]=j;c[h+4>>2]=f;h=O+44|0;if(!(a[h>>0]|0))break;E=(c[O+28>>2]|0)*6e4|0;E=Tv(j|0,f|0,E|0,((E|0)<0)<<31>>31|0)|0;I=L()|0;J=O;c[J>>2]=E;c[J+4>>2]=I;a[K>>0]=0;a[k>>0]=0;a[h>>0]=0;break}j=O;f=j+48|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(f|0));a[O+46>>0]=1}while(0);dp(O);D=O+16|0;E=O+32|0;I=O+20|0;C=O+8|0;x=O+24|0;y=O+28|0;z=O+41|0;A=O+43|0;B=O+44|0;J=O+12|0;w=0;j=0;d:while(1){f=a[N+j>>0]|0;e:do switch(f<<24>>24){case 0:break d;case 37:{v=j+1|0;u=a[N+v>>0]|0;do switch(u<<24>>24|0){case 100:{c[Q>>2]=c[D>>2];Cb(3,i+w|0,50054,Q)|0;f=w+2|0;j=v;break e}case 102:{o=+g[E>>3];j=i+w|0;g[R>>3]=o>59.999?59.999:o;Cb(7,j,50059,R)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 72:{c[Z>>2]=c[I>>2];Cb(3,i+w|0,50054,Z)|0;f=w+2|0;j=v;break e}case 106:case 87:{r=O;q=c[r>>2]|0;r=c[r+4>>2]|0;j=c[C>>2]|0;h=c[I>>2]|0;l=c[x>>2]|0;m=c[y>>2]|0;o=+g[E>>3];f=a[z>>0]|0;n=a[A>>0]|0;p=a[B>>0]|0;if(a[K>>0]|0)if((j+4713|0)>>>0>14712){k=0;j=0}else M=63;else{j=2e3;M=63}if((M|0)==63){M=0;if(!(f<<24>>24)){k=j+-1|0;aa=(+(((k|0)/-100|0)+431+((k|0)/400|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~aa>>>0;j=+t(aa)>=1.0?(aa>0.0?~~+H(+s(aa/4294967296.0),4294967295.0)>>>0:~~+F((aa-+(~~aa>>>0))/4294967296.0)>>>0):0;if(n<<24>>24){l=(l*6e4|0)+(G(h,36e5)|0)|0;aa=o*1.0e3;h=+t(aa)>=1.0?(aa>0.0?~~+H(+s(aa/4294967296.0),4294967295.0)>>>0:~~+F((aa-+(~~aa>>>0))/4294967296.0)>>>0):0;n=p<<24>>24==0;m=m*6e4|0;m=Tv(0,0,m|0,((m|0)<0)<<31>>31|0)|0;p=L()|0;l=Sv(~~aa>>>0|0,h|0,l|0,((l|0)<0)<<31>>31|0)|0;p=Sv(l|0,L()|0,(n?0:m)|0,(n?0:p)|0)|0;k=Sv(p|0,L()|0,k|0,j|0)|0;j=L()|0}}else{k=0;j=0}}f=Sv(q|0,r|0,432e5,0)|0;h=L()|0;j=Wv(Tv(f|0,h|0,k|0,j|0)|0,L()|0,864e5,0)|0;L()|0;if(u<<24>>24==87){f=Wv(f|0,h|0,864e5,0)|0;f=Zv(f|0,L()|0,7,0)|0;L()|0;c[_>>2]=(7-f+j|0)/7|0;Cb(3,i+w|0,50054,_)|0;f=w+2|0;j=v;break e}else{c[S>>2]=j+1;Cb(4,i+w|0,50066,S)|0;f=w+3|0;j=v;break e}}case 74:{j=i+w|0;u=O;g[T>>3]=(+((c[u>>2]|0)>>>0)+4294967296.0*+(c[u+4>>2]|0))/864.0e5;Cb(20,j,34086,T)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 109:{c[U>>2]=c[J>>2];Cb(3,i+w|0,50054,U)|0;f=w+2|0;j=v;break e}case 77:{c[V>>2]=c[x>>2];Cb(3,i+w|0,50054,V)|0;f=w+2|0;j=v;break e}case 115:{j=i+w|0;q=O;q=Sv(Wv(c[q>>2]|0,c[q+4>>2]|0,1e3,0)|0,L()|0,-413362496,-50)|0;r=L()|0;u=W;c[u>>2]=q;c[u+4>>2]=r;Cb(30,j,32524,W)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 83:{c[X>>2]=~~+g[E>>3];Cb(3,i+w|0,50054,X)|0;f=w+2|0;j=v;break e}case 119:{f=O;f=Zv(Wv(Sv(c[f>>2]|0,c[f+4>>2]|0,1296e5,0)|0,L()|0,864e5,0)|0,L()|0,7,0)|0;L()|0;a[i+w>>0]=f+48;f=w+1|0;j=v;break e}case 89:{j=i+w|0;c[Y>>2]=c[C>>2];Cb(5,j,50071,Y)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}default:{a[i+w>>0]=37;f=w+1|0;j=v;break e}}while(0)}default:{a[i+w>>0]=f;f=w+1|0}}while(0);w=f;j=j+1|0}a[i+w>>0]=0;if((yc(c[d>>2]|0,i,-1,1,(i|0)==(P|0)?-1:116)|0)!=18){Ra=$;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=$;return}function Xo(a,b,c){a=a|0;b=b|0;c=c|0;Uo(a,0,0);return}function Yo(a,b,c){a=a|0;b=b|0;c=c|0;Vo(a,0,0);return}function Zo(a,b,c){a=a|0;b=b|0;c=c|0;To(a,0,0);return}function _o(e,f,h,i){e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;ya=Ra;Ra=Ra+96|0;p=ya+72|0;xa=ya+64|0;va=ya+56|0;wa=ya+8|0;q=ya;l=i;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));if(!f){l=(c[e+12>>2]|0)+56|0;j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;do if((k|0)==0&(j|0)==0){j=c[c[(c[e>>2]|0)+32>>2]>>2]|0;if((c[j>>2]|0)>1?(n=c[j+72>>2]|0,(n|0)!=0):0)j=Xa[n&255](j,l)|0;else{j=Xa[c[j+64>>2]&255](j,xa)|0;u=+g[xa>>3]*864.0e5;e=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;xa=l;c[xa>>2]=~~u>>>0;c[xa+4>>2]=e}if(!j){j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;break}xa=l;c[xa>>2]=0;c[xa+4>>2]=0;c[i>>2]=0;c[i+4>>2]=0;i=1;Ra=ya;return i|0}while(0);xa=i;c[xa>>2]=k;c[xa+4>>2]=j;if(!((j|0)>0|(j|0)==0&k>>>0>0)){i=1;Ra=ya;return i|0}a[i+40>>0]=1;i=0;Ra=ya;return i|0}k=c[h>>2]|0;j=b[k+8>>1]|0;if(((d[816+(j&31)>>0]|0)+-1|0)>>>0<2){j=j&65535;do if(!(j&8)){if(j&4|0){aa=k;m=+((c[aa>>2]|0)>>>0)+4294967296.0*+(c[aa+4>>2]|0);break}if(!(j&18))m=0.0;else m=+Kg(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)}else m=+g[k>>3];while(0);g[i+32>>3]=m;a[i+41>>0]=1;if(m>=0.0&m<5373484.5){u=m*864.0e5+.5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=i;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$;a[i+40>>0]=1}}else{if(!k){i=1;Ra=ya;return i|0}if((j&514)==514?(a[k+10>>0]|0)==1:0)n=c[k+16>>2]|0;else v=25;do if((v|0)==25)if(!(j&1)){n=Gg(k,1)|0;break}else{i=1;Ra=ya;return i|0}while(0);if(!n){i=1;Ra=ya;return i|0}k=(a[n>>0]|0)==45;j=k?n+1|0:n;c[p>>2]=xa;c[p+4>>2]=va;c[p+8>>2]=wa;a:do if((bp(j,49795,p)|0)==3){j=j+10|0;while(1){aa=a[j>>0]|0;if(aa<<24>>24==84?1:(a[880+(aa&255)>>0]&1)!=0)j=j+1|0;else break}do if(ap(j,i)|0)if(!(a[j>>0]|0)){a[i+43>>0]=0;break}else{v=39;break a}while(0);a[i+40>>0]=0;a[i+42>>0]=1;aa=c[xa>>2]|0;c[i+8>>2]=k?0-aa|0:aa;c[i+12>>2]=c[va>>2];c[i+16>>2]=c[wa>>2];if(a[i+44>>0]|0)$o(i)}else v=39;while(0);b:do if((v|0)==39?ap(n,i)|0:0){aa=a[n>>0]|0;j=(d[208+(aa&255)>>0]|0)+-110|0;if(!(aa<<24>>24==0|(j|0)!=0)){k=49791;l=n;do{l=l+1|0;k=k+1|0;aa=a[l>>0]|0;j=(d[208+(aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(aa<<24>>24==0|(j|0)!=0))}c:do if(!j){j=c[e+12>>2]|0;if((a[(c[j+104>>2]|0)+((c[e+16>>2]|0)*20|0)>>0]|0)==64){c[e+20>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=56;break}l=j+56|0;j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;do if((k|0)==0&(j|0)==0){j=c[c[(c[e>>2]|0)+32>>2]>>2]|0;if((c[j>>2]|0)>1?(o=c[j+72>>2]|0,(o|0)!=0):0)j=Xa[o&255](j,l)|0;else{j=Xa[c[j+64>>2]&255](j,p)|0;u=+g[p>>3]*864.0e5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=l;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$}if(!j){j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;break}else{aa=l;c[aa>>2]=0;c[aa+4>>2]=0;aa=i;c[aa>>2]=0;c[aa+4>>2]=0;break c}}while(0);aa=i;c[aa>>2]=k;c[aa+4>>2]=j;if((j|0)>0|(j|0)==0&k>>>0>0){a[i+40>>0]=1;break b}}else v=56;while(0);if((v|0)==56?Lg(n,q,(Eu(n)|0)&1073741823,1)|0:0){m=+g[q>>3];g[i+32>>3]=m;a[i+41>>0]=1;if(!(m>=0.0&m<5373484.5))break;u=m*864.0e5+.5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=i;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$;a[i+40>>0]=1;break}i=1;Ra=ya;return i|0}while(0)}d:do if((f|0)>1){x=e+12|0;y=e+16|0;z=i+41|0;A=i+40|0;B=i+42|0;C=e+20|0;D=i+43|0;E=i+44|0;I=i+32|0;J=i+24|0;K=i+20|0;M=i+45|0;N=i+8|0;O=i+12|0;P=i+16|0;j=i+46|0;Q=wa+40|0;R=wa+42|0;S=wa+41|0;T=wa+46|0;U=wa+8|0;V=wa+12|0;W=wa+16|0;X=wa+43|0;Y=wa+20|0;Z=wa+24|0;_=wa+32|0;$=wa+44|0;aa=wa+28|0;w=1;e:while(1){l=h+(w<<2)|0;n=c[l>>2]|0;k=b[n+8>>1]|0;if((k&514)==514?(a[n+10>>0]|0)==1:0){q=c[n+16>>2]|0;k=n}else if(!(k&1)){q=Gg(n,1)|0;k=c[l>>2]|0}else{q=0;k=n}l=b[k+8>>1]|0;if(!(l&2)){if(!(l&17))v=72}else if((a[k+10>>0]|0)!=1&(l&17)==0)v=72;if((v|0)==72){v=0;Fg(k,1)|0}if(!q){j=1;v=197;break}c[xa>>2]=1;k=a[q>>0]|0;l=k&255;f:do switch(a[208+l>>0]|0){case 108:{if(!(k<<24>>24==0|(l|32|0)!=108)){n=49894;k=q;do{k=k+1|0;n=n+1|0;v=a[k>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0));if(l|0){v=193;break f}}if((a[(c[(c[x>>2]|0)+104>>2]|0)+((c[y>>2]|0)*20|0)>>0]|0)==64){c[C>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=193;break f}else{$o(i);r=cp(i,e,xa)|0;q=L()|0;v=i;q=Sv(c[v>>2]|0,c[v+4>>2]|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=193;break f}}case 117:{o=k<<24>>24==0;if(!(o|(l|32|0)!=117)){k=49904;l=q;do{l=l+1|0;k=k+1|0;r=a[l>>0]|0;n=(d[208+(r&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(n|0)!=0));if(!n)v=87}else v=87;if((v|0)==87?(0,a[z>>0]|0):0){m=+g[I>>3]*1.0e3+21086676.0e7;g[va>>3]=m;if(!(m>=0.0&m<4642690608.0e5)){v=193;break f}a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;r=+t(m)>=1.0?(m>0.0?~~+H(+s(m/4294967296.0),4294967295.0)>>>0:~~+F((m-+(~~m>>>0))/4294967296.0)>>>0):0;v=i;c[v>>2]=~~m>>>0;c[v+4>>2]=r;a[A>>0]=1;a[z>>0]=0;c[xa>>2]=0;v=192;break f}if(!o){n=49914;k=q;do{k=k+1|0;n=n+1|0;v=a[k>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0));if(l|0){v=193;break f}}if((a[(c[(c[x>>2]|0)+104>>2]|0)+((c[y>>2]|0)*20|0)>>0]|0)==64){c[C>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=193;break f}if(a[M>>0]|0){c[xa>>2]=0;v=192;break f}$o(i);k=cp(i,e,xa)|0;l=L()|0;if(!(c[xa>>2]|0)){q=i;q=Tv(c[q>>2]|0,c[q+4>>2]|0,k|0,l|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=cp(i,e,xa)|0;v=Tv(k|0,l|0,v|0,L()|0)|0;r=L()|0;q=i;q=Sv(v|0,r|0,c[q>>2]|0,c[q+4>>2]|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r}a[M>>0]=1;v=193;break}case 119:{g:do if(!(k<<24>>24)){k=49918;v=105}else{o=q;k=49918;l=8;p=7;while(1){o=o+1|0;if(l>>>0<=1)break g;k=k+1|0;l=a[o>>0]|0;if(!(l<<24>>24)){v=105;break g}l=a[208+(l&255)>>0]|0;n=a[208+(d[k>>0]|0)>>0]|0;if(l<<24>>24!=n<<24>>24)break;else{l=p;p=p+-1|0}}sa=l&255;ba=n;v=108}while(0);if((v|0)==105){sa=0;ba=a[208+(d[k>>0]|0)>>0]|0;v=108}if((v|0)==108?(0,(sa|0)!=(ba&255|0)):0){v=193;break f}v=q+8|0;if((Lg(v,va,(Eu(v)|0)&1073741823,1)|0)!=0?(u=+g[va>>3],ua=~~u,u<7.0&((ua|0)>-1&u==+(ua|0))):0){dp(i);a[E>>0]=0;a[A>>0]=0;$o(i);q=i;r=c[q>>2]|0;q=c[q+4>>2]|0;n=Sv(r|0,q|0,1296e5,0)|0;n=Wv(n|0,L()|0,864e5,0)|0;n=Zv(n|0,L()|0,7,0)|0;v=L()|0;k=((ua|0)<0)<<31>>31;o=(v|0)>(k|0)|(v|0)==(k|0)&n>>>0>ua>>>0;l=Sv(n|0,v|0,-7,-1)|0;p=L()|0;v=Tv(ua|0,k|0,(o?l:n)|0,(o?p:v)|0)|0;v=Yv(v|0,L()|0,864e5,0)|0;q=Sv(v|0,L()|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;c[xa>>2]=0;v=192}else v=193;break}case 115:{h:do if(!(k<<24>>24)){k=49927;v=116}else{o=q;k=49927;l=9;p=8;while(1){o=o+1|0;if(l>>>0<=1)break h;k=k+1|0;l=a[o>>0]|0;if(!(l<<24>>24)){v=116;break h}l=a[208+(l&255)>>0]|0;n=a[208+(d[k>>0]|0)>>0]|0;if(l<<24>>24!=n<<24>>24)break;else{l=p;p=p+-1|0}}ta=l&255;ca=n;v=119}while(0);if((v|0)==116){ta=0;ca=a[208+(d[k>>0]|0)>>0]|0;v=119}if((v|0)==119?(v=0,(ta|0)!=(ca&255|0)):0){v=193;break f}l=a[B>>0]|0;do if(a[A>>0]|0){k=q+9|0;if(!(l<<24>>24)){n=i;l=c[n>>2]|0;n=c[n+4>>2]|0;if(n>>>0>108096|(n|0)==108096&l>>>0>275971583){l=i;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));a[j>>0]=1;l=k;break}else{v=Sv(l|0,n|0,432e5,0)|0;v=Wv(v|0,L()|0,864e5,0)|0;L()|0;q=~~((+(v|0)+-1867216.25)/36524.25);q=v+1525+q+((q|0)/-4|0)|0;v=~~((+(q|0)+-122.1)/365.25);q=q-((((v&32767)*36525|0)>>>0)/100|0)|0;r=~~(+(q|0)/30.6001);c[P>>2]=q-~~(+(r|0)*30.6001);r=((r|0)<14?-1:-13)+r|0;c[O>>2]=r;c[N>>2]=((r|0)>2?-4716:-4715)+v;v=129;break}}else l=k}else{if(l<<24>>24){l=q+9|0;break}if(!(a[D>>0]|0)){v=193;break f}c[N>>2]=2e3;c[O>>2]=1;c[P>>2]=1;k=q+9|0;v=129}while(0);if((v|0)==129){a[B>>0]=1;l=k}a[D>>0]=1;c[J>>2]=0;c[K>>2]=0;g[I>>3]=0.0;a[z>>0]=0;a[E>>0]=0;a[A>>0]=0;q=a[l>>0]|0;p=d[208+(q&255)>>0]|0;k=p+-109|0;q=q<<24>>24==0;if(!(q|(k|0)!=0)){n=49937;o=l;do{o=o+1|0;n=n+1|0;v=a[o>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[P>>2]=1;c[xa>>2]=0;v=192;break f}k=p+-121|0;if(!(q|(k|0)!=0)){n=49943;o=l;do{o=o+1|0;n=n+1|0;v=a[o>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[O>>2]=1;c[P>>2]=1;c[xa>>2]=0;v=192;break f}k=p+-100|0;if(!(q|(k|0)!=0)){n=49948;do{l=l+1|0;n=n+1|0;v=a[l>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[xa>>2]=0;v=192}else v=193;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:case 45:case 43:{l=1;i:while(1){k=a[q+l>>0]|0;switch(k<<24>>24){case 58:case 0:break i;default:{}}if(a[880+(k&255)>>0]&1)break;l=l+1|0}k=q+l|0;if(!(Lg(q,va,l,1)|0)){v=149;break e}l=a[k>>0]|0;if(l<<24>>24==58){k=((d[q>>0]|0)+-48|0)>>>0<10?q:q+1|0;l=wa;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));if(!(ap(k,wa)|0)){do if(!(a[Q>>0]|0)){if(a[R>>0]|0){k=c[U>>2]|0;if((k+4713|0)>>>0<=14712){da=c[V>>2]|0;ea=c[W>>2]|0;fa=k;v=156}}else{da=1;ea=1;fa=2e3;v=156}if((v|0)==156?(0,(a[S>>0]|0)==0):0){l=(da|0)<3;k=fa+(l<<31>>31)|0;u=(+(ea+2+((k|0)/-100|0)+((k|0)/400|0)+((((l?da+12|0:da)*306001|0)+306001|0)/1e4|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~u>>>0;l=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;v=wa;c[v>>2]=k;c[v+4>>2]=l;a[Q>>0]=1;if(!(a[X>>0]|0))break;v=G(c[Y>>2]|0,36e5)|0;v=((c[Z>>2]|0)*6e4|0)+v|0;u=+g[_>>3]*1.0e3;k=Sv(~~u>>>0|0,(+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0)|0,k|0,l|0)|0;k=Sv(k|0,L()|0,v|0,((v|0)<0)<<31>>31|0)|0;l=L()|0;v=wa;c[v>>2]=k;c[v+4>>2]=l;if(!(a[$>>0]|0))break;v=(c[aa>>2]|0)*6e4|0;k=Tv(k|0,l|0,v|0,((v|0)<0)<<31>>31|0)|0;l=L()|0;v=wa;c[v>>2]=k;c[v+4>>2]=l;a[R>>0]=0;a[X>>0]=0;a[$>>0]=0;break}l=wa;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));a[T>>0]=1;k=0;l=0}else{l=wa;k=c[l>>2]|0;l=c[l+4>>2]|0}while(0);r=Sv(k|0,l|0,-432e5,-1)|0;r=Zv(r|0,L()|0,864e5,0)|0;v=L()|0;p=(a[q>>0]|0)==45;o=Tv(0,0,r|0,v|0)|0;q=L()|0;r=p?o:r;q=p?q:v;v=wa;c[v>>2]=r;c[v+4>>2]=q;$o(i);a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=i;q=Sv(c[v>>2]|0,c[v+4>>2]|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;c[xa>>2]=0}v=193;break f}if(a[880+(l&255)>>0]&1)do k=k+1|0;while((a[880+(d[k>>0]|0)>>0]&1)!=0);l=(Eu(k)|0)&1073741823;if((l+-3|0)>>>0>7)v=193;else{r=l+-1|0;l=(a[k+r>>0]|32)<<24>>24==115?r:l;$o(i);c[xa>>2]=1;m=+g[va>>3];u=m<0.0?-.5:.5;j:do if((l|0)>0){k:do switch(l|0){case 6:{v=d[k>>0]|0;l=208+v|0;do if((v|32|0)==115){v=d[k+1>>0]|0;l=208+v|0;if((v|32|0)==101){v=d[k+2>>0]|0;l=208+v|0;if((v|32|0)==99){l=d[k+3>>0]|0;if((l|32|0)!=111){ga=208+l|0;ha=111;v=170;break}l=d[k+4>>0]|0;if((l|32|0)!=110){ga=208+l|0;ha=110;v=170;break}l=d[k+5>>0]|0;if((l|32|0)==100)v=171;else{ga=208+l|0;ha=100;v=170}}else{ga=l;ha=99;v=170}}else{ga=l;ha=101;v=170}}else{ga=l;ha=115;v=170}while(0);if((v|0)==170?(v=0,(ha|0)==(d[ga>>0]|0)):0)v=171;if((v|0)==171?(v=0,m>-464269060800.0&m<464269060800.0):0){k=0;break k}r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==109){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==105){l=d[k+2>>0]|0;if((l|32|0)!=110){ia=208+l|0;ja=110;v=178;break}l=d[k+3>>0]|0;if((l|32|0)!=117){ia=208+l|0;ja=117;v=178;break}l=d[k+4>>0]|0;if((l|32|0)!=116){ia=208+l|0;ja=116;v=178;break}k=d[k+5>>0]|0;if((k|32|0)!=101){ia=208+k|0;ja=101;v=178}}else{ia=l;ja=105;v=178}}else{ia=l;ja=109;v=178}while(0);if((v|0)==178?(0,(ja|0)!=(d[ia>>0]|0)):0)break j;if(m>-7737817680.0&m<7737817680.0)k=1;else break j;break}case 4:{v=d[k>>0]|0;l=208+v|0;if((v|32|0)==104){v=d[k+1>>0]|0;l=208+v|0;if((v|32|0)==111){v=d[k+2>>0]|0;l=208+v|0;if((v|32|0)==117){l=d[k+3>>0]|0;if((l|32|0)==114)v=182;else{ka=208+l|0;la=114;v=181}}else{ka=l;la=117;v=181}}else{ka=l;la=111;v=181}}else{ka=l;la=104;v=181}if((v|0)==181?(v=0,(la|0)==(d[ka>>0]|0)):0)v=182;if((v|0)==182?(v=0,m>-128963628.0&m<128963628.0):0){k=2;break k}r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==121){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==101){l=d[k+2>>0]|0;if((l|32|0)!=97){qa=208+l|0;ra=97;v=190;break}k=d[k+3>>0]|0;if((k|32|0)!=114){qa=208+k|0;ra=114;v=190}}else{qa=l;ra=101;v=190}}else{qa=l;ra=121;v=190}while(0);if((v|0)==190?(0,(ra|0)!=(d[qa>>0]|0)):0)break j;if(m>-14713.0&m<14713.0)k=5;else break j;break}case 3:{r=d[k>>0]|0;l=208+r|0;if((r|32|0)==100){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==97){k=d[k+2>>0]|0;if((k|32|0)!=121){ma=208+k|0;na=121;v=184}}else{ma=l;na=97;v=184}}else{ma=l;na=100;v=184}if((v|0)==184?(0,(na|0)!=(d[ma>>0]|0)):0)break j;if(m>-5373485.0&m<5373485.0)k=3;else break j;break}case 5:{r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==109){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==111){r=d[k+2>>0]|0;l=208+r|0;if((r|32|0)==110){l=d[k+3>>0]|0;if((l|32|0)!=116){oa=208+l|0;pa=116;v=187;break}k=d[k+4>>0]|0;if((k|32|0)!=104){oa=208+k|0;pa=104;v=187}}else{oa=l;pa=110;v=187}}else{oa=l;pa=111;v=187}}else{oa=l;pa=109;v=187}while(0);if((v|0)==187?(0,(pa|0)!=(d[oa>>0]|0)):0)break j;if(m>-176546.0&m<176546.0)k=4;else break j;break}default:break j}while(0);switch(a[22816+(k*24|0)>>0]|0){case 1:{dp(i);v=~~m;r=(c[O>>2]|0)+v|0;q=(((r|0)>0?-1:-12)+r|0)/12|0;c[N>>2]=q+(c[N>>2]|0);r=(G(q,-12)|0)+r|0;c[O>>2]=r;a[A>>0]=0;m=m-+(v|0);g[va>>3]=m;break}case 2:{v=~~m;dp(i);c[N>>2]=(c[N>>2]|0)+v;a[A>>0]=0;m=m-+(v|0);g[va>>3]=m;break}default:{}}$o(i);u=u+m*+g[22816+(k*24|0)+16>>3];q=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;r=i;q=Sv(c[r>>2]|0,c[r+4>>2]|0,~~u>>>0|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;c[xa>>2]=0}while(0);a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=193}break}default:v=193}while(0);if((v|0)==192)v=0;else if((v|0)==193?(v=0,c[xa>>2]|0):0){j=1;v=197;break}w=w+1|0;if((w|0)>=(f|0))break d}if((v|0)==149){i=1;Ra=ya;return i|0}else if((v|0)==197){Ra=ya;return j|0}}else j=i+46|0;while(0);$o(i);if(!(a[j>>0]|0)){xa=c[i+4>>2]|0;Ra=ya;return (xa>>>0>108096|(xa|0)==108096&(c[i>>2]|0)>>>0>275971583)&1|0}else{i=1;Ra=ya;return i|0}return 0}function $o(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;j=b+40|0;if(a[j>>0]|0)return;k=b+42|0;if(a[k>>0]|0){h=c[b+8>>2]|0;if((h+4713|0)>>>0<=14712){d=c[b+12>>2]|0;e=c[b+16>>2]|0;f=h;i=4}}else{d=1;e=1;f=2e3;i=4}if((i|0)==4?(a[b+41>>0]|0)==0:0){i=(d|0)<3;h=f+(i<<31>>31)|0;l=(+(e+2+((h|0)/-100|0)+((h|0)/400|0)+((((i?d+12|0:d)*306001|0)+306001|0)/1e4|0)+(((h*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;d=~~l>>>0;e=+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0;h=b;c[h>>2]=d;c[h+4>>2]=e;a[j>>0]=1;h=b+43|0;if(!(a[h>>0]|0))return;f=G(c[b+20>>2]|0,36e5)|0;f=((c[b+24>>2]|0)*6e4|0)+f|0;l=+g[b+32>>3]*1.0e3;d=Sv(~~l>>>0|0,(+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0)|0,d|0,e|0)|0;d=Sv(d|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;f=b;c[f>>2]=d;c[f+4>>2]=e;f=b+44|0;if(!(a[f>>0]|0))return;i=(c[b+28>>2]|0)*6e4|0;i=Tv(d|0,e|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[b>>2]=i;c[b+4>>2]=j;a[k>>0]=0;a[h>>0]=0;a[f>>0]=0;return}d=b;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[b+46>>0]=1;return}function ap(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+48|0;r=t+16|0;h=t+8|0;q=t;p=t+36|0;m=t+32|0;n=t+28|0;o=t+24|0;c[q>>2]=m;c[q+4>>2]=n;if((bp(b,49807,q)|0)!=2){e=1;Ra=t;return e|0}l=b+5|0;if((a[l>>0]|0)==58){c[h>>2]=o;if((bp(b+6|0,49815,h)|0)!=1){e=1;Ra=t;return e|0}h=b+8|0;if((a[h>>0]|0)==46?(i=b+9|0,f=a[i>>0]|0,((f&255)+-48|0)>>>0<10):0){k=0.0;j=1.0;do{k=k*10.0+ +(f<<24>>24)+-48.0;j=j*10.0;i=i+1|0;f=a[i>>0]|0}while(((f&255)+-48|0)>>>0<10);j=k/j}else{j=0.0;i=h}}else{c[o>>2]=0;j=0.0;i=l}a[e+40>>0]=0;a[e+41>>0]=0;a[e+43>>0]=1;c[e+20>>2]=c[m>>2];c[e+24>>2]=c[n>>2];g[e+32>>3]=j+ +(c[o>>2]|0);while(1){f=i+1|0;if(!(a[880+(d[i>>0]|0)>>0]&1))break;else i=f}b=e+28|0;c[b>>2]=0;h=a[i>>0]|0;switch(h<<24>>24){case 45:{h=-1;s=15;break}case 43:{h=1;s=15;break}default:if((h|32)<<24>>24==122){i=0;s=18}else f=0}do if((s|0)==15){c[r>>2]=q;c[r+4>>2]=p;if((bp(f,49819,r)|0)==2){s=G(((c[q>>2]|0)*60|0)+(c[p>>2]|0)|0,h)|0;c[b>>2]=s;f=i+6|0;i=s;s=18;break}e=1;Ra=t;return e|0}while(0);if((s|0)==18){while(1)if(!(a[880+(d[f>>0]|0)>>0]&1))break;else f=f+1|0;a[e+45>>0]=1;h=a[f>>0]|0;f=i}if(h<<24>>24){e=1;Ra=t;return e|0}a[e+44>>0]=(f|0)!=0&1;e=0;Ra=t;return e|0}function bp(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;n=o;c[n>>2]=g;g=e;e=0;a:while(1){h=(d[f>>0]|0)+208&255;m=d[f+1>>0]|0;k=b[31130+((a[f+2>>0]|0)+-97<<1)>>1]|0;l=a[f+3>>0]|0;if(!(h<<24>>24))h=0;else{j=0;i=h;while(1){i=i+-1<<24>>24;h=a[g>>0]|0;if(((h&255)+-48|0)>>>0>=10){g=11;break a}h=(j*10|0)+-48+(h<<24>>24)|0;g=g+1|0;if(!(i<<24>>24))break;else j=h}}if((h|0)<((m<<24)+-805306368>>24|0)|(h|0)>(k&65535|0)){g=11;break}if(!(l<<24>>24)){g=8;break}if(l<<24>>24!=(a[g>>0]|0)){g=11;break}l=(c[n>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[n>>2]=l+4;c[m>>2]=h;g=g+1|0;f=f+4|0;e=e+1|0}if((g|0)==8){l=(c[n>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[n>>2]=l+4;c[m>>2]=h;n=e+1|0;Ra=o;return n|0}else if((g|0)==11){Ra=o;return e|0}return 0}function cp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;o=Ra;Ra=Ra+64|0;m=o;n=o+48|0;h=m;f=h+48|0;do{c[h>>2]=c[b>>2];h=h+4|0;b=b+4|0}while((h|0)<(f|0));dp(m);b=m+8|0;f=c[b>>2]|0;if((f+-1971|0)>>>0>66){c[b>>2]=2e3;c[m+12>>2]=1;c[m+16>>2]=1;c[m+20>>2]=0;c[m+24>>2]=0;g[m+32>>3]=0.0;f=2e3;j=0;k=0}else{j=m+32|0;p=+(~~(+g[j>>3]+.5)|0);g[j>>3]=p;p=p*1.0e3;j=~~p>>>0;k=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0}c[m+28>>2]=0;i=m+40|0;a[i>>0]=0;l=m+42|0;h=(a[l>>0]|0)==0;b=h?1:c[m+12>>2]|0;if(!(a[m+41>>0]|0)){q=(b|0)<3;f=(h?2e3:f)+(q<<31>>31)|0;p=(+((h?3:(c[m+16>>2]|0)+2|0)+((f|0)/-100|0)+((f|0)/400|0)+((((q?b+12|0:b)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;f=~~p>>>0;b=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0;h=m;c[h>>2]=f;c[h+4>>2]=b;a[i>>0]=1;i=m+43|0;if(a[i>>0]|0){h=G(c[m+20>>2]|0,36e5)|0;h=((c[m+24>>2]|0)*6e4|0)+h|0;f=Sv(j|0,k|0,f|0,b|0)|0;f=Sv(f|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;h=m;c[h>>2]=f;c[h+4>>2]=b;h=m+44|0;if(!(a[h>>0]|0))j=m;else{j=m;c[j>>2]=f;c[j+4>>2]=b;a[l>>0]=0;a[i>>0]=0;a[h>>0]=0;j=m}}else j=m}else{h=m;f=h+48|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(f|0));a[m+46>>0]=1;j=m;f=0;b=0}i=Wv(f|0,b|0,1e3,0)|0;L()|0;c[n>>2]=i+-413362496;i=Ha(n|0)|0;if((i|0)==0|(c[7390]|0)!=0){c[d+20>>2]=1;yc(c[d>>2]|0,49952,-1,1,-1)|0;c[e>>2]=1;e=0;q=0;K(e|0);Ra=o;return q|0}b=c[i+16>>2]|0;f=c[i+20>>2]|0;h=b+1|0;if((f+6613|0)>>>0>14712){b=0;f=0}else{d=c[i>>2]|0;d=Yv(d|0,((d|0)<0)<<31>>31|0,1e3,0)|0;q=L()|0;n=G(c[i+8>>2]|0,36e5)|0;m=(h|0)<3;f=f+1900+(m<<31>>31)|0;p=(+(((f|0)/-100|0)+((c[i+12>>2]|0)+2)+((f|0)/400|0)+((((m?b+13|0:h)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;b=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0;f=((c[i+4>>2]|0)*6e4|0)+n|0;f=Sv(d|0,q|0,f|0,((f|0)<0)<<31>>31|0)|0;b=Sv(f|0,L()|0,~~p>>>0|0,b|0)|0;f=L()|0}c[e>>2]=0;q=j;q=Tv(b|0,f|0,c[q>>2]|0,c[q+4>>2]|0)|0;e=L()|0;K(e|0);Ra=o;return q|0}function dp(b){b=b|0;var d=0,e=0,f=0,h=0,i=0.0;d=b+42|0;if(!(a[d>>0]|0)){do if(a[b+40>>0]|0){f=b;e=c[f>>2]|0;f=c[f+4>>2]|0;if(f>>>0>108096|(f|0)==108096&e>>>0>275971583){d=b;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));d=b+46|0;break}else{f=Sv(e|0,f|0,432e5,0)|0;f=Wv(f|0,L()|0,864e5,0)|0;L()|0;h=~~((+(f|0)+-1867216.25)/36524.25);h=f+1525+h+((h|0)/-4|0)|0;f=~~((+(h|0)+-122.1)/365.25);h=h-((((f&32767)*36525|0)>>>0)/100|0)|0;e=~~(+(h|0)/30.6001);c[b+16>>2]=h-~~(+(e|0)*30.6001);e=((e|0)<14?-1:-13)+e|0;c[b+12>>2]=e;c[b+8>>2]=((e|0)>2?-4716:-4715)+f;break}}else{c[b+8>>2]=2e3;c[b+12>>2]=1;c[b+16>>2]=1}while(0);a[d>>0]=1}d=b+43|0;if(a[d>>0]|0)return;$o(b);e=b;e=Sv(c[e>>2]|0,c[e+4>>2]|0,432e5,0)|0;e=Zv(e|0,L()|0,864e5,0)|0;L()|0;i=+(e|0)/1.0e3;e=~~i;h=(e|0)/3600|0;c[b+20>>2]=h;h=(G(h,-3600)|0)+e|0;f=(h|0)/60|0;c[b+24>>2]=f;i=i-+(e|0)+ +((G(f,-60)|0)+h|0);g[b+32>>3]=i;a[b+41>>0]=0;a[d>>0]=1;return}function ep(a){a=a|0;var b=0,d=0,e=0;e=Ra;Ra=Ra+16|0;d=e;b=lu(a+8|0)|0;if(!b){c[d>>2]=a;Db(7,50076,d);d=0;Ra=e;return d|0}else{d=b;c[d>>2]=a;c[d+4>>2]=((a|0)<0)<<31>>31;d=b+8|0;Ra=e;return d|0}return 0}function fp(a){a=a|0;mu(a+-8|0);return}function gp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=Ra;Ra=Ra+16|0;e=f;a=a+-8|0;d=ou(a,b+8|0)|0;if(!d){c[e>>2]=c[a>>2];c[e+4>>2]=b;Db(7,50114,e);e=0;Ra=f;return e|0}else{e=d;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;e=d+8|0;Ra=f;return e|0}return 0}function hp(a){a=a|0;return c[a+-8>>2]|0}function ip(a){a=a|0;return a+7&-8|0}function jp(a){a=a|0;return 0}function kp(a){a=a|0;return}function lp(a){a=a|0;var b=0;a=59188;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));a=(c[7374]|0)==0;c[14811]=a&1;b=c[7376]|0;c[14812]=a&(b|0)!=0?b:0;c[14800]=10;c[14810]=1;return 0}function mp(a){a=a|0;var b=0;a=59188;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function np(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=((c[14811]|0)*52|0)+68|0;h=Sv(i|0,((i|0)<0)<<31>>31|0,-1,-1)|0;g=L()|0;if(g>>>0>0|(g|0)==0&h>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f){e=0;return e|0}}else{f=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){j=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){j=0;return j|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}gw(f|0,0,i|0)|0;if(!(c[14811]|0))g=59188;else{c[f+80>>2]=10;g=f+68|0}h=g+20|0;i=g+34|0;if(!(b[i>>1]|0)){b[i>>1]=1;c[g+44>>2]=h;c[g+48>>2]=h}c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=d;c[f+16>>2]=a+32+d;j=(e|0)!=0;c[f+20>>2]=j&1;wp(f);if(j){c[f+24>>2]=10;e=g+8|0;j=c[e>>2]|0;c[e>>2]=j+10;c[g+12>>2]=-10-j+10+(c[g+4>>2]|0);c[f+4>>2]=g+16}else c[f+4>>2]=f+40;if(c[f+52>>2]|0){j=f;return j|0}up(f);j=0;return j|0}function op(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!(c[a+20>>2]|0))return;e=c[a>>2]|0;d=a+28|0;g=e+4|0;f=(c[g>>2]|0)+(b-(c[d>>2]|0))|0;c[g>>2]=f;c[e+12>>2]=f+10-(c[e+8>>2]|0);c[d>>2]=b;c[a+32>>2]=((b*9|0)>>>0)/10|0;xp(a);return}function pp(a){a=a|0;return c[a+48>>2]|0}function qp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[(c[a+56>>2]|0)+(((b>>>0)%((c[a+52>>2]|0)>>>0)|0)<<2)>>2]|0;a:do if(e|0){f=e;while(1){if((c[f+8>>2]|0)==(b|0))break;e=c[f+16>>2]|0;if(!e)break a;else f=e}e=f+24|0;a=c[e>>2]|0;if(!a){d=f;return d|0}d=c[f+28>>2]|0;c[d+24>>2]=a;c[(c[e>>2]|0)+28>>2]=d;c[e>>2]=0;d=(c[f+20>>2]|0)+44|0;c[d>>2]=(c[d>>2]|0)+-1;d=f;return d|0}while(0);if(!d){d=0;return d|0}d=Ap(a,b,d)|0;return d|0}function rp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;if((d|0)==0?(c[e+16>>2]|0)>>>0<=(c[e+4>>2]|0)>>>0:0){d=e+44|0;c[b+28>>2]=e+20;e=c[d>>2]|0;c[b+24>>2]=e;c[e+28>>2]=b;c[d>>2]=b;b=a+44|0;c[b>>2]=(c[b>>2]|0)+1;return}d=c[b+20>>2]|0;a=(c[d+56>>2]|0)+((((c[b+8>>2]|0)>>>0)%((c[d+52>>2]|0)>>>0)|0)<<2)|0;while(1){f=c[a>>2]|0;e=f+16|0;if((f|0)==(b|0))break;else a=e}c[a>>2]=c[e>>2];f=d+48|0;c[f>>2]=(c[f>>2]|0)+-1;zp(b);return}function sp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[a+52>>2]|0;h=a+56|0;d=(c[h>>2]|0)+(((d>>>0)%(g>>>0)|0)<<2)|0;while(1){f=c[d>>2]|0;if((f|0)==(b|0))break;else d=f+16|0}f=b+16|0;c[d>>2]=c[f>>2];c[b+8>>2]=e;d=(c[h>>2]|0)+(((e>>>0)%(g>>>0)|0)<<2)|0;c[f>>2]=c[d>>2];c[d>>2]=b;d=a+36|0;if((c[d>>2]|0)>>>0>=e>>>0)return;c[d>>2]=e;return}function tp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+36|0;d=c[k>>2]|0;if(d>>>0<b>>>0)return;l=a+52|0;e=c[l>>2]|0;if((d-b|0)>>>0<e>>>0){f=(b>>>0)%(e>>>0)|0;i=(d>>>0)%(e>>>0)|0}else{i=e>>>1;f=i;i=i+-1|0}j=a+56|0;h=a+48|0;while(1){d=(c[j>>2]|0)+(f<<2)|0;e=c[d>>2]|0;if(e|0)do{do if((c[e+8>>2]|0)>>>0>=b>>>0){c[h>>2]=(c[h>>2]|0)+-1;c[d>>2]=c[e+16>>2];a=e+24|0;g=c[a>>2]|0;if(!g){zp(e);break}else{m=c[e+28>>2]|0;c[m+24>>2]=g;c[(c[a>>2]|0)+28>>2]=m;c[a>>2]=0;g=(c[e+20>>2]|0)+44|0;c[g>>2]=(c[g>>2]|0)+-1;zp(e);break}}else d=e+16|0;while(0);e=c[d>>2]|0}while((e|0)!=0);if((f|0)==(i|0))break;f=((f+1|0)>>>0)%((c[l>>2]|0)>>>0)|0}c[k>>2]=b+-1;return}function up(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=c[a>>2]|0;k=a+48|0;a:do if(c[k>>2]|0){b=c[a+36>>2]|0;l=a+52|0;d=c[l>>2]|0;if(b>>>0<d>>>0){e=0;h=(b>>>0)%(d>>>0)|0}else{h=d>>>1;e=h;h=h+-1|0}i=a+56|0;while(1){g=(c[i>>2]|0)+(e<<2)|0;b=c[g>>2]|0;if(b|0)do{c[k>>2]=(c[k>>2]|0)+-1;c[g>>2]=c[b+16>>2];d=b+24|0;f=c[d>>2]|0;if(!f)zp(b);else{m=c[b+28>>2]|0;c[m+24>>2]=f;c[(c[d>>2]|0)+28>>2]=m;c[d>>2]=0;f=(c[b+20>>2]|0)+44|0;c[f>>2]=(c[f>>2]|0)+-1;zp(b)}b=c[g>>2]|0}while((b|0)!=0);if((e|0)==(h|0))break a;e=((e+1|0)>>>0)%((c[l>>2]|0)>>>0)|0}}while(0);l=j+4|0;m=(c[l>>2]|0)-(c[a+28>>2]|0)|0;c[l>>2]=m;l=j+8|0;b=(c[l>>2]|0)-(c[a+24>>2]|0)|0;c[l>>2]=b;c[j+12>>2]=m+10-b;xp(a);b=c[a+64>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+56>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{m=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function vp(a){a=a|0;var b=0,d=0;if(!(c[a+20>>2]|0))return;b=(c[a>>2]|0)+4|0;d=c[b>>2]|0;c[b>>2]=0;xp(a);c[b>>2]=d;return}function wp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=a+52|0;h=c[e>>2]<<1;h=h>>>0>256?h:256;f=Wb(h<<2,0)|0;if(!f)return;g=c[e>>2]|0;d=a+56|0;if(g|0){b=0;do{a=c[(c[d>>2]|0)+(b<<2)>>2]|0;if(a|0)do{k=a+16|0;j=a;a=c[k>>2]|0;i=f+((((c[j+8>>2]|0)>>>0)%(h>>>0)|0)<<2)|0;c[k>>2]=c[i>>2];c[i>>2]=j}while((a|0)!=0);b=b+1|0}while(b>>>0<g>>>0)}qb(c[d>>2]|0);c[d>>2]=f;c[e>>2]=h;return}function xp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=c[a>>2]|0;d=f+48|0;e=f+16|0;f=f+4|0;a:do if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0)do{g=c[d>>2]|0;if(b[g+14>>1]|0)break a;h=g+24|0;i=c[g+28>>2]|0;c[i+24>>2]=c[h>>2];c[(c[h>>2]|0)+28>>2]=i;c[h>>2]=0;h=(c[g+20>>2]|0)+44|0;c[h>>2]=(c[h>>2]|0)+-1;yp(g,1)}while((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0);while(0);if(c[a+48>>2]|0)return;d=a+64|0;e=c[d>>2]|0;if(!e)return;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}c[a+60>>2]=0;c[d>>2]=0;return}function yp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=c[a+20>>2]|0;d=(c[f+56>>2]|0)+((((c[a+8>>2]|0)>>>0)%((c[f+52>>2]|0)>>>0)|0)<<2)|0;while(1){g=c[d>>2]|0;e=g+16|0;if((g|0)==(a|0))break;else d=e}c[d>>2]=c[e>>2];g=f+48|0;c[g>>2]=(c[g>>2]|0)+-1;if(!b)return;zp(a);return}function zp(a){a=a|0;var d=0,e=0;e=c[a+20>>2]|0;a:do if(!(b[a+12>>1]|0)){d=c[a>>2]|0;if(d|0){a=d;do if((c[14816]|0)>>>0<=a>>>0)if((c[14817]|0)>>>0>a>>>0){c[14979]=(c[14979]|0)+-1;c[d>>2]=c[14819];c[14819]=d;d=(c[14820]|0)+1|0;c[14820]=d;c[14821]=(d|0)<(c[14815]|0)&1;break a}else{a=Wa[c[29352>>2]&127](d)|0;break}else a=Wa[c[29352>>2]&127](d)|0;while(0);c[14980]=(c[14980]|0)-a;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{a=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}}else{d=e+60|0;c[a+16>>2]=c[d>>2];c[d>>2]=a}while(0);e=c[e+4>>2]|0;c[e>>2]=(c[e>>2]|0)+-1;return}function Ap(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;m=c[a>>2]|0;q=a+48|0;j=c[q>>2]|0;g=c[a+44>>2]|0;i=j-g|0;if((e|0)==1){if(i>>>0>=(c[m+12>>2]|0)>>>0){d=0;return d|0}if(i>>>0>=(c[a+32>>2]|0)>>>0){d=0;return d|0}if((c[14814]|0)!=0?((c[a+12>>2]|0)+(c[a+8>>2]|0)|0)<=(c[14813]|0):0)e=59284;else e=59072;if(g>>>0<i>>>0&(c[e>>2]|0)!=0){d=0;return d|0}}p=a+52|0;if(j>>>0>=(c[p>>2]|0)>>>0)wp(a);k=c[a+20>>2]|0;do if((k|0)!=0?(h=c[m+48>>2]|0,(b[h+14>>1]|0)==0):0){if(((c[q>>2]|0)+1|0)>>>0<(c[a+28>>2]|0)>>>0){if((c[14814]|0)!=0?((c[a+12>>2]|0)+(c[a+8>>2]|0)|0)<=(c[14813]|0):0)e=59284;else e=59072;if(!(c[e>>2]|0)){r=22;break}}g=h+20|0;i=c[g>>2]|0;l=h+8|0;e=(c[i+56>>2]|0)+((((c[l>>2]|0)>>>0)%((c[i+52>>2]|0)>>>0)|0)<<2)|0;while(1){s=c[e>>2]|0;j=s+16|0;if((s|0)==(h|0))break;else e=j}c[e>>2]=c[j>>2];e=i+48|0;c[e>>2]=(c[e>>2]|0)+-1;e=h+24|0;i=c[h+28>>2]|0;c[i+24>>2]=c[e>>2];c[(c[e>>2]|0)+28>>2]=i;c[e>>2]=0;i=c[g>>2]|0;s=i+44|0;c[s>>2]=(c[s>>2]|0)+-1;if((c[i+16>>2]|0)==(c[a+16>>2]|0)){f=m+16|0;c[f>>2]=k-(c[i+20>>2]|0)+(c[f>>2]|0);f=l;break}else{zp(h);r=22;break}}else r=22;while(0);if((r|0)==22){m=a+60|0;e=c[m>>2]|0;do if(!e){if(((c[q>>2]|0)==0?(n=c[14812]|0,n|0):0)?(o=a+28|0,(c[o>>2]|0)>>>0>=3):0){if((n|0)>0){j=a+16|0;e=c[j>>2]|0;g=((e|0)<0)<<31>>31;h=Yv(e|0,g|0,n|0,((n|0)<0)<<31>>31|0)|0;i=L()|0}else{h=Yv(n|0,((n|0)<0)<<31>>31|0,-1024,-1)|0;i=L()|0;j=a+16|0;g=c[j>>2]|0;e=g;g=((g|0)<0)<<31>>31}e=Yv(e|0,g|0,c[o>>2]|0,0)|0;s=L()|0;o=(i|0)>(s|0)|(i|0)==(s|0)&h>>>0>e>>>0;e=o?e:h;s=Sv(e|0,(o?s:i)|0,-1,-1)|0;o=L()|0;do if(!(o>>>0>0|(o|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](e)|0;break}h=Wa[c[29356>>2]&127](e)|0;if((c[14985]|0)>>>0<e>>>0)c[14985]=e;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){s=c[14978]|0;o=Tv(e|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=s>>>0)&1}g=Wa[c[29340>>2]&127](h)|0;if(g){e=Wa[c[29352>>2]&127](g)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}else g=0}else g=0;while(0);c[a+64>>2]=g;if(!g)e=c[m>>2]|0;else{e=Wa[c[29352>>2]&127](g)|0;i=c[j>>2]|0;e=(e|0)/(i|0)|0;j=c[a+8>>2]|0;k=G(e+-1|0,i)|0;h=g;l=c[m>>2]|0;while(1){s=l;l=h+j|0;c[l>>2]=h;c[l+4>>2]=l+32;b[l+12>>1]=1;b[l+14>>1]=0;c[l+16>>2]=s;c[l+28>>2]=0;e=e+-1|0;if(!e)break;else h=h+i|0}e=g+(k+j)|0;c[m>>2]=e}if(e|0){f=e;r=47;break}}h=c[a+16>>2]|0;if((c[14813]|0)>=(h|0)?(f=c[14819]|0,(f|0)!=0):0){c[14819]=c[f>>2];s=c[14820]|0;c[14820]=s+-1;c[14821]=(s|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<h>>>0)c[14986]=h;e=(c[14979]|0)+1|0;c[14979]=e;if(e>>>0>(c[14983]|0)>>>0)c[14983]=e}else r=54;do if((r|0)==54){s=Sv(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;o=L()|0;if(!(o>>>0>0|(o|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;if(!f){f=0;break}}else{f=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){s=c[14978]|0;o=Tv(e|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=s>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){f=0;break}e=Wa[c[29352>>2]&127](f)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}e=Wa[c[29352>>2]&127](f)|0;if((c[14986]|0)>>>0<h>>>0)c[14986]=h;e=(c[14980]|0)+e|0;c[14980]=e;if(e>>>0>(c[14984]|0)>>>0)c[14984]=e}else f=0}while(0);e=f+(c[a+8>>2]|0)|0;if(!f){s=0;return s|0}else{c[e>>2]=f;c[e+4>>2]=e+32;b[e+12>>1]=0;b[e+14>>1]=0;f=e;break}}else{f=e;r=47}while(0);if((r|0)==47){s=f+16|0;c[m>>2]=c[s>>2];c[s>>2]=0}h=c[a+4>>2]|0;c[h>>2]=(c[h>>2]|0)+1;h=f;g=f+20|0;e=f+24|0;f=f+8|0}s=(d>>>0)%((c[p>>2]|0)>>>0)|0;c[q>>2]=(c[q>>2]|0)+1;c[f>>2]=d;f=a+56|0;c[h+16>>2]=c[(c[f>>2]|0)+(s<<2)>>2];c[g>>2]=a;c[e>>2]=0;c[c[h+4>>2]>>2]=0;c[(c[f>>2]|0)+(s<<2)>>2]=h;f=a+36|0;if((c[f>>2]|0)>>>0>=d>>>0){s=h;return s|0}c[f>>2]=d;s=h;return s|0}function Bp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;jb(a);g=a+20|0;if((c[g>>2]|0)>0){h=a+16|0;f=0;do{b=c[(c[h>>2]|0)+(f<<4)+12>>2]|0;if(b|0?(e=c[b+16>>2]|0,e|0):0){b=e;do{d=c[b+8>>2]|0;if(c[d+56>>2]|0)Cp(a,d);b=c[b>>2]|0}while((b|0)!=0)}f=f+1|0}while((f|0)<(c[g>>2]|0))}b=c[a+344>>2]|0;if(!b){Ti(a);return}do{d=c[(c[b+8>>2]|0)+16>>2]|0;if(d|0)Cp(a,d);b=c[b>>2]|0}while((b|0)!=0);Ti(a);return}function Cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;b=b+64|0;d=c[b>>2]|0;if(!d)return;while(1){e=d+24|0;if((c[d>>2]|0)==(a|0))break;d=c[e>>2]|0;if(!d){f=6;break}else b=e}if((f|0)==6)return;c[b>>2]=c[e>>2];ng(d);return}function Dp(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;b=(c|0)<(f|0)?c:f;a:do if(e){if(!g){k=1;return k|0}if((b|0)>0){i=g;h=b;while(1){b=a[e>>0]|0;if(!(b<<24>>24)){k=7;break}g=a[208+(b&255)>>0]|0;b=a[208+(d[i>>0]|0)>>0]|0;if(g<<24>>24!=b<<24>>24){k=9;break}if((h|0)>1){e=e+1|0;i=i+1|0;h=h+-1|0}else break a}if((k|0)==7){e=0;b=a[208+(d[i>>0]|0)>>0]|0}else if((k|0)==9)e=g&255;j=e-(b&255)|0;k=12}}else{j=((g|0)!=0)<<31>>31;k=12}while(0);if((k|0)==12?j|0:0){k=j;return k|0}k=c-f|0;return k|0}function Ep(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=Xa[(a[b>>0]<<24>>24==1?154:155)&255](d,e)|0;r=b+12|0;m=(c[r>>2]|0)+-1&q;s=b+16|0;i=c[s>>2]|0;a:do if(i|0?(h=c[i+(m<<3)>>2]|0,j=(a[b>>0]|0)==1?79:80,g=c[i+(m<<3)+4>>2]|0,(h|0)!=0&(g|0)!=0):0){l=g;while(1){h=h+-1|0;if(!(Za[j&127](c[l+12>>2]|0,c[l+16>>2]|0,d,e)|0))break;g=c[l>>2]|0;if(!((h|0)!=0&(g|0)!=0))break a;else l=g}g=l+8|0;k=c[g>>2]|0;if(f|0){c[g>>2]=f;b=k;return b|0}h=c[l+4>>2]|0;g=c[l>>2]|0;if(!h){c[b+8>>2]=g;i=g;j=g}else{c[h>>2]=g;j=c[l>>2]|0;i=j}if(i|0)c[i+4>>2]=h;g=c[s>>2]|0;h=g+(m<<3)+4|0;if((c[h>>2]|0)==(l|0))c[h>>2]=j;q=g+(m<<3)|0;f=c[q>>2]|0;c[q>>2]=f+-1;if((f|0)<2)c[h>>2]=0;j=b+1|0;do if(a[j>>0]|0?(n=c[l+12>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{f=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}i=b+4|0;f=c[i>>2]|0;c[i>>2]=f+-1;if((f|0)>=2){b=k;return b|0}h=b+8|0;g=c[h>>2]|0;c[h>>2]=0;h=c[s>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[s>>2]=0;c[r>>2]=0;if(g|0)do{h=g;g=c[g>>2]|0;do if(a[j>>0]|0?(o=c[h+12>>2]|0,o|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{b=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);c[i>>2]=0;b=k;return b|0}while(0);if(!f){b=0;return b|0}g=c[r>>2]|0;do if(!g){if(!(mb()|0)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](64)|0;if(!g)break}else{g=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){p=c[14978]|0;o=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=p>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h)break;g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;g=h}else g=h}i=g;j=i+64|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));h=c[s>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[s>>2]=g;c[r>>2]=8;n=(a[b>>0]|0)==1?154:155;m=b+8|0;h=c[m>>2]|0;c[m>>2]=0;if(!h){g=8;k=69}else{do{k=(Xa[n&255](c[h+12>>2]|0,c[h+16>>2]|0)|0)&7;j=h;h=c[h>>2]|0;l=g+(k<<3)+4|0;i=c[l>>2]|0;if(!i){i=c[m>>2]|0;c[j>>2]=i;if(i|0)c[i+4>>2]=j;c[j+4>>2]=0;i=m}else{c[j>>2]=i;i=i+4|0;c[j+4>>2]=c[i>>2];p=c[i>>2]|0;c[((p|0)==0?m:p)>>2]=j}c[i>>2]=j;p=g+(k<<3)|0;c[p>>2]=(c[p>>2]|0)+1;c[l>>2]=j}while((h|0)!=0);g=c[r>>2]|0;k=69}}}else k=69;while(0);do if((k|0)==69){p=b+4|0;if((c[p>>2]|0)>=(g|0)){h=g<<1;g=g<<4;o=pb(g,0)|0;if(!o)break;gw(o|0,0,g|0)|0;g=c[s>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{n=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[s>>2]=o;c[r>>2]=h;n=(a[b>>0]|0)==1?154:155;m=b+8|0;g=c[m>>2]|0;c[m>>2]=0;if(g|0){l=h+-1|0;do{j=(Xa[n&255](c[g+12>>2]|0,c[g+16>>2]|0)|0)&l;i=g;g=c[g>>2]|0;k=o+(j<<3)+4|0;h=c[k>>2]|0;if(!h){h=c[m>>2]|0;c[i>>2]=h;if(h|0)c[h+4>>2]=i;c[i+4>>2]=0;h=m}else{c[i>>2]=h;h=h+4|0;c[i+4>>2]=c[h>>2];t=c[h>>2]|0;c[((t|0)==0?m:t)>>2]=i}c[h>>2]=i;t=o+(j<<3)|0;c[t>>2]=(c[t>>2]|0)+1;c[k>>2]=i}while((g|0)!=0)}}if(mb()|0){t=f;return t|0}do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](20)|0;if(!g){t=f;return t|0}else{i=g;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));l=g;break}}else{g=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){t=c[14978]|0;o=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=t>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){t=f;return t|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g;i=h;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));l=h}while(0);do if((d|0)!=0&(a[b+1>>0]|0)!=0){g=pb(e,((e|0)<0)<<31>>31)|0;if(g|0){gw(g|0,0,e|0)|0;c[l+12>>2]=g;ew(g|0,d|0,e|0)|0;break}c[l+12>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);t=f;return t|0}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);t=f;return t|0}}else c[l+12>>2]=d;while(0);c[l+16>>2]=e;c[p>>2]=(c[p>>2]|0)+1;k=(c[r>>2]|0)+-1&q;i=c[s>>2]|0;j=i+(k<<3)+4|0;g=c[j>>2]|0;if(!g){g=b+8|0;h=c[g>>2]|0;c[l>>2]=h;if(h|0)c[h+4>>2]=l;c[l+4>>2]=0}else{c[l>>2]=g;g=g+4|0;c[l+4>>2]=c[g>>2];t=c[g>>2]|0;c[((t|0)==0?b+8|0:t)>>2]=l}c[g>>2]=l;t=i+(k<<3)|0;c[t>>2]=(c[t>>2]|0)+1;c[j>>2]=l;c[l+8>>2]=f;t=0;return t|0}while(0);c[b+4>>2]=0;t=f;return t|0}function Fp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;e=b+16|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[b+12>>2]=0;if(d|0){f=b+1|0;do{e=d;d=c[d>>2]|0;do if(a[f>>0]|0?(g=c[e+12>>2]|0,g|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{h=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0)}c[b+4>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{h=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function Gp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if(mb()|0){d=7;return d|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](16)|0;if(!f){d=7;return d|0}}else{g=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){i=c[14978]|0;h=Tv(e|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}f=Wa[c[29340>>2]&127](g)|0;if(!f){d=7;return d|0}e=Wa[c[29352>>2]&127](f)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e};c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;i=f+4|0;c[i>>2]=1;do if((a|0)>0){h=0;a:while(1){e=c[b+(h<<2)>>2]|0;g=Eu(e)|0;do if((g|0)==19){if(!(Lu(51058,e,19)|0)){c[i>>2]=1;e=0;break}if(!(Lu(51078,e,19)|0)){c[i>>2]=0;e=0;break}if(!(Lu(51098,e,19)|0)){c[i>>2]=2;e=0}else j=23}else if((g|0)>10)j=23;else{e=1;break a}while(0);do if((j|0)==23){j=0;if(!(Lu(51118,e,11)|0)){e=Lp(f,1,e+11|0,g+-11|0)|0;break}if(Lu(51130,e,11)|0){e=1;break a}e=Lp(f,0,e+11|0,g+-11|0)|0}while(0);h=h+1|0;g=(e|0)==0;if(!((h|0)<(a|0)&g)){j=28;break}}if((j|0)==28)if(g){e=0;break}if(f){g=c[f+12>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);f=0;break}else{j=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);f=0;break}}else f=0}else e=0;while(0);c[d>>2]=f;d=e;return d|0}function Hp(a){a=a|0;var b=0,d=0;if(!a)return 0;b=c[a+12>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Ip(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f};c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=0;c[a+24>>2]=0;c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;c[e>>2]=a;h=0;return h|0}function Jp(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Kp(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;u=c[b>>2]|0;D=b+4|0;z=c[D>>2]|0;E=b+12|0;A=c[E>>2]|0;k=z+A|0;C=c[b+8>>2]|0;z=z+C|0;if((A|0)>=(C|0)){E=101;return E|0}A=u+8|0;x=c[A>>2]|0;C=u+12|0;s=x+-1|0;a:do if((x|0)>0){t=c[C>>2]|0;while(1){m=k+1|0;n=a[k>>0]|0;l=n&255;if((n&255)>191){l=d[2736+(l+-192)>>0]|0;b:do if((m|0)==(z|0))m=z;else while(1){n=a[m>>0]|0;if((n&-64)<<24>>24!=-128)break b;m=m+1|0;l=l<<6|n&63;if((m|0)==(z|0)){m=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=15;else n=1;else{l=65533;y=15}}else if(n<<24>>24>-1)n=(c[24720+(l>>>5<<2)>>2]&1<<(l&31)|0)==0;else y=15;if((y|0)==15){y=0;q=l<<10|1023;n=0;o=405;p=0;do{x=(o+n|0)/2|0;w=q>>>0<(c[23088+(x<<2)>>2]|0)>>>0;p=w?p:x;o=w?x+-1|0:o;n=w?n:x+1|0}while((o|0)>=(n|0));n=c[23088+(p<<2)>>2]|0;n=((n>>>10)+(n&1023)|0)>>>0<=l>>>0}r=n&1;n=s;o=0;while(1){p=(o+n|0)/2|0;x=c[t+(p<<2)>>2]|0;q=(x|0)<(l|0);if((x|0)==(l|0)){n=1;break}n=q?n:p+-1|0;o=q?p+1|0:o;if((n|0)<(o|0)){n=0;break}}if((n|0)!=(r|0)){x=k;break a}if(m>>>0<z>>>0)k=m;else{k=101;break}}return k|0}else{while(1){n=k+1|0;m=a[k>>0]|0;l=m&255;if((m&255)>191){l=d[2736+(l+-192)>>0]|0;c:do if((n|0)==(z|0))m=z;else while(1){m=a[n>>0]|0;if((m&-64)<<24>>24!=-128){m=n;break c}n=n+1|0;l=l<<6|m&63;if((n|0)==(z|0)){m=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=32;else{x=k;break a}else{l=65533;y=32}}else if(m<<24>>24>-1)if(!(c[24720+(l>>>5<<2)>>2]&1<<(l&31))){x=k;m=n;break a}else k=n;else{m=n;y=32}if((y|0)==32){y=0;q=l<<10|1023;n=0;o=405;p=0;do{x=(o+n|0)/2|0;w=q>>>0<(c[23088+(x<<2)>>2]|0)>>>0;p=w?p:x;o=w?x+-1|0:o;n=w?n:x+1|0}while((o|0)>=(n|0));x=c[23088+(p<<2)>>2]|0;if(((x>>>10)+(x&1023)|0)>>>0>l>>>0)k=m;else{x=k;break a}}if(k>>>0>=z>>>0){k=101;break}}return k|0}while(0);w=b+20|0;k=c[w>>2]|0;v=b+24|0;u=u+4|0;p=k;while(1){o=p;n=c[v>>2]|0;if((o-k|0)<(n+-4|0))t=p;else{if(mb()|0){k=7;y=86;break}y=n+64|0;k=sb(k,y,((y|0)<0)<<31>>31)|0;if(!k){k=7;y=86;break}t=k+(o-(c[w>>2]|0))|0;c[w>>2]=k;c[v>>2]=(c[v>>2]|0)+64}q=c[u>>2]|0;do if((l|0)>=128){if((l|0)>=65536)if((l+-66560|0)>>>0<40){l=l+40|0;y=58;break}else{y=61;break}k=162;o=-1;n=0;do{y=(n+k|0)/2|0;s=(l|0)<(e[24736+(y<<2)>>1]|0);n=s?n:y+1|0;o=s?o:y;k=s?y+-1|0:k}while((k|0)>=(n|0));k=e[24736+(o<<2)>>1]|0;if(((d[24736+(o<<2)+3>>0]|0)+k|0)>(l|0)?(B=d[24736+(o<<2)+2>>0]|0,((l^k)&1&B|0)==0):0)l=l+(e[25392+(B>>>1<<1)>>1]|0)&65535;if(q){p=l<<3|7;k=0;n=125;o=0;do{y=(n+k|0)/2|0;s=p>>>0<(e[25552+(y<<1)>>1]|0)>>>0;o=s?o:y;n=s?y+-1|0:n;k=s?k:y+1|0}while((n|0)>=(k|0));if((q|0)!=2?(a[25808+o>>0]|0)<0:0){y=57;break}y=e[25552+(o<<1)>>1]|0;if(((y>>>3)+(y&7)|0)>=(l|0)){l=a[25808+o>>0]&127;y=57}else y=57}else y=57}else{l=(l+-65|0)>>>0<26?l+32|0:l;y=57}while(0);if((y|0)==57){y=0;if(l)y=58}if((y|0)==58)if((l|0)>=128)if((l|0)>=2048)if((l|0)<65536){o=t;k=3;n=2;p=1;q=224;r=15;y=62}else y=61;else{q=t;k=2;n=1;o=192;p=31;y=63}else{n=t;k=1;y=64}if((y|0)==61){a[t>>0]=l>>>18&7|240;o=t+1|0;k=4;n=3;p=2;q=128;r=63;y=62}if((y|0)==62){a[o>>0]=l>>>12&r|q;q=t+p|0;o=128;p=63;y=63}if((y|0)==63){a[q>>0]=l>>>6&p|o;n=t+n|0;l=l&63|128;y=64}if((y|0)==64){y=0;a[n>>0]=l;t=t+k|0}if(m>>>0>=z>>>0){k=m;y=85;break}k=m+1|0;n=a[m>>0]|0;l=n&255;if((n&255)>191){l=d[2736+(l+-192)>>0]|0;d:do if((k|0)==(z|0))k=z;else while(1){n=a[k>>0]|0;if((n&-64)<<24>>24!=-128)break d;k=k+1|0;l=l<<6|n&63;if((k|0)==(z|0)){k=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=75;else n=1;else{l=65533;y=75}}else if(n<<24>>24>-1)n=(c[24720+(l>>>5<<2)>>2]&1<<(l&31)|0)==0;else y=75;if((y|0)==75){q=l<<10|1023;n=0;o=405;p=0;do{y=(o+n|0)/2|0;s=q>>>0<(c[23088+(y<<2)>>2]|0)>>>0;p=s?p:y;o=s?y+-1|0:o;n=s?n:y+1|0}while((o|0)>=(n|0));n=c[23088+(p<<2)>>2]|0;n=((n>>>10)+(n&1023)|0)>>>0<=l>>>0}s=n&1;n=c[A>>2]|0;e:do if((n|0)>0){r=c[C>>2]|0;n=n+-1|0;o=0;while(1){p=(o+n|0)/2|0;y=c[r+(p<<2)>>2]|0;q=(y|0)<(l|0);if((y|0)==(l|0)){n=1;break e}n=q?n:p+-1|0;o=q?p+1|0:o;if((n|0)<(o|0)){n=0;break}}}else n=0;while(0);if((n|0)==(s|0)){n=l+-768|0;if(n>>>0>49){y=85;break}y=(l|0)<800;if(!(1<<(y?n:l+-800|0)&(y?134389727:221688))){y=85;break}}p=t;m=k;k=c[w>>2]|0}if((y|0)==85){c[E>>2]=k-(c[D>>2]|0);c[f>>2]=c[w>>2];c[g>>2]=t-(c[w>>2]|0);D=c[D>>2]|0;c[h>>2]=x-D;c[i>>2]=m-D;D=b+16|0;E=c[D>>2]|0;c[D>>2]=E+1;c[j>>2]=E;E=0;return E|0}else if((y|0)==86)return k|0;return 0}function Lp(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=f+g|0;n=(g|0)>0;if(!n){q=0;return q|0}m=0;g=f;while(1){j=g+1|0;g=a[g>>0]|0;h=g&255;if((g&255)>191){g=d[2736+(h+-192)>>0]|0;a:do if((j|0)==(p|0)){h=g;g=p}else{h=g;g=j;while(1){i=a[g>>0]|0;if((i&-64)<<24>>24!=-128)break a;g=g+1|0;h=h<<6|i&63;if((g|0)==(p|0)){g=p;break}}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<4194304)q=12;else i=1;else{h=65533;q=12}}else if(g<<24>>24>-1){i=(c[24720+(h>>>5<<2)>>2]&1<<(h&31)|0)==0;g=j}else{g=j;q=12}if((q|0)==12){q=0;l=h<<10|1023;i=0;j=405;k=0;do{o=(j+i|0)/2|0;r=l>>>0<(c[23088+(o<<2)>>2]|0)>>>0;k=r?k:o;j=r?o+-1|0:j;i=r?i:o+1|0}while((j|0)>=(i|0));i=c[23088+(k<<2)>>2]|0;i=((i>>>10)+(i&1023)|0)>>>0<=h>>>0}do if((i&1|0)==(e|0))i=m;else{i=h+-768|0;if(i>>>0<=49?(r=(h|0)<800,1<<(r?i:h+-800|0)&(r?134389727:221688)|0):0){i=m;break}i=m+1|0}while(0);if(g>>>0<p>>>0)m=i;else break}if(!i){r=0;return r|0}o=b+12|0;h=c[o>>2]|0;b=b+8|0;g=c[b>>2]|0;if(mb()|0){r=7;return r|0}m=sb(h,g+i<<2,0)|0;if(!m){r=7;return r|0}g=c[b>>2]|0;if(n)do{j=f+1|0;f=a[f>>0]|0;h=f&255;if((f&255)>191){f=d[2736+(h+-192)>>0]|0;b:do if((j|0)==(p|0)){h=f;f=p}else{h=f;f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24!=-128)break b;f=f+1|0;h=h<<6|i&63;if((f|0)==(p|0)){f=p;break}}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<4194304)q=34;else i=1;else{h=65533;q=34}}else if(f<<24>>24>-1){i=(c[24720+(h>>>5<<2)>>2]&1<<(h&31)|0)==0;f=j}else{f=j;q=34}if((q|0)==34){q=0;l=h<<10|1023;i=0;j=405;k=0;do{r=(j+i|0)/2|0;n=l>>>0<(c[23088+(r<<2)>>2]|0)>>>0;k=n?k:r;j=n?r+-1|0:j;i=n?i:r+1|0}while((j|0)>=(i|0));i=c[23088+(k<<2)>>2]|0;i=((i>>>10)+(i&1023)|0)>>>0<=h>>>0}do if((i&1|0)!=(e|0)){i=h+-768|0;if(i>>>0<=49?(r=(h|0)<800,1<<(r?i:h+-800|0)&(r?134389727:221688)|0):0)break;c:do if((g|0)>0){i=0;do{if((c[m+(i<<2)>>2]|0)>=(h|0))break c;i=i+1|0}while((i|0)<(g|0))}else i=0;while(0);if((g|0)>(i|0)){j=g;do{r=j;j=j+-1|0;c[m+(r<<2)>>2]=c[m+(j<<2)>>2]}while((j|0)>(i|0))}c[m+(i<<2)>>2]=h;g=g+1|0}while(0)}while(f>>>0<p>>>0);c[o>>2]=m;c[b>>2]=g;r=0;return r|0}function Mp(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;j=p;do if((f|1|0)==5){l=c[g+4>>2]|0;k=Eu(l)|0;if((f|0)==5){if((l|0)==0|(k|0)!=4)break;k=d[l>>0]|0;e=208+k|0;if((k|32|0)==116){k=d[l+1>>0]|0;e=208+k|0;if((k|32|0)==101){k=d[l+2>>0]|0;e=208+k|0;if((k|32|0)==109){e=d[l+3>>0]|0;if((e|32|0)!=112){m=208+e|0;n=112;o=5}}else{m=e;n=109;o=5}}else{m=e;n=101;o=5}}else{m=e;n=116;o=5}if((o|0)==5?(n|0)!=(d[m>>0]|0):0)break;k=c[g+12>>2]|0;l=k;k=Eu(k)|0;e=4}else e=3;f=c[g+(e<<2)>>2]|0;j=Eu(f)|0;e=td(b,51150)|0;if(e|0){h=e;Ra=p;return h|0}e=k+306+j|0;n=pb(e,0)|0;if(!n){h=7;Ra=p;return h|0}gw(n|0,0,e|0)|0;m=n+12|0;c[m>>2]=n+16;g=n+304|0;c[n+32>>2]=g;e=g+(k+1)|0;c[n+36>>2]=e;c[n+28>>2]=b;c[n+268>>2]=1;ew(g|0,l|0,k|0)|0;ew(e|0,f|0,j|0)|0;m=c[(c[m>>2]|0)+20>>2]|0;e=a[m>>0]|0;switch(e<<24>>24){case 34:case 39:case 91:case 96:{l=e<<24>>24==91?93:e;f=a[m+1>>0]|0;a:do if(!(f<<24>>24))e=0;else{j=1;e=0;do{k=j+1|0;if(f<<24>>24==l<<24>>24){if((a[m+k>>0]|0)!=l<<24>>24)break a;a[m+e>>0]=l;j=j+2|0}else{a[m+e>>0]=f;j=k}e=e+1|0;f=a[m+j>>0]|0}while(f<<24>>24!=0)}while(0);a[m+e>>0]=0;break}default:{}}c[h>>2]=n;h=0;Ra=p;return h|0}while(0);Wp(i,51219,j);h=1;Ra=p;return h|0}function Np(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(((c[d+8>>2]|0)==1?(e=c[d+12>>2]|0,(c[e>>2]|0)==0):0)?(a[e+4>>0]|0)==0:0)c[d+32>>2]=1;m=c[d>>2]|0;if((m|0)<=0){c[d+20>>2]=0;g[d+40>>3]=2.0e4;return 0}n=c[d+4>>2]|0;b=-1;k=-1;h=-1;e=-1;l=0;while(1){if(!(a[n+(l*12|0)+5>>0]|0))j=h;else{i=a[n+(l*12|0)+4>>0]|0;j=c[n+(l*12|0)>>2]|0;if(!j){b=i<<24>>24==2?l:b;e=i<<24>>24==32|i<<24>>24==4?l:e;h=i<<24>>24==8|i<<24>>24==16?l:h}k=i<<24>>24==2&(j|0)==4?l:k;j=h}l=l+1|0;if((l|0)>=(m|0))break;else h=j}i=d+20|0;if((b|0)<=-1){c[i>>2]=0;h=d+40|0;g[h>>3]=2.0e4;if((e|0)>-1){c[i>>2]=2;c[(c[d+16>>2]|0)+(e<<3)>>2]=1;g[h>>3]=1.0e4;b=2;e=6;f=1.0e4}else{b=1;e=4;f=2.0e4}if((j|0)>-1){c[i>>2]=e;c[(c[d+16>>2]|0)+(j<<3)>>2]=b;f=f*.5;g[h>>3]=f;b=b+1|0}}else{c[i>>2]=1;c[(c[d+16>>2]|0)+(b<<3)>>2]=1;g[d+40>>3]=5.0;b=2;f=5.0}if((k|0)<=-1)return 0;c[(c[d+16>>2]|0)+(k<<3)>>2]=b;g[d+40>>3]=f+-1.0;return 0}function Op(a){a=a|0;var b=0,d=0;b=c[a+12>>2]|0;gc(c[b+56>>2]|0)|0;gc(c[b+60>>2]|0)|0;gc(c[b+64>>2]|0)|0;gc(c[b+68>>2]|0)|0;gc(c[b+72>>2]|0)|0;gc(c[b+76>>2]|0)|0;gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;gc(c[b+116>>2]|0)|0;gc(c[b+120>>2]|0)|0;gc(c[b+124>>2]|0)|0;gc(c[b+128>>2]|0)|0;gc(c[b+132>>2]|0)|0;gc(c[b+136>>2]|0)|0;gc(c[b+140>>2]|0)|0;gc(c[b+144>>2]|0)|0;gc(c[b+148>>2]|0)|0;gc(c[b+152>>2]|0)|0;gc(c[b+156>>2]|0)|0;gc(c[b+160>>2]|0)|0;gc(c[b+164>>2]|0)|0;gc(c[b+168>>2]|0)|0;gc(c[b+172>>2]|0)|0;gc(c[b+176>>2]|0)|0;gc(c[b+180>>2]|0)|0;gc(c[b+184>>2]|0)|0;gc(c[b+188>>2]|0)|0;gc(c[b+192>>2]|0)|0;gc(c[b+196>>2]|0)|0;gc(c[b+200>>2]|0)|0;gc(c[b+204>>2]|0)|0;gc(c[b+208>>2]|0)|0;gc(c[b+212>>2]|0)|0;b=c[b+244>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Pp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](120)|0;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](120)|0;if((c[14985]|0)>>>0<120)c[14985]=120;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}d=a;e=d+120|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b>>2]=a;f=0;return f|0}function Qp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=(c[(c[b>>2]|0)+12>>2]|0)+248|0;e=c[d>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}i=e;if((c[f+304>>2]|0)>>>0<=i>>>0?(c[f+308>>2]|0)>>>0>i>>>0:0){i=f+300|0;c[e>>2]=c[i>>2];c[i>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[d>>2]=0;h=b+4|0;i=b+8|0;d=c[h>>2]|0;if((c[i>>2]|0)>0){g=0;do{d=c[d+(g<<2)>>2]|0;do if(d|0){do if((c[d+56>>2]|0)==0?(j=c[d+64>>2]|0,j|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);do if((a[d+5>>0]|0)==0?(k=c[d+40>>2]|0,k|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);e=c[d+52>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}l=e;if((c[f+304>>2]|0)>>>0<=l>>>0?(c[f+308>>2]|0)>>>0>l>>>0:0){l=f+300|0;c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);g=g+1|0;d=c[h>>2]|0}while((g|0)<(c[i>>2]|0))}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+20|0;e=c[d>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[i>>2]=0;c[h>>2]=0;c[d>>2]=0;d=c[b+60>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+76>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+112>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return 0}else{l=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return 0}return 0}function Rp(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=Ra;Ra=Ra+16|0;u=y+8|0;s=y;x=c[(c[d>>2]|0)+12>>2]|0;if((f|0)==1){q=-1;o=0;w=0;h=1;p=-1}else{h=f&2;p=(h|0)==0;v=(p^1)&1;t=(f&4|0)==0;q=t?-1:v;o=-1;w=1;h=t?v:(h>>>1)+1|0;p=p<<31>>31}t=(h|0)<(i|0)?h:-1;v=d+4|0;l=d+8|0;h=c[v>>2]|0;if((c[l>>2]|0)>0){k=0;do{h=c[h+(k<<2)>>2]|0;do if(h|0){do if((c[h+56>>2]|0)==0?(m=c[h+64>>2]|0,m|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{i=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);do if((a[h+5>>0]|0)==0?(n=c[h+40>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{i=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);f=c[h+52>>2]|0;do if(f|0){i=c[f+20>>2]|0;gc(c[f+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,f);break}z=f;if((c[i+304>>2]|0)>>>0<=z>>>0?(c[i+308>>2]|0)>>>0>z>>>0:0){z=i+300|0;c[f>>2]=c[z>>2];c[z>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{z=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);k=k+1|0;h=c[v>>2]|0}while((k|0)<(c[l>>2]|0))}do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);h=d+20|0;f=c[h>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{z=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[l>>2]=0;c[v>>2]=0;c[h>>2]=0;n=d+60|0;h=c[n>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);h=c[d+112>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);l=v;m=l+116|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));c[d+72>>2]=(w|0)==0?3:19;do if((p&o|0)>-1?(r=c[j>>2]|0,r|0):0){h=b[r+8>>1]|0;if((h&514)==514?(a[r+10>>0]|0)==1:0)h=c[r+16>>2]|0;else{if(h&1)break;h=Gg(r,1)|0}if(h|0){c[s>>2]=h;h=Bb(31408,s)|0;c[n>>2]=h;if(!h){z=7;Ra=y;return z|0}else{z=Eu(h)|0;c[d+64>>2]=z;break}}}while(0);do if((q|0)>-1){h=c[j+(q<<2)>>2]|0;do if(h){f=b[h+8>>1]|0;if((f&514)==514?(a[h+10>>0]|0)==1:0){h=c[h+16>>2]|0;break}if(!(f&1))h=Gg(h,1)|0;else h=0}else h=0;while(0);c[u>>2]=h;h=Bb(31408,u)|0;c[d+76>>2]=h;if(!h){z=7;Ra=y;return z|0}else{z=Eu(h)|0;c[d+80>>2]=z;break}}while(0);a:do if((t|0)>-1){h=c[j+(t<<2)>>2]|0;f=e[h+8>>1]|0;do if(!(f&4)){if(f&8|0){h=Mg(+g[h>>3])|0;L()|0;break}if(!(f&18)){h=0;break a}h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}else h=c[h>>2]|0;while(0);h=(h|0)>0?h:0}else h=0;while(0);c[d+84>>2]=h;f=c[n>>2]|0;k=d+64|0;i=c[k>>2]|0;l=v;m=l+56|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));h=Xp(x,h,0,-2,f,i,0,w,v)|0;if(h|0){z=h;Ra=y;return z|0}c[d+16>>2]=n;h=eq(x,v,c[n>>2]|0,c[k>>2]|0)|0;if(h|0){z=h;Ra=y;return z|0}z=Sp(d)|0;Ra=y;return z|0}function Sp(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=c[(c[b>>2]|0)+12>>2]|0;o=b+96|0;p=o;p=Sv(c[p>>2]|0,c[p+4>>2]|0,1,0)|0;e=L()|0;c[o>>2]=p;c[o+4>>2]=e;o=b+104|0;e=(c[o>>2]|0)+1|0;c[o>>2]=e;p=b+108|0;f=c[p>>2]|0;a:do if((e|0)<(f|0)){g=c[b+112>>2]|0;while(1){n=g+(e<<4)|0;m=c[n+4>>2]|0;if((m|0)>0|(m|0)==0&(c[n>>2]|0)>>>0>0){e=0;break}e=e+1|0;c[o>>2]=e;if((e|0)>=(f|0))break a}return e|0}while(0);e=gq(h,b+4|0)|0;if((e|0)!=100){c[b+88>>2]=1;q=e;return q|0}m=c[b+56>>2]|0;n=c[b+52>>2]|0;e=c[b+76>>2]|0;do if(e|0){j=c[b+80>>2]|0;k=c[b+48>>2]|0;l=(j|0)<(k|0);k=Lu(e,c[b+44>>2]|0,l?j:k)|0;if((k|0)>=0?(k|0)!=0|l^1:0)break;c[b+88>>2]=1;q=0;return q|0}while(0);f=c[p>>2]|0;l=b+112|0;e=c[l>>2]|0;do if((f|0)<2){if(mb()|0){q=7;return q|0}e=sb(e,32,0)|0;if(!e){q=7;return q|0}else{f=c[p>>2]|0;gw(e+(f<<4)|0,0,32-(f<<4)|0)|0;c[l>>2]=e;c[p>>2]=2;f=32;break}}else f=f<<4;while(0);gw(e|0,0,f|0)|0;b:do if((m|0)>0){e=0;f=0;k=0;c:while(1){j=n+k|0;h=a[j>>0]|0;g=h&255;do if(!(g&128)){b=1;i=0;g=h&255}else{i=d[j+1>>0]|0;g=i<<7|g&127;if(!(i&128)){b=2;i=0;break}i=d[j+2>>0]|0;g=i<<14|g&16383;if(!(i&128)){b=3;i=0;break}i=d[j+3>>0]|0;g=i<<21|g&2097151;if(!(i&128)){b=4;i=0;break}h=28;b=j+4|0;g=g&268435455;i=0;do{r=b;b=b+1|0;r=d[r>>0]|0;s=cw(r&127|0,0,h|0)|0;g=Sv(s|0,L()|0,g|0,i|0)|0;i=L()|0;h=h+7|0}while(h>>>0<64&((r&128|0)!=0|0!=0));b=b-j|0}while(0);k=b+k|0;switch(e|0){case 0:{f=c[l>>2]|0;s=f;s=Sv(c[s>>2]|0,c[s+4>>2]|0,1,0)|0;e=L()|0;c[f>>2]=s;c[f+4>>2]=e;f=0;e=1;break}case 1:{if((i|0)>0|(i|0)==0&g>>>0>1){q=(c[l>>2]|0)+16|0;r=q;r=Sv(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;s=L()|0;c[q>>2]=r;c[q+4>>2]=s;q=32}else q=32;break}case 2:{q=32;break}default:{f=g+2|0;if((c[p>>2]|0)<(f|0)){e=c[l>>2]|0;if(mb()|0){e=7;q=46;break c}e=sb(e,f<<4,0)|0;if(!e){e=7;q=46;break c}s=c[p>>2]|0;gw(e+(s<<4)|0,0,f-s<<4|0)|0;c[l>>2]=e;c[p>>2]=f}else e=c[l>>2]|0;f=e+(g+1<<4)|0;s=f;s=Sv(c[s>>2]|0,c[s+4>>2]|0,1,0)|0;e=L()|0;c[f>>2]=s;c[f+4>>2]=e;f=g;e=2}}d:do if((q|0)==32){q=0;switch(g|0){case 0:{if(!i){e=0;break d}break}case 1:{if(!i){e=3;break d}break}default:{}}e=c[l>>2]|0;r=e+(f+1<<4)+8|0;j=r;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;s=L()|0;c[r>>2]=j;c[r+4>>2]=s;e=e+8|0;r=e;r=Sv(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;s=L()|0;c[e>>2]=r;c[e+4>>2]=s;e=2}while(0);if((k|0)>=(m|0))break b}if((q|0)==46)return e|0}while(0);c[o>>2]=0;s=0;return s|0}function Tp(a){a=a|0;return c[a+88>>2]|0}function Up(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,c[a+44>>2]|0,c[a+48>>2]|0,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 1:{a=c[a+104>>2]|0;if(!a){if((yc(c[d>>2]|0,40769,-1,1,0)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}g=a+-1|0;a=c[d>>2]|0;e=((g|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){d=a;c[d>>2]=g;c[d+4>>2]=e;b[f>>1]=4;return 0}else{Pg(a,g,e);return 0}}case 2:{g=(c[a+112>>2]|0)+(c[a+104>>2]<<4)|0;f=c[g>>2]|0;g=c[g+4>>2]|0;a=c[d>>2]|0;e=a+8|0;if(!(b[e>>1]&9216)){d=a;c[d>>2]=f;c[d+4>>2]=g;b[e>>1]=4;return 0}else{Pg(a,f,g);return 0}}case 3:{g=(c[a+112>>2]|0)+(c[a+104>>2]<<4)+8|0;f=c[g>>2]|0;g=c[g+4>>2]|0;a=c[d>>2]|0;e=a+8|0;if(!(b[e>>1]&9216)){d=a;c[d>>2]=f;c[d+4>>2]=g;b[e>>1]=4;return 0}else{Pg(a,f,g);return 0}}default:{g=c[a+84>>2]|0;a=c[d>>2]|0;e=((g|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){d=a;c[d>>2]=g;c[d+4>>2]=e;b[f>>1]=4;return 0}else{Pg(a,g,e);return 0}}}return 0}function Vp(a,b){a=a|0;b=b|0;var d=0;d=a+96|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Wp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+16|0;e=g;f=c[a>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=d;h=Ab(b,e)|0;c[a>>2]=h;Ra=g;return}function Xp(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;M=Ra;Ra=Ra+32|0;p=M+24|0;z=M+16|0;K=M+8|0;H=M;do if((h|0)<0){p=c[d+256>>2]|0;a:do if(p){v=(l|k|0)!=0;b:do if(v){o=c[p+(g*24|0)+12>>2]|0;c[K>>2]=o;if(!o){n=0;break a}if(!j){p=0;t=0;n=0;q=0;s=o;o=0;while(1){if((t|0)==(n|0)){o=t+16|0;n=o<<2;if(mb()|0){r=0;o=p;n=7;q=0;break b}n=sb(q,(n|0)>0?n:0,0)|0;if(!n){r=0;o=p;n=7;q=0;break b}else{r=o;p=n;o=n;q=n}}else r=n;n=t+1|0;c[p+(t<<2)>>2]=s;s=c[c[K>>2]>>2]|0;c[K>>2]=s;if(!s)break;else{t=n;n=r}}}else{p=0;n=0;s=0;u=o;t=0;o=0;while(1){q=u;r=u;if((c[r+16>>2]|0)>=(j|0)?(Lu(c[r+12>>2]|0,i,j)|0)==0:0){if((n|0)==(s|0)){q=n+16|0;o=q<<2;if(mb()|0){r=0;o=p;n=7;q=0;break b}r=sb(t,(o|0)>0?o:0,0)|0;if(!r){r=0;o=p;n=7;q=0;break b}else{p=r;o=r}}else{q=s;r=t}c[p+(n<<2)>>2]=u;s=q;n=n+1|0;q=c[K>>2]|0}else r=t;u=c[q>>2]|0;c[K>>2]=u;if(!u)break;else t=r}}if((n|0)<=1)if((n|0)==1){n=1;G=31;break}else{r=0;o=p;n=0;q=0;break}else{pv(o,n,4,156);G=31;break}}else{q=p+(g*24|0)+20|0;c:do if((c[q>>2]|0?(r=p+(g*24|0)+4|0,s=Xa[(a[r>>0]<<24>>24==1?154:155)&255](i,j)|0,s=(c[p+(g*24|0)+16>>2]|0)+-1&s,t=c[q>>2]|0,t|0):0)?(o=c[t+(s<<3)>>2]|0,u=(a[r>>0]|0)==1?79:80,n=c[t+(s<<3)+4>>2]|0,(o|0)!=0&(n|0)!=0):0){while(1){o=o+-1|0;if(!(Za[u&127](c[n+12>>2]|0,c[n+16>>2]|0,i,j)|0))break;n=c[n>>2]|0;if(!((o|0)!=0&(n|0)!=0))break c}c[K>>2]=n;n=1;p=K;G=31;break b}while(0);c[K>>2]=0;r=0;o=0;n=0;q=0}while(0);if((G|0)==31){n=n<<2;o=n+100|0;q=pb(o,0)|0;if(!q){r=q;o=p;n=7;q=0}else{gw(q|0,0,o|0)|0;c[q>>2]=2147483647;r=q+96|0;c[q+56>>2]=r;ew(r|0,p|0,n|0)|0;r=q;o=p;n=0}}do if(v?o|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{F=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if((n|0)==0&(r|0)!=0){p=m+4|0;o=c[p>>2]|0;do if(!(o&15)){n=c[m>>2]|0;if((mb()|0)==0?(y=sb(n,(o<<2)+64|0,0)|0,y|0):0){c[m>>2]=y;o=c[p>>2]|0;n=y;break}do if((c[r+56>>2]|0)==0?(w=c[r+64>>2]|0,w|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](w);break}else{F=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);break}while(0);do if((a[r+5>>0]|0)==0?(x=c[r+40>>2]|0,x|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{F=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}while(0);n=c[r+52>>2]|0;do if(n|0){o=c[n+20>>2]|0;gc(c[n+16>>2]|0)|0;if(o|0){if(c[o+480>>2]|0){Xd(o,n);break}F=n;if((c[o+304>>2]|0)>>>0<=F>>>0?(c[o+308>>2]|0)>>>0>F>>>0:0){F=o+300|0;c[n>>2]=c[F>>2];c[F>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{F=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if(!q){n=7;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);n=7;break a}else{n=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);n=7;break a}}else n=c[m>>2]|0;while(0);c[p>>2]=o+1;c[n+(o<<2)>>2]=q;n=0}}else n=0;while(0);if(!((h|0)!=-1&(n|0)==0)){m=0;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}q=d+108|0;F=c[q>>2]|0;c[K>>2]=F;o=F;if(!F){p=c[d+20>>2]|0;c[z>>2]=c[d+16>>2];c[z+4>>2]=p;p=Bb(51885,z)|0;if(!p){n=7;break}n=qd(c[d+12>>2]|0,p,-1,133,0,K,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{F=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}o=c[K>>2]|0;c[q>>2]=o;if(n)break}v=o;n=d+252|0;r=c[n>>2]|0;p=((f|0)<0)<<31>>31;r=Yv(r|0,((r|0)<0)<<31>>31|0,f|0,p|0)|0;q=((g|0)<0)<<31>>31;r=Sv(r|0,L()|0,g|0,q|0)|0;r=cw(r|0,L()|0,10)|0;s=L()|0;do if(!(Vc(v,1)|0)){t=c[v+100>>2]|0;u=t+8|0;if(!(b[u>>1]&9216)){G=t;c[G>>2]=r;c[G+4>>2]=s;b[u>>1]=4;break}else{Pg(t,r,s);break}}while(0);r=c[n>>2]|0;r=Yv(r|0,((r|0)<0)<<31>>31|0,f|0,p|0)|0;r=Sv(r|0,L()|0,g|0,q|0)|0;r=cw(r|0,L()|0,10)|0;q=L()|0;r=r|1023;if(!(Vc(v,2)|0)){p=c[v+100>>2]|0;n=p+40|0;p=p+48|0;if(!(b[p>>1]&9216)){G=n;c[G>>2]=r;c[G+4>>2]=q;b[p>>1]=4;G=98;break}else{Pg(n,r,q);G=98;break}}else G=98}else{q=d+104|0;F=c[q>>2]|0;c[K>>2]=F;o=F;if(!F){F=c[d+20>>2]|0;c[p>>2]=c[d+16>>2];c[p+4>>2]=F;p=Bb(51773,p)|0;if(!p){n=7;break}n=qd(c[d+12>>2]|0,p,-1,133,0,K,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{F=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}o=c[K>>2]|0;c[q>>2]=o;if(n)break}n=o;q=c[d+252>>2]|0;q=Yv(q|0,((q|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;q=Sv(q|0,L()|0,g|0,((g|0)<0)<<31>>31|0)|0;q=cw(q|0,L()|0,10)|0;q=Sv(q|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;r=L()|0;if(!(Vc(n,1)|0)){n=c[n+100>>2]|0;p=n+8|0;if(!(b[p>>1]&9216)){G=n;c[G>>2]=q;c[G+4>>2]=r;b[p>>1]=4;G=98;break}else{Pg(n,q,r);G=98;break}}else G=98}while(0);d:do if((G|0)==98){B=o;C=(o|0)==0;D=(i|0)!=0;E=B+120|0;A=(k|0)==0?0:H;F=m+4|0;f=(l|k|0)==0;g=B+40|0;k=B+144|0;l=f&1;n=Gc(B)|0;if((n|0)==100){while(1){y=Oc(B,1)|0;z=L()|0;h=K;c[h>>2]=y;c[h+4>>2]=z;h=Oc(B,2)|0;z=L()|0;y=H;c[y>>2]=h;c[y+4>>2]=z;y=Oc(B,3)|0;z=L()|0;h=Lc(B,4)|0;if(C)q=mc(29576)|0;else{n=c[E>>2]|0;if((n|0)!=0?(e[k>>1]|0)>4:0)n=n+160|0;else{n=c[B>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576}q=mc(n)|0;n=c[B>>2]|0;p=c[g>>2]|0;if((p|0)==3082|(a[n+81>>0]|0)!=0){og(n);n=7}else n=c[n+68>>2]&p;c[g>>2]=n}p=K;n=c[p>>2]|0;p=c[p+4>>2]|0;if((q|0)!=0&(D&((n|0)!=0|(p|0)!=0))){n=Yp(d,i,j,q,h,K,A)|0;if(n|0){G=152;break}p=K;n=c[p>>2]|0;p=c[p+4>>2]|0;if(f){w=H;c[w>>2]=n;c[w+4>>2]=p;w=n;v=p;u=n;r=p}else G=114}else G=114;if((G|0)==114){G=0;r=H;w=n;v=p;u=c[r>>2]|0;r=c[r+4>>2]|0}p=(c[F>>2]|0)+1|0;if((w|0)==0&(v|0)==0){if(!((u|0)==0&(r|0)==0)){n=267;G=152;break}n=h+20|0}else n=0;x=nb(n+96|0)|0;if(!x){n=7;G=152;break}s=x;t=s+96|0;do{c[s>>2]=0;s=s+4|0}while((s|0)<(t|0));c[x>>2]=p;a[x+4>>0]=l;t=x+8|0;c[t>>2]=w;c[t+4>>2]=v;t=x+16|0;c[t>>2]=u;c[t+4>>2]=r;u=x+24|0;c[u>>2]=y;c[u+4>>2]=z;if(!n){y=Sv(w|0,v|0,-1,-1)|0;z=L()|0;h=x+32|0;c[h>>2]=y;c[h+4>>2]=z}else{n=x+96|0;c[x+40>>2]=n;a[x+5>>0]=1;c[x+44>>2]=h;if(h|0)ew(n|0,q|0,h|0)|0;s=n+h|0;t=s+20|0;do{a[s>>0]=0;s=s+1|0}while((s|0)<(t|0))}n=c[F>>2]|0;if(!(n&15)){p=c[m>>2]|0;if(mb()|0)break;p=sb(p,(n<<2)+64|0,0)|0;if(!p)break;c[m>>2]=p;n=c[F>>2]|0}else p=c[m>>2]|0;c[F>>2]=n+1;c[p+(n<<2)>>2]=x;n=Gc(B)|0;if((n|0)!=100)break d}if((G|0)==152)break;do if((c[x+56>>2]|0)==0?(I=c[x+64>>2]|0,I|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](I);break}else{K=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);break}while(0);do if((a[x+5>>0]|0)==0?(J=c[x+40>>2]|0,J|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{K=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}while(0);n=c[x+52>>2]|0;do if(n|0){p=c[n+20>>2]|0;gc(c[n+16>>2]|0)|0;if(p|0){if(c[p+480>>2]|0){Xd(p,n);break}K=n;if((c[p+304>>2]|0)>>>0<=K>>>0?(c[p+308>>2]|0)>>>0>K>>>0:0){K=p+300|0;c[n>>2]=c[K>>2];c[K>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{K=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](x);else{K=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x)}n=7}}while(0);q=o;if(!o){m=0;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}o=c[q>>2]|0;K=q+136|0;m=c[K+4>>2]|0;if((m|0)>0|(m|0)==0&(c[K>>2]|0)>>>0>0)hc(o,q);p=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((p|0)==3082|(a[o+81>>0]|0)!=0){og(o);m=7;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}else{m=c[o+68>>2]&p;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}return 0}function Yp(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;E=F+4|0;C=F;l=a[g>>0]|0;k=l&255;if(k&128){z=d[g+1>>0]|0;k=z<<7|l&127;if(z&128){z=d[g+2>>0]|0;k=z<<14|k&16383;if(z&128){z=d[g+3>>0]|0;k=z<<21|k&2097151;if(!(z&128))z=k;else z=(a[g+4>>0]&7)<<28|k&268435455}else z=k}else z=k}else z=k;y=g+h|0;if(l<<24>>24<=-1)if((a[g+1>>0]|0)<=-1)if((a[g+2>>0]|0)<=-1)if((a[g+3>>0]|0)>-1)k=4;else{k=28;h=g+4|0;do{x=h;h=h+1|0;k=k+7|0}while(k>>>0<64&(a[x>>0]|0)<0);k=h-g|0}else k=3;else k=2;else k=1;n=g+k|0;h=a[n>>0]|0;k=h&255;do if(!(k&128)){m=1;l=h&255;h=0}else{x=d[n+1>>0]|0;k=x<<7|k&127;if(!(x&128)){m=2;l=k;h=0;break}x=d[n+2>>0]|0;k=x<<14|k&16383;if(!(x&128)){m=3;l=k;h=0;break}x=d[n+3>>0]|0;l=x<<21|k&2097151;if(!(x&128)){m=4;h=0;break}k=28;m=n+4|0;l=l&268435455;h=0;do{x=m;m=m+1|0;x=d[x>>0]|0;w=cw(x&127|0,0,k|0)|0;l=Sv(w|0,L()|0,l|0,h|0)|0;h=L()|0;k=k+7|0}while(k>>>0<64&((x&128|0)!=0|0!=0));m=m-n|0}while(0);o=n+m|0;if(o>>>0>y>>>0){E=267;Ra=F;return E|0}a:do if(o>>>0<y>>>0){w=g;x=y;n=i;m=j;g=1;k=0;r=0;t=0;while(1){u=(n|0)!=0;v=(m|0)!=0;if(!(u|v)){h=0;break a}if(!g){p=a[o>>0]|0;g=p&255;if(g&128){s=d[o+1>>0]|0;g=s<<7|p&127;if(s&128){s=d[o+2>>0]|0;g=s<<14|g&16383;if(s&128){s=d[o+3>>0]|0;g=s<<21|g&2097151;if(!(s&128))p=4;else{g=(a[o+4>>0]&7)<<28|g&268435455;p=5}}else p=3}else p=2}else p=1;o=o+p|0}else g=0;q=a[o>>0]|0;p=q&255;if(p&128){s=d[o+1>>0]|0;p=s<<7|q&127;if(s&128){s=d[o+2>>0]|0;p=s<<14|p&16383;if(s&128){s=d[o+3>>0]|0;p=s<<21|p&2097151;if(!(s&128))q=4;else{p=(a[o+4>>0]&7)<<28|p&268435455;q=5}}else q=3}else q=2}else q=1;s=o+q|0;o=s;if((g|0)>(o-w|0)){h=267;break a}if((p|0)==0|(p|0)>(x-o|0)){h=267;break a}o=Sv(p|0,((p|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;q=L()|0;if((q|0)>(r|0)|(q|0)==(r|0)&o>>>0>t>>>0){q=cw(o|0,q|0,1)|0;r=L()|0;if(mb()|0){h=7;break a}o=sb(k,q,r)|0;if(!o){h=7;break a}else k=o}else q=t;ew(k+g|0,s|0,p|0)|0;t=p+g|0;o=s+p|0;g=(t|0)>(f|0);p=Lu(e,k,g?f:t)|0;do if(u){if((p|0)>=0?(p|0)!=0|g^1:0)break;D=n;c[D>>2]=l;c[D+4>>2]=h;D=49}else D=49;while(0);if((D|0)==49){D=0;if(v&(p|0)<0){n=m;c[n>>2]=l;c[n+4>>2]=h;n=0;m=0}else n=0}l=Sv(l|0,h|0,1,0)|0;h=L()|0;if(o>>>0>=y>>>0){D=52;break}else{g=0;t=q}}}else{n=i;m=j;k=0;D=52}while(0);if((D|0)==52){if(n|0){y=n;c[y>>2]=l;c[y+4>>2]=h}if(!m)h=0;else{y=m;c[y>>2]=l;c[y+4>>2]=h;h=0}}do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);if(!((z|0)>1&(h|0)==0)){E=h;Ra=F;return E|0}c[E>>2]=0;c[C>>2]=0;if((i|0)!=0&(j|0)!=0?(B=i,A=c[B>>2]|0,B=c[B+4>>2]|0,z=j,!((A|0)==(c[z>>2]|0)?(B|0)==(c[z+4>>2]|0):0)):0){k=dq(b,A,B,E,C)|0;if(!k)k=Yp(b,e,f,c[E>>2]|0,c[C>>2]|0,i,0)|0;i=c[E>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{B=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[E>>2]=0;if(!k){k=j;i=0;D=71}}else{k=(i|0)==0?j:i;D=71}do if((D|0)==71){k=dq(b,c[k>>2]|0,c[k+4>>2]|0,E,C)|0;if(!k)k=Yp(b,e,f,c[E>>2]|0,c[C>>2]|0,i,j)|0;i=c[E>>2]|0;if(i)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{E=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);E=k;Ra=F;return E|0}function Zp(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[a>>2]|0;b=c[b>>2]|0;d=c[e+16>>2]|0;a=c[b+16>>2]|0;b=Lu(c[e+12>>2]|0,c[b+12>>2]|0,(d|0)<(a|0)?d:a)|0;return ((b|0)==0?d-a|0:b)|0}function _p(b,c){b=b|0;c=c|0;var d=0;if((c|0)<1){c=Eu(b)|0;if((c|0)<=0){d=0;return d|0}}d=0;while(1){d=d<<3^d^a[b>>0];if((c|0)<=1)break;else{b=b+1|0;c=c+-1|0}}d=d&2147483647;return d|0}function $p(b,c){b=b|0;c=c|0;var d=0;if((c|0)<=0){d=0;return d|0}d=0;while(1){d=d<<3^d^a[b>>0];if((c|0)<=1)break;else{b=b+1|0;c=c+-1|0}}d=d&2147483647;return d|0}function aq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((b|0)==(d|0))a=av(a,c,b)|0;else a=1;return a|0}function bq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((b|0)==(d|0))a=Lu(a,c,b)|0;else a=1;return a|0}function cq(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;k=n+24|0;h=n+16|0;g=n;l=n+32|0;m=a+56+(d<<2)|0;i=c[m>>2]|0;c[l>>2]=i;j=i;if(!i){switch(d|0){case 18:{k=c[a+20>>2]|0;d=c[a+224>>2]|0;c[g>>2]=c[a+16>>2];c[g+4>>2]=k;c[g+8>>2]=d;g=Bb(52240,g)|0;d=133;break}case 7:{c[h>>2]=c[a+220>>2];g=Bb(51509,h)|0;d=129;break}default:{g=c[25936+(d<<2)>>2]|0;d=c[a+20>>2]|0;c[k>>2]=c[a+16>>2];c[k+4>>2]=d;g=Bb(g,k)|0;d=133}}if(!g){d=7;i=0}else{d=qd(c[a+12>>2]|0,g,-1,d,0,l,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{a=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}j=c[l>>2]|0;c[m>>2]=j;i=j}}else d=0;if((f|0)==0|(i|0)==0){f=d;c[e>>2]=j;Ra=n;return f|0}m=b[i+16>>1]|0;h=m<<16>>16;if(!(m<<16>>16>0&(d|0)==0)){f=d;c[e>>2]=j;Ra=n;return f|0}g=0;do{d=g;g=g+1|0;d=Yc(i,g,c[f+(d<<2)>>2]|0)|0}while((g|0)<(h|0)&(d|0)==0);c[e>>2]=j;Ra=n;return d|0}function dq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l;k=b+248|0;h=c[k>>2]|0;if(!h){i=b+244|0;h=c[i>>2]|0;if(!h){c[j>>2]=c[b+20>>2];h=Bb(53537,j)|0;c[i>>2]=h;if(!h){f=7;Ra=l;return f|0}}h=ad(c[b+12>>2]|0,c[b+16>>2]|0,h,53549,d,e,0,k)|0}else h=ld(h,d,e)|0;if(h|0){f=h;Ra=l;return f|0}h=c[k>>2]|0;if((h|0)!=0?(c[h+16>>2]|0)!=0:0)j=c[h>>2]|0;else j=0;c[g>>2]=j;if(!f){f=0;Ra=l;return f|0}i=nb(j+20|0)|0;do if(i){h=jd(c[k>>2]|0,i,j,0,81)|0;j=i+j|0;b=j+20|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(b|0));if(h)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);i=0;break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);i=0;break}else h=0}else{i=0;h=7}while(0);c[f>>2]=i;f=h;Ra=l;return f|0}function eq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;m=d+4|0;p=c[m>>2]|0;n=d+28|0;a:do if((c[n>>2]|0)==0?(o=(e|0)==0,(p|0)>0):0){l=0;b:while(1){j=c[(c[d>>2]|0)+(l<<2)>>2]|0;k=j+40|0;h=j+60|0;i=j+64|0;c:do if(o){g=fq(b,j)|0;if(g|0){q=43;break b}}else{do{g=fq(b,j)|0;if(g|0){q=43;break b}if(!(c[k>>2]|0))break c;r=c[h>>2]|0;g=Lu(c[i>>2]|0,e,(r|0)>(f|0)?f:r)|0;g=(g|0)==0?r-f|0:g}while((g|0)<0);if((g|0)!=0&(a[j+4>>0]|0)!=0){if(!(a[j+5>>0]|0)){g=c[k>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{r=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=j+52|0;h=c[g>>2]|0;do if(h|0){i=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,h);break}r=h;if((c[i+304>>2]|0)>>>0<=r>>>0?(c[i+308>>2]|0)>>>0>r>>>0:0){r=i+300|0;c[h>>2]=c[r>>2];c[r>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{r=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[g>>2]=0}c[k>>2]=0}}while(0);if(c[n>>2]|0)break a;l=l+1|0;if((l|0)>=(c[m>>2]|0))break a}if((q|0)==43)return g|0}while(0);e=c[d>>2]|0;n=p+-1|0;if((p|0)<=1){r=0;return r|0}b=n;while(1){d=b;b=b+-1|0;d:do if((d|0)<(p|0)){k=b;j=c[e+(b<<2)>>2]|0;do{l=k;k=k+1|0;f=e+(k<<2)|0;i=c[f>>2]|0;h=(c[j+40>>2]|0)==0;m=i;g=c[i+40>>2]|0;if(!h)if(!g){g=0;q=37}else{o=c[j+60>>2]|0;g=c[i+60>>2]|0;r=o-g|0;g=Lu(c[j+64>>2]|0,c[i+64>>2]|0,(r|0)<0?o:g)|0;g=(g|0)==0?r:g}else q=37;if((q|0)==37){q=0;g=(h&1)-((g|0)==0&1)|0}if(!g)g=(c[i>>2]|0)-(c[j>>2]|0)|0;if((g|0)<0)break d;r=e+(l<<2)|0;j=c[r>>2]|0;c[f>>2]=j;c[r>>2]=m}while((k|0)<(n|0))}while(0);if((d|0)<=1){g=0;break}}return g|0}function fq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=e+72|0;f=c[s>>2]|0;if(!f)f=c[e+40>>2]|0;else f=f+(c[e+76>>2]|0)|0;if((f|0)!=0?(g=e+40|0,h=c[g>>2]|0,f>>>0<(h+(c[e+44>>2]|0)|0)>>>0):0){l=f;i=h;q=g}else r=6;do if((r|0)==6){k=e+56|0;f=c[k>>2]|0;if(f|0){g=c[f>>2]|0;j=e+40|0;f=c[j>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{r=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[j>>2]=0;if(!g){s=0;return s|0}h=c[g+8>>2]|0;i=(c[h>>2]|0)+1|0;c[e+64>>2]=c[g+12>>2];c[e+60>>2]=c[g+16>>2];f=nb(i)|0;if(!f){s=7;return s|0}ew(f|0,c[h+4>>2]|0,i|0)|0;c[e+76>>2]=i;c[e+44>>2]=i;c[s>>2]=f;c[j>>2]=f;c[k>>2]=(c[k>>2]|0)+4;s=0;return s|0}j=e+40|0;if(!(a[e+5>>0]|0)){f=c[j>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=e+52|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}q=g;if((c[h+304>>2]|0)>>>0<=q>>>0?(c[h+308>>2]|0)>>>0>q>>>0:0){q=h+300|0;c[g>>2]=c[q>>2];c[q>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0}c[j>>2]=0;h=e+32|0;g=h;f=c[g>>2]|0;g=c[g+4>>2]|0;q=e+16|0;o=c[q+4>>2]|0;if(!((g|0)<(o|0)|((g|0)==(o|0)?f>>>0<(c[q>>2]|0)>>>0:0))){s=0;return s|0}q=Sv(f|0,g|0,1,0)|0;f=L()|0;o=h;c[o>>2]=q;c[o+4>>2]=f;f=dq(b,q,f,j,e+44|0)|0;if(!f){i=c[j>>2]|0;l=i;q=j;break}else{s=f;return s|0}}while(0);o=e+52|0;h=c[o>>2]|0;a:do if(h){f=i;j=l+20|0;b=e+48|0;k=e+44|0;g=c[b>>2]|0;if((j-f|0)>(g|0)){while(1){i=(c[k>>2]|0)-g|0;i=(i|0)<4096?i:4096;f=jd(h,f+g|0,i,g,81)|0;if(f|0){p=f;r=94;break}h=(c[b>>2]|0)+i|0;c[b>>2]=h;h=(c[q>>2]|0)+h|0;i=h+20|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));g=c[b>>2]|0;m=c[o>>2]|0;if((g|0)==(c[k>>2]|0))break;if(!m){k=0;break a}f=c[q>>2]|0;if((j-f|0)<=(g|0)){k=m;break a}else h=m}if((r|0)==94)return p|0;do if(m|0){f=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,m);break}n=m;if((c[f+304>>2]|0)>>>0<=n>>>0?(c[f+308>>2]|0)>>>0>n>>>0:0){n=f+300|0;c[m>>2]=c[n>>2];c[n>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[o>>2]=0;c[b>>2]=0;k=0}else k=h}else k=0;while(0);g=a[l>>0]|0;f=g&255;if(f&128){n=d[l+1>>0]|0;f=n<<7|g&127;if(n&128){n=d[l+2>>0]|0;f=n<<14|f&16383;if(n&128){n=d[l+3>>0]|0;f=n<<21|f&2097151;if(!(n&128))g=4;else{f=(a[l+4>>0]&7)<<28|f&268435455;g=5}}else g=3}else g=2}else g=1;i=l+g|0;h=a[i>>0]|0;g=h&255;if(g&128){n=d[i+1>>0]|0;g=n<<7|h&127;if(n&128){n=d[i+2>>0]|0;g=n<<14|g&16383;if(n&128){n=d[i+3>>0]|0;g=n<<21|g&2097151;if(!(n&128))h=4;else{g=(a[i+4>>0]&7)<<28|g&268435455;h=5}}else h=3}else h=2}else h=1;m=i+h|0;if((g|0)<1){s=267;return s|0}n=e+44|0;l=m;if(((c[q>>2]|0)+(c[n>>2]|0)-l|0)<(g|0)){s=267;return s|0}b=e+68|0;h=c[b>>2]|0;if((f|0)>(h|0)){s=267;return s|0}i=Sv(g|0,((g|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;j=L()|0;t=((h|0)<0)<<31>>31;do if((j|0)>(t|0)|(j|0)==(t|0)&i>>>0>h>>>0){j=cw(i|0,j|0,1)|0;h=L()|0;k=e+64|0;i=c[k>>2]|0;if(mb()|0){t=7;return t|0}h=sb(i,j,h)|0;if(!h){t=7;return t|0}else{c[k>>2]=h;c[b>>2]=j;h=c[o>>2]|0;break}}else h=k;while(0);b:do if(h|0){b=g+10+l|0;l=e+48|0;i=c[l>>2]|0;k=h;while(1){h=c[q>>2]|0;if((b-h|0)<=(i|0))break b;j=(c[n>>2]|0)-i|0;j=(j|0)<4096?j:4096;h=jd(k,h+i|0,j,i,81)|0;if(h|0){p=h;r=94;break}h=(c[l>>2]|0)+j|0;c[l>>2]=h;h=(c[q>>2]|0)+h|0;i=h+20|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));i=c[l>>2]|0;k=c[o>>2]|0;if((i|0)==(c[n>>2]|0))break;if(!k)break b}if((r|0)==94)return p|0;do if(k|0){h=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,k);break}t=k;if((c[h+304>>2]|0)>>>0<=t>>>0?(c[h+308>>2]|0)>>>0>t>>>0:0){t=h+300|0;c[k>>2]=c[t>>2];c[t>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[o>>2]=0;c[l>>2]=0}while(0);ew((c[e+64>>2]|0)+f|0,m|0,g|0)|0;c[e+60>>2]=g+f;h=m+g|0;f=a[h>>0]|0;g=f&255;i=e+76|0;if(g&128){t=d[h+1>>0]|0;f=t<<7|f&127;if(t&128){t=d[h+2>>0]|0;f=t<<14|f&16383;if(t&128){t=d[h+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){g=f;f=4}else{g=(a[h+4>>0]&7)<<28|f&268435455;f=5}}else{g=f;f=3}}else{g=f;f=2}}else f=1;c[i>>2]=g;f=h+f|0;c[s>>2]=f;c[e+80>>2]=0;if((g|0)>((c[n>>2]|0)-f+(c[q>>2]|0)|0)){t=267;return t|0}if((c[e+48>>2]|0)==0?a[f+(g+-1)>>0]|0:0){t=267;return t|0}t=0;return t|0}\nfunction qk(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Y=Ra;Ra=Ra+96|0;R=Y+32|0;Q=Y+24|0;O=Y+16|0;w=Y+8|0;u=Y;S=Y+56|0;T=Y+84|0;P=f+40|0;X=c[P>>2]|0;c[P>>2]=X+1;P=f+8|0;l=c[P>>2]|0;a:do if(!l){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))W=15;else{V=0;break a}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];V=n+284|0;c[V>>2]=(c[V>>2]|0)+1;break b}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];V=n+284|0;c[V>>2]=(c[V>>2]|0)+1;break b}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;W=15}while(0);if((W|0)==15)m=_d(n,224,0)|0;if(!m)V=0;else{o=m+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[P>>2]=m;Di(m,61,0,1,0)|0;V=m}}else V=l;while(0);N=(h&4|0)!=0;if(i)if(!(c[g+4>>2]&2048))M=i;else{o=c[c[g+20>>2]>>2]|0;p=c[o>>2]|0;c:do if((p|0)>0){l=0;while(1){m=c[o+4+(l*20|0)>>2]|0;n=a[m>>0]|0;if((n+91&255)<2)do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2);if(n<<24>>24==-88)n=a[m+38>>0]|0;switch(n<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0)break c;n=c[m+44>>2]|0;if(!n)break c;M=b[m+32>>1]|0;if(M<<16>>16>-1?(a[(c[n+4>>2]|0)+(M<<16>>16<<4)+12>>0]|0)==0:0)break c;break}default:break c}l=l+1|0;if((l|0)>=(p|0))break c}}else l=0;while(0);M=(l|0)==(p|0)?0:i}else M=0;d:do if(((((((((c[f+36>>2]|0)==0?(c[g+4>>2]&2080|0)==2048:0)?(s=c[g+20>>2]|0,(c[s+52>>2]|0)==0):0)?(c[s+8>>2]&9|0)==0:0)?(c[s+60>>2]|0)==0:0)?(c[s+36>>2]|0)==0:0)?(r=c[s+32>>2]|0,(c[r>>2]|0)==1):0)?(c[r+28>>2]|0)==0:0)?(x=c[r+24>>2]|0,(c[x+56>>2]|0)==0):0){H=c[s>>2]|0;I=c[H>>2]|0;J=(I|0)>0;if(J){l=0;do{if((a[c[H+4+(l*20|0)>>2]>>0]|0)!=-94){W=191;break d}l=l+1|0}while((l|0)<(I|0));if(!s){W=191;break}}m=c[x+72>>2]|0;if(!m)l=-1e6;else{n=c[(c[f>>2]|0)+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}o=l<<16;K=o>>16;p=c[f+116>>2]|0;p=(p|0)==0?f:p;l=p+84|0;m=c[l>>2]|0;n=1<<K;e:do if((((n&m|0)==0?(c[l>>2]=n|m,(o|0)==65536):0)?(v=c[p>>2]|0,t=v+16|0,(c[(c[t>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){l=Pe(c[v>>2]|0,0,v,S,0,542)|0;if(l|0){cd(p,32157,u);c[p+12>>2]=l;break}G=c[S>>2]|0;c[(c[t>>2]|0)+20>>2]=G;l=c[v+92>>2]|0;o=c[G+4>>2]|0;c[o+4>>2]=c[G>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;i=o+36|0;q=(c[p>>2]|0)-(c[i>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;G=(c[14820]|0)+1|0;c[14820]=G;c[14821]=(G|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;W=68;break}else{l=Wa[c[29352>>2]&127](m)|0;W=68}while(0);do if((W|0)==68){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{G=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);G=Se(c[o>>2]|0,p,q)|0;c[i>>2]=(c[p>>2]|0)-(q&65535);if((G|0)!=7)break;l=v+81|0;do if(!(a[l>>0]|0)){if(a[v+82>>0]|0)break;a[l>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;l=v+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[v+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break e}while(0)}while(0);Hj(f,K,c[x+28>>2]|0,0,c[x>>2]|0);G=(I|0)==1;if(G?(b[(c[H+4>>2]|0)+32>>1]|0)<0:0){m=V+108|0;l=c[m>>2]|0;if((c[V+112>>2]|0)>(l|0)){c[m>>2]=l+1;o=c[V+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0))}else l=Di(V,17,0,0,0)|0;Gj(f,X,K,x,108);c[w>>2]=c[x>>2];nk(f,0,39096,w);m=c[m>>2]|0;if(!(a[(c[V>>2]|0)+81>>0]|0))l=(c[V+104>>2]|0)+(((l|0)<0?m+-1|0:l)*20|0)|0;else l=59308;c[l+8>>2]=m;n=1;break}if(J){r=c[g+12>>2]|0;i=a[r>>0]|0;q=r+38|0;s=r+20|0;t=r+20|0;u=x+4|0;v=i<<24>>24==-125;f:do if(i<<24>>24==-88){p=1;i=0;m=a[q>>0]|0;while(1){switch(m<<24>>24){case -87:{l=s;W=95;break}case -125:{l=c[t>>2]|0;W=95;break}default:o=r}g:do if((W|0)==95){W=0;if((c[c[l>>2]>>2]|0)<2){o=r;break}do if(v)l=m;else{if(m<<24>>24==-125){l=-125;break}o=c[(c[s>>2]|0)+4+(i*20|0)>>2]|0;break g}while(0);o=c[(c[c[t>>2]>>2]|0)+4+(i*20|0)>>2]|0;m=l}while(0);l=b[(c[H+4+(i*20|0)>>2]|0)+32>>1]|0;if(l<<16>>16>-1)n=a[(c[u>>2]|0)+(l<<16>>16<<4)+13>>0]|0;else n=68;l=Xj(o)|0;if(n<<24>>24==0|l<<24>>24==0)l=(l|n)<<24>>24==0?65:(l&255)+(n&255)|0;else l=n<<24>>24>66|l<<24>>24>66?67:65;p=((l<<24>>24)+-65|0)>>>0<2?p:n<<24>>24>66&1;i=i+1|0;l=(p|0)!=0;if(!((i|0)<(I|0)&l))break f}}else{o=1;p=0;while(1){switch(i<<24>>24){case -87:{l=s;W=108;break}case -125:{l=c[t>>2]|0;W=108;break}default:m=r}h:do if((W|0)==108){W=0;if((c[c[l>>2]>>2]|0)<2){m=r;break}do if(!v){if((a[q>>0]|0)==-125)break;m=c[(c[s>>2]|0)+4+(p*20|0)>>2]|0;break h}while(0);m=c[(c[c[t>>2]>>2]|0)+4+(p*20|0)>>2]|0}while(0);l=b[(c[H+4+(p*20|0)>>2]|0)+32>>1]|0;if(l<<16>>16>-1)n=a[(c[u>>2]|0)+(l<<16>>16<<4)+13>>0]|0;else n=68;l=Xj(m)|0;if(n<<24>>24==0|l<<24>>24==0)l=(l|n)<<24>>24==0?65:(l&255)+(n&255)|0;else l=n<<24>>24>66|l<<24>>24>66?67:65;o=((l<<24>>24)+-65|0)>>>0<2?o:n<<24>>24>66&1;p=p+1|0;l=(o|0)!=0;if(!((p|0)<(I|0)&l))break f}}while(0);if(!l){W=191;break}}l=c[x+8>>2]|0;if(l){w=cw(1,0,I|0)|0;w=Sv(w|0,L()|0,-1,-1)|0;x=L()|0;y=g+12|0;z=(j|0)==0;D=V+108|0;A=V+112|0;F=V+104|0;C=(M|0)==0;E=f+44|0;B=l;i:while(1){l=b[B+52>>1]|0;m=l&65535;j:do if((I|0)<=(m|0)){if((l&65535)>62|(c[B+36>>2]|0)!=0)break;do if(N){if((I|0)<(e[B+50>>1]|0))break j;if((I|0)>=(m|0))break;if(!(a[B+54>>0]|0))break j}while(0);k:do if(J){u=B+4|0;v=B+32|0;t=0;m=0;l=0;while(1){n=c[y>>2]|0;p=a[n>>0]|0;if(p<<24>>24==-88)o=a[n+38>>0]|0;else o=p;switch(o<<24>>24){case -87:{o=n+20|0;W=135;break}case -125:{o=c[n+20>>2]|0;W=135;break}default:{}}l:do if((W|0)==135){if((c[c[o>>2]>>2]|0)<2)break;do if(p<<24>>24!=-125){if((a[n+38>>0]|0)==-125)break;n=c[(c[n+20>>2]|0)+4+(t*20|0)>>2]|0;break l}while(0);n=c[(c[c[n+20>>2]>>2]|0)+4+(t*20|0)>>2]|0}while(0);o=c[H+4+(t*20|0)>>2]|0;m:do if(!(c[n+4>>2]&256)){do if(o|0){if(!(c[o+4>>2]&256))break;n=Yi(f,o)|0;W=148;break m}while(0);n=Yi(f,n)|0;if(!n){n=Yi(f,o)|0;W=148;break}else{s=c[u>>2]|0;r=b[o+32>>1]|0;W=152;break}}else{n=Yi(f,n)|0;W=148}while(0);n:do if((W|0)==148){W=0;p=c[u>>2]|0;o=b[o+32>>1]|0;if(n|0){s=p;r=o;W=152;break}n=0;do{if((b[p+(n<<1)>>1]|0)==o<<16>>16)break n;n=n+1|0}while((n|0)<(I|0))}while(0);o:do if((W|0)==152){W=0;o=0;while(1){if((b[s+(o<<1)>>1]|0)==r<<16>>16){i=c[n>>2]|0;q=c[(c[v>>2]|0)+(o<<2)>>2]|0;Z=a[i>>0]|0;p=(d[208+(Z&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0;if(!(Z<<24>>24==0|(p|0)!=0))do{i=i+1|0;q=q+1|0;Z=a[i>>0]|0;p=(d[208+(Z&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(Z<<24>>24==0|(p|0)!=0));if(!p){n=o;break o}}o=o+1|0;if((o|0)>=(I|0)){n=o;break}}}while(0);if((n|0)==(I|0))break k;o=cw(1,0,n|0)|0;p=L()|0;if(!((o&m|0)==0&(p&l|0)==0))break k;m=o|m;l=p|l;if(!z)c[j+(t<<2)>>2]=n;t=t+1|0;if((t|0)>=(I|0))break k}}else{m=0;l=0}while(0);if((m|0)==(w|0)&(l|0)==(x|0))break i}while(0);l=c[B+20>>2]|0;if(!l){W=191;break d}else B=l}l=c[D>>2]|0;if((c[A>>2]|0)>(l|0)){c[D>>2]=l+1;o=c[F>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));o=l}else o=Di(V,17,0,0,0)|0;c[O>>2]=c[B>>2];nk(f,0,39143,O);l=c[B+44>>2]|0;m=c[D>>2]|0;if((c[A>>2]|0)>(m|0)){c[D>>2]=m+1;Z=c[F>>2]|0;a[Z+(m*20|0)>>0]=108;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=X;c[Z+(m*20|0)+8>>2]=l;c[Z+(m*20|0)+12>>2]=K;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(V,108,X,l,K)|0;m=c[P>>2]|0;n=Ij(f,B)|0;p:do if(n|0){l=c[m>>2]|0;if(!(a[l+81>>0]|0)){f=c[m+104>>2]|0;Z=(c[m+108>>2]|0)+-1|0;a[f+(Z*20|0)+1>>0]=-9;c[f+(Z*20|0)+16>>2]=n;break}if(c[l+480>>2]|0)break;Z=(c[n>>2]|0)+-1|0;c[n>>2]=Z;if(Z|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break p}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[n>>2]=c[Z>>2];c[Z>>2]=n;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Z=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);n=(d[c[B+28>>2]>>0]|0)+3|0;do if(!C){l=(c[E>>2]|0)+1|0;c[E>>2]=l;c[M>>2]=l;if(!G)break;sk(V,X,l)}while(0);m=c[D>>2]|0;if(!(a[(c[V>>2]|0)+81>>0]|0))l=(c[F>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m}else W=191}else W=191;while(0);do if((W|0)==191){if(h&1|0?(c[g+4>>2]&2048|0)==0:0){O=g+12|0;h=c[O>>2]|0;c[O>>2]=0;Z=S+20|0;a[Z>>0]=1;c[S+4>>2]=127;c[S+8>>2]=128;c[S+24>>2]=0;_j(S,g)|0;Z=a[Z>>0]|0;c[O>>2]=h;if(!(Z<<24>>24)){n=5;break}if((c[c[g+20>>2]>>2]|0)<3){n=5;break}}F=f+132|0;G=c[F>>2]|0;if(!N)if(!M)E=0;else{Z=f+44|0;E=(c[Z>>2]|0)+1|0;c[Z>>2]=E;c[M>>2]=E}else{c[F>>2]=0;E=0}D=c[P>>2]|0;u=g+4|0;l=c[u>>2]|0;do if((l&32|0)==0?(c[f+52>>2]|0)==0:0){if(!(l&33554432)){c[u>>2]=l|33554432;n=f+44|0;l=(c[n>>2]|0)+1|0;c[n>>2]=l;c[g+48>>2]=l;n=D+108|0;m=c[n>>2]|0;o=D+112|0;if((c[o>>2]|0)>(m|0)){Z=m+1|0;c[n>>2]=Z;W=c[D+104>>2]|0;a[W+(m*20|0)>>0]=70;b[W+(m*20|0)+2>>1]=0;c[W+(m*20|0)+4>>2]=0;c[W+(m*20|0)+8>>2]=l;c[W+(m*20|0)+12>>2]=0;c[W+(m*20|0)+16>>2]=0;a[W+(m*20|0)+1>>0]=0;l=Z}else l=(Di(D,70,0,l,0)|0)+1|0;c[g+44>>2]=l;l=c[n>>2]|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;o=c[D+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));m=l;W=223;break}else{m=Di(D,17,0,0,0)|0;W=223;break}}p=D+108|0;l=c[p>>2]|0;i=D+112|0;if((c[i>>2]|0)>(l|0)){c[p>>2]=l+1;o=c[D+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));o=l}else o=Di(D,17,0,0,0)|0;if(c[u>>2]&2048|0){c[Q>>2]=c[(c[g+20>>2]|0)+20>>2];nk(f,0,39174,Q)}l=c[g+48>>2]|0;m=c[g+44>>2]|0;n=c[p>>2]|0;if((c[i>>2]|0)>(n|0)){c[p>>2]=n+1;Z=c[D+104>>2]|0;a[Z+(n*20|0)>>0]=12;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=l;c[Z+(n*20|0)+8>>2]=m;c[Z+(n*20|0)+12>>2]=0;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else Di(D,12,l,m,0)|0;l=c[g+28>>2]|0;m=c[p>>2]|0;if((c[i>>2]|0)>(m|0)){c[p>>2]=m+1;Z=c[D+104>>2]|0;a[Z+(m*20|0)>>0]=111;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=X;c[Z+(m*20|0)+8>>2]=l;c[Z+(m*20|0)+12>>2]=0;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(D,111,X,l,0)|0;m=c[p>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m}else{m=0;W=223}while(0);do if((W|0)==223){s=g+12|0;v=c[s>>2]|0;l=a[v>>0]|0;if(l<<24>>24==-88)l=a[v+38>>0]|0;switch(l<<24>>24){case -87:{l=v+20|0;W=228;break}case -125:{l=c[v+20>>2]|0;W=228;break}default:t=1}if((W|0)==228)t=c[c[l>>2]>>2]|0;c[g+28>>2]=X;C=D+108|0;l=c[C>>2]|0;B=D+112|0;if((c[B>>2]|0)>(l|0)){c[C>>2]=l+1;A=c[D+104>>2]|0;a[A+(l*20|0)>>0]=113;b[A+(l*20|0)+2>>1]=0;c[A+(l*20|0)+4>>2]=X;c[A+(l*20|0)+8>>2]=t;c[A+(l*20|0)+12>>2]=0;c[A+(l*20|0)+16>>2]=0;a[A+(l*20|0)+1>>0]=0;A=l}else A=Di(D,113,X,t,0)|0;q=c[f>>2]|0;p=t+1|0;i=p*5|0;o=i+20|0;r=q+272|0;q:do if(c[r>>2]|0)if(!(a[q+81>>0]|0))W=242;else{z=0;y=1;x=0}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<o>>>0:0))){l=q+300|0;n=c[l>>2]|0;if(n|0){c[l>>2]=c[n>>2];W=q+284|0;c[W>>2]=(c[W>>2]|0)+1;W=243;break q}l=q+296|0;n=c[l>>2]|0;if(!n){l=q+292|0;break}else{c[l>>2]=c[n>>2];W=q+284|0;c[W>>2]=(c[W>>2]|0)+1;W=243;break q}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;W=242}while(0);if((W|0)==242){n=_d(q,o,0)|0;W=243}do if((W|0)==243){if(n|0){c[n+16>>2]=n+20+(p<<2);b[n+6>>1]=t;b[n+8>>1]=p;a[n+4>>0]=a[q+78>>0]|0;c[n+12>>2]=q;c[n>>2]=1;gw(n+24|0,0,i+-4|0)|0;z=n;y=0;x=n;break}l=q+81|0;if((a[l>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[r>>2]=(c[r>>2]|0)+1;l=c[q+236>>2]|0;if(l){c[l+12>>2]=7;z=0;y=1;x=n}else{z=0;y=1;x=n}}else{z=0;y=1;x=n}}while(0);if(!(c[u>>2]&2048)){o=c[g+20>>2]|0;if(!o)o=m;else{Z=Xj(v)|0;a[T>>0]=Z<<24>>24==0?65:Z;if(x|0){Z=Yi(f,c[s>>2]|0)|0;c[x+20>>2]=Z}w=f+19|0;n=a[w>>0]|0;if(n<<24>>24){Z=n+-1<<24>>24;a[w>>0]=Z;l=c[f+148+((Z&255)<<2)>>2]|0;if(!(Z<<24>>24))W=302;else{v=n+-2<<24>>24;a[w>>0]=v;v=c[f+148+((v&255)<<2)>>2]|0}}else{W=f+44|0;l=(c[W>>2]|0)+1|0;c[W>>2]=l;W=302}if((W|0)==302){Z=f+44|0;v=(c[Z>>2]|0)+1|0;c[Z>>2]=v}n=c[o>>2]|0;if((n|0)>0){q=S+20|0;r=S+4|0;s=S+8|0;t=S+24|0;u=D+104|0;i=o+4|0;p=n;while(1){o=c[i>>2]|0;do if(!m)m=0;else{a[q>>0]=1;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(!o)break;_j(S,o)|0;if(a[q>>0]|0)break;n=c[D>>2]|0;if(a[n+81>>0]|0){m=0;break}Z=c[u>>2]|0;Q=Z+(m*20|0)+1|0;R=Z+(m*20|0)+16|0;kg(n,a[Q>>0]|0,c[R>>2]|0);a[Q>>0]=0;c[R>>2]=0;a[Z+(m*20|0)>>0]=-86;m=0}while(0);o=Jj(f,o,l)|0;n=c[C>>2]|0;if((c[B>>2]|0)>(n|0)){c[C>>2]=n+1;Z=c[u>>2]|0;a[Z+(n*20|0)>>0]=92;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=o;c[Z+(n*20|0)+8>>2]=1;c[Z+(n*20|0)+12>>2]=v;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else n=Di(D,92,o,1,v)|0;if(!(a[(c[D>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[C>>2]|0)+-1|0;Ei(D,(c[u>>2]|0)+(n*20|0)|0,T,1)}n=c[C>>2]|0;if((c[B>>2]|0)>(n|0)){c[C>>2]=n+1;Z=c[u>>2]|0;a[Z+(n*20|0)>>0]=-124;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=X;c[Z+(n*20|0)+8>>2]=v;c[Z+(n*20|0)+12>>2]=o;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else n=Di(D,132,X,v,o)|0;if(!(a[(c[D>>2]|0)+81>>0]|0)){Z=c[u>>2]|0;a[Z+(n*20|0)+1>>0]=-3;c[Z+(n*20|0)+16>>2]=1}if((p|0)>1){i=i+20|0;p=p+-1|0}else break}}if(l|0?(U=a[w>>0]|0,(U&255)<8):0){a[w>>0]=U+1<<24>>24;c[f+148+((U&255)<<2)>>2]=l}do if(v|0){l=a[w>>0]|0;if((l&255)>=8)break;a[w>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=v}while(0);o=m}}else{l=c[g+20>>2]|0;r=c[l>>2]|0;Z=c[l+20>>2]|0;c[R>>2]=(m|0)==0?39084:59952;c[R+4>>2]=Z;nk(f,1,39197,R);if((c[r>>2]|0)==(t|0)){a[R>>0]=11;c[R+4>>2]=X;o=R+16|0;c[R+8>>2]=0;c[R+12>>2]=0;n=pk(f,g)|0;c[o>>2]=n;c[l+12>>2]=0;l=(kj(f,l,R)|0)==0;n=c[f>>2]|0;o=c[o>>2]|0;r:do if(o|0){do if(n|0){if(c[n+480>>2]|0){Xd(n,o);break r}p=o;if((c[n+304>>2]|0)>>>0<=p>>>0){if((c[n+308>>2]|0)>>>0<=p>>>0)break;Z=n+300|0;c[o>>2]=c[Z>>2];c[Z>>2]=o;break r}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{Z=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);if(!l){s:do if(x|0?(Z=(c[x>>2]|0)+-1|0,c[x>>2]=Z,(Z|0)==0):0){l=c[x+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,z);break s}m=x;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[x>>2]=c[Z>>2];c[Z>>2]=x;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{Z=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);break}t:do if((t|0)>0){p=v+38|0;i=v+20|0;q=v+20|0;o=0;while(1){n=a[v>>0]|0;if(n<<24>>24==-88)l=a[p>>0]|0;else l=n;switch(l<<24>>24){case -87:{l=i;W=281;break}case -125:{l=c[q>>2]|0;W=281;break}default:l=v}u:do if((W|0)==281){W=0;if((c[c[l>>2]>>2]|0)<2){l=v;break}do if(n<<24>>24!=-125){if((a[p>>0]|0)==-125)break;l=c[(c[i>>2]|0)+4+(o*20|0)>>2]|0;break u}while(0);l=c[(c[c[q>>2]>>2]|0)+4+(o*20|0)>>2]|0}while(0);n=c[r+4+(o*20|0)>>2]|0;v:do if(!(c[l+4>>2]&256)){do if(n|0){if(!(c[n+4>>2]&256))break;l=Yi(f,n)|0;break v}while(0);l=Yi(f,l)|0;if(l|0)break;l=Yi(f,n)|0}else l=Yi(f,l)|0;while(0);c[x+20+(o<<2)>>2]=l;o=o+1|0;if((o|0)==(t|0))break t}}while(0);o=m}else o=m}w:do if(x|0){l=c[D>>2]|0;if(!(a[l+81>>0]|0)){if((A|0)<0)l=(c[C>>2]|0)+-1|0;else l=A;m=c[D+104>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(D,m+(l*20|0)|0,z,-9);break}if(y)break;c[m+(l*20|0)+16>>2]=z;a[n>>0]=-9;break}if(!(y|(c[l+480>>2]|0)!=0)?(Z=(c[z>>2]|0)+-1|0,c[z>>2]=Z,(Z|0)==0):0){l=c[z+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,z);break w}m=z;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[z>>2]=c[Z>>2];c[Z>>2]=z;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{Z=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}}while(0);if(o|0){m=c[C>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m;l=c[g+48>>2]|0;if((c[B>>2]|0)>(m|0)){c[C>>2]=m+1;Z=c[D+104>>2]|0;a[Z+(m*20|0)>>0]=66;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=l;c[Z+(m*20|0)+8>>2]=0;c[Z+(m*20|0)+12>>2]=0;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(D,66,l,0,0)|0;l=c[g+44>>2]|0;m=c[C>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+((((l|0)<1?m:l)+-1|0)*20|0)|0;else l=59308;c[l+4>>2]=m+-1}}while(0);if(E|0)sk(V,X,E);c[F>>2]=G;n=2}while(0);if(!((j|0)!=0&(n+-3|0)>>>0>1)){c[k>>2]=X;Ra=Y;return n|0}m=c[g+12>>2]|0;l=a[m>>0]|0;if(l<<24>>24==-88)l=a[m+38>>0]|0;switch(l<<24>>24){case -87:{l=m+20|0;W=369;break}case -125:{l=c[m+20>>2]|0;W=369;break}default:l=1}if((W|0)==369){l=c[c[l>>2]>>2]|0;if((l|0)<=0){c[k>>2]=X;Ra=Y;return n|0}}m=0;do{c[j+(m<<2)>>2]=m;m=m+1|0}while((m|0)!=(l|0));c[k>>2]=X;Ra=Y;return n|0}function rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a+116>>2]|0;f=(f|0)==0?a:f;a=f+84|0;d=c[a>>2]|0;e=1<<b;if(d&e|0)return;c[a>>2]=d|e;if((b|0)!=1)return;Oe(f)|0;return}function sk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=d+108|0;g=c[i>>2]|0;j=d+112|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=70;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=0;c[h+(g*20|0)+8>>2]=f;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0}else Di(d,70,0,f,0)|0;g=c[i>>2]|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=36;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=e;c[h+(g*20|0)+8>>2]=0;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0;h=g}else h=Di(d,36,e,0,0)|0;g=c[i>>2]|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;j=c[d+104>>2]|0;a[j+(g*20|0)>>0]=90;b[j+(g*20|0)+2>>1]=0;c[j+(g*20|0)+4>>2]=e;c[j+(g*20|0)+8>>2]=0;c[j+(g*20|0)+12>>2]=f;c[j+(g*20|0)+16>>2]=0;a[j+(g*20|0)+1>>0]=0}else Di(d,90,e,0,f)|0;g=c[i>>2]|0;if((g|0)>0)b[(c[d+104>>2]|0)+((g+-1|0)*20|0)+2>>1]=128;if(a[(c[d>>2]|0)+81>>0]|0){d=59308;d=d+8|0;c[d>>2]=g;return}d=(c[d+104>>2]|0)+(((h|0)<0?g+-1|0:h)*20|0)|0;d=d+8|0;c[d>>2]=g;return}function tk(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;m=t+8|0;p=t+4|0;s=t;o=c[d+8>>2]|0;c[p>>2]=0;c[s>>2]=0;if((e|0)==0|(o|0)==0){Ra=t;return}j=a[e>>0]|0;k=j&255;a:do switch(j<<24>>24){case 44:{l=d+56|0;m=c[l>>2]|0;h=m+-1|0;c[l>>2]=h;Tj(d,c[e+12>>2]|0,h,g^16);tk(d,c[e+16>>2]|0,f,g);h=c[o+12>>2]|0;g=0-m|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}case 43:{tk(d,c[e+12>>2]|0,f,g);tk(d,c[e+16>>2]|0,f,g);break}case 19:{Tj(d,c[e+12>>2]|0,f,g);break}case -89:{o=(a[e+38>>0]|0)==-96;h=c[e+12>>2]|0;g=o?16:0;if(o^(a[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>0]|0)==0){tk(d,h,f,g);break a}else{Tj(d,h,f,g);break a}}case -96:case 45:{g=128;i=j<<24>>24==45?53:52;n=12;break}case 53:case 52:case 57:case 54:case 55:case 56:{i=k;n=12;break}case 51:case 50:{h=Lj(d,c[e+12>>2]|0,p)|0;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=j;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break a}else{Di(o,k,h,f,0)|0;break a}}case 48:{Sj(d,c[e+12>>2]|0,c[e+20>>2]|0,f,67,g);break}case 49:{h=d+56|0;j=c[h>>2]|0;i=j+-1|0;c[h>>2]=i;Rj(d,e,i,(g|0)==0?i:f);i=o+108|0;h=c[i>>2]|0;if((c[o+112>>2]|0)>(h|0)){c[i>>2]=h+1;e=c[o+104>>2]|0;a[e+(h*20|0)>>0]=11;b[e+(h*20|0)+2>>1]=0;c[e+(h*20|0)+4>>2]=0;c[e+(h*20|0)+8>>2]=f;c[e+(h*20|0)+12>>2]=0;c[e+(h*20|0)+16>>2]=0;a[e+(h*20|0)+1>>0]=0}else Di(o,11,0,f,0)|0;g=c[o+12>>2]|0;h=0-j|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0){mk(g,o,h);break a}else{c[(c[g+64>>2]|0)+(h<<2)>>2]=c[i>>2];break a}}default:{c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)!=0&1;else h=0;n=37}}while(0);do if((n|0)==12){j=e+12|0;k=c[j>>2]|0;h=a[k>>0]|0;if(h<<24>>24==-88)h=a[k+38>>0]|0;switch(h<<24>>24){case -87:{l=k+20|0;n=17;break}case -125:{l=c[k+20>>2]|0;n=17;break}default:{}}if((n|0)==17?(c[c[l>>2]>>2]|0)>=2:0){c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)!=0&1;else h=0;n=37;break}m=Lj(d,k,p)|0;e=e+16|0;o=Lj(d,c[e>>2]|0,s)|0;Mj(d,c[j>>2]|0,c[e>>2]|0,i,m,o,f,g)}while(0);do if((n|0)==37){if(h|0){h=o+108|0;g=c[h>>2]|0;if((c[o+112>>2]|0)>(g|0)){c[h>>2]=g+1;o=c[o+104>>2]|0;a[o+(g*20|0)>>0]=11;b[o+(g*20|0)+2>>1]=0;c[o+(g*20|0)+4>>2]=0;c[o+(g*20|0)+8>>2]=f;c[o+(g*20|0)+12>>2]=0;c[o+(g*20|0)+16>>2]=0;a[o+(g*20|0)+1>>0]=0;break}else{Di(o,11,0,f,0)|0;break}}c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0){if(!(c[m>>2]|0))break}else n=43;j=Lj(d,e,p)|0;h=(g|0)!=0&1;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=18;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=j;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break}else{Di(o,18,j,f,h)|0;break}}while(0);h=c[p>>2]|0;if(h|0?(q=d+19|0,r=a[q>>0]|0,(r&255)<8):0){a[q>>0]=r+1<<24>>24;c[d+148+((r&255)<<2)>>2]=h}h=c[s>>2]|0;if(!h){Ra=t;return}g=d+19|0;i=a[g>>0]|0;if((i&255)>=8){Ra=t;return}a[g>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=h;Ra=t;return}function uk(b,d){b=b|0;d=d|0;var e=0,f=0;f=Ra;Ra=Ra+16|0;e=f;a:do if(!b)b=0;else{if(c[b+4>>2]&1024|0){c[d>>2]=c[b+8>>2];b=1;break}switch(a[b>>0]|0){case -90:{b=uk(c[b+12>>2]|0,d)|0;break a}case -91:break;default:{b=0;break a}}if(!(uk(c[b+12>>2]|0,e)|0))b=0;else{c[d>>2]=0-(c[e>>2]|0);b=1}}while(0);Ra=f;return b|0}function vk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;j=k;f=c[b>>2]|0;if(a[f+165>>0]|0){j=0;Ra=k;return j|0}if(a[b+18>>0]|0){j=0;Ra=k;return j|0}if((e|0)==0|(0==0?(c[f+32>>2]&268435457|0)==1:0)){j=0;Ra=k;return j|0}f=a[e>>0]|0;do if(!(f<<24>>24)){f=39441;h=5}else{l=f&255;f=208+l|0;if((l|32|0)==115){f=a[e+1>>0]|0;if(!(f<<24>>24)){f=39442;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==113){f=a[e+2>>0]|0;if(!(f<<24>>24)){f=39443;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==108){f=a[e+3>>0]|0;if(!(f<<24>>24)){f=39444;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==105){f=a[e+4>>0]|0;if(!(f<<24>>24)){f=39445;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==116){f=a[e+5>>0]|0;if(!(f<<24>>24)){f=39446;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==101){f=a[e+6>>0]|0;if(!(f<<24>>24)){f=39447;h=5;break}if(f<<24>>24==95)break;else{g=95;f=208+(f&255)|0}}else g=101}else g=116}else g=105}else g=108}else g=113}else g=115;i=d[f>>0]|0;h=9}while(0);if((h|0)==5){i=0;g=a[208+(d[f>>0]|0)>>0]|0;h=9}if((h|0)==9?(i|0)!=(g&255|0):0){l=0;Ra=k;return l|0}c[j>>2]=e;cd(b,39449,j);l=1;Ra=k;return l|0}function wk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=qj(b,e)|0;if(!j){k=-1;return k|0}i=c[b+20>>2]|0;e=i+-1|0;if((i|0)>0){i=e;h=(c[b+16>>2]|0)+(e<<4)|0;while(1){f=c[h>>2]|0;if(f|0){g=a[f>>0]|0;e=(d[208+(g&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(g<<24>>24==0|(e|0)!=0)){g=j;do{f=f+1|0;g=g+1|0;l=a[f>>0]|0;e=(d[208+(l&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0}while(!(l<<24>>24==0|(e|0)!=0))}if(!e){e=i;break}}if(!i){k=10;break}e=i+-1|0;if((i|0)>0){i=e;h=h+-16|0}else break}if((k|0)==10){e=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!e){f=j;g=50919;do{g=g+1|0;f=f+1|0;l=a[g>>0]|0;e=(d[208+(l&255)>>0]|0)-(d[208+(d[f>>0]|0)>>0]|0)|0}while(!(l<<24>>24==0|(e|0)!=0))}e=((e|0)!=0)<<31>>31}if(b)k=16}else k=16;if((k|0)==16){if(c[b+480>>2]|0){Xd(b,j);l=e;return l|0}l=j;if((c[b+304>>2]|0)>>>0<=l>>>0?(c[b+308>>2]|0)>>>0>l>>>0:0){l=b+300|0;c[j>>2]=c[l>>2];c[l>>2]=j;l=e;return l|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);l=e;return l|0}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);l=e;return l|0}return 0}function xk(a){a=a|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[(c[a+12>>2]|0)+4>>2]|0;f=b[a+52>>1]|0;if(!(f<<16>>16)){k=0;a=a+48|0;b[a>>1]=k;return}k=c[a+4>>2]|0;i=f&65535;g=0;h=0;do{f=b[k+(g<<1)>>1]|0;if(f<<16>>16<0)f=1;else f=d[j+(f<<16>>16<<4)+14>>0]|0;h=f+h|0;g=g+1|0}while(g>>>0<i>>>0);f=h<<2;if(f>>>0>=8){if(f>>>0>255){h=40;g=0;do{h=(h&65535)+40|0;k=f;f=bw(f|0,g|0,4)|0;j=g;g=L()|0}while(j>>>0>0|(j|0)==0&k>>>0>4095);h=h&65535}else{h=40;g=0}if(g>>>0>0|(g|0)==0&f>>>0>15)do{h=(h&65535)+10&65535;k=f;f=bw(f|0,g|0,1)|0;j=g;g=L()|0}while(j>>>0>0|(j|0)==0&k>>>0>31)}else{if(!f){k=0;a=a+48|0;b[a>>1]=k;return}h=40;g=0;do{h=(h&65535)+65526|0;f=cw(f|0,g|0,1)|0;g=L()|0}while(g>>>0<0|(g|0)==0&f>>>0<8);h=h&65535}k=(h&65535)+65526+(e[3648+((f&7)<<1)>>1]|0)&65535;a=a+48|0;b[a>>1]=k;return}function yk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=c[d>>2]|0;j=k+32|0;h=j;g=c[h>>2]|0;h=c[h+4>>2]|0;l=j;c[l>>2]=g&-69|64;c[l+4>>2]=h;Kk(d,f,0);c[j>>2]=g;c[j+4>>2]=h;if(c[d+36>>2]|0){l=0;return l|0}j=f;while(1){f=c[j+52>>2]|0;if(!f)break;else j=f}a:do if(!k){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](80)|0;i=27;break}f=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){l=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=l>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){l=0;return l|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){l=0;return l|0}}else{do if((e[k+276>>1]|0)>=80){g=k+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;i=27;break a}g=k+296|0;f=c[g>>2]|0;if(!f){f=k+292|0;break}else{c[g>>2]=c[f>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;i=27;break a}}else f=k+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(k,80,0)|0;i=27}while(0);if((i|0)==27)if(!f){l=0;return l|0}g=f+4|0;h=g+76|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));g=f+32|0;c[g>>2]=1;c[f>>2]=0;b[f+44>>1]=200;Tk(c[d>>2]|0,c[j>>2]|0,f+42|0,f+4|0);Uk(d,f,j);b[f+40>>1]=-1;if(!(a[k+81>>0]|0)){l=f;return l|0}if(c[k+480>>2]|0){Vi(k,f);l=0;return l|0}l=(c[g>>2]|0)+-1|0;c[g>>2]=l;if(l|0){l=0;return l|0}Vi(k,f);l=0;return l|0}function zk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=e+20|0;g=c[l>>2]|0;a:do if(!g){j=c[d>>2]|0;k=e+42|0;i=b[k>>1]|0;g=(i<<16>>16)+1|0;do if(i<<16>>16>=0){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](g)|0;if(!g)break;else j=g}else{i=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){m=c[14978]|0;h=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=m>>>0)&1}h=Wa[c[29340>>2]&127](i)|0;if(!h)break;g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;j=h}else j=h}if((b[k>>1]|0)>0){h=e+4|0;g=0;do{a[j+g>>0]=a[(c[h>>2]|0)+(g<<4)+13>>0]|0;g=g+1|0}while((g|0)<(b[k>>1]|0))}else g=0;do{a[j+g>>0]=0;if((g|0)<=0)break;g=g+-1|0}while((a[j+g>>0]|0)==65);c[l>>2]=j;break a}while(0);g=j+81|0;if(a[g>>0]|0)return;if(a[j+82>>0]|0)return;a[g>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;g=j+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[j+236>>2]|0;if(!g)return;c[g+12>>2]=7;return}else j=g;while(0);e=(Eu(j)|0)&1073741823;if(!e)return;if(!f){g=c[d>>2]|0;if(!(a[g+81>>0]|0)){Ei(d,(c[d+104>>2]|0)+(((c[d+108>>2]|0)+-1|0)*20|0)|0,j,e);return}else{kg(g,e,j);return}}i=d+108|0;g=c[i>>2]|0;if((c[d+112>>2]|0)>(g|0)){c[i>>2]=g+1;m=c[d+104>>2]|0;a[m+(g*20|0)>>0]=91;b[m+(g*20|0)+2>>1]=0;c[m+(g*20|0)+4>>2]=f;c[m+(g*20|0)+8>>2]=e;c[m+(g*20|0)+12>>2]=0;c[m+(g*20|0)+16>>2]=0;a[m+(g*20|0)+1>>0]=0}else g=Di(d,91,f,e,0)|0;h=c[d>>2]|0;if(a[h+81>>0]|0){kg(h,e,j);return}if((g|0)<0)g=(c[i>>2]|0)+-1|0;Ei(d,(c[d+104>>2]|0)+(g*20|0)|0,j,e);return}function Ak(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+224|0;l=r+192|0;j=r+96|0;o=r+184|0;p=r;c[o>>2]=0;q=c[b>>2]|0;n=b+36|0;if(c[n>>2]|0){Ra=r;return}c[j>>2]=e;h=c[q+108>>2]|0;f=l+4|0;c[f>>2]=r+112;c[l>>2]=q;c[l+8>>2]=70;g=l+12|0;c[g>>2]=h;h=l+16|0;c[h>>2]=0;k=l+20|0;a[k>>0]=0;i=l+21|0;a[i>>0]=1;tb(l,d,j);e=c[f>>2]|0;if(((e|0)!=0?(a[e+(c[h>>2]|0)>>0]=0,(c[g>>2]|0)!=0):0)?(a[i>>0]&4)==0:0)i=$d(l)|0;else i=c[f>>2]|0;if(((a[k>>0]|0)==7?(m=q+81|0,(a[m>>0]|0)==0):0)?(a[q+82>>0]|0)==0:0){a[m>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;e=q+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[q+236>>2]|0;if(e|0)c[e+12>>2]=7}if(!i){if(!(a[q+81>>0]|0))c[b+12>>2]=18;c[n>>2]=(c[n>>2]|0)+1;Ra=r;return}g=b+18|0;a[g>>0]=(a[g>>0]|0)+1<<24>>24;h=b+188|0;e=p;d=h;f=e+88|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));e=h;f=e+88|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));ud(b,i,o)|0;d=c[o>>2]|0;e=q+480|0;do if(d|0){if(c[e>>2]|0){Xd(q,d);break}o=d;if((c[q+304>>2]|0)>>>0<=o>>>0?(c[q+308>>2]|0)>>>0>o>>>0:0){o=q+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);do if(!(c[e>>2]|0)){o=i;if((c[q+304>>2]|0)>>>0<=o>>>0?(c[q+308>>2]|0)>>>0>o>>>0:0){q=q+300|0;c[i>>2]=c[q>>2];c[q>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{q=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(q,i);while(0);e=h;d=p;f=e+88|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));a[g>>0]=(a[g>>0]|0)+-1<<24>>24;Ra=r;return}function Bk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0;h=d+108|0;g=c[h>>2]|0;if((c[d+112>>2]|0)>(g|0)){c[h>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=-115;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=e;c[h+(g*20|0)+8>>2]=0;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0}else g=Di(d,141,e,0,0)|0;gd(d,g,f,-7);if((c[(c[d>>2]|0)+20>>2]|0)<=0)return;g=0;do{fd(d,g);g=g+1|0}while((g|0)<(c[(c[d>>2]|0)+20>>2]|0));return}function Ck(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+32|0;i=m;g=m+4|0;if(!d){l=0;Ra=m;return l|0}k=a+24|0;l=e[k>>1]|0;b[k>>1]=l&28655;f=c[a>>2]|0;c[g>>2]=f;c[g+4>>2]=125;c[g+8>>2]=126;c[g+12>>2]=0;c[g+24>>2]=a;j=d+24|0;h=f+208|0;n=(c[h>>2]|0)+(c[j>>2]|0)|0;c[h>>2]=n;h=c[(c[f>>2]|0)+120>>2]|0;if((h|0)<(n|0)){c[i>>2]=h;cd(f,41637,i);n=1;Ra=m;return n|0}_j(g,d)|0;f=c[g>>2]|0;n=f+208|0;c[n>>2]=(c[n>>2]|0)-(c[j>>2]|0);n=b[k>>1]|0;j=d+4|0;c[j>>2]=c[j>>2]|n&-32752&65535;b[k>>1]=l&36880|n&65535;if((c[a+20>>2]|0)>0){n=1;Ra=m;return n|0}n=(c[f+36>>2]|0)>0&1;Ra=m;return n|0}function Dk(f,h){f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0.0,qa=0;oa=Ra;Ra=Ra+272|0;r=oa+248|0;m=oa+240|0;p=oa+232|0;O=oa+224|0;N=oa+216|0;M=oa+208|0;J=oa+200|0;I=oa+192|0;H=oa+176|0;G=oa+160|0;D=oa+152|0;C=oa+144|0;B=oa+136|0;z=oa+128|0;y=oa+120|0;w=oa+112|0;ja=oa+104|0;ia=oa+88|0;ha=oa+72|0;ba=oa+64|0;ga=oa+56|0;da=oa+48|0;ca=oa+40|0;o=oa+32|0;R=oa;K=oa+252|0;i=c[f+24>>2]|0;na=c[i>>2]|0;a:do switch(a[h>>0]|0){case 55:case 56:case 52:case 53:case 48:case 54:case 57:{ma=385;break}case -95:{F=h+20|0;v=c[F>>2]|0;u=(v|0)==0;if(u)p=0;else p=c[v>>2]|0;j=c[na>>2]|0;m=a[j+78>>0]|0;P=i+24|0;Q=b[P>>1]&16385;t=c[h+8>>2]|0;if(!t)s=0;else s=(Eu(t)|0)&1073741823;r=Jd(j,t,p,m,0)|0;if(r){o=(c[r+20>>2]|0)!=0&1;q=r+4|0;do if(c[q>>2]&1024|0){la=h+4|0;c[la>>2]=c[la>>2]|266240;if((p|0)!=2){c[h+28>>2]=(a[c[r+32>>2]>>0]|0)==117?8388608:125829120;break}j=c[v+24>>2]|0;g[R>>3]=-1.0;if((a[j>>0]|0)==-111){m=c[j+8>>2]|0;if(!m)j=0;else j=(Eu(m)|0)&1073741823;Lg(m,R,j,1)|0;pa=+g[R>>3];j=~~(pa*134217728.0);if(!(pa>1.0)){c[h+28>>2]=j;if((j|0)>=0)break}else ma=247}else ma=247;if((ma|0)==247)c[h+28>>2]=-1;cd(na,39784,w);la=i+20|0;c[la>>2]=(c[la>>2]|0)+1}while(0);p=r+32|0;j=c[p>>2]|0;m=c[na>>2]|0;b:do if(((a[m+165>>0]|0)==0?(a[na+200>>0]|0)==0:0)?(x=c[m+312>>2]|0,x|0):0){j=$a[x&127](c[m+316>>2]|0,31,0,j,0,c[na+240>>2]|0)|0;do if((j|0)!=1)if((j|2|0)==2)if(!j)break b;else break;else{cd(na,39231,z);j=1;ma=259;break}else{cd(na,39216,y);j=23;ma=259}while(0);if((ma|0)==259){c[na+12>>2]=j;c[B>>2]=c[p>>2];cd(na,39855,B);na=i+20|0;c[na>>2]=(c[na>>2]|0)+1}a[h>>0]=114;na=1;Ra=oa;return na|0}while(0);j=c[q>>2]|0;if(j&10240|0){la=h+4|0;c[la>>2]=c[la>>2]|524288}if((j&2048|0)==0?(A=e[P>>1]|0,(A&34|0)!=0):0){c[C>>2]=39890;c[C+4>>2]=(A&32|0)==0?((A&4|0)==0?40098:40144):40126;cd(na,40162,C);j=c[q>>2]|0}if(!(j&262144)){q=0;w=r;p=0}else{w=(a[na+18>>0]|0)==0&(c[7391]|0)==0;q=w;w=w?0:r;p=0}}else{w=Jd(c[na>>2]|0,t,-2,m,0)|0;p=(w|0)==0;q=p;p=(p^1)&1;o=0}c:do if((d[na+200>>0]|0)<2){if(((w|0)!=0?(c[w+24>>2]|0)==0:0)?(c[h+4>>2]&16777216|0)!=0:0){c[D>>2]=s;c[D+4>>2]=t;cd(na,39918,D);ma=287}else ma=273;do if((ma|0)==273){do if(o|0){m=b[P>>1]|0;j=c[w+4>>2]|0;if((m&1?(E=c[h+44>>2]|0,!((j&65536|0)!=0&(E|0)==0)):0)?!((m&16384)==0&(E|0)!=0):0)break;if((j&65536|0)==0?(c[h+44>>2]|0)==0:0){c[G>>2]=39969;c[G+4>>2]=s;c[G+8>>2]=t;cd(na,39979,G)}else{c[H>>2]=39962;c[H+4>>2]=s;c[H+8>>2]=t;cd(na,39979,H)}o=i+20|0;c[o>>2]=(c[o>>2]|0)+1;o=0;break c}while(0);if(q?(a[(c[na>>2]|0)+165>>0]|0)==0:0){c[I>>2]=s;c[I+4>>2]=t;cd(na,40008,I);ma=287;break}if(p|0){c[J>>2]=s;c[J+4>>2]=t;cd(na,40031,J);ma=287}}while(0);if((ma|0)==287){la=i+20|0;c[la>>2]=(c[la>>2]|0)+1}if(!o)o=0;else{b[P>>1]=((c[h+44>>2]|0)==0^49151)&e[P>>1];o=1}}while(0);d:do if(!u?(n=c[v>>2]|0,(n|0)>0):0){j=v+4|0;while(1){m=c[j>>2]|0;if(m|0?_j(f,m)|0:0)break d;if((n|0)>1){n=n+-1|0;j=j+20|0}else break}}while(0);if(!o){na=1;Ra=oa;return na|0}t=h+44|0;r=c[t>>2]|0;e:do if(!r){a[h>>0]=-93;m=h+38|0;a[m>>0]=0;if(i|0){n=R+4|0;o=R+8|0;p=R+24|0;q=K+4|0;r=K+8|0;while(1){na=c[i+4>>2]|0;k=c[F>>2]|0;c[n>>2]=139;c[o>>2]=0;c[p>>2]=K;c[K>>2]=na;c[q>>2]=0;c[r>>2]=0;if(!k){ma=369;break}j=c[k>>2]|0;if((j|0)<=0){ma=369;break}k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(R,l)|0:0)break;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}if((c[r>>2]|0)==0|(c[q>>2]|0)>0)break;a[m>>0]=(a[m>>0]|0)+1<<24>>24;i=c[i+12>>2]|0;if(!i)break e}na=i+24|0;b[na>>1]=c[w+4>>2]&4096|e[na>>1]|16}}else{s=c[i+28>>2]|0;i=c[s+72>>2]|0;o=c[r>>2]|0;q=r+16|0;f:do if((o|0)!=0?(a[q>>0]|0)==0:0){g:do if(i|0){n=d[208+(d[o>>0]|0)>>0]|0;p=i;while(1){j=c[p>>2]|0;h=a[j>>0]|0;i=(d[208+(h&255)>>0]|0)-n|0;if(!(h<<24>>24==0|(i|0)!=0)){m=o;do{j=j+1|0;m=m+1|0;h=a[j>>0]|0;i=(d[208+(h&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(i|0)!=0))}if(!i)break;i=c[p+32>>2]|0;if(!i)break g;else p=i}if(!p)break f;i=gk(c[na>>2]|0,c[p+8>>2]|0,0)|0;c[r+8>>2]=i;i=gk(c[na>>2]|0,c[p+12>>2]|0,0)|0;c[r+12>>2]=i;i=c[p+24>>2]|0;if(!i)i=0;else i=dk(c[na>>2]|0,i,0,0)|0;c[r+24>>2]=i;i=c[p+28>>2]|0;if(!i)i=0;else i=dk(c[na>>2]|0,i,0,0)|0;c[r+28>>2]=i;a[r+17>>0]=a[p+17>>0]|0;a[r+18>>0]=a[p+18>>0]|0;i=a[p+16>>0]|0;a[q>>0]=i;a[r+20>>0]=a[p+20>>0]|0;ma=315;break f}while(0);c[M>>2]=o;cd(na,40596,M)}else ma=314;while(0);if((ma|0)==314){Cj(na,r,i);i=a[q>>0]|0;ma=315}if((ma|0)==315){do if(i<<24>>24==86){if((c[r+24>>2]|0)==0?(c[r+28>>2]|0)==0:0){ma=321;break}h=c[r+12>>2]|0;if(h|0?(c[h>>2]|0)==1:0){ma=321;break}cd(na,40397,N)}else ma=321;while(0);h:do if((ma|0)==321?c[w+4>>2]&65536|0:0){o=c[na>>2]|0;if(c[r+36>>2]|0){cd(na,40468,O);break}i=c[w+32>>2]|0;do if((i|0)!=40531)if((i|0)!=40542)if((i|0)!=40553)if((i|0)!=40558){if((i|0)==40571){m=4;break}if((i|0)==40581){m=5;break}if((i|0)==40587){m=6;break}if((i|0)==40592)m=7;else break h}else m=3;else m=2;else m=1;else m=0;while(0);n=r+24|0;i=c[n>>2]|0;if(i|0)ni(o,i);i=r+28|0;j=c[i>>2]|0;if(j|0)ni(o,j);c[n>>2]=0;c[i>>2]=0;a[q>>0]=c[17952+(m<<4)+4>>2];h=c[17952+(m<<4)+8>>2]&255;a[r+17>>0]=h;a[r+18>>0]=c[17952+(m<<4)+12>>2];a[r+20>>0]=0;if(h<<24>>24==83){c[R>>2]=34874;c[R+4>>2]=1;h=oj(o,147,R,0)|0;c[n>>2]=h}}while(0);c[r+40>>2]=w}i=c[t>>2]|0;j=c[i+8>>2]|0;if((j|0)!=0?(l=c[j>>2]|0,(l|0)>0):0){i=j+4|0;while(1){j=c[i>>2]|0;if(j|0?_j(f,j)|0:0)break;if((l|0)>1){l=l+-1|0;i=i+20|0}else break}i=c[t>>2]|0}j=c[i+12>>2]|0;if((j|0)!=0?(k=c[j>>2]|0,(k|0)>0):0){i=j+4|0;while(1){j=c[i>>2]|0;if(j|0?_j(f,j)|0:0)break;if((k|0)>1){k=k+-1|0;i=i+20|0}else break}i=c[t>>2]|0}i=c[i+36>>2]|0;if(i|0)_j(f,i)|0;k=s+68|0;i=c[k>>2]|0;if(i){if(!(ck(na,i,c[t>>2]|0)|0)){j=k;i=c[k>>2]|0;ma=359}}else{j=k;ma=359}if((ma|0)==359){c[(c[t>>2]|0)+32>>2]=i;c[j>>2]=c[t>>2]}b[P>>1]=b[P>>1]|-32768}while(0);b[P>>1]=b[P>>1]|Q;na=1;Ra=oa;return na|0}case 49:case 20:case -125:{k=h+4|0;if(c[k>>2]&2048|0){l=i+16|0;m=c[l>>2]|0;i=i+24|0;j=e[i>>1]|0;if(j&38|0){c[p>>2]=40076;c[p+4>>2]=(j&32|0)==0?((j&4|0)==0?40098:40144):40126;cd(na,40162,p)}$j(f,c[h+20>>2]|0)|0;if((m|0)!=(c[l>>2]|0)){c[k>>2]=c[k>>2]|32;b[i>>1]=b[i>>1]|64}}break}case -108:{i=e[i+24>>1]|0;if(i&38|0){c[m>>2]=40087;c[m+4>>2]=(i&32|0)==0?((i&4|0)==0?40098:40144):40126;cd(na,40162,m)}break}case -96:case 45:{i=c[h+16>>2]|0;if((a[i>>0]|0)==59){if((Dk(f,i)|0)==2){na=2;Ra=oa;return na|0}if((a[i>>0]|0)==-97){a[h+38>>0]=a[h>>0]|0;a[h>>0]=-89;na=0;Ra=oa;return na|0}else ma=385}else ma=385;break}case 59:{s=c[h+8>>2]|0;W=c[na>>2]|0;Z=h+28|0;c[Z>>2]=-1;t=0;u=0;l=0;v=na+200|0;X=na;ma=28;break}case -122:{l=c[h+12>>2]|0;n=i+24|0;if(b[n>>1]&32){c[o>>2]=39767;c[o+4>>2]=40126;cd(na,40162,o)}k=c[h+16>>2]|0;if((a[k>>0]|0)==59){u=0;m=k}else{u=c[l+8>>2]|0;m=c[k+16>>2]|0;l=c[k+12>>2]|0}t=c[l+8>>2]|0;s=c[m+8>>2]|0;v=na+200|0;i:do if((d[v>>0]|0)>1?(q=na+272|0,j=c[q>>2]|0,j|0):0){k=j;do{if((c[k>>2]|0)==(m|0)){ma=12;break}k=c[k+12>>2]|0}while((k|0)!=0);if((ma|0)==12){c[k>>2]=h;j=c[q>>2]|0}k=h+44|0;if(j|0){while(1){if((c[j>>2]|0)==(l|0))break;j=c[j+12>>2]|0;if(!j)break i}c[j>>2]=k}}while(0);r=c[na>>2]|0;q=h+28|0;c[q>>2]=-1;if((u|0)!=0?(b[n>>1]&6)==0:0){n=c[r+20>>2]|0;if((n|0)>0){p=c[r+16>>2]|0;o=d[208+(d[u>>0]|0)>>0]|0;j=0;while(1){l=c[p+(j<<4)>>2]|0;ma=a[l>>0]|0;k=(d[208+(ma&255)>>0]|0)-o|0;if(!(ma<<24>>24==0|(k|0)!=0)){m=u;do{l=l+1|0;m=m+1|0;ma=a[l>>0]|0;k=(d[208+(ma&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ma<<24>>24==0|(k|0)!=0))}if(!k)break;j=j+1|0;if((j|0)>=(n|0)){l=0;Z=q;W=r;X=na;ma=28;break a}}l=c[p+(j<<4)+12>>2]|0;Z=q;W=r;X=na;ma=28}else{l=0;Z=q;W=r;X=na;ma=28}}else{u=0;l=0;Z=q;W=r;X=na;ma=28}break}default:{}}while(0);if((ma|0)==28){U=(u|0)==0;V=(t|0)!=0;R=V&U;j=na+120|0;P=(t|0)==0;_=h+32|0;f=h+44|0;T=na+272|0;Q=na+144|0;Y=h+4|0;M=h+1|0;N=na+136|0;O=na+140|0;m=i;q=0;S=0;o=162;p=0;r=-1;j:while(1){k=c[m+4>>2]|0;if(k){K=c[k>>2]|0;if((K|0)>0){I=k+8|0;J=0;w=0;while(1){H=c[I+16>>2]|0;k=c[I+20>>2]|0;if((k|0)!=0?(c[k+8>>2]&2048|0)!=0:0){x=c[k>>2]|0;y=c[x>>2]|0;if((y|0)>0){n=0;k=0;do{if(Fk(c[x+4+(n*20|0)+8>>2]|0,s,t,u)|0){b[_>>1]=n;k=1;w=w+1|0;q=2;p=I}n=n+1|0}while((n|0)!=(y|0))}else k=0;if(V&(k|0)==0)ma=40}else ma=40;k:do if((ma|0)==40){ma=0;if(!U?(c[H+72>>2]|0)!=(l|0):0)break;l:do if(!P){n=c[I+12>>2]|0;y=(n|0)==0;if(y){n=c[H>>2]|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(G<<24>>24==0|(k|0)!=0)){x=t;do{n=n+1|0;x=x+1|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(G<<24>>24==0|(k|0)!=0))}}else{G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(G<<24>>24==0|(k|0)!=0)){x=t;do{n=n+1|0;x=x+1|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(G<<24>>24==0|(k|0)!=0))}}if(k|0)break k;if(!(y|(d[v>>0]|0)<2)?($=c[T>>2]|0,$|0):0){k=$;while(1){if((c[k>>2]|0)==(f|0))break;k=c[k+12>>2]|0;if(!k)break l}c[k>>2]=0}}while(0);G=q+1|0;p=(q|0)==0?I:p;n=c[H+4>>2]|0;k=b[H+42>>1]|0;if(k<<16>>16>0){F=d[208+(d[s>>0]|0)>>0]|0;C=I+36|0;D=I+48|0;E=k<<16>>16;m:do if((w|0)==1){k=0;while(1){x=c[n>>2]|0;B=a[x>>0]|0;q=(d[208+(B&255)>>0]|0)-F|0;if(!(B<<24>>24==0|(q|0)!=0)){y=s;do{x=x+1|0;y=y+1|0;B=a[x>>0]|0;q=(d[208+(B&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(q|0)!=0))}n:do if((q|0)==0?(a[C>>0]&4)==0:0){q=c[D>>2]|0;if(!q)break m;B=c[q+4>>2]|0;if((B|0)<=0)break m;A=c[q>>2]|0;z=0;while(1){x=c[A+(z<<3)>>2]|0;y=a[x>>0]|0;q=(d[208+(y&255)>>0]|0)-F|0;if(!(y<<24>>24==0|(q|0)!=0)){y=s;do{x=x+1|0;y=y+1|0;qa=a[x>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}z=z+1|0;if(!q)break n;if((z|0)>=(B|0))break m}}while(0);k=k+1|0;if((k|0)>=(E|0)){w=1;q=G;break k}else n=n+16|0}}else{y=n;k=0;while(1){q=c[y>>2]|0;qa=a[q>>0]|0;n=(d[208+(qa&255)>>0]|0)-F|0;if(!(qa<<24>>24==0|(n|0)!=0)){x=s;do{q=q+1|0;x=x+1|0;qa=a[q>>0]|0;n=(d[208+(qa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(n|0)!=0))}if(!n)break m;k=k+1|0;if((k|0)>=(E|0)){q=G;break k}else y=y+16|0}}while(0);b[_>>1]=(k|0)==(b[H+40>>1]|0)?-1:k&65535;w=w+1|0;q=G;p=I}else q=G}while(0);J=J+1|0;if((J|0)==(K|0))break;else I=I+72|0}}else w=0;if(!p){A=w;C=0}else{n=c[p+40>>2]|0;c[Z>>2]=n;k=c[p+16>>2]|0;c[f>>2]=k;if(a[p+36>>0]&8)c[Y>>2]=c[Y>>2]|1048576;l=c[k+72>>2]|0;A=w;C=p;r=n}}else{A=0;C=p}do if(R&(q|0)==0){q=c[j>>2]|0;do if(q){x=a[Q>>0]|0;w=a[t>>0]|0;k=w|32;if(x<<24>>24==121){if(k<<24>>24!=111){q=0;break}}else{if(k<<24>>24==110){k=t;n=40182;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){c[Z>>2]=1;r=1;break}}if(!(x<<24>>24!=120&(w|32)<<24>>24==111)){q=0;break}}k=t;n=40186;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){c[Z>>2]=0;r=0}else q=0}else q=0;while(0);w=b[m+24>>1]|0;if(((w&512)!=0?(aa=c[m+8>>2]|0,(aa|0)!=0):0)?(a[t>>0]|32)<<24>>24==101:0){k=t;n=40190;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){z=c[(c[aa+20>>2]|0)+24>>2]|0;c[Z>>2]=2;r=2}else z=q}else z=q;if(!z){B=o;q=0;o=A;n=(C|0)!=0;z=w;break}l=c[z+72>>2]|0;qa=b[z+42>>1]|0;y=qa<<16>>16;o:do if(qa<<16>>16>0){x=d[208+(d[s>>0]|0)>>0]|0;n=0;w=c[z+4>>2]|0;while(1){p=c[w>>2]|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-x|0;if(!(qa<<24>>24==0|(k|0)!=0)){q=s;do{p=p+1|0;q=q+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(!k)break;n=n+1|0;if((n|0)<(y|0))w=w+16|0;else break o}n=(n|0)==(b[z+40>>1]|0)?-1:n}else n=0;while(0);do if((n|0)>=(y|0)){x=a[s>>0]|0;w=d[208+(x&255)>>0]|0;k=w+-95|0;x=x<<24>>24==0;if(!(x|(k|0)!=0)){p=58070;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=w+-114|0;if(!(x|(k|0)!=0)){p=40352;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=w+-111|0;if(!(x|(k|0)!=0)){p=58078;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0)break}}n=(c[z+36>>2]&64|0)==0?-1:n}while(0);if((n|0)<(y|0)){p=A+1|0;if((r|0)==2)if((d[v>>0]|0)>1){b[_>>1]=n;c[f>>2]=z;o=162;q=1;r=2;ma=142;break}else{r=(c[(c[m+8>>2]|0)+24>>2]|0)+n|0;c[Z>>2]=r;c[Y>>2]=c[Y>>2]|4194304;o=168;q=1;ma=142;break}do if((n|0)>=0){k=(n|0)>31?-1:1<<n;if(!r){c[N>>2]=c[N>>2]|k;break}else{c[O>>2]=c[O>>2]|k;break}}else a[M>>0]=68;while(0);c[f>>2]=z;b[_>>1]=n;o=77;q=1;ma=142}else{q=1;p=A;ma=142}}else{p=A;ma=142}while(0);do if((ma|0)==142){ma=0;n=(C|0)!=0;z=b[m+24>>1]|0;if(n&((q|0)==1&(p|0)==0))if(!(z&32)){w=a[s>>0]|0;q=d[208+(w&255)>>0]|0;k=q+-95|0;w=w<<24>>24==0;if(!(w|(k|0)!=0)){n=58070;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-114|0;if(!(w|(k|0)!=0)){n=40352;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-111|0;if(!(w|(k|0)!=0)){n=58078;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){B=o;q=1;o=0;n=1;break}}}if(!(c[(c[C+16>>2]|0)+36>>2]&64)){ma=157;break j}else{B=o;q=1;o=0;n=1}}else{B=o;q=1;o=0;n=1}else{B=o;o=p}}while(0);k=(o|0)==0;if(P&(k&(z&128)!=0)){A=c[m+8>>2]|0;w=c[A>>2]|0;if((w|0)>0){y=0;while(1){x=c[A+4+(y*20|0)+4>>2]|0;if(x|0){qa=a[x>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[s>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(k|0)!=0)){o=s;p=x;do{p=p+1|0;o=o+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(!k){ma=166;break j}}k=y+1|0;if((k|0)<(w|0))y=k;else break}}}else if(!k){ma=201;break}m=c[m+12>>2]|0;if(!m){ma=188;break}else{S=S+1|0;o=B;p=C}}p:do if((ma|0)==157){b[_>>1]=-1;a[M>>0]=68;q=m;p=1;n=1;ma=208}else if((ma|0)==166){n=c[A+4+(y*20|0)>>2]|0;if((z&1)==0?c[n+4>>2]&16|0:0){c[ca>>2]=x;cd(na,40199,ca);qa=2;Ra=oa;return qa|0}if((z&16384)==0?c[n+4>>2]&32768|0:0){c[da>>2]=x;cd(na,40230,da);qa=2;Ra=oa;return qa|0}k=a[n>>0]|0;if(k<<24>>24==-88)k=a[n+38>>0]|0;switch(k<<24>>24){case -87:{fa=n+20|0;ma=177;break}case -125:{fa=c[n+20>>2]|0;ma=177;break}default:{}}if((ma|0)==177?(c[c[fa>>2]>>2]|0)!=1:0){cd(na,38899,ga);qa=2;Ra=oa;return qa|0}Gk(na,A,y,h,59952,S);if((d[v>>0]|0)>1?(ea=c[T>>2]|0,(ea|0)!=0):0){k=ea;while(1){if((c[k>>2]|0)==(h|0))break;k=c[k+12>>2]|0;if(!k){n=m;break p}}c[k>>2]=0;n=m}else n=m}else if((ma|0)==188)if(P){k=c[Y>>2]|0;if(k&64|0){c[ba>>2]=s;Db(28,40267,ba);a[h>>0]=110;c[f>>2]=0;qa=1;Ra=oa;return qa|0}if(!(k&67108864)){m=c[h+8>>2]|0;r=a[m>>0]|0;q=d[208+(r&255)>>0]|0;k=q+-116|0;r=r<<24>>24==0;if(!(r|(k|0)!=0)){o=41806;p=m;do{p=p+1|0;o=o+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-102|0;if(!(r|(k|0)!=0)){o=41811;do{m=m+1|0;o=o+1|0;qa=a[m>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){m=0;o=0;k=40302;ma=202;break}}a[h>>0]=-97;qa=1;Ra=oa;return qa|0}else{m=0;o=0;k=40302;ma=202}}else{m=0;o=0;k=40302;ma=202}else if((ma|0)==201)if((o|0)==1){q=m;p=1;o=B;ma=208}else{k=40317;ma=202}while(0);if((ma|0)==202){do if(U)if(V){c[ia>>2]=k;c[ia+4>>2]=t;c[ia+8>>2]=s;cd(na,37010,ia);break}else{c[ja>>2]=k;c[ja+4>>2]=s;cd(na,37020,ja);break}else{c[ha>>2]=k;c[ha+4>>2]=u;c[ha+8>>2]=t;c[ha+12>>2]=s;cd(na,40339,ha)}while(0);a[na+17>>0]=1;q=i+20|0;c[q>>2]=(c[q>>2]|0)+1;q=m;p=o;o=B;ma=208}if((ma|0)==208){qa=b[_>>1]|0;m=qa<<16>>16;k=C+56|0;if(n&qa<<16>>16>-1){ia=cw(1,0,((m|0)<63?m:63)|0)|0;ja=L()|0;ha=k;ja=c[ha+4>>2]|ja;qa=k;c[qa>>2]=c[ha>>2]|ia;c[qa+4>>2]=ja}k=h+12|0;m=c[k>>2]|0;if(m|0)ni(W,m);c[k>>2]=0;k=h+16|0;m=c[k>>2]|0;if(m|0)ni(W,m);c[k>>2]=0;a[h>>0]=o;c[Y>>2]=c[Y>>2]|8388608;if((p|0)==1)n=q;else{qa=2;Ra=oa;return qa|0}}q:do if((c[Y>>2]&4194304|0)==0?(la=c[n+4>>2]|0,ka=c[X>>2]|0,!((l|0)==0|(c[ka+312>>2]|0)==0)):0){k=c[ka+16>>2]|0;m=0;while(1)if((c[k+(m<<4)+12>>2]|0)==(l|0))break;else m=m+1|0;if((a[h>>0]|0)!=77){l=c[la>>2]|0;if((l|0)<=0)break;k=c[Z>>2]|0;j=0;while(1){if((k|0)==(c[la+8+(j*72|0)+40>>2]|0))break;j=j+1|0;if((j|0)>=(l|0))break q}j=la+8+(j*72|0)+16|0}l=c[j>>2]|0;k=b[_>>1]|0;j=k<<16>>16;if(l|0){if(k<<16>>16<=-1){j=b[l+40>>1]|0;if(j<<16>>16>-1){j=j<<16>>16;ma=229}else j=40352}else ma=229;if((ma|0)==229)j=c[(c[l+4>>2]|0)+(j<<4)>>2]|0;if((Ik(na,c[l>>2]|0,j,m)|0)==2)a[h>>0]=114}}while(0);qa=i+16|0;c[qa>>2]=(c[qa>>2]|0)+1;if((n|0)==(i|0)){qa=1;Ra=oa;return qa|0}do{i=c[i+12>>2]|0;qa=i+16|0;c[qa>>2]=(c[qa>>2]|0)+1}while((i|0)!=(n|0));i=1;Ra=oa;return i|0}else if((ma|0)==385?(a[(c[na>>2]|0)+81>>0]|0)==0:0){j=c[h+12>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;ma=391;break}case -125:{i=c[j+20>>2]|0;ma=391;break}default:l=1}if((ma|0)==391)l=c[c[i>>2]>>2]|0;r:do if((a[h>>0]|0)==48){k=c[h+20>>2]|0;j=c[k+4>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;ma=398;break}case -125:{i=c[j+20>>2]|0;ma=398;break}default:i=1}if((ma|0)==398)i=c[c[i>>2]>>2]|0;if((i|0)==(l|0)){j=c[k+24>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=c[c[j+20>>2]>>2]|0;break r}case -125:{i=c[c[c[j+20>>2]>>2]>>2]|0;break r}default:{i=1;break r}}}}else{j=c[h+16>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=c[c[j+20>>2]>>2]|0;break r}case -125:{i=c[c[c[j+20>>2]>>2]>>2]|0;break r}default:{i=1;break r}}}while(0);if((l|0)!=(i|0))cd(na,38899,r)}if(c[na+36>>2]|0){qa=2;Ra=oa;return qa|0}qa=(a[(c[na>>2]|0)+81>>0]|0)==0?0:2;Ra=oa;return qa|0}function Ek(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0;fb=Ra;Ra=Ra+240|0;eb=fb+120|0;bb=fb+112|0;ab=fb+96|0;Sa=fb+88|0;Pa=fb+80|0;La=fb+72|0;Ka=fb+64|0;Ja=fb+56|0;Ia=fb+48|0;Ha=fb+40|0;Oa=fb+32|0;Na=fb+24|0;Ma=fb+16|0;Ga=fb+8|0;Fa=fb;Xa=fb+200|0;Ya=fb+168|0;Za=fb+160|0;qa=fb+128|0;h=c[g+8>>2]|0;if(h&4|0){eb=1;Ra=fb;return eb|0}ma=c[f+24>>2]|0;db=c[f>>2]|0;f=c[db>>2]|0;if(!(h&64)){Kk(db,g,ma);if(c[db+36>>2]|0){eb=2;Ra=fb;return eb|0}eb=(a[f+81>>0]|0)==0?1:2;Ra=fb;return eb|0}Qa=g+52|0;oa=(c[Qa>>2]|0)!=0;W=oa&1;X=qa+28|0;Y=qa+24|0;Z=Xa+4|0;_=Xa+8|0;$=Xa+12|0;aa=Xa+24|0;ba=qa+20|0;ca=qa+4|0;da=qa+12|0;ea=db+240|0;fa=(ma|0)==0;ga=Xa+4|0;ha=Xa+8|0;ia=Xa+12|0;ja=Xa+24|0;ka=db+36|0;s=f+81|0;t=Xa+4|0;u=Xa+8|0;v=Xa+12|0;w=Xa+24|0;x=qa+8|0;y=Xa+4|0;z=Xa+8|0;A=Xa+12|0;B=Xa+24|0;C=Xa+4|0;D=Xa+8|0;E=Xa+12|0;F=Xa+24|0;G=Xa+4|0;H=Xa+8|0;I=Xa+12|0;J=Xa+24|0;K=db+200|0;L=Xa+4|0;M=Xa+8|0;N=Xa+12|0;O=Xa+24|0;P=Xa+4|0;Q=Xa+8|0;R=Xa+12|0;S=Xa+24|0;T=qa+4|0;U=db;V=db+208|0;q=g;r=0;f=h;a:while(1){p=q+8|0;c[p>>2]=f|4;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;c[T+16>>2]=0;c[T+20>>2]=0;c[qa>>2]=db;c[X>>2]=q;f=c[q+60>>2]|0;if(f){b[Y>>1]=0;c[Xa>>2]=U;c[Z>>2]=125;c[_>>2]=126;c[$>>2]=0;c[aa>>2]=qa;h=f+24|0;o=(c[V>>2]|0)+(c[h>>2]|0)|0;c[V>>2]=o;Ea=c[(c[db>>2]|0)+120>>2]|0;if((Ea|0)<(o|0)){K=9;break}_j(Xa,f)|0;i=c[Xa>>2]|0;o=i+208|0;c[o>>2]=(c[o>>2]|0)-(c[h>>2]|0);o=f+4|0;c[o>>2]=c[o>>2]|b[Y>>1]&-32752&65535;if((c[ba>>2]|0)>0){K=11;break}if((c[i+36>>2]|0)>=1){cb=2;K=206;break}}o=q+32|0;h=c[o>>2]|0;if(c[p>>2]&65536|0){n=q+48|0;c[(c[h+28>>2]|0)+48>>2]=c[n>>2];c[n>>2]=0}f=h;b:do if((c[h>>2]|0)>0){if(fa){k=0;while(1){j=c[h+8+(k*72|0)+20>>2]|0;if((j|0)!=0?(c[j+8>>2]&4|0)==0:0){f=c[ea>>2]|0;i=c[h+8+(k*72|0)+8>>2]|0;if(i|0)c[ea>>2]=i;c[ga>>2]=125;c[ha>>2]=126;c[ia>>2]=0;c[Xa>>2]=db;c[ja>>2]=0;$j(Xa,j)|0;c[ea>>2]=f;if(c[ka>>2]|0){cb=2;K=206;break a}if(a[s>>0]|0){cb=2;K=206;break a}f=h+8+(k*72|0)+37|0;a[f>>0]=a[f>>0]&-9;f=c[o>>2]|0;h=f}k=k+1|0;if((k|0)>=(c[h>>2]|0))break b}}l=0;k=h;while(1){j=c[k+8+(l*72|0)+20>>2]|0;if((j|0)!=0?(c[j+8>>2]&4|0)==0:0){i=c[ea>>2]|0;f=0;h=ma;do{f=(c[h+16>>2]|0)+f|0;h=c[h+12>>2]|0}while((h|0)!=0);h=c[k+8+(l*72|0)+8>>2]|0;if(h|0)c[ea>>2]=h;c[ga>>2]=125;c[ha>>2]=126;c[ia>>2]=0;c[Xa>>2]=db;c[ja>>2]=ma;$j(Xa,j)|0;c[ea>>2]=i;if(c[ka>>2]|0){cb=2;K=206;break a}if(a[s>>0]|0){cb=2;K=206;break a}h=ma;do{f=f-(c[h+16>>2]|0)|0;h=c[h+12>>2]|0}while((h|0)!=0);h=k+8+(l*72|0)+37|0;a[h>>0]=a[h>>0]&-9|((f|0)!=0&1)<<3&255;f=c[o>>2]|0;h=f}else h=k;l=l+1|0;if((l|0)>=(c[h>>2]|0))break;else k=h}}while(0);b[Y>>1]=16385;c[ca>>2]=f;c[da>>2]=ma;l=c[q>>2]|0;if((l|0)!=0?(c[l>>2]|0)>0:0){k=0;f=16385;do{i=c[l+4+(k*20|0)>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;ra=c[qa>>2]|0;c[Xa>>2]=ra;c[t>>2]=125;c[u>>2]=126;c[v>>2]=0;c[w>>2]=qa;h=i+24|0;sa=ra;m=sa+208|0;n=(c[m>>2]|0)+(c[h>>2]|0)|0;c[m>>2]=n;sa=c[(c[sa>>2]|0)+120>>2]|0;if((sa|0)<(n|0)){K=46;break a}_j(Xa,i)|0;j=c[Xa>>2]|0;n=j+208|0;c[n>>2]=(c[n>>2]|0)-(c[h>>2]|0);n=b[Y>>1]|0;m=i+4|0;c[m>>2]=c[m>>2]|n&-32752&65535;f=(f&36880|n&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=48;break a}if((c[j+36>>2]|0)>=1){cb=2;K=206;break a}}k=k+1|0}while((k|0)<(c[l>>2]|0))}else f=16385;h=f&-16385;b[Y>>1]=h;n=c[q+40>>2]|0;m=(n|0)!=0;if(!m?(na=h&65535,(na&16|0)==0):0){h=na&49150;b[Y>>1]=h}else c[p>>2]=c[p>>2]|(f&4096|8)&65535;j=c[q+44>>2]|0;i=(j|0)==0;if(!(m|i)){K=55;break}c[x>>2]=c[q>>2];f=h|128;b[Y>>1]=f;if(!i){f=f&65535;b[Y>>1]=f&28655;ta=c[qa>>2]|0;c[Xa>>2]=ta;c[y>>2]=125;c[z>>2]=126;c[A>>2]=0;c[B>>2]=qa;h=j+24|0;ua=ta;k=ua+208|0;l=(c[k>>2]|0)+(c[h>>2]|0)|0;c[k>>2]=l;ua=c[(c[ua>>2]|0)+120>>2]|0;if((ua|0)<(l|0)){K=59;break}_j(Xa,j)|0;i=c[Xa>>2]|0;l=i+208|0;c[l>>2]=(c[l>>2]|0)-(c[h>>2]|0);l=b[Y>>1]|0;k=j+4|0;c[k>>2]=c[k>>2]|l&-32752&65535;f=(f&36880|l&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=61;break}if((c[i+36>>2]|0)>=1){cb=2;K=206;break}}i=c[q+36>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;va=c[qa>>2]|0;c[Xa>>2]=va;c[C>>2]=125;c[D>>2]=126;c[E>>2]=0;c[F>>2]=qa;h=i+24|0;wa=va;k=wa+208|0;l=(c[k>>2]|0)+(c[h>>2]|0)|0;c[k>>2]=l;wa=c[(c[wa>>2]|0)+120>>2]|0;if((wa|0)<(l|0)){K=66;break}_j(Xa,i)|0;j=c[Xa>>2]|0;l=j+208|0;c[l>>2]=(c[l>>2]|0)-(c[h>>2]|0);l=b[Y>>1]|0;k=i+4|0;c[k>>2]=c[k>>2]|l&-32752&65535;f=(f&36880|l&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=68;break}if((c[j+36>>2]|0)>=1){cb=2;K=206;break}}h=c[o>>2]|0;if((c[h>>2]|0)>0){l=0;do{if(((a[h+8+(l*72|0)+37>>0]&4)!=0?(pa=c[h+8+(l*72|0)+64>>2]|0,(pa|0)!=0):0)?(c[pa>>2]|0)>0:0){k=0;do{i=c[pa+4+(k*20|0)>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;xa=c[qa>>2]|0;c[Xa>>2]=xa;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=qa;h=i+24|0;ya=xa;gb=ya+208|0;j=(c[gb>>2]|0)+(c[h>>2]|0)|0;c[gb>>2]=j;ya=c[(c[ya>>2]|0)+120>>2]|0;if((ya|0)<(j|0)){K=80;break a}_j(Xa,i)|0;j=c[Xa>>2]|0;gb=j+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[h>>2]|0);gb=b[Y>>1]|0;i=i+4|0;c[i>>2]=c[i>>2]|gb&-32752&65535;f=(f&36880|gb&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=82;break a}if((c[j+36>>2]|0)>=1){cb=2;K=206;break a}}k=k+1|0}while((k|0)<(c[pa>>2]|0))}l=l+1|0;h=c[o>>2]|0}while((l|0)<(c[h>>2]|0))}c[da>>2]=0;b[Y>>1]=f|16385;if(c[p>>2]&65536|0){gb=(c[h+28>>2]|0)+48|0;c[q+48>>2]=c[gb>>2];c[gb>>2]=0}if(r>>>0>=W>>>0?Lk(qa,q,c[q+48>>2]|0,40659)|0:0){cb=2;K=206;break}if(a[s>>0]|0){cb=2;K=206;break}b[Y>>1]=b[Y>>1]&-16385;if(m){if(Lk(qa,q,n,40665)|0){cb=2;K=206;break}if(a[s>>0]|0){cb=2;K=206;break}i=c[n>>2]|0;if((i|0)>0){f=n+4|0;h=0;while(1){if(c[(c[f>>2]|0)+4>>2]&16|0){K=96;break a}h=h+1|0;if((h|0)>=(i|0))break;else f=f+20|0}}}if((d[K>>0]|0)>1?(la=c[q+72>>2]|0,la|0):0){m=la;do{h=c[m+12>>2]|0;do if(h|0){if((c[h>>2]|0)<=0)break;f=0;do{i=c[h+4+(f*20|0)>>2]|0;if(i){j=e[Y>>1]|0;b[Y>>1]=j&28655;za=c[qa>>2]|0;c[Xa>>2]=za;c[L>>2]=125;c[M>>2]=126;c[N>>2]=0;c[O>>2]=qa;k=i+24|0;Aa=za;p=Aa+208|0;gb=(c[p>>2]|0)+(c[k>>2]|0)|0;c[p>>2]=gb;Aa=c[(c[Aa>>2]|0)+120>>2]|0;if((Aa|0)<(gb|0)){K=108;break a}_j(Xa,i)|0;l=c[Xa>>2]|0;gb=l+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[k>>2]|0);gb=b[Y>>1]|0;p=i+4|0;c[p>>2]=c[p>>2]|gb&-32752&65535;b[Y>>1]=j&36880|gb&65535;if((c[ba>>2]|0)>0){K=110;break a}if((c[l+36>>2]|0)>=1){cb=2;K=206;break a}}f=f+1|0}while((f|0)<(c[h>>2]|0))}while(0);h=c[m+8>>2]|0;do if(h|0){if((c[h>>2]|0)<=0)break;f=0;do{i=c[h+4+(f*20|0)>>2]|0;if(i){j=e[Y>>1]|0;b[Y>>1]=j&28655;Ba=c[qa>>2]|0;c[Xa>>2]=Ba;c[P>>2]=125;c[Q>>2]=126;c[R>>2]=0;c[S>>2]=qa;k=i+24|0;Ca=Ba;p=Ca+208|0;gb=(c[p>>2]|0)+(c[k>>2]|0)|0;c[p>>2]=gb;Ca=c[(c[Ca>>2]|0)+120>>2]|0;if((Ca|0)<(gb|0)){K=119;break a}_j(Xa,i)|0;l=c[Xa>>2]|0;gb=l+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[k>>2]|0);gb=b[Y>>1]|0;p=i+4|0;c[p>>2]=c[p>>2]|gb&-32752&65535;b[Y>>1]=j&36880|gb&65535;if((c[ba>>2]|0)>0){K=121;break a}if((c[l+36>>2]|0)>=1){cb=2;K=206;break a}}f=f+1|0}while((f|0)<(c[h>>2]|0))}while(0);m=c[m+32>>2]|0}while((m|0)!=0)}Da=c[q+56>>2]|0;if(Da|0?(c[c[q>>2]>>2]|0)!=(c[c[Da>>2]>>2]|0):0){K=126;break}f=c[q+52>>2]|0;if(!f){K=135;break}q=f;r=r+1|0;f=c[f+8>>2]|0}switch(K|0){case 9:{c[Fa>>2]=Ea;cd(db,41637,Fa);K=11;break}case 46:{c[Ga>>2]=sa;cd(ra,41637,Ga);K=48;break}case 55:{cd(db,40615,Ma);gb=2;Ra=fb;return gb|0}case 59:{c[Na>>2]=ua;cd(ta,41637,Na);K=61;break}case 66:{c[Oa>>2]=wa;cd(va,41637,Oa);K=68;break}case 80:{c[Ha>>2]=ya;cd(xa,41637,Ha);K=82;break}case 96:{cd(db,40671,Ia);gb=2;Ra=fb;return gb|0}case 108:{c[Ja>>2]=Aa;cd(za,41637,Ja);K=110;break}case 119:{c[Ka>>2]=Ca;cd(Ba,41637,Ka);K=121;break}case 126:{if(c[Da+8>>2]&512|0){cd(db,41381,La);gb=2;Ra=fb;return gb|0}switch(a[Da+4>>0]|0){case -128:{f=41509;break}case -126:{f=41519;break}case -127:{f=41529;break}default:f=41536}c[Pa>>2]=f;cd(db,41427,Pa);gb=2;Ra=fb;return gb|0}case 135:{if(!oa){gb=1;Ra=fb;return gb|0}J=c[g+48>>2]|0;if(!J){gb=1;Ra=fb;return gb|0}I=c[db>>2]|0;i=c[J>>2]|0;if((i|0)>(c[I+116>>2]|0)){cd(db,41542,Sa);gb=2;Ra=fb;return gb|0}if((i|0)>0){f=0;do{gb=J+4+(f*20|0)+13|0;a[gb>>0]=a[gb>>0]&-2;f=f+1|0}while((f|0)!=(i|0))}c[g+56>>2]=0;h=c[Qa>>2]|0;if(!h)h=g;else{f=g;while(1){c[h+56>>2]=f;f=c[h+52>>2]|0;if(!f)break;else{gb=h;h=f;f=gb}}}t=J+4|0;u=db+200|0;v=Xa+4|0;w=I+81|0;x=Ya+12|0;y=Ya+4|0;z=Ya+8|0;A=Ya+24|0;B=Ya+20|0;C=db;D=Xa+4|0;E=Xa+8|0;F=Xa+12|0;G=Xa+24|0;H=db+208|0;f=i;c:while(1){s=c[h>>2]|0;if((f|0)<=0){cb=1;K=206;break}r=h+32|0;q=t;p=0;Va=0;while(1){c[Za>>2]=-1;o=q+13|0;d:do if(!(a[o>>0]&1)){f=c[q>>2]|0;e:do if(!f)f=0;else while(1){i=c[f+4>>2]|0;if(!(i&4096))break e;if(!(i&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break}}while(0);f:do if(!(uk(f,Za)|0)){g:do if((a[f>>0]|0)==59?(_a=c[f+8>>2]|0,$a=c[s>>2]|0,($a|0)>0):0){i=0;while(1){k=c[s+4+(i*20|0)+4>>2]|0;if(k|0){gb=a[k>>0]|0;j=(d[208+(gb&255)>>0]|0)-(d[208+(d[_a>>0]|0)>>0]|0)|0;if(!(gb<<24>>24==0|(j|0)!=0)){l=_a;do{k=k+1|0;l=l+1|0;gb=a[k>>0]|0;j=(d[208+(gb&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(gb<<24>>24==0|(j|0)!=0))}if(!j)break}i=i+1|0;if((i|0)>=($a|0))break g}i=i+1|0;c[Za>>2]=i;break f}while(0);c[Za>>2]=0;if((d[u>>0]|0)<=1)if(!f)n=0;else n=dk(I,f,0,0)|0;else n=f;if(!(a[w>>0]|0)){m=c[h>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[Ya>>2]=db;c[y>>2]=c[r>>2];c[z>>2]=m;b[A>>1]=129;c[B>>2]=0;i=c[db>>2]|0;j=i+85|0;k=a[j>>0]|0;a[j>>0]=1;h:do if(!n){a[j>>0]=k;K=180}else{b[A>>1]=129;c[Xa>>2]=C;c[D>>2]=125;c[E>>2]=126;c[F>>2]=0;c[G>>2]=Ya;l=n+24|0;gb=(c[H>>2]|0)+(c[l>>2]|0)|0;c[H>>2]=gb;i=c[i+120>>2]|0;do if((i|0)>=(gb|0)){_j(Xa,n)|0;i=c[Xa>>2]|0;gb=i+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[l>>2]|0);gb=n+4|0;c[gb>>2]=c[gb>>2]|b[A>>1]&-32752&65535;if((c[B>>2]|0)>0)break;gb=(c[i+36>>2]|0)<1;a[j>>0]=k;if(gb){K=180;break h}else{Ua=0;break h}}else{c[bb>>2]=i;cd(db,41637,bb)}while(0);a[j>>0]=k;Ua=0}while(0);i:do if((K|0)==180){K=0;if((c[m>>2]|0)<=0){Ua=0;break}i=0;while(1){gb=i;i=i+1|0;if((bk(0,c[m+4+(gb*20|0)>>2]|0,n,-1)|0)<2){Ua=i;break i}if((i|0)>=(c[m>>2]|0)){Ua=0;break}}}while(0);c[Za>>2]=Ua;i=Ua}else i=0;if(!((n|0)==0|(d[u>>0]|0)>1))ni(I,n);if((i|0)<=0){f=1;break d}}else{i=c[Za>>2]|0;Wa=c[s>>2]|0;if((i|0)<1|(i|0)>(Wa|0)){K=158;break c}}while(0);if((d[u>>0]|0)<=1){c[Xa>>2]=0;c[v>>2]=0;l=oj(I,147,Xa,0)|0;if(!l)break c;j=l+4|0;c[j>>2]=c[j>>2]|1024;c[l+8>>2]=i;j=c[q>>2]|0;if((j|0)==(f|0))j=q;else{while(1){k=c[j+12>>2]|0;if((a[k>>0]|0)==106)j=k;else break}j=j+12|0}c[j>>2]=l;if(f|0)ni(I,f);b[q+16>>1]=i}a[o>>0]=a[o>>0]|1;f=p}else f=p;while(0);i=Va+1|0;Ta=c[J>>2]|0;if((i|0)<(Ta|0)){q=q+20|0;p=f;Va=i}else break}h=c[h+56>>2]|0;if((f|0)!=0&(h|0)!=0)f=Ta;else{K=201;break}}if((K|0)==158){c[ab>>2]=Va+1;c[ab+4>>2]=40659;c[ab+8>>2]=Wa;cd(db,41294,ab)}else if((K|0)==201){if((Ta|0)<=0){gb=1;Ra=fb;return gb|0}f=0;while(1){gb=f;f=f+1|0;if(!(a[J+4+(gb*20|0)+13>>0]&1))break;if((f|0)>=(Ta|0)){cb=1;K=206;break}}if((K|0)==206){Ra=fb;return cb|0}c[eb>>2]=f;cd(db,41576,eb);gb=2;Ra=fb;return gb|0}else if((K|0)==206){Ra=fb;return cb|0}gb=2;Ra=fb;return gb|0}case 206:{Ra=fb;return cb|0}}if((K|0)==11){gb=2;Ra=fb;return gb|0}else if((K|0)==48){gb=2;Ra=fb;return gb|0}else if((K|0)==61){gb=2;Ra=fb;return gb|0}else if((K|0)==68){gb=2;Ra=fb;return gb|0}else if((K|0)==82){gb=2;Ra=fb;return gb|0}else if((K|0)==110){gb=2;Ra=fb;return gb|0}else if((K|0)==121){gb=2;Ra=fb;return gb|0}return 0}function Fk(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=0;a:while(1){switch(a[b+l>>0]|0){case 46:case 0:break a;default:{}}l=l+1|0}if(f|0){b:do if(l|0){h=b;k=f;i=l;while(1){g=a[h>>0]|0;if(!(g<<24>>24)){i=8;break}j=a[208+(g&255)>>0]|0;g=a[208+(d[k>>0]|0)>>0]|0;if(j<<24>>24!=g<<24>>24){i=10;break}if((i|0)>1){h=h+1|0;k=k+1|0;i=i+-1|0}else break b}if((i|0)==8){h=0;g=a[208+(d[k>>0]|0)>>0]|0}else if((i|0)==10)h=j&255;if((h|0)!=(g&255|0)){e=0;return e|0}}while(0);if(a[f+l>>0]|0){e=0;return e|0}}b=b+(l+1)|0;l=0;c:while(1){switch(a[b+l>>0]|0){case 46:case 0:break c;default:{}}l=l+1|0}if(e|0){d:do if(l|0){h=b;k=e;i=l;while(1){g=a[h>>0]|0;if(!(g<<24>>24)){i=21;break}j=a[208+(g&255)>>0]|0;g=a[208+(d[k>>0]|0)>>0]|0;if(j<<24>>24!=g<<24>>24){i=23;break}if((i|0)>1){h=h+1|0;k=k+1|0;i=i+-1|0}else break d}if((i|0)==21){h=0;g=a[208+(d[k>>0]|0)>>0]|0}else if((i|0)==23)h=j&255;if((h|0)!=(g&255|0)){e=0;return e|0}}while(0);if(a[e+l>>0]|0){e=0;return e|0}}if(c|0){h=b+(l+1)|0;e=a[h>>0]|0;g=(d[208+(e&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(!(e<<24>>24==0|(g|0)!=0))do{h=h+1|0;c=c+1|0;e=a[h>>0]|0;g=(d[208+(e&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0}while(!(e<<24>>24==0|(g|0)!=0));if(g|0){e=0;return e|0}}e=1;return e|0}function Gk(b,d,f,g,h,i){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;k=p;d=c[d+4+(f*20|0)>>2]|0;m=c[b>>2]|0;if(!d){o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}d=dk(m,d,0,0)|0;if(!d){o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}if((i|0)>0&(a[h>>0]|0)!=71){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+4>>2]=140;c[k+24>>2]=i;_j(k,d)|0}if((a[g>>0]|0)==106){f=c[g+8>>2]|0;c[k>>2]=f;if(f){i=(Eu(f)|0)&1073741823;c[k+4>>2]=i;if((i|0)!=0?(j=oj(c[b>>2]|0,106,k,0)|0,(j|0)!=0):0){c[j+12>>2]=d;d=j+4|0;c[d>>2]=c[d>>2]|4352;d=j}}else c[k+4>>2]=0}j=g+4|0;c[j>>2]=c[j>>2]|134217728;ni(m,g);f=g;h=d;i=f+52|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));if((c[j>>2]&1024|0)==0?(o=g+8|0,n=c[o>>2]|0,n|0):0){b=(Eu(n)|0)+1|0;a:do if(!m){k=Sv(b|0,0,-1,-1)|0;i=L()|0;if(!(i>>>0>0|(i|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](b)|0;l=38;break}f=Wa[c[29356>>2]&127](b)|0;if((c[14985]|0)>>>0<b>>>0)c[14985]=b;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){k=c[14978]|0;i=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=k>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(f){h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=39}else l=39}else f=0}else f=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){f=0;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<b>>>0:0))){h=m+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];l=m+284|0;c[l>>2]=(c[l>>2]|0)+1;l=38;break a}h=m+296|0;f=c[h>>2]|0;if(!f){f=m+292|0;break}else{c[h>>2]=c[f>>2];l=m+284|0;c[l>>2]=(c[l>>2]|0)+1;l=38;break a}}else f=m+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(m,b,0)|0;l=38}while(0);if((l|0)==38)if(!f)f=0;else l=39;if((l|0)==39)ew(f|0,n|0,b|0)|0;c[o>>2]=f;c[j>>2]=c[j>>2]|65536}if(m|0){if(c[m+480>>2]|0){Xd(m,d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}o=d;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}}function Hk(b,e){b=b|0;e=e|0;if((a[e>>0]|0)!=-93)return 0;e=e+38|0;a[e>>0]=(c[b+24>>2]|0)+(d[e>>0]|0);return 0}function Ik(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+32|0;i=n+24|0;m=n+16|0;l=n+8|0;h=n;j=c[b>>2]|0;k=c[(c[j+16>>2]|0)+(f<<4)>>2]|0;if(a[j+165>>0]|0){m=0;Ra=n;return m|0}g=$a[c[j+312>>2]&127](c[j+316>>2]|0,20,d,e,k,c[b+240>>2]|0)|0;if((g|0)==1){c[h>>2]=d;c[h+4>>2]=e;d=Bb(40358,h)|0;if(f|0?1:(c[j+20>>2]|0)>2){c[l>>2]=k;c[l+4>>2]=d;d=Bb(40364,l)|0}c[m>>2]=d;cd(b,40370,m);c[b+12>>2]=23;m=1;Ra=n;return m|0}else{if((g|2|0)==2){m=g;Ra=n;return m|0}cd(b,39231,i);c[b+12>>2]=1;m=g;Ra=n;return m|0}return 0}function Jk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;switch(a[d>>0]|0){case -92:case -94:break;default:return 0}e=c[b+24>>2]|0;f=c[e>>2]|0;a:do if((f|0)!=0?(g=c[f>>2]|0,(g|0)>0):0){d=c[d+28>>2]|0;b=0;while(1){if((d|0)==(c[f+8+(b*72|0)+40>>2]|0))break;b=b+1|0;if((b|0)>=(g|0)){h=8;break a}}b=e+4|0}else h=8;while(0);if((h|0)==8)b=e+8|0;c[b>>2]=(c[b>>2]|0)+1;return 0}function Kk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;h=i;if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}if(c[d+8>>2]&128|0){Ra=i;return}c[h+4>>2]=141;c[h>>2]=b;f=h+8|0;if(!(a[b+22>>0]|0))g=h+12|0;else{c[f>>2]=142;g=h+12|0;c[g>>2]=0;$j(h,d)|0}c[f>>2]=143;c[g>>2]=68;$j(h,d)|0;f=b+36|0;if(c[f>>2]|0){Ra=i;return}if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}c[h+4>>2]=125;c[h+8>>2]=126;c[h+12>>2]=0;c[h>>2]=b;c[h+24>>2]=e;$j(h,d)|0;if(c[f>>2]|0){Ra=i;return}if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}c[h+8>>2]=132;c[h+12>>2]=69;c[h+4>>2]=141;c[h>>2]=b;$j(h,d)|0;Ra=i;return}function Lk(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;H=Ra;Ra=Ra+80|0;F=H+24|0;B=H+16|0;A=H;x=H+40|0;y=H+36|0;if(!g){G=0;Ra=H;return G|0}z=c[c[f>>2]>>2]|0;E=c[e>>2]|0;k=g+4|0;j=c[g>>2]|0;a:do if((j|0)>0){t=x+4|0;u=x+24|0;i=0;s=k;b:while(1){r=c[s>>2]|0;q=(r|0)==0;c:do if(q)j=0;else{j=r;while(1){l=c[j+4>>2]|0;if(!(l&4096))break c;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}}while(0);d:do if((a[h>>0]|0)==71)G=23;else{p=c[f>>2]|0;e:do if((a[j>>0]|0)==59?(v=c[j+8>>2]|0,w=c[p>>2]|0,(w|0)>0):0){l=0;while(1){n=c[p+4+(l*20|0)+4>>2]|0;if(n|0){o=a[n>>0]|0;m=(d[208+(o&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0;if(!(o<<24>>24==0|(m|0)!=0)){o=v;do{n=n+1|0;o=o+1|0;I=a[n>>0]|0;m=(d[208+(I&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(I<<24>>24==0|(m|0)!=0))}if(!m)break}l=l+1|0;if((l|0)>=(w|0))break e}I=l+1|0;c[y>>2]=I;b[s+16>>1]=I;break d}while(0);c[y>>2]=0;G=23}while(0);f:do if((G|0)==23){G=0;if(uk(j,y)|0){j=c[y>>2]|0;if((j+-1|0)>>>0>65534)break b;b[s+16>>1]=j;break}m=s+16|0;b[m>>1]=0;if(Ck(e,r)|0){C=1;G=50;break b}j=c[f>>2]|0;if((c[j>>2]|0)>0){if(q){l=0;while(1){I=l;l=l+1|0;if(!(bk(0,0,c[j+4+(I*20|0)>>2]|0,-1)|0))b[m>>1]=l;j=c[f>>2]|0;if((l|0)>=(c[j>>2]|0))break f}}l=0;do{if(!(bk(0,r,c[j+4+(l*20|0)>>2]|0,-1)|0)){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;c[t>>2]=144;c[u>>2]=f;_j(x,r)|0;l=l+1|0;b[m>>1]=l}else l=l+1|0;j=c[f>>2]|0}while((l|0)<(c[j>>2]|0))}}while(0);i=i+1|0;j=c[g>>2]|0;if((i|0)<(j|0))s=s+20|0;else break a}if((G|0)==50){Ra=H;return C|0}c[A>>2]=i+1;c[A+4>>2]=h;c[A+8>>2]=z;cd(E,41294,A);I=1;Ra=H;return I|0}while(0);i=c[E>>2]|0;if(a[i+81>>0]|0){I=0;Ra=H;return I|0}if((j|0)>(c[i+116>>2]|0)){c[B>>2]=h;cd(E,41350,B);I=1;Ra=H;return I|0}m=c[f>>2]|0;if((j|0)<=0){I=0;Ra=H;return I|0}l=0;while(1){i=b[k+16>>1]|0;if(i<<16>>16){i=i&65535;D=c[m>>2]|0;if((D|0)<(i|0))break;Gk(E,m,i+-1|0,c[k>>2]|0,h,0);j=c[g>>2]|0}i=l+1|0;if((i|0)<(j|0)){l=i;k=k+20|0}else{C=0;G=50;break}}if((G|0)==50){Ra=H;return C|0}c[F>>2]=l+1;c[F+4>>2]=h;c[F+8>>2]=D;cd(E,41294,F);I=1;Ra=H;return I|0}function Mk(a,b){a=a|0;b=b|0;return 0}function Nk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;n=p+8|0;m=p;o=d+52|0;if(!(c[o>>2]|0)){o=0;Ra=p;return o|0}k=c[d+48>>2]|0;if(!k){o=0;Ra=p;return o|0}f=d;a:while(1){switch(a[f+4>>0]|0){case -125:case -128:break;default:break a}f=c[f+52>>2]|0;if(!f){j=0;l=36;break}}if((l|0)==36){Ra=p;return j|0}f=c[k>>2]|0;if((f|0)<=0){o=0;Ra=p;return o|0}while(1){i=f;f=f+-1|0;if(c[(c[k+4+(f*20|0)>>2]|0)+4>>2]&256|0)break;if((i|0)<=1){j=0;l=36;break}}if((l|0)==36){Ra=p;return j|0}b=c[b>>2]|0;k=c[b>>2]|0;b:do if(!k){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](76)|0;l=33;break}f=Wa[c[29356>>2]&127](76)|0;if((c[14985]|0)>>>0<76)c[14985]=76;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){j=c[14978]|0;i=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=j>>>0)&1}h=Wa[c[29340>>2]&127](f)|0;if(!h){o=2;Ra=p;return o|0}f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){o=2;Ra=p;return o|0}}else{do if((e[k+276>>1]|0)>=76){f=k+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break b}f=k+296|0;g=c[f>>2]|0;if(!g){f=k+292|0;break}else{c[f>>2]=c[g>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break b}}else f=k+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}g=_d(k,76,0)|0;l=33}while(0);if((l|0)==33)if(!g){o=2;Ra=p;return o|0}else h=g;i=h;j=i+76|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));f=m;c[f>>2]=0;c[f+4>>2]=0;f=lj(b,0,0,0,m,h,0,0)|0;if(!f){o=2;Ra=p;return o|0}i=h;g=d;j=i+76|0;do{c[i>>2]=c[g>>2];i=i+4|0;g=g+4|0}while((i|0)<(j|0));c[d+32>>2]=f;c[n>>2]=0;c[n+4>>2]=0;n=oj(k,172,n,0)|0;n=nj(c[b>>2]|0,0,n)|0;c[d>>2]=n;a[d+4>>0]=-125;c[d+36>>2]=0;c[h+40>>2]=0;c[h+44>>2]=0;c[h+48>>2]=0;c[o>>2]=0;c[d+56>>2]=0;c[d+64>>2]=0;o=d+8|0;c[o>>2]=c[o>>2]&-65793|65536;c[(c[h+52>>2]|0)+56>>2]=h;c[h+60>>2]=0;o=0;Ra=p;return o|0}function Ok(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;qa=Ra;Ra=Ra+144|0;pa=qa+128|0;la=qa+120|0;ka=qa+112|0;ja=qa+96|0;ia=qa+88|0;P=qa+80|0;O=qa+72|0;N=qa+64|0;I=qa+56|0;H=qa+48|0;G=qa+40|0;K=qa+24|0;J=qa+16|0;F=qa+8|0;E=qa;ga=qa+136|0;ma=c[f>>2]|0;na=c[ma>>2]|0;oa=g+8|0;h=c[oa>>2]|0;c[oa>>2]=h|64;ha=na+81|0;if(a[ha>>0]|0){pa=2;Ra=qa;return pa|0}if(h&64|0){pa=1;Ra=qa;return pa|0}A=g+32|0;ea=c[A>>2]|0;fa=c[g>>2]|0;h=c[g+64>>2]|0;if(h|0){da=ma+264|0;c[h+4>>2]=c[da>>2];c[da>>2]=h}Qk(ma,ea);da=ea+8|0;a:do if((c[ea>>2]|0)>0){y=0;z=da;b:while(1){x=z+37|0;q=a[x>>0]|0;do if(!(q&32)){u=c[f>>2]|0;s=c[u>>2]|0;v=u+264|0;h=c[v>>2]|0;w=z+4|0;c:do if((c[w>>2]|0)==0?(D=c[z+8>>2]|0,!((h|0)==0|(D|0)==0)):0){d:while(1){o=c[h>>2]|0;e:do if((o|0)>0){ba=a[D>>0]|0;p=a[208+(ba&255)>>0]|0;if(!(ba<<24>>24)){i=0;while(1){j=h+8+(i<<4)|0;k=c[j>>2]|0;i=i+1|0;if(p<<24>>24==(a[208+(d[k>>0]|0)>>0]|0)){m=j;j=k;break d}if((i|0)>=(o|0))break e}}l=0;do{m=h+8+(l<<4)|0;j=c[m>>2]|0;if(p<<24>>24==(a[208+(d[j>>0]|0)>>0]|0)){i=j;k=D;do{k=k+1|0;i=i+1|0;ba=a[k>>0]|0;n=(d[208+(ba&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(n|0)!=0));if(!n)break d}l=l+1|0}while((l|0)<(o|0))}while(0);h=c[h+4>>2]|0;if(!h)break c}t=m+12|0;i=c[t>>2]|0;if(i|0){ca=24;break b}if(q&4){ca=26;break b}l=(s|0)==0;f:do if(l){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](80)|0;ca=50;break}i=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){ba=c[14978]|0;aa=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;$=L()|0;c[14768]=(($|0)<0|($|0)==0&aa>>>0<=ba>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){ca=51;break b}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[s+272>>2]|0){if(a[s+81>>0]|0){ca=51;break b}}else{do if((e[s+276>>1]|0)>=80){j=s+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=50;break f}j=s+296|0;i=c[j>>2]|0;if(!i){i=s+292|0;break}else{c[j>>2]=c[i>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=50;break f}}else i=s+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(s,80,0)|0;ca=50}while(0);if((ca|0)==50){ca=0;if(!i){ca=51;break b}}o=i;p=o+80|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(p|0));c[z+16>>2]=i;r=i+32|0;c[r>>2]=1;n=c[m>>2]|0;g:do if(!n)j=0;else{o=(Eu(n)|0)+1|0;h:do if(l){ba=Sv(o|0,0,-1,-1)|0;aa=L()|0;if(aa>>>0>0|(aa|0)==0&ba>>>0>2147483390){j=0;break g}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;ca=77;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){ba=c[14978]|0;aa=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;$=L()|0;c[14768]=(($|0)<0|($|0)==0&aa>>>0<=ba>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break g}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[s+272>>2]|0){if(a[s+81>>0]|0){j=0;break g}}else{do if(!(0<0|(0==0?(e[s+276>>1]|0)>>>0<o>>>0:0))){k=s+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=77;break h}k=s+296|0;j=c[k>>2]|0;if(!j){j=s+292|0;break}else{c[k>>2]=c[j>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=77;break h}}else j=s+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(s,o,0)|0;ca=77}while(0);if((ca|0)==77){ca=0;if(!j){j=0;break}}ew(j|0,n|0,o|0)|0}while(0);c[i>>2]=j;b[i+40>>1]=-1;b[i+44>>1]=200;q=i+36|0;c[q>>2]=c[q>>2]|66;q=fk(s,c[m+8>>2]|0,0)|0;c[z+20>>2]=q;if(a[s+81>>0]|0){h=2;ca=421;break b}p=((a[q+4>>0]|0)+-127&255)<2;if(p?(B=c[q+32>>2]|0,C=c[B>>2]|0,(C|0)>0):0){o=q+8|0;n=0;do{do if(!(c[B+8+(n*72|0)+4>>2]|0)){k=c[B+8+(n*72|0)+8>>2]|0;if(!k)break;l=c[m>>2]|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(ba<<24>>24==0|(j|0)!=0))do{k=k+1|0;l=l+1|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(j|0)!=0));if(j|0)break;c[B+8+(n*72|0)+16>>2]=i;ba=B+8+(n*72|0)+37|0;a[ba>>0]=a[ba>>0]|32;c[r>>2]=(c[r>>2]|0)+1;c[o>>2]=c[o>>2]|8192}while(0);n=n+1|0}while((n|0)!=(C|0))}if((c[r>>2]|0)>>>0>2){ca=92;break b}c[t>>2]=40892;l=c[v>>2]|0;c[v>>2]=h;if(p){aa=c[q+52>>2]|0;ba=aa+64|0;c[ba>>2]=c[q+64>>2];$j(f,aa)|0;c[ba>>2]=0}else $j(f,q)|0;c[v>>2]=h;h=q;while(1){j=c[h+52>>2]|0;if(!j)break;else h=j}h=c[h>>2]|0;k=c[m+4>>2]|0;do if(k){if(!h){h=k;break}h=c[h>>2]|0;j=c[k>>2]|0;if((h|0)==(j|0))h=k;else{ca=101;break b}}while(0);Tk(c[u>>2]|0,h,i+42|0,i+4|0);if(p){c[t>>2]=(c[q+8>>2]&8192|0)==0?40987:40953;$j(f,q)|0}c[t>>2]=0;c[v>>2]=l}while(0);l=z+16|0;h=c[l>>2]|0;if(!h){k=c[z+8>>2]|0;do if(!k){if($j(f,c[z+20>>2]|0)|0){h=2;ca=421;break b}if(Rk(ma,z)|0){h=2;ca=421;break b}}else{j=c[z>>2]|0;if(!j)h=w;else{i=c[(c[ma>>2]|0)+16>>2]|0;h=0;while(1)if((c[i+(h<<4)+12>>2]|0)==(j|0))break;else h=h+1|0;h=i+(h<<4)|0}h=bd(ma,0,k,c[h>>2]|0)|0;c[l>>2]=h;if(!h){h=2;ca=421;break b}i=h+32|0;j=c[i>>2]|0;if(j>>>0>65534){ca=115;break b}c[i>>2]=j+1;if(!(c[h+56>>2]|0)){if(a[x>>0]&4){ca=118;break b}if(!(c[h+12>>2]|0))break}if(Sk(ma,h)|0){h=2;ca=421;break b}$=fk(na,c[h+12>>2]|0,0)|0;c[z+20>>2]=$;ba=h+42|0;aa=b[ba>>1]|0;b[ba>>1]=-1;$j(f,$)|0;b[ba>>1]=aa}while(0);h=c[l>>2]|0;if(!h)break}if(a[x>>0]&2){m=c[z+64>>2]|0;h=c[h+8>>2]|0;if(!h){ca=132;break b}l=d[208+(d[m>>0]|0)>>0]|0;while(1){j=c[h>>2]|0;ba=a[j>>0]|0;i=(d[208+(ba&255)>>0]|0)-l|0;if(!(ba<<24>>24==0|(i|0)!=0)){k=m;do{j=j+1|0;k=k+1|0;ba=a[j>>0]|0;i=(d[208+(ba&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(i|0)!=0))}if(!i)break;h=c[h+20>>2]|0;if(!h){ca=132;break b}}c[z+68>>2]=h}}while(0);y=y+1|0;if((y|0)>=(c[ea>>2]|0))break a;else z=z+72|0}if((ca|0)==24){c[E>>2]=j;cd(u,i,E);pa=2;Ra=qa;return pa|0}else if((ca|0)==26){c[F>>2]=D;cd(u,41054,F);pa=2;Ra=qa;return pa|0}else if((ca|0)==51){c[z+16>>2]=0;pa=2;Ra=qa;return pa|0}else if((ca|0)==92){c[J>>2]=c[m>>2];cd(u,40849,J);pa=2;Ra=qa;return pa|0}else if((ca|0)==101){c[K>>2]=c[m>>2];c[K+4>>2]=h;c[K+8>>2]=j;cd(u,40915,K);c[v>>2]=l;pa=2;Ra=qa;return pa|0}else if((ca|0)==115){c[G>>2]=c[h>>2];cd(ma,40730,G);c[l>>2]=0;pa=2;Ra=qa;return pa|0}else if((ca|0)==118){c[H>>2]=c[z+8>>2];cd(ma,41054,H);pa=2;Ra=qa;return pa|0}else if((ca|0)==132){c[I>>2]=m;c[I+4>>2]=0;cd(ma,41107,I);a[ma+17>>0]=1;pa=2;Ra=qa;return pa|0}else if((ca|0)==421){Ra=qa;return h|0}}while(0);if(a[ha>>0]|0){pa=2;Ra=qa;return pa|0}G=c[A>>2]|0;i:do if((c[G>>2]|0)>1){H=g+36|0;D=0;E=G+8|0;F=G+80|0;j:while(1){B=c[F+16>>2]|0;if(!((B|0)==0|(c[E+16>>2]|0)==0)){ba=d[F+36>>0]|0;C=ba&32;A=(C|0)==0;f=F+44|0;if(ba&4){if(c[f>>2]|0){ca=142;break}i=F+48|0;if(c[i>>2]|0){ca=142;break}u=B+42|0;h=b[u>>1]|0;if(h<<16>>16>0){v=B+4|0;z=D+1|0;w=(C|0)!=0;x=G+8+(z*72|0)+16|0;y=G+8+(z*72|0)+40|0;z=G+8+(z*72|0)+56|0;t=0;do{p=c[(c[v>>2]|0)+(t<<4)>>2]|0;r=0;k:while(1){s=G+8+(r*72|0)+16|0;j=c[s>>2]|0;k=b[j+42>>1]|0;if(k<<16>>16>0){n=c[j+4>>2]|0;o=d[208+(d[p>>0]|0)>>0]|0;m=k<<16>>16;q=0;while(1){k=c[n+(q<<4)>>2]|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-o|0;if(!(ba<<24>>24==0|(j|0)!=0)){l=p;do{k=k+1|0;l=l+1|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(j|0)!=0))}if(!j){ca=154;break k}j=q+1|0;if((j|0)<(m|0))q=j;else break}}if(r>>>0<D>>>0)r=r+1|0;else break}if((ca|0)==154){ca=0;m=c[ma>>2]|0;l=m+272|0;l:do if(c[l>>2]|0)if(!(a[m+81>>0]|0))ca=164;else k=0;else{do if((e[m+276>>1]|0)>=52){h=m+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=165;break l}h=m+296|0;j=c[h>>2]|0;if(!j){h=m+292|0;break}else{c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=165;break l}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=164}while(0);if((ca|0)==164){j=_d(m,52,0)|0;ca=165}do if((ca|0)==165){ca=0;if(j){o=j;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[j>>0]=-94;b[j+34>>1]=-1;c[j+24>>2]=1;ba=c[s>>2]|0;c[j+44>>2]=ba;c[j+28>>2]=c[G+8+(r*72|0)+40>>2];if((q|0)==(b[ba+40>>1]|0)){b[j+32>>1]=-1;k=j;break}else{b[j+32>>1]=q;aa=cw(1,0,(q>>>0<63?q:63)|0)|0;ba=L()|0;k=G+8+(r*72|0)+56|0;$=k;ba=c[$+4>>2]|ba;c[k>>2]=c[$>>2]|aa;c[k+4>>2]=ba;k=j;break}}else k=0}while(0);m:do if(c[l>>2]|0)if(!(a[m+81>>0]|0))ca=179;else j=0;else{do if((e[m+276>>1]|0)>=52){h=m+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=180;break m}h=m+296|0;j=c[h>>2]|0;if(!j){h=m+292|0;break}else{c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=180;break m}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=179}while(0);if((ca|0)==179){j=_d(m,52,0)|0;ca=180}do if((ca|0)==180){ca=0;if(!j){j=0;break}o=j;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[j>>0]=-94;b[j+34>>1]=-1;c[j+24>>2]=1;ba=c[x>>2]|0;c[j+44>>2]=ba;c[j+28>>2]=c[y>>2];if((t|0)==(b[ba+40>>1]|0)){b[j+32>>1]=-1;break}else{b[j+32>>1]=t;$=cw(1,0,(t>>>0<63?t:63)|0)|0;aa=L()|0;_=z;aa=c[_+4>>2]|aa;ba=z;c[ba>>2]=c[_>>2]|$;c[ba+4>>2]=aa;break}}while(0);h=ej(ma,53,k,j)|0;if(w&(h|0)!=0){ba=h+4|0;c[ba>>2]=c[ba>>2]|1;b[h+36>>1]=c[j+28>>2]}h=Xk(m,c[H>>2]|0,h)|0;c[H>>2]=h;h=b[u>>1]|0}t=t+1|0}while((t|0)<(h<<16>>16|0))}}else i=F+48|0;h=c[f>>2]|0;if(h|0){if(c[i>>2]|0){ca=190;break}if(!A){Wk(h,c[F+40>>2]|0);h=c[f>>2]|0}ba=Xk(c[ma>>2]|0,c[H>>2]|0,h)|0;c[H>>2]=ba;c[f>>2]=0}y=c[i>>2]|0;if(y|0?(M=y+4|0,(c[M>>2]|0)>0):0){z=B+42|0;x=B+4|0;w=D+1|0;t=(C|0)!=0;u=G+8+(w*72|0)+16|0;v=G+8+(w*72|0)+40|0;w=G+8+(w*72|0)+56|0;s=0;do{o=c[(c[y>>2]|0)+(s<<3)>>2]|0;h=b[z>>1]|0;if(h<<16>>16<=0){ca=246;break j}l=c[x>>2]|0;p=d[208+(d[o>>0]|0)>>0]|0;k=h<<16>>16;r=0;while(1){i=c[l+(r<<4)>>2]|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-p|0;if(!(ba<<24>>24==0|(h|0)!=0)){j=o;do{i=i+1|0;j=j+1|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(h|0)!=0))}if(!h)break;h=r+1|0;if((h|0)<(k|0))r=h;else{ca=246;break j}}n=0;n:while(1){q=G+8+(n*72|0)+16|0;h=c[q>>2]|0;i=b[h+42>>1]|0;if(i<<16>>16>0){l=c[h+4>>2]|0;k=i<<16>>16;m=0;while(1){i=c[l+(m<<4)>>2]|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-p|0;if(!(ba<<24>>24==0|(h|0)!=0)){j=o;do{i=i+1|0;j=j+1|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(h|0)!=0))}if(!h)break n;h=m+1|0;if((h|0)<(k|0))m=h;else break}}if(n>>>0<D>>>0)n=n+1|0;else{ca=246;break j}}l=c[ma>>2]|0;k=l+272|0;o:do if(c[k>>2]|0)if(!(a[l+81>>0]|0))ca=223;else j=0;else{do if((e[l+276>>1]|0)>=52){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=224;break o}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=224;break o}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=223}while(0);if((ca|0)==223){i=_d(l,52,0)|0;ca=224}do if((ca|0)==224){ca=0;if(i){o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[i>>0]=-94;b[i+34>>1]=-1;c[i+24>>2]=1;ba=c[q>>2]|0;c[i+44>>2]=ba;c[i+28>>2]=c[G+8+(n*72|0)+40>>2];if((m|0)==(b[ba+40>>1]|0)){b[i+32>>1]=-1;j=i;break}else{b[i+32>>1]=m;aa=cw(1,0,(m>>>0<63?m:63)|0)|0;ba=L()|0;j=G+8+(n*72|0)+56|0;$=j;ba=c[$+4>>2]|ba;c[j>>2]=c[$>>2]|aa;c[j+4>>2]=ba;j=i;break}}else j=0}while(0);p:do if(c[k>>2]|0)if(!(a[l+81>>0]|0))ca=238;else i=0;else{do if((e[l+276>>1]|0)>=52){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=239;break p}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=239;break p}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=238}while(0);if((ca|0)==238){i=_d(l,52,0)|0;ca=239}do if((ca|0)==239){ca=0;if(i){o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[i>>0]=-94;b[i+34>>1]=-1;c[i+24>>2]=1;ba=c[u>>2]|0;c[i+44>>2]=ba;c[i+28>>2]=c[v>>2];if((r|0)==(b[ba+40>>1]|0)){b[i+32>>1]=-1;break}else{b[i+32>>1]=r;$=cw(1,0,(r>>>0<63?r:63)|0)|0;aa=L()|0;_=w;aa=c[_+4>>2]|aa;ba=w;c[ba>>2]=c[_>>2]|$;c[ba+4>>2]=aa;break}}else i=0}while(0);h=ej(ma,53,j,i)|0;if(t&(h|0)!=0){ba=h+4|0;c[ba>>2]=c[ba>>2]|1;b[h+36>>1]=c[i+28>>2]}ba=Xk(l,c[H>>2]|0,h)|0;c[H>>2]=ba;s=s+1|0}while((s|0)<(c[M>>2]|0))}}D=D+1|0;if((D|0)>=((c[G>>2]|0)+-1|0))break i;else{E=E+72|0;F=F+72|0}}if((ca|0)==142){c[N>>2]=0;cd(ma,41125,N);pa=2;Ra=qa;return pa|0}else if((ca|0)==190){cd(ma,41175,O);pa=2;Ra=qa;return pa|0}else if((ca|0)==246){c[P>>2]=o;cd(ma,41230,P);pa=2;Ra=qa;return pa|0}}while(0);k=c[fa>>2]|0;q:do if((k|0)>0){j=0;h=0;r:while(1){i=c[fa+4+(j*20|0)>>2]|0;switch(a[i>>0]|0){case -84:break r;case -122:{if((a[c[i+16>>2]>>0]|0)==-84)break r;break}default:{}}h=c[i+4>>2]|h;j=j+1|0;if((j|0)>=(k|0)){ca=415;break q}}M=0==0?(c[(c[ma>>2]|0)+32>>2]&68|0)==4:0;N=ga+4|0;O=ga+4|0;P=ga+4|0;Q=(na|0)==0;R=ma+200|0;S=na+480|0;T=na+304|0;U=ma+272|0;V=na+308|0;W=na+300|0;X=na+272|0;Y=na+276|0;Z=na+288|0;_=na+296|0;$=na+284|0;aa=na+292|0;ba=na+16|0;i=0;K=0;do{k=fa+4+(K*20|0)|0;j=c[k>>2]|0;h=c[j+4>>2]|h;switch(a[j>>0]|0){case -84:{J=0;ca=260;break}case -122:{if((a[c[j+16>>2]>>0]|0)==-84){J=c[(c[j+12>>2]|0)+8>>2]|0;ca=260}else ca=256;break}default:ca=256}do if((ca|0)==256){ca=0;i=nj(c[ma>>2]|0,i,j)|0;if(i|0){I=fa+4+(K*20|0)+4|0;H=(c[i>>2]|0)+-1|0;c[i+4+(H*20|0)+4>>2]=c[I>>2];J=fa+4+(K*20|0)+8|0;c[i+4+(H*20|0)+8>>2]=c[J>>2];c[I>>2]=0;c[J>>2]=0}c[k>>2]=0}else if((ca|0)==260){ca=0;if((c[ea>>2]|0)>0){H=(J|0)==0;I=(J|0)!=0;j=0;F=0;G=da;while(1){n=c[G+16>>2]|0;l=c[G+20>>2]|0;k=c[G+12>>2]|0;if(!k)E=c[n>>2]|0;else E=k;if(a[ha>>0]|0)break;if((l|0)!=0?(c[l+8>>2]&2048|0)!=0:0){D=0;ca=276}else ca=267;do if((ca|0)==267){ca=0;if(!H){D=a[J>>0]|0;k=(d[208+(D&255)>>0]|0)-(d[208+(d[E>>0]|0)>>0]|0)|0;if(!(D<<24>>24==0|(k|0)!=0)){l=E;m=J;do{m=m+1|0;l=l+1|0;D=a[m>>0]|0;k=(d[208+(D&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(D<<24>>24==0|(k|0)!=0))}if(k|0)break}l=c[n+72>>2]|0;if(!l){D=40769;l=0;ca=276}else{m=c[ba>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;D=c[m+(k<<4)>>2]|0;l=0;ca=276}}while(0);if((ca|0)==276){ca=0;C=n+42|0;if((b[C>>1]|0)>0){v=n+4|0;w=(l|0)!=0;f=I&w;B=H&(F|0)!=0;x=G+36|0;y=G+48|0;z=(E|0)==0;A=(D|0)==0;u=0;do{r=c[v>>2]|0;s=c[r+(u<<4)>>2]|0;s:do if(f){m=c[(c[l>>2]|0)+4+(u*20|0)+8>>2]|0;k=0;t:while(1){switch(a[m+k>>0]|0){case 46:case 0:break t;default:{}}k=k+1|0}k=m+(k+1)|0;q=0;u:while(1){switch(a[k+q>>0]|0){case 46:case 0:break u;default:{}}q=q+1|0}v:do if(q|0){p=J;n=q;while(1){m=a[k>>0]|0;if(!(m<<24>>24)){ca=288;break}m=a[208+(m&255)>>0]|0;o=a[208+(d[p>>0]|0)>>0]|0;if(m<<24>>24!=o<<24>>24){ca=290;break}if((n|0)>1){k=k+1|0;p=p+1|0;n=n+-1|0}else break v}if((ca|0)==288){ca=0;m=0;k=a[208+(d[p>>0]|0)>>0]|0}else if((ca|0)==290){ca=0;m=m&255;k=o}if((m|0)!=(k&255|0))break s}while(0);if(!(a[J+q>>0]|0))ca=294}else ca=294;while(0);w:do if((ca|0)==294){ca=0;if((c[oa>>2]&131072|0)==0?a[r+(u<<4)+15>>0]&2:0)break;do if(B){if(a[x>>0]&4){r=0;do{j=c[ea+8+(r*72|0)+16>>2]|0;k=b[j+42>>1]|0;if(k<<16>>16>0){p=c[j+4>>2]|0;q=d[208+(d[s>>0]|0)>>0]|0;o=k<<16>>16;n=0;do{k=c[p+(n<<4)>>2]|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-q|0;if(!(t<<24>>24==0|(j|0)!=0)){m=s;do{k=k+1|0;m=m+1|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){j=1;break w}n=n+1|0}while((n|0)<(o|0))}r=r+1|0}while(r>>>0<F>>>0)}j=c[y>>2]|0;if(!j)break;q=c[j+4>>2]|0;if((q|0)<=0)break;o=c[j>>2]|0;p=d[208+(d[s>>0]|0)>>0]|0;n=0;do{k=c[o+(n<<3)>>2]|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-p|0;if(!(t<<24>>24==0|(j|0)!=0)){m=s;do{k=k+1|0;m=m+1|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){j=1;break w}n=n+1|0}while((n|0)<(q|0))}while(0);c[ga>>2]=s;if(!s)j=0;else j=(Eu(s)|0)&1073741823;c[N>>2]=j;j=oj(na,59,ga,0)|0;if(!M?(c[ea>>2]|0)<=1:0){t=0;r=s}else ca=319;do if((ca|0)==319){ca=0;c[ga>>2]=E;if(z)k=0;else k=(Eu(E)|0)&1073741823;c[O>>2]=k;j=ej(ma,134,oj(na,59,ga,0)|0,j)|0;if(!A){c[ga>>2]=D;t=(Eu(D)|0)&1073741823;c[P>>2]=t;j=ej(ma,134,oj(na,59,ga,0)|0,j)|0}if(!M){t=0;r=s;break}c[ia>>2]=E;c[ia+4>>2]=s;r=dd(na,40358,ia)|0;t=r}while(0);i=nj(c[ma>>2]|0,i,j)|0;q=r;j=(r|0)==0;if(j)p=0;else p=(Eu(r)|0)&1073741823;do if(i|0){o=(c[i>>2]|0)+-1|0;n=c[ma>>2]|0;x:do if(j)n=0;else{m=p+1|0;y:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))ca=339;else{n=0;break x}else{do if(!(0>0|(0==0?m>>>0>(e[n+276>>1]|0)>>>0:0))){k=n+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];s=n+284|0;c[s>>2]=(c[s>>2]|0)+1;break y}k=n+296|0;j=c[k>>2]|0;if(!j){j=n+292|0;break}else{c[k>>2]=c[j>>2];s=n+284|0;c[s>>2]=(c[s>>2]|0)+1;break y}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;ca=339}while(0);if((ca|0)==339){ca=0;j=_d(n,m,0)|0}if(!j){n=0;break}ew(j|0,r|0,p|0)|0;a[j+p>>0]=0;n=j}while(0);c[i+4+(o*20|0)+4>>2]=n;z:do if((d[R>>0]|0)>1){m=c[ma>>2]|0;A:do if(!m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;ca=366;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){s=c[14978]|0;o=Tv(k|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&o>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j)break z;k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break z}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=366;break A}k=m+296|0;j=c[k>>2]|0;if(!j){j=m+292|0;break}else{c[k>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=366;break A}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(m,16,0)|0;ca=366}while(0);if((ca|0)==366){ca=0;if(!j)break}c[j>>2]=n;c[j+4>>2]=q;c[j+8>>2]=p;c[j+12>>2]=c[U>>2];c[U>>2]=j}while(0);if(!(c[oa>>2]&2048))break;p=(c[i>>2]|0)+-1|0;B:do if(w){n=c[(c[l>>2]|0)+4+(u*20|0)+8>>2]|0;if(!n){j=0;break}o=(Eu(n)|0)+1|0;C:do if(Q){s=Sv(o|0,0,-1,-1)|0;r=L()|0;if(r>>>0>0|(r|0)==0&s>>>0>2147483390){j=0;break B}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;ca=393;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){s=c[14978]|0;r=Tv(k|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break B}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[X>>2]|0){if(a[ha>>0]|0){j=0;break B}}else{do if(0<0|(0==0?(e[Y>>1]|0)>>>0<o>>>0:0))j=Z;else{j=c[W>>2]|0;if(j|0){c[W>>2]=c[j>>2];c[$>>2]=(c[$>>2]|0)+1;ca=393;break C}j=c[_>>2]|0;if(!j){j=aa;break}c[_>>2]=c[j>>2];c[$>>2]=(c[$>>2]|0)+1;ca=393;break C}while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(na,o,0)|0;ca=393}while(0);if((ca|0)==393){ca=0;if(!j){j=0;break}}ew(j|0,n|0,o|0)|0}else{c[ja>>2]=D;c[ja+4>>2]=E;c[ja+8>>2]=r;j=dd(na,40771,ja)|0}while(0);c[i+4+(p*20|0)+8>>2]=j;s=i+4+(p*20|0)+13|0;a[s>>0]=a[s>>0]|2}while(0);if(!t){j=1;break}do if(!Q){if(c[S>>2]|0){Xd(na,t);j=1;break w}j=t;if((c[T>>2]|0)>>>0>j>>>0)break;if((c[V>>2]|0)>>>0<=j>>>0)break;c[t>>2]=c[W>>2];c[W>>2]=t;j=1;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);j=1;break}else{j=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);j=1;break}}while(0);u=u+1|0}while((u|0)<(b[C>>1]|0))}}F=F+1|0;if((F|0)>=(c[ea>>2]|0))break;else G=G+72|0}if(j)break}if(!J){cd(ma,40798,la);break}else{c[ka>>2]=J;cd(ma,40780,ka);break}}while(0);K=K+1|0}while((K|0)<(c[fa>>2]|0));ri(na,fa);c[g>>2]=i}else{h=0;ca=415}while(0);if((ca|0)==415)i=c[g>>2]|0;if(!i){pa=0;Ra=qa;return pa|0}if((c[i>>2]|0)>(c[na+116>>2]|0)){cd(ma,40818,pa);pa=2;Ra=qa;return pa|0}if(!(h&2097156)){pa=0;Ra=qa;return pa|0}c[oa>>2]=c[oa>>2]|262144;pa=0;Ra=qa;return pa|0}function Pk(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+264|0;if(!(c[d>>2]|0))return;if(c[b+52>>2]|0)return;a=b;while(1){b=c[a+56>>2]|0;if(!b)break;else a=b}a=c[a+64>>2]|0;if(!a)return;c[d>>2]=c[a+4>>2];return}function Qk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;d=c[b>>2]|0;if((d|0)<=0)return;h=a+40|0;f=0;g=b+8|0;while(1){e=g+40|0;if((c[e>>2]|0)>-1){d=8;break}i=c[h>>2]|0;c[h>>2]=i+1;c[e>>2]=i;e=c[g+20>>2]|0;if(e){Qk(a,c[e+32>>2]|0);d=c[b>>2]|0}f=f+1|0;if((f|0)>=(d|0)){d=8;break}else g=g+72|0}if((d|0)==8)return}function Rk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;l=o;g=c[f+20>>2]|0;j=c[d>>2]|0;a:do if(!j){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](80)|0;n=24;break}h=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){m=c[14978]|0;k=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=m>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(i){h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;m=i}else m=i}else n=25}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){n=25;break}}else{do if((e[j+276>>1]|0)>=80){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=24;break a}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=24;break a}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,80,0)|0;n=24}while(0);if((n|0)==24)if(!h)n=25;else m=h;if((n|0)==25){c[f+16>>2]=0;d=7;Ra=o;return d|0}h=m;i=h+80|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));c[f+16>>2]=m;c[m+32>>2]=1;k=c[f+12>>2]|0;j=c[d>>2]|0;b:do if(!k){c[l>>2]=c[g+20>>2];h=dd(j,41042,l)|0}else{f=(Eu(k)|0)+1|0;c:do if(!j){l=Sv(f|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&l>>>0>2147483390){h=0;break b}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;n=51;break}h=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){l=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=l>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){h=0;break b}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){h=0;break b}}else{do if(!(0<0|(0==0?(e[j+276>>1]|0)>>>0<f>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=51;break c}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=51;break c}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,f,0)|0;n=51}while(0);if((n|0)==51)if(!h){h=0;break}ew(h|0,k|0,f|0)|0}while(0);c[m>>2]=h;while(1){h=c[g+52>>2]|0;if(!h)break;else g=h}Tk(c[d>>2]|0,c[g>>2]|0,m+42|0,m+4|0);b[m+40>>1]=-1;b[m+44>>1]=200;d=m+36|0;c[d>>2]=c[d>>2]|2;d=0;Ra=o;return d|0}function Sk(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=Ra;Ra=Ra+32|0;s=v+16|0;r=v+8|0;n=v;o=v+20|0;u=c[e>>2]|0;p=u+56|0;i=c[p>>2]|0;c[p>>2]=i+1;q=f+56|0;g=c[q>>2]|0;a:do if(g){h=c[f+64>>2]|0;if(h|0)do{if((c[h>>2]|0)==(u|0)){t=33;break a}h=c[h+24>>2]|0}while((h|0)!=0);m=c[c[f+60>>2]>>2]|0;j=c[u+348>>2]|0;if(!j){h=u+340|0;g=u+344|0}else{h=a[m>>0]|0;if(!(h<<24>>24))g=0;else{g=0;i=m;do{i=i+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[i>>0]|0}while(h<<24>>24!=0)}g=(g>>>0)%((c[u+336>>2]|0)>>>0)|0;h=j+(g<<3)|0;g=j+(g<<3)+4|0}h=c[h>>2]|0;b:do if(!h)g=59292;else{l=d[208+(d[m>>0]|0)>>0]|0;while(1){g=c[g>>2]|0;h=h+-1|0;j=c[g+12>>2]|0;k=a[j>>0]|0;i=(d[208+(k&255)>>0]|0)-l|0;if(!(k<<24>>24==0|(i|0)!=0)){k=m;do{j=j+1|0;k=k+1|0;w=a[j>>0]|0;i=(d[208+(w&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(i|0)!=0))}if(!i)break b;if(!h){g=59292;break}}}while(0);g=c[g+8>>2]|0;if(!g){c[n>>2]=m;cd(e,36690,n);c[p>>2]=(c[p>>2]|0)+-1;w=1;Ra=v;return w|0}c[o>>2]=0;h=Ai(u,f,g,c[(c[g>>2]|0)+8>>2]|0,o)|0;i=(h|0)==0;g=c[o>>2]|0;if(!i){c[r>>2]=g;cd(e,31408,r);c[e+12>>2]=h}do if(g|0){if(u|0){if(c[u+480>>2]|0){Xd(u,g);break}w=g;if((c[u+304>>2]|0)>>>0<=w>>>0?(c[u+308>>2]|0)>>>0>w>>>0:0){w=u+300|0;c[g>>2]=c[w>>2];c[w>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{w=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[p>>2]=(c[p>>2]|0)+-1;if(i){g=c[q>>2]|0;break}else{w=1;Ra=v;return w|0}}else t=33;while(0);if((t|0)==33)c[p>>2]=i;if(g|0){w=0;Ra=v;return w|0}p=f+42|0;g=b[p>>1]|0;if(g<<16>>16>0){w=0;Ra=v;return w|0}if(g<<16>>16<0){c[s>>2]=c[f>>2];cd(e,41077,s);w=1;Ra=v;return w|0}i=fk(u,c[f+12>>2]|0,0)|0;if(!i)o=1;else{j=e+200|0;k=a[j>>0]|0;a[j>>0]=0;h=e+40|0;w=c[h>>2]|0;Qk(e,c[i+32>>2]|0);b[p>>1]=-1;l=u+272|0;c[l>>2]=(c[l>>2]|0)+1;s=u+312|0;r=c[s>>2]|0;c[s>>2]=0;g=yk(e,i)|0;c[s>>2]=r;c[h>>2]=w;h=c[f+24>>2]|0;do if(!h)if(!g){b[p>>1]=0;g=1;break}else{w=g+42|0;b[p>>1]=b[w>>1]|0;t=g+4|0;c[f+4>>2]=c[t>>2];b[w>>1]=0;c[t>>2]=0;t=50;break}else{Tk(c[e>>2]|0,h,p,f+4|0);if(((a[u+81>>0]|0)==0?(c[e+36>>2]|0)==0:0)?(c[c[i>>2]>>2]|0)==(b[p>>1]|0):0)Uk(e,f,i);if(!g)g=0;else t=50}while(0);do if((t|0)==50){if(c[u+480>>2]|0){Vi(u,g);g=0;break}t=g+32|0;w=(c[t>>2]|0)+-1|0;c[t>>2]=w;if(!w){Vi(u,g);g=0}else g=0}while(0);pi(u,i,1);c[l>>2]=(c[l>>2]|0)+-1;a[j>>0]=k;o=g}w=(c[f+72>>2]|0)+78|0;b[w>>1]=b[w>>1]|2;if(!(a[u+81>>0]|0)){w=o;Ra=v;return w|0}n=f+4|0;g=c[n>>2]|0;do if(g|0){if((b[p>>1]|0)>0){j=u+480|0;k=u+304|0;l=u+308|0;m=u+300|0;i=0;while(1){h=c[g>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(u,h);break}w=h;if((c[k>>2]|0)>>>0<=w>>>0?(c[l>>2]|0)>>>0>w>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[g+4>>2]|0;if(h|0)ni(u,h);h=c[g+8>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(u,h);break}w=h;if((c[k>>2]|0)>>>0<=w>>>0?(c[l>>2]|0)>>>0>w>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;if((i|0)>=(b[p>>1]|0))break;else g=g+16|0}g=c[n>>2]|0}if(g|0){if(u|0){if(c[u+480>>2]|0){Xd(u,g);break}w=g;if((c[u+304>>2]|0)>>>0<=w>>>0?(c[u+308>>2]|0)>>>0>w>>>0:0){w=u+300|0;c[g>>2]=c[w>>2];c[w>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{w=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);c[n>>2]=0;b[p>>1]=0;w=o;Ra=v;return w|0}function Tk(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;R=Ra;Ra=Ra+48|0;P=R+8|0;O=R;N=R+40|0;Q=R+24|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;do if(g){n=c[g>>2]|0;m=n<<4;a:do if(!f){M=Sv(m|0,0,-1,-1)|0;K=L()|0;if(!(K>>>0>0|(K|0)==0&M>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;s=27;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){M=c[14978]|0;K=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;J=L()|0;c[14768]=((J|0)<0|(J|0)==0&K>>>0<=M>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;s=28}else s=28}else M=0}else M=0}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){M=0;break}}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<m>>>0:0))){k=f+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];s=f+284|0;c[s>>2]=(c[s>>2]|0)+1;s=27;break a}k=f+296|0;j=c[k>>2]|0;if(!j){j=f+292|0;break}else{c[k>>2]=c[j>>2];s=f+284|0;c[s>>2]=(c[s>>2]|0)+1;s=27;break a}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(f,m,0)|0;s=27}while(0);if((s|0)==27)if(!j)M=0;else s=28;if((s|0)==28){gw(j|0,0,m|0)|0;M=j}if((n|0)<32767){b[h>>1]=n;c[i>>2]=M;k=f+81|0;if((n|0)>0)K=k;else{j=M;l=M;s=32;break}}else{b[h>>1]=32767;c[i>>2]=M;n=32767;K=f+81|0}H=(f|0)==0;J=Q+12|0;I=Q+8|0;u=Q+4|0;v=f+272|0;w=f+276|0;x=f+288|0;y=f+300|0;z=f+296|0;A=f+284|0;B=f+292|0;C=f+82|0;D=f+180|0;E=f+264|0;F=f+236|0;t=M;l=0;while(1){if(a[K>>0]|0)break;j=c[g+4+(l*20|0)+4>>2]|0;do if(!j){j=c[g+4+(l*20|0)>>2]|0;b:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break b;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);c:while(1){switch(a[j>>0]|0){case -94:{s=46;break c}case 59:{s=50;break c}case -122:break;default:{s=51;break c}}j=c[j+16>>2]|0}if((s|0)==46){k=b[j+32>>1]|0;m=c[j+44>>2]|0;if(k<<16>>16<0)j=b[m+40>>1]|0;else j=k<<16>>16;if((j|0)<=-1){j=38132;s=53;break}j=(c[m+4>>2]|0)+(j<<4)|0}else if((s|0)==50)j=j+8|0;else if((s|0)==51)j=g+4+(l*20|0)+8|0;j=c[j>>2]|0;if(!j){c[O>>2]=l+1;j=dd(f,41025,O)|0;c[N>>2]=0;if(!j)s=107;else s=78}else s=53}else s=53;while(0);do if((s|0)==53){p=(Eu(j)|0)+1|0;do if(H){s=Sv(p|0,0,-1,-1)|0;r=L()|0;if(!(r>>>0>0|(r|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](p)|0;s=74;break}k=Wa[c[29356>>2]&127](p)|0;if((c[14985]|0)>>>0<p>>>0)c[14985]=p;o=59064;m=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&m>>>0>0){s=c[14978]|0;r=Tv(m|0,o|0,k|0,((k|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){m=Wa[c[29352>>2]&127](k)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;s=75}else s=75}else s=76}else s=76}else{if(!(c[v>>2]|0)){if(!(0<0|(0==0?(e[w>>1]|0)>>>0<p>>>0:0))){k=c[y>>2]|0;if(k|0){c[y>>2]=c[k>>2];c[A>>2]=(c[A>>2]|0)+1;s=74;break}k=c[z>>2]|0;if(!k)k=B;else{c[z>>2]=c[k>>2];c[A>>2]=(c[A>>2]|0)+1;s=74;break}}else k=x;c[k>>2]=(c[k>>2]|0)+1}k=_d(f,p,0)|0;s=74}while(0);if((s|0)==74)if(!k)s=76;else s=75;if((s|0)==75){ew(k|0,j|0,p|0)|0;c[N>>2]=0;j=k;s=78;break}else if((s|0)==76){c[N>>2]=0;s=107;break}}while(0);d:do if((s|0)==78){s=0;while(1){p=c[J>>2]|0;if(!p){m=u;k=I}else{m=a[j>>0]|0;if(!(m<<24>>24))k=0;else{k=0;o=j;do{o=o+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[o>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[Q>>2]|0)>>>0)|0;m=p+(k<<3)|0;k=p+(k<<3)+4|0}m=c[m>>2]|0;e:do if(!m)k=59292;else{r=d[208+(d[j>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;p=c[k+12>>2]|0;q=a[p>>0]|0;o=(d[208+(q&255)>>0]|0)-r|0;if(!(q<<24>>24==0|(o|0)!=0)){q=j;do{p=p+1|0;q=q+1|0;S=a[p>>0]|0;o=(d[208+(S&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(o|0)!=0))}if(!o)break e;if(!m){k=59292;break}}}while(0);if(!(c[k+8>>2]|0))break;S=Eu(j)|0;k=S&1073741823;f:do switch(S&1073741823|0){case 0:break;case 1:{m=0;s=96;break}default:{o=k+-1|0;while(1){if(((d[j+o>>0]|0)+-48|0)>>>0>=10){m=o;s=96;break f}m=o+-1|0;if((o|0)>1)o=m;else{s=96;break}}}}while(0);if((s|0)==96){s=0;k=(a[j+m>>0]|0)==58?m:k}S=(c[N>>2]|0)+1|0;c[N>>2]=S;c[P>>2]=k;c[P+4>>2]=j;c[P+8>>2]=S;j=dd(f,41034,P)|0;if((c[N>>2]|0)>>>0>3)Fb(4,N);if(!j){s=107;break d}}c[t>>2]=j;if(((mi(Q,j,t)|0)==(t|0)?(a[K>>0]|0)==0:0)?(a[C>>0]|0)==0:0){a[K>>0]=1;if((c[D>>2]|0)>0)c[E>>2]=1;c[v>>2]=(c[v>>2]|0)+1;j=c[F>>2]|0;if(j|0)c[j+12>>2]=7}}while(0);if((s|0)==107){s=0;c[t>>2]=0}l=l+1|0;if((l|0)<(n|0))t=t+16|0;else break}j=c[I>>2]|0;k=c[J>>2]|0;c[I>>2]=0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[J>>2]=0;c[Q>>2]=0;if(!j){r=M;q=l;j=K;l=M}else{do{k=j;j=c[j>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((j|0)!=0);r=M;q=l;j=K;l=M}}else{b[h>>1]=0;c[i>>2]=0;j=0;k=f+81|0;l=0;s=32}while(0);if((s|0)==32){c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q>>2]=0;r=j;q=0;j=k}c[Q+4>>2]=0;if(!(a[j>>0]|0)){Ra=R;return}g:do if(q|0){k=f+480|0;m=f+304|0;n=f+308|0;o=f+300|0;if(!f){j=0;while(1){k=c[r+(j<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);j=j+1|0;if((j|0)==(q|0))break g}}j=0;do{p=c[r+(j<<4)>>2]|0;do if(p|0){if(c[k>>2]|0){Xd(f,p);break}S=p;if((c[m>>2]|0)>>>0<=S>>>0?(c[n>>2]|0)>>>0>S>>>0:0){c[p>>2]=c[o>>2];c[o>>2]=p;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{S=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);j=j+1|0}while((j|0)!=(q|0))}while(0);do if(l|0){if(f|0){if(c[f+480>>2]|0){Xd(f,l);break}S=l;if((c[f+304>>2]|0)>>>0<=S>>>0?(c[f+308>>2]|0)>>>0>S>>>0:0){S=f+300|0;c[l>>2]=c[S>>2];c[S>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{S=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[i>>2]=0;b[h>>1]=0;Ra=R;return}function Uk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+32|0;F=I;G=c[d>>2]|0;H=G+81|0;if(a[H>>0]|0){Ra=I;return};c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;c[F+16>>2]=0;c[F+20>>2]=0;c[F+24>>2]=0;c[F+28>>2]=0;c[F+4>>2]=c[g+32>>2];r=c[g>>2]|0;s=f+42|0;if((b[s>>1]|0)>0){t=G+272|0;u=G+304|0;v=G+276|0;w=G+308|0;x=G+288|0;y=G+300|0;z=G+480|0;A=(G|0)==0;B=G+296|0;C=G+284|0;D=G+292|0;p=0;q=c[f+4>>2]|0;while(1){m=c[r+4+(p*20|0)>>2]|0;l=Vk(F,m)|0;g=Xj(m)|0;n=q+13|0;a[n>>0]=g;if(l){k=(Eu(l)|0)&1073741823;h=c[q>>2]|0;a:do if(!h){h=k+2|0;do if(c[t>>2]|0)if(!(a[H>>0]|0))o=15;else{c[q>>2]=0;break a}else{if(!(0<0|(0==0?(e[v>>1]|0)>>>0<h>>>0:0))){g=c[y>>2]|0;if(g|0){c[y>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;break}g=c[B>>2]|0;if(!g)g=D;else{c[B>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;break}}else g=x;c[g>>2]=(c[g>>2]|0)+1;o=15}while(0);if((o|0)==15){o=0;g=_d(G,h,0)|0}c[q>>2]=g;if(g|0){g=g+1|0;o=32}}else{i=(Eu(h)|0)&1073741823;g=k+2+i|0;j=h;if(((c[u>>2]|0)>>>0<=j>>>0?(c[w>>2]|0)>>>0>j>>>0:0)?!(0<0|(0==0?(e[v>>1]|0)>>>0<g>>>0:0)):0){g=h+(i+1)|0;o=32;break}g=Zd(G,h,g,0)|0;if(g|0){c[q>>2]=g;g=g+(i+1)|0;o=32;break}do if(!(c[z>>2]|0)){if((c[u>>2]|0)>>>0<=j>>>0?(c[w>>2]|0)>>>0>j>>>0:0){c[h>>2]=c[y>>2];c[y>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(G,h);while(0);c[q>>2]=0}while(0);if((o|0)==32){o=0;j=q+15|0;ew(g|0,l|0,k+1|0)|0;a[j>>0]=a[j>>0]|4}g=a[n>>0]|0}if(!(g<<24>>24))a[n>>0]=65;g=Yi(d,m)|0;if(g|0?(E=q+8|0,(c[E>>2]|0)==0):0){j=c[g>>2]|0;b:do if(!j)g=0;else{k=(Eu(j)|0)+1|0;do if(A){n=Sv(k|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&n>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](k)|0;o=61;break}g=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){n=c[14978]|0;m=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[t>>2]|0){if(a[H>>0]|0){g=0;break b}}else{if(!(0<0|(0==0?(e[v>>1]|0)>>>0<k>>>0:0))){g=c[y>>2]|0;if(g|0){c[y>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;o=61;break}g=c[B>>2]|0;if(!g)g=D;else{c[B>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;o=61;break}}else g=x;c[g>>2]=(c[g>>2]|0)+1}g=_d(G,k,0)|0;o=61}while(0);if((o|0)==61){o=0;if(!g){g=0;break}}ew(g|0,j|0,k|0)|0}while(0);c[E>>2]=g}p=p+1|0;if((p|0)>=(b[s>>1]|0))break;else q=q+16|0}}b[f+46>>1]=1;Ra=I;return}function Vk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;m=o;switch(a[e>>0]|0){case -94:{k=b[e+32>>1]|0;n=k<<16>>16;if(!d){n=0;Ra=o;return n|0}j=e+28|0;f=0;do{i=c[d+4>>2]|0;g=c[i>>2]|0;a:do if((g|0)>0){h=c[j>>2]|0;e=0;while(1){if((c[i+8+(e*72|0)+40>>2]|0)==(h|0))break;e=e+1|0;if((e|0)>=(g|0)){l=9;break a}}g=c[i+8+(e*72|0)+16>>2]|0;f=c[i+8+(e*72|0)+20>>2]|0}else l=9;while(0);if((l|0)==9){l=0;d=c[d+12>>2]|0;g=0}e=(g|0)==0}while(e&(d|0)!=0);if(e){n=0;Ra=o;return n|0}if(!f){if(k<<16>>16<0){n=31453;Ra=o;return n|0}e=c[g+4>>2]|0;if(!(a[e+(n<<4)+15>>0]&4)){n=0;Ra=o;return n|0}n=c[e+(n<<4)>>2]|0;n=n+(Eu(n)|0)+1|0;Ra=o;return n|0}else{if(k<<16>>16<=-1){n=0;Ra=o;return n|0}e=c[f>>2]|0;if((c[e>>2]|0)<=(n|0)){n=0;Ra=o;return n|0}n=c[e+4+(n*20|0)>>2]|0;c[m+4>>2]=c[f+32>>2];c[m+12>>2]=d;c[m>>2]=c[d>>2];n=Vk(m,n)|0;Ra=o;return n|0}}case -125:{l=c[e+20>>2]|0;n=c[(c[l>>2]|0)+4>>2]|0;c[m+4>>2]=c[l+32>>2];c[m+12>>2]=d;c[m>>2]=c[d>>2];n=Vk(m,n)|0;Ra=o;return n|0}default:{n=0;Ra=o;return n|0}}return 0}function Wk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!d)return;j=e&65535;do{g=d+4|0;c[g>>2]=c[g>>2]|1;b[d+36>>1]=j;if(((a[d>>0]|0)==-95?(h=d+20|0,i=c[h>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){f=0;g=i;do{Wk(c[g+4+(f*20|0)>>2]|0,e);f=f+1|0;g=c[h>>2]|0}while((f|0)<(c[g>>2]|0))}Wk(c[d+12>>2]|0,e);d=c[d+16>>2]|0}while((d|0)!=0);return}function Xk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;h=m;if(!f){l=g;Ra=m;return l|0}if(!g){l=f;Ra=m;return l|0}c[h>>2]=0;l=f+4|0;if((c[l>>2]&1|0)==0?(uk(f,h)|0)!=0:0)if(!(c[h>>2]|0)){ni(d,f);ni(d,g)}else j=7;else j=7;do if((j|0)==7){c[h>>2]=0;k=g+4|0;if((c[k>>2]&1|0)==0?(uk(g,h)|0)!=0:0){if(!(c[h>>2]|0)){ni(d,f);ni(d,g);break}}else j=9;a:do if(c[d+272>>2]|0){if(!(a[d+81>>0]|0))j=24}else{do if((e[d+276>>1]|0)>=52){h=d+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=d+284|0;c[j>>2]=(c[j>>2]|0)+1;j=25;break a}h=d+296|0;i=c[h>>2]|0;if(!i){h=d+292|0;break}else{c[h>>2]=c[i>>2];j=d+284|0;c[j>>2]=(c[j>>2]|0)+1;j=25;break a}}else h=d+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=24}while(0);if((j|0)==24){i=_d(d,52,0)|0;j=25}if((j|0)==25?i|0:0){h=i;j=h+52|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));a[i>>0]=44;b[i+34>>1]=-1;c[i+24>>2]=1;c[i+16>>2]=g;k=c[k>>2]&2097412;g=i+4|0;c[g>>2]=k;c[i+12>>2]=f;c[g>>2]=k|c[l>>2]&2097412;Ym(i);l=i;Ra=m;return l|0}ni(d,f);ni(d,g);l=0;Ra=m;return l|0}while(0);l=oj(d,147,17136,0)|0;Ra=m;return l|0}function Yk(a,b){a=a|0;b=b|0;return 0}function Zk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=b+8|0;e=c[d>>2]|0;if(e&128|0)return;c[d>>2]=e|128;h=c[a>>2]|0;g=c[b+32>>2]|0;a=c[g>>2]|0;if((a|0)<=0)return;b=0;f=g+8|0;while(1){e=c[f+16>>2]|0;if((c[e+36>>2]&2|0)!=0?(i=c[f+20>>2]|0,(i|0)!=0):0){a=i;while(1){d=c[a+52>>2]|0;if(!d)break;else a=d}Uk(h,e,a);a=c[g>>2]|0}b=b+1|0;if((b|0)>=(a|0))break;else f=f+72|0}return}function _k(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!(c[b+4>>2]&16777216))return 0;a=(c[a+24>>2]|0)+68|0;e=c[a>>2]|0;if(!e)return 0;f=c[b+44>>2]|0;d=a;b=e;while(1){a=b+32|0;if((b|0)==(f|0))break;b=c[a>>2]|0;if(!b){g=7;break}else d=a}if((g|0)==7)return 0;c[d>>2]=c[a>>2];return 0}function $k(a,b){a=a|0;b=b|0;var d=0;a=c[(c[a>>2]|0)+272>>2]|0;if(!a)return 0;while(1){if((c[a>>2]|0)==(b|0))break;a=c[a+12>>2]|0;if(!a){d=6;break}}if((d|0)==6)return 0;c[a>>2]=0;return 0}function al(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;q=r;if(!e){q=0;Ra=r;return q|0}m=c[b+12>>2]|0;if((c[e>>2]|0)<=0){q=0;Ra=r;return q|0}n=b+8|0;p=b+4|0;k=0;l=e+8|0;a:while(1){if(!(c[n>>2]|0)){i=l+4|0;j=c[i>>2]|0;do if(j|0){h=a[j>>0]|0;f=(d[208+(h&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(h<<24>>24==0|(f|0)!=0)){g=m;h=j;do{h=h+1|0;g=g+1|0;s=a[h>>0]|0;f=(d[208+(s&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(f|0)!=0))}h=c[b>>2]|0;if(f|0){g=10;break a}f=c[h>>2]|0;if(f|0){if(c[f+480>>2]|0){Xd(f,j);break}s=j;if((c[f+304>>2]|0)>>>0<=s>>>0?(c[f+308>>2]|0)>>>0>s>>>0:0){s=f+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[i>>2]=0;c[l>>2]=c[p>>2]}if(cl(b,c[l+20>>2]|0)|0){f=1;g=30;break}if(dl(b,c[l+44>>2]|0)|0){f=1;g=30;break}if((a[l+37>>0]&4?(o=c[l+64>>2]|0,o|0):0)?(c[o>>2]|0)>0:0){f=o+4|0;g=0;while(1){if(dl(b,c[f>>2]|0)|0){f=1;g=30;break a}g=g+1|0;if((g|0)>=(c[o>>2]|0))break;else f=f+20|0}}k=k+1|0;if((k|0)>=(c[e>>2]|0)){f=0;g=30;break}else l=l+72|0}if((g|0)==10){s=c[b+20>>2]|0;c[q>>2]=c[b+16>>2];c[q+4>>2]=s;c[q+8>>2]=j;cd(h,42344,q);s=1;Ra=r;return s|0}else if((g|0)==30){Ra=r;return f|0}return 0}function bl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+16|0;n=A+8|0;m=A;s=A+12|0;q=c[f+12>>2]|0;p=d+40|0;y=c[p>>2]|0;z=y+1|0;c[p>>2]=y+2;k=c[d>>2]|0;i=c[f+24>>2]|0;j=c[k+16>>2]|0;if(!i)t=-1e6;else{h=0;while(1)if((c[j+(h<<4)+12>>2]|0)==(i|0)){t=h;break}else h=h+1|0}i=c[f>>2]|0;h=c[j+(t<<4)>>2]|0;do if(((a[k+165>>0]|0)==0?(a[d+200>>0]|0)==0:0)?(l=c[k+312>>2]|0,l|0):0){h=$a[l&127](c[k+316>>2]|0,27,i,0,h,c[d+240>>2]|0)|0;if((h|0)==1){cd(d,39216,m);c[d+12>>2]=23;Ra=A;return}if((h|2|0)==2){if(!h)break;Ra=A;return}else{cd(d,39231,n);c[d+12>>2]=1;Ra=A;return}}while(0);Hj(d,t,c[q+28>>2]|0,1,c[q>>2]|0);n=d+8|0;h=c[n>>2]|0;if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;a:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))o=26;else{Ra=A;return}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break a}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break a}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;o=26}while(0);if((o|0)==26)j=_d(k,224,0)|0;if(!j){Ra=A;return}h=j+104|0;i=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=k;h=k+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;c[j+8>>2]=i;c[j+4>>2]=0;c[h>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=d;c[n>>2]=j;Di(j,61,0,1,0)|0;w=j}else w=h;if((g|0)>-1)l=g;else l=c[f+44>>2]|0;o=Ij(d,f)|0;x=c[p>>2]|0;c[p>>2]=x+1;r=f+50|0;i=e[r>>1]|0;m=(o|0)==0;if(!m)c[o>>2]=(c[o>>2]|0)+1;u=w+108|0;h=c[u>>2]|0;v=w+112|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;p=c[w+104>>2]|0;a[p+(h*20|0)>>0]=114;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=x;c[p+(h*20|0)+8>>2]=0;c[p+(h*20|0)+12>>2]=i;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0}else h=Di(w,114,x,0,i)|0;i=c[w>>2]|0;do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[u>>2]|0)+-1|0;i=c[w+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(w,i+(h*20|0)|0,o,-9);break}if(!m){c[i+(h*20|0)+16>>2]=o;a[j>>0]=-9}}else if(!(m|(c[i+480>>2]|0)!=0)?(p=(c[o>>2]|0)+-1|0,c[o>>2]=p,(p|0)==0):0){h=c[o+12>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,o);break}p=o;if((c[h+304>>2]|0)>>>0<=p>>>0?(c[h+308>>2]|0)>>>0>p>>>0:0){p=h+300|0;c[o>>2]=c[p>>2];c[p>>2]=o;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{p=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);Gj(d,y,t,q,108);h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;q=c[w+104>>2]|0;a[q+(h*20|0)>>0]=36;b[q+(h*20|0)+2>>1]=0;c[q+(h*20|0)+4>>2]=y;c[q+(h*20|0)+8>>2]=0;c[q+(h*20|0)+12>>2]=0;c[q+(h*20|0)+16>>2]=0;a[q+(h*20|0)+1>>0]=0}else h=Di(w,36,y,0,0)|0;q=d+19|0;i=a[q>>0]|0;if(!(i<<24>>24)){k=d+44|0;p=(c[k>>2]|0)+1|0;c[k>>2]=p}else{p=i+-1<<24>>24;a[q>>0]=p;p=c[d+148+((p&255)<<2)>>2]|0}i=c[d+116>>2]|0;a[((i|0)==0?d:i)+20>>0]=1;el(d,f,y,p,0,s,0,0)|0;i=c[u>>2]|0;if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;k=c[w+104>>2]|0;a[k+(i*20|0)>>0]=-125;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=x;c[k+(i*20|0)+8>>2]=p;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else Di(w,131,x,p,0)|0;i=c[s>>2]|0;do if(i|0){j=c[n>>2]|0;k=c[j+12>>2]|0;i=~i;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,j,i);break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[j+108>>2];break}}while(0);i=h+1|0;j=c[u>>2]|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;s=c[w+104>>2]|0;a[s+(j*20|0)>>0]=5;b[s+(j*20|0)+2>>1]=0;c[s+(j*20|0)+4>>2]=y;c[s+(j*20|0)+8>>2]=i;c[s+(j*20|0)+12>>2]=0;c[s+(j*20|0)+16>>2]=0;a[s+(j*20|0)+1>>0]=0}else Di(w,5,y,i,0)|0;i=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))h=(c[w+104>>2]|0)+(((h|0)<0?i+-1|0:h)*20|0)|0;else h=59308;c[h+8>>2]=i;do if((g|0)<0)if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;s=c[w+104>>2]|0;a[s+(i*20|0)>>0]=-119;b[s+(i*20|0)+2>>1]=0;c[s+(i*20|0)+4>>2]=l;c[s+(i*20|0)+8>>2]=t;c[s+(i*20|0)+12>>2]=0;c[s+(i*20|0)+16>>2]=0;a[s+(i*20|0)+1>>0]=0;break}else{Di(w,137,l,t,0)|0;break}while(0);h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;s=c[w+104>>2]|0;a[s+(h*20|0)>>0]=109;b[s+(h*20|0)+2>>1]=0;c[s+(h*20|0)+4>>2]=z;c[s+(h*20|0)+8>>2]=l;c[s+(h*20|0)+12>>2]=t;c[s+(h*20|0)+16>>2]=0;a[s+(h*20|0)+1>>0]=0}else h=Di(w,109,z,l,t)|0;i=c[w>>2]|0;b:do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[u>>2]|0)+-1|0;i=c[w+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(w,i+(h*20|0)|0,o,-9);break}if(!m){c[i+(h*20|0)+16>>2]=o;a[j>>0]=-9}}else if(!(m|(c[i+480>>2]|0)!=0)?(t=(c[o>>2]|0)+-1|0,c[o>>2]=t,(t|0)==0):0){h=c[o+12>>2]|0;do if(h|0){if(c[h+480>>2]|0){Xd(h,o);break b}i=o;if((c[h+304>>2]|0)>>>0>i>>>0)break;if((c[h+308>>2]|0)>>>0<=i>>>0)break;t=h+300|0;c[o>>2]=c[t>>2];c[t>>2]=o;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);h=c[u>>2]|0;if((h|0)>0)b[(c[w+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=(g>>31)+16&65520|1;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;l=c[w+104>>2]|0;a[l+(h*20|0)>>0]=34;b[l+(h*20|0)+2>>1]=0;c[l+(h*20|0)+4>>2]=x;c[l+(h*20|0)+8>>2]=0;c[l+(h*20|0)+12>>2]=0;c[l+(h*20|0)+16>>2]=0;a[l+(h*20|0)+1>>0]=0;l=h}else l=Di(w,34,x,0,0)|0;h=c[u>>2]|0;if(!(a[f+54>>0]|0))k=h;else{if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;j=c[w+104>>2]|0;a[j+(h*20|0)>>0]=11;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=0;c[j+(h*20|0)+8>>2]=1;c[j+(h*20|0)+12>>2]=0;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0;j=h}else j=Di(w,11,0,1,0)|0;k=c[u>>2]|0;i=e[r>>1]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;h=c[w+104>>2]|0;a[h+(k*20|0)>>0]=125;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=x;c[h+(k*20|0)+8>>2]=j;c[h+(k*20|0)+12>>2]=p;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0;h=k}else h=Di(w,125,x,j,p)|0;if(!(a[(c[w>>2]|0)+81>>0]|0)){g=c[w+104>>2]|0;a[g+(h*20|0)+1>>0]=-3;c[g+(h*20|0)+16>>2]=i}fl(d,2,f);h=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))i=(c[w+104>>2]|0)+(((j|0)<0?h+-1|0:j)*20|0)|0;else i=59308;c[i+8>>2]=h}if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=126;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=x;c[f+(h*20|0)+8>>2]=p;c[f+(h*20|0)+12>>2]=z;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,126,x,p,z)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=-126;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=z;c[f+(h*20|0)+8>>2]=0;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,130,z,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=-124;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=z;c[f+(h*20|0)+8>>2]=p;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,132,z,p,0)|0;h=c[u>>2]|0;if((h|0)>0)b[(c[w+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=16;do if(p){i=a[q>>0]|0;if((i&255)>=8)break;a[q>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=p;h=c[u>>2]|0}while(0);if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;d=c[w+104>>2]|0;a[d+(h*20|0)>>0]=3;b[d+(h*20|0)+2>>1]=0;c[d+(h*20|0)+4>>2]=x;c[d+(h*20|0)+8>>2]=k;c[d+(h*20|0)+12>>2]=0;c[d+(h*20|0)+16>>2]=0;a[d+(h*20|0)+1>>0]=0}else Di(w,3,x,k,0)|0;i=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))h=(c[w+104>>2]|0)+(((l|0)<0?i+-1|0:l)*20|0)|0;else h=59308;c[h+8>>2]=i;if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;d=c[w+104>>2]|0;a[d+(i*20|0)>>0]=117;b[d+(i*20|0)+2>>1]=0;c[d+(i*20|0)+4>>2]=y;c[d+(i*20|0)+8>>2]=0;c[d+(i*20|0)+12>>2]=0;c[d+(i*20|0)+16>>2]=0;a[d+(i*20|0)+1>>0]=0}else Di(w,117,y,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;y=c[w+104>>2]|0;a[y+(h*20|0)>>0]=117;b[y+(h*20|0)+2>>1]=0;c[y+(h*20|0)+4>>2]=z;c[y+(h*20|0)+8>>2]=0;c[y+(h*20|0)+12>>2]=0;c[y+(h*20|0)+16>>2]=0;a[y+(h*20|0)+1>>0]=0}else Di(w,117,z,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;z=c[w+104>>2]|0;a[z+(h*20|0)>>0]=117;b[z+(h*20|0)+2>>1]=0;c[z+(h*20|0)+4>>2]=x;c[z+(h*20|0)+8>>2]=0;c[z+(h*20|0)+12>>2]=0;c[z+(h*20|0)+16>>2]=0;a[z+(h*20|0)+1>>0]=0;Ra=A;return}else{Di(w,117,x,0,0)|0;Ra=A;return}}function cl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!b){a=0;return a|0}a:while(1){f=c[b>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(al(a,c[b+32>>2]|0)|0){b=1;d=28;break}if(dl(a,c[b+36>>2]|0)|0){b=1;d=28;break}f=c[b+40>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(dl(a,c[b+44>>2]|0)|0){b=1;d=28;break}f=c[b+48>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(dl(a,c[b+60>>2]|0)|0){b=1;d=28;break}f=b+64|0;d=c[f>>2]|0;if(d|0?(c[d>>2]|0)>0:0){e=0;do{if(cl(a,c[d+8+(e<<4)+8>>2]|0)|0){b=1;d=28;break a}e=e+1|0;d=c[f>>2]|0}while((e|0)<(c[d>>2]|0))}b=c[b+52>>2]|0;if(!b){b=0;d=28;break}}if((d|0)==28)return b|0;return 0}function dl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+16|0;h=i;if(!d){h=0;Ra=i;return h|0}a:while(1){if((a[d>>0]|0)==-108){e=c[b>>2]|0;if(!(a[(c[e>>2]|0)+165>>0]|0)){f=6;break}a[d>>0]=114}e=c[d+4>>2]|0;if(e&8404992|0){d=0;f=17;break}f=d+20|0;if(!(e&2048)){g=c[f>>2]|0;if(g|0?(c[g>>2]|0)>0:0){e=g+4|0;f=0;while(1){if(dl(b,c[e>>2]|0)|0){d=1;f=17;break a}f=f+1|0;if((f|0)>=(c[g>>2]|0))break;else e=e+20|0}}}else if(cl(b,c[f>>2]|0)|0){d=1;f=17;break}if(dl(b,c[d+16>>2]|0)|0){d=1;f=17;break}d=c[d+12>>2]|0;if(!d){d=0;f=17;break}}if((f|0)==6){c[h>>2]=c[b+16>>2];cd(e,42390,h);h=1;Ra=i;return h|0}else if((f|0)==17){Ra=i;return d|0}return 0}function el(e,f,g,h,i,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;I=e+8|0;K=c[I>>2]|0;if(j|0){n=c[f+36>>2]|0;if(n){o=e+56|0;m=(c[o>>2]|0)+-1|0;c[o>>2]=m;c[j>>2]=m;m=e+52|0;c[m>>2]=g+1;o=c[j>>2]|0;p=c[e>>2]|0;j=dk(p,n,0,0)|0;if(!(a[p+81>>0]|0))Tj(e,j,o,16);if(j)ni(p,j)}else m=j;c[m>>2]=0}if((i|0)!=0?(C=f+55|0,((d[C>>0]|d[C+1>>0]<<8)&8)!=0):0)m=f+50|0;else m=f+52|0;p=b[m>>1]|0;C=p&65535;B=p<<16>>16==1;do if(B){m=e+19|0;j=a[m>>0]|0;if(!(j<<24>>24)){y=e+44|0;z=(c[y>>2]|0)+1|0;c[y>>2]=z;break}else{z=j+-1<<24>>24;a[m>>0]=z;z=c[e+148+((z&255)<<2)>>2]|0;break}}else{m=e+32|0;j=c[m>>2]|0;n=e+28|0;o=c[n>>2]|0;if((o|0)<(C|0)){y=e+44|0;z=c[y>>2]|0;c[y>>2]=z+C;z=z+1|0;break}else{c[m>>2]=j+C;c[n>>2]=o-C;z=j;break}}while(0);do if(!k)m=0;else{if((z|0)==(l|0)?(c[k+36>>2]|0)==0:0){m=k;break}m=0}while(0);if(p<<16>>16){x=(m|0)==0;y=f+4|0;q=m+4|0;r=g+1|0;s=e+52|0;t=f+40|0;u=K+108|0;v=f+12|0;w=K+104|0;l=0;do{if(!x){k=b[(c[q>>2]|0)+(l<<1)>>1]|0;m=b[(c[y>>2]|0)+(l<<1)>>1]|0;if(k<<16>>16==-2?1:k<<16>>16!=m<<16>>16)A=28}else{m=b[(c[y>>2]|0)+(l<<1)>>1]|0;A=28}if((A|0)==28){A=0;k=l+z|0;if(m<<16>>16==-2){c[s>>2]=r;m=c[(c[t>>2]|0)+4+(l*20|0)>>2]|0;i=c[e>>2]|0;if(!m)p=0;else p=dk(i,m,0,0)|0;a:do if(!(a[i+81>>0]|0)){do if(p){if((a[p>>0]|0)!=-88){n=Jj(e,p,k)|0;break}m=c[I>>2]|0;j=c[p+28>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;A=c[m+104>>2]|0;a[A+(o*20|0)>>0]=78;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=j;c[A+(o*20|0)+8>>2]=k;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0;A=45;break a}else{Di(m,78,j,k,0)|0;A=45;break a}}else n=Jj(e,0,k)|0;while(0);if((n|0)!=(k|0)?(D=c[I>>2]|0,(D|0)!=0):0){m=D+108|0;j=c[m>>2]|0;if((c[D+112>>2]|0)>(j|0)){c[m>>2]=j+1;A=c[D+104>>2]|0;a[A+(j*20|0)>>0]=79;b[A+(j*20|0)+2>>1]=0;c[A+(j*20|0)+4>>2]=n;c[A+(j*20|0)+8>>2]=k;c[A+(j*20|0)+12>>2]=0;c[A+(j*20|0)+16>>2]=0;a[A+(j*20|0)+1>>0]=0;A=44;break}else{Di(D,79,n,k,0)|0;A=44;break}}else A=44}else A=44;while(0);if((A|0)==44?(A=0,p|0):0)A=45;if((A|0)==45){A=0;ni(i,p)}c[s>>2]=0}else Vj(c[I>>2]|0,c[v>>2]|0,g,m<<16>>16,k);m=c[u>>2]|0;if(((m|0)>0?(E=c[w>>2]|0,F=m+-1|0,G=E+(F*20|0)|0,(a[G>>0]|0)==84):0)?(H=c[K>>2]|0,(a[H+81>>0]|0)==0):0){i=E+(F*20|0)+1|0;k=E+(F*20|0)+16|0;kg(H,a[i>>0]|0,c[k>>2]|0);a[i>>0]=0;c[k>>2]=0;a[G>>0]=-86}}l=l+1|0}while((l|0)!=(C|0))}if(h|0){m=K+108|0;j=c[m>>2]|0;if((c[K+112>>2]|0)>(j|0)){c[m>>2]=j+1;I=c[K+104>>2]|0;a[I+(j*20|0)>>0]=92;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=z;c[I+(j*20|0)+8>>2]=C;c[I+(j*20|0)+12>>2]=h;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else Di(K,92,z,C,h)|0;if(c[(c[f+12>>2]|0)+12>>2]|0?(J=gl(c[e>>2]|0,f)|0,(a[(c[K>>2]|0)+81>>0]|0)==0):0)Ei(K,(c[K+104>>2]|0)+(((c[m>>2]|0)+-1|0)*20|0)|0,J,0)}if(!B){m=e+28|0;if((c[m>>2]|0)>=(C|0))return z|0;c[m>>2]=C;c[e+32>>2]=z;return z|0}if(!z)return z|0;m=e+19|0;j=a[m>>0]|0;if((j&255)>=8)return z|0;a[m>>0]=j+1<<24>>24;c[e+148+((j&255)<<2)>>2]=z;return z|0}function fl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;i=y;w=y+8|0;s=c[h+12>>2]|0;r=c[f>>2]|0;u=c[r+108>>2]|0;x=w+4|0;c[x>>2]=0;c[w>>2]=r;r=w+8|0;c[r>>2]=0;t=w+12|0;c[t>>2]=u;u=w+16|0;c[u>>2]=0;a[w+20>>0]=0;v=w+21|0;a[v>>0]=0;if(!(c[h+40>>2]|0)){n=h+50|0;if(b[n>>1]|0){o=s+4|0;p=h+4|0;m=0;do{q=c[(c[o>>2]|0)+(b[(c[p>>2]|0)+(m<<1)>>1]<<4)>>2]|0;do if(m|0){i=c[u>>2]|0;j=i+2|0;if(j>>>0<(c[r>>2]|0)>>>0){c[u>>2]=j;l=(c[x>>2]|0)+i|0;a[l>>0]=44;a[l+1>>0]=32;break}else{wb(w,42425,2);break}}while(0);j=c[s>>2]|0;if(!j)i=0;else i=(Eu(j)|0)&1073741823;k=c[u>>2]|0;l=k+i|0;if(l>>>0<(c[r>>2]|0)>>>0){if(i|0){c[u>>2]=l;ew((c[x>>2]|0)+k|0,j|0,i|0)|0}}else wb(w,j,i);i=c[u>>2]|0;j=i+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[u>>2]=j;a[(c[x>>2]|0)+i>>0]=46}else wb(w,31183,1);if(!q)i=0;else i=(Eu(q)|0)&1073741823;j=c[u>>2]|0;k=j+i|0;if(k>>>0<(c[r>>2]|0)>>>0){if(i|0){c[u>>2]=k;ew((c[x>>2]|0)+j|0,q|0,i|0)|0}}else wb(w,q,i);m=m+1|0}while(m>>>0<(e[n>>1]|0)>>>0)}}else{c[i>>2]=c[h>>2];Eb(w,42414,i)}i=c[x>>2]|0;if((i|0?(a[i+(c[u>>2]|0)>>0]=0,c[t>>2]|0):0)?(a[v>>0]&4)==0:0){x=$d(w)|0;w=h+55|0;w=d[w>>0]|d[w+1>>0]<<8;w=w&3;w=w<<16>>16==2;w=w?1555:2067;Uj(f,w,g,x,-7,2);Ra=y;return}x=c[x>>2]|0;w=h+55|0;w=d[w>>0]|d[w+1>>0]<<8;w=w&3;w=w<<16>>16==2;w=w?1555:2067;Uj(f,w,g,x,-7,2);Ra=y;return}function gl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=f+16|0;g=c[m>>2]|0;if(g|0){m=g;return m|0}k=c[f+12>>2]|0;l=f+52|0;h=e[l>>1]|0;g=h+1|0;do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](g)|0;c[m>>2]=g;if(!g)h=15;else h=21}else{i=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<=h>>>0)c[14985]=g;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){j=c[14978]|0;h=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=j>>>0)&1}g=Wa[c[29340>>2]&127](i)|0;if(!g){c[m>>2]=0;h=15;break}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h;c[m>>2]=g;h=21}while(0);if((h|0)==15){g=d+81|0;if(a[g>>0]|0){m=0;return m|0}if(a[d+82>>0]|0){m=0;return m|0}a[g>>0]=1;if((c[d+180>>2]|0)>0)c[d+264>>2]=1;g=d+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+236>>2]|0;if(!g){m=0;return m|0}c[g+12>>2]=7;m=0;return m|0}else if((h|0)==21){if(!(b[l>>1]|0))h=0;else{j=f+4|0;d=k+4|0;i=f+40|0;h=0;do{g=b[(c[j>>2]|0)+(h<<1)>>1]|0;if(g<<16>>16<=-1)if(g<<16>>16==-1)g=68;else{g=Xj(c[(c[i>>2]|0)+4+(h*20|0)>>2]|0)|0;g=g<<24>>24==0?65:g}else g=a[(c[d>>2]|0)+(g<<16>>16<<4)+13>>0]|0;a[(c[m>>2]|0)+h>>0]=g;h=h+1|0}while(h>>>0<(e[l>>1]|0)>>>0);g=c[m>>2]|0}a[g+h>>0]=0;m=c[m>>2]|0;return m|0}return 0}function hl(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=c[b>>2]|0;l=g+20|0;f=c[l>>2]|0;if((f|0)<=0)return;k=g+16|0;if(!e){g=0;do{if(c[(c[k>>2]|0)+(g<<4)+4>>2]|0){rk(b,g);f=c[l>>2]|0}g=g+1|0}while((g|0)<(f|0));return}j=0;do{g=c[k>>2]|0;if(c[g+(j<<4)+4>>2]|0){h=c[g+(j<<4)>>2]|0;i=a[e>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=e;do{i=i+1|0;h=h+1|0;m=a[i>>0]|0;g=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(g|0)!=0))}if(!g){rk(b,j);f=c[l>>2]|0}}j=j+1|0}while((j|0)<(f|0));return}function il(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+32|0;y=E+16|0;x=E+8|0;o=E;m=E+28|0;C=c[f>>2]|0;D=C+16|0;v=c[D>>2]|0;B=f+8|0;j=c[B>>2]|0;A=f+116|0;a:do if(!j){if((c[A>>2]|0)==0?(b[C+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[C+272>>2]|0)if(!(a[C+81>>0]|0))w=15;else{z=0;break a}else{do if((e[C+276>>1]|0)>=224){j=C+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];z=C+284|0;c[z>>2]=(c[z>>2]|0)+1;break b}j=C+296|0;k=c[j>>2]|0;if(!k){j=C+292|0;break}else{c[j>>2]=c[k>>2];z=C+284|0;c[z>>2]=(c[z>>2]|0)+1;break b}}else j=C+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;w=15}while(0);if((w|0)==15)k=_d(C,224,0)|0;if(!k)z=0;else{j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=C;j=C+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[B>>2]=k;Di(k,61,0,1,0)|0;z=k}}else z=j;while(0);q=c[A>>2]|0;q=(q|0)==0?f:q;j=q+84|0;k=c[j>>2]|0;p=1<<h;do if((((k&p|0)==0?(c[j>>2]=k|p,(h|0)==1):0)?(t=c[q>>2]|0,n=t+16|0,(c[(c[n>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){j=Pe(c[t>>2]|0,0,t,m,0,542)|0;if(j|0){cd(q,32157,o);c[q+12>>2]=j;break}o=c[m>>2]|0;c[(c[n>>2]|0)+20>>2]=o;j=c[t+92>>2]|0;l=c[o+4>>2]|0;c[l+4>>2]=c[o>>2];if(!(b[l+22>>1]&2)){m=l+32|0;n=l+36|0;o=(c[m>>2]|0)-(c[n>>2]|0)|0;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[m>>2]=j,s=l+80|0,r=c[s>>2]|0,r|0):0){k=r+-4|0;c[s>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;r=(c[14820]|0)+1|0;c[14820]=r;c[14821]=(r|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;w=35;break}else{j=Wa[c[29352>>2]&127](k)|0;w=35}while(0);do if((w|0)==35){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{r=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[s>>2]=0}s=Se(c[l>>2]|0,m,o)|0;c[n>>2]=(c[m>>2]|0)-(o&65535);if((s|0)==7){j=t+81|0;if((a[j>>0]|0)==0?(a[t+82>>0]|0)==0:0){a[j>>0]=1;if((c[t+180>>2]|0)>0)c[t+264>>2]=1;j=t+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[t+236>>2]|0;if(j|0)c[j+12>>2]=7}break}}}while(0);r=q+80|0;c[r>>2]=c[r>>2]|p;r=q+20|0;a[r>>0]=a[r>>0]|1;r=g+56|0;do if(c[r>>2]|0){j=z+108|0;k=c[j>>2]|0;if((c[z+112>>2]|0)>(k|0)){c[j>>2]=k+1;j=c[z+104>>2]|0;a[j+(k*20|0)>>0]=-96;j=j+(k*20|0)+1|0;l=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));break}else{Di(z,160,0,0,0)|0;break}}while(0);j=c[(c[(c[f>>2]|0)+16>>2]|0)+28>>2]|0;do if(!(a[f+146>>0]|0)){q=c[g+72>>2]|0;if((q|0)!=(j|0)?(u=c[j+48>>2]|0,(u|0)!=0):0){p=g+68|0;o=u;j=0;do{n=c[o+8>>2]|0;if((c[n+24>>2]|0)==(q|0)){l=c[n+4>>2]|0;m=c[g>>2]|0;u=a[l>>0]|0;k=(d[208+(u&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(u<<24>>24==0|(k|0)!=0))do{l=l+1|0;m=m+1|0;u=a[l>>0]|0;k=(d[208+(u&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(k|0)!=0));if(!k){if(!j)j=c[p>>2]|0;c[n+32>>2]=j;j=n}}o=c[o>>2]|0}while((o|0)!=0);if(!j)w=66}else w=66;if((w|0)==66){j=c[g+68>>2]|0;if(!j)break}do{jl(f,j);j=c[j+32>>2]|0}while((j|0)!=0)}while(0);j=v+(h<<4)|0;if(!(c[g+36>>2]&8))q=g;else{q=c[g>>2]|0;c[x>>2]=c[j>>2];c[x+4>>2]=q;Ak(f,42781,x);q=g}x=c[q>>2]|0;c[y>>2]=c[j>>2];c[y+4>>2]=34585;c[y+8>>2]=x;Ak(f,42826,y);c:do if(!i)if(!(c[r>>2]|0)){o=c[g+28>>2]|0;p=g+8|0;n=g+72|0;l=0;while(1){m=(l|0)==0;k=m|(o|0)<(l|0)?o:0;j=c[p>>2]|0;if(j)do{g=c[j+44>>2]|0;k=(g|0)>(k|0)&(m|(g|0)<(l|0))?g:k;j=c[j+20>>2]|0}while((j|0)!=0);if(!k){w=83;break c}l=c[n>>2]|0;if(!l)j=-1e6;else{m=c[(c[f>>2]|0)+16>>2]|0;j=0;while(1)if((c[m+(j<<4)+12>>2]|0)==(l|0))break;else j=j+1|0}kl(f,k,j);l=k}}else w=85;else w=83;while(0);if((w|0)==83)if(!(c[r>>2]|0)){m=z+108|0;k=z+112|0}else w=85;if((w|0)==85){l=c[q>>2]|0;m=z+108|0;j=c[m>>2]|0;k=z+112|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;g=c[z+104>>2]|0;a[g+(j*20|0)>>0]=-94;b[g+(j*20|0)+2>>1]=0;c[g+(j*20|0)+4>>2]=h;c[g+(j*20|0)+8>>2]=0;c[g+(j*20|0)+12>>2]=0;c[g+(j*20|0)+16>>2]=0;a[g+(j*20|0)+1>>0]=0}else j=Di(z,162,h,0,0)|0;if(!(a[(c[z>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;Ei(z,(c[z+104>>2]|0)+(j*20|0)|0,l,0)}A=c[A>>2]|0;a[((A|0)==0?f:A)+21>>0]=1}l=c[q>>2]|0;j=c[m>>2]|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;A=c[z+104>>2]|0;a[A+(j*20|0)>>0]=-113;b[A+(j*20|0)+2>>1]=0;c[A+(j*20|0)+4>>2]=h;c[A+(j*20|0)+8>>2]=0;c[A+(j*20|0)+12>>2]=0;c[A+(j*20|0)+16>>2]=0;a[A+(j*20|0)+1>>0]=0}else j=Di(z,143,h,0,0)|0;if(!(a[(c[z>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;Ei(z,(c[z+104>>2]|0)+(j*20|0)|0,l,0)}m=c[B>>2]|0;j=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(h<<4)+12>>2]>>2]|0)+1|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;f=c[m+104>>2]|0;a[f+(l*20|0)>>0]=95;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=h;c[f+(l*20|0)+8>>2]=1;c[f+(l*20|0)+12>>2]=j;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0}else Di(m,95,h,1,j)|0;l=c[(c[D>>2]|0)+(h<<4)+12>>2]|0;k=l+78|0;j=b[k>>1]|0;if(!(j&2)){Ra=E;return}l=c[l+16>>2]|0;if(l){q=C+480|0;r=C+304|0;s=C+308|0;t=C+300|0;do{j=c[l+8>>2]|0;if(c[j+12>>2]|0){p=j+4|0;k=c[p>>2]|0;d:do if(k){j=j+42|0;if((b[j>>1]|0)>0){o=0;while(1){m=c[k>>2]|0;e:do if(m|0){if(c[q>>2]|0){Xd(C,m);break}n=m;do if((c[r>>2]|0)>>>0<=n>>>0){if((c[s>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[t>>2];c[t>>2]=m;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{f=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);m=c[k+4>>2]|0;if(m|0)ni(C,m);m=c[k+8>>2]|0;f:do if(m|0){if(c[q>>2]|0){Xd(C,m);break}n=m;do if((c[r>>2]|0)>>>0<=n>>>0){if((c[s>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[t>>2];c[t>>2]=m;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{f=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);o=o+1|0;if((o|0)>=(b[j>>1]|0))break;else k=k+16|0}k=c[p>>2]|0}if(k){if(c[q>>2]|0){Xd(C,k);break}m=k;do if((c[r>>2]|0)>>>0<=m>>>0){if((c[s>>2]|0)>>>0<=m>>>0)break;c[k>>2]=c[t>>2];c[t>>2]=k;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}}else j=j+42|0;while(0);c[p>>2]=0;b[j>>1]=0}l=c[l>>2]|0}while((l|0)!=0);j=(c[(c[D>>2]|0)+(h<<4)+12>>2]|0)+78|0;k=j;j=b[j>>1]|0}b[k>>1]=j&-3;Ra=E;return}\nfunction ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](36)|0;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}d=a;e=d+36|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b>>2]=a;f=0;return f|0}function ms(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(d|0){Wa[c[(c[(c[a>>2]|0)+12>>2]|0)+16>>2]&127](d)|0;c[b>>2]=0}d=a+4|0;b=c[d>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[d>>2]=0;e=a+12|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function ns(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;k=c[d>>2]|0;n=d+8|0;f=c[n>>2]|0;if(f|0){Wa[c[(c[k+12>>2]|0)+16>>2]&127](f)|0;c[n>>2]=0}m=d+4|0;f=c[m>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[m>>2]=0;l=d+12|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;if((e|0)!=1){d=1;return d|0}g=c[h>>2]|0;f=b[g+8>>1]|0;if((f&514)==514?(a[g+10>>0]|0)==1:0){i=c[g+16>>2]|0;e=g}else if(!(f&1)){i=Gg(g,1)|0;e=c[h>>2]|0}else{i=0;e=g}f=b[e+8>>1]|0;if((f&2)!=0?(a[e+10>>0]|0)==1:0)e=c[e+12>>2]|0;else j=16;do if((j|0)==16){f=f&65535;if(!(f&16)){if(f&1|0){e=0;break}e=Fg(e,1)|0;break}else{g=c[e+12>>2]|0;if(!(f&16384)){e=g;break}e=(c[e>>2]|0)+g|0;break}}while(0);f=e+1|0;f=pb(f,((f|0)<0)<<31>>31)|0;c[m>>2]=f;if(!f){d=7;return d|0}ew(f|0,i|0,e|0)|0;a[(c[m>>2]|0)+e>>0]=0;g=k+16|0;f=Za[c[(c[k+12>>2]|0)+12>>2]&127](c[g>>2]|0,c[m>>2]|0,e,n)|0;if(f|0){d=f;return d|0}k=c[n>>2]|0;c[k>>2]=c[g>>2];g=c[d>>2]|0;c[l>>2]=(c[l>>2]|0)+1;g=$a[c[(c[g+12>>2]|0)+20>>2]&127](k,d+16|0,d+20|0,d+24|0,d+28|0,d+32|0)|0;if(!g){d=0;return d|0}f=c[n>>2]|0;if(f|0){Wa[c[(c[(c[d>>2]|0)+12>>2]|0)+16>>2]&127](f)|0;c[n>>2]=0}f=c[m>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{d=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[m>>2]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;d=(g|0)==101?0:g;return d|0}function os(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[a>>2]|0;f=a+12|0;c[f>>2]=(c[f>>2]|0)+1;d=a+8|0;e=$a[c[(c[e+12>>2]|0)+20>>2]&127](c[d>>2]|0,a+16|0,a+20|0,a+24|0,a+28|0,a+32|0)|0;if(!e)return 0;b=c[d>>2]|0;if(b|0){Wa[c[(c[(c[a>>2]|0)+12>>2]|0)+16>>2]&127](b)|0;c[d>>2]=0}a=a+4|0;b=c[a>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[a>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;return ((e|0)==101?0:e)|0}function ps(a){a=a|0;return (c[a+16>>2]|0)==0|0}function qs(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,c[a+4>>2]|0,-1,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 1:{if((yc(c[d>>2]|0,c[a+16>>2]|0,c[a+20>>2]|0,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 2:{f=c[a+24>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}case 3:{f=c[a+28>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}default:{f=c[a+32>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}}return 0}function rs(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;c[b>>2]=a;c[b+4>>2]=((a|0)<0)<<31>>31;return 0}function ss(h,i,j){h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;A=Ra;Ra=Ra+64|0;z=A+56|0;y=A+48|0;x=A;i=c[j>>2]|0;k=e[i+8>>1]|0;do if(!(k&4)){if(k&8|0){k=Mg(+g[i>>3])|0;L()|0;break}if(!(k&18)){Ra=A;return}else{k=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0;break}}else k=c[i>>2]|0;while(0);i=k&255;if((i+-1|0)>>>0>4){Ra=A;return}m=i<<1;l=(k<<3)+8|0;j=j+4|0;w=mc(c[j>>2]|0)|0;j=c[j>>2]|0;i=b[j+8>>1]|0;if((i&2)!=0?(a[j+10>>0]|0)==1:0)k=c[j+12>>2]|0;else n=11;do if((n|0)==11){i=i&65535;if(i&16|0){k=c[j+12>>2]|0;if(!(i&16384))break;k=(c[j>>2]|0)+k|0;break}if(!(i&1)){k=Fg(j,1)|0;break}else{Ra=A;return}}while(0);if((k|0)<4){Ra=A;return}u=w+2|0;t=w+3|0;s=l&248;if((k|0)<(G(d[u>>0]<<8|d[t>>0],s)|0)){Ra=A;return}v=zb(0)|0;if(!(d[u>>0]<<8|d[t>>0]))if(!v){i=0;j=7}else n=34;else{n=m&254;o=v+16|0;p=v+8|0;q=v+4|0;r=(n|0)==0;m=0;do{k=G(m,s)|0;j=w+(k|4)|0;E=cw(d[j>>0]|0,0,56)|0;l=L()|0;F=cw(d[j+1>>0]|0,0,48)|0;l=L()|0|l;D=cw(d[j+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[j+3>>0];C=cw(d[j+4>>0]|0,0,24)|0;l=l|(L()|0);B=cw(d[j+5>>0]|0,0,16)|0;l=l|(L()|0);i=cw(d[j+6>>0]|0,0,8)|0;l=l|(L()|0);j=Sv(F|E|D|C|B|i|0,l|0,d[j+7>>0]|0,0)|0;l=L()|0;i=x;c[i>>2]=j;c[i+4>>2]=l;i=0;k=w+(k+12)|0;while(1){c[x+8+(i<<2)>>2]=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];c[x+8+((i|1)<<2)>>2]=d[k+5>>0]<<16|d[k+4>>0]<<24|d[k+6>>0]<<8|d[k+7>>0];i=i+2|0;if(i>>>0>=n>>>0)break;else k=k+8|0}do if(m|0){i=c[o>>2]|0;k=i+1|0;if(k>>>0<(c[p>>2]|0)>>>0){c[o>>2]=k;a[(c[q>>2]|0)+i>>0]=32;break}else{wb(v,44513,1);break}}while(0);F=y;c[F>>2]=j;c[F+4>>2]=l;Eb(v,55646,y);if(!r){i=0;do{g[z>>3]=+f[x+8+(i<<2)>>2];Eb(v,55652,z);i=i+1|0}while((i|0)!=(n|0))}i=c[o>>2]|0;k=i+1|0;if(k>>>0<(c[p>>2]|0)>>>0){c[o>>2]=k;a[(c[q>>2]|0)+i>>0]=125}else wb(v,55656,1);m=m+1|0}while(m>>>0<(d[u>>0]<<8|d[t>>0])>>>0);n=34}do if((n|0)==34){j=d[v+20>>0]|0;if((v|0)!=29632){i=v+4|0;k=c[i>>2]|0;if(((k|0)!=0?(a[k+(c[v+16>>2]|0)>>0]=0,(c[v+12>>2]|0)!=0):0)?(a[v+21>>0]&4)==0:0)i=$d(v)|0;else i=c[i>>2]|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](v);break}else{F=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);break}}else i=0}while(0);k=h+20|0;if((yc(c[h>>2]|0,i,-1,1,90)|0)==18){c[k>>2]=18;yc(c[h>>2]|0,31223,-1,1,0)|0}c[k>>2]=(j|0)==0?-1:j;k=c[h>>2]|0;if(!(b[k+8>>1]&1)){Ra=A;return}switch((j&255)<<24>>24){case 101:{i=50782;break}case 100:{i=50760;break}default:if(j>>>0<29?(520028155>>>j&1|0)!=0:0)i=c[22960+(j<<2)>>2]|0;else i=50724}yc(k,i,-1,1,0)|0;Ra=A;return}function ts(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0;i=c[g>>2]|0;f=b[i+8>>1]|0;a:do if((f&15|16)<<16>>16==16){if((f&2)!=0?(a[i+10>>0]|0)==1:0)f=c[i+12>>2]|0;else h=5;do if((h|0)==5){h=f&65535;if(!(h&16)){if(h&1|0)break a;f=Fg(i,1)|0;break}else{f=c[i+12>>2]|0;if(!(h&16384))break;f=(c[i>>2]|0)+f|0;break}}while(0);if((f|0)>=2){i=mc(c[g>>2]|0)|0;i=d[i>>0]<<8|d[i+1>>0];f=c[e>>2]|0;h=f+8|0;if(!(b[h>>1]&9216)){e=f;c[e>>2]=i;c[e+4>>2]=0;b[h>>1]=4;return}else{Pg(f,i,0);return}}}while(0);c[e+20>>2]=1;yc(c[e>>2]|0,55658,-1,1,-1)|0;return}function us(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+80|0;o=t+16|0;m=t+8|0;k=t;s=t+20|0;if((f+-1|0)>>>0>1){c[d+20>>2]=1;yc(c[d>>2]|0,55691,-1,1,-1)|0;Ra=t;return}i=c[g>>2]|0;do if(i){h=b[i+8>>1]|0;if((h&514)==514?(a[i+10>>0]|0)==1:0){j=c[i+16>>2]|0;break}if(!(h&1))j=Gg(i,1)|0;else j=0}else j=0;while(0);do if((f|0)!=1){h=c[g+4>>2]|0;if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){g=c[h+16>>2]|0;break}if(!(i&1))g=Gg(h,1)|0;else g=0}else g=0}else{g=j;j=50919}while(0);r=c[(c[d>>2]|0)+32>>2]|0;q=s+12|0;h=q;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[s>>2]=r;c[s+4>>2]=j;c[s+8>>2]=g;if(a[r+79>>0]|0){n=nd(r,36223,0,0,0)|0;i=s+40|0;c[i>>2]=n;if(!n){f=1;p=19}else{n=1;h=0;l=i}}else{f=0;i=s+40|0;p=19}if((p|0)==19){c[k>>2]=j;c[k+4>>2]=g;h=vs(s,55742,k)|0;if(!h)h=0;else{p=(e[h+144>>1]|0)+-2|0;gc(h)|0;h=p}c[i>>2]=0;n=f;l=i}c[m>>2]=j;c[m+4>>2]=g;k=vs(s,53869,m)|0;if(k){f=k+144|0;p=(e[f>>1]|0)+~h|0;h=s+16|0;c[h>>2]=(p|0)/2|0;if((p|0)>=2){if((Gc(k)|0)==100){i=c[k+120>>2]|0;if((i|0)!=0?(e[f>>1]|0)>1:0){i=i+40|0;f=k}else{i=c[k>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;f=k}j=b[i+8>>1]&31;i=c[f>>2]|0;g=k+40|0;f=c[g>>2]|0;if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&f;c[g>>2]=i;c[q>>2]=1347440720>>>j&1}}else ws(s,55770,o);i=gc(k)|0;if((i|0)!=11)c[l>>2]=i}else h=s+16|0;if((c[h>>2]|0)>0){if(!(c[l>>2]|0))xs(s,0,0,1,0);q=c[s+32>>2]|0;ys(s,55801,q,((q|0)<0)<<31>>31);q=c[s+36>>2]|0;ys(s,55808,q,((q|0)<0)<<31>>31)}gc(c[s+20>>2]|0)|0;gc(c[s+24>>2]|0)|0;gc(c[s+28>>2]|0)|0;do if(n){h=nd(r,55816,0,0,0)|0;i=c[l>>2]|0;if(!i){c[l>>2]=h;p=46;break}else{h=i;i=c[s+44>>2]|0;p=49;break}}else{h=c[l>>2]|0;p=46}while(0);if((p|0)==46){i=c[s+44>>2]|0;if(!h){if((yc(c[d>>2]|0,(i|0)==0?45704:i,-1,1,-1)|0)==18){c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0}}else p=49}if((p|0)==49){c[d+20>>2]=h;f=c[d>>2]|0;if(b[f+8>>1]&1){switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(f,h,-1,1,0)|0}}h=i;if(!i){Ra=t;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);Ra=t;return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);Ra=t;return}}function vs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+32|0;e=h;f=h+16|0;c[f>>2]=0;c[e>>2]=d;b=Ab(b,e)|0;d=a+40|0;e=(b|0)==0;do if(!(c[d>>2]|0))if(e){c[d>>2]=7;break}else{g=qd(c[a>>2]|0,b,-1,128,0,f,0)|0;c[d>>2]=g;g=6;break}else if(!e)g=6;while(0);do if((g|0)==6)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{g=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);Ra=h;return c[f>>2]|0}function ws(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;h=i+16|0;e=i;c[e>>2]=d;f=a+40|0;if(c[f>>2]|0){Ra=i;return}g=a+48|0;if((c[g>>2]|0)>=100){Ra=i;return}d=Ab(b,e)|0;if(!((d|0)!=0?(a=a+44|0,e=c[a>>2]|0,c[h>>2]=e,c[h+4>>2]=(e|0)==0?59952:35594,c[h+8>>2]=d,h=Bb(55820,h)|0,c[a>>2]=h,(h|0)!=0):0))c[f>>2]=7;c[g>>2]=(c[g>>2]|0)+1;Ra=i;return}function xs(e,g,i,j,k){e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0.0;J=Ra;Ra=Ra+112|0;H=J+88|0;F=J+72|0;E=J+56|0;v=J+40|0;u=J+32|0;t=J+16|0;s=J+8|0;m=J;r=e+40|0;if(c[r>>2]|0){Ra=J;return}q=e+20|0;l=c[q>>2]|0;if(!l){l=c[e+8>>2]|0;c[m>>2]=c[e+4>>2];c[m+4>>2]=l;l=vs(e,55946,m)|0;c[q>>2]=l;if(c[r>>2]|0){Ra=J;return}}do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){D=l;c[D>>2]=j;c[D+4>>2]=k;b[m>>1]=4;break}else{Pg(l,j,k);break}}while(0);do if((Gc(c[q>>2]|0)|0)==100){p=Lc(c[q>>2]|0,0)|0;o=c[q>>2]|0;if(!o)m=mc(29576)|0;else{l=c[o+120>>2]|0;if((l|0)!=0?(b[o+144>>1]|0)!=0:0)n=o;else{l=c[o>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;n=o}m=mc(l)|0;n=c[n>>2]|0;o=o+40|0;l=c[o>>2]|0;if((l|0)==3082|(a[n+81>>0]|0)!=0){og(n);l=7}else l=c[n+68>>2]&l;c[o>>2]=l}l=pb(p,((p|0)<0)<<31>>31)|0;if(!l){c[r>>2]=7;D=0;o=0;break}else{ew(l|0,m|0,p|0)|0;D=l;o=p;break}}else{D=0;o=0}while(0);l=c[q>>2]|0;do if(l){m=c[l>>2]|0;C=l+136|0;B=c[C+4>>2]|0;if((B|0)>0|(B|0)==0&(c[C>>2]|0)>>>0>0)hc(m,l);n=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;C=l+64|0;c[C>>2]=0;c[C+4>>2]=0;if((n|0)==3082|(a[m+81>>0]|0)!=0){og(m);l=7;break}else{l=c[m+68>>2]&n;break}}else l=0;while(0);if((c[r>>2]|0)==0?(c[r>>2]=l,(D|0)==0&(l|0)==0):0){I=s;c[I>>2]=j;c[I+4>>2]=k;ws(e,55991,s);Ra=J;return}if(!D){Ra=J;return}if((o|0)<4){I=t;c[I>>2]=j;c[I+4>>2]=k;c[t+8>>2]=o;ws(e,55827,t);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}C=(i|0)==0;if(C){g=d[D>>0]<<8|d[D+1>>0];if(g>>>0>40){c[u>>2]=g;ws(e,55861,u);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}}A=d[D+2>>0]<<8|d[D+3>>0];B=e+16|0;l=c[B>>2]|0;a:do if((G((l<<3)+8|0,A)|0|4|0)<=(o|0)){if(A|0){y=e+12|0;z=(g|0)>0;v=g+-1|0;w=e+36|0;x=e+32|0;g=0;while(1){u=D+(G((l<<3)+8|0,g)|0|4)|0;o=cw(d[u>>0]|0,0,56)|0;s=L()|0;n=cw(d[u+1>>0]|0,0,48)|0;s=L()|0|s;p=cw(d[u+2>>0]|0,0,40)|0;s=s|(L()|0);s=s|d[u+3>>0];q=cw(d[u+4>>0]|0,0,24)|0;s=s|(L()|0);r=cw(d[u+5>>0]|0,0,16)|0;s=s|(L()|0);t=cw(d[u+6>>0]|0,0,8)|0;s=s|(L()|0);s=Sv(n|o|p|q|r|t|0,s|0,d[u+7>>0]|0,0)|0;t=L()|0;u=u+8|0;b:do if((l|0)>0){if(C){o=0;while(1){n=o<<3;m=u+n|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];n=u+(n|4)|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];if(!(c[y>>2]|0)){K=(c[h>>2]=m,+f[h>>2]);if(K>(c[h>>2]=n,+f[h>>2]))I=52}else if((m|0)>(n|0))I=52;if((I|0)==52){I=0;c[E>>2]=o;c[E+4>>2]=g;l=E+8|0;c[l>>2]=j;c[l+4>>2]=k;ws(e,56023,E);l=c[B>>2]|0}o=o+1|0;if((o|0)>=(l|0))break b}}p=0;do{m=p<<3;q=u+m|0;q=d[q+1>>0]<<16|d[q>>0]<<24|d[q+2>>0]<<8|d[q+3>>0];o=m|4;r=u+o|0;r=d[r+1>>0]<<16|d[r>>0]<<24|d[r+2>>0]<<8|d[r+3>>0];l=c[y>>2]|0;if(!l){K=(c[h>>2]=q,+f[h>>2]);if(K>(c[h>>2]=r,+f[h>>2]))I=57;else l=0}else if((q|0)>(r|0))I=57;if((I|0)==57){I=0;c[F>>2]=p;c[F+4>>2]=g;l=F+8|0;c[l>>2]=j;c[l+4>>2]=k;ws(e,56023,F);l=c[y>>2]|0}n=i+m|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];m=i+o|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];do if(!l){K=(c[h>>2]=q,+f[h>>2]);if(K<(c[h>>2]=n,+f[h>>2])){I=62;break}K=(c[h>>2]=r,+f[h>>2]);if(K>(c[h>>2]=m,+f[h>>2]))I=62}else if((q|0)<(n|0)|(r|0)>(m|0))I=62;while(0);if((I|0)==62){I=0;c[H>>2]=p;c[H+4>>2]=g;r=H+8|0;c[r>>2]=j;c[r+4>>2]=k;ws(e,56071,H)}p=p+1|0}while((p|0)<(c[B>>2]|0))}while(0);if(z){zs(e,0,s,t,j,k);xs(e,v,u,s,t);l=w}else{zs(e,1,s,t,j,k);l=x}c[l>>2]=(c[l>>2]|0)+1;g=g+1|0;if((g|0)==(A|0))break a;l=c[B>>2]|0}}}else{I=v;c[I>>2]=j;c[I+4>>2]=k;c[v+8>>2]=A;c[v+12>>2]=o;ws(e,55891,v)}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}function ys(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+48|0;j=k+16|0;f=k;i=a+40|0;if(c[i>>2]|0){Ra=k;return}l=c[a+8>>2]|0;c[f>>2]=c[a+4>>2];c[f+4>>2]=l;c[f+8>>2]=b;f=vs(a,56360,f)|0;if(!f){Ra=k;return}if((Gc(f)|0)==100?(g=Oc(f,0)|0,h=L()|0,!((g|0)==(d|0)&(h|0)==(e|0))):0){c[j>>2]=b;l=j+8|0;c[l>>2]=d;c[l+4>>2]=e;l=j+16|0;c[l>>2]=g;c[l+4>>2]=h;ws(a,56391,j)}l=gc(f)|0;c[i>>2]=l;Ra=k;return}function zs(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+80|0;o=p+32|0;m=p+8|0;l=p;j=d+24+(e<<2)|0;k=c[j>>2]|0;if(!k){n=c[30860+(e<<2)>>2]|0;k=c[d+8>>2]|0;c[l>>2]=c[d+4>>2];c[l+4>>2]=k;l=vs(d,n,l)|0;c[j>>2]=l}else l=k;n=d+40|0;if(c[n>>2]|0){Ra=p;return}do if(!(Vc(l,1)|0)){j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){c[j>>2]=f;c[j+4>>2]=g;b[k>>1]=4;break}else{Pg(j,f,g);break}}while(0);switch(Gc(l)|0){case 101:{o=m;c[o>>2]=f;c[o+4>>2]=g;o=m+8|0;c[o>>2]=h;c[o+4>>2]=i;c[m+16>>2]=(e|0)==0?56293:56285;ws(d,56240,m);break}case 100:{j=Oc(l,0)|0;k=L()|0;if(!((j|0)==(h|0)&(k|0)==(i|0))){m=o;c[m>>2]=f;c[m+4>>2]=g;m=o+8|0;c[m>>2]=j;c[m+4>>2]=k;c[o+16>>2]=(e|0)==0?56293:56285;e=o+24|0;c[e>>2]=f;c[e+4>>2]=g;g=o+32|0;c[g>>2]=h;c[g+4>>2]=i;ws(d,56302,o)}break}default:{}}do if(l){j=c[l>>2]|0;o=l+136|0;i=c[o+4>>2]|0;if((i|0)>0|(i|0)==0&(c[o>>2]|0)>>>0>0)hc(j,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;o=l+64|0;c[o>>2]=0;c[o+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}else j=0;while(0);if(c[n>>2]|0){Ra=p;return}c[n>>2]=j;Ra=p;return}function As(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Ss(a,b,c,d,e,f,1)|0}function Bs(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Ss(a,b,c,d,e,f,0)|0}function Cs(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+64|0;p=r+48|0;o=r;f=o;h=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));a[o+40>>0]=0;n=c[e>>2]|0;h=(n|0)>0;if(h){i=c[e+4>>2]|0;f=0;j=0;do{j=(a[i+(f*12|0)+4>>0]|0)==64?1:j;f=f+1|0}while((f|0)<(n|0));if(h){k=c[e+4>>2]|0;l=b+21|0;m=e+16|0;a:do if(!j){h=0;f=0;b:while(1){j=k+(f*12|0)|0;c:do if(a[k+(f*12|0)+5>>0]|0){if((c[j>>2]|0)==0?(a[k+(f*12|0)+4>>0]|0)==2:0)break b;i=c[j>>2]|0;d:do if((i|0)>0?(i|0)<=(d[l>>0]|0):0)switch(a[k+(f*12|0)+4>>0]|0){case 2:{i=65;break d}case 64:{q=15;break d}case 4:{i=69;break d}case 8:{i=66;break d}case 16:{i=67;break d}case 32:{i=68;break d}default:break c}else q=13;while(0);if((q|0)==13){q=0;if((a[k+(f*12|0)+4>>0]|0)==64)q=15;else break}if((q|0)==15){q=0;i=70}a[o+h>>0]=i;i=h+2|0;a[o+(h+1)>>0]=(c[j>>2]|0)+47;h=c[m>>2]|0;c[h+(f<<3)>>2]=(i|0)/2|0;a[h+(f<<3)+4>>0]=1;h=i}while(0);f=f+1|0;if(!((f|0)<(n|0)&(h|0)<40)){f=h;break a}}i=c[m>>2]|0;if(!f)f=0;else{h=0;do{c[i+(h<<3)>>2]=0;a[i+(h<<3)+4>>0]=0;h=h+1|0}while((h|0)!=(f|0))}c[e+20>>2]=1;c[i+(f<<3)>>2]=1;a[i+(f<<3)+4>>0]=1;g[e+40>>3]=30.0;q=e+48|0;c[q>>2]=1;c[q+4>>2]=0;c[e+56>>2]=1;e=0;Ra=r;return e|0}else{f=0;j=0;do{e:do if(a[k+(j*12|0)+5>>0]|0){i=k+(j*12|0)|0;h=c[i>>2]|0;f:do if((h|0)>0?(h|0)<=(d[l>>0]|0):0)switch(a[k+(j*12|0)+4>>0]|0){case 2:{h=65;break f}case 64:{q=34;break f}case 4:{h=69;break f}case 8:{h=66;break f}case 16:{h=67;break f}case 32:{h=68;break f}default:break e}else q=28;while(0);if((q|0)==28){q=0;if((a[k+(j*12|0)+4>>0]|0)==64)q=34;else break}if((q|0)==34){q=0;h=70}a[o+f>>0]=h;h=f+2|0;a[o+(f+1)>>0]=(c[i>>2]|0)+47;f=c[m>>2]|0;c[f+(j<<3)>>2]=(h|0)/2|0;a[f+(j<<3)+4>>0]=1;f=h}while(0);j=j+1|0}while((j|0)<(n|0)&(f|0)<40)}while(0);c[e+20>>2]=2;c[e+28>>2]=1;if((f|0)>0?(c[p>>2]=o,p=Bb(31408,p)|0,c[e+24>>2]=p,(p|0)==0):0){e=7;Ra=r;return e|0}}else q=38}else q=38;if((q|0)==38){c[e+20>>2]=2;c[e+28>>2]=1;f=0}b=b+48|0;b=aw(c[b>>2]|0,c[b+4>>2]|0,(f|0)/2|0|0)|0;q=L()|0;g[e+40>>3]=(+(b>>>0)+4294967296.0*+(q|0))*6.0;e=e+48|0;c[e>>2]=b;c[e+4>>2]=q;e=0;Ra=r;return e|0}function Ds(a){a=a|0;Ts(a);return 0}function Es(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+32|0;f=g;d=c[b+32>>2]|0;e=c[b+36>>2]|0;c[f>>2]=d;c[f+4>>2]=e;c[f+8>>2]=d;c[f+12>>2]=e;c[f+16>>2]=d;c[f+20>>2]=e;f=Bb(57667,f)|0;if(!f){f=7;Ra=g;return f|0}d=b+76|0;e=c[d>>2]|0;do if((e|0?(a[b+24>>0]|0)==0:0)?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=nd(c[b+12>>2]|0,f,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(d|0){h=d;Ra=g;return h|0}Ts(b);h=0;Ra=g;return h|0}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){a=7;f=0;c[b>>2]=f;return a|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](248)|0;if(!d){a=7;f=0;c[b>>2]=f;return a|0}}else{f=Wa[c[29356>>2]&127](248)|0;if((c[14985]|0)>>>0<248)c[14985]=248;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=7;a=0;c[b>>2]=a;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}gw(d|0,0,248)|0;c[d>>2]=a;g=a+56|0;c[g>>2]=(c[g>>2]|0)+1;g=0;a=d;c[b>>2]=a;return g|0}function Gs(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=c[b>>2]|0;h=b+16|0;d=c[h>>2]|0;if(d|0){g=b+12|0;if((c[g>>2]|0)>0){f=0;while(1){d=c[d+(f*24|0)+16>>2]|0;do if(d|0){e=c[d+16>>2]|0;if(e|0)ab[e&127](c[d+12>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);d=f+1|0;if((d|0)>=(c[g>>2]|0))break;f=d;d=c[h>>2]|0}d=c[h>>2]|0}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{g=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[h>>2]=0}gc(c[b+36>>2]|0)|0;d=c[b+32>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);Us(i,c[b+64>>2]|0)|0;Us(i,c[b+68>>2]|0)|0;Us(i,c[b+72>>2]|0)|0;Us(i,c[b+76>>2]|0)|0;Us(i,c[b+80>>2]|0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{h=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}e=i+56|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;e=i+76|0;f=c[e>>2]|0;if(!f)return 0;if(!((d|0)==0&(a[i+24>>0]|0)==0))return 0;c[e>>2]=0;d=c[f+20>>2]|0;gc(c[f+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,f);return 0}i=f;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[f>>2]=c[i>>2];c[i>>2]=f;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);return 0}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);return 0}return 0}function Hs(f,h,i,j,k){f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=Ra;Ra=Ra+16|0;w=y+4|0;t=y;x=c[f>>2]|0;c[w>>2]=0;v=x+40|0;c[v>>2]=(c[v>>2]|0)+1;v=f+16|0;l=c[v>>2]|0;if(l|0){o=f+12|0;if((c[o>>2]|0)>0){n=0;while(1){l=c[l+(n*24|0)+16>>2]|0;do if(l|0){m=c[l+16>>2]|0;if(m|0)ab[m&127](c[l+12>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=n+1|0;if((l|0)>=(c[o>>2]|0))break;n=l;l=c[v>>2]|0}l=c[v>>2]|0}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[v>>2]=0}l=c[f+32>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);u=f+36|0;s=c[u>>2]|0;gw(f|0,0,248)|0;c[f>>2]=x;c[u>>2]=s;c[f+8>>2]=h;a:do if((h|0)!=1){l=Xs(x,1,0,0,w)|0;if(!((j|0)>0&(l|0)==0)){if(l|0)break}else{l=j*24|0;m=pb(l,0)|0;c[v>>2]=m;c[f+12>>2]=j;if(!m){l=7;break}gw(m|0,0,l|0)|0;r=f+84|0;s=x+28|0;gw(r|0,0,(c[s>>2]<<2)+4|0)|0;t=x+21|0;q=0;do{u=c[v>>2]|0;m=q<<1;o=a[i+m>>0]|0;h=u+(q*24|0)+4|0;c[h>>2]=o<<24>>24;c[u+(q*24|0)>>2]=(a[i+(m|1)>>0]|0)+-48;m=c[k+(q<<2)>>2]|0;l=b[m+8>>1]|0;if(o<<24>>24>69){if((l&-15393)<<16>>16!=-32255){l=1;break a}if((a[m+11>>0]|0)!=112){l=1;break a}if(Bu(c[m>>2]|0,57762)|0){l=1;break a}l=c[m+16>>2]|0;if(!l){l=1;break a}o=pb((c[l>>2]|0)+80|0,0)|0;if(!o){l=7;break a}m=o;n=m+80|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));ew(o+80|0,l|0,c[l>>2]|0)|0;c[o>>2]=c[o+96>>2];c[o+4>>2]=c[o+100>>2];c[o+8>>2]=o+112;c[o+72>>2]=c[o+104>>2];l=c[o+84>>2]|0;if(!l){c[h>>2]=71;c[u+(q*24|0)+8>>2]=c[o+88>>2]}else c[u+(q*24|0)+8>>2]=l;c[u+(q*24|0)+16>>2]=o;c[o+28>>2]=d[t>>0];c[o+24>>2]=r;c[o+36>>2]=(c[s>>2]|0)+1}else{l=l&65535;do if(!(l&8)){if(l&4|0){h=m;p=+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0);break}if(!(l&18))p=0.0;else p=+Kg(a[m+10>>0]|0,c[m+12>>2]|0,c[m+16>>2]|0)}else p=+g[m>>3];while(0);g[u+(q*24|0)+8>>3]=p}q=q+1|0}while((q|0)<(j|0))}l=Ws(f,0.0,(c[x+28>>2]|0)+1&255)|0;if(!l){x=7;Ra=y;return x|0}else{k=l+8|0;c[k>>2]=1;c[k+4>>2]=0;a[l+18>>0]=0;a[l+17>>0]=1;c[f+64>>2]=c[w>>2];c[w>>2]=0;l=Ys(f)|0;break}}else{l=c[k>>2]|0;m=e[l+8>>1]|0;do if(!(m&4)){if(m&8|0){s=Mg(+g[l>>3])|0;r=L()|0;break}if(!(m&18)){r=0;s=0}else{s=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;r=L()|0}}else{s=l;r=c[s+4>>2]|0;s=c[s>>2]|0}while(0);c[t>>2]=0;q=x+88|0;l=c[q>>2]|0;do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){k=l;c[k>>2]=s;c[k+4>>2]=r;b[m>>1]=4;break}else{Pg(l,s,r);break}}while(0);k=(Gc(c[q>>2]|0)|0)==100;n=c[q>>2]|0;do if(k){o=Oc(n,0)|0;h=L()|0;l=Xs(x,o,h,0,t)|0;m=c[q>>2]|0;if(m){n=c[m>>2]|0;k=m+136|0;j=c[k+4>>2]|0;if((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)hc(n,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;j=m+64|0;c[j>>2]=0;c[j+4>>2]=0;if((k|0)==3082|(a[n+81>>0]|0)!=0){og(n);n=h;q=45}else{n=h;q=45}}else{n=h;q=45}}else if(n){l=c[n>>2]|0;k=n+136|0;j=c[k+4>>2]|0;if((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)hc(l,n);m=kc(n)|0;c[n+20>>2]=770837923;c[n+36>>2]=-1;c[n+40>>2]=0;a[n+146>>0]=2;c[n+44>>2]=0;c[n+32>>2]=1;a[n+147>>0]=-1;c[n+48>>2]=0;k=n+64|0;c[k>>2]=0;c[k+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);l=7;q=51;break}else{l=c[l+68>>2]&m;o=0;n=0;q=45;break}}else{l=0;o=0;n=0;q=45}while(0);if((q|0)==45){m=c[t>>2]|0;if((l|0)==0&(m|0)!=0){h=Ws(f,0.0,0)|0;c[f+64>>2]=m;l=h+8|0;c[l>>2]=o;c[l+4>>2]=n;a[h+17>>0]=1;l=c[m+24>>2]|0;n=d[l+2>>0]<<8|d[l+3>>0];b:do if(!n){l=267;m=0}else{o=d[x+23>>0]|0;m=0;while(1){f=l+((G(m,o)|0)+4)|0;t=cw(d[f>>0]|0,0,56)|0;k=L()|0;z=cw(d[f+1>>0]|0,0,48)|0;k=L()|0|k;u=cw(d[f+2>>0]|0,0,40)|0;k=k|(L()|0);k=k|d[f+3>>0];v=cw(d[f+4>>0]|0,0,24)|0;k=k|(L()|0);i=cw(d[f+5>>0]|0,0,16)|0;k=k|(L()|0);j=cw(d[f+6>>0]|0,0,8)|0;k=k|(L()|0);f=Sv(z|t|u|v|i|j|0,k|0,d[f+7>>0]|0,0)|0;if((f|0)==(s|0)&(L()|0)==(r|0)){l=0;break b}m=m+1|0;if(m>>>0>=n>>>0){l=267;m=0;break}}}while(0);a[h+18>>0]=m}else q=51}if((q|0)==51)a[f+4>>0]=1}while(0);Us(x,c[w>>2]|0)|0;Ts(x);z=l;Ra=y;return z|0}function Is(b){b=b|0;var d=0,e=0,f=0,g=0;d=b+6|0;if(!(a[d>>0]|0)){Zs(b);b=Ys(b)|0;return b|0}a[d>>0]=0;d=c[b+36>>2]|0;if(!d){Zs(b);b=Ys(b)|0;return b|0}e=c[d>>2]|0;f=d+136|0;g=c[f+4>>2]|0;if((g|0)>0|(g|0)==0&(c[f>>2]|0)>>>0>0)hc(e,d);g=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;f=d+64|0;c[f>>2]=0;c[f+4>>2]=0;if(!((g|0)==3082|(a[e+81>>0]|0)!=0)){Zs(b);g=Ys(b)|0;return g|0}og(e);Zs(b);g=Ys(b)|0;return g|0}function Js(a){a=a|0;return d[a+4>>0]|0|0}function Ks(i,j,k){i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=Ra;Ra=Ra+16|0;p=u+8|0;q=u;t=c[i>>2]|0;l=a[i+5>>0]|0;if(!(l<<24>>24))if(!(c[i+24>>2]|0))s=0;else s=c[i+32>>2]|0;else s=i+40|0;l=1-(l&255)|0;n=i+64+(l<<2)|0;m=c[n>>2]|0;if(!m){if(!l)l=i+48|0;else l=(c[i+32>>2]|0)+8|0;l=Xs(t,c[l>>2]|0,c[l+4>>2]|0,0,n)|0;if(!l)m=c[n>>2]|0;else{j=l;Ra=u;return j|0}}if(!s){j=0;Ra=u;return j|0}if(!k){n=(c[m+24>>2]|0)+((G(d[t+23>>0]|0,d[s+18>>0]|0)|0)+4)|0;s=cw(d[n>>0]|0,0,56)|0;i=L()|0;r=cw(d[n+1>>0]|0,0,48)|0;i=L()|0|i;t=cw(d[n+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[n+3>>0];k=cw(d[n+4>>0]|0,0,24)|0;i=i|(L()|0);m=cw(d[n+5>>0]|0,0,16)|0;i=i|(L()|0);l=cw(d[n+6>>0]|0,0,8)|0;i=i|(L()|0);n=Sv(r|s|t|k|m|l|0,i|0,d[n+7>>0]|0,0)|0;i=L()|0;l=c[j>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){j=l;c[j>>2]=n;c[j+4>>2]=i;b[m>>1]=4;j=0;Ra=u;return j|0}else{Pg(l,n,i);j=0;Ra=u;return j|0}}r=t+21|0;l=d[r>>0]|0;if((l|0)>=(k|0)){i=(c[m+24>>2]|0)+((k<<2)+8+(G(d[t+23>>0]|0,d[s+18>>0]|0)|0))|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];if(a[t+22>>0]|0){l=c[j>>2]|0;m=((i|0)<0)<<31>>31;n=l+8|0;if(!(b[n>>1]&9216)){j=l;c[j>>2]=i;c[j+4>>2]=m;b[n>>1]=4;j=0;Ra=u;return j|0}else{Pg(l,i,m);j=0;Ra=u;return j|0}}o=(c[h>>2]=i,+f[h>>2]);l=c[j>>2]|0;m=l+8|0;if(!(b[m>>1]&9216))b[m>>1]=1;else Dg(l);g[p>>3]=o;g[q>>3]=+g[p>>3];if(!(+g[p>>3]==+g[q>>3])){j=0;Ra=u;return j|0}g[l>>3]=o;b[m>>1]=8;j=0;Ra=u;return j|0}p=i+6|0;q=i+36|0;do if(!(a[p>>0]|0)){l=c[q>>2]|0;do if(!l){l=qd(c[t+12>>2]|0,c[t+64>>2]|0,-1,128,0,q,0)|0;if(!l){l=c[q>>2]|0;break}else{j=l;Ra=u;return j|0}}while(0);n=(c[m+24>>2]|0)+((G(d[t+23>>0]|0,d[s+18>>0]|0)|0)+4)|0;w=cw(d[n>>0]|0,0,56)|0;i=L()|0;x=cw(d[n+1>>0]|0,0,48)|0;i=L()|0|i;v=cw(d[n+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[n+3>>0];m=cw(d[n+4>>0]|0,0,24)|0;i=i|(L()|0);s=cw(d[n+5>>0]|0,0,16)|0;i=i|(L()|0);t=cw(d[n+6>>0]|0,0,8)|0;i=i|(L()|0);n=Sv(x|w|v|m|s|t|0,i|0,d[n+7>>0]|0,0)|0;i=L()|0;do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){x=l;c[x>>2]=n;c[x+4>>2]=i;b[m>>1]=4;break}else{Pg(l,n,i);break}}while(0);n=Gc(c[q>>2]|0)|0;if((n|0)==100){a[p>>0]=1;l=d[r>>0]|0;break}l=c[q>>2]|0;if(!l){x=(n|0)==101;x=x?0:n;Ra=u;return x|0}m=c[l>>2]|0;x=l+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(m,l);x=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;w=l+64|0;c[w>>2]=0;c[w+4>>2]=0;if(!((x|0)==3082|(a[m+81>>0]|0)!=0)){x=(n|0)==101;x=x?0:n;Ra=u;return x|0}og(m);x=(n|0)==101;x=x?0:n;Ra=u;return x|0}while(0);p=c[q>>2]|0;l=k-l+1|0;n=(p|0)==0;do if(n)i=29576;else{m=c[p+120>>2]|0;if(m|0?l>>>0<(e[p+144>>1]|0)>>>0:0){i=m+(l*40|0)|0;break}i=c[p>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576}while(0);l=i+8|0;m=e[l>>1]|0;if(m&2048|0)b[l>>1]=m&59391|4096;if(!n){m=c[p>>2]|0;n=p+40|0;l=c[n>>2]|0;if((l|0)==3082|(a[m+81>>0]|0)!=0){og(m);l=7}else l=c[m+68>>2]&l;c[n>>2]=l}Dc(j,i);x=0;Ra=u;return x|0}function Ls(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=a[b+5>>0]|0;if(!(f<<24>>24))if(!(c[b+24>>2]|0))i=0;else i=c[b+32>>2]|0;else i=b+40|0;g=1-(f&255)|0;h=b+64+(g<<2)|0;f=c[h>>2]|0;if(!f){if(!g)f=b+48|0;else f=(c[b+32>>2]|0)+8|0;g=f;g=Xs(c[b>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,h)|0;f=c[h>>2]|0}else g=0;if(!((i|0)!=0&(g|0)==0))return g|0;h=(c[f+24>>2]|0)+((G(d[(c[b>>2]|0)+23>>0]|0,d[i+18>>0]|0)|0)+4)|0;l=cw(d[h>>0]|0|0,0,56)|0;b=L()|0;m=cw(d[h+1>>0]|0|0,0,48)|0;b=L()|0|b;k=cw(d[h+2>>0]|0|0,0,40)|0;b=b|(L()|0);b=b|(d[h+3>>0]|0);j=cw(d[h+4>>0]|0|0,0,24)|0;b=b|(L()|0);f=cw(d[h+5>>0]|0|0,0,16)|0;b=b|(L()|0);i=cw(d[h+6>>0]|0|0,0,8)|0;b=b|(L()|0);h=Sv(m|l|k|j|f|i|0,b|0,d[h+7>>0]|0|0,0)|0;b=L()|0;i=e;c[i>>2]=h;c[i+4>>2]=b;return g|0}function Ms(h,i,j,k){h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=Ra;Ra=Ra+64|0;u=x;v=x+48|0;if(c[h+60>>2]|0){h=518;Ra=x;return h|0}t=h+40|0;c[t>>2]=(c[t>>2]|0)+1;t=u;c[t>>2]=0;c[t+4>>2]=0;t=(i|0)>1;a:do if(t){p=i+-4|0;i=d[h+21>>0]|0;p=(p|0)>(i|0)?i:p;i=(p|0)>0;b:do if(!(a[h+22>>0]|0)){if(i){m=0;while(1){i=c[j+(m+3<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&8)){if(l&4|0){s=i;o=+((c[s>>2]|0)>>>0)+4294967296.0*+(c[s+4>>2]|0);break}if(!(l&18))o=0.0;else o=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else o=+g[i>>3];while(0);r=o;r=o<r?o*(o<0.0?1.0000001192092896:.9999998807907104):r;f[u+8+(m<<2)>>2]=r;i=c[j+(m+4<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&8)){if(l&4|0){s=i;o=+((c[s>>2]|0)>>>0)+4294967296.0*+(c[s+4>>2]|0);break}if(!(l&18))o=0.0;else o=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else o=+g[i>>3];while(0);y=o;o=o>y?o*(o<0.0?.9999998807907104:1.0000001192092896):y;i=m|1;f[u+8+(i<<2)>>2]=o;m=m+2|0;if(r>o)break;if((m|0)>=(p|0))break b}i=_s(h,i)|0;break a}}else if(i){n=0;while(1){i=c[j+(n+3<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&4)){if(l&8|0){m=Mg(+g[i>>3])|0;L()|0;break}if(!(l&18))m=0;else{m=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0}}else m=c[i>>2]|0;while(0);c[u+8+(n<<2)>>2]=m;i=c[j+(n+4<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&4)){if(l&8|0){i=Mg(+g[i>>3])|0;L()|0;break}if(!(l&18))i=0;else{i=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0}}else i=c[i>>2]|0;while(0);l=n|1;c[u+8+(l<<2)>>2]=i;n=n+2|0;if((m|0)>(i|0))break;if((n|0)>=(p|0))break b}i=_s(h,l)|0;break a}while(0);l=c[j+8>>2]|0;i=b[l+8>>1]|0;if(!(-1431655766>>>(i&31)&1)){i=i&65535;do if(!(i&4)){if(i&8|0){p=Mg(+g[l>>3])|0;s=L()|0;break}if(!(i&18)){p=0;s=0}else{p=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;s=L()|0}}else{s=l;p=c[s>>2]|0;s=c[s+4>>2]|0}while(0);l=u;c[l>>2]=p;c[l+4>>2]=s;l=c[j>>2]|0;i=b[l+8>>1]|0;if(!(-1431655766>>>(i&31)&1)){i=i&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[l>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;l=L()|0}}else{i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);if((i|0)==(p|0)&(l|0)==(s|0)){q=1;i=0;n=s;w=67;break}}m=h+88|0;i=c[m>>2]|0;do if(!(Vc(i,1)|0)){i=c[i+100>>2]|0;l=i+8|0;if(!(b[l>>1]&9216)){q=i;c[q>>2]=p;c[q+4>>2]=s;b[l>>1]=4;break}else{Pg(i,p,s);break}}while(0);n=Gc(c[m>>2]|0)|0;i=c[m>>2]|0;do if(i){l=c[i>>2]|0;q=i+136|0;m=c[q+4>>2]|0;if((m|0)>0|(m|0)==0&(c[q>>2]|0)>>>0>0)hc(l,i);m=kc(i)|0;c[i+20>>2]=770837923;c[i+36>>2]=-1;c[i+40>>2]=0;a[i+146>>0]=2;c[i+44>>2]=0;c[i+32>>2]=1;a[i+147>>0]=-1;c[i+48>>2]=0;q=i+64|0;c[q>>2]=0;c[q+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);i=7;break}else{i=c[l+68>>2]&m;break}}else i=0;while(0);if((n|0)==100)if((a[(c[h+12>>2]|0)+86>>0]|0)==5){q=1;i=$s(h,p,s)|0;n=s;w=67;break}else{i=_s(h,0)|0;break}else{q=1;n=s;w=67}}else{q=0;i=0;p=0;n=0;w=67}}else{q=0;i=0;p=0;n=0;w=67}while(0);if((w|0)==67){m=c[j>>2]|0;l=b[m+8>>1]|0;if(!(-1431655766>>>(l&31)&1)){i=l&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[m>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[m+10>>0]|0,c[m+12>>2]|0,c[m+16>>2]|0)|0;l=L()|0}}else{l=m;i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);i=$s(h,i,l)|0}if(t&(i|0)==0){c[v>>2]=0;if(!q){i=h+92|0;Vc(c[i>>2]|0,1)|0;Vc(c[i>>2]|0,2)|0;Gc(c[i>>2]|0)|0;i=c[i>>2]|0;do if(i){l=c[i>>2]|0;t=i+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(l,i);m=kc(i)|0;c[i+20>>2]=770837923;c[i+36>>2]=-1;c[i+40>>2]=0;a[i+146>>0]=2;c[i+44>>2]=0;c[i+32>>2]=1;a[i+147>>0]=-1;c[i+48>>2]=0;t=i+64|0;c[t>>2]=0;c[t+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);i=7;break}else{i=c[l+68>>2]&m;break}}else i=0;while(0);s=(c[h+12>>2]|0)+40|0;q=c[s>>2]|0;s=c[s+4>>2]|0;t=u;c[t>>2]=q;c[t+4>>2]=s;t=k;c[t>>2]=q;c[t+4>>2]=s;if(!i)w=85}else{w=k;c[w>>2]=p;c[w+4>>2]=n;w=85}do if((w|0)==85){i=at(h,u,0,v)|0;if(!i){c[h+72>>2]=-1;w=c[v>>2]|0;i=bt(h,w,u,0)|0;w=Us(h,w)|0;i=(i|0)==0?w:i;if(!i){p=h+25|0;if(a[p>>0]|0){q=c[h+112>>2]|0;l=k;i=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(q,1)|0)){m=c[q+100>>2]|0;n=m+8|0;if(!(b[n>>1]&9216)){k=m;c[k>>2]=i;c[k+4>>2]=l;b[n>>1]=4;break}else{Pg(m,i,l);break}}while(0);if(a[p>>0]|0){l=h+21|0;i=0;do{Yc(q,i+2|0,c[j+(i+3+(d[l>>0]|0)<<2)>>2]|0)|0;i=i+1|0}while(i>>>0<(d[p>>0]|0)>>>0)}Gc(q)|0;if(q){i=c[q>>2]|0;j=q+136|0;k=c[j+4>>2]|0;if((k|0)>0|(k|0)==0&(c[j>>2]|0)>>>0>0)hc(i,q);l=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;j=q+64|0;c[j>>2]=0;c[j+4>>2]=0;if((l|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&l;break}}else i=0}else i=0}}}while(0)}}Ts(h);h=i;Ra=x;return h|0}function Ns(b){b=b|0;b=b+24|0;a[b>>0]=(a[b>>0]|0)+1<<24>>24;return 0}function Os(b){b=b|0;var d=0,e=0;a[b+24>>0]=0;d=b+76|0;e=c[d>>2]|0;if(!e)return 0;if(c[b+56>>2]|0)return 0;c[d>>2]=0;b=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,e);return 0}d=e;if((c[b+304>>2]|0)>>>0<=d>>>0?(c[b+308>>2]|0)>>>0>d>>>0:0){d=b+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return 0}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return 0}return 0}function Ps(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+48|0;f=g;h=c[b+32>>2]|0;e=c[b+36>>2]|0;c[f>>2]=h;c[f+4>>2]=e;c[f+8>>2]=d;c[f+12>>2]=h;c[f+16>>2]=e;c[f+20>>2]=d;c[f+24>>2]=h;c[f+28>>2]=e;c[f+32>>2]=d;f=Bb(57845,f)|0;if(!f){h=7;Ra=g;return h|0}d=b+76|0;e=c[d>>2]|0;do if((e|0?(a[b+24>>0]|0)==0:0)?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=nd(c[b+12>>2]|0,f,0,0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](f);h=d;Ra=g;return h|0}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);h=d;Ra=g;return h|0}return 0}function Qs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+24|0;f=a[e>>0]|0;a[e>>0]=0;d=b+76|0;g=c[d>>2]|0;if(!g){a[e>>0]=f;return 0}if(c[b+56>>2]|0){a[e>>0]=f;return 0}c[d>>2]=0;d=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,g);a[e>>0]=f;return 0}b=g;if((c[d+304>>2]|0)>>>0<=b>>>0?(c[d+308>>2]|0)>>>0>b>>>0:0){b=d+300|0;c[g>>2]=c[b>>2];c[b>>2]=g;a[e>>0]=f;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);a[e>>0]=f;return 0}else{b=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);a[e>>0]=f;return 0}return 0}function Rs(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0;if(!b){h=0;return h|0}h=a[b>>0]|0;g=d[208+(h&255)>>0]|0;c=g+-110|0;h=h<<24>>24==0;if(!(h|(c|0)!=0)){e=57990;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-112|0;if(!(h|(c|0)!=0)){e=38138;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-114|0;if(h|(c|0)!=0){i=c;i=(i|0)==0;i=i&1;return i|0}e=38132;do{b=b+1|0;e=e+1|0;i=a[b>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0));i=(c|0)==0;i=i&1;return i|0}function Ss(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+240|0;s=T+232|0;S=T+224|0;P=T+216|0;O=T+208|0;N=T+192|0;M=T+184|0;K=T+176|0;J=T+168|0;G=T+160|0;D=T+144|0;C=T+136|0;B=T+128|0;A=T+120|0;z=T+112|0;x=T+104|0;v=T+96|0;u=T+88|0;t=T+80|0;r=T+72|0;H=T+64|0;p=T+56|0;q=T+48|0;I=T;l=T+40|0;k=T+32|0;if((f|0)>103){c[k>>2]=56536;S=Bb(31408,k)|0;c[i>>2]=S;i=1;Ra=T;return i|0}c[l>>2]=1;vd(b,1,l)|0;w=g+4|0;l=Eu(c[w>>2]|0)|0;y=g+8|0;m=Eu(c[y>>2]|0)|0;k=l+506+m|0;R=pb(k,0)|0;if(!R){i=7;Ra=T;return i|0}gw(R|0,0,k|0)|0;c[R+40>>2]=1;c[R>>2]=30764;n=R+504|0;E=R+32|0;c[E>>2]=n;o=n+(l+1)|0;F=R+36|0;c[F>>2]=o;a[R+22>>0]=(e|0)!=0&1;ew(n|0,c[w>>2]|0,l|0)|0;ew(o|0,c[y>>2]|0,m|0)|0;o=zb(b)|0;c[I>>2]=c[g+12>>2];Eb(o,56609,I);a:do if((f|0)>4){l=R+25|0;m=R+21|0;k=4;while(1){e=c[g+(k<<2)>>2]|0;n=a[l>>0]|0;if((a[e>>0]|0)==43){a[l>>0]=n+1<<24>>24;c[q>>2]=e+1;Eb(o,56627,q)}else{if(n<<24>>24){m=1;break a}a[m>>0]=(a[m>>0]|0)+1<<24>>24;c[p>>2]=e;Eb(o,56627,p)}k=k+1|0;if((k|0)>=(f|0)){m=0;break}}}else m=0;while(0);Eb(o,56631,H);do if((o|0)!=0&(o|0)!=29632){k=o+4|0;l=c[k>>2]|0;if(((l|0)!=0?(a[l+(c[o+16>>2]|0)>>0]=0,(c[o+12>>2]|0)!=0):0)?(a[o+21>>0]&4)==0:0)e=$d(o)|0;else e=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{q=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}if(e){if(!m){k=td(b,e)|0;if(!k)k=0;else{l=pd(b)|0;Q=24}}else{k=1;l=56572;Q=24}if((Q|0)==24){c[r>>2]=l;r=Bb(31408,r)|0;c[i>>2]=r}if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{r=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}if(!k){k=a[R+21>>0]|0;r=(k&255)>>>1;a[R+20>>0]=r;if(r<<24>>24)if((k&255)<=10)if(!(k&1)){e=R+23|0;a[e>>0]=((k&255)<<2)+8;n=(j|0)==0;k=c[E>>2]|0;do if(n){l=c[F>>2]|0;c[u>>2]=k;c[u+4>>2]=l;l=Bb(56634,u)|0;m=R+16|0;if(!l){k=7;Q=48}else{c[u>>2]=0;k=qd(b,l,-1,128,0,u,0)|0;if(k|0){Q=48;break}k=c[u>>2]|0;if((Gc(k)|0)==100){u=Nc(k,0)|0;c[m>>2]=u}k=gc(k)|0;if(k|0){Q=48;break}if((c[m>>2]|0)>=448){k=0;break}c[v>>2]=c[F>>2];k=Bb(56691,v)|0;c[i>>2]=k;k=267}}else{c[t>>2]=k;l=Bb(54428,t)|0;if(!l){k=7;Q=48}else{c[t>>2]=0;k=qd(b,l,-1,128,0,t,0)|0;if(k|0){Q=48;break}k=c[t>>2]|0;if((Gc(k)|0)==100)m=(Nc(k,0)|0)+-64|0;else m=-64;k=gc(k)|0;if(k|0){Q=48;break}k=((d[e>>0]|0)*51|0)+4|0;c[R+16>>2]=(k|0)<(m|0)?k:m;k=0}}while(0);if((Q|0)==48){v=pd(b)|0;c[x>>2]=v;x=Bb(31408,x)|0;c[i>>2]=x;if(!l)break}if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{x=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}if(k|0)break;f=c[w>>2]|0;o=c[y>>2]|0;c[R+12>>2]=b;do if(!n){m=zb(b)|0;c[z>>2]=f;c[z+4>>2]=o;Eb(m,57135,z);l=R+25|0;if(a[l>>0]|0){k=0;do{c[A>>2]=k;Eb(m,57197,A);k=k+1|0}while(k>>>0<(d[l>>0]|0)>>>0)}c[B>>2]=f;c[B+4>>2]=o;Eb(m,57202,B);c[C>>2]=f;c[C+4>>2]=o;Eb(m,57266,C);C=c[R+16>>2]|0;c[D>>2]=f;c[D+4>>2]=o;c[D+8>>2]=C;Eb(m,57336,D);if(!((m|0)!=0&(m|0)!=29632)){k=7;Q=122;break}k=m+4|0;l=c[k>>2]|0;do if(!l)Q=62;else{a[l+(c[m+16>>2]|0)>>0]=0;if(!(c[m+12>>2]|0)){Q=62;break}if(a[m+21>>0]&4){Q=62;break}l=$d(m)|0}while(0);if((Q|0)==62)l=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{Q=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}if(!l){k=7;Q=122;break}k=nd(b,l,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{Q=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}if(k)Q=122;else Q=71}else Q=71;while(0);b:do if((Q|0)==71){c[I>>2]=R+80;c[I+4>>2]=R+84;c[I+8>>2]=R+88;c[I+12>>2]=R+92;c[I+16>>2]=R+96;c[I+20>>2]=R+100;c[I+24>>2]=R+104;c[I+28>>2]=R+108;k=Rd(b,c[E>>2]|0,35174,0,0,0,0,0,0)|0;do if(!k){e=c[F>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=e;e=Bb(57611,G)|0;if(!e){k=7;Q=85;break}k=qd(b,e,-1,128,0,H,0)|0;c:do switch(k|0){case 0:{k=c[H>>2]|0;if((Gc(k)|0)==100){l=Oc(k,0)|0;m=L()|0}else{l=0;m=0}k=gc(k)|0;if(k|0)break c;if((l|0)==0&(m|0)==0){Q=79;break c}H=(m|0)>0|(m|0)==0&l>>>0>100;k=R+48|0;c[k>>2]=H?l:100;c[k+4>>2]=H?m:0;k=0;break}case 7:break;default:Q=79}while(0);if((Q|0)==79){k=R+48|0;c[k>>2]=1048576;c[k+4>>2]=0;k=0}if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{Q=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}if(!k)Q=88;else Q=87}else{Q=R+48|0;c[Q>>2]=1048576;c[Q+4>>2]=0;if((k|0)!=1){Q=85;break}Q=88}while(0);d:do if((Q|0)==85)Q=87;else if((Q|0)==88){e=R+25|0;m=0;while(1){if((m|0)==3?(a[e>>0]|0)!=0:0)k=57385;else k=c[26432+(m<<2)>>2]|0;c[J>>2]=f;c[J+4>>2]=o;l=Bb(k,J)|0;if(!l){k=7;g=e;break d}k=qd(b,l,-1,133,0,c[I+(m<<2)>>2]|0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{H=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}m=m+1|0;if(!(m>>>0<8&(k|0)==0)){g=e;break}}}while(0);if((Q|0)==87)g=R+25|0;do if(a[g>>0]|0){c[K>>2]=f;c[K+4>>2]=o;K=Bb(57493,K)|0;c[R+64>>2]=K;if(!K){k=7;Q=122;break b}p=zb(b)|0;c[M>>2]=f;c[M+4>>2]=o;Eb(p,57538,M);if(a[g>>0]|0){e=R+26|0;n=p+16|0;o=p+8|0;f=p+4|0;m=0;do{do if(m|0){k=c[n>>2]|0;l=k+1|0;if(l>>>0<(c[o>>2]|0)>>>0){c[n>>2]=l;a[(c[f>>2]|0)+k>>0]=44;break}else{wb(p,41685,1);break}}while(0);k=m+2|0;if(m>>>0<(d[e>>0]|0)>>>0){c[N>>2]=m;c[N+4>>2]=k;c[N+8>>2]=m;Eb(p,57565,N)}else{c[O>>2]=m;c[O+4>>2]=k;Eb(p,57587,O)}m=m+1|0}while(m>>>0<(d[g>>0]|0)>>>0)}Eb(p,57595,P);if(!((p|0)!=0&(p|0)!=29632)){k=7;Q=122;break b}k=p+4|0;l=c[k>>2]|0;do if(!l)Q=114;else{a[l+(c[p+16>>2]|0)>>0]=0;if(!(c[p+12>>2]|0)){Q=114;break}if(a[p+21>>0]&4){Q=114;break}l=$d(p)|0}while(0);if((Q|0)==114)l=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{P=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}if(!l){k=7;Q=122;break b}k=qd(b,l,-1,133,0,R+112|0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{P=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(k|0)break;c[h>>2]=R;i=0;Ra=T;return i|0}while(0);b=pd(b)|0;c[S>>2]=b;S=Bb(31408,S)|0;c[i>>2]=S;break}else k=1;else k=3;else k=2;c[s>>2]=c[26400+(k<<2)>>2];k=Bb(31408,s)|0;c[i>>2]=k;k=1}}else k=7}else k=7;while(0);Ts(R);i=k;Ra=T;return i|0}function Ts(b){b=b|0;var d=0,e=0,f=0;d=b+40|0;e=(c[d>>2]|0)+-1|0;c[d>>2]=e;if(e|0)return;a[b+24>>0]=0;d=b+76|0;e=c[d>>2]|0;do if(e|0?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}f=e;if((c[d+304>>2]|0)>>>0<=f>>>0?(c[d+308>>2]|0)>>>0>f>>>0:0){f=d+300|0;c[e>>2]=c[f>>2];c[f>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;d=c[b+64>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{f=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{f=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function Us(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b){b=0;return b|0}f=b+16|0;g=(c[f>>2]|0)+-1|0;c[f>>2]=g;if(g|0){b=0;return b|0}f=a+60|0;c[f>>2]=(c[f>>2]|0)+-1;f=b+8|0;g=f;if((c[g>>2]|0)==1&(c[g+4>>2]|0)==0)c[a+28>>2]=-1;d=c[b>>2]|0;if((d|0)!=0?(e=Us(a,d)|0,(e|0)!=0):0)g=e;else g=Vs(a,b)|0;d=c[f>>2]|0;if(!((d|0)==0&(c[f+4>>2]|0)==0)){d=a+116+(((d>>>0)%97|0)<<2)|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;else d=e+28|0}a=b+28|0;c[d>>2]=c[a>>2];c[a>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=g;return b|0}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=g;return b|0}return 0}function Vs(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=e+20|0;if(!(c[j>>2]|0)){n=0;return n|0}m=c[d+80>>2]|0;n=e+8|0;g=n;f=c[g>>2]|0;g=c[g+4>>2]|0;do if(((f|0)!=0|(g|0)!=0)&(Vc(m,1)|0)==0){h=c[m+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){c[h>>2]=f;c[h+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);f=c[e+24>>2]|0;g=c[d+16>>2]|0;if((f|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;c[j>>2]=0;if(!m)f=0;else l=12}else{f=yc((c[m+100>>2]|0)+40|0,f,g,0,0)|0;if(f|0?(k=c[m>>2]|0,c[k+64>>2]=f,Ne(k,f),k=c[m>>2]|0,(f|0)==3082|(a[k+81>>0]|0)!=0):0)og(k);Gc(m)|0;c[j>>2]=0;l=12}do if((l|0)==12){f=c[m>>2]|0;l=m+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(f,m);g=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;l=m+64|0;c[l>>2]=0;c[l+4>>2]=0;if((g|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7;break}else{f=c[f+68>>2]&g;break}}while(0);Vc(m,2)|0;m=n;if(!((f|0)==0&((c[m>>2]|0)==0&(c[m+4>>2]|0)==0))){n=f;return n|0}l=(c[d+12>>2]|0)+40|0;m=c[l>>2]|0;l=c[l+4>>2]|0;c[n>>2]=m;c[n+4>>2]=l;n=d+116+(((m>>>0)%97|0)<<2)|0;c[e+28>>2]=c[n>>2];c[n>>2]=e;n=0;return n|0}function Ws(b,e,f){b=b|0;e=+e;f=f|0;var h=0,i=0,j=0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=Ra;Ra=Ra+32|0;t=u;s=b+5|0;i=(a[s>>0]|0)==0;do if(i)if(c[b+24>>2]|0){h=c[b+32>>2]|0;q=b+84+((f&255)<<2)|0;c[q>>2]=(c[q>>2]|0)+1;if(!h)break;else{r=6;break}}else{t=b+84+((f&255)<<2)|0;c[t>>2]=(c[t>>2]|0)+1;break}else{h=b+84+((f&255)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=b+40|0;r=6}while(0);if((r|0)==6){k=+g[h>>3];do if(!(k>e)){if(k==e?(d[h+16>>0]|0)>(f&255):0)break;m=b+24|0;i=c[m>>2]|0;l=b+20|0;h=c[l>>2]|0;do if((i|0)>=(h|0)){i=(h<<1)+8|0;j=b+32|0;h=c[j>>2]|0;if(mb()|0){b=0;Ra=u;return b|0}h=sb(h,i*24|0,0)|0;if(!h){b=0;Ra=u;return b|0}else{c[j>>2]=h;c[l>>2]=i;p=j;i=c[m>>2]|0;j=h;break}}else{j=b+32|0;p=j;j=c[j>>2]|0}while(0);c[m>>2]=i+1;h=j+(i*24|0)|0;g[h>>3]=e;a[j+(i*24|0)+16>>0]=f;if((i|0)<=0){b=h;Ra=u;return b|0}o=b+32|0;a:while(1){l=(i+-1|0)/2|0;m=j+(l*24|0)|0;k=+g[m>>3];if(!(e<k)){if(e>k){r=49;break}if((d[h+16>>0]|0)>=(d[j+(l*24|0)+16>>0]|0)){r=49;break}}h=j+(l*24|0)|0;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];c[t+8>>2]=c[h+8>>2];c[t+12>>2]=c[h+12>>2];c[t+16>>2]=c[h+16>>2];c[t+20>>2]=c[h+20>>2];j=j+(i*24|0)|0;c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[h+16>>2]=c[j+16>>2];c[h+20>>2]=c[j+20>>2];h=(c[o>>2]|0)+(i*24|0)|0;c[h>>2]=c[t>>2];c[h+4>>2]=c[t+4>>2];c[h+8>>2]=c[t+8>>2];c[h+12>>2]=c[t+12>>2];c[h+16>>2]=c[t+16>>2];c[h+20>>2]=c[t+20>>2];h=l+1|0;j=i+1|0;do if((i|0)<9)if((i|0)<=3){r=b+64+(h<<2)|0;s=c[r>>2]|0;f=b+64+(j<<2)|0;c[r>>2]=c[f>>2];c[f>>2]=s;if((i|0)==3)break;else{h=m;r=49;break a}}else{f=b+64+(h<<2)|0;Us(c[b>>2]|0,c[f>>2]|0)|0;c[f>>2]=0;break}while(0);i=l;h=m;j=c[p>>2]|0;e=+g[m>>3]}if((r|0)==49){Ra=u;return h|0}}while(0);if(!i){m=b+24|0;j=c[m>>2]|0;l=b+20|0;h=c[l>>2]|0;do if((j|0)>=(h|0)){i=(h<<1)+8|0;j=b+32|0;h=c[j>>2]|0;if(mb()|0){b=0;Ra=u;return b|0}h=sb(h,i*24|0,0)|0;if(!h){b=0;Ra=u;return b|0}else{c[j>>2]=h;c[l>>2]=i;q=j;i=h;j=c[m>>2]|0;l=h;break}}else{q=b+32|0;l=c[q>>2]|0;i=l}while(0);c[m>>2]=j+1;h=l+(j*24|0)|0;g[h>>3]=e;a[l+(j*24|0)+16>>0]=f;b:do if((j|0)>0){p=b+32|0;n=e;while(1){m=(j+-1|0)/2|0;o=l+(m*24|0)|0;k=+g[o>>3];if(!(n<k)){if(n>k){r=26;break b}if((d[h+16>>0]|0)>=(d[l+(m*24|0)+16>>0]|0))break b}h=l+(m*24|0)|0;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];c[t+8>>2]=c[h+8>>2];c[t+12>>2]=c[h+12>>2];c[t+16>>2]=c[h+16>>2];c[t+20>>2]=c[h+20>>2];i=l+(j*24|0)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];c[h+20>>2]=c[i+20>>2];h=(c[p>>2]|0)+(j*24|0)|0;c[h>>2]=c[t>>2];c[h+4>>2]=c[t+4>>2];c[h+8>>2]=c[t+8>>2];c[h+12>>2]=c[t+12>>2];c[h+16>>2]=c[t+16>>2];c[h+20>>2]=c[t+20>>2];h=m+1|0;i=j+1|0;do if((j|0)<9)if((j|0)<=3){v=b+64+(h<<2)|0;h=c[v>>2]|0;l=b+64+(i<<2)|0;c[v>>2]=c[l>>2];c[l>>2]=h;if((j|0)==3)break;else{h=o;r=26;break b}}else{v=b+64+(h<<2)|0;Us(c[b>>2]|0,c[v>>2]|0)|0;c[v>>2]=0;break}while(0);l=c[q>>2]|0;j=m;h=o;i=l;n=+g[o>>3]}}else r=26;while(0);do if((r|0)==26)if(!h){v=0;Ra=u;return v|0}else{i=c[b+32>>2]|0;break}while(0);i=h-i|0;if((i|0)<96){c[b+64+(((i|0)/24|0)+1<<2)>>2]=c[b+64>>2];i=b+64|0}else{i=b+64|0;Us(c[b>>2]|0,c[i>>2]|0)|0}c[i>>2]=0;v=b+40|0;c[h>>2]=c[v>>2];c[h+4>>2]=c[v+4>>2];c[h+8>>2]=c[v+8>>2];c[h+12>>2]=c[v+12>>2];c[h+16>>2]=c[v+16>>2];c[h+20>>2]=c[v+20>>2]}}v=b+40|0;g[v>>3]=e;a[b+56>>0]=f;a[s>>0]=1;Ra=u;return v|0}function Xs(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+16|0;m=p;i=c[b+116+(((e>>>0)%97|0)<<2)>>2]|0;a:do if(i|0){j=i;while(1){o=j+8|0;if((c[o>>2]|0)==(e|0)?(c[o+4>>2]|0)==(f|0):0)break;i=c[j+28>>2]|0;if(!i)break a;else j=i}do if(g|0?(c[j>>2]|0)==0:0){i=g;while(1){if((i|0)==(j|0)){i=267;n=63;break}i=c[i>>2]|0;if(!i){n=10;break}}if((n|0)==10){b=g+16|0;c[b>>2]=(c[b>>2]|0)+1;c[j>>2]=g;break}else if((n|0)==63){Ra=p;return i|0}}while(0);b=j+16|0;c[b>>2]=(c[b>>2]|0)+1;c[h>>2]=j;h=0;Ra=p;return h|0}while(0);o=b+76|0;k=c[o>>2]|0;do if(k){c[o>>2]=0;i=ld(k,e,f)|0;c[o>>2]=k;if(!i){l=b+16|0;i=c[l>>2]|0;n=48;break}j=b+24|0;do if((a[j>>0]|0)==0?(c[b+56>>2]|0)==0:0){c[o>>2]=0;l=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}n=k;if((c[l+304>>2]|0)>>>0<=n>>>0?(c[l+308>>2]|0)>>>0>n>>>0:0){n=l+300|0;c[k>>2]=c[n>>2];c[n>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if((i|0)!=7){k=c[o>>2]|0;if(!k){n=28;break}else{n=35;break}}else{h=7;Ra=p;return h|0}}else n=28;while(0);do if((n|0)==28){c[m>>2]=c[b+36>>2];j=Bb(57749,m)|0;if(!j){h=7;Ra=p;return h|0}i=ad(c[b+12>>2]|0,c[b+32>>2]|0,j,57757,e,f,0,o)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{n=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}k=c[o>>2]|0;if(!i){l=b+16|0;i=c[l>>2]|0;if(!k){j=0;k=l;n=50;break}else{n=48;break}}if(!k)n=46;else{j=b+24|0;n=35}}while(0);do if((n|0)==35)if((a[j>>0]|0)==0?(c[b+56>>2]|0)==0:0){c[o>>2]=0;j=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(j|0){if(c[j+480>>2]|0){Xd(j,k);n=46;break}b=k;if((c[j+304>>2]|0)>>>0<=b>>>0?(c[j+308>>2]|0)>>>0>b>>>0:0){n=j+300|0;c[k>>2]=c[n>>2];c[n>>2]=k;n=46;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);n=46;break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);n=46;break}}else n=46;else if((n|0)==48)if(!(c[k+16>>2]|0)){j=0;k=l;n=50}else{j=c[k>>2]|0;k=l;n=50}while(0);do if((n|0)==46){c[h>>2]=0;i=(i|0)==1?267:i;j=0}else if((n|0)==50)if((i|0)==(j|0)){j=pb(i+32|0,0)|0;if(j){c[j>>2]=g;i=j+32|0;c[j+24>>2]=i;c[j+16>>2]=1;n=b+60|0;c[n>>2]=(c[n>>2]|0)+1;n=j+8|0;c[n>>2]=e;c[n+4>>2]=f;c[j+20>>2]=0;c[j+28>>2]=0;i=jd(c[o>>2]|0,i,c[k>>2]|0,0,81)|0;if((e|0)==1&(f|0)==0){f=c[j+24>>2]|0;f=d[f>>0]<<8|d[f+1>>0];c[b+28>>2]=f;i=f>>>0>40?267:i}if(!i){f=c[j+24>>2]|0;if((d[f+2>>0]<<8|d[f+3>>0]|0)>(((c[b+16>>2]|0)+-4|0)/(d[b+23>>0]|0)|0|0))i=267;else{if(g|0){g=g+16|0;c[g>>2]=(c[g>>2]|0)+1}i=b+116+((((c[j+8>>2]|0)>>>0)%97|0)<<2)|0;c[j+28>>2]=c[i>>2];c[i>>2]=j;i=0;break}}b=b+60|0;c[b>>2]=(c[b>>2]|0)+-1;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=0;break}else{b=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=0;break}}else{i=7;j=0}}else{i=267;j=0}while(0);c[h>>2]=j;h=i;Ra=p;return h|0}function Ys(b){b=b|0;var e=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0;Pa=Ra;Ra=Ra+96|0;ua=Pa;Fa=Pa+80|0;za=c[b>>2]|0;Ma=c[b+12>>2]|0;Na=(a[za+22>>0]|0)==1;Oa=b+5|0;va=b+24|0;wa=b+40|0;xa=b+32|0;ya=b+48|0;za=za+23|0;Aa=(Ma|0)>0;Ba=b+16|0;Ca=ua+8|0;Da=ua+72|0;Ea=ua+64|0;Ga=ua+56|0;Ha=ua+48|0;Ia=ua+40|0;Ja=ua+32|0;Ka=ua+24|0;La=ua+16|0;m=0;e=0;a:while(1){j=a[Oa>>0]|0;if(!(j<<24>>24)){if(!(c[va>>2]|0)){e=1;ta=66;break}i=c[xa>>2]|0;if(!i){e=1;ta=66;break}}else i=wa;if(!(a[i+16>>0]|0)){e=0;ta=66;break}k=1-(j&255)|0;l=b+64+(k<<2)|0;j=c[l>>2]|0;if(!j){if(!k)e=ya;else e=(c[xa>>2]|0)+8|0;e=Xs(c[b>>2]|0,c[e>>2]|0,c[e+4>>2]|0,0,l)|0;j=c[l>>2]|0}if(e|0){ta=67;break}ra=j+24|0;sa=c[ra>>2]|0;sa=d[sa+2>>0]<<8|d[sa+3>>0];qa=i;j=m;e=0;b:while(1){oa=qa+18|0;k=a[oa>>0]|0;i=k&255;if(sa>>>0<=i>>>0)break;pa=(c[ra>>2]|0)+((G(d[za>>0]|0,i)|0)+4)|0;c:do if(Aa){O=qa+16|0;P=pa+8|0;Q=pa+1|0;R=pa+2|0;S=pa+3|0;T=pa+4|0;U=pa+5|0;V=pa+6|0;W=pa+7|0;X=pa+12|0;Y=pa+13|0;Z=pa+14|0;_=pa+15|0;$=pa+9|0;aa=pa+10|0;ba=pa+11|0;ca=pa+44|0;da=pa+45|0;ea=pa+46|0;fa=pa+47|0;ga=pa+40|0;ha=pa+41|0;ia=pa+42|0;ja=pa+43|0;ka=pa+36|0;la=pa+37|0;ma=pa+38|0;na=pa+39|0;r=pa+32|0;s=pa+33|0;t=pa+34|0;u=pa+35|0;v=pa+28|0;w=pa+29|0;x=pa+30|0;y=pa+31|0;z=pa+24|0;A=pa+25|0;B=pa+26|0;C=pa+27|0;D=pa+20|0;E=pa+21|0;F=pa+22|0;H=pa+23|0;I=pa+16|0;J=pa+17|0;K=pa+18|0;M=pa+19|0;N=qa+17|0;o=2;n=0;p=-1.0;d:do{l=c[Ba>>2]|0;m=c[l+(n*24|0)+4>>2]|0;e:do if((m|0)>69){e=c[l+(n*24|0)+16>>2]|0;i=c[e+28>>2]|0;if((m|0)==71?(a[O>>0]|0)==1:0){Va=cw(d[pa>>0]|0,0,56)|0;Sa=L()|0;Xa=cw(d[Q>>0]|0,0,48)|0;Sa=L()|0|Sa;Ua=cw(d[R>>0]|0,0,40)|0;Sa=Sa|(L()|0);Sa=Sa|d[S>>0];Ta=cw(d[T>>0]|0,0,24)|0;Sa=Sa|(L()|0);k=cw(d[U>>0]|0,0,16)|0;Sa=Sa|(L()|0);Qa=cw(d[V>>0]|0,0,8)|0;Sa=Sa|(L()|0);Sa=Sv(Xa|Va|Ua|Ta|k|Qa|0,Sa|0,d[W>>0]|0,0)|0;Qa=L()|0;k=e+40|0;c[k>>2]=Sa;c[k+4>>2]=Qa}if(Na){switch(i|0){case 10:{g[Da>>3]=+(d[da>>0]<<16|d[ca>>0]<<24|d[ea>>0]<<8|d[fa>>0]|0);g[Ea>>3]=+(d[ha>>0]<<16|d[ga>>0]<<24|d[ia>>0]<<8|d[ja>>0]|0);ta=29;break}case 8:{ta=29;break}case 6:{ta=30;break}case 4:{ta=31;break}default:{}}if((ta|0)==29){g[Ga>>3]=+(d[la>>0]<<16|d[ka>>0]<<24|d[ma>>0]<<8|d[na>>0]|0);g[Ha>>3]=+(d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0]|0);ta=30}if((ta|0)==30){g[Ia>>3]=+(d[w>>0]<<16|d[v>>0]<<24|d[x>>0]<<8|d[y>>0]|0);g[Ja>>3]=+(d[A>>0]<<16|d[z>>0]<<24|d[B>>0]<<8|d[C>>0]|0);ta=31}if((ta|0)==31){ta=0;g[Ka>>3]=+(d[E>>0]<<16|d[D>>0]<<24|d[F>>0]<<8|d[H>>0]|0);g[La>>3]=+(d[J>>0]<<16|d[I>>0]<<24|d[K>>0]<<8|d[M>>0]|0)}g[Ca>>3]=+(d[Y>>0]<<16|d[X>>0]<<24|d[Z>>0]<<8|d[_>>0]|0);q=+(d[$>>0]<<16|d[P>>0]<<24|d[aa>>0]<<8|d[ba>>0]|0)}else{switch(i|0){case 10:{g[Da>>3]=(c[h>>2]=d[da>>0]<<16|d[ca>>0]<<24|d[ea>>0]<<8|d[fa>>0],+f[h>>2]);g[Ea>>3]=(c[h>>2]=d[ha>>0]<<16|d[ga>>0]<<24|d[ia>>0]<<8|d[ja>>0],+f[h>>2]);ta=23;break}case 8:{ta=23;break}case 6:{ta=24;break}case 4:{ta=25;break}default:{}}if((ta|0)==23){g[Ga>>3]=(c[h>>2]=d[la>>0]<<16|d[ka>>0]<<24|d[ma>>0]<<8|d[na>>0],+f[h>>2]);g[Ha>>3]=(c[h>>2]=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0],+f[h>>2]);ta=24}if((ta|0)==24){g[Ia>>3]=(c[h>>2]=d[w>>0]<<16|d[v>>0]<<24|d[x>>0]<<8|d[y>>0],+f[h>>2]);g[Ja>>3]=(c[h>>2]=d[A>>0]<<16|d[z>>0]<<24|d[B>>0]<<8|d[C>>0],+f[h>>2]);ta=25}if((ta|0)==25){ta=0;g[Ka>>3]=(c[h>>2]=d[E>>0]<<16|d[D>>0]<<24|d[F>>0]<<8|d[H>>0],+f[h>>2]);g[La>>3]=(c[h>>2]=d[J>>0]<<16|d[I>>0]<<24|d[K>>0]<<8|d[M>>0],+f[h>>2])}g[Ca>>3]=(c[h>>2]=d[Y>>0]<<16|d[X>>0]<<24|d[Z>>0]<<8|d[_>>0],+f[h>>2]);q=(c[h>>2]=d[$>>0]<<16|d[P>>0]<<24|d[aa>>0]<<8|d[ba>>0],+f[h>>2])}g[ua>>3]=q;if((m|0)==70){c[Fa>>2]=0;e=Za[c[l+(n*24|0)+8>>2]&127](e,i,ua,Fa)|0;p=0.0;o=(c[Fa>>2]|0)==0?0:o}else{c[e+20>>2]=ua;c[e+32>>2]=(d[O>>0]|0)+-1;q=+g[qa>>3];g[e+48>>3]=q;Va=e+64|0;g[Va>>3]=q;Ua=d[N>>0]|0;c[e+56>>2]=Ua;Xa=e+60|0;c[Xa>>2]=Ua;e=Wa[c[l+(n*24|0)+8>>2]&127](e)|0;Xa=c[Xa>>2]|0;q=+g[Va>>3];p=p<0.0|q<p?q:p;o=(Xa|0)<(o|0)?Xa:o}if(!e){e=0;ta=49}else{k=1;j=e}}else{i=c[l+(n*24|0)>>2]<<2;if((a[O>>0]|0)!=1){k=pa+((i&1016)+8)|0;if((m+-65|0)>>>0<3){i=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];q=+g[l+(n*24|0)+8>>3];if(q>=(Na?+(i|0):(c[h>>2]=i,+f[h>>2]))){ta=49;break}if((m|0)!=65){ta=50;break}}else q=+g[l+(n*24|0)+8>>3];i=k+4|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];if(!(q<=(Na?+(i|0):(c[h>>2]=i,+f[h>>2])))){ta=50;break}else{ta=49;break}}i=pa+(i+8)|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];q=Na?+(i|0):(c[h>>2]=i,+f[h>>2]);switch(m|0){case 66:if(!(q<=+g[l+(n*24|0)+8>>3])){ta=50;break e}else{ta=49;break e}case 67:if(q<+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}case 68:if(!(q>=+g[l+(n*24|0)+8>>3])){ta=50;break e}else{ta=49;break e}case 69:if(q>+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}default:if(q==+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}}}while(0);if((ta|0)==49){ta=0;if(!o)ta=50;else k=0}if((ta|0)==50){ta=0;k=6;o=0}switch(k&7){case 6:break d;case 0:break;default:{i=qa;break c}}n=n+1|0}while((n|0)<(Ma|0));i=(a[oa>>0]|0)+1<<24>>24;a[oa>>0]=i;if(!o){i=qa;k=4}else ta=54}else{i=k+1<<24>>24;a[oa>>0]=i;p=-1.0;o=2;ta=54}while(0);if((ta|0)==54){ta=0;n=(d[qa+16>>0]|0)+255&255;if(!(n<<24>>24)){m=qa+8|0;k=i&255;i=k;k=k+255&255;l=c[m>>2]|0;m=c[m+4>>2]|0}else{Ua=cw(d[pa>>0]|0,0,56)|0;l=L()|0;Ta=cw(d[pa+1>>0]|0,0,48)|0;l=L()|0|l;Va=cw(d[pa+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[pa+3>>0];Xa=cw(d[pa+4>>0]|0,0,24)|0;l=l|(L()|0);m=cw(d[pa+5>>0]|0,0,16)|0;l=l|(L()|0);k=cw(d[pa+6>>0]|0,0,8)|0;l=l|(L()|0);l=Sv(Ta|Ua|Va|Xa|m|k|0,l|0,d[pa+7>>0]|0,0)|0;i=i&255;k=0;m=L()|0}if(sa>>>0<=i>>>0)Zs(b);i=Ws(b,p<0.0?0.0:p,n)|0;if(!i){e=7;ta=67;break a}a[i+17>>0]=o;Xa=i+8|0;c[Xa>>2]=l;c[Xa+4>>2]=m;a[i+18>>0]=k;k=5}switch(k|0){case 4:{qa=i;break}case 5:{ta=62;break b}default:{e=j;ta=67;break a}}}if((ta|0)==62){ta=0;i=d[i+18>>0]|0}if(sa>>>0<=i>>>0)Zs(b);m=j}if((ta|0)==66){a[b+4>>0]=e;Xa=0;Ra=Pa;return Xa|0}else if((ta|0)==67){Ra=Pa;return e|0}return 0}function Zs(b){b=b|0;var e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;p=r;i=b+5|0;e=a[i>>0]|0;f=b+64+(1-(e&255)<<2)|0;h=c[f>>2]|0;if(h){Us(c[b>>2]|0,h)|0;c[f>>2]=0;e=a[i>>0]|0}if(e<<24>>24){q=b+84+((d[b+56>>0]|0)<<2)|0;c[q>>2]=(c[q>>2]|0)+-1;a[i>>0]=0;Ra=r;return}e=b+24|0;f=c[e>>2]|0;if(!f){Ra=r;return}n=b+32|0;m=c[n>>2]|0;o=b+84+((d[m+16>>0]|0)<<2)|0;c[o>>2]=(c[o>>2]|0)+-1;o=f+-1|0;c[e>>2]=o;e=m+(o*24|0)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[m+16>>2]=c[e+16>>2];c[m+20>>2]=c[e+20>>2];e=b+64+(f<<2)|0;if((f|0)<5?(c[b+68>>2]=c[e>>2],c[e>>2]=0,(f|0)<=2):0){Ra=r;return}e=0;m=1;a:while(1){l=m+1|0;i=c[n>>2]|0;do if((l|0)<(o|0)){h=i+(l*24|0)|0;k=+g[h>>3];j=+g[i+(m*24|0)>>3];if(!(k<j)){if(k>j){q=21;break}if((d[i+(l*24|0)+16>>0]|0)>=(d[i+(m*24|0)+16>>0]|0)){q=21;break}}f=i+(e*24|0)|0;j=+g[f>>3];if(!(k<j)){if(k>j){q=30;break a}if((d[i+(l*24|0)+16>>0]|0)>=(d[i+(e*24|0)+16>>0]|0)){q=30;break a}};c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];c[p+16>>2]=c[f+16>>2];c[p+20>>2]=c[f+20>>2];c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];f=(c[n>>2]|0)+(l*24|0)|0;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];f=e+1|0;h=m+2|0;do if((e|0)<4)if((m|0)>2){m=b+64+(f<<2)|0;Us(c[b>>2]|0,c[m>>2]|0)|0;c[m>>2]=0;break}else{f=b+64+(f<<2)|0;i=c[f>>2]|0;m=b+64+(h<<2)|0;c[f>>2]=c[m>>2];c[m>>2]=i;break}while(0);e=l}else q=21;while(0);if((q|0)==21){q=0;f=i+(m*24|0)|0;h=i+(e*24|0)|0;j=+g[f>>3];k=+g[h>>3];if(!(j<k)){if(j>k){q=30;break}if((d[i+(m*24|0)+16>>0]|0)>=(d[i+(e*24|0)+16>>0]|0)){q=30;break}};c[p>>2]=c[h>>2];c[p+4>>2]=c[h+4>>2];c[p+8>>2]=c[h+8>>2];c[p+12>>2]=c[h+12>>2];c[p+16>>2]=c[h+16>>2];c[p+20>>2]=c[h+20>>2];c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=(c[n>>2]|0)+(m*24|0)|0;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];c[f+20>>2]=c[p+20>>2];f=e+1|0;do if((e|0)<4)if((m|0)>3){l=b+64+(f<<2)|0;Us(c[b>>2]|0,c[l>>2]|0)|0;c[l>>2]=0;break}else{h=b+64+(f<<2)|0;i=c[h>>2]|0;l=b+64+(l<<2)|0;c[h>>2]=c[l>>2];c[l>>2]=i;break}while(0);e=m}m=e<<1|1;if((m|0)>=(o|0)){q=30;break}}if((q|0)==30){Ra=r;return}}function _s(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;l=o+16|0;j=o+8|0;g=o;i=o+28|0;c[i>>2]=0;n=d+36|0;m=c[n>>2]|0;c[g>>2]=c[d+32>>2];c[g+4>>2]=m;g=Bb(53869,g)|0;do if(!g){h=7;g=0}else{h=qd(c[d+12>>2]|0,g,-1,128,0,i,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}if(h|0){g=c[i>>2]|0;break}m=c[i>>2]|0;k=c[m>>2]|0;g=(m|0)==0;if(!f){if(!g?(b[m+144>>1]|0)!=0:0){g=c[m+116>>2]|0;do if(g){h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(h&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);h=k+81|0;if(a[h>>0]|0)if(!(c[k+180>>2]|0)){a[h>>0]=0;c[k+264>>2]=0;g=k+272|0;c[g>>2]=(c[g>>2]|0)+-1;g=0}else g=0}else g=0;c[j>>2]=c[n>>2];c[j+4>>2]=g;g=Bb(57776,j)|0}else{if(!g){j=m+144|0;if((e[j>>1]|0)>>>0>f>>>0){g=c[m+116>>2]|0;h=g+(f*40|0)|0;do if(h){i=b[g+(f*40|0)+8>>1]|0;if((i&514)==514?(a[g+(f*40|0)+10>>0]|0)==1:0){h=c[g+(f*40|0)+16>>2]|0;break}if(!(i&1))h=Gg(h,1)|0;else h=0}else h=0;while(0);g=k+81|0;if(a[g>>0]|0)if(!(c[k+180>>2]|0)){a[g>>0]=0;c[k+264>>2]=0;h=k+272|0;c[h>>2]=(c[h>>2]|0)+-1;h=0}else h=0}else h=0;f=f+1|0;k=c[m>>2]|0;if(f>>>0<(e[j>>1]|0)>>>0){g=c[m+116>>2]|0;i=g+(f*40|0)|0;do if(i){j=b[g+(f*40|0)+8>>1]|0;if((j&514)==514?(a[g+(f*40|0)+10>>0]|0)==1:0){g=c[g+(f*40|0)+16>>2]|0;break}if(!(j&1))g=Gg(i,1)|0;else g=0}else g=0;while(0);i=k+81|0;if(a[i>>0]|0)if(!(c[k+180>>2]|0)){a[i>>0]=0;c[k+264>>2]=0;g=k+272|0;c[g>>2]=(c[g>>2]|0)+-1;g=0}else g=0}else g=0}else{h=0;g=0}c[l>>2]=c[n>>2];c[l+4>>2]=h;c[l+8>>2]=g;g=Bb(57808,l)|0}c[d+8>>2]=g;gc(m)|0;d=19;Ra=o;return d|0}while(0);gc(g)|0;d=h;Ra=o;return d|0}function $s(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;x=Ra;Ra=Ra+64|0;t=x+56|0;u=x;v=x+52|0;w=x+48|0;c[v>>2]=0;c[w>>2]=0;i=Xs(e,1,0,0,w)|0;a:do if(!i){c[v>>2]=0;k=e+88|0;h=c[k>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){s=h;c[s>>2]=f;c[s+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);s=(Gc(c[k>>2]|0)|0)==100;j=c[k>>2]|0;do if(s){i=Oc(j,0)|0;i=Xs(e,i,L()|0,0,v)|0;h=c[k>>2]|0;if(h){j=c[h>>2]|0;s=h+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(j,h);s=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;r=h+64|0;c[r>>2]=0;c[r+4>>2]=0;if((s|0)==3082|(a[j+81>>0]|0)!=0)og(j)}}else if(j){h=c[j>>2]|0;s=j+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(h,j);i=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;s=j+64|0;c[s>>2]=0;c[s+4>>2]=0;if((i|0)==3082|(a[h+81>>0]|0)!=0){og(h);i=7;break a}else{i=c[h+68>>2]&i;break}}else i=0;while(0);l=c[v>>2]|0;b:do if((i|0)==0&(l|0)!=0){i=c[l+24>>2]|0;j=d[i+2>>0]<<8|d[i+3>>0];c:do if(j|0){k=d[e+23>>0]|0;h=0;while(1){s=i+((G(h,k)|0)+4)|0;A=cw(d[s>>0]|0,0,56)|0;r=L()|0;B=cw(d[s+1>>0]|0,0,48)|0;r=L()|0|r;z=cw(d[s+2>>0]|0,0,40)|0;r=r|(L()|0);r=r|d[s+3>>0];y=cw(d[s+4>>0]|0,0,24)|0;r=r|(L()|0);p=cw(d[s+5>>0]|0,0,16)|0;r=r|(L()|0);q=cw(d[s+6>>0]|0,0,8)|0;r=r|(L()|0);s=Sv(B|A|z|y|p|q|0,r|0,d[s+7>>0]|0,0)|0;if((s|0)==(f|0)&(L()|0)==(g|0))break;h=h+1|0;if(h>>>0>=j>>>0)break c}h=ct(e,l,h,0)|0;i=Us(e,l)|0;if(!h)break b;else{i=h;break a}}while(0);Us(e,l)|0;i=267;break a}while(0);if(!i){j=e+96|0;h=c[j>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){B=h;c[B>>2]=f;c[B+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;B=h+136|0;A=c[B+4>>2]|0;if((A|0)>0|(A|0)==0&(c[B>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;B=h+64|0;c[B>>2]=0;c[B+4>>2]=0;if(!((j|0)==3082|(a[i+81>>0]|0)!=0)){i=c[i+68>>2]&j;if(!i)break;else break a}else{og(i);i=7;break a}}while(0);j=e+28|0;if((c[j>>2]|0)>0?(n=c[w>>2]|0,o=n+24|0,m=c[o>>2]|0,(d[m+2>>0]<<8|d[m+3>>0]|0)==1):0){c[t>>2]=0;y=cw(d[m+4>>0]|0,0,56)|0;h=L()|0;s=cw(d[m+5>>0]|0,0,48)|0;h=L()|0|h;z=cw(d[m+6>>0]|0,0,40)|0;h=h|(L()|0);h=h|d[m+7>>0];A=cw(d[m+8>>0]|0,0,24)|0;h=h|(L()|0);B=cw(d[m+9>>0]|0,0,16)|0;h=h|(L()|0);i=cw(d[m+10>>0]|0,0,8)|0;h=h|(L()|0);h=Sv(s|y|z|A|B|i|0,h|0,d[m+11>>0]|0,0)|0;h=Xs(e,h,L()|0,n,t)|0;i=c[t>>2]|0;if(!h)h=dt(e,i,(c[j>>2]|0)+-1|0)|0;i=Us(e,i)|0;i=(h|0)==0?i:h;if(!i){A=(c[j>>2]|0)+-1|0;c[j>>2]=A;B=c[o>>2]|0;a[B>>0]=A>>>8;a[B+1>>0]=A;c[n+20>>2]=1}}else i=0}}while(0);q=e+68|0;j=c[q>>2]|0;c[v>>2]=j;h=(i|0)==0;if(!j){B=i;z=h;A=c[w>>2]|0;A=Us(e,A)|0;B=z?A:B;Ra=x;return B|0}r=e+60|0;p=e+23|0;s=e+21|0;do{o=j;n=j;d:do if(h){f=n+24|0;h=c[f>>2]|0;g=d[h+2>>0]<<8|d[h+3>>0];if(!g)i=0;else{m=n+8|0;l=0;while(1){B=G(l,d[p>>0]|0)|0;A=h+(B+4)|0;D=cw(d[A>>0]|0,0,56)|0;i=L()|0;E=cw(d[A+1>>0]|0,0,48)|0;i=L()|0|i;C=cw(d[A+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[A+3>>0];y=cw(d[A+4>>0]|0,0,24)|0;i=i|(L()|0);z=cw(d[A+5>>0]|0,0,16)|0;i=i|(L()|0);k=cw(d[A+6>>0]|0,0,8)|0;i=i|(L()|0);A=Sv(E|D|C|y|z|k|0,i|0,d[A+7>>0]|0,0)|0;i=L()|0;k=u;c[k>>2]=A;c[k+4>>2]=i;k=d[s>>0]|0;i=0;h=h+(B+12)|0;while(1){c[u+8+(i<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[u+8+((i|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];i=i+2|0;if(i>>>0>=k>>>0)break;else h=h+8|0}i=at(e,u,c[m>>2]|0,t)|0;if(!i){E=c[t>>2]|0;i=bt(e,E,u,c[m>>2]|0)|0;E=Us(e,E)|0;i=(i|0)==0?E:i}h=l+1|0;if(!(h>>>0<g>>>0&(i|0)==0))break d;l=h;h=c[f>>2]|0}}}while(0);h=c[n+28>>2]|0;c[q>>2]=h;c[r>>2]=(c[r>>2]|0)+-1;if(!j)j=h;else{if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{E=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}j=c[q>>2]|0}c[v>>2]=j;h=(i|0)==0}while((j|0)!=0);E=c[w>>2]|0;E=Us(e,E)|0;E=h?E:i;Ra=x;return E|0}function at(b,e,g,h){b=b|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;Ba=Ra;Ra=Ra+112|0;wa=Ba+48|0;za=Ba+96|0;xa=Ba;c[za>>2]=0;i=Xs(b,1,0,0,za)|0;ya=b+28|0;if(i|0){Aa=i;za=c[za>>2]|0;c[h>>2]=za;Ra=Ba;return Aa|0}D=b+23|0;H=b+21|0;E=b+20|0;F=b+22|0;I=wa+12|0;J=wa+8|0;K=wa+44|0;M=wa+40|0;N=wa+36|0;O=wa+32|0;P=wa+28|0;Q=wa+24|0;R=wa+20|0;S=wa+16|0;T=wa+12|0;U=wa+8|0;V=wa+44|0;W=wa+40|0;X=wa+36|0;Y=wa+32|0;Z=wa+28|0;_=wa+24|0;$=wa+20|0;aa=wa+16|0;ba=xa+12|0;ca=xa+8|0;da=xa+44|0;ea=xa+40|0;fa=xa+36|0;ga=xa+32|0;ha=xa+28|0;ia=xa+24|0;ja=xa+20|0;ka=xa+16|0;la=xa+12|0;ma=xa+8|0;na=xa+44|0;oa=xa+40|0;pa=xa+36|0;qa=xa+32|0;ra=xa+28|0;sa=xa+24|0;ta=xa+20|0;ua=xa+16|0;C=0;while(1){if((C|0)>=((c[ya>>2]|0)-g|0)){i=0;Aa=56;break}va=c[za>>2]|0;x=va+24|0;i=c[x>>2]|0;y=d[i+2>>0]<<8|d[i+3>>0];a:do if(!y){j=0;i=0}else{B=a[H>>0]|0;z=d[D>>0]|0;A=B&255;B=B&255;k=0;p=0.0;w=0.0;l=i;u=0;v=0;while(1){t=G(k,z)|0;j=l+(t+4)|0;Ea=cw(d[j>>0]|0,0,56)|0;i=L()|0;Fa=cw(d[j+1>>0]|0,0,48)|0;i=L()|0|i;Da=cw(d[j+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[j+3>>0];Ca=cw(d[j+4>>0]|0,0,24)|0;i=i|(L()|0);o=cw(d[j+5>>0]|0,0,16)|0;i=i|(L()|0);m=cw(d[j+6>>0]|0,0,8)|0;i=i|(L()|0);j=Sv(Fa|Ea|Da|Ca|o|m|0,i|0,d[j+7>>0]|0,0)|0;i=L()|0;m=xa;c[m>>2]=j;c[m+4>>2]=i;m=0;l=l+(t+12)|0;while(1){c[xa+8+(m<<2)>>2]=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];c[xa+8+((m|1)<<2)>>2]=d[l+5>>0]<<16|d[l+4>>0]<<24|d[l+6>>0]<<8|d[l+7>>0];m=m+2|0;if(m>>>0>=A>>>0)break;else l=l+8|0}l=wa;m=xa;o=l+48|0;do{c[l>>2]=c[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(o|0));t=a[E>>0]|0;o=(a[F>>0]|0)==0;if(o){switch(t<<24>>24){case 5:{n=+f[K>>2]-+f[M>>2];Aa=11;break}case 4:{n=1.0;Aa=11;break}case 3:{n=1.0;Aa=12;break}case 2:{n=1.0;Aa=13;break}default:q=1.0}if((Aa|0)==11){n=n*(+f[N>>2]-+f[O>>2]);Aa=12}if((Aa|0)==12){n=n*(+f[P>>2]-+f[Q>>2]);Aa=13}if((Aa|0)==13){Aa=0;q=n*(+f[R>>2]-+f[S>>2])}n=+f[J>>2];r=+f[I>>2]-n;m=0;while(1){s=+f[e+8+(m<<2)>>2];f[wa+8+(m<<2)>>2]=n<s?n:s;Fa=m|1;l=wa+8+(Fa<<2)|0;n=+f[l>>2];s=+f[e+8+(Fa<<2)>>2];f[l>>2]=n>s?n:s;l=m+2|0;if(l>>>0>=B>>>0)break;m=l;n=+f[wa+8+(l<<2)>>2]}s=q*r}else{switch(t<<24>>24){case 5:{Fa=c[V>>2]|0;Aa=c[W>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=16;break}case 4:{n=1.0;Aa=16;break}case 3:{n=1.0;Aa=17;break}case 2:{n=1.0;Aa=18;break}default:n=1.0}if((Aa|0)==16){Ea=c[X>>2]|0;Fa=c[Y>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=17}if((Aa|0)==17){Ea=c[Z>>2]|0;Fa=c[_>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=18}if((Aa|0)==18){Aa=0;Ea=c[$>>2]|0;Fa=c[aa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}m=c[T>>2]|0;l=c[U>>2]|0;m=Tv(m|0,((m|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;q=+(m>>>0)+4294967296.0*+(L()|0);m=0;while(1){Fa=c[e+8+(m<<2)>>2]|0;c[wa+8+(m<<2)>>2]=(l|0)<(Fa|0)?l:Fa;Fa=m|1;l=wa+8+(Fa<<2)|0;Ea=c[l>>2]|0;Fa=c[e+8+(Fa<<2)>>2]|0;c[l>>2]=(Ea|0)>(Fa|0)?Ea:Fa;l=m+2|0;if(l>>>0>=B>>>0)break;m=l;l=c[wa+8+(l<<2)>>2]|0}s=n*q}if(o){switch(t<<24>>24){case 5:{n=+f[K>>2]-+f[M>>2];Aa=30;break}case 4:{n=1.0;Aa=30;break}case 3:{n=1.0;Aa=31;break}case 2:{n=1.0;Aa=32;break}default:n=1.0}if((Aa|0)==30){n=n*(+f[N>>2]-+f[O>>2]);Aa=31}if((Aa|0)==31){n=n*(+f[P>>2]-+f[Q>>2]);Aa=32}if((Aa|0)==32){Aa=0;n=n*(+f[R>>2]-+f[S>>2])}r=n*(+f[I>>2]-+f[J>>2]);switch(t<<24>>24){case 5:{n=+f[da>>2]-+f[ea>>2];Aa=40;break}case 4:{n=1.0;Aa=40;break}case 3:{n=1.0;Aa=41;break}case 2:{n=1.0;Aa=42;break}default:n=1.0}if((Aa|0)==40){n=n*(+f[fa>>2]-+f[ga>>2]);Aa=41}if((Aa|0)==41){n=n*(+f[ha>>2]-+f[ia>>2]);Aa=42}if((Aa|0)==42){Aa=0;n=n*(+f[ja>>2]-+f[ka>>2])}q=n*(+f[ba>>2]-+f[ca>>2]);n=r}else{switch(t<<24>>24){case 5:{Fa=c[V>>2]|0;Aa=c[W>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=35;break}case 4:{n=1.0;Aa=35;break}case 3:{n=1.0;Aa=36;break}case 2:{n=1.0;Aa=37;break}default:n=1.0}if((Aa|0)==35){Ea=c[X>>2]|0;Fa=c[Y>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=36}if((Aa|0)==36){Ea=c[Z>>2]|0;Fa=c[_>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=37}if((Aa|0)==37){Aa=0;Ea=c[$>>2]|0;Fa=c[aa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}Ea=c[T>>2]|0;Fa=c[U>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;r=n*(+(Fa>>>0)+4294967296.0*+(L()|0));switch(t<<24>>24){case 5:{Fa=c[na>>2]|0;Aa=c[oa>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=46;break}case 4:{n=1.0;Aa=46;break}case 3:{n=1.0;Aa=47;break}case 2:{n=1.0;Aa=48;break}default:n=1.0}if((Aa|0)==46){Ea=c[pa>>2]|0;Fa=c[qa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=47}if((Aa|0)==47){Ea=c[ra>>2]|0;Fa=c[sa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=48}if((Aa|0)==48){Aa=0;Ea=c[ta>>2]|0;Fa=c[ua>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}Ea=c[la>>2]|0;Fa=c[ma>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;q=n*(+(Fa>>>0)+4294967296.0*+(L()|0));n=r}n=n-s;if(!((k|0)==0|n<w)?!(n==w&q<p):0){n=w;j=u;i=v}else p=q;k=k+1|0;if((k|0)==(y|0))break a;w=n;l=c[x>>2]|0;u=j;v=i}}while(0);i=Xs(b,j,i,va,za)|0;Us(b,va)|0;if(!i)C=C+1|0;else{Aa=56;break}}if((Aa|0)==56){Fa=c[za>>2]|0;c[h>>2]=Fa;Ra=Ba;return i|0}return 0}function bt(b,e,h,i){b=b|0;e=e|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0.0,H=0,I=0,J=0.0,K=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0.0;Sa=Ra;Ra=Ra+192|0;Ea=Sa;Ia=Sa+144|0;Fa=Sa+96|0;Ga=Sa+48|0;Ma=(i|0)>0;a:do if(Ma?(l=h,k=c[l>>2]|0,l=c[l+4>>2]|0,j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0,j|0):0){while(1){Qa=j+8|0;if((c[Qa>>2]|0)==(k|0)?(c[Qa+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break a}Us(b,c[j>>2]|0)|0;if(e|0){Qa=e+16|0;c[Qa>>2]=(c[Qa>>2]|0)+1}c[j>>2]=e}while(0);La=b+16|0;Qa=b+23|0;j=d[Qa>>0]|0;m=((c[La>>2]|0)+-4|0)/(j|0)|0;E=e+24|0;k=c[E>>2]|0;n=d[k+2>>0]<<8|d[k+3>>0];if((n|0)<(m|0)){j=k+((G(n,j)|0)+4)|0;Oa=h;l=c[Oa>>2]|0;Oa=c[Oa+4>>2]|0;Na=bw(l|0,Oa|0,56)|0;L()|0;a[j>>0]=Na;Na=bw(l|0,Oa|0,48)|0;L()|0;a[j+1>>0]=Na;Na=bw(l|0,Oa|0,40)|0;L()|0;a[j+2>>0]=Na;a[j+3>>0]=Oa;Na=bw(l|0,Oa|0,24)|0;L()|0;a[j+4>>0]=Na;Na=bw(l|0,Oa|0,16)|0;L()|0;a[j+5>>0]=Na;Oa=bw(l|0,Oa|0,8)|0;L()|0;a[j+6>>0]=Oa;a[j+7>>0]=l;l=b+21|0;if(a[l>>0]|0){k=0;j=j+8|0;while(1){Oa=c[h+8+(k<<2)>>2]|0;a[j>>0]=Oa>>>24;a[j+1>>0]=Oa>>>16;a[j+2>>0]=Oa>>>8;a[j+3>>0]=Oa;k=k+1|0;if(k>>>0>=(d[l>>0]|0)>>>0)break;else j=j+4|0}}Oa=c[E>>2]|0;Na=n+1|0;a[Oa+2>>0]=Na>>>8;a[Oa+3>>0]=Na;c[e+20>>2]=1}if((n|0)!=(m|0)){j=ft(b,e,h)|0;if(j|0){b=j;Ra=Sa;return b|0}m=h;l=c[m>>2]|0;m=c[m+4>>2]|0;k=e+8|0;j=c[k>>2]|0;k=c[k+4>>2]|0;if(!i){b=gt(b,l,m,j,k)|0;Ra=Sa;return b|0}else{b=ht(b,l,m,j,k)|0;Ra=Sa;return b|0}}j=b+72|0;if((c[j>>2]|0)<(i|0)?(D=e+8|0,Oa=D,!((c[Oa>>2]|0)==1&(c[Oa+4>>2]|0)==0)):0){c[j>>2]=i;m=Ea;I=m+40|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(I|0));z=c[E>>2]|0;z=d[z+2>>0]<<8|d[z+3>>0];w=z+1|0;u=z+2|0;j=u&131070;B=pb(j<<6,0)|0;do if(B){A=B+(j*48|0)|0;x=A+(j<<2)|0;v=x+(j<<2)|0;o=b+20|0;y=b+21|0;t=b+22|0;n=0;do{j=B+(n*48|0)|0;if((n|0)==(z|0)){m=j;H=h;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0))}else{Pa=c[E>>2]|0;k=G(n,d[Qa>>0]|0)|0;Na=Pa+(k+4)|0;Ga=cw(d[Na>>0]|0,0,56)|0;Oa=L()|0;Fa=cw(d[Na+1>>0]|0,0,48)|0;Oa=L()|0|Oa;Ha=cw(d[Na+2>>0]|0,0,40)|0;Oa=Oa|(L()|0);Oa=Oa|d[Na+3>>0];Ja=cw(d[Na+4>>0]|0,0,24)|0;Oa=Oa|(L()|0);Ka=cw(d[Na+5>>0]|0,0,16)|0;Oa=Oa|(L()|0);Ma=cw(d[Na+6>>0]|0,0,8)|0;Oa=Oa|(L()|0);Na=Sv(Fa|Ga|Ha|Ja|Ka|Ma|0,Oa|0,d[Na+7>>0]|0,0)|0;Oa=L()|0;c[j>>2]=Na;c[j+4>>2]=Oa;j=0;k=Pa+(k+12)|0;while(1){c[B+(n*48|0)+8+(j<<2)>>2]=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];c[B+(n*48|0)+8+((j|1)<<2)>>2]=d[k+5>>0]<<16|d[k+4>>0]<<24|d[k+6>>0]<<8|d[k+7>>0];j=j+2|0;if(j>>>0>=(d[y>>0]|0)>>>0)break;else k=k+8|0}}c[A+(n<<2)>>2]=n;m=a[o>>0]|0;l=m<<24>>24==0;if(!l){k=m&255;if(!(a[t>>0]|0)){j=0;do{Oa=j<<1;Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]+ +f[B+(n*48|0)+8+(Oa<<2)>>2]+ +f[B+(n*48|0)+8+((Oa|1)<<2)>>2];j=j+1|0}while(j>>>0<k>>>0)}else{j=0;do{Oa=j<<1;Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]+ +(c[B+(n*48|0)+8+(Oa<<2)>>2]|0)+ +(c[B+(n*48|0)+8+((Oa|1)<<2)>>2]|0);j=j+1|0}while(j>>>0<k>>>0)}}n=n+1|0}while((n|0)!=(w|0));q=m&255;if(!l){p=+(w|0)*2.0;j=0;do{Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]/p;j=j+1|0}while(j>>>0<q>>>0);if(m<<24>>24){n=(a[t>>0]|0)==0;l=0;do{o=v+(l<<3)|0;g[o>>3]=0.0;m=0;s=0.0;do{k=m<<1;j=B+(l*48|0)+8+((k|1)<<2)|0;if(n){r=+f[j>>2];p=+f[B+(l*48|0)+8+(k<<2)>>2]}else{r=+(c[j>>2]|0);p=+(c[B+(l*48|0)+8+(k<<2)>>2]|0)}K=r-p-+g[Ea+(m<<3)>>3];s=s+K*K;g[o>>3]=s;m=m+1|0}while((m|0)!=(q|0));l=l+1|0}while((l|0)!=(w|0))}else Ba=210}else Ba=210;if((Ba|0)==210)gw(B+((u>>>1)*112|0)|0,0,(z<<3)+8|0)|0;jt(A,w,v,x);gw((c[E>>2]|0)+2|0,0,(c[La>>2]|0)+-2|0)|0;t=e+20|0;c[t>>2]=1;u=(i|0)==0;l=0;while(1){k=d[Qa>>0]|0;m=((c[La>>2]|0)+-4|0)/(k|0)|0;if((l|0)>=(z+((m|0)/-3|0)|0)){Ba=224;break}o=c[A+(l<<2)>>2]|0;j=B+(o*48|0)|0;n=c[E>>2]|0;q=d[n+2>>0]<<8|d[n+3>>0];if((q|0)<(m|0)){k=n+((G(q,k)|0)+4)|0;Oa=j;Pa=c[Oa>>2]|0;Oa=c[Oa+4>>2]|0;Na=bw(Pa|0,Oa|0,56)|0;L()|0;a[k>>0]=Na;Na=bw(Pa|0,Oa|0,48)|0;L()|0;a[k+1>>0]=Na;Na=bw(Pa|0,Oa|0,40)|0;L()|0;a[k+2>>0]=Na;a[k+3>>0]=Oa;Na=bw(Pa|0,Oa|0,24)|0;L()|0;a[k+4>>0]=Na;Na=bw(Pa|0,Oa|0,16)|0;L()|0;a[k+5>>0]=Na;Oa=bw(Pa|0,Oa|0,8)|0;L()|0;a[k+6>>0]=Oa;a[k+7>>0]=Pa;if(a[y>>0]|0){m=0;k=k+8|0;while(1){Pa=c[B+(o*48|0)+8+(m<<2)>>2]|0;a[k>>0]=Pa>>>24;a[k+1>>0]=Pa>>>16;a[k+2>>0]=Pa>>>8;a[k+3>>0]=Pa;m=m+1|0;if(m>>>0>=(d[y>>0]|0)>>>0)break;else k=k+4|0}}Pa=c[E>>2]|0;Oa=q+1|0;a[Pa+2>>0]=Oa>>>8;a[Pa+3>>0]=Oa;c[t>>2]=1}k=j;j=c[k>>2]|0;k=c[k+4>>2]|0;Pa=h;do if((j|0)==(c[Pa>>2]|0)?(k|0)==(c[Pa+4>>2]|0):0){n=D;m=c[n>>2]|0;n=c[n+4>>2]|0;if(u){j=gt(b,j,k,m,n)|0;break}else{j=ht(b,j,k,m,n)|0;break}}else j=0;while(0);if(!j)l=l+1|0;else break}b:do if((Ba|0)==224){j=et(b,e)|0;if(!((j|0)!=0|l>>>0>z>>>0))while(1){k=B+((c[A+(l<<2)>>2]|0)*48|0)|0;j=at(b,k,i,Ia)|0;if(j|0)break;Qa=c[Ia>>2]|0;j=bt(b,Qa,k,i)|0;Qa=Us(b,Qa)|0;j=(j|0)==0?Qa:j;if((j|0)!=0|l>>>0>=z>>>0)break b;else l=l+1|0}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{b=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}else j=7;while(0);b=j;Ra=Sa;return b|0}Aa=c[E>>2]|0;Aa=d[Aa+2>>0]<<8|d[Aa+3>>0];Ca=Aa+1|0;Na=pb(Ca*52|0,0)|0;Oa=(Na|0)==0;c:do if(!Oa){n=Ca<<2;gw(Na+(Ca*48|0)|0,0,n|0)|0;o=(Aa|0)==0;if(!o){m=b+21|0;k=0;do{Ja=c[E>>2]|0;l=G(k,d[Qa>>0]|0)|0;Ba=Ja+(l+4)|0;wa=cw(d[Ba>>0]|0,0,56)|0;Ha=L()|0;va=cw(d[Ba+1>>0]|0,0,48)|0;Ha=L()|0|Ha;xa=cw(d[Ba+2>>0]|0,0,40)|0;Ha=Ha|(L()|0);Ha=Ha|d[Ba+3>>0];ya=cw(d[Ba+4>>0]|0,0,24)|0;Ha=Ha|(L()|0);za=cw(d[Ba+5>>0]|0,0,16)|0;Ha=Ha|(L()|0);j=cw(d[Ba+6>>0]|0,0,8)|0;Ha=Ha|(L()|0);Ba=Sv(va|wa|xa|ya|za|j|0,Ha|0,d[Ba+7>>0]|0,0)|0;Ha=L()|0;j=Na+(k*48|0)|0;c[j>>2]=Ba;c[j+4>>2]=Ha;j=0;l=Ja+(l+12)|0;while(1){c[Na+(k*48|0)+8+(j<<2)>>2]=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];c[Na+(k*48|0)+8+((j|1)<<2)>>2]=d[l+5>>0]<<16|d[l+4>>0]<<24|d[l+6>>0]<<8|d[l+7>>0];j=j+2|0;if(j>>>0>=(d[m>>0]|0)>>>0)break;else l=l+8|0}k=k+1|0}while((k|0)!=(Aa|0))}gw((c[E>>2]|0)+2|0,0,(c[La>>2]|0)+-2|0)|0;l=e+20|0;c[l>>2]=1;m=Na+(Aa*48|0)|0;H=h;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));Ha=e+8|0;Ja=Ha;if((c[Ja>>2]|0)==1&(c[Ja+4>>2]|0)==0){j=pb((c[La>>2]|0)+32|0,0)|0;if(j|0){gw(j|0,0,(c[La>>2]|0)+32|0)|0;c[j+24>>2]=j+32;c[j+16>>2]=1;Ja=b+60|0;c[Ja>>2]=(c[Ja>>2]|0)+1;c[j>>2]=e;c[j+20>>2]=1;Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}k=pb((c[La>>2]|0)+32|0,0)|0;if(k|0){gw(k|0,0,(c[La>>2]|0)+32|0)|0;c[k+24>>2]=k+32;c[k+16>>2]=1;Ja=b+60|0;c[Ja>>2]=(c[Ja>>2]|0)+1;c[k>>2]=e;c[k+20>>2]=1;Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}Ja=b+28|0;e=(c[Ja>>2]|0)+1|0;c[Ja>>2]=e;c[l>>2]=1;Ja=c[E>>2]|0;a[Ja>>0]=e>>>8;a[Ja+1>>0]=e;Ja=j;e=k}else{j=c[e>>2]|0;k=pb((c[La>>2]|0)+32|0,0)|0;if(k|0?(gw(k|0,0,(c[La>>2]|0)+32|0)|0,c[k+24>>2]=k+32,c[k+16>>2]=1,Ja=b+60|0,c[Ja>>2]=(c[Ja>>2]|0)+1,c[k>>2]=j,c[k+20>>2]=1,j|0):0){Ja=j+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1;Ja=k}if((e|0)!=0&(Ja|0)!=0?(Pa=e+24|0,gw(c[Pa>>2]|0,0,c[La>>2]|0)|0,Ka=Ja+24|0,gw(c[Ka>>2]|0,0,c[La>>2]|0)|0,t=b+20|0,q=G((d[t>>0]|0)+1|0,n+4|0)|0,Da=pb(q,0)|0,(Da|0)!=0):0){m=d[t>>0]|0;m=Da+(m<<2)+((G(Ca,m)|0)<<2)|0;gw(Da|0,0,q|0)|0;j=a[t>>0]|0;if(j<<24>>24){j=j&255;if(o){l=0;do{k=Da+(j<<2)+((G(l,Ca)|0)<<2)|0;c[Da+(l<<2)>>2]=k;c[k>>2]=0;it(b,k,Ca,l,Na,m);l=l+1|0;k=a[t>>0]|0;j=k&255}while(l>>>0<j>>>0);za=j}else{l=0;do{k=Da+(j<<2)+((G(l,Ca)|0)<<2)|0;c[Da+(l<<2)>>2]=k;c[k>>2]=0;j=1;do{c[k+(j<<2)>>2]=j;j=j+1|0}while((j|0)!=(Ca|0));it(b,k,Ca,l,Na,m);l=l+1|0;k=a[t>>0]|0;j=k&255}while(l>>>0<j>>>0);za=j}if(k<<24>>24){z=Aa>>>0>1;A=b+21|0;B=b+22|0;D=Ea+12|0;E=Ea+8|0;M=Ea+44|0;N=Ea+40|0;O=Ea+36|0;P=Ea+32|0;Q=Ea+28|0;R=Ea+24|0;S=Ea+20|0;T=Ea+16|0;U=Ea+12|0;V=Ea+8|0;W=Ea+44|0;X=Ea+40|0;Y=Ea+36|0;Z=Ea+32|0;_=Ea+28|0;$=Ea+24|0;aa=Ea+20|0;ba=Ea+16|0;ca=Ia+12|0;da=Ia+8|0;ea=Ia+44|0;fa=Ia+40|0;ga=Ia+36|0;ha=Ia+32|0;ia=Ia+28|0;ja=Ia+24|0;ka=Ia+20|0;la=Ia+16|0;ma=Ia+12|0;na=Ia+8|0;oa=Ia+44|0;pa=Ia+40|0;qa=Ia+36|0;ra=Ia+32|0;sa=Ia+28|0;ta=Ia+24|0;ua=Ia+20|0;va=Ia+16|0;wa=(((c[La>>2]|0)+-4|0)/(d[Qa>>0]|0)|0|0)/3|0;xa=Ca-wa|0;ya=(wa|0)>(xa|0);j=0;w=0;K=0.0;y=0;while(1){if(ya){l=0;p=0.0}else{x=Da+(y<<2)|0;v=wa;l=0;J=0.0;r=0.0;p=0.0;while(1){m=Ea;H=Na+((c[c[x>>2]>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));m=Ia;H=Na+((c[(c[x>>2]|0)+(Aa<<2)>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));if(z){o=a[B>>0]|0;u=a[A>>0]|0;t=u&255;if(!(o<<24>>24)){n=1;do{o=c[(c[x>>2]|0)+(n<<2)>>2]|0;if((n|0)<(v|0)){m=0;do{I=Ea+8+(m<<2)|0;F=+f[I>>2];C=+f[Na+(o*48|0)+8+(m<<2)>>2];f[I>>2]=F<C?F:C;I=m|1;Ba=Ea+8+(I<<2)|0;C=+f[Ba>>2];F=+f[Na+(o*48|0)+8+(I<<2)>>2];f[Ba>>2]=C>F?C:F;m=m+2|0}while(m>>>0<t>>>0)}else{m=0;do{I=Ia+8+(m<<2)|0;F=+f[I>>2];C=+f[Na+(o*48|0)+8+(m<<2)>>2];f[I>>2]=F<C?F:C;I=m|1;Ba=Ia+8+(I<<2)|0;C=+f[Ba>>2];F=+f[Na+(o*48|0)+8+(I<<2)>>2];f[Ba>>2]=C>F?C:F;m=m+2|0}while(m>>>0<t>>>0)}n=n+1|0}while((n|0)!=(Aa|0));n=t;o=u;Ba=66}else{n=1;do{q=c[(c[x>>2]|0)+(n<<2)>>2]|0;if((n|0)<(v|0)){m=0;do{I=Ea+8+(m<<2)|0;H=c[I>>2]|0;Ba=c[Na+(q*48|0)+8+(m<<2)>>2]|0;c[I>>2]=(H|0)<(Ba|0)?H:Ba;I=m|1;Ba=Ea+8+(I<<2)|0;H=c[Ba>>2]|0;I=c[Na+(q*48|0)+8+(I<<2)>>2]|0;c[Ba>>2]=(H|0)>(I|0)?H:I;m=m+2|0}while(m>>>0<t>>>0)}else{m=0;do{I=Ia+8+(m<<2)|0;H=c[I>>2]|0;Ba=c[Na+(q*48|0)+8+(m<<2)>>2]|0;c[I>>2]=(H|0)<(Ba|0)?H:Ba;I=m|1;Ba=Ia+8+(I<<2)|0;H=c[Ba>>2]|0;I=c[Na+(q*48|0)+8+(I<<2)>>2]|0;c[Ba>>2]=(H|0)>(I|0)?H:I;m=m+2|0}while(m>>>0<t>>>0)}n=n+1|0}while((n|0)!=(Aa|0));m=o;n=t;o=u;Ba=64}}else{o=a[A>>0]|0;m=a[B>>0]|0;n=o&255;Ba=64}do if((Ba|0)==64){Ba=0;q=m<<24>>24==0;if(q){Ba=66;break}m=n;s=0.0;do{I=m;m=m+-2|0;s=s+(+(c[Ea+8+(I+-1<<2)>>2]|0)-+(c[Ea+8+(m<<2)>>2]|0))}while((I|0)>3)}while(0);if((Ba|0)==66){Ba=0;m=n;s=0.0;do{I=m;m=m+-2|0;s=s+(+f[Ea+8+(I+-1<<2)>>2]-+f[Ea+8+(m<<2)>>2])}while((I|0)>3);q=1}s=p+s;if(q){m=n;p=0.0;do{I=m;m=m+-2|0;p=p+(+f[Ia+8+(I+-1<<2)>>2]-+f[Ia+8+(m<<2)>>2])}while((I|0)>3)}else{m=n;p=0.0;do{I=m;m=m+-2|0;p=p+(+(c[Ia+8+(I+-1<<2)>>2]|0)-+(c[Ia+8+(m<<2)>>2]|0))}while((I|0)>3)}p=s+p;d:do if(o<<24>>24)if(q){s=1.0;m=0;do{Ta=+f[Ea+8+(m<<2)>>2];F=+f[Ia+8+(m<<2)>>2];F=Ta>F?Ta:F;I=m|1;Ta=+f[Ea+8+(I<<2)>>2];C=+f[Ia+8+(I<<2)>>2];C=Ta<C?Ta:C;s=s*(C-F);m=m+2|0;if(C<F){s=0.0;break d}}while(m>>>0<n>>>0)}else{s=1.0;m=0;do{H=Ea+8+(m<<2)|0;I=Ia+8+(m<<2)|0;Ta=+(c[((c[H>>2]|0)>(c[I>>2]|0)?H:I)>>2]|0);I=m|1;C=+(c[Ea+8+(I<<2)>>2]|0);F=+(c[Ia+8+(I<<2)>>2]|0);F=C<F?C:F;s=s*(F-Ta);m=m+2|0;if(F<Ta){s=0.0;break d}}while(m>>>0<n>>>0)}else s=1.0;while(0);F=s+0.0;if(q){switch(k<<24>>24){case 5:{s=+f[M>>2]-+f[N>>2];Ba=85;break}case 4:{s=1.0;Ba=85;break}case 3:{s=1.0;Ba=86;break}case 2:{s=1.0;Ba=87;break}default:s=1.0}if((Ba|0)==85){s=s*(+f[O>>2]-+f[P>>2]);Ba=86}if((Ba|0)==86){s=s*(+f[Q>>2]-+f[R>>2]);Ba=87}if((Ba|0)==87){Ba=0;s=s*(+f[S>>2]-+f[T>>2])}s=s*(+f[D>>2]-+f[E>>2]);switch(k<<24>>24){case 5:{C=+f[ea>>2]-+f[fa>>2];Ba=95;break}case 4:{C=1.0;Ba=95;break}case 3:{C=1.0;Ba=96;break}case 2:{C=1.0;Ba=97;break}default:C=1.0}if((Ba|0)==95){C=C*(+f[ga>>2]-+f[ha>>2]);Ba=96}if((Ba|0)==96){C=C*(+f[ia>>2]-+f[ja>>2]);Ba=97}if((Ba|0)==97)C=C*(+f[ka>>2]-+f[la>>2]);C=C*(+f[ca>>2]-+f[da>>2])}else{switch(k<<24>>24){case 5:{I=c[W>>2]|0;Ba=c[X>>2]|0;s=+((Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Ba=90;break}case 4:{s=1.0;Ba=90;break}case 3:{s=1.0;Ba=91;break}case 2:{s=1.0;Ba=92;break}default:s=1.0}if((Ba|0)==90){H=c[Y>>2]|0;I=c[Z>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));Ba=91}if((Ba|0)==91){H=c[_>>2]|0;I=c[$>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));Ba=92}if((Ba|0)==92){Ba=0;H=c[aa>>2]|0;I=c[ba>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0))}H=c[U>>2]|0;I=c[V>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));switch(k<<24>>24){case 5:{I=c[oa>>2]|0;Ba=c[pa>>2]|0;C=+((Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Ba=101;break}case 4:{C=1.0;Ba=101;break}case 3:{C=1.0;Ba=102;break}case 2:{C=1.0;Ba=103;break}default:C=1.0}if((Ba|0)==101){H=c[qa>>2]|0;I=c[ra>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;C=C*(+(I>>>0)+4294967296.0*+(L()|0));Ba=102}if((Ba|0)==102){H=c[sa>>2]|0;I=c[ta>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;C=C*(+(I>>>0)+4294967296.0*+(L()|0));Ba=103}if((Ba|0)==103){I=c[ua>>2]|0;Ba=c[va>>2]|0;Ba=Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;C=C*(+(Ba>>>0)+4294967296.0*+(L()|0))}I=c[ma>>2]|0;Ba=c[na>>2]|0;Ba=Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;C=C*(+(Ba>>>0)+4294967296.0*+(L()|0))}s=s+C;if(!((v|0)==(wa|0)|F<r)?!(F==r&s<J):0)s=J;else{l=v;r=F}if((v|0)<(xa|0)){v=v+1|0;J=s}else break}}m=(y|0)==0|p<K;w=m?l:w;j=m?y:j;y=y+1|0;if((y|0)==(za|0))break;else K=m?p:K}}else{j=0;w=0}}else{j=0;w=0}v=Da+(j<<2)|0;j=c[v>>2]|0;k=c[j>>2]|0;m=Fa;H=Na+(k*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));m=Ga;H=Na+((c[j+(w<<2)>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));x=b+21|0;u=b+22|0;t=0;while(1){q=(t|0)<(w|0);m=q?e:Ja;q=q?Fa:Ga;j=d[Qa>>0]|0;n=m+24|0;l=c[n>>2]|0;o=d[l+2>>0]<<8|d[l+3>>0];if((o|0)<(((c[La>>2]|0)+-4|0)/(j|0)|0|0)){j=l+((G(o,j)|0)+4)|0;Ea=Na+(k*48|0)|0;Ia=c[Ea>>2]|0;Ea=c[Ea+4>>2]|0;Ba=bw(Ia|0,Ea|0,56)|0;L()|0;a[j>>0]=Ba;Ba=bw(Ia|0,Ea|0,48)|0;L()|0;a[j+1>>0]=Ba;Ba=bw(Ia|0,Ea|0,40)|0;L()|0;a[j+2>>0]=Ba;a[j+3>>0]=Ea;Ba=bw(Ia|0,Ea|0,24)|0;L()|0;a[j+4>>0]=Ba;Ba=bw(Ia|0,Ea|0,16)|0;L()|0;a[j+5>>0]=Ba;Ea=bw(Ia|0,Ea|0,8)|0;L()|0;a[j+6>>0]=Ea;a[j+7>>0]=Ia;if(a[x>>0]|0){l=0;j=j+8|0;while(1){Ia=c[Na+(k*48|0)+8+(l<<2)>>2]|0;a[j>>0]=Ia>>>24;a[j+1>>0]=Ia>>>16;a[j+2>>0]=Ia>>>8;a[j+3>>0]=Ia;l=l+1|0;if(l>>>0>=(d[x>>0]|0)>>>0)break;else j=j+4|0}}Ia=c[n>>2]|0;Ea=o+1|0;a[Ia+2>>0]=Ea>>>8;a[Ia+3>>0]=Ea;c[m+20>>2]=1}l=d[x>>0]|0;if(!(a[u>>0]|0)){j=0;do{Ea=q+8+(j<<2)|0;Ta=+f[Ea>>2];K=+f[Na+(k*48|0)+8+(j<<2)>>2];f[Ea>>2]=Ta<K?Ta:K;Ea=j|1;Ia=q+8+(Ea<<2)|0;K=+f[Ia>>2];Ta=+f[Na+(k*48|0)+8+(Ea<<2)>>2];f[Ia>>2]=K>Ta?K:Ta;j=j+2|0}while(j>>>0<l>>>0)}else{j=0;do{Ea=q+8+(j<<2)|0;Ba=c[Ea>>2]|0;Ia=c[Na+(k*48|0)+8+(j<<2)>>2]|0;c[Ea>>2]=(Ba|0)<(Ia|0)?Ba:Ia;Ea=j|1;Ia=q+8+(Ea<<2)|0;Ba=c[Ia>>2]|0;Ea=c[Na+(k*48|0)+8+(Ea<<2)>>2]|0;c[Ia>>2]=(Ba|0)>(Ea|0)?Ba:Ea;j=j+2|0}while(j>>>0<l>>>0)}j=t+1|0;if((j|0)==(Ca|0))break;t=j;k=c[(c[v>>2]|0)+(j<<2)>>2]|0}if(!(c[7324]|0))ab[c[29344>>2]&127](Da);else{La=Wa[c[29352>>2]&127](Da)|0;c[14978]=(c[14978]|0)-La;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Da)}j=Vs(b,Ja)|0;if(!j){u=e+8|0;k=u;j=c[k>>2]|0;k=c[k+4>>2]|0;if((j|0)==0&(k|0)==0){j=Vs(b,e)|0;if(j|0){l=e;k=Ja;break}k=u;j=c[k>>2]|0;k=c[k+4>>2]|0}t=Ja+8|0;Ia=t;q=c[Ia+4>>2]|0;La=Ga;c[La>>2]=c[Ia>>2];c[La+4>>2]=q;La=Fa;c[La>>2]=j;c[La+4>>2]=k;La=Ha;q=c[e>>2]|0;if((c[La>>2]|0)==1&(c[La+4>>2]|0)==0){k=i+1|0;j=bt(b,q,Fa,k)|0;if(!j)j=k;else{l=e;k=Ja;break}}else{e:do if(!q){m=-1;n=d[Qa>>0]|0;l=c[6]|0}else{l=c[q+24>>2]|0;o=d[l+2>>0]<<8|d[l+3>>0];if(!o){l=e;k=Ja;j=267;break c}n=d[Qa>>0]|0;m=0;while(1){La=l+((G(m,n)|0)+4)|0;Aa=cw(d[La>>0]|0,0,56)|0;Ia=L()|0;za=cw(d[La+1>>0]|0,0,48)|0;Ia=L()|0|Ia;Ba=cw(d[La+2>>0]|0,0,40)|0;Ia=Ia|(L()|0);Ia=Ia|d[La+3>>0];Ca=cw(d[La+4>>0]|0,0,24)|0;Ia=Ia|(L()|0);Da=cw(d[La+5>>0]|0,0,16)|0;Ia=Ia|(L()|0);Ea=cw(d[La+6>>0]|0,0,8)|0;Ia=Ia|(L()|0);La=Sv(za|Aa|Ba|Ca|Da|Ea|0,Ia|0,d[La+7>>0]|0,0)|0;if((La|0)==(j|0)&(L()|0)==(k|0))break e;m=m+1|0;if(m>>>0>=o>>>0){l=e;k=Ja;j=267;break c}}}while(0);l=l+((G(m,n)|0)+4)|0;La=bw(j|0,k|0,56)|0;L()|0;a[l>>0]=La;La=bw(j|0,k|0,48)|0;L()|0;a[l+1>>0]=La;La=bw(j|0,k|0,40)|0;L()|0;a[l+2>>0]=La;a[l+3>>0]=k;La=bw(j|0,k|0,24)|0;L()|0;a[l+4>>0]=La;La=bw(j|0,k|0,16)|0;L()|0;a[l+5>>0]=La;La=bw(j|0,k|0,8)|0;L()|0;a[l+6>>0]=La;a[l+7>>0]=j;if(a[x>>0]|0){k=0;j=l+8|0;while(1){La=c[Fa+8+(k<<2)>>2]|0;a[j>>0]=La>>>24;a[j+1>>0]=La>>>16;a[j+2>>0]=La>>>8;a[j+3>>0]=La;k=k+1|0;if(k>>>0>=(d[x>>0]|0)>>>0)break;else j=j+4|0}}c[q+20>>2]=1;j=ft(b,q,Fa)|0;if(j|0){l=e;k=Ja;break}j=i+1|0}j=bt(b,c[Ja>>2]|0,Ga,j)|0;if(!j){k=c[Ka>>2]|0;f:do if(!(d[k+2>>0]<<8|d[k+3>>0]))j=0;else{q=(i|0)==0?80:81;o=Ja+16|0;if(!Ma){m=0;n=0;while(1){k=k+((G(n,d[Qa>>0]|0)|0)+4)|0;Fa=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ea=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ga=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];Ia=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);La=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ea|Fa|Ga|Ia|La|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=t;j=_a[q&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}j=h;j=((k|0)==(c[j>>2]|0)?(l|0)==(c[j+4>>2]|0):0)?1:m;n=n+1|0;k=c[Ka>>2]|0;if(n>>>0>=(d[k+2>>0]<<8|d[k+3>>0])>>>0)break f;else m=j}}m=0;n=0;while(1){k=k+((G(n,d[Qa>>0]|0)|0)+4)|0;Fa=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ea=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ga=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];Ia=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);La=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ea|Fa|Ga|Ia|La|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0;g:do if(j|0){while(1){La=j+8|0;if((c[La>>2]|0)==(k|0)?(c[La+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break g}Us(b,c[j>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+1;c[j>>2]=Ja}while(0);j=t;j=_a[q&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}j=h;j=((k|0)==(c[j>>2]|0)?(l|0)==(c[j+4>>2]|0):0)?1:m;n=n+1|0;k=c[Ka>>2]|0;if(n>>>0>=(d[k+2>>0]<<8|d[k+3>>0])>>>0)break;else m=j}}while(0);La=Ha;h:do if((c[La>>2]|0)==1&(c[La+4>>2]|0)==0){j=c[Pa>>2]|0;if(d[j+2>>0]<<8|d[j+3>>0]|0){o=(i|0)==0?80:81;n=e+16|0;if(!Ma){k=0;while(1){h=j+((G(k,d[Qa>>0]|0)|0)+4)|0;Ia=cw(d[h>>0]|0,0,56)|0;i=L()|0;Ha=cw(d[h+1>>0]|0,0,48)|0;i=L()|0|i;Ka=cw(d[h+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[h+3>>0];La=cw(d[h+4>>0]|0,0,24)|0;i=i|(L()|0);Ma=cw(d[h+5>>0]|0,0,16)|0;i=i|(L()|0);j=cw(d[h+6>>0]|0,0,8)|0;i=i|(L()|0);h=Sv(Ha|Ia|Ka|La|Ma|j|0,i|0,d[h+7>>0]|0,0)|0;i=L()|0;j=u;j=_a[o&127](b,h,i,c[j>>2]|0,c[j+4>>2]|0)|0;k=k+1|0;if(j|0){l=e;k=Ja;break c}j=c[Pa>>2]|0;if(k>>>0>=(d[j+2>>0]<<8|d[j+3>>0])>>>0)break h}}m=0;do{k=j+((G(m,d[Qa>>0]|0)|0)+4)|0;La=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ka=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ma=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];h=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);i=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ka|La|Ma|h|i|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0;i:do if(j|0){while(1){i=j+8|0;if((c[i>>2]|0)==(k|0)?(c[i+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break i}Us(b,c[j>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+1;c[j>>2]=e}while(0);j=u;j=_a[o&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;m=m+1|0;if(j|0){l=e;k=Ja;break c}j=c[Pa>>2]|0}while(m>>>0<(d[j+2>>0]<<8|d[j+3>>0])>>>0)}}else if(!j){m=h;l=c[m>>2]|0;m=c[m+4>>2]|0;k=(i|0)==0?80:81;j:do if(Ma){j=c[b+116+(((l>>>0)%97|0)<<2)>>2]|0;if(!j)break;while(1){i=j+8|0;if((c[i>>2]|0)==(l|0)?(c[i+4>>2]|0)==(m|0):0)break;j=c[j+28>>2]|0;if(!j)break j}Us(b,c[j>>2]|0)|0;i=e+16|0;c[i>>2]=(c[i>>2]|0)+1;c[j>>2]=e}while(0);j=u;j=_a[k&127](b,l,m,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}}while(0);j=Us(b,Ja)|0;if(!j){l=0;k=0;j=Us(b,e)|0}else{l=e;k=0}}else{l=e;k=Ja}}else{l=e;k=Ja}}else{l=e;k=Ja;j=7}}else{l=0;k=0;j=7}while(0);Us(b,k)|0;Us(b,l)|0;do if(!Oa)if(!(c[7324]|0)){ab[c[29344>>2]&127](Na);break}else{b=Wa[c[29352>>2]&127](Na)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Na);break}while(0);b=j;Ra=Sa;return b|0}function ct(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=e+100|0;a:do if(f|0?(j=f+8|0,i=c[j>>2]|0,j=c[j+4>>2]|0,!((i|0)==1&(j|0)==0)):0){m=f;while(1){if(c[m>>2]|0)break a;k=c[n>>2]|0;do if(!(Vc(k,1)|0)){k=c[k+100>>2]|0;l=k+8|0;if(!(b[l>>1]&9216)){c[k>>2]=i;c[k+4>>2]=j;b[l>>1]=4;break}else{Pg(k,i,j);break}}while(0);b:do if((Gc(c[n>>2]|0)|0)==100){j=Oc(c[n>>2]|0,0)|0;k=L()|0;i=f;do{l=i+8|0;if((c[l>>2]|0)==(j|0)?(c[l+4>>2]|0)==(k|0):0){i=0;break b}i=c[i>>2]|0}while((i|0)!=0);i=Xs(e,j,k,0,m)|0}else i=0;while(0);j=c[n>>2]|0;if(j|0){l=c[j>>2]|0;k=j+136|0;o=c[k+4>>2]|0;if((o|0)>0|(o|0)==0&(c[k>>2]|0)>>>0>0)hc(l,j);k=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;o=j+64|0;c[o>>2]=0;c[o+4>>2]=0;if((k|0)==3082|(a[l+81>>0]|0)!=0){j=19;break}j=c[l+68>>2]&k;if(j|0){i=j;j=27;break}}if(i|0){j=27;break}m=c[m>>2]|0;if(!m){i=267;j=27;break}j=m+8|0;i=c[j>>2]|0;j=c[j+4>>2]|0;if((i|0)==1&(j|0)==0)break a}if((j|0)==19){og(l);o=7;return o|0}else if((j|0)==27)return i|0}while(0);i=e+23|0;j=f+24|0;n=c[j>>2]|0;o=d[i>>0]|0;m=n+((G(o,g)|0)+4)|0;fw(m|0,m+o|0,G((d[n+2>>0]<<8|d[n+3>>0])+~g|0,o)|0)|0;o=c[j>>2]|0;n=o+2|0;o=o+3|0;g=(d[n>>0]<<8|d[o>>0])+-1|0;a[n>>0]=g>>>8;a[o>>0]=g;c[f+20>>2]=1;if(!(c[f>>2]|0)){o=0;return o|0}o=c[j>>2]|0;if((d[o+2>>0]<<8|d[o+3>>0]|0)<((((c[e+16>>2]|0)+-4|0)/(d[i>>0]|0)|0|0)/3|0|0)){o=dt(e,f,h)|0;return o|0}else{o=et(e,f)|0;return o|0}return 0}function dt(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;n=c[f>>2]|0;a:do if(!n)h=-1;else{j=f+8|0;m=c[j>>2]|0;j=c[j+4>>2]|0;i=c[n+24>>2]|0;k=d[i+2>>0]<<8|d[i+3>>0];if(k|0){l=d[e+23>>0]|0;h=0;do{o=i+((G(h,l)|0)+4)|0;u=cw(d[o>>0]|0,0,56)|0;p=L()|0;v=cw(d[o+1>>0]|0,0,48)|0;p=L()|0|p;t=cw(d[o+2>>0]|0,0,40)|0;p=p|(L()|0);p=p|d[o+3>>0];s=cw(d[o+4>>0]|0,0,24)|0;p=p|(L()|0);r=cw(d[o+5>>0]|0,0,16)|0;p=p|(L()|0);q=cw(d[o+6>>0]|0,0,8)|0;p=p|(L()|0);o=Sv(v|u|t|s|r|q|0,p|0,d[o+7>>0]|0,0)|0;if((o|0)==(m|0)&(L()|0)==(j|0))break a;h=h+1|0}while(h>>>0<k>>>0)}Us(e,0)|0;v=267;return v|0}while(0);c[f>>2]=0;i=ct(e,n,h,g+1|0)|0;h=Us(e,n)|0;if(i|0){v=i;return v|0}if(h|0){v=h;return v|0}j=e+84|0;h=c[j>>2]|0;m=f+8|0;l=m;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){v=h;c[v>>2]=k;c[v+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;v=h+136|0;u=c[v+4>>2]|0;if((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;v=h+64|0;c[v>>2]=0;c[v+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);v=7;return v|0}else{h=c[i+68>>2]&j;if(!h)break;return h|0}}while(0);j=e+108|0;h=c[j>>2]|0;l=m;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){v=h;c[v>>2]=k;c[v+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;v=h+136|0;u=c[v+4>>2]|0;if((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;v=h+64|0;c[v>>2]=0;c[v+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);v=7;return v|0}else{h=c[i+68>>2]&j;if(!h)break;return h|0}}while(0);v=m;h=c[v>>2]|0;if((h|0)==0&(c[v+4>>2]|0)==0)h=f+28|0;else{h=e+116+(((h>>>0)%97|0)<<2)|0;while(1){i=c[h>>2]|0;if((i|0)==(f|0))break;else h=i+28|0}v=f+28|0;c[h>>2]=c[v>>2];c[v>>2]=0;h=v}v=m;c[v>>2]=g;c[v+4>>2]=((g|0)<0)<<31>>31;v=e+68|0;c[h>>2]=c[v>>2];u=f+16|0;c[u>>2]=(c[u>>2]|0)+1;c[v>>2]=f;v=0;return v|0}function et(b,e){b=b|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0;t=Ra;Ra=Ra+96|0;q=t+48|0;n=t;r=c[e>>2]|0;if(!r){s=0;Ra=t;return s|0}o=c[e+24>>2]|0;l=d[o+2>>0]|0;k=d[o+3>>0]|0;p=a[b+23>>0]|0;m=cw(d[o+4>>0]|0,0,56)|0;j=L()|0;u=cw(d[o+5>>0]|0,0,48)|0;j=L()|0|j;h=cw(d[o+6>>0]|0,0,40)|0;j=j|(L()|0);j=j|d[o+7>>0];g=cw(d[o+8>>0]|0,0,24)|0;j=j|(L()|0);s=cw(d[o+9>>0]|0,0,16)|0;j=j|(L()|0);i=cw(d[o+10>>0]|0,0,8)|0;j=j|(L()|0);j=Sv(u|m|h|g|s|i|0,j|0,d[o+11>>0]|0,0)|0;i=L()|0;s=q;c[s>>2]=j;c[s+4>>2]=i;s=b+21|0;i=a[s>>0]|0;j=i&255;g=0;h=o+12|0;while(1){c[q+8+(g<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[q+8+((g|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];g=g+2|0;if(g>>>0>=j>>>0)break;else h=h+8|0}m=i&255;i=l<<8|k;if(i>>>0>1){j=p&255;k=b+22|0;l=1;do{h=G(l,j)|0;v=o+(h+4)|0;z=cw(d[v>>0]|0,0,56)|0;u=L()|0;A=cw(d[v+1>>0]|0,0,48)|0;u=L()|0|u;y=cw(d[v+2>>0]|0,0,40)|0;u=u|(L()|0);u=u|d[v+3>>0];x=cw(d[v+4>>0]|0,0,24)|0;u=u|(L()|0);w=cw(d[v+5>>0]|0,0,16)|0;u=u|(L()|0);g=cw(d[v+6>>0]|0,0,8)|0;u=u|(L()|0);v=Sv(A|z|y|x|w|g|0,u|0,d[v+7>>0]|0,0)|0;u=L()|0;g=n;c[g>>2]=v;c[g+4>>2]=u;g=0;h=o+(h+12)|0;while(1){c[n+8+(g<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[n+8+((g|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];g=g+2|0;if(g>>>0>=m>>>0)break;else h=h+8|0}if(!(a[k>>0]|0)){g=0;do{z=q+8+(g<<2)|0;B=+f[z>>2];C=+f[n+8+(g<<2)>>2];f[z>>2]=B<C?B:C;z=g|1;A=q+8+(z<<2)|0;C=+f[A>>2];B=+f[n+8+(z<<2)>>2];f[A>>2]=C>B?C:B;g=g+2|0}while(g>>>0<m>>>0)}else{g=0;do{z=q+8+(g<<2)|0;y=c[z>>2]|0;A=c[n+8+(g<<2)>>2]|0;c[z>>2]=(y|0)<(A|0)?y:A;z=g|1;A=q+8+(z<<2)|0;y=c[A>>2]|0;z=c[n+8+(z<<2)>>2]|0;c[A>>2]=(y|0)>(z|0)?y:z;g=g+2|0}while(g>>>0<m>>>0)}l=l+1|0}while((l|0)!=(i|0))}k=e+8|0;j=c[k>>2]|0;k=c[k+4>>2]|0;i=q;c[i>>2]=j;c[i+4>>2]=k;i=c[r+24>>2]|0;l=d[i+2>>0]<<8|d[i+3>>0];a:do if(!l)g=267;else{h=p&255;g=0;while(1){m=i+((G(g,h)|0)+4)|0;v=cw(d[m>>0]|0,0,56)|0;A=L()|0;u=cw(d[m+1>>0]|0,0,48)|0;A=L()|0|A;w=cw(d[m+2>>0]|0,0,40)|0;A=A|(L()|0);A=A|d[m+3>>0];x=cw(d[m+4>>0]|0,0,24)|0;A=A|(L()|0);y=cw(d[m+5>>0]|0,0,16)|0;A=A|(L()|0);z=cw(d[m+6>>0]|0,0,8)|0;A=A|(L()|0);A=Sv(u|v|w|x|y|z|0,A|0,d[m+7>>0]|0,0)|0;if((A|0)==(j|0)&(L()|0)==(k|0))break;g=g+1|0;if(g>>>0>=l>>>0){g=267;break a}}A=bw(j|0,k|0,56)|0;L()|0;a[m>>0]=A;A=bw(j|0,k|0,48)|0;L()|0;a[m+1>>0]=A;A=bw(j|0,k|0,40)|0;L()|0;a[m+2>>0]=A;a[m+3>>0]=k;A=bw(j|0,k|0,24)|0;L()|0;a[m+4>>0]=A;A=bw(j|0,k|0,16)|0;L()|0;a[m+5>>0]=A;A=bw(j|0,k|0,8)|0;L()|0;a[m+6>>0]=A;a[m+7>>0]=j;if(a[s>>0]|0){h=0;g=m+8|0;while(1){A=c[q+8+(h<<2)>>2]|0;a[g>>0]=A>>>24;a[g+1>>0]=A>>>16;a[g+2>>0]=A>>>8;a[g+3>>0]=A;h=h+1|0;if(h>>>0>=(d[s>>0]|0)>>>0)break;else g=g+4|0}}c[r+20>>2]=1;g=et(b,r)|0}while(0);A=g;Ra=t;return A|0}function ft(b,e,g){b=b|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=Ra;Ra=Ra+48|0;z=C;h=c[e>>2]|0;if(!h){B=0;Ra=C;return B|0}y=b+23|0;A=b+21|0;x=b+22|0;w=0;b=e;a:while(1){if(w>>>0>999)break;w=w+1|0;u=b+8|0;t=c[u>>2]|0;u=c[u+4>>2]|0;j=c[h+24>>2]|0;e=d[j+2>>0]<<8|d[j+3>>0];if(!e)break;i=d[y>>0]|0;b=0;while(1){k=G(b,i)|0;v=j+(k+4)|0;n=cw(d[v>>0]|0,0,56)|0;s=L()|0;m=cw(d[v+1>>0]|0,0,48)|0;s=L()|0|s;o=cw(d[v+2>>0]|0,0,40)|0;s=s|(L()|0);s=s|d[v+3>>0];p=cw(d[v+4>>0]|0,0,24)|0;s=s|(L()|0);q=cw(d[v+5>>0]|0,0,16)|0;s=s|(L()|0);r=cw(d[v+6>>0]|0,0,8)|0;s=s|(L()|0);s=Sv(m|n|o|p|q|r|0,s|0,d[v+7>>0]|0,0)|0;if((s|0)==(t|0)&(L()|0)==(u|0))break;b=b+1|0;if(b>>>0>=e>>>0)break a}l=v+1|0;m=v+2|0;n=v+3|0;o=v+4|0;p=v+5|0;q=v+6|0;r=v+7|0;i=z;c[i>>2]=t;c[i+4>>2]=u;i=a[A>>0]|0;s=i&255;e=0;b=j+(k+12)|0;while(1){c[z+8+(e<<2)>>2]=d[b+1>>0]<<16|d[b>>0]<<24|d[b+2>>0]<<8|d[b+3>>0];c[z+8+((e|1)<<2)>>2]=d[b+5>>0]<<16|d[b+4>>0]<<24|d[b+6>>0]<<8|d[b+7>>0];e=e+2|0;if(e>>>0>=s>>>0)break;else b=b+8|0}b:do if(i<<24>>24){j=a[x>>0]|0;c:do if(j<<24>>24==1){b=0;while(1){e=z+8+(b<<2)|0;i=g+8+(b<<2)|0;if((c[i>>2]|0)<(c[e>>2]|0))break c;if((c[i+4>>2]|0)>(c[e+4>>2]|0))break c;b=b+2|0;if(b>>>0>=s>>>0)break b}}else{b=0;while(1){e=z+8+(b<<2)|0;i=g+8+(b<<2)|0;if(+f[i>>2]<+f[e>>2])break c;if(+f[i+4>>2]>+f[e+4>>2])break c;b=b+2|0;if(b>>>0>=s>>>0)break b}}while(0);if(!(j<<24>>24)){b=0;do{j=z+8+(b<<2)|0;D=+f[j>>2];E=+f[g+8+(b<<2)>>2];f[j>>2]=D<E?D:E;j=b|1;k=z+8+(j<<2)|0;E=+f[k>>2];D=+f[g+8+(j<<2)>>2];f[k>>2]=E>D?E:D;b=b+2|0}while(b>>>0<s>>>0)}else{b=0;do{j=z+8+(b<<2)|0;i=c[j>>2]|0;k=c[g+8+(b<<2)>>2]|0;c[j>>2]=(i|0)<(k|0)?i:k;j=b|1;k=z+8+(j<<2)|0;i=c[k>>2]|0;j=c[g+8+(j<<2)>>2]|0;c[k>>2]=(i|0)>(j|0)?i:j;b=b+2|0}while(b>>>0<s>>>0)}s=bw(t|0,u|0,56)|0;L()|0;a[v>>0]=s;s=bw(t|0,u|0,48)|0;L()|0;a[l>>0]=s;s=bw(t|0,u|0,40)|0;L()|0;a[m>>0]=s;a[n>>0]=u;s=bw(t|0,u|0,24)|0;L()|0;a[o>>0]=s;s=bw(t|0,u|0,16)|0;L()|0;a[p>>0]=s;u=bw(t|0,u|0,8)|0;L()|0;a[q>>0]=u;a[r>>0]=t;if(a[A>>0]|0){e=0;b=v+8|0;while(1){v=c[z+8+(e<<2)>>2]|0;a[b>>0]=v>>>24;a[b+1>>0]=v>>>16;a[b+2>>0]=v>>>8;a[b+3>>0]=v;e=e+1|0;if(e>>>0>=(d[A>>0]|0)>>>0)break;else b=b+4|0}}c[h+20>>2]=1}while(0);b=c[h>>2]|0;if(!b){b=0;B=31;break}else{v=h;h=b;b=v}}if((B|0)==31){Ra=C;return b|0}B=267;Ra=C;return B|0}function gt(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+92|0;d=c[j>>2]|0;do if(!(Vc(d,1)|0)){d=c[d+100>>2]|0;i=d+8|0;if(!(b[i>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[i>>1]=4;break}else{Pg(d,e,f);break}}while(0);d=c[j>>2]|0;do if(!(Vc(d,2)|0)){i=c[d+100>>2]|0;d=i+40|0;i=i+48|0;if(!(b[i>>1]&9216)){f=d;c[f>>2]=g;c[f+4>>2]=h;b[i>>1]=4;break}else{Pg(d,g,h);break}}while(0);Gc(c[j>>2]|0)|0;d=c[j>>2]|0;if(!d){h=0;return h|0}i=c[d>>2]|0;h=d+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,d);e=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((e|0)==3082|(a[i+81>>0]|0)!=0){og(i);h=7;return h|0}else{h=c[i+68>>2]&e;return h|0}return 0}function ht(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+104|0;d=c[j>>2]|0;do if(!(Vc(d,1)|0)){d=c[d+100>>2]|0;i=d+8|0;if(!(b[i>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[i>>1]=4;break}else{Pg(d,e,f);break}}while(0);d=c[j>>2]|0;do if(!(Vc(d,2)|0)){i=c[d+100>>2]|0;d=i+40|0;i=i+48|0;if(!(b[i>>1]&9216)){f=d;c[f>>2]=g;c[f+4>>2]=h;b[i>>1]=4;break}else{Pg(d,g,h);break}}while(0);Gc(c[j>>2]|0)|0;d=c[j>>2]|0;if(!d){h=0;return h|0}i=c[d>>2]|0;h=d+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,d);e=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((e|0)==3082|(a[i+81>>0]|0)!=0){og(i);h=7;return h|0}else{h=c[i+68>>2]&e;return h|0}return 0}function it(b,d,e,g,h,i){b=b|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if((e|0)<=1)return;t=e>>>1;r=e-t|0;s=d+(t<<2)|0;it(b,d,t,g,h,i);it(b,s,r,g,h,i);ew(i|0,d|0,t<<2|0)|0;if(!((r|0)>0|(t|0)!=0))return;p=g<<1;q=p|1;o=(a[b+22>>0]|0)==0;e=0;g=0;do{n=c[i+(g<<2)>>2]|0;b=h+(n*48|0)+8+(p<<2)|0;if(o){v=c[s+(e<<2)>>2]|0;j=+f[b>>2];k=+f[h+(v*48|0)+8+(p<<2)>>2];l=+f[h+(n*48|0)+8+(q<<2)>>2];m=+f[h+(v*48|0)+8+(q<<2)>>2];b=v}else{v=c[s+(e<<2)>>2]|0;j=+(c[b>>2]|0);k=+(c[h+(v*48|0)+8+(p<<2)>>2]|0);l=+(c[h+(n*48|0)+8+(q<<2)>>2]|0);m=+(c[h+(v*48|0)+8+(q<<2)>>2]|0);b=v}do if((g|0)==(t|0))u=11;else{if(!((e|0)==(r|0)|j<k)?!(j==k&l<m):0){u=11;break}c[d+(g+e<<2)>>2]=n;g=g+1|0}while(0);if((u|0)==11){u=0;c[d+(g+e<<2)>>2]=b;e=e+1|0}}while((e|0)<(r|0)|(g|0)<(t|0));return}function jt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;if((b|0)<=1)return;m=b>>>1;k=b-m|0;l=a+(m<<2)|0;jt(a,m,d,e);jt(l,k,d,e);ew(e|0,a|0,m<<2|0)|0;if(!((k|0)>0|(m|0)!=0))return;b=0;f=0;do do if((f|0)!=(m|0)){h=c[e+(f<<2)>>2]|0;if((b|0)==(k|0)){c[a+(f+k<<2)>>2]=h;f=f+1|0;b=k;break}i=c[l+(b<<2)>>2]|0;j=a+(f+b<<2)|0;if(+g[d+(h<<3)>>3]<+g[d+(i<<3)>>3]){c[j>>2]=h;f=f+1|0;break}else{c[j>>2]=i;b=b+1|0;break}}else{c[a+(m+b<<2)>>2]=c[l+(b<<2)>>2];f=m;b=b+1|0}while(0);while((b|0)<(k|0)|(f|0)<(m|0));return}function kt(b){b=b|0;var e=0,f=0;f=0;do{switch(a[26496+(f*12|0)+5>>0]|0){case 1:{e=b;break}case 2:{e=-1;break}default:e=0}Ed(b,c[26496+(f*12|0)>>2]|0,a[26496+(f*12|0)+4>>0]|0,d[26496+(f*12|0)+6>>0]|0,e,c[26496+(f*12|0)+8>>2]|0,0,0)|0;f=f+1|0}while((f|0)!=40);Ed(b,58197,1,1,0,0,182,99)|0;Ed(b,58203,1,1,0,0,182,100)|0;Ed(b,58212,1,1,0,0,183,101)|0;Ed(b,58217,1,1,0,0,183,102)|0;Ed(b,58224,1,1,0,0,183,103)|0;Ed(b,58239,1,1,0,0,183,104)|0;return 0}function lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0,k=0;if((b|0)!=1)Y(58254,58262,1395,58332);a=Hc(a,24)|0;if(($c(c[d>>2]|0)|0)==5)return;b=a+16|0;k=b;k=Sv(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;j=L()|0;i=b;c[i>>2]=k;c[i+4>>2]=j;f=+pc(c[d>>2]|0);e=+g[a>>3];h=f-e;d=b;e=e+h/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0));g[a>>3]=e;d=a+8|0;g[d>>3]=+g[d>>3]+h*(f-e);return}function mt(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=Hc(a,0)|0;if(b|0?(e=b+16|0,d=c[e>>2]|0,e=c[e+4>>2]|0,(e|0)>0|(e|0)==0&d>>>0>1):0){f=+g[b+8>>3];e=Sv(d|0,e|0,-1,-1)|0;wc(a,+u(+(f/(+(e>>>0)+4294967296.0*+(L()|0)))));return}wc(a,0.0);return}function nt(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=Hc(a,0)|0;if(b|0?(e=b+16|0,d=c[e>>2]|0,e=c[e+4>>2]|0,(e|0)>0|(e|0)==0&d>>>0>1):0){f=+g[b+8>>3];e=Sv(d|0,e|0,-1,-1)|0;wc(a,f/(+(e>>>0)+4294967296.0*+(L()|0)));return}wc(a,0.0);return}function ot(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0.0;if((b|0)!=1)Y(58254,58262,1418,58323);e=$c(c[d>>2]|0)|0;if((e|0)==5)return;a=Hc(a,64)|0;h=a+56|0;do if(!(c[h>>2]|0)){b=nu(1,12)|0;c[h>>2]=b;if((e|0)==1){c[b>>2]=0;c[b+4>>2]=159;b=a+48|0;c[b>>2]=0;c[b+4>>2]=0;b=a+16|0;a=b;a=Sv(c[a>>2]|0,c[a+4>>2]|0,1,0)|0;e=L()|0;c[b>>2]=a;c[b+4>>2]=e;b=c[d>>2]|0;break}else{f=a+48|0;e=f;c[e>>2]=1;c[e+4>>2]=0;c[b>>2]=0;c[b+4>>2]=160;b=f;f=9;break}}else{b=a+48|0;f=9}while(0);if((f|0)==9){f=b;e=c[f>>2]|0;f=c[f+4>>2]|0;b=a+16|0;i=b;i=Sv(c[i>>2]|0,c[i+4>>2]|0,1,0)|0;a=L()|0;c[b>>2]=i;c[b+4>>2]=a;b=c[d>>2]|0;if(!((e|0)==0&(f|0)==0)){j=+pc(b);d=nu(1,8)|0;g[d>>3]=j;b=c[h>>2]|0;e=c[b+4>>2]|0;a=c[b>>2]|0;a:do if(a){while(1){a=Xa[e&255](c[a+8>>2]|0,d)|0;if(!a)break;b=c[b>>2]|0;b=(a|0)>0?b:b+4|0;a=c[b>>2]|0;if(!a)break a}i=(c[b>>2]|0)+16|0;f=i;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;h=L()|0;c[i>>2]=f;c[i+4>>2]=h;mu(d);return}while(0);i=nu(1,24)|0;c[i+8>>2]=d;h=i+16|0;c[h>>2]=1;c[h+4>>2]=0;c[b>>2]=i;return}}a=rc(b)|0;e=L()|0;d=nu(1,8)|0;b=d;c[b>>2]=a;c[b+4>>2]=e;b=c[h>>2]|0;e=c[b+4>>2]|0;a=c[b>>2]|0;b:do if(a){while(1){a=Xa[e&255](c[a+8>>2]|0,d)|0;if(!a)break;b=c[b>>2]|0;b=(a|0)>0?b:b+4|0;a=c[b>>2]|0;if(!a)break b}i=(c[b>>2]|0)+16|0;f=i;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;h=L()|0;c[i>>2]=f;c[i+4>>2]=h;mu(d);return}while(0);i=nu(1,24)|0;c[i+8>>2]=d;h=i+16|0;c[h>>2]=1;c[h+4>>2]=0;c[b>>2]=i;return}function pt(a){a=a|0;var b=0,d=0,e=0;b=Hc(a,0)|0;if(!b)return;d=b+56|0;e=c[d>>2]|0;if(!e)return;vt(c[e>>2]|0,68,b);wt(c[c[d>>2]>>2]|0);mu(c[d>>2]|0);e=b+40|0;if(!((c[e>>2]|0)==1&(c[e+4>>2]|0)==0))return;e=b+48|0;if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0){e=b;Ac(a,c[e>>2]|0,c[e+4>>2]|0);return}else{wc(a,+g[b+8>>3]);return}}function qt(a){a=a|0;var b=0,d=0;b=Hc(a,0)|0;if(!b)return;d=b+16|0;g[b+24>>3]=(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0))*.5;tt(a);return}function rt(a){a=a|0;var b=0,d=0;b=Hc(a,0)|0;if(!b)return;d=b+16|0;g[b+24>>3]=(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0))*.25;tt(a);return}function st(a){a=a|0;var b=0,d=0.0,e=0;b=Hc(a,0)|0;if(!b)return;e=b+16|0;e=Yv(c[e>>2]|0,c[e+4>>2]|0,3,0)|0;d=(+(e>>>0)+4294967296.0*+(L()|0))*.25;g[b+24>>3]=d;tt(a);return}function tt(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;e=Hc(a,0)|0;if(!e)return;b=e+56|0;d=c[b>>2]|0;if(!d)return;c[e+60>>2]=0;vt(c[d>>2]|0,69,e);wt(c[c[b>>2]>>2]|0);mu(c[b>>2]|0);h=e+48|0;if(!((c[h>>2]|0)==0&(c[h+4>>2]|0)==0)){h=e+40|0;wc(a,+g[e+8>>3]/(+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0)));return}h=e+40|0;f=c[h>>2]|0;h=c[h+4>>2]|0;d=e;b=c[d>>2]|0;d=c[d+4>>2]|0;if((f|0)==1&(h|0)==0){Ac(a,b,d);return}else{wc(a,(+(b>>>0)+4294967296.0*+(d|0))/(+(f>>>0)+4294967296.0*+(h|0)));return}}function ut(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0.0;l=e+60|0;if((c[l>>2]|0)>0)return;m=+g[e+24>>3];h=e+16|0;f=c[h>>2]|0;h=c[h+4>>2]|0;i=e+32|0;k=i;j=c[k>>2]|0;k=c[k+4>>2]|0;b=Sv(j|0,k|0,b|0,d|0)|0;d=L()|0;do if(m<=+(b|0)){k=Tv(f|0,h|0,j|0,k|0)|0;L()|0;if(!(+(f>>>0)+4294967296.0*+(h|0)-m<=+(k|0))){c[l>>2]=1;break}l=e+40|0;j=l;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=L()|0;c[l>>2]=j;c[l+4>>2]=k;l=e+48|0;if((c[l>>2]|0)==0&(c[l+4>>2]|0)==0){j=c[a>>2]|0;k=e;j=Sv(c[k>>2]|0,c[k+4>>2]|0,j|0,((j|0)<0)<<31>>31|0)|0;k=L()|0;l=e;c[l>>2]=j;c[l+4>>2]=k;break}else{l=e+8|0;g[l>>3]=+g[a>>3]+ +g[l>>3];break}}while(0);l=i;c[l>>2]=b;c[l+4>>2]=d;return}function vt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(!a)return;do{e=c[a>>2]|0;if(e|0)vt(e,b,d);e=a+16|0;db[b&127](c[a+8>>2]|0,c[e>>2]|0,c[e+4>>2]|0,d);a=c[a+4>>2]|0}while((a|0)!=0);return}function wt(a){a=a|0;var b=0;if(!a)return;mu(c[a+8>>2]|0);b=c[a>>2]|0;if(b|0)wt(b);b=c[a+4>>2]|0;if(b|0)wt(b);mu(a);return}function xt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0;i=e+48|0;if((c[i>>2]|0)==0&(c[i+4>>2]|0)==0){a=c[a>>2]|0;f=e+32|0;i=f;h=c[i>>2]|0;i=c[i+4>>2]|0;if((h|0)==(b|0)&(i|0)==(d|0)){e=e+40|0;b=e;b=Sv(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;d=L()|0;c[e>>2]=b;c[e+4>>2]=d;return}if(!((i|0)<(d|0)|(i|0)==(d|0)&h>>>0<b>>>0))return;i=e;c[i>>2]=a;c[i+4>>2]=((a|0)<0)<<31>>31;i=f;c[i>>2]=b;c[i+4>>2]=d;e=e+40|0;c[e>>2]=1;c[e+4>>2]=0;return}else{j=+g[a>>3];a=e+32|0;h=a;f=c[h>>2]|0;h=c[h+4>>2]|0;if((f|0)==(b|0)&(h|0)==(d|0)){e=e+40|0;b=e;b=Sv(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;d=L()|0;c[e>>2]=b;c[e+4>>2]=d;return}if(!((h|0)<(d|0)|(h|0)==(d|0)&f>>>0<b>>>0))return;g[e+8>>3]=j;i=a;c[i>>2]=b;c[i+4>>2]=d;e=e+40|0;c[e>>2]=1;c[e+4>>2]=0;return}}function yt(a,b){a=a|0;b=b|0;var d=0,e=0;e=a;a=c[e>>2]|0;e=c[e+4>>2]|0;d=b;b=c[d>>2]|0;d=c[d+4>>2]|0;return ((a|0)==(b|0)&(e|0)==(d|0)?0:(e|0)<(d|0)|(e|0)==(d|0)&a>>>0<b>>>0?-1:1)|0}function zt(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[a>>3];c=+g[b>>3];return (d==c?0:d<c?-1:1)|0}function At(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,378,58977);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+z(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Bt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,379,58968);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+A(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ct(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,380,58959);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+B(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Dt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;if((b|0)!=2)Y(58580,58262,570,58950);if((sc(c[d>>2]|0)|0)!=5?(e=d+4|0,(sc(c[e>>2]|0)|0)!=5):0){f=+pc(c[d>>2]|0);wc(a,+C(+f,+(+pc(c[e>>2]|0))));return}Bc(a);return}function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,394,58940);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Hv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ft(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,402,58930);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Jv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Gt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,410,58920);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Fv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ht(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o+8|0;j=o;if((e|0)!=2)Y(58580,58262,1680,58900);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){h=nc(c[f>>2]|0)|0;i=nc(c[g>>2]|0)|0;e=a[h>>0]|0;a:do if(!(e<<24>>24))n=17;else{f=0;while(1){e=e&255;if(yu(e)|0)break;f=f+1|0;e=a[h+f>>0]|0;if(!(e<<24>>24)){n=17;break a}}e=(zu(e)|0)&255;a[k>>0]=e;e=1;while(1){g=a[h+f>>0]|0;if(!(g<<24>>24)){n=15;break}g=a[27264+(g&127)>>0]|0;if(g<<24>>24){a[k+e>>0]=(g&255)+48;e=e+1|0}if((e|0)<4)f=f+1|0;else break}if((n|0)==15)gw(k+e|0,48,4-e|0)|0;a[k+4>>0]=0}while(0);if((n|0)==17){a[k>>0]=a[58915]|0;a[k+1>>0]=a[58916]|0;a[k+2>>0]=a[58917]|0;a[k+3>>0]=a[58918]|0;a[k+4>>0]=a[58919]|0}e=a[i>>0]|0;b:do if(!(e<<24>>24))n=29;else{f=0;while(1){e=e&255;if(yu(e)|0)break;f=f+1|0;e=a[i+f>>0]|0;if(!(e<<24>>24)){n=29;break b}}e=(zu(e)|0)&255;a[j>>0]=e;e=1;while(1){g=a[i+f>>0]|0;if(!(g<<24>>24)){n=27;break}g=a[27264+(g&127)>>0]|0;if(g<<24>>24){a[j+e>>0]=(g&255)+48;e=e+1|0}if((e|0)<4)f=f+1|0;else break}if((n|0)==27)gw(j+e|0,48,4-e|0)|0;a[j+4>>0]=0}while(0);if((n|0)==29){a[j>>0]=a[58915]|0;a[j+1>>0]=a[58916]|0;a[j+2>>0]=a[58917]|0;a[j+3>>0]=a[58918]|0;a[j+4>>0]=a[58919]|0}g=j;m=0;f=0;h=k;e=a[k>>0]|0;while(1){i=h+1|0;e=e&255;l=a[26976+e>>0]|0;k=l&255;switch(l<<24>>24){case 4:{l=65533;break}case 3:{j=h+2|0;e=(e<<6)+(d[i>>0]|0)|0;n=34;break}case 2:{j=i;n=34;break}case 1:{n=35;break}default:l=e}if((n|0)==34){i=j+1|0;e=(e<<6)+(d[j>>0]|0)|0;n=35}if((n|0)==35){n=0;l=(e<<6)+(d[i>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;l=(l&-2|0)==65534|((l&-2048|0)==55296?1:(l&c[27248+(k<<2)>>2]|0)==0)?65533:l}i=g+1|0;e=d[g>>0]|0;j=a[26976+e>>0]|0;k=j&255;switch(j<<24>>24){case 4:{e=65533;break}case 3:{j=g+2|0;e=(e<<6)+(d[i>>0]|0)|0;n=39;break}case 2:{j=i;n=39;break}case 1:{n=40;break}default:{}}if((n|0)==39){i=j+1|0;e=(e<<6)+(d[j>>0]|0)|0;n=40}if((n|0)==40){n=0;e=(e<<6)+(d[i>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;e=(e&-2|0)==65534|((e&-2048|0)==55296?1:(e&c[27248+(k<<2)>>2]|0)==0)?65533:e}e=(l|0)==(e|0)&1;do{h=h+1|0;i=a[h>>0]|0}while((i&-64)<<24>>24==-128);do g=g+1|0;while((a[g>>0]&-64)<<24>>24==-128);f=f+e|0;e=m+1|0;if((e|0)==4)break;else{m=e;e=i}}zc(b,f);Ra=o;return}Bc(b);Ra=o;return}function It(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,498,58888);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,e*180.0/3.141592653589793);return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Jt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,499,58876);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,e*3.141592653589793/180.0);return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Kt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,420,58868);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+w(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,419,58860);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+x(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Mt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,421,58852);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+y(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,422,58844);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,1.0/+y(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ot(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,446,58835);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Pt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,438,58826);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+jv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Qt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,454,58817);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Rt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,456,58808);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,1.0/+Iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function St(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,474,58800);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+D(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Tt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,472,58792);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+E(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ut(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,473,58782);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Fa(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Vt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0;if((b|0)!=2)Y(58580,58262,546,58772);if((sc(c[d>>2]|0)|0)!=5?(g=d+4|0,(sc(c[g>>2]|0)|0)!=5):0){f=+pc(c[d>>2]|0);e=+pc(c[g>>2]|0);g=uu()|0;c[g>>2]=0;g=uu()|0;if(!(c[g>>2]|0)){wc(a,+v(+f,+e));return}else{d=uu()|0;d=dv(c[d>>2]|0)|0;g=uu()|0;xc(a,d,c[g>>2]|0);return}}Bc(a);return}function Wt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;if((b|0)!=1)Y(58254,58262,590,58763);switch(sc(c[d>>2]|0)|0){case 1:{e=rc(c[d>>2]|0)|0;d=L()|0;b=(d|0)>0|(d|0)==0&e>>>0>0;d=((e|0)!=0|(d|0)!=0)<<31>>31;Ac(a,b?1:d,b?0:((d|0)<0)<<31>>31);return}case 5:{Bc(a);return}default:{f=+pc(c[d>>2]|0);wc(a,f>0.0?1.0:+((f<0.0)<<31>>31));return}}}function Xt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,375,58754);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+u(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Yt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,514,58743);switch(sc(c[d>>2]|0)|0){case 1:{b=rc(c[d>>2]|0)|0;d=L()|0;Ac(a,Yv(b|0,d|0,b|0,d|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+pc(c[d>>2]|0);wc(a,e*e);return}}}function Zt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,620,58734);switch(sc(c[d>>2]|0)|0){case 1:{Ac(a,rc(c[d>>2]|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+F(+(+pc(c[d>>2]|0)));Ac(a,~~e>>>0,+t(e)>=1.0?(e>0.0?~~+H(+s(e/4294967296.0),4294967295.0)>>>0:~~+F((e-+(~~e>>>0))/4294967296.0)>>>0):0);return}}}function _t(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,645,58724);switch(sc(c[d>>2]|0)|0){case 1:{Ac(a,rc(c[d>>2]|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+s(+(+pc(c[d>>2]|0)));Ac(a,~~e>>>0,+t(e)>=1.0?(e>0.0?~~+H(+s(e/4294967296.0),4294967295.0)>>>0:~~+F((e-+(~~e>>>0))/4294967296.0)>>>0):0);return}}}function $t(a,b,c){a=a|0;b=b|0;c=c|0;wc(a,3.141592653589793);return}function au(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if((b|0)!=2)return;if((sc(c[d>>2]|0)|0)==5)return;j=rc(c[d+4>>2]|0)|0;f=L()|0;if((f|0)<0){xc(a,58611,-1);return}g=oc(c[d>>2]|0)|0;h=nb((G(g,j)|0)+1|0)|0;i=nb(g+1|0)|0;b=(h|0)!=0;e=(i|0)!=0;if(b&e){Su(i,nc(c[d>>2]|0)|0)|0;if((f|0)>0|(f|0)==0&j>>>0>0){b=0;e=0;do{Su(h+(G(g,b)|0)|0,i)|0;b=Sv(b|0,e|0,1,0)|0;e=L()|0}while((e|0)<(f|0)|(e|0)==(f|0)&b>>>0<j>>>0)}Cc(a,h,-1,-1);qb(h);qb(i);return}Ec(a);if(b)qb(h);if(!e)return;qb(i);return}function bu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(b|0)==3;if((b|1|0)!=3)Y(58692,58262,1038,58710);if((sc(c[d>>2]|0)|0)!=5?(e=d+4|0,(sc(c[e>>2]|0)|0)!=5):0){f=nc(c[d>>2]|0)|0;if(!f)return;e=nc(c[e>>2]|0)|0;if(g){b=(qc(c[d+8>>2]|0)|0)+-1|0;b=(b|0)>0?b:0}else b=0;zc(a,(ku(f,e,b)|0)+1|0);return}Bc(a);return}function cu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)!=2)Y(58580,58262,1073,58683);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){n=nc(c[f>>2]|0)|0;k=qc(c[g>>2]|0)|0;j=0;i=n;e=a[n>>0]|0;while(1){g=i+1|0;e=e&255;f=a[26976+e>>0]|0;h=f&255;switch(f<<24>>24){case 4:break;case 3:{f=i+2|0;e=(e<<6)+(d[g>>0]|0)|0;q=10;break}case 2:{f=g;q=10;break}case 1:{m=g;l=e;q=11;break}default:{p=e;q=12}}if((q|0)==10){m=f+1|0;l=(e<<6)+(d[f>>0]|0)|0;q=11}if((q|0)==11?(q=0,o=(l<<6)+(d[m>>0]|0)-(c[27232+(h<<2)>>2]|0)|0,!((o&-2|0)==65534|((o&-2048|0)==55296?1:(o&c[27248+(h<<2)>>2]|0)==0))):0){p=o;q=12}if((q|0)==12?(q=0,(p|0)==0):0)break;f=j+1|0;if((j|0)>=(k|0))break;e=i;do{e=e+1|0;g=a[e>>0]|0}while((g&-64)<<24>>24==-128);j=f;i=e;e=g}e=i-n|0;f=nb(e+1|0)|0;if(!f){Ec(b);return}else{nv(f,n,e)|0;a[f+e>>0]=0;Cc(b,f,-1,-1);qb(f);return}}Bc(b);return}function du(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)!=2)Y(58580,58262,1113,58673);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){f=nc(c[f>>2]|0)|0;k=qc(c[g>>2]|0)|0;j=0;q=f;e=a[f>>0]|0;while(1){h=q+1|0;e=e&255;g=a[26976+e>>0]|0;i=g&255;switch(g<<24>>24){case 4:break;case 3:{g=q+2|0;e=(e<<6)+(d[h>>0]|0)|0;p=9;break}case 2:{g=h;p=9;break}case 1:{m=h;l=e;p=10;break}default:{o=e;p=11}}if((p|0)==9){m=g+1|0;l=(e<<6)+(d[g>>0]|0)|0;p=10}if((p|0)==10?(p=0,n=(l<<6)+(d[m>>0]|0)-(c[27232+(i<<2)>>2]|0)|0,!((n&-2|0)==65534|((n&-2048|0)==55296?1:(n&c[27248+(i<<2)>>2]|0)==0))):0){o=n;p=11}if((p|0)==11?(p=0,(o|0)==0):0)break;e=q;do{e=e+1|0;g=a[e>>0]|0}while((g&-64)<<24>>24==-128);j=j+1|0;q=e;e=g}e=j-k|0;if((e|0)>0)while(1){do f=f+1|0;while((a[f>>0]&-64)<<24>>24==-128);if((e|0)>1)e=e+-1|0;else break}e=nb(q+1-f|0)|0;if(!e){Ec(b);return}else{Su(e,f)|0;Cc(b,e,-1,-1);qb(e);return}}Bc(b);return}function eu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((e|0)!=1)Y(58653,58262,1323,58661);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}e=nc(c[f>>2]|0)|0;f=Eu(e)|0;l=nb(f+1|0)|0;if(!l){Ec(b);return}j=l+f|0;a[j>>0]=0;j=j+-1|0;a:while(1){while(1){h=e+1|0;f=d[e>>0]|0;g=a[26976+f>>0]|0;i=g&255;switch(g<<24>>24){case 4:break;case 3:{g=e+2|0;f=(f<<6)+(d[h>>0]|0)|0;p=12;break}case 2:{g=h;p=12;break}case 1:{m=h;k=f;p=13;break}default:{o=f;p=14}}if((p|0)==12){m=g+1|0;k=(f<<6)+(d[g>>0]|0)|0;p=13}if((p|0)==13?(p=0,n=(k<<6)+(d[m>>0]|0)-(c[27232+(i<<2)>>2]|0)|0,!((n&-2|0)==65534|((n&-2048|0)==55296?1:(n&c[27248+(i<<2)>>2]|0)==0))):0){o=n;p=14}if((p|0)==14?(p=0,(o|0)==0):0)break a;f=e;while(1){i=f+1|0;if((a[i>>0]&-64)<<24>>24==-128)f=i;else break}if(f>>>0<e>>>0)e=i;else break}h=1;g=j;while(1){j=g;g=g+-1|0;a[j>>0]=a[f>>0]|0;f=i+~h|0;if(f>>>0<e>>>0)break;else h=h+1|0}j=g;e=i}Cc(b,l,-1,-1);qb(l);return}function fu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((d|0)!=1)Y(58254,58262,724,58642);if((sc(c[e>>2]|0)|0)==5){Bc(b);return}f=nc(c[e>>2]|0)|0;d=nb((Eu(f)|0)+1|0)|0;i=Su(d,f)|0;if(!i){Ec(b);return}e=a[f>>0]|0;if(e<<24>>24){h=1;g=e<<24>>24;while(1){f=f+1|0;if(!(wu(g)|0)){if((h|0)==1)e=zu(g)|0;else e=Du(g)|0;h=0;e=e&255}else h=1;g=d+1|0;a[d>>0]=e;e=a[f>>0]|0;if(!(e<<24>>24)){d=g;break}else{d=g;g=e<<24>>24}}}a[d>>0]=0;Cc(b,i,-1,-1);qb(i);return}function gu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)!=2)Y(58580,58262,771,58633);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}l=nc(c[f>>2]|0)|0;j=rc(c[f+4>>2]|0)|0;k=L()|0;if((k|0)<0){xc(b,58611,-1);return}e=a[l>>0]|0;if((l|0)==(-1|0)|e<<24>>24==0)f=0;else{f=0;g=l;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)))}i=((f|0)<0)<<31>>31;do if((k|0)>(i|0)|(k|0)==(i|0)&j>>>0>f>>>0){e=nb(j+1-f+(Eu(l)|0)|0)|0;if(!e){Ec(b);return}g=1;h=e;do{m=h;h=h+1|0;a[m>>0]=32;g=g+1|0;m=Sv(g|0,0,f|0,i|0)|0;n=L()|0}while(!((n|0)>(k|0)|(n|0)==(k|0)&m>>>0>j>>>0));Su(h,l)|0}else{e=nb((Eu(l)|0)+1|0)|0;f=Su(e,l)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function hu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if((e|0)!=2)Y(58580,58262,825,58624);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}h=nc(c[f>>2]|0)|0;j=rc(c[f+4>>2]|0)|0;k=L()|0;if((k|0)<0){xc(b,58611,-1);return}e=a[h>>0]|0;if((h|0)==(-1|0)|e<<24>>24==0)f=0;else{f=0;g=h;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)))}i=((f|0)<0)<<31>>31;do if((k|0)>(i|0)|(k|0)==(i|0)&j>>>0>f>>>0){g=Eu(h)|0;e=nb(j+1-f+g|0)|0;if(!e){Ec(b);return}Su(e,h)|0;h=1;g=e+g|0;do{l=g;g=g+1|0;a[l>>0]=32;h=h+1|0;l=Sv(h|0,0,f|0,i|0)|0;m=L()|0}while(!((m|0)>(k|0)|(m|0)==(k|0)&l>>>0>j>>>0));a[g>>0]=0}else{e=nb((Eu(h)|0)+1|0)|0;f=Su(e,h)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function iu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((e|0)!=2)Y(58580,58262,880,58602);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}l=nc(c[f>>2]|0)|0;m=rc(c[f+4>>2]|0)|0;n=L()|0;if((n|0)<0){xc(b,58611,-1);return}e=a[l>>0]|0;if((l|0)==(-1|0)|e<<24>>24==0)j=0;else{f=0;g=l;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)));j=f}k=((j|0)<0)<<31>>31;do if((n|0)>(k|0)|(n|0)==(k|0)&m>>>0>j>>>0){i=Eu(l)|0;e=nb(m+1-j+i|0)|0;if(!e){Ec(b);return}h=Sv(j|0,k|0,2,0)|0;g=L()|0;if((g|0)>(n|0)|(g|0)==(n|0)&h>>>0>m>>>0){f=e;h=1}else{h=1;g=e;while(1){f=g+1|0;a[g>>0]=32;h=h+1|0;g=Sv(h<<1|0,0,j|0,k|0)|0;o=L()|0;if((o|0)>(n|0)|(o|0)==(n|0)&g>>>0>m>>>0)break;else g=f}}Su(f,l)|0;f=f+i|0;o=Sv(h|0,0,j|0,k|0)|0;l=L()|0;if(!((l|0)>(n|0)|(l|0)==(n|0)&o>>>0>m>>>0))while(1){g=f+1|0;a[f>>0]=32;h=h+1|0;o=Sv(h|0,0,j|0,k|0)|0;l=L()|0;if((l|0)>(n|0)|(l|0)==(n|0)&o>>>0>m>>>0){f=g;break}else f=g}a[f>>0]=0}else{e=nb((Eu(l)|0)+1|0)|0;f=Su(e,l)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function ju(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((e|0)!=2)Y(58580,58262,939,58588);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){e=nc(c[f>>2]|0)|0;m=nc(c[g>>2]|0)|0;n=nb((Eu(e)|0)+1|0)|0;if(!n){Ec(b);return}l=n;f=e;e=a[e>>0]|0;while(1){g=f+1|0;e=e&255;k=a[26976+e>>0]|0;i=k&255;switch(k<<24>>24){case 4:{e=65533;break}case 3:{h=f+2|0;e=(e<<6)+(d[g>>0]|0)|0;o=12;break}case 2:{h=g;o=12;break}case 1:{o=13;break}default:o=14}if((o|0)==12){g=h+1|0;e=(e<<6)+(d[h>>0]|0)|0;o=13}if((o|0)==13){o=0;e=(e<<6)+(d[g>>0]|0)-(c[27232+(i<<2)>>2]|0)|0;if((e&-2|0)==65534|((e&-2048|0)==55296?1:(e&c[27248+(i<<2)>>2]|0)==0))e=65533;else o=14}if((o|0)==14){o=0;if(!e)break}g=m;h=a[m>>0]|0;while(1){j=g+1|0;i=h&255;h=a[26976+i>>0]|0;k=h&255;switch(h<<24>>24){case 4:{i=65533;break}case 3:{h=g+2|0;i=(i<<6)+(d[j>>0]|0)|0;o=20;break}case 2:{h=j;o=20;break}case 1:{o=21;break}default:{}}if((o|0)==20){j=h+1|0;i=(i<<6)+(d[h>>0]|0)|0;o=21}if((o|0)==21){o=0;i=(i<<6)+(d[j>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;i=(i&-2|0)==65534|((i&-2048|0)==55296?1:(i&c[27248+(k<<2)>>2]|0)==0)?65533:i}h=(i|0)!=0;if((i|0)==(e|0)|h^1)break;do{g=g+1|0;h=a[g>>0]|0}while((h&-64)<<24>>24==-128)}if(h){e=g;do e=e+1|0;while((a[e>>0]&-64)<<24>>24==-128);e=e-g|0;nv(l,g,e)|0;e=l+e|0}else e=l;do{f=f+1|0;g=a[f>>0]|0}while((g&-64)<<24>>24==-128);l=e;e=g}a[l>>0]=0;Cc(b,n,-1,-1);qb(n);return}Bc(b);return}function ku(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;t=a[b>>0]|0;if(!(t<<24>>24)){w=-1;return w|0}g=e;n=0;l=a[e>>0]|0;while(1){j=g+1|0;e=l&255;i=a[26976+e>>0]|0;k=i&255;switch(i<<24>>24){case 4:break;case 3:{h=g+2|0;e=(e<<6)+(d[j>>0]|0)|0;w=6;break}case 2:{h=j;w=6;break}case 1:{o=j;m=e;w=7;break}default:{q=e;w=8}}if((w|0)==6){o=h+1|0;m=(e<<6)+(d[h>>0]|0)|0;w=7}if((w|0)==7?(w=0,p=(m<<6)+(d[o>>0]|0)-(c[27232+(k<<2)>>2]|0)|0,!((p&-2|0)==65534|((p&-2048|0)==55296?1:(p&c[27248+(k<<2)>>2]|0)==0))):0){q=p;w=8}if((w|0)==8?(w=0,(q|0)==0):0)break;h=n+1|0;if((n|0)>=(f|0))break;do{g=g+1|0;e=a[g>>0]|0}while((e&-64)<<24>>24==-128);n=h;l=e}e=0;while(1){j=g+1|0;h=l&255;k=i&255;switch(i<<24>>24){case 4:break;case 3:{i=g+2|0;h=(h<<6)+(d[j>>0]|0)|0;w=15;break}case 2:{i=j;w=15;break}case 1:{s=j;r=h;w=16;break}default:{v=h;w=17}}if((w|0)==15){s=i+1|0;r=(h<<6)+(d[i>>0]|0)|0;w=16}if((w|0)==16?(w=0,u=(r<<6)+(d[s>>0]|0)-(c[27232+(k<<2)>>2]|0)|0,!((u&-2|0)==65534|((u&-2048|0)==55296?1:(u&c[27248+(k<<2)>>2]|0)==0))):0){v=u;w=17}if((w|0)==17?(w=0,(v|0)==0):0){e=-1;f=0;break}i=g;j=b;n=l;h=t;while(1){k=j+1|0;h=h&255;q=a[26976+h>>0]|0;m=q&255;switch(q<<24>>24){case 4:{o=65533;break}case 3:{l=j+2|0;h=(h<<6)+(d[k>>0]|0)|0;w=22;break}case 2:{l=k;w=22;break}case 1:{w=23;break}default:o=h}if((w|0)==22){k=l+1|0;h=(h<<6)+(d[l>>0]|0)|0;w=23}if((w|0)==23){w=0;o=(h<<6)+(d[k>>0]|0)-(c[27232+(m<<2)>>2]|0)|0;o=(o&-2|0)==65534|((o&-2048|0)==55296?1:(o&c[27248+(m<<2)>>2]|0)==0)?65533:o}k=i+1|0;h=n&255;q=a[26976+h>>0]|0;m=q&255;switch(q<<24>>24){case 4:{l=65533;break}case 3:{l=i+2|0;h=(h<<6)+(d[k>>0]|0)|0;w=27;break}case 2:{l=k;w=27;break}case 1:{w=28;break}default:l=h}if((w|0)==27){k=l+1|0;h=(h<<6)+(d[l>>0]|0)|0;w=28}if((w|0)==28){w=0;l=(h<<6)+(d[k>>0]|0)-(c[27232+(m<<2)>>2]|0)|0;l=(l&-2|0)==65534|((l&-2048|0)==55296?1:(l&c[27248+(m<<2)>>2]|0)==0)?65533:l}do{j=j+1|0;h=a[j>>0]|0}while((h&-64)<<24>>24==-128);do{i=i+1|0;k=a[i>>0]|0}while((k&-64)<<24>>24==-128);if((l|0)!=0&((o|0)!=0&(o|0)==(l|0)))n=k;else break}if(!o)break;do{g=g+1|0;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);e=e+1|0;l=h;i=a[26976+(h&255)>>0]|0}w=f+e|0;return w|0}\nfunction Mh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Ya=0,Za=0,_a=0,$a=0,bb=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;nb=Ra;Ra=Ra+560|0;lb=nb+416|0;kb=nb+400|0;jb=nb+384|0;ib=nb+368|0;hb=nb+352|0;fb=nb+336|0;eb=nb+320|0;bb=nb+304|0;$a=nb+288|0;mb=nb+272|0;gb=nb+256|0;_a=nb+240|0;da=nb+216|0;la=nb+524|0;va=nb+512|0;La=nb+192|0;Sa=nb+504|0;Ua=nb+160|0;Va=nb+96|0;Ya=nb+64|0;Za=nb+496|0;ea=nb+551|0;fa=nb+32|0;ga=nb;ha=nb+528|0;ia=nb+432|0;ja=nb+538|0;ka=f+20|0;ma=(c[(c[ka>>2]|0)+36>>2]<<1>>>0)/3|0;na=f+68|0;oa=f+116|0;pa=f+124|0;qa=f+70|0;ra=f+72|0;sa=f+120|0;ta=f+3|0;ua=ia+8|0;wa=ja+4|0;ya=Va+4|0;Ca=Va+8|0;Ea=Va+12|0;Fa=Va+16|0;Ga=Va+40|0;Ha=ia+12|0;Ia=ia+4|0;Ja=da+16|0;Ka=da+12|0;Ma=da+18|0;Na=ja;Oa=da+16|0;Pa=da+12|0;Qa=da+18|0;i=0;j=a[na>>0]|0;ca=c[oa>>2]|0;do{g=j<<24>>24;u=ca+20|0;if((c[u>>2]|0)<0?Jh(ca)|0:0){h=0;break}ba=ca+12|0;h=(a[ba>>0]|0)==0;if(!(j<<24>>24)){if(h){h=0;break}c[la>>2]=0;c[va>>2]=0;v=ca+52|0;l=c[v>>2]|0;g=c[ca+72>>2]|0;j=c[g+20>>2]|0;do if((b[g+28>>1]&4)!=0?(c[j+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[j+96>>2]|0)){c[da>>2]=0;aa=17;break}else{h=Ve(g)|0;aa=16;break}else aa=11;while(0);do if((aa|0)==11){h=c[j+40>>2]|0;if(h|0){c[da>>2]=h;aa=26;break}if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(g)|0;aa=16;break}else{h=Xf(g)|0;aa=16;break}}while(0);if((aa|0)==16){c[da>>2]=h;if(!h)aa=17;else aa=26}do if((aa|0)==17){aa=0;j=ca+4|0;h=fg(l,la,va,c[j>>2]|0,0)|0;c[da>>2]=h;k=c[la>>2]|0;w=k;do if(!h){g=c[v>>2]|0;$=c[ca+56>>2]|0;Z=c[k+56>>2]|0;h=d[ca+9>>0]|0;_=(c[k+4>>2]|0)==1?100:0;Y=$+(h+5)|0;Y=d[Y>>0]<<8|d[Y+1>>0];ew(Z+Y|0,$+Y|0,(c[g+36>>2]|0)-Y|0)|0;ew(Z+_|0,$+h|0,(e[ca+24>>1]<<1)+(e[ca+18>>1]|0)|0)|0;a[k>>0]=0;h=Gf(k)|0;if(!h){h=Jh(k)|0;if(!h){if(!(a[g+17>>0]|0)){h=0;break}h=hg(k)|0;c[da>>2]=h;break}}c[da>>2]=h}while(0);if(a[l+17>>0]|0){ig(l,c[va>>2]|0,5,c[j>>2]|0,da);h=c[da>>2]|0}if(h|0){c[pa>>2]=0;if(!k)break;g=c[k+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{ba=c[g+20>>2]|0;aa=ba+120|0;c[aa>>2]=(c[aa>>2]|0)+-1;ba=ba+136|0;c[g+16>>2]=c[ba>>2];c[ba>>2]=g;break}}ew(k+28|0,ca+28|0,d[ba>>0]<<1|0)|0;ew(k+36|0,ca+36|0,d[ba>>0]<<2|0)|0;a[k+12>>0]=a[ba>>0]|0;m=a[c[k+56>>2]>>0]&-9;q=ca+56|0;r=c[q>>2]|0;s=c[v>>2]|0;t=ca+9|0;h=d[t>>0]|0;if(!(b[s+22>>1]&12)){g=r+h|0;p=s+36|0}else{p=s+36|0;g=r+h|0;gw(g|0,0,(c[p>>2]|0)-h|0)|0}a[g>>0]=m;n=h+12|0;o=n&65535;g=r+(h+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[r+(h+7)>>0]=0;g=r+(h+5)|0;a[g>>0]=(c[p>>2]|0)>>>8;a[g+1>>0]=c[p>>2];c[u>>2]=(c[p>>2]|0)-n&65535;g=(m&255)>>>3;j=g&255;a[ca+8>>0]=j;g=4-(g<<2)&255;h=ca+10|0;a[h>>0]=g;k=ca+76|0;c[k>>2]=120;l=c[v>>2]|0;switch(m<<24>>24){case 5:{a[ca+2>>0]=1;h=ca+3|0;if(!(j<<24>>24)){a[h>>0]=0;c[k>>2]=121;h=181}else{a[h>>0]=1;h=180}c[ca+80>>2]=h;b[ca+14>>1]=b[l+28>>1]|0;h=l+30|0;aa=41;break}case 2:{a[ca+2>>0]=0;a[ca+3>>0]=0;c[ca+80>>2]=179;b[ca+14>>1]=b[l+24>>1]|0;h=l+26|0;aa=41;break}default:{c[_a>>2]=32306;c[_a+4>>2]=65035;c[_a+8>>2]=31517;Db(11,32001,_a);g=a[h>>0]|0}}if((aa|0)==41){b[ca+16>>1]=b[h>>1]|0;a[ca+11>>0]=a[l+21>>0]|0}b[ca+18>>1]=o;c[ca+60>>2]=r+(c[p>>2]|0);c[ca+64>>2]=r+n;c[ca+68>>2]=r+(g&255);a[ba>>0]=0;b[ca+26>>1]=(c[s+32>>2]|0)+65535;b[ca+24>>1]=0;a[ca>>0]=1;h=(c[q>>2]|0)+((d[t>>0]|0)+8)|0;ba=c[va>>2]|0;a[h>>0]=ba>>>24;a[h+1>>0]=ba>>>16;a[h+2>>0]=ba>>>8;a[h+3>>0]=ba;c[pa>>2]=w;h=0}else if((aa|0)==26)c[pa>>2]=0;while(0);if(h|0)break;a[na>>0]=1;b[qa>>1]=0;b[ra>>1]=0;c[sa>>2]=ca;h=0;j=1;g=pa}else{if(h?(c[u>>2]|0)<=(ma|0):0){h=0;break}m=g+-1|0;$=c[f+120+(m<<2)>>2]|0;m=b[f+72+(m<<1)>>1]|0;n=m&65535;g=c[$+72>>2]|0;k=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0))aa=56;else{h=Ve(g)|0;aa=55}else aa=51;do if((aa|0)==51){h=c[k+40>>2]|0;if(!h)if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){h=Wf(g)|0;aa=55;break}else{h=Xf(g)|0;aa=55;break}else aa=523}while(0);if((aa|0)==55)if(!h)aa=56;else aa=523;do if((aa|0)==56){aa=0;if((c[$+20>>2]|0)<0?(xa=Jh($)|0,xa|0):0){h=xa;aa=523;break}if(((((a[ca+3>>0]|0)!=0?(a[ba>>0]|0)==1:0)?(za=b[ca+28>>1]|0,Aa=ca+24|0,za<<16>>16==(b[Aa>>1]|0)):0)?(Ba=$+4|0,(c[Ba>>2]|0)!=1):0)?(Da=$+24|0,(b[Da>>1]|0)==m<<16>>16):0){q=c[ca+52>>2]|0;do if(za<<16>>16){h=fg(q,la,La,0,0)|0;c[va>>2]=h;if(!h){r=c[ca+36>>2]|0;c[Sa>>2]=r;r=Xa[c[ca+76>>2]&255](ca,r)|0;b[Ua>>1]=r;r=c[la>>2]|0;m=c[r+56>>2]|0;s=r+52|0;n=c[s>>2]|0;h=d[r+9>>0]|0;if(!(b[n+22>>1]&12)){g=m+h|0;l=n+36|0}else{l=n+36|0;g=m+h|0;gw(g|0,0,(c[l>>2]|0)-h|0)|0}a[g>>0]=13;_=h+8|0;g=m+(h+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[m+(h+7)>>0]=0;g=m+(h+5)|0;a[g>>0]=(c[l>>2]|0)>>>8;a[g+1>>0]=c[l>>2];g=r+20|0;c[g>>2]=(c[l>>2]|0)-_&65535;a[r+8>>0]=1;a[r+10>>0]=0;c[r+76>>2]=120;k=c[s>>2]|0;a[r+2>>0]=1;a[r+3>>0]=1;o=r+80|0;c[o>>2]=180;b[r+14>>1]=b[k+28>>1]|0;j=r+16|0;b[j>>1]=b[k+30>>1]|0;a[r+11>>0]=a[k+21>>0]|0;k=r+18|0;b[k>>1]=_;p=r+60|0;c[p>>2]=m+(c[l>>2]|0);c[r+64>>2]=m+_;c[r+68>>2]=m;a[r+12>>0]=0;b[r+26>>1]=(c[n+32>>2]|0)+65535;b[r+24>>1]=0;a[r>>0]=1;c[Va>>2]=1;c[ya>>2]=ca;c[Ca>>2]=Sa;c[Ea>>2]=Ua;c[Fa>>2]=c[ca+60>>2];c[Ga>>2]=2;h=Rh(Va,0,1,r)|0;c[va>>2]=h;if(h|0){g=c[r+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{$=c[g+20>>2]|0;_=$+120|0;c[_>>2]=(c[_>>2]|0)+-1;$=$+136|0;c[g+16>>2]=c[$>>2];c[$>>2]=g}break}c[g>>2]=(c[q+36>>2]|0)+-2-(e[k>>1]|0)-(e[Ua>>1]|0);do if(a[q+17>>0]|0){ig(q,c[La>>2]|0,5,c[Ba>>2]|0,va);if((e[Ua>>1]|0)<=(e[j>>1]|0))break;j=c[Sa>>2]|0;a:do if(!(c[va>>2]|0)){cb[c[o>>2]&255](r,j,da);h=e[Ja>>1]|0;if((c[Ka>>2]|0)>>>0<=h>>>0)break;g=c[p>>2]|0;do if(g>>>0>=j>>>0){if(g>>>0>=(j+h|0)>>>0)break;c[mb>>2]=32306;c[mb+4>>2]=64569;c[mb+8>>2]=31517;Db(11,32001,mb);c[va>>2]=11;break a}while(0);_=j+((e[Ma>>1]|0)+-4)|0;ig(c[s>>2]|0,d[_+1>>0]<<16|d[_>>0]<<24|d[_+2>>0]<<8|d[_+3>>0],3,c[r+4>>2]|0,va)}while(0)}while(0);k=(c[ca+64>>2]|0)+((e[Aa>>1]<<1)+-2)|0;k=(c[ca+56>>2]|0)+((d[k>>0]<<8|d[k+1>>0])&e[ca+26>>1])|0;c[Sa>>2]=k;g=0;while(1){j=g+1|0;c[Sa>>2]=k+j;if(j>>>0<9&(a[k+g>>0]|0)<0)g=j;else break}l=k+g+10|0;h=wa;g=k+j|0;do{c[Sa>>2]=g+1;_=a[g>>0]|0;Z=h;h=h+1|0;a[Z>>0]=_;g=c[Sa>>2]|0}while(_<<24>>24<0&g>>>0<l>>>0);if(!(c[va>>2]|0))Lh($,e[Da>>1]|0,ja,h-Na|0,0,c[ca+4>>2]|0,va);g=(c[$+56>>2]|0)+((d[$+9>>0]|0)+8)|0;$=c[La>>2]|0;a[g>>0]=$>>>24;a[g+1>>0]=$>>>16;a[g+2>>0]=$>>>8;a[g+3>>0]=$;g=c[la>>2]|0;do if(g|0){g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{$=c[g+20>>2]|0;_=$+120|0;c[_>>2]=(c[_>>2]|0)+-1;$=$+136|0;c[g+16>>2]=c[$>>2];c[$>>2]=g;break}}while(0);h=c[va>>2]|0}}else{c[gb>>2]=32306;c[gb+4>>2]=70410;c[gb+8>>2]=31517;Db(11,32001,gb);h=11}while(0)}else aa=95;b:do if((aa|0)==95){aa=0;l=c[(c[ka>>2]|0)+32>>2]|0;if((c[14813]|0)>=(l|0)?(Ta=c[14819]|0,(Ta|0)!=0):0){c[14819]=c[Ta>>2];_=c[14820]|0;c[14820]=_+-1;c[14821]=(_|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<l>>>0)c[14986]=l;g=(c[14979]|0)+1|0;c[14979]=g;if(g>>>0>(c[14983]|0)>>>0){c[14983]=g;_=Ta}else _=Ta}else aa=101;do if((aa|0)==101){aa=0;_=Sv(l|0,((l|0)<0)<<31>>31|0,-1,-1)|0;Z=L()|0;if(!(Z>>>0>0|(Z|0)==0&_>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](l)|0;if(!g){_=0;break}}else{g=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;k=59064;h=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&h>>>0>0){_=c[14978]|0;Z=Tv(h|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;Y=L()|0;c[14768]=((Y|0)<0|(Y|0)==0&Z>>>0<=_>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){_=0;break}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}h=Wa[c[29352>>2]&127](g)|0;if((c[14986]|0)>>>0<l>>>0)c[14986]=l;h=(c[14980]|0)+h|0;c[14980]=h;if(h>>>0>(c[14984]|0)>>>0){c[14984]=h;_=g}else _=g}else _=0}while(0);W=j<<24>>24==1;I=a[ta>>0]&1;j=I&255;c[la>>2]=0;a[ea>>0]=0;a[ea+1>>0]=0;a[ea+2>>0]=0;a[ea+3>>0]=0;a[ea+4>>0]=0;c[ia>>2]=0;c[ua>>2]=0;Y=c[$+52>>2]|0;if(!_)h=7;else{x=$+12|0;k=d[x>>0]|0;X=$+24|0;l=e[X>>1]|0;g=l+k|0;if(g>>>0<2)h=0;else{do if(m<<16>>16)if((g|0)==(n|0)){h=(j|-2)+n|0;break}else{h=n+-1|0;break}else h=0;while(0);g=2-j|0}Z=g+1|0;j=h-k+g|0;V=$+56|0;if((j|0)==(l|0))j=(d[$+9>>0]|0)+8|0;else{j=(c[$+64>>2]|0)+(j<<1)|0;j=(d[j>>0]<<8|d[j+1>>0])&e[$+26>>1]}K=(c[V>>2]|0)+j|0;M=K+1|0;N=K+2|0;O=K+3|0;k=d[M>>0]<<16|d[K>>0]<<24|d[N>>0]<<8|d[O>>0];c[Za>>2]=k;j=va+(g<<2)|0;U=yh(Y,k,j,0,0)|0;c[la>>2]=U;c:do if(!U){s=$+26|0;t=$+64|0;S=$+76|0;u=Y+22|0;v=$+28|0;D=Y+36|0;w=$+36|0;r=g;while(1){j=c[j>>2]|0;if((c[j+20>>2]|0)<0?(U=Jh(j)|0,c[la>>2]=U,U|0):0){aa=133;break}q=r+-1|0;if(!r){aa=144;break}j=a[x>>0]|0;p=q+h|0;do if(!(j<<24>>24))aa=138;else{if((p|0)!=(e[v>>1]|0)){aa=138;break}U=c[w>>2]|0;c[Sa+(q<<2)>>2]=U;k=d[U+1>>0]<<16|d[U>>0]<<24|d[U+2>>0]<<8|d[U+3>>0];U=(Xa[c[S>>2]&255]($,U)|0)&65535;c[Ya+(q<<2)>>2]=U;a[x>>0]=0}while(0);if((aa|0)==138){aa=0;j=(c[t>>2]|0)+(p-(j&255)<<1)|0;j=(c[V>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[s>>1])|0;l=Sa+(q<<2)|0;c[l>>2]=j;k=d[j+1>>0]<<16|d[j>>0]<<24|d[j+2>>0]<<8|d[j+3>>0];m=(Xa[c[S>>2]&255]($,j)|0)&65535;c[Ya+(q<<2)>>2]=m;n=j;if(b[u>>1]&12){o=n-(c[V>>2]|0)|0;if((o+m|0)>(c[D>>2]|0)){aa=141;break}ew(_+o|0,j|0,m|0)|0;c[l>>2]=_+(n-(c[V>>2]|0))}Kh($,p-(d[x>>0]|0)|0,m,la)}j=va+(q<<2)|0;U=yh(Y,k,j,0,0)|0;c[la>>2]=U;if(U|0){aa=129;break}else r=q}if((aa|0)==129){c[Za>>2]=k;g=q;aa=130;break}else if((aa|0)==133){aa=0;c[Za>>2]=k;gw(va|0,0,r<<2|0)|0;g=0;break}else if((aa|0)==141){aa=0;c[Za>>2]=k;c[$a>>2]=32306;c[$a+4>>2]=70767;c[$a+8>>2]=31517;Db(11,32001,$a);c[la>>2]=11;gw(va|0,0,r<<2|0)|0;g=0;break}else if((aa|0)==144){aa=0;c[Za>>2]=k;j=c[Y+32>>2]|0;m=(G((((j+-8|0)>>>0)/6|0)+4|0,Z)|0)+3&-4;j=(m*6|0)+j|0;U=Sv(j|0,((j|0)<0)<<31>>31|0,-1,-1)|0;T=L()|0;do if(T>>>0>0|(T|0)==0&U>>>0>2147483390)aa=155;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](j)|0;c[ua>>2]=j;if(!j)break}else{l=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){U=c[14978]|0;T=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;R=L()|0;c[14768]=((R|0)<0|(R|0)==0&T>>>0<=U>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){aa=155;break}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;c[ua>>2]=j}r=j+(m<<2)|0;c[Ha>>2]=r;A=r+(m<<1)|0;p=c[va>>2]|0;c[Ia>>2]=p;R=d[p+8>>0]<<2;U=R&65535;C=a[p+3>>0]|0;E=C&255;F=p+56|0;B=C<<24>>24!=0;w=c[F>>2]|0;u=p+18|0;m=e[u>>1]|0;j=0;z=0;y=p;l=w+m|0;x=F;while(1){t=y+24|0;v=b[y+26>>1]|0;k=c[ia>>2]|0;s=y+12|0;gw(r+(k<<1)|0,0,(d[s>>0]|0)+(e[t>>1]|0)<<1|0)|0;s=a[s>>0]|0;if(s<<24>>24){T=b[y+28>>1]|0;r=T&65535;if(T<<16>>16){q=v&65535;o=(r<<1)+m|0;n=0;m=k;while(1){c[(c[ua>>2]|0)+(m<<2)>>2]=w+((d[l>>0]<<8|d[l+1>>0])&q);m=m+1|0;c[ia>>2]=m;n=n+1|0;if((n|0)==(r|0))break;else l=l+2|0}l=w+o|0;k=k+r|0}n=s&255;m=0;o=k;while(1){c[(c[ua>>2]|0)+(o<<2)>>2]=c[y+36+(m<<2)>>2];m=m+1|0;if((m|0)==(n|0))break;else o=o+1|0}k=k+n|0;c[ia>>2]=k}n=e[u>>1]|0;m=e[t>>1]<<1;q=w+n+m|0;if(l>>>0<q>>>0){o=v&65535;n=(w+-1+(m+n-l)|0)>>>1;m=k;do{c[(c[ua>>2]|0)+(m<<2)>>2]=w+((d[l>>0]<<8|d[l+1>>0])&o);l=l+2|0;m=m+1|0;c[ia>>2]=m}while(l>>>0<q>>>0);k=k+1+n|0}c[Va+(z<<2)>>2]=k;if(!(B|(z|0)>=(g|0))){l=c[Ya+(z<<2)>>2]|0;b[(c[Ha>>2]|0)+(k<<1)>>1]=l;T=A+j|0;l=l&65535;j=l+j|0;ew(T|0,c[Sa+(z<<2)>>2]|0,l|0)|0;c[(c[ua>>2]|0)+(k<<2)>>2]=T+R;T=(c[Ha>>2]|0)+(k<<1)|0;l=(e[T>>1]|0)-R&65535;b[T>>1]=l;do if(!(a[y+8>>0]|0)){k=c[(c[ua>>2]|0)+(k<<2)>>2]|0;T=(c[x>>2]|0)+8|0;T=d[T>>0]|d[T+1>>0]<<8|d[T+2>>0]<<16|d[T+3>>0]<<24;a[k>>0]=T;a[k+1>>0]=T>>8;a[k+2>>0]=T>>16;a[k+3>>0]=T>>24;k=c[ia>>2]|0}else{if((l&65535)>=4)break;while(1){l=j+1|0;a[A+j>>0]=0;k=c[ia>>2]|0;Q=(c[Ha>>2]|0)+(k<<1)|0;T=(b[Q>>1]|0)+1<<16>>16;b[Q>>1]=T;if((T&65535)<4)j=l;else{j=l;break}}}while(0);c[ia>>2]=k+1}l=z+1|0;if((z|0)>=(g|0))break;k=c[va+(l<<2)>>2]|0;q=k+56|0;n=c[q>>2]|0;o=k+18|0;m=e[o>>1]|0;if((a[n>>0]|0)!=(a[c[F>>2]>>0]|0)){aa=179;break}z=l;y=k;l=n+m|0;r=c[Ha>>2]|0;w=n;u=o;x=q}if((aa|0)==179){aa=0;c[bb>>2]=32306;c[bb+4>>2]=70833;c[bb+8>>2]=31517;Db(11,32001,bb);c[la>>2]=11;g=0;break c}T=R+-12+(c[D>>2]|0)|0;J=C<<24>>24==0;s=$+60|0;d:do if(J){k=0;r=0;while(1){c[ia+16+(k<<2)>>2]=c[p+60>>2];q=c[Va+(r<<2)>>2]|0;c[ia+40+(k<<2)>>2]=q;j=k+-1|0;if(!k)o=0;else o=(q|0)==(c[ia+40+(j<<2)>>2]|0)?j:k;j=o+1|0;c[ia+16+(j<<2)>>2]=c[s>>2];c[ia+40+(j<<2)>>2]=q+1;j=T-(c[p+20>>2]|0)|0;l=Ya+(r<<2)|0;c[l>>2]=j;m=p+12|0;if(a[m>>0]|0){n=p+76|0;k=0;do{j=j+2+((Xa[c[n>>2]&255](p,c[p+36+(k<<2)>>2]|0)|0)&65535)|0;c[l>>2]=j;k=k+1|0}while(k>>>0<(d[m>>0]|0)>>>0)}c[Ua+(r<<2)>>2]=q;j=r+1|0;if((j|0)==(Z|0))break d;k=o+2|0;r=j;p=c[va+(j<<2)>>2]|0}}else{k=0;r=0;while(1){c[ia+16+(k<<2)>>2]=c[p+60>>2];q=c[Va+(r<<2)>>2]|0;c[ia+40+(k<<2)>>2]=q;j=k+-1|0;if(!k)o=0;else o=(q|0)==(c[ia+40+(j<<2)>>2]|0)?j:k;j=T-(c[p+20>>2]|0)|0;l=Ya+(r<<2)|0;c[l>>2]=j;m=p+12|0;if(a[m>>0]|0){n=p+76|0;k=0;do{j=j+2+((Xa[c[n>>2]&255](p,c[p+36+(k<<2)>>2]|0)|0)&65535)|0;c[l>>2]=j;k=k+1|0}while(k>>>0<(d[m>>0]|0)>>>0)}c[Ua+(r<<2)>>2]=q;j=r+1|0;if((j|0)==(Z|0))break d;k=o+1|0;r=j;p=c[va+(j<<2)>>2]|0}}while(0);e:do if((g|0)>-1){o=Z;j=0;f:while(1){u=Ya+(j<<2)|0;l=c[u>>2]|0;g:do if((l|0)>(T|0)){p=j+1|0;t=Ua+(j<<2)|0;q=j+2|0;s=Ya+(p<<2)|0;r=Ua+(p<<2)|0;if(q>>>0>5){if((p|0)>=(o|0)){aa=232;break f}k=c[t>>2]|0;if(!J){m=l;while(1){k=k+-1|0;l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;Q=(l&65535)+2|0;l=m-Q|0;c[u>>2]=l;c[s>>2]=(c[s>>2]|0)+Q;c[t>>2]=k;if((l|0)>(T|0))m=l;else{r=o;q=t;break g}}}n=k;m=l;while(1){k=n+-1|0;l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;m=m-((l&65535)+2)|0;c[u>>2]=m;if((n|0)<(c[ia>>2]|0)){l=b[(c[Ha>>2]|0)+(n<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,n)|0;l=(l&65535)+2|0}else l=0;c[s>>2]=(c[s>>2]|0)+l;c[t>>2]=k;if((m|0)>(T|0))n=k;else{r=o;q=t;l=m;break g}}}if(!J){k=o;while(1){if((p|0)<(k|0))n=k;else{c[s>>2]=0;c[r>>2]=c[ia>>2];n=q}k=(c[t>>2]|0)+-1|0;m=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,k)|0;Q=(m&65535)+2|0;l=l-Q|0;c[u>>2]=l;c[s>>2]=(c[s>>2]|0)+Q;c[t>>2]=k;if((l|0)>(T|0))k=n;else{r=n;q=t;break g}}}k=o;while(1){if((p|0)<(k|0))o=k;else{c[s>>2]=0;c[r>>2]=c[ia>>2];o=q}n=c[t>>2]|0;k=n+-1|0;m=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,k)|0;l=l+-2-(m&65535)|0;c[u>>2]=l;if((n|0)<(c[ia>>2]|0)){m=b[(c[Ha>>2]|0)+(n<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,n)|0;m=(m&65535)+2|0}else m=0;c[s>>2]=(c[s>>2]|0)+m;c[t>>2]=k;if((l|0)>(T|0))k=o;else{r=o;q=t;break}}}else{k=Ua+(j<<2)|0;r=o;q=k;k=c[k>>2]|0}while(0);h:do if((k|0)<(c[ia>>2]|0)){p=Ya+(j+1<<2)|0;if(!J){m=l;while(1){l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;l=(l&65535)+2|0;m=l+m|0;if((m|0)>(T|0))break h;c[u>>2]=m;k=k+1|0;c[q>>2]=k;c[p>>2]=(c[p>>2]|0)-l;if((k|0)>=(c[ia>>2]|0))break h}}o=l;do{l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;o=o+2+(l&65535)|0;if((o|0)>(T|0))break h;c[u>>2]=o;k=k+1|0;c[q>>2]=k;m=c[ia>>2]|0;if((k|0)<(m|0)){l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16)){l=Sh(ia,k)|0;m=c[ia>>2]|0}n=(l&65535)+2|0;l=m}else{n=0;l=m}c[p>>2]=(c[p>>2]|0)-n}while((k|0)<(l|0))}while(0);if((k|0)>=(c[ia>>2]|0)){aa=254;break}if(!j)l=0;else l=c[Ua+(j+-1<<2)>>2]|0;if((k|0)<=(l|0)){aa=258;break}j=j+1|0;if((j|0)<(r|0))o=r;else{H=r;break e}}if((aa|0)==232){aa=0;c[eb>>2]=32306;c[eb+4>>2]=70953;c[eb+8>>2]=31517;Db(11,32001,eb);c[la>>2]=11;g=0;break c}else if((aa|0)==254){aa=0;H=j+1|0;break}else if((aa|0)==258){aa=0;c[fb>>2]=32306;c[fb+4>>2]=70986;c[fb+8>>2]=31517;Db(11,32001,fb);c[la>>2]=11;g=0;break c}}else H=Z;while(0);t=H+-1|0;i:do if((H|0)>1){j=c[Ya+(t<<2)>>2]|0;j:do if(!(I<<24>>24)){x=t;m=c[Ha>>2]|0;while(1){u=Ya+(x<<2)|0;w=x;x=x+-1|0;v=Ya+(x<<2)|0;n=c[v>>2]|0;s=Ua+(x<<2)|0;l=c[s>>2]|0;k=l-E|0;if(!(b[m+(k<<1)>>1]|0)){Sh(ia,k)|0;m=c[Ha>>2]|0}r=(w|0)==(t|0)?0:-2;while(1){q=l+-1|0;if(!(b[m+(q<<1)>>1]|0)){Sh(ia,q)|0;m=c[Ha>>2]|0}o=b[m+(k<<1)>>1]|0;if(j){p=j+2+(o&65535)|0;o=e[m+(q<<1)>>1]|0;if((p|0)>(n+r-o|0))break;else j=p}else{j=(o&65535)+2|0;o=e[m+(q<<1)>>1]|0}n=n+-2-o|0;c[s>>2]=q;if((l|0)>1){k=k+-1|0;l=q}else{l=q;break}}c[u>>2]=j;c[v>>2]=n;k=(w|0)>1;if(k)j=c[Ua+(w+-2<<2)>>2]|0;else j=0;if((l|0)<=(j|0))break j;if(!k)break i;else j=n}}else while(1){q=Ya+(t<<2)|0;s=t;t=t+-1|0;r=Ya+(t<<2)|0;m=c[r>>2]|0;p=Ua+(t<<2)|0;n=c[p>>2]|0;l=n-E|0;k=c[Ha>>2]|0;if(!(b[k+(l<<1)>>1]|0)){Sh(ia,l)|0;k=c[Ha>>2]|0}o=l;while(1){l=n+-1|0;if(!(b[k+(l<<1)>>1]|0))Sh(ia,l)|0;if(j|0){l=n;break}k=c[Ha>>2]|0;j=(e[k+(o<<1)>>1]|0)+2|0;m=m+-2-(e[k+(l<<1)>>1]|0)|0;c[p>>2]=l;if((n|0)<=1)break;else{o=o+-1|0;n=l}}c[q>>2]=j;c[r>>2]=m;k=(s|0)>1;if(k)j=c[Ua+(s+-2<<2)>>2]|0;else j=0;if((l|0)<=(j|0))break j;if(!k)break i;else j=m}while(0);c[hb>>2]=32306;c[hb+4>>2]=71028;c[hb+8>>2]=31517;Db(11,32001,hb);c[la>>2]=11;g=0;break c}while(0);D=a[c[F>>2]>>0]|0;F=D&255;do if((H|0)>0){v=I<<24>>24==0;w=F>>>1&4^12;y=F>>>3;x=y&255;y=4-(y<<2)&255;C=F&247;z=Y+17|0;A=x<<24>>24==0;B=$+4|0;t=0;u=0;k:while(1){l:do if((u|0)>(g|0)){Q=fg(Y,da,Za,v?c[Za>>2]|0:1,0)|0;c[la>>2]=Q;if(Q|0){g=t;break k}s=c[da>>2]|0;p=c[s+56>>2]|0;l=s+52|0;q=c[l>>2]|0;k=d[s+9>>0]|0;r=s;if(!(b[q+22>>1]&12)){j=p+k|0;o=q+36|0}else{o=q+36|0;j=p+k|0;gw(j|0,0,(c[o>>2]|0)-k|0)|0}a[j>>0]=D;m=w+k|0;n=m&65535;j=p+(k+1)|0;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;a[p+(k+7)>>0]=0;j=p+(k+5)|0;a[j>>0]=(c[o>>2]|0)>>>8;a[j+1>>0]=c[o>>2];c[s+20>>2]=(c[o>>2]|0)-m&65535;a[s+8>>0]=x;j=s+10|0;a[j>>0]=y;k=s+76|0;c[k>>2]=120;l=c[l>>2]|0;switch(C<<24>>24){case 5:{a[s+2>>0]=1;j=s+3|0;if(A){a[j>>0]=0;c[k>>2]=121;j=181}else{a[j>>0]=1;j=180}c[s+80>>2]=j;b[s+14>>1]=b[l+28>>1]|0;j=l+30|0;aa=314;break}case 2:{a[s+2>>0]=0;a[s+3>>0]=0;c[s+80>>2]=179;b[s+14>>1]=b[l+24>>1]|0;j=l+26|0;aa=314;break}default:{c[ib>>2]=32306;c[ib+4>>2]=65035;c[ib+8>>2]=31517;Db(11,32001,ib);j=a[j>>0]|0}}if((aa|0)==314){aa=0;b[s+16>>1]=b[j>>1]|0;a[s+11>>0]=a[l+21>>0]|0;j=y}b[s+18>>1]=n;c[s+60>>2]=p+(c[o>>2]|0);c[s+64>>2]=p+m;c[s+68>>2]=p+(j&255);a[s+12>>0]=0;b[s+26>>1]=(c[q+32>>2]|0)+65535;b[s+24>>1]=0;a[s>>0]=1;c[La+(u<<2)>>2]=r;j=t+1|0;c[Va+(u<<2)>>2]=c[ia>>2];if(!(a[z>>0]|0)){E=j;break}ig(Y,c[s+4>>2]|0,5,c[B>>2]|0,la);if(!(c[la>>2]|0))E=j;else{g=j;break k}}else{k=va+(u<<2)|0;j=c[k>>2]|0;c[La+(u<<2)>>2]=j;c[da>>2]=j;c[k>>2]=0;j=c[j+72>>2]|0;k=c[j+20>>2]|0;do if(b[j+28>>1]&4){if((c[k+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){aa=297;break}if(!(c[k+96>>2]|0)){c[la>>2]=0;E=t+1|0;break l}else{k=Ve(j)|0;break}}else aa=297;while(0);do if((aa|0)==297){aa=0;l=c[k+40>>2]|0;if(l|0){aa=298;break k}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){k=Wf(j)|0;break}else{k=Xf(j)|0;break}}while(0);c[la>>2]=k;j=t+1|0;if(!k)E=j;else{g=j;break k}}while(0);u=u+1|0;if((u|0)>=(H|0)){aa=319;break}else t=E}if((aa|0)==298){aa=0;c[la>>2]=l;g=t+1|0}else if((aa|0)==319){aa=0;if((E|0)<=0){Q=0;break}k=0;m:do{Q=c[La+(k<<2)>>2]|0;l=c[Q+4>>2]|0;c[fa+(k<<2)>>2]=l;c[ga+(k<<2)>>2]=l;b[ha+(k<<1)>>1]=b[(c[Q+72>>2]|0)+28>>1]|0;if(k|0){j=0;do{if((c[fa+(j<<2)>>2]|0)==(l|0)){aa=325;break m}j=j+1|0}while(j>>>0<k>>>0)}k=k+1|0}while((k|0)<(E|0));if((aa|0)==325){aa=0;c[jb>>2]=32306;c[jb+4>>2]=71102;c[jb+8>>2]=31517;Db(11,32001,jb);c[la>>2]=11;g=E;break c}x=(E|0)==1;y=Y+44|0;w=0;do{if(x)j=0;else{j=0;k=1;do{j=(c[ga+(k<<2)>>2]|0)>>>0<(c[ga+(j<<2)>>2]|0)>>>0?k:j;k=k+1|0}while((k|0)<(E|0))}Q=ga+(j<<2)|0;v=c[Q>>2]|0;c[Q>>2]=-1;if((j|0)!=(w|0)){do if((j|0)>(w|0)){t=c[(c[La+(j<<2)>>2]|0)+72>>2]|0;P=j+1+(c[y>>2]|0)|0;u=t+28|0;b[u>>1]=0;k=t+12|0;Q=t+24|0;db[c[29444>>2]&127](c[(c[k>>2]|0)+44>>2]|0,c[t>>2]|0,c[Q>>2]|0,P);c[Q>>2]=P;u=b[u>>1]|0;if((u&10)!=10)break;q=c[k>>2]|0;s=q+8|0;k=c[s>>2]|0;p=t+36|0;m=c[p>>2]|0;if((k|0)==(t|0)){c[s>>2]=m;r=m}else r=k;o=t+32|0;l=c[o>>2]|0;n=(l|0)==0;if(n){c[q+4>>2]=m;k=m}else{c[l+36>>2]=m;k=c[p>>2]|0}do if(!k){c[q>>2]=l;if(n){a[q+33>>0]=2;c[p>>2]=0;c[o>>2]=0;k=q;aa=345;break}else{c[p>>2]=0;k=q;aa=344;break}}else{c[k+32>>2]=l;l=c[q>>2]|0;c[p>>2]=0;c[o>>2]=l;if(!l){k=q;aa=345}else{k=q;aa=344}}while(0);do if((aa|0)==344){aa=0;c[l+36>>2]=t}else if((aa|0)==345){aa=0;c[q+4>>2]=t;if(!(a[q+32>>0]|0))break;a[q+33>>0]=1}while(0);c[k>>2]=t;if(!((u&8)==0&(r|0)==0))break;c[s>>2]=t}while(0);t=La+(w<<2)|0;u=c[(c[t>>2]|0)+72>>2]|0;s=u+28|0;b[s>>1]=b[ha+(j<<1)>>1]|0;j=u+12|0;Q=u+24|0;db[c[29444>>2]&127](c[(c[j>>2]|0)+44>>2]|0,c[u>>2]|0,c[Q>>2]|0,v);c[Q>>2]=v;s=b[s>>1]|0;do if((s&10)==10){p=c[j>>2]|0;r=p+8|0;j=c[r>>2]|0;o=u+36|0;l=c[o>>2]|0;if((j|0)==(u|0)){c[r>>2]=l;q=l}else q=j;n=u+32|0;k=c[n>>2]|0;m=(k|0)==0;if(m){c[p+4>>2]=l;j=l}else{c[k+36>>2]=l;j=c[o>>2]|0}do if(!j){c[p>>2]=k;if(m){a[p+33>>0]=2;c[o>>2]=0;c[n>>2]=0;j=p;aa=361;break}else{c[o>>2]=0;j=p;aa=360;break}}else{c[j+32>>2]=k;k=c[p>>2]|0;c[o>>2]=0;c[n>>2]=k;if(!k){j=p;aa=361}else{j=p;aa=360}}while(0);do if((aa|0)==360){aa=0;c[k+36>>2]=u}else if((aa|0)==361){aa=0;c[p+4>>2]=u;if(!(a[p+32>>0]|0))break;a[p+33>>0]=1}while(0);c[j>>2]=u;if(!((s&8)==0&(q|0)==0))break;c[r>>2]=u}while(0);c[(c[t>>2]|0)+4>>2]=v}w=w+1|0}while((w|0)!=(E|0));c[Za>>2]=v;Q=1;break}break c}else{E=0;Q=0}while(0);v=E+-1|0;j=c[La+(v<<2)>>2]|0;P=c[j+4>>2]|0;a[K>>0]=P>>>24;a[M>>0]=P>>>16;a[N>>0]=P>>>8;a[O>>0]=P;if(!((F&8|0)!=0|(Z|0)==(E|0))){P=(c[j+56>>2]|0)+8|0;O=(c[(c[((E|0)>(Z|0)?La:va)+(g<<2)>>2]|0)+56>>2]|0)+8|0;O=d[O>>0]|d[O+1>>0]<<8|d[O+2>>0]<<16|d[O+3>>0]<<24;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24}P=Y+17|0;do if(a[P>>0]|0){j=c[La>>2]|0;k=c[ia>>2]|0;if((k|0)<=0)break;t=J&1;u=U<<16>>16==0;q=0;l=0;n=(e[j+24>>1]|0)+(d[j+12>>0]|0)|0;p=j;o=j;s=0;while(1){r=c[(c[ua>>2]|0)+(s<<2)>>2]|0;if((s|0)==(n|0)){n=s+t|0;j=q;do{j=j+1|0;o=c[((j|0)<(E|0)?La+(j<<2)|0:va+(j<<2)|0)>>2]|0;m=n+(e[o+24>>1]|0)+(d[o+12>>0]|0)|0}while((s|0)==(m|0));n=m}else j=q;if((s|0)==(c[Ua+(l<<2)>>2]|0)){l=l+1|0;m=c[La+(l<<2)>>2]|0;if(!J){p=m;aa=378}}else aa=378;n:do if((aa|0)==378){aa=0;do if((j|0)<(E|0)){if((c[p+4>>2]|0)!=(c[fa+(j<<2)>>2]|0))break;m=r;if((c[o+56>>2]|0)>>>0>m>>>0)break;if((c[o+60>>2]|0)>>>0>m>>>0){m=p;break n}}while(0);if(u)ig(Y,d[r+1>>0]<<16|d[r>>0]<<24|d[r+2>>0]<<8|d[r+3>>0],5,c[p+4>>2]|0,la);k=b[(c[Ha>>2]|0)+(s<<1)>>1]|0;if(!(k<<16>>16))k=Sh(ia,s)|0;if((k&65535)>(e[p+16>>1]|0))o:do if(!(c[la>>2]|0)){cb[c[p+80>>2]&255](p,r,da);k=e[Oa>>1]|0;if((c[Pa>>2]|0)>>>0<=k>>>0)break;m=c[o+60>>2]|0;do if(m>>>0>=r>>>0){if(m>>>0>=(r+k|0)>>>0)break;c[kb>>2]=32306;c[kb+4>>2]=64569;c[kb+8>>2]=31517;Db(11,32001,kb);c[la>>2]=11;break o}while(0);O=r+((e[Qa>>1]|0)+-4)|0;ig(c[p+52>>2]|0,d[O+1>>0]<<16|d[O>>0]<<24|d[O+2>>0]<<8|d[O+3>>0],3,c[p+4>>2]|0,la)}while(0);if(c[la>>2]|0){g=E;break c}m=p;k=c[ia>>2]|0}while(0);s=s+1|0;if((s|0)>=(k|0))break;else{q=j;p=m}}}while(0);p:do if((E|0)>1){if(J){m=0;n=0;while(1){o=c[La+(n<<2)>>2]|0;l=c[Ua+(n<<2)>>2]|0;j=c[(c[ua>>2]|0)+(l<<2)>>2]|0;l=b[(c[Ha>>2]|0)+(l<<1)>>1]|0;k=R+(l&65535)|0;p=_+m|0;do if(!(a[o+8>>0]|0)){O=(c[o+56>>2]|0)+8|0;N=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[O>>0]=N;a[O+1>>0]=N>>8;a[O+2>>0]=N>>16;a[O+3>>0]=N>>24}else{j=j+-4|0;if(l<<16>>16!=4)break;k=(Xa[c[S>>2]&255]($,j)|0)&65535}while(0);Lh($,n+h|0,j,k,p,c[o+4>>2]|0,la);if(c[la>>2]|0){g=E;break c}n=n+1|0;if((n|0)>=(v|0))break p;else m=k+m|0}}n=0;o=0;while(1){p=c[La+(o<<2)>>2]|0;k=c[Ua+(o<<2)>>2]|0;l=c[ua>>2]|0;j=c[l+(k<<2)>>2]|0;m=_+n|0;if(!(a[p+8>>0]|0)){k=R+(e[(c[Ha>>2]|0)+(k<<1)>>1]|0)|0;l=(c[p+56>>2]|0)+8|0;S=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[l>>0]=S;a[l+1>>0]=S>>8;a[l+2>>0]=S>>16;a[l+3>>0]=S>>24;l=m}else{cb[c[p+80>>2]&255](p,c[l+(k+-1<<2)>>2]|0,da);j=m+4|0;l=da;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(l>>>0<0|(l|0)==0&k>>>0<128))if(l>>>0<0|(l|0)==0&k>>>0<16384){S=bw(k|0,l|0,7)|0;L()|0;a[j>>0]=S&255|-128;a[j+1>>0]=k&127;j=2;break}else{j=wh(j,k,l)|0;break}else{a[j>>0]=k&127;j=1}while(0);k=j+4|0;l=0;j=m}Lh($,o+h|0,j,k,l,c[p+4>>2]|0,la);if(c[la>>2]|0){g=E;break c}o=o+1|0;if((o|0)>=(v|0))break;else n=k+n|0}}while(0);h=1-E|0;q:do if((h|0)<(E|0)){O=c[Ua>>2]|0;N=J&1;r:while(1){K=(h|0)<0?0-h|0:h;M=ea+K|0;do if(!(a[M>>0]|0)){if((h|0)<=-1?(S=K+-1|0,(c[Va+(S<<2)>>2]|0)<(c[Ua+(S<<2)>>2]|0)):0)break;if(!K){J=O;k=0;H=0}else{if((K|0)>(g|0)){j=K+-1|0;k=c[ia>>2]|0}else{k=K+-1|0;j=k;k=(c[Va+(k<<2)>>2]|0)+N|0}H=(c[Ua+(j<<2)>>2]|0)+N|0;J=(c[Ua+(K<<2)>>2]|0)-H|0}I=c[La+(K<<2)>>2]|0;w=I+56|0;z=c[w>>2]|0;x=I+9|0;A=d[x>>0]|0;B=I+64|0;C=(c[B>>2]|0)+(J<<1)|0;D=I+24|0;v=e[D>>1]|0;F=I+12|0;y=k+v+(d[F>>0]|0)|0;q=J+H|0;if((k|0)<(H|0)){s=z+(c[(c[I+52>>2]|0)+36>>2]|0)|0;t=z+(A+8+(d[I+10>>0]|0))|0;u=z;j=0;l=0;m=0;r=k;while(1){p=c[(c[ua>>2]|0)+(r<<2)>>2]|0;if(p>>>0>=t>>>0&p>>>0<s>>>0){n=e[(c[Ha>>2]|0)+(r<<1)>>1]|0;o=p+n|0;if((m|0)!=(o|0)){if(m|0)Oh(I,m-u&65535,l&65535)|0;if(o>>>0>s>>>0){j=0;break}else l=n}else l=l+n|0;j=j+1|0;m=p}r=r+1|0;if((r|0)>=(H|0)){aa=437;break}}if((aa|0)==437){aa=0;if(m|0)Oh(I,m-u&65535,l&65535)|0;if((j|0)>(v|0))break r}u=c[B>>2]|0;fw(u|0,u+(j<<1)|0,v<<1|0)|0;u=v-j|0}else u=v;if((y|0)>(q|0)){s=c[w>>2]|0;t=s+(c[(c[I+52>>2]|0)+36>>2]|0)|0;r=s+((d[x>>0]|0)+8+(d[I+10>>0]|0))|0;j=0;l=0;m=0;while(1){p=c[(c[ua>>2]|0)+(q<<2)>>2]|0;if(p>>>0>=r>>>0&p>>>0<t>>>0){n=e[(c[Ha>>2]|0)+(q<<1)>>1]|0;o=p+n|0;if((m|0)!=(o|0)){if(m|0)Oh(I,m-s&65535,l&65535)|0;if(o>>>0>t>>>0){j=0;break}else l=n}else l=l+n|0;j=j+1|0;m=p}q=q+1|0;if((q|0)>=(y|0)){aa=452;break}}do if((aa|0)==452){aa=0;if(!m)break;Oh(I,m-s&65535,l&65535)|0}while(0);j=u-j|0}else j=u;p=z+(A+5)|0;q=p+1|0;S=z+(((d[p>>0]<<8|d[q>>0])+65535&65535)+1)|0;c[da>>2]=S;s:do if(S>>>0<C>>>0)aa=468;else{if((k|0)>(H|0)){l=k-H|0;l=(l|0)>(J|0)?J:l;S=c[B>>2]|0;fw(S+(l<<1)|0,S|0,j<<1|0)|0;if(!(Th(I,C,da,S,H,l,ia)|0))j=j+l|0;else{aa=468;break}}l=a[F>>0]|0;if(l<<24>>24){o=0;do{m=k+(e[I+28+(o<<1)>>1]|0)|0;n=m-H|0;if((n|0)>-1&(n|0)<(J|0)){l=(c[B>>2]|0)+(n<<1)|0;if((j|0)>(n|0))fw(l+2|0,l|0,j-n<<1|0)|0;if(Th(I,C,da,l,m,1,ia)|0){aa=468;break s}j=j+1|0;l=a[F>>0]|0}o=o+1|0}while(o>>>0<(l&255)>>>0)}if(Th(I,C,da,(c[B>>2]|0)+(j<<1)|0,j+H|0,J-j|0,ia)|0){aa=468;break}b[D>>1]=J;a[F>>0]=0;S=z+(A+3)|0;a[S>>0]=J>>>8;a[S+1>>0]=b[D>>1];S=(c[da>>2]|0)-z|0;a[p>>0]=S>>>8;a[q>>0]=S;c[la>>2]=0}while(0);if((aa|0)==468){aa=0;if((J|0)>0){k=H;l=J;j=c[Ha>>2]|0;while(1){if(!(b[j+(k<<1)>>1]|0)){S=c[Ia>>2]|0;S=Xa[c[S+76>>2]&255](S,c[(c[ua>>2]|0)+(k<<2)>>2]|0)|0;j=c[Ha>>2]|0;b[j+(k<<1)>>1]=S}if((l|0)>1){k=k+1|0;l=l+-1|0}else break}}S=Rh(ia,H,J,I)|0;c[la>>2]=S;if(S|0){g=E;break c}}a[M>>0]=1;c[I+20>>2]=T-(c[Ya+(K<<2)>>2]|0)}while(0);h=h+1|0;if((h|0)>=(E|0))break q}c[lb>>2]=32306;c[lb+4>>2]=70299;c[lb+8>>2]=31517;Db(11,32001,lb);c[la>>2]=11;g=E;break c}while(0);t:do if(W){if(b[X>>1]|0){aa=488;break}l=c[La>>2]|0;if((c[l+20>>2]|0)<(d[$+9>>0]|0)){aa=488;break}Y=Qh(l,-1)|0;c[la>>2]=Y;if(Y|0)break;k=l+52|0;j=c[k>>2]|0;Y=c[l+56>>2]|0;W=c[V>>2]|0;h=d[l+9>>0]|0;X=(c[$+4>>2]|0)==1?100:0;V=Y+(h+5)|0;V=d[V>>0]<<8|d[V+1>>0];ew(W+V|0,Y+V|0,(c[j+36>>2]|0)-V|0)|0;ew(W+X|0,Y+h|0,(e[l+24>>1]<<1)+(e[l+18>>1]|0)|0)|0;a[$>>0]=0;h=Gf($)|0;do if(!h){h=Jh($)|0;if(h|0)break;if(!(a[j+17>>0]|0))h=c[la>>2]|0;else{h=hg($)|0;c[la>>2]=h}if(h|0)break t;$=Bh(c[k>>2]|0,l,c[l+4>>2]|0)|0;c[la>>2]=$;break t}while(0);c[la>>2]=h}else aa=488;while(0);do if((aa|0)==488){aa=0;if(!(Q&(U<<16>>16==0&(a[P>>0]|0)!=0)))break;h=0;do{$=c[La+(h<<2)>>2]|0;X=c[$+56>>2]|0;ig(Y,d[X+9>>0]<<16|d[X+8>>0]<<24|d[X+10>>0]<<8|d[X+11>>0],5,c[$+4>>2]|0,la);h=h+1|0}while((h|0)!=(E|0))}while(0);if((E|0)>(g|0)){g=E;break c}k=E;h=c[la>>2]|0;while(1){j=c[va+(k<<2)>>2]|0;if(!h){h=Bh(c[j+52>>2]|0,j,c[j+4>>2]|0)|0;c[la>>2]=h}if((k|0)<(g|0))k=k+1|0;else{g=E;break c}}}while(0);if((aa|0)==155){aa=0;c[ua>>2]=0}c[la>>2]=7;g=0;break}}else aa=130;while(0);if((aa|0)==130){aa=0;gw(va|0,0,(g<<2)+4|0)|0;g=0}h=c[ua>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{$=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);j=0;do{h=c[va+(j<<2)>>2]|0;do if(h|0){h=c[h+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);break}else{$=c[h+20>>2]|0;Y=$+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;$=$+136|0;c[h+16>>2]=c[$>>2];c[$>>2]=h;break}}while(0);j=j+1|0}while((j|0)!=(Z|0));if((g|0)>0){j=0;do{h=c[La+(j<<2)>>2]|0;do if(h|0){h=c[h+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);break}else{$=c[h+20>>2]|0;Z=$+120|0;c[Z>>2]=(c[Z>>2]|0)+-1;$=$+136|0;c[h+16>>2]=c[$>>2];c[$>>2]=h;break}}while(0);j=j+1|0}while((j|0)!=(g|0))}h=c[la>>2]|0}if(i){g=i;do if((c[14816]|0)>>>0<=g>>>0)if((c[14817]|0)>>>0>g>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;i=(c[14820]|0)+1|0;c[14820]=i;c[14821]=(i|0)<(c[14815]|0)&1;i=_;break b}else{g=Wa[c[29352>>2]&127](i)|0;break}else g=Wa[c[29352>>2]&127](i)|0;while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);i=_;break}else{$=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);i=_;break}}else i=_}while(0);a[ba>>0]=0;if(ca)aa=525}while(0);if((aa|0)==523){a[ba>>0]=0;aa=525}do if((aa|0)==525){g=c[ca+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{ca=c[g+20>>2]|0;ba=ca+120|0;c[ba>>2]=(c[ba>>2]|0)+-1;ca=ca+136|0;c[g+16>>2]=c[ca>>2];c[ca>>2]=g;break}}while(0);g=(a[na>>0]|0)+-1<<24>>24;a[na>>0]=g;j=g;g=f+120+(g<<24>>24<<2)|0}ca=c[g>>2]|0;c[oa>>2]=ca}while(!(h|0));if(!i){Ra=nb;return h|0}g=i;do if((c[14816]|0)>>>0>g>>>0)g=Wa[c[29352>>2]&127](i)|0;else{if((c[14817]|0)>>>0<=g>>>0){g=Wa[c[29352>>2]&127](i)|0;break}c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;mb=(c[14820]|0)+1|0;c[14820]=mb;c[14821]=(mb|0)<(c[14815]|0)&1;Ra=nb;return h|0}while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Ra=nb;return h|0}else{mb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Ra=nb;return h|0}return 0}function Nh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;i=c[f+28>>2]|0;j=i-g|0;if((j|0)<1){if((h|0)<=0){n=0;return n|0}i=0;while(1){if(a[e+i>>0]|0)break;i=i+1|0;if((i|0)>=(h|0)){i=0;n=30;break}}if((n|0)==30)return i|0;l=e+i|0;f=c[d+72>>2]|0;k=c[f+20>>2]|0;if((b[f+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[f+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){m=Ve(f)|0;n=14}}else n=10;do if((n|0)==10){j=c[k+40>>2]|0;if(j|0){n=j;return n|0}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){m=Wf(f)|0;n=14;break}else{m=Xf(f)|0;n=14;break}}while(0);if((n|0)==14?m|0:0){n=m;return n|0}gw(l|0,0,h-i|0)|0;n=0;return n|0}else{if((j|0)<(h|0)){i=Nh(d,e+j|0,f,i,h-j|0)|0;if(!i)l=j;else{n=i;return n|0}}else l=h;k=f+16|0;i=(c[k>>2]|0)+g|0;if(!(Lu(e,i,l)|0)){n=0;return n|0}j=c[d+72>>2]|0;f=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[f+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[f+96>>2]|0){i=Ve(j)|0;n=27}}else n=23;do if((n|0)==23){i=c[f+40>>2]|0;if(i|0){n=i;return n|0}if((c[f+148>>2]|0)>>>0>(c[f+152>>2]|0)>>>0){i=Wf(j)|0;n=27;break}else{i=Xf(j)|0;n=27;break}}while(0);do if((n|0)==27)if(!i){i=(c[k>>2]|0)+g|0;break}else{n=i;return n|0}while(0);fw(e|0,i|0,l|0)|0;n=0;return n|0}return 0}function Oh(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+112|0;B=E+96|0;y=E+80|0;v=E+64|0;t=E+48|0;s=E+32|0;r=E+16|0;q=E;k=f&65535;C=g&65535;u=C+k|0;D=c[e+56>>2]|0;z=d[e+9>>0]|0;A=z+1|0;o=A&65535;p=a[D+(z+2)>>0]|0;h=a[D+A>>0]|0;if(p<<24>>24==0?h<<24>>24==0:0){q=u;p=0;n=0;m=f&255;l=(f&65535)>>>8&255}else w=3;do if((w|0)==3){m=p&255;h=(h&255)<<8|m;i=h&65535;n=(i&65535)>>>8&255;do if(h>>>0<k>>>0){l=A;while(1){if(h>>>0<(l+4|0)>>>0)break;l=i&65535;h=D+l|0;p=a[h+1>>0]|0;m=p&255;h=(d[h>>0]|0)<<8|m;j=h&65535;if(h>>>0<k>>>0){o=i;i=j}else{w=10;break}}if((w|0)==10){o=i;n=(j&65535)>>>8&255;w=11;break}if(!h){n=(i&65535)>>>8&255;j=0;i=c[(c[e+52>>2]|0)+36>>2]|0;break}c[q>>2]=32306;c[q+4>>2]=64915;c[q+8>>2]=31517;Db(11,32001,q);D=11;Ra=E;return D|0}else{l=A;w=11}while(0);if((w|0)==11){i=c[(c[e+52>>2]|0)+36>>2]|0;if(h>>>0>(i+-4|0)>>>0){c[r>>2]=32306;c[r+4>>2]=64920;c[r+8>>2]=31517;Db(11,32001,r);D=11;Ra=E;return D|0}else j=h}do if((j+-1|0)>>>0<(u+3|0)>>>0){if(u>>>0>j>>>0){c[s>>2]=32306;c[s+4>>2]=64932;c[s+8>>2]=31517;Db(11,32001,s);D=11;Ra=E;return D|0}h=D+(j+2)|0;h=((d[h>>0]|0)<<8|(d[h+1>>0]|0))+j|0;if(h>>>0<=i>>>0){n=D+j|0;q=h;g=h-k&65535;h=m-u&255;p=a[n+1>>0]|0;n=a[n>>0]|0;break}c[t>>2]=32306;c[t+4>>2]=64935;c[t+8>>2]=31517;Db(11,32001,t);D=11;Ra=E;return D|0}else{q=u;h=0}while(0);do if(A>>>0<l>>>0?(x=D+(l+2)|0,x=((d[x>>0]|0)<<8|(d[x+1>>0]|0))+l|0,(x+3|0)>>>0>=k>>>0):0){if(x>>>0<=k>>>0){f=o;g=q-l&65535;h=(h&255)+k-x&255;break}c[v>>2]=32306;c[v+4>>2]=64948;c[v+8>>2]=31517;Db(11,32001,v);D=11;Ra=E;return D|0}while(0);i=D+(z+7)|0;j=a[i>>0]|0;if((j&255)>=(h&255)){a[i>>0]=(j&255)-(h&255);m=f&255;l=(f&65535)>>>8&255;k=f&65535;break}c[y>>2]=32306;c[y+4>>2]=64954;c[y+8>>2]=31517;Db(11,32001,y);D=11;Ra=E;return D|0}while(0);h=D+(z+5)|0;i=h+1|0;j=(d[h>>0]|0)<<8|(d[i>>0]|0);do if(j>>>0<k>>>0){B=D+(o&65535)|0;a[B>>0]=l;a[B+1>>0]=m}else{if((A|0)==(o&65535|0)&j>>>0<=k>>>0){B=D+A|0;a[B>>0]=n;a[B+1>>0]=p;a[h>>0]=q>>>8;a[i>>0]=q;break}c[B>>2]=32306;c[B+4>>2]=64962;c[B+8>>2]=31517;Db(11,32001,B);D=11;Ra=E;return D|0}while(0);if(!(b[(c[e+52>>2]|0)+22>>1]&12))h=D+k|0;else{h=D+k|0;gw(h|0,0,g&65535|0)|0}a[h>>0]=n;a[D+k+1>>0]=p;D=D+(k+2)|0;a[D>>0]=(g&65535)>>>8;a[D+1>>0]=g;D=e+20|0;c[D>>2]=(c[D>>2]|0)+C;D=0;Ra=E;return D|0}function Ph(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+48|0;r=t+32|0;o=t+16|0;s=t;n=b&255;i=n+1|0;b=f+i|0;b=(d[b>>0]|0)<<8|(d[b+1>>0]|0);q=e-g|0;a:do if((b|0)<=(q|0)){l=i;while(1){k=f+(b+2)|0;j=(d[k>>0]|0)<<8|(d[k+1>>0]|0);m=j-g|0;if((m|0)>-1)break;i=f+b|0;i=(d[i>>0]|0)<<8|(d[i+1>>0]|0);if((i|0)<=(j+b|0)){p=13;break}if((i|0)>(q|0)){b=i;break a}else{l=b;b=i}}if((p|0)==13){if(!i){f=0;Ra=t;return f|0}c[o>>2]=32306;c[o+4>>2]=64770;c[o+8>>2]=31517;Db(11,32001,o);c[h>>2]=11;f=0;Ra=t;return f|0}i=k+1|0;do if((m|0)<4){i=f+(n+7)|0;if((d[i>>0]|0)>57){f=0;Ra=t;return f|0}else{h=f+l|0;s=f+b|0;s=d[s>>0]|d[s+1>>0]<<8;a[h>>0]=s;a[h+1>>0]=s>>8;a[i>>0]=m+(d[i>>0]|0);b=m+b|0;break}}else{b=m+b|0;if((b|0)<=(q|0)){a[k>>0]=m>>>8;a[i>>0]=m;break}c[s>>2]=32306;c[s+4>>2]=64756;c[s+8>>2]=31517;Db(11,32001,s);c[h>>2]=11;f=0;Ra=t;return f|0}while(0);f=f+b|0;Ra=t;return f|0}while(0);if((b|0)<=(e+-4|0)){f=0;Ra=t;return f|0}c[r>>2]=32306;c[r+4>>2]=64777;c[r+8>>2]=31517;Db(11,32001,r);c[h>>2]=11;f=0;Ra=t;return f|0}function Qh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+144|0;F=G+128|0;x=G+112|0;w=G+96|0;o=G+80|0;p=G+64|0;l=G+48|0;k=G+32|0;i=G+16|0;h=G;D=c[f+56>>2]|0;E=d[f+9>>0]|0;z=e[f+18>>1]|0;q=b[f+24>>1]|0;u=q&65535;B=(u<<1)+z|0;v=f+52|0;y=c[(c[v>>2]|0)+36>>2]|0;C=D+(E+7)|0;do if((d[C>>0]|0)<=(g|0)){s=D+(E+1)|0;s=d[s>>0]<<8|d[s+1>>0];g=y+-4|0;if((s|0)>(g|0)){c[h>>2]=32306;c[h+4>>2]=64627;c[h+8>>2]=31517;Db(11,32001,h);F=11;Ra=G;return F|0}if(s){r=D+s|0;r=d[r>>0]<<8|d[r+1>>0];if((r|0)>(g|0)){c[i>>2]=32306;c[i+4>>2]=64630;c[i+8>>2]=31517;Db(11,32001,i);F=11;Ra=G;return F|0}j=(r|0)==0;if(!j){if(a[D+r>>0]|0){t=g;A=27;break}if(a[D+(r+1)>>0]|0){t=g;A=27;break}}n=D+B|0;m=D+(s+2)|0;m=d[m>>0]<<8|d[m+1>>0];i=D+(E+5)|0;i=d[i>>0]<<8|d[i+1>>0];if(s>>>0<=i>>>0){c[k>>2]=32306;c[k+4>>2]=64638;c[k+8>>2]=31517;Db(11,32001,k);F=11;Ra=G;return F|0}h=m+s|0;do if(j)if((h|0)>(y|0)){c[o>>2]=32306;c[o+4>>2]=64647;c[o+8>>2]=31517;Db(11,32001,o);F=11;Ra=G;return F|0}else l=0;else{if(r>>>0<h>>>0){c[l>>2]=32306;c[l+4>>2]=64641;c[l+8>>2]=31517;Db(11,32001,l);F=11;Ra=G;return F|0}g=D+(r+2)|0;g=d[g>>0]<<8|d[g+1>>0];if((g+r|0)<=(y|0)){fw(D+(g+h)|0,D+h|0,r-h|0)|0;m=g+m|0;l=g;break}c[p>>2]=32306;c[p+4>>2]=64643;c[p+8>>2]=31517;Db(11,32001,p);F=11;Ra=G;return F|0}while(0);g=m+i|0;fw(D+g|0,D+i|0,s-i|0)|0;if(q<<16>>16){i=D+z|0;do{j=i+1|0;k=d[i>>0]<<8|d[j>>0];if(k>>>0>=s>>>0){if(k>>>0<r>>>0){h=l;A=25}}else{h=m;A=25}if((A|0)==25){A=0;z=k+h|0;a[i>>0]=z>>>8;a[j>>0]=z}i=i+2|0}while(i>>>0<n>>>0)}}else{t=g;A=27}}else{t=y+-4|0;A=27}while(0);if((A|0)==27){a:do if(q<<16>>16){q=f+76|0;r=D+(E+5)|0;s=r+1|0;p=0;i=0;h=D;k=y;while(1){l=D+((p<<1)+z)|0;m=l+1|0;n=d[l>>0]<<8|d[m>>0];if(n>>>0<B>>>0|(n|0)>(t|0)){A=30;break}j=h+n|0;o=(Xa[c[q>>2]&255](f,j)|0)&65535;g=k-o|0;if((g|0)<(B|0)|(n+o|0)>(y|0)){A=32;break}a[l>>0]=g>>>8;a[m>>0]=g;if(!i)if((g|0)==(n|0))i=0;else{j=c[(c[c[v>>2]>>2]|0)+208>>2]|0;i=d[r>>0]<<8|d[s>>0];ew(j+i|0,D+i|0,k-i|0)|0;i=j;h=j;j=j+n|0;A=36}else A=36;if((A|0)==36){A=0;ew(D+g|0,j|0,o|0)|0}p=p+1|0;if(p>>>0>=u>>>0)break a;else k=g}if((A|0)==30){c[w>>2]=32306;c[w+4>>2]=64675;c[w+8>>2]=31517;Db(11,32001,w);F=11;Ra=G;return F|0}else if((A|0)==32){c[x>>2]=32306;c[x+4>>2]=64681;c[x+8>>2]=31517;Db(11,32001,x);F=11;Ra=G;return F|0}}else g=y;while(0);a[C>>0]=0}h=g-B|0;if((h+(d[C>>0]|0)|0)==(c[f+20>>2]|0)){F=D+(E+5)|0;a[F>>0]=g>>>8;a[F+1>>0]=g;a[D+(E+1)>>0]=0;a[D+(E+2)>>0]=0;gw(D+B|0,0,h|0)|0;F=0;Ra=G;return F|0}else{c[F>>2]=32306;c[F+4>>2]=64702;c[F+8>>2]=31517;Db(11,32001,F);F=11;Ra=G;return F|0}return 0}function Rh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+48|0;E=F+32|0;D=F+16|0;C=F;A=d[i+9>>0]|0;B=c[i+56>>2]|0;s=c[i+52>>2]|0;x=c[s+36>>2]|0;t=B+x|0;j=c[i+64>>2]|0;s=c[(c[s>>2]|0)+208>>2]|0;y=B+(A+5)|0;z=y+1|0;k=(d[y>>0]|0)<<8|(d[z>>0]|0);k=k>>>0>x>>>0?0:k;ew(s+k|0,B+k|0,x-k|0)|0;k=0;while(1)if(k>>>0<6?(c[f+40+(k<<2)>>2]|0)<=(g|0):0)k=k+1|0;else break;u=h+g|0;v=f+8|0;w=f+12|0;x=B;l=t;a:while(1){q=c[f+16+(k<<2)>>2]|0;r=f+40+(k<<2)|0;p=l;do{l=c[(c[v>>2]|0)+(g<<2)>>2]|0;m=l;o=e[(c[w>>2]|0)+(g<<1)>>1]|0;n=l+o|0;if(!(l>>>0>=B>>>0&l>>>0<t>>>0)){if(l>>>0<q>>>0&n>>>0>q>>>0){g=10;break a}}else{if(n>>>0>t>>>0){g=7;break a}l=s+(m-x)|0}p=p+(0-o)|0;n=p-x|0;m=n>>>8&255;a[j>>0]=m;n=n&255;a[j+1>>0]=n;j=j+2|0;if(p>>>0<j>>>0){g=12;break a}ew(p|0,l|0,o|0)|0;g=g+1|0;if((g|0)>=(u|0)){g=16;break a}}while((c[r>>2]|0)>(g|0));l=p;k=k+1|0}if((g|0)==7){c[C>>2]=32306;c[C+4>>2]=70094;c[C+8>>2]=31517;Db(11,32001,C);E=11;Ra=F;return E|0}else if((g|0)==10){c[D>>2]=32306;c[D+4>>2]=70099;c[D+8>>2]=31517;Db(11,32001,D);E=11;Ra=F;return E|0}else if((g|0)==12){c[E>>2]=32306;c[E+4>>2]=70105;c[E+8>>2]=31517;Db(11,32001,E);E=11;Ra=F;return E|0}else if((g|0)==16){D=i+24|0;b[D>>1]=h;a[i+12>>0]=0;E=B+(A+1)|0;a[E>>0]=0;a[E+1>>0]=0;E=B+(A+3)|0;a[E>>0]=(e[D>>1]|0)>>>8;a[E+1>>0]=b[D>>1];a[y>>0]=m;a[z>>0]=n;a[B+(A+7)>>0]=0;E=0;Ra=F;return E|0}return 0}function Sh(a,d){a=a|0;d=d|0;var e=0;e=c[a+4>>2]|0;e=Xa[c[e+76>>2]&255](e,c[(c[a+8>>2]|0)+(d<<2)>>2]|0)|0;b[(c[a+12>>2]|0)+(d<<1)>>1]=e;return e|0}function Th(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+16|0;y=A;w=A+12|0;x=d+56|0;k=c[x>>2]|0;l=c[f>>2]|0;v=i+h|0;if((i|0)<1){z=0;Ra=A;return z|0}i=0;while(1)if(i>>>0<6?(c[j+40+(i<<2)>>2]|0)<=(h|0):0)i=i+1|0;else break;s=j+12|0;t=k+1|0;u=k+2|0;r=j+8|0;q=d+9|0;p=d+52|0;o=c[j+16+(i<<2)>>2]|0;n=i;while(1){i=b[(c[s>>2]|0)+(h<<1)>>1]|0;if(!(i<<16>>16))i=Sh(j,h)|0;m=i&65535;if((a[t>>0]|0)==0?(a[u>>0]|0)==0:0)z=10;else{i=Ph(a[q>>0]|0,c[(c[p>>2]|0)+36>>2]|0,c[x>>2]|0,m,w)|0;if(!i)z=10}if((z|0)==10){z=0;if((l-e|0)<(m|0))break;l=l+(0-m)|0;i=l}d=c[(c[r>>2]|0)+(h<<2)>>2]|0;if(d>>>0<o>>>0&(d+m|0)>>>0>o>>>0){z=13;break}fw(i|0,d|0,m|0)|0;m=i-k|0;a[g>>0]=m>>>8;a[g+1>>0]=m;h=h+1|0;if((h|0)>=(v|0)){z=19;break}d=n+1|0;if((c[j+40+(n<<2)>>2]|0)>(h|0)){i=o;d=n}else i=c[j+16+(d<<2)>>2]|0;o=i;g=g+2|0;n=d}if((z|0)==13){c[y>>2]=32306;c[y+4>>2]=70190;c[y+8>>2]=31517;Db(11,32001,y)}else if((z|0)==19){c[f>>2]=l;z=0;Ra=A;return z|0}z=1;Ra=A;return z|0}function Uh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;t=w+4|0;u=w;v=f+12|0;n=f+8|0;h=c[n>>2]|0;do if(!(c[v>>2]|0)){m=c[h+28>>2]|0;l=((e[m+6>>1]|0)*40|0)+56|0;j=c[m+12>>2]|0;a:do if(!j){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;r=25;break}k=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){s=c[14978]|0;q=Tv(h|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=s>>>0)&1}h=Wa[c[29340>>2]&127](k)|0;if(h|0){i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;r=26}else r=26}}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[j+276>>1]|0)>>>0<l>>>0:0))){h=j+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];r=j+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break a}h=j+296|0;i=c[h>>2]|0;if(!i){h=j+292|0;break}else{c[h>>2]=c[i>>2];r=j+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break a}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}i=_d(j,l,0)|0;r=25}while(0);if((r|0)==25?i|0:0){h=i;r=26}if((r|0)==26){c[h+4>>2]=h+16;c[h>>2]=m;c[v>>2]=h;s=c[n>>2]|0;b[h+8>>1]=b[(c[s+28>>2]|0)+6>>1]|0;a[h+11>>0]=0;h=s;break}c[v>>2]=0;v=7;Ra=w;return v|0}while(0);l=c[g>>2]|0;r=a[h+60>>0]|0;s=f+32|0;c[s>>2]=r<<24>>24==1?78:r<<24>>24==2?76:77;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](256)|0;if(!h){v=7;Ra=w;return v|0}}else{h=Wa[c[29356>>2]&127](256)|0;if((c[14985]|0)>>>0<256)c[14985]=256;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;q=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=r>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){v=7;Ra=w;return v|0}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}gw(h|0,0,256)|0;if(l|0){q=g+4|0;k=l;j=l;while(1){i=c[q>>2]|0;if(i)if((j|0)==(i|0)){p=0;j=0}else{j=i+(c[k+4>>2]|0)|0;p=j}else{j=c[k+4>>2]|0;p=j}c[k+4>>2]=0;l=c[h>>2]|0;if(!l)i=h;else{o=0;i=h;do{c[t>>2]=0;c[u>>2]=0;m=t;b:while(1){n=l+8|0;while(1){if(($a[c[s>>2]&127](f,u,k+8|0,c[k>>2]|0,n,c[l>>2]|0)|0)>=1)break;c[m>>2]=k;m=k+4|0;k=c[m>>2]|0;if(!k){r=51;break b}}c[m>>2]=l;m=l+4|0;l=c[m>>2]|0;c[u>>2]=0;if(!l){r=53;break}}if((r|0)==51)c[m>>2]=l;else if((r|0)==53)c[m>>2]=k;k=c[t>>2]|0;c[i>>2]=0;o=o+1|0;i=h+(o<<2)|0;l=c[i>>2]|0}while((l|0)!=0)}c[i>>2]=k;if(!p)break;else k=p}}m=0;i=0;do{k=c[h+(m<<2)>>2]|0;if(k)if(!i)i=k;else{c[t>>2]=0;c[u>>2]=0;j=t;c:while(1){l=k+8|0;while(1){if(($a[c[s>>2]&127](f,u,i+8|0,c[i>>2]|0,l,c[k>>2]|0)|0)>=1)break;c[j>>2]=i;j=i+4|0;i=c[j>>2]|0;if(!i){r=63;break c}}c[j>>2]=k;j=k+4|0;k=c[j>>2]|0;c[u>>2]=0;if(!k){r=65;break}}if((r|0)==63)c[j>>2]=k;else if((r|0)==65)c[j>>2]=i;i=c[t>>2]|0}m=m+1|0}while((m|0)!=64);c[g>>2]=i;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}v=d[(c[v>>2]|0)+11>>0]|0;Ra=w;return v|0}function Vh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;t=x;a[b+56>>0]=1;e=b+64|0;w=b+36|0;g=b+72|0;f=b+104|0;if((c[f>>2]|0)==0?(d=Zh(c[(c[g>>2]|0)+24>>2]|0,f)|0,d|0):0){w=d;Ra=x;return w|0}d=Uh(e,w)|0;if(d|0){w=d;Ra=x;return w|0}k=c[f>>2]|0;j=c[(c[g>>2]|0)+12>>2]|0;v=b+112|0;h=v;g=c[h>>2]|0;h=c[h+4>>2]|0;i=((j|0)<0)<<31>>31;s=Sv(j|0,i|0,-1,-1)|0;r=L()|0;do if(r>>>0>0|(r|0)==0&s>>>0>2147483390){d=7;s=0;q=0;i=0;r=0;f=0;e=0}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](j)|0;if(!d){d=7;s=0;q=0;i=0;r=0;f=0;e=0;break}else e=d}else{d=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){s=c[14978]|0;r=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e){d=7;s=0;q=0;i=0;r=0;f=0;e=0;break}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}i=Zv(g|0,h|0,j|0,i|0)|0;L()|0;f=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;d=0;s=e;q=j;r=k;e=L()|0}while(0);g=b+92|0;c[g>>2]=(c[g>>2]|0)+1;g=c[b+44>>2]|0;h=((g|0)<0)<<31>>31;do if(g>>>0>=128)if(g>>>0>=16384){g=wh(t,g,h)|0;if((g|0)>0){u=22;break}else{h=i;g=i;break}}else{u=bw(g|0,h|0,7)|0;L()|0;a[t>>0]=u&255|-128;a[t+1>>0]=g&127;g=2;u=22;break}else{a[t>>0]=g&127;g=1;u=22}while(0);a:do if((u|0)==22){l=((q|0)<0)<<31>>31;k=g;h=i;while(1){if(d|0){g=i;break a}j=q-i|0;j=(k|0)>(j|0)?j:k;ew(s+i|0,t+(g-k)|0,j|0)|0;i=j+i|0;if((i|0)==(q|0)){i=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,l|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,i,d)|0;h=0;i=0}else d=0;k=k-j|0;if((k|0)<=0){g=i;break}}}while(0);i=c[w>>2]|0;if(i){p=((q|0)<0)<<31>>31;n=b+40|0;o=t+1|0;do{m=i;i=c[i+4>>2]|0;l=c[m>>2]|0;j=((l|0)<0)<<31>>31;do if(l>>>0>=128)if(l>>>0>=16384){j=wh(t,l,j)|0;if((j|0)>0){u=34;break}else break}else{j=bw(l|0,j|0,7)|0;L()|0;a[t>>0]=j&255|-128;j=2;k=o;u=33;break}else{j=1;k=t;u=33}while(0);if((u|0)==33){a[k>>0]=l&127;u=34}b:do if((u|0)==34){u=0;l=j;do{if(d|0)break b;k=q-g|0;k=(l|0)>(k|0)?k:l;ew(s+g|0,t+(j-l)|0,k|0)|0;g=k+g|0;if((g|0)==(q|0)){g=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,p|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,g,d)|0;h=0;g=0}else d=0;l=l-k|0}while((l|0)>0)}while(0);l=m+8|0;b=c[m>>2]|0;c:do if((b|0)>0){k=b;do{if(d|0)break c;j=q-g|0;j=(k|0)>(j|0)?j:k;ew(s+g|0,l+(b-k)|0,j|0)|0;g=j+g|0;if((g|0)==(q|0)){g=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,p|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,g,d)|0;h=0;g=0}else d=0;k=k-j|0}while((k|0)>0)}while(0);do if(!((m|0)==0|(c[n>>2]|0)!=0))if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{b=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0)}while((i|0)!=0)}c[w>>2]=0;if(d){t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u;if(!s){w=d;Ra=x;return w|0}}else{if(!s){t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u;w=0;Ra=x;return w|0}if((g|0)>(h|0)){w=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,g-h|0,w,d)|0}else d=0;t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u}if(!(c[7324]|0)){ab[c[29344>>2]&127](s);w=d;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);w=d;Ra=x;return w|0}return 0}function Wh(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=a[g+1>>0]|0;o=k&255;l=a[i+1>>0]|0;p=g+(d[g>>0]|0)|0;q=i+(d[i>>0]|0)|0;a:do if(k<<24>>24!=l<<24>>24){m=(k&255)>7;n=(l&255)>7;k=o-(l&255)|0;do if(!(m&n)){k=n?1:m?-1:k;if((k|0)<=0)if((a[q>>0]|0)<0){k=1;r=12;break a}else break;else{k=(a[p>>0]|0)<0?-1:k;break}}while(0);l=c[(c[b+8>>2]|0)+28>>2]|0;if(k){j=k;i=l;i=i+16|0;i=c[i>>2]|0;i=a[i>>0]|0;i=i<<24>>24==0;r=0-j|0;r=i?j:r;return r|0}}else{m=d[34845+o>>0]|0;b:do if((o+-1|0)>>>0<6){k=0;while(1){l=(d[p+k>>0]|0)-(d[q+k>>0]|0)|0;k=k+1|0;if(l|0)break;if(k>>>0>=m>>>0)break b}k=a[p>>0]|0;k=(a[q>>0]^k)<<24>>24<0?(((k&255)>>>6&2^2)&255)+-1|0:l;r=12;break a}while(0);l=c[(c[b+8>>2]|0)+28>>2]|0}while(0);if((r|0)==12){j=k;i=c[(c[b+8>>2]|0)+28>>2]|0;i=i+16|0;i=c[i>>2]|0;i=a[i>>0]|0;i=i<<24>>24==0;r=0-j|0;r=i?j:r;return r|0}if((e[l+6>>1]|0)<=1){r=0;return r|0}k=c[b+12>>2]|0;if(!(c[f>>2]|0)){_g(l,j,i,k);c[f>>2]=1}r=Fh(h,g,k,1)|0;return r|0}function Xh(b,f,g,h,i,j){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;p=s;r=g+(d[g>>0]|0)|0;q=i+(d[i>>0]|0)|0;k=g+1|0;o=a[k>>0]|0;l=o&255;do if(o<<24>>24<=-1){m=d[g+2>>0]|0;if(!(m&128)){o=l<<7&16256|m;break}n=d[g+3>>0]|0;if(!(n&128)){o=(l<<14|n)&2080895|m<<7&16256;break}else{Of(k,p)|0;n=p;o=c[n>>2]|0;o=((o|0)==(o|0)?0==(c[n+4>>2]|0):0)?o:-1;break}}else o=l;while(0);l=i+1|0;n=a[l>>0]|0;k=n&255;do if(n<<24>>24<=-1){m=d[i+2>>0]|0;if(!(m&128)){k=k<<7&16256|m;break}n=d[i+3>>0]|0;if(!(n&128)){k=(k<<14|n)&2080895|m<<7&16256;break}else{Of(l,p)|0;k=c[p>>2]|0;k=((k|0)==(k|0)?0==(c[p+4>>2]|0):0)?k:-1;break}}while(0);l=Lu(r,q,(((o|0)<(k|0)?o:k)+-13|0)/2|0)|0;m=o-k|0;if(!l){k=c[(c[b+8>>2]|0)+28>>2]|0;if(!m){if((e[k+6>>1]|0)<=1){j=0;Ra=s;return j|0}l=c[b+12>>2]|0;if(!(c[f>>2]|0)){_g(k,j,i,l);c[f>>2]=1}j=Fh(h,g,l,1)|0;Ra=s;return j|0}else l=m}else k=c[(c[b+8>>2]|0)+28>>2]|0;j=(a[c[k+16>>2]>>0]|0)==0?l:0-l|0;Ra=s;return j|0}function Yh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=c[a+12>>2]|0;if(!(c[b>>2]|0)){_g(c[(c[a+8>>2]|0)+28>>2]|0,g,f,h);c[b>>2]=1}return Fh(e,d,h,0)|0}function Zh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;i=j+8|0;h=j;d=c[7389]|0;if(d|0?Wa[d&127](202)|0:0){i=3338;Ra=j;return i|0}g=c[a>>2]|0;f=c[g+4>>2]|0;e=Sv(f|0,((f|0)<0)<<31>>31|0,-1,-1)|0;d=L()|0;do if(d>>>0>0|(d|0)==0&e>>>0>2147483390)a=7;else{if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](f)|0;if(!a){a=7;break}else d=a}else{a=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){k=c[14978]|0;e=Tv(d|0,e|0,a|0,((a|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=k>>>0)&1}d=Wa[c[29340>>2]&127](a)|0;if(!d){a=7;break}a=Wa[c[29352>>2]&127](d)|0;a=(c[14978]|0)+a|0;c[14978]=a;if(a>>>0>(c[14982]|0)>>>0)c[14982]=a;a=(c[14981]|0)+1|0;c[14981]=a;if(a>>>0>(c[14987]|0)>>>0)c[14987]=a}gw(d|0,0,f|0)|0;a=_a[c[g+24>>2]&127](g,0,d,4126,i)|0;if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}c[b>>2]=d;c[i>>2]=0;a=h;c[a>>2]=0;c[a+4>>2]=0;a=c[d>>2]|0;if(!a)a=0;else{Ya[c[a+40>>2]&127](d,18,h)|0;a=c[i>>2]|0}k=a;Ra=j;return k|0}while(0);c[i>>2]=a;k=a;Ra=j;return k|0}function _h(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;o=q;p=b+4|0;c[p>>2]=a;m=c[b>>2]|0;a:do if((m|0)>0){n=b+12|0;l=0;while(1){j=c[n>>2]|0;k=j+(l*56|0)|0;j=c[j+(l*56|0)+48>>2]|0;if(j|0){f=c[j>>2]|0;g=c[(c[f+8>>2]|0)+24>>2]|0;e=_h(f,c[j+4>>2]|0)|0;if(e|0){f=22;break}i=c[j+16>>2]|0;h=f+56|0;e=c[h>>2]|0;if(!e){f=f+64|0;e=Zh(g,h)|0;g=f;c[g>>2]=0;c[g+4>>2]=0;if(e|0){f=22;break}e=c[h>>2]|0;g=0;h=0}else{f=f+64|0;h=f;g=c[h>>2]|0;h=c[h+4>>2]|0}c[j+48>>2]=e;j=j+8|0;c[j>>2]=g;c[j+4>>2]=h;i=Sv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;e=f;c[e>>2]=i;c[e+4>>2]=j;e=ci(k)|0;if(e|0){f=22;break}}l=l+1|0;if((l|0)>=(m|0)){f=11;break}}if((f|0)==11){e=c[b>>2]|0;if((e|0)<=1)break;j=b+12|0;k=b+8|0;i=e;while(1){h=i+-1|0;e=(e|0)/2|0;if((i|0)>(e|0)){f=h-e<<1;e=f;f=f|1}else{n=c[k>>2]|0;f=h<<1;e=c[n+(f<<2)>>2]|0;f=c[n+((f|1)<<2)>>2]|0}g=c[j>>2]|0;if(c[g+(e*56|0)+24>>2]|0){if(c[g+(f*56|0)+24>>2]|0){n=c[p>>2]|0;c[o>>2]=0;n=($a[c[n+32>>2]&127](n,o,c[g+(e*56|0)+32>>2]|0,c[g+(e*56|0)+20>>2]|0,c[g+(f*56|0)+32>>2]|0,c[g+(f*56|0)+20>>2]|0)|0)<1;e=n?e:f}}else e=f;c[(c[k>>2]|0)+(h<<2)>>2]=e;if((i|0)<=2)break a;i=h;e=c[b>>2]|0}}else if((f|0)==22){Ra=q;return e|0}}while(0);p=d[(c[a+12>>2]|0)+11>>0]|0;Ra=q;return p|0}function $h(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+16|0;o=r;f=d;h=c[f>>2]|0;f=c[f+4>>2]|0;l=2;while(1)if((l|0)<(b|0))l=l<<1;else break;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](100)|0)!=0:0)q=17;else q=5;a:do if((q|0)==5){k=(l*60|0)+16|0;p=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;n=L()|0;if(!(n>>>0>0|(n|0)==0&p>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](k)|0;if(!g){q=17;break}else p=g}else{g=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){p=c[14978]|0;n=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=p>>>0)&1}i=Wa[c[29340>>2]&127](g)|0;if(!i){q=17;break}g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;p=i}else p=i}gw(p|0,0,k|0)|0;n=p+16|0;c[p>>2]=l;c[p+4>>2]=0;c[p+12>>2]=n;c[p+8>>2]=n+(l*56|0);c[e>>2]=p;n=(p|0)==0;g=n?7:0;i=n^1;b:do if((b|0)>0&i){l=p+12|0;m=a+40|0;j=0;while(1){i=c[l>>2]|0;k=i+(j*56|0)|0;g=ai(a,k,m,h,f)|0;if(g|0){q=21;break}g=o;c[g>>2]=0;c[g+4>>2]=0;g=bi(k,o)|0;s=k;h=o;s=Sv(c[h>>2]|0,c[h+4>>2]|0,c[s>>2]|0,c[s+4>>2]|0)|0;h=L()|0;f=i+(j*56|0)+8|0;i=f;c[i>>2]=s;c[i+4>>2]=h;if(g|0)break;g=ci(k)|0;h=c[f>>2]|0;f=c[f+4>>2]|0;j=j+1|0;i=(g|0)==0;if(!((j|0)<(b|0)&i)){q=25;break b}}if((q|0)==21)f=i+(j*56|0)+8|0;h=c[f>>2]|0;f=c[f+4>>2]|0}else q=25;while(0);do if((q|0)==25)if(!i)if(n)break a;else break;else{s=g;p=h;q=f;e=d;d=e;c[d>>2]=p;e=e+4|0;c[e>>2]=q;Ra=r;return s|0}while(0);if((c[p>>2]|0)>0){m=p+12|0;l=0;do{j=c[m>>2]|0;k=j+(l*56|0)|0;i=c[j+(l*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[j+(l*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[j+(l*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=k;j=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));l=l+1|0}while((l|0)<(c[p>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{s=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else q=17}while(0);if((q|0)==17){c[e>>2]=0;g=7}c[e>>2]=0;s=g;p=h;q=f;e=d;d=e;c[d>>2]=p;e=e+4|0;c[e>>2]=q;Ra=r;return s|0}function ai(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[7389]|0;if(g|0?Wa[g&127](201)|0:0){b=266;return b|0}h=b+44|0;if(c[h>>2]|0)c[h>>2]=0;n=b;c[n>>2]=e;c[n+4>>2]=f;n=d+8|0;l=c[n>>2]|0;n=c[n+4>>2]|0;k=b+8|0;i=k;c[i>>2]=l;c[i+4>>2]=n;i=c[d>>2]|0;j=b+24|0;c[j>>2]=i;d=a+8|0;g=c[d>>2]|0;a=c[(c[g+24>>2]|0)+156>>2]|0;m=((a|0)<0)<<31>>31;if(!((n|0)>(m|0)|(n|0)==(m|0)&l>>>0>a>>>0)?(c[c[i>>2]>>2]|0)>2:0){c[h>>2]=0;g=c[d>>2]|0}i=c[g+12>>2]|0;d=((i|0)<0)<<31>>31;e=Zv(e|0,f|0,i|0,d|0)|0;L()|0;h=b+36|0;g=c[h>>2]|0;if(!g){n=Sv(i|0,d|0,-1,-1)|0;m=L()|0;do if(!(m>>>0>0|(m|0)==0&n>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](i)|0;break}g=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;a=59064;d=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&d>>>0>0){n=c[14978]|0;m=Tv(d|0,a|0,g|0,((g|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){d=Wa[c[29352>>2]&127](g)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}else g=0}else g=0;while(0);c[h>>2]=g;c[b+40>>2]=i;d=(g|0)==0?7:0}else d=0;if(!((e|0)!=0&(d|0)==0)){n=d;return n|0}l=i-e|0;n=b;m=c[n>>2]|0;n=c[n+4>>2]|0;i=Sv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;h=L()|0;f=k;k=c[f>>2]|0;f=c[f+4>>2]|0;b=Tv(k|0,f|0,m|0,n|0)|0;L()|0;j=c[j>>2]|0;n=_a[c[(c[j>>2]|0)+8>>2]&127](j,g+e|0,(h|0)>(f|0)|(h|0)==(f|0)&i>>>0>k>>>0?b:l,m,n)|0;return n|0}function bi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;i=j;h=j+16|0;f=c[b+44>>2]|0;e=b;g=c[e>>2]|0;e=c[e+4>>2]|0;if(f|0){h=(Of(f+g|0,d)|0)&255;d=b;h=Sv(c[d>>2]|0,c[d+4>>2]|0,h|0,0)|0;d=L()|0;i=b;c[i>>2]=h;c[i+4>>2]=d;i=0;Ra=j;return i|0}f=c[b+40>>2]|0;e=Zv(g|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;L()|0;if((e|0)!=0&(f-e|0)>8){h=(Of((c[b+36>>2]|0)+e|0,d)|0)&255;d=b;h=Sv(c[d>>2]|0,c[d+4>>2]|0,h|0,0)|0;d=L()|0;i=b;c[i>>2]=h;c[i+4>>2]=d;i=0;Ra=j;return i|0}e=0;while(1){f=di(b,1,h)|0;if(f|0){e=9;break}g=a[c[h>>2]>>0]|0;a[i+(e&15)>>0]=g;if(g<<24>>24<0)e=e+1|0;else{e=8;break}}if((e|0)==8){Of(i,d)|0;i=0;Ra=j;return i|0}else if((e|0)==9){i=f;Ra=j;return i|0}return 0}function ci(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;g=i;f=g;c[f>>2]=0;c[f+4>>2]=0;f=a;d=c[f+4>>2]|0;h=a+8|0;e=c[h+4>>2]|0;do if(!((d|0)<(e|0)|((d|0)==(e|0)?(c[f>>2]|0)>>>0<(c[h>>2]|0)>>>0:0))){h=a+48|0;b=c[h>>2]|0;if(b){d=ei(b)|0;j=b+32|0;f=b+48|0;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];j=b+40|0;f=b+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if((c[j>>2]|0)==(e|0)?(c[j+4>>2]|0)==(f|0):0)c[b+20>>2]=1;if(!d)if(!(c[b+20>>2]|0)){b=ai(c[b>>2]|0,a,b+32|0,e,f)|0;if(!b)break;Ra=i;return b|0}else g=0;else g=d}else g=0;b=c[a+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+36>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);d=c[h>>2]|0;do if(d|0){e=c[d+4>>2]|0;do if(e|0){if((c[e>>2]|0)>0){f=e+12|0;b=0;do{yg((c[f>>2]|0)+(b*56|0)|0);b=b+1|0}while((b|0)<(c[e>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{j=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);b=a;d=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));j=g;Ra=i;return j|0}while(0);b=bi(a,g)|0;if(b|0){j=b;Ra=i;return j|0}j=c[g>>2]|0;c[a+20>>2]=j;j=di(a,j,a+32|0)|0;Ra=i;return j|0}function di(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;n=o;e=c[a+44>>2]|0;g=a;h=c[g>>2]|0;g=c[g+4>>2]|0;if(e|0){c[d>>2]=e+h;b=Sv(h|0,g|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;n=a;c[n>>2]=b;c[n+4>>2]=d;n=0;Ra=o;return n|0}m=a+40|0;e=c[m>>2]|0;f=((e|0)<0)<<31>>31;l=Zv(h|0,g|0,e|0,f|0)|0;L()|0;do if(!l){k=a+8|0;k=Tv(c[k>>2]|0,c[k+4>>2]|0,h|0,g|0)|0;j=L()|0;i=c[a+24>>2]|0;e=_a[c[(c[i>>2]|0)+8>>2]&127](i,c[a+36>>2]|0,(j|0)>(f|0)|(j|0)==(f|0)&k>>>0>e>>>0?e:k,h,g)|0;if(!e){e=c[m>>2]|0;break}else{n=e;Ra=o;return n|0}}while(0);k=e-l|0;if((k|0)>=(b|0)){c[d>>2]=(c[a+36>>2]|0)+l;d=a;b=Sv(c[d>>2]|0,c[d+4>>2]|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;n=a;c[n>>2]=b;c[n+4>>2]=d;n=0;Ra=o;return n|0}j=a+16|0;e=c[j>>2]|0;do if((e|0)<(b|0)){g=(e|0)<64;i=cw(e|0,((e|0)<0)<<31>>31|0,1)|0;h=L()|0;e=((b|0)<0)<<31>>31;h=g?0:h;i=g?128:i;while(1){f=cw(i|0,h|0,1)|0;g=L()|0;if((h|0)<(e|0)|(h|0)==(e|0)&i>>>0<b>>>0){h=g;i=f}else break}f=a+28|0;e=sb(c[f>>2]|0,i,h)|0;if(!e){n=7;Ra=o;return n|0}else{c[j>>2]=i;c[f>>2]=e;h=f;break}}else{e=a+28|0;h=e;e=c[e>>2]|0}while(0);ew(e|0,(c[a+36>>2]|0)+l|0,k|0)|0;j=a;j=Sv(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;l=L()|0;e=a;c[e>>2]=j;c[e+4>>2]=l;e=b-k|0;a:do if((e|0)>0){while(1){g=c[m>>2]|0;g=(e|0)>(g|0)?g:e;f=di(a,g,n)|0;if(f|0)break;ew((c[h>>2]|0)+(b-e)|0,c[n>>2]|0,g|0)|0;e=e-g|0;if((e|0)<=0)break a}n=f;Ra=o;return n|0}while(0);c[d>>2]=c[h>>2];n=0;Ra=o;return n|0}function ei(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+16|0;y=E+4|0;A=E;C=b+8|0;B=c[C>>2]|0;C=c[C+4>>2]|0;z=b+4|0;j=c[z>>2]|0;i=c[b+48>>2]|0;h=c[(c[(c[b>>2]|0)+8>>2]|0)+12>>2]|0;g=((h|0)<0)<<31>>31;x=Sv(h|0,g|0,-1,-1)|0;w=L()|0;do if(w>>>0>0|(w|0)==0&x>>>0>2147483390){d=7;x=0;v=0;e=0;w=0;g=0;f=0}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](h)|0;if(!d){d=7;x=0;v=0;e=0;w=0;g=0;f=0;break}else e=d}else{d=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){x=c[14978]|0;w=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=x>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e){d=7;x=0;v=0;e=0;w=0;g=0;f=0;break}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}w=Zv(B|0,C|0,h|0,g|0)|0;L()|0;g=Tv(B|0,C|0,w|0,((w|0)<0)<<31>>31|0)|0;d=0;x=e;v=h;e=w;w=i;f=L()|0}while(0);u=j+12|0;q=j+8|0;r=b+16|0;s=((v|0)<0)<<31>>31;t=y+1|0;i=e;h=e;while(1){n=c[u>>2]|0;o=c[(c[q>>2]|0)+4>>2]|0;p=c[n+(o*56|0)+20>>2]|0;if(!(c[n+(o*56|0)+24>>2]|0)){D=35;break}j=((h|0)<0)<<31>>31;k=((p|0)<0)<<31>>31;e=1;l=p;m=k;while(1){l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else e=e+1|0}l=Sv(g|0,f|0,h|0,j|0)|0;l=Sv(l|0,L()|0,p|0,k|0)|0;l=Sv(l|0,L()|0,e|0,0)|0;e=L()|0;m=c[r>>2]|0;m=Sv(B|0,C|0,m|0,((m|0)<0)<<31>>31|0)|0;j=L()|0;if((e|0)>(j|0)|(e|0)==(j|0)&l>>>0>m>>>0){D=35;break}do if(p>>>0>=128)if(p>>>0>=16384){e=wh(y,p,k)|0;if((e|0)>0){D=24;break}else break}else{e=bw(p|0,k|0,7)|0;L()|0;a[y>>0]=e&255|-128;e=2;j=t;D=23;break}else{e=1;j=y;D=23}while(0);if((D|0)==23){a[j>>0]=p&127;D=24}a:do if((D|0)==24){D=0;k=e;do{if(d|0)break a;j=v-h|0;j=(k|0)>(j|0)?j:k;ew(x+h|0,y+(e-k)|0,j|0)|0;h=j+h|0;if((h|0)==(v|0)){l=Sv(g|0,f|0,v|0,s|0)|0;m=L()|0;h=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,v-i|0,h,d)|0;i=0;h=0;g=l;f=m}else d=0;k=k-j|0}while((k|0)>0)}while(0);k=c[n+(o*56|0)+32>>2]|0;b:do if((p|0)>0){j=p;do{if(d|0)break b;e=v-h|0;e=(j|0)>(e|0)?e:j;ew(x+h|0,k+(p-j)|0,e|0)|0;h=e+h|0;if((h|0)==(v|0)){n=Sv(g|0,f|0,v|0,s|0)|0;o=L()|0;h=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,v-i|0,h,d)|0;i=0;h=0;g=n;f=o}else d=0;j=j-e|0}while((j|0)>0)}while(0);e=fi(c[z>>2]|0,A)|0;if(e){j=e;break}}if((D|0)==35)j=0;e=b+56|0;if(d){C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b;if(!x){D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}}else{if(!x){C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b;D=0;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}if((h|0)>(i|0)){D=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,h-i|0,D,d)|0}else d=0;C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b}if(!(c[7324]|0)){ab[c[29344>>2]&127](x);D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}else{D=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}return 0}function fi(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;k=q;l=a+8|0;f=c[(c[l>>2]|0)+4>>2]|0;p=c[a+4>>2]|0;n=a+12|0;e=ci((c[n>>2]|0)+(f*56|0)|0)|0;if(e|0){p=e;Ra=q;return p|0}c[k>>2]=0;e=c[n>>2]|0;a=(c[a>>2]|0)+f|0;if((a|0)>1){j=p+32|0;g=e+((f|1)*56|0)|0;f=e+((f&65534)*56|0)|0;h=a;do{i=h;h=(h|0)/2|0;e=f+24|0;do if(!(c[e>>2]|0))o=12;else{if((c[g+24>>2]|0?(m=$a[c[j>>2]&127](p,k,c[f+32>>2]|0,c[f+20>>2]|0,c[g+32>>2]|0,c[g+20>>2]|0)|0,(m|0)>=0):0)?!(f>>>0<g>>>0&(m|0)==0):0){if(!(c[e>>2]|0)){o=12;break}c[k>>2]=0;o=12;break}e=c[n>>2]|0;a=c[l>>2]|0;c[a+(h<<2)>>2]=(f-e|0)/56|0;g=e+((c[a+((h^1)<<2)>>2]|0)*56|0)|0;c[k>>2]=0}while(0);if((o|0)==12){o=0;e=c[n>>2]|0;a=c[l>>2]|0;c[a+(h<<2)>>2]=(g-e|0)/56|0;f=e+((c[a+((h^1)<<2)>>2]|0)*56|0)|0}}while((i|0)>3)}else a=c[l>>2]|0;c[b>>2]=(c[e+((c[a+4>>2]|0)*56|0)+24>>2]|0)==0&1;p=d[(c[p+12>>2]|0)+11>>0]|0;Ra=q;return p|0}function gi(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;j=n+32|0;i=n+24|0;h=n+16|0;g=n;k=c[b>>2]|0;do if(!(a[k+81>>0]|0)){m=b+4|0;if(c[c[m>>2]>>2]|0){Ra=n;return}if(!(c[b+16>>2]&1)){if(!(0==0?(c[k+32>>2]&1|0)==0:0)){c[g>>2]=32306;c[g+4>>2]=123725;c[g+8>>2]=31517;Db(11,32001,g);d=11;break}c[h>>2]=(d|0)==0?35133:d;d=dd(k,35135,h)|0;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[i>>2]=d;c[i+4>>2]=f;d=dd(k,35166,i)|0}c[c[m>>2]>>2]=d;c[j>>2]=32306;c[j+4>>2]=123732;c[j+8>>2]=31517;Db(11,32001,j);d=11;break}a:do if(!f)d=0;else{i=(Eu(f)|0)+1|0;b:do if(!k){k=Sv(i|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&k>>>0>2147483390){d=0;break a}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](i)|0;l=28;break}d=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){k=c[14978]|0;j=Tv(g|0,h|0,d|0,((d|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=k>>>0)&1}d=Wa[c[29340>>2]&127](d)|0;if(!d){d=0;break a}g=Wa[c[29352>>2]&127](d)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(!(c[k+272>>2]|0)){do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<i>>>0:0))){g=k+300|0;d=c[g>>2]|0;if(d|0){c[g>>2]=c[d>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=28;break b}g=k+296|0;d=c[g>>2]|0;if(!d){d=k+292|0;break}else{c[g>>2]=c[d>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=28;break b}}else d=k+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(k,i,0)|0;l=28}while(0);if((l|0)==28)if(!d){d=0;break}ew(d|0,f|0,i|0)|0}while(0);c[c[m>>2]>>2]=d;d=1}else d=7;while(0);c[b+12>>2]=d;Ra=n;return}function hi(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=c[b+20>>2]|0;if((q|0)<=0){r=0;return r|0}o=c[b+16>>2]|0;if(!f){b=0;while(1){g=ji((c[o+((b^b>>>0<2)<<4)+12>>2]|0)+24|0,e)|0;if(g|0)break;b=b+1|0;if((b|0)>=(q|0)){p=0;r=15;break}}if((r|0)==15)return p|0;r=g;return r|0}m=a[f>>0]|0;l=d[208+(m&255)>>0]|0;m=m<<24>>24==0;b=0;k=0;while(1){h=k^k>>>0<2;j=c[o+(h<<4)+12>>2]|0;h=c[o+(h<<4)>>2]|0;g=l-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(m|(g|0)!=0)){i=f;do{i=i+1|0;h=h+1|0;s=a[i>>0]|0;g=(d[208+(s&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(g|0)!=0))}if(!g){n=ji(j+24|0,e)|0;if(!n)b=n;else break}k=k+1|0;if((k|0)>=(q|0)){p=b;r=15;break}}if((r|0)==15)return p|0;s=n;return s|0}function ii(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;a:do switch(e<<24>>24){case 45:{e=1;f=b+1|0;g=15;break}case 43:{e=0;f=b+1|0;g=15;break}case 48:{switch(a[b+1>>0]|0){case 88:case 120:break;default:{h=0;e=48;break a}}e=b+2|0;f=a[e>>0]|0;if(!(a[880+(f&255)>>0]&8)){e=0;f=b;g=15}else{if(f<<24>>24==48){b=b+3|0;while(1){e=a[b>>0]|0;if(e<<24>>24==48)b=b+1|0;else{f=e;break}}}else b=e;if(!(a[880+(f&255)>>0]&8)){e=0;b=1}else{g=0;e=0;do{h=f<<24>>24;e=(0-(h>>>6&1)&9)+h&15|e<<4;g=g+1|0;f=a[b+g>>0]|0;h=a[880+(f&255)>>0]&8}while(g>>>0<8&h<<24>>24!=0);b=h<<24>>24==0}if(!((e|0)>-1&b)){d=0;return d|0}c[d>>2]=e;d=1;return d|0}break}default:h=0}while(0);if((g|0)==15){h=e;b=f;e=a[f>>0]|0}if(((e&255)+-48|0)>>>0>=10){d=0;return d|0}if(e<<24>>24==48)do{b=b+1|0;e=a[b>>0]|0}while(e<<24>>24==48);if((e+-48&255)<10){e=(e<<24>>24)+-48|0;g=((e|0)<0)<<31>>31;f=a[b+1>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+2>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+3>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+4>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+5>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+6>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+7>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+8>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+9>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;f=L()|0;if(((a[b+10>>0]|0)+-48&255)<10){d=0;return d|0}else b=f}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else{e=0;b=0}g=Tv(e|0,b|0,h|0,0)|0;f=L()|0;if((f|0)>0|(f|0)==0&g>>>0>2147483647){d=0;return d|0}c[d>>2]=(h|0)==0?e:0-e|0;d=1;return d|0}function ji(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=c[b+12>>2]|0;if(!i){g=b+4|0;f=b+8|0}else{g=a[e>>0]|0;if(!(g<<24>>24))f=0;else{f=0;h=e;do{h=h+1|0;f=G(f+(d[208+(g&255)>>0]|0)|0,-1640531535)|0;g=a[h>>0]|0}while(g<<24>>24!=0)}f=(f>>>0)%((c[b>>2]|0)>>>0)|0;g=i+(f<<3)|0;f=i+(f<<3)+4|0}g=c[g>>2]|0;if(!g){e=59292;e=e+8|0;e=c[e>>2]|0;return e|0}j=d[208+(d[e>>0]|0)>>0]|0;while(1){f=c[f>>2]|0;g=g+-1|0;b=c[f+12>>2]|0;i=a[b>>0]|0;h=(d[208+(i&255)>>0]|0)-j|0;if(!(i<<24>>24==0|(h|0)!=0)){i=e;do{b=b+1|0;i=i+1|0;k=a[b>>0]|0;h=(d[208+(k&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(h|0)!=0))}if(!h){g=14;break}if(!g){f=59292;g=14;break}}if((g|0)==14){k=f+8|0;k=c[k>>2]|0;return k|0}return 0}function ki(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+80|0;l=o;if(!h){Ra=o;return 0}i=c[h>>2]|0;if(!i){Ra=o;return 0}n=c[h+8>>2]|0;if(!n){Ra=o;return 0}k=c[f>>2]|0;j=c[f+4>>2]|0;m=Sd(k,i,j)|0;if(!m){Ra=o;return 0}h=c[h+4>>2]|0;a:do if(h|0){f=a[i>>0]|0;g=(d[208+(f&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(f<<24>>24==0|(g|0)!=0)){f=h;do{i=i+1|0;f=f+1|0;p=a[i>>0]|0;g=(d[208+(p&255)>>0]|0)-(d[208+(d[f>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(g|0)!=0))}if(!g){g=c[m+8>>2]|0;if(!g)break;while(1){f=g+55|0;f=d[f>>0]|d[f+1>>0]<<8;if((f&3)==2)break;g=c[g+20>>2]|0;if(!g)break a}h=g;i=g+55|0;g=f}else{g=hi(k,h,j)|0;if(!g)break;p=g+55|0;h=g;i=p;g=d[p>>0]|d[p+1>>0]<<8}p=(e[h+50>>1]|0)+1|0;g=g&-5;a[i>>0]=g;a[i+1>>0]=g>>8;g=h+8|0;li(n,p,c[g>>2]|0,h);p=d[i>>0]|d[i+1>>0]<<8|128;a[i>>0]=p;a[i+1>>0]=p>>8;if(c[h+36>>2]|0){Ra=o;return 0}b[m+44>>1]=b[c[g>>2]>>1]|0;p=m+36|0;c[p>>2]=c[p>>2]|16;Ra=o;return 0}while(0);p=m+46|0;k=l+48|0;b[k>>1]=b[p>>1]|0;li(n,1,m+44|0,l);b[p>>1]=b[k>>1]|0;p=m+36|0;c[p>>2]=c[p>>2]|16;Ra=o;return 0}function li(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=Ra;Ra=Ra+16|0;o=p;k=a[f>>0]|0;if((g|0)>0&k<<24>>24!=0){m=0;do{do if((k+-48&255)<10){j=0;do{j=(j*10|0)+-48+(k<<24>>24)|0;f=f+1|0;k=a[f>>0]|0}while((k+-48&255)<10);if(j>>>0>=8){if(j>>>0>255){l=40;k=0;do{l=(l&65535)+40|0;q=j;j=bw(j|0,k|0,4)|0;r=k;k=L()|0}while(r>>>0>0|(r|0)==0&q>>>0>4095);l=l&65535}else{l=40;k=0}if(k>>>0>0|(k|0)==0&j>>>0>15)do{l=(l&65535)+10&65535;r=j;j=bw(j|0,k|0,1)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>31)}else{if(j>>>0<2){j=0;break}l=40;k=0;do{l=(l&65535)+65526|0;j=cw(j|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&j>>>0<8);l=l&65535}j=(l&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535}else j=0;while(0);b[h+(m<<1)>>1]=j;f=(a[f>>0]|0)==32?f+1|0:f;m=m+1|0;k=a[f>>0]|0}while((m|0)<(g|0)&k<<24>>24!=0)}g=i+55|0;r=(d[g>>0]|d[g+1>>0]<<8)&-69;a[g>>0]=r;a[g+1>>0]=r>>8;if(!(a[f>>0]|0)){Ra=p;return}m=i+48|0;do{do if(!(md(35228,f,31411,91)|0)){r=d[g>>0]|d[g+1>>0]<<8|4;a[g>>0]=r;a[g+1>>0]=r>>8}else{if(md(35239,f,31411,91)|0){if(md(35249,f,31411,91)|0)break;r=d[g>>0]|d[g+1>>0]<<8|64;a[g>>0]=r;a[g+1>>0]=r>>8;break}c[o>>2]=0;ii(f+3|0,o)|0;j=c[o>>2]|0;k=((j|0)<0)<<31>>31;if(j>>>0<8)if(j>>>0<2)j=0;else{l=40;do{l=(l&65535)+65526|0;j=cw(j|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&j>>>0<8);l=l&65535;n=39}else{if(j>>>0>255){l=40;do{l=(l&65535)+40|0;r=j;j=bw(j|0,k|0,4)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>4095);l=l&65535}else l=40;if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;r=j;j=bw(j|0,k|0,1)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>31);n=39}else n=39}if((n|0)==39){n=0;j=(l&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535}b[m>>1]=j}while(0);a:while(1){j=a[f>>0]|0;switch(j<<24>>24){case 32:{n=45;break a}case 0:break a;default:{}}f=f+1|0}if((n|0)==45){n=0;do{f=f+1|0;j=a[f>>0]|0}while(j<<24>>24==32)}}while(j<<24>>24!=0);Ra=p;return}function mi(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=b+12|0;o=c[t>>2]|0;n=(o|0)==0;if(n){h=0;g=b+4|0;i=b+8|0}else{h=a[e>>0]|0;if(!(h<<24>>24))g=0;else{g=0;i=e;do{i=i+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[i>>0]|0}while(h<<24>>24!=0)}i=(g>>>0)%((c[b>>2]|0)>>>0)|0;h=i;g=o+(i<<3)|0;i=o+(i<<3)+4|0}g=c[g>>2]|0;a:do if(!g)k=59292;else{m=d[208+(d[e>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;g=g+-1|0;k=c[i+12>>2]|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-m|0;if(!(r<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j){k=i;break a}if(!g){k=59292;break}}}while(0);g=k+8|0;l=c[g>>2]|0;i=(f|0)==0;if(l|0){if(!i){c[g>>2]=f;c[k+12>>2]=e;b=l;return b|0}e=c[k+4>>2]|0;g=c[k>>2]|0;if(!e){c[b+8>>2]=g;i=g;j=g}else{c[e>>2]=g;j=c[k>>2]|0;i=j}if(i|0)c[i+4>>2]=e;if(!n){g=o+(h<<3)+4|0;if((c[g>>2]|0)==(k|0))c[g>>2]=j;s=o+(h<<3)|0;c[s>>2]=(c[s>>2]|0)+-1}if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}e=b+4|0;s=(c[e>>2]|0)+-1|0;c[e>>2]=s;if(s|0){b=l;return b|0}h=b+8|0;g=c[h>>2]|0;c[h>>2]=0;h=c[t>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[t>>2]=0;c[b>>2]=0;if(g|0)do{h=g;g=c[g>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);c[e>>2]=0;b=l;return b|0}if(i){b=0;return b|0}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](16)|0;if(!g){b=f;return b|0}else r=g}else{g=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;o=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=r>>>0)&1}i=Wa[c[29340>>2]&127](g)|0;if(!i){b=f;return b|0}g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;r=i}else r=i}c[r+12>>2]=e;c[r+8>>2]=f;f=b+4|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if((g>>>0>9?(p=c[b>>2]|0,g>>>0>p<<1>>>0):0)?(q=g<<4>>>0>1024?128:g<<1,(q|0)!=(p|0)):0){g=q<<3;q=Sv(g|0,0,-1,-1)|0;p=L()|0;do if(!(p>>>0>0|(p|0)==0&q>>>0>2147483390)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](g)|0;break}j=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<g>>>0)c[14985]=g;i=59064;g=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&g>>>0>0){q=c[14978]|0;p=Tv(g|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&p>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(i){g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else i=0}else i=0;while(0);if(i){g=c[t>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[t>>2]=i;o=Wa[c[29352>>2]&127](i)|0;n=o>>>3;c[b>>2]=n;gw(i|0,0,o&-8|0)|0;o=b+8|0;g=c[o>>2]|0;c[o>>2]=0;if(g|0){j=0;while(1){k=c[g+12>>2]|0;l=a[k>>0]|0;if(!(l<<24>>24))h=0;else{h=0;do{k=k+1|0;h=G(h+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[k>>0]|0}while(l<<24>>24!=0)}k=(h>>>0)%(n>>>0)|0;h=g;g=c[g>>2]|0;l=i+(k<<3)|0;do if(l){m=c[l>>2]|0;if(!m){c[l>>2]=1;c[i+(k<<3)+4>>2]=h;s=86;break}q=i+(k<<3)+4|0;k=c[q>>2]|0;c[l>>2]=m+1;c[q>>2]=h;if(k){c[h>>2]=k;l=k+4|0;c[h+4>>2]=c[l>>2];k=c[l>>2]|0;if(!k){c[o>>2]=h;j=h}else c[k>>2]=h;c[l>>2]=h;h=j}else s=86}else s=86;while(0);if((s|0)==86){s=0;c[h>>2]=j;if(j|0)c[j+4>>2]=h;c[h+4>>2]=0;c[o>>2]=h}if(!g)break;else j=h}}h=a[e>>0]|0;if(!(h<<24>>24))g=0;else{g=0;do{e=e+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[e>>0]|0}while(h<<24>>24!=0)}h=(g>>>0)%((c[b>>2]|0)>>>0)|0}}g=c[t>>2]|0;e=g+(h<<3)|0;do if(!((g|0)==0|(e|0)==0)){i=c[e>>2]|0;if(!i){c[e>>2]=1;c[g+(h<<3)+4>>2]=r;break}t=g+(h<<3)+4|0;g=c[t>>2]|0;c[e>>2]=i+1;c[t>>2]=r;if(g|0){c[r>>2]=g;t=g+4|0;c[r+4>>2]=c[t>>2];s=c[t>>2]|0;c[((s|0)==0?b+8|0:s)>>2]=r;c[t>>2]=r;b=0;return b|0}}while(0);g=b+8|0;h=c[g>>2]|0;c[r>>2]=h;if(h|0)c[h+4>>2]=r;c[r+4>>2]=0;c[g>>2]=r;b=0;return b|0}function ni(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+4|0;e=c[f>>2]|0;if(!(e&8404992)){e=c[d+12>>2]|0;if(e|0?(a[d>>0]|0)!=-86:0)ni(b,e);e=c[d+16>>2]|0;do if(!e){e=d+20|0;if(!(c[f>>2]&2048)){e=c[e>>2]|0;if(!e)break;ri(b,e);break}else{e=c[e>>2]|0;if(!e)break;pi(b,e,1);break}}else ni(b,e);while(0);e=c[f>>2]|0;if(e&16777216){oi(b,c[d+44>>2]|0);e=c[f>>2]|0}}do if(e&65536|0?(g=c[d+8>>2]|0,g|0):0){if(b|0){if(c[b+480>>2]|0){Xd(b,g);break}e=g;if((c[b+304>>2]|0)>>>0<=e>>>0?(c[b+308>>2]|0)>>>0>e>>>0:0){e=b+300|0;c[g>>2]=c[e>>2];c[e>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{e=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);if(c[f>>2]&134217728|0)return;if(b|0){if(c[b+480>>2]|0){Xd(b,d);return}g=d;if((c[b+304>>2]|0)>>>0<=g>>>0?(c[b+308>>2]|0)>>>0>g>>>0:0){g=b+300|0;c[d>>2]=c[g>>2];c[g>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{g=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function oi(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)return;d=c[b+36>>2]|0;if(d|0)ni(a,d);d=c[b+8>>2]|0;if(d|0)ri(a,d);d=c[b+12>>2]|0;if(d|0)ri(a,d);d=c[b+28>>2]|0;if(d|0)ni(a,d);d=c[b+24>>2]|0;if(d|0)ni(a,d);d=c[b>>2]|0;do if(d|0){if(a|0){if(c[a+480>>2]|0){Xd(a,d);break}e=d;if((c[a+304>>2]|0)>>>0<=e>>>0?(c[a+308>>2]|0)>>>0>e>>>0:0){e=a+300|0;c[d>>2]=c[e>>2];c[e>>2]=d;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);d=c[b+4>>2]|0;a:do if(d){do if(a|0){if(!(c[a+480>>2]|0)){e=d;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[d>>2]=c[e>>2];c[e>>2]=d}else Xd(a,d);d=b;e=34;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);e=33;break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);e=33;break}}else e=33;while(0);if((e|0)==33)if(a){d=b;e=34}if((e|0)==34){if(c[a+480>>2]|0){Xd(a,d);return}e=b;if((c[a+304>>2]|0)>>>0<=e>>>0?(c[a+308>>2]|0)>>>0>e>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}else b=d}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function pi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!b)return;j=(a|0)==0;k=a+480|0;l=a+304|0;m=a+308|0;n=a+300|0;while(1){i=b;b=c[b+52>>2]|0;e=c[i>>2]|0;if(e|0)ri(a,e);qi(a,c[i+32>>2]|0);e=c[i+36>>2]|0;if(e|0)ni(a,e);e=c[i+40>>2]|0;if(e|0)ri(a,e);e=c[i+44>>2]|0;if(e|0)ni(a,e);e=c[i+48>>2]|0;if(e|0)ri(a,e);e=c[i+60>>2]|0;if(e|0)ni(a,e);e=c[i+72>>2]|0;if(e|0)do{h=e;e=c[e+32>>2]|0;oi(a,h)}while((e|0)!=0);h=c[i+64>>2]|0;do if(h|0){a:do if((c[h>>2]|0)>0){if(j){f=0;while(1){e=c[h+8+(f<<4)+4>>2]|0;if(e|0)ri(0,e);e=c[h+8+(f<<4)+8>>2]|0;if(e|0)pi(0,e,1);e=c[h+8+(f<<4)>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{g=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);f=f+1|0;if((f|0)>=(c[h>>2]|0))break a}}g=0;do{e=c[h+8+(g<<4)+4>>2]|0;if(e|0)ri(a,e);e=c[h+8+(g<<4)+8>>2]|0;if(e|0)pi(a,e,1);e=c[h+8+(g<<4)>>2]|0;b:do if(e|0){if(c[k>>2]|0){Xd(a,e);break}f=e;do if((c[l>>2]|0)>>>0<=f>>>0){if((c[m>>2]|0)>>>0<=f>>>0)break;c[e>>2]=c[n>>2];c[n>>2]=e;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);g=g+1|0}while((g|0)<(c[h>>2]|0))}while(0);if(!j){if(c[k>>2]|0){Xd(a,h);break}g=h;if((c[l>>2]|0)>>>0<=g>>>0?(c[m>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[n>>2];c[n>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(d|0){if(!j){if(c[k>>2]|0){Xd(a,i);break}h=i;if((c[l>>2]|0)>>>0<=h>>>0?(c[m>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!b)break;else d=1}return}function qi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(!d)return;if((c[d>>2]|0)>0){n=(b|0)==0;o=b+480|0;q=b+304|0;r=b+308|0;l=b+300|0;j=0;k=d+8|0;while(1){e=c[k+4>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[k+8>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[k+12>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=k+37|0;do if(a[e>>0]&2?(p=c[k+64>>2]|0,p|0):0){if(!n){if(c[o>>2]|0){Xd(b,p);break}i=p;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[p>>2]=c[l>>2];c[l>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{i=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);if(a[e>>0]&4?(m=c[k+64>>2]|0,m|0):0)ri(b,m);e=c[k+16>>2]|0;do if(e|0){if(!n?c[o>>2]|0:0){Vi(b,e);break}h=e+32|0;i=(c[h>>2]|0)+-1|0;c[h>>2]=i;if(!i)Vi(b,e)}while(0);e=c[k+20>>2]|0;if(e|0)pi(b,e,1);e=c[k+44>>2]|0;if(e|0)ni(b,e);e=c[k+48>>2]|0;do if(e|0){i=e+4|0;f=c[e>>2]|0;a:do if((c[i>>2]|0)>0){if(n){g=0;while(1){f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[e>>2]|0;if((g|0)>=(c[i>>2]|0))break a}}h=0;do{f=c[f+(h<<3)>>2]|0;b:do if(f|0){if(c[o>>2]|0){Xd(b,f);break}g=f;do if((c[q>>2]|0)>>>0<=g>>>0){if((c[r>>2]|0)>>>0<=g>>>0)break;c[f>>2]=c[l>>2];c[l>>2]=f;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{g=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);h=h+1|0;f=c[e>>2]|0}while((h|0)<(c[i>>2]|0))}while(0);c:do if(f){do if(!n){if(!(c[o>>2]|0)){g=f;if((c[q>>2]|0)>>>0>g>>>0)break;if((c[r>>2]|0)>>>0<=g>>>0)break;c[f>>2]=c[l>>2];c[l>>2]=f}else Xd(b,f);f=90;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);f=89;break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);f=89;break}}else f=89;while(0);if((f|0)==89){f=0;if(!n)f=90}if((f|0)==90){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);j=j+1|0;if((j|0)>=(c[d>>2]|0))break;else k=k+72|0}}if(b|0){if(c[b+480>>2]|0){Xd(b,d);return}r=d;if((c[b+304>>2]|0)>>>0<=r>>>0?(c[b+308>>2]|0)>>>0>r>>>0:0){r=b+300|0;c[d>>2]=c[r>>2];c[r>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{r=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function ri(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=c[b>>2]|0;d=b+4|0;g=(a|0)==0;h=a+480|0;i=a+304|0;j=a+308|0;k=a+300|0;if(g){f=e;while(1){e=c[d>>2]|0;if(e|0)ni(0,e);e=c[d+4>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[d+8>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);if((f|0)>1){d=d+20|0;f=f+-1|0}else break}}else{f=e;while(1){e=c[d>>2]|0;if(e|0)ni(a,e);e=c[d+4>>2]|0;do if(e|0){if(c[h>>2]|0){Xd(a,e);break}l=e;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[e>>2]=c[k>>2];c[k>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[d+8>>2]|0;do if(e|0){if(c[h>>2]|0){Xd(a,e);break}l=e;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[e>>2]=c[k>>2];c[k>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if((f|0)>1){d=d+20|0;f=f+-1|0}else break}}if(!g){if(c[h>>2]|0){Xd(a,b);return}l=b;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{l=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function si(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+176|0;O=P+144|0;I=P+120|0;H=P+112|0;G=P+104|0;F=P+96|0;E=P+72|0;D=P+64|0;C=P+56|0;B=P+32|0;K=P+24|0;J=P+16|0;A=P+8|0;z=P;w=P+164|0;x=P+160|0;y=P+156|0;M=e+20|0;N=c[M>>2]|0;a:do if(!g)i=h;else{r=e+16|0;s=e+12|0;q=e+8|0;t=e+4|0;u=(f|0)==0;v=e+24|0;i=h;while(1){if(!(c[r>>2]|0))break a;if((g+-1|0)>>>0>=(c[s>>2]|0)>>>0){L=5;break}j=(c[q>>2]|0)+(g>>>3)|0;k=d[j>>0]|0;l=1<<(g&7);if(l&k|0){L=7;break}a[j>>0]=l|k;o=i+-1|0;p=c[t>>2]|0;if(Za[c[p+204>>2]&127](p,g,y,0)|0){L=9;break}p=c[(c[y>>2]|0)+4>>2]|0;do if(u){i=c[e>>2]|0;if((o|0)!=0&(a[i+17>>0]|0)!=0){k=d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0];i=eg(i,k,w,x)|0;b:do if((i|0)<7){switch(i|0){case 0:break;default:{L=40;break b}}i=a[w>>0]|0;j=c[x>>2]|0;if(!(i<<24>>24==4&(j|0)==(g|0))){c[I>>2]=k;c[I+4>>2]=4;c[I+8>>2]=g;c[I+12>>2]=i&255;c[I+16>>2]=j;ti(e,35625,I)}}else{if((i|0)<3082)switch(i|0){case 7:break;default:{L=40;break b}}else switch(i|0){case 3082:break;default:{L=40;break b}}c[v>>2]=1;L=40}while(0);if((L|0)==40){L=0;c[H>>2]=k;ti(e,35596,H)}i=o}else i=o}else{n=d[p+5>>0]<<16|d[p+4>>0]<<24|d[p+6>>0]<<8|d[p+7>>0];j=c[e>>2]|0;if(a[j+17>>0]|0){j=eg(j,g,w,x)|0;c:do if((j|0)<7){switch(j|0){case 0:break;default:{L=14;break c}}j=a[w>>0]|0;k=c[x>>2]|0;if(!(j<<24>>24==2&(k|0)==0)){c[B>>2]=g;c[B+4>>2]=2;c[B+8>>2]=0;c[B+12>>2]=j&255;c[B+16>>2]=k;ti(e,35625,B)}}else{if((j|0)<3082)switch(j|0){case 7:break;default:{L=14;break c}}else switch(j|0){case 3082:break;default:{L=14;break c}}c[v>>2]=1;L=14}while(0);if((L|0)==14){L=0;c[K>>2]=g;ti(e,35596,K)}j=c[e>>2]|0}if(n>>>0>(((c[j+36>>2]|0)>>>2)+-2|0)>>>0){c[C>>2]=g;ti(e,35455,C);i=i+-2|0;break}d:do if((n|0)>0){i=0;while(1){m=p+((i<<2)+8)|0;l=d[m+3>>0]|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|l;if(a[j+17>>0]|0){g=eg(j,m,w,x)|0;e:do if((g|0)<7){switch(g|0){case 0:break;default:{L=25;break e}}j=a[w>>0]|0;g=c[x>>2]|0;if(!(j<<24>>24==2&(g|0)==0)){c[E>>2]=m;c[E+4>>2]=2;c[E+8>>2]=0;c[E+12>>2]=j&255;c[E+16>>2]=g;ti(e,35625,E)}}else{if((g|0)<3082)switch(g|0){case 7:break;default:{L=25;break e}}else switch(g|0){case 3082:break;default:{L=25;break e}}c[v>>2]=1;L=25}while(0);if((L|0)==25){L=0;c[D>>2]=m;ti(e,35596,D)}}do if((m+-1|0)>>>0<(c[s>>2]|0)>>>0){j=(c[q>>2]|0)+(m>>>3)|0;k=d[j>>0]|0;g=1<<(l&7);if(!(g&k)){a[j>>0]=g|k;break}else{c[G>>2]=m;ti(e,35569,G);break}}else{c[F>>2]=m;ti(e,35546,F)}while(0);i=i+1|0;if((i|0)==(n|0))break d;j=c[e>>2]|0}}while(0);i=o-n|0}while(0);g=d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0];j=c[y>>2]|0;do if(j|0)if(!(b[j+28>>1]&32)){Df(j);break}else{p=c[j+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[j+16>>2]=c[p>>2];c[p>>2]=j;break}while(0);if(!g)break a}if((L|0)==5){c[z>>2]=g;ti(e,35546,z)}else if((L|0)==7){c[A>>2]=g;ti(e,35569,A)}else if((L|0)==9){c[J>>2]=g;ti(e,35433,J);i=o}}while(0);if(!i){Ra=P;return}if((N|0)!=(c[M>>2]|0)){Ra=P;return}c[O>>2]=(f|0)==0?35525:35520;c[O+4>>2]=h-i;c[O+8>>2]=h;ti(e,35494,O);Ra=P;return}function ti(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;i=j+16|0;h=j;f=b+16|0;g=c[f>>2]|0;if(!g){Ra=j;return}c[f>>2]=g+-1;f=b+20|0;c[f>>2]=(c[f>>2]|0)+1;c[h>>2]=e;f=b+40|0;if(c[b+56>>2]|0)ub(f,35594,1);g=c[b+28>>2]|0;if(g|0){e=c[b+36>>2]|0;c[i>>2]=c[b+32>>2];c[i+4>>2]=e;Eb(f,g,i)}tb(f,d,h);if((a[b+60>>0]|0)!=7){Ra=j;return}c[b+24>>2]=1;Ra=j;return}function ui(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;ma=Ra;Ra=Ra+240|0;fa=ma+216|0;da=ma+208|0;U=ma+200|0;T=ma+176|0;S=ma+168|0;R=ma+144|0;Q=ma+136|0;P=ma+128|0;O=ma+120|0;N=ma+104|0;t=ma+80|0;s=ma+72|0;q=ma+64|0;p=ma+56|0;o=ma+48|0;n=ma+40|0;k=ma+32|0;K=ma+232|0;L=ma+228|0;W=ma+24|0;M=ma;ga=W;c[ga>>2]=i;c[ga+4>>2]=j;ga=f+28|0;ha=c[ga>>2]|0;ia=f+32|0;ja=c[ia>>2]|0;ka=f+36|0;la=c[ka>>2]|0;u=c[f>>2]|0;ea=c[u+36>>2]|0;if(!g){la=0;Ra=ma;return la|0}if((g+-1|0)>>>0>=(c[f+12>>2]|0)>>>0){c[k>>2]=g;ti(f,35546,k);la=0;Ra=ma;return la|0}k=(c[f+8>>2]|0)+(g>>>3)|0;l=d[k>>0]|0;m=1<<(g&7);if(m&l|0){c[n>>2]=g;ti(f,35569,n);la=0;Ra=ma;return la|0}a[k>>0]=m|l;c[ga>>2]=35679;c[ia>>2]=g;k=c[u>>2]|0;k=Za[c[k+204>>2]&127](k,g,K,0)|0;a:do if(!k){k=c[K>>2]|0;ca=c[k+8>>2]|0;l=ca+4|0;if((c[l>>2]|0)!=(g|0)){c[ca+56>>2]=c[k+4>>2];c[ca+72>>2]=k;c[ca+52>>2]=u;c[l>>2]=g;a[ca+9>>0]=(g|0)==1?100:0}J=a[ca>>0]|0;a[ca>>0]=0;k=Gf(ca)|0;do if(!k){k=Jh(ca)|0;if(k|0){c[q>>2]=k;ti(f,35765,q);k=-1;break}aa=c[ca+56>>2]|0;ba=d[ca+9>>0]|0;c[ga>>2]=35787;l=aa+(ba+5)|0;l=(d[l>>0]<<8|d[l+1>>0])+65535&65535;H=l+1|0;o=aa+(ba+3)|0;o=d[o>>0]<<8|d[o+1>>0];I=ca+8|0;G=a[I>>0]|0;X=ba+12-((G&255)<<2)|0;r=o+-1|0;p=aa+(X+(r<<1))|0;if(!(G<<24>>24)){n=aa+(ba+8)|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];if(a[u+17>>0]|0){c[ga>>2]=35813;k=eg(c[f>>2]|0,n,K,L)|0;b:do if((k|0)<7){switch(k|0){case 0:break;default:{V=18;break b}}k=a[K>>0]|0;m=c[L>>2]|0;if(!(k<<24>>24==5&(m|0)==(g|0))){c[t>>2]=n;c[t+4>>2]=5;c[t+8>>2]=g;c[t+12>>2]=k&255;c[t+16>>2]=m;ti(f,35625,t)}}else{if((k|0)<3082)switch(k|0){case 7:break;default:{V=18;break b}}else switch(k|0){case 3082:break;default:{V=18;break b}}c[f+24>>2]=1;V=18}while(0);if((V|0)==18){c[s>>2]=n;ti(f,35596,s)}}k=ui(f,n,W,i,j)|0;n=0;i=0}else{i=c[f+64>>2]|0;c[i>>2]=0;k=-1;n=1}F=f+16|0;G=(o|0)==0;if(!G){y=ea+-4|0;z=ca+80|0;A=M+18|0;B=ca+2|0;C=M+12|0;D=M+16|0;E=ea+-5|0;w=u+17|0;x=f+24|0;v=r;m=1;u=p;while(1){if(!(c[F>>2]|0))break;c[ka>>2]=v;j=d[u>>0]<<8|d[u+1>>0];u=u+-2|0;c:do if(j>>>0<=l>>>0|j>>>0>y>>>0){c[N>>2]=j;c[N+4>>2]=H;c[N+8>>2]=y;ti(f,35841,N);m=0}else{t=aa+j|0;cb[c[z>>2]&255](ca,t,M);if((j+(e[A>>1]|0)|0)>>>0>ea>>>0){ti(f,35871,O);m=0;break}if(a[B>>0]|0){s=M;o=c[s>>2]|0;s=c[s+4>>2]|0;q=W;p=c[q>>2]|0;q=c[q+4>>2]|0;if(!n)if((s|0)<(q|0)|(s|0)==(q|0)&o>>>0<p>>>0)n=s;else V=36;else if((s|0)>(q|0)|(s|0)==(q|0)&o>>>0>p>>>0)V=36;else n=s;if((V|0)==36){V=0;n=P;c[n>>2]=o;c[n+4>>2]=s;ti(f,35895,P);n=M;o=c[n>>2]|0;n=c[n+4>>2]|0}s=W;c[s>>2]=o;c[s+4>>2]=n;n=0}o=c[C>>2]|0;p=e[D>>1]|0;if(o>>>0>p>>>0){q=((E+o-p|0)>>>0)/(y>>>0)|0;s=t+((e[A>>1]|0)+-4)|0;s=d[s+1>>0]<<16|d[s>>0]<<24|d[s+2>>0]<<8|d[s+3>>0];if(a[w>>0]|0){o=eg(c[f>>2]|0,s,K,L)|0;d:do if((o|0)<7){switch(o|0){case 0:break;default:{V=42;break d}}o=a[K>>0]|0;p=c[L>>2]|0;if(o<<24>>24==3&(p|0)==(g|0))break;c[R>>2]=s;c[R+4>>2]=3;c[R+8>>2]=g;c[R+12>>2]=o&255;c[R+16>>2]=p;ti(f,35625,R)}else{if((o|0)<3082)switch(o|0){case 7:break;default:{V=42;break d}}else switch(o|0){case 3082:break;default:{V=42;break d}}c[x>>2]=1;V=42}while(0);if((V|0)==42){V=0;c[Q>>2]=s;ti(f,35596,Q)}}si(f,0,s,q)}if(a[I>>0]|0){p=j+-1+(e[A>>1]|0)|j<<16;o=(c[i>>2]|0)+1|0;c[i>>2]=o;c[i+(o<<2)>>2]=p;q=o>>>1;if(!q)break;s=i+(q<<2)|0;j=c[s>>2]|0;if(j>>>0<=p>>>0)break;while(1){c[s>>2]=p;c[i+(o<<2)>>2]=j;o=q>>>1;if(!o)break c;p=c[s>>2]|0;s=i+(o<<2)|0;j=c[s>>2]|0;if(j>>>0<=p>>>0)break c;else{t=q;q=o;o=t}}}p=d[t+1>>0]<<16|d[t>>0]<<24|d[t+2>>0]<<8|d[t+3>>0];if(a[w>>0]|0){n=eg(c[f>>2]|0,p,K,L)|0;e:do if((n|0)<7){switch(n|0){case 0:break;default:{V=51;break e}}n=a[K>>0]|0;o=c[L>>2]|0;if(n<<24>>24==5&(o|0)==(g|0))break;c[T>>2]=p;c[T+4>>2]=5;c[T+8>>2]=g;c[T+12>>2]=n&255;c[T+16>>2]=o;ti(f,35625,T)}else{if((n|0)<3082)switch(n|0){case 7:break;default:{V=51;break e}}else switch(n|0){case 3082:break;default:{V=51;break e}}c[x>>2]=1;V=51}while(0);if((V|0)==51){V=0;c[S>>2]=p;ti(f,35596,S)}}n=W;n=ui(f,p,W,c[n>>2]|0,c[n+4>>2]|0)|0;if((n|0)==(k|0)){n=0;break}ti(f,35919,U);k=n;n=0}while(0);if((v|0)<=0)break;else v=v+-1|0}U=W;V=c[U+4>>2]|0;W=h;c[W>>2]=c[U>>2];c[W+4>>2]=V;c[ga>>2]=0;if(!m){a[ca>>0]=J;break}}else{U=W;V=c[U+4>>2]|0;W=h;c[W>>2]=c[U>>2];c[W+4>>2]=V;c[ga>>2]=0}f:do if((c[F>>2]|0)>0){if(!(a[I>>0]|0)){i=c[f+64>>2]|0;c[i>>2]=0;if(!G){s=ca+76|0;while(1){n=aa+((r<<1)+X)|0;n=d[n>>0]<<8|d[n+1>>0];n=n+-1+((Xa[c[s>>2]&255](ca,aa+n|0)|0)&65535)|n<<16;m=(c[i>>2]|0)+1|0;c[i>>2]=m;c[i+(m<<2)>>2]=n;o=m>>>1;g:do if(o|0?(Y=i+(o<<2)|0,Z=c[Y>>2]|0,Z>>>0>n>>>0):0){p=Y;q=Z;while(1){c[p>>2]=n;c[i+(m<<2)>>2]=q;m=o>>>1;if(!m)break g;n=c[p>>2]|0;p=i+(m<<2)|0;q=c[p>>2]|0;if(q>>>0<=n>>>0)break;else{W=o;o=m;m=W}}}while(0);if((r|0)>0)r=r+-1|0;else break}}}m=aa+(ba+1)|0;m=d[m>>0]<<8|d[m+1>>0];if(m|0)do{o=aa+(m+2)|0;o=m+-1+(d[o>>0]<<8|d[o+1>>0])|m<<16;n=(c[i>>2]|0)+1|0;c[i>>2]=n;c[i+(n<<2)>>2]=o;p=n>>>1;h:do if(p|0?(_=i+(p<<2)|0,$=c[_>>2]|0,$>>>0>o>>>0):0){q=_;r=$;while(1){c[q>>2]=o;c[i+(n<<2)>>2]=r;n=p>>>1;if(!n)break h;o=c[q>>2]|0;q=i+(n<<2)|0;r=c[q>>2]|0;if(r>>>0<=o>>>0)break;else{Z=p;p=n;n=Z}}}while(0);Z=aa+m|0;m=d[Z>>0]<<8|d[Z+1>>0]}while((m|0)!=0);n=c[i>>2]|0;i:do if(n){t=i+4|0;m=0;while(1){j=c[t>>2]|0;n=i+(n<<2)|0;c[t>>2]=c[n>>2];c[n>>2]=-1;n=(c[i>>2]|0)+-1|0;c[i>>2]=n;j:do if(n>>>0>=2){s=c[t>>2]|0;r=1;o=2;do{p=o|1;q=r;r=(c[i+(o<<2)>>2]|0)>>>0>(c[i+(p<<2)>>2]|0)>>>0?p:o;o=i+(r<<2)|0;p=c[o>>2]|0;if(s>>>0<p>>>0)break j;c[i+(q<<2)>>2]=p;c[o>>2]=s;o=r<<1;n=c[i>>2]|0}while(o>>>0<=n>>>0)}while(0);o=l&65535;p=j>>>16;if(p>>>0<=o>>>0)break;m=m+-1-o+p|0;if(!n){l=j;break i}else l=j}c[da>>2]=p;c[da+4>>2]=g;ti(f,35944,da);if(c[i>>2]|0)break f}else m=0;while(0);m=m+-1+ea-(l&65535)|0;l=d[aa+(ba+7)>>0]|0;if((m|0)!=(l|0)){c[fa>>2]=m;c[fa+4>>2]=l;c[fa+8>>2]=g;ti(f,35981,fa)}}while(0);if(!ca)break a}else{c[p>>2]=k;ti(f,35727,p);k=-1}while(0);l=c[ca+72>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{fa=c[l+20>>2]|0;g=fa+120|0;c[g>>2]=(c[g>>2]|0)+-1;fa=fa+136|0;c[l+16>>2]=c[fa>>2];c[fa>>2]=l;break}}else{c[o>>2]=k;ti(f,35689,o);k=-1}while(0);c[ga>>2]=ha;c[ia>>2]=ja;c[ka>>2]=la;la=k+1|0;Ra=ma;return la|0}function vi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[a>>2]|0;g=a+4|0;if(d|0)do{e=d;d=c[d>>2]|0;f=c[g>>2]|0;do if(f){if(c[f+480>>2]|0){Xd(f,e);break}i=e;if((c[f+304>>2]|0)>>>0<=i>>>0?(c[f+308>>2]|0)>>>0>i>>>0:0){i=f+300|0;c[e>>2]=c[i>>2];c[i>>2]=e}else h=9}else h=9;while(0);do if((h|0)==9){h=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0)}while((d|0)!=0);c[a>>2]=0;b[a+24>>1]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+20>>2]=0;b[a+26>>1]=1;d=c[g>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,a);return}i=a;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[a>>2]=c[i>>2];c[i>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{i=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function wi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;e=g;f=c[a+12>>2]|0;if(!f)c[b>>2]=a;else{wi(f,b,e);c[(c[e>>2]|0)+8>>2]=a}e=a+8|0;b=c[e>>2]|0;if(!b){c[d>>2]=a;Ra=g;return}else{wi(b,e,d);Ra=g;return}}function xi(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if(!d){a=0;return a|0}if((b|0)<=1){e=d+8|0;c[a>>2]=c[e>>2];c[e>>2]=0;c[d+12>>2]=0;a=d;return a|0}b=b+-1|0;d=xi(a,b)|0;e=c[a>>2]|0;if(!e){a=d;return a|0}else{c[e+12>>2]=d;d=e+8|0;c[a>>2]=c[d>>2];a=xi(a,b)|0;c[d>>2]=a;return e|0}return 0}function yi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Ra;Ra=Ra+16|0;g=f;c[g>>2]=e;d=Me(a,d,g)|0;if(!d){g=7;Ra=f;return g|0}g=zi(a,b,d)|0;lb(a,d);Ra=f;return g|0}function zi(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;h=o;g=qd(d,g,-1,128,0,h,0)|0;if(g|0){f=g;Ra=o;return f|0}n=c[h>>2]|0;g=Gc(n)|0;a:do if((g|0)==100){j=n+120|0;k=n+144|0;l=n+40|0;if(!n)while(1){g=Gc(0)|0;if((g|0)!=100)break a}do{g=c[j>>2]|0;if(!((g|0)!=0?(b[k>>1]|0)!=0:0)){g=c[n>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0)i=c[g+16>>2]|0;else if(!(h&1))i=Gg(g,1)|0;else i=0;g=c[n>>2]|0;h=c[l>>2]|0;if((h|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7}else g=c[g+68>>2]&h;c[l>>2]=g;do if(i|0){if(av(i,36682,3)|0?av(i,36686,3)|0:0)break;g=zi(d,f,i)|0;if(g|0)break a}while(0);g=Gc(n)|0}while((g|0)==100)}while(0);l=(g|0)==101?0:g;if(l|0){k=pd(d)|0;g=c[f>>2]|0;do if(g|0){if(d|0){if(c[d+480>>2]|0){Xd(d,g);break}j=g;if((c[d+304>>2]|0)>>>0<=j>>>0?(c[d+308>>2]|0)>>>0>j>>>0:0){j=d+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);b:do if(!k)g=0;else{j=(Eu(k)|0)+1|0;c:do if(!d){d=Sv(j|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&d>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](j)|0;m=59;break}g=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){d=c[14978]|0;i=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=d>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[d+272>>2]|0){if(a[d+81>>0]|0){g=0;break b}}else{do if(!(0<0|(0==0?(e[d+276>>1]|0)>>>0<j>>>0:0))){h=d+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];m=d+284|0;c[m>>2]=(c[m>>2]|0)+1;m=59;break c}h=d+296|0;g=c[h>>2]|0;if(!g){g=d+292|0;break}else{c[h>>2]=c[g>>2];m=d+284|0;c[m>>2]=(c[m>>2]|0)+1;m=59;break c}}else g=d+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(d,j,0)|0;m=59}while(0);if((m|0)==59)if(!g){g=0;break}ew(g|0,k|0,j|0)|0}while(0);c[f>>2]=g}gc(n)|0;f=l;Ra=o;return f|0}function Ai(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+48|0;u=D+24|0;x=D+16|0;w=D+8|0;l=D;q=D+32|0;v=D+28|0;p=g+60|0;s=c[p>>2]|0;r=c[g+56>>2]|0;c[v>>2]=0;t=f+352|0;k=c[t>>2]|0;a:do if(k|0){while(1){if((c[k+4>>2]|0)==(g|0))break;k=c[k+8>>2]|0;if(!k)break a}c[l>>2]=c[g>>2];f=dd(f,36709,l)|0;c[j>>2]=f;f=6;Ra=D;return f|0}while(0);n=c[g>>2]|0;if(!n){f=7;Ra=D;return f|0}o=(Eu(n)|0)+1|0;z=(f|0)==0;b:do if(z){y=Sv(o|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&y>>>0>2147483390){f=7;Ra=D;return f|0}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;A=31;break}k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){y=c[14978]|0;m=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=y>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l){f=7;Ra=D;return f|0}k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;y=l}else y=l}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){f=7;Ra=D;return f|0}}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<o>>>0:0))){l=f+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];A=f+284|0;c[A>>2]=(c[A>>2]|0)+1;A=31;break b}l=f+296|0;k=c[l>>2]|0;if(!k){k=f+292|0;break}else{c[l>>2]=c[k>>2];A=f+284|0;c[A>>2]=(c[A>>2]|0)+1;A=31;break b}}else k=f+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(f,o,0)|0;A=31}while(0);if((A|0)==31)if(!k){f=7;Ra=D;return f|0}else y=k;ew(y|0,n|0,o|0)|0;if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](28)|0;if(!k)A=43;else n=k}else{k=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){o=c[14978]|0;n=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;n=l}else n=l}else A=43}if((A|0)==43){k=f+81|0;if((a[k>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[k>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;k=f+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[f+236>>2]|0;if(k|0)c[k+12>>2]=7}if(c[f+480>>2]|0){Xd(f,y);f=7;Ra=D;return f|0}C=y;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){f=f+300|0;c[y>>2]=c[f>>2];c[f>>2]=y;f=7;Ra=D;return f|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](y);f=7;Ra=D;return f|0}else{f=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);f=7;Ra=D;return f|0}}k=n+8|0;l=k+20|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[n>>2]=f;c[n+4>>2]=h;l=c[g+72>>2]|0;m=c[f+16>>2]|0;if(!l)k=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0}c[(c[p>>2]|0)+4>>2]=c[m+(k<<4)>>2];c[q+4>>2]=g;c[q>>2]=n;p=q+8|0;c[p>>2]=c[t>>2];l=q+12|0;c[l>>2]=0;c[t>>2]=q;m=n+8|0;k=$a[i&127](f,c[h+8>>2]|0,r,s,m,v)|0;c[t>>2]=c[p>>2];c:do switch(k|0){case 7:{l=f+81|0;if((a[l>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[l>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;l=f+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[f+236>>2]|0;if(l){c[l+12>>2]=7;A=67}else A=67}else A=67;break}case 0:{k=c[m>>2]|0;if(k){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[c[m>>2]>>2]=c[h>>2];k=n+12|0;c[k>>2]=1;if(!(c[l>>2]|0)){c[u>>2]=c[g>>2];l=dd(f,36781,u)|0;c[j>>2]=l;l=c[n>>2]|0;C=(c[k>>2]|0)+-1|0;c[k>>2]=C;if(C|0){k=1;A=117;break c}k=c[m>>2]|0;if(k|0)Wa[c[(c[k>>2]|0)+16>>2]&127](k)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,n);k=1;A=117;break c}C=n;if((c[l+304>>2]|0)>>>0<=C>>>0?(c[l+308>>2]|0)>>>0>C>>>0:0){k=l+300|0;c[n>>2]=c[k>>2];c[k>>2]=n;k=1;A=117;break c}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);k=1;A=117;break c}else{k=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);k=1;A=117;break c}}h=g+64|0;c[n+24>>2]=c[h>>2];c[h>>2]=n;h=g+42|0;k=b[h>>1]|0;if(k<<16>>16>0){u=g+4|0;t=g+36|0;m=0;s=0;l=c[u>>2]|0;do{if(!(a[l+(s<<4)+15>>0]&4))i=59952;else{i=c[l+(s<<4)>>2]|0;i=i+(Eu(i)|0)+1|0}q=(Eu(i)|0)&1073741823;d:do if(!q)A=114;else{n=0;e:while(1){r=i+n|0;do if(r|0){j=d[r>>0]|0;o=208+j|0;do if((j|32|0)==104){o=r+1|0;j=d[o>>0]|0;p=208+j|0;if((j|32|0)==105){o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=100){B=208+p|0;C=100;A=103;break}o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=100){B=208+p|0;C=100;A=103;break}o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=101){B=208+p|0;C=101;A=103;break}o=d[o+1>>0]|0;if((o|32|0)!=110){B=208+o|0;C=110;A=103}}else{B=p;C=105;A=103}}else{B=o;C=104;A=103}while(0);if((A|0)==103?(A=0,(C|0)!=(d[B>>0]|0)):0)break;if(n|0?(a[i+(n+-1)>>0]|0)!=32:0)break;o=a[i+(n+6)>>0]|0;switch(o<<24>>24){case 32:case 0:break e;default:{}}}while(0);n=n+1|0;if(n>>>0>=q>>>0){A=114;break d}}o=o<<24>>24==0?6:7;k=n+o|0;if(k>>>0<=q>>>0){m=q+1-o|0;l=n;while(1){a[i+l>>0]=a[i+k>>0]|0;k=l+1|0;if((k|0)==(m|0))break;else{l=k;k=k+o|0}}}if((n|0)!=0&(a[r>>0]|0)==0)a[i+(n+-1)>>0]=0;l=c[u>>2]|0;m=l+(s<<4)+15|0;a[m>>0]=a[m>>0]|2;m=-128;k=b[h>>1]|0}while(0);if((A|0)==114){A=0;c[t>>2]=c[t>>2]|m&255}s=s+1|0}while((s|0)<(k<<16>>16|0))}if(z)k=0;else{k=0;A=117}}else{k=0;A=117}break}default:A=67}while(0);do if((A|0)==67){l=c[v>>2]|0;do if(l){c[x>>2]=l;l=dd(f,31408,x)|0;c[j>>2]=l;l=c[v>>2]|0;if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{C=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else{c[w>>2]=y;C=dd(f,36751,w)|0;c[j>>2]=C}while(0);if(c[f+480>>2]|0){Xd(f,n);A=117;break}C=n;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){A=f+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;A=117;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);A=117;break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);A=117;break}}while(0);if((A|0)==117){if(c[f+480>>2]|0){Xd(f,y);f=k;Ra=D;return f|0}C=y;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){f=f+300|0;c[y>>2]=c[f>>2];c[f>>2]=y;f=k;Ra=D;return f|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](y);f=k;Ra=D;return f|0}else{f=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);f=k;Ra=D;return f|0}return 0}function Bi(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=a[b>>0]|0;do switch(a[3696+(i&255)>>0]|0){case 7:{g=1;while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&1))break;else g=g+1|0;c[f>>2]=174;f=g;return f|0}case 11:{if((a[b+1>>0]|0)!=45){c[f>>2]=101;f=1;return f|0}g=2;a:while(1){switch(a[b+g>>0]|0){case 0:case 10:break a;default:{}}g=g+1|0}c[f>>2]=174;f=g;return f|0}case 17:{c[f>>2]=22;f=1;return f|0}case 18:{c[f>>2]=23;f=1;return f|0}case 19:{c[f>>2]=1;f=1;return f|0}case 20:{c[f>>2]=100;f=1;return f|0}case 21:{c[f>>2]=102;f=1;return f|0}case 16:{if((a[b+1>>0]|0)==42?(g=a[b+2>>0]|0,g<<24>>24):0){h=a[b+3>>0]|0;b:do if(g<<24>>24==42&h<<24>>24==47){h=1;g=3}else{g=3;while(1){if(!(h<<24>>24)){h=0;break b}g=g+1|0;k=h;h=a[b+g>>0]|0;if(k<<24>>24==42&h<<24>>24==47){h=1;break}}}while(0);c[f>>2]=174;f=h+g|0;return f|0}c[f>>2]=103;f=1;return f|0}case 22:{c[f>>2]=104;f=1;return f|0}case 14:{c[f>>2]=53;f=(a[b+1>>0]|0)==61?2:1;return f|0}case 12:switch(a[b+1>>0]|0){case 61:{c[f>>2]=55;f=2;return f|0}case 62:{c[f>>2]=52;f=2;return f|0}case 60:{c[f>>2]=98;f=2;return f|0}default:{c[f>>2]=56;f=1;return f|0}}case 13:switch(a[b+1>>0]|0){case 61:{c[f>>2]=57;f=2;return f|0}case 62:{c[f>>2]=99;f=2;return f|0}default:{c[f>>2]=54;f=1;return f|0}}case 15:if((a[b+1>>0]|0)==61){c[f>>2]=52;f=2;return f|0}else{c[f>>2]=175;f=1;return f|0}case 10:if((a[b+1>>0]|0)==124){c[f>>2]=105;f=2;return f|0}else{c[f>>2]=97;f=1;return f|0}case 23:{c[f>>2]=26;f=1;return f|0}case 24:{c[f>>2]=96;f=1;return f|0}case 25:{c[f>>2]=107;f=1;return f|0}case 8:{h=a[b+1>>0]|0;c:do if(h<<24>>24){g=1;while(1){if(h<<24>>24==i<<24>>24){g=g+1|0;if((a[b+g>>0]|0)!=i<<24>>24)break}g=g+1|0;h=a[b+g>>0]|0;if(!(h<<24>>24))break c}if(i<<24>>24==39){c[f>>2]=110;f=g;return f|0}else{c[f>>2]=59;f=g;return f|0}}else g=1;while(0);c[f>>2]=175;f=g;return f|0}case 26:{if(((d[b+1>>0]|0)+-48|0)>>>0>=10){c[f>>2]=134;f=1;return f|0}break}case 3:break;case 9:{d:do if(i<<24>>24==93){g=1;h=59}else{g=1;while(1){h=a[b+g>>0]|0;if(!(h<<24>>24)){h=175;break d}g=g+1|0;if(h<<24>>24==93){h=59;break}}}while(0);c[f>>2]=h;f=g;return f|0}case 6:{c[f>>2]=148;g=1;while(1)if(((d[b+g>>0]|0)+-48|0)>>>0<10)g=g+1|0;else break;return g|0}case 5:case 4:{c[f>>2]=148;h=a[b+1>>0]|0;if(h<<24>>24){j=0;g=1;while(1){if(!(a[880+(h&255)>>0]&70)){if((j|0)>0&h<<24>>24==40){k=91;break}if(h<<24>>24!=58){h=j;break}h=g+1|0;if((a[b+h>>0]|0)==58){i=j;g=h}else{h=j;break}}else i=j+1|0;g=g+1|0;h=a[b+g>>0]|0;if(!(h<<24>>24)){h=i;break}else j=i}do if((k|0)==91){while(1){i=g+1|0;h=a[b+i>>0]|0;if(!(h<<24>>24))break;if(h<<24>>24!=41?(a[880+(h&255)>>0]&1)==0:0)g=i;else{k=94;break}}if((k|0)==94?h<<24>>24==41:0){h=j;g=g+2|0;break}c[f>>2]=175;h=j;g=i}while(0);if(h){f=g;return f|0}}else g=1;c[f>>2]=175;f=g;return f|0}case 1:{g=1;while(1){h=a[b+g>>0]|0;i=g+1|0;if((d[3696+(h&255)>>0]|0)<2)g=i;else break}if(!(a[880+(h&255)>>0]&70)){c[f>>2]=59;if(g>>>0<=1){f=g;return f|0}h=a[3952+(((d[208+(d[b>>0]|0)>>0]<<2^g^(d[208+(d[b+(g+-1)>>0]|0)>>0]|0)*3)>>>0)%127|0)>>0]|0;if(!(h<<24>>24)){f=g;return f|0}h=h&255;e:while(1){i=h+-1|0;f:do if((g|0)==(d[2064+i>>0]|0)){j=1136+(e[1776+(i<<1)>>1]|0)|0;h=0;while(1){if((a[b+h>>0]&-33)<<24>>24!=(a[j+h>>0]|0))break f;h=h+1|0;if(h>>>0>=g>>>0)break e}}while(0);h=a[4224+i>>0]|0;if(!(h<<24>>24)){k=127;break}else h=h&255}if((k|0)==127)return g|0;c[f>>2]=d[4080+i>>0];f=g;return f|0}else{g=i;k=114}break}case 0:{if((a[b+1>>0]|0)==39){c[f>>2]=146;g=2;while(1){h=a[b+g>>0]|0;if(!(a[880+(h&255)>>0]&8))break;else g=g+1|0}if(h<<24>>24==39&(g&1|0)==0){h=g;g=1}else{c[f>>2]=175;g:while(1){i=a[b+g>>0]|0;switch(i<<24>>24){case 39:case 0:break g;default:{}}g=g+1|0}h=g;g=i<<24>>24!=0&1}f=h+g|0;return f|0}else{g=1;k=114}break}case 2:{g=1;k=114;break}case 28:{c[f>>2]=175;f=0;return f|0}default:{c[f>>2]=175;f=1;return f|0}}while(0);if((k|0)==114){while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&70))break;else g=g+1|0;c[f>>2]=59;f=g;return f|0}c[f>>2]=147;h=a[b>>0]|0;h:do if(h<<24>>24==48){switch(a[b+1>>0]|0){case 88:case 120:break;default:break h}if(a[880+(d[b+2>>0]|0)>>0]&8){g=3;while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&8))break;else g=g+1|0;return g|0}}while(0);if(((h&255)+-48|0)>>>0<10){g=1;while(1){h=a[b+g>>0]|0;if(((h&255)+-48|0)>>>0<10)g=g+1|0;else break}}else g=0;if(h<<24>>24==46){h=g;do h=h+1|0;while(((d[b+h>>0]|0)+-48|0)>>>0<10);c[f>>2]=145;g=h;h=a[b+h>>0]|0}i:do switch(h<<24>>24){case 69:case 101:{i=a[b+(g+1)>>0]|0;if(((i&255)+-48|0)>>>0>=10){switch(i<<24>>24){case 45:case 43:break;default:break i}i=g+2|0;if(((d[b+i>>0]|0)+-48|0)>>>0<10)g=i;else break i}else g=g+2|0;h=g;while(1)if(((d[b+h>>0]|0)+-48|0)>>>0<10)h=h+1|0;else break;c[f>>2]=145;g=h;h=a[b+h>>0]|0;break}default:{}}while(0);if(!(a[880+(h&255)>>0]&70)){f=g;return f|0}do{c[f>>2]=175;g=g+1|0}while((a[880+(d[b+g>>0]|0)>>0]&70)!=0);return g|0}function Ci(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=d+108|0;i=c[h>>2]|0;if((c[d+112>>2]|0)>(i|0)){c[h>>2]=i+1;h=c[d+104>>2]|0;a[h+(i*20|0)>>0]=e;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=f;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=0;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0;return i|0}else{i=Di(d,e,f,g,0)|0;return i|0}return 0}function Di(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=d+12|0;k=c[r>>2]|0;s=d+112|0;l=c[s>>2]|0;j=(l|0)==0;l=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;m=L()|0;l=j?51:l;m=j?0:m;j=c[k>>2]|0;q=c[j+128>>2]|0;p=((q|0)<0)<<31>>31;a:do if(!((m|0)>(p|0)|(m|0)==(p|0)&l>>>0>q>>>0)){q=d+104|0;p=d+108|0;o=k;n=k;d=c[q>>2]|0;b:while(1){l=Yv(l|0,m|0,20,0)|0;m=L()|0;c:do if(!d){if(c[j+272>>2]|0){if(a[j+81>>0]|0){d=1;k=35;break b}}else{do if(!(m>>>0>0|((m|0)==0?l>>>0>(e[j+276>>1]|0)>>>0:0))){k=j+300|0;d=c[k>>2]|0;if(d|0){c[k>>2]=c[d>>2];k=j+284|0;c[k>>2]=(c[k>>2]|0)+1;k=27;break c}k=j+296|0;d=c[k>>2]|0;if(!d){d=j+292|0;break}else{c[k>>2]=c[d>>2];k=j+284|0;c[k>>2]=(c[k>>2]|0)+1;k=27;break c}}else d=j+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(j,l,m)|0;k=27}else{k=d;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){if(!(m>>>0>0|((m|0)==0?l>>>0>(e[j+276>>1]|0)>>>0:0))){k=29;break}d=Zd(j,d,l,m)|0;k=27;break}d=Zd(j,d,l,m)|0;k=27}while(0);if((k|0)==27){if(!d){d=1;k=35;break}j=c[o>>2]|0;if(!j)k=31;else k=29}if((k|0)==29){k=0;o=d;if((c[j+304>>2]|0)>>>0<=o>>>0?(c[j+308>>2]|0)>>>0>o>>>0:0)l=e[j+276>>1]|0;else k=31}if((k|0)==31)l=Wa[c[29352>>2]&127](d)|0;c[n+48>>2]=l;k=(l>>>0)/20|0;c[s>>2]=k;c[q>>2]=d;j=c[p>>2]|0;if((k|0)>(j|0)){k=34;break}n=c[r>>2]|0;m=l>>>0<20;l=m?51:k<<1;m=m?0:0;j=c[n>>2]|0;o=c[j+128>>2]|0;k=((o|0)<0)<<31>>31;if((m|0)>(k|0)|(m|0)==(k|0)&l>>>0>o>>>0)break a;else o=n}if((k|0)==34){c[p>>2]=j+1;a[d+(j*20|0)>>0]=f;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=g;c[d+(j*20|0)+8>>2]=h;c[d+(j*20|0)+12>>2]=i;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;s=j;return s|0}else if((k|0)==35)return d|0}while(0);d=j+81|0;if(a[d>>0]|0){s=1;return s|0}if(a[j+82>>0]|0){s=1;return s|0}a[d>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;d=j+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[j+236>>2]|0;if(!d){s=1;return s|0}c[d+12>>2]=7;s=1;return s|0}function Ei(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=b+104|0;l=b+108|0;if((g|0)<0){while(1){h=d+1|0;i=a[h>>0]|0;if(i<<24>>24){m=d+16|0;kg(c[b>>2]|0,i<<24>>24,c[m>>2]|0);a[h>>0]=0;c[m>>2]=0}h=c[k>>2]|0;i=d-h|0;d=c[b>>2]|0;j=h;if(a[d+81>>0]|0){n=12;break}if((i|0)<0)i=(c[l>>2]|0)+-1|0;else i=(i|0)/20|0;d=j+(i*20|0)+1|0;if(!(a[d>>0]|0))break;d=j+(i*20|0)|0}if((n|0)==12){if((g|0)==-12)return;kg(d,g,f);return}if((g|0)==-3){c[h+(i*20|0)+16>>2]=f;a[d>>0]=-3;return}if(!f)return;c[h+(i*20|0)+16>>2]=f;a[d>>0]=g;if((g|0)!=-12)return;f=f+12|0;c[f>>2]=(c[f>>2]|0)+1;return}else{m=d+1|0;h=a[m>>0]|0;if(h<<24>>24){l=d+16|0;kg(c[b>>2]|0,h<<24>>24,c[l>>2]|0);a[m>>0]=0;c[l>>2]=0}h=(f|0)==0;if(!g)if(h)h=0;else{g=(Eu(f)|0)&1073741823;n=23}else if(h)h=0;else n=23;a:do if((n|0)==23){j=c[b>>2]|0;k=Sv(g|0,((g|0)<0)<<31>>31|0,1,0)|0;l=L()|0;b:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))n=33;else{h=0;break a}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[j+276>>1]|0)>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];b=j+284|0;c[b>>2]=(c[b>>2]|0)+1;break b}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];b=j+284|0;c[b>>2]=(c[b>>2]|0)+1;break b}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=33}while(0);if((n|0)==33)h=_d(j,k,l)|0;if(!h)h=0;else{ew(h|0,f|0,g|0)|0;a[h+g>>0]=0}}while(0);c[d+16>>2]=h;a[m>>0]=-7;return}}function Fi(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=c[e>>2]|0;n=c[b+12>>2]|0;o=n+64|0;k=c[o>>2]|0;l=b+149|0;j=(d[l>>0]|d[l+1>>0]<<8)&-769|256;a[l>>0]=j;a[l+1>>0]=j>>8;j=b+104|0;i=(c[j>>2]|0)+(((c[b+108>>2]|0)+-1|0)*20|0)|0;while(1){g=a[i>>0]|0;a:do if((g&255)<62){switch(g<<24>>24){case 2:{if(!(c[i+8>>2]|0))m=6;else{m=(d[l>>0]|d[l+1>>0]<<8)&-257;a[l>>0]=m;a[l+1>>0]=m>>8;m=6}break}case 0:case 1:{m=6;break}case 7:case 8:case 6:{h=(d[l>>0]|d[l+1>>0]<<8)&-769|512;a[l>>0]=h;a[l+1>>0]=h>>8;h=f;break a}case 3:case 5:{c[i+16>>2]=122;a[i+1>>0]=-5;h=f;break a}case 4:{c[i+16>>2]=123;a[i+1>>0]=-5;h=f;break a}case 10:{h=c[i+8>>2]|0;h=(h|0)>(f|0)?h:f;break a}case 9:{h=c[i+-16>>2]|0;f=(h|0)>(f|0)?h:f;break}default:{}}if((m|0)==6){m=0;h=d[l>>0]|d[l+1>>0]<<8|512;a[l>>0]=h;a[l+1>>0]=h>>8;h=f;break}g=i+8|0;h=c[g>>2]|0;if((h|0)<0){c[g>>2]=c[k+(~h<<2)>>2];h=f}else h=f}else h=f;while(0);if((i|0)==(c[j>>2]|0))break;else{f=h;i=i+-20|0}}f=c[b>>2]|0;g=c[o>>2]|0;if(!g){c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}if(f|0){if(c[f+480>>2]|0){Xd(f,g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}m=g;if((c[f+304>>2]|0)>>>0<=m>>>0?(c[f+308>>2]|0)>>>0>m>>>0:0){m=f+300|0;c[g>>2]=c[m>>2];c[m>>2]=g;c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}}function Gi(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;i=k;g=a[b>>0]|0;if(g<<24>>24==1){f=4;Ra=k;return f|0}c[i>>2]=0;do if(g<<24>>24==4){g=c[b+4>>2]|0;if(g|0){f=g;Ra=k;return f|0}}else{a[b>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=b+16|0;g=b+56|0;g=th(b,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=b+4|0;if(!h){if(c[g>>2]|0)j=13}else{c[g>>2]=h;j=13}if((j|0)==13?(a[b>>0]|0)==0:0)a[b>>0]=2;break}}l=g;Ra=k;return l|0}while(0);l=cg(b,d,e,f,0)|0;Ra=k;return l|0}function Hi(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(d){h=(Eu(d)|0)&1073741823;if((h+20|0)>>>0>2147483390)i=0;else{k=h;h=h+21|0;j=3}}else{k=0;h=21;j=3}do if((j|0)==3){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](h)|0;if(!i)break;else{j=i;h=i}}else{j=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0<h>>>0)c[14985]=h;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){l=c[14978]|0;i=Tv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=l>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(!i){i=0;break}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h;j=i;h=i}i=j+20|0;ew(i|0,d|0,k+1|0)|0;c[j+4>>2]=i;c[j>>2]=e;c[j+8>>2]=f;c[j+12>>2]=g;c[j+16>>2]=0;i=mi(b+336|0,i,j)|0;if(!i){l=h;return l|0}h=b+81|0;if((a[h>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(h|0)c[h+12>>2]=7}if(c[b+480>>2]|0){Xd(b,i);l=0;return l|0}l=i;if((c[b+304>>2]|0)>>>0<=l>>>0?(c[b+308>>2]|0)>>>0>l>>>0:0){l=b+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;l=0;return l|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);l=0;return l|0}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);l=0;return l|0}}while(0);h=b+81|0;if(a[h>>0]|0){l=i;return l|0}if(a[b+82>>0]|0){l=i;return l|0}a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(!h){l=i;return l|0}c[h+12>>2]=7;l=i;return l|0}function Ii(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+256|0;w=y+224|0;g=y+216|0;o=y+208|0;h=y+200|0;u=y+232|0;v=y;p=u+4|0;c[p>>2]=v;c[u>>2]=0;q=u+8|0;c[q>>2]=200;r=u+12|0;s=u+16|0;t=u+21|0;c[r>>2]=0;c[r+4>>2]=0;b[r+8>>1]=0;c[s>>2]=14;l=v;m=37929;n=l+14|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));k=f+7|0;if(a[k>>0]|0){g=d[f+6>>0]|0;x=c[5504+(g<<2)>>2]|0;c[h>>2]=40;c[h+4>>2]=x;Eb(u,37944,h);if((d[k>>0]|0)>1){h=1;do{g=g+1|0;x=c[5504+(g<<2)>>2]|0;c[o>>2]=44;c[o+4>>2]=x;Eb(u,37944,o);h=h+1|0}while(h>>>0<(d[k>>0]|0)>>>0);x=h&255}else x=1}else{c[g>>2]=c[f>>2];Eb(u,37951,g);x=1}k=f+5|0;g=a[k>>0]|0;if(!(g&32))o=0;else{g=c[s>>2]|0;h=g+11|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;l=(c[p>>2]|0)+g|0;m=37957;n=l+11|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0))}else wb(u,37957,11);o=1;g=a[k>>0]|0}if((g&255)>63){g=c[s>>2]|0;h=g+14|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;l=(c[p>>2]|0)+g|0;m=37969;n=l+14|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0))}else wb(u,37969,14);o=o+1|0}g=c[s>>2]|0;h=g+1|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;a[(c[p>>2]|0)+g>>0]=41}else wb(u,34066,1);g=c[p>>2]|0;if((g|0?(a[g+(c[s>>2]|0)>>0]=0,c[r>>2]|0):0)?(a[t>>0]&4)==0:0)$d(u)|0;g=td(e,v)|0;if(g|0){f=pd(e)|0;c[w>>2]=f;f=Bb(31408,w)|0;c[j>>2]=f;f=g;e=0;c[i>>2]=e;Ra=y;return f|0}if(mb()|0){f=7;e=0;c[i>>2]=e;Ra=y;return f|0}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](24)|0;if(!g){f=7;e=g;c[i>>2]=e;Ra=y;return f|0}else h=g}else{g=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;k=59064;h=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&h>>>0>0){j=c[14978]|0;w=Tv(h|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](g)|0;if(!k){f=7;e=0;c[i>>2]=e;Ra=y;return f|0}g=Wa[c[29352>>2]&127](k)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g;h=k;g=k};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+16>>2]=f;c[h+12>>2]=e;a[h+21>>0]=x;a[h+20>>0]=o;f=0;e=g;c[i>>2]=e;Ra=y;return f|0}function Ji(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o;n=e+40|0;g[n>>3]=1.0;if(!(a[b+20>>0]|0)){Ra=o;return 0}f=c[e+4>>2]|0;c[k>>2]=0;m=k+4|0;c[m>>2]=0;i=c[e>>2]|0;if((i|0)>0){h=b+21|0;b=f;f=0;while(1){if((a[b+5>>0]|0?(a[b+4>>0]|0)==2:0)?(j=c[b>>2]|0,l=d[h>>0]|0,(j|0)>=(l|0)):0)c[k+(j-l<<2)>>2]=f+1;f=f+1|0;if((f|0)>=(i|0))break;else b=b+12|0}b=c[k>>2]|0;if(b|0){b=b+-1|0;f=c[e+16>>2]|0;c[f+(b<<3)>>2]=1;a[f+(b<<3)+4>>0]=1;m=c[m>>2]|0;b=m+-1|0;if(!m){Ra=o;return 0}g[n>>3]=20.0;n=e+48|0;c[n>>2]=20;c[n+4>>2]=0;c[f+(b<<3)>>2]=2;a[f+(b<<3)+4>>0]=1;Ra=o;return 0}}g[n>>3]=2147483647.0;n=e+48|0;c[n>>2]=2147483647;c[n+4>>2]=0;Ra=o;return 0}function Ki(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Li(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](24)|0;if(!d){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=7;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e};c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d>>2]=a;c[b>>2]=d;g=0;return g|0}function Mi(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;gc(c[b>>2]|0)|0;c[b>>2]=0;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;b=a+20|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Ni(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+64|0;u=y+24|0;r=y+16|0;q=y+8|0;l=y;s=y+32|0;t=c[e>>2]|0;v=e+4|0;gc(c[v>>2]|0)|0;c[v>>2]=0;x=e+16|0;f=c[x>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{w=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[x>>2]=0;w=e+20|0;f=c[w>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;o=t+16|0;a:do if((h|0)>0){j=0;k=((d[(c[o>>2]|0)+5>>0]|0)>>>5&1^1)&255;b:while(1){f=c[i+(j<<2)>>2]|0;do if(f|0){g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)f=c[f+16>>2]|0;else{if(g&1)break;f=Gg(f,1)|0}if(f|0?(c[l>>2]=f,p=Bb(31408,l)|0,c[x+(k<<2)>>2]=p,(p|0)==0):0){f=7;break b}}while(0);j=j+1|0;if((j|0)>=(h|0))break a;else k=k+1|0}Ra=y;return f|0}while(0);p=t+12|0;m=c[(c[p>>2]|0)+112>>2]|0;h=s+4|0;c[h>>2]=0;c[s>>2]=0;l=s+8|0;c[l>>2]=0;i=s+12|0;c[i>>2]=m;m=s+16|0;c[m>>2]=0;a[s+20>>0]=0;n=s+21|0;a[n>>0]=0;wb(s,38205,7);f=c[w>>2]|0;if(f|0){c[q>>2]=f;Eb(s,38213,q)}g=c[c[o>>2]>>2]|0;if(!g)f=0;else f=(Eu(g)|0)&1073741823;j=c[m>>2]|0;k=j+f|0;if(k>>>0<(c[l>>2]|0)>>>0){if(f|0){c[m>>2]=k;ew((c[h>>2]|0)+j|0,g|0,f|0)|0}}else wb(s,g,f);f=c[x>>2]|0;if(f|0){c[r>>2]=f;Eb(s,38217,r)}f=c[h>>2]|0;if(((f|0)!=0?(a[f+(c[m>>2]|0)>>0]=0,(c[i>>2]|0)!=0):0)?(a[n>>0]&4)==0:0)f=$d(s)|0;else f=c[h>>2]|0;if(!f){x=7;Ra=y;return x|0}g=qd(c[p>>2]|0,f,-1,128,0,v,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{s=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(g|0){x=pd(c[p>>2]|0)|0;c[u>>2]=x;x=Bb(31408,u)|0;c[t+8>>2]=x;x=g;Ra=y;return x|0}e=e+8|0;t=e;t=Sv(c[t>>2]|0,c[t+4>>2]|0,1,0)|0;u=L()|0;c[e>>2]=t;c[e+4>>2]=u;if((Gc(c[v>>2]|0)|0)==100){x=0;Ra=y;return x|0}g=gc(c[v>>2]|0)|0;c[v>>2]=0;gc(0)|0;c[v>>2]=0;f=c[x>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[x>>2]=0;f=c[w>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;x=g;Ra=y;return x|0}function Oi(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;e=b;e=Sv(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;d=L()|0;c[b>>2]=e;c[b+4>>2]=d;b=a+4|0;if((Gc(c[b>>2]|0)|0)==100){e=0;return e|0}e=gc(c[b>>2]|0)|0;c[b>>2]=0;Si(a);return e|0}function Pi(a){a=a|0;return (c[a+4>>2]|0)==0|0}function Qi(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;i=d[(c[f>>2]|0)+21>>0]|0;if((i|0)<=(h|0)){if((yc(c[g>>2]|0,c[f+16+(h-i<<2)>>2]|0,-1,1,-1)|0)!=18)return 0;c[g+20>>2]=18;yc(c[g>>2]|0,31223,-1,1,0)|0;return 0}k=c[f+4>>2]|0;j=(k|0)==0;do if(j)l=29576;else{f=c[k+120>>2]|0;if(f|0?(e[k+144>>1]|0)>>>0>h>>>0:0){l=f+(h*40|0)|0;break}l=c[k>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576}while(0);f=l+8|0;i=e[f>>1]|0;if(i&2048|0)b[f>>1]=i&59391|4096;if(!j){i=c[k>>2]|0;h=k+40|0;f=c[h>>2]|0;if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7}else f=c[i+68>>2]&f;c[h>>2]=f}Dc(g,l);return 0}function Ri(a,b){a=a|0;b=b|0;var d=0;d=a+8|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Si(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;gc(c[b>>2]|0)|0;c[b>>2]=0;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;a=a+20|0;b=c[a>>2]|0;if(!b){c[a>>2]=0;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);c[a>>2]=0;return}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);c[a>>2]=0;return}}function Ti(b){b=b|0;var e=0,f=0,g=0;f=b+360|0;e=c[f>>2]|0;c[f>>2]=0;if(!e)return;b=c[b+4>>2]|0;if(b|0)do{f=b+149|0;g=(d[f>>0]|d[f+1>>0]<<8)&-4|1;a[f>>0]=g;a[f+1>>0]=g>>8;b=c[b+8>>2]|0}while((b|0)!=0);do{g=e;e=c[e+24>>2]|0;ng(g)}while((e|0)!=0);return}function Ui(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=a+20|0;if((c[g>>2]|0)>2){h=a+16|0;f=2;b=2;do{d=c[h>>2]|0;e=d+(f<<4)|0;if(!(c[d+(f<<4)+4>>2]|0)){lb(a,c[e>>2]|0);c[e>>2]=0}else{if((b|0)<(f|0)){d=d+(b<<4)|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2]}b=b+1|0}f=f+1|0}while((f|0)<(c[g>>2]|0));c[g>>2]=b;if((b|0)>=3)return}else c[g>>2]=2;b=a+16|0;d=c[b>>2]|0;e=a+412|0;if((d|0)==(e|0))return;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];c[e+16>>2]=c[d+16>>2];c[e+20>>2]=c[d+20>>2];c[e+24>>2]=c[d+24>>2];c[e+28>>2]=c[d+28>>2];lb(a,d);c[b>>2]=e;return}\nfunction jl(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=Ra;Ra=Ra+48|0;v=x+32|0;t=x+24|0;s=x+16|0;q=x+8|0;p=x;h=c[f>>2]|0;j=c[g+20>>2]|0;if(!j)w=-1e6;else{k=c[h+16>>2]|0;i=0;while(1)if((c[k+(i<<4)+12>>2]|0)==(j|0)){w=i;break}else i=i+1|0}o=c[g+4>>2]|0;l=c[g+24>>2]|0;m=c[l+20>>2]|0;if(!m){i=l+12|0;j=l+16|0}else{j=a[o>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=o;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}j=(i>>>0)%((c[l+8>>2]|0)>>>0)|0;i=m+(j<<3)|0;j=m+(j<<3)+4|0}i=c[i>>2]|0;a:do if(!i)j=59292;else{n=d[208+(d[o>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;i=i+-1|0;l=c[j+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=o;do{l=l+1|0;m=m+1|0;y=a[l>>0]|0;k=(d[208+(y&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!i){j=59292;break}}}while(0);o=h+16|0;m=c[(c[o>>2]|0)+(w<<4)>>2]|0;l=(w|0)==1;n=l?34855:34585;l=l?14:16;k=c[g>>2]|0;i=c[c[j+8>>2]>>2]|0;do if((a[h+165>>0]|0)==0?(r=f+200|0,(a[r>>0]|0)==0):0){j=c[h+312>>2]|0;if(j){h=$a[j&127](c[h+316>>2]|0,l,k,i,m,c[f+240>>2]|0)|0;if((h|0)==1){cd(f,39216,p);c[f+12>>2]=23;Ra=x;return}if((h|2|0)!=2){cd(f,39231,q);c[f+12>>2]=1;Ra=x;return}if(h|0){Ra=x;return}h=c[f>>2]|0;if(a[h+165>>0]|0)break;if(a[r>>0]|0)break}i=c[h+312>>2]|0;if(i|0){h=$a[i&127](c[h+316>>2]|0,9,n,0,m,c[f+240>>2]|0)|0;if((h|0)==1){cd(f,39216,s);c[f+12>>2]=23;Ra=x;return}if((h|2|0)==2){if(!h)break;Ra=x;return}else{cd(f,39231,t);c[f+12>>2]=1;Ra=x;return}}}while(0);m=f+8|0;h=c[m>>2]|0;if(!h){k=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))u=47;else{Ra=x;return}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break b}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;u=47}while(0);if((u|0)==47)j=_d(k,224,0)|0;if(!j){Ra=x;return}h=j+104|0;i=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=k;h=k+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;c[j+8>>2]=i;c[j+4>>2]=0;c[h>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[m>>2]=j;Di(j,61,0,1,0)|0;l=j}else l=h;k=c[g>>2]|0;c[v>>2]=c[(c[o>>2]|0)+(w<<4)>>2];c[v+4>>2]=34585;c[v+8>>2]=k;Ak(f,42882,v);k=c[m>>2]|0;h=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(w<<4)+12>>2]>>2]|0)+1|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;y=c[k+104>>2]|0;a[y+(j*20|0)>>0]=95;b[y+(j*20|0)+2>>1]=0;c[y+(j*20|0)+4>>2]=w;c[y+(j*20|0)+8>>2]=1;c[y+(j*20|0)+12>>2]=h;c[y+(j*20|0)+16>>2]=0;a[y+(j*20|0)+1>>0]=0}else Di(k,95,w,1,h)|0;j=c[g>>2]|0;i=l+108|0;h=c[i>>2]|0;if((c[l+112>>2]|0)>(h|0)){c[i>>2]=h+1;y=c[l+104>>2]|0;a[y+(h*20|0)>>0]=-110;b[y+(h*20|0)+2>>1]=0;c[y+(h*20|0)+4>>2]=w;c[y+(h*20|0)+8>>2]=0;c[y+(h*20|0)+12>>2]=0;c[y+(h*20|0)+16>>2]=0;a[y+(h*20|0)+1>>0]=0}else h=Di(l,146,w,0,0)|0;if(a[(c[l>>2]|0)+81>>0]|0){Ra=x;return}if((h|0)<0)h=(c[i>>2]|0)+-1|0;Ei(l,(c[l+104>>2]|0)+(h*20|0)|0,j,0);Ra=x;return}function kl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;n=o+8|0;m=o;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))j=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);l=d+19|0;i=a[l>>0]|0;if(!(i<<24>>24)){j=d+44|0;k=(c[j>>2]|0)+1|0;c[j>>2]=k}else{k=i+-1<<24>>24;a[l>>0]=k;k=c[d+148+((k&255)<<2)>>2]|0}if((f|0)<2)cd(d,42933,m);i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;m=c[h+104>>2]|0;a[m+(j*20|0)>>0]=-120;b[m+(j*20|0)+2>>1]=0;c[m+(j*20|0)+4>>2]=f;c[m+(j*20|0)+8>>2]=k;c[m+(j*20|0)+12>>2]=g;c[m+(j*20|0)+16>>2]=0;a[m+(j*20|0)+1>>0]=0}else Di(h,136,f,k,g)|0;m=c[d+116>>2]|0;a[((m|0)==0?d:m)+21>>0]=1;c[n>>2]=c[(c[(c[d>>2]|0)+16>>2]|0)+(g<<4)>>2];c[n+4>>2]=34585;c[n+8>>2]=f;c[n+12>>2]=k;c[n+16>>2]=k;Ak(d,42948,n);if(!k){Ra=o;return}h=a[l>>0]|0;if((h&255)>=8){Ra=o;return}a[l>>0]=h+1<<24>>24;c[d+148+((h&255)<<2)>>2]=k;Ra=o;return}function ll(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+32|0;g=h;a:do if(!b){b=0;e=1}else{while(1){e=c[b+4>>2]|0;if(!(e&4096))break;if(!(e&262144))b=b+12|0;else b=(c[b+20>>2]|0)+4|0;b=c[b>>2]|0;if(!b){b=0;e=1;break a}}b:while(1){switch(a[b>>0]|0){case 51:{b=b+12|0;break}case 44:{if(ll(c[b+12>>2]|0,d)|0){b=1;break b}b=b+16|0;break}default:{e=0;break a}}b=c[b>>2]|0;if(!b){b=0;e=1;break a}}Ra=h;return b|0}while(0);c[g+4>>2]=145;c[g+8>>2]=0;c[g+12>>2]=0;f=g+20|0;a[f>>0]=0;c[g+24>>2]=d;if(e)b=0;else{_j(g,b)|0;b=a[f>>0]|0}g=b&255;Ra=h;return g|0}function ml(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d)return;if((e|0)<0){g=d;do{d=g+4|0;f=c[d>>2]|0;if(f&1|0)c[d>>2]=f&-2;if(((a[g>>0]|0)==-95?(h=g+20|0,i=c[h>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){d=0;f=i;do{ml(c[f+4+(d*20|0)>>2]|0,e);d=d+1|0;f=c[h>>2]|0}while((d|0)<(c[f>>2]|0))}ml(c[g+12>>2]|0,e);g=c[g+16>>2]|0}while((g|0)!=0);return}g=d;do{d=g+4|0;f=c[d>>2]|0;if(f&1|0?(b[g+36>>1]|0)==(e|0):0)c[d>>2]=f&-2;if(((a[g>>0]|0)==-95?(j=g+20|0,k=c[j>>2]|0,k|0):0)?(c[k>>2]|0)>0:0){d=0;f=k;do{ml(c[f+4+(d*20|0)>>2]|0,e);d=d+1|0;f=c[j>>2]|0}while((d|0)<(c[f>>2]|0))}ml(c[g+12>>2]|0,e);g=c[g+16>>2]|0}while((g|0)!=0);return}function nl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!a){j=0;return j|0}b=0;do{d=c[a+36>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}d=c[a+44>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}d=c[a+60>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}g=c[a>>2]|0;if((g|0)!=0?(h=c[g>>2]|0,(h|0)>0):0){f=0;e=h;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?h:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}g=c[a+40>>2]|0;if((g|0)!=0?(i=c[g>>2]|0,(i|0)>0):0){f=0;e=i;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?i:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}g=c[a+48>>2]|0;if((g|0)!=0?(j=c[g>>2]|0,(j|0)>0):0){f=0;e=j;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?j:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}a=c[a+52>>2]|0}while((a|0)!=0);return b|0}function ol(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=Ra;Ra=Ra+32|0;n=o;if(!f){n=0;Ra=o;return n|0}if(c[e+8>>2]&8192|0){n=0;Ra=o;return n|0}if(c[e+68>>2]|0){n=0;Ra=o;return n|0}if(c[e+60>>2]|0){n=0;Ra=o;return n|0}if((a[f>>0]|0)==44){i=0;do{i=(ol(d,e,c[f+16>>2]|0,g,h)|0)+i|0;f=c[f+12>>2]|0}while((a[f>>0]|0)==44)}else i=0;j=(c[f+4>>2]&1|0)==0;if(!h){if(!j)k=12}else{if(j){n=0;Ra=o;return n|0}if((b[f+36>>1]|0)==(g|0))k=12;else{n=0;Ra=o;return n|0}}if((k|0)==12?(b[f+36>>1]|0)!=(g|0):0){n=0;Ra=o;return n|0}m=n+20|0;a[m>>0]=3;c[n+4>>2]=127;c[n+8>>2]=128;c[n+24>>2]=g;_j(n,f)|0;if(!(a[m>>0]|0)){n=i;Ra=o;return n|0}i=i+1|0;if(!e){n=i;Ra=o;return n|0}h=n+4|0;k=n+8|0;l=n+12|0;m=n+16|0;j=e;do{r=dk(c[d>>2]|0,f,0,0)|0;ml(r,-1);c[n>>2]=d;c[h>>2]=g;c[k>>2]=g;c[l>>2]=0;c[m>>2]=c[j>>2];r=zl(n,r)|0;q=(c[j+8>>2]&8|0)==0;p=j+36|0;e=j+44|0;r=Xk(c[d>>2]|0,c[(q?p:e)>>2]|0,r)|0;c[(q?p:e)>>2]=r;j=c[j+52>>2]|0}while((j|0)!=0);Ra=o;return i|0}function pl(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;l=w;q=c[f+60>>2]|0;h=f+12|0;if((q|0)==0|(c[h>>2]|0)!=0){Ra=w;return}s=d+44|0;v=(c[s>>2]|0)+1|0;c[s>>2]=v;c[h>>2]=v;t=d+8|0;h=c[t>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))p=16;else{r=0;break a}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;break b}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;p=16}while(0);if((p|0)==16)i=_d(k,224,0)|0;if(!i)r=0;else{h=i+104|0;j=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));c[i>>2]=k;h=k+4|0;j=c[h>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[h>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=d;c[t>>2]=i;Di(i,61,0,1,0)|0;r=i}}else r=h;while(0);h=q+12|0;do if(!(uk(c[h>>2]|0,l)|0)){h=c[h>>2]|0;do if(h){if((a[h>>0]|0)!=-88){n=Jj(d,h,v)|0;p=67;break}k=c[t>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;o=c[k+104>>2]|0;a[o+(j*20|0)>>0]=78;b[o+(j*20|0)+2>>1]=0;c[o+(j*20|0)+4>>2]=h;c[o+(j*20|0)+8>>2]=v;c[o+(j*20|0)+12>>2]=0;c[o+(j*20|0)+16>>2]=0;a[o+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,v,0)|0;break}}else{n=Jj(d,0,v)|0;p=67}while(0);do if(((p|0)==67?(n|0)!=(v|0):0)?(m=c[t>>2]|0,m|0):0){h=m+108|0;i=c[h>>2]|0;if((c[m+112>>2]|0)>(i|0)){c[h>>2]=i+1;p=c[m+104>>2]|0;a[p+(i*20|0)>>0]=79;b[p+(i*20|0)+2>>1]=0;c[p+(i*20|0)+4>>2]=n;c[p+(i*20|0)+8>>2]=v;c[p+(i*20|0)+12>>2]=0;c[p+(i*20|0)+16>>2]=0;a[p+(i*20|0)+1>>0]=0;break}else{Di(m,79,n,v,0)|0;break}}while(0);i=r+108|0;h=c[i>>2]|0;j=r+112|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=15;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=v;c[p+(h*20|0)+8>>2]=0;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0}else Di(r,15,v,0,0)|0;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=20;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=v;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(r,20,v,g,0)|0;break}}else{h=c[l>>2]|0;j=r+108|0;i=c[j>>2]|0;k=r+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;o=c[r+104>>2]|0;a[o+(i*20|0)>>0]=70;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=v;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(r,70,h,v,0)|0;if(!h){h=c[j>>2]|0;if((c[k>>2]|0)>(h|0)){c[j>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=11;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=0;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(r,11,0,g,0)|0;break}}if((h|0)>-1){o=f+6|0;n=b[o>>1]|0;i=((h|0)<0)<<31>>31;g=h>>>0<8;if(g)if(h>>>0<2)j=0;else{j=40;l=h;k=i;do{j=(j&65535)+65526|0;l=cw(l|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&l>>>0<8);k=j&65535;j=l;p=43}else{if(h>>>0>255){j=40;m=h;k=i;do{j=(j&65535)+40|0;p=m;m=bw(m|0,k|0,4)|0;l=k;k=L()|0}while(l>>>0>0|(l|0)==0&p>>>0>4095);l=j&65535;j=m}else{l=40;k=i;j=h}if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;p=j;j=bw(j|0,k|0,1)|0;m=k;k=L()|0}while(m>>>0>0|(m|0)==0&p>>>0>31);k=l;p=43}else{k=l;p=43}}if((p|0)==43)j=(k&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535;if(n<<16>>16>j<<16>>16){if(g)if(h>>>0<2)h=0;else{j=40;do{j=(j&65535)+65526|0;h=cw(h|0,i|0,1)|0;i=L()|0}while(i>>>0<0|(i|0)==0&h>>>0<8);j=j&65535;p=58}else{if(h>>>0>255){j=40;do{j=(j&65535)+40|0;p=h;h=bw(h|0,i|0,4)|0;g=i;i=L()|0}while(g>>>0>0|(g|0)==0&p>>>0>4095);j=j&65535}else j=40;if(i>>>0>0|(i|0)==0&h>>>0>15){do{j=(j&65535)+10&65535;p=h;h=bw(h|0,i|0,1)|0;g=i;i=L()|0}while(g>>>0>0|(g|0)==0&p>>>0>31);p=58}else p=58}if((p|0)==58)h=(j&65535)+65526+(e[3648+((h&7)<<1)>>1]|0)&65535;b[o>>1]=h;p=f+8|0;c[p>>2]=c[p>>2]|16384}}}while(0);h=c[q+16>>2]|0;if(!h){Ra=w;return}l=c[s>>2]|0;m=l+1|0;c[f+16>>2]=m;l=l+2|0;c[s>>2]=l;do if((a[h>>0]|0)==-88){k=c[t>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;u=c[k+104>>2]|0;a[u+(j*20|0)>>0]=78;b[u+(j*20|0)+2>>1]=0;c[u+(j*20|0)+4>>2]=h;c[u+(j*20|0)+8>>2]=m;c[u+(j*20|0)+12>>2]=0;c[u+(j*20|0)+16>>2]=0;a[u+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,m,0)|0;break}}else{j=Jj(d,h,m)|0;if((j|0)!=(m|0)?(u=c[t>>2]|0,u|0):0){h=u+108|0;i=c[h>>2]|0;if((c[u+112>>2]|0)>(i|0)){c[h>>2]=i+1;u=c[u+104>>2]|0;a[u+(i*20|0)>>0]=79;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=j;c[u+(i*20|0)+8>>2]=m;c[u+(i*20|0)+12>>2]=0;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0;break}else{Di(u,79,j,m,0)|0;break}}}while(0);i=r+108|0;h=c[i>>2]|0;j=r+112|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;u=c[r+104>>2]|0;a[u+(h*20|0)>>0]=15;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=m;c[u+(h*20|0)+8>>2]=0;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else Di(r,15,m,0,0)|0;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;u=c[r+104>>2]|0;a[u+(h*20|0)>>0]=-104;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=v;c[u+(h*20|0)+8>>2]=l;c[u+(h*20|0)+12>>2]=m;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0;Ra=w;return}else{Di(r,152,v,l,m)|0;Ra=w;return}}function ql(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;Ba=Ra;Ra=Ra+176|0;xa=Ba+40|0;ja=Ba+32|0;V=Ba+24|0;y=Ba+16|0;q=Ba+8|0;m=Ba;va=Ba+80|0;U=Ba+48|0;wa=f+8|0;ua=c[wa>>2]|0;Aa=c[f>>2]|0;c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;c[U+16>>2]=0;c[U+20>>2]=0;c[U+24>>2]=0;if(!i)I=0;else I=(c[i>>2]|0)>63?0:i;$=U+8|0;c[$>>2]=I;_=Aa+76|0;ta=(b[_>>1]&16)==0?k:k&-257;i=c[g>>2]|0;if((i|0)>64){c[m>>2]=64;cd(f,43479,m);Aa=0;Ra=Ba;return Aa|0}da=ta&65535;ia=da&32;ea=(ia|0)!=0;o=ea?1:i;n=o*80|0;p=n+759&-16;m=p+72|0;a:do if(c[Aa+272>>2]|0)if(!(a[Aa+81>>0]|0))ka=15;else i=0;else{do if(!(0<0|(0==0?(e[Aa+276>>1]|0)>>>0<m>>>0:0))){k=Aa+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];za=Aa+284|0;c[za>>2]=(c[za>>2]|0)+1;break a}k=Aa+296|0;i=c[k>>2]|0;if(!i){i=Aa+292|0;break}else{c[k>>2]=c[i>>2];za=Aa+284|0;c[za>>2]=(c[za>>2]|0)+1;break a}}else i=Aa+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;ka=15}while(0);if((ka|0)==15)i=_d(Aa,m,0)|0;ra=Aa+81|0;if(a[ra>>0]|0){if(!i){Aa=0;Ra=Ba;return Aa|0}if(c[Aa+480>>2]|0){Xd(Aa,i);Aa=0;Ra=Ba;return Aa|0}za=i;if((c[Aa+304>>2]|0)>>>0<=za>>>0?(c[Aa+308>>2]|0)>>>0>za>>>0:0){Aa=Aa+300|0;c[i>>2]=c[Aa>>2];c[Aa>>2]=i;Aa=0;Ra=Ba;return Aa|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}else{Aa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}}c[i>>2]=f;ca=i+4|0;c[ca>>2]=g;X=i+8|0;c[X>>2]=I;c[i+16>>2]=h;c[i+12>>2]=j;ga=i+24|0;ha=i+28|0;c[ha>>2]=-1;c[ga>>2]=-1;za=i+46|0;a[za>>0]=o;sa=f+56|0;fa=(c[sa>>2]|0)+-1|0;c[sa>>2]=fa;na=i+32|0;c[na>>2]=fa;z=i+36|0;c[z>>2]=fa;fa=i+44|0;b[fa>>1]=ta;b[i+20>>1]=l;oa=f+132|0;pa=i+40|0;c[pa>>2]=c[oa>>2];k=i+47|0;A=k;B=A+33|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0));qa=i+752|0;gw(qa|0,0,n+72|0)|0;aa=i+488|0;c[U>>2]=i;ya=i+80|0;ba=U+4|0;c[ba>>2]=ya;u=i+p|0;O=U+12|0;c[O>>2]=u;c[u+48>>2]=u+56;b[u+40>>1]=0;b[u+44>>1]=3;c[u+36>>2]=0;u=i+492|0;c[u>>2]=0;c[ya>>2]=i;a[i+89>>0]=0;c[i+84>>2]=0;la=i+92|0;c[la>>2]=0;c[i+96>>2]=8;ma=i+100|0;c[ma>>2]=i+104;Il(ya,h,44);v=(o|0)==0;if(v){if(I|0)a[k>>0]=c[I>>2];if(da&256|0)a[i+51>>0]=1;nk(f,0,43507,q)}else{q=0;do{r=g+8+(q*72|0)+40|0;K=c[r>>2]|0;T=c[u>>2]|0;c[u>>2]=T+1;c[aa+8+(T<<2)>>2]=K;b:do if((a[g+8+(q*72|0)+37>>0]&4?(w=c[g+8+(q*72|0)+16>>2]|0,x=c[g+8+(q*72|0)+64>>2]|0,x|0):0)?(c[x>>2]|0)>0:0){s=w+42|0;t=w+4|0;m=0;h=0;c:while(1){n=b[s>>1]|0;if((m|0)>=(n|0))break;p=c[t>>2]|0;while(1){if(a[p+(m<<4)+15>>0]&2)break;k=m+1|0;if((k|0)<(n|0))m=k;else break c}p=c[f>>2]|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))ka=52;else break b;else{do if((e[p+276>>1]|0)>=52){k=p+300|0;n=c[k>>2]|0;if(n|0){c[k>>2]=c[n>>2];T=p+284|0;c[T>>2]=(c[T>>2]|0)+1;break d}k=p+296|0;n=c[k>>2]|0;if(!n){k=p+292|0;break}else{c[k>>2]=c[n>>2];T=p+284|0;c[T>>2]=(c[T>>2]|0)+1;break d}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;ka=52}while(0);if((ka|0)==52){ka=0;n=_d(p,52,0)|0}if(!n)break b;A=n;B=A+52|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));a[n>>0]=-94;b[n+34>>1]=-1;c[n+24>>2]=1;c[n+28>>2]=c[r>>2];b[n+32>>1]=m;c[n+44>>2]=w;k=c[x+4+(h*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;Ml(ya,ej(f,53,n,ej(f,166,k,0)|0)|0,1)|0;k=h+1|0;if((k|0)<(c[x>>2]|0)){m=m+1|0;h=k}else break b}c[y>>2]=c[w>>2];c[y+4>>2]=h;cd(f,43525,y)}while(0);q=q+1|0}while((q|0)<(c[g>>2]|0))}k=c[la>>2]|0;if((k|0)>0)do{T=k;k=k+-1|0;Nl(g,ya,k)}while((T|0)>1);e:do if(!(a[ra>>0]|0)){f:do if((c[i+92>>2]|0)>0){h=va+20|0;q=va+4|0;r=va+8|0;if(v){p=0;k=ya;while(1){m=c[k+20>>2]|0;n=m+(p*48|0)+10|0;if((b[n>>1]&2)==0?(T=m+(p*48|0)+40|0,(c[T>>2]|0)==0&(c[T+4>>2]|0)==0):0){Tj(f,c[m+(p*48|0)>>2]|0,c[z>>2]|0,16);b[n>>1]=b[n>>1]|4;k=c[ba>>2]|0}p=p+1|0;if((p|0)>=(c[k+12>>2]|0))break f}}p=0;k=ya;do{k=c[k+20>>2]|0;n=k+(p*48|0)+10|0;do if((b[n>>1]&2)==0?(T=k+(p*48|0)+40|0,(c[T>>2]|0)==0&(c[T+4>>2]|0)==0):0){k=k+(p*48|0)|0;m=c[k>>2]|0;c[va>>2]=0;c[va+4>>2]=0;c[va+8>>2]=0;c[va+12>>2]=0;c[va+16>>2]=0;c[va+20>>2]=0;c[va+24>>2]=0;a[h>>0]=1;c[q>>2]=146;c[r>>2]=128;if(m){_j(va,m)|0;if(!(a[h>>0]|0))break}Tj(f,c[k>>2]|0,c[z>>2]|0,16);b[n>>1]=b[n>>1]|4}while(0);p=p+1|0;k=c[ba>>2]|0}while((p|0)<(c[k+12>>2]|0))}while(0);T=(da&256|0)==0;g:do if(!T){h:do if((c[g>>2]|0)==1){H=c[g+48>>2]|0;p=c[g+24>>2]|0;h=c[j>>2]|0;i:do if((h|0)>0){n=0;while(1){k=c[j+4+(n*20|0)>>2]|0;j:do if(!k)k=0;else while(1){m=c[k+4>>2]|0;if(!(m&4096))break j;if(!(m&262144))k=k+12|0;else k=(c[k+20>>2]|0)+4|0;k=c[k>>2]|0;if(!k){k=0;break}}while(0);if(((a[k>>0]|0)==-94?(c[k+28>>2]|0)==(H|0):0)?(b[k+32>>1]|0)<0:0)break i;n=n+1|0;if((n|0)>=(h|0)){ka=92;break}}}else ka=92;while(0);k:do if((ka|0)==92){k=c[p+8>>2]|0;if(!k)break h;x=va+4|0;y=va+12|0;z=va+16|0;A=va+8|0;B=va+20|0;C=va+24|0;D=va+28|0;E=va+17|0;F=va+18|0;G=va+72|0;while(1){if(a[k+54>>0]|0){w=k+50|0;l:do if(!(b[w>>1]|0))m=0;else{s=k+4|0;t=k+40|0;u=k+32|0;v=k+12|0;m=0;do{c[va>>2]=ya;c[x>>2]=ya;c[y>>2]=0;a[z>>0]=0;c[A>>2]=0;c[B>>2]=2;c[C>>2]=0;c[D>>2]=H;a[E>>0]=1;a[F>>0]=1;p=b[(c[s>>2]|0)+(m<<1)>>1]|0;n=p<<16>>16;if(p<<16>>16==-2){c[y>>2]=c[(c[t>>2]|0)+4+(m*20|0)>>2];c[A>>2]=c[(c[u>>2]|0)+(m<<2)>>2];b[G>>1]=-2;n=Ul(va)|0}else{h=c[v>>2]|0;do if(p<<16>>16==(b[h+40>>1]|0))n=-1;else{if(p<<16>>16<=-1)break;a[z>>0]=a[(c[h+4>>2]|0)+(n<<4)+13>>0]|0;c[A>>2]=c[(c[u>>2]|0)+(m<<2)>>2]}while(0);b[G>>1]=n;n=Tl(va)|0}do if(n){p=0;while(1){ka=n+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0){if(b[n+12>>1]&2){ka=108;break}p=(p|0)==0?n:p}n=Tl(va)|0;if(!n){ka=111;break}}if((ka|0)==108){ka=0;break}else if((ka|0)==111){ka=0;if(!p){ka=112;break}else break}}else ka=112;while(0);if((ka|0)==112){r=c[(c[u>>2]|0)+(m<<2)>>2]|0;if((c[j>>2]|0)<=0)break l;q=0;m:while(1){h=c[j+4+(q*20|0)>>2]|0;n:do if(!h)n=0;else{n=h;while(1){p=c[n+4>>2]|0;if(!(p&4096))break n;if(!(p&262144))n=n+12|0;else n=(c[n+20>>2]|0)+4|0;n=c[n>>2]|0;if(!n){n=0;break}}}while(0);do if((a[n>>0]|0)==-94){if((b[n+32>>1]|0)!=(b[(c[s>>2]|0)+(m<<1)>>1]|0))break;if((c[n+28>>2]|0)!=(H|0))break;n=Yi(f,h)|0;if(!n)n=c[(c[f>>2]|0)+8>>2]|0;p=c[n>>2]|0;ka=a[p>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(n|0)!=0)){h=r;do{p=p+1|0;h=h+1|0;ka=a[p>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(n|0)!=0))}if(!n)break m}while(0);q=q+1|0;if((q|0)>=(c[j>>2]|0))break l}n=b[(c[s>>2]|0)+(m<<1)>>1]|0;if(n<<16>>16>-1)n=d[(c[(c[v>>2]|0)+4>>2]|0)+(n<<16>>16<<4)+12>>0]|0;else n=n<<16>>16==-1&1;if(!n)break l}m=m+1|0}while(m>>>0<(e[w>>1]|0)>>>0)}while(0);if((m|0)==(e[w>>1]|0))break k}k=c[k+20>>2]|0;if(!k)break h}}while(0);a[i+51>>0]=1;break g}while(0);if(!I){b[fa>>1]=b[fa>>1]|128;c[X>>2]=j}}while(0);if((((o|0)==1?(R=c[U>>2]|0,P=c[O>>2]|0,S=R+44|0,(b[S>>1]&32)==0):0)?(Q=c[R+4>>2]|0,M=c[Q+24>>2]|0,(c[M+56>>2]|0)==0):0)?(a[Q+45>>0]&2)==0:0){I=c[Q+48>>2]|0;J=R+80|0;K=P+36|0;c[K>>2]=0;b[P+42>>1]=0;c[va>>2]=J;c[va+4>>2]=J;c[va+12>>2]=0;a[va+16>>0]=0;c[va+8>>2]=0;c[va+20>>2]=130;c[va+24>>2]=0;c[va+28>>2]=I;a[va+17>>0]=1;a[va+18>>0]=1;b[va+72>>1]=-1;m=Tl(va)|0;do if(!m)ka=154;else{k=0;while(1){ka=m+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?b[m+12>>1]&130:0){ka=150;break}k=(k|0)==0?m:k;m=Tl(va)|0;if(!m){ka=152;break}}if((ka|0)==150)k=m;else if((ka|0)==152)if(!k){ka=154;break}c[K>>2]=4353;c[c[P+48>>2]>>2]=k;b[P+40>>1]=1;b[P+24>>1]=1;b[P+20>>1]=33}while(0);o:do if((ka|0)==154?(N=c[M+8>>2]|0,N|0):0){x=va+4|0;y=va+12|0;z=va+16|0;A=va+8|0;B=va+20|0;C=va+24|0;D=va+28|0;E=va+17|0;F=va+18|0;G=va+72|0;H=P+48|0;k=N;p:while(1){do if(a[k+54>>0]|0){if(c[k+36>>2]|0)break;w=k+50|0;m=b[w>>1]|0;if((m&65535)>3)break;u=k+55|0;u=(d[u>>0]|d[u+1>>0]<<8)<<4&128|2;v=u&65535;q:do if(!(m<<16>>16))m=0;else{q=k+4|0;r=k+40|0;s=k+32|0;t=k+12|0;m=0;while(1){c[va>>2]=J;c[x>>2]=J;c[y>>2]=0;a[z>>0]=0;c[A>>2]=0;c[B>>2]=v;c[C>>2]=0;c[D>>2]=I;a[E>>0]=1;a[F>>0]=1;p=b[(c[q>>2]|0)+(m<<1)>>1]|0;n=p<<16>>16;if(p<<16>>16==-2){c[y>>2]=c[(c[r>>2]|0)+4+(m*20|0)>>2];c[A>>2]=c[(c[s>>2]|0)+(m<<2)>>2];b[G>>1]=-2;p=Ul(va)|0}else{h=c[t>>2]|0;do if(p<<16>>16==(b[h+40>>1]|0))n=-1;else{if(p<<16>>16<=-1)break;a[z>>0]=a[(c[h+4>>2]|0)+(n<<4)+13>>0]|0;c[A>>2]=c[(c[s>>2]|0)+(m<<2)>>2]}while(0);b[G>>1]=n;p=Tl(va)|0}if(!p)break;n=0;while(1){ka=p+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?(b[p+12>>1]&u)<<16>>16:0){ka=172;break}n=(n|0)==0?p:n;p=Tl(va)|0;if(!p){ka=174;break}}if((ka|0)==172)n=p;else if((ka|0)==174)if(!n)break q;c[(c[H>>2]|0)+(m<<2)>>2]=n;m=m+1|0;if(m>>>0>=(e[w>>1]|0)>>>0)break q}}while(0);if((m|0)==(e[w>>1]|0))break p}while(0);k=c[k+20>>2]|0;if(!k)break o}ka=k+55|0;c[K>>2]=4609;if(!(((d[ka>>0]|d[ka+1>>0]<<8)&32)==0?(ka=Q+64|0,Q=k+64|0,!((c[Q>>2]&c[ka>>2]|0)==0?(c[Q+4>>2]&c[ka+4>>2]|0)==0:0)):0))c[K>>2]=4673;ka=m&65535;b[P+40>>1]=ka;b[P+24>>1]=ka;c[P+32>>2]=k;b[P+20>>1]=39}while(0);if(c[K>>2]|0){b[P+22>>1]=1;c[R+816>>2]=P;k=P+8|0;c[k>>2]=1;c[k+4>>2]=0;c[R+756>>2]=I;b[R+72>>1]=1;k=c[R+8>>2]|0;if(k|0)a[R+47>>0]=c[k>>2];if(!(b[S>>1]&256))ka=264;else{a[R+51>>0]=1;ka=264}}else ka=187}else ka=187;if((ka|0)==187){E=c[U>>2]|0;k=c[E+4>>2]|0;S=a[E+46>>0]|0;F=k+8+((S&255)*72|0)|0;H=c[c[E>>2]>>2]|0;G=c[O>>2]|0;I=G+56|0;J=G+48|0;c[J>>2]=I;K=G+40|0;b[K>>1]=0;M=G+44|0;b[M>>1]=3;N=G+36|0;c[N>>2]=0;z=U+24|0;c[z>>2]=2e4;do if(S<<24>>24){A=G+16|0;B=E+492|0;C=G+8|0;D=H+81|0;s=0;y=0;m=k+8|0;p=2e4;r=0;n=0;q=0;x=0;r:while(1){a[A>>0]=y;c[z>>2]=p+1e3;p=c[m+40>>2]|0;t=c[B>>2]|0;h=(t|0)>0;s:do if(h){k=0;while(1){if((c[E+496+(k<<2)>>2]|0)==(p|0))break;k=k+1|0;if((k|0)>=(t|0)){k=0;p=0;break s}}k=cw(1,0,k|0)|0;p=L()|0}else{k=0;p=0}while(0);u=C;c[u>>2]=k;c[u+4>>2]=p;u=a[m+36>>0]|0;w=((u|s)&10)==0;v=w?r:n;w=w?q:x;if(!(c[(c[m+16>>2]|0)+56>>2]|0)){k=Xl(U,v,w)|0;h=0;p=0}else{k=m+72|0;if(k>>>0>=F>>>0|h^1){h=0;p=0}else{q=m;h=0;p=0;while(1){if((h|0)==0&(p|0)==0?(a[q+108>>0]&10)==0:0){h=0;p=0}else{r=c[q+112>>2]|0;q=0;while(1){if((c[E+496+(q<<2)>>2]|0)==(r|0)){ka=202;break}q=q+1|0;if((q|0)>=(t|0)){q=0;r=0;break}}if((ka|0)==202){ka=0;q=cw(1,0,q|0)|0;r=L()|0}h=q|h;p=r|p}q=k+72|0;if(q>>>0<F>>>0){S=k;k=q;q=S}else break}}k=Wl(U,v,w,h,p)|0}do if(!k)if(!(a[(c[ba>>2]|0)+9>>0]|0)){k=C;n=c[k>>2]|n;k=c[k+4>>2]|x;ka=212;break}else{k=Yl(U,v,w,h,p)|0;ka=211;break}else ka=211;while(0);t:do if((ka|0)==211){ka=0;p=C;n=c[p>>2]|n;p=c[p+4>>2]|x;switch(k|0){case 0:{k=p;ka=212;break t}case 101:break;default:break r}Db(28,43626,V);k=p}while(0);if((ka|0)==212){ka=0;if(a[D>>0]|0){k=0;break}}m=m+72|0;if(m>>>0>=F>>>0){k=0;break}s=u;y=y+1|0;p=c[z>>2]|0;r=v;q=w;x=k}m=c[J>>2]|0;if((m|0)!=(I|0)){if(H|0){if(c[H+480>>2]|0){Xd(H,m);p=k;break}V=m;if((c[H+304>>2]|0)>>>0<=V>>>0?(c[H+308>>2]|0)>>>0>V>>>0:0){p=H+300|0;c[m>>2]=c[p>>2];c[p>>2]=m;p=k;break}}if(m)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);p=k;break}else{p=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);p=k;break}else p=k}else p=k}else p=0;while(0);k=c[N>>2]|0;do if(k&17408|0){if(k&1024|0?(Y=G+28|0,a[Y>>0]|0):0){k=G+32|0;m=c[k>>2]|0;do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Z=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);a[Y>>0]=0;c[k>>2]=0;break}if(k&16384|0?(Z=G+32|0,W=c[Z>>2]|0,W|0):0){k=c[W+16>>2]|0;u:do if(k){do if(H|0){m=H+480|0;if(!(c[m>>2]|0)){n=k;if((c[H+304>>2]|0)>>>0>n>>>0)break;if((c[H+308>>2]|0)>>>0<=n>>>0)break;ka=H+300|0;c[k>>2]=c[ka>>2];c[ka>>2]=k}else Xd(H,k);k=c[Z>>2]|0;ka=250;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);ka=248;break}else{ka=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);ka=248;break}}else ka=248;while(0);do if((ka|0)==248){k=c[Z>>2]|0;if(!H){ka=255;break}m=H+480|0;ka=250}while(0);do if((ka|0)==250){if(c[m>>2]|0){Xd(H,k);break}m=k;if((c[H+304>>2]|0)>>>0>m>>>0){ka=255;break}if((c[H+308>>2]|0)>>>0<=m>>>0){ka=255;break}Y=H+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k}while(0);do if((ka|0)==255){if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[Z>>2]=0}}while(0);c[J>>2]=I;b[K>>1]=0;b[M>>1]=3;c[N>>2]=0;if(p|0){ka=625;break}Jl(i,0);if(a[ra>>0]|0){ka=625;break}if(c[X>>2]|0){Jl(i,(e[i+72>>1]|0)+1&65535);if(!(a[ra>>0]|0))ka=264;else break}else ka=265}if((ka|0)==264?(c[X>>2]|0)==0:0)ka=265;if((ka|0)==265?!(0==0?(c[Aa+32>>2]&4096|0)==0:0):0){Z=i+64|0;c[Z>>2]=-1;c[Z+4>>2]=-1}if((c[f+36>>2]|0)==0?(a[ra>>0]|0)==0:0){v:do if((j|0)!=0&(d[za>>0]|0)>1?(b[_>>1]&256)==0:0){k=c[j>>2]|0;if((k|0)>0){q=0;h=0;n=0;while(1){m=c[j+4+(q*20|0)>>2]|0;if(!m){m=0;p=0}else{m=Pl(aa,m)|0;p=L()|0;k=c[j>>2]|0}m=m|h;n=p|n;q=q+1|0;if((q|0)>=(k|0)){t=m;s=n;break}else h=m}}else{t=0;s=0}r=c[$>>2]|0;if(!r)A=t;else{k=c[r>>2]|0;if((k|0)>0){q=0;h=k;m=0;k=0;do{n=c[r+4+(q*20|0)>>2]|0;if(!n){n=0;p=0}else{n=Pl(aa,n)|0;p=L()|0;h=c[r>>2]|0}m=n|m;k=p|k;q=q+1|0}while((q|0)<(h|0))}else{m=0;k=0}s=k|s;A=m|t}k=a[za>>0]|0;m=k&255;n=m+-1|0;if((k&255)>1){if(!T){z=n;x=-1;n=-1;while(1){y=qa+(z*80|0)|0;p=c[qa+(z*80|0)+64>>2]|0;h=c[ca>>2]|0;q=d[p+16>>0]|0;w:do if(!(a[h+8+(q*72|0)+36>>0]&8))m=x;else{w=p+8|0;u=c[w>>2]|0;w=c[w+4>>2]|0;if(!((u&A|0)==0&(w&s|0)==0)){m=x;break}t=c[ba>>2]|0;r=c[t+20>>2]|0;t=c[t+12>>2]|0;v=r+(t*48|0)|0;t=(t|0)>0;do if(t){h=h+8+(q*72|0)+40|0;p=r;do{aa=p+40|0;if(!((c[aa>>2]&u|0)==0?(c[aa+4>>2]&w|0)==0:0)){q=c[p>>2]|0;if(!(c[q+4>>2]&1)){m=x;break w}if((c[h>>2]|0)!=(b[q+36>>1]|0)){m=x;break w}}p=p+48|0}while(p>>>0<v>>>0);h=x&~u;p=n&~w;if(!t)break;n=r;do{aa=n+40|0;if(!((c[aa>>2]&u|0)==0?(c[aa+4>>2]&w|0)==0:0)){aa=n+10|0;b[aa>>1]=b[aa>>1]|4}n=n+48|0}while(n>>>0<v>>>0)}else{h=x&~u;p=n&~w}while(0);n=(k&255)+-1|0;if((n|0)!=(z|0)){fw(y|0,qa+(m*80|0)|0,(n-z|0)*80|0)|0;k=a[za>>0]|0}k=k+-1<<24>>24;a[za>>0]=k;o=o+-1|0;m=h;n=p}while(0);if((z|0)>1){aa=z;z=z+-1|0;x=m;m=aa}else{ba=o;J=m;I=n;break v}}}z=n;x=-1;n=-1;while(1){y=qa+(z*80|0)|0;p=c[qa+(z*80|0)+64>>2]|0;h=c[ca>>2]|0;q=d[p+16>>0]|0;x:do if(!(a[h+8+(q*72|0)+36>>0]&8))m=x;else{if(!(c[p+36>>2]&4096)){m=x;break}w=p+8|0;v=c[w>>2]|0;w=c[w+4>>2]|0;if(!((v&A|0)==0&(w&s|0)==0)){m=x;break}t=c[ba>>2]|0;r=c[t+20>>2]|0;t=c[t+12>>2]|0;u=r+(t*48|0)|0;t=(t|0)>0;do if(t){q=h+8+(q*72|0)+40|0;p=r;do{aa=p+40|0;if(!((c[aa>>2]&v|0)==0?(c[aa+4>>2]&w|0)==0:0)){h=c[p>>2]|0;if(!(c[h+4>>2]&1)){m=x;break x}if((c[q>>2]|0)!=(b[h+36>>1]|0)){m=x;break x}}p=p+48|0}while(p>>>0<u>>>0);h=x&~v;p=n&~w;if(!t)break;n=r;do{aa=n+40|0;if(!((c[aa>>2]&v|0)==0?(c[aa+4>>2]&w|0)==0:0)){aa=n+10|0;b[aa>>1]=b[aa>>1]|4}n=n+48|0}while(n>>>0<u>>>0)}else{h=x&~v;p=n&~w}while(0);n=(k&255)+-1|0;if((n|0)!=(z|0)){fw(y|0,qa+(m*80|0)|0,(n-z|0)*80|0)|0;k=a[za>>0]|0}k=k+-1<<24>>24;a[za>>0]=k;o=o+-1|0;m=h;n=p}while(0);if((z|0)>1){aa=z;z=z+-1|0;x=m;m=aa}else{ba=o;J=m;I=n;break}}}else{ba=o;J=-1;I=-1}}else{ba=o;J=-1;I=-1}while(0);ca=(c[i>>2]|0)+132|0;c[ca>>2]=(c[ca>>2]|0)+(b[i+72>>1]|0);do if(da&4){m=(c[i+816>>2]|0)+36|0;n=c[m>>2]|0;o=n&4096;if(!o){if(!(da&8)){D=0;break}k=c[g+24>>2]|0;if(c[k+56>>2]|0){D=0;break}if((da&16|0)==0&(n&8192|0)!=0){D=0;break}}else k=c[g+24>>2]|0;a[i+49>>0]=2-(o>>>12);if(!((n&64|0)==0?1:(c[k+36>>2]&32|0)!=0)){c[m>>2]=n&-65;D=ta&8}else D=0}else D=0;while(0);H=(ba|0)>0;if(H){E=Aa+16|0;F=f+116|0;G=i+49|0;w=ea^1;x=ua+108|0;y=ua+112|0;C=(l|0)==0|w;z=ua+104|0;A=f+40|0;B=i+51|0;u=qa;v=0;while(1){p=d[u+44>>0]|0;s=g+8+(p*72|0)+16|0;o=c[s>>2]|0;m=c[o+72>>2]|0;if(!m)t=-1e6;else{n=c[E>>2]|0;k=0;while(1)if((c[n+(k<<4)+12>>2]|0)==(m|0)){t=k;break}else k=k+1|0}q=c[u+64>>2]|0;r=o+36|0;do if(!(c[r>>2]&2)){if(c[o+12>>2]|0)break;k=c[q+36>>2]|0;if(k&1024|0){k=c[o+64>>2]|0;y:do if(!k)o=0;else while(1){if((c[k>>2]|0)==(Aa|0)){o=k;break y}k=c[k+24>>2]|0;if(!k){o=0;break}}while(0);m=c[g+8+(p*72|0)+40>>2]|0;k=c[x>>2]|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;ea=c[z>>2]|0;a[ea+(k*20|0)>>0]=-93;b[ea+(k*20|0)+2>>1]=0;c[ea+(k*20|0)+4>>2]=m;c[ea+(k*20|0)+8>>2]=0;c[ea+(k*20|0)+12>>2]=0;c[ea+(k*20|0)+16>>2]=0;a[ea+(k*20|0)+1>>0]=0}else k=Di(ua,163,m,0,0)|0;if(a[(c[ua>>2]|0)+81>>0]|0)break;if((k|0)<0)k=(c[x>>2]|0)+-1|0;m=c[z>>2]|0;n=m+(k*20|0)+1|0;if(a[n>>0]|0){Ei(ua,m+(k*20|0)|0,o,-12);break}if(!o)break;c[m+(k*20|0)+16>>2]=o;a[n>>0]=-12;ea=o+12|0;c[ea>>2]=(c[ea>>2]|0)+1;break}if(c[o+56>>2]|0)break;if(k&64|ia|0){Hj(f,t,c[o+28>>2]|0,0,c[o>>2]|0);break}m=g+8+(p*72|0)+40|0;if(!(a[G>>0]|0))k=108;else{c[ga>>2]=c[m>>2];k=109}Gj(f,c[m>>2]|0,t,o,k);do if(!(a[G>>0]|0)){if((b[o+42>>1]|0)>=64)break;if(c[r>>2]&32|0)break;n=g+8+(p*72|0)+56|0;k=c[n>>2]|0;n=c[n+4>>2]|0;if((k|0)==0&(n|0)==0)m=0;else{m=0;do{k=bw(k|0,n|0,1)|0;n=L()|0;m=m+1|0}while(!((k|0)==0&(n|0)==0))}if(a[(c[ua>>2]|0)+81>>0]|0)break;k=(c[x>>2]|0)+-1|0;n=c[z>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=m;a[o>>0]=-3;break}else{Ei(ua,n+(k*20|0)|0,m,-3);break}}while(0);k=c[x>>2]|0;if((k|0)<=0)break;b[(c[z>>2]|0)+((k+-1|0)*20|0)+2>>1]=D}while(0);h=q+36|0;z:do if(c[h>>2]&512|0){p=c[q+32>>2]|0;do if(c[r>>2]&32|0){ea=p+55|0;if(((d[ea>>0]|d[ea+1>>0]<<8)&3)!=2|w)break;c[u+8>>2]=c[u+4>>2];break z}while(0);do if(!(a[G>>0]|0)){if(!C){o=106;k=l;break}k=c[A>>2]|0;c[A>>2]=k+1;o=108}else{k=c[(c[s>>2]|0)+8>>2]|0;if((k|0)==0|(k|0)==(p|0))k=l;else{m=l;do{m=m+1|0;k=c[k+20>>2]|0}while(!((k|0)==0|(k|0)==(p|0)));k=m}c[ha>>2]=k;o=109}while(0);c[u+8>>2]=k;m=c[p+44>>2]|0;n=c[x>>2]|0;if((c[y>>2]|0)>(n|0)){c[x>>2]=n+1;ea=c[z>>2]|0;a[ea+(n*20|0)>>0]=o;b[ea+(n*20|0)+2>>1]=0;c[ea+(n*20|0)+4>>2]=k;c[ea+(n*20|0)+8>>2]=m;c[ea+(n*20|0)+12>>2]=t;c[ea+(n*20|0)+16>>2]=0;a[ea+(n*20|0)+1>>0]=0}else Di(ua,o,k,m,t)|0;m=c[wa>>2]|0;n=Ij(f,p)|0;A:do if(n|0){k=c[m>>2]|0;if(!(a[k+81>>0]|0)){da=c[m+104>>2]|0;ea=(c[m+108>>2]|0)+-1|0;a[da+(ea*20|0)+1>>0]=-9;c[da+(ea*20|0)+16>>2]=n;break}if(c[k+480>>2]|0)break;ea=(c[n>>2]|0)+-1|0;c[n>>2]=ea;if(ea|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break A}m=n;if((c[k+304>>2]|0)>>>0>m>>>0)break;if((c[k+308>>2]|0)>>>0<=m>>>0)break;ea=k+300|0;c[n>>2]=c[ea>>2];c[ea>>2]=n;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ea=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);ea=c[h>>2]|0;if(!((ea&15|0)!=0&(ea&32770|0)==0))break;if(b[fa>>1]&1)break;if((a[B>>0]|0)==2)break;k=c[x>>2]|0;if((k|0)<=0)break;b[(c[z>>2]|0)+((k+-1|0)*20|0)+2>>1]=2}while(0);B:do if((t|0)>-1){o=c[F>>2]|0;o=(o|0)==0?f:o;k=o+84|0;m=c[k>>2]|0;n=1<<t;if(m&n|0)break;c[k>>2]=m|n;if((t|0)!=1)break;r=c[o>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[r>>2]|0,0,r,va,0,542)|0;if(m|0){cd(o,32157,ja);c[o+12>>2]=m;break}ea=c[va>>2]|0;c[(c[k>>2]|0)+20>>2]=ea;k=c[r+92>>2]|0;o=c[ea+4>>2]|0;c[o+4>>2]=c[ea>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;h=o+36|0;q=(c[p>>2]|0)-(c[h>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[p>>2]=k;n=o+80|0;k=c[n>>2]|0;if(!k)break;m=k+-4|0;c[n>>2]=m;k=m;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ea=(c[14820]|0)+1|0;c[14820]=ea;c[14821]=(ea|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](m)|0;ka=421;break}else{k=Wa[c[29352>>2]&127](m)|0;ka=421}while(0);do if((ka|0)==421){ka=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ea=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ea=Se(c[o>>2]|0,p,q)|0;c[h>>2]=(c[p>>2]|0)-(q&65535);if((ea|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break B}while(0)}while(0);v=v+1|0;if((v|0)==(ba|0)){aa=x;break}else u=u+80|0}}else aa=ua+108|0;c[i+56>>2]=c[aa>>2];if(!(a[ra>>0]|0)){if(!H){Aa=i;Ra=Ba;return Aa|0}W=va+20|0;X=va+4|0;Y=va+8|0;Z=va+24|0;_=f+40|0;j=f+19|0;$=f+44|0;V=0;U=I;do{T=qa+(V*80|0)|0;m=qa+(V*80|0)+64|0;if(c[(c[m>>2]|0)+36>>2]&16384|0){O=qa+(V*80|0)+44|0;I=d[O>>0]|0;S=c[wa>>2]|0;R=S+108|0;k=c[R>>2]|0;P=S+112|0;if((c[P>>2]|0)>(k|0)){c[R>>2]=k+1;A=c[S+104>>2]|0;a[A+(k*20|0)>>0]=17;A=A+(k*20|0)+1|0;B=A+19|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0));Q=k}else Q=Di(S,17,0,0,0)|0;M=g+8+(I*72|0)+16|0;H=c[M>>2]|0;k=c[ma>>2]|0;ja=c[la>>2]|0;N=k+(ja*48|0)|0;G=c[m>>2]|0;C:do if((ja|0)>0){y=g+8+(I*72|0)+40|0;z=g+8+(I*72|0)+36|0;A=H+4|0;B=G+44|0;C=G+48|0;D=G+56|0;w=0;x=k;p=0;k=0;m=0;n=0;while(1){o=c[x>>2]|0;ja=G;do if((c[ja>>2]|0)==0&(c[ja+4>>2]|0)==0){if(b[x+10>>1]&2)break;if(c[o+4>>2]&1|0)break;ja=c[y>>2]|0;a[W>>0]=3;c[X>>2]=127;c[Y>>2]=128;c[Z>>2]=ja;_j(va,o)|0;if(!(a[W>>0]|0))break;ja=c[f>>2]|0;k=Xk(ja,k,dk(ja,o,0,0)|0)|0}while(0);do if((c[x+20>>2]|0)==(c[y>>2]|0)){o=e[x+12>>1]|0;if(!(o&130)){o=w;break}if(a[z>>0]&8?!((o&128|0)==0?1:(c[(c[x>>2]|0)+4>>2]&1|0)!=0):0){o=w;break}ja=x+32|0;if(!((c[ja>>2]&J|0)==0?(c[ja+4>>2]&U|0)==0:0)){o=w;break}o=c[x+28>>2]|0;if((o|0)<0){o=w;break}if(!(Vl(c[x>>2]|0,a[(c[(c[M>>2]|0)+4>>2]|0)+(o<<4)+13>>0]|0)|0)){o=w;break}ja=(o|0)>63;u=cw(1,0,o|0)|0;v=L()|0;u=ja?0:u;v=ja?-2147483648:v;if(!(p<<24>>24)){t=c[(c[A>>2]|0)+(o<<4)>>2]|0;c[xa>>2]=c[H>>2];c[xa+4>>2]=t;Db(284,43705,xa);t=1}else t=p;if(!((u&m|0)==0&(v&n|0)==0)){p=t;o=w;break}r=c[f>>2]|0;o=w+1|0;if((w|0)<(e[B>>1]|0))p=c[C>>2]|0;else{s=w+8&-8;q=s<<2;D:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))ka=471;else break C;else{do if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0<q>>>0:0))){h=r+300|0;p=c[h>>2]|0;if(p|0){c[h>>2]=c[p>>2];ja=r+284|0;c[ja>>2]=(c[ja>>2]|0)+1;break D}h=r+296|0;p=c[h>>2]|0;if(!p){p=r+292|0;break}else{c[h>>2]=c[p>>2];ja=r+284|0;c[ja>>2]=(c[ja>>2]|0)+1;break D}}else p=r+288|0;while(0);c[p>>2]=(c[p>>2]|0)+1;ka=471}while(0);if((ka|0)==471){ka=0;p=_d(r,q,0)|0}if(!p)break C;ew(p|0,c[C>>2]|0,e[B>>1]<<2|0)|0;h=c[C>>2]|0;E:do if((h|0)!=(D|0)){if(c[r+480>>2]|0){Xd(r,h);break}q=h;do if((c[r+304>>2]|0)>>>0<=q>>>0){if((c[r+308>>2]|0)>>>0<=q>>>0)break;ja=r+300|0;c[h>>2]=c[ja>>2];c[ja>>2]=h;break E}while(0);if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{ja=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[C>>2]=p;b[B>>1]=s}c[p+(w<<2)>>2]=x;p=t;m=u|m;n=v|n}else o=w;while(0);x=x+48|0;if(x>>>0>=N>>>0){ka=486;break}else w=o}}else{o=0;k=0;n=0;m=0;ka=486}while(0);F:do if((ka|0)==486){ka=0;K=o&65535;b[G+40>>1]=K;b[G+24>>1]=K;K=G+36|0;c[K>>2]=16961;D=g+8+(I*72|0)+56|0;B=D;h=c[B+4>>2]|0;B=c[B>>2]&~m;z=h&((n|-2147483648)^2147483647);E=H+42|0;y=b[E>>1]|0;p=y<<16>>16;A=(y<<16>>16<63?y:63)<<16>>16;y=y<<16>>16>0;if(y){n=0;m=o;do{ja=cw(1,0,n|0)|0;m=m+(((ja&B|0)!=0|((L()|0)&z|0)!=0)&1)|0;n=n+1|0}while((n|0)<(A|0))}else m=o;q=c[f>>2]|0;C=((h|0)<0?p+-62|0:1)+m|0;s=C&65535;u=C<<16;t=u>>16;h=(u>>14)+7&-8;u=u>>15;r=u+2|0;p=h+72+(t+7+u+r&-8)|0;o=((p|0)<0)<<31>>31;G:do if(!q){ja=Sv(p|0,o|0,-1,-1)|0;l=L()|0;if(l>>>0>0|(l|0)==0&ja>>>0>2147483390)break F;if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](p)|0;ka=513;break}m=Wa[c[29356>>2]&127](p)|0;if((c[14985]|0)>>>0<p>>>0)c[14985]=p;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){ja=c[14978]|0;l=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;ia=L()|0;c[14768]=((ia|0)<0|(ia|0)==0&l>>>0<=ja>>>0)&1}n=Wa[c[29340>>2]&127](m)|0;if(!n)break F;m=Wa[c[29352>>2]&127](n)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){F=n;break}c[14987]=m;F=n}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0)break F}else{do if(!(0<o>>>0|(0==(o|0)?(e[q+276>>1]|0)>>>0<p>>>0:0))){n=q+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ka=q+284|0;c[ka>>2]=(c[ka>>2]|0)+1;ka=513;break G}n=q+296|0;m=c[n>>2]|0;if(!m){m=q+292|0;break}else{c[n>>2]=c[m>>2];ka=q+284|0;c[ka>>2]=(c[ka>>2]|0)+1;ka=513;break G}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(q,p,o)|0;ka=513}while(0);if((ka|0)==513){ka=0;if(!m)break;else F=m}gw(F|0,0,p|0)|0;n=F+72|0;x=F+32|0;c[x>>2]=n;n=n+h|0;c[F+8>>2]=n;n=n+r|0;w=F+4|0;c[w>>2]=n;c[F+28>>2]=n+u;b[F+52>>1]=s;b[F+50>>1]=t+65535;c[G+32>>2]=F;c[F>>2]=43731;c[F+12>>2]=H;n=c[ma>>2]|0;if(n>>>0<N>>>0){v=g+8+(I*72|0)+40|0;u=g+8+(I*72|0)+36|0;m=0;p=0;s=0;while(1){do if((c[n+20>>2]|0)==(c[v>>2]|0)){o=e[n+12>>1]|0;if(!(o&130)){o=s;break}if(a[u>>0]&8?!((o&128|0)==0?1:(c[(c[n>>2]|0)+4>>2]&1|0)!=0):0){o=s;break}ja=n+32|0;if(!((c[ja>>2]&J|0)==0?(c[ja+4>>2]&U|0)==0:0)){o=s;break}q=c[n+28>>2]|0;if((q|0)<0){o=s;break}r=c[n>>2]|0;if(!(Vl(r,a[(c[(c[M>>2]|0)+4>>2]|0)+(q<<4)+13>>0]|0)|0)){o=s;break}ja=(q|0)>63;o=cw(1,0,q|0)|0;h=L()|0;o=ja?0:o;h=ja?-2147483648:h;if(!((o&p|0)==0&(h&s|0)==0)){o=s;break}t=o|p;h=h|s;b[(c[w>>2]|0)+(m<<1)>>1]=q;o=c[r+12>>2]|0;p=c[r+16>>2]|0;H:do if(!(c[o+4>>2]&256)){do if(p|0){if(!(c[p+4>>2]&256))break;o=Yi(f,p)|0;ka=531;break H}while(0);o=Yi(f,o)|0;if(o|0){ka=532;break}o=Yi(f,p)|0;ka=531}else{o=Yi(f,o)|0;ka=531}while(0);if((ka|0)==531){ka=0;if(!o)o=34049;else ka=532}if((ka|0)==532){ka=0;o=c[o>>2]|0}c[(c[x>>2]|0)+(m<<2)>>2]=o;m=m+1|0;p=t;o=h}else o=s;while(0);n=n+48|0;if(n>>>0>=N>>>0)break;else s=o}}else m=0;if(y){n=0;do{ja=cw(1,0,n|0)|0;if(!((ja&B|0)==0&((L()|0)&z|0)==0)){b[(c[w>>2]|0)+(m<<1)>>1]=n;c[(c[x>>2]|0)+(m<<2)>>2]=34049;m=m+1|0}n=n+1|0}while((n|0)<(A|0))}do if((c[D+4>>2]|0)<0){if((b[E>>1]|0)<=63){z=m;break}n=63;do{b[(c[w>>2]|0)+(m<<1)>>1]=n;c[(c[x>>2]|0)+(m<<2)>>2]=34049;m=m+1|0;n=n+1|0}while((n|0)<(b[E>>1]|0));z=m}else z=m;while(0);b[(c[w>>2]|0)+(z<<1)>>1]=-1;c[(c[x>>2]|0)+(z<<2)>>2]=34049;m=c[_>>2]|0;c[_>>2]=m+1;u=qa+(V*80|0)+8|0;c[u>>2]=m;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;ja=c[S+104>>2]|0;a[ja+(n*20|0)>>0]=112;b[ja+(n*20|0)+2>>1]=0;c[ja+(n*20|0)+4>>2]=m;c[ja+(n*20|0)+8>>2]=C;c[ja+(n*20|0)+12>>2]=0;c[ja+(n*20|0)+16>>2]=0;a[ja+(n*20|0)+1>>0]=0}else Di(S,112,m,C,0)|0;m=c[wa>>2]|0;o=Ij(f,F)|0;I:do if(o|0){n=c[m>>2]|0;if(!(a[n+81>>0]|0)){l=c[m+104>>2]|0;ja=(c[m+108>>2]|0)+-1|0;a[l+(ja*20|0)+1>>0]=-9;c[l+(ja*20|0)+16>>2]=o;break}if(c[n+480>>2]|0)break;ja=(c[o>>2]|0)+-1|0;c[o>>2]=ja;if(ja|0)break;m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break I}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;ja=m+300|0;c[o>>2]=c[ja>>2];c[ja>>2]=o;break I}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ja=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);v=c[(c[ya>>2]|0)+4>>2]|0;t=d[O>>0]|0;y=v+8+(t*72|0)+37|0;do if(!(a[y>>0]&16)){m=c[qa+(V*80|0)+4>>2]|0;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;x=c[S+104>>2]|0;a[x+(n*20|0)>>0]=36;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=m;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=0;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0;x=n;m=0;break}else{x=Di(S,36,m,0,0)|0;m=0;break}}else{p=c[v+8+(t*72|0)+28>>2]|0;m=c[R>>2]|0;if((c[P>>2]|0)>(m|0)){c[R>>2]=m+1;A=c[S+104>>2]|0;a[A+(m*20|0)>>0]=70;A=A+(m*20|0)+1|0;B=A+19|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}else m=Di(S,70,0,0,0)|0;n=c[v+8+(t*72|0)+24>>2]|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=13;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=p;c[ja+(o*20|0)+8>>2]=0;c[ja+(o*20|0)+12>>2]=n;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0}else Di(S,13,p,0,n)|0;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;x=c[S+104>>2]|0;a[x+(n*20|0)>>0]=14;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=p;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=0;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0;x=n;break}else{x=Di(S,14,p,0,0)|0;break}}while(0);q=(k|0)!=0;if(q){h=(c[sa>>2]|0)+-1|0;c[sa>>2]=h;Tj(f,k,h,16);c[K>>2]=c[K>>2]|131072}else h=0;n=a[j>>0]|0;if(!(n<<24>>24)){w=(c[$>>2]|0)+1|0;c[$>>2]=w}else{w=n+-1<<24>>24;a[j>>0]=w;w=c[f+148+((w&255)<<2)>>2]|0}s=qa+(V*80|0)+4|0;r=el(f,F,c[s>>2]|0,w,0,0,0,0)|0;n=c[u>>2]|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=-124;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=n;c[ja+(o*20|0)+8>>2]=w;c[ja+(o*20|0)+12>>2]=0;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0}else Di(S,132,n,w,0)|0;p=c[R>>2]|0;if((p|0)>0)b[(c[S+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=16;do if(q){o=c[S+12>>2]|0;n=~h;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,S,n);break}else{c[(c[o+64>>2]|0)+(n<<2)>>2]=p;break}}while(0);do if(!(a[y>>0]&16)){m=c[s>>2]|0;n=x+1|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=5;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=m;c[ja+(o*20|0)+8>>2]=n;c[ja+(o*20|0)+12>>2]=0;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0;break}else{Di(S,5,m,n,0)|0;break}}else{if((m|0)<0)m=(c[R>>2]|0)+-1|0;if(!(a[(c[S>>2]|0)+81>>0]|0))m=(c[S+104>>2]|0)+(m*20|0)|0;else m=59308;c[m+8>>2]=r+z;q=c[s>>2]|0;h=c[v+8+(t*72|0)+32>>2]|0;n=c[wa>>2]|0;if((x|0)<0)m=(c[n+108>>2]|0)+-1|0;else m=x;if(!(a[(c[n>>2]|0)+81>>0]|0))m=(c[n+104>>2]|0)+(m*20|0)|0;else m=59308;p=c[n+108>>2]|0;if((p|0)>(x|0)?(a[(c[f>>2]|0)+81>>0]|0)==0:0){n=x;while(1){o=m+4|0;J:do if((c[o>>2]|0)==(q|0))switch(a[m>>0]|0){case 90:{a[m>>0]=78;l=m+8|0;c[o>>2]=(c[l>>2]|0)+h;ja=m+12|0;c[l>>2]=c[ja>>2];c[ja>>2]=0;break J}case -128:{a[m>>0]=83;ja=m+8|0;c[o>>2]=c[ja>>2];c[ja>>2]=1;break J}default:break J}while(0);n=n+1|0;if((n|0)==(p|0))break;else m=m+20|0}}m=c[R>>2]|0;if((c[P>>2]|0)>(m|0)){c[R>>2]=m+1;ja=c[S+104>>2]|0;a[ja+(m*20|0)>>0]=11;b[ja+(m*20|0)+2>>1]=0;c[ja+(m*20|0)+4>>2]=0;c[ja+(m*20|0)+8>>2]=x;c[ja+(m*20|0)+12>>2]=0;c[ja+(m*20|0)+16>>2]=0;a[ja+(m*20|0)+1>>0]=0}else Di(S,11,0,x,0)|0;a[y>>0]=a[y>>0]&-17}while(0);n=c[R>>2]|0;if((n|0)>0)b[(c[S+104>>2]|0)+((n+-1|0)*20|0)+2>>1]=3;o=(a[(c[S>>2]|0)+81>>0]|0)==0;if(o)m=(c[S+104>>2]|0)+(((x|0)<0?n+-1|0:x)*20|0)|0;else m=59308;c[m+8>>2]=n;do if(w){m=a[j>>0]|0;if((m&255)>=8)break;a[j>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=w;n=c[R>>2]|0}while(0);if(o)m=(c[S+104>>2]|0)+(((Q|0)<0?n+-1|0:Q)*20|0)|0;else m=59308;c[m+8>>2]=n}while(0);if(k|0)ni(c[f>>2]|0,k);if(a[ra>>0]|0){ka=625;break e}}Kl(f,g,T,ta);c[qa+(V*80|0)+32>>2]=c[aa>>2];J=Ll(f,ua,i,V,T,J,U)|0;U=L()|0;c[na>>2]=c[qa+(V*80|0)+24>>2];V=V+1|0}while((V|0)<(ba|0));Ra=Ba;return i|0}}}else ka=625;while(0);if((ka|0)==625?(i|0)==0:0){Aa=0;Ra=Ba;return Aa|0}c[oa>>2]=c[pa>>2];k=a[za>>0]|0;K:do if(k<<24>>24){n=Aa+480|0;o=Aa+304|0;p=Aa+308|0;h=Aa+300|0;if(!Aa){m=0;while(1){xa=c[i+752+(m*80|0)+64>>2]|0;if((xa|0)!=0?(c[xa+36>>2]&2048|0)!=0:0){k=c[i+752+(m*80|0)+60>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{xa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-xa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);k=a[za>>0]|0}m=m+1|0;if(m>>>0>=(k&255)>>>0)break K}}m=0;do{xa=c[i+752+(m*80|0)+64>>2]|0;if((xa|0)!=0?(c[xa+36>>2]&2048|0)!=0:0){k=c[i+752+(m*80|0)+60>>2]|0;do if(k|0){if(c[n>>2]|0){Xd(Aa,k);break}xa=k;if((c[o>>2]|0)>>>0<=xa>>>0?(c[p>>2]|0)>>>0>xa>>>0:0){c[k>>2]=c[h>>2];c[h>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{xa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-xa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=a[za>>0]|0}m=m+1|0}while(m>>>0<(k&255)>>>0)}while(0);om(ya);m=i+60|0;k=c[m>>2]|0;if(k|0)do{c[m>>2]=c[k+52>>2];$l(Aa,k);k=c[m>>2]|0}while((k|0)!=0);if(Aa|0){if(c[Aa+480>>2]|0){Xd(Aa,i);Aa=0;Ra=Ba;return Aa|0}za=i;if((c[Aa+304>>2]|0)>>>0<=za>>>0?(c[Aa+308>>2]|0)>>>0>za>>>0:0){Aa=Aa+300|0;c[i>>2]=c[Aa>>2];c[Aa>>2]=i;Aa=0;Ra=Ba;return Aa|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}else{Aa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}return 0}function rl(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+16|0;u=P;O=c[f+8>>2]|0;K=a[k>>0]|0;y=k+4|0;M=c[y>>2]|0;if(!j)s=0;else s=d[j+1>>0]|0;if(!i)N=0;else N=(c[i>>2]|0)==0?0:i;F=(N|0)!=0;v=(s|0)!=0;do if(!(v|F)?(o=c[g+16>>2]|0,(o|0)>0):0){i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;L=c[O+104>>2]|0;a[L+(n*20|0)>>0]=47;b[L+(n*20|0)+2>>1]=0;c[L+(n*20|0)+4>>2]=o;c[L+(n*20|0)+8>>2]=l;c[L+(n*20|0)+12>>2]=1;c[L+(n*20|0)+16>>2]=0;a[L+(n*20|0)+1>>0]=0;break}else{Di(O,47,o,l,1)|0;break}}while(0);n=c[g>>2]|0;t=c[n>>2]|0;q=k+8|0;r=c[q>>2]|0;if(r){p=f+44|0;o=c[p>>2]|0;if((r+t|0)>(o|0)){i=0;E=16}else{C=0;L=r}}else{if(F){i=(c[c[N>>2]>>2]|0)+((a[N+32>>0]&1^1)&255)|0;p=f+44|0;o=i+(c[p>>2]|0)|0;c[p>>2]=o}else{o=f+44|0;i=0;p=o;o=c[o>>2]|0}r=o+1|0;c[q>>2]=r;E=16}if((E|0)==16){c[p>>2]=o+t;C=i;L=r}c[k+12>>2]=t;a:do if((h|0)>-1)if((t|0)>0){n=O+108|0;o=O+112|0;p=O+104|0;i=0;do{q=i+L|0;r=c[n>>2]|0;if((c[o>>2]|0)>(r|0)){c[n>>2]=r+1;G=c[p>>2]|0;a[G+(r*20|0)>>0]=90;b[G+(r*20|0)+2>>1]=0;c[G+(r*20|0)+4>>2]=h;c[G+(r*20|0)+8>>2]=i;c[G+(r*20|0)+12>>2]=q;c[G+(r*20|0)+16>>2]=0;a[G+(r*20|0)+1>>0]=0}else Di(O,90,h,i,q)|0;i=i+1|0}while((i|0)!=(t|0));G=t;x=L}else{G=t;x=L}else{switch(K<<24>>24){case 3:{G=t;x=L;break a}case 9:case 10:case 13:{i=1;break}default:i=0}if((K|2)<<24>>24!=14&((s|0)==0&F)){i=i|12;q=N+4|0;p=c[q>>2]|0;o=c[N>>2]|0;if((p|0)<(c[o>>2]|0)){n=p;do{p=b[o+4+(n*20|0)+16>>1]|0;if(!(p<<16>>16))n=n+1|0;else{n=n+1|0;b[(c[g>>2]|0)+4+(((p&65535)+-1|0)*20|0)+16>>1]=n-(c[q>>2]|0);o=c[N>>2]|0}}while((n|0)<(c[o>>2]|0));n=c[g>>2]|0;r=c[n>>2]|0}else r=t;if((r|0)>0){p=t;o=L;q=0;do{G=(b[n+4+(q*20|0)+16>>1]|0)==0;o=G?o:0;p=p+((G^1)<<31>>31)|0;q=q+1|0}while((q|0)<(r|0))}else{p=t;o=L}}else{p=t;o=L}c[u>>2]=L;a[u+4>>0]=i;if(c[g+12>>2]|0?(C|0)>0&(i&8)!=0:0){c[N+36>>2]=u;G=p;x=0;break}Oj(f,n,L,0,i);G=p;x=o}while(0);do if(v){b:do switch(a[j+1>>0]|0){case 2:{n=f+44|0;i=c[n>>2]|0;w=i+1|0;c[n>>2]=i+G;n=j+8|0;i=c[n>>2]|0;o=c[O>>2]|0;if(!(a[o+81>>0]|0)){j=c[O+104>>2]|0;u=j+(i*20|0)+1|0;v=j+(i*20|0)+16|0;kg(o,a[u>>0]|0,c[v>>2]|0);a[u>>0]=0;c[v>>2]=0;a[j+(i*20|0)>>0]=-86;i=c[n>>2]|0}if((i|0)<0)i=(c[O+108>>2]|0)+-1|0;if(!(a[(c[O>>2]|0)+81>>0]|0))i=(c[O+104>>2]|0)+(i*20|0)|0;else i=59308;a[i>>0]=73;c[i+4>>2]=1;c[i+8>>2]=w;t=O+108|0;i=c[t>>2]|0;h=i+G|0;u=G+-1|0;v=O+112|0;if((G|0)>0){s=O+104|0;r=0;do{q=Yi(f,c[(c[g>>2]|0)+4+(r*20|0)>>2]|0)|0;i=r+L|0;n=r+w|0;o=c[t>>2]|0;p=(c[v>>2]|0)>(o|0);do if((r|0)<(u|0))if(p){c[t>>2]=o+1;j=c[s>>2]|0;a[j+(o*20|0)>>0]=52;b[j+(o*20|0)+2>>1]=0;c[j+(o*20|0)+4>>2]=i;c[j+(o*20|0)+8>>2]=h;c[j+(o*20|0)+12>>2]=n;c[j+(o*20|0)+16>>2]=0;a[j+(o*20|0)+1>>0]=0;break}else{Di(O,52,i,h,n)|0;break}else if(p){c[t>>2]=o+1;j=c[s>>2]|0;a[j+(o*20|0)>>0]=53;b[j+(o*20|0)+2>>1]=0;c[j+(o*20|0)+4>>2]=i;c[j+(o*20|0)+8>>2]=l;c[j+(o*20|0)+12>>2]=n;c[j+(o*20|0)+16>>2]=0;a[j+(o*20|0)+1>>0]=0;break}else{Di(O,53,i,l,n)|0;break}while(0);do if(!(a[(c[O>>2]|0)+81>>0]|0)){i=(c[t>>2]|0)+-1|0;n=c[s>>2]|0;o=n+(i*20|0)+1|0;if(a[o>>0]|0){Ei(O,n+(i*20|0)|0,q,-2);break}if(q|0){c[n+(i*20|0)+16>>2]=q;a[o>>0]=-2}}while(0);i=c[t>>2]|0;if((i|0)>0)b[(c[s>>2]|0)+((i+-1|0)*20|0)+2>>1]=128;r=r+1|0}while((r|0)!=(G|0))}if((c[v>>2]|0)>(i|0)){c[t>>2]=i+1;j=c[O+104>>2]|0;a[j+(i*20|0)>>0]=78;b[j+(i*20|0)+2>>1]=0;c[j+(i*20|0)+4>>2]=L;c[j+(i*20|0)+8>>2]=w;c[j+(i*20|0)+12>>2]=u;c[j+(i*20|0)+16>>2]=0;a[j+(i*20|0)+1>>0]=0;break b}else{Di(O,78,L,w,u)|0;break b}}case 1:{i=c[j+8>>2]|0;n=c[O>>2]|0;if(!(a[n+81>>0]|0)){j=c[O+104>>2]|0;v=j+(i*20|0)+1|0;w=j+(i*20|0)+16|0;kg(n,a[v>>0]|0,c[w>>2]|0);a[v>>0]=0;c[w>>2]=0;a[j+(i*20|0)>>0]=-86}break}default:ym(f,c[j+4>>2]|0,l,G,L)}while(0);if((N|0)==0?(z=c[g+16>>2]|0,(z|0)>0):0){i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;j=c[O+104>>2]|0;a[j+(n*20|0)>>0]=47;b[j+(n*20|0)+2>>1]=0;c[j+(n*20|0)+4>>2]=z;c[j+(n*20|0)+8>>2]=l;c[j+(n*20|0)+12>>2]=1;c[j+(n*20|0)+16>>2]=0;a[j+(n*20|0)+1>>0]=0;break}else{Di(O,47,z,l,1)|0;break}}}while(0);c:do switch(K<<24>>24){case 1:{q=f+19|0;i=a[q>>0]|0;if(!(i<<24>>24)){K=f+44|0;p=(c[K>>2]|0)+1|0;c[K>>2]=p}else{p=i+-1<<24>>24;a[q>>0]=p;p=c[f+148+((p&255)<<2)>>2]|0}n=O+108|0;i=c[n>>2]|0;o=O+112|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=p;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(O,92,L,G,p)|0;i=c[n>>2]|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=M;c[K+(i*20|0)+8>>2]=p;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,M,p,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=G}if((p|0)!=0?(A=a[q>>0]|0,(A&255)<8):0){a[q>>0]=A+1<<24>>24;c[f+148+((A&255)<<2)>>2]=p;E=237}else E=237;break}case 2:{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;E=c[O+104>>2]|0;a[E+(n*20|0)>>0]=-123;b[E+(n*20|0)+2>>1]=0;c[E+(n*20|0)+4>>2]=M;c[E+(n*20|0)+8>>2]=L;c[E+(n*20|0)+12>>2]=G;c[E+(n*20|0)+16>>2]=0;a[E+(n*20|0)+1>>0]=0;E=237;break c}else{Di(O,133,M,L,G)|0;E=237;break c}}case 12:case 14:case 6:case 5:{t=C+1|0;h=(C|0)==0;do if(h){i=f+19|0;n=a[i>>0]|0;if(!(n<<24>>24)){E=f+44|0;s=(c[E>>2]|0)+1|0;c[E>>2]=s;break}else{s=n+-1<<24>>24;a[i>>0]=s;s=c[f+148+((s&255)<<2)>>2]|0;break}}else{i=f+32|0;n=c[i>>2]|0;o=f+28|0;p=c[o>>2]|0;if((p|0)>(C|0)){c[i>>2]=n+t;c[o>>2]=p-t;s=n;break}else{E=f+44|0;s=c[E>>2]|0;c[E>>2]=s+t;s=s+1|0;break}}while(0);p=s+C|0;q=O+108|0;i=c[q>>2]|0;r=O+112|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;E=c[O+104>>2]|0;a[E+(i*20|0)>>0]=92;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=L;c[E+(i*20|0)+8>>2]=G;c[E+(i*20|0)+12>>2]=p;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0}else Di(O,92,L,G,p)|0;if(K<<24>>24==6){i=c[q>>2]|0;n=i+4|0;o=M+1|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=29;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=o;c[K+(i*20|0)+8>>2]=n;c[K+(i*20|0)+12>>2]=s;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,29,o,n,s)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){K=c[O+104>>2]|0;a[K+(i*20|0)+1>>0]=-3;c[K+(i*20|0)+16>>2]=0}i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=o;c[K+(i*20|0)+8>>2]=s;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,o,s,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){L=c[O+104>>2]|0;a[L+(i*20|0)+1>>0]=-3;c[L+(i*20|0)+16>>2]=G}}if(!F){o=f+19|0;i=a[o>>0]|0;if(!(i<<24>>24)){L=f+44|0;n=(c[L>>2]|0)+1|0;c[L>>2]=n}else{n=i+-1<<24>>24;a[o>>0]=n;n=c[f+148+((n&255)<<2)>>2]|0}i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=121;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=n;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,121,M,n,0)|0;i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=122;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=s;c[L+(i*20|0)+12>>2]=n;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,122,M,s,n)|0;i=c[q>>2]|0;if((i|0)>0)b[(c[O+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=8;if(n|0?(H=a[o>>0]|0,(H&255)<8):0){a[o>>0]=H+1<<24>>24;c[f+148+((H&255)<<2)>>2]=n}}else zm(f,N,g,p,x,1,C);if(!h){i=f+28|0;if((c[i>>2]|0)>(C|0)){E=237;break c}c[i>>2]=t;c[f+32>>2]=s;E=237;break c}if((s|0)!=0?(I=f+19|0,J=a[I>>0]|0,(J&255)<8):0){a[I>>0]=J+1<<24>>24;c[f+148+((J&255)<<2)>>2]=s;E=237}else E=237;break}case 11:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}h=f+19|0;i=a[h>>0]|0;if(!(i<<24>>24)){K=f+44|0;s=(c[K>>2]|0)+1|0;c[K>>2]=s}else{s=i+-1<<24>>24;a[h>>0]=s;s=c[f+148+((s&255)<<2)>>2]|0}p=c[k+16>>2]|0;q=O+108|0;i=c[q>>2]|0;r=O+112|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=s;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,92,L,G,s)|0;n=c[O>>2]|0;do if(a[n+81>>0]|0){if((G|0)!=-12)kg(n,G,p)}else{if((i|0)<0)i=(c[q>>2]|0)+-1|0;n=c[O+104>>2]|0;o=n+(i*20|0)|0;if((G|0)<=-1?(B=n+(i*20|0)+1|0,(a[B>>0]|0)==0):0){if((G|0)==-3){c[n+(i*20|0)+16>>2]=p;a[B>>0]=-3;break}if(!p)break;c[n+(i*20|0)+16>>2]=p;a[B>>0]=G;if((G|0)!=-12)break;K=p+12|0;c[K>>2]=(c[K>>2]|0)+1;break}Ei(O,o,p,G)}while(0);i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=M;c[K+(i*20|0)+8>>2]=s;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,M,s,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=G}if(s|0?(D=a[h>>0]|0,(D&255)<8):0){a[h>>0]=D+1<<24>>24;c[f+148+((D&255)<<2)>>2]=s}break}case 3:{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;E=c[O+104>>2]|0;a[E+(n*20|0)>>0]=70;b[E+(n*20|0)+2>>1]=0;c[E+(n*20|0)+4>>2]=1;c[E+(n*20|0)+8>>2]=M;c[E+(n*20|0)+12>>2]=0;c[E+(n*20|0)+16>>2]=0;a[E+(n*20|0)+1>>0]=0;E=237;break c}else{Di(O,70,1,M,0)|0;E=237;break c}}case 10:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}break}case 9:case 13:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}if(K<<24>>24==13){i=c[y>>2]|0;n=O+108|0;o=c[n>>2]|0;if((c[O+112>>2]|0)>(o|0)){c[n>>2]=o+1;f=c[O+104>>2]|0;a[f+(o*20|0)>>0]=14;b[f+(o*20|0)+2>>1]=0;c[f+(o*20|0)+4>>2]=i;c[f+(o*20|0)+8>>2]=0;c[f+(o*20|0)+12>>2]=0;c[f+(o*20|0)+16>>2]=0;a[f+(o*20|0)+1>>0]=0;break c}else{Di(O,14,i,0,0)|0;break c}}else{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;f=c[O+104>>2]|0;a[f+(n*20|0)>>0]=81;b[f+(n*20|0)+2>>1]=0;c[f+(n*20|0)+4>>2]=L;c[f+(n*20|0)+8>>2]=G;c[f+(n*20|0)+12>>2]=0;c[f+(n*20|0)+16>>2]=0;a[f+(n*20|0)+1>>0]=0;break c}else{Di(O,81,L,G,0)|0;break c}}}case 7:case 8:{v=c[k+20>>2]|0;w=c[v>>2]|0;l=f+19|0;i=a[l>>0]|0;if(!(i<<24>>24)){i=f+44|0;j=(c[i>>2]|0)+1|0;c[i>>2]=j;i=0}else{i=i+-1<<24>>24;a[l>>0]=i;j=c[f+148+((i&255)<<2)>>2]|0}z=w+2|0;y=(z|0)==1;do if(y)if(!(i<<24>>24)){J=f+44|0;x=(c[J>>2]|0)+1|0;c[J>>2]=x;break}else{x=i+-1<<24>>24;a[l>>0]=x;x=c[f+148+((x&255)<<2)>>2]|0;break}else{i=f+32|0;n=c[i>>2]|0;o=f+28|0;p=c[o>>2]|0;if((p|0)<(z|0)){J=f+44|0;x=c[J>>2]|0;c[J>>2]=x+z;x=x+1|0;break}else{c[i>>2]=n+z;c[o>>2]=p-z;x=n;break}}while(0);u=x+w|0;r=u+1|0;q=K<<24>>24==8;if(q){n=M+1|0;o=O+108|0;i=c[o>>2]|0;p=O+112|0;if((c[p>>2]|0)>(i|0)){c[o>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=29;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=0;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,29,n,0,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){t=c[O+104>>2]|0;a[t+(i*20|0)+1>>0]=-3;c[t+(i*20|0)+16>>2]=G;t=i;h=o;s=p}else{t=i;h=o;s=p}}else{t=0;h=O+108|0;s=O+112|0}i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=r;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(O,92,L,G,r)|0;if(q){i=M+1|0;n=c[h>>2]|0;if((c[s>>2]|0)>(n|0)){c[h>>2]=n+1;K=c[O+104>>2]|0;a[K+(n*20|0)>>0]=-124;b[K+(n*20|0)+2>>1]=0;c[K+(n*20|0)+4>>2]=i;c[K+(n*20|0)+8>>2]=r;c[K+(n*20|0)+12>>2]=0;c[K+(n*20|0)+16>>2]=0;a[K+(n*20|0)+1>>0]=0}else Di(O,132,i,r,0)|0;i=c[h>>2]|0;if((i|0)>0)b[(c[O+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=16}if((w|0)>0){n=L+-1|0;o=O+104|0;i=0;do{p=n+(e[v+4+(i*20|0)+16>>1]|0)|0;q=i+x|0;r=c[h>>2]|0;if((c[s>>2]|0)>(r|0)){c[h>>2]=r+1;L=c[o>>2]|0;a[L+(r*20|0)>>0]=79;b[L+(r*20|0)+2>>1]=0;c[L+(r*20|0)+4>>2]=p;c[L+(r*20|0)+8>>2]=q;c[L+(r*20|0)+12>>2]=0;c[L+(r*20|0)+16>>2]=0;a[L+(r*20|0)+1>>0]=0}else Di(O,79,p,q,0)|0;i=i+1|0}while((i|0)!=(w|0))}i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=120;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=u;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,120,M,u,0)|0;i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=92;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=x;c[L+(i*20|0)+8>>2]=z;c[L+(i*20|0)+12>>2]=j;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,92,x,z,j)|0;i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=-124;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=j;c[L+(i*20|0)+12>>2]=x;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else i=Di(O,132,M,j,x)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=z}if(t|0){n=c[h>>2]|0;if(!(a[(c[O>>2]|0)+81>>0]|0))i=(c[O+104>>2]|0)+(((t|0)<0?n+-1|0:t)*20|0)|0;else i=59308;c[i+8>>2]=n}do if(j|0){i=a[l>>0]|0;if((i&255)>=8)break;a[l>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=j}while(0);if(!y){i=f+28|0;if((c[i>>2]|0)>=(z|0)){E=237;break c}c[i>>2]=z;c[f+32>>2]=x;E=237;break c}if(!x){E=237;break c}i=a[l>>0]|0;if((i&255)>=8){E=237;break c}a[l>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=x;E=237;break}default:E=237}while(0);if((E|0)==237?N|0:0){Ra=P;return}i=c[g+12>>2]|0;if(!i){Ra=P;return}n=O+108|0;o=c[n>>2]|0;if((c[O+112>>2]|0)>(o|0)){c[n>>2]=o+1;O=c[O+104>>2]|0;a[O+(o*20|0)>>0]=49;b[O+(o*20|0)+2>>1]=0;c[O+(o*20|0)+4>>2]=i;c[O+(o*20|0)+8>>2]=m;c[O+(o*20|0)+12>>2]=0;c[O+(o*20|0)+16>>2]=0;a[O+(o*20|0)+1>>0]=0;Ra=P;return}else{Di(O,49,i,m,0)|0;Ra=P;return}}function sl(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;D=c[e>>2]|0;E=D+8|0;F=c[E>>2]|0;G=c[e+4>>2]|0;I=c[D>>2]|0;H=e+46|0;g=a[H>>0]|0;if(!(g<<24>>24))f=F+12|0;else{f=F+12|0;u=e+51|0;v=F+108|0;w=F+112|0;x=F+104|0;y=D+44|0;s=g&255;do{t=s;s=s+-1|0;m=c[e+752+(s*80|0)+64>>2]|0;r=e+752+(s*80|0)+45|0;do if((a[r>>0]|0)==-86){g=c[f>>2]|0;h=~c[e+752+(s*80|0)+24>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0){mk(g,F,h);break}else{c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];break}}else{do if((((((a[u>>0]|0)==2?(t|0)==(d[H>>0]|0):0)?(c[m+36>>2]&512|0)!=0:0)?(A=c[m+32>>2]|0,q=A+55|0,((d[q>>0]|d[q+1>>0]<<8)&128)!=0):0)?(q=b[m+30>>1]|0,B=q&65535,q<<16>>16!=0):0)?(b[(c[A+8>>2]|0)+(B<<1)>>1]|0)>35:0){l=(c[y>>2]|0)+1|0;k=e+752+(s*80|0)+8|0;g=0;do{h=c[k>>2]|0;i=g+l|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;q=c[x>>2]|0;a[q+(j*20|0)>>0]=90;b[q+(j*20|0)+2>>1]=0;c[q+(j*20|0)+4>>2]=h;c[q+(j*20|0)+8>>2]=g;c[q+(j*20|0)+12>>2]=i;c[q+(j*20|0)+16>>2]=0;a[q+(j*20|0)+1>>0]=0}else Di(F,90,h,g,i)|0;g=g+1|0}while((g|0)!=(B|0));i=a[r>>0]|0;c[y>>2]=B+1+(c[y>>2]|0);i=i<<24>>24==4?22:25;h=c[k>>2]|0;g=c[v>>2]|0;if((c[w>>2]|0)>(g|0)){c[v>>2]=g+1;q=c[x>>2]|0;a[q+(g*20|0)>>0]=i;b[q+(g*20|0)+2>>1]=0;c[q+(g*20|0)+4>>2]=h;c[q+(g*20|0)+8>>2]=0;c[q+(g*20|0)+12>>2]=l;c[q+(g*20|0)+16>>2]=0;a[q+(g*20|0)+1>>0]=0}else g=Di(F,i,h,0,l)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){q=c[x>>2]|0;a[q+(g*20|0)+1>>0]=-3;c[q+(g*20|0)+16>>2]=B}h=c[e+752+(s*80|0)+52>>2]|0;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;q=c[x>>2]|0;a[q+(i*20|0)>>0]=11;b[q+(i*20|0)+2>>1]=0;c[q+(i*20|0)+4>>2]=1;c[q+(i*20|0)+8>>2]=h;c[q+(i*20|0)+12>>2]=0;c[q+(i*20|0)+16>>2]=0;a[q+(i*20|0)+1>>0]=0;break}else{Di(F,11,1,h,0)|0;break}}else g=0;while(0);h=c[f>>2]|0;i=~c[e+752+(s*80|0)+24>>2];if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0)mk(h,F,i);else c[(c[h+64>>2]|0)+(i<<2)>>2]=c[v>>2];h=a[r>>0]|0;i=c[e+752+(s*80|0)+48>>2]|0;j=c[e+752+(s*80|0)+52>>2]|0;k=d[e+752+(s*80|0)+46>>0]|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;q=c[x>>2]|0;a[q+(l*20|0)>>0]=h;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=i;c[q+(l*20|0)+8>>2]=j;c[q+(l*20|0)+12>>2]=k;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0}else Di(F,h&255,i,j,k)|0;h=c[v>>2]|0;if((h|0)>0)b[(c[x>>2]|0)+((h+-1|0)*20|0)+2>>1]=d[e+752+(s*80|0)+47>>0]|0;if(g|0){if(!(a[(c[F>>2]|0)+81>>0]|0))g=(c[x>>2]|0)+(((g|0)<0?h+-1|0:g)*20|0)|0;else g=59308;c[g+8>>2]=h}}while(0);q=m+36|0;if(c[q>>2]&2048|0?(z=e+752+(s*80|0)+56|0,(c[z>>2]|0)>0):0){g=c[f>>2]|0;h=~c[e+752+(s*80|0)+16>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,F,h);else c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];g=c[z>>2]|0;if((g|0)>0){p=e+752+(s*80|0)+8|0;o=g;n=(c[e+752+(s*80|0)+60>>2]|0)+((g+-1|0)*20|0)|0;l=c[v>>2]|0;h=a[(c[F>>2]|0)+81>>0]|0;while(1){m=n+4|0;g=c[m>>2]|0;if(!(h<<24>>24))g=(c[x>>2]|0)+(((g|0)<-1?l+-1|0:g+1|0)*20|0)|0;else g=59308;c[g+8>>2]=l;j=n+16|0;do if((a[j>>0]|0)!=-86){k=c[n+12>>2]|0;if(k|0){g=c[p>>2]|0;h=l+2|0;i=c[n+8>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;J=c[x>>2]|0;a[J+(l*20|0)>>0]=26;b[J+(l*20|0)+2>>1]=0;c[J+(l*20|0)+4>>2]=g;c[J+(l*20|0)+8>>2]=h;c[J+(l*20|0)+12>>2]=i;c[J+(l*20|0)+16>>2]=0;a[J+(l*20|0)+1>>0]=0;g=l}else g=Di(F,26,g,h,i)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){J=c[x>>2]|0;a[J+(g*20|0)+1>>0]=-3;c[J+(g*20|0)+16>>2]=k}}g=a[j>>0]|0;h=c[n>>2]|0;i=c[m>>2]|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;J=c[x>>2]|0;a[J+(j*20|0)>>0]=g;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=h;c[J+(j*20|0)+8>>2]=i;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0;break}else{Di(F,g&255,h,i,0)|0;break}}while(0);g=c[m>>2]|0;l=c[v>>2]|0;h=a[(c[F>>2]|0)+81>>0]|0;if(!(h<<24>>24))g=(c[x>>2]|0)+((((g|0)<1?l:g)+-1|0)*20|0)|0;else g=59308;c[g+8>>2]=l;if((o|0)<=1)break;else{o=o+-1|0;n=n+-20|0}}}}g=c[f>>2]|0;h=~c[e+752+(s*80|0)+12>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,F,h);else c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];g=e+752+(s*80|0)+20|0;h=c[g>>2]|0;if(h|0){i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=11;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=0;c[J+(i*20|0)+8>>2]=h;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else Di(F,11,0,h,0)|0;g=c[g>>2]|0;h=c[v>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){J=h+-1|0;p=c[x>>2]|0;c[p+(((g|0)<0?J:g)*20|0)+8>>2]=h;g=p+(((g|0)<2?J:g+-2|0)*20|0)|0}else{c[14829]=h;g=59308}c[g+8>>2]=h}g=c[e+752+(s*80|0)+40>>2]|0;do if(g|0){h=(c[e+752+(s*80|0)+36>>2]|0)>>>1;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=49;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=h;c[J+(i*20|0)+8>>2]=g;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0;break}else{Di(F,49,h,g,0)|0;break}}while(0);h=c[e+752+(s*80|0)>>2]|0;if(h|0){i=c[q>>2]|0;g=c[v>>2]|0;if((c[w>>2]|0)>(g|0)){c[v>>2]=g+1;j=c[x>>2]|0;a[j+(g*20|0)>>0]=47;b[j+(g*20|0)+2>>1]=0;c[j+(g*20|0)+4>>2]=h;c[j+(g*20|0)+8>>2]=0;c[j+(g*20|0)+12>>2]=0;c[j+(g*20|0)+16>>2]=0;a[j+(g*20|0)+1>>0]=0;j=g}else j=Di(F,47,h,0,0)|0;do if(!(i&64)){g=c[e+752+(s*80|0)+4>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=-127;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=g;c[J+(h*20|0)+8>>2]=0;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,129,g,0,0)|0;break}}while(0);if(!(i&512)){if(i&8192|0?c[e+752+(s*80|0)+56>>2]|0:0)C=87}else C=87;do if((C|0)==87){C=0;g=c[e+752+(s*80|0)+8>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=-127;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=g;c[J+(h*20|0)+8>>2]=0;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,129,g,0,0)|0;break}}while(0);do if((a[r>>0]|0)==66){g=c[e+752+(s*80|0)+48>>2]|0;h=c[e+752+(s*80|0)+28>>2]|0;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=g;c[J+(i*20|0)+8>>2]=h;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0;break}else{Di(F,12,g,h,0)|0;break}}else{g=c[e+752+(s*80|0)+28>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=11;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=0;c[J+(h*20|0)+8>>2]=g;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,11,0,g,0)|0;break}}while(0);h=c[v>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))g=(c[x>>2]|0)+(((j|0)<0?h+-1|0:j)*20|0)|0;else g=59308;c[g+8>>2]=h}}while((t|0)>1)}f=c[f>>2]|0;g=~c[e+36>>2];if(((c[f+56>>2]|0)+(c[f+60>>2]|0)|0)<0)mk(f,F,g);else c[(c[f+64>>2]|0)+(g<<2)>>2]=c[F+108>>2];f=a[H>>0]|0;a:do if(f<<24>>24){y=e+49|0;z=I+81|0;x=F+108|0;A=F+104|0;B=f&255;v=e+752|0;w=0;while(1){g=d[v+44>>0]|0;i=c[G+8+(g*72|0)+16>>2]|0;h=c[v+64>>2]|0;do if(!(a[G+8+(g*72|0)+37>>0]&16)){g=c[h+36>>2]|0;if(!(g&576)){if(!(g&8192))break;g=v+56|0}else g=h+32|0;g=c[g>>2]|0;if(g|0){if(a[y>>0]|0?(c[(c[g+12>>2]|0)+36>>2]&32|0)==0:0)break;if(!(a[z>>0]|0)){r=c[x>>2]|0;j=c[v+32>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))h=(c[A>>2]|0)+(((j|0)<0?r+-1|0:j)*20|0)|0;else h=59308;if((j|0)<(r|0)){s=i+36|0;t=v+8|0;u=g+52|0;q=i+8|0;p=g+4|0;o=c[v+4>>2]|0;while(1){m=h+4|0;b:do if((c[m>>2]|0)==(o|0))switch(a[h>>0]|0){case 90:{n=h+8|0;g=c[n>>2]|0;if(c[s>>2]&32){i=q;while(1){i=c[i>>2]|0;J=i+55|0;if(((d[J>>0]|d[J+1>>0]<<8)&3)==2)break;else i=i+20|0}g=b[(c[i+4>>2]|0)+(g<<1)>>1]|0}k=g&65535;g=b[u>>1]|0;if(!(g<<16>>16))break b;l=c[p>>2]|0;i=g&65535;g=0;while(1){if((b[l+(g<<1)>>1]|0)==k<<16>>16)break;g=g+1|0;if(g>>>0>=i>>>0)break b}if((g&65535)<<16>>16<=-1)break b;c[n>>2]=g<<16>>16;c[m>>2]=c[t>>2];break b}case -128:{c[m>>2]=c[t>>2];a[h>>0]=-121;break b}case 21:{c[m>>2]=c[t>>2];break b}default:break b}while(0);j=j+1|0;if((j|0)==(r|0))break;else h=h+20|0}}}}}else{k=c[v+32>>2]|0;m=c[v+4>>2]|0;l=c[G+8+(g*72|0)+32>>2]|0;h=c[E>>2]|0;if((k|0)<0)g=(c[h+108>>2]|0)+-1|0;else g=k;if(!(a[(c[h>>2]|0)+81>>0]|0))g=(c[h+104>>2]|0)+(g*20|0)|0;else g=59308;j=c[h+108>>2]|0;if((j|0)>(k|0)?(a[(c[D>>2]|0)+81>>0]|0)==0:0){i=g;g=k;while(1){h=i+4|0;c:do if((c[h>>2]|0)==(m|0))switch(a[i>>0]|0){case 90:{a[i>>0]=78;C=i+8|0;c[h>>2]=(c[C>>2]|0)+l;J=i+12|0;c[C>>2]=c[J>>2];c[J>>2]=0;break c}case -128:{a[i>>0]=73;c[h>>2]=0;c[i+12>>2]=0;break c}default:break c}while(0);g=g+1|0;if((g|0)==(j|0))break;else i=i+20|0}}}while(0);w=w+1|0;if(w>>>0>=B>>>0)break;else v=v+80|0}c[D+132>>2]=c[e+40>>2];if(f<<24>>24){h=I+480|0;i=I+304|0;j=I+308|0;k=I+300|0;if(!I){g=0;while(1){J=c[e+752+(g*80|0)+64>>2]|0;if((J|0)!=0?(c[J+36>>2]&2048|0)!=0:0){f=c[e+752+(g*80|0)+60>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{J=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=a[H>>0]|0}g=g+1|0;if(g>>>0>=(f&255)>>>0)break a}}g=0;do{J=c[e+752+(g*80|0)+64>>2]|0;if((J|0)!=0?(c[J+36>>2]&2048|0)!=0:0){f=c[e+752+(g*80|0)+60>>2]|0;do if(f|0){if(c[h>>2]|0){Xd(I,f);break}J=f;if((c[i>>2]|0)>>>0<=J>>>0?(c[j>>2]|0)>>>0>J>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{J=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=a[H>>0]|0}g=g+1|0}while(g>>>0<(f&255)>>>0)}}else c[D+132>>2]=c[e+40>>2];while(0);om(e+80|0);g=e+60|0;f=c[g>>2]|0;if(f|0)do{c[g>>2]=c[f+52>>2];$l(I,f);f=c[g>>2]|0}while((f|0)!=0);if(I|0){if(c[I+480>>2]|0){Xd(I,e);return}J=e;if((c[I+304>>2]|0)>>>0<=J>>>0?(c[I+308>>2]|0)>>>0>J>>>0:0){J=I+300|0;c[e>>2]=c[J>>2];c[J>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{J=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function tl(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;E=d+8|0;H=c[E>>2]|0;a[f>>0]=1;C=f+44|0;if((c[C>>2]|0)>0){r=d+56|0;s=d+19|0;t=d+32|0;u=d+28|0;v=H+108|0;w=H+112|0;y=d+44|0;z=H+104|0;A=f+36|0;B=H+12|0;p=c[f+40>>2]|0;g=0;q=0;while(1){k=c[(c[p>>2]|0)+20>>2]|0;if(!k){h=0;o=0}else{j=c[k>>2]|0;do if((j|0)==1){h=a[s>>0]|0;if(!(h<<24>>24)){h=(c[y>>2]|0)+1|0;c[y>>2]=h;break}else{h=h+-1<<24>>24;a[s>>0]=h;h=c[d+148+((h&255)<<2)>>2]|0;break}}else{h=c[t>>2]|0;i=c[u>>2]|0;if((i|0)<(j|0)){h=c[y>>2]|0;c[y>>2]=h+j;h=h+1|0;break}else{c[t>>2]=h+j;c[u>>2]=i-j;break}}while(0);Oj(d,k,h,0,1);o=j}i=c[p+12>>2]|0;if((i|0)>-1){n=(c[r>>2]|0)+-1|0;c[r>>2]=n;ym(d,i,n,1,h)}else n=0;m=p+4|0;do if(c[(c[m>>2]|0)+4>>2]&32){if((o|0)>0){l=0;i=k+4|0;while(1){j=Yi(d,c[i>>2]|0)|0;l=l+1|0;k=(j|0)!=0;if(!((l|0)<(o|0)&(k^1)))break;else i=i+20|0}if(!k)G=19}else G=19;if((G|0)==19){G=0;j=c[(c[d>>2]|0)+8>>2]|0}if(!g)if(!(c[A>>2]|0))g=0;else{g=(c[y>>2]|0)+1|0;c[y>>2]=g}i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;l=c[z>>2]|0;a[l+(i*20|0)>>0]=82;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=g;c[l+(i*20|0)+8>>2]=0;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else i=Di(H,82,g,0,0)|0;if(!(a[(c[H>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[v>>2]|0)+-1|0;k=c[z>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(H,k+(i*20|0)|0,j,-2);break}if(j){c[k+(i*20|0)+16>>2]=j;a[l>>0]=-2}}}while(0);i=c[p+8>>2]|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;l=c[z>>2]|0;a[l+(j*20|0)>>0]=-102;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=h;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(H,154,0,h,i)|0;i=c[m>>2]|0;j=c[H>>2]|0;do if(a[j+81>>0]|0){if(c[i+4>>2]&16|0){if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}m=i;if((c[j+304>>2]|0)>>>0<=m>>>0?(c[j+308>>2]|0)>>>0>m>>>0:0){m=j+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}else{l=c[z>>2]|0;m=(c[v>>2]|0)+-1|0;a[l+(m*20|0)+1>>0]=-8;c[l+(m*20|0)+16>>2]=i}while(0);i=c[v>>2]|0;if((i|0)>0)b[(c[z>>2]|0)+((i+-1|0)*20|0)+2>>1]=o&255;if((o|0)==1){if(h|0?(x=a[s>>0]|0,(x&255)<8):0){a[s>>0]=x+1<<24>>24;c[d+148+((x&255)<<2)>>2]=h}}else if((c[u>>2]|0)<(o|0)){c[u>>2]=o;c[t>>2]=h}do if(n|0){i=c[B>>2]|0;h=~n;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0){mk(i,H,h);break}else{c[(c[i+64>>2]|0)+(h<<2)>>2]=c[v>>2];break}}while(0);q=q+1|0;if((q|0)>=(c[C>>2]|0))break;else p=p+16|0}if(g)G=63;else G=62}else G=62;if((G|0)==62)if((e|0)==0|(c[f+36>>2]|0)==0)i=0;else{g=e;G=63}do if((G|0)==63){h=H+108|0;i=c[h>>2]|0;if((c[H+112>>2]|0)>(i|0)){c[h>>2]=i+1;C=c[H+104>>2]|0;a[C+(i*20|0)>>0]=18;b[C+(i*20|0)+2>>1]=0;c[C+(i*20|0)+4>>2]=g;c[C+(i*20|0)+8>>2]=0;c[C+(i*20|0)+12>>2]=0;c[C+(i*20|0)+16>>2]=0;a[C+(i*20|0)+1>>0]=0;break}else{i=Di(H,18,g,0,0)|0;break}}while(0);n=f+36|0;if((c[n>>2]|0)>0){l=c[f+28>>2]|0;m=0;while(1){g=c[l+20>>2]|0;o=c[l+16>>2]|0;do if(g){if((a[g>>0]|0)!=-88){F=Jj(d,g,o)|0;G=75;break}k=c[E>>2]|0;g=c[g+28>>2]|0;h=k+108|0;j=c[h>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[h>>2]=j+1;C=c[k+104>>2]|0;a[C+(j*20|0)>>0]=78;b[C+(j*20|0)+2>>1]=0;c[C+(j*20|0)+4>>2]=g;c[C+(j*20|0)+8>>2]=o;c[C+(j*20|0)+12>>2]=0;c[C+(j*20|0)+16>>2]=0;a[C+(j*20|0)+1>>0]=0;break}else{Di(k,78,g,o,0)|0;break}}else{F=Jj(d,0,o)|0;G=75}while(0);do if(((G|0)==75?(G=0,(F|0)!=(o|0)):0)?(D=c[E>>2]|0,D|0):0){g=D+108|0;h=c[g>>2]|0;if((c[D+112>>2]|0)>(h|0)){c[g>>2]=h+1;C=c[D+104>>2]|0;a[C+(h*20|0)>>0]=79;b[C+(h*20|0)+2>>1]=0;c[C+(h*20|0)+4>>2]=F;c[C+(h*20|0)+8>>2]=o;c[C+(h*20|0)+12>>2]=0;c[C+(h*20|0)+16>>2]=0;a[C+(h*20|0)+1>>0]=0;break}else{Di(D,79,F,o,0)|0;break}}while(0);m=m+1|0;if((m|0)>=(c[n>>2]|0))break;else l=l+24|0}}a[f>>0]=0;if(!i)return;h=c[H+108>>2]|0;if(!(a[(c[H>>2]|0)+81>>0]|0))g=(c[H+104>>2]|0)+(((i|0)<0?h+-1|0:i)*20|0)|0;else g=59308;c[g+8>>2]=h;return}function ul(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;t=u;r=c[d+8>>2]|0;s=f+44|0;if((c[s>>2]|0)==(0-(c[f+32>>2]|0)|0)){Ra=u;return}g=c[f+16>>2]|0;h=c[f+20>>2]|0;p=r+108|0;i=c[p>>2]|0;q=r+112|0;if((c[q>>2]|0)>(i|0)){c[p>>2]=i+1;o=c[r+104>>2]|0;a[o+(i*20|0)>>0]=73;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=0;c[o+(i*20|0)+8>>2]=g;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(r,73,0,g,h)|0;if((c[s>>2]|0)<=0){Ra=u;return}o=r+104|0;m=c[f+40>>2]|0;n=0;while(1){k=m+12|0;do if((c[k>>2]|0)>-1){j=c[(c[m>>2]|0)+20>>2]|0;if(j|0?(c[j>>2]|0)==1:0){i=c[d>>2]|0;f=i+272|0;a:do if(c[f>>2]|0)if(!(a[i+81>>0]|0))l=21;else{j=0;f=1}else{do if((e[i+276>>1]|0)>=30){g=i+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];l=i+284|0;c[l>>2]=(c[l>>2]|0)+1;l=22;break a}g=i+296|0;h=c[g>>2]|0;if(!h){g=i+292|0;break}else{c[g>>2]=c[h>>2];l=i+284|0;c[l>>2]=(c[l>>2]|0)+1;l=22;break a}}else g=i+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;l=21}while(0);if((l|0)==21){h=_d(i,30,0)|0;l=22}do if((l|0)==22){l=0;if(!h){g=i+81|0;if((a[g>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[g>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;c[f>>2]=(c[f>>2]|0)+1;g=c[i+236>>2]|0;if(g|0)c[g+12>>2]=7}if(!h){j=0;f=1;break}else{i=0;f=1}}else{c[h+16>>2]=h+28;b[h+6>>1]=1;b[h+8>>1]=2;a[h+4>>0]=a[i+78>>0]|0;c[h+12>>2]=i;c[h>>2]=1;i=h+24|0;c[i>>2]=0;b[i+4>>1]=0;i=h;f=0}g=Yi(d,c[j+4>>2]|0)|0;if(!g)g=c[(c[d>>2]|0)+8>>2]|0;c[h+20>>2]=g;a[c[h+16>>2]>>0]=a[j+16>>0]|0;j=i}while(0);h=c[k>>2]|0;g=c[p>>2]|0;if((c[q>>2]|0)>(g|0)){c[p>>2]=g+1;k=c[o>>2]|0;a[k+(g*20|0)>>0]=113;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=h;c[k+(g*20|0)+8>>2]=0;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0}else g=Di(r,113,h,0,0)|0;h=c[r>>2]|0;if(!(a[h+81>>0]|0)){if((g|0)<0)g=(c[p>>2]|0)+-1|0;h=c[o>>2]|0;i=h+(g*20|0)+1|0;if(a[i>>0]|0){Ei(r,h+(g*20|0)|0,j,-9);break}if(f)break;c[h+(g*20|0)+16>>2]=j;a[i>>0]=-9;break}if(f|(c[h+480>>2]|0)!=0)break;k=(c[j>>2]|0)+-1|0;c[j>>2]=k;if(k|0)break;g=c[j+12>>2]|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}k=j;if((c[g+304>>2]|0)>>>0<=k>>>0?(c[g+308>>2]|0)>>>0>k>>>0:0){k=g+300|0;c[j>>2]=c[k>>2];c[k>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{k=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}cd(d,44342,t);c[k>>2]=-1}while(0);n=n+1|0;if((n|0)>=(c[s>>2]|0))break;else m=m+16|0}Ra=u;return}function vl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[d+24>>2]|0;i=c[d>>2]|0;d=a[e>>0]|0;a:do if(!(c[j+12>>2]|0)){switch(d<<24>>24){case -94:case -93:break a;case -95:break;default:{j=0;return j|0}}if(!(c[e+4>>2]&16777216)){j=0;return j|0}d=c[j>>2]|0;if(d|0){f=c[e+44>>2]|0;while(1){if((f|0)==(d|0)){d=1;break}d=c[d+32>>2]|0;if(!d)break a}return d|0}}else{if(d<<24>>24!=-94){j=0;return j|0}f=c[j+4>>2]|0;h=c[f>>2]|0;b:do if((h|0)>0){g=c[e+28>>2]|0;d=0;do{if((g|0)==(c[f+8+(d*72|0)+40>>2]|0))break b;d=d+1|0}while((d|0)<(h|0))}else d=0;while(0);if((d|0)==(h|0)){j=0;return j|0}}while(0);h=dk(c[i>>2]|0,e,0,0)|0;g=j+8|0;h=nj(c[i>>2]|0,c[g>>2]|0,h)|0;c[g>>2]=h;if(!h){j=0;return j|0}d=e+4|0;c[d>>2]=c[d>>2]|134217728;ni(c[i>>2]|0,e);c[d>>2]=c[d>>2]&-134217729;d=e;f=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));a[e>>0]=-94;b[e+32>>1]=(c[c[g>>2]>>2]|0)+65535;c[e+28>>2]=c[(c[j>>2]|0)+44>>2];j=0;return j|0}function wl(a,b){a=a|0;b=b|0;var d=0,e=0;d=(c[a+24>>2]|0)+12|0;e=c[d>>2]|0;if((e|0)==(b|0)){e=0;return e|0}c[d>>2]=b;$j(a,b)|0;c[d>>2]=e;e=1;return e|0}function xl(b,d){b=b|0;d=d|0;if(c[d+4>>2]&1|0){d=1;return d|0}switch(a[d>>0]|0){case -94:{if((c[b+24>>2]|0)!=(c[d+28>>2]|0)){d=1;return d|0}a[b+20>>0]=1;d=2;return d|0}case 57:case 54:case 55:case 56:case 52:case 53:{b=c[d+12>>2]|0;if((a[b>>0]|0)==-94?c[(c[b+44>>2]|0)+56>>2]|0:0){d=1;return d|0}d=c[d+16>>2]|0;if((a[d>>0]|0)==-94?c[(c[d+44>>2]|0)+56>>2]|0:0){d=1;return d|0}break}case -95:case 49:case -107:case 43:case 45:case 51:case 50:case 19:case -96:{d=1;return d|0}default:{}}d=0;return d|0}function yl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d)return;h=(e|0)==0;while(1){f=c[d>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{g=f+4+(e*20|0)|0;j=zl(b,c[g>>2]|0)|0;c[g>>2]=j;e=e+1|0}while((e|0)<(c[f>>2]|0))}f=c[d+40>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{j=f+4+(e*20|0)|0;g=zl(b,c[j>>2]|0)|0;c[j>>2]=g;e=e+1|0}while((e|0)<(c[f>>2]|0))}f=c[d+48>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{j=f+4+(e*20|0)|0;g=zl(b,c[j>>2]|0)|0;c[j>>2]=g;e=e+1|0}while((e|0)<(c[f>>2]|0))}e=d+44|0;f=zl(b,c[e>>2]|0)|0;c[e>>2]=f;e=d+36|0;f=zl(b,c[e>>2]|0)|0;c[e>>2]=f;e=c[d+32>>2]|0;f=c[e>>2]|0;if((f|0)>0){g=e+8|0;while(1){yl(b,c[g+20>>2]|0,1);if((a[g+37>>0]&4?(i=c[g+64>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){e=0;do{j=i+4+(e*20|0)|0;k=zl(b,c[j>>2]|0)|0;c[j>>2]=k;e=e+1|0}while((e|0)<(c[i>>2]|0))}if((f|0)>1){g=g+72|0;f=f+-1|0}else break}}if(h){e=25;break}d=c[d+52>>2]|0;if(!d){e=25;break}}if((e|0)==25)return}function zl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+64|0;j=o+8|0;i=o;f=o+12|0;if(!e){n=0;Ra=o;return n|0}n=e+4|0;if(c[n>>2]&1|0?(g=e+36|0,(c[d+4>>2]|0)==(b[g>>1]|0)):0)b[g>>1]=c[d+8>>2];switch(a[e>>0]|0){case -94:{if((c[e+28>>2]|0)==(c[d+4>>2]|0)){g=b[e+32>>1]|0;if(g<<16>>16<0){a[e>>0]=114;n=e;Ra=o;return n|0}l=c[(c[d+16>>2]|0)+4+((g<<16>>16)*20|0)>>2]|0;k=a[l>>0]|0;if(k<<24>>24==-88)g=a[l+38>>0]|0;else g=k;switch(g<<24>>24){case -87:{h=l+20|0;m=15;break}case -125:{h=c[l+20>>2]|0;m=15;break}default:{g=c[d>>2]|0;m=19}}do if((m|0)==15){g=c[d>>2]|0;if((c[c[h>>2]>>2]|0)>=2)if(!(c[l+4>>2]&2048)){cd(g,38899,j);break}else{c[i>>2]=c[c[c[l+20>>2]>>2]>>2];c[i+4>>2]=1;cd(g,39001,i);break}else m=19}while(0);if((m|0)==19){j=c[g>>2]|0;i=d+12|0;if(k<<24>>24==-94|(c[i>>2]|0)==0)if(!l)f=0;else{f=l;m=22}else{g=f;h=g+52|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));a[f>>0]=-85;c[f+12>>2]=l;c[f+28>>2]=c[d+8>>2];m=22}if((m|0)==22){f=dk(j,f,0,0)|0;if(f){if(c[i>>2]|0){d=f+4|0;c[d>>2]=c[d>>2]|1048576}if(c[n>>2]&1){b[f+36>>1]=b[e+36>>1]|0;n=f+4|0;c[n>>2]=c[n>>2]|1}}else f=0}ni(j,e);e=f}n=e;Ra=o;return n|0}break}case -85:{f=e+28|0;if((c[f>>2]|0)==(c[d+4>>2]|0))c[f>>2]=c[d+8>>2];break}default:{}}f=e+12|0;m=zl(d,c[f>>2]|0)|0;c[f>>2]=m;f=e+16|0;m=zl(d,c[f>>2]|0)|0;c[f>>2]=m;f=e+20|0;if(c[n>>2]&2048|0){yl(d,c[f>>2]|0,1);n=e;Ra=o;return n|0}g=c[f>>2]|0;if(!g){n=e;Ra=o;return n|0}if((c[g>>2]|0)<=0){n=e;Ra=o;return n|0}f=0;do{n=g+4+(f*20|0)|0;m=zl(d,c[n>>2]|0)|0;c[n>>2]=m;f=f+1|0}while((f|0)<(c[g>>2]|0));Ra=o;return e|0}function Al(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+80|0;G=I+40|0;F=I+32|0;p=I+24|0;j=I+16|0;i=I+8|0;E=I+48|0;k=c[e+32>>2]|0;l=c[c[e>>2]>>2]|0;H=c[d+8>>2]|0;C=e+52|0;D=c[C>>2]|0;if(c[e+68>>2]|0){cd(d,43323,I);Ra=I;return}g=c[d>>2]|0;do if(((a[g+165>>0]|0)==0?(a[d+200>>0]|0)==0:0)?(h=c[g+312>>2]|0,h|0):0){g=$a[h&127](c[g+316>>2]|0,33,0,0,0,c[d+240>>2]|0)|0;if((g|0)==1){cd(d,39216,i);c[d+12>>2]=23;Ra=I;return}if((g|2|0)==2){if(!g)break;Ra=I;return}else{cd(d,39231,j);c[d+12>>2]=1;Ra=I;return}}while(0);s=d+56|0;x=c[s>>2]|0;v=x+-1|0;c[s>>2]=v;b[e+6>>1]=320;pl(d,e,v);y=e+60|0;z=c[y>>2]|0;A=e+12|0;w=c[A>>2]|0;B=e+16|0;t=c[B>>2]|0;c[y>>2]=0;c[B>>2]=0;c[A>>2]=0;A=e+48|0;B=c[A>>2]|0;h=c[k>>2]|0;a:do if((h|0)>0){g=0;while(1){if(a[k+8+(g*72|0)+37>>0]&32)break;g=g+1|0;if((g|0)>=(h|0)){q=0;break a}}q=c[k+8+(g*72|0)+40>>2]|0}else q=0;while(0);g=d+40|0;o=c[g>>2]|0;h=o+1|0;c[g>>2]=h;m=(B|0)!=0;if((a[e+4>>0]|0)==127){c[g>>2]=o+2;g=m?8:6}else{h=0;g=m?7:5}a[E>>0]=g;c[E+4>>2]=o;c[E+16>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;u=d+44|0;n=(c[u>>2]|0)+1|0;c[u>>2]=n;u=H+108|0;g=c[u>>2]|0;r=H+112|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=116;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=q;c[k+(g*20|0)+8>>2]=n;c[k+(g*20|0)+12>>2]=l;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0}else Di(H,116,q,n,l)|0;do if(!m){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=113;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=o;c[k+(g*20|0)+8>>2]=l;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0;break}else{Di(H,113,o,l,0)|0;break}}else{k=Dl(d,e)|0;i=(c[B>>2]|0)+2|0;g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;l=c[H+104>>2]|0;a[l+(g*20|0)>>0]=113;b[l+(g*20|0)+2>>1]=0;c[l+(g*20|0)+4>>2]=o;c[l+(g*20|0)+8>>2]=i;c[l+(g*20|0)+12>>2]=0;c[l+(g*20|0)+16>>2]=0;a[l+(g*20|0)+1>>0]=0}else g=Di(H,113,o,i,0)|0;i=c[H>>2]|0;do if(!(a[i+81>>0]|0)){if((g|0)<0)g=(c[u>>2]|0)+-1|0;i=c[H+104>>2]|0;j=i+(g*20|0)+1|0;if(a[j>>0]|0){Ei(H,i+(g*20|0)|0,k,-9);break}if(k|0){c[i+(g*20|0)+16>>2]=k;a[j>>0]=-9}}else if(!((k|0)==0|(c[i+480>>2]|0)!=0)?(l=(c[k>>2]|0)+-1|0,c[k>>2]=l,(l|0)==0):0){g=c[k+12>>2]|0;if(g|0){if(c[g+480>>2]|0){Xd(g,k);break}l=k;if((c[g+304>>2]|0)>>>0<=l>>>0?(c[g+308>>2]|0)>>>0>l>>>0:0){l=g+300|0;c[k>>2]=c[l>>2];c[l>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[E+20>>2]=B}while(0);if(h|0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;l=c[H+104>>2]|0;a[l+(g*20|0)>>0]=113;b[l+(g*20|0)+2>>1]=0;c[l+(g*20|0)+4>>2]=h;c[l+(g*20|0)+8>>2]=0;c[l+(g*20|0)+12>>2]=0;c[l+(g*20|0)+16>>2]=0;a[l+(g*20|0)+1>>0]=0}else g=Di(H,113,h,0,0)|0;c[e+24>>2]=g;l=e+8|0;c[l>>2]=c[l>>2]|32}c[A>>2]=0;l=D+56|0;c[l>>2]=0;nk(d,1,43372,p);p=kj(d,D,E)|0;c[l>>2]=e;do if(!p){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=36;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=o;c[k+(g*20|0)+8>>2]=v;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0;k=g}else k=Di(H,36,o,v,0)|0;g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=-127;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=q;c[p+(g*20|0)+8>>2]=0;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0}else Di(H,129,q,0,0)|0;do if(m){g=(c[B>>2]|0)+1|0;h=c[u>>2]|0;if((c[r>>2]|0)>(h|0)){c[u>>2]=h+1;p=c[H+104>>2]|0;a[p+(h*20|0)>>0]=90;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=o;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=n;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(H,90,o,g,n)|0;break}}else{g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=127;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=o;c[p+(g*20|0)+8>>2]=n;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0;break}else{Di(H,127,o,n,0)|0;break}}while(0);g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=123;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=o;c[p+(g*20|0)+8>>2]=0;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0}else Di(H,123,o,0,0)|0;j=c[s>>2]|0;h=j+-1|0;c[s>>2]=h;do if((t|0)>0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;s=c[H+104>>2]|0;a[s+(g*20|0)>>0]=47;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=t;c[s+(g*20|0)+8>>2]=h;c[s+(g*20|0)+12>>2]=1;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0;break}else{Di(H,47,t,h,1)|0;break}}while(0);rl(d,e,q,0,0,f,h,v);do if(w|0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;f=c[H+104>>2]|0;a[f+(g*20|0)>>0]=49;b[f+(g*20|0)+2>>1]=0;c[f+(g*20|0)+4>>2]=w;c[f+(g*20|0)+8>>2]=v;c[f+(g*20|0)+12>>2]=0;c[f+(g*20|0)+16>>2]=0;a[f+(g*20|0)+1>>0]=0;break}else{Di(H,49,w,v,0)|0;break}}while(0);i=H+12|0;h=c[i>>2]|0;g=0-j|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0)mk(h,H,g);else c[(c[h+64>>2]|0)+(g<<2)>>2]=c[u>>2];if(!(c[e+8>>2]&8)){c[C>>2]=0;nk(d,1,43420,G);kj(d,e,E)|0;c[C>>2]=D}else cd(d,43378,F);g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;G=c[H+104>>2]|0;a[G+(g*20|0)>>0]=11;b[G+(g*20|0)+2>>1]=0;c[G+(g*20|0)+4>>2]=0;c[G+(g*20|0)+8>>2]=k;c[G+(g*20|0)+12>>2]=0;c[G+(g*20|0)+16>>2]=0;a[G+(g*20|0)+1>>0]=0}else Di(H,11,0,k,0)|0;h=c[i>>2]|0;g=0-x|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,H,g);break}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[u>>2];break}}while(0);g=c[A>>2]|0;if(g|0)ri(c[d>>2]|0,g);c[A>>2]=B;c[y>>2]=z;Ra=I;return}function Bl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+128|0;G=Z+64|0;F=Z+56|0;D=Z+48|0;B=Z+32|0;x=Z+24|0;v=Z+8|0;u=Z;p=Z+120|0;H=Z+96|0;I=Z+72|0;X=c[f>>2]|0;Y=f+8|0;U=c[Y>>2]|0;C=f+56|0;T=c[C>>2]|0;L=T+-1|0;R=T+-2|0;c[C>>2]=R;C=g+4|0;J=a[C>>0]|0;V=g+52|0;W=c[V>>2]|0;t=g+48|0;i=c[t>>2]|0;j=c[i>>2]|0;P=J<<24>>24==-128;a:do if(!P?(n=X+81|0,(a[n>>0]|0)==0):0){o=p+4|0;m=1;l=j;while(1){if((m|0)>(c[c[g>>2]>>2]|0)){m=i;S=l;break a}b:do if((l|0)>0){k=i+4|0;j=0;while(1){if((m|0)==(e[k+16>>1]|0))break b;j=j+1|0;if((j|0)<(l|0))k=k+20|0;else break}}else j=0;while(0);if((j|0)==(l|0)){c[p>>2]=0;c[o>>2]=0;j=oj(X,147,p,0)|0;if(!j){i=7;break}S=j+4|0;c[S>>2]=c[S>>2]|1024;c[j+8>>2]=m;i=nj(c[f>>2]|0,i,j)|0;c[t>>2]=i;if(!i){i=0;j=l}else{b[i+4+(l*20|0)+16>>1]=m;j=l+1|0}}else j=l;if(!(a[n>>0]|0)){m=m+1|0;l=j}else{m=i;S=j;break a}}Ra=Z;return i|0}else{m=i;S=j}while(0);k=(S<<2)+4|0;q=X+272|0;c:do if(c[q>>2]|0)if(!(a[X+81>>0]|0))r=24;else{O=0;Q=0;M=0;N=1}else{do if(!(0<0|(0==0?(e[X+276>>1]|0)>>>0<k>>>0:0))){i=X+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];r=X+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break c}i=X+296|0;j=c[i>>2]|0;if(!j){i=X+292|0;break}else{c[i>>2]=c[j>>2];r=X+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break c}}else i=X+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;r=24}while(0);if((r|0)==24){j=_d(X,k,0)|0;r=25}if((r|0)==25)if(!j){O=0;Q=0;M=j;N=1}else{c[j>>2]=S;if((S|0)>=1){i=m+4|0;k=1;while(1){c[j+(k<<2)>>2]=(e[i+16>>1]|0)+-1;if((k|0)==(S|0))break;else{i=i+20|0;k=k+1|0}}}O=j;Q=Dl(f,g)|0;M=j;N=0}c[t>>2]=m;K=gk(c[f>>2]|0,m,0)|0;s=W+48|0;c[s>>2]=K;d:do if(!P){o=c[c[g>>2]>>2]|0;i=f+44|0;j=c[i>>2]|0;p=j+1|0;n=o+1|0;c[i>>2]=j+n;i=U+108|0;j=c[i>>2]|0;if((c[U+112>>2]|0)>(j|0)){c[i>>2]=j+1;K=c[U+104>>2]|0;a[K+(j*20|0)>>0]=70;b[K+(j*20|0)+2>>1]=0;c[K+(j*20|0)+4>>2]=0;c[K+(j*20|0)+8>>2]=p;c[K+(j*20|0)+12>>2]=0;c[K+(j*20|0)+16>>2]=0;a[K+(j*20|0)+1>>0]=0}else Di(U,70,0,p,0)|0;m=n*5|0;k=m+20|0;e:do if(c[q>>2]|0)if(!(a[X+81>>0]|0))r=44;else{z=0;y=0;break d}else{do if(!(0<0|(0==0?(e[X+276>>1]|0)>>>0<k>>>0:0))){i=X+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];l=X+284|0;c[l>>2]=(c[l>>2]|0)+1;l=j;break e}i=X+296|0;j=c[i>>2]|0;if(!j){i=X+292|0;break}else{c[i>>2]=c[j>>2];l=X+284|0;c[l>>2]=(c[l>>2]|0)+1;l=j;break e}}else i=X+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;r=44}while(0);if((r|0)==44)l=_d(X,k,0)|0;if(!l){i=X+81|0;if((a[i>>0]|0)==0?(a[X+82>>0]|0)==0:0){a[i>>0]=1;if((c[X+180>>2]|0)>0)c[X+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;i=c[X+236>>2]|0;if(i|0)c[i+12>>2]=7}if(!l){z=0;y=0;break}else k=0}else{c[l+16>>2]=l+20+(n<<2);b[l+6>>1]=o;b[l+8>>1]=n;a[l+4>>0]=a[X+78>>0]|0;c[l+12>>2]=X;c[l>>2]=1;gw(l+24|0,0,m+-4|0)|0;k=l}if((o|0)>0){j=l+16|0;i=0;do{K=Cl(f,g,i)|0;c[l+20+(i<<2)>>2]=K;a[(c[j>>2]|0)+i>>0]=0;i=i+1|0}while((i|0)!=(o|0));z=l;y=k}else{z=l;y=k}}else{z=0;p=0;y=0}while(0);c[V>>2]=0;K=W+56|0;c[K>>2]=0;n=c[t>>2]|0;i=c[f>>2]|0;f:do if(n|0?(a[i+81>>0]|0)==0:0){k=c[n>>2]|0;if((k|0)>(c[i+116>>2]|0)){c[u>>2]=40659;cd(f,41350,u);break}m=c[g>>2]|0;if((k|0)>0){i=0;l=n+4|0;while(1){j=b[l+16>>1]|0;if(!(j<<16>>16))j=k;else{j=j&65535;k=c[m>>2]|0;if((k|0)<(j|0))break;Gk(f,m,j+-1|0,c[l>>2]|0,40659,0);j=c[n>>2]|0}i=i+1|0;if((i|0)<(j|0)){l=l+20|0;k=j}else break f}c[v>>2]=i+1;c[v+4>>2]=40659;c[v+8>>2]=k;cd(f,41294,v)}}while(0);g:do if(((c[W+52>>2]|0)==0?(A=c[s>>2]|0,w=c[f>>2]|0,A|0):0)?(a[w+81>>0]|0)==0:0){k=c[A>>2]|0;if((k|0)>(c[w+116>>2]|0)){c[x>>2]=40659;cd(f,41350,x);break}m=c[W>>2]|0;if((k|0)>0){i=0;l=A+4|0;while(1){j=b[l+16>>1]|0;if(!(j<<16>>16))j=k;else{j=j&65535;k=c[m>>2]|0;if((k|0)<(j|0))break;Gk(f,m,j+-1|0,c[l>>2]|0,40659,0);j=c[A>>2]|0}i=i+1|0;if((i|0)<(j|0)){l=l+20|0;k=j}else break g}c[B>>2]=i+1;c[B+4>>2]=40659;c[B+8>>2]=k;cd(f,41294,B)}}while(0);pl(f,g,L);o=g+12|0;i=c[o>>2]|0;do if(P&(i|0)!=0){j=f+44|0;m=c[j>>2]|0;n=m+1|0;m=m+2|0;c[j>>2]=m;j=c[g+16>>2]|0;j=(j|0)==0?i:j+1|0;k=U+108|0;i=c[k>>2]|0;l=U+112|0;if((c[l>>2]|0)>(i|0)){c[k>>2]=i+1;E=c[U+104>>2]|0;a[E+(i*20|0)>>0]=78;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=j;c[E+(i*20|0)+8>>2]=n;c[E+(i*20|0)+12>>2]=0;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0}else Di(U,78,j,n,0)|0;i=c[k>>2]|0;if((c[l>>2]|0)>(i|0)){c[k>>2]=i+1;E=c[U+104>>2]|0;a[E+(i*20|0)>>0]=78;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=n;c[E+(i*20|0)+8>>2]=m;c[E+(i*20|0)+12>>2]=0;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0;break}else{Di(U,78,n,m,0)|0;break}}else{m=0;n=0}while(0);i=g+60|0;j=c[i>>2]|0;if(j|0)ni(X,j);c[i>>2]=0;A=f+44|0;v=c[A>>2]|0;w=v+1|0;x=v+2|0;u=v+3|0;v=v+4|0;c[A>>2]=v;a[H>>0]=13;c[H+4>>2]=w;c[H+16>>2]=0;A=H+8|0;c[A>>2]=0;c[H+12>>2]=0;a[I>>0]=13;c[I+4>>2]=x;c[I+16>>2]=0;B=I+8|0;c[B>>2]=0;c[I+12>>2]=0;switch(a[C>>0]|0){case -128:{i=41509;break}case -126:{i=41519;break}case -127:{i=41529;break}default:i=41536}c[D>>2]=i;nk(f,1,43435,D);E=U+108|0;i=c[E>>2]|0;j=i+1|0;D=U+112|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=j;k=c[U+104>>2]|0;a[k+(i*20|0)>>0]=13;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=w;c[k+(i*20|0)+8>>2]=0;c[k+(i*20|0)+12>>2]=j;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;k=i}else k=Di(U,13,w,0,j)|0;c[W+12>>2]=n;nk(f,1,43446,F);kj(f,W,H)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;F=c[U+104>>2]|0;a[F+(i*20|0)>>0]=67;b[F+(i*20|0)+2>>1]=0;c[F+(i*20|0)+4>>2]=w;c[F+(i*20|0)+8>>2]=0;c[F+(i*20|0)+12>>2]=0;c[F+(i*20|0)+16>>2]=0;a[F+(i*20|0)+1>>0]=0}else Di(U,67,w,0,0)|0;C=U+12|0;j=c[C>>2]|0;a[j+19>>0]=0;c[j+28>>2]=0;j=c[E>>2]|0;if(!(a[(c[U>>2]|0)+81>>0]|0))i=(c[U+104>>2]|0)+(((k|0)<0?j+-1|0:k)*20|0)|0;else i=59308;c[i+8>>2]=j;i=j+1|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=i;t=c[U+104>>2]|0;a[t+(j*20|0)>>0]=13;b[t+(j*20|0)+2>>1]=0;c[t+(j*20|0)+4>>2]=x;c[t+(j*20|0)+8>>2]=0;c[t+(j*20|0)+12>>2]=i;c[t+(j*20|0)+16>>2]=0;a[t+(j*20|0)+1>>0]=0;t=j}else t=Di(U,13,x,0,i)|0;s=c[o>>2]|0;i=g+16|0;F=c[i>>2]|0;c[o>>2]=m;c[i>>2]=0;nk(f,1,43451,G);kj(f,g,I)|0;c[o>>2]=s;c[i>>2]=F;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;G=c[U+104>>2]|0;a[G+(i*20|0)>>0]=67;b[G+(i*20|0)+2>>1]=0;c[G+(i*20|0)+4>>2]=x;c[G+(i*20|0)+8>>2]=0;c[G+(i*20|0)+12>>2]=0;c[G+(i*20|0)+16>>2]=0;a[G+(i*20|0)+1>>0]=0}else Di(U,67,x,0,0)|0;q=c[C>>2]|0;a[q+19>>0]=0;c[q+28>>2]=0;q=El(f,g,H,h,u,p,z,L)|0;s=(J+-127&255)<2;if(s)r=El(f,g,I,h,v,p,z,L)|0;else r=0;h:do if(z|0?(I=(c[z>>2]|0)+-1|0,c[z>>2]=I,(I|0)==0):0){i=c[z+12>>2]|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,y);break h}j=z;if((c[i+304>>2]|0)>>>0<=j>>>0){if((c[i+308>>2]|0)>>>0<=j>>>0)break;I=i+300|0;c[z>>2]=c[I>>2];c[I>>2]=y;break h}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{I=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);p=J<<24>>24==-126;if((J+127&255)<2){l=L;n=L}else{i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;J=c[U+104>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=v;c[J+(i*20|0)+8>>2]=r;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else i=Di(U,12,v,r,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;J=c[U+104>>2]|0;a[J+(j*20|0)>>0]=14;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=x;c[J+(j*20|0)+8>>2]=L;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0}else j=Di(U,14,x,L,0)|0;k=c[E>>2]|0;if((c[D>>2]|0)>(k|0)){c[E>>2]=k+1;J=c[U+104>>2]|0;a[J+(k*20|0)>>0]=11;b[J+(k*20|0)+2>>1]=0;c[J+(k*20|0)+4>>2]=0;c[J+(k*20|0)+8>>2]=i;c[J+(k*20|0)+12>>2]=0;c[J+(k*20|0)+16>>2]=0;a[J+(k*20|0)+1>>0]=0}else Di(U,11,0,i,0)|0;o=g+6|0;k=b[o>>1]|0;l=b[W+6>>1]|0;m=k<<16>>16;n=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(n|0)){k=l;break}if((m+31|0)<(n|0)){k=n+1&65535;break}else{k=(d[18112+(n-m)>>0]|0)+n&65535;break}}else{if((n+49|0)<(m|0))break;if((n+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-n)>>0]|0)+m&65535;break}}while(0);b[o>>1]=k;l=i;n=j}do if(p){i=g+6|0;j=b[W+6>>1]|0;if((b[i>>1]|0)>j<<16>>16){b[i>>1]=j;m=l}else m=l}else{i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;J=c[U+104>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=u;c[J+(i*20|0)+8>>2]=q;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else i=Di(U,12,u,q,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;J=c[U+104>>2]|0;a[J+(j*20|0)>>0]=14;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=w;c[J+(j*20|0)+8>>2]=L;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0}else Di(U,14,w,L,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;m=c[U+104>>2]|0;a[m+(j*20|0)>>0]=11;b[m+(j*20|0)+2>>1]=0;c[m+(j*20|0)+4>>2]=0;c[m+(j*20|0)+8>>2]=i;c[m+(j*20|0)+12>>2]=0;c[m+(j*20|0)+16>>2]=0;a[m+(j*20|0)+1>>0]=0;m=i;break}else{Di(U,11,0,i,0)|0;m=i;break}}while(0);i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;k=c[U+104>>2]|0;a[k+(i*20|0)>>0]=12;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=u;c[k+(i*20|0)+8>>2]=q;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;k=i}else k=Di(U,12,u,q,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;L=c[U+104>>2]|0;a[L+(i*20|0)>>0]=14;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=w;c[L+(i*20|0)+8>>2]=l;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(U,14,w,l,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;L=c[U+104>>2]|0;a[L+(i*20|0)>>0]=11;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=0;c[L+(i*20|0)+8>>2]=R;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(U,11,0,R,0)|0;do if(!P){if(p){p=k+1|0;l=k;break}i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=14;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=w;c[P+(i*20|0)+8>>2]=l;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else i=Di(U,14,w,l,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;p=c[U+104>>2]|0;a[p+(j*20|0)>>0]=11;b[p+(j*20|0)+2>>1]=0;c[p+(j*20|0)+4>>2]=0;c[p+(j*20|0)+8>>2]=R;c[p+(j*20|0)+12>>2]=0;c[p+(j*20|0)+16>>2]=0;a[p+(j*20|0)+1>>0]=0;p=k;l=i;break}else{Di(U,11,0,R,0)|0;p=k;l=i;break}}else{p=k;l=k}while(0);o=c[E>>2]|0;do if(s)if((c[D>>2]|0)>(o|0)){c[E>>2]=o+1;P=c[U+104>>2]|0;a[P+(o*20|0)>>0]=12;b[P+(o*20|0)+2>>1]=0;c[P+(o*20|0)+4>>2]=v;c[P+(o*20|0)+8>>2]=r;c[P+(o*20|0)+12>>2]=0;c[P+(o*20|0)+16>>2]=0;a[P+(o*20|0)+1>>0]=0;break}else{Di(U,12,v,r,0)|0;break}while(0);i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=14;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=x;c[P+(i*20|0)+8>>2]=m;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else Di(U,14,x,m,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=11;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=0;c[P+(i*20|0)+8>>2]=R;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else Di(U,11,0,R,0)|0;j=c[E>>2]|0;if(!(a[(c[U>>2]|0)+81>>0]|0))i=(c[U+104>>2]|0)+(((t|0)<0?j+-1|0:t)*20|0)|0;else i=59308;c[i+8>>2]=j;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;R=c[U+104>>2]|0;a[R+(j*20|0)>>0]=14;b[R+(j*20|0)+2>>1]=0;c[R+(j*20|0)+4>>2]=w;c[R+(j*20|0)+8>>2]=n;c[R+(j*20|0)+12>>2]=0;c[R+(j*20|0)+16>>2]=0;a[R+(j*20|0)+1>>0]=0}else Di(U,14,w,n,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;R=c[U+104>>2]|0;a[R+(i*20|0)>>0]=14;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=x;c[R+(i*20|0)+8>>2]=m;c[R+(i*20|0)+12>>2]=0;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else Di(U,14,x,m,0)|0;i=c[C>>2]|0;j=1-T|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,U,j);else c[(c[i+64>>2]|0)+(j<<2)>>2]=c[E>>2];i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;j=c[U+104>>2]|0;a[j+(i*20|0)>>0]=86;j=j+(i*20|0)+1|0;k=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}else i=Di(U,86,0,0,0)|0;j=c[U>>2]|0;i:do if(a[j+81>>0]|0){if(N)break;do if(j|0){if(c[j+480>>2]|0){Xd(j,O);break i}i=O;if((c[j+304>>2]|0)>>>0>i>>>0)break;if((c[j+308>>2]|0)>>>0<=i>>>0)break;R=j+300|0;c[M>>2]=c[R>>2];c[R>>2]=O;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](O);break}else{R=Wa[c[29352>>2]&127](O)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](O);break}}else{if((i|0)<0)i=(c[E>>2]|0)+-1|0;j=c[U+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(U,j+(i*20|0)|0,O,-15);break}if(N)break;c[j+(i*20|0)+16>>2]=O;a[k>>0]=-15}while(0);k=c[A>>2]|0;j=c[B>>2]|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;R=c[U+104>>2]|0;a[R+(i*20|0)>>0]=87;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=k;c[R+(i*20|0)+8>>2]=j;c[R+(i*20|0)+12>>2]=S;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else i=Di(U,87,k,j,S)|0;j=c[U>>2]|0;j:do if(a[j+81>>0]|0){if((Q|0)==0|(c[j+480>>2]|0)!=0)break;S=(c[Q>>2]|0)+-1|0;c[Q>>2]=S;if(S|0)break;i=c[Q+12>>2]|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,Q);break j}j=Q;if((c[i+304>>2]|0)>>>0>j>>>0)break;if((c[i+308>>2]|0)>>>0<=j>>>0)break;S=i+300|0;c[Q>>2]=c[S>>2];c[S>>2]=Q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{S=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}else{if((i|0)<0)i=(c[E>>2]|0)+-1|0;j=c[U+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(U,j+(i*20|0)|0,Q,-9);break}if(!Q)break;c[j+(i*20|0)+16>>2]=Q;a[k>>0]=-9}while(0);i=c[E>>2]|0;if((i|0)>0)b[(c[U+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=1;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;S=c[U+104>>2]|0;a[S+(i*20|0)>>0]=16;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=p;c[S+(i*20|0)+8>>2]=l;c[S+(i*20|0)+12>>2]=o;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(U,16,p,l,o)|0;j=c[C>>2]|0;i=0-T|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,U,i);else c[(c[j+64>>2]|0)+(i<<2)>>2]=c[E>>2];i=c[V>>2]|0;if(i|0)pi(X,i,1);c[V>>2]=W;c[K>>2]=g;k=f+212|0;i=c[k>>2]|0;if(!i)i=0;else{j=c[Y>>2]|0;if((i|0)<0)i=(c[j+108>>2]|0)+-1|0;if(!(a[(c[j>>2]|0)+81>>0]|0))i=(c[j+104>>2]|0)+(i*20|0)|0;else i=59308;i=c[i+8>>2]|0}c[k>>2]=i;f=(c[f+36>>2]|0)!=0&1;Ra=Z;return f|0}function Cl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[b+52>>2]|0;if(e|0?(f=Cl(a,e,d)|0,f|0):0){d=f;return d|0}b=c[b>>2]|0;if((c[b>>2]|0)<=(d|0)){d=0;return d|0}d=Yi(a,c[b+4+(d*20|0)>>2]|0)|0;return d|0}function Dl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;q=u;r=c[f+48>>2]|0;s=c[r>>2]|0;p=c[d>>2]|0;k=s+1|0;l=s+2|0;m=l*5|0;i=m+20|0;n=p+272|0;a:do if(c[n>>2]|0)if(!(a[p+81>>0]|0))j=11;else{t=0;Ra=u;return t|0}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<i>>>0:0))){h=p+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;break a}h=p+296|0;g=c[h>>2]|0;if(!g){g=p+292|0;break}else{c[h>>2]=c[g>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;break a}}else g=p+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;j=11}while(0);if((j|0)==11)g=_d(p,i,0)|0;if(!g){h=p+81|0;if((a[h>>0]|0)==0?(a[p+82>>0]|0)==0:0){a[h>>0]=1;if((c[p+180>>2]|0)>0)c[p+264>>2]=1;c[n>>2]=(c[n>>2]|0)+1;h=c[p+236>>2]|0;if(h|0)c[h+12>>2]=7}if(!g){t=0;Ra=u;return t|0}}else{c[g+16>>2]=g+20+(l<<2);b[g+6>>1]=k;b[g+8>>1]=l;a[g+4>>0]=a[p+78>>0]|0;c[g+12>>2]=p;c[g>>2]=1;gw(g+24|0,0,m+-4|0)|0}if((s|0)<=0){t=g;Ra=u;return t|0}o=g+16|0;m=p+8|0;n=q+4|0;l=0;do{k=r+4+(l*20|0)|0;i=c[k>>2]|0;if(!(c[i+4>>2]&256)){h=Cl(d,f,(e[r+4+(l*20|0)+16>>1]|0)+-1|0)|0;if(!h)h=c[m>>2]|0;j=c[h>>2]|0;c[q>>2]=j;if(j){p=(Eu(j)|0)&1073741823;c[n>>2]=p;if((p|0)!=0?(t=oj(c[d>>2]|0,106,q,0)|0,(t|0)!=0):0){c[t+12>>2]=i;i=t+4|0;c[i>>2]=c[i>>2]|4352;i=t}}else c[n>>2]=0;c[k>>2]=i}else h=Yi(d,i)|0;c[g+20+(l<<2)>>2]=h;a[(c[o>>2]|0)+l>>0]=a[r+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)!=(s|0));Ra=u;return g|0}function El(d,e,f,g,h,i,j,k){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;A=d+8|0;F=c[A>>2]|0;D=F+108|0;E=c[D>>2]|0;u=d+56|0;C=c[u>>2]|0;v=C+-1|0;c[u>>2]=v;do if(i|0){u=F+112|0;if((c[u>>2]|0)>(E|0)){c[D>>2]=E+1;q=c[F+104>>2]|0;a[q+(E*20|0)>>0]=20;b[q+(E*20|0)+2>>1]=0;c[q+(E*20|0)+4>>2]=i;c[q+(E*20|0)+8>>2]=0;c[q+(E*20|0)+12>>2]=0;c[q+(E*20|0)+16>>2]=0;a[q+(E*20|0)+1>>0]=0;q=E}else q=Di(F,20,i,0,0)|0;r=f+8|0;l=c[r>>2]|0;t=i+1|0;s=f+12|0;m=c[s>>2]|0;p=(j|0)==0;if(!p)c[j>>2]=(c[j>>2]|0)+1;n=c[D>>2]|0;if((c[u>>2]|0)>(n|0)){c[D>>2]=n+1;o=c[F+104>>2]|0;a[o+(n*20|0)>>0]=87;b[o+(n*20|0)+2>>1]=0;c[o+(n*20|0)+4>>2]=l;c[o+(n*20|0)+8>>2]=t;c[o+(n*20|0)+12>>2]=m;c[o+(n*20|0)+16>>2]=0;a[o+(n*20|0)+1>>0]=0}else n=Di(F,87,l,t,m)|0;l=c[F>>2]|0;do if(!(a[l+81>>0]|0)){if((n|0)<0)l=(c[D>>2]|0)+-1|0;else l=n;m=c[F+104>>2]|0;o=m+(l*20|0)+1|0;if(a[o>>0]|0){Ei(F,m+(l*20|0)|0,j,-9);break}if(!p){c[m+(l*20|0)+16>>2]=j;a[o>>0]=-9}}else if(!(p|(c[l+480>>2]|0)!=0)?(p=(c[j>>2]|0)+-1|0,c[j>>2]=p,(p|0)==0):0){l=c[j+12>>2]|0;if(l|0){if(c[l+480>>2]|0){Xd(l,j);break}p=j;if((c[l+304>>2]|0)>>>0<=p>>>0?(c[l+308>>2]|0)>>>0>p>>>0:0){p=l+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);l=n+2|0;m=c[D>>2]|0;if((c[u>>2]|0)>(m|0)){c[D>>2]=m+1;j=c[F+104>>2]|0;a[j+(m*20|0)>>0]=16;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=l;c[j+(m*20|0)+8>>2]=v;c[j+(m*20|0)+12>>2]=l;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(F,16,l,v,l)|0;n=c[D>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))l=(c[F+104>>2]|0)+(((q|0)<0?n+-1|0:q)*20|0)|0;else l=59308;c[l+8>>2]=n;m=c[r>>2]|0;l=(c[s>>2]|0)+-1|0;if((c[u>>2]|0)>(n|0)){c[D>>2]=n+1;s=c[F+104>>2]|0;a[s+(n*20|0)>>0]=78;b[s+(n*20|0)+2>>1]=0;c[s+(n*20|0)+4>>2]=m;c[s+(n*20|0)+8>>2]=t;c[s+(n*20|0)+12>>2]=l;c[s+(n*20|0)+16>>2]=0;a[s+(n*20|0)+1>>0]=0}else Di(F,78,m,t,l)|0;l=c[D>>2]|0;if((c[u>>2]|0)>(l|0)){c[D>>2]=l+1;u=c[F+104>>2]|0;a[u+(l*20|0)>>0]=70;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=1;c[u+(l*20|0)+8>>2]=i;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;break}else{Di(F,70,1,i,0)|0;break}}while(0);if(a[(c[d>>2]|0)+81>>0]|0){F=0;return F|0}l=c[e+16>>2]|0;do if((l|0)>0){m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;i=c[F+104>>2]|0;a[i+(m*20|0)>>0]=47;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=l;c[i+(m*20|0)+8>>2]=v;c[i+(m*20|0)+12>>2]=1;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break}else{Di(F,47,l,v,1)|0;break}}while(0);a:do switch(a[g>>0]|0){case 12:{q=d+19|0;m=a[q>>0]|0;if(m<<24>>24){B=m+-1<<24>>24;a[q>>0]=B;l=c[d+148+((B&255)<<2)>>2]|0;if(!(B<<24>>24))w=48;else{j=m+-2<<24>>24;a[q>>0]=j;p=l;j=c[d+148+((j&255)<<2)>>2]|0}}else{w=d+44|0;l=(c[w>>2]|0)+1|0;c[w>>2]=l;w=48}if((w|0)==48){p=d+44|0;j=(c[p>>2]|0)+1|0;c[p>>2]=j;p=l}n=c[f+8>>2]|0;l=c[f+12>>2]|0;m=c[D>>2]|0;o=F+112|0;if((c[o>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[F+104>>2]|0;a[f+(m*20|0)>>0]=92;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=n;c[f+(m*20|0)+8>>2]=l;c[f+(m*20|0)+12>>2]=p;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(F,92,n,l,p)|0;l=g+4|0;m=c[l>>2]|0;n=c[D>>2]|0;if((c[o>>2]|0)>(n|0)){c[D>>2]=n+1;g=c[F+104>>2]|0;a[g+(n*20|0)>>0]=121;b[g+(n*20|0)+2>>1]=0;c[g+(n*20|0)+4>>2]=m;c[g+(n*20|0)+8>>2]=j;c[g+(n*20|0)+12>>2]=0;c[g+(n*20|0)+16>>2]=0;a[g+(n*20|0)+1>>0]=0}else Di(F,121,m,j,0)|0;l=c[l>>2]|0;m=c[D>>2]|0;if((c[o>>2]|0)>(m|0)){c[D>>2]=m+1;g=c[F+104>>2]|0;a[g+(m*20|0)>>0]=122;b[g+(m*20|0)+2>>1]=0;c[g+(m*20|0)+4>>2]=l;c[g+(m*20|0)+8>>2]=p;c[g+(m*20|0)+12>>2]=j;c[g+(m*20|0)+16>>2]=0;a[g+(m*20|0)+1>>0]=0}else Di(F,122,l,p,j)|0;l=c[D>>2]|0;if((l|0)>0)b[(c[F+104>>2]|0)+((l+-1|0)*20|0)+2>>1]=8;if(j|0?(y=a[q>>0]|0,(y&255)<8):0){a[q>>0]=y+1<<24>>24;c[d+148+((y&255)<<2)>>2]=j}if(p|0?(z=a[q>>0]|0,(z&255)<8):0){a[q>>0]=z+1<<24>>24;c[d+148+((z&255)<<2)>>2]=p}break}case 11:{t=d+19|0;l=a[t>>0]|0;if(!(l<<24>>24)){A=d+44|0;s=(c[A>>2]|0)+1|0;c[A>>2]=s}else{s=l+-1<<24>>24;a[t>>0]=s;s=c[d+148+((s&255)<<2)>>2]|0}j=f+8|0;m=c[j>>2]|0;q=f+12|0;o=c[q>>2]|0;p=c[g+16>>2]|0;l=c[D>>2]|0;r=F+112|0;if((c[r>>2]|0)>(l|0)){c[D>>2]=l+1;f=c[F+104>>2]|0;a[f+(l*20|0)>>0]=92;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=m;c[f+(l*20|0)+8>>2]=o;c[f+(l*20|0)+12>>2]=s;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0}else l=Di(F,92,m,o,s)|0;m=c[F>>2]|0;do if(a[m+81>>0]|0){if((o|0)!=-12)kg(m,o,p)}else{if((l|0)<0)l=(c[D>>2]|0)+-1|0;m=c[F+104>>2]|0;n=m+(l*20|0)|0;if((o|0)<=-1?(x=m+(l*20|0)+1|0,(a[x>>0]|0)==0):0){if((o|0)==-3){c[m+(l*20|0)+16>>2]=p;a[x>>0]=-3;break}if(!p)break;c[m+(l*20|0)+16>>2]=p;a[x>>0]=o;if((o|0)!=-12)break;f=p+12|0;c[f>>2]=(c[f>>2]|0)+1;break}Ei(F,n,p,o)}while(0);o=c[g+4>>2]|0;m=c[j>>2]|0;n=c[q>>2]|0;l=c[D>>2]|0;if((c[r>>2]|0)>(l|0)){c[D>>2]=l+1;g=c[F+104>>2]|0;a[g+(l*20|0)>>0]=-124;b[g+(l*20|0)+2>>1]=0;c[g+(l*20|0)+4>>2]=o;c[g+(l*20|0)+8>>2]=s;c[g+(l*20|0)+12>>2]=m;c[g+(l*20|0)+16>>2]=0;a[g+(l*20|0)+1>>0]=0}else l=Di(F,132,o,s,m)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){g=c[F+104>>2]|0;a[g+(l*20|0)+1>>0]=-3;c[g+(l*20|0)+16>>2]=n}if(s|0?(B=a[t>>0]|0,(B&255)<8):0){a[t>>0]=B+1<<24>>24;c[d+148+((B&255)<<2)>>2]=s}break}case 10:{p=c[f+8>>2]|0;o=c[g+4>>2]|0;l=c[A>>2]|0;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;d=c[l+104>>2]|0;a[d+(n*20|0)>>0]=77;b[d+(n*20|0)+2>>1]=0;c[d+(n*20|0)+4>>2]=p;c[d+(n*20|0)+8>>2]=o;c[d+(n*20|0)+12>>2]=1;c[d+(n*20|0)+16>>2]=0;a[d+(n*20|0)+1>>0]=0;break a}else{Di(l,77,p,o,1)|0;break a}}case 13:{j=g+8|0;l=c[j>>2]|0;q=f+12|0;if(!l){p=c[q>>2]|0;do if((p|0)==1){l=d+19|0;m=a[l>>0]|0;if(!(m<<24>>24)){d=d+44|0;l=(c[d>>2]|0)+1|0;c[d>>2]=l;break}else{B=m+-1<<24>>24;a[l>>0]=B;l=c[d+148+((B&255)<<2)>>2]|0;break}}else{m=d+32|0;l=c[m>>2]|0;n=d+28|0;o=c[n>>2]|0;if((o|0)<(p|0)){d=d+44|0;l=c[d>>2]|0;c[d>>2]=l+p;l=l+1|0;break}else{c[m>>2]=l+p;c[n>>2]=o-p;break}}while(0);c[j>>2]=l;c[g+12>>2]=p}j=c[f+8>>2]|0;p=c[q>>2]|0;m=c[A>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;d=c[m+104>>2]|0;a[d+(o*20|0)>>0]=77;b[d+(o*20|0)+2>>1]=0;c[d+(o*20|0)+4>>2]=j;c[d+(o*20|0)+8>>2]=l;c[d+(o*20|0)+12>>2]=p;c[d+(o*20|0)+16>>2]=0;a[d+(o*20|0)+1>>0]=0}else Di(m,77,j,l,p)|0;l=c[g+4>>2]|0;m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;d=c[F+104>>2]|0;a[d+(m*20|0)>>0]=14;b[d+(m*20|0)+2>>1]=0;c[d+(m*20|0)+4>>2]=l;c[d+(m*20|0)+8>>2]=0;c[d+(m*20|0)+12>>2]=0;c[d+(m*20|0)+16>>2]=0;a[d+(m*20|0)+1>>0]=0;break a}else{Di(F,14,l,0,0)|0;break a}}default:{n=c[f+8>>2]|0;l=c[f+12>>2]|0;m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;d=c[F+104>>2]|0;a[d+(m*20|0)>>0]=81;b[d+(m*20|0)+2>>1]=0;c[d+(m*20|0)+4>>2]=n;c[d+(m*20|0)+8>>2]=l;c[d+(m*20|0)+12>>2]=0;c[d+(m*20|0)+16>>2]=0;a[d+(m*20|0)+1>>0]=0;break a}else{Di(F,81,n,l,0)|0;break a}}}while(0);l=c[e+12>>2]|0;do if(l|0){m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;e=c[F+104>>2]|0;a[e+(m*20|0)>>0]=49;b[e+(m*20|0)+2>>1]=0;c[e+(m*20|0)+4>>2]=l;c[e+(m*20|0)+8>>2]=k;c[e+(m*20|0)+12>>2]=0;c[e+(m*20|0)+16>>2]=0;a[e+(m*20|0)+1>>0]=0;break}else{Di(F,49,l,k,0)|0;break}}while(0);m=c[F+12>>2]|0;l=0-C|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,F,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[D>>2];l=c[D>>2]|0;if((c[F+112>>2]|0)>(l|0)){c[D>>2]=l+1;F=c[F+104>>2]|0;a[F+(l*20|0)>>0]=66;b[F+(l*20|0)+2>>1]=0;c[F+(l*20|0)+4>>2]=h;c[F+(l*20|0)+8>>2]=0;c[F+(l*20|0)+12>>2]=0;c[F+(l*20|0)+16>>2]=0;a[F+(l*20|0)+1>>0]=0;F=E;return F|0}else{Di(F,66,h,0,0)|0;F=E;return F|0}return 0}function Fl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+32|0;o=A;if(!f){Ra=A;return}if(c[f+4>>2]&1|0){Ra=A;return}switch(a[f>>0]|0){case 44:{Fl(d,c[f+16>>2]|0);Fl(d,c[f+12>>2]|0);Ra=A;return}case 53:{g=c[f+16>>2]|0;f=c[f+12>>2]|0;do if((a[g>>0]|0)==-94?(j=g+4|0,(c[j>>2]&8|0)==0):0){i=o+20|0;a[i>>0]=1;c[o+4>>2]=127;c[o+8>>2]=128;c[o+24>>2]=0;if(f){_j(o,f)|0;if(!(a[i>>0]|0))break}i=c[d>>2]|0;t=f+4|0;if(!(c[t>>2]&256))if((c[j>>2]&256|0)==0?(k=Yi(i,f)|0,(k|0)!=0):0){l=k;u=14}else{m=g;u=13}else{m=f;u=13}if((u|0)==13?(n=Yi(i,m)|0,n|0):0){l=n;u=14}if((u|0)==14){if((c[l+12>>2]|0)!=78)break;if(c[l+8>>2]|0)break}m=d+4|0;k=c[m>>2]|0;n=d+12|0;do if((k|0)>0){l=c[n>>2]|0;i=c[g+28>>2]|0;j=g+32|0;h=0;while(1){z=c[l+(h<<1<<2)>>2]|0;if((c[z+28>>2]|0)==(i|0)?(b[z+32>>1]|0)==(b[j>>1]|0):0){u=107;break}h=h+1|0;if((h|0)>=(k|0)){u=22;break}}if((u|0)==22){x=n;r=l;break}else if((u|0)==107){Ra=A;return}}else{x=n;r=c[n>>2]|0}while(0);k=k+1|0;c[m>>2]=k;l=c[c[d>>2]>>2]|0;k=k<<3;a:do if(!r){b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))u=34;else{u=48;break a}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0))){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];s=l+284|0;c[s>>2]=(c[s>>2]|0)+1;s=i;break b}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];s=l+284|0;c[s>>2]=(c[s>>2]|0)+1;s=i;break b}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;u=34}while(0);if((u|0)==34)s=_d(l,k,0)|0;c[x>>2]=s;if(s|0){w=s;u=51}}else{i=r;j=l+304|0;if(((c[j>>2]|0)>>>0<=i>>>0?(c[l+308>>2]|0)>>>0>i>>>0:0)?!(0<0|(0==0?(e[l+276>>1]|0)>>>0<k>>>0:0)):0)h=r;else{h=Zd(l,r,k,0)|0;if(!h){if(c[l+480>>2]|0){Xd(l,r);u=48;break}if((c[j>>2]|0)>>>0<=i>>>0?(c[l+308>>2]|0)>>>0>i>>>0:0){u=l+300|0;c[r>>2]=c[u>>2];c[u>>2]=r;u=48;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);u=48;break}else{u=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);u=48;break}}}c[x>>2]=h;w=h;u=51}while(0);if((u|0)==48)c[x>>2]=0;else if((u|0)==51){if(c[t>>2]&8)f=c[f+12>>2]|0;z=c[m>>2]<<1;c[w+(z+-2<<2)>>2]=g;c[(c[n>>2]|0)+(z+-1<<2)>>2]=f;Ra=A;return}c[m>>2]=0;Ra=A;return}while(0);if((a[f>>0]|0)!=-94){Ra=A;return}k=f+4|0;if(c[k>>2]&8|0){Ra=A;return}i=o+20|0;a[i>>0]=1;c[o+4>>2]=127;c[o+8>>2]=128;c[o+24>>2]=0;l=(g|0)==0;if(!l){_j(o,g)|0;if(!(a[i>>0]|0)){Ra=A;return}}j=c[d>>2]|0;do if(!(c[k>>2]&256)){if(!l?c[g+4>>2]&256|0:0){p=Yi(j,g)|0;u=66;break}i=Yi(j,f)|0;if(!i){p=Yi(j,g)|0;u=66}else{q=i;u=67}}else{p=Yi(j,f)|0;u=66}while(0);if((u|0)==66?p|0:0){q=p;u=67}if((u|0)==67){if((c[q+12>>2]|0)!=78){Ra=A;return}if(c[q+8>>2]|0){Ra=A;return}}n=d+4|0;l=c[n>>2]|0;o=d+12|0;do if((l|0)>0){m=c[o>>2]|0;j=c[f+28>>2]|0;k=f+32|0;i=0;while(1){x=c[m+(i<<1<<2)>>2]|0;if((c[x+28>>2]|0)==(j|0)?(b[x+32>>1]|0)==(b[k>>1]|0):0){u=107;break}i=i+1|0;if((i|0)>=(l|0)){u=75;break}}if((u|0)==75){z=o;v=m;break}else if((u|0)==107){Ra=A;return}}else{z=o;v=c[o>>2]|0}while(0);l=l+1|0;c[n>>2]=l;m=c[c[d>>2]>>2]|0;l=l<<3;c:do if(!v){d:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))u=87;else{u=101;break c}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<l>>>0:0))){i=m+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];y=m+284|0;c[y>>2]=(c[y>>2]|0)+1;y=j;break d}i=m+296|0;j=c[i>>2]|0;if(!j){i=m+292|0;break}else{c[i>>2]=c[j>>2];y=m+284|0;c[y>>2]=(c[y>>2]|0)+1;y=j;break d}}else i=m+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;u=87}while(0);if((u|0)==87)y=_d(m,l,0)|0;c[z>>2]=y;if(y|0){h=y;u=104}}else{j=v;k=m+304|0;if(((c[k>>2]|0)>>>0<=j>>>0?(c[m+308>>2]|0)>>>0>j>>>0:0)?!(0<0|(0==0?(e[m+276>>1]|0)>>>0<l>>>0:0)):0)h=v;else{i=Zd(m,v,l,0)|0;if(!i){if(c[m+480>>2]|0){Xd(m,v);u=101;break}if((c[k>>2]|0)>>>0<=j>>>0?(c[m+308>>2]|0)>>>0>j>>>0:0){u=m+300|0;c[v>>2]=c[u>>2];c[u>>2]=v;u=101;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](v);u=101;break}else{u=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);u=101;break}}else h=i}c[z>>2]=h;u=104}while(0);if((u|0)==101)c[z>>2]=0;else if((u|0)==104){if(c[g+4>>2]&8)g=c[g+12>>2]|0;z=c[n>>2]<<1;c[h+(z+-2<<2)>>2]=f;c[(c[o>>2]|0)+(z+-1<<2)>>2]=g;Ra=A;return}c[n>>2]=0;Ra=A;return}default:{Ra=A;return}}}function Gl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((a[e>>0]|0)!=-94){e=0;return e|0}k=e+4|0;l=c[k>>2]|0;if(l&8|0){e=0;return e|0}m=c[d+24>>2]|0;f=c[m+4>>2]|0;if((f|0)<=0){e=1;return e|0}g=c[m+12>>2]|0;h=e+28|0;i=e+32|0;d=0;while(1){j=d<<1;o=c[g+(j<<2)>>2]|0;if(((o|0)!=(e|0)?(c[o+28>>2]|0)==(c[h>>2]|0):0)?(b[o+32>>1]|0)==(b[i>>1]|0):0)break;d=d+1|0;if((d|0)>=(f|0)){d=1;n=12;break}}if((n|0)==12)return d|0;d=m+8|0;c[d>>2]=(c[d>>2]|0)+1;c[k>>2]=l&-8388617|8;d=c[g+((j|1)<<2)>>2]|0;if(!d)d=0;else d=dk(c[c[m>>2]>>2]|0,d,0,0)|0;c[e+12>>2]=d;o=1;return o|0}function Hl(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=(c|0)<(e|0)?c:e;g=Lu(d,f,h)|0;if(g|0){e=g;return e|0}if(b|0){g=d+h|0;b=c-h|0;a:do if((b|0)>0)while(1){d=b+-1|0;if((a[g+d>>0]|0)!=32)break a;if((b|0)>1)b=d;else{b=d;break}}while(0);if(!b){g=f+h|0;b=e-h|0;b:do if((b|0)>0)while(1){d=b+-1|0;if((a[g+d>>0]|0)!=32)break b;if((b|0)>1)b=d;else{b=d;break}}while(0);if(!b){e=0;return e|0}}}e=c-e|0;return e|0}function Il(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=b+8|0;a:do if(d|0){while(1){f=d;while(1){g=c[f+4>>2]|0;if(!(g&4096))break;if(!(g&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f)break a}a[h>>0]=e;if((a[f>>0]|0)!=e<<24>>24)break;Il(b,c[f+12>>2]|0,e);d=c[f+16>>2]|0;if(!d)break a}Ml(b,d,0)|0;return}while(0);a[h>>0]=e;return}function Jl(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;na=Ra;Ra=Ra+16|0;ba=na+8|0;ja=na;aa=c[f>>2]|0;ka=c[aa>>2]|0;la=a[f+46>>0]|0;ma=la&255;Y=(la&255)<2?1:la<<24>>24==2?5:10;ia=f+8|0;h=c[ia>>2]|0;da=g<<16>>16==0;if(da|(h|0)==0)W=0;else W=c[h>>2]|0;l=Y<<1;m=W<<1;j=m+(G(l,(ma<<2)+32|0)|0)|0;k=((j|0)<0)<<31>>31;a:do if(c[ka+272>>2]|0)if(!(a[ka+81>>0]|0))V=13;else{Ra=na;return}else{do if(!(0<k>>>0|(0==(k|0)?(e[ka+276>>1]|0)>>>0<j>>>0:0))){h=ka+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];fa=ka+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=i;break a}h=ka+296|0;i=c[h>>2]|0;if(!i){h=ka+292|0;break}else{c[h>>2]=c[i>>2];fa=ka+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=i;break a}}else h=ka+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;V=13}while(0);if((V|0)==13)fa=_d(ka,j,k)|0;if(!fa){Ra=na;return}o=fa+(Y<<5)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=0;h=l;j=o+(Y<<5)|0;i=fa;while(1){c[i+24>>2]=j;j=j+(ma<<2)|0;if((h|0)<=1)break;else{h=h+-1|0;i=i+32|0}}h=(W|0)!=0;if(h)gw(j|0,0,m|0)|0;else j=0;ca=c[aa+132>>2]|0;b[fa+(Y<<5)+16>>1]=ca>>>0<48?ca:48;if(h)a[fa+(Y<<5)+22>>0]=la<<24>>24==0?W&255:-1;ca=la<<24>>24==0;b:do if(!ca){Q=f+60|0;R=f+44|0;S=Y>>>0>1;T=f+20|0;U=((g&65535)<<16)+1048576|0;P=0;l=0;k=0;h=0;i=fa;m=1;while(1){if((m|0)>0){K=P&65535;M=P<<2;N=i+18|0;O=i+16|0;p=0;J=0;I=o;while(1){n=c[Q>>2]|0;if(!n)n=p;else{C=I+22|0;D=I+16|0;E=I+20|0;F=I+8|0;H=I+24|0;x=p;while(1){w=a[C>>0]|0;B=ja;c[B>>2]=0;c[B+4>>2]=0;B=n;v=I;u=c[v>>2]|0;v=c[v+4>>2]|0;c:do if((((c[B>>2]&~u|0)==0?(c[B+4>>2]&~v|0)==0:0)?(Z=n+8|0,$=Z,_=c[$>>2]|0,$=c[$+4>>2]|0,(_&u|0)==0&($&v|0)==0):0)?(X=b[D>>1]|0,!(X<<16>>16<3?(c[n+36>>2]&16384|0)!=0:0)):0){p=b[n+18>>1]|0;t=X&65535;s=t+(e[n+20>>1]|0)|0;q=s&65535;r=p<<16>>16;s=s<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0)){p=q;break}if((r+31|0)<(s|0)){p=s+1&65535;break}else{p=s+(d[18112+(s-r)>>0]|0)&65535;break}}else{if((s+49|0)<(r|0))break;if((s+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);q=b[E>>1]|0;r=p<<16>>16;s=q<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0)){p=q;break}if((r+31|0)<(s|0)){p=s+1&65535;break}else{p=(d[18112+(s-r)>>0]|0)+s&65535;break}}else{if((s+49|0)<(r|0))break;if((s+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);A=(e[n+22>>1]|0)+t|0;B=A&65535;z=_|u;y=$|v;if(w<<24>>24<0)w=hm(f,c[ia>>2]|0,I,b[R>>1]|0,K,n,ja)|0;else{t=F;u=c[t+4>>2]|0;v=ja;c[v>>2]=c[t>>2];c[v+4>>2]=u}r=w<<24>>24;if(w<<24>>24>-1&(W|0)>(r|0)){v=j+(r<<1)|0;q=b[v>>1]|0;if(!(q<<16>>16)){q=((W-r|0)*100|0)/(W|0)|0;r=((q|0)<0)<<31>>31;do if(q>>>0<8){if(q>>>0<2){u=-4325376;break}s=40;do{s=(s&65535)+65526|0;q=cw(q|0,r|0,1)|0;r=L()|0}while(r>>>0<0|(r|0)==0&q>>>0<8);s=s&65535;V=66}else{if(q>>>0>255){s=40;do{s=(s&65535)+40|0;V=q;q=bw(q|0,r|0,4)|0;u=r;r=L()|0}while(u>>>0>0|(u|0)==0&V>>>0>4095);s=s&65535}else s=40;if(!(r>>>0>0|(r|0)==0&q>>>0>15)){V=66;break}do{s=(s&65535)+10&65535;V=q;q=bw(q|0,r|0,1)|0;u=r;r=L()|0}while(u>>>0>0|(u|0)==0&V>>>0>31);V=66}while(0);if((V|0)==66){V=0;u=((s&65535)+65526+(e[3648+((q&7)<<1)>>1]|0)<<16)+-4325376|0}if(!(b[R>>1]&16384))r=g;else{r=b[T>>1]|0;r=r<<16>>16<g<<16>>16?r:g}if(r<<16>>16<11)q=0;else{q=r<<16>>16;t=((q|0)<0)<<31>>31;if((r&65535)>255){s=40;r=t;do{s=(s&65535)+40|0;t=q;q=bw(q|0,r|0,4)|0;oa=r;r=L()|0}while(oa>>>0>0|(oa|0)==0&t>>>0>4095);s=s&65535}else{s=40;r=t}if(r>>>0>0|(r|0)==0&q>>>0>15){do{s=(s&65535)+10&65535;oa=q;q=bw(q|0,r|0,1)|0;t=r;r=L()|0}while(t>>>0>0|(t|0)==0&oa>>>0>31);r=s}else r=s;q=(r&65535)+65493+(e[3648+((q&7)<<1)>>1]|0)&65535}q=q+((U+u|0)>>>16)&65535;b[v>>1]=q}r=p<<16>>16;s=q<<16>>16;do if(p<<16>>16<q<<16>>16){if((r+49|0)<(s|0))break;if((r+31|0)<(s|0)){q=s+1&65535;break}else{q=(d[18112+(s-r)>>0]|0)+s&65535;break}}else{if((s+49|0)<(r|0)){q=p;break}if((s+31|0)<(r|0)){q=r+1&65535;break}else{q=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);v=p;u=(q&65535)+5&65535}else{v=(p&65535)+65534&65535;u=p}d:do if((x|0)>0){p=0;t=i;while(1){oa=t;if(((c[oa>>2]|0)==(z|0)?(c[oa+4>>2]|0)==(y|0):0)?(a[t+22>>0]^w)<<24>>24>-1:0)break;p=p+1|0;if((p|0)>=(x|0)){V=96;break d}else t=t+32|0}q=t+22|0;r=t+18|0;p=b[r>>1]|0;if(p<<16>>16<u<<16>>16){p=x;break c}if(p<<16>>16!=u<<16>>16){s=t;p=t;break}s=b[t+16>>1]|0;p=A<<16>>16;if((p|0)>(s|0)){p=x;break c}if((p|0)!=(s|0)){s=t;p=t;break}if((b[t+20>>1]|0)>v<<16>>16){s=t;p=t}else{p=x;break c}}else V=96;while(0);if((V|0)==96){V=0;p=(x|0)<(Y|0);if(!p){if(u<<16>>16>k<<16>>16){p=x;break}if(!(u<<16>>16!=k<<16>>16?1:v<<16>>16<h<<16>>16)){p=x;break}}q=p?x:l;oa=i+(q<<5)|0;s=oa;x=x+(p&1)|0;r=i+(q<<5)+18|0;q=i+(q<<5)+22|0;p=oa}oa=I;y=Z;A=c[y+4>>2]|c[oa+4>>2];z=p;c[z>>2]=c[y>>2]|c[oa>>2];c[z+4>>2]=A;z=ja;A=c[z+4>>2]|0;oa=s+8|0;c[oa>>2]=c[z>>2];c[oa+4>>2]=A;b[s+16>>1]=B;b[r>>1]=u;b[s+20>>1]=v;a[q>>0]=w;oa=s+24|0;ew(c[oa>>2]|0,c[H>>2]|0,M|0)|0;c[(c[oa>>2]|0)+(P<<2)>>2]=n;if((x|0)<(Y|0)){p=x;break}k=b[N>>1]|0;h=b[O>>1]|0;if(!S){p=x;l=0;break}r=i;s=1;l=0;do{q=b[r+50>>1]|0;do if(q<<16>>16<=k<<16>>16){if(q<<16>>16!=k<<16>>16)break;p=b[r+52>>1]|0;if(p<<16>>16>h<<16>>16){h=p;V=112}}else{h=b[r+52>>1]|0;V=112}while(0);r=r+32|0;if((V|0)==112){V=0;l=s;k=q}s=s+1|0}while((s|0)!=(Y|0));p=x}else p=x;while(0);n=c[n+52>>2]|0;if(!n){n=p;break}else x=p}}J=J+1|0;if((J|0)==(m|0)){m=n;break}else{p=n;I=I+32|0}}}else m=0;P=P+1|0;if((P|0)==(ma|0))break;else{oa=o;o=i;i=oa}}if(m|0){if((m|0)>1){j=1;h=i;do{h=(b[h+18>>1]|0)>(b[i+(j<<5)+18>>1]|0)?i+(j<<5)|0:h;j=j+1|0}while((j|0)!=(m|0));i=h}if(ca){o=i;break}j=c[i+24>>2]|0;k=c[f+4>>2]|0;h=0;while(1){oa=c[j+(h<<2)>>2]|0;c[f+752+(h*80|0)+64>>2]=oa;oa=a[oa+16>>0]|0;a[f+752+(h*80|0)+44>>0]=oa;c[f+752+(h*80|0)+4>>2]=c[k+8+((oa&255)*72|0)+40>>2];h=h+1|0;if((h|0)==(ma|0)){o=i;break b}}}cd(aa,43687,ba);if(ka|0){if(c[ka+480>>2]|0){Xd(ka,fa);Ra=na;return}oa=fa;if((c[ka+304>>2]|0)>>>0<=oa>>>0?(c[ka+308>>2]|0)>>>0>oa>>>0:0){oa=ka+300|0;c[fa>>2]=c[oa>>2];c[oa>>2]=fa;Ra=na;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](fa);Ra=na;return}else{oa=Wa[c[29352>>2]&127](fa)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](fa);Ra=na;return}}while(0);n=f+44|0;if(((b[n>>1]&384)==256?(ea=f+51|0,!(da|(a[ea>>0]|0)!=0)):0)?(da=f+12|0,oa=ma+-1|0,oa=(hm(f,c[da>>2]|0,o,128,oa&65535,c[(c[o+24>>2]|0)+(oa<<2)>>2]|0,ja)|0)<<24>>24,(c[c[da>>2]>>2]|0)==(oa|0)):0)a[ea>>0]=2;l=f+52|0;a[l>>0]=0;h=c[ia>>2]|0;if(h|0){i=b[n>>1]|0;j=a[o+22>>0]|0;if(!(i&128)){k=f+47|0;a[k>>0]=j;da=o+8|0;ea=c[da+4>>2]|0;m=f+64|0;oa=m;c[oa>>2]=c[da>>2];c[oa+4>>2]=ea;if((j<<24>>24<1?(a[k>>0]=0,!ca):0)?(ga=ma+-1|0,ha=c[(c[o+24>>2]|0)+(ga<<2)>>2]|0,oa=c[ha+36>>2]|0,!((oa&4096|0)!=0|(oa&260|0)==260)):0){oa=ja;c[oa>>2]=0;c[oa+4>>2]=0;oa=(hm(f,h,o,2048,ga&65535,ha,ja)|0)<<24>>24;h=c[ia>>2]|0;if((c[h>>2]|0)==(oa|0)){a[l>>0]=1;ga=ja;ha=c[ga+4>>2]|0;oa=m;c[oa>>2]=c[ga>>2];c[oa+4>>2]=ha}i=b[n>>1]|0}}else if((c[h>>2]|0)==(j<<24>>24|0))a[f+51>>0]=2;if((i&512?(la<<24>>24?(c[h>>2]|0)==(a[f+47>>0]|0):0):0)?(oa=ja,c[oa>>2]=0,c[oa+4>>2]=0,oa=ma+-1|0,oa=(hm(f,h,o,0,oa&65535,c[(c[o+24>>2]|0)+(oa<<2)>>2]|0,ja)|0)<<24>>24,(c[c[ia>>2]>>2]|0)==(oa|0)):0){a[f+48>>0]=1;la=ja;ma=c[la+4>>2]|0;oa=f+64|0;c[oa>>2]=c[la>>2];c[oa+4>>2]=ma}}b[f+72>>1]=b[o+16>>1]|0;if(ka|0){if(c[ka+480>>2]|0){Xd(ka,fa);Ra=na;return}oa=fa;if((c[ka+304>>2]|0)>>>0<=oa>>>0?(c[ka+308>>2]|0)>>>0>oa>>>0:0){oa=ka+300|0;c[fa>>2]=c[oa>>2];c[oa>>2]=fa;Ra=na;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](fa);Ra=na;return}else{oa=Wa[c[29352>>2]&127](fa)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](fa);Ra=na;return}}function Kl(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+192|0;o=E+152|0;r=E+144|0;u=E+136|0;t=E+128|0;p=E+120|0;n=E+112|0;m=E+104|0;C=E+160|0;l=E;D=c[f+116>>2]|0;if((a[((D|0)==0?f:D)+199>>0]|0)!=2){Ra=E;return}s=d[h+44>>0]|0;D=c[f+8>>2]|0;k=c[f>>2]|0;x=c[h+64>>2]|0;v=x+36|0;q=c[v>>2]|0;if((q&8192|0)==0?(j=i&65535,(j&32|0)==0):0){i=q&48;do if(!i){if((q&1024|0)==0?b[x+24>>1]|0:0){j=1;break}j=(j&3|0)!=0}else j=1;while(0);B=C+4|0;c[B>>2]=l;c[C>>2]=k;w=C+8|0;c[w>>2]=100;y=C+12|0;c[y>>2]=1e9;z=C+16|0;c[z>>2]=0;a[C+20>>0]=0;A=C+21|0;a[A>>0]=0;h=j?6:4;c[z>>2]=h;ew(l|0,(j?43742:43749)|0,h|0)|0;h=c[g+8+(s*72|0)+20>>2]|0;if(!h){c[n>>2]=c[g+8+(s*72|0)+8>>2];Eb(C,43767,n)}else{c[m>>2]=c[h+20>>2];Eb(C,43754,m)}h=c[g+8+(s*72|0)+12>>2]|0;if(h|0){c[p>>2]=h;Eb(C,43777,p)}do if(!(q&1280)){k=x+32|0;l=c[k>>2]|0;if((c[(c[g+8+(s*72|0)+16>>2]|0)+36>>2]&32|0)!=0?(s=l+55|0,((d[s>>0]|d[s+1>>0]<<8)&3)==2):0)if(j)h=43784;else break;else if(!(q&131072))h=(q&16384|0)==0?((q&64|0)==0?43872:43854):43829;else h=43796;i=c[z>>2]|0;j=i+7|0;if(j>>>0<(c[w>>2]|0)>>>0){c[z>>2]=j;s=(c[B>>2]|0)+i|0;a[s>>0]=a[43881]|0;a[s+1>>0]=a[43882]|0;a[s+2>>0]=a[43883]|0;a[s+3>>0]=a[43884]|0;a[s+4>>0]=a[43885]|0;a[s+5>>0]=a[43886]|0;a[s+6>>0]=a[43887]|0}else wb(C,43881,7);c[t>>2]=c[l>>2];Eb(C,h,t);p=c[k>>2]|0;h=b[x+24>>1]|0;l=b[x+42>>1]|0;i=h&65535;h=h<<16>>16==0;if(h?(c[v>>2]&48|0)==0:0)break;j=c[z>>2]|0;k=j+2|0;if(k>>>0<(c[w>>2]|0)>>>0){c[z>>2]=k;t=(c[B>>2]|0)+j|0;a[t>>0]=32;a[t+1>>0]=40}else wb(C,43974,2);a:do if(h)i=0;else{n=p+4|0;o=p+12|0;m=l&65535;l=0;while(1){h=b[(c[n>>2]|0)+(l<<1)>>1]|0;switch(h<<16>>16){case -2:{h=43996;break}case -1:{h=38132;break}default:h=c[(c[(c[o>>2]|0)+4>>2]|0)+(h<<16>>16<<4)>>2]|0}do if(l|0){j=c[z>>2]|0;k=j+5|0;if(k>>>0<(c[w>>2]|0)>>>0){c[z>>2]=k;t=(c[B>>2]|0)+j|0;a[t>>0]=a[43977]|0;a[t+1>>0]=a[43978]|0;a[t+2>>0]=a[43979]|0;a[t+3>>0]=a[43980]|0;a[t+4>>0]=a[43981]|0;break}else{wb(C,43977,5);break}}while(0);c[u>>2]=h;Eb(C,l>>>0<m>>>0?43988:43983,u);l=l+1|0;if((l|0)==(i|0))break a}}while(0);h=c[v>>2]|0;if(!(h&32))j=i;else{im(C,p,e[x+26>>1]|0,i,i,43905);j=1;h=c[v>>2]|0}if(h&16|0)im(C,p,e[x+28>>1]|0,i,j,43907);h=c[z>>2]|0;i=h+1|0;if(i>>>0<(c[w>>2]|0)>>>0){c[z>>2]=i;a[(c[B>>2]|0)+h>>0]=41;break}else{wb(C,34066,1);break}}else{if((q&256|0)==0|(q&15|0)==0){if(!(q&1024))break;w=c[x+32>>2]|0;c[o>>2]=c[x+24>>2];c[o+4>>2]=w;Eb(C,43947,o);break}if(!(q&5))h=(i|0)==48?43891:(q&32|0)==0?43907:43905;else h=43889;c[r>>2]=h;Eb(C,43909,r)}while(0);h=c[B>>2]|0;if(((h|0)!=0?(a[h+(c[z>>2]|0)>>0]=0,(c[y>>2]|0)!=0):0)?(a[A>>0]&4)==0:0)k=$d(C)|0;else k=c[B>>2]|0;j=D+108|0;h=c[j>>2]|0;i=c[f+212>>2]|0;if((c[D+112>>2]|0)>(h|0)){c[j>>2]=h+1;f=c[D+104>>2]|0;a[f+(h*20|0)>>0]=-85;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=h;c[f+(h*20|0)+8>>2]=i;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else h=Di(D,171,h,i,0)|0;i=c[D>>2]|0;do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[j>>2]|0)+-1|0;i=c[D+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(D,i+(h*20|0)|0,k,-7);break}if(k|0){c[i+(h*20|0)+16>>2]=k;a[j>>0]=-7}}else if(k|0){if(i|0){if(c[i+480>>2]|0){Xd(i,k);break}D=k;if((c[i+304>>2]|0)>>>0<=D>>>0?(c[i+308>>2]|0)>>>0>D>>>0:0){D=i+300|0;c[k>>2]=c[D>>2];c[D>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{D=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);Ra=E;return}Ra=E;return}\nfunction cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r+4|0;j=r;d=c[a>>2]|0;n=c[d>>2]|0;do if(b){if((n+-3|0)>>>0<2){e=b<<2;q=pb(e,0)|0;if(!q){e=7;break}gw(q|0,0,e|0)|0;c[p>>2]=d;if((c[d>>2]|0)==(n|0)){e=d;do e=c[e+12>>2]|0;while((c[e>>2]|0)==(n|0));c[p>>2]=e}else e=d;m=b+-1|0;o=(b|0)>0;a:do if(o){f=0;b:while(1){k=e+8|0;l=c[k>>2]|0;c[k>>2]=0;k=(l|0)==0;if(k)d=0;else c[l+12>>2]=0;e=cr(p,m)|0;if(e|0){k=46;break a}g=c[p>>2]|0;if(g){j=0;e=f;h=c[p>>2]|0;while(1){i=q+(j<<2)|0;f=c[i>>2]|0;if(!f)break;c[e+12>>2]=f;c[e+16>>2]=g;c[f+8>>2]=e;c[g+8>>2]=e;h=e+8|0;f=c[h>>2]|0;c[h>>2]=0;c[i>>2]=0;j=j+1|0;if(!((j|0)<(b|0)&(e|0)!=0))break b;else{g=e;h=e;e=f}}c[p>>2]=h;c[i>>2]=g;c[p>>2]=0;f=e}if(k){k=37;break a}h=l+16|0;e=h;while(1){e=c[e>>2]|0;g=e;if((c[g>>2]|0)==(n|0))e=g+12|0;else break}c[p>>2]=e;i=l+8|0;g=c[h>>2]|0;c[g+8>>2]=c[i>>2];h=c[i>>2]|0;if(!h)d=g;else c[h+12>>2]=g;c[i>>2]=f;f=l}c[p>>2]=e;k=30}else{f=0;while(1){g=e+8|0;j=c[g>>2]|0;c[g>>2]=0;g=(j|0)==0;if(g)d=0;else c[j+12>>2]=0;e=cr(p,m)|0;if(e|0){k=46;break a}e=c[p>>2]|0;if(e|0){k=30;break a}if(g){k=37;break a}h=j+16|0;e=h;while(1){e=c[e>>2]|0;g=e;if((c[g>>2]|0)==(n|0))e=g+12|0;else break}c[p>>2]=e;i=j+8|0;g=c[h>>2]|0;c[g+8>>2]=c[i>>2];h=c[i>>2]|0;if(!h)d=g;else c[h+12>>2]=g;c[i>>2]=f;f=j}}while(0);if((k|0)==30){ar(e);e=18;k=46}else if((k|0)==37){c[p>>2]=0;if(o){h=0;d=0;do{e=q+(h<<2)|0;g=c[e>>2]|0;if(g){if(!d){d=g;e=g+8|0}else{c[f+16>>2]=d;e=c[e>>2]|0;c[f+12>>2]=e;c[e+8>>2]=f;c[d+8>>2]=f;e=f+8|0;d=f;f=c[e>>2]|0}c[e>>2]=0}h=h+1|0}while((h|0)!=(b|0));c[p>>2]=d;e=0}else{e=0;d=0}}if((k|0)==46){if(o){g=0;do{ar(c[q+(g<<2)>>2]|0);g=g+1|0}while((g|0)!=(b|0))}if(f)do{g=f;f=c[f+8>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{b=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0)}if(!(c[7324]|0))ab[c[29344>>2]&127](q);else{b=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q)}}else{if((n|0)!=2){q=0;b=d;c[a>>2]=b;Ra=r;return q|0}h=d+12|0;g=c[h>>2]|0;c[p>>2]=g;i=d+16|0;f=c[i>>2]|0;c[j>>2]=f;c[h>>2]=0;c[i>>2]=0;c[g+8>>2]=0;c[f+8>>2]=0;g=b+-1|0;e=cr(p,g)|0;do if(!e){e=cr(j,g)|0;if(!e){e=c[p>>2]|0;c[h>>2]=e;c[e+8>>2]=d;e=c[j>>2]|0;c[i>>2]=e;c[e+8>>2]=d;e=0;break}else{f=c[j>>2]|0;k=63;break}}else k=63;while(0);if((k|0)==63){ar(f);ar(c[p>>2]|0)}}if(!e){q=0;b=d;c[a>>2]=b;Ra=r;return q|0}}else e=1;while(0);ar(d);q=e;b=0;c[a>>2]=b;Ra=r;return q|0}function dr(a,b){a=a|0;b=b|0;var d=0;if(!a){d=0;return d|0}d=b;while(1){if((d|0)<0){b=18;a=6;break}d=d+-1|0;b=dr(c[a+12>>2]|0,d)|0;if(b|0){a=6;break}a=c[a+16>>2]|0;if(!a){b=0;a=6;break}}if((a|0)==6)return b|0;return 0}function er(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=Ra;Ra=Ra+32|0;R=W+20|0;S=W+16|0;T=W+12|0;U=W+8|0;V=W+4|0;E=W;F=b+24|0;H=b+20|0;I=b+16|0;J=b+32|0;K=b+8|0;M=b+4|0;N=b+12|0;m=0;j=f;l=1;D=e;e=0;a:while(1){c[E>>2]=0;c[F>>2]=0;b:do if((j|0)>0){n=j;k=D;while(1){switch(a[k>>0]|0){case 12:case 11:case 13:case 10:case 9:case 32:break;default:{C=k;break b}}i=n+-1|0;k=k+1|0;if((n|0)>1)n=i;else{w=6;break b}}}else{i=j;k=D;w=6}while(0);if((w|0)==6){w=0;if(!i){k=101;i=0;w=171;break}else{n=i;C=k}}i=C+4|0;k=C+5|0;c:do if((n|0)<2)w=187;else{if(!(Lu(C,54896,2)|0))switch(a[C+2>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=0;q=2;o=10;break}default:w=25}else w=25;d:do if((w|0)==25){w=0;if((n|0)<3){w=187;break c}if(!(Lu(C,54899,3)|0))switch(a[C+3>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=1;q=3;o=10;break d}default:{}}if(!(Lu(C,54903,3)|0))switch(a[C+3>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=2;q=3;o=10;break d}default:{}}if((n|0)<4){w=187;break c}if(Lu(C,54907,4)|0){w=187;break c}i=a[i>>0]|0;if(i<<24>>24==47){i=a[k>>0]|0;if((i+-48&255)>=10){w=187;break c}k=5;o=0;do{o=(o*10|0)+-48+(i<<24>>24)|0;k=k+1|0;i=a[C+k>>0]|0}while((i+-48&255)<10)}else{k=4;o=10}switch(i<<24>>24){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=3;q=k;break}default:{w=187;break c}}}while(0);p=26336+(i<<3)+6|0;if(mb()|0){k=7;i=0;w=171;break a}if(!(c[7324]|0)){n=Wa[c[29340>>2]&127](48)|0;if(!n){k=7;i=0;w=171;break a}t=n;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0))}else{i=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;n=59064;k=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&k>>>0>0){B=c[14978]|0;A=Tv(k|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;z=L()|0;c[14768]=((z|0)<0|(z|0)==0&A>>>0<=B>>>0)&1}n=Wa[c[29340>>2]&127](i)|0;if(!n){k=7;i=0;w=171;break a}i=Wa[c[29352>>2]&127](n)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i;t=n;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0))}c[n>>2]=d[p>>0];c[n+4>>2]=o;c[E>>2]=n;k=0;i=C-D+q|0}while(0);e:do if((w|0)==187){w=0;switch(a[C>>0]|0){case 41:{w=87;break a}case 34:{f:do if((n|0)>1){i=1;while(1){if((a[C+i>>0]|0)==34){k=i;break f}i=i+1|0;if((i|0)>=(n|0)){k=i;break}}}else k=1;while(0);i=k+1-D+C|0;if((k|0)==(n|0)){k=1;w=171;break a}A=C+1|0;z=k+-1|0;o=c[b>>2]|0;B=c[o>>2]|0;n=c[M>>2]|0;c[R>>2]=0;k=Za[c[B+12>>2]&127](o,A,z,R)|0;g:do if(!k){c[c[R>>2]>>2]=o;if((c[B>>2]|0)>0?(G=Xa[c[B+24>>2]&255](c[R>>2]|0,n)|0,G|0):0){Wa[c[B+16>>2]&127](c[R>>2]|0)|0;c[R>>2]=0;k=G;o=0;w=36;break}o=c[R>>2]|0;w=B+20|0;y=o;t=0;r=0;s=0;q=0;n=0;u=0;p=0;while(1){c[S>>2]=0;c[T>>2]=0;c[U>>2]=0;c[V>>2]=0;k=$a[c[w>>2]&127](y,R,S,T,U,V)|0;x=(k|0)==0;if(x){if(mb()|0){w=42;break}v=sb(u,(t*24|0)+144|0,0)|0;if(!v){w=42;break}n=c[S>>2]|0;if(mb()|0){w=48;break}u=n+s|0;u=sb(q,u,((u|0)<0)<<31>>31)|0;if(!u){w=48;break}p=v+120|0;q=p+(t*24|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;ew(u+s|0,c[R>>2]|0,c[S>>2]|0)|0;q=c[S>>2]|0;c[p+(t*24|0)+4>>2]=q;n=c[U>>2]|0;if((n|0)<(z|0))n=(a[A+n>>0]|0)==42;else n=0;c[p+(t*24|0)+8>>2]=n&1;n=c[T>>2]|0;if((n|0)>0)n=(a[C+n>>0]|0)==94;else n=0;c[p+(t*24|0)+12>>2]=n&1;t=t+1|0;n=v;r=t;s=q+s|0;q=u;p=v;u=v}else t=t+1|0;if(!x){w=58;break}}do if((w|0)==42)if(u)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);n=q;k=0;break}else{n=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);n=q;k=0;break}else{n=q;k=0}else if((w|0)==48)if(q)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);n=0;k=v;break}else{n=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);n=0;k=v;break}else{n=0;k=v}else if((w|0)==58){Wa[c[B+16>>2]&127](y)|0;o=0;w=59;break g}while(0);w=75}else{o=c[R>>2]|0;w=36}while(0);if((w|0)==36){n=0;r=0;s=0;q=0;p=0;w=59}h:do if((w|0)==59){w=0;if((k|0)==101){if((mb()|0)==0?(O=sb(p,s+144+(r*24|0)|0,0)|0,O|0):0){n=O+48|0;t=O;u=t+112|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[O>>2]=5;k=O+20|0;c[k>>2]=n;c[O+116>>2]=c[H>>2];c[O+112>>2]=r;n=n+72+(r*24|0)|0;do if(q|0){ew(n|0,q|0,s|0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{C=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);p=c[k>>2]|0;q=c[p+64>>2]|0;if((q|0)<=0){k=0;n=O;break}c[p+72>>2]=n;if((q|0)==1){k=0;n=O;break}k=n+(c[p+76>>2]|0)|0;n=1;while(1){c[p+72+(n*24|0)>>2]=k;o=n+1|0;if((o|0)<(q|0)){k=k+(c[p+72+(n*24|0)+4>>2]|0)|0;n=o}else{k=0;n=O;break h}}}if(p)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);n=q;k=0;w=75;break}else{n=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);n=q;k=0;w=75;break}else{n=q;k=0;w=75}}}while(0);do if((w|0)==75){w=0;if(o|0)Wa[c[B+16>>2]&127](o)|0;do if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{C=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(k)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);k=7;n=0;break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);k=7;n=0;break}else{k=7;n=0}}while(0);c[E>>2]=n;break e}case 40:{c[R>>2]=0;c[J>>2]=(c[J>>2]|0)+1;k=er(b,C+1|0,n+-1|0,E,R)|0;i=1-D+C+(c[R>>2]|0)|0;n=c[E>>2]|0;break e}default:{s=c[H>>2]|0;t=c[I>>2]|0;i:do if((t|0)>0){u=c[K>>2]|0;i=0;j:while(1){k=c[u+(i<<2)>>2]|0;v=Eu(k)|0;if((n|0)>(v|0)?!((k|0)==0?1:(a[C+v>>0]|0)!=58):0){if((v|0)<=0){w=99;break}r=C;p=v;while(1){o=a[k>>0]|0;if(!(o<<24>>24)){w=95;break}o=a[208+(o&255)>>0]|0;q=a[208+(d[r>>0]|0)>>0]|0;if(o<<24>>24!=q<<24>>24){w=97;break}if((p|0)>1){k=k+1|0;r=r+1|0;p=p+-1|0}else{w=99;break j}}if((w|0)==95){w=0;o=0;k=a[208+(d[r>>0]|0)>>0]|0}else if((w|0)==97){w=0;o=o&255;k=q}if((o|0)==(k&255|0)){w=102;break}}i=i+1|0;if((i|0)>=(t|0)){q=s;u=0;break i}}if((w|0)==99){w=0;q=i;u=v+1-D+C|0;break}else if((w|0)==102){w=0;q=i;u=v+1-D+C|0;break}}else{q=s;u=0}while(0);s=D+u|0;p=j-u|0;o=c[b>>2]|0;t=c[o>>2]|0;k:do if((p|0)>0){i=0;while(1){switch(a[s+i>>0]|0){case 34:case 41:case 40:break k;default:{}}i=i+1|0;if((i|0)>=(p|0))break k}}else i=0;while(0);n=c[M>>2]|0;c[R>>2]=0;k=Za[c[t+12>>2]&127](o,s,i,R)|0;do if(!k){c[c[R>>2]>>2]=o;if((c[t>>2]|0)>0?(P=Xa[c[t+24>>2]&255](c[R>>2]|0,n)|0,P|0):0){Wa[c[t+16>>2]&127](c[R>>2]|0)|0;c[R>>2]=0;k=P;w=111;break}r=c[R>>2]|0;c[S>>2]=0;c[T>>2]=0;c[U>>2]=0;c[V>>2]=0;k=$a[c[t+20>>2]&127](r,R,S,T,U,V)|0;l:do if(!k){i=(c[S>>2]|0)+144|0;n=pb(i,0)|0;if(!n){n=0;k=7;i=c[U>>2]|0;break}gw(n|0,0,i|0)|0;c[n>>2]=5;c[n+20>>2]=n+48;c[n+112>>2]=1;c[n+116>>2]=q;i=c[S>>2]|0;c[n+124>>2]=i;C=n+144|0;c[n+120>>2]=C;ew(C|0,c[R>>2]|0,i|0)|0;i=c[U>>2]|0;if((i|0)<(p|0)?(Q=i+1|0,(a[s+i>>0]|0)==42):0){c[n+128>>2]=1;c[U>>2]=Q;i=Q}k=c[T>>2]|0;if((c[N>>2]|0)!=0&(k|0)>0){p=n+132|0;while(1){o=k;k=k+-1|0;if((a[s+k>>0]|0)!=94){k=0;break l}c[p>>2]=1;c[T>>2]=k;if((o|0)<=1){k=0;break}}}else k=0}else{n=0;k=(i|0)!=0&(k|0)==101?0:k}while(0);Wa[c[t+16>>2]&127](r)|0}else w=111;while(0);if((w|0)==111){w=0;n=0}c[E>>2]=n;i=i+u|0;break e}}}while(0);if((k|0)==0&(n|0)!=0){r=c[n>>2]|0;if((r|0)!=5){p=(c[n+12>>2]|0)!=0;o=p^1;k=(l|0)!=0;if(k&o){w=129;break}else q=p}else{k=(l|0)!=0;o=0;q=1}if(k|o)if(!m)m=0;else w=154;else{if(mb()|0){w=152;break}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](48)|0;if(!k){w=152;break}t=k;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0));p=k}else{k=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;p=59064;l=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&l>>>0>0){C=c[14978]|0;B=Tv(l|0,p|0,k|0,((k|0)<0)<<31>>31|0)|0;A=L()|0;c[14768]=((A|0)<0|(A|0)==0&B>>>0<=C>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l){w=152;break}k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;t=l;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0));p=l}c[p>>2]=3;k=m+8|0;l=c[k>>2]|0;m:do if(!l)w=150;else{n=l;while(1){if((c[n>>2]|0)>3)break;k=n+8|0;l=c[k>>2]|0;if(!l){m=n;w=150;break m}else{m=n;n=l}}c[n+16>>2]=p;c[p+8>>2]=c[k>>2]}while(0);if((w|0)==150)e=p;c[p+12>>2]=m;c[k>>2]=p;m=p;w=154}if((w|0)==154){w=0;if(!((r|0)!=1|q)?(c[m>>2]|0)!=5:0){w=158;break}if((r|0)!=5&q?(c[m>>2]|0)==1:0){w=158;break}}if(q){k=c[E>>2]|0;l=k;if(!e){e=k;m=l}else{c[m+16>>2]=k;c[l+8>>2]=m;m=l}}else{q=c[E>>2]|0;k=m+8|0;l=c[k>>2]|0;n:do if(!l)w=167;else{p=c[q>>2]|0;n=l;while(1){if((c[n>>2]|0)>(p|0))break;k=n+8|0;l=c[k>>2]|0;if(!l){m=n;w=167;break n}else{m=n;n=l}}c[n+16>>2]=q;c[q+8>>2]=c[k>>2]}while(0);if((w|0)==167){w=0;e=q}c[q+12>>2]=m;c[k>>2]=q;m=c[E>>2]|0}l=o&1;k=0}j=j-i|0;if(!k)D=D+i|0;else{w=173;break}}if((w|0)==87){c[J>>2]=(c[J>>2]|0)+-1;c[E>>2]=0;k=101;i=1-D+C|0;w=171}else if((w|0)==129){ar(n);i=1;w=170}else if((w|0)==152){ar(n);i=7;w=170}else if((w|0)==158){ar(c[E>>2]|0);i=1;w=170}if((w|0)!=170)if((w|0)==171){j=j-i|0;w=173}if((w|0)==173){i=(e|0)!=0&(k|0)==101&(l|0)!=0?1:k;c[h>>2]=f-j;if((i|0)==101){h=0;f=e;c[g>>2]=f;Ra=W;return h|0}}ar(e);h=i;f=0;c[g>>2]=f;Ra=W;return h|0}function fr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if(!b)return;while(1){if(c[f>>2]|0){v=38;break}g=c[b>>2]|0;if((g|0)==5){v=5;break}c[e>>2]=(c[e>>2]|0)+((g|0)==4&1);fr(a,c[b+12>>2]|0,d,e,f);b=c[b+16>>2]|0;if(!b){v=38;break}}if((v|0)==5){t=b+20|0;b=c[t>>2]|0;u=c[b+64>>2]|0;c[d>>2]=(c[d>>2]|0)+u;a:do if((u|0)>0){s=a+20|0;r=0;b:while(1){o=c[b+72+(r*24|0)>>2]|0;p=c[b+72+(r*24|0)+4>>2]|0;n=c[b+72+(r*24|0)+8>>2]|0;q=b+72+(r*24|0)+20|0;if(mb()|0){g=0;b=7;v=34;break}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](56)|0;if(!g){g=0;b=7;v=34;break}}else{b=Wa[c[29356>>2]&127](56)|0;if((c[14985]|0)>>>0<56)c[14985]=56;e=59064;g=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&g>>>0>0){m=c[14978]|0;l=Tv(g|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;k=L()|0;c[14768]=((k|0)<0|(k|0)==0&l>>>0<=m>>>0)&1}g=Wa[c[29340>>2]&127](b)|0;if(!g){g=0;b=7;v=34;break}b=Wa[c[29352>>2]&127](g)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0>(c[14987]|0)>>>0)c[14987]=b}m=c[a>>2]|0;l=(n|0)!=0;c:do if(l){h=m+256|0;d=g+36|0;k=c[m+252>>2]|0;i=(k|0)>1;if(i){e=c[h>>2]|0;j=1;while(1){if((c[e+(j*24|0)>>2]|0)==(p|0)){v=25;break}b=j+1|0;if((b|0)<(k|0))j=b;else break}if((v|0)==25){v=0;b=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));b=Xp(m,b,j,-2,o,p,0,0,g)|0;c[d>>2]=1;break}j=p+1|0;if(i){e=c[h>>2]|0;h=1;while(1){if((c[e+(h*24|0)>>2]|0)==(j|0))break;b=h+1|0;if((b|0)<(k|0))h=b;else{v=33;break c}}b=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));b=Xp(m,b,h,-2,o,p,1,0,g)|0;if(b|0){v=34;break b}b=Xp(m,c[s>>2]|0,0,-2,o,p,0,0,g)|0}else v=33}else v=33}else{d=g+36|0;v=33}while(0);if((v|0)==33){v=0;b=(l^1)&1;e=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));p=Xp(m,e,0,-2,o,p,n,0,g)|0;c[d>>2]=b;b=p}c[q>>2]=g;r=r+1|0;if(b|0)break;b=c[t>>2]|0;if((r|0)>=(u|0))break a}if((v|0)==34)c[q>>2]=g;c[f>>2]=b;return}while(0);c[b+44>>2]=-1;return}else if((v|0)==38)return}function gr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;D=Ra;Ra=Ra+16|0;C=D;if(c[h>>2]|0){Ra=D;return}j=e;a:while(1){switch(c[j>>2]|0){case 5:{e=5;break a}case 2:{e=31;break a}case 4:{i=j+12|0;e=c[i>>2]|0;c[c[g>>2]>>2]=e;c[g>>2]=(c[g>>2]|0)+4;break}default:{e=d;i=j+12|0}}gr(b,e,c[i>>2]|0,f,g,h);i=j+16|0;if((c[j>>2]|0)==4){e=c[i>>2]|0;c[c[g>>2]>>2]=e;c[g>>2]=(c[g>>2]|0)+4}if(!(c[h>>2]|0)){d=e;j=c[i>>2]|0}else{e=31;break}}if((e|0)==5){v=c[j+20>>2]|0;w=v+64|0;x=v+68|0;u=0;while(1){if((u|0)>=(c[w>>2]|0)){e=31;break}y=c[f>>2]|0;c[f>>2]=y+24;c[y>>2]=v;c[y+4>>2]=u;c[y+12>>2]=d;c[y+8>>2]=v+72+(u*24|0);c[y+20>>2]=c[x>>2];m=c[v+72+(u*24|0)+20>>2]|0;y=y+16|0;t=c[b>>2]|0;n=c[t+240>>2]|0;o=m+4|0;p=t+20|0;q=t+248|0;r=t+244|0;s=t+12|0;t=t+16|0;i=0;l=0;while(1){if((l|0)>=(c[o>>2]|0)){e=0;break}e=c[(c[m>>2]|0)+(l<<2)>>2]|0;b:do if(((c[e+56>>2]|0)==0?(a[e+5>>0]|0)==0:0)?(A=e+8|0,z=c[A>>2]|0,A=c[A+4>>2]|0,B=e+16|0,k=B,g=c[k+4>>2]|0,!((A|0)>(g|0)|((A|0)==(g|0)?z>>>0>(c[k>>2]|0)>>>0:0))):0){j=c[q>>2]|0;g=z;k=A;while(1){if(!j){e=c[r>>2]|0;if(!e){c[C>>2]=c[p>>2];e=Bb(53537,C)|0;c[r>>2]=e;if(!e){e=7;break b}}e=ad(c[s>>2]|0,c[t>>2]|0,e,53549,g,k,0,q)|0}else e=ld(j,g,k)|0;if(e|0)break b;j=c[q>>2]|0;if((j|0)!=0?(c[j+16>>2]|0)!=0:0)e=c[j>>2]|0;else e=0;if((e+35|0)>(n|0))i=((e+34|0)/(n|0)|0)+i|0;E=g;g=Sv(g|0,k|0,1,0)|0;G=k;k=L()|0;e=B;F=c[e+4>>2]|0;if(!((G|0)<(F|0)|((G|0)==(F|0)?E>>>0<(c[e>>2]|0)>>>0:0))){e=0;break}}}else e=0;while(0);if(!e)l=l+1|0;else break}c[y>>2]=i;c[h>>2]=e;if(!e)u=u+1|0;else{e=31;break}}if((e|0)==31){Ra=D;return}}else if((e|0)==31){Ra=D;return}}function hr(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;x=B+4|0;y=B;z=c[e>>2]|0;if(c[z+40>>2]|0){A=0;Ra=B;return A|0}v=(h|0)>0;if(!v){A=0;Ra=B;return A|0}i=0;j=0;k=0;while(1){if((c[g+(k*24|0)+12>>2]|0)==(f|0)){u=i+1|0;j=(c[g+(k*24|0)+16>>2]|0)+j|0}else u=i;k=k+1|0;if((k|0)==(h|0))break;else i=u}if((j|0)==0|(u|0)<2){A=0;Ra=B;return A|0}s=e+60|0;i=c[s>>2]|0;do if(!i){i=lr(z,x)|0;if(!i){r=c[x>>2]|0;q=(r|0)==0;if(q)l=mc(29576)|0;else{i=c[r+120>>2]|0;if((i|0)!=0?(b[r+144>>1]|0)!=0:0)j=r;else{i=c[r>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;j=r}l=mc(i)|0;i=c[j>>2]|0;k=r+40|0;j=c[k>>2]|0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&j;c[k>>2]=i}n=Lc(r,0)|0;p=l+n|0;j=a[l>>0]|0;i=j&255;do if(!(i&128)){k=1;i=j&255;o=0}else{t=d[l+1>>0]|0;i=t<<7|i&127;if(!(t&128)){k=2;o=0;break}t=d[l+2>>0]|0;i=t<<14|i&16383;if(!(t&128)){k=3;o=0;break}t=d[l+3>>0]|0;i=t<<21|i&2097151;if(!(t&128)){k=4;o=0;break}j=28;k=l+4|0;i=i&268435455;m=0;do{t=k;k=k+1|0;t=d[t>>0]|0;o=cw(t&127|0,0,j|0)|0;i=Sv(o|0,L()|0,i|0,m|0)|0;m=L()|0;j=j+7|0}while(j>>>0<64&((t&128|0)!=0|0!=0));k=k-l|0;o=m}while(0);if((k|0)<(n|0)){n=l+k|0;do{k=a[n>>0]|0;j=k&255;do if(!(j&128)){l=1;j=k&255;k=0}else{t=d[n+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;k=0;break}t=d[n+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;k=0;break}t=d[n+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;k=0;break}l=28;m=n+4|0;j=j&268435455;k=0;do{t=m;m=m+1|0;t=d[t>>0]|0;C=cw(t&127|0,0,l|0)|0;j=Sv(C|0,L()|0,j|0,k|0)|0;k=L()|0;l=l+7|0}while(l>>>0<64&((t&128|0)!=0|0!=0));l=m-n|0}while(0);n=n+l|0}while(n>>>0<p>>>0);if(!((i|0)==0&(o|0)==0|(j|0)==0&(k|0)==0)){p=e+64|0;c[p>>2]=i;c[p+4>>2]=o;o=Wv(j|0,k|0,i|0,o|0)|0;p=L()|0;t=c[z+240>>2]|0;C=((t|0)<0)<<31>>31;p=Sv(o|0,p|0,t|0,C|0)|0;C=Wv(p|0,L()|0,t|0,C|0)|0;L()|0;c[s>>2]=C;do if(!q){i=c[r>>2]|0;C=r+136|0;t=c[C+4>>2]|0;if((t|0)>0|(t|0)==0&(c[C>>2]|0)>>>0>0)hc(i,r);j=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;C=r+64|0;c[C>>2]=0;c[C+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}else i=0;while(0);t=c[s>>2]|0;break}}if(!q){i=c[r>>2]|0;C=r+136|0;A=c[C+4>>2]|0;if((A|0)>0|(A|0)==0&(c[C>>2]|0)>>>0>0)hc(i,r);C=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;A=r+64|0;c[A>>2]=0;c[A+4>>2]=0;if((C|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=267}else i=267}else i=267}C=i;Ra=B;return C|0}else{t=i;i=0}while(0);if(!((u|0)>0&(i|0)==0)){C=i;Ra=B;return C|0}s=u+-1|0;r=e+28|0;p=0;o=1;q=0;while(1){if(v){i=0;k=0;do{j=g+(k*24|0)|0;do if((c[g+(k*24|0)+8>>2]|0)!=0?(c[g+(k*24|0)+12>>2]|0)==(f|0):0){if(i|0?(c[g+(k*24|0)+16>>2]|0)>=(c[i+16>>2]|0):0)break;i=j}while(0);k=k+1|0}while((k|0)!=(h|0));m=i}else m=0;n=(q|0)==0;do if(n){o=o<<2;A=88}else{C=(o|0)/4|0;if((c[m+16>>2]|0)<(G((p+-1+C|0)/(C|0)|0,t)|0)){j=q>>>0<12?o<<2:o;if(!((q|0)==(s|0)?1:(c[(c[m>>2]|0)+64>>2]|0)<2)){o=j;A=88;break}i=0;l=j;k=p;j=m+8|0;break}j=m+8|0;n=c[j>>2]|0;m=c[m+20>>2]|0;do if(!(mb()|0)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;if(!i){i=7;break}}else{i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){C=c[14978]|0;e=Tv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&e>>>0<=C>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=7;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}c[i+12>>2]=0;c[i>>2]=n;c[i+8>>2]=c[r>>2];c[i+4>>2]=m;c[r>>2]=i;c[n+16>>2]=i;i=0}else i=7;while(0);l=n+20|0;br(c[l>>2]|0);c[l>>2]=0;l=o;k=p}while(0);if((A|0)==88){A=0;j=m+8|0;i=c[j>>2]|0;c[x>>2]=0;c[y>>2]=0;i=jr(z,i,c[m+20>>2]|0,x,y)|0;if(!i){i=kr(z,c[m>>2]|0,c[m+4>>2]|0,c[y>>2]|0,c[x>>2]|0)|0;if(!i){k=c[m>>2]|0;i=c[k>>2]|0;k=c[k+4>>2]|0;if((i|0)!=0?(w=i+k|0,(k|0)>0):0){k=0;do{do{C=i;i=i+1|0}while((a[C>>0]|0)<0);l=0;while(1){m=a[i>>0]|0;i=i+1|0;if(!(l<<24>>24|m))break;else l=m&128}k=k+1|0}while(i>>>0<w>>>0)}else k=0;i=0;k=n|(k|0)<(p|0)?k:p}else k=p}else k=p;l=o}c[j>>2]=0;q=q+1|0;if(!((q|0)<(u|0)&(i|0)==0))break;else{p=k;o=l}}Ra=B;return i|0}function ir(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!d)return;if(c[e>>2]|0)return;if((c[d>>2]|0)!=5){h=d+12|0;ir(b,c[h>>2]|0,e);f=d+16|0;ir(b,c[f>>2]|0,e);if(!(a[(c[h>>2]|0)+34>>0]|0))f=0;else f=(a[(c[f>>2]|0)+34>>0]|0)!=0&1;a[d+34>>0]=f;return}h=c[d+20>>2]|0;g=c[h+64>>2]|0;if(g|0){a:do if((g|0)>0){f=0;do{if(!(c[h+72+(f*24|0)+16>>2]|0))break a;f=f+1|0}while((f|0)<(g|0))}else f=0;while(0);a[d+34>>0]=(f|0)==(g|0)&1}d=pr(b,1,h)|0;c[e>>2]=d;return}function jr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+160|0;r=x+148|0;s=x+144|0;u=x+16|0;i=x;w=e+20|0;v=c[w>>2]|0;j=u;k=j+128|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[i+12>>2]=((c[e+12>>2]|0)==0?0:32)|((c[e+8>>2]|0)==0?3:11)|((c[b+24>>2]|0)>(f|0)?4:0);c[i+8>>2]=f;q=c[e>>2]|0;c[i>>2]=q;e=c[e+4>>2]|0;c[i+4>>2]=e;c[v+12>>2]=i;e=eq(b,v,q,e)|0;a:do if(!e){n=v+48|0;o=v+52|0;p=u+64|0;q=b+235|0;b:while(1){e=gq(b,v)|0;switch(e|0){case 0:break b;case 100:break;default:break a}m=c[n>>2]|0;f=c[o>>2]|0;e=c[u>>2]|0;c:do if(!e){e=nb(f+11|0)|0;c[u>>2]=e;c[p>>2]=f;if(!e)e=7;else{ew(e|0,m|0,f|0)|0;j=e+f|0;k=j+10|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));e=0}}else{l=0;j=m;i=u;while(1){k=u+64+(l<<2)|0;e=mr(d[q>>0]|0,j,f,e,c[k>>2]|0,r,s)|0;f=(j|0)==(m|0)|(j|0)==0;if(e|0){t=10;break}do if(!f)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);e=c[i>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[i>>2]=0;j=c[r>>2]|0;f=c[s>>2]|0;if((l|0)==15){t=23;break}l=l+1|0;if(l>>>0>=16){e=0;break c}i=u+(l<<2)|0;e=c[i>>2]|0;if(!e){t=8;break}}if((t|0)==8){t=0;c[i>>2]=j;c[u+64+(l<<2)>>2]=f;e=0;break}else if((t|0)==10){t=0;do if(!f)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{m=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);break}else if((t|0)==23){t=0;c[i>>2]=j;c[k>>2]=f;e=0;break}}while(0);if(e|0)break a}l=0;f=0;j=0;d:while(1){i=u+(l<<2)|0;k=c[i>>2]|0;do if(!k)e=j;else{if(!j){f=c[u+64+(l<<2)>>2]|0;c[i>>2]=0;e=k;break}e=mr(d[q>>0]|0,k,c[u+64+(l<<2)>>2]|0,j,f,s,r)|0;f=(c[7324]|0)==0;if(e|0)break d;if(f)ab[c[29344>>2]&127](k);else{b=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{b=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}c[i>>2]=0;f=c[r>>2]|0;e=c[s>>2]|0}while(0);l=l+1|0;if(l>>>0>=16){t=45;break}else j=e}if((t|0)==45){c[u>>2]=e;c[p>>2]=f;c[h>>2]=e;c[g>>2]=f;u=0;br(v);c[w>>2]=0;Ra=x;return u|0}if(f)ab[c[29344>>2]&127](j);else{t=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}}while(0);f=0;do{i=c[u+(f<<2)>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);f=f+1|0}while((f|0)!=16);br(v);c[w>>2]=0;Ra=x;return e|0}function kr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;M=Ra;Ra=Ra+16|0;F=M+8|0;G=M+4|0;H=M;do if(!g){i=c[e>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{K=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[e>>2]=0;c[e+4>>2]=0;j=0;i=e+44|0}else{i=e+44|0;j=c[i>>2]|0;if((j|0)<0){c[e>>2]=g;c[e+4>>2]=h;j=0;break}l=c[e>>2]|0;if(!l)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);j=0;break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);j=0;break}K=e+4|0;k=c[K>>2]|0;if((j|0)<(f|0)){D=f-j|0;m=k;J=l;l=g}else{D=j-f|0;m=h;J=g;h=k}E=l;p=a[b+235>>0]|0;A=J+m|0;B=l+h|0;c[F>>2]=J;c[G>>2]=l;C=p<<24>>24!=0;if(C){j=Sv(h|0,((h|0)<0)<<31>>31|0,10,0)|0;j=pb(j,L()|0)|0;if(!j){j=7;k=E}else{g=j;k=j;I=19}}else{g=l;k=E;I=19}do if((I|0)==19){c[H>>2]=g;if((m|0)>0){g=a[J>>0]|0;j=g&255;do if(!(j&128)){b=1;j=g&255;g=0}else{z=d[J+1>>0]|0;j=z<<7|j&127;if(!(z&128)){b=2;g=0;break}z=d[J+2>>0]|0;j=z<<14|j&16383;if(!(z&128)){b=3;g=0;break}z=d[J+3>>0]|0;j=z<<21|j&2097151;if(!(z&128)){b=4;g=0;break}g=28;b=J+4|0;j=j&268435455;m=0;do{z=b;b=b+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,g|0)|0;j=Sv(y|0,L()|0,j|0,m|0)|0;m=L()|0;g=g+7|0}while(g>>>0<64&((z&128|0)!=0|0!=0));b=b-J|0;g=m}while(0);o=J+b|0;n=g}else{o=0;j=0;n=0}c[F>>2]=o;if((h|0)>0){g=a[l>>0]|0;h=g&255;do if(!(h&128)){b=1;h=g&255;m=0}else{z=d[l+1>>0]|0;h=z<<7|h&127;if(!(z&128)){b=2;m=0;break}z=d[l+2>>0]|0;h=z<<14|h&16383;if(!(z&128)){b=3;m=0;break}z=d[l+3>>0]|0;h=z<<21|h&2097151;if(!(z&128)){b=4;m=0;break}g=28;b=l+4|0;h=h&268435455;m=0;do{z=b;b=b+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,g|0)|0;h=Sv(y|0,L()|0,h|0,m|0)|0;m=L()|0;g=g+7|0}while(g>>>0<64&((z&128|0)!=0|0!=0));b=b-E|0}while(0);g=l+b|0;c[G>>2]=g;if((o|0)!=0&(g|0)!=0){y=C?-1:1;z=C?-1:0;x=p<<24>>24==0;w=0;s=n;v=0;u=0;t=g;r=o;a:while(1){q=Tv(j|0,s|0,h|0,m|0)|0;q=Yv(q|0,L()|0,y|0,z|0)|0;g=L()|0;do if(!((q|0)==0&(g|0)==0))if((g|0)<0){n=r;g=0;while(1){b=a[n>>0]|0;q=n+1|0;if(!(g<<24>>24|b))break;else{n=q;g=b&128}}p=q;c[F>>2]=q;if(q>>>0>=A>>>0){I=85;break a}b=a[q>>0]|0;g=b&255;do if(!(g&128)){n=1;b=b&255;g=0}else{r=d[n+2>>0]|0;g=r<<7|g&127;if(!(r&128)){n=2;b=g;g=0;break}r=d[n+3>>0]|0;g=r<<14|g&16383;if(!(r&128)){n=3;b=g;g=0;break}r=d[n+4>>0]|0;b=r<<21|g&2097151;if(!(r&128)){n=4;g=0;break}o=28;n=n+5|0;b=b&268435455;g=0;do{r=n;n=n+1|0;r=d[r>>0]|0;N=cw(r&127|0,0,o|0)|0;b=Sv(N|0,L()|0,b|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((r&128|0)!=0|0!=0));n=n-p|0}while(0);p=q+n|0;c[F>>2]=p;o=Tv(0,0,b|0,g|0)|0;q=L()|0;j=Sv((x?b:o)|0,(x?g:q)|0,j|0,s|0)|0;q=w;o=t;n=L()|0;b=v;g=u;break}else{n=t;g=0;while(1){b=a[n>>0]|0;q=n+1|0;if(!(g<<24>>24|b))break;else{n=q;g=b&128}}p=q;c[G>>2]=q;if(q>>>0>=B>>>0){I=100;break a}b=a[q>>0]|0;g=b&255;do if(!(g&128)){n=1;b=b&255;g=0}else{N=d[n+2>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=g;g=0;break}N=d[n+3>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=g;g=0;break}N=d[n+4>>0]|0;b=N<<21|g&2097151;if(!(N&128)){n=4;g=0;break}o=28;n=n+5|0;b=b&268435455;g=0;do{N=n;n=n+1|0;N=d[N>>0]|0;t=cw(N&127|0,0,o|0)|0;b=Sv(t|0,L()|0,b|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((N&128|0)!=0|0!=0));n=n-p|0}while(0);o=q+n|0;c[G>>2]=o;p=Tv(0,0,b|0,g|0)|0;q=L()|0;h=Sv((x?b:p)|0,(x?g:q)|0,h|0,m|0)|0;q=w;p=r;n=s;m=L()|0;b=v;g=u;break}else{b=c[H>>2]|0;t=x|(w|0)==0;r=Tv(j|0,s|0,v|0,u|0)|0;N=L()|0;o=Tv(v|0,u|0,j|0,s|0)|0;q=L()|0;g=b;o=t?r:o;q=t?N:q;while(1){n=o&255;p=g+1|0;a[g>>0]=n|-128;o=bw(o|0,q|0,7)|0;q=L()|0;if((o|0)==0&(q|0)==0)break;else g=p}a[g>>0]=n&127;c[H>>2]=(c[H>>2]|0)+(p-b);if(!(or(H,D,0,1,F,G)|0)){c[H>>2]=b;q=w;t=v}else{q=1;t=j;u=s}p=c[F>>2]|0;if(p>>>0<A>>>0){b=a[p>>0]|0;g=b&255;do if(!(g&128)){n=1;g=b&255;b=0}else{N=d[p+1>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=0;break}N=d[p+2>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=0;break}N=d[p+3>>0]|0;g=N<<21|g&2097151;if(!(N&128)){n=4;b=0;break}n=28;o=p+4|0;g=g&268435455;b=0;do{N=o;o=o+1|0;N=d[N>>0]|0;w=cw(N&127|0,0,n|0)|0;g=Sv(w|0,L()|0,g|0,b|0)|0;b=L()|0;n=n+7|0}while(n>>>0<64&((N&128|0)!=0|0!=0));n=o-p|0}while(0);r=p+n|0;c[F>>2]=r;w=Tv(0,0,g|0,b|0)|0;N=L()|0;j=Sv((x?g:w)|0,(x?b:N)|0,j|0,s|0)|0;s=L()|0}else{c[F>>2]=0;r=0}p=c[G>>2]|0;if(p>>>0>=B>>>0){I=67;break a}b=a[p>>0]|0;g=b&255;do if(!(g&128)){n=1;g=b&255;b=0}else{N=d[p+1>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=0;break}N=d[p+2>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=0;break}N=d[p+3>>0]|0;g=N<<21|g&2097151;if(!(N&128)){n=4;b=0;break}n=28;o=p+4|0;g=g&268435455;b=0;do{N=o;o=o+1|0;N=d[N>>0]|0;w=cw(N&127|0,0,n|0)|0;g=Sv(w|0,L()|0,g|0,b|0)|0;b=L()|0;n=n+7|0}while(n>>>0<64&((N&128|0)!=0|0!=0));n=o-p|0}while(0);o=p+n|0;c[G>>2]=o;n=Tv(0,0,g|0,b|0)|0;p=L()|0;h=Sv((x?g:n)|0,(x?b:p)|0,h|0,m|0)|0;p=r;n=s;m=L()|0;b=t;g=u}while(0);if((o|0)!=0&(p|0)!=0){w=q;s=n;v=b;u=g;t=o;r=p}else break}if((I|0)==67)c[G>>2]=0;else if((I|0)==85)c[F>>2]=0;else if((I|0)==100)c[G>>2]=0;j=c[H>>2]|0}else j=k}else{c[G>>2]=0;j=k}h=j-k|0;if(C)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);j=0;break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);j=0;break}else{j=0;k=E}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](J);else{N=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-N;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J)}c[e>>2]=k;c[K>>2]=h}while(0);if((c[i>>2]|0)>=(f|0)){Ra=M;return j|0}c[i>>2]=f;Ra=M;return j|0}function lr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;f=l;h=l+8|0;i=d+144|0;k=c[i>>2]|0;c[h>>2]=k;g=k;if(!k){k=c[d+20>>2]|0;c[f>>2]=c[d+16>>2];c[f+4>>2]=k;f=Bb(52411,f)|0;if(!f){k=7;j=g;c[e>>2]=j;Ra=l;return k|0}d=qd(c[d+12>>2]|0,f,-1,133,0,h,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}f=c[h>>2]|0;c[i>>2]=f;if(!d)i=f;else{k=d;j=f;c[e>>2]=j;Ra=l;return k|0}}else i=g;k=i;do if(!(Vc(k,1)|0)){f=c[k+100>>2]|0;d=f+8|0;if(!(b[d>>1]&9216)){h=f;c[h>>2]=0;c[h+4>>2]=0;b[d>>1]=4;break}else{Pg(f,0,0);break}}while(0);if((Gc(k)|0)==100){if(i|0){f=c[k+120>>2]|0;if(!((f|0)!=0?(b[k+144>>1]|0)!=0:0)){f=c[k>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}g=b[f+8>>1]&15;f=c[k>>2]|0;h=k+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&d;c[h>>2]=f;if((g|16)<<16>>16==16){k=0;j=i;c[e>>2]=j;Ra=l;return k|0}else j=22}}else j=22;do if((j|0)==22?i|0:0){f=c[k>>2]|0;j=k+136|0;i=c[j+4>>2]|0;if((i|0)>0|(i|0)==0&(c[j>>2]|0)>>>0>0)hc(f,k);d=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;k=k+64|0;c[k>>2]=0;c[k+4>>2]=0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);k=7;j=0;c[e>>2]=j;Ra=l;return k|0}else{f=c[f+68>>2]&d;if(!f)break;else d=0;c[e>>2]=d;Ra=l;return f|0}}while(0);k=267;j=0;c[e>>2]=j;Ra=l;return k|0}function mr(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;y=C+8|0;z=C+4|0;A=C;w=e+f|0;x=g+h|0;c[y>>2]=e;c[z>>2]=g;c[i>>2]=0;c[j>>2]=0;l=Sv(f|0,((f|0)<0)<<31>>31|0,17,0)|0;l=Sv(l|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=pb(l,L()|0)|0;if(!l){B=7;Ra=C;return B|0}c[A>>2]=l;if((f|0)>0){k=a[e>>0]|0;f=k&255;do if(!(f&128)){m=1;f=k&255;k=0}else{v=d[e+1>>0]|0;f=v<<7|f&127;if(!(v&128)){m=2;k=0;break}v=d[e+2>>0]|0;f=v<<14|f&16383;if(!(v&128)){m=3;k=0;break}v=d[e+3>>0]|0;f=v<<21|f&2097151;if(!(v&128)){m=4;k=0;break}m=28;n=e+4|0;f=f&268435455;k=0;do{v=n;n=n+1|0;v=d[v>>0]|0;u=cw(v&127|0,0,m|0)|0;f=Sv(u|0,L()|0,f|0,k|0)|0;k=L()|0;m=m+7|0}while(m>>>0<64&((v&128|0)!=0|0!=0));m=n-e|0}while(0);p=k;o=e+m|0}else{f=0;p=0;o=0}c[y>>2]=o;if((h|0)>0){m=a[g>>0]|0;k=m&255;do if(!(k&128)){n=1;k=m&255;m=0}else{v=d[g+1>>0]|0;k=v<<7|k&127;if(!(v&128)){n=2;m=0;break}v=d[g+2>>0]|0;k=v<<14|k&16383;if(!(v&128)){n=3;m=0;break}v=d[g+3>>0]|0;k=v<<21|k&2097151;if(!(v&128)){n=4;m=0;break}n=28;e=g+4|0;k=k&268435455;m=0;do{v=e;e=e+1|0;v=d[v>>0]|0;u=cw(v&127|0,0,n|0)|0;k=Sv(u|0,L()|0,k|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((v&128|0)!=0|0!=0));n=e-g|0}while(0);e=m;m=g+n|0}else{k=0;e=0;m=0}c[z>>2]=m;n=(o|0)!=0;m=(m|0)!=0;a:do if(n|m){t=(b|0)==0;u=t?1:-1;v=t?0:-1;g=0;s=f;r=p;q=e;b=n;p=m;n=0;m=0;b:while(1){o=Tv(s|0,r|0,k|0,q|0)|0;o=Yv(o|0,L()|0,u|0,v|0)|0;f=L()|0;do if(!((o|0)==0&(f|0)==0&(b&p))){g=t|(g|0)==0;if((f|0)<0&b|p^1){p=Tv(s|0,r|0,n|0,m|0)|0;b=L()|0;o=Tv(n|0,m|0,s|0,r|0)|0;n=L()|0;h=c[A>>2]|0;e=h;o=g?p:o;n=g?b:n;while(1){f=o&255;m=e+1|0;a[e>>0]=f|-128;o=bw(o|0,n|0,7)|0;n=L()|0;if((o|0)==0&(n|0)==0)break;else e=m}a[e>>0]=f&127;n=(c[A>>2]|0)+(m-h)|0;c[A>>2]=n;e=c[y>>2]|0;h=e;f=0;while(1){m=a[h>>0]|0;g=h+1|0;if(!(f<<24>>24|m))break;else{h=g;f=m&128}}o=g;b=o-e|0;ew(n|0,e|0,b|0)|0;c[A>>2]=n+b;c[y>>2]=g;if(g>>>0>=w>>>0){c[y>>2]=0;o=s;f=r;e=k;h=q;n=s;m=r;break}m=a[g>>0]|0;f=m&255;do if(!(f&128)){n=1;m=m&255;f=0}else{b=d[h+2>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=f;f=0;break}b=d[h+3>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=f;f=0;break}b=d[h+4>>0]|0;m=b<<21|f&2097151;if(!(b&128)){n=4;f=0;break}e=28;n=h+5|0;m=m&268435455;f=0;do{b=n;n=n+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,e|0)|0;m=Sv(p|0,L()|0,m|0,f|0)|0;f=L()|0;e=e+7|0}while(e>>>0<64&((b&128|0)!=0|0!=0));n=n-o|0}while(0);c[y>>2]=g+n;e=Tv(0,0,m|0,f|0)|0;o=L()|0;o=Sv((t?m:e)|0,(t?f:o)|0,s|0,r|0)|0;f=L()|0;e=k;h=q;n=s;m=r;break}else{p=Tv(k|0,q|0,n|0,m|0)|0;b=L()|0;o=Tv(n|0,m|0,k|0,q|0)|0;n=L()|0;h=c[A>>2]|0;e=h;o=g?p:o;n=g?b:n;while(1){f=o&255;m=e+1|0;a[e>>0]=f|-128;o=bw(o|0,n|0,7)|0;n=L()|0;if((o|0)==0&(n|0)==0)break;else e=m}a[e>>0]=f&127;n=(c[A>>2]|0)+(m-h)|0;c[A>>2]=n;e=c[z>>2]|0;h=e;f=0;while(1){m=a[h>>0]|0;g=h+1|0;if(!(f<<24>>24|m))break;else{h=g;f=m&128}}o=g;b=o-e|0;ew(n|0,e|0,b|0)|0;c[A>>2]=n+b;c[z>>2]=g;if(g>>>0>=x>>>0){c[z>>2]=0;o=s;f=r;e=k;h=q;n=k;m=q;break}m=a[g>>0]|0;f=m&255;do if(!(f&128)){n=1;m=m&255;f=0}else{b=d[h+2>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=f;f=0;break}b=d[h+3>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=f;f=0;break}b=d[h+4>>0]|0;m=b<<21|f&2097151;if(!(b&128)){n=4;f=0;break}e=28;n=h+5|0;m=m&268435455;f=0;do{b=n;n=n+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,e|0)|0;m=Sv(p|0,L()|0,m|0,f|0)|0;f=L()|0;e=e+7|0}while(e>>>0<64&((b&128|0)!=0|0!=0));n=n-o|0}while(0);c[z>>2]=g+n;o=Tv(0,0,m|0,f|0)|0;e=L()|0;e=Sv((t?m:o)|0,(t?f:e)|0,k|0,q|0)|0;o=s;f=r;h=L()|0;n=k;m=q;break}}else{p=t|(g|0)==0;g=Tv(s|0,r|0,n|0,m|0)|0;b=L()|0;e=Tv(n|0,m|0,s|0,r|0)|0;o=L()|0;m=c[A>>2]|0;f=m;e=p?g:e;o=p?b:o;while(1){n=e&255;h=f+1|0;a[f>>0]=n|-128;e=bw(e|0,o|0,7)|0;o=L()|0;if((e|0)==0&(o|0)==0)break;else f=h}a[f>>0]=n&127;c[A>>2]=(c[A>>2]|0)+(h-m);f=nr(A,y,z)|0;if(f|0)break b;h=c[y>>2]|0;if(h>>>0<w>>>0){m=a[h>>0]|0;f=m&255;do if(!(f&128)){n=1;f=m&255;m=0}else{b=d[h+1>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=0;break}b=d[h+2>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=0;break}b=d[h+3>>0]|0;f=b<<21|f&2097151;if(!(b&128)){n=4;m=0;break}n=28;e=h+4|0;f=f&268435455;m=0;do{b=e;e=e+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,n|0)|0;f=Sv(p|0,L()|0,f|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((b&128|0)!=0|0!=0));n=e-h|0}while(0);c[y>>2]=h+n;g=Tv(0,0,f|0,m|0)|0;o=L()|0;o=Sv((t?f:g)|0,(t?m:o)|0,s|0,r|0)|0;g=L()|0}else{c[y>>2]=0;o=s;g=r}h=c[z>>2]|0;if(h>>>0>=x>>>0){c[z>>2]=0;f=g;e=k;h=q;n=s;m=r;break}m=a[h>>0]|0;f=m&255;do if(!(f&128)){n=1;f=m&255;m=0}else{b=d[h+1>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=0;break}b=d[h+2>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=0;break}b=d[h+3>>0]|0;f=b<<21|f&2097151;if(!(b&128)){n=4;m=0;break}n=28;e=h+4|0;f=f&268435455;m=0;do{b=e;e=e+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,n|0)|0;f=Sv(p|0,L()|0,f|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((b&128|0)!=0|0!=0));n=e-h|0}while(0);c[z>>2]=h+n;h=Tv(0,0,f|0,m|0)|0;e=L()|0;e=Sv((t?f:h)|0,(t?m:e)|0,k|0,q|0)|0;f=g;h=L()|0;n=s;m=r}while(0);b=(c[y>>2]|0)!=0;p=(c[z>>2]|0)!=0;if(!(b|p)){B=104;break a}else{g=1;s=o;r=f;k=e;q=h}}if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{z=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}c[A>>2]=0;l=0;k=0}else B=104;while(0);if((B|0)==104){k=c[A>>2]|0;f=k;B=f;a[B>>0]=0;a[B+1>>0]=0;a[B+2>>0]=0;a[B+3>>0]=0;f=f+4|0;a[f>>0]=0;a[f+1>>0]=0;a[f+2>>0]=0;a[f+3>>0]=0;f=0}c[i>>2]=l;c[j>>2]=k-l;B=f;Ra=C;return B|0}function nr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;g=c[f>>2]|0;p=c[e>>2]|0;h=c[b>>2]|0;a:while(1){r=h;q=p;n=a[q>>0]|0;switch(n<<24>>24){case 0:{if(!(a[g>>0]|0)){i=123;break a}else i=2147483647;break}case 1:{j=a[q+1>>0]|0;i=j&255;if(i&128){y=d[q+2>>0]|0;i=y<<7|j&127;if(y&128){y=d[q+3>>0]|0;i=y<<14|i&16383;if(y&128){y=d[q+4>>0]|0;i=y<<21|i&2097151;if(y&128)i=(a[q+5>>0]&7)<<28|i&268435455}}}if(!i){g=267;i=124;break a}break}default:i=0}o=g;l=a[o>>0]|0;switch(l<<24>>24){case 1:{k=a[o+1>>0]|0;j=k&255;if(j&128){y=d[o+2>>0]|0;j=y<<7|k&127;if(y&128){y=d[o+3>>0]|0;j=y<<14|j&16383;if(y&128){y=d[o+4>>0]|0;j=y<<21|j&2097151;if(y&128)j=(a[o+5>>0]&7)<<28|j&268435455}}}if(!j){g=267;i=124;break a}else m=j;break}case 0:{m=2147483647;break}default:m=0}do if((i|0)!=(m|0))if((i|0)<(m|0)){if(!i){h=0;l=r;i=n}else{l=r+1|0;k=l;m=i;j=((i|0)<0)<<31>>31;while(1){h=m&255;i=k+1|0;a[k>>0]=h|-128;m=bw(m|0,j|0,7)|0;j=L()|0;if((m|0)==0&(j|0)==0)break;else k=i}a[k>>0]=h&127;i=i-l+1|0;a[r>>0]=1;h=i;l=r+i|0;i=a[q+i>>0]|0}j=q+h|0;k=j;i=i<<24>>24;if(!(i&254))h=k;else{h=j;do{h=h+1|0;y=i;i=a[h>>0]|0}while((i&254|y&128|0)!=0)}y=h-k|0;ew(l|0,j|0,y|0)|0;i=h;h=l+y|0;break}else{if(!m){g=0;k=r;h=l}else{k=r+1|0;j=k;l=m;i=((m|0)<0)<<31>>31;while(1){g=l&255;h=j+1|0;a[j>>0]=g|-128;l=bw(l|0,i|0,7)|0;i=L()|0;if((l|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;h=h-k+1|0;a[r>>0]=1;g=h;k=r+h|0;h=a[o+h>>0]|0}i=o+g|0;j=i;h=h<<24>>24;if(!(h&254))g=j;else{g=i;do{g=g+1|0;y=h;h=a[g>>0]|0}while((h&254|y&128|0)!=0)}h=g-j|0;ew(k|0,i|0,h|0)|0;i=p;h=k+h|0;break}else{if(!i){g=0;i=n}else{k=r+1|0;j=k;l=i;i=((i|0)<0)<<31>>31;while(1){g=l&255;h=j+1|0;a[j>>0]=g|-128;l=bw(l|0,i|0,7)|0;i=L()|0;if((l|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;i=h-k+1|0;a[r>>0]=1;g=i;h=r+i|0;i=a[q+i>>0]|0}m=q+g|0;l=m;q=o+g|0;p=q;g=i&255;do if(!(g&128)){j=1;o=i&255;n=0}else{y=d[m+1>>0]|0;g=y<<7|g&127;if(!(y&128)){j=2;o=g;n=0;break}y=d[m+2>>0]|0;g=y<<14|g&16383;if(!(y&128)){j=3;o=g;n=0;break}y=d[m+3>>0]|0;g=y<<21|g&2097151;if(!(y&128)){j=4;o=g;n=0;break}i=28;j=m+4|0;g=g&268435455;k=0;do{y=j;j=j+1|0;y=d[y>>0]|0;x=cw(y&127|0,0,i|0)|0;g=Sv(x|0,L()|0,g|0,k|0)|0;k=L()|0;i=i+7|0}while(i>>>0<64&((y&128|0)!=0|0!=0));j=j-l|0;o=g;n=k}while(0);i=m+j|0;j=a[q>>0]|0;g=j&255;do if(!(g&128)){k=1;j=j&255;l=0}else{y=d[q+1>>0]|0;g=y<<7|g&127;if(!(y&128)){k=2;j=g;l=0;break}y=d[q+2>>0]|0;g=y<<14|g&16383;if(!(y&128)){k=3;j=g;l=0;break}y=d[q+3>>0]|0;g=y<<21|g&2097151;if(!(y&128)){k=4;j=g;l=0;break}j=28;k=q+4|0;g=g&268435455;l=0;do{y=k;k=k+1|0;y=d[y>>0]|0;x=cw(y&127|0,0,j|0)|0;g=Sv(x|0,L()|0,g|0,l|0)|0;l=L()|0;j=j+7|0}while(j>>>0<64&((y&128|0)!=0|0!=0));k=k-p|0;j=g}while(0);g=q+k|0;y=n;x=o;t=j;u=0;v=0;while(1){q=(y|0)<(l|0)|(y|0)==(l|0)&x>>>0<t>>>0;r=q?x:t;s=q?y:l;p=h;m=Tv(r|0,s|0,u|0,v|0)|0;j=p;o=L()|0;while(1){k=m&255;n=j+1|0;a[j>>0]=k|-128;m=bw(m|0,o|0,7)|0;o=L()|0;if((m|0)==0&(o|0)==0)break;else j=n}a[j>>0]=k&127;w=p+(n-h)|0;h=w;u=Sv(r|0,s|0,-2,-1)|0;v=L()|0;do if((x|0)==(t|0)&(y|0)==(l|0)){n=i;k=a[n>>0]|0;if((k&255)>1){j=k&255;do if(!(j&128)){l=1;j=k&255;i=0}else{t=d[n+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;i=0;break}t=d[n+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;i=0;break}t=d[n+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;i=0;break}k=28;l=n+4|0;j=j&268435455;m=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;j=Sv(s|0,L()|0,j|0,m|0)|0;m=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));l=l-i|0;i=m}while(0);m=Sv(x|0,y|0,-2,-1)|0;m=Sv(m|0,L()|0,j|0,i|0)|0;i=n+l|0;p=L()|0}else{m=2147483647;p=0}o=g;k=a[o>>0]|0;if((k&255)>1){j=k&255;do if(!(j&128)){l=1;j=k&255;g=0}else{t=d[o+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;g=0;break}t=d[o+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;g=0;break}t=d[o+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;g=0;break}k=28;l=o+4|0;j=j&268435455;n=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;j=Sv(s|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));l=l-g|0;g=n}while(0);k=Sv(x|0,y|0,-2,-1)|0;k=Sv(k|0,L()|0,j|0,g|0)|0;g=o+l|0;j=p;l=L()|0}else{j=p;k=2147483647;l=0}}else if(q){o=i;k=a[o>>0]|0;if((k&255)<=1){m=2147483647;j=0;k=t;break}j=k&255;do if(!(j&128)){m=1;j=k&255;i=0}else{s=d[o+1>>0]|0;j=s<<7|j&127;if(!(s&128)){m=2;i=0;break}s=d[o+2>>0]|0;j=s<<14|j&16383;if(!(s&128)){m=3;i=0;break}s=d[o+3>>0]|0;j=s<<21|j&2097151;if(!(s&128)){m=4;i=0;break}k=28;m=o+4|0;j=j&268435455;n=0;do{s=m;m=m+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((s&128|0)!=0|0!=0));m=m-i|0;i=n}while(0);k=Sv(x|0,y|0,-2,-1)|0;j=Sv(k|0,L()|0,j|0,i|0)|0;i=o+m|0;m=j;j=L()|0;k=t;break}else{o=g;k=a[o>>0]|0;if((k&255)<=1){m=x;j=y;k=2147483647;l=0;break}j=k&255;do if(!(j&128)){m=1;j=k&255;g=0}else{s=d[o+1>>0]|0;j=s<<7|j&127;if(!(s&128)){m=2;g=0;break}s=d[o+2>>0]|0;j=s<<14|j&16383;if(!(s&128)){m=3;g=0;break}s=d[o+3>>0]|0;j=s<<21|j&2097151;if(!(s&128)){m=4;g=0;break}k=28;m=o+4|0;j=j&268435455;n=0;do{s=m;m=m+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((s&128|0)!=0|0!=0));m=m-g|0;g=n}while(0);k=Sv(t|0,l|0,-2,-1)|0;k=Sv(k|0,L()|0,j|0,g|0)|0;g=o+m|0;m=x;j=y;l=L()|0;break}while(0);if(!((m|0)!=2147483647|(j|0)!=0|((k|0)!=2147483647|(l|0)!=0))){h=w;break}else{y=j;x=m;t=k}}}while(0);p=i}if((i|0)==123){y=h;a[y>>0]=0;c[b>>2]=y+1;c[e>>2]=p+1;c[f>>2]=g+1;f=0;return f|0}else if((i|0)==124)return g|0;return 0}function or(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;j=c[b>>2]|0;k=c[h>>2]|0;n=c[i>>2]|0;m=k;if((a[m>>0]|0)==1){o=m+1|0;l=a[o>>0]|0;k=l&255;if(k&128){D=d[m+2>>0]|0;k=D<<7|l&127;if(D&128){D=d[m+3>>0]|0;k=D<<14|k&16383;if(D&128){D=d[m+4>>0]|0;k=D<<21|k&2097151;if(!(D&128))l=4;else{k=(a[m+5>>0]&7)<<28|k&268435455;l=5}}else l=3}else l=2}else l=1;p=k;k=o+l|0}else p=0;o=n;if((a[o>>0]|0)==1){n=o+1|0;m=a[n>>0]|0;l=m&255;if(l&128){D=d[o+2>>0]|0;l=D<<7|m&127;if(D&128){D=d[o+3>>0]|0;l=D<<14|l&16383;if(D&128){D=d[o+4>>0]|0;l=D<<21|l&2097151;if(!(D&128))m=4;else{l=(a[o+5>>0]&7)<<28|l&268435455;m=5}}else m=3}else m=2}else m=1;n=n+m|0}else l=0;C=((e|0)<0)<<31>>31;D=(f|0)==0;B=(f|0)!=0;A=(g|0)!=0;m=p;a:while(1){b:while(1){while(1){if((m|0)==(l|0))break b;if((m|0)<(l|0))break;l=a[n>>0]|0;o=l<<24>>24;if(o&254)do{n=n+1|0;l=a[n>>0]|0;z=o;o=l<<24>>24}while((o&254|z&128|0)!=0);if(!(l<<24>>24)){l=123;break a}p=n+1|0;o=a[p>>0]|0;l=o&255;if(l&128){z=d[n+2>>0]|0;l=z<<7|o&127;if(z&128){z=d[n+3>>0]|0;l=z<<14|l&16383;if(z&128){z=d[n+4>>0]|0;l=z<<21|l&2097151;if(!(z&128))n=4;else{l=(a[n+5>>0]&7)<<28|l&268435455;n=5}}else n=3}else n=2}else n=1;n=p+n|0}m=a[k>>0]|0;o=m<<24>>24;if(o&254)do{k=k+1|0;m=a[k>>0]|0;z=o;o=m<<24>>24}while((o&254|z&128|0)!=0);if(!(m<<24>>24)){l=124;break a}p=k+1|0;o=a[p>>0]|0;m=o&255;if(m&128){z=d[k+2>>0]|0;m=z<<7|o&127;if(z&128){z=d[k+3>>0]|0;m=z<<14|m&16383;if(z&128){z=d[k+4>>0]|0;m=z<<21|m&2097151;if(!(z&128))k=4;else{m=(a[k+5>>0]&7)<<28|m&268435455;k=5}}else k=3}else k=2}else k=1;k=p+k|0}t=j;if(m){a[t>>0]=1;o=t+1|0;p=m;m=((m|0)<0)<<31>>31;while(1){l=p&255;j=o+1|0;a[o>>0]=l|-128;p=bw(p|0,m|0,7)|0;m=L()|0;if((p|0)==0&(m|0)==0)break;else o=j}a[o>>0]=l&127}f=k;m=a[f>>0]|0;l=m&255;do if(!(l&128)){k=1;l=m&255;p=0}else{z=d[f+1>>0]|0;l=z<<7|l&127;if(!(z&128)){k=2;p=0;break}z=d[f+2>>0]|0;l=z<<14|l&16383;if(!(z&128)){k=3;p=0;break}z=d[f+3>>0]|0;l=z<<21|l&2097151;if(!(z&128)){k=4;p=0;break}m=28;o=f+4|0;l=l&268435455;p=0;do{z=o;o=o+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,m|0)|0;l=Sv(y|0,L()|0,l|0,p|0)|0;p=L()|0;m=m+7|0}while(m>>>0<64&((z&128|0)!=0|0!=0));k=o-k|0}while(0);k=f+k|0;r=Sv(l|0,p|0,-2,-1)|0;s=L()|0;q=n;o=a[q>>0]|0;m=o&255;do if(!(m&128)){n=1;g=0;m=o&255}else{z=d[q+1>>0]|0;m=z<<7|m&127;if(!(z&128)){n=2;g=0;break}z=d[q+2>>0]|0;m=z<<14|m&16383;if(!(z&128)){n=3;g=0;break}z=d[q+3>>0]|0;m=z<<21|m&2097151;if(!(z&128)){n=4;g=0;break}o=28;f=q+4|0;m=m&268435455;g=0;do{z=f;f=f+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,o|0)|0;m=Sv(y|0,L()|0,m|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((z&128|0)!=0|0!=0));n=f-n|0}while(0);n=q+n|0;if((p|0)<0|(p|0)==0&l>>>0<2|((g|0)<0|(g|0)==0&m>>>0<2)){l=120;break}l=Sv(m|0,g|0,-2,-1)|0;f=t;z=r;o=0;p=0;m=L()|0;c:while(1){w=k;u=Sv(z|0,s|0,e|0,C|0)|0;v=L()|0;x=l;y=m;l=p;while(1){if(!((x|0)==(u|0)&(y|0)==(v|0))?(y|0)>(v|0)|(y|0)==(v|0)&x>>>0>u>>>0|(A|((y|0)<(s|0)|(y|0)==(s|0)&x>>>0<=z>>>0)):0){t=f;q=o;r=l}else{q=D?x:z;r=D?y:s;g=j;o=Tv(2,0,o|0,l|0)|0;o=Sv(o|0,L()|0,q|0,r|0)|0;l=g;p=L()|0;while(1){m=o&255;f=l+1|0;a[l>>0]=m|-128;o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else l=f}a[l>>0]=m&127;t=0;j=g+(f-j)|0}if(((y|0)>(s|0)|(y|0)==(s|0)&x>>>0>z>>>0)&(B|((y|0)>(v|0)|(y|0)==(v|0)&x>>>0>u>>>0)))break;g=n;m=a[g>>0]|0;if((m&255)<2)break c;l=m&255;do if(!(l&128)){n=1;l=m&255;m=0}else{f=d[g+1>>0]|0;l=f<<7|l&127;if(!(f&128)){n=2;m=0;break}f=d[g+2>>0]|0;l=f<<14|l&16383;if(!(f&128)){n=3;m=0;break}f=d[g+3>>0]|0;l=f<<21|l&2097151;if(!(f&128)){n=4;m=0;break}o=28;p=g+4|0;l=l&268435455;m=0;do{f=p;p=p+1|0;f=d[f>>0]|0;E=cw(f&127|0,0,o|0)|0;l=Sv(E|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((f&128|0)!=0|0!=0));n=p-n|0}while(0);o=Sv(x|0,y|0,-2,-1)|0;o=Sv(o|0,L()|0,l|0,m|0)|0;f=t;n=g+n|0;x=o;y=L()|0;o=q;l=r}m=a[k>>0]|0;if((m&255)<2)break;l=m&255;do if(!(l&128)){o=1;l=m&255;m=0}else{E=d[k+1>>0]|0;l=E<<7|l&127;if(!(E&128)){o=2;m=0;break}E=d[k+2>>0]|0;l=E<<14|l&16383;if(!(E&128)){o=3;m=0;break}E=d[k+3>>0]|0;l=E<<21|l&2097151;if(!(E&128)){o=4;m=0;break}o=28;p=k+4|0;l=l&268435455;m=0;do{E=p;p=p+1|0;E=d[E>>0]|0;v=cw(E&127|0,0,o|0)|0;l=Sv(v|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((E&128|0)!=0|0!=0));o=p-w|0}while(0);p=Sv(z|0,s|0,-2,-1)|0;p=Sv(p|0,L()|0,l|0,m|0)|0;f=t;k=k+o|0;z=p;s=L()|0;o=q;p=r;l=x;m=y}j=(t|0)==0?j:t;l=a[k>>0]|0;m=l<<24>>24;if(!(m&254))o=l;else{do{k=k+1|0;l=a[k>>0]|0;E=m;m=l<<24>>24}while((m&254|E&128|0)!=0);o=l}l=a[n>>0]|0;m=l<<24>>24;if(m&254)do{n=n+1|0;l=a[n>>0]|0;E=m;m=l<<24>>24}while((m&254|E&128|0)!=0);if(!(o<<24>>24)){l=122;break}if(!(l<<24>>24)){l=121;break}o=k+1|0;l=a[o>>0]|0;m=l&255;if(m&128){E=d[k+2>>0]|0;l=E<<7|l&127;if(E&128){E=d[k+3>>0]|0;l=E<<14|l&16383;if(E&128){E=d[k+4>>0]|0;l=E<<21|l&2097151;if(!(E&128)){m=l;k=4}else{m=(a[k+5>>0]&7)<<28|l&268435455;k=5}}else{m=l;k=3}}else{m=l;k=2}}else k=1;k=o+k|0;p=n+1|0;o=a[p>>0]|0;l=o&255;if(l&128){E=d[n+2>>0]|0;l=E<<7|o&127;if(E&128){E=d[n+3>>0]|0;l=E<<14|l&16383;if(E&128){E=d[n+4>>0]|0;l=E<<21|l&2097151;if(!(E&128))n=4;else{l=(a[n+5>>0]&7)<<28|l&268435455;n=5}}else n=3}else n=2}else n=1;n=p+n|0}l=0;while(1){m=a[n>>0]|0;n=n+1|0;if(!(l<<24>>24|m))break;else l=m&128}l=0;while(1){m=a[k>>0]|0;k=k+1|0;if(!(l<<24>>24|m))break;else l=m&128}c[h>>2]=k;c[i>>2]=n;if((c[b>>2]|0)==(j|0)){E=0;return E|0}a[j>>0]=0;c[b>>2]=j+1;E=1;return E|0}function pr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;z=C+4|0;A=C;B=c[b>>2]|0;a:do if(((e|0)!=0?(a[b+52>>0]|0)==(a[B+235>>0]|0):0)?((c[f+64>>2]|0)+-1|0)>>>0<4:0){v=f+64|0;h=c[v>>2]|0;if((h|0)>0){e=0;g=0;do{if(c[f+72+(e*24|0)+12>>2]|0){y=v;break a}b=c[f+72+(e*24|0)+20>>2]|0;if(b){if(!(c[b+36>>2]|0)){y=v;break a}}else b=0;g=(b|0)==0?g:1;e=e+1|0}while((e|0)<(h|0));if(g){u=c[f+68>>2]|0;u=(u|0)<(c[B+24>>2]|0)?u:-1;t=B+235|0;if((h|0)<=0){B=0;z=1;A=f+40|0;c[A>>2]=z;Ra=C;return B|0}q=0;b:while(1){r=c[f+72+(q*24|0)+20>>2]|0;if(r|0){e=c[f+72+(q*24|0)>>2]|0;g=c[f+72+(q*24|0)+4>>2]|0;h=c[r+4>>2]|0;s=(a[t>>0]|0)==0?157:158;b=eq(B,r,e,g)|0;if(b|0){e=1;k=74;break}do if((h|0)>0){j=c[r>>2]|0;i=0;while(1){b=c[j+(i<<2)>>2]|0;if(!(c[b+40>>2]|0)){k=23;break}o=c[b+60>>2]|0;p=Lu(c[b+64>>2]|0,e,(o|0)>(g|0)?g:o)|0;if(((p|0)==0?o-g|0:p)|0){k=23;break}x=i+1|0;if((x|0)<(h|0))i=x;else{k=22;break}}if((k|0)==22){w=r+8|0;c[w>>2]=x}else if((k|0)==23){b=r+8|0;c[b>>2]=i;if(!i)break;else w=b}p=0;k=j;while(1){o=c[k+(p<<2)>>2]|0;if((a[t>>0]|0)!=0?(c[o+56>>2]|0)!=0:0){a[z>>0]=0;m=o+88|0;n=m;c[n>>2]=0;c[n+4>>2]=0;n=o+84|0;c[n>>2]=0;kq(0,c[o+72>>2]|0,c[o+76>>2]|0,o+80|0,m,n,z)}else{l=o+72|0;j=o+40|0;m=o+52|0;b=c[m>>2]|0;c:do if(b|0){k=(c[l>>2]|0)+10|0;n=o+48|0;i=o+44|0;e=c[n>>2]|0;h=b;while(1){b=c[j>>2]|0;if((k-b|0)<=(e|0))break c;g=(c[i>>2]|0)-e|0;g=(g|0)<4096?g:4096;b=jd(h,b+e|0,g,e,81)|0;if(b|0){e=1;k=74;break b}b=(c[n>>2]|0)+g|0;c[n>>2]=b;b=(c[j>>2]|0)+b|0;e=b+20|0;do{a[b>>0]=0;b=b+1|0}while((b|0)<(e|0));e=c[n>>2]|0;h=c[m>>2]|0;if((e|0)==(c[i>>2]|0))break;if(!h)break c}d:do if(h|0){b=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;do if(b|0){if(c[b+480>>2]|0){Xd(b,h);break d}e=h;if((c[b+304>>2]|0)>>>0>e>>>0)break;if((c[b+308>>2]|0)>>>0<=e>>>0)break;k=b+300|0;c[h>>2]=c[k>>2];c[k>>2]=h;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{k=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[m>>2]=0;c[n>>2]=0}while(0);j=c[l>>2]|0;i=o+88|0;b=a[j>>0]|0;e=b&255;do if(!(e&128)){n=i;c[n>>2]=b&255;c[n+4>>2]=0;b=1}else{n=d[j+1>>0]|0;b=n<<7|e&127;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=2;break}n=d[j+2>>0]|0;b=n<<14|b&16383;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=3;break}n=d[j+3>>0]|0;b=n<<21|b&2097151;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=4;break}g=28;h=j+4|0;b=b&268435455;e=0;do{n=h;h=h+1|0;n=d[n>>0]|0;m=cw(n&127|0,0,g|0)|0;b=Sv(m|0,L()|0,b|0,e|0)|0;e=L()|0;g=g+7|0}while(g>>>0<64&((n&128|0)!=0|0!=0));n=i;c[n>>2]=b;c[n+4>>2]=e;b=h-j|0}while(0);c[o+80>>2]=j+b}b=p+1|0;k=c[r>>2]|0;if((b|0)>=(c[w>>2]|0))break;else p=b}if(p|0){g=p;do{h=g;g=g+-1|0;e:do if((h|0)<=(p|0)){b=g;j=c[k+(g<<2)>>2]|0;do{e=b;b=b+1|0;i=k+(b<<2)|0;if((Xa[s&255](j,c[i>>2]|0)|0)<0)break e;o=k+(e<<2)|0;n=c[i>>2]|0;j=c[o>>2]|0;c[i>>2]=j;c[o>>2]=n}while((b|0)<(p|0))}while(0)}while((h|0)>1)}}else c[r+8>>2]=0;while(0);c[r+24>>2]=u}q=q+1|0;if((q|0)>=(c[v>>2]|0)){b=0;e=1;k=74;break}}if((k|0)==74){B=f+40|0;c[B>>2]=e;Ra=C;return b|0}}else y=v}else y=v}else k=4;while(0);if((k|0)==4)y=f+64|0;g=f+68|0;e=0;while(1){if((e|0)>=(c[y>>2]|0)){b=0;e=0;k=74;break}if(!(c[f+72+(e*24|0)+20>>2]|0))b=0;else{c[z>>2]=0;c[A>>2]=0;b=jr(B,f+72+(e*24|0)|0,c[g>>2]|0,z,A)|0;if(!b)b=kr(B,f,e,c[A>>2]|0,c[z>>2]|0)|0}if(!b)e=e+1|0;else{e=0;k=74;break}}if((k|0)==74){B=f+40|0;c[B>>2]=e;Ra=C;return b|0}return 0}function qr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+112|0;B=F+108|0;x=F;y=F+104|0;z=F+100|0;A=F+96|0;if(c[e>>2]|0){Ra=F;return}h=b+52|0;q=a[h>>0]|0;a[d+33>>0]=1;switch(c[d>>2]|0){case 3:case 1:{n=c[d+12>>2]|0;m=c[d+16>>2]|0;if(a[n+34>>0]|0){qr(b,m,e);D=m+24|0;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=a[m+32>>0]|0;Ra=F;return}D=(a[m+34>>0]|0)==0;qr(b,n,e);if(!D){D=n+24|0;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=a[n+32>>0]|0;Ra=F;return}qr(b,m,e);o=n+32|0;a:do if(!(a[o>>0]|0)){l=m+32|0;h=q<<24>>24==0;g=h?1:-1;h=h?0:-1;f=n+24|0;i=m+24|0;while(1){j=a[l>>0]|0;if(j<<24>>24)break;if(c[e>>2]|0)break;k=f;D=i;D=Tv(c[k>>2]|0,c[k+4>>2]|0,c[D>>2]|0,c[D+4>>2]|0)|0;D=Yv(D|0,L()|0,g|0,h|0)|0;k=L()|0;if((D|0)==0&(k|0)==0)break;if((k|0)<0)qr(b,n,e);else qr(b,m,e);if(a[o>>0]|0){E=17;break a}}C=f;D=c[C+4>>2]|0;f=d+24|0;c[f>>2]=c[C>>2];c[f+4>>2]=D;f=j<<24>>24!=0&1}else{f=n+24|0;E=17}while(0);if((E|0)==17){D=f;E=c[D+4>>2]|0;f=d+24|0;c[f>>2]=c[D>>2];c[f+4>>2]=E;f=1}a[d+32>>0]=f;if(f<<24>>24==0|(c[d>>2]|0)!=1){Ra=F;return}f=c[m+20>>2]|0;b:do if(c[f>>2]|0?(r=m+32|0,(c[e>>2]|0)==0):0){g=f+28|0;f=f+32|0;do{if(a[r>>0]|0)break b;gw(c[g>>2]|0,0,c[f>>2]|0)|0;qr(b,m,e)}while(!(c[e>>2]|0))}while(0);f=c[n+20>>2]|0;if(!f){Ra=F;return}if(!(c[f>>2]|0)){Ra=F;return}if(c[e>>2]|0){Ra=F;return}g=f+28|0;f=f+32|0;while(1){if(a[o>>0]|0){E=120;break}gw(c[g>>2]|0,0,c[f>>2]|0)|0;qr(b,n,e);if(c[e>>2]|0){E=120;break}}if((E|0)==120){Ra=F;return}break}case 4:{h=c[d+12>>2]|0;i=c[d+16>>2]|0;m=q<<24>>24==0;l=m?1:-1;m=m?0:-1;k=h+24|0;g=k;j=i+24|0;f=j;f=Tv(c[g>>2]|0,c[g+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;f=Yv(f|0,L()|0,l|0,m|0)|0;g=L()|0;n=i+32|0;o=h+32|0;do if((a[n>>0]|0)==0?(p=a[o>>0]|0,!((g|0)<0&p<<24>>24==0)):0)if((g|0)>0|(g|0)==0&f>>>0>0|p<<24>>24!=0){qr(b,i,e);break}else{qr(b,h,e);qr(b,i,e);break}else E=33;while(0);if((E|0)==33)qr(b,h,e);if(!(a[o>>0]|0))f=0;else f=(a[n>>0]|0)!=0&1;a[d+32>>0]=f;i=j;h=c[i>>2]|0;i=c[i+4>>2]|0;g=k;f=c[g>>2]|0;g=c[g+4>>2]|0;if((a[n>>0]|0)==0?(e=Tv(f|0,g|0,h|0,i|0)|0,Yv(e|0,L()|0,l|0,m|0)|0,e=L()|0,!((a[o>>0]|0)==0&(e|0)<0)):0){d=d+24|0;c[d>>2]=h;c[d+4>>2]=i;Ra=F;return}d=d+24|0;c[d>>2]=f;c[d+4>>2]=g;Ra=F;return}case 2:{g=c[d+12>>2]|0;k=c[d+16>>2]|0;if(!(a[k+33>>0]|0))qr(b,k,e);qr(b,g,e);l=g+32|0;f=a[l>>0]|0;if(!(f<<24>>24)){j=k+32|0;i=q<<24>>24==0;h=i?1:-1;i=i?0:-1;g=g+24|0;if(!(c[e>>2]|0)){f=k+24|0;do{if(a[j>>0]|0)break;D=g;E=f;E=Tv(c[D>>2]|0,c[D+4>>2]|0,c[E>>2]|0,c[E+4>>2]|0)|0;E=Yv(E|0,L()|0,h|0,i|0)|0;D=L()|0;if(!((D|0)>0|(D|0)==0&E>>>0>0))break;qr(b,k,e)}while(!(c[e>>2]|0));f=a[l>>0]|0}else f=0}else g=g+24|0;D=g;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=f;Ra=F;return}default:{D=c[d+20>>2]|0;u=D+24|0;w=D+28|0;do if(c[u>>2]|0?(f=c[w>>2]|0,f|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{C=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;v=D+32|0;c[v>>2]=0;c[u>>2]=0;C=d+32|0;t=c[b>>2]|0;do if(!(c[D+40>>2]|0)){E=a[t+235>>0]|0;f=E&255;if((a[h>>0]|0)!=E<<24>>24?(g=c[D+4>>2]|0,g|0):0){E=D+8|0;kq(f,c[D>>2]|0,g,E,D+16|0,v,C);c[w>>2]=c[E>>2];f=0;break}sr(t,D,C);f=0}else{a[B>>0]=0;s=D+64|0;do if((c[s>>2]|0)==1){f=tr(t,c[D+92>>2]|0,D+16|0,w,v)|0;if(!(c[w>>2]|0)){a[B>>0]=1;g=1;E=113}else{g=0;E=113}}else{h=a[h>>0]|0;f=x;g=f+96|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));r=D+44|0;b=D+16|0;q=h<<24>>24==0;p=q?1:-1;q=q?0:-1;f=0;while(1){c:do if(!f){g=c[s>>2]|0;if((g|0)>0){k=0;l=0;i=0;j=0;while(1){g=x+(l*24|0)|0;do if((c[r>>2]|0)!=(l|0)){f=c[D+72+(l*24|0)+20>>2]|0;if(!f){c[g>>2]=1;f=0;break}E=x+(l*24|0)+16|0;f=tr(t,f,x+(l*24|0)+8|0,E,x+(l*24|0)+20|0)|0;if(!(c[E>>2]|0))a[B>>0]=1}else{sr(t,D,B);c[x+(l*24|0)+16>>2]=c[w>>2];c[x+(l*24|0)+20>>2]=c[v>>2];o=b;E=c[o+4>>2]|0;f=x+(l*24|0)+8|0;c[f>>2]=c[o>>2];c[f+4>>2]=E;f=0}while(0);do if(!(c[g>>2]|0)){h=x+(l*24|0)+8|0;g=c[h>>2]|0;h=c[h+4>>2]|0;if(k|0?(E=Tv(i|0,j|0,g|0,h|0)|0,Yv(E|0,L()|0,p|0,q|0)|0,(L()|0)>=0):0)break;k=1;i=g;j=h}while(0);if(f|0)break;l=l+1|0;g=a[B>>0]|0;h=c[s>>2]|0;if(!(g<<24>>24==0&(l|0)<(h|0))){f=0;E=81;break c}}g=a[B>>0]|0;E=80}else{f=0;i=0;j=0}}else{g=0;i=0;j=0;E=80}while(0);if((E|0)==80){h=c[s>>2]|0;E=81}if((E|0)==81){E=0;if((h|0)>0){m=0;k=g;o=g;l=g;while(1){if(k<<24>>24==0&(f|0)==0){g=o;while(1){f=x+(m*24|0)|0;if(c[f>>2]|0){h=m;f=0;m=l;k=0;break}k=x+(m*24|0)+8|0;o=k;o=Tv(c[o>>2]|0,c[o+4>>2]|0,i|0,j|0)|0;Yv(o|0,L()|0,p|0,q|0)|0;if((L()|0)>=0){h=m;f=0;m=l;k=0;break}do if((c[r>>2]|0)==(m|0)){sr(t,D,B);c[x+(m*24|0)+16>>2]=c[w>>2];c[x+(m*24|0)+20>>2]=c[v>>2];l=b;f=c[l+4>>2]|0;g=k;c[g>>2]=c[l>>2];c[g+4>>2]=f;g=a[B>>0]|0;f=0;l=g}else{h=c[D+72+(m*24|0)+20>>2]|0;if(!h){c[f>>2]=1;f=0;break}o=x+(m*24|0)+16|0;f=tr(t,h,k,o,x+(m*24|0)+20|0)|0;if(c[o>>2]|0)break;a[B>>0]=1;l=1;g=1}while(0);o=k;k=c[o>>2]|0;o=c[o+4>>2]|0;n=Tv(k|0,o|0,i|0,j|0)|0;n=Yv(n|0,L()|0,p|0,q|0)|0;h=L()|0;n=(h|0)>0|(h|0)==0&n>>>0>0;h=n?0:m;i=n?k:i;j=n?o:j;if(l<<24>>24==0&(f|0)==0){m=h;l=0}else{m=l;k=l;break}}n=h;h=c[s>>2]|0;l=m}else{n=m;g=o}m=n+1|0;if((m|0)>=(h|0))break;else o=g}}if(!(g<<24>>24))g=h;else break}g=c[x+((g+-1|0)*24|0)+20>>2]|0;n=nb(g+8|0)|0;if(!n){E=112;break}ew(n|0,c[x+(((c[s>>2]|0)+-1|0)*24|0)+16>>2]|0,g+1|0)|0;g=n+g|0;o=g;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;g=g+4|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;g=c[s>>2]|0;d:do if((g|0)>1){l=n;k=0;h=0;m=g+-1|0;while(1){if(!(c[x+(h*24|0)>>2]|0)){c[y>>2]=c[x+(h*24|0)+16>>2];c[z>>2]=n;c[A>>2]=n;o=(or(A,m-h|0,0,1,y,z)|0)==0;if(o)break;k=(c[A>>2]|0)-l|0;g=c[s>>2]|0}h=h+1|0;m=g+-1|0;if((m|0)<=(h|0))break d}g=c[s>>2]|0}else{k=0;h=0}while(0);if((h|0)==(g+-1|0)){E=110;break}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{o=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}}if((E|0)==110){g=b;c[g>>2]=i;c[g+4>>2]=j;c[w>>2]=n;c[v>>2]=k;c[u>>2]=1;g=0}else if((E|0)==112){f=7;break}E=113}while(0);if((E|0)==113)a[C>>0]=g}while(0);c[e>>2]=f;E=D+16|0;e=c[E+4>>2]|0;d=d+24|0;c[d>>2]=c[E>>2];c[d+4>>2]=e;Ra=F;return}}}function rr(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;I=Ra;Ra=Ra+32|0;y=I+24|0;F=I+20|0;z=I+16|0;A=I+12|0;B=I+8|0;C=I+4|0;H=I;g=c[f>>2]|0;c[H>>2]=g;if(g|0){f=0;H=g;H=(H|0)==0;H=f&H;H=H&1;Ra=I;return H|0}G=d+28|0;if(c[G>>2]|0?(x=ur(0,d)|0,c[H>>2]=x,(x|0)==0):0){c[F>>2]=0;a:do if(c[G>>2]|0){g=c[d>>2]|0;t=c[g+36>>2]|0;h=c[t>>2]|0;u=d+12|0;v=Oc(c[u>>2]|0,0)|0;w=L()|0;x=g+24|0;i=c[x>>2]|0;if((i|0)>0){q=g+32|0;r=d+20|0;s=h+20|0;p=h+16|0;n=0;h=i;while(1){if(!(a[(c[q>>2]|0)+n>>0]|0)){j=c[u>>2]|0;o=n+1|0;i=(j|0)==0;do if(i)g=29576;else{g=c[j+120>>2]|0;if(g|0?o>>>0<(e[j+144>>1]|0)>>>0:0){g=g+(o*40|0)|0;break}g=c[j>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0)k=c[g+16>>2]|0;else if(!(h&1))k=Gg(g,1)|0;else k=0;if(!i){h=c[j>>2]|0;i=j+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g}h=c[r>>2]|0;i=c[t>>2]|0;c[y>>2]=0;g=Za[c[i+12>>2]&127](t,k,-1,y)|0;do if(!g){c[c[y>>2]>>2]=t;if((c[i>>2]|0)>0?(D=Xa[c[i+24>>2]&255](c[y>>2]|0,h)|0,D|0):0){Wa[c[i+16>>2]&127](c[y>>2]|0)|0;c[y>>2]=0;g=D;h=0;E=29;break}h=c[y>>2]|0;c[F>>2]=0;m=h;do{c[z>>2]=0;c[A>>2]=0;c[B>>2]=0;c[C>>2]=0;g=$a[c[s>>2]&127](m,y,z,A,B,C)|0;c[F>>2]=g;i=c[G>>2]|0;if((g|0)==0&(i|0)!=0){g=0;do{l=c[i>>2]|0;k=c[i+4>>2]|0;do if((k|0)==(n|0)?1:(k|0)>=(c[x>>2]|0)){j=c[C>>2]|0;if(!((c[l+12>>2]|0)==0|(j|0)==0)){j=0;break}k=c[l+4>>2]|0;J=c[z>>2]|0;if((k|0)!=(J|0)?!((k|0)<(J|0)&(c[l+8>>2]|0)!=0):0){j=0;break}if(Lu(c[y>>2]|0,c[l>>2]|0,k)|0){j=0;break}wr(i+12|0,v,w,n,0,j,((j|0)<0)<<31>>31,F)|0;j=c[F>>2]|0;g=j}else j=0;while(0);i=c[i+8>>2]|0}while((j|0)==0&(i|0)!=0)}}while(!(g|0))}else{h=c[y>>2]|0;E=29}while(0);if((E|0)==29){E=0;c[F>>2]=g}if(h|0)Wa[c[p>>2]&127](h)|0;if((g|0)!=101)break a;c[F>>2]=0;g=o;h=c[x>>2]|0}else g=n+1|0;if((g|0)<(h|0))n=g;else break}}g=c[G>>2]|0;if(g){i=g;g=0;do{h=i+12|0;if(!(c[h>>2]|0))h=0;else{g=xr(h,0,0)|0;c[F>>2]=g;h=g}i=c[i+8>>2]|0}while((h|0)==0&(i|0)!=0)}else g=0}else g=0;while(0);c[H>>2]=g}j=(vr(d,c[d+16>>2]|0,H)|0)==0;g=c[G>>2]|0;if(g|0)do{h=g+12|0;i=c[h>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{J=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0;g=c[g+8>>2]|0}while((g|0)!=0);J=c[H>>2]|0;c[f>>2]=J;H=j;J=(J|0)==0;J=H&J;J=J&1;Ra=I;return J|0}function sr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=c[e>>2]|0;n=k+(c[e+4>>2]|0)|0;o=e+8|0;l=c[o>>2]|0;m=(l|0)==0;l=m?k:l;k=l;if(l>>>0>=n>>>0){o=1;a[f>>0]=o;return}h=a[l>>0]|0;g=h&255;do if(!(g&128)){i=1;g=h&255;h=0}else{j=d[l+1>>0]|0;g=j<<7|g&127;if(!(j&128)){i=2;h=0;break}j=d[l+2>>0]|0;g=j<<14|g&16383;if(!(j&128)){i=3;h=0;break}j=d[l+3>>0]|0;g=j<<21|g&2097151;if(!(j&128)){i=4;h=0;break}i=28;j=l+4|0;g=g&268435455;h=0;do{p=j;j=j+1|0;p=d[p>>0]|0;q=cw(p&127|0,0,i|0)|0;g=Sv(q|0,L()|0,g|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((p&128|0)!=0|0!=0));i=j-k|0}while(0);q=l+i|0;j=q;b=m|(a[b+235>>0]|0)==0;m=e+16|0;k=m;i=c[k>>2]|0;k=c[k+4>>2]|0;l=Tv(0,0,g|0,h|0)|0;p=L()|0;p=Sv(i|0,k|0,(b?g:l)|0,(b?h:p)|0)|0;h=L()|0;g=m;c[g>>2]=p;c[g+4>>2]=h;c[e+28>>2]=j;g=q;h=0;while(1){i=a[g>>0]|0;g=g+1|0;if(!(h<<24>>24|i))break;else h=i&128}c[e+32>>2]=g-j;a:do if(g>>>0<n>>>0)do{if(a[g>>0]|0)break a;g=g+1|0}while(g>>>0<n>>>0);while(0);c[o>>2]=g;q=0;a[f>>0]=q;return}function tr(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+16|0;y=D+4|0;z=D;A=c[e+8>>2]|0;B=c[e>>2]|0;t=(a[b+235>>0]|0)==0?157:158;if(!A){c[g>>2]=0;C=0;Ra=D;return C|0}i=c[B>>2]|0;a:do if(c[i+80>>2]|0){u=(A|0)>1;v=A+-1|0;w=e+24|0;x=e+20|0;s=e+16|0;while(1){r=i+88|0;q=c[r>>2]|0;r=c[r+4>>2]|0;i=jq(b,i,y,z)|0;k=(i|0)==0;b:do if(k&u){j=1;while(1){i=c[B+(j<<2)>>2]|0;if(!(c[i+80>>2]|0)){i=j;break b}p=i+88|0;if(!((c[p>>2]|0)==(q|0)?(c[p+4>>2]|0)==(r|0):0)){i=j;break b}i=jq(b,i,0,0)|0;j=j+1|0;k=(i|0)==0;if(!(k&(j|0)<(A|0))){C=11;break}}}else{j=1;C=11}while(0);if((C|0)==11){C=0;if(k)i=j;else{C=45;break}}o=c[e>>2]|0;i=i+(((i|0)==(A|0))<<31>>31)|0;if((i|0)>0)do{l=i;i=i+-1|0;c:do if((l|0)<(A|0)){j=i;n=c[o+(i<<2)>>2]|0;do{k=j;j=j+1|0;m=o+(j<<2)|0;if((Xa[t&255](n,c[m>>2]|0)|0)<0)break c;p=o+(k<<2)|0;k=c[m>>2]|0;n=c[p>>2]|0;c[m>>2]=n;c[p>>2]=k}while((j|0)<(v|0))}while(0)}while((l|0)>1);i=c[z>>2]|0;if((i|0)>0?c[(c[B>>2]|0)+56>>2]|0:0){l=c[y>>2]|0;m=i+1|0;if((c[x>>2]|0)>(i|0))j=c[s>>2]|0;else{j=m<<1;c[x>>2]=j;k=c[s>>2]|0;if(mb()|0){i=7;C=45;break}j=sb(k,(j|0)>0?j:0,0)|0;if(!j){i=7;C=45;break}c[s>>2]=j}ew(j|0,l|0,m|0)|0;c[y>>2]=c[s>>2]}o=c[w>>2]|0;if((o|0)>-1){k=c[y>>2]|0;p=k+i|0;j=k;n=i;m=0;while(1){d:do if(j>>>0<p>>>0){l=0;i=j;while(1){j=a[i>>0]|0;if(!(j&254|l)){l=i;break d}i=i+1|0;if(i>>>0<p>>>0)l=j&128;else{l=i;break}}}else l=j;while(0);i=l-k|0;if((m|0)==(o|0))break;n=n-i|0;if(!n){k=l;i=0;break}k=l+1|0;j=a[k>>0]|0;i=j&255;if(i&128){m=d[l+2>>0]|0;i=m<<7|j&127;if(m&128){m=d[l+3>>0]|0;i=m<<14|i&16383;if(m&128){m=d[l+4>>0]|0;i=m<<21|i&2097151;if(!(m&128))j=4;else{i=(a[l+5>>0]&7)<<28|i&268435455;j=5}}else j=3}else j=2}else j=1;j=k+j|0;k=l;m=i}j=k+i|0;if((j|0)!=(p|0))gw(j|0,0,p-j|0)|0;c[y>>2]=k;c[z>>2]=i}if((i|0)>0){C=46;break}if(!(c[(c[c[e>>2]>>2]|0)+80>>2]|0))break a;i=c[B>>2]|0}if((C|0)==45){C=i;Ra=D;return C|0}else if((C|0)==46){c[g>>2]=c[y>>2];C=f;c[C>>2]=q;c[C+4>>2]=r;c[h>>2]=i;C=0;Ra=D;return C|0}}while(0);c[g>>2]=0;C=0;Ra=D;return C|0}function ur(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;i=m;k=e+7|0;if(!(a[k>>0]|0)){d=0;Ra=m;return d|0}l=e+12|0;f=c[l>>2]|0;do if(!f){h=c[e>>2]|0;g=h+216|0;f=c[g>>2]|0;if(!f){c[i>>2]=c[h+220>>2];f=Bb(54912,i)|0;if(!f){h=7;break}h=qd(c[h+12>>2]|0,f,-1,129,0,l,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(h|0)break;f=c[l>>2]|0}else{c[l>>2]=f;c[g>>2]=0}a[e+8>>0]=1;j=13}else j=13;while(0);a:do if((j|0)==13){i=e+32|0;h=c[i>>2]|0;i=c[i+4>>2]|0;do if(!(Vc(f,1)|0)){f=c[f+100>>2]|0;g=f+8|0;if(!(b[g>>1]&9216)){j=f;c[j>>2]=h;c[j+4>>2]=i;b[g>>1]=4;break}else{Pg(f,h,i);break}}while(0);a[k>>0]=0;if((Gc(c[l>>2]|0)|0)==100){d=0;Ra=m;return d|0}f=c[l>>2]|0;do if(f|0){g=c[f>>2]|0;l=f+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(g,f);h=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;l=f+64|0;c[l>>2]=0;c[l+4>>2]=0;if(!((h|0)==3082|(a[g+81>>0]|0)!=0)){f=c[g+68>>2]&h;if(!f)break;else{h=f;break a}}else{og(g);h=7;break a}}while(0);if(!(c[(c[e>>2]|0)+40>>2]|0)){a[e+6>>0]=1;h=267;break}else{d=0;Ra=m;return d|0}}while(0);if(!((d|0)!=0&(h|0)!=0)){d=h;Ra=m;return d|0}c[d+20>>2]=h;g=c[d>>2]|0;if(!(b[g+8>>1]&1)){d=h;Ra=m;return d|0}switch(h|0){case 516:{f=50738;break}case 100:{f=50760;break}case 101:{f=50782;break}default:{f=h&255;if(f>>>0<29?(520028155>>>f&1|0)!=0:0)f=c[22960+(f<<2)>>2]|0;else f=50724}}yc(g,f,-1,1,0)|0;d=h;Ra=m;return d|0}function vr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;u=Ra;Ra=Ra+16|0;s=u+8|0;t=u+4|0;p=u;if(c[e>>2]|0){t=1;t=t&1;Ra=u;return t|0}switch(c[d>>2]|0){case 3:case 1:{k=d+12|0;do if(vr(b,c[k>>2]|0,e)|0?(l=d+16|0,vr(b,c[l>>2]|0,e)|0):0){if(c[e>>2]|0){t=1;t=t&1;Ra=u;return t|0}if((c[d>>2]|0)!=1){t=1;t=t&1;Ra=u;return t|0}r=c[d+8>>2]|0;if(r|0?(c[r>>2]|0)==1:0){t=1;t=t&1;Ra=u;return t|0}f=c[k>>2]|0;if(!f){f=d;h=0;g=0}else{h=d;j=0;g=0;while(1){h=c[(c[(c[h+16>>2]|0)+20>>2]|0)+32>>2]|0;h=Sv(j|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;g=L()|0;i=c[f+12>>2]|0;if(!i)break;else{r=f;j=h;f=i;h=r}}}i=f+20|0;r=c[(c[i>>2]|0)+32>>2]|0;h=Sv(h|0,g|0,r|0,((r|0)<0)<<31>>31|0)|0;h=cw(h|0,L()|0,1)|0;h=pb(h,L()|0)|0;if(!h){c[e>>2]=7;break}g=c[i>>2]|0;c[s>>2]=c[g+28>>2];c[t>>2]=c[g+64>>2];g=c[f+8>>2]|0;a:do if(!g)f=1;else{f=1;do{if((c[g>>2]|0)!=1)break a;f=yr(c[g+4>>2]|0,h,s,t,c[(c[g+16>>2]|0)+20>>2]|0)|0;g=c[g+8>>2]|0}while((f|0)!=0&(g|0)!=0)}while(0);g=c[(c[l>>2]|0)+20>>2]|0;c[s>>2]=c[g+28>>2];c[t>>2]=c[g+64>>2];g=c[k>>2]|0;if((f|0)!=0&(g|0)!=0)do{if((c[g>>2]|0)==1)f=c[g+16>>2]|0;else f=g;f=yr(c[(c[g+8>>2]|0)+4>>2]|0,h,s,t,c[f+20>>2]|0)|0;g=c[g+12>>2]|0}while((f|0)!=0&(g|0)!=0);if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}if(f|0){t=1;t=t&1;Ra=u;return t|0}}while(0);if((c[d>>2]|0)!=1){t=0;t=t&1;Ra=u;return t|0}t=c[d+8>>2]|0;if(t|0?(c[t>>2]|0)==1:0){t=0;t=t&1;Ra=u;return t|0}g=c[d+20>>2]|0;i=b+32|0;if(!g){h=d;while(1){d=c[h+16>>2]|0;s=d+24|0;t=i;if((c[s>>2]|0)==(c[t>>2]|0)?(c[s+4>>2]|0)==(c[t+4>>2]|0):0){f=c[d+20>>2]|0;g=f+24|0;d=f+28|0;do if(c[g>>2]|0?(n=c[d>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{t=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);c[d>>2]=0;c[f+32>>2]=0;c[g>>2]=0}d=c[h+12>>2]|0;g=c[d+20>>2]|0;if(!g)h=d;else break}}s=d+24|0;t=i;if(!((c[s>>2]|0)==(c[t>>2]|0)?(c[s+4>>2]|0)==(c[t+4>>2]|0):0)){t=0;t=t&1;Ra=u;return t|0}f=g+24|0;d=g+28|0;do if(c[f>>2]|0?(o=c[d>>2]|0,o|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[d>>2]=0;c[g+32>>2]=0;c[f>>2]=0;t=0;t=t&1;Ra=u;return t|0}case 4:{t=vr(b,c[d+12>>2]|0,e)|0;t=(vr(b,c[d+16>>2]|0,e)|0|t|0)!=0;t=t&1;Ra=u;return t|0}case 2:{if(!(vr(b,c[d+12>>2]|0,e)|0)){t=0;t=t&1;Ra=u;return t|0}t=(vr(b,c[d+16>>2]|0,e)|0)==0;t=t&1;Ra=u;return t|0}default:{do if(c[b+28>>2]|0){q=d+24|0;n=q;r=b+32|0;o=r;f=a[d+34>>0]|0;if((c[n>>2]|0)==(c[o>>2]|0)?(c[n+4>>2]|0)==(c[o+4>>2]|0):0){d=c[d+20>>2]|0;if(!(f<<24>>24))g=d;else{g=d;m=55}}else{if(!(f<<24>>24))break;g=c[d+20>>2]|0;m=55}if((m|0)==55){f=g+24|0;d=g+28|0;do if(c[f>>2]|0?(h=c[d>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{o=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[d>>2]=0;c[g+32>>2]=0;c[f>>2]=0}n=g+64|0;b:do if((c[n>>2]|0)>0){d=g+28|0;o=g+32|0;m=0;b=0;h=0;j=-1;while(1){f=c[g+72+(m*24|0)+16>>2]|0;if(f){h=f+12|0;f=c[h>>2]|0;if(!f){m=66;break}l=nb(c[f>>2]|0)|0;if(!l){f=7;break b}i=c[h>>2]|0;k=c[i+4>>2]|0;if((a[k>>0]|0)<=-1)if((a[k+1>>0]|0)<=-1)if((a[k+2>>0]|0)<=-1)if((a[k+3>>0]|0)>-1)h=4;else{f=28;h=k+4|0;do{v=h;h=h+1|0;f=f+7|0}while(f>>>0<64&(a[v>>0]|0)<0);h=h-k|0}else h=3;else h=2;else h=1;i=(c[i>>2]|0)-h|0;f=l;ew(l|0,k+h|0,i|0)|0;if(!b){j=m;k=l}else{c[s>>2]=f;c[t>>2]=b;c[p>>2]=f;or(s,m-j|0,0,1,t,p)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{v=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}f=(c[s>>2]|0)-f|0;if(!f){m=85;break}j=m;k=l;i=f}}else{k=b;i=h}m=m+1|0;if((m|0)>=(c[n>>2]|0)){m=90;break}else{b=k;h=i}}if((m|0)==66){do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{v=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[d>>2]=0;c[o>>2]=0;f=0;break}else if((m|0)==85){if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{v=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}c[d>>2]=0;c[o>>2]=0;f=0;break}else if((m|0)==90){if((j|0)<=-1){f=0;break}f=c[g+44>>2]|0;if((f|0)<0){c[d>>2]=k;c[o>>2]=i;t=r;v=c[t+4>>2]|0;f=g+16|0;c[f>>2]=c[t>>2];c[f+4>>2]=v;c[g+24>>2]=1;f=0;break}if((f|0)>(j|0)){c[s>>2]=k;c[t>>2]=c[d>>2];h=f-j|0}else{c[s>>2]=c[d>>2];c[t>>2]=k;h=j-f|0}f=nb(i+8|0)|0;c[p>>2]=f;if(!f){do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{v=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);f=7;break}c[d>>2]=f;if(!(or(p,h,0,1,s,t)|0)){f=c[p>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[d>>2]=0;f=0}else{c[g+24>>2]=1;f=(c[p>>2]|0)-(c[d>>2]|0)|0}c[o>>2]=f;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{v=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);f=0;break}}else{f=0;d=g+28|0}while(0);c[e>>2]=f;v=(c[d>>2]|0)!=0;e=r;s=c[e+4>>2]|0;t=q;c[t>>2]=c[e>>2];c[t+4>>2]=s;v=v&1;Ra=u;return v|0}while(0);if(a[d+32>>0]|0){v=0;v=v&1;Ra=u;return v|0}t=d+24|0;v=b+32|0;v=(c[t>>2]|0)==(c[v>>2]|0)?(c[t+4>>2]|0)==(c[v+4>>2]|0):0;v=v&1;Ra=u;return v|0}}return 0}function wr(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;m=n;j=c[a>>2]|0;c[m>>2]=j;if(j){l=j+16|0;k=c[l>>2]|0;l=c[l+4>>2]|0;if((k|0)==(b|0)&(l|0)==(d|0))l=6;else{l=Tv(b|0,d|0,k|0,l|0)|0;k=L()|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=4}}else{j=b;k=d;l=4}if((l|0)==4){j=xr(m,j,k)|0;if(!j){j=c[m>>2]|0;l=j+24|0;c[l>>2]=-1;c[l+4>>2]=-1;l=j+32|0;c[l>>2]=0;c[l+4>>2]=0;l=j+16|0;c[l>>2]=b;c[l+4>>2]=d;l=6}}do if((l|0)==6){if((f|0)>0|(f|0)==0&e>>>0>0){d=j+24|0;if(!((c[d>>2]|0)==(e|0)?(c[d+4>>2]|0)==(f|0):0)){j=xr(m,1,0)|0;if(j|0)break;j=xr(m,e,f)|0;if(j|0)break;j=c[m>>2]|0;d=j+24|0;c[d>>2]=e;c[d+4>>2]=f;f=j+32|0;c[f>>2]=0;c[f+4>>2]=0}}else if(!((f|0)>-1|(f|0)==-1&e>>>0>4294967295)){j=0;break}e=Sv(g|0,h|0,2,0)|0;f=L()|0;j=j+32|0;j=Tv(e|0,f|0,c[j>>2]|0,c[j+4>>2]|0)|0;j=xr(m,j,L()|0)|0;if(!j){j=(c[m>>2]|0)+32|0;c[j>>2]=g;c[j+4>>2]=h;j=0}}while(0);c[i>>2]=j;j=c[m>>2]|0;if((j|0)==(c[a>>2]|0)){a=0;Ra=n;return a|0}c[a>>2]=j;a=1;Ra=n;return a|0}function xr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=c[b>>2]|0;do if(f){g=c[f+8>>2]|0;if(((c[f>>2]|0)+11|0)>(g|0)){g=g<<1;h=g+40|0;if((mb()|0)==0?(i=sb(f,(h|0)>0?h:0,0)|0,i|0):0){c[i+8>>2]=g;c[i+4>>2]=i+40;f=i;break}f=c[b>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[b>>2]=0;b=7;return b|0}}else{if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](140)|0;if(!f){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](140)|0;if((c[14985]|0)>>>0<140)c[14985]=140;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){l=c[14978]|0;k=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=l>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){b=7;return b|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}c[f+8>>2]=100;c[f+4>>2]=f+40;c[f>>2]=0}while(0);k=f+4|0;l=(c[k>>2]|0)+(c[f>>2]|0)|0;j=l;i=e;while(1){g=d&255;h=j+1|0;a[j>>0]=g|-128;d=bw(d|0,i|0,7)|0;i=L()|0;if((d|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;e=(c[f>>2]|0)+(h-l)|0;c[f>>2]=e;a[(c[k>>2]|0)+e>>0]=0;c[b>>2]=f;b=0;return b|0}function yr(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+32|0;l=r+20|0;k=r+16|0;h=r+12|0;m=r+8|0;i=r+4|0;p=r;q=g+64|0;t=(c[q>>2]|0)+b|0;b=(c[f>>2]|0)+b|0;o=g+28|0;n=c[o>>2]|0;c[p>>2]=n;c[i>>2]=n;c[l>>2]=d;s=c[e>>2]|0;j=d;c[k>>2]=j;or(k,t,0,0,e,i)|0;k=c[k>>2]|0;c[h>>2]=k;c[m>>2]=k;c[e>>2]=s;c[i>>2]=n;or(h,b,1,0,i,e)|0;i=k;b=(c[h>>2]|0)==(i|0);do if((i|0)==(d|0))if(b)b=0;else{b=d;h=0;while(1){i=a[b>>0]|0;b=b+1|0;if(!(h<<24>>24|i))break;else h=i&128}t=b-k|0;ew(n|0,d|0,t|0)|0;c[p>>2]=n+t;c[m>>2]=b;b=1}else{if(!b){nr(p,l,m)|0;b=1;break}b=d;h=0;while(1){i=a[b>>0]|0;b=b+1|0;if(!(h<<24>>24|i))break;else h=i&128}t=b-j|0;ew(n|0,d|0,t|0)|0;c[p>>2]=n+t;c[l>>2]=b;b=1}while(0);if(!b){Ra=r;return b|0}d=c[o>>2]|0;s=(c[p>>2]|0)-d+-1|0;t=g+32|0;gw(d+s|0,0,(c[t>>2]|0)-s|0)|0;c[t>>2]=s;c[e>>2]=c[o>>2];c[f>>2]=c[q>>2];Ra=r;return b|0}function zr(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;w=x+8|0;t=x;v=x+4|0;c[v>>2]=f;c[w>>2]=f;i=cq(d,7,t,w)|0;s=c[t>>2]|0;a:do if(!i){b:do if((Gc(s)|0)==100){if(!(c[d+44>>2]|0))r=0;else r=Nc(s,(c[d+24>>2]|0)+1|0)|0;j=Oc(s,0)|0;k=L()|0;l=d+272|0;i=l;f=c[i>>2]|0;i=c[i+4>>2]|0;do if(!((i|0)>(k|0)|(i|0)==(k|0)&f>>>0>j>>>0)){if((f|0)==(j|0)&(i|0)==(k|0)?(c[d+284>>2]|0)==0:0){u=10;break}f=d+280|0;if((c[f>>2]|0)==(r|0)?(c[d+264>>2]|0)<=(c[d+260>>2]|0):0)u=12;else u=10}else u=10;while(0);if((u|0)==10){f=Sr(d)|0;if(!f){f=d+280|0;u=12}}if((u|0)==12){q=l;c[q>>2]=j;c[q+4>>2]=k;c[f>>2]=r;c[d+284>>2]=1;q=d+24|0;p=d+32|0;m=s+120|0;n=s+144|0;o=s+40|0;if(!s){f=c[q>>2]|0;if((f|0)<1){i=0;f=1;break a}k=c[p>>2]|0;j=1;while(1){i=j+-1|0;if(!(a[k+i>>0]|0)){c[h+(i<<2)>>2]=0;f=c[q>>2]|0}if((j|0)<(f|0))j=j+1|0;else{f=1;break b}}}l=1;while(1){if((l|0)>(c[q>>2]|0)){f=1;break b}k=l+-1|0;if(!(a[(c[p>>2]|0)+k>>0]|0)){f=c[m>>2]|0;if((f|0)!=0?l>>>0<(e[n>>1]|0)>>>0:0)f=f+(l*40|0)|0;else{f=c[s>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}i=b[f+8>>1]|0;if((i&514)==514?(a[f+10>>0]|0)==1:0)j=c[f+16>>2]|0;else if(!(i&1))j=Gg(f,1)|0;else j=0;f=c[s>>2]|0;i=c[o>>2]|0;if((i|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&i;c[o>>2]=f;f=Mr(d,r,j,-1,h+(k<<2)|0)|0;j=Lc(s,l)|0;k=h+(c[q>>2]<<2)|0;c[k>>2]=(c[k>>2]|0)+j}else f=0;if(!f)l=l+1|0;else break}}if(!s){i=f;f=0;break a}i=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(i,s);r=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if(!((r|0)==3082|(a[i+81>>0]|0)!=0)){i=f;f=0;break a}og(i);i=f;f=0;break a}else f=0;while(0);if(s){i=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(i,s);j=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}else i=0}else if(s){f=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(f,s);r=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if((r|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=0}else f=0}else f=0;while(0);if(!((i|0)==0&(f|0)!=0)){w=i;Ra=x;return w|0}c[w>>2]=c[v>>2];l=d+40|0;c:do if(!(c[l>>2]|0)){f=cq(d,1,t,w)|0;do if(!f){f=c[t>>2]|0;if((Gc(f)|0)==100)k=Nc(f,0)|0;else k=0;if(!f){f=k;u=61;break c}i=c[f>>2]|0;t=f+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;t=f+64|0;c[t>>2]=0;c[t+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}f=c[i+68>>2]&j;if(!f){f=k;break c}Ra=x;return f|0}while(0);w=f;Ra=x;return w|0}else{f=0;u=61}while(0);if(f|0){w=Lr(d,1)|0;c[g>>2]=0;gw(h|0,0,(c[d+24>>2]<<3)+8|0)|0;Ra=x;return w|0}c[g>>2]=(c[g>>2]|0)+-1;if(!(c[l>>2]|0)){f=cq(d,0,w,v)|0;do if(!f){f=c[w>>2]|0;Gc(f)|0;if(f){i=c[f>>2]|0;h=f+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;h=f+64|0;c[h>>2]=0;c[h+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}else{f=c[i+68>>2]&j;break}}else f=0}while(0)}else f=0;if(!(a[d+234>>0]|0)){w=f;Ra=x;return w|0}do if(!f){f=cq(d,19,w,v)|0;if(!f){f=c[w>>2]|0;Gc(f)|0;if(f){i=c[f>>2]|0;w=f+136|0;v=c[w+4>>2]|0;if((v|0)>0|(v|0)==0&(c[w>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;w=f+64|0;c[w>>2]=0;c[w+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}else{f=c[i+68>>2]&j;break}}else f=0}}while(0);w=f;Ra=x;return w|0}function Ar(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;q=s;if(c[d+40>>2]|0){k=c[f+((c[d+24>>2]|0)+3<<2)>>2]|0;i=b[k+8>>1]|0;j=i&31;if(-1431655766>>>j&1){k=c[f+4>>2]|0;i=b[k+8>>1]|0;j=i&31}if(!(1347440720>>>j&1)){h=19;Ra=s;return h|0}i=i&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[k>>3])|0;j=L()|0;break}if(!(i&18)){i=0;j=0}else{i=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;j=L()|0}}else{j=k;i=c[j>>2]|0;j=c[j+4>>2]|0}while(0);c[h>>2]=i;c[h+4>>2]=j;h=0;Ra=s;return h|0}r=f+4|0;i=cq(d,18,q,r)|0;if(i|0){h=i;Ra=s;return h|0}do if(c[d+44>>2]|0){n=c[q>>2]|0;i=d+24|0;o=c[i>>2]|0;l=o+2|0;j=c[f+(o+4<<2)>>2]|0;k=e[j+8>>1]|0;do if(!(k&4)){if(k&8|0){m=Mg(+g[j>>3])|0;L()|0;break}if(!(k&18))m=0;else{m=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;L()|0}}else m=c[j>>2]|0;while(0);p=((m|0)<0)<<31>>31;j=Vc(n,l)|0;if(j|0){h=j;Ra=s;return h|0}n=c[n+100>>2]|0;k=o+1|0;j=n+(k*40|0)|0;k=n+(k*40|0)+8|0;if(!(b[k>>1]&9216)){o=j;c[o>>2]=m;c[o+4>>2]=p;b[k>>1]=4;break}else{Pg(j,m,p);break}}else i=d+24|0;while(0);i=c[f+((c[i>>2]|0)+3<<2)>>2]|0;if(!(-1431655766>>>(b[i+8>>1]&31)&1)){if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0?(-1431655766>>>(b[(c[r>>2]|0)+8>>1]&31)&1|0)==0:0){h=1;Ra=s;return h|0}j=c[q>>2]|0;i=Yc(j,1,i)|0;if(i){h=i;Ra=s;return h|0}}else j=c[q>>2]|0;Gc(j)|0;do if(j){i=c[j>>2]|0;f=j+136|0;r=c[f+4>>2]|0;if((r|0)>0|(r|0)==0&(c[f>>2]|0)>>>0>0)hc(i,j);k=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;f=j+64|0;c[f>>2]=0;c[f+4>>2]=0;if((k|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&k;break}}else i=0;while(0);f=(c[d+12>>2]|0)+40|0;d=c[f+4>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=d;h=i;Ra=s;return h|0}function Br(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;p=t;q=t+8|0;if(c[d>>2]|0){Ra=t;return}g=e+24|0;s=c[g>>2]|0;s=Yv(s|0,((s|0)<0)<<31>>31|0,10,0)|0;s=pb(s,L()|0)|0;a:do if(s){o=c[g>>2]|0;if((o|0)>0){n=0;g=0;do{i=s+g|0;h=i;k=c[f+(n<<2)>>2]|0;m=0;while(1){j=k&255;l=h+1|0;a[h>>0]=j|-128;k=bw(k|0,m|0,7)|0;m=L()|0;if((k|0)==0&(m|0)==0)break;else h=l}a[h>>0]=j&127;g=g-i+l|0;n=n+1|0}while((n|0)!=(o|0));m=g}else m=0;i=e+136|0;h=c[i>>2]|0;c[q>>2]=h;do if(!h){h=c[e+20>>2]|0;c[p>>2]=c[e+16>>2];c[p+4>>2]=h;h=Bb(52323,p)|0;if(h){g=qd(c[e+12>>2]|0,h,-1,133,0,q,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[q>>2]|0;c[i>>2]=h;if(!g)break}else g=7;if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break a}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break a}}while(0);l=h;i=e+272|0;g=c[i>>2]|0;i=c[i+4>>2]|0;do if(!(Vc(l,1)|0)){j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){e=j;c[e>>2]=g;c[e+4>>2]=i;b[k>>1]=4;break}else{Pg(j,g,i);break}}while(0);if(Vc(l,2)|0){do if(90!=-1)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);Gc(l)|0;if(!h){g=0;break}}else{g=yc((c[l+100>>2]|0)+40|0,s,m,0,90)|0;if(g|0?(r=c[l>>2]|0,c[r+64>>2]=g,Ne(r,g),r=c[l>>2]|0,(g|0)==3082|(a[r+81>>0]|0)!=0):0)og(r);Gc(l)|0}g=c[l>>2]|0;s=l+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(g,l);h=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;s=l+64|0;c[s>>2]=0;c[s+4>>2]=0;if((h|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7;break}else{g=c[g+68>>2]&h;break}}else g=7;while(0);c[d>>2]=g;Ra=t;return}function Cr(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;D=Ra;Ra=Ra+32|0;x=D+8|0;k=D;y=D+16|0;u=f+24|0;v=c[u>>2]|0;w=v+2|0;if(c[e>>2]|0){Ra=D;return}C=Yv(w|0,((w|0)<0)<<31>>31|0,14,0)|0;C=pb(C,L()|0)|0;if(!C){c[e>>2]=7;Ra=D;return}z=C+(w<<2)|0;l=f+144|0;j=c[l>>2]|0;c[y>>2]=j;do if(!j){t=c[f+20>>2]|0;c[k>>2]=c[f+16>>2];c[k+4>>2]=t;k=Bb(52411,k)|0;if(k){j=qd(c[f+12>>2]|0,k,-1,133,0,y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[y>>2]|0;c[l>>2]=k;if(!j)break}else j=7;if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{B=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}else k=j;while(0);t=k;do if(!(Vc(t,1)|0)){j=c[t+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){s=j;c[s>>2]=0;c[s+4>>2]=0;b[l>>1]=4;break}else{Pg(j,0,0);break}}while(0);if((Gc(t)|0)==100){if(!k)n=mc(29576)|0;else{j=c[t+120>>2]|0;if((j|0)!=0?(b[t+144>>1]|0)!=0:0)l=t;else{j=c[t>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;l=t}n=mc(j)|0;j=c[l>>2]|0;m=t+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j}s=Lc(t,0)|0;if(((s|0)!=0?(a[n+(s+-1)>>0]|0)>-1:0)?(v|0)>-2&(s|0)>0:0){j=0;r=0;do{q=n+r|0;l=d[q>>0]|0;if(l&128){p=d[q+1>>0]|0;l=p<<7|l&127;if(p&128){p=d[q+2>>0]|0;l=p<<14|l&16383;if(p&128){p=d[q+3>>0]|0;l=p<<21|l&2097151;if(!(p&128))m=4;else{o=28;p=q+4|0;l=l&268435455;m=0;do{E=p;p=p+1|0;E=d[E>>0]|0;F=cw(E&127|0,0,o|0)|0;l=Sv(F|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((E&128|0)!=0|0!=0));m=p-q|0}}else m=3}else m=2}else m=1;r=m+r|0;c[C+(j<<2)>>2]=l;j=j+1|0}while((j|0)<(w|0)&(r|0)<(s|0))}else j=0;if((w|0)>(j|0))gw(C+(j<<2)|0,0,w-j<<2|0)|0}else gw(C|0,0,w<<2|0)|0;do if(k|0){j=c[t>>2]|0;F=t+136|0;E=c[F+4>>2]|0;if((E|0)>0|(E|0)==0&(c[F>>2]|0)>>>0>0)hc(j,t);k=kc(t)|0;c[t+20>>2]=770837923;c[t+36>>2]=-1;c[t+40>>2]=0;a[t+146>>0]=2;c[t+44>>2]=0;c[t+32>>2]=1;a[t+147>>0]=-1;c[t+48>>2]=0;F=t+64|0;c[F>>2]=0;c[F+4>>2]=0;if(!((k|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&k;if(!j)break}else{og(j);j=7}if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}while(0);k=c[C>>2]|0;k=(i|0)<0&k>>>0<(0-i|0)>>>0?0:k+i|0;c[C>>2]=k;if((c[u>>2]|0)>=0){j=0;do{F=j;j=j+1|0;E=C+(j<<2)|0;t=(c[g+(F<<2)>>2]|0)+(c[E>>2]|0)|0;i=c[h+(F<<2)>>2]|0;c[E>>2]=t>>>0<i>>>0?0:t-i|0}while((F|0)<(c[u>>2]|0))}a:do if((v|0)>-2){q=0;j=0;while(1){p=z+j|0;o=p;n=0;while(1){l=k&255;m=o+1|0;a[o>>0]=l|-128;k=bw(k|0,n|0,7)|0;n=L()|0;if((k|0)==0&(n|0)==0)break;else o=m}a[o>>0]=l&127;j=j-p+m|0;k=q+1|0;if((k|0)==(w|0)){n=j;break a}q=k;k=c[C+(k<<2)>>2]|0}}else n=0;while(0);l=f+148|0;k=c[l>>2]|0;c[y>>2]=k;do if(!k){k=c[f+20>>2]|0;c[x>>2]=c[f+16>>2];c[x+4>>2]=k;k=Bb(52453,x)|0;if(k){j=qd(c[f+12>>2]|0,k,-1,133,0,y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{F=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[y>>2]|0;c[l>>2]=k;if(!j)break}else j=7;if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}while(0);m=k;do if(!(Vc(m,1)|0)){j=c[m+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){F=j;c[F>>2]=0;c[F+4>>2]=0;b[l>>1]=4;break}else{Pg(j,0,0);break}}while(0);if((z|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;if(!k)j=0;else B=87}else{j=yc((c[m+100>>2]|0)+40|0,z,n,0,0)|0;if(j|0?(A=c[m>>2]|0,c[A+64>>2]=j,Ne(A,j),A=c[m>>2]|0,(j|0)==3082|(a[A+81>>0]|0)!=0):0)og(A);Gc(m)|0;B=87}do if((B|0)==87){j=c[m>>2]|0;F=m+136|0;E=c[F+4>>2]|0;if((E|0)>0|(E|0)==0&(c[F>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;F=m+64|0;c[F>>2]=0;c[F+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}while(0);c[e>>2]=j;Vc(m,2)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](C);Ra=D;return}else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C);Ra=D;return}}function Dr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+16|0;g=m;h=m+8|0;j=d+164|0;f=c[j>>2]|0;c[h>>2]=f;do if(!f){f=c[d+20>>2]|0;c[g>>2]=c[d+16>>2];c[g+4>>2]=f;f=Bb(52546,g)|0;if(!f){j=0;i=7;break}i=qd(c[d+12>>2]|0,f,-1,133,0,h,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}f=c[h>>2]|0;c[j>>2]=f;if(!i)k=9;else j=0}else k=9;while(0);if((k|0)==9){l=f;g=c[d+280>>2]|0;h=((g|0)<0)<<31>>31;do if(!(Vc(l,1)|0)){i=c[l+100>>2]|0;j=i+8|0;if(!(b[j>>1]&9216)){k=i;c[k>>2]=g;c[k+4>>2]=h;b[j>>1]=4;break}else{Pg(i,g,h);break}}while(0);k=d+252|0;g=c[k>>2]|0;h=((g|0)<0)<<31>>31;do if(!(Vc(l,2)|0)){j=c[l+100>>2]|0;i=j+40|0;j=j+48|0;if(!(b[j>>1]&9216)){c[i>>2]=g;c[i+4>>2]=h;b[j>>1]=4;break}else{Pg(i,g,h);break}}while(0);if((Gc(l)|0)==100){g=0;h=0;while(1){j=Nc(l,0)|0;a:do if(!g){i=0;while(1){if((i|0)>=(c[k>>2]|0)){g=0;break a}g=Er(d,j,i,-2)|0;n=(g|0)==101;g=n?0:g;h=n?1:h;if(!g)i=i+1|0;else break}}while(0);if((Gc(l)|0)!=100){i=g;break}}}else{h=0;i=0}do if(f){f=c[l>>2]|0;n=l+136|0;k=c[n+4>>2]|0;if((k|0)>0|(k|0)==0&(c[n>>2]|0)>>>0>0)hc(f,l);g=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;n=l+64|0;c[n>>2]=0;c[n+4>>2]=0;if((g|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7;break}else{f=c[f+68>>2]&g;break}}else f=0;while(0);j=h;i=(i|0)==0?f:i}f=d+248|0;g=c[f>>2]|0;if(!g){c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}n=g;if((c[h+304>>2]|0)>>>0<=n>>>0?(c[h+308>>2]|0)>>>0>n>>>0:0){n=h+300|0;c[g>>2]=c[n>>2];c[n>>2]=g;c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}else{n=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}return 0}function Er(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ca=Ra;Ra=Ra+128|0;R=ca+40|0;Q=ca+32|0;P=ca+24|0;O=ca+16|0;w=ca+8|0;i=ca;S=ca+120|0;x=ca+104|0;aa=ca+48|0;h=aa;j=h+56|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));h=Xp(d,e,f,g,0,0,1,0,aa)|0;ba=aa+4|0;a:do if(!h){q=c[ba>>2]|0;if(!q){h=0;j=c[aa>>2]|0;i=aa;Z=264;break}N=(g|0)!=-1;if(N){j=d+116|0;h=c[j>>2]|0;c[S>>2]=h;if(!h){Y=c[d+20>>2]|0;c[i>>2]=c[d+16>>2];c[i+4>>2]=Y;i=Bb(52072,i)|0;if(!i){h=7;Z=237;break}h=qd(c[d+12>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{Y=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[S>>2]|0;c[j>>2]=i;if(!h)h=i;else{Z=237;break}}n=h;o=d+252|0;i=c[o>>2]|0;p=((e|0)<0)<<31>>31;i=Yv(i|0,((i|0)<0)<<31>>31|0,e|0,p|0)|0;m=((f|0)<0)<<31>>31;i=Sv(i|0,L()|0,f|0,m|0)|0;i=cw(i|0,L()|0,10)|0;j=L()|0;do if(!(Vc(n,1)|0)){k=c[n+100>>2]|0;l=k+8|0;if(!(b[l>>1]&9216)){Y=k;c[Y>>2]=i;c[Y+4>>2]=j;b[l>>1]=4;break}else{Pg(k,i,j);break}}while(0);j=c[o>>2]|0;j=Yv(j|0,((j|0)<0)<<31>>31|0,e|0,p|0)|0;j=Sv(j|0,L()|0,f|0,m|0)|0;j=cw(j|0,L()|0,10)|0;i=L()|0;j=j|1023;do if(!(Vc(n,2)|0)){l=c[n+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){Y=k;c[Y>>2]=j;c[Y+4>>2]=i;b[l>>1]=4;break}else{Pg(k,j,i);break}}while(0);if((Gc(n)|0)==100){k=Oc(n,0)|0;j=L()|0}else{k=0;j=0}do if(h|0){i=c[n>>2]|0;Y=n+136|0;X=c[Y+4>>2]|0;if((X|0)>0|(X|0)==0&(c[Y>>2]|0)>>>0>0)hc(i,n);h=kc(n)|0;c[n+20>>2]=770837923;c[n+36>>2]=-1;c[n+40>>2]=0;a[n+146>>0]=2;c[n+44>>2]=0;c[n+32>>2]=1;a[n+147>>0]=-1;c[n+48>>2]=0;Y=n+64|0;c[Y>>2]=0;c[Y+4>>2]=0;if(!((h|0)==3082|(a[i+81>>0]|0)!=0)){h=c[i+68>>2]&h;if(!h)break;else{Z=237;break a}}else{og(i);h=7;Z=237;break a}}while(0);if((g|0)==-2){if((q|0)==1?(c[(c[c[aa>>2]>>2]|0)+56>>2]|0)==0:0){h=101;Z=237;break};c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;W=0;Y=k;X=j;V=j;U=k;K=1;i=3;h=x+12|0}else{q=e;n=p;p=f;u=j;v=k;Z=33}}else{o=d+252|0;q=e;n=((e|0)<0)<<31>>31;p=f;m=((f|0)<0)<<31>>31;u=0;v=0;Z=33}do if((Z|0)==33){r=g+1|0;s=c[o>>2]|0;s=Yv(q|0,n|0,s|0,((s|0)<0)<<31>>31|0)|0;s=Sv(s|0,L()|0,p|0,m|0)|0;s=cw(s|0,L()|0,10)|0;j=((r|0)<0)<<31>>31;s=Sv(s|0,L()|0,r|0,j|0)|0;t=L()|0;k=d+88|0;l=c[k>>2]|0;c[S>>2]=l;if(!l){i=c[d+20>>2]|0;c[w>>2]=c[d+16>>2];c[w+4>>2]=i;i=Bb(51533,w)|0;if(!i){h=7;Z=237;break a}h=qd(c[d+12>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{Y=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}l=c[S>>2]|0;c[k>>2]=l;if(h|0){Z=237;break a}k=c[o>>2]|0;k=Yv(q|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;k=Sv(k|0,L()|0,p|0,m|0)|0;k=cw(k|0,L()|0,10)|0;j=Sv(k|0,L()|0,r|0,j|0)|0;k=L()|0}else{j=s;k=t}m=l;do if(!(Vc(m,1)|0)){h=c[m+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){Y=h;c[Y>>2]=j;c[Y+4>>2]=k;b[i>>1]=4;break}else{Pg(h,j,k);break}}while(0);if((Gc(m)|0)==100)j=Nc(m,0)|0;else j=0;do if(l|0){h=c[m>>2]|0;Y=m+136|0;X=c[Y+4>>2]|0;if((X|0)>0|(X|0)==0&(c[Y>>2]|0)>>>0>0)hc(h,m);i=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;Y=m+64|0;c[Y>>2]=0;c[Y+4>>2]=0;if(!((i|0)==3082|(a[h+81>>0]|0)!=0)){h=c[h+68>>2]&i;if(!h)break;else{Z=237;break a}}else{og(h);h=7;Z=237;break a}}while(0);if((j|0)>15){h=Er(d,e,f,r)|0;if(!h){i=N&((t|0)>(u|0)|(t|0)==(u|0)&s>>>0>v>>>0);h=0;Z=59}else{Z=237;break a}}else if(N){i=(t|0)>(u|0)|(t|0)==(u|0)&s>>>0>v>>>0;h=j;Z=59}else{c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;h=j;j=x+12|0}if((Z|0)==59){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;j=x+12|0;if(i){W=h;Y=s;X=t;V=u;U=v;K=0;i=3;h=j;break}}W=h;Y=s;X=t;V=u;U=v;K=0;i=1;h=j}while(0);c[h>>2]=i;c[aa+12>>2]=x;h=eq(d,aa,0,0)|0;if(!h){C=aa+40|0;D=aa+44|0;E=aa+48|0;F=aa+52|0;G=d+228|0;H=d+96|0;I=d+16|0;J=d+20|0;M=d+12|0;T=d+52|0;i=0;j=0;b:while(1){h=gq(d,aa)|0;switch(h|0){case 0:{Z=130;break b}case 100:break;default:{Z=223;break b}}A=c[C>>2]|0;B=c[D>>2]|0;y=c[E>>2]|0;z=c[F>>2]|0;if(!i){if(mb()|0){h=7;Z=237;break a}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](64)|0;if(!h){h=7;Z=237;break a}else l=h}else{h=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){x=c[14978]|0;w=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=x>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(!i){h=7;Z=237;break a}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=i}else l=i}h=l;j=h+64|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));x=nb(c[G>>2]|0)|0;c[l+48>>2]=x;if(!x){Z=222;break}c[l+40>>2]=c[G>>2];h=c[H>>2]|0;c[S>>2]=h;if(!h){i=c[J>>2]|0;c[O>>2]=c[I>>2];c[O+4>>2]=i;i=Bb(51657,O)|0;if(!i){Z=81;break}h=qd(c[M>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{x=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[S>>2]|0;c[H>>2]=i;if(!h)h=i;else{Z=224;break}}j=h;if((Gc(j)|0)==100){v=Oc(j,0)|0;w=L()|0;x=l+16|0;c[x>>2]=v;c[x+4>>2]=w;x=l+8|0;c[x>>2]=v;c[x+4>>2]=w}if(h){h=c[j>>2]|0;x=j+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(h,j);i=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;x=j+64|0;c[x>>2]=0;c[x+4>>2]=0;if((i|0)==3082|(a[h+81>>0]|0)!=0){Z=92;break}h=c[h+68>>2]&i;if(h){Z=225;break}else{i=l;j=l}}else{i=l;j=l}}v=i+44|0;q=c[v>>2]|0;w=i+24|0;k=c[w>>2]|0;x=i+28|0;l=c[x>>2]|0;c:do if((l|0)>0){h=0;while(1){if((a[k+h>>0]|0)!=(a[A+h>>0]|0)){o=h;break c}h=h+1|0;if((h|0)>=(l|0)){o=h;break}}}else o=0;while(0);p=B-o|0;if((p|0)<1){h=267;Z=223;break}n=0;h=o;k=((o|0)<0)<<31>>31;do{n=n+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));m=0;h=p;k=((p|0)<0)<<31>>31;do{m=m+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));u=((z|0)<0)<<31>>31;h=0;k=z;l=u;do{h=h+1|0;k=bw(k|0,l|0,7)|0;l=L()|0}while(!((k|0)==0&(l|0)==0));h=p+z+n+m+h|0;if((q|0)>0?(h+q|0)>(c[G>>2]|0):0){s=i+16|0;h=s;t=c[h>>2]|0;h=c[h+4>>2]|0;p=Sv(t|0,h|0,1,0)|0;r=L()|0;c[s>>2]=p;c[s+4>>2]=r;h=Hr(d,t,h,c[i+48>>2]|0,q)|0;if(h|0){k=i;break}c[T>>2]=(c[T>>2]|0)+1;h=Ir(d,i,A,o+1|0)|0;if(h|0){k=i;break}c[x>>2]=0;m=0;h=B;k=((B|0)<0)<<31>>31;while(1){h=bw(h|0,k|0,7)|0;k=L()|0;if((h|0)==0&(k|0)==0)break;else m=m+1|0}l=0;h=z;k=u;do{l=l+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));s=0;q=0;l=B+2+z+m+l|0;r=B}else{s=o;l=h;r=p}k=i+56|0;h=k;h=Sv(c[h>>2]|0,c[h+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;t=L()|0;c[k>>2]=h;c[k+4>>2]=t;k=i+40|0;t=i+48|0;h=c[t>>2]|0;if((l|0)>(c[k>>2]|0)){if(mb()|0){k=i;h=7;break}h=sb(h,(l|0)>0?l:0,0)|0;if(!h){k=i;h=7;break}c[t>>2]=h;c[k>>2]=l}k=h+q|0;h=k;m=s;o=((s|0)<0)<<31>>31;while(1){l=m&255;n=h+1|0;a[h>>0]=l|-128;m=bw(m|0,o|0,7)|0;o=L()|0;if((m|0)==0&(o|0)==0)break;else h=n}a[h>>0]=l&127;k=n-k+q|0;l=(c[t>>2]|0)+k|0;h=l;n=r;p=((r|0)<0)<<31>>31;while(1){m=n&255;o=h+1|0;a[h>>0]=m|-128;n=bw(n|0,p|0,7)|0;p=L()|0;if((n|0)==0&(p|0)==0)break;else h=o}a[h>>0]=m&127;n=o-l+k|0;ew((c[t>>2]|0)+n|0,A+s|0,r|0)|0;n=n+r|0;o=(c[t>>2]|0)+n|0;m=o;p=z;l=u;while(1){h=p&255;k=m+1|0;a[m>>0]=h|-128;p=bw(p|0,l|0,7)|0;l=L()|0;if((p|0)==0&(l|0)==0)break;else m=k}a[m>>0]=h&127;k=k-o+n|0;ew((c[t>>2]|0)+k|0,y|0,z|0)|0;c[v>>2]=k+z;k=i+32|0;if((c[k>>2]|0)<(B|0)){l=i+36|0;h=c[l>>2]|0;m=B<<1;if(mb()|0){k=i;h=7;break}h=sb(h,(m|0)>0?m:0,0)|0;if(!h){k=i;h=7;break}c[k>>2]=m;c[l>>2]=h;c[w>>2]=h}else h=c[w>>2]|0;ew(h|0,A|0,B|0)|0;c[x>>2]=B}d:do if((Z|0)==81){k=l;h=7;j=l}else if((Z|0)==92){og(h);k=l;h=7;j=l}else if((Z|0)==130){if(N){s=c[aa>>2]|0;t=c[ba>>2]|0;do if((t|0)>0){r=d+124|0;q=0;e:while(1){p=c[s+(q<<2)>>2]|0;m=p+8|0;l=m;h=c[l>>2]|0;l=c[l+4>>2]|0;do if((h|0)==0&(l|0)==0)h=0;else{k=c[r>>2]|0;c[S>>2]=k;if(!k){k=c[J>>2]|0;c[P>>2]=c[I>>2];c[P+4>>2]=k;k=Bb(52181,P)|0;if(!k){Z=137;break e}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{Z=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[r>>2]=k;if(h|0){Z=223;break d}l=m;h=c[l>>2]|0;l=c[l+4>>2]|0}o=k;do if(!(Vc(o,1)|0)){m=c[o+100>>2]|0;n=m+8|0;if(!(b[n>>1]&9216)){Z=m;c[Z>>2]=h;c[Z+4>>2]=l;b[n>>1]=4;break}else{Pg(m,h,l);break}}while(0);m=p+24|0;l=c[m>>2]|0;m=c[m+4>>2]|0;if(Vc(o,2)|0){Gc(o)|0;if(!k){h=0;break}}else{k=c[o+100>>2]|0;h=k+40|0;k=k+48|0;if(!(b[k>>1]&9216)){Z=h;c[Z>>2]=l;c[Z+4>>2]=m;b[k>>1]=4}else Pg(h,l,m);Gc(o)|0}k=c[o>>2]|0;Z=o+136|0;O=c[Z+4>>2]|0;if((O|0)>0|(O|0)==0&(c[Z>>2]|0)>>>0>0)hc(k,o);h=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;Z=o+64|0;c[Z>>2]=0;c[Z+4>>2]=0;if((h|0)==3082|(a[k+81>>0]|0)!=0){Z=156;break e}h=c[k+68>>2]&h}while(0);q=q+1|0;k=(h|0)==0;if(!((q|0)<(t|0)&k)){Z=159;break}}if((Z|0)==137){h=7;Z=223;break d}else if((Z|0)==156){og(k);h=7;Z=223;break d}else if((Z|0)==159)if(k)break;else{Z=223;break d}}while(0);do if(K){l=d+160|0;h=c[l>>2]|0;c[S>>2]=h;if(!h){k=c[J>>2]|0;c[Q>>2]=c[I>>2];c[Q+4>>2]=k;k=Bb(52491,Q)|0;if(!k){h=7;Z=223;break d}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[l>>2]=k;if(!h)h=k;else{Z=223;break d}}l=h;k=d+252|0;o=c[k>>2]|0;m=((e|0)<0)<<31>>31;o=Yv(o|0,((o|0)<0)<<31>>31|0,e|0,m|0)|0;n=((f|0)<0)<<31>>31;o=Sv(o|0,L()|0,f|0,n|0)|0;o=cw(o|0,L()|0,10)|0;p=L()|0;do if(!(Vc(l,1)|0)){q=c[l+100>>2]|0;r=q+8|0;if(!(b[r>>1]&9216)){S=q;c[S>>2]=o;c[S+4>>2]=p;b[r>>1]=4;break}else{Pg(q,o,p);break}}while(0);k=c[k>>2]|0;m=Yv(k|0,((k|0)<0)<<31>>31|0,e|0,m|0)|0;m=Sv(m|0,L()|0,f|0,n|0)|0;m=cw(m|0,L()|0,10)|0;k=L()|0;m=m|1023;if(!(Vc(l,2)|0)){o=c[l+100>>2]|0;n=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){f=n;c[f>>2]=m;c[f+4>>2]=k;b[o>>1]=4;break}else{Pg(n,m,k);break}}}else{l=d+120|0;h=c[l>>2]|0;c[S>>2]=h;if(!h){k=c[J>>2]|0;c[R>>2]=c[I>>2];c[R+4>>2]=k;k=Bb(52138,R)|0;if(!k){h=7;Z=223;break d}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[l>>2]=k;if(!h)h=k;else{Z=223;break d}}l=h;k=c[d+252>>2]|0;k=Yv(k|0,((k|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;k=Sv(k|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;k=cw(k|0,L()|0,10)|0;k=Sv(k|0,L()|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;if(!(Vc(l,1)|0)){n=c[l+100>>2]|0;o=n+8|0;if(!(b[o>>1]&9216)){f=n;c[f>>2]=k;c[f+4>>2]=m;b[o>>1]=4;break}else{Pg(n,k,m);break}}}while(0);Gc(l)|0;do if(h){h=c[l>>2]|0;f=l+136|0;e=c[f+4>>2]|0;if((e|0)>0|(e|0)==0&(c[f>>2]|0)>>>0>0)hc(h,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;f=l+64|0;c[f>>2]=0;c[f+4>>2]=0;if((k|0)==3082|(a[h+81>>0]|0)!=0){og(h);h=7;Z=223;break d}else{h=c[h+68>>2]&k;break}}else h=0;while(0);if(!((i|0)!=0&(h|0)==0)){Z=223;break}}else if(!i){h=0;Z=237;break a}f:do if(!(c[i>>2]|0)){h=i+56|0;h=Jr(d,Y,X,W,0,0,0,0,0,0,c[h>>2]|0,c[h+4>>2]|0,c[i+48>>2]|0,c[i+44>>2]|0)|0}else{k=i+16|0;B=k;A=c[B>>2]|0;B=c[B+4>>2]|0;e=Sv(A|0,B|0,1,0)|0;f=L()|0;h=k;c[h>>2]=e;c[h+4>>2]=f;h=Hr(d,A,B,c[i+48>>2]|0,c[i+44>>2]|0)|0;g:do if(!h){m=c[i>>2]|0;z=i+8|0;o=z;r=c[o>>2]|0;o=c[o+4>>2]|0;q=k;l=c[q>>2]|0;q=c[q+4>>2]|0;h=c[m>>2]|0;if(!h){k=m;s=1;u=l;t=q;q=o}else{p=m;y=1;x=m;while(1){k=c[p+8>>2]|0;if(!k){m=l;n=q;k=h}else{w=y&255;m=l;n=q;v=o;do{h=0;o=r;p=v;while(1){o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else h=h+1|0}o=9-h|0;p=k+36|0;a[(c[p>>2]|0)+o>>0]=w;h=(c[p>>2]|0)+(o+1)|0;t=r;u=v;while(1){s=t&255;a[h>>0]=s|-128;t=bw(t|0,u|0,7)|0;u=L()|0;if((t|0)==0&(u|0)==0)break;else h=h+1|0}a[h>>0]=s&127;h=Hr(d,m,n,(c[p>>2]|0)+o|0,(c[k+32>>2]|0)-o|0)|0;m=Sv(m|0,n|0,1,0)|0;n=L()|0;o=(c[k+12>>2]|0)+1|0;r=Sv(r|0,v|0,o|0,((o|0)<0)<<31>>31|0)|0;v=L()|0;k=c[k+4>>2]|0;o=(h|0)==0}while(o&(k|0)!=0);if(!o)break g;k=c[x>>2]|0}y=y+1|0;h=c[k>>2]|0;if(!h)break;else{o=q;r=l;p=k;l=m;q=n;x=k}}s=y&255;u=m;t=n;r=l}h=0;l=r;m=q;while(1){l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else h=h+1|0}o=9-h|0;p=k+36|0;a[(c[p>>2]|0)+o>>0]=s;n=(c[p>>2]|0)+(o+1)|0;m=r;l=q;while(1){h=m&255;a[n>>0]=h|-128;m=bw(m|0,l|0,7)|0;l=L()|0;if((m|0)==0&(l|0)==0)break;else n=n+1|0}a[n>>0]=h&127;e=Sv(u|0,t|0,-1,-1)|0;f=L()|0;S=z;h=i+56|0;h=Jr(d,Y,X,W,c[S>>2]|0,c[S+4>>2]|0,A,B,e,f,c[h>>2]|0,c[h+4>>2]|0,(c[p>>2]|0)+o|0,(c[k+32>>2]|0)-o|0)|0;break f}while(0);c[T>>2]=(c[T>>2]|0)+1;Z=223;break d}while(0);c[T>>2]=(c[T>>2]|0)+1;if(!h)if((g|0)==-1|((X|0)<(V|0)|(X|0)==(V|0)&Y>>>0<U>>>0)){h=i+56|0;k=i;h=Gr(d,Y,X,c[h>>2]|0,c[h+4>>2]|0)|0}else{k=i;h=0}else k=i}else if((Z|0)==222){i=l;h=7;j=l;Z=223}else if((Z|0)==224){k=l;j=l}else if((Z|0)==225){k=l;j=l}while(0);if((Z|0)==223)if(!i){Z=237;break}else k=i;i=c[k+48>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[k+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);Kr(c[k>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);Z=237;break}else{Z=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);Z=237;break}}else Z=237}else Z=237;while(0);if((Z|0)==237){k=c[ba>>2]|0;j=c[aa>>2]|0;if((k|0)>0){i=0;do{l=c[j+(i<<2)>>2]|0;do if(l|0){do if((c[l+56>>2]|0)==0?(_=c[l+64>>2]|0,_|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](_);break}else{d=Wa[c[29352>>2]&127](_)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](_);break}while(0);do if((a[l+5>>0]|0)==0?($=c[l+40>>2]|0,$|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127]($);break}else{d=Wa[c[29352>>2]&127]($)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127]($);break}while(0);m=c[l+52>>2]|0;do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(n|0){if(c[n+480>>2]|0){Xd(n,m);break}d=m;if((c[n+304>>2]|0)>>>0<=d>>>0?(c[n+308>>2]|0)>>>0>d>>>0:0){d=n+300|0;c[m>>2]=c[d>>2];c[d>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{d=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{d=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);i=i+1|0}while((i|0)!=(k|0));i=aa;Z=265}else{i=aa;Z=264}}if((Z|0)==264)if(!j)j=h;else Z=265;do if((Z|0)==265)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=h;break}else{$=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=h;break}while(0);h=c[aa+16>>2]|0;if(!h){c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}return 0}function Fr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=b+252|0;if((c[h>>2]|0)<=0){k=b+264|0;c[k>>2]=0;return}i=b+256|0;g=0;do{k=c[i>>2]|0;f=k+(g*24|0)+12|0;d=c[f>>2]|0;if(!d)d=0;else{do{e=c[d+8>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);d=c[d>>2]|0}while((d|0)!=0);d=c[f>>2]|0}c[f>>2]=0;e=k+(g*24|0)+20|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[k+(g*24|0)+16>>2]=0;if(d|0){f=k+(g*24|0)+5|0;do{e=d;d=c[d>>2]|0;do if(a[f>>0]|0?(j=c[e+12>>2]|0,j|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0)}c[k+(g*24|0)+8>>2]=0;g=g+1|0}while((g|0)<(c[h>>2]|0));l=b+264|0;c[l>>2]=0;return}function Gr(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+32|0;w=A+16|0;v=A+8|0;k=A;x=A+24|0;l=d+204|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[k>>2]=c[d+16>>2];c[k+4>>2]=j;j=Bb(53301,k)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{z=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(k){g=k;Ra=A;return g|0}}n=Wv(f|0,g|0,1024,0)|0;n=cw(n|0,L()|0,10)|0;m=L()|0;n=n|1023;s=Yv(h|0,i|0,3,0)|0;s=Wv(s|0,L()|0,2,0)|0;t=L()|0;z=j;k=Sv(f|0,g|0,1,0)|0;l=L()|0;do if(!(Vc(z,1)|0)){h=c[z+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){y=h;c[y>>2]=k;c[y+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);do if(!(Vc(z,2)|0)){l=c[z+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){y=k;c[y>>2]=n;c[y+4>>2]=m;b[l>>1]=4;break}else{Pg(k,n,m);break}}while(0);a:do if((Gc(z)|0)==100){p=z+120|0;q=z+144|0;r=z+40|0;if(!j){g=0;Ra=A;return g|0}while(1){k=c[p>>2]|0;if((k|0)!=0?(e[q>>1]|0)>2:0)k=k+80|0;else{k=c[z>>2]|0;c[k+64>>2]=25;Ne(k,25);k=29576}l=b[k+8>>1]|0;if((l&514)==514?(a[k+10>>0]|0)==1:0)o=c[k+16>>2]|0;else if(!(l&1))o=Gg(k,1)|0;else o=0;k=c[z>>2]|0;l=c[r>>2]|0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7}else k=c[k+68>>2]&l;c[r>>2]=k;if(!o){l=0;break a}if(((a[o>>0]|0)+-48&255)<10){k=0;do k=k+1|0;while(((a[o+k>>0]|0)+-48&255)<10)}else k=0;b:while(1){l=a[o+k>>0]|0;switch(l<<24>>24){case 45:{u=40;break b}case 32:break;default:{m=1;n=0;break b}}k=k+1|0}if((u|0)==40){u=0;l=k+1|0;k=l;l=a[o+l>>0]|0;m=-1;n=-1}if((l+-48&255)<10){h=0;i=0;do{i=Yv(h|0,i|0,10,0)|0;h=(l&255)+-48|0;h=Sv(i|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;k=k+1|0;l=a[o+k>>0]|0}while((l+-48&255)<10);l=h;k=i}else{l=0;k=0}l=Yv(l|0,k|0,m|0,n|0)|0;y=L()|0;k=(y|0)<0|(y|0)==0&l>>>0<1;l=(y|0)>(t|0)|(y|0)==(t|0)&l>>>0>s>>>0;if(k|l){u=45;break}if((Gc(z)|0)!=100){u=46;break}}if((u|0)==45){l=(k|l)^1;break}else if((u|0)==46){l=(k|l)^1;break}}else l=0;while(0);do if(!j){j=0;y=1}else{j=c[z>>2]|0;y=z+136|0;u=c[y+4>>2]|0;if((u|0)>0|(u|0)==0&(c[y>>2]|0)>>>0>0)hc(j,z);k=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;y=z+64|0;c[y>>2]=0;c[y+4>>2]=0;if(!((k|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&k;y=0;break}og(j);g=7;Ra=A;return g|0}while(0);if(!(l&(j|0)==0)){g=j;Ra=A;return g|0}l=d+208|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[v>>2]=c[d+16>>2];c[v+4>>2]=j;j=Bb(53407,v)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{v=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(!k)h=j;else{g=k;Ra=A;return g|0}}else h=j;l=d+212|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[w>>2]=c[d+16>>2];c[w+4>>2]=j;j=Bb(53480,w)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{d=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(!k)x=j;else{g=k;Ra=A;return g|0}}else x=j;do if(!(Vc(z,1)|0)){j=c[z+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){d=j;c[d>>2]=f;c[d+4>>2]=g;b[k>>1]=4;break}else{Pg(j,f,g);break}}while(0);c:do if((Gc(z)|0)==100){m=h;n=m+100|0;o=m+136|0;p=m+20|0;q=m+36|0;r=m+40|0;s=m+146|0;t=m+44|0;u=m+32|0;v=m+147|0;w=m+48|0;d=m+64|0;d:do if(!h){i=0;while(1){do if(!(Vc(m,1)|0)){j=c[n>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){h=j;c[h>>2]=i;c[h+4>>2]=0;b[k>>1]=4;break}else{Pg(j,i,0);break}}while(0);j=Nc(z,0)|0;k=((j|0)<0)<<31>>31;do if(!(Vc(m,2)|0)){h=c[n>>2]|0;l=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4;break}else{Pg(l,j,k);break}}while(0);j=Nc(z,1)|0;k=((j|0)<0)<<31>>31;if(!(Vc(m,3)|0)){h=c[n>>2]|0;l=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4}else Pg(l,j,k);Gc(m)|0;j=c[m>>2]|0;h=o;l=c[h+4>>2]|0;if((l|0)>0|(l|0)==0&(c[h>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[p>>2]=770837923;c[q>>2]=-1;c[r>>2]=0;a[s>>0]=2;c[t>>2]=0;c[u>>2]=1;a[v>>0]=-1;c[w>>2]=0;h=d;c[h>>2]=0;c[h+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){u=113;break d}j=c[j+68>>2]&k;if(j|0){u=115;break d}}else Gc(m)|0;if((Gc(z)|0)==100)i=i+1|0;else break c}}else{i=0;while(1){do if(!(Vc(m,1)|0)){j=c[n>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){h=j;c[h>>2]=i;c[h+4>>2]=0;b[k>>1]=4;break}else{Pg(j,i,0);break}}while(0);j=Nc(z,0)|0;k=((j|0)<0)<<31>>31;do if(!(Vc(m,2)|0)){h=c[n>>2]|0;l=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4;break}else{Pg(l,j,k);break}}while(0);j=Nc(z,1)|0;k=((j|0)<0)<<31>>31;if(!(Vc(m,3)|0)){h=c[n>>2]|0;l=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4}else Pg(l,j,k);Gc(m)|0}else Gc(m)|0;j=c[m>>2]|0;h=o;l=c[h+4>>2]|0;if((l|0)>0|(l|0)==0&(c[h>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[p>>2]=770837923;c[q>>2]=-1;c[r>>2]=0;a[s>>0]=2;c[t>>2]=0;c[u>>2]=1;a[v>>0]=-1;c[w>>2]=0;h=d;c[h>>2]=0;c[h+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){u=113;break d}j=c[j+68>>2]&k;if(j|0){u=115;break d}if((Gc(z)|0)==100)i=i+1|0;else break c}}while(0);if((u|0)==113){og(j);if(y){g=7;Ra=A;return g|0}else k=7}else if((u|0)==115)if(y){g=j;Ra=A;return g|0}else k=j;j=c[z>>2]|0;g=z+136|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&(c[g>>2]|0)>>>0>0)hc(j,z);g=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;f=z+64|0;c[f>>2]=0;c[f+4>>2]=0;if(!((g|0)==3082|(a[j+81>>0]|0)!=0)){g=k;Ra=A;return g|0}og(j);g=k;Ra=A;return g|0}while(0);do if(!y){j=c[z>>2]|0;y=z+136|0;d=c[y+4>>2]|0;if((d|0)>0|(d|0)==0&(c[y>>2]|0)>>>0>0)hc(j,z);k=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;z=z+64|0;c[z>>2]=0;c[z+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);g=7;Ra=A;return g|0}else{j=c[j+68>>2]&k;if(!j)break;Ra=A;return j|0}}while(0);l=x;if(Vc(l,1)|0){Gc(l)|0;if(!x){g=0;Ra=A;return g|0}}else{j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){z=j;c[z>>2]=f;c[z+4>>2]=g;b[k>>1]=4}else Pg(j,f,g);Gc(l)|0}j=c[l>>2]|0;g=l+136|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&(c[g>>2]|0)>>>0>0)hc(j,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;g=l+64|0;c[g>>2]=0;c[g+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);g=7;Ra=A;return g|0}else{g=c[j+68>>2]&k;Ra=A;return g|0}return 0}function Hr(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;j=o;k=o+8|0;l=d+92|0;i=c[l>>2]|0;c[k>>2]=i;if(!i){i=c[d+20>>2]|0;c[j>>2]=c[d+16>>2];c[j+4>>2]=i;i=Bb(51598,j)|0;if(!i){n=7;Ra=o;return n|0}j=qd(c[d+12>>2]|0,i,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[k>>2]|0;c[l>>2]=i;if(j){n=j;Ra=o;return n|0}}k=i;do if(!(Vc(k,1)|0)){j=c[k+100>>2]|0;d=j+8|0;if(!(b[d>>1]&9216)){l=j;c[l>>2]=e;c[l+4>>2]=f;b[d>>1]=4;break}else{Pg(j,e,f);break}}while(0);if((g|0)==0|(Vc(k,2)|0)!=0){Gc(k)|0;if(!i)i=0;else n=19}else{i=yc((c[k+100>>2]|0)+40|0,g,h,0,0)|0;if(i|0?(m=c[k>>2]|0,c[m+64>>2]=i,Ne(m,i),m=c[k>>2]|0,(i|0)==3082|(a[m+81>>0]|0)!=0):0)og(m);Gc(k)|0;n=19}do if((n|0)==19){i=c[k>>2]|0;n=k+136|0;m=c[n+4>>2]|0;if((m|0)>0|(m|0)==0&(c[n>>2]|0)>>>0>0)hc(i,k);j=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;n=k+64|0;c[n>>2]=0;c[n+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}while(0);Vc(k,2)|0;n=i;Ra=o;return n|0}function Ir(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;p=x+4|0;q=x;w=c[d>>2]|0;o=(w|0)!=0;a:do if(o){t=w+32|0;j=c[t>>2]|0;u=w+16|0;n=c[u>>2]|0;v=w+20|0;h=c[v>>2]|0;b:do if((h|0)>0){g=0;while(1){if((a[n+g>>0]|0)!=(a[e+g>>0]|0)){s=g;break b}g=g+1|0;if((g|0)>=(h|0)){s=g;break}}}else s=0;while(0);k=((s|0)<0)<<31>>31;m=0;g=s;h=k;do{m=m+1|0;g=bw(g|0,h|0,7)|0;h=L()|0}while(!((g|0)==0&(h|0)==0));r=f-s|0;i=((r|0)<0)<<31>>31;g=0;h=r;l=i;do{g=g+1|0;h=bw(h|0,l|0,7)|0;l=L()|0}while(!((h|0)==0&(l|0)==0));h=r+j+m+g|0;g=c[b+228>>2]|0;do if((h|0)>(g|0)){if(n|0)break a;d=nb(h)|0;c[w+36>>2]=d;if(!d){f=7;Ra=x;return f|0}else{g=c[u>>2]|0;break}}else g=n;while(0);b=w+36|0;if(g){m=(c[b>>2]|0)+j|0;l=m;n=s;while(1){g=n&255;h=l+1|0;a[l>>0]=g|-128;n=bw(n|0,k|0,7)|0;k=L()|0;if((n|0)==0&(k|0)==0)break;else l=h}a[l>>0]=g&127;j=j-m+h|0}l=(c[b>>2]|0)+j|0;k=l;m=r;while(1){g=m&255;h=k+1|0;a[k>>0]=g|-128;m=bw(m|0,i|0,7)|0;i=L()|0;if((m|0)==0&(i|0)==0)break;else k=h}a[k>>0]=g&127;j=h-l+j|0;ew((c[b>>2]|0)+j|0,e+s|0,r|0)|0;c[t>>2]=j+r;j=w+12|0;c[j>>2]=(c[j>>2]|0)+1;j=w+24|0;i=w+28|0;g=c[i>>2]|0;do if((c[j>>2]|0)<(f|0)){h=f<<1;if(mb()|0){f=7;Ra=x;return f|0}g=sb(g,(h|0)>0?h:0,0)|0;if(!g){f=7;Ra=x;return f|0}else{c[j>>2]=h;c[i>>2]=g;break}}while(0);c[u>>2]=g;ew(g|0,e|0,f|0)|0;c[v>>2]=f;f=0;Ra=x;return f|0}else g=c[b+228>>2]|0;while(0);j=nb(g+40|0)|0;c[p>>2]=j;g=j;if(!j){f=7;Ra=x;return f|0};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;c[j+32>>2]=11;c[j+36>>2]=j+40;if(o){c[q>>2]=c[w>>2];h=Ir(b,q,e,f)|0;i=c[q>>2]|0;if(!(c[w>>2]|0))c[w>>2]=i;c[w+4>>2]=g;c[j+8>>2]=c[w+8>>2];c[j>>2]=i;f=w+28|0;c[j+28>>2]=c[f>>2];c[j+24>>2]=c[w+24>>2];c[f>>2]=0}else{c[j+8>>2]=j;h=Ir(b,p,e,f)|0;g=c[p>>2]|0}c[d>>2]=g;f=h;Ra=x;return f|0}function Jr(d,e,f,g,h,i,j,k,l,m,n,o,p,q){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;v=y+8|0;s=y;t=y+24|0;u=d+100|0;r=c[u>>2]|0;c[t>>2]=r;if(!r){r=c[d+20>>2]|0;c[s>>2]=c[d+16>>2];c[s+4>>2]=r;r=Bb(51725,s)|0;if(!r){x=7;Ra=y;return x|0}s=qd(c[d+12>>2]|0,r,-1,133,0,t,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](r);else{d=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r)}r=c[t>>2]|0;c[u>>2]=r;if(!s)t=r;else{x=s;Ra=y;return x|0}}else t=r;u=t;do if(!(Vc(u,1)|0)){r=c[u+100>>2]|0;s=r+8|0;if(!(b[s>>1]&9216)){d=r;c[d>>2]=e;c[d+4>>2]=f;b[s>>1]=4;break}else{Pg(r,e,f);break}}while(0);r=((g|0)<0)<<31>>31;do if(!(Vc(u,2)|0)){d=c[u+100>>2]|0;s=d+40|0;d=d+48|0;if(!(b[d>>1]&9216)){f=s;c[f>>2]=g;c[f+4>>2]=r;b[d>>1]=4;break}else{Pg(s,g,r);break}}while(0);do if(!(Vc(u,3)|0)){s=c[u+100>>2]|0;r=s+80|0;s=s+88|0;if(!(b[s>>1]&9216)){g=r;c[g>>2]=h;c[g+4>>2]=i;b[s>>1]=4;break}else{Pg(r,h,i);break}}while(0);do if(!(Vc(u,4)|0)){s=c[u+100>>2]|0;r=s+120|0;s=s+128|0;if(!(b[s>>1]&9216)){i=r;c[i>>2]=j;c[i+4>>2]=k;b[s>>1]=4;break}else{Pg(r,j,k);break}}while(0);do if((n|0)==0&(o|0)==0){if(!(Vc(u,5)|0)){s=c[u+100>>2]|0;r=s+160|0;s=s+168|0;if(!(b[s>>1]&9216)){v=r;c[v>>2]=l;c[v+4>>2]=m;b[s>>1]=4;break}else{Pg(r,l,m);break}}}else{r=v;c[r>>2]=l;c[r+4>>2]=m;r=v+8|0;c[r>>2]=n;c[r+4>>2]=o;r=Bb(54991,v)|0;if(!r){x=7;Ra=y;return x|0}else{Tc(u,5,r,-1,90,1)|0;break}}while(0);if((p|0)==0|(Vc(u,6)|0)!=0){Gc(u)|0;if(!t)r=0;else x=38}else{r=yc((c[u+100>>2]|0)+200|0,p,q,0,0)|0;if(r|0?(w=c[u>>2]|0,c[w+64>>2]=r,Ne(w,r),w=c[u>>2]|0,(r|0)==3082|(a[w+81>>0]|0)!=0):0)og(w);Gc(u)|0;x=38}do if((x|0)==38){r=c[u>>2]|0;x=u+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(r,u);s=kc(u)|0;c[u+20>>2]=770837923;c[u+36>>2]=-1;c[u+40>>2]=0;a[u+146>>0]=2;c[u+44>>2]=0;c[u+32>>2]=1;a[u+147>>0]=-1;c[u+48>>2]=0;x=u+64|0;c[x>>2]=0;c[x+4>>2]=0;if((s|0)==3082|(a[r+81>>0]|0)!=0){og(r);r=7;break}else{r=c[r+68>>2]&s;break}}while(0);Vc(u,6)|0;x=r;Ra=y;return x|0}function Kr(a){a=a|0;var b=0,d=0,e=0;if(!a)return;a=c[a+8>>2]|0;Kr(c[a>>2]|0);if(!a)return;do{d=a;a=c[a+4>>2]|0;b=c[d+36>>2]|0;do if(!((b|0)==(d+40|0)|(b|0)==0))if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[d+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((a|0)!=0);return}function Lr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=Ra;Ra=Ra+48|0;j=l+32|0;i=l+24|0;h=l+16|0;g=l+8|0;e=l;k=l+40|0;Fr(b);do if(d|0){f=b+64|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[e>>2]=c[b+16>>2];c[e+4>>2]=d;d=Bb(51372,e)|0;if(!d){k=7;Ra=l;return k|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(d|0){d=c[f>>2]|0;m=f+136|0;e=c[m+4>>2]|0;if((e|0)>0|(e|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);m=7;Ra=l;return m|0}else{d=c[d+68>>2]&e;if(!d)break;Ra=l;return d|0}}}while(0);f=b+68|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[g>>2]=c[b+16>>2];c[g+4>>2]=d;d=Bb(51400,g)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;do if(d|0){e=c[f>>2]|0;m=f+136|0;g=c[m+4>>2]|0;if((g|0)>0|(g|0)==0&(c[m>>2]|0)>>>0>0)hc(e,f);d=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((d|0)==3082|(a[e+81>>0]|0)!=0){og(e);m=7;Ra=l;return m|0}else{d=c[e+68>>2]&d;if(!d)break;Ra=l;return d|0}}while(0);f=b+72|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[h>>2]=c[b+16>>2];c[h+4>>2]=d;d=Bb(51429,h)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;do if(!d)d=0;else{d=c[f>>2]|0;m=f+136|0;h=c[m+4>>2]|0;if((h|0)>0|(h|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if(!((e|0)==3082|(a[d+81>>0]|0)!=0)){d=c[d+68>>2]&e;break}og(d);m=7;Ra=l;return m|0}while(0);do if((d|0)==0&(a[b+234>>0]|0)!=0){f=b+76|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[i>>2]=c[b+16>>2];c[i+4>>2]=d;d=Bb(51456,i)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(!d)d=0;else{d=c[f>>2]|0;m=f+136|0;i=c[m+4>>2]|0;if((i|0)>0|(i|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if(!((e|0)==3082|(a[d+81>>0]|0)!=0)){d=c[d+68>>2]&e;break}og(d);m=7;Ra=l;return m|0}}while(0);if(!((d|0)==0&(a[b+233>>0]|0)!=0)){m=d;Ra=l;return m|0}f=b+80|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[j>>2]=c[b+16>>2];c[j+4>>2]=d;d=Bb(51484,j)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(!d){m=0;Ra=l;return m|0}d=c[f>>2]|0;m=f+136|0;k=c[m+4>>2]|0;if((k|0)>0|(k|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);m=7;Ra=l;return m|0}else{m=c[d+68>>2]&e;Ra=l;return m|0}return 0}function Mr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+32|0;i=s+20|0;n=s+16|0;o=s+12|0;p=s+8|0;q=s+4|0;m=s;c[n>>2]=0;c[o>>2]=0;c[p>>2]=0;c[m>>2]=0;g=c[a+36>>2]|0;r=c[g>>2]|0;if(!d){c[f>>2]=0;f=0;Ra=s;return f|0}c[i>>2]=0;d=Za[c[r+12>>2]&127](g,d,-1,i)|0;do if(!d){c[c[i>>2]>>2]=g;if((c[r>>2]|0)>0?(h=Xa[c[r+24>>2]&255](c[i>>2]|0,b)|0,h|0):0){Wa[c[r+16>>2]&127](c[i>>2]|0)|0;c[i>>2]=0;d=h;break}l=c[i>>2]|0;i=c[r+20>>2]|0;j=a+256|0;k=a+252|0;d=$a[i&127](l,q,m,n,o,p)|0;a:do if(!d){b=0;do{h=c[p>>2]|0;b=(h|0)<(b|0)?b:h+1|0;d=c[q>>2]|0;g=c[m>>2]|0;if((h|0)<0|(d|0)==0|(g|0)<1){d=1;break a}d=Nr(a,e,h,(c[j>>2]|0)+4|0,d,g)|0;if(d|0)break a;h=1;while(1){if((h|0)>=(c[k>>2]|0))break;d=c[j>>2]|0;g=c[d+(h*24|0)>>2]|0;if((c[m>>2]|0)<(g|0))d=0;else d=Nr(a,e,c[p>>2]|0,d+(h*24|0)+4|0,c[q>>2]|0,g)|0;if(!d)h=h+1|0;else break a}d=$a[i&127](l,q,m,n,o,p)|0}while((d|0)==0)}else b=0;while(0);Wa[c[r+16>>2]&127](l)|0;c[f>>2]=(c[f>>2]|0)+b;f=(d|0)==101?0:d;Ra=s;return f|0}while(0);f=d;Ra=s;return f|0}function Nr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r+4|0;q=r;c[q>>2]=0;a:do if((((f|0)!=0?(m=f+16|0,(c[m>>2]|0)!=0):0)?(k=Xa[(a[f>>0]<<24>>24==1?154:155)&255](g,h)|0,k=(c[f+12>>2]|0)+-1&k,l=c[m>>2]|0,(l|0)!=0):0)?(j=c[l+(k<<3)>>2]|0,n=(a[f>>0]|0)==1?79:80,i=c[l+(k<<3)+4>>2]|0,(j|0)!=0&(i|0)!=0):0){while(1){j=j+-1|0;if(!(Za[n&127](c[i+12>>2]|0,c[i+16>>2]|0,g,h)|0))break;i=c[i>>2]|0;if(!((j|0)!=0&(i|0)!=0)){o=8;break a}}i=c[i+8>>2]|0;c[p>>2]=i;if(!i)i=p;else{n=b+264|0;c[n>>2]=-20-h-(c[i>>2]|0)+(c[n>>2]|0);i=p}}else o=8;while(0);if((o|0)==8){c[p>>2]=0;i=p}o=b+272|0;if(wr(p,c[o>>2]|0,c[o+4>>2]|0,d,((d|0)<0)<<31>>31,e,((e|0)<0)<<31>>31,q)|0?(o=c[p>>2]|0,(o|0)==(Ep(f,g,h,o)|0)):0){i=c[i>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{p=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[q>>2]=7;q=7;Ra=r;return q|0}i=c[q>>2]|0;if(i|0){q=i;Ra=r;return q|0}q=b+264|0;c[q>>2]=h+20+(c[c[p>>2]>>2]|0)+(c[q>>2]|0);q=0;Ra=r;return q|0}\nfunction Ll(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0;ra=Ra;Ra=Ra+160|0;ba=ra+8|0;A=ra;ma=ra+64|0;na=ra+12|0;oa=h+80|0;da=c[f>>2]|0;y=j+64|0;_=c[y>>2]|0;v=h+4|0;ea=c[v>>2]|0;p=a[j+44>>0]|0;fa=p&255;n=ea+8+(fa*72|0)|0;ia=c[ea+8+(fa*72|0)+40>>2]|0;o=c[h+492>>2]|0;a:do if((o|0)>0){m=0;while(1){if((c[h+496+(m<<2)>>2]|0)==(ia|0))break;m=m+1|0;if((m|0)>=(o|0)){m=0;o=0;break a}}m=cw(1,0,m|0)|0;o=L()|0}else{m=0;o=0}while(0);qa=j+72|0;w=qa;c[w>>2]=~m&k;c[w+4>>2]=~o&l;w=h+64|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,i|0)|0;L()|0;aa=w&1;q=f+56|0;pa=c[q>>2]|0;z=pa+-1|0;Q=j+16|0;c[Q>>2]=z;ca=j+12|0;c[ca>>2]=z;pa=pa+-2|0;c[q>>2]=pa;D=j+24|0;c[D>>2]=pa;do if(p<<24>>24?a[ea+8+(fa*72|0)+36>>0]&8:0){o=f+44|0;m=(c[o>>2]|0)+1|0;c[o>>2]=m;c[j>>2]=m;o=g+108|0;p=c[o>>2]|0;if((c[g+112>>2]|0)>(p|0)){c[o>>2]=p+1;$=c[g+104>>2]|0;a[$+(p*20|0)>>0]=70;b[$+(p*20|0)+2>>1]=0;c[$+(p*20|0)+4>>2]=0;c[$+(p*20|0)+8>>2]=m;c[$+(p*20|0)+12>>2]=0;c[$+(p*20|0)+16>>2]=0;a[$+(p*20|0)+1>>0]=0;break}else{Di(g,70,0,m,0)|0;break}}while(0);b:do if((i|0)>0){m=i;while(1){if(c[h+752+(m*80|0)>>2]|0)break b;o=m+-1|0;if((m|0)>1)m=o;else{m=o;break}}}else m=i;while(0);p=c[h+752+(m*80|0)+12>>2]|0;m=a[ea+8+(fa*72|0)+37>>0]|0;c:do if(!(m&16)){$=_+36|0;o=c[$>>2]|0;if(o&1024|0){r=b[_+40>>1]|0;t=r&65535;m=t+2|0;n=f+32|0;o=c[n>>2]|0;p=f+28|0;q=c[p>>2]|0;if((q|0)<(m|0)){ba=f+44|0;u=c[ba>>2]|0;c[ba>>2]=u+m;u=u+1|0}else{c[n>>2]=m+o;c[p>>2]=q-m;u=o}m=c[ca>>2]|0;i=r<<16>>16==0;if(i)p=m;else{q=u+2|0;r=_+48|0;p=0;do{n=q+p|0;o=c[(c[r>>2]|0)+(p<<2)>>2]|0;do if(o)if(!(b[o+12>>1]&1)){km(f,c[(c[o>>2]|0)+16>>2]|0,n,1);break}else{jm(f,o,j,p,aa,n)|0;m=c[Q>>2]|0;break}while(0);p=p+1|0}while((p|0)!=(t|0));p=m}m=c[_+24>>2]|0;o=g+108|0;n=c[o>>2]|0;C=g+112|0;if((c[C>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=70;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=m;c[ca+(n*20|0)+8>>2]=u;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,70,m,u,0)|0;m=u+1|0;n=c[o>>2]|0;if((c[C>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=70;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=t;c[ca+(n*20|0)+8>>2]=m;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,70,t,m,0)|0;q=c[_+32>>2]|0;r=_+28|0;s=(a[r>>0]|0)==0?-1:-7;m=c[o>>2]|0;if((c[C>>2]|0)>(m|0)){c[o>>2]=m+1;ca=c[g+104>>2]|0;a[ca+(m*20|0)>>0]=9;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=ia;c[ca+(m*20|0)+8>>2]=p;c[ca+(m*20|0)+12>>2]=u;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(g,9,ia,p,u)|0;n=c[g>>2]|0;do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[o>>2]|0)+-1|0;n=c[g+104>>2]|0;p=n+(m*20|0)+1|0;if(a[p>>0]|0){Ei(g,n+(m*20|0)|0,q,s);break}if(q|0){c[n+(m*20|0)+16>>2]=q;a[p>>0]=s}}else kg(n,s,q);while(0);a[r>>0]=0;c[j+48>>2]=ia;a[j+45>>0]=(a[h+49>>0]|0)==0?60:-86;c[j+52>>2]=c[o>>2];if(i){E=0;break}B=_+48|0;w=_+30|0;x=da+81|0;y=j+60|0;z=ma+4|0;A=g+104|0;v=u+2|0;m=c[j+56>>2]|0;while(1){u=t;t=t+-1|0;i=c[(c[B>>2]|0)+(t<<2)>>2]|0;if((u|0)<17?(1<<t&e[w>>1]|0)!=0:0)lm(j,i);else if(b[i+12>>1]&1){do if(!(a[x>>0]|0)){m=m+-1|0;n=c[(c[y>>2]|0)+(m*20|0)+4>>2]|0;if((n|0)<0)n=(c[o>>2]|0)+-1|0;if(!(a[(c[g>>2]|0)+81>>0]|0))n=(c[A>>2]|0)+(n*20|0)|0;else n=59308;q=a[n>>0]|0;r=c[n+4>>2]|0;s=c[n+8>>2]|0;n=c[n+12>>2]|0;p=c[o>>2]|0;if((c[C>>2]|0)>(p|0)){c[o>>2]=p+1;ca=c[A>>2]|0;a[ca+(p*20|0)>>0]=q;b[ca+(p*20|0)+2>>1]=0;c[ca+(p*20|0)+4>>2]=r;c[ca+(p*20|0)+8>>2]=s;c[ca+(p*20|0)+12>>2]=n;c[ca+(p*20|0)+16>>2]=0;a[ca+(p*20|0)+1>>0]=0;break}else{Di(g,q&255,r,s,n)|0;break}}while(0);p=ej(f,53,0,0)|0;if(p){q=p+12|0;c[q>>2]=c[(c[i>>2]|0)+12>>2];c[ma>>2]=0;c[z>>2]=0;n=oj(da,168,ma,0)|0;c[p+16>>2]=n;if(n|0){c[n+28>>2]=v+t;Tj(f,p,c[D>>2]|0,0)}c[q>>2]=0;ni(da,p)}}if((u|0)<=1){E=0;break c}}}if(!((o&256|0)==0|(o&5|0)==0)){q=c[c[_+48>>2]>>2]|0;p=f+44|0;m=(c[p>>2]|0)+1|0;c[p>>2]=m;p=jm(f,q,j,0,aa,m)|0;if(!((m|0)==0|(p|0)==(m|0))?(r=f+19|0,s=a[r>>0]|0,(s&255)<8):0){a[r>>0]=s+1<<24>>24;c[f+148+((s&255)<<2)>>2]=m}m=c[Q>>2]|0;o=g+108|0;n=c[o>>2]|0;if((c[g+112>>2]|0)>(n|0)){c[o>>2]=n+1;da=c[g+104>>2]|0;a[da+(n*20|0)>>0]=30;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=ia;c[da+(n*20|0)+8>>2]=m;c[da+(n*20|0)+12>>2]=p;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(g,30,ia,m,p)|0;a[j+45>>0]=-86;da=q+40|0;ca=qa;if(!((c[ca>>2]&c[da>>2]|0)==0?(c[ca+4>>2]&c[da+4>>2]|0)==0:0)){E=0;break}E=q+10|0;b[E>>1]=b[E>>1]|4;E=0;break}if((o&258|0)==258){if(!(o&32)){n=0;m=0}else{n=c[c[_+48>>2]>>2]|0;m=1}if(!(o&16))m=0;else m=c[(c[_+48>>2]|0)+(m<<2)>>2]|0;da=(aa|0)==0;i=da?m:n;n=da?n:m;do if(!n){m=aa<<2^36;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;da=c[g+104>>2]|0;a[da+(o*20|0)>>0]=m;b[da+(o*20|0)+2>>1]=0;c[da+(o*20|0)+4>>2]=ia;c[da+(o*20|0)+8>>2]=p;c[da+(o*20|0)+12>>2]=0;c[da+(o*20|0)+16>>2]=0;a[da+(o*20|0)+1>>0]=0;break}else{Di(g,m,ia,p,0)|0;break}}else{q=c[n>>2]|0;o=c[q+16>>2]|0;m=a[o>>0]|0;if(m<<24>>24==-88)m=a[o+38>>0]|0;switch(m<<24>>24){case -87:{m=o+20|0;ga=90;break}case -125:{m=c[o+20>>2]|0;ga=90;break}default:ga=95}if((ga|0)==90)if((c[c[m>>2]>>2]|0)<2)ga=95;else{m=f+19|0;n=a[m>>0]|0;if(!(n<<24>>24)){da=f+44|0;m=(c[da>>2]|0)+1|0;c[da>>2]=m}else{da=n+-1<<24>>24;a[m>>0]=da;m=c[f+148+((da&255)<<2)>>2]|0}c[ma>>2]=m;km(f,o,m,1);p=m;m=((a[q>>0]|0)+1&2|1)&255}if((ga|0)==95){p=Lj(f,o,ma)|0;lm(j,n);m=(d[q>>0]|0)+-54|0}m=a[44005+m>>0]|0;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;da=c[g+104>>2]|0;a[da+(o*20|0)>>0]=m;b[da+(o*20|0)+2>>1]=0;c[da+(o*20|0)+4>>2]=ia;c[da+(o*20|0)+8>>2]=z;c[da+(o*20|0)+12>>2]=p;c[da+(o*20|0)+16>>2]=0;a[da+(o*20|0)+1>>0]=0}else Di(g,m&255,ia,z,p)|0;m=c[ma>>2]|0;if(m|0?(t=f+19|0,u=a[t>>0]|0,(u&255)<8):0){a[t>>0]=u+1<<24>>24;c[f+148+((u&255)<<2)>>2]=m}}while(0);do if(!i){r=0;q=170}else{o=c[i>>2]|0;s=f+44|0;r=(c[s>>2]|0)+1|0;c[s>>2]=r;s=o+16|0;km(f,c[s>>2]|0,r,1);s=c[s>>2]|0;m=a[s>>0]|0;p=m<<24>>24==-88;if(p)n=a[s+38>>0]|0;else n=m;switch(n<<24>>24){case -87:{n=s+20|0;ga=112;break}case -125:{n=c[s+20>>2]|0;ga=112;break}default:ga=113}if((ga|0)==112)if((c[c[n>>2]>>2]|0)<2)ga=113;else ga=115;d:do if((ga|0)==113){switch(a[o>>0]|0){case 54:case 56:break;default:{ga=115;break d}}q=(aa<<1^2)+55|0}while(0);if((ga|0)==115)q=(aa<<1)+54|0;if(p)m=a[s+38>>0]|0;switch(m<<24>>24){case -87:{x=s+20|0;ga=121;break}case -125:{x=c[s+20>>2]|0;ga=121;break}default:{}}if((ga|0)==121?(c[c[x>>2]>>2]|0)>=2:0)break;lm(j,i)}while(0);o=g+108|0;m=c[o>>2]|0;a[j+45>>0]=5-aa;c[j+48>>2]=ia;c[j+52>>2]=m;if((q|0)==170){E=0;break}p=f+44|0;n=(c[p>>2]|0)+1|0;c[p>>2]=n;p=g+112|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=-128;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=ia;c[da+(m*20|0)+8>>2]=n;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,128,ia,n,0)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=q;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=r;c[da+(m*20|0)+8>>2]=z;c[da+(m*20|0)+12>>2]=n;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,q,r,z,n)|0;m=c[o>>2]|0;if((m|0)<=0){E=0;break}b[(c[g+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=83;E=0;break}if(!(o&512)){if(!(o&8192)){if(m&32){a[j+45>>0]=-86;E=0;o=g+108|0;break}a[j+45>>0]=a[44045+aa>>0]|0;c[j+48>>2]=ia;m=a[44047+aa>>0]|0;o=g+108|0;n=c[o>>2]|0;if((c[g+112>>2]|0)>(n|0)){da=n+1|0;c[o>>2]=da;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=m;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=ia;c[ca+(n*20|0)+8>>2]=p;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0;m=da}else m=(Di(g,m&255,ia,p,0)|0)+1|0;c[j+52>>2]=m;a[j+47>>0]=1;E=0;break}s=f+40|0;Z=c[s>>2]|0;c[s>>2]=Z+1;W=f+44|0;X=(c[W>>2]|0)+1|0;c[W>>2]=X;$=c[q>>2]|0;Y=$+-1|0;c[q>>2]=Y;V=c[ea+8+(fa*72|0)+16>>2]|0;aa=c[c[_+48>>2]>>2]|0;u=c[aa+28>>2]|0;a[j+45>>0]=66;c[j+48>>2]=X;_=h+46|0;m=a[_>>0]|0;if((m&255)>1){r=(m&255)-i|0;q=(r*72|0)+8|0;e:do if(!da){U=Sv(q|0,0,-1,-1)|0;T=L()|0;if(T>>>0>0|(T|0)==0&U>>>0>2147483390){qa=l;f=k;K(qa|0);Ra=ra;return f|0}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](q)|0;ga=627;break}p=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;o=59064;m=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&m>>>0>0){U=c[14978]|0;T=Tv(m|0,o|0,p|0,((p|0)<0)<<31>>31|0)|0;S=L()|0;c[14768]=((S|0)<0|(S|0)==0&T>>>0<=U>>>0)&1}m=Wa[c[29340>>2]&127](p)|0;if(!m){qa=l;f=k;K(qa|0);Ra=ra;return f|0}o=Wa[c[29352>>2]&127](m)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[da+272>>2]|0){if(a[da+81>>0]|0){qa=l;f=k;K(qa|0);Ra=ra;return f|0}}else{do if(!(0<0|(0==0?(e[da+276>>1]|0)>>>0<q>>>0:0))){o=da+300|0;m=c[o>>2]|0;if(m|0){c[o>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=627;break e}o=da+296|0;m=c[o>>2]|0;if(!m){m=da+292|0;break}else{c[o>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=627;break e}}else m=da+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(da,q,0)|0;ga=627}while(0);if((ga|0)==627)if(!m){qa=l;f=k;K(qa|0);Ra=ra;return f|0}q=r&255;c[m+4>>2]=q;c[m>>2]=q;q=m+8|0;E=q;D=E+72|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));p=c[v>>2]|0;if((r|0)>1){o=1;do{E=q+(o*72|0)|0;n=p+8+((d[j+(o*80|0)+44>>0]|0)*72|0)|0;D=E+72|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));o=o+1|0}while((o|0)!=(r|0));T=m;U=m}else{T=m;U=m}}else{U=c[v>>2]|0;T=U}S=h+44|0;if(!(b[S>>1]&16)){f:do if(!(c[V+36>>2]&32)){m=(c[W>>2]|0)+1|0;c[W>>2]=m;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;R=c[g+104>>2]|0;a[R+(o*20|0)>>0]=73;b[R+(o*20|0)+2>>1]=0;c[R+(o*20|0)+4>>2]=0;c[R+(o*20|0)+8>>2]=m;c[R+(o*20|0)+12>>2]=0;c[R+(o*20|0)+16>>2]=0;a[R+(o*20|0)+1>>0]=0;break}else{Di(g,73,0,m,0)|0;break}}else{m=c[V+8>>2]|0;g:do if(!m)m=0;else while(1){R=m+55|0;if(((d[R>>0]|d[R+1>>0]<<8)&3)==2)break g;m=c[m+20>>2]|0;if(!m){m=0;break}}while(0);q=c[s>>2]|0;c[s>>2]=q+1;n=e[m+50>>1]|0;o=g+108|0;p=c[o>>2]|0;if((c[g+112>>2]|0)>(p|0)){c[o>>2]=p+1;R=c[g+104>>2]|0;a[R+(p*20|0)>>0]=113;b[R+(p*20|0)+2>>1]=0;c[R+(p*20|0)+4>>2]=q;c[R+(p*20|0)+8>>2]=n;c[R+(p*20|0)+12>>2]=0;c[R+(p*20|0)+16>>2]=0;a[R+(p*20|0)+1>>0]=0}else Di(g,113,q,n,0)|0;n=c[f+8>>2]|0;o=Ij(f,m)|0;if(o){m=c[n>>2]|0;if(!(a[m+81>>0]|0)){R=c[n+104>>2]|0;m=(c[n+108>>2]|0)+-1|0;a[R+(m*20|0)+1>>0]=-9;c[R+(m*20|0)+16>>2]=o;m=q;break}if(c[m+480>>2]|0){m=q;break}R=(c[o>>2]|0)+-1|0;c[o>>2]=R;if(R|0){m=q;break}m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);m=q;break f}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;m=m+300|0;c[o>>2]=c[m>>2];c[m>>2]=o;m=q;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);m=q;break}else{m=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);m=q;break}}else m=q}while(0);P=(c[W>>2]|0)+1|0;c[W>>2]=P}else{P=0;m=0}o=g+108|0;n=c[o>>2]|0;R=g+112|0;if((c[R>>2]|0)>(n|0)){c[o>>2]=n+1;Q=c[g+104>>2]|0;a[Q+(n*20|0)>>0]=70;b[Q+(n*20|0)+2>>1]=0;c[Q+(n*20|0)+4>>2]=0;c[Q+(n*20|0)+8>>2]=X;c[Q+(n*20|0)+12>>2]=0;c[Q+(n*20|0)+16>>2]=0;a[Q+(n*20|0)+1>>0]=0;Q=n}else Q=Di(g,70,0,X,0)|0;i=h+92|0;n=c[i>>2]|0;if((n|0)>1){t=h+100|0;s=0;p=0;do{q=c[t>>2]|0;O=q+(s*48|0)|0;r=c[O>>2]|0;do if((O|0)!=(aa|0)?(b[q+(s*48|0)+10>>1]&6)==0:0){if(!(b[q+(s*48|0)+12>>1]&8191))break;if(!r)n=0;else n=dk(da,r,0,0)|0;p=Xk(da,p,n)|0;n=c[i>>2]|0}while(0);s=s+1|0}while((s|0)<(n|0));if(p)O=ej(f,65580,0,p)|0;else O=0}else O=0;N=b[S>>1]&1024|32;nk(f,1,44021,A);M=u+12|0;if((c[M>>2]|0)>0){A=u+20|0;B=(O|0)==0;C=O+12|0;D=V+36|0;E=V+8|0;F=g+104|0;G=f+19|0;H=f+32|0;I=f+28|0;p=f+212|0;J=f+8|0;n=0;r=0;q=0;do{s=c[A>>2]|0;do if((c[s+(n*48|0)+20>>2]|0)==(ia|0))ga=679;else{if(b[s+(n*48|0)+12>>1]&1024){ga=679;break}n=n+1|0}while(0);do if((ga|0)==679){ga=0;s=c[s+(n*48|0)>>2]|0;if(!B){c[C>>2]=s;s=O}z=n+1|0;c[ba>>2]=z;nk(f,1,44036,ba);y=ql(f,T,s,0,0,N,Z)|0;if(!y){n=z;break}Kl(f,T,y+752|0,0);do if(!(b[S>>1]&16)){v=(n|0)==((c[M>>2]|0)+-1|0)?-1:n;if(!(c[D>>2]&32)){Vj(g,V,ia,-1,P);s=c[o>>2]|0;if((c[R>>2]|0)>(s|0)){c[o>>2]=s+1;x=c[F>>2]|0;a[x+(s*20|0)>>0]=42;b[x+(s*20|0)+2>>1]=0;c[x+(s*20|0)+4>>2]=m;c[x+(s*20|0)+8>>2]=0;c[x+(s*20|0)+12>>2]=P;c[x+(s*20|0)+16>>2]=0;a[x+(s*20|0)+1>>0]=0}else s=Di(g,42,m,0,P)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;x=c[F>>2]|0;a[x+(s*20|0)+1>>0]=-3;c[x+(s*20|0)+16>>2]=v;break}s=c[E>>2]|0;h:do if(!s)s=0;else while(1){x=s+55|0;if(((d[x>>0]|d[x+1>>0]<<8)&3)==2)break h;s=c[s+20>>2]|0;if(!s){s=0;break}}while(0);u=b[s+50>>1]|0;w=u&65535;x=u<<16>>16==1;do if(x){i=a[G>>0]|0;if(!(i<<24>>24)){i=(c[W>>2]|0)+1|0;c[W>>2]=i;ga=701;break}else{i=i+-1<<24>>24;a[G>>0]=i;i=c[f+148+((i&255)<<2)>>2]|0;ga=701;break}}else{i=c[H>>2]|0;t=c[I>>2]|0;if((t|0)<(w|0)){i=c[W>>2]|0;c[W>>2]=i+w;i=i+1|0}else{c[H>>2]=i+w;c[I>>2]=t-w}if(!(u<<16>>16))u=i;else ga=701}while(0);if((ga|0)==701){ga=0;t=s+4|0;s=0;do{Vj(g,V,ia,b[(c[t>>2]|0)+(s<<1)>>1]|0,s+i|0);s=s+1|0}while((s|0)!=(w|0));u=i}t=(v|0)!=0;if(t){s=c[o>>2]|0;if((c[R>>2]|0)>(s|0)){c[o>>2]=s+1;i=c[F>>2]|0;a[i+(s*20|0)>>0]=29;b[i+(s*20|0)+2>>1]=0;c[i+(s*20|0)+4>>2]=m;c[i+(s*20|0)+8>>2]=0;c[i+(s*20|0)+12>>2]=u;c[i+(s*20|0)+16>>2]=0;a[i+(s*20|0)+1>>0]=0}else s=Di(g,29,m,0,u)|0;if(!(a[(c[g>>2]|0)+81>>0]|0)){i=c[F>>2]|0;a[i+(s*20|0)+1>>0]=-3;c[i+(s*20|0)+16>>2]=w}if((v|0)>-1)ga=710}else{s=0;ga=710}do if((ga|0)==710){ga=0;i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;v=c[F>>2]|0;a[v+(i*20|0)>>0]=92;b[v+(i*20|0)+2>>1]=0;c[v+(i*20|0)+4>>2]=u;c[v+(i*20|0)+8>>2]=w;c[v+(i*20|0)+12>>2]=P;c[v+(i*20|0)+16>>2]=0;a[v+(i*20|0)+1>>0]=0}else Di(g,92,u,w,P)|0;i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;v=c[F>>2]|0;a[v+(i*20|0)>>0]=-124;b[v+(i*20|0)+2>>1]=0;c[v+(i*20|0)+4>>2]=m;c[v+(i*20|0)+8>>2]=P;c[v+(i*20|0)+12>>2]=u;c[v+(i*20|0)+16>>2]=0;a[v+(i*20|0)+1>>0]=0}else i=Di(g,132,m,P,u)|0;if(!(a[(c[g>>2]|0)+81>>0]|0)){v=c[F>>2]|0;a[v+(i*20|0)+1>>0]=-3;c[v+(i*20|0)+16>>2]=w}if(!t)break;i=c[o>>2]|0;if((i|0)<=0)break;b[(c[F>>2]|0)+((i+-1|0)*20|0)+2>>1]=16}while(0);if(!x){if((c[I>>2]|0)>=(w|0))break;c[I>>2]=w;c[H>>2]=u;break}if(!u)break;i=a[G>>0]|0;if((i&255)>=8)break;a[G>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=u}else s=0;while(0);i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;x=c[F>>2]|0;a[x+(i*20|0)>>0]=12;b[x+(i*20|0)+2>>1]=0;c[x+(i*20|0)+4>>2]=X;c[x+(i*20|0)+8>>2]=Y;c[x+(i*20|0)+12>>2]=0;c[x+(i*20|0)+16>>2]=0;a[x+(i*20|0)+1>>0]=0}else Di(g,12,X,Y,0)|0;if(s|0){i=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))s=(c[F>>2]|0)+(((s|0)<0?i+-1|0:s)*20|0)|0;else s=59308;c[s+8>>2]=i}r=(a[y+50>>0]|0)==0?r:1;s=c[y+816>>2]|0;do if(!(c[s+36>>2]&512))q=0;else{if(n|0?(c[s+32>>2]|0)!=(q|0):0){q=0;break}q=c[s+32>>2]|0;if(c[D>>2]&32|0?(x=q+55|0,((d[x>>0]|d[x+1>>0]<<8)&3)==2):0){q=0;break}}while(0);sl(y);n=c[p>>2]|0;if(!n)n=0;else{s=c[J>>2]|0;if((n|0)<0)n=(c[s+108>>2]|0)+-1|0;if(!(a[(c[s>>2]|0)+81>>0]|0))n=(c[s+104>>2]|0)+(n*20|0)|0;else n=59308;n=c[n+8>>2]|0}c[p>>2]=n;n=z}while(0)}while((n|0)<(c[M>>2]|0))}else{r=0;q=0;p=f+212|0}m=c[p>>2]|0;if(!m)m=0;else{n=c[f+8>>2]|0;if((m|0)<0)m=(c[n+108>>2]|0)+-1|0;if(!(a[(c[n>>2]|0)+81>>0]|0))m=(c[n+104>>2]|0)+(m*20|0)|0;else m=59308;m=c[m+8>>2]|0}c[p>>2]=m;c[j+56>>2]=q;if(q|0)c[j+8>>2]=Z;if(O|0){c[O+12>>2]=0;ni(da,O)}n=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((Q|0)<0?n+-1|0:Q)*20|0)|0;else m=59308;c[m+4>>2]=n;m=c[ca>>2]|0;if((c[R>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=11;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=0;c[ca+(n*20|0)+8>>2]=m;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,11,0,m,0)|0;n=c[g+12>>2]|0;m=0-$|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0)mk(n,g,m);else c[(c[n+64>>2]|0)+(m<<2)>>2]=c[o>>2];i:do if(!((U|0)==0|(d[_>>0]|0)<2)){do if(da|0){if(c[da+480>>2]|0){Xd(da,U);break i}m=U;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;da=da+300|0;c[U>>2]=c[da>>2];c[da>>2]=U;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](U);break}else{da=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);break}}while(0);if(r|0){E=0;break}lm(j,aa);E=0;break}M=b[_+24>>1]|0;t=b[_+26>>1]|0;u=b[_+28>>1]|0;Y=c[_+32>>2]|0;x=j+8|0;Z=c[x>>2]|0;X=h+44|0;if((b[X>>1]&1)!=0?(a[h+47>>0]|0)>0:0){i=(e[Y+50>>1]|0)>(M&65535);m=i&1;i=i&1}else{m=0;i=0}p=M&65535;n=t&65535;if(!(o&32)){v=0;n=p}else{v=c[(c[_+48>>2]|0)+(p<<2)>>2]|0;m=m>>>0>n>>>0?m:n;n=p+1|0}do if(o&16){s=c[(c[_+48>>2]|0)+(n<<2)>>2]|0;ba=u&65535;m=(m|0)>(ba|0)?m:ba;if(b[s+10>>1]&256){o=f+44|0;n=(c[o>>2]|0)+1|0;c[o>>2]=n;o=j+36|0;c[o>>2]=n;q=g+108|0;r=c[q>>2]|0;if((c[g+112>>2]|0)>(r|0)){c[q>>2]=r+1;ba=c[g+104>>2]|0;a[ba+(r*20|0)>>0]=70;b[ba+(r*20|0)+2>>1]=0;c[ba+(r*20|0)+4>>2]=1;c[ba+(r*20|0)+8>>2]=n;c[ba+(r*20|0)+12>>2]=0;c[ba+(r*20|0)+16>>2]=0;a[ba+(r*20|0)+1>>0]=0}else Di(g,70,1,n,0)|0;c[j+40>>2]=c[q>>2];ba=c[o>>2]<<1;c[o>>2]=ba;c[o>>2]=aa^(a[(c[Y+28>>2]|0)+p>>0]|0)==1|ba}if(!v){n=b[(c[Y+4>>2]|0)+(p<<1)>>1]|0;if(n<<16>>16>-1){if(a[(c[(c[Y+12>>2]|0)+4>>2]|0)+(n<<16>>16<<4)+12>>0]|0){o=i;break}}else if(n<<16>>16!=-2){o=i;break}o=1}else o=i}else{s=0;o=i}while(0);n=b[Y+50>>1]|0;if((M&65535)<(n&65535)?!(((w&1|0)!=0|0!=0)^(a[(c[Y+28>>2]|0)+p>>0]|0)==0):0)ga=152;else if(aa|0?n<<16>>16==M<<16>>16:0)ga=152;else{N=t;R=0;P=v;v=s;J=o}if((ga|0)==152){N=u;u=t&255;R=o;P=s;J=0}T=f+8|0;I=c[T>>2]|0;w=c[y>>2]|0;y=b[w+24>>1]|0;G=b[w+42>>1]|0;q=c[w+32>>2]|0;V=f+44|0;o=c[V>>2]|0;F=o+1|0;H=y&65535;z=m+H|0;c[V>>2]=o+z;o=c[f>>2]|0;q=gl(o,q)|0;j:do if(!q)U=0;else{r=(Eu(q)|0)+1|0;k:do if(!o){ba=Sv(r|0,0,-1,-1)|0;U=L()|0;if(U>>>0>0|(U|0)==0&ba>>>0>2147483390){U=0;break j}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](r)|0;ga=178;break}m=Wa[c[29356>>2]&127](r)|0;if((c[14985]|0)>>>0<r>>>0)c[14985]=r;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){ba=c[14978]|0;U=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&U>>>0<=ba>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){U=0;break j}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){U=0;break j}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<r>>>0:0))){n=o+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=o+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=178;break k}n=o+296|0;m=c[n>>2]|0;if(!m){m=o+292|0;break}else{c[n>>2]=c[m>>2];ga=o+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=178;break k}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(o,r,0)|0;ga=178}while(0);if((ga|0)==178)if(!m){U=0;break}ew(m|0,q|0,r|0)|0;U=m}while(0);l:do if(G<<16>>16){s=c[x>>2]|0;q=(aa|0)==0;m=aa<<2^36;i=I+108|0;n=c[i>>2]|0;t=I+112|0;if((c[t>>2]|0)>(n|0)){c[i>>2]=n+1;ba=c[I+104>>2]|0;a[ba+(n*20|0)>>0]=m;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=s;c[ba+(n*20|0)+8>>2]=0;c[ba+(n*20|0)+12>>2]=0;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0}else Di(I,m,s,0,0)|0;m=c[i>>2]|0;if((c[t>>2]|0)>(m|0)){c[i>>2]=m+1;E=c[I+104>>2]|0;a[E+(m*20|0)>>0]=11;E=E+(m*20|0)+1|0;D=E+19|0;do{a[E>>0]=0;E=E+1|0}while((E|0)<(D|0));o=m}else o=Di(I,11,0,0,0)|0;n=q?25:22;r=G&65535;m=c[i>>2]|0;if((c[t>>2]|0)>(m|0)){c[i>>2]=m+1;ba=c[I+104>>2]|0;a[ba+(m*20|0)>>0]=n;b[ba+(m*20|0)+2>>1]=0;c[ba+(m*20|0)+4>>2]=s;c[ba+(m*20|0)+8>>2]=0;c[ba+(m*20|0)+12>>2]=F;c[ba+(m*20|0)+16>>2]=0;a[ba+(m*20|0)+1>>0]=0}else m=Di(I,n,s,0,F)|0;do if(!(a[(c[I>>2]|0)+81>>0]|0)){ba=c[I+104>>2]|0;a[ba+(m*20|0)+1>>0]=-3;c[ba+(m*20|0)+16>>2]=r;ba=a[(c[I>>2]|0)+81>>0]|0;c[j+20>>2]=m;n=c[i>>2]|0;if(ba<<24>>24){m=59308;break}m=(c[I+104>>2]|0)+(((o|0)<0?n+-1|0:o)*20|0)|0}else{c[j+20>>2]=m;m=59308;n=c[i>>2]|0}while(0);c[m+8>>2]=n;q=I+104|0;m=0;while(1){o=m+F|0;if((c[t>>2]|0)>(n|0)){c[i>>2]=n+1;ba=c[q>>2]|0;a[ba+(n*20|0)>>0]=90;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=s;c[ba+(n*20|0)+8>>2]=m;c[ba+(n*20|0)+12>>2]=o;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0}else Di(I,90,s,m,o)|0;m=m+1|0;if((m|0)==(r|0))break l;n=c[i>>2]|0}}while(0);if((G&65535)<(y&65535)){C=w+48|0;t=(z|0)==1;w=(U|0)!=0;x=I+108|0;y=I+112|0;z=f+19|0;A=I+104|0;B=(U|0)==0;q=F;i=G&65535;while(1){r=c[(c[C>>2]|0)+(i<<2)>>2]|0;m=i+q|0;o=jm(f,r,j,i,aa,m)|0;do if((o|0)!=(m|0))if(!t){n=c[x>>2]|0;if((c[y>>2]|0)>(n|0)){c[x>>2]=n+1;ba=c[A>>2]|0;a[ba+(n*20|0)>>0]=79;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=o;c[ba+(n*20|0)+8>>2]=m;c[ba+(n*20|0)+12>>2]=0;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0;break}else{Di(I,79,o,m,0)|0;break}}else{if(!q){q=o;break}m=a[z>>0]|0;if((m&255)>=8){q=o;break}a[z>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=q;q=o;break}while(0);m=e[r+12>>1]|0;m:do if(!(m&1)){if(m&256|0)break;s=c[(c[r>>2]|0)+16>>2]|0;n:do if(!(b[r+10>>1]&2048)){n=a[s>>0]|0;if((n+91&255)<2){m=s;do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2)}else m=s;if(n<<24>>24==-88)n=a[m+38>>0]|0;o:do switch(n<<24>>24){case -110:case -111:case 110:case -109:break n;case -94:{if(c[m+4>>2]&1048576|0)break o;n=c[m+44>>2]|0;if(!n)break o;m=b[m+32>>1]|0;if(m<<16>>16<=-1)break n;if(a[(c[n+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0)break n;break}default:{}}while(0);m=q+i|0;n=c[ca>>2]|0;o=c[x>>2]|0;if((c[y>>2]|0)>(o|0)){c[x>>2]=o+1;ba=c[A>>2]|0;a[ba+(o*20|0)>>0]=50;b[ba+(o*20|0)+2>>1]=0;c[ba+(o*20|0)+4>>2]=m;c[ba+(o*20|0)+8>>2]=n;c[ba+(o*20|0)+12>>2]=0;c[ba+(o*20|0)+16>>2]=0;a[ba+(o*20|0)+1>>0]=0;break}else{Di(I,50,m,n,0)|0;break}}while(0);if(B)break;o=U+i|0;r=a[o>>0]|0;m=Xj(s)|0;if(r<<24>>24==0|m<<24>>24==0)if((m|r)<<24>>24==0?1:((m&255)+(r&255)&255)<<24>>24==65)ga=232;else ga=233;else if(r<<24>>24>66|m<<24>>24>66)ga=233;else ga=232;p:do if((ga|0)==232){ga=0;a[o>>0]=65}else if((ga|0)==233){ga=0;if(r<<24>>24==65)break;n=a[s>>0]|0;if((n+91&255)<2){m=s;do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2)}else m=s;if(n<<24>>24==-88)n=a[m+38>>0]|0;switch(n<<24>>24){case -110:break p;case -109:if((r+-67&255)<2)break p;else break m;case -111:switch(r<<24>>24){case 67:case 69:break p;default:break m}case 110:if(r<<24>>24==66)break p;else break m;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0)break p;else break m;default:break m}}while(0);a[o>>0]=65}else{if(!(w&(c[(c[r>>2]|0)+4>>2]&2048|0)!=0))break;a[U+i>>0]=65}while(0);i=i+1|0;if((i|0)==(H|0)){F=q;break}}}G=(U|0)==0;q:do if(!(u<<16>>16==0|G)?(O=U+p|0,(O|0)!=0):0){q=(Eu(O)|0)+1|0;r:do if(!da){ca=Sv(q|0,0,-1,-1)|0;ba=L()|0;if(ba>>>0>0|(ba|0)==0&ca>>>0>2147483390){D=0;break q}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](q)|0;ga=272;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<q>>>0)c[14985]=q;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){ca=c[14978]|0;ba=Tv(m|0,n|0,o|0,((o|0)<0)<<31>>31|0)|0;I=L()|0;c[14768]=((I|0)<0|(I|0)==0&ba>>>0<=ca>>>0)&1}m=Wa[c[29340>>2]&127](o)|0;if(!m){D=0;break q}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n}else{if(c[da+272>>2]|0){if(a[da+81>>0]|0){D=0;break q}}else{do if(!(0<0|(0==0?(e[da+276>>1]|0)>>>0<q>>>0:0))){n=da+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=272;break r}n=da+296|0;m=c[n>>2]|0;if(!m){m=da+292|0;break}else{c[n>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=272;break r}}else m=da+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(da,q,0)|0;ga=272}while(0);if((ga|0)==272)if(!m){D=0;break}ew(m|0,O|0,q|0)|0;D=m}else D=0;while(0);E=c[Q>>2]|0;o=(P|0)!=0;if(o)m=(b[P+12>>1]&40)!=0;else m=1;B=m&1;C=(v|0)!=0;if(C)m=(b[v+12>>1]&40)!=0;else m=1;n=m&1;A=(M<<16>>16!=0|o)&1;do if(o){z=c[(c[P>>2]|0)+16>>2]|0;q=F+p|0;y=N&65535;km(f,z,q,y);if(b[P+10>>1]&256){if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((c[g+108>>2]|0)+-1|0)*20|0)|0;else m=59308;ca=c[j+36>>2]|0;c[m+12>>2]=ca>>>1;b[m+2>>1]=ca&1}o=a[z>>0]|0;if((o+91&255)<2){m=z;do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2)}else m=z;if(o<<24>>24==-88)o=a[m+38>>0]|0;s:do switch(o<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0){ga=293;break s}o=c[m+44>>2]|0;if(!o){ga=293;break s}m=b[m+32>>1]|0;if(m<<16>>16<=-1)break s;if(!(a[(c[o+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0))ga=293;break}default:ga=293}while(0);do if((ga|0)==293){m=g+108|0;o=c[m>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[m>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=50;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=q;c[ca+(o*20|0)+8>>2]=E;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0;break}else{Di(g,50,q,E,0)|0;break}}while(0);t:do if(!G){x=U+p|0;if(!(N<<16>>16))break;i=z+38|0;t=z+20|0;w=z+20|0;s=0;while(1){o=a[z>>0]|0;if(o<<24>>24==-88)m=a[i>>0]|0;else m=o;switch(m<<24>>24){case -87:{m=t;ga=303;break}case -125:{m=c[w>>2]|0;ga=303;break}default:m=z}u:do if((ga|0)==303){if((c[c[m>>2]>>2]|0)<2){m=z;break}do if(o<<24>>24!=-125){if((a[i>>0]|0)==-125)break;m=c[(c[t>>2]|0)+4+(s*20|0)>>2]|0;break u}while(0);m=c[(c[c[w>>2]>>2]|0)+4+(s*20|0)>>2]|0}while(0);q=x+s|0;r=a[q>>0]|0;o=Xj(m)|0;if(r<<24>>24==0|o<<24>>24==0)if(r<<24>>24==65|((o|r)<<24>>24==0?1:((o&255)+(r&255)&255)<<24>>24==65))ga=321;else ga=311;else if(r<<24>>24==65|r<<24>>24<67&o<<24>>24<67)ga=321;else ga=311;v:do if((ga|0)==311){ga=0;o=a[m>>0]|0;if((o+91&255)<2)do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2);if(o<<24>>24==-88)o=a[m+38>>0]|0;switch(o<<24>>24){case -110:{ga=321;break v}case -109:if((r+-67&255)<2){ga=321;break v}else break v;case -111:switch(r<<24>>24){case 67:case 69:{ga=321;break v}default:break v}case 110:if(r<<24>>24==66){ga=321;break v}else break v;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0){ga=321;break v}else break v;default:break v}}while(0);if((ga|0)==321){ga=0;a[q>>0]=65}s=s+1|0;if((s|0)==(y|0))break t}}while(0);o=y+p|0;m=a[z>>0]|0;if(m<<24>>24==-88)m=a[z+38>>0]|0;switch(m<<24>>24){case -87:{S=z+20|0;ga=328;break}case -125:{S=c[z+20>>2]|0;ga=328;break}default:{}}if((ga|0)==328?(c[c[S>>2]>>2]|0)>=2:0){x=A;y=o;w=1;m=0;break}lm(j,P);x=A;y=o;w=B;m=0}else{if(!(J<<24>>24)){x=A;y=p;w=B;m=0;break}m=F+p|0;o=g+108|0;q=c[o>>2]|0;if((c[g+112>>2]|0)>(q|0)){c[o>>2]=q+1;ca=c[g+104>>2]|0;a[ca+(q*20|0)>>0]=73;b[ca+(q*20|0)+2>>1]=0;c[ca+(q*20|0)+4>>2]=0;c[ca+(q*20|0)+8>>2]=m;c[ca+(q*20|0)+12>>2]=0;c[ca+(q*20|0)+16>>2]=0;a[ca+(q*20|0)+1>>0]=0}else Di(g,73,0,m,0)|0;x=1;y=p+1|0;w=0;m=J}while(0);m=y-(m&255)|0;t=c[T>>2]|0;w:do if((U|0)!=0&(m|0)>0){q=U;o=F;while(1){if((a[q>>0]|0)!=65){i=q;break}r=m+-1|0;o=o+1|0;q=q+1|0;if((m|0)>1)m=r;else{i=q;m=r;break}}x:do if((m|0)>1){q=m;while(1){m=q+-1|0;if((a[i+m>>0]|0)!=65)break x;if((q|0)>2)q=m;else{ga=343;break}}}else ga=343;while(0);if((ga|0)==343)if((m|0)==1)q=1;else break;r=t+108|0;m=c[r>>2]|0;if((c[t+112>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[t+104>>2]|0;a[ca+(m*20|0)>>0]=91;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=o;c[ca+(m*20|0)+8>>2]=q;c[ca+(m*20|0)+12>>2]=0;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(t,91,o,q,0)|0;o=c[t>>2]|0;if(a[o+81>>0]|0){if((q|0)==-12)break;kg(o,q,i);break}if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[t+104>>2]|0;r=o+(m*20|0)|0;do if((q|0)<=-1){s=o+(m*20|0)+1|0;if(a[s>>0]|0)break;if((q|0)==-3){c[o+(m*20|0)+16>>2]=i;a[s>>0]=-3;break w}c[o+(m*20|0)+16>>2]=i;a[s>>0]=q;if((q|0)!=-12)break w;ca=i+12|0;c[ca>>2]=(c[ca>>2]|0)+1;break w}while(0);Ei(t,r,i,q)}while(0);ca=b[_+42>>1]|0;do if(!(ca<<16>>16!=0&(y|0)==(ca&65535|0))){r=g+108|0;do if(c[$>>2]&262144){m=c[r>>2]|0;o=g+112|0;if((c[o>>2]|0)>(m|0)){c[r>>2]=m+1;q=c[g+104>>2]|0;a[q+(m*20|0)>>0]=119;b[q+(m*20|0)+2>>1]=0;c[q+(m*20|0)+4>>2]=Z;c[q+(m*20|0)+8>>2]=0;c[q+(m*20|0)+12>>2]=0;c[q+(m*20|0)+16>>2]=0;a[q+(m*20|0)+1>>0]=0;q=o;break}else{Di(g,119,Z,0,0)|0;q=o;break}}else q=g+112|0;while(0);o=a[44009+(x<<2|aa|w<<1)>>0]|0;m=c[r>>2]|0;if((c[q>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[g+104>>2]|0;a[ca+(m*20|0)>>0]=o;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=Z;c[ca+(m*20|0)+8>>2]=E;c[ca+(m*20|0)+12>>2]=F;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(g,o&255,Z,E,F)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;ca=c[g+104>>2]|0;a[ca+(m*20|0)+1>>0]=-3;c[ca+(m*20|0)+16>>2]=y}while(0);do if(C){y=c[(c[v>>2]|0)+16>>2]|0;w=F+p|0;x=u&65535;km(f,y,w,x);if(b[v+10>>1]&256){if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((c[g+108>>2]|0)+-1|0)*20|0)|0;else m=59308;ca=c[j+36>>2]|0;c[m+12>>2]=ca>>>1;b[m+2>>1]=ca&1}o=a[y>>0]|0;if((o+91&255)<2){m=y;do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2)}else m=y;if(o<<24>>24==-88)o=a[m+38>>0]|0;y:do switch(o<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0){ga=385;break y}o=c[m+44>>2]|0;if(!o){ga=385;break y}m=b[m+32>>1]|0;if(m<<16>>16<=-1)break y;if(!(a[(c[o+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0))ga=385;break}default:ga=385}while(0);do if((ga|0)==385){m=g+108|0;o=c[m>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[m>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=50;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=w;c[ca+(o*20|0)+8>>2]=E;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0;break}else{Di(g,50,w,E,0)|0;break}}while(0);z:do if(!((D|0)==0|u<<16>>16==0)){i=y+38|0;t=y+20|0;u=y+20|0;s=0;do{o=a[y>>0]|0;if(o<<24>>24==-88)m=a[i>>0]|0;else m=o;switch(m<<24>>24){case -87:{m=t;ga=394;break}case -125:{m=c[u>>2]|0;ga=394;break}default:m=y}A:do if((ga|0)==394){if((c[c[m>>2]>>2]|0)<2){m=y;break}do if(o<<24>>24!=-125){if((a[i>>0]|0)==-125)break;m=c[(c[t>>2]|0)+4+(s*20|0)>>2]|0;break A}while(0);m=c[(c[c[u>>2]>>2]|0)+4+(s*20|0)>>2]|0}while(0);q=D+s|0;r=a[q>>0]|0;o=Xj(m)|0;if(r<<24>>24==0|o<<24>>24==0)if(r<<24>>24==65|((o|r)<<24>>24==0?1:((o&255)+(r&255)&255)<<24>>24==65))ga=412;else ga=402;else if(r<<24>>24==65|r<<24>>24<67&o<<24>>24<67)ga=412;else ga=402;B:do if((ga|0)==402){ga=0;o=a[m>>0]|0;if((o+91&255)<2)do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2);if(o<<24>>24==-88)o=a[m+38>>0]|0;switch(o<<24>>24){case -110:{ga=412;break B}case -109:if((r+-67&255)<2){ga=412;break B}else break B;case -111:switch(r<<24>>24){case 67:case 69:{ga=412;break B}default:break B}case 110:if(r<<24>>24==66){ga=412;break B}else break B;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0){ga=412;break B}else break B;default:break B}}while(0);if((ga|0)==412){ga=0;a[q>>0]=65}s=s+1|0}while((s|0)!=(x|0));t=c[T>>2]|0;q=D;m=x;o=w;while(1){if((a[q>>0]|0)!=65){i=q;break}r=m+-1|0;o=o+1|0;q=q+1|0;if((m|0)>1)m=r;else{i=q;m=r;break}}C:do if((m|0)>1){q=m;while(1){m=q+-1|0;if((a[i+m>>0]|0)!=65)break C;if((q|0)>2)q=m;else{ga=421;break}}}else ga=421;while(0);if((ga|0)==421)if((m|0)==1)q=1;else break;r=t+108|0;m=c[r>>2]|0;if((c[t+112>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[t+104>>2]|0;a[ca+(m*20|0)>>0]=91;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=o;c[ca+(m*20|0)+8>>2]=q;c[ca+(m*20|0)+12>>2]=0;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(t,91,o,q,0)|0;o=c[t>>2]|0;if(a[o+81>>0]|0){if((q|0)==-12)break;kg(o,q,i);break}if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[t+104>>2]|0;r=o+(m*20|0)|0;do if((q|0)<=-1){s=o+(m*20|0)+1|0;if(a[s>>0]|0)break;if((q|0)==-3){c[o+(m*20|0)+16>>2]=i;a[s>>0]=-3;break z}c[o+(m*20|0)+16>>2]=i;a[s>>0]=q;if((q|0)!=-12)break z;ca=i+12|0;c[ca>>2]=(c[ca>>2]|0)+1;break z}while(0);Ei(t,r,i,q)}while(0);p=x+p|0;m=a[y>>0]|0;if(m<<24>>24==-88)m=a[y+38>>0]|0;switch(m<<24>>24){case -87:{W=y+20|0;ga=442;break}case -125:{W=c[y+20>>2]|0;ga=442;break}default:{}}if((ga|0)==442?(c[c[W>>2]>>2]|0)>=2:0){n=1;break}lm(j,v)}else{if(!(R<<24>>24))break;m=F+p|0;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=73;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=0;c[ca+(o*20|0)+8>>2]=m;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0}else Di(g,73,0,m,0)|0;n=0;p=p+1|0}while(0);D:do if(!G){do if(da|0){if(c[da+480>>2]|0){Xd(da,U);break D}m=U;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;ca=da+300|0;c[U>>2]=c[ca>>2];c[ca>>2]=U;break D}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](U);break}else{ca=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);break}}while(0);E:do if(D|0){do if(da|0){if(c[da+480>>2]|0){Xd(da,D);break E}m=D;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;da=da+300|0;c[D>>2]=c[da>>2];c[da>>2]=D;break E}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{da=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);o=g+108|0;m=c[o>>2]|0;c[j+52>>2]=m;do if(p|0){n=a[44017+(n|aa<<1)>>0]|0;if((c[g+112>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=n;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=E;c[da+(m*20|0)+12>>2]=F;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,n&255,Z,E,F)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;da=c[g+104>>2]|0;a[da+(m*20|0)+1>>0]=-3;c[da+(m*20|0)+16>>2]=p}while(0);do if(c[$>>2]&262144|0){m=c[o>>2]|0;if((c[g+112>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=119;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=1;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0;break}else{Di(g,119,Z,1,0)|0;break}}while(0);if((c[$>>2]&64|0)!=0?(b[X>>1]&32)==0:0)w=1;else ga=481;F:do if((ga|0)==481){p=Y+12|0;m=c[p>>2]|0;if(c[m+36>>2]&32|0){if((ia|0)==(Z|0)){w=0;break}m=c[m+8>>2]|0;G:do if(!m)m=0;else while(1){da=m+55|0;if(((d[da>>0]|d[da+1>>0]<<8)&3)==2)break G;m=c[m+20>>2]|0;if(!m){m=0;break}}while(0);x=m+50|0;i=b[x>>1]|0;p=i&65535;do if(i<<16>>16==1){n=f+19|0;p=a[n>>0]|0;if(!(p<<24>>24)){n=(c[V>>2]|0)+1|0;c[V>>2]=n;ga=554;break}else{ga=p+-1<<24>>24;a[n>>0]=ga;n=c[f+148+((ga&255)<<2)>>2]|0;ga=554;break}}else{q=f+32|0;n=c[q>>2]|0;r=f+28|0;s=c[r>>2]|0;if((s|0)<(p|0)){n=c[V>>2]|0;c[V>>2]=n+p;n=n+1|0}else{c[q>>2]=n+p;c[r>>2]=s-p}if(i<<16>>16){ga=554;break}q=0;p=g+112|0}while(0);if((ga|0)==554){t=m+4|0;u=Y+52|0;p=g+112|0;v=Y+4|0;w=g+104|0;i=0;do{r=b[(c[t>>2]|0)+(i<<1)>>1]|0;m=b[u>>1]|0;H:do if(!(m<<16>>16))m=-1;else{s=c[v>>2]|0;q=m&65535;m=0;while(1){if((b[s+(m<<1)>>1]|0)==r<<16>>16)break H;m=m+1|0;if(m>>>0>=q>>>0){m=-1;break}}}while(0);m=m<<16>>16;q=i+n|0;r=c[o>>2]|0;if((c[p>>2]|0)>(r|0)){c[o>>2]=r+1;da=c[w>>2]|0;a[da+(r*20|0)>>0]=90;b[da+(r*20|0)+2>>1]=0;c[da+(r*20|0)+4>>2]=Z;c[da+(r*20|0)+8>>2]=m;c[da+(r*20|0)+12>>2]=q;c[da+(r*20|0)+16>>2]=0;a[da+(r*20|0)+1>>0]=0}else Di(g,90,Z,m,q)|0;i=i+1|0;m=b[x>>1]|0}while(i>>>0<(m&65535)>>>0);q=m&65535}m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=28;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=ia;c[da+(m*20|0)+8>>2]=pa;c[da+(m*20|0)+12>>2]=n;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,28,ia,pa,n)|0;if(a[(c[g>>2]|0)+81>>0]|0){w=0;break}w=c[g+104>>2]|0;a[w+(m*20|0)+1>>0]=-3;c[w+(m*20|0)+16>>2]=q;w=0;break}m=e[X>>1]|0;do if(!(m&1024)){if(m&4096|0?(a[h+49>>0]|0)==1:0)break;m=c[h>>2]|0;u=c[m+8>>2]|0;t=u+108|0;n=c[t>>2]|0;if((c[u+112>>2]|0)>(n|0)){c[t>>2]=n+1;da=c[u+104>>2]|0;a[da+(n*20|0)>>0]=-122;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=Z;c[da+(n*20|0)+8>>2]=0;c[da+(n*20|0)+12>>2]=ia;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(u,134,Z,0,ia)|0;if(!(b[X>>1]&32)){w=0;break F}da=c[m+116>>2]|0;if(c[((da|0)==0?m:da)+80>>2]|0){w=0;break F}q=c[m>>2]|0;s=(c[p>>2]|0)+42|0;i=(b[s>>1]<<2)+4|0;I:do if(!q){da=Sv(i|0,0,-1,-1)|0;ca=L()|0;if(ca>>>0>0|(ca|0)==0&da>>>0>2147483390){w=0;break F}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](i)|0;ga=520;break}m=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0<i>>>0)c[14985]=i;p=59064;n=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&n>>>0>0){da=c[14978]|0;ca=Tv(n|0,p|0,m|0,((m|0)<0)<<31>>31|0)|0;ba=L()|0;c[14768]=((ba|0)<0|(ba|0)==0&ca>>>0<=da>>>0)&1}n=Wa[c[29340>>2]&127](m)|0;if(!n){w=0;break F}m=Wa[c[29352>>2]&127](n)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){r=n;break}c[14987]=m;r=n}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){w=0;break F}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<i>>>0:0))){n=q+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=q+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=520;break I}n=q+296|0;m=c[n>>2]|0;if(!m){m=q+292|0;break}else{c[n>>2]=c[m>>2];ga=q+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=520;break I}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(q,i,0)|0;ga=520}while(0);if((ga|0)==520)if(!m){w=0;break F}else r=m;gw(r|0,0,i|0)|0;c[r>>2]=b[s>>1];m=b[Y+52>>1]|0;if((m&65535)>1){q=c[Y+4>>2]|0;p=(m&65535)+-1|0;m=0;do{n=b[q+(m<<1)>>1]|0;if(n<<16>>16>-1){m=m+1|0;c[r+((n<<16>>16)+1<<2)>>2]=m}else m=m+1|0}while((m|0)<(p|0))}n=c[u>>2]|0;if(!(a[n+81>>0]|0)){m=(c[t>>2]|0)+-1|0;n=c[u+104>>2]|0;p=n+(m*20|0)+1|0;if(!(a[p>>0]|0)){c[n+(m*20|0)+16>>2]=r;a[p>>0]=-15;w=0;break F}else{Ei(u,n+(m*20|0)|0,r,-15);w=0;break F}}do if(n|0){if(c[n+480>>2]|0){Xd(n,r);w=0;break F}m=r;if((c[n+304>>2]|0)>>>0>m>>>0)break;if((c[n+308>>2]|0)>>>0<=m>>>0)break;w=n+300|0;c[r>>2]=c[w>>2];c[w>>2]=r;w=0;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);w=0;break F}else{w=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);w=0;break F}}while(0);p=(c[V>>2]|0)+1|0;c[V>>2]=p;m=c[o>>2]|0;n=g+112|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=-121;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=p;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,135,Z,p,0)|0;m=c[o>>2]|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;w=c[g+104>>2]|0;a[w+(m*20|0)>>0]=31;b[w+(m*20|0)+2>>1]=0;c[w+(m*20|0)+4>>2]=ia;c[w+(m*20|0)+8>>2]=0;c[w+(m*20|0)+12>>2]=p;c[w+(m*20|0)+16>>2]=0;a[w+(m*20|0)+1>>0]=0;w=0;break}else{Di(g,31,ia,0,p)|0;w=0;break}}while(0);do if(!(c[j>>2]|0)){if(b[X>>1]&32)break;r=c[Y+40>>2]|0;do if(r|0){c[ma>>2]=0;c[ma+4>>2]=0;c[ma+8>>2]=0;c[ma+12>>2]=0;c[ma+16>>2]=0;c[ma+20>>2]=0;c[ma+4>>2]=147;c[ma+24>>2]=na;c[na+4>>2]=ia;c[na+8>>2]=Z;if((c[r>>2]|0)<=0)break;s=Y+4|0;i=na+12|0;t=h+16|0;u=h+8|0;v=h+12|0;q=0;do{J:do if((b[(c[s>>2]|0)+(q<<1)>>1]|0)==-2){c[i>>2]=q;c[na>>2]=c[r+4+(q*20|0)>>2];m=c[t>>2]|0;if(m|0)_j(ma,m)|0;n=c[u>>2]|0;K:do if(n|0){m=c[n>>2]|0;if((m|0)<=0)break;n=n+4|0;while(1){p=c[n>>2]|0;if(p|0?_j(ma,p)|0:0)break K;if((m|0)>1){m=m+-1|0;n=n+20|0}else break}}while(0);n=c[v>>2]|0;if(!n)break;m=c[n>>2]|0;if((m|0)<=0)break;n=n+4|0;while(1){p=c[n>>2]|0;if(p|0?_j(ma,p)|0:0)break J;if((m|0)>1){m=m+-1|0;n=n+20|0}else break}}while(0);q=q+1|0}while((q|0)<(c[r>>2]|0))}while(0)}while(0);m=c[Y+36>>2]|0;if(m|0)mm(m,ia,oa);m=c[$>>2]|0;do if(!(m&4096)){n=j+45|0;if(!aa){a[n>>0]=5;break}else{a[n>>0]=4;break}}else a[j+45>>0]=-86;while(0);c[j+48>>2]=Z;a[j+46>>0]=m>>>16&1;if(!(m&15))a[j+47>>0]=1;E=w?0:Y}else{q=c[ea+8+(fa*72|0)+28>>2]|0;m=c[ea+8+(fa*72|0)+24>>2]|0;o=g+108|0;n=c[o>>2]|0;p=g+112|0;if((c[p>>2]|0)>(n|0)){c[o>>2]=n+1;da=c[g+104>>2]|0;a[da+(n*20|0)>>0]=13;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=q;c[da+(n*20|0)+8>>2]=0;c[da+(n*20|0)+12>>2]=m;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(g,13,q,0,m)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=14;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=q;c[da+(m*20|0)+8>>2]=z;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,14,q,z,0)|0;c[j+52>>2]=m;a[j+45>>0]=11;E=0}while(0);H=h+100|0;I=h+92|0;D=ea+8+(fa*72|0)+36|0;w=h+50|0;x=j+4|0;y=na+4|0;z=ma+4|0;A=ma+24|0;v=ma+20|0;B=j+36|0;F=g+112|0;G=g+104|0;m=(E|0)==0?2:1;while(1){n=c[I>>2]|0;if((n|0)<=0){ga=813;break}C=(m|0)==1;u=(m|0)<3;m=0;t=c[H>>2]|0;while(1){i=t+10|0;p=b[i>>1]|0;L:do if(!(p&6)){h=t+40|0;fa=qa;if(!((c[fa>>2]&c[h>>2]|0)==0?(c[fa+4>>2]&c[h+4>>2]|0)==0:0)){a[w>>0]=1;break}s=c[t>>2]|0;if(a[D>>0]&8?(c[s+4>>2]&1|0)==0:0)break;do if(C){h=c[x>>2]|0;c[ma>>2]=0;c[ma+4>>2]=0;c[ma+8>>2]=0;c[ma+12>>2]=0;c[ma+16>>2]=0;c[ma+20>>2]=0;c[y>>2]=h;c[na>>2]=E;c[z>>2]=148;c[A>>2]=na;if((s|0)!=0?(_j(ma,s)|0,(a[v>>0]|0)!=0):0){m=2;break L}else{ga=797;break}}else if(u)ga=797;while(0);if((ga|0)==797){ga=0;p=b[i>>1]|0;if(p&4096){m=(m|0)==0?3:m;break}}if((p&512)!=0?(ha=c[B>>2]|0,(ha|0)!=0):0){q=(ha<<1&2)+18|0;r=ha>>>1;p=c[o>>2]|0;if((c[F>>2]|0)>(p|0)){c[o>>2]=p+1;h=c[G>>2]|0;a[h+(p*20|0)>>0]=q;b[h+(p*20|0)+2>>1]=0;c[h+(p*20|0)+4>>2]=r;c[h+(p*20|0)+8>>2]=0;c[h+(p*20|0)+12>>2]=0;c[h+(p*20|0)+16>>2]=0;a[h+(p*20|0)+1>>0]=0}else p=Di(g,q,r,0,0)|0;Tj(f,s,pa,16);if(p|0){q=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))p=(c[G>>2]|0)+(((p|0)<0?q+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=q}}else Tj(f,s,pa,16);b[i>>1]=b[i>>1]|4}while(0);if((n|0)>1){t=t+48|0;n=n+-1|0}else break}if((m|0)<=0){ga=812;break}}if((ga|0)==812){m=c[I>>2]|0;if((m|0)>0){i=ma+4|0;t=ma+12|0;u=ma+16|0;v=ma+8|0;w=ma+20|0;x=ma+24|0;y=ma+28|0;z=ma+17|0;A=ma+18|0;B=ma+72|0;C=na+12|0;s=c[H>>2]|0;while(1){do if((((((b[s+10>>1]&6)==0?(ha=e[s+12>>1]|0,!((ha&130|0)==0|(ha&2048|0)==0)):0)?(c[s+20>>2]|0)==(ia|0):0)?(c[j>>2]|0)==0:0)?(ja=c[s>>2]|0,ka=c[s+28>>2]|0,c[ma>>2]=oa,c[i>>2]=oa,c[t>>2]=0,a[u>>0]=0,c[v>>2]=0,c[w>>2]=131,c[x>>2]=0,c[y>>2]=ia,a[z>>0]=1,a[A>>0]=1,(ka|0)!=-2):0)?(b[B>>1]=ka,la=Tl(ma)|0,la|0):0){p=0;n=la;while(1){r=n+32|0;q=c[r>>2]|0;r=c[r+4>>2]|0;if((q&k|0)==0&(r&l|0)==0){if((q|0)==0&(r|0)==0?b[n+12>>1]&130:0){ga=825;break}p=(p|0)==0?n:p}n=Tl(ma)|0;if(!n){ga=829;break}}if((ga|0)==825)ga=0;else if((ga|0)==829){ga=0;if(!p)break;else n=p}if(b[n+10>>1]&4)break;if(b[n+12>>1]&1){n=c[n>>2]|0;if((c[n+4>>2]&2048|0)!=0?(c[c[c[n+20>>2]>>2]>>2]|0)>1:0)break}else n=c[n>>2]|0;E=na;D=E+52|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));c[C>>2]=c[ja+12>>2];Tj(f,na,pa,16);break}while(0);if((m|0)>1){s=s+48|0;m=m+-1|0}else{m=j;break}}}else ga=813}if((ga|0)==813)m=j;n=c[m>>2]|0;if(n|0){m=c[o>>2]|0;c[j+28>>2]=m;if((c[F>>2]|0)>(m|0)){c[o>>2]=m+1;j=c[G>>2]|0;a[j+(m*20|0)>>0]=70;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=1;c[j+(m*20|0)+8>>2]=n;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(g,70,1,n,0)|0;m=c[I>>2]|0;if((m|0)>0){o=c[H>>2]|0;p=0;while(1){n=o+10|0;if((b[n>>1]&6)==0?(j=o+40|0,g=qa,(c[g>>2]&c[j>>2]|0)==0?(c[g+4>>2]&c[j+4>>2]|0)==0:0):0){Tj(f,c[o>>2]|0,pa,16);b[n>>1]=b[n>>1]|4;m=c[I>>2]|0}p=p+1|0;if((p|0)>=(m|0))break;else o=o+48|0}}}f=qa;qa=c[f+4>>2]|0;f=c[f>>2]|0;K(qa|0);Ra=ra;return f|0}function Ml(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=d+12|0;h=c[o>>2]|0;m=d+16|0;j=c[m>>2]|0;n=d+20|0;do if((h|0)<(j|0))m=h;else{k=c[n>>2]|0;l=c[c[c[d>>2]>>2]>>2]|0;j=j*96|0;a:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))p=13;else c[n>>2]=0;else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<j>>>0:0))){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=14;break a}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=14;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;p=13}while(0);if((p|0)==13){i=_d(l,j,0)|0;p=14}if((p|0)==14?(c[n>>2]=i,i|0):0){ew(i|0,k|0,(c[o>>2]|0)*48|0)|0;do if(!((k|0)==(d+24|0)|(k|0)==0)){if(c[l+480>>2]|0){Xd(l,k);break}j=k;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);h=c[n>>2]|0;k=h;if((c[l+304>>2]|0)>>>0<=k>>>0?(c[l+308>>2]|0)>>>0>k>>>0:0)h=e[l+276>>1]|0;else h=Wa[c[29352>>2]&127](h)|0;c[m>>2]=(h>>>0)/48|0;m=c[o>>2]|0;break}if(!((f|0)==0|(g&1)==0))ni(l,f);c[n>>2]=k;g=0;return g|0}while(0);l=c[n>>2]|0;c[o>>2]=m+1;b:do if(f){h=c[f+4>>2]|0;if(!(h&262144)){b[l+(m*48|0)+8>>1]=1;if(!(h&4096))break;while(1){if(!(h&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break b}h=c[f+4>>2]|0;if(!(h&4096))break b}}i=c[f+28>>2]|0;j=((i|0)<0)<<31>>31;if(i>>>0<8)if(i>>>0<2)i=-270;else{k=40;do{k=(k&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);k=k&65535;p=48}else{if(i>>>0>255){k=40;do{k=(k&65535)+40|0;p=i;i=bw(i|0,j|0,4)|0;o=j;j=L()|0}while(o>>>0>0|(o|0)==0&p>>>0>4095);k=k&65535}else k=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{k=(k&65535)+10&65535;p=i;i=bw(i|0,j|0,1)|0;o=j;j=L()|0}while(o>>>0>0|(o|0)==0&p>>>0>31);p=48}else p=48}if((p|0)==48)i=(k&65535)+65256+(e[3648+((i&7)<<1)>>1]|0)&65535;b[l+(m*48|0)+8>>1]=i;if(h&4096)do{if(!(h&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break b}h=c[f+4>>2]|0}while((h&4096|0)!=0)}else{b[l+(m*48|0)+8>>1]=1;f=0}while(0);c[l+(m*48|0)>>2]=f;b[l+(m*48|0)+10>>1]=g;c[l+(m*48|0)+4>>2]=d;c[l+(m*48|0)+16>>2]=-1;f=l+(m*48|0)+12|0;h=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));g=m;return g|0}function Nl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0;qa=Ra;Ra=Ra+16|0;q=qa;da=qa+8|0;ea=qa+4|0;p=c[g>>2]|0;la=c[p>>2]|0;ha=c[la>>2]|0;_=ha+81|0;if(a[_>>0]|0){Ra=qa;return}na=g+20|0;t=c[na>>2]|0;w=t+(h*48|0)|0;ga=p+488|0;oa=c[w>>2]|0;pa=oa+12|0;i=c[pa>>2]|0;if(!i){z=0;A=0}else{z=Pl(ga,i)|0;A=L()|0}u=a[oa>>0]|0;s=u&255;a:do switch(u<<24>>24){case 49:{if(ok(la,oa)|0){Ra=qa;return}i=oa+20|0;if(c[oa+4>>2]&2048|0){j=Ol(ga,c[i>>2]|0)|0;i=L()|0;break a}o=c[i>>2]|0;if((o|0)!=0?(j=c[o>>2]|0,(j|0)>0):0){n=0;m=j;j=0;i=0;do{k=c[o+4+(n*20|0)>>2]|0;if(!k){k=0;l=0}else{k=Pl(ga,k)|0;l=L()|0;m=c[o>>2]|0}j=k|j;i=l|i;n=n+1|0}while((n|0)<(m|0))}else{j=0;i=0}break}case 50:{j=0;i=0;break}default:{i=c[oa+16>>2]|0;if(!i){j=0;i=0}else{j=Pl(ga,i)|0;i=L()|0}}}while(0);m=t+(h*48|0)+32|0;c[m>>2]=j;c[m+4>>2]=i;c[ga>>2]=0;m=Pl(ga,oa)|0;n=L()|0;r=t+(h*48|0)+10|0;if(c[ga>>2]|0)b[r>>1]=b[r>>1]|4096;ka=oa+4|0;if(c[ka>>2]&1){j=b[oa+36>>1]|0;k=c[p+492>>2]|0;b:do if((k|0)>0){i=0;while(1){if((c[p+496+(i<<2)>>2]|0)==(j|0))break;i=i+1|0;if((i|0)>=(k|0)){k=0;l=0;break b}}k=cw(1,0,i|0)|0;l=L()|0}else{k=0;l=0}while(0);i=k|m;j=l|n;m=Sv(k|0,l|0,-1,-1)|0;n=L()|0;ja=bw(i|0,j|0,1)|0;ia=L()|0;if(ia>>>0<l>>>0|(ia|0)==(l|0)&ja>>>0<k>>>0){y=i;x=j;ja=m;ia=n}else{cd(la,43561,q);Ra=qa;return}}else{y=m;x=n;ja=0;ia=0}o=t+(h*48|0)+40|0;c[o>>2]=y;c[o+4>>2]=x;o=t+(h*48|0)+20|0;c[o>>2]=-1;c[t+(h*48|0)+16>>2]=-1;m=t+(h*48|0)+12|0;b[m>>1]=0;c:do switch(u<<24>>24){case 45:case 50:case 53:case 54:case 55:case 56:case 57:case 49:{i=c[pa>>2]|0;d:do if(!i)i=0;else while(1){j=c[i+4>>2]|0;if(!(j&4096))break d;if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);j=c[oa+16>>2]|0;e:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break e;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);l=t+(h*48|0)+32|0;v=l;v=((c[v>>2]&z|0)==0?(c[v+4>>2]&A|0)==0:0)?8191:2048;k=c[t+(h*48|0)+24>>2]|0;if((k|0)>0)i=c[(c[i+20>>2]|0)+4+((k+-1|0)*20|0)>>2]|0;k=a[i>>0]|0;n=(s+-54|0)>>>0<4;if(n&k<<24>>24==-87){k=c[(c[i+20>>2]|0)+4>>2]|0;i=k;k=a[k>>0]|0}if(k<<24>>24!=-94){if((!((z|0)==0&(A|0)==0)?(R=Sv(z|0,A|0,-1,-1)|0,(R&z|0)==0&((L()|0)&A|0)==0):0)?Ql(f,z,A,da,i)|0:0){i=c[da>>2]|0;k=c[da+4>>2]|0;fa=51}}else{fa=c[i+28>>2]|0;c[da>>2]=fa;k=b[i+32>>1]|0;c[da+4>>2]=k;i=fa;fa=51}if((fa|0)==51){c[o>>2]=i;c[t+(h*48|0)+28>>2]=k;switch(u<<24>>24){case 49:{i=1;break}case 50:{i=256;break}case 45:{i=128;break}default:i=2<<s+-53&65535}b[m>>1]=i&v}m=u<<24>>24==45;if(m)b[r>>1]=b[r>>1]|2048;do if(!j)i=w;else{k=c[l>>2]|0;l=c[l+4>>2]|0;i=a[j>>0]|0;if(n&i<<24>>24==-87){i=c[(c[j+20>>2]|0)+4>>2]|0;j=i;i=a[i>>0]|0}if(i<<24>>24!=-94){if((k|0)==0&(l|0)==0){i=w;break}R=Sv(k|0,l|0,-1,-1)|0;if(!((R&k|0)==0&((L()|0)&l|0)==0)){i=w;break}if(!(Ql(f,k,l,da,j)|0)){i=w;break}}else{c[da>>2]=c[j+28>>2];c[da+4>>2]=b[j+32>>1]}f:do if((c[o>>2]|0)>-1){if(!oa)s=0;else s=dk(ha,oa,0,0)|0;do if(!(a[_>>0]|0)){i=Ml(g,s,3)|0;if(!i)break;n=c[na>>2]|0;q=n+(i*48|0)|0;c[n+(i*48|0)+16>>2]=h;b[n+(i*48|0)+8>>1]=b[n+(h*48|0)+8>>1]|0;R=n+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;i=n+(i*48|0)+10|0;if(m)b[i>>1]=b[i>>1]|2048;i=n+(h*48|0)|0;R=n+(h*48|0)+10|0;b[R>>1]=b[R>>1]|8;if(b[(c[la>>2]|0)+76>>1]&128){r=0;break f}switch(a[s>>0]|0){case 45:case 53:break;default:{r=0;break f}}if(c[s+4>>2]&1|0){r=0;break f}m=s+12|0;j=c[m>>2]|0;Q=Xj(j)|0;l=s+16|0;k=c[l>>2]|0;R=Xj(k)|0;if(Q<<24>>24!=R<<24>>24?!(Q<<24>>24>66&R<<24>>24>66):0){r=0;break f}g:do if(!(c[j+4>>2]&256)){do if(k|0){if(!(c[k+4>>2]&256))break;j=Yi(la,k)|0;fa=87;break g}while(0);j=Yi(la,j)|0;if(j|0){fa=88;break}j=Yi(la,k)|0;fa=87}else{j=Yi(la,j)|0;fa=87}while(0);if((fa|0)==87?j|0:0)fa=88;do if((fa|0)==88){if((c[j+12>>2]|0)==78?(c[j+8>>2]|0)==0:0)break;k=c[l>>2]|0;j=Yi(la,c[m>>2]|0)|0;if(!j)j=c[(c[la>>2]|0)+8>>2]|0;k=Yi(la,k)|0;if(!k)k=c[(c[la>>2]|0)+8>>2]|0;m=c[j>>2]|0;k=c[k>>2]|0;R=a[m>>0]|0;j=(d[208+(R&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0;if(!(R<<24>>24==0|(j|0)!=0)){l=k;k=m;do{k=k+1|0;l=l+1|0;R=a[k>>0]|0;j=(d[208+(R&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(R<<24>>24==0|(j|0)!=0))}if(j|0){r=0;break f}}while(0);r=n+(h*48|0)+12|0;b[r>>1]=b[r>>1]|2048;r=2048;break f}else{if(!s)break;ni(ha,s)}while(0);Ra=qa;return}else{s=oa;i=w;q=w;r=0}while(0);o=s+16|0;k=(c[o>>2]|0)+4|0;l=c[k>>2]|0;m=l&256;p=s+12|0;n=c[p>>2]|0;j=n;do if((m|0)==(c[n+4>>2]&256|0)){if(m|0){c[k>>2]=l&-257;break}if(!(Yi(la,n)|0)){j=c[p>>2]|0;break}else{j=c[p>>2]|0;R=j+4|0;c[R>>2]=c[R>>2]|256;break}}while(0);R=c[o>>2]|0;c[o>>2]=j;c[p>>2]=R;j=a[s>>0]|0;if((j&255)>53)a[s>>0]=((j&255)+202^2)+54;c[q+20>>2]=c[da>>2];c[q+28>>2]=c[da+4>>2];j=q+32|0;c[j>>2]=ja|z;c[j+4>>2]=ia|A;j=q+40|0;c[j>>2]=y;c[j+4>>2]=x;j=a[s>>0]|0;switch(j<<24>>24){case 49:{j=1;break}case 50:{j=256;break}case 45:{j=128;break}default:j=2<<(j&255)+-53}b[q+12>>1]=j+r&(v&65535)}while(0);break}default:{switch(a[oa>>0]|0){case 48:{if((a[g+8>>0]|0)!=44){i=w;break c}k=c[oa+20>>2]|0;l=oa+36|0;i=c[pa>>2]|0;if(!i)j=0;else j=dk(ha,i,0,0)|0;i=c[k+4>>2]|0;if(!i)i=0;else i=dk(ha,i,0,0)|0;i=ej(la,57,j,i)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[ka>>2]&1;b[i+36>>1]=b[l>>1]|0}R=Ml(g,i,3)|0;Nl(f,g,R);i=c[na>>2]|0;c[i+(R*48|0)+16>>2]=h;b[i+(R*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;i=i+(h*48|0)+14|0;a[i>>0]=(a[i>>0]|0)+1<<24>>24;i=c[pa>>2]|0;if(!i)j=0;else j=dk(ha,i,0,0)|0;i=c[k+24>>2]|0;if(!i)i=0;else i=dk(ha,i,0,0)|0;i=ej(la,55,j,i)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[ka>>2]&1;b[i+36>>1]=b[l>>1]|0}R=Ml(g,i,3)|0;Nl(f,g,R);i=c[na>>2]|0;c[i+(R*48|0)+16>>2]=h;b[i+(R*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;R=i+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;i=i+(h*48|0)|0;break c}case 43:break;default:{i=w;break c}}N=c[g>>2]|0;O=c[N>>2]|0;P=c[O>>2]|0;H=c[na>>2]|0;Q=c[H+(h*48|0)>>2]|0;h:do if(!P){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](416)|0;fa=146;break}i=Wa[c[29356>>2]&127](416)|0;if((c[14985]|0)>>>0<416)c[14985]=416;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){fa=c[14978]|0;J=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;I=L()|0;c[14768]=((I|0)<0|(I|0)==0&J>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;fa=148}else fa=148}else fa=147}else{if(c[P+272>>2]|0){if(a[P+81>>0]|0){fa=147;break}}else{do if((e[P+276>>1]|0)>=416){j=P+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];fa=P+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=146;break h}j=P+296|0;i=c[j>>2]|0;if(!i){i=P+292|0;break}else{c[j>>2]=c[i>>2];fa=P+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=146;break h}}else i=P+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(P,416,0)|0;fa=146}while(0);if((fa|0)==146)if(!i)fa=147;else fa=148;i:do if((fa|0)==147)c[H+(h*48|0)+28>>2]=0;else if((fa|0)==148){gw(i+8|0,0,408)|0;c[H+(h*48|0)+28>>2]=i;j=H+(h*48|0)+10|0;b[j>>1]=b[j>>1]|16;j=i+24|0;gw(j|0,0,384)|0;c[i>>2]=N;a[i+9>>0]=0;c[i+4>>2]=0;I=i+12|0;c[I>>2]=0;c[i+16>>2]=8;J=i+20|0;c[J>>2]=j;Il(i,Q,43);j=c[I>>2]|0;if((j|0)>0)do{G=j;j=j+-1|0;Nl(f,i,j)}while((G|0)>1);y=P+81|0;if(!(a[y>>0]|0)){j=c[I>>2]|0;if((j|0)>0){z=P+272|0;A=P+276|0;B=N+492|0;C=P+288|0;D=P+300|0;E=P+296|0;F=P+284|0;G=P+292|0;x=c[J>>2]|0;v=-1;l=-1;n=-1;o=-1;while(1){w=j;j=j+-1|0;m=x+12|0;u=b[m>>1]|0;j:do if(!(u&511)){do if(c[z>>2]|0)if(!(a[y>>0]|0))fa=164;else{n=0;o=0;p=v;break j}else{if((e[A>>1]|0)>=408){k=c[D>>2]|0;if(k|0){c[D>>2]=c[k>>2];c[F>>2]=(c[F>>2]|0)+1;break}k=c[E>>2]|0;if(!k)k=G;else{c[E>>2]=c[k>>2];c[F>>2]=(c[F>>2]|0)+1;break}}else k=C;c[k>>2]=(c[k>>2]|0)+1;fa=164}while(0);if((fa|0)==164){fa=0;k=_d(P,408,0)|0}if(!k){n=0;o=0;p=v}else{c[x+28>>2]=k;n=x+10|0;b[n>>1]=b[n>>1]|32;b[m>>1]=1024;m=k+24|0;gw(m|0,0,384)|0;c[k>>2]=c[g>>2];a[k+9>>0]=0;n=k+4|0;c[n>>2]=0;o=k+12|0;c[o>>2]=0;c[k+16>>2]=8;p=k+20|0;c[p>>2]=m;Il(k,c[x>>2]|0,44);m=c[o>>2]|0;if((m|0)>0)do{u=m;m=m+-1|0;Nl(f,k,m)}while((u|0)>1);c[n>>2]=g;k:do if((a[y>>0]|0)==0?(K=c[o>>2]|0,(K|0)>0):0){q=c[p>>2]|0;r=0;k=0;m=0;while(1){switch(a[c[q>>2]>>0]|0){case 45:case 50:case 53:case 54:case 55:case 56:case 57:case 49:{fa=174;break}default:if((b[q+12>>1]|0)==64)fa=174}if((fa|0)==174){fa=0;o=c[q+20>>2]|0;p=c[B>>2]|0;l:do if((p|0)>0){n=0;while(1){if((c[N+496+(n<<2)>>2]|0)==(o|0))break;n=n+1|0;if((n|0)>=(p|0)){n=0;o=0;break l}}n=cw(1,0,n|0)|0;o=L()|0}else{n=0;o=0}while(0);k=n|k;m=o|m}r=r+1|0;if((r|0)>=(K|0))break k;else q=q+48|0}}else{k=0;m=0}while(0);n=0;o=0;p=k&v;l=m&l}}else{q=b[x+10>>1]|0;if(!(q&8)){m=c[x+20>>2]|0;s=c[B>>2]|0;r=(s|0)>0;m:do if(r){k=0;while(1){if((c[N+496+(k<<2)>>2]|0)==(m|0))break;k=k+1|0;if((k|0)>=(s|0)){p=0;t=0;break m}}p=cw(1,0,k|0)|0;t=L()|0}else{p=0;t=0}while(0);if(!(q&2))k=t;else{m=c[(c[J>>2]|0)+((c[x+16>>2]|0)*48|0)+20>>2]|0;n:do if(r){k=0;while(1){if((c[N+496+(k<<2)>>2]|0)==(m|0))break;k=k+1|0;if((k|0)>=(s|0)){k=0;m=0;break n}}k=cw(1,0,k|0)|0;m=L()|0}else{k=0;m=0}while(0);p=k|p;k=m|t}u=(u&2)==0;n=u?0:p&n;o=u?0:k&o;p=p&v;l=k&l}else p=v}while(0);k=(p|0)!=0|(l|0)!=0;if(!(k&(w|0)>1))break;else{x=x+48|0;v=p}}K=i+408|0;c[K>>2]=p;c[K+4>>2]=l;b[H+(h*48|0)+12>>1]=512;if(k)fa=198;else r=n}else{n=i+408|0;c[n>>2]=-1;c[n+4>>2]=-1;b[H+(h*48|0)+12>>1]=512;n=-1;o=-1;fa=198}o:do if((fa|0)==198){a[g+9>>0]=1;if((c[I>>2]|0)==2){j=0;k=c[J>>2]|0;while(1){m=j+1|0;if((b[k+12>>1]|0)!=1024)if(!j)j=k;else{r=n;break o}else{i=c[k+28>>2]|0;if((c[i+12>>2]|0)<=(j|0)){r=n;break o}j=(c[i+20>>2]|0)+(j*48|0)|0}if(!j){r=n;break o}l=0;while(1){if((b[k+60>>1]|0)==1024){i=c[k+76>>2]|0;if((c[i+12>>2]|0)<=(l|0))break;i=(c[i+20>>2]|0)+(l*48|0)|0;if(!i)break}else if(!l)i=k+48|0;else break;Rl(f,g,j,i);l=l+1|0;k=c[J>>2]|0}j=m}}else r=n}while(0);if(!((r|0)==0&(o|0)==0)?(R=N+492|0,M=c[I>>2]|0,(M|0)>0):0){n=M;i=c[J>>2]|0;while(1){k=n+-1|0;q=i+10|0;b[q>>1]=b[q>>1]&-65;q=c[i+20>>2]|0;if((q|0)!=-1){l=c[R>>2]|0;p:do if((l|0)>0){j=0;while(1){if((c[N+496+(j<<2)>>2]|0)==(q|0))break;j=j+1|0;if((j|0)>=(l|0)){j=0;l=0;break p}}j=cw(1,0,j|0)|0;l=L()|0}else{j=0;l=0}while(0);if(!((j&r|0)==0&(l&o|0)==0))break}if((n|0)>1){n=k;i=i+48|0}else break i}l=c[i+28>>2]|0;m=c[(c[i>>2]|0)+12>>2]|0;if((n|0)>=1){q:do if((l|0)==-2){j=q;while(1){if((j|0)==(q|0)){if((c[i+28>>2]|0)!=-2){fa=242;break q}if(bk(O,c[(c[i>>2]|0)+12>>2]|0,m,-1)|0){fa=242;break q}M=c[i>>2]|0;K=Xj(c[M+16>>2]|0)|0;if(!(K<<24>>24==0|K<<24>>24==(Xj(c[M+12>>2]|0)|0)<<24>>24)){fa=242;break q}M=i+10|0;b[M>>1]=b[M>>1]|64}else{M=i+10|0;b[M>>1]=b[M>>1]&-65}if((k|0)<=0)break q;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}else{j=q;while(1){if((j|0)==(q|0)){if((c[i+28>>2]|0)!=(l|0)){fa=242;break q}M=c[i>>2]|0;K=Xj(c[M+16>>2]|0)|0;if(!(K<<24>>24==0|K<<24>>24==(Xj(c[M+12>>2]|0)|0)<<24>>24)){fa=242;break q}M=i+10|0;b[M>>1]=b[M>>1]|64}else{M=i+10|0;b[M>>1]=b[M>>1]&-65}if((k|0)<=0)break q;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}while(0);r:do if((fa|0)==242){i=c[I>>2]|0;if((i|0)<=0)break i;n=i;i=c[J>>2]|0;while(1){k=n+-1|0;p=i+10|0;b[p>>1]=b[p>>1]&-65;p=c[i+20>>2]|0;if((p|0)!=(q|0)){l=c[R>>2]|0;s:do if((l|0)>0){j=0;while(1){if((c[N+496+(j<<2)>>2]|0)==(p|0))break;j=j+1|0;if((j|0)>=(l|0)){j=0;l=0;break s}}j=cw(1,0,j|0)|0;l=L()|0}else{j=0;l=0}while(0);if(!((j&r|0)==0&(l&o|0)==0))break}if((n|0)>1){n=k;i=i+48|0}else break i}l=c[i+28>>2]|0;m=c[(c[i>>2]|0)+12>>2]|0;if((n|0)<1)break i;if((l|0)!=-2){j=p;while(1){if((j|0)==(p|0)){if((c[i+28>>2]|0)!=(l|0))break i;R=c[i>>2]|0;M=Xj(c[R+16>>2]|0)|0;if(!(M<<24>>24==0|M<<24>>24==(Xj(c[R+12>>2]|0)|0)<<24>>24))break i;R=i+10|0;b[R>>1]=b[R>>1]|64}else{R=i+10|0;b[R>>1]=b[R>>1]&-65}if((k|0)<=0)break r;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}j=p;while(1){if((j|0)==(p|0)){if((c[i+28>>2]|0)!=-2)break i;if(bk(O,c[(c[i>>2]|0)+12>>2]|0,m,-1)|0)break i;R=c[i>>2]|0;M=Xj(c[R+16>>2]|0)|0;if(!(M<<24>>24==0|M<<24>>24==(Xj(c[R+12>>2]|0)|0)<<24>>24))break i;R=i+10|0;b[R>>1]=b[R>>1]|64}else{R=i+10|0;b[R>>1]=b[R>>1]&-65}if((k|0)<=0)break r;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}while(0);i=c[I>>2]|0;if((i|0)>0){k=0;j=0;m=c[J>>2]|0;while(1){l=i;i=i+-1|0;if(b[m+10>>1]&64){k=c[(c[m>>2]|0)+16>>2]|0;if(!k)k=0;else k=dk(P,k,0,0)|0;j=nj(c[c[N>>2]>>2]|0,j,k)|0;k=c[(c[m>>2]|0)+12>>2]|0}if((l|0)<=1)break;else m=m+48|0}if(!k)i=0;else i=dk(P,k,0,0)|0}else{j=0;i=0}i=ej(O,49,i,0)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[Q+4>>2]&1;b[i+36>>1]=b[Q+36>>1]|0;c[i+20>>2]=j;Q=Ml(g,i,3)|0;Nl(f,g,Q);R=c[na>>2]|0;c[R+(Q*48|0)+16>>2]=h;b[R+(Q*48|0)+8>>1]=b[R+(h*48|0)+8>>1]|0;R=R+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;break}if(j|0)ri(P,j)}}}}while(0);i=(c[na>>2]|0)+(h*48|0)|0}}while(0);C=g+8|0;t:do if((a[C>>0]|0)==44){A=c[la>>2]|0;u:do if((((a[oa>>0]|0)==-95?(Z=oa+20|0,S=c[Z>>2]|0,(S|0)!=0):0)?(T=c[S>>2]|0,U=Jd(A,c[oa+8>>2]|0,T,1,0)|0,(U|0)!=0):0)?(V=c[U+4>>2]|0,(V&4|0)!=0):0){l=c[Z>>2]|0;if((T|0)>=3){j=c[l+44>>2]|0;if((a[j>>0]|0)!=110)break;j=c[j+8>>2]|0;k=a[j>>0]|0;if(!(k<<24>>24))break;if(a[j+1>>0]|0)break}else k=0;w=c[U+8>>2]|0;u=a[w>>0]|0;v=a[w+1>>0]|0;w=a[w+2>>0]|0;B=V&8;y=c[l+24>>2]|0;j=c[l+4>>2]|0;v:do if(!j)z=0;else while(1){l=c[j+4>>2]|0;if(!(l&4096)){z=j;break v}if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){z=0;break}}while(0);j=a[z>>0]|0;x=j<<24>>24==-108;do if(x){if(!(0==0?(c[A+32>>2]&8388608|0)==0:0))break u;j=c[la+220>>2]|0;q=b[z+32>>1]|0;r=q<<16>>16;w:do if((j|0)!=0?(V=c[j+100>>2]|0,X=r+-1|0,W=V+(X*40|0)|0,X=V+(X*40|0)+8|0,(b[X>>1]&1)==0):0){p=c[j>>2]|0;x:do if(!p){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](40)|0;fa=300;break}j=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){V=c[14978]|0;U=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;T=L()|0;c[14768]=((T|0)<0|(T|0)==0&U>>>0<=V>>>0)&1}l=Wa[c[29340>>2]&127](j)|0;if(!l){j=0;m=0;n=0;break w}j=Wa[c[29352>>2]&127](l)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){o=l;break}c[14987]=j;o=l}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){j=0;m=0;n=0;break w}}else{do if((e[p+276>>1]|0)>=40){l=p+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];fa=p+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=300;break x}l=p+296|0;j=c[l>>2]|0;if(!j){j=p+292|0;break}else{c[l>>2]=c[j>>2];fa=p+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=300;break x}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,40,0)|0;fa=300}while(0);if((fa|0)==300)if(!j){j=0;m=0;n=0;break}else o=j;j=o;l=j+40|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));n=o+8|0;b[n>>1]=1;c[o+32>>2]=p;c[o>>2]=c[W>>2];c[o+4>>2]=c[W+4>>2];c[o+8>>2]=c[W+8>>2];c[o+12>>2]=c[W+12>>2];c[o+16>>2]=c[W+16>>2];j=b[n>>1]&-1025;b[n>>1]=j;j=j&65535;y:do if(j&18|0){if(b[X>>1]&2048)break;l=(j|4096)&65535;b[n>>1]=l;do if(j&16384){m=o+12|0;j=(c[o>>2]|0)+(c[m>>2]|0)|0;if((j|0)<1)if(!(l&16)){fa=309;break}else j=1;if(Eg(o,j,1)|0)break y;gw((c[o+16>>2]|0)+(c[m>>2]|0)|0,0,c[o>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+(c[o>>2]|0);j=b[n>>1]&-16897;b[n>>1]=j;if(!(c[o+24>>2]|0)){fa=309;break}if((c[o+16>>2]|0)!=(c[o+20>>2]|0))fa=309}else fa=309;while(0);if((fa|0)==309){if(Jg(o)|0)break;j=b[n>>1]|0}b[n>>1]=j&-4097}while(0);j=b[n>>1]|0;if((j&15|16)<<16>>16!=18){j=0;m=o;n=o;break}do if((j&514)==514){if((a[o+10>>0]|0)!=1)break;j=c[o+16>>2]|0;m=o;n=o;break w}while(0);if(j&1){j=0;m=o;n=o;break}j=Gg(o,1)|0;m=o;n=o}else{j=0;m=0;n=0}while(0);l=c[la+8>>2]|0;if(q<<16>>16>31){s=l+208|0;c[s>>2]=c[s>>2]|-2147483648;s=m;t=n;break}else{s=l+208|0;c[s>>2]=c[s>>2]|1<<r+-1;s=m;t=n;break}}else{if(j<<24>>24!=110)break u;s=0;j=c[z+8>>2]|0;t=0}while(0);do if((j|0)!=0?(Y=a[j>>0]|0,Y<<24>>24!=w<<24>>24&((Y<<24>>24==v<<24>>24|(Y<<24>>24==0?1:Y<<24>>24==u<<24>>24))^1)):0){l=0;n=Y;do{m=l+1|0;if(n<<24>>24==k<<24>>24)l=(a[j+m>>0]|0)==0?m:l+2|0;else l=m;n=a[j+l>>0]|0;m=n<<24>>24==u<<24>>24}while(n<<24>>24!=w<<24>>24&((n<<24>>24==v<<24>>24|(n<<24>>24==0|m))^1));if(((l|0)!=0?(a[j+(l+-1)>>0]|0)!=-1:0)?!((l|0)<2?Y<<24>>24==k<<24>>24:0):0){if(m)q=(a[j+(l+1)>>0]|0)==0&1;else q=0;c[da>>2]=j;r=(Eu(j)|0)&1073741823;c[da+4>>2]=r;r=oj(A,110,da,0)|0;z:do if(r|0){p=c[r+8>>2]|0;a[p+l>>0]=0;if((l|0)>0){o=k&255;m=0;n=0;while(1){Y=n+((a[p+n>>0]|0)==(o|0)&1)|0;k=m+1|0;a[p+m>>0]=a[p+Y>>0]|0;n=Y+1|0;if((n|0)>=(l|0))break;else m=k}}else k=0;a[p+k>>0]=0;Y=a[p>>0]|0;if(!(Y<<24>>24==45|((Y&255)+-48|0)>>>0<10)?!((k|0)==1&Y<<24>>24==47):0)break;do if((a[y>>0]|0)==-94){if((Xj(y)|0)<<24>>24!=66)break;if(!(c[(c[y+44>>2]|0)+56>>2]|0))break z}while(0);ni(A,r);if(!s)break u;if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,t);break u}k=t;if((c[j+304>>2]|0)>>>0>k>>>0)break;if((c[j+308>>2]|0)>>>0<=k>>>0)break;_=j+300|0;c[t>>2]=c[_>>2];c[_>>2]=t;break u}while(0);if(!t)break u;if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break u}else{_=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-_;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break u}}while(0);if(!x){n=q;break}m=c[la+8>>2]|0;k=b[z+32>>1]|0;if(k<<16>>16>31)k=-2147483648;else k=1<<(k<<16>>16)+-1;Y=m+208|0;c[Y>>2]=c[Y>>2]|k;if(!q){n=0;break}if(!(a[(c[z+8>>2]|0)+1>>0]|0)){n=q;break}n=la+19|0;k=a[n>>0]|0;if(!(k<<24>>24)){Y=la+44|0;l=(c[Y>>2]|0)+1|0;c[Y>>2]=l}else{l=k+-1<<24>>24;a[n>>0]=l;l=c[la+148+((l&255)<<2)>>2]|0}Jj(la,z,l)|0;if(!(a[(c[m>>2]|0)+81>>0]|0))k=(c[m+104>>2]|0)+(((c[m+108>>2]|0)+-1|0)*20|0)|0;else k=59308;c[k+12>>2]=0;if(!l){n=q;break}k=a[n>>0]|0;if((k&255)>=8){n=q;break}a[n>>0]=k+1<<24>>24;c[la+148+((k&255)<<2)>>2]=l;n=q}else{n=0;r=0;j=0}}else{n=0;r=0;j=0}while(0);l=(j|0)==0;A:do if(s|0){if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,t);break A}k=t;if((c[j+304>>2]|0)>>>0>k>>>0)break;if((c[j+308>>2]|0)>>>0<=k>>>0)break;Y=j+300|0;c[t>>2]=c[Y>>2];c[Y>>2]=t;break A}while(0);if(t|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{Y=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!l){p=c[(c[Z>>2]|0)+24>>2]|0;if(!r)q=0;else q=dk(ha,r,0,0)|0;o=(B|0)!=0;do if(!o){if(a[(c[la>>2]|0)+81>>0]|0)break;l=i+10|0;b[l>>1]=b[l>>1]|1024;l=r+8|0;j=c[l>>2]|0;i=a[j>>0]|0;if(!(i<<24>>24))break;m=q+8|0;k=0;do{Z=i&255;a[j>>0]=i&~(a[880+Z>>0]&32);a[(c[m>>2]|0)+k>>0]=a[208+Z>>0]|0;k=k+1|0;j=(c[l>>2]|0)+k|0;i=a[j>>0]|0}while(i<<24>>24!=0)}while(0);if(!(a[_>>0]|0)){j=c[q+8>>2]|0;if(!j)i=0;else i=(Eu(j)|0)&1073741823;k=j+(i+-1)|0;i=a[k>>0]|0;if(o){j=i;i=n}else{j=a[208+(i&255)>>0]|0;i=i<<24>>24==64?0:n}a[k>>0]=(j&255)+1;n=i}l=o?34049:43602;k=(p|0)==0;if(k)j=0;else j=dk(ha,p,0,0)|0;c[da>>2]=l;c[da+4>>2]=6;i=oj(c[la>>2]|0,106,da,0)|0;if(!i)i=j;else{c[i+12>>2]=j;_=i+4|0;c[_>>2]=c[_>>2]|4352}i=ej(la,57,i,r)|0;if(i|0){_=i+4|0;c[_>>2]=c[_>>2]|c[ka>>2]&1;b[i+36>>1]=b[oa+36>>1]|0}m=Ml(g,i,259)|0;Nl(f,g,m);if(k)j=0;else j=dk(ha,p,0,0)|0;c[da>>2]=l;c[da+4>>2]=6;i=oj(c[la>>2]|0,106,da,0)|0;if(!i)i=j;else{c[i+12>>2]=j;_=i+4|0;c[_>>2]=c[_>>2]|4352}i=ej(la,56,i,q)|0;if(i|0){_=i+4|0;c[_>>2]=c[_>>2]|c[ka>>2]&1;b[i+36>>1]=b[oa+36>>1]|0}j=Ml(g,i,259)|0;Nl(f,g,j);k=c[na>>2]|0;i=k+(h*48|0)|0;if(!n)break;c[k+(m*48|0)+16>>2]=h;Y=k+(h*48|0)+8|0;b[k+(m*48|0)+8>>1]=b[Y>>1]|0;_=k+(h*48|0)+14|0;Z=a[_>>0]|0;c[k+(j*48|0)+16>>2]=h;b[k+(j*48|0)+8>>1]=b[Y>>1]|0;a[_>>0]=Z+2<<24>>24}}while(0);if((a[C>>0]|0)==44){j=a[oa>>0]|0;B:do switch(j<<24>>24){case -95:{j=c[oa+20>>2]|0;if((j|0)!=0?(c[j>>2]|0)==2:0){o=j+4|0;p=j+24|0;k=c[p>>2]|0;C:do if(((a[k>>0]|0)==-94?c[(c[k+44>>2]|0)+56>>2]|0:0)?(aa=c[oa+8>>2]|0,_=a[aa>>0]|0,$=_&255,_<<24>>24):0){j=(d[208+$>>0]|0)+-109|0;if(!j){l=38025;m=aa;do{m=m+1|0;l=l+1|0;_=a[m>>0]|0;j=(d[208+(_&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(_<<24>>24==0|(j|0)!=0))}D:do if(j){n=$|32;switch((n&255)<<24>>24){case 103:{m=43609;j=aa;do{j=j+1|0;m=m+1|0;fa=a[j>>0]|0;l=(d[208+(fa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(l|0)!=0));if(!l){j=1;break D}else break C}case 108:{fa=425;break}case 114:break;default:break C}if((fa|0)==425){j=43614;l=aa;do{l=l+1|0;j=j+1|0;fa=a[l>>0]|0;m=(d[208+(fa&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(m|0)!=0));if(!m){j=2;break}if((n|0)!=114)break C}m=43619;j=aa;do{j=j+1|0;m=m+1|0;fa=a[j>>0]|0;l=(d[208+(fa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(l|0)!=0));if(!l)j=3;else break C}else j=0;while(0);j=a[18144+(j<<3)+4>>0]|0;m=1;n=c[o>>2]|0;fa=453;break B}while(0);k=c[o>>2]|0;if((a[k>>0]|0)==-94?(ba=c[k+44>>2]|0,(c[ba+56>>2]|0)!=0):0){j=ba+64|0;while(1){j=c[j>>2]|0;if((c[j>>2]|0)==(ha|0))break;else j=j+24|0}j=c[j+8>>2]|0;l=c[(c[j>>2]|0)+72>>2]|0;if(l|0?(ca=_a[l&127](j,2,c[oa+8>>2]|0,da,ea)|0,(ca|0)>149):0){j=ca&255;m=1;n=c[p>>2]|0;fa=453;break B}fa=465}else fa=465}else fa=465;break}case 51:case -96:case 52:{k=c[pa>>2]|0;l=c[oa+16>>2]|0;if((a[k>>0]|0)==-94)m=(c[(c[k+44>>2]|0)+56>>2]|0)!=0&1;else m=0;if(l)if((a[l>>0]|0)==-94){fa=(c[(c[l+44>>2]|0)+56>>2]|0)==0;n=fa?l:k;k=fa?k:l;m=m+((fa^1)&1)|0}else n=l;else n=0;switch(j<<24>>24){case 52:{j=68;break}case -96:{j=69;break}case 51:{j=70;break}default:j=0}if((m|0)>0)fa=453;else fa=465;break}default:{}}while(0);if((fa|0)==453)while(1){u=m;m=m+-1|0;l=n;o=(n|0)==0;if(o){s=0;t=0}else{s=Pl(ga,l)|0;t=L()|0}r=k;if(!k){p=0;q=0}else{p=Pl(ga,r)|0;q=L()|0}if((p&s|0)==0&(q&t|0)==0){if(o)i=0;else i=dk(ha,l,0,0)|0;i=ej(la,46,0,i)|0;if((i|0)!=0&(c[ka>>2]&1|0)!=0){fa=i+4|0;c[fa>>2]=c[fa>>2]|1}fa=Ml(g,i,3)|0;ca=c[na>>2]|0;i=ca+(fa*48|0)+32|0;c[i>>2]=s;c[i+4>>2]=t;c[ca+(fa*48|0)+20>>2]=c[r+28>>2];c[ca+(fa*48|0)+28>>2]=b[r+32>>1];b[ca+(fa*48|0)+12>>1]=64;a[ca+(fa*48|0)+15>>0]=j;i=c[na>>2]|0;c[i+(fa*48|0)+16>>2]=h;b[i+(fa*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;da=i+(h*48|0)+14|0;a[da>>0]=(a[da>>0]|0)+1<<24>>24;da=i+(h*48|0)+10|0;b[da>>1]=b[da>>1]|8;da=i+(h*48|0)+40|0;ea=c[da+4>>2]|0;fa=ca+(fa*48|0)+40|0;c[fa>>2]=c[da>>2];c[fa+4>>2]=ea;i=i+(h*48|0)|0}if((u|0)<=1){fa=465;break}else{fa=n;n=k;k=fa}}if((fa|0)==465){if((a[C>>0]|0)!=44)break;j=a[oa>>0]|0}switch(j<<24>>24){case 45:case 53:{m=c[pa>>2]|0;l=a[m>>0]|0;if(l<<24>>24==-88)j=a[m+38>>0]|0;else j=l;switch(j<<24>>24){case -87:{j=m+20|0;fa=473;break}case -125:{j=c[m+20>>2]|0;fa=473;break}default:{}}do if((fa|0)==473){q=c[c[j>>2]>>2]|0;if((q|0)>1){r=oa+16|0;k=c[r>>2]|0;j=a[k>>0]|0;if(j<<24>>24==-88)j=a[k+38>>0]|0;switch(j<<24>>24){case -87:{j=k+20|0;fa=479;break}case -125:{j=c[k+20>>2]|0;fa=479;break}default:j=1}if((fa|0)==479)j=c[c[j>>2]>>2]|0;if((j|0)==(q|0)){if(c[m+4>>2]&2048|0?c[k+4>>2]&2048|0:0)break;o=la+272|0;p=oa+36|0;n=0;j=l;i=m;while(1){switch(j<<24>>24){case -125:{j=ej(la,170,0,0)|0;if(!j)j=0;else{b[j+32>>1]=n;c[j+12>>2]=i}break}case -87:{i=c[(c[i+20>>2]|0)+4+(n*20|0)>>2]|0;if(!i){k=0;j=0;fa=489}else fa=488;break}default:fa=488}if((fa|0)==488){k=i;j=dk(c[la>>2]|0,i,0,0)|0;fa=489}E:do if((fa|0)==489){fa=0;i=c[o>>2]|0;if(i){while(1){if((c[i>>2]|0)==(k|0))break;i=c[i+12>>2]|0;if(!i)break E}c[i>>2]=j}}while(0);i=c[r>>2]|0;switch(a[i>>0]|0){case -125:{k=ej(la,170,0,0)|0;if(!k)i=0;else{b[k+32>>1]=n;c[k+12>>2]=i;i=k}break}case -87:{i=c[(c[i+20>>2]|0)+4+(n*20|0)>>2]|0;if(!i){l=0;i=0;fa=499}else fa=498;break}default:fa=498}if((fa|0)==498){l=i;i=dk(c[la>>2]|0,i,0,0)|0;fa=499}F:do if((fa|0)==499){fa=0;k=c[o>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break F}c[k>>2]=i}}while(0);i=ej(la,d[oa>>0]|0,j,i)|0;if(i|0){ha=i+4|0;c[ha>>2]=c[ha>>2]|c[ka>>2]&1;b[i+36>>1]=b[p>>1]|0}Nl(f,g,Ml(g,i,1)|0);i=n+1|0;if((i|0)==(q|0))break;ha=c[pa>>2]|0;n=i;j=a[ha>>0]|0;i=ha}la=a[C>>0]|0;i=c[na>>2]|0;ka=i+(h*48|0)+10|0;b[ka>>1]=b[ka>>1]|6;b[i+(h*48|0)+12>>1]=0;if(la<<24>>24==44)i=i+(h*48|0)|0;else break t}}}while(0);j=a[oa>>0]|0;break}default:{}}if(((j<<24>>24==49?(c[i+24>>2]|0)==0:0)?(ma=c[pa>>2]|0,(a[ma>>0]|0)==-87):0)?(c[(c[oa+20>>2]|0)+52>>2]|0)==0:0){k=0;i=-87;j=ma;while(1){if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;fa=520;break}case -125:{i=c[j+20>>2]|0;fa=520;break}default:i=1}if((fa|0)==520){fa=0;i=c[c[i>>2]>>2]|0}if((k|0)>=(i|0))break t;ma=Ml(g,oa,2)|0;i=k+1|0;c[(c[na>>2]|0)+(ma*48|0)+24>>2]=i;Nl(f,g,ma);j=c[na>>2]|0;c[j+(ma*48|0)+16>>2]=h;b[j+(ma*48|0)+8>>1]=b[j+(h*48|0)+8>>1]|0;j=j+(h*48|0)+14|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;j=c[pa>>2]|0;k=i;i=a[j>>0]|0}}}}while(0);h=(c[na>>2]|0)+(h*48|0)+32|0;oa=h;pa=c[oa+4>>2]|ia;c[h>>2]=c[oa>>2]|ja;c[h+4>>2]=pa;Ra=qa;return}function Ol(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!d){r=0;s=0;K(r|0);return s|0}o=d;d=0;e=0;do{n=c[o+32>>2]|0;l=c[o>>2]|0;if((l|0)!=0?(s=c[l>>2]|0,(s|0)>0):0){k=0;j=s;f=0;g=0;do{h=c[l+4+(k*20|0)>>2]|0;if(!h){h=0;i=0}else{h=Pl(b,h)|0;i=L()|0;j=c[l>>2]|0}f=h|f;g=i|g;k=k+1|0}while((k|0)<(j|0))}else{f=0;g=0}l=f|d;k=g|e;j=c[o+40>>2]|0;if((j|0)!=0?(q=c[j>>2]|0,(q|0)>0):0){i=0;h=q;d=0;e=0;do{f=c[j+4+(i*20|0)>>2]|0;if(!f){f=0;g=0}else{f=Pl(b,f)|0;g=L()|0;h=c[j>>2]|0}d=f|d;e=g|e;i=i+1|0}while((i|0)<(h|0))}else{d=0;e=0}l=l|d;k=k|e;j=c[o+48>>2]|0;if((j|0)!=0?(r=c[j>>2]|0,(r|0)>0):0){i=0;g=r;h=0;e=0;while(1){d=c[j+4+(i*20|0)>>2]|0;if(!d){d=0;f=0}else{d=Pl(b,d)|0;f=L()|0;g=c[j>>2]|0}d=d|h;e=f|e;i=i+1|0;if((i|0)>=(g|0)){h=d;i=e;break}else h=d}}else{h=0;i=0}d=c[o+36>>2]|0;if(!d){e=0;g=0}else{e=Pl(b,d)|0;g=L()|0}d=c[o+44>>2]|0;if(!d){d=0;f=0}else{d=Pl(b,d)|0;f=L()|0}d=l|h|e|d;e=k|i|g|f;if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;do{h=Ol(b,c[n+8+(m*72|0)+20>>2]|0)|0;g=L()|0|e;e=c[n+8+(m*72|0)+44>>2]|0;if(!e){e=0;f=0}else{e=Pl(b,e)|0;f=L()|0}d=h|d|e;e=g|f;if(a[n+8+(m*72|0)+37>>0]&4){l=c[n+8+(m*72|0)+64>>2]|0;if((l|0)!=0?(p=c[l>>2]|0,(p|0)>0):0){k=0;f=0;g=0;i=p;do{h=c[l+4+(k*20|0)>>2]|0;if(!h){h=0;j=0}else{h=Pl(b,h)|0;j=L()|0;i=c[l>>2]|0}f=h|f;g=j|g;k=k+1|0}while((k|0)<(i|0))}else{f=0;g=0}d=f|d;e=g|e}m=m+1|0}while((m|0)<(c[n>>2]|0))}o=c[o+52>>2]|0}while((o|0)!=0);K(e|0);return d|0}function Pl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=a[d>>0]|0;j=d+4|0;f=c[j>>2]|0;if(e<<24>>24==-94&(f&8|0)==0){g=c[d+28>>2]|0;f=c[b+4>>2]|0;if((f|0)<=0){o=0;b=0;K(o|0);return b|0}e=0;while(1){if((c[b+8+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(f|0)){e=0;f=0;i=45;break}}if((i|0)==45){K(e|0);return f|0}b=cw(1,0,e|0)|0;o=L()|0;K(o|0);return b|0}if(f&8404992|0){o=0;b=0;K(o|0);return b|0}a:do if(e<<24>>24==-85?(g=c[d+28>>2]|0,h=c[b+4>>2]|0,(h|0)>0):0){e=0;while(1){if((c[b+8+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(h|0)){f=0;g=0;break a}}f=cw(1,0,e|0)|0;g=L()|0}else{f=0;g=0}while(0);e=c[d+12>>2]|0;if(e){n=Pl(b,e)|0;f=n|f;g=L()|0|g}e=c[d+16>>2]|0;do if(!e){e=c[j>>2]|0;if(e&2048|0){if(e&32|0)c[b>>2]=1;n=Ol(b,c[d+20>>2]|0)|0;f=n|f;g=L()|0|g;break}n=c[d+20>>2]|0;if(n){e=c[n>>2]|0;if((e|0)>0){m=0;k=0;h=0;while(1){i=c[n+4+(m*20|0)>>2]|0;if(!i){i=0;j=0}else{i=Pl(b,i)|0;j=L()|0;e=c[n>>2]|0}i=i|k;h=j|h;m=m+1|0;if((m|0)>=(e|0)){e=i;break}else k=i}}else{e=0;h=0}f=e|f;g=h|g}}else{n=Pl(b,e)|0;f=n|f;g=L()|0|g}while(0);if((a[d>>0]|0)!=-95){o=g;b=f;K(o|0);return b|0}d=d+44|0;e=c[d>>2]|0;if(!e){o=g;b=f;K(o|0);return b|0}n=c[e+8>>2]|0;if((n|0)!=0?(l=c[n>>2]|0,(l|0)>0):0){m=0;h=0;i=0;while(1){e=c[n+4+(m*20|0)>>2]|0;if(!e){j=0;k=0;e=l}else{j=Pl(b,e)|0;k=L()|0;e=c[n>>2]|0}h=j|h;i=k|i;m=m+1|0;if((m|0)>=(e|0))break;else l=e}e=c[d>>2]|0}else{h=0;i=0}m=h|f;l=i|g;k=c[e+12>>2]|0;if((k|0)!=0?(o=c[k>>2]|0,(o|0)>0):0){j=0;f=0;e=0;h=o;do{g=c[k+4+(j*20|0)>>2]|0;if(!g){g=0;i=0}else{g=Pl(b,g)|0;i=L()|0;h=c[k>>2]|0}f=g|f;e=i|e;j=j+1|0}while((j|0)<(h|0))}else{f=0;e=0}o=l|e;b=m|f;K(o|0);return b|0}function Ql(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(e>>>0>0|(e|0)==0&d>>>0>1){h=0;do{h=h+1|0;m=d;d=bw(d|0,e|0,1)|0;l=e;e=L()|0}while(l>>>0>0|(l|0)==0&m>>>0>3)}else h=0;m=c[a+8+(h*72|0)+40>>2]|0;h=c[(c[a+8+(h*72|0)+16>>2]|0)+8>>2]|0;if(!h){p=0;return p|0}l=(g|0)==0;a:while(1){j=h+40|0;b:do if(c[j>>2]|0?(n=h+50|0,o=b[n>>1]|0,o<<16>>16):0){k=h+4|0;if(l){a=0;d=o;while(1){if((b[(c[k>>2]|0)+(a<<1)>>1]|0)==-2){d=c[(c[j>>2]|0)+4+(a*20|0)>>2]|0;c:do if(!d)d=0;else while(1){e=c[d+4>>2]|0;if(!(e&4096))break c;if(!(e&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){d=0;break}}while(0);if(!(bk(0,0,d,m)|0))break a;d=b[n>>1]|0}a=a+1|0;if(a>>>0>=(d&65535)>>>0)break b}}i=0;d=o;do{if((b[(c[k>>2]|0)+(i<<1)>>1]|0)==-2){d=c[(c[j>>2]|0)+4+(i*20|0)>>2]|0;e=g;while(1){a=c[e+4>>2]|0;if(!(a&4096))break;if(!(a&262144))e=e+12|0;else e=(c[e+20>>2]|0)+4|0;e=c[e>>2]|0;if(!e){e=0;break}}d:do if(!d)d=0;else while(1){a=c[d+4>>2]|0;if(!(a&4096))break d;if(!(a&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){d=0;break}}while(0);if(!(bk(0,e,d,m)|0))break a;d=b[n>>1]|0}i=i+1|0}while(i>>>0<(d&65535)>>>0)}while(0);h=c[h+20>>2]|0;if(!h){h=0;p=41;break}}if((p|0)==41)return h|0;c[f>>2]=m;c[f+4>>2]=-2;p=1;return p|0}function Rl(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=b[f+12>>1]|0;i=b[g+12>>1]|0;j=i|h;if((h&62)==0|(i&62)==0)return;i=j&65535;if(!((i&26|0)==(i|0)|(i&38|0)==(i|0)))return;if(bk(0,c[(c[f>>2]|0)+12>>2]|0,c[(c[g>>2]|0)+12>>2]|0,-1)|0)return;if(bk(0,c[(c[f>>2]|0)+16>>2]|0,c[(c[g>>2]|0)+16>>2]|0,-1)|0)return;f=c[f>>2]|0;if(!f)return;h=dk(c[c[c[e>>2]>>2]>>2]|0,f,0,0)|0;if(!h)return;g=((i+65535&i|0)==0?j:(i&24|0)==0?32:8)&65535;f=53;while(1)if((2<<f+-53|0)==(g|0))break;else f=f+1|0;a[h>>0]=f;Nl(d,e,Ml(e,h,3)|0);return}function Sl(b,d){b=b|0;d=d|0;if((a[d>>0]|0)!=-95){d=0;return d|0}if(c[d+4>>2]&524288|0){d=0;return d|0}a[b+20>>0]=0;d=2;return d|0}function Tl(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;t=e+24|0;x=e+4|0;y=e+18|0;z=e+12|0;A=e+20|0;C=e+17|0;D=e+8|0;u=e+16|0;v=e+28|0;w=e+72|0;g=c[t>>2]|0;h=c[x>>2]|0;f=a[y>>0]|0;a:while(1){q=(f&255)+-1|0;s=b[e+72+(q<<1)>>1]|0;q=c[e+28+(q<<2)>>2]|0;r=s<<16>>16;s=s<<16>>16==-2;f=h;while(1){p=f+12|0;if((g|0)<(c[p>>2]|0)){o=(c[f+20>>2]|0)+(g*48|0)|0;while(1){do if((c[o+20>>2]|0)==(q|0)?(c[o+28>>2]|0)==(r|0):0){if(s){i=c[(c[o>>2]|0)+12>>2]|0;h=c[z>>2]|0;b:do if(!i)i=0;else while(1){j=c[i+4>>2]|0;if(!(j&4096))break b;if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);c:do if(!h)h=0;else while(1){j=c[h+4>>2]|0;if(!(j&4096))break c;if(!(j&262144))h=h+12|0;else h=(c[h+20>>2]|0)+4|0;h=c[h>>2]|0;if(!h){h=0;break}}while(0);if(bk(0,i,h,q)|0)break}if((d[y>>0]|0)>=2?c[(c[o>>2]|0)+4>>2]&1|0:0)break;n=o+12|0;h=b[n>>1]|0;if((h&2048)!=0?(B=a[C>>0]|0,(B&255)<11):0){i=c[(c[o>>2]|0)+16>>2]|0;j=c[i+4>>2]|0;if(j&4096)do{if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;j=c[i+4>>2]|0}while((j&4096|0)!=0);if((a[i>>0]|0)==-94){m=B&255;d:do if(!(B<<24>>24))j=0;else{l=c[i+28>>2]|0;k=i+32|0;j=0;do{if((c[e+28+(j<<2)>>2]|0)==(l|0)?(b[e+72+(j<<1)>>1]|0)==(b[k>>1]|0):0)break d;j=j+1|0}while(j>>>0<m>>>0)}while(0);if((j|0)==(m|0)){c[e+28+(m<<2)>>2]=c[i+28>>2];b[e+72+(m<<1)>>1]=b[i+32>>1]|0;a[C>>0]=B+1<<24>>24;h=b[n>>1]|0}}}i=h&65535;if(c[A>>2]&i|0){if((i&256|0)==0&(c[D>>2]|0)!=0){k=c[c[f>>2]>>2]|0;h=c[o>>2]|0;if(!(Vl(h,a[u>>0]|0)|0))break;i=c[h+12>>2]|0;j=c[h+16>>2]|0;do if(!(c[i+4>>2]&256)){if(j|0?c[j+4>>2]&256|0:0){h=Yi(k,j)|0;E=51;break}h=Yi(k,i)|0;if(!h){h=Yi(k,j)|0;E=51}}else{h=Yi(k,i)|0;E=51}while(0);if((E|0)==51){E=0;if(!h)h=c[(c[k>>2]|0)+8>>2]|0}i=c[h>>2]|0;j=c[D>>2]|0;m=a[i>>0]|0;h=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(h|0)!=0))do{i=i+1|0;j=j+1|0;m=a[i>>0]|0;h=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(h|0)!=0));if(h|0)break;h=b[n>>1]|0}if(!(h&130))break a;h=c[(c[o>>2]|0)+16>>2]|0;if((a[h>>0]|0)!=-94)break a;if((c[h+28>>2]|0)!=(c[v>>2]|0))break a;if((b[h+32>>1]|0)!=(b[w>>1]|0))break a}}while(0);g=g+1|0;if((g|0)<(c[p>>2]|0))o=o+48|0;else break}}f=c[f+4>>2]|0;if(!f)break;else g=0}f=a[y>>0]|0;if((f&255)>=(d[C>>0]|0)){f=0;E=67;break}h=c[e>>2]|0;f=f+1<<24>>24;a[y>>0]=f;g=0}if((E|0)==67)return f|0;c[x>>2]=f;c[t>>2]=g+1;E=o;return E|0}function Ul(b){b=b|0;var d=0;d=Xj(c[b+12>>2]|0)|0;a[b+16>>0]=d;return Tl(b)|0}function Vl(a,b){a=a|0;b=b|0;var d=0,e=0;e=Xj(c[a+12>>2]|0)|0;d=c[a+16>>2]|0;do if(!d){if(!(c[a+4>>2]&2048)){a=e<<24>>24==0?65:e;break}a=Xj(c[(c[c[a+20>>2]>>2]|0)+4>>2]|0)|0;if(e<<24>>24==0|a<<24>>24==0){a=(a|e)<<24>>24==0?65:(a&255)+(e&255)&255;break}else{a=e<<24>>24>66|a<<24>>24>66?67:65;break}}else{a=Xj(d)|0;if(e<<24>>24==0|a<<24>>24==0){a=(a|e)<<24>>24==0?65:(a&255)+(e&255)&255;break}else{a=e<<24>>24>66|a<<24>>24>66?67:65;break}}while(0);switch(a<<24>>24|0){case 66:{b=b<<24>>24==66;b=b&1;return b|0}case 65:{b=1;b=b&1;return b|0}default:{b=b<<24>>24>66;b=b&1;return b|0}}return 0}function Wl(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=Ra;Ra=Ra+16|0;p=K;H=K+4|0;s=c[f>>2]|0;J=c[s>>2]|0;r=c[f+4>>2]|0;F=c[f+12>>2]|0;s=c[s+4>>2]|0;x=d[F+16>>0]|0;B=c[f+8>>2]|0;G=r+20|0;q=r+12|0;n=c[q>>2]|0;if((n|0)>0){o=c[s+8+(x*72|0)+40>>2]|0;l=0;k=0;m=c[G>>2]|0;while(1){if((c[m+20>>2]|0)==(o|0)?(E=m+32|0,(c[E>>2]&i|0)==0?(c[E+4>>2]&j|0)==0:0):0)k=k+((b[m+12>>1]&-2049)<<16>>16!=0&1)|0;l=l+1|0;if((l|0)==(n|0)){o=k;break}else m=m+48|0}}else o=0;if(!B)y=0;else{n=c[B>>2]|0;a:do if((n|0)>0){m=s+8+(x*72|0)+40|0;k=0;do{l=c[B+4+(k*20|0)>>2]|0;if((a[l>>0]|0)!=-94)break a;if((c[l+28>>2]|0)!=(c[m>>2]|0))break a;k=k+1|0}while((k|0)<(n|0))}else k=0;while(0);y=(k|0)==(n|0)?n:0}m=c[J>>2]|0;n=(o*20|0)+80+(y<<3)|0;b:do if(!m){E=Sv(n|0,0,-1,-1)|0;C=L()|0;if(!(C>>>0>0|(C|0)==0&E>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;D=38;break}k=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){E=c[14978]|0;C=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&C>>>0<=E>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;E=l}else E=l}else D=39}else D=39}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){D=39;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];D=m+284|0;c[D>>2]=(c[D>>2]|0)+1;D=38;break b}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];D=m+284|0;c[D>>2]=(c[D>>2]|0)+1;D=38;break b}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;D=38}while(0);if((D|0)==38)if(!k)D=39;else E=k;if((D|0)==39){cd(J,34831,p);J=7;Ra=K;return J|0}gw(E|0,0,n|0)|0;v=E+80|0;w=v+(o*12|0)|0;c[E>>2]=o;c[E+8>>2]=y;C=E+4|0;c[C>>2]=v;c[E+12>>2]=w;c[E+16>>2]=w+(y<<3);c[E+72>>2]=r;c[E+76>>2]=J;t=c[q>>2]|0;if((t|0)>0){u=s+8+(x*72|0)+36|0;s=c[s+8+(x*72|0)+40>>2]|0;l=0;k=0;q=c[G>>2]|0;r=0;while(1){do if(((c[q+20>>2]|0)==(s|0)?(x=q+32|0,(c[x>>2]&i|0)==0?(c[x+4>>2]&j|0)==0:0):0)?(z=b[q+12>>1]|0,A=z&65535,(A&63487|0)!=0):0){if(a[u>>0]&8?!((A&384|0)==0?1:(c[(c[q>>2]|0)+4>>2]&1|0)!=0):0)break;c[v+(l*12|0)>>2]=c[q+28>>2];c[v+(l*12|0)+8>>2]=r;p=z&8191;p=p<<16>>16==1?2:p;m=p&65535;c:do if(p<<16>>16!=64){if(m&384|0){m=v+(l*12|0)+4|0;if(p<<16>>16==256){a[m>>0]=71;break}else{a[m>>0]=72;break}}o=v+(l*12|0)+4|0;a[o>>0]=p;if(m&60){n=c[(c[q>>2]|0)+16>>2]|0;m=a[n>>0]|0;if(m<<24>>24==-88)m=a[n+38>>0]|0;switch(m<<24>>24){case -87:{m=n+20|0;break}case -125:{m=c[n+20>>2]|0;break}default:break c}if((c[c[m>>2]>>2]|0)>=2){k=r>>>0<16?(1<<r|k&65535)&65535:k;switch(p&8191){case 16:{a[o>>0]=8;break c}case 4:{a[o>>0]=32;break c}default:break c}}}}else a[v+(l*12|0)+4>>0]=a[q+15>>0]|0;while(0);l=l+1|0}while(0);r=r+1|0;if((r|0)==(t|0)){i=k;break}else q=q+48|0}}else i=0;if((y|0)<=0){if(!E){J=7;Ra=K;return J|0}}else{k=0;do{c[w+(k<<3)>>2]=b[(c[B+4+(k*20|0)>>2]|0)+32>>1];a[w+(k<<3)+4>>0]=a[B+4+(k*20|0)+12>>0]|0;k=k+1|0}while((k|0)!=(y|0))}b[F+18>>1]=0;c[F+36>>2]=1024;b[F+40>>1]=0;a[F+28>>0]=0;A=c[E>>2]|0;k=c[J>>2]|0;o=F+44|0;d:do if((A|0)>(e[o>>1]|0)){p=A+7&-8;n=p<<2;e:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))D=80;else D=94;else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<n>>>0:0))){l=k+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];D=k+284|0;c[D>>2]=(c[D>>2]|0)+1;D=81;break e}l=k+296|0;m=c[l>>2]|0;if(!m){l=k+292|0;break}else{c[l>>2]=c[m>>2];D=k+284|0;c[D>>2]=(c[D>>2]|0)+1;D=81;break e}}else l=k+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;D=80}while(0);if((D|0)==80){m=_d(k,n,0)|0;D=81}do if((D|0)==81){if(!m){k=c[J>>2]|0;if(!k)break;else{D=94;break}}l=F+48|0;ew(m|0,c[l>>2]|0,e[o>>1]<<2|0)|0;n=c[l>>2]|0;do if((n|0)!=(F+56|0)){if(c[k+480>>2]|0){Xd(k,n);break}B=n;if((c[k+304>>2]|0)>>>0<=B>>>0?(c[k+308>>2]|0)>>>0>B>>>0:0){B=k+300|0;c[n>>2]=c[B>>2];c[B>>2]=n;break}if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{B=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[l>>2]=m;b[o>>1]=p;break d}while(0);if((D|0)==94){if(c[k+480>>2]|0){Xd(k,E);J=7;Ra=K;return J|0}J=E;if((c[k+304>>2]|0)>>>0<=J>>>0?(c[k+308>>2]|0)>>>0>J>>>0:0){J=k+300|0;c[E>>2]=c[J>>2];c[J>>2]=E;J=7;Ra=K;return J|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);J=7;Ra=K;return J|0}else{J=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);J=7;Ra=K;return J|0}}while(0);l=Zl(f,g,h,-1,-1,0,E,i,H)|0;if(!l){z=F;w=~g;x=~h;y=c[z>>2]&w;z=c[z+4>>2]&x;k=(c[H>>2]|0)!=0;if((y|0)!=0|(z|0)!=0|k){if(k){l=Zl(f,g,h,-1,-1,1,E,i,H)|0;n=F;k=c[n>>2]&w;n=c[n+4>>2]&x;m=(k|0)==0&(n|0)==0&1;if(!l){v=k;D=106}else k=m}else{m=0;v=0;n=0;D=106}f:do if((D|0)==106){u=(A|0)>0;k=m;o=0;l=0;while(1){if(!u){l=0;break f}q=c[G>>2]|0;r=c[C>>2]|0;while(1){p=0;t=-1;s=-1;do{D=q+((c[r+(p*12|0)+8>>2]|0)*48|0)+32|0;j=c[D>>2]&w;D=c[D+4>>2]&x;B=(D>>>0>l>>>0|(D|0)==(l|0)&j>>>0>o>>>0)&(D>>>0<t>>>0|(D|0)==(t|0)&j>>>0<s>>>0);s=B?j:s;t=B?D:t;p=p+1|0}while((p|0)!=(A|0));if((s|0)==-1&(t|0)==-1){l=0;break f}if((s|0)==(y|0)&(t|0)==(z|0)|(s|0)==(v|0)&(t|0)==(n|0)){l=t;o=s}else break}l=Zl(f,g,h,s|g,t|h,0,E,i,H)|0;D=F;if((c[D>>2]|0)==(g|0)?(c[D+4>>2]|0)==(h|0):0){k=(c[H>>2]|0)==0?1:k;m=1}if(!l){o=s;l=t}else break}}while(0);if(!(m|l)){l=Zl(f,g,h,g,h,0,E,i,H)|0;k=(c[H>>2]|0)==0?1:k}if(!(k|l))l=Zl(f,g,h,g,h,1,E,i,H)|0}else l=0}do if(c[E+28>>2]|0?(I=c[E+24>>2]|0,I|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](I);break}else{H=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);break}while(0);k=c[J>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,E);J=l;Ra=K;return J|0}J=E;if((c[k+304>>2]|0)>>>0<=J>>>0?(c[k+308>>2]|0)>>>0>J>>>0:0){J=k+300|0;c[E>>2]=c[J>>2];c[J>>2]=E;J=l;Ra=K;return J|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);J=l;Ra=K;return J|0}else{J=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);J=l;Ra=K;return J|0}return 0}function Xl(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;ja=Ra;Ra=Ra+128|0;ca=ja+80|0;fa=ja+72|0;k=ja;l=ja+112|0;m=ja+108|0;b[m>>1]=-1;ha=c[f+12>>2]|0;_=c[f>>2]|0;P=c[_+4>>2]|0;Q=d[ha+16>>0]|0;$=P+8+(Q*72|0)|0;O=P+8+(Q*72|0)+16|0;R=c[O>>2]|0;aa=c[f+4>>2]|0;ba=P+8+(Q*72|0)+68|0;i=c[ba>>2]|0;o=(i|0)==0;do if(o){if(c[R+36>>2]&32|0){k=c[R+8>>2]|0;break}i=k;j=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));b[k+50>>1]=1;b[k+52>>1]=1;c[k+4>>2]=m;c[k+8>>2]=l;a[k+54>>0]=5;c[k+12>>2]=R;b[k+48>>1]=b[R+46>>1]|0;Z=k+55|0;a[Z>>0]=3;a[Z+1>>0]=0;b[l>>1]=b[R+44>>1]|0;b[l+2>>1]=0;if(!(a[P+8+(Q*72|0)+37>>0]&1))c[k+20>>2]=c[(c[O>>2]|0)+8>>2]}else k=i;while(0);m=b[R+44>>1]|0;if(m<<16>>16<11)i=0;else{i=m<<16>>16;j=((i|0)<0)<<31>>31;if((m&65535)>255){l=40;do{l=(l&65535)+40|0;Z=i;i=bw(i|0,j|0,4)|0;Y=j;j=L()|0}while(Y>>>0>0|(Y|0)==0&Z>>>0>4095);l=l&65535}else l=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{l=(l&65535)+10&65535;Z=i;i=bw(i|0,j|0,1)|0;Y=j;j=L()|0}while(Y>>>0>0|(Y|0)==0&Z>>>0>31);j=l}else j=l;i=(j&65535)+65493+(e[3648+((i&7)<<1)>>1]|0)&65535}a:do if((((((c[f+16>>2]|0)==0?(b[_+44>>1]&32)==0:0)?!((0==0?(c[(c[c[_>>2]>>2]|0)+32>>2]&32768|0)==0:0)|o^1):0)?(n=a[P+8+(Q*72|0)+37>>0]|0,(n&1)==0):0)?(M=R+36|0,(n&40)==0&(c[M>>2]&32|0)==0):0)?(I=c[aa+20>>2]|0,Z=c[aa+12>>2]|0,N=I+(Z*48|0)|0,(Z|0)>0):0){A=ha+8|0;B=P+8+(Q*72|0)+40|0;C=P+8+(Q*72|0)+36|0;D=ha+24|0;E=ha+42|0;F=ha+32|0;G=ha+40|0;H=ha+48|0;x=(i&65535)+(m&65535)|0;s=x&65535;t=ha+18|0;u=R+12|0;v=ha+22|0;n=i<<16>>16;w=(x&65535)+65526|0;x=(x<<16>>16)+28|0;y=ha+20|0;z=ha+36|0;o=i<<16>>16<12;p=i<<16>>16>74;q=18112+(43-n)|0;r=18112+(n+-43)|0;if(i<<16>>16<43){m=i<<16>>16<-6?43:44;l=I;while(1){j=l+32|0;Z=j;Y=A;do if((((c[Y>>2]&c[Z>>2]|0)==0?(c[Y+4>>2]&c[Z+4>>2]|0)==0:0)?(c[l+20>>2]|0)==(c[B>>2]|0):0)?(J=e[l+12>>1]|0,(J&130|0)!=0):0){if(a[C>>0]&8?!((J&128|0)==0?1:(c[(c[l>>2]|0)+4>>2]&1|0)!=0):0){i=0;break}i=c[l+28>>2]|0;if((i|0)>=0?(Vl(c[l>>2]|0,a[(c[(c[O>>2]|0)+4>>2]|0)+(i<<4)+13>>0]|0)|0)!=0:0){b[D>>1]=1;b[E>>1]=0;c[F>>2]=0;b[G>>1]=1;c[c[H>>2]>>2]=l;b[t>>1]=s;if(!(c[u>>2]|0))i=(c[M>>2]&2|0)==0?x:w;else i=w;b[t>>1]=(i&32768|0)==0?i&65535:0;b[v>>1]=43;if(o)i=m;else i=(d[q>>0]|0)+43&65535;b[y>>1]=i;c[z>>2]=16384;Y=j;Z=c[Y+4>>2]|h;i=ha;c[i>>2]=c[Y>>2]|g;c[i+4>>2]=Z;i=_l(f,ha)|0}else i=0}else i=0;while(0);l=l+48|0;if(!(l>>>0<N>>>0&(i|0)==0))break a}}m=i<<16>>16>92?i:n+1&65535;l=I;do{j=l+32|0;Z=j;Y=A;do if((((c[Y>>2]&c[Z>>2]|0)==0?(c[Y+4>>2]&c[Z+4>>2]|0)==0:0)?(c[l+20>>2]|0)==(c[B>>2]|0):0)?(K=e[l+12>>1]|0,(K&130|0)!=0):0){if(a[C>>0]&8?!((K&128|0)==0?1:(c[(c[l>>2]|0)+4>>2]&1|0)!=0):0){i=0;break}i=c[l+28>>2]|0;if((i|0)>=0?(Vl(c[l>>2]|0,a[(c[(c[O>>2]|0)+4>>2]|0)+(i<<4)+13>>0]|0)|0)!=0:0){b[D>>1]=1;b[E>>1]=0;c[F>>2]=0;b[G>>1]=1;c[c[H>>2]>>2]=l;b[t>>1]=s;if((c[u>>2]|0)==0?(c[M>>2]&2|0)==0:0)i=x;else i=w;b[t>>1]=(i&32768|0)==0?i&65535:0;b[v>>1]=43;if(p)i=m;else i=(d[r>>0]|0)+n&65535;b[y>>1]=i;c[z>>2]=16384;Y=j;Z=c[Y+4>>2]|h;i=ha;c[i>>2]=c[Y>>2]|g;c[i+4>>2]=Z;i=_l(f,ha)|0}else i=0}else i=0;while(0);l=l+48|0}while(l>>>0<N>>>0&(i|0)==0)}else i=0;while(0);Z=ha+36|0;if(!((i|0)==0&(k|0)!=0)){ia=i;Ra=ja;return ia|0}I=P+8+(Q*72|0)+40|0;J=ha+24|0;K=ha+26|0;M=ha+28|0;N=ha+42|0;O=ha+40|0;S=ha+17|0;T=ha+18|0;U=ha+22|0;V=ha+32|0;W=ha+20|0;X=f+20|0;Y=R+36|0;H=P+8+(Q*72|0)+56|0;A=R+46|0;B=_+92|0;C=_+100|0;D=fa+4|0;E=ca+4|0;F=ca+24|0;z=ca+20|0;G=_+44|0;y=1;b:while(1){w=k+36|0;i=c[w>>2]|0;if((i|0)!=0?(bm(c[I>>2]|0,aa,i)|0)==0:0)i=0;else{v=k+55|0;if(!((d[v>>0]|d[v+1>>0]<<8)&256)){x=b[c[k+8>>2]>>1]|0;b[J>>1]=0;b[K>>1]=0;b[M>>1]=0;b[N>>1]=0;b[O>>1]=0;a[S>>0]=0;b[T>>1]=0;r=ha;c[r>>2]=g;c[r+4>>2]=h;b[U>>1]=x;c[V>>2]=k;r=c[I>>2]|0;c:do if((((d[v>>0]|d[v+1>>0]<<8)&4)==0?(da=c[(c[f>>2]|0)+8>>2]|0,(da|0)!=0):0)?(ea=c[da>>2]|0,(ea|0)>0):0){s=k+40|0;t=k+50|0;u=k+4|0;q=0;i=ea;while(1){j=c[da+4+(q*20|0)>>2]|0;d:do if(!j)j=0;else while(1){l=c[j+4>>2]|0;if(!(l&4096))break d;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);if((a[j>>0]|0)==-94?(c[j+28>>2]|0)==(r|0):0){m=b[j+32>>1]|0;if(m<<16>>16<0){j=1;break c}j=b[t>>1]|0;if(j<<16>>16){n=c[u>>2]|0;l=j&65535;j=0;do{if(m<<16>>16==(b[n+(j<<1)>>1]|0)){j=1;break c}j=j+1|0}while(j>>>0<l>>>0)}}else ia=75;e:do if((ia|0)==75){ia=0;p=c[s>>2]|0;if((p|0)!=0?(ga=b[t>>1]|0,ga<<16>>16!=0):0){if(!j){n=c[u>>2]|0;o=ga&65535;m=0;while(1){f:do if((b[n+(m<<1)>>1]|0)==-2){j=c[p+4+(m*20|0)>>2]|0;if(!j){j=1;break c}while(1){l=c[j+4>>2]|0;if(!(l&4096))break f;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=1;break c}}}while(0);m=m+1|0;if(m>>>0>=o>>>0)break e}}n=0;i=ga;do{if((b[(c[u>>2]|0)+(n<<1)>>1]|0)==-2){i=c[p+4+(n*20|0)>>2]|0;l=j;while(1){m=c[l+4>>2]|0;if(!(m&4096))break;if(!(m&262144))l=l+12|0;else l=(c[l+20>>2]|0)+4|0;l=c[l>>2]|0;if(!l){l=0;break}}g:do if(!i)i=0;else while(1){m=c[i+4>>2]|0;if(!(m&4096))break g;if(!(m&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);if(!(bk(0,l,i,r)|0)){j=1;break c}i=b[t>>1]|0}n=n+1|0}while(n>>>0<(i&65535)>>>0);i=c[da>>2]|0}}while(0);q=q+1|0;if((q|0)>=(i|0)){j=0;break}}}else j=0;while(0);i=d[v>>0]|d[v+1>>0]<<8;do if((i&3)==3){c[Z>>2]=256;a[S>>0]=(j|0)==0?0:y&255;b[W>>1]=(x&65535)+16;cm(aa,ha,x);i=_l(f,ha)|0;b[U>>1]=x;if(i|0){ia=147;break b}}else{if(!(i&32)){i=H;m=k+64|0;R=c[m>>2]&c[i>>2];i=c[m+4>>2]&c[i+4>>2];m=R;n=i;i=(R|0)==0&(i|0)==0?576:512}else{m=0;n=0;i=576}c[Z>>2]=i;i=(j|0)!=0;if((!i?(c[Y>>2]&32|0)==0:0)?(c[w>>2]|0)==0:0){if(!((m|0)==0&(n|0)==0))break;if((d[v>>0]|d[v+1>>0]<<8)&4)break;if((b[k+48>>1]|0)>=(b[A>>1]|0))break;if(!((b[G>>1]&4)==0&(c[7328]|0)!=0))break;if(b[(c[c[_>>2]>>2]|0)+76>>1]&32)break}a[S>>0]=i?y&255:0;i=x<<16>>16;l=i+1+(((b[k+48>>1]|0)*15|0)/(b[A>>1]|0)|0)&65535;b[W>>1]=l;if(!((m|0)==0&(n|0)==0)){i=i+16&65535;n=c[I>>2]|0;if((c[B>>2]|0)>0){m=0;do{l=c[C>>2]|0;j=c[l+(m*48|0)>>2]|0;c[ca>>2]=0;c[ca+4>>2]=0;c[ca+8>>2]=0;c[ca+12>>2]=0;c[ca+16>>2]=0;c[ca+20>>2]=0;c[D>>2]=n;c[fa>>2]=k;c[E>>2]=148;c[F>>2]=fa;if(j){_j(ca,j)|0;if(a[z>>0]|0)break}j=b[l+(m*48|0)+8>>1]|0;do if(j<<16>>16<1)i=(j&65535)+(i&65535)&65535;else{i=i+-1<<16>>16;if(!(b[l+(m*48|0)+12>>1]&130))break;i=(i&65535)+65517&65535}while(0);m=m+1|0}while((m|0)<(c[B>>2]|0));l=b[W>>1]|0}j=l<<16>>16;m=i<<16>>16;do if(l<<16>>16<i<<16>>16){if((j+49|0)>=(m|0))if((j+31|0)<(m|0)){i=m+1&65535;break}else{i=(d[18112+(m-j)>>0]|0)+m&65535;break}}else if((m+49|0)>=(j|0))if((m+31|0)<(j|0)){i=j+1&65535;break}else{i=(d[18112+(j-m)>>0]|0)+j&65535;break}else i=l;while(0);b[W>>1]=i}cm(aa,ha,x);i=_l(f,ha)|0;b[U>>1]=x;if(i|0){ia=147;break b}}while(0);c[X>>2]=0;i=dm(f,$,k,0)|0;if((c[X>>2]|0)==1)c[Y>>2]=c[Y>>2]|256}else i=0}if(c[ba>>2]|0){ia=147;break}k=c[k+20>>2]|0;if(!((i|0)==0&(k|0)!=0)){ia=147;break}else y=y+1|0}if((ia|0)==147){Ra=ja;return i|0}return 0}function Yl(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;ia=Ra;Ra=Ra+608|0;ba=ia+168|0;da=ia+576|0;ha=ia+112|0;ea=ia+56|0;fa=ia;k=c[f>>2]|0;_=c[f+4>>2]|0;o=c[_+20>>2]|0;n=c[_+12>>2]|0;$=o+(n*48|0)|0;aa=c[f+12>>2]|0;l=ha;m=l+56|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k=c[k+4>>2]|0;l=d[aa+16>>0]|0;Z=c[k+8+(l*72|0)+40>>2]|0;if((n|0)<=0){ha=0;Ra=ia;return ha|0}W=aa+8|0;X=da+8|0;Y=da+16|0;E=k+8+(l*72|0)+16|0;F=da+4|0;G=ba+4|0;H=ba+8|0;I=ba+12|0;J=ba+20|0;K=fa+8|0;L=ha+8|0;M=ea+8|0;N=ha+16|0;O=aa+40|0;P=aa+48|0;Q=aa+36|0;R=aa+18|0;S=aa+17|0;T=aa+24|0;U=aa+20|0;V=aa+22|0;k=0;a:while(1){b:do if((b[o+12>>1]&512)!=0?(ca=c[o+28>>2]|0,D=ca+408|0,C=W,!((c[C>>2]&c[D>>2]|0)==0?(c[C+4>>2]&c[D+4>>2]|0)==0:0)):0){l=ca+20|0;D=(c[l>>2]|0)+((c[ca+12>>2]|0)*48|0)|0;c[da>>2]=c[f>>2];c[da+4>>2]=c[f+4>>2];c[da+8>>2]=c[f+8>>2];c[da+12>>2]=c[f+12>>2];c[da+16>>2]=c[f+16>>2];c[da+20>>2]=c[f+20>>2];c[da+24>>2]=c[f+24>>2];c[X>>2]=0;c[Y>>2]=ea;l=c[l>>2]|0;c:do if(l>>>0<D>>>0){n=1;C=l;l=0;do{if(!(b[C+12>>1]&1024)){if((c[C+20>>2]|0)==(Z|0)){c[ba>>2]=c[_>>2];c[G>>2]=_;a[H>>0]=44;c[I>>2]=1;c[J>>2]=C;l=ba;ga=11}}else{l=c[C+28>>2]|0;ga=11}do if((ga|0)==11){ga=0;c[F>>2]=l;b[ea>>1]=0;if(!(c[(c[E>>2]|0)+56>>2]|0))l=Xl(da,g,h)|0;else l=Wl(da,g,h,i,j)|0;if(!l)l=Yl(da,g,h,i,j)|0;m=b[ea>>1]|0;if(!(m<<16>>16)){k=0;break c}if(n|0){ew(L|0,M|0,(m&65535)<<4|0)|0;n=0;k=m;break}b[fa>>1]=k;B=k&65535;ew(K|0,L|0,B<<4|0)|0;if(!(k<<16>>16))k=0;else{x=m&65535;w=0;k=0;do{y=fa+8+(w<<4)|0;z=fa+8+(w<<4)+8|0;A=fa+8+(w<<4)+10|0;v=0;do{u=y;m=ea+8+(v<<4)|0;t=c[m>>2]|c[u>>2];u=c[m+4>>2]|c[u+4>>2];m=b[z>>1]|0;n=b[ea+8+(v<<4)+8>>1]|0;p=m<<16>>16;q=n<<16>>16;do if(m<<16>>16<n<<16>>16){if((p+49|0)<(q|0)){m=n;break}if((p+31|0)<(q|0)){m=q+1&65535;break}else{m=(d[18112+(q-p)>>0]|0)+q&65535;break}}else{if((q+49|0)<(p|0))break;if((q+31|0)<(p|0)){m=p+1&65535;break}else{m=(d[18112+(p-q)>>0]|0)+p&65535;break}}while(0);n=b[A>>1]|0;p=b[ea+8+(v<<4)+10>>1]|0;q=n<<16>>16;r=p<<16>>16;do if(n<<16>>16<p<<16>>16){if((q+49|0)<(r|0))break;if((q+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-q)>>0]|0)+r&65535;break}}else{if((r+49|0)<(q|0)){p=n;break}if((r+31|0)<(q|0)){p=q+1&65535;break}else{p=(d[18112+(q-r)>>0]|0)+q&65535;break}}while(0);d:do if(k<<16>>16){n=k;r=L;while(1){q=b[r+8>>1]|0;if(q<<16>>16>=m<<16>>16?(s=r,(c[s>>2]&t|0)==(t|0)?(c[s+4>>2]&u|0)==(u|0):0):0){ga=52;break}if(q<<16>>16<=m<<16>>16?(s=r,q=c[s>>2]|0,s=c[s+4>>2]|0,(q&t|0)==(q|0)&(s&u|0)==(s|0)):0)break d;n=n+-1<<16>>16;if(!(n<<16>>16))break;else r=r+16|0}if((ga|0)==52){q=r;n=r+8|0;ga=53;break}if((k&65535)<3){ga=48;break}r=k&65535;s=L;n=b[N>>1]|0;q=1;do{s=n<<16>>16>(b[ha+8+(q<<4)+8>>1]|0)?ha+8+(q<<4)|0:s;q=q+1|0;n=b[s+8>>1]|0}while((q|0)!=(r|0));if(n<<16>>16>m<<16>>16){q=s;n=s+8|0;ga=53}}else ga=48;while(0);if((ga|0)==48){n=k&65535;b[ha+8+(n<<4)+10>>1]=p;q=ha+8+(n<<4)|0;n=ha+8+(n<<4)+8|0;k=k+1<<16>>16;ga=53}do if((ga|0)==53){ga=0;s=q;c[s>>2]=t;c[s+4>>2]=u;b[n>>1]=m;m=q+10|0;if((b[m>>1]|0)<=p<<16>>16)break;b[m>>1]=p}while(0);v=v+1|0}while((v|0)!=(x|0));w=w+1|0}while((w|0)!=(B|0))}n=0}while(0);C=C+48|0}while(C>>>0<D>>>0)}else l=0;while(0);b[O>>1]=1;c[c[P>>2]>>2]=o;c[Q>>2]=8192;b[R>>1]=0;a[S>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;if(l|0)break a;n=k&65535;m=0;while(1){if(m>>>0>=n>>>0)break b;b[U>>1]=(e[ha+8+(m<<4)+8>>1]|0)+1;b[V>>1]=b[ha+8+(m<<4)+10>>1]|0;C=ha+8+(m<<4)|0;D=c[C+4>>2]|0;l=aa;c[l>>2]=c[C>>2];c[l+4>>2]=D;l=_l(f,aa)|0;if(!l)m=m+1|0;else break a}}while(0);o=o+48|0;if(o>>>0>=$>>>0){l=0;break}}b[ha>>1]=k;ha=l;Ra=ia;return ha|0}function Zl(f,i,j,k,l,m,n,o,p){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=Ra;Ra=Ra+32|0;P=U+24|0;M=U+16|0;x=U+8|0;y=U;B=c[f+4>>2]|0;G=c[n+16>>2]|0;T=c[f+12>>2]|0;v=c[f>>2]|0;O=c[v>>2]|0;v=c[v+4>>2]|0;w=d[T+16>>0]|0;I=c[n>>2]|0;c[p>>2]=0;C=T;c[C>>2]=i;c[C+4>>2]=j;C=n+4|0;z=(I|0)>0;if(z){q=c[B+20>>2]|0;i=c[C>>2]|0;j=0;while(1){S=c[i+8>>2]|0;u=i+5|0;a[u>>0]=0;Q=q+(S*48|0)+32|0;N=c[Q>>2]|0;Q=c[Q+4>>2]|0;if((N&k|0)==(N|0)&(Q&l|0)==(Q|0)?(b[q+(S*48|0)+12>>1]&m)<<16>>16==0:0)a[u>>0]=1;j=j+1|0;if((j|0)==(I|0))break;else i=i+12|0}}gw(G|0,0,I<<3|0)|0;J=n+24|0;c[J>>2]=0;E=n+20|0;c[E>>2]=0;K=n+32|0;c[K>>2]=0;N=n+40|0;g[N>>3]=5.e+98;Q=n+48|0;S=Q;c[S>>2]=25;c[S+4>>2]=0;S=n+56|0;c[S>>2]=0;j=v+8+(w*72|0)+56|0;i=c[j+4>>2]|0;D=n+64|0;c[D>>2]=c[j>>2];c[D+4>>2]=i;D=v+8+(w*72|0)+16|0;i=c[(c[D>>2]|0)+64>>2]|0;j=c[O>>2]|0;if((c[i>>2]|0)!=(j|0))do i=c[i+24>>2]|0;while((c[i>>2]|0)!=(j|0));q=c[i+8>>2]|0;u=Xa[c[(c[q>>2]|0)+12>>2]&255](q,n)|0;a:do switch(u|0){case 0:case 19:break;case 7:{i=c[O>>2]|0;j=i+81|0;if((a[j>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;A=i+272|0;c[A>>2]=(c[A>>2]|0)+1;i=c[i+236>>2]|0;if(i|0)c[i+12>>2]=7}break}default:{i=c[q+8>>2]|0;if(i|0){c[x>>2]=i;cd(O,31408,x);break a}switch(u|0){case 516:{i=50738;break}case 100:{i=50760;break}case 101:{i=50782;break}default:{i=u&255;if(i>>>0<29?(520028155>>>i&1|0)!=0:0)i=c[22960+(i<<2)>>2]|0;else i=50724}}c[y>>2]=i;cd(O,31408,y)}}while(0);i=q+8|0;j=c[i>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0;switch(u|0){case 0:{do if(z){j=T+48|0;i=0;do{c[(c[j>>2]|0)+(i<<2)>>2]=0;i=i+1|0}while((i|0)!=(I|0));A=T+24|0;i=T+30|0;b[i>>1]=0;if(z){y=B+12|0;z=T+48|0;x=B+20|0;u=-1;v=c[C>>2]|0;w=0;while(1){q=c[G+(w<<3)>>2]|0;k=q+-1|0;if((q|0)>0){l=c[v+8>>2]|0;if((q|0)>(I|0)|(l|0)<0)break;if((l|0)>=(c[y>>2]|0))break;j=(c[z>>2]|0)+(k<<2)|0;if(c[j>>2]|0)break;if(!(a[v+5>>0]|0))break;m=c[x>>2]|0;V=m+(l*48|0)+32|0;W=T;B=c[W+4>>2]|c[V+4>>2];C=T;c[C>>2]=c[W>>2]|c[V>>2];c[C+4>>2]=B;c[j>>2]=m+(l*48|0);u=(k|0)>(u|0)?k:u;if((q|0)<17?a[G+(w<<3)+4>>0]|0:0)b[i>>1]=1<<k|e[i>>1];if(b[m+(l*48|0)+12>>1]&1){c[K>>2]=0;c[S>>2]=c[S>>2]&-2;c[p>>2]=1}}w=w+1|0;if((w|0)>=(I|0)){R=50;break}else v=v+12|0}if((R|0)==50){j=b[i>>1]|0;q=A;k=A;break}c[M>>2]=c[c[D>>2]>>2];cd(O,43661,M);W=1;Ra=U;return W|0}else{u=-1;j=0;q=A;k=A}}else{k=T+24|0;i=T+30|0;b[i>>1]=0;u=-1;j=0;q=k}while(0);b[i>>1]=j&~o;b[T+40>>1]=u+1;b:do if((u|0)>=0){j=c[T+48>>2]|0;i=0;while(1){if(!(c[j+(i<<2)>>2]|0))break;if((i|0)<(u|0))i=i+1|0;else break b}c[P>>2]=c[c[D>>2]>>2];cd(O,43661,P);W=1;Ra=U;return W|0}while(0);c[q>>2]=c[E>>2];u=n+28|0;l=T+28|0;a[l>>0]=c[u>>2];c[u>>2]=0;u=T+32|0;c[u>>2]=c[J>>2];if(!(c[K>>2]|0))i=0;else i=c[n+8>>2]&255;a[k+5>>0]=i;b[T+18>>1]=0;r=+g[N>>3];g[h>>3]=r;i=c[h>>2]|0;j=c[h+4>>2]|0;do if(!(r<=1.0)){if(!(r<=2.0e9)){i=bw(i|0,j|0,52)|0;L()|0;i=(i*10|0)+55316&65535;break}i=~~r>>>0;j=+t(r)>=1.0?(r>0.0?~~+H(+s(r/4294967296.0),4294967295.0)>>>0:~~+F((r-+(~~r>>>0))/4294967296.0)>>>0):0;if(!(j>>>0<0|(j|0)==0&i>>>0<8)){if(j>>>0>0|(j|0)==0&i>>>0>255){q=40;do{q=(q&65535)+40|0;W=i;i=bw(i|0,j|0,4)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>4095);q=q&65535}else q=40;if(j>>>0>0|(j|0)==0&i>>>0>15)do{q=(q&65535)+10&65535;W=i;i=bw(i|0,j|0,1)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>31)}else{if(j>>>0<0|(j|0)==0&i>>>0<2){i=0;break}q=40;do{q=(q&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);q=q&65535}i=(q&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)&65535}else i=0;while(0);b[T+20>>1]=i;j=Q;i=c[j>>2]|0;j=c[j+4>>2]|0;if(j>>>0<0|(j|0)==0&i>>>0<8)if(j>>>0<0|(j|0)==0&i>>>0<2)i=0;else{q=40;do{q=(q&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);q=q&65535;R=88}else{if(j>>>0>0|(j|0)==0&i>>>0>255){q=40;do{q=(q&65535)+40|0;W=i;i=bw(i|0,j|0,4)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>4095);q=q&65535}else q=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{q=(q&65535)+10&65535;W=i;i=bw(i|0,j|0,1)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>31);R=88}else R=88}if((R|0)==88)i=(q&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)&65535;b[T+22>>1]=i;j=T+36|0;W=c[j>>2]|0;c[j>>2]=(c[S>>2]&1|0)==0?W&-4097:W|4096;j=_l(f,T)|0;if(!(a[l>>0]|0)){W=j;Ra=U;return W|0}i=c[u>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{W=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-W;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);a[l>>0]=0;W=j;Ra=U;return W|0}case 19:{W=0;Ra=U;return W|0}default:{W=u;Ra=U;return W|0}}return 0}function _l(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;k=c[f>>2]|0;B=c[c[k>>2]>>2]|0;h=f+24|0;i=c[h>>2]|0;if(!i){f=c[f+16>>2]|0;if(!f){g=101;return g|0}b[f>>1]=0;g=101;return g|0}c[h>>2]=i+-1;p=c[f+16>>2]|0;if(p|0){if(!(b[g+40>>1]|0)){g=0;return g|0}m=g;l=c[m>>2]|0;m=c[m+4>>2]|0;n=b[g+20>>1]|0;o=b[g+22>>1]|0;j=b[p>>1]|0;i=p+8|0;do if(j<<16>>16){f=j;k=i;while(1){h=b[k+8>>1]|0;if(h<<16>>16>=n<<16>>16?(g=k,(c[g>>2]&l|0)==(l|0)?(c[g+4>>2]&m|0)==(m|0):0):0){v=18;break}if(h<<16>>16<=n<<16>>16?(g=k,B=c[g>>2]|0,g=c[g+4>>2]|0,(B&l|0)==(B|0)&(g&m|0)==(g|0)):0){f=0;v=157;break}f=f+-1<<16>>16;if(!(f<<16>>16)){v=13;break}else k=k+16|0}if((v|0)==13){if((j&65535)<3){v=14;break}j=j&65535;f=b[p+16>>1]|0;h=1;do{i=f<<16>>16>(b[p+8+(h<<4)+8>>1]|0)?p+8+(h<<4)|0:i;h=h+1|0;f=b[i+8>>1]|0}while((h|0)!=(j|0));if(f<<16>>16>n<<16>>16){h=i;f=i+8|0;break}else f=0;return f|0}else if((v|0)==18){h=k;f=k+8|0;break}else if((v|0)==157)return f|0}else v=14;while(0);if((v|0)==14){f=j&65535;b[p>>1]=j+1<<16>>16;b[p+8+(f<<4)+10>>1]=o;h=p+8+(f<<4)|0;f=p+8+(f<<4)+8|0}g=h;c[g>>2]=l;c[g+4>>2]=m;b[f>>1]=n;f=h+10|0;if((b[f>>1]|0)<=o<<16>>16){g=0;return g|0}b[f>>1]=o;g=0;return g|0}f=k+60|0;p=c[f>>2]|0;A=g+36|0;n=c[A>>2]|0;k=(p|0)==0;if(!(k|(n&512|0)==0)){l=g+20|0;m=g+22|0;i=a[g+16>>0]|0;h=p;do{do if((a[h+16>>0]|0)==i<<24>>24?c[h+36>>2]&512|0:0){if(am(h,g)|0){b[l>>1]=b[h+20>>1]|0;b[m>>1]=(e[h+22>>1]|0)+65535;break}if(am(g,h)|0){b[l>>1]=b[h+20>>1]|0;b[m>>1]=(e[h+22>>1]|0)+1}}while(0);h=c[h+52>>2]|0}while((h|0)!=0)}a:do if(k)v=57;else{q=a[g+16>>0]|0;r=g+17|0;o=g+42|0;s=g+18|0;t=g+20|0;u=g+22|0;if((n&513|0)!=513){m=p;while(1){if((a[m+16>>0]|0)==q<<24>>24?(a[m+17>>0]|0)==(a[r>>0]|0):0){v=m;p=c[v>>2]|0;v=c[v+4>>2]|0;i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;k=h&p;l=i&v;if((((k|0)==(p|0)&(l|0)==(v|0)?(b[m+18>>1]|0)<=(b[s>>1]|0):0)?(b[m+20>>1]|0)<=(b[t>>1]|0):0)?(b[m+22>>1]|0)<=(b[u>>1]|0):0){f=0;break}if(((k|0)==(h|0)&(l|0)==(i|0)?(b[m+20>>1]|0)>=(b[t>>1]|0):0)?(b[m+22>>1]|0)>=(b[u>>1]|0):0){v=57;break a}}f=m+52|0;m=c[f>>2]|0;if(!m){i=f;v=58;break a}}return f|0}m=p;while(1){if((a[m+16>>0]|0)==q<<24>>24?(a[m+17>>0]|0)==(a[r>>0]|0):0){if((c[m+36>>2]&16384|0?(b[o>>1]|0)==0:0)?(p=m,v=g,n=c[v>>2]|0,v=c[v+4>>2]|0,(n&c[p>>2]|0)==(n|0)?(v&c[p+4>>2]|0)==(v|0):0):0){v=57;break a}v=m;p=c[v>>2]|0;v=c[v+4>>2]|0;i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;k=h&p;l=i&v;if((((k|0)==(p|0)&(l|0)==(v|0)?(b[m+18>>1]|0)<=(b[s>>1]|0):0)?(b[m+20>>1]|0)<=(b[t>>1]|0):0)?(b[m+22>>1]|0)<=(b[u>>1]|0):0){f=0;break}if(((k|0)==(h|0)&(l|0)==(i|0)?(b[m+20>>1]|0)>=(b[t>>1]|0):0)?(b[m+22>>1]|0)>=(b[u>>1]|0):0){v=57;break a}}f=m+52|0;m=c[f>>2]|0;if(!m){i=f;v=58;break a}}return f|0}while(0);b:do if((v|0)==57){u=c[f>>2]|0;if(u){f=u+52|0;h=c[f>>2]|0;if(h){o=g+16|0;p=g+17|0;q=g+42|0;r=g+18|0;s=g+20|0;t=g+22|0;do{n=a[o>>0]|0;while(1){if((a[h+16>>0]|0)==n<<24>>24?(a[h+17>>0]|0)==(a[p>>0]|0):0){if(((c[h+36>>2]&16384|0?(b[q>>1]|0)==0:0)?(c[A>>2]&513|0)==513:0)?(l=h,m=g,k=c[m>>2]|0,m=c[m+4>>2]|0,(k&c[l>>2]|0)==(k|0)?(m&c[l+4>>2]|0)==(m|0):0):0)break;C=h;D=c[C>>2]|0;C=c[C+4>>2]|0;k=g;i=c[k>>2]|0;k=c[k+4>>2]|0;l=i&D;m=k&C;if((((l|0)==(D|0)&(m|0)==(C|0)?(b[h+18>>1]|0)<=(b[r>>1]|0):0)?(b[h+20>>1]|0)<=(b[s>>1]|0):0)?(b[h+22>>1]|0)<=(b[t>>1]|0):0)break b;if(((l|0)==(i|0)&(m|0)==(k|0)?(b[h+20>>1]|0)>=(b[s>>1]|0):0)?(b[h+22>>1]|0)>=(b[t>>1]|0):0)break}f=h+52|0;h=c[f>>2]|0;if(!h)break b}c[f>>2]=c[h+52>>2];$l(B,h);h=c[f>>2]|0}while((h|0)!=0)}}else{i=f;v=58}}while(0);do if((v|0)==58){c:do if(c[B+272>>2]|0)if(!(a[B+81>>0]|0))v=69;else{c[i>>2]=0;D=7;return D|0}else{do if((e[B+276>>1]|0)>=72){h=B+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];D=B+284|0;c[D>>2]=(c[D>>2]|0)+1;break c}h=B+296|0;f=c[h>>2]|0;if(!f){f=B+292|0;break}else{c[h>>2]=c[f>>2];D=B+284|0;c[D>>2]=(c[D>>2]|0)+1;break c}}else f=B+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;v=69}while(0);if((v|0)==69)f=_d(B,72,0)|0;c[i>>2]=f;if(!f){D=7;return D|0}else{c[f+48>>2]=f+56;b[f+40>>1]=0;b[f+44>>1]=3;c[f+36>>2]=0;c[f+52>>2]=0;u=f;break}}while(0);l=u+36|0;f=c[l>>2]|0;do if(f&17408|0){if(f&1024|0?(x=u+28|0,a[x>>0]|0):0){f=u+32|0;h=c[f>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{D=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);a[x>>0]=0;c[f>>2]=0;break}if(f&16384|0?(y=u+32|0,w=c[y>>2]|0,w|0):0){f=c[w+16>>2]|0;d:do if(f){do if(B|0){h=B+480|0;if(!(c[h>>2]|0)){i=f;if((c[B+304>>2]|0)>>>0>i>>>0)break;if((c[B+308>>2]|0)>>>0<=i>>>0)break;D=B+300|0;c[f>>2]=c[D>>2];c[D>>2]=f}else Xd(B,f);f=c[y>>2]|0;v=113;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);v=111;break}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);v=111;break}}else v=111;while(0);if((v|0)==111){f=c[y>>2]|0;if(!B){z=f;v=118}else{h=B+480|0;v=113}}do if((v|0)==113){if(c[h>>2]|0){Xd(B,f);break}D=f;if((c[B+304>>2]|0)>>>0<=D>>>0?(c[B+308>>2]|0)>>>0>D>>>0:0){D=B+300|0;c[f>>2]=c[D>>2];c[D>>2]=f}else{z=f;v=118}}while(0);do if((v|0)==118?z|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{D=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}while(0);c[y>>2]=0}}while(0);f=b[g+40>>1]|0;k=u+44|0;do if((e[k>>1]|0)<(f&65535)){i=(f&65535)+7&131064;h=i<<2;e:do if(c[B+272>>2]|0){if(!(a[B+81>>0]|0))v=135}else{do if(!(0<0|(0==0?(e[B+276>>1]|0)>>>0<h>>>0:0))){f=B+300|0;j=c[f>>2]|0;if(j|0){c[f>>2]=c[j>>2];v=B+284|0;c[v>>2]=(c[v>>2]|0)+1;v=136;break e}f=B+296|0;j=c[f>>2]|0;if(!j){f=B+292|0;break}else{c[f>>2]=c[j>>2];v=B+284|0;c[v>>2]=(c[v>>2]|0)+1;v=136;break e}}else f=B+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;v=135}while(0);if((v|0)==135){j=_d(B,h,0)|0;v=136}if((v|0)==136?j|0:0){f=u+48|0;ew(j|0,c[f>>2]|0,e[k>>1]<<2|0)|0;h=c[f>>2]|0;do if((h|0)!=(u+56|0)){if(c[B+480>>2]|0){Xd(B,h);break}D=h;if((c[B+304>>2]|0)>>>0<=D>>>0?(c[B+308>>2]|0)>>>0>D>>>0:0){D=B+300|0;c[h>>2]=c[D>>2];c[D>>2]=h;break}if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{D=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[f>>2]=j;b[k>>1]=i;v=149;break}i=u+24|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;i=7}else{j=c[u+48>>2]|0;v=149}while(0);do if((v|0)==149){f=u;h=g;i=f+44|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));ew(j|0,c[g+48>>2]|0,e[u+40>>1]<<2|0)|0;f=c[A>>2]|0;if(f&1024|0){a[g+28>>0]=0;i=0;break}if(!(f&16384))i=0;else{c[g+32>>2]=0;i=0}}while(0);if(c[l>>2]&1024|0){D=i;return D|0}f=u+32|0;h=c[f>>2]|0;if(!h){D=i;return D|0}D=h+55|0;if(((d[D>>0]|d[D+1>>0]<<8)&3)!=3){D=i;return D|0}c[f>>2]=0;D=i;return D|0}function $l(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=e+48|0;f=c[l>>2]|0;m=e+56|0;do if((f|0)!=(m|0)){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}k=f;if((c[d+304>>2]|0)>>>0<=k>>>0?(c[d+308>>2]|0)>>>0>k>>>0:0){k=d+300|0;c[f>>2]=c[k>>2];c[k>>2]=f;break}}if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);k=e+36|0;f=c[k>>2]|0;do if(f&17408|0){if(f&1024|0?(h=e+28|0,a[h>>0]|0):0){f=e+32|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);a[h>>0]=0;c[f>>2]=0;break}if(f&16384|0?(i=e+32|0,g=c[i>>2]|0,g|0):0){f=c[g+16>>2]|0;a:do if(f){do if(d|0){g=d+480|0;if(!(c[g>>2]|0)){h=f;if((c[d+304>>2]|0)>>>0>h>>>0)break;if((c[d+308>>2]|0)>>>0<=h>>>0)break;h=d+300|0;c[f>>2]=c[h>>2];c[h>>2]=f}else Xd(d,f);f=c[i>>2]|0;h=35;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);h=33;break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);h=33;break}}else h=33;while(0);if((h|0)==33){f=c[i>>2]|0;if(!d){j=f;h=40}else{g=d+480|0;h=35}}do if((h|0)==35){if(c[g>>2]|0){Xd(d,f);break}g=f;if((c[d+304>>2]|0)>>>0<=g>>>0?(c[d+308>>2]|0)>>>0>g>>>0:0){g=d+300|0;c[f>>2]=c[g>>2];c[g>>2]=f}else{j=f;h=40}}while(0);do if((h|0)==40?j|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{h=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}}while(0);c[l>>2]=m;b[e+40>>1]=0;b[e+44>>1]=3;c[k>>2]=0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);return}m=e;if((c[d+304>>2]|0)>>>0<=m>>>0?(c[d+308>>2]|0)>>>0>m>>>0:0){m=d+300|0;c[e>>2]=c[m>>2];c[m>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{m=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function am(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=b[a+40>>1]|0;g=h&65535;j=b[a+42>>1]|0;i=b[d+40>>1]|0;l=i&65535;k=b[d+42>>1]|0;if((k&65535)>(j&65535)?1:(g-(j&65535)|0)>=(l-(k&65535)|0)){d=0;return d|0}e=b[a+20>>1]|0;f=b[d+20>>1]|0;if(e<<16>>16>=f<<16>>16){if(e<<16>>16>f<<16>>16){d=0;return d|0}if((b[a+22>>1]|0)>(b[d+22>>1]|0)){d=0;return d|0}}e=g+-1|0;a:do if(h<<16>>16){k=c[a+48>>2]|0;j=d+48|0;if(!(i<<16>>16)){while(1){if(c[k+(e<<2)>>2]|0){e=0;break}if((e|0)>0)e=e+-1|0;else break a}return e|0}b:while(1){h=c[k+(e<<2)>>2]|0;c:do if(h|0){i=c[j>>2]|0;f=l;while(1){g=f;f=f+-1|0;if((c[i+(f<<2)>>2]|0)==(h|0))break c;if((g|0)<=1){e=0;break b}}}while(0);if((e|0)>0)e=e+-1|0;else break a}return e|0}while(0);if(c[a+36>>2]&64|0?(c[d+36>>2]&64|0)==0:0){d=0;return d|0}d=1;return d|0}function bm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[c[e>>2]>>2]|0;a:do if((a[f>>0]|0)==44){while(1){if(!(bm(d,e,c[f+12>>2]|0)|0)){f=0;break}f=c[f+16>>2]|0;if((a[f>>0]|0)!=44)break a}return f|0}while(0);k=(0==0?(c[(c[g>>2]|0)+32>>2]&8388608|0)==0:0)?g:0;j=e+12|0;g=c[j>>2]|0;if((g|0)<=0){d=0;return d|0}h=c[e+20>>2]|0;i=0;while(1){e=c[h>>2]|0;if(!((c[e+4>>2]&1|0)!=0?(b[e+36>>1]|0)!=(d|0):0)){if(em(k,e,f,d)|0){f=1;g=12;break}g=c[j>>2]|0}i=i+1|0;if((i|0)>=(g|0)){f=0;g=12;break}else h=h+48|0}if((g|0)==12)return f|0;return 0}function cm(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;s=t;r=d;p=d+8|0;g=p;q=~(c[g>>2]|c[r>>2]);r=~(c[g+4>>2]|c[r+4>>2]);g=c[a+12>>2]|0;m=a+20|0;a:do if((g|0)>0){n=d+40|0;o=d+48|0;d=d+22|0;a=0;l=c[m>>2]|0;while(1){if(b[l+10>>1]&2)break a;k=l+40|0;i=c[k>>2]|0;k=c[k+4>>2]|0;j=p;b:do if((i&q|0)==0&(k&r|0)==0&(c[j>>2]&i|0?1:(c[j+4>>2]&k|0)!=0)){h=b[n>>1]|0;if(h<<16>>16){k=c[o>>2]|0;h=h&65535;do{i=h;h=h+-1|0;j=c[k+(h<<2)>>2]|0;if(j|0){if((j|0)==(l|0))break b;j=c[j+16>>2]|0;if((j|0)>-1?((c[m>>2]|0)+(j*48|0)|0)==(l|0):0)break b}}while((i|0)>1)}h=b[l+8>>1]|0;if(h<<16>>16<1){b[d>>1]=(e[d>>1]|0)+(h&65535);break}b[d>>1]=(b[d>>1]|0)+-1<<16>>16;if(b[l+12>>1]&130){k=(uk(c[(c[l>>2]|0)+16>>2]|0,s)|0)!=0;k=k&((c[s>>2]|0)+1|0)>>>0<3?10:20;c[s>>2]=k;a=(k|0)>(a<<16>>16|0)?k&65535:a}}while(0);if((g|0)>1){g=g+-1|0;l=l+48|0}else break}}else{a=0;d=d+22|0}while(0);a=(f<<16>>16)-(a<<16>>16)|0;if((a|0)>=(b[d>>1]|0)){Ra=t;return}b[d>>1]=a;Ra=t;return}function dm(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;Fa=Ra;Ra=Ra+96|0;ga=Fa;ja=c[c[f>>2]>>2]|0;ua=c[ja>>2]|0;va=c[f+12>>2]|0;sa=ua+81|0;if(a[sa>>0]|0){Ea=7;Ra=Fa;return Ea|0}wa=va+36|0;xa=c[wa>>2]|0;da=(xa&32|0)==0?447:24;ra=h+55|0;da=((d[ra>>0]|d[ra+1>>0]<<8)&4)==0?da:da&387;ya=va+24|0;za=b[ya>>1]|0;ka=va+26|0;la=b[ka>>1]|0;ma=va+28|0;na=b[ma>>1]|0;Aa=va+42|0;oa=b[Aa>>1]|0;Ba=va+40|0;m=b[Ba>>1]|0;qa=va;pa=c[qa>>2]|0;qa=c[qa+4>>2]|0;Ca=va+22|0;Da=b[Ca>>1]|0;ha=f+4|0;k=c[ha>>2]|0;ia=g+40|0;ta=c[ia>>2]|0;Ea=za&65535;c[ga>>2]=k;c[ga+4>>2]=k;k=ga+12|0;c[k>>2]=0;l=ga+16|0;a[l>>0]=0;n=ga+8|0;c[n>>2]=0;c[ga+20>>2]=da;c[ga+24>>2]=0;c[ga+28>>2]=ta;a[ga+17>>0]=1;a[ga+18>>0]=1;do if(h){o=b[(c[h+4>>2]|0)+(Ea<<1)>>1]|0;j=o<<16>>16;if(o<<16>>16==-2){c[k>>2]=c[(c[h+40>>2]|0)+4+(Ea*20|0)>>2];c[n>>2]=c[(c[h+32>>2]|0)+(Ea<<2)>>2];b[ga+72>>1]=-2;n=Ul(ga)|0;break}k=c[h+12>>2]|0;if(o<<16>>16!=(b[k+40>>1]|0))if(o<<16>>16>-1){a[l>>0]=a[(c[k+4>>2]|0)+(j<<4)+13>>0]|0;c[n>>2]=c[(c[h+32>>2]|0)+(Ea<<2)>>2];ca=8}else ca=8;else{j=-1;ca=8}}else{j=Ea;ca=8}while(0);if((ca|0)==8){b[ga+72>>1]=j;n=Tl(ga)|0}b[va+18>>1]=0;ta=h+8|0;da=b[c[ta>>2]>>1]|0;if(da<<16>>16<11)M=0;else{j=da<<16>>16;k=((j|0)<0)<<31>>31;if((da&65535)>255){l=40;do{l=(l&65535)+40|0;ba=j;j=bw(j|0,k|0,4)|0;aa=k;k=L()|0}while(aa>>>0>0|(aa|0)==0&ba>>>0>4095);l=l&65535}else l=40;if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;ba=j;j=bw(j|0,k|0,1)|0;aa=k;k=L()|0}while(aa>>>0>0|(aa|0)==0&ba>>>0>31);k=l}else k=l;M=(k&65535)+65493+(e[3648+((j&7)<<1)>>1]|0)&65535}a:do if(!n)j=0;else{v=h+4|0;w=va+8|0;x=h+12|0;y=g+36|0;z=h+54|0;A=f+20|0;B=va+44|0;C=h+50|0;D=va+48|0;E=m&65535;V=E+8&131064;F=V<<2;G=ua+272|0;H=ua+276|0;I=h+48|0;J=g+16|0;K=M<<16>>16;N=ua+288|0;O=ua+300|0;P=va+56|0;Q=i<<16>>16==0;R=K+49|0;S=va+20|0;T=ua+296|0;U=ua+284|0;V=V&65535;W=ua+480|0;X=K+31|0;Y=i<<16>>16;Z=ua+292|0;_=ua+304|0;$=h+52|0;aa=K+1&65535;ba=ua+308|0;t=n;l=0;k=0;do{s=b[t+12>>1]|0;u=s&65535;if(s<<16>>16==256){j=b[(c[v>>2]|0)+(Ea<<1)>>1]|0;if(j<<16>>16>-1)j=d[(c[(c[x>>2]|0)+4>>2]|0)+(j<<16>>16<<4)+12>>0]|0;else j=j<<16>>16==-1&1;if(j)j=0;else ca=26}else ca=26;b:do if((ca|0)==26){ca=0;r=t+32|0;q=r;o=w;n=c[o>>2]|0;o=c[o+4>>2]|0;if(((n&c[q>>2]|0)==0?(o&c[q+4>>2]|0)==0:0)?(ea=t+10|0,!(s<<16>>16==16&(b[ea>>1]&256)!=0)):0){if(a[y>>0]&8?(c[(c[t>>2]|0)+4>>2]&1|0)==0:0){j=0;break}if((a[z>>0]|0)!=0?((e[C>>1]|0)+-1|0)==(Ea|0):0)j=2;else j=1;c[A>>2]=c[A>>2]|j;c[wa>>2]=xa;b[ya>>1]=za;b[ka>>1]=la;b[ma>>1]=na;b[Ba>>1]=m;if((m&65535)<(e[B>>1]|0)){q=E;p=m;j=c[D>>2]|0}else{do if(c[G>>2]|0)if(!(a[sa>>0]|0))ca=43;else{j=0;break a}else{if(!(0<0|(0==0?(e[H>>1]|0)>>>0<F>>>0:0))){j=c[O>>2]|0;if(j|0){c[O>>2]=c[j>>2];c[U>>2]=(c[U>>2]|0)+1;break}j=c[T>>2]|0;if(!j)j=Z;else{c[T>>2]=c[j>>2];c[U>>2]=(c[U>>2]|0)+1;break}}else j=N;c[j>>2]=(c[j>>2]|0)+1;ca=43}while(0);if((ca|0)==43){ca=0;j=_d(ua,F,0)|0}if(!j){j=0;break a}ew(j|0,c[D>>2]|0,e[B>>1]<<2|0)|0;n=c[D>>2]|0;c:do if((n|0)!=(P|0)){if(c[W>>2]|0){Xd(ua,n);break}o=n;do if((c[_>>2]|0)>>>0<=o>>>0){if((c[ba>>2]|0)>>>0<=o>>>0)break;c[n>>2]=c[O>>2];c[O>>2]=n;break c}while(0);if(!n)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{q=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[D>>2]=j;b[B>>1]=V;p=b[Ba>>1]|0;o=w;q=p&65535;n=c[o>>2]|0;o=c[o+4>>2]|0}p=p+1<<16>>16;b[Ba>>1]=p;c[j+(q<<2)>>2]=t;j=r;q=(c[j+4>>2]|qa)&~o;r=va;c[r>>2]=(c[j>>2]|pa)&~n;c[r+4>>2]=q;d:do if(!(u&1)){if(u&130|0){j=b[(c[v>>2]|0)+(Ea<<1)>>1]|0;n=c[wa>>2]|0;o=n|1;c[wa>>2]=o;do if(j<<16>>16!=-1){if(!(Q&j<<16>>16>-1)){s=0;p=o;break d}j=b[C>>1]|0;if(((j&65535)+-1|0)!=(Ea|0)){s=0;p=o;break d}if((d[ra>>0]|d[ra+1>>0]<<8)&8)break;if(j<<16>>16==1?s<<16>>16==2&(a[z>>0]|0)!=0:0)break;p=n|65537;c[wa>>2]=p;s=0;break d}while(0);p=n|4097;c[wa>>2]=p;s=0;break}if(u&256|0){p=c[wa>>2]|8;c[wa>>2]=p;s=0;break}j=c[wa>>2]|0;if(!(u&36)){c[wa>>2]=j|18;j=(gm(ja,c[ia>>2]|0,h,Ea,t)|0)&65535;b[ma>>1]=j;j=c[wa>>2]|0;if(!(j&32)){l=t;k=0;s=0;p=j;break}l=t;k=c[(c[D>>2]|0)+((e[Ba>>1]|0)+-2<<2)>>2]|0;s=0;p=j;break}c[wa>>2]=j|34;s=(gm(ja,c[ia>>2]|0,h,Ea,t)|0)&65535;b[ka>>1]=s;if(!(b[ea>>1]&256)){l=0;k=t;s=0;p=c[wa>>2]|0;break}l=t+48|0;j=b[Ba>>1]|0;if((j&65535)<(e[B>>1]|0))k=c[D>>2]|0;else{o=(j&65535)+8&131064;n=o<<2;e:do if(c[G>>2]|0)if(!(a[sa>>0]|0))ca=117;else{j=0;break a}else{do if(0<0|(0==0?(e[H>>1]|0)>>>0<n>>>0:0))j=N;else{k=c[O>>2]|0;if(k|0){c[O>>2]=c[k>>2];c[U>>2]=(c[U>>2]|0)+1;break e}k=c[T>>2]|0;if(!k){j=Z;break}c[T>>2]=c[k>>2];c[U>>2]=(c[U>>2]|0)+1;break e}while(0);c[j>>2]=(c[j>>2]|0)+1;ca=117}while(0);if((ca|0)==117){ca=0;k=_d(ua,n,0)|0}if(!k){j=0;break a}ew(k|0,c[D>>2]|0,e[B>>1]<<2|0)|0;j=c[D>>2]|0;f:do if((j|0)!=(P|0)){if(c[W>>2]|0){Xd(ua,j);break}n=j;do if((c[_>>2]|0)>>>0<=n>>>0){if((c[ba>>2]|0)>>>0<=n>>>0)break;c[j>>2]=c[O>>2];c[O>>2]=j;break f}while(0);if(!j)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[D>>2]=k;b[B>>1]=o;j=b[Ba>>1]|0}b[Ba>>1]=j+1<<16>>16;c[k+((j&65535)<<2)>>2]=l;p=c[wa>>2]|16;c[wa>>2]=p;b[ma>>1]=1;k=t;s=0}else{q=c[t>>2]|0;if(!(c[q+4>>2]&2048)){j=c[q+20>>2]|0;if((j|0)!=0?(fa=c[j>>2]|0,(fa|0)!=0):0){n=((fa|0)<0)<<31>>31;do if(fa>>>0<8){if(fa>>>0<2){j=0;break}o=40;j=fa;do{o=(o&65535)+65526|0;j=cw(j|0,n|0,1)|0;n=L()|0}while(n>>>0<0|(n|0)==0&j>>>0<8);o=o&65535;ca=78}else{if(fa>>>0>255){o=40;j=fa;do{o=(o&65535)+40|0;ca=j;j=bw(j|0,n|0,4)|0;s=n;n=L()|0}while(s>>>0>0|(s|0)==0&ca>>>0>4095);o=o&65535}else{o=40;j=fa}if(!(n>>>0>0|(n|0)==0&j>>>0>15)){ca=78;break}do{o=(o&65535)+10&65535;ca=j;j=bw(j|0,n|0,1)|0;s=n;n=L()|0}while(s>>>0>0|(s|0)==0&ca>>>0>31);ca=78}while(0);if((ca|0)==78){ca=0;j=(o&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)|0}r=j<<16>>16}else r=0}else{r=(p&65535)+-1|0;if((p&65535)>1){p=c[D>>2]|0;o=0;j=46;do{n=c[p+(o<<2)>>2]|0;if(n)j=(c[n>>2]|0)==(q|0)?0:j;o=o+1|0}while((o|0)!=(r|0));r=j}else r=46}if((d[ra>>0]|d[ra+1>>0]<<8)&128){q=b[(c[ta>>2]|0)+(Ea<<1)>>1]|0;n=r&65535;if(n<<16>>16<11)j=0;else{j=n<<16>>16;p=((j|0)<0)<<31>>31;if((n&65535)>255){o=40;n=p;do{o=(o&65535)+40|0;s=j;j=bw(j|0,n|0,4)|0;p=n;n=L()|0}while(p>>>0>0|(p|0)==0&s>>>0>4095);o=o&65535}else{o=40;n=p}if(n>>>0>0|(n|0)==0&j>>>0>15){do{o=(o&65535)+10&65535;s=j;j=bw(j|0,n|0,1)|0;p=n;n=L()|0}while(p>>>0>0|(p|0)==0&s>>>0>31);n=o}else n=o;j=(n&65535)+65493+(e[3648+((j&7)<<1)>>1]|0)|0}if(((q<<16>>16)+10+(j<<16>>16)|0)<(r+K|0)){j=0;break b}}p=c[wa>>2]|4;c[wa>>2]=p;s=r}while(0);do if(!(p&2)){n=(b[ya>>1]|0)+1<<16>>16;b[ya>>1]=n;n=n&65535;t=b[t+8>>1]|0;j=t&65535;if(t<<16>>16<1?(b[(c[v>>2]|0)+(Ea<<1)>>1]|0)>-1:0){j=j-s+(e[Ca>>1]|0)&65535;ca=152;break}j=c[ta>>2]|0;j=(e[j+(n<<1)>>1]|0)-(e[j+(n+-1<<1)>>1]|0)+(e[Ca>>1]|0)|0;n=j&65535;b[Ca>>1]=n;if(u&256){j=j+10&65535;ca=152}}else{j=b[Ca>>1]|0;o=j<<16>>16;do if(k){n=b[k+8>>1]|0;if(n<<16>>16<1){j=(n&65535)+(j&65535)&65535;break}else{j=(j&65535)+65516&65535;break}}while(0);do if(l){n=b[l+8>>1]|0;if(n<<16>>16<1){j=(n&65535)+(j&65535)&65535;break}else{j=(j&65535)+65516&65535;break}}while(0);n=(k|0)!=0;do if(n){if(!((l|0)!=0&(b[k+8>>1]|0)>0))break;if((b[l+8>>1]|0)<=0)break;j=(j&65535)+65516&65535}while(0);ca=(((l|0)!=0)<<31>>31)+(n<<31>>31)+o|0;j=(j<<16>>16>10?j:10)&65535;j=((ca|0)>(j|0)?j:ca)&65535;ca=152}while(0);if((ca|0)==152){ca=0;b[Ca>>1]=j;n=j}r=n&65535;o=r+1+(((b[I>>1]|0)*15|0)/(b[(c[J>>2]|0)+46>>1]|0)|0)|0;j=o&65535;o=o<<16>>16;do if(M<<16>>16<j<<16>>16){if((R|0)>=(o|0))if((X|0)<(o|0)){j=o+1&65535;break}else{j=o+(d[18112+(o-K)>>0]|0)&65535;break}}else if((o+49|0)>=(K|0))if((o+31|0)<(K|0))j=aa;else j=(d[18112+(K-o)>>0]|0)+K&65535;else j=M;while(0);b[S>>1]=j;if(!(p&320)){q=r+16|0;o=q&65535;p=j<<16>>16;q=q<<16>>16;do if(j<<16>>16<o<<16>>16){if((p+49|0)<(q|0)){j=o;break}if((p+31|0)<(q|0)){j=q+1&65535;break}else{j=q+(d[18112+(q-p)>>0]|0)&65535;break}}else{if((q+49|0)<(p|0))break;if((q+31|0)<(p|0)){j=p+1&65535;break}else{j=(d[18112+(p-q)>>0]|0)+p&65535;break}}while(0);b[S>>1]=j}o=s+Y|0;b[S>>1]=o+(j&65535);b[Ca>>1]=o+r;cm(c[ha>>2]|0,va,da);j=_l(f,va)|0;u=c[wa>>2]|0;b[Ca>>1]=(u&2|0)==0?n:Da;if((u&16|0)==0?(e[ya>>1]|0)<(e[$>>1]|0):0)dm(f,g,h,o&65535)|0;b[Ca>>1]=Da}else j=0}while(0);t=Tl(ga)|0}while((j|0)==0&(t|0)!=0)}while(0);ja=va;c[ja>>2]=pa;c[ja+4>>2]=qa;b[ya>>1]=za;b[ka>>1]=la;b[ma>>1]=na;b[Aa>>1]=oa;c[wa>>2]=xa;b[Ca>>1]=Da;b[Ba>>1]=m;if(za<<16>>16!=oa<<16>>16){Ea=j;Ra=Fa;return Ea|0}p=Ea+1|0;if(p>>>0>=(e[h+50>>1]|0)>>>0){Ea=j;Ra=Fa;return Ea|0}if((d[ra>>0]|d[ra+1>>0]<<8)&64){Ea=j;Ra=Fa;return Ea|0}if(b[ua+76>>1]&16384){Ea=j;Ra=Fa;return Ea|0}if((b[(c[ta>>2]|0)+(p<<1)>>1]|0)<=41){Ea=j;Ra=Fa;return Ea|0}n=va+44|0;if((m&65535)<(e[n>>1]|0)){n=za;o=za;j=c[va+48>>2]|0;k=xa;l=Da}else{m=(m&65535)+8&131064;l=m<<2;g:do if(c[ua+272>>2]|0)if(!(a[sa>>0]|0))ca=194;else{Ea=7;Ra=Fa;return Ea|0}else{do if(!(0<0|(0==0?(e[ua+276>>1]|0)>>>0<l>>>0:0))){k=ua+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];sa=ua+284|0;c[sa>>2]=(c[sa>>2]|0)+1;break g}k=ua+296|0;j=c[k>>2]|0;if(!j){j=ua+292|0;break}else{c[k>>2]=c[j>>2];sa=ua+284|0;c[sa>>2]=(c[sa>>2]|0)+1;break g}}else j=ua+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;ca=194}while(0);if((ca|0)==194)j=_d(ua,l,0)|0;if(!j){Ea=7;Ra=Fa;return Ea|0}k=va+48|0;ew(j|0,c[k>>2]|0,e[n>>1]<<2|0)|0;l=c[k>>2]|0;do if((l|0)!=(va+56|0)){if(c[ua+480>>2]|0){Xd(ua,l);break}va=l;if((c[ua+304>>2]|0)>>>0<=va>>>0?(c[ua+308>>2]|0)>>>0>va>>>0:0){va=ua+300|0;c[l>>2]=c[va>>2];c[va>>2]=l;break}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{va=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-va;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[k>>2]=j;b[n>>1]=m;n=b[ya>>1]|0;o=b[Aa>>1]|0;m=b[Ba>>1]|0;k=c[wa>>2]|0;l=b[Ca>>1]|0}b[ya>>1]=n+1<<16>>16;b[Aa>>1]=o+1<<16>>16;b[Ba>>1]=m+1<<16>>16;c[j+((m&65535)<<2)>>2]=0;c[wa>>2]=k|32768;Ba=c[ta>>2]|0;Ea=(e[Ba+(Ea<<1)>>1]|0)-(e[Ba+(p<<1)>>1]|0)|0;b[Ca>>1]=(l&65535)-Ea;dm(f,g,h,(((Ea<<16)+327680|0)>>>16)+(i&65535)&65535)|0;b[Ca>>1]=Da;b[ya>>1]=za;b[Aa>>1]=za;c[wa>>2]=xa;Ea=0;Ra=Fa;return Ea|0}function em(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if(!(bk(b,d,e,f)|0)){f=1;return f|0}g=a[e>>0]|0;do if(g<<24>>24==43){if(em(b,d,c[e+12>>2]|0,f)|0){f=1;return f|0}if(!(em(b,d,c[e+16>>2]|0,f)|0)){g=a[e>>0]|0;break}else{f=1;return f|0}}while(0);a:do if(g<<24>>24==51){switch(a[d>>0]|0){case 45:case 50:break a;default:{}}g=c[d+12>>2]|0;b:do if(!g)g=0;else while(1){d=c[g+4>>2]|0;if(!(d&4096))break b;if(!(d&262144))g=g+12|0;else g=(c[g+20>>2]|0)+4|0;g=c[g>>2]|0;if(!g){g=0;break}}while(0);if(!(bk(b,g,c[e+12>>2]|0,f)|0)){f=1;return f|0}}while(0);f=0;return f|0}function fm(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;if((a[e>>0]|0)!=-94){d=0;return d|0}f=c[d+24>>2]|0;if((c[e+28>>2]|0)!=(c[f+4>>2]|0)){d=0;return d|0}f=c[f>>2]|0;h=b[e+32>>1]|0;e=b[f+52>>1]|0;a:do if(e<<16>>16){g=c[f+4>>2]|0;e=e&65535;f=0;while(1){if((b[g+(f<<1)>>1]|0)==h<<16>>16)break;f=f+1|0;if(f>>>0>=e>>>0)break a}if((f&65535)<<16>>16>=0){d=0;return d|0}}while(0);a[d+20>>0]=1;d=2;return d|0}\nfunction gq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;$=Ra;Ra=Ra+16|0;H=$+4|0;Q=$;W=c[e+12>>2]|0;f=c[W+12>>2]|0;X=c[e>>2]|0;E=c[e+4>>2]|0;F=b+235|0;G=(a[F>>0]|0)==0?157:158;if(!E){_=0;Ra=$;return _|0}_=e+8|0;I=E+-1|0;J=e+44|0;K=e+40|0;M=(f&16|0)!=0;N=(E|0)>1;O=W+4|0;P=(f&32|0)==0;R=(f&34|0)!=0;S=(f&8|0)==0;T=(f&4|0)==0;U=(f&2|0)==0;V=W+8|0;C=(f&1|0)!=0;Y=e+20|0;Z=e+16|0;f=c[_>>2]|0;a:while(1){if((f|0)>0){j=0;do{f=c[X+(j<<2)>>2]|0;if(!(a[f+4>>0]|0)){f=fq(b,f)|0;if(f|0){D=186;break a}}else{i=f+40|0;if(!(a[f+5>>0]|0)){g=c[i>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{B=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);f=f+52|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}B=g;if((c[h+304>>2]|0)>>>0<=B>>>0?(c[h+308>>2]|0)>>>0>B>>>0:0){B=h+300|0;c[g>>2]=c[B>>2];c[B>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{B=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0}c[i>>2]=0}j=j+1|0;f=c[_>>2]|0}while((j|0)<(f|0))}f=f+(((f|0)==(E|0))<<31>>31)|0;if((f|0)>0)do{m=f;f=f+-1|0;b:do if((m|0)<(E|0)){k=f;j=c[X+(f<<2)>>2]|0;do{l=k;k=k+1|0;n=X+(k<<2)|0;i=c[n>>2]|0;h=(c[j+40>>2]|0)==0;o=i;g=c[i+40>>2]|0;if(!h)if(!g){g=0;D=32}else{A=c[j+60>>2]|0;g=c[i+60>>2]|0;B=A-g|0;g=Lu(c[j+64>>2]|0,c[i+64>>2]|0,(B|0)<0?A:g)|0;g=(g|0)==0?B:g}else D=32;if((D|0)==32){D=0;g=(h&1)-((g|0)==0&1)|0}if(!g)g=(c[i>>2]|0)-(c[j>>2]|0)|0;if((g|0)<0)break b;B=X+(l<<2)|0;j=c[B>>2]|0;c[n>>2]=j;c[B>>2]=o}while((k|0)<(I|0))}while(0)}while((m|0)>1);c[_>>2]=0;f=c[X>>2]|0;if(!(c[f+40>>2]|0)){f=0;D=186;break}i=c[f+60>>2]|0;c[J>>2]=i;h=c[f+64>>2]|0;c[K>>2]=h;f=c[W>>2]|0;if(!(M|(f|0)==0)){g=c[O>>2]|0;if((i|0)<(g|0)|S&(i|0)>(g|0)){f=0;D=186;break}if(Lu(h,f,g)|0){f=0;D=186;break}}c:do if(N){f=1;do{g=c[X+(f<<2)>>2]|0;if(!(c[g+40>>2]|0)){D=48;break c}if((c[g+60>>2]|0)!=(i|0)){D=48;break c}if(Lu(h,c[g+64>>2]|0,i)|0){D=48;break c}f=f+1|0}while((f|0)<(E|0))}else{f=1;D=48}while(0);if((D|0)==48){D=0;if(!(R|(f|0)!=1)){f=c[X>>2]|0;g=(c[f+56>>2]|0)==0;if(!(a[F>>0]|0)){D=52;break}if(g){D=51;break}else f=1}}q=0;do{r=c[X+(q<<2)>>2]|0;if((a[F>>0]|0)!=0?(c[r+56>>2]|0)!=0:0){a[H>>0]=0;A=r+88|0;B=A;c[B>>2]=0;c[B+4>>2]=0;B=r+84|0;c[B>>2]=0;kq(0,c[r+72>>2]|0,c[r+76>>2]|0,r+80|0,A,B,H)}else D=64;d:do if((D|0)==64){D=0;n=r+72|0;k=r+40|0;o=r+52|0;g=c[o>>2]|0;e:do if(g|0){l=(c[n>>2]|0)+10|0;p=r+48|0;m=r+44|0;i=c[p>>2]|0;j=g;while(1){g=c[k>>2]|0;if((l-g|0)<=(i|0))break e;h=(c[m>>2]|0)-i|0;h=(h|0)<4096?h:4096;if(jd(j,g+i|0,h,i,81)|0)break d;g=(c[p>>2]|0)+h|0;c[p>>2]=g;g=(c[k>>2]|0)+g|0;h=g+20|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));i=c[p>>2]|0;j=c[o>>2]|0;if((i|0)==(c[m>>2]|0))break;if(!j)break e}do if(j|0){g=c[j+20>>2]|0;gc(c[j+16>>2]|0)|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}B=j;if((c[g+304>>2]|0)>>>0<=B>>>0?(c[g+308>>2]|0)>>>0>B>>>0:0){B=g+300|0;c[j>>2]=c[B>>2];c[B>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{B=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[o>>2]=0;c[p>>2]=0}while(0);l=c[n>>2]|0;k=r+88|0;g=a[l>>0]|0;h=g&255;do if(!(h&128)){B=k;c[B>>2]=g&255;c[B+4>>2]=0;g=1}else{B=d[l+1>>0]|0;g=B<<7|h&127;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=2;break}B=d[l+2>>0]|0;g=B<<14|g&16383;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=3;break}B=d[l+3>>0]|0;g=B<<21|g&2097151;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=4;break}i=28;j=l+4|0;g=g&268435455;h=0;do{B=j;j=j+1|0;B=d[B>>0]|0;A=cw(B&127|0,0,i|0)|0;g=Sv(A|0,L()|0,g|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((B&128|0)!=0|0!=0));B=k;c[B>>2]=g;c[B+4>>2]=h;g=j-l|0}while(0);c[r+80>>2]=l+g}while(0);q=q+1|0}while(q>>>0<f>>>0);B=f+-1|0;A=f>>>0>1;if(A){i=B;do{j=i;i=i+-1|0;f:do if((j|0)<(f|0)){g=i;l=c[X+(i<<2)>>2]|0;do{h=g;g=g+1|0;k=X+(g<<2)|0;if((Xa[G&255](l,c[k>>2]|0)|0)<0)break f;z=X+(h<<2)|0;y=c[k>>2]|0;l=c[z>>2]|0;c[k>>2]=l;c[z>>2]=y}while((g|0)<(B|0))}while(0)}while((j|0)>1)}if(c[(c[X>>2]|0)+80>>2]|0){g=0;y=0;z=0;while(1){c[H>>2]=0;c[Q>>2]=0;x=c[X>>2]|0;n=x+88|0;o=c[n>>2]|0;n=c[n+4>>2]|0;jq(b,x,H,Q)|0;g:do if(A){h=1;do{i=c[X+(h<<2)>>2]|0;if(!(c[i+80>>2]|0))break g;x=i+88|0;if(!((c[x>>2]|0)==(o|0)?(c[x+4>>2]|0)==(n|0):0))break g;jq(b,i,0,0)|0;h=h+1|0}while(h>>>0<f>>>0)}else h=1;while(0);if(T)i=c[Q>>2]|0;else{q=c[V>>2]|0;j=c[H>>2]|0;p=c[Q>>2]|0;r=j+p|0;k=j;m=0;while(1){h:do if(k>>>0<r>>>0){l=0;i=k;while(1){k=a[i>>0]|0;if(!(k&254|l)){l=i;break h}i=i+1|0;if(i>>>0<r>>>0)l=k&128;else{l=i;break}}}else l=k;while(0);i=l-j|0;if((m|0)==(q|0))break;p=p-i|0;if(!p){j=l;i=0;break}k=l+1|0;j=a[k>>0]|0;i=j&255;do if(!(i&128))j=1;else{x=d[l+2>>0]|0;i=x<<7|j&127;if(!(x&128)){j=2;break}x=d[l+3>>0]|0;i=x<<14|i&16383;if(!(x&128)){j=3;break}x=d[l+4>>0]|0;i=x<<21|i&2097151;if(!(x&128)){j=4;break}i=(a[l+5>>0]&7)<<28|i&268435455;j=5}while(0);k=k+j|0;j=l;m=i}c[H>>2]=j;c[Q>>2]=i}do if(U|(i|0)>0){w=(g|0)>0;u=w&(a[F>>0]|0)!=0;t=Tv(y|0,z|0,o|0,n|0)|0;v=L()|0;x=Tv(o|0,n|0,y|0,z|0)|0;k=L()|0;x=u?t:x;k=u?v:k;if((k|0)<0|(k|0)==0&x>>>0<1?!((x|0)==(o|0)&(k|0)==(n|0)&(w^1)):0){f=267;D=184;break a}j=0;l=x;m=k;do{j=j+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));j=(C?i+1|0:0)+g+j|0;if((j|0)>(c[Y>>2]|0)){j=j<<1;c[Y>>2]=j;l=c[Z>>2]|0;if(mb()|0){f=7;D=184;break a}j=sb(l,(j|0)>0?j:0,0)|0;if(!j){f=7;D=184;break a}c[Z>>2]=j}else j=c[Z>>2]|0;w=j+g|0;if(P){m=w;l=x;while(1){i=l&255;j=m+1|0;a[m>>0]=i|-128;l=bw(l|0,k|0,7)|0;k=L()|0;if((l|0)==0&(k|0)==0)break;else m=j}a[m>>0]=i&127;g=j-w+g|0;if(!C)break;z=c[Q>>2]|0;ew((c[Z>>2]|0)+g|0,c[H>>2]|0,z|0)|0;g=z+g|0;a[(c[Z>>2]|0)+g>>0]=0;g=g+1|0;break}l=c[H>>2]|0;v=l+i|0;m=a[l>>0]|0;switch(m<<24>>24){case 1:{i=0;j=0;break}case 2:{i=w;m=x;q=k;while(1){j=m&255;p=i+1|0;a[i>>0]=j|-128;m=bw(m|0,q|0,7)|0;q=L()|0;if((m|0)==0&(q|0)==0)break;else i=p}a[i>>0]=j&127;a[p>>0]=2;i=1-w+p|0;j=1;m=a[l>>0]|0;D=140;break}default:{i=0;j=0;D=140}}if((D|0)==140){D=0;m=m<<24>>24;if(m&254)do{l=l+1|0;u=m;m=a[l>>0]|0}while((m&254|u&128|0)!=0)}if(l>>>0<v>>>0)do{r=l+1|0;p=a[r>>0]|0;m=p&255;do if(!(m&128)){l=1;u=p&255;q=0}else{u=d[l+2>>0]|0;m=u<<7|m&127;if(!(u&128)){l=2;u=m;q=0;break}u=d[l+3>>0]|0;m=u<<14|m&16383;if(!(u&128)){l=3;u=m;q=0;break}u=d[l+4>>0]|0;m=u<<21|m&2097151;if(!(u&128)){l=4;u=m;q=0;break}p=28;l=l+5|0;m=m&268435455;q=0;do{u=l;l=l+1|0;u=d[u>>0]|0;t=cw(u&127|0,0,p|0)|0;m=Sv(t|0,L()|0,m|0,q|0)|0;q=L()|0;p=p+7|0}while(p>>>0<64&((u&128|0)!=0|0!=0));l=l-r|0;u=m}while(0);l=r+l|0;m=a[l>>0]|0;if(m<<24>>24==2){if(!j){m=w+i|0;j=m;r=x;t=k;while(1){p=r&255;s=j+1|0;a[j>>0]=p|-128;r=bw(r|0,t|0,7)|0;t=L()|0;if((r|0)==0&(t|0)==0)break;else j=s}a[j>>0]=p&127;i=i-m+s|0;j=1}t=i+1|0;a[w+i>>0]=1;s=w+t|0;r=s;p=u;while(1){i=p&255;m=r+1|0;a[r>>0]=i|-128;p=bw(p|0,q|0,7)|0;q=L()|0;if((p|0)==0&(q|0)==0)break;else r=m}a[r>>0]=i&127;i=m-s+t|0;a[w+i>>0]=2;i=i+1|0;m=a[l>>0]|0}m=m<<24>>24;if(m&254)do{l=l+1|0;u=m;m=a[l>>0]|0}while((m&254|u&128|0)!=0)}while(l>>>0<v>>>0);if(j){a[w+i>>0]=0;i=i+1|0}x=(i|0)==0;g=i+g|0;o=x?y:o;n=x?z:n}else{o=y;n=z}while(0);h=h+(((h|0)==(f|0))<<31>>31)|0;if((h|0)>0)do{k=h;h=h+-1|0;i:do if((k|0)<(f|0)){i=h;m=c[X+(h<<2)>>2]|0;do{j=i;i=i+1|0;l=X+(i<<2)|0;if((Xa[G&255](m,c[l>>2]|0)|0)<0)break i;z=X+(j<<2)|0;y=c[l>>2]|0;m=c[z>>2]|0;c[l>>2]=m;c[z>>2]=y}while((i|0)<(B|0))}while(0)}while((k|0)>1);if(!(c[(c[X>>2]|0)+80>>2]|0))break;else{y=o;z=n}}if((g|0)>0){D=183;break}}c[_>>2]=f}do if((D|0)==51){c[e+52>>2]=c[f+76>>2];f=f+72|0;g=100}else if((D|0)==52){i=c[f+76>>2]|0;c[e+52>>2]=i;f=f+72|0;if(g)g=100;else{h=c[f>>2]|0;if((c[Y>>2]|0)<(i|0)){g=i<<1;c[Y>>2]=g;f=c[Z>>2]|0;if(mb()|0){f=Z;g=7;break}f=sb(f,(g|0)>0?g:0,0)|0;if(!f){f=Z;g=7;break}c[Z>>2]=f}else f=c[Z>>2]|0;ew(f|0,h|0,i|0)|0;f=Z;g=100}}else if((D|0)==183){c[e+48>>2]=c[Z>>2];c[e+52>>2]=g;c[_>>2]=f;_=100;Ra=$;return _|0}else if((D|0)==184){_=f;Ra=$;return _|0}else if((D|0)==186){Ra=$;return f|0}while(0);c[e+48>>2]=c[f>>2];c[_>>2]=1;_=g;Ra=$;return _|0}function hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=((c[a+80>>2]|0)==0&1)-((c[b+80>>2]|0)==0&1)|0;if(d|0){b=d;return b|0}e=a+88|0;d=c[e>>2]|0;e=c[e+4>>2]|0;g=b+88|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(f|0)&(e|0)==(g|0)){b=(c[b>>2]|0)-(c[a>>2]|0)|0;return b|0}else{b=(e|0)<(g|0)|(e|0)==(g|0)&d>>>0<f>>>0?1:-1;return b|0}return 0}function iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=((c[a+80>>2]|0)==0&1)-((c[b+80>>2]|0)==0&1)|0;if(d|0){b=d;return b|0}e=a+88|0;d=c[e>>2]|0;e=c[e+4>>2]|0;g=b+88|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(f|0)&(e|0)==(g|0)){b=(c[b>>2]|0)-(c[a>>2]|0)|0;return b|0}else{b=(e|0)>(g|0)|(e|0)==(g|0)&d>>>0>f>>>0?1:-1;return b|0}return 0}function jq(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;n=v;i=v+4|0;u=e+80|0;h=c[u>>2]|0;c[n>>2]=h;t=b+235|0;b=h;if(a[t>>0]|0?c[e+56>>2]|0:0){a[i>>0]=0;if(!f)b=e+84|0;else{c[f>>2]=h;b=e+84|0;c[g>>2]=(c[b>>2]|0)+-1}kq(0,c[e+72>>2]|0,c[e+76>>2]|0,n,e+88|0,b,i);if(!(a[i>>0]|0))c[u>>2]=c[n>>2];else c[u>>2]=0;u=0;Ra=v;return u|0}m=(c[e+72>>2]|0)+(c[e+76>>2]|0)|0;q=e+52|0;o=e+40|0;r=e+48|0;p=e+44|0;h=0;while(1){i=a[b>>0]|0;if((i|h)<<24>>24)do{b=b+1|0;h=i&-128;i=a[b>>0]|0}while((i|h)<<24>>24!=0);i=c[q>>2]|0;if(!i)break;j=c[r>>2]|0;k=(c[o>>2]|0)+j|0;if(b>>>0<k>>>0)break;l=(c[p>>2]|0)-j|0;l=(l|0)<4096?l:4096;i=jd(i,k,l,j,81)|0;if(i|0){s=67;break}i=(c[r>>2]|0)+l|0;c[r>>2]=i;i=(c[o>>2]|0)+i|0;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));if((c[r>>2]|0)==(c[p>>2]|0)){i=c[q>>2]|0;do if(i|0){j=c[i+20>>2]|0;gc(c[i+16>>2]|0)|0;if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}l=i;if((c[j+304>>2]|0)>>>0<=l>>>0?(c[j+308>>2]|0)>>>0>l>>>0:0){l=j+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[q>>2]=0;c[r>>2]=0}}if((s|0)==67){c[n>>2]=b;u=i;Ra=v;return u|0}b=b+1|0;c[n>>2]=b;if(f|0){c[f>>2]=c[u>>2];c[g>>2]=b+-1-(c[u>>2]|0)}do if(b>>>0<m>>>0){l=b;while(1){if(a[l>>0]|0)break;b=l+1|0;if(b>>>0<m>>>0)l=b;else{s=36;break}}if((s|0)==36){c[n>>2]=b;break}c[n>>2]=l;b=c[q>>2]|0;a:do if(b|0){k=l+10|0;i=c[r>>2]|0;j=b;while(1){b=c[o>>2]|0;if((k-b|0)<=(i|0))break a;h=(c[p>>2]|0)-i|0;h=(h|0)<4096?h:4096;if(jd(j,b+i|0,h,i,81)|0){b=0;s=68;break}i=(c[r>>2]|0)+h|0;c[r>>2]=i;i=(c[o>>2]|0)+i|0;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));i=c[r>>2]|0;j=c[q>>2]|0;if((i|0)==(c[p>>2]|0))break;if(!j)break a}if((s|0)==68){Ra=v;return b|0}do if(j|0){b=c[j+20>>2]|0;gc(c[j+16>>2]|0)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,j);break}s=j;if((c[b+304>>2]|0)>>>0<=s>>>0?(c[b+308>>2]|0)>>>0>s>>>0:0){s=b+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[q>>2]=0;c[r>>2]=0}while(0);h=a[l>>0]|0;b=h&255;do if(!(b&128)){i=1;b=h&255;h=0}else{s=d[l+1>>0]|0;b=s<<7|b&127;if(!(s&128)){i=2;h=0;break}s=d[l+2>>0]|0;b=s<<14|b&16383;if(!(s&128)){i=3;h=0;break}s=d[l+3>>0]|0;b=s<<21|b&2097151;if(!(s&128)){i=4;h=0;break}i=28;j=l+4|0;b=b&268435455;h=0;do{s=j;j=j+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,i|0)|0;b=Sv(r|0,L()|0,b|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((s&128|0)!=0|0!=0));i=j-l|0}while(0);c[u>>2]=l+i;r=(a[t>>0]|0)==0;u=e+88|0;t=u;e=c[t>>2]|0;t=c[t+4>>2]|0;q=Tv(0,0,b|0,h|0)|0;s=L()|0;t=Sv((r?b:q)|0,(r?h:s)|0,e|0,t|0)|0;e=L()|0;c[u>>2]=t;c[u+4>>2]=e;u=0;Ra=v;return u|0}while(0);c[u>>2]=0;u=0;Ra=v;return u|0}function kq(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=c[g>>2]|0;if(!k){p=e+f|0;if((f|0)>0){o=(b|0)==0?1:-1;j=1;f=0;b=0;while(1){l=a[e>>0]|0;k=l&255;do if(!(k&128)){n=1;m=l&255;l=0}else{n=d[e+1>>0]|0;k=n<<7|k&127;if(!(n&128)){n=2;m=k;l=0;break}n=d[e+2>>0]|0;k=n<<14|k&16383;if(!(n&128)){n=3;m=k;l=0;break}n=d[e+3>>0]|0;k=n<<21|k&2097151;if(!(n&128)){n=4;m=k;l=0;break}m=28;n=e+4|0;k=k&268435455;l=0;do{q=n;n=n+1|0;q=d[q>>0]|0;r=cw(q&127|0,0,m|0)|0;k=Sv(r|0,L()|0,k|0,l|0)|0;l=L()|0;m=m+7|0}while(m>>>0<64&((q&128|0)!=0|0!=0));n=n-e|0;m=k}while(0);k=e+n|0;m=Yv(m|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;n=L()|0;e=k;l=0;while(1){j=a[e>>0]|0;e=e+1|0;if(!(l<<24>>24|j))break;else l=j&128}f=Sv(m|0,n|0,f|0,b|0)|0;b=L()|0;a:do if(e>>>0<p>>>0)do{if(a[e>>0]|0)break a;e=e+1|0}while(e>>>0<p>>>0);while(0);if(e>>>0<p>>>0)j=o;else break}}else{k=0;f=0;b=0}c[i>>2]=p-k;c[g>>2]=k;r=h;c[r>>2]=f;c[r+4>>2]=b;return}n=(b|0)==0;b=k+-2|0;b:do if(b>>>0<e>>>0)o=b;else while(1){if((a[b>>0]|0)>=0){o=b;break b}b=b+-1|0;if(b>>>0<e>>>0){o=b;break}}while(0);m=o+1|0;p=m;b=a[m>>0]|0;f=b&255;do if(!(f&128)){b=b&255;f=0}else{r=d[o+2>>0]|0;b=r<<7|f&127;if(!(r&128)){f=0;break}r=d[o+3>>0]|0;b=r<<14|b&16383;if(!(r&128)){f=0;break}r=d[o+4>>0]|0;b=r<<21|b&2097151;if(!(r&128)){f=0;break}k=28;l=o+5|0;b=b&268435455;f=0;while(1){r=d[l>>0]|0;q=cw(r&127|0,0,k|0)|0;b=Sv(q|0,L()|0,b|0,f|0)|0;f=L()|0;k=k+7|0;if(!(k>>>0<64&((r&128|0)!=0|0!=0)))break;else l=l+1|0}}while(0);q=Yv(b|0,f|0,(n?1:-1)|0,(n?0:-1)|0)|0;n=L()|0;r=h;n=Tv(c[r>>2]|0,c[r+4>>2]|0,q|0,n|0)|0;q=L()|0;r=h;c[r>>2]=n;c[r+4>>2]=q;if((m|0)==(e|0)){a[j>>0]=1;b=p}else{b=o+-1|0;c:do if(b>>>0>e>>>0){b=-1;while(1){k=b+-1|0;f=a[o+b>>0]|0;b=o+k|0;if(f<<24>>24)break c;if(b>>>0>e>>>0)b=k;else{f=0;break}}}else{f=0;k=-1}while(0);d:do if(b>>>0>e>>>0){b=f;while(1){f=a[o+k>>0]|0;if(!(f&-128&255|b<<24>>24))break;k=k+-1|0;b=o+k|0;if(b>>>0>e>>>0)b=f;else{e=47;break d}}b=o+k+2|0;e=49}else e=47;while(0);if((e|0)==47)if((k|0)<-1&f<<24>>24==0){b=o+(k+2)|0;e=49}do{r=b;b=b+1|0}while((a[r>>0]|0)<0);c[i>>2]=p-b}c[g>>2]=b;return}function lq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](132)|0;if(!f){e=7;return e|0}else i=f}else{h=Wa[c[29356>>2]&127](132)|0;if((c[14985]|0)>>>0<132)c[14985]=132;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){i=c[14978]|0;g=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=i>>>0)&1}g=Wa[c[29340>>2]&127](h)|0;if(!g){e=7;return e|0}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;i=g}else i=g}gw(i|0,0,132)|0;a:do if((b|0)>1){h=d+4|0;f=c[h>>2]|0;b=Eu(f)|0;if((b|0)>0){d=i+4|0;f=a[f>>0]|0;if(f<<24>>24>=0){g=0;do{a[d+(f&255)>>0]=1;g=g+1|0;if((g|0)>=(b|0))break a;f=a[(c[h>>2]|0)+g>>0]|0}while(f<<24>>24>=0)}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);e=1;return e|0}else{e=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);e=1;return e|0}}}else{g=i+4|0;f=1;do{a[g+f>>0]=((f+-48|0)>>>0>9&((f&2147483615)+-65|0)>>>0>25)<<31>>31;f=f+1|0}while((f|0)!=128)}while(0);c[e>>2]=i;e=0;return e|0}function mq(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function nq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;h=a+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e>>2]=a;h=0;return h|0}function oq(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function pq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=c[b>>2]|0;o=c[b+4>>2]|0;p=b+12|0;i=c[p>>2]|0;k=c[b+8>>2]|0;if((i|0)>=(k|0)){p=101;return p|0}while(1){a:do if((i|0)<(k|0))while(1){j=a[o+i>>0]|0;if(j<<24>>24<=-1){n=i;break a}if(!(a[(j&255)+(l+4)>>0]|0)){n=i;break a}i=i+1|0;c[p>>2]=i;if((i|0)>=(k|0)){n=i;break}}else n=i;while(0);if((n|0)<(k|0)){i=n;do{j=a[o+i>>0]|0;if(j<<24>>24>-1?a[(j&255)+(l+4)>>0]|0:0)break;i=i+1|0;c[p>>2]=i}while((i|0)<(k|0));if((i|0)>(n|0))break}else i=n;if((i|0)>=(k|0)){i=101;m=23;break}}if((m|0)==23)return i|0;l=i-n|0;i=b+24|0;do if((l|0)>(c[i>>2]|0)){j=l+20|0;c[i>>2]=j;k=b+20|0;i=c[k>>2]|0;if(mb()|0){p=7;return p|0}i=sb(i,(j|0)>0?j:0,0)|0;if(!i){p=7;return p|0}else{c[k>>2]=i;break}}while(0);j=b+20|0;if((l|0)>0){i=0;do{k=a[o+(i+n)>>0]|0;m=k&255;a[(c[j>>2]|0)+i>>0]=(k+-65&255)<26?m+32|0:m;i=i+1|0}while((i|0)!=(l|0))}c[d>>2]=c[j>>2];c[e>>2]=l;c[f>>2]=n;c[g>>2]=c[p>>2];o=b+16|0;p=c[o>>2]|0;c[o>>2]=p+1;c[h>>2]=p;p=0;return p|0}function qq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(mb()|0){d=7;return d|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](4)|0;if(!a){d=7;return d|0}}else{e=Wa[c[29356>>2]&127](4)|0;if((c[14985]|0)>>>0<4)c[14985]=4;b=59064;a=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&a>>>0>0){f=c[14978]|0;b=Tv(a|0,b|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&b>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0>(c[14987]|0)>>>0)c[14987]=b}c[a>>2]=0;c[d>>2]=a;f=0;return f|0}function rq(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function sq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;h=a+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e>>2]=a;h=0;return h|0}function tq(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function uq(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;ka=Ra;Ra=Ra+32|0;q=ka;p=c[b+4>>2]|0;ja=b+12|0;i=c[ja>>2]|0;o=c[b+8>>2]|0;if((i|0)>=(o|0)){ja=101;Ra=ka;return ja|0}while(1){a:do if((i|0)<(o|0))while(1){l=a[p+i>>0]|0;n=l<<24>>24;if(n&128|0){ia=i;break a}if(l<<24>>24>=48?a[26096+(n+-48)>>0]|0:0){ia=i;break a}i=i+1|0;c[ja>>2]=i;if((i|0)>=(o|0)){ia=i;break}}else ia=i;while(0);if((ia|0)<(o|0)){i=ia;do{l=a[p+i>>0]|0;n=l<<24>>24;if(!(n&128)){if(l<<24>>24<48)break;if(!(a[26096+(n+-48)>>0]|0))break}i=i+1|0;c[ja>>2]=i}while((i|0)<(o|0));if((i|0)>(ia|0))break}else i=ia;if((i|0)>=(o|0)){i=101;fa=564;break}}if((fa|0)==564){Ra=ka;return i|0}r=i-ia|0;i=b+24|0;do if((r|0)>(c[i>>2]|0)){l=r+20|0;c[i>>2]=l;n=b+20|0;i=c[n>>2]|0;if(mb()|0){ja=7;Ra=ka;return ja|0}i=sb(i,(l|0)>0?l:0,0)|0;if(!i){ja=7;Ra=ka;return ja|0}else{c[n>>2]=i;ha=n;ga=i;break}}else{ga=b+20|0;ha=ga;ga=c[ga>>2]|0}while(0);o=p+ia|0;do if((r+-3|0)>>>0<=17){l=22;n=0;while(1){i=a[o+n>>0]|0;if((i+-65&255)>=26){if((i+-97&255)>=26){fa=39;break}}else i=(i&255)+32&255;a[q+l>>0]=i;n=n+1|0;if((n|0)>=(r|0))break;else l=l+-1|0}if((fa|0)==39){i=0;k=0;do{j=a[o+k>>0]|0;if((j+-65&255)<26)j=(j&255)+32&255;else i=(j+-48&255)<10?1:i;a[ga+k>>0]=j;k=k+1|0}while((k|0)!=(r|0));j=(i|0)==0?10:3;if((j<<1|0)<(r|0)){i=j;j=r-j|0;do{a[ga+i>>0]=a[ga+j>>0]|0;j=j+1|0;i=i+1|0}while((j|0)<(r|0))}else i=r;a[ga+i>>0]=0;c[e>>2]=i;break}i=q+23|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;a[i+4>>0]=0;i=q+l|0;l=a[i>>0]|0;b:do if(l<<24>>24==115){l=i+1|0;n=a[l>>0]|0;switch(n<<24>>24){case 101:break;case 115:{a[l>>0]=115;a[i>>0]=115;l=115;break b}default:{i=l;l=n;fa=51;break b}}n=i+2|0;switch(a[n>>0]|0){case 115:break;case 105:{a[n>>0]=105;i=n;l=105;break b}default:{fa=82;break b}}i=i+3|0;if((a[i>>0]|0)==115){a[i>>0]=115;a[n>>0]=115;i=n;l=115}else fa=82}else fa=51;while(0);c:do if((fa|0)==51){d:do switch(l<<24>>24){case 100:{p=i+1|0;if((a[p>>0]|0)!=101){l=i;fa=82;break c}o=i+2|0;l=a[o>>0]|0;if(l<<24>>24!=101){n=o;while(1)if(!(yq(n)|0))break;else n=n+1|0;if(!(a[n>>0]|0)){l=i;fa=82;break c}else break d}l=i+3|0;n=a[l>>0]|0;if(!(n<<24>>24)){l=i;fa=82;break c}while(1){n=(n<<24>>24)+-97|0;if((n|0)==24)n=yq(l+1|0)|0;else n=1-(a[26176+n>>0]|0)|0;if(!n)break;l=l+1|0;n=a[l>>0]|0;if(!(n<<24>>24)){l=i;fa=82;break c}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=i;fa=82;break c}a[o>>0]=101;a[p>>0]=101;i=p;l=101;break c}case 103:{if((a[i+1>>0]|0)!=110){l=i;fa=82;break c}if((a[i+2>>0]|0)!=105){l=i;fa=82;break c}n=i+3|0;l=n;while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=i;fa=82;break c}o=n;l=a[n>>0]|0;break}default:{l=i;fa=82;break c}}while(0);switch(l<<24>>24){case 116:{i=o+1|0;if((a[i>>0]|0)==97){a[i>>0]=97;a[o>>0]=116;i=o+-1|0;a[i>>0]=101;l=101;break c}break}case 108:{i=o+1|0;if((a[i>>0]|0)==98){a[i>>0]=98;a[o>>0]=108;i=o+-1|0;a[i>>0]=101;l=101;break c}break}case 122:{i=o+1|0;if((a[i>>0]|0)==105){a[i>>0]=105;a[o>>0]=122;i=o+-1|0;a[i>>0]=101;l=101;break c}break}default:{}}if(yq(o)|0){i=o+1|0;n=a[i>>0]|0;if(l<<24>>24==n<<24>>24)switch(l<<24>>24){case 122:case 115:case 108:break;default:{fa=83;break c}}if(!(n<<24>>24==0|((l+-119&255)<3|(vq(o)|0)==0))){i=(n<<24>>24)+-97|0;if((i|0)==24)i=yq(o+2|0)|0;else i=1-(a[26176+i>>0]|0)|0;if((i|0)!=0?(yq(o+2|0)|0)!=0:0){i=o+-1|0;a[i>>0]=101;l=101}else{l=o;fa=82}}else{l=o;fa=82}}else{l=o;fa=82}}while(0);if((fa|0)==82){i=l;l=a[l>>0]|0;fa=83}if((fa|0)==83)if(l<<24>>24==121){l=i;do l=l+1|0;while((yq(l)|0)!=0);if(!(a[l>>0]|0))l=121;else{a[i>>0]=105;l=105}}q=i+1|0;n=a[q>>0]|0;e:do switch(n<<24>>24|0){case 97:{if(l<<24>>24==108)if((n<<24>>24==97?(J=i+2|0,(a[J>>0]|0)==110):0)?(I=i+3|0,(a[I>>0]|0)==111):0){n=i+4|0;if(((a[n>>0]|0)==105?(N=i+5|0,(a[N>>0]|0)==116):0)?(M=i+6|0,(a[M>>0]|0)==97):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=108;break e}a[M>>0]=97;a[N>>0]=116;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if(((a[n>>0]|0)==105?(H=i+5|0,(a[H>>0]|0)==116):0)?(v=i+6|0,x=a[v>>0]|0,x<<24>>24!=0):0){l=v;m=x;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[H>>0]=116;a[n>>0]=105;a[I>>0]=111;a[J>>0]=110;i=J;l=110}else l=108}else l=108}else l=108;break}case 99:{if(l<<24>>24==105)if(n<<24>>24==99?(Y=i+2|0,(a[Y>>0]|0)==110):0){n=i+3|0;switch(a[n>>0]|0){case 101:{l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=101;a[Y>>0]=110;a[q>>0]=99;a[i>>0]=101;l=101;break e}case 97:{l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[Y>>0]=110;a[q>>0]=99;a[i>>0]=101;l=101;break e}default:{l=105;break e}}}else l=105;break}case 101:{if(l<<24>>24==114)if(((n<<24>>24==101?(E=i+2|0,(a[E>>0]|0)==122):0)?(D=i+3|0,(a[D>>0]|0)==105):0)?(s=i+4|0,m=a[s>>0]|0,m<<24>>24!=0):0){l=s;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[D>>0]=105;a[E>>0]=122;a[q>>0]=101;i=q;l=101}else l=114}else l=114;break}case 103:{if(l<<24>>24==105)if(((n<<24>>24==103?(G=i+2|0,(a[G>>0]|0)==111):0)?(F=i+3|0,(a[F>>0]|0)==108):0)?(t=i+4|0,u=a[t>>0]|0,u<<24>>24!=0):0){l=t;m=u;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[F>>0]=108;a[G>>0]=111;a[q>>0]=103;i=q;l=103}else l=105}else l=105;break}case 108:{if(l<<24>>24==105)if(n<<24>>24==108){p=i+2|0;switch(a[p>>0]|0){case 98:{l=i+3|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[p>>0]=98;a[q>>0]=108;a[i>>0]=101;l=101;break e}case 108:{n=i+3|0;if((a[n>>0]|0)!=97){l=105;break e}l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[p>>0]=108;i=p;l=108;break e}case 116:{o=i+3|0;if((a[o>>0]|0)!=110){l=105;break e}n=i+4|0;if((a[n>>0]|0)!=101){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=101;a[o>>0]=110;a[p>>0]=116;i=p;l=116;break e}case 101:{l=i+3|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[p>>0]=101;i=p;l=101;break e}case 115:{o=i+3|0;if((a[o>>0]|0)!=117){l=105;break e}n=i+4|0;if((a[n>>0]|0)!=111){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=111;a[o>>0]=117;a[p>>0]=115;i=p;l=115;break e}default:{l=105;break e}}}else l=105;break}case 111:{switch(l<<24>>24){case 110:break;case 114:{if(n<<24>>24!=111){l=114;break e}o=i+2|0;if((a[o>>0]|0)!=116){l=114;break e}n=i+3|0;if((a[n>>0]|0)!=97){l=114;break e}l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=114;break e}a[n>>0]=97;a[o>>0]=116;a[q>>0]=101;i=q;l=101;break e}default:break e}if((n<<24>>24==111?(L=i+2|0,(a[L>>0]|0)==105):0)?(K=i+3|0,(a[K>>0]|0)==116):0){n=i+4|0;if(((a[n>>0]|0)==97?(P=i+5|0,(a[P>>0]|0)==122):0)?(O=i+6|0,(a[O>>0]|0)==105):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=110;break e}a[O>>0]=105;a[P>>0]=122;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if((a[n>>0]|0)==97?(w=i+5|0,y=a[w>>0]|0,y<<24>>24!=0):0){l=w;m=y;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[n>>0]=97;a[K>>0]=116;a[L>>0]=101;i=L;l=101}else l=110}else l=110}else l=110;break}case 115:{switch(l<<24>>24){case 109:{if(n<<24>>24!=115){l=109;break e}if((a[i+2>>0]|0)!=105){l=109;break e}o=i+3|0;if((a[o>>0]|0)!=108){l=109;break e}n=i+4|0;if((a[n>>0]|0)!=97){l=109;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=109;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=109;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=109;break e}a[n>>0]=97;a[o>>0]=108;i=o;l=108;break e}case 115:break;default:break e}if((n<<24>>24==115?(a[i+2>>0]|0)==101:0)?(a[i+3>>0]|0)==110:0){n=i+4|0;if(((a[n>>0]|0)==101?(R=i+5|0,(a[R>>0]|0)==118):0)?(Q=i+6|0,(a[Q>>0]|0)==105):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=115;break e}a[Q>>0]=105;a[R>>0]=118;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if(((a[n>>0]|0)==108?(W=i+5|0,(a[W>>0]|0)==117):0)?(V=i+6|0,(a[V>>0]|0)==102):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=115;break e}a[V>>0]=102;a[W>>0]=117;a[n>>0]=108;i=n;l=108;break e}n=i+4|0;if((((a[n>>0]|0)==115?(T=i+5|0,(a[T>>0]|0)==117):0)?(S=i+6|0,(a[S>>0]|0)==111):0)?(z=i+7|0,B=a[z>>0]|0,B<<24>>24!=0):0){l=z;m=B;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[S>>0]=111;a[T>>0]=117;a[n>>0]=115;i=n;l=115}else l=115}else l=115}else l=115;break}case 116:{if(l<<24>>24==105)if(n<<24>>24==116?(X=i+2|0,(a[X>>0]|0)==105):0){o=i+3|0;switch(a[o>>0]|0){case 108:break;case 118:{n=i+4|0;if((a[n>>0]|0)!=105){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=105;a[o>>0]=118;a[X>>0]=101;i=X;l=101;break e}default:{l=105;break e}}n=i+4|0;if((a[n>>0]|0)==97){l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[o>>0]=108;i=o;l=108;break e}n=i+4|0;if(((a[n>>0]|0)==105?(U=i+5|0,(a[U>>0]|0)==98):0)?(A=i+6|0,C=a[A>>0]|0,C<<24>>24!=0):0){l=A;m=C;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[U>>0]=98;a[n>>0]=108;a[o>>0]=101;i=o;l=101}else l=105}else l=105}else l=105;break}default:{}}while(0);f:do switch(l<<24>>24|0){case 101:{if(l<<24>>24==101)switch(a[i+1>>0]|0){case 116:{if((a[i+2>>0]|0)!=97)break f;m=i+3|0;if((a[m>>0]|0)!=99)break f;l=i+4|0;if((a[l>>0]|0)!=105)break f;j=i+5|0;k=a[j>>0]|0;if(!(k<<24>>24))break f;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(!(a[j>>0]|0))break f;a[l>>0]=105;a[m>>0]=99;i=m;break f}case 118:{if((a[i+2>>0]|0)!=105)break f;if((a[i+3>>0]|0)!=116)break f;if((a[i+4>>0]|0)!=97)break f;l=i+5|0;k=a[l>>0]|0;if(!(k<<24>>24))break f;j=l;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:l;break f}case 122:{if((a[i+2>>0]|0)!=105)break f;m=i+3|0;if((a[m>>0]|0)!=108)break f;l=i+4|0;if((a[l>>0]|0)!=97)break f;j=i+5|0;k=a[j>>0]|0;if(!(k<<24>>24))break f;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(!(a[j>>0]|0))break f;a[l>>0]=97;a[m>>0]=108;i=m;break f}default:break f}break}case 105:{if(((((l<<24>>24==105?(a[i+1>>0]|0)==116:0)?(a[i+2>>0]|0)==105:0)?(ba=i+3|0,(a[ba>>0]|0)==99):0)?(aa=i+4|0,(a[aa>>0]|0)==105):0)?(j=i+5|0,Z=a[j>>0]|0,Z<<24>>24!=0):0){k=Z;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(a[j>>0]|0){a[aa>>0]=105;a[ba>>0]=99;i=ba}}break}case 108:{if(l<<24>>24==108){switch(a[i+1>>0]|0){case 97:break;case 117:{if((a[i+2>>0]|0)!=102)break f;l=i+3|0;k=a[l>>0]|0;if(!(k<<24>>24))break f;j=l;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:l;break f}default:break f}l=i+2|0;if(((a[l>>0]|0)==99?(da=i+3|0,(a[da>>0]|0)==105):0)?(_=i+4|0,$=a[_>>0]|0,$<<24>>24!=0):0){j=_;k=$;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(a[j>>0]|0){a[da>>0]=105;a[l>>0]=99;i=l}}}break}case 115:{if((((l<<24>>24==115?(a[i+1>>0]|0)==115:0)?(a[i+2>>0]|0)==101:0)?(a[i+3>>0]|0)==110:0)?(ca=i+4|0,k=a[ca>>0]|0,k<<24>>24!=0):0){j=ca;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:ca}break}default:{}}while(0);l=a[i+1>>0]|0;g:do switch(l<<24>>24|0){case 97:{j=a[i>>0]|0;if(j<<24>>24==108){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 99:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==110){switch(a[i+3>>0]|0){case 101:case 97:break;default:{j=i;fa=399;break g}}j=i+4|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}case 101:{j=a[i>>0]|0;if(j<<24>>24==114){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 105:{j=a[i>>0]|0;if(j<<24>>24==99){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 108:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==98){switch(a[i+3>>0]|0){case 105:case 97:break;default:{j=i;fa=399;break g}}j=i+4|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}case 110:{j=a[i>>0]|0;if(j<<24>>24==116){switch(a[i+2>>0]|0){case 97:{j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}case 101:break;default:break g}if(l<<24>>24==110){j=i+3|0;if((a[j>>0]|0)!=109){fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}j=i+4|0;if((a[j>>0]|0)==101){j=i+5|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}else{fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}}else{j=i;fa=399}}else fa=400;break}case 111:{j=a[i>>0]|0;if(j<<24>>24==117){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}k=i+3|0;if(l<<24>>24==111&(j<<24>>24==110?((a[k>>0]|0)+-115&255)<2:0)?(a[i+2>>0]|0)==105:0){j=(wq(k)|0)==0;j=j?i:k;fa=399}else{j=i;fa=399}break}case 115:{j=a[i>>0]|0;if(j<<24>>24==109)if((a[i+2>>0]|0)==105){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}else fa=400;break}case 116:switch(a[i>>0]|0){case 101:{if(l<<24>>24!=116){j=i;fa=399;break g}if((a[i+2>>0]|0)!=97){j=i;fa=399;break g}j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}case 105:{if(l<<24>>24!=116){j=i;fa=399;break g}if((a[i+2>>0]|0)!=105){j=i;fa=399;break g}j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}default:{j=i;fa=399;break g}}case 117:{j=a[i>>0]|0;if(j<<24>>24==115)if((a[i+2>>0]|0)==111){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}else fa=400;break}case 122:case 118:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==105){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}default:{j=i;fa=399}}while(0);if((fa|0)==399){i=j;j=a[j>>0]|0;fa=400}do if((fa|0)==400)if(j<<24>>24==101){k=i+1|0;if(!(wq(k)|0)){if(vq(k)|0){if((yq(k)|0?((a[k>>0]|0)+-119&255)>=3:0)?(ea=a[i+2>>0]|0,ea<<24>>24):0){j=(ea<<24>>24)+-97|0;if((j|0)==24)j=yq(i+3|0)|0;else j=1-(a[26176+j>>0]|0)|0;if(j|0?yq(i+3|0)|0:0)break}i=k}}else i=k}while(0);if((wq(i)|0)!=0?(a[i>>0]|0)==108:0){fa=i+1|0;i=(a[fa>>0]|0)==108?fa:i}k=Eu(i)|0;c[e>>2]=k;a[ga+k>>0]=0;j=a[i>>0]|0;if(j<<24>>24)do{i=i+1|0;k=k+-1|0;a[ga+k>>0]=j;j=a[i>>0]|0}while(j<<24>>24!=0)}else{if((r|0)>0){i=0;k=0;do{j=a[o+k>>0]|0;if((j+-65&255)<26)j=(j&255)+32&255;else i=(j+-48&255)<10?1:i;a[ga+k>>0]=j;k=k+1|0}while((k|0)!=(r|0));if(!i){i=r;fa=31}else{i=r;j=3}}else{i=0;fa=31}if((fa|0)==31)j=10;if((j<<1|0)<(r|0)){i=j;j=r-j|0;do{a[ga+i>>0]=a[ga+j>>0]|0;j=j+1|0;i=i+1|0}while((j|0)<(r|0))}a[ga+i>>0]=0;c[e>>2]=i}while(0);c[d>>2]=c[ha>>2];c[f>>2]=ia;c[g>>2]=c[ja>>2];g=b+16|0;ja=c[g>>2]|0;c[g>>2]=ja+1;c[h>>2]=ja;ja=0;Ra=ka;return ja|0}function vq(b){b=b|0;var c=0,d=0;c=a[b>>0]|0;if(!(c<<24>>24)){d=0;return d|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;b=b+1|0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;d=17;break}}if((d|0)==17)return b|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;if(!(a[b>>0]|0)){d=0;return d|0}while(1)if(!(xq(b)|0))break;else b=b+1|0;if(!(a[b>>0]|0)){d=1;return d|0}while(1)if(!(yq(b)|0))break;else b=b+1|0;d=(a[b>>0]|0)==0&1;return d|0}function wq(b){b=b|0;var c=0,d=0,e=0,f=0;c=a[b>>0]|0;if(!(c<<24>>24)){f=0;return f|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;d=b+1|0;c=a[d>>0]|0;if(!(c<<24>>24)){e=0;f=20;break}else b=d}if((f|0)==20)return e|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;c=a[b>>0]|0;if(!(c<<24>>24)){f=0;return f|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;d=b+1|0;c=a[d>>0]|0;if(!(c<<24>>24)){e=0;f=20;break}else b=d}if((f|0)==20)return e|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;f=(a[b>>0]|0)!=0&1;return f|0}function xq(b){b=b|0;var c=0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;return b|0}c=(c<<24>>24)+-97|0;if((c|0)==24){b=yq(b+1|0)|0;return b|0}else{b=1-(a[26176+c>>0]|0)|0;return b|0}return 0}function yq(b){b=b|0;var c=0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;return b|0}c=(c<<24>>24)+-97|0;if((c|0)!=24){b=a[26176+c>>0]|0;return b|0}c=a[b+1>>0]|0;if(!(c<<24>>24)){b=1;return b|0}c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+2|0)|0;else c=1-(a[26176+c>>0]|0)|0;b=(c|0)!=0&1;return b|0}function zq(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+32|0;w=x+16|0;s=x+8|0;o=x;v=x+24|0;t=c[(c[d+4>>2]|0)+8>>2]|0;j=c[f>>2]|0;i=b[j+8>>1]|0;if((i&514)==514?(a[j+10>>0]|0)==1:0){u=c[j+16>>2]|0;k=j}else if(!(i&1)){u=Gg(j,1)|0;k=c[f>>2]|0}else{u=0;k=j}i=b[k+8>>1]|0;if((i&2)!=0?(a[k+10>>0]|0)==1:0)i=c[k+12>>2]|0;else p=9;do if((p|0)==9){j=i&65535;if(!(j&16)){if(j&1|0){i=0;break}i=Fg(k,1)|0;break}else{i=c[k+12>>2]|0;if(!(j&16384))break;i=(c[k>>2]|0)+i|0;break}}while(0);k=i+1|0;a:do if((e|0)!=2){b:do if(((!((u|0)==0|(t|0)==0)?(l=t+16|0,c[l>>2]|0):0)?(m=Xa[(a[t>>0]<<24>>24==1?154:155)&255](u,k)|0,m=(c[t+12>>2]|0)+-1&m,n=c[l>>2]|0,n|0):0)?(h=c[n+(m<<3)>>2]|0,q=(a[t>>0]|0)==1?79:80,g=c[n+(m<<3)+4>>2]|0,(h|0)!=0&(g|0)!=0):0){while(1){h=h+-1|0;if(!(Za[q&127](c[g+12>>2]|0,c[g+16>>2]|0,u,k)|0))break;g=c[g>>2]|0;if(!((h|0)!=0&(g|0)!=0))break b}h=c[g+8>>2]|0;if(h|0){g=d;j=h;break a}}while(0);c[s>>2]=u;g=Bb(53600,s)|0;c[d+20>>2]=1;yc(c[d>>2]|0,g,-1,1,-1)|0;if(!g){Ra=x;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=x;return}else{d=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=x;return}}else{i=c[(c[d>>2]|0)+32>>2]|0;c[v>>2]=0;c[o>>2]=-1;c[o+4>>2]=v;yd(i,1004,o)|0;i=f+4|0;j=c[i>>2]|0;g=b[j+8>>1]|0;if((c[v>>2]|0)==0&(g&32)==0){c[d+20>>2]=1;yc(c[d>>2]|0,53578,-1,1,-1)|0;Ra=x;return}if((g&2)!=0?(a[j+10>>0]|0)==1:0){r=c[j+12>>2]|0;p=24}else p=19;do if((p|0)==19){h=g&65535;if(!(h&16)){if(h&1|0)break;r=Fg(j,1)|0;p=24;break}else{g=c[j+12>>2]|0;if(!(h&16384)){r=g;p=24;break}r=(c[j>>2]|0)+g|0;p=24;break}}while(0);if((p|0)==24?!((u|0)==0|(r|0)!=4):0){s=mc(c[i>>2]|0)|0;s=c[s>>2]|0;h=s;if((Ep(t,u,k,s)|0)!=(s|0)){g=d;j=h;break}c[d+20>>2]=1;yc(c[d>>2]|0,34831,-1,1,-1)|0;g=d;j=h;break}c[d+20>>2]=1;yc(c[d>>2]|0,53555,-1,1,-1)|0;Ra=x;return}while(0);u=c[(c[g>>2]|0)+32>>2]|0;c[v>>2]=0;c[w>>2]=-1;c[w+4>>2]=v;yd(u,1004,w)|0;if((c[v>>2]|0)==0?(b[(c[f>>2]|0)+8>>1]&32)==0:0){Ra=x;return}i=c[g>>2]|0;g=c[i+32>>2]|0;if(g|0?(c[g+108>>2]|0)<4:0){g=c[g+236>>2]|0;if(g|0){c[g+12>>2]=18;w=g+36|0;c[w>>2]=(c[w>>2]|0)+1}c[d+20>>2]=18;yc(i,31223,-1,1,0)|0;Ra=x;return}do if((c[i+24>>2]|0)<32)if(!(Eg(i,32,0)|0)){g=i+8|0;h=c[i+16>>2]|0;break}else{Ra=x;return}else{h=c[i+20>>2]|0;c[i+16>>2]=h;g=i+8|0;b[g>>1]=b[g>>1]&13}while(0);a[h>>0]=j;a[h+1>>0]=j>>8;a[h+2>>0]=j>>16;a[h+3>>0]=j>>24;c[i+12>>2]=4;b[g>>1]=16;a[i+10>>0]=1;Ra=x;return}function Aq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Xq(1,a,b,c,d,e,f)|0}function Bq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Xq(0,a,b,c,d,e,f)|0}function Cq(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=d+20|0;c[t>>2]=0;o=d+40|0;g[o>>3]=5.0e6;p=c[d>>2]|0;if((p|0)>0){q=c[d+4>>2]|0;r=b+24|0;m=-1;j=-1;n=0;f=-1;l=-1;e=0;a:while(1){b:do if(!(a[q+(n*12|0)+5>>0]|0))if((a[q+(n*12|0)+4>>0]|0)==64){s=18;break a}else{h=m;i=j}else{i=c[q+(n*12|0)>>2]|0;if((i|0)<0)k=1;else k=(i|0)==((c[r>>2]|0)+1|0);h=a[q+(n*12|0)+4>>0]|0;c:do if(!((f|0)<0&(k&h<<24>>24==2))){switch(h<<24>>24){case 2:{s=13;break c}case 64:break;default:{i=j;break c}}if((i|0)>-1?(i|0)<=(c[r>>2]|0):0){e=i+2|0;c[t>>2]=e;g[o>>3]=2.0;i=j;f=n;h=64}else{i=j;h=64}}else{c[t>>2]=1;g[o>>3]=1.0;f=n;e=1;s=13}while(0);if((s|0)==13){s=0;i=(i|0)==((c[r>>2]|0)+2|0)?n:j;h=2}if(k){k=(h&255)+-4|0;switch(k>>>2|k<<30|0){case 0:case 7:{h=n;break b}case 3:case 1:{h=m;l=n;break b}default:{h=m;break b}}}else h=m}while(0);n=n+1|0;if((n|0)>=(p|0))break;else{m=h;j=i}}if((s|0)==18){c[t>>2]=0;g[o>>3]=1.e+50;d=d+48|0;c[d>>2]=0;c[d+4>>2]=262144;return 0}if((e|0)==1){e=d+56|0;c[e>>2]=c[e>>2]|1;e=1}if((f|0)>-1){s=c[d+16>>2]|0;c[s+(f<<3)>>2]=1;a[s+(f<<3)+4>>0]=1;f=2}else f=1;if((i|0)>-1){e=e|65536;c[t>>2]=e;c[(c[d+16>>2]|0)+(i<<3)>>2]=f;f=f+1|0}if((h|0)>-1){e=e|131072;c[t>>2]=e;c[(c[d+16>>2]|0)+(h<<3)>>2]=f;f=f+1|0}if((l|0)>-1){c[t>>2]=e|262144;c[(c[d+16>>2]|0)+(l<<3)>>2]=f}}if((c[d+8>>2]|0)!=1)return 0;e=c[d+12>>2]|0;t=c[e>>2]|0;if((t|0)>=0?(t|0)!=((c[b+24>>2]|0)+1|0):0)return 0;c[d+24>>2]=(a[e+4>>0]|0)==0?54528:54523;c[d+32>>2]=1;return 0}function Dq(a){a=a|0;var b=0,d=0;gc(c[a+216>>2]|0)|0;b=a+56|0;gc(c[b>>2]|0)|0;gc(c[b+4>>2]|0)|0;gc(c[b+8>>2]|0)|0;gc(c[b+12>>2]|0)|0;gc(c[b+16>>2]|0)|0;gc(c[b+20>>2]|0)|0;gc(c[b+24>>2]|0)|0;gc(c[b+28>>2]|0)|0;gc(c[b+32>>2]|0)|0;gc(c[b+36>>2]|0)|0;gc(c[b+40>>2]|0)|0;gc(c[b+44>>2]|0)|0;gc(c[b+48>>2]|0)|0;gc(c[b+52>>2]|0)|0;gc(c[b+56>>2]|0)|0;gc(c[b+60>>2]|0)|0;gc(c[b+64>>2]|0)|0;gc(c[b+68>>2]|0)|0;gc(c[b+72>>2]|0)|0;gc(c[b+76>>2]|0)|0;gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;gc(c[b+116>>2]|0)|0;gc(c[b+120>>2]|0)|0;gc(c[b+124>>2]|0)|0;gc(c[b+128>>2]|0)|0;gc(c[b+132>>2]|0)|0;gc(c[b+136>>2]|0)|0;gc(c[b+140>>2]|0)|0;gc(c[b+144>>2]|0)|0;gc(c[b+148>>2]|0)|0;gc(c[b+152>>2]|0)|0;gc(c[b+156>>2]|0)|0;b=c[a+244>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+220>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+224>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+40>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+44>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);d=c[a+36>>2]|0;Wa[c[(c[d>>2]|0)+8>>2]&127](d)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Eq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;d=Ra;Ra=Ra+48|0;e=d;b=d+44|0;c[b>>2]=0;h=c[a+16>>2]|0;f=c[a+12>>2]|0;g=c[a+20>>2]|0;i=(c[a+40>>2]|0)==0?59952:54718;c[e>>2]=h;c[e+4>>2]=g;c[e+8>>2]=h;c[e+12>>2]=g;c[e+16>>2]=h;c[e+20>>2]=g;c[e+24>>2]=h;c[e+28>>2]=g;c[e+32>>2]=i;c[e+36>>2]=h;c[e+40>>2]=g;_q(b,f,54532,e);b=c[b>>2]|0;if(b|0){i=b;Ra=d;return i|0}Dq(a)|0;i=0;Ra=d;return i|0}function Fq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;do if(!(mb()|0)){if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](96)|0;c[b>>2]=a;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](96)|0;if((c[14985]|0)>>>0<96)c[14985]=96;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a)break;d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d;c[b>>2]=a}d=a+96|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(d|0));f=0;return f|0}while(0);c[b>>2]=0;f=7;return f|0}function Gq(a){a=a|0;var b=0;$q(a);if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Hq(f,h,i,j,k){f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0;K=Ra;Ra=Ra+128|0;I=K+104|0;E=K+96|0;F=K+64|0;w=K+56|0;v=K+48|0;z=K+40|0;A=K;B=K+116|0;x=K+112|0;y=K+108|0;G=c[f>>2]|0;r=h&65535;if(!r){j=0;J=0}else{j=1;J=c[k>>2]|0}if(!(h&65536)){t=0;s=0}else{s=c[k+(j<<2)>>2]|0;t=s;j=j+1|0}if(!(h&131072)){D=0;o=0}else{o=c[k+(j<<2)>>2]|0;D=o;j=j+1|0}if(!(h&262144)){C=0;p=0}else{p=c[k+(j<<2)>>2]|0;C=p}$q(f);do if(D){n=D+8|0;j=b[n>>1]|0;u=j&31;k=d[816+u>>0]|0;if((u|16|0)==18){j=a[D+10>>0]|0;k=D+16|0;m=D+12|0;if(!(Lg(c[k>>2]|0,z,c[m>>2]|0,j)|0))j=b[n>>1]|0;else{if(!(Og(c[k>>2]|0,A,c[m>>2]|0,j)|0)){q=A;u=c[q+4>>2]|0;j=D;c[j>>2]=c[q>>2];c[j+4>>2]=u;j=4}else{g[D>>3]=+g[z>>3];j=8}j=b[n>>1]&-3|j;b[n>>1]=j}k=d[816+(j&31)>>0]|0}if((k|0)==1){j=j&65535;if(j&4|0){k=o;j=c[k>>2]|0;k=c[k+4>>2]|0;break}if(j&8|0){j=Mg(+g[D>>3])|0;k=L()|0;break}if(!(j&18)){j=0;k=0}else{j=Ng(a[D+10>>0]|0,c[D+12>>2]|0,c[D+16>>2]|0)|0;k=L()|0}}else{j=0;k=-2147483648}}else{j=0;k=-2147483648}while(0);u=f+72|0;q=u;c[q>>2]=j;c[q+4>>2]=k;do if(C){n=C+8|0;j=b[n>>1]|0;q=j&31;k=d[816+q>>0]|0;if((q|16|0)==18){j=a[C+10>>0]|0;k=C+16|0;m=C+12|0;if(!(Lg(c[k>>2]|0,z,c[m>>2]|0,j)|0))j=b[n>>1]|0;else{if(!(Og(c[k>>2]|0,A,c[m>>2]|0,j)|0)){o=A;q=c[o+4>>2]|0;j=C;c[j>>2]=c[o>>2];c[j+4>>2]=q;j=4}else{g[C>>3]=+g[z>>3];j=8}j=b[n>>1]&-3|j;b[n>>1]=j}k=d[816+(j&31)>>0]|0}if((k|0)==1){j=j&65535;if(j&4|0){k=p;j=c[k>>2]|0;k=c[k+4>>2]|0;break}if(j&8|0){j=Mg(+g[C>>3])|0;k=L()|0;break}if(!(j&18)){j=0;k=0}else{j=Ng(a[C+10>>0]|0,c[C+12>>2]|0,c[C+16>>2]|0)|0;k=L()|0}}else{j=-1;k=2147483647}}else{j=-1;k=2147483647}while(0);q=f+80|0;p=q;c[p>>2]=j;c[p+4>>2]=k;if(!i)j=a[G+235>>0]|0;else j=(a[i>>0]|0)==68&1;a[f+52>>0]=j;h=h&65535;b[f+4>>1]=h;do if(r>>>0>1){o=r+-2|0;k=J+8|0;do if(J){j=b[k>>1]|0;if((j&514)==514?(a[J+10>>0]|0)==1:0)j=c[J+16>>2]|0;else{if(j&1){H=52;break}j=Gg(J,1)|0}if(j){p=j;m=0}else H=52}else H=52;while(0);if((H|0)==52)if(!(-1431655766>>>(b[k>>1]&31)&1)){f=7;Ra=K;return f|0}else{p=0;m=1}k=f+20|0;c[k>>2]=0;if(!t)j=0;else{j=e[t+8>>1]|0;do if(!(j&4)){if(j&8|0){j=Mg(+g[t>>3])|0;L()|0;break}if(!(j&18))j=0;else{j=Ng(a[t+10>>0]|0,c[t+12>>2]|0,c[t+16>>2]|0)|0;L()|0}}else j=c[s>>2]|0;while(0);c[k>>2]=j}k=c[G+36>>2]|0;r=c[G+28>>2]|0;t=d[G+232>>0]|0;s=c[G+24>>2]|0;i=f+16|0;n=G+8|0;M=A+24|0;c[M>>2]=0;c[M+4>>2]=0;c[M+8>>2]=0;c[A>>2]=k;c[A+4>>2]=j;c[A+8>>2]=r;c[A+16>>2]=s;c[A+20>>2]=o;c[A+12>>2]=t;a:do if(m){c[i>>2]=0;j=0}else{j=er(A,p,Eu(p)|0,i,z)|0;do if(!j){j=c[i>>2]|0;if(c[A+32>>2]|0){ar(j);c[i>>2]=0;break}if(!j){j=0;break a}j=cr(i,12)|0;if(!j){j=c[i>>2]|0;k=dr(j,12)|0;if(!k)break a;else{l=k;H=70}}else{l=j;H=70}}else{l=j;H=70}while(0);b:do if((H|0)==70){ar(c[i>>2]|0);c[i>>2]=0;switch(l|0){case 1:break b;case 18:break;default:{M=l;Ra=K;return M|0}}c[v>>2]=12;Wp(n,54811,v);M=1;Ra=K;return M|0}while(0);c[w>>2]=p;Wp(n,54863,w);M=1;Ra=K;return M|0}while(0);M=c[f>>2]|0;c[z>>2]=0;c[A>>2]=0;c[B>>2]=0;fr(f,j,A,B,z);j=c[A>>2]|0;do if((c[z>>2]|0)==0&(j|0)>1?a[M+232>>0]|0:0){k=pb((c[B>>2]<<3)+(j*24|0)|0,0)|0;m=k+((c[A>>2]|0)*24|0)|0;if(!k){c[z>>2]=7;break}c[x>>2]=k;c[y>>2]=m;gr(f,0,c[i>>2]|0,x,y,z);j=((c[x>>2]|0)-k|0)/24|0;c[A>>2]=j;c[B>>2]=(c[y>>2]|0)-m>>2;if((c[z>>2]|0)==0?(M=hr(f,0,k,j)|0,c[z>>2]=M,(M|0)==0&(c[B>>2]|0)>0):0){j=0;do{M=hr(f,c[m+(j<<2)>>2]|0,k,c[A>>2]|0)|0;c[z>>2]=M;j=j+1|0}while((M|0)==0?(j|0)<(c[B>>2]|0):0)}if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{M=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while(0);ir(f,c[i>>2]|0,z);j=c[z>>2]|0;k=G+248|0;m=c[k>>2]|0;do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(n|0){if(c[n+480>>2]|0){Xd(n,m);break}M=m;if((c[n+304>>2]|0)>>>0<=M>>>0?(c[n+308>>2]|0)>>>0>M>>>0:0){M=n+300|0;c[m>>2]=c[M>>2];c[M>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{M=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[k>>2]=0;if(!j){c[f+40>>2]=c[f+44>>2];M=f+32|0;c[M>>2]=0;c[M+4>>2]=0;break}else{M=j;Ra=K;return M|0}}while(0);c:do switch(h<<16>>16){case 0:{l=c[G+220>>2]|0;if((D|0)!=0|(C|0)!=0){H=u;E=c[H>>2]|0;H=c[H+4>>2]|0;J=q;I=c[J>>2]|0;J=c[J+4>>2]|0;j=(a[f+52>>0]|0)==0?54528:54523;c[F>>2]=l;M=F+8|0;c[M>>2]=E;c[M+4>>2]=H;M=F+16|0;c[M>>2]=I;c[M+4>>2]=J;c[F+24>>2]=j;j=Bb(54721,F)|0}else{j=(a[f+52>>0]|0)==0?54528:54523;c[E>>2]=l;c[E+4>>2]=j;j=Bb(54783,E)|0}if(!j){M=7;Ra=K;return M|0}l=qd(c[G+12>>2]|0,j,-1,129,0,f+12|0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);H=116;break c}else{H=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);H=116;break c}}case 1:{m=f+12|0;l=c[m>>2]|0;if(!l){k=c[f>>2]|0;j=k+216|0;l=c[j>>2]|0;do if(!l){c[I>>2]=c[k+220>>2];j=Bb(54912,I)|0;if(!j){M=7;Ra=K;return M|0}l=qd(c[k+12>>2]|0,j,-1,129,0,m,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{M=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}if(!l){l=c[m>>2]|0;break}else{M=l;Ra=K;return M|0}}else{c[m>>2]=l;c[j>>2]=0}while(0);a[f+8>>0]=1}l=Yc(l,1,J)|0;H=116;break}default:{}}while(0);if((H|0)==116?l|0:0){M=l;Ra=K;return M|0}M=Iq(f)|0;Ra=K;return M|0}function Iq(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;q=Ra;Ra=Ra+16|0;d=q;if((e[b+4>>1]|0)<2){d=b+12|0;if((Gc(c[d>>2]|0)|0)==100){o=Oc(c[d>>2]|0,0)|0;p=L()|0;b=b+32|0;c[b>>2]=o;c[b+4>>2]=p;b=0;Ra=q;return b|0}a[b+6>>0]=1;g=c[d>>2]|0;if(!g){b=0;Ra=q;return b|0}d=c[g>>2]|0;b=g+136|0;p=c[b+4>>2]|0;if((p|0)>0|(p|0)==0&(c[b>>2]|0)>>>0>0)hc(d,g);f=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;b=g+64|0;c[b>>2]=0;c[b+4>>2]=0;if((f|0)==3082|(a[d+81>>0]|0)!=0){og(d);b=7;Ra=q;return b|0}else{b=c[d+68>>2]&f;Ra=q;return b|0}}c[d>>2]=0;f=c[b+16>>2]|0;if(f){g=b+7|0;h=b+12|0;i=f+32|0;j=b+6|0;k=b+88|0;l=f+24|0;o=b+32|0;do{if((a[g>>0]|0)==0?(m=c[h>>2]|0,m|0):0){n=c[m>>2]|0;r=m+136|0;s=c[r+4>>2]|0;if((s|0)>0|(s|0)==0&(c[r>>2]|0)>>>0>0)hc(n,m);s=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;r=m+64|0;c[r>>2]=0;c[r+4>>2]=0;if((s|0)==3082|(a[n+81>>0]|0)!=0)og(n)}qr(b,f,d);s=a[i>>0]|0;a[j>>0]=s;a[g>>0]=1;c[k>>2]=1;t=l;n=c[t+4>>2]|0;r=o;c[r>>2]=c[t>>2];c[r+4>>2]=n;if(s<<24>>24)break}while((rr(b,d)|0)!=0);d=c[d>>2]|0;if(!d){d=o;p=22}}else{a[b+6>>0]=1;d=b+32|0;p=22}do if((p|0)==22){f=d;d=c[f>>2]|0;f=c[f+4>>2]|0;if(!(a[b+52>>0]|0)){t=b+80|0;s=c[t+4>>2]|0;if(!((f|0)>(s|0)|((f|0)==(s|0)?d>>>0>(c[t>>2]|0)>>>0:0))){d=0;break}}else{t=b+72|0;s=c[t+4>>2]|0;if(!((f|0)<(s|0)|((f|0)==(s|0)?d>>>0<(c[t>>2]|0)>>>0:0))){d=0;break}}a[b+6>>0]=1;d=0}while(0);t=d;Ra=q;return t|0}function Jq(b){b=b|0;var c=0;c=b+6|0;if(!(a[c>>0]|0)){c=0;return c|0}$q(b);a[c>>0]=1;c=1;return c|0}function Kq(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=c[d>>2]|0;i=c[h+24>>2]|0;switch(g-i|0){case 0:{g=c[f>>2]|0;h=g+8|0;if(!((b[h>>1]&9216)==0?!(c[g+24>>2]|0):0))Cg(g);c[g>>2]=54938;c[g+16>>2]=d;b[h>>1]=-31231;a[g+11>>0]=112;c[g+36>>2]=97;f=0;return f|0}case 1:{d=d+32|0;i=c[d>>2]|0;d=c[d+4>>2]|0;g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=i;c[f+4>>2]=d;b[h>>1]=4;f=0;return f|0}else{Pg(g,i,d);f=0;return f|0}}case 2:{if(c[d+16>>2]|0){i=c[d+20>>2]|0;d=((i|0)<0)<<31>>31;g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=i;c[f+4>>2]=d;b[h>>1]=4;f=0;return f|0}else{Pg(g,i,d);f=0;return f|0}}if(!(c[h+44>>2]|0)){g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=0;c[f+4>>2]=0;b[h>>1]=4;f=0;return f|0}else{Pg(g,0,0);f=0;return f|0}}break}default:i=g}g=ur(0,d)|0;if(g|0){f=g;return f|0}k=c[d+12>>2]|0;j=(k|0)==0;if(!j?(c[k+120>>2]|0)!=0:0)g=(e[k+144>>1]|0)+-1|0;else g=-1;if((g|0)<=(i|0)){f=0;return f|0}g=i+1|0;do if(j)d=29576;else{h=c[k+120>>2]|0;if(h|0?g>>>0<(e[k+144>>1]|0)>>>0:0){d=h+(g*40|0)|0;break}d=c[k>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);g=d+8|0;h=e[g>>1]|0;if(h&2048|0)b[g>>1]=h&59391|4096;if(!j){h=c[k>>2]|0;i=k+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g}Dc(f,d);f=0;return f|0}function Lq(a,b){a=a|0;b=b|0;var d=0;d=a+32|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Mq(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;ca=Ra;Ra=Ra+160|0;q=ca+48|0;E=ca+40|0;D=ca+32|0;C=ca+24|0;Z=ca+16|0;y=ca+8|0;u=ca;O=ca+136|0;$=ca+80|0;W=ca+72|0;X=ca+68|0;Y=ca+64|0;ba=ca+60|0;z=ca+56|0;c[ba>>2]=0;c[z>>2]=0;x=(h|0)>1;a:do if(x){_=f+24|0;h=c[_>>2]|0;if(-1431655766>>>(b[(c[i>>2]|0)+8>>1]&31)&1|0?(p=c[i+(h+2<<2)>>2]|0,o=p+8|0,k=b[o>>1]|0,(-1431655766>>>(k&31)&1|0)==0):0){do if(p){if((k&514)==514?(a[p+10>>0]|0)==1:0){q=c[p+16>>2]|0;break}if(!(k&1)){q=Gg(p,1)|0;k=b[o>>1]|0}else q=0}else q=0;while(0);if((k&2)!=0?(a[p+10>>0]|0)==1:0)h=c[p+12>>2]|0;else aa=14;do if((aa|0)==14){k=k&65535;if(!(k&16)){if(k&1|0){h=0;break}h=Fg(p,1)|0;break}else{h=c[p+12>>2]|0;if(!(k&16384))break;h=(c[p>>2]|0)+h|0;break}}while(0);b:do if(!q)k=7;else{c:do switch(h|0){case 8:{o=a[q>>0]|0;d:do if(!(o<<24>>24)){k=37598;aa=22}else{_=o&255;k=208+_|0;do if((_|32|0)==111){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=37599;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==112){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=37600;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==116){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=37601;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==105){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=37602;aa=22;break d}k=k&255;if((k|32|0)!=109){n=109;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=37603;aa=22;break d}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=37604;aa=22;break d}k=k&255;if((k|32|0)!=122){n=122;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=37605;aa=22;break d}k=k&255;if((k|32|0)==101)break d;else{n=101;k=208+k|0}}else n=105}else n=116}else n=112}else n=111;while(0);t=d[k>>0]|0;aa=26}while(0);if((aa|0)==22){t=0;n=a[208+(d[k>>0]|0)>>0]|0;aa=26}if((aa|0)==26?(t|0)!=(n&255|0):0)break c;k=Dr(f,0)|0;break b}case 7:{o=a[q>>0]|0;e:do if(!(o<<24>>24)){k=54949;aa=29}else{Z=o&255;k=208+Z|0;do if((Z|32|0)==114){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54950;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==101){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54951;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==98){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54952;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==117){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54953;aa=29;break e}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54954;aa=29;break e}k=k&255;if((k|32|0)!=108){n=108;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54955;aa=29;break e}k=k&255;if((k|32|0)==100)break e;else{n=100;k=208+k|0}}else n=117}else n=98}else n=101}else n=114;while(0);s=d[k>>0]|0;r=n;aa=33}while(0);if((aa|0)==29){s=0;r=a[208+(d[k>>0]|0)>>0]|0;aa=33}if((aa|0)==33?(s|0)!=(r&255|0):0)break c;k=Lr(f,0)|0;c[O>>2]=k;if(!k){c[$>>2]=0;c[u>>2]=c[f+220>>2];k=Bb(55001,u)|0;do if(k){l=qd(c[f+12>>2]|0,k,-1,128,0,$,0)|0;c[O>>2]=l;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{Z=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}if(!l){k=c[_>>2]|0;k=Yv(k|0,((k|0)<0)<<31>>31|0,12,0)|0;k=Sv(k|0,L()|0,12,0)|0;C=pb(k,L()|0)|0;if(!C){c[O>>2]=7;n=0;m=0;l=0;k=0;break}gw(C|0,0,k|0)|0;l=(c[_>>2]|0)+1|0;m=C+(l<<2)|0;l=m+(l<<2)|0;w=f+44|0;x=f+272|0;y=f+284|0;j=f+280|0;i=f+234|0;z=f+32|0;A=f+264|0;B=f+260|0;n=0;v=c[$>>2]|0;while(1){if((Gc(v)|0)!=100){aa=89;break}if(!(c[w>>2]|0))u=0;else u=Nc(v,(c[_>>2]|0)+1|0)|0;o=Oc(v,0)|0;p=L()|0;h=x;k=c[h>>2]|0;h=c[h+4>>2]|0;do if(!((h|0)>(p|0)|(h|0)==(p|0)&k>>>0>o>>>0)){if((k|0)==(o|0)&(h|0)==(p|0)?(c[y>>2]|0)==0:0){aa=52;break}if((c[j>>2]|0)!=(u|0)){aa=52;break}if((c[A>>2]|0)<=(c[B>>2]|0))aa=53;else aa=52}else aa=52;while(0);if((aa|0)==52){aa=0;k=Sr(f)|0;if(!k)aa=53}if((aa|0)==53){aa=0;k=x;c[k>>2]=o;c[k+4>>2]=p;c[j>>2]=u;c[y>>2]=0;k=0}c[O>>2]=k;gw(C|0,0,(c[_>>2]<<2)+4|0)|0;f:do if(!k){r=v+120|0;s=v+144|0;t=v+40|0;g:do if(!v){k=c[_>>2]|0;if((k|0)<=0)break;o=c[z>>2]|0;h=0;do{if(!(a[o+h>>0]|0)){c[C+(h<<2)>>2]=0;k=c[_>>2]|0}h=h+1|0}while((h|0)<(k|0))}else{q=0;do{if((q|0)>=(c[_>>2]|0))break g;p=q;q=q+1|0;if(!(a[(c[z>>2]|0)+p>>0]|0)){k=c[r>>2]|0;do if(!k)aa=66;else{if(q>>>0>=(e[s>>1]|0)>>>0){aa=66;break}k=k+(q*40|0)|0}while(0);if((aa|0)==66){aa=0;k=c[v>>2]|0;c[k+64>>2]=25;Ne(k,25);k=29576}h=b[k+8>>1]|0;do if((h&514)==514){if((a[k+10>>0]|0)!=1){aa=71;break}o=c[k+16>>2]|0}else aa=71;while(0);do if((aa|0)==71){aa=0;if(h&1){o=0;break}o=Gg(k,1)|0}while(0);k=c[v>>2]|0;h=c[t>>2]|0;if((h|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7}else k=c[k+68>>2]&h;c[t>>2]=k;k=Mr(f,u,o,p,C+(p<<2)|0)|0;Y=Lc(v,q)|0;Z=C+(c[_>>2]<<2)|0;c[Z>>2]=(c[Z>>2]|0)+Y}else k=0}while(!(k|0));c[O>>2]=k;break f}while(0);c[O>>2]=0;k=0}while(0);if(a[i>>0]|0){Br(O,f,C);k=c[O>>2]|0}h=(k|0)==0;do if(h){n=n+1|0;if((c[_>>2]|0)<0){k=v;break}k=0;while(1){aa=m+(k<<2)|0;c[aa>>2]=(c[aa>>2]|0)+(c[C+(k<<2)>>2]|0);if((k|0)<(c[_>>2]|0))k=k+1|0;else{k=v;break}}}else{gc(v)|0;k=0}while(0);if(h)v=k;else{aa=88;break}}if((aa|0)==88){c[$>>2]=k;k=C;break}else if((aa|0)==89){c[$>>2]=v;k=C;break}}else{n=0;m=0;l=0;k=0}}else{c[O>>2]=7;n=0;m=0;l=0;k=0}while(0);if(a[f+232>>0]|0)Cr(O,f,m,l,n);do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{_=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-_;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);k=c[$>>2]|0;if(k){k=gc(k)|0;l=c[O>>2]|0;if(!l)c[O>>2]=k;else k=l}else k=c[O>>2]|0}break b}case 15:{o=a[q>>0]|0;h:do if(!(o<<24>>24)){k=54957;aa=103}else{V=o&255;k=208+V|0;do if((V|32|0)==105){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54958;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==110){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54959;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==116){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54960;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==101){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54961;aa=103;break h}k=k&255;if((k|32|0)!=103){n=103;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54962;aa=103;break h}k=k&255;if((k|32|0)!=114){n=114;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54963;aa=103;break h}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=54964;aa=103;break h}k=k&255;if((k|32|0)!=116){n=116;k=208+k|0;break}k=a[q+8>>0]|0;if(!(k<<24>>24)){k=54965;aa=103;break h}k=k&255;if((k|32|0)!=121){n=121;k=208+k|0;break}k=a[q+9>>0]|0;if(!(k<<24>>24)){k=54966;aa=103;break h}if(k<<24>>24!=45){n=45;k=208+(k&255)|0;break}k=a[q+10>>0]|0;if(!(k<<24>>24)){k=54967;aa=103;break h}k=k&255;if((k|32|0)!=99){n=99;k=208+k|0;break}k=a[q+11>>0]|0;if(!(k<<24>>24)){k=54968;aa=103;break h}k=k&255;if((k|32|0)!=104){n=104;k=208+k|0;break}k=a[q+12>>0]|0;if(!(k<<24>>24)){k=54969;aa=103;break h}k=k&255;if((k|32|0)!=101){n=101;k=208+k|0;break}k=a[q+13>>0]|0;if(!(k<<24>>24)){k=54970;aa=103;break h}k=k&255;if((k|32|0)!=99){n=99;k=208+k|0;break}k=a[q+14>>0]|0;if(!(k<<24>>24)){k=54971;aa=103;break h}k=k&255;if((k|32|0)==107)break h;else{n=107;k=208+k|0}}else n=101}else n=116}else n=110}else n=105;while(0);w=d[k>>0]|0;v=n;aa=107}while(0);if((aa|0)==103){w=0;v=a[208+(d[k>>0]|0)>>0]|0;aa=107}if((aa|0)==107?(w|0)!=(v&255|0):0)break c;l=f+164|0;k=c[l>>2]|0;c[O>>2]=k;do if(!k){k=c[f+20>>2]|0;c[y>>2]=c[f+16>>2];c[y+4>>2]=k;k=Bb(52546,y)|0;if(!k){h=7;n=0;m=0;l=0;k=0;break}h=qd(c[f+12>>2]|0,k,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{V=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-V;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[O>>2]|0;c[l>>2]=k;if(!h)aa=116;else{n=0;m=0;l=0;k=0}}else aa=116;while(0);if((aa|0)==116){N=k;l=c[f+280>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(N,1)|0)){n=c[N+100>>2]|0;h=n+8|0;if(!(b[h>>1]&9216)){V=n;c[V>>2]=l;c[V+4>>2]=m;b[h>>1]=4;break}else{Pg(n,l,m);break}}while(0);V=f+252|0;l=c[V>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(N,2)|0)){h=c[N+100>>2]|0;n=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){U=n;c[U>>2]=l;c[U+4>>2]=m;b[h>>1]=4;break}else{Pg(n,l,m);break}}while(0);E=O+12|0;F=$+12|0;G=$+4|0;H=$+16|0;I=$+48|0;J=$+52|0;K=$+40|0;M=$+44|0;n=0;l=0;while(1){if((Gc(N)|0)!=100){m=0;o=1;U=l;break}C=Nc(N,0)|0;if((c[V>>2]|0)>0){D=((C|0)<0)<<31>>31;B=0;do{c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[E>>2]=19;m=$;h=m+56|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(h|0));m=Xp(f,C,B,-2,0,0,0,1,$)|0;do if(!m){c[F>>2]=O;m=eq(f,$,0,0)|0;if(m|0){v=0;o=0;break}m=gq(f,$)|0;if((m|0)!=100){v=0;o=0;break}h=0;o=0;do{t=c[I>>2]|0;s=c[J>>2]|0;A=t+s|0;p=a[t>>0]|0;m=p&255;do if(!(m&128)){q=1;m=p&255;r=0}else{U=d[t+1>>0]|0;m=U<<7|m&127;if(!(U&128)){q=2;r=0;break}U=d[t+2>>0]|0;m=U<<14|m&16383;if(!(U&128)){q=3;r=0;break}U=d[t+3>>0]|0;m=U<<21|m&2097151;if(!(U&128)){q=4;r=0;break}p=28;q=t+4|0;m=m&268435455;r=0;do{U=q;q=q+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,p|0)|0;m=Sv(T|0,L()|0,m|0,r|0)|0;r=L()|0;p=p+7|0}while(p>>>0<64&((U&128|0)!=0|0!=0));q=q-t|0}while(0);if((q|0)<(s|0)){j=c[K>>2]|0;i=c[M>>2]|0;z=(i|0)>0;y=t+q|0;p=0;w=0;x=0;while(1){s=a[y>>0]|0;q=s&255;do if(!(q&128)){v=1;u=0;t=s&255}else{U=d[y+1>>0]|0;q=U<<7|q&127;if(!(U&128)){v=2;u=0;t=q;break}U=d[y+2>>0]|0;q=U<<14|q&16383;if(!(U&128)){v=3;u=0;t=q;break}U=d[y+3>>0]|0;t=U<<21|q&2097151;if(!(U&128)){v=4;u=0;break}q=28;s=y+4|0;t=t&268435455;u=0;do{U=s;s=s+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,q|0)|0;t=Sv(T|0,L()|0,t|0,u|0)|0;u=L()|0;q=q+7|0}while(q>>>0<64&((U&128|0)!=0|0!=0));v=s-y|0}while(0);y=y+v|0;do if(y>>>0<A>>>0){if(!(u>>>0<0|(u|0)==0&t>>>0<2)){v=Sv(w|0,x|0,-2,-1)|0;u=Sv(v|0,L()|0,t|0,u|0)|0;v=L()|0;q=cw(m|0,r|0,3)|0;T=L()|0;U=Sv(m|0,r|0,C|0,D|0)|0;T=Sv(U|0,L()|0,q|0,T|0)|0;q=L()|0;U=cw(T|0,q|0,3)|0;s=L()|0;q=Sv(T|0,q|0,B|0,0)|0;s=Sv(q|0,L()|0,U|0,s|0)|0;U=L()|0;q=cw(s|0,U|0,3)|0;T=L()|0;U=Sv(s|0,U|0,p|0,((p|0)<0)<<31>>31|0)|0;T=Sv(U|0,L()|0,q|0,T|0)|0;q=L()|0;U=aw(0,u|0,32)|0;s=L()|0;q=Yv(T|0,q|0,9,0)|0;q=Sv(U|0,s|0,q|0,L()|0)|0;s=L()|0;if(z){t=0;do{U=a[j+t>>0]|0;q=Yv(q|0,s|0,9,0)|0;q=Sv(q|0,L()|0,U|0,((U|0)<0)<<31>>31|0)|0;s=L()|0;t=t+1|0}while((t|0)!=(i|0))}t=y;h=q^h;o=s^o;s=u;q=v;break}s=a[y>>0]|0;p=s&255;q=(p&128|0)==0;if(!((t|0)==0&(u|0)==0)){do if(q)q=1;else{U=d[y+1>>0]|0;p=U<<7|p&127;if(!(U&128)){q=2;break}U=d[y+2>>0]|0;p=U<<14|p&16383;if(!(U&128)){q=3;break}U=d[y+3>>0]|0;p=U<<21|p&2097151;if(!(U&128)){q=4;break}s=28;t=y+4|0;p=p&268435455;q=0;do{U=t;t=t+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,s|0)|0;p=Sv(T|0,L()|0,p|0,q|0)|0;q=L()|0;s=s+7|0}while(s>>>0<64&((U&128|0)!=0|0!=0));q=t-y|0}while(0);t=y+q|0;s=0;q=0;break}do if(q){t=1;p=s&255;q=0}else{U=d[y+1>>0]|0;p=U<<7|p&127;if(!(U&128)){t=2;q=0;break}U=d[y+2>>0]|0;p=U<<14|p&16383;if(!(U&128)){t=3;q=0;break}U=d[y+3>>0]|0;p=U<<21|p&2097151;if(!(U&128)){t=4;q=0;break}s=28;t=y+4|0;p=p&268435455;q=0;do{U=t;t=t+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,s|0)|0;p=Sv(T|0,L()|0,p|0,q|0)|0;q=L()|0;s=s+7|0}while(s>>>0<64&((U&128|0)!=0|0!=0));t=t-y|0}while(0);m=Sv(p|0,q|0,m|0,r|0)|0;t=y+t|0;p=0;r=L()|0;s=0;q=0}else{t=y;s=w;q=x}while(0);if(t>>>0<A>>>0){y=t;w=s;x=q}else break}}m=gq(f,$)|0}while((m|0)==100);v=h}else{v=0;o=0}while(0);t=c[G>>2]|0;u=c[$>>2]|0;if((t|0)<=0){if(u|0)aa=213}else{r=0;while(1){s=c[u+(r<<2)>>2]|0;do if(s|0){do if(!(c[s+56>>2]|0)){h=c[s+64>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(!(a[s+5>>0]|0)){h=c[s+40>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[s+52>>2]|0;i:do if(h|0){p=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;do if(p|0){if(c[p+480>>2]|0){Xd(p,h);break i}q=h;if((c[p+304>>2]|0)>>>0>q>>>0)break;if((c[p+308>>2]|0)>>>0<=q>>>0)break;aa=p+300|0;c[h>>2]=c[aa>>2];c[aa>>2]=h;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{aa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);r=r+1|0;if((r|0)==(t|0)){aa=213;break}}}do if((aa|0)==213){aa=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{U=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);h=c[H>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{U=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);n=v^n;l=o^l;B=B+1|0}while((B|0)<(c[V>>2]|0))}else m=0;if(m){o=0;U=l;break}}do if(k){k=c[N>>2]|0;T=N+136|0;S=c[T+4>>2]|0;if((S|0)>0|(S|0)==0&(c[T>>2]|0)>>>0>0)hc(k,N);l=kc(N)|0;c[N+20>>2]=770837923;c[N+36>>2]=-1;c[N+40>>2]=0;a[N+146>>0]=2;c[N+44>>2]=0;c[N+32>>2]=1;a[N+147>>0]=-1;c[N+48>>2]=0;T=N+64|0;c[T>>2]=0;c[T+4>>2]=0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);h=7;break}else{h=c[k+68>>2]&l;break}}else h=0;while(0);if(o)if(!h){T=f+36|0;m=c[c[T>>2]>>2]|0;c[O>>2]=0;c[Z>>2]=c[f+220>>2];k=Bb(55001,Z)|0;j:do if(!k){h=7;m=0;k=0;l=0}else{h=qd(c[f+12>>2]|0,k,-1,128,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}l=c[O>>2]|0;if(h|0){m=0;k=0;break}K=f+44|0;M=f+32|0;N=(l|0)==0;O=l+120|0;P=l+144|0;Q=l+40|0;R=m+20|0;S=f+256|0;J=m+16|0;m=0;k=0;do{if((Gc(l)|0)!=100){h=0;break j}h=Oc(l,0)|0;o=L()|0;if(!(c[K>>2]|0))I=0;else I=Nc(l,(c[_>>2]|0)+1|0)|0;H=Yv(h|0,o|0,9,0)|0;H=Sv(H|0,L()|0,I|0,((I|0)<0)<<31>>31|0)|0;G=L()|0;E=Yv(H|0,G|0,81,0)|0;F=L()|0;G=Yv(H|0,G|0,9,0)|0;H=L()|0;D=0;do{if((D|0)>=(c[_>>2]|0)){h=0;break}C=D;D=D+1|0;if(!(a[(c[M>>2]|0)+C>>0]|0)){k:do if(N)h=29576;else{h=c[O>>2]|0;do if(h|0){if(D>>>0>=(e[P>>1]|0)>>>0)break;h=h+(D*40|0)|0;break k}while(0);h=c[l>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);o=b[h+8>>1]|0;do if((o&514)==514){if((a[h+10>>0]|0)!=1){aa=250;break}q=c[h+16>>2]|0}else aa=250;while(0);do if((aa|0)==250){aa=0;if(o&1){q=0;break}q=Gg(h,1)|0}while(0);if(!N){h=c[l>>2]|0;o=c[Q>>2]|0;if((o|0)==3082|(a[h+81>>0]|0)!=0){og(h);h=7}else h=c[h+68>>2]&o;c[Q>>2]=h}h=Lc(l,D)|0;o=c[T>>2]|0;p=c[o>>2]|0;c[Z>>2]=0;h=Za[c[p+12>>2]&127](o,q,h,Z)|0;l:do if(!h){c[c[Z>>2]>>2]=o;do if((c[p>>2]|0)>0){h=Xa[c[p+24>>2]&255](c[Z>>2]|0,I)|0;if(!h)break;Wa[c[p+16>>2]&127](c[Z>>2]|0)|0;c[Z>>2]=0;o=0;aa=262;break l}while(0);o=c[Z>>2]|0;z=o;A=Sv(E|0,F|0,C|0,0)|0;A=Yv(A|0,L()|0,9,0)|0;B=L()|0;do{c[$>>2]=0;c[W>>2]=0;c[X>>2]=0;c[Y>>2]=0;h=$a[c[R>>2]&127](z,Z,$,W,X,Y)|0;i=(h|0)==0;do if(i){w=c[Z>>2]|0;x=c[$>>2]|0;y=c[Y>>2]|0;j=((y|0)<0)<<31>>31;p=Sv(A|0,B|0,y|0,j|0)|0;q=L()|0;if((x|0)>0){r=0;do{v=a[w+r>>0]|0;p=Yv(p|0,q|0,9,0)|0;p=Sv(p|0,L()|0,v|0,((v|0)<0)<<31>>31|0)|0;q=L()|0;r=r+1|0}while((r|0)!=(x|0))}m=p^m;k=q^k;u=c[V>>2]|0;if((u|0)<=1)break;v=c[S>>2]|0;t=1;do{s=c[v+(t*24|0)>>2]|0;if((s|0)<=(x|0)){q=Sv(G|0,H|0,t|0,0)|0;p=L()|0;r=cw(q|0,p|0,3)|0;da=L()|0;p=Sv(q|0,p|0,C|0,0)|0;da=Sv(p|0,L()|0,r|0,da|0)|0;r=L()|0;p=cw(da|0,r|0,3)|0;q=L()|0;r=Sv(da|0,r|0,y|0,j|0)|0;q=Sv(r|0,L()|0,p|0,q|0)|0;p=L()|0;if((s|0)>0){r=0;do{da=a[w+r>>0]|0;q=Yv(q|0,p|0,9,0)|0;q=Sv(q|0,L()|0,da|0,((da|0)<0)<<31>>31|0)|0;p=L()|0;r=r+1|0}while((r|0)!=(s|0))}m=q^m;k=p^k}t=t+1|0}while((t|0)!=(u|0))}while(0)}while(i)}else{o=c[Z>>2]|0;aa=262}while(0);if((aa|0)==262)aa=0;if(o|0)Wa[c[J>>2]&127](o)|0;h=(h|0)==101?0:h}else h=0}while(!(h|0))}while((h|0)==0)}while(0);gc(l)|0;l=U}else{m=0;l=U;k=0}else{h=m;m=0;l=U;k=0}}k=(h|(n|0)==(m|0)&(l|0)==(k|0)&1|0)==0?267:h;break b}default:{if((h|0)<=6){k=1;break b}o=a[q>>0]|0}}while(0);n=o<<24>>24==0;m:do if(n){k=54973;aa=287}else{da=o&255;k=208+da|0;do if((da|32|0)==109){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54974;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==101){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54975;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==114){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54976;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==103){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54977;aa=287;break m}k=k&255;if((k|32|0)!=101){m=101;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54978;aa=287;break m}if(k<<24>>24==61)break m;else{m=61;k=208+(k&255)|0}}else m=103}else m=114}else m=101}else m=109;while(0);A=d[k>>0]|0;aa=291}while(0);if((aa|0)==287){A=0;m=a[208+(d[k>>0]|0)>>0]|0;aa=291}if((aa|0)==291?(A|0)!=(m&255|0):0){if((h|0)<=10){k=1;break}n:do if(n){k=54980;aa=321}else{da=o&255;k=208+da|0;do if((da|32|0)==97){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54981;aa=321;break n}da=k&255;k=208+da|0;if((da|32|0)==117){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54982;aa=321;break n}k=k&255;if((k|32|0)!=116){l=116;k=208+k|0;break}k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54983;aa=321;break n}k=k&255;if((k|32|0)!=111){l=111;k=208+k|0;break}k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54984;aa=321;break n}k=k&255;if((k|32|0)!=109){l=109;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54985;aa=321;break n}k=k&255;if((k|32|0)!=101){l=101;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54986;aa=321;break n}k=k&255;if((k|32|0)!=114){l=114;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=54987;aa=321;break n}k=k&255;if((k|32|0)!=103){l=103;k=208+k|0;break}k=a[q+8>>0]|0;if(!(k<<24>>24)){k=54988;aa=321;break n}k=k&255;if((k|32|0)!=101){l=101;k=208+k|0;break}k=a[q+9>>0]|0;if(!(k<<24>>24)){k=54989;aa=321;break n}if(k<<24>>24==61)break n;else{l=61;k=208+(k&255)|0}}else l=117}else l=97;while(0);B=d[k>>0]|0;aa=325}while(0);if((aa|0)==321){B=0;l=a[208+(d[k>>0]|0)>>0]|0;aa=325}if((aa|0)==325?(B|0)!=(l&255|0):0){k=1;break}k=q+10|0;c[$>>2]=0;l=a[k>>0]|0;o:do if(l<<24>>24>47){n=k;k=0;m=l;l=l<<24>>24;while(1){if(!(m<<24>>24<58&(k|0)<214748363))break o;n=n+1|0;k=l+-48+(k*10|0)|0;l=a[n>>0]|0;if(l<<24>>24<=47)break;else{m=l;l=l<<24>>24}}}else k=0;while(0);n=f+48|0;c[n>>2]=(k|0)==1|(k|0)>16?8:k;l=f+233|0;if(!(a[l>>0]|0)){k=c[f+12>>2]|0;da=c[f+20>>2]|0;c[D>>2]=c[f+16>>2];c[D+4>>2]=da;_q($,k,54351,D);k=c[$>>2]|0;if(!k){a[l>>0]=1;aa=333}}else aa=333;do if((aa|0)==333){m=f+148|0;l=c[m>>2]|0;c[O>>2]=l;if(!l){l=c[f+20>>2]|0;c[E>>2]=c[f+16>>2];c[E+4>>2]=l;l=Bb(52453,E)|0;if(!l){c[$>>2]=7;k=7;break}k=qd(c[f+12>>2]|0,l,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[O>>2]|0;c[m>>2]=l;c[$>>2]=k;if(k)break}else c[$>>2]=0;h=l;do if(!(Vc(h,1)|0)){k=c[h+100>>2]|0;m=k+8|0;if(!(b[m>>1]&9216)){da=k;c[da>>2]=2;c[da+4>>2]=0;b[m>>1]=4;break}else{Pg(k,2,0);break}}while(0);m=c[n>>2]|0;n=((m|0)<0)<<31>>31;if(Vc(h,2)|0){Gc(h)|0;if(!l)k=0;else aa=351}else{l=c[h+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){da=k;c[da>>2]=m;c[da+4>>2]=n;b[l>>1]=4}else Pg(k,m,n);Gc(h)|0;aa=351}do if((aa|0)==351){k=c[h>>2]|0;da=h+136|0;_=c[da+4>>2]|0;if((_|0)>0|(_|0)==0&(c[da>>2]|0)>>>0>0)hc(k,h);l=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;da=h+64|0;c[da>>2]=0;c[da+4>>2]=0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7;break}else{k=c[k+68>>2]&l;break}}while(0);c[$>>2]=k}while(0);break}k=q+6|0;m=a[k>>0]|0;p:do if(m<<24>>24>47){l=0;n=m;m=m<<24>>24;while(1){if(!(n<<24>>24<58&(l|0)<214748363)){aa=302;break p}k=k+1|0;l=m+-48+(l*10|0)|0;m=a[k>>0]|0;if(m<<24>>24>47){n=m;m=m<<24>>24}else{aa=296;break}}}else{l=0;aa=296}while(0);q:do if((aa|0)==296){if(m<<24>>24==44){k=k+1|0;n=a[k>>0]|0;if(n<<24>>24<=47){aa=302;break}m=0;h=n;n=n<<24>>24;while(1){if(!(h<<24>>24<58&(m|0)<214748363)){aa=302;break q}k=k+1|0;m=n+-48+(m*10|0)|0;o=a[k>>0]|0;if(o<<24>>24<=47){n=m;k=o;break}else{h=o;n=o<<24>>24}}}else{n=8;k=m}if(k<<24>>24!=0|(n|0)<2)aa=302;else{c[O>>2]=0;m=f+233|0;if(!(a[m>>0]|0)){k=c[f+12>>2]|0;da=c[f+20>>2]|0;c[C>>2]=c[f+16>>2];c[C+4>>2]=da;_q(O,k,54351,C);k=c[O>>2]|0;if(!k){a[m>>0]=1;aa=306}}else aa=306;if((aa|0)==306){k=Or(f,l,n)|0;c[O>>2]=k}l=f+248|0;m=c[l>>2]|0;r:do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;do if(n|0){if(c[n+480>>2]|0){Xd(n,m);break r}h=m;if((c[n+304>>2]|0)>>>0>h>>>0)break;if((c[n+308>>2]|0)>>>0<=h>>>0)break;da=n+300|0;c[m>>2]=c[da>>2];c[da>>2]=m;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{da=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[l>>2]=0}}while(0);if((aa|0)==302){c[O>>2]=1;k=1}}while(0);c[ba>>2]=k;break}k=c[i+(h+4<<2)>>2]|0;l=e[k+8>>1]|0;do if(!(l&4)){if(l&8|0){k=Mg(+g[k>>3])|0;L()|0;break}if(!(l&18)){r=_;aa=444;break a}k=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0}else k=c[k>>2]|0;while(0);if((k|0)<0)c[ba>>2]=19;else{r=_;aa=444}}else{r=f+24|0;aa=444}while(0);do if((aa|0)==444){t=c[r>>2]|0;t=cw(t|0,((t|0)<0)<<31>>31|0,3)|0;t=Sv(t|0,L()|0,8,0)|0;t=pb(t,L()|0)|0;if(!t){c[ba>>2]=7;break}o=(c[r>>2]|0)+1|0;s=t+(o<<2)|0;gw(t|0,0,o<<3|0)|0;o=f+264|0;s:do if(!(c[o>>2]|0)){m=f+120|0;k=c[m>>2]|0;c[O>>2]=k;do if(!k){l=c[f+20>>2]|0;c[q>>2]=c[f+16>>2];c[q+4>>2]=l;l=Bb(52138,q)|0;if(!l){k=7;break}k=qd(c[f+12>>2]|0,l,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[O>>2]|0;c[m>>2]=l;if(!k){k=l;aa=455}}else aa=455;while(0);do if((aa|0)==455){m=k;Vc(m,1)|0;Gc(m)|0;if(!k){aa=461;break s}k=c[m>>2]|0;da=m+136|0;$=c[da+4>>2]|0;if(($|0)>0|($|0)==0&(c[da>>2]|0)>>>0>0)hc(k,m);l=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;da=m+64|0;c[da>>2]=0;c[da+4>>2]=0;if(!((l|0)==3082|(a[k+81>>0]|0)!=0)){da=c[k+68>>2]&l;c[ba>>2]=da;if(!da){aa=463;break s}else break s}else{og(k);k=7;break}}while(0);c[ba>>2]=k}else aa=461;while(0);if((aa|0)==461){c[ba>>2]=0;aa=463}t:do if((aa|0)==463){do if(x?(c[f+40>>2]|0)==0:0){k=c[i+((c[r>>2]|0)+3<<2)>>2]|0;n=k+8|0;l=b[n>>1]|0;m=-1431655766>>>(l&31);if(m&1){k=c[i+4>>2]|0;n=k+8|0;l=b[n>>1]|0;m=-1431655766>>>(l&31)}if(!(m&1)){h=c[i>>2]|0;m=b[h+8>>1]|0;if(!(-1431655766>>>(m&31)&1)){m=m&65535;do if(!(m&4)){if(m&8|0){n=Mg(+g[h>>3])|0;h=L()|0;break}if(!(m&18)){n=0;h=0}else{da=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;h=L()|0;l=b[n>>1]|0;n=da}}else{n=c[h>>2]|0;h=c[h+4>>2]|0}while(0);l=l&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[k>>3])|0;m=L()|0;break}if(!(l&18)){l=0;m=0}else{l=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;m=L()|0}}else{m=k;l=c[m>>2]|0;m=c[m+4>>2]|0}while(0);if((n|0)==(l|0)&(h|0)==(m|0)){m=0;break}}if((a[(c[f+12>>2]|0)+86>>0]|0)==5){l=0;k=zr(f,k,z,t)|0}else{l=1;k=Ar(f,i,j)|0}c[ba>>2]=k;if(!k)m=l;else break t}else m=0}else m=0;while(0);k=c[i>>2]|0;if(!(-1431655766>>>(b[k+8>>1]&31)&1)){k=zr(f,k,z,t)|0;c[ba>>2]=k}else k=0;if(x&(k|0)==0){k=c[i+((c[r>>2]|0)+4<<2)>>2]|0;l=e[k+8>>1]|0;do if(!(l&4)){if(l&8|0){p=Mg(+g[k>>3])|0;L()|0;break}if(!(l&18))p=0;else{p=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0}}else p=c[k>>2]|0;while(0);u:do if(!m){da=Ar(f,i,j)|0;c[ba>>2]=da;switch(da|0){case 0:{aa=499;break u}case 19:break;default:break u}if(!(c[f+40>>2]|0))c[ba>>2]=267}else aa=499;while(0);v:do if((aa|0)==499){n=j;m=c[n>>2]|0;n=c[n+4>>2]|0;h=f+272|0;l=h;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!((l|0)>(n|0)|(l|0)==(n|0)&k>>>0>m>>>0)){if((k|0)==(m|0)&(l|0)==(n|0)?(c[f+284>>2]|0)==0:0){aa=504;break}k=f+280|0;if(!((c[k>>2]|0)==(p|0)?(c[o>>2]|0)<=(c[f+260>>2]|0):0))aa=504}else aa=504;while(0);do if((aa|0)==504){k=Sr(f)|0;if(!k){k=f+280|0;break}else{c[ba>>2]=k;break v}}while(0);da=h;c[da>>2]=m;c[da+4>>2]=n;c[k>>2]=p;c[f+284>>2]=0;c[ba>>2]=0;k=c[r>>2]|0;w:do if((k|0)>0){o=f+32|0;h=2;while(1){m=h+-2|0;if(!(a[(c[o>>2]|0)+m>>0]|0)){n=i+(h<<2)|0;k=c[n>>2]|0;x:do if(!k)k=0;else{l=b[k+8>>1]|0;do if((l&514)==514){if((a[k+10>>0]|0)!=1)break;k=c[k+16>>2]|0;break x}while(0);if(l&1){k=0;break}k=Gg(k,1)|0}while(0);k=Mr(f,p,k,m,s+(m<<2)|0)|0;if(k|0)break w;m=c[n>>2]|0;k=b[m+8>>1]|0;do if(!(k&2))aa=520;else{if((a[m+10>>0]|0)!=1){aa=520;break}k=c[m+12>>2]|0}while(0);do if((aa|0)==520){aa=0;l=k&65535;if(!(l&16)){if(l&1|0){k=0;break}k=Fg(m,1)|0;break}else{k=c[m+12>>2]|0;if(!(l&16384))break;k=(c[m>>2]|0)+k|0;break}}while(0);da=s+(c[r>>2]<<2)|0;c[da>>2]=(c[da>>2]|0)+k;k=c[r>>2]|0}if((h|0)>(k|0)){k=0;break}else h=h+1|0}}else k=0;while(0);c[ba>>2]=k}while(0);if(a[f+234>>0]|0)Br(ba,f,s);c[z>>2]=(c[z>>2]|0)+1}if(a[f+232>>0]|0)Cr(ba,f,s,t,c[z>>2]|0)}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{da=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);k=f+248|0;l=c[k>>2]|0;if(!l){c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}m=c[l+20>>2]|0;gc(c[l+16>>2]|0)|0;if(m|0){if(c[m+480>>2]|0){Xd(m,l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}da=l;if((c[m+304>>2]|0)>>>0<=da>>>0?(c[m+308>>2]|0)>>>0>da>>>0:0){da=m+300|0;c[l>>2]=c[da>>2];c[da>>2]=l;c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}return 0}function Nq(b){b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;d=g;c[b+52>>2]=0;f=b+233|0;if((a[f>>0]|0)!=2){f=0;Ra=g;return f|0}c[d>>2]=c[b+20>>2];e=Bb(55011,d)|0;if(!e){f=7;Ra=g;return f|0}d=Rd(c[b+12>>2]|0,c[b+16>>2]|0,e,0,0,0,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{b=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}a[f>>0]=(d|0)==0&1;f=0;Ra=g;return f|0}function Oq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;d=o;f=o+8|0;m=b+12|0;l=(c[m>>2]|0)+40|0;n=c[l>>2]|0;l=c[l+4>>2]|0;g=Sr(b)|0;a:do if(!g){j=b+52|0;if((c[j>>2]|0)>>>0>4){k=b+48|0;switch(c[k>>2]|0){case 255:case 0:{g=0;break a}default:{}}h=b+200|0;e=c[h>>2]|0;c[f>>2]=e;do if(!e){g=c[b+20>>2]|0;c[d>>2]=c[b+16>>2];c[d+4>>2]=g;d=Bb(53253,d)|0;if(!d){g=7;d=0;break}g=qd(c[m>>2]|0,d,-1,133,0,f,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[f>>2]|0;c[h>>2]=d;if(!g){e=d;i=12}else d=0}else i=12;while(0);do if((i|0)==12){g=e;if((Gc(g)|0)==100)d=Nc(g,0)|0;else d=0;if(e){e=c[g>>2]|0;i=g+136|0;h=c[i+4>>2]|0;if((h|0)>0|(h|0)==0&(c[i>>2]|0)>>>0>0)hc(e,g);f=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;i=g+64|0;c[i>>2]=0;c[i+4>>2]=0;if((f|0)==3082|(a[e+81>>0]|0)!=0){og(e);g=7;break}else{g=c[e+68>>2]&f;break}}else g=0}while(0);d=G(c[j>>2]|0,d)|0;d=((d|0)/2|0)+d|0;if((d|0)>64)g=Or(b,d,c[k>>2]|0)|0}else g=0}while(0);d=b+248|0;e=c[d>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}b=e;if((c[f+304>>2]|0)>>>0<=b>>>0?(c[f+308>>2]|0)>>>0>b>>>0:0){b=f+300|0;c[e>>2]=c[b>>2];c[b>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{b=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[d>>2]=0;m=(c[m>>2]|0)+40|0;c[m>>2]=n;c[m+4>>2]=l;Ra=o;return g|0}function Pq(a){a=a|0;return 0}function Qq(a){a=a|0;Fr(a);return 0}function Rq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(Bu(d,51022)|0)if(Bu(d,51030)|0)if(Bu(d,37598)|0)if(!(Bu(d,51038)|0))a=3;else{e=0;return e|0}else a=2;else a=1;else a=0;c[e>>2]=c[26368+(a<<3)+4>>2];e=1;return e|0}function Sq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+96|0;p=q+72|0;o=q+56|0;l=q+40|0;j=q+24|0;i=q+8|0;e=q;m=q+84|0;g=b+12|0;n=c[g>>2]|0;k=b+233|0;if((a[k>>0]|0)==2){c[e>>2]=c[b+20>>2];f=Bb(55011,e)|0;if(!f)e=7;else{e=Rd(c[g>>2]|0,c[b+16>>2]|0,f,0,0,0,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}a[k>>0]=(e|0)==0&1;h=7}}else h=7;if((h|0)==7){c[m>>2]=0;e=Sr(b)|0}c[m>>2]=e;if(!(c[b+40>>2]|0)){h=c[b+20>>2]|0;c[i>>2]=c[b+16>>2];c[i+4>>2]=h;c[i+8>>2]=d;_q(m,n,55251,i)}if(a[b+234>>0]|0){i=c[b+20>>2]|0;c[j>>2]=c[b+16>>2];c[j+4>>2]=i;c[j+8>>2]=d;_q(m,n,55304,j)}f=b+16|0;if(!(a[k>>0]|0))e=b+20|0;else{e=b+20|0;k=c[e>>2]|0;c[l>>2]=c[f>>2];c[l+4>>2]=k;c[l+8>>2]=d;_q(m,n,55357,l)}l=c[e>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=l;c[o+8>>2]=d;_q(m,n,55404,o);o=c[e>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=o;c[p+8>>2]=d;_q(m,n,55458,p);Ra=q;return c[m>>2]|0}function Tq(b,c){b=b|0;c=c|0;if(a[b+236>>0]|0){c=0;return c|0}c=Oq(b)|0;return c|0}function Uq(a,b){a=a|0;b=b|0;return 0}function Vq(a,b){a=a|0;b=b|0;Fr(a);return 0}function Wq(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0;if(!b){i=0;return i|0}i=a[b>>0]|0;g=d[208+(i&255)>>0]|0;c=g+-99|0;i=i<<24>>24==0;if(!(i|(c|0)!=0)){e=53664;f=b;do{f=f+1|0;e=e+1|0;h=a[f>>0]|0;c=(d[208+(h&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-100|0;if(!(i|(c|0)!=0)){e=55510;f=b;do{f=f+1|0;e=e+1|0;h=a[f>>0]|0;c=(d[208+(h&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}h=g+-115|0;g=i|(h|0)!=0;if(g)c=h;else{e=55518;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}if(g)c=h;else{e=55525;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}if(g){i=h;i=(i|0)==0;i=i&1;return i|0}e=31715;do{b=b+1|0;e=e+1|0;i=a[b>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0));i=(c|0)==0;i=i&1;return i|0}function Xq(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;Ia=Ra;Ra=Ra+320|0;Fa=Ia+296|0;Da=Ia+288|0;Ca=Ia+280|0;Ba=Ia+272|0;za=Ia+264|0;xa=Ia+256|0;wa=Ia+248|0;va=Ia+240|0;ua=Ia+232|0;ta=Ia+216|0;sa=Ia+200|0;ra=Ia+192|0;qa=Ia+176|0;pa=Ia+168|0;oa=Ia+160|0;na=Ia+152|0;Aa=Ia+144|0;ma=Ia+128|0;ha=Ia+120|0;ga=Ia+112|0;fa=Ia+104|0;ka=Ia+96|0;ja=Ia+80|0;ia=Ia+72|0;ea=Ia+64|0;da=Ia+56|0;W=Ia+48|0;R=Ia+40|0;O=Ia+32|0;Q=Ia+24|0;P=Ia+16|0;N=Ia+8|0;M=Ia;la=Ia+316|0;Ha=Ia+312|0;Ga=Ia+308|0;c[Ha>>2]=0;ya=(a[(c[j>>2]|0)+3>>0]|0)==52;c[Ga>>2]=0;_=j+4|0;X=Eu(c[_>>2]|0)|0;$=X+1|0;Y=j+8|0;Z=(Eu(c[Y>>2]|0)|0)+1|0;o=(i<<2)+-8|0;n=pb(o,0)|0;if((n|0)!=0?(gw(n|0,0,o|0)|0,m=pb(o,0)|0,(m|0)!=0):0){gw(m|0,0,o|0)|0;a:do if((i|0)>3){w=3;y=0;v=0;t=0;s=0;r=0;q=0;u=0;F=0;x=0;p=0;o=0;while(1){H=c[j+(w<<2)>>2]|0;do if((o|0)==0?!((H|0)==0|(Eu(H)|0)>>>0<9):0){o=a[H>>0]|0;b:do if(!(o<<24>>24)){o=53622;Ea=9}else{I=o&255;o=208+I|0;do if((I|32|0)==116){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53623;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==111){o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53624;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==107){o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53625;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==101){o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53626;Ea=9;break b}o=o&255;if((o|32|0)!=110){z=110;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53627;Ea=9;break b}o=o&255;if((o|32|0)!=105){z=105;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53628;Ea=9;break b}o=o&255;if((o|32|0)!=122){z=122;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53629;Ea=9;break b}o=o&255;if((o|32|0)==101)break b;else{z=101;o=208+o|0}}else z=101}else z=107}else z=111}else z=116;while(0);K=d[o>>0]|0;J=z;Ea=13}while(0);if((Ea|0)==9){K=0;J=a[208+(d[o>>0]|0)>>0]|0;Ea=13}if((Ea|0)==13?(Ea=0,(K|0)!=(J&255|0)):0){Ea=17;break}I=a[H+8>>0]|0;if((I&128|0)==0?(a[26208+I>>0]|0)==0:0){E=Yq(h,H+9|0,Ga,l)|0;c[Ha>>2]=E;E=y}else Ea=17}else Ea=17;while(0);c:do if((Ea|0)==17){Ea=0;d:do if(ya){o=H;e:while(1){switch(a[o>>0]|0){case 0:break d;case 61:break e;default:{}}o=o+1|0}E=o-H|0;c[M>>2]=o+1;I=Bb(31408,M)|0;if(!I){c[Ha>>2]=7;E=y;break c}o=a[I>>0]|0;switch(o<<24>>24){case 34:case 39:case 91:case 96:{C=o<<24>>24==91?93:o;z=a[I+1>>0]|0;f:do if(!(z<<24>>24))o=0;else{A=1;o=0;do{B=A+1|0;if(z<<24>>24==C<<24>>24){if((a[I+B>>0]|0)!=C<<24>>24)break f;a[I+o>>0]=C;A=A+2|0}else{a[I+o>>0]=z;A=B}o=o+1|0;z=a[I+A>>0]|0}while(z<<24>>24!=0)}while(0);a[I+o>>0]=0;break}default:{}}G=I;g:do if(!H)o=8;else{switch(E|0){case 9:{A=H;C=51038;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=36;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=38;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=0;break g}}if((Ea|0)==36){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}else if((Ea|0)==38){Ea=0;z=z&255}if((z|0)==(o&255|0)){o=0;break g}switch(E|0){case 6:{Ea=42;break}case 8:{o=E;Ea=415;break}default:{}}break}case 6:{Ea=42;break}case 8:{o=E;Ea=415;break}default:{}}if((Ea|0)==42){Ea=0;A=H;C=53631;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=412;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=410;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=1;break g}}if((Ea|0)==410){Ea=0;z=z&255}else if((Ea|0)==412){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=1;break}if((E|0)==8){o=8;Ea=415}}if((Ea|0)==415){Ea=0;B=H;C=53638;A=o;while(1){o=a[B>>0]|0;if(!(o<<24>>24)){Ea=420;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=418;break}if((A|0)>1){B=B+1|0;C=C+1|0;A=A+-1|0}else{o=2;break g}}if((Ea|0)==418){Ea=0;z=z&255}else if((Ea|0)==420){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=2;break}}D=(E|0)==10;if(D){o=a[H>>0]|0;h:do if(!(o<<24>>24)){o=53647;Ea=427}else{C=o&255;o=208+C|0;do if((C|32|0)==117){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53648;Ea=427;break h}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53649;Ea=427;break h}o=o&255;if((o|32|0)!=99){A=99;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53650;Ea=427;break h}o=o&255;if((o|32|0)!=111){A=111;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53651;Ea=427;break h}o=o&255;if((o|32|0)!=109){A=109;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53652;Ea=427;break h}o=o&255;if((o|32|0)!=112){A=112;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53653;Ea=427;break h}o=o&255;if((o|32|0)!=114){A=114;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53654;Ea=427;break h}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53655;Ea=427;break h}o=o&255;if((o|32|0)!=115){A=115;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53656;Ea=427;break h}o=o&255;if((o|32|0)==115){o=3;break g}else{A=115;o=208+o|0}}else A=117;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==427){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=3;break}}switch(E|0){case 5:{A=H;C=53658;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=435;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=433;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=4;break g}}if((Ea|0)==433){Ea=0;z=z&255}else if((Ea|0)==435){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=4;break g}if((E|0)==7){o=7;Ea=438}break}case 7:{o=E;Ea=438;break}default:{}}if((Ea|0)==438){Ea=0;B=H;C=53664;A=o;while(1){o=a[B>>0]|0;if(!(o<<24>>24)){Ea=443;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=441;break}if((A|0)>1){B=B+1|0;C=C+1|0;A=A+-1|0}else{o=5;break g}}if((Ea|0)==441){Ea=0;z=z&255}else if((Ea|0)==443){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=5;break}}if(D){o=a[H>>0]|0;i:do if(!(o<<24>>24)){o=53672;Ea=450}else{E=o&255;o=208+E|0;do if((E|32|0)==108){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53673;Ea=450;break i}o=o&255;if((o|32|0)!=97){A=97;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53674;Ea=450;break i}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53675;Ea=450;break i}o=o&255;if((o|32|0)!=103){A=103;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53676;Ea=450;break i}o=o&255;if((o|32|0)!=117){A=117;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53677;Ea=450;break i}o=o&255;if((o|32|0)!=97){A=97;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53678;Ea=450;break i}o=o&255;if((o|32|0)!=103){A=103;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53679;Ea=450;break i}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53680;Ea=450;break i}o=o&255;if((o|32|0)!=105){A=105;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53681;Ea=450;break i}o=o&255;if((o|32|0)==100){o=6;break g}else{A=100;o=208+o|0}}else A=108;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==450){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=6;break}if(D){o=a[H>>0]|0;j:do if(!(o<<24>>24)){o=53683;Ea=457}else{E=o&255;o=208+E|0;do if((E|32|0)==110){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53684;Ea=457;break j}o=o&255;if((o|32|0)!=111){A=111;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53685;Ea=457;break j}o=o&255;if((o|32|0)!=116){A=116;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53686;Ea=457;break j}o=o&255;if((o|32|0)!=105){A=105;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53687;Ea=457;break j}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53688;Ea=457;break j}o=o&255;if((o|32|0)!=100){A=100;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53689;Ea=457;break j}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53690;Ea=457;break j}o=o&255;if((o|32|0)!=120){A=120;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53691;Ea=457;break j}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53692;Ea=457;break j}o=o&255;if((o|32|0)==100){o=7;break g}else{A=100;o=208+o|0}}else A=110;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==457){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=7;break}}}o=8}while(0);k:do switch(o&15){case 0:{if((Eu(I)|0)==4){o=a[I>>0]|0;l:do if(!(o<<24>>24)){o=51048;Ea=46}else{H=o&255;o=208+H|0;do if((H|32|0)==102){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=51049;Ea=46;break l}o=o&255;if((o|32|0)!=116){z=116;o=208+o|0;break}o=a[I+2>>0]|0;if(!(o<<24>>24)){o=51050;Ea=46;break l}o=o&255;if((o|32|0)!=115){z=115;o=208+o|0;break}o=a[I+3>>0]|0;if(!(o<<24>>24)){o=51051;Ea=46;break l}if(o<<24>>24==51){y=1;o=F;break k}else{z=51;o=208+(o&255)|0}}else z=102;while(0);y=d[o>>0]|0;o=z}while(0);if((Ea|0)==46){Ea=0;y=0;o=a[208+(d[o>>0]|0)>>0]|0}if((y|0)==(o&255|0)){y=1;o=F;break k}}c[N>>2]=I;Wp(l,53694,N);c[Ha>>2]=1;y=1;o=F;break}case 1:{if(!u){E=y;u=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);E=y;u=I;break c}else{E=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);E=y;u=I;break c}}case 2:{if(!q){E=y;q=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);E=y;q=I;break c}else{E=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);E=y;q=I;break c}}case 3:{if(!r){E=y;r=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);E=y;r=I;break c}else{E=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);E=y;r=I;break c}}case 4:{m:do switch(Eu(I)|0){case 3:{B=a[I>>0]|0;do if(!(B<<24>>24)){o=53721;Ea=66}else{H=B&255;o=208+H|0;if((H|32|0)==97){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=53722;Ea=66;break}H=o&255;o=208+H|0;if((H|32|0)==115){o=a[I+2>>0]|0;if(!(o<<24>>24)){o=53723;Ea=66;break}o=o&255;if((o|32|0)==99){o=B;break m}else{A=99;o=208+o|0}}else A=115}else A=97;z=d[o>>0]|0;o=A}while(0);if((Ea|0)==66){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0))o=B;else Ea=77;break}case 4:{B=a[I>>0]|0;n:do if(!(B<<24>>24)){o=38073;Ea=72}else{H=B&255;o=208+H|0;do if((H|32|0)==100){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=38074;Ea=72;break n}H=o&255;o=208+H|0;if((H|32|0)==101){o=a[I+2>>0]|0;if(!(o<<24>>24)){o=38075;Ea=72;break n}o=o&255;if((o|32|0)!=115){A=115;o=208+o|0;break}o=a[I+3>>0]|0;if(!(o<<24>>24)){o=38076;Ea=72;break n}o=o&255;if((o|32|0)==99){o=B;break m}else{A=99;o=208+o|0}}else A=101}else A=100;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==72){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0))o=B;else Ea=77;break}default:Ea=77}while(0);if((Ea|0)==77){Ea=0;c[P>>2]=I;Wp(l,53725,P);c[Ha>>2]=1;o=a[I>>0]|0}o=(o|32)<<24>>24==100&1;break}case 5:{if(!s){E=y;s=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](s);E=y;s=I;break c}else{E=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);E=y;s=I;break c}}case 6:{if(!t){E=y;t=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);E=y;t=I;break c}else{E=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);E=y;t=I;break c}}case 7:{c[m+(v<<2)>>2]=G;E=y;v=v+1|0;break c}default:{c[Q>>2]=H;Wp(l,53748,Q);c[Ha>>2]=1;o=F}}while(0);if(!I){E=y;F=o;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);E=y;F=o;break c}else{E=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);E=y;F=o;break c}}while(0);p=p+1+(Eu(H)|0)|0;c[n+(x<<2)>>2]=H;x=x+1|0;E=y}while(0);w=w+1|0;o=c[Ha>>2]|0;y=(o|0)==0;if(!((w|0)<(i|0)&y))break;y=E;o=c[Ga>>2]|0}o:do if((s|0)!=0&y){do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Q=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Q=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);if(x|0){w=n;r=0;q=0;o=c[Ha>>2]|0;Ea=162;break}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{Q=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}o=c[_>>2]|0;c[la>>2]=0;c[O>>2]=o;c[O+4>>2]=s;o=Bb(53869,O)|0;if(o){n=qd(g,o,-1,0,0,la,0)|0;p=(n|0)==0;if(!p){Q=pd(g)|0;c[R>>2]=Q;Wp(l,31408,R)}if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{R=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}if(p){C=c[la>>2]|0;A=(C|0)==0;p:do if(!A?(T=C+144|0,S=b[T>>1]|0,U=S&65535,S<<16>>16!=0):0){y=C+116|0;o=0;q=S;x=0;n=0;while(1){w=c[C>>2]|0;do if(o>>>0<(q&65535)>>>0){p=c[y>>2]|0;q=p+(o*40|0)|0;q:do if(!q)p=0;else{r=b[p+(o*40|0)+8>>1]|0;do if((r&514)==514){if((a[p+(o*40|0)+10>>0]|0)!=1)break;p=c[p+(o*40|0)+16>>2]|0;break q}while(0);if(r&1){p=0;break}p=Gg(q,1)|0}while(0);q=w+81|0;if(!(a[q>>0]|0))break;if(c[w+180>>2]|0){p=0;break}a[q>>0]=0;c[w+264>>2]=0;p=w+272|0;c[p>>2]=(c[p>>2]|0)+-1;p=0}else p=0;while(0);p=Sv(x|0,n|0,(Eu(p)|0)+1|0,0)|0;n=L()|0;o=o+1|0;if((o|0)==(U|0)){x=U;B=p;o=0;break p}q=b[T>>1]|0;x=p}}else{x=0;B=0;n=0;o=1}while(0);D=Sv(B|0,n|0,x<<2|0,0)|0;D=pb(D,L()|0)|0;n=(D|0)==0;r:do if(o|n)o=n?7:0;else{n=D+(x<<2)|0;y=C+144|0;z=C+116|0;if(A){p=(Eu(0)|0)+1|0;o=0;while(1){ew(n|0,0,p|0)|0;c[D+(o<<2)>>2]=n;o=o+1|0;if((o|0)==(x|0)){o=0;break r}else n=n+p|0}}w=0;while(1){r=c[C>>2]|0;do if(w>>>0<(e[y>>1]|0)>>>0){o=c[z>>2]|0;p=o+(w*40|0)|0;s:do if(!p)o=0;else{q=b[o+(w*40|0)+8>>1]|0;do if((q&514)==514){if((a[o+(w*40|0)+10>>0]|0)!=1)break;o=c[o+(w*40|0)+16>>2]|0;break s}while(0);if(q&1){o=0;break}o=Gg(p,1)|0}while(0);p=r+81|0;if(!(a[p>>0]|0))break;if(c[r+180>>2]|0){o=0;break}a[p>>0]=0;c[r+264>>2]=0;o=r+272|0;c[o>>2]=(c[o>>2]|0)+-1;o=0}else o=0;while(0);p=(Eu(o)|0)+1|0;ew(n|0,o|0,p|0)|0;c[D+(w<<2)>>2]=n;w=w+1|0;if((w|0)==(x|0)){o=0;break}else n=n+p|0}}while(0);gc(C)|0;c[Ha>>2]=o;if(!((t|0)!=0&(o|0)==0)){w=D;p=B;r=0;q=0;n=D;Ea=162;break}if(!x){o=E;p=F;w=D;r=0;q=0;n=D;Ea=164;break a}n=0;while(1){p=c[D+(n<<2)>>2]|0;if(p|0){U=a[t>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0;if(!(U<<24>>24==0|(o|0)!=0)){q=t;do{q=q+1|0;p=p+1|0;U=a[q>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(U<<24>>24==0|(o|0)!=0))}if(!o)break}n=n+1|0;if(n>>>0>=x>>>0){w=D;p=B;r=0;q=0;n=D;break o}}if(n>>>0<x>>>0)do{U=n;n=n+1|0;c[D+(U<<2)>>2]=c[D+(n<<2)>>2]}while((n|0)!=(x|0));w=D;x=x+-1|0;p=B;r=0;q=0;n=D;break}}else n=7;c[Ha>>2]=n;o=0;r=0;q=0;n=0;p=0;break a}else{w=n;Ea=162}while(0);if((Ea|0)==162)if(o){o=0;p=0;break}if(!x){o=E;p=F;Ea=164}else{C=E;B=F;D=w;H=x;A=p;Ea=165}}else{o=0;v=0;t=0;s=0;u=0;p=0;w=n;r=0;q=0;Ea=164}while(0);if((Ea|0)==164){c[w>>2]=53664;C=o;B=p;D=w;H=1;A=8;Ea=165}do if((Ea|0)==165){if((c[Ga>>2]|0)==0?(h=Yq(h,50983,Ga,l)|0,c[Ha>>2]=h,h|0):0){o=0;p=0;break}x=(u|0)!=0;t:do if(x?(V=a[u>>0]|0,V<<24>>24!=0):0){w=u;o=2;p=V;while(1){switch(p<<24>>24){case 0:break t;case 44:{o=o+1|0;break}default:{}}p=w+1|0;w=p;p=a[p>>0]|0}}else o=1;while(0);p=o*24|0;O=pb(p,0)|0;u:do if(O){gw(O|0,0,p|0)|0;if(x&(o|0)>1){z=u;p=1;while(1){x=a[z>>0]|0;if((x+-48&255)>=10)break;y=z;w=0;do{w=(x<<24>>24)+-48+(w*10|0)|0;if((w|0)>1e7){w=0;break}y=y+1|0;x=a[y>>0]|0}while((x+-48&255)<10);if((y|0)==(z|0))break;if(!w){p=p+-1|0;o=o+-1|0}else c[O+(p*24|0)>>2]=w;p=p+1|0;if((p|0)>=(o|0)){p=0;Ea=185;break u}else z=y+1|0}c[Ha>>2]=1;c[W>>2]=u;Wp(l,53775,W);x=0;o=c[Ha>>2]|0}else{p=0;Ea=185}}else{o=0;p=7;Ea=185}while(0);if((Ea|0)==185){c[Ha>>2]=p;x=o;o=p}if(!o){w=x*24|0;p=X+289+Z+A+H+(H<<2)+w|0;o=pb(p,0)|0;if(!o){c[Ha>>2]=7;p=O;break}gw(o|0,0,p|0)|0;N=o+12|0;c[N>>2]=g;j=o+24|0;c[j>>2]=H;c[o+264>>2]=0;p=o+288|0;M=o+28|0;c[M>>2]=p;c[o+36>>2]=c[Ga>>2];c[o+260>>2]=1048576;I=o+234|0;a[I>>0]=ya&(C|0)==0&1;G=ya&1;K=o+233|0;a[K>>0]=G;a[o+232>>0]=G;a[o+235>>0]=B;c[o+48>>2]=255;G=o+40|0;c[G>>2]=s;i=o+44|0;c[i>>2]=t;p=p+(H<<2)|0;t=o+256|0;c[t>>2]=p;ew(p|0,O|0,w|0)|0;c[o+252>>2]=x;p=c[t>>2]|0;if((x|0)>0){s=0;do{a[p+(s*24|0)+4>>0]=1;a[p+(s*24|0)+5>>0]=1;p=p+(s*24|0)+8|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;s=s+1|0;p=c[t>>2]|0}while((s|0)!=(x|0))}p=p+(x*24|0)|0;E=o+32|0;c[E>>2]=p;p=p+H|0;J=o+20|0;c[J>>2]=p;ew(p|0,c[Y>>2]|0,Z|0)|0;p=p+Z|0;F=o+16|0;c[F>>2]=p;ew(p|0,c[_>>2]|0,$|0)|0;B=(H|0)>0;if(B){A=0;z=p+$|0;while(1){y=c[D+(A<<2)>>2]|0;v:while(1){x=a[y>>0]|0;s=x<<24>>24;switch(s|0){case 0:break v;case 96:case 34:case 39:{Ea=198;break v}case 91:{Ea=197;break v}default:{}}if(s&128|0){Ea=206;break}p=y+1|0;if(!(a[26208+s>>0]|0))y=p;else{Ea=208;break}}w:do if((Ea|0)==197){p=y;while(1){s=p+1|0;Ea=a[s>>0]|0;t=Ea<<24>>24==0;if(t^Ea<<24>>24!=93)p=s;else break}p=t?s:p+2|0;Ea=212}else if((Ea|0)==198){p=y+1|0;s=a[p>>0]|0;if(!(s<<24>>24))Ea=212;else{w=y;while(1){if(s<<24>>24==x<<24>>24){p=w+2|0;if((a[p>>0]|0)!=x<<24>>24){Ea=212;break w}}t=p+1|0;s=a[t>>0]|0;if(!(s<<24>>24)){p=t;Ea=212;break}else{w=p;p=t}}}}else if((Ea|0)==206){p=y+1|0;Ea=208}while(0);x:do if((Ea|0)==208)while(1){Ea=a[p>>0]|0;if((Ea&128|0)==0?(a[26208+Ea>>0]|0)==0:0){Ea=212;break x}p=p+1|0}while(0);if((Ea|0)==212){Ea=0;p=p-y|0;if((p|0)>0){ew(z|0,y|0,p|0)|0;s=p}else s=p}a[z+s>>0]=0;p=a[z>>0]|0;switch(p<<24>>24){case 34:case 39:case 91:case 96:{y=p<<24>>24==91?93:p;t=a[z+1>>0]|0;y:do if(!(t<<24>>24))p=0;else{w=1;p=0;do{x=w+1|0;if(t<<24>>24==y<<24>>24){if((a[z+x>>0]|0)!=y<<24>>24)break y;a[z+p>>0]=y;w=w+2|0}else{a[z+p>>0]=t;w=x}p=p+1|0;t=a[z+w>>0]|0}while(t<<24>>24!=0)}while(0);a[z+p>>0]=0;break}default:{}}c[(c[M>>2]|0)+(A<<2)>>2]=z;A=A+1|0;if((A|0)>=(H|0))break;else z=z+(s+1)|0}if(B){C=(v|0)>0;B=0;do{D=Eu(c[(c[M>>2]|0)+(B<<2)>>2]|0)|0;z:do if(C){if((D|0)<=0){p=0;while(1){s=m+(p<<2)|0;t=c[s>>2]|0;do if(t|0){if((D|0)!=(Eu(t)|0))break;if(!(c[(c[M>>2]|0)+(B<<2)>>2]|0))break;a[(c[E>>2]|0)+B>>0]=1;if(!(c[7324]|0))ab[c[29344>>2]&127](t);else{$=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t)}c[s>>2]=0}while(0);p=p+1|0;if((p|0)==(v|0))break z}}y=0;do{z=m+(y<<2)|0;A=c[z>>2]|0;do if(A|0){if((D|0)!=(Eu(A)|0))break;p=c[(c[M>>2]|0)+(B<<2)>>2]|0;if(!p)break;w=A;x=D;while(1){s=a[p>>0]|0;if(!(s<<24>>24)){Ea=238;break}s=a[208+(s&255)>>0]|0;t=a[208+(d[w>>0]|0)>>0]|0;if(s<<24>>24!=t<<24>>24){Ea=236;break}if((x|0)>1){p=p+1|0;w=w+1|0;x=x+-1|0}else break}if((Ea|0)==236){aa=s&255;ba=t;Ea=239}else if((Ea|0)==238){aa=0;ba=a[208+(d[w>>0]|0)>>0]|0;Ea=239}if((Ea|0)==239?(Ea=0,(aa|0)!=(ba&255|0)):0)break;a[(c[E>>2]|0)+B>>0]=1;if(!(c[7324]|0))ab[c[29344>>2]&127](A);else{$=Wa[c[29352>>2]&127](A)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](A)}c[z>>2]=0}while(0);y=y+1|0}while((y|0)!=(v|0))}while(0);B=B+1|0}while((B|0)<(H|0))}}if((v|0)>0){p=0;do{s=c[m+(p<<2)>>2]|0;if(s|0){c[da>>2]=s;Wp(l,44776,da);c[Ha>>2]=1}p=p+1|0}while((p|0)!=(v|0))}if((c[Ha>>2]|0)==0?(ca=(q|0)==0,ca^(r|0)==0):0){c[Ha>>2]=1;c[ea>>2]=ca?53638:53647;Wp(l,53810,ea)}c[la>>2]=0;do if(!(c[G>>2]|0)){if(r){y=((Eu(r)|0)<<1)+3|0;y=pb(y,((y|0)<0)<<31>>31)|0;if(!y){t=0;s=0}else{a[y>>0]=34;x=0;t=y;A:while(1){s=t+1|0;w=r+x|0;p=a[w>>0]|0;switch(p<<24>>24){case 0:break A;case 34:{a[s>>0]=34;s=t+2|0;p=a[w>>0]|0;break}default:{}}a[s>>0]=p;x=x+1|0;t=s}a[s>>0]=34;a[t+2>>0]=0;t=y;s=y}}else{t=59952;s=0;r=0}Zq(Ha,la,53889,ia);if((c[j>>2]|0)>0){p=0;do{ia=c[(c[M>>2]|0)+(p<<2)>>2]|0;c[ja>>2]=t;c[ja+4>>2]=p;c[ja+8>>2]=ia;Zq(Ha,la,53895,ja);p=p+1|0}while((p|0)<(c[j>>2]|0))}if(c[i>>2]|0){c[ka>>2]=53917;Zq(Ha,la,53910,ka)}if(s)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);y=r;break}else{y=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);y=r;break}else y=r}else{Zq(Ha,la,38132,fa);if((c[j>>2]|0)>0){p=0;do{c[ga>>2]=c[(c[M>>2]|0)+(p<<2)>>2];Zq(Ha,la,53924,ga);p=p+1|0}while((p|0)<(c[j>>2]|0))}p=c[i>>2]|0;if(!p)y=r;else{c[ha>>2]=p;Zq(Ha,la,53910,ha);y=r}}while(0);p=c[G>>2]|0;r=(p|0)==0;if(r)p=c[J>>2]|0;c[ma>>2]=c[F>>2];c[ma+4>>2]=p;c[ma+8>>2]=r?53956:59952;Zq(Ha,la,53933,ma);c[o+220>>2]=c[la>>2];c[ma>>2]=0;if(q){x=((Eu(q)|0)<<1)+3|0;x=pb(x,((x|0)<0)<<31>>31)|0;if(!x){s=0;r=0}else{a[x>>0]=34;w=0;s=x;B:while(1){r=s+1|0;t=q+w|0;p=a[t>>0]|0;switch(p<<24>>24){case 0:break B;case 34:{a[r>>0]=34;r=s+2|0;p=a[t>>0]|0;break}default:{}}a[r>>0]=p;w=w+1|0;s=r}a[r>>0]=34;a[s+2>>0]=0;s=x;r=x}}else{s=59952;r=0;q=0}Zq(Ha,ma,35133,Aa);if((c[j>>2]|0)>0){p=0;do{c[na>>2]=s;Zq(Ha,ma,53965,na);p=p+1|0}while((p|0)<(c[j>>2]|0))}if(c[i>>2]|0)Zq(Ha,ma,53972,oa);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{oa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);c[o+224>>2]=c[ma>>2];if(c[Ha>>2]|0){t=0;s=0;r=y;p=O;break}w=(f|0)!=0;if(w){c[Aa>>2]=0;t=c[N>>2]|0;C:do if(!(c[G>>2]|0)){s=c[i>>2]|0;p=Bb(53976,pa)|0;D:do if(p|0){r=0;while(1){if((r|0)>=(c[j>>2]|0))break;pa=c[(c[M>>2]|0)+(r<<2)>>2]|0;c[qa>>2]=p;c[qa+4>>2]=r;c[qa+8>>2]=pa;p=Bb(54002,qa)|0;if(!p)break D;else r=r+1|0}if(s){c[ra>>2]=p;c[ra+4>>2]=s;p=Bb(54014,ra)|0;if(!p)break}sa=c[J>>2]|0;c[ta>>2]=c[F>>2];c[ta+4>>2]=sa;c[ta+8>>2]=p;_q(Aa,t,54025,ta);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break C}else{ta=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break C}}while(0);c[Aa>>2]=7;ta=c[J>>2]|0;c[sa>>2]=c[F>>2];c[sa+4>>2]=ta;c[sa+8>>2]=0;_q(Aa,t,54025,sa)}while(0);ta=c[J>>2]|0;c[ua>>2]=c[F>>2];c[ua+4>>2]=ta;_q(Aa,t,54058,ua);ua=c[J>>2]|0;c[va>>2]=c[F>>2];c[va+4>>2]=ua;_q(Aa,t,54130,va);if(a[I>>0]|0){va=c[J>>2]|0;c[wa>>2]=c[F>>2];c[wa+4>>2]=va;_q(Aa,t,54283,wa)}do if(!(a[K>>0]|0))p=c[Aa>>2]|0;else{p=c[N>>2]|0;wa=c[J>>2]|0;c[xa>>2]=c[F>>2];c[xa+4>>2]=wa;_q(Aa,p,54351,xa);p=c[Aa>>2]|0;if(p|0)break;a[K>>0]=1;p=0}while(0);c[Ha>>2]=p}else p=0;if(!(w|ya))a[K>>0]=2;if(p|0){c[o+228>>2]=(c[o+240>>2]|0)+-35;t=0;s=0;r=y;p=O;break}c[za>>2]=c[F>>2];r=Bb(54428,za)|0;do if(r){p=qd(c[N>>2]|0,r,-1,0,0,Aa,0)|0;switch(p|0){case 0:{p=c[Aa>>2]|0;Gc(p)|0;Aa=Nc(p,0)|0;c[o+240>>2]=Aa;p=gc(p)|0;break}case 23:{c[o+240>>2]=1024;p=0;break}default:{}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Aa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else p=7;while(0);c[Ha>>2]=p;c[o+228>>2]=(c[o+240>>2]|0)+-35;if(p|0){t=0;s=0;r=y;p=O;break}t=c[i>>2]|0;t=(t|0)==0?54448:t;p=c[N>>2]|0;c[Ba>>2]=1;vd(p,1,Ba)|0;c[Ca>>2]=c[c[M>>2]>>2];p=Bb(54457,Ca)|0;E:do if(!p){s=0;p=0}else{r=1;while(1){if((r|0)>=(c[j>>2]|0)){s=p;p=1;break E}Ca=c[(c[M>>2]|0)+(r<<2)>>2]|0;c[Da>>2]=p;c[Da+4>>2]=Ca;p=Bb(54462,Da)|0;if(!p){s=0;p=0;break}else r=r+1|0}}while(0);r=c[J>>2]|0;c[Fa>>2]=s;c[Fa+4>>2]=r;c[Fa+8>>2]=t;r=Bb(54469,Fa)|0;if(!(p&(r|0)!=0))if(!r)p=7;else{p=7;Ea=341}else{p=td(c[N>>2]|0,r)|0;Ea=341}do if((Ea|0)==341)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);do if(s|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{Fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);c[Ha>>2]=p;t=0;s=0;r=y;p=O}else{o=0;p=O}}while(0);do if(u|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Fa=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}while(0);do if(p|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{Fa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}while(0);do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Fa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);do if(s|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{Fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);do if(t|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{Fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}while(0);if((v|0)>0){p=0;do{q=c[m+(p<<2)>>2]|0;do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Fa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);p=p+1|0}while((p|0)!=(v|0))}}else{c[Ha>>2]=7;o=0;m=0}do if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Fa=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Fa=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);if(!(c[Ha>>2]|0)){c[k>>2]=o;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}if(o|0){Dq(o)|0;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}m=c[Ga>>2]|0;if(!m){Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}Wa[c[(c[m>>2]|0)+8>>2]&127](m)|0;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}function Yq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+32|0;w=x+16|0;s=x+8|0;v=x;c[v>>2]=d;v=Bb(31408,v)|0;if(!v){w=7;Ra=x;return w|0}u=v+(Eu(v)|0)|0;l=v;a:while(1){k=a[l>>0]|0;h=k<<24>>24;switch(h|0){case 0:{d=0;break a}case 96:case 34:case 39:{t=5;break a}case 91:{t=4;break a}default:{}}if(h&128|0){t=13;break}d=l+1|0;if(!(a[26208+h>>0]|0))l=d;else{t=15;break}}b:do if((t|0)==4){d=l;while(1){h=d+1|0;t=a[h>>0]|0;i=t<<24>>24==0;if(i^t<<24>>24!=93)d=h;else break}d=i?h:d+2|0;t=19}else if((t|0)==5){d=l+1|0;h=a[d>>0]|0;if(!(h<<24>>24))t=19;else{j=l;while(1){if(h<<24>>24==k<<24>>24){d=j+2|0;if((a[d>>0]|0)!=k<<24>>24){t=19;break b}}i=d+1|0;h=a[i>>0]|0;if(!(h<<24>>24)){d=i;t=19;break}else{j=d;d=i}}}}else if((t|0)==13){d=l+1|0;t=15}while(0);c:do if((t|0)==15)while(1){t=a[d>>0]|0;if((t&128|0)==0?(a[26208+t>>0]|0)==0:0){t=19;break c}d=d+1|0}while(0);if((t|0)==19){h=d-l|0;d=l}m=(d|0)==0?v:d;a[m+h>>0]=0;d=a[m>>0]|0;switch(d<<24>>24){case 34:case 39:case 91:case 96:{l=d<<24>>24==91?93:d;i=a[m+1>>0]|0;d:do if(!(i<<24>>24))d=0;else{j=1;d=0;do{k=j+1|0;if(i<<24>>24==l<<24>>24){if((a[m+k>>0]|0)!=l<<24>>24)break d;a[m+d>>0]=l;j=j+2|0}else{a[m+d>>0]=i;j=k}d=d+1|0;i=a[m+j>>0]|0}while(i<<24>>24!=0)}while(0);a[m+d>>0]=0;break}default:{}}i=(Eu(m)|0)+1|0;e:do if((((b|0)!=0?(n=b+16|0,(c[n>>2]|0)!=0):0)?(o=Xa[(a[b>>0]<<24>>24==1?154:155)&255](m,i)|0,o=(c[b+12>>2]|0)+-1&o,p=c[n>>2]|0,(p|0)!=0):0)?(q=c[p+(o<<3)>>2]|0,r=(a[b>>0]|0)==1?79:80,g=c[p+(o<<3)+4>>2]|0,(q|0)!=0&(g|0)!=0):0){d=q;while(1){d=d+-1|0;if(!(Za[r&127](c[g+12>>2]|0,c[g+16>>2]|0,m,i)|0))break;g=c[g>>2]|0;if(!((d|0)!=0&(g|0)!=0)){t=37;break e}}n=c[g+8>>2]|0;if(n){g=m+(h+1)|0;f:do if(g>>>0<u>>>0){b=0;l=0;d=0;while(1){g:while(1){k=a[g>>0]|0;i=k<<24>>24;switch(i|0){case 0:{h=b;g=l;break f}case 96:case 34:case 39:{t=43;break g}case 91:{t=42;break g}default:{}}if(i&128|0){t=51;break}h=g+1|0;if(!(a[26208+i>>0]|0))g=h;else{t=53;break}}h:do if((t|0)==42){h=g;while(1){i=h+1|0;t=a[i>>0]|0;j=t<<24>>24==0;if(j^t<<24>>24!=93)h=i;else break}h=j?i:h+2|0;t=57}else if((t|0)==43){t=0;i=g+1|0;j=a[i>>0]|0;if(!(j<<24>>24))l=1;else{h=g;while(1){if(j<<24>>24==k<<24>>24){h=h+2|0;if((a[h>>0]|0)!=k<<24>>24){t=57;break h}}else h=i;i=h+1|0;j=a[i>>0]|0;if(!(j<<24>>24)){h=i;t=57;break}}}}else if((t|0)==51){h=g+1|0;t=53}while(0);i:do if((t|0)==53)while(1){t=a[h>>0]|0;if((t&128|0)==0?(a[26208+t>>0]|0)==0:0){t=57;break i}h=h+1|0}while(0);if((t|0)==57){t=0;if(!g){h=b;g=l;break f}else l=h-g|0}h=b;b=b+1|0;if(mb()|0)break;m=sb(d,b<<2,0)|0;if(!m)break;c[m+(h<<2)>>2]=g;a[g+l>>0]=0;d=a[g>>0]|0;switch(d<<24>>24){case 34:case 39:case 91:case 96:{k=d<<24>>24==91?93:d;h=a[g+1>>0]|0;j:do if(!(h<<24>>24))d=0;else{i=1;d=0;do{j=i+1|0;if(h<<24>>24==k<<24>>24){if((a[g+j>>0]|0)!=k<<24>>24)break j;a[g+d>>0]=k;i=i+2|0}else{a[g+d>>0]=h;i=j}d=d+1|0;h=a[g+i>>0]|0}while(h<<24>>24!=0)}while(0);a[g+d>>0]=0;break}default:{}}g=g+(l+1)|0;if(g>>>0>=u>>>0){t=77;break}else{l=m;d=m}}if((t|0)==77){h=b;g=m;d=m;break}if(!(c[7324]|0))ab[c[29344>>2]&127](v);else{w=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v)}if(!d){w=7;Ra=x;return w|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);w=7;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);w=7;Ra=x;return w|0}}else{h=0;g=0;d=0}while(0);g=Ya[c[n+4>>2]&127](h,g,e)|0;if(!g)c[c[e>>2]>>2]=n;else Wp(f,53851,w);if(d)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{w=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}else t=37}else t=37;while(0);if((t|0)==37){c[s>>2]=m;Wp(f,53600,s);g=1}if(!(c[7324]|0)){ab[c[29344>>2]&127](v);w=g;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);w=g;Ra=x;return w|0}return 0}function Zq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;g=i+16|0;f=i;if(c[a>>2]|0){Ra=i;return}c[f>>2]=e;f=Ab(d,f)|0;if(f){d=c[b>>2]|0;if(d){c[g>>2]=d;c[g+4>>2]=f;d=Bb(38967,g)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{g=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(!d)h=8}else d=f}else h=8;if((h|0)==8){c[a>>2]=7;d=0}qb(c[b>>2]|0);c[b>>2]=d;Ra=i;return}function _q(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=Ra;Ra=Ra+16|0;f=g;if(c[a>>2]|0){Ra=g;return}c[f>>2]=e;d=Ab(d,f)|0;if(!d){c[a>>2]=7;Ra=g;return}b=nd(b,d,0,0,0)|0;c[a>>2]=b;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);Ra=g;return}else{b=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);Ra=g;return}}function $q(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=b+8|0;if(a[f>>0]|0){d=(c[b>>2]|0)+216|0;if(!(c[d>>2]|0)){g=b+12|0;e=c[g>>2]|0;c[d>>2]=e;d=e;if(e|0){e=c[d>>2]|0;h=d+136|0;i=c[h+4>>2]|0;if((i|0)>0|(i|0)==0&(c[h>>2]|0)>>>0>0)hc(e,d);i=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((i|0)==3082|(a[e+81>>0]|0)!=0)og(e)}c[g>>2]=0}a[f>>0]=0}gc(c[b+12>>2]|0)|0;g=b+28|0;d=c[g>>2]|0;if(d|0)do{e=d;d=c[d+8>>2]|0;f=c[e+12>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);c[g>>2]=0;d=c[b+44>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+92>>2]|0;do if((d|0?(a[d>>0]=0,(a[d+1>>0]|0)==0):0)?(a[d+2>>0]|0)==0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);ar(c[b+16>>2]|0);d=b+4|0;e=d+92|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));return}function ar(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!a)return;while(1){b=c[a+12>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b)break;else a=b}else a=b}do{g=c[a+8>>2]|0;f=c[a+20>>2]|0;if(f|0){b=c[f>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);do if(c[f+24>>2]|0?(h=c[f+28>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{e=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);e=f+64|0;b=f;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));if((c[e>>2]|0)>0){b=0;do{d=f+72+(b*24|0)+20|0;br(c[d>>2]|0);c[d>>2]=0;b=b+1|0}while((b|0)<(c[e>>2]|0))}}b=c[a+40>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{f=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](a);else{f=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a)}a:do if(g)if((a|0)==(c[g+12>>2]|0)?(i=c[g+16>>2]|0,(i|0)!=0):0){a=i;while(1){b=c[a+12>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b)break a;else a=b}else a=b}}else a=g;else a=0;while(0)}while((a|0)!=0);return}function br(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!b)return;j=b+4|0;d=c[b>>2]|0;if((c[j>>2]|0)>0){g=0;do{f=c[d+(g<<2)>>2]|0;do if(f|0){do if((c[f+56>>2]|0)==0?(h=c[f+64>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{e=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);do if((a[f+5>>0]|0)==0?(i=c[f+40>>2]|0,i|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{e=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);d=c[f+52>>2]|0;do if(d|0){e=c[d+20>>2]|0;gc(c[d+16>>2]|0)|0;if(e|0){if(c[e+480>>2]|0){Xd(e,d);break}k=d;if((c[e+304>>2]|0)>>>0<=k>>>0?(c[e+308>>2]|0)>>>0>k>>>0:0){k=e+300|0;c[d>>2]=c[k>>2];c[k>>2]=d;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);g=g+1|0;d=c[b>>2]|0}while((g|0)<(c[j>>2]|0))}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+16|0;e=c[d>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{k=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[j>>2]=0;c[b>>2]=0;c[d>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}\nfunction kj(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0;Pa=Ra;Ra=Ra+400|0;Ia=Pa+200|0;Ha=Pa+192|0;Ca=Pa+176|0;ya=Pa+168|0;Aa=Pa+160|0;ra=Pa+152|0;qa=Pa+144|0;pa=Pa+136|0;oa=Pa+128|0;ja=Pa+120|0;ha=Pa+112|0;ia=Pa+104|0;fa=Pa+96|0;ea=Pa+88|0;ga=Pa+80|0;ba=Pa+72|0;$=Pa+64|0;_=Pa+56|0;Z=Pa+48|0;aa=Pa+32|0;D=Pa+24|0;C=Pa+16|0;o=Pa+8|0;n=Pa;Da=Pa+360|0;Ea=Pa+308|0;Ga=Pa+296|0;La=Pa+256|0;Ma=Pa+208|0;Na=c[f>>2]|0;Oa=f+8|0;j=c[Oa>>2]|0;a:do if(!j){if((c[f+116>>2]|0)==0?(b[Na+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[Na+272>>2]|0)if(!(a[Na+81>>0]|0))Fa=15;else{Ja=0;break a}else{do if((e[Na+276>>1]|0)>=224){j=Na+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ka=Na+284|0;c[Ka>>2]=(c[Ka>>2]|0)+1;break b}j=Na+296|0;k=c[j>>2]|0;if(!k){j=Na+292|0;break}else{c[j>>2]=c[k>>2];Ka=Na+284|0;c[Ka>>2]=(c[Ka>>2]|0)+1;break b}}else j=Na+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=15}while(0);if((Fa|0)==15)k=_d(Na,224,0)|0;if(!k)Ja=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=Na;j=Na+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;Ja=k}}else Ja=j;while(0);if(!h){Oa=1;Ra=Pa;return Oa|0}xa=Na+81|0;if(a[xa>>0]|0){Oa=1;Ra=Pa;return Oa|0}Ka=f+36|0;if(c[Ka>>2]|0){Oa=1;Ra=Pa;return Oa|0}j=c[f>>2]|0;do if(((a[j+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(m=c[j+312>>2]|0,m|0):0){j=$a[m&127](c[j+316>>2]|0,21,0,0,0,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,n);c[f+12>>2]=23;Oa=1;Ra=Pa;return Oa|0}if((j|2|0)==2){if(!j)break;else j=1;Ra=Pa;return j|0}else{cd(f,39231,o);c[f+12>>2]=1;Oa=1;Ra=Pa;return Oa|0}}while(0);T=Ma;U=T+48|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));if((d[i>>0]|0)<9){j=h+48|0;k=c[j>>2]|0;if(k|0)ri(Na,k);c[j>>2]=0;Ba=h+8|0;c[Ba>>2]=c[Ba>>2]&-2;Kk(f,h,0)}else Kk(f,h,0);c:do if((c[Ka>>2]|0)==0?(a[xa>>0]|0)==0:0){if(((a[i>>0]|0)==9?(A=c[Oa>>2]|0,B=c[f>>2]|0,(a[f+199>>0]|0)==0):0)?(p=f+16|0,(a[p>>0]|0)==0):0){k=h;while(1){j=c[k+52>>2]|0;if(!j)break;else k=j}y=c[k+32>>2]|0;z=c[k>>2]|0;a[p>>0]=1;x=c[B+32>>2]|0;w=(x&4|0)==0&0==0;x=(x&68|0)==0&0==0;Wi(A,c[z>>2]|0);j=c[z>>2]|0;if((j|0)>0){n=A+116|0;o=B+272|0;p=B+276|0;q=B+81|0;r=B+288|0;s=B+300|0;t=B+296|0;u=B+284|0;v=B+292|0;m=0;do{k=c[z+4+(m*20|0)>>2]|0;j=c[z+4+(m*20|0)+4>>2]|0;d:do if(j){if(!(a[(c[A>>2]|0)+81>>0]|0))yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,-1)|0}else{do if(!x){if((a[k>>0]|0)!=-94)break;j=b[k+32>>1]|0;k=c[k+44>>2]|0;if(j<<16>>16<0)j=b[k+40>>1]|0;else j=j<<16>>16;if((j|0)<0)j=38132;else j=c[(c[k+4>>2]|0)+(j<<4)>>2]|0;if(w){if(a[(c[A>>2]|0)+81>>0]|0)break d;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,-1)|0;break d}else{c[C>>2]=c[k>>2];c[C+4>>2]=j;j=dd(B,40358,C)|0;if(a[(c[A>>2]|0)+81>>0]|0)break d;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,116)|0;break d}}while(0);k=c[z+4+(m*20|0)+8>>2]|0;e:do if(!k){c[D>>2]=m+1;j=dd(B,41025,D)|0}else{l=(Eu(k)|0)+1|0;f:do if(c[o>>2]|0)if(!(a[q>>0]|0))Fa=69;else{j=0;break e}else{do if(0<0|(0==0?(e[p>>1]|0)>>>0<l>>>0:0))j=r;else{j=c[s>>2]|0;if(j|0){c[s>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break f}j=c[t>>2]|0;if(!j){j=v;break}c[t>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break f}while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=69}while(0);if((Fa|0)==69){Fa=0;j=_d(B,l,0)|0}if(!j){j=0;break}ew(j|0,k|0,l|0)|0}while(0);if(a[(c[A>>2]|0)+81>>0]|0)break;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,116)|0}while(0);m=m+1|0;j=c[z>>2]|0}while((m|0)<(j|0))}n=c[Oa>>2]|0;c[Da+4>>2]=y;c[Da>>2]=f;c[Da+12>>2]=0;if((j|0)>0){l=n+116|0;m=n+144|0;k=0;do{if(!(a[(c[n>>2]|0)+81>>0]|0)){j=Vk(Da,c[z+4+(k*20|0)>>2]|0)|0;yc((c[l>>2]|0)+((k+(e[m>>1]|0)|0)*40|0)|0,j,-1,1,-1)|0;j=c[z>>2]|0}k=k+1|0}while((k|0)<(j|0))}}wa=h+68|0;ca=h+52|0;if(c[wa>>2]|0?(c[ca>>2]|0)==0:0){j=c[Oa>>2]|0;g:do if(!j){l=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[l+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=97;else{A=0;break g}else{do if((e[l+276>>1]|0)>=224){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ba=l+284|0;c[Ba>>2]=(c[Ba>>2]|0)+1;break h}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];Ba=l+284|0;c[Ba>>2]=(c[Ba>>2]|0)+1;break h}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=97}while(0);if((Fa|0)==97)k=_d(l,224,0)|0;if(!k)A=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=l;j=l+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;A=k}}else A=j;while(0);B=c[f>>2]|0;z=h+32|0;u=c[z>>2]|0;v=c[h+36>>2]|0;w=c[h+40>>2]|0;x=c[h+44>>2]|0;o=c[wa>>2]|0;p=o+8|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;j=gk(B,c[p>>2]|0,0)|0;q=o+12|0;m=c[q>>2]|0;if(m){if(!j)n=0;else n=c[j>>2]|0;if((c[m>>2]|0)>0){l=0;do{k=c[m+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+n|0)*20|0)+12>>0]=a[m+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[m>>2]|0));t=j}else t=j}else t=j;i:do if((t|0?(G=h+48|0,F=c[G>>2]|0,F|0):0)?(E=c[t>>2]|0,(E|0)==(c[F>>2]|0)):0){if((E|0)>0){j=0;do{if((a[t+4+(j*20|0)+12>>0]|0)!=(a[F+4+(j*20|0)+12>>0]|0))break i;if(bk(0,c[t+4+(j*20|0)>>2]|0,c[F+4+(j*20|0)>>2]|0,-1)|0)break i;j=j+1|0}while((j|0)<(c[t>>2]|0));j=c[G>>2]|0;if(j|0)Fa=121}else{j=F;Fa=121}if((Fa|0)==121)ri(B,j);c[G>>2]=0}while(0);j=f+40|0;m=c[j>>2]|0;y=o+44|0;c[y>>2]=m;c[j>>2]=m+4;j=c[h>>2]|0;m=Da+12|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[Ea+12>>2]=0;m=Ea+8|0;c[m>>2]=0;c[Ea>>2]=o;c[Ea+4>>2]=u;c[Da>>2]=f;c[Da+4>>2]=129;c[Da+8>>2]=130;c[Da+24>>2]=Ea;if((j|0)!=0?(H=c[j>>2]|0,(H|0)>0):0){l=H;j=j+4|0;while(1){k=c[j>>2]|0;if(k|0?_j(Da,k)|0:0)break;if((l|0)>1){l=l+-1|0;j=j+20|0}else break}k=c[m>>2]|0}else k=0;j=c[h+48>>2]|0;m=Da+12|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[Ea+12>>2]=0;m=Ea+8|0;c[m>>2]=k;c[Ea>>2]=o;c[Ea+4>>2]=u;c[Da>>2]=f;c[Da+4>>2]=129;c[Da+8>>2]=130;c[Da+24>>2]=Ea;if((j|0)!=0?(I=c[j>>2]|0,(I|0)>0):0){l=I;j=j+4|0;while(1){k=c[j>>2]|0;if(k|0?_j(Da,k)|0:0)break;if((l|0)>1){l=l+-1|0;j=j+20|0}else break}k=c[m>>2]|0}j=k;l=(k|0)==0;if(l)k=0;else k=c[j>>2]|0;c[o+72>>2]=k;n=c[p>>2]|0;do if(n){if(l)m=0;else m=c[j>>2]|0;if((c[n>>2]|0)<=0)break;l=0;do{k=c[n+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+m|0)*20|0)+12>>0]=a[n+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);m=c[q>>2]|0;do if(m){if(!j)n=0;else n=c[j>>2]|0;if((c[m>>2]|0)<=0){Fa=159;break}l=0;do{k=c[m+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;k=(j|0)==0;if(!k)a[j+4+((l+n|0)*20|0)+12>>0]=a[m+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[m>>2]|0));if(o){l=j;Fa=161}}else Fa=159;while(0);if((Fa|0)==159){l=j;k=(j|0)==0;Fa=161}if((Fa|0)==161){p=f+44|0;q=A+108|0;r=A+112|0;s=A+104|0;j=l;do{if(k)l=0;else l=c[j>>2]|0;c[o+76>>2]=l;n=c[(c[o+68>>2]|0)+20>>2]|0;do if(n){if(k)m=0;else m=c[j>>2]|0;if((c[n>>2]|0)<=0)break;l=0;do{k=c[n+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+m|0)*20|0)+12>>0]=a[n+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);k=c[o+36>>2]|0;if(k){Ba=dk(B,k,0,0)|0;j=nj(c[f>>2]|0,j,Ba)|0}l=c[p>>2]|0;k=l+1|0;c[o+48>>2]=k;l=l+2|0;c[p>>2]=l;c[o+52>>2]=l;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Ba=c[s>>2]|0;a[Ba+(l*20|0)>>0]=73;b[Ba+(l*20|0)+2>>1]=0;c[Ba+(l*20|0)+4>>2]=0;c[Ba+(l*20|0)+8>>2]=k;c[Ba+(l*20|0)+12>>2]=0;c[Ba+(l*20|0)+16>>2]=0;a[Ba+(l*20|0)+1>>0]=0}else Di(A,73,0,k,0)|0;o=c[o+32>>2]|0;k=(j|0)==0}while((o|0)!=0)}if(k){l=oj(B,147,17136,0)|0;l=nj(c[f>>2]|0,0,l)|0}else l=j;j=mj(f,l,u,v,w,x,t,0,0)|0;k=pj(f,0,0,0)|0;c[z>>2]=k;do if(k){c[k+28>>2]=j;Qk(f,k);if(!(Rk(f,(c[z>>2]|0)+8|0)|0)){Ba=j+8|0;c[Ba>>2]=c[Ba>>2]|64;Ba=h+8|0;c[Ba>>2]=c[Ba>>2]&-9;Kk(f,j,0);j=0}else j=7;m=c[y>>2]|0;k=c[l>>2]|0;n=A+108|0;l=c[n>>2]|0;o=A+112|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;Ba=c[A+104>>2]|0;a[Ba+(l*20|0)>>0]=113;b[Ba+(l*20|0)+2>>1]=0;c[Ba+(l*20|0)+4>>2]=m;c[Ba+(l*20|0)+8>>2]=k;c[Ba+(l*20|0)+12>>2]=0;c[Ba+(l*20|0)+16>>2]=0;a[Ba+(l*20|0)+1>>0]=0}else Di(A,113,m,k,0)|0;k=c[y>>2]|0;l=k+1|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0}else Di(A,111,l,k,0)|0;k=c[y>>2]|0;l=k+2|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0}else Di(A,111,l,k,0)|0;k=c[y>>2]|0;l=k+3|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0;break}else{Di(A,111,l,k,0)|0;break}}else{if(!j){j=0;break}pi(B,j,1);j=0}while(0);if(!((j|0)==0&(a[B+81>>0]|0)==0)){m=1;break}}va=h+32|0;l=c[va>>2]|0;za=h+8|0;da=(c[za>>2]|0)>>>3&1;T=La+4|0;U=T+36|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));S=h+48|0;c[La>>2]=c[S>>2];j=c[ca>>2]|0;j:do if(!j){sa=h+36|0;ua=Na+76|0;V=f+240|0;K=h+60|0;M=(da|0)!=0;W=f+200|0;N=h+4|0;X=f+12|0;O=Da+4|0;P=Da+8|0;Q=Da+12|0;R=Da+16|0;Ba=f+116|0;k=0;ta=l;k:while(1){j=c[ta>>2]|0;if((k|0)>=(j|0))break;m=c[ta+8+(k*72|0)+20>>2]|0;n=c[ta+8+(k*72|0)+16>>2]|0;j=ta+8+(k*72|0)+36|0;if((a[j>>0]&8?(Y=ta+8+(k*72|0)+40|0,ll(c[sa>>2]|0,c[Y>>2]|0)|0):0)?(b[ua>>1]&8192)==0:0){a[j>>0]=a[j>>0]&-41;ml(c[sa>>2]|0,c[Y>>2]|0)}l:do if(m){j=b[n+42>>1]|0;l=c[c[m>>2]>>2]|0;if((l|0)!=(j<<16>>16|0)){Fa=209;break k}if(!(c[m+8>>2]&8)){do if((k|0)==0&(c[m+48>>2]|0)!=0){if(!(c[za>>2]&262144))break;if((c[ta>>2]|0)==1){j=ta;k=0;break l}if(a[ta+116>>0]&10){j=ta;k=0;break l}}while(0);s=c[V>>2]|0;I=c[f>>2]|0;m:do if(!(b[I+76>>1]&1)){t=c[va>>2]|0;J=c[t+8+(k*72|0)+40>>2]|0;u=t+8+(k*72|0)+20|0;m=c[u>>2]|0;if(c[wa>>2]|0)break;if(c[m+68>>2]|0)break;o=c[m+32>>2]|0;j=c[m+60>>2]|0;n=(j|0)==0;if(!n){if(c[K>>2]|0)break;if(c[j+16>>2]|0)break;j=c[za>>2]|0;if(j&256)break}else j=c[za>>2]|0;l=c[o>>2]|0;if(!l)break;p=c[m+8>>2]|0;if(p&1|0)break;if(!n?M|(c[t>>2]|0)>1:0)break;r=c[S>>2]|0;q=(r|0)==0;if(!q?c[m+48>>2]|0:0)break;if(M?c[m+48>>2]|0:0)break;if(n){if(p&8192|0)break}else if(!((p&8192|j&1|0)==0&(c[sa>>2]|0)==0))break;H=t+8+(k*72|0)+36|0;if(a[H>>0]&32){if(M|(l|0)>1)break;if(!(c[(c[o+24>>2]|0)+56>>2]|0))G=1;else break}else G=0;n=m+52|0;l=c[n>>2]|0;do if(l|0){if(!((j&1|0)==0&((M|(c[m+48>>2]|0)!=0)^1)))break m;if(!((c[t>>2]|0)==1&(p&9|0)==0))break m;j=l;while(1){l=(j|0)==0;if(!l?(a[m+4>>0]|0)!=-128:0)break m;if((c[c[m+32>>2]>>2]|0)<1)break m;if(l)break;if(c[j+8>>2]&9|0)break m;m=j;j=c[j+52>>2]|0}if(q)break;l=c[r>>2]|0;if((l|0)<=0)break;j=0;do{if(!(b[r+4+(j*20|0)+16>>1]|0))break m;j=j+1|0}while((j|0)<(l|0))}while(0);q=t+8+(k*72|0)+8|0;j=c[q>>2]|0;c[V>>2]=j;do if(!(a[I+165>>0]|0)){if(a[W>>0]|0)break;l=c[I+312>>2]|0;if(!l)break;j=$a[l&127](c[I+316>>2]|0,21,0,0,0,j)|0;if((j|0)==1){cd(f,39216,Z);c[X>>2]=23;break}if((j|2|0)==2)break;cd(f,39231,_);c[X>>2]=1}while(0);c[V>>2]=s;j=c[n>>2]|0;n:do if(!j)Fa=267;else{p=I+81|0;o=c[S>>2]|0;n=c[K>>2]|0;m=c[ca>>2]|0;while(1){c[S>>2]=0;c[va>>2]=0;c[ca>>2]=0;c[K>>2]=0;l=fk(I,h,0)|0;c[K>>2]=n;c[S>>2]=o;c[va>>2]=t;a[N>>0]=-128;if(!l)l=m;else{c[l+52>>2]=m;if(m|0)c[m+56>>2]=l;c[l+56>>2]=h}c[ca>>2]=l;if(a[p>>0]|0)break n;j=c[j+52>>2]|0;if(!j){Fa=267;break}else m=l}}while(0);do if((Fa|0)==267){Fa=0;F=c[u>>2]|0;n=t+8+(k*72|0)+4|0;j=c[n>>2]|0;o:do if(j|0){if(c[I+480>>2]|0){Xd(I,j);break}l=j;do if((c[I+304>>2]|0)>>>0<=l>>>0){if((c[I+308>>2]|0)>>>0<=l>>>0)break;ta=I+300|0;c[j>>2]=c[ta>>2];c[ta>>2]=j;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{ta=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[q>>2]|0;p:do if(j|0){if(c[I+480>>2]|0){Xd(I,j);break}l=j;do if((c[I+304>>2]|0)>>>0<=l>>>0){if((c[I+308>>2]|0)>>>0<=l>>>0)break;ta=I+300|0;c[j>>2]=c[ta>>2];c[ta>>2]=j;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{ta=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=t+8+(k*72|0)+12|0;l=c[j>>2]|0;q:do if(l|0){if(c[I+480>>2]|0){Xd(I,l);break}m=l;do if((c[I+304>>2]|0)>>>0<=m>>>0){if((c[I+308>>2]|0)>>>0<=m>>>0)break;ta=I+300|0;c[l>>2]=c[ta>>2];c[ta>>2]=l;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[n>>2]=0;c[q>>2]=0;c[j>>2]=0;c[u>>2]=0;j=t+8+(k*72|0)+16|0;l=c[j>>2]|0;if(l|0){m=l+32|0;n=c[m>>2]|0;if((n|0)==1){ta=c[Ba>>2]|0;ta=((ta|0)==0?f:ta)+256|0;c[l+76>>2]=c[ta>>2];c[ta>>2]=l}else c[m>>2]=n+-1;c[j>>2]=0}y=k+1|0;z=I+480|0;A=I+304|0;B=I+308|0;C=I+300|0;D=(G|0)==0;E=I+81|0;w=h;o=-1;x=F;while(1){t=c[x+32>>2]|0;u=c[t>>2]|0;s=w+32|0;j=c[s>>2]|0;if(!j){j=pj(f,0,0,0)|0;if(!j)break;c[s>>2]=j;v=0}else v=a[H>>0]|0;if((u|0)>1){r=u+-1|0;l=c[j>>2]|0;m=l+r|0;if(m>>>0>(c[j+4>>2]|0)>>>0){l=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;l=Sv(l|0,L()|0,r|0,((r|0)<0)<<31>>31|0)|0;n=L()|0;if((m|0)>199){Fa=307;break}p=c[f>>2]|0;m=(n|0)<0|(n|0)==0&l>>>0<200;q=m?l:200;l=Yv(q|0,(m?n:0)|0,72,0)|0;l=Sv(l|0,L()|0,8,0)|0;m=L()|0;n=j;do if((c[p+304>>2]|0)>>>0<=n>>>0){if((c[p+308>>2]|0)>>>0<=n>>>0){Fa=311;break}if(m>>>0>0|((m|0)==0?l>>>0>(e[p+276>>1]|0)>>>0:0))Fa=311}else Fa=311;while(0);if((Fa|0)==311){Fa=0;j=Zd(p,j,l,m)|0;if(!j)break}c[j+4>>2]=q;n=j;m=j;j=c[j>>2]|0}else{n=j;m=j;j=l}if((j|0)>(y|0)){do{j=j+-1|0;T=n+8+((j+r|0)*72|0)|0;l=n+8+(j*72|0)|0;U=T+72|0;do{c[T>>2]=c[l>>2];T=T+4|0;l=l+4|0}while((T|0)<(U|0))}while((j|0)>(y|0));j=c[m>>2]|0}c[m>>2]=j+r;gw(n+8+(y*72|0)|0,0,r*72|0)|0;l=u+k|0;j=y;do{c[n+8+(j*72|0)+40>>2]=-1;j=j+1|0}while((j|0)<(l|0));c[s>>2]=n;j=n}if((u|0)>0){r=0;while(1){p=r+k|0;q=j+8+(p*72|0)|0;p=c[j+8+(p*72|0)+48>>2]|0;r:do if(p|0){o=p+4|0;l=c[p>>2]|0;if((c[o>>2]|0)>0){n=0;do{l=c[l+(n<<3)>>2]|0;s:do if(l|0){if(c[z>>2]|0){Xd(I,l);break}m=l;do if((c[A>>2]|0)>>>0<=m>>>0){if((c[B>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[C>>2];c[C>>2]=l;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);n=n+1|0;l=c[p>>2]|0}while((n|0)<(c[o>>2]|0))}t:do if(l|0){if(c[z>>2]|0){Xd(I,l);break}m=l;do if((c[A>>2]|0)>>>0<=m>>>0){if((c[B>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[C>>2];c[C>>2]=l;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(c[z>>2]|0){Xd(I,p);break}l=p;do if((c[A>>2]|0)>>>0<=l>>>0){if((c[B>>2]|0)>>>0<=l>>>0)break;c[p>>2]=c[C>>2];c[C>>2]=p;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ta=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);m=t+8+(r*72|0)|0;T=q;l=m;U=T+72|0;do{c[T>>2]=c[l>>2];T=T+4|0;l=l+4|0}while((T|0)<(U|0));l=c[t+8+(r*72|0)+40>>2]|0;T=m;U=T+72|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));r=r+1|0;if((r|0)==(u|0)){o=l;break}}}a[j+8+(k*72|0)+36>>0]=v;l=x+48|0;m=c[l>>2]|0;if(m|0){n=c[m>>2]|0;if((n|0)>0){j=0;do{b[m+4+(j*20|0)+16>>1]=0;j=j+1|0}while((j|0)!=(n|0))}c[w+48>>2]=m;c[l>>2]=0}ta=x+36|0;j=c[ta>>2]|0;c[ta>>2]=0;if(!D)Wk(j,o);ta=w+36|0;U=Xk(I,j,c[ta>>2]|0)|0;c[ta>>2]=U;if(!(a[E>>0]|0)){c[Da>>2]=f;c[O>>2]=J;c[P>>2]=o;c[Q>>2]=G;c[R>>2]=c[x>>2];yl(Da,w,0)}j=w+8|0;c[j>>2]=c[j>>2]|c[x+8>>2]&1;j=x+60|0;l=c[j>>2]|0;if(l|0){c[w+60>>2]=l;c[j>>2]=0}w=c[w+52>>2]|0;if(!w)break;else x=c[x+52>>2]|0}if((Fa|0)==307){Fa=0;c[$>>2]=200;cd(f,43159,$)}if(!F)break;pi(I,F,1)}while(0);if(!(c[Ka>>2]|0))k=-1;else{m=1;break c}}while(0);j=c[va>>2]|0;if(a[xa>>0]|0){m=1;break c}if((d[i>>0]|0)<9)break;c[La>>2]=c[S>>2]}else j=ta}else j=ta;while(0);l=c[ca>>2]|0;if(!l){k=k+1|0;ta=j}else{w=l;break j}}if((Fa|0)==209){m=c[n>>2]|0;c[aa>>2]=j<<16>>16;c[aa+4>>2]=m;c[aa+8>>2]=l;cd(f,43040,aa);m=1;break c}if((j|0)>1)if((b[ua>>1]|0)>-1){c[Da>>2]=f;m=Da+4|0;n=Da+8|0;o=Da+12|0;p=Ea+4|0;q=Ea+8|0;r=Ea+12|0;s=Ea+16|0;t=Ea+24|0;u=Ea+20|0;do{c[m>>2]=0;c[n>>2]=0;c[o>>2]=0;Fl(Da,c[sa>>2]|0);u:do if(c[m>>2]|0){c[u>>2]=0;c[Ea>>2]=f;c[p>>2]=131;c[q>>2]=132;c[r>>2]=0;c[s>>2]=0;c[t>>2]=Da;j=c[sa>>2]|0;if(j|0)_j(Ea,j)|0;j=c[c[Da>>2]>>2]|0;k=c[o>>2]|0;if(!k)break;do if(j|0){if(c[j+480>>2]|0){Xd(j,k);break u}l=k;if((c[j+304>>2]|0)>>>0>l>>>0)break;if((c[j+308>>2]|0)>>>0<=l>>>0)break;Fa=j+300|0;c[k>>2]=c[Fa>>2];c[Fa>>2]=k;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Fa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0)}while((c[n>>2]|0)!=0);j=c[ta>>2]|0;Fa=668}else Fa=669;else Fa=668;if((Fa|0)==668?(j|0)>0:0)Fa=669;v:do if((Fa|0)==669){z=f+208|0;A=f+44|0;B=Ja+108|0;C=Ja+112|0;D=ta+116|0;E=Ja+104|0;F=Da+4|0;G=Da+16|0;H=Da+8|0;I=Da+12|0;J=Ja+12|0;K=ta+8|0;M=f+19|0;N=f+28|0;O=ta+36|0;P=ta+32|0;Q=ta+24|0;R=ta+45|0;S=ta+40|0;y=0;while(1){u=ta+8+(y*72|0)|0;ka=ta+8+(y*72|0)+56|0;do if(((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?(la=c[ta+8+(y*72|0)+8>>2]|0,ma=c[ta+8+(y*72|0)+4>>2]|0,na=c[f>>2]|0,(a[na+165>>0]|0)==0):0)?(a[W>>0]|0)==0:0){j=c[na+312>>2]|0;if(!j)break;j=$a[j&127](c[na+316>>2]|0,20,la,59952,ma,c[V>>2]|0)|0;if((j|0)==1){cd(f,39216,oa);c[X>>2]=23;break}if((j|2|0)==2)break;cd(f,39231,pa);c[X>>2]=1}while(0);s=ta+8+(y*72|0)+20|0;v=c[s>>2]|0;if(v|0){ka=nl(h)|0;c[z>>2]=(c[z>>2]|0)+ka;if(!(b[ua>>1]&4096))ol(f,v,c[sa>>2]|0,c[ta+8+(y*72|0)+40>>2]|0,(d[ta+8+(y*72|0)+36>>0]|0)>>>5&1)|0;x=c[V>>2]|0;t=ta+8+(y*72|0)+8|0;c[V>>2]=c[t>>2];l=(y|0)==0;do if(l){if((c[ta>>2]|0)!=1?(a[D>>0]&10)==0:0){Fa=693;break}l=c[B>>2]|0;j=l+1|0;k=(c[A>>2]|0)+1|0;c[A>>2]=k;c[O>>2]=k;if((c[C>>2]|0)>(l|0)){c[B>>2]=j;ka=c[E>>2]|0;a[ka+(l*20|0)>>0]=13;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=k;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=j;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(Ja,13,k,0,j)|0;c[P>>2]=j;j=c[O>>2]|0;a[Da>>0]=13;c[F>>2]=j;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[qa>>2]=c[v+20>>2];nk(f,1,43080,qa);kj(f,v,Da)|0;b[(c[Q>>2]|0)+44>>1]=b[v+6>>1]|0;a[R>>0]=a[R>>0]|16;c[S>>2]=c[H>>2];j=c[O>>2]|0;k=c[B>>2]|0;if((c[C>>2]|0)>(k|0)){c[B>>2]=k+1;ka=c[E>>2]|0;a[ka+(k*20|0)>>0]=67;b[ka+(k*20|0)+2>>1]=0;c[ka+(k*20|0)+4>>2]=j;c[ka+(k*20|0)+8>>2]=0;c[ka+(k*20|0)+12>>2]=0;c[ka+(k*20|0)+16>>2]=0;a[ka+(k*20|0)+1>>0]=0}else Di(Ja,67,j,0,0)|0;k=c[J>>2]|0;a[k+19>>0]=0;c[k+28>>2]=0;k=c[B>>2]|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[E>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else j=59308;c[j+8>>2]=k}else Fa=693;while(0);if((Fa|0)==693){Fa=0;k=(c[A>>2]|0)+1|0;c[A>>2]=k;w=ta+8+(y*72|0)+28|0;c[w>>2]=k;j=c[B>>2]|0;if((c[C>>2]|0)>(j|0)){ka=j+1|0;c[B>>2]=ka;ja=c[E>>2]|0;a[ja+(j*20|0)>>0]=70;b[ja+(j*20|0)+2>>1]=0;c[ja+(j*20|0)+4>>2]=0;c[ja+(j*20|0)+8>>2]=k;c[ja+(j*20|0)+12>>2]=0;c[ja+(j*20|0)+16>>2]=0;a[ja+(j*20|0)+1>>0]=0;k=ka}else{k=Di(Ja,70,0,k,0)|0;j=k;k=k+1|0}c[ta+8+(y*72|0)+24>>2]=k;do if(!(a[ta+8+(y*72|0)+37>>0]&8)){k=c[B>>2]|0;if((c[C>>2]|0)>(k|0)){c[B>>2]=k+1;T=c[E>>2]|0;a[T+(k*20|0)>>0]=17;T=T+(k*20|0)+1|0;U=T+19|0;do{a[T>>0]=0;T=T+1|0}while((T|0)<(U|0));r=k;break}else{r=Di(Ja,17,0,0,0)|0;break}}else r=0;while(0);w:do if(l)Fa=724;else{p=ta+8+(y*72|0)+4|0;q=K;x:while(1){o=c[q+20>>2]|0;y:do if(o|0){if(a[q+37>>0]&16)break;l=c[q+8>>2]|0;if(!l)break;m=c[q+4>>2]|0;n=c[p>>2]|0;do if(!m)k=((n|0)!=0)<<31>>31;else{if(!n)break y;ka=a[m>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(ka<<24>>24==0|(k|0)!=0)break;do{m=m+1|0;n=n+1|0;ka=a[m>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(k|0)!=0))}while(0);if(k|0)break;m=c[t>>2]|0;if(!m)break;ka=a[l>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(k|0)!=0))do{l=l+1|0;m=m+1|0;ka=a[l>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(k|0)!=0));if(k|0)break;k=c[s>>2]|0;if((c[k+20>>2]|0)!=(c[o+20>>2]|0))break;if(!(bk(0,c[k+36>>2]|0,c[o+36>>2]|0,-1)|0))break x}while(0);k=q+72|0;if(k>>>0<u>>>0)q=k;else{Fa=724;break w}}k=c[ta+8+(y*72|0)+40>>2]|0;l=c[q+40>>2]|0;m=c[B>>2]|0;if((c[C>>2]|0)>(m|0)){c[B>>2]=m+1;ka=c[E>>2]|0;a[ka+(m*20|0)>>0]=111;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=k;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(Ja,111,k,l,0)|0;k=b[(c[q+20>>2]|0)+6>>1]|0;b[v+6>>1]=k}while(0);if((Fa|0)==724){Fa=0;k=c[ta+8+(y*72|0)+40>>2]|0;a[Da>>0]=12;c[F>>2]=k;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[ra>>2]=c[v+20>>2];nk(f,1,43094,ra);kj(f,v,Da)|0;k=b[v+6>>1]|0}b[(c[ta+8+(y*72|0)+16>>2]|0)+44>>1]=k;l=c[B>>2]|0;if(r|0){if(!(a[(c[Ja>>2]|0)+81>>0]|0))k=(c[E>>2]|0)+(((r|0)<0?l+-1|0:r)*20|0)|0;else k=59308;c[k+8>>2]=l}k=c[w>>2]|0;if((c[C>>2]|0)>(l|0)){c[B>>2]=l+1;ka=c[E>>2]|0;a[ka+(l*20|0)>>0]=66;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=k;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;k=l}else k=Di(Ja,66,k,0,0)|0;if((j|0)<0)j=(c[B>>2]|0)+-1|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[E>>2]|0)+(j*20|0)|0;else j=59308;c[j+4>>2]=k}a[M>>0]=0;c[N>>2]=0;if(a[xa>>0]|0)break;ka=nl(h)|0;c[z>>2]=(c[z>>2]|0)-ka;c[V>>2]=x}y=y+1|0;if((y|0)>=(c[ta>>2]|0))break v}m=1;break c}while(0);$=c[h>>2]|0;D=c[sa>>2]|0;t=h+40|0;m=c[t>>2]|0;u=h+44|0;X=c[u>>2]|0;j=c[za>>2]|0;a[Ga>>0]=j&1;z:do if((j&9|0)==1){n=c[La>>2]|0;k=(n|0)==0;l=($|0)==0;do if(!(l&k)){if(l|k){U=m;break z}k=c[n>>2]|0;if((k|0)!=(c[$>>2]|0)){U=m;break z}if((k|0)<=0)break;j=0;do{if((a[n+4+(j*20|0)+12>>0]|0)!=(a[$+4+(j*20|0)+12>>0]|0)){U=m;break z}if(bk(0,c[n+4+(j*20|0)>>2]|0,c[$+4+(j*20|0)>>2]|0,-1)|0){U=m;break z}j=j+1|0}while((j|0)<(c[n>>2]|0));j=c[za>>2]|0}while(0);c[za>>2]=j&-2;U=gk(Na,$,0)|0;c[t>>2]=U}else U=m;while(0);q=c[La>>2]|0;A:do if(q){o=c[f>>2]|0;r=c[q>>2]|0;m=(c[$>>2]|0)+1+r|0;n=m*5|0;l=n+20|0;p=o+272|0;B:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=763;else{n=0;o=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=764;break B}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=764;break B}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=763}while(0);if((Fa|0)==763){k=_d(o,l,0)|0;Fa=764}do if((Fa|0)==764){do if(!k){j=o+81|0;if(a[j>>0]|0){n=0;p=1;break}if(a[o+82>>0]|0){n=0;p=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){n=0;p=1;break}c[j+12>>2]=7;n=0;p=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;n=k;p=0}while(0);if(!((r|0)>0&(k|0)!=0)){o=p;break}o=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[o>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0)){o=p;break}else l=l+20|0}}while(0);l=f+40|0;k=c[l>>2]|0;c[l>>2]=k+1;c[La+8>>2]=k;l=(c[c[La>>2]>>2]|0)+1+(c[$>>2]|0)|0;m=Ja+108|0;j=c[m>>2]|0;if((c[Ja+112>>2]|0)>(j|0)){c[m>>2]=j+1;ra=c[Ja+104>>2]|0;a[ra+(j*20|0)>>0]=113;b[ra+(j*20|0)+2>>1]=0;c[ra+(j*20|0)+4>>2]=k;c[ra+(j*20|0)+8>>2]=l;c[ra+(j*20|0)+12>>2]=0;c[ra+(j*20|0)+16>>2]=0;a[ra+(j*20|0)+1>>0]=0}else j=Di(Ja,113,k,l,0)|0;k=c[Ja>>2]|0;if(!(a[k+81>>0]|0)){if((j|0)<0)k=(c[m>>2]|0)+-1|0;else k=j;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,n,-9);break}if(o)break;c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9;break}if(o|(c[k+480>>2]|0)!=0)break;ra=(c[n>>2]|0)+-1|0;c[n>>2]=ra;if(ra|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break A}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;ra=k+300|0;c[n>>2]=c[ra>>2];c[ra>>2]=n;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ra=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ra;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else j=-1;while(0);c[La+20>>2]=j;do if((a[i>>0]|0)==12){j=c[i+4>>2]|0;k=c[$>>2]|0;l=Ja+108|0;m=c[l>>2]|0;if((c[Ja+112>>2]|0)>(m|0)){c[l>>2]=m+1;ra=c[Ja+104>>2]|0;a[ra+(m*20|0)>>0]=113;b[ra+(m*20|0)+2>>1]=0;c[ra+(m*20|0)+4>>2]=j;c[ra+(m*20|0)+8>>2]=k;c[ra+(m*20|0)+12>>2]=0;c[ra+(m*20|0)+16>>2]=0;a[ra+(m*20|0)+1>>0]=0;break}else{Di(Ja,113,j,k,0)|0;break}}while(0);_=f+56|0;aa=c[_>>2]|0;j=aa+-1|0;c[_>>2]=j;if(!(c[za>>2]&16384))b[h+6>>1]=320;pl(f,h,j);do if(!(c[h+12>>2]|0)){j=c[La+20>>2]|0;if((j|0)<=-1)break;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[Ja+104>>2]|0)+(j*20|0)|0;else j=59308;a[j>>0]=114;ra=La+32|0;a[ra>>0]=a[ra>>0]|1}while(0);do if(!(c[za>>2]&1))j=0;else{q=f+40|0;s=c[q>>2]|0;c[q>>2]=s+1;c[Ga+4>>2]=s;q=c[h>>2]|0;o=c[f>>2]|0;r=c[q>>2]|0;m=r+1|0;n=m*5|0;l=n+20|0;p=o+272|0;C:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=820;else{o=0;n=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=821;break C}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=821;break C}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=820}while(0);if((Fa|0)==820){k=_d(o,l,0)|0;Fa=821}do if((Fa|0)==821){do if(!k){j=o+81|0;if(a[j>>0]|0){o=0;n=1;break}if(a[o+82>>0]|0){o=0;n=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){o=0;n=1;break}c[j+12>>2]=7;o=0;n=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;o=k;n=0}while(0);if(!((r|0)>0&(k|0)!=0))break;p=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[p>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0))break;else l=l+20|0}}while(0);p=Ja+108|0;j=c[p>>2]|0;if((c[Ja+112>>2]|0)>(j|0)){c[p>>2]=j+1;ra=c[Ja+104>>2]|0;a[ra+(j*20|0)>>0]=113;b[ra+(j*20|0)+2>>1]=0;c[ra+(j*20|0)+4>>2]=s;c[ra+(j*20|0)+8>>2]=0;c[ra+(j*20|0)+12>>2]=0;c[ra+(j*20|0)+16>>2]=0;a[ra+(j*20|0)+1>>0]=0}else j=Di(Ja,113,s,0,0)|0;k=c[Ja>>2]|0;D:do if(a[k+81>>0]|0){if(n|(c[k+480>>2]|0)!=0)break;ra=(c[o>>2]|0)+-1|0;c[o>>2]=ra;if(ra|0)break;k=c[o+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,o);break D}l=o;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;ra=k+300|0;c[o>>2]=c[ra>>2];c[ra>>2]=o;break D}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ra=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ra;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else{if((j|0)<0)k=(c[p>>2]|0)+-1|0;else k=j;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,o,-9);break}if(n)break;c[l+(k*20|0)+16>>2]=o;a[m>>0]=-9}while(0);c[Ga+8>>2]=j;j=c[p>>2]|0;if((j|0)<=0){j=3;break}b[(c[Ja+104>>2]|0)+((j+-1|0)*20|0)+2>>1]=8;j=3}while(0);a[Ga+1>>0]=j;l=(U|0)==0;E:do if((da|0)==0&l){B=(((a[Ga>>0]|0)==0?0:256)|c[za>>2]&16384)&65535;q=c[wa>>2]|0;C=(q|0)!=0;do if(C){j=c[Oa>>2]|0;F:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);G:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=873;else{j=0;break F}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break G}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break G}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=873}while(0);if((Fa|0)==873)j=_d(l,224,0)|0;if(!j){j=0;break}T=j+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[Oa>>2]=j;Di(j,61,0,1,0)|0}while(0);k=c[q+8>>2]|0;do if(k){m=c[k>>2]|0;k=f+44|0;o=c[k>>2]|0;l=o+1|0;c[q+64>>2]=l;m=o+m|0;c[k>>2]=m;o=j+108|0;n=c[o>>2]|0;p=j+112|0;if((c[p>>2]|0)>(n|0)){c[o>>2]=n+1;A=c[j+104>>2]|0;a[A+(n*20|0)>>0]=73;b[A+(n*20|0)+2>>1]=0;c[A+(n*20|0)+4>>2]=0;c[A+(n*20|0)+8>>2]=l;c[A+(n*20|0)+12>>2]=m;c[A+(n*20|0)+16>>2]=0;a[A+(n*20|0)+1>>0]=0;A=k;break}else{Di(j,73,0,l,m)|0;A=k;break}}else{A=f+44|0;o=j+108|0;p=j+112|0}while(0);k=(c[A>>2]|0)+1|0;c[A>>2]=k;c[q+80>>2]=k;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=1;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,1,k,0)|0;if(a[q+20>>0]|0){n=c[A>>2]|0;m=n+1|0;c[q+84>>2]=m;n=n+2|0;c[A>>2]=n;k=q+88|0;c[k>>2]=n;n=f+40|0;l=c[n>>2]|0;c[n>>2]=l+1;n=q+56|0;c[n>>2]=l;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=1;c[Ca+(l*20|0)+8>>2]=m;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,1,m,0)|0;k=c[k>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=0;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,0,k,0)|0;m=c[n>>2]|0;k=c[q+44>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=111;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=m;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0;break}else{Di(j,111,m,k,0)|0;break}}x=f+40|0;y=q+44|0;z=j+104|0;w=q;do{v=w+40|0;k=c[v>>2]|0;do if(c[k+4>>2]&4096){if((a[w+17>>0]|0)==87){Fa=944;break}n=c[(c[w+68>>2]|0)+20>>2]|0;t=c[f>>2]|0;u=c[n>>2]|0;r=u+1|0;s=r*5|0;l=s+20|0;q=t+272|0;H:do if(c[q>>2]|0)if(!(a[t+81>>0]|0))Fa=909;else{r=0;m=0;n=1}else{do if(!(0<0|(0==0?(e[t+276>>1]|0)>>>0<l>>>0:0))){k=t+300|0;m=c[k>>2]|0;if(m|0){c[k>>2]=c[m>>2];Fa=t+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=910;break H}k=t+296|0;m=c[k>>2]|0;if(!m){k=t+292|0;break}else{c[k>>2]=c[m>>2];Fa=t+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=910;break H}}else k=t+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=909}while(0);if((Fa|0)==909){m=_d(t,l,0)|0;Fa=910}I:do if((Fa|0)==910){Fa=0;if(m|0){q=m+16|0;c[q>>2]=m+20+(r<<2);b[m+6>>1]=u;b[m+8>>1]=r;a[m+4>>0]=a[t+78>>0]|0;c[m+12>>2]=t;c[m>>2]=1;gw(m+24|0,0,s+-4|0)|0;if((u|0)<=0){r=m;n=0;break}l=n+4|0;n=0;while(1){k=Yi(f,c[l>>2]|0)|0;if(!k)k=c[(c[f>>2]|0)+8>>2]|0;c[m+20+(n<<2)>>2]=k;a[(c[q>>2]|0)+n>>0]=a[l+12>>0]|0;n=n+1|0;if((n|0)==(u|0)){r=m;n=0;break I}else l=l+20|0}}k=t+81|0;if(a[k>>0]|0){r=0;n=1;break}if(a[t+82>>0]|0){r=0;n=1;break}a[k>>0]=1;if((c[t+180>>2]|0)>0)c[t+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[t+236>>2]|0;if(!k){r=0;n=1;break}c[k+12>>2]=7;r=0;n=1}while(0);l=c[x>>2]|0;c[x>>2]=l+1;k=w+56|0;c[k>>2]=l;Ca=c[A>>2]|0;q=w+60|0;c[q>>2]=Ca+1;c[A>>2]=Ca+3;do if(m){if((a[(c[(c[v>>2]|0)+32>>2]|0)+1>>0]|0)!=105)break;a[c[m+16>>2]>>0]=1;l=c[k>>2]|0}while(0);k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ca=c[z>>2]|0;a[Ca+(k*20|0)>>0]=113;b[Ca+(k*20|0)+2>>1]=0;c[Ca+(k*20|0)+4>>2]=l;c[Ca+(k*20|0)+8>>2]=2;c[Ca+(k*20|0)+12>>2]=0;c[Ca+(k*20|0)+16>>2]=0;a[Ca+(k*20|0)+1>>0]=0}else Di(j,113,l,2,0)|0;k=c[j>>2]|0;J:do if(a[k+81>>0]|0){if(n|(c[k+480>>2]|0)!=0)break;Ca=(c[r>>2]|0)+-1|0;c[r>>2]=Ca;if(Ca|0)break;k=c[r+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,r);break J}l=r;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Ca=k+300|0;c[r>>2]=c[Ca>>2];c[Ca>>2]=r;break J}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Ca=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else{Aa=c[z>>2]|0;Ca=(c[o>>2]|0)+-1|0;a[Aa+(Ca*20|0)+1>>0]=-9;c[Aa+(Ca*20|0)+16>>2]=r}while(0);k=(c[q>>2]|0)+1|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[z>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=0;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}else Fa=944;while(0);do if((Fa|0)==944){Fa=0;k=c[k+32>>2]|0;if((k|0)==43457|(k|0)==43467){l=c[A>>2]|0;c[w+60>>2]=l+1;k=c[x>>2]|0;c[x>>2]=k+1;c[w+56>>2]=k;c[A>>2]=l+2;l=c[y>>2]|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;Ca=c[z>>2]|0;a[Ca+(m*20|0)>>0]=111;b[Ca+(m*20|0)+2>>1]=0;c[Ca+(m*20|0)+4>>2]=k;c[Ca+(m*20|0)+8>>2]=l;c[Ca+(m*20|0)+12>>2]=0;c[Ca+(m*20|0)+16>>2]=0;a[Ca+(m*20|0)+1>>0]=0;break}else{Di(j,111,k,l,0)|0;break}}if(!((k|0)==40587|(k|0)==40592))break;k=c[x>>2]|0;c[x>>2]=k+1;c[w+56>>2]=k;l=c[y>>2]|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;Ca=c[z>>2]|0;a[Ca+(m*20|0)>>0]=111;b[Ca+(m*20|0)+2>>1]=0;c[Ca+(m*20|0)+4>>2]=k;c[Ca+(m*20|0)+8>>2]=l;c[Ca+(m*20|0)+12>>2]=0;c[Ca+(m*20|0)+16>>2]=0;a[Ca+(m*20|0)+1>>0]=0;break}else{Di(j,111,k,l,0)|0;break}}while(0);w=c[w+32>>2]|0}while((w|0)!=0)}while(0);k=h+6|0;Q=ql(f,ta,D,c[La>>2]|0,c[h>>2]|0,B,b[k>>1]|0)|0;if(!Q){m=1;break c}j=b[Q+72>>1]|0;if(j<<16>>16<(b[k>>1]|0))b[k>>1]=j;do if(a[Ga>>0]|0){j=a[Q+51>>0]|0;if(!(j<<24>>24))break;a[Ga+1>>0]=j}while(0);k=c[La>>2]|0;do if(!k)Fa=965;else{l=a[Q+47>>0]|0;c[La+4>>2]=l;if(!(a[Q+52>>0]|0))j=Q+32|0;else j=Q+752+(((d[Q+46>>0]|0)+-1|0)*80|0)+16|0;c[La+28>>2]=c[j>>2];if((c[k>>2]|0)!=(l|0))break;c[La>>2]=0;Fa=965}while(0);do if((Fa|0)==965){j=c[La+20>>2]|0;if((j|0)<=-1)break;k=c[Ja>>2]|0;if(a[k+81>>0]|0)break;Ca=c[Ja+104>>2]|0;za=Ca+(j*20|0)+1|0;Aa=Ca+(j*20|0)+16|0;kg(k,a[za>>0]|0,c[Aa>>2]|0);a[za>>0]=0;c[Aa>>2]=0;a[Ca+(j*20|0)>>0]=-86}while(0);if(!C){rl(f,h,-1,La,Ga,i,c[Q+32>>2]|0,c[Q+36>>2]|0);sl(Q);j=0;Fa=1796;break}Z=c[_>>2]|0;m=Z+-1|0;W=Z+-2|0;X=Z+-3|0;c[_>>2]=X;w=f+44|0;Y=(c[w>>2]|0)+1|0;c[w>>2]=Y;V=c[wa>>2]|0;J=c[V+12>>2]|0;j=c[Oa>>2]|0;K:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);L:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=983;else{S=0;break K}else{do if((e[l+276>>1]|0)>=224){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break L}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break L}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=983}while(0);if((Fa|0)==983)k=_d(l,224,0)|0;if(!k){S=0;break}T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=l;j=l+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;S=k}else S=j;while(0);o=c[va>>2]|0;p=c[o+48>>2]|0;o=b[(c[o+24>>2]|0)+42>>1]|0;q=o<<16>>16;K=c[_>>2]|0;E=K+-1|0;c[_>>2]=E;z=Ea+20|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[z+24>>2]=0;c[z+28>>2]=0;c[Ea>>2]=f;z=Ea+4|0;c[z>>2]=V;c[Ea+8>>2]=S;c[Ea+12>>2]=Y;c[Ea+16>>2]=m;P=c[V+44>>2]|0;R=Ea+36|0;c[R>>2]=P;O=P+1|0;B=Ea+28|0;c[B>>2]=P+2;H=Ea+44|0;c[H>>2]=P+3;P=V+17|0;M:do switch(a[P>>0]|0){case 83:{if((a[V+16>>0]|0)==86)break M;k=c[V+24>>2]|0;j=c[f>>2]|0;c[Da>>2]=0;do if(k|0){Wj(j,k,a[j+78>>0]|0,67,Da)|0;n=c[Da>>2]|0;if(!n)break;l=n+8|0;m=b[l>>1]|0;j=m&65535;do if(!(j&4)){if(j&8|0){k=Mg(+g[n>>3])|0;L()|0;j=m;break}if(!(j&18)){k=0;j=m;break}k=Ng(a[n+10>>0]|0,c[n+12>>2]|0,c[n+16>>2]|0)|0;L()|0;j=b[l>>1]|0}else{k=c[n>>2]|0;j=m}while(0);l=(k|0)<1;if(!((j&9216)==0?!(c[n+24>>2]|0):0))Cg(n);j=c[n+32>>2]|0;do if(!j)Fa=1007;else{if(c[j+480>>2]|0){Xd(j,n);break}k=n;if((c[j+304>>2]|0)>>>0>k>>>0){Fa=1007;break}if((c[j+308>>2]|0)>>>0<=k>>>0){Fa=1007;break}Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n}while(0);do if((Fa|0)==1007)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(l)break M;c[Ea+24>>2]=1;break M}while(0);break}case 87:{if(c[V+84>>2]|0)break M;j=V;do{Ca=c[(c[j+40>>2]|0)+32>>2]|0;if((Ca|0)==40592|((Ca|0)==40587|((Ca|0)==43457|(Ca|0)==43467)))break M;j=c[j+32>>2]|0}while((j|0)!=0);if((a[V+18>>0]|0)!=85){c[Ea+24>>2]=1;break M}if((a[V+16>>0]|0)==86)break M;k=c[V+28>>2]|0;j=c[f>>2]|0;c[Da>>2]=0;do if(k|0){Wj(j,k,a[j+78>>0]|0,67,Da)|0;n=c[Da>>2]|0;if(!n)break;l=n+8|0;m=b[l>>1]|0;j=m&65535;do if(!(j&4)){if(j&8|0){k=Mg(+g[n>>3])|0;L()|0;j=m;break}if(!(j&18)){k=0;j=m;break}k=Ng(a[n+10>>0]|0,c[n+12>>2]|0,c[n+16>>2]|0)|0;L()|0;j=b[l>>1]|0}else{k=c[n>>2]|0;j=m}while(0);l=(k|0)<1;if(!((j&9216)==0?!(c[n+24>>2]|0):0))Cg(n);j=c[n+32>>2]|0;do if(!j)Fa=1036;else{if(c[j+480>>2]|0){Xd(j,n);break}k=n;if((c[j+304>>2]|0)>>>0>k>>>0){Fa=1036;break}if((c[j+308>>2]|0)>>>0<=k>>>0){Fa=1036;break}Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n}while(0);do if((Fa|0)==1036)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(l)break M;c[Ea+24>>2]=3;break M}while(0);break}default:c[Ea+24>>2]=2}while(0);j=c[w>>2]|0;n=j+1|0;j=j+q|0;t=j+1|0;u=j+2|0;c[w>>2]=u;switch(a[P>>0]|0){case 83:case 85:{j=j+3|0;c[w>>2]=j;G=j;break}default:{G=0;j=u}}F=V+18|0;switch(a[F>>0]|0){case 83:case 85:{j=j+1|0;c[w>>2]=j;D=j;break}default:D=0}C=V+16|0;if((a[C>>0]|0)==76){y=0;x=0}else{if(!J)m=0;else m=c[J>>2]|0;k=(c[V+72>>2]|0)+n|0;l=c[V+8>>2]|0;if(l)k=(c[l>>2]|0)+k|0;y=j+m|0;c[Ea+32>>2]=y+1;y=y+m|0;c[Ea+40>>2]=y+1;y=y+m|0;c[Ea+48>>2]=y+1;c[w>>2]=y+m;y=j+1|0;x=k}M=S+108|0;N=S+112|0;if(o<<16>>16>0){k=S+104|0;j=0;do{l=j+n|0;m=c[M>>2]|0;if((c[N>>2]|0)>(m|0)){c[M>>2]=m+1;Da=c[k>>2]|0;a[Da+(m*20|0)>>0]=90;b[Da+(m*20|0)+2>>1]=0;c[Da+(m*20|0)+4>>2]=p;c[Da+(m*20|0)+8>>2]=j;c[Da+(m*20|0)+12>>2]=l;c[Da+(m*20|0)+16>>2]=0;a[Da+(m*20|0)+1>>0]=0}else Di(S,90,p,j,l)|0;j=j+1|0}while((j|0)!=(q|0))}j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=92;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=n;c[Da+(j*20|0)+8>>2]=q;c[Da+(j*20|0)+12>>2]=t;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,92,n,q,t)|0;I=V+8|0;q=c[I>>2]|0;do if(q){r=c[q>>2]|0;s=(c[V+72>>2]|0)+n|0;o=c[f>>2]|0;m=r+1|0;n=m*5|0;l=n+20|0;p=o+272|0;N:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=1074;else{n=0;l=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0<l>>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1075;break N}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1075;break N}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=1074}while(0);if((Fa|0)==1074){k=_d(o,l,0)|0;Fa=1075}do if((Fa|0)==1075){do if(!k){j=o+81|0;if(a[j>>0]|0){n=0;p=1;break}if(a[o+82>>0]|0){n=0;p=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){n=0;p=1;break}c[j+12>>2]=7;n=0;p=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;n=k;p=0}while(0);if(!((r|0)>0&(k|0)!=0)){l=p;break}o=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[o>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0)){l=p;break}else l=l+20|0}}while(0);o=(c[w>>2]|0)+1|0;c[w>>2]=o;m=V+64|0;j=c[m>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Da=c[S+104>>2]|0;a[Da+(k*20|0)>>0]=87;b[Da+(k*20|0)+2>>1]=0;c[Da+(k*20|0)+4>>2]=s;c[Da+(k*20|0)+8>>2]=j;c[Da+(k*20|0)+12>>2]=r;c[Da+(k*20|0)+16>>2]=0;a[Da+(k*20|0)+1>>0]=0}else k=Di(S,87,s,j,r)|0;j=c[S>>2]|0;O:do if(a[j+81>>0]|0){if(l|(c[j+480>>2]|0)!=0)break;Da=(c[n>>2]|0)+-1|0;c[n>>2]=Da;if(Da|0)break;j=c[n+12>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,n);break O}l=n;if((c[j+304>>2]|0)>>>0>l>>>0)break;if((c[j+308>>2]|0)>>>0<=l>>>0)break;Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n;break O}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else{Ca=c[S+104>>2]|0;Da=(c[M>>2]|0)+-1|0;a[Ca+(Da*20|0)+1>>0]=-9;c[Ca+(Da*20|0)+16>>2]=n}while(0);l=k+2|0;j=k+4|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Da=c[S+104>>2]|0;a[Da+(k*20|0)>>0]=16;b[Da+(k*20|0)+2>>1]=0;c[Da+(k*20|0)+4>>2]=l;c[Da+(k*20|0)+8>>2]=j;c[Da+(k*20|0)+12>>2]=l;c[Da+(k*20|0)+16>>2]=0;a[Da+(k*20|0)+1>>0]=0}else Di(S,16,l,j,l)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=12;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=o;c[Da+(j*20|0)+8>>2]=0;c[Da+(j*20|0)+12>>2]=0;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else j=Di(S,12,o,0,0)|0;m=c[m>>2]|0;k=r+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;v=c[S+104>>2]|0;a[v+(l*20|0)>>0]=78;b[v+(l*20|0)+2>>1]=0;c[v+(l*20|0)+4>>2]=s;c[v+(l*20|0)+8>>2]=m;c[v+(l*20|0)+12>>2]=k;c[v+(l*20|0)+16>>2]=0;a[v+(l*20|0)+1>>0]=0;v=j;A=o;break}else{Di(S,78,s,m,k)|0;v=j;A=o;break}}else{v=0;A=0}while(0);j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=121;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=O;c[Da+(j*20|0)+8>>2]=u;c[Da+(j*20|0)+12>>2]=0;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,121,O,u,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=122;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=O;c[Da+(j*20|0)+8>>2]=t;c[Da+(j*20|0)+12>>2]=u;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,122,O,t,u)|0;j=c[V+80>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;t=c[S+104>>2]|0;a[t+(k*20|0)>>0]=52;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=j;c[t+(k*20|0)+8>>2]=0;c[t+(k*20|0)+12>>2]=u;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=k}else t=Di(S,52,j,0,u)|0;j=c[Oa>>2]|0;P:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);Q:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=1136;else{j=0;break P}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];Da=l+284|0;c[Da>>2]=(c[Da>>2]|0)+1;break Q}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];Da=l+284|0;c[Da>>2]=(c[Da>>2]|0)+1;break Q}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=1136}while(0);if((Fa|0)==1136)j=_d(l,224,0)|0;if(!j){j=0;break}T=j+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[Oa>>2]=j;Di(j,61,0,1,0)|0}while(0);q=j+108|0;r=j+112|0;s=j+104|0;u=V+84|0;o=V;p=0;do{n=c[o+40>>2]|0;k=c[o+48>>2]|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=73;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0}else Di(j,73,0,k,0)|0;k=c[(c[o+68>>2]|0)+20>>2]|0;if(!k)k=0;else k=c[k>>2]|0;p=(p|0)>(k|0)?p:k;do if(!(c[u>>2]|0)){Da=c[n+32>>2]|0;do if((Da|0)==43457|(Da|0)==43467){k=o+60|0;l=c[k>>2]|0;m=c[q>>2]|0;if((c[r>>2]|0)>(m|0)){c[q>>2]=m+1;Da=c[s>>2]|0;a[Da+(m*20|0)>>0]=70;b[Da+(m*20|0)+2>>1]=0;c[Da+(m*20|0)+4>>2]=0;c[Da+(m*20|0)+8>>2]=l;c[Da+(m*20|0)+12>>2]=0;c[Da+(m*20|0)+16>>2]=0;a[Da+(m*20|0)+1>>0]=0}else Di(j,70,0,l,0)|0;k=(c[k>>2]|0)+1|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=70;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}while(0);if(!(c[n+4>>2]&4096))break;k=c[o+56>>2]|0;if(!k)break;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=-118;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=k;c[Da+(l*20|0)+8>>2]=0;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0}else Di(j,138,k,0,0)|0;k=(c[o+60>>2]|0)+1|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=70;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}while(0);o=c[o+32>>2]|0}while((o|0)!=0);n=c[w>>2]|0;c[w>>2]=n+p;c[Ea+20>>2]=n+1;n=(G|0)!=0;if(n){j=c[V+24>>2]|0;do if(j){if((a[j>>0]|0)!=-88){m=Jj(f,j,G)|0;Fa=1172;break}m=c[Oa>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[m+104>>2]|0;a[Da+(l*20|0)>>0]=78;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=j;c[Da+(l*20|0)+8>>2]=G;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,G,0)|0;break}}else{m=Jj(f,0,G)|0;Fa=1172}while(0);do if((Fa|0)==1172){if((m|0)==(G|0))break;j=c[Oa>>2]|0;if(!j)break;k=j+108|0;l=c[k>>2]|0;if((c[j+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[j+104>>2]|0;a[Da+(l*20|0)>>0]=79;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=m;c[Da+(l*20|0)+8>>2]=G;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,79,m,G,0)|0;break}}while(0);pm(f,G,(a[C>>0]|0)==86?3:0)}o=(D|0)!=0;if(o){j=c[V+28>>2]|0;do if(j){if((a[j>>0]|0)!=-88){m=Jj(f,j,D)|0;Fa=1186;break}m=c[Oa>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[m+104>>2]|0;a[Da+(l*20|0)>>0]=78;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=j;c[Da+(l*20|0)+8>>2]=D;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,D,0)|0;break}}else{m=Jj(f,0,D)|0;Fa=1186}while(0);do if((Fa|0)==1186){if((m|0)==(D|0))break;j=c[Oa>>2]|0;if(!j)break;k=j+108|0;l=c[k>>2]|0;if((c[j+112>>2]|0)>(l|0)){c[k>>2]=l+1;Fa=c[j+104>>2]|0;a[Fa+(l*20|0)>>0]=79;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=m;c[Fa+(l*20|0)+8>>2]=D;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(j,79,m,D,0)|0;break}}while(0);pm(f,D,(a[C>>0]|0)==86?4:1)}j=a[P>>0]|0;if(n&j<<24>>24==(a[F>>0]|0)){j=j<<24>>24==83?57:55;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=j;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=G;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=D;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else k=Di(S,j,G,0,D)|0;qm(c[Ea>>2]|0,c[z>>2]|0,0);j=c[R>>2]|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=36;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=1;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;rm(Ea);j=c[R>>2]|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=-118;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,138,j,0,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=E;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,E,0)|0;l=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else j=59308;c[j+8>>2]=l;j=a[P>>0]|0}do if(j<<24>>24==83){if(!(o&(a[C>>0]|0)!=86))break;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=101;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=G;c[Fa+(j*20|0)+8>>2]=D;c[Fa+(j*20|0)+12>>2]=G;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0;break}else{Di(S,101,G,D,G)|0;break}}while(0);do if((a[P>>0]|0)!=87){j=c[B>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,36,j,1,0)|0;break}}while(0);j=c[R>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;j=c[H>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;m=(y|0)!=0;do if((J|0)!=0&m){j=(c[J>>2]|0)+-1|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=78;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=x;c[Fa+(k*20|0)+8>>2]=y;c[Fa+(k*20|0)+12>>2]=j;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,78,x,y,j)|0;j=c[Ea+32>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,78,y,j,k)|0;j=c[Ea+40>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,78,y,j,k)|0;j=c[Ea+48>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(S,78,y,j,k)|0;break}}while(0);j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=E;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,E,0)|0;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((t|0)<0?k+-1|0:t)*20|0)|0;else j=59308;c[j+8>>2]=k;if(m)sm(f,J,x,y,E);j=a[P>>0]|0;R:do if(j<<24>>24==83){tm(Ea,3,0,0)|0;if((a[F>>0]|0)==87)break;if((a[C>>0]|0)!=86){tm(Ea,1,D,0)|0;tm(Ea,2,G,0)|0;break}l=c[_>>2]|0;j=l+-1|0;c[_>>2]=j;k=c[M>>2]|0;um(Ea,57,c[R>>2]|0,D,c[H>>2]|0,j);tm(Ea,2,G,0)|0;tm(Ea,1,0,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;k=c[S+12>>2]|0;j=0-l|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,S,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];break}}else{if((a[F>>0]|0)==85){do if(j<<24>>24==85){Fa=(a[C>>0]|0)==86;tm(Ea,3,D,0)|0;if(!Fa)break;tm(Ea,2,G,0)|0;tm(Ea,1,0,0)|0;break R}else tm(Ea,3,D,0)|0;while(0);tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;break}tm(Ea,3,0,0)|0;if((a[F>>0]|0)==87)break;if((a[C>>0]|0)!=86){do if(o){j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=47;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=D;c[Fa+(j*20|0)+8>>2]=0;c[Fa+(j*20|0)+12>>2]=1;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0;break}else{j=Di(S,47,D,0,1)|0;break}}else j=0;while(0);tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;if(!o)break;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((j|0)<0?k+-1|0:j)*20|0)|0;else j=59308;c[j+8>>2]=k;break}k=c[M>>2]|0;if(o){l=(c[_>>2]|0)+-1|0;c[_>>2]=l;um(Ea,57,c[R>>2]|0,D,c[H>>2]|0,l)}else l=0;tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;if(!o)break;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;k=c[S+12>>2]|0;j=~l;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,S,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];break}}while(0);k=c[S+12>>2]|0;j=0-K|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,S,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];sl(Q);j=c[M>>2]|0;if(!(c[I>>2]|0))p=0;else{if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=70;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=A;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else j=Di(S,70,0,A,0)|0;l=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))k=(c[S+104>>2]|0)+(((v|0)<0?l+-1|0:v)*20|0)|0;else k=59308;c[k+8>>2]=l;p=j;j=l}if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;o=c[S+104>>2]|0;a[o+(j*20|0)>>0]=36;b[o+(j*20|0)+2>>1]=0;c[o+(j*20|0)+4>>2]=O;c[o+(j*20|0)+8>>2]=0;c[o+(j*20|0)+12>>2]=0;c[o+(j*20|0)+16>>2]=0;a[o+(j*20|0)+1>>0]=0;o=j}else o=Di(S,36,O,0,0)|0;j=a[P>>0]|0;do if((a[F>>0]|0)==85){do if(j<<24>>24==85){Fa=(a[C>>0]|0)==86;tm(Ea,3,D,0)|0;if(!Fa)break;tm(Ea,2,G,0)|0}else tm(Ea,3,D,0)|0;while(0);tm(Ea,1,0,0)|0;k=a[(c[S>>2]|0)+81>>0]|0;l=c[M>>2]|0}else{tm(Ea,3,0,0)|0;if(j<<24>>24!=83){k=c[M>>2]|0;m=tm(Ea,1,0,1)|0;tm(Ea,2,G,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;l=c[M>>2]|0;k=a[(c[S>>2]|0)+81>>0]|0;if(!(k<<24>>24))j=(c[S+104>>2]|0)+(((m|0)<0?l+-1|0:m)*20|0)|0;else j=59308;c[j+8>>2]=l;break}do if((a[C>>0]|0)!=86){j=c[M>>2]|0;if((a[F>>0]|0)==87){n=tm(Ea,1,G,1)|0;l=tm(Ea,2,0,1)|0;break}else{n=tm(Ea,1,D,1)|0;l=tm(Ea,2,G,1)|0;break}}else{j=c[M>>2]|0;l=tm(Ea,2,G,1)|0;n=tm(Ea,1,0,1)|0}while(0);k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=11;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,11,0,j,0)|0;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else j=59308;c[j+8>>2]=k;m=tm(Ea,1,0,1)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;l=c[M>>2]|0;k=a[(c[S>>2]|0)+81>>0]|0;if(!(k<<24>>24)){j=l+-1|0;Fa=c[S+104>>2]|0;c[Fa+(((n|0)<0?j:n)*20|0)+8>>2]=l;j=Fa+(((m|0)<0?j:m)*20|0)|0}else{c[14829]=l;j=59308}c[j+8>>2]=l}while(0);if(!(k<<24>>24))j=(c[S+104>>2]|0)+(((o|0)<0?l+-1|0:o)*20|0)|0;else j=59308;c[j+8>>2]=l;j=c[R>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=-118;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,138,j,0,0)|0;do if(c[I>>2]|0){j=c[u>>2]|0;do if(j|0){k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=1;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,70,1,j,0)|0;j=c[V+88>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,70,0,j,0)|0;break}}while(0);k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((p|0)<0?k+-1|0:p)*20|0)|0;else j=59308;c[j+4>>2]=k;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=66;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=A;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,66,A,0,0)|0;break}}while(0);n=Ja+108|0;j=c[n>>2]|0;m=Ja+112|0;if((c[m>>2]|0)>(j|0)){c[n>>2]=j+1;Fa=c[Ja+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=X;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(Ja,11,0,X,0)|0;l=Ja+12|0;j=c[l>>2]|0;k=0-Z|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,Ja,k);else c[(c[j+64>>2]|0)+(k<<2)>>2]=c[n>>2];c[La+28>>2]=0;rl(f,h,-1,La,Ga,i,W,X);j=c[l>>2]|0;k=1-Z|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,Ja,k);else c[(c[j+64>>2]|0)+(k<<2)>>2]=c[n>>2];j=c[n>>2]|0;if((c[m>>2]|0)>(j|0)){c[n>>2]=j+1;Fa=c[Ja+104>>2]|0;a[Fa+(j*20|0)>>0]=66;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=Y;c[Fa+(j*20|0)+8>>2]=0;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(Ja,66,Y,0,0)|0;k=c[l>>2]|0;j=2-Z|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Ja,j);j=0;Fa=1796;break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[n>>2];j=0;Fa=1796;break}}else{z=(U|0)!=0;do if(z){k=c[h>>2]|0;j=c[k>>2]|0;if((j|0)>0){k=k+4|0;while(1){b[k+16+2>>1]=0;if((j|0)>1){k=k+20|0;j=j+-1|0}else break}}j=c[U>>2]|0;if((j|0)>0){k=U+4|0;while(1){b[k+16+2>>1]=0;if((j|0)>1){k=k+20|0;j=j+-1|0}else break}}j=h+6|0;if((b[j>>1]|0)<=66)break;b[j>>1]=66}else b[h+6>>1]=0;while(0);k=c[La>>2]|0;j=(k|0)==0;S:do if(l&j)R=1;else{if(l|j){R=0;break}j=c[U>>2]|0;if((j|0)!=(c[k>>2]|0)){R=0;break}if((j|0)<=0){R=1;break}j=0;while(1){if((a[U+4+(j*20|0)+12>>0]|0)!=(a[k+4+(j*20|0)+12>>0]|0)){R=0;break S}if(bk(0,c[U+4+(j*20|0)>>2]|0,c[k+4+(j*20|0)>>2]|0,-1)|0){R=0;break S}j=j+1|0;if((j|0)>=(c[U>>2]|0)){R=1;break}}}while(0);W=c[_>>2]|0;V=W+-1|0;c[_>>2]=V;S=Ea+12|0;c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;c[Ea>>2]=f;c[Ea+4>>2]=ta;c[Ea+8>>2]=Ma;S=f+44|0;c[Ma+16>>2]=(c[S>>2]|0)+1;if(z)j=c[U>>2]|0;else j=0;A=Ma+12|0;c[A>>2]=j;c[Ma+24>>2]=U;do if($|0){j=c[$>>2]|0;if((j|0)<=0)break;n=Da+4|0;o=Da+8|0;p=Da+12|0;q=Da+16|0;r=Da+24|0;l=$+4|0;m=0;while(1){k=c[l>>2]|0;c[n>>2]=133;c[o>>2]=134;c[p>>2]=67;c[q>>2]=0;c[r>>2]=Ea;c[Da>>2]=0;if(k){_j(Da,k)|0;j=c[$>>2]|0}m=m+1|0;if((m|0)>=(j|0))break;else l=l+20|0}}while(0);n=c[La>>2]|0;do if(n|0){j=c[n>>2]|0;if((j|0)<=0)break;o=Da+4|0;p=Da+8|0;q=Da+12|0;r=Da+16|0;s=Da+24|0;l=n+4|0;m=0;while(1){k=c[l>>2]|0;c[o>>2]=133;c[p>>2]=134;c[q>>2]=67;c[r>>2]=0;c[s>>2]=Ea;c[Da>>2]=0;if(k){_j(Da,k)|0;j=c[n>>2]|0}m=m+1|0;if((m|0)>=(j|0))break;else l=l+20|0}}while(0);do if(!X)C=D;else{if(!z){c[Da+4>>2]=133;c[Da+8>>2]=134;c[Da+12>>2]=67;c[Da+16>>2]=0;c[Da+24>>2]=Ea;c[Da>>2]=0;_j(Da,X)|0;C=D;break}j=Da+8|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[Da>>2]=f;c[Da+4>>2]=135;c[Da+24>>2]=h;j=c[u>>2]|0;if(j|0)_j(Da,j)|0;C=c[sa>>2]|0;c[Da+4>>2]=133;c[Da+8>>2]=134;c[Da+12>>2]=67;c[Da+16>>2]=0;c[Da+24>>2]=Ea;c[Da>>2]=0;_j(Da,X)|0}while(0);I=Ma+32|0;y=Ma+36|0;c[y>>2]=c[I>>2];do if(!(c[t>>2]|0)){if(c[u>>2]|0){x=0;j=0;break}if((c[Ma+44>>2]|0)!=1){x=0;j=0;break}j=c[c[Ma+40>>2]>>2]|0;p=c[j+20>>2]|0;do if(!p){j=0;k=0}else{if((c[p>>2]|0)!=1){j=0;k=0;break}k=c[j+8>>2]|0;o=a[k>>0]|0;j=(d[208+(o&255)>>0]|0)+-109|0;o=o<<24>>24==0|(j|0)!=0;if(o)l=j;else{m=44311;n=k;do{n=n+1|0;m=m+1|0;wa=a[n>>0]|0;l=(d[208+(wa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(l|0)!=0))}if(l){if(!o){l=44315;do{k=k+1|0;l=l+1|0;wa=a[k>>0]|0;j=(d[208+(wa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(j|0)!=0))}if(!j){l=1;k=2}else{j=0;k=0;break}}else{l=0;k=1}j=gk(Na,p,0)|0;if(!j){j=0;break}a[j+16>>0]=l}while(0);x=k&255}else{x=0;j=0}while(0);T=Ma+44|0;n=c[T>>2]|0;if((n|0)>0){q=Ea+24|0;r=Ma+40|0;s=Da+4|0;t=Da+8|0;u=Da+12|0;v=Da+16|0;w=Da+24|0;p=0;k=b[q>>1]|0;do{k=k|8;b[q>>1]=k;o=c[(c[(c[r>>2]|0)+(p<<4)>>2]|0)+20>>2]|0;do if(o){l=c[o>>2]|0;if((l|0)<=0)break;m=o+4|0;n=0;k=l;while(1){l=c[m>>2]|0;c[s>>2]=133;c[t>>2]=134;c[u>>2]=67;c[v>>2]=0;c[w>>2]=Ea;c[Da>>2]=0;if(l){_j(Da,l)|0;k=c[o>>2]|0}n=n+1|0;if((n|0)>=(k|0))break;else m=m+20|0}k=b[q>>1]|0;n=c[T>>2]|0}while(0);k=k&-9;b[q>>1]=k;p=p+1|0}while((p|0)<(n|0))}o=c[S>>2]|0;c[Ma+20>>2]=o;T:do if(!(a[xa>>0]|0)){do if(z){y=f+40|0;p=c[y>>2]|0;c[y>>2]=p+1;O=Ma+4|0;c[O>>2]=p;p=c[f>>2]|0;r=c[U>>2]|0;n=(c[I>>2]|0)+1+r|0;o=n*5|0;m=o+20|0;q=p+272|0;U:do if(c[q>>2]|0)if(!(a[p+81>>0]|0))Fa=1431;else{E=0;q=1;z=0}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0<m>>>0:0))){k=p+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Fa=p+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1432;break U}k=p+296|0;l=c[k>>2]|0;if(!l){k=p+292|0;break}else{c[k>>2]=c[l>>2];Fa=p+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1432;break U}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=1431}while(0);if((Fa|0)==1431){l=_d(p,m,0)|0;Fa=1432}do if((Fa|0)==1432){do if(!l){k=p+81|0;if(a[k>>0]|0){m=0;q=1;break}if(a[p+82>>0]|0){m=0;q=1;break}a[k>>0]=1;if((c[p+180>>2]|0)>0)c[p+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[p+236>>2]|0;if(!k){m=0;q=1;break}c[k+12>>2]=7;m=0;q=1}else{c[l+16>>2]=l+20+(n<<2);b[l+6>>1]=r;b[l+8>>1]=n;a[l+4>>0]=a[p+78>>0]|0;c[l+12>>2]=p;c[l>>2]=1;gw(l+24|0,0,o+-4|0)|0;m=l;q=0}while(0);if(!((r|0)>0&(l|0)!=0)){E=m;z=l;break}p=l+16|0;n=U+4|0;o=0;while(1){k=Yi(f,c[n>>2]|0)|0;if(!k)k=c[(c[f>>2]|0)+8>>2]|0;c[l+20+(o<<2)>>2]=k;a[(c[p>>2]|0)+o>>0]=a[n+12>>0]|0;o=o+1|0;if((o|0)==(r|0)){E=m;z=l;break}else n=n+20|0}}while(0);m=c[O>>2]|0;k=c[A>>2]|0;P=Ja+108|0;l=c[P>>2]|0;Q=Ja+112|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;H=c[Ja+104>>2]|0;a[H+(l*20|0)>>0]=114;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=m;c[H+(l*20|0)+8>>2]=k;c[H+(l*20|0)+12>>2]=0;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0;H=l}else H=Di(Ja,114,m,k,0)|0;k=c[Ja>>2]|0;V:do if(a[k+81>>0]|0){if(q|(c[k+480>>2]|0)!=0)break;Ea=(c[E>>2]|0)+-1|0;c[E>>2]=Ea;if(Ea|0){q=0;break}k=c[E+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,E);q=0;break V}l=E;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;q=k+300|0;c[E>>2]=c[q>>2];c[q>>2]=E;q=0;break V}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](E);q=0;break}else{q=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);q=0;break}}else{if((H|0)<0)k=(c[P>>2]|0)+-1|0;else k=H;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,E,-9);break}if(q){q=1;break}c[l+(k*20|0)+16>>2]=E;a[m>>0]=-9;q=0}while(0);A=c[S>>2]|0;M=A+1|0;G=A+2|0;J=A+3|0;K=c[_>>2]|0;F=K+-1|0;N=A+4|0;D=K+-2|0;c[_>>2]=D;A=A+5|0;k=c[U>>2]|0;Ea=k+N|0;B=Ea+1|0;c[S>>2]=Ea+k;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=70;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=0;c[Ea+(k*20|0)+8>>2]=G;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,70,0,G,0)|0;k=(c[U>>2]|0)+N|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=73;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=0;c[Ea+(l*20|0)+8>>2]=A;c[Ea+(l*20|0)+12>>2]=k;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,73,0,A,k)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=12;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=N;c[Ea+(k*20|0)+8>>2]=D;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,12,N,D,0)|0;C=ql(f,ta,C,U,0,R?576:64,0)|0;if(!C)break T;if((c[U>>2]|0)==(a[C+47>>0]|0)){n=0;o=0;m=0}else{if(!(a[Ga>>0]|0))k=43118;else k=(c[za>>2]&1|0)==0?43109:43118;c[Aa>>2]=k;nk(f,0,44319,Aa);u=c[U>>2]|0;p=c[I>>2]|0;if((p|0)>0){n=c[Ma+28>>2]|0;l=u;k=u;m=0;while(1){o=(c[n+(m*24|0)+12>>2]|0)>=(l|0)&1;k=k+o|0;m=m+1|0;if((m|0)>=(p|0)){x=k;break}else l=l+o|0}}else x=u;w=(x|0)==1;do if(w){k=f+19|0;l=a[k>>0]|0;if(!(l<<24>>24)){v=(c[S>>2]|0)+1|0;c[S>>2]=v;break}else{v=l+-1<<24>>24;a[k>>0]=v;v=c[f+148+((v&255)<<2)>>2]|0;break}}else{k=f+32|0;l=c[k>>2]|0;m=f+28|0;n=c[m>>2]|0;if((n|0)<(x|0)){v=c[S>>2]|0;c[S>>2]=v+x;v=v+1|0;break}else{c[k>>2]=l+x;c[m>>2]=n-x;v=l;break}}while(0);t=c[Oa>>2]|0;if((u|0)>0){m=t+108|0;n=t+112|0;o=t+104|0;k=U+4|0;l=0;while(1){p=l+v|0;r=Jj(f,c[k>>2]|0,p)|0;do if((r|0)!=(p|0)){s=c[m>>2]|0;if((c[n>>2]|0)>(s|0)){c[m>>2]=s+1;Ea=c[o>>2]|0;a[Ea+(s*20|0)>>0]=79;b[Ea+(s*20|0)+2>>1]=0;c[Ea+(s*20|0)+4>>2]=r;c[Ea+(s*20|0)+8>>2]=p;c[Ea+(s*20|0)+12>>2]=0;c[Ea+(s*20|0)+16>>2]=0;a[Ea+(s*20|0)+1>>0]=0;break}else{Di(t,79,r,p,0)|0;break}}while(0);l=l+1|0;if((l|0)==(u|0))break;else k=k+20|0}l=c[I>>2]|0}else l=p;if((l|0)>0){o=Ma+28|0;k=u;n=0;do{m=c[o>>2]|0;if((c[m+(n*24|0)+12>>2]|0)>=(k|0)){Vj(Ja,c[m+(n*24|0)>>2]|0,c[m+(n*24|0)+4>>2]|0,c[m+(n*24|0)+8>>2]|0,k+v|0);k=k+1|0;l=c[I>>2]|0}n=n+1|0}while((n|0)<(l|0))}n=f+19|0;k=a[n>>0]|0;if(!(k<<24>>24)){m=(c[S>>2]|0)+1|0;c[S>>2]=m}else{m=k+-1<<24>>24;a[n>>0]=m;m=c[f+148+((m&255)<<2)>>2]|0}k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=92;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=x;c[Ea+(k*20|0)+12>>2]=m;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,92,v,x,m)|0;k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=-125;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=k;c[Ea+(l*20|0)+8>>2]=m;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,131,k,m,0)|0;do if(m|0){k=a[n>>0]|0;if((k&255)>=8)break;a[n>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=m}while(0);do if(w){if(!v)break;k=a[n>>0]|0;if((k&255)>=8)break;a[n>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=v}else{k=f+28|0;if((c[k>>2]|0)>=(x|0))break;c[k>>2]=x;c[f+32>>2]=v}while(0);sl(C);o=c[y>>2]|0;c[y>>2]=o+1;c[Ma+8>>2]=o;k=a[n>>0]|0;if(!(k<<24>>24)){m=(c[S>>2]|0)+1|0;c[S>>2]=m}else{m=k+-1<<24>>24;a[n>>0]=m;m=c[f+148+((m&255)<<2)>>2]|0}k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=116;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=o;c[Ea+(k*20|0)+8>>2]=m;c[Ea+(k*20|0)+12>>2]=x;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,116,o,m,x)|0;k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=34;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=k;c[Ea+(l*20|0)+8>>2]=V;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,34,k,V,0)|0;a[Ma+1>>0]=1;n=1}W:do if(R){if(b[ua>>1]&4){Fa=1537;break}do if(!n){if(a[C+48>>0]|0)break;u=c[P>>2]|0;t=0;break W}while(0);c[La>>2]=0;k=c[La+20>>2]|0;l=c[Ja>>2]|0;if(a[l+81>>0]|0){Fa=1537;break}Fa=c[Ja+104>>2]|0;Da=Fa+(k*20|0)+1|0;Ea=Fa+(k*20|0)+16|0;kg(l,a[Da>>0]|0,c[Ea>>2]|0);a[Da>>0]=0;c[Ea>>2]=0;a[Fa+(k*20|0)>>0]=-86;Fa=1537}else Fa=1537;while(0);do if((Fa|0)==1537){l=c[P>>2]|0;if(!n){u=l;t=0;break}k=c[O>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;u=c[Ja+104>>2]|0;a[u+(l*20|0)>>0]=126;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=m;c[u+(l*20|0)+12>>2]=o;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;t=1;break}else{Di(Ja,126,k,m,o)|0;u=l;t=1;break}}while(0);l=c[U>>2]|0;if((l|0)>0){s=Ja+104|0;r=0;do{X:do if(t){k=r+B|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[s>>2]|0;a[Fa+(l*20|0)>>0]=90;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=o;c[Fa+(l*20|0)+8>>2]=r;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,90,o,r,k)|0;break}}else{a[Ma>>0]=1;k=c[U+4+(r*20|0)>>2]|0;p=r+B|0;do if(k){if((a[k>>0]|0)!=-88){n=Jj(f,k,p)|0;break}n=c[Oa>>2]|0;k=c[k+28>>2]|0;l=n+108|0;m=c[l>>2]|0;if((c[n+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[n+104>>2]|0;a[Fa+(m*20|0)>>0]=78;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=k;c[Fa+(m*20|0)+8>>2]=p;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break X}else{Di(n,78,k,p,0)|0;break X}}else n=Jj(f,0,p)|0;while(0);if((n|0)==(p|0))break;k=c[Oa>>2]|0;if(!k)break;l=k+108|0;m=c[l>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[k+104>>2]|0;a[Fa+(m*20|0)>>0]=79;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=n;c[Fa+(m*20|0)+8>>2]=p;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break}else{Di(k,79,n,p,0)|0;break}}while(0);r=r+1|0;l=c[U>>2]|0}while((r|0)<(l|0))}if(z|0)c[z>>2]=(c[z>>2]|0)+1;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=87;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=A;c[Fa+(k*20|0)+8>>2]=B;c[Fa+(k*20|0)+12>>2]=l;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else k=Di(Ja,87,A,B,l)|0;l=c[Ja>>2]|0;Y:do if(a[l+81>>0]|0){if(q|(c[l+480>>2]|0)!=0)break;Fa=(c[E>>2]|0)+-1|0;c[E>>2]=Fa;if(Fa|0)break;k=c[E+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,E);break Y}l=E;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Fa=k+300|0;c[E>>2]=c[Fa>>2];c[Fa>>2]=E;break Y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{Fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}else{if((k|0)<0)k=(c[P>>2]|0)+-1|0;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,E,-9);break}if(q)break;c[l+(k*20|0)+16>>2]=E;a[m>>0]=-9}while(0);o=c[P>>2]|0;k=o+1|0;if((c[Q>>2]|0)>(o|0)){c[P>>2]=k;Fa=c[Ja+104>>2]|0;a[Fa+(o*20|0)>>0]=16;b[Fa+(o*20|0)+2>>1]=0;c[Fa+(o*20|0)+4>>2]=k;c[Fa+(o*20|0)+8>>2]=0;c[Fa+(o*20|0)+12>>2]=k;c[Fa+(o*20|0)+16>>2]=0;a[Fa+(o*20|0)+1>>0]=0}else Di(Ja,16,k,0,k)|0;l=c[U>>2]|0;k=c[Oa>>2]|0;m=k+108|0;n=c[m>>2]|0;if((c[k+112>>2]|0)>(n|0)){c[m>>2]=n+1;Fa=c[k+104>>2]|0;a[Fa+(n*20|0)>>0]=77;b[Fa+(n*20|0)+2>>1]=0;c[Fa+(n*20|0)+4>>2]=B;c[Fa+(n*20|0)+8>>2]=A;c[Fa+(n*20|0)+12>>2]=l;c[Fa+(n*20|0)+16>>2]=0;a[Fa+(n*20|0)+1>>0]=0}else Di(k,77,B,A,l)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=F;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,J,F,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=47;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=G;c[Fa+(k*20|0)+8>>2]=V;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,47,G,V,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=N;c[Fa+(k*20|0)+8>>2]=D;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,N,D,0)|0;l=c[P>>2]|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))k=(c[Ja+104>>2]|0)+(((o|0)<0?l+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=l;tl(f,M,Ma);k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=1;c[Fa+(k*20|0)+8>>2]=M;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,70,1,M,0)|0;do if(t){k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=3;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=k;c[Fa+(l*20|0)+8>>2]=u;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,3,k,u,0)|0;break}}else{sl(C);k=c[Ja>>2]|0;if(a[k+81>>0]|0)break;Fa=c[Ja+104>>2]|0;Da=Fa+(H*20|0)+1|0;Ea=Fa+(H*20|0)+16|0;kg(k,a[Da>>0]|0,c[Ea>>2]|0);a[Da>>0]=0;c[Ea>>2]=0;a[Fa+(H*20|0)>>0]=-86}while(0);k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=F;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,J,F,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=11;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=V;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,11,0,V,0)|0;v=c[P>>2]|0;if((c[Q>>2]|0)>(v|0)){c[P>>2]=v+1;Fa=c[Ja+104>>2]|0;a[Fa+(v*20|0)>>0]=70;b[Fa+(v*20|0)+2>>1]=0;c[Fa+(v*20|0)+4>>2]=1;c[Fa+(v*20|0)+8>>2]=G;c[Fa+(v*20|0)+12>>2]=0;c[Fa+(v*20|0)+16>>2]=0;a[Fa+(v*20|0)+1>>0]=0}else Di(Ja,70,1,G,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=66;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;k=Ja+12|0;l=c[k>>2]|0;m=0-K|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,m);else c[(c[l+64>>2]|0)+(m<<2)>>2]=c[P>>2];u=c[P>>2]|0;l=u+2|0;if((c[Q>>2]|0)>(u|0)){c[P>>2]=u+1;Fa=c[Ja+104>>2]|0;a[Fa+(u*20|0)>>0]=47;b[Fa+(u*20|0)+2>>1]=0;c[Fa+(u*20|0)+4>>2]=M;c[Fa+(u*20|0)+8>>2]=l;c[Fa+(u*20|0)+12>>2]=0;c[Fa+(u*20|0)+16>>2]=0;a[Fa+(u*20|0)+1>>0]=0}else Di(Ja,47,M,l,0)|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=J;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;q=c[Oa>>2]|0;if((c[T>>2]|0)>0){r=q+108|0;s=q+112|0;t=q+104|0;o=c[Ma+40>>2]|0;p=0;while(1){l=c[(c[o>>2]|0)+20>>2]|0;n=c[o+8>>2]|0;if(!l)m=0;else m=c[l>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;Fa=c[t>>2]|0;a[Fa+(l*20|0)>>0]=-99;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=n;c[Fa+(l*20|0)+8>>2]=m;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(q,157,n,m,0)|0;l=c[o+4>>2]|0;m=c[q>>2]|0;Z:do if(a[m+81>>0]|0){if(!(c[l+4>>2]&16))break;do if(m|0){if(c[m+480>>2]|0){Xd(m,l);break Z}n=l;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;Fa=m+300|0;c[l>>2]=c[Fa>>2];c[Fa>>2]=l;break Z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else{Ea=c[t>>2]|0;Fa=(c[r>>2]|0)+-1|0;a[Ea+(Fa*20|0)+1>>0]=-8;c[Ea+(Fa*20|0)+16>>2]=l}while(0);p=p+1|0;if((p|0)>=(c[T>>2]|0))break;else o=o+16|0}}l=u+1|0;Tj(f,X,l,16);rl(f,h,-1,La,Ga,i,l,v);l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=J;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;m=c[k>>2]|0;l=1-K|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Ja,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[P>>2];ul(f,Ma);l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=70;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=0;c[Fa+(l*20|0)+8>>2]=M;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,70,0,M,0)|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=N;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,66,N,0,0)|0;break}}else{z=Ma+40|0;m=c[z>>2]|0;do if(!(c[sa>>2]|0)){l=c[h>>2]|0;if((c[l>>2]|0)!=1){Fa=1752;break}k=c[va>>2]|0;if((c[k>>2]|0)!=1){Fa=1752;break}if(c[k+28>>2]|0){Fa=1752;break}w=c[k+24>>2]|0;k=c[l+4>>2]|0;if(c[w+56>>2]|0){Fa=1752;break}if((n|0)==0|(a[k>>0]|0)!=-93){Fa=1752;break}if(!(c[(c[m+4>>2]|0)+4>>2]&256)){Fa=1752;break}if((w|0)==0?1:(c[k+4>>2]&2|0)!=0){Fa=1752;break}l=c[w+72>>2]|0;if(!l)u=-1e6;else{m=c[(c[f>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){u=k;break}else k=k+1|0}s=f+40|0;v=c[s>>2]|0;c[s>>2]=v+1;s=w+28|0;t=c[s>>2]|0;n=c[Ba>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<u;_:do if(!(l&m)){c[k>>2]=l|m;if((u|0)!=1)break;r=c[n>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[n+199>>0]|0)break;l=Pe(c[r>>2]|0,0,r,Da,0,542)|0;if(l|0){cd(n,32157,ya);c[n+12>>2]=l;break}Ea=c[Da>>2]|0;c[(c[k>>2]|0)+20>>2]=Ea;k=c[r+92>>2]|0;n=c[Ea+4>>2]|0;c[n+4>>2]=c[Ea>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Ea=(c[14820]|0)+1|0;c[14820]=Ea;c[14821]=(Ea|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;Fa=1688;break}else{k=Wa[c[29352>>2]&127](l)|0;Fa=1688}while(0);do if((Fa|0)==1688){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Ea=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);Ea=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((Ea|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break _}while(0)}while(0);Hj(f,u,c[s>>2]|0,0,c[w>>2]|0);s=w+36|0;l=c[w+8>>2]|0;$:do if(!(c[s>>2]&32)){k=0;Fa=1706}else{if(!l){l=t;n=0;r=0;q=1;break}k=l;while(1){Fa=k+55|0;if(((d[Fa>>0]|d[Fa+1>>0]<<8)&3)==2){Fa=1706;break $}k=c[k+20>>2]|0;if(!k){k=0;Fa=1706;break}}}while(0);do if((Fa|0)==1706){if(l){n=w+46|0;do{Ea=l+55|0;do if(!((d[Ea>>0]|d[Ea+1>>0]<<8)&4)){m=b[l+48>>1]|0;if(m<<16>>16>=(b[n>>1]|0))break;if(c[l+36>>2]|0)break;if(k|0?m<<16>>16>=(b[k+48>>1]|0):0)break;k=l}while(0);l=c[l+20>>2]|0}while((l|0)!=0)}if(!k){l=t;n=0;r=0;q=1;break}l=c[k+44>>2]|0;n=Ij(f,k)|0;r=k;q=0}while(0);o=Ja+108|0;k=c[o>>2]|0;p=Ja+112|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=108;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=l;c[Ea+(k*20|0)+12>>2]=u;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else k=Di(Ja,108,v,l,u)|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0)){Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)+1>>0]=-3;c[Ea+(k*20|0)+16>>2]=1}aa:do if(n|0){k=c[Ja>>2]|0;if(!(a[k+81>>0]|0)){k=(c[o>>2]|0)+-1|0;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9;break}else{Ei(Ja,l+(k*20|0)|0,n,-9);break}}if(c[k+480>>2]|0)break;Ea=(c[n>>2]|0)+-1|0;c[n>>2]=Ea;if(Ea|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break aa}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Ea=k+300|0;c[n>>2]=c[Ea>>2];c[Ea>>2]=n;break aa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Ea=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);k=c[(c[z>>2]|0)+8>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=93;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=v;c[Ea+(l*20|0)+8>>2]=k;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,93,v,k,0)|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=117;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=0;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,117,v,0,0)|0;if((a[f+199>>0]|0)!=2)break;do if(q){k=c[w>>2]|0;m=59952;l=59952}else{if(c[s>>2]&32){Ea=r+55|0;k=c[w>>2]|0;if(((d[Ea>>0]|d[Ea+1>>0]<<8)&3)==2){m=59952;l=59952;break}}else k=c[w>>2]|0;m=44411;l=c[r>>2]|0}while(0);c[Ca>>2]=k;c[Ca+4>>2]=m;c[Ca+8>>2]=l;nk(f,0,44393,Ca)}else Fa=1752;while(0);do if((Fa|0)==1752){do if(c[y>>2]|0){ba:do if((n|0)>0){k=0;do{if(c[(c[m+(k<<4)+4>>2]|0)+4>>2]&32|0)break ba;k=k+1|0}while((k|0)<(n|0))}else k=0;while(0);if((k|0)!=(n|0)){m=0;break}m=o+1|0;c[S>>2]=m;k=Ja+108|0;l=c[k>>2]|0;if((c[Ja+112>>2]|0)>(l|0)){c[k>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=70;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=0;c[Ea+(l*20|0)+8>>2]=m;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0;break}else{Di(Ja,70,0,m,0)|0;break}}else m=0;while(0);ul(f,Ma);n=ql(f,ta,C,j,0,x,0)|0;if(!n)break T;tl(f,m,Ma);do if(m|0){k=Ja+108|0;l=c[k>>2]|0;if((c[Ja+112>>2]|0)>(l|0)){c[k>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=70;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=1;c[Fa+(l*20|0)+8>>2]=m;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,70,1,m,0)|0;break}}while(0);do if((a[n+47>>0]|0)>0){k=c[n+36>>2]|0;l=Ja+108|0;m=c[l>>2]|0;if((c[Ja+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[Ja+104>>2]|0;a[Fa+(m*20|0)>>0]=11;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=0;c[Fa+(m*20|0)+8>>2]=k;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break}else{Di(Ja,11,0,k,0)|0;break}}while(0);sl(n);p=c[Oa>>2]|0;if((c[T>>2]|0)<=0)break;q=p+108|0;r=p+112|0;s=p+104|0;n=c[z>>2]|0;o=0;while(1){k=c[(c[n>>2]|0)+20>>2]|0;m=c[n+8>>2]|0;if(!k)l=0;else l=c[k>>2]|0;k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Fa=c[s>>2]|0;a[Fa+(k*20|0)>>0]=-99;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=m;c[Fa+(k*20|0)+8>>2]=l;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(p,157,m,l,0)|0;k=c[n+4>>2]|0;l=c[p>>2]|0;ca:do if(a[l+81>>0]|0){if(!(c[k+4>>2]&16))break;do if(l|0){if(c[l+480>>2]|0){Xd(l,k);break ca}m=k;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Fa=l+300|0;c[k>>2]=c[Fa>>2];c[Fa>>2]=k;break ca}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Fa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else{Ea=c[s>>2]|0;Fa=(c[q>>2]|0)+-1|0;a[Ea+(Fa*20|0)+1>>0]=-8;c[Ea+(Fa*20|0)+16>>2]=k}while(0);o=o+1|0;if((o|0)>=(c[T>>2]|0))break;else n=n+16|0}}while(0);c[La>>2]=0;Tj(f,X,V,16);rl(f,h,-1,0,0,i,V,V);k=Ja+12|0}while(0);l=c[k>>2]|0;k=0-W|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[Ja+108>>2];Fa=1796;break E}while(0);k=1}while(0);if((Fa|0)==1796){if((a[Ga+1>>0]|0)==3){c[Ha>>2]=43109;nk(f,0,44319,Ha)}do if(c[La>>2]|0){r=La+4|0;c[Ia>>2]=(c[r>>2]|0)>0?43127:43150;nk(f,0,44319,Ia);p=c[$>>2]|0;I=c[Oa>>2]|0;H=c[La+24>>2]|0;G=c[_>>2]|0;t=G+-1|0;c[_>>2]=t;q=c[La>>2]|0;E=a[i>>0]|0;x=i+4|0;C=c[x>>2]|0;y=c[h>>2]|0;s=La+16|0;k=c[s>>2]|0;do if(k|0){l=c[La+12>>2]|0;o=I+108|0;m=c[o>>2]|0;n=I+112|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;Ia=c[I+104>>2]|0;a[Ia+(m*20|0)>>0]=12;b[Ia+(m*20|0)+2>>1]=0;c[Ia+(m*20|0)+4>>2]=l;c[Ia+(m*20|0)+8>>2]=k;c[Ia+(m*20|0)+12>>2]=0;c[Ia+(m*20|0)+16>>2]=0;a[Ia+(m*20|0)+1>>0]=0}else Di(I,12,l,k,0)|0;k=c[o>>2]|0;if((c[n>>2]|0)>(k|0)){c[o>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=11;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=0;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else Di(I,11,0,H,0)|0;k=c[I+12>>2]|0;l=~c[s>>2];if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,I,l);break}else{c[(c[k+64>>2]|0)+(l<<2)>>2]=c[o>>2];break}}while(0);F=c[La+8>>2]|0;da:do switch(E<<24>>24){case 9:case 10:case 13:{z=p;A=c[i+8>>2]|0;B=0;break}default:{l=f+19|0;k=a[l>>0]|0;if(!(k<<24>>24)){k=f+44|0;o=(c[k>>2]|0)+1|0;c[k>>2]=o;k=0}else{k=k+-1<<24>>24;a[l>>0]=k;o=c[f+148+((k&255)<<2)>>2]|0}if((E|2)<<24>>24==14)if(!(k<<24>>24)){z=f+44|0;A=(c[z>>2]|0)+1|0;c[z>>2]=A;z=0;B=o;break da}else{A=k+-1<<24>>24;a[l>>0]=A;z=0;A=c[f+148+((A&255)<<2)>>2]|0;B=o;break da}if((p|0)==1)if(!(k<<24>>24)){z=f+44|0;A=(c[z>>2]|0)+1|0;c[z>>2]=A;z=1;B=o;break da}else{A=k+-1<<24>>24;a[l>>0]=A;z=1;A=c[f+148+((A&255)<<2)>>2]|0;B=o;break da}else{k=f+32|0;n=c[k>>2]|0;l=f+28|0;m=c[l>>2]|0;if((m|0)<(p|0)){z=f+44|0;A=c[z>>2]|0;c[z>>2]=A+p;z=p;A=A+1|0;B=o;break da}else{c[k>>2]=n+p;c[l>>2]=m-p;z=p;A=n;B=o;break da}}}}while(0);q=(c[q>>2]|0)-(c[r>>2]|0)|0;D=La+32|0;do if(!(a[D>>0]&1)){n=I+108|0;k=c[n>>2]|0;o=I+112|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=35;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=F;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else k=Di(I,35,F,H,0)|0;l=c[h+16>>2]|0;if((l|0)<=0){l=1;v=F;break}m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;v=c[I+104>>2]|0;a[v+(m*20|0)>>0]=47;b[v+(m*20|0)+2>>1]=0;c[v+(m*20|0)+4>>2]=l;c[v+(m*20|0)+8>>2]=t;c[v+(m*20|0)+12>>2]=1;c[v+(m*20|0)+16>>2]=0;a[v+(m*20|0)+1>>0]=0;l=1;v=F;break}else{Di(I,47,l,t,1)|0;l=1;v=F;break}}else{o=f+44|0;p=(c[o>>2]|0)+1|0;c[o>>2]=p;o=f+40|0;v=c[o>>2]|0;c[o>>2]=v+1;o=I+108|0;do if(c[s>>2]|0){k=c[o>>2]|0;l=I+112|0;if((c[l>>2]|0)>(k|0)){c[o>>2]=k+1;T=c[I+104>>2]|0;a[T+(k*20|0)>>0]=17;T=T+(k*20|0)+1|0;U=T+19|0;do{a[T>>0]=0;T=T+1|0}while((T|0)<(U|0));m=k;n=l;break}else{m=Di(I,17,0,0,0)|0;n=l;break}}else{m=0;n=I+112|0}while(0);k=z+1+q|0;l=c[o>>2]|0;if((c[n>>2]|0)>(l|0)){c[o>>2]=l+1;Ia=c[I+104>>2]|0;a[Ia+(l*20|0)>>0]=116;b[Ia+(l*20|0)+2>>1]=0;c[Ia+(l*20|0)+4>>2]=v;c[Ia+(l*20|0)+8>>2]=p;c[Ia+(l*20|0)+12>>2]=k;c[Ia+(l*20|0)+16>>2]=0;a[Ia+(l*20|0)+1>>0]=0}else Di(I,116,v,p,k)|0;k=c[o>>2]|0;if(m|0){if(!(a[(c[I>>2]|0)+81>>0]|0))l=(c[I+104>>2]|0)+(((m|0)<0?k+-1|0:m)*20|0)|0;else l=59308;c[l+8>>2]=k}if((c[n>>2]|0)>(k|0)){c[o>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=34;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=F;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else k=Di(I,34,F,H,0)|0;l=c[h+16>>2]|0;do if((l|0)>0){m=c[o>>2]|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;h=c[I+104>>2]|0;a[h+(m*20|0)>>0]=47;b[h+(m*20|0)+2>>1]=0;c[h+(m*20|0)+4>>2]=l;c[h+(m*20|0)+8>>2]=t;c[h+(m*20|0)+12>>2]=1;c[h+(m*20|0)+16>>2]=0;a[h+(m*20|0)+1>>0]=0;break}else{Di(I,47,l,t,1)|0;break}}while(0);l=c[o>>2]|0;if((c[n>>2]|0)>(l|0)){c[o>>2]=l+1;h=c[I+104>>2]|0;a[h+(l*20|0)>>0]=126;b[h+(l*20|0)+2>>1]=0;c[h+(l*20|0)+4>>2]=F;c[h+(l*20|0)+8>>2]=p;c[h+(l*20|0)+12>>2]=v;c[h+(l*20|0)+16>>2]=0;a[h+(l*20|0)+1>>0]=0;l=0;break}else{Di(I,126,F,p,v)|0;l=0;break}}while(0);w=k+1|0;u=l+q|0;if((z|0)>0){k=0;l=u+-1|0;do{l=l+((b[y+4+(k*20|0)+16>>1]|0)==0&1)|0;k=k+1|0}while((k|0)!=(z|0));r=I+108|0;s=I+112|0;t=I+104|0;q=z;while(1){m=q;q=q+-1|0;k=b[y+4+(q*20|0)+16>>1]|0;n=k<<16>>16==0;k=n?l:(k&65535)+-1|0;o=q+A|0;p=c[r>>2]|0;if((c[s>>2]|0)>(p|0)){c[r>>2]=p+1;h=c[t>>2]|0;a[h+(p*20|0)>>0]=90;b[h+(p*20|0)+2>>1]=0;c[h+(p*20|0)+4>>2]=v;c[h+(p*20|0)+8>>2]=k;c[h+(p*20|0)+12>>2]=o;c[h+(p*20|0)+16>>2]=0;a[h+(p*20|0)+1>>0]=0}else Di(I,90,v,k,o)|0;if((m|0)<=1)break;else l=l+(n<<31>>31)|0}}ea:do switch(E<<24>>24){case 12:case 14:{l=I+108|0;k=c[l>>2]|0;m=I+112|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=90;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=v;c[i+(k*20|0)+8>>2]=u;c[i+(k*20|0)+12>>2]=A;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,90,v,u,A)|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=121;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=B;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,121,C,B,0)|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=122;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=A;c[i+(k*20|0)+12>>2]=B;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,122,C,A,B)|0;k=c[l>>2]|0;if((k|0)<=0)break ea;b[(c[I+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=8;break}case 11:{o=c[i+16>>2]|0;p=I+108|0;k=c[p>>2]|0;q=I+112|0;if((c[q>>2]|0)>(k|0)){c[p>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=92;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=A;c[i+(k*20|0)+8>>2]=z;c[i+(k*20|0)+12>>2]=B;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(I,92,A,z,B)|0;l=c[I>>2]|0;fa:do if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[p>>2]|0)+-1|0;l=c[I+104>>2]|0;m=l+(k*20|0)|0;do if((z|0)<=-1){n=l+(k*20|0)+1|0;if(a[n>>0]|0)break;if((z|0)==-3){c[l+(k*20|0)+16>>2]=o;a[n>>0]=-3;break fa}if(!o)break fa;c[l+(k*20|0)+16>>2]=o;a[n>>0]=z;if((z|0)!=-12)break fa;i=o+12|0;c[i>>2]=(c[i>>2]|0)+1;break fa}while(0);Ei(I,m,o,z)}else{if((z|0)==-12)break;kg(l,z,o)}while(0);k=c[p>>2]|0;if((c[q>>2]|0)>(k|0)){c[p>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=-124;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=B;c[i+(k*20|0)+12>>2]=A;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(I,132,C,B,A)|0;if(a[(c[I>>2]|0)+81>>0]|0)break ea;i=c[I+104>>2]|0;a[i+(k*20|0)+1>>0]=-3;c[i+(k*20|0)+16>>2]=z;break}case 10:break;case 9:{k=c[i+8>>2]|0;l=I+108|0;m=c[l>>2]|0;if((c[I+112>>2]|0)>(m|0)){c[l>>2]=m+1;i=c[I+104>>2]|0;a[i+(m*20|0)>>0]=81;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=k;c[i+(m*20|0)+8>>2]=z;c[i+(m*20|0)+12>>2]=0;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break ea}else{Di(I,81,k,z,0)|0;break ea}}default:{k=c[x>>2]|0;l=I+108|0;m=c[l>>2]|0;if((c[I+112>>2]|0)>(m|0)){c[l>>2]=m+1;i=c[I+104>>2]|0;a[i+(m*20|0)>>0]=14;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=k;c[i+(m*20|0)+8>>2]=0;c[i+(m*20|0)+12>>2]=0;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break ea}else{Di(I,14,k,0,0)|0;break ea}}}while(0);do if(B|0){if(E<<24>>24!=11){l=f+19|0;k=a[l>>0]|0;if(A){if((k&255)>=8)break;i=k+1<<24>>24;a[l>>0]=i;c[f+148+((k&255)<<2)>>2]=A;k=i}if((k&255)>=8)break;a[l>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=B;break}do if((z|0)==1){if(!A)break;k=f+19|0;l=a[k>>0]|0;if((l&255)>=8)break;a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=A}else{k=f+28|0;if((c[k>>2]|0)>=(z|0))break;c[k>>2]=z;c[f+32>>2]=A}while(0);k=f+19|0;l=a[k>>0]|0;if((l&255)>=8)break;a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=B}while(0);o=I+12|0;l=c[o>>2]|0;k=0-G|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0){mk(l,I,k);n=I+108|0}else{n=I+108|0;c[(c[l+64>>2]|0)+(k<<2)>>2]=c[n>>2]}k=c[n>>2]|0;m=I+112|0;l=(c[m>>2]|0)>(k|0);do if(!(a[D>>0]&1))if(l){c[n>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=5;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=F;c[i+(k*20|0)+8>>2]=w;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;break}else{Di(I,5,F,w,0)|0;break}else if(l){c[n>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=3;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=F;c[i+(k*20|0)+8>>2]=w;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;break}else{Di(I,3,F,w,0)|0;break}while(0);k=c[La+12>>2]|0;do if(k|0){l=c[n>>2]|0;if((c[m>>2]|0)>(l|0)){c[n>>2]=l+1;i=c[I+104>>2]|0;a[i+(l*20|0)>>0]=66;b[i+(l*20|0)+2>>1]=0;c[i+(l*20|0)+4>>2]=k;c[i+(l*20|0)+8>>2]=0;c[i+(l*20|0)+12>>2]=0;c[i+(l*20|0)+16>>2]=0;a[i+(l*20|0)+1>>0]=0;break}else{Di(I,66,k,0,0)|0;break}}while(0);l=c[o>>2]|0;k=~H;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0){mk(l,I,k);break}else{c[(c[l+64>>2]|0)+(k<<2)>>2]=c[n>>2];break}}while(0);l=c[Ja+12>>2]|0;k=0-aa|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[Ja+108>>2];k=(c[Ka>>2]|0)>0&1}if(!j){m=k;break c}ri(Na,j);m=k;break c}else w=j;while(0);y=c[f>>2]|0;c[Da>>2]=c[i>>2];c[Da+4>>2]=c[i+4>>2];c[Da+8>>2]=c[i+8>>2];c[Da+12>>2]=c[i+12>>2];c[Da+16>>2]=c[i+16>>2];c[Da+20>>2]=c[i+20>>2];j=(c[w+48>>2]|0)==0;ga:do if(j?(ka=w+60|0,(c[ka>>2]|0)==0):0){j=c[Oa>>2]|0;ha:do if(!j){if((c[f+116>>2]|0)==0?(b[y+76>>1]&8)==0:0)a[f+23>>0]=1;ia:do if(c[y+272>>2]|0)if(!(a[y+81>>0]|0))Fa=393;else{x=0;break ha}else{do if((e[y+276>>1]|0)>=224){j=y+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Na=y+284|0;c[Na>>2]=(c[Na>>2]|0)+1;break ia}j=y+296|0;k=c[j>>2]|0;if(!k){j=y+292|0;break}else{c[j>>2]=c[k>>2];Na=y+284|0;c[Na>>2]=(c[Na>>2]|0)+1;break ia}}else j=y+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=393}while(0);if((Fa|0)==393)k=_d(y,224,0)|0;if(!k)x=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=y;j=y+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;x=k}}else x=j;while(0);if((a[Da>>0]|0)==12){j=c[Da+4>>2]|0;k=c[c[h>>2]>>2]|0;l=x+108|0;m=c[l>>2]|0;if((c[x+112>>2]|0)>(m|0)){c[l>>2]=m+1;Na=c[x+104>>2]|0;a[Na+(m*20|0)>>0]=113;b[Na+(m*20|0)+2>>1]=0;c[Na+(m*20|0)+4>>2]=j;c[Na+(m*20|0)+8>>2]=k;c[Na+(m*20|0)+12>>2]=0;c[Na+(m*20|0)+16>>2]=0;a[Na+(m*20|0)+1>>0]=0}else Di(x,113,j,k,0)|0;a[Da>>0]=14}j=c[za>>2]|0;if(j&1024|0){n=(c[h+60>>2]|0)==0;l=n&1;j=h;k=1;while(1){m=c[j+52>>2]|0;if(!m)break;else{j=m;k=k+l|0}}c[ga>>2]=k;c[ga+4>>2]=(k|0)==1?59952:43321;nk(f,0,43298,ga);k=k&65535;if(!n){rl(f,j,-1,0,0,Da,1,1);k=0;j=0;Fa=640;break}while(1){rl(f,j,-1,0,0,Da,1,1);b[j+6>>1]=k;j=c[j+56>>2]|0;if(!j){k=0;j=0;Fa=640;break ga}}}do if(!(j&8192)){if(c[S>>2]|0){m=Bl(f,h,i)|0;break ga}if(!(c[w+52>>2]|0)){nk(f,1,43243,ea);nk(f,1,43258,fa)}p=h+4|0;switch(a[p>>0]|0){case -128:{o=h+12|0;k=w+12|0;c[k>>2]=c[o>>2];m=h+16|0;l=w+16|0;c[l>>2]=c[m>>2];Na=h+60|0;c[ka>>2]=c[Na>>2];j=kj(f,w,Da)|0;c[Na>>2]=0;if(j|0){k=0;Fa=640;break ga}c[ca>>2]=0;k=c[k>>2]|0;c[o>>2]=k;c[m>>2]=c[l>>2];do if(k){p=x+108|0;j=c[p>>2]|0;q=x+112|0;if((c[q>>2]|0)>(j|0)){c[p>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=20;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=k;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,20,k,0,0)|0;n=c[m>>2]|0;if(!n){u=j;break}k=c[o>>2]|0;l=n+1|0;m=c[p>>2]|0;if((c[q>>2]|0)>(m|0)){c[p>>2]=m+1;u=c[x+104>>2]|0;a[u+(m*20|0)>>0]=-104;b[u+(m*20|0)+2>>1]=0;c[u+(m*20|0)+4>>2]=k;c[u+(m*20|0)+8>>2]=l;c[u+(m*20|0)+12>>2]=n;c[u+(m*20|0)+16>>2]=0;a[u+(m*20|0)+1>>0]=0;u=j;break}else{Di(x,152,k,l,n)|0;u=j;break}}else u=0;while(0);nk(f,1,41509,ia);j=kj(f,h,Da)|0;n=c[ca>>2]|0;c[ca>>2]=w;t=h+6|0;k=b[t>>1]|0;l=b[w+6>>1]|0;m=k<<16>>16;o=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(o|0)){k=l;break}if((m+31|0)<(o|0)){k=o+1&65535;break}else{k=(d[18112+(o-m)>>0]|0)+o&65535;break}}else{if((o+49|0)<(m|0))break;if((o+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-o)>>0]|0)+m&65535;break}}while(0);b[t>>1]=k;k=c[ka>>2]|0;do if(k|0){Na=(uk(c[k+12>>2]|0,Ea)|0)!=0;k=c[Ea>>2]|0;if(!(Na&(k|0)>0))break;r=b[t>>1]|0;l=((k|0)<0)<<31>>31;s=k>>>0<8;do if(s){if(k>>>0<2){m=0;break}m=40;p=k;o=l;do{m=(m&65535)+65526|0;p=cw(p|0,o|0,1)|0;o=L()|0}while(o>>>0<0|(o|0)==0&p>>>0<8);o=m&65535;m=p;Fa=450}else{if(k>>>0>255){m=40;q=k;o=l;do{m=(m&65535)+40|0;Na=q;q=bw(q|0,o|0,4)|0;Ma=o;o=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>4095);p=m&65535;m=q}else{p=40;o=l;m=k}if(!(o>>>0>0|(o|0)==0&m>>>0>15)){o=p;Fa=450;break}do{p=(p&65535)+10&65535;Na=m;m=bw(m|0,o|0,1)|0;Ma=o;o=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>31);o=p;Fa=450}while(0);if((Fa|0)==450)m=(o&65535)+65526+(e[3648+((m&7)<<1)>>1]|0)&65535;if(r<<16>>16<=m<<16>>16)break;do if(s){if(k>>>0<2){k=0;break}m=40;do{m=(m&65535)+65526|0;k=cw(k|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&k>>>0<8);m=m&65535;Fa=465}else{if(k>>>0>255){m=40;do{m=(m&65535)+40|0;Na=k;k=bw(k|0,l|0,4)|0;Ma=l;l=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>4095);m=m&65535}else m=40;if(!(l>>>0>0|(l|0)==0&k>>>0>15)){Fa=465;break}do{m=(m&65535)+10&65535;Na=k;k=bw(k|0,l|0,1)|0;Ma=l;l=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>31);Fa=465}while(0);if((Fa|0)==465)k=(m&65535)+65526+(e[3648+((k&7)<<1)>>1]|0)&65535;b[t>>1]=k}while(0);if(u|0){l=c[x+108>>2]|0;if(!(a[(c[x>>2]|0)+81>>0]|0))k=(c[x+104>>2]|0)+(((u|0)<0?l+-1|0:u)*20|0)|0;else k=59308;c[k+8>>2]=l}break}case 127:case -127:{if((a[Da>>0]|0)==1)s=c[Da+4>>2]|0;else{k=f+40|0;l=c[k>>2]|0;c[k>>2]=l+1;k=x+108|0;j=c[k>>2]|0;if((c[x+112>>2]|0)>(j|0)){c[k>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=l;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,l,0,0)|0;c[h+24>>2]=j;j=h;while(1){k=c[j+56>>2]|0;if(!k)break;else j=k}s=j+8|0;c[s>>2]=c[s>>2]|32;s=l}a[Ea>>0]=1;c[Ea+4>>2]=s;c[Ea+16>>2]=0;c[Ea+8>>2]=0;c[Ea+12>>2]=0;j=kj(f,w,Ea)|0;if(j|0){k=0;Fa=640;break ga}Na=a[p>>0]|0;c[ca>>2]=0;q=h+60|0;r=c[q>>2]|0;c[q>>2]=0;a[Ea>>0]=Na<<24>>24==-127?2:1;switch(Na<<24>>24){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ha>>2]=j;nk(f,1,43277,ha);j=kj(f,h,Ea)|0;k=c[S>>2]|0;if(k|0)ri(y,k);n=c[ca>>2]|0;c[ca>>2]=w;c[S>>2]=0;if((a[p>>0]|0)==127){p=h+6|0;k=b[p>>1]|0;l=b[w+6>>1]|0;m=k<<16>>16;o=l<<16>>16;do if(k<<16>>16<l<<16>>16){if((m+49|0)<(o|0)){k=l;break}if((m+31|0)<(o|0)){k=o+1&65535;break}else{k=(d[18112+(o-m)>>0]|0)+o&65535;break}}else{if((o+49|0)<(m|0))break;if((o+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-o)>>0]|0)+m&65535;break}}while(0);b[p>>1]=k}k=c[q>>2]|0;if(k|0)ni(y,k);c[q>>2]=r;c[h+12>>2]=0;c[h+16>>2]=0;do if((a[Da>>0]|0)!=1){q=f+56|0;p=c[q>>2]|0;l=p+-1|0;m=p+-2|0;c[q>>2]=m;pl(f,h,l);q=x+108|0;k=c[q>>2]|0;r=x+112|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=36;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=l;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,36,s,l,0)|0;o=c[q>>2]|0;rl(f,h,s,0,0,Da,m,l);m=x+12|0;k=c[m>>2]|0;l=1-p|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,x,l);else c[(c[k+64>>2]|0)+(l<<2)>>2]=c[q>>2];k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=5;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=o;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,5,s,o,0)|0;l=c[m>>2]|0;k=0-p|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,x,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[q>>2];k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0;break}else{Di(x,117,s,0,0)|0;break}}while(0);break}default:{u=f+40|0;t=c[u>>2]|0;s=t+1|0;c[u>>2]=t+2;u=x+108|0;j=c[u>>2]|0;v=x+112|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=t;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,t,0,0)|0;c[h+24>>2]=j;j=h;while(1){k=c[j+56>>2]|0;if(!k)break;else j=k}k=j+8|0;c[k>>2]=c[k>>2]|32;a[Ea>>0]=1;k=Ea+4|0;c[k>>2]=t;c[Ea+16>>2]=0;c[Ea+8>>2]=0;c[Ea+12>>2]=0;j=kj(f,w,Ea)|0;if(j|0){k=0;Fa=640;break ga}j=c[u>>2]|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=s;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,s,0,0)|0;c[h+28>>2]=j;c[ca>>2]=0;m=h+60|0;o=c[m>>2]|0;c[m>>2]=0;c[k>>2]=s;switch(a[p>>0]|0){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ja>>2]=j;nk(f,1,43277,ja);j=kj(f,h,Ea)|0;n=c[ca>>2]|0;c[ca>>2]=w;l=h+6|0;k=b[w+6>>1]|0;if((b[l>>1]|0)>k<<16>>16)b[l>>1]=k;k=c[m>>2]|0;if(k|0)ni(y,k);c[m>>2]=o;k=f+56|0;r=c[k>>2]|0;o=r+-1|0;p=r+-2|0;c[k>>2]=p;pl(f,h,o);k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=36;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=o;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,36,t,o,0)|0;m=f+19|0;k=a[m>>0]|0;if(!(k<<24>>24)){Na=f+44|0;l=(c[Na>>2]|0)+1|0;c[Na>>2]=l}else{l=k+-1<<24>>24;a[m>>0]=l;l=c[f+148+((l&255)<<2)>>2]|0}k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;q=c[x+104>>2]|0;a[q+(k*20|0)>>0]=127;b[q+(k*20|0)+2>>1]=0;c[q+(k*20|0)+4>>2]=t;c[q+(k*20|0)+8>>2]=l;c[q+(k*20|0)+12>>2]=0;c[q+(k*20|0)+16>>2]=0;a[q+(k*20|0)+1>>0]=0;q=k}else q=Di(x,127,t,l,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=28;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=p;c[Na+(k*20|0)+12>>2]=l;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else k=Di(x,28,s,p,l)|0;if(!(a[(c[x>>2]|0)+81>>0]|0)){Na=c[x+104>>2]|0;a[Na+(k*20|0)+1>>0]=-3;c[Na+(k*20|0)+16>>2]=0}do if(l|0){k=a[m>>0]|0;if((k&255)>=8)break;a[m>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=l}while(0);rl(f,h,t,0,0,Da,p,o);m=x+12|0;k=c[m>>2]|0;l=1-r|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,x,l);else c[(c[k+64>>2]|0)+(l<<2)>>2]=c[u>>2];k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=5;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=q;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,5,t,q,0)|0;l=c[m>>2]|0;k=0-r|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,x,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[u>>2];k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,117,s,0,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,117,t,0,0)|0}}if(c[h+56>>2]|0)break;m=f+212|0;k=c[m>>2]|0;if(!k)k=0;else{l=c[Oa>>2]|0;if((k|0)<0)k=(c[l+108>>2]|0)+-1|0;if(!(a[(c[l>>2]|0)+81>>0]|0))k=(c[l+104>>2]|0)+(k*20|0)|0;else k=59308;k=c[k+8>>2]|0}c[m>>2]=k}else{Al(f,h,Da);j=0;n=0}while(0);if(c[za>>2]&32){w=c[c[h>>2]>>2]|0;o=w+1|0;p=o*5|0;m=p+20|0;q=y+272|0;ja:do if(c[q>>2]|0)if(!(a[y+81>>0]|0))Fa=589;else{k=n;j=7;Fa=640;break ga}else{do if(!(0<0|(0==0?(e[y+276>>1]|0)>>>0<m>>>0:0))){k=y+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];v=y+284|0;c[v>>2]=(c[v>>2]|0)+1;v=l;break ja}k=y+296|0;l=c[k>>2]|0;if(!l){k=y+292|0;break}else{c[k>>2]=c[l>>2];v=y+284|0;c[v>>2]=(c[v>>2]|0)+1;v=l;break ja}}else k=y+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=589}while(0);if((Fa|0)==589)v=_d(y,m,0)|0;if(!v){k=y+81|0;do if(!(a[k>>0]|0)){if(a[y+82>>0]|0)break;a[k>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[y+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);if(!v){k=n;j=7;Fa=640;break}else{u=0;t=1}}else{c[v+16>>2]=v+20+(o<<2);b[v+6>>1]=w;b[v+8>>1]=o;a[v+4>>0]=a[y+78>>0]|0;c[v+12>>2]=y;c[v>>2]=1;gw(v+24|0,0,p+-4|0)|0;u=v;t=0}if((w|0)>0){m=y+8|0;k=v+20|0;l=0;while(1){Na=Cl(f,h,l)|0;c[k>>2]=Na;if(!Na)c[k>>2]=c[m>>2];l=l+1|0;if((l|0)==(w|0))break;else k=k+4|0}}q=x+104|0;r=u+12|0;s=u;p=h;do{o=p+24|0;m=c[o>>2]|0;k=(m|0)<0;do if(t){if(k)break;do if(!(a[(c[x>>2]|0)+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;if(!(a[k+(m*20|0)+1>>0]|0))break;Ei(x,k+(m*20|0)|0,u,-9)}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1}while(0);c[o>>2]=-1;k=p+28|0;l=c[k>>2]|0;if((l|0)<0)break;do if(!(a[(c[x>>2]|0)+81>>0]|0)){m=c[q>>2]|0;c[m+(l*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;if(!(a[m+(l*20|0)+1>>0]|0))break;Ei(x,m+(l*20|0)|0,u,-9)}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1}while(0);c[k>>2]=-1}else{if(k)break;k=c[x>>2]|0;ka:do if(!(a[k+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;l=k+(m*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(m*20|0)+16>>2]=u;a[l>>0]=-9;break}else{Ei(x,k+(m*20|0)|0,u,-9);break}}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1;if(c[k+480>>2]|0)break;Na=(c[u>>2]|0)+-1|0;c[u>>2]=Na;if(Na|0)break;k=c[r>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);break ka}if((c[k+304>>2]|0)>>>0>s>>>0)break;if((c[k+308>>2]|0)>>>0<=s>>>0)break;Na=k+300|0;c[u>>2]=c[Na>>2];c[Na>>2]=u;break ka}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Na=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);c[o>>2]=-1;o=p+28|0;m=c[o>>2]|0;if((m|0)<0)break;k=c[x>>2]|0;la:do if(!(a[k+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;l=k+(m*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(m*20|0)+16>>2]=u;a[l>>0]=-9;break}else{Ei(x,k+(m*20|0)|0,u,-9);break}}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1;if(c[k+480>>2]|0)break;Na=(c[u>>2]|0)+-1|0;c[u>>2]=Na;if(Na|0)break;k=c[r>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);break la}if((c[k+304>>2]|0)>>>0>s>>>0)break;if((c[k+308>>2]|0)>>>0<=s>>>0)break;Na=k+300|0;c[u>>2]=c[Na>>2];c[Na>>2]=u;break la}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Na=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);c[o>>2]=-1}while(0);p=c[p+52>>2]|0}while((p|0)!=0);Na=(c[v>>2]|0)+-1|0;c[v>>2]=Na;if(Na|0){k=n;Fa=640;break}k=c[v+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);k=n;Fa=640;break ga}l=v;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;k=k+300|0;c[v>>2]=c[k>>2];c[k>>2]=v;k=n;Fa=640;break ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);k=n;Fa=640;break}else{k=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);k=n;Fa=640;break}}else{k=n;Fa=640}}else Fa=374;while(0);if((Fa|0)==374){k=j?43237:43150;switch(a[h+4>>0]|0){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ba>>2]=k;c[ba+4>>2]=j;cd(f,43195,ba);k=0;j=1;Fa=640}if((Fa|0)==640){c[i+8>>2]=c[Da+8>>2];c[i+12>>2]=c[Da+12>>2];if(!k)m=j;else{pi(y,k,1);m=j}}if(c[h+56>>2]|0){Oa=m;Ra=Pa;return Oa|0}l=f+212|0;j=c[l>>2]|0;if(!j)j=0;else{k=c[Oa>>2]|0;if((j|0)<0)j=(c[k+108>>2]|0)+-1|0;if(!(a[(c[k>>2]|0)+81>>0]|0))j=(c[k+104>>2]|0)+(j*20|0)|0;else j=59308;j=c[j+8>>2]|0}c[l>>2]=j;Oa=m;Ra=Pa;return Oa|0}else m=1;while(0);j=c[Ma+28>>2]|0;do if(j|0){if(Na|0){if(c[Na+480>>2]|0){Xd(Na,j);break}i=j;if((c[Na+304>>2]|0)>>>0<=i>>>0?(c[Na+308>>2]|0)>>>0>i>>>0:0){i=Na+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[Ma+40>>2]|0;do if(j|0){if(Na|0){if(c[Na+480>>2]|0){Xd(Na,j);break}i=j;if((c[Na+304>>2]|0)>>>0<=i>>>0?(c[Na+308>>2]|0)>>>0>i>>>0:0){i=Na+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);l=f+212|0;j=c[l>>2]|0;if(!j)j=0;else{k=c[Oa>>2]|0;if((j|0)<0)j=(c[k+108>>2]|0)+-1|0;if(!(a[(c[k>>2]|0)+81>>0]|0))j=(c[k+104>>2]|0)+(j*20|0)|0;else j=59308;j=c[j+8>>2]|0}c[l>>2]=j;Oa=m;Ra=Pa;return Oa|0}function lj(b,f,g,h,i,j,k,l){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;m=s;r=c[b>>2]|0;do if(!f){f=(k|0)!=0;if(f|(l|0)!=0){c[m>>2]=f?44504:44507;cd(b,44468,m);break}else{q=pj(b,0,g,h)|0;n=6;break}}else{q=pj(b,f,g,h)|0;n=6}while(0);if((n|0)==6?q|0:0){o=(c[q>>2]|0)+-1|0;a:do if((d[b+200>>0]|0)>1?(p=c[q+8+(o*72|0)+8>>2]|0,p|0):0){if(!((h|0)!=0?(c[h>>2]|0)!=0:0))h=g;g=c[b>>2]|0;b:do if(!g){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](16)|0;n=35;break}f=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;g=59064;m=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&m>>>0>0){t=c[14978]|0;g=Tv(m|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&g>>>0<=t>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f)break a;m=Wa[c[29352>>2]&127](f)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}else{if(c[g+272>>2]|0){if(a[g+81>>0]|0)break a}else{do if((e[g+276>>1]|0)>=16){m=g+300|0;f=c[m>>2]|0;if(f|0){c[m>>2]=c[f>>2];n=g+284|0;c[n>>2]=(c[n>>2]|0)+1;n=35;break b}m=g+296|0;f=c[m>>2]|0;if(!f){f=g+292|0;break}else{c[m>>2]=c[f>>2];n=g+284|0;c[n>>2]=(c[n>>2]|0)+1;n=35;break b}}else f=g+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(g,16,0)|0;n=35}while(0);if((n|0)==35)if(!f)break;m=f+4|0;g=m+12|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(g|0));c[f>>2]=p;n=h;p=c[n+4>>2]|0;t=f+4|0;c[t>>2]=c[n>>2];c[t+4>>2]=p;t=b+272|0;c[f+12>>2]=c[t>>2];c[t>>2]=f}while(0);if(c[i+4>>2]|0){t=qj(r,i)|0;c[q+8+(o*72|0)+12>>2]=t}c[q+8+(o*72|0)+20>>2]=j;c[q+8+(o*72|0)+44>>2]=k;c[q+8+(o*72|0)+48>>2]=l;t=q;Ra=s;return t|0}if(k|0)ni(r,k);do if(l|0){b=l+4|0;f=c[l>>2]|0;c:do if((c[b>>2]|0)>0){g=r+480|0;h=r+304|0;n=r+308|0;o=r+300|0;if(!r){m=0;while(1){f=c[f+(m<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);m=m+1|0;f=c[l>>2]|0;if((m|0)>=(c[b>>2]|0))break c}}m=0;do{f=c[f+(m<<3)>>2]|0;do if(f|0){if(c[g>>2]|0){Xd(r,f);break}t=f;if((c[h>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[f>>2]=c[o>>2];c[o>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);m=m+1|0;f=c[l>>2]|0}while((m|0)<(c[b>>2]|0))}while(0);d:do if(f){do if(r|0){m=r+480|0;if(!(c[m>>2]|0)){g=f;if((c[r+304>>2]|0)>>>0>g>>>0)break;if((c[r+308>>2]|0)>>>0<=g>>>0)break;t=r+300|0;c[f>>2]=c[t>>2];c[t>>2]=f}else Xd(r,f);f=m;n=75;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);n=73;break}else{n=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);n=73;break}}else n=73;while(0);if((n|0)==73)if(r){f=r+480|0;n=75}if((n|0)==75){if(c[f>>2]|0){Xd(r,l);break}t=l;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){t=r+300|0;c[l>>2]=c[t>>2];c[t>>2]=l;break}}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!j){t=0;Ra=s;return t|0}pi(r,j,1);t=0;Ra=s;return t|0}function mj(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+96|0;q=t+80|0;s=t;p=c[d>>2]|0;a:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))r=11;else n=0;else{do if((e[p+276>>1]|0)>=76){o=p+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}o=p+296|0;n=c[o>>2]|0;if(!n){n=p+292|0;break}else{c[o>>2]=c[n>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}}else n=p+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;r=11}while(0);if((r|0)==11)n=_d(p,76,0)|0;o=(n|0)==0?s:n;if(!f){f=c[d>>2]|0;c[q>>2]=0;c[q+4>>2]=0;f=oj(f,172,q,0)|0;f=nj(c[d>>2]|0,0,f)|0}c[o>>2]=f;a[o+4>>0]=-125;c[o+8>>2]=l;c[o+12>>2]=0;c[o+16>>2]=0;q=d+100|0;l=(c[q>>2]|0)+1|0;c[q>>2]=l;c[o+20>>2]=l;c[o+24>>2]=-1;c[o+28>>2]=-1;b[o+6>>1]=0;if(!g){n=c[d>>2]|0;b:do if(!n){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](80)|0;r=38;break}g=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;n=59064;f=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&f>>>0>0){l=c[14978]|0;q=Tv(f|0,n|0,g|0,((g|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=l>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;r=39}else r=39}else g=0}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0){g=0;break}}else{do if((e[n+276>>1]|0)>=80){f=n+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=38;break b}f=n+296|0;g=c[f>>2]|0;if(!g){g=n+292|0;break}else{c[f>>2]=c[g>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=38;break b}}else g=n+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(n,80,0)|0;r=38}while(0);if((r|0)==38)if(!g)g=0;else r=39;if((r|0)==39){f=g;n=f+80|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(n|0))}}c[o+32>>2]=g;c[o+36>>2]=h;c[o+40>>2]=i;c[o+44>>2]=j;c[o+48>>2]=k;c[o+52>>2]=0;c[o+56>>2]=0;c[o+60>>2]=m;c[o+64>>2]=0;c[o+68>>2]=0;c[o+72>>2]=0;g=c[d>>2]|0;if(!(a[g+81>>0]|0)){s=o;Ra=t;return s|0}pi(g,o,(o|0)!=(s|0)&1);s=0;Ra=t;return s|0}function nj(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;a:do if(!d){b:do if(c[b+272>>2]|0)if(!(a[b+81>>0]|0))i=12;else{d=0;break a}else{do if((e[b+276>>1]|0)>=24){g=b+300|0;d=c[g>>2]|0;if(d|0){c[g>>2]=c[d>>2];h=b+284|0;c[h>>2]=(c[h>>2]|0)+1;break b}g=b+296|0;d=c[g>>2]|0;if(!d){d=b+292|0;break}else{c[g>>2]=c[d>>2];h=b+284|0;c[h>>2]=(c[h>>2]|0)+1;break b}}else d=b+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;i=12}while(0);if((i|0)==12)d=_d(b,24,0)|0;if(d){c[d>>2]=0;i=20}}else{g=c[d>>2]|0;if(!(g+-1&g)){h=Yv(g|0,((g|0)<0)<<31>>31|0,40,0)|0;g=L()|0;h=h|4;j=d;if(((c[b+304>>2]|0)>>>0<=j>>>0?(c[b+308>>2]|0)>>>0>j>>>0:0)?!(g>>>0>0|((g|0)==0?h>>>0>(e[b+276>>1]|0)>>>0:0)):0){i=20;break}g=Zd(b,d,h,g)|0;if(g){d=g;i=20}}else i=20}while(0);if((i|0)==20){j=c[d>>2]|0;c[d>>2]=j+1;i=d+4+(j*20|0)+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[d+4+(j*20|0)>>2]=f;j=d;return j|0}if(f|0)ni(b,f);if(!d){j=0;return j|0}ri(b,d);j=0;return j|0}function oj(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;n=t;c[n>>2]=0;o=(g|0)!=0;do if(o){if(((f|0)==147?(i=c[g>>2]|0,i|0):0)?ii(i,n)|0:0){m=0;break}m=(c[g+4>>2]|0)+1|0}else m=0;while(0);k=m+52|0;a:do if(c[d+272>>2]|0)if(!(a[d+81>>0]|0))l=16;else{s=0;Ra=t;return s|0}else{do if(!(0<0|(0==0?(e[d+276>>1]|0)>>>0<k>>>0:0))){i=d+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];p=d+284|0;c[p>>2]=(c[p>>2]|0)+1;p=j;break a}i=d+296|0;j=c[i>>2]|0;if(!j){i=d+292|0;break}else{c[i>>2]=c[j>>2];p=d+284|0;c[p>>2]=(c[p>>2]|0)+1;p=j;break a}}else i=d+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;l=16}while(0);if((l|0)==16)p=_d(d,k,0)|0;if(!p){s=p;Ra=t;return s|0}i=p;j=i+52|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));a[p>>0]=f;b[p+34>>1]=-1;do if(o){if(!m){c[p+4>>2]=8389632;c[p+8>>2]=c[n>>2];break}k=p+52|0;d=p+8|0;c[d>>2]=k;i=g+4|0;j=c[i>>2]|0;if(!j)i=0;else{ew(k|0,c[g>>2]|0,j|0)|0;i=c[i>>2]|0}a[k+i>>0]=0;if(((h|0?(s=c[d>>2]|0,q=a[s>>0]|0,(a[880+(q&255)>>0]|0)<0):0)?(h=p+4|0,c[h>>2]=(q<<24>>24==34?67108928:67108864)|c[h>>2],s|0):0)?(r=a[s>>0]|0,(a[880+(r&255)>>0]|0)<0):0){d=r<<24>>24==91?93:r;k=0;i=1;while(1){j=a[s+i>>0]|0;if(j<<24>>24==d<<24>>24){i=i+1|0;j=s+k|0;if((a[s+i>>0]|0)!=d<<24>>24)break;a[j>>0]=d}else a[s+k>>0]=j;k=k+1|0;i=i+1|0}a[j>>0]=0}}while(0);c[p+24>>2]=1;s=p;Ra=t;return s|0}function pj(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o;n=c[b>>2]|0;do if(!d){a:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))j=12;else{n=0;Ra=o;return n|0}else{do if((e[n+276>>1]|0)>=80){h=n+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;break a}h=n+296|0;i=c[h>>2]|0;if(!i){h=n+292|0;break}else{c[h>>2]=c[i>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=12}while(0);if((j|0)==12)i=_d(n,80,0)|0;if(!i){n=0;Ra=o;return n|0}else{c[i+4>>2]=1;c[i>>2]=1;j=i+8|0;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));b=i;h=i+48|0;break}}else{m=c[d>>2]|0;h=m+1|0;b:do if(h>>>0>(c[d+4>>2]|0)>>>0){i=cw(m|0,((m|0)<0)<<31>>31|0,1)|0;j=L()|0;i=i|1;do if((h|0)>199){c[k>>2]=200;cd(b,43159,k)}else{h=(j|0)<0|(j|0)==0&i>>>0<200;b=h?i:200;h=Yv(b|0,(h?j:0)|0,72,0)|0;h=Sv(h|0,L()|0,8,0)|0;i=L()|0;l=d;if(((c[n+304>>2]|0)>>>0<=l>>>0?(c[n+308>>2]|0)>>>0>l>>>0:0)?!(i>>>0>0|((i|0)==0?h>>>0>(e[n+276>>1]|0)>>>0:0)):0)h=d;else{h=Zd(n,d,h,i)|0;if(!h)break}c[h+4>>2]=b;i=c[h>>2]|0;if((i|0)<=(m|0)){l=h;b=h;h=i;break b}do{j=h+8+(i*72|0)|0;i=i+-1|0;b=h+8+(i*72|0)|0;k=j+72|0;do{c[j>>2]=c[b>>2];j=j+4|0;b=b+4|0}while((j|0)<(k|0))}while((i|0)>(m|0));l=h;b=h;h=c[h>>2]|0;break b}while(0);qi(n,d);n=0;Ra=o;return n|0}else{l=d;b=d;h=m}while(0);c[b>>2]=h+1;j=l+8+(m*72|0)|0;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));b=l;h=l+8+(m*72|0)+40|0}while(0);c[h>>2]=-1;h=(c[b>>2]|0)+-1|0;if(g|0?c[g>>2]|0:0){g=qj(n,g)|0;c[b+8+(h*72|0)+8>>2]=g;n=qj(n,f)|0;c[b+8+(h*72|0)+4>>2]=n;n=b;Ra=o;return n|0}n=qj(n,f)|0;c[b+8+(h*72|0)+8>>2]=n;c[b+8+(h*72|0)+4>>2]=0;n=b;Ra=o;return n|0}function qj(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d){k=0;return k|0}k=c[d>>2]|0;i=c[d+4>>2]|0;if(!k){k=0;return k|0}g=Sv(i|0,0,1,0)|0;h=L()|0;a:do if(c[b+272>>2]|0)if(!(a[b+81>>0]|0))j=13;else{k=0;return k|0}else{do if(0<0|(0==0?i>>>0<(e[b+276>>1]|0)>>>0:0)){d=b+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];b=b+284|0;c[b>>2]=(c[b>>2]|0)+1;b=f;break a}d=b+296|0;f=c[d>>2]|0;if(!f){d=b+292|0;break}else{c[d>>2]=c[f>>2];b=b+284|0;c[b>>2]=(c[b>>2]|0)+1;b=f;break a}}else d=b+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;j=13}while(0);if((j|0)==13)b=_d(b,g,h)|0;if(!b){k=0;return k|0}ew(b|0,k|0,i|0)|0;a[b+i>>0]=0;d=a[b>>0]|0;if((a[880+(d&255)>>0]|0)>=0){k=b;return k|0}h=d<<24>>24==91?93:d;g=0;d=1;while(1){f=a[b+d>>0]|0;if(f<<24>>24==h<<24>>24){d=d+1|0;f=b+g|0;if((a[b+d>>0]|0)!=h<<24>>24)break;a[f>>0]=h}else a[b+g>>0]=f;g=g+1|0;d=d+1|0}a[f>>0]=0;k=b;return k|0}\nfunction yj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;Ea=Ra;Ra=Ra+448|0;ha=Ea+424|0;ca=Ea+416|0;ta=Ea+408|0;sa=Ea+400|0;ra=Ea+392|0;qa=Ea+384|0;ma=Ea+376|0;na=Ea+368|0;da=Ea+336|0;W=Ea+328|0;M=Ea+320|0;U=Ea+304|0;ba=Ea+280|0;V=Ea+272|0;ga=Ea+256|0;fa=Ea+240|0;ea=Ea+224|0;Z=Ea+216|0;ja=Ea+184|0;ia=Ea+152|0;X=Ea+144|0;J=Ea+136|0;N=Ea+128|0;K=Ea+120|0;I=Ea+112|0;_=Ea+104|0;T=Ea+96|0;Q=Ea+88|0;S=Ea+80|0;A=Ea+72|0;y=Ea+64|0;z=Ea+56|0;w=Ea+48|0;q=Ea+40|0;o=Ea+32|0;n=Ea+24|0;wa=Ea+16|0;B=Ea;oa=Ea+440|0;va=Ea+436|0;pa=Ea+432|0;Da=c[f>>2]|0;ua=f+8|0;k=c[ua>>2]|0;if(!k){if((c[f+116>>2]|0)==0?(b[Da+76>>1]&8)==0:0)a[f+23>>0]=1;a:do if(c[Da+272>>2]|0)if(!(a[Da+81>>0]|0))za=15;else{Ra=Ea;return}else{do if((e[Da+276>>1]|0)>=224){k=Da+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Ca=Da+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break a}k=Da+296|0;l=c[k>>2]|0;if(!l){k=Da+292|0;break}else{c[k>>2]=c[l>>2];Ca=Da+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break a}}else k=Da+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=15}while(0);if((za|0)==15)l=_d(Da,224,0)|0;if(!l){Ra=Ea;return}$=l+104|0;aa=$+120|0;do{c[$>>2]=0;$=$+4|0}while(($|0)<(aa|0));c[l>>2]=Da;k=Da+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[ua>>2]=l;Di(l,61,0,1,0)|0;Aa=l}else Aa=k;F=Aa+149|0;xa=d[F>>0]|d[F+1>>0]<<8|64;a[F>>0]=xa;a[F+1>>0]=xa>>8;xa=f+44|0;c[xa>>2]=2;k=c[f>>2]|0;ka=h+4|0;if(c[ka>>2]|0){if(a[k+165>>0]|0){cd(f,39404,n);Ra=Ea;return}r=wk(k,g)|0;if((r|0)<0){c[o>>2]=g;cd(f,39421,o);Ra=Ea;return}else g=h}else r=d[k+164>>0]|0;ya=Da+16|0;aa=c[ya>>2]|0;$=(r|0)==1;if(($?(v=c[f>>2]|0,p=v+16|0,(c[(c[p>>2]|0)+20>>2]|0)==0):0)?(a[f+199>>0]|0)==0:0){k=Pe(c[v>>2]|0,0,v,wa,0,542)|0;if(k|0){cd(f,32157,q);c[f+12>>2]=k;Ra=Ea;return}Ca=c[wa>>2]|0;c[(c[p>>2]|0)+20>>2]=Ca;k=c[v+92>>2]|0;p=c[Ca+4>>2]|0;c[p+4>>2]=c[Ca>>2];if(!(b[p+22>>1]&2)){m=p+32|0;n=p+36|0;o=(c[m>>2]|0)-(c[n>>2]|0)|0;if(((k+-512|0)>>>0<65025?(k+-1&k|0)==0:0)?(c[m>>2]=k,t=p+80|0,s=c[t>>2]|0,s|0):0){l=s+-4|0;c[t>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Ca=(c[14820]|0)+1|0;c[14820]=Ca;c[14821]=(Ca|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=40;break}else{k=Wa[c[29352>>2]&127](l)|0;za=40}while(0);do if((za|0)==40){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[t>>2]=0}Ca=Se(c[p>>2]|0,m,o)|0;c[n>>2]=(c[m>>2]|0)-(o&65535);if((Ca|0)==7){k=v+81|0;if((a[k>>0]|0)==0?(a[v+82>>0]|0)==0:0){a[k>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;k=v+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[v+236>>2]|0;if(k|0)c[k+12>>2]=7}Ra=Ea;return}}}Ca=qj(Da,g)|0;if(!Ca){Ra=Ea;return}if(!j)Ba=qj(Da,i)|0;else{c[w>>2]=i;Ba=dd(Da,45384,w)|0}if(!(c[ka>>2]|0))la=0;else la=c[aa+(r<<4)>>2]|0;k=c[f>>2]|0;do if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(x=c[k+312>>2]|0,(x|0)!=0):0){k=$a[x&127](c[k+316>>2]|0,19,Ca,Ba,la,c[f+240>>2]|0)|0;if((k|0)==1){cd(f,39216,z);c[f+12>>2]=23;za=2020;break}if((k|2|0)==2)if(!k){za=67;break}else{za=2020;break}else{cd(f,39231,y);c[f+12>>2]=1;za=2020;break}}else za=67;while(0);b:do if((za|0)==67){c[B>>2]=0;c[B+4>>2]=Ca;c[B+8>>2]=Ba;c[B+12>>2]=0;t=Da+404|0;c[t>>2]=0;k=Td(Da,la)|0;c:do if(k){l=c[k+4>>2]|0;c[l+4>>2]=c[k>>2];k=c[(c[l>>2]|0)+60>>2]|0;l=c[k>>2]|0;d:do if(l|0){k=Ya[c[l+40>>2]&127](k,14,B)|0;switch(k|0){case 12:break d;case 0:break;default:{l=c[B>>2]|0;if(!l)break c;c[A>>2]=l;cd(f,31408,A);l=c[B>>2]|0;if(!l)break c;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break c}else{Aa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break c}}}Wi(Aa,1);if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc(c[Aa+116>>2]|0,c[B>>2]|0,-1,1,-1)|0;l=c[B>>2]|0;if(!l){za=2020;break b}m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;k=c[B>>2]|0;if(!k){za=2020;break b}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);za=2020;break b}else{za=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);za=2020;break b}}while(0);B=a[Ca>>0]|0;q=d[208+(B&255)>>0]|0;e:do if(!(B<<24>>24)){k=0;l=59;do{o=k+l|0;m=(o|0)/2|0;n=q-(d[208+(d[c[4544+(m<<4)>>2]>>0]|0)>>0]|0)|0;if(!n){j=m;za=103;break e}B=(n|0)<0;k=B?k:m+1|0;l=B?m+-1|0:l}while((k|0)<=(l|0))}else{n=0;p=59;do{o=n+p|0;g=(o|0)/2|0;l=c[4544+(g<<4)>>2]|0;k=q-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!k){m=Ca;do{m=m+1|0;l=l+1|0;B=a[m>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0));if(!k){j=g;za=103;break e}}B=(k|0)<0;n=B?n:g+1|0;p=B?g+-1|0:p}while((n|0)<=(p|0))}while(0);f:do if((za|0)==103){s=4544+(j<<4)|0;m=a[4544+(j<<4)+5>>0]|0;g:do if(m&1?(D=c[f>>2]|0,(a[D+165>>0]|0)==0):0){n=f+4|0;p=D+24|0;g=(c[p>>2]&1|0)==0;q=D+16|0;B=c[(c[q>>2]|0)+12>>2]|0;a[D+78>>0]=a[B+77>>0]|0;if((b[B+78>>1]&1)==0?(C=eh(D,0,n,0)|0,(C|0)!=0):0)k=C;else za=107;h:do if((za|0)==107){k=c[D+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[q>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(E=eh(D,k,n,0)|0,E|0):0){k=E;break h}}while((l|0)>2);if(g)c[p>>2]=c[p>>2]&-2;if(!(a[D+89>>0]|0))break g;c[p>>2]=c[p>>2]|16;break g}while(0);c[f+12>>2]=k;Aa=f+36|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break f}while(0);E=m&255;do if((E&2|0)==0?(Ba|0)==0|(E&4|0)==0:0){E=a[4544+(j<<4)+7>>0]|0;m=E&255;E=E<<24>>24==0;Wi(Aa,E?1:m);if(E){if(a[(c[Aa>>2]|0)+81>>0]|0)break;yc(c[Aa+116>>2]|0,c[s>>2]|0,-1,1,0)|0;break}n=Aa+116|0;k=0;l=d[4544+(j<<4)+6>>0]|0;while(1){if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc((c[n>>2]|0)+(k*40|0)|0,c[5504+(l<<2)>>2]|0,-1,1,0)|0;k=k+1|0;if((k|0)==(m|0))break;else l=l+1|0}}while(0);do switch(a[4544+(j<<4)+4>>0]|0){case 11:{u=1<<r;ya=Aa+152|0;c[ya>>2]=c[ya>>2]|u;if(!$?a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0:0){ya=Aa+156|0;c[ya>>2]=c[ya>>2]|u}if(!Ba){c[xa>>2]=(c[xa>>2]|0)+2;Aa=ed(Aa,9,18352)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+124>>2]=-2e3;break f}c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;k=(k|0)>-1?k:(k|0)==-2147483648?2147483647:0-k|0;t=c[f+116>>2]|0;t=(t|0)==0?f:t;l=t+84|0;m=c[l>>2]|0;i:do if(!(m&u)){c[l>>2]=m|u;if(!$)break;s=c[t>>2]|0;l=s+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;m=Pe(c[s>>2]|0,0,s,wa,0,542)|0;if(m|0){cd(t,32157,S);c[t+12>>2]=m;break}ya=c[wa>>2]|0;c[(c[l>>2]|0)+20>>2]=ya;l=c[s+92>>2]|0;o=c[ya+4>>2]|0;c[o+4>>2]=c[ya>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;g=o+36|0;q=(c[p>>2]|0)-(c[g>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;za=147;break}else{l=Wa[c[29352>>2]&127](m)|0;za=147}while(0);do if((za|0)==147){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{za=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);za=Se(c[o>>2]|0,p,q)|0;c[g>>2]=(c[p>>2]|0)-(q&65535);if((za|0)!=7)break;l=s+81|0;do if(!(a[l>>0]|0)){if(a[s+82>>0]|0)break;a[l>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;l=s+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[s+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break i}while(0)}while(0);l=t+80|0;c[l>>2]=c[l>>2]|u;l=Aa+108|0;m=c[l>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[l>>2]=m+1;Aa=c[Aa+104>>2]|0;a[Aa+(m*20|0)>>0]=95;b[Aa+(m*20|0)+2>>1]=0;c[Aa+(m*20|0)+4>>2]=r;c[Aa+(m*20|0)+8>>2]=3;c[Aa+(m*20|0)+12>>2]=k;c[Aa+(m*20|0)+16>>2]=0;a[Aa+(m*20|0)+1>>0]=0}else Di(Aa,95,r,3,k)|0;c[(c[aa+(r<<4)+12>>2]|0)+80>>2]=k;m=c[aa+(r<<4)+4>>2]|0;l=c[m+4>>2]|0;c[l+4>>2]=c[m>>2];l=c[(c[l>>2]|0)+212>>2]|0;c[l+16>>2]=k;m=c[7357]|0;n=c[l+44>>2]|0;if((k|0)<=-1){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(za|0,Aa|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[m&127](n,k);break f}case 28:{k=c[aa+(r<<4)+4>>2]|0;if(Ba|0){c[wa>>2]=0;ii(Ba,wa)|0;l=c[wa>>2]|0;c[Da+92>>2]=l;g=c[k+4>>2]|0;c[g+4>>2]=c[k>>2];if(b[g+22>>1]&2){za=2020;break b}n=g+32|0;o=g+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[n>>2]=l;m=g+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Aa=(c[14820]|0)+1|0;c[14820]=Aa;c[14821]=(Aa|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=219;break}else{k=Wa[c[29352>>2]&127](l)|0;za=219}while(0);do if((za|0)==219){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Aa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);Aa=Se(c[g>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((Aa|0)!=7){za=2020;break b}k=Da+81|0;if(a[k>>0]|0){za=2020;break b}if(a[Da+82>>0]|0){za=2020;break b}a[k>>0]=1;if((c[Da+180>>2]|0)>0)c[Da+264>>2]=1;k=Da+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Da+236>>2]|0;if(!k){za=2020;break b}c[k+12>>2]=7;za=2020;break b}if(!k){n=0;o=0}else{o=c[(c[k+4>>2]|0)+32>>2]|0;n=o;o=((o|0)<0)<<31>>31}m=c[Aa>>2]|0;j:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=179;else za=199;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=180;break j}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=180;break j}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=179}while(0);if((za|0)==179){p=_d(m,8,0)|0;za=180}k:do if((za|0)==180){if(!p){za=199;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break k}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==199){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 30:{g=c[aa+(r<<4)+4>>2]|0;do if(!Ba){m=-1;n=0}else{za=a[Ba>>0]|0;k=(d[208+(za&255)>>0]|0)+-102|0;if(!(za<<24>>24==0|(k|0)!=0)){l=45388;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)m=2;else m=(Zm(Ba,1,0)|0)<<24>>24!=0&1;if(c[ka>>2]|0){n=1;break}p=c[Da+20>>2]|0;if((p|0)<=0){n=1;break}l=c[ya>>2]|0;n=m<<2;k=0;do{o=c[l+(k<<4)+4>>2]|0;if(o|0){za=c[o+4>>2]|0;c[za+4>>2]=c[o>>2];za=za+22|0;b[za>>1]=n|b[za>>1]&-13&65535}k=k+1|0}while((k|0)!=(p|0));n=1}while(0);if(!g)n=0;else{l=c[g+4>>2]|0;c[l+4>>2]=c[g>>2];l=l+22|0;k=b[l>>1]|0;if(n){k=(m<<2|k&-13&65535)&65535;b[l>>1]=k}n=(k&65535)>>>2&3}m=c[Aa>>2]|0;l:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=256;else za=276;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=257;break l}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=257;break l}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=256}while(0);if((za|0)==256){p=_d(m,8,0)|0;za=257}m:do if((za|0)==257){if(!p){za=276;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break m}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break m}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==276){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 24:{n=c[f+116>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<r;n:do if(((l&m|0)==0?(c[k>>2]=l|m,$):0)?(Y=c[n>>2]|0,O=Y+16|0,(c[(c[O>>2]|0)+20>>2]|0)==0):0){if(a[n+199>>0]|0)break;k=Pe(c[Y>>2]|0,0,Y,wa,0,542)|0;if(k|0){cd(n,32157,Q);c[n+12>>2]=k;break}ya=c[wa>>2]|0;c[(c[O>>2]|0)+20>>2]=ya;k=c[Y+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=302;break}else{k=Wa[c[29352>>2]&127](l)|0;za=302}while(0);do if((za|0)==302){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);ya=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((ya|0)!=7)break;k=Y+81|0;do if(!(a[k>>0]|0)){if(a[Y+82>>0]|0)break;a[k>>0]=1;if((c[Y+180>>2]|0)>0)c[Y+264>>2]=1;k=Y+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Y+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break n}while(0)}while(0);o=(c[xa>>2]|0)+1|0;c[xa>>2]=o;do if((a[Ca>>0]|32)<<24>>24==112){l=Aa+108|0;m=c[l>>2]|0;k=Aa+112|0;if((c[k>>2]|0)>(m|0)){c[l>>2]=m+1;za=c[Aa+104>>2]|0;a[za+(m*20|0)>>0]=-90;b[za+(m*20|0)+2>>1]=0;c[za+(m*20|0)+4>>2]=r;c[za+(m*20|0)+8>>2]=o;c[za+(m*20|0)+12>>2]=0;c[za+(m*20|0)+16>>2]=0;a[za+(m*20|0)+1>>0]=0;m=l;break}else{Di(Aa,166,r,o,0)|0;m=l;break}}else{c[wa>>2]=0;if(Ba){ii(Ba,wa)|0;k=c[wa>>2]|0;if((k|0)<0)k=(k|0)==-2147483648?2147483647:0-k|0;else za=322}else{k=0;za=322}m=Aa+108|0;l=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=-89;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=r;c[za+(l*20|0)+8>>2]=o;c[za+(l*20|0)+12>>2]=k;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0;k=n;break}else{Di(Aa,167,r,o,k)|0;k=n;break}}while(0);l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;Aa=c[Aa+104>>2]|0;a[Aa+(l*20|0)>>0]=81;b[Aa+(l*20|0)+2>>1]=0;c[Aa+(l*20|0)+4>>2]=o;c[Aa+(l*20|0)+8>>2]=1;c[Aa+(l*20|0)+12>>2]=0;c[Aa+(l*20|0)+16>>2]=0;a[Aa+(l*20|0)+1>>0]=0;break f}else{Di(Aa,81,o,1,0)|0;break f}}case 23:{do if(!Ba)za=339;else{o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-101|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45400;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(k){k=n+-110|0;if(!(o|(k|0)!=0)){l=45393;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)l=0;else{za=339;break}}else l=1;if(c[ka>>2]|0){za=350;break}p=c[Da+20>>2]|0;if((p|0)>2){o=c[ya>>2]|0;k=l&255;m=2;do{n=c[c[(c[o+(m<<4)+4>>2]|0)+4>>2]>>2]|0;do if(!(a[n+12>>0]|0)){za=c[n+216>>2]|0;if(za|0?(a[za+43>>0]|0)==2:0)break;a[n+4>>0]=k}while(0);m=m+1|0}while((m|0)!=(p|0))}else k=l&255;a[Da+83>>0]=k;za=350}while(0);if((za|0)==339)if(!(c[ka>>2]|0))m=Da+83|0;else{l=-1;za=350}if((za|0)==350){k=c[c[(c[aa+(r<<4)+4>>2]|0)+4>>2]>>2]|0;do if((l|0)>-1){if(a[k+12>>0]|0)break;za=c[k+216>>2]|0;if(za|0?(a[za+43>>0]|0)==2:0)break;a[k+4>>0]=l}while(0);m=k+4|0}n=Aa+108|0;k=c[n>>2]|0;o=Aa+112|0;l=(c[o>>2]|0)>(k|0);if((a[m>>0]|0)==1){if(l){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,45400,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}else{if(l){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,45393,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}}case 20:{o:do if(Ba){m=(Eu(Ba)|0)&1073741823;if(m){n=Ba;p=36033;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=381;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=383;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=0;break o}}if((za|0)==381){l=0;k=a[208+(d[p>>0]|0)>>0]|0}else if((za|0)==383)l=l&255;if((l|0)!=(k&255|0)){n=Ba;p=36040;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2043;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2041;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=1;break o}}if((za|0)==2041)l=l&255;else if((za|0)==2043){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=1;break}n=Ba;p=36048;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2050;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2048;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=2;break o}}if((za|0)==2048)l=l&255;else if((za|0)==2050){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=2;break}n=Ba;p=36052;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2057;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2055;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=3;break o}}if((za|0)==2055)l=l&255;else if((za|0)==2057){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=3;break}n=Ba;p=36061;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2064;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2062;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=4;break o}}if((za|0)==2062)l=l&255;else if((za|0)==2064){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=4;break}n=Ba;o=36068;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2071;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[o>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2069;break}if((m|0)>1){n=n+1|0;o=o+1|0;m=m+-1|0}else{s=5;break o}}if((za|0)==2069)l=l&255;else if((za|0)==2071){l=0;k=a[208+(d[o>>0]|0)>>0]|0}if((l|0)==(k&255|0))s=5;else za=387}else s=0}else s=0}else za=387;while(0);if((za|0)==387)if(!(c[ka>>2]|0)){c[ka>>2]=1;r=0;s=-1}else s=-1;l=c[Da+20>>2]|0;if((l|0)>0){p=Aa+152|0;m=Aa+108|0;k=Aa+112|0;g=Aa+104|0;q=Aa+156|0;do{o=l;l=l+-1|0;do if(c[(c[ya>>2]|0)+(l<<4)+4>>2]|0){if((l|0)!=(r|0)?c[ka>>2]|0:0)break;n=1<<l;c[p>>2]=c[p>>2]|n;do if((l|0)!=1){if(!(a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(l<<4)+4>>2]|0)+9>>0]|0))break;c[q>>2]=c[q>>2]|n}while(0);n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;za=c[g>>2]|0;a[za+(n*20|0)>>0]=7;b[za+(n*20|0)+2>>1]=0;c[za+(n*20|0)+4>>2]=l;c[za+(n*20|0)+8>>2]=1;c[za+(n*20|0)+12>>2]=s;c[za+(n*20|0)+16>>2]=0;a[za+(n*20|0)+1>>0]=0;break}else{Di(Aa,7,l,1,s)|0;break}}while(0)}while((o|0)>1)}else{m=Aa+108|0;k=Aa+112|0}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=1;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 21:{m=c[c[(c[aa+(r<<4)+4>>2]|0)+4>>2]>>2]|0;za=wa;c[za>>2]=-2;c[za+4>>2]=-1;if(Ba){Vd(Ba,wa)|0;l=wa;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)<-1|(l|0)==-1&k>>>0<4294967295){k=wa;c[k>>2]=-1;c[k+4>>2]=-1;k=-1;n=-1}else n=l;l=m+160|0;c[l>>2]=k;c[l+4>>2]=n;l=c[m+216>>2]|0;if(!l)o=k;else{o=l+16|0;c[o>>2]=k;c[o+4>>2]=n;o=k}}else{n=m+160|0;o=c[n>>2]|0;n=c[n+4>>2]|0}m=wa;c[m>>2]=o;c[m+4>>2]=n;m=c[Aa>>2]|0;p:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=421;else za=441;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=422;break p}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=422;break p}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=421}while(0);if((za|0)==421){p=_d(m,8,0)|0;za=422}q:do if((za|0)==422)if(p){m=p;k=m;a[k>>0]=o;a[k+1>>0]=o>>8;a[k+2>>0]=o>>16;a[k+3>>0]=o>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break q}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=441;while(0);do if((za|0)==441){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;break f}case 1:{p=c[aa+(r<<4)+4>>2]|0;if(Ba|0){o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-110|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45841;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}do if(!k)m=0;else{k=n+-102|0;if(!(o|(k|0)!=0)){l=45810;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){m=1;break}k=n+-105|0;if(!(o|(k|0)!=0)){l=45846;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){m=2;break}c[wa>>2]=0;ii(Ba,wa)|0;m=c[wa>>2]|0;m=m>>>0<3?m&255:0}while(0);a[Da+84>>0]=m;n=c[p+4>>2]|0;c[n+4>>2]=c[p>>2];l=m&255;if(b[n+22>>1]&2){k=n+17|0;if(((l|0)!=0|0)!=(d[k>>0]|0)){za=2020;break b}}else k=n+17|0;a[k>>0]=(l|0)!=0&1;a[n+18>>0]=(l|0)==2&1;k=m+-1|0;if(k>>>0>=2){za=2020;break b}ya=c[Aa+108>>2]|0;za=ed(Aa,5,18400)|0;c[za+4>>2]=r;c[za+24>>2]=r;c[za+48>>2]=ya+4;c[za+84>>2]=r;c[za+92>>2]=k;k=1<<r;za=Aa+152|0;c[za>>2]=c[za>>2]|k;if($){za=2020;break b}if(!(a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0)){za=2020;break b}za=Aa+156|0;c[za>>2]=c[za>>2]|k;za=2020;break b}k=c[p+4>>2]|0;c[k+4>>2]=c[p>>2];if(!(a[k+17>>0]|0))n=0;else n=(a[k+18>>0]|0)==0?1:2;m=c[Aa>>2]|0;r:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=466;else za=486;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=467;break r}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=467;break r}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=466}while(0);if((za|0)==466){p=_d(m,8,0)|0;za=467}s:do if((za|0)==467){if(!p){za=486;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break s}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==486){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 16:{if(!((Ba|0)!=0?(ya=(ii(Ba,oa)|0)==0,u=c[oa>>2]|0,!(ya|(u|0)<1)):0)){c[oa>>2]=2147483647;u=2147483647}t=c[f+116>>2]|0;t=(t|0)==0?f:t;k=t+84|0;l=c[k>>2]|0;s=1<<r;t:do if((l&s|0)==0?(c[k>>2]=l|s,$):0){q=c[t>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(t,32157,T);c[t+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=535;break}else{k=Wa[c[29352>>2]&127](l)|0;za=535}while(0);do if((za|0)==535){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break t}while(0)}while(0);m=t+80|0;c[m>>2]=c[m>>2]|s;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=70;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=u;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,70,u,1,0)|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=59;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=r;c[za+(k*20|0)+8>>2]=0;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,59,r,0,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=0;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,0,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=83;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=-1;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,83,1,-1,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=47;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,47,1,k,0)|0;l=c[m>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=(c[Aa+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;break f}case 4:{if(Ba|0){c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;c[(c[aa+(r<<4)+12>>2]|0)+80>>2]=k;m=c[aa+(r<<4)+4>>2]|0;l=c[m+4>>2]|0;c[l+4>>2]=c[m>>2];l=c[(c[l>>2]|0)+212>>2]|0;c[l+16>>2]=k;m=c[7357]|0;n=c[l+44>>2]|0;if((k|0)<=-1){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(za|0,Aa|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[m&127](n,k);break f}n=c[(c[aa+(r<<4)+12>>2]|0)+80>>2]|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;u:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=577;else za=597;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=578;break u}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=578;break u}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=577}while(0);if((za|0)==577){p=_d(m,8,0)|0;za=578}v:do if((za|0)==578)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break v}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break v}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=597;while(0);do if((za|0)==597){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 5:{if(Ba|0){c[wa>>2]=1;do if(!(ii(Ba,wa)|0))k=c[wa>>2]|0;else{Aa=c[aa+(r<<4)+4>>2]|0;k=c[wa>>2]|0;m=c[Aa+4>>2]|0;c[m+4>>2]=c[Aa>>2];m=c[(c[m>>2]|0)+212>>2]|0;if(!k){k=0;break}if((k|0)<0){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;l=(c[m+28>>2]|0)+(c[m+24>>2]|0)|0;l=Wv(za|0,Aa|0,l|0,((l|0)<0)<<31>>31|0)|0;L()|0}else l=k;c[m+20>>2]=l}while(0);f=(Zm(Ba,1,(k|0)!=0&1)|0)<<24>>24==0;r=Da+32|0;za=r;xa=c[za>>2]|0;za=c[za+4>>2]|0;Aa=r;c[Aa>>2]=f?xa&-33:xa|32;c[Aa+4>>2]=f?za:za;do if(a[Da+79>>0]|0){k=c[Da+20>>2]|0;if((k|0)<=0)break;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break;else q=q+16|0}}while(0);break f}if(0==0?(c[Da+32>>2]&32|0)==0:0){n=0;o=0}else{k=c[aa+(r<<4)+4>>2]|0;l=c[k+4>>2]|0;c[l+4>>2]=c[k>>2];l=c[(c[l>>2]|0)+212>>2]|0;k=c[l+16>>2]|0;if((k|0)<=-1){ya=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;za=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(ya|0,za|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}o=c[l+20>>2]|0;o=(k|0)<(o|0)?o:k;n=o;o=((o|0)<0)<<31>>31}m=c[Aa>>2]|0;w:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=626;else za=646;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=627;break w}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=627;break w}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=626}while(0);if((za|0)==626){p=_d(m,8,0)|0;za=627}x:do if((za|0)==627){if(!p){za=646;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break x}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break x}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==646){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 25:{m=c[Aa>>2]|0;y:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=685;else za=705;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];za=m+284|0;c[za>>2]=(c[za>>2]|0)+1;za=686;break y}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];za=m+284|0;c[za>>2]=(c[za>>2]|0)+1;za=686;break y}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=685}while(0);if((za|0)==685){l=_d(m,8,0)|0;za=686}z:do if((za|0)==686)if(l){m=l;k=m;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=l;a[o>>0]=-14;l=p;break}else{Ei(Aa,n+(k*20|0)|0,l,-14);l=p;break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,l);l=p;break z}k=l;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[l>>2]=c[ya>>2];c[ya>>2]=l;l=p;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);l=p;break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);l=p;break}}else za=705;while(0);do if((za|0)==705){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}else m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 35:{if(Ba|0){l=a[Ba>>0]|0;do if((l+-48&255)<3)k=(l<<24>>24)+-48|0;else{n=d[208+(l&255)>>0]|0;k=n+-102|0;o=l<<24>>24==0;if(!(o|(k|0)!=0)){l=38150;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}if(!k){k=1;break}k=n+-109|0;if(!(o|(k|0)!=0)){l=36061;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}k=(k|0)==0?2:0}while(0);l=c[f>>2]|0;m=l+80|0;if((k|0)==(d[m>>0]|0))break f;n=l+16|0;o=c[(c[n>>2]|0)+20>>2]|0;A:do if(o|0){do if(a[l+79>>0]|0){if(a[o+8>>0]|0)break;ug(o);c[(c[n>>2]|0)+20>>2]=0;$b(l);break A}while(0);cd(f,45858,_);break f}while(0);a[m>>0]=k;break f}n=d[Da+80>>0]|0;m=c[Aa>>2]|0;B:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=727;else za=747;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=728;break B}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=728;break B}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=727}while(0);if((za|0)==727){p=_d(m,8,0)|0;za=728}C:do if((za|0)==728)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break C}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=747;while(0);do if((za|0)==747){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 36:{if(!Ba){l=c[14771]|0;if(!l)break f;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}do if(a[Ba>>0]|0){Aa=c[Da>>2]|0;Aa=(Za[c[Aa+32>>2]&127](Aa,Ba,1,wa)|0)!=0;if(Aa|(c[wa>>2]|0)==0){cd(f,45410,I);za=2020;break b}else break}while(0);D:do if((d[Da+80>>0]|0)<2){k=c[f>>2]|0;l=k+16|0;m=c[(c[l>>2]|0)+20>>2]|0;if(!m)break;do if(a[k+79>>0]|0){if(a[m+8>>0]|0)break;ug(m);c[(c[l>>2]|0)+20>>2]=0;$b(k);break D}while(0);cd(f,45858,K)}while(0);k=c[14771]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Aa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);if(!(a[Ba>>0]|0)){c[14771]=0;za=2020;break b}else{c[N>>2]=Ba;za=Bb(31408,N)|0;c[14771]=za;za=2020;break b}}case 33:{if(Ba|0){k=Da+79|0;if(!(a[k>>0]|0)){cd(f,45435,J);za=2020;break b}if($){za=2020;break b}Aa=(Zm(Ba,0,1)|0)+1&7;a[aa+(r<<4)+8>>0]=Aa<<24>>24==0?1:Aa;a[aa+(r<<4)+9>>0]=1;if(!(a[k>>0]|0)){za=2020;break b}k=c[Da+20>>2]|0;if((k|0)<=0){za=2020;break b}r=Da+32|0;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break f;else q=q+16|0}}n=(d[aa+(r<<4)+8>>0]|0)+-1|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;E:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=815;else za=835;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=816;break E}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=816;break E}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=815}while(0);if((za|0)==815){p=_d(m,8,0)|0;za=816}F:do if((za|0)==816)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break F}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=835;while(0);do if((za|0)==835){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 2:{if(Ba|0){l=4544+(j<<4)+8|0;k=c[l>>2]|0;l=c[l+4>>2]|0;m=Da+79|0;za=(a[m>>0]|0)==0;k=za?k&-16385:k;l=za?l:l;do if(!((Zm(Ba,1,0)|0)<<24>>24)){za=Da+32|0;xa=za;f=c[xa+4>>2]&~l;c[za>>2]=c[xa>>2]&~k;c[za+4>>2]=f;if(!((k|0)==524288&(l|0)==0))break;za=Da+472|0;c[za>>2]=0;c[za+4>>2]=0}else{za=Da+32|0;xa=za;f=c[xa+4>>2]|l;c[za>>2]=c[xa>>2]|k;c[za+4>>2]=f}while(0);k=Aa+108|0;l=c[k>>2]|0;if((c[Aa+112>>2]|0)>(l|0)){c[k>>2]=l+1;$=c[Aa+104>>2]|0;a[$+(l*20|0)>>0]=-98;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,158,0,0,0)|0;if(!(a[m>>0]|0)){za=2020;break b}k=c[Da+20>>2]|0;if((k|0)<=0){za=2020;break b}r=Da+32|0;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break f;else q=q+16|0}}za=a[4544+(j<<4)+7>>0]|0;n=za&255;za=za<<24>>24==0;Wi(Aa,za?1:n);if(za)if(!(a[(c[Aa>>2]|0)+81>>0]|0)){yc(c[Aa+116>>2]|0,c[s>>2]|0,-1,1,0)|0;o=Aa}else o=Aa;else{m=Aa+116|0;k=0;l=d[4544+(j<<4)+6>>0]|0;while(1){if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc((c[m>>2]|0)+(k*40|0)|0,c[5504+(l<<2)>>2]|0,-1,1,0)|0;k=k+1|0;if((k|0)==(n|0)){o=Aa;break}else l=l+1|0}}n=Da+32|0;m=4544+(j<<4)+8|0;n=(c[m>>2]&c[n>>2]|0?1:(c[m+4>>2]&c[n+4>>2]|0)!=0)&1;m=c[o>>2]|0;G:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=878;else za=898;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=879;break G}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=879;break G}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=878}while(0);if((za|0)==878){p=_d(m,8,0)|0;za=879}H:do if((za|0)==879){if(!p){za=898;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[o>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break H}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break H}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==898){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[o>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 34:{if(!Ba)break f;s=bd(f,2,Ba,la)|0;if(!s)break f;m=c[s+72>>2]|0;if(!m)n=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0)){n=k;break}else k=k+1|0}k=c[s+8>>2]|0;I:do if(!k)r=0;else while(1){ya=k+55|0;if(((d[ya>>0]|d[ya+1>>0]<<8)&3)==2){r=k;break I}k=c[k+20>>2]|0;if(!k){r=0;break}}while(0);c[xa>>2]=7;o=c[f+116>>2]|0;o=(o|0)==0?f:o;k=o+84|0;l=c[k>>2]|0;m=1<<n;J:do if(!(l&m)){c[k>>2]=l|m;if((n|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,X);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=951;break}else{k=Wa[c[29352>>2]&127](l)|0;za=951}while(0);do if((za|0)==951){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);ya=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((ya|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break J}while(0)}while(0);Sk(f,s)|0;i=s+42|0;l=b[i>>1]|0;if(l<<16>>16<=0)break f;m=c[s+4>>2]|0;t=4544+(j<<4)+8|0;u=r+4|0;if(!r){r=c[t>>2]|0;t=c[t+4>>2]|0;s=(r|0)==0&(t|0)==0;t=(r|0)==0&(t|0)==0?45496:45488;r=0;k=0;q=m;while(1){p=a[q+15>>0]|0;za=p&2;g=(za&255)>>>1&255;if(za<<24>>24!=0&s)k=k+1|0;else{n=c[q>>2]|0;if(!(p&4))m=59952;else m=n+(Eu(n)|0)+1|0;o=(a[q+12>>0]|0)!=0&1;l=c[q+4>>2]|0;if(!l)l=0;else l=c[l+8>>2]|0;c[ia>>2]=r-k;c[ia+4>>2]=n;c[ia+8>>2]=m;c[ia+12>>2]=o;c[ia+16>>2]=l;c[ia+20>>2]=p&1;c[ia+24>>2]=g;_m(Aa,1,t,ia);l=b[i>>1]|0}r=r+1|0;if((r|0)>=(l<<16>>16|0))break f;else q=q+16|0}}s=0;k=0;r=m;p=l<<16>>16;while(1){o=a[r+15>>0]|0;ya=o&2;q=(ya&255)>>>1&255;do if(!(ya<<24>>24))za=979;else{ya=t;if(!((c[ya>>2]|0)==0&(c[ya+4>>2]|0)==0)){za=979;break}k=k+1|0}while(0);if((za|0)==979){za=0;l=(o&1)==0;K:do if(l)l=(l^1)&1;else{if((p|0)<1){l=1;break}m=c[u>>2]|0;l=1;while(1){if((s|0)==(b[m+(l+-1<<1)>>1]|0))break K;n=l+1|0;if((l|0)<(p|0))l=n;else{l=n;break}}}while(0);p=t;p=(c[p>>2]|0)==0&(c[p+4>>2]|0)==0?45496:45488;g=c[r>>2]|0;if(!(o&4))n=59952;else n=g+(Eu(g)|0)+1|0;o=(a[r+12>>0]|0)!=0&1;m=c[r+4>>2]|0;if(!m)m=0;else m=c[m+8>>2]|0;c[ja>>2]=s-k;c[ja+4>>2]=g;c[ja+8>>2]=n;c[ja+12>>2]=o;c[ja+16>>2]=m;c[ja+20>>2]=l;c[ja+24>>2]=q;_m(Aa,1,p,ja);l=b[i>>1]|0}s=s+1|0;p=l<<16>>16;if((s|0)>=(p|0))break;else r=r+16|0}break}case 17:{if(!Ba)break f;i=hi(Da,Ba,la)|0;if(!i)break f;m=c[i+24>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}u=4544+(j<<4)+8|0;u=(c[u>>2]|0)==0&(c[u+4>>2]|0)==0;r=b[(u?i+50|0:i+52|0)>>1]|0;j=r&65535;c[xa>>2]=u?3:6;s=c[i+12>>2]|0;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;L:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,Z);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1010;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1010}while(0);do if((za|0)==1010){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break L}while(0)}while(0);if(!(r<<16>>16))break f;t=i+4|0;q=s+4|0;r=Aa+108|0;s=Aa+112|0;o=i+28|0;p=i+32|0;n=i+50|0;g=Aa+104|0;if(u){m=0;do{za=b[(c[t>>2]|0)+(m<<1)>>1]|0;k=za<<16>>16;if(za<<16>>16<0)l=0;else l=c[(c[q>>2]|0)+(k<<4)>>2]|0;c[ea>>2]=m;c[ea+4>>2]=k;c[ea+8>>2]=l;_m(Aa,1,45503,ea);k=c[xa>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;za=c[g>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,k,0)|0;m=m+1|0}while((m|0)!=(j|0))}else{m=0;do{za=b[(c[t>>2]|0)+(m<<1)>>1]|0;k=za<<16>>16;if(za<<16>>16<0)l=0;else l=c[(c[q>>2]|0)+(k<<4)>>2]|0;c[fa>>2]=m;c[fa+4>>2]=k;c[fa+8>>2]=l;_m(Aa,1,45503,fa);l=c[(c[p>>2]|0)+(m<<2)>>2]|0;k=m>>>0<(e[n>>1]|0)>>>0&1;c[ga>>2]=d[(c[o>>2]|0)+m>>0];c[ga+4>>2]=l;c[ga+8>>2]=k;_m(Aa,4,45508,ga);k=c[xa>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;za=c[g>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,k,0)|0;m=m+1|0}while((m|0)!=(j|0))}break}case 18:{if(!Ba)break f;r=Sd(Da,Ba,la)|0;if(!r)break f;m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}c[xa>>2]=5;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;M:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,V);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1059;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1059}while(0);do if((za|0)==1059){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break M}while(0)}while(0);k=c[r+8>>2]|0;if(!k)break f;l=0;while(1){xa=c[k>>2]|0;f=(a[k+54>>0]|0)!=0&1;ya=k+55|0;ya=c[30092+(((d[ya>>0]|d[ya+1>>0]<<8)&3)<<2)>>2]|0;za=(c[k+36>>2]|0)!=0&1;c[ba>>2]=l;c[ba+4>>2]=xa;c[ba+8>>2]=f;c[ba+12>>2]=ya;c[ba+16>>2]=za;_m(Aa,1,45517,ba);k=c[k+20>>2]|0;if(!k)break;else l=l+1|0}break}case 10:{c[xa>>2]=3;o=Da+20|0;k=c[o>>2]|0;if((k|0)<=0){za=2020;break b}n=0;while(1){l=c[ya>>2]|0;m=c[l+(n<<4)+4>>2]|0;if(m){l=c[l+(n<<4)>>2]|0;k=c[c[m+4>>2]>>2]|0;if(!(a[k+15>>0]|0))k=c[k+168>>2]|0;else k=59952;c[U>>2]=n;c[U+4>>2]=l;c[U+8>>2]=k;_m(Aa,1,45523,U);k=c[o>>2]|0}n=n+1|0;if((n|0)>=(k|0)){za=2020;break b}}}case 7:{c[xa>>2]=2;k=c[Da+388>>2]|0;if(!k){za=2020;break b}l=0;while(1){za=c[c[k+8>>2]>>2]|0;c[M>>2]=l;c[M+4>>2]=za;_m(Aa,1,45527,M);k=c[k>>2]|0;if(!k)break;else l=l+1|0}break}case 14:{if(!Ba)break f;r=Sd(Da,Ba,la)|0;if(!r)break f;s=c[r+16>>2]|0;if(!s)break f;m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}c[xa>>2]=8;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<k;N:do if(!(m&n)){c[l>>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,W);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1106;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1106}while(0);do if((za|0)==1106){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break N}while(0)}while(0);i=r+4|0;m=s;n=0;while(1){p=m+20|0;O:do if((c[p>>2]|0)>0){g=m+8|0;q=m+26|0;r=m+25|0;o=0;while(1){s=c[g>>2]|0;t=c[(c[i>>2]|0)+(c[m+36+(o<<3)>>2]<<4)>>2]|0;u=c[m+36+(o<<3)+4>>2]|0;switch(a[q>>0]|0){case 8:{k=45928;break}case 9:{k=45937;break}case 10:{k=45949;break}case 7:{k=45957;break}default:k=45966}switch(a[r>>0]|0){case 8:{l=45928;break}case 9:{l=45937;break}case 10:{l=45949;break}case 7:{l=45957;break}default:l=45966}c[da>>2]=n;c[da+4>>2]=o;c[da+8>>2]=s;c[da+12>>2]=t;c[da+16>>2]=u;c[da+20>>2]=k;c[da+24>>2]=l;c[da+28>>2]=45539;_m(Aa,1,45530,da);o=o+1|0;if((o|0)>=(c[p>>2]|0))break O}}while(0);m=c[m+4>>2]|0;if(!m)break;else n=n+1|0}break}case 13:{k=c[xa>>2]|0;J=k+1|0;K=k+5|0;M=k+6|0;c[xa>>2]=M;l=c[(c[(c[ya>>2]|0)+(r<<4)+12>>2]|0)+16>>2]|0;P:do if(l|0){C=(Ba|0)==0;D=f+116|0;E=Aa+108|0;F=Aa+112|0;G=Aa+104|0;H=f+40|0;I=f+56|0;h=k+2|0;w=k+3|0;x=Aa+12|0;y=Da+480|0;z=Da+304|0;A=Da+308|0;B=Da+300|0;k=l;do{if(C){v=c[k+8>>2]|0;k=c[k>>2]|0}else{v=bd(f,0,Ba,la)|0;k=0}do if(v|0){t=v+16|0;if(!(c[t>>2]|0))break;m=c[v+72>>2]|0;if(!m)s=-1e6;else{n=c[ya>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0)){s=l;break}else l=l+1|0}o=c[D>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<s;Q:do if(!(m&n)){c[l>>2]=m|n;if((s|0)!=1)break;r=c[o>>2]|0;l=r+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[r>>2]|0,0,r,wa,0,542)|0;if(m|0){cd(o,32157,na);c[o+12>>2]=m;break}ta=c[wa>>2]|0;c[(c[l>>2]|0)+20>>2]=ta;l=c[r+92>>2]|0;o=c[ta+4>>2]|0;c[o+4>>2]=c[ta>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;g=o+36|0;q=(c[p>>2]|0)-(c[g>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ta=(c[14820]|0)+1|0;c[14820]=ta;c[14821]=(ta|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;za=1159;break}else{l=Wa[c[29352>>2]&127](m)|0;za=1159}while(0);do if((za|0)==1159){za=0;c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ta=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ta=Se(c[o>>2]|0,p,q)|0;c[g>>2]=(c[p>>2]|0)-(q&65535);if((ta|0)!=7)break;l=r+81|0;do if(!(a[l>>0]|0)){if(a[r+82>>0]|0)break;a[l>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;l=r+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[r+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break Q}while(0)}while(0);Hj(f,s,c[v+28>>2]|0,0,c[v>>2]|0);l=M+(b[v+42>>1]|0)|0;if((l|0)>(c[xa>>2]|0)){c[xa>>2]=l;Gj(f,0,s,v,108)}else Gj(f,0,s,v,108);m=c[v>>2]|0;l=c[E>>2]|0;if((c[F>>2]|0)>(l|0)){c[E>>2]=l+1;ta=c[G>>2]|0;a[ta+(l*20|0)>>0]=110;b[ta+(l*20|0)+2>>1]=0;c[ta+(l*20|0)+4>>2]=0;c[ta+(l*20|0)+8>>2]=J;c[ta+(l*20|0)+12>>2]=0;c[ta+(l*20|0)+16>>2]=0;a[ta+(l*20|0)+1>>0]=0}else l=Di(Aa,110,0,J,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[E>>2]|0)+-1|0;Ei(Aa,(c[G>>2]|0)+(l*20|0)|0,m,0)}l=c[t>>2]|0;if(!l)l=1;else{p=l;l=1;do{m=Sd(Da,c[p+8>>2]|0,la)|0;R:do if(m|0){c[oa>>2]=0;Hj(f,s,c[m+28>>2]|0,0,c[m>>2]|0);if(Om(f,m,p,oa,0)|0)break P;o=c[oa>>2]|0;if(!o){Gj(f,l,s,m,108);break}m=c[o+44>>2]|0;n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=108;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=l;c[ta+(n*20|0)+8>>2]=m;c[ta+(n*20|0)+12>>2]=s;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0}else Di(Aa,108,l,m,s)|0;n=c[ua>>2]|0;o=Ij(f,o)|0;if(!o)break;m=c[n>>2]|0;if(!(a[m+81>>0]|0)){sa=c[n+104>>2]|0;ta=(c[n+108>>2]|0)+-1|0;a[sa+(ta*20|0)+1>>0]=-9;c[sa+(ta*20|0)+16>>2]=o;break}if(c[m+480>>2]|0)break;ta=(c[o>>2]|0)+-1|0;c[o>>2]=ta;if(ta|0)break;m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break R}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;ta=m+300|0;c[o>>2]=c[ta>>2];c[ta>>2]=o;break R}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ta=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);l=l+1|0;p=c[p+4>>2]|0}while((p|0)!=0)}if((c[H>>2]|0)<(l|0))c[H>>2]=l;l=c[E>>2]|0;if((c[F>>2]|0)>(l|0)){c[E>>2]=l+1;$=c[G>>2]|0;a[$+(l*20|0)>>0]=36;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0));j=l}else j=Di(Aa,36,0,0,0)|0;l=c[t>>2]|0;if(l|0){i=v+36|0;u=1;while(1){s=l+8|0;m=Sd(Da,c[s>>2]|0,la)|0;c[oa>>2]=0;c[va>>2]=0;p=(m|0)!=0;if(p)Om(f,m,l,oa,va)|0;t=c[I>>2]|0;r=t+-1|0;c[I>>2]=r;g=l+20|0;m=c[g>>2]|0;if((m|0)>0){o=0;do{n=c[va>>2]|0;m=o+M|0;Vj(Aa,v,0,c[((n|0)==0?l+36+(o<<3)|0:n+(o<<2)|0)>>2]|0,m);n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=50;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=m;c[ta+(n*20|0)+8>>2]=r;c[ta+(n*20|0)+12>>2]=0;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0}else Di(Aa,50,m,r,0)|0;o=o+1|0;m=c[g>>2]|0}while((o|0)<(m|0))}n=c[oa>>2]|0;do if(!n){if(!p)break;m=c[E>>2]|0;n=m+2|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=30;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=u;c[ta+(m*20|0)+8>>2]=n;c[ta+(m*20|0)+12>>2]=M;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,30,u,n,M)|0;m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=11;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=r;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,11,0,r,0)|0;break}}else{q=gl(Da,n)|0;g=c[g>>2]|0;n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=92;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=M;c[ta+(n*20|0)+8>>2]=m;c[ta+(n*20|0)+12>>2]=K;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0;m=n}else m=Di(Aa,92,M,m,K)|0;n=c[Aa>>2]|0;S:do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[E>>2]|0)+-1|0;n=c[G>>2]|0;o=n+(m*20|0)|0;do if((g|0)<=-1){p=n+(m*20|0)+1|0;if(a[p>>0]|0)break;if((g|0)==-3){c[n+(m*20|0)+16>>2]=q;a[p>>0]=-3;break S}if(!q)break S;c[n+(m*20|0)+16>>2]=q;a[p>>0]=g;if((g|0)!=-12)break S;ta=q+12|0;c[ta>>2]=(c[ta>>2]|0)+1;break S}while(0);Ei(Aa,o,q,g)}else{if((g|0)==-12)break;kg(n,g,q)}while(0);m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=29;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=u;c[ta+(m*20|0)+8>>2]=r;c[ta+(m*20|0)+12>>2]=K;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else m=Di(Aa,29,u,r,K)|0;if(a[(c[Aa>>2]|0)+81>>0]|0)break;ta=c[G>>2]|0;a[ta+(m*20|0)+1>>0]=-3;c[ta+(m*20|0)+16>>2]=0}while(0);m=c[E>>2]|0;n=(c[F>>2]|0)>(m|0);do if(!(c[i>>2]&32))if(n){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=-128;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=h;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,128,0,h,0)|0;break}else if(n){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=73;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=h;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,73,0,h,0)|0;break}while(0);c[ma>>2]=c[s>>2];c[ma+4>>2]=u+-1;_m(Aa,w,45544,ma);m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=81;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=J;c[ta+(m*20|0)+8>>2]=4;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,81,J,4,0)|0;n=c[x>>2]|0;m=0-t|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0)mk(n,Aa,m);else c[(c[n+64>>2]|0)+(m<<2)>>2]=c[E>>2];m=c[va>>2]|0;T:do if(m|0){if(c[y>>2]|0){Xd(Da,m);break}n=m;do if((c[z>>2]|0)>>>0<=n>>>0){if((c[A>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[B>>2];c[B>>2]=m;break T}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ta=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);l=c[l+4>>2]|0;if(!l)break;else u=u+1|0}}l=j+1|0;m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=5;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=l;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,5,0,l,0)|0;m=c[E>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[G>>2]|0)+(((j|0)<0?m+-1|0:j)*20|0)|0;else l=59308;c[l+8>>2]=m}while(0)}while((k|0)!=0)}while(0);break f}case 6:{if(!Ba)break f;l=(Zm(Ba,1,0)|0)<<24>>24!=0;Aa=l?45976:31415;Hd(Da,43614,2,1,Aa,105,0,0,0,0,0)|0;Hd(Da,43614,3,1,Aa,105,0,0,0,0,0)|0;Hd(Da,43609,2,1,31411,105,0,0,0,0,0)|0;Aa=Jd(Da,43609,2,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|12;Aa=Jd(Da,43609,3,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|12;l=l?12:4;Aa=Jd(Da,43614,2,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|l&255;Aa=Jd(Da,43614,3,1,0)|0;k=Aa+4|0;if(!Aa)break f;c[k>>2]=c[k>>2]|l&255;break f}case 19:{V=(a[Ca>>0]|32)<<24>>24==113;U=(c[h>>2]|0)==0?-1:r;c[xa>>2]=6;c[oa>>2]=100;if(Ba){ii(Ba,oa)|0;k=c[oa>>2]|0;if((k|0)<1){c[oa>>2]=100;S=100}else S=k}else S=100;k=S+-1|0;T=Aa+108|0;l=c[T>>2]|0;R=Aa+112|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[Aa+104>>2]|0;a[oa+(l*20|0)>>0]=70;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=k;c[oa+(l*20|0)+8>>2]=1;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,70,k,1,0)|0;z=Da+81|0;A=Da+20|0;U:do if((c[A>>2]|0)>0){B=(U|0)<0;C=f+116|0;D=Da+272|0;E=Da+276|0;F=Da+288|0;G=Da+300|0;H=Da+296|0;I=Da+284|0;h=f+19|0;J=f+28|0;K=Da+292|0;M=Aa+104|0;N=Da+32|0;O=f+56|0;P=Aa+12|0;Q=f+52|0;y=0;do{do if(B|(y|0)==(U|0)){n=c[C>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<<y;V:do if(!(l&m)){c[k>>2]=l|m;if((y|0)!=1)break;q=c[n>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[n+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(n,32157,qa);c[n+12>>2]=l;break}oa=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=oa;k=c[q+92>>2]|0;n=c[oa+4>>2]|0;c[n+4>>2]=c[oa>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;oa=(c[14820]|0)+1|0;c[14820]=oa;c[14821]=(oa|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1314;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1314}while(0);do if((za|0)==1314){za=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);oa=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((oa|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break V}while(0)}while(0);g=(c[(c[ya>>2]|0)+(y<<4)+12>>2]|0)+16|0;l=c[g>>2]|0;if(!l){m=0;k=0}else{m=0;k=0;do{n=c[l+8>>2]|0;k=((c[n+36>>2]|0)>>>5&1^1)+k|0;n=c[n+8>>2]|0;if(!n)o=0;else{o=0;do{k=k+1|0;o=o+1|0;n=c[n+20>>2]|0}while((n|0)!=0)}m=(o|0)>(m|0)?o:m;l=c[l>>2]|0}while((l|0)!=0)}l=(k<<2)+4|0;W:do if(c[D>>2]|0)if(!(a[z>>0]|0))za=1341;else break U;else{do if(0<0|(0==0?(e[E>>1]|0)>>>0<l>>>0:0))k=F;else{k=c[G>>2]|0;if(k|0){c[G>>2]=c[k>>2];c[I>>2]=(c[I>>2]|0)+1;p=k;break W}k=c[H>>2]|0;if(!k){k=K;break}c[H>>2]=c[k>>2];c[I>>2]=(c[I>>2]|0)+1;p=k;break W}while(0);c[k>>2]=(c[k>>2]|0)+1;za=1341}while(0);if((za|0)==1341){za=0;p=_d(Da,l,0)|0}if(!p)break U;k=c[g>>2]|0;if(!k)l=0;else{l=0;do{o=c[k+8>>2]|0;n=l+1|0;if(!(c[o+36>>2]&32)){c[p+(n<<2)>>2]=c[o+28>>2];l=n}n=c[o+8>>2]|0;if(n)do{l=l+1|0;c[p+(l<<2)>>2]=c[n+44>>2];n=c[n+20>>2]|0}while((n|0)!=0);k=c[k>>2]|0}while((k|0)!=0)}c[p>>2]=l;oa=c[xa>>2]|0;k=m+8|0;c[xa>>2]=(oa|0)>(k|0)?oa:k;a[h>>0]=0;c[J>>2]=0;k=c[T>>2]|0;if((c[R>>2]|0)>(k|0)){c[T>>2]=k+1;oa=c[M>>2]|0;a[oa+(k*20|0)>>0]=-109;b[oa+(k*20|0)+2>>1]=0;c[oa+(k*20|0)+4>>2]=2;c[oa+(k*20|0)+8>>2]=l;c[oa+(k*20|0)+12>>2]=1;c[oa+(k*20|0)+16>>2]=0;a[oa+(k*20|0)+1>>0]=0}else k=Di(Aa,147,2,l,1)|0;l=c[Aa>>2]|0;X:do if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[T>>2]|0)+-1|0;l=c[M>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=p;a[m>>0]=-15;break}else{Ei(Aa,l+(k*20|0)|0,p,-15);break}}else{do if(l|0){if(c[l+480>>2]|0){Xd(l,p);break X}k=p;if((c[l+304>>2]|0)>>>0>k>>>0)break;if((c[l+308>>2]|0)>>>0<=k>>>0)break;oa=l+300|0;c[p>>2]=c[oa>>2];c[oa>>2]=p;break X}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{oa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);k=c[T>>2]|0;if((k|0)>0)b[(c[M>>2]|0)+((k+-1|0)*20|0)+2>>1]=y&255;if((c[R>>2]|0)>(k|0)){c[T>>2]=k+1;oa=c[M>>2]|0;a[oa+(k*20|0)>>0]=50;b[oa+(k*20|0)+2>>1]=0;c[oa+(k*20|0)+4>>2]=2;c[oa+(k*20|0)+8>>2]=0;c[oa+(k*20|0)+12>>2]=0;c[oa+(k*20|0)+16>>2]=0;a[oa+(k*20|0)+1>>0]=0}else k=Di(Aa,50,2,0,0)|0;c[ra>>2]=c[(c[ya>>2]|0)+(y<<4)>>2];o=dd(Da,45548,ra)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=110;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=0;c[oa+(l*20|0)+8>>2]=3;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else l=Di(Aa,110,0,3,0)|0;m=c[Aa>>2]|0;Y:do if(a[m+81>>0]|0){if(!o)break;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break Y}l=o;if((c[m+304>>2]|0)>>>0>l>>>0)break;if((c[m+308>>2]|0)>>>0<=l>>>0)break;oa=m+300|0;c[o>>2]=c[oa>>2];c[oa>>2]=o;break Y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{oa=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else{if((l|0)<0)l=(c[T>>2]|0)+-1|0;m=c[M>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(Aa,m+(l*20|0)|0,o,-7);break}if(!o)break;c[m+(l*20|0)+16>>2]=o;a[n>>0]=-7}while(0);l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=105;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=2;c[oa+(l*20|0)+8>>2]=3;c[oa+(l*20|0)+12>>2]=3;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,105,2,3,3)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=81;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=3;c[oa+(l*20|0)+8>>2]=1;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;l=c[T>>2]|0;m=l+2|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=47;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=1;c[oa+(l*20|0)+8>>2]=m;c[oa+(l*20|0)+12>>2]=1;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,47,1,m,1)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;$=c[M>>2]|0;a[$+(l*20|0)>>0]=69;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;l=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=(c[M>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;k=c[g>>2]|0;if(!k)break;do{u=c[k+8>>2]|0;do if((c[u+28>>2]|0)>=1){Z:do if(!(c[u+36>>2]&32))l=0;else{l=c[u+8>>2]|0;if(!l){l=0;break}while(1){oa=l+55|0;if(((d[oa>>0]|d[oa+1>>0]<<8)&3)==2)break Z;l=c[l+20>>2]|0;if(!l){l=0;break}}}while(0);Hm(f,u,108,0,1,0,wa,va)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=70;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=7;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,70,0,7,0)|0;x=u+8|0;m=c[x>>2]|0;if(m|0){n=0;while(1){o=n+8|0;p=c[T>>2]|0;if((c[R>>2]|0)>(p|0)){c[T>>2]=p+1;oa=c[M>>2]|0;a[oa+(p*20|0)>>0]=70;b[oa+(p*20|0)+2>>1]=0;c[oa+(p*20|0)+4>>2]=0;c[oa+(p*20|0)+8>>2]=o;c[oa+(p*20|0)+12>>2]=0;c[oa+(p*20|0)+16>>2]=0;a[oa+(p*20|0)+1>>0]=0}else Di(Aa,70,0,o,0)|0;m=c[m+20>>2]|0;if(!m)break;else n=n+1|0}}m=c[wa>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=36;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=m;c[oa+(n*20|0)+8>>2]=0;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,36,m,0,0)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;w=c[M>>2]|0;a[w+(m*20|0)>>0]=83;b[w+(m*20|0)+2>>1]=0;c[w+(m*20|0)+4>>2]=7;c[w+(m*20|0)+8>>2]=1;c[w+(m*20|0)+12>>2]=0;c[w+(m*20|0)+16>>2]=0;a[w+(m*20|0)+1>>0]=0;w=m}else w=Di(Aa,83,7,1,0)|0;do if(V)p=u+42|0;else{m=c[wa>>2]|0;p=u+42|0;n=(b[p>>1]|0)+-1|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=90;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=m;c[oa+(o*20|0)+8>>2]=n;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,90,m,n,3)|0;m=c[T>>2]|0;if((m|0)<=0)break;b[(c[M>>2]|0)+((m+-1|0)*20|0)+2>>1]=128}while(0);m=b[p>>1]|0;if(m<<16>>16>0){s=u+40|0;t=u+4|0;r=0;do{do if((r|0)!=(b[s>>1]|0)){if(!(a[(c[t>>2]|0)+(r<<4)+12>>0]|0))break;Vj(Aa,u,c[wa>>2]|0,r,3);m=c[T>>2]|0;if((m|0)>0)b[(c[M>>2]|0)+((m+-1|0)*20|0)+2>>1]=128;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=51;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=3;c[oa+(m*20|0)+8>>2]=0;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,51,3,0,0)|0;q=c[(c[t>>2]|0)+(r<<4)>>2]|0;c[sa>>2]=c[u>>2];c[sa+4>>2]=q;q=dd(Da,45572,sa)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,3,0)|0;o=c[Aa>>2]|0;_:do if(a[o+81>>0]|0){if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break _}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;oa=o+300|0;c[q>>2]=c[oa>>2];c[oa>>2]=q;break _}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{oa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else{if((n|0)<0)n=(c[T>>2]|0)+-1|0;o=c[M>>2]|0;g=o+(n*20|0)+1|0;if(a[g>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[g>>0]=-7}while(0);n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=81;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=3;c[oa+(n*20|0)+8>>2]=1;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;n=c[T>>2]|0;o=n+2|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=47;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=1;c[oa+(n*20|0)+8>>2]=o;c[oa+(n*20|0)+12>>2]=1;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,47,1,o,1)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;$=c[M>>2]|0;a[$+(n*20|0)>>0]=69;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;n=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))m=(c[M>>2]|0)+(((m|0)<0?n+-1|0:m)*20|0)|0;else m=59308;c[m+8>>2]=n;m=b[p>>1]|0}while(0);r=r+1|0}while((r|0)<(m<<16>>16|0))}m=c[u+24>>2]|0;$:do if(m|0){if(!((c[N>>2]&512|0)==0&0==0))break;q=gk(Da,m,0)|0;do if(!(a[z>>0]|0)){g=c[O>>2]|0;n=g+-1|0;o=g+-2|0;c[O>>2]=o;c[Q>>2]=(c[wa>>2]|0)+1;m=c[q>>2]|0;if((m|0)>1)do{oa=m;m=m+-1|0;Tj(f,c[q+4+(m*20|0)>>2]|0,n,0)}while((oa|0)>2);tk(f,c[q+4>>2]|0,o,16);m=c[P>>2]|0;n=0-g|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Aa,n);else c[(c[m+64>>2]|0)+(n<<2)>>2]=c[T>>2];c[Q>>2]=0;c[ta>>2]=c[u>>2];p=dd(Da,45592,ta)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=110;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=3;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,110,0,3,0)|0;n=c[Aa>>2]|0;aa:do if(a[n+81>>0]|0){if(!p)break;do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break aa}m=p;if((c[n+304>>2]|0)>>>0>m>>>0)break;if((c[n+308>>2]|0)>>>0<=m>>>0)break;oa=n+300|0;c[p>>2]=c[oa>>2];c[oa>>2]=p;break aa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{oa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else{if((m|0)<0)m=(c[T>>2]|0)+-1|0;n=c[M>>2]|0;o=n+(m*20|0)+1|0;if(a[o>>0]|0){Ei(Aa,n+(m*20|0)|0,p,-7);break}if(!p)break;c[n+(m*20|0)+16>>2]=p;a[o>>0]=-7}while(0);m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=81;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=3;c[oa+(m*20|0)+8>>2]=1;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;m=c[T>>2]|0;n=m+2|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=47;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=1;c[oa+(m*20|0)+8>>2]=n;c[oa+(m*20|0)+12>>2]=1;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,47,1,n,1)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;$=c[M>>2]|0;a[$+(m*20|0)>>0]=69;$=$+(m*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;n=c[P>>2]|0;m=1-g|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0){mk(n,Aa,m);break}else{c[(c[n+64>>2]|0)+(m<<2)>>2]=c[T>>2];break}}else if(!q)break $;while(0);ri(Da,q)}while(0);if(V){l=c[wa>>2]|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=5;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=l;c[oa+(m*20|0)+8>>2]=w;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,5,l,w,0)|0;m=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[M>>2]|0)+((((w|0)<1?m:w)+-1|0)*20|0)|0;else l=59308;c[l+8>>2]=m;break}m=c[x>>2]|0;if(m|0){v=u+4|0;n=-1;o=0;j=0;while(1){g=(c[O>>2]|0)+-1|0;c[O>>2]=g;do if((l|0)!=(m|0)){i=el(f,m,c[wa>>2]|0,0,0,pa,o,n)|0;n=j+8|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=83;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=1;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,83,n,1,0)|0;n=(c[va>>2]|0)+j|0;p=e[m+52>>1]|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=29;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=g;c[oa+(o*20|0)+12>>2]=i;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0;g=o}else g=Di(Aa,29,n,g,i)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){oa=c[M>>2]|0;a[oa+(g*20|0)+1>>0]=-3;c[oa+(g*20|0)+16>>2]=p}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,3,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,45622,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=7;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,7,3,3)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,45627,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=4;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,4,3,3)|0;p=c[m>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)o=(c[T>>2]|0)+-1|0;else o=n;Ei(Aa,(c[M>>2]|0)+(o*20|0)|0,p,0)}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=105;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=4;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,105,4,3,3)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=81;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=3;c[oa+(o*20|0)+8>>2]=1;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;o=c[T>>2]|0;p=o+2|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;u=c[M>>2]|0;a[u+(o*20|0)>>0]=47;b[u+(o*20|0)+2>>1]=0;c[u+(o*20|0)+4>>2]=1;c[u+(o*20|0)+8>>2]=p;c[u+(o*20|0)+12>>2]=1;c[u+(o*20|0)+16>>2]=0;a[u+(o*20|0)+1>>0]=0;u=o}else u=Di(Aa,47,1,p,1)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;$=c[M>>2]|0;a[$+(o*20|0)>>0]=69;$=$+(o*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;p=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))o=(c[M>>2]|0)+(((g|0)<0?p+-1|0:g)*20|0)|0;else o=59308;c[o+8>>2]=p;do if(a[m+54>>0]|0){t=c[O>>2]|0;s=t+-1|0;c[O>>2]=s;r=m+50|0;if(b[r>>1]|0){p=m+4|0;o=0;do{oa=b[(c[p>>2]|0)+(o<<1)>>1]|0;if(!(oa<<16>>16>-1?(a[(c[v>>2]|0)+(oa<<16>>16<<4)+12>>0]|0)!=0:0))za=1581;do if((za|0)==1581){za=0;g=o+i|0;q=c[T>>2]|0;if((c[R>>2]|0)>(q|0)){c[T>>2]=q+1;oa=c[M>>2]|0;a[oa+(q*20|0)>>0]=50;b[oa+(q*20|0)+2>>1]=0;c[oa+(q*20|0)+4>>2]=g;c[oa+(q*20|0)+8>>2]=s;c[oa+(q*20|0)+12>>2]=0;c[oa+(q*20|0)+16>>2]=0;a[oa+(q*20|0)+1>>0]=0;break}else{Di(Aa,50,g,s,0)|0;break}}while(0);o=o+1|0}while(o>>>0<(e[r>>1]|0)>>>0);p=c[T>>2]|0}o=(c[va>>2]|0)+j|0;if((c[R>>2]|0)>(p|0)){c[T>>2]=p+1;oa=c[M>>2]|0;a[oa+(p*20|0)>>0]=5;b[oa+(p*20|0)+2>>1]=0;c[oa+(p*20|0)+4>>2]=o;c[oa+(p*20|0)+8>>2]=0;c[oa+(p*20|0)+12>>2]=0;c[oa+(p*20|0)+16>>2]=0;a[oa+(p*20|0)+1>>0]=0}else p=Di(Aa,5,o,0,0)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=11;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=s;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,11,0,s,0)|0;o=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))p=(c[M>>2]|0)+(((p|0)<0?o+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=o;p=(c[va>>2]|0)+j|0;g=e[r>>1]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=38;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=p;c[oa+(o*20|0)+8>>2]=s;c[oa+(o*20|0)+12>>2]=i;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,38,p,s,i)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){oa=c[M>>2]|0;a[oa+(o*20|0)+1>>0]=-3;c[oa+(o*20|0)+16>>2]=g}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=110;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,110,0,3,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(o*20|0)|0,45648,0)}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=11;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=n;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,11,0,n,0)|0;o=c[P>>2]|0;n=0-t|0;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,Aa,n);break}else{c[(c[o+64>>2]|0)+(n<<2)>>2]=c[T>>2];break}}while(0);o=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+(((u|0)<0?o+-1|0:u)*20|0)|0;else n=59308;c[n+8>>2]=o;n=c[pa>>2]|0;if(!n){n=i;o=m;break}o=c[ua>>2]|0;p=c[o+12>>2]|0;n=~n;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0){mk(p,o,n);n=i;o=m;break}else{c[(c[p+64>>2]|0)+(n<<2)>>2]=c[o+108>>2];n=i;o=m;break}}while(0);m=c[m+20>>2]|0;if(!m)break;else j=j+1|0}}m=c[wa>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=5;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=m;c[oa+(n*20|0)+8>>2]=w;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,5,m,w,0)|0;m=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+((((w|0)<1?m:w)+-1|0)*20|0)|0;else n=59308;c[n+8>>2]=m;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=110;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=2;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,110,0,2,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(m*20|0)|0,45675,0)}m=c[x>>2]|0;if(!m)break;g=0;while(1){if((l|0)!=(m|0)){n=(c[va>>2]|0)+g|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=93;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,93,n,3,0)|0;n=g+8|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=53;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=0;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,53,n,0,3)|0;n=c[T>>2]|0;if((n|0)>0)b[(c[M>>2]|0)+((n+-1|0)*20|0)+2>>1]=144;p=c[m>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,p,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=4;c[oa+(n*20|0)+8>>2]=2;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,4,2,3)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=81;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=3;c[oa+(n*20|0)+8>>2]=1;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;n=c[T>>2]|0;p=n+2|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=47;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=1;c[oa+(n*20|0)+8>>2]=p;c[oa+(n*20|0)+12>>2]=1;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,47,1,p,1)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;$=c[M>>2]|0;a[$+(n*20|0)>>0]=69;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;p=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+(((o|0)<0?p+-1|0:o)*20|0)|0;else n=59308;c[n+8>>2]=p}m=c[m+20>>2]|0;if(!m)break;else g=g+1|0}}while(0);k=c[k>>2]|0}while((k|0)!=0)}while(0);y=y+1|0}while((y|0)<(c[A>>2]|0))}while(0);k=ed(Aa,7,18432)|0;if(k|0){c[k+8>>2]=1-S;a[k+41>>0]=-1;c[k+56>>2]=45704;a[k+101>>0]=-1;c[k+116>>2]=50394}if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=c[Aa+104>>2]|0;else k=59308;c[k+12>>2]=(c[T>>2]|0)+-2;za=2020;break b}case 12:{if(!Ba){m=c[f>>2]|0;ba:do if(!(a[m+165>>0]|0)){n=f+4|0;o=m+24|0;p=(c[o>>2]&1|0)==0;g=m+16|0;ya=c[(c[g>>2]|0)+12>>2]|0;a[m+78>>0]=a[ya+77>>0]|0;if((b[ya+78>>1]&1)==0?(P=eh(m,0,n,0)|0,(P|0)!=0):0)k=P;else za=1682;ca:do if((za|0)==1682){k=c[m+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[g>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(R=eh(m,k,n,0)|0,R|0):0){k=R;break ca}}while((l|0)>2);if(p)c[o>>2]=c[o>>2]&-2;if(!(a[m+89>>0]|0))break ba;c[o>>2]=c[o>>2]|16;break ba}while(0);c[f+12>>2]=k;Aa=f+36|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break f}while(0);za=a[(c[f>>2]|0)+78>>0]|0;l=c[18464+((za&255)<<3)>>2]|0;if(za<<24>>24==8)break f;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}o=c[(c[ya>>2]|0)+12>>2]|0;if((b[o+78>>1]&5)==1){za=2020;break b}k=a[Ba>>0]|0;da:do if(k<<24>>24){k=(d[208+(k&255)>>0]|0)+-117|0;n=(k|0)==0;if(n){l=45707;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}do if(k){if(!n)break da;k=45712;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18472;break}k=45718;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18480;break}k=45727;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18488;break}k=45736;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18496;break}k=45744;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18504;break}k=45752;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18512;break}k=45759;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m)k=18520;else break da}else k=18464;while(0);za=a[k+4>>0]|0;za=za<<24>>24==0?2:za;a[Da+78>>0]=za;a[o+77>>0]=za;za=2020;break b}while(0);c[ca>>2]=Ba;cd(f,45765,ca);break f}case 0:{k=c[4544+(j<<4)+8>>2]|0;l=1<<r;za=Aa+152|0;c[za>>2]=c[za>>2]|l;if(!$?a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0:0){za=Aa+156|0;c[za>>2]=c[za>>2]|l}ea:do if(Ba|0){switch(o|0){case 24:case 25:case 42:case 43:break ea;default:{}}Aa=ed(Aa,2,45790)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+28>>2]=k;c[wa>>2]=0;ii(Ba,wa)|0;c[Aa+32>>2]=c[wa>>2];break f}while(0);Aa=ed(Aa,3,45798)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+32>>2]=k;Aa=(d[F>>0]|d[F+1>>0]<<8)&-65;a[F>>0]=Aa;a[F+1>>0]=Aa>>8;break f}case 8:{c[xa>>2]=1;n=Aa+108|0;o=Aa+112|0;p=Aa+104|0;m=0;do{l=c[26464+(m<<2)>>2]|0;m=m+1|0;k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[p>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[p>>2]|0)+(k*20|0)|0,l,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[p>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0}while((m|0)!=7);Aa=(d[F>>0]|d[F+1>>0]<<8)&-65;a[F>>0]=Aa;a[F+1>>0]=Aa>>8;break f}case 39:{p=(c[h>>2]|0)==0?10:r;do if(Ba){o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-102|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45810;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)l=1;else{k=n+-114|0;if(!(o|(k|0)!=0)){l=45815;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){l=2;break}k=n+-116|0;if(!(o|(k|0)!=0)){l=36052;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}l=(k|0)==0?3:0}}else l=0;while(0);c[xa>>2]=3;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=6;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=p;c[za+(k*20|0)+8>>2]=l;c[za+(k*20|0)+12>>2]=1;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,6,p,l,1)|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=3;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,3,0)|0;break f}}case 38:{if(!Ba)k=c[Da+240>>2]|0;else{c[wa>>2]=0;ii(Ba,wa)|0;za=c[wa>>2]|0;ya=(za|0)>0;k=ya?76:0;c[Da+240>>2]=k;c[Da+244>>2]=ya?za:0}if((k|0)==76){o=c[Da+244>>2]|0;n=o;o=((o|0)<0)<<31>>31}else{n=0;o=0}m=c[Aa>>2]|0;fa:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1767;else za=1787;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1768;break fa}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1768;break fa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1767}while(0);if((za|0)==1767){p=_d(m,8,0)|0;za=1768}ga:do if((za|0)==1768){if(!p){za=1787;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break ga}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==1787){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 31:{o=Da+20|0;m=c[o>>2]|0;if((m|0)<=0){za=2020;break b}n=c[ya>>2]|0;k=0;do{l=c[n+(k<<4)+4>>2]|0;if(l|0)c[(c[l+4>>2]|0)+4>>2]=c[l>>2];k=k+1|0}while((k|0)!=(m|0));k=0;while(1){l=c[n+(k<<4)+4>>2]|0;if(!l)l=m;else{ab[c[29456>>2]&127](c[(c[(c[c[l+4>>2]>>2]|0)+212>>2]|0)+44>>2]|0);l=c[o>>2]|0}k=k+1|0;if((k|0)>=(l|0)){za=2020;break b}n=c[ya>>2]|0;m=l}}case 27:{if(Ba){c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;if(!(k&2))break f}else k=65534;wa=f+40|0;w=c[wa>>2]|0;c[wa>>2]=w+1;if(!la)j=(c[Da+20>>2]|0)+-1|0;else j=r;if((r|0)>(j|0)){m=Aa+108|0;k=Aa+112|0}else{v=f+116|0;t=k&1;s=(t|0)==0;m=Aa+108|0;t=t|2;k=Aa+112|0;u=f+19|0;i=Aa+104|0;while(1){do if((r|0)!=1){l=c[v>>2]|0;l=((l|0)==0?f:l)+84|0;n=c[l>>2]|0;o=1<<r;if(!(n&o))c[l>>2]=n|o;l=c[(c[(c[ya>>2]|0)+(r<<4)+12>>2]|0)+16>>2]|0;if(!l)break;do{q=c[l+8>>2]|0;ha:do if(c[q+36>>2]&256|0){g=(e[q+44>>1]|0)+46|0;o=g&65535;n=c[q+8>>2]|0;ia:do if(!n)za=1825;else while(1){wa=n+55|0;if(!((d[wa>>0]|d[wa+1>>0]<<8)&128))break ia;n=c[n+20>>2]|0;if(!n){za=1825;break}}while(0);do if((za|0)==1825){za=0;if(!(o<<16>>16))break;Gj(f,w,r,q,108);o=c[m>>2]|0;p=o+t|0;n=g<<16>>16;if((c[k>>2]|0)>(o|0)){c[m>>2]=o+1;wa=c[i>>2]|0;a[wa+(o*20|0)>>0]=33;b[wa+(o*20|0)+2>>1]=0;c[wa+(o*20|0)+4>>2]=w;c[wa+(o*20|0)+8>>2]=p;c[wa+(o*20|0)+12>>2]=n;c[wa+(o*20|0)+16>>2]=0;a[wa+(o*20|0)+1>>0]=0;break}else{Di(Aa,33,w,p,n)|0;break}}while(0);q=c[q>>2]|0;c[ha>>2]=c[(c[ya>>2]|0)+(r<<4)>>2];c[ha+4>>2]=q;q=dd(Da,45823,ha)|0;if(s){n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;$=c[i>>2]|0;a[$+(n*20|0)>>0]=-116;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else n=Di(Aa,140,0,0,0)|0;o=c[Aa>>2]|0;if(!(a[o+81>>0]|0)){if((n|0)<0)n=(c[m>>2]|0)+-1|0;o=c[i>>2]|0;p=o+(n*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[p>>0]=-7;break}if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break ha}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;wa=o+300|0;c[q>>2]=c[wa>>2];c[wa>>2]=q;break ha}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{wa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}n=a[u>>0]|0;if(!(n<<24>>24)){g=(c[xa>>2]|0)+1|0;c[xa>>2]=g}else{g=n+-1<<24>>24;a[u>>0]=g;g=c[f+148+((g&255)<<2)>>2]|0}n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;wa=c[i>>2]|0;a[wa+(n*20|0)>>0]=110;b[wa+(n*20|0)+2>>1]=0;c[wa+(n*20|0)+4>>2]=0;c[wa+(n*20|0)+8>>2]=g;c[wa+(n*20|0)+12>>2]=0;c[wa+(n*20|0)+16>>2]=0;a[wa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,g,0)|0;o=c[Aa>>2]|0;ja:do if(a[o+81>>0]|0){if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break ja}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;wa=o+300|0;c[q>>2]=c[wa>>2];c[wa>>2]=q;break ja}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{wa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else{if((n|0)<0)n=(c[m>>2]|0)+-1|0;o=c[i>>2]|0;p=o+(n*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[p>>0]=-7}while(0);n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;wa=c[i>>2]|0;a[wa+(n*20|0)>>0]=81;b[wa+(n*20|0)+2>>1]=0;c[wa+(n*20|0)+4>>2]=g;c[wa+(n*20|0)+8>>2]=1;c[wa+(n*20|0)+12>>2]=0;c[wa+(n*20|0)+16>>2]=0;a[wa+(n*20|0)+1>>0]=0;break}else{Di(Aa,81,g,1,0)|0;break}}while(0);l=c[l>>2]|0}while((l|0)!=0)}while(0);if((r|0)<(j|0))r=r+1|0;else break}}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;$=c[Aa+104>>2]|0;a[$+(l*20|0)>>0]=-98;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0));break f}else{Di(Aa,158,0,0,0)|0;break f}}case 32:{if((Ba|0?(Vd(Ba,wa)|0)==0:0)?(H=wa,G=c[H>>2]|0,H=c[H+4>>2]|0,!((H|0)<0|(mb()|0)!=0)):0){za=59064;c[za>>2]=G;c[za+4>>2]=H;c[14768]=((G|0)!=0|(H|0)!=0)&((H|0)<0|(H|0)==0&G>>>0<=(c[14978]|0)>>>0)&1}m=(mb()|0)==0;o=59064;n=m?c[o>>2]|0:-1;o=m?c[o+4>>2]|0:-1;m=c[Aa>>2]|0;ka:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1942;else za=1962;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1943;break ka}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1943;break ka}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1942}while(0);if((za|0)==1942){p=_d(m,8,0)|0;za=1943}la:do if((za|0)==1943)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break la}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break la}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=1962;while(0);do if((za|0)==1962){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;break f}case 37:{if(Ba|0?(f=(Vd(Ba,wa)|0)==0,za=wa,ya=c[za+4>>2]|0,f&((ya|0)>-1|(ya|0)==-1&(c[za>>2]|0)>>>0>4294967295)):0)c[Da+152>>2]=0;n=c[Da+152>>2]|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;ma:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1987;else za=2007;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1988;break ma}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1988;break ma}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1987}while(0);if((za|0)==1987){p=_d(m,8,0)|0;za=1988}na:do if((za|0)==1988)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break na}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break na}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=2007;while(0);do if((za|0)==2007){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;za=2020;break b}default:{if(!Ba)k=c[Da+448>>2]|0;else{c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;l=Da+396|0;if((k|0)>0){c[l>>2]=91;c[Da+400>>2]=Da;c[t>>2]=0;a[Da+408>>0]=1}else{c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;a[l+12>>0]=0;k=0}c[Da+448>>2]=k}o=((k|0)<0)<<31>>31;n=c[Aa>>2]|0;oa:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))za=1897;else za=1917;else{do if((e[n+276>>1]|0)>=8){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];za=n+284|0;c[za>>2]=(c[za>>2]|0)+1;za=1898;break oa}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];za=n+284|0;c[za>>2]=(c[za>>2]|0)+1;za=1898;break oa}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;za=1897}while(0);if((za|0)==1897){m=_d(n,8,0)|0;za=1898}pa:do if((za|0)==1898)if(m){p=m;l=p;a[l>>0]=k;a[l+1>>0]=k>>8;a[l+2>>0]=k>>16;a[l+3>>0]=k>>24;p=p+4|0;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;p=Aa+108|0;k=c[p>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[p>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[p>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=m;a[o>>0]=-14;m=p;break}else{Ei(Aa,n+(k*20|0)|0,m,-14);m=p;break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,m);m=p;break pa}k=m;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[m>>2]=c[ya>>2];c[ya>>2]=m;m=p;break pa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);m=p;break}else{ya=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);m=p;break}}else za=1917;while(0);do if((za|0)==1917){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}}while(0)}while(0);if(!Da){za=2025;break b}else{za=2020;break b}}else k=1;while(0);za=f+36|0;c[za>>2]=(c[za>>2]|0)+1;c[f+12>>2]=k;za=2020}while(0);do if((za|0)==2020){if(c[Da+480>>2]|0){Xd(Da,Ca);break}Aa=Ca;if((c[Da+304>>2]|0)>>>0<=Aa>>>0?(c[Da+308>>2]|0)>>>0>Aa>>>0:0){Aa=Da+300|0;c[Ca>>2]=c[Aa>>2];c[Aa>>2]=Ca}else za=2025}while(0);do if((za|0)==2025)if(!(c[7324]|0)){ab[c[29344>>2]&127](Ca);break}else{Aa=Wa[c[29352>>2]&127](Ca)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Ca);break}while(0);if(!Ba){Ra=Ea;return}if(Da|0){if(c[Da+480>>2]|0){Xd(Da,Ba);Ra=Ea;return}Ca=Ba;if((c[Da+304>>2]|0)>>>0<=Ca>>>0?(c[Da+308>>2]|0)>>>0>Ca>>>0:0){Da=Da+300|0;c[Ba>>2]=c[Da>>2];c[Da>>2]=Ba;Ra=Ea;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](Ba);Ra=Ea;return}else{Da=Wa[c[29352>>2]&127](Ba)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Ba);Ra=Ea;return}}\nfunction Or(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,ob=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0;Nb=Ra;Ra=Ra+256|0;Jb=Nb+232|0;Hb=Nb+224|0;Gb=Nb+216|0;Fb=Nb+208|0;Eb=Nb+200|0;Db=Nb+192|0;Cb=Nb+184|0;Ab=Nb+176|0;zb=Nb+168|0;yb=Nb+160|0;xb=Nb+152|0;vb=Nb+144|0;ub=Nb+136|0;tb=Nb+128|0;Ib=Nb+120|0;wb=Nb+112|0;l=Nb+104|0;Kb=Nb+56|0;lb=Nb+244|0;ob=Nb+8|0;qb=Nb;rb=Nb+240|0;if(mb()|0){Mb=7;Ra=Nb;return Mb|0}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](640)|0;if(!i){Mb=7;Ra=Nb;return Mb|0}else Lb=i}else{i=Wa[c[29356>>2]&127](640)|0;if((c[14985]|0)>>>0<640)c[14985]=640;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){Lb=c[14978]|0;jb=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;ib=L()|0;c[14768]=((ib|0)<0|(ib|0)==0&jb>>>0<=Lb>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(!j){Mb=7;Ra=Nb;return Mb|0}i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;Lb=j}else Lb=j}ib=Lb+568|0;jb=Lb+584|0;k=f+144|0;i=c[k>>2]|0;c[Kb>>2]=i;do if(!i){i=c[f+20>>2]|0;c[l>>2]=c[f+16>>2];c[l+4>>2]=i;i=Bb(52411,l)|0;if(!i){j=7;i=0;break}j=qd(c[f+12>>2]|0,i,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{hb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-hb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[Kb>>2]|0;c[k>>2]=i;if(!j){m=i;M=21}else i=0}else{m=i;M=21}while(0);do if((M|0)==21){o=m;do if(!(Vc(o,1)|0)){i=c[o+100>>2]|0;j=i+8|0;if(!(b[j>>1]&9216)){hb=i;c[hb>>2]=1;c[hb+4>>2]=0;b[j>>1]=4;break}else{Pg(i,1,0);break}}while(0);do if((Gc(o)|0)==100){if(!m)j=mc(29576)|0;else{i=c[o+120>>2]|0;if((i|0)!=0?(b[o+144>>1]|0)!=0:0)j=o;else{i=c[o>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;j=o}l=mc(i)|0;i=c[j>>2]|0;k=o+40|0;j=c[k>>2]|0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&j;c[k>>2]=i;j=l}n=Lc(o,0)|0;if(j){if((n|0)>0){if(mb()|0){l=7;i=0;n=0;p=0;break}i=sb(0,n,0)|0;if(!i){l=7;i=0;n=0;p=0;break}else k=n}else{i=0;k=0}ew(i|0,j|0,n|0)|0;l=0;p=k}else{l=0;i=0;n=0;p=0}}else{l=0;i=0;n=0;p=0}while(0);do if(m){j=c[o>>2]|0;hb=o+136|0;gb=c[hb+4>>2]|0;if((gb|0)>0|(gb|0)==0&(c[hb>>2]|0)>>>0>0)hc(j,o);k=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;hb=o+64|0;c[hb>>2]=0;c[hb+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}else j=0;while(0);j=(l|0)==0?j:l;if((j|0)==0&(g|0)>0){eb=f+252|0;fb=f+168|0;gb=f+16|0;hb=f+20|0;Q=(h|0)>2?h:2;R=f+12|0;S=Lb+580|0;T=f+88|0;U=Lb+588|0;V=f+116|0;W=Lb+600|0;X=f+104|0;Y=Lb+596|0;Z=Lb+572|0;_=Lb+624|0;$=Lb+628|0;aa=f+184|0;ba=Lb+40|0;ca=f+172|0;da=Lb+632|0;ea=Lb+636|0;fa=Lb+64|0;ga=Lb+68|0;ha=Lb+76|0;ia=Lb+80|0;ja=f+228|0;ka=Lb+56|0;la=Lb+4|0;ma=Lb+84|0;na=Lb+48|0;oa=Lb+116|0;pa=Lb+108|0;qa=Lb+8|0;ra=Lb+16|0;sa=Lb+24|0;ta=Lb+32|0;ua=f+96|0;va=Lb+112|0;wa=Lb+88|0;xa=Lb+120|0;ya=Lb+152|0;za=Lb+184|0;Aa=Lb+216|0;Ba=Lb+248|0;Ca=Lb+280|0;Da=Lb+312|0;Ea=Lb+344|0;Fa=Lb+376|0;Ga=Lb+408|0;Ha=Lb+440|0;Ia=Lb+472|0;Ja=Lb+504|0;Ka=Lb+536|0;La=f+192|0;Ma=f+176|0;Na=f+124|0;Oa=ob+4|0;Pa=f+188|0;Qa=lb+4|0;Sa=f+196|0;Ta=ob+8|0;Ua=ob+4|0;Va=f+236|0;Xa=ob+16|0;Ya=ob+24|0;Za=ob+28|0;_a=Kb+8|0;$a=Kb+4|0;bb=Kb+16|0;cb=Kb+28|0;P=Kb+24|0;db=f+180|0;K=g;k=0;o=0;h=0;while(1){u=c[eb>>2]<<10;v=((u|0)<0)<<31>>31;O=c[fb>>2]|0;c[Kb>>2]=O;j=O;if((O|0)==0?(kb=c[hb>>2]|0,c[wb>>2]=c[gb>>2],c[wb+4>>2]=kb,kb=Bb(52607,wb)|0,(kb|0)!=0):0){qd(c[R>>2]|0,kb,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](kb);else{O=Wa[c[29352>>2]&127](kb)|0;c[14978]=(c[14978]|0)-O;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](kb)}j=c[Kb>>2]|0;c[fb>>2]=j}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){O=l;c[O>>2]=Q;c[O+4>>2]=0;b[m>>1]=4;break}else{Pg(l,Q,0);break}}while(0);if((Gc(g)|0)==100){o=Oc(g,0)|0;h=L()|0;t=Nc(g,1)|0}else t=-1;do if(j){j=c[g>>2]|0;O=g+136|0;N=c[O+4>>2]|0;if((N|0)>0|(N|0)==0&(c[O>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;O=g+64|0;c[O>>2]=0;c[O+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j){M=67;break}else{M=94;break}}else{og(j);j=7;M=94;break}}else M=67;while(0);if((M|0)==67){M=0;if(n){j=n+-2|0;a:do if((n|0)>2)while(1){l=j+-1|0;if((a[i+l>>0]|0)>=0)break a;if((j|0)>1)j=l;else{j=l;break}}while(0);b:do if((j|0)>0)while(1){l=j+-1|0;if((a[i+l>>0]|0)>=0){l=j;break b}if((j|0)>1)j=l;else break}else l=j;while(0);r=i+l|0;m=a[r>>0]|0;j=m&255;do if(!(j&128)){g=1;s=m&255;q=0}else{O=d[r+1>>0]|0;j=O<<7|j&127;if(!(O&128)){g=2;s=j;q=0;break}O=d[r+2>>0]|0;j=O<<14|j&16383;if(!(O&128)){g=3;s=j;q=0;break}O=d[r+3>>0]|0;j=O<<21|j&2097151;if(!(O&128)){g=4;s=j;q=0;break}m=28;g=r+4|0;j=j&268435455;q=0;do{O=g;g=g+1|0;O=d[O>>0]|0;N=cw(O&127|0,0,m|0)|0;j=Sv(N|0,L()|0,j|0,q|0)|0;q=L()|0;m=m+7|0}while(m>>>0<64&((O&128|0)!=0|0!=0));g=g-r|0;s=j}while(0);r=g+l|0;g=i+r|0;j=a[g>>0]|0;m=j&255;do if(!(m&128))j=1;else{O=d[g+1>>0]|0;j=O<<7|j&127;if(!(O&128)){m=j;j=2;break}O=d[g+2>>0]|0;j=O<<14|j&16383;if(!(O&128)){m=j;j=3;break}O=d[g+3>>0]|0;j=O<<21|j&2097151;if(!(O&128)){m=j;j=4;break}m=(a[g+4>>0]&7)<<28|j&268435455;j=5}while(0);j=(j+r|0)==(n|0)?0:267;if((t|0)<0){E=1;J=m;k=1;n=l;O=s;N=q}else{E=Zv(o|0,h|0,u|0,v|0)|0;O=L()|0;N=Zv(s|0,q|0,u|0,v|0)|0;J=L()|0;N=(O|0)<(J|0)|(O|0)==(J|0)&E>>>0<N>>>0;E=(N^1)&1;J=N?t:m;k=N?k:1;n=N?n:l;O=N?o:s;N=N?h:q}}else{j=0;n=0;M=94}}if((M|0)==94){M=0;if((t|0)<0)break;else{E=0;J=t;O=o;N=h}}gw(Lb|0,0,640)|0;c[S>>2]=1;c:do if(!j){j=c[T>>2]|0;c[Kb>>2]=j;do if(!j){j=c[hb>>2]|0;c[Ib>>2]=c[gb>>2];c[Ib+4>>2]=j;j=Bb(51533,Ib)|0;if(!j){s=0;M=116;break}l=qd(c[R>>2]|0,j,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{M=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[Kb>>2]|0;c[T>>2]=j;if(!l)M=104;else{s=0;M=116}}else M=104;while(0);if((M|0)==104){M=0;g=j;l=Sv(O|0,N|0,1,0)|0;m=L()|0;do if(!(Vc(g,1)|0)){o=c[g+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);Gc(g)|0;m=Nc(g,0)|0;do if(j){j=c[g>>2]|0;I=g+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;I=g+64|0;c[I>>2]=0;c[I+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);if(m)if((E|0)!=0&(m|0)==1){s=1;M=116}else D=m;else{s=0;M=116}}do if((M|0)==116){M=0;g=Sv(O|0,N|0,1,0)|0;q=L()|0;j=c[V>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[tb>>2]=c[gb>>2];c[tb+4>>2]=l;l=Bb(52072,tb)|0;if(!l){m=K;j=7;l=p;M=801;break c}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[V>>2]=l;if(!j)j=l;else{m=K;l=p;M=801;break c}}r=j;l=Sv(O|0,N|0,2,0)|0;m=L()|0;do if(!(Vc(r,1)|0)){o=c[r+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);l=Wv(g|0,q|0,1024,0)|0;l=cw(l|0,L()|0,10)|0;l=Sv(l|0,L()|0,1024,0)|0;m=L()|0;do if(!(Vc(r,2)|0)){h=c[r+100>>2]|0;o=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);if((Gc(r)|0)==100){if(!j)l=1;else{l=c[r+120>>2]|0;do if(!l)M=137;else{if(!(b[r+144>>1]|0)){M=137;break}m=r}while(0);if((M|0)==137){M=0;l=c[r>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;m=r}l=b[l+8>>1]&31;m=c[m>>2]|0;h=r+40|0;o=c[h>>2]|0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);m=7}else m=c[m+68>>2]&o;c[h>>2]=m}m=-1431655766>>>l&1}else m=0;do if(j){j=c[r>>2]|0;I=r+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(j,r);l=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;I=r+64|0;c[I>>2]=0;c[I+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);if(!m){D=s;break}c[S>>2]=c[S>>2]|2;D=s}while(0);if(!j){A=jb;B=A+56|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));j=J<<2;l=pb(j,0)|0;c[jb>>2]=l;if(!l){m=K;j=7;l=p;M=801}else{gw(l|0,0,j|0)|0;j=c[X>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[ub>>2]=c[gb>>2];c[ub+4>>2]=l;l=Bb(51773,ub)|0;if(!l){m=K;j=7;l=p;M=801;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[X>>2]=l;if(!j)j=l;else{m=K;l=p;M=801;break}}C=j;do if(!(Vc(C,1)|0)){l=c[C+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){I=l;c[I>>2]=O;c[I+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);y=(j|0)==0;w=C+120|0;z=C+40|0;x=C+144|0;j=(J|0)>0&(Gc(C)|0)==100;d:do if(y){if(!j){j=0;M=206;break}r=0;while(1){l=Oc(C,1)|0;m=L()|0;o=Oc(C,2)|0;h=L()|0;g=Oc(C,3)|0;q=L()|0;s=mc(29576)|0;t=Lc(C,4)|0;u=(c[jb>>2]|0)+(r<<2)|0;if((l|0)==0&(m|0)==0){if(!((o|0)==0&(h|0)==0)){j=267;break}j=t+20|0}else j=0;v=nb(j+96|0)|0;if(!v){j=7;break}A=v;B=A+96|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[v>>2]=r;a[v+4>>0]=0;M=v+8|0;c[M>>2]=l;c[M+4>>2]=m;M=v+16|0;c[M>>2]=o;c[M+4>>2]=h;M=v+24|0;c[M>>2]=g;c[M+4>>2]=q;if(!j){H=Sv(l|0,m|0,-1,-1)|0;I=L()|0;M=v+32|0;c[M>>2]=H;c[M+4>>2]=I}else{j=v+96|0;c[v+40>>2]=j;a[v+5>>0]=1;c[v+44>>2]=t;if(t|0)ew(j|0,s|0,t|0)|0;A=j+t|0;B=A+20|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}c[u>>2]=v;c[U>>2]=(c[U>>2]|0)+1;r=r+1|0;if(!((r|0)<(J|0)&(Gc(C)|0)==100)){j=0;l=1;M=199;break d}}c[U>>2]=(c[U>>2]|0)+1;l=0;M=199}else{if(!j){j=0;l=1;M=200;break}v=0;while(1){g=Oc(C,1)|0;q=L()|0;r=Oc(C,2)|0;s=L()|0;t=Oc(C,3)|0;u=L()|0;j=c[w>>2]|0;do if(!j)M=184;else{if((e[x>>1]|0)<=4){M=184;break}j=j+160|0}while(0);if((M|0)==184){M=0;j=c[C>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576}h=mc(j)|0;j=c[C>>2]|0;l=c[z>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[z>>2]=j;l=Lc(C,4)|0;m=(c[jb>>2]|0)+(v<<2)|0;if((g|0)==0&(q|0)==0){if(!((r|0)==0&(s|0)==0)){j=267;break}j=l+20|0}else j=0;o=nb(j+96|0)|0;if(!o){j=7;break}A=o;B=A+96|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[o>>2]=v;a[o+4>>0]=0;I=o+8|0;c[I>>2]=g;c[I+4>>2]=q;I=o+16|0;c[I>>2]=r;c[I+4>>2]=s;I=o+24|0;c[I>>2]=t;c[I+4>>2]=u;if(!j){F=Sv(g|0,q|0,-1,-1)|0;H=L()|0;I=o+32|0;c[I>>2]=F;c[I+4>>2]=H}else{j=o+96|0;c[o+40>>2]=j;a[o+5>>0]=1;c[o+44>>2]=l;if(l|0)ew(j|0,h|0,l|0)|0;A=j+l|0;B=A+20|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}c[m>>2]=o;c[U>>2]=(c[U>>2]|0)+1;v=v+1|0;if(!((v|0)<(J|0)&(Gc(C)|0)==100)){j=0;l=1;M=199;break d}}c[U>>2]=(c[U>>2]|0)+1;l=0;M=199}while(0);do if((M|0)==199){M=0;if(!y){M=200;break}if(l){j=0;M=206}}while(0);do if((M|0)==200){M=0;m=c[C>>2]|0;I=C+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(m,C);o=kc(C)|0;c[C+20>>2]=770837923;c[C+36>>2]=-1;c[z>>2]=0;a[C+146>>0]=2;c[C+44>>2]=0;c[C+32>>2]=1;a[C+147>>0]=-1;c[C+48>>2]=0;I=C+64|0;c[I>>2]=0;c[I+4>>2]=0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);if(l){j=7;M=206;break}else break}else if(l){j=c[m+68>>2]&o;M=206;break}else break}while(0);if((M|0)==206)M=0;if(j|0){m=K;l=p;M=801;break}m=c[U>>2]|0;if((m|0)!=(J|0)){q=K;j=0;break}c[Y>>2]=ib;j=eq(f,jb,c[ib>>2]|0,c[Z>>2]|0)|0;if(j|0){m=K;l=p;M=801;break}j=gq(f,jb)|0;if((j|0)!=100){m=K;l=p;M=801;break}e:do if((E|0)!=0&(D|0)>0){x=c[_>>2]|0;y=c[$>>2]|0;z=D+-1|0;j=c[aa>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[vb>>2]=c[gb>>2];c[vb+4>>2]=l;l=Bb(52942,vb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[aa>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}D=j;l=Sv(O|0,N|0,1,0)|0;m=L()|0;do if(!(Vc(D,1)|0)){o=c[D+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);l=((z|0)<0)<<31>>31;do if(!(Vc(D,2)|0)){o=c[D+100>>2]|0;m=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){I=m;c[I>>2]=z;c[I+4>>2]=l;b[o>>1]=4;break}else{Pg(m,z,l);break}}while(0);do if((Gc(D)|0)!=100){if(!j){M=421;break e}j=c[D>>2]|0;M=D+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,D);l=kc(D)|0;c[D+20>>2]=770837923;c[D+36>>2]=-1;c[D+40>>2]=0;a[D+146>>0]=2;c[D+44>>2]=0;c[D+32>>2]=1;a[D+147>>0]=-1;c[D+48>>2]=0;M=D+64|0;c[M>>2]=0;c[M+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);m=K;g=J;j=7;l=p;M=750;break e}else{j=c[j+68>>2]&l;break}}else{v=Oc(D,1)|0;w=L()|0;t=Oc(D,2)|0;u=L()|0;C=(j|0)==0;f:do if(C)j=29576;else{j=c[D+120>>2]|0;do if(j|0){if((e[D+144>>1]|0)<=3)break;j=j+120|0;break f}while(0);j=c[D>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576}while(0);l=b[j+8>>1]|0;do if((l&514)==514){if((a[j+10>>0]|0)!=1){M=237;break}s=c[j+16>>2]|0}else M=237;while(0);do if((M|0)==237){M=0;if(l&1){s=0;break}s=Gg(j,1)|0}while(0);if(!C){j=c[D>>2]|0;m=D+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j}if(!s){h=ba;j=c[h+4>>2]|0;h=c[h>>2]|0;o=0;r=0}else{l=a[s>>0]|0;if((l+-48&255)<10){j=0;o=0;m=0;do{m=Yv(o|0,m|0,10,0)|0;o=(l&255)+-48|0;o=Sv(m|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;m=L()|0;j=j+1|0;l=a[s+j>>0]|0}while((l+-48&255)<10)}else{j=0;o=0;m=0}g:while(1){l=a[s+j>>0]|0;switch(l<<24>>24){case 45:{M=251;break g}case 32:break;default:{q=1;r=0;break g}}j=j+1|0}if((M|0)==251){M=0;l=j+1|0;j=l;l=a[s+l>>0]|0;q=-1;r=-1}if((l+-48&255)<10){h=0;g=0;do{g=Yv(h|0,g|0,10,0)|0;h=(l&255)+-48|0;h=Sv(g|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;g=L()|0;j=j+1|0;l=a[s+j>>0]|0}while((l+-48&255)<10);l=h;j=g}else{l=0;j=0}h=Yv(l|0,j|0,q|0,r|0)|0;j=L()|0;r=ba;c[r>>2]=h;c[r+4>>2]=j;r=m}l=Tv(0,0,h|0,j|0)|0;m=L()|0;if((j|0)<0){j=ba;c[j>>2]=l;c[j+4>>2]=m;j=m}else l=h;a[na>>0]=(l|0)==0&(j|0)==0&1;s=Lc(D,4)|0;if(C)q=mc(29576)|0;else{j=c[D+120>>2]|0;do if(!j)M=263;else{if((e[D+144>>1]|0)<=4){M=263;break}j=j+160|0;l=D}while(0);if((M|0)==263){M=0;j=c[D>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;l=D}h=mc(j)|0;j=c[l>>2]|0;m=D+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j;q=h}j=c[La>>2]|0;c[Kb>>2]=j;do if(!j){j=c[hb>>2]|0;c[xb>>2]=c[gb>>2];c[xb+4>>2]=j;j=Bb(53128,xb)|0;if(!j){m=7;break}m=qd(c[R>>2]|0,j,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{I=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[Kb>>2]|0;c[La>>2]=j;if(!m){m=j;M=277}}else{m=j;M=277}while(0);h:do if((M|0)==277){M=0;g=m;do if(!(Vc(g,1)|0)){j=c[g+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){I=j;c[I>>2]=o;c[I+4>>2]=r;b[l>>1]=4;break}else{Pg(j,o,r);break}}while(0);h=(Gc(g)|0)==100;j=h&1;do if(m){l=c[g>>2]|0;I=g+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(l,g);m=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;I=g+64|0;c[I>>2]=0;c[I+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);m=7;break h}else{m=c[l+68>>2]&m;break}}else m=0;while(0);if(h&(m|0)==0){c[Kb>>2]=0;c[lb>>2]=0;m=dq(f,t,u,Kb,lb)|0;if(!m){m=c[Kb>>2]|0;j=c[lb>>2]|0;A=Ta;B=A+40|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[ob>>2]=m;c[Ua>>2]=j;do if(!(a[m>>0]|0))j=1;else{g=m+1|0;j=a[g>>0]|0;l=j&255;if(!(l&128)){I=Xa;c[I>>2]=j&255;c[I+4>>2]=0;j=2;break}I=d[m+2>>0]|0;j=I<<7|l&127;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=3;break}I=d[m+3>>0]|0;j=I<<14|j&16383;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=4;break}I=d[m+4>>0]|0;j=I<<21|j&2097151;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=5;break}h=28;m=m+5|0;j=j&268435455;l=0;do{I=m;m=m+1|0;I=d[I>>0]|0;H=cw(I&127|0,0,h|0)|0;j=Sv(H|0,L()|0,j|0,l|0)|0;l=L()|0;h=h+7|0}while(h>>>0<64&((I&128|0)!=0|0!=0));I=Xa;c[I>>2]=j;c[I+4>>2]=l;j=1-g+m|0}while(0);c[Ta>>2]=j;m=Pr(ob)|0;if((m|0)==0&(c[ob>>2]|0)!=0)do m=Pr(ob)|0;while((m|0)==0&(c[ob>>2]|0)!=0);l=c[Ya>>2]|0;I=c[Za>>2]|0;j=Lu(x,l,(y|0)<(I|0)?y:I)|0;j=(((j|0)==0?y-I|0:j)|0)>0&1;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0)}else j=1;l=c[Kb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0)}if(!((m|0)==0&(j|0)!=0))break;h=a[q>>0]|0;g=h<<24>>24;l=Tv(o|0,r|0,v|0,w|0)|0;L()|0;l=(l+1|0)/16|0;c[Lb>>2]=l;I=sa;c[I>>2]=v;c[I+4>>2]=w;I=ta;c[I>>2]=o;c[I+4>>2]=r;I=qa;c[I>>2]=O;c[I+4>>2]=N;c[ra>>2]=z;if(h<<24>>24<15){j=g;do{I=j;j=j+1|0;E=G(j,l)|0;E=Sv(v|0,w|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Lb+56+(j<<5)|0;c[H>>2]=E;c[H+4>>2]=F}while((I|0)<14)}o=G(l,g)|0;o=Sv(v|0,w|0,o|0,((o|0)<0)<<31>>31|0)|0;m=L()|0;l=Lb+56+(g<<5)|0;c[l>>2]=o;c[l+4>>2]=m;l=c[ja>>2]|0;l=(s|0)>(l|0)?s:l;m=Lb+56+(g<<5)+28|0;o=Lb+56+(g<<5)+20|0;j=c[o>>2]|0;if((c[m>>2]|0)<(l|0)){if(mb()|0){m=7;break}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){m=7;break}c[m>>2]=l;c[o>>2]=j}ew(j|0,q|0,s|0)|0;c[Lb+56+(g<<5)+24>>2]=s;if(h<<24>>24<=-1){m=0;break}q=g;j=s;while(1){m=c[Lb+56+(q<<5)+20>>2]|0;A=_a;B=A+40|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[Kb>>2]=m;c[$a>>2]=j;if(!(a[m>>0]|0))j=1;else{h=m+1|0;j=a[h>>0]|0;l=j&255;do if(!(l&128)){I=bb;c[I>>2]=j&255;c[I+4>>2]=0;j=1}else{I=d[m+2>>0]|0;j=I<<7|l&127;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=2;break}I=d[m+3>>0]|0;j=I<<14|j&16383;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=3;break}I=d[m+4>>0]|0;j=I<<21|j&2097151;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=4;break}o=28;m=m+5|0;j=j&268435455;l=0;do{I=m;m=m+1|0;I=d[I>>0]|0;H=cw(I&127|0,0,o|0)|0;j=Sv(H|0,L()|0,j|0,l|0)|0;l=L()|0;o=o+7|0}while(o>>>0<64&((I&128|0)!=0|0!=0));I=bb;c[I>>2]=j;c[I+4>>2]=l;j=m-h|0}while(0);j=j+1|0}c[_a>>2]=j;j=Pr(Kb)|0;l=(j|0)==0;if(l&(c[Kb>>2]|0)!=0)do{j=Pr(Kb)|0;l=(j|0)==0}while(l&(c[Kb>>2]|0)!=0);o=c[cb>>2]|0;do if(l){l=Lb+56+(q<<5)+16|0;m=Lb+56+(q<<5)+8|0;if((c[l>>2]|0)<(o|0)){j=c[m>>2]|0;if(mb()|0){j=7;M=364;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;M=364;break}c[l>>2]=o;c[m>>2]=j}else j=c[m>>2]|0;l=c[P>>2]|0;ew(j|0,l|0,o|0)|0;c[Lb+56+(q<<5)+12>>2]=o;if((q|0)<=0){j=0;break}c[lb>>2]=0;c[ob>>2]=0;h=q+-1|0;j=bb;g=c[j>>2]|0;j=c[j+4>>2]|0;o=Lb+56+(h<<5)|0;c[o>>2]=g;c[o+4>>2]=j;j=dq(f,g,j,lb,ob)|0;g=c[ob>>2]|0;o=c[ja>>2]|0;o=(g|0)>(o|0)?g:o;do if(!j){l=Lb+56+(h<<5)+28|0;m=Lb+56+(h<<5)+20|0;j=c[m>>2]|0;if((c[l>>2]|0)<(o|0)){if(mb()|0){j=7;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;break}c[l>>2]=o;c[m>>2]=j}ew(j|0,c[lb>>2]|0,g|0)|0;c[Lb+56+(h<<5)+24>>2]=g;j=0}while(0);l=c[lb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);M=364}else M=364;while(0);if((M|0)==364){M=0;l=c[P>>2]|0}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=q+-1|0;if(!((q|0)>0&(j|0)==0)){m=j;break h}q=l;j=c[Lb+56+(l<<5)+24>>2]|0}}while(0);do if(!C){j=c[D>>2]|0;M=D+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,D);l=kc(D)|0;c[D+20>>2]=770837923;c[D+36>>2]=-1;c[D+40>>2]=0;a[D+146>>0]=2;c[D+44>>2]=0;c[D+32>>2]=1;a[D+147>>0]=-1;c[D+48>>2]=0;M=D+64|0;c[M>>2]=0;c[M+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);j=(m|0)==0?j:m}while(0);if(!j)M=421;else{m=K;g=J;l=p;M=750}}else{j=c[ca>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[yb>>2]=c[gb>>2];c[yb+4>>2]=l;l=Bb(52726,yb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[ca>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){M=l;c[M>>2]=O;c[M+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);l=c[U>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(g,2)|0)){h=c[g+100>>2]|0;o=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){M=o;c[M>>2]=l;c[M+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);if((Gc(g)|0)==100)o=Nc(g,0)|0;else o=0;do if(j|0){j=c[g>>2]|0;M=g+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;M=g+64|0;c[M>>2]=0;c[M+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j)break;else{m=K;g=J;l=p;M=750;break e}}else{og(j);m=K;g=J;j=7;l=p;M=750;break e}}while(0);j=c[ua>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[zb>>2]=c[gb>>2];c[zb+4>>2]=l;l=Bb(51657,zb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[ua>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}m=j;if((Gc(m)|0)==100){F=o<<4;F=Sv(F|0,((F|0)<0)<<31>>31|0,-1,-1)|0;M=L()|0;I=Oc(m,0)|0;H=L()|0;E=sa;c[E>>2]=I;c[E+4>>2]=H;H=Sv(F|0,M|0,I|0,H|0)|0;I=L()|0;M=ta;c[M>>2]=H;c[M+4>>2]=I}do if(j|0){j=c[m>>2]|0;M=m+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,m);l=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;M=m+64|0;c[M>>2]=0;c[M+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j)break;else{m=K;g=J;l=p;M=750;break e}}else{og(j);m=K;g=J;j=7;l=p;M=750;break e}}while(0);j=ta;j=Hr(f,c[j>>2]|0,c[j+4>>2]|0,0,0)|0;if(j|0){m=K;g=J;l=p;M=750;break}I=qa;c[I>>2]=O;c[I+4>>2]=N;c[Lb>>2]=o;c[ra>>2]=D;I=sa;M=c[I>>2]|0;I=c[I+4>>2]|0;H=ka;c[H>>2]=M;c[H+4>>2]=I;H=Sv(M|0,I|0,o|0,((o|0)<0)<<31>>31|0)|0;F=L()|0;E=wa;c[E>>2]=H;c[E+4>>2]=F;E=o<<1;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=xa;c[H>>2]=E;c[H+4>>2]=F;H=o*3|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=ya;c[E>>2]=H;c[E+4>>2]=F;E=o<<2;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=za;c[H>>2]=E;c[H+4>>2]=F;H=o*5|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Aa;c[E>>2]=H;c[E+4>>2]=F;E=o*6|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ba;c[H>>2]=E;c[H+4>>2]=F;H=o*7|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ca;c[E>>2]=H;c[E+4>>2]=F;E=o<<3;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Da;c[H>>2]=E;c[H+4>>2]=F;H=o*9|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ea;c[E>>2]=H;c[E+4>>2]=F;E=o*10|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Fa;c[H>>2]=E;c[H+4>>2]=F;H=o*11|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ga;c[E>>2]=H;c[E+4>>2]=F;E=o*12|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ha;c[H>>2]=E;c[H+4>>2]=F;H=o*13|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ia;c[E>>2]=H;c[E+4>>2]=F;E=o*14|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ja;c[H>>2]=E;c[H+4>>2]=F;H=o*15|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;I=L()|0;M=Ka;c[M>>2]=H;c[M+4>>2]=I;M=421}while(0);i:do if((M|0)==421){M=0;if(!(c[Lb>>2]|0)){m=K;g=J;j=0;l=p;M=750;break}j:while(1){E=c[_>>2]|0;F=c[$>>2]|0;H=c[da>>2]|0;I=c[ea>>2]|0;l=c[fa>>2]|0;m=c[ga>>2]|0;k:do if((m|0)>0){j=0;while(1){if((a[l+j>>0]|0)!=(a[E+j>>0]|0)){A=j;break k}j=j+1|0;if((j|0)>=(m|0)){A=j;break}}}else A=0;while(0);g=0;j=A;l=((A|0)<0)<<31>>31;do{g=g+1|0;j=bw(j|0,l|0,7)|0;l=L()|0}while(!((j|0)==0&(l|0)==0));h=F-A|0;o=0;j=h;l=((h|0)<0)<<31>>31;do{o=o+1|0;j=bw(j|0,l|0,7)|0;l=L()|0}while(!((j|0)==0&(l|0)==0));D=((I|0)<0)<<31>>31;j=0;l=I;m=D;do{j=j+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));l=h+I+g+o+j|0;j=c[ia>>2]|0;do if((j|0)>0){if((j+l|0)<=(c[ja>>2]|0)){M=480;break}C=ka;j=Hr(f,c[C>>2]|0,c[C+4>>2]|0,c[ha>>2]|0,j)|0;c[la>>2]=(c[la>>2]|0)+1;l:do if(!j){C=A+1|0;m=ka;v=1;l=c[m>>2]|0;m=c[m+4>>2]|0;while(1){z=Lb+56+(v<<5)+8|0;o=c[z>>2]|0;B=Lb+56+(v<<5)+12|0;q=c[B>>2]|0;m:do if((q|0)>0){j=0;while(1){if((a[o+j>>0]|0)!=(a[E+j>>0]|0)){x=j;break m}j=j+1|0;if((j|0)>=(q|0)){x=j;break}}}else x=0;while(0);t=((x|0)<0)<<31>>31;g=0;j=x;o=t;do{g=g+1|0;j=bw(j|0,o|0,7)|0;o=L()|0}while(!((j|0)==0&(o|0)==0));w=C-x|0;u=((w|0)<0)<<31>>31;j=0;o=w;h=u;do{j=j+1|0;o=bw(o|0,h|0,7)|0;h=L()|0}while(!((o|0)==0&(h|0)==0));s=g+w+j|0;y=Lb+56+(v<<5)+24|0;j=c[y>>2]|0;if(!q)break;if((j+s|0)<=(c[ja>>2]|0))break;r=Lb+56+(v<<5)|0;o=r;q=Lb+56+(v<<5)+20|0;j=Hr(f,c[o>>2]|0,c[o+4>>2]|0,c[q>>2]|0,j)|0;a[c[q>>2]>>0]=v;q=(c[q>>2]|0)+1|0;o=Sv(l|0,m|0,1,0)|0;l=q;g=L()|0;while(1){m=o&255;h=l+1|0;a[l>>0]=m|-128;o=bw(o|0,g|0,7)|0;g=L()|0;if((o|0)==0&(g|0)==0)break;else l=h}a[l>>0]=m&127;c[y>>2]=1-q+h;m=r;l=c[m>>2]|0;m=c[m+4>>2]|0;x=Sv(l|0,m|0,1,0)|0;y=L()|0;z=r;c[z>>2]=x;c[z+4>>2]=y;c[B>>2]=0;if((j|0)!=0|(l|0)==0&(m|0)==0)break l;j=v+1|0;if(j>>>0<16)v=j;else{j=0;break l}}q=Lb+56+(v<<5)+20|0;if(!j){o=c[ja>>2]|0;r=Lb+56+(v<<5)+28|0;j=c[q>>2]|0;if((c[r>>2]|0)<(o|0)){if(mb()|0){j=7;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;break}c[r>>2]=o;c[q>>2]=j}a[j>>0]=v;g=(c[q>>2]|0)+1|0;h=g;while(1){j=l&255;o=h+1|0;a[h>>0]=j|-128;l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else h=o}a[h>>0]=j&127;j=1-g+o|0;c[y>>2]=j;m=r}else m=Lb+56+(v<<5)+28|0;l=j+s|0;if((c[m>>2]|0)<(l|0)){j=c[q>>2]|0;if(mb()|0){j=7;break}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){j=7;break}c[m>>2]=l;c[q>>2]=j}l=Lb+56+(v<<5)+16|0;if((c[l>>2]|0)<=(A|0)){j=c[z>>2]|0;if(mb()|0){j=7;break}j=sb(j,(C|0)>0?C:0,0)|0;if(!j){j=7;break}c[l>>2]=C;c[z>>2]=j}if(!(c[B>>2]|0))j=c[y>>2]|0;else{h=(c[q>>2]|0)+(c[y>>2]|0)|0;o=h;g=x;m=t;while(1){j=g&255;l=o+1|0;a[o>>0]=j|-128;g=bw(g|0,m|0,7)|0;m=L()|0;if((g|0)==0&(m|0)==0)break;else o=l}a[o>>0]=j&127;j=(c[y>>2]|0)+(l-h)|0;c[y>>2]=j}h=(c[q>>2]|0)+j|0;o=h;g=w;m=u;while(1){j=g&255;l=o+1|0;a[o>>0]=j|-128;g=bw(g|0,m|0,7)|0;m=L()|0;if((g|0)==0&(m|0)==0)break;else o=l}a[o>>0]=j&127;j=(c[y>>2]|0)+(l-h)|0;c[y>>2]=j;ew((c[q>>2]|0)+j|0,E+x|0,w|0)|0;c[y>>2]=(c[y>>2]|0)+w;ew(c[z>>2]|0,E|0,C|0)|0;c[B>>2]=C;j=0}while(0);m=ka;m=Sv(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;l=L()|0;h=ka;c[h>>2]=m;c[h+4>>2]=l;c[ga>>2]=0;c[ia>>2]=0;h=0;l=F;m=((F|0)<0)<<31>>31;do{h=h+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));o=0;m=I;l=D;do{o=o+1|0;m=bw(m|0,l|0,7)|0;l=L()|0}while(!((m|0)==0&(l|0)==0));l=F+1+I+h|0;B=l+o|0;C=ba;B=Sv(c[C>>2]|0,c[C+4>>2]|0,B|0,((B|0)<0)<<31>>31|0)|0;C=L()|0;D=ba;c[D>>2]=B;c[D+4>>2]=C;if(!j){l=l+o|0;j=0;M=482}}else M=480;while(0);if((M|0)==480){B=ba;B=Sv(c[B>>2]|0,c[B+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;C=L()|0;D=ba;c[D>>2]=B;c[D+4>>2]=C;l=l+j|0;M=482}do if((M|0)==482){M=0;if((c[ma>>2]|0)<(l|0)){j=c[ha>>2]|0;if(mb()|0){m=K;g=J;j=7;l=p;M=750;break i}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){m=K;g=J;j=7;l=p;M=750;break i}c[ma>>2]=l;c[ha>>2]=j;j=c[ia>>2]|0}if(!j){c[ia>>2]=1;a[c[ha>>2]>>0]=0}j=Qr(ha,fa,E,F,H,I)|0;if(j|0)break;j=gq(f,jb)|0}while(0);l=c[la>>2]|0;if((j|0)==100&(l|0)>=(K|0))break;switch(j|0){case 100:break;case 0:break j;default:{m=K;g=J;l=p;M=750;break i}}}F=K+-1-l|0;j=c[U>>2]|0;n:do if((j|0)>0){w=0;y=j;l=j;o:while(1){x=y+-1|0;if((l|0)>0){m=c[jb>>2]|0;j=0;do{o=c[m+(j<<2)>>2]|0;j=j+1|0}while((j|0)<(l|0)?(c[o>>2]|0)!=(x|0):0)}else o=0;do if(!(c[o+40>>2]|0)){h=o+8|0;m=h;j=c[m>>2]|0;m=c[m+4>>2]|0;do if(!((j|0)==0&(m|0)==0)){l=c[Na>>2]|0;c[Kb>>2]=l;if(!l){l=c[hb>>2]|0;c[Ab>>2]=c[gb>>2];c[Ab+4>>2]=l;l=Bb(52181,Ab)|0;if(!l){M=502;break o}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Na>>2]=l;if(j|0){g=w;break n}m=h;j=c[m>>2]|0;m=c[m+4>>2]|0}q=l;do if(!(Vc(q,1)|0)){h=c[q+100>>2]|0;g=h+8|0;if(!(b[g>>1]&9216)){K=h;c[K>>2]=j;c[K+4>>2]=m;b[g>>1]=4;break}else{Pg(h,j,m);break}}while(0);h=o+24|0;m=c[h>>2]|0;h=c[h+4>>2]|0;if(Vc(q,2)|0){Gc(q)|0;if(!l)break}else{l=c[q+100>>2]|0;j=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){K=j;c[K>>2]=m;c[K+4>>2]=h;b[l>>1]=4}else Pg(j,m,h);Gc(q)|0}j=c[q>>2]|0;K=q+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,q);l=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){M=521;break o}j=c[j+68>>2]&l;if(j|0){g=w;break n}}while(0);h=c[o>>2]|0;j=c[Ma>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[Cb>>2]=c[gb>>2];c[Cb+4>>2]=l;l=Bb(52829,Cb)|0;if(!l){M=526;break o}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Ma>>2]=l;if(!j)j=l;else{g=w;break n}}o=j;do if(!(Vc(o,1)|0)){l=c[o+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);m=((h|0)<0)<<31>>31;if(Vc(o,2)|0){Gc(o)|0;if(!j){m=w;j=0;break}}else{l=c[o+100>>2]|0;j=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){K=j;c[K>>2]=h;c[K+4>>2]=m;b[l>>1]=4}else Pg(j,h,m);Gc(o)|0}j=c[o>>2]|0;K=o+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,o);l=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;K=o+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){M=544;break o}m=w;j=c[j+68>>2]&l}else{q=c[o+64>>2]|0;t=c[o+60>>2]|0;v=c[o>>2]|0;c[lb>>2]=0;c[lb+4>>2]=0;c[lb+8>>2]=0;c[ob>>2]=0;c[ob+4>>2]=0;c[ob+8>>2]=0;j=qb;c[j>>2]=0;c[j+4>>2]=0;j=c[aa>>2]|0;c[Kb>>2]=j;do if(!j){l=c[hb>>2]|0;c[Db>>2]=c[gb>>2];c[Db+4>>2]=l;l=Bb(52942,Db)|0;if(!l){j=7;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[aa>>2]=l;if(!j){j=l;M=554}}else M=554;while(0);p:do if((M|0)==554){M=0;g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);u=((v|0)<0)<<31>>31;do if(!(Vc(g,2)|0)){m=c[g+100>>2]|0;l=m+40|0;m=m+48|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=v;c[K+4>>2]=u;b[m>>1]=4;break}else{Pg(l,v,u);break}}while(0);if((Gc(g)|0)==100){if(!j)l=mc(29576)|0;else{l=c[g+120>>2]|0;do if(!l)M=567;else{if((e[g+144>>1]|0)<=4){M=567;break}l=l+160|0;m=g}while(0);if((M|0)==567){M=0;l=c[g>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;m=g}l=mc(l)|0;m=c[m>>2]|0;h=g+40|0;o=c[h>>2]|0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);m=7}else m=c[m+68>>2]&o;c[h>>2]=m}m=Lc(g,4)|0;r=Oc(g,1)|0;s=L()|0;m=Rr(l,m,lb,q,t,qb)|0}else{m=0;r=0;s=0}do if(j){j=c[g>>2]|0;K=g+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;K=g+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);j=(m|0)==0?j:m;m=qb;l=c[m>>2]|0;m=c[m+4>>2]|0;do if((j|0)==0&((l|0)!=0|(m|0)!=0)){while(1){c[Kb>>2]=0;c[rb>>2]=0;j=dq(f,l,m,Kb,rb)|0;do if(!j){j=Rr(c[Kb>>2]|0,c[rb>>2]|0,ob,q,t,qb)|0;if(j|0)break;j=Hr(f,l,m,c[ob>>2]|0,c[Oa>>2]|0)|0}while(0);o=c[Kb>>2]|0;do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{K=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);o=(j|0)==0;g=qb;h=c[g>>2]|0;g=c[g+4>>2]|0;if(o&((h|0)!=0|(g|0)!=0)){l=h;m=g}else break}if(!o)break p;j=c[Na>>2]|0;c[Kb>>2]=j;if(!j){o=c[hb>>2]|0;c[Eb>>2]=c[gb>>2];c[Eb+4>>2]=o;o=Bb(52181,Eb)|0;if(!o){j=7;break p}j=qd(c[R>>2]|0,o,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{K=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}o=c[Kb>>2]|0;c[Na>>2]=o;if(!j)j=o;else break p}q=j;do if(!(Vc(q,1)|0)){o=c[q+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=r;c[K+4>>2]=s;b[h>>1]=4;break}else{Pg(o,r,s);break}}while(0);h=Sv(l|0,m|0,-1,-1)|0;g=L()|0;if(Vc(q,2)|0){Gc(q)|0;if(!j){h=l;break}}else{o=c[q+100>>2]|0;j=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){K=j;c[K>>2]=h;c[K+4>>2]=g;b[o>>1]=4}else Pg(j,h,g);Gc(q)|0}j=c[q>>2]|0;K=q+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,q);o=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((o|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break p}else{j=c[j+68>>2]&o;M=614;break}}else{l=0;m=0;M=614}while(0);if((M|0)==614){M=0;if(!j)h=l;else break}j=c[Pa>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[Fb>>2]=c[gb>>2];c[Fb+4>>2]=l;l=Bb(53049,Fb)|0;if(!l){j=7;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Pa>>2]=l;if(!j)j=l;else break}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;o=l+8|0;if(!(b[o>>1]&9216)){K=l;c[K>>2]=h;c[K+4>>2]=m;b[o>>1]=4;break}else{Pg(l,h,m);break}}while(0);l=c[lb>>2]|0;m=c[Qa>>2]|0;do if(!((l|0)==0|(Vc(g,2)|0)!=0)){l=yc((c[g+100>>2]|0)+40|0,l,m,0,0)|0;if(!l)break;m=c[g>>2]|0;c[m+64>>2]=l;Ne(m,l);m=c[g>>2]|0;if(!((l|0)==3082|(a[m+81>>0]|0)!=0))break;og(m)}while(0);do if(!(Vc(g,3)|0)){m=c[g+100>>2]|0;l=m+80|0;m=m+88|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);if(Vc(g,4)|0){Gc(g)|0;if(!j)j=0;else M=641}else{l=c[g+100>>2]|0;j=l+120|0;l=l+128|0;if(!(b[l>>1]&9216)){M=j;c[M>>2]=v;c[M+4>>2]=u;b[l>>1]=4}else Pg(j,v,u);Gc(g)|0;M=641}do if((M|0)==641){M=0;j=c[g>>2]|0;K=g+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;K=g+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}while(0);Vc(g,2)|0}while(0);l=c[lb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[ob>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=w+1|0}while(0);l=(j|0)==0;if(!((y|0)>1&l)){M=658;break}w=m;y=x;l=c[U>>2]|0}if((M|0)==502){M=0;g=w;j=7;break}else if((M|0)==521){M=0;og(j);g=w;j=7;break}else if((M|0)==526){M=0;g=w;j=7;break}else if((M|0)==544){M=0;og(j);g=w;j=7;break}else if((M|0)==658){M=0;if(!l){g=m;break}E=m;j=c[U>>2]|0;M=660;break}}else{E=0;M=660}while(0);do if((M|0)==660){M=0;if((E|0)==(j|0)){g=j;j=0;break}j=c[Sa>>2]|0;c[Kb>>2]=j;do if(!j){l=c[hb>>2]|0;c[Gb>>2]=c[gb>>2];c[Gb+4>>2]=l;l=Bb(53193,Gb)|0;if(!l){j=7;l=0;M=698;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Sa>>2]=l;if(!j){j=l;M=669}else{l=0;M=698}}else M=669;while(0);q:do if((M|0)==669){M=0;r=j;do if(!(Vc(r,1)|0)){l=c[r+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);r:do if((Gc(r)|0)==100){g=0;o=0;q=0;h=0;l=0;while(1){if((q|0)>=(o|0)){o=o+16|0;m=o<<2;if(mb()|0){o=7;break r}m=sb(h,(m|0)>0?m:0,0)|0;if(!m){o=7;break r}else{g=m;l=m;h=m}}K=Nc(r,0)|0;m=q+1|0;c[g+(q<<2)>>2]=K;if((Gc(r)|0)==100)q=m;else{q=m;o=0;break}}}else{q=0;o=0;g=0;l=0}while(0);do if(j){j=c[r>>2]|0;K=r+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,r);m=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;K=r+64|0;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&m;break}}else j=0;while(0);j=(o|0)==0?j:o;if(j|0){M=698;break}j=c[db>>2]|0;c[Kb>>2]=j;if(!j){m=c[hb>>2]|0;c[Hb>>2]=c[gb>>2];c[Hb+4>>2]=m;m=Bb(52884,Hb)|0;if(!m){j=7;M=698;break}j=qd(c[R>>2]|0,m,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{K=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}m=c[Kb>>2]|0;c[db>>2]=m;if(!j)j=m;else{M=698;break}}D=j;do if(!(Vc(D,2)|0)){o=c[D+100>>2]|0;m=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){K=m;c[K>>2]=O;c[K+4>>2]=N;b[o>>1]=4;break}else{Pg(m,O,N);break}}while(0);a[Va>>0]=1;if(!q){j=0;break}s=D+100|0;t=D+136|0;u=D+20|0;v=D+36|0;w=D+40|0;x=D+146|0;y=D+44|0;z=D+32|0;A=D+147|0;B=D+48|0;C=D+64|0;if(!j){r=0;s:while(1){j=c[g+(r<<2)>>2]|0;do if((j|0)==(r|0))j=0;else{m=((j|0)<0)<<31>>31;do if(!(Vc(D,3)|0)){h=c[s>>2]|0;o=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=j;c[K+4>>2]=m;b[h>>1]=4;break}else{Pg(o,j,m);break}}while(0);if(Vc(D,1)|0){Gc(D)|0;j=0;break}j=c[s>>2]|0;m=j+8|0;if(!(b[m>>1]&9216)){K=j;c[K>>2]=r;c[K+4>>2]=0;b[m>>1]=4}else Pg(j,r,0);Gc(D)|0;j=c[D>>2]|0;K=t;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,D);m=kc(D)|0;c[u>>2]=770837923;c[v>>2]=-1;c[w>>2]=0;a[x>>0]=2;c[y>>2]=0;c[z>>2]=1;a[A>>0]=-1;c[B>>2]=0;K=C;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0)break s;j=c[j+68>>2]&m}while(0);r=r+1|0;if(!(r>>>0<q>>>0&(j|0)==0))break q}og(j);j=7;break}r=0;while(1){j=c[g+(r<<2)>>2]|0;if((j|0)==(r|0))j=0;else{m=((j|0)<0)<<31>>31;do if(!(Vc(D,3)|0)){h=c[s>>2]|0;o=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=j;c[K+4>>2]=m;b[h>>1]=4;break}else{Pg(o,j,m);break}}while(0);if(!(Vc(D,1)|0)){j=c[s>>2]|0;m=j+8|0;if(!(b[m>>1]&9216)){K=j;c[K>>2]=r;c[K+4>>2]=0;b[m>>1]=4}else Pg(j,r,0);Gc(D)|0}else Gc(D)|0;j=c[D>>2]|0;K=t;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,D);m=kc(D)|0;c[u>>2]=770837923;c[v>>2]=-1;c[w>>2]=0;a[x>>0]=2;c[y>>2]=0;c[z>>2]=1;a[A>>0]=-1;c[B>>2]=0;K=C;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0)break;j=c[j+68>>2]&m}r=r+1|0;if(!(r>>>0<q>>>0&(j|0)==0))break q}og(j);j=7}while(0);if((M|0)==698){M=0;a[Va>>0]=1}a[Va>>0]=0;if(!l){g=E;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);g=E;break}else{g=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);g=E;break}}while(0);if(!g){t=F;s=p;r=1;break}k=n+20|0;if(j|0){m=F;k=1;l=p;M=751;break}if((p|0)<(k|0)){if(mb()|0){m=F;k=1;j=7;l=p;M=751;break}j=sb(i,(k|0)>0?k:0,0)|0;if(!j){m=F;k=1;j=7;l=p;M=751;break}else{i=j;p=k}}k=i+n|0;j=k;m=O;h=N;while(1){l=m&255;o=j+1|0;a[j>>0]=l|-128;m=bw(m|0,h|0,7)|0;h=L()|0;if((m|0)==0&(h|0)==0)break;else j=o}a[j>>0]=l&127;n=o-k+n|0;o=i+n|0;j=o;l=g;m=((g|0)<0)<<31>>31;while(1){k=l&255;h=j+1|0;a[j>>0]=k|-128;l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else j=h}a[j>>0]=k&127;m=F;k=1;j=0;n=n-o+h|0;l=p;M=750}while(0);if((M|0)==750){M=0;if(!g){t=m;s=l;r=1}else M=751}if((M|0)==751){M=0;r=ba;r=Tv(0,0,c[r>>2]|0,c[r+4>>2]|0)|0;s=L()|0;t=ba;c[t>>2]=r;c[t+4>>2]=s;t=m;s=l;r=0}m=15;while(1){if((c[Lb+56+(m<<5)+24>>2]|0)>0){M=763;break}l=c[Lb+56+(m<<5)+20>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(m<<5)+8>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);if(!m)break;else m=m+-1|0}do if((M|0)==763){M=0;do if(m){if((m|0)>0)M=773}else{if(j|0){m=1;M=773;break}j=c[pa>>2]|0;if((c[oa>>2]|0)<11){if(mb()|0){j=7;m=1;M=773;break}j=sb(j,11,0)|0;if(!j){j=7;m=1;M=773;break}c[oa>>2]=11;c[pa>>2]=j}a[j>>0]=1;l=(c[pa>>2]|0)+1|0;p=ka;j=l;o=c[p>>2]|0;p=c[p+4>>2]|0;while(1){m=o&255;h=j+1|0;a[j>>0]=m|-128;o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else j=h}a[j>>0]=m&127;c[va>>2]=1-l+h;j=0;m=1;M=773}while(0);if((M|0)==773){h=0;do{l=c[Lb+56+(h<<5)+24>>2]|0;o=Lb+56+(h<<5)+20|0;if((j|0)==0&(l|0)>0){j=Lb+56+(h<<5)|0;j=Hr(f,c[j>>2]|0,c[j+4>>2]|0,c[o>>2]|0,l)|0}l=c[o>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(h<<5)+8>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);h=h+1|0}while((h|0)!=(m|0))}if(!j){j=qa;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;l=L()|0;o=sa;h=ka;p=ta;if(!(a[na>>0]|0)){q=ba;g=c[q>>2]|0;q=c[q+4>>2]|0}else{g=0;q=0}M=Lb+56+(m<<5)+20|0;j=Jr(f,j,l,c[ra>>2]|0,c[o>>2]|0,c[o+4>>2]|0,c[h>>2]|0,c[h+4>>2]|0,c[p>>2]|0,c[p+4>>2]|0,g,q,c[M>>2]|0,c[Lb+56+(m<<5)+24>>2]|0)|0;l=M}else l=Lb+56+(m<<5)+20|0;l=c[l>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(m<<5)+8>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!r){m=t;l=s;M=801;break}if(a[na>>0]|0){m=t;l=s;M=801;break}M=Sv(O|0,N|0,1,0)|0;l=L()|0;m=ba;Gr(f,M,l,c[m>>2]|0,c[m+4>>2]|0)|0;m=t;l=s;M=801}}else{m=K;l=p;M=801}}else{m=K;l=p;M=801}while(0);if((M|0)==801){M=0;q=m;p=l;m=c[U>>2]|0}l=c[jb>>2]|0;if((m|0)>0){g=0;do{h=c[l+(g<<2)>>2]|0;do if(h|0){do if(!(c[h+56>>2]|0)){l=c[h+64>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);do if(!(a[h+5>>0]|0)){l=c[h+40>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[h+52>>2]|0;t:do if(l|0){m=c[l+20>>2]|0;gc(c[l+16>>2]|0)|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,l);break t}o=l;if((c[m+304>>2]|0)>>>0>o>>>0)break;if((c[m+308>>2]|0)>>>0<=o>>>0)break;K=m+300|0;c[l>>2]=c[K>>2];c[K>>2]=l;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);g=g+1|0;l=c[jb>>2]|0}while((g|0)<(c[U>>2]|0))}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[W>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[U>>2]=0;c[jb>>2]=0;c[W>>2]=0;if((j|0)==0&(q|0)>0){K=q;o=O;h=N}else break}if((k|0)!=0&(j|0)==0){l=f+148|0;k=c[l>>2]|0;c[Kb>>2]=k;if(!k){k=c[f+20>>2]|0;c[Jb>>2]=c[f+16>>2];c[Jb+4>>2]=k;k=Bb(52453,Jb)|0;if(!k){j=7;break}j=qd(c[f+12>>2]|0,k,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[Kb>>2]|0;c[l>>2]=k;if(j)break}m=k;do if(!(Vc(m,1)|0)){j=c[m+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){Kb=j;c[Kb>>2]=1;c[Kb+4>>2]=0;b[l>>1]=4;break}else{Pg(j,1,0);break}}while(0);if((i|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;if(!k)j=0;else M=857}else{j=yc((c[m+100>>2]|0)+40|0,i,n,0,0)|0;if(j|0?(Mb=c[m>>2]|0,c[Mb+64>>2]=j,Ne(Mb,j),Mb=c[m>>2]|0,(j|0)==3082|(a[Mb+81>>0]|0)!=0):0)og(Mb);Gc(m)|0;M=857}do if((M|0)==857){j=c[m>>2]|0;Mb=m+136|0;Kb=c[Mb+4>>2]|0;if((Kb|0)>0|(Kb|0)==0&(c[Mb>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;Mb=m+64|0;c[Mb>>2]=0;c[Mb+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}while(0);Vc(m,2)|0}}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](Lb);else{Mb=Wa[c[29352>>2]&127](Lb)|0;c[14978]=(c[14978]|0)-Mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Lb)}if(!i){Mb=j;Ra=Nb;return Mb|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Mb=j;Ra=Nb;return Mb|0}else{Mb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Mb=j;Ra=Nb;return Mb|0}return 0}function Pr(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;m=b+28|0;g=(c[m>>2]|0)!=0;n=b+16|0;e=n;f=c[e>>2]|0;e=c[e+4>>2]|0;if(g&((f|0)!=0|(e|0)!=0)){l=Sv(f|0,e|0,1,0)|0;o=L()|0;p=n;c[p>>2]=l;c[p+4>>2]=o}o=b+8|0;j=c[o>>2]|0;p=b+4|0;k=c[p>>2]|0;if((j|0)>=(k|0)){c[b>>2]=0;b=0;return b|0}h=c[b>>2]|0;if(g){g=h+j|0;f=a[g>>0]|0;e=f&255;if(e&128){l=d[g+1>>0]|0;e=l<<7|f&127;if(l&128){l=d[g+2>>0]|0;e=l<<14|e&16383;if(l&128){l=d[g+3>>0]|0;e=l<<21|e&2097151;if(!(l&128))f=4;else{e=(a[g+4>>0]&7)<<28|e&268435455;f=5}}else f=3}else f=2}else f=1;j=f+j|0;c[o>>2]=j}else e=0;i=h+j|0;f=a[i>>0]|0;g=f&255;if(g&128){l=d[i+1>>0]|0;f=l<<7|f&127;if(l&128){l=d[i+2>>0]|0;f=l<<14|f&16383;if(l&128){l=d[i+3>>0]|0;f=l<<21|f&2097151;if(!(l&128)){l=f;f=4}else{l=(a[i+4>>0]&7)<<28|f&268435455;f=5}}else{l=f;f=3}}else{l=f;f=2}}else{l=g;f=1}g=f+j|0;c[o>>2]=g;if((e|0)>(g|0)|(l|0)>(k-g|0)){b=267;return b|0}k=l+e|0;i=b+32|0;j=b+24|0;do if((c[i>>2]|0)<(k|0)){f=c[j>>2]|0;if(mb()|0){b=7;return b|0}f=sb(f,(k|0)>0?k:0,0)|0;if(!f){b=7;return b|0}else{c[i>>2]=k;c[j>>2]=f;h=c[b>>2]|0;g=c[o>>2]|0;break}}else f=c[j>>2]|0;while(0);ew(f+e|0,h+g|0,l|0)|0;c[m>>2]=k;i=(c[o>>2]|0)+l|0;c[o>>2]=i;if(!((c[n>>2]|0)==0&(c[n+4>>2]|0)==0)){b=0;return b|0}j=c[b>>2]|0;g=j+i|0;e=a[g>>0]|0;f=e&255;h=b+40|0;do if(f&128){n=d[g+1>>0]|0;f=n<<7|e&127;if(!(n&128)){c[h>>2]=f;e=2;break}n=d[g+2>>0]|0;f=n<<14|f&16383;if(!(n&128)){c[h>>2]=f;e=3;break}n=d[g+3>>0]|0;f=n<<21|f&2097151;if(!(n&128)){c[h>>2]=f;e=4;break}else{f=(a[g+4>>0]&7)<<28|f&268435455;c[h>>2]=f;e=5;break}}else{c[h>>2]=f;e=1}while(0);e=e+i|0;c[o>>2]=e;if(((c[p>>2]|0)-e|0)<(f|0)){b=267;return b|0}c[b+36>>2]=j+e;c[o>>2]=f+e;b=0;return b|0}function Qr(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=d+4|0;k=c[m>>2]|0;j=d+8|0;i=c[d>>2]|0;do if((c[j>>2]|0)<(f|0)){if(mb()|0){h=7;return h|0}i=sb(i,(f|0)>0?f:0,0)|0;if(!i){h=7;return h|0}else{c[j>>2]=f;c[d>>2]=i;l=c[m>>2]|0;break}}else l=k;while(0);j=(k|0)==0;a:do if((l|0)>0){d=0;while(1){if((a[i+d>>0]|0)!=(a[e+d>>0]|0)){n=d;break a}d=d+1|0;if((d|0)>=(l|0)){n=d;break}}}else n=0;while(0);o=f-n|0;ew(i|0,e|0,f|0)|0;c[m>>2]=f;if(j){d=b+4|0;m=d;d=c[d>>2]|0}else{m=b+4|0;i=(c[b>>2]|0)+(c[m>>2]|0)|0;d=i;k=n;f=((n|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;d=l-i+(c[m>>2]|0)|0;c[m>>2]=d}i=(c[b>>2]|0)+d|0;d=i;k=o;f=((o|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;d=(c[m>>2]|0)+(l-i)|0;c[m>>2]=d;ew((c[b>>2]|0)+d|0,e+n|0,o|0)|0;d=(c[m>>2]|0)+o|0;c[m>>2]=d;if(!g){h=0;return h|0}i=(c[b>>2]|0)+d|0;d=i;k=h;f=((h|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;e=(c[m>>2]|0)+(l-i)|0;c[m>>2]=e;ew((c[b>>2]|0)+e|0,g|0,h|0)|0;c[m>>2]=(c[m>>2]|0)+h;h=0;return h|0}function Rr(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+64|0;x=z;y=z+48|0;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;v=(a[b>>0]|0)!=0;k=f+8|0;do if((c[k>>2]|0)<(e|0)){j=c[f>>2]|0;if(mb()|0){y=7;Ra=z;return y|0}j=sb(j,(e|0)>0?e:0,0)|0;if(!j){y=7;Ra=z;return y|0}else{c[k>>2]=e;c[f>>2]=j;break}}while(0);w=f+4|0;c[w>>2]=0;o=x+8|0;j=o;k=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[x>>2]=b;c[x+4>>2]=e;do if(!(a[b>>0]|0))j=1;else{m=b+1|0;n=x+16|0;j=a[m>>0]|0;k=j&255;if(!(k&128)){t=n;c[t>>2]=j&255;c[t+4>>2]=0;j=2;break}t=d[b+2>>0]|0;j=t<<7|k&127;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=3;break}t=d[b+3>>0]|0;j=t<<14|j&16383;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=4;break}t=d[b+4>>0]|0;j=t<<21|j&2097151;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=5;break}e=28;l=b+5|0;j=j&268435455;k=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,e|0)|0;j=Sv(s|0,L()|0,j|0,k|0)|0;k=L()|0;e=e+7|0}while(e>>>0<64&((t&128|0)!=0|0!=0));t=n;c[t>>2]=j;c[t+4>>2]=k;j=1-m+l|0}while(0);c[o>>2]=j;j=Pr(x)|0;a:do if((j|0)==0&(c[x>>2]|0)!=0){o=x+24|0;q=x+28|0;r=x+36|0;s=x+40|0;t=x+16|0;while(1){if(!(c[w>>2]|0)){m=c[q>>2]|0;n=Lu(c[o>>2]|0,g,(m|0)<(h|0)?m:h)|0;n=(n|0)==0?m-h|0:n;if(!((n|0)<0|v&(n|0)==0)){k=t;j=c[k>>2]|0;k=c[k+4>>2]|0;a[c[f>>2]>>0]=a[b>>0]|0;if((j|0)==0&(k|0)==0){k=0;e=0;j=1}else{n=(c[f>>2]|0)+1|0;l=n;while(1){e=j&255;m=l+1|0;a[l>>0]=e|-128;j=bw(j|0,k|0,7)|0;k=L()|0;if((j|0)==0&(k|0)==0)break;else l=m}a[l>>0]=e&127;e=t;k=c[e>>2]|0;e=c[e+4>>2]|0;j=1-n+m|0}c[w>>2]=j;u=i;c[u>>2]=k;c[u+4>>2]=e;u=26}}else u=26;if((u|0)==26?(u=0,p=Qr(f,y,c[o>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0,p|0):0)break a;j=Pr(x)|0;if(!((j|0)==0&(c[x>>2]|0)!=0)){p=j;break}}}else p=j;while(0);if(!(c[w>>2]|0)){n=x+16|0;e=n;j=c[e>>2]|0;e=c[e+4>>2]|0;a[c[f>>2]>>0]=a[b>>0]|0;if((j|0)==0&(e|0)==0){k=0;e=0;j=1}else{o=(c[f>>2]|0)+1|0;l=o;while(1){k=j&255;m=l+1|0;a[l>>0]=k|-128;j=bw(j|0,e|0,7)|0;e=L()|0;if((j|0)==0&(e|0)==0)break;else l=m}a[l>>0]=k&127;e=n;k=c[e>>2]|0;e=c[e+4>>2]|0;j=1-o+m|0}c[w>>2]=j;c[i>>2]=k;c[i+4>>2]=e}j=c[x+24>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{x=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);j=c[y>>2]|0;if(!j){y=p;Ra=z;return y|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);y=p;Ra=z;return y|0}else{y=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);y=p;Ra=z;return y|0}return 0}function Sr(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;i=m;j=m+8|0;f=d+252|0;g=d+280|0;a:do if((c[f>>2]|0)>0){e=0;b:while(1){h=Er(d,c[g>>2]|0,e,-1)|0;e=e+1|0;switch(h|0){case 0:case 101:break;default:break b}if((e|0)>=(c[f>>2]|0))break a}Fr(d);l=h;Ra=m;return l|0}while(0);Fr(d);if(!(a[d+233>>0]|0)){l=0;Ra=m;return l|0}k=d+48|0;if((c[k>>2]|0)!=255){l=0;Ra=m;return l|0}if(!(c[d+52>>2]|0)){l=0;Ra=m;return l|0}g=d+144|0;e=c[g>>2]|0;c[j>>2]=e;if(!e){e=c[d+20>>2]|0;c[i>>2]=c[d+16>>2];c[i+4>>2]=e;e=Bb(52411,i)|0;if(!e){l=7;Ra=m;return l|0}f=qd(c[d+12>>2]|0,e,-1,133,0,j,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}e=c[j>>2]|0;c[g>>2]=e;if(f){l=f;Ra=m;return l|0}}h=e;do if(!(Vc(h,1)|0)){f=c[h+100>>2]|0;g=f+8|0;if(!(b[g>>1]&9216)){j=f;c[j>>2]=2;c[j+4>>2]=0;b[g>>1]=4;break}else{Pg(f,2,0);break}}while(0);switch(Gc(h)|0){case 100:{f=Nc(h,0)|0;f=(f|0)==1?8:f;l=22;break}case 101:{f=0;l=22;break}default:{}}if((l|0)==22)c[k>>2]=f;if(!e){l=0;Ra=m;return l|0}e=c[h>>2]|0;l=h+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(e,h);f=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;l=h+64|0;c[l>>2]=0;c[l+4>>2]=0;if((f|0)==3082|(a[e+81>>0]|0)!=0){og(e);l=7;Ra=m;return l|0}else{l=c[e+68>>2]&f;Ra=m;return l|0}return 0}function Tr(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0;Aa=Ra;Ra=Ra+176|0;m=Aa+96|0;sa=Aa+164|0;ta=Aa+152|0;ua=Aa+128|0;va=Aa+124|0;xa=Aa+120|0;ya=Aa+116|0;za=Aa+112|0;na=Aa+108|0;oa=Aa+104|0;pa=Aa+100|0;qa=Aa;if((h|0)>6){c[f+20>>2]=1;yc(c[f>>2]|0,55039,-1,1,-1)|0;Ra=Aa;return}j=c[i>>2]|0;if((((b[j+8>>1]&-15393)<<16>>16==-32255?(a[j+11>>0]|0)==112:0)?(Bu(c[j>>2]|0,54938)|0)==0:0)?(ra=c[j+16>>2]|0,ra|0):0){a:do switch(h|0){case 6:{h=c[i+20>>2]|0;j=e[h+8>>1]|0;if(j&4|0){k=c[h>>2]|0;ga=18;break a}if(j&8|0){k=Mg(+g[h>>3])|0;L()|0;ga=18;break a}if(!(j&18)){k=0;ga=18}else{k=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;ga=18}break}case 5:{k=15;ga=18;break}case 4:{l=-1;k=15;ga=24;break}case 3:{m=55028;l=-1;k=15;ga=30;break}case 2:{o=55023;n=55028;l=-1;k=15;ga=36;break}default:{ka=55019;la=55023;ma=55028;fa=-1;q=15;ga=42}}while(0);do if((ga|0)==18){h=c[i+16>>2]|0;j=e[h+8>>1]|0;if(j&4|0){l=c[h>>2]|0;ga=24;break}if(j&8|0){l=Mg(+g[h>>3])|0;L()|0;ga=24;break}if(!(j&18)){l=0;ga=24}else{l=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;ga=24}}while(0);do if((ga|0)==24){h=c[i+12>>2]|0;if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){m=c[h+16>>2]|0;ga=30;break}if(!(j&1)){m=Gg(h,1)|0;ga=30}else{m=0;ga=30}}else{m=0;ga=30}}while(0);do if((ga|0)==30){h=c[i+8>>2]|0;if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){o=c[h+16>>2]|0;n=m;ga=36;break}if(!(j&1)){o=Gg(h,1)|0;n=m;ga=36}else{o=0;n=m;ga=36}}else{o=0;n=m;ga=36}}while(0);do if((ga|0)==36?(p=c[i+4>>2]|0,p|0):0){h=b[p+8>>1]|0;if((h&514)==514?(a[p+10>>0]|0)==1:0){ka=c[p+16>>2]|0;la=o;ma=n;fa=l;q=k;ga=42;break}if(!(h&1)){ka=Gg(p,1)|0;la=o;ma=n;fa=l;q=k;ga=42}}while(0);if((ga|0)==42?(ka|0)!=0&((la|0)!=0&(ma|0)!=0):0){if(!q){if((yc(c[f>>2]|0,59952,-1,1,0)|0)!=18){Ra=Aa;return}c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;Ra=Aa;return}if(ur(f,ra)|0){Ra=Aa;return}ja=c[ra>>2]|0;ea=ra+16|0;b:do if(!(c[ea>>2]|0)){if((yc(c[f>>2]|0,59952,0,1,0)|0)==18){c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0}}else{V=(q|0)>-64?q:-64;V=(V|0)<64?V:64;W=(V|0)>-1;X=ja+24|0;Y=(fa|0)<0;Z=ta+4|0;_=ua+16|0;$=ua+4|0;aa=ua+8|0;ba=ua+12|0;ca=ua+20|0;da=0-V|0;ia=1;h=0;c:while(1){if(W)ha=(ia+-1+V|0)/(ia|0)|0;else ha=da;U=0;k=0;j=0;T=0;l=0;d:while(1){S=qa+(U*24|0)|0;c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;c[S+20>>2]=0;e:do if((c[X>>2]|0)>0){Q=qa+(U*24|0)+4|0;m=qa+(U*24|0)+8|0;R=qa+(U*24|0)+16|0;P=0;O=-1;s=j;f:while(1){g:do if(Y|(P|0)==(fa|0)){c[ua>>2]=0;c[ua+4>>2]=0;c[ua+8>>2]=0;c[ua+12>>2]=0;c[ua+16>>2]=0;c[ua+20>>2]=0;h=Z;c[h>>2]=0;c[h+4>>2]=0;c[ta>>2]=ra;h=c[ea>>2]|0;c[sa>>2]=0;h=Zr(h,sa,92,ta)|0;i=c[Z>>2]|0;do if(!h){h=i*24|0;j=pb(h,0)|0;c[_>>2]=j;if(!j){h=7;break}gw(j|0,0,h|0)|0;c[ua>>2]=ra;c[$>>2]=P;c[aa>>2]=ha;c[ba>>2]=i;c[ca>>2]=-1;h=c[ea>>2]|0;c[sa>>2]=0;h=Zr(h,sa,93,ua)|0;N=(h|0)==0;h:do if(N){if((i|0)>0){o=c[_>>2]|0;n=0;j=s;do{K=(c[o+(n*24|0)+12>>2]|0)==0;J=cw(1,0,n|0)|0;M=L()|0;k=(K?0:J)|k;j=(K?0:M)|j;n=n+1|0}while((n|0)!=(i|0))}else j=s;n=-1;I=0;o=c[ca>>2]|0;J=0;p=0;K=0;M=0;while(1){i:do if((o|0)<0){c[ca>>2]=0;o=c[ba>>2]|0;if((o|0)<=0){s=0;t=0;r=0;q=0;i=0;o=0;break}v=0;while(1){u=c[_>>2]|0;t=u+(v*24|0)+12|0;u=u+(v*24|0)+8|0;s=c[aa>>2]|0;q=c[t>>2]|0;if(q){i=c[u>>2]|0;o=q;j:do if((i|0)<(s|0)){o=q;do{r=a[o>>0]|0;if((r&255)<2){i=-1;o=0;break j}q=r&255;do if(!(q&128))r=1;else{ga=d[o+1>>0]|0;q=ga<<7|r&127;if(!(ga&128)){r=2;break}ga=d[o+2>>0]|0;q=ga<<14|q&16383;if(!(ga&128)){r=3;break}ga=d[o+3>>0]|0;q=ga<<21|q&2097151;if(!(ga&128)){r=4;break}q=(a[o+4>>0]&7)<<28|q&268435455;r=5}while(0);o=o+r|0;i=i+-2+q|0}while((i|0)<(s|0))}while(0);c[u>>2]=i;c[t>>2]=o;o=c[ba>>2]|0}v=v+1|0;if((v|0)>=(o|0)){ga=123;break}}}else{q=c[ba>>2]|0;if((q|0)<=0){t=P;r=I;s=j;q=J;i=K;o=M;break h}r=c[_>>2]|0;o=2147483647;i=0;while(1){if(!(c[r+(i*24|0)+12>>2]|0))x=o;else{x=c[r+(i*24|0)+8>>2]|0;x=(x|0)<(o|0)?x:o}i=i+1|0;if((i|0)==(q|0))break;else o=x}if((x|0)==2147483647){t=P;r=I;s=j;q=J;i=K;o=M;break h}w=x-(c[aa>>2]|0)|0;c[ca>>2]=w+1;i=0;while(1){u=r+(i*24|0)+12|0;v=r+(i*24|0)+8|0;o=c[u>>2]|0;if(o|0){q=c[v>>2]|0;k:do if((q|0)<=(x|0))do{t=a[o>>0]|0;if((t&255)<2){q=-1;o=0;break k}s=t&255;do if(!(s&128))t=1;else{ga=d[o+1>>0]|0;s=ga<<7|t&127;if(!(ga&128)){t=2;break}ga=d[o+2>>0]|0;s=ga<<14|s&16383;if(!(ga&128)){t=3;break}ga=d[o+3>>0]|0;s=ga<<21|s&2097151;if(!(ga&128)){t=4;break}s=(a[o+4>>0]&7)<<28|s&268435455;t=5}while(0);o=o+t|0;q=q+-2+s|0}while((q|0)<=(x|0));while(0);c[v>>2]=q;c[u>>2]=o}u=r+(i*24|0)+20|0;t=r+(i*24|0)+16|0;o=c[u>>2]|0;if(o|0){q=c[t>>2]|0;l:do if((q|0)<=(w|0))do{s=a[o>>0]|0;if((s&255)<2){q=-1;o=0;break l}r=s&255;do if(!(r&128))s=1;else{ga=d[o+1>>0]|0;r=ga<<7|s&127;if(!(ga&128)){s=2;break}ga=d[o+2>>0]|0;r=ga<<14|r&16383;if(!(ga&128)){s=3;break}ga=d[o+3>>0]|0;r=ga<<21|r&2097151;if(!(ga&128)){s=4;break}r=(a[o+4>>0]&7)<<28|r&268435455;s=5}while(0);o=o+s|0;q=q+-2+r|0}while((q|0)<=(w|0));while(0);c[t>>2]=q;c[u>>2]=o}i=i+1|0;o=c[ba>>2]|0;if((i|0)>=(o|0)){ga=123;break i}r=c[_>>2]|0}}while(0);do if((ga|0)==123){ga=0;H=c[ca>>2]|0;if((o|0)<=0){s=0;t=0;r=0;q=0;i=0;o=H;break}F=c[_>>2]|0;G=(c[aa>>2]|0)+H|0;s=0;E=0;t=0;r=0;q=0;i=0;while(1){v=c[F+(E*24|0)+20>>2]|0;m:do if(v){u=c[F+(E*24|0)+16>>2]|0;if((u|0)<(H|0)|(u|0)>=(G|0))break;C=cw(1,0,E|0)|0;D=L()|0;B=c[F+(E*24|0)>>2]|0;if((B|0)<=0){x=v;while(1){s=(((t|T)&C|0)==0&((r|l)&D|0)==0?1e3:1)+s|0;t=t|C;r=r|D;w=a[x>>0]|0;if((w&255)<2)break m;v=w&255;do if(!(v&128))w=1;else{B=d[x+1>>0]|0;v=B<<7|w&127;if(!(B&128)){w=2;break}B=d[x+2>>0]|0;v=B<<14|v&16383;if(!(B&128)){w=3;break}B=d[x+3>>0]|0;v=B<<21|v&2097151;if(!(B&128)){w=4;break}v=(a[x+4>>0]&7)<<28|v&268435455;w=5}while(0);u=u+-2+v|0;if((u|0)<(H|0)|(u|0)>=(G|0))break m;else x=x+w|0}}A=v;while(1){w=cw(1,0,u-H|0)|0;x=L()|0;y=(t|T)&C;z=(r|l)&D;v=0;do{Ba=bw(w|0,x|0,v|0)|0;q=Ba|q;i=L()|0|i;v=v+1|0}while((v|0)!=(B|0));s=((y|0)==0&(z|0)==0?1e3:1)+s|0;t=t|C;r=r|D;w=a[A>>0]|0;if((w&255)<2)break m;v=w&255;do if(!(v&128))w=1;else{Ba=d[A+1>>0]|0;v=Ba<<7|w&127;if(!(Ba&128)){w=2;break}Ba=d[A+2>>0]|0;v=Ba<<14|v&16383;if(!(Ba&128)){w=3;break}Ba=d[A+3>>0]|0;v=Ba<<21|v&2097151;if(!(Ba&128)){w=4;break}v=(a[A+4>>0]&7)<<28|v&268435455;w=5}while(0);u=u+-2+v|0;if((u|0)<(H|0)|(u|0)>=(G|0))break;else A=A+w|0}}while(0);E=E+1|0;if((E|0)==(o|0)){o=H;break}}}while(0);Ba=(s|0)>(n|0);n=Ba?s:n;I=Ba?o:I;J=Ba?t:J;p=Ba?r:p;K=Ba?q:K;M=Ba?i:M}}else{n=0;t=0;r=0;q=0;p=0;i=0;o=0}while(0);j=c[_>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{Ba=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);if(!N){j=11;n=O;o=s;break g}if((n|0)<=(O|0)){j=0;n=O;h=0;o=s;break g}c[S>>2]=t;c[Q>>2]=r;j=m;c[j>>2]=q;c[j+4>>2]=p;j=R;c[j>>2]=i;c[j+4>>2]=o;j=0;h=0;o=s;break g}while(0);j=11;n=O;o=s}else{j=10;n=O;o=s}while(0);switch(j&15){case 10:case 0:break;default:break f}P=P+1|0;if((P|0)>=(c[X>>2]|0)){j=o;ga=158;break e}else{O=n;s=o}}if(!j){m=T;j=o}else break d}else{m=qa+(U*24|0)+8|0;ga=158}while(0);if((ga|0)==158){ga=0;Ba=m;m=c[Ba>>2]|T;l=c[Ba+4>>2]|l}U=U+1|0;if(U>>>0>=ia>>>0){ga=161;break}else T=m}if((ga|0)==161){ga=0;j=(ia|0)==4|(k|0)==(m|0)&(j|0)==(l|0)?2:0}switch(j|0){case 2:{ga=164;break c}case 11:{m=0;break c}case 0:break;default:break b}ia=ia+1|0}n:do if((ga|0)==164)if(!h){F=ia+-1|0;G=ra+12|0;H=ra+20|0;I=ha+-1|0;E=0;m=0;k=0;s=0;while(1){B=(E|0)==(F|0);i=c[qa+(E*24|0)>>2]|0;p=c[qa+(E*24|0)+4>>2]|0;r=qa+(E*24|0)+16|0;q=c[r>>2]|0;r=c[r+4>>2]|0;o=c[ra>>2]|0;c[ya>>2]=0;i=i+1|0;n=c[G>>2]|0;l=(n|0)==0;do if(l)h=29576;else{h=c[n+120>>2]|0;if(h|0?i>>>0<(e[n+144>>1]|0)>>>0:0){h=h+(i*40|0)|0;break}h=c[n>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0)A=c[h+16>>2]|0;else if(!(j&1))A=Gg(h,1)|0;else A=0;if(!l){j=c[n>>2]|0;l=n+40|0;h=c[l>>2]|0;if((h|0)==3082|(a[j+81>>0]|0)!=0){og(j);h=7}else h=c[j+68>>2]&h;c[l>>2]=h}n=c[G>>2]|0;if(!A){if(!n)h=1;else{h=c[n+120>>2]|0;do if(!h)ga=186;else{if(i>>>0>=(e[n+144>>1]|0)>>>0){ga=186;break}h=h+(i*40|0)|0;j=n}while(0);if((ga|0)==186){ga=0;h=c[n>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576;j=n}h=b[h+8>>1]&31;l=c[j>>2]|0;n=n+40|0;j=c[n>>2]|0;if((j|0)==3082|(a[l+81>>0]|0)!=0){og(l);j=7}else j=c[l+68>>2]&j;c[n>>2]=j}h=(-1431655766>>>h&1|0)==0?7:0;j=s}else{z=Lc(n,i)|0;y=o+36|0;j=c[y>>2]|0;D=c[j>>2]|0;l=c[H>>2]|0;c[sa>>2]=0;h=Za[c[D+12>>2]&127](j,A,z,sa)|0;if(h|0)break;c[c[sa>>2]>>2]=j;if((c[D>>2]|0)>0?(wa=Xa[c[D+24>>2]&255](c[sa>>2]|0,l)|0,wa|0):0){ga=195;break}C=c[sa>>2]|0;w=D+20|0;x=(E|0)!=0;t=p;v=0;o=0;j=s;s=q;o:while(1){c[na>>2]=-1;c[oa>>2]=0;c[pa>>2]=0;h=$a[c[w>>2]&127](C,za,na,oa,pa,ya)|0;switch(h|0){case 101:{ga=199;break o}case 0:break;default:{ga=274;break o}}h=c[ya>>2]|0;p:do if((h|0)<(t|0)){p=v;i=t;h=0;n=s;l=r}else{if(!o){o=c[oa>>2]|0;n=z-o|0;i=c[H>>2]|0;o=A+o|0;q:do if((s|0)==0&(r|0)==0){i=t;q=0;r=0}else{h=0;while(1){Ba=cw(1,0,h|0)|0;if((Ba&s|0)==0&((L()|0)&r|0)==0)h=h+1|0;else break}l=0;while(1){Ba=cw(1,0,I-l|0)|0;if((Ba&s|0)==0&((L()|0)&r|0)==0)l=l+1|0;else break}Ba=h-l|0;p=(Ba|0)/2|0;if((Ba|0)<=1){i=t;q=s;break}c[ta>>2]=0;l=c[y>>2]|0;q=c[l>>2]|0;c[sa>>2]=0;h=Za[c[q+12>>2]&127](l,o,n,sa)|0;r:do if(!h){c[c[sa>>2]>>2]=l;do if((c[q>>2]|0)>0){h=Xa[c[q+24>>2]&255](c[sa>>2]|0,i)|0;if(!h)break;Wa[c[q+16>>2]&127](c[sa>>2]|0)|0;c[sa>>2]=0;ga=216;break r}while(0);o=c[sa>>2]|0;l=p+ha|0;n=q+20|0;while(1){if((c[ta>>2]|0)>=(l|0)){ga=219;break}c[ua>>2]=0;c[va>>2]=0;c[xa>>2]=0;h=$a[c[n>>2]&127](o,sa,ua,va,xa,ta)|0;if(h|0){ga=221;break}}if((ga|0)==219){ga=0;Wa[c[q+16>>2]&127](o)|0;h=0}else if((ga|0)==221){ga=0;Wa[c[q+16>>2]&127](o)|0;if((h|0)==101)h=1;else break}i=h-ha+(c[ta>>2]|0)|0;Ba=(i|0)>0;q=bw(s|0,r|0,(Ba?i:0)|0)|0;r=L()|0;i=(Ba?i:0)+t|0;break q}else ga=216;while(0);if((ga|0)==216)ga=0;p=v;o=1;i=t;n=s;l=r;break p}while(0);do if(x|(i|0)>0){n=Eu(ma)|0;if((k+1+n|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){p=v;o=1;h=7;n=q;l=r;break p}h=sb(m,l,h)|0;if(!h){p=v;o=1;h=7;n=q;l=r;break p}m=h;j=l}ew(m+k|0,ma|0,n|0)|0;k=n+k|0;h=m+k|0;ga=238}else{h=c[oa>>2]|0;if(!h)break;if((h|0)<0)h=Eu(A)|0;if((k+1+h|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){p=v;o=1;h=7;n=q;l=r;break p}l=sb(m,n,l)|0;if(!l){p=v;o=1;h=7;n=q;l=r;break p}m=l;j=n}ew(m+k|0,A|0,h|0)|0;k=h+k|0;h=m+k|0;ga=238}while(0);if((ga|0)==238){ga=0;a[h>>0]=0}h=c[ya>>2]|0;if((h|0)<(i|0)){p=v;o=1;h=0;n=q;l=r;break}else{u=1;t=i}}else{u=o;q=s}if((h|0)>=(t+ha|0)){ga=241;break o}p=cw(1,0,h-t|0)|0;p=(p&q|0)!=0|((L()|0)&r|0)!=0;do if((h|0)>(t|0)){o=A+v|0;h=(c[oa>>2]|0)-v|0;if((h|0)<0)h=Eu(o)|0;if((k+1+h|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){h=7;break}l=sb(m,n,l)|0;if(!l){h=7;break}m=l;j=n}ew(m+k|0,o|0,h|0)|0;k=h+k|0;a[m+k>>0]=0;ga=255}else ga=255;while(0);do if((ga|0)==255){ga=0;if(p){n=Eu(ka)|0;o=n+k|0;if((o+1|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;break}h=sb(m,l,h)|0;if(!h){h=7;break}m=h;j=l}ew(m+k|0,ka|0,n|0)|0;a[m+o>>0]=0;k=o}h=c[oa>>2]|0;o=A+h|0;h=(c[pa>>2]|0)-h|0;if((h|0)<0)h=Eu(o)|0;i=h+k|0;if((i+1|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){h=7;break}l=sb(m,n,l)|0;if(!l){h=7;break}m=l;j=n}ew(m+k|0,o|0,h|0)|0;h=m+i|0;a[h>>0]=0;if(!p){h=0;k=i;break}o=Eu(la)|0;k=o+i|0;if((k+1|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;k=i;break}l=sb(m,n,h)|0;if(!l){h=7;k=i;break}h=l+i|0;m=l;j=n}ew(h|0,la|0,o|0)|0;a[m+k>>0]=0;h=0}while(0);p=c[pa>>2]|0;o=u;i=t;n=q;l=r}while(0);if(!h){t=i;v=p;s=n;r=l}else break}do if((ga|0)==199){n=A+v|0;o=Eu(n)|0;if((k+1+o|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;ga=274;break}h=sb(m,l,h)|0;if(!h){h=7;ga=274;break}m=h;j=l}ew(m+k|0,n|0,o|0)|0;k=o+k|0;a[m+k>>0]=0;h=0;ga=274}else if((ga|0)==241){if(!B){h=0;ga=274;break}n=Eu(ma)|0;if((k+1+n|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;ga=274;break}h=sb(m,l,h)|0;if(!h){h=7;ga=274;break}m=h;j=l}ew(m+k|0,ma|0,n|0)|0;k=n+k|0;a[m+k>>0]=0;h=0;ga=274}while(0);if((ga|0)==274)ga=0;Wa[c[D+16>>2]&127](C)|0}E=E+1|0;if(!(E>>>0<ia>>>0&(h|0)==0))break n;else s=j}if((ga|0)==195){Wa[c[D+16>>2]&127](c[sa>>2]|0)|0;c[sa>>2]=0;h=wa}}else m=0;while(0);j=ja+248|0;k=c[j>>2]|0;do if(k|0){l=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Ba=k;if((c[l+304>>2]|0)>>>0<=Ba>>>0?(c[l+308>>2]|0)>>>0>Ba>>>0:0){Ba=l+300|0;c[k>>2]=c[Ba>>2];c[Ba>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Ba=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[j>>2]=0;if(!h){if((yc(c[f>>2]|0,m,-1,1,90)|0)!=18)break;c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;break}c[f+20>>2]=h;j=c[f>>2]|0;if(b[j+8>>1]&1){switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(j,h,-1,1,0)|0}if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Ba=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);Ra=Aa;return}h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(h);h=c[f>>2]|0}c[f+20>>2]=7;h=c[h+32>>2]|0;j=h+81|0;if(a[j>>0]|0){Ra=Aa;return}if(a[h+82>>0]|0){Ra=Aa;return}a[j>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;Ba=h+272|0;c[Ba>>2]=(c[Ba>>2]|0)+1;h=c[h+236>>2]|0;if(!h){Ra=Aa;return}c[h+12>>2]=7;Ra=Aa;return}c[m>>2]=51022;h=Bb(55087,m)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(!h){Ra=Aa;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);Ra=Aa;return}else{Ba=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);Ra=Aa;return}}function Ur(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=Ra;Ra=Ra+160|0;M=R+104|0;i=R+96|0;E=R;F=R+136|0;O=R+64|0;G=R+132|0;I=R+128|0;J=R+124|0;K=R+120|0;g=c[h>>2]|0;if((((b[g+8>>1]&-15393)<<16>>16==-32255?(a[g+11>>0]|0)==112:0)?(Bu(c[g>>2]|0,54938)|0)==0:0)?(j=c[g+16>>2]|0,j|0):0){if(ur(f,j)|0){Ra=R;return}P=c[j>>2]|0;C=P+36|0;h=c[c[C>>2]>>2]|0;D=j+16|0;g=c[D>>2]|0;do if(!g){if((yc(c[f>>2]|0,59952,0,1,0)|0)==18){c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0}}else{c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[O+24>>2]=0;c[O+28>>2]=0;k=F+4|0;c[k>>2]=0;c[k+4>>2]=0;c[F>>2]=j;c[E>>2]=0;k=Zr(g,E,92,F)|0;B=c[F+8>>2]|0;a:do if(!k){A=pb(B*12|0,0)|0;H=O+24|0;c[H>>2]=A;if(A){z=j+32|0;A=c[z+4>>2]|0;x=O+16|0;c[x>>2]=c[z>>2];c[x+4>>2]=A;c[O>>2]=j;x=P+24|0;if((c[x>>2]|0)>0){y=O+4|0;z=O+8|0;A=j+12|0;t=j+20|0;u=h+20|0;v=(B|0)>0;w=P+40|0;s=h+16|0;r=0;h=0;j=0;n=0;b:while(1){c[G>>2]=0;c[I>>2]=0;c[J>>2]=0;c[K>>2]=0;c[y>>2]=r;c[z>>2]=0;l=c[D>>2]|0;c[E>>2]=0;Zr(l,E,94,O)|0;l=c[A>>2]|0;q=r;r=r+1|0;k=(l|0)==0;do if(k)g=29576;else{g=c[l+120>>2]|0;if(g|0?r>>>0<(e[l+144>>1]|0)>>>0:0){g=g+(r*40|0)|0;break}g=c[l>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0)m=c[g+16>>2]|0;else if(!(i&1))m=Gg(g,1)|0;else m=0;if(!k){i=c[l>>2]|0;k=l+40|0;g=c[k>>2]|0;if((g|0)==3082|(a[i+81>>0]|0)!=0){og(i);g=7}else g=c[i+68>>2]&g;c[k>>2]=g}g=Lc(c[A>>2]|0,r)|0;if(!m){l=c[A>>2]|0;if(!l)g=1;else{g=c[l+120>>2]|0;do if(!g)Q=38;else{if(r>>>0>=(e[l+144>>1]|0)>>>0){Q=38;break}g=g+(r*40|0)|0;i=l}while(0);if((Q|0)==38){Q=0;g=c[l>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;i=l}g=b[g+8>>1]&31;k=c[i>>2]|0;l=l+40|0;i=c[l>>2]|0;if((i|0)==3082|(a[k+81>>0]|0)!=0){og(k);i=7}else i=c[k+68>>2]&i;c[l>>2]=i}if(!(-1431655766>>>g&1)){k=7;g=H;Q=83;break a}else g=n}else{i=c[C>>2]|0;k=c[t>>2]|0;l=c[i>>2]|0;c[E>>2]=0;g=Za[c[l+12>>2]&127](i,m,g,E)|0;if(g|0){Q=47;break}c[c[E>>2]>>2]=i;if((c[l>>2]|0)>0?(N=Xa[c[l+24>>2]&255](c[E>>2]|0,k)|0,N|0):0){Q=46;break}p=c[E>>2]|0;g=$a[c[u>>2]&127](p,F,G,I,J,K)|0;i=n;c:while(1){d:while(1){switch(g|0){case 101:break c;case 0:break;default:{Q=79;break b}}do if(v){n=c[H>>2]|0;k=0;l=2147483647;m=0;while(1){g=n+(m*12|0)|0;if(!(c[g>>2]|0))o=k;else{S=(c[n+(m*12|0)+4>>2]|0)-(c[n+(m*12|0)+8>>2]|0)|0;T=(S|0)<(l|0);o=T?g:k;l=T?S:l}m=m+1|0;if((m|0)==(B|0))break;else k=o}if(!o){g=101;break}m=c[o>>2]|0;k=a[m>>0]|0;if((k&255)<2)c[o>>2]=0;else{n=o+4|0;g=k&255;do if(!(g&128))k=1;else{T=d[m+1>>0]|0;g=T<<7|k&127;if(!(T&128)){k=2;break}T=d[m+2>>0]|0;g=T<<14|g&16383;if(!(T&128)){k=3;break}T=d[m+3>>0]|0;g=T<<21|g&2097151;if(!(T&128)){k=4;break}g=(a[m+4>>0]&7)<<28|g&268435455;k=5}while(0);c[o>>2]=m+k;c[n>>2]=g+-2+(c[n>>2]|0)}if((c[K>>2]|0)>=(l|0))break d;do{g=$a[c[u>>2]&127](p,F,G,I,J,K)|0;k=(g|0)==0}while(k&(c[K>>2]|0)<(l|0));if(k)break d;if((g|0)!=101)break;g=(c[w>>2]|0)==0?267:101}else g=101;while(0)}T=(o-(c[H>>2]|0)|0)/12|0;m=c[I>>2]|0;l=(c[J>>2]|0)-m|0;c[M>>2]=q;c[M+4>>2]=T;c[M+8>>2]=m;c[M+12>>2]=l;Cb(64,E,55116,M)|0;l=Eu(E)|0;m=l+j|0;do if((m+1|0)<(i|0))Q=73;else{k=Sv(i|0,((i|0)<0)<<31>>31|0,100,0)|0;k=Sv(k|0,L()|0,l|0,((l|0)<0)<<31>>31|0)|0;g=L()|0;if(mb()|0){g=7;break}g=sb(h,k,g)|0;if(!g){g=7;break}h=g;i=k;Q=73}while(0);if((Q|0)==73){Q=0;ew(h+j|0,E|0,l|0)|0;a[h+m>>0]=0;g=0;j=m}}Wa[c[s>>2]&127](p)|0;g=i}if((r|0)>=(c[x>>2]|0)){k=0;g=H;Q=83;break a}else n=g}if((Q|0)==46){Wa[c[l+16>>2]&127](c[E>>2]|0)|0;c[E>>2]=0;g=N;Q=47}else if((Q|0)==79)Wa[c[s>>2]&127](p)|0;k=g;g=H;Q=83}else{k=0;g=H;h=0;j=0;Q=83}}else{k=7;l=0;j=0}}else{g=O+24|0;h=0;j=0;Q=83}while(0);do if((Q|0)==83){g=c[g>>2]|0;if(g)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);l=h;break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);l=h;break}else l=h}while(0);g=P+248|0;h=c[g>>2]|0;do if(h|0){i=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,h);break}T=h;if((c[i+304>>2]|0)>>>0<=T>>>0?(c[i+308>>2]|0)>>>0>T>>>0:0){T=i+300|0;c[h>>2]=c[T>>2];c[T>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{T=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[g>>2]=0;if(!k){if((yc(c[f>>2]|0,l,j+-1|0,1,90)|0)!=18)break;c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;break}c[f+20>>2]=k;h=c[f>>2]|0;if(b[h+8>>1]&1){switch(k|0){case 516:{g=50738;break}case 100:{g=50760;break}case 101:{g=50782;break}default:{g=k&255;if(g>>>0<29?(520028155>>>g&1|0)!=0:0)g=c[22960+(g<<2)>>2]|0;else g=50724}}yc(h,g,-1,1,0)|0}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{T=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);Ra=R;return}c[i>>2]=51030;g=Bb(55087,i)|0;c[f+20>>2]=1;yc(c[f>>2]|0,g,-1,1,-1)|0;if(!g){Ra=R;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=R;return}else{T=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=R;return}}function Vr(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;g=i;e=c[f>>2]|0;if((((b[e+8>>1]&-15393)<<16>>16==-32255?(a[e+11>>0]|0)==112:0)?(Bu(c[e>>2]|0,54938)|0)==0:0)?(h=c[e+16>>2]|0,h|0):0){g=c[h>>2]|0;f=g+12|0;e=nd(c[f>>2]|0,55167,0,0,0)|0;a:do if(!e){e=Dr(g,1)|0;switch(e|0){case 0:case 101:{h=nd(c[f>>2]|0,55182,0,0,0)|0;e=(h|0)==0?e:h;break a}default:{nd(c[f>>2]|0,55195,0,0,0)|0;nd(c[f>>2]|0,55182,0,0,0)|0;break a}}}while(0);f=g+248|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}j=g;if((c[h+304>>2]|0)>>>0<=j>>>0?(c[h+308>>2]|0)>>>0>j>>>0:0){j=h+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,55129,-1,1,0)|0)!=18){Ra=i;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=i;return}case 101:{if((yc(c[d>>2]|0,55145,-1,1,0)|0)!=18){Ra=i;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=i;return}default:{c[d+20>>2]=(e|0)==0?-1:e;f=c[d>>2]|0;if(!(b[f+8>>1]&1)){Ra=i;return}switch(e|0){case 516:{e=50738;break}case 100:{e=50760;break}default:{e=e&255;if(e>>>0<29?(520028155>>>e&1|0)!=0:0)e=c[22960+(e<<2)>>2]|0;else e=50724}}yc(f,e,-1,1,0)|0;Ra=i;return}}}c[g>>2]=37598;e=Bb(55087,g)|0;c[d+20>>2]=1;yc(c[d>>2]|0,e,-1,1,-1)|0;if(!e){Ra=i;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);Ra=i;return}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);Ra=i;return}}function Wr(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;$=Ra;Ra=Ra+80|0;X=$+48|0;o=$+40|0;i=$+32|0;Y=$+76|0;U=$+64|0;V=$+60|0;Z=$+56|0;W=$;h=c[g>>2]|0;if((((b[h+8>>1]&-15393)<<16>>16==-32255?(a[h+11>>0]|0)==112:0)?(Bu(c[h>>2]|0,54938)|0)==0:0)?(T=c[h+16>>2]|0,T|0):0){do if((f|0)>1?(j=c[g+4>>2]|0,(j|0)!=0):0){f=b[j+8>>1]|0;if((f&514)==514?(a[j+10>>0]|0)==1:0){f=c[j+16>>2]|0;break}if(!(f&1))f=Gg(j,1)|0;else f=0}else f=0;while(0);_=c[T>>2]|0;O=(f|0)==0?55212:f;P=T+16|0;f=c[P>>2]|0;if(!f){if((yc(c[e>>2]|0,59952,0,0,0)|0)!=18){Ra=$;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=$;return}Q=W+8|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[W>>2]=T;R=W+4|0;c[R>>2]=c[_+24>>2];S=T+92|0;g=c[S>>2]|0;if(g)if(!(Bu(c[g+12>>2]|0,O)|0)){j=0;u=47}else{a[g>>0]=0;do if((a[g+1>>0]|0)==0?(a[g+2>>0]|0)==0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{N=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-N;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[S>>2]=0;f=c[P>>2]|0;u=27}else u=27;a:do if((u|0)==27){c[U>>2]=0;c[Y>>2]=0;Zr(f,Y,95,U)|0;g=c[U>>2]|0;c[T+24>>2]=g;c[Q>>2]=g;f=a[O>>0]|0;b:do if(!(f<<24>>24))f=0;else{j=_+232|0;k=_+234|0;l=c[R>>2]|0;m=G(l,g)|0;n=m*3|0;i=G((l+31|0)/32|0,g)|0;h=0;g=0;c:while(1){c[Y>>2]=0;switch(f<<24>>24){case 98:case 121:case 120:case 115:case 99:case 112:break;case 110:{if(!(a[j>>0]|0)){f=110;break c}break}case 97:{if(!(a[j>>0]|0)){f=97;break c}break}case 108:{if(!(a[k>>0]|0)){f=108;break c}break}default:break c}switch(f<<24>>24|0){case 99:case 112:case 110:{f=1;break}case 115:case 108:case 97:{f=l;break}case 121:{f=m;break}case 98:{f=i;break}default:f=n}g=f+g|0;h=h+1|0;f=a[O+h>>0]|0;if(!(f<<24>>24)){f=g;break b}}c[o>>2]=f<<24>>24;Wp(Y,55216,o);f=c[Y>>2]|0;c[e+20>>2]=1;yc(c[e>>2]|0,f,-1,1,-1)|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);break a}while(0);g=cw(f|0,0,3)|0;i=L()|0;g=g|4;h=Eu(O)|0;N=Sv(h|0,0,21,0)|0;i=Sv(N|0,L()|0,g|0,i|0)|0;i=pb(i,L()|0)|0;if(!i){c[S>>2]=0;c[T+88>>2]=1;i=0;f=7;h=0;u=303;break}else{j=g+20|0;gw(i|0,0,j|0)|0;u=i+16|0;c[u>>2]=20;g=f+1|0;c[u+(g<<2)>>2]=(g<<2)+20;c[i+4>>2]=f;j=i+j|0;c[i+12>>2]=j;ew(j|0,O|0,h+1|0)|0;a[i>>0]=1;c[S>>2]=i;c[T+88>>2]=1;j=1;g=i;u=47;break}}while(0);d:do if((u|0)==47){f=g+1|0;do if(a[f>>0]|0){f=g+2|0;if(!(a[f>>0]|0)){a[f>>0]=1;N=g+16+((c[g+4>>2]|0)+2<<2)|0;i=98;break}f=g+4|0;h=pb(c[f>>2]<<2,0)|0;if(!h){i=0;f=7;h=0;u=303;break d}if(!(c[g+8>>2]|0)){N=h;i=90}else{ew(h|0,g+20|0,c[f>>2]<<2|0)|0;N=h;i=90}}else{a[f>>0]=1;N=g+20|0;i=98}while(0);h=N;F=W+28|0;c[F>>2]=h;H=T+24|0;c[Q>>2]=c[H>>2];c[V>>2]=0;I=c[T>>2]|0;c[Z>>2]=0;J=W+24|0;K=U+4|0;M=(j|0)==0;x=T+32|0;y=I+140|0;z=U+4|0;A=I+16|0;B=I+20|0;C=T+28|0;D=I+12|0;E=W+16|0;w=0;g=N;while(1){v=O+w|0;f=a[v>>0]|0;if(!(f<<24>>24)){f=0;break}a[J>>0]=f;e:do switch(f<<24>>24|0){case 112:{if(M)f=0;else{c[g>>2]=c[Q>>2];f=0}break}case 99:{if(M)f=0;else{c[g>>2]=c[R>>2];f=0}break}case 110:{if(M)f=0;else{f=c[Z>>2]|0;if(!f){f=lr(I,Z)|0;if(!f){f=c[Z>>2]|0;if(!f){k=mc(29576)|0;u=74}else u=65}else j=0}else u=65;if((u|0)==65){g=c[f+120>>2]|0;if((g|0)!=0?(b[f+144>>1]|0)!=0:0)j=f;else{g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;u=74}if((u|0)==74){u=0;f=a[k>>0]|0;g=f&255;do if(!(g&128)){f=f&255;g=0}else{t=d[k+1>>0]|0;f=t<<7|g&127;if(!(t&128)){g=0;break}t=d[k+2>>0]|0;f=t<<14|f&16383;if(!(t&128)){g=0;break}t=d[k+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){g=0;break}l=28;j=k+4|0;f=f&268435455;g=0;while(1){t=d[j>>0]|0;s=cw(t&127|0,0,l|0)|0;f=Sv(s|0,L()|0,f|0,g|0)|0;g=L()|0;l=l+7|0;if(!(l>>>0<64&((t&128|0)!=0|0!=0)))break;else j=j+1|0}}while(0);j=f;f=(f|0)==0&(g|0)==0?267:0}c[V>>2]=f;c[c[F>>2]>>2]=j}break}case 97:{if(M)f=0;else{f=c[Z>>2]|0;if(!f){f=lr(I,Z)|0;if(!f){f=c[Z>>2]|0;if(!f){l=mc(29576)|0;u=99}else u=90}}else u=90;if((u|0)==90){g=c[f+120>>2]|0;if((g|0)!=0?(b[f+144>>1]|0)!=0:0)j=f;else{g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;l=k;u=99}if((u|0)==99){u=0;g=a[l>>0]|0;f=g&255;do if(!(f&128)){j=1;f=g&255;g=0}else{t=d[l+1>>0]|0;f=t<<7|f&127;if(!(t&128)){j=2;g=0;break}t=d[l+2>>0]|0;f=t<<14|f&16383;if(!(t&128)){j=3;g=0;break}t=d[l+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){j=4;g=0;break}j=28;k=l+4|0;f=f&268435455;g=0;do{t=k;k=k+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,j|0)|0;f=Sv(s|0,L()|0,f|0,g|0)|0;g=L()|0;j=j+7|0}while(j>>>0<64&((t&128|0)!=0|0!=0));j=k-l|0}while(0);if((f|0)==0&(g|0)==0)f=267;else{c[V>>2]=0;if((c[R>>2]|0)<=0){f=0;break e}o=bw(f|0,0,1)|0;p=L()|0;n=0;m=l+j|0;while(1){j=a[m>>0]|0;g=j&255;do if(!(g&128)){k=1;g=j&255}else{t=d[m+1>>0]|0;g=t<<7|g&127;if(!(t&128)){k=2;break}t=d[m+2>>0]|0;g=t<<14|g&16383;if(!(t&128)){k=3;break}t=d[m+3>>0]|0;g=t<<21|g&2097151;if(!(t&128)){k=4;break}k=28;l=m+4|0;g=g&268435455;j=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;g=Sv(s|0,L()|0,g|0,j|0)|0;j=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));k=l-m|0}while(0);t=Sv(g|0,0,o|0,p|0)|0;t=_v(t|0,L()|0,f|0,0)|0;L()|0;c[(c[F>>2]|0)+(n<<2)>>2]=t;n=n+1|0;if((n|0)>=(c[R>>2]|0)){f=0;break e}else m=m+k|0}}}c[V>>2]=f}break}case 108:{l=x;k=c[l>>2]|0;l=c[l+4>>2]|0;u=c[y>>2]|0;c[Y>>2]=u;g=u;do if(!u){j=c[B>>2]|0;c[X>>2]=c[A>>2];c[X+4>>2]=j;j=Bb(52364,X)|0;if(!j){f=7;u=156;break}f=qd(c[D>>2]|0,j,-1,133,0,Y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{u=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}g=c[Y>>2]|0;c[y>>2]=g;if(!f)u=134;else u=156}else u=134;while(0);f:do if((u|0)==134){u=0;o=g;do if(!(Vc(o,1)|0)){f=c[o+100>>2]|0;j=f+8|0;if(!(b[j>>1]&9216)){t=f;c[t>>2]=k;c[t+4>>2]=l;b[j>>1]=4;break}else{Pg(f,k,l);break}}while(0);f=(g|0)==0;do if((Gc(o)|0)==100){if(!f){m=o+120|0;f=c[m>>2]|0;do if(!f)u=143;else{if(!(b[o+144>>1]|0)){u=143;break}j=f;f=o}while(0);if((u|0)==143){u=0;j=c[o>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;f=o}l=b[j+8>>1]&15;j=c[f>>2]|0;n=o+40|0;k=c[n>>2]|0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&k;c[n>>2]=j;if((l|16)<<16>>16!=16){u=150;break}c[V>>2]=0;f=c[m>>2]|0;do if(!f)u=160;else{if(!(b[o+144>>1]|0)){u=160;break}j=o}while(0);if((u|0)==160){u=0;f=c[o>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576;j=o}k=mc(f)|0;f=c[j>>2]|0;j=c[n>>2]|0;if((j|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&j;c[n>>2]=f;if((c[R>>2]|0)<=0){k=o;g=o;f=0;break f}m=k;n=0;while(1){f=d[m>>0]|0;do if(!(f&128))j=1;else{u=d[m+1>>0]|0;f=u<<7|f&127;if(!(u&128)){j=2;break}u=d[m+2>>0]|0;f=u<<14|f&16383;if(!(u&128)){j=3;break}u=d[m+3>>0]|0;f=u<<21|f&2097151;if(!(u&128)){j=4;break}k=28;l=m+4|0;f=f&268435455;j=0;do{u=l;l=l+1|0;u=d[u>>0]|0;t=cw(u&127|0,0,k|0)|0;f=Sv(t|0,L()|0,f|0,j|0)|0;j=L()|0;k=k+7|0}while(k>>>0<64&((u&128|0)!=0|0!=0));j=l-m|0}while(0);c[(c[F>>2]|0)+(n<<2)>>2]=f;n=n+1|0;if((n|0)>=(c[R>>2]|0)){j=o;f=0;u=174;break f}else m=m+j|0}}}else if(!f){f=o;u=150}while(0);do if((u|0)==150){f=c[f>>2]|0;u=o+136|0;t=c[u+4>>2]|0;if((t|0)>0|(t|0)==0&(c[u>>2]|0)>>>0>0)hc(f,o);g=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;u=o+64|0;c[u>>2]=0;c[u+4>>2]=0;if(!((g|0)==3082|(a[f+81>>0]|0)!=0)){f=c[f+68>>2]&g;if(!f)break;else{g=0;u=156;break f}}else{og(f);f=7;g=0;u=156;break f}}while(0);f=267;g=0;u=156}while(0);if((u|0)==156){c[V>>2]=f;j=g;u=174}if((u|0)==174){u=0;if(!g)break e;k=j;g=j}g=c[g>>2]|0;t=k+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(g,k);t=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;s=k+64|0;c[s>>2]=0;c[s+4>>2]=0;if((t|0)==3082|(a[g+81>>0]|0)!=0)og(g);break}case 115:{f=z;c[f>>2]=0;c[f+4>>2]=0;c[U>>2]=T;f=c[P>>2]|0;c[Y>>2]=0;f=Zr(f,Y,92,U)|0;c[V>>2]=f;if(!f){t=pb(c[H>>2]<<4,0)|0;do if(t){gw(t|0,0,c[H>>2]<<4|0)|0;f=c[P>>2]|0;c[Y>>2]=0;Zr(f,Y,96,t)|0;f=c[Q>>2]|0;if((f|0)>0){g=0;j=0;do{g=g-(c[(c[(c[t+(j<<4)>>2]|0)+20>>2]|0)+64>>2]|0)|0;c[t+(j<<4)+4>>2]=g;j=j+1|0}while((j|0)!=(f|0))}g:do if((c[R>>2]|0)>0){s=0;h:while(1){i:do if((f|0)>0){g=0;q=0;do{p=t+(q<<4)+8|0;f=_r(T,c[t+(q<<4)>>2]|0,s,p)|0;if(f|0)break g;m=c[p>>2]|0;if(m){n=c[t+(q<<4)+4>>2]|0;o=t+(q<<4)+12|0;c[o>>2]=n;j=a[m>>0]|0;f=j&255;do if(!(f&128)){k=1;l=0;f=j&255}else{r=d[m+1>>0]|0;f=r<<7|f&127;if(!(r&128)){k=2;l=0;break}r=d[m+2>>0]|0;f=r<<14|f&16383;if(!(r&128)){k=3;l=0;break}r=d[m+3>>0]|0;f=r<<21|f&2097151;if(!(r&128)){k=4;l=0;break}j=28;k=m+4|0;f=f&268435455;l=0;do{r=k;k=k+1|0;r=d[r>>0]|0;aa=cw(r&127|0,0,j|0)|0;f=Sv(aa|0,L()|0,f|0,l|0)|0;l=L()|0;j=j+7|0}while(j>>>0<64&((r&128|0)!=0|0!=0));k=k-m|0}while(0);if(l>>>0<0|(l|0)==0&f>>>0<2)break h;c[o>>2]=n+-2+f;c[p>>2]=m+k;g=g+1|0}q=q+1|0;r=c[Q>>2]|0}while((q|0)<(r|0));if((g|0)<=0){f=0;break}if((r|0)<=0){f=g;g=c[2]|0;while(1){k=a[g>>0]|0;j=k&255;do if(!(j&128)){l=1;m=0;j=k&255}else{aa=d[g+1>>0]|0;j=aa<<7|j&127;if(!(aa&128)){l=2;m=0;break}aa=d[g+2>>0]|0;j=aa<<14|j&16383;if(!(aa&128)){l=3;m=0;break}aa=d[g+3>>0]|0;j=aa<<21|j&2097151;if(!(aa&128)){l=4;m=0;break}k=28;l=g+4|0;j=j&268435455;m=0;do{aa=l;l=l+1|0;aa=d[aa>>0]|0;r=cw(aa&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,m|0)|0;m=L()|0;k=k+7|0}while(k>>>0<64&((aa&128|0)!=0|0!=0));l=l-g|0}while(0);if(m>>>0<0|(m|0)==0&j>>>0<2){c[2]=0;g=0;f=f+-1|0}else{g=g+l|0;c[3]=j+-2+(c[3]|0);c[2]=g}if((f|0)<=0){f=0;break i}}}f=0;do{l=0;k=0;m=0;do{j=t+(m<<4)|0;if(!(c[t+(m<<4)+8>>2]|0))l=0;else{if(!((k|0)!=0?(c[t+(m<<4)+12>>2]|0)>=(c[k+12>>2]|0):0))k=j;if((l|0)!=0?(c[t+(m<<4)+12>>2]|0)!=(c[j+-16+12>>2]|0):0)j=1;else j=l+1|0;l=j;f=(j|0)>(f|0)?j:f}m=m+1|0}while((m|0)!=(r|0));p=k+8|0;o=c[p>>2]|0;l=a[o>>0]|0;j=l&255;do if(!(j&128)){m=1;n=0;j=l&255}else{aa=d[o+1>>0]|0;j=aa<<7|j&127;if(!(aa&128)){m=2;n=0;break}aa=d[o+2>>0]|0;j=aa<<14|j&16383;if(!(aa&128)){m=3;n=0;break}aa=d[o+3>>0]|0;j=aa<<21|j&2097151;if(!(aa&128)){m=4;n=0;break}l=28;m=o+4|0;j=j&268435455;n=0;do{aa=m;m=m+1|0;aa=d[aa>>0]|0;q=cw(aa&127|0,0,l|0)|0;j=Sv(q|0,L()|0,j|0,n|0)|0;n=L()|0;l=l+7|0}while(l>>>0<64&((aa&128|0)!=0|0!=0));m=m-o|0}while(0);if(n>>>0<0|(n|0)==0&j>>>0<2){c[p>>2]=0;g=g+-1|0}else{aa=k+12|0;c[aa>>2]=j+-2+(c[aa>>2]|0);c[p>>2]=o+m}}while((g|0)>0)}else f=0;while(0);c[(c[F>>2]|0)+(s<<2)>>2]=f;f=s+1|0;if((f|0)>=(c[R>>2]|0)){f=0;break g}s=f;f=c[Q>>2]|0}c[p>>2]=0;f=267}else f=0;while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{aa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else f=7;while(0);c[V>>2]=f}break}case 98:{f=G(((c[R>>2]|0)+31|0)/32|0,c[Q>>2]|0)|0;u=258;break}case 121:{f=G(c[Q>>2]|0,c[R>>2]|0)|0;u=258;break}default:{m=c[P>>2]|0;f=K;c[f>>2]=0;c[f+4>>2]=0;c[U>>2]=T;c[Y>>2]=0;f=Zr(m,Y,92,U)|0;c[V>>2]=f;if(!f){if(!M){j:do if(c[C>>2]|0){f=c[Z>>2]|0;do if(!f){f=lr(I,Z)|0;if(f|0)break;f=c[Z>>2]|0;if(f|0){u=265;break}k=mc(29576)|0;u=274}else u=265;while(0);if((u|0)==265){u=0;g=c[f+120>>2]|0;do if(!g)u=268;else{if(!(b[f+144>>1]|0)){u=268;break}j=f}while(0);if((u|0)==268){g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;u=274}do if((u|0)==274){u=0;f=a[k>>0]|0;g=f&255;do if(!(g&128)){f=f&255;g=0}else{aa=d[k+1>>0]|0;f=aa<<7|g&127;if(!(aa&128)){g=0;break}aa=d[k+2>>0]|0;f=aa<<14|f&16383;if(!(aa&128)){g=0;break}aa=d[k+3>>0]|0;f=aa<<21|f&2097151;if(!(aa&128)){g=0;break}l=28;j=k+4|0;f=f&268435455;g=0;while(1){aa=d[j>>0]|0;t=cw(aa&127|0,0,l|0)|0;f=Sv(t|0,L()|0,f|0,g|0)|0;g=L()|0;l=l+7|0;if(!(l>>>0<64&((aa&128|0)!=0|0!=0)))break;else j=j+1|0}}while(0);if((f|0)==0&(g|0)==0){f=267;break}aa=E;c[aa>>2]=f;c[aa+4>>2]=0;c[V>>2]=0;break j}while(0);c[V>>2]=f;break e}while(0);c[Y>>2]=0;f=Zr(m,Y,97,W)|0;c[V>>2]=f;rr(T,V)|0;f=c[V>>2]|0;if(f|0)break e}c[Y>>2]=0;Zr(m,Y,98,W)|0;f=0}}}while(0);if((u|0)==258){u=0;gw(g|0,0,f<<2|0)|0;f=ds(c[P>>2]|0,W)|0;c[V>>2]=f}switch(a[v>>0]|0){case 99:case 112:case 110:{g=1;break}case 115:case 108:case 97:{g=c[R>>2]|0;break}case 121:{g=G(c[Q>>2]|0,c[R>>2]|0)|0;break}case 98:{g=G(((c[R>>2]|0)+31|0)/32|0,c[Q>>2]|0)|0;break}default:g=G((c[R>>2]|0)*3|0,c[Q>>2]|0)|0}g=(c[F>>2]|0)+(g<<2)|0;c[F>>2]=g;if(f|0)break;else w=w+1|0}g=c[Z>>2]|0;if(g|0){j=c[g>>2]|0;aa=g+136|0;Z=c[aa+4>>2]|0;if((Z|0)>0|(Z|0)==0&(c[aa>>2]|0)>>>0>0)hc(j,g);aa=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;Z=g+64|0;c[Z>>2]=0;c[Z+4>>2]=0;if((aa|0)==3082|(a[j+81>>0]|0)!=0)og(j)}if(!M){Z=c[S>>2]|0;c[Z+8>>2]=1;aa=c[Z+4>>2]|0;ew(Z+16+(aa+2<<2)|0,Z+20|0,aa<<2|0)|0}if(!f){if((yc(c[e>>2]|0,N,c[(c[S>>2]|0)+4>>2]<<2,0,i)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}}else u=303}while(0);if((u|0)==303){c[e+20>>2]=f;g=c[e>>2]|0;if(b[g+8>>1]&1){switch(f|0){case 516:{f=50738;break}case 100:{f=50760;break}case 101:{f=50782;break}default:{f=f&255;if(f>>>0<29?(520028155>>>f&1|0)!=0:0)f=c[22960+(f<<2)>>2]|0;else f=50724}}yc(g,f,-1,1,0)|0}if(i|0)ab[i&127](h)}f=_+248|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}aa=g;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[g>>2]=c[aa>>2];c[aa>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{aa=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0;Ra=$;return}c[i>>2]=51038;f=Bb(55087,i)|0;c[e+20>>2]=1;yc(c[e>>2]|0,f,-1,1,-1)|0;if(!f){Ra=$;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=$;return}else{aa=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=$;return}}function Xr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;i=k;j=c[f+16>>2]|0;c[j+(e*24|0)>>2]=c[(c[b+20>>2]|0)+64>>2];h=_r(c[f>>2]|0,b,c[f+4>>2]|0,i)|0;g=c[i>>2]|0;if(!g){j=h;Ra=k;return j|0}c[j+(e*24|0)+4>>2]=g;f=a[g>>0]|0;b=f&255;if(b&128){l=d[g+1>>0]|0;b=l<<7|f&127;if(l&128){l=d[g+2>>0]|0;b=l<<14|b&16383;if(l&128){l=d[g+3>>0]|0;b=l<<21|b&2097151;if(!(l&128))f=4;else{b=(a[g+4>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;g=g+f|0;c[i>>2]=g;f=b+-2|0;if((b|0)<2){l=267;Ra=k;return l|0}c[j+(e*24|0)+12>>2]=g;c[j+(e*24|0)+20>>2]=g;c[j+(e*24|0)+8>>2]=f;c[j+(e*24|0)+16>>2]=f;l=h;Ra=k;return l|0}function Yr(a,b,d){a=a|0;b=b|0;d=d|0;b=c[a+20>>2]|0;a=d+4|0;c[a>>2]=(c[a>>2]|0)+1;d=d+8|0;c[d>>2]=(c[d>>2]|0)+(c[b+64>>2]|0);return 0}function Zr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[a>>2]|0;a:do if((f|0)!=5){g=a;while(1){a=Zr(c[g+12>>2]|0,b,d,e)|0;if(!((f|0)!=2&(a|0)==0))break;a=c[g+16>>2]|0;f=c[a>>2]|0;if((f|0)==5)break a;else g=a}return a|0}while(0);e=Ya[d&127](a,c[b>>2]|0,e)|0;c[b>>2]=(c[b>>2]|0)+1;return e|0}function _r(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;G=Ra;Ra=Ra+32|0;F=G+16|0;C=G;o=G+12|0;D=G+20|0;E=G+8|0;A=c[e+20>>2]|0;i=c[b>>2]|0;c[g>>2]=0;B=c[A+68>>2]|0;if(!((B|0)==(f|0)?1:(B|0)>=(c[i+24>>2]|0))){g=0;Ra=G;return g|0}n=e+24|0;m=c[n>>2]|0;n=c[n+4>>2]|0;h=C;c[h>>2]=m;c[h+4>>2]=n;h=c[A+28>>2]|0;c[F>>2]=h;B=b+32|0;z=B;if(!(((m|0)==(c[z>>2]|0)?(n|0)==(c[z+4>>2]|0):0)?(a[e+32>>0]|0)==0:0))x=4;a:do if((x|0)==4){c[o>>2]=0;y=a[i+235>>0]|0;z=y&255;h=c[e+8>>2]|0;b:do if(h){i=0;l=0;do{x=c[h>>2]|0;i=(x|0)==4?1:i;e=(x|0)==1?h:e;l=(a[h+32>>0]|0)==0?l:1;h=c[h+8>>2]|0}while((h|0)!=0);if(i){c:do if(c[A+40>>2]|0){k=e+32|0;i=a[k>>0]|0;$r(b,e,o);j=e+24|0;h=c[o>>2]|0;if(!h)if(!(i<<24>>24))do{if(a[k>>0]|0){h=0;break c}qr(b,e,o);x=j;h=c[o>>2]|0}while(((c[x>>2]|0)!=(m|0)?1:(c[x+4>>2]|0)!=(n|0))&(h|0)==0);else do{if(a[k>>0]|0){h=0;break c}qr(b,e,o);h=c[o>>2]|0}while(!(h|0))}else h=0;while(0);i=(h|0)==0;d:do if(!(l<<24>>24)){if(!i)break b;if(!e)x=81;else x=24}else{if(!i)break b;i=e+32|0;while(1){if(a[i>>0]|0){x=24;break d}qr(b,e,o);h=c[o>>2]|0;if(h|0)break b}}while(0);if((x|0)==24){u=b+52|0;w=y<<24>>24==0;v=w?1:-1;w=w?0:-1;h=1;do{a[D>>0]=0;if((c[e>>2]|0)==1)i=c[e+16>>2]|0;else i=e;r=c[i+20>>2]|0;s=r+48|0;j=c[s>>2]|0;c[F>>2]=j;t=r+56|0;m=t;i=c[m>>2]|0;m=c[m+4>>2]|0;b=C;c[b>>2]=i;c[b+4>>2]=m;b=r+4|0;q=c[b>>2]|0;k=(q|0)!=0;l=j;e:do if((a[u>>0]|0)==y<<24>>24){if(k)k=((c[r>>2]|0)+q|0)>>>0<=l>>>0;else k=1;n=k&1;a[D>>0]=n;p=n;b=l;while(1){f:do if(!b){if(p<<24>>24){h=m;x=76;break e}n=c[r>>2]|0;l=n;i=a[n>>0]|0;j=i&255;do if(!(j&128)){i=i&255;j=C;c[j>>2]=i;c[j+4>>2]=0;j=1;m=0}else{p=d[n+1>>0]|0;i=p<<7|j&127;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=2;m=0;break}p=d[n+2>>0]|0;i=p<<14|i&16383;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=3;m=0;break}p=d[n+3>>0]|0;i=p<<21|i&2097151;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=4;m=0;break}j=28;k=n+4|0;i=i&268435455;m=0;do{p=k;k=k+1|0;p=d[p>>0]|0;o=cw(p&127|0,0,j|0)|0;i=Sv(o|0,L()|0,i|0,m|0)|0;m=L()|0;j=j+7|0}while(j>>>0<64&((p&128|0)!=0|0!=0));j=C;c[j>>2]=i;c[j+4>>2]=m;j=k-l|0}while(0);k=0;j=n+j|0;n=0}else{k=B;l=c[k>>2]|0;k=c[k+4>>2]|0;o=Tv(i|0,m|0,l|0,k|0)|0;Yv(o|0,L()|0,v|0,w|0)|0;if(!(n<<24>>24==0&(L()|0)<0)){x=77;break e}n=c[r>>2]|0;l=b;j=0;while(1){k=a[l>>0]|0;l=l+1|0;if(!(j<<24>>24|k))break;else j=k&128}j=l;k=n+q|0;do if(l>>>0<k>>>0){while(1){n=a[l>>0]|0;if(n<<24>>24)break;j=l+1|0;if(j>>>0<k>>>0)l=j;else{x=52;break}}if((x|0)==52){x=0;break}k=n&255;do if(!(k&128)){b=1;k=n&255;j=0}else{o=d[l+1>>0]|0;k=o<<7|k&127;if(!(o&128)){b=2;j=0;break}o=d[l+2>>0]|0;k=o<<14|k&16383;if(!(o&128)){b=3;j=0;break}o=d[l+3>>0]|0;k=o<<21|k&2097151;if(!(o&128)){b=4;j=0;break}n=28;b=l+4|0;k=k&268435455;o=0;do{H=b;b=b+1|0;H=d[H>>0]|0;I=cw(H&127|0,0,n|0)|0;k=Sv(I|0,L()|0,k|0,o|0)|0;o=L()|0;n=n+7|0}while(n>>>0<64&((H&128|0)!=0|0!=0));b=b-j|0;j=o}while(0);k=Yv(k|0,j|0,v|0,w|0)|0;i=Sv(i|0,m|0,k|0,L()|0)|0;m=L()|0;k=C;c[k>>2]=i;c[k+4>>2]=m;k=p;j=l+b|0;n=0;break f}while(0);a[D>>0]=1;k=1;n=1}while(0);c[F>>2]=j;p=k;b=j}}else{if(k)if(!j)i=0;else i=(c[r>>2]|0)>>>0>=l>>>0;else i=1;a[D>>0]=i&1;i=l;while(1){if(!i){if(a[D>>0]|0)break}else{m=C;i=c[m>>2]|0;m=c[m+4>>2]|0;k=B;l=c[k>>2]|0;k=c[k+4>>2]|0;I=Tv(i|0,m|0,l|0,k|0)|0;I=Yv(I|0,L()|0,v|0,w|0)|0;H=L()|0;n=a[D>>0]|0;if(!(n<<24>>24==0&((H|0)>0|(H|0)==0&I>>>0>0))){x=77;break e}}kq(z,c[r>>2]|0,c[b>>2]|0,F,C,E,D);j=c[F>>2]|0;i=j}h=C;i=c[h>>2]|0;h=c[h+4>>2]|0;x=76}while(0);if((x|0)==76){c[s>>2]=j;I=t;c[I>>2]=i;c[I+4>>2]=h;x=78}else if((x|0)==77){x=0;c[s>>2]=j;I=t;c[I>>2]=i;c[I+4>>2]=m;if(!(n<<24>>24==0&((i|0)==(l|0)&(m|0)==(k|0))))x=78}if((x|0)==78){x=0;h=0}e=c[e+12>>2]|0}while((e|0)!=0);if(!h)h=0;else x=81}if((x|0)==81)h=c[A+48>>2]|0;c[F>>2]=h;break a}else h=0}else h=0;while(0);I=h;Ra=G;return I|0}while(0);if(!h){I=0;Ra=G;return I|0}if((a[h>>0]|0)==1){j=h+1|0;c[F>>2]=j;i=a[j>>0]|0;e=i&255;if(e&128){I=d[h+2>>0]|0;i=I<<7|i&127;if(I&128){I=d[h+3>>0]|0;i=I<<14|i&16383;if(I&128){I=d[h+4>>0]|0;i=I<<21|i&2097151;if(!(I&128)){h=i;i=4}else{h=(a[h+5>>0]&7)<<28|i&268435455;i=5}}else{h=i;i=3}}else{h=i;i=2}}else{h=e;i=1}I=j+i|0;c[F>>2]=I;i=h;h=I}else i=0;e=a[h>>0]|0;g:do if((i|0)<(f|0)){while(1){i=e<<24>>24;if(i&254)do{h=h+1|0;I=i;i=a[h>>0]|0}while((i&254|I&128|0)!=0);c[F>>2]=h;if(!(a[h>>0]|0)){h=0;break}j=h+1|0;c[F>>2]=j;e=a[j>>0]|0;i=e&255;if(i&128){I=d[h+2>>0]|0;i=I<<7|e&127;if(I&128){I=d[h+3>>0]|0;i=I<<14|i&16383;if(I&128){I=d[h+4>>0]|0;i=I<<21|i&2097151;if(!(I&128))h=4;else{i=(a[h+5>>0]&7)<<28|i&268435455;h=5}}else h=3}else h=2}else h=1;h=j+h|0;c[F>>2]=h;e=a[h>>0]|0;if((i|0)>=(f|0))break g}Ra=G;return h|0}while(0);if(!(e<<24>>24)){c[F>>2]=0;h=0}c[g>>2]=(i|0)==(f|0)?h:0;I=0;Ra=G;return I|0}function $r(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+16|0;m=p+4|0;n=p;if(!d){Ra=p;return}if(c[e>>2]|0){Ra=p;return}o=c[d+20>>2]|0;if(o|0){g=o+24|0;f=o+28|0;do if(c[g>>2]|0?(h=c[f>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[f>>2]=0;c[o+32>>2]=0;c[g>>2]=0;l=o+40|0;if(c[l>>2]|0){k=o+64|0;j=c[k>>2]|0;if((j|0)>0){h=0;do{f=c[o+72+(h*24|0)+20>>2]|0;if(f|0?(c[f+8>>2]=0,c[f+28>>2]=1,i=c[f+4>>2]|0,(i|0)>0):0){g=c[f>>2]|0;f=0;do{q=g+(f<<2)|0;c[(c[q>>2]|0)+80>>2]=0;q=c[q>>2]|0;c[q+84>>2]=0;q=q+88|0;c[q>>2]=0;c[q+4>>2]=0;f=f+1|0}while((f|0)!=(i|0))}h=h+1|0}while((h|0)<(j|0))}h=c[b>>2]|0;i=o+68|0;a:do if((j|0)>0){g=0;while(1){if(c[o+72+(g*24|0)+20>>2]|0){c[m>>2]=0;c[n>>2]=0;f=jr(h,o+72+(g*24|0)|0,c[i>>2]|0,m,n)|0;if(f|0)break;f=kr(h,o,g,c[n>>2]|0,c[m>>2]|0)|0;if(f|0)break a}g=g+1|0;if((g|0)>=(c[k>>2]|0)){f=0;break a}}}else f=0;while(0);c[l>>2]=0;c[e>>2]=f}c[o+8>>2]=0;q=o+16|0;c[q>>2]=0;c[q+4>>2]=0;c[o+48>>2]=0}q=d+24|0;c[q>>2]=0;c[q+4>>2]=0;a[d+32>>0]=0;a[d+33>>0]=0;$r(b,c[d+12>>2]|0,e);$r(b,c[d+16>>2]|0,e);Ra=p;return}function as(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;h=n;m=_r(c[f>>2]|0,b,c[f+4>>2]|0,h)|0;l=c[(c[b+20>>2]|0)+64>>2]|0;g=c[h>>2]|0;if(!g){i=0;j=0}else{b=a[g>>0]|0;e=b&255;if(e&128){k=d[g+1>>0]|0;e=k<<7|b&127;if(k&128){k=d[g+2>>0]|0;e=k<<14|e&16383;if(k&128){k=d[g+3>>0]|0;e=k<<21|e&2097151;if(!(k&128))b=4;else{e=(a[g+4>>0]&7)<<28|e&268435455;b=5}}else b=3}else b=2}else b=1;j=g+b|0;c[h>>2]=j;i=e+-2|0}if((l|0)<=0){Ra=n;return m|0}k=c[f+24>>2]|0;g=f+8|0;h=l+-1|0;b=c[g>>2]|0;e=0;f=b;while(1){c[k+(f*12|0)+8>>2]=h-e;c[k+(f*12|0)>>2]=j;c[k+(f*12|0)+4>>2]=i;e=e+1|0;if((e|0)==(l|0))break;else f=f+1|0}c[g>>2]=b+l;Ra=n;return m|0}function bs(a,b,d){a=a|0;b=b|0;d=d|0;c[d>>2]=(c[d>>2]|0)+1;c[a+36>>2]=b;return 0}function cs(b){b=b|0;var d=0;d=b+(0-(c[b+-4>>2]|0))|0;if((d+16+4|0)==(b|0))a[d+1>>0]=0;else a[d+2>>0]=0;if(a[d>>0]|0)return;if(a[d+1>>0]|0)return;if(a[d+2>>0]|0)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{b=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function ds(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(a[b+32>>0]|0){n=0;return n|0}while(1){m=b+24|0;h=c[e>>2]|0;n=h+32|0;if(!((c[m>>2]|0)==(c[n>>2]|0)?(c[m+4>>2]|0)==(c[n+4>>2]|0):0)){g=0;f=36;break}f=c[b+12>>2]|0;if(!f){f=7;break}f=ds(f,e)|0;if(f|0){g=f;f=36;break}f=c[b+16>>2]|0;if(!(a[f+32>>0]|0))b=f;else{g=0;f=36;break}}if((f|0)==7){m=c[b+20>>2]|0;f=c[m+28>>2]|0;i=(a[e+24>>0]|0)==121;n=e+4|0;l=c[n>>2]|0;l=G(i?l:(l+31|0)/32|0,c[b+36>>2]|0)|0;m=m+68|0;k=(c[h>>2]|0)+24|0;j=e+28|0;if(i){i=0;while(1){b=a[f>>0]|0;g=b<<24>>24;if(!(g&254)){h=0;e=f}else{b=0;while(1){f=f+1|0;e=g&128;h=(e>>>7^1)+b|0;b=a[f>>0]|0;g=b<<24>>24;if(!(g&254|e)){e=f;break}else b=h}}g=c[m>>2]|0;if((g|0)==(i|0)?1:(g|0)>=(c[k>>2]|0)){c[(c[j>>2]|0)+(i+l<<2)>>2]=h;b=a[e>>0]|0}if(b<<24>>24!=1){g=0;f=36;break}g=e+1|0;f=a[g>>0]|0;b=f&255;if(b&128){i=d[e+2>>0]|0;b=i<<7|f&127;if(i&128){i=d[e+3>>0]|0;b=i<<14|b&16383;if(i&128){i=d[e+4>>0]|0;b=i<<21|b&2097151;if(!(i&128))f=4;else{b=(a[e+5>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;if((b|0)>=(c[n>>2]|0)){g=267;f=36;break}i=b;f=g+f|0}if((f|0)==36)return g|0}else{i=0;while(1){b=a[f>>0]|0;g=b<<24>>24;if(!(g&254)){h=0;e=f}else{b=0;while(1){f=f+1|0;e=g&128;h=(e>>>7^1)+b|0;b=a[f>>0]|0;g=b<<24>>24;if(!(g&254|e)){e=f;break}else b=h}}g=c[m>>2]|0;if(!((h|0)==0|((g|0)!=(i|0)?(g|0)<(c[k>>2]|0):0))){b=(c[j>>2]|0)+(((i+1|0)/32|0)+l<<2)|0;c[b>>2]=c[b>>2]|1<<(i&31);b=a[e>>0]|0}if(b<<24>>24!=1){g=0;f=36;break}g=e+1|0;f=a[g>>0]|0;b=f&255;if(b&128){i=d[e+2>>0]|0;b=i<<7|f&127;if(i&128){i=d[e+3>>0]|0;b=i<<14|b&16383;if(i&128){i=d[e+4>>0]|0;b=i<<21|b&2097151;if(!(i&128))f=4;else{b=(a[e+5>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;if((b|0)>=(c[n>>2]|0)){g=267;f=36;break}i=b;f=g+f|0}if((f|0)==36)return g|0}}else if((f|0)==36)return g|0;return 0}function es(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;w=Ra;Ra=Ra+16|0;s=w;u=c[e>>2]|0;v=(c[e+28>>2]|0)+((G(d*3|0,c[e+4>>2]|0)|0)<<2)|0;f=c[u>>2]|0;if(a[b+34>>0]|0?(c[c[b+8>>2]>>2]|0)!=1:0){b=f+24|0;if((c[b>>2]|0)<=0){v=0;Ra=w;return v|0}e=c[u+64>>2]|0;d=0;do{u=d*3|0;c[v+(u+1<<2)>>2]=e;c[v+(u+2<<2)>>2]=e;d=d+1|0}while((d|0)<(c[b>>2]|0));d=0;Ra=w;return d|0}c[s>>2]=0;t=b+40|0;if(!(c[t>>2]|0)){o=u+32|0;q=o;p=c[q>>2]|0;q=c[q+4>>2]|0;e=c[b+8>>2]|0;a:do if(!e)e=b;else{d=b;while(1){if((c[e>>2]|0)!=1){e=d;break a}d=c[e+8>>2]|0;if(!d)break;else{n=e;e=d;d=n}}}while(0);l=e+24|0;n=l;m=c[n>>2]|0;n=c[n+4>>2]|0;j=e+32|0;k=a[j>>0]|0;b=f+24|0;d=e;do{if((c[d>>2]|0)==5)g=d;else g=c[d+16>>2]|0;f=pb((c[b>>2]|0)*12|0,0)|0;c[g+40>>2]=f;if(!f){h=16;break}gw(f|0,0,(c[b>>2]|0)*12|0)|0;d=c[d+12>>2]|0}while((d|0)!=0);if((h|0)==16){v=7;Ra=w;return v|0}$r(u,e,s);i=u+6|0;d=c[s>>2]|0;b:do if((a[i>>0]|0)==0&(d|0)==0){f=u+7|0;g=u+12|0;h=u+88|0;while(1){if((a[f>>0]|0)==0?(r=c[g>>2]|0,r|0):0){d=c[r>>2]|0;x=r+136|0;y=c[x+4>>2]|0;if((y|0)>0|(y|0)==0&(c[x>>2]|0)>>>0>0)hc(d,r);y=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;x=r+64|0;c[x>>2]=0;c[x+4>>2]=0;if((y|0)==3082|(a[d+81>>0]|0)!=0)og(d)}qr(u,e,s);y=a[j>>0]|0;a[i>>0]=y;a[f>>0]=1;c[h>>2]=1;z=l;d=c[z+4>>2]|0;x=o;c[x>>2]=c[z>>2];c[x+4>>2]=d;if(!((y<<24>>24==0?(c[e>>2]|0)==1:0)?(rr(u,s)|0)!=0:0)){d=c[s>>2]|0;if(d|0)break b;if(a[i>>0]|0){d=0;break b}hs(e,c[b>>2]|0);d=c[s>>2]|0;if(!((d|0)==0&(a[i>>0]|0)==0))break b}}}while(0);a[i>>0]=0;z=o;c[z>>2]=p;c[z+4>>2]=q;if(!(k<<24>>24)){$r(u,e,s);do{qr(u,e,s);z=l;d=c[s>>2]|0}while(((c[z>>2]|0)!=(m|0)?1:(c[z+4>>2]|0)!=(n|0))&(d|0)==0)}else a[j>>0]=k;if(d){z=d;Ra=w;return z|0}}else b=f+24|0;if((c[b>>2]|0)<=0){z=0;Ra=w;return z|0}e=c[t>>2]|0;d=0;do{z=d*3|0;y=z+1|0;c[v+(y<<2)>>2]=c[e+(y<<2)>>2];z=z+2|0;c[v+(z<<2)>>2]=c[e+(z<<2)>>2];d=d+1|0}while((d|0)<(c[b>>2]|0));d=0;Ra=w;return d|0}function fs(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+16|0;l=n;m=e+4|0;k=c[m>>2]|0;j=G(d*3|0,k)|0;if((k|0)<=0){m=0;Ra=n;return m|0}k=e+28|0;i=0;do{d=_r(c[e>>2]|0,b,i,l)|0;g=c[l>>2]|0;if(!g)f=0;else{h=a[g>>0]|0;if(!(h&254))f=0;else{f=0;do{g=g+1|0;o=h&128;f=(o>>>7^1)+f|0;h=a[g>>0]|0}while((h&254|o|0)!=0)}c[l>>2]=g}c[(c[k>>2]|0)+((i*3|0)+j<<2)>>2]=f;i=i+1|0}while((d|0)==0?(i|0)<(c[m>>2]|0):0);Ra=n;return d|0}function gs(a,b,d){a=a|0;b=b|0;d=d|0;c[d+(b<<4)>>2]=a;return 0}function hs(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(!b)return;do{f=c[b+20>>2]|0;a:do if(f|0?(m=c[f+28>>2]|0,m|0):0){l=b+40|0;i=m;f=0;while(1){h=a[i>>0]|0;if((h&255)<2)g=0;else{g=0;j=0;while(1){g=g+((j|0)==0&1)|0;k=i+1|0;i=h&-128;h=a[k>>0]|0;if(!((h&-2|i)<<24>>24)){i=k;break}else{j=i&255;i=k}}}j=c[l>>2]|0;k=f*3|0;h=j+(k+1<<2)|0;c[h>>2]=(c[h>>2]|0)+g;k=j+(k+2<<2)|0;c[k>>2]=(c[k>>2]|0)+((g|0)!=0&1);if(!(a[i>>0]|0))break a;h=i+1|0;g=a[h>>0]|0;f=g&255;if(f&128){k=d[i+2>>0]|0;f=k<<7|g&127;if(k&128){k=d[i+3>>0]|0;f=k<<14|f&16383;if(k&128){k=d[i+4>>0]|0;f=k<<21|f&2097151;if(!(k&128))g=4;else{f=(a[i+5>>0]&7)<<28|f&268435455;g=5}}else g=3}else g=2}else g=1;if((f|0)<(e|0))i=h+g|0;else break}}while(0);hs(c[b+12>>2]|0,e);b=c[b+16>>2]|0}while((b|0)!=0);return}function is(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;x=z;y=z+4|0;c[y>>2]=0;b=td(b,55547)|0;if(b|0){y=b;Ra=z;return y|0}s=e+-3|0;r=f+12|0;a:do if(s){k=(e|0)>3;if(k){f=0;b=0;do{b=b+1+(Eu(c[r+(f<<2)>>2]|0)|0)|0;f=f+1|0}while((f|0)!=(s|0))}else b=0;q=pb(b+(s<<2)|0,0)|0;b=(q|0)==0;b:do if(b|k^1){if(b){f=7;j=0;b=0;m=44;break a}}else{n=q+(s<<2)|0;o=0;while(1){b=r+(o<<2)|0;p=Eu(c[b>>2]|0)|0;c[q+(o<<2)>>2]=n;p=p+1|0;ew(n|0,c[b>>2]|0,p|0)|0;b=a[n>>0]|0;switch(b<<24>>24){case 34:case 39:case 91:case 96:{m=b<<24>>24==91?93:b;f=a[n+1>>0]|0;c:do if(!(f<<24>>24))b=0;else{k=1;b=0;do{l=k+1|0;if(f<<24>>24==m<<24>>24){if((a[n+l>>0]|0)!=m<<24>>24)break c;a[n+b>>0]=m;k=k+2|0}else{a[n+b>>0]=f;k=l}b=b+1|0;f=a[n+k>>0]|0}while(f<<24>>24!=0)}while(0);a[n+b>>0]=0;break}default:{}}o=o+1|0;if((o|0)==(s|0))break b;else n=n+p|0}}while(0);if((e|0)<4){k=50983;l=q;b=q;m=21}else{k=c[q>>2]|0;l=q;b=q;m=21}}else{k=50983;l=0;b=0;m=21}while(0);d:do if((m|0)==21){f=(Eu(k)|0)+1|0;e:do if(((d|0?(t=d+16|0,c[t>>2]|0):0)?(u=Xa[(a[d>>0]<<24>>24==1?154:155)&255](k,f)|0,u=(c[d+12>>2]|0)+-1&u,v=c[t>>2]|0,v|0):0)?(j=c[v+(u<<3)>>2]|0,w=(a[d>>0]|0)==1?79:80,i=c[v+(u<<3)+4>>2]|0,(j|0)!=0&(i|0)!=0):0){while(1){j=j+-1|0;if(!(Za[w&127](c[i+12>>2]|0,c[i+16>>2]|0,k,f)|0))break;i=c[i>>2]|0;if(!((j|0)!=0&(i|0)!=0))break e}i=c[i+8>>2]|0;if(i|0){j=i;i=Ya[c[i+4>>2]&127]((e|0)>4?e+-4|0:0,l+4|0,y)|0;if(i|0){f=i;m=44;break d}if(mb()|0){f=7;m=44;break d}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](20)|0;if(!i){f=7;m=44;break d}}else{i=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;k=59064;f=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&f>>>0>0){e=c[14978]|0;x=Tv(f|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&x>>>0<=e>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){f=7;m=44;break d}f=Wa[c[29352>>2]&127](i)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f};c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=j;c[i+16>>2]=c[y>>2];c[g>>2]=i;i=0;break d}}while(0);c[x>>2]=k;Wp(h,53600,x);f=1;j=0;m=44}while(0);if((m|0)==44){i=c[y>>2]|0;if(!i)i=f;else{Wa[c[j+8>>2]&127](i)|0;i=f}}if(!b){y=i;Ra=z;return y|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);y=i;Ra=z;return y|0}else{y=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);y=i;Ra=z;return y|0}return 0}function js(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[d>>2]|0;a:do if((e|0)>0){f=c[d+4>>2]|0;b=0;while(1){if((a[f+(b*12|0)+5>>0]|0?(c[f+(b*12|0)>>2]|0)==0:0)?(a[f+(b*12|0)+4>>0]|0)==2:0)break;b=b+1|0;if((b|0)>=(e|0))break a}c[d+20>>2]=1;f=c[d+16>>2]|0;c[f+(b<<3)>>2]=1;a[f+(b<<3)+4>>0]=1;g[d+40>>3]=1.0;return 0}while(0);c[d+20>>2]=0;return 0}function ks(a){a=a|0;var b=0;Wa[c[(c[a+12>>2]|0)+8>>2]&127](c[a+16>>2]|0)|0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}\nfunction Xf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+16|0;o=u;t=c[e+20>>2]|0;s=t+16|0;f=a[s>>0]|0;if(f<<24>>24==2){r=c[t>>2]|0;f=c[t+40>>2]|0;if(f|0){e=f;Ra=u;return e|0}do if((c[t+216>>2]|0)==0?(l=t+5|0,(a[l>>0]|0)!=2):0){k=t+24|0;i=c[k>>2]|0;if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](512)|0;if(!f)q=16}else{f=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){p=c[14978]|0;j=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=p>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(f){g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else q=16}if((q|0)==16){c[t+56>>2]=0;e=7;Ra=u;return e|0}gw(f+4|0,0,508)|0;c[f>>2]=i;p=t+56|0;c[p>>2]=f;j=t+64|0;f=c[j>>2]|0;a:do if(!(c[f>>2]|0)){if((a[l>>0]|0)==4){j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[f+4>>2]=1020;c[f>>2]=29896;c[f+8>>2]=-1;c[f+56>>2]=0;c[f+64>>2]=0;c[f+60>>2]=0;q=33;break}do if(!(a[t+12>>0]|0)){c[o>>2]=0;if((c[k>>2]|0)!=0?(m=c[t+60>>2]|0,n=c[m>>2]|0,(n|0)!=0):0){f=Ya[c[n+40>>2]&127](m,20,o)|0;if((f|0)==12){h=2054;i=0;f=c[j>>2]|0;q=29;break}g=(f|0)==0;if(g&(c[o>>2]|0)!=0){f=1032;break a}if(g){g=c[t+172>>2]|0;f=c[j>>2]|0;j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));h=2054;q=30}}else{h=2054;i=0;q=29}}else{i=c[7334]|0;c[o>>2]=0;h=4110;q=29}while(0);if((q|0)==29){g=c[t+172>>2]|0;j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));if(!i)q=30;else{c[f+4>>2]=(i|0)>0?i:1020;c[f>>2]=29896;c[f+8>>2]=i;c[f+56>>2]=h;c[f+64>>2]=g;c[f+60>>2]=r;q=33;break}}if((q|0)==30)f=_a[c[r+24>>2]&127](r,g,f,h&556927,0)|0;if(!f)q=33}else q=33;while(0);if((q|0)==33){c[t+44>>2]=0;f=t+72|0;a[t+19>>0]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;f=of(t)|0;if(!f)break}yf(c[p>>2]|0);c[p>>2]=0;e=f;Ra=u;return e|0}while(0);a[s>>0]=3;m=3}else m=f;n=e+28|0;f=b[n>>1]|0;h=f&65535;if(h&17){g=h&65519;f=g&65535;b[n>>1]=f;if(h&1){f=(g^3)&65535;b[n>>1]=f;g=c[e+12>>2]|0;c[e+36>>2]=0;h=c[g>>2]|0;c[e+32>>2]=h;if(!h){c[g+4>>2]=e;if(a[g+32>>0]|0)a[g+33>>0]=1}else c[h+36>>2]=e;c[g>>2]=e;g=g+8|0;if((f&8)==0&(c[g>>2]|0)==0)c[g>>2]=e}}j=c[t+56>>2]|0;b:do if(j){l=c[e+24>>2]|0;h=l+-1|0;g=c[j>>2]|0;c:do if(h>>>0<g>>>0){i=c[j+8>>2]|0;if(i){k=j;do{g=(h>>>0)/(i>>>0)|0;k=c[k+12+(g<<2)>>2]|0;if(!k)break c;h=h-(G(g,i)|0)|0;i=c[k+8>>2]|0}while((i|0)!=0);j=k;g=c[k>>2]|0}if(g>>>0<4001)if(!(1<<(h&7)&d[j+12+(h>>>3)>>0]))break;else break b;i=h+1|0;g=(h>>>0)%125|0;h=c[j+12+(g<<2)>>2]|0;if(h|0)do{if((h|0)==(i|0))break b;g=((g+1|0)>>>0)%125|0;h=c[j+12+(g<<2)>>2]|0}while((h|0)!=0)}while(0);if(l>>>0>(c[t+28>>2]|0)>>>0){if(m<<24>>24==4)break;f=f|8;b[n>>1]=f;break}f=Yf(e)|0;if(!f){f=b[n>>1]|0;break}else{e=f;Ra=u;return e|0}}while(0);b[n>>1]=f|4;if((c[t+96>>2]|0)>0)h=Ve(e)|0;else h=0;g=t+24|0;f=c[e+24>>2]|0;if((c[g>>2]|0)>>>0>=f>>>0){e=h;Ra=u;return e|0}c[g>>2]=f;e=h;Ra=u;return e|0}function Yf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=Ra;Ra=Ra+16|0;p=t;s=c[e+20>>2]|0;r=s+72|0;h=r;n=c[h>>2]|0;h=c[h+4>>2]|0;o=c[e+4>>2]|0;f=c[s+48>>2]|0;q=s+152|0;g=c[q>>2]|0;if((g|0)>200)do{m=g;g=g+-200|0;f=f+(d[o+g>>0]|0)|0}while((m|0)>400);l=e+28|0;b[l>>1]=b[l>>1]|8;l=s+64|0;g=c[l>>2]|0;m=e+24|0;e=c[m>>2]|0;a[p>>0]=e>>>24;i=p+1|0;a[i>>0]=e>>>16;j=p+2|0;a[j>>0]=e>>>8;k=p+3|0;a[k>>0]=e;g=_a[c[(c[g>>2]|0)+12>>2]&127](g,p,4,n,h)|0;if(g|0){s=g;Ra=t;return s|0}u=c[l>>2]|0;g=c[q>>2]|0;e=Sv(n|0,h|0,4,0)|0;h=L()|0;g=_a[c[(c[u>>2]|0)+12>>2]&127](u,o,g,e,h)|0;if(g|0){u=g;Ra=t;return u|0}n=c[l>>2]|0;o=c[q>>2]|0;o=Sv(e|0,h|0,o|0,((o|0)<0)<<31>>31|0)|0;u=L()|0;a[p>>0]=f>>>24;a[i>>0]=f>>>16;a[j>>0]=f>>>8;a[k>>0]=f;f=_a[c[(c[n>>2]|0)+12>>2]&127](n,p,4,o,u)|0;if(f|0){u=f;Ra=t;return u|0}k=(c[q>>2]|0)+8|0;j=r;k=Sv(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;j=L()|0;l=r;c[l>>2]=k;c[l+4>>2]=j;l=s+44|0;c[l>>2]=(c[l>>2]|0)+1;l=df(c[s+56>>2]|0,c[m>>2]|0)|0;j=c[m>>2]|0;k=s+96|0;g=c[k>>2]|0;if((g|0)>0){i=s+92|0;f=0;h=0;do{e=c[i>>2]|0;if((c[e+(h*48|0)+20>>2]|0)>>>0>=j>>>0){f=df(c[e+(h*48|0)+16>>2]|0,j)|0|f;g=c[k>>2]|0}h=h+1|0}while((h|0)<(g|0))}else f=0;u=f|l;Ra=t;return u|0}function Zf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+4>>2]|0;f=c[d>>2]|0;a[j+19>>0]=0;k=d+8|0;do if(a[k>>0]|0){if((c[f+172>>2]|0)>1){f=j+76|0;if((c[f>>2]|0)==(d|0)?(c[f>>2]=0,e=j+22|0,b[e>>1]=b[e>>1]&-193,e=c[j+72>>2]|0,e|0):0)do{a[e+8>>0]=1;e=c[e+12>>2]|0}while((e|0)!=0);a[k>>0]=1;return}e=j+72|0;f=c[e>>2]|0;if(f|0)while(1){g=f+12|0;do if((c[f>>2]|0)==(d|0)){h=c[g>>2]|0;c[e>>2]=h;if((c[f+4>>2]|0)!=1)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);i=15;break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);i=15;break}else{g=e;f=h}}else{e=g;i=15}while(0);if((i|0)==15){i=0;g=e;f=c[e>>2]|0}if(!f)break;else e=g}e=j+76|0;if((c[e>>2]|0)!=(d|0)){e=j+40|0;f=c[e>>2]|0;if((f|0)==2){d=j+22|0;b[d>>1]=b[d>>1]&-129;c[e>>2]=1;break}}else{c[e>>2]=0;f=j+22|0;b[f>>1]=b[f>>1]&-193;f=j+40|0;e=f;f=c[f>>2]|0}d=f+-1|0;c[e>>2]=d;if(!d)a[j+20>>0]=0}while(0);a[k>>0]=0;if(a[j+20>>0]|0)return;e=j+12|0;f=c[e>>2]|0;if(!f)return;c[e>>2]=0;k=c[f+72>>2]|0;e=c[k+20>>2]|0;Df(k);if(c[(c[e+212>>2]|0)+12>>2]|0)return;switch(a[e+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[e+4>>0]|0))uf(e,0,0)|0;break}default:tf(e)|0}vf(e);return}function _f(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=Ra;Ra=Ra+32|0;k=r;m=r+20|0;j=r+24|0;o=r+16|0;p=r+12|0;if(g>>>0<2)i=0;else{i=g+-2|0;i=i-((i>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+i|0}a:do if((i|0)!=(g|0)?((1073741824/((c[e+32>>2]|0)>>>0)|0)+1|0)!=(g|0):0){n=c[(c[e+12>>2]|0)+56>>2]|0;b:do if((d[n+37>>0]|0)<<16|(d[n+36>>0]|0)<<24|(d[n+38>>0]|0)<<8|(d[n+39>>0]|0)){i=eg(e,g,j,o)|0;if(!i){n=a[j>>0]|0;c:do switch(n<<24>>24){case 1:{c[k>>2]=32306;c[k+4>>2]=66936;c[k+8>>2]=31517;Db(11,32001,k);i=11;break b}case 2:{if(!h){i=fg(e,p,m,g,1)|0;if(i|0)break b;i=c[p>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{q=c[i+20>>2]|0;p=q+120|0;c[p>>2]=(c[p>>2]|0)+-1;q=q+136|0;c[i+16>>2]=c[q>>2];c[q>>2]=i;break}}while(0)}break}default:{i=c[e>>2]|0;i=Za[c[i+204>>2]&127](i,g,m,0)|0;do if(!i){i=c[m>>2]|0;l=c[i+8>>2]|0;j=l+4|0;if((c[j>>2]|0)!=(g|0)){c[l+56>>2]=c[i+4>>2];c[l+72>>2]=i;c[l+52>>2]=e;c[j>>2]=g;a[l+9>>0]=(g|0)==1?100:0}i=(h|0)==0;j=i?2:0;k=i?f:0;d:do if(i){i=fg(e,m,p,k,j)|0;if(!i){i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{m=c[i+20>>2]|0;f=m+120|0;c[f>>2]=(c[f>>2]|0)+-1;m=m+136|0;c[i+16>>2]=c[m>>2];c[m>>2]=i;break}}while(0);i=c[p>>2]|0}else q=30}else do{i=fg(e,m,p,k,j)|0;if(i|0){q=30;break d}i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{s=c[i+20>>2]|0;t=s+120|0;c[t>>2]=(c[t>>2]|0)+-1;s=s+136|0;c[i+16>>2]=c[s>>2];c[s>>2]=i;break}}while(0);i=c[p>>2]|0}while(i>>>0>f>>>0);while(0);if((q|0)==30){do if(l|0){j=c[l+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{t=c[j+20>>2]|0;s=t+120|0;c[s>>2]=(c[s>>2]|0)+-1;t=t+136|0;c[j+16>>2]=c[t>>2];c[t>>2]=j;break}}while(0);break}i=gg(e,l,n,c[o>>2]|0,i,h)|0;do if(l|0){j=c[l+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{t=c[j+20>>2]|0;s=t+120|0;c[s>>2]=(c[s>>2]|0)+-1;t=t+136|0;c[j+16>>2]=c[t>>2];c[t>>2]=j;break}}while(0);if(!i)break c}while(0);break b}}while(0);break a}}else i=101;while(0);t=i;Ra=r;return t|0}while(0);if(h|0){t=0;Ra=r;return t|0}k=1073741824/((c[e+32>>2]|0)>>>0)|0;f=k+1|0;l=e+36|0;i=g;while(1){j=i+-1|0;if((j|0)!=(f|0)){if(j>>>0<2)i=0;else{i=i+-3|0;i=i-((i>>>0)%(((((c[l>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(k|0)?3:2)+i|0}if((i|0)!=(j|0))break}i=j}a[e+19>>0]=1;c[e+44>>2]=j;t=0;Ra=r;return t|0}function $f(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=(e|0)==0;a:while(1){b:do if((d|0)!=(f|0)){if(!k?(c[d+64>>2]|0)!=(e|0):0)break;switch(a[d>>0]|0){case 2:{a[d>>0]=0;break}case 0:{c[d+4>>2]=0;break}default:{j=d+68|0;g=a[j>>0]|0;if(g<<24>>24<=-1)break b;if(g<<24>>24){i=0;do{h=c[(c[d+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{m=c[h+20>>2]|0;n=m+120|0;c[n>>2]=(c[n>>2]|0)+-1;m=m+136|0;c[h+16>>2]=c[m>>2];c[m>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{n=c[g+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[g+16>>2]=c[n>>2];c[n>>2]=g}a[j>>0]=-1;break b}}g=ag(d)|0;if(g|0)break a;j=d+68|0;g=a[j>>0]|0;if(g<<24>>24>-1){if(g<<24>>24){i=0;do{h=c[(c[d+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{n=c[h+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[h+16>>2]=c[n>>2];c[n>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{n=c[g+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[g+16>>2]=c[n>>2];c[n>>2]=g}a[j>>0]=-1}a[d>>0]=3;n=d+1|0;a[n>>0]=a[n>>0]&-15}while(0);d=c[d+24>>2]|0;if(!d){d=0;l=34;break}}if((l|0)==34)return d|0;n=d+1|0;a[n>>0]=a[n>>0]&-15;n=g;return n|0}function ag(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(a[b+69>>0]|0)==0;bg(b);if(!g){f=b+32|0;g=c[f+4>>2]|0;b=b+56|0;c[b>>2]=c[f>>2];c[b+4>>2]=g;b=0;return b|0}f=c[b+44>>2]|0;g=b+56|0;d=g;c[d>>2]=f;c[d+4>>2]=0;d=Sv(f|0,0,17,0)|0;L()|0;f=Sv(f|0,0,16,0)|0;e=L()|0;if(e>>>0>0|(e|0)==0&f>>>0>2147483390){b=7;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](d)|0;if(!d){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0<d>>>0)c[14985]=d;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){h=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=h>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){h=7;return h|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}e=cg(b,0,c[g>>2]|0,d,0)|0;if(!e){e=d+(c[g>>2]|0)|0;f=e+17|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));c[b+16>>2]=d;h=0;return h|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);h=e;return h|0}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);h=e;return h|0}return 0}function bg(f){f=f|0;var g=0,h=0;if(b[f+50>>1]|0)return;g=f+1|0;a[g>>0]=a[g>>0]|2;g=c[f+116>>2]|0;h=(c[g+64>>2]|0)+(e[f+70>>1]<<1)|0;cb[c[g+80>>2]&255](g,(c[g+56>>2]|0)+((d[h>>0]<<8|d[h+1>>0])&e[g+26>>1])|0,f+32|0);return}function cg(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+48|0;z=A+16|0;m=A;w=A+32|0;x=A+28|0;n=c[f+116>>2]|0;v=c[f+20>>2]|0;bg(f);r=c[f+40>>2]|0;p=v+36|0;q=f+48|0;l=e[q>>1]|0;if((r-(c[n+56>>2]|0)|0)>>>0>((c[p>>2]|0)-l|0)>>>0){c[m>>2]=32306;c[m+4>>2]=67944;c[m+8>>2]=31517;Db(11,32001,m);z=11;Ra=A;return z|0}if(l>>>0>g>>>0){o=(h+g|0)>>>0>l>>>0?l-g|0:h;g=r+g|0;l=c[n+72>>2]|0;a:do if(!j){ew(i|0,g|0,o|0)|0;k=0}else{m=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){k=Ve(l)|0;y=13}}else y=9;do if((y|0)==9){k=c[m+40>>2]|0;if(k|0)break a;if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){k=Wf(l)|0;y=13;break}else{k=Xf(l)|0;y=13;break}}while(0);if((y|0)==13?k|0:0)break;ew(g|0,i|0,o|0)|0;k=0}while(0);s=0;h=h-o|0;i=i+o|0}else{s=g-l|0;k=0}do if((k|0)==0&(h|0)!=0){l=c[p>>2]|0;t=l+-4|0;k=e[q>>1]|0;o=r+k|0;o=(d[o+1>>0]|0)<<16|(d[o>>0]|0)<<24|(d[o+2>>0]|0)<<8|(d[o+3>>0]|0);c[w>>2]=o;n=f+1|0;do if(a[n>>0]&4){k=(s>>>0)/(t>>>0)|0;l=c[(c[f+12>>2]|0)+(k<<2)>>2]|0;if(!l)y=28;else{c[w>>2]=l;g=k;m=s-(G(k,t)|0)|0;y=29}}else{g=((l+-5-k+(c[f+44>>2]|0)|0)>>>0)/(t>>>0)|0;m=f+12|0;k=c[m>>2]|0;if(k){l=g<<2;r=(l|0)>(Wa[c[29352>>2]&127](k)|0);k=c[m>>2]|0;if(r)y=23}else y=23;if((y|0)==23){k=sb(k,g<<3,0)|0;if(!k){k=7;break}c[m>>2]=k;l=g<<2}gw(k|0,0,l|0)|0;a[n>>0]=a[n>>0]|4;y=28}while(0);if((y|0)==28)if(!o){k=0;y=55}else{g=0;m=s;l=o;y=29}b:do if((y|0)==29){r=f+12|0;p=(j|0)==0;q=p?2:0;o=g;while(1){k=c[r>>2]|0;c[k+(o<<2)>>2]=l;if(m>>>0<t>>>0){n=(m+h|0)>>>0>t>>>0?t-m|0:h;k=c[v>>2]|0;k=Za[c[k+204>>2]&127](k,l,x,q)|0;do if(!k){g=c[x>>2]|0;l=c[g+4>>2]|0;c[w>>2]=(d[l+1>>0]|0)<<16|(d[l>>0]|0)<<24|(d[l+2>>0]|0)<<8|(d[l+3>>0]|0);l=l+(m+4)|0;c:do if(p){ew(i|0,l|0,n|0)|0;k=0}else{m=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){u=Ve(g)|0;y=46}}else y=42;do if((y|0)==42){y=0;k=c[m+40>>2]|0;if(k|0)break c;if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){u=Wf(g)|0;y=46;break}else{u=Xf(g)|0;y=46;break}}while(0);if((y|0)==46?(y=0,u|0):0){k=u;break}ew(l|0,i|0,n|0)|0;k=0}while(0);l=c[x>>2]|0;if(l)if(!(b[l+28>>1]&32)){Df(l);m=0;break}else{m=c[l+20>>2]|0;j=m+120|0;c[j>>2]=(c[j>>2]|0)+-1;m=m+136|0;c[l+16>>2]=c[m>>2];c[m>>2]=l;m=0;break}else m=0}while(0);h=h-n|0;if(!h)break b;else g=i+n|0}else{k=c[k+(o+1<<2)>>2]|0;if(!k)k=dg(v,l,0,w)|0;else{c[w>>2]=k;k=0}g=i;m=m-t|0}if(k|0){y=55;break b}l=c[w>>2]|0;if(!l){k=0;y=55;break}else{i=g;o=o+1|0}}}while(0);if((y|0)==55)break;z=k;Ra=A;return z|0}while(0);if(!((k|0)==0&(h|0)!=0)){z=k;Ra=A;return z|0}c[z>>2]=32306;c[z+4>>2]=68089;c[z+8>>2]=31517;Db(11,32001,z);z=11;Ra=A;return z|0}function dg(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;o=s;l=s+4|0;do if(a[e+17>>0]|0){m=e+36|0;k=1073741824/((c[e+32>>2]|0)>>>0)|0;p=f;do{i=p;p=p+1|0;if(p>>>0<2)j=0;else{j=i+-1|0;j=j-((j>>>0)%(((((c[m>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;j=((j+1|0)==(k|0)?3:2)+j|0}}while((j|0)==(p|0)|(i|0)==(k|0));if(p>>>0<=(c[e+44>>2]|0)>>>0?(n=eg(e,p,l,o)|0,m=(n|0)==0,q=m&(a[l>>0]|0)==4&(c[o>>2]|0)==(f|0),q|m^1):0){k=0;j=q?101:n;i=q?p:0;break}else{r=9;break}}else r=9;while(0);do if((r|0)==9){i=c[e>>2]|0;i=Za[c[i+204>>2]&127](i,f,o,(g|0)==0?2:0)|0;if(i|0){k=0;j=i;i=0;break}i=c[o>>2]|0;k=c[i+8>>2]|0;j=k+4|0;if((c[j>>2]|0)==(f|0))i=c[k+56>>2]|0;else{r=c[i+4>>2]|0;c[k+56>>2]=r;c[k+72>>2]=i;c[k+52>>2]=e;c[j>>2]=f;a[k+9>>0]=(f|0)==1?100:0;i=r}j=0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0]}while(0);c[h>>2]=i;if(g|0){c[g>>2]=k;h=(j|0)==101;h=h?0:j;Ra=s;return h|0}if(!k){h=(j|0)==101;h=h?0:j;Ra=s;return h|0}i=c[k+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);h=(j|0)==101;h=h?0:j;Ra=s;return h|0}else{h=c[i+20>>2]|0;g=h+120|0;c[g>>2]=(c[g>>2]|0)+-1;h=h+136|0;c[i+16>>2]=c[h>>2];c[h>>2]=i;h=(j|0)==101;h=h?0:j;Ra=s;return h|0}return 0}function eg(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;n=o+16|0;m=o;i=o+28|0;if(f>>>0<2)l=0;else{l=f+-2|0;l=l-((l>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;l=((l+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+l|0}e=c[e>>2]|0;e=Za[c[e+204>>2]&127](e,l,i,0)|0;if(e|0){n=e;Ra=o;return n|0}k=c[i>>2]|0;j=c[k+4>>2]|0;e=(f-l|0)*5|0;i=e+-5|0;if((i|0)<0){do if(k|0)if(!(b[k+28>>1]&32)){Df(k);break}else{n=c[k+20>>2]|0;h=n+120|0;c[h>>2]=(c[h>>2]|0)+-1;n=n+136|0;c[k+16>>2]=c[n>>2];c[n>>2]=k;break}while(0);c[m>>2]=32306;c[m+4>>2]=64247;c[m+8>>2]=31517;Db(11,32001,m);n=11;Ra=o;return n|0}a[g>>0]=a[j+i>>0]|0;if(h|0){m=j+(e+-4)|0;c[h>>2]=(d[m+1>>0]|0)<<16|(d[m>>0]|0)<<24|(d[m+2>>0]|0)<<8|(d[m+3>>0]|0)}do if(k|0)if(!(b[k+28>>1]&32)){Df(k);break}else{m=c[k+20>>2]|0;h=m+120|0;c[h>>2]=(c[h>>2]|0)+-1;m=m+136|0;c[k+16>>2]=c[m>>2];c[m>>2]=k;break}while(0);if(((a[g>>0]|0)+-1&255)<=4){n=0;Ra=o;return n|0}c[n>>2]=32306;c[n+4>>2]=64255;c[n+8>>2]=31517;Db(11,32001,n);n=11;Ra=o;return n|0}function fg(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=Ra;Ra=Ra+160|0;r=Z+144|0;o=Z+128|0;T=Z+112|0;R=Z+96|0;U=Z+80|0;Q=Z+64|0;P=Z+48|0;V=Z+32|0;S=Z+16|0;j=Z;Y=Z+156|0;q=e+12|0;k=c[q>>2]|0;p=e+44|0;W=c[p>>2]|0;O=k+56|0;N=c[O>>2]|0;N=d[N+37>>0]<<16|d[N+36>>0]<<24|d[N+38>>0]<<8|d[N+39>>0];if(N>>>0>=W>>>0){c[j>>2]=32306;c[j+4>>2]=69057;c[j+8>>2]=31517;Db(11,32001,j);f=11;Ra=Z;return f|0}if(!N){i=(a[e+19>>0]|0)==0&1;k=c[k+72>>2]|0;l=c[k+20>>2]|0;if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0))k=W;else{j=Ve(k)|0;X=190}else X=186;do if((X|0)==186){j=c[l+40>>2]|0;if(j|0){f=j;Ra=Z;return f|0}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(k)|0;X=190;break}else{j=Xf(k)|0;X=190;break}}while(0);do if((X|0)==190)if(!j){k=c[p>>2]|0;break}else{f=j;Ra=Z;return f|0}while(0);j=k+1|0;c[p>>2]=j;n=e+32|0;l=1073741824/((c[n>>2]|0)>>>0)|0;if((k|0)==(l|0)){j=k+2|0;c[p>>2]=j}if(a[e+17>>0]|0){if(j>>>0<2)k=0;else{k=j+-2|0;k=k-((k>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(l|0)?3:2)+k|0}if((k|0)==(j|0)){k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,j,Y,i)|0;if(k|0){f=k;Ra=Z;return f|0}k=c[Y>>2]|0;m=c[k+8>>2]|0;l=m+4|0;if((c[l>>2]|0)==(j|0))j=c[m+72>>2]|0;else{c[m+56>>2]=c[k+4>>2];c[m+72>>2]=k;c[m+52>>2]=e;c[l>>2]=j;a[m+9>>0]=(j|0)==1?100:0;j=k}if((b[j+30>>1]|0)>1){j=c[m+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[o>>2]=32306;c[o+4>>2]=65442;c[o+8>>2]=31517;Db(11,32001,o);f=11;Ra=Z;return f|0}a[m>>0]=0;m=m+72|0;j=c[m>>2]|0;l=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0))k=0;else k=Ve(j)|0;else X=212;do if((X|0)==212){k=c[l+40>>2]|0;if(!k)if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){k=Wf(j)|0;break}else{k=Xf(j)|0;break}}while(0);j=c[m>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{X=c[j+20>>2]|0;W=X+120|0;c[W>>2]=(c[W>>2]|0)+-1;X=X+136|0;c[j+16>>2]=c[X>>2];c[X>>2]=j}if(k|0){f=k;Ra=Z;return f|0}k=c[p>>2]|0;j=k+1|0;c[p>>2]=j;if((k|0)==(1073741824/((c[n>>2]|0)>>>0)|0|0)){j=k+2|0;c[p>>2]=j}}}m=c[(c[q>>2]|0)+56>>2]|0;a[m+28>>0]=j>>>24;a[m+29>>0]=j>>>16;a[m+30>>0]=j>>>8;a[m+31>>0]=j;m=c[p>>2]|0;c[g>>2]=m;j=c[e>>2]|0;j=Za[c[j+204>>2]&127](j,m,Y,i)|0;if(j|0){c[f>>2]=0;f=j;Ra=Z;return f|0}j=c[Y>>2]|0;k=c[j+8>>2]|0;l=k+4|0;if((c[l>>2]|0)==(m|0))j=k+72|0;else{c[k+56>>2]=c[j+4>>2];Y=k+72|0;c[Y>>2]=j;c[k+52>>2]=e;c[l>>2]=m;a[k+9>>0]=(m|0)==1?100:0;j=Y}c[f>>2]=k;m=c[j>>2]|0;if((b[m+30>>1]|0)>1){do if(k|0)if(!(b[m+28>>1]&32)){Df(m);break}else{e=c[m+20>>2]|0;Y=e+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;e=e+136|0;c[m+16>>2]=c[e>>2];c[e>>2]=m;break}while(0);c[f>>2]=0;c[r>>2]=32306;c[r+4>>2]=65442;c[r+8>>2]=31517;Db(11,32001,r);f=11;Ra=Z;return f|0}a[k>>0]=0;l=c[m+20>>2]|0;do if((b[m+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[m+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){f=0;Ra=Z;return f|0}else{j=Ve(m)|0;X=241;break}else X=237;while(0);do if((X|0)==237){j=c[l+40>>2]|0;if(!j)if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(m)|0;X=241;break}else{j=Xf(m)|0;X=241;break}else X=243}while(0);do if((X|0)==241)if(j){k=c[f>>2]|0;if(!k)break;else{X=243;break}}else{f=0;Ra=Z;return f|0}while(0);do if((X|0)==243){k=c[k+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);break}else{e=c[k+20>>2]|0;Y=e+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;e=e+136|0;c[k+16>>2]=c[e>>2];c[e>>2]=k;break}}while(0);c[f>>2]=0;f=j;Ra=Z;return f|0}a:do switch(i<<24>>24){case 1:{if(W>>>0<h>>>0)n=0;else{j=eg(e,h,Y,0)|0;if(!j){n=(a[Y>>0]|0)==2&1;break a}f=j;Ra=Z;return f|0}break}case 2:{n=1;break}default:n=0}while(0);k=c[k+72>>2]|0;l=c[k+20>>2]|0;if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0){if(c[l+96>>2]|0){m=Ve(k)|0;X=18}}else X=14;do if((X|0)==14){j=c[l+40>>2]|0;if(j|0){f=j;Ra=Z;return f|0}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){m=Wf(k)|0;X=18;break}else{m=Xf(k)|0;X=18;break}}while(0);if((X|0)==18?m|0:0){f=m;Ra=Z;return f|0}F=c[O>>2]|0;H=N+-1|0;a[F+36>>0]=H>>>24;a[F+37>>0]=H>>>16;a[F+38>>0]=H>>>8;a[F+39>>0]=H;F=e+36|0;H=(h|0)==0;E=i<<24>>24==2;D=e+60|0;C=0;l=0;b:while(1){B=l;x=(l|0)!=0;if(x){k=c[B+56>>2]|0;j=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8;k=k+3|0}else{k=c[O>>2]|0;j=d[k+33>>0]<<16|d[k+32>>0]<<24|d[k+34>>0]<<8;k=k+35|0}i=j|d[k>>0];if(i>>>0>W>>>0){X=25;break}if(C>>>0>N>>>0){X=25;break}C=C+1|0;k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,i,Y,0)|0;if(k|0){X=35;break}j=c[Y>>2]|0;A=c[j+8>>2]|0;k=A+4|0;if((c[k>>2]|0)==(i|0))v=c[A+72>>2]|0;else{c[A+56>>2]=c[j+4>>2];c[A+72>>2]=j;c[A+52>>2]=e;c[k>>2]=i;a[A+9>>0]=(i|0)==1?100:0;v=j}j=A;if((b[v+30>>1]|0)>1){X=31;break}a[A>>0]=0;y=A+56|0;w=c[y>>2]|0;r=w+4|0;s=w+5|0;t=w+6|0;u=w+7|0;z=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0];q=n<<24>>24!=0;c:do if(q|(z|0)!=0){if(z>>>0>(((c[F>>2]|0)>>>2)+-2|0)>>>0){X=49;break b}if(n<<24>>24?(i|0)==(h|0)|E&i>>>0<h>>>0:0){c[g>>2]=i;c[f>>2]=j;j=c[A+72>>2]|0;m=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){I=Ve(j)|0;X=60}}else X=56;do if((X|0)==56){k=c[m+40>>2]|0;if(k|0){X=251;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){I=Wf(j)|0;X=60;break}else{I=Xf(j)|0;X=60;break}}while(0);if((X|0)==60?(X=0,I|0):0){X=248;break b}if(!z){if(!x){X=63;break b}i=B+72|0;j=c[i>>2]|0;m=c[j+20>>2]|0;do if(!(b[j+28>>1]&4))X=68;else{if((c[m+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){X=68;break}if(!(c[m+96>>2]|0))break;J=Ve(j)|0;X=72}while(0);do if((X|0)==68){k=c[m+40>>2]|0;if(k|0){X=252;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){J=Wf(j)|0;X=72;break}else{J=Xf(j)|0;X=72;break}}while(0);if((X|0)==72?(0,J|0):0){X=249;break b}n=c[B+56>>2]|0;k=c[y>>2]|0;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;n=0;k=0;l=i;j=0;X=178;break}s=c[y>>2]|0;p=a[s+8>>0]|0;q=a[s+9>>0]|0;r=a[s+10>>0]|0;s=a[s+11>>0]|0;m=(q&255)<<16|(p&255)<<24|(r&255)<<8|s&255;if(m>>>0>W>>>0){X=75;break b}k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,m,Y,0)|0;if(k|0){X=85;break b}j=c[Y>>2]|0;o=c[j+8>>2]|0;k=o+4|0;if((c[k>>2]|0)==(m|0))j=c[o+72>>2]|0;else{c[o+56>>2]=c[j+4>>2];c[o+72>>2]=j;c[o+52>>2]=e;c[k>>2]=m;a[o+9>>0]=(m|0)==1?100:0}if((b[j+30>>1]|0)>1){X=81;break b}a[o>>0]=0;j=o+72|0;n=c[j>>2]|0;i=c[n+20>>2]|0;m=b[n+28>>1]|0;do if(!(m&4))X=90;else{if((c[i+24>>2]|0)>>>0<(c[n+24>>2]|0)>>>0){X=90;break}if(!(c[i+96>>2]|0))break;K=Ve(n)|0;X=94}while(0);do if((X|0)==90){k=c[i+40>>2]|0;if(k|0){X=96;break b}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){K=Wf(n)|0;X=94;break}else{K=Xf(n)|0;X=94;break}}while(0);if((X|0)==94?(X=0,K|0):0){X=95;break b}w=o+56|0;v=c[w>>2]|0;u=c[y>>2]|0;u=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;a[v>>0]=u;a[v+1>>0]=u>>8;a[v+2>>0]=u>>16;a[v+3>>0]=u>>24;v=c[w>>2]|0;z=z+-1|0;a[v+4>>0]=z>>>24;a[v+5>>0]=z>>>16;a[v+6>>0]=z>>>8;a[v+7>>0]=z;ew((c[w>>2]|0)+8|0,(c[y>>2]|0)+12|0,z<<2|0)|0;j=c[j>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{z=c[j+20>>2]|0;y=z+120|0;c[y>>2]=(c[y>>2]|0)+-1;z=z+136|0;c[j+16>>2]=c[z>>2];c[z>>2]=j}if(!x){X=103;break b}i=B+72|0;j=c[i>>2]|0;m=c[j+20>>2]|0;do if(!(b[j+28>>1]&4))X=108;else{if((c[m+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){X=108;break}if(!(c[m+96>>2]|0))break;L=Ve(j)|0;X=112}while(0);do if((X|0)==108){k=c[m+40>>2]|0;if(k|0){X=254;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){L=Wf(j)|0;X=112;break}else{L=Xf(j)|0;X=112;break}}while(0);if((X|0)==112?(0,L|0):0){X=253;break b}n=c[B+56>>2]|0;a[n>>0]=p;a[n+1>>0]=q;a[n+2>>0]=r;a[n+3>>0]=s;n=0;k=0;l=i;j=0;X=178;break}if(z){d:do if(!H)if(E){k=0;while(1){y=w+((k<<2)+8)|0;if((d[y+1>>0]<<16|d[y>>0]<<24|d[y+2>>0]<<8|d[y+3>>0])>>>0<=h>>>0){i=k;break d}k=k+1|0;if(k>>>0>=z>>>0){i=0;break}}}else{k=(d[w+9>>0]<<16|d[w+8>>0]<<24|d[w+10>>0]<<8|d[w+11>>0])-h|0;if(z>>>0<=1){i=0;break}m=(k|0)>-1?k:(k|0)==-2147483648?2147483647:0-k|0;k=0;i=1;while(1){p=w+((i<<2)+8)|0;p=(d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0])-h|0;p=(p|0)>-1?p:(p|0)==-2147483648?2147483647:0-p|0;o=(p|0)<(m|0);k=o?i:k;i=i+1|0;if((i|0)==(z|0)){i=k;break}else m=o?p:m}}else i=0;while(0);o=w+((i<<2)+8)|0;k=d[o+1>>0]<<16|d[o>>0]<<24|d[o+2>>0]<<8|d[o+3>>0];if(k>>>0>W>>>0){X=124;break b}if((k|0)==(h|0)|q^1|E&k>>>0<h>>>0){c[g>>2]=k;m=c[v+20>>2]|0;do if(!(b[v+28>>1]&4))X=130;else{if((c[m+24>>2]|0)>>>0<(c[v+24>>2]|0)>>>0){X=130;break}if(!(c[m+96>>2]|0))break;M=Ve(v)|0;X=134}while(0);do if((X|0)==130){k=c[m+40>>2]|0;if(k|0){X=256;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){M=Wf(v)|0;X=134;break}else{M=Xf(v)|0;X=134;break}}while(0);if((X|0)==134?(0,M|0):0){X=255;break b}k=z+-1|0;if(i>>>0<k>>>0){X=w+((z<<2)+4)|0;X=d[X>>0]|d[X+1>>0]<<8|d[X+2>>0]<<16|d[X+3>>0]<<24;a[o>>0]=X;a[o+1>>0]=X>>8;a[o+2>>0]=X>>16;a[o+3>>0]=X>>24}a[r>>0]=k>>>24;a[s>>0]=k>>>16;a[t>>0]=k>>>8;a[u>>0]=k;p=c[g>>2]|0;i=c[D>>2]|0;e:do if(!i)k=0;else{k=c[i>>2]|0;if(k>>>0<p>>>0){k=1;break}m=p+-1|0;if(m>>>0>=k>>>0){k=0;break}n=c[i+8>>2]|0;if(n){o=i;do{k=(m>>>0)/(n>>>0)|0;o=c[o+12+(k<<2)>>2]|0;if(!o){k=0;break e}m=m-(G(k,n)|0)|0;n=c[o+8>>2]|0}while((n|0)!=0);i=o;k=c[o>>2]|0}if(k>>>0<4001){k=(1<<(m&7)&d[i+12+(m>>>3)>>0]|0)!=0&1;break}n=m+1|0;k=(m>>>0)%125|0;m=c[i+12+(k<<2)>>2]|0;if(!m){k=0;break}while(1){if((m|0)==(n|0)){k=1;break e}k=((k+1|0)>>>0)%125|0;m=c[i+12+(k<<2)>>2]|0;if(!m){k=0;break}}}while(0);X=c[e>>2]|0;k=Za[c[X+204>>2]&127](X,p,Y,k^1)|0;if(k|0){c[f>>2]=0;n=0;X=176;break}k=c[Y>>2]|0;m=c[k+8>>2]|0;n=m+4|0;if((c[n>>2]|0)==(p|0))k=m+72|0;else{c[m+56>>2]=c[k+4>>2];X=m+72|0;c[X>>2]=k;c[m+52>>2]=e;c[n>>2]=p;a[m+9>>0]=(p|0)==1?100:0;k=X}c[f>>2]=m;if((b[(c[k>>2]|0)+30>>1]|0)>1){do if(m|0){k=c[m+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);break}else{X=c[k+20>>2]|0;A=X+120|0;c[A>>2]=(c[A>>2]|0)+-1;X=X+136|0;c[k+16>>2]=c[X>>2];c[X>>2]=k;break}}while(0);c[f>>2]=0;c[T>>2]=32306;c[T+4>>2]=65442;c[T+8>>2]=31517;Db(11,32001,T);n=0;k=11;X=176;break}a[m>>0]=0;n=c[m+72>>2]|0;i=c[n+20>>2]|0;do if(!(b[n+28>>1]&4))X=166;else{if((c[i+24>>2]|0)>>>0<(c[n+24>>2]|0)>>>0){X=166;break}if(!(c[i+96>>2]|0)){n=0;k=0;X=176;break c}k=Ve(n)|0;X=170}while(0);do if((X|0)==166){k=c[i+40>>2]|0;if(k|0){X=172;break}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){k=Wf(n)|0;X=170;break}else{k=Xf(n)|0;X=170;break}}while(0);if((X|0)==170){X=0;if(!k){n=0;k=0;X=176;break}m=c[f>>2]|0;if(m)X=172}do if((X|0)==172){m=c[m+72>>2]|0;if(!(b[m+28>>1]&32)){Df(m);break}else{X=c[m+20>>2]|0;A=X+120|0;c[A>>2]=(c[A>>2]|0)+-1;X=X+136|0;c[m+16>>2]=c[X>>2];c[X>>2]=m;break}}while(0);c[f>>2]=0;n=0;X=176}else{k=0;X=176}}else{k=0;X=176}}else{m=c[v+20>>2]|0;if((b[v+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[v+24>>2]|0)>>>0:0)if(!(c[m+96>>2]|0))k=w;else{k=Ve(v)|0;X=45}else X=41;do if((X|0)==41){k=c[m+40>>2]|0;if(k|0){X=250;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){k=Wf(v)|0;X=45;break}else{k=Xf(v)|0;X=45;break}}while(0);if((X|0)==45){if(k|0){X=247;break b}k=c[y>>2]|0}c[g>>2]=i;n=(c[O>>2]|0)+32|0;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;c[f>>2]=j;n=0;k=0;j=0;X=176}while(0);if((X|0)==176){X=0;if(l){l=B+72|0;X=178}}do if((X|0)==178){X=0;l=c[l>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{B=c[l+20>>2]|0;A=B+120|0;c[A>>2]=(c[A>>2]|0)+-1;B=B+136|0;c[l+16>>2]=c[B>>2];c[B>>2]=l;break}}while(0);if(!(n<<24>>24)){l=0;X=257;break}else l=j}switch(X|0){case 25:{c[S>>2]=32306;c[S+4>>2]=69113;c[S+8>>2]=31517;Db(11,32001,S);j=l;k=11;break}case 31:{j=c[A+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[V>>2]=32306;c[V+4>>2]=65442;c[V+8>>2]=31517;Db(11,32001,V);j=l;k=11;break}case 35:{j=l;break}case 49:{c[P>>2]=32306;c[P+4>>2]=69142;c[P+8>>2]=31517;Db(11,32001,P);k=11;j=A;X=257;break}case 63:{f=(c[O>>2]|0)+32|0;e=c[y>>2]|0;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;a[f>>0]=e;a[f+1>>0]=e>>8;a[f+2>>0]=e>>16;a[f+3>>0]=e>>24;f=0;Ra=Z;return f|0}case 75:{c[Q>>2]=32306;c[Q+4>>2]=69176;c[Q+8>>2]=31517;Db(11,32001,Q);k=11;j=A;X=257;break}case 81:{j=c[o+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[U>>2]=32306;c[U+4>>2]=65442;c[U+8>>2]=31517;Db(11,32001,U);k=11;j=A;X=257;break}case 85:{j=A;X=257;break}case 95:{m=c[j>>2]|0;k=K;n=m;m=b[m+28>>1]|0;X=96;break}case 103:{f=c[O>>2]|0;a[f+32>>0]=p;a[f+33>>0]=q;a[f+34>>0]=r;a[f+35>>0]=s;f=0;Ra=Z;return f|0}case 124:{c[R>>2]=32306;c[R+4>>2]=69241;c[R+8>>2]=31517;Db(11,32001,R);k=11;j=A;X=257;break}case 247:{j=A;X=257;break}case 248:{k=I;j=A;X=257;break}case 249:{k=J;j=A;X=257;break}case 250:{j=A;X=257;break}case 251:{j=A;X=257;break}case 252:{j=A;X=257;break}case 253:{k=L;j=A;X=257;break}case 254:{j=A;X=257;break}case 255:{k=M;j=A;X=257;break}case 256:{j=A;X=257;break}}do if((X|0)==96){j=A;if(!(m&32)){Df(n);X=257;break}else{X=c[n+20>>2]|0;f=X+120|0;c[f>>2]=(c[f>>2]|0)+-1;X=X+136|0;c[n+16>>2]=c[X>>2];c[X>>2]=n;X=257;break}}while(0);do if((X|0)==257)if(j){j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);j=l;break}else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;j=l;break}}else j=l;while(0);if(!j){f=k;Ra=Z;return f|0}j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);f=k;Ra=Z;return f|0}else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;f=k;Ra=Z;return f|0}return 0}function gg(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=Ra;Ra=Ra+112|0;P=S+88|0;N=S+72|0;L=S+56|0;q=S+40|0;l=S+24|0;M=S;R=S+100|0;H=g+4|0;Q=c[H>>2]|0;F=c[f>>2]|0;if(Q>>>0<3){c[l>>2]=32306;c[l+4>>2]=66838;c[l+8>>2]=31517;Db(11,32001,l);R=11;Ra=S;return R|0}C=c[g+72>>2]|0;D=F+12|0;a:do if(a[D>>0]|0){n=c[C+20>>2]|0;p=C+28|0;if((b[p>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[C+24>>2]|0)>>>0:0){if(!(c[n+96>>2]|0)){O=14;break}l=Ve(C)|0}else O=9;do if((O|0)==9){l=c[n+40>>2]|0;if(l|0)break a;if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){l=Wf(C)|0;break}else{l=Xf(C)|0;break}}while(0);if(!l)O=14}else{p=C+28|0;O=14}while(0);b:do if((O|0)==14){l=b[p>>1]|0;if(l&2){l=Ve(C)|0;if(l|0)break;l=b[p>>1]|0}if((k|0)!=0|(l&8)==0)E=0;else E=c[C+24>>2]|0;b[p>>1]=l&-9;l=F+212|0;n=Ya[c[29436>>2]&127](c[(c[l>>2]|0)+44>>2]|0,j,0)|0;do if(n){l=c[l>>2]|0;k=c[n+4>>2]|0;if(!(c[k>>2]|0)){l=sf(l,j,n)|0;if(!l){A=0;y=0;break}x=l;y=1;l=b[l+30>>1]|0}else{x=l+12|0;c[x>>2]=(c[x>>2]|0)+1;x=k+30|0;l=(b[x>>1]|0)+1<<16>>16;b[x>>1]=l;x=k;y=(k|0)!=0}k=x+28|0;n=b[k>>1]|0;if(l<<16>>16>1){if(!(n&32))Df(x);else{j=c[x+20>>2]|0;i=j+120|0;c[i>>2]=(c[i>>2]|0)+-1;j=j+136|0;c[x+16>>2]=c[j>>2];c[j>>2]=x}c[q>>2]=32306;c[q+4>>2]=57762;c[q+8>>2]=31517;Db(11,32001,q);l=11;break b}b[p>>1]=b[p>>1]|n&8;if(!(a[D>>0]|0)){s=c[x+12>>2]|0;do if(b[k>>1]&2){l=s+8|0;n=x+36|0;k=c[n>>2]|0;if((c[l>>2]|0)==(x|0))c[l>>2]=k;q=c[x+32>>2]|0;r=(q|0)==0;if(r){c[s+4>>2]=k;l=k}else{c[q+36>>2]=k;l=c[n>>2]|0}if(l|0){c[l+32>>2]=q;break}c[s>>2]=q;if(r)a[s+33>>0]=2}while(0);A=s+12|0;c[A>>2]=(c[A>>2]|0)+-1;cb[c[29440>>2]&255](c[s+44>>2]|0,c[x>>2]|0,1);A=x;break}A=(c[F+24>>2]|0)+1|0;l=x+12|0;w=x+24|0;db[c[29444>>2]&127](c[(c[l>>2]|0)+44>>2]|0,c[x>>2]|0,c[w>>2]|0,A);c[w>>2]=A;w=b[k>>1]|0;if((w&10)==10){t=c[l>>2]|0;v=t+8|0;l=c[v>>2]|0;s=x+36|0;k=c[s>>2]|0;if((l|0)==(x|0)){c[v>>2]=k;u=k}else u=l;r=x+32|0;n=c[r>>2]|0;q=(n|0)==0;if(q){c[t+4>>2]=k;l=k}else{c[n+36>>2]=k;l=c[s>>2]|0}do if(!l){c[t>>2]=n;if(q){a[t+33>>0]=2;c[s>>2]=0;c[r>>2]=0;l=t;O=42;break}else{c[s>>2]=0;l=t;O=41;break}}else{c[l+32>>2]=n;n=c[t>>2]|0;c[s>>2]=0;c[r>>2]=n;if(!n){l=t;O=42}else{l=t;O=41}}while(0);if((O|0)==41)c[n+36>>2]=x;else if((O|0)==42){c[t+4>>2]=x;if(a[t+32>>0]|0)a[t+33>>0]=1}c[l>>2]=x;if((w&8)==0&(u|0)==0){c[v>>2]=x;A=x}else A=x}else A=x}else{A=0;y=0}while(0);v=C+24|0;z=c[v>>2]|0;x=C+12|0;db[c[29444>>2]&127](c[(c[x>>2]|0)+44>>2]|0,c[C>>2]|0,z,j);c[v>>2]=j;v=b[p>>1]|0;if((v&10)==10){t=c[x>>2]|0;w=t+8|0;l=c[w>>2]|0;s=C+36|0;k=c[s>>2]|0;if((l|0)==(C|0)){c[w>>2]=k;u=k}else u=l;r=C+32|0;n=c[r>>2]|0;q=(n|0)==0;if(q){c[t+4>>2]=k;l=k}else{c[n+36>>2]=k;l=c[s>>2]|0}do if(!l){c[t>>2]=n;if(q){a[t+33>>0]=2;c[s>>2]=0;c[r>>2]=0;l=t;O=69;break}else{c[s>>2]=0;l=t;O=68;break}}else{c[l+32>>2]=n;n=c[t>>2]|0;c[s>>2]=0;c[r>>2]=n;if(!n){l=t;O=69}else{l=t;O=68}}while(0);if((O|0)==68)c[n+36>>2]=C;else if((O|0)==69){c[t+4>>2]=C;if(a[t+32>>0]|0)a[t+33>>0]=1}c[l>>2]=C;if((v&8)==0&(u|0)==0)c[w>>2]=C}l=v&65535;if(l&17|0?(B=l&65519,b[p>>1]=B,l&1|0):0){k=(B^3)&65535;b[p>>1]=k;l=c[x>>2]|0;c[C+36>>2]=0;n=c[l>>2]|0;c[C+32>>2]=n;if(!n){c[l+4>>2]=C;if(a[l+32>>0]|0)a[l+33>>0]=1}else c[n+36>>2]=C;c[l>>2]=C;l=l+8|0;if((k&8)==0&(c[l>>2]|0)==0)c[l>>2]=C}do if(y&(a[D>>0]|0)!=0){l=A+12|0;v=A+24|0;db[c[29444>>2]&127](c[(c[l>>2]|0)+44>>2]|0,c[A>>2]|0,c[v>>2]|0,z);c[v>>2]=z;v=b[A+28>>1]|0;if((v&10)==10){s=c[l>>2]|0;u=s+8|0;l=c[u>>2]|0;r=A+36|0;p=c[r>>2]|0;if((l|0)==(A|0)){c[u>>2]=p;t=p}else t=l;q=A+32|0;n=c[q>>2]|0;k=(n|0)==0;if(k){c[s+4>>2]=p;l=p}else{c[n+36>>2]=p;l=c[r>>2]|0}do if(!l){c[s>>2]=n;if(k){a[s+33>>0]=2;c[r>>2]=0;c[q>>2]=0;l=s;O=94;break}else{c[r>>2]=0;l=s;O=93;break}}else{c[l+32>>2]=n;n=c[s>>2]|0;c[r>>2]=0;c[q>>2]=n;if(!n){l=s;O=94}else{l=s;O=93}}while(0);if((O|0)==93)c[n+36>>2]=A;else if((O|0)==94){c[s+4>>2]=A;if(a[s+32>>0]|0)a[s+33>>0]=1}c[l>>2]=A;if((v&8)==0&(t|0)==0)c[u>>2]=A}if(!(v&32)){Df(A);break}else{D=c[A+20>>2]|0;C=D+120|0;c[C>>2]=(c[C>>2]|0)+-1;D=D+136|0;c[A+16>>2]=c[D>>2];c[D>>2]=A;break}}while(0);do if(E|0){r=Za[c[F+204>>2]&127](F,E,M,0)|0;if(!r){l=c[M>>2]|0;p=l+28|0;n=b[p>>1]|8;b[p>>1]=n;k=n&65535;if(k&17){o=k&65519;n=o&65535;b[p>>1]=n;if(k&1){b[p>>1]=o^3;n=c[l+12>>2]|0;c[l+36>>2]=0;o=c[n>>2]|0;c[l+32>>2]=o;if(!o){c[n+4>>2]=l;if(a[n+32>>0]|0)a[n+33>>0]=1}else c[o+36>>2]=l;c[n>>2]=l;l=c[M>>2]|0;n=b[l+28>>1]|0}}if(!(n&32))Df(l);else{J=c[l+20>>2]|0;F=J+120|0;c[F>>2]=(c[F>>2]|0)+-1;J=J+136|0;c[l+16>>2]=c[J>>2];c[J>>2]=l}break}if(E>>>0<=(c[F+28>>2]|0)>>>0?(o=c[F+56>>2]|0,J=c[F+208>>2]|0,o|0):0){l=E+-1|0;m=c[o+8>>2]|0;c:do if(!m)O=109;else while(1){n=(l>>>0)/(m>>>0)|0;o=c[o+12+(n<<2)>>2]|0;if(!o)break c;l=l-(G(n,m)|0)|0;m=c[o+8>>2]|0;if(!m){O=109;break}}while(0);do if((O|0)==109){if((c[o>>2]|0)>>>0<4001){j=o+12+(l>>>3)|0;a[j>>0]=(1<<(l&7)^255)&d[j>>0];break}q=o+12|0;ew(J|0,q|0,500)|0;gw(q|0,0,500)|0;q=o+4|0;c[q>>2]=0;p=l+1|0;n=0;do{k=J+(n<<2)|0;l=c[k>>2]|0;if(!((l|0)==0|(l|0)==(p|0))){m=((l+-1|0)>>>0)%125|0;c[q>>2]=(c[q>>2]|0)+1;l=o+12+(m<<2)|0;if(c[l>>2]|0)do{l=m+1|0;m=l>>>0>124?0:l;l=o+12+(m<<2)|0}while((c[l>>2]|0)!=0);c[l>>2]=c[k>>2]}n=n+1|0}while((n|0)!=125)}while(0);c[R>>2]=r;R=r;Ra=S;return R|0}c[R>>2]=r;R=r;Ra=S;return R|0}while(0);c[R>>2]=0;c[H>>2]=j;switch(h<<24>>24){case 1:case 5:{l=hg(g)|0;c[R>>2]=l;if(l|0){R=l;Ra=S;return R|0}if(h<<24>>24==1){R=0;Ra=S;return R|0}break}default:{l=c[g+56>>2]|0;l=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];if(l|0?(ig(f,l,4,j,R),I=c[R>>2]|0,I|0):0){R=I;Ra=S;return R|0}}}l=c[f>>2]|0;l=Za[c[l+204>>2]&127](l,i,M,0)|0;if(l|0){c[R>>2]=l;R=l;Ra=S;return R|0}l=c[M>>2]|0;v=c[l+8>>2]|0;n=v+4|0;if((c[n>>2]|0)==(i|0))w=v+72|0;else{c[v+56>>2]=c[l+4>>2];w=v+72|0;c[w>>2]=l;c[v+52>>2]=f;c[n>>2]=i;a[v+9>>0]=(i|0)==1?100:0}c[R>>2]=0;l=c[w>>2]|0;n=c[l+20>>2]|0;do if((b[l+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[n+96>>2]|0)){c[R>>2]=0;break}else{m=Ve(l)|0;O=152;break}else O=147;while(0);do if((O|0)==147){m=c[n+40>>2]|0;if(m|0){c[R>>2]=m;O=153;break}if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){m=Wf(l)|0;O=152;break}else{m=Xf(l)|0;O=152;break}}while(0);if((O|0)==152?(c[R>>2]=m,m|0):0)O=153;if((O|0)==153){if(!v){R=m;Ra=S;return R|0}l=c[w>>2]|0;if(!(b[l+28>>1]&32)){Df(l);R=m;Ra=S;return R|0}else{R=c[l+20>>2]|0;j=R+120|0;c[j>>2]=(c[j>>2]|0)+-1;R=R+136|0;c[l+16>>2]=c[R>>2];c[R>>2]=l;R=m;Ra=S;return R|0}}d:do if(h<<24>>24==4){l=c[v+56>>2]|0;m=l+1|0;n=l+2|0;o=l+3|0;if((d[m>>0]<<16|d[l>>0]<<24|d[n>>0]<<8|d[o>>0]|0)==(Q|0)){a[l>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;l=0;O=181;break}else{c[L>>2]=32306;c[L+4>>2]=66766;c[L+8>>2]=31517;Db(11,32001,L);l=11;O=181;break}}else{if((a[v>>0]|0)==0?(K=Gf(v)|0,K|0):0){l=K;O=181;break}L=b[v+24>>1]|0;u=L&65535;e:do if(L<<16>>16){n=v+56|0;t=v+26|0;s=v+64|0;o=v+80|0;p=M+16|0;k=M+12|0;q=M+18|0;r=v+52|0;if(h<<24>>24!=3){p=c[n>>2]|0;o=c[s>>2]|0;n=e[t>>1]|0;l=0;while(1){m=o+(l<<1)|0;m=p+((d[m>>0]<<8|d[m+1>>0])&n)|0;if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(Q|0))break;l=l+1|0;if(l>>>0>=u>>>0)break e}a[m>>0]=j>>>24;a[m+1>>0]=j>>>16;a[m+2>>0]=j>>>8;a[m+3>>0]=j;break}l=0;while(1){m=(c[s>>2]|0)+(l<<1)|0;m=(c[n>>2]|0)+((d[m>>0]<<8|d[m+1>>0])&e[t>>1])|0;cb[c[o>>2]&255](v,m,M);if((c[k>>2]|0)>>>0>(e[p>>1]|0)>>>0){m=m+(e[q>>1]|0)|0;if(m>>>0>((c[n>>2]|0)+(c[(c[r>>2]|0)+36>>2]|0)|0)>>>0){O=172;break}m=m+-4|0;if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(Q|0)){O=174;break}}l=l+1|0;if(l>>>0>=u>>>0)break e}if((O|0)==172){c[N>>2]=32306;c[N+4>>2]=66785;c[N+8>>2]=31517;Db(11,32001,N);l=11;O=181;break d}else if((O|0)==174){a[m>>0]=j>>>24;a[m+1>>0]=j>>>16;a[m+2>>0]=j>>>8;a[m+3>>0]=j;break}}else l=0;while(0);if((l|0)==(u|0)){do if(h<<24>>24==5){l=(c[v+56>>2]|0)+((d[v+9>>0]|0)+8)|0;m=l+1|0;n=l+2|0;o=l+3|0;if((d[m>>0]<<16|d[l>>0]<<24|d[n>>0]<<8|d[o>>0]|0)!=(Q|0))break;a[l>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;l=0;O=181;break d}while(0);c[P>>2]=32306;c[P+4>>2]=66803;c[P+8>>2]=31517;Db(11,32001,P);l=11}else l=0;c[R>>2]=l;if(v)O=183}while(0);if((O|0)==181){c[R>>2]=l;O=183}do if((O|0)==183){m=c[w>>2]|0;if(!(b[m+28>>1]&32)){Df(m);break}else{Q=c[m+20>>2]|0;P=Q+120|0;c[P>>2]=(c[P>>2]|0)+-1;Q=Q+136|0;c[m+16>>2]=c[Q>>2];c[Q>>2]=m;break}}while(0);if(l|0){R=l;Ra=S;return R|0}ig(f,j,h,i,R);R=c[R>>2]|0;Ra=S;return R|0}while(0);c[R>>2]=l;R=l;Ra=S;return R|0}function hg(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+48|0;x=B+24|0;t=B;y=B+36|0;u=f+52|0;z=c[u>>2]|0;w=f+4|0;A=c[w>>2]|0;if(!(a[f>>0]|0)){g=Gf(f)|0;c[y>>2]=g;if(g|0){A=g;Ra=B;return A|0}}else c[y>>2]=0;s=b[f+24>>1]|0;k=s&65535;a:do if(!(s<<16>>16))g=f+8|0;else{l=f+56|0;m=f+26|0;n=f+64|0;o=f+80|0;p=t+16|0;q=t+12|0;g=f+8|0;r=f+60|0;s=t+18|0;h=0;j=0;while(1){i=(c[n>>2]|0)+(h<<1)|0;i=(c[l>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[m>>1])|0;do if((j|0)==0?(cb[c[o>>2]&255](f,i,t),v=e[p>>1]|0,(c[q>>2]|0)>>>0>v>>>0):0){j=c[r>>2]|0;if(j>>>0>=i>>>0?j>>>0<(i+v|0)>>>0:0){c[x>>2]=32306;c[x+4>>2]=64569;c[x+8>>2]=31517;Db(11,32001,x);c[y>>2]=11;break}j=i+((e[s>>1]|0)+-4)|0;ig(c[u>>2]|0,d[j+1>>0]<<16|d[j>>0]<<24|d[j+2>>0]<<8|d[j+3>>0],3,c[w>>2]|0,y)}while(0);if(!(a[g>>0]|0))ig(z,d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0],5,A,y);h=h+1|0;if((h|0)==(k|0))break a;j=c[y>>2]|0}}while(0);if(!(a[g>>0]|0)){f=(c[f+56>>2]|0)+((d[f+9>>0]|0)+8)|0;ig(z,d[f+1>>0]<<16|d[f>>0]<<24|d[f+2>>0]<<8|d[f+3>>0],5,A,y)}A=c[y>>2]|0;Ra=B;return A|0}function ig(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+48|0;m=r+32|0;l=r+16|0;j=r;q=r+44|0;if(c[i>>2]|0){Ra=r;return}switch(f|0){case 0:{c[j>>2]=32306;c[j+4>>2]=64184;c[j+8>>2]=31517;Db(11,32001,j);c[i>>2]=11;Ra=r;return}case 1:{k=0;break}default:{k=f+-2|0;k=k-((k>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+k|0}}j=c[e>>2]|0;j=Za[c[j+204>>2]&127](j,k,q,0)|0;if(j|0){c[i>>2]=j;Ra=r;return}n=c[q>>2]|0;a:do if(!(a[c[n+8>>2]>>0]|0)){l=(f-k|0)*5|0;j=l+-5|0;if((j|0)<0){c[m>>2]=32306;c[m+4>>2]=64202;c[m+8>>2]=31517;Db(11,32001,m);c[i>>2]=11;break}f=c[n+4>>2]|0;e=f+j|0;if((a[e>>0]|0)==g<<24>>24?(m=f+(l+-4)|0,(d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(h|0)):0)break;k=c[n+20>>2]|0;do if((b[n+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[n+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[i>>2]=0;break}else{o=Ve(n)|0;p=23;break}else p=18;while(0);do if((p|0)==18){j=c[k+40>>2]|0;if(j|0){c[i>>2]=j;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){o=Wf(n)|0;p=23;break}else{o=Xf(n)|0;p=23;break}}while(0);if((p|0)==23?(c[i>>2]=o,o|0):0)break;a[e>>0]=g;i=f+(l+-4)|0;a[i>>0]=h>>>24;a[i+1>>0]=h>>>16;a[i+2>>0]=h>>>8;a[i+3>>0]=h}else{c[l>>2]=32306;c[l+4>>2]=64197;c[l+8>>2]=31517;Db(11,32001,l);c[i>>2]=11}while(0);j=c[q>>2]|0;if(!j){Ra=r;return}if(!(b[j+28>>1]&32)){Df(j);Ra=r;return}else{q=c[j+20>>2]|0;i=q+120|0;c[i>>2]=(c[i>>2]|0)+-1;q=q+136|0;c[j+16>>2]=c[q>>2];c[q>>2]=j;Ra=r;return}}function jg(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!d){n=0;return n|0}n=d+4|0;g=c[n>>2]|0;c[g+4>>2]=c[d>>2];g=c[g+8>>2]|0;if(!g){n=0;return n|0}k=(f|0)==0;a:while(1){b:do if(k){f=g+16|0;h=c[f>>2]|0;if(h)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);m=58;break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);m=58;break}else m=58}else{l=g+1|0;if(a[l>>0]&1){f=g+16|0;h=c[f>>2]|0;if(!h){m=58;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);m=58;break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);m=58;break}}switch(a[g>>0]|0){case 0:{c[g+4>>2]=0;f=ag(g)|0;if(f|0){k=f;break a}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{o=c[h+20>>2]|0;p=o+120|0;c[p>>2]=(c[p>>2]|0)+-1;o=o+136|0;c[h+16>>2]=c[o>>2];c[o>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}break}case 2:{a[g>>0]=0;f=ag(g)|0;if(f|0){k=f;break a}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}break}default:break b}a[g>>0]=3;a[l>>0]=a[l>>0]&-15}while(0);if((m|0)==58){m=0;c[f>>2]=0;a[g>>0]=4;c[g+4>>2]=e}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}g=c[g+24>>2]|0;if(!g){f=0;m=71;break}}if((m|0)==71)return f|0;a[l>>0]=a[l>>0]&-15;f=c[n>>2]|0;c[f+4>>2]=c[d>>2];f=c[f+8>>2]|0;if(!f){p=k;return p|0}do{g=f+16|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;a[f>>0]=4;c[f+4>>2]=k;j=f+68|0;g=a[j>>0]|0;if(g<<24>>24>-1){if(g<<24>>24){i=0;do{h=c[(c[f+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[f+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{p=c[g+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[g+16>>2]=c[p>>2];c[p>>2]=g}a[j>>0]=-1}f=c[f+24>>2]|0}while((f|0)!=0);f=k;return f|0}function kg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;switch(d|0){case -16:{lg(a,e);return}case -15:case -17:case -7:case -14:case -13:{if(!e)return;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -9:{if((e|0)==0|(c[a+480>>2]|0)!=0)return;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(d|0)return;a=c[e+12>>2]|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -8:{if(!(c[e+4>>2]&16))return;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -11:{if(c[a+480>>2]|0){mg(a,e);return}if(!e)return;if(!((b[e+8>>1]&9216)==0?!(c[e+24>>2]|0):0))Cg(e);a=c[e+32>>2]|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -12:{if(c[a+480>>2]|0)return;a=c[e>>2]|0;f=e+12|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if(d|0)return;d=c[e+8>>2]|0;if(d|0)Wa[c[(c[d>>2]|0)+16>>2]&127](d)|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}f=e;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){f=a+300|0;c[e>>2]=c[f>>2];c[f>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}default:return}}function lg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b+4>>2]|0;a:do if(c[f+4>>2]&16){do if(a|0){d=a+480|0;if(!(c[d>>2]|0)){e=f;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[f>>2]=c[e>>2];c[e>>2]=f}else Xd(a,f);e=14;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);e=12;break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);e=12;break}}else e=12;while(0);if((e|0)==12)if(a){d=a+480|0;e=14}if((e|0)==14){if(c[d>>2]|0){Xd(a,b);return}f=b;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:do if((c[b+24>>2]|0)!=0?(f=c[b+20>>2]|0,(f|0)!=0):0){do if(a|0){d=a+480|0;if(!(c[d>>2]|0)){e=f;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[f>>2]=c[e>>2];c[e>>2]=f}else Xd(a,f);e=15;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);e=13;break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);e=13;break}}else e=13;while(0);if((e|0)==13)if(a){d=a+480|0;e=15}if((e|0)==15){if(c[d>>2]|0){Xd(a,b);return}f=b;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function ng(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;e=a+12|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(d|0)return;d=c[a+8>>2]|0;if(d|0)Wa[c[(c[d>>2]|0)+16>>2]&127](d)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,a);return}e=a;if((c[b+304>>2]|0)>>>0<=e>>>0?(c[b+308>>2]|0)>>>0>e>>>0:0){e=b+300|0;c[a>>2]=c[e>>2];c[e>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function og(b){b=b|0;var d=0;d=b+81|0;if(a[d>>0]|0?(c[b+180>>2]|0)==0:0){a[d>>0]=0;c[b+264>>2]=0;d=b+272|0;c[d>>2]=(c[d>>2]|0)+-1}c[b+64>>2]=7;Ne(b,7);return}function pg(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;N=Ra;Ra=Ra+64|0;C=N+40|0;F=N+32|0;E=N+24|0;D=N+16|0;z=N+8|0;y=N;B=N+48|0;J=c[f>>2]|0;K=f+20|0;if((c[K>>2]|0)!=770837923){M=0;Ra=N;return M|0}M=J+81|0;if(a[M>>0]|0)c[f+40>>2]=7;i=f+196|0;g=c[i>>2]|0;if(g|0){while(1){h=c[g+4>>2]|0;if(!h)break;else g=h}sg(g)|0;c[i>>2]=0;c[f+204>>2]=0}k=f+96|0;h=c[k>>2]|0;a:do if(h|0?(l=f+28|0,j=c[l>>2]|0,(j|0)>0):0){g=0;i=j;while(1){h=c[h+(g<<2)>>2]|0;if(!h)h=i;else{tg(f,h);c[(c[k>>2]|0)+(g<<2)>>2]=0;h=c[l>>2]|0}g=g+1|0;if((g|0)>=(h|0))break a;i=h;h=c[k>>2]|0}}while(0);g=c[f+88>>2]|0;b:do if(g|0?(m=c[f+24>>2]|0,m|0):0){p=g+(m*40|0)|0;k=c[g+32>>2]|0;l=k+480|0;h=(k|0)==0;m=k+304|0;n=k+308|0;o=k+300|0;if(c[l>>2]|0){if(h)while(1){do if(c[g+24>>2]|0?(q=c[g+20>>2]|0,q|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{G=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);g=g+40|0;if(g>>>0>=p>>>0)break b}while(1){do if(c[g+24>>2]|0?(r=c[g+20>>2]|0,r|0):0){if(c[l>>2]|0){Xd(k,r);break}G=r;if((c[m>>2]|0)>>>0<=G>>>0?(c[n>>2]|0)>>>0>G>>>0:0){c[r>>2]=c[o>>2];c[o>>2]=r;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{G=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);g=g+40|0;if(g>>>0>=p>>>0)break b}}if(h)while(1){i=g+8|0;if(!(b[i>>1]&9216)){j=g+24|0;if(c[j>>2]|0){h=c[g+20>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[j>>2]=0}}else Cg(g);b[i>>1]=128;g=g+40|0;if(g>>>0>=p>>>0)break b}do{h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(!(c[l>>2]|0)){G=j;if((c[m>>2]|0)>>>0<=G>>>0?(c[n>>2]|0)>>>0>G>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{G=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else Xd(k,j);while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0}while(g>>>0<p>>>0)}while(0);s=f+200|0;g=c[s>>2]|0;if(g|0)do{c[s>>2]=c[g+4>>2];h=g+80|0;j=g+60|0;i=c[j>>2]|0;k=h+(i*40|0)|0;l=g+64|0;if((c[l>>2]|0)>0){i=0;do{tg(c[g>>2]|0,c[k+(i<<2)>>2]|0);i=i+1|0}while((i|0)<(c[l>>2]|0));i=c[j>>2]|0}c:do if(i|0){r=h+(i*40|0)|0;m=c[g+112>>2]|0;n=m+480|0;i=(m|0)==0;o=m+304|0;p=m+308|0;q=m+300|0;if(c[n>>2]|0){if(i)while(1){do if(c[h+24>>2]|0?(t=c[h+20>>2]|0,t|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{G=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}while(0);h=h+40|0;if(h>>>0>=r>>>0)break c}while(1){d:do if(c[h+24>>2]|0?(u=c[h+20>>2]|0,u|0):0){if(c[n>>2]|0){Xd(m,u);break}i=u;do if((c[o>>2]|0)>>>0<=i>>>0){if((c[p>>2]|0)>>>0<=i>>>0)break;c[u>>2]=c[q>>2];c[q>>2]=u;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{G=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);h=h+40|0;if(h>>>0>=r>>>0)break c}}if(i)while(1){i=h+8|0;if(!(b[i>>1]&9216)){j=h+24|0;if(c[j>>2]|0){k=c[h+20>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{G=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[j>>2]=0}}else Cg(h);b[i>>1]=128;h=h+40|0;if(h>>>0>=r>>>0)break c}do{i=h+8|0;if(!(b[i>>1]&9216)){j=h+24|0;if(c[j>>2]|0){k=c[h+20>>2]|0;e:do if(!(c[n>>2]|0)){l=k;do if((c[o>>2]|0)>>>0<=l>>>0){if((c[p>>2]|0)>>>0<=l>>>0)break;c[k>>2]=c[q>>2];c[q>>2]=k;break e}while(0);if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{G=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(m,k);while(0);c[j>>2]=0}}else Cg(h);b[i>>1]=128;h=h+40|0}while(h>>>0<r>>>0)}while(0);j=c[c[g>>2]>>2]|0;o=g+40|0;h=c[o>>2]|0;f:do if(h|0){k=j+480|0;l=j+304|0;m=j+308|0;n=j+300|0;if(!j)while(1){i=c[h+12>>2]|0;if(i|0)ab[i&127](c[h+8>>2]|0);c[o>>2]=c[h+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[o>>2]|0;if(!h)break f}do{i=c[h+12>>2]|0;if(i|0)ab[i&127](c[h+8>>2]|0);c[o>>2]=c[h+16>>2];do if(!(c[k>>2]|0)){G=h;if((c[l>>2]|0)>>>0<=G>>>0?(c[m>>2]|0)>>>0>G>>>0:0){c[h>>2]=c[n>>2];c[n>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(j,h);while(0);h=c[o>>2]|0}while((h|0)!=0)}while(0);h=c[c[g>>2]>>2]|0;do if(h){if(c[h+480>>2]|0){Xd(h,g);break}G=g;if((c[h+304>>2]|0)>>>0<=G>>>0?(c[h+308>>2]|0)>>>0>G>>>0:0){G=h+300|0;c[g>>2]=c[G>>2];c[G>>2]=g}else H=145}else H=145;while(0);do if((H|0)==145){H=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[s>>2]|0}while((g|0)!=0);n=f+216|0;g=c[n>>2]|0;g:do if(g|0){i=c[f>>2]|0;j=i+480|0;k=i+304|0;l=i+308|0;m=i+300|0;if(!i)while(1){h=c[g+12>>2]|0;if(h|0)ab[h&127](c[g+8>>2]|0);c[n>>2]=c[g+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}g=c[n>>2]|0;if(!g)break g}do{h=c[g+12>>2]|0;if(h|0)ab[h&127](c[g+8>>2]|0);c[n>>2]=c[g+16>>2];do if(!(c[j>>2]|0)){G=g;if((c[k>>2]|0)>>>0<=G>>>0?(c[l>>2]|0)>>>0>G>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else Xd(i,g);while(0);g=c[n>>2]|0}while((g|0)!=0)}while(0);u=f+36|0;if((c[u>>2]|0)>-1){G=f+149|0;if((d[G>>0]|d[G+1>>0]<<8)&512){h=c[f+156>>2]|0;if(h|0?(w=c[f>>2]|0,v=c[w+16>>2]|0,w=c[w+20>>2]|0,(w|0)>0):0){g=0;do{if(((g|0)!=1?1<<g&h|0:0)?(x=c[v+(g<<4)+4>>2]|0,x|0):0)c[(c[x+4>>2]|0)+4>>2]=c[x>>2];g=g+1|0}while((g|0)!=(w|0))}t=f+40|0;h=c[t>>2]|0;i=h&255;h:do switch(i<<24>>24){case 13:case 7:case 9:case 10:{g=d[G>>0]|d[G+1>>0]<<8;if((h&255|0)!=9|(g&256)==0){switch(i<<24>>24){case 7:case 13:{if(g&128){g=2;i=1;break h}break}default:{}}rg(J,516);i=J+444|0;g=c[i>>2]|0;if(g|0){j=J+480|0;k=J+304|0;l=J+308|0;m=J+300|0;do{c[i>>2]=c[g+24>>2];i:do if(!(c[j>>2]|0)){h=g;do if((c[k>>2]|0)>>>0<=h>>>0){if((c[l>>2]|0)>>>0<=h>>>0)break;c[g>>2]=c[m>>2];c[m>>2]=g;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else Xd(J,g);while(0);g=c[i>>2]|0}while((g|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0;g=0;h=c[t>>2]|0;i=1}else{g=0;i=1}break}default:{g=0;i=0}}while(0);if((h|0)==0?(x=f+64|0,w=c[x+4>>2]|0,(w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0):0){c[t>>2]=787;a[f+146>>0]=2;Ag(f,32436,y)}s=J+332|0;h=c[s>>2]|0;if((h|0)>0?(c[J+356>>2]|0)==0:0)H=460;else if((a[J+79>>0]|0)!=0?(c[J+176>>2]|0)==((((d[G>>0]|d[G+1>>0]<<8)&65535)>>>8&1^1)&65535|0):0){if((c[t>>2]|0)!=0?i|(a[f+146>>0]|0)!=3:0){rg(J,0);c[f+44>>2]=0}else H=205;j:do if((H|0)==205){x=c[f>>2]|0;y=x+464|0;x=x+472|0;y=Sv(c[x>>2]|0,c[x+4>>2]|0,c[y>>2]|0,c[y+4>>2]|0)|0;x=L()|0;k:do if((x|0)>0|(x|0)==0&y>>>0>0){c[t>>2]=787;a[f+146>>0]=2;Ag(f,32436,z);if(!((d[G>>0]|d[G+1>>0]<<8)&256)){h=787;break}else g=1;Ra=N;return g|0}else{r=J+356|0;p=c[r>>2]|0;c[r>>2]=0;q=f+124|0;l:do if((h|0)>0){o=0;m:while(1){i=c[(c[p+(o<<2)>>2]|0)+8>>2]|0;do if(i|0){h=c[(c[i>>2]|0)+60>>2]|0;if(!h)break;h=Wa[h&127](i)|0;n=i+8|0;if(c[n>>2]|0){k=c[f>>2]|0;i=c[q>>2]|0;n:do if(i|0){do if(k|0){if(c[k+480>>2]|0){Xd(k,i);break n}j=i;if((c[k+304>>2]|0)>>>0>j>>>0)break;if((c[k+308>>2]|0)>>>0<=j>>>0)break;z=k+300|0;c[i>>2]=c[z>>2];c[z>>2]=i;break n}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{z=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);l=c[n>>2]|0;o:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;p:do if(!k){z=Sv(m|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){i=0;break o}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;H=247;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){z=c[14978]|0;y=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break o}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){i=0;break o}}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0<m>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];H=k+284|0;c[H>>2]=(c[H>>2]|0)+1;H=247;break p}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];H=k+284|0;c[H>>2]=(c[H>>2]|0)+1;H=247;break p}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(k,m,0)|0;H=247}while(0);if((H|0)==247){H=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[q>>2]=i;i=c[n>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{z=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[n>>2]=0}if(h|0)break m}while(0);o=o+1|0;if((o|0)>=(c[s>>2]|0)){H=257;break l}}c[r>>2]=p;H=454}else H=257;while(0);q:do if((H|0)==257){c[r>>2]=p;p=J+20|0;q=J+16|0;o=0;i=0;j=0;while(1){if((o|0)>=(c[p>>2]|0))break;k=c[q>>2]|0;h=c[k+(o<<4)+4>>2]|0;r:do if(!h)h=0;else{if((a[h+8>>0]|0)!=2){h=0;break}j=c[h+4>>2]|0;c[j+4>>2]=c[h>>2];j=c[j>>2]|0;do if((a[k+(o<<4)+8>>0]|0)!=1){if(!(11>>>(d[j+5>>0]|0)&1))break;i=i+((a[j+12>>0]|0)==0&1)|0}while(0);h=c[j+40>>2]|0;if(h|0){j=1;break}if(c[j+216>>2]|0){h=0;j=1;break}k=j+17|0;l=j+13|0;m=j+60|0;n=j+176|0;j=j+180|0;s:while(1){switch(a[k>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:{h=0;j=1;break r}}if(a[l>>0]|0)break;h=c[m>>2]|0;h=Xa[c[(c[h>>2]|0)+28>>2]&255](h,4)|0;switch(h|0){case 0:break s;case 5:break;default:{j=1;break r}}if(!(Wa[c[n>>2]&127](c[j>>2]|0)|0)){h=5;j=1;break r}}a[k>>0]=4;h=0;j=1}while(0);if(!h)o=o+1|0;else{H=454;break q}}do if(j|0){h=c[J+216>>2]|0;if(!h)break;if(Wa[h&127](c[J+212>>2]|0)|0){h=531;break k}}while(0);j=c[c[(c[(c[q>>2]|0)+4>>2]|0)+4>>2]>>2]|0;k=(a[j+15>>0]|0)==0;if(k){h=c[j+168>>2]|0;if(h|0)H=278}else{h=59952;H=278}do if((H|0)==278){if((i|0)<2|((Eu(h)|0)&1073741823|0)==0)break;n=c[J>>2]|0;if(k){h=c[j+168>>2]|0;if(!h){i=0;h=0}else H=320}else{h=59952;H=320}if((H|0)==320)i=(Eu(h)|0)&1073741823;c[D>>2]=h;o=dd(J,32466,D)|0;t:do if(o){j=o+i|0;k=n+32|0;i=0;u:while(1){do if(i|0){if(i>>>0>100){H=327;break u}if((i|0)!=1)break;c[E>>2]=o;Db(13,32496,E)}while(0);Fb(4,D);h=c[D>>2]|0;c[C>>2]=h>>>8;c[C+4>>2]=h&255;Cb(13,j,32511,C)|0;h=Za[c[k>>2]&127](n,o,0,B)|0;l=(h|0)==0;if(l&(c[B>>2]|0)!=0)i=i+1|0;else{H=329;break}}if((H|0)==327){c[F>>2]=o;Db(13,32482,F);Ya[c[n+28>>2]&127](n,o,0)|0;H=330}else if((H|0)==329)if(l)H=330;v:do if((H|0)==330){k=c[n+4>>2]|0;F=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;E=L()|0;if(E>>>0>0|(E|0)==0&F>>>0>2147483390){h=7;break}do if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h){h=7;break v}else m=h}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){F=c[14978]|0;E=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;D=L()|0;c[14768]=((D|0)<0|(D|0)==0&E>>>0<=F>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(!i){h=7;break v}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0<=(c[14987]|0)>>>0){m=i;break}c[14987]=h;m=i}while(0);gw(m|0,0,k|0)|0;h=_a[c[n+24>>2]&127](n,o,m,16406,0)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}h=c[p>>2]|0;w:do if((h|0)>0){l=0;k=0;j=0;x:while(1){i=c[(c[q>>2]|0)+(l<<4)+4>>2]|0;do if(!i)i=k;else{if((a[i+8>>0]|0)!=2){i=k;break}i=c[(c[c[i+4>>2]>>2]|0)+172>>2]|0;if(!i){i=k;break}h=((Eu(i)|0)&1073741823)+1|0;h=_a[c[(c[m>>2]|0)+12>>2]&127](m,i,h,k,j)|0;if(h|0)break x;i=Sv(k|0,j|0,((Eu(i)|0)&1073741823)+1|0,0)|0;j=L()|0;h=c[p>>2]|0}while(0);l=l+1|0;if((l|0)>=(h|0))break w;else k=i}i=c[m>>2]|0;if(i|0){Wa[c[i+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}Ya[c[n+28>>2]&127](n,o,0)|0;if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}while(0);do if(!((Wa[c[(c[m>>2]|0)+48>>2]&127](m)|0)&1024)){h=Xa[c[(c[m>>2]|0)+20>>2]&255](m,2)|0;if(!h)break;i=c[m>>2]|0;if(i|0){Wa[c[i+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}Ya[c[n+28>>2]&127](n,o,0)|0;if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}while(0);i=0;while(1){if((i|0)>=(c[p>>2]|0)){h=0;i=1;break}h=c[(c[q>>2]|0)+(i<<4)+4>>2]|0;if(!h)h=0;else h=cc(h,o)|0;if(!h)i=i+1|0;else{i=0;break}}j=c[m>>2]|0;if(j|0){Wa[c[j+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}if(!i){if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}h=Ya[c[n+28>>2]&127](n,o,1)|0;n=J+480|0;y:do if(!(c[n>>2]|0)){i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;F=J+300|0;c[o>>2]=c[F>>2];c[F>>2]=o;break y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{F=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else Xd(J,o);while(0);if(h|0)break t;h=c[p>>2]|0;if((h|0)>0){j=0;do{i=c[(c[q>>2]|0)+(j<<4)+4>>2]|0;if(i){bc(i,1)|0;h=c[p>>2]|0}j=j+1|0}while((j|0)<(h|0))}m=c[r>>2]|0;if(m|0){c[r>>2]=0;if((c[s>>2]|0)>0){k=0;do{l=c[m+(k<<2)>>2]|0;j=l+8|0;h=c[j>>2]|0;do if(h|0){i=c[(c[h>>2]|0)+64>>2]|0;if(!i)break;Wa[i&127](h)|0}while(0);c[l+20>>2]=0;i=c[l>>2]|0;E=l+12|0;F=(c[E>>2]|0)+-1|0;c[E>>2]=F;z:do if(!F){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break z}h=l;if((c[i+304>>2]|0)>>>0>h>>>0)break;if((c[i+308>>2]|0)>>>0<=h>>>0)break;F=i+300|0;c[l>>2]=c[F>>2];c[F>>2]=l;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{F=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);k=k+1|0}while((k|0)<(c[s>>2]|0))}A:do if(!(c[n>>2]|0)){h=m;do if((c[J+304>>2]|0)>>>0<=h>>>0){if((c[J+308>>2]|0)>>>0<=h>>>0)break;F=J+300|0;c[m>>2]=c[F>>2];c[F>>2]=m;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(J,m);while(0);c[s>>2]=0}break q}while(0);do if(J|0){if(c[J+480>>2]|0){Xd(J,o);break t}i=o;if((c[J+304>>2]|0)>>>0>i>>>0)break;if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else h=7;while(0);H=454;break q}while(0);i=0;while(1){h=c[p>>2]|0;if((i|0)>=(h|0))break;h=c[(c[q>>2]|0)+(i<<4)+4>>2]|0;if(!h)h=0;else h=cc(h,0)|0;if(!h)i=i+1|0;else{H=454;break q}}if((h|0)>0){h=0;do{i=c[(c[q>>2]|0)+(h<<4)+4>>2]|0;if(i|0?(A=bc(i,0)|0,A|0):0){h=A;H=454;break q}h=h+1|0}while((h|0)<(c[p>>2]|0))}m=c[r>>2]|0;if(!m)break;c[r>>2]=0;if((c[s>>2]|0)>0){k=0;do{l=c[m+(k<<2)>>2]|0;j=l+8|0;h=c[j>>2]|0;do if(h|0){i=c[(c[h>>2]|0)+64>>2]|0;if(!i)break;Wa[i&127](h)|0}while(0);c[l+20>>2]=0;i=c[l>>2]|0;E=l+12|0;F=(c[E>>2]|0)+-1|0;c[E>>2]=F;B:do if(!F){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break B}h=l;if((c[i+304>>2]|0)>>>0>h>>>0)break;if((c[i+308>>2]|0)>>>0<=h>>>0)break;F=i+300|0;c[l>>2]=c[F>>2];c[F>>2]=l;break B}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{F=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);k=k+1|0}while((k|0)<(c[s>>2]|0))}C:do if(!(c[J+480>>2]|0)){h=m;do if((c[J+304>>2]|0)>>>0<=h>>>0){if((c[J+308>>2]|0)>>>0<=h>>>0)break;F=J+300|0;c[m>>2]=c[F>>2];c[F>>2]=m;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(J,m);while(0);c[s>>2]=0}while(0);D:do if((H|0)==454){switch(h|0){case 0:break D;case 5:break;default:break k}if(!((d[G>>0]|d[G+1>>0]<<8)&256)){h=5;break k}else g=5;Ra=N;return g|0}while(0);E=J+464|0;H=J+32|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;E=H;F=c[E+4>>2]|0;c[H>>2]=c[E>>2]&-524289;c[H+4>>2]=F;H=J+24|0;c[H>>2]=c[H>>2]&-2;break j}while(0);c[t>>2]=h;rg(J,0);c[f+44>>2]=0}while(0);c[J+456>>2]=0;H=476}else H=460;E:do if((H|0)==460)if(!g)if(!(c[t>>2]|0)){g=1;H=477}else{switch(a[f+146>>0]|0){case 3:{g=1;H=477;break E}case 2:{g=2;H=477;break E}default:{}}rg(J,516);j=J+444|0;h=c[j>>2]|0;if(h|0){k=J+480|0;l=J+304|0;m=J+308|0;n=J+300|0;do{c[j>>2]=c[h+24>>2];F:do if(!(c[k>>2]|0)){i=h;do if((c[l>>2]|0)>>>0<=i>>>0){if((c[m>>2]|0)>>>0<=i>>>0)break;c[h>>2]=c[n>>2];c[n>>2]=h;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{H=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(J,h);while(0);h=c[j>>2]|0}while((h|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0;H=476}else H=477;while(0);if((H|0)==476)if(!g)g=0;else H=477;if((H|0)==477)if(((c[(c[f>>2]|0)+456>>2]|0)!=0?(c[f+48>>2]|0)!=0:0)?(I=Bg(f,g)|0,(I|0)!=0):0){H=c[t>>2]|0;if((H|0)==0|(H&255|0)==19){c[t>>2]=I;h=f+124|0;i=c[h>>2]|0;G:do if(i|0){if(c[J+480>>2]|0){Xd(J,i);break}j=i;do if((c[J+304>>2]|0)>>>0<=j>>>0){if((c[J+308>>2]|0)>>>0<=j>>>0)break;I=J+300|0;c[i>>2]=c[I>>2];c[I>>2]=i;break G}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[h>>2]=0}rg(J,516);j=J+444|0;h=c[j>>2]|0;if(h|0){k=J+480|0;l=J+304|0;m=J+308|0;n=J+300|0;do{c[j>>2]=c[h+24>>2];H:do if(!(c[k>>2]|0)){i=h;do if((c[l>>2]|0)>>>0<=i>>>0){if((c[m>>2]|0)>>>0<=i>>>0)break;c[h>>2]=c[n>>2];c[n>>2]=h;break H}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{I=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(J,h);while(0);h=c[j>>2]|0}while((h|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0}if((d[G>>0]|d[G+1>>0]<<8)&32){h=f+44|0;if((g|0)==2)g=0;else{g=c[h>>2]|0;I=J+104|0;c[I>>2]=(c[I>>2]|0)+g}c[J+100>>2]=g;c[h>>2]=0}}if((c[u>>2]|0)>-1){g=J+168|0;c[g>>2]=(c[g>>2]|0)+-1;g=d[G>>0]|d[G+1>>0]<<8;if(!(g&256)){g=J+176|0;c[g>>2]=(c[g>>2]|0)+-1;g=d[G>>0]|d[G+1>>0]<<8}if(g&512){J=J+172|0;c[J>>2]=(c[J>>2]|0)+-1}}}c[K>>2]=832317811;g=f+40|0;if(!(a[M>>0]|0)){M=(c[g>>2]|0)==5?5:0;Ra=N;return M|0}else{c[g>>2]=7;M=0;Ra=N;return M|0}return 0}function qg(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[d>>2]|0;l=c[d+40>>2]|0;i=d+124|0;if(!(c[i>>2]|0)){d=c[k+260>>2]|0;if(!d){k=k+64|0;c[k>>2]=l;return l|0}f=d+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;k=k+64|0;c[k>>2]=l;return l|0}else{Dg(d);k=k+64|0;c[k>>2]=l;return l|0}}j=k+82|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;h=k+260|0;d=c[h>>2]|0;do if(!d){a:do if(c[k+272>>2]|0){if(!(a[k+81>>0]|0))g=13}else{do if((e[k+276>>1]|0)>=40){d=k+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];g=k+284|0;c[g>>2]=(c[g>>2]|0)+1;g=14;break a}d=k+296|0;f=c[d>>2]|0;if(!f){d=k+292|0;break}else{c[d>>2]=c[f>>2];g=k+284|0;c[g>>2]=(c[g>>2]|0)+1;g=14;break a}}else d=k+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;g=13}while(0);if((g|0)==13){f=_d(k,40,0)|0;g=14}if((g|0)==14?f|0:0){d=f;g=d+40|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(g|0));b[f+8>>1]=1;c[f+32>>2]=k;c[h>>2]=f;d=f;g=17;break}c[h>>2]=0}else g=17;while(0);if((g|0)==17)yc(d,c[i>>2]|0,-1,1,-1)|0;a[j>>0]=(a[j>>0]|0)+-1<<24>>24;k=k+64|0;c[k>>2]=l;return l|0}function rg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+20|0;l=c[m>>2]|0;i=(l|0)>0;if(i){g=c[b+16>>2]|0;f=0;do{h=c[g+(f<<4)+4>>2]|0;if(h|0)c[(c[h+4>>2]|0)+4>>2]=c[h>>2];f=f+1|0}while((f|0)!=(l|0))}if(!(c[b+24>>2]&1))n=0;else n=(a[b+165>>0]|0)==0;if(i){j=b+16|0;k=(n^1)&1;f=0;i=0;h=l;while(1){g=c[(c[j>>2]|0)+(i<<4)+4>>2]|0;if(!g)g=h;else{f=(a[g+8>>0]|0)==2?1:f;ec(g,e,k);g=c[m>>2]|0}i=i+1|0;if((i|0)>=(g|0)){e=f;break}else h=g}}else e=0;f=b+356|0;l=c[f>>2]|0;if(l|0){c[f>>2]=0;j=b+332|0;if((c[j>>2]|0)>0){i=0;do{k=c[l+(i<<2)>>2]|0;g=k+8|0;f=c[g>>2]|0;if(f|0?(o=c[(c[f>>2]|0)+68>>2]|0,o|0):0)Wa[o&127](f)|0;c[k+20>>2]=0;h=c[k>>2]|0;f=k+12|0;m=(c[f>>2]|0)+-1|0;c[f>>2]=m;do if(!m){f=c[g>>2]|0;if(f|0)Wa[c[(c[f>>2]|0)+16>>2]&127](f)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,k);break}m=k;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);i=i+1|0}while((i|0)<(c[j>>2]|0))}do if(!(c[b+480>>2]|0)){o=l;if((c[b+304>>2]|0)>>>0<=o>>>0?(c[b+308>>2]|0)>>>0>o>>>0:0){o=b+300|0;c[l>>2]=c[o>>2];c[o>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(b,l);while(0);c[j>>2]=0}if(n){f=c[b+4>>2]|0;if(f|0)do{o=f+149|0;n=(d[o>>0]|d[o+1>>0]<<8)&-4|1;a[o>>0]=n;a[o+1>>0]=n>>8;f=c[f+8>>2]|0}while((f|0)!=0);$b(b)}n=b+464|0;f=b+32|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=f;o=c[n+4>>2]|0;c[f>>2]=c[n>>2]&-524289;c[f+4>>2]=o;f=c[b+224>>2]|0;if(!f)return;if((e|0)==0?a[b+79>>0]|0:0)return;ab[f&127](c[b+220>>2]|0);return}function sg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=c[a>>2]|0;g=h+96|0;e=c[g>>2]|0;f=h+28|0;a:do if(e|0?(d=c[f>>2]|0,(d|0)>0):0){b=0;while(1){e=c[e+(b<<2)>>2]|0;if(e){tg(h,e);c[(c[g>>2]|0)+(b<<2)>>2]=0;d=c[f>>2]|0}b=b+1|0;if((b|0)>=(d|0))break a;e=c[g>>2]|0}}while(0);c[h+104>>2]=c[a+8>>2];c[h+108>>2]=c[a+52>>2];c[h+88>>2]=c[a+16>>2];c[h+24>>2]=c[a+56>>2];c[g>>2]=c[a+20>>2];c[f>>2]=c[a+44>>2];g=a+32|0;b=c[g+4>>2]|0;i=c[h>>2]|0;j=i+40|0;c[j>>2]=c[g>>2];c[j+4>>2]=b;c[h+44>>2]=c[a+68>>2];c[i+100>>2]=c[a+72>>2];j=h+216|0;b=c[j>>2]|0;if(!b){i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}e=i+480|0;f=i+304|0;g=i+308|0;h=i+300|0;if(!i){do{d=c[b+12>>2]|0;if(d|0)ab[d&127](c[b+8>>2]|0);c[j>>2]=c[b+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{i=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}b=c[j>>2]|0}while((b|0)!=0);i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}do{d=c[b+12>>2]|0;if(d|0)ab[d&127](c[b+8>>2]|0);c[j>>2]=c[b+16>>2];do if(!(c[e>>2]|0)){d=b;if((c[f>>2]|0)>>>0<=d>>>0?(c[g>>2]|0)>>>0>d>>>0:0){c[b>>2]=c[h>>2];c[h>>2]=b;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}else Xd(i,b);while(0);b=c[j>>2]|0}while((b|0)!=0);i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}function tg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if(!d)return;switch(a[d>>0]|0){case 1:{f=c[b>>2]|0;b=d+40|0;d=c[b>>2]|0;if(!d)return;wg(f,d);e=c[d+40>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);do if(f){if(c[f+480>>2]|0){Xd(f,d);break}h=d;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[d>>2]=c[h>>2];c[h>>2]=d}else g=14}else g=14;while(0);do if((g|0)==14)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;return}case 0:{if(!(a[d+5>>0]&1)){vg(c[d+40>>2]|0);return}b=c[d+8>>2]|0;if(!b)return;ug(b);return}case 2:{h=c[d+40>>2]|0;f=c[h>>2]|0;g=c[f>>2]|0;f=f+4|0;c[f>>2]=(c[f>>2]|0)+-1;Wa[c[g+28>>2]&127](h)|0;return}default:return}}function ug(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=c[b+4>>2]|0;c[i+4>>2]=c[b>>2];d=c[i+8>>2]|0;if(d|0)do{e=d;d=c[d+24>>2]|0;if((c[e+8>>2]|0)==(b|0))vg(e)}while((d|0)!=0);ec(b,0,0);a:do if(a[b+9>>0]|0){e=i+64|0;f=c[e>>2]|0;c[e>>2]=f+-1;if((f|0)<2){d=c[14822]|0;if((d|0)==(i|0)){c[14822]=c[i+68>>2];h=15;break}if(!d)h=15;else{while(1){e=c[d+68>>2]|0;if((e|0)==(i|0))break;if(!e){h=15;break a}else d=e}c[d+68>>2]=c[i+68>>2];h=15}}}else h=15;while(0);do if((h|0)==15){Te(c[i>>2]|0,c[b>>2]|0);e=c[i+52>>2]|0;d=i+48|0;if(e){f=c[d>>2]|0;if(f|0){ab[e&127](f);h=18}}else h=18;do if((h|0)==18?(g=c[d>>2]|0,g|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{f=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);f=i+80|0;d=c[f>>2]|0;if(d|0){e=d+-4|0;c[f>>2]=e;d=e;do if((c[14816]|0)>>>0<=d>>>0)if((c[14817]|0)>>>0>d>>>0){c[14979]=(c[14979]|0)+-1;c[e>>2]=c[14819];c[14819]=e;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;break}else{d=Wa[c[29352>>2]&127](e)|0;h=28;break}else{d=Wa[c[29352>>2]&127](e)|0;h=28}while(0);do if((h|0)==28){c[14980]=(c[14980]|0)-d;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[f>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);e=c[b+28>>2]|0;d=b+24|0;if(e|0)c[e+24>>2]=c[d>>2];d=c[d>>2]|0;if(d|0)c[d+28>>2]=e;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{i=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function vg(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=d+8|0;e=c[m>>2]|0;if(!e)return;i=c[d+20>>2]|0;c[(c[e+4>>2]|0)+4>>2]=c[e>>2];f=i+8|0;e=c[f>>2]|0;a:do if((e|0)==(d|0))c[f>>2]=c[d+24>>2];else{while(1){f=c[e+24>>2]|0;if((f|0)==(d|0))break;if(!f)break a;else e=f}c[e+24>>2]=c[d+24>>2]}while(0);h=d+68|0;e=a[h>>0]|0;if(e<<24>>24>-1){if(e<<24>>24){g=0;do{f=c[(c[d+120+(g<<2)>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32)){Df(f);e=a[h>>0]|0}else{n=c[f+20>>2]|0;o=n+120|0;c[o>>2]=(c[o>>2]|0)+-1;n=n+136|0;c[f+16>>2]=c[n>>2];c[n>>2]=f}g=g+1|0}while((g|0)<(e<<24>>24|0))}e=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[e+28>>1]&32))Df(e);else{o=c[e+20>>2]|0;n=o+120|0;c[n>>2]=(c[n>>2]|0)+-1;o=o+136|0;c[e+16>>2]=c[o>>2];c[o>>2]=e}a[h>>0]=-1}if(((a[i+20>>0]|0)==0?(j=i+12|0,k=c[j>>2]|0,k|0):0)?(c[j>>2]=0,o=c[k+72>>2]|0,l=c[o+20>>2]|0,Df(o),(c[(c[l+212>>2]|0)+12>>2]|0)==0):0){switch(a[l+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[l+4>>0]|0))uf(l,0,0)|0;break}default:tf(l)|0}vf(l)}e=c[d+12>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{o=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[d+16>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{o=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[m>>2]=0;return}function wg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=e+20|0;l=c[k>>2]|0;do if(l|0){if((c[l>>2]|0)>0){m=l+12|0;j=0;do{h=c[m>>2]|0;i=h+(j*56|0)|0;g=c[h+(j*56|0)+28>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=c[h+(j*56|0)+36>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=c[h+(j*56|0)+48>>2]|0;do if(g|0){xg(c[g+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(g|0));j=j+1|0}while((j|0)<(c[l>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{p=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[k>>2]=0;k=e+59|0;if(a[k>>0]|0){l=(b|0)==0;m=b+480|0;n=b+304|0;o=b+308|0;p=b+300|0;j=0;do{i=e+64+(j*72|0)|0;g=c[e+64+(j*72|0)+12>>2]|0;do if(g|0){if(!l){if(c[m>>2]|0){Xd(b,g);break}h=g;if((c[n>>2]|0)>>>0<=h>>>0?(c[o>>2]|0)>>>0>h>>>0:0){c[g>>2]=c[p>>2];c[p>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{h=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[e+64+(j*72|0)+16>>2]|0;if(g|0)do{h=g;g=c[g+4>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);g=c[e+64+(j*72|0)+40>>2]|0;do if(g|0){h=c[g>>2]|0;if(h|0){Wa[c[h+4>>2]&127](g)|0;c[g>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[e+64+(j*72|0)+56>>2]|0;do if(g|0){h=c[g>>2]|0;if(h|0){Wa[c[h+4>>2]&127](g)|0;c[g>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(g|0));c[e+64+(j*72|0)+8>>2]=e;j=j+1|0}while(j>>>0<(d[k>>0]|0)>>>0)}h=e+36|0;if((c[e+40>>2]|0)==0?(f=c[h>>2]|0,f|0):0)do{g=f;f=c[f+4>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[h>>2]=0;c[e+44>>2]=0;a[e+56>>0]=0;c[e+48>>2]=0;c[e+8>>2]=0;f=e+32|0;g=c[f>>2]|0;if(!g){c[f>>2]=0;return}if(b|0){if(c[b+480>>2]|0){Xd(b,g);c[f>>2]=0;return}q=g;if((c[b+304>>2]|0)>>>0<=q>>>0?(c[b+308>>2]|0)>>>0>q>>>0:0){q=b+300|0;c[g>>2]=c[q>>2];c[q>>2]=g;c[f>>2]=0;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[f>>2]=0;return}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[f>>2]=0;return}}function xg(a){a=a|0;var b=0,d=0;if(!a)return;if((c[a>>2]|0)>0){d=a+12|0;b=0;do{yg((c[d>>2]|0)+(b*56|0)|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function yg(a){a=a|0;var b=0,d=0;b=c[a+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+36>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);zg(c[a+48>>2]|0);b=a;a=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function zg(a){a=a|0;var b=0;if(!a)return;xg(c[a+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function Ag(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+112|0;h=n+16|0;l=n+88|0;k=n;f=c[b>>2]|0;m=b+124|0;g=c[m>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}j=g;if((c[f+304>>2]|0)>>>0<=j>>>0?(c[f+308>>2]|0)>>>0>j>>>0:0){j=f+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[k>>2]=e;j=c[b>>2]|0;g=c[j+108>>2]|0;i=l+4|0;c[i>>2]=h;c[l>>2]=j;c[l+8>>2]=70;f=l+12|0;c[f>>2]=g;g=l+16|0;c[g>>2]=0;h=l+20|0;a[h>>0]=0;e=l+21|0;a[e>>0]=1;tb(l,d,k);b=c[i>>2]|0;if(((b|0)!=0?(a[b+(c[g>>2]|0)>>0]=0,(c[f>>2]|0)!=0):0)?(a[e>>0]&4)==0:0)f=$d(l)|0;else f=c[i>>2]|0;if((a[h>>0]|0)!=7){c[m>>2]=f;Ra=n;return}b=j+81|0;if(a[b>>0]|0){c[m>>2]=f;Ra=n;return}if(a[j+82>>0]|0){c[m>>2]=f;Ra=n;return}a[b>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;b=j+272|0;c[b>>2]=(c[b>>2]|0)+1;b=c[j+236>>2]|0;if(!b){c[m>>2]=f;Ra=n;return}c[b+12>>2]=7;c[m>>2]=f;Ra=n;return}function Bg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=c[e>>2]|0;q=e+48|0;r=c[q>>2]|0;s=r+-1|0;p=t+20|0;h=c[p>>2]|0;if((h|0)>0){n=t+16|0;o=(r|0)<1;if((f|0)==2){l=0;g=0;do{k=c[(c[n>>2]|0)+(l<<4)+4>>2]|0;if(k){i=k+8|0;do if((a[i>>0]|0)==2){j=c[k+4>>2]|0;c[j+4>>2]=c[k>>2];h=c[j+8>>2]|0;if(h|0?(m=$f(h,0,0)|0,m|0):0){h=m;break}h=wf(c[j>>2]|0,2,s)|0;if(!h){if(o?b[j+22>>1]&16:0)c[j+44>>2]=0;h=Rf(j)|0;u=c[(c[j+12>>2]|0)+56>>2]|0;c[j+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0];if(!h)if((a[i>>0]|0)==2){i=c[k+4>>2]|0;c[i+4>>2]=c[k>>2];h=wf(c[i>>2]|0,1,s)|0;if(!h){if(o?b[i+22>>1]&16:0)c[i+44>>2]=0;h=Rf(i)|0;u=c[(c[i+12>>2]|0)+56>>2]|0;c[i+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0]}}else h=0}}else h=0;while(0);g=(g|0)==0?h:g;h=c[p>>2]|0}l=l+1|0}while((l|0)<(h|0))}else{k=0;g=0;do{i=c[(c[n>>2]|0)+(k<<4)+4>>2]|0;if(i){if((a[i+8>>0]|0)==2){j=c[i+4>>2]|0;c[j+4>>2]=c[i>>2];h=wf(c[j>>2]|0,1,s)|0;if(!h){if(o?b[j+22>>1]&16:0)c[j+44>>2]=0;h=Rf(j)|0;u=c[(c[j+12>>2]|0)+56>>2]|0;c[j+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0]}}else h=0;g=(g|0)==0?h:g;h=c[p>>2]|0}k=k+1|0}while((k|0)<(h|0))}u=t+456|0;c[u>>2]=(c[u>>2]|0)+-1;c[q>>2]=0;if(!g)h=33;else h=76}else{h=t+456|0;c[h>>2]=(c[h>>2]|0)+-1;c[q>>2]=0;h=33}a:do if((h|0)==33){o=t+356|0;b:do if((f|0)==2){if(!(c[o>>2]|0)){g=0;break a}n=t+332|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break b;l=c[(c[o>>2]|0)+(m<<2)>>2]|0;g=c[c[l+4>>2]>>2]|0;j=l+8|0;i=c[j>>2]|0;do if((i|0)!=0?(c[g>>2]|0)>1:0){k=l+12|0;h=(c[k>>2]|0)+1|0;c[k>>2]=h;g=c[g+88>>2]|0;if((g|0)!=0?(c[l+20>>2]|0)>=(r|0):0){g=Xa[g&255](i,s)|0;h=c[k>>2]|0}else g=0;i=c[l>>2]|0;u=h+-1|0;c[k>>2]=u;if(!u){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,l);break}u=l;if((c[i+304>>2]|0)>>>0<=u>>>0?(c[i+308>>2]|0)>>>0>u>>>0:0){u=i+300|0;c[l>>2]=c[u>>2];c[u>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else g=0;while(0);if(!g)m=m+1|0;else{h=76;break a}}}while(0);if(!(c[o>>2]|0)){g=0;h=76}else{n=t+332|0;m=0;while(1){if((m|0)>=(c[n>>2]|0)){g=0;h=76;break a}l=c[(c[o>>2]|0)+(m<<2)>>2]|0;g=c[c[l+4>>2]>>2]|0;j=l+8|0;i=c[j>>2]|0;do if((i|0)!=0?(c[g>>2]|0)>1:0){k=l+12|0;h=(c[k>>2]|0)+1|0;c[k>>2]=h;g=c[g+84>>2]|0;if((g|0)!=0?(c[l+20>>2]|0)>=(r|0):0){g=Xa[g&255](i,s)|0;h=c[k>>2]|0}else g=0;i=c[l>>2]|0;u=h+-1|0;c[k>>2]=u;if(!u){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,l);break}u=l;if((c[i+304>>2]|0)>>>0<=u>>>0?(c[i+308>>2]|0)>>>0>u>>>0:0){u=i+300|0;c[l>>2]=c[u>>2];c[u>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else g=0;while(0);if(!g)m=m+1|0;else{h=76;break}}}}while(0);if((h|0)==76)if((f|0)!=2){u=g;return u|0}s=e+72|0;u=c[s+4>>2]|0;f=t+464|0;c[f>>2]=c[s>>2];c[f+4>>2]=u;f=e+80|0;e=c[f+4>>2]|0;u=t+472|0;c[u>>2]=c[f>>2];c[u+4>>2]=e;u=g;return u|0}function Cg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;if(b[a+8>>1]&9216)Dg(a);e=a+24|0;if(!(c[e>>2]|0)){g=a+16|0;c[g>>2]=0;return}f=c[a+32>>2]|0;d=c[a+20>>2]|0;do if(f){if(c[f+480>>2]|0){Xd(f,d);break}h=d;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[d>>2]=c[h>>2];c[h>>2]=d}else g=10}else g=10;while(0);do if((g|0)==10?d|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[e>>2]=0;h=a+16|0;c[h>>2]=0;return}function Dg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+80|0;h=k+40|0;i=k;j=a+8|0;d=b[j>>1]|0;if(d&8192){e=c[a>>2]|0;f=h+12|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;f=i;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));b[i+8>>1]=1;d=a+32|0;c[i+32>>2]=c[d>>2];c[h>>2]=i;c[h+8>>2]=a;c[h+4>>2]=e;ab[c[e+20>>2]&127](h);do if((c[a+24>>2]|0)>0){d=c[d>>2]|0;e=c[a+20>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);f=a;d=i;g=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(g|0));d=b[j>>1]|0}if(!(d&1024)){b[j>>1]=1;Ra=k;return}ab[c[a+36>>2]&127](c[a+16>>2]|0);b[j>>1]=1;Ra=k;return}function Eg(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=d+24|0;h=(c[p>>2]|0)>0;if((g|0)!=0&h?(m=d+16|0,j=c[m>>2]|0,k=d+20|0,(j|0)==(c[k>>2]|0)):0){l=c[d+32>>2]|0;g=((f|0)<0)<<31>>31;i=(j|0)==0;a:do if(!i){h=j;if(((c[l+304>>2]|0)>>>0<=h>>>0?(c[l+308>>2]|0)>>>0>h>>>0:0)?!(0<g>>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0<f>>>0:0)):0){h=j;break}h=Zd(l,j,f,g)|0;if(!(i|(h|0)!=0)){if(c[l+480>>2]|0){Xd(l,j);h=0;break}f=j;if((c[l+304>>2]|0)>>>0<=f>>>0?(c[l+308>>2]|0)>>>0>f>>>0:0){h=l+300|0;c[j>>2]=c[h>>2];c[h>>2]=j;h=0;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);h=0;break}else{h=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);h=0;break}}}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){h=0;break}}else{do if(!(0<g>>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0<f>>>0:0))){i=l+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=l+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}i=l+296|0;h=c[i>>2]|0;if(!h){h=l+292|0;break}else{c[i>>2]=c[h>>2];f=l+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,f,g)|0}while(0);c[k>>2]=h;c[m>>2]=h;j=0}else{j=d+32|0;do if(h){h=c[j>>2]|0;i=c[d+20>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,i);break}m=i;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);j=c[j>>2]|0;k=((f|0)<0)<<31>>31;b:do if(!j){m=Sv(f|0,k|0,-1,-1)|0;l=L()|0;if(!(l>>>0>0|(l|0)==0&m>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;break}j=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0<f>>>0)c[14985]=f;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){f=c[14978]|0;m=Tv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=f>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(i){h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;h=i}else h=i}else h=0}else h=0}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){h=0;break}}else{do if(!(0<k>>>0|(0==(k|0)?(e[j+276>>1]|0)>>>0<f>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=j+284|0;c[f>>2]=(c[f>>2]|0)+1;break b}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];f=j+284|0;c[f>>2]=(c[f>>2]|0)+1;break b}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,f,k)|0}while(0);k=d+20|0;c[k>>2]=h;j=g}if(!h){h=d+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else Dg(d);c[d+16>>2]=0;c[p>>2]=0;d=7;return d|0}i=c[d+32>>2]|0;if(((i|0)!=0?(n=h,(c[i+304>>2]|0)>>>0<=n>>>0):0)?(c[i+308>>2]|0)>>>0>n>>>0:0)h=e[i+276>>1]|0;else h=Wa[c[29352>>2]&127](h)|0;c[p>>2]=h;if(j|0?(o=c[d+16>>2]|0,o|0):0)ew(c[k>>2]|0,o|0,c[d+12>>2]|0)|0;j=d+8|0;h=b[j>>1]|0;if(!(h&1024))i=d+16|0;else{i=d+16|0;ab[c[d+36>>2]&127](c[i>>2]|0);h=b[j>>1]|0}c[i>>2]=c[k>>2];b[j>>1]=h&-7169;d=0;return d|0}function Fg(a,b){a=a|0;b=b|0;if(!(Gg(a,b)|0)){b=0;return b|0}b=c[a+12>>2]|0;return b|0}function Gg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=e+8|0;g=b[l>>1]|0;h=g&65535;if(h&18){do if(h&16384){i=e+12|0;h=(c[e>>2]|0)+(c[i>>2]|0)|0;if((h|0)<1)if(!(g&16))break;else g=1;else g=h;if(!(Eg(e,g,1)|0)){gw((c[e+16>>2]|0)+(c[i>>2]|0)|0,0,c[e>>2]|0)|0;c[i>>2]=(c[i>>2]|0)+(c[e>>2]|0);g=b[l>>1]&-16897;b[l>>1]=g;break}else{f=0;return f|0}}while(0);b[l>>1]=g|2;g=e+10|0;h=f&255;i=h&247;if((i|0)!=(d[g>>0]|0))Ig(e,i&255)|0;if(h&8|0?(k=e+16|0,c[k>>2]&1|0):0){h=b[l>>1]|0;i=h&65535;do if(i&18){do if(i&16384){j=e+12|0;i=(c[e>>2]|0)+(c[j>>2]|0)|0;if((i|0)<1)if(!(h&16))break;else h=1;else h=i;if(!(Eg(e,h,1)|0)){gw((c[k>>2]|0)+(c[j>>2]|0)|0,0,c[e>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[e>>2]|0);h=b[l>>1]&-16897;b[l>>1]=h;break}else{f=0;return f|0}}while(0);if(c[e+24>>2]|0?(c[k>>2]|0)==(c[e+20>>2]|0):0)break;if(!(Jg(e)|0)){h=b[l>>1]|0;break}else{f=0;return f|0}}while(0);b[l>>1]=h&-4097}if((b[l>>1]&514)==2)Jg(e)|0}else{Hg(e,f,0)|0;g=e+10|0}if((a[g>>0]|0)!=(f&-9)<<24>>24){f=0;return f|0}f=c[e+16>>2]|0;return f|0}function Hg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+16|0;m=n+8|0;l=n;j=d+8|0;k=b[j>>1]|0;do if((c[d+24>>2]|0)<32){if(!(Eg(d,32,0)|0)){i=d+16|0;h=i;i=c[i>>2]|0;break}a[d+10>>0]=0;m=7;Ra=n;return m|0}else{i=c[d+20>>2]|0;h=d+16|0;c[h>>2]=i;b[j>>1]=k&13}while(0);if(!(k&4)){g[m>>3]=+g[d>>3];Cb(32,i,32529,m)|0}else{o=d;k=c[o+4>>2]|0;m=l;c[m>>2]=c[o>>2];c[m+4>>2]=k;Cb(32,i,32524,l)|0}o=(Eu(c[h>>2]|0)|0)&1073741823;c[d+12>>2]=o;a[d+10>>0]=1;o=b[j>>1]|514;b[j>>1]=f<<24>>24==0?o:o&-13;if(e<<24>>24==1){o=0;Ra=n;return o|0}Ig(d,e)|0;o=0;Ra=n;return o|0}function Ig(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=f+10|0;h=g<<24>>24==1;if(!(h|(a[w>>0]|0)==1)){k=f+8|0;h=b[k>>1]|0;i=h&65535;do if(i&18){do if(i&16384){j=f+12|0;i=(c[f>>2]|0)+(c[j>>2]|0)|0;if((i|0)<1)if(!(h&16))break;else h=1;else h=i;if(!(Eg(f,h,1)|0)){gw((c[f+16>>2]|0)+(c[j>>2]|0)|0,0,c[f>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[f>>2]|0);h=b[k>>1]&-16897;b[k>>1]=h;break}else{w=7;return w|0}}while(0);if(c[f+24>>2]|0?(c[f+16>>2]|0)==(c[f+20>>2]|0):0)break;if(!(Jg(f)|0)){h=b[k>>1]|0;break}else{w=7;return w|0}}while(0);b[k>>1]=h&-4097;h=c[f+16>>2]|0;f=c[f+12>>2]&-2;i=h+f|0;if((f|0)>0)do{v=a[h>>0]|0;f=h+1|0;a[h>>0]=a[f>>0]|0;h=h+2|0;a[f>>0]=v}while(h>>>0<i>>>0);a[w>>0]=g;w=0;return w|0}s=f+12|0;i=c[s>>2]|0;if(h){i=i&-2;c[s>>2]=i;n=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;m=L()|0;n=n|1}else{n=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;n=Sv(n|0,L()|0,2,0)|0;m=L()|0}t=f+16|0;k=c[t>>2]|0;r=k+i|0;u=f+32|0;l=c[u>>2]|0;a:do if(!l){q=Sv(n|0,m|0,-1,-1)|0;p=L()|0;if(p>>>0>0|(p|0)==0&q>>>0>2147483390){w=7;return w|0}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](n)|0;o=43;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){q=c[14978]|0;p=Tv(h|0,j|0,l|0,((l|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&p>>>0<=q>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){w=7;return w|0}h=Wa[c[29352>>2]&127](j)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;q=j}else q=j}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){w=7;return w|0}}else{do if(!(m>>>0>0|((m|0)==0?n>>>0>(e[l+276>>1]|0)>>>0:0))){j=l+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=43;break a}j=l+296|0;h=c[j>>2]|0;if(!h){h=l+292|0;break}else{c[j>>2]=c[h>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=43;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,n,m)|0;o=43}while(0);if((o|0)==43)if(!h){w=7;return w|0}else q=h;switch(a[w>>0]|0){case 1:{h=(i|0)>0;if(g<<24>>24==2)if(h){h=q;i=k;do{k=i+1|0;p=a[i>>0]|0;i=p&255;if((p&255)>191){i=d[2736+(i+-192)>>0]|0;b:do if((k|0)==(r|0)){j=i;i=r}else{j=i;i=k;while(1){k=a[i>>0]|0;if((k&-64)<<24>>24!=-128)break b;i=i+1|0;j=j<<6|k&63;if((i|0)==(r|0)){i=r;break}}}while(0);if(!((j&-2|0)==65534|(j>>>0<128|(j&-2048|0)==55296)))if(j>>>0<65536)o=55;else{l=j+-65536|0;a[h>>0]=l>>>10&192|j>>>10&63;a[h+1>>0]=l>>>18&3|216;a[h+2>>0]=j;l=h+3|0;k=4;j=j>>>8&3|220}else{j=65533;o=55}}else{j=i;i=k;o=55}if((o|0)==55){o=0;a[h>>0]=j;l=h+1|0;k=2;j=j>>>8}h=h+k|0;a[l>>0]=j}while(i>>>0<r>>>0)}else h=q;else if(h){n=q;h=k;while(1){i=h+1|0;p=a[h>>0]|0;h=p&255;if((p&255)>191){h=d[2736+(h+-192)>>0]|0;c:do if((i|0)==(r|0))i=r;else while(1){j=a[i>>0]|0;if((j&-64)<<24>>24!=-128)break c;i=i+1|0;h=h<<6|j&63;if((i|0)==(r|0)){i=r;break}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<65536)o=67;else{m=h+-65536|0;a[n>>0]=m>>>18&3|216;a[n+1>>0]=m>>>10&192|h>>>10&63;m=h;j=4;k=n+2|0;l=3;h=h>>>8&3|220}else{h=65533;o=67}}else o=67;if((o|0)==67){o=0;m=h;j=2;k=n;l=1;h=h>>>8}a[k>>0]=h;h=n+j|0;a[n+l>>0]=m;if(i>>>0<r>>>0){n=h;h=i}else break}}else h=q;c[s>>2]=h-q;a[h>>0]=0;h=h+1|0;break}case 2:{if((i|0)>0){h=q;do{i=d[k>>0]|0;l=k+2|0;p=d[k+1>>0]|0;j=p<<8|i;if(l>>>0<r>>>0&(p&248|0)==216){j=(j<<10&983040)+65536|i<<10&64512|d[l>>0]|d[k+3>>0]<<8&768;k=k+4|0}else k=l;if(j>>>0<128){l=h;i=1}else{if(j>>>0<2048){o=h;i=2;l=1;m=192;n=31}else{if(j>>>0<65536){m=h;i=3;l=2;n=1;o=224;p=15}else{a[h>>0]=j>>>18&7|240;m=h+1|0;i=4;l=3;n=2;o=128;p=63}a[m>>0]=j>>>12&p|o;o=h+n|0;m=128;n=63}a[o>>0]=j>>>6&n|m;l=h+l|0;j=j&63|128}h=h+i|0;a[l>>0]=j}while(k>>>0<r>>>0);o=93}else{h=q;o=93}break}default:if((i|0)>0){h=q;while(1){p=d[k>>0]|0;i=k+2|0;l=d[k+1>>0]|0;j=p<<8|l;if(i>>>0<r>>>0&(p&248|0)==216){p=k+4|0;j=(j<<10&983040)+65536|l<<10&64512|d[k+3>>0]|d[i>>0]<<8&768}else p=i;if(j>>>0<128){k=h;i=1}else{if(j>>>0<2048){n=h;i=2;k=1;l=192;m=31}else{if(j>>>0<65536){l=h;i=3;k=2;m=1;n=224;o=15}else{a[h>>0]=j>>>18&7|240;l=h+1|0;i=4;k=3;m=2;n=128;o=63}a[l>>0]=j>>>12&o|n;n=h+m|0;l=128;m=63}a[n>>0]=j>>>6&m|l;k=h+k|0;j=j&63|128}h=h+i|0;a[k>>0]=j;if(p>>>0<r>>>0)k=p;else{o=93;break}}}else{h=q;o=93}}if((o|0)==93)c[s>>2]=h-q;a[h>>0]=0;h=f+8|0;i=b[h>>1]|0;if(!((i&9216)==0?!(c[f+24>>2]|0):0))Cg(f);b[h>>1]=i&-32739|514;a[w>>0]=g;c[t>>2]=q;c[f+20>>2]=q;h=c[u>>2]|0;if(((h|0)!=0?(v=q,(c[h+304>>2]|0)>>>0<=v>>>0):0)?(c[h+308>>2]|0)>>>0>v>>>0:0)h=e[h+276>>1]|0;else h=Wa[c[29352>>2]&127](q)|0;c[f+24>>2]=h;w=0;return w|0}function Jg(d){d=d|0;var e=0,f=0;e=d+12|0;if(Eg(d,(c[e>>2]|0)+2|0,1)|0){e=7;return e|0}f=d+16|0;a[(c[f>>2]|0)+(c[e>>2]|0)>>0]=0;a[(c[f>>2]|0)+((c[e>>2]|0)+1)>>0]=0;e=d+8|0;b[e>>1]=b[e>>1]|512;e=0;return e|0}function Kg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=Ra;Ra=Ra+16|0;d=e;g[d>>3]=0.0;Lg(c,d,b,a)|0;Ra=e;return +(+g[d>>3])}function Lg(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;g[c>>3]=0.0;j=f&255;if(f<<24>>24==1){j=b;i=1;q=1;f=e}else{f=3-j|0;a:do if((f|0)<(e|0))while(1){if(a[b+f>>0]|0){i=0;break a}f=f+2|0;if((f|0)>=(e|0)){i=1;break}}else i=1;while(0);j=b+(j&1)|0;q=2;f=f^1}u=b+f|0;if(j>>>0>=u>>>0){c=0;return c|0}f=j;while(1){j=a[f>>0]|0;if(!(a[880+(j&255)>>0]&1))break;f=f+q|0;if(f>>>0>=u>>>0){f=0;t=69;break}}if((t|0)==69)return f|0;switch(j<<24>>24){case 45:{s=-1;f=f+q|0;break}case 43:{s=1;f=f+q|0;break}default:s=1}b:do if(f>>>0<u>>>0){j=0;m=0;b=0;do{e=a[f>>0]|0;if(!(((m|0)<214748364|(m|0)==214748364&b>>>0<3435973835)&((e&255)+-48|0)>>>0<10))break b;m=Yv(b|0,m|0,10,0)|0;b=(e<<24>>24)+-48|0;b=Sv(m|0,L()|0,b|0,((b|0)<0)<<31>>31|0)|0;m=L()|0;f=f+q|0;j=j+1|0}while(f>>>0<u>>>0)}else{j=0;b=0;m=0}while(0);c:do if(f>>>0<u>>>0){l=0;while(1){e=a[f>>0]|0;if(((e&255)+-48|0)>>>0>=10)break;f=f+q|0;j=j+1|0;e=l+1|0;if(f>>>0<u>>>0)l=e;else{q=1;l=0;p=1;break c}}d:do if(e<<24>>24==46){f=f+q|0;if(f>>>0<u>>>0)while(1){e=a[f>>0]|0;if(((e&255)+-48|0)>>>0>=10){e=l;break d}p=(m|0)<214748364|(m|0)==214748364&b>>>0<3435973835;n=Yv(b|0,m|0,10,0)|0;o=(e<<24>>24)+-48|0;o=Sv(n|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;e=L()|0;b=p?o:b;m=p?e:m;e=l+(p<<31>>31)|0;j=j+1|0;f=f+q|0;if(f>>>0<u>>>0)l=e;else break}else e=l}else e=l;while(0);if(f>>>0<u>>>0){e:do switch(a[f>>0]|0){case 69:case 101:{f=f+q|0;if(f>>>0>=u>>>0){q=0;l=0;p=1;break c}switch(a[f>>0]|0){case 45:{p=-1;f=f+q|0;break}case 43:{p=1;f=f+q|0;break}default:p=1}if(f>>>0<u>>>0){n=0;o=0;while(1){l=a[f>>0]|0;if(((l&255)+-48|0)>>>0>=10){l=o;break e}l=(o|0)<1e4?(o*10|0)+-48+(l<<24>>24)|0:1e4;f=f+q|0;if(f>>>0<u>>>0){n=1;o=l}else{n=1;break}}}else{n=0;l=0}break}default:{n=1;l=0;p=1}}while(0);if(f>>>0<u>>>0)while(1){if(!(a[880+(d[f>>0]|0)>>0]&1)){q=n;break c}f=f+q|0;if(f>>>0>=u>>>0){q=n;break}}else q=n}else{q=1;l=0;p=1}}else{q=1;l=0;p=1;e=0}while(0);e=(G(l,p)|0)+e|0;p=(e|0)<0;l=e>>31|1;f:do if((b|0)==0&(m|0)==0)h=(s|0)<0?-0.0:0.0;else{e=p?0-e|0:e;g:do if((e|0)>0){h:do if((l|0)>0)while(1){if((m|0)>214748364|(m|0)==214748364&b>>>0>3435973835){l=e;break h}b=Yv(b|0,m|0,10,0)|0;m=L()|0;l=e+-1|0;if((e|0)>1)e=l;else{t=51;break g}}else while(1){n=Wv(b|0,m|0,10,0)|0;o=L()|0;l=Yv(n|0,o|0,10,0)|0;l=Tv(b|0,m|0,l|0,L()|0)|0;if(!((l|0)==0&(L()|0)==0)){l=e;break h}l=e+-1|0;if((e|0)>1){e=l;b=n;m=o}else{b=n;m=o;t=51;break g}}while(0);o=(s|0)<0;e=Tv(0,0,b|0,m|0)|0;s=L()|0;e=o?e:b;b=o?s:m;if((l|0)>307){if((l|0)>=342){h=+(e>>>0)+4294967296.0*+(b|0);if(p){h=h*0.0;break f}else{h=h*r;break f}}l=l+-308|0;k=(l&1|0)==0?1.0:10.0;l=l>>1;if(l){h=10.0;do{h=h*h;k=(l&1|0)==0?k:k*h;l=l>>1}while((l|0)!=0)}h=+(e>>>0)+4294967296.0*+(b|0);if(p){h=h/k/1.e+308;break f}else{h=k*h*1.e+308;break f}}}else{l=e;t=51}while(0);if((t|0)==51){s=(s|0)<0;e=Tv(0,0,b|0,m|0)|0;t=L()|0;e=s?e:b;b=s?t:m;if(!l){h=+(e>>>0)+4294967296.0*+(b|0);break}}h=(l&1|0)==0?1.0:10.0;l=l>>1;if(l){k=10.0;do{k=k*k;h=(l&1|0)==0?h:h*k;l=l>>1}while((l|0)!=0)}k=+(e>>>0)+4294967296.0*+(b|0);h=p?k/h:h*k}while(0);g[c>>3]=h;c=(q|0)!=0&((j|0)>0&(f|0)==(u|0))?i:0;return c|0}function Mg(a){a=+a;var b=0,c=0;if(!(a<=-9223372036854775808.0))if(!(a>=9223372036854775808.0)){c=+t(a)>=1.0?(a>0.0?~~+H(+s(a/4294967296.0),4294967295.0)>>>0:~~+F((a-+(~~a>>>0))/4294967296.0)>>>0):0;b=~~a>>>0}else{c=2147483647;b=-1}else{c=-2147483648;b=0}K(c|0);return b|0}function Ng(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=Ra;Ra=Ra+16|0;f=e;g=f;c[g>>2]=0;c[g+4>>2]=0;Og(d,f,b,a)|0;b=f;d=c[b>>2]|0;K(c[b+4>>2]|0);Ra=e;return d|0}function Og(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;i=g&255;if(g<<24>>24==1){h=0;o=1;i=b;g=f}else{g=3-i|0;a:do if((g|0)<(f|0))while(1){if(a[b+g>>0]|0){h=1;break a}g=g+2|0;if((g|0)>=(f|0)){h=0;break}}else h=0;while(0);o=2;i=b+(i&1)|0;g=g^1}n=b+g|0;b:do if(i>>>0<n>>>0){while(1){g=a[i>>0]|0;if(!(a[880+(g&255)>>0]&1))break;g=i+o|0;if(g>>>0<n>>>0)i=g;else{m=0;break b}}switch(g<<24>>24){case 45:{m=1;g=i+o|0;break b}case 43:{m=0;g=i+o|0;break b}default:{m=0;g=i;break b}}}else{m=0;g=i}while(0);c:do if(g>>>0<n>>>0){i=g;do{if((a[i>>0]|0)!=48)break c;i=i+o|0}while(i>>>0<n>>>0)}else i=g;while(0);do if(i>>>0<n>>>0){k=0;l=i;j=0;f=0;while(1){b=a[l>>0]|0;if((b+-48&255)>=10){b=k;k=1;break}f=Yv(j|0,f|0,10,0)|0;j=b<<24>>24;f=Sv(f|0,L()|0,-48,-1)|0;j=Sv(f|0,L()|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;b=k+o|0;l=i+b|0;if(l>>>0>=n>>>0){k=0;break}else k=b}l=(m|0)!=0;if((f|0)>=0)if(l){p=26;break}else{l=0;break}else{j=l?0:-1;f=l?-2147483648:2147483647;break}}else if(!m){b=0;k=0;j=0;f=0;l=0}else{b=0;k=0;j=0;f=0;p=26}while(0);if((p|0)==26){j=Tv(0,0,j|0,f|0)|0;f=L()|0;l=1}m=e;c[m>>2]=j;c[m+4>>2]=f;if(!b){g=(g|0)==(i|0);if((h|0)!=0|g|k^1)h=h|g&1;else p=30}else if(!((h|0)!=0|k^1))p=30;d:do if((p|0)==30){g=b;while(1){if(!(a[880+(d[i+g>>0]|0)>>0]&1)){h=1;break d}g=g+o|0;if((i+g|0)>>>0>=n>>>0){h=0;break}}}while(0);g=o*19|0;if(b>>>0<g>>>0){e=h;return e|0}if(b>>>0>g>>>0){c[e>>2]=l?0:-1;c[e+4>>2]=l?-2147483648:2147483647;e=2;return e|0}g=0;do{f=i+(G(g,o)|0)|0;f=(a[f>>0]|0)-(a[32536+g>>0]|0)|0;g=g+1|0;b=(f|0)==0}while(g>>>0<18&b);if(b)g=(a[i+(o*18|0)>>0]|0)+-56|0;else g=f*10|0;if((g|0)<0){e=h;return e|0}else{c[e>>2]=l?0:-1;c[e+4>>2]=l?-2147483648:2147483647;return ((g|0)==0?(l?h:3):2)|0}return 0}function Pg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=a+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(a);c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}function Qg(a){a=a|0;return}\nfunction Sg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0;k=d+8|0;h=b[k>>1]|0;j=h&65535;if(j&1|0)return;switch(e<<24>>24){case 65:{if(j&16|0){b[k>>1]=j&15920;return}if(!((j&2|0)!=0|(j&12|0)==0)){Hg(d,f,1)|0;h=b[k>>1]|0}h=h&-13;b[k>>1]=h;h=h&65535;if(!(h&2))return;b[k>>1]=h&15904|16;return}case 67:{oh(d);return}case 68:{do if(!(j&4)){if(j&8|0){e=Mg(+g[d>>3])|0;f=L()|0;break}if(!(j&18)){e=0;f=0}else{e=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;f=L()|0;h=b[k>>1]|0}}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}while(0);c[d>>2]=e;c[d+4>>2]=f;b[k>>1]=h&15904|4;return}case 69:{do if(!(j&8)){if(j&4|0){j=d;i=+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0);break}if(!(j&18))i=0.0;else{i=+Kg(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0);h=b[k>>1]|0}}else i=+g[d>>3];while(0);g[d>>3]=i;b[k>>1]=h&15904|8;return}default:{e=j>>>3&2|j;h=e&65535;b[k>>1]=h;if(!((j&12|0)==0|(e&2|0)!=0)){Hg(d,f,1)|0;h=b[k>>1]|0}b[k>>1]=h&-16413;return}}}function Tg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,l=0,m=0;j=b[a+8>>1]|0;l=j&65535;k=b[d+8>>1]|0;m=k&65535;i=(k|j)&65535;if(i&1|0){d=(m&1)-(l&1)|0;return d|0}if(!(i&12)){if(i&2|0){if(!(l&2)){d=1;return d|0}if(!(m&2)){d=-1;return d|0}if(e|0){d=ph(a,d,e,0)|0;return d|0}}d=qh(a,d)|0;return d|0}i=k&j&65535;if(i&4|0){l=a;a=c[l>>2]|0;l=c[l+4>>2]|0;m=d;d=c[m>>2]|0;m=c[m+4>>2]|0;return ((l|0)<(m|0)|(l|0)==(m|0)&a>>>0<d>>>0?-1:((l|0)>(m|0)|(l|0)==(m|0)&a>>>0>d>>>0)&1)|0}if(i&8|0){h=+g[a>>3];f=+g[d>>3];if(h<f){d=-1;return d|0}d=h>f&1;return d|0}if(l&4|0){if(!(m&8)){d=-1;return d|0}k=a;j=c[k>>2]|0;k=c[k+4>>2]|0;h=+g[d>>3];if(h<-9223372036854775808.0){d=1;return d|0}if(h>=9223372036854775808.0){d=-1;return d|0}i=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;if((k|0)<(e|0)|(k|0)==(e|0)&j>>>0<i>>>0){d=-1;return d|0}if((k|0)>(e|0)|(k|0)==(e|0)&j>>>0>i>>>0){d=1;return d|0}f=+(j>>>0)+4294967296.0*+(k|0);if(h>f){d=-1;return d|0}d=h<f&1;return d|0}if(!(l&8)){d=1;return d|0}if(!(m&4)){d=-1;return d|0}k=d;j=c[k>>2]|0;k=c[k+4>>2]|0;h=+g[a>>3];if(h<-9223372036854775808.0){d=-1;return d|0}if(h>=9223372036854775808.0){d=1;return d|0}i=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;if((k|0)<(e|0)|(k|0)==(e|0)&j>>>0<i>>>0){d=1;return d|0}if((k|0)>(e|0)|(k|0)==(e|0)&j>>>0>i>>>0){d=-1;return d|0}f=+(j>>>0)+4294967296.0*+(k|0);if(h>f){d=1;return d|0}d=(h<f)<<31>>31;return d|0}function Ug(e,f,g){e=e|0;f=f|0;g=g|0;var h=0;do switch(f|0){case 10:{b[g+8>>1]=16385;c[g+12>>2]=0;c[g>>2]=0;g=0;return g|0}case 0:case 11:{b[g+8>>1]=1;g=0;return g|0}case 1:{e=a[e>>0]|0;f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=1;return g|0}case 2:{e=a[e>>0]<<8|d[e+1>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=2;return g|0}case 3:{e=d[e+1>>0]<<8|a[e>>0]<<16|d[e+2>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=3;return g|0}case 4:{e=d[e+1>>0]<<16|a[e>>0]<<24|d[e+2>>0]<<8|d[e+3>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=4;return g|0}case 5:{h=a[e>>0]<<8|d[e+1>>0];f=g;c[f>>2]=d[e+3>>0]<<16|d[e+2>>0]<<24|d[e+4>>0]<<8|d[e+5>>0];c[f+4>>2]=h;b[g+8>>1]=4;g=6;return g|0}case 7:case 6:{vh(e,f,g);h=8;return h|0}case 9:case 8:{h=g;c[h>>2]=f+-8;c[h+4>>2]=0;b[g+8>>1]=4;h=0;return h|0}default:{c[g+16>>2]=e;h=(f+-12|0)>>>1;c[g+12>>2]=h;b[g+8>>1]=b[31116+((f&1)<<1)>>1]|0;return h|0}}while(0);return 0}function Vg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;i=o;if((d|0)<1){c[i>>2]=32306;c[i+4>>2]=67596;c[i+8>>2]=31517;Db(11,32001,i);g=11;Ra=o;return g|0}n=c[b+4>>2]|0;c[n+4>>2]=c[b>>2];l=(e|0)!=0;if(l?(m=n+80|0,(c[m>>2]|0)==0):0){k=c[n+32>>2]|0;if((c[14813]|0)>=(k|0)?(h=c[14819]|0,(h|0)!=0):0){c[14819]=c[h>>2];e=c[14820]|0;c[14820]=e+-1;c[14821]=(e|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0)c[14983]=i}else j=11;a:do if((j|0)==11){j=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;e=L()|0;do if(!(e>>>0>0|(e|0)==0&j>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0<k>>>0)c[14985]=k;e=59064;i=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&i>>>0>0){j=c[14978]|0;e=Tv(i|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&e>>>0<=j>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h)break;i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}i=Wa[c[29352>>2]&127](h)|0;if((c[14986]|0)>>>0<k>>>0)c[14986]=k;i=(c[14980]|0)+i|0;c[14980]=i;if(i>>>0<=(c[14984]|0)>>>0)break a;c[14984]=i;break a}while(0);c[m>>2]=0;g=7;Ra=o;return g|0}while(0);c[m>>2]=h;k=h;j=k;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;c[m>>2]=(c[m>>2]|0)+4}if((d|0)==1)d=(c[n+44>>2]|0)!=0&1;c[g+64>>2]=d;a[g+68>>0]=-1;c[g+112>>2]=f;c[g+8>>2]=b;c[g+20>>2]=n;j=g+1|0;a[j>>0]=l&1;a[g+2>>0]=l?0:2;i=n+8|0;h=c[i>>2]|0;e=h;if(h|0)do{if((c[h+64>>2]|0)==(d|0)){n=h+1|0;a[n>>0]=a[n>>0]|32;a[j>>0]=a[j>>0]|32}h=c[h+24>>2]|0}while((h|0)!=0);c[g+24>>2]=e;c[i>>2]=g;a[g>>0]=1;g=0;Ra=o;return g|0}function Wg(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+64|0;y=A+16|0;p=A;r=A+52|0;s=A+48|0;z=A+44|0;x=A+40|0;l=A+36|0;m=A+32|0;n=A+56|0;o=A+28|0;i=c[e>>2]|0;v=e+4|0;u=c[v>>2]|0;j=u+4|0;c[j>>2]=i;a:do if(!(a[u+17>>0]|0)){h=fg(u,s,z,1,0)|0;c[x>>2]=h;if(!h){q=c[s>>2]|0;break}else{z=h;Ra=A;return z|0}}else{k=u+8|0;h=c[k>>2]|0;if(h|0)do{w=h+1|0;a[w>>0]=a[w>>0]&-5;h=c[h+24>>2]|0}while((h|0)!=0);c[j>>2]=i;q=c[(c[u+12>>2]|0)+56>>2]|0;q=d[q+53>>0]<<16|d[q+52>>0]<<24|d[q+54>>0]<<8|d[q+55>>0];c[z>>2]=q;i=u+36|0;j=1073741824/((c[u+32>>2]|0)>>>0)|0;while(1){w=q+1|0;if(w>>>0<2)h=0;else{h=q+-1|0;h=h-((h>>>0)%(((((c[i>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;h=((h+1|0)==(j|0)?3:2)+h|0}if((q|0)==(j|0)|(w|0)==(h|0))q=w;else break}c[z>>2]=w;h=fg(u,m,l,w,1)|0;c[x>>2]=h;b:do if(!h){l=c[l>>2]|0;c:do if((l|0)==(w|0)){l=c[m>>2]|0;c[s>>2]=l}else{a[n>>0]=0;c[o>>2]=0;h=c[k>>2]|0;if(!h)h=0;else h=$f(h,0,0)|0;c[x>>2]=h;i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{t=c[i+20>>2]|0;m=t+120|0;c[m>>2]=(c[m>>2]|0)+-1;t=t+136|0;c[i+16>>2]=c[t>>2];c[t>>2]=i;break}}while(0);do if(!h){h=c[u>>2]|0;h=Za[c[h+204>>2]&127](h,w,r,0)|0;if(h|0){c[x>>2]=h;break}h=c[r>>2]|0;j=c[h+8>>2]|0;i=j+4|0;if((c[i>>2]|0)!=(w|0)){c[j+56>>2]=c[h+4>>2];c[j+72>>2]=h;c[j+52>>2]=u;c[i>>2]=w;a[j+9>>0]=(q|0)==0?100:0}c[s>>2]=j;h=eg(u,w,n,o)|0;c[x>>2]=h;i=a[n>>0]|0;if((i+-1&255)>=2){if(!h){h=gg(u,j,i,c[o>>2]|0,l,0)|0;c[x>>2]=h;do if(j|0){i=c[j+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{t=c[i+20>>2]|0;p=t+120|0;c[p>>2]=(c[p>>2]|0)+-1;t=t+136|0;c[i+16>>2]=c[t>>2];c[t>>2]=i;break}}while(0);if(h|0)break;h=c[u>>2]|0;h=Za[c[h+204>>2]&127](h,w,r,0)|0;if(h|0){c[x>>2]=h;break}h=c[r>>2]|0;l=c[h+8>>2]|0;i=l+4|0;if((c[i>>2]|0)==(w|0))k=l+72|0;else{c[l+56>>2]=c[h+4>>2];k=l+72|0;c[k>>2]=h;c[l+52>>2]=u;c[i>>2]=w;a[l+9>>0]=(q|0)==0?100:0}c[s>>2]=l;c[x>>2]=0;i=c[k>>2]|0;j=c[i+20>>2]|0;do if(b[i+28>>1]&4){if((c[j+24>>2]|0)>>>0<(c[i+24>>2]|0)>>>0){t=44;break}if(!(c[j+96>>2]|0)){c[x>>2]=0;t=55;break}else{h=Ve(i)|0;t=49;break}}else t=44;while(0);do if((t|0)==44){h=c[j+40>>2]|0;if(h|0){c[x>>2]=h;break}if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(i)|0;t=49;break}else{h=Xf(i)|0;t=49;break}}while(0);if((t|0)==49){c[x>>2]=h;if(!h)t=55}if((t|0)==55)break c;if(!l)break;i=c[k>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}else{c[p>>2]=32306;c[p+4>>2]=72254;c[p+8>>2]=31517;Db(11,32001,p);c[x>>2]=11;h=11}if(j){i=c[j+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}while(0);break b}while(0);ig(u,w,1,0,x);h=c[x>>2]|0;if(h|0){if(!l)break;i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}i=c[v>>2]|0;c[i+4>>2]=c[e>>2];i=c[i+12>>2]|0;k=c[i+56>>2]|0;i=c[i+72>>2]|0;j=c[i+20>>2]|0;if((b[i+28>>1]&4)!=0?(c[j+24>>2]|0)>>>0>=(c[i+24>>2]|0)>>>0:0)if(!(c[j+96>>2]|0))t=76;else{h=Ve(i)|0;t=70}else t=66;do if((t|0)==66){h=c[j+40>>2]|0;if(!h)if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(i)|0;t=70;break}else{h=Xf(i)|0;t=70;break}}while(0);if((t|0)==70)if(!h)t=76;if((t|0)==76){a[k+52>>0]=w>>>24;a[k+53>>0]=w>>>16;a[k+54>>0]=w>>>8;a[k+55>>0]=w;c[x>>2]=0;q=l;break a}c[x>>2]=h;if(l){i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}while(0);z=h;Ra=A;return z|0}while(0);k=(g&1|0)==0?10:13;o=c[q+56>>2]|0;j=q+52|0;p=c[j>>2]|0;i=d[q+9>>0]|0;if(!(b[p+22>>1]&12)){h=o+i|0;n=p+36|0}else{n=p+36|0;h=o+i|0;gw(h|0,0,(c[n>>2]|0)-i|0)|0}a[h>>0]=k;l=i+8|0;m=l&65535;h=o+(i+1)|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;a[o+(i+7)>>0]=0;h=o+(i+5)|0;a[h>>0]=(c[n>>2]|0)>>>8;a[h+1>>0]=c[n>>2];c[q+20>>2]=(c[n>>2]|0)-l&65535;a[q+8>>0]=1;h=q+10|0;a[h>>0]=0;c[q+76>>2]=120;i=c[j>>2]|0;switch(k&7){case 5:{a[q+2>>0]=1;a[q+3>>0]=1;c[q+80>>2]=180;b[q+14>>1]=b[i+28>>1]|0;h=i+30|0;t=86;break}case 2:{a[q+2>>0]=0;a[q+3>>0]=0;c[q+80>>2]=179;b[q+14>>1]=b[i+24>>1]|0;h=i+26|0;t=86;break}default:{c[y>>2]=32306;c[y+4>>2]=65035;c[y+8>>2]=31517;Db(11,32001,y);h=a[h>>0]|0}}if((t|0)==86){b[q+16>>1]=b[h>>1]|0;a[q+11>>0]=a[i+21>>0]|0;h=0}b[q+18>>1]=m;c[q+60>>2]=o+(c[n>>2]|0);c[q+64>>2]=o+l;c[q+68>>2]=o+(h&255);a[q+12>>0]=0;b[q+26>>1]=(c[p+32>>2]|0)+65535;b[q+24>>1]=0;a[q>>0]=1;h=c[q+72>>2]|0;do if(h|0)if(!(b[h+28>>1]&32)){Df(h);break}else{y=c[h+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[h+16>>2]=c[y>>2];c[y>>2]=h;break}while(0);c[f>>2]=c[z>>2];z=0;Ra=A;return z|0}function Xg(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;V=Ra;Ra=Ra+80|0;R=V+56|0;T=V+40|0;S=V+24|0;Q=V+8|0;P=V;a:do if(!g)if((a[f>>0]|0)==0?(l=d[f+1>>0]|0,(l&2|0)!=0):0){o=f+32|0;n=o;m=c[n>>2]|0;n=c[n+4>>2]|0;if((m|0)==(h|0)&(n|0)==(i|0)){c[k>>2]=0;U=0;Ra=V;return U|0}if((n|0)<(i|0)|(n|0)==(i|0)&m>>>0<h>>>0){if(l&8|0){c[k>>2]=-1;U=0;Ra=V;return U|0}N=Sv(m|0,n|0,1,0)|0;if((N|0)==(h|0)&(L()|0)==(i|0)){c[k>>2]=0;l=Yg(f,0)|0;switch(l|0){case 101:{N=0;break a}case 0:break;default:{U=l;Ra=V;return U|0}}bg(f);N=o;if((c[N>>2]|0)==(h|0)?(c[N+4>>2]|0)==(i|0):0){U=0;Ra=V;return U|0}else N=0}else N=0}else N=0}else N=0;else{l=c[g>>2]|0;do if((e[l+8>>1]|0)<14){m=e[(c[g+4>>2]|0)+8>>1]|0;N=(a[c[l+16>>2]>>0]|0)==0;a[g+12>>0]=N?-1:1;a[g+13>>0]=N?1:-1;if(!(m&4)){if(m&25|0){l=88;break}if(!(c[l+20>>2]|0))l=90;else{l=88;break}}else l=89}else l=88;while(0);a[g+11>>0]=0;N=l}while(0);l=xh(f)|0;switch(l|0){case 0:{K=f+116|0;B=1-j|0;C=f+70|0;D=(N|0)==0;E=f+1|0;F=f+32|0;M=f+50|0;G=f+32|0;H=f+20|0;I=f+68|0;J=f+2|0;l=0;m=0;b:while(1){A=c[K>>2]|0;x=A+24|0;o=(e[x>>1]|0)+-1|0;j=o>>B;b[C>>1]=j;w=A+68|0;y=A+26|0;z=A+64|0;c:do if(D){t=A+3|0;u=A+60|0;n=A+8|0;s=j;r=o;o=0;d:while(1){j=(c[z>>2]|0)+(s<<1)|0;j=(c[w>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[y>>1])|0;e:do if(a[t>>0]|0){p=j+1|0;if((a[j>>0]|0)<0){q=c[u>>2]|0;while(1){if(p>>>0>=q>>>0)break;j=p+1|0;if((a[p>>0]|0)<0)p=j;else{U=29;break e}}c[Q>>2]=32306;c[Q+4>>2]=68640;c[Q+8>>2]=31517;Db(11,32001,Q);q=1;j=s;l=11;p=r}else{j=p;U=29}}else U=29;while(0);f:do if((U|0)==29){U=0;Of(j,P)|0;p=P;j=c[p>>2]|0;p=c[p+4>>2]|0;do if((p|0)<(i|0)|(p|0)==(i|0)&j>>>0<h>>>0){o=s+1|0;if((s|0)<(r|0))p=r;else{q=4;j=s;m=-1;p=r;break f}}else{if((p|0)>(i|0)|(p|0)==(i|0)&j>>>0>h>>>0){p=s+-1|0;if((o|0)<(s|0))break;else{q=4;j=s;m=1;break f}}b[C>>1]=s;if(!(a[n>>0]|0)){q=8;j=s;p=r;o=s;break f}a[E>>0]=a[E>>0]|2;q=F;c[q>>2]=j;c[q+4>>2]=p;b[M>>1]=0;c[k>>2]=0;q=1;j=s;l=0;p=r;break f}while(0);q=0;j=p+o>>1}while(0);switch(q&15){case 4:{U=74;break c}case 8:{U=76;break c}case 0:{s=j;r=p;break}default:break d}}if(q){U=85;break b}}else{s=A+11|0;t=A+14|0;u=A+10|0;v=A+80|0;n=o;o=0;while(1){p=(c[z>>2]|0)+(j<<1)|0;p=(c[w>>2]|0)+((d[p>>0]<<8|d[p+1>>0])&e[y>>1])|0;r=a[p>>0]|0;q=r&255;m=p+1|0;do if((r&255)>(d[s>>0]|0)){m=d[m>>0]|0;if((m&128|0)==0?(O=(q<<7&16256)+m|0,O>>>0<=(e[t>>1]|0)>>>0):0){m=Ya[N&127](O,p+2|0,g)|0;break}cb[c[v>>2]&255](A,p+(0-(d[u>>0]|0))|0,G);r=c[G>>2]|0;if((r|0)<2){U=45;break b}q=c[H>>2]|0;if(((r>>>0)/((c[q+36>>2]|0)>>>0)|0)>>>0>(c[q+44>>2]|0)>>>0){U=45;break b}m=r+18|0;q=Sv(m|0,((m|0)<0)<<31>>31|0,-1,-1)|0;p=L()|0;if(p>>>0>0|(p|0)==0&q>>>0>2147483390){l=7;break b}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](m)|0;if(!m){l=7;break b}else p=m}else{q=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;p=59064;m=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&m>>>0>0){W=c[14978]|0;p=Tv(m|0,p|0,q|0,((q|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&p>>>0<=W>>>0)&1}p=Wa[c[29340>>2]&127](q)|0;if(!p){l=7;break b}m=Wa[c[29352>>2]&127](p)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}b[C>>1]=j;m=cg(f,0,r,p,0)|0;a[E>>0]=a[E>>0]&-5;if(m|0){U=59;break b}m=Fh(r,p,g,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{W=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-W;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else m=Ya[N&127](q,m,g)|0;while(0);if((m|0)<0)o=j+1|0;else{if(!m){U=69;break b}n=j+-1|0}if((o|0)>(n|0))break;j=n+o>>1}n=A+8|0;U=74}while(0);if((U|0)==74)if(!(a[n>>0]|0))U=76;else{U=75;break}if((U|0)==76){U=0;if((o|0)<(e[x>>1]|0)){n=(c[z>>2]|0)+(o<<1)|0;n=(d[n>>0]<<8|d[n+1>>0])&e[y>>1]}else n=(d[A+9>>0]|0)+8|0;r=(c[A+56>>2]|0)+n|0;j=a[r>>0]|0;p=a[r+1>>0]|0;q=a[r+2>>0]|0;r=a[r+3>>0]|0;n=o&65535;b[C>>1]=n;o=a[I>>0]|0;if(o<<24>>24>18){U=80;break}W=c[H>>2]|0;b[M>>1]=0;a[E>>0]=a[E>>0]&-7;A=o<<24>>24;b[f+72+(A<<1)>>1]=n;c[f+120+(A<<2)>>2]=c[K>>2];b[C>>1]=0;a[I>>0]=o+1<<24>>24;n=yh(W,(p&255)<<16|(j&255)<<24|(q&255)<<8|r&255,K,f,d[J>>0]|0)|0;if(n){l=n;break}}}do if((U|0)==45){c[S>>2]=32306;c[S+4>>2]=68714;c[S+8>>2]=31517;Db(11,32001,S);l=11}else if((U|0)==59)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);l=m;break}else{l=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);l=m;break}else if((U|0)==69){c[k>>2]=0;b[C>>1]=j;if(!(a[g+11>>0]|0))l=0;else{c[T>>2]=32306;c[T+4>>2]=68745;c[T+8>>2]=31517;Db(11,32001,T);l=11}}else if((U|0)==75){b[C>>1]=j;c[k>>2]=m;l=0}else if((U|0)==80){c[R>>2]=32306;c[R+4>>2]=68229;c[R+8>>2]=31517;Db(11,32001,R);l=11}else if((U|0)==85){Ra=V;return l|0}while(0);b[M>>1]=0;W=l;Ra=V;return W|0}case 16:{c[k>>2]=-1;W=0;Ra=V;return W|0}default:{W=l;Ra=V;return W|0}}return 0}function Yg(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=Ra;Ra=Ra+16|0;r=s;o=f+50|0;b[o>>1]=0;p=f+1|0;a[p>>0]=a[p>>0]&-7;if(a[f>>0]|0){r=Gh(f)|0;Ra=s;return r|0}q=f+116|0;h=c[q>>2]|0;n=f+70|0;g=b[n>>1]|0;m=g+1<<16>>16;b[n>>1]=m;if((m&65535)>=(e[h+24>>1]|0)){b[n>>1]=g;r=Gh(f)|0;Ra=s;return r|0}if(a[h+8>>0]|0){r=0;Ra=s;return r|0}k=f+68|0;l=f+20|0;m=f+2|0;while(1){g=b[n>>1]|0;i=(c[h+64>>2]|0)+((g&65535)<<1)|0;i=(c[h+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[h+26>>1])|0;j=a[k>>0]|0;if(j<<24>>24>18){h=8;break}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];t=c[l>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;u=j<<24>>24;b[f+72+(u<<1)>>1]=g;c[f+120+(u<<2)>>2]=h;b[n>>1]=0;a[k>>0]=j+1<<24>>24;g=yh(t,i,q,f,d[m>>0]|0)|0;if(g|0){h=11;break}h=c[q>>2]|0;if(a[h+8>>0]|0){g=0;h=11;break}}if((h|0)==8){c[r>>2]=32306;c[r+4>>2]=68229;c[r+8>>2]=31517;Db(11,32001,r);u=11;Ra=s;return u|0}else if((h|0)==11){Ra=s;return g|0}return 0}function Zg(d,e){d=d|0;e=e|0;var f=0,g=0;e=d+1|0;a[e>>0]=a[e>>0]&-15;b[d+50>>1]=0;if(((a[d>>0]|0)==0?(f=d+70|0,g=b[f>>1]|0,g<<16>>16):0)?a[(c[d+116>>2]|0)+8>>0]|0:0){b[f>>1]=g+-1<<16>>16;g=0;return g|0}g=Hh(d)|0;return g|0}function _g(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=Ra;Ra=Ra+16|0;u=v;m=c[i+4>>2]|0;a[i+10>>0]=0;t=a[h>>0]|0;j=t&255;do if(t<<24>>24<=-1){k=d[h+1>>0]|0;if(!(k&128)){t=j<<7&16256|k;j=2;break}l=d[h+2>>0]|0;if(!(l&128)){t=(j<<14|l)&2080895|k<<7&16256;j=3;break}else{j=Of(h,u)|0;s=u;t=c[s>>2]|0;t=((t|0)==(t|0)?0==(c[s+4>>2]|0):0)?t:-1;break}}else{t=j;j=1}while(0);j=j&255;if(t>>>0>g>>>0|t>>>0<=j>>>0){u=0;i=i+8|0;b[i>>1]=u;Ra=v;return}s=f+4|0;q=f+12|0;r=i+8|0;p=0;o=t;while(1){l=h+j|0;n=a[l>>0]|0;k=n&255;if(n<<24>>24>-1)l=1;else{f=d[l+1>>0]|0;do if(f&128){n=d[l+2>>0]|0;if(!(n&128)){k=(k<<14|n)&2080895|f<<7&16256;l=3;break}else{l=Of(l,u)|0;n=u;k=c[n>>2]|0;k=((k|0)==(k|0)?0==(c[n+4>>2]|0):0)?k:-1;break}}else{k=k<<7&16256|f;l=2}while(0);l=l&255}a[m+10>>0]=a[s>>0]|0;c[m+32>>2]=c[q>>2];c[m+24>>2]=0;c[m+16>>2]=0;o=(Ug(h+o|0,k,m)|0)+o|0;p=p+1<<16>>16;j=l+j|0;if((p&65535)>=(e[r>>1]|0))break;if(o>>>0>g>>>0|j>>>0>=t>>>0)break;else m=m+40|0}if(o>>>0<=g>>>0|p<<16>>16==0){u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}j=m+8|0;if(!(b[j>>1]&9216)){b[j>>1]=1;u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}else{Dg(m);u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}}function $g(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=Ra;Ra=Ra+16|0;u=w;if((a[f>>0]|0)==0?a[f+1>>0]&8:0){v=0;Ra=w;return v|0}h=xh(f)|0;switch(h|0){case 0:{c[g>>2]=0;r=f+116|0;h=c[r>>2]|0;s=f+70|0;a:do if(!(a[h+8>>0]|0)){n=f+68|0;o=f+20|0;p=f+50|0;t=f+1|0;q=f+2|0;while(1){k=(c[h+56>>2]|0)+((d[h+9>>0]|0)+8)|0;g=a[k>>0]|0;i=a[k+1>>0]|0;j=a[k+2>>0]|0;k=a[k+3>>0]|0;l=b[h+24>>1]|0;b[s>>1]=l;m=a[n>>0]|0;if(m<<24>>24>18){v=9;break}x=c[o>>2]|0;b[p>>1]=0;a[t>>0]=a[t>>0]&-7;y=m<<24>>24;b[f+72+(y<<1)>>1]=l;c[f+120+(y<<2)>>2]=h;b[s>>1]=0;a[n>>0]=m+1<<24>>24;g=yh(x,(i&255)<<16|(g&255)<<24|(j&255)<<8|k&255,r,f,d[q>>0]|0)|0;if(g|0)break;h=c[r>>2]|0;if(a[h+8>>0]|0){g=t;break a}}if((v|0)==9){c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);g=11}a[t>>0]=a[t>>0]&-9;y=g;Ra=w;return y|0}else g=f+1|0;while(0);b[s>>1]=(e[h+24>>1]|0)+65535;a[g>>0]=a[g>>0]|8;y=0;Ra=w;return y|0}case 16:{c[g>>2]=1;y=0;Ra=w;return y|0}default:{y=h;Ra=w;return y|0}}return 0}function ah(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;N=Ra;Ra=Ra+80|0;H=N+40|0;G=N;A=N+64|0;B=N+60|0;M=N+56|0;C=N+52|0;c[C>>2]=i;o=c[f+8>>2]|0;q=o+4|0;F=c[q>>2]|0;if((a[f>>0]|0)==4){M=c[f+4>>2]|0;Ra=N;return M|0}I=f+1|0;l=a[I>>0]|0;a:do if(l&32){m=c[f+64>>2]|0;j=c[F+8>>2]|0;b:do if(!j)K=14;else{c:do if(m){do{if((j|0)!=(f|0)?(c[j+64>>2]|0)==(m|0):0)break c;j=c[j+24>>2]|0}while((j|0)!=0);if(!f)break b;else{K=14;break b}}else{k=f+24|0;while(1){if((j|0)!=(f|0))break c;j=c[k>>2]|0;if(!j){K=14;break b}}}while(0);j=$f(j,m,f)|0;c[M>>2]=j;if(!j)break a;Ra=N;return j|0}while(0);if((K|0)==14)a[I>>0]=l&-33;c[M>>2]=0}while(0);J=f+112|0;z=c[J>>2]|0;k=z;do if(!z){l=c[f+64>>2]|0;n=g+8|0;m=c[n>>2]|0;n=c[n+4>>2]|0;k=o+11|0;if(a[k>>0]|0?(a[k>>0]=0,p=c[(c[q>>2]|0)+8>>2]|0,p|0):0){j=p;do{if((a[j+1>>0]&16?(a[k>>0]=1,(c[j+64>>2]|0)==(l|0)):0)?(z=j+32|0,(c[z>>2]|0)==(m|0)?(c[z+4>>2]|0)==(n|0):0):0)a[j>>0]=1;j=c[j+24>>2]|0}while((j|0)!=0)}if(a[I>>0]&2?(z=f+32|0,(m|0)==(c[z>>2]|0)?(n|0)==(c[z+4>>2]|0):0):0){if(!(b[f+50>>1]|0))break;if((c[f+44>>2]|0)!=((c[g+32>>2]|0)+(c[g+28>>2]|0)|0))break;M=Ih(f,g)|0;Ra=N;return M|0}if((i|0)==0?(r=Xg(f,0,m,n,(h|0)!=0&1,C)|0,c[M>>2]=r,r|0):0){M=r;Ra=N;return M|0}}else{do if(!(h&2|i)){j=b[g+24>>1]|0;if(!(j<<16>>16)){j=g+8|0;j=th(f,c[g>>2]|0,c[j>>2]|0,c[j+4>>2]|0,(h|0)!=0&1,C)|0;c[M>>2]=j}else{c[G>>2]=k;c[G+4>>2]=c[g+20>>2];b[G+8>>1]=j;j=G+10|0;b[j>>1]=0;b[j+2>>1]=0;a[j+4>>0]=0;j=Xg(f,G,0,0,(h|0)!=0&1,C)|0;c[M>>2]=j}if(!j){j=c[C>>2]|0;break}else{M=j;Ra=N;return M|0}}else j=i;while(0);if((j|0)==0?(bg(f),y=f+32|0,n=c[y>>2]|0,z=g+8|0,(n|0)==(c[z>>2]|0)?(c[y+4>>2]|0)==(c[z+4>>2]|0):0):0){c[G+16>>2]=c[g>>2];c[G+28>>2]=n;c[G+32>>2]=0;M=Ih(f,G)|0;Ra=N;return M|0}}while(0);z=f+116|0;y=c[z>>2]|0;if((c[y+20>>2]|0)<0?(s=Jh(y)|0,c[M>>2]=s,s|0):0){M=s;Ra=N;return M|0}x=c[F+80>>2]|0;o=d[y+10>>0]|0;if(!(a[y+2>>0]|0)){m=c[g+8>>2]|0;l=c[g>>2]|0;do if(m>>>0>=128){j=x+o|0;k=((m|0)<0)<<31>>31;if(m>>>0<16384){w=bw(m|0,k|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=m&127;j=2;break}else{j=(wh(j,m,k)|0)&255;break}}else{a[x+o>>0]=m;j=1}while(0);r=m;n=j+o|0;q=m}else{q=c[g+28>>2]|0;n=(c[g+32>>2]|0)+q|0;p=c[g+16>>2]|0;do if(n>>>0>=128){j=x+o|0;k=((n|0)<0)<<31>>31;if(n>>>0<16384){w=bw(n|0,k|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=n&127;j=2;break}else{j=(wh(j,n,k)|0)&255;break}}else{a[x+o>>0]=n;j=1}while(0);m=j+o|0;j=x+m|0;l=g+8|0;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(l>>>0<0|(l|0)==0&k>>>0<128))if(l>>>0<0|(l|0)==0&k>>>0<16384){w=bw(k|0,l|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=k&127;j=2;break}else{j=wh(j,k,l)|0;break}else{a[j>>0]=k&127;j=1}while(0);r=n;n=j+m|0;l=p}k=x+n|0;j=e[y+14>>1]|0;d:do if((r|0)>(j|0)){i=e[y+16>>1]|0;v=c[y+52>>2]|0;w=v+36|0;m=(((r-i|0)>>>0)%(((c[w>>2]|0)+-4|0)>>>0)|0)+i|0;m=(m|0)>(j|0)?i:m;i=m+n|0;n=i+4|0;c[A>>2]=0;s=v+17|0;t=v+32|0;i=x+i|0;u=0;j=r;e:while(1){r=j;while(1){j=(r|0)>(m|0)?m:r;do if((q|0)<(j|0))if((q|0)>0){ew(k|0,l|0,q|0)|0;j=q;break}else{gw(k|0,0,j|0)|0;break}else ew(k|0,l|0,j|0)|0;while(0);r=r-j|0;if((r|0)<1){K=96;break e}l=l+j|0;q=q-j|0;m=m-j|0;if(!m)break;else k=k+j|0}c[B>>2]=0;p=c[A>>2]|0;if(!(a[s>>0]|0))j=p;else{m=1073741824/((c[t>>2]|0)>>>0)|0;j=p;do{o=j;j=j+1|0;if(j>>>0<2)k=0;else{k=o+-1|0;k=k-((k>>>0)%(((((c[w>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(m|0)?3:2)+k|0}}while((o|0)==(m|0)|(k|0)==(j|0));c[A>>2]=j}k=fg(v,B,A,j,0)|0;c[G>>2]=k;j=(k|0)==0;if(j&(a[s>>0]|0)!=0){j=c[A>>2]|0;ig(v,j,(p|0)==0?3:4,p,G);k=c[G>>2]|0;if(k){K=81;break}}else{if(!j)break;j=c[A>>2]|0}a[i>>0]=j>>>24;a[i+1>>0]=j>>>16;a[i+2>>0]=j>>>8;a[i+3>>0]=j;do if(u|0){j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{u=c[j+20>>2]|0;i=u+120|0;c[i>>2]=(c[i>>2]|0)+-1;u=u+136|0;c[j+16>>2]=c[u>>2];c[u>>2]=j;break}}while(0);u=c[B>>2]|0;k=u+56|0;i=c[k>>2]|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;k=(c[k>>2]|0)+4|0;m=(c[w>>2]|0)+-4|0;j=r}do if((K|0)==81){j=c[B>>2]|0;if(j){j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{f=c[j+20>>2]|0;g=f+120|0;c[g>>2]=(c[g>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;break}}}else if((K|0)==96){if(!u)break d;j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break d}else{B=c[j+20>>2]|0;A=B+120|0;c[A>>2]=(c[A>>2]|0)+-1;B=B+136|0;c[j+16>>2]=c[B>>2];c[B>>2]=j;break d}}while(0);do if(u|0){j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{f=c[j+20>>2]|0;g=f+120|0;c[g>>2]=(c[g>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;break}}while(0);c[M>>2]=k;M=k;Ra=N;return M|0}else{n=r+n|0;ew(k|0,l|0,q|0)|0;gw(k+q|0,0,r-q|0)|0;n=(n|0)>4?n:4}while(0);c[M>>2]=0;k=f+70|0;l=b[k>>1]|0;m=l&65535;j=c[C>>2]|0;if(!j){k=c[y+72>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[M>>2]=0;break}else{E=Ve(k)|0;K=112;break}else K=107;while(0);do if((K|0)==107){j=c[l+40>>2]|0;if(j|0){c[M>>2]=j;K=123;break}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){E=Wf(k)|0;K=112;break}else{E=Xf(k)|0;K=112;break}}while(0);if((K|0)==112?(c[M>>2]=E,E|0):0){j=E;K=123}if((K|0)==123){M=j;Ra=N;return M|0}j=(c[y+64>>2]|0)+(m<<1)|0;j=(c[y+56>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[y+26>>1])|0;if(!(a[y+8>>0]|0)){E=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[x>>0]=E;a[x+1>>0]=E>>8;a[x+2>>0]=E>>16;a[x+3>>0]=E>>24}k=Ah(y,j,G)|0;c[M>>2]=k;k=e[G+18>>1]|0;do if((n|0)==(k|0)?(c[G+12>>2]|0)==(e[G+16>>1]|0):0){if(a[F+17>>0]|0?(n|0)>=(e[y+16>>1]|0):0)break;if((j+n|0)>>>0>(c[y+60>>2]|0)>>>0){c[H>>2]=32306;c[H+4>>2]=71903;c[H+8>>2]=31517;Db(11,32001,H);j=11}else{ew(j|0,x|0,n|0)|0;j=0}M=j;Ra=N;return M|0}while(0);Kh(y,m,k,M);j=c[M>>2]|0;if(!j)j=m;else{M=j;Ra=N;return M|0}}else if((j|0)<0?(D=l+1<<16>>16,(b[y+24>>1]|0)!=0):0){b[k>>1]=D;a[I>>0]=a[I>>0]&-3;j=D&65535}else j=m;Lh(y,j,x,n,0,0,M);b[f+50>>1]=0;if(!(a[y+12>>0]|0)){M=c[M>>2]|0;Ra=N;return M|0}a[I>>0]=a[I>>0]&-3;k=Mh(f)|0;c[M>>2]=k;j=c[z>>2]|0;a[j+12>>0]=0;a[f>>0]=1;if(!((h&2|0)!=0&(k|0)==0)){M=k;Ra=N;return M|0}m=f+68|0;k=a[m>>0]|0;if(k<<24>>24>-1){if(k<<24>>24){l=0;j=k;do{k=c[(c[f+120+(l<<2)>>2]|0)+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);j=a[m>>0]|0}else{h=c[k+20>>2]|0;I=h+120|0;c[I>>2]=(c[I>>2]|0)+-1;h=h+136|0;c[k+16>>2]=c[h>>2];c[h>>2]=k}l=l+1|0}while((l|0)<(j<<24>>24|0));j=c[z>>2]|0}j=c[j+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{h=c[j+20>>2]|0;I=h+120|0;c[I>>2]=(c[I>>2]|0)+-1;h=h+136|0;c[j+16>>2]=c[h>>2];c[h>>2]=j}a[m>>0]=-1}m=g+8|0;f:do if(!(c[J>>2]|0))j=0;else{J=m;j=c[J>>2]|0;J=Sv(j|0,c[J+4>>2]|0,-1,-1)|0;h=L()|0;do if(h>>>0>0|(h|0)==0&J>>>0>2147483390)K=155;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](j)|0;c[f+16>>2]=j;if(!j)break}else{l=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0<j>>>0)c[14985]=j;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){K=c[14978]|0;J=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&J>>>0<=K>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){K=155;break}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;c[f+16>>2]=j}ew(j|0,c[g>>2]|0,c[m>>2]|0)|0;j=0;break f}while(0);if((K|0)==155)c[f+16>>2]=0;c[M>>2]=7;j=7}while(0);a[f>>0]=3;K=m;g=c[K+4>>2]|0;M=f+56|0;c[M>>2]=c[K>>2];c[M+4>>2]=g;M=j;Ra=N;return M|0}function bh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;N=Ra;Ra=Ra+48|0;B=N+24|0;i=N+40|0;M=N+36|0;x=N;q=c[f+8>>2]|0;r=q+4|0;C=c[r>>2]|0;j=g&2;do if((a[f>>0]|0)==3){c[i>>2]=0;a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{L=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-L;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=f+4|0;if(!h){if(c[g>>2]|0)D=12}else{c[g>>2]=h;D=12}if((D|0)==12?(a[f>>0]|0)==0:0)a[f>>0]=2;c[M>>2]=0;break}}c[M>>2]=g;M=g;Ra=N;return M|0}while(0);L=f+68|0;F=a[L>>0]|0;p=F<<24>>24;I=f+70|0;J=b[I>>1]|0;z=J&65535;K=f+116|0;G=c[K>>2]|0;m=(c[G+64>>2]|0)+(z<<1)|0;m=(c[G+56>>2]|0)+((d[m>>0]<<8|d[m+1>>0])&e[G+26>>1])|0;g=G+20|0;if((c[g>>2]|0)<0?Jh(G)|0:0){M=11;Ra=N;return M|0}H=j<<24>>24!=0;n=G+8|0;do if(H){if(a[n>>0]|0){k=c[g>>2]|0;i=m+(d[G+10>>0]|0)|0;A=a[i>>0]|0;h=A&255;if(A<<24>>24<0){g=0;h=h&127;do{g=g+1|0;A=a[i+g>>0]|0;h=h<<7|A&127}while(A<<24>>24<0&g>>>0<8);i=i+g|0;j=h}else j=h;if(!(a[G+2>>0]|0))g=i+1|0;else{g=1;do{A=g;g=g+1|0}while((a[i+A>>0]|0)<0&g>>>0<10);g=i+g|0}h=e[G+14>>1]|0;if(j>>>0>h>>>0){i=e[G+16>>1]|0;A=(((j-i|0)>>>0)%(((c[(c[G+52>>2]|0)+36>>2]|0)+-4|0)>>>0)|0)+i|0;g=(g-m&65535)+4+(A>>>0>h>>>0?i:A)|0}else{g=g-m+j|0;g=g>>>0>4?g:4}if((k+2+(g&65535)|0)<=((c[C+36>>2]<<1>>>0)/3|0|0)?(b[G+24>>1]|0)!=1:0){A=1;break}}g=ag(f)|0;c[M>>2]=g;if(g){M=g;Ra=N;return M|0}else A=0}else A=0;while(0);k=f+1|0;do if(!(a[n>>0]|0)){a[k>>0]=a[k>>0]&-15;b[f+50>>1]=0;if(((a[f>>0]|0)==0?(l=b[I>>1]|0,l<<16>>16):0)?a[(c[K>>2]|0)+8>>0]|0:0){b[I>>1]=l+-1<<16>>16;c[M>>2]=0;break}g=Hh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}}while(0);i=a[k>>0]|0;a:do if(i&32){j=c[f+64>>2]|0;g=c[C+8>>2]|0;b:do if(!g)D=51;else{c:do if(j){do{if((g|0)!=(f|0)?(c[g+64>>2]|0)==(j|0):0)break c;g=c[g+24>>2]|0}while((g|0)!=0);if(!f)break b;else{D=51;break b}}else{h=f+24|0;while(1){if((g|0)!=(f|0))break c;g=c[h>>2]|0;if(!g){D=51;break b}}}while(0);g=$f(g,j,f)|0;c[M>>2]=g;if(!g)break a;Ra=N;return g|0}while(0);if((D|0)==51)a[k>>0]=i&-33;c[M>>2]=0}while(0);if(((c[f+112>>2]|0)==0?(s=c[f+64>>2]|0,u=f+32|0,t=c[u>>2]|0,u=c[u+4>>2]|0,v=q+11|0,a[v>>0]|0):0)?(a[v>>0]=0,o=c[(c[r>>2]|0)+8>>2]|0,o|0):0){g=o;do{if((a[g+1>>0]&16?(a[v>>0]=1,(c[g+64>>2]|0)==(s|0)):0)?(r=g+32|0,(c[r>>2]|0)==(t|0)?(c[r+4>>2]|0)==(u|0):0):0)a[g>>0]=1;g=c[g+24>>2]|0}while((g|0)!=0)}h=c[G+72>>2]|0;i=c[h+20>>2]|0;do if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0)){c[M>>2]=0;break}else{w=Ve(h)|0;D=73;break}else D=68;while(0);do if((D|0)==68){g=c[i+40>>2]|0;if(g|0){c[M>>2]=g;M=g;Ra=N;return M|0}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){w=Wf(h)|0;D=73;break}else{w=Xf(h)|0;D=73;break}}while(0);if((D|0)==73?(c[M>>2]=w,w|0):0){M=w;Ra=N;return M|0}g=Ah(G,m,x)|0;c[M>>2]=g;Kh(G,z,e[x+18>>1]|0,M);g=c[M>>2]|0;if(g|0){M=g;Ra=N;return M|0}if(!(a[n>>0]|0)){o=c[K>>2]|0;if((c[o+20>>2]|0)<0?(y=Jh(o)|0,c[M>>2]=y,y|0):0){M=y;Ra=N;return M|0}l=c[(c[(((a[L>>0]|0)+-1|0)>(p|0)?f+120+(p+1<<2)|0:K)>>2]|0)+4>>2]|0;m=o+24|0;D=(c[o+64>>2]|0)+((e[m>>1]<<1)+-2)|0;D=(d[D>>0]<<8|d[D+1>>0])&e[o+26>>1];n=(c[o+56>>2]|0)+D|0;if(D>>>0<4){c[B>>2]=32306;c[B+4>>2]=72100;c[B+8>>2]=31517;Db(11,32001,B);M=11;Ra=N;return M|0}k=(Xa[c[o+76>>2]&255](o,n)|0)&65535;g=c[C+80>>2]|0;h=c[o+72>>2]|0;i=c[h+20>>2]|0;do if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0)){c[M>>2]=0;D=91;break}else{E=Ve(h)|0;D=90;break}else D=85;while(0);do if((D|0)==85){j=c[i+40>>2]|0;if(j|0){c[M>>2]=j;break}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){E=Wf(h)|0;D=90;break}else{E=Xf(h)|0;D=90;break}}while(0);if((D|0)==90?(c[M>>2]=E,(E|0)==0):0)D=91;if((D|0)==91)Lh(G,z,n+-4|0,k+4|0,g,l,M);Kh(o,(e[m>>1]|0)+-1|0,k,M);g=c[M>>2]|0;if(g|0){M=g;Ra=N;return M|0}}g=Mh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}g=a[L>>0]|0;if(g<<24>>24>F<<24>>24){h=c[(c[K>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[L>>0]|0}else{E=c[h+20>>2]|0;D=E+120|0;c[D>>2]=(c[D>>2]|0)+-1;E=E+136|0;c[h+16>>2]=c[E>>2];c[E>>2]=h}h=g+-1<<24>>24;a[L>>0]=h;g=h<<24>>24;if(h<<24>>24>F<<24>>24)do{h=h+-1<<24>>24;a[L>>0]=h;g=c[f+120+(g<<2)>>2]|0;do if(g){g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);h=a[L>>0]|0;break}else{E=c[g+20>>2]|0;D=E+120|0;c[D>>2]=(c[D>>2]|0)+-1;E=E+136|0;c[g+16>>2]=c[E>>2];c[E>>2]=g;break}}while(0);g=h<<24>>24}while(h<<24>>24>F<<24>>24);c[K>>2]=c[f+120+(g<<2)>>2];g=Mh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}}if(A|0){a[f>>0]=2;h=b[G+24>>1]|0;g=f+4|0;if((J&65535)<(h&65535)){c[g>>2]=1;M=0;Ra=N;return M|0}else{c[g>>2]=-1;b[I>>1]=(h&65535)+65535;M=0;Ra=N;return M|0}}g=xh(f)|0;c[M>>2]=g;if(H){h=a[L>>0]|0;if(h<<24>>24>-1){if(h<<24>>24){i=0;g=h;do{h=c[(c[f+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[L>>0]|0}else{J=c[h+20>>2]|0;I=J+120|0;c[I>>2]=(c[I>>2]|0)+-1;J=J+136|0;c[h+16>>2]=c[J>>2];c[J>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[K>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{K=c[g+20>>2]|0;J=K+120|0;c[J>>2]=(c[J>>2]|0)+-1;K=K+136|0;c[g+16>>2]=c[K>>2];c[K>>2]=g}a[L>>0]=-1;g=c[M>>2]|0}a[f>>0]=3}if((g|0)!=16){M=g;Ra=N;return M|0}c[M>>2]=0;M=0;Ra=N;return M|0}function ch(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=Ra;Ra=Ra+16|0;r=s;h=xh(f)|0;switch(h|0){case 0:{c[g>>2]=0;k=f+116|0;l=f+70|0;m=f+68|0;n=f+20|0;o=f+50|0;p=f+1|0;q=f+2|0;while(1){g=c[k>>2]|0;if(a[g+8>>0]|0){g=0;h=8;break}h=b[l>>1]|0;i=(c[g+64>>2]|0)+((h&65535)<<1)|0;i=(c[g+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[g+26>>1])|0;j=a[m>>0]|0;if(j<<24>>24>18){h=5;break}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];t=c[n>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;u=j<<24>>24;b[f+72+(u<<1)>>1]=h;c[f+120+(u<<2)>>2]=g;b[l>>1]=0;a[m>>0]=j+1<<24>>24;g=yh(t,i,k,f,d[q>>0]|0)|0;if(g|0){h=8;break}}if((h|0)==5){c[r>>2]=32306;c[r+4>>2]=68229;c[r+8>>2]=31517;Db(11,32001,r);u=11;Ra=s;return u|0}else if((h|0)==8){Ra=s;return g|0}break}case 16:{c[g>>2]=1;u=0;Ra=s;return u|0}default:{u=h;Ra=s;return u|0}}return 0}function dh(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=a+8|0;d=c[a+16>>2]|0;o=c[a+20>>2]|0;g=a+40|0;e=c[a+48>>2]|0;m=c[a+52>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;g=a+24|0;h=a+32|0;f=c[h>>2]|0;c[h>>2]=0;h=a+36|0;i=c[h>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0;c[g>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[a+28>>2]=0;k=(e|0)==0;if(!k){j=e;do{l=c[j+8>>2]|0;do if(l|0){Xi(0,c[l+28>>2]|0);f=c[l>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[l+4>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[l+12>>2]|0;if(f|0)ni(0,f);i=c[l+16>>2]|0;do if(i|0){h=i+4|0;f=c[i>>2]|0;if((c[h>>2]|0)>0){g=0;do{f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[i>>2]|0}while((g|0)<(c[h>>2]|0))}do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{p=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{p=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);j=c[j>>2]|0}while((j|0)!=0)}do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{p=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);if(!k)do{f=e;e=c[e>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}}while((e|0)!=0);c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;f=(d|0)==0;if(!f){e=d;do{g=c[e+8>>2]|0;if(g|0?(n=g+32|0,p=(c[n>>2]|0)+-1|0,c[n>>2]=p,(p|0)==0):0)Vi(0,g);e=c[e>>2]|0}while((e|0)!=0)}do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{p=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if(!f)do{e=d;d=c[d>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);e=a+56|0;f=a+64|0;d=c[f>>2]|0;c[f>>2]=0;f=a+68|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[f>>2]=0;c[e>>2]=0;if(d|0)do{e=d;d=c[d>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);c[a+60>>2]=0;c[a+72>>2]=0;d=a+78|0;e=b[d>>1]|0;if(!(e&1)){p=e&-10;b[d>>1]=p;return}p=a+4|0;c[p>>2]=(c[p>>2]|0)+1;p=e&-10;b[d>>1]=p;return}function eh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+48|0;x=G+16|0;C=G;A=G+24|0;F=f+165|0;a[F>>0]=1;w=(g|0)==1?34855:34585;c[C>>2]=w;c[C+4>>2]=34874;c[C+8>>2]=34876;c[C+12>>2]=0;c[A>>2]=f;c[A+8>>2]=g;y=A+12|0;c[y>>2]=0;c[A+4>>2]=h;c[A+16>>2]=i;c[A+20>>2]=0;fh(A,3,C,0)|0;i=c[y>>2]|0;a:do if(!i){z=f+16|0;u=c[z>>2]|0;C=u+(g<<4)+4|0;i=c[C>>2]|0;if(!i){f=(c[u+28>>2]|0)+78|0;b[f>>1]=b[f>>1]|1;f=0;a[F>>0]=0;Ra=G;return f|0}l=c[i>>2]|0;m=c[i+4>>2]|0;k=m+4|0;c[k>>2]=l;b:do if(!(a[i+8>>0]|0)){m=Zb(i,0,0)|0;switch(m|0){case 0:{l=c[C>>2]|0;m=c[l+4>>2]|0;B=1;k=m+4|0;l=c[l>>2]|0;break b}case 516:{l=50738;break}case 100:{l=50760;break}case 101:{l=50782;break}default:{j=m&255;if(j>>>0<29?(520028155>>>j&1|0)!=0:0)l=c[22960+(j<<2)>>2]|0;else l=50724}}j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}E=j;if((c[f+304>>2]|0)>>>0<=E>>>0?(c[f+308>>2]|0)>>>0>E>>>0:0){E=f+300|0;c[j>>2]=c[E>>2];c[E>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{E=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c:do if(l){k=(Eu(l)|0)+1|0;d:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=32;else{j=0;break c}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0<k>>>0:0))){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];E=f+284|0;c[E>>2]=(c[E>>2]|0)+1;break d}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];E=f+284|0;c[E>>2]=(c[E>>2]|0)+1;break d}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=32}while(0);if((D|0)==32)j=_d(f,k,0)|0;if(j)ew(j|0,l|0,k|0)|0;else j=0}else j=0;while(0);c[h>>2]=j;j=m;break a}else B=0;while(0);c[k>>2]=l;t=c[(c[m+12>>2]|0)+56>>2]|0;p=a[t+40>>0]|0;q=a[t+41>>0]|0;r=a[t+42>>0]|0;s=a[t+43>>0]|0;c[k>>2]=l;o=d[t+45>>0]<<16|d[t+44>>0]<<24|d[t+46>>0]<<8|d[t+47>>0];c[k>>2]=l;n=d[t+49>>0]<<16|d[t+48>>0]<<24|d[t+50>>0]<<8|d[t+51>>0];c[k>>2]=l;k=d[t+59>>0]|0;t=d[t+57>>0]<<16|d[t+56>>0]<<24|d[t+58>>0]<<8|k;v=f+32|0;u=u+(g<<4)+12|0;i=c[u>>2]|0;do if((c[v>>2]&33554432|0)==0&0==0){c[i>>2]=(q&255)<<16|(p&255)<<24|(r&255)<<8|s&255;if(t){if(!g){k=k&3;k=(k|0)==0?1:k&255;a[f+78>>0]=k;D=66;break}k=a[f+78>>0]|0;if((t|0)==(k&255|0))D=66;else{j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}A=j;if((c[f+304>>2]|0)>>>0<=A>>>0?(c[f+308>>2]|0)>>>0>A>>>0:0){A=f+300|0;c[j>>2]=c[A>>2];c[A>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);e:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=61;else j=0;else{do if((e[f+276>>1]|0)>=68){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=62;break e}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=62;break e}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=61}while(0);if((D|0)==61){j=_d(f,68,0)|0;D=62}if((D|0)==62)if(!j)j=0;else{i=j;k=34948;l=i+68|0;do{a[i>>0]=a[k>>0]|0;i=i+1|0;k=k+1|0}while((i|0)<(l|0))}c[h>>2]=j;j=1}}else D=65}else{c[i>>2]=0;n=0;o=0;D=65}while(0);if((D|0)==65){k=(c[(c[z>>2]|0)+(g<<4)+12>>2]|0)+78|0;b[k>>1]=b[k>>1]|4;k=a[f+78>>0]|0;D=66}do if((D|0)==66){a[i+77>>0]=k;k=i+80|0;if(!(c[k>>2]|0)){i=(n|0)>-1?n:(n|0)==-2147483648?2147483647:0-n|0;i=(i|0)==0?-2e3:i;c[k>>2]=i;c[m+4>>2]=l;k=c[(c[m>>2]|0)+212>>2]|0;c[k+16>>2]=i;l=c[7357]|0;m=c[k+44>>2]|0;if((i|0)<=-1){s=Yv(i|0,((i|0)<0)<<31>>31|0,-1024,-1)|0;t=L()|0;i=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;i=Wv(s|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0}bb[l&127](m,i);i=c[u>>2]|0}k=o&255;i=i+76|0;a[i>>0]=k;if(k<<24>>24){if((k&255)>4){j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}A=j;if((c[f+304>>2]|0)>>>0<=A>>>0?(c[f+308>>2]|0)>>>0>A>>>0:0){A=f+300|0;c[j>>2]=c[A>>2];c[A>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);f:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=92;else j=0;else{do if((e[f+276>>1]|0)>=24){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=93;break f}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=93;break f}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=92}while(0);if((D|0)==92){j=_d(f,24,0)|0;D=93}if((D|0)==93)if(!j)j=0;else{i=j;k=35016;l=i+24|0;do{a[i>>0]=a[k>>0]|0;i=i+1|0;k=k+1|0}while((i|0)<(l|0))}c[h>>2]=j;j=1;break}}else a[i>>0]=1;if((g|0)==0&(o|0)>3){t=v;u=c[t+4>>2]|0;h=v;c[h>>2]=c[t>>2]&-3;c[h+4>>2]=u}c[x>>2]=c[(c[z>>2]|0)+(g<<4)>>2];c[x+4>>2]=w;i=dd(f,35040,x)|0;h=f+312|0;x=c[h>>2]|0;c[h>>2]=0;k=nd(f,i,77,A,0)|0;c[h>>2]=x;k=(k|0)==0?c[y>>2]|0:k;do if(i|0){if(c[f+480>>2]|0){Xd(f,i);break}h=i;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[i>>2]=c[h>>2];c[h>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=(k|0)==0;if(i)gh(f,g)|0;if(!(a[f+81>>0]|0)){if(!i){j=k;D=112}}else{$b(f);j=7;D=112}if((D|0)==112?(c[v>>2]&134217728|0)==0&0==0:0)break;j=(c[(c[z>>2]|0)+(g<<4)+12>>2]|0)+78|0;b[j>>1]=b[j>>1]|1;j=0}while(0);if((B|0)!=0?(E=c[C>>2]|0,c[(c[E+4>>2]|0)+4>>2]=c[E>>2],(cc(E,0)|0)==0):0)bc(E,0)|0}else j=i;while(0);g:do if((j|0)>=7){if((j|0)<3082)switch(j|0){case 7:break;default:break g}else switch(j|0){case 3082:break;default:break g}i=f+81|0;if((a[i>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;i=f+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[f+236>>2]|0;if(i|0)c[i+12>>2]=7}}else{switch(j|0){case 0:break;default:break g}a[F>>0]=0;Ra=G;return j|0}while(0);if((g|0)>-1){h=c[f+16>>2]|0;g=(c[h+(g<<4)+12>>2]|0)+78|0;b[g>>1]=b[g>>1]|8;g=(c[h+28>>2]|0)+78|0;b[g>>1]=b[g>>1]|8;g=f+24|0;c[g>>2]=c[g>>2]&-17}if(c[f+56>>2]|0){f=j;a[F>>0]=0;Ra=G;return f|0}n=f+20|0;i=c[n>>2]|0;if((i|0)<=0){f=j;a[F>>0]=0;Ra=G;return f|0}m=f+16|0;l=0;do{k=c[(c[m>>2]|0)+(l<<4)+12>>2]|0;if(b[k+78>>1]&8){dh(k);i=c[n>>2]|0}l=l+1|0}while((l|0)<(i|0));a[F>>0]=0;Ra=G;return j|0}function fh(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+96|0;x=B+64|0;w=B+56|0;v=B+40|0;l=B+24|0;k=B+16|0;j=B;n=B+80|0;s=B+76|0;A=c[e>>2]|0;t=c[e+8>>2]|0;r=c[A+16>>2]|0;q=(c[r+(t<<4)+12>>2]|0)+78|0;b[q>>1]=b[q>>1]&-5;q=e+20|0;c[q>>2]=(c[q>>2]|0)+1;q=A+81|0;if(a[q>>0]|0){c[e+12>>2]=7;e=1;Ra=B;return e|0}if(!g){e=0;Ra=B;return e|0}u=c[g+4>>2]|0;if(!u){f=c[g>>2]|0;h=e+4|0;i=c[h>>2]|0;if(c[i>>2]|0){e=0;Ra=B;return e|0}if(c[e+16>>2]&1|0){c[i>>2]=0;c[e+12>>2]=1;e=0;Ra=B;return e|0}if(0==0?(c[A+32>>2]&1|0)==0:0){c[k>>2]=(f|0)==0?35133:f;g=dd(A,35135,k)|0;c[c[h>>2]>>2]=g;c[l>>2]=32306;c[l+4>>2]=123732;c[l+8>>2]=31517;Db(11,32001,l);c[e+12>>2]=11;e=0;Ra=B;return e|0}else{c[j>>2]=32306;c[j+4>>2]=123725;c[j+8>>2]=31517;Db(11,32001,j);c[e+12>>2]=11;e=0;Ra=B;return e|0}}i=g+8|0;k=c[i>>2]|0;l=(k|0)==0;do if(!l){f=a[k>>0]|0;do if(!(f<<24>>24)){f=35095;o=13}else{j=f&255;f=208+j|0;if((j|32|0)==99){f=a[k+1>>0]|0;if(!(f<<24>>24)){f=35096;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==114){f=a[k+2>>0]|0;if(!(f<<24>>24)){f=35097;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==101){f=a[k+3>>0]|0;if(!(f<<24>>24)){f=35098;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==97){f=a[k+4>>0]|0;if(!(f<<24>>24)){f=35099;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==116){f=a[k+5>>0]|0;if(!(f<<24>>24)){f=35100;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==101){f=a[k+6>>0]|0;if(!(f<<24>>24)){f=35101;o=13;break}if(f<<24>>24==32)break;else{h=32;f=208+(f&255)|0}}else h=101}else h=116}else h=97}else h=101}else h=114}else h=99;p=d[f>>0]|0;m=h;o=17}while(0);if((o|0)==13){p=0;m=a[208+(d[f>>0]|0)>>0]|0;o=17}if((o|0)==17?(p|0)!=(m&255|0):0)break;y=A+164|0;x=a[y>>0]|0;a[y>>0]=t;c[n>>2]=0;ii(u,n)|0;c[A+160>>2]=c[n>>2];z=A+166|0;a[z>>0]=a[z>>0]&-2;qd(A,c[i>>2]|0,-1,0,0,s,0)|0;f=c[A+64>>2]|0;a[y>>0]=x;a:do if(f|0?(a[z>>0]&1)==0:0){c[e+12>>2]=f;switch(f|0){case 9:break a;case 7:break;default:{if((f&255|0)==6)break a;gi(e,c[g>>2]|0,pd(A)|0);break a}}if((a[q>>0]|0)==0?(a[A+82>>0]|0)==0:0){a[q>>0]=1;if((c[A+180>>2]|0)>0)c[A+264>>2]=1;f=A+272|0;c[f>>2]=(c[f>>2]|0)+1;f=c[A+236>>2]|0;if(f|0)c[f+12>>2]=7}}while(0);gc(c[s>>2]|0)|0;e=0;Ra=B;return e|0}while(0);i=c[g>>2]|0;j=(i|0)==0;do if(!j){if(!l?a[k>>0]|0:0)break;h=hi(A,i,c[r+(t<<4)>>2]|0)|0;i=(h|0)==0;b:do if((!i?(y=h+44|0,ii(u,y)|0):0)?(z=c[y>>2]|0,(z|0)>=2):0){f=c[(c[h+12>>2]|0)+8>>2]|0;if(!f){e=0;Ra=B;return e|0}while(1){if(!((f|0)==(h|0)?1:(c[f+44>>2]|0)!=(z|0)))break b;f=c[f+20>>2]|0;if(!f){f=0;break}}Ra=B;return f|0}while(0);gi(e,c[g>>2]|0,i?35120:35103);e=0;Ra=B;return e|0}while(0);f=e+4|0;h=c[f>>2]|0;if(c[h>>2]|0){e=0;Ra=B;return e|0}if(c[e+16>>2]&1|0){c[h>>2]=0;c[e+12>>2]=1;e=0;Ra=B;return e|0}if(0==0?(c[A+32>>2]&1|0)==0:0){c[w>>2]=j?35133:i;g=dd(A,35135,w)|0;c[c[f>>2]>>2]=g;c[x>>2]=32306;c[x+4>>2]=123732;c[x+8>>2]=31517;Db(11,32001,x);c[e+12>>2]=11;e=0;Ra=B;return e|0}else{c[v>>2]=32306;c[v+4>>2]=123725;c[v+8>>2]=31517;Db(11,32001,v);c[e+12>>2]=11;e=0;Ra=B;return e|0}return 0}function gh(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+16|0;k=m;l=m+8|0;j=e+16|0;g=c[j>>2]|0;i=c[g+(f<<4)+12>>2]|0;h=c[i+16>>2]|0;if(h|0)do{n=(c[h+8>>2]|0)+36|0;c[n>>2]=c[n>>2]&-17;h=c[h>>2]|0}while((h|0)!=0);i=i+32|0;h=c[i>>2]|0;if(h){g=h;do{n=(c[g+8>>2]|0)+55|0;h=(d[n>>0]|d[n+1>>0]<<8)&-129;a[n>>0]=h;a[n+1>>0]=h>>8;g=c[g>>2]|0}while((g|0)!=0);g=c[j>>2]|0}c[l>>2]=e;g=c[g+(f<<4)>>2]|0;c[l+4>>2]=g;do if(Sd(e,35174,g)|0){c[k>>2]=g;h=dd(e,35187,k)|0;if(h){g=nd(e,h,78,l,0)|0;if(c[e+480>>2]|0){Xd(e,h);l=g;break}n=h;if((c[e+304>>2]|0)>>>0<=n>>>0?(c[e+308>>2]|0)>>>0>n>>>0:0){l=e+300|0;c[h>>2]=c[l>>2];c[l>>2]=h;l=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);l=g;break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);l=g;break}}else l=7}else l=0;while(0);g=c[i>>2]|0;if(g|0)do{f=c[g+8>>2]|0;n=f+55|0;if(!((d[n>>0]|d[n+1>>0]<<8)&128)){k=c[f+8>>2]|0;j=f+50|0;i=b[j>>1]|0;i=(i&65535)<5?i:5;h=b[(c[f+12>>2]|0)+44>>1]|0;b[k>>1]=h;if(c[f+36>>2]|0){h=(h&65535)+65526&65535;b[k>>1]=h}if(h<<16>>16<33)b[k>>1]=33;ew(k+2|0,31120,i<<1&65535|0)|0;n=b[j>>1]|0;h=n&65535;if((i&65535)<(n&65535)){h=i&65535;do{h=h+1|0;b[k+(h<<1)>>1]=23;i=b[j>>1]|0}while(h>>>0<(i&65535)>>>0);h=i&65535}if(a[f+54>>0]|0)b[k+(h<<1)>>1]=0}g=c[g>>2]|0}while((g|0)!=0);if((l|0)!=7){Ra=m;return l|0}g=e+81|0;if(a[g>>0]|0){Ra=m;return l|0}if(a[e+82>>0]|0){Ra=m;return l|0}a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;g=e+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[e+236>>2]|0;if(!g){Ra=m;return l|0}c[g+12>>2]=7;Ra=m;return l|0}function hh(d){d=d|0;var f=0,g=0,h=0,i=0,j=0;i=c[d+32>>2]|0;j=d+8|0;if(!((b[j>>1]&9216)==0?!(c[d+24>>2]|0):0))Cg(d);a:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))h=14;else{j=7;return j|0}else{do if((e[i+276>>1]|0)>=32){f=i+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];f=i+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}f=i+296|0;g=c[f>>2]|0;if(!g){f=i+292|0;break}else{c[f>>2]=c[g>>2];f=i+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}}else f=i+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;h=14}while(0);if((h|0)==14)g=_d(i,32,0)|0;if(!g){j=7;return j|0}h=g;if((c[i+304>>2]|0)>>>0<=h>>>0?(c[i+308>>2]|0)>>>0>h>>>0:0)f=e[i+276>>1]|0;else f=Wa[c[29352>>2]&127](g)|0;c[g>>2]=0;c[g+4>>2]=i;c[g+8>>2]=0;c[g+12>>2]=0;c[g+20>>2]=0;c[g+16>>2]=g+32;b[g+24>>1]=(f+1048544|0)>>>4;b[g+26>>1]=1;c[g+28>>2]=0;c[d+16>>2]=g;b[j>>1]=1040;c[d+36>>2]=94;j=0;return j|0}function ih(a){a=a|0;var b=0;b=(c[a>>2]|0)+200|0;c[a+4>>2]=c[b>>2];c[b>>2]=a;return}function jh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=b+5|0;f=a[k>>0]|0;if(!(a[b+15>>0]|0))j=3;else switch(e|0){case 2:case 4:{j=3;break}default:{}}do if((j|0)==3?(g=f&255,(g|0)!=(e|0)):0){a[k>>0]=e;if(!((e&1|0)==0&((g&5|0)==1&(a[b+4>>0]|0)==0))){if((e|0)!=2)break;e=c[b+64>>2]|0;f=c[e>>2]|0;if(!f)break;Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0;break}e=c[b+64>>2]|0;f=c[e>>2]|0;if(f|0){Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0}i=b+17|0;if((d[i>>0]|0)>1){j=c[b>>2]|0;Ya[c[j+28>>2]&127](j,c[b+172>>2]|0,0)|0;break}e=b+16|0;g=a[e>>0]|0;h=g<<24>>24==0;if(h){f=Sf(b)|0;e=a[e>>0]|0}else{f=0;e=g}a:do if(e<<24>>24==1){e=a[i>>0]|0;switch(e<<24>>24){case 0:case 1:case 5:break;default:{j=19;break a}}if(!(a[b+13>>0]|0)){f=c[b+60>>2]|0;if(Xa[c[(c[f>>2]|0)+28>>2]&255](f,2)|0)break;e=a[i>>0]|0}if(e<<24>>24==5)j=19;else{a[i>>0]=2;j=19}}else if(!f)j=19;while(0);if((j|0)==19?(j=c[b>>2]|0,Ya[c[j+28>>2]&127](j,c[b+172>>2]|0,0)|0,g<<24>>24==1):0){e=c[b+60>>2]|0;f=c[e>>2]|0;if(!f)break;if(!(a[b+13>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[i>>0]|0)==5)break;a[i>>0]=1;break}if(h)vf(b)}while(0);return d[k>>0]|0}function kh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+80|0;A=T+32|0;y=T+24|0;x=T+16|0;w=T+8|0;q=T;S=g+79|0;if(!(a[S>>0]|0)){j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=21;else j=0;else{do if((e[g+276>>1]|0)>=40){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=22;break a}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=22;break a}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=21}while(0);if((R|0)==21){j=_d(g,40,0)|0;R=22}if((R|0)==22)if(!j)j=0;else{l=j;k=36072;n=l+40|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}if((c[g+168>>2]|0)>1){j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);b:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=45;else j=0;else{do if((e[g+276>>1]|0)>=43){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=46;break b}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=46;break b}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=45}while(0);if((R|0)==45){j=_d(g,43,0)|0;R=46}if((R|0)==46)if(!j)j=0;else{l=j;k=36112;n=l+43|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}m=g+60|0;n=c[m>>2]|0;p=(i|0)!=0;do if(p){j=b[i+8>>1]|0;if((j&15|16)<<16>>16==18){if((j&514)==514?(a[i+10>>0]|0)==1:0){j=c[i+16>>2]|0;k=n}else if(!(j&1)){j=Gg(i,1)|0;k=c[m>>2]|0}else{j=0;k=n}c[m>>2]=k&-8|6;break}j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=70;else j=0;else{do if((e[g+276>>1]|0)>=18){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=71;break c}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=71;break c}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=70}while(0);if((R|0)==70){j=_d(g,18,0)|0;R=71}if((R|0)==71)if(!j)j=0;else{l=j;k=36155;n=l+18|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}else j=59952;while(0);E=g+32|0;G=E;F=c[G>>2]|0;G=c[G+4>>2]|0;H=g+24|0;I=c[H>>2]|0;J=g+100|0;K=c[J>>2]|0;M=g+104|0;N=c[M>>2]|0;O=g+88|0;P=a[O>>0]|0;c[H>>2]=I|6;o=E;c[o>>2]=F&-268456578|513;c[o+4>>2]=G;a[O>>0]=0;o=g+16|0;Q=c[o>>2]|0;v=c[Q+(h<<4)>>2]|0;Q=c[Q+(h<<4)+4>>2]|0;D=Q+4|0;r=a[(c[c[D>>2]>>2]|0)+12>>0]|0;u=c[g+20>>2]|0;c[q>>2]=j;j=yi(g,f,36173,q)|0;c[m>>2]=n;d:do if(!j){j=c[o>>2]|0;C=j+(u<<4)|0;z=c[j+(u<<4)+4>>2]|0;B=z+4|0;if(p){k=c[(c[c[B>>2]>>2]|0)+60>>2]|0;m=q;c[m>>2]=0;c[m+4>>2]=0;m=c[k>>2]|0;do if(m){n=(Xa[c[m+24>>2]&255](k,q)|0)!=0;p=c[q+4>>2]|0;if(!(n|((p|0)>0|(p|0)==0&(c[q>>2]|0)>>>0>0))){j=c[o>>2]|0;break}j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}B=j;if((c[g+304>>2]|0)>>>0<=B>>>0?(c[g+308>>2]|0)>>>0>B>>>0:0){B=g+300|0;c[j>>2]=c[B>>2];c[B>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{B=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);e:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=104;else j=0;else{do if((e[g+276>>1]|0)>=27){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=105;break e}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=105;break e}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=104}while(0);if((R|0)==104){j=_d(g,27,0)|0;R=105}if((R|0)==105)if(!j)j=0;else{l=j;k=36196;n=l+27|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;m=C;l=1;break d}while(0);c[H>>2]=c[H>>2]|8}m=c[D>>2]|0;c[m+4>>2]=c[Q>>2];m=(c[m+32>>2]|0)-(c[m+36>>2]|0)|0;j=c[(c[j+(h<<4)+12>>2]|0)+80>>2]|0;k=c[B>>2]|0;c[k+4>>2]=c[z>>2];k=c[(c[k>>2]|0)+212>>2]|0;c[k+16>>2]=j;n=c[7357]|0;o=c[k+44>>2]|0;if((j|0)<=-1){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}bb[n&127](o,j);k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];k=c[(c[k>>2]|0)+212>>2]|0;j=c[k+16>>2]|0;if((j|0)<=-1){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}p=c[k+20>>2]|0;j=(j|0)<(p|0)?p:j;p=c[B>>2]|0;n=c[z>>2]|0;o=p+4|0;c[o>>2]=n;p=c[p>>2]|0;k=c[p+212>>2]|0;if(j|0){if((j|0)<0){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}c[k+20>>2]=j}c[o>>2]=n;a[p+7>>0]=1;j=p+20|0;c[p+8>>2]=0;a[j>>0]=a[j>>0]&-2;j=zi(g,f,36223)|0;if(!j){h=(i|0)==0;j=Zb(Q,h?2:0,0)|0;if(!j){j=c[D>>2]|0;if((a[(c[j>>2]|0)+5>>0]|0)==5)c[g+92>>2]=0;j=c[j+32>>2]|0;o=c[B>>2]|0;c[o+4>>2]=c[z>>2];if(!(b[o+22>>1]&2)){i=(m|0)<0;if(i)n=(c[o+32>>2]|0)-(c[o+36>>2]|0)|0;else n=m;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[o+32>>2]=j,t=o+80|0,s=c[t>>2]|0,s|0):0){k=s+-4|0;c[t>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;s=(c[14820]|0)+1|0;c[14820]=s;c[14821]=(s|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=132;break}else{j=Wa[c[29352>>2]&127](k)|0;R=132}while(0);do if((R|0)==132){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[t>>2]=0}s=o+32|0;t=Se(c[o>>2]|0,s,n)|0;c[o+36>>2]=(c[s>>2]|0)-(n&65535);if(!t){if(!(r<<24>>24)){j=c[g+92>>2]|0;p=c[B>>2]|0;c[p+4>>2]=c[z>>2];if(b[p+22>>1]&2){m=C;l=7;break}if(i)o=(c[p+32>>2]|0)-(c[p+36>>2]|0)|0;else o=m;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[p+32>>2]=j;n=p+80|0;j=c[n>>2]|0;if(!j)break;k=j+-4|0;c[n>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=149;break}else{j=Wa[c[29352>>2]&127](k)|0;R=149}while(0);do if((R|0)==149){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[n>>2]=0}while(0);s=p+32|0;t=Se(c[p>>2]|0,s,o)|0;c[p+36>>2]=(c[s>>2]|0)-(o&65535);if(t|0){m=C;l=7;break}}if(!(a[g+81>>0]|0)){j=a[g+84>>0]|0;do if(j<<24>>24>-1)j=j<<24>>24;else{j=c[D>>2]|0;c[j+4>>2]=c[Q>>2];if(!(a[j+17>>0]|0)){j=0;break}j=(a[j+18>>0]|0)==0?1:2}while(0);n=c[B>>2]|0;c[n+4>>2]=c[z>>2];k=j&255;if(b[n+22>>1]&2){j=n+17|0;if(((k|0)!=0|0)==(d[j>>0]|0))R=162}else{j=n+17|0;R=162}if((R|0)==162){a[j>>0]=(k|0)!=0&1;a[n+18>>0]=(k|0)==2&1}k=g+164|0;a[k>>0]=u;c[w>>2]=v;j=yi(g,f,36229,w)|0;if(j|0){m=C;l=j;break}c[x>>2]=v;j=yi(g,f,36337,x)|0;if(j|0){m=C;l=j;break}a[k>>0]=0;c[y>>2]=v;j=yi(g,f,36391,y)|0;c[H>>2]=c[H>>2]&-5;if(j|0){m=C;l=j;break}c[A>>2]=v;j=yi(g,f,36542,A)|0;if(j|0){m=C;l=j;break}j=0;do{k=d[36672+j>>0]|0;n=c[D>>2]|0;c[n+4>>2]=c[Q>>2];k=(k<<2)+36|0;n=(c[(c[n+12>>2]|0)+56>>2]|0)+k|0;n=(d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0])+(d[36672+(j|1)>>0]|0)|0;p=c[B>>2]|0;c[p+4>>2]=c[z>>2];p=c[p+12>>2]|0;o=c[p+56>>2]|0;p=c[p+72>>2]|0;q=c[p+20>>2]|0;do if(!(b[p+28>>1]&4))R=172;else{if((c[q+24>>2]|0)>>>0<(c[p+24>>2]|0)>>>0){R=172;break}if(!(c[q+96>>2]|0))break;l=Ve(p)|0;R=176}while(0);do if((R|0)==172){l=c[q+40>>2]|0;if(l|0){m=C;break d}if((c[q+148>>2]|0)>>>0>(c[q+152>>2]|0)>>>0){l=Wf(p)|0;R=176;break}else{l=Xf(p)|0;R=176;break}}while(0);if((R|0)==176?(R=0,l|0):0){m=C;break d}f=o+k|0;a[f>>0]=n>>>24;a[f+1>>0]=n>>>16;a[f+2>>0]=n>>>8;a[f+3>>0]=n;j=j+2|0}while(j>>>0<10);f:do if(h){k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];j=c[z>>2]|0;l=c[B>>2]|0;c[l+4>>2]=j;k=c[(c[k>>2]|0)+60>>2]|0;n=c[k>>2]|0;do if(!n)R=182;else{x=c[l+32>>2]|0;x=Yv(c[l+44>>2]|0,0,x|0,((x|0)<0)<<31>>31|0)|0;f=L()|0;j=y;c[j>>2]=x;c[j+4>>2]=f;j=Ya[c[n+40>>2]&127](k,11,y)|0;j=(j|0)==12?0:j;if(j|0)break;j=c[z>>2]|0;R=182}while(0);do if((R|0)==182){l=A;n=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));c[A+20>>2]=j;c[A+24>>2]=z;j=A+4|0;c[j>>2]=Q;c[A+16>>2]=1;Yb(A,2147483647)|0;k=dc(A)|0;if(!k){f=(c[D>>2]|0)+22|0;b[f>>1]=b[f>>1]&-3;break f}j=c[c[(c[j>>2]|0)+4>>2]>>2]|0;if(a[j+12>>0]|0){j=k;break}Ff(j);j=k}while(0);m=C;l=j;break d}while(0);c[(c[B>>2]|0)+4>>2]=c[z>>2];l=cc(z,0)|0;if(l|0){m=C;break}l=bc(z,0)|0;k=(l|0)!=0;j=h^1;do if(k|j)k=k?2:0;else{j=c[B>>2]|0;c[j+4>>2]=c[z>>2];if(!(a[j+17>>0]|0))l=0;else l=(a[j+18>>0]|0)==0?1:2;k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];if(b[k+22>>1]&2){j=k+17|0;if(((l|0)!=0|0)!=(d[j>>0]|0)){k=0;l=0;j=0;break}}else j=k+17|0;a[j>>0]=(l|0)!=0&1;a[k+18>>0]=(l|0)==2&1;k=0;l=0;j=0}while(0);if(j|(k&3)!=0){m=C;break}j=c[(c[B>>2]|0)+32>>2]|0;n=c[D>>2]|0;c[n+4>>2]=c[Q>>2];o=n+22|0;if(b[o>>1]&2){m=C;l=8;break}if(i)m=(c[n+32>>2]|0)-(c[n+36>>2]|0)|0;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[n+32>>2]=j;l=n+80|0;j=c[l>>2]|0;if(!j)break;k=j+-4|0;c[l>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;f=(c[14820]|0)+1|0;c[14820]=f;c[14821]=(f|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=207;break}else{j=Wa[c[29352>>2]&127](k)|0;R=207}while(0);do if((R|0)==207){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[l>>2]=0}while(0);R=n+32|0;l=Se(c[n>>2]|0,R,m)|0;c[n+36>>2]=(c[R>>2]|0)-(m&65535);b[o>>1]=b[o>>1]|2;m=C}else{m=C;l=7}}else{m=C;l=7}}else{m=C;l=7}}else{m=C;l=j}}else{m=C;l=j}}else{m=0;l=j}while(0);a[g+164>>0]=0;c[H>>2]=I;k=E;c[k>>2]=F;c[k+4>>2]=G;c[J>>2]=K;c[M>>2]=N;a[O>>0]=P;k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];j=k+22|0;if(!(b[j>>1]&2)){P=k+32|0;R=k+36|0;Q=(c[P>>2]|0)-(c[R>>2]|0)|0;Se(c[k>>2]|0,P,Q)|0;c[R>>2]=(c[P>>2]|0)-(Q&65535);b[j>>1]=b[j>>1]|2}a[S>>0]=1;if(m|0){S=m+4|0;ug(c[S>>2]|0);c[S>>2]=0;c[m+12>>2]=0}$b(g);g=l;Ra=T;return g|0}function lh(a){a=a|0;var c=0;c=a+8|0;if(!(b[c>>1]&9216)){b[c>>1]=1;b[c>>1]=4;return a|0}else{Dg(a);b[c>>1]=4;return a|0}return 0}function mh(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=a+8|0;do Dg(a);while((b[f>>1]&9216)!=0);c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];if(b[d+8>>1]&2048)return;b[f>>1]=b[f>>1]&-7169&65535|e;return}function nh(d){d=d|0;var e=0,f=0,g=0,h=0;g=d+8|0;f=b[g>>1]|0;h=d+12|0;do if(f&16384){e=(c[d>>2]|0)+(c[h>>2]|0)|0;if((e|0)<1)if(!(f&16))break;else e=1;if(!(Eg(d,e,1)|0)){gw((c[d+16>>2]|0)+(c[h>>2]|0)|0,0,c[d>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+(c[d>>2]|0);b[g>>1]=b[g>>1]&-16897}}while(0);e=d+16|0;f=d+10|0;if(!(Lg(c[e>>2]|0,d,c[h>>2]|0,a[f>>0]|0)|0)){d=0;return d|0}d=(Og(c[e>>2]|0,d,c[h>>2]|0,a[f>>0]|0)|0)==0;d=d?4:8;return d|0}function oh(d){d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;l=o+8|0;m=o;n=d+8|0;e=b[n>>1]|0;if(e&13){m=e;m=m&-16403;b[n>>1]=m;Ra=o;return}j=d+16|0;k=d+12|0;e=d+10|0;f=Og(c[j>>2]|0,d,c[k>>2]|0,a[e>>0]|0)|0;if(f){i=d;h=c[i>>2]|0;i=c[i+4>>2]|0;Lg(c[j>>2]|0,d,c[k>>2]|0,a[e>>0]|0)|0;if((f|0)==1?(g[l>>3]=+g[d>>3],g[m>>3]=+(h>>>0)+4294967296.0*+(i|0),(Lu(l,m,8)|0)==0):0){e=d;c[e>>2]=h;c[e+4>>2]=i;e=4}else e=8}else e=4;m=b[n>>1]&15904|e;b[n>>1]=m;m=m&-16403;b[n>>1]=m;Ra=o;return}function ph(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+80|0;n=p+40|0;o=p;i=f+4|0;h=a[i>>0]|0;if((a[d+10>>0]|0)==h<<24>>24){o=_a[c[f+12>>2]&127](c[f+8>>2]|0,c[d+12>>2]|0,c[d+16>>2]|0,c[e+12>>2]|0,c[e+16>>2]|0)|0;Ra=p;return o|0}m=c[d+32>>2]|0;j=n+8|0;c[n+32>>2]=m;k=n+24|0;c[k>>2]=0;l=o+8|0;b[l>>1]=1;c[o+32>>2]=m;m=o+24|0;c[m>>2]=0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[n+16>>2]=c[d+16>>2];if(!(b[d+8>>1]&2048))b[j>>1]=b[j>>1]&-7169|4096;c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];c[o+16>>2]=c[e+16>>2];if(!(b[e+8>>1]&2048))b[l>>1]=b[l>>1]&-7169|4096;d=b[j>>1]|0;if((d&514)==514?(a[n+10>>0]|0)==h<<24>>24:0)e=c[n+16>>2]|0;else if(!(d&1)){e=Gg(n,h)|0;h=a[i>>0]|0}else e=0;d=b[l>>1]|0;if((d&514)==514?(a[o+10>>0]|0)==h<<24>>24:0){d=c[o+16>>2]|0;h=17}else if(!(d&1)){d=Gg(o,h)|0;h=17}else h=18;if((h|0)==17)if((e|0)==0|(d|0)==0)h=18;else d=_a[c[f+12>>2]&127](c[f+8>>2]|0,c[n+12>>2]|0,e,c[o+12>>2]|0,d)|0;if((h|0)==18)if(!g)d=0;else{a[g>>0]=7;d=0}if(!((b[j>>1]&9216)==0&(c[k>>2]|0)==0))Cg(n);if(!((b[l>>1]&9216)==0&(c[m>>2]|0)==0))Cg(o);o=d;Ra=p;return o|0}function qh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=c[d+12>>2]|0;i=c[e+12>>2]|0;f=b[d+8>>1]|0;g=b[e+8>>1]|0;if(!((g|f)&16384)){e=Lu(c[d+16>>2]|0,c[e+16>>2]|0,(h|0)>(i|0)?i:h)|0;return ((e|0)==0?h-i|0:e)|0}f=f&16384;if((f&g)<<16>>16){i=(c[d>>2]|0)-(c[e>>2]|0)|0;return i|0}if(!(f<<16>>16)){g=c[d+16>>2]|0;a:do if((h|0)>0){f=0;while(1){if(a[g+f>>0]|0){f=1;break}f=f+1|0;if((f|0)>=(h|0))break a}return f|0}while(0);i=h-(c[e>>2]|0)|0;return i|0}else{g=c[e+16>>2]|0;b:do if((i|0)>0){f=0;while(1){if(a[g+f>>0]|0){f=-1;break}f=f+1|0;if((f|0)>=(i|0))break b}return f|0}while(0);i=(c[d>>2]|0)-i|0;return i|0}return 0}function rh(b){b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;f=g;d=g+12|0;e=b+64|0;e=Xg(c[b+40>>2]|0,0,c[e>>2]|0,c[e+4>>2]|0,0,d)|0;if(e|0){f=e;Ra=g;return f|0}if(!(c[d>>2]|0)){a[b+3>>0]=0;c[b+28>>2]=0;f=0;Ra=g;return f|0}else{c[f>>2]=32306;c[f+4>>2]=79626;c[f+8>>2]=31517;Db(11,32001,f);f=11;Ra=g;return f|0}return 0}function sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;f=i;g=c[b+40>>2]|0;d=a[g>>0]|0;do if((d&255)>2){c[f>>2]=0;if(d<<24>>24==4){d=c[g+4>>2]|0;if(!d)d=0;else h=19}else{a[g>>0]=1;d=c[7389]|0;if((d|0)!=0?(Wa[d&127](410)|0)!=0:0)d=10;else{e=g+16|0;d=g+56|0;d=th(g,c[e>>2]|0,c[d>>2]|0,c[d+4>>2]|0,0,f)|0;if(!d){d=c[e>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{j=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[e>>2]=0;e=c[f>>2]|0;d=g+4|0;if(!e)if(!(c[d>>2]|0))d=a[g>>0]|0;else h=14;else{c[d>>2]=e;h=14}if((h|0)==14){d=a[g>>0]|0;if(!(d<<24>>24)){a[g>>0]=2;d=2}}h=20;break}}h=19}c[b+28>>2]=0}else h=20;while(0);if((h|0)==20){c[b+28>>2]=0;if(!(d<<24>>24)){j=0;Ra=i;return j|0}else d=0}a[b+2>>0]=1;j=d;Ra=i;return j|0}function th(d,f,g,h,i,j){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;r=t;if(!f){s=Xg(d,0,g,h,i,j)|0;Ra=t;return s|0}s=d+112|0;q=c[s>>2]|0;p=q+6|0;n=((e[p>>1]|0)*40|0)+56|0;m=c[q+12>>2]|0;a:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;o=26;break}m=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0<n>>>0)c[14985]=n;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){n=c[14978]|0;l=Tv(k|0,l|0,m|0,((m|0)<0)<<31>>31|0)|0;k=L()|0;c[14768]=((k|0)<0|(k|0)==0&l>>>0<=n>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){s=7;Ra=t;return s|0}k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){s=7;Ra=t;return s|0}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0<n>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];o=m+284|0;c[o>>2]=(c[o>>2]|0)+1;o=26;break a}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];o=m+284|0;c[o>>2]=(c[o>>2]|0)+1;o=26;break a}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;o=26}while(0);if((o|0)==26)if(!k){s=7;Ra=t;return s|0}else m=k;c[m+4>>2]=m+16;c[m>>2]=q;o=m+8|0;b[o>>1]=(e[p>>1]|0)+1;_g(q,g,f,m);p=b[o>>1]|0;if(p<<16>>16!=0?(p&65535)<=(e[q+8>>1]|0):0)l=Xg(d,m,g,h,i,j)|0;else{c[r>>2]=32306;c[r+4>>2]=64001;c[r+8>>2]=31517;Db(11,32001,r);l=11}k=c[(c[s>>2]|0)+12>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,m);s=l;Ra=t;return s|0}s=m;if((c[k+304>>2]|0)>>>0<=s>>>0?(c[k+308>>2]|0)>>>0>s>>>0:0){s=k+300|0;c[m>>2]=c[s>>2];c[s>>2]=m;s=l;Ra=t;return s|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);s=l;Ra=t;return s|0}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);s=l;Ra=t;return s|0}return 0}function uh(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;h=l;k=g+8|0;b[k>>1]=1;j=c[d+20>>2]|0;j=Yv(c[j+44>>2]|0,0,c[j+32>>2]|0,0)|0;i=L()|0;if(i>>>0<0|(i|0)==0&j>>>0<(f+e|0)>>>0){c[h>>2]=32306;c[h+4>>2]=75549;c[h+8>>2]=31517;Db(11,32001,h);k=11;Ra=l;return k|0}h=f+1|0;j=g+24|0;do if((c[j>>2]|0)<(h|0)){h=Eg(g,h,0)|0;if(!h){h=g+16|0;i=h;h=c[h>>2]|0;break}else{k=h;Ra=l;return k|0}}else{h=c[g+20>>2]|0;i=g+16|0;c[i>>2]=h;b[k>>1]=1}while(0);h=cg(d,e,f,h,0)|0;if(!h){a[(c[i>>2]|0)+f>>0]=0;b[k>>1]=16;c[g+12>>2]=f;k=0;Ra=l;return k|0}if((b[k>>1]&9216)==0?(c[j>>2]|0)==0:0){k=h;Ra=l;return k|0}Cg(g);k=h;Ra=l;return k|0}function vh(a,e,f){a=a|0;e=e|0;f=f|0;var i=0,j=0,k=0,l=0,m=0;l=Ra;Ra=Ra+16|0;j=l+8|0;k=l;i=(d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0);a=(d[a+5>>0]|0)<<16|(d[a+4>>0]|0)<<24|(d[a+6>>0]|0)<<8|(d[a+7>>0]|0);m=f;c[m>>2]=a;c[m+4>>2]=i;if((e|0)==6){k=4;m=f+8|0;b[m>>1]=k;Ra=l;return}c[h>>2]=a;c[h+4>>2]=i;g[j>>3]=+g[h>>3];g[k>>3]=+g[j>>3];k=+g[j>>3]==+g[k>>3]?8:1;m=f+8|0;b[m>>1]=k;Ra=l;return}function wh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;g=h;if(d>>>0>16777215|(d|0)==16777215&c>>>0>4294967295){a[b+8>>0]=c;g=bw(c|0,d|0,8)|0;L()|0;a[b+7>>0]=g&255|-128;g=bw(c|0,d|0,15)|0;L()|0;a[b+6>>0]=g&255|-128;g=bw(c|0,d|0,22)|0;L()|0;a[b+5>>0]=g&255|-128;g=bw(c|0,d|0,29)|0;L()|0;a[b+4>>0]=g&255|-128;g=bw(c|0,d|0,36)|0;L()|0;a[b+3>>0]=g&255|-128;g=bw(c|0,d|0,43)|0;L()|0;a[b+2>>0]=g&255|-128;g=bw(c|0,d|0,50)|0;L()|0;a[b+1>>0]=g&255|-128;g=bw(c|0,d|0,57)|0;L()|0;a[b>>0]=g&255|-128;g=9;Ra=h;return g|0}e=0;f=c;while(1){c=e+1|0;a[g+e>>0]=f&255|-128;f=bw(f|0,d|0,7)|0;d=L()|0;if((f|0)==0&(d|0)==0)break;else e=c}a[g>>0]=a[g>>0]&127;d=0;while(1){a[b+d>>0]=a[g+e>>0]|0;if((e|0)>0){e=e+-1|0;d=d+1|0}else break}Ra=h;return c|0}function xh(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=Ra;Ra=Ra+32|0;n=o+16|0;i=o;m=e+68|0;f=a[m>>0]|0;do if(f<<24>>24>-1){h=e+116|0;g=c[h>>2]|0;if(!(f<<24>>24)){f=h;j=26}else{g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);f=a[m>>0]|0}else{l=c[g+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[g+16>>2]=c[l>>2];c[l>>2]=g}f=f+-1<<24>>24;a[m>>0]=f;if(f<<24>>24)do{g=c[(c[e+120+(f<<24>>24<<2)>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);f=a[m>>0]|0}else{l=c[g+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[g+16>>2]=c[l>>2];c[l>>2]=g}f=f+-1<<24>>24;a[m>>0]=f}while(f<<24>>24!=0);k=c[e+120>>2]|0;c[h>>2]=k;f=h;l=k}}else{h=e+64|0;f=c[h>>2]|0;if(!f){a[e>>0]=1;n=16;Ra=o;return n|0}g=a[e>>0]|0;if((g&255)>2){if(g<<24>>24==4){n=c[e+4>>2]|0;Ra=o;return n|0}f=e+16|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[f>>2]=0;a[e>>0]=1;f=c[h>>2]|0}h=e+116|0;f=yh(c[(c[e+8>>2]|0)+4>>2]|0,f,h,0,d[e+2>>0]|0)|0;if(!f){a[m>>0]=0;g=c[h>>2]|0;a[e+69>>0]=a[g+2>>0]|0;f=h;j=26;break}a[e>>0]=1;n=f;Ra=o;return n|0}while(0);do if((j|0)==26){if(a[g>>0]|0?((c[e+112>>2]|0)==0|0)==(d[g+2>>0]|0):0){l=g;k=g;break}c[i>>2]=32306;c[i+4>>2]=68367;c[i+8>>2]=31517;Db(11,32001,i);n=11;Ra=o;return n|0}while(0);g=e+70|0;b[g>>1]=0;h=e+50|0;b[h>>1]=0;i=e+1|0;j=a[i>>0]&-15;a[i>>0]=j;if(b[k+24>>1]|0){a[e>>0]=0;n=0;Ra=o;return n|0}if(a[k+8>>0]|0){a[e>>0]=1;n=16;Ra=o;return n|0}if((c[k+4>>2]|0)==1){n=(c[k+56>>2]|0)+((d[k+9>>0]|0)+8)|0;p=a[n>>0]|0;q=a[n+1>>0]|0;k=a[n+2>>0]|0;n=a[n+3>>0]|0;a[e>>0]=0;r=c[e+20>>2]|0;b[h>>1]=0;a[i>>0]=j;b[e+72>>1]=0;c[e+120>>2]=l;b[g>>1]=0;a[m>>0]=1;n=yh(r,(q&255)<<16|(p&255)<<24|(k&255)<<8|n&255,f,e,d[e+2>>0]|0)|0;Ra=o;return n|0}else{c[n>>2]=32306;c[n+4>>2]=68380;c[n+8>>2]=31517;Db(11,32001,n);r=11;Ra=o;return r|0}return 0}function yh(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+32|0;l=n+16|0;i=n;j=n+28|0;do if((c[d+44>>2]|0)>>>0>=e>>>0){k=c[d>>2]|0;h=Za[c[k+204>>2]&127](k,e,j,h)|0;if(!h){k=c[j>>2]|0;i=k+8|0;h=c[i>>2]|0;c[f>>2]=h;if(!(a[h>>0]|0)){i=c[i>>2]|0;j=i+4|0;if((c[j>>2]|0)!=(e|0)){c[i+56>>2]=c[k+4>>2];c[i+72>>2]=k;c[i+52>>2]=d;c[j>>2]=e;a[i+9>>0]=(e|0)==1?100:0;h=c[f>>2]|0}h=Gf(h)|0;if(!h)m=8}else m=8;if((m|0)==8){if(!g){g=0;Ra=n;return g|0}m=c[f>>2]|0;if(b[m+24>>1]|0?(a[m+2>>0]|0)==(a[g+69>>0]|0):0){g=0;Ra=n;return g|0}c[l>>2]=32306;c[l+4>>2]=65376;c[l+8>>2]=31517;Db(11,32001,l);h=11}i=c[f>>2]|0;if(i){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{m=c[i+20>>2]|0;f=m+120|0;c[f>>2]=(c[f>>2]|0)+-1;m=m+136|0;c[i+16>>2]=c[m>>2];c[m>>2]=i;break}}}}else{c[i>>2]=32306;c[i+4>>2]=65355;c[i+8>>2]=31517;Db(11,32001,i);h=11}while(0);if(!g){g=h;Ra=n;return g|0}f=g+68|0;m=(a[f>>0]|0)+-1<<24>>24;a[f>>0]=m;c[g+116>>2]=c[g+120+(m<<24>>24<<2)>>2];g=h;Ra=n;return g|0}function zh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+80|0;m=z+56|0;x=z+40|0;k=z+24|0;l=z+68|0;p=z;if((c[f+44>>2]|0)>>>0<g>>>0){c[k>>2]=32306;c[k+4>>2]=72344;c[k+8>>2]=31517;Db(11,32001,k);y=11;Ra=z;return y|0}g=yh(f,g,l,0,0)|0;if(g|0){y=g;Ra=z;return y|0}w=c[l>>2]|0;v=w+1|0;if(a[v>>0]|0){c[m>>2]=32306;c[m+4>>2]=72349;c[m+8>>2]=31517;Db(11,32001,m);a[v>>0]=0;if(!w){y=11;Ra=z;return y|0}else j=11}else{a[v>>0]=1;t=w+9|0;s=d[t>>0]|0;u=w+24|0;a:do if(!(b[u>>1]|0)){g=0;r=w+8|0;y=13}else{l=w+56|0;m=w+26|0;n=w+64|0;o=w+8|0;k=0;do{g=(c[n>>2]|0)+(k<<1)|0;g=(c[l>>2]|0)+((d[g>>0]<<8|d[g+1>>0])&e[m>>1])|0;if((a[o>>0]|0)==0?(q=zh(f,d[g+1>>0]<<16|d[g>>0]<<24|d[g+2>>0]<<8|d[g+3>>0],1,i)|0,q|0):0){j=q;break a}g=Ah(w,g,p)|0;k=k+1|0;if(g|0){j=g;break a}g=b[u>>1]|0}while(k>>>0<(g&65535)>>>0);g=g&65535;r=o;y=13}while(0);b:do if((y|0)==13){if(!(a[r>>0]|0)){g=(c[w+56>>2]|0)+(s+8)|0;g=zh(f,d[g+1>>0]<<16|d[g>>0]<<24|d[g+2>>0]<<8|d[g+3>>0],1,i)|0;if(g|0){j=g;break}}else if(i|0)c[i>>2]=(c[i>>2]|0)+g;if(h|0){j=Bh(c[w+52>>2]|0,w,c[w+4>>2]|0)|0;break}g=c[w+72>>2]|0;k=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){j=Ve(g)|0;y=27}}else y=23;do if((y|0)==23){j=c[k+40>>2]|0;if(j|0)break b;if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){j=Wf(g)|0;y=27;break}else{j=Xf(g)|0;y=27;break}}while(0);if((y|0)==27?j|0:0)break;f=c[w+56>>2]|0;j=a[f+s>>0]|8;o=j&255;l=w+52|0;q=c[l>>2]|0;k=d[t>>0]|0;if(!(b[q+22>>1]&12)){g=f+k|0;p=q+36|0}else{p=q+36|0;g=f+k|0;gw(g|0,0,(c[p>>2]|0)-k|0)|0}a[g>>0]=j;m=k+8|0;n=m&65535;g=f+(k+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[f+(k+7)>>0]=0;g=f+(k+5)|0;a[g>>0]=(c[p>>2]|0)>>>8;a[g+1>>0]=c[p>>2];c[w+20>>2]=(c[p>>2]|0)-m&65535;g=o>>>3;a[r>>0]=g;g=4-(g<<2)&255;j=w+10|0;a[j>>0]=g;c[w+76>>2]=120;k=c[l>>2]|0;switch((o&247)<<24>>24){case 5:{a[w+2>>0]=1;a[w+3>>0]=1;c[w+80>>2]=180;b[w+14>>1]=b[k+28>>1]|0;j=k+30|0;y=35;break}case 2:{a[w+2>>0]=0;a[w+3>>0]=0;c[w+80>>2]=179;b[w+14>>1]=b[k+24>>1]|0;j=k+26|0;y=35;break}default:{c[x>>2]=32306;c[x+4>>2]=65035;c[x+8>>2]=31517;Db(11,32001,x);g=a[j>>0]|0}}if((y|0)==35){b[w+16>>1]=b[j>>1]|0;a[w+11>>0]=a[k+21>>0]|0}b[w+18>>1]=n;c[w+60>>2]=f+(c[p>>2]|0);c[w+64>>2]=f+m;c[w+68>>2]=f+(g&255);a[w+12>>0]=0;b[w+26>>1]=(c[q+32>>2]|0)+65535;b[u>>1]=0;a[w>>0]=1;j=0}while(0);a[v>>0]=0}g=c[w+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);y=j;Ra=z;return y|0}else{y=c[g+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[g+16>>2]=c[y>>2];c[y>>2]=g;y=j;Ra=z;return y|0}return 0}function Ah(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+64|0;s=t+32|0;r=t+16|0;i=t;o=t+48|0;p=t+44|0;cb[c[f+80>>2]&255](f,g,h);k=e[h+16>>1]|0;j=c[h+12>>2]|0;if((j|0)==(k|0)){s=0;Ra=t;return s|0}g=g+(e[h+18>>1]|0)|0;if(g>>>0>(c[f+60>>2]|0)>>>0){c[i>>2]=32306;c[i+4>>2]=69515;c[i+8>>2]=31517;Db(11,32001,i);s=11;Ra=t;return s|0}h=g+-4|0;n=c[f+52>>2]|0;i=(c[n+36>>2]|0)+-4|0;g=j+~k+i|0;if(i>>>0>g>>>0){s=0;Ra=t;return s|0}l=n+44|0;f=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];j=(g>>>0)/(i>>>0)|0;while(1){j=j+-1|0;c[o>>2]=0;c[p>>2]=0;if(f>>>0<2){m=8;break}if(f>>>0>(c[l>>2]|0)>>>0){m=8;break}k=(j|0)==0;if(!k){g=dg(n,f,p,o)|0;if(g|0)break;g=c[p>>2]|0;if(g)m=20;else m=12}else m=12;a:do if((m|0)==12){g=(c[n>>2]|0)+212|0;i=Ya[c[29436>>2]&127](c[(c[g>>2]|0)+44>>2]|0,f,0)|0;do if(i|0){g=c[g>>2]|0;h=c[i+4>>2]|0;if(!(c[h>>2]|0)){g=sf(g,f,i)|0;if(!g)break;else h=g}else{m=g+12|0;c[m>>2]=(c[m>>2]|0)+1;m=h+30|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16}g=c[h+8>>2]|0;i=g+4|0;if((c[i>>2]|0)==(f|0)){c[p>>2]=g;if(!g){m=22;break a}else{m=20;break a}}else{c[g+56>>2]=c[h+4>>2];c[g+72>>2]=h;c[g+52>>2]=n;c[i>>2]=f;a[g+9>>0]=0;c[p>>2]=g;m=20;break a}}while(0);c[p>>2]=0;g=0;m=22}while(0);if((m|0)==20){m=0;if((b[(c[g+72>>2]|0)+30>>1]|0)==1)m=22;else{c[s>>2]=32306;c[s+4>>2]=69552;c[s+8>>2]=31517;Db(11,32001,s);g=11}}if((m|0)==22){m=0;g=Bh(n,g,f)|0}h=c[p>>2]|0;do if(h|0?(q=c[h+72>>2]|0,q|0):0)if(!(b[q+28>>1]&32)){Df(q);break}else{f=c[q+20>>2]|0;i=f+120|0;c[i>>2]=(c[i>>2]|0)+-1;f=f+136|0;c[q+16>>2]=c[f>>2];c[f>>2]=q;break}while(0);if((g|0)!=0|k){m=30;break}else f=c[o>>2]|0}if((m|0)==8){c[r>>2]=32306;c[r+4>>2]=69532;c[r+8>>2]=31517;Db(11,32001,r);g=11}else if((m|0)==30){Ra=t;return g|0}s=g;Ra=t;return s|0}function Bh(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+48|0;r=B+16|0;j=B;s=B+32|0;A=B+28|0;m=c[f+12>>2]|0;if(h>>>0>=2?(x=f+44|0,(c[x>>2]|0)>>>0>=h>>>0):0){do if(!g){g=(c[f>>2]|0)+212|0;k=Ya[c[29436>>2]&127](c[(c[g>>2]|0)+44>>2]|0,h,0)|0;if(k){g=c[g>>2]|0;j=c[k+4>>2]|0;if(!(c[j>>2]|0)){g=sf(g,h,k)|0;if(!g){g=0;break}else j=g}else{z=g+12|0;c[z>>2]=(c[z>>2]|0)+1;z=j+30|0;b[z>>1]=(b[z>>1]|0)+1<<16>>16}g=c[j+8>>2]|0;k=g+4|0;if((c[k>>2]|0)!=(h|0)){c[g+56>>2]=c[j+4>>2];c[g+72>>2]=j;c[g+52>>2]=f;c[k>>2]=h;a[g+9>>0]=0}}else g=0}else{z=c[g+72>>2]|0;q=z+30|0;b[q>>1]=(b[q>>1]|0)+1<<16>>16;z=(c[z+12>>2]|0)+12|0;c[z>>2]=(c[z>>2]|0)+1}while(0);k=c[m+72>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[A>>2]=0;z=23;break}else{j=Ve(k)|0;z=22;break}else z=17;while(0);do if((z|0)==17){j=c[l+40>>2]|0;if(j|0){c[A>>2]=j;i=0;z=105;break}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(k)|0;z=22;break}else{j=Xf(k)|0;z=22;break}}while(0);if((z|0)==22){c[A>>2]=j;if(!j)z=23;else{i=0;z=105}}a:do if((z|0)==23){q=m+56|0;p=c[q>>2]|0;j=p+36|0;k=p+37|0;m=p+38|0;p=p+39|0;l=d[k>>0]<<16|d[j>>0]<<24|d[m>>0]<<8|d[p>>0];o=l+1|0;a[j>>0]=o>>>24;a[k>>0]=o>>>16;a[m>>0]=o>>>8;a[p>>0]=o;p=f+22|0;if(!(b[p>>1]&4))m=g;else{if(!g){g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,h,s,0)|0;if(g|0){c[A>>2]=g;break}i=c[s>>2]|0;g=c[i+8>>2]|0;j=g+4|0;if((c[j>>2]|0)!=(h|0)){c[g+56>>2]=c[i+4>>2];c[g+72>>2]=i;c[g+52>>2]=f;c[j>>2]=h;a[g+9>>0]=0}c[A>>2]=0}j=c[g+72>>2]|0;k=c[j+20>>2]|0;do if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[A>>2]=0;break}else{n=Ve(j)|0;z=40;break}else z=35;while(0);do if((z|0)==35){i=c[k+40>>2]|0;if(i|0){c[A>>2]=i;i=0;z=105;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){n=Wf(j)|0;z=40;break}else{n=Xf(j)|0;z=40;break}}while(0);if((z|0)==40?(c[A>>2]=n,n|0):0){i=0;z=105;break}gw(c[g+56>>2]|0,0,c[(c[g+52>>2]|0)+32>>2]|0)|0;m=g}if(a[f+17>>0]|0?(ig(f,h,2,0,A),c[A>>2]|0):0){i=0;g=m;z=105;break}if(l){n=c[q>>2]|0;n=d[n+33>>0]<<16|d[n+32>>0]<<24|d[n+34>>0]<<8|d[n+35>>0];g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,n,s,0)|0;if(g|0){c[A>>2]=g;i=0;g=m;z=105;break}g=c[s>>2]|0;i=c[g+8>>2]|0;j=i+4|0;if((c[j>>2]|0)==(n|0)){g=i+56|0;l=g;g=c[g>>2]|0}else{o=c[g+4>>2]|0;l=i+56|0;c[l>>2]=o;c[i+72>>2]=g;c[i+52>>2]=f;c[j>>2]=n;a[i+9>>0]=(n|0)==1?100:0;g=o}c[A>>2]=0;o=d[g+5>>0]<<16|d[g+4>>0]<<24|d[g+6>>0]<<8|d[g+7>>0];j=(c[f+36>>2]|0)>>>2;if(o>>>0>(j+-2|0)>>>0){c[r>>2]=32306;c[r+4>>2]=69422;c[r+8>>2]=31517;Db(11,32001,r);c[A>>2]=11;g=m;z=105;break}if(o>>>0<(j+-8|0)>>>0){j=c[i+72>>2]|0;k=c[j+20>>2]|0;do if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[A>>2]=0;break}else{g=Ve(j)|0;z=63;break}else z=58;while(0);do if((z|0)==58){g=c[k+40>>2]|0;if(g|0){c[A>>2]=g;g=m;z=105;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){g=Wf(j)|0;z=63;break}else{g=Xf(j)|0;z=63;break}}while(0);if((z|0)==63){c[A>>2]=g;if(g|0){g=m;z=105;break}g=c[l>>2]|0}z=o+1|0;a[g+4>>0]=z>>>24;a[g+5>>0]=z>>>16;a[g+6>>0]=z>>>8;a[g+7>>0]=z;z=(c[l>>2]|0)+((o<<2)+8)|0;a[z>>0]=h>>>24;a[z+1>>0]=h>>>16;a[z+2>>0]=h>>>8;a[z+3>>0]=h;do if(((m|0?(b[p>>1]&4)==0:0)?(t=c[m+72>>2]|0,u=c[t+20>>2]|0,(a[u+12>>0]|0)==0):0)?(v=t+28|0,w=e[v>>1]|0,w&2|0):0){if(c[u+96>>2]|0)break;b[v>>1]=w&65515|16}while(0);n=f+60|0;g=c[n>>2]|0;do if(!g){l=c[x>>2]|0;do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](512)|0;if(!g)z=83;else z=84}else{g=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){z=c[14978]|0;f=Tv(j|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&f>>>0<=z>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){z=83;break}j=Wa[c[29352>>2]&127](g)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){z=84;break}c[14987]=j;z=84}while(0);if((z|0)==83){c[n>>2]=0;g=7;break}else if((z|0)==84){gw(g+4|0,0,508)|0;c[g>>2]=l;c[n>>2]=g;z=85;break}}else z=85;while(0);if((z|0)==85)if((c[g>>2]|0)>>>0<h>>>0)g=0;else g=df(g,h)|0;c[A>>2]=g;g=m;z=105;break}}else{n=0;i=0}if(!m){g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,h,s,0)|0;if(g|0){c[A>>2]=g;z=111;break}j=c[s>>2]|0;g=c[j+8>>2]|0;k=g+4|0;if((c[k>>2]|0)!=(h|0)){c[g+56>>2]=c[j+4>>2];c[g+72>>2]=j;c[g+52>>2]=f;c[k>>2]=h;a[g+9>>0]=0}c[A>>2]=0;m=g}g=m+72|0;k=c[g>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[A>>2]=0;break}else{y=Ve(k)|0;z=104;break}else z=99;while(0);do if((z|0)==99){j=c[l+40>>2]|0;if(j|0){c[A>>2]=j;g=m;z=105;break a}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){y=Wf(k)|0;z=104;break}else{y=Xf(k)|0;z=104;break}}while(0);if((z|0)==104?(c[A>>2]=y,y|0):0){g=m;z=105;break}z=m+56|0;f=c[z>>2]|0;a[f>>0]=n>>>24;a[f+1>>0]=n>>>16;a[f+2>>0]=n>>>8;a[f+3>>0]=n;z=(c[z>>2]|0)+4|0;a[z>>0]=0;a[z+1>>0]=0;a[z+2>>0]=0;a[z+3>>0]=0;z=c[q>>2]|0;a[z+32>>0]=h>>>24;a[z+33>>0]=h>>>16;a[z+34>>0]=h>>>8;a[z+35>>0]=h;a[m>>0]=0;if(!m)z=111;else z=108}while(0);if((z|0)==105)if(!g)z=111;else{a[g>>0]=0;g=g+72|0;z=108}do if((z|0)==108){g=c[g>>2]|0;if(!(b[g+28>>1]&32)){Df(g);z=111;break}else{z=c[g+20>>2]|0;h=z+120|0;c[h>>2]=(c[h>>2]|0)+-1;z=z+136|0;c[g+16>>2]=c[z>>2];c[z>>2]=g;z=111;break}}while(0);do if((z|0)==111?i|0:0){g=c[i+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{h=c[g+20>>2]|0;z=h+120|0;c[z>>2]=(c[z>>2]|0)+-1;h=h+136|0;c[g+16>>2]=c[h>>2];c[h>>2]=g;break}}while(0);A=c[A>>2]|0;Ra=B;return A|0}c[j>>2]=32306;c[j+4>>2]=69368;c[j+8>>2]=31517;Db(11,32001,j);A=11;Ra=B;return A|0}function Ch(a,b,c){a=a|0;b=b|0;c=c|0;return Fh(a,b,c,0)|0}function Dh(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=f+(a[f>>0]&63)|0;switch(a[f+1>>0]|0){case 1:{k=a[h>>0]|0;j=((k|0)<0)<<31>>31;break}case 2:{k=a[h>>0]<<8|d[h+1>>0];j=((k|0)<0)<<31>>31;break}case 3:{k=d[h+1>>0]<<8|a[h>>0]<<16|d[h+2>>0];j=((k|0)<0)<<31>>31;break}case 4:{k=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];j=((k|0)<0)<<31>>31;break}case 5:{k=h+2|0;j=a[h>>0]<<8|d[h+1>>0];k=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];break}case 6:{k=h+4|0;j=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];k=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];break}case 8:{j=0;k=0;break}case 9:{j=0;k=1;break}case 7:case 0:{g=Fh(b,f,g,0)|0;return g|0}default:{g=Fh(b,f,g,0)|0;return g|0}}i=c[g+4>>2]|0;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>(j|0)|(i|0)==(j|0)&h>>>0>k>>>0){g=a[g+12>>0]|0;return g|0}if((i|0)<(j|0)|(i|0)==(j|0)&h>>>0<k>>>0){g=a[g+13>>0]|0;return g|0}if((e[g+8>>1]|0)>1){g=Fh(b,f,g,1)|0;return g|0}else{f=a[g+10>>0]|0;a[g+14>>0]=1;g=f;return g|0}return 0}function Eh(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+32|0;o=p+8|0;j=p;k=f+1|0;i=a[k>>0]|0;l=i&255;do if(i<<24>>24<=-1){h=d[f+2>>0]|0;if(!(h&128)){n=l<<7&16256|h;m=7;break}i=d[f+3>>0]|0;if(i&128){Of(k,j)|0;l=j;h=c[l>>2]|0;if((h|0)==(h|0)?0==(c[l+4>>2]|0):0){n=h;m=7;break}else break}else{n=(l<<14|i)&2080895|h<<7&16256;m=7;break}}else{n=l;m=7}while(0);if((m|0)==7?(n|0)>=12:0){if(!(n&1)){g=a[g+13>>0]|0;Ra=p;return g|0}h=d[f>>0]|0;j=(n+-12|0)/2|0;if((j+h|0)>(b|0)){c[o>>2]=32306;c[o+4>>2]=80874;c[o+8>>2]=31517;Db(11,32001,o);a[g+11>>0]=11;g=0;Ra=p;return g|0}o=c[g+4>>2]|0;i=c[o+12>>2]|0;h=Lu(f+h|0,c[o+16>>2]|0,(j|0)>(i|0)?i:j)|0;if(h|0)if((h|0)>0){g=a[g+13>>0]|0;Ra=p;return g|0}else{g=a[g+12>>0]|0;Ra=p;return g|0}h=j-i|0;if(!h)if((e[g+8>>1]|0)>1){g=Fh(b,f,g,1)|0;Ra=p;return g|0}else{f=a[g+10>>0]|0;a[g+14>>0]=1;g=f;Ra=p;return g|0}else if((h|0)>0){g=a[g+13>>0]|0;Ra=p;return g|0}else{g=a[g+12>>0]|0;Ra=p;return g|0}}g=a[g+12>>0]|0;Ra=p;return g|0}function Fh(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+96|0;O=P+80|0;N=P+64|0;q=P+48|0;K=P+40|0;M=P;p=c[i+4>>2]|0;if(!j){G=a[h>>0]|0;j=G&255;do if(G<<24>>24<=-1){k=d[h+1>>0]|0;if(!(k&128)){j=j<<7&16256|k;k=2;break}l=d[h+2>>0]|0;if(!(l&128)){j=(j<<14|l)&2080895|k<<7&16256;k=3;break}else{k=Of(h,K)|0;G=K;j=c[G>>2]|0;j=((j|0)==(j|0)?0==(c[G+4>>2]|0):0)?j:-1;break}}else k=1;while(0);m=j;r=0;k=k&255;l=j}else{m=h+1|0;G=a[m>>0]|0;j=G&255;do if(G<<24>>24>-1){l=d[h>>0]|0;k=2;w=12}else{k=d[h+2>>0]|0;do if(k&128){l=d[h+3>>0]|0;if(!(l&128)){j=(j<<14|l)&2080895|k<<7&16256;k=3;w=10;break}k=Of(m,K)|0;G=K;j=c[G>>2]|0;if((j|0)==(j|0)?0==(c[G+4>>2]|0):0)w=10;else{j=-1;l=d[h>>0]|0;k=(k&255)+1|0}}else{j=j<<7&16256|k;k=2;w=10}while(0);if((w|0)==10){k=(k&255)+1|0;l=d[h>>0]|0;if(j>>>0<=127){w=12;break}}j=(j+-12|0)>>>1}while(0);if((w|0)==12)j=d[3520+j>>0]|0;m=j+l|0;r=1;p=p+40|0}if(m>>>0>f>>>0){c[q>>2]=32306;c[q+4>>2]=80583;c[q+8>>2]=31517;Db(11,32001,q);a[i+11>>0]=11;i=0;Ra=P;return i|0}E=i+8|0;G=M+12|0;z=M+10|0;A=M+32|0;B=M+8|0;C=M+16|0;D=i+11|0;y=m;x=p;a:while(1){v=x+8|0;j=e[v>>1]|0;b:do if(j&4){j=a[h+k>>0]|0;q=j&255;if((j&255)>9){j=1;w=88;break a}switch(j<<24>>24){case 0:{j=-1;w=88;break a}case 7:{Ug(h+y|0,q,M)|0;m=x;j=c[m>>2]|0;m=c[m+4>>2]|0;o=+g[M>>3];if(!(o<-9223372036854775808.0))if(!(o>=9223372036854775808.0)?(I=~~o>>>0,J=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0,!((m|0)<(J|0)|(m|0)==(J|0)&j>>>0<I>>>0)):0)if(!((m|0)>(J|0)|(m|0)==(J|0)&j>>>0>I>>>0)){n=+(j>>>0)+4294967296.0*+(m|0);if(o>n)j=-1;else j=o<n&1}else j=1;else j=-1;else j=1;q=7;j=0-j|0;w=87;break b}default:{}}m=h+y|0;switch(j<<24>>24){case 6:{u=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];p=d[m+5>>0]<<16|d[m+4>>0]<<24|d[m+6>>0]<<8|d[m+7>>0];break}case 1:{p=a[m>>0]|0;u=((p|0)<0)<<31>>31;break}case 2:{p=a[m>>0]<<8|d[m+1>>0];u=((p|0)<0)<<31>>31;break}case 3:{p=d[m+1>>0]<<8|a[m>>0]<<16|d[m+2>>0];u=((p|0)<0)<<31>>31;break}case 4:{p=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];u=((p|0)<0)<<31>>31;break}case 5:{u=a[m>>0]<<8|d[m+1>>0];p=d[m+3>>0]<<16|d[m+2>>0]<<24|d[m+4>>0]<<8|d[m+5>>0];break}default:{u=0;p=q+-8|0}}m=x;j=c[m>>2]|0;m=c[m+4>>2]|0;if((u|0)<(m|0)|(u|0)==(m|0)&p>>>0<j>>>0){j=-1;w=88;break a}else{j=((u|0)>(m|0)|(u|0)==(m|0)&p>>>0>j>>>0)&1;w=87}}else{if(j&8|0){j=a[h+k>>0]|0;u=j&255;if((j&255)>9){j=1;w=88;break a}if(!(j<<24>>24)){j=-1;w=88;break a}Ug(h+y|0,u,M)|0;if(j<<24>>24==7){n=+g[M>>3];o=+g[x>>3];if(n<o){j=-1;w=88;break a}if(n>o){j=1;w=88;break a}else{j=7;break}}m=M;j=c[m>>2]|0;m=c[m+4>>2]|0;o=+g[x>>3];if(o<-9223372036854775808.0){j=1;w=88;break a}if(o>=9223372036854775808.0){j=-1;w=88;break a}p=~~o>>>0;q=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0;if((m|0)<(q|0)|(m|0)==(q|0)&j>>>0<p>>>0){j=-1;w=88;break a}if((m|0)>(q|0)|(m|0)==(q|0)&j>>>0>p>>>0){j=1;w=88;break a}n=+(j>>>0)+4294967296.0*+(m|0);if(o>n){j=-1;w=88;break a}else{q=u;j=o<n&1;w=87;break}}if(j&2|0){m=h+k|0;v=a[m>>0]|0;j=v&255;do if(v<<24>>24<=-1){p=d[m+1>>0]|0;if(!(p&128)){j=j<<7&16256|p;w=61;break}q=d[m+2>>0]|0;if(q&128){Of(m,K)|0;v=K;j=c[v>>2]|0;if((j|0)==(j|0)?0==(c[v+4>>2]|0):0){w=61;break}else{p=-1;break}}else{j=(j<<14|q)&2080895|p<<7&16256;w=61;break}}else w=61;while(0);if((w|0)==61){if(j>>>0<12){j=-1;w=88;break a}if(!(j&1)){j=1;w=88;break a}else p=j}u=(p+-12|0)>>>1;c[G>>2]=u;if((u+y|0)>>>0>f>>>0){w=65;break a}j=c[i>>2]|0;if(r>>>0>=(e[j+8>>1]|0)>>>0){w=65;break a}m=c[j+20+(r<<2)>>2]|0;if(!m){m=c[x+12>>2]|0;j=Lu(h+y|0,c[x+16>>2]|0,(u|0)<(m|0)?u:m)|0;if(!j){q=p;j=u-m|0;w=87;break}else{w=88;break a}}else{a[z>>0]=a[j+4>>0]|0;c[A>>2]=c[j+12>>2];b[B>>1]=2;c[C>>2]=h+y;q=p;j=ph(M,x,m,D)|0;w=87;break}}q=h+k|0;m=a[q>>0]|0;p=m&255;if(!(j&16)){q=p;j=m<<24>>24!=0&1;w=87;break}do if(m<<24>>24<=-1){j=d[q+1>>0]|0;if(!(j&128)){p=p<<7&16256|j;break}m=d[q+2>>0]|0;if(!(m&128)){p=(p<<14|m)&2080895|j<<7&16256;break}else{Of(q,K)|0;w=K;p=c[w>>2]|0;p=((p|0)==(p|0)?0==(c[w+4>>2]|0):0)?p:-1;break}}while(0);if(!(p>>>0>11&(p&1|0)==0)){j=-1;w=88;break a}u=(p+-12|0)>>>1;if((u+y|0)>>>0>f>>>0){w=85;break a}if(!(b[v>>1]&16384)){m=c[x+12>>2]|0;j=Lu(h+y|0,c[x+16>>2]|0,(u|0)<(m|0)?u:m)|0;if(!j){q=p;j=u-m|0;w=87;break}else{w=88;break a}}m=h+y|0;if(u|0){j=0;do{if(a[m+j>>0]|0){j=1;w=88;break a}j=j+1|0}while(j>>>0<u>>>0)}q=p;j=u-(c[x>>2]|0)|0;w=87}while(0);if((w|0)==87){w=0;if(!j)j=q;else{w=88;break}}r=r+1|0;if((r|0)==(e[E>>1]|0)){w=96;break}x=x+40|0;if(j>>>0>127)q=(j+-12|0)>>>1;else q=d[3520+j>>0]|0;p=1;m=0;while(1){j=bw(j|0,m|0,7)|0;m=L()|0;if((j|0)==0&(m|0)==0)break;else p=p+1|0}y=q+y|0;k=p+k|0;if(y>>>0>f>>>0|k>>>0>=l>>>0){w=96;break}}if((w|0)==65){c[N>>2]=32306;c[N+4>>2]=80658;c[N+8>>2]=31517;Db(11,32001,N);a[D>>0]=11;i=0;Ra=P;return i|0}else if((w|0)==85){c[O>>2]=32306;c[O+4>>2]=80688;c[O+8>>2]=31517;Db(11,32001,O);a[D>>0]=11;i=0;Ra=P;return i|0}else if((w|0)==88){i=(a[(c[(c[i>>2]|0)+16>>2]|0)+r>>0]|0)==0?j:0-j|0;Ra=P;return i|0}else if((w|0)==96){a[i+14>>0]=1;i=a[i+10>>0]|0;Ra=P;return i|0}return 0}function Gh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;A=Ra;Ra=Ra+64|0;u=A+48|0;z=A+32|0;v=A+16|0;l=A;j=A+60|0;g=a[f>>0]|0;a:do if(g<<24>>24){do if((g&255)>2){c[j>>2]=0;if(g<<24>>24==4){g=c[f+4>>2]|0;if(!g)break a;else y=g;Ra=A;return y|0}a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,j)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[j>>2]|0;g=f+4|0;if(!h)if(!(c[g>>2]|0))k=a[f>>0]|0;else n=15;else{c[g>>2]=h;n=15}if((n|0)==15){g=a[f>>0]|0;if(!(g<<24>>24)){a[f>>0]=2;k=2}else k=g}g=k;break}}f=g;Ra=A;return f|0}while(0);switch(g<<24>>24){case 2:break;case 1:{f=101;Ra=A;return f|0}default:break a}a[f>>0]=0;if((c[f+4>>2]|0)>0){f=0;Ra=A;return f|0}}while(0);w=f+116|0;j=c[w>>2]|0;x=f+70|0;s=(b[x>>1]|0)+1<<16>>16;b[x>>1]=s;t=j;if(!(a[j>>0]|0)){c[l>>2]=32306;c[l+4>>2]=68870;c[l+8>>2]=31517;Db(11,32001,l);f=11;Ra=A;return f|0}r=(a[j+8>>0]|0)!=0;if((s&65535)<(e[j+24>>1]|0)){if(r){f=0;Ra=A;return f|0}m=f+68|0;n=f+20|0;o=f+50|0;p=f+1|0;q=f+2|0;h=j;l=t;while(1){k=b[x>>1]|0;g=(c[h+64>>2]|0)+((k&65535)<<1)|0;g=(c[h+56>>2]|0)+((d[g>>0]<<8|d[g+1>>0])&e[h+26>>1])|0;h=a[m>>0]|0;if(h<<24>>24>18){n=46;break}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];B=c[n>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;C=h<<24>>24;b[f+72+(C<<1)>>1]=k;c[f+120+(C<<2)>>2]=l;b[x>>1]=0;a[m>>0]=h+1<<24>>24;g=yh(B,g,w,f,d[q>>0]|0)|0;if(g|0){y=g;n=49;break}g=c[w>>2]|0;if(!(a[g+8>>0]|0)){h=g;l=g}else{y=0;n=49;break}}if((n|0)==46){c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);C=11;Ra=A;return C|0}else if((n|0)==49){Ra=A;return y|0}}if(r){k=f+68|0;l=f+50|0;m=f+1|0;while(1){h=a[k>>0]|0;if(!(h<<24>>24)){n=36;break}b[l>>1]=0;a[m>>0]=a[m>>0]&-7;g=b[f+72+((h<<24>>24)+-1<<1)>>1]|0;b[x>>1]=g;i=h+-1<<24>>24;a[k>>0]=i;i=c[f+120+(i<<24>>24<<2)>>2]|0;c[w>>2]=i;h=c[j+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);i=c[w>>2]|0;g=b[x>>1]|0}else{C=c[h+20>>2]|0;B=C+120|0;c[B>>2]=(c[B>>2]|0)+-1;C=C+136|0;c[h+16>>2]=c[C>>2];c[C>>2]=h}if((g&65535)<(e[i+24>>1]|0))break;else j=i}if((n|0)==36){a[f>>0]=1;C=101;Ra=A;return C|0}if(!(a[i+2>>0]|0)){C=0;Ra=A;return C|0}C=Yg(f,0)|0;Ra=A;return C|0}g=(c[j+56>>2]|0)+((d[j+9>>0]|0)+8)|0;o=f+68|0;h=a[o>>0]|0;if(h<<24>>24>18){c[v>>2]=32306;c[v+4>>2]=68229;c[v+8>>2]=31517;Db(11,32001,v);C=11;Ra=A;return C|0}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];l=f+20|0;C=c[l>>2]|0;m=f+50|0;b[m>>1]=0;n=f+1|0;a[n>>0]=a[n>>0]&-7;k=h<<24>>24;b[f+72+(k<<1)>>1]=s;c[f+120+(k<<2)>>2]=t;b[x>>1]=0;a[o>>0]=h+1<<24>>24;k=f+2|0;g=yh(C,g,w,f,d[k>>0]|0)|0;if(g|0){C=g;Ra=A;return C|0}while(1){g=c[w>>2]|0;if(a[g+8>>0]|0){y=0;n=49;break}h=b[x>>1]|0;i=(c[g+64>>2]|0)+((h&65535)<<1)|0;i=(c[g+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[g+26>>1])|0;j=a[o>>0]|0;if(j<<24>>24>18){n=32;break}C=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];B=c[l>>2]|0;b[m>>1]=0;a[n>>0]=a[n>>0]&-7;v=j<<24>>24;b[f+72+(v<<1)>>1]=h;c[f+120+(v<<2)>>2]=g;b[x>>1]=0;a[o>>0]=j+1<<24>>24;g=yh(B,C,w,f,d[k>>0]|0)|0;if(g|0){y=g;n=49;break}}if((n|0)==32){c[z>>2]=32306;c[z+4>>2]=68229;c[z+8>>2]=31517;Db(11,32001,z);C=11;Ra=A;return C|0}else if((n|0)==49){Ra=A;return y|0}return 0}function Hh(f){f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;w=Ra;Ra=Ra+32|0;u=w+16|0;k=w;i=w+28|0;g=a[f>>0]|0;a:do if(g<<24>>24){do if((g&255)>2){c[i>>2]=0;if(g<<24>>24==4){g=c[f+4>>2]|0;if(!g)break a;Ra=w;return g|0}a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{t=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=f+4|0;if(!h)if(!(c[g>>2]|0))g=a[f>>0]|0;else v=15;else{c[g>>2]=h;v=15}if((v|0)==15){g=a[f>>0]|0;if(!(g<<24>>24)){a[f>>0]=2;g=2}}break}}f=g;Ra=w;return f|0}while(0);switch(g<<24>>24){case 2:break;case 1:{f=101;Ra=w;return f|0}default:break a}a[f>>0]=0;if((c[f+4>>2]|0)<0){f=0;Ra=w;return f|0}}while(0);s=f+116|0;g=c[s>>2]|0;t=f+70|0;h=b[t>>1]|0;j=g;if(!(a[g+8>>0]|0)){r=(c[g+64>>2]|0)+((h&65535)<<1)|0;g=(c[g+56>>2]|0)+((d[r>>0]<<8|d[r+1>>0])&e[g+26>>1])|0;r=f+68|0;i=a[r>>0]|0;if(i<<24>>24>18){c[k>>2]=32306;c[k+4>>2]=68229;c[k+8>>2]=31517;Db(11,32001,k);f=11;Ra=w;return f|0}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];o=f+20|0;m=c[o>>2]|0;p=f+50|0;b[p>>1]=0;q=f+1|0;a[q>>0]=a[q>>0]&-7;n=i<<24>>24;b[f+72+(n<<1)>>1]=h;c[f+120+(n<<2)>>2]=j;b[t>>1]=0;a[r>>0]=i+1<<24>>24;n=f+2|0;g=yh(m,g,s,f,d[n>>0]|0)|0;if(g|0){f=g;Ra=w;return f|0}g=c[s>>2]|0;b:do if(!(a[g+8>>0]|0)){while(1){k=(c[g+56>>2]|0)+((d[g+9>>0]|0)+8)|0;h=a[k>>0]|0;i=a[k+1>>0]|0;j=a[k+2>>0]|0;k=a[k+3>>0]|0;l=b[g+24>>1]|0;b[t>>1]=l;m=a[r>>0]|0;if(m<<24>>24>18)break;x=c[o>>2]|0;b[p>>1]=0;a[q>>0]=a[q>>0]&-7;y=m<<24>>24;b[f+72+(y<<1)>>1]=l;c[f+120+(y<<2)>>2]=g;b[t>>1]=0;a[r>>0]=m+1<<24>>24;g=yh(x,(i&255)<<16|(h&255)<<24|(j&255)<<8|k&255,s,f,d[n>>0]|0)|0;if(g|0){v=45;break}g=c[s>>2]|0;if(a[g+8>>0]|0)break b}if((v|0)==45){Ra=w;return g|0}c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);y=11;Ra=w;return y|0}while(0);b[t>>1]=(e[g+24>>1]|0)+65535;y=0;Ra=w;return y|0}do if(!(h<<16>>16)){i=f+68|0;j=f+50|0;k=f+1|0;while(1){g=a[i>>0]|0;if(!(g<<24>>24))break;b[j>>1]=0;a[k>>0]=a[k>>0]&-7;h=b[f+72+((g<<24>>24)+-1<<1)>>1]|0;b[t>>1]=h;y=c[s>>2]|0;g=g+-1<<24>>24;a[i>>0]=g;c[s>>2]=c[f+120+(g<<24>>24<<2)>>2];g=c[y+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);h=b[t>>1]|0}else{y=c[g+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[g+16>>2]=c[y>>2];c[y>>2]=g}if(h<<16>>16){v=41;break}}if((v|0)==41){g=c[s>>2]|0;break}a[f>>0]=1;y=101;Ra=w;return y|0}while(0);b[t>>1]=h+-1<<16>>16;if(!(a[g+2>>0]|0)){y=0;Ra=w;return y|0}if(a[g+8>>0]|0){y=0;Ra=w;return y|0}y=f+1|0;a[y>>0]=a[y>>0]&-15;b[f+50>>1]=0;y=Hh(f)|0;Ra=w;return y|0}function Ih(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;q=r+16|0;j=r;o=r+28|0;p=(c[g+32>>2]|0)+(c[g+28>>2]|0)|0;l=c[f+116>>2]|0;k=f+40|0;h=c[k>>2]|0;i=f+48|0;f=e[i>>1]|0;if((h+f|0)>>>0>(c[l+60>>2]|0)>>>0){c[j>>2]=32306;c[j+4>>2]=71650;c[j+8>>2]=31517;Db(11,32001,j);q=11;Ra=r;return q|0}f=Nh(l,h,g,0,f)|0;if(f|0){q=f;Ra=r;return q|0}f=e[i>>1]|0;if((p|0)==(f|0)){q=0;Ra=r;return q|0}i=(c[k>>2]|0)+f|0;n=c[l+52>>2]|0;j=(c[n+36>>2]|0)+-4|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];m=f;while(1){f=c[n>>2]|0;f=Za[c[f+204>>2]&127](f,i,o,0)|0;if(f|0){h=10;break}h=c[o>>2]|0;k=c[h+8>>2]|0;f=k+4|0;if((c[f>>2]|0)==(i|0)){f=k+72|0;l=f;f=c[f>>2]|0}else{c[k+56>>2]=c[h+4>>2];l=k+72|0;c[l>>2]=h;c[k+52>>2]=n;c[f>>2]=i;a[k+9>>0]=(i|0)==1?100:0;f=h}if((b[f+30>>1]|0)==1){if((j+m|0)>>>0<p>>>0){f=c[k+56>>2]|0;h=j;i=d[f+1>>0]<<16|d[f>>0]<<24|d[f+2>>0]<<8|d[f+3>>0]}else{h=p-m|0;f=c[k+56>>2]|0}f=Nh(k,f+4|0,g,m,h)|0;j=h}else{c[q>>2]=32306;c[q+4>>2]=71669;c[q+8>>2]=31517;Db(11,32001,q);f=11}h=c[l>>2]|0;do if(h|0)if(!(b[h+28>>1]&32)){Df(h);break}else{l=c[h+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[h+16>>2]=c[l>>2];c[l>>2]=h;break}while(0);if(f|0){h=23;break}m=j+m|0;if((m|0)>=(p|0)){f=0;h=23;break}}if((h|0)==10){q=f;Ra=r;return q|0}else if((h|0)==23){Ra=r;return f|0}return 0}function Jh(a){a=a|0;var b=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;p=Ra;Ra=Ra+80|0;o=p+64|0;j=p+48|0;l=p+32|0;k=p+16|0;g=p;n=c[(c[a+52>>2]|0)+36>>2]|0;i=c[a+56>>2]|0;b=d[a+9>>0]|0;q=i+(b+5)|0;m=b+8+(d[a+10>>0]|0)+((e[a+24>>1]|0)<<1)|0;h=n+-4|0;f=i+(b+1)|0;f=(d[f>>0]|0)<<8|(d[f+1>>0]|0);b=(((d[q>>0]|0)<<8|(d[q+1>>0]|0))+65535&65535)+1+(d[i+(b+7)>>0]|0)|0;a:do if(f){if(f>>>0<m>>>0){c[g>>2]=32306;c[g+4>>2]=65086;c[g+8>>2]=31517;Db(11,32001,g);q=11;Ra=p;return q|0}b:do if((f|0)<=(h|0)){while(1){q=i+f|0;g=f;f=(d[q>>0]|0)<<8|(d[q+1>>0]|0);q=i+(g+2)|0;q=(d[q>>0]|0)<<8|(d[q+1>>0]|0);b=q+b|0;g=q+g|0;if(f>>>0<=(g+3|0)>>>0)break;if((f|0)>(h|0))break b}if(f|0){c[l>>2]=32306;c[l+4>>2]=65101;c[l+8>>2]=31517;Db(11,32001,l);q=11;Ra=p;return q|0}if(g>>>0<=n>>>0)break a;c[j>>2]=32306;c[j+4>>2]=65105;c[j+8>>2]=31517;Db(11,32001,j);q=11;Ra=p;return q|0}while(0);c[k>>2]=32306;c[k+4>>2]=65091;c[k+8>>2]=31517;Db(11,32001,k);q=11;Ra=p;return q|0}while(0);if((b|0)>(n|0)){c[o>>2]=32306;c[o+4>>2]=65117;c[o+8>>2]=31517;Db(11,32001,o);q=11;Ra=p;return q|0}else{c[a+20>>2]=b-m&65535;q=0;Ra=p;return q|0}return 0}function Kh(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;k=q;if(c[i>>2]|0){Ra=q;return}p=c[f+56>>2]|0;l=(c[f+64>>2]|0)+(g<<1)|0;j=(d[l>>0]|0)<<8|(d[l+1>>0]|0);m=f+9|0;n=d[m>>0]|0;o=f+52|0;if((j+h|0)>>>0>(c[(c[o>>2]|0)+36>>2]|0)>>>0){c[k>>2]=32306;c[k+4>>2]=69788;c[k+8>>2]=31517;Db(11,32001,k);c[i>>2]=11;Ra=q;return}j=Oh(f,j&65535,h&65535)|0;if(j|0){c[i>>2]=j;Ra=q;return}j=f+24|0;h=(b[j>>1]|0)+-1<<16>>16;b[j>>1]=h;if(!(h<<16>>16)){l=p+(n+1)|0;a[l>>0]=0;a[l+1>>0]=0;a[l+2>>0]=0;a[l+3>>0]=0;a[p+(n+7)>>0]=0;p=p+(n+5)|0;a[p>>0]=(c[(c[o>>2]|0)+36>>2]|0)>>>8;a[p+1>>0]=c[(c[o>>2]|0)+36>>2];c[f+20>>2]=(c[(c[o>>2]|0)+36>>2]|0)+-8-(d[m>>0]|0)-(d[f+10>>0]|0);Ra=q;return}else{fw(l|0,l+2|0,(h&65535)-g<<1|0)|0;p=p+(n+3)|0;a[p>>0]=(e[j>>1]|0)>>>8;a[p+1>>0]=b[j>>1];p=f+20|0;c[p>>2]=(c[p>>2]|0)+2;Ra=q;return}}function Lh(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+64|0;A=B+40|0;o=B+24|0;z=B;n=f+12|0;if((a[n>>0]|0)==0?(w=i+2|0,x=f+20|0,(w|0)<=(c[x>>2]|0)):0){j=c[f+72>>2]|0;n=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[n+96>>2]|0){m=Ve(j)|0;v=16}}else v=12;do if((v|0)==12){m=c[n+40>>2]|0;if(!m)if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){m=Wf(j)|0;v=16;break}else{m=Xf(j)|0;v=16;break}else v=17}while(0);if((v|0)==16?m|0:0)v=17;if((v|0)==17){c[l>>2]=m;Ra=B;return}s=c[f+56>>2]|0;t=f+9|0;n=a[t>>0]|0;j=n&255;c[z>>2]=0;u=f+24|0;p=(e[u>>1]<<1)+(e[f+18>>1]|0)|0;q=s+(j+5)|0;r=q+1|0;m=d[q>>0]<<8|d[r>>0];do if(p>>>0>m>>>0){if((m|0)==0?(c[(c[f+52>>2]|0)+36>>2]|0)==65536:0){o=65536;v=22;break}c[o>>2]=32306;c[o+4>>2]=64824;c[o+8>>2]=31517;Db(11,32001,o);m=11}else{o=m;v=22}while(0);a:do if((v|0)==22){if(!(a[s+(j+2)>>0]|0)){m=p+2|0;if((m|0)>(o|0)?1:(a[s+(j+1)>>0]|0)==0)v=29;else v=25}else{m=p+2|0;if((m|0)>(o|0))v=29;else v=25}do if((v|0)==25){m=Ph(n,c[(c[f+52>>2]|0)+36>>2]|0,s,i,z)|0;if(m|0){m=m-s|0;break}m=c[z>>2]|0;if(m|0)break a;m=p+2|0;v=29}while(0);if((v|0)==29){if((m+i|0)>(o|0)){m=(c[x>>2]|0)+(-2-i)|0;m=Qh(f,(m|0)<4?m:4)|0;c[z>>2]=m;if(m|0)break;m=((d[q>>0]<<8|d[r>>0])+65535&65535)+1|0}else m=o;m=m-i|0;a[q>>0]=m>>>8;a[r>>0]=m}c[x>>2]=(c[x>>2]|0)-(w&65535);if(!k)ew(s+m|0,h|0,i|0)|0;else{ew(s+(m+4)|0,h+4|0,i+-4|0)|0;i=s+m|0;a[i>>0]=k>>>24;a[i+1>>0]=k>>>16;a[i+2>>0]=k>>>8;a[i+3>>0]=k}k=(c[f+64>>2]|0)+(g<<1)|0;fw(k+2|0,k|0,(e[u>>1]|0)-g<<1|0)|0;a[k>>0]=m>>>8;a[k+1>>0]=m;b[u>>1]=(b[u>>1]|0)+1<<16>>16;g=s+((d[t>>0]|0)+4)|0;k=(a[g>>0]|0)+1<<24>>24;a[g>>0]=k;if(!(k<<24>>24)){k=s+((d[t>>0]|0)+3)|0;a[k>>0]=(a[k>>0]|0)+1<<24>>24}m=f+52|0;if(!(a[(c[m>>2]|0)+17>>0]|0)){Ra=B;return}do if((c[l>>2]|0)==0?(cb[c[f+80>>2]&255](f,h,z),y=e[z+16>>1]|0,(c[z+12>>2]|0)>>>0>y>>>0):0){k=c[f+60>>2]|0;if(k>>>0>=h>>>0?k>>>0<(h+y|0)>>>0:0){c[A>>2]=32306;c[A+4>>2]=64569;c[A+8>>2]=31517;Db(11,32001,A);c[l>>2]=11;break}A=h+((e[z+18>>1]|0)+-4)|0;ig(c[m>>2]|0,d[A+1>>0]<<16|d[A>>0]<<24|d[A+2>>0]<<8|d[A+3>>0],3,c[f+4>>2]|0,l)}while(0);Ra=B;return}while(0);c[l>>2]=m;Ra=B;return}if(!j)m=h;else{ew(j|0,h|0,i|0)|0;m=j}if(k|0){a[m>>0]=k>>>24;a[m+1>>0]=k>>>16;a[m+2>>0]=k>>>8;a[m+3>>0]=k}l=a[n>>0]|0;a[n>>0]=l+1<<24>>24;l=l&255;c[f+36+(l<<2)>>2]=m;b[f+28+(l<<1)>>1]=g;Ra=B;return}\nfunction lu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=c[14832]|0;d=m>>>a;if(d&3|0){b=(d&1^1)+a|0;a=59368+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[14832]=m&~(1<<b);else{c[g+12>>2]=a;c[d>>2]=g}v=b<<3;c[e+4>>2]=v|3;v=e+v+4|0;c[v>>2]=c[v>>2]|1;v=f;Ra=w;return v|0}l=c[14834]|0;if(k>>>0>l>>>0){if(d|0){b=2<<a;b=d<<a&(b|0-b);b=(b&0-b)+-1|0;i=b>>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=59368+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=m&~(1<<e);c[14832]=a}else{c[d+12>>2]=b;c[a>>2]=d;a=m}v=e<<3;h=v-k|0;c[g+4>>2]=k|3;f=g+k|0;c[f+4>>2]=h|1;c[g+v>>2]=h;if(l|0){e=c[14837]|0;b=l>>>3;d=59368+(b<<1<<2)|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[14834]=h;c[14837]=f;v=i;Ra=w;return v|0}g=c[14833]|0;if(g){d=(g&0-g)+-1|0;f=d>>>12&16;d=d>>>f;e=d>>>5&8;d=d>>>e;h=d>>>2&4;d=d>>>h;i=d>>>1&2;d=d>>>i;j=d>>>1&1;j=c[59632+((e|f|h|i|j)+(d>>>j)<<2)>>2]|0;d=j;i=j;j=(c[j+4>>2]&-8)-k|0;while(1){a=c[d+16>>2]|0;if(!a){a=c[d+20>>2]|0;if(!a)break}h=(c[a+4>>2]&-8)-k|0;f=h>>>0<j>>>0;d=a;i=f?a:i;j=f?h:j}h=i+k|0;if(h>>>0>i>>>0){f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[i+28>>2]|0;a=59632+(b<<2)|0;if((i|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14833]=g&~(1<<b);break}}else{v=f+16|0;c[((c[v>>2]|0)==(i|0)?v:f+20|0)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[i+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[i+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(j>>>0<16){v=j+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[h+4>>2]=j|1;c[h+j>>2]=j;if(l|0){e=c[14837]|0;b=l>>>3;d=59368+(b<<1<<2)|0;b=1<<b;if(!(b&m)){c[14832]=b|m;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[14834]=j;c[14837]=h}v=i+8|0;Ra=w;return v|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;e=c[14833]|0;if(e){f=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;q=a<<m;i=(q+520192|0)>>>16&4;q=q<<i;j=(q+245760|0)>>>16&2;j=14-(i|m|j)+(q<<j>>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;d=c[59632+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;q=61}else{a=0;i=k<<((j|0)==31?0:25-(j>>>1)|0);g=0;while(1){h=(c[d+4>>2]&-8)-k|0;if(h>>>0<f>>>0)if(!h){a=d;f=0;q=65;break a}else{a=d;f=h}q=c[d+20>>2]|0;d=c[d+16+(i>>>31<<2)>>2]|0;g=(q|0)==0|(q|0)==(d|0)?g:q;if(!d){d=g;q=61;break}else i=i<<1}}while(0);if((q|0)==61){if((d|0)==0&(a|0)==0){a=2<<j;a=(a|0-a)&e;if(!a){m=k;break}m=(a&0-a)+-1|0;h=m>>>12&16;m=m>>>h;g=m>>>5&8;m=m>>>g;i=m>>>2&4;m=m>>>i;j=m>>>1&2;m=m>>>j;d=m>>>1&1;a=0;d=c[59632+((g|h|i|j|d)+(m>>>d)<<2)>>2]|0}if(!d){i=a;h=f}else q=65}if((q|0)==65){g=d;while(1){m=(c[g+4>>2]&-8)-k|0;d=m>>>0<f>>>0;f=d?m:f;a=d?g:a;d=c[g+16>>2]|0;if(!d)d=c[g+20>>2]|0;if(!d){i=a;h=f;break}else g=d}}if(((i|0)!=0?h>>>0<((c[14834]|0)-k|0)>>>0:0)?(l=i+k|0,l>>>0>i>>>0):0){g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){f=b+20|0;d=c[f>>2]|0;if(!d){f=b+16|0;d=c[f>>2]|0;if(!d)break;else{b=d;a=f}}else{b=d;a=f}}c[a>>2]=0}else{v=c[i+8>>2]|0;c[v+12>>2]=b;c[b+8>>2]=v}while(0);do if(g){a=c[i+28>>2]|0;d=59632+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=e&~(1<<a);c[14833]=e;break}}else{v=g+16|0;c[((c[v>>2]|0)==(i|0)?v:g+20|0)>>2]=b;if(!b)break}c[b+24>>2]=g;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);b:do if(h>>>0<16){v=h+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[l+4>>2]=h|1;c[l+h>>2]=h;b=h>>>3;if(h>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=l;c[b+12>>2]=l;c[l+8>>2]=b;c[l+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)d=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;d=(v+245760|0)>>>16&2;d=14-(t|u|d)+(v<<d>>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;b=59632+(d<<2)|0;c[l+28>>2]=d;a=l+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<d;if(!(e&a)){c[14833]=e|a;c[b>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(h|0)){e=h<<((d|0)==31?0:25-(d>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(h|0)){b=a;break c}else{e=e<<1;b=a}}c[d>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break b}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=l;c[u>>2]=l;c[l+8>>2]=v;c[l+12>>2]=b;c[l+24>>2]=0}while(0);v=i+8|0;Ra=w;return v|0}else m=k}else m=k}else m=-1;while(0);d=c[14834]|0;if(d>>>0>=m>>>0){b=d-m|0;a=c[14837]|0;if(b>>>0>15){v=a+m|0;c[14837]=v;c[14834]=b;c[v+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=m|3}else{c[14834]=0;c[14837]=0;c[a+4>>2]=d|3;v=a+d+4|0;c[v>>2]=c[v>>2]|1}v=a+8|0;Ra=w;return v|0}h=c[14835]|0;if(h>>>0>m>>>0){t=h-m|0;c[14835]=t;v=c[14838]|0;u=v+m|0;c[14838]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;Ra=w;return v|0}if(!(c[14950]|0)){c[14952]=4096;c[14951]=4096;c[14953]=-1;c[14954]=-1;c[14955]=0;c[14943]=0;c[14950]=n&-16^1431655768;a=4096}else a=c[14952]|0;i=m+48|0;j=m+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=m>>>0){v=0;Ra=w;return v|0}a=c[14942]|0;if(a|0?(l=c[14940]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){v=0;Ra=w;return v|0}d:do if(!(c[14943]&4)){d=c[14838]|0;e:do if(d){e=59776;while(1){n=c[e>>2]|0;if(n>>>0<=d>>>0?(n+(c[e+4>>2]|0)|0)>>>0>d>>>0:0)break;a=c[e+8>>2]|0;if(!a){q=128;break e}else e=a}b=g-h&f;if(b>>>0<2147483647){a=hw(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[e+4>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;q=145;break d}}else{e=a;q=136}}else b=0}else q=128;while(0);do if((q|0)==128){d=hw(0)|0;if((d|0)!=(-1|0)?(b=d,o=c[14951]|0,p=o+-1|0,b=((p&b|0)==0?0:(p+b&0-o)-b|0)+k|0,o=c[14940]|0,p=b+o|0,b>>>0>m>>>0&b>>>0<2147483647):0){n=c[14942]|0;if(n|0?p>>>0<=o>>>0|p>>>0>n>>>0:0){b=0;break}a=hw(b|0)|0;if((a|0)==(d|0)){h=b;g=d;q=145;break d}else{e=a;q=136}}else b=0}while(0);do if((q|0)==136){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;q=145;break d}a=c[14952]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;q=145;break d}if((hw(a|0)|0)==(-1|0)){hw(d|0)|0;b=0;break}else{h=a+b|0;g=e;q=145;break d}}while(0);c[14943]=c[14943]|4;q=143}else{b=0;q=143}while(0);if(((q|0)==143?k>>>0<2147483647:0)?(t=hw(k|0)|0,p=hw(0)|0,r=p-t|0,s=r>>>0>(m+40|0)>>>0,!((t|0)==(-1|0)|s^1|t>>>0<p>>>0&((t|0)!=(-1|0)&(p|0)!=(-1|0))^1)):0){h=s?r:b;g=t;q=145}if((q|0)==145){b=(c[14940]|0)+h|0;c[14940]=b;if(b>>>0>(c[14941]|0)>>>0)c[14941]=b;j=c[14838]|0;f:do if(j){b=59776;while(1){a=c[b>>2]|0;d=c[b+4>>2]|0;if((g|0)==(a+d|0)){q=154;break}e=c[b+8>>2]|0;if(!e)break;else b=e}if(((q|0)==154?(u=b+4|0,(c[b+12>>2]&8|0)==0):0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[u>>2]=d+h;v=(c[14835]|0)+h|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;u=j+t|0;t=v-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[j+v+4>>2]=40;c[14839]=c[14954];break}if(g>>>0<(c[14836]|0)>>>0)c[14836]=g;d=g+h|0;b=59776;while(1){if((c[b>>2]|0)==(d|0)){q=162;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((q|0)==162?(c[b+12>>2]&8|0)==0:0){c[b>>2]=g;l=b+4|0;c[l>>2]=(c[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;k=l+m|0;i=b-l-m|0;c[l+4>>2]=m|3;g:do if((j|0)==(b|0)){v=(c[14835]|0)+i|0;c[14835]=v;c[14838]=k;c[k+4>>2]=v|1}else{if((c[14837]|0)==(b|0)){v=(c[14834]|0)+i|0;c[14834]=v;c[14837]=k;c[k+4>>2]=v|1;c[k+v>>2]=v;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;h:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[14832]=c[14832]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){d=b+16|0;e=d+4|0;a=c[e>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}}else d=e;while(1){f=a+20|0;e=c[f>>2]|0;if(!e){f=a+16|0;e=c[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}c[d>>2]=0}else{v=c[b+8>>2]|0;c[v+12>>2]=a;c[a+8>>2]=v}while(0);if(!g)break;d=c[b+28>>2]|0;e=59632+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){v=g+16|0;c[((c[v>>2]|0)==(b|0)?v:g+20|0)>>2]=a;if(!a)break h}else{c[e>>2]=a;if(a|0)break;c[14833]=c[14833]&~(1<<d);break h}while(0);c[a+24>>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=d;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=59632+(e<<2)|0;c[k+28>>2]=e;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14833]|0;d=1<<e;if(!(a&d)){c[14833]=a|d;c[b>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break}b=c[b>>2]|0;i:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break i}else{e=e<<1;b=a}}c[d>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break g}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=k;c[u>>2]=k;c[k+8>>2]=v;c[k+12>>2]=b;c[k+24>>2]=0}while(0);v=l+8|0;Ra=w;return v|0}b=59776;while(1){a=c[b>>2]|0;if(a>>>0<=j>>>0?(v=a+(c[b+4>>2]|0)|0,v>>>0>j>>>0):0)break;b=c[b+8>>2]|0}f=v+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0<f>>>0?j:a;b=a+8|0;d=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=d-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[g+d+4>>2]=40;c[14839]=c[14954];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14944];c[b+4>>2]=c[14945];c[b+8>>2]=c[14946];c[b+12>>2]=c[14947];c[14944]=g;c[14945]=h;c[14947]=0;c[14946]=b;b=a+24|0;do{u=b;b=b+4|0;c[b>>2]=7}while((u+8|0)>>>0<v>>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=59632+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[f>>2]=0;b=c[14833]|0;a=1<<e;if(!(b&a)){c[14833]=b|a;c[d>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}b=c[d>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(g|0)){b=a;break j}else{e=e<<1;b=a}}c[d>>2]=j;c[j+24>>2]=b;c[j+12>>2]=j;c[j+8>>2]=j;break f}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=j;c[u>>2]=j;c[j+8>>2]=v;c[j+12>>2]=b;c[j+24>>2]=0}}else{v=c[14836]|0;if((v|0)==0|g>>>0<v>>>0)c[14836]=g;c[14944]=g;c[14945]=h;c[14947]=0;c[14841]=c[14950];c[14840]=-1;c[14845]=59368;c[14844]=59368;c[14847]=59376;c[14846]=59376;c[14849]=59384;c[14848]=59384;c[14851]=59392;c[14850]=59392;c[14853]=59400;c[14852]=59400;c[14855]=59408;c[14854]=59408;c[14857]=59416;c[14856]=59416;c[14859]=59424;c[14858]=59424;c[14861]=59432;c[14860]=59432;c[14863]=59440;c[14862]=59440;c[14865]=59448;c[14864]=59448;c[14867]=59456;c[14866]=59456;c[14869]=59464;c[14868]=59464;c[14871]=59472;c[14870]=59472;c[14873]=59480;c[14872]=59480;c[14875]=59488;c[14874]=59488;c[14877]=59496;c[14876]=59496;c[14879]=59504;c[14878]=59504;c[14881]=59512;c[14880]=59512;c[14883]=59520;c[14882]=59520;c[14885]=59528;c[14884]=59528;c[14887]=59536;c[14886]=59536;c[14889]=59544;c[14888]=59544;c[14891]=59552;c[14890]=59552;c[14893]=59560;c[14892]=59560;c[14895]=59568;c[14894]=59568;c[14897]=59576;c[14896]=59576;c[14899]=59584;c[14898]=59584;c[14901]=59592;c[14900]=59592;c[14903]=59600;c[14902]=59600;c[14905]=59608;c[14904]=59608;c[14907]=59616;c[14906]=59616;v=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=v-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[g+v+4>>2]=40;c[14839]=c[14954]}while(0);b=c[14835]|0;if(b>>>0>m>>>0){t=b-m|0;c[14835]=t;v=c[14838]|0;u=v+m|0;c[14838]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;Ra=w;return v|0}}v=uu()|0;c[v>>2]=12;v=0;Ra=w;return v|0}function mu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[14836]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0<f>>>0)return;if((c[14837]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14834]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[14832]=c[14832]&~(1<<d);i=h;b=g;break}else{c[a+12>>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){b=h+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){a=0;break}}else b=d;while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=59632+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14833]=c[14833]&~(1<<b);i=h;b=g;break}}else{i=f+16|0;c[((c[i>>2]|0)==(h|0)?i:f+20|0)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[14838]|0)==(j|0)){j=(c[14835]|0)+b|0;c[14835]=j;c[14838]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14837]|0))return;c[14837]=0;c[14834]=0;return}if((c[14837]|0)==(j|0)){j=(c[14834]|0)+b|0;c[14834]=j;c[14837]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[14832]=c[14832]&~(1<<d);break}else{c[b+12>>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){b=j+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){d=0;break}}else b=d;while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0;d=a}else{d=c[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=59632+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14833]=c[14833]&~(1<<a);break}}else{e=g+16|0;c[((c[e>>2]|0)==(j|0)?e:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[14837]|0)){c[14834]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=59368+(a<<1<<2)|0;b=c[14832]|0;a=1<<a;if(!(b&a)){c[14832]=b|a;a=d;b=d+8|0}else{b=d+8|0;a=c[b>>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)e=31;else{h=(a+1048320|0)>>>16&8;j=a<<h;g=(j+520192|0)>>>16&4;j=j<<g;e=(j+245760|0)>>>16&2;e=14-(g|h|e)+(j<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;a=59632+(e<<2)|0;c[i+28>>2]=e;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14833]|0;d=1<<e;a:do if(!(b&d)){c[14833]=b|d;c[a>>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i}else{a=c[a>>2]|0;b:do if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){a=b;break b}else{e=e<<1;a=b}}c[d>>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i;break a}while(0);h=a+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=a;c[i+24>>2]=0}while(0);j=(c[14840]|0)+-1|0;c[14840]=j;if(j|0)return;a=59784;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14840]=-1;return}function nu(a,b){a=a|0;b=b|0;var d=0;if(a){d=G(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=lu(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;gw(a|0,0,d|0)|0;return a|0}function ou(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=lu(b)|0;return b|0}if(b>>>0>4294967231){b=uu()|0;c[b>>2]=12;b=0;return b|0}d=pu(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=lu(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;ew(d|0,a|0,(e>>>0<b>>>0?e:b)|0)|0;mu(a);b=d;return b|0}function pu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[14952]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;qu(k,d);return a|0}if((c[14838]|0)==(i|0)){k=(c[14835]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[14838]=e;c[14835]=d;return a|0}if((c[14837]|0)==(i|0)){e=(c[14834]|0)+d|0;if(e>>>0<b>>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[14834]=d;c[14837]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0<b>>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[14832]=c[14832]&~(1<<f);break}else{c[e+12>>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){e=i+16|0;f=e+4|0;d=c[f>>2]|0;if(!d){d=c[e>>2]|0;if(!d){f=0;break}}else e=f;while(1){g=d+20|0;f=c[g>>2]|0;if(!f){g=d+16|0;f=c[g>>2]|0;if(!f)break;else{d=f;e=g}}else{d=f;e=g}}c[e>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=59632+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14833]=c[14833]&~(1<<d);break}}else{g=h+16|0;c[((c[g>>2]|0)==(i|0)?g:h+20|0)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=m&1|j|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;qu(i,k);return a|0}return 0}function qu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[14837]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14834]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[14832]=c[14832]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;e=d+4|0;a=c[e>>2]|0;if(!a){a=c[d>>2]|0;if(!a){a=0;break}}else d=e;while(1){f=a+20|0;e=c[f>>2]|0;if(!e){f=a+16|0;e=c[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}c[d>>2]=0}else{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=59632+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14833]=c[14833]&~(1<<d);break}}else{f=g+16|0;c[((c[f>>2]|0)==(h|0)?f:g+20|0)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[14838]|0)==(i|0)){i=(c[14835]|0)+b|0;c[14835]=i;c[14838]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14837]|0))return;c[14837]=0;c[14834]=0;return}if((c[14837]|0)==(i|0)){i=(c[14834]|0)+b|0;c[14834]=i;c[14837]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[14832]=c[14832]&~(1<<d);break}else{c[a+12>>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+16|0;d=a+4|0;b=c[d>>2]|0;if(!b){b=c[a>>2]|0;if(!b){d=0;break}}else a=d;while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=59632+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14833]=c[14833]&~(1<<b);break}}else{e=g+16|0;c[((c[e>>2]|0)==(i|0)?e:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[14837]|0)){c[14834]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<<b;if(!(a&b)){c[14832]=a|b;b=d;a=d+8|0}else{a=d+8|0;b=c[a>>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)e=31;else{g=(b+1048320|0)>>>16&8;i=b<<g;d=(i+520192|0)>>>16&4;i=i<<d;e=(i+245760|0)>>>16&2;e=14-(d|g|e)+(i<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;b=59632+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14833]|0;d=1<<e;if(!(a&d)){c[14833]=a|d;c[b>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;return}b=c[b>>2]|0;a:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break a}else{e=e<<1;b=a}}c[d>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;return}while(0);g=b+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=b;c[h+24>>2]=0;return}function ru(a,b){a=a|0;b=b|0;if(a>>>0<9){b=lu(b)|0;return b|0}else{b=su(a,b)|0;return b|0}return 0}function su(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a>>>0>16?a:16;if(!(d+-1&d))a=d;else{a=16;while(1)if(a>>>0<d>>>0)a=a<<1;else break}if((-64-a|0)>>>0<=b>>>0){h=uu()|0;c[h>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=lu(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;qu(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;qu(f,i)}i=b+8|0;return i|0}function tu(a){a=a|0;var b=0;if(a>>>0>4294963200){b=uu()|0;c[b>>2]=0-a;a=-1}return a|0}function uu(){return 59888}function vu(a){a=a|0;return a|0}function wu(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function xu(){return 30868}function yu(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function zu(a){a=a|0;var b=0;b=(Au(a)|0)==0;return (b?a:a&95)|0}function Au(a){a=a|0;return (a+-97|0)>>>0<26|0}function Bu(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)b=e;else{do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));b=e}return (d&255)-(b&255)|0}function Cu(a){a=a|0;return (a+-65|0)>>>0<26|0}function Du(a){a=a|0;var b=0;b=(Cu(a)|0)==0;return (b?a:a|32)|0}function Eu(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=5;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=5;break}}}while(0);if((e|0)==5){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function Fu(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Gu(c[b>>2]|0,c[b+4>>2]|0,a)|0;return ((b|0)==0?a:b)|0}function Gu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=Hu(c[b+8>>2]|0,o)|0;f=Hu(c[b+12>>2]|0,o)|0;g=Hu(c[b+16>>2]|0,o)|0;a:do if((h>>>0<d>>>2>>>0?(n=d-(h<<2)|0,f>>>0<n>>>0&g>>>0<n>>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=Hu(c[b+(g<<2)>>2]|0,o)|0;g=Hu(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0<d>>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=Bu(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}l=f?l:k;h=f?j:h-j|0}f=i+m|0;g=Hu(c[b+(f<<2)>>2]|0,o)|0;f=Hu(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0<d>>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function Hu(a,b){a=a|0;b=b|0;var c=0;c=dw(a|0)|0;return ((b|0)==0?a:c)|0}function Iu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=Ra;Ra=Ra+192|0;i=r+168|0;h=r+152|0;q=r+136|0;p=r+120|0;o=r+112|0;l=r+96|0;k=r+80|0;f=r+64|0;m=r+48|0;g=r+32|0;e=r+16|0;s=r;j=r+184|0;c[s>>2]=d;d=(c[s>>2]|0)+(4-1)&~(4-1);n=c[d>>2]|0;c[s>>2]=d+4;n=(b|0)==4?n|32768:n;a:do switch(b|0){case 14:{c[e>>2]=a;c[e+4>>2]=14;c[e+8>>2]=n;d=tu(oa(221,e|0)|0)|0;break}case 9:{c[g>>2]=a;c[g+4>>2]=16;c[g+8>>2]=j;d=oa(221,g|0)|0;switch(d|0){case -22:{c[m>>2]=a;c[m+4>>2]=9;c[m+8>>2]=n;d=oa(221,m|0)|0;break}case 0:{d=c[j+4>>2]|0;d=(c[j>>2]|0)==2?0-d|0:d;break}default:d=tu(d)|0}break}case 1030:{c[f>>2]=a;c[f+4>>2]=1030;c[f+8>>2]=n;d=oa(221,f|0)|0;if((d|0)!=-22){if((d|0)>-1){c[k>>2]=d;c[k+4>>2]=2;c[k+8>>2]=1;oa(221,k|0)|0}d=tu(d)|0;break a}c[l>>2]=a;c[l+4>>2]=1030;c[l+8>>2]=0;d=oa(221,l|0)|0;if((d|0)==-22){c[p>>2]=a;c[p+4>>2]=0;c[p+8>>2]=n;d=oa(221,p|0)|0;if((d|0)>-1){c[q>>2]=d;c[q+4>>2]=2;c[q+8>>2]=1;oa(221,q|0)|0}d=tu(d)|0;break a}else{if((d|0)>-1){c[o>>2]=d;va(6,o|0)|0}d=tu(-22)|0;break a}}case 15:case 16:case 12:case 13:{c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=n;d=tu(oa(221,h|0)|0)|0;break}default:{c[i>>2]=a;c[i+4>>2]=b;c[i+8>>2]=n;d=tu(oa(221,i|0)|0)|0}}while(0);Ra=r;return d|0}function Ju(){var a=0,b=0;b=Ra;Ra=Ra+16|0;a=ja(20,b|0)|0;Ra=b;return a|0}function Ku(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(Eu(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=G(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function Lu(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function Mu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+48|0;g=h+32|0;f=h+16|0;e=h;if(!(b&4194368))e=0;else{c[e>>2]=d;i=(c[e>>2]|0)+(4-1)&~(4-1);d=c[i>>2]|0;c[e>>2]=i+4;e=d}c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=e;e=ua(5,f|0)|0;if(!((b&524288|0)==0|(e|0)<0)){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;oa(221,g|0)|0}i=tu(e)|0;Ra=h;return i|0}function Nu(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;a=vu(a)|0;c[d>>2]=a;a=va(6,d|0)|0;a=tu((a|0)==-4?0:a)|0;Ra=b;return a|0}function Ou(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ha(196,e|0)|0)|0;Ra=d;return b|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ga(195,e|0)|0)|0;Ra=d;return b|0}function Qu(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(qa(33,e|0)|0)|0;Ra=d;return b|0}function Ru(a,b){a=a|0;b=b|0;return Uu(a,b,(Eu(a)|0)+1|0)|0}function Su(a,b){a=a|0;b=b|0;Tu(a,b)|0;return a|0}function Tu(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=10}else f=10;while(0);if((f|0)==10){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function Uu(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(!d)d=0;else{c=c&255;while(1){d=d+-1|0;if((a[b+d>>0]|0)==c<<24>>24)break;if(!d){d=0;break a}}d=b+d|0}while(0);return d|0}function Vu(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=58986;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;do{f=c;c=(c>>>0)/10|0;d=d+-1|0;a[b+d>>0]=f-(c*10|0)|48}while(f>>>0>=10)}return}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(wa(85,f|0)|0)|0;Ra=e;return d|0}function Xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+48|0;f=g+40|0;e=g;d=g+32|0;c[d>>2]=a;c[d+4>>2]=b;d=ia(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(oa(221,e|0)|0)>=0):0){Vu(e,a);c[f>>2]=e;c[f+4>>2]=b;b=tu(ga(195,f|0)|0)|0}else b=tu(d)|0;Ra=g;return b|0}function Yu(a){a=a|0;var b=0,c=0;b=(Eu(a)|0)+1|0;c=lu(b)|0;if(!c)a=0;else a=ew(c|0,a|0,b|0)|0;return a|0}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+4112|0;e=g+4096|0;d=g;if(a)if(!b){a=uu()|0;c[a>>2]=22;a=0}else f=4;else{b=4096;a=d;f=4}if((f|0)==4){c[e>>2]=a;c[e+4>>2]=b;if((tu(da(183,e|0)|0)|0)>=0){if((a|0)==(d|0))a=Yu(d)|0}else a=0}Ra=g;return a|0}function _u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(sa(4,f|0)|0)|0;Ra=e;return d|0}function $u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(pa(3,f|0)|0)|0;Ra=e;return d|0}function av(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);f=(f&255)-(d[c>>0]|0)|0}return f|0}function bv(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[27392+f>>0]|0)==(b|0)){g=4;break}f=f+1|0;if((f|0)==87){b=87;g=5;break}}if((g|0)==4)if(!f)f=27488;else{b=f;g=5}if((g|0)==5){f=27488;do{do{g=f;f=f+1|0}while((a[g>>0]|0)!=0);b=b+-1|0}while((b|0)!=0)}return cv(f,c[e+20>>2]|0)|0}function cv(a,b){a=a|0;b=b|0;return Fu(a,b)|0}function dv(a){a=a|0;var b=0;b=(ev()|0)+188|0;return bv(a,c[b>>2]|0)|0}function ev(){return xu()|0}function fv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ra(39,e|0)|0)|0;Ra=d;return b|0}function gv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(xa(91,e|0)|0)|0;Ra=d;return b|0}function hv(){return}function iv(a){a=+a;var b=0;g[h>>3]=a;b=c[h+4>>2]&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=b;a=+g[h>>3];do if(b>>>0<1072049730)if(b>>>0<1045430272)a=1.0;else{a=+kv(a);a=a*a/((a+1.0)*2.0)+1.0}else if(b>>>0<1082535490){a=+D(+a);a=(a+1.0/a)*.5;break}else{a=+lv(a);break}while(0);return +a}function jv(a){a=+a;var b=0.0,d=0,e=0.0;g[h>>3]=a;d=c[h+4>>2]|0;e=(d|0)<0?-.5:.5;d=d&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=d;b=+g[h>>3];do if(d>>>0<1082535490){b=+kv(b);if(d>>>0>=1072693248){a=e*(b+b/(b+1.0));break}if(d>>>0>=1045430272)a=e*(b*2.0-b*b/(b+1.0))}else a=e*2.0*+lv(b);while(0);return +a}function kv(a){a=+a;var b=0,d=0,e=0.0,f=0.0,i=0.0,j=0,k=0,l=0.0;g[h>>3]=a;d=c[h+4>>2]|0;b=d&2147483647;d=bw(c[h>>2]|0,d|0,63)|0;L()|0;do if(b>>>0>1078159481){j=mv(a)|0;b=(L()|0)&2147483647;if(!(b>>>0>2146435072|(b|0)==2146435072&j>>>0>0))if(!d)if(a>709.782712893384)a=a*8988465674311579538646525.0e283;else k=11;else a=-1.0}else{if(b>>>0<=1071001154)if(b>>>0<1016070144)break;else{i=0.0;j=0;k=14;break}if(b>>>0<1072734898)if(!d){b=1;e=a+-.6931471803691238;f=1.9082149292705877e-10;k=12;break}else{b=-1;e=a+.6931471803691238;f=-1.9082149292705877e-10;k=12;break}else k=11}while(0);if((k|0)==11){b=~~(a*1.4426950408889634+((d|0)==0?.5:-.5));f=+(b|0);e=a-f*.6931471803691238;f=f*1.9082149292705877e-10;k=12}if((k|0)==12){i=e-f;a=i;i=e-i-f;j=b;k=14}a:do if((k|0)==14){f=a*.5;e=a*f;l=e*(e*(e*(e*(4.008217827329362e-06-e*2.0109921818362437e-07)+-7.93650757867488e-05)+1.5873015872548146e-03)+-.03333333333333313)+1.0;f=3.0-f*l;f=e*((l-f)/(6.0-a*f));if(!j){a=a-(a*f-e);break}f=a*(f-i)-i-e;switch(j|0){case -1:{a=(a-f)*.5+-.5;break a}case 1:if(a<-.25){a=(f-(a+.5))*-2.0;break a}else{a=(a-f)*2.0+1.0;break a}default:{d=cw(j+1023|0,0,52)|0;k=L()|0;c[h>>2]=d;c[h+4>>2]=k;i=+g[h>>3];if(j>>>0>56){a=a-f+1.0;a=((j|0)==1024?a*2.0*8988465674311579538646525.0e283:a*i)+-1.0;break a}b=cw(1023-j|0,0,52)|0;d=L()|0;if((j|0)<20){c[h>>2]=b;c[h+4>>2]=d;e=1.0-+g[h>>3];a=a-f}else{c[h>>2]=b;c[h+4>>2]=d;e=a-(f+ +g[h>>3]);a=1.0}a=(e+a)*i;break a}}}while(0);return +a}function lv(a){a=+a;return +(+D(+(a+-1416.0996898839683))*2247116418577894884661631.0e283*2247116418577894884661631.0e283)}function mv(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;K(c[h+4>>2]|0);return b|0}function nv(a,b,c){a=a|0;b=b|0;c=c|0;ov(a,b,c)|0;return a|0}function ov(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=13}}else e=0}else h=13;while(0);c:do if((h|0)==13)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);gw(b|0,0,e|0)|0;return b|0}function pv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+208|0;j=m;k=m+192|0;h=G(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0<h>>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)qv(a,d,e,f,j);else sv(a,d,e,k,f,0,j);if((f|0)==1){tv(k,1);f=0;break}else{tv(k,b);f=1;break}}else{qv(a,d,e,f,j);rv(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0<g>>>0)}else{f=1;b=1}sv(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1)if(!(c[g>>2]|0))break a;else l=19;else if((f|0)<2)l=19;else{tv(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;rv(k,1);sv(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);tv(k,1);b=c[k>>2]|1;c[k>>2]=b;a=a+i|0;sv(a,d,e,k,n,1,j);f=n}if((l|0)==19){l=0;b=uv(k)|0;rv(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}}while(0);Ra=m;return}function qv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+240|0;l=m;c[l>>2]=a;a:do if((e|0)>1){k=0-b|0;i=a;g=e;e=1;h=a;while(1){i=i+k|0;j=g+-2|0;a=i+(0-(c[f+(j<<2)>>2]|0))|0;if((Xa[d&255](h,a)|0)>-1?(Xa[d&255](h,i)|0)>-1:0)break a;h=l+(e<<2)|0;if((Xa[d&255](a,i)|0)>-1){c[h>>2]=a;g=g+-1|0}else{c[h>>2]=i;a=i;g=j}e=e+1|0;if((g|0)<=1)break a;i=a;h=c[l>>2]|0}}else e=1;while(0);wv(b,l,e);Ra=m;return}function rv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function sv(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=Ra;Ra=Ra+240|0;m=o+232|0;n=o;p=c[e>>2]|0;c[m>>2]=p;j=c[e+4>>2]|0;k=m+4|0;c[k>>2]=j;c[n>>2]=a;a:do if((p|0)!=1|(j|0)!=0?(l=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Xa[d&255](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+l|0;i=c[h+(f+-2<<2)>>2]|0;if((Xa[d&255](g,j)|0)>-1){i=10;break a}if((Xa[d&255](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[n+(e<<2)>>2]=j;p=uv(m)|0;rv(m,p);f=p+f|0;if(!((c[m>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((Xa[d&255](a,c[n>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{p=j;e=g;g=1;j=a;a=p}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){wv(b,n,e);qv(a,b,d,f,h)}Ra=o;return}function tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<<b;c[a>>2]=d<<b;return}function uv(a){a=a|0;var b=0;b=vv((c[a>>2]|0)+-1|0)|0;if(!b){b=vv(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function vv(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;while(1){a=a+1|0;if(!(b&2))b=b>>>1;else break}}else a=0;else a=32;return a|0}function wv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;ew(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;ew(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);Ra=h;return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=Ra;Ra=Ra+32|0;g=f;e=f+20|0;c[g>>2]=a;c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;d=(tu(ba(140,g|0)|0)|0)==0;Ra=f;return (d?c[e>>2]|0:-1)|0}function yv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=0;c[e+8>>2]=b;c[e+12>>2]=b>>31;b=tu(fa(194,e|0)|0)|0;Ra=d;return b|0}function zv(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu(aa(118,d|0)|0)|0;Ra=b;return a|0}function Av(a){a=a|0;var b=0,d=0;d=Ra;Ra=Ra+16|0;b=d;c[b>>2]=a;c[b+4>>2]=0;a=(Ja(b|0,b|0)|0)==0;Ra=d;return (a?0:c[b>>2]|0)|0}function Bv(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu($(10,d|0)|0)|0;Ra=b;return a|0}function Cv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+64|0;g=h+48|0;f=h;e=h+32|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;e=ma(207,e|0)|0;if((e|0)==-9?(c[f>>2]=a,c[f+4>>2]=1,(oa(221,f|0)|0)>=0):0){Vu(f,a);c[g>>2]=f;c[g+4>>2]=b;c[g+8>>2]=d;a=tu(na(212,g|0)|0)|0}else a=tu(e)|0;Ra=h;return a|0}function Dv(){var a=0,b=0;b=Ra;Ra=Ra+16|0;a=ka(201,b|0)|0;Ra=b;return a|0}function Ev(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu(ta(40,d|0)|0)|0;Ra=b;return a|0}function Fv(a){a=+a;var b=0,d=0,e=0,f=0,i=0.0;g[h>>3]=a;f=c[h>>2]|0;d=c[h+4>>2]|0;b=bw(f|0,d|0,52)|0;L()|0;b=b&2047;c[h>>2]=f;c[h+4>>2]=d&2147483647;a=+g[h>>3];if(b>>>0<1022){if(b>>>0>=991){i=a*2.0;a=i+i*a/(1.0-a);e=5}}else{a=a/(1.0-a)*2.0;e=5}if((e|0)==5)a=+Gv(a)*.5;return +((d|0)<0?-a:a)}function Gv(a){a=+a;var b=0.0,d=0,e=0.0,f=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0;g[h>>3]=a;d=c[h+4>>2]|0;do if((d|0)<0|d>>>0<1071284858)if(d>>>0<=3220176895){i=cw(d|0,0,1)|0;L()|0;if(i>>>0<2034237440)break;if(d>>>0<3218259653){e=0.0;b=0.0;f=11;break}else{f=8;break}}else{if(a==-1.0){a=-r;break}a=(a-a)/0.0;break}else if(d>>>0<=2146435071)f=8;while(0);if((f|0)==8){b=a+1.0;g[h>>3]=b;d=(c[h+4>>2]|0)+614242|0;if(d>>>0<1129316352)b=(d>>>0>1074790399?1.0-(b-a):a-(b+-1.0))/b;else b=0.0;c[h>>2]=c[h>>2];c[h+4>>2]=(d&1048575)+1072079006;e=+((d>>>20)+-1023|0);a=+g[h>>3]+-1.0;f=11}if((f|0)==11){j=a*(a*.5);m=a/(a+2.0);l=m*m;k=l*l;a=e*.6931471803691238+(a+(b+e*1.9082149292705877e-10+m*(j+(k*(k*(k*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(k*(k*(k*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))-j))}return +a}function Hv(a){a=+a;var b=0;g[h>>3]=a;b=bw(c[h>>2]|0,c[h+4>>2]|0,52)|0;L()|0;b=b&2047;do if(b>>>0>=1024)if(b>>>0<1049){a=+E(+(a*2.0-1.0/(+u(+(a*a+-1.0))+a)));break}else{a=+E(+a)+.6931471805599453;break}else{a=a+-1.0;a=+Gv(a+ +u(+(a*a+a*2.0)))}while(0);return +a}function Iv(a){a=+a;var b=0,d=0;g[h>>3]=a;d=c[h+4>>2]|0;b=d&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=b;a=+g[h>>3];do if(b>>>0>1071748074)if(b>>>0>1077149696){a=1.0-0.0/a;break}else{a=1.0-2.0/(+kv(a*2.0)+2.0);break}else{if(b>>>0>1070618798){a=+kv(a*2.0);a=a/(a+2.0);break}if(b>>>0>1048575){a=+kv(a*-2.0);a=-a/(a+2.0)}}while(0);return +((d|0)<0?-a:a)}function Jv(a){a=+a;var b=0,d=0,e=0,f=0.0;g[h>>3]=a;e=c[h>>2]|0;d=c[h+4>>2]|0;b=bw(e|0,d|0,52)|0;L()|0;b=b&2047;c[h>>2]=e;c[h+4>>2]=d&2147483647;a=+g[h>>3];do if(b>>>0<=1048){if(b>>>0>1023){a=+E(+(a*2.0+1.0/(+u(+(a*a+1.0))+a)));break}if(b>>>0>996){f=a*a;a=+Gv(f/(+u(+(f+1.0))+1.0)+a)}}else a=+E(+a)+.6931471805599453;while(0);return +((d|0)<0?-a:a)}function Kv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+48|0;f=g+40|0;e=g;d=g+32|0;c[d>>2]=a;c[d+4>>2]=b;d=ya(94,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(oa(221,e|0)|0)>=0):0){Vu(e,a);c[f>>2]=e;c[f+4>>2]=b;a=tu(ca(15,f|0)|0)|0}else a=tu(d)|0;Ra=g;return a|0}function Lv(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=Ra;Ra=Ra+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){a=uu()|0;c[a>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=tu(ea(192,h|0)|0)|0}else{a=uu()|0;c[a>>2]=22;a=-1}while(0);Ra=i;return a|0}function Mv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=Ra;Ra=Ra+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){gw(f|0,0,32)|0;e=a[d>>0]|0;if(e<<24>>24)do{j=e&255;i=f+(j>>>5<<2)|0;c[i>>2]=c[i>>2]|1<<(j&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;if(!(d<<24>>24))e=b;else{e=b;do{j=d&255;if(c[f+(j>>>5<<2)>>2]&1<<(j&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=Ku(b,e<<24>>24)|0;Ra=h;return e-b|0}function Nv(){Z(59908);return}function Ov(){return 59892}function Pv(){return 59900}function Qv(){return 59904}function Rv(){return 59908}function Sv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (K(b+d+(c>>>0<a>>>0|0)>>>0|0),c|0)|0}function Tv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (K(d|0),a-c>>>0|0)|0}function Uv(a){a=a|0;return (a?31-(I(a^a-1)|0)|0:32)|0}function Vv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (K(n|0),f)|0}else{if(!g){n=0;f=0;return (K(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (K(n|0),f)|0}}g=(i|0)==0;do if(h){if(!g){g=(I(i|0)|0)-(I(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return (K(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (K(n|0),f)|0}g=h-1|0;if(g&h|0){i=(I(h|0)|0)+33-(I(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (K(o|0),p)|0}else{p=Uv(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (K(o|0),p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (K(o|0),p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (K(o|0),p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((Uv(i|0)|0)>>>0);return (K(o|0),p)|0}g=(I(i|0)|0)-(I(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return (K(o|0),p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (K(o|0),p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Sv(m|0,l|0,-1,-1)|0;d=L()|0;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;Tv(k|0,d|0,e|0,n|0)|0;p=L()|0;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Tv(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=L()|0;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (K(o|0),p)|0}function Wv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=Tv(j^a|0,i^b|0,j|0,i|0)|0;g=L()|0;a=f^j;b=e^i;return Tv((Vv(h,g,Tv(f^c|0,e^d|0,f|0,e|0)|0,L()|0,0)|0)^a|0,(L()|0)^b|0,a|0,b|0)|0}function Xv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=G(e,f)|0;d=a>>>16;a=(c>>>16)+(G(e,d)|0)|0;e=b>>>16;b=G(e,f)|0;return (K((a>>>16)+(G(e,d)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|c&65535|0)|0}function Yv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Xv(e,f)|0;a=L()|0;return (K((G(b,f)|0)+(G(d,e)|0)+a|a&0|0),c|0|0)|0}function Zv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=Ra;Ra=Ra+16|0;i=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;j=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=Tv(h^a|0,g^b|0,h|0,g|0)|0;b=L()|0;Vv(a,b,Tv(k^d|0,j^e|0,k|0,j|0)|0,L()|0,i)|0;e=Tv(c[i>>2]^h|0,c[i+4>>2]^g|0,h|0,g|0)|0;d=L()|0;Ra=f;return (K(d|0),e)|0}function _v(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Vv(a,b,c,d,0)|0}function $v(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=Ra;Ra=Ra+16|0;f=g|0;Vv(a,b,d,e,f)|0;Ra=g;return (K(c[f+4>>2]|0),c[f>>2]|0)|0}function aw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}K(((b|0)<0?-1:0)|0);return b>>c-32|0}function bw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b>>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}K(0);return b>>>c-32|0}function cw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b<<c|(a&(1<<c)-1<<32-c)>>>32-c|0);return a<<c}K(a<<c-32|0);return 0}function dw(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function ew(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){Aa(b|0,d|0,e|0)|0;return b|0}h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function fw(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else ew(b,c,d)|0;return b|0}function gw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;i=d|d<<8|d<<16|d<<24;g=f-64|0;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function hw(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){Pa(b|0)|0;_(12);return -1}if((b|0)>(za()|0)?(Ba(b|0)|0)==0:0){_(12);return -1}c[i>>2]=b;return d|0}function iw(a){a=a|0;return Va[a&127]()|0}function jw(){return M(0)|0}function kw(){return M(1)|0}function lw(){return M(2)|0}function mw(){return M(3)|0}function nw(){return M(4)|0}function ow(){return M(5)|0}function pw(){return M(6)|0}function qw(){return M(7)|0}function rw(){return M(8)|0}function sw(){return M(9)|0}function tw(){return M(10)|0}function uw(){return M(11)|0}function vw(){return M(12)|0}function ww(){return M(13)|0}function xw(){return M(14)|0}function yw(){return M(15)|0}function zw(){return M(16)|0}function Aw(){return M(17)|0}function Bw(){return M(18)|0}function Cw(){return M(19)|0}function Dw(){return M(20)|0}function Ew(){return M(21)|0}function Fw(){return M(22)|0}function Gw(){return M(23)|0}function Hw(){return M(24)|0}function Iw(){return M(25)|0}function Jw(){return M(26)|0}function Kw(){return M(27)|0}function Lw(){return M(28)|0}function Mw(){return M(29)|0}function Nw(){return M(30)|0}function Ow(){return M(31)|0}function Pw(){return M(32)|0}function Qw(){return M(33)|0}function Rw(){return M(34)|0}function Sw(){return M(35)|0}function Tw(){return M(36)|0}function Uw(){return M(37)|0}function Vw(){return M(38)|0}function Ww(){return M(39)|0}function Xw(){return M(40)|0}function Yw(){return M(41)|0}function Zw(){return M(42)|0}function _w(){return M(43)|0}function $w(){return M(44)|0}function ax(){return M(45)|0}function bx(){return M(46)|0}function cx(){return M(47)|0}function dx(){return M(48)|0}function ex(){return M(49)|0}function fx(){return M(50)|0}function gx(){return M(51)|0}function hx(){return M(52)|0}function ix(){return M(53)|0}function jx(){return M(54)|0}function kx(){return M(55)|0}function lx(){return M(56)|0}function mx(){return M(57)|0}function nx(){return M(58)|0}function ox(){return M(59)|0}function px(){return M(60)|0}function qx(){return M(61)|0}function rx(){return M(62)|0}function sx(){return M(63)|0}function tx(a,b){a=a|0;b=b|0;return Wa[a&127](b|0)|0}function ux(a){a=a|0;return N(0,a|0)|0}function vx(a){a=a|0;return N(1,a|0)|0}function wx(a){a=a|0;return N(2,a|0)|0}function xx(a){a=a|0;return N(3,a|0)|0}function yx(a){a=a|0;return N(4,a|0)|0}function zx(a){a=a|0;return N(5,a|0)|0}function Ax(a){a=a|0;return N(6,a|0)|0}function Bx(a){a=a|0;return N(7,a|0)|0}function Cx(a){a=a|0;return N(8,a|0)|0}function Dx(a){a=a|0;return N(9,a|0)|0}function Ex(a){a=a|0;return N(10,a|0)|0}function Fx(a){a=a|0;return N(11,a|0)|0}function Gx(a){a=a|0;return N(12,a|0)|0}function Hx(a){a=a|0;return N(13,a|0)|0}function Ix(a){a=a|0;return N(14,a|0)|0}function Jx(a){a=a|0;return N(15,a|0)|0}function Kx(a){a=a|0;return N(16,a|0)|0}function Lx(a){a=a|0;return N(17,a|0)|0}function Mx(a){a=a|0;return N(18,a|0)|0}function Nx(a){a=a|0;return N(19,a|0)|0}function Ox(a){a=a|0;return N(20,a|0)|0}function Px(a){a=a|0;return N(21,a|0)|0}function Qx(a){a=a|0;return N(22,a|0)|0}function Rx(a){a=a|0;return N(23,a|0)|0}function Sx(a){a=a|0;return N(24,a|0)|0}function Tx(a){a=a|0;return N(25,a|0)|0}function Ux(a){a=a|0;return N(26,a|0)|0}function Vx(a){a=a|0;return N(27,a|0)|0}function Wx(a){a=a|0;return N(28,a|0)|0}function Xx(a){a=a|0;return N(29,a|0)|0}function Yx(a){a=a|0;return N(30,a|0)|0}function Zx(a){a=a|0;return N(31,a|0)|0}function _x(a){a=a|0;return N(32,a|0)|0}function $x(a){a=a|0;return N(33,a|0)|0}function ay(a){a=a|0;return N(34,a|0)|0}function by(a){a=a|0;return N(35,a|0)|0}function cy(a){a=a|0;return N(36,a|0)|0}function dy(a){a=a|0;return N(37,a|0)|0}function ey(a){a=a|0;return N(38,a|0)|0}function fy(a){a=a|0;return N(39,a|0)|0}function gy(a){a=a|0;return N(40,a|0)|0}function hy(a){a=a|0;return N(41,a|0)|0}function iy(a){a=a|0;return N(42,a|0)|0}function jy(a){a=a|0;return N(43,a|0)|0}function ky(a){a=a|0;return N(44,a|0)|0}function ly(a){a=a|0;return N(45,a|0)|0}function my(a){a=a|0;return N(46,a|0)|0}function ny(a){a=a|0;return N(47,a|0)|0}function oy(a){a=a|0;return N(48,a|0)|0}function py(a){a=a|0;return N(49,a|0)|0}function qy(a){a=a|0;return N(50,a|0)|0}function ry(a){a=a|0;return N(51,a|0)|0}function sy(a){a=a|0;return N(52,a|0)|0}function ty(a){a=a|0;return N(53,a|0)|0}function uy(a){a=a|0;return N(54,a|0)|0}function vy(a){a=a|0;return N(55,a|0)|0}function wy(a){a=a|0;return N(56,a|0)|0}function xy(a){a=a|0;return N(57,a|0)|0}function yy(a){a=a|0;return N(58,a|0)|0}function zy(a){a=a|0;return N(59,a|0)|0}function Ay(a){a=a|0;return N(60,a|0)|0}function By(a){a=a|0;return N(61,a|0)|0}function Cy(a){a=a|0;return N(62,a|0)|0}function Dy(a){a=a|0;return N(63,a|0)|0}function Ey(a,b,c){a=a|0;b=b|0;c=c|0;return Xa[a&255](b|0,c|0)|0}function Fy(a,b){a=a|0;b=b|0;return O(0,a|0,b|0)|0}function Gy(a,b){a=a|0;b=b|0;return O(1,a|0,b|0)|0}function Hy(a,b){a=a|0;b=b|0;return O(2,a|0,b|0)|0}function Iy(a,b){a=a|0;b=b|0;return O(3,a|0,b|0)|0}function Jy(a,b){a=a|0;b=b|0;return O(4,a|0,b|0)|0}function Ky(a,b){a=a|0;b=b|0;return O(5,a|0,b|0)|0}function Ly(a,b){a=a|0;b=b|0;return O(6,a|0,b|0)|0}function My(a,b){a=a|0;b=b|0;return O(7,a|0,b|0)|0}function Ny(a,b){a=a|0;b=b|0;return O(8,a|0,b|0)|0}function Oy(a,b){a=a|0;b=b|0;return O(9,a|0,b|0)|0}function Py(a,b){a=a|0;b=b|0;return O(10,a|0,b|0)|0}function Qy(a,b){a=a|0;b=b|0;return O(11,a|0,b|0)|0}function Ry(a,b){a=a|0;b=b|0;return O(12,a|0,b|0)|0}function Sy(a,b){a=a|0;b=b|0;return O(13,a|0,b|0)|0}function Ty(a,b){a=a|0;b=b|0;return O(14,a|0,b|0)|0}function Uy(a,b){a=a|0;b=b|0;return O(15,a|0,b|0)|0}function Vy(a,b){a=a|0;b=b|0;return O(16,a|0,b|0)|0}function Wy(a,b){a=a|0;b=b|0;return O(17,a|0,b|0)|0}function Xy(a,b){a=a|0;b=b|0;return O(18,a|0,b|0)|0}function Yy(a,b){a=a|0;b=b|0;return O(19,a|0,b|0)|0}function Zy(a,b){a=a|0;b=b|0;return O(20,a|0,b|0)|0}function _y(a,b){a=a|0;b=b|0;return O(21,a|0,b|0)|0}function $y(a,b){a=a|0;b=b|0;return O(22,a|0,b|0)|0}function az(a,b){a=a|0;b=b|0;return O(23,a|0,b|0)|0}function bz(a,b){a=a|0;b=b|0;return O(24,a|0,b|0)|0}function cz(a,b){a=a|0;b=b|0;return O(25,a|0,b|0)|0}function dz(a,b){a=a|0;b=b|0;return O(26,a|0,b|0)|0}function ez(a,b){a=a|0;b=b|0;return O(27,a|0,b|0)|0}function fz(a,b){a=a|0;b=b|0;return O(28,a|0,b|0)|0}function gz(a,b){a=a|0;b=b|0;return O(29,a|0,b|0)|0}function hz(a,b){a=a|0;b=b|0;return O(30,a|0,b|0)|0}function iz(a,b){a=a|0;b=b|0;return O(31,a|0,b|0)|0}function jz(a,b){a=a|0;b=b|0;return O(32,a|0,b|0)|0}function kz(a,b){a=a|0;b=b|0;return O(33,a|0,b|0)|0}function lz(a,b){a=a|0;b=b|0;return O(34,a|0,b|0)|0}function mz(a,b){a=a|0;b=b|0;return O(35,a|0,b|0)|0}function nz(a,b){a=a|0;b=b|0;return O(36,a|0,b|0)|0}function oz(a,b){a=a|0;b=b|0;return O(37,a|0,b|0)|0}function pz(a,b){a=a|0;b=b|0;return O(38,a|0,b|0)|0}function qz(a,b){a=a|0;b=b|0;return O(39,a|0,b|0)|0}function rz(a,b){a=a|0;b=b|0;return O(40,a|0,b|0)|0}function sz(a,b){a=a|0;b=b|0;return O(41,a|0,b|0)|0}function tz(a,b){a=a|0;b=b|0;return O(42,a|0,b|0)|0}function uz(a,b){a=a|0;b=b|0;return O(43,a|0,b|0)|0}function vz(a,b){a=a|0;b=b|0;return O(44,a|0,b|0)|0}function wz(a,b){a=a|0;b=b|0;return O(45,a|0,b|0)|0}function xz(a,b){a=a|0;b=b|0;return O(46,a|0,b|0)|0}function yz(a,b){a=a|0;b=b|0;return O(47,a|0,b|0)|0}function zz(a,b){a=a|0;b=b|0;return O(48,a|0,b|0)|0}function Az(a,b){a=a|0;b=b|0;return O(49,a|0,b|0)|0}function Bz(a,b){a=a|0;b=b|0;return O(50,a|0,b|0)|0}function Cz(a,b){a=a|0;b=b|0;return O(51,a|0,b|0)|0}function Dz(a,b){a=a|0;b=b|0;return O(52,a|0,b|0)|0}function Ez(a,b){a=a|0;b=b|0;return O(53,a|0,b|0)|0}function Fz(a,b){a=a|0;b=b|0;return O(54,a|0,b|0)|0}function Gz(a,b){a=a|0;b=b|0;return O(55,a|0,b|0)|0}function Hz(a,b){a=a|0;b=b|0;return O(56,a|0,b|0)|0}function Iz(a,b){a=a|0;b=b|0;return O(57,a|0,b|0)|0}function Jz(a,b){a=a|0;b=b|0;return O(58,a|0,b|0)|0}function Kz(a,b){a=a|0;b=b|0;return O(59,a|0,b|0)|0}function Lz(a,b){a=a|0;b=b|0;return O(60,a|0,b|0)|0}function Mz(a,b){a=a|0;b=b|0;return O(61,a|0,b|0)|0}function Nz(a,b){a=a|0;b=b|0;return O(62,a|0,b|0)|0}function Oz(a,b){a=a|0;b=b|0;return O(63,a|0,b|0)|0}function Pz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ya[a&127](b|0,c|0,d|0)|0}function Qz(a,b,c){a=a|0;b=b|0;c=c|0;return P(0,a|0,b|0,c|0)|0}function Rz(a,b,c){a=a|0;b=b|0;c=c|0;return P(1,a|0,b|0,c|0)|0}function Sz(a,b,c){a=a|0;b=b|0;c=c|0;return P(2,a|0,b|0,c|0)|0}function Tz(a,b,c){a=a|0;b=b|0;c=c|0;return P(3,a|0,b|0,c|0)|0}function Uz(a,b,c){a=a|0;b=b|0;c=c|0;return P(4,a|0,b|0,c|0)|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;return P(5,a|0,b|0,c|0)|0}function Wz(a,b,c){a=a|0;b=b|0;c=c|0;return P(6,a|0,b|0,c|0)|0}function Xz(a,b,c){a=a|0;b=b|0;c=c|0;return P(7,a|0,b|0,c|0)|0}function Yz(a,b,c){a=a|0;b=b|0;c=c|0;return P(8,a|0,b|0,c|0)|0}function Zz(a,b,c){a=a|0;b=b|0;c=c|0;return P(9,a|0,b|0,c|0)|0}function _z(a,b,c){a=a|0;b=b|0;c=c|0;return P(10,a|0,b|0,c|0)|0}function $z(a,b,c){a=a|0;b=b|0;c=c|0;return P(11,a|0,b|0,c|0)|0}function aA(a,b,c){a=a|0;b=b|0;c=c|0;return P(12,a|0,b|0,c|0)|0}function bA(a,b,c){a=a|0;b=b|0;c=c|0;return P(13,a|0,b|0,c|0)|0}function cA(a,b,c){a=a|0;b=b|0;c=c|0;return P(14,a|0,b|0,c|0)|0}function dA(a,b,c){a=a|0;b=b|0;c=c|0;return P(15,a|0,b|0,c|0)|0}function eA(a,b,c){a=a|0;b=b|0;c=c|0;return P(16,a|0,b|0,c|0)|0}function fA(a,b,c){a=a|0;b=b|0;c=c|0;return P(17,a|0,b|0,c|0)|0}function gA(a,b,c){a=a|0;b=b|0;c=c|0;return P(18,a|0,b|0,c|0)|0}function hA(a,b,c){a=a|0;b=b|0;c=c|0;return P(19,a|0,b|0,c|0)|0}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return P(20,a|0,b|0,c|0)|0}function jA(a,b,c){a=a|0;b=b|0;c=c|0;return P(21,a|0,b|0,c|0)|0}function kA(a,b,c){a=a|0;b=b|0;c=c|0;return P(22,a|0,b|0,c|0)|0}function lA(a,b,c){a=a|0;b=b|0;c=c|0;return P(23,a|0,b|0,c|0)|0}function mA(a,b,c){a=a|0;b=b|0;c=c|0;return P(24,a|0,b|0,c|0)|0}function nA(a,b,c){a=a|0;b=b|0;c=c|0;return P(25,a|0,b|0,c|0)|0}function oA(a,b,c){a=a|0;b=b|0;c=c|0;return P(26,a|0,b|0,c|0)|0}function pA(a,b,c){a=a|0;b=b|0;c=c|0;return P(27,a|0,b|0,c|0)|0}function qA(a,b,c){a=a|0;b=b|0;c=c|0;return P(28,a|0,b|0,c|0)|0}function rA(a,b,c){a=a|0;b=b|0;c=c|0;return P(29,a|0,b|0,c|0)|0}function sA(a,b,c){a=a|0;b=b|0;c=c|0;return P(30,a|0,b|0,c|0)|0}function tA(a,b,c){a=a|0;b=b|0;c=c|0;return P(31,a|0,b|0,c|0)|0}function uA(a,b,c){a=a|0;b=b|0;c=c|0;return P(32,a|0,b|0,c|0)|0}function vA(a,b,c){a=a|0;b=b|0;c=c|0;return P(33,a|0,b|0,c|0)|0}function wA(a,b,c){a=a|0;b=b|0;c=c|0;return P(34,a|0,b|0,c|0)|0}function xA(a,b,c){a=a|0;b=b|0;c=c|0;return P(35,a|0,b|0,c|0)|0}function yA(a,b,c){a=a|0;b=b|0;c=c|0;return P(36,a|0,b|0,c|0)|0}function zA(a,b,c){a=a|0;b=b|0;c=c|0;return P(37,a|0,b|0,c|0)|0}function AA(a,b,c){a=a|0;b=b|0;c=c|0;return P(38,a|0,b|0,c|0)|0}function BA(a,b,c){a=a|0;b=b|0;c=c|0;return P(39,a|0,b|0,c|0)|0}function CA(a,b,c){a=a|0;b=b|0;c=c|0;return P(40,a|0,b|0,c|0)|0}function DA(a,b,c){a=a|0;b=b|0;c=c|0;return P(41,a|0,b|0,c|0)|0}function EA(a,b,c){a=a|0;b=b|0;c=c|0;return P(42,a|0,b|0,c|0)|0}function FA(a,b,c){a=a|0;b=b|0;c=c|0;return P(43,a|0,b|0,c|0)|0}function GA(a,b,c){a=a|0;b=b|0;c=c|0;return P(44,a|0,b|0,c|0)|0}function HA(a,b,c){a=a|0;b=b|0;c=c|0;return P(45,a|0,b|0,c|0)|0}function IA(a,b,c){a=a|0;b=b|0;c=c|0;return P(46,a|0,b|0,c|0)|0}function JA(a,b,c){a=a|0;b=b|0;c=c|0;return P(47,a|0,b|0,c|0)|0}function KA(a,b,c){a=a|0;b=b|0;c=c|0;return P(48,a|0,b|0,c|0)|0}function LA(a,b,c){a=a|0;b=b|0;c=c|0;return P(49,a|0,b|0,c|0)|0}function MA(a,b,c){a=a|0;b=b|0;c=c|0;return P(50,a|0,b|0,c|0)|0}function NA(a,b,c){a=a|0;b=b|0;c=c|0;return P(51,a|0,b|0,c|0)|0}function OA(a,b,c){a=a|0;b=b|0;c=c|0;return P(52,a|0,b|0,c|0)|0}function PA(a,b,c){a=a|0;b=b|0;c=c|0;return P(53,a|0,b|0,c|0)|0}function QA(a,b,c){a=a|0;b=b|0;c=c|0;return P(54,a|0,b|0,c|0)|0}function RA(a,b,c){a=a|0;b=b|0;c=c|0;return P(55,a|0,b|0,c|0)|0}function SA(a,b,c){a=a|0;b=b|0;c=c|0;return P(56,a|0,b|0,c|0)|0}function TA(a,b,c){a=a|0;b=b|0;c=c|0;return P(57,a|0,b|0,c|0)|0}function UA(a,b,c){a=a|0;b=b|0;c=c|0;return P(58,a|0,b|0,c|0)|0}function VA(a,b,c){a=a|0;b=b|0;c=c|0;return P(59,a|0,b|0,c|0)|0}function WA(a,b,c){a=a|0;b=b|0;c=c|0;return P(60,a|0,b|0,c|0)|0}function XA(a,b,c){a=a|0;b=b|0;c=c|0;return P(61,a|0,b|0,c|0)|0}function YA(a,b,c){a=a|0;b=b|0;c=c|0;return P(62,a|0,b|0,c|0)|0}function ZA(a,b,c){a=a|0;b=b|0;c=c|0;return P(63,a|0,b|0,c|0)|0}function _A(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Za[a&127](b|0,c|0,d|0,e|0)|0}function $A(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(0,a|0,b|0,c|0,d|0)|0}function aB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(1,a|0,b|0,c|0,d|0)|0}function bB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(2,a|0,b|0,c|0,d|0)|0}function cB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(3,a|0,b|0,c|0,d|0)|0}function dB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(4,a|0,b|0,c|0,d|0)|0}function eB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(5,a|0,b|0,c|0,d|0)|0}function fB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(6,a|0,b|0,c|0,d|0)|0}function gB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(7,a|0,b|0,c|0,d|0)|0}function hB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(8,a|0,b|0,c|0,d|0)|0}function iB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(9,a|0,b|0,c|0,d|0)|0}function jB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(10,a|0,b|0,c|0,d|0)|0}function kB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(11,a|0,b|0,c|0,d|0)|0}function lB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(12,a|0,b|0,c|0,d|0)|0}function mB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(13,a|0,b|0,c|0,d|0)|0}function nB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(14,a|0,b|0,c|0,d|0)|0}function oB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(15,a|0,b|0,c|0,d|0)|0}function pB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(16,a|0,b|0,c|0,d|0)|0}function qB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(17,a|0,b|0,c|0,d|0)|0}function rB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(18,a|0,b|0,c|0,d|0)|0}function sB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(19,a|0,b|0,c|0,d|0)|0}function tB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(20,a|0,b|0,c|0,d|0)|0}function uB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(21,a|0,b|0,c|0,d|0)|0}function vB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(22,a|0,b|0,c|0,d|0)|0}function wB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(23,a|0,b|0,c|0,d|0)|0}function xB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(24,a|0,b|0,c|0,d|0)|0}function yB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(25,a|0,b|0,c|0,d|0)|0}function zB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(26,a|0,b|0,c|0,d|0)|0}function AB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(27,a|0,b|0,c|0,d|0)|0}function BB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(28,a|0,b|0,c|0,d|0)|0}function CB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(29,a|0,b|0,c|0,d|0)|0}function DB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(30,a|0,b|0,c|0,d|0)|0}function EB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(31,a|0,b|0,c|0,d|0)|0}function FB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(32,a|0,b|0,c|0,d|0)|0}function GB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(33,a|0,b|0,c|0,d|0)|0}function HB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(34,a|0,b|0,c|0,d|0)|0}function IB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(35,a|0,b|0,c|0,d|0)|0}function JB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(36,a|0,b|0,c|0,d|0)|0}function KB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(37,a|0,b|0,c|0,d|0)|0}function LB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(38,a|0,b|0,c|0,d|0)|0}function MB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(39,a|0,b|0,c|0,d|0)|0}function NB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(40,a|0,b|0,c|0,d|0)|0}function OB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(41,a|0,b|0,c|0,d|0)|0}function PB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(42,a|0,b|0,c|0,d|0)|0}function QB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(43,a|0,b|0,c|0,d|0)|0}function RB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(44,a|0,b|0,c|0,d|0)|0}function SB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(45,a|0,b|0,c|0,d|0)|0}function TB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(46,a|0,b|0,c|0,d|0)|0}function UB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(47,a|0,b|0,c|0,d|0)|0}function VB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(48,a|0,b|0,c|0,d|0)|0}function WB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(49,a|0,b|0,c|0,d|0)|0}function XB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(50,a|0,b|0,c|0,d|0)|0}function YB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(51,a|0,b|0,c|0,d|0)|0}function ZB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(52,a|0,b|0,c|0,d|0)|0}function _B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(53,a|0,b|0,c|0,d|0)|0}function $B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(54,a|0,b|0,c|0,d|0)|0}function aC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(55,a|0,b|0,c|0,d|0)|0}function bC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(56,a|0,b|0,c|0,d|0)|0}function cC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(57,a|0,b|0,c|0,d|0)|0}function dC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(58,a|0,b|0,c|0,d|0)|0}function eC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(59,a|0,b|0,c|0,d|0)|0}function fC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(60,a|0,b|0,c|0,d|0)|0}function gC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(61,a|0,b|0,c|0,d|0)|0}function hC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(62,a|0,b|0,c|0,d|0)|0}function iC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(63,a|0,b|0,c|0,d|0)|0}function jC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return _a[a&127](b|0,c|0,d|0,e|0,f|0)|0}function kC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(0,a|0,b|0,c|0,d|0,e|0)|0}function lC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(1,a|0,b|0,c|0,d|0,e|0)|0}function mC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(2,a|0,b|0,c|0,d|0,e|0)|0}function nC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(3,a|0,b|0,c|0,d|0,e|0)|0}function oC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(4,a|0,b|0,c|0,d|0,e|0)|0}function pC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(5,a|0,b|0,c|0,d|0,e|0)|0}function qC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(6,a|0,b|0,c|0,d|0,e|0)|0}function rC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(7,a|0,b|0,c|0,d|0,e|0)|0}function sC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(8,a|0,b|0,c|0,d|0,e|0)|0}function tC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(9,a|0,b|0,c|0,d|0,e|0)|0}function uC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(10,a|0,b|0,c|0,d|0,e|0)|0}function vC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(11,a|0,b|0,c|0,d|0,e|0)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(12,a|0,b|0,c|0,d|0,e|0)|0}function xC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(13,a|0,b|0,c|0,d|0,e|0)|0}function yC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(14,a|0,b|0,c|0,d|0,e|0)|0}function zC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(15,a|0,b|0,c|0,d|0,e|0)|0}function AC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(16,a|0,b|0,c|0,d|0,e|0)|0}function BC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(17,a|0,b|0,c|0,d|0,e|0)|0}function CC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(18,a|0,b|0,c|0,d|0,e|0)|0}function DC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(19,a|0,b|0,c|0,d|0,e|0)|0}function EC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(20,a|0,b|0,c|0,d|0,e|0)|0}function FC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(21,a|0,b|0,c|0,d|0,e|0)|0}function GC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(22,a|0,b|0,c|0,d|0,e|0)|0}function HC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(23,a|0,b|0,c|0,d|0,e|0)|0}function IC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(24,a|0,b|0,c|0,d|0,e|0)|0}function JC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(25,a|0,b|0,c|0,d|0,e|0)|0}function KC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(26,a|0,b|0,c|0,d|0,e|0)|0}function LC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(27,a|0,b|0,c|0,d|0,e|0)|0}function MC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(28,a|0,b|0,c|0,d|0,e|0)|0}function NC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(29,a|0,b|0,c|0,d|0,e|0)|0}function OC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(30,a|0,b|0,c|0,d|0,e|0)|0}function PC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(31,a|0,b|0,c|0,d|0,e|0)|0}function QC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(32,a|0,b|0,c|0,d|0,e|0)|0}function RC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(33,a|0,b|0,c|0,d|0,e|0)|0}function SC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(34,a|0,b|0,c|0,d|0,e|0)|0}function TC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(35,a|0,b|0,c|0,d|0,e|0)|0}function UC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(36,a|0,b|0,c|0,d|0,e|0)|0}function VC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(37,a|0,b|0,c|0,d|0,e|0)|0}function WC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(38,a|0,b|0,c|0,d|0,e|0)|0}function XC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(39,a|0,b|0,c|0,d|0,e|0)|0}function YC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(40,a|0,b|0,c|0,d|0,e|0)|0}function ZC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(41,a|0,b|0,c|0,d|0,e|0)|0}function _C(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(42,a|0,b|0,c|0,d|0,e|0)|0}function $C(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(43,a|0,b|0,c|0,d|0,e|0)|0}function aD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(44,a|0,b|0,c|0,d|0,e|0)|0}function bD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(45,a|0,b|0,c|0,d|0,e|0)|0}function cD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(46,a|0,b|0,c|0,d|0,e|0)|0}function dD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(47,a|0,b|0,c|0,d|0,e|0)|0}function eD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(48,a|0,b|0,c|0,d|0,e|0)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(49,a|0,b|0,c|0,d|0,e|0)|0}function gD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(50,a|0,b|0,c|0,d|0,e|0)|0}function hD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(51,a|0,b|0,c|0,d|0,e|0)|0}function iD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(52,a|0,b|0,c|0,d|0,e|0)|0}function jD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(53,a|0,b|0,c|0,d|0,e|0)|0}function kD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(54,a|0,b|0,c|0,d|0,e|0)|0}function lD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(55,a|0,b|0,c|0,d|0,e|0)|0}function mD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(56,a|0,b|0,c|0,d|0,e|0)|0}function nD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(57,a|0,b|0,c|0,d|0,e|0)|0}function oD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(58,a|0,b|0,c|0,d|0,e|0)|0}function pD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(59,a|0,b|0,c|0,d|0,e|0)|0}function qD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(60,a|0,b|0,c|0,d|0,e|0)|0}function rD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(61,a|0,b|0,c|0,d|0,e|0)|0}function sD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(62,a|0,b|0,c|0,d|0,e|0)|0}function tD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(63,a|0,b|0,c|0,d|0,e|0)|0}function uD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return $a[a&127](b|0,c|0,d|0,e|0,f|0,g|0)|0}function vD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(0,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(1,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(2,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(3,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(4,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(5,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(6,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(7,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(8,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ED(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(9,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(10,a|0,b|0,c|0,d|0,e|0,f|0)|0}function GD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(11,a|0,b|0,c|0,d|0,e|0,f|0)|0}function HD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(12,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ID(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(13,a|0,b|0,c|0,d|0,e|0,f|0)|0}function JD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(14,a|0,b|0,c|0,d|0,e|0,f|0)|0}function KD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(15,a|0,b|0,c|0,d|0,e|0,f|0)|0}function LD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(16,a|0,b|0,c|0,d|0,e|0,f|0)|0}function MD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(17,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ND(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(18,a|0,b|0,c|0,d|0,e|0,f|0)|0}function OD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(19,a|0,b|0,c|0,d|0,e|0,f|0)|0}function PD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(20,a|0,b|0,c|0,d|0,e|0,f|0)|0}function QD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(21,a|0,b|0,c|0,d|0,e|0,f|0)|0}function RD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(22,a|0,b|0,c|0,d|0,e|0,f|0)|0}function SD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(23,a|0,b|0,c|0,d|0,e|0,f|0)|0}function TD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(24,a|0,b|0,c|0,d|0,e|0,f|0)|0}function UD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(25,a|0,b|0,c|0,d|0,e|0,f|0)|0}function VD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(26,a|0,b|0,c|0,d|0,e|0,f|0)|0}function WD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(27,a|0,b|0,c|0,d|0,e|0,f|0)|0}function XD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(28,a|0,b|0,c|0,d|0,e|0,f|0)|0}function YD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(29,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ZD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(30,a|0,b|0,c|0,d|0,e|0,f|0)|0}function _D(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(31,a|0,b|0,c|0,d|0,e|0,f|0)|0}function $D(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(32,a|0,b|0,c|0,d|0,e|0,f|0)|0}function aE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(33,a|0,b|0,c|0,d|0,e|0,f|0)|0}function bE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(34,a|0,b|0,c|0,d|0,e|0,f|0)|0}function cE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(35,a|0,b|0,c|0,d|0,e|0,f|0)|0}function dE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(36,a|0,b|0,c|0,d|0,e|0,f|0)|0}function eE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(37,a|0,b|0,c|0,d|0,e|0,f|0)|0}function fE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(38,a|0,b|0,c|0,d|0,e|0,f|0)|0}function gE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(39,a|0,b|0,c|0,d|0,e|0,f|0)|0}function hE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(40,a|0,b|0,c|0,d|0,e|0,f|0)|0}function iE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(41,a|0,b|0,c|0,d|0,e|0,f|0)|0}function jE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(42,a|0,b|0,c|0,d|0,e|0,f|0)|0}function kE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(43,a|0,b|0,c|0,d|0,e|0,f|0)|0}function lE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(44,a|0,b|0,c|0,d|0,e|0,f|0)|0}function mE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(45,a|0,b|0,c|0,d|0,e|0,f|0)|0}function nE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(46,a|0,b|0,c|0,d|0,e|0,f|0)|0}function oE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(47,a|0,b|0,c|0,d|0,e|0,f|0)|0}function pE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(48,a|0,b|0,c|0,d|0,e|0,f|0)|0}function qE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(49,a|0,b|0,c|0,d|0,e|0,f|0)|0}function rE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(50,a|0,b|0,c|0,d|0,e|0,f|0)|0}function sE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(51,a|0,b|0,c|0,d|0,e|0,f|0)|0}function tE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(52,a|0,b|0,c|0,d|0,e|0,f|0)|0}function uE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(53,a|0,b|0,c|0,d|0,e|0,f|0)|0}function vE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(54,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(55,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(56,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(57,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(58,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(59,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(60,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(61,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(62,a|0,b|0,c|0,d|0,e|0,f|0)|0}function EE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return S(63,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FE(a,b){a=a|0;b=b|0;ab[a&127](b|0)}function GE(a){a=a|0;T(0,a|0)}function HE(a){a=a|0;T(1,a|0)}function IE(a){a=a|0;T(2,a|0)}function JE(a){a=a|0;T(3,a|0)}function KE(a){a=a|0;T(4,a|0)}function LE(a){a=a|0;T(5,a|0)}function ME(a){a=a|0;T(6,a|0)}function NE(a){a=a|0;T(7,a|0)}function OE(a){a=a|0;T(8,a|0)}function PE(a){a=a|0;T(9,a|0)}function QE(a){a=a|0;T(10,a|0)}function RE(a){a=a|0;T(11,a|0)}function SE(a){a=a|0;T(12,a|0)}function TE(a){a=a|0;T(13,a|0)}function UE(a){a=a|0;T(14,a|0)}function VE(a){a=a|0;T(15,a|0)}function WE(a){a=a|0;T(16,a|0)}function XE(a){a=a|0;T(17,a|0)}function YE(a){a=a|0;T(18,a|0)}function ZE(a){a=a|0;T(19,a|0)}function _E(a){a=a|0;T(20,a|0)}function $E(a){a=a|0;T(21,a|0)}function aF(a){a=a|0;T(22,a|0)}function bF(a){a=a|0;T(23,a|0)}function cF(a){a=a|0;T(24,a|0)}function dF(a){a=a|0;T(25,a|0)}function eF(a){a=a|0;T(26,a|0)}function fF(a){a=a|0;T(27,a|0)}function gF(a){a=a|0;T(28,a|0)}function hF(a){a=a|0;T(29,a|0)}function iF(a){a=a|0;T(30,a|0)}function jF(a){a=a|0;T(31,a|0)}function kF(a){a=a|0;T(32,a|0)}function lF(a){a=a|0;T(33,a|0)}function mF(a){a=a|0;T(34,a|0)}function nF(a){a=a|0;T(35,a|0)}function oF(a){a=a|0;T(36,a|0)}function pF(a){a=a|0;T(37,a|0)}function qF(a){a=a|0;T(38,a|0)}function rF(a){a=a|0;T(39,a|0)}function sF(a){a=a|0;T(40,a|0)}function tF(a){a=a|0;T(41,a|0)}function uF(a){a=a|0;T(42,a|0)}function vF(a){a=a|0;T(43,a|0)}function wF(a){a=a|0;T(44,a|0)}function xF(a){a=a|0;T(45,a|0)}function yF(a){a=a|0;T(46,a|0)}function zF(a){a=a|0;T(47,a|0)}function AF(a){a=a|0;T(48,a|0)}function BF(a){a=a|0;T(49,a|0)}function CF(a){a=a|0;T(50,a|0)}function DF(a){a=a|0;T(51,a|0)}function EF(a){a=a|0;T(52,a|0)}function FF(a){a=a|0;T(53,a|0)}function GF(a){a=a|0;T(54,a|0)}function HF(a){a=a|0;T(55,a|0)}function IF(a){a=a|0;T(56,a|0)}function JF(a){a=a|0;T(57,a|0)}function KF(a){a=a|0;T(58,a|0)}function LF(a){a=a|0;T(59,a|0)}function MF(a){a=a|0;T(60,a|0)}function NF(a){a=a|0;T(61,a|0)}function OF(a){a=a|0;T(62,a|0)}function PF(a){a=a|0;T(63,a|0)}function QF(a,b,c){a=a|0;b=b|0;c=c|0;bb[a&127](b|0,c|0)}function RF(a,b){a=a|0;b=b|0;U(0,a|0,b|0)}function SF(a,b){a=a|0;b=b|0;U(1,a|0,b|0)}function TF(a,b){a=a|0;b=b|0;U(2,a|0,b|0)}function UF(a,b){a=a|0;b=b|0;U(3,a|0,b|0)}function VF(a,b){a=a|0;b=b|0;U(4,a|0,b|0)}function WF(a,b){a=a|0;b=b|0;U(5,a|0,b|0)}function XF(a,b){a=a|0;b=b|0;U(6,a|0,b|0)}function YF(a,b){a=a|0;b=b|0;U(7,a|0,b|0)}function ZF(a,b){a=a|0;b=b|0;U(8,a|0,b|0)}function _F(a,b){a=a|0;b=b|0;U(9,a|0,b|0)}function $F(a,b){a=a|0;b=b|0;U(10,a|0,b|0)}function aG(a,b){a=a|0;b=b|0;U(11,a|0,b|0)}function bG(a,b){a=a|0;b=b|0;U(12,a|0,b|0)}function cG(a,b){a=a|0;b=b|0;U(13,a|0,b|0)}function dG(a,b){a=a|0;b=b|0;U(14,a|0,b|0)}function eG(a,b){a=a|0;b=b|0;U(15,a|0,b|0)}function fG(a,b){a=a|0;b=b|0;U(16,a|0,b|0)}function gG(a,b){a=a|0;b=b|0;U(17,a|0,b|0)}function hG(a,b){a=a|0;b=b|0;U(18,a|0,b|0)}function iG(a,b){a=a|0;b=b|0;U(19,a|0,b|0)}function jG(a,b){a=a|0;b=b|0;U(20,a|0,b|0)}function kG(a,b){a=a|0;b=b|0;U(21,a|0,b|0)}function lG(a,b){a=a|0;b=b|0;U(22,a|0,b|0)}function mG(a,b){a=a|0;b=b|0;U(23,a|0,b|0)}function nG(a,b){a=a|0;b=b|0;U(24,a|0,b|0)}function oG(a,b){a=a|0;b=b|0;U(25,a|0,b|0)}function pG(a,b){a=a|0;b=b|0;U(26,a|0,b|0)}function qG(a,b){a=a|0;b=b|0;U(27,a|0,b|0)}function rG(a,b){a=a|0;b=b|0;U(28,a|0,b|0)}function sG(a,b){a=a|0;b=b|0;U(29,a|0,b|0)}function tG(a,b){a=a|0;b=b|0;U(30,a|0,b|0)}function uG(a,b){a=a|0;b=b|0;U(31,a|0,b|0)}function vG(a,b){a=a|0;b=b|0;U(32,a|0,b|0)}function wG(a,b){a=a|0;b=b|0;U(33,a|0,b|0)}function xG(a,b){a=a|0;b=b|0;U(34,a|0,b|0)}function yG(a,b){a=a|0;b=b|0;U(35,a|0,b|0)}function zG(a,b){a=a|0;b=b|0;U(36,a|0,b|0)}function AG(a,b){a=a|0;b=b|0;U(37,a|0,b|0)}function BG(a,b){a=a|0;b=b|0;U(38,a|0,b|0)}function CG(a,b){a=a|0;b=b|0;U(39,a|0,b|0)}function DG(a,b){a=a|0;b=b|0;U(40,a|0,b|0)}function EG(a,b){a=a|0;b=b|0;U(41,a|0,b|0)}function FG(a,b){a=a|0;b=b|0;U(42,a|0,b|0)}function GG(a,b){a=a|0;b=b|0;U(43,a|0,b|0)}function HG(a,b){a=a|0;b=b|0;U(44,a|0,b|0)}function IG(a,b){a=a|0;b=b|0;U(45,a|0,b|0)}function JG(a,b){a=a|0;b=b|0;U(46,a|0,b|0)}function KG(a,b){a=a|0;b=b|0;U(47,a|0,b|0)}function LG(a,b){a=a|0;b=b|0;U(48,a|0,b|0)}function MG(a,b){a=a|0;b=b|0;U(49,a|0,b|0)}function NG(a,b){a=a|0;b=b|0;U(50,a|0,b|0)}function OG(a,b){a=a|0;b=b|0;U(51,a|0,b|0)}function PG(a,b){a=a|0;b=b|0;U(52,a|0,b|0)}function QG(a,b){a=a|0;b=b|0;U(53,a|0,b|0)}function RG(a,b){a=a|0;b=b|0;U(54,a|0,b|0)}function SG(a,b){a=a|0;b=b|0;U(55,a|0,b|0)}function TG(a,b){a=a|0;b=b|0;U(56,a|0,b|0)}function UG(a,b){a=a|0;b=b|0;U(57,a|0,b|0)}function VG(a,b){a=a|0;b=b|0;U(58,a|0,b|0)}function WG(a,b){a=a|0;b=b|0;U(59,a|0,b|0)}function XG(a,b){a=a|0;b=b|0;U(60,a|0,b|0)}function YG(a,b){a=a|0;b=b|0;U(61,a|0,b|0)}function ZG(a,b){a=a|0;b=b|0;U(62,a|0,b|0)}function _G(a,b){a=a|0;b=b|0;U(63,a|0,b|0)}function $G(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cb[a&255](b|0,c|0,d|0)}function aH(a,b,c){a=a|0;b=b|0;c=c|0;V(0,a|0,b|0,c|0)}function bH(a,b,c){a=a|0;b=b|0;c=c|0;V(1,a|0,b|0,c|0)}function cH(a,b,c){a=a|0;b=b|0;c=c|0;V(2,a|0,b|0,c|0)}function dH(a,b,c){a=a|0;b=b|0;c=c|0;V(3,a|0,b|0,c|0)}function eH(a,b,c){a=a|0;b=b|0;c=c|0;V(4,a|0,b|0,c|0)}function fH(a,b,c){a=a|0;b=b|0;c=c|0;V(5,a|0,b|0,c|0)}function gH(a,b,c){a=a|0;b=b|0;c=c|0;V(6,a|0,b|0,c|0)}function hH(a,b,c){a=a|0;b=b|0;c=c|0;V(7,a|0,b|0,c|0)}function iH(a,b,c){a=a|0;b=b|0;c=c|0;V(8,a|0,b|0,c|0)}function jH(a,b,c){a=a|0;b=b|0;c=c|0;V(9,a|0,b|0,c|0)}function kH(a,b,c){a=a|0;b=b|0;c=c|0;V(10,a|0,b|0,c|0)}function lH(a,b,c){a=a|0;b=b|0;c=c|0;V(11,a|0,b|0,c|0)}function mH(a,b,c){a=a|0;b=b|0;c=c|0;V(12,a|0,b|0,c|0)}function nH(a,b,c){a=a|0;b=b|0;c=c|0;V(13,a|0,b|0,c|0)}function oH(a,b,c){a=a|0;b=b|0;c=c|0;V(14,a|0,b|0,c|0)}function pH(a,b,c){a=a|0;b=b|0;c=c|0;V(15,a|0,b|0,c|0)}function qH(a,b,c){a=a|0;b=b|0;c=c|0;V(16,a|0,b|0,c|0)}function rH(a,b,c){a=a|0;b=b|0;c=c|0;V(17,a|0,b|0,c|0)}function sH(a,b,c){a=a|0;b=b|0;c=c|0;V(18,a|0,b|0,c|0)}function tH(a,b,c){a=a|0;b=b|0;c=c|0;V(19,a|0,b|0,c|0)}function uH(a,b,c){a=a|0;b=b|0;c=c|0;V(20,a|0,b|0,c|0)}function vH(a,b,c){a=a|0;b=b|0;c=c|0;V(21,a|0,b|0,c|0)}function wH(a,b,c){a=a|0;b=b|0;c=c|0;V(22,a|0,b|0,c|0)}function xH(a,b,c){a=a|0;b=b|0;c=c|0;V(23,a|0,b|0,c|0)}function yH(a,b,c){a=a|0;b=b|0;c=c|0;V(24,a|0,b|0,c|0)}function zH(a,b,c){a=a|0;b=b|0;c=c|0;V(25,a|0,b|0,c|0)}function AH(a,b,c){a=a|0;b=b|0;c=c|0;V(26,a|0,b|0,c|0)}function BH(a,b,c){a=a|0;b=b|0;c=c|0;V(27,a|0,b|0,c|0)}function CH(a,b,c){a=a|0;b=b|0;c=c|0;V(28,a|0,b|0,c|0)}function DH(a,b,c){a=a|0;b=b|0;c=c|0;V(29,a|0,b|0,c|0)}function EH(a,b,c){a=a|0;b=b|0;c=c|0;V(30,a|0,b|0,c|0)}function FH(a,b,c){a=a|0;b=b|0;c=c|0;V(31,a|0,b|0,c|0)}function GH(a,b,c){a=a|0;b=b|0;c=c|0;V(32,a|0,b|0,c|0)}function HH(a,b,c){a=a|0;b=b|0;c=c|0;V(33,a|0,b|0,c|0)}function IH(a,b,c){a=a|0;b=b|0;c=c|0;V(34,a|0,b|0,c|0)}function JH(a,b,c){a=a|0;b=b|0;c=c|0;V(35,a|0,b|0,c|0)}function KH(a,b,c){a=a|0;b=b|0;c=c|0;V(36,a|0,b|0,c|0)}function LH(a,b,c){a=a|0;b=b|0;c=c|0;V(37,a|0,b|0,c|0)}function MH(a,b,c){a=a|0;b=b|0;c=c|0;V(38,a|0,b|0,c|0)}function NH(a,b,c){a=a|0;b=b|0;c=c|0;V(39,a|0,b|0,c|0)}function OH(a,b,c){a=a|0;b=b|0;c=c|0;V(40,a|0,b|0,c|0)}function PH(a,b,c){a=a|0;b=b|0;c=c|0;V(41,a|0,b|0,c|0)}function QH(a,b,c){a=a|0;b=b|0;c=c|0;V(42,a|0,b|0,c|0)}function RH(a,b,c){a=a|0;b=b|0;c=c|0;V(43,a|0,b|0,c|0)}function SH(a,b,c){a=a|0;b=b|0;c=c|0;V(44,a|0,b|0,c|0)}function TH(a,b,c){a=a|0;b=b|0;c=c|0;V(45,a|0,b|0,c|0)}function UH(a,b,c){a=a|0;b=b|0;c=c|0;V(46,a|0,b|0,c|0)}function VH(a,b,c){a=a|0;b=b|0;c=c|0;V(47,a|0,b|0,c|0)}function WH(a,b,c){a=a|0;b=b|0;c=c|0;V(48,a|0,b|0,c|0)}function XH(a,b,c){a=a|0;b=b|0;c=c|0;V(49,a|0,b|0,c|0)}function YH(a,b,c){a=a|0;b=b|0;c=c|0;V(50,a|0,b|0,c|0)}function ZH(a,b,c){a=a|0;b=b|0;c=c|0;V(51,a|0,b|0,c|0)}function _H(a,b,c){a=a|0;b=b|0;c=c|0;V(52,a|0,b|0,c|0)}function $H(a,b,c){a=a|0;b=b|0;c=c|0;V(53,a|0,b|0,c|0)}function aI(a,b,c){a=a|0;b=b|0;c=c|0;V(54,a|0,b|0,c|0)}function bI(a,b,c){a=a|0;b=b|0;c=c|0;V(55,a|0,b|0,c|0)}function cI(a,b,c){a=a|0;b=b|0;c=c|0;V(56,a|0,b|0,c|0)}function dI(a,b,c){a=a|0;b=b|0;c=c|0;V(57,a|0,b|0,c|0)}function eI(a,b,c){a=a|0;b=b|0;c=c|0;V(58,a|0,b|0,c|0)}function fI(a,b,c){a=a|0;b=b|0;c=c|0;V(59,a|0,b|0,c|0)}function gI(a,b,c){a=a|0;b=b|0;c=c|0;V(60,a|0,b|0,c|0)}function hI(a,b,c){a=a|0;b=b|0;c=c|0;V(61,a|0,b|0,c|0)}function iI(a,b,c){a=a|0;b=b|0;c=c|0;V(62,a|0,b|0,c|0)}function jI(a,b,c){a=a|0;b=b|0;c=c|0;V(63,a|0,b|0,c|0)}function kI(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;db[a&127](b|0,c|0,d|0,e|0)}function lI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(0,a|0,b|0,c|0,d|0)}function mI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(1,a|0,b|0,c|0,d|0)}function nI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(2,a|0,b|0,c|0,d|0)}function oI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(3,a|0,b|0,c|0,d|0)}function pI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(4,a|0,b|0,c|0,d|0)}function qI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(5,a|0,b|0,c|0,d|0)}function rI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(6,a|0,b|0,c|0,d|0)}function sI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(7,a|0,b|0,c|0,d|0)}function tI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(8,a|0,b|0,c|0,d|0)}function uI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(9,a|0,b|0,c|0,d|0)}function vI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(10,a|0,b|0,c|0,d|0)}function wI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(11,a|0,b|0,c|0,d|0)}function xI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(12,a|0,b|0,c|0,d|0)}function yI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(13,a|0,b|0,c|0,d|0)}function zI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(14,a|0,b|0,c|0,d|0)}function AI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(15,a|0,b|0,c|0,d|0)}function BI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(16,a|0,b|0,c|0,d|0)}function CI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(17,a|0,b|0,c|0,d|0)}function DI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(18,a|0,b|0,c|0,d|0)}function EI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(19,a|0,b|0,c|0,d|0)}function FI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(20,a|0,b|0,c|0,d|0)}function GI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(21,a|0,b|0,c|0,d|0)}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(22,a|0,b|0,c|0,d|0)}function II(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(23,a|0,b|0,c|0,d|0)}function JI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(24,a|0,b|0,c|0,d|0)}function KI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(25,a|0,b|0,c|0,d|0)}function LI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(26,a|0,b|0,c|0,d|0)}function MI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(27,a|0,b|0,c|0,d|0)}function NI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(28,a|0,b|0,c|0,d|0)}function OI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(29,a|0,b|0,c|0,d|0)}function PI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(30,a|0,b|0,c|0,d|0)}function QI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(31,a|0,b|0,c|0,d|0)}function RI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(32,a|0,b|0,c|0,d|0)}function SI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(33,a|0,b|0,c|0,d|0)}function TI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(34,a|0,b|0,c|0,d|0)}function UI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(35,a|0,b|0,c|0,d|0)}function VI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(36,a|0,b|0,c|0,d|0)}function WI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(37,a|0,b|0,c|0,d|0)}function XI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(38,a|0,b|0,c|0,d|0)}function YI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(39,a|0,b|0,c|0,d|0)}function ZI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(40,a|0,b|0,c|0,d|0)}function _I(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(41,a|0,b|0,c|0,d|0)}function $I(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(42,a|0,b|0,c|0,d|0)}function aJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(43,a|0,b|0,c|0,d|0)}function bJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(44,a|0,b|0,c|0,d|0)}function cJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(45,a|0,b|0,c|0,d|0)}function dJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(46,a|0,b|0,c|0,d|0)}function eJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(47,a|0,b|0,c|0,d|0)}function fJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(48,a|0,b|0,c|0,d|0)}function gJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(49,a|0,b|0,c|0,d|0)}function hJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(50,a|0,b|0,c|0,d|0)}function iJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(51,a|0,b|0,c|0,d|0)}function jJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(52,a|0,b|0,c|0,d|0)}function kJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(53,a|0,b|0,c|0,d|0)}function lJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(54,a|0,b|0,c|0,d|0)}function mJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(55,a|0,b|0,c|0,d|0)}function nJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(56,a|0,b|0,c|0,d|0)}function oJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(57,a|0,b|0,c|0,d|0)}function pJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(58,a|0,b|0,c|0,d|0)}function qJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(59,a|0,b|0,c|0,d|0)}function rJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(60,a|0,b|0,c|0,d|0)}function sJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(61,a|0,b|0,c|0,d|0)}function tJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(62,a|0,b|0,c|0,d|0)}function uJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(63,a|0,b|0,c|0,d|0)}function vJ(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;eb[a&127](b|0,c|0,d|0,e|0,f|0,g|0)}function wJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(0,a|0,b|0,c|0,d|0,e|0,f|0)}function xJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(1,a|0,b|0,c|0,d|0,e|0,f|0)}function yJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(2,a|0,b|0,c|0,d|0,e|0,f|0)}function zJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(3,a|0,b|0,c|0,d|0,e|0,f|0)}function AJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(4,a|0,b|0,c|0,d|0,e|0,f|0)}function BJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(5,a|0,b|0,c|0,d|0,e|0,f|0)}function CJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(6,a|0,b|0,c|0,d|0,e|0,f|0)}function DJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(7,a|0,b|0,c|0,d|0,e|0,f|0)}function EJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(8,a|0,b|0,c|0,d|0,e|0,f|0)}function FJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(9,a|0,b|0,c|0,d|0,e|0,f|0)}function GJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(10,a|0,b|0,c|0,d|0,e|0,f|0)}function HJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(11,a|0,b|0,c|0,d|0,e|0,f|0)}function IJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(12,a|0,b|0,c|0,d|0,e|0,f|0)}function JJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(13,a|0,b|0,c|0,d|0,e|0,f|0)}function KJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(14,a|0,b|0,c|0,d|0,e|0,f|0)}function LJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(15,a|0,b|0,c|0,d|0,e|0,f|0)}function MJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(16,a|0,b|0,c|0,d|0,e|0,f|0)}function NJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(17,a|0,b|0,c|0,d|0,e|0,f|0)}function OJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(18,a|0,b|0,c|0,d|0,e|0,f|0)}function PJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(19,a|0,b|0,c|0,d|0,e|0,f|0)}function QJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(20,a|0,b|0,c|0,d|0,e|0,f|0)}function RJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(21,a|0,b|0,c|0,d|0,e|0,f|0)}function SJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(22,a|0,b|0,c|0,d|0,e|0,f|0)}function TJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(23,a|0,b|0,c|0,d|0,e|0,f|0)}function UJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(24,a|0,b|0,c|0,d|0,e|0,f|0)}function VJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(25,a|0,b|0,c|0,d|0,e|0,f|0)}function WJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(26,a|0,b|0,c|0,d|0,e|0,f|0)}function XJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(27,a|0,b|0,c|0,d|0,e|0,f|0)}function YJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(28,a|0,b|0,c|0,d|0,e|0,f|0)}function ZJ(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(29,a|0,b|0,c|0,d|0,e|0,f|0)}function _J(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(30,a|0,b|0,c|0,d|0,e|0,f|0)}function $J(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(31,a|0,b|0,c|0,d|0,e|0,f|0)}function aK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(32,a|0,b|0,c|0,d|0,e|0,f|0)}function bK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(33,a|0,b|0,c|0,d|0,e|0,f|0)}function cK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(34,a|0,b|0,c|0,d|0,e|0,f|0)}function dK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(35,a|0,b|0,c|0,d|0,e|0,f|0)}function eK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(36,a|0,b|0,c|0,d|0,e|0,f|0)}function fK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(37,a|0,b|0,c|0,d|0,e|0,f|0)}function gK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(38,a|0,b|0,c|0,d|0,e|0,f|0)}function hK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(39,a|0,b|0,c|0,d|0,e|0,f|0)}function iK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(40,a|0,b|0,c|0,d|0,e|0,f|0)}function jK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(41,a|0,b|0,c|0,d|0,e|0,f|0)}function kK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(42,a|0,b|0,c|0,d|0,e|0,f|0)}function lK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(43,a|0,b|0,c|0,d|0,e|0,f|0)}function mK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(44,a|0,b|0,c|0,d|0,e|0,f|0)}function nK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(45,a|0,b|0,c|0,d|0,e|0,f|0)}function oK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(46,a|0,b|0,c|0,d|0,e|0,f|0)}function pK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(47,a|0,b|0,c|0,d|0,e|0,f|0)}function qK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(48,a|0,b|0,c|0,d|0,e|0,f|0)}function rK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(49,a|0,b|0,c|0,d|0,e|0,f|0)}function sK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(50,a|0,b|0,c|0,d|0,e|0,f|0)}function tK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(51,a|0,b|0,c|0,d|0,e|0,f|0)}function uK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(52,a|0,b|0,c|0,d|0,e|0,f|0)}function vK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(53,a|0,b|0,c|0,d|0,e|0,f|0)}function wK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(54,a|0,b|0,c|0,d|0,e|0,f|0)}function xK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(55,a|0,b|0,c|0,d|0,e|0,f|0)}function yK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(56,a|0,b|0,c|0,d|0,e|0,f|0)}function zK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(57,a|0,b|0,c|0,d|0,e|0,f|0)}function AK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(58,a|0,b|0,c|0,d|0,e|0,f|0)}function BK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(59,a|0,b|0,c|0,d|0,e|0,f|0)}function CK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(60,a|0,b|0,c|0,d|0,e|0,f|0)}function DK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(61,a|0,b|0,c|0,d|0,e|0,f|0)}function EK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(62,a|0,b|0,c|0,d|0,e|0,f|0)}function FK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;X(63,a|0,b|0,c|0,d|0,e|0,f|0)}function GK(){J(0);return 0}function HK(a){a=a|0;J(1);return 0}function IK(a,b){a=a|0;b=b|0;J(2);return 0}function JK(a,b,c){a=a|0;b=b|0;c=c|0;J(3);return 0}function KK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J(4);return 0}function LK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;J(5);return 0}function MK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;J(6);return 0}function NK(a){a=a|0;J(7)}function OK(a,b){a=a|0;b=b|0;J(8)}function PK(a,b,c){a=a|0;b=b|0;c=c|0;J(9)}function QK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J(10)}function RK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;J(11)}\nfunction aj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;do switch(b<<16>>16){case 240:case 228:case 227:case 195:{b=c[d>>2]|0;if(!b)return;pi(c[a>>2]|0,b,1);return}case 294:case 280:case 275:case 268:case 265:case 263:case 248:case 236:case 234:case 206:case 205:{b=c[d>>2]|0;if(!b)return;ni(c[a>>2]|0,b);return}case 293:case 264:case 262:case 254:case 250:case 242:case 241:case 237:case 235:case 232:case 220:case 219:case 210:{b=c[d>>2]|0;if(!b)return;ri(c[a>>2]|0,b);return}case 251:case 245:case 244:case 233:case 226:{qi(c[a>>2]|0,c[d>>2]|0);return}case 229:{i=c[a>>2]|0;h=c[d>>2]|0;if(!h)return;a:do if((c[h>>2]|0)>0){d=i+480|0;e=i+304|0;f=i+308|0;g=i+300|0;if(!i){a=0;while(1){b=c[h+8+(a<<4)+4>>2]|0;if(b|0)ri(0,b);b=c[h+8+(a<<4)+8>>2]|0;if(b|0)pi(0,b,1);b=c[h+8+(a<<4)>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);a=a+1|0;if((a|0)>=(c[h>>2]|0))break a}}a=0;do{b=c[h+8+(a<<4)+4>>2]|0;if(b|0)ri(i,b);b=c[h+8+(a<<4)+8>>2]|0;if(b|0)pi(i,b,1);b=c[h+8+(a<<4)>>2]|0;do if(b|0){if(c[d>>2]|0){Xd(i,b);break}j=b;if((c[e>>2]|0)>>>0<=j>>>0?(c[f>>2]|0)>>>0>j>>>0:0){c[b>>2]=c[g>>2];c[g>>2]=b;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}while(0);a=a+1|0}while((a|0)<(c[h>>2]|0))}while(0);if(i|0){if(c[i+480>>2]|0){Xd(i,h);return}j=h;if((c[i+304>>2]|0)>>>0<=j>>>0?(c[i+308>>2]|0)>>>0>j>>>0:0){j=i+300|0;c[h>>2]=c[j>>2];c[j>>2]=h;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{j=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}case 289:case 239:{a=c[a>>2]|0;b=c[d>>2]|0;if(!b)return;do{j=b;b=c[b+32>>2]|0;oi(a,j)}while((b|0)!=0);return}case 256:case 252:case 249:{j=c[a>>2]|0;b=c[d>>2]|0;if(!b)return;i=b+4|0;a=c[b>>2]|0;b:do if((c[i>>2]|0)>0){e=j+480|0;f=j+304|0;g=j+308|0;h=j+300|0;if(!j){d=0;while(1){a=c[a+(d<<3)>>2]|0;do if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{h=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}while(0);d=d+1|0;a=c[b>>2]|0;if((d|0)>=(c[i>>2]|0))break b}}d=0;do{a=c[a+(d<<3)>>2]|0;do if(a|0){if(c[e>>2]|0){Xd(j,a);break}k=a;if((c[f>>2]|0)>>>0<=k>>>0?(c[g>>2]|0)>>>0>k>>>0:0){c[a>>2]=c[h>>2];c[h>>2]=a;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);d=d+1|0;a=c[b>>2]|0}while((d|0)<(c[i>>2]|0))}while(0);c:do if(a){do if(j|0){d=j+480|0;if(!(c[d>>2]|0)){e=a;if((c[j+304>>2]|0)>>>0>e>>>0)break;if((c[j+308>>2]|0)>>>0<=e>>>0)break;k=j+300|0;c[a>>2]=c[k>>2];c[k>>2]=a}else Xd(j,a);a=d;d=82;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);d=80;break}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);d=80;break}}else d=80;while(0);if((d|0)==80)if(j){a=j+480|0;d=82}if((d|0)==82){if(c[a>>2]|0){Xd(j,b);return}k=b;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){k=j+300|0;c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}case 292:case 291:case 290:case 258:{oi(c[a>>2]|0,c[d>>2]|0);return}case 276:case 271:{Xi(c[a>>2]|0,c[d>>2]|0);return}case 273:{j=c[a>>2]|0;b=c[d+4>>2]|0;if(!b)return;i=b+4|0;a=c[b>>2]|0;d:do if((c[i>>2]|0)>0){e=j+480|0;f=j+304|0;g=j+308|0;h=j+300|0;if(!j){d=0;while(1){a=c[a+(d<<3)>>2]|0;do if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}while(0);d=d+1|0;a=c[b>>2]|0;if((d|0)>=(c[i>>2]|0))break d}}d=0;do{a=c[a+(d<<3)>>2]|0;do if(a|0){if(c[e>>2]|0){Xd(j,a);break}k=a;if((c[f>>2]|0)>>>0<=k>>>0?(c[g>>2]|0)>>>0>k>>>0:0){c[a>>2]=c[h>>2];c[h>>2]=a;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);d=d+1|0;a=c[b>>2]|0}while((d|0)<(c[i>>2]|0))}while(0);e:do if(a){do if(j|0){d=j+480|0;if(!(c[d>>2]|0)){e=a;if((c[j+304>>2]|0)>>>0>e>>>0)break;if((c[j+308>>2]|0)>>>0<=e>>>0)break;k=j+300|0;c[a>>2]=c[k>>2];c[k>>2]=a}else Xd(j,a);a=d;d=126;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);d=124;break}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);d=124;break}}else d=124;while(0);if((d|0)==124)if(j){a=j+480|0;d=126}if((d|0)==126){if(c[a>>2]|0){Xd(j,b);return}k=b;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){k=j+300|0;c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}case 298:case 297:case 296:{b=c[d+4>>2]|0;if(!b)return;ni(c[a>>2]|0,b);return}default:return}while(0)}function bj(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0;Q=Ra;Ra=Ra+96|0;J=Q+80|0;D=Q+72|0;G=Q+64|0;C=Q+56|0;z=Q+48|0;A=Q+40|0;v=Q+32|0;u=Q+24|0;s=Q+16|0;q=Q+8|0;p=Q;K=Q+84|0;P=c[f>>2]|0;H=P+165|0;n=(a[H>>0]|0)==0;do if(!n?(c[P+160>>2]|0)==1:0){h=a[P+164>>0]|0;q=h&255;h=h<<24>>24==1;p=h?34855:34585;h=h?19:14;a:do if(c[P+272>>2]|0){if(!(a[P+81>>0]|0))O=13}else{do if(!(0<0|(0==0?(e[P+276>>1]|0)>>>0<h>>>0:0))){n=P+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=14;break a}n=P+296|0;o=c[n>>2]|0;if(!o){n=P+292|0;break}else{c[n>>2]=c[o>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=14;break a}}else n=P+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;O=13}while(0);if((O|0)==13){o=_d(P,h,0)|0;O=14}if((O|0)==14?o|0:0){ew(o|0,p|0,h|0)|0;F=g;M=c[F+4>>2]|0;E=f+180|0;c[E>>2]=c[F>>2];c[E+4>>2]=M;E=o;M=q;break}O=g;P=c[O+4>>2]|0;f=f+180|0;c[f>>2]=c[O>>2];c[f+4>>2]=P;Ra=Q;return}else O=16;while(0);if((O|0)==16){r=h+4|0;if(c[r>>2]|0){if(!n){cd(f,39404,p);Ra=Q;return}n=wk(P,g)|0;if((n|0)<0){c[q>>2]=g;cd(f,39421,q);Ra=Q;return}}else{h=g;n=d[P+164>>0]|0}o=(i|0)!=0;if(o?(n|0)!=1&(c[r>>2]|0)!=0:0){cd(f,39278,s);Ra=Q;return}r=o?1:n;q=qj(P,h)|0;b:do if((d[f+200>>0]|0)>1){p=c[f>>2]|0;c:do if(!p){if(!(c[7324]|0)){n=Wa[c[29340>>2]&127](16)|0;O=49;break}n=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;p=59064;o=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&o>>>0>0){M=c[14978]|0;F=Tv(o|0,p|0,n|0,((n|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=M>>>0)&1}n=Wa[c[29340>>2]&127](n)|0;if(!n)break b;o=Wa[c[29352>>2]&127](n)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0>(c[14987]|0)>>>0)c[14987]=o}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0)break b}else{do if((e[p+276>>1]|0)>=16){o=p+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];O=p+284|0;c[O>>2]=(c[O>>2]|0)+1;O=49;break c}o=p+296|0;n=c[o>>2]|0;if(!n){n=p+292|0;break}else{c[o>>2]=c[n>>2];O=p+284|0;c[O>>2]=(c[O>>2]|0)+1;O=49;break c}}else n=p+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1}n=_d(p,16,0)|0;O=49}while(0);if((O|0)==49)if(!n)break;o=n+4|0;p=o;s=p+12|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));c[n>>2]=q;E=h;F=c[E+4>>2]|0;M=o;c[M>>2]=c[E>>2];c[M+4>>2]=F;M=f+272|0;c[n+12>>2]=c[M>>2];c[M>>2]=n}while(0);E=h;F=c[E+4>>2]|0;M=f+180|0;c[M>>2]=c[E>>2];c[M+4>>2]=F;if(!q){Ra=Q;return}else{E=q;g=h;M=r}}d:do if(!(vk(f,E)|0)){h=(a[P+164>>0]|0)==1?1:i;i=P+16|0;p=c[(c[i>>2]|0)+(M<<4)>>2]|0;n=(h|0)==1?34855:34585;o=c[f>>2]|0;do if(((a[o+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(t=c[o+312>>2]|0,t|0):0){n=$a[t&127](c[o+316>>2]|0,18,n,0,p,c[f+240>>2]|0)|0;if((n|0)==1){cd(f,39216,u);c[f+12>>2]=23;O=271;break d}if((n|2|0)==2)if(!n)break;else{O=271;break d}else{cd(f,39231,v);c[f+12>>2]=1;O=271;break d}}while(0);F=(k|0)==0;do if(((F?(w=d[39319+(h+(j<<1))>>0]|0,x=c[f>>2]|0,(a[x+165>>0]|0)==0):0)?(a[f+200>>0]|0)==0:0)?(y=c[x+312>>2]|0,y|0):0){n=$a[y&127](c[x+316>>2]|0,w,E,0,p,c[f+240>>2]|0)|0;if((n|0)==1){cd(f,39216,A);c[f+12>>2]=23;O=271;break d}if((n|2|0)==2)if(!n)break;else{O=271;break d}else{cd(f,39231,z);c[f+12>>2]=1;O=271;break d}}while(0);do if(!(a[f+200>>0]|0)){o=c[(c[i>>2]|0)+(M<<4)>>2]|0;p=c[f>>2]|0;e:do if(!(a[p+165>>0]|0)){h=f+4|0;q=p+24|0;r=(c[q>>2]&1|0)==0;s=p+16|0;A=c[(c[s>>2]|0)+12>>2]|0;a[p+78>>0]=a[A+77>>0]|0;if(!((b[A+78>>1]&1)==0?(m=eh(p,0,h,0)|0,(m|0)!=0):0))O=75;f:do if((O|0)==75){m=c[p+20>>2]|0;if((m|0)>1)do{n=m;m=m+-1|0;if((b[(c[(c[s>>2]|0)+(m<<4)+12>>2]|0)+78>>1]&1)==0?(B=eh(p,m,h,0)|0,B|0):0){m=B;break f}}while((n|0)>2);if(r)c[q>>2]=c[q>>2]&-2;if(!(a[p+89>>0]|0))break e;c[q>>2]=c[q>>2]|16;break e}while(0);c[f+12>>2]=m;O=f+36|0;c[O>>2]=(c[O>>2]|0)+1;O=270;break d}while(0);if(!(Sd(P,E,o)|0)){if(hi(P,E,o)|0){c[D>>2]=E;cd(f,39347,D);O=270;break d}if(P|0){O=119;break}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](80)|0;O=141;break}m=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){G=c[14978]|0;D=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;C=L()|0;c[14768]=((C|0)<0|(C|0)==0&D>>>0<=G>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){O=142;break}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n;break}if(!l){c[C>>2]=g;cd(f,39323,C);O=270;break d}p=c[f+116>>2]|0;p=(p|0)==0?f:p;m=p+84|0;n=c[m>>2]|0;o=1<<M;if(n&o|0){O=270;break d}c[m>>2]=n|o;if((M|0)!=1){O=270;break d}s=c[p>>2]|0;m=s+16|0;if(c[(c[m>>2]|0)+20>>2]|0){O=270;break d}if(a[p+199>>0]|0){O=270;break d}n=Pe(c[s>>2]|0,0,s,K,0,542)|0;if(n|0){cd(p,32157,G);c[p+12>>2]=n;O=270;break d}f=c[K>>2]|0;c[(c[m>>2]|0)+20>>2]=f;m=c[s+92>>2]|0;p=c[f+4>>2]|0;c[p+4>>2]=c[f>>2];if(!(b[p+22>>1]&2)){h=p+32|0;q=p+36|0;r=(c[h>>2]|0)-(c[q>>2]|0)|0;do if((m+-512|0)>>>0<65025?(m+-1&m|0)==0:0){c[h>>2]=m;o=p+80|0;m=c[o>>2]|0;if(!m)break;n=m+-4|0;c[o>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;f=(c[14820]|0)+1|0;c[14820]=f;c[14821]=(f|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;O=103;break}else{m=Wa[c[29352>>2]&127](n)|0;O=103}while(0);do if((O|0)==103){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[o>>2]=0}while(0);f=Se(c[p>>2]|0,h,r)|0;c[q>>2]=(c[h>>2]|0)-(r&65535);if((f|0)==7){m=s+81|0;do if(!(a[m>>0]|0)){if(a[s+82>>0]|0)break;a[m>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;m=s+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[s+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);O=270;break d}}O=270;break d}else O=119;while(0);g:do if((O|0)==119){if(c[P+272>>2]|0){if(a[P+81>>0]|0){O=142;break}}else{do if((e[P+276>>1]|0)>=80){n=P+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=141;break g}n=P+296|0;m=c[n>>2]|0;if(!m){m=P+292|0;break}else{c[n>>2]=c[m>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=141;break g}}else m=P+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(P,80,0)|0;O=141}while(0);if((O|0)==141)if(!m)O=142;if((O|0)==142){c[f+12>>2]=7;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;O=270;break}p=m+4|0;s=p+76|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));c[m>>2]=E;b[m+40>>1]=-1;n=c[(c[i>>2]|0)+(M<<4)+12>>2]|0;c[m+72>>2]=n;c[m+32>>2]=1;b[m+44>>1]=200;c[f+228>>2]=m;if((a[f+18>>0]|0)==0?(Bu(E,39382)|0)==0:0)c[n+72>>2]=m;if(a[H>>0]|0){Ra=Q;return}u=f+8|0;m=c[u>>2]|0;t=f+116|0;if(!m){o=c[f>>2]|0;if((c[t>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))O=161;else{Ra=Q;return}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;n=c[m>>2]|0;if(n|0){c[m>>2]=c[n>>2];H=o+284|0;c[H>>2]=(c[H>>2]|0)+1;break h}m=o+296|0;n=c[m>>2]|0;if(!n){m=o+292|0;break}else{c[m>>2]=c[n>>2];H=o+284|0;c[H>>2]=(c[H>>2]|0)+1;break h}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;O=161}while(0);if((O|0)==161)n=_d(o,224,0)|0;if(!n){Ra=Q;return}p=n+104|0;s=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(s|0));c[n>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=n;c[n+8>>2]=o;c[n+4>>2]=0;c[m>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[u>>2]=n;Di(n,61,0,1,0)|0;v=n}else v=m;s=c[t>>2]|0;s=(s|0)==0?f:s;m=s+84|0;n=c[m>>2]|0;g=1<<M;do if((((n&g|0)==0?(c[m>>2]=n|g,(M|0)==1):0)?(N=c[s>>2]|0,I=N+16|0,(c[(c[I>>2]|0)+20>>2]|0)==0):0)?(a[s+199>>0]|0)==0:0){m=Pe(c[N>>2]|0,0,N,K,0,542)|0;if(m|0){cd(s,32157,J);c[s+12>>2]=m;break}K=c[K>>2]|0;c[(c[I>>2]|0)+20>>2]=K;m=c[N+92>>2]|0;p=c[K+4>>2]|0;c[p+4>>2]=c[K>>2];if(!(b[p+22>>1]&2)){h=p+32|0;q=p+36|0;r=(c[h>>2]|0)-(c[q>>2]|0)|0;do if((m+-512|0)>>>0<65025?(m+-1&m|0)==0:0){c[h>>2]=m;o=p+80|0;m=c[o>>2]|0;if(!m)break;n=m+-4|0;c[o>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;K=(c[14820]|0)+1|0;c[14820]=K;c[14821]=(K|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;O=181;break}else{m=Wa[c[29352>>2]&127](n)|0;O=181}while(0);do if((O|0)==181){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{K=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[o>>2]=0}while(0);K=Se(c[p>>2]|0,h,r)|0;c[q>>2]=(c[h>>2]|0)-(r&65535);if((K|0)==7){m=N+81|0;do if(!(a[m>>0]|0)){if(a[N+82>>0]|0)break;a[m>>0]=1;if((c[N+180>>2]|0)>0)c[N+264>>2]=1;m=N+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[N+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);break}}}while(0);i=s+80|0;c[i>>2]=c[i>>2]|g;i=s+20|0;a[i>>0]=a[i>>0]|1;i=v+108|0;do if(!F){m=c[i>>2]|0;n=v+112|0;if((c[n>>2]|0)>(m|0)){c[i>>2]=m+1;p=c[v+104>>2]|0;a[p+(m*20|0)>>0]=-96;p=p+(m*20|0)+1|0;s=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));r=n;break}else{Di(v,160,0,0,0)|0;r=n;break}}else r=v+112|0;while(0);m=f+44|0;q=c[m>>2]|0;h=q+1|0;c[f+88>>2]=h;p=q+2|0;c[f+92>>2]=p;q=q+3|0;c[m>>2]=q;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;N=c[v+104>>2]|0;a[N+(m*20|0)>>0]=94;b[N+(m*20|0)+2>>1]=0;c[N+(m*20|0)+4>>2]=M;c[N+(m*20|0)+8>>2]=q;c[N+(m*20|0)+12>>2]=2;c[N+(m*20|0)+16>>2]=0;a[N+(m*20|0)+1>>0]=0}else Di(v,94,M,q,2)|0;N=v+152|0;c[N>>2]=c[N>>2]|g;if((M|0)!=1?a[(c[(c[(c[v>>2]|0)+16>>2]|0)+(M<<4)+4>>2]|0)+9>>0]|0:0){N=v+156|0;c[N>>2]=c[N>>2]|g}m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;o=c[v+104>>2]|0;a[o+(m*20|0)>>0]=18;b[o+(m*20|0)+2>>1]=0;c[o+(m*20|0)+4>>2]=q;c[o+(m*20|0)+8>>2]=0;c[o+(m*20|0)+12>>2]=0;c[o+(m*20|0)+16>>2]=0;a[o+(m*20|0)+1>>0]=0;o=m}else o=Di(v,18,q,0,0)|0;m=(0==0?(c[P+32>>2]&2|0)==0:0)?4:1;n=c[i>>2]|0;if((c[r>>2]|0)>(n|0)){c[i>>2]=n+1;N=c[v+104>>2]|0;a[N+(n*20|0)>>0]=95;b[N+(n*20|0)+2>>1]=0;c[N+(n*20|0)+4>>2]=M;c[N+(n*20|0)+8>>2]=2;c[N+(n*20|0)+12>>2]=m;c[N+(n*20|0)+16>>2]=0;a[N+(n*20|0)+1>>0]=0}else Di(v,95,M,2,m)|0;m=d[P+78>>0]|0;n=c[i>>2]|0;if((c[r>>2]|0)>(n|0)){c[i>>2]=n+1;P=c[v+104>>2]|0;a[P+(n*20|0)>>0]=95;b[P+(n*20|0)+2>>1]=0;c[P+(n*20|0)+4>>2]=M;c[P+(n*20|0)+8>>2]=5;c[P+(n*20|0)+12>>2]=m;c[P+(n*20|0)+16>>2]=0;a[P+(n*20|0)+1>>0]=0}else Di(v,95,M,5,m)|0;m=c[i>>2]|0;if(!(a[(c[v>>2]|0)+81>>0]|0))n=(c[v+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else n=59308;c[n+8>>2]=m;n=(c[r>>2]|0)>(m|0);do if(k|j)if(n){c[i>>2]=m+1;P=c[v+104>>2]|0;a[P+(m*20|0)>>0]=70;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=0;c[P+(m*20|0)+8>>2]=p;c[P+(m*20|0)+12>>2]=0;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0;break}else{Di(v,70,0,p,0)|0;break}else{if(n){c[i>>2]=m+1;P=c[v+104>>2]|0;a[P+(m*20|0)>>0]=-117;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=M;c[P+(m*20|0)+8>>2]=p;c[P+(m*20|0)+12>>2]=1;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0}else m=Di(v,139,M,p,1)|0;c[f+128>>2]=m}while(0);o=c[u>>2]|0;i:do if(!o){n=c[f>>2]|0;do if(!(c[t>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);j:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))O=238;else{o=0;break i}else{do if((e[n+276>>1]|0)>=224){m=n+300|0;o=c[m>>2]|0;if(o|0){c[m>>2]=c[o>>2];P=n+284|0;c[P>>2]=(c[P>>2]|0)+1;break j}m=n+296|0;o=c[m>>2]|0;if(!o){m=n+292|0;break}else{c[m>>2]=c[o>>2];P=n+284|0;c[P>>2]=(c[P>>2]|0)+1;break j}}else m=n+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;O=238}while(0);if((O|0)==238)o=_d(n,224,0)|0;if(!o){o=0;break}p=o+104|0;s=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(s|0));c[o>>2]=n;m=n+4|0;n=c[m>>2]|0;if(n|0)c[n+4>>2]=o;c[o+8>>2]=n;c[o+4>>2]=0;c[m>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[u>>2]=o;Di(o,61,0,1,0)|0}while(0);Hj(f,M,1,1,34585);n=o+108|0;m=c[n>>2]|0;if((c[o+112>>2]|0)>(m|0)){c[n>>2]=m+1;P=c[o+104>>2]|0;a[P+(m*20|0)>>0]=109;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=0;c[P+(m*20|0)+8>>2]=1;c[P+(m*20|0)+12>>2]=M;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0}else m=Di(o,109,0,1,M)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){P=c[o+104>>2]|0;a[P+(m*20|0)+1>>0]=-3;c[P+(m*20|0)+16>>2]=5}m=f+40|0;if(!(c[m>>2]|0))c[m>>2]=1;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=121;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=0;c[f+(m*20|0)+8>>2]=h;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(v,121,0,h,0)|0;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=75;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=6;c[f+(m*20|0)+8>>2]=q;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else m=Di(v,75,6,q,0)|0;do if(!(a[(c[v>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[i>>2]|0)+-1|0;n=c[v+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=39398;a[o>>0]=-1;break}else{Ei(v,n+(m*20|0)|0,39398,-1);break}}while(0);m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=122;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=0;c[f+(m*20|0)+8>>2]=q;c[f+(m*20|0)+12>>2]=h;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(v,122,0,q,h)|0;m=c[i>>2]|0;if((m|0)>0)b[(c[v+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=8;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;p=c[v+104>>2]|0;a[p+(m*20|0)>>0]=117;p=p+(m*20|0)+1|0;s=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));Ra=Q;return}else{Di(v,117,0,0,0)|0;Ra=Q;return}}else O=270;while(0);if((O|0)==270?P|0:0)O=271;if((O|0)==271){if(c[P+480>>2]|0){Xd(P,E);Ra=Q;return}f=E;if((c[P+304>>2]|0)>>>0<=f>>>0?(c[P+308>>2]|0)>>>0>f>>>0:0){f=P+300|0;c[E>>2]=c[f>>2];c[f>>2]=E;Ra=Q;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);Ra=Q;return}else{f=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);Ra=Q;return}}function cj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;da=Ra;Ra=Ra+272|0;$=da+192|0;_=da+184|0;Y=da+152|0;R=da+136|0;X=da+128|0;W=da+120|0;T=da+112|0;P=da+104|0;w=da+96|0;v=da+88|0;u=da+80|0;S=da+232|0;N=da;O=da+200|0;ba=c[f>>2]|0;Q=(j|0)==0;if((h|0)==0&Q){Ra=da;return}aa=f+228|0;ca=c[aa>>2]|0;if(!ca){Ra=da;return}if(((Q?(k=c[ca>>2]|0,r=Ru(k,95)|0,r|0):0)?(a[r>>0]=0,l=Sd(ba,k,0)|0,a[r>>0]=95,l|0):0)?c[l+56>>2]|0:0){q=c[c[l+60>>2]>>2]|0;n=c[ba+348>>2]|0;if(!n){l=ba+340|0;k=ba+344|0}else{l=a[q>>0]|0;if(!(l<<24>>24))k=0;else{k=0;m=q;do{m=m+1|0;k=G(k+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[m>>0]|0}while(l<<24>>24!=0)}k=(k>>>0)%((c[ba+336>>2]|0)>>>0)|0;l=n+(k<<3)|0;k=n+(k<<3)+4|0}l=c[l>>2]|0;a:do if(!l)k=59292;else{p=d[208+(d[q>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;l=l+-1|0;n=c[k+12>>2]|0;V=a[n>>0]|0;m=(d[208+(V&255)>>0]|0)-p|0;if(!(V<<24>>24==0|(m|0)!=0)){o=q;do{n=n+1|0;o=o+1|0;V=a[n>>0]|0;m=(d[208+(V&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(V<<24>>24==0|(m|0)!=0))}if(!m)break a;if(!l){k=59292;break}}}while(0);k=c[k+8>>2]|0;if(((k|0?(s=c[k>>2]|0,(c[s>>2]|0)>=3):0)?(t=c[s+92>>2]|0,t|0):0)?Wa[t&127](r+1|0)|0:0){V=ca+36|0;c[V>>2]=c[V>>2]|1024}}V=ba+165|0;do if(a[V>>0]|0)if(Q){M=c[ba+160>>2]|0;c[ca+28>>2]=M;if((M|0)!=1)break;M=ca+36|0;c[M>>2]=c[M>>2]|1;break}else{cd(f,59952,u);Ra=da;return}while(0);b:do if(i&32){k=ca+36|0;l=c[k>>2]|0;if(l&8|0){cd(f,39491,v);Ra=da;return}if(!(l&4)){c[w>>2]=c[ca>>2];cd(f,39541,w);break}c[k>>2]=l|96;M=c[f>>2]|0;v=c[f+8>>2]|0;u=M+166|0;if((a[u>>0]&2)==0?(x=b[ca+42>>1]|0,x<<16>>16>0):0){m=c[ca+4>>2]|0;l=x<<16>>16;k=0;do{if(a[m+(k<<4)+15>>0]&1)a[m+(k<<4)+12>>0]=2;k=k+1|0}while((k|0)!=(l|0))}k=c[f+128>>2]|0;if(k|0){if((k|0)<0)k=(c[v+108>>2]|0)+-1|0;if(!(a[(c[v>>2]|0)+81>>0]|0))k=(c[v+104>>2]|0)+(k*20|0)|0;else k=59308;c[k+12>>2]=2}l=ca+40|0;k=b[l>>1]|0;do if(k<<16>>16>-1){k=c[(c[ca+4>>2]|0)+(k<<16>>16<<4)>>2]|0;c[S>>2]=k;if(!k)k=0;else k=(Eu(k)|0)&1073741823;c[S+4>>2]=k;k=oj(M,59,S,0)|0;k=nj(c[f>>2]|0,0,k)|0;if((k|0?(a[k+16>>0]=a[f+198>>0]|0,hj(f,0,0,0,k,d[ca+48>>0]|0,0,0,0,0,2),(a[M+81>>0]|0)==0):0)?(c[f+36>>2]|0)==0:0){k=c[ca+8>>2]|0;c:do if(!k)k=0;else while(1){K=k+55|0;if(((d[K>>0]|d[K+1>>0]<<8)&3)==2)break c;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);b[l>>1]=-1;K=k;break}break b}else{k=c[ca+8>>2]|0;d:do if(!k)k=0;else while(1){K=k+55|0;if(((d[K>>0]|d[K+1>>0]<<8)&3)==2)break d;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);t=k+50|0;m=b[t>>1]|0;if((m&65535)>1){r=c[k+4>>2]|0;s=k+52|0;l=1;q=1;do{p=b[r+(q<<1)>>1]|0;e:do if((l|0)>0){n=r;o=l;while(1){if((b[n>>1]|0)==p<<16>>16)break;if((o|0)>1){n=n+2|0;o=o+-1|0}else{U=70;break e}}b[s>>1]=(b[s>>1]|0)+-1<<16>>16}else U=70;while(0);if((U|0)==70){U=0;b[r+(l<<1)>>1]=p;l=l+1|0;m=b[t>>1]|0}q=q+1|0}while(q>>>0<(m&65535)>>>0)}else l=1;b[t>>1]=l;K=k}while(0);I=K+55|0;k=d[I>>0]|d[I+1>>0]<<8;J=k|32;a[I>>0]=J;a[I+1>>0]=J>>8;if(!(a[u>>0]&2)){J=k|40;a[I>>0]=J;a[I+1>>0]=J>>8}m=b[K+50>>1]|0;J=m&65535;l=K+44|0;if(v|0?(y=c[l>>2]|0,(y|0)>0):0){if(!(a[(c[v>>2]|0)+81>>0]|0))k=(c[v+104>>2]|0)+(y*20|0)|0;else k=59308;a[k>>0]=11}c[l>>2]=c[ca+28>>2];k=c[ca+8>>2]|0;if(k|0){w=m<<16>>16==0;x=K+4|0;y=M+272|0;z=K+32|0;A=M+276|0;B=M+81|0;C=M+288|0;D=M+300|0;E=M+296|0;F=M+284|0;H=M+292|0;do{u=k+55|0;f:do if(((d[u>>0]|d[u+1>>0]<<8)&3)!=2){v=k+50|0;l=b[v>>1]|0;do if(!w){s=c[x>>2]|0;t=l&65535;if(!(l<<16>>16)){m=J;n=0}else{r=c[k+4>>2]|0;m=0;q=0;do{p=b[s+(q<<1)>>1]|0;n=r;o=t;while(1){if((b[n>>1]|0)==p<<16>>16)break;if((o|0)>1){n=n+2|0;o=o+-1|0}else{U=89;break}}if((U|0)==89){U=0;m=m+1|0}q=q+1|0}while((q|0)!=(J|0));n=l}if(!m){l=n;break}o=m+(n&65535)|0;p=k+52|0;if((o|0)>(e[p>>1]|0)){n=o*7|0;m=((n|0)<0)<<31>>31;g:do if(c[y>>2]|0)if(!(a[B>>0]|0))U=103;else break b;else{do if(0<m>>>0|(0==(m|0)?(e[A>>1]|0)>>>0<n>>>0:0))l=C;else{l=c[D>>2]|0;if(l|0){c[D>>2]=c[l>>2];c[F>>2]=(c[F>>2]|0)+1;break g}l=c[E>>2]|0;if(!l){l=H;break}c[E>>2]=c[l>>2];c[F>>2]=(c[F>>2]|0)+1;break g}while(0);c[l>>2]=(c[l>>2]|0)+1;U=103}while(0);if((U|0)==103){U=0;l=_d(M,n,m)|0}if(!l)break b;gw(l|0,0,n|0)|0;s=k+32|0;ew(l|0,c[s>>2]|0,e[p>>1]<<2|0)|0;c[s>>2]=l;m=l+(o<<2)|0;r=k+4|0;ew(m|0,c[r>>2]|0,e[p>>1]<<1|0)|0;c[r>>2]=m;m=m+(o<<1)|0;l=k+28|0;ew(m|0,c[l>>2]|0,e[p>>1]|0)|0;c[l>>2]=m;b[p>>1]=o;l=d[u>>0]|d[u+1>>0]<<8|16;a[u>>0]=l;a[u+1>>0]=l>>8;l=b[v>>1]|0;m=l&65535}else{m=t;r=k+4|0;s=k+32|0}n=0;while(1){p=c[r>>2]|0;q=b[(c[x>>2]|0)+(n<<1)>>1]|0;h:do if(!(l<<16>>16))U=111;else{o=p;l=l&65535;while(1){if((b[o>>1]|0)==q<<16>>16){l=m;break h}if((l|0)>1){o=o+2|0;l=l+-1|0}else{U=111;break}}}while(0);if((U|0)==111){U=0;b[p+(m<<1)>>1]=q;c[(c[s>>2]|0)+(m<<2)>>2]=c[(c[z>>2]|0)+(n<<2)>>2];l=m+1|0}n=n+1|0;if((n|0)==(J|0))break f;m=l;l=b[v>>1]|0}}while(0);b[k+52>>1]=l}while(0);k=c[k+20>>2]|0}while((k|0)!=0)}s=ca+42|0;l=b[s>>1]|0;p=l<<16>>16;t=K+52|0;if((J|0)<(p|0)){k=b[t>>1]|0;if((k&65535|0)<(p|0)){o=p*7|0;n=((o|0)<0)<<31>>31;i:do if(!M){M=Sv(o|0,n|0,-1,-1)|0;H=L()|0;if(H>>>0>0|(H|0)==0&M>>>0>2147483390)break b;if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;U=141;break}k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0<o>>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){M=c[14978]|0;H=Tv(m|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;F=L()|0;c[14768]=((F|0)<0|(F|0)==0&H>>>0<=M>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break b;m=Wa[c[29352>>2]&127](k)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[M+272>>2]|0){if(a[M+81>>0]|0)break b}else{do if(!(0<n>>>0|(0==(n|0)?(e[M+276>>1]|0)>>>0<o>>>0:0))){m=M+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];U=M+284|0;c[U>>2]=(c[U>>2]|0)+1;U=141;break i}m=M+296|0;k=c[m>>2]|0;if(!k){k=M+292|0;break}else{c[m>>2]=c[k>>2];U=M+284|0;c[U>>2]=(c[U>>2]|0)+1;U=141;break i}}else k=M+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(M,o,n)|0;U=141}while(0);if((U|0)==141)if(!k)break;gw(k|0,0,o|0)|0;M=K+32|0;ew(k|0,c[M>>2]|0,e[t>>1]<<2|0)|0;c[M>>2]=k;M=k+(p<<2)|0;k=K+4|0;ew(M|0,c[k>>2]|0,e[t>>1]<<1|0)|0;c[k>>2]=M;M=M+(p<<1)|0;k=K+28|0;ew(M|0,c[k>>2]|0,e[t>>1]|0)|0;c[k>>2]=M;b[t>>1]=l;k=d[I>>0]|d[I+1>>0]<<8|16;a[I>>0]=k;a[I+1>>0]=k>>8;k=l;l=b[s>>1]|0}if(l<<16>>16>0){q=K+4|0;r=K+32|0;p=0;k=J;do{o=c[q>>2]|0;j:do if((k|0)>0){m=o;n=k;while(1){if((p|0)==(b[m>>1]|0))break j;if((n|0)>1){m=m+2|0;n=n+-1|0}else{U=149;break}}}else U=149;while(0);if((U|0)==149){U=0;b[o+(k<<1)>>1]=p;c[(c[r>>2]|0)+(k<<2)>>2]=34049;k=k+1|0;l=b[s>>1]|0}p=p+1|0}while((p|0)<(l<<16>>16|0));k=b[t>>1]|0}}else{b[t>>1]=l;k=l}if(!(k<<16>>16)){l=-1;k=-1}else{m=c[K+4>>2]|0;k=k&65535;l=0;n=0;do{M=k;k=k+-1|0;H=b[m+(k<<1)>>1]|0;I=(H&65535)<63;H=cw(1,0,H<<16>>16|0)|0;J=L()|0;l=(I?H:0)|l;n=(I?J:0)|n}while((M|0)>1);l=~l;k=~n}M=K+64|0;c[M>>2]=l;c[M+4>>2]=k}while(0);F=ca+72|0;l=c[F>>2]|0;if(!l)E=-1e6;else{m=c[ba+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){E=k;break}else k=k+1|0}w=c[ca+24>>2]|0;if(w|0){k=O+8|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;k=N;n=k+80|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));c[N>>2]=1;c[N+16>>2]=c[ca>>2];c[N+24>>2]=ca;c[N+48>>2]=-1;c[O>>2]=f;c[O+4>>2]=N;q=O+24|0;b[q>>1]=4;k:do if((c[w>>2]|0)>0){r=S+4|0;s=S+8|0;t=S+12|0;u=S+24|0;v=O+20|0;p=0;k=4;while(1){o=c[w+4+(p*20|0)>>2]|0;if(o){m=k&65535;b[q>>1]=m&28655;k=c[O>>2]|0;c[S>>2]=k;c[r>>2]=125;c[s>>2]=126;c[t>>2]=0;c[u>>2]=O;n=o+24|0;l=k;M=l+208|0;N=(c[M>>2]|0)+(c[n>>2]|0)|0;c[M>>2]=N;l=c[(c[l>>2]|0)+120>>2]|0;if((l|0)<(N|0)){U=168;break}_j(S,o)|0;l=c[S>>2]|0;k=l+208|0;c[k>>2]=(c[k>>2]|0)-(c[n>>2]|0);k=b[q>>1]|0;N=o+4|0;c[N>>2]=c[N>>2]|k&-32752&65535;k=(m&36880|k&65535)&65535;b[q>>1]=k;if((c[v>>2]|0)>0)break;if((c[l+36>>2]|0)>=1)break k}p=p+1|0;if((p|0)>=(c[w>>2]|0))break k}if((U|0)==168){c[P>>2]=l;cd(k,41637,P)}}while(0)}D=ca+42|0;l=b[D>>1]|0;if(l<<16>>16>0){m=c[ca+4>>2]|0;k=0;l=l<<16>>16;while(1){k=k+(d[m+14>>0]|0)|0;if((l|0)>1){m=m+16|0;l=l+-1|0}else break}}else k=0;k=k+((e[ca+40>>1]|0)>>>15&65535)<<2;if(k>>>0<8)if(!k)k=0;else{m=40;l=0;do{m=(m&65535)+65526|0;k=cw(k|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&k>>>0<8);m=m&65535;U=189}else{if(k>>>0>255){m=40;l=0;do{m=(m&65535)+40|0;U=k;k=bw(k|0,l|0,4)|0;P=l;l=L()|0}while(P>>>0>0|(P|0)==0&U>>>0>4095);m=m&65535}else{m=40;l=0}if(l>>>0>0|(l|0)==0&k>>>0>15){do{m=(m&65535)+10&65535;U=k;k=bw(k|0,l|0,1)|0;P=l;l=L()|0}while(P>>>0>0|(P|0)==0&U>>>0>31);U=189}else U=189}if((U|0)==189)k=(m&65535)+65526+(e[3648+((k&7)<<1)>>1]|0)&65535;b[ca+46>>1]=k;k=c[ca+8>>2]|0;if(k|0)do{xk(k);k=c[k+20>>2]|0}while((k|0)!=0);if(!(a[V>>0]|0)){C=f+8|0;k=c[C>>2]|0;if(!k){m=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;l:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))U=209;else{Ra=da;return}else{do if((e[m+276>>1]|0)>=224){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];P=m+284|0;c[P>>2]=(c[P>>2]|0)+1;break l}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];P=m+284|0;c[P>>2]=(c[P>>2]|0)+1;break l}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;U=209}while(0);if((U|0)==209)l=_d(m,224,0)|0;if(!l){Ra=da;return}k=l+104|0;n=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));c[l>>2]=m;k=m+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[C>>2]=l;Di(l,61,0,1,0)|0;B=l}else B=k;u=B+108|0;k=c[u>>2]|0;v=B+112|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;n=c[B+104>>2]|0;a[n+(k*20|0)>>0]=117;k=n+(k*20|0)+1|0;n=k+19|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(n|0))}else Di(B,117,0,0,0)|0;A=(c[ca+12>>2]|0)==0;n=A?39573:39584;A=A?37991:39579;m:do if(Q){l=i<<24>>24==0?h:f+188|0;X=c[l>>2]|0;m=c[f+180>>2]|0;k=X-m|0;if((a[X>>0]|0)!=59)k=(c[l+4>>2]|0)+k|0;c[R>>2]=n;c[R+4>>2]=k;c[R+8>>2]=m;m=dd(ba,39589,R)|0;l=f+92|0;k=ca}else{l=f+44|0;t=c[l>>2]|0;p=t+1|0;s=t+2|0;t=t+3|0;c[l>>2]=t;l=c[f+116>>2]|0;a[((l|0)==0?f:l)+21>>0]=1;l=f+92|0;k=c[l>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;R=c[B+104>>2]|0;a[R+(m*20|0)>>0]=109;b[R+(m*20|0)+2>>1]=0;c[R+(m*20|0)+4>>2]=1;c[R+(m*20|0)+8>>2]=k;c[R+(m*20|0)+12>>2]=E;c[R+(m*20|0)+16>>2]=0;a[R+(m*20|0)+1>>0]=0}else Di(B,109,1,k,E)|0;o=c[u>>2]|0;if((o|0)>0)b[(c[B+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=16;c[f+40>>2]=2;k=o+1|0;if((c[v>>2]|0)>(o|0)){c[u>>2]=k;R=c[B+104>>2]|0;a[R+(o*20|0)>>0]=13;b[R+(o*20|0)+2>>1]=0;c[R+(o*20|0)+4>>2]=p;c[R+(o*20|0)+8>>2]=0;c[R+(o*20|0)+12>>2]=k;c[R+(o*20|0)+16>>2]=0;a[R+(o*20|0)+1>>0]=0}else Di(B,13,p,0,k)|0;m=f+36|0;do if(!(c[m>>2]|0)){k=yk(f,j)|0;if(!k)break;i=k+42|0;b[D>>1]=b[i>>1]|0;R=k+4|0;w=ca+4|0;c[w>>2]=c[R>>2];b[i>>1]=0;c[R>>2]=0;do if(!(c[ba+480>>2]|0)){i=k+32|0;R=(c[i>>2]|0)+-1|0;c[i>>2]=R;if(R|0)break;Vi(ba,k)}else Vi(ba,k);while(0);a[S>>0]=13;n=S+4|0;c[n>>2]=p;c[S+16>>2]=0;q=S+8|0;c[q>>2]=0;r=S+12|0;c[r>>2]=0;kj(f,j,S)|0;if(c[m>>2]|0)break;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=67;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=p;c[S+(k*20|0)+8>>2]=0;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,67,p,0,0)|0;m=c[B+12>>2]|0;a[m+19>>0]=0;c[m+28>>2]=0;m=c[u>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))k=(c[B+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=m;k=c[n>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;o=c[B+104>>2]|0;a[o+(m*20|0)>>0]=14;b[o+(m*20|0)+2>>1]=0;c[o+(m*20|0)+4>>2]=k;c[o+(m*20|0)+8>>2]=0;c[o+(m*20|0)+12>>2]=0;c[o+(m*20|0)+16>>2]=0;a[o+(m*20|0)+1>>0]=0;o=m}else o=Di(B,14,k,0,0)|0;n=c[q>>2]|0;k=c[r>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;S=c[B+104>>2]|0;a[S+(m*20|0)>>0]=92;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=n;c[S+(m*20|0)+8>>2]=k;c[S+(m*20|0)+12>>2]=s;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0}else Di(B,92,n,k,s)|0;zk(B,ca,0);k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=121;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=1;c[S+(k*20|0)+8>>2]=t;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,121,1,t,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=122;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=1;c[S+(k*20|0)+8>>2]=s;c[S+(k*20|0)+12>>2]=t;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,122,1,s,t)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=o;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,11,0,o,0)|0;m=c[u>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))k=(c[B+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=m;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;S=c[B+104>>2]|0;a[S+(m*20|0)>>0]=117;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=1;c[S+(m*20|0)+8>>2]=0;c[S+(m*20|0)+12>>2]=0;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0}else Di(B,117,1,0,0)|0;S=b[D>>1]|0;r=S<<16>>16;if(S<<16>>16>0){o=0;p=c[w>>2]|0;k=0;while(1){m=0;n=c[p>>2]|0;n:while(1){switch(a[n>>0]|0){case 0:break n;case 34:{m=m+1|0;break}default:{}}m=m+1|0;n=n+1|0}k=k+7+m|0;o=o+1|0;if((o|0)==(r|0)){n=k;break}else p=p+16|0}}else n=0;k=0;m=c[ca>>2]|0;o:while(1){switch(a[m>>0]|0){case 0:break o;case 34:{k=k+1|0;break}default:{}}k=k+1|0;m=m+1|0}x=n+2+k|0;z=(x|0)<50;q=z?59952:41687;y=z?41685:41691;z=z?34066:41696;x=(r*6|0)+35+x|0;S=Sv(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;j=L()|0;p:do if(!(j>>>0>0|(j|0)==0&S>>>0>2147483390)){do if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](x)|0;if(!m)break p}else{k=Wa[c[29356>>2]&127](x)|0;if((c[14985]|0)>>>0<x>>>0)c[14985]=x;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){S=c[14978]|0;j=Tv(m|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;R=L()|0;c[14768]=((R|0)<0|(R|0)==0&j>>>0<=S>>>0)&1}m=Wa[c[29340>>2]&127](k)|0;if(!m)break p;k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}while(0);Cb(x,m,41699,T)|0;k=(Eu(m)|0)&1073741823;u=c[ca>>2]|0;t=a[u>>0]|0;q:do if(!(t<<24>>24)){n=0;s=0}else{n=0;o=t;while(1){if(!(o<<24>>24==95?1:(a[880+(o&255)>>0]&6)!=0)){s=1;break q}n=n+1|0;o=a[u+n>>0]|0;if(!(o<<24>>24)){s=0;break}}}while(0);o=t&255;r:do if((o+-48|0)>>>0>=10){do if((n|0)>1){o=a[3952+((d[208+o>>0]<<2^n^(d[208+(d[u+(n+-1)>>0]|0)>>0]|0)*3|0)%127|0)>>0]|0;if(!(o<<24>>24))break;o=o&255;while(1){p=o+-1|0;s:do if((n|0)==(d[2064+p>>0]|0)){r=1136+(e[1776+(p<<1)>>1]|0)|0;o=0;while(1){if((a[u+o>>0]&-33)<<24>>24!=(a[r+o>>0]|0))break s;o=o+1|0;if((o|0)>=(n|0)){U=302;break r}}}while(0);o=a[4224+p>>0]|0;if(!(o<<24>>24))break;else o=o&255}}while(0);if(!((n|0)==0|s)){p=t;t=0}else U=302}else U=302;while(0);if((U|0)==302){a[m+k>>0]=34;k=k+1|0;p=a[u>>0]|0;t=1}n=k+1|0;o=m+k|0;if(p<<24>>24){s=0;r=u;do{a[o>>0]=p;if((a[r>>0]|0)==34){a[m+n>>0]=34;k=k+2|0}else k=n;s=s+1|0;r=u+s|0;p=a[r>>0]|0;n=k+1|0;o=m+k|0}while(p<<24>>24!=0)}if(t){a[o>>0]=34;k=n}o=k+1|0;a[m+k>>0]=40;k=x-o|0;n=m+o|0;if((b[D>>1]|0)>0){p=0;v=c[w>>2]|0;while(1){Cb(k,n,q,W)|0;k=((Eu(n)|0)&1073741823)+o|0;u=c[v>>2]|0;t=a[u>>0]|0;t:do if(!(t<<24>>24)){n=0;s=0}else{n=0;o=t;while(1){if(!(o<<24>>24==95?1:(a[880+(o&255)>>0]&6)!=0)){s=1;break t}n=n+1|0;o=a[u+n>>0]|0;if(!(o<<24>>24)){s=0;break}}}while(0);o=t&255;u:do if((o+-48|0)>>>0>=10){do if((n|0)>1){o=a[3952+((d[208+o>>0]<<2^n^(d[208+(d[u+(n+-1)>>0]|0)>>0]|0)*3|0)%127|0)>>0]|0;if(!(o<<24>>24))break;o=o&255;while(1){q=o+-1|0;v:do if((n|0)==(d[2064+q>>0]|0)){r=1136+(e[1776+(q<<1)>>1]|0)|0;o=0;while(1){if((a[u+o>>0]&-33)<<24>>24!=(a[r+o>>0]|0))break v;o=o+1|0;if((o|0)>=(n|0)){U=326;break u}}}while(0);o=a[4224+q>>0]|0;if(!(o<<24>>24))break;else o=o&255}}while(0);if(!((n|0)==0|s)){q=t;t=0}else U=326}else U=326;while(0);if((U|0)==326){U=0;a[m+k>>0]=34;k=k+1|0;q=a[u>>0]|0;t=1}n=k+1|0;o=m+k|0;if(q<<24>>24){s=0;r=u;do{a[o>>0]=q;if((a[r>>0]|0)==34){a[m+n>>0]=34;k=k+2|0}else k=n;s=s+1|0;r=u+s|0;q=a[r>>0]|0;n=k+1|0;o=m+k|0}while(q<<24>>24!=0)}if(t){a[o>>0]=34;k=n}T=m+k|0;a[T>>0]=0;n=c[18080+((a[v+13>>0]|0)+-65<<2)>>2]|0;o=(Eu(n)|0)&1073741823;ew(T|0,n|0,o|0)|0;o=o+k|0;p=p+1|0;k=x-o|0;n=m+o|0;if((p|0)<(b[D>>1]|0)){v=v+16|0;q=y}else break}}c[X>>2]=z;Cb(k,n,31408,X)|0;k=ca;break m}while(0);k=ba+81|0;if(a[k>>0]|0){m=0;k=ca;break m}if(a[ba+82>>0]|0){m=0;k=ca;break m}a[k>>0]=1;if((c[ba+180>>2]|0)>0)c[ba+264>>2]=1;k=ba+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[ba+236>>2]|0;if(!k){m=0;k=ca;break m}c[k+12>>2]=7;m=0;k=ca;break m}while(0);Ra=da;return}while(0);p=ba+16|0;U=c[k>>2]|0;W=c[l>>2]|0;X=c[f+88>>2]|0;c[Y>>2]=c[(c[p>>2]|0)+(E<<4)>>2];c[Y+4>>2]=34585;c[Y+8>>2]=A;c[Y+12>>2]=U;c[Y+16>>2]=U;c[Y+20>>2]=W;c[Y+24>>2]=m;c[Y+28>>2]=X;Ak(f,39604,Y);w:do if(m|0){if(c[ba+480>>2]|0){Xd(ba,m);break}l=m;do if((c[ba+304>>2]|0)>>>0<=l>>>0){if((c[ba+308>>2]|0)>>>0<=l>>>0)break;Y=ba+300|0;c[m>>2]=c[Y>>2];c[Y>>2]=m;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Y=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);l=c[C>>2]|0;m=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(E<<4)+12>>2]>>2]|0)+1|0;n=l+108|0;o=c[n>>2]|0;if((c[l+112>>2]|0)>(o|0)){c[n>>2]=o+1;Y=c[l+104>>2]|0;a[Y+(o*20|0)>>0]=95;b[Y+(o*20|0)+2>>1]=0;c[Y+(o*20|0)+4>>2]=E;c[Y+(o*20|0)+8>>2]=1;c[Y+(o*20|0)+12>>2]=m;c[Y+(o*20|0)+16>>2]=0;a[Y+(o*20|0)+1>>0]=0}else Di(l,95,E,1,m)|0;if(c[ca+36>>2]&8|0?(Z=c[p>>2]|0,(c[(c[Z+(E<<4)+12>>2]|0)+72>>2]|0)==0):0){c[_>>2]=c[Z+(E<<4)>>2];Ak(f,39691,_)}c[$>>2]=c[k>>2];Bk(B,E,dd(ba,39733,$)|0);if(!(a[V>>0]|0)){Ra=da;return}}else k=ca;if(mi((c[F>>2]|0)+8|0,c[k>>2]|0,ca)|0){k=ba+81|0;if(a[k>>0]|0){Ra=da;return}if(a[ba+82>>0]|0){Ra=da;return}a[k>>0]=1;if((c[ba+180>>2]|0)>0)c[ba+264>>2]=1;k=ba+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[ba+236>>2]|0;if(!k){Ra=da;return}c[k+12>>2]=7;Ra=da;return}c[aa>>2]=0;ba=ba+24|0;c[ba>>2]=c[ba>>2]|1;if(c[ca+12>>2]|0){Ra=da;return}k=c[f+180>>2]|0;o=(c[((c[g>>2]|0)==0?h:g)>>2]|0)-k|0;o=(o|0)>-1?k+o|0:-1;l=a[k>>0]|0;if(l<<24>>24!=0&o>>>0>k>>>0){n=0;while(1){m=k+1|0;if((l&255)>191){k=m;while(1){l=a[k>>0]|0;if((l&-64)<<24>>24==-128)k=k+1|0;else break}}else{k=m;l=a[m>>0]|0}if(l<<24>>24!=0&k>>>0<o>>>0)n=n+1|0;else break}k=n+14|0}else k=13;c[ca+52>>2]=k;Ra=da;return}function dj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+64|0;n=s;q=s+4|0;r=c[f>>2]|0;j=c[f+228>>2]|0;do if(j|0){m=c[j+4>>2]|0;l=(b[j+42>>1]|0)+-1|0;j=(d[r+165>>0]|0)+4&255;k=q+20|0;a[k>>0]=j;c[q+4>>2]=127;c[q+8>>2]=128;c[q+24>>2]=0;if(g){_j(q,g)|0;j=a[k>>0]|0}if(!(j<<24>>24)){c[n>>2]=c[m+(l<<4)>>2];cd(f,41761,n);break}o=m+(l<<4)+4|0;j=c[o>>2]|0;if(j|0)ni(r,j);j=q;k=j+52|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));a[q>>0]=-83;while(1)if(!(a[880+(d[h>>0]|0)>>0]&1))break;else h=h+1|0;j=i-h|0;a:do if((j|0)<=0)if(!h)j=0;else{k=j;p=15}else while(1){k=j+-1|0;if(!(a[880+(d[h+k>>0]|0)>>0]&1)){k=j;p=15;break a}if((j|0)>1)j=k;else{p=15;break}}while(0);b:do if((p|0)==15){m=Sv(k|0,((k|0)<0)<<31>>31|0,1,0)|0;n=L()|0;c:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))p=25;else{j=0;break b}else{do if(!(n>>>0>0|((n|0)==0?m>>>0>(e[r+276>>1]|0)>>>0:0))){l=r+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];i=r+284|0;c[i>>2]=(c[i>>2]|0)+1;break c}l=r+296|0;j=c[l>>2]|0;if(!j){j=r+292|0;break}else{c[l>>2]=c[j>>2];i=r+284|0;c[i>>2]=(c[i>>2]|0)+1;break c}}else j=r+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;p=25}while(0);if((p|0)==25)j=_d(r,m,n)|0;if(!j)j=0;else{ew(j|0,h|0,k|0)|0;a[j+k>>0]=0}}while(0);p=q+8|0;c[p>>2]=j;c[q+12>>2]=g;c[q+4>>2]=4096;j=dk(r,q,1,0)|0;c[o>>2]=j;j=c[p>>2]|0;do if(j|0){if(r|0){if(c[r+480>>2]|0){Xd(r,j);break}p=j;if((c[r+304>>2]|0)>>>0<=p>>>0?(c[r+308>>2]|0)>>>0>p>>>0:0){p=r+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0)}while(0);if((d[f+200>>0]|0)>1?(p=q+8|0,c[p>>2]=0,c[p+4>>2]=0,c[p+8>>2]=0,c[p+12>>2]=0,c[p+16>>2]=0,c[q>>2]=f,c[q+4>>2]=124,g|0):0)_j(q,g)|0;if(!g){Ra=s;return}ni(r,g);Ra=s;return}function ej(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;m=n;if(((g|0)==44?(c[f+36>>2]|0)==0:0)?(d[f+200>>0]|0)<=1:0){j=Xk(c[f>>2]|0,h,i)|0;if(!j){m=0;Ra=n;return m|0}else k=f}else l=4;a:do if((l|0)==4){j=c[f>>2]|0;b:do if(c[j+272>>2]|0){if(!(a[j+81>>0]|0))l=14}else{do if((e[j+276>>1]|0)>=52){k=j+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=15;break b}k=j+296|0;l=c[k>>2]|0;if(!l){k=j+292|0;break}else{c[k>>2]=c[l>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=15;break b}}else k=j+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;l=14}while(0);if((l|0)==14){j=_d(j,52,0)|0;l=15}do if((l|0)==15){if(!j){j=c[f>>2]|0;break}k=j;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[j>>0]=g;b[j+34>>1]=-1;if(!i)k=0;else{c[j+16>>2]=i;k=c[i+4>>2]&2097412;c[j+4>>2]=k}if(h|0){c[j+12>>2]=h;c[j+4>>2]=k|c[h+4>>2]&2097412}Ym(j);k=f;break a}while(0);if(h|0)ni(j,h);if(!i){m=0;Ra=n;return m|0}ni(j,i);m=0;Ra=n;return m|0}while(0);k=c[(c[k>>2]|0)+120>>2]|0;if((k|0)>=(c[j+24>>2]|0)){m=j;Ra=n;return m|0}c[m>>2]=k;cd(f,41637,m);m=j;Ra=n;return m|0}function fj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=h;l=c[f>>2]|0;m=i+53|0;a:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))p=11;else{q=0;return q|0}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0<m>>>0:0))){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=k;break a}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=k;break a}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;p=11}while(0);if((p|0)==11)o=_d(l,m,0)|0;if(!o){q=o;return q|0}a[o>>0]=g;a[o+1>>0]=0;k=o+4|0;c[k>>2]=8388608;b[o+34>>1]=-1;c[o+16>>2]=0;c[o+12>>2]=0;c[o+20>>2]=0;c[o+40>>2]=0;c[o+44>>2]=0;a[o+38>>0]=0;c[o+28>>2]=0;b[o+32>>1]=0;j=o+52|0;g=o+8|0;c[g>>2]=j;ew(j|0,h|0,i|0)|0;a[j+i>>0]=0;g=c[g>>2]|0;j=a[g>>0]|0;if(((a[880+(j&255)>>0]|0)<0?(c[k>>2]=(j<<24>>24==34?67108928:67108864)|c[k>>2],g|0):0)?(n=a[g>>0]|0,(a[880+(n&255)>>0]|0)<0):0){m=n<<24>>24==91?93:n;l=0;j=1;while(1){k=a[g+j>>0]|0;if(k<<24>>24==m<<24>>24){j=j+1|0;k=g+l|0;if((a[g+j>>0]|0)!=m<<24>>24)break;a[k>>0]=m}else a[g+l>>0]=k;l=l+1|0;j=j+1|0}a[k>>0]=0}c[o+24>>2]=1;if((d[f+200>>0]|0)<=1){q=o;return q|0}l=c[f>>2]|0;b:do if(!l){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;p=47;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){n=c[14978]|0;h=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=n>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){q=o;return q|0}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){q=o;return q|0}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=47;break b}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=47;break b}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(l,16,0)|0;p=47}while(0);if((p|0)==47)if(!j){q=o;return q|0}c[j>>2]=o;c[j+4>>2]=q;c[j+8>>2]=i;q=f+272|0;c[j+12>>2]=c[q>>2];c[q>>2]=j;q=o;return q|0}function gj(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;w=B+8|0;k=B;y=c[e+228>>2]|0;do if(!y)A=60;else{z=y+36|0;j=c[z>>2]|0;if(j&4|0){c[k>>2]=c[y>>2];cd(e,41817,k);A=60;break}x=j|4;c[z>>2]=x;if(f){v=c[f>>2]|0;if((v|0)>0){t=y+42|0;u=y+4|0;l=0;m=-1;s=0;while(1){j=c[f+4+(s*20|0)>>2]|0;a:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break a;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);k=a[j>>0]|0;switch(k<<24>>24){case 110:{a[j>>0]=59;A=20;break}case 106:{k=c[j+12>>2]|0;if((a[k>>0]|0)==110){a[k>>0]=59;k=a[j>>0]|0;A=19}else j=m;break}default:A=19}if((A|0)==19){A=0;if(k<<24>>24==59)A=20;else j=m}b:do if((A|0)==20){A=0;o=c[j+8>>2]|0;j=b[t>>1]|0;if(j<<16>>16>0){r=c[u>>2]|0;n=a[o>>0]|0;q=a[208+(n&255)>>0]|0;p=j<<16>>16;c:do if(!(n<<24>>24)){j=0;while(1){if(q<<24>>24==(a[208+(d[c[r+(j<<4)>>2]>>0]|0)>>0]|0))break c;j=j+1|0;if((j|0)>=(p|0))break b}}else{j=0;while(1){k=c[r+(j<<4)>>2]|0;if(q<<24>>24==(a[208+(d[k>>0]|0)>>0]|0)){m=o;do{m=m+1|0;k=k+1|0;C=a[m>>0]|0;n=(d[208+(C&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(n|0)!=0));if(!n)break c}j=j+1|0;if((j|0)>=(p|0))break b}}while(0);l=r+(j<<4)+15|0;a[l>>0]=a[l>>0]|1;l=r+(j<<4)|0}else j=0}while(0);s=s+1|0;if((s|0)==(v|0))break;else m=j}m=(v|0)==1;n=j;A=34}}else{n=(b[y+42>>1]|0)+-1|0;l=c[y+4>>2]|0;m=l+(n<<4)+15|0;a[m>>0]=a[m>>0]|1;m=1;l=l+(n<<4)|0;A=34}if((A|0)==34?m&(l|0)!=0:0){if(!(a[l+15>>0]&4))k=59952;else{k=c[l>>2]|0;k=k+(Eu(k)|0)+1|0}C=a[k>>0]|0;j=(d[208+(C&255)>>0]|0)+-105|0;if(!(C<<24>>24==0|(j|0)!=0)){l=31453;do{k=k+1|0;l=l+1|0;C=a[k>>0]|0;j=(d[208+(C&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(j|0)!=0))}if((i|0)!=1&(j|0)==0){m=(f|0)!=0;d:do if(m&(d[e+200>>0]|0)>1){j=c[f+4>>2]|0;e:do if(!j)l=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096)){l=j;break e}if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){l=0;break}}while(0);j=y+40|0;k=c[e+272>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break d}c[k>>2]=j}}else j=y+40|0;while(0);b[j>>1]=n;a[y+48>>0]=g;c[z>>2]=x|h<<3;if(m){a[e+198>>0]=a[f+16>>0]|0;break}else{Ra=B;return}}}if(h|0){cd(e,41858,w);A=60;break}hj(e,0,0,0,f,g,0,0,i,0,2);Ra=B;return}while(0);if((A|0)==60?(f|0)==0:0){Ra=B;return}ri(c[e>>2]|0,f);Ra=B;return}function hj(f,g,h,i,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;ya=Ra;Ra=Ra+416|0;ta=ya+320|0;sa=ya+296|0;ra=ya+280|0;oa=ya+272|0;na=ya+256|0;ma=ya+248|0;ga=ya+240|0;fa=ya+232|0;ba=ya+224|0;aa=ya+216|0;Y=ya+208|0;U=ya+200|0;T=ya+192|0;S=ya+184|0;Q=ya+176|0;P=ya+168|0;M=ya+160|0;N=ya+152|0;K=ya+144|0;J=ya+136|0;I=ya+128|0;H=ya+120|0;G=ya+112|0;D=ya+104|0;A=ya+96|0;y=ya+88|0;x=ya+80|0;pa=ya+384|0;_=ya;$=ya+352|0;B=ya+328|0;xa=c[f>>2]|0;la=xa+81|0;a:do if(((a[la>>0]|0)==0?(ca=f+36|0,(c[ca>>2]|0)<=0):0)?(ua=f+200|0,da=p<<24>>24==2,da|(a[ua>>0]|0)!=1):0){va=xa+165|0;b:do if(!(a[va>>0]|0)){s=f+4|0;t=xa+24|0;u=(c[t>>2]&1|0)==0;v=xa+16|0;qa=c[(c[v>>2]|0)+12>>2]|0;a[xa+78>>0]=a[qa+77>>0]|0;if(!((b[qa+78>>1]&1)==0?(q=eh(xa,0,s,0)|0,(q|0)!=0):0))wa=7;c:do if((wa|0)==7){q=c[xa+20>>2]|0;if((q|0)>1)do{r=q;q=q+-1|0;if((b[(c[(c[v>>2]|0)+(q<<4)+12>>2]|0)+78>>1]&1)==0?(w=eh(xa,q,s,0)|0,w|0):0){q=w;break c}}while((r|0)>2);if(u)c[t>>2]=c[t>>2]&-2;if(!(a[xa+89>>0]|0))break b;c[t>>2]=c[t>>2]|16;break b}while(0);c[f+12>>2]=q;c[ca>>2]=(c[ca>>2]|0)+1;r=m;q=0;wa=468;break a}while(0);qa=(i|0)!=0;d:do if(qa){q=c[f>>2]|0;z=h+4|0;if(c[z>>2]|0){if(a[q+165>>0]|0){cd(f,39404,x);r=m;q=0;wa=468;break a}q=wk(q,g)|0;if((q|0)<0){c[y>>2]=g;cd(f,39421,y);r=m;q=0;wa=468;break a}else{u=q;g=h}}else u=d[q+164>>0]|0;y=i+8|0;e:do if(!(a[va>>0]|0)){r=c[y>>2]|0;if(!r)q=i+12|0;else{s=c[(c[f>>2]|0)+16>>2]|0;q=0;while(1)if((c[s+(q<<4)+12>>2]|0)==(r|0))break;else q=q+1|0;q=s+(q<<4)|0}x=bd(f,0,c[i+16>>2]|0,c[q>>2]|0)|0;q=c[f>>2]|0;r=i+24|0;s=c[r>>2]|0;do if(s|0){if(q|0?c[q+480>>2]|0:0){Vi(q,s);break}ja=s+32|0;ka=(c[ja>>2]|0)+-1|0;c[ja>>2]=ka;if(!ka)Vi(q,s)}while(0);c[r>>2]=x;if(x){ka=x+32|0;c[ka>>2]=(c[ka>>2]|0)+1;f:do if(a[i+45>>0]&2){v=c[i+72>>2]|0;q=c[x+8>>2]|0;g:do if(q|0){w=d[208+(d[v>>0]|0)>>0]|0;while(1){s=c[q>>2]|0;ka=a[s>>0]|0;r=(d[208+(ka&255)>>0]|0)-w|0;if(!(ka<<24>>24==0|(r|0)!=0)){t=v;do{s=s+1|0;t=t+1|0;ka=a[s>>0]|0;r=(d[208+(ka&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(r|0)!=0))}if(!r)break;q=c[q+20>>2]|0;if(!q)break g}c[i+76>>2]=q;break f}while(0);c[A>>2]=v;c[A+4>>2]=0;cd(f,41107,A);a[f+17>>0]=1;break e}while(0);if(!(c[z>>2]|0))u=(c[x+72>>2]|0)==(c[(c[xa+16>>2]|0)+28>>2]|0)?1:u}}while(0);t=c[f>>2]|0;c[B>>2]=f;t=c[t+16>>2]|0;c[B+12>>2]=c[t+(u<<4)>>2];c[B+4>>2]=c[t+(u<<4)+12>>2];c[B+16>>2]=41914;c[B+20>>2]=g;t=(u|0)==1;c[B+8>>2]=t&1;al(B,i)|0;r=c[y>>2]|0;if(!r)q=i+12|0;else{s=c[(c[f>>2]|0)+16>>2]|0;q=0;while(1)if((c[s+(q<<4)+12>>2]|0)==(r|0))break;else q=q+1|0;q=s+(q<<4)|0}r=bd(f,0,c[i+16>>2]|0,c[q>>2]|0)|0;if(!r){r=m;q=0;wa=468;break a}if(t?(c[(c[xa+16>>2]|0)+28>>2]|0)!=(c[r+72>>2]|0):0){c[D>>2]=c[r>>2];cd(f,41920,D);r=m;q=0;wa=468;break a}if((c[r+36>>2]&32|0)!=0?(C=c[r+8>>2]|0,(C|0)!=0):0){q=C;while(1){ka=q+55|0;if(((d[ka>>0]|d[ka+1>>0]<<8)&3)==2){ka=r;Z=q;ja=u;ha=g;break d}q=c[q+20>>2]|0;if(!q){ka=r;Z=0;ja=u;ha=g;break}}}else{ka=r;Z=0;ja=u;ha=g}}else{q=c[f+228>>2]|0;if(!q){r=m;q=0;wa=468;break a}r=c[q+72>>2]|0;if(!r){ka=q;Z=0;ja=-1e6;ha=0}else{s=c[xa+16>>2]|0;t=0;while(1)if((c[s+(t<<4)+12>>2]|0)==(r|0)){ka=q;Z=0;ja=t;ha=0;break}else t=t+1|0}}while(0);ia=xa+16|0;A=c[ia>>2]|0;t=A+(ja<<4)|0;s=c[ka>>2]|0;do if(s|0){q=a[s>>0]|0;h:do if(!(q<<24>>24)){q=39441;wa=69}else{ea=q&255;q=208+ea|0;do if((ea|32|0)==115){q=a[s+1>>0]|0;if(!(q<<24>>24)){q=39442;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==113){q=a[s+2>>0]|0;if(!(q<<24>>24)){q=39443;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==108){q=a[s+3>>0]|0;if(!(q<<24>>24)){q=39444;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==105){q=a[s+4>>0]|0;if(!(q<<24>>24)){q=39445;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==116){q=a[s+5>>0]|0;if(!(q<<24>>24)){q=39446;wa=69;break h}q=q&255;if((q|32|0)!=101){r=101;q=208+q|0;break}q=a[s+6>>0]|0;if(!(q<<24>>24)){q=39447;wa=69;break h}if(q<<24>>24==95)break h;else{r=95;q=208+(q&255)|0}}else r=116}else r=105}else r=108}else r=113}else r=115;while(0);F=d[q>>0]|0;E=r;wa=73}while(0);if((wa|0)==69){F=0;E=a[208+(d[q>>0]|0)>>0]|0;wa=73}if((wa|0)==73?(F|0)!=(E&255|0):0)break;if(qa&(a[va>>0]|0)==0){c[G>>2]=s;cd(f,41970,G);r=m;q=0;wa=468;break a}}while(0);if(c[ka+12>>2]|0){cd(f,41998,H);r=m;q=0;wa=468;break}if(c[ka+56>>2]|0){cd(f,42023,I);r=m;q=0;wa=468;break}if(!ha){q=c[ka+8>>2]|0;if(!q)q=1;else{r=1;do{r=r+1|0;q=c[q+20>>2]|0}while((q|0)!=0);q=r}c[M>>2]=s;c[M+4>>2]=q;q=dd(xa,42115,M)|0;if(!q){r=m;q=0;wa=468;break}if(a[ua>>0]|0){r=q+7|0;a[r>>0]=(a[r>>0]|0)+1<<24>>24;r=a[ua>>0]|0;if((r&255)<=1)wa=124}else{r=0;wa=124}}else{y=qj(xa,ha)|0;if(!y){r=m;q=0;wa=468;break}if(vk(f,y)|0){r=m;q=y;wa=468;break}r=a[ua>>0]|0;if((r&255)<=1){if((a[va>>0]|0)==0?Sd(xa,y,0)|0:0){c[J>>2]=y;cd(f,42057,J);r=m;q=y;wa=468;break}if(!(hi(xa,y,c[t>>2]|0)|0)){q=y;wa=124}else{if(!o){c[K>>2]=y;cd(f,42091,K);r=m;q=y;wa=468;break}t=c[f+116>>2]|0;t=(t|0)==0?f:t;q=t+84|0;r=c[q>>2]|0;s=1<<ja;if(r&s|0){r=m;q=y;wa=468;break}c[q>>2]=r|s;if((ja|0)!=1){r=m;q=y;wa=468;break}x=c[t>>2]|0;q=x+16|0;if(c[(c[q>>2]|0)+20>>2]|0){r=m;q=y;wa=468;break}if(a[t+199>>0]|0){r=m;q=y;wa=468;break}r=Pe(c[x>>2]|0,0,x,pa,0,542)|0;if(r|0){cd(t,32157,N);c[t+12>>2]=r;r=m;q=y;wa=468;break}k=c[pa>>2]|0;c[(c[q>>2]|0)+20>>2]=k;q=c[x+92>>2]|0;t=c[k+4>>2]|0;c[t+4>>2]=c[k>>2];do if(!(b[t+22>>1]&2)){u=t+32|0;v=t+36|0;w=(c[u>>2]|0)-(c[v>>2]|0)|0;do if((q+-512|0)>>>0<65025){if(q+-1&q|0)break;c[u>>2]=q;s=t+80|0;q=c[s>>2]|0;if(!q)break;r=q+-4|0;c[s>>2]=r;q=r;do if((c[14816]|0)>>>0<=q>>>0)if((c[14817]|0)>>>0>q>>>0){c[14979]=(c[14979]|0)+-1;c[r>>2]=c[14819];c[14819]=r;k=(c[14820]|0)+1|0;c[14820]=k;c[14821]=(k|0)<(c[14815]|0)&1;break}else{q=Wa[c[29352>>2]&127](r)|0;wa=105;break}else{q=Wa[c[29352>>2]&127](r)|0;wa=105}while(0);do if((wa|0)==105){c[14980]=(c[14980]|0)-q;if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);c[s>>2]=0}while(0);wa=Se(c[t>>2]|0,u,w)|0;c[v>>2]=(c[u>>2]|0)-(w&65535);if((wa|0)!=7)break;q=x+81|0;do if(!(a[q>>0]|0)){if(a[x+82>>0]|0)break;a[q>>0]=1;if((c[x+180>>2]|0)>0)c[x+264>>2]=1;q=x+272|0;c[q>>2]=(c[q>>2]|0)+1;q=c[x+236>>2]|0;if(!q)break;c[q+12>>2]=7}while(0);r=m;q=y;wa=468;break a}while(0);r=m;q=y;wa=468;break}}else q=y}do if((wa|0)==124){w=c[t>>2]|0;v=(ja|0)==1;s=v?34855:34585;t=c[f>>2]|0;u=a[t+165>>0]|0;if((u|r)<<24>>24==0?(O=c[t+312>>2]|0,(O|0)!=0):0){r=$a[O&127](c[t+316>>2]|0,18,s,0,w,c[f+240>>2]|0)|0;if((r|0)==1){cd(f,39216,P);c[f+12>>2]=23;r=m;wa=468;break a}if((r|2|0)!=2){cd(f,39231,Q);c[f+12>>2]=1;r=m;wa=468;break a}if(r|0){r=m;wa=468;break a}t=c[f>>2]|0;u=a[t+165>>0]|0}s=v?3:1;r=c[ka>>2]|0;if((u<<24>>24==0?(a[ua>>0]|0)==0:0)?(R=c[t+312>>2]|0,(R|0)!=0):0){r=$a[R&127](c[t+316>>2]|0,s,q,r,w,c[f+240>>2]|0)|0;if((r|0)==1){cd(f,39216,S);c[f+12>>2]=23;r=m;wa=468;break a}if((r|2|0)==2)if(!r)break;else{r=m;wa=468;break a}else{cd(f,39231,T);c[f+12>>2]=1;r=m;wa=468;break a}}}while(0);if(j){if((c[j>>2]|0)>(c[(c[f>>2]|0)+116>>2]|0)){c[U>>2]=41914;cd(f,44753,U)}if(!(c[ca>>2]|0))T=j;else{r=m;wa=468;break}}else{ea=c[ka+4>>2]|0;j=(b[ka+42>>1]|0)+-1|0;X=ea+(j<<4)+15|0;a[X>>0]=a[X>>0]|8;j=c[ea+(j<<4)>>2]|0;c[pa>>2]=j;if(!j)j=0;else j=(Eu(j)|0)&1073741823;c[pa+4>>2]=j;r=oj(xa,59,pa,0)|0;r=nj(c[f>>2]|0,0,r)|0;if(!r){r=m;j=0;wa=468;break}if((n|0)<0)j=r;else{a[r+4+(((c[r>>2]|0)+-1|0)*20|0)+12>>0]=n;j=r}T=r}u=c[j>>2]|0;if((u|0)>0){t=0;r=0;do{s=c[T+4+(t*20|0)>>2]|0;if((a[s>>0]|0)==106){s=c[s+8>>2]|0;if(!s)s=0;else s=(Eu(s)|0)&1073741823;r=r+1+s|0}t=t+1|0}while((t|0)!=(u|0));if(!q)t=0;else wa=160}else{r=0;wa=160}if((wa|0)==160)t=(Eu(q)|0)&1073741823;V=(Z|0)!=0;if(V)s=e[Z+50>>1]|0;else s=1;y=s+u|0;v=y&65535;y=y<<16;w=y>>16;x=(y>>14)+7&-8;y=y>>15;g=y+2|0;h=x+72+(w+7+y+g&-8)|0;z=t+1|0;u=z+r+h|0;t=((u|0)<0)<<31>>31;ea=(xa|0)==0;i:do if(ea){X=Sv(u|0,t|0,-1,-1)|0;W=L()|0;if(!(W>>>0>0|(W|0)==0&X>>>0>2147483390)){if(!(c[7324]|0)){r=Wa[c[29340>>2]&127](u)|0;wa=187;break}r=Wa[c[29356>>2]&127](u)|0;if((c[14985]|0)>>>0<u>>>0)c[14985]=u;t=59064;s=c[t>>2]|0;t=c[t+4>>2]|0;if((t|0)>0|(t|0)==0&s>>>0>0){X=c[14978]|0;W=Tv(s|0,t|0,r|0,((r|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&W>>>0<=X>>>0)&1}r=Wa[c[29340>>2]&127](r)|0;if(r){s=Wa[c[29352>>2]&127](r)|0;s=(c[14978]|0)+s|0;c[14978]=s;if(s>>>0>(c[14982]|0)>>>0)c[14982]=s;s=(c[14981]|0)+1|0;c[14981]=s;if(s>>>0<=(c[14987]|0)>>>0){wa=188;break}c[14987]=s;wa=188}else{s=0;t=0;r=0}}else{s=0;t=0;r=0}}else{if(c[xa+272>>2]|0){if(a[la>>0]|0){r=m;j=T;wa=468;break a}}else{do if(!(0<t>>>0|(0==(t|0)?(e[xa+276>>1]|0)>>>0<u>>>0:0))){s=xa+300|0;r=c[s>>2]|0;if(r|0){c[s>>2]=c[r>>2];wa=xa+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=187;break i}s=xa+296|0;r=c[s>>2]|0;if(!r){r=xa+292|0;break}else{c[s>>2]=c[r>>2];wa=xa+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=187;break i}}else r=xa+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1}r=_d(xa,u,t)|0;wa=187}while(0);if((wa|0)==187)if(!r){s=0;t=0;r=0}else wa=188;if((wa|0)==188){gw(r|0,0,u|0)|0;s=r+72|0;c[r+32>>2]=s;s=s+x|0;c[r+8>>2]=s;s=s+g|0;c[r+4>>2]=s;c[r+28>>2]=s+y;b[r+52>>1]=v;b[r+50>>1]=w+65535;s=r;t=r+h|0}j:do if(!(a[la>>0]|0)){c[s>>2]=t;U=t;x=U+z|0;ew(U|0,q|0,z|0)|0;U=s+12|0;c[U>>2]=ka;W=s+54|0;a[W>>0]=k;X=s+55|0;p=p&3;n=((k|0)!=0&1)<<3&65535|p|(d[X>>0]|d[X+1>>0]<<8)&-12;a[X>>0]=n;a[X+1>>0]=n>>8;c[s+24>>2]=c[(c[ia>>2]|0)+(ja<<4)+12>>2];n=s+50|0;b[n>>1]=c[j>>2];if(m|0){c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;c[$+16>>2]=0;c[$+20>>2]=0;c[$+24>>2]=0;c[$+28>>2]=0;h=_;z=h+80|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));if(ka|0){c[_>>2]=1;c[_+16>>2]=c[ka>>2];c[_+24>>2]=ka;c[_+48>>2]=-1}c[$>>2]=f;c[$+4>>2]=_;j=$+24|0;b[j>>1]=2;c[pa>>2]=f;c[pa+4>>2]=125;c[pa+8>>2]=126;c[pa+12>>2]=0;c[pa+24>>2]=$;t=m+24|0;u=f+208|0;S=(c[u>>2]|0)+(c[t>>2]|0)|0;c[u>>2]=S;u=c[(c[f>>2]|0)+120>>2]|0;if((u|0)<(S|0)){c[Y>>2]=u;cd(f,41637,Y)}else{_j(pa,m)|0;Y=(c[pa>>2]|0)+208|0;c[Y>>2]=(c[Y>>2]|0)-(c[t>>2]|0);Y=m+4|0;c[Y>>2]=c[Y>>2]|b[j>>1]&-32752&65535}c[s+36>>2]=m}g=(d[(c[A+(ja<<4)+12>>2]|0)+76>>0]|0)>3;if((d[ua>>0]|0)>1){c[s+40>>2]=T;j=0}else j=T;k:do if(!(b[n>>1]|0)){u=0;w=0}else{A=(ka|0)==0;B=$+4|0;C=$+24|0;D=_+16|0;E=_+24|0;F=_+48|0;G=pa+4|0;H=pa+8|0;I=pa+12|0;o=pa+24|0;J=f+228|0;K=ka+40|0;M=s+4|0;N=ka+4|0;O=s+40|0;P=s+32|0;Q=s+28|0;R=f;S=f+208|0;y=T+4|0;u=0;while(1){w=c[y>>2]|0;l:do switch(a[w>>0]|0){case 110:{a[w>>0]=59;break}case 106:{t=c[w+12>>2]|0;if((a[t>>0]|0)!=110)break l;a[t>>0]=59;break}default:{}}while(0);c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;c[$+16>>2]=0;c[$+20>>2]=0;c[$+24>>2]=0;c[$+28>>2]=0;h=_;z=h+80|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));if(!A){c[_>>2]=1;c[D>>2]=c[ka>>2];c[E>>2]=ka;c[F>>2]=-1}c[$>>2]=f;c[B>>2]=_;b[C>>1]=32;do if(w|0){b[C>>1]=32;c[pa>>2]=R;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[o>>2]=$;t=w+24|0;m=(c[S>>2]|0)+(c[t>>2]|0)|0;c[S>>2]=m;v=c[(c[f>>2]|0)+120>>2]|0;if((v|0)<(m|0)){c[aa>>2]=v;cd(f,41637,aa);break}else{_j(pa,w)|0;m=(c[pa>>2]|0)+208|0;c[m>>2]=(c[m>>2]|0)-(c[t>>2]|0);m=w+4|0;c[m>>2]=c[m>>2]|b[C>>1]&-32752&65535;break}}while(0);if(c[ca>>2]|0){u=0;v=s;t=r;break j}t=c[y>>2]|0;m:do if(!t)t=0;else while(1){v=c[t+4>>2]|0;if(!(v&4096))break m;if(!(v&262144))t=t+12|0;else t=(c[t+20>>2]|0)+4|0;t=c[t>>2]|0;if(!t){t=0;break}}while(0);if((a[t>>0]|0)==-94){m=b[t+32>>1]|0;t=m<<16>>16;do if(m<<16>>16<0)t=b[K>>1]|0;else{if(a[(c[N>>2]|0)+(t<<4)+12>>0]|0)break;m=(d[X>>0]|d[X+1>>0]<<8)&-9;a[X>>0]=m;a[X+1>>0]=m>>8}while(0);b[(c[M>>2]|0)+(u<<1)>>1]=t}else{if((ka|0)==(c[J>>2]|0))break;if(!(c[O>>2]|0)){c[O>>2]=j;j=0}b[(c[M>>2]|0)+(u<<1)>>1]=-2;t=(d[X>>0]|d[X+1>>0]<<8)&-9;a[X>>0]=t;a[X+1>>0]=t>>8;t=-2}v=c[y>>2]|0;do if((a[v>>0]|0)==106){v=c[v+8>>2]|0;if(!v)t=0;else t=(Eu(v)|0)&1073741823;m=t+1|0;ew(x|0,v|0,m|0)|0;t=x;x=x+m|0}else{if((t|0)<=-1){t=0;break}t=c[(c[N>>2]|0)+(t<<4)+8>>2]|0}while(0);w=(t|0)==0?34049:t;n:do if(!(a[va>>0]|0)){t=c[f>>2]|0;v=a[t+78>>0]|0;m=a[t+165>>0]|0;t=Zi(t,v,w,m&255)|0;do if(!(m<<24>>24)){if(!t){t=_i(f,v,0,w)|0;break}if(c[t+12>>2]|0)break n;t=_i(f,v,t,w)|0}while(0);if(!t){u=0;v=s;t=r;break j}}while(0);c[(c[P>>2]|0)+(u<<2)>>2]=w;a[(c[Q>>2]|0)+u>>0]=g?a[y+12>>0]|0:0;u=u+1|0;w=b[n>>1]|0;if(u>>>0<(w&65535)>>>0)y=y+20|0;else break k}cd(f,42138,ba);u=0;wa=432;break j}while(0);o:do if(V){B=Z+50|0;v=b[B>>1]|0;if(!(v<<16>>16))break;C=Z+4|0;D=s+4|0;E=Z+32|0;F=s+32|0;h=Z+28|0;z=s+28|0;A=s+52|0;t=0;while(1){y=b[(c[C>>2]|0)+(t<<1)>>1]|0;g=c[D>>2]|0;p:do if(!(w<<16>>16))wa=252;else{x=g;w=w&65535;while(1){if((b[x>>1]|0)==y<<16>>16)break;if((w|0)>1){x=x+2|0;w=w+-1|0}else{wa=252;break p}}b[A>>1]=(b[A>>1]|0)+-1<<16>>16}while(0);if((wa|0)==252){wa=0;b[g+(u<<1)>>1]=y;c[(c[F>>2]|0)+(u<<2)>>2]=c[(c[E>>2]|0)+(t<<2)>>2];a[(c[z>>2]|0)+u>>0]=a[(c[h>>2]|0)+t>>0]|0;u=u+1|0;v=b[B>>1]|0}t=t+1|0;if(t>>>0>=(v&65535)>>>0)break o;w=b[n>>1]|0}}else{b[(c[s+4>>2]|0)+(u<<1)>>1]=-1;c[(c[s+32>>2]|0)+(u<<2)>>2]=34049}while(0);v=c[s+8>>2]|0;u=b[n>>1]|0;u=(u&65535)<5?u:5;t=b[(c[U>>2]|0)+44>>1]|0;b[v>>1]=t;if(c[s+36>>2]|0){t=(t&65535)+65526&65535;b[v>>1]=t}if(t<<16>>16<33)b[v>>1]=33;ew(v+2|0,31120,u<<1&65535|0)|0;ca=b[n>>1]|0;t=ca&65535;if((u&65535)<(ca&65535)){t=u&65535;do{t=t+1|0;b[v+(t<<1)>>1]=23;u=b[n>>1]|0}while(t>>>0<(u&65535)>>>0);t=u&65535}if(a[W>>0]|0)b[v+(t<<1)>>1]=0;B=f+228|0;if(!(c[B>>2]|0))xk(s);x=b[s+52>>1]|0;A=x<<16>>16==0;if(A){u=-1;t=-1}else{u=c[s+4>>2]|0;t=x&65535;v=0;w=0;do{ca=t;t=t+-1|0;$=b[u+(t<<1)>>1]|0;aa=($&65535)<63;$=cw(1,0,$<<16>>16|0)|0;ba=L()|0;v=(aa?$:0)|v;w=(aa?ba:0)|w}while((ca|0)>1);u=~v;t=~w}ca=s+64|0;c[ca>>2]=u;c[ca+4>>2]=t;q:do if(qa){h=x&65535;t=ka+42|0;if((h|0)<(b[t>>1]|0))break;z=d[X>>0]|d[X+1>>0]<<8;ca=z|32;a[X>>0]=ca;a[X+1>>0]=ca>>8;t=b[t>>1]|0;if(t<<16>>16<=0)break;u=b[ka+40>>1]|0;y=u<<16>>16;g=s+4|0;r:do if(A){if(!((y+1|0)<(t<<16>>16|0)|u<<16>>16==0^1))break q}else{v=t<<16>>16;u=0;while(1){if((u|0)!=(y|0)){w=u&65535;x=c[g>>2]|0;t=0;while(1){if((b[x+(t<<1)>>1]|0)==w<<16>>16)break;t=t+1|0;if(t>>>0>=h>>>0)break r}if((t&65535)<<16>>16<=-1)break r}u=u+1|0;if((u|0)>=(v|0))break q}}while(0);ca=z&-33;a[X>>0]=ca;a[X+1>>0]=ca>>8}while(0);s:do if((ka|0)==(c[B>>2]|0)){t=c[ka+8>>2]|0;if(!t){v=s;E=r;t=r;break}C=f+232|0;t:do if(da){B=t;t=r;while(1){u=b[B+50>>1]|0;do if(u<<16>>16==(b[s+50>>1]|0)){A=u&65535;u:do if(!(u<<16>>16))u=0;else{y=c[B+4>>2]|0;g=c[s+4>>2]|0;h=B+32|0;z=s+32|0;u=0;do{if((b[y+(u<<1)>>1]|0)!=(b[g+(u<<1)>>1]|0))break u;w=c[(c[h>>2]|0)+(u<<2)>>2]|0;x=c[(c[z>>2]|0)+(u<<2)>>2]|0;ga=a[w>>0]|0;v=(d[208+(ga&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(ga<<24>>24==0|(v|0)!=0))do{w=w+1|0;x=x+1|0;ga=a[w>>0]|0;v=(d[208+(ga&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(ga<<24>>24==0|(v|0)!=0));if(v|0)break u;u=u+1|0}while(u>>>0<A>>>0)}while(0);if((u|0)!=(A|0)){u=0;break}w=B+54|0;u=a[w>>0]|0;x=s+54|0;v=a[x>>0]|0;do if(u<<24>>24!=v<<24>>24){if(!(u<<24>>24==11|v<<24>>24==11)){c[fa>>2]=0;cd(f,42199,fa);u=a[w>>0]|0}if(u<<24>>24!=11)break;a[w>>0]=a[x>>0]|0}while(0);ga=B+55|0;da=(d[ga>>0]|d[ga+1>>0]<<8)&-4|p;a[ga>>0]=da;a[ga+1>>0]=da>>8;if((d[ua>>0]|0)<=1){u=2;break}c[s+20>>2]=c[C>>2];c[C>>2]=s;s=0;u=2;r=0;t=0}else u=20;while(0);switch(u&31){case 20:case 0:break;default:break t}B=c[B+20>>2]|0;if(!B){v=s;E=t;t=r;break s}}}else{B=t;t=r;while(1){u=b[B+50>>1]|0;do if(u<<16>>16==(b[s+50>>1]|0)){A=u&65535;v:do if(!(u<<16>>16))u=0;else{y=c[B+4>>2]|0;g=c[s+4>>2]|0;h=B+32|0;z=s+32|0;u=0;do{if((b[y+(u<<1)>>1]|0)!=(b[g+(u<<1)>>1]|0))break v;w=c[(c[h>>2]|0)+(u<<2)>>2]|0;x=c[(c[z>>2]|0)+(u<<2)>>2]|0;fa=a[w>>0]|0;v=(d[208+(fa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(fa<<24>>24==0|(v|0)!=0))do{w=w+1|0;x=x+1|0;fa=a[w>>0]|0;v=(d[208+(fa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(v|0)!=0));if(v|0)break v;u=u+1|0}while(u>>>0<A>>>0)}while(0);if((u|0)!=(A|0)){u=0;break}w=B+54|0;u=a[w>>0]|0;x=s+54|0;v=a[x>>0]|0;do if(u<<24>>24!=v<<24>>24){if(!(u<<24>>24==11|v<<24>>24==11)){c[ga>>2]=0;cd(f,42199,ga);u=a[w>>0]|0}if(u<<24>>24!=11)break;a[w>>0]=a[x>>0]|0}while(0);if((d[ua>>0]|0)<=1){u=2;break}c[s+20>>2]=c[C>>2];c[C>>2]=s;s=0;u=2;r=0;t=0}else u=20;while(0);switch(u&31){case 20:case 0:break;default:break t}B=c[B+20>>2]|0;if(!B){v=s;E=t;t=r;break s}}}while(0);if(!u){v=s;E=t;t=r}else{u=0;wa=432;break j}}else{v=s;E=r;t=r}while(0);do if((d[ua>>0]|0)>1)wa=420;else{if(a[va>>0]|0){w:do if(qa){s=c[xa+160>>2]|0;c[v+44>>2]=s;r=c[(c[v+12>>2]|0)+8>>2]|0;if(!r)break;while(1){if(!((r|0)==(v|0)?1:(c[r+44>>2]|0)!=(s|0)))break;r=c[r+20>>2]|0;if(!r)break w}cd(f,35103,ma);c[na>>2]=32306;c[na+4>>2]=110349;c[na+8>>2]=31517;Db(11,32001,na);c[f+12>>2]=11;u=0;s=v;r=t;wa=432;break j}while(0);if(!(mi((c[v+24>>2]|0)+24|0,c[v>>2]|0,E)|0)){wa=xa+24|0;c[wa>>2]=c[wa>>2]|1;wa=420;break}if(a[la>>0]|0){u=0;break j}if(a[xa+82>>0]|0){u=0;break j}a[la>>0]=1;if((c[xa+180>>2]|0)>0)c[xa+264>>2]=1;r=xa+272|0;c[r>>2]=(c[r>>2]|0)+1;r=c[xa+236>>2]|0;if(!r){u=0;break j}c[r+12>>2]=7;u=0;break j}if(!(qa|(c[ka+36>>2]&32|0)==0))break;D=f+44|0;C=(c[D>>2]|0)+1|0;c[D>>2]=C;D=f+8|0;r=c[D>>2]|0;w=f+116|0;if(!r){u=c[f>>2]|0;do if(!(c[w>>2]|0)){if(b[u+76>>1]&8)break;a[f+23>>0]=1}while(0);x:do if(c[u+272>>2]|0)if(!(a[u+81>>0]|0))wa=360;else{u=0;s=v;r=t;wa=432;break j}else{do if((e[u+276>>1]|0)>=224){r=u+300|0;s=c[r>>2]|0;if(s|0){c[r>>2]=c[s>>2];na=u+284|0;c[na>>2]=(c[na>>2]|0)+1;break x}r=u+296|0;s=c[r>>2]|0;if(!s){r=u+292|0;break}else{c[r>>2]=c[s>>2];na=u+284|0;c[na>>2]=(c[na>>2]|0)+1;break x}}else r=u+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1;wa=360}while(0);if((wa|0)==360)s=_d(u,224,0)|0;if(!s){u=0;s=v;r=t;wa=432;break j}h=s+104|0;z=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));c[s>>2]=u;r=u+4|0;u=c[r>>2]|0;if(u|0)c[u+4>>2]=s;c[s+8>>2]=u;c[s+4>>2]=0;c[r>>2]=s;c[s+20>>2]=381479589;c[s+12>>2]=f;c[D>>2]=s;Di(s,61,0,1,0)|0;B=s}else B=r;A=c[w>>2]|0;A=(A|0)==0?f:A;r=A+84|0;s=c[r>>2]|0;z=1<<ja;y:do if(!(s&z)){c[r>>2]=s|z;if((ja|0)!=1)break;h=c[A>>2]|0;r=h+16|0;if(c[(c[r>>2]|0)+20>>2]|0)break;if(a[A+199>>0]|0)break;s=Pe(c[h>>2]|0,0,h,pa,0,542)|0;if(s|0){cd(A,32157,oa);c[A+12>>2]=s;break}pa=c[pa>>2]|0;c[(c[r>>2]|0)+20>>2]=pa;r=c[h+92>>2]|0;w=c[pa+4>>2]|0;c[w+4>>2]=c[pa>>2];do if(!(b[w+22>>1]&2)){x=w+32|0;y=w+36|0;g=(c[x>>2]|0)-(c[y>>2]|0)|0;do if((r+-512|0)>>>0<65025){if(r+-1&r|0)break;c[x>>2]=r;u=w+80|0;r=c[u>>2]|0;if(!r)break;s=r+-4|0;c[u>>2]=s;r=s;do if((c[14816]|0)>>>0<=r>>>0)if((c[14817]|0)>>>0>r>>>0){c[14979]=(c[14979]|0)+-1;c[s>>2]=c[14819];c[14819]=s;pa=(c[14820]|0)+1|0;c[14820]=pa;c[14821]=(pa|0)<(c[14815]|0)&1;break}else{r=Wa[c[29352>>2]&127](s)|0;wa=380;break}else{r=Wa[c[29352>>2]&127](s)|0;wa=380}while(0);do if((wa|0)==380){c[14980]=(c[14980]|0)-r;if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{wa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);c[u>>2]=0}while(0);wa=Se(c[w>>2]|0,x,g)|0;c[y>>2]=(c[x>>2]|0)-(g&65535);if((wa|0)!=7)break;r=h+81|0;do if(!(a[r>>0]|0)){if(a[h+82>>0]|0)break;a[r>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;r=h+272|0;c[r>>2]=(c[r>>2]|0)+1;r=c[h+236>>2]|0;if(!r)break;c[r+12>>2]=7}while(0);break y}while(0)}while(0);g=A+80|0;c[g>>2]=c[g>>2]|z;g=A+20|0;a[g>>0]=a[g>>0]|1;g=B+108|0;r=c[g>>2]|0;y=B+112|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;h=c[B+104>>2]|0;a[h+(r*20|0)>>0]=-86;h=h+(r*20|0)+1|0;z=h+19|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(z|0))}else r=Di(B,170,0,0,0)|0;x=v+44|0;c[x>>2]=r;r=c[g>>2]|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;wa=c[B+104>>2]|0;a[wa+(r*20|0)>>0]=-117;b[wa+(r*20|0)+2>>1]=0;c[wa+(r*20|0)+4>>2]=ja;c[wa+(r*20|0)+8>>2]=C;c[wa+(r*20|0)+12>>2]=2;c[wa+(r*20|0)+16>>2]=0;a[wa+(r*20|0)+1>>0]=0}else Di(B,139,ja,C,2)|0;if(!l)s=0;else{s=c[ha>>2]|0;wa=(c[f+188>>2]|0)-s+(c[f+192>>2]|0)|0;l=wa+-1|0;wa=(a[s+l>>0]|0)==59?l:wa;c[ra>>2]=(k|0)==0?59952:42261;c[ra+4>>2]=wa;c[ra+8>>2]=s;s=dd(xa,42241,ra)|0}ra=c[v>>2]|0;wa=c[ka>>2]|0;c[sa>>2]=c[(c[ia>>2]|0)+(ja<<4)>>2];c[sa+4>>2]=34585;c[sa+8>>2]=ra;c[sa+12>>2]=wa;c[sa+16>>2]=C;c[sa+20>>2]=s;Ak(f,42269,sa);z:do if(s|0){if(c[xa+480>>2]|0){Xd(xa,s);break}r=s;do if((c[xa+304>>2]|0)>>>0<=r>>>0){if((c[xa+308>>2]|0)>>>0<=r>>>0)break;wa=xa+300|0;c[s>>2]=c[wa>>2];c[wa>>2]=s;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{wa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);do if(qa){bl(f,v,C);r=c[D>>2]|0;s=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(ja<<4)+12>>2]>>2]|0)+1|0;u=r+108|0;w=c[u>>2]|0;if((c[r+112>>2]|0)>(w|0)){c[u>>2]=w+1;wa=c[r+104>>2]|0;a[wa+(w*20|0)>>0]=95;b[wa+(w*20|0)+2>>1]=0;c[wa+(w*20|0)+4>>2]=ja;c[wa+(w*20|0)+8>>2]=1;c[wa+(w*20|0)+12>>2]=s;c[wa+(w*20|0)+16>>2]=0;a[wa+(w*20|0)+1>>0]=0}else Di(r,95,ja,1,s)|0;c[ta>>2]=c[v>>2];Bk(B,ja,dd(xa,42317,ta)|0);r=c[g>>2]|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;wa=c[B+104>>2]|0;a[wa+(r*20|0)>>0]=-98;b[wa+(r*20|0)+2>>1]=0;c[wa+(r*20|0)+4>>2]=0;c[wa+(r*20|0)+8>>2]=1;c[wa+(r*20|0)+12>>2]=0;c[wa+(r*20|0)+16>>2]=0;a[wa+(r*20|0)+1>>0]=0;break}else{Di(B,158,0,1,0)|0;break}}while(0);r=c[x>>2]|0;s=c[g>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))r=(c[B+104>>2]|0)+(((r|0)<0?s+-1|0:r)*20|0)|0;else r=59308;c[r+8>>2]=s;wa=420}while(0);do if((wa|0)==420){if((i|0)==0|(a[va>>0]|0)!=0)break;if((d[ua>>0]|0)<=1){u=0;s=v;r=t;wa=432;break j}c[f+232>>2]=E;break a}while(0);s=ka+8|0;do if((k|0)==5){r=c[s>>2]|0;if(!r)break;if((a[r+54>>0]|0)==5)break;r=r+20|0;s=c[r>>2]|0;A:do if(!s)s=0;else while(1){if((a[s+54>>0]|0)==5)break A;r=s+20|0;s=c[r>>2]|0;if(!s){s=0;break}}while(0);c[v+20>>2]=s;c[r>>2]=v;break a}while(0);c[v+20>>2]=c[s>>2];c[s>>2]=v;break a}else{u=m;j=T;wa=432}while(0);if((wa|0)==432)if(!s){r=u;wa=468;break}else{v=s;t=r}r=c[v+36>>2]|0;if(r|0)ni(xa,r);r=c[v+40>>2]|0;if(r|0)ri(xa,r);r=c[v+16>>2]|0;B:do if(r|0){do if(!ea){if(c[xa+480>>2]|0){Xd(xa,r);break B}s=r;if((c[xa+304>>2]|0)>>>0>s>>>0)break;if((c[xa+308>>2]|0)>>>0<=s>>>0)break;wa=xa+300|0;c[r>>2]=c[wa>>2];c[wa>>2]=r;break B}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);wa=v+55|0;C:do if((d[wa>>0]|d[wa+1>>0]<<8)&16){r=c[v+32>>2]|0;if(!r)break;do if(!ea){if(c[xa+480>>2]|0){Xd(xa,r);break C}s=r;if((c[xa+304>>2]|0)>>>0>s>>>0)break;if((c[xa+308>>2]|0)>>>0<=s>>>0)break;wa=xa+300|0;c[r>>2]=c[wa>>2];c[wa>>2]=r;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(t){do if(!ea){if(c[xa+480>>2]|0){Xd(xa,t);r=u;wa=468;break a}r=t;if((c[xa+304>>2]|0)>>>0>r>>>0)break;if((c[xa+308>>2]|0)>>>0<=r>>>0)break;r=xa+300|0;c[t>>2]=c[r>>2];c[r>>2]=t;r=u;wa=468;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);r=u;wa=468;break}else{r=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);r=u;wa=468;break}}else{r=u;wa=468}}else{r=m;q=0;wa=468}while(0);if((wa|0)==468)if(r)ni(xa,r);if(j|0)ri(xa,j);qi(xa,i);if(!q){Ra=ya;return}if(xa|0){if(c[xa+480>>2]|0){Xd(xa,q);Ra=ya;return}i=q;if((c[xa+304>>2]|0)>>>0<=i>>>0?(c[xa+308>>2]|0)>>>0>i>>>0:0){i=xa+300|0;c[q>>2]=c[i>>2];c[i>>2]=q;Ra=ya;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);Ra=ya;return}else{i=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);Ra=ya;return}}function ij(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0;M=Ra;Ra=Ra+32|0;G=M+16|0;m=M+8|0;l=M;K=c[f>>2]|0;I=c[f+228>>2]|0;a:do if((I|0)!=0?(J=f+200|0,(a[J>>0]|0)!=1):0){r=(g|0)==0;do if(r){D=b[I+42>>1]|0;k=(D<<16>>16)+-1|0;if(D<<16>>16<1){C=130;break a}if(i)if((c[i>>2]|0)==1){k=1;C=13}else{c[l>>2]=c[(c[I+4>>2]|0)+(k<<4)>>2];c[l+4>>2]=h;cd(f,42428,l);break a}else{k=1;C=12}}else{if(!i){k=c[g>>2]|0;C=12;break}k=c[i>>2]|0;if((k|0)==(c[g>>2]|0))C=13;else{cd(f,42491,m);C=129;break a}}while(0);if((C|0)==12){p=h+4|0;l=(k<<3)+37+(c[p>>2]|0)|0;D=k;A=0}else if((C|0)==13){p=h+4|0;l=(k<<3)+37+(c[p>>2]|0)|0;o=c[i>>2]|0;if((o|0)>0){n=0;do{m=c[i+4+(n*20|0)+4>>2]|0;if(!m)m=0;else m=(Eu(m)|0)&1073741823;l=l+1+m|0;n=n+1|0}while((n|0)<(o|0));D=k;A=1}else{D=k;A=1}}n=((l|0)<0)<<31>>31;B=(K|0)==0;b:do if(B){z=Sv(l|0,n|0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){C=128;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](l)|0;C=42;break}n=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0<l>>>0)c[14985]=l;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){z=c[14978]|0;y=Tv(k|0,m|0,n|0,((n|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}m=Wa[c[29340>>2]&127](n)|0;if(!m){C=128;break a}k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;z=m}else z=m}else{if(c[K+272>>2]|0){if(a[K+81>>0]|0){C=128;break a}}else{do if(!(0<n>>>0|(0==(n|0)?(e[K+276>>1]|0)>>>0<l>>>0:0))){m=K+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];C=K+284|0;c[C>>2]=(c[C>>2]|0)+1;C=42;break b}m=K+296|0;k=c[m>>2]|0;if(!k){k=K+292|0;break}else{c[m>>2]=c[k>>2];C=K+284|0;c[C>>2]=(c[C>>2]|0)+1;C=42;break b}}else k=K+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(K,l,n)|0;C=42}while(0);if((C|0)==42)if(!k){C=128;break}else z=k;gw(z|0,0,l|0)|0;c[z>>2]=I;y=I+16|0;c[z+4>>2]=c[y>>2];w=z+36|0;o=w+(D<<3)|0;x=z+8|0;c[x>>2]=o;c:do if((d[J>>0]|0)>1){m=c[f>>2]|0;d:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;C=67;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){v=c[14978]|0;u=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;t=L()|0;c[14768]=((t|0)<0|(t|0)==0&u>>>0<=v>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break c;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break c}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];C=m+284|0;c[C>>2]=(c[C>>2]|0)+1;C=67;break d}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];C=m+284|0;c[C>>2]=(c[C>>2]|0)+1;C=67;break d}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;C=67}while(0);if((C|0)==67)if(!k)break;l=k+4|0;m=l+12|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));c[k>>2]=o;t=h;u=c[t+4>>2]|0;v=k+4|0;c[v>>2]=c[t>>2];c[v+4>>2]=u;v=f+272|0;c[k+12>>2]=c[v>>2];c[v>>2]=k}while(0);ew(o|0,c[h>>2]|0,c[p>>2]|0)|0;a[o+(c[p>>2]|0)>>0]=0;if(o|0?(q=a[o>>0]|0,(a[880+(q&255)>>0]|0)<0):0){n=q<<24>>24==91?93:q;m=0;k=1;while(1){l=a[o+k>>0]|0;if(l<<24>>24==n<<24>>24){k=k+1|0;l=o+m|0;if((a[o+k>>0]|0)!=n<<24>>24)break;a[l>>0]=n}else a[o+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0}m=o+((c[p>>2]|0)+1)|0;c[z+20>>2]=D;e:do if(!r)if((D|0)>0){s=I+4|0;t=f+272|0;v=b[I+42>>1]|0;u=v<<16>>16>0;v=v<<16>>16;r=0;f:while(1){if(!u){C=117;break}h=c[s>>2]|0;k=c[g+4+(r*20|0)+4>>2]|0;q=d[208+(d[k>>0]|0)>>0]|0;l=0;while(1){o=c[h+(l<<4)>>2]|0;p=a[o>>0]|0;n=(d[208+(p&255)>>0]|0)-q|0;if(!(p<<24>>24==0|(n|0)!=0)){p=k;do{o=o+1|0;p=p+1|0;N=a[o>>0]|0;n=(d[208+(N&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(n|0)!=0))}if(!n)break;l=l+1|0;if((l|0)>=(v|0))break f}c[w+(r<<3)>>2]=l;g:do if((d[J>>0]|0)>1?(F=w+(r<<3)|0,E=c[t>>2]|0,E|0):0){l=E;while(1){if((c[l>>2]|0)==(k|0))break;l=c[l+12>>2]|0;if(!l)break g}c[l>>2]=F}while(0);k=r+1|0;if((k|0)<(D|0))r=k;else{C=96;break e}}if((C|0)==117)k=c[g+4+(r*20|0)+4>>2]|0;c[G>>2]=k;cd(f,42585,G);if(!z){C=129;break a}if(!B)C=120}else C=107;else{c[w>>2]=(b[I+42>>1]|0)+-1;C=96}while(0);if((C|0)==96)if(A&(D|0)>0){p=f+272|0;n=0;while(1){o=c[i+4+(n*20|0)+4>>2]|0;if(!o)l=0;else l=(Eu(o)|0)&1073741823;c[w+(n<<3)+4>>2]=m;h:do if((d[J>>0]|0)>1?(H=c[p>>2]|0,H|0):0){k=H;while(1){if((c[k>>2]|0)==(o|0))break;k=c[k+12>>2]|0;if(!k)break h}c[k>>2]=m}while(0);ew(m|0,o|0,l|0)|0;a[m+l>>0]=0;n=n+1|0;if((n|0)==(D|0)){C=107;break}else m=m+(l+1)|0}}else C=107;if((C|0)==107){a[z+24>>0]=0;a[z+25>>0]=j;a[z+26>>0]=j>>>8;k=mi((c[I+72>>2]|0)+56|0,c[x>>2]|0,z)|0;if((k|0)!=(z|0)){if(k|0){c[z+12>>2]=k;c[k+16>>2]=z}c[y>>2]=z;C=128;break}k=K+81|0;if((a[k>>0]|0)==0?(a[K+82>>0]|0)==0:0){a[k>>0]=1;if((c[K+180>>2]|0)>0)c[K+264>>2]=1;k=K+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[K+236>>2]|0;if(k){c[k+12>>2]=7;C=120}else C=120}else C=120}if((C|0)==120){if(c[K+480>>2]|0){Xd(K,z);C=128;break}N=z;if((c[K+304>>2]|0)>>>0<=N>>>0?(c[K+308>>2]|0)>>>0>N>>>0:0){C=K+300|0;c[z>>2]=c[C>>2];c[C>>2]=z;C=128;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);C=128;break}else{C=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);C=128;break}}else C=128;while(0);if((C|0)==128)if(!g)C=130;else C=129;if((C|0)==129){ri(K,g);C=130}if((C|0)==130?(i|0)==0:0){Ra=M;return}ri(K,i);Ra=M;return}function jj(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+208|0;Q=U+184|0;O=U+176|0;N=U+160|0;M=U+152|0;L=U+136|0;K=U+128|0;J=U+112|0;I=U+104|0;D=U+96|0;A=U+88|0;z=U+80|0;y=U+72|0;x=U+64|0;w=U+56|0;u=U+48|0;t=U+40|0;s=U+32|0;r=U+24|0;P=U;T=c[f>>2]|0;if(a[T+81>>0]|0){qi(T,g);Ra=U;return}a:do if(!(a[T+165>>0]|0)){l=f+4|0;m=T+24|0;n=(c[m>>2]&1|0)==0;o=T+16|0;S=c[(c[o>>2]|0)+12>>2]|0;a[T+78>>0]=a[S+77>>0]|0;if(!((b[S+78>>1]&1)==0?(j=eh(T,0,l,0)|0,(j|0)!=0):0))E=5;b:do if((E|0)==5){j=c[T+20>>2]|0;if((j|0)>1)do{k=j;j=j+-1|0;if((b[(c[(c[o>>2]|0)+(j<<4)+12>>2]|0)+78>>1]&1)==0?(p=eh(T,j,l,0)|0,p|0):0){j=p;break b}}while((k|0)>2);if(n)c[m>>2]=c[m>>2]&-2;if(!(a[T+89>>0]|0))break a;c[m>>2]=c[m>>2]|16;break a}while(0);c[f+12>>2]=j;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;qi(T,g);Ra=U;return}while(0);m=(i|0)!=0;if(m){S=T+85|0;a[S>>0]=(a[S>>0]|0)+1<<24>>24}k=c[g+8>>2]|0;if(!k)j=g+12|0;else{l=c[(c[f>>2]|0)+16>>2]|0;j=0;while(1)if((c[l+(j<<4)+12>>2]|0)==(k|0))break;else j=j+1|0;j=l+(j<<4)|0}S=bd(f,h,c[g+16>>2]|0,c[j>>2]|0)|0;if(m){R=T+85|0;a[R>>0]=(a[R>>0]|0)+-1<<24>>24}if(!S){if(!m){qi(T,g);Ra=U;return}hl(f,c[g+12>>2]|0);qi(T,g);Ra=U;return}H=S+72|0;k=c[H>>2]|0;if(!k)R=-1e6;else{l=c[T+16>>2]|0;j=0;while(1)if((c[l+(j<<4)+12>>2]|0)==(k|0)){R=j;break}else j=j+1|0}B=S+56|0;if(c[B>>2]|0?Sk(f,S)|0:0){qi(T,g);Ra=U;return}i=(R|0)==1;j=i?34855:34585;o=c[(c[T+16>>2]|0)+(R<<4)>>2]|0;k=c[f>>2]|0;do if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(q=c[k+312>>2]|0,q|0):0){j=$a[q&127](c[k+316>>2]|0,9,j,0,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,r);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)==2){if(!j)break;qi(T,g);Ra=U;return}else{cd(f,39231,s);c[f+12>>2]=1;qi(T,g);Ra=U;return}}while(0);do if(!h){if(!(c[B>>2]|0)){l=0;m=i?13:11;break}j=S+64|0;while(1){j=c[j>>2]|0;if((c[j>>2]|0)==(T|0))break;else j=j+24|0}l=c[(c[j+4>>2]|0)+4>>2]|0;m=30}else{l=0;m=i?15:17}while(0);j=c[S>>2]|0;k=c[f>>2]|0;do if((a[k+165>>0]|0)==0?(v=f+200|0,(a[v>>0]|0)==0):0){n=c[k+312>>2]|0;if(n){j=$a[n&127](c[k+316>>2]|0,m,j,l,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,t);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)!=2){cd(f,39231,u);c[f+12>>2]=1;qi(T,g);Ra=U;return}if(j|0){qi(T,g);Ra=U;return}j=c[S>>2]|0;k=c[f>>2]|0;if(a[k+165>>0]|0){o=j;break}if(a[v>>0]|0){o=j;break}}l=c[k+312>>2]|0;if(l){j=$a[l&127](c[k+316>>2]|0,9,j,0,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,w);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)!=2){cd(f,39231,x);c[f+12>>2]=1;qi(T,g);Ra=U;return}if(!j){o=c[S>>2]|0;break}else{qi(T,g);Ra=U;return}}else o=j}else o=j;while(0);c:do if(o|0){m=a[o>>0]|0;n=m<<24>>24==0;d:do if(n){j=39441;E=66}else{E=m&255;j=208+E|0;do if((E|32|0)==115){j=a[o+1>>0]|0;if(!(j<<24>>24)){j=39442;E=66;break d}E=j&255;j=208+E|0;if((E|32|0)==113){j=a[o+2>>0]|0;if(!(j<<24>>24)){j=39443;E=66;break d}j=j&255;if((j|32|0)!=108){l=108;j=208+j|0;break}j=a[o+3>>0]|0;if(!(j<<24>>24)){j=39444;E=66;break d}j=j&255;if((j|32|0)!=105){l=105;j=208+j|0;break}j=a[o+4>>0]|0;if(!(j<<24>>24)){j=39445;E=66;break d}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;break}j=a[o+5>>0]|0;if(!(j<<24>>24)){j=39446;E=66;break d}j=j&255;if((j|32|0)!=101){l=101;j=208+j|0;break}j=a[o+6>>0]|0;if(!(j<<24>>24)){j=39447;E=66;break d}if(j<<24>>24==95){E=75;break d}else{l=95;j=208+(j&255)|0}}else l=113}else l=115;while(0);k=d[j>>0]|0;j=l;E=70}while(0);if((E|0)==66){k=0;j=a[208+(d[j>>0]|0)>>0]|0;E=70}if((E|0)==70){if((k|0)!=(j&255|0))break;if(!n){j=m&255;if((j|32|0)==115)E=75;else{l=115;j=208+j|0;E=74}}else{j=42631;E=72}}do if((E|0)==75){j=a[o+1>>0]|0;if(j<<24>>24){x=j&255;j=208+x|0;if((x|32|0)==113){j=a[o+2>>0]|0;if(j<<24>>24){x=j&255;j=208+x|0;if((x|32|0)==108){j=a[o+3>>0]|0;if(j<<24>>24){j=j&255;if((j|32|0)!=105){l=105;j=208+j|0;E=74;break}j=a[o+4>>0]|0;if(!(j<<24>>24)){j=42635;E=72;break}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;E=74;break}j=a[o+5>>0]|0;if(!(j<<24>>24)){j=42636;E=72;break}j=j&255;if((j|32|0)!=101){l=101;j=208+j|0;E=74;break}j=a[o+6>>0]|0;if(!(j<<24>>24)){j=42637;E=72;break}if(j<<24>>24!=95){l=95;j=208+(j&255)|0;E=74;break}j=a[o+7>>0]|0;if(!(j<<24>>24)){j=42638;E=72;break}j=j&255;if((j|32|0)!=115){l=115;j=208+j|0;E=74;break}j=a[o+8>>0]|0;if(!(j<<24>>24)){j=42639;E=72;break}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;E=74;break}j=a[o+9>>0]|0;if(!(j<<24>>24)){j=42640;E=72;break}j=j&255;if((j|32|0)!=97){l=97;j=208+j|0;E=74;break}j=a[o+10>>0]|0;if(!(j<<24>>24)){j=42641;E=72;break}j=j&255;if((j|32|0)==116)break c;else{l=116;j=208+j|0;E=74}}else{j=42634;E=72}}else{l=108;E=74}}else{j=42633;E=72}}else{l=113;E=74}}else{j=42632;E=72}}while(0);if((E|0)==72){k=0;j=a[208+(d[j>>0]|0)>>0]|0}else if((E|0)==74){k=d[j>>0]|0;j=l}if((k|0)!=(j&255|0)){c[y>>2]=o;cd(f,42643,y);qi(T,g);Ra=U;return}}while(0);r=(h|0)!=0;j=(c[S+12>>2]|0)==0;if(r){if(j){c[z>>2]=o;cd(f,42671,z);qi(T,g);Ra=U;return}}else if(!j){c[A>>2]=o;cd(f,42705,A);qi(T,g);Ra=U;return}t=f+8|0;s=f+116|0;if(!(c[t>>2]|0)){m=c[f>>2]|0;if((c[s>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;e:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))E=97;else{qi(T,g);Ra=U;return}else{do if((e[m+276>>1]|0)>=224){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];A=m+284|0;c[A>>2]=(c[A>>2]|0)+1;break e}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];A=m+284|0;c[A>>2]=(c[A>>2]|0)+1;break e}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;E=97}while(0);if((E|0)==97)k=_d(m,224,0)|0;if(!k){qi(T,g);Ra=U;return}j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=m;j=m+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[t>>2]=k;Di(k,61,0,1,0)|0}q=c[s>>2]|0;q=(q|0)==0?f:q;j=q+84|0;k=c[j>>2]|0;p=1<<R;f:do if((((k&p|0)==0?(c[j>>2]=k|p,i):0)?(F=c[q>>2]|0,C=F+16|0,(c[(c[C>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){j=Pe(c[F>>2]|0,0,F,P,0,542)|0;if(j|0){cd(q,32157,D);c[q+12>>2]=j;break}D=c[P>>2]|0;c[(c[C>>2]|0)+20>>2]=D;j=c[F+92>>2]|0;m=c[D+4>>2]|0;c[m+4>>2]=c[D>>2];do if(!(b[m+22>>1]&2)){n=m+32|0;o=m+36|0;i=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[n>>2]=j;l=m+80|0;j=c[l>>2]|0;if(!j)break;k=j+-4|0;c[l>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;D=(c[14820]|0)+1|0;c[14820]=D;c[14821]=(D|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;E=117;break}else{j=Wa[c[29352>>2]&127](k)|0;E=117}while(0);do if((E|0)==117){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{D=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[l>>2]=0}while(0);D=Se(c[m>>2]|0,n,i)|0;c[o>>2]=(c[n>>2]|0)-(i&65535);if((D|0)!=7)break;j=F+81|0;do if(!(a[j>>0]|0)){if(a[F+82>>0]|0)break;a[j>>0]=1;if((c[F+180>>2]|0)>0)c[F+264>>2]=1;j=F+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[F+236>>2]|0;if(!j)break;c[j+12>>2]=7}while(0);break f}while(0)}while(0);F=q+80|0;c[F>>2]=c[F>>2]|p;F=q+20|0;a[F>>0]=a[F>>0]|1;if(r){il(f,S,R,h);qi(T,g);Ra=U;return}k=c[S>>2]|0;l=c[(c[(c[f>>2]|0)+16>>2]|0)+(R<<4)>>2]|0;c[I>>2]=1;Cb(24,P,42737,I)|0;if(Sd(c[f>>2]|0,P,l)|0){c[J>>2]=l;c[J+4>>2]=P;c[J+8>>2]=38087;c[J+12>>2]=k;Ak(f,42751,J)}c[K>>2]=2;Cb(24,P,42737,K)|0;if(Sd(c[f>>2]|0,P,l)|0){c[L>>2]=l;c[L+4>>2]=P;c[L+8>>2]=38087;c[L+12>>2]=k;Ak(f,42751,L)}c[M>>2]=3;Cb(24,P,42737,M)|0;if(Sd(c[f>>2]|0,P,l)|0){c[N>>2]=l;c[N+4>>2]=P;c[N+8>>2]=38087;c[N+12>>2]=k;Ak(f,42751,N)}c[O>>2]=4;Cb(24,P,42737,O)|0;j=c[f>>2]|0;if(!(Sd(j,P,l)|0))q=j;else{c[Q>>2]=l;c[Q+4>>2]=P;c[Q+8>>2]=38087;c[Q+12>>2]=k;Ak(f,42751,Q);q=c[f>>2]|0}r=q+32|0;g:do if(!((c[r>>2]&16384|0)==0&0==0)){if(c[B>>2]|0)break;j=c[t>>2]|0;h:do if(!j){do if(!(c[s>>2]|0)){if(b[q+76>>1]&8)break;a[f+23>>0]=1}while(0);i:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))E=149;else{p=0;break h}else{do if((e[q+276>>1]|0)>=224){j=q+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Q=q+284|0;c[Q>>2]=(c[Q>>2]|0)+1;break i}j=q+296|0;k=c[j>>2]|0;if(!k){j=q+292|0;break}else{c[j>>2]=c[k>>2];Q=q+284|0;c[Q>>2]=(c[Q>>2]|0)+1;break i}}else j=q+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;E=149}while(0);if((E|0)==149)k=_d(q,224,0)|0;if(!k){p=0;break}j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=q;j=q+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[t>>2]=k;Di(k,61,0,1,0)|0;p=k}else p=j;while(0);i=c[S>>2]|0;m=c[H>>2]|0;n=c[m+68>>2]|0;if(!n){k=m+60|0;j=m+64|0}else{k=a[i>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=i;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[m+56>>2]|0)>>>0)|0;k=n+(j<<3)|0;j=n+(j<<3)+4|0}k=c[k>>2]|0;j:do if(!k)j=59292;else{o=d[208+(d[i>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;Q=a[m>>0]|0;l=(d[208+(Q&255)>>0]|0)-o|0;if(!(Q<<24>>24==0|(l|0)!=0)){n=i;do{m=m+1|0;n=n+1|0;Q=a[m>>0]|0;l=(d[208+(Q&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Q<<24>>24==0|(l|0)!=0))}if(!l)break j;if(!k){j=59292;break}}}while(0);do if(!(c[j+8>>2]|0)){j=c[S+16>>2]|0;if(!j)break g;while(1){if(a[j+24>>0]|0)break;if(!((c[r>>2]&524288|0)==0&0==0))break;j=c[j+4>>2]|0;if(!j)break g}k=f+56|0;j=(c[k>>2]|0)+-1|0;c[k>>2]=j;k=p+108|0;l=c[k>>2]|0;if((c[p+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[p+104>>2]|0;a[m+(l*20|0)>>0]=46;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=1;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;m=j;break}else{Di(p,46,1,j,0)|0;m=j;break}}else m=0;while(0);Q=f+146|0;a[Q>>0]=1;sj(f,ik(q,g,0)|0,0);a[Q>>0]=0;if((c[r>>2]&524288|0)==0&0==0){j=p+108|0;k=c[j>>2]|0;l=k+2|0;if((c[p+112>>2]|0)>(k|0)){c[j>>2]=k+1;Q=c[p+104>>2]|0;a[Q+(k*20|0)>>0]=46;b[Q+(k*20|0)+2>>1]=0;c[Q+(k*20|0)+4>>2]=0;c[Q+(k*20|0)+8>>2]=l;c[Q+(k*20|0)+12>>2]=0;c[Q+(k*20|0)+16>>2]=0;a[Q+(k*20|0)+1>>0]=0}else Di(p,46,0,l,0)|0;Uj(f,787,2,0,-1,4)}if(!m)break;k=c[p+12>>2]|0;j=~m;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,p,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[p+108>>2];break}}while(0);il(f,S,R,0);qi(T,g);Ra=U;return}\nfunction rj(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+48|0;s=u+32|0;t=u+16|0;r=u;p=u+36|0;c[p>>2]=e;c[p+4>>2]=f;c[p+8>>2]=g;a:do if(!e)h=0;else{o=0;h=0;n=e;b:while(1){m=c[n+4>>2]|0;if((m|0)<=0)break;c:do if((m|0)==7){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;d:do if(!(i<<24>>24)){i=18240;q=10}else{l=i&255;i=208+l|0;do if((l|32|0)==110){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18241;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==97){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18242;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==116){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18243;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==117){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18244;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==114){i=a[j+5>>0]|0;if(!(i<<24>>24)){i=18245;q=10;break d}i=i&255;if((i|32|0)!=97){k=97;i=208+i|0;break}i=a[j+6>>0]|0;if(!(i<<24>>24)){i=18246;q=10;break d}i=i&255;if((i|32|0)==108){i=0;break c}else{k=108;i=208+i|0}}else k=114}else k=117}else k=116}else k=97}else k=110;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==10){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0))i=0;else q=12}else q=12;while(0);e:do if((q|0)==12){q=0;l=(m|0)==4;if(l){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18246;q=28}else{k=i&255;i=208+k|0;if((k|32|0)==108){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18247;q=28;break}k=i&255;i=208+k|0;if((k|32|0)==101){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18248;q=28;break}k=i&255;i=208+k|0;if((k|32|0)==102){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18249;q=28;break}i=i&255;if((i|32|0)==116){i=1;break e}else{k=116;i=208+i|0}}else k=102}else k=101}else k=108;j=d[i>>0]|0;i=k}while(0);if((q|0)==28){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=1;break}}else l=0;m=(m|0)==5;if(m){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18250;q=37}else{k=i&255;i=208+k|0;if((k|32|0)==111){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18251;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==117){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18252;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==116){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18253;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==101){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18254;q=37;break}i=i&255;if((i|32|0)==114){i=2;break e}else{k=114;i=208+i|0}}else k=101}else k=116}else k=117}else k=111;j=d[i>>0]|0;i=k}while(0);if((q|0)==37){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=2;break}if(m){j=c[n>>2]|0;if(j){i=a[j>>0]|0;f:do if(!(i<<24>>24)){i=18254;q=45}else{m=i&255;i=208+m|0;do if((m|32|0)==114){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18255;q=45;break f}i=i&255;if((i|32|0)!=105){k=105;i=208+i|0;break}i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18256;q=45;break f}i=i&255;if((i|32|0)!=103){k=103;i=208+i|0;break}i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18257;q=45;break f}i=i&255;if((i|32|0)!=104){k=104;i=208+i|0;break}i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18258;q=45;break f}i=i&255;if((i|32|0)==116){i=3;break e}else{k=116;i=208+i|0}}else k=114;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==45){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=3;break}else i=1}else i=1}else i=0;if(l){l=i;q=48}else l=i}else if(l){l=0;q=48}else break b;if((q|0)==48){q=0;j=c[n>>2]|0;if(j){i=a[j>>0]|0;do if(!(i<<24>>24)){i=18259;q=53}else{m=i&255;i=208+m|0;if((m|32|0)==102){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18260;q=53;break}m=i&255;i=208+m|0;if((m|32|0)==117){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18261;q=53;break}m=i&255;i=208+m|0;if((m|32|0)==108){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18262;q=53;break}i=i&255;if((i|32|0)==108){i=4;break e}else{k=108;i=208+i|0}}else k=108}else k=117}else k=102;j=d[i>>0]|0;i=k}while(0);if((q|0)==53){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=4;break}}}if(!l)break b;j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18263;q=61}else{m=i&255;i=208+m|0;if((m|32|0)==105){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18264;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==110){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18265;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==110){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18266;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==101){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18267;q=61;break}i=i&255;if((i|32|0)==114){i=5;break e}else{k=114;i=208+i|0}}else k=101}else k=110}else k=110}else k=105;j=d[i>>0]|0;i=k}while(0);if((q|0)==61){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)!=(i&255|0)){if(!l)break b;j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;g:do if(!(i<<24>>24)){i=18268;q=69}else{n=i&255;i=208+n|0;do if((n|32|0)==99){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18269;q=69;break g}n=i&255;i=208+n|0;if((n|32|0)==114){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18270;q=69;break g}i=i&255;if((i|32|0)!=111){k=111;i=208+i|0;break}i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18271;q=69;break g}i=i&255;if((i|32|0)!=115){k=115;i=208+i|0;break}i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18272;q=69;break g}i=i&255;if((i|32|0)==115){i=6;break e}else{k=115;i=208+i|0}}else k=114}else k=99;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==69){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0))i=6;else break b}else i=5}while(0);h=h|(d[18288+(i*3|0)+2>>0]|0);o=o+1|0;if(o>>>0>=3)break a;n=c[p+(o<<2)>>2]|0;if(!n)break a}h=h|64}while(0);if((h&33|0)!=33&(h&64|0)==0){if((h&32|0)==0|(h&24|0)==8){t=h;Ra=u;return t|0}cd(b,44559,s);t=1;Ra=u;return t|0}if(!g){c[t>>2]=e;c[t+4>>2]=f;c[t+8>>2]=44514;c[t+12>>2]=0;cd(b,44515,t);t=1;Ra=u;return t|0}else{c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=44513;c[r+12>>2]=g;cd(b,44515,r);t=1;Ra=u;return t|0}return 0}function sj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+112|0;E=U+32|0;C=U+24|0;w=U+16|0;v=U+8|0;o=U;D=U+80|0;P=U+76|0;Q=U+72|0;F=U+40|0;c[P>>2]=0;c[Q>>2]=0;T=c[f>>2]|0;a:do if((c[f+36>>2]|0)==0?(K=T+81|0,(a[K>>0]|0)==0):0){j=c[g+8>>2]|0;if(!j)i=g+12|0;else{k=c[T+16>>2]|0;i=0;while(1)if((c[k+(i<<4)+12>>2]|0)==(j|0))break;else i=i+1|0;i=k+(i<<4)|0}R=bd(f,0,c[g+16>>2]|0,c[i>>2]|0)|0;i=c[f>>2]|0;j=g+24|0;k=c[j>>2]|0;do if(k|0){if(i|0?c[i+480>>2]|0:0){Vi(i,k);break}N=k+32|0;O=(c[N>>2]|0)+-1|0;c[N>>2]=O;if(!O)Vi(i,k)}while(0);c[j>>2]=R;if(R){O=R+32|0;c[O>>2]=(c[O>>2]|0)+1;b:do if(a[g+45>>0]&2){m=c[g+72>>2]|0;i=c[R+8>>2]|0;c:do if(i|0){n=d[208+(d[m>>0]|0)>>0]|0;while(1){k=c[i>>2]|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-n|0;if(!(O<<24>>24==0|(j|0)!=0)){l=m;do{k=k+1|0;l=l+1|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(j|0)!=0))}if(!j)break;i=c[i+20>>2]|0;if(!i)break c}c[g+76>>2]=i;break b}while(0);c[o>>2]=m;c[o+4>>2]=0;cd(f,41107,o);a[f+17>>0]=1;i=0;break a}while(0);i=c[f>>2]|0;s=c[i+32>>2]|0;do if(!((s&262144|0)==0&0==0)?(q=c[(c[i+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){p=c[R+72>>2]|0;if((p|0)!=(q|0)?(r=c[q+48>>2]|0,(r|0)!=0):0){o=R+68|0;n=r;i=0;do{m=c[n+8>>2]|0;if((c[m+24>>2]|0)==(p|0)){k=c[m+4>>2]|0;l=c[R>>2]|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(O<<24>>24==0|(j|0)!=0))do{k=k+1|0;l=l+1|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(j|0)!=0));if(!j){if(!i)i=c[o>>2]|0;c[m+32>>2]=i;i=m}}n=c[n>>2]|0}while((n|0)!=0);if(!i)S=40}else S=40;if((S|0)==40){i=c[R+68>>2]|0;if(!i){S=46;break}}j=0;k=i;do{if((a[k+8>>0]|0)==121)j=j|d[k+9>>0];k=c[k+32>>2]|0}while((k|0)!=0);if(j){j=(c[R+12>>2]|0)!=0;if(!i)S=48;else{I=i;x=1;i=1}}else S=46}else S=46;while(0);if((S|0)==46){j=(c[R+12>>2]|0)!=0;S=48}if((S|0)==48){if(!((s&16384|0)==0&0==0)){p=c[R>>2]|0;m=c[R+72>>2]|0;n=c[m+68>>2]|0;if(!n){k=m+60|0;i=m+64|0}else{k=a[p>>0]|0;if(!(k<<24>>24))i=0;else{i=0;l=p;do{l=l+1|0;i=G(i+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}i=(i>>>0)%((c[m+56>>2]|0)>>>0)|0;k=n+(i<<3)|0;i=n+(i<<3)+4|0}k=c[k>>2]|0;d:do if(!k)i=59292;else{o=d[208+(d[p>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;k=k+-1|0;m=c[i+12>>2]|0;O=a[m>>0]|0;l=(d[208+(O&255)>>0]|0)-o|0;if(!(O<<24>>24==0|(l|0)!=0)){n=p;do{m=m+1|0;n=n+1|0;O=a[m>>0]|0;l=(d[208+(O&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(l|0)!=0))}if(!l)break d;if(!k){i=59292;break}}}while(0);if(!(c[i+8>>2]|0))i=(c[R+16>>2]|0)!=0&1;else i=1}else i=0;I=0;x=(i|0)!=0;i=0}u=x&1;if((Sk(f,R)|0)==0?(Fm(f,R,i)|0)==0:0){k=c[R+72>>2]|0;l=c[T+16>>2]|0;if(!k)z=-1e6;else{i=0;while(1)if((c[l+(i<<4)+12>>2]|0)==(k|0)){z=i;break}else i=i+1|0}m=c[R>>2]|0;i=c[l+(z<<4)>>2]|0;k=c[f>>2]|0;if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(t=c[k+312>>2]|0,(t|0)!=0):0){i=$a[t&127](c[k+316>>2]|0,9,m,0,i,c[f+240>>2]|0)|0;if((i|0)==1){cd(f,39216,v);c[f+12>>2]=23;i=0;break}if((i|2|0)!=2){cd(f,39231,w);c[f+12>>2]=1;i=0;break}}else i=0;w=f+40|0;J=c[w>>2]|0;A=J+1|0;c[w>>2]=A;c[g+48>>2]=J;y=R+8|0;k=c[y>>2]|0;if(!k)B=0;else{l=0;m=A;do{m=m+1|0;l=l+1|0;k=c[k+20>>2]|0}while((k|0)!=0);c[w>>2]=m;B=l}if(j){O=f+240|0;N=c[O>>2]|0;c[O>>2]=c[R>>2];O=f}else{N=0;O=0}v=f+8|0;k=c[v>>2]|0;e:do if(!k){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;f:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))S=97;else{i=0;break e}else{do if((e[n+276>>1]|0)>=224){k=n+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break f}k=n+296|0;l=c[k>>2]|0;if(!l){k=n+292|0;break}else{c[k>>2]=c[l>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break f}}else k=n+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;S=97}while(0);if((S|0)==97)m=_d(n,224,0)|0;if(!m)i=0;else{o=m+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[m>>2]=n;k=n+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[v>>2]=m;Di(m,61,0,1,0)|0;M=m;S=102}}else{M=k;S=102}while(0);g:do if((S|0)==102){L=f+18|0;if(!(a[L>>0]|0)){H=M+149|0;t=d[H>>0]|d[H+1>>0]<<8|32;a[H>>0]=t;a[H+1>>0]=t>>8}H=f+116|0;t=c[H>>2]|0;t=(t|0)==0?f:t;k=t+84|0;l=c[k>>2]|0;s=1<<z;h:do if((l&s|0)==0?(c[k>>2]=l|s,(z|0)==1):0){r=c[t>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;l=Pe(c[r>>2]|0,0,r,D,0,542)|0;if(l|0){cd(t,32157,C);c[t+12>>2]=l;break}C=c[D>>2]|0;c[(c[k>>2]|0)+20>>2]=C;k=c[r+92>>2]|0;n=c[C+4>>2]|0;c[n+4>>2]=c[C>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;C=(c[14820]|0)+1|0;c[14820]=C;c[14821]=(C|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;S=119;break}else{k=Wa[c[29352>>2]&127](l)|0;S=119}while(0);do if((S|0)==119){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{C=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);C=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((C|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break h}while(0)}while(0);C=t+80|0;c[C>>2]=c[C>>2]|s;C=t+20|0;a[C>>0]=d[C>>0]|u;if(j){Gm(f,R,h,J);c[Q>>2]=J;c[P>>2]=J}C=F+8|0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;c[C+20>>2]=0;c[F>>2]=f;c[F+4>>2]=g;i:do if(h){l=F+24|0;b[l>>1]=0;c[D>>2]=f;c[D+4>>2]=125;c[D+8>>2]=126;c[D+12>>2]=0;c[D+24>>2]=F;m=h+24|0;k=f+208|0;C=(c[k>>2]|0)+(c[m>>2]|0)|0;c[k>>2]=C;k=c[(c[f>>2]|0)+120>>2]|0;do if((k|0)>=(C|0)){_j(D,h)|0;k=c[D>>2]|0;E=k+208|0;c[E>>2]=(c[E>>2]|0)-(c[m>>2]|0);E=h+4|0;c[E>>2]=c[E>>2]|b[l>>1]&-32752&65535;if((c[F+20>>2]|0)>0)break;if((c[k+36>>2]|0)<1)break i;else{i=0;break g}}else{c[E>>2]=k;cd(f,41637,E)}while(0);i=0;break g}while(0);do if(!(0==0?(c[T+32>>2]&128|0)==0:0)){if(a[L>>0]|0){D=0;break}if(c[f+120>>2]|0){D=0;break}l=f+44|0;k=(c[l>>2]|0)+1|0;c[l>>2]=k;l=M+108|0;m=c[l>>2]|0;if((c[M+112>>2]|0)>(m|0)){c[l>>2]=m+1;D=c[M+104>>2]|0;a[D+(m*20|0)>>0]=70;b[D+(m*20|0)+2>>1]=0;c[D+(m*20|0)+4>>2]=0;c[D+(m*20|0)+8>>2]=k;c[D+(m*20|0)+12>>2]=0;c[D+(m*20|0)+16>>2]=0;a[D+(m*20|0)+1>>0]=0;D=k;break}else{Di(M,70,0,k,0)|0;D=k;break}}else D=0;while(0);do if(x|((h|0)!=0|(i|0)!=0))S=166;else{if(c[R+56>>2]|0){S=166;break}i=R+28|0;Hj(f,z,c[i>>2]|0,1,c[R>>2]|0);do if(!(c[R+36>>2]&32)){j=c[i>>2]|0;k=(D|0)==0?-1:D;m=c[R>>2]|0;l=M+108|0;i=c[l>>2]|0;if((c[M+112>>2]|0)>(i|0)){c[l>>2]=i+1;R=c[M+104>>2]|0;a[R+(i*20|0)>>0]=-119;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=j;c[R+(i*20|0)+8>>2]=z;c[R+(i*20|0)+12>>2]=k;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else i=Di(M,137,j,z,k)|0;if(a[(c[M>>2]|0)+81>>0]|0)break;if((i|0)<0)i=(c[l>>2]|0)+-1|0;j=c[M+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(M,j+(i*20|0)|0,m,-1);break}if(!m)break;c[j+(i*20|0)+16>>2]=m;a[k>>0]=-1}while(0);i=c[y>>2]|0;if(!i){i=0;break}l=M+108|0;m=M+112|0;n=M+104|0;do{j=c[i+44>>2]|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;R=c[n>>2]|0;a[R+(k*20|0)>>0]=-119;b[R+(k*20|0)+2>>1]=0;c[R+(k*20|0)+4>>2]=j;c[R+(k*20|0)+8>>2]=z;c[R+(k*20|0)+12>>2]=0;c[R+(k*20|0)+16>>2]=0;a[R+(k*20|0)+1>>0]=0}else Di(M,137,j,z,0)|0;i=c[i+20>>2]|0}while((i|0)!=0);i=0}while(0);do if((S|0)==166){r=x|(b[F+24>>1]&64)!=0?1044:1052;j:do if(!(c[R+36>>2]&32)){i=f+44|0;l=(c[i>>2]|0)+1|0;c[i>>2]=l;i=M+108|0;k=c[i>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[i>>2]=k+1;s=c[M+104>>2]|0;a[s+(k*20|0)>>0]=73;b[s+(k*20|0)+2>>1]=0;c[s+(k*20|0)+4>>2]=0;c[s+(k*20|0)+8>>2]=l;c[s+(k*20|0)+12>>2]=0;c[s+(k*20|0)+16>>2]=0;a[s+(k*20|0)+1>>0]=0;s=0;C=0;p=1;u=0;i=0;break}else{Di(M,73,0,l,0)|0;s=0;C=0;p=1;u=0;i=0;break}}else{i=c[y>>2]|0;k:do if(!i)i=0;else while(1){F=i+55|0;if(((d[F>>0]|d[F+1>>0]<<8)&3)==2)break k;i=c[i+20>>2]|0;if(!i){i=0;break}}while(0);p=b[i+50>>1]|0;o=f+44|0;k=c[o>>2]|0;q=k+1|0;m=p<<16>>16;c[o>>2]=k+m;o=c[w>>2]|0;c[w>>2]=o+1;k=M+108|0;l=c[k>>2]|0;if((c[M+112>>2]|0)>(l|0)){c[k>>2]=l+1;F=c[M+104>>2]|0;a[F+(l*20|0)>>0]=113;b[F+(l*20|0)+2>>1]=0;c[F+(l*20|0)+4>>2]=o;c[F+(l*20|0)+8>>2]=m;c[F+(l*20|0)+12>>2]=0;c[F+(l*20|0)+16>>2]=0;a[F+(l*20|0)+1>>0]=0}else l=Di(M,113,o,m,0)|0;k=c[v>>2]|0;n=Ij(f,i)|0;if(!n){s=l;l=0;C=o;u=q;break}m=c[k>>2]|0;if(!(a[m+81>>0]|0)){C=c[k+104>>2]|0;s=(c[k+108>>2]|0)+-1|0;a[C+(s*20|0)+1>>0]=-9;c[C+(s*20|0)+16>>2]=n;s=l;l=0;C=o;u=q;break}if(c[m+480>>2]|0){s=l;l=0;C=o;u=q;break}F=(c[n>>2]|0)+-1|0;c[n>>2]=F;if(F|0){s=l;l=0;C=o;u=q;break}k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);s=l;l=0;C=o;u=q;break j}m=n;if((c[k+304>>2]|0)>>>0>m>>>0)break;if((c[k+308>>2]|0)>>>0<=m>>>0)break;s=k+300|0;c[n>>2]=c[s>>2];c[s>>2]=n;s=l;l=0;C=o;u=q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);s=l;l=0;C=o;u=q;break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);s=l;l=0;C=o;u=q;break}}while(0);A=ql(f,g,h,0,0,r,A)|0;if(!A){i=0;break g}v=A+24|0;o=c[v>>2]|0;v=c[v+4>>2]|0;w=a[A+49>>0]|0;x=w<<24>>24==1;if(!x){F=c[H>>2]|0;a[((F|0)==0?f:F)+20>>0]=1}do if(D|0){k=M+108|0;m=c[k>>2]|0;if((c[M+112>>2]|0)>(m|0)){c[k>>2]=m+1;F=c[M+104>>2]|0;a[F+(m*20|0)>>0]=83;b[F+(m*20|0)+2>>1]=0;c[F+(m*20|0)+4>>2]=D;c[F+(m*20|0)+8>>2]=1;c[F+(m*20|0)+12>>2]=0;c[F+(m*20|0)+16>>2]=0;a[F+(m*20|0)+1>>0]=0;break}else{Di(M,83,D,1,0)|0;break}}while(0);z=(i|0)!=0;do if(!z){m=f+44|0;k=(c[m>>2]|0)+1|0;c[m>>2]=k;m=M+108|0;n=c[m>>2]|0;if((c[M+112>>2]|0)>(n|0)){c[m>>2]=n+1;F=c[M+104>>2]|0;a[F+(n*20|0)>>0]=-128;b[F+(n*20|0)+2>>1]=0;c[F+(n*20|0)+4>>2]=J;c[F+(n*20|0)+8>>2]=k;c[F+(n*20|0)+12>>2]=0;c[F+(n*20|0)+16>>2]=0;a[F+(n*20|0)+1>>0]=0;n=k;break}else{Di(M,128,J,k,0)|0;n=k;break}}else{m=p<<16>>16;if(p<<16>>16<=0){n=u;break}n=i+4|0;k=0;do{Vj(M,R,J,b[(c[n>>2]|0)+(k<<1)>>1]|0,k+u|0);k=k+1|0}while((k|0)!=(m|0));n=u}while(0);y=w<<24>>24!=0;l:do if(y){m=B+2|0;m:do if(c[T+272>>2]|0){if(!(a[K>>0]|0))S=216}else{do if(!(0<0|(0==0?(e[T+276>>1]|0)>>>0<m>>>0:0))){k=T+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];S=T+284|0;c[S>>2]=(c[S>>2]|0)+1;S=217;break m}k=T+296|0;i=c[k>>2]|0;if(!i){i=T+292|0;break}else{c[k>>2]=c[i>>2];S=T+284|0;c[S>>2]=(c[S>>2]|0)+1;S=217;break m}}else i=T+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;S=216}while(0);if((S|0)==216){i=_d(T,m,0)|0;S=217}do if((S|0)==217){if(!i)break;K=B+1|0;gw(i|0,1,K|0)|0;a[i+K>>0]=0;if((o|0)>-1)a[i+(o-J)>>0]=0;if((v|0)>-1)a[i+(v-J)>>0]=0;do if(s|0){k=c[M>>2]|0;if(a[k+81>>0]|0)break;K=c[M+104>>2]|0;E=K+(s*20|0)+1|0;F=K+(s*20|0)+16|0;kg(k,a[E>>0]|0,c[F>>2]|0);a[E>>0]=0;c[F>>2]=0;a[K+(s*20|0)>>0]=-86}while(0);r=f+56|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;r=n;break l}while(0);sl(A);i=0;break g}else{do if(!z){i=M+108|0;k=c[i>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[i>>2]=k+1;i=c[M+104>>2]|0;a[i+(k*20|0)>>0]=-108;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=l;c[i+(k*20|0)+8>>2]=n;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;i=1;k=n;break}else{Di(M,148,l,n,0)|0;i=1;k=n;break}}else{t=f+44|0;k=(c[t>>2]|0)+1|0;c[t>>2]=k;t=p<<16>>16;q=gl(c[f>>2]|0,i)|0;r=M+108|0;i=c[r>>2]|0;s=M+112|0;if((c[s>>2]|0)>(i|0)){c[r>>2]=i+1;K=c[M+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=u;c[K+(i*20|0)+8>>2]=t;c[K+(i*20|0)+12>>2]=k;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(M,92,u,t,k)|0;m=c[M>>2]|0;n:do if(!(a[m+81>>0]|0)){if((i|0)<0)i=(c[r>>2]|0)+-1|0;m=c[M+104>>2]|0;n=m+(i*20|0)|0;do if(p<<16>>16<=-1){o=m+(i*20|0)+1|0;if(a[o>>0]|0)break;if(p<<16>>16==-3){c[m+(i*20|0)+16>>2]=q;a[o>>0]=-3;break n}if(!q)break n;c[m+(i*20|0)+16>>2]=q;a[o>>0]=p;if(p<<16>>16!=-12)break n;K=q+12|0;c[K>>2]=(c[K>>2]|0)+1;break n}while(0);Ei(M,n,q,t)}else{if(p<<16>>16==-12)break;kg(m,t,q)}while(0);i=c[r>>2]|0;if((c[s>>2]|0)>(i|0)){c[r>>2]=i+1;K=c[M+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=C;c[K+(i*20|0)+8>>2]=k;c[K+(i*20|0)+12>>2]=u;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(M,132,C,k,u)|0;if(a[(c[M>>2]|0)+81>>0]|0){i=0;break}K=c[M+104>>2]|0;a[K+(i*20|0)+1>>0]=-3;c[K+(i*20|0)+16>>2]=t;i=0}while(0);sl(A);s=0;p=i;i=0;r=k}while(0);do if(!j){if(w<<24>>24!=2){Hm(f,R,109,8,J,i,P,Q)|0;break}k=M+108|0;j=c[k>>2]|0;if((c[M+112>>2]|0)>(j|0)){c[k>>2]=j+1;o=c[M+104>>2]|0;a[o+(j*20|0)>>0]=17;o=o+(j*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0))}else j=Di(M,17,0,0,0)|0;Hm(f,R,109,8,J,i,P,Q)|0;k=c[k>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((j|0)<0?k+-1|0:j)*20|0)|0;else j=59308;c[j+8>>2]=k}while(0);do if(!y){n=M+108|0;k=c[n>>2]|0;m=M+112|0;j=(c[m>>2]|0)>(k|0);if(!z)if(j){c[n>>2]=k+1;q=c[M+104>>2]|0;a[q+(k*20|0)>>0]=41;b[q+(k*20|0)+2>>1]=0;c[q+(k*20|0)+4>>2]=l;c[q+(k*20|0)+8>>2]=0;c[q+(k*20|0)+12>>2]=r;c[q+(k*20|0)+16>>2]=0;a[q+(k*20|0)+1>>0]=0;q=k;break}else{q=Di(M,41,l,0,r)|0;break}if(j){c[n>>2]=k+1;K=c[M+104>>2]|0;a[K+(k*20|0)>>0]=36;b[K+(k*20|0)+2>>1]=0;c[K+(k*20|0)+4>>2]=C;c[K+(k*20|0)+8>>2]=0;c[K+(k*20|0)+12>>2]=0;c[K+(k*20|0)+16>>2]=0;a[K+(k*20|0)+1>>0]=0}else k=Di(M,36,C,0,0)|0;l=c[n>>2]|0;j=(c[m>>2]|0)>(l|0);if(!(c[R+56>>2]|0))if(j){c[n>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=127;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=C;c[q+(l*20|0)+8>>2]=r;c[q+(l*20|0)+12>>2]=0;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=k;break}else{Di(M,127,C,r,0)|0;q=k;break}else if(j){c[n>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=90;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=C;c[q+(l*20|0)+8>>2]=0;c[q+(l*20|0)+12>>2]=r;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=k;break}else{Di(M,90,C,0,r)|0;q=k;break}}else{if(c[R+56>>2]|0){q=0;break}k=c[P>>2]|0;if(!(a[i+(k-J)>>0]|0)){q=0;break}l=M+108|0;j=c[l>>2]|0;if((c[M+112>>2]|0)>(j|0)){c[l>>2]=j+1;K=c[M+104>>2]|0;a[K+(j*20|0)>>0]=28;b[K+(j*20|0)+2>>1]=0;c[K+(j*20|0)+4>>2]=k;c[K+(j*20|0)+8>>2]=s;c[K+(j*20|0)+12>>2]=r;c[K+(j*20|0)+16>>2]=0;a[K+(j*20|0)+1>>0]=0}else j=Di(M,28,k,s,r)|0;if(a[(c[M>>2]|0)+81>>0]|0){q=0;break}q=c[M+104>>2]|0;a[q+(j*20|0)+1>>0]=-3;c[q+(j*20|0)+16>>2]=p<<16>>16;q=0}while(0);do if(!(c[R+56>>2]|0))Im(f,R,I,c[P>>2]|0,c[Q>>2]|0,r,p,(a[L>>0]|0)==0&1,11,w,v);else{j=c[R+64>>2]|0;o:do if(!j)p=0;else while(1){if((c[j>>2]|0)==(T|0)){p=j;break o}j=c[j+24>>2]|0;if(!j){p=0;break}}while(0);o=c[H>>2]|0;o=(o|0)==0?f:o;n=o+204|0;m=c[n>>2]|0;l=o+252|0;p:do if((m|0)>0){j=c[l>>2]|0;k=0;do{if((c[j+(k<<2)>>2]|0)==(R|0))break p;k=k+1|0}while((k|0)<(m|0));k=l;S=295}else{k=l;j=c[l>>2]|0;S=295}while(0);q:do if((S|0)==295){do if(!(mb()|0)){S=(m<<2)+4|0;j=sb(j,S,((S|0)<0)<<31>>31)|0;if(!j)break;c[k>>2]=j;S=c[n>>2]|0;c[n>>2]=S+1;c[j+(S<<2)>>2]=R;break q}while(0);j=c[o>>2]|0;k=j+81|0;if(a[k>>0]|0)break;if(a[j+82>>0]|0)break;a[k>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;S=j+272|0;c[S>>2]=(c[S>>2]|0)+1;j=c[j+236>>2]|0;if(!j)break;c[j+12>>2]=7}while(0);m=c[H>>2]|0;a[((m|0)==0?f:m)+21>>0]=1;m=M+108|0;do if(x){j=c[m>>2]|0;k=M+112|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;S=c[M+104>>2]|0;a[S+(j*20|0)>>0]=117;b[S+(j*20|0)+2>>1]=0;c[S+(j*20|0)+4>>2]=J;c[S+(j*20|0)+8>>2]=0;c[S+(j*20|0)+12>>2]=0;c[S+(j*20|0)+16>>2]=0;a[S+(j*20|0)+1>>0]=0}else Di(M,117,J,0,0)|0;if(c[H>>2]|0)break;a[f+20>>0]=0}else k=M+112|0;while(0);j=c[m>>2]|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;S=c[M+104>>2]|0;a[S+(j*20|0)>>0]=10;b[S+(j*20|0)+2>>1]=0;c[S+(j*20|0)+4>>2]=0;c[S+(j*20|0)+8>>2]=1;c[S+(j*20|0)+12>>2]=r;c[S+(j*20|0)+16>>2]=0;a[S+(j*20|0)+1>>0]=0}else j=Di(M,10,0,1,r)|0;do if(!(a[(c[M>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;k=c[M+104>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(M,k+(j*20|0)|0,p,-12);break}if(!p)break;c[k+(j*20|0)+16>>2]=p;a[l>>0]=-12;S=p+12|0;c[S>>2]=(c[S>>2]|0)+1}while(0);j=c[m>>2]|0;if((j|0)<=0)break;b[(c[M+104>>2]|0)+((j+-1|0)*20|0)+2>>1]=2}while(0);if(y){k=c[M+12>>2]|0;j=~s;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,M,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M+108>>2];sl(A);break}if(z){j=q+1|0;k=M+108|0;l=c[k>>2]|0;if((c[M+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[M+104>>2]|0;a[S+(l*20|0)>>0]=5;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=C;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else Di(M,5,C,j,0)|0;k=c[k>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((q|0)<0?k+-1|0:q)*20|0)|0;else j=59308;c[j+8>>2]=k;break}else{j=M+108|0;k=c[j>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[j>>2]=k+1;S=c[M+104>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=q;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(M,11,0,q,0)|0;k=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((q|0)<0?k+-1|0:q)*20|0)|0;else j=59308;c[j+8>>2]=k;break}}while(0);do if(!(a[L>>0]|0)){if(c[f+120>>2]|0)break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!D)break;j=M+108|0;k=c[j>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[j>>2]=k+1;f=c[M+104>>2]|0;a[f+(k*20|0)>>0]=81;b[f+(k*20|0)+2>>1]=0;c[f+(k*20|0)+4>>2]=D;c[f+(k*20|0)+8>>2]=1;c[f+(k*20|0)+12>>2]=0;c[f+(k*20|0)+16>>2]=0;a[f+(k*20|0)+1>>0]=0}else Di(M,81,D,1,0)|0;Wi(M,1);if(a[(c[M>>2]|0)+81>>0]|0)break;yc(c[M+116>>2]|0,44614,-1,1,0)|0}while(0);if(O)c[O+240>>2]=N}else i=0}else i=0}else i=0;while(0);qi(T,g);if(h|0)ni(T,h);if(!i){Ra=U;return}if(T|0){if(c[T+480>>2]|0){Xd(T,i);Ra=U;return}h=i;if((c[T+304>>2]|0)>>>0<=h>>>0?(c[T+308>>2]|0)>>>0>h>>>0:0){T=T+300|0;c[i>>2]=c[T>>2];c[T>>2]=i;Ra=U;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Ra=U;return}else{T=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Ra=U;return}}function tj(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;Aa=Ra;Ra=Ra+128|0;ea=Aa+48|0;aa=Aa+40|0;S=Aa+32|0;V=Aa+24|0;U=Aa+16|0;T=Aa+8|0;r=Aa;da=Aa+88|0;fa=Aa+56|0;va=Aa+52|0;c[va>>2]=0;za=c[f>>2]|0;a:do if((c[f+36>>2]|0)==0?(y=za+81|0,(a[y>>0]|0)==0):0){m=c[g+8>>2]|0;if(!m)l=g+12|0;else{n=c[za+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0;l=n+(l<<4)|0}ya=bd(f,0,c[g+16>>2]|0,c[l>>2]|0)|0;l=c[f>>2]|0;m=g+24|0;n=c[m>>2]|0;do if(n|0){if(l|0?c[l+480>>2]|0:0){Vi(l,n);break}ua=n+32|0;wa=(c[ua>>2]|0)+-1|0;c[ua>>2]=wa;if(!wa)Vi(l,n)}while(0);c[m>>2]=ya;if(ya|0){wa=ya+32|0;c[wa>>2]=(c[wa>>2]|0)+1;b:do if(a[g+45>>0]&2){p=c[g+72>>2]|0;l=c[ya+8>>2]|0;c:do if(l|0){q=d[208+(d[p>>0]|0)>>0]|0;while(1){n=c[l>>2]|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-q|0;if(!(wa<<24>>24==0|(m|0)!=0)){o=p;do{n=n+1|0;o=o+1|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(m|0)!=0))}if(!m)break;l=c[l+20>>2]|0;if(!l)break c}c[g+76>>2]=l;break b}while(0);c[r>>2]=p;c[r+4>>2]=0;cd(f,41107,r);a[f+17>>0]=1;break a}while(0);n=c[f>>2]|0;ua=ya+72|0;s=c[ua>>2]|0;if(!s)Z=-1e6;else{m=c[n+16>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(s|0)){Z=l;break}else l=l+1|0}do if(!(0==0?(c[n+32>>2]&262144|0)==0:0)?(t=c[(c[n+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){if((s|0)!=(t|0)?(u=c[t+48>>2]|0,(u|0)!=0):0){r=ya+68|0;q=u;l=0;do{p=c[q+8>>2]|0;if((c[p+24>>2]|0)==(s|0)){n=c[p+4>>2]|0;o=c[ya>>2]|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(wa<<24>>24==0|(m|0)!=0))do{n=n+1|0;o=o+1|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(m|0)!=0));if(!m){if(!l)l=c[r>>2]|0;c[p+32>>2]=l;l=p}}q=c[q>>2]|0}while((q|0)!=0);if(!l)xa=43}else xa=43;if((xa|0)==43){l=c[ya+68>>2]|0;if(!l){xa=65;break}}if(!h){m=0;n=l;do{if((a[n+8>>0]|0)==122)m=m|d[n+9>>0];n=c[n+32>>2]|0}while((n|0)!=0)}else{m=0;x=l;do{d:do if((a[x+8>>0]|0)==122){n=c[x+16>>2]|0;e:do if(n|0){w=c[h>>2]|0;if((w|0)<=0)break d;v=c[n+4>>2]|0;if((v|0)<=0)break d;s=c[n>>2]|0;q=0;while(1){t=c[h+4+(q*20|0)+4>>2]|0;u=d[208+(d[t>>0]|0)>>0]|0;r=0;do{o=c[s+(r<<3)>>2]|0;wa=a[o>>0]|0;n=(d[208+(wa&255)>>0]|0)-u|0;if(!(wa<<24>>24==0|(n|0)!=0)){p=t;do{o=o+1|0;p=p+1|0;wa=a[o>>0]|0;n=(d[208+(wa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(n|0)!=0))}if(!n)break e;r=r+1|0}while((r|0)<(v|0));q=q+1|0;if((q|0)>=(w|0))break d}}while(0);m=m|d[x+9>>0]}while(0);x=c[x+32>>2]|0}while((x|0)!=0)}if(!m)xa=65}else xa=65;while(0);if((xa|0)==65){m=0;l=0}sa=(c[ya+12>>2]|0)!=0;if((Sk(f,ya)|0)==0?(Fm(f,ya,m)|0)==0:0){_=f+40|0;ga=c[_>>2]|0;s=ga+1|0;c[_>>2]=s;ha=ya+36|0;ba=ya+8|0;o=c[ba>>2]|0;f:do if(c[ha>>2]&32)if(!o){p=0;o=ga;n=0}else{n=o;while(1){xa=n+55|0;if(((d[xa>>0]|d[xa+1>>0]<<8)&3)==2){xa=73;break f}n=c[n+20>>2]|0;if(!n){n=0;xa=73;break}}}else{n=0;xa=73}while(0);if((xa|0)==73)if(!o){p=0;o=ga}else{p=0;r=ga;q=s;do{r=(n|0)==(o|0)?q:r;q=q+1|0;p=p+1|0;o=c[o+20>>2]|0}while((o|0)!=0);c[_>>2]=q;o=r}$=(k|0)!=0;if($){o=c[k+28>>2]|0;s=c[k+32>>2]|0;c[_>>2]=ga}Y=g+48|0;c[Y>>2]=o;ta=ya+42|0;t=p+2+(p+(b[ta>>1]|0)<<2)|0;g:do if(c[za+272>>2]|0)if(!(a[y>>0]|0))xa=89;else break a;else{do if(!(0<0|(0==0?(e[za+276>>1]|0)>>>0<t>>>0:0))){q=za+300|0;r=c[q>>2]|0;if(r|0){c[q>>2]=c[r>>2];wa=za+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=r;break g}q=za+296|0;r=c[q>>2]|0;if(!r){q=za+292|0;break}else{c[q>>2]=c[r>>2];wa=za+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=r;break g}}else q=za+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;xa=89}while(0);if((xa|0)==89)wa=_d(za,t,0)|0;if(wa|0){ra=wa+(b[ta>>1]<<2)|0;ca=ra+(p<<2)|0;W=p+1|0;gw(ca|0,1,W|0)|0;a[ca+W>>0]=0;qa=b[ta>>1]|0;q=qa<<16>>16;if(qa<<16>>16>0)gw(wa|0,-1,((q|0)>1?q:1)<<2|0)|0;X=fa+12|0;c[X>>2]=0;c[X+4>>2]=0;c[X+8>>2]=0;c[X+12>>2]=0;c[X+16>>2]=0;c[fa>>2]=f;c[fa+4>>2]=g;c[fa+8>>2]=k;X=fa+24|0;b[X>>1]=512;h:do if((c[h>>2]|0)>0){F=da+4|0;H=da+8|0;I=da+12|0;J=da+24|0;K=(n|0)==0;M=za+16|0;N=ya+4|0;O=fa+20|0;P=f+200|0;Q=f+240|0;R=ya+40|0;B=0;t=0;D=0;E=0;i:while(1){C=h+4+(E*20|0)|0;u=c[C>>2]|0;if(u){v=e[X>>1]|0;b[X>>1]=v&28655;q=c[fa>>2]|0;c[da>>2]=q;c[F>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=fa;w=u+24|0;r=q;pa=r+208|0;qa=(c[pa>>2]|0)+(c[w>>2]|0)|0;c[pa>>2]=qa;r=c[(c[r>>2]|0)+120>>2]|0;if((r|0)<(qa|0)){xa=98;break}_j(da,u)|0;q=c[da>>2]|0;qa=q+208|0;c[qa>>2]=(c[qa>>2]|0)-(c[w>>2]|0);qa=b[X>>1]|0;pa=u+4|0;c[pa>>2]=c[pa>>2]|qa&-32752&65535;b[X>>1]=v&36880|qa&65535;if((c[O>>2]|0)>0)break;if((c[q+36>>2]|0)>=1){xa=919;break h}}q=b[ta>>1]|0;j:do if(q<<16>>16>0){A=c[N>>2]|0;x=c[h+4+(E*20|0)+4>>2]|0;z=d[208+(d[x>>0]|0)>>0]|0;w=q<<16>>16;y=0;while(1){v=c[A+(y<<4)>>2]|0;qa=a[v>>0]|0;q=(d[208+(qa&255)>>0]|0)-z|0;if(!(qa<<24>>24==0|(q|0)!=0)){r=x;u=v;do{u=u+1|0;r=r+1|0;qa=a[u>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(!q)break;q=y+1|0;if((q|0)<(w|0))y=q;else{xa=114;break j}}do if((y|0)==(b[R>>1]|0)){r=c[C>>2]|0;t=1;q=D}else{if(K){r=B;q=D;break}r=B;q=(a[A+(y<<4)+15>>0]&1)==0?D:1}while(0);c[wa+(y<<2)>>2]=E;z=q;w=r;x=t}else{x=c[h+4+(E*20|0)+4>>2]|0;xa=114}while(0);if((xa|0)==114){xa=0;if(!K){xa=128;break}v=a[x>>0]|0;u=d[208+(v&255)>>0]|0;q=u+-95|0;v=v<<24>>24==0;if(!(v|(q|0)!=0)){r=58070;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}do if(q|0){q=u+-114|0;if(!(v|(q|0)!=0)){r=40352;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(!q)break;q=u+-111|0;if(!(v|(q|0)!=0)){r=58078;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(q|0){xa=128;break i}}while(0);y=-1;z=D;w=c[C>>2]|0;x=1;v=40352}q=c[ya>>2]|0;r=c[(c[M>>2]|0)+(Z<<4)>>2]|0;t=c[f>>2]|0;do if(!(a[t+165>>0]|0)){if(a[P>>0]|0)break;u=c[t+312>>2]|0;if(!u)break;q=$a[u&127](c[t+316>>2]|0,23,q,v,r,c[Q>>2]|0)|0;if((q|0)==1){xa=134;break i}if((q|2|0)!=2){xa=136;break i}if((q|0)!=2)break;c[wa+(y<<2)>>2]=-1}while(0);E=E+1|0;if((E|0)>=(c[h>>2]|0)){S=w;N=x;O=z;xa=140;break h}else{B=w;t=x;D=z}}if((xa|0)==98){c[T>>2]=r;cd(q,41637,T)}else if((xa|0)==128){c[U>>2]=x;cd(f,44776,U);a[f+17>>0]=1;xa=918;break}else if((xa|0)==134){cd(f,39216,V);c[f+12>>2]=23;xa=919;break}else if((xa|0)==136){cd(f,39231,S);c[f+12>>2]=1;xa=919;break}xa=919}else{S=0;N=0;O=0;xa=140}while(0);k:do if((xa|0)==140){pa=(N&255)+(O&255)|0;ja=pa&255;M=ya+56|0;oa=((c[M>>2]|0)!=0)<<31>>31;qa=g+64|0;c[qa>>2]=oa;c[qa+4>>2]=((oa|0)<0)<<31>>31;pa=pa&255;l:do if(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)ia=0;else{q=c[ya+16>>2]|0;y=c[ya>>2]|0;m:do if(!q)x=0;else{w=ya+40|0;r=(y|0)==0;if(!pa){if(r){u=q;q=0;while(1){if(!(c[u+8>>2]|0)){ia=2;break l}t=c[u+20>>2]|0;n:do if((t|0)>0){r=0;do{if((c[wa+(c[u+36+(r<<3)>>2]<<2)>>2]|0)>-1){q=1;break n}r=r+1|0}while((r|0)<(t|0))}while(0);u=c[u+4>>2]|0;if(!u){x=q;break m}}}v=q;q=0;while(1){t=c[v+8>>2]|0;if(t|0){qa=a[y>>0]|0;r=(d[208+(qa&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(r|0)!=0)){u=y;do{u=u+1|0;t=t+1|0;qa=a[u>>0]|0;r=(d[208+(qa&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(r|0)!=0))}if(!r){ia=2;break l}}t=c[v+20>>2]|0;o:do if((t|0)>0){r=0;do{if((c[wa+(c[v+36+(r<<3)>>2]<<2)>>2]|0)>-1){q=1;break o}r=r+1|0}while((r|0)<(t|0))}while(0);v=c[v+4>>2]|0;if(!v){x=q;break m}}}if(r){r=0;while(1){if(!(c[q+8>>2]|0)){ia=2;break l}u=c[q+20>>2]|0;p:do if((u|0)>0){t=0;do{v=c[q+36+(t<<3)>>2]|0;if((c[wa+(v<<2)>>2]|0)>-1){r=1;break p}t=t+1|0;if((v|0)==(b[w>>1]|0)){r=1;break p}}while((t|0)<(u|0))}while(0);q=c[q+4>>2]|0;if(!q){x=r;break m}}}r=0;while(1){u=c[q+8>>2]|0;if(u|0){qa=a[y>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(t|0)!=0)){v=y;do{v=v+1|0;u=u+1|0;qa=a[v>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(t|0)!=0))}if(!t){ia=2;break l}}u=c[q+20>>2]|0;q:do if((u|0)>0){t=0;do{v=c[q+36+(t<<3)>>2]|0;if((c[wa+(v<<2)>>2]|0)>-1){r=1;break q}t=t+1|0;if((v|0)==(b[w>>1]|0)){r=1;break q}}while((t|0)<(u|0))}while(0);q=c[q+4>>2]|0;if(!q){x=r;break}}}while(0);u=c[ua>>2]|0;v=c[u+68>>2]|0;if(!v){r=u+60|0;q=u+64|0}else{r=a[y>>0]|0;if(!(r<<24>>24))q=0;else{q=0;t=y;do{t=t+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[t>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[u+56>>2]|0)>>>0)|0;r=v+(q<<3)|0;q=v+(q<<3)+4|0}r=c[r>>2]|0;r:do if(!r)q=59292;else{w=d[208+(d[y>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;u=c[q+12>>2]|0;qa=a[u>>0]|0;t=(d[208+(qa&255)>>0]|0)-w|0;if(!(qa<<24>>24==0|(t|0)!=0)){v=y;do{u=u+1|0;v=v+1|0;qa=a[u>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(t|0)!=0))}if(!t)break r;if(!r){q=59292;break}}}while(0);q=c[q+8>>2]|0;if(!q){ia=x;break}r=q;q=x;while(1){if(Jm(ya,r,wa,pa)|0)if(!(a[r+26>>0]|0))q=1;else{ia=2;break l}r=c[r+12>>2]|0;if(!r){ia=q;break}}}while(0);if((j|0)==5){c[va>>2]=1;q=1}else q=0;r=c[ba>>2]|0;if(r){J=(pa|0)!=0|(ia|0)>1;z=f+44|0;A=da+20|0;B=da+4|0;C=da+24|0;D=N<<24>>24==0;E=da+20|0;F=da+4|0;H=da+24|0;I=(j|0)==11;y=0;while(1){s:do if(J|(r|0)==(n|0))xa=210;else{t=c[r+36>>2]|0;if(t|0){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[B>>2]=136;c[C>>2]=wa;_j(da,t)|0;t=a[A>>0]|0;u=t&-3;if(D){a[A>>0]=u;t=u}if(t<<24>>24){xa=210;break}}v=r+50|0;if(!(b[v>>1]|0)){xa=233;break}w=r+4|0;x=r+40|0;t:do if(D){u=0;while(1){t=b[(c[w>>2]|0)+(u<<1)>>1]|0;if(t<<16>>16>-1)t=(c[wa+(t<<16>>16<<2)>>2]|0)>>>31^1;else{t=c[(c[x>>2]|0)+4+(u*20|0)>>2]|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[F>>2]=136;c[H>>2]=wa;if(!t)t=0;else{_j(da,t)|0;t=a[E>>0]|0}t=(t&-3)<<24>>24!=0&1}u=u+1|0;if(t|0)break t;if(u>>>0>=(e[v>>1]|0)>>>0){xa=233;break s}}}else{u=0;while(1){t=b[(c[w>>2]|0)+(u<<1)>>1]|0;if(t<<16>>16>-1)t=(c[wa+(t<<16>>16<<2)>>2]|0)>>>31^1;else{t=c[(c[x>>2]|0)+4+(u*20|0)>>2]|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[F>>2]=136;c[H>>2]=wa;if(!t)t=0;else{_j(da,t)|0;t=a[E>>0]|0}t=t<<24>>24!=0&1}u=u+1|0;if(t|0)break t;if(u>>>0>=(e[v>>1]|0)>>>0){xa=233;break s}}}while(0);t=(c[z>>2]|0)+1|0;c[z>>2]=t+(e[r+52>>1]|0);if(!I){xa=231;break}q=(a[r+54>>0]|0)==5?1:q;xa=231}while(0);if((xa|0)==210){t=(c[z>>2]|0)+1|0;c[z>>2]=t+(e[r+52>>1]|0);xa=231}do if((xa|0)==231){xa=0;if(!t){xa=233;break}u=y+1|0}while(0);if((xa|0)==233){xa=0;u=y+1|0;a[ca+u>>0]=0;t=0}c[ra+(y<<2)>>2]=t;r=c[r+20>>2]|0;if(!r)break;else y=u}c[va>>2]=q}if(q|0)gw(ca|0,1,W|0)|0;ma=f+8|0;q=c[ma>>2]|0;if(!q){t=c[f>>2]|0;do if(!(c[f+116>>2]|0)){if(b[t+76>>1]&8)break;a[f+23>>0]=1}while(0);u:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))xa=252;else{xa=918;break k}else{do if((e[t+276>>1]|0)>=224){q=t+300|0;r=c[q>>2]|0;if(r|0){c[q>>2]=c[r>>2];qa=t+284|0;c[qa>>2]=(c[qa>>2]|0)+1;break u}q=t+296|0;r=c[q>>2]|0;if(!r){q=t+292|0;break}else{c[q>>2]=c[r>>2];qa=t+284|0;c[qa>>2]=(c[qa>>2]|0)+1;break u}}else q=t+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;xa=252}while(0);if((xa|0)==252)r=_d(t,224,0)|0;if(!r){xa=918;break}D=r+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[r>>2]=t;q=t+4|0;t=c[q>>2]|0;if(t|0)c[t+4>>2]=r;c[r+8>>2]=t;c[r+4>>2]=0;c[q>>2]=r;c[r+20>>2]=381479589;c[r+12>>2]=f;c[ma>>2]=r;Di(r,61,0,1,0)|0;la=r}else la=q;ka=f+18|0;if(!(a[ka>>0]|0)){qa=la+149|0;oa=d[qa>>0]|d[qa+1>>0]<<8|32;a[qa>>0]=oa;a[qa+1>>0]=oa>>8}J=(l|0)!=0;T=(ia|0)!=0;z=(J|T)&1;qa=f+116|0;B=c[qa>>2]|0;B=(B|0)==0?f:B;q=B+84|0;r=c[q>>2]|0;A=1<<Z;v:do if(!(r&A)){c[q>>2]=r|A;if((Z|0)!=1)break;y=c[B>>2]|0;q=y+16|0;if(c[(c[q>>2]|0)+20>>2]|0)break;if(a[B+199>>0]|0)break;r=Pe(c[y>>2]|0,0,y,da,0,542)|0;if(r|0){cd(B,32157,aa);c[B+12>>2]=r;break}oa=c[da>>2]|0;c[(c[q>>2]|0)+20>>2]=oa;q=c[y+92>>2]|0;u=c[oa+4>>2]|0;c[u+4>>2]=c[oa>>2];do if(!(b[u+22>>1]&2)){v=u+32|0;w=u+36|0;x=(c[v>>2]|0)-(c[w>>2]|0)|0;do if((q+-512|0)>>>0<65025){if(q+-1&q|0)break;c[v>>2]=q;t=u+80|0;q=c[t>>2]|0;if(!q)break;r=q+-4|0;c[t>>2]=r;q=r;do if((c[14816]|0)>>>0<=q>>>0)if((c[14817]|0)>>>0>q>>>0){c[14979]=(c[14979]|0)+-1;c[r>>2]=c[14819];c[14819]=r;oa=(c[14820]|0)+1|0;c[14820]=oa;c[14821]=(oa|0)<(c[14815]|0)&1;break}else{q=Wa[c[29352>>2]&127](r)|0;xa=274;break}else{q=Wa[c[29352>>2]&127](r)|0;xa=274}while(0);do if((xa|0)==274){c[14980]=(c[14980]|0)-q;if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{oa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);c[t>>2]=0}while(0);oa=Se(c[u>>2]|0,v,x)|0;c[w>>2]=(c[v>>2]|0)-(x&65535);if((oa|0)!=7)break;q=y+81|0;do if(!(a[q>>0]|0)){if(a[y+82>>0]|0)break;a[q>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;q=y+272|0;c[q>>2]=(c[q>>2]|0)+1;q=c[y+236>>2]|0;if(!q)break;c[q+12>>2]=7}while(0);break v}while(0)}while(0);oa=B+80|0;c[oa>>2]=c[oa>>2]|A;oa=B+20|0;a[oa>>0]=d[oa>>0]|z;if(!(c[M>>2]|0)){t=f+44|0;u=c[t>>2]|0;w=u+2|0;c[t>>2]=w;if(J|O<<24>>24!=0|T){q=w+(b[ta>>1]|0)|0;c[t>>2]=q;x=u+3|0}else{x=0;q=w}r=q+1|0;if(J|(ia|pa|0)!=0){c[t>>2]=r;y=r;v=q+2|0;q=r}else{y=w;v=r}c[t>>2]=q+(b[ta>>1]|0);F=u+1|0;aa=w;K=x;Q=y}else{F=0;v=0;aa=0;K=0;Q=0}if(sa){oa=f+240|0;na=c[oa>>2]|0;c[oa>>2]=c[ya>>2];Gm(f,ya,i,o);oa=f}else{na=0;oa=0}w:do if(!i)xa=302;else{t=e[X>>1]|0;b[X>>1]=t&28655;q=c[fa>>2]|0;c[da>>2]=q;c[da+4>>2]=125;c[da+8>>2]=126;c[da+12>>2]=0;c[da+24>>2]=fa;u=i+24|0;r=q+208|0;Z=(c[r>>2]|0)+(c[u>>2]|0)|0;c[r>>2]=Z;r=c[(c[q>>2]|0)+120>>2]|0;do if((r|0)>=(Z|0)){_j(da,i)|0;q=c[da>>2]|0;ea=q+208|0;c[ea>>2]=(c[ea>>2]|0)-(c[u>>2]|0);ea=b[X>>1]|0;da=i+4|0;c[da>>2]=c[da>>2]|ea&-32752&65535;b[X>>1]=t&36880|ea&65535;if((c[fa+20>>2]|0)>0)break;if((c[q+36>>2]|0)<1){xa=302;break w}else break w}else{c[ea>>2]=r;cd(q,41637,ea)}while(0)}while(0);x:do if((xa|0)==302){if(c[M>>2]|0){H=c[ma>>2]|0;m=c[f>>2]|0;l=c[ya+64>>2]|0;y:do if(!l)C=0;else while(1){if((c[l>>2]|0)==(m|0)){C=l;break y}l=c[l+24>>2]|0;if(!l){C=0;break}}while(0);y=b[ta>>1]|0;A=(y<<16>>16)+2|0;x=c[Y>>2]|0;F=c[_>>2]|0;c[_>>2]=F+1;D=H+108|0;l=c[D>>2]|0;E=H+112|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;r=c[H+104>>2]|0;a[r+(l*20|0)>>0]=113;b[r+(l*20|0)+2>>1]=0;c[r+(l*20|0)+4>>2]=F;c[r+(l*20|0)+8>>2]=A;c[r+(l*20|0)+12>>2]=0;c[r+(l*20|0)+16>>2]=0;a[r+(l*20|0)+1>>0]=0;r=l}else r=Di(H,113,F,A,0)|0;B=f+44|0;u=c[B>>2]|0;z=u+1|0;w=u+A|0;v=w+1|0;w=w+2|0;c[B>>2]=w;B=ql(f,g,i,0,0,4,0)|0;if(!B)break;if((b[ta>>1]|0)>0){s=u+3|0;t=H+104|0;q=0;do{l=c[wa+(q<<2)>>2]|0;z:do if((l|0)>-1){l=c[h+4+(l*20|0)>>2]|0;p=q+s|0;do if(l){if((a[l>>0]|0)!=-88){o=Jj(f,l,p)|0;break}o=c[ma>>2]|0;l=c[l+28>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[o+104>>2]|0;a[va+(n*20|0)>>0]=78;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=l;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break z}else{Di(o,78,l,p,0)|0;break z}}else o=Jj(f,0,p)|0;while(0);if((o|0)==(p|0))break;l=c[ma>>2]|0;if(!l)break;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[l+104>>2]|0;a[va+(n*20|0)>>0]=79;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=o;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(l,79,o,p,0)|0;break}}else{l=q+s|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[t>>2]|0;a[va+(m*20|0)>>0]=-92;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=x;c[va+(m*20|0)+8>>2]=q;c[va+(m*20|0)+12>>2]=l;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else Di(H,164,x,q,l)|0;l=c[D>>2]|0;if((l|0)<=0)break;b[(c[t>>2]|0)+((l+-1|0)*20|0)+2>>1]=1}while(0);q=q+1|0}while((q|0)<(b[ta>>1]|0))}do if(!(c[ha>>2]&32)){l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=-128;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=z;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,128,x,z,0)|0;p=u+2|0;if(!S){l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=-128;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=p;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0;break}else{Di(H,128,x,p,0)|0;break}}if((a[S>>0]|0)==-88){o=c[ma>>2]|0;l=c[S+28>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[o+104>>2]|0;a[va+(n*20|0)>>0]=78;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=l;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(o,78,l,p,0)|0;break}}o=Jj(f,S,p)|0;if((o|0)==(p|0))break;l=c[ma>>2]|0;if(!l)break;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[l+104>>2]|0;a[va+(n*20|0)>>0]=79;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=o;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(l,79,o,p,0)|0;break}}else{l=ba;while(1){l=c[l>>2]|0;va=l+55|0;if(((d[va>>0]|d[va+1>>0]<<8)&3)==2)break;else l=l+20|0}l=b[c[l+4>>2]>>1]|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[H+104>>2]|0;a[va+(m*20|0)>>0]=-92;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=x;c[va+(m*20|0)+8>>2]=l;c[va+(m*20|0)+12>>2]=z;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else Di(H,164,x,l,z)|0;n=u+3+l|0;l=u+2|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[H+104>>2]|0;a[va+(m*20|0)>>0]=79;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=n;c[va+(m*20|0)+8>>2]=l;c[va+(m*20|0)+12>>2]=0;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0;break}else{Di(H,79,n,l,0)|0;break}}while(0);s=(a[B+49>>0]|0)==0;do if(!s){l=c[H>>2]|0;if(!(a[l+81>>0]|0)){va=c[H+104>>2]|0;ta=va+(r*20|0)+1|0;ua=va+(r*20|0)+16|0;kg(l,a[ta>>0]|0,c[ua>>2]|0);a[ta>>0]=0;c[ua>>2]=0;a[va+(r*20|0)>>0]=-86}l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=117;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=0;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0;break}else{Di(H,117,x,0,0)|0;break}}else{l=c[qa>>2]|0;a[((l|0)==0?f:l)+20>>0]=1;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=92;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=z;c[va+(l*20|0)+8>>2]=A;c[va+(l*20|0)+12>>2]=v;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,92,z,A,v)|0;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=121;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=w;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,121,F,w,0)|0;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=122;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=v;c[va+(l*20|0)+12>>2]=w;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,122,F,v,w)|0;sl(B);l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=36;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=0;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else l=Di(H,36,F,0,0)|0;if(y<<16>>16<=-2){r=l;break}n=H+104|0;m=0;do{o=m+z|0;p=c[D>>2]|0;if((c[E>>2]|0)>(p|0)){c[D>>2]=p+1;va=c[n>>2]|0;a[va+(p*20|0)>>0]=90;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=F;c[va+(p*20|0)+8>>2]=m;c[va+(p*20|0)+12>>2]=o;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0}else Di(H,90,F,m,o)|0;m=m+1|0}while((m|0)<(A|0));r=l}while(0);q=c[qa>>2]|0;q=(q|0)==0?f:q;p=q+204|0;o=c[p>>2]|0;n=q+252|0;A:do if((o|0)>0){l=c[n>>2]|0;m=0;do{if((c[l+(m<<2)>>2]|0)==(ya|0))break A;m=m+1|0}while((m|0)<(o|0));m=n;xa=387}else{m=n;l=c[n>>2]|0;xa=387}while(0);B:do if((xa|0)==387){do if(!(mb()|0)){xa=(o<<2)+4|0;l=sb(l,xa,((xa|0)<0)<<31>>31)|0;if(!l)break;c[m>>2]=l;xa=c[p>>2]|0;c[p>>2]=xa+1;c[l+(xa<<2)>>2]=ya;break B}while(0);l=c[q>>2]|0;m=l+81|0;if(a[m>>0]|0)break;if(a[l+82>>0]|0)break;a[m>>0]=1;if((c[l+180>>2]|0)>0)c[l+264>>2]=1;ya=l+272|0;c[ya>>2]=(c[ya>>2]|0)+1;l=c[l+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;ya=c[H+104>>2]|0;a[ya+(l*20|0)>>0]=10;b[ya+(l*20|0)+2>>1]=0;c[ya+(l*20|0)+4>>2]=0;c[ya+(l*20|0)+8>>2]=A;c[ya+(l*20|0)+12>>2]=z;c[ya+(l*20|0)+16>>2]=0;a[ya+(l*20|0)+1>>0]=0}else l=Di(H,10,0,A,z)|0;do if(!(a[(c[H>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[D>>2]|0)+-1|0;m=c[H+104>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(H,m+(l*20|0)|0,C,-12);break}if(!C)break;c[m+(l*20|0)+16>>2]=C;a[n>>0]=-12;ya=C+12|0;c[ya>>2]=(c[ya>>2]|0)+1}while(0);m=c[D>>2]|0;if((m|0)>0)b[(c[H+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=(j|0)==11?2:j&65535;j=c[qa>>2]|0;a[((j|0)==0?f:j)+21>>0]=1;if(!s){sl(B);break}l=r+1|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[H+104>>2]|0;a[f+(m*20|0)>>0]=5;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=F;c[f+(m*20|0)+8>>2]=l;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(H,5,F,l,0)|0;m=c[D>>2]|0;if(!(a[(c[H>>2]|0)+81>>0]|0))l=(c[H+104>>2]|0)+(((r|0)<0?m+-1|0:r)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[H+104>>2]|0;a[f+(m*20|0)>>0]=117;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=F;c[f+(m*20|0)+8>>2]=0;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0;break}else{Di(H,117,F,0,0)|0;break}}H=f+56|0;Z=c[H>>2]|0;I=Z+-1|0;c[H>>2]=I;do if(!(0==0?(c[za+32>>2]&128|0)==0:0)){if(c[f+120>>2]|0){Y=0;break}if(!((k|0)==0&(a[ka>>0]|0)==0)){Y=0;break}r=f+44|0;q=(c[r>>2]|0)+1|0;c[r>>2]=q;r=la+108|0;t=c[r>>2]|0;if((c[la+112>>2]|0)>(t|0)){c[r>>2]=t+1;Y=c[la+104>>2]|0;a[Y+(t*20|0)>>0]=70;b[Y+(t*20|0)+2>>1]=0;c[Y+(t*20|0)+4>>2]=0;c[Y+(t*20|0)+8>>2]=q;c[Y+(t*20|0)+12>>2]=0;c[Y+(t*20|0)+16>>2]=0;a[Y+(t*20|0)+1>>0]=0;Y=q;break}else{Di(la,70,0,q,0)|0;Y=q;break}}else Y=0;while(0);C:do if(!(c[ha>>2]&32)){q=la+108|0;r=c[q>>2]|0;if((c[la+112>>2]|0)>(r|0)){c[q>>2]=r+1;E=c[la+104>>2]|0;a[E+(r*20|0)>>0]=73;b[E+(r*20|0)+2>>1]=0;c[E+(r*20|0)+4>>2]=0;c[E+(r*20|0)+8>>2]=F;c[E+(r*20|0)+12>>2]=aa;c[E+(r*20|0)+16>>2]=0;a[E+(r*20|0)+1>>0]=0;E=0;C=0;D=0;x=0;X=0;break}else{Di(la,73,0,F,aa)|0;E=0;C=0;D=0;x=0;X=0;break}}else{y=b[n+50>>1]|0;fa=f+44|0;r=c[fa>>2]|0;z=r+1|0;w=y<<16>>16;r=r+w|0;x=r+1|0;c[fa>>2]=x;if(k|0){E=x;C=y;D=z;x=0;X=0;break}A=c[_>>2]|0;c[_>>2]=A+1;t=la+108|0;q=c[t>>2]|0;u=la+112|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;fa=c[la+104>>2]|0;a[fa+(q*20|0)>>0]=73;b[fa+(q*20|0)+2>>1]=0;c[fa+(q*20|0)+4>>2]=0;c[fa+(q*20|0)+8>>2]=z;c[fa+(q*20|0)+12>>2]=r;c[fa+(q*20|0)+16>>2]=0;a[fa+(q*20|0)+1>>0]=0}else Di(la,73,0,z,r)|0;q=c[t>>2]|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;fa=c[la+104>>2]|0;a[fa+(q*20|0)>>0]=113;b[fa+(q*20|0)+2>>1]=0;c[fa+(q*20|0)+4>>2]=A;c[fa+(q*20|0)+8>>2]=w;c[fa+(q*20|0)+12>>2]=0;c[fa+(q*20|0)+16>>2]=0;a[fa+(q*20|0)+1>>0]=0}else q=Di(la,113,A,w,0)|0;r=c[ma>>2]|0;u=Ij(f,n)|0;if(!u){E=x;C=y;D=z;x=q;X=A;break}t=c[r>>2]|0;if(!(a[t+81>>0]|0)){C=c[r+104>>2]|0;E=(c[r+108>>2]|0)+-1|0;a[C+(E*20|0)+1>>0]=-9;c[C+(E*20|0)+16>>2]=u;E=x;C=y;D=z;x=q;X=A;break}if(c[t+480>>2]|0){E=x;C=y;D=z;x=q;X=A;break}fa=(c[u>>2]|0)+-1|0;c[u>>2]=fa;if(fa|0){E=x;C=y;D=z;x=q;X=A;break}r=c[u+12>>2]|0;do if(r|0){if(c[r+480>>2]|0){Xd(r,u);E=x;C=y;D=z;x=q;X=A;break C}t=u;if((c[r+304>>2]|0)>>>0>t>>>0)break;if((c[r+308>>2]|0)>>>0<=t>>>0)break;E=r+300|0;c[u>>2]=c[E>>2];c[E>>2]=u;E=x;C=y;D=z;x=q;X=A;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);E=x;C=y;D=z;x=q;X=A;break}else{E=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);E=x;C=y;D=z;x=q;X=A;break}}while(0);do if($){Tj(f,i,I,16);W=0;V=1;u=0;w=0}else{q=ql(f,g,i,0,0,(c[va>>2]|0)!=0|(ja<<24>>24!=0|(T|(J|(a[ka>>0]|0)!=0)))?4100:4108,s)|0;if(!q)break x;w=q+24|0;u=c[w>>2]|0;w=c[w+4>>2]|0;r=a[q+49>>0]|0;t=r&255;if(r<<24>>24==1){W=q;V=1;break}fa=c[qa>>2]|0;a[((fa|0)==0?f:fa)+20>>0]=1;if(r<<24>>24!=2){W=q;V=t;break}if((w|0)<0|(o|0)==(w|0)){W=q;V=2;break}W=q;V=(a[ca+(w-ga)>>0]|0)==0?t:0}while(0);do if(!(c[ha>>2]&32)){r=la+108|0;q=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=-128;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=o;c[ha+(q*20|0)+8>>2]=aa;c[ha+(q*20|0)+12>>2]=0;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else Di(la,128,o,aa,0)|0;if(V|0){M=0;break}q=c[r>>2]|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;M=c[la+104>>2]|0;a[M+(q*20|0)>>0]=-108;b[M+(q*20|0)+2>>1]=0;c[M+(q*20|0)+4>>2]=F;c[M+(q*20|0)+8>>2]=aa;c[M+(q*20|0)+12>>2]=0;c[M+(q*20|0)+16>>2]=0;a[M+(q*20|0)+1>>0]=0;M=0;break}else{Di(la,148,F,aa,0)|0;M=0;break}}else{B=C<<16>>16;if(C<<16>>16>0){r=n+4|0;q=0;do{Vj(la,ya,o,b[(c[r>>2]|0)+(q<<1)>>1]|0,q+D|0);q=q+1|0}while((q|0)!=(B|0))}if(V|0){if(!x){M=B;E=D;break}q=c[la>>2]|0;if(a[q+81>>0]|0){M=B;E=D;break}M=c[la+104>>2]|0;ha=M+(x*20|0)+1|0;E=M+(x*20|0)+16|0;kg(q,a[ha>>0]|0,c[E>>2]|0);a[ha>>0]=0;c[E>>2]=0;a[M+(x*20|0)>>0]=-86;M=B;E=D;break}y=gl(za,n)|0;z=la+108|0;q=c[z>>2]|0;A=la+112|0;if((c[A>>2]|0)>(q|0)){c[z>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=92;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=D;c[ha+(q*20|0)+8>>2]=B;c[ha+(q*20|0)+12>>2]=E;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else q=Di(la,92,D,B,E)|0;r=c[la>>2]|0;D:do if(!(a[r+81>>0]|0)){if((q|0)<0)q=(c[z>>2]|0)+-1|0;r=c[la+104>>2]|0;t=r+(q*20|0)|0;do if(C<<16>>16<=-1){x=r+(q*20|0)+1|0;if(a[x>>0]|0)break;if(C<<16>>16==-3){c[r+(q*20|0)+16>>2]=y;a[x>>0]=-3;break D}if(!y)break D;c[r+(q*20|0)+16>>2]=y;a[x>>0]=C;if(C<<16>>16!=-12)break D;ha=y+12|0;c[ha>>2]=(c[ha>>2]|0)+1;break D}while(0);Ei(la,t,y,B)}else{if(C<<16>>16==-12)break;kg(r,B,y)}while(0);q=c[z>>2]|0;if((c[A>>2]|0)>(q|0)){c[z>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=-124;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=X;c[ha+(q*20|0)+8>>2]=E;c[ha+(q*20|0)+12>>2]=D;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else q=Di(la,132,X,E,D)|0;if(a[(c[la>>2]|0)+81>>0]|0){M=0;break}M=c[la+104>>2]|0;a[M+(q*20|0)+1>>0]=-3;c[M+(q*20|0)+16>>2]=B;M=0}while(0);U=(k|0)==0;E:do if(U){q=(V|0)==2;if(!q)sl(W);F:do if(sa)xa=511;else{do if(V|0){if((u|0)>-1)a[ca+(u-ga)>>0]=0;if((w|0)>-1)a[ca+(w-ga)>>0]=0;if(!q)break;if(p>>>0<=(w>>>31^1)>>>0)break;r=la+108|0;p=c[r>>2]|0;q=la+112|0;if((c[q>>2]|0)>(p|0)){c[r>>2]=p+1;D=c[la+104>>2]|0;a[D+(p*20|0)>>0]=17;D=D+(p*20|0)+1|0;F=D+19|0;do{a[D>>0]=0;D=D+1|0}while((D|0)<(F|0))}else p=Di(la,17,0,0,0)|0;Hm(f,ya,109,0,ga,ca,0,0)|0;if(p|0){t=c[r>>2]|0;if(!(a[(c[la>>2]|0)+81>>0]|0))p=(c[la+104>>2]|0)+(((p|0)<0?t+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=t}if((w|0)==(o|0)|(u|0)==(o|0)){xa=521;break F}else{xa=515;break F}}while(0);Hm(f,ya,109,0,ga,ca,0,0)|0;xa=511}while(0);do if((xa|0)==511){if(V|0){if((w|0)==(o|0)|(sa|(u|0)==(o|0))){xa=520;break}r=la+108|0;q=la+112|0;xa=515;break}if(!n){r=la+108|0;q=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;k=c[la+104>>2]|0;a[k+(q*20|0)>>0]=41;b[k+(q*20|0)+2>>1]=0;c[k+(q*20|0)+4>>2]=F;c[k+(q*20|0)+8>>2]=I;c[k+(q*20|0)+12>>2]=aa;c[k+(q*20|0)+16>>2]=0;a[k+(q*20|0)+1>>0]=0}else q=Di(la,41,F,I,aa)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;R=c[la+104>>2]|0;a[R+(p*20|0)>>0]=31;b[R+(p*20|0)+2>>1]=0;c[R+(p*20|0)+4>>2]=o;c[R+(p*20|0)+8>>2]=q;c[R+(p*20|0)+12>>2]=aa;c[R+(p*20|0)+16>>2]=0;a[R+(p*20|0)+1>>0]=0;R=0;P=q;break E}else{Di(la,31,o,q,aa)|0;R=0;P=q;break E}}u=(c[H>>2]|0)+-1|0;c[H>>2]=u;r=la+108|0;p=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;k=c[la+104>>2]|0;a[k+(p*20|0)>>0]=36;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=X;c[k+(p*20|0)+8>>2]=I;c[k+(p*20|0)+12>>2]=0;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else Di(la,36,X,I,0)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;q=c[la+104>>2]|0;a[q+(p*20|0)>>0]=127;b[q+(p*20|0)+2>>1]=0;c[q+(p*20|0)+4>>2]=X;c[q+(p*20|0)+8>>2]=E;c[q+(p*20|0)+12>>2]=0;c[q+(p*20|0)+16>>2]=0;a[q+(p*20|0)+1>>0]=0;q=p}else q=Di(la,127,X,E,0)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;k=c[la+104>>2]|0;a[k+(p*20|0)>>0]=28;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=o;c[k+(p*20|0)+8>>2]=u;c[k+(p*20|0)+12>>2]=E;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else p=Di(la,28,o,u,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){R=q;P=u;break E}R=c[la+104>>2]|0;a[R+(p*20|0)+1>>0]=-3;c[R+(p*20|0)+16>>2]=0;R=q;P=u;break E}while(0);do if((xa|0)==515){p=c[r>>2]|0;if((c[q>>2]|0)>(p|0)){c[r>>2]=p+1;xa=c[la+104>>2]|0;a[xa+(p*20|0)>>0]=28;b[xa+(p*20|0)+2>>1]=0;c[xa+(p*20|0)+4>>2]=o;c[xa+(p*20|0)+8>>2]=I;c[xa+(p*20|0)+12>>2]=E;c[xa+(p*20|0)+16>>2]=0;a[xa+(p*20|0)+1>>0]=0}else p=Di(la,28,o,I,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){xa=520;break}xa=c[la+104>>2]|0;a[xa+(p*20|0)+1>>0]=-3;c[xa+(p*20|0)+16>>2]=M;xa=520}while(0);if((xa|0)==520)if((V|0)==1)t=I;else xa=521;if((xa|0)==521){t=(c[H>>2]|0)+-1|0;c[H>>2]=t}p=(n|0)==0?aa:E;q=la+108|0;r=c[q>>2]|0;if((c[la+112>>2]|0)>(r|0)){c[q>>2]=r+1;R=c[la+104>>2]|0;a[R+(r*20|0)>>0]=50;b[R+(r*20|0)+2>>1]=0;c[R+(r*20|0)+4>>2]=p;c[R+(r*20|0)+8>>2]=I;c[R+(r*20|0)+12>>2]=0;c[R+(r*20|0)+16>>2]=0;a[R+(r*20|0)+1>>0]=0;R=0;P=t;break}else{Di(la,50,p,I,0)|0;R=0;P=t;break}}else{R=0;P=I}while(0);I=N<<24>>24==0;do if(!I){do if(S){if((a[S>>0]|0)!=-88){t=Jj(f,S,Q)|0;xa=551;break}t=c[ma>>2]|0;p=c[S+28>>2]|0;q=t+108|0;r=c[q>>2]|0;if((c[t+112>>2]|0)>(r|0)){c[q>>2]=r+1;k=c[t+104>>2]|0;a[k+(r*20|0)>>0]=78;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=p;c[k+(r*20|0)+8>>2]=Q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(t,78,p,Q,0)|0;break}}else{t=Jj(f,0,Q)|0;xa=551}while(0);do if((xa|0)==551){if((t|0)==(Q|0))break;p=c[ma>>2]|0;if(!p)break;q=p+108|0;r=c[q>>2]|0;if((c[p+112>>2]|0)>(r|0)){c[q>>2]=r+1;k=c[p+104>>2]|0;a[k+(r*20|0)>>0]=79;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=t;c[k+(r*20|0)+8>>2]=Q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(p,79,t,Q,0)|0;break}}while(0);p=la+108|0;q=c[p>>2]|0;if((c[la+112>>2]|0)>(q|0)){c[p>>2]=q+1;k=c[la+104>>2]|0;a[k+(q*20|0)>>0]=15;b[k+(q*20|0)+2>>1]=0;c[k+(q*20|0)+4>>2]=Q;c[k+(q*20|0)+8>>2]=0;c[k+(q*20|0)+12>>2]=0;c[k+(q*20|0)+16>>2]=0;a[k+(q*20|0)+1>>0]=0;break}else{Di(la,15,Q,0,0)|0;break}}while(0);G:do if(J|(O<<24>>24!=0|T)){if(T)D=Km(f,ya)|0;else D=0;H=(h|0)==0;J=H?121:122;F=(l|0)==0;H:do if(F)p=0;else{if(H){p=0;r=l;while(1){do if((J|0)==(d[r+8>>0]|0)){if(!(a[r+9>>0]&3))break;q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;I:do if(!q)xa=574;else while(1){if((c[q>>2]|0)==(r|0)?(c[q+12>>2]|0)==(j|0):0)break I;q=c[q+4>>2]|0;if(!q){xa=574;break}}while(0);if((xa|0)==574){xa=0;q=Nm(f,r,ya,j)|0;if(!q)break}p=c[q+16>>2]|p}while(0);r=c[r+32>>2]|0;if(!r)break H}}p=0;C=l;do{J:do if((J|0)==(d[C+8>>0]|0)){if(!(a[C+9>>0]&3))break;q=c[C+16>>2]|0;K:do if(q|0){B=c[h>>2]|0;if((B|0)<=0)break J;A=c[q+4>>2]|0;if((A|0)<=0)break J;x=c[q>>2]|0;u=0;while(1){y=c[h+4+(u*20|0)+4>>2]|0;z=d[208+(d[y>>0]|0)>>0]|0;w=0;do{r=c[x+(w<<3)>>2]|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-z|0;if(!(k<<24>>24==0|(q|0)!=0)){t=y;do{r=r+1|0;t=t+1|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(q|0)!=0))}if(!q)break K;w=w+1|0}while((w|0)<(A|0));u=u+1|0;if((u|0)>=(B|0))break J}}while(0);q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;L:do if(!q)xa=595;else while(1){if((c[q>>2]|0)==(C|0)?(c[q+12>>2]|0)==(j|0):0)break L;q=c[q+4>>2]|0;if(!q){xa=595;break}}while(0);if((xa|0)==595){xa=0;q=Nm(f,C,ya,j)|0;if(!q)break}p=c[q+16>>2]|p}while(0);C=c[C+32>>2]|0}while((C|0)!=0)}while(0);q=p|D;M:do if((b[ta>>1]|0)>0){r=ya+4|0;t=la+108|0;u=la+112|0;w=la+104|0;if((q|0)==-1){p=0;while(1){Vj(la,ya,o,p,p+K|0);p=p+1|0;if((p|0)>=(b[ta>>1]|0))break M}}p=0;do{if(p>>>0<32?(1<<p&q|0)!=0:0)xa=606;else xa=605;do if((xa|0)==605){xa=0;if(a[(c[r>>2]|0)+(p<<4)+15>>0]&1){xa=606;break}x=p+K|0;y=c[t>>2]|0;if((c[u>>2]|0)>(y|0)){c[t>>2]=y+1;k=c[w>>2]|0;a[k+(y*20|0)>>0]=73;b[k+(y*20|0)+2>>1]=0;c[k+(y*20|0)+4>>2]=0;c[k+(y*20|0)+8>>2]=x;c[k+(y*20|0)+12>>2]=0;c[k+(y*20|0)+16>>2]=0;a[k+(y*20|0)+1>>0]=0;break}else{Di(la,73,0,x,0)|0;break}}while(0);if((xa|0)==606){xa=0;Vj(la,ya,o,p,p+K|0)}p=p+1|0}while((p|0)<(b[ta>>1]|0))}while(0);do if((n|0)==0&I){n=la+108|0;p=c[n>>2]|0;if((c[la+112>>2]|0)>(p|0)){c[n>>2]=p+1;n=c[la+104>>2]|0;a[n+(p*20|0)>>0]=78;b[n+(p*20|0)+2>>1]=0;c[n+(p*20|0)+4>>2]=aa;c[n+(p*20|0)+8>>2]=Q;c[n+(p*20|0)+12>>2]=0;c[n+(p*20|0)+16>>2]=0;a[n+(p*20|0)+1>>0]=0;n=0;break}else{Di(la,78,aa,Q,0)|0;n=0;break}}while(0);if(F){p=0;I=1;break}if(H){p=0;r=l;while(1){do if((J|0)==(d[r+8>>0]|0)){if(!(a[r+9>>0]&1))break;q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;N:do if(!q)xa=626;else while(1){if((c[q>>2]|0)==(r|0)?(c[q+12>>2]|0)==(j|0):0)break N;q=c[q+4>>2]|0;if(!q){xa=626;break}}while(0);if((xa|0)==626){xa=0;q=Nm(f,r,ya,j)|0;if(!q)break}p=c[q+20>>2]|p}while(0);r=c[r+32>>2]|0;if(!r){H=1;I=0;break G}}}p=0;C=l;while(1){O:do if((J|0)==(d[C+8>>0]|0)){if(!(a[C+9>>0]&1))break;q=c[C+16>>2]|0;P:do if(q|0){B=c[h>>2]|0;if((B|0)<=0)break O;A=c[q+4>>2]|0;if((A|0)<=0)break O;x=c[q>>2]|0;u=0;while(1){y=c[h+4+(u*20|0)+4>>2]|0;z=d[208+(d[y>>0]|0)>>0]|0;w=0;do{r=c[x+(w<<3)>>2]|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-z|0;if(!(k<<24>>24==0|(q|0)!=0)){t=y;do{r=r+1|0;t=t+1|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(q|0)!=0))}if(!q)break P;w=w+1|0}while((w|0)<(A|0));u=u+1|0;if((u|0)>=(B|0))break O}}while(0);q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;Q:do if(!q)xa=647;else while(1){if((c[q>>2]|0)==(C|0)?(c[q+12>>2]|0)==(j|0):0)break Q;q=c[q+4>>2]|0;if(!q){xa=647;break}}while(0);if((xa|0)==647){xa=0;q=Nm(f,C,ya,j)|0;if(!q)break}p=c[q+20>>2]|p}while(0);C=c[C+32>>2]|0;if(!C){H=0;I=0;break}}}else{p=0;H=(h|0)==0;I=1}while(0);if((b[ta>>1]|0)>0){z=ya+40|0;A=la+108|0;B=la+112|0;C=la+104|0;m=m&1;y=(m|0)==0;x=0;do{R:do if((x|0)==(b[z>>1]|0)){q=x+v|0;r=c[A>>2]|0;if((c[B>>2]|0)>(r|0)){c[A>>2]=r+1;k=c[C>>2]|0;a[k+(r*20|0)>>0]=73;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=0;c[k+(r*20|0)+8>>2]=q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(la,73,0,q,0)|0;break}}else{q=c[wa+(x<<2)>>2]|0;if((q|0)<=-1){do if(!(y|x>>>0>31)){if(1<<x&p|0)break;q=x+v|0;r=c[A>>2]|0;if((c[B>>2]|0)>(r|0)){c[A>>2]=r+1;k=c[C>>2]|0;a[k+(r*20|0)>>0]=73;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=0;c[k+(r*20|0)+8>>2]=q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break R}else{Di(la,73,0,q,0)|0;break R}}while(0);Vj(la,ya,o,x,x+v|0);break}q=c[h+4+(q*20|0)>>2]|0;w=x+v|0;do if(q){if((a[q>>0]|0)!=-88){u=Jj(f,q,w)|0;break}u=c[ma>>2]|0;q=c[q+28>>2]|0;r=u+108|0;t=c[r>>2]|0;if((c[u+112>>2]|0)>(t|0)){c[r>>2]=t+1;k=c[u+104>>2]|0;a[k+(t*20|0)>>0]=78;b[k+(t*20|0)+2>>1]=0;c[k+(t*20|0)+4>>2]=q;c[k+(t*20|0)+8>>2]=w;c[k+(t*20|0)+12>>2]=0;c[k+(t*20|0)+16>>2]=0;a[k+(t*20|0)+1>>0]=0;break R}else{Di(u,78,q,w,0)|0;break R}}else u=Jj(f,0,w)|0;while(0);if((u|0)==(w|0))break;q=c[ma>>2]|0;if(!q)break;r=q+108|0;t=c[r>>2]|0;if((c[q+112>>2]|0)>(t|0)){c[r>>2]=t+1;k=c[q+104>>2]|0;a[k+(t*20|0)>>0]=79;b[k+(t*20|0)+2>>1]=0;c[k+(t*20|0)+4>>2]=u;c[k+(t*20|0)+8>>2]=w;c[k+(t*20|0)+12>>2]=0;c[k+(t*20|0)+16>>2]=0;a[k+(t*20|0)+1>>0]=0;break}else{Di(q,79,u,w,0)|0;break}}while(0);x=x+1|0}while((x|0)<(b[ta>>1]|0))}else m=m&1;do if(m|0){zk(la,ya,v);if(!I){B=f+23|0;C=f+44|0;A=l;do{S:do if((a[A+8>>0]|0)==122){if((a[A+9>>0]|0)!=1)break;m=c[A+16>>2]|0;T:do if(!(H|(m|0)==0)){z=c[h>>2]|0;if((z|0)<=0)break S;y=c[m+4>>2]|0;if((y|0)<=0)break S;u=c[m>>2]|0;r=0;while(1){w=c[h+4+(r*20|0)+4>>2]|0;x=d[208+(d[w>>0]|0)>>0]|0;t=0;do{p=c[u+(t<<3)>>2]|0;k=a[p>>0]|0;m=(d[208+(k&255)>>0]|0)-x|0;if(!(k<<24>>24==0|(m|0)!=0)){q=w;do{p=p+1|0;q=q+1|0;k=a[p>>0]|0;m=(d[208+(k&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(m|0)!=0))}if(!m)break T;t=t+1|0}while((t|0)<(y|0));r=r+1|0;if((r|0)>=(z|0))break S}}while(0);m=c[ma>>2]|0;U:do if(!m){q=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[q+76>>1]&8)break;a[B>>0]=1}while(0);V:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))xa=707;else{m=0;break U}else{do if((e[q+276>>1]|0)>=224){p=q+300|0;m=c[p>>2]|0;if(m|0){c[p>>2]=c[m>>2];k=q+284|0;c[k>>2]=(c[k>>2]|0)+1;break V}p=q+296|0;m=c[p>>2]|0;if(!m){m=q+292|0;break}else{c[p>>2]=c[m>>2];k=q+284|0;c[k>>2]=(c[k>>2]|0)+1;break V}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;xa=707}while(0);if((xa|0)==707){xa=0;m=_d(q,224,0)|0}if(!m){m=0;break}D=m+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[m>>2]=q;p=q+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=m;c[m+8>>2]=q;c[m+4>>2]=0;c[p>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ma>>2]=m;Di(m,61,0,1,0)|0}while(0);p=c[qa>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;W:do if(!p)xa=717;else while(1){if((c[p>>2]|0)==(A|0)?(c[p+12>>2]|0)==(j|0):0)break W;p=c[p+4>>2]|0;if(!p){xa=717;break}}while(0);if((xa|0)==717){xa=0;p=Nm(f,A,ya,j)|0;if(!p)break}if(!(c[A>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}q=(c[C>>2]|0)+1|0;c[C>>2]=q;t=c[p+8>>2]|0;u=m+108|0;p=c[u>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[u>>2]=p+1;k=c[m+104>>2]|0;a[k+(p*20|0)>>0]=45;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=aa;c[k+(p*20|0)+8>>2]=P;c[k+(p*20|0)+12>>2]=q;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else p=Di(m,45,aa,P,q)|0;do if(!(a[(c[m>>2]|0)+81>>0]|0)){if((p|0)<0)p=(c[u>>2]|0)+-1|0;q=c[m+104>>2]|0;r=q+(p*20|0)+1|0;if(a[r>>0]|0){Ei(m,q+(p*20|0)|0,t,-4);break}if(!t)break;c[q+(p*20|0)+16>>2]=t;a[r>>0]=-4}while(0);p=c[u>>2]|0;if((p|0)<=0)break;b[(c[m+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=w}while(0);A=c[A+32>>2]|0}while((A|0)!=0)}p=la+108|0;m=c[p>>2]|0;q=(c[la+112>>2]|0)>(m|0);do if(!n)if(q){c[p>>2]=m+1;k=c[la+104>>2]|0;a[k+(m*20|0)>>0]=31;b[k+(m*20|0)+2>>1]=0;c[k+(m*20|0)+4>>2]=o;c[k+(m*20|0)+8>>2]=P;c[k+(m*20|0)+12>>2]=aa;c[k+(m*20|0)+16>>2]=0;a[k+(m*20|0)+1>>0]=0;break}else{Di(la,31,o,P,aa)|0;break}else{if(q){c[p>>2]=m+1;k=c[la+104>>2]|0;a[k+(m*20|0)>>0]=28;b[k+(m*20|0)+2>>1]=0;c[k+(m*20|0)+4>>2]=o;c[k+(m*20|0)+8>>2]=P;c[k+(m*20|0)+12>>2]=E;c[k+(m*20|0)+16>>2]=0;a[k+(m*20|0)+1>>0]=0}else m=Di(la,28,o,P,E)|0;if(a[(c[la>>2]|0)+81>>0]|0)break;k=c[la+104>>2]|0;a[k+(m*20|0)+1>>0]=-3;c[k+(m*20|0)+16>>2]=M}while(0);m=b[ta>>1]|0;if(m<<16>>16<=0)break;q=ya+40|0;p=0;do{do if((c[wa+(p<<2)>>2]|0)<0){if((p|0)==(b[q>>1]|0))break;Vj(la,ya,o,p,p+v|0);m=b[ta>>1]|0}while(0);p=p+1|0}while((p|0)<(m<<16>>16|0))}while(0);do if(!sa){Tm(f,ya,ra,o,s,Q,aa,ja,j&255,P,va,wa,0);if(T)Lm(f,ya,aa,0,wa,pa);r=(pa|0)==0;t=(c[va>>2]|pa|0)==0;do if(t)q=0;else{p=la+108|0;m=c[p>>2]|0;q=(c[la+112>>2]|0)>(m|0);if(!n)if(q){c[p>>2]=m+1;q=c[la+104>>2]|0;a[q+(m*20|0)>>0]=31;b[q+(m*20|0)+2>>1]=0;c[q+(m*20|0)+4>>2]=o;c[q+(m*20|0)+8>>2]=0;c[q+(m*20|0)+12>>2]=aa;c[q+(m*20|0)+16>>2]=0;a[q+(m*20|0)+1>>0]=0;q=m;break}else{q=Di(la,31,o,0,aa)|0;break}if(q){c[p>>2]=m+1;va=c[la+104>>2]|0;a[va+(m*20|0)>>0]=28;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=o;c[va+(m*20|0)+8>>2]=0;c[va+(m*20|0)+12>>2]=E;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else m=Di(la,28,o,0,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){q=m;break}q=c[la+104>>2]|0;a[q+(m*20|0)+1>>0]=-3;c[q+(m*20|0)+16>>2]=M;q=m}while(0);Mm(f,ya,o,s,ra,-1);do if(!(r&(ia|0)<2)){m=la+108|0;p=c[m>>2]|0;if((c[la+112>>2]|0)>(p|0)){c[m>>2]=p+1;va=c[la+104>>2]|0;a[va+(p*20|0)>>0]=123;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=o;c[va+(p*20|0)+8>>2]=0;c[va+(p*20|0)+12>>2]=0;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0;break}else{Di(la,123,o,0,0)|0;break}}while(0);if(!t){p=c[la+108>>2]|0;if(!(a[(c[la>>2]|0)+81>>0]|0))m=(c[la+104>>2]|0)+(((q|0)<0?p+-1|0:q)*20|0)|0;else m=59308;c[m+8>>2]=p}if(!T){Um(f,ya,o,s,Q,ra,(V|0)==2?6:4,0,0);break}Lm(f,ya,0,Q,wa,pa);Um(f,ya,o,s,Q,ra,(V|0)==2?6:4,0,0);if(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)break;t=c[ya>>2]|0;q=c[ua>>2]|0;r=c[q+68>>2]|0;if(!r){o=q+60|0;m=q+64|0}else{o=a[t>>0]|0;if(!(o<<24>>24))m=0;else{m=0;p=t;do{p=p+1|0;m=G(m+(d[208+(o&255)>>0]|0)|0,-1640531535)|0;o=a[p>>0]|0}while(o<<24>>24!=0)}m=(m>>>0)%((c[q+56>>2]|0)>>>0)|0;o=r+(m<<3)|0;m=r+(m<<3)+4|0}o=c[o>>2]|0;X:do if(!o)m=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){m=c[m>>2]|0;o=o+-1|0;q=c[m+12>>2]|0;va=a[q>>0]|0;p=(d[208+(va&255)>>0]|0)-s|0;if(!(va<<24>>24==0|(p|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;va=a[q>>0]|0;p=(d[208+(va&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(va<<24>>24==0|(p|0)!=0))}if(!p)break X;if(!o){m=59292;break}}}while(0);m=c[m+8>>2]|0;if(!m)break;v=f+23|0;w=f+44|0;do{do if(Jm(ya,m,wa,pa)|0){r=Rm(f,ya,m,h)|0;if(!r)break;o=c[ma>>2]|0;Y:do if(!o){q=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[q+76>>1]&8)break;a[v>>0]=1}while(0);Z:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))xa=802;else{o=0;break Y}else{do if((e[q+276>>1]|0)>=224){p=q+300|0;o=c[p>>2]|0;if(o|0){c[p>>2]=c[o>>2];va=q+284|0;c[va>>2]=(c[va>>2]|0)+1;break Z}p=q+296|0;o=c[p>>2]|0;if(!o){o=q+292|0;break}else{c[p>>2]=c[o>>2];va=q+284|0;c[va>>2]=(c[va>>2]|0)+1;break Z}}else o=q+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;xa=802}while(0);if((xa|0)==802){xa=0;o=_d(q,224,0)|0}if(!o){o=0;break}D=o+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[o>>2]=q;p=q+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=o;c[o+8>>2]=q;c[o+4>>2]=0;c[p>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[ma>>2]=o;Di(o,61,0,1,0)|0}while(0);p=c[qa>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;_:do if(!p)xa=812;else while(1){if((c[p>>2]|0)==(r|0)?(c[p+12>>2]|0)==2:0)break _;p=c[p+4>>2]|0;if(!p){xa=812;break}}while(0);if((xa|0)==812){xa=0;p=Nm(f,r,ya,2)|0;if(!p)break}if(!(c[r>>2]|0))u=0;else{u=(c[f>>2]|0)+32|0;u=bw(c[u>>2]|0,c[u+4>>2]|0,13)|0;L()|0;u=u&1^1}q=(c[w>>2]|0)+1|0;c[w>>2]=q;s=c[p+8>>2]|0;t=o+108|0;p=c[t>>2]|0;if((c[o+112>>2]|0)>(p|0)){c[t>>2]=p+1;va=c[o+104>>2]|0;a[va+(p*20|0)>>0]=45;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=aa;c[va+(p*20|0)+8>>2]=0;c[va+(p*20|0)+12>>2]=q;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0}else p=Di(o,45,aa,0,q)|0;do if(!(a[(c[o>>2]|0)+81>>0]|0)){if((p|0)<0)p=(c[t>>2]|0)+-1|0;q=c[o+104>>2]|0;r=q+(p*20|0)+1|0;if(a[r>>0]|0){Ei(o,q+(p*20|0)|0,s,-4);break}if(!s)break;c[q+(p*20|0)+16>>2]=s;a[r>>0]=-4}while(0);p=c[t>>2]|0;if((p|0)<=0)break;b[(c[o+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=u}while(0);m=c[m+12>>2]|0}while((m|0)!=0)}while(0);z=(Y|0)!=0;do if(z){m=la+108|0;o=c[m>>2]|0;if((c[la+112>>2]|0)>(o|0)){c[m>>2]=o+1;va=c[la+104>>2]|0;a[va+(o*20|0)>>0]=83;b[va+(o*20|0)+2>>1]=0;c[va+(o*20|0)+4>>2]=Y;c[va+(o*20|0)+8>>2]=1;c[va+(o*20|0)+12>>2]=0;c[va+(o*20|0)+16>>2]=0;a[va+(o*20|0)+1>>0]=0;break}else{Di(la,83,Y,1,0)|0;break}}while(0);if(!I){x=f+23|0;y=f+44|0;do{$:do if((a[l+8>>0]|0)==122){if((a[l+9>>0]|0)!=2)break;m=c[l+16>>2]|0;aa:do if(!(H|(m|0)==0)){w=c[h>>2]|0;if((w|0)<=0)break $;v=c[m+4>>2]|0;if((v|0)<=0)break $;s=c[m>>2]|0;q=0;while(1){t=c[h+4+(q*20|0)+4>>2]|0;u=d[208+(d[t>>0]|0)>>0]|0;r=0;do{o=c[s+(r<<3)>>2]|0;va=a[o>>0]|0;m=(d[208+(va&255)>>0]|0)-u|0;if(!(va<<24>>24==0|(m|0)!=0)){p=t;do{o=o+1|0;p=p+1|0;va=a[o>>0]|0;m=(d[208+(va&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(va<<24>>24==0|(m|0)!=0))}if(!m)break aa;r=r+1|0}while((r|0)<(v|0));q=q+1|0;if((q|0)>=(w|0))break $}}while(0);m=c[ma>>2]|0;ba:do if(!m){p=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[p+76>>1]&8)break;a[x>>0]=1}while(0);ca:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))xa=862;else{m=0;break ba}else{do if((e[p+276>>1]|0)>=224){o=p+300|0;m=c[o>>2]|0;if(m|0){c[o>>2]=c[m>>2];va=p+284|0;c[va>>2]=(c[va>>2]|0)+1;break ca}o=p+296|0;m=c[o>>2]|0;if(!m){m=p+292|0;break}else{c[o>>2]=c[m>>2];va=p+284|0;c[va>>2]=(c[va>>2]|0)+1;break ca}}else m=p+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;xa=862}while(0);if((xa|0)==862){xa=0;m=_d(p,224,0)|0}if(!m){m=0;break}D=m+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[m>>2]=p;o=p+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=m;c[m+8>>2]=p;c[m+4>>2]=0;c[o>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ma>>2]=m;Di(m,61,0,1,0)|0}while(0);o=c[qa>>2]|0;o=c[((o|0)==0?f:o)+260>>2]|0;da:do if(!o)xa=872;else while(1){if((c[o>>2]|0)==(l|0)?(c[o+12>>2]|0)==(j|0):0)break da;o=c[o+4>>2]|0;if(!o){xa=872;break}}while(0);if((xa|0)==872){xa=0;o=Nm(f,l,ya,j)|0;if(!o)break}if(!(c[l>>2]|0))t=0;else{t=(c[f>>2]|0)+32|0;t=bw(c[t>>2]|0,c[t+4>>2]|0,13)|0;L()|0;t=t&1^1}p=(c[y>>2]|0)+1|0;c[y>>2]=p;r=c[o+8>>2]|0;s=m+108|0;o=c[s>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[s>>2]=o+1;va=c[m+104>>2]|0;a[va+(o*20|0)>>0]=45;b[va+(o*20|0)+2>>1]=0;c[va+(o*20|0)+4>>2]=aa;c[va+(o*20|0)+8>>2]=P;c[va+(o*20|0)+12>>2]=p;c[va+(o*20|0)+16>>2]=0;a[va+(o*20|0)+1>>0]=0}else o=Di(m,45,aa,P,p)|0;do if(!(a[(c[m>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[s>>2]|0)+-1|0;p=c[m+104>>2]|0;q=p+(o*20|0)+1|0;if(a[q>>0]|0){Ei(m,p+(o*20|0)|0,r,-4);break}if(!r)break;c[p+(o*20|0)+16>>2]=r;a[q>>0]=-4}while(0);o=c[s>>2]|0;if((o|0)<=0)break;b[(c[m+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=t}while(0);l=c[l+32>>2]|0}while((l|0)!=0)}ea:do switch(V|0){case 1:break;case 2:{m=c[la+12>>2]|0;l=~P;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,la,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[la+108>>2];sl(W);break}default:{if(!n){l=la+108|0;m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[la+104>>2]|0;a[j+(m*20|0)>>0]=11;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=0;c[j+(m*20|0)+8>>2]=P;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break ea}else{Di(la,11,0,P,0)|0;break ea}}m=c[la+12>>2]|0;l=~P;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0){mk(m,la,l);l=la+108|0}else{j=la+108|0;c[(c[m+64>>2]|0)+(l<<2)>>2]=c[j>>2];l=j}m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[la+104>>2]|0;a[j+(m*20|0)>>0]=5;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=X;c[j+(m*20|0)+8>>2]=R;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break ea}else{Di(la,5,X,R,0)|0;break ea}}}while(0);m=c[la+12>>2]|0;l=0-Z|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,la,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[la+108>>2];do if(!(a[ka>>0]|0)){if(!(U&(c[f+120>>2]|0)==0))break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!z)break;l=la+108|0;m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;f=c[la+104>>2]|0;a[f+(m*20|0)>>0]=81;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=Y;c[f+(m*20|0)+8>>2]=1;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(la,81,Y,1,0)|0;Wi(la,1);if(a[(c[la>>2]|0)+81>>0]|0)break;yc(c[la+116>>2]|0,44795,-1,1,0)|0}while(0);if(!oa){xa=918;break}c[oa+240>>2]=na;xa=918}while(0);if((xa|0)==918?za|0:0)xa=919;do if((xa|0)==919){if(c[za+480>>2]|0){Xd(za,wa);break a}l=wa;if((c[za+304>>2]|0)>>>0<=l>>>0){if((c[za+308>>2]|0)>>>0<=l>>>0)break;f=za+300|0;c[wa>>2]=c[f>>2];c[f>>2]=wa;break a}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](wa);break}else{f=Wa[c[29352>>2]&127](wa)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](wa);break}}}}}while(0);qi(za,g);if(h|0)ri(za,h);if(!i){Ra=Aa;return}ni(za,i);Ra=Aa;return}function uj(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=Ra;Ra=Ra+48|0;k=u;r=u+8|0;t=c[e>>2]|0;if(!f)p=0;else p=c[f>>2]|0;s=(g|0)==0;do if(!(s|(h|0)==0)){l=a[h>>0]|0;o=g+4|0;i=c[o>>2]|0;switch(l<<24>>24){case -125:break;case -88:{j=a[h+38>>0]|0;q=6;break}default:{j=l;q=6}}if((q|0)==6){switch(j<<24>>24){case -87:{j=h+20|0;q=9;break}case -125:{j=c[h+20>>2]|0;q=9;break}default:j=1}if((q|0)==9)j=c[c[j>>2]>>2]|0;if((i|0)!=(j|0)){c[k>>2]=i;c[k+4>>2]=j;cd(e,38869,k);n=f;break}}a:do if((i|0)>0){m=e+272|0;n=h+20|0;j=0;i=l;while(1){switch(i<<24>>24){case -125:{i=ej(e,170,0,0)|0;if(!i)i=0;else{b[i+32>>1]=j;c[i+12>>2]=h}break}case -87:{i=c[(c[n>>2]|0)+4+(j*20|0)>>2]|0;if(!i){l=0;i=0;q=19}else q=18;break}default:{i=h;q=18}}if((q|0)==18){l=i;i=dk(c[e>>2]|0,i,0,0)|0;q=19}b:do if((q|0)==19){q=0;k=c[m>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break b}c[k>>2]=i}}while(0);f=nj(c[e>>2]|0,f,i)|0;if(f|0){l=(c[g>>2]|0)+(j<<3)|0;c[f+4+(((c[f>>2]|0)+-1|0)*20|0)+4>>2]=c[l>>2];c[l>>2]=0}j=j+1|0;i=c[o>>2]|0;if((j|0)>=(i|0))break a;i=a[h>>0]|0}}while(0);if((a[t+81>>0]|0)==0?(f|0)!=0&(a[h>>0]|0)==-125:0){n=c[f+4+(p*20|0)>>2]|0;c[n+16>>2]=h;c[n+28>>2]=i;h=0;n=f}else n=f}else n=f;while(0);if((d[e+200>>0]|0)>1?(q=r+8|0,c[q>>2]=0,c[q+4>>2]=0,c[q+8>>2]=0,c[q+12>>2]=0,c[q+16>>2]=0,c[r>>2]=e,c[r+4>>2]=124,h|0):0)_j(r,h)|0;if(h|0)ni(t,h);if(s){Ra=u;return n|0}m=g+4|0;h=c[g>>2]|0;c:do if((c[m>>2]|0)>0){f=t+480|0;j=t+304|0;k=t+308|0;l=t+300|0;if(!t){i=0;while(1){h=c[h+(i<<3)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);i=i+1|0;h=c[g>>2]|0;if((i|0)>=(c[m>>2]|0))break c}}i=0;do{h=c[h+(i<<3)>>2]|0;do if(h|0){if(c[f>>2]|0){Xd(t,h);break}s=h;if((c[j>>2]|0)>>>0<=s>>>0?(c[k>>2]|0)>>>0>s>>>0:0){c[h>>2]=c[l>>2];c[l>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;h=c[g>>2]|0}while((i|0)<(c[m>>2]|0))}while(0);d:do if(h){do if(t|0){i=t+480|0;if(!(c[i>>2]|0)){f=h;if((c[t+304>>2]|0)>>>0>f>>>0)break;if((c[t+308>>2]|0)>>>0<=f>>>0)break;s=t+300|0;c[h>>2]=c[s>>2];c[s>>2]=h}else Xd(t,h);h=i;q=70;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);q=68;break}else{q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);q=68;break}}else q=68;while(0);if((q|0)==68)if(t){h=t+480|0;q=70}if((q|0)==70){if(c[h>>2]|0){Xd(t,g);Ra=u;return n|0}s=g;if((c[t+304>>2]|0)>>>0<=s>>>0?(c[t+308>>2]|0)>>>0>s>>>0:0){t=t+300|0;c[g>>2]=c[t>>2];c[t>>2]=g;Ra=u;return n|0}}if(!g){Ra=u;return n|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=u;return n|0}else{t=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=u;return n|0}return 0}\nfunction vj(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;Ga=Ra;Ra=Ra+336|0;ma=Ga+232|0;ia=Ga+224|0;ga=Ga+216|0;ca=Ga+208|0;aa=Ga+200|0;$=Ga+184|0;X=Ga+176|0;T=Ga+160|0;R=Ga+152|0;Q=Ga+144|0;A=Ga+136|0;x=Ga+128|0;t=Ga+120|0;s=Ga+112|0;q=Ga+104|0;ta=Ga+304|0;ja=Ga+272|0;la=Ga;xa=Ga+268|0;wa=Ga+264|0;U=Ga+240|0;c[xa>>2]=0;c[wa>>2]=0;Fa=c[f>>2]|0;V=f+36|0;do if((c[V>>2]|0)==0?(ba=Fa+81|0,(a[ba>>0]|0)==0):0){na=U+4|0;c[na>>2]=0;if(h)if((c[h+8>>2]&512|0)!=0?(c[h+52>>2]|0)==0:0){Ea=c[h>>2]|0;c[h>>2]=0;pi(Fa,h,1);Da=0}else{Da=h;Ea=0}else{Da=0;Ea=0}h=c[g+8>>2]|0;if(!h)l=g+12|0;else{m=c[(c[f>>2]|0)+16>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(h|0))break;else l=l+1|0;l=m+(l<<4)|0}Ca=bd(f,0,c[g+16>>2]|0,c[l>>2]|0)|0;l=c[f>>2]|0;ha=g+24|0;h=c[ha>>2]|0;do if(h|0){if(l|0?c[l+480>>2]|0:0){Vi(l,h);break}za=h+32|0;Aa=(c[za>>2]|0)+-1|0;c[za>>2]=Aa;if(!Aa)Vi(l,h)}while(0);c[ha>>2]=Ca;a:do if(Ca){Aa=Ca+32|0;c[Aa>>2]=(c[Aa>>2]|0)+1;b:do if(a[g+45>>0]&2){o=c[g+72>>2]|0;l=c[Ca+8>>2]|0;c:do if(l|0){p=d[208+(d[o>>0]|0)>>0]|0;while(1){m=c[l>>2]|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-p|0;if(!(Aa<<24>>24==0|(h|0)!=0)){n=o;do{m=m+1|0;n=n+1|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(h|0)!=0))}if(!h)break;l=c[l+20>>2]|0;if(!l)break c}c[g+76>>2]=l;break b}while(0);c[q>>2]=o;c[q+4>>2]=0;cd(f,41107,q);a[f+17>>0]=1;l=0;Ba=1038;break a}while(0);ra=Ca+72|0;h=c[ra>>2]|0;m=c[Fa+16>>2]|0;if(!h)W=-1e6;else{l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(h|0)){W=l;break}else l=l+1|0}n=c[Ca>>2]|0;h=c[m+(W<<4)>>2]|0;l=c[f>>2]|0;if(((a[l+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(r=c[l+312>>2]|0,(r|0)!=0):0){l=$a[r&127](c[l+316>>2]|0,18,n,0,h,c[f+240>>2]|0)|0;if((l|0)==1){cd(f,39216,s);c[f+12>>2]=23;l=0;Ba=1038;break}if((l|2|0)!=2){cd(f,39231,t);c[f+12>>2]=1;l=0;Ba=1038;break}if(l|0){l=0;Ba=1038;break}l=c[f>>2]|0}S=Ca+36|0;pa=(c[S>>2]|0)>>>5&1;do if(!(0==0?(c[l+32>>2]&262144|0)==0:0)?(u=c[(c[l+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){r=c[ra>>2]|0;if((r|0)!=(u|0)?(v=c[u+48>>2]|0,(v|0)!=0):0){q=Ca+68|0;p=v;l=0;do{o=c[p+8>>2]|0;do if((c[o+24>>2]|0)==(r|0)){m=c[o+4>>2]|0;n=c[Ca>>2]|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(Aa<<24>>24==0|(h|0)!=0))do{m=m+1|0;n=n+1|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(h|0)!=0));if(h|0)break;if(!l)l=c[q>>2]|0;c[o+32>>2]=l;l=o}while(0);p=c[p>>2]|0}while((p|0)!=0);if(!l)Ba=56}else Ba=56;if((Ba|0)==56){l=c[Ca+68>>2]|0;if(!l){Ba=62;break}}h=0;m=l;do{if((a[m+8>>0]|0)==120)h=h|d[m+9>>0];m=c[m+32>>2]|0}while((m|0)!=0);if(h)t=l;else Ba=62}else Ba=62;while(0);if((Ba|0)==62){h=0;t=0}oa=(c[Ca+12>>2]|0)!=0;if((Sk(f,Ca)|0)==0?(Fm(f,Ca,h)|0)==0:0){ya=f+8|0;l=c[ya>>2]|0;if(!l){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;d:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=79;else{l=0;Ba=1038;break a}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];Aa=n+284|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break d}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];Aa=n+284|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break d}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=79}while(0);if((Ba|0)==79)m=_d(n,224,0)|0;if(!m){l=0;Ba=1038;break}p=m+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ya>>2]=m;Di(m,61,0,1,0)|0;Aa=m}else Aa=l;za=f+18|0;if(!(a[za>>0]|0)){va=Aa+149|0;ua=d[va>>0]|d[va+1>>0]<<8|32;a[va>>0]=ua;a[va+1>>0]=ua>>8}va=(Da|0)!=0;sa=(t|0)!=0;s=(va|sa)&1;ua=f+116|0;v=c[ua>>2]|0;v=(v|0)==0?f:v;l=v+84|0;m=c[l>>2]|0;u=1<<W;e:do if(((m&u|0)==0?(c[l>>2]=m|u,(W|0)==1):0)?(y=c[v>>2]|0,w=y+16|0,(c[(c[w>>2]|0)+20>>2]|0)==0):0){if(a[v+199>>0]|0)break;l=Pe(c[y>>2]|0,0,y,ta,0,542)|0;if(l|0){cd(v,32157,x);c[v+12>>2]=l;break}qa=c[ta>>2]|0;c[(c[w>>2]|0)+20>>2]=qa;l=c[y+92>>2]|0;o=c[qa+4>>2]|0;c[o+4>>2]=c[qa>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;q=o+36|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;qa=(c[14820]|0)+1|0;c[14820]=qa;c[14821]=(qa|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=101;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=101}while(0);do if((Ba|0)==101){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{qa=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-qa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);qa=Se(c[o>>2]|0,p,r)|0;c[q>>2]=(c[p>>2]|0)-(r&65535);if((qa|0)!=7)break;l=y+81|0;do if(!(a[l>>0]|0)){if(a[y+82>>0]|0)break;a[l>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;l=y+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[y+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break e}while(0)}while(0);qa=v+80|0;c[qa>>2]=c[qa>>2]|u;qa=v+20|0;a[qa>>0]=d[qa>>0]|s;qa=(i|0)==0;f:do if(qa?(P=c[f>>2]|0,(Da|0)!=0):0){if(c[f+264>>2]|0){Ba=424;break}if(c[Da+64>>2]|0){Ba=424;break}w=P+16|0;u=c[w>>2]|0;l=c[u+28>>2]|0;if(!(a[f+146>>0]|0)){s=c[ra>>2]|0;do if((s|0)!=(l|0)){l=c[l+48>>2]|0;if(!l)break;r=Ca+68|0;m=0;do{q=c[l+8>>2]|0;do if((c[q+24>>2]|0)==(s|0)){o=c[q+4>>2]|0;p=c[Ca>>2]|0;ka=a[o>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(n|0)!=0))do{o=o+1|0;p=p+1|0;ka=a[o>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(n|0)!=0));if(n|0)break;if(!m)m=c[r>>2]|0;c[q+32>>2]=m;m=q}while(0);l=c[l>>2]|0}while((l|0)!=0);if(m|0){Ba=424;break f}}while(0);if(c[Ca+68>>2]|0){Ba=424;break}}if(c[Ca+56>>2]|0){Ba=424;break}do if((j|0)==11){if((b[Ca+40>>1]|0)>-1?(z=a[Ca+48>>0]|0,z<<24>>24!=11):0){I=z&255;break}I=2}else I=j;while(0);n=c[Da+32>>2]|0;if((c[n>>2]|0)!=1){Ba=424;break}if(c[n+28>>2]|0){Ba=424;break}if(c[Da+36>>2]|0){Ba=424;break}if(c[Da+48>>2]|0){Ba=424;break}if(c[Da+40>>2]|0){Ba=424;break}if(c[Da+60>>2]|0){Ba=424;break}if(c[Da+52>>2]|0){Ba=424;break}if(c[Da+8>>2]&1|0){Ba=424;break}l=c[Da>>2]|0;if((c[l>>2]|0)!=1){Ba=424;break}if((a[c[l+4>>2]>>0]|0)!=-84){Ba=424;break}m=c[n+8>>2]|0;if(!m)l=n+12|0;else{l=0;while(1)if((c[u+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0;l=u+(l<<4)|0}K=bd(f,0,c[n+16>>2]|0,c[l>>2]|0)|0;if(!K){Ba=424;break}x=K+28|0;y=Ca+28|0;if((c[x>>2]|0)==(c[y>>2]|0)?(c[K+72>>2]|0)==(c[ra>>2]|0):0){Ba=424;break}O=K+36|0;if((c[O>>2]^c[S>>2])&32|0){Ba=424;break}if(c[K+56>>2]|0){Ba=424;break}if(c[K+12>>2]|0){Ba=424;break}l=b[Ca+42>>1]|0;if(l<<16>>16!=(b[K+42>>1]|0)){Ba=424;break}B=Ca+40|0;if((b[B>>1]|0)!=(b[K+40>>1]|0)){Ba=424;break}r=l<<16>>16;if(l<<16>>16>0){p=c[Ca+4>>2]|0;q=c[K+4>>2]|0;o=0;do{if((a[p+(o<<4)+13>>0]|0)!=(a[q+(o<<4)+13>>0]|0)){Ba=424;break f}m=c[p+(o<<4)+8>>2]|0;n=c[q+(o<<4)+8>>2]|0;do if(!m)l=((n|0)!=0)<<31>>31;else{if(!n){Ba=424;break f}ka=a[m>>0]|0;l=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(ka<<24>>24==0|(l|0)!=0)break;do{m=m+1|0;n=n+1|0;ka=a[m>>0]|0;l=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(l|0)!=0))}while(0);if(l|0){Ba=424;break f}if(a[p+(o<<4)+12>>0]|0?(a[q+(o<<4)+12>>0]|0)==0:0){Ba=424;break f}do if(o|0){l=c[p+(o<<4)+4>>2]|0;m=(l|0)==0;n=c[q+(o<<4)+4>>2]|0;if(m^(n|0)==0){Ba=424;break f}if(m)break;if(Bu(c[l+8>>2]|0,c[n+8>>2]|0)|0){Ba=424;break f}}while(0);o=o+1|0}while((o|0)<(r|0))}H=Ca+8|0;l=c[H>>2]|0;if(!l)v=0;else{o=K+8|0;p=K+72|0;m=0;while(1){m=(a[l+54>>0]|0)==0?m:1;n=c[o>>2]|0;if(!n){Ba=424;break f}while(1){if(Xm(l,n)|0)break;n=c[n+20>>2]|0;if(!n){Ba=424;break f}}do if((c[n+44>>2]|0)==(c[l+44>>2]|0)){if((c[p>>2]|0)!=(c[ra>>2]|0))break;n=c[7389]|0;if(!n){Ba=424;break f}if(!(Wa[n&127](411)|0)){Ba=424;break f}}while(0);l=c[l+20>>2]|0;if(!l){v=m;break}}}m=c[Ca+24>>2]|0;do if(m|0){n=c[K+24>>2]|0;if(!n){Ba=424;break f}l=c[n>>2]|0;if((l|0)!=(c[m>>2]|0)){Ba=424;break f}if((l|0)<=0)break;l=0;do{if((a[n+4+(l*20|0)+12>>0]|0)!=(a[m+4+(l*20|0)+12>>0]|0)){Ba=424;break f}if(bk(0,c[n+4+(l*20|0)>>2]|0,c[m+4+(l*20|0)>>2]|0,-1)|0){Ba=424;break f}l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);l=c[P+32>>2]|0;if((l&16384|0)==0&0==0){if(!((l&128|0)==0&0==0)){Ba=424;break}}else if(!((l&128|0)==0&0==0&(c[Ca+16>>2]|0)==0)){Ba=424;break}n=c[K+72>>2]|0;if(!n)N=-1e6;else{m=c[w>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(n|0)){N=l;break}else l=l+1|0}l=c[ya>>2]|0;g:do if(!l){n=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);h:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=217;else{M=0;break g}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];ka=n+284|0;c[ka>>2]=(c[ka>>2]|0)+1;break h}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];ka=n+284|0;c[ka>>2]=(c[ka>>2]|0)+1;break h}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=217}while(0);if((Ba|0)==217)m=_d(n,224,0)|0;if(!m){M=0;break}p=m+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ya>>2]=m;Di(m,61,0,1,0)|0;M=m}else M=l;while(0);o=c[ua>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<<N;i:do if(!(m&n)){c[l>>2]=m|n;if((N|0)!=1)break;s=c[o>>2]|0;l=s+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[s>>2]|0,0,s,ta,0,542)|0;if(m|0){cd(o,32157,A);c[o+12>>2]=m;break}ka=c[ta>>2]|0;c[(c[l>>2]|0)+20>>2]=ka;l=c[s+92>>2]|0;o=c[ka+4>>2]|0;c[o+4>>2]=c[ka>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;q=o+36|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ka=(c[14820]|0)+1|0;c[14820]=ka;c[14821]=(ka|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=237;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=237}while(0);do if((Ba|0)==237){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ka=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ka=Se(c[o>>2]|0,p,r)|0;c[q>>2]=(c[p>>2]|0)-(r&65535);if((ka|0)!=7)break;l=s+81|0;do if(!(a[l>>0]|0)){if(a[s+82>>0]|0)break;a[l>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;l=s+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[s+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break i}while(0)}while(0);u=f+40|0;E=c[u>>2]|0;J=E+1|0;c[u>>2]=E+2;u=Wm(f,W,Ca)|0;F=f+19|0;l=a[F>>0]|0;do if(l<<24>>24){ka=l+-1<<24>>24;a[F>>0]=ka;m=c[f+148+((ka&255)<<2)>>2]|0;if(!(ka<<24>>24)){n=f+44|0;l=n;n=c[n>>2]|0;Ba=254;break}else{C=l+-2<<24>>24;a[F>>0]=C;D=m;C=c[f+148+((C&255)<<2)>>2]|0;break}}else{l=f+44|0;n=(c[l>>2]|0)+1|0;c[l>>2]=n;m=n;Ba=254}while(0);if((Ba|0)==254){C=n+1|0;c[l>>2]=C;D=m}Gj(f,J,W,Ca,109);A=P+24|0;do if(!(c[A>>2]&4)){if((b[B>>1]|0)<0){if(!((I+-1|0)>>>0>1|((v|0)!=0|(c[H>>2]|0)!=0))){z=0;break}}else if(!((I+-1|0)>>>0>1|(v|0)!=0)){z=0;break}o=M+108|0;l=c[o>>2]|0;m=M+112|0;if((c[m>>2]|0)>(l|0)){c[o>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=36;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else l=Di(M,36,J,0,0)|0;n=c[o>>2]|0;if((c[m>>2]|0)>(n|0)){c[o>>2]=n+1;p=c[M+104>>2]|0;a[p+(n*20|0)>>0]=11;p=p+(n*20|0)+1|0;q=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(q|0))}else n=Di(M,11,0,0,0)|0;m=c[o>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((l|0)<0?m+-1|0:l)*20|0)|0;else l=59308;c[l+8>>2]=m;z=n}else z=0;while(0);do if(!(c[O>>2]&32)){Gj(f,E,N,K,108);r=M+108|0;l=c[r>>2]|0;s=M+112|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=36;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=E;c[q+(l*20|0)+8>>2]=0;c[q+(l*20|0)+12>>2]=0;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=l}else q=Di(M,36,E,0,0)|0;j:do if((b[B>>1]|0)>-1){l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=-128;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else l=Di(M,128,E,C,0)|0;m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;p=c[M+104>>2]|0;a[p+(m*20|0)>>0]=31;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=J;c[p+(m*20|0)+8>>2]=0;c[p+(m*20|0)+12>>2]=C;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0;p=m}else p=Di(M,31,J,0,C)|0;m=b[B>>1]|0;o=c[f>>2]|0;n=c[Ca>>2]|0;if(m<<16>>16>-1){m=c[(c[Ca+4>>2]|0)+(m<<16>>16<<4)>>2]|0;c[Q>>2]=n;c[Q+4>>2]=m;n=1555;m=dd(o,40358,Q)|0}else{c[R>>2]=n;n=2579;m=dd(o,44808,R)|0}Uj(f,n,I,m,-7,2);n=c[r>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))m=(c[M+104>>2]|0)+(((p|0)<0?n+-1|0:p)*20|0)|0;else m=59308;c[m+8>>2]=n;if((u|0)<=0)break;m=c[ya>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;ka=c[m+104>>2]|0;a[ka+(o*20|0)>>0]=-105;b[ka+(o*20|0)+2>>1]=0;c[ka+(o*20|0)+4>>2]=u;c[ka+(o*20|0)+8>>2]=C;c[ka+(o*20|0)+12>>2]=0;c[ka+(o*20|0)+16>>2]=0;a[ka+(o*20|0)+1>>0]=0;break}else{Di(m,151,u,C,0)|0;break}}else{do if(!(c[H>>2]|0)){if(c[A>>2]&8|0)break;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=121;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;break j}else{l=Di(M,121,J,C,0)|0;break j}}while(0);l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=-128;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;break}else{l=Di(M,128,E,C,0)|0;break}}while(0);m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=127;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=1;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,127,E,D,1)|0;do if(c[A>>2]&4){m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;p=c[M+104>>2]|0;a[p+(m*20|0)>>0]=-126;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=J;c[p+(m*20|0)+8>>2]=0;c[p+(m*20|0)+12>>2]=0;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0;p=57;break}else{Di(M,130,J,0,0)|0;p=57;break}}else p=41;while(0);m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=122;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=C;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else m=Di(M,122,J,D,C)|0;do if(!(a[(c[M>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;n=c[M+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=Ca;a[o>>0]=-6;break}else{Ei(M,n+(m*20|0)|0,Ca,-6);break}}while(0);m=c[r>>2]|0;if((m|0)>0)b[(c[M+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=p;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=5;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,5,E,l,0)|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=117;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,117,E,0,0)|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;y=c[M+104>>2]|0;a[y+(l*20|0)>>0]=117;b[y+(l*20|0)+2>>1]=0;c[y+(l*20|0)+4>>2]=J;c[y+(l*20|0)+8>>2]=0;c[y+(l*20|0)+12>>2]=0;c[y+(l*20|0)+16>>2]=0;a[y+(l*20|0)+1>>0]=0;y=q;break}else{Di(M,117,J,0,0)|0;y=q;break}}else{Hj(f,W,c[y>>2]|0,1,c[Ca>>2]|0);Hj(f,N,c[x>>2]|0,0,c[K>>2]|0);y=0}while(0);l=c[H>>2]|0;if(l|0){u=K+8|0;v=M+108|0;w=M+112|0;x=M+104|0;s=l;do{l=u;while(1){o=c[l>>2]|0;if(!(Xm(s,o)|0))l=o+20|0;else break}l=c[o+44>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=108;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=N;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,108,E,l,N)|0;l=c[ya>>2]|0;n=Ij(f,o)|0;k:do if(n|0){m=c[l>>2]|0;if(!(a[m+81>>0]|0)){fa=c[l+104>>2]|0;ka=(c[l+108>>2]|0)+-1|0;a[fa+(ka*20|0)+1>>0]=-9;c[fa+(ka*20|0)+16>>2]=n;break}if(c[m+480>>2]|0)break;ka=(c[n>>2]|0)+-1|0;c[n>>2]=ka;if(ka|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break k}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;ka=l+300|0;c[n>>2]=c[ka>>2];c[ka>>2]=n;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ka=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);l=c[s+44>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=109;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=W;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,109,J,l,W)|0;l=c[ya>>2]|0;n=Ij(f,s)|0;l:do if(n|0){m=c[l>>2]|0;if(!(a[m+81>>0]|0)){fa=c[l+104>>2]|0;ka=(c[l+108>>2]|0)+-1|0;a[fa+(ka*20|0)+1>>0]=-9;c[fa+(ka*20|0)+16>>2]=n;break}if(c[m+480>>2]|0)break;ka=(c[n>>2]|0)+-1|0;c[n>>2]=ka;if(ka|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break l}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;ka=l+300|0;c[n>>2]=c[ka>>2];c[ka>>2]=n;break l}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ka=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);l=c[v>>2]|0;if((l|0)>0)b[(c[x>>2]|0)+((l+-1|0)*20|0)+2>>1]=1;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;r=c[x>>2]|0;a[r+(l*20|0)>>0]=36;b[r+(l*20|0)+2>>1]=0;c[r+(l*20|0)+4>>2]=E;c[r+(l*20|0)+8>>2]=0;c[r+(l*20|0)+12>>2]=0;c[r+(l*20|0)+16>>2]=0;a[r+(l*20|0)+1>>0]=0;r=l}else r=Di(M,36,E,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=127;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=D;c[ka+(l*20|0)+12>>2]=1;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,127,E,D,1)|0;do if(c[A>>2]&4){ka=b[o+52>>1]|0;q=ka&65535;m:do if(!(ka<<16>>16))l=0;else{p=c[o+32>>2]|0;l=0;do{m=c[p+(l<<2)>>2]|0;if(!m)break m;if((a[m>>0]|32)<<24>>24!=98)break m;n=34049;do{n=n+1|0;m=m+1|0;ka=a[n>>0]|0;o=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(o|0)!=0));if(o|0)break m;l=l+1|0}while(l>>>0<q>>>0)}while(0);if((l|0)!=(q|0)){l=0;break}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=-126;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;l=16;break}else{Di(M,130,J,0,0)|0;l=16;break}}else l=0;while(0);if(c[O>>2]&32){ka=s+55|0;l=l|((d[ka>>0]|d[ka+1>>0]<<8)&3)==2}m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=-124;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,132,J,D,0)|0;m=c[v>>2]|0;if((m|0)>0)b[(c[x>>2]|0)+((m+-1|0)*20|0)+2>>1]=(l|8)&255;l=r+1|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=5;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,5,E,l,0)|0;m=c[v>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[x>>2]|0)+(((r|0)<0?m+-1|0:r)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=117;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=0;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,117,E,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=117;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,117,J,0,0)|0;s=c[s+20>>2]|0}while((s|0)!=0)}if(y|0){m=c[M+108>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((y|0)<0?m+-1|0:y)*20|0)|0;else l=59308;c[l+8>>2]=m}do if(C|0){l=a[F>>0]|0;if((l&255)>=8)break;a[F>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=C}while(0);do if(D|0){l=a[F>>0]|0;if((l&255)>=8)break;a[F>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=D}while(0);if(!z){n=0;l=0;break}if(c[f+112>>2]|0)Sm(f);n=M+108|0;l=c[n>>2]|0;o=M+112|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;p=c[M+104>>2]|0;a[p+(l*20|0)>>0]=69;p=p+(l*20|0)+1|0;q=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(q|0))}else Di(M,69,0,0,0)|0;m=c[n>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((z|0)<0?m+-1|0:z)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[M+104>>2]|0;a[Ba+(m*20|0)>>0]=117;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=J;c[Ba+(m*20|0)+8>>2]=0;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0;Ba=424;break}else{Di(M,117,J,0,0)|0;Ba=424;break}}else Ba=424;while(0);do if((Ba|0)==424){F=Wm(f,W,Ca)|0;ka=f+44|0;fa=c[ka>>2]|0;da=fa+1|0;ea=Ca+42|0;n=b[ea>>1]|0;D=n<<16>>16;E=da+D|0;c[ka>>2]=E;Z=Ca+56|0;_=(c[Z>>2]|0)==0;E=E+((_^1)&1)|0;c[ka>>2]=E;fa=_?da:fa+2|0;_=fa+1|0;m=((c[S>>2]|0)>>>7&1^1)&255;Y=(i|0)!=0;n:do if(Y){B=c[i+4>>2]|0;if((B|0)<=0){z=-1;break}C=c[i>>2]|0;l=0;do{c[C+(l<<3)+4>>2]=-1;l=l+1|0}while((l|0)!=(B|0));x=n<<16>>16>0;y=Ca+4|0;z=Ca+40|0;A=(pa|0)!=0;n=-1;w=0;while(1){v=c[C+(w<<3)>>2]|0;o:do if(x){r=c[y>>2]|0;s=a[v>>0]|0;u=a[208+(s&255)>>0]|0;p:do if(!(s<<24>>24)){l=0;do{if(u<<24>>24==(a[208+(d[c[r+(l<<4)>>2]>>0]|0)>>0]|0))break p;l=l+1|0}while((l|0)<(D|0));o=u&255;l=o+-95|0;p=1;Ba=446;break o}else{l=0;while(1){o=c[r+(l<<4)>>2]|0;if(u<<24>>24==(a[208+(d[o>>0]|0)>>0]|0)){p=v;do{p=p+1|0;o=o+1|0;S=a[p>>0]|0;q=(d[208+(S&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(q|0)!=0));if(!q)break p}l=l+1|0;if((l|0)>=(D|0)){l=u;m=s;Ba=443;break o}}}while(0);c[C+(w<<3)+4>>2]=l;n=(l|0)==(b[z>>1]|0)?w:n;m=(w|0)==(l|0)?m:0}else{m=a[v>>0]|0;l=a[208+(m&255)>>0]|0;Ba=443}while(0);do if((Ba|0)==443){o=l&255;l=o+-95|0;p=m<<24>>24==0;if(p|(l|0)!=0){Ba=446;break}m=58070;n=v;do{n=n+1|0;m=m+1|0;Ba=a[n>>0]|0;l=(d[208+(Ba&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(Ba<<24>>24==0|(l|0)!=0));Ba=446}while(0);if((Ba|0)==446){Ba=0;do if(!l)l=1;else{l=o+-114|0;if(!(p|(l|0)!=0)){m=40352;n=v;do{n=n+1|0;m=m+1|0;S=a[n>>0]|0;l=(d[208+(S&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(l|0)!=0))}if(!l){l=1;break}l=o+-111|0;if(!(p|(l|0)!=0)){m=58078;n=v;do{n=n+1|0;m=m+1|0;S=a[n>>0]|0;l=(d[208+(S&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(l|0)!=0))}l=(l|0)==0&1}while(0);if(A|(l|0)==0)break;else{n=w;m=0}}w=w+1|0;if((w|0)>=(B|0)){z=n;break n}}c[T>>2]=g;c[T+4>>2]=0;c[T+8>>2]=v;cd(f,44817,T);a[f+17>>0]=1;l=0;Ba=1038;break a}else z=-1;while(0);q:do if(va){n=E+1|0;c[ka>>2]=n;v=Aa+108|0;o=c[v>>2]|0;l=o+1|0;w=Aa+112|0;if((c[w>>2]|0)>(o|0)){c[v>>2]=l;X=c[Aa+104>>2]|0;a[X+(o*20|0)>>0]=13;b[X+(o*20|0)+2>>1]=0;c[X+(o*20|0)+4>>2]=n;c[X+(o*20|0)+8>>2]=0;c[X+(o*20|0)+12>>2]=l;c[X+(o*20|0)+16>>2]=0;a[X+(o*20|0)+1>>0]=0}else Di(Aa,13,n,0,l)|0;a[U>>0]=13;c[na>>2]=n;c[U+16>>2]=0;x=U+8|0;c[x>>2]=m<<24>>24==0?0:_;c[U+12>>2]=b[ea>>1];X=kj(f,Da,U)|0;x=c[x>>2]|0;if(X|0){l=0;Ba=1038;break a}if(a[ba>>0]|0){l=0;Ba=1038;break a}if(c[V>>2]|0){l=0;Ba=1038;break a}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=67;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=n;c[X+(l*20|0)+8>>2]=0;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,67,n,0,0)|0;m=c[Aa+12>>2]|0;a[m+19>>0]=0;c[m+28>>2]=0;m=c[v>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[Aa+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m;u=c[c[Da>>2]>>2]|0;r:do if(!sa){l=c[ya>>2]|0;s:do if(!l){n=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);t:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=485;else{l=0;break s}else{do if((e[n+276>>1]|0)>=224){m=n+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];X=n+284|0;c[X>>2]=(c[X>>2]|0)+1;break t}m=n+296|0;l=c[m>>2]|0;if(!l){l=n+292|0;break}else{c[m>>2]=c[l>>2];X=n+284|0;c[X>>2]=(c[X>>2]|0)+1;break t}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=485}while(0);if((Ba|0)==485)l=_d(n,224,0)|0;if(!l){l=0;break}p=l+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[l>>2]=n;m=n+4|0;n=c[m>>2]|0;if(n|0)c[n+4>>2]=l;c[l+8>>2]=n;c[l+4>>2]=0;c[m>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[ya>>2]=l;Di(l,61,0,1,0)|0}while(0);s=c[l+108>>2]|0;u:do if(!(c[Z>>2]|0))m=0;else{n=c[f>>2]|0;m=c[Ca+64>>2]|0;if(!m){m=0;break}while(1){if((c[m>>2]|0)==(n|0))break u;m=c[m+24>>2]|0;if(!m){m=0;break}}}while(0);if((s|0)<=1){T=x;U=0;E=0;J=u;break q}q=Ca+28|0;r=Ca+8|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){o=c[l+104>>2]|0;n=1;while(1){v:do switch(a[o+(n*20|0)>>0]|0){case 108:{if((c[o+(n*20|0)+12>>2]|0)!=(W|0))break v;p=c[o+(n*20|0)+8>>2]|0;if((p|0)==(c[q>>2]|0))break r;l=c[r>>2]|0;if(!l)break v;do{if((p|0)==(c[l+44>>2]|0))break r;l=c[l+20>>2]|0}while((l|0)!=0);break}case -93:{if((c[o+(n*20|0)+16>>2]|0)==(m|0))break r;break}default:{}}while(0);n=n+1|0;if((n|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}n=(c[14830]|0)==(W|0);l=(c[14831]|0)==(m|0);p=c[14829]|0;switch(a[59308]|0){case 108:break;case -93:if(l)break r;else{T=x;U=0;E=0;J=u;break q}default:{T=x;U=0;E=0;J=u;break q}}if(l){if(!n){T=x;U=0;E=0;J=u;break q}n=(p|0)==(c[q>>2]|0);m=1;while(1){if(n)break r;l=c[r>>2]|0;if(l|0)do{if((p|0)==(c[l+44>>2]|0))break r;l=c[l+20>>2]|0}while((l|0)!=0);m=m+1|0;if((m|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}else{if(!n){T=x;U=0;E=0;J=u;break q}if((p|0)==(c[q>>2]|0))break;l=c[r>>2]|0;o=(l|0)==0;n=1;while(1){if(!o){m=l;do{if((p|0)==(c[m+44>>2]|0))break r;m=c[m+20>>2]|0}while((m|0)!=0)}n=n+1|0;if((n|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}}while(0);q=f+40|0;r=c[q>>2]|0;c[q>>2]=r+1;q=f+19|0;m=a[q>>0]|0;do if(m<<24>>24){X=m+-1<<24>>24;a[q>>0]=X;l=c[f+148+((X&255)<<2)>>2]|0;if(!(X<<24>>24)){m=c[ka>>2]|0;Ba=530;break}else{p=m+-2<<24>>24;a[q>>0]=p;o=l;p=c[f+148+((p&255)<<2)>>2]|0;break}}else{m=(c[ka>>2]|0)+1|0;c[ka>>2]=m;l=m;Ba=530}while(0);if((Ba|0)==530){p=m+1|0;c[ka>>2]=p;o=l}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=113;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=u;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,113,r,u,0)|0;l=c[na>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;n=c[Aa+104>>2]|0;a[n+(m*20|0)>>0]=14;b[n+(m*20|0)+2>>1]=0;c[n+(m*20|0)+4>>2]=l;c[n+(m*20|0)+8>>2]=0;c[n+(m*20|0)+12>>2]=0;c[n+(m*20|0)+16>>2]=0;a[n+(m*20|0)+1>>0]=0;n=m}else n=Di(Aa,14,l,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=92;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=x;c[X+(l*20|0)+8>>2]=u;c[X+(l*20|0)+12>>2]=o;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,92,x,u,o)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=121;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=p;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,121,r,p,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=122;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=o;c[X+(l*20|0)+12>>2]=p;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,122,r,o,p)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=11;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=0;c[X+(l*20|0)+8>>2]=n;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,11,0,n,0)|0;m=c[v>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[Aa+104>>2]|0)+(((n|0)<0?m+-1|0:n)*20|0)|0;else l=59308;c[l+8>>2]=m;do if(o|0){l=a[q>>0]|0;if((l&255)>=8)break;a[q>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=o}while(0);if(!p){T=x;U=r;E=1;J=u;break}l=a[q>>0]|0;if((l&255)>=8){T=x;U=r;E=1;J=u;break}a[q>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=p;T=x;U=r;E=1;J=u}else{W=ja+4|0;c[W>>2]=0;c[W+4>>2]=0;c[W+8>>2]=0;c[W+12>>2]=0;c[W+16>>2]=0;c[W+20>>2]=0;c[W+24>>2]=0;c[ja>>2]=f;w:do if(!Ea)l=0;else{l=c[Ea>>2]|0;if((l|0)<=0)break;s=ja+24|0;u=ta+4|0;v=ta+8|0;w=ta+12|0;x=ta+24|0;y=ja+20|0;r=0;m=0;while(1){q=c[Ea+4+(r*20|0)>>2]|0;if(q){o=m&65535;b[s>>1]=o&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[u>>2]=125;c[v>>2]=126;c[w>>2]=0;c[x>>2]=ja;p=q+24|0;n=m;V=n+208|0;W=(c[V>>2]|0)+(c[p>>2]|0)|0;c[V>>2]=W;n=c[(c[n>>2]|0)+120>>2]|0;if((n|0)<(W|0)){Ba=565;break}_j(ta,q)|0;n=c[ta>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);m=b[s>>1]|0;W=q+4|0;c[W>>2]=c[W>>2]|m&-32752&65535;m=(o&36880|m&65535)&65535;b[s>>1]=m;if((c[y>>2]|0)>0){Ba=567;break}if((c[n+36>>2]|0)>=1)break}r=r+1|0;if((r|0)>=(c[Ea>>2]|0))break w}if((Ba|0)==565){c[X>>2]=n;cd(m,41637,X);Ba=567}qi(Fa,g);l=0;break a}while(0);T=0;U=-1;E=0;J=l}while(0);if(qa&(J|0)>0)S=b[Ca+40>>1]|0;else S=z;X=b[ea>>1]|0;o=X<<16>>16;if(X<<16>>16>0){n=c[Ca+4>>2]|0;l=0;m=0;do{l=l+((d[n+(m<<4)+15>>0]|0)>>>1&1)|0;m=m+1|0}while((m|0)!=(o|0))}else l=0;do if(qa&(J|0)!=0){l=o-l|0;if((J|0)==(l|0))break;c[$>>2]=g;c[$+4>>2]=0;c[$+8>>2]=l;c[$+12>>2]=J;cd(f,44849,$);l=0;Ba=1038;break a}while(0);do if(Y){l=c[i+4>>2]|0;if((J|0)==(l|0))break;c[aa>>2]=J;c[aa+4>>2]=l;cd(f,44901,aa);l=0;Ba=1038;break a}while(0);O=Fa+32|0;do if(!((c[O>>2]&128|0)==0&0==0)){if(a[za>>0]|0){n=0;break}if(c[f+120>>2]|0){n=0;break}n=(c[ka>>2]|0)+1|0;c[ka>>2]=n;l=Aa+108|0;m=c[l>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[l>>2]=m+1;aa=c[Aa+104>>2]|0;a[aa+(m*20|0)>>0]=70;b[aa+(m*20|0)+2>>1]=0;c[aa+(m*20|0)+4>>2]=0;c[aa+(m*20|0)+8>>2]=n;c[aa+(m*20|0)+12>>2]=0;c[aa+(m*20|0)+16>>2]=0;a[aa+(m*20|0)+1>>0]=0;break}else{Di(Aa,70,0,n,0)|0;break}}else n=0;while(0);do if(oa){R=0;l=0}else{q=Hm(f,Ca,109,0,-1,0,xa,wa)|0;o=(q<<2)+4|0;x:do if(c[Fa+272>>2]|0)if(!(a[ba>>0]|0))Ba=599;else{l=0;Ba=1038;break a}else{do if(!(0<0|(0==0?(e[Fa+276>>1]|0)>>>0<o>>>0:0))){l=Fa+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];ba=Fa+284|0;c[ba>>2]=(c[ba>>2]|0)+1;break x}l=Fa+296|0;m=c[l>>2]|0;if(!m){l=Fa+292|0;break}else{c[l>>2]=c[m>>2];ba=Fa+284|0;c[ba>>2]=(c[ba>>2]|0)+1;break x}}else l=Fa+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=599}while(0);if((Ba|0)==599)m=_d(Fa,o,0)|0;if(!m){l=0;Ba=1038;break a}if((q|0)<=0){R=m;l=m;break}l=Ca+8|0;o=0;p=c[ka>>2]|0;while(1){l=c[l>>2]|0;ba=p+1|0;c[ka>>2]=ba;c[m+(o<<2)>>2]=ba;p=(c[ka>>2]|0)+(e[l+52>>1]|0)|0;c[ka>>2]=p;o=o+1|0;if((o|0)==(q|0)){R=m;l=m;break}else l=l+20|0}}while(0);do if(k|0){if(c[Z>>2]|0){c[ca>>2]=c[Ca>>2];cd(f,44926,ca);Ba=1038;break a}u=c[xa>>2]|0;C=g+48|0;c[C>>2]=u;c[k+20>>2]=g;c[k+24>>2]=_;c[k+28>>2]=u;c[k+32>>2]=c[wa>>2];u=c[k>>2]|0;if(!u)break;ca=ja+8|0;c[ca>>2]=0;c[ca+4>>2]=0;c[ca+8>>2]=0;c[ca+12>>2]=0;c[ca+16>>2]=0;c[ca+20>>2]=0;c[ja>>2]=f;c[ja+4>>2]=g;y:do if((c[u>>2]|0)>0){v=ja+24|0;w=ta+4|0;x=ta+8|0;y=ta+12|0;z=ta+24|0;A=ja+20|0;s=0;m=0;while(1){r=c[u+4+(s*20|0)>>2]|0;if(r){p=m&65535;b[v>>1]=p&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[w>>2]=125;c[x>>2]=126;c[y>>2]=0;c[z>>2]=ja;q=r+24|0;o=m;ba=o+208|0;ca=(c[ba>>2]|0)+(c[q>>2]|0)|0;c[ba>>2]=ca;o=c[(c[o>>2]|0)+120>>2]|0;if((o|0)<(ca|0)){Ba=614;break}_j(ta,r)|0;o=c[ta>>2]|0;m=o+208|0;c[m>>2]=(c[m>>2]|0)-(c[q>>2]|0);m=b[v>>1]|0;ca=r+4|0;c[ca>>2]=c[ca>>2]|m&-32752&65535;m=(p&36880|m&65535)&65535;b[v>>1]=m;if((c[A>>2]|0)>0)break;if((c[o+36>>2]|0)>=1)break y}s=s+1|0;if((s|0)>=(c[u>>2]|0)){Ba=618;break y}}if((Ba|0)==614){c[ga>>2]=o;cd(m,41637,ga)}}else{m=0;Ba=618}while(0);z:do if((Ba|0)==618){D=k+4|0;r=c[D>>2]|0;A:do if(r){s=ja+24|0;p=m&65535;b[s>>1]=p&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[ta+4>>2]=125;c[ta+8>>2]=126;c[ta+12>>2]=0;c[ta+24>>2]=ja;q=r+24|0;o=m+208|0;ga=(c[o>>2]|0)+(c[q>>2]|0)|0;c[o>>2]=ga;o=c[(c[m>>2]|0)+120>>2]|0;do if((o|0)>=(ga|0)){_j(ta,r)|0;m=c[ta>>2]|0;ia=m+208|0;c[ia>>2]=(c[ia>>2]|0)-(c[q>>2]|0);ia=b[s>>1]|0;ga=r+4|0;c[ga>>2]=c[ga>>2]|ia&-32752&65535;b[s>>1]=p&36880|ia&65535;if((c[ja+20>>2]|0)>0)break;if((c[m+36>>2]|0)<1)break A;else break z}else{c[ia>>2]=o;cd(m,41637,ia)}while(0);break z}while(0);o=c[ha>>2]|0;B=c[k>>2]|0;A=c[C>>2]|0;do if(!(c[o+36>>2]&32)){if((c[B>>2]|0)!=1)break;m=c[B+4>>2]|0;if((a[m>>0]|0)!=-94)break;if((b[m+32>>1]|0)==-1)break z}while(0);p=la;q=p+104|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));a[la>>0]=106;y=la+52|0;z=la+12|0;c[z>>2]=y;a[y>>0]=-94;c[la+80>>2]=A;m=c[o+8>>2]|0;B:do if(m|0){w=la+8|0;x=la+84|0;C:while(1){D:do if(a[m+54>>0]|0){p=c[B>>2]|0;q=m+50|0;o=b[q>>1]|0;if((p|0)!=(o&65535|0))break;r=c[m+36>>2]|0;if(r){o=c[D>>2]|0;if(!o)break;if(bk(f,o,r,A)|0)break;o=b[q>>1]|0;p=o&65535}if(!(o<<16>>16))break C;s=m+32|0;u=m+4|0;v=m+40|0;r=0;while(1){c[w>>2]=c[(c[s>>2]|0)+(r<<2)>>2];o=b[(c[u>>2]|0)+(r<<1)>>1]|0;do if(o<<16>>16==-2){o=c[(c[v>>2]|0)+4+(r*20|0)>>2]|0;if((a[o>>0]|0)==106)break;c[z>>2]=o;o=la}else{c[z>>2]=y;b[x>>1]=o;o=la}while(0);q=0;while(1){if((bk(f,c[B+4+(q*20|0)>>2]|0,o,A)|0)<2)break;q=q+1|0;if(q>>>0>=p>>>0)break D}r=r+1|0;if(r>>>0>=p>>>0)break C}}while(0);m=c[m+20>>2]|0;if(!m)break B}c[k+16>>2]=m;break z}while(0);cd(f,44986,ma)}while(0)}while(0);P=E<<24>>24!=0;do if(!P){if(!va){Q=0;N=0;break}m=c[na>>2]|0;o=Aa+108|0;p=c[o>>2]|0;if((c[Aa+112>>2]|0)>(p|0)){c[o>>2]=p+1;Q=c[Aa+104>>2]|0;a[Q+(p*20|0)>>0]=14;b[Q+(p*20|0)+2>>1]=0;c[Q+(p*20|0)+4>>2]=m;c[Q+(p*20|0)+8>>2]=0;c[Q+(p*20|0)+12>>2]=0;c[Q+(p*20|0)+16>>2]=0;a[Q+(p*20|0)+1>>0]=0;Q=p;N=p;break}else{N=Di(Aa,14,m,0,0)|0;Q=N;break}}else{o=Aa+108|0;m=c[o>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=36;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=0;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else m=Di(Aa,36,U,0,0)|0;Q=m;N=c[o>>2]|0}while(0);na=f+56|0;M=c[na>>2]|0;K=M+-1|0;c[na>>2]=K;do if(h&1|0){na=b[ea>>1]|0;h=na<<16>>16;m=h+1|0;do if(!(na<<16>>16)){h=f+19|0;m=a[h>>0]|0;if(!(m<<24>>24)){E=(c[ka>>2]|0)+1|0;c[ka>>2]=E;break}else{E=m+-1<<24>>24;a[h>>0]=E;E=c[f+148+((E&255)<<2)>>2]|0;break}}else{o=f+32|0;p=c[o>>2]|0;q=f+28|0;r=c[q>>2]|0;if((r|0)>(h|0)){c[o>>2]=p+m;c[q>>2]=r-m;E=p;break}else{E=c[ka>>2]|0;c[ka>>2]=E+m;E=E+1|0;break}}while(0);do if((S|0)<0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=70;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=-1;c[na+(m*20|0)+8>>2]=E;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,70,-1,E,0)|0;break}}else{E:do if(P){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=90;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=S;c[na+(m*20|0)+12>>2]=E;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,S,E)|0;break}}else{h=c[Ea+4+(S*20|0)>>2]|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(f,h,E)|0;break}p=c[ya>>2]|0;h=c[h+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[p+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=E;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break E}else{Di(p,78,h,E,0)|0;break E}}else p=Jj(f,0,E)|0;while(0);if((p|0)==(E|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=E;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,E,0)|0;break}}while(0);o=Aa+108|0;h=c[o>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(h|0)){c[o>>2]=h+1;na=c[Aa+104>>2]|0;a[na+(h*20|0)>>0]=51;b[na+(h*20|0)+2>>1]=0;c[na+(h*20|0)+4>>2]=E;c[na+(h*20|0)+8>>2]=0;c[na+(h*20|0)+12>>2]=0;c[na+(h*20|0)+16>>2]=0;a[na+(h*20|0)+1>>0]=0}else h=Di(Aa,51,E,0,0)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=70;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=-1;c[na+(m*20|0)+8>>2]=E;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else Di(Aa,70,-1,E,0)|0;m=c[o>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((h|0)<0?m+-1|0:h)*20|0)|0;else h=59308;c[h+8>>2]=m;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=15;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=E;c[na+(m*20|0)+8>>2]=0;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,15,E,0,0)|0;break}}while(0);h=b[ea>>1]|0;if(h<<16>>16>0){w=i+4|0;D=(Ea|0)!=0|P;x=qa&1;y=Ca+4|0;z=E+1|0;A=Aa+108|0;B=Aa+112|0;C=Aa+104|0;h=0;v=0;while(1){F:do if(Y){m=c[w>>2]|0;if((m|0)<=0){u=0;break}o=c[i>>2]|0;h=0;while(1){if((c[o+(h<<3)+4>>2]|0)==(v|0)){u=h;break F}h=h+1|0;if((h|0)>=(m|0)){u=h;break}}}else u=h;while(0);do if(D){if(Y?(u|0)>=(c[w>>2]|0):0){Ba=710;break}if(P){h=v+z|0;m=c[A>>2]|0;if((c[B>>2]|0)>(m|0)){c[A>>2]=m+1;na=c[C>>2]|0;a[na+(m*20|0)>>0]=90;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=u;c[na+(m*20|0)+12>>2]=h;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,u,h)|0;break}}q=c[Ea+4+(u*20|0)>>2]|0;r=v+z|0;s=c[ya>>2]|0;do if(q){if((a[q>>0]|0)!=-88){p=Jj(f,q,r)|0;Ba=732;break}h=c[q+28>>2]|0;m=s+108|0;o=c[m>>2]|0;if((c[s+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[s+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=r;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(s,78,h,r,0)|0;break}}else{p=Jj(f,0,r)|0;Ba=732}while(0);do if((Ba|0)==732){Ba=0;if((p|0)==(r|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=r;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,r,0)|0;break}}while(0);h=(c[ka>>2]|0)+1|0;c[ka>>2]=h;m=s+108|0;o=c[m>>2]|0;if((c[s+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[s+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=r;c[na+(o*20|0)+8>>2]=h;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0}else Di(s,78,r,h,0)|0;a[q+38>>0]=a[q>>0]|0;a[q>>0]=-88;c[q+28>>2]=h;na=q+4|0;c[na>>2]=c[na>>2]&-4097}else Ba=710;while(0);G:do if((Ba|0)==710){Ba=0;h=c[(c[y>>2]|0)+(v<<4)+4>>2]|0;q=v+z|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(f,h,q)|0;break}p=c[ya>>2]|0;h=c[h+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[p+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=q;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break G}else{Di(p,78,h,q,0)|0;break G}}else p=Jj(f,0,q)|0;while(0);if((p|0)==(q|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=q;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,q,0)|0;break}}while(0);v=v+1|0;h=b[ea>>1]|0;if((v|0)>=(h<<16>>16|0))break;else h=u+x|0}}if(!oa){zk(Aa,Ca,E+1|0);h=b[ea>>1]|0}m=h<<16>>16;w=E-m+-1|0;if(t){v=f+23|0;u=t;do{do if((a[u+8>>0]|0)==120){if((a[u+9>>0]|0)!=1)break;h=c[ya>>2]|0;H:do if(!h){o=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[o+76>>1]&8)break;a[v>>0]=1}while(0);I:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))Ba=762;else{h=0;break H}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;h=c[m>>2]|0;if(h|0){c[m>>2]=c[h>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break I}m=o+296|0;h=c[m>>2]|0;if(!h){h=o+292|0;break}else{c[m>>2]=c[h>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break I}}else h=o+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Ba=762}while(0);if((Ba|0)==762){Ba=0;h=_d(o,224,0)|0}if(!h){h=0;break}p=h+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[h>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=h;c[h+8>>2]=o;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=f;c[ya>>2]=h;Di(h,61,0,1,0)|0}while(0);m=c[ua>>2]|0;m=c[((m|0)==0?f:m)+260>>2]|0;J:do if(!m)Ba=772;else while(1){if((c[m>>2]|0)==(u|0)?(c[m+12>>2]|0)==(j|0):0)break J;m=c[m+4>>2]|0;if(!m){Ba=772;break}}while(0);if((Ba|0)==772){Ba=0;m=Nm(f,u,Ca,j)|0;if(!m)break}if(!(c[u>>2]|0))s=0;else{s=(c[f>>2]|0)+32|0;s=bw(c[s>>2]|0,c[s+4>>2]|0,13)|0;L()|0;s=s&1^1}o=(c[ka>>2]|0)+1|0;c[ka>>2]=o;q=c[m+8>>2]|0;r=h+108|0;m=c[r>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[r>>2]=m+1;na=c[h+104>>2]|0;a[na+(m*20|0)>>0]=45;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=w;c[na+(m*20|0)+8>>2]=K;c[na+(m*20|0)+12>>2]=o;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else m=Di(h,45,w,K,o)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[h+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(h,o+(m*20|0)|0,q,-4);break}if(!q)break;c[o+(m*20|0)+16>>2]=q;a[p>>0]=-4}while(0);m=c[r>>2]|0;if((m|0)<=0)break;b[(c[h+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=s}while(0);u=c[u+32>>2]|0}while((u|0)!=0);h=b[ea>>1]|0;m=h<<16>>16}o=m+1|0;if(h<<16>>16){h=f+28|0;if((c[h>>2]|0)>(m|0))break;c[h>>2]=o;c[f+32>>2]=E;break}if(!E)break;h=f+19|0;m=a[h>>0]|0;if((m&255)>=8)break;a[h>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=E}while(0);do if(!oa){do if(c[Z>>2]|0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;oa=c[Aa+104>>2]|0;a[oa+(m*20|0)>>0]=73;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=da;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0;break}else{Di(Aa,73,0,da,0)|0;break}}while(0);K:do if((S|0)>-1){L:do if(P){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;pa=c[Aa+104>>2]|0;a[pa+(m*20|0)>>0]=90;b[pa+(m*20|0)+2>>1]=0;c[pa+(m*20|0)+4>>2]=U;c[pa+(m*20|0)+8>>2]=S;c[pa+(m*20|0)+12>>2]=fa;c[pa+(m*20|0)+16>>2]=0;a[pa+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,S,fa)|0;break}}else{if(va){h=S+T|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=78;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=h;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(Aa,78,h,fa,0)|0;break}}m=c[Ea+4+(S*20|0)>>2]|0;h=a[m>>0]|0;do if(h<<24>>24==114){if(c[Z>>2]|0)break;h=c[xa>>2]|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;I=c[Aa+104>>2]|0;a[I+(o*20|0)>>0]=121;b[I+(o*20|0)+2>>1]=0;c[I+(o*20|0)+4>>2]=h;c[I+(o*20|0)+8>>2]=fa;c[I+(o*20|0)+12>>2]=F;c[I+(o*20|0)+16>>2]=0;a[I+(o*20|0)+1>>0]=0;I=1;break K}else{Di(Aa,121,h,fa,F)|0;I=1;break K}}while(0);do if(m){if(h<<24>>24!=-88){p=Jj(f,m,fa)|0;break}p=c[ya>>2]|0;h=c[m+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[p+104>>2]|0;a[pa+(o*20|0)>>0]=78;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=h;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break L}else{Di(p,78,h,fa,0)|0;break L}}else p=Jj(f,0,fa)|0;while(0);if((p|0)==(fa|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[h+104>>2]|0;a[pa+(o*20|0)>>0]=79;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=p;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,fa,0)|0;break}}while(0);q=Aa+108|0;o=c[q>>2]|0;do if(c[Z>>2]|0){m=o+2|0;h=Aa+112|0;if((c[h>>2]|0)>(o|0)){c[q>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=50;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=fa;c[pa+(o*20|0)+8>>2]=m;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(Aa,50,fa,m,0)|0;break}}else{h=Aa+112|0;if((c[h>>2]|0)>(o|0)){c[q>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=51;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=fa;c[pa+(o*20|0)+8>>2]=0;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0}else o=Di(Aa,51,fa,0,0)|0;m=c[xa>>2]|0;p=c[q>>2]|0;if((c[h>>2]|0)>(p|0)){c[q>>2]=p+1;pa=c[Aa+104>>2]|0;a[pa+(p*20|0)>>0]=121;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=fa;c[pa+(p*20|0)+12>>2]=F;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0}else Di(Aa,121,m,fa,F)|0;p=c[q>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))m=(c[Aa+104>>2]|0)+(((o|0)<0?p+-1|0:o)*20|0)|0;else m=59308;c[m+8>>2]=p}while(0);m=c[q>>2]|0;if((c[h>>2]|0)>(m|0)){c[q>>2]=m+1;I=c[Aa+104>>2]|0;a[I+(m*20|0)>>0]=15;b[I+(m*20|0)+2>>1]=0;c[I+(m*20|0)+4>>2]=fa;c[I+(m*20|0)+8>>2]=0;c[I+(m*20|0)+12>>2]=0;c[I+(m*20|0)+16>>2]=0;a[I+(m*20|0)+1>>0]=0;I=0;break}else{Di(Aa,15,fa,0,0)|0;I=0;break}}else if(!(c[Z>>2]|pa)){h=c[xa>>2]|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;I=c[Aa+104>>2]|0;a[I+(o*20|0)>>0]=121;b[I+(o*20|0)+2>>1]=0;c[I+(o*20|0)+4>>2]=h;c[I+(o*20|0)+8>>2]=fa;c[I+(o*20|0)+12>>2]=F;c[I+(o*20|0)+16>>2]=0;a[I+(o*20|0)+1>>0]=0;I=1;break}else{Di(Aa,121,h,fa,F)|0;I=1;break}}else{h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;I=c[Aa+104>>2]|0;a[I+(m*20|0)>>0]=73;b[I+(m*20|0)+2>>1]=0;c[I+(m*20|0)+4>>2]=0;c[I+(m*20|0)+8>>2]=fa;c[I+(m*20|0)+12>>2]=0;c[I+(m*20|0)+16>>2]=0;a[I+(m*20|0)+1>>0]=0;I=0;break}else{Di(Aa,73,0,fa,0)|0;I=0;break}}while(0);do if((F|0)>0){h=c[ya>>2]|0;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[h+104>>2]|0;a[pa+(o*20|0)>>0]=-105;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=F;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(h,151,F,fa,0)|0;break}}while(0);if((b[ea>>1]|0)>0){C=Ca+40|0;D=Aa+108|0;E=Aa+112|0;F=Aa+104|0;H=Ca+4|0;u=(J|0)==0;v=f+23|0;w=i+4|0;x=ta+20|0;y=ta+4|0;z=ta+8|0;A=ta+24|0;B=(T|0)==(_|0);h=0;s=0;do{r=s+_|0;M:do if((s|0)==(b[C>>1]|0)){m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;pa=c[F>>2]|0;a[pa+(m*20|0)>>0]=74;b[pa+(m*20|0)+2>>1]=0;c[pa+(m*20|0)+4>>2]=r;c[pa+(m*20|0)+8>>2]=0;c[pa+(m*20|0)+12>>2]=0;c[pa+(m*20|0)+16>>2]=0;a[pa+(m*20|0)+1>>0]=0;break}else{Di(Aa,74,r,0,0)|0;break}}else{N:do if(qa)if(!(a[(c[H>>2]|0)+(s<<4)+15>>0]&2)){m=s-h|0;Ba=867;break}else{h=h+1|0;break}else{o=c[w>>2]|0;if((o|0)<=0){m=0;Ba=867;break}p=c[i>>2]|0;m=0;while(1){if((c[p+(m<<3)+4>>2]|0)==(s|0)){Ba=867;break N}m=m+1|0;if((m|0)>=(o|0)){Ba=867;break}}}while(0);do if((Ba|0)==867){Ba=0;if(u|(m|0)<0)break;if(Y?(m|0)>=(c[w>>2]|0):0)break;if(P){o=c[D>>2]|0;if((c[E>>2]|0)>(o|0)){c[D>>2]=o+1;pa=c[F>>2]|0;a[pa+(o*20|0)>>0]=90;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=U;c[pa+(o*20|0)+8>>2]=m;c[pa+(o*20|0)+12>>2]=r;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break M}else{Di(Aa,90,U,m,r)|0;break M}}if(va){if(B)break M;m=m+T|0;o=c[D>>2]|0;if((c[E>>2]|0)>(o|0)){c[D>>2]=o+1;pa=c[F>>2]|0;a[pa+(o*20|0)>>0]=79;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=m;c[pa+(o*20|0)+8>>2]=r;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break M}else{Di(Aa,79,m,r,0)|0;break M}}m=c[Ea+4+(m*20|0)>>2]|0;do if(m){if((a[m>>0]|0)!=-88){q=Jj(f,m,r)|0;break}q=c[ya>>2]|0;m=c[m+28>>2]|0;o=q+108|0;p=c[o>>2]|0;if((c[q+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[q+104>>2]|0;a[pa+(p*20|0)>>0]=78;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(q,78,m,r,0)|0;break M}}else q=Jj(f,0,r)|0;while(0);if((q|0)==(r|0))break M;m=c[ya>>2]|0;if(!m)break M;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[m+104>>2]|0;a[pa+(p*20|0)>>0]=79;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=q;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(m,79,q,r,0)|0;break M}}while(0);m=c[(c[H>>2]|0)+(s<<4)+4>>2]|0;do if(!(a[v>>0]|0)){if(m|0){Ba=876;break}q=Jj(f,0,r)|0}else{a[x>>0]=2;c[y>>2]=127;c[z>>2]=128;c[A>>2]=0;if(m){_j(ta,m)|0;if(!(a[x>>0]|0)){Ba=876;break}}Nj(f,m,r)|0;break M}while(0);do if((Ba|0)==876){Ba=0;if((a[m>>0]|0)!=-88){q=Jj(f,m,r)|0;break}q=c[ya>>2]|0;m=c[m+28>>2]|0;o=q+108|0;p=c[o>>2]|0;if((c[q+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[q+104>>2]|0;a[pa+(p*20|0)>>0]=78;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(q,78,m,r,0)|0;break M}}while(0);if((q|0)==(r|0))break;m=c[ya>>2]|0;if(!m)break;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[m+104>>2]|0;a[pa+(p*20|0)>>0]=79;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=q;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break}else{Di(m,79,q,r,0)|0;break}}while(0);s=s+1|0}while((s|0)<(b[ea>>1]|0))}if(!(c[Z>>2]|0)){Tm(f,Ca,R,c[xa>>2]|0,c[wa>>2]|0,da,0,S>>>31&255^1,j&255,K,ta,0,k);Lm(f,Ca,0,da,0,0);do if(!(c[ta>>2]|0))h=1;else{if(t|0){h=0;break}if((c[O>>2]&16384|0)==0&0==0){h=1;break}s=c[Ca>>2]|0;p=c[ra>>2]|0;q=c[p+68>>2]|0;if(!q){m=p+60|0;h=p+64|0}else{m=a[s>>0]|0;if(!(m<<24>>24))h=0;else{h=0;o=s;do{o=o+1|0;h=G(h+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[o>>0]|0}while(m<<24>>24!=0)}h=(h>>>0)%((c[p+56>>2]|0)>>>0)|0;m=q+(h<<3)|0;h=q+(h<<3)+4|0}m=c[m>>2]|0;O:do if(!m)h=59292;else{r=d[208+(d[s>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;m=m+-1|0;p=c[h+12>>2]|0;ta=a[p>>0]|0;o=(d[208+(ta&255)>>0]|0)-r|0;if(!(ta<<24>>24==0|(o|0)!=0)){q=s;do{p=p+1|0;q=q+1|0;ta=a[p>>0]|0;o=(d[208+(ta&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(ta<<24>>24==0|(o|0)!=0))}if(!o)break O;if(!m){h=59292;break}}}while(0);h=(c[h+8>>2]|0)==0&1}while(0);Um(f,Ca,c[xa>>2]|0,c[wa>>2]|0,da,R,0,I,h);break}h=c[Ca+64>>2]|0;P:do if(!h)h=0;else while(1){if((c[h>>2]|0)==(Fa|0))break P;h=c[h+24>>2]|0;if(!h){h=0;break}}while(0);s=c[ua>>2]|0;s=(s|0)==0?f:s;r=s+204|0;q=c[r>>2]|0;p=s+252|0;Q:do if((q|0)>0){m=c[p>>2]|0;o=0;do{if((c[m+(o<<2)>>2]|0)==(Ca|0))break Q;o=o+1|0}while((o|0)<(q|0));o=p;Ba=920}else{o=p;m=c[p>>2]|0;Ba=920}while(0);R:do if((Ba|0)==920){do if(!(mb()|0)){xa=(q<<2)+4|0;m=sb(m,xa,((xa|0)<0)<<31>>31)|0;if(!m)break;c[o>>2]=m;xa=c[r>>2]|0;c[r>>2]=xa+1;c[m+(xa<<2)>>2]=Ca;break R}while(0);m=c[s>>2]|0;o=m+81|0;if(a[o>>0]|0)break;if(a[m+82>>0]|0)break;a[o>>0]=1;if((c[m+180>>2]|0)>0)c[m+264>>2]=1;xa=m+272|0;c[xa>>2]=(c[xa>>2]|0)+1;m=c[m+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);o=(b[ea>>1]|0)+2|0;q=Aa+108|0;m=c[q>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[q>>2]=m+1;xa=c[Aa+104>>2]|0;a[xa+(m*20|0)>>0]=10;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=1;c[xa+(m*20|0)+8>>2]=o;c[xa+(m*20|0)+12>>2]=da;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0}else m=Di(Aa,10,1,o,da)|0;do if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[q>>2]|0)+-1|0;o=c[Aa+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(m*20|0)|0,h,-12);break}if(!h)break;c[o+(m*20|0)+16>>2]=h;a[p>>0]=-12;xa=h+12|0;c[xa>>2]=(c[xa>>2]|0)+1}while(0);h=c[q>>2]|0;if((h|0)>0)b[(c[Aa+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=(j|0)==11?2:j&65535;xa=c[ua>>2]|0;a[((xa|0)==0?f:xa)+21>>0]=1}while(0);do if(n|0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;xa=c[Aa+104>>2]|0;a[xa+(m*20|0)>>0]=83;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=n;c[xa+(m*20|0)+8>>2]=1;c[xa+(m*20|0)+12>>2]=0;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0;break}else{Di(Aa,83,n,1,0)|0;break}}while(0);if(sa){u=fa+-1-(b[ea>>1]|0)|0;v=f+23|0;do{do if((a[t+8>>0]|0)==120){if((a[t+9>>0]|0)!=2)break;h=c[ya>>2]|0;S:do if(!h){o=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[o+76>>1]&8)break;a[v>>0]=1}while(0);T:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))Ba=982;else{h=0;break S}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;h=c[m>>2]|0;if(h|0){c[m>>2]=c[h>>2];xa=o+284|0;c[xa>>2]=(c[xa>>2]|0)+1;break T}m=o+296|0;h=c[m>>2]|0;if(!h){h=o+292|0;break}else{c[m>>2]=c[h>>2];xa=o+284|0;c[xa>>2]=(c[xa>>2]|0)+1;break T}}else h=o+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Ba=982}while(0);if((Ba|0)==982){Ba=0;h=_d(o,224,0)|0}if(!h){h=0;break}p=h+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[h>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=h;c[h+8>>2]=o;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=f;c[ya>>2]=h;Di(h,61,0,1,0)|0}while(0);m=c[ua>>2]|0;m=c[((m|0)==0?f:m)+260>>2]|0;U:do if(!m)Ba=992;else while(1){if((c[m>>2]|0)==(t|0)?(c[m+12>>2]|0)==(j|0):0)break U;m=c[m+4>>2]|0;if(!m){Ba=992;break}}while(0);if((Ba|0)==992){Ba=0;m=Nm(f,t,Ca,j)|0;if(!m)break}if(!(c[t>>2]|0))s=0;else{s=(c[f>>2]|0)+32|0;s=bw(c[s>>2]|0,c[s+4>>2]|0,13)|0;L()|0;s=s&1^1}o=(c[ka>>2]|0)+1|0;c[ka>>2]=o;q=c[m+8>>2]|0;r=h+108|0;m=c[r>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[r>>2]=m+1;xa=c[h+104>>2]|0;a[xa+(m*20|0)>>0]=45;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=u;c[xa+(m*20|0)+8>>2]=K;c[xa+(m*20|0)+12>>2]=o;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0}else m=Di(h,45,u,K,o)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[h+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(h,o+(m*20|0)|0,q,-4);break}if(!q)break;c[o+(m*20|0)+16>>2]=q;a[p>>0]=-4}while(0);m=c[r>>2]|0;if((m|0)<=0)break;b[(c[h+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=s}while(0);t=c[t+32>>2]|0}while((t|0)!=0)}m=c[Aa+12>>2]|0;h=0-M|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Aa,h);else c[(c[m+64>>2]|0)+(h<<2)>>2]=c[Aa+108>>2];if(!P){if(!va)break;h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;j=c[Aa+104>>2]|0;a[j+(m*20|0)>>0]=11;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=0;c[j+(m*20|0)+8>>2]=N;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(Aa,11,0,N,0)|0;m=c[h>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((Q|0)<0?m+-1|0:Q)*20|0)|0;else h=59308;c[h+8>>2]=m;break}o=Aa+108|0;h=c[o>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(h|0)){c[o>>2]=h+1;j=c[Aa+104>>2]|0;a[j+(h*20|0)>>0]=5;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=U;c[j+(h*20|0)+8>>2]=N;c[j+(h*20|0)+12>>2]=0;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0}else Di(Aa,5,U,N,0)|0;m=c[o>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((Q|0)<0?m+-1|0:Q)*20|0)|0;else h=59308;c[h+8>>2]=m;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;j=c[Aa+104>>2]|0;a[j+(m*20|0)>>0]=117;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=U;c[j+(m*20|0)+8>>2]=0;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break}else{Di(Aa,117,U,0,0)|0;break}}while(0);do if(!(a[za>>0]|0)){if(c[f+120>>2]|0)break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!n)Ba=1038;else{h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;f=c[Aa+104>>2]|0;a[f+(m*20|0)>>0]=81;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=n;c[f+(m*20|0)+8>>2]=1;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(Aa,81,n,1,0)|0;Wi(Aa,1);if(a[(c[Aa>>2]|0)+81>>0]|0){Ba=1038;break}yc(c[Aa+116>>2]|0,44972,-1,1,0)|0;Ba=1038}}else{l=0;Ba=1038}}else{l=0;Ba=1038}while(0);if((Ba|0)==1038){qi(Fa,g);if(!Ea){h=Da;r=l;break}}ri(Fa,Ea);h=Da;r=l}else Ba=1037;while(0);if((Ba|0)==1037){qi(Fa,g);r=0}do if(k|0){l=c[k>>2]|0;if(l|0)ri(Fa,l);l=c[k+4>>2]|0;if(l|0)ni(Fa,l);l=c[k+8>>2]|0;if(l|0)ri(Fa,l);l=c[k+12>>2]|0;if(l|0)ni(Fa,l);if(Fa|0){if(c[Fa+480>>2]|0){Xd(Fa,k);break}g=k;if((c[Fa+304>>2]|0)>>>0<=g>>>0?(c[Fa+308>>2]|0)>>>0>g>>>0:0){g=Fa+300|0;c[k>>2]=c[g>>2];c[g>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{g=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(h|0)pi(Fa,h,1);do if(i|0){q=i+4|0;l=c[i>>2]|0;V:do if((c[q>>2]|0)>0){m=Fa+480|0;n=Fa+304|0;o=Fa+308|0;p=Fa+300|0;if(!Fa){h=0;while(1){l=c[l+(h<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);h=h+1|0;l=c[i>>2]|0;if((h|0)>=(c[q>>2]|0))break V}}h=0;do{l=c[l+(h<<3)>>2]|0;do if(l|0){if(c[m>>2]|0){Xd(Fa,l);break}k=l;if((c[n>>2]|0)>>>0<=k>>>0?(c[o>>2]|0)>>>0>k>>>0:0){c[l>>2]=c[p>>2];c[p>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);h=h+1|0;l=c[i>>2]|0}while((h|0)<(c[q>>2]|0))}while(0);W:do if(l){do if(Fa|0){h=Fa+480|0;if(!(c[h>>2]|0)){m=l;if((c[Fa+304>>2]|0)>>>0>m>>>0)break;if((c[Fa+308>>2]|0)>>>0<=m>>>0)break;k=Fa+300|0;c[l>>2]=c[k>>2];c[k>>2]=l}else Xd(Fa,l);l=h;Ba=1093;break W}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);Ba=1091;break}else{Ba=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);Ba=1091;break}}else Ba=1091;while(0);if((Ba|0)==1091)if(Fa){l=Fa+480|0;Ba=1093}if((Ba|0)==1093){if(c[l>>2]|0){Xd(Fa,i);break}k=i;if((c[Fa+304>>2]|0)>>>0<=k>>>0?(c[Fa+308>>2]|0)>>>0>k>>>0:0){k=Fa+300|0;c[i>>2]=c[k>>2];c[k>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!r){Ra=Ga;return}if(Fa|0){if(c[Fa+480>>2]|0){Xd(Fa,r);Ra=Ga;return}k=r;if((c[Fa+304>>2]|0)>>>0<=k>>>0?(c[Fa+308>>2]|0)>>>0>k>>>0:0){Fa=Fa+300|0;c[r>>2]=c[Fa>>2];c[Fa>>2]=r;Ra=Ga;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);Ra=Ga;return}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);Ra=Ga;return}}function wj(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=c[b>>2]|0;if(!f){a:do if(!p){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](8)|0;o=25;break}f=Wa[c[29356>>2]&127](8)|0;if((c[14985]|0)>>>0<8)c[14985]=8;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){n=c[14978]|0;m=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){p=0;return p|0}h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){p=0;return p|0}}else{do if((e[p+276>>1]|0)>=8){h=p+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=25;break a}h=p+296|0;f=c[h>>2]|0;if(!f){f=p+292|0;break}else{c[h>>2]=c[f>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=25;break a}}else f=p+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(p,8,0)|0;o=25}while(0);if((o|0)==25)if(!f){p=0;return p|0}n=f;m=n;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;n=n+4|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0}m=c[f>>2]|0;n=f+4|0;i=c[n>>2]|0;h=((i|0)<0)<<31>>31;l=Sv(i|0,h|0,-1,-1)|0;b:do if((l&i|0)==0&((L()|0)&h|0)==0){j=(i|0)==0;k=cw(i|0,h|0,4)|0;l=L()|0;k=j?8:k;l=j?0:l;c:do if(!m){if(c[p+272>>2]|0){if(a[p+81>>0]|0)break}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[p+276>>1]|0)>>>0:0))){j=p+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=45;break c}j=p+296|0;h=c[j>>2]|0;if(!h){h=p+292|0;break}else{c[j>>2]=c[h>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=45;break c}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(p,k,l)|0;o=45}else{o=m;if((c[p+304>>2]|0)>>>0<=o>>>0?(c[p+308>>2]|0)>>>0>o>>>0:0){if(!(l>>>0>0|((l|0)==0?k>>>0>(e[p+276>>1]|0)>>>0:0))){h=m;o=48;break b}h=Zd(p,m,k,l)|0;o=45;break}h=Zd(p,m,k,l)|0;o=45}while(0);if((o|0)==45){if(h|0){o=48;break}i=c[n>>2]|0}c[f>>2]=m;h=m}else{h=m;o=48}while(0);if((o|0)==48){j=h+(i<<3)|0;m=j;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;j=j+4|0;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;j=(c[n>>2]|0)+1|0;c[n>>2]=j;c[f>>2]=h;if((i|0)<0)i=j;else{k=qj(p,g)|0;c[(c[f>>2]|0)+(i<<3)>>2]=k;if((k|0)==0|(d[b+200>>0]|0)<2){p=f;return p|0}j=c[b>>2]|0;d:do if(!j){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](16)|0;o=114;break}h=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){p=c[14978]|0;n=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=p>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){p=f;return p|0}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){p=f;return p|0}}else{do if((e[j+276>>1]|0)>=16){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];o=j+284|0;c[o>>2]=(c[o>>2]|0)+1;o=114;break d}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];o=j+284|0;c[o>>2]=(c[o>>2]|0)+1;o=114;break d}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,16,0)|0;o=114}while(0);if((o|0)==114)if(!h){p=f;return p|0}i=h+4|0;j=i+12|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));c[h>>2]=k;o=g;g=c[o+4>>2]|0;p=h+4|0;c[p>>2]=c[o>>2];c[p+4>>2]=g;p=b+272|0;c[h+12>>2]=c[p>>2];c[p>>2]=h;p=f;return p|0}}e:do if((i|0)>0){j=p+480|0;k=p+304|0;l=p+308|0;m=p+300|0;if(!p){i=0;while(1){h=c[h+(i<<3)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);i=i+1|0;h=c[f>>2]|0;if((i|0)>=(c[n>>2]|0))break e}}i=0;do{h=c[h+(i<<3)>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(p,h);break}g=h;if((c[k>>2]|0)>>>0<=g>>>0?(c[l>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;h=c[f>>2]|0}while((i|0)<(c[n>>2]|0))}while(0);f:do if(h){do if(p|0){i=p+480|0;if(!(c[i>>2]|0)){j=h;if((c[p+304>>2]|0)>>>0>j>>>0)break;if((c[p+308>>2]|0)>>>0<=j>>>0)break;g=p+300|0;c[h>>2]=c[g>>2];c[g>>2]=h}else Xd(p,h);h=i;o=81;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);o=79;break}else{o=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);o=79;break}}else o=79;while(0);if((o|0)==79)if(p){h=p+480|0;o=81}if((o|0)==81){if(c[h>>2]|0){Xd(p,f);p=0;return p|0}g=f;if((c[p+304>>2]|0)>>>0<=g>>>0?(c[p+308>>2]|0)>>>0>g>>>0:0){p=p+300|0;c[f>>2]=c[p>>2];c[p>>2]=f;p=0;return p|0}}if(!f){p=0;return p|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);p=0;return p|0}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);p=0;return p|0}return 0}function xj(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=Ra;Ra=Ra+176|0;r=w+96|0;o=w+88|0;n=w+80|0;q=w+136|0;p=w;s=w+104|0;u=f+8|0;i=c[u>>2]|0;a:do if(!i){m=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))l=15;else break a;else{do if((e[m+276>>1]|0)>=224){i=m+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];k=m+284|0;c[k>>2]=(c[k>>2]|0)+1;k=j;break b}i=m+296|0;j=c[i>>2]|0;if(!j){i=m+292|0;break}else{c[i>>2]=c[j>>2];k=m+284|0;c[k>>2]=(c[k>>2]|0)+1;k=j;break b}}else i=m+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;l=15}while(0);if((l|0)==15)k=_d(m,224,0)|0;if(k|0){i=k+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[k>>2]=m;i=m+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=k;c[k+8>>2]=j;c[k+4>>2]=0;c[i>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[u>>2]=k;Di(k,61,0,1,0)|0;t=k;l=20}}else{t=i;l=20}while(0);do if((l|0)==20){if(g){i=c[f>>2]|0;if(c[g+4>>2]|0){if(a[i+165>>0]|0){cd(f,39404,n);break}i=wk(i,g)|0;if((i|0)<0){c[o>>2]=g;cd(f,39421,o);break}}else i=d[i+164>>0]|0;if((i|0)>-1&(i|0)!=1)n=i;else break}else n=0;do if(h){i=s+8|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;i=p;j=i+80|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[s>>2]=f;c[s+4>>2]=p;j=s+24|0;b[j>>1]=0;c[q>>2]=f;c[q+4>>2]=125;c[q+8>>2]=126;c[q+12>>2]=0;c[q+24>>2]=s;k=h+24|0;i=f+208|0;p=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=p;i=c[(c[f>>2]|0)+120>>2]|0;if((i|0)<(p|0)){c[r>>2]=i;cd(f,41637,r);i=0;break}_j(q,h)|0;i=c[q>>2]|0;r=i+208|0;c[r>>2]=(c[r>>2]|0)-(c[k>>2]|0);r=h+4|0;c[r>>2]=c[r>>2]|b[j>>1]&-32752&65535;if((c[s+20>>2]|0)>0){i=0;break}if((c[i+36>>2]|0)<1){s=f+44|0;i=(c[s>>2]|0)+1|0;c[s>>2]=i;if((a[h>>0]|0)==-88){j=c[u>>2]|0;k=c[h+28>>2]|0;l=j+108|0;m=c[l>>2]|0;if((c[j+112>>2]|0)>(m|0)){c[l>>2]=m+1;v=c[j+104>>2]|0;a[v+(m*20|0)>>0]=78;b[v+(m*20|0)+2>>1]=0;c[v+(m*20|0)+4>>2]=k;c[v+(m*20|0)+8>>2]=i;c[v+(m*20|0)+12>>2]=0;c[v+(m*20|0)+16>>2]=0;a[v+(m*20|0)+1>>0]=0;break}else{Di(j,78,k,i,0)|0;break}}l=Jj(f,h,i)|0;if((l|0)!=(i|0)?(v=c[u>>2]|0,(v|0)!=0):0){j=v+108|0;k=c[j>>2]|0;if((c[v+112>>2]|0)>(k|0)){c[j>>2]=k+1;v=c[v+104>>2]|0;a[v+(k*20|0)>>0]=79;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=l;c[v+(k*20|0)+8>>2]=i;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0;break}else{Di(v,79,l,i,0)|0;break}}}else i=0}else i=0;while(0);j=t+108|0;k=c[j>>2]|0;if((c[t+112>>2]|0)>(k|0)){c[j>>2]=k+1;v=c[t+104>>2]|0;a[v+(k*20|0)>>0]=8;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=n;c[v+(k*20|0)+8>>2]=i;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0}else Di(t,8,n,i,0)|0;i=1<<n;v=t+152|0;c[v>>2]=c[v>>2]|i;if((n|0)!=1?a[(c[(c[(c[t>>2]|0)+16>>2]|0)+(n<<4)+4>>2]|0)+9>>0]|0:0){v=t+156|0;c[v>>2]=c[v>>2]|i}}while(0);if(!h){Ra=w;return}ni(c[f>>2]|0,h);Ra=w;return}\nfunction Vi(a,e){a=a|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=c[e+8>>2]|0;if(f|0){j=(a|0)==0;l=e+56|0;m=a+480|0;n=a+304|0;o=a+308|0;i=a+300|0;do{h=f;f=c[f+20>>2]|0;if(!(!j?(c[m>>2]|0)!=0:0))p=5;if((p|0)==5?(0,(c[l>>2]|0)==0):0)mi((c[h+24>>2]|0)+24|0,c[h>>2]|0,0)|0;g=c[h+36>>2]|0;if(g|0)ni(a,g);g=c[h+40>>2]|0;if(g|0)ri(a,g);g=c[h+16>>2]|0;do if(g|0){if(!j){if(c[m>>2]|0){Xd(a,g);break}p=g;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[g>>2]=c[i>>2];c[i>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);p=h+55|0;do if(((d[p>>0]|d[p+1>>0]<<8)&16)!=0?(k=c[h+32>>2]|0,(k|0)!=0):0){if(!j){if(c[m>>2]|0){Xd(a,k);p=33;break}p=k;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[k>>2]=c[i>>2];c[i>>2]=k;p=33;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);p=32;break}else{p=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);p=32;break}}else p=32;while(0);if((p|0)==32)if(j)p=38;else p=33;do if((p|0)==33){p=0;if(c[m>>2]|0){Xd(a,h);break}g=h;if((c[n>>2]|0)>>>0<=g>>>0?(c[o>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[i>>2];c[i>>2]=h}else p=38}while(0);do if((p|0)==38){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0)}while((f|0)!=0)}f=c[e+16>>2]|0;if(f|0){k=(a|0)==0;l=a+480|0;m=e+72|0;n=a+304|0;o=a+308|0;j=a+300|0;i=f;while(1){if(!(!k?(c[l>>2]|0)!=0:0)){h=i+16|0;f=c[h>>2]|0;g=i+12|0;if(!f){p=c[g>>2]|0;mi((c[m>>2]|0)+56|0,c[((p|0)==0?i:p)+8>>2]|0,p)|0}else c[f+12>>2]=c[g>>2];f=c[g>>2]|0;if(f|0)c[f+16>>2]=c[h>>2]}h=c[i+28>>2]|0;do if(h|0){g=c[h+28>>2]|0;f=c[g+16>>2]|0;if(f|0)ni(a,f);f=c[g+20>>2]|0;if(f|0)ri(a,f);f=c[g+8>>2]|0;if(f|0)pi(a,f,1);f=c[h+12>>2]|0;if(f|0)ni(a,f);if(!k){if(c[l>>2]|0){Xd(a,h);break}p=h;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[h>>2]=c[j>>2];c[j>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[i+32>>2]|0;a:do if(h){g=c[h+28>>2]|0;f=c[g+16>>2]|0;if(f|0)ni(a,f);f=c[g+20>>2]|0;if(f|0)ri(a,f);f=c[g+8>>2]|0;if(f|0)pi(a,f,1);f=c[h+12>>2]|0;if(f|0)ni(a,f);do if(!k){if(!(c[l>>2]|0)){f=h;if((c[n>>2]|0)>>>0>f>>>0)break;if((c[o>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[j>>2];c[j>>2]=h}else Xd(a,h);f=c[i+4>>2]|0;p=89;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);p=88;break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);p=88;break}}else p=88;while(0);if((p|0)==88){f=c[i+4>>2]|0;if(k)p=94;else p=89}do if((p|0)==89){p=0;if(c[l>>2]|0){Xd(a,i);break}h=i;if((c[n>>2]|0)>>>0<=h>>>0?(c[o>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[j>>2];c[j>>2]=i}else p=94}while(0);do if((p|0)==94){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!f)break;else i=f}}m=e+4|0;g=c[m>>2]|0;do if(g|0){n=e+42|0;b:do if((b[n>>1]|0)>0){i=a+480|0;j=a+304|0;k=a+308|0;l=a+300|0;if(!a){h=0;while(1){f=c[g>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[g+4>>2]|0;if(f|0)ni(0,f);f=c[g+8>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);h=h+1|0;if((h|0)>=(b[n>>1]|0))break b;else g=g+16|0}}h=0;while(1){f=c[g>>2]|0;do if(f|0){if(c[i>>2]|0){Xd(a,f);break}o=f;if((c[j>>2]|0)>>>0<=o>>>0?(c[k>>2]|0)>>>0>o>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[g+4>>2]|0;if(f|0)ni(a,f);f=c[g+8>>2]|0;do if(f|0){if(c[i>>2]|0){Xd(a,f);break}o=f;if((c[j>>2]|0)>>>0<=o>>>0?(c[k>>2]|0)>>>0>o>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);h=h+1|0;if((h|0)>=(b[n>>1]|0))break;else g=g+16|0}}while(0);f=c[m>>2]|0;if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}}while(0);f=c[e>>2]|0;do if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+20>>2]|0;do if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+12>>2]|0;if(f|0)pi(a,f,1);f=c[e+24>>2]|0;if(f|0)ri(a,f);n=(a|0)==0;if(!(!n?(c[a+480>>2]|0)!=0:0))p=171;if((p|0)==171?(r=e+64|0,q=c[r>>2]|0,c[r>>2]=0,q|0):0){f=q;do{h=c[f>>2]|0;i=f+24|0;g=f;f=c[i>>2]|0;if(!h){c[r>>2]=g;c[i>>2]=0}else{q=h+360|0;c[i>>2]=c[q>>2];c[q>>2]=g}}while((f|0)!=0)}l=e+60|0;c:do if(c[l>>2]|0){m=e+56|0;d:do if((c[m>>2]|0)>0){h=a+480|0;i=a+304|0;j=a+308|0;k=a+300|0;if(n){f=0;while(1){do if((f|0)!=1?(s=c[(c[l>>2]|0)+(f<<2)>>2]|0,s|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{t=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);f=f+1|0;if((f|0)>=(c[m>>2]|0))break d}}f=0;do{e:do if((f|0)!=1?(t=c[(c[l>>2]|0)+(f<<2)>>2]|0,t|0):0){if(c[h>>2]|0){Xd(a,t);break}g=t;do if((c[i>>2]|0)>>>0<=g>>>0){if((c[j>>2]|0)>>>0<=g>>>0)break;c[t>>2]=c[k>>2];c[k>>2]=t;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{s=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);f=f+1|0}while((f|0)<(c[m>>2]|0))}while(0);f=c[l>>2]|0;if(f){do if(!n){if(!(c[a+480>>2]|0)){g=f;if((c[a+304>>2]|0)>>>0>g>>>0)break;if((c[a+308>>2]|0)>>>0<=g>>>0)break;t=a+300|0;c[f>>2]=c[t>>2];c[t>>2]=f}else Xd(a,f);f=e;p=211;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);p=210;break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);p=210;break}}else p=210}else p=210;while(0);if((p|0)==210)if(!n){f=e;p=211}if((p|0)==211){if(c[a+480>>2]|0){Xd(a,f);return}t=e;if((c[a+304>>2]|0)>>>0<=t>>>0?(c[a+308>>2]|0)>>>0>t>>>0:0){a=a+300|0;c[e>>2]=c[a>>2];c[a>>2]=e;return}else e=f}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{a=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function Wi(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=c[d>>2]|0;r=d+144|0;h=b[r>>1]|0;do if(h<<16>>16){q=d+116|0;g=c[q>>2]|0;a:do if(g|0){p=g+(((h&65535)<<1)*40|0)|0;k=c[g+32>>2]|0;l=k+480|0;h=(k|0)==0;m=k+304|0;n=k+308|0;o=k+300|0;if(c[l>>2]|0){if(h)while(1){do if(c[g+24>>2]|0?(i=c[g+20>>2]|0,i|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{o=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);g=g+40|0;if(g>>>0>=p>>>0)break a}while(1){do if(c[g+24>>2]|0?(j=c[g+20>>2]|0,j|0):0){if(c[l>>2]|0){Xd(k,j);break}i=j;if((c[m>>2]|0)>>>0<=i>>>0?(c[n>>2]|0)>>>0>i>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);g=g+40|0;if(g>>>0>=p>>>0)break a}}if(h)while(1){h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{o=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0;if(g>>>0>=p>>>0)break a}do{h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(!(c[l>>2]|0)){u=j;if((c[m>>2]|0)>>>0<=u>>>0?(c[n>>2]|0)>>>0>u>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{u=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else Xd(k,j);while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0}while(g>>>0<p>>>0)}while(0);g=c[q>>2]|0;if(g|0){if(t|0){if(c[t+480>>2]|0){Xd(t,g);break}u=g;if((c[t+304>>2]|0)>>>0<=u>>>0?(c[t+308>>2]|0)>>>0>u>>>0:0){u=t+300|0;c[g>>2]=c[u>>2];c[u>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);b[r>>1]=f;i=f*80|0;b:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))s=71;else{c[d+116>>2]=0;return}else{do if(!(0<0|(0==0?(e[t+276>>1]|0)>>>0<i>>>0:0))){h=t+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];u=t+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}h=t+296|0;g=c[h>>2]|0;if(!g){g=t+292|0;break}else{c[h>>2]=c[g>>2];u=t+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}}else g=t+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;s=71}while(0);if((s|0)==71)g=_d(t,i,0)|0;c[d+116>>2]=g;if(!((f|0)>0&(g|0)!=0))return;h=f<<1;while(1){c[g+32>>2]=t;b[g+8>>1]=1;c[g+24>>2]=0;if((h|0)>1){h=h+-1|0;g=g+40|0}else break}return}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!b)return;i=(a|0)==0;j=a+480|0;k=a+304|0;l=a+308|0;m=a+300|0;do{h=b;b=c[b+36>>2]|0;d=c[h+16>>2]|0;if(d|0)ni(a,d);d=c[h+20>>2]|0;if(d|0)ri(a,d);d=c[h+8>>2]|0;if(d|0)pi(a,d,1);d=c[h+24>>2]|0;do if(d|0){g=d+4|0;e=c[d>>2]|0;a:do if((c[g>>2]|0)>0){if(i){f=0;while(1){e=c[e+(f<<3)>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);f=f+1|0;e=c[d>>2]|0;if((f|0)>=(c[g>>2]|0))break a}}f=0;do{e=c[e+(f<<3)>>2]|0;do if(e|0){if(c[j>>2]|0){Xd(a,e);break}n=e;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[e>>2]=c[m>>2];c[m>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);f=f+1|0;e=c[d>>2]|0}while((f|0)<(c[g>>2]|0))}while(0);b:do if(e){do if(!i){if(!(c[j>>2]|0)){f=e;if((c[k>>2]|0)>>>0>f>>>0)break;if((c[l>>2]|0)>>>0<=f>>>0)break;c[e>>2]=c[m>>2];c[m>>2]=e}else Xd(a,e);e=41;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);e=40;break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);e=40;break}}else e=40;while(0);if((e|0)==40){e=0;if(!i)e=41}if((e|0)==41){if(c[j>>2]|0){Xd(a,d);break}n=d;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[d>>2]=c[m>>2];c[m>>2]=d;break}}if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{n=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);e=c[h+28>>2]|0;do if(e|0){d=c[e>>2]|0;if(d|0)ri(a,d);d=c[e+4>>2]|0;if(d|0)ni(a,d);d=c[e+8>>2]|0;if(d|0)ri(a,d);d=c[e+12>>2]|0;if(d|0)ni(a,d);if(!i){if(c[j>>2]|0){Xd(a,e);break}n=e;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[e>>2]=c[m>>2];c[m>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=c[h+32>>2]|0;c:do if(d){do if(!i){if(!(c[j>>2]|0)){e=d;if((c[k>>2]|0)>>>0>e>>>0)break;if((c[l>>2]|0)>>>0<=e>>>0)break;c[d>>2]=c[m>>2];c[m>>2]=d}else Xd(a,d);d=h;e=80;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);e=79;break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);e=79;break}}else e=79;while(0);if((e|0)==79)if(i){d=h;e=85}else{d=h;e=80}do if((e|0)==80){e=0;if(c[j>>2]|0){Xd(a,d);break}n=d;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[d>>2]=c[m>>2];c[m>>2]=d}else e=85}while(0);do if((e|0)==85)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{n=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0)}while((b|0)!=0);return}function Yi(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=c[e>>2]|0;a:do if(f){b:while(1){g=a[f>>0]|0;j=c[f+4>>2]|0;if(j&512|0){f=0;break a}if(g<<24>>24==-88)g=d[f+38>>0]|0;else g=g&255;switch((g&255)<<24>>24){case 106:{m=11;break b}case 77:case -94:case -92:{h=c[f+44>>2]|0;if(h|0){m=8;break b}if((g|0)==106){m=11;break b}else m=12;break}case 36:case -90:{f=c[f+12>>2]|0;break}default:m=12}c:do if((m|0)==12){m=0;if(!(j&256)){f=0;break a}g=c[f+12>>2]|0;if(g|0?c[g+4>>2]&256|0:0){f=g;break}i=c[f+16>>2]|0;h=c[f+20>>2]|0;if((j&2048|0)==0&(h|0)!=0?(k=c[h>>2]|0,(k|0)>0):0){g=0;while(1){f=c[h+4+(g*20|0)>>2]|0;g=g+1|0;if(c[f+4>>2]&256|0)break c;if((g|0)>=(k|0)){f=i;break}}}else f=i}while(0);if(!f){f=0;break a}}if((m|0)==8){f=b[f+32>>1]|0;if(f<<16>>16<=-1){f=0;break}f=Zi(l,a[l+78>>0]|0,c[(c[h+4>>2]|0)+(f<<16>>16<<4)+8>>2]|0,0)|0}else if((m|0)==11)f=_i(e,a[l+78>>0]|0,0,c[f+8>>2]|0)|0;if(f){if((c[f+12>>2]|0)==0?(_i(e,a[(c[e>>2]|0)+78>>0]|0,f,c[f>>2]|0)|0)==0:0){e=0;return e|0}}else f=0}else f=0;while(0);e=f;return e|0}function Zi(b,f,g,h){b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!g){g=c[b+8>>2]|0;p=(g|0)==0;b=f&255;b=b+-1|0;b=g+(b*20|0)|0;b=p?0:b;return b|0}p=b+380|0;l=c[b+392>>2]|0;if(!l){j=b+384|0;i=b+388|0}else{j=a[g>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=g;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}i=(i>>>0)%((c[p>>2]|0)>>>0)|0;j=l+(i<<3)|0;i=l+(i<<3)+4|0}j=c[j>>2]|0;a:do if(!j)i=59292;else{n=d[208+(d[g>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=g;do{l=l+1|0;m=m+1|0;q=a[l>>0]|0;k=(d[208+(q&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!j){i=59292;break}}}while(0);i=c[i+8>>2]|0;if(!((h|0)!=0&(i|0)==0)){p=i;b=(p|0)==0;q=f&255;q=q+-1|0;q=p+(q*20|0)|0;q=b?0:q;return q|0}l=(Eu(g)|0)&1073741823;m=l+61|0;b:do if(!b){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;o=39;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0<m>>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){q=c[14978]|0;h=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&h>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i)return 0;j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0)return 0}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0<m>>>0:0))){j=b+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=39;break b}j=b+296|0;i=c[j>>2]|0;if(!i){i=b+292|0;break}else{c[j>>2]=c[i>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=39;break b}}else i=b+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(b,m,0)|0;o=39}while(0);if((o|0)==39)if(!i)return 0;gw(i|0,0,m|0)|0;j=i+60|0;c[i>>2]=j;a[i+4>>0]=1;c[i+20>>2]=j;a[i+24>>0]=2;c[i+40>>2]=j;a[i+44>>0]=3;ew(j|0,g|0,l+1|0)|0;j=mi(p,j,i)|0;if(!j){p=i;b=(p|0)==0;q=f&255;q=q+-1|0;q=p+(q*20|0)|0;q=b?0:q;return q|0}i=b+81|0;if((a[i>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[i>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;i=b+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[b+236>>2]|0;if(i|0)c[i+12>>2]=7}if(c[b+480>>2]|0){Xd(b,j);return 0}q=j;if((c[b+304>>2]|0)>>>0<=q>>>0?(c[b+308>>2]|0)>>>0>q>>>0:0){q=b+300|0;c[j>>2]=c[q>>2];c[q>>2]=j;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);return 0}else{q=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);return 0}return 0}function _i(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;r=s;q=c[f>>2]|0;if(!h){h=Zi(q,g,i,0)|0;if(h|0){j=h;n=3}}else{j=h;n=3}if((n|0)==3?c[j+12>>2]|0:0){r=j;Ra=s;return r|0}k=g&255;l=q+248|0;a:do if(c[l>>2]|0){if(i|0){m=(Eu(i)|0)+1|0;b:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))n=16;else break a;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0<m>>>0:0))){j=q+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];j=q+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}j=q+296|0;h=c[j>>2]|0;if(!h){h=q+292|0;break}else{c[j>>2]=c[h>>2];j=q+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}}else h=q+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=16}while(0);if((n|0)==16)h=_d(q,m,0)|0;if(h|0){ew(h|0,i|0,m|0)|0;db[c[l>>2]&127](c[q+256>>2]|0,q,k,h);if(c[q+480>>2]|0){Xd(q,h);n=26;break}n=h;if((c[q+304>>2]|0)>>>0<=n>>>0?(c[q+308>>2]|0)>>>0>n>>>0:0){n=q+300|0;c[h>>2]=c[n>>2];c[n>>2]=h;n=26;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);n=26;break}else{n=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);n=26;break}}}}else n=26;while(0);c:do if((n|0)==26?(p=q+252|0,c[p>>2]|0):0){d:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))n=37;else break c;else{do if((e[q+276>>1]|0)>=40){h=q+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];m=q+284|0;c[m>>2]=(c[m>>2]|0)+1;break d}h=q+296|0;j=c[h>>2]|0;if(!j){h=q+292|0;break}else{c[h>>2]=c[j>>2];m=q+284|0;c[m>>2]=(c[m>>2]|0)+1;break d}}else h=q+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=37}while(0);if((n|0)==37)j=_d(q,40,0)|0;if(j|0){h=j;k=h+40|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(k|0));h=j+8|0;b[h>>1]=1;k=j+32|0;c[k>>2]=q;yc(j,i,-1,1,0)|0;l=b[h>>1]|0;if((l&514)==514?(a[j+10>>0]|0)==2:0){o=c[j+16>>2]|0;n=44}else n=42;if((n|0)==42?(l&1)==0:0){o=Gg(j,2)|0;n=44}if((n|0)==44?o|0:0)db[c[p>>2]&127](c[q+256>>2]|0,q,d[q+78>>0]|0,o);if(!((b[h>>1]&9216)==0?!(c[j+24>>2]|0):0))Cg(j);h=c[k>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}p=j;if((c[h+304>>2]|0)>>>0<=p>>>0?(c[h+308>>2]|0)>>>0>p>>>0:0){p=h+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}}while(0);g=Zi(q,g,i,0)|0;do if(g|0){if(c[g+12>>2]|0){r=g;Ra=s;return r|0}p=c[g>>2]|0;o=(p|0)==0;if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;e:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break e;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;h=(h|0)==0?0:h+40|0;if(!(c[h+12>>2]|0)){if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;f:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-n|0;if(!(t<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break f;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;h=(h|0)==0?0:h+20|0;if(!(c[h+12>>2]|0)){if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;g:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-n|0;if(!(t<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break g;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;if(!(c[h+12>>2]|0))break}};c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=0;t=g;Ra=s;return t|0}while(0);c[r>>2]=i;cd(f,38397,r);c[f+12>>2]=257;t=0;Ra=s;return t|0}\n\n// EMSCRIPTEN_END_FUNCS\nvar Va=[GK,jw,kw,lw,mw,nw,ow,pw,qw,rw,sw,tw,uw,vw,ww,xw,yw,zw,Aw,Bw,Cw,Dw,Ew,Fw,Gw,Hw,Iw,Jw,Kw,Lw,Mw,Nw,Ow,Pw,Qw,Rw,Sw,Tw,Uw,Vw,Ww,Xw,Yw,Zw,_w,$w,ax,bx,cx,dx,ex,fx,gx,hx,ix,jx,kx,lx,mx,nx,ox,px,qx,rx,sx,Dv,we,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK];var Wa=[HK,ux,vx,wx,xx,yx,zx,Ax,Bx,Cx,Dx,Ex,Fx,Gx,Hx,Ix,Jx,Kx,Lx,Mx,Nx,Ox,Px,Qx,Rx,Sx,Tx,Ux,Vx,Wx,Xx,Yx,Zx,_x,$x,ay,by,cy,dy,ey,fy,gy,hy,iy,jy,ky,ly,my,ny,oy,py,qy,ry,sy,ty,uy,vy,wy,xy,yy,zy,Ay,By,Cy,Dy,be,le,me,Nu,Bv,Ev,Be,Fe,Ze,Ki,Mi,Oi,Pi,ep,hp,ip,jp,lp,pp,Dq,Eq,Gq,Iq,Jq,Nq,Oq,Pq,Qq,Wq,Hp,Jp,Op,Qp,Sp,Tp,mq,oq,rq,tq,ks,ms,os,ps,Ds,Es,Gs,Is,Js,Ns,Os,Rs,rb,Re,HK,HK,HK,HK,HK,HK,HK,HK,HK,HK];var Xa=[IK,Fy,Gy,Hy,Iy,Jy,Ky,Ly,My,Ny,Oy,Py,Qy,Ry,Sy,Ty,Uy,Vy,Wy,Xy,Yy,Zy,_y,$y,az,bz,cz,dz,ez,fz,gz,hz,iz,jz,kz,lz,mz,nz,oz,pz,qz,rz,sz,tz,uz,vz,wz,xz,yz,zz,Az,Bz,Cz,Dz,Ez,Fz,Gz,Hz,Iz,Jz,Kz,Lz,Mz,Nz,Oz,Ob,Pb,Rb,Tb,Ub,ae,Je,Ke,fe,ge,he,ie,je,qe,Qu,Zu,Pu,Xu,yv,Kv,ve,fv,gv,Ou,Ce,De,Ee,Ge,He,Ie,bf,cf,Ji,Li,Ri,gp,Cq,Fq,Lq,Sq,Tq,Uq,Vq,Np,Pp,Vp,js,ls,rs,Cs,Fs,Ls,Ps,Qs,Ue,If,Kf,Yg,Zg,$k,Dk,Ek,Yj,Zj,vl,wl,Gl,Yk,Cm,Dm,Am,Vm,kk,lk,Jk,Hk,Mk,Nk,Ok,_k,xl,Sl,nm,fm,Bm,jo,ko,so,to,_p,$p,Zp,iq,hq,yt,zt,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK];var Ya=[JK,Qz,Rz,Sz,Tz,Uz,Vz,Wz,Xz,Yz,Zz,_z,$z,aA,bA,cA,dA,eA,fA,gA,hA,iA,jA,kA,lA,mA,nA,oA,pA,qA,rA,sA,tA,uA,vA,wA,xA,yA,zA,AA,BA,CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA,XA,YA,ZA,Kb,Nb,Qb,Sb,ee,ke,ue,Iu,$u,_u,Cv,Wu,af,Qi,np,qp,Kq,Gp,Up,lq,qq,qs,Ks,Ch,Dh,Eh,Dd,Yr,Xr,as,bs,gs,es,fs,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK];var Za=[KK,$A,aB,bB,cB,dB,eB,fB,gB,hB,iB,jB,kB,lB,mB,nB,oB,pB,qB,rB,sB,tB,uB,vB,wB,xB,yB,zB,AB,BB,CB,DB,EB,FB,GB,HB,IB,JB,KB,LB,MB,NB,OB,PB,QB,RB,SB,TB,UB,VB,WB,XB,YB,ZB,_B,$B,aC,bC,cC,dC,eC,fC,gC,hC,iC,Lb,Mb,oe,se,Mq,Ip,nq,sq,Ms,qf,pf,Ld,fh,ki,aq,bq,kd,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK];var _a=[LK,kC,lC,mC,nC,oC,pC,qC,rC,sC,tC,uC,vC,wC,xC,yC,zC,AC,BC,CC,DC,EC,FC,GC,HC,IC,JC,KC,LC,MC,NC,OC,PC,QC,RC,SC,TC,UC,VC,WC,XC,YC,ZC,_C,$C,aD,bD,cD,dD,eD,fD,gD,hD,iD,jD,kD,lD,mD,nD,oD,pD,qD,rD,sD,tD,Jb,ce,de,ne,re,_e,$e,Ni,Hq,Rq,Rp,ns,Hs,Hl,Dp,gt,ht,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK];var $a=[MK,vD,wD,xD,yD,zD,AD,BD,CD,DD,ED,FD,GD,HD,ID,JD,KD,LD,MD,ND,OD,PD,QD,RD,SD,TD,UD,VD,WD,XD,YD,ZD,_D,$D,aE,bE,cE,dE,eE,fE,gE,hE,iE,jE,kE,lE,mE,nE,oE,pE,qE,rE,sE,tE,uE,vE,wE,xE,yE,zE,AE,BE,CE,DE,EE,Lv,Ii,Aq,Bq,Kp,Mp,pq,uq,is,As,Bs,Xh,Yh,Wh,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK];var ab=[NK,GE,HE,IE,JE,KE,LE,ME,NE,OE,PE,QE,RE,SE,TE,UE,VE,WE,XE,YE,ZE,_E,$E,aF,bF,cF,dF,eF,fF,gF,hF,iF,jF,kF,lF,mF,nF,oF,pF,qF,rF,sF,tF,uF,vF,wF,xF,yF,zF,AF,BF,CF,DF,EF,FF,GF,HF,IF,JF,KF,LF,MF,NF,OF,PF,pe,wn,xn,Wn,Yn,Zn,$n,co,eo,vo,xo,zo,Bo,Eo,Ho,Ko,Lo,Oo,Po,Ro,fp,kp,mp,up,vp,qb,Fp,Qe,ih,vi,dh,ln,Qg,cs,mt,nt,pt,qt,rt,st,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK];var bb=[OK,RF,SF,TF,UF,VF,WF,XF,YF,ZF,_F,$F,aG,bG,cG,dG,eG,fG,gG,hG,iG,jG,kG,lG,mG,nG,oG,pG,qG,rG,sG,tG,uG,vG,wG,xG,yG,zG,AG,BG,CG,DG,EG,FG,GG,HG,IG,JG,KG,LG,MG,NG,OG,PG,QG,RG,SG,TG,UG,VG,WG,XG,YG,ZG,_G,op,tp,Em,Pk,Zk,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK];var cb=[PK,aH,bH,cH,dH,eH,fH,gH,hH,iH,jH,kH,lH,mH,nH,oH,pH,qH,rH,sH,tH,uH,vH,wH,xH,yH,zH,AH,BH,CH,DH,EH,FH,GH,HH,IH,JH,KH,LH,MH,NH,OH,PH,QH,RH,SH,TH,UH,VH,WH,XH,YH,ZH,_H,$H,aI,bI,cI,dI,eI,fI,gI,hI,iI,jI,bn,fn,kn,mn,nn,qn,rn,sn,tn,un,vn,yn,zn,An,Bn,Cn,Dn,En,Fn,Gn,Hn,In,Jn,Kn,Ln,Mn,Nn,On,Pn,Qn,Rn,Sn,Tn,Un,Vn,Xn,_n,ao,bo,fo,$m,go,ho,io,uo,xm,wo,yo,Ao,Co,Do,Fo,Go,Io,Jo,Mo,No,Qo,So,To,Uo,Vo,Wo,Xo,Yo,Zo,rp,Tr,Ur,Vr,Wr,At,Bt,Ct,Dt,Et,Ft,Gt,Ht,It,Jt,Kt,Lt,Mt,Nt,Ot,Pt,Qt,Rt,St,Tt,Ut,Vt,Wt,Xt,Yt,Zt,_t,$t,au,bu,cu,du,eu,fu,gu,hu,iu,ju,Kd,zq,ss,ts,us,Mf,Jf,Lf,lt,ot,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK];var db=[QK,lI,mI,nI,oI,pI,qI,rI,sI,tI,uI,vI,wI,xI,yI,zI,AI,BI,CI,DI,EI,FI,GI,HI,II,JI,KI,LI,MI,NI,OI,PI,QI,RI,SI,TI,UI,VI,WI,XI,YI,ZI,_I,$I,aJ,bJ,cJ,dJ,eJ,fJ,gJ,hJ,iJ,jJ,kJ,lJ,mJ,nJ,oJ,pJ,qJ,rJ,sJ,tJ,uJ,sp,Tj,tk,xt,ut,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK];var eb=[RK,wJ,xJ,yJ,zJ,AJ,BJ,CJ,DJ,EJ,FJ,GJ,HJ,IJ,JJ,KJ,LJ,MJ,NJ,OJ,PJ,QJ,RJ,SJ,TJ,UJ,VJ,WJ,XJ,YJ,ZJ,_J,$J,aK,bK,cK,dK,eK,fK,gK,hK,iK,jK,kK,lK,mK,nK,oK,pK,qK,rK,sK,tK,uK,vK,wK,xK,yK,zK,AK,BK,CK,DK,EK,FK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK];return{_RegisterExtensionFunctions:kt,___divdi3:Wv,___emscripten_environ_constructor:Nv,___errno_location:uu,___muldi3:Yv,___remdi3:Zv,___udivdi3:_v,___uremdi3:$v,__get_daylight:Pv,__get_environ:Rv,__get_timezone:Qv,__get_tzname:Ov,_bitshift64Ashr:aw,_bitshift64Lshr:bw,_bitshift64Shl:cw,_emscripten_replace_memory:Ua,_free:mu,_i64Add:Sv,_i64Subtract:Tv,_llvm_bswap_i32:dw,_malloc:lu,_memalign:ru,_memcpy:ew,_memmove:fw,_memset:gw,_sbrk:hw,_sqlite3_bind_blob:Sc,_sqlite3_bind_double:Uc,_sqlite3_bind_int:Wc,_sqlite3_bind_parameter_index:Zc,_sqlite3_bind_text:Xc,_sqlite3_changes:Ad,_sqlite3_clear_bindings:lc,_sqlite3_close_v2:Cd,_sqlite3_column_blob:Kc,_sqlite3_column_bytes:Lc,_sqlite3_column_double:Mc,_sqlite3_column_name:Rc,_sqlite3_column_text:Pc,_sqlite3_column_type:Qc,_sqlite3_create_function_v2:Gd,_sqlite3_data_count:Jc,_sqlite3_errmsg:pd,_sqlite3_exec:nd,_sqlite3_finalize:gc,_sqlite3_free:qb,_sqlite3_open:Od,_sqlite3_prepare_v2:od,_sqlite3_reset:jc,_sqlite3_result_blob:vc,_sqlite3_result_double:wc,_sqlite3_result_error:xc,_sqlite3_result_int:zc,_sqlite3_result_int64:Ac,_sqlite3_result_null:Bc,_sqlite3_result_text:Cc,_sqlite3_step:Gc,_sqlite3_value_blob:mc,_sqlite3_value_bytes:oc,_sqlite3_value_double:pc,_sqlite3_value_int:qc,_sqlite3_value_text:nc,_sqlite3_value_type:sc,dynCall_i:iw,dynCall_ii:tx,dynCall_iii:Ey,dynCall_iiii:Pz,dynCall_iiiii:_A,dynCall_iiiiii:jC,dynCall_iiiiiii:uD,dynCall_vi:FE,dynCall_vii:QF,dynCall_viii:$G,dynCall_viiii:kI,dynCall_viiiiii:vJ,establishStackSpace:ib,stackAlloc:fb,stackRestore:hb,stackSave:gb}})\n\n\n// EMSCRIPTEN_END_ASM\n(Zc,bd,buffer);f._RegisterExtensionFunctions=Z._RegisterExtensionFunctions;f.___divdi3=Z.___divdi3;var lb=f.___emscripten_environ_constructor=Z.___emscripten_environ_constructor;f.___errno_location=Z.___errno_location;f.___muldi3=Z.___muldi3;f.___remdi3=Z.___remdi3;f.___udivdi3=Z.___udivdi3;f.___uremdi3=Z.___uremdi3;var Tc=f.__get_daylight=Z.__get_daylight;f.__get_environ=Z.__get_environ;\nvar Sc=f.__get_timezone=Z.__get_timezone,Uc=f.__get_tzname=Z.__get_tzname;f._bitshift64Ashr=Z._bitshift64Ashr;f._bitshift64Lshr=Z._bitshift64Lshr;f._bitshift64Shl=Z._bitshift64Shl;f._emscripten_replace_memory=Z._emscripten_replace_memory;var fa=f._free=Z._free;f._i64Add=Z._i64Add;f._i64Subtract=Z._i64Subtract;f._llvm_bswap_i32=Z._llvm_bswap_i32;var Wa=f._malloc=Z._malloc,$c=f._memalign=Z._memalign;f._memcpy=Z._memcpy;f._memmove=Z._memmove;var ad=f._memset=Z._memset;f._sbrk=Z._sbrk;\nf._sqlite3_bind_blob=Z._sqlite3_bind_blob;f._sqlite3_bind_double=Z._sqlite3_bind_double;f._sqlite3_bind_int=Z._sqlite3_bind_int;f._sqlite3_bind_parameter_index=Z._sqlite3_bind_parameter_index;f._sqlite3_bind_text=Z._sqlite3_bind_text;f._sqlite3_changes=Z._sqlite3_changes;f._sqlite3_clear_bindings=Z._sqlite3_clear_bindings;f._sqlite3_close_v2=Z._sqlite3_close_v2;f._sqlite3_column_blob=Z._sqlite3_column_blob;f._sqlite3_column_bytes=Z._sqlite3_column_bytes;f._sqlite3_column_double=Z._sqlite3_column_double;\nf._sqlite3_column_name=Z._sqlite3_column_name;f._sqlite3_column_text=Z._sqlite3_column_text;f._sqlite3_column_type=Z._sqlite3_column_type;f._sqlite3_create_function_v2=Z._sqlite3_create_function_v2;f._sqlite3_data_count=Z._sqlite3_data_count;f._sqlite3_errmsg=Z._sqlite3_errmsg;f._sqlite3_exec=Z._sqlite3_exec;f._sqlite3_finalize=Z._sqlite3_finalize;f._sqlite3_free=Z._sqlite3_free;f._sqlite3_open=Z._sqlite3_open;f._sqlite3_prepare_v2=Z._sqlite3_prepare_v2;f._sqlite3_reset=Z._sqlite3_reset;\nf._sqlite3_result_blob=Z._sqlite3_result_blob;f._sqlite3_result_double=Z._sqlite3_result_double;f._sqlite3_result_error=Z._sqlite3_result_error;f._sqlite3_result_int=Z._sqlite3_result_int;f._sqlite3_result_int64=Z._sqlite3_result_int64;f._sqlite3_result_null=Z._sqlite3_result_null;f._sqlite3_result_text=Z._sqlite3_result_text;f._sqlite3_step=Z._sqlite3_step;f._sqlite3_value_blob=Z._sqlite3_value_blob;f._sqlite3_value_bytes=Z._sqlite3_value_bytes;f._sqlite3_value_double=Z._sqlite3_value_double;\nf._sqlite3_value_int=Z._sqlite3_value_int;f._sqlite3_value_text=Z._sqlite3_value_text;f._sqlite3_value_type=Z._sqlite3_value_type;f.establishStackSpace=Z.establishStackSpace;var h=f.stackAlloc=Z.stackAlloc,qa=f.stackRestore=Z.stackRestore,na=f.stackSave=Z.stackSave;f.dynCall_i=Z.dynCall_i;f.dynCall_ii=Z.dynCall_ii;f.dynCall_iii=Z.dynCall_iii;f.dynCall_iiii=Z.dynCall_iiii;f.dynCall_iiiii=Z.dynCall_iiiii;f.dynCall_iiiiii=Z.dynCall_iiiiii;f.dynCall_iiiiiii=Z.dynCall_iiiiiii;f.dynCall_vi=Z.dynCall_vi;\nf.dynCall_vii=Z.dynCall_vii;f.dynCall_viii=Z.dynCall_viii;f.dynCall_viiii=Z.dynCall_viiii;f.dynCall_viiiiii=Z.dynCall_viiiiii;f.asm=Z;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return\"number\"===a});return\"string\"!==b&&e&&!d?Qa(a):function(){return Ra(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h;\nif(H){if(String.prototype.startsWith?!H.startsWith(kb):0!==H.indexOf(kb)){var cd=H;H=f.locateFile?f.locateFile(cd,z):z+cd}if(y||za){var dd=f.readBinary(H);E.set(dd,8)}else{G++;f.monitorRunDependencies&&f.monitorRunDependencies(G);var ed=function(a){a.byteLength&&(a=new Uint8Array(a));E.set(a,8);f.memoryInitializerRequest&&delete f.memoryInitializerRequest.response;G--;f.monitorRunDependencies&&f.monitorRunDependencies(G);0==G&&(null!==ib&&(clearInterval(ib),ib=null),jb&&(a=jb,jb=null,a()))},fd=function(){f.readAsync(H,\ned,function(){throw\"could not load memory initializer \"+H;})},gd=B(H);if(gd)ed(gd.buffer);else if(f.memoryInitializerRequest){var hd=function(){var a=f.memoryInitializerRequest,b=a.response;if(200!==a.status&&0!==a.status)if(b=B(f.memoryInitializerRequestURL))b=b.buffer;else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+a.status+\", retrying \"+H);fd();return}ed(b)};f.memoryInitializerRequest.response?setTimeout(hd,0):f.memoryInitializerRequest.addEventListener(\"load\",\nhd)}else fd()}}function id(a){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+a+\")\";this.status=a}id.prototype=Error();id.prototype.constructor=id;jb=function jd(){f.calledRun||kd();f.calledRun||(jb=jd)};\nfunction kd(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Na)){gb||(gb=!0,f.noFSInit||Ic||(Ic=!0,Hc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Jc(\"stdin\",f.stdin):bc(\"/dev/tty\",\"/dev/stdin\"),f.stdout?Jc(\"stdout\",null,f.stdout):bc(\"/dev/tty\",\"/dev/stdout\"),f.stderr?Jc(\"stderr\",null,f.stderr):bc(\"/dev/tty1\",\"/dev/stderr\"),p(\"/dev/stdin\",\"r\"),p(\"/dev/stdout\",\"w\"),p(\"/dev/stderr\",\"w\")),bb(db));Lb=!1;bb(eb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for(\"function\"==\ntypeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();fb.unshift(a)}bb(fb)}}if(!(0<G)){if(f.preRun)for(\"function\"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)hb();bb(cb);0<G||f.calledRun||(f.setStatus?(f.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){f.setStatus(\"\")},1);a()},1)):a())}}f.run=kd;\nfunction C(a){if(f.onAbort)f.onAbort(a);void 0!==a?(Da(a),Ea(a),a=JSON.stringify(a)):a=\"\";Na=!0;throw\"abort(\"+a+\"). Build with -s ASSERTIONS=1 for more info.\";}f.abort=C;if(f.preInit)for(\"function\"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();f.noExitRuntime=!0;kd();\n\n\n\n        // The shell-pre.js and emcc-generated code goes above\n        return Module;\n    }); // The end of the promise being returned\n\n  return initSqlJsPromise;\n} // The end of our initSqlJs function\n\n// This bit below is copied almost exactly from what you get when you use the MODULARIZE=1 flag with emcc\n// However, we don't want to use the emcc modularization. See shell-pre.js\nif (typeof exports === 'object' && typeof module === 'object'){\n    module.exports = initSqlJs;\n    // This will allow the module to be used in ES6 or CommonJS\n    module.exports.default = initSqlJs;\n}\nelse if (typeof define === 'function' && define['amd']) {\n    define([], function() { return initSqlJs; });\n}\nelse if (typeof exports === 'object'){\n    exports[\"Module\"] = initSqlJs;\n}\n    \n\n}).call(this,require('_process'),require(\"buffer\").Buffer,\"/node_modules/sql.js/dist\")\n},{\"_process\":284,\"buffer\":182,\"crypto\":192,\"fs\":177,\"path\":276}],328:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n\n},{\"events\":221,\"inherits\":262,\"readable-stream/duplex.js\":301,\"readable-stream/passthrough.js\":311,\"readable-stream/readable.js\":312,\"readable-stream/transform.js\":313,\"readable-stream/writable.js\":314}],329:[function(require,module,exports){\n(function (global){\nvar ClientRequest = require('./lib/request')\nvar response = require('./lib/response')\nvar extend = require('xtend')\nvar statusCodes = require('builtin-status-codes')\nvar url = require('url')\n\nvar http = exports\n\nhttp.request = function (opts, cb) {\n\tif (typeof opts === 'string')\n\t\topts = url.parse(opts)\n\telse\n\t\topts = extend(opts)\n\n\t// Normally, the page is loaded from http or https, so not specifying a protocol\n\t// will result in a (valid) protocol-relative url. However, this won't work if\n\t// the protocol is something else, like 'file:'\n\tvar defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''\n\n\tvar protocol = opts.protocol || defaultProtocol\n\tvar host = opts.hostname || opts.host\n\tvar port = opts.port\n\tvar path = opts.path || '/'\n\n\t// Necessary for IPv6 addresses\n\tif (host && host.indexOf(':') !== -1)\n\t\thost = '[' + host + ']'\n\n\t// This may be a relative url. The browser should always be able to interpret it correctly.\n\topts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path\n\topts.method = (opts.method || 'GET').toUpperCase()\n\topts.headers = opts.headers || {}\n\n\t// Also valid opts.auth, opts.mode\n\n\tvar req = new ClientRequest(opts)\n\tif (cb)\n\t\treq.on('response', cb)\n\treturn req\n}\n\nhttp.get = function get (opts, cb) {\n\tvar req = http.request(opts, cb)\n\treq.end()\n\treturn req\n}\n\nhttp.ClientRequest = ClientRequest\nhttp.IncomingMessage = response.IncomingMessage\n\nhttp.Agent = function () {}\nhttp.Agent.defaultMaxSockets = 4\n\nhttp.globalAgent = new http.Agent()\n\nhttp.STATUS_CODES = statusCodes\n\nhttp.METHODS = [\n\t'CHECKOUT',\n\t'CONNECT',\n\t'COPY',\n\t'DELETE',\n\t'GET',\n\t'HEAD',\n\t'LOCK',\n\t'M-SEARCH',\n\t'MERGE',\n\t'MKACTIVITY',\n\t'MKCOL',\n\t'MOVE',\n\t'NOTIFY',\n\t'OPTIONS',\n\t'PATCH',\n\t'POST',\n\t'PROPFIND',\n\t'PROPPATCH',\n\t'PURGE',\n\t'PUT',\n\t'REPORT',\n\t'SEARCH',\n\t'SUBSCRIBE',\n\t'TRACE',\n\t'UNLOCK',\n\t'UNSUBSCRIBE'\n]\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./lib/request\":331,\"./lib/response\":332,\"builtin-status-codes\":183,\"url\":338,\"xtend\":362}],330:[function(require,module,exports){\n(function (global){\nexports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)\n\nexports.writableStream = isFunction(global.WritableStream)\n\nexports.abortController = isFunction(global.AbortController)\n\nexports.blobConstructor = false\ntry {\n\tnew Blob([new ArrayBuffer(1)])\n\texports.blobConstructor = true\n} catch (e) {}\n\n// The xhr request to example.com may violate some restrictive CSP configurations,\n// so if we're running in a browser that supports `fetch`, avoid calling getXHR()\n// and assume support for certain features below.\nvar xhr\nfunction getXHR () {\n\t// Cache the xhr value\n\tif (xhr !== undefined) return xhr\n\n\tif (global.XMLHttpRequest) {\n\t\txhr = new global.XMLHttpRequest()\n\t\t// If XDomainRequest is available (ie only, where xhr might not work\n\t\t// cross domain), use the page location. Otherwise use example.com\n\t\t// Note: this doesn't actually make an http request.\n\t\ttry {\n\t\t\txhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')\n\t\t} catch(e) {\n\t\t\txhr = null\n\t\t}\n\t} else {\n\t\t// Service workers don't have XHR\n\t\txhr = null\n\t}\n\treturn xhr\n}\n\nfunction checkTypeSupport (type) {\n\tvar xhr = getXHR()\n\tif (!xhr) return false\n\ttry {\n\t\txhr.responseType = type\n\t\treturn xhr.responseType === type\n\t} catch (e) {}\n\treturn false\n}\n\n// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.\n// Safari 7.1 appears to have fixed this bug.\nvar haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'\nvar haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)\n\n// If fetch is supported, then arraybuffer will be supported too. Skip calling\n// checkTypeSupport(), since that calls getXHR().\nexports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))\n\n// These next two tests unavoidably show warnings in Chrome. Since fetch will always\n// be used if it's available, just return false for these to avoid the warnings.\nexports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')\nexports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&\n\tcheckTypeSupport('moz-chunked-arraybuffer')\n\n// If fetch is supported, then overrideMimeType will be supported too. Skip calling\n// getXHR().\nexports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)\n\nexports.vbArray = isFunction(global.VBArray)\n\nfunction isFunction (value) {\n\treturn typeof value === 'function'\n}\n\nxhr = null // Help gc\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],331:[function(require,module,exports){\n(function (process,global,Buffer){\nvar capability = require('./capability')\nvar inherits = require('inherits')\nvar response = require('./response')\nvar stream = require('readable-stream')\nvar toArrayBuffer = require('to-arraybuffer')\n\nvar IncomingMessage = response.IncomingMessage\nvar rStates = response.readyStates\n\nfunction decideMode (preferBinary, useFetch) {\n\tif (capability.fetch && useFetch) {\n\t\treturn 'fetch'\n\t} else if (capability.mozchunkedarraybuffer) {\n\t\treturn 'moz-chunked-arraybuffer'\n\t} else if (capability.msstream) {\n\t\treturn 'ms-stream'\n\t} else if (capability.arraybuffer && preferBinary) {\n\t\treturn 'arraybuffer'\n\t} else if (capability.vbArray && preferBinary) {\n\t\treturn 'text:vbarray'\n\t} else {\n\t\treturn 'text'\n\t}\n}\n\nvar ClientRequest = module.exports = function (opts) {\n\tvar self = this\n\tstream.Writable.call(self)\n\n\tself._opts = opts\n\tself._body = []\n\tself._headers = {}\n\tif (opts.auth)\n\t\tself.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))\n\tObject.keys(opts.headers).forEach(function (name) {\n\t\tself.setHeader(name, opts.headers[name])\n\t})\n\n\tvar preferBinary\n\tvar useFetch = true\n\tif (opts.mode === 'disable-fetch' || ('requestTimeout' in opts && !capability.abortController)) {\n\t\t// If the use of XHR should be preferred. Not typically needed.\n\t\tuseFetch = false\n\t\tpreferBinary = true\n\t} else if (opts.mode === 'prefer-streaming') {\n\t\t// If streaming is a high priority but binary compatibility and\n\t\t// the accuracy of the 'content-type' header aren't\n\t\tpreferBinary = false\n\t} else if (opts.mode === 'allow-wrong-content-type') {\n\t\t// If streaming is more important than preserving the 'content-type' header\n\t\tpreferBinary = !capability.overrideMimeType\n\t} else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {\n\t\t// Use binary if text streaming may corrupt data or the content-type header, or for speed\n\t\tpreferBinary = true\n\t} else {\n\t\tthrow new Error('Invalid value for opts.mode')\n\t}\n\tself._mode = decideMode(preferBinary, useFetch)\n\tself._fetchTimer = null\n\n\tself.on('finish', function () {\n\t\tself._onFinish()\n\t})\n}\n\ninherits(ClientRequest, stream.Writable)\n\nClientRequest.prototype.setHeader = function (name, value) {\n\tvar self = this\n\tvar lowerName = name.toLowerCase()\n\t// This check is not necessary, but it prevents warnings from browsers about setting unsafe\n\t// headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but\n\t// http-browserify did it, so I will too.\n\tif (unsafeHeaders.indexOf(lowerName) !== -1)\n\t\treturn\n\n\tself._headers[lowerName] = {\n\t\tname: name,\n\t\tvalue: value\n\t}\n}\n\nClientRequest.prototype.getHeader = function (name) {\n\tvar header = this._headers[name.toLowerCase()]\n\tif (header)\n\t\treturn header.value\n\treturn null\n}\n\nClientRequest.prototype.removeHeader = function (name) {\n\tvar self = this\n\tdelete self._headers[name.toLowerCase()]\n}\n\nClientRequest.prototype._onFinish = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\tvar opts = self._opts\n\n\tvar headersObj = self._headers\n\tvar body = null\n\tif (opts.method !== 'GET' && opts.method !== 'HEAD') {\n\t\tif (capability.arraybuffer) {\n\t\t\tbody = toArrayBuffer(Buffer.concat(self._body))\n\t\t} else if (capability.blobConstructor) {\n\t\t\tbody = new global.Blob(self._body.map(function (buffer) {\n\t\t\t\treturn toArrayBuffer(buffer)\n\t\t\t}), {\n\t\t\t\ttype: (headersObj['content-type'] || {}).value || ''\n\t\t\t})\n\t\t} else {\n\t\t\t// get utf8 string\n\t\t\tbody = Buffer.concat(self._body).toString()\n\t\t}\n\t}\n\n\t// create flattened list of headers\n\tvar headersList = []\n\tObject.keys(headersObj).forEach(function (keyName) {\n\t\tvar name = headersObj[keyName].name\n\t\tvar value = headersObj[keyName].value\n\t\tif (Array.isArray(value)) {\n\t\t\tvalue.forEach(function (v) {\n\t\t\t\theadersList.push([name, v])\n\t\t\t})\n\t\t} else {\n\t\t\theadersList.push([name, value])\n\t\t}\n\t})\n\n\tif (self._mode === 'fetch') {\n\t\tvar signal = null\n\t\tvar fetchTimer = null\n\t\tif (capability.abortController) {\n\t\t\tvar controller = new AbortController()\n\t\t\tsignal = controller.signal\n\t\t\tself._fetchAbortController = controller\n\n\t\t\tif ('requestTimeout' in opts && opts.requestTimeout !== 0) {\n\t\t\t\tself._fetchTimer = global.setTimeout(function () {\n\t\t\t\t\tself.emit('requestTimeout')\n\t\t\t\t\tif (self._fetchAbortController)\n\t\t\t\t\t\tself._fetchAbortController.abort()\n\t\t\t\t}, opts.requestTimeout)\n\t\t\t}\n\t\t}\n\n\t\tglobal.fetch(self._opts.url, {\n\t\t\tmethod: self._opts.method,\n\t\t\theaders: headersList,\n\t\t\tbody: body || undefined,\n\t\t\tmode: 'cors',\n\t\t\tcredentials: opts.withCredentials ? 'include' : 'same-origin',\n\t\t\tsignal: signal\n\t\t}).then(function (response) {\n\t\t\tself._fetchResponse = response\n\t\t\tself._connect()\n\t\t}, function (reason) {\n\t\t\tglobal.clearTimeout(self._fetchTimer)\n\t\t\tif (!self._destroyed)\n\t\t\t\tself.emit('error', reason)\n\t\t})\n\t} else {\n\t\tvar xhr = self._xhr = new global.XMLHttpRequest()\n\t\ttry {\n\t\t\txhr.open(self._opts.method, self._opts.url, true)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\n\t\t// Can't set responseType on really old browsers\n\t\tif ('responseType' in xhr)\n\t\t\txhr.responseType = self._mode.split(':')[0]\n\n\t\tif ('withCredentials' in xhr)\n\t\t\txhr.withCredentials = !!opts.withCredentials\n\n\t\tif (self._mode === 'text' && 'overrideMimeType' in xhr)\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined')\n\n\t\tif ('requestTimeout' in opts) {\n\t\t\txhr.timeout = opts.requestTimeout\n\t\t\txhr.ontimeout = function () {\n\t\t\t\tself.emit('requestTimeout')\n\t\t\t}\n\t\t}\n\n\t\theadersList.forEach(function (header) {\n\t\t\txhr.setRequestHeader(header[0], header[1])\n\t\t})\n\n\t\tself._response = null\n\t\txhr.onreadystatechange = function () {\n\t\t\tswitch (xhr.readyState) {\n\t\t\t\tcase rStates.LOADING:\n\t\t\t\tcase rStates.DONE:\n\t\t\t\t\tself._onXHRProgress()\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Necessary for streaming in Firefox, since xhr.response is ONLY defined\n\t\t// in onprogress, not in onreadystatechange with xhr.readyState = 3\n\t\tif (self._mode === 'moz-chunked-arraybuffer') {\n\t\t\txhr.onprogress = function () {\n\t\t\t\tself._onXHRProgress()\n\t\t\t}\n\t\t}\n\n\t\txhr.onerror = function () {\n\t\t\tif (self._destroyed)\n\t\t\t\treturn\n\t\t\tself.emit('error', new Error('XHR error'))\n\t\t}\n\n\t\ttry {\n\t\t\txhr.send(body)\n\t\t} catch (err) {\n\t\t\tprocess.nextTick(function () {\n\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n}\n\n/**\n * Checks if xhr.status is readable and non-zero, indicating no error.\n * Even though the spec says it should be available in readyState 3,\n * accessing it throws an exception in IE8\n */\nfunction statusValid (xhr) {\n\ttry {\n\t\tvar status = xhr.status\n\t\treturn (status !== null && status !== 0)\n\t} catch (e) {\n\t\treturn false\n\t}\n}\n\nClientRequest.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tif (!statusValid(self._xhr) || self._destroyed)\n\t\treturn\n\n\tif (!self._response)\n\t\tself._connect()\n\n\tself._response._onXHRProgress()\n}\n\nClientRequest.prototype._connect = function () {\n\tvar self = this\n\n\tif (self._destroyed)\n\t\treturn\n\n\tself._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode, self._fetchTimer)\n\tself._response.on('error', function(err) {\n\t\tself.emit('error', err)\n\t})\n\n\tself.emit('response', self._response)\n}\n\nClientRequest.prototype._write = function (chunk, encoding, cb) {\n\tvar self = this\n\n\tself._body.push(chunk)\n\tcb()\n}\n\nClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {\n\tvar self = this\n\tself._destroyed = true\n\tglobal.clearTimeout(self._fetchTimer)\n\tif (self._response)\n\t\tself._response._destroyed = true\n\tif (self._xhr)\n\t\tself._xhr.abort()\n\telse if (self._fetchAbortController)\n\t\tself._fetchAbortController.abort()\n}\n\nClientRequest.prototype.end = function (data, encoding, cb) {\n\tvar self = this\n\tif (typeof data === 'function') {\n\t\tcb = data\n\t\tdata = undefined\n\t}\n\n\tstream.Writable.prototype.end.call(self, data, encoding, cb)\n}\n\nClientRequest.prototype.flushHeaders = function () {}\nClientRequest.prototype.setTimeout = function () {}\nClientRequest.prototype.setNoDelay = function () {}\nClientRequest.prototype.setSocketKeepAlive = function () {}\n\n// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method\nvar unsafeHeaders = [\n\t'accept-charset',\n\t'accept-encoding',\n\t'access-control-request-headers',\n\t'access-control-request-method',\n\t'connection',\n\t'content-length',\n\t'cookie',\n\t'cookie2',\n\t'date',\n\t'dnt',\n\t'expect',\n\t'host',\n\t'keep-alive',\n\t'origin',\n\t'referer',\n\t'te',\n\t'trailer',\n\t'transfer-encoding',\n\t'upgrade',\n\t'via'\n]\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {},require(\"buffer\").Buffer)\n},{\"./capability\":330,\"./response\":332,\"_process\":284,\"buffer\":182,\"inherits\":262,\"readable-stream\":312,\"to-arraybuffer\":336}],332:[function(require,module,exports){\n(function (process,global,Buffer){\nvar capability = require('./capability')\nvar inherits = require('inherits')\nvar stream = require('readable-stream')\n\nvar rStates = exports.readyStates = {\n\tUNSENT: 0,\n\tOPENED: 1,\n\tHEADERS_RECEIVED: 2,\n\tLOADING: 3,\n\tDONE: 4\n}\n\nvar IncomingMessage = exports.IncomingMessage = function (xhr, response, mode, fetchTimer) {\n\tvar self = this\n\tstream.Readable.call(self)\n\n\tself._mode = mode\n\tself.headers = {}\n\tself.rawHeaders = []\n\tself.trailers = {}\n\tself.rawTrailers = []\n\n\t// Fake the 'close' event, but only once 'end' fires\n\tself.on('end', function () {\n\t\t// The nextTick is necessary to prevent the 'request' module from causing an infinite loop\n\t\tprocess.nextTick(function () {\n\t\t\tself.emit('close')\n\t\t})\n\t})\n\n\tif (mode === 'fetch') {\n\t\tself._fetchResponse = response\n\n\t\tself.url = response.url\n\t\tself.statusCode = response.status\n\t\tself.statusMessage = response.statusText\n\t\t\n\t\tresponse.headers.forEach(function (header, key){\n\t\t\tself.headers[key.toLowerCase()] = header\n\t\t\tself.rawHeaders.push(key, header)\n\t\t})\n\n\t\tif (capability.writableStream) {\n\t\t\tvar writable = new WritableStream({\n\t\t\t\twrite: function (chunk) {\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tif (self._destroyed) {\n\t\t\t\t\t\t\treject()\n\t\t\t\t\t\t} else if(self.push(new Buffer(chunk))) {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself._resumeFetch = resolve\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.push(null)\n\t\t\t\t},\n\t\t\t\tabort: function (err) {\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t}\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tresponse.body.pipeTo(writable).catch(function (err) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tif (!self._destroyed)\n\t\t\t\t\t\tself.emit('error', err)\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t} catch (e) {} // pipeTo method isn't defined. Can't find a better way to feature test this\n\t\t}\n\t\t// fallback for when writableStream or pipeTo aren't available\n\t\tvar reader = response.body.getReader()\n\t\tfunction read () {\n\t\t\treader.read().then(function (result) {\n\t\t\t\tif (self._destroyed)\n\t\t\t\t\treturn\n\t\t\t\tif (result.done) {\n\t\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\t\tself.push(null)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.push(new Buffer(result.value))\n\t\t\t\tread()\n\t\t\t}).catch(function (err) {\n\t\t\t\tglobal.clearTimeout(fetchTimer)\n\t\t\t\tif (!self._destroyed)\n\t\t\t\t\tself.emit('error', err)\n\t\t\t})\n\t\t}\n\t\tread()\n\t} else {\n\t\tself._xhr = xhr\n\t\tself._pos = 0\n\n\t\tself.url = xhr.responseURL\n\t\tself.statusCode = xhr.status\n\t\tself.statusMessage = xhr.statusText\n\t\tvar headers = xhr.getAllResponseHeaders().split(/\\r?\\n/)\n\t\theaders.forEach(function (header) {\n\t\t\tvar matches = header.match(/^([^:]+):\\s*(.*)/)\n\t\t\tif (matches) {\n\t\t\t\tvar key = matches[1].toLowerCase()\n\t\t\t\tif (key === 'set-cookie') {\n\t\t\t\t\tif (self.headers[key] === undefined) {\n\t\t\t\t\t\tself.headers[key] = []\n\t\t\t\t\t}\n\t\t\t\t\tself.headers[key].push(matches[2])\n\t\t\t\t} else if (self.headers[key] !== undefined) {\n\t\t\t\t\tself.headers[key] += ', ' + matches[2]\n\t\t\t\t} else {\n\t\t\t\t\tself.headers[key] = matches[2]\n\t\t\t\t}\n\t\t\t\tself.rawHeaders.push(matches[1], matches[2])\n\t\t\t}\n\t\t})\n\n\t\tself._charset = 'x-user-defined'\n\t\tif (!capability.overrideMimeType) {\n\t\t\tvar mimeType = self.rawHeaders['mime-type']\n\t\t\tif (mimeType) {\n\t\t\t\tvar charsetMatch = mimeType.match(/;\\s*charset=([^;])(;|$)/)\n\t\t\t\tif (charsetMatch) {\n\t\t\t\t\tself._charset = charsetMatch[1].toLowerCase()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!self._charset)\n\t\t\t\tself._charset = 'utf-8' // best guess\n\t\t}\n\t}\n}\n\ninherits(IncomingMessage, stream.Readable)\n\nIncomingMessage.prototype._read = function () {\n\tvar self = this\n\n\tvar resolve = self._resumeFetch\n\tif (resolve) {\n\t\tself._resumeFetch = null\n\t\tresolve()\n\t}\n}\n\nIncomingMessage.prototype._onXHRProgress = function () {\n\tvar self = this\n\n\tvar xhr = self._xhr\n\n\tvar response = null\n\tswitch (self._mode) {\n\t\tcase 'text:vbarray': // For IE9\n\t\t\tif (xhr.readyState !== rStates.DONE)\n\t\t\t\tbreak\n\t\t\ttry {\n\t\t\t\t// This fails in IE8\n\t\t\t\tresponse = new global.VBArray(xhr.responseBody).toArray()\n\t\t\t} catch (e) {}\n\t\t\tif (response !== null) {\n\t\t\t\tself.push(new Buffer(response))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Falls through in IE8\t\n\t\tcase 'text':\n\t\t\ttry { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4\n\t\t\t\tresponse = xhr.responseText\n\t\t\t} catch (e) {\n\t\t\t\tself._mode = 'text:vbarray'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif (response.length > self._pos) {\n\t\t\t\tvar newData = response.substr(self._pos)\n\t\t\t\tif (self._charset === 'x-user-defined') {\n\t\t\t\t\tvar buffer = new Buffer(newData.length)\n\t\t\t\t\tfor (var i = 0; i < newData.length; i++)\n\t\t\t\t\t\tbuffer[i] = newData.charCodeAt(i) & 0xff\n\n\t\t\t\t\tself.push(buffer)\n\t\t\t\t} else {\n\t\t\t\t\tself.push(newData, self._charset)\n\t\t\t\t}\n\t\t\t\tself._pos = response.length\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'arraybuffer':\n\t\t\tif (xhr.readyState !== rStates.DONE || !xhr.response)\n\t\t\t\tbreak\n\t\t\tresponse = xhr.response\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'moz-chunked-arraybuffer': // take whole\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING || !response)\n\t\t\t\tbreak\n\t\t\tself.push(new Buffer(new Uint8Array(response)))\n\t\t\tbreak\n\t\tcase 'ms-stream':\n\t\t\tresponse = xhr.response\n\t\t\tif (xhr.readyState !== rStates.LOADING)\n\t\t\t\tbreak\n\t\t\tvar reader = new global.MSStreamReader()\n\t\t\treader.onprogress = function () {\n\t\t\t\tif (reader.result.byteLength > self._pos) {\n\t\t\t\t\tself.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))\n\t\t\t\t\tself._pos = reader.result.byteLength\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.onload = function () {\n\t\t\t\tself.push(null)\n\t\t\t}\n\t\t\t// reader.onerror = ??? // TODO: this\n\t\t\treader.readAsArrayBuffer(response)\n\t\t\tbreak\n\t}\n\n\t// The ms-stream case handles end separately in reader.onload()\n\tif (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {\n\t\tself.push(null)\n\t}\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {},require(\"buffer\").Buffer)\n},{\"./capability\":330,\"_process\":284,\"buffer\":182,\"inherits\":262,\"readable-stream\":312}],333:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd';\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd';\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd';\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd';\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n},{\"safe-buffer\":334}],334:[function(require,module,exports){\narguments[4][178][0].apply(exports,arguments)\n},{\"buffer\":182,\"dup\":178}],335:[function(require,module,exports){\n(function (setImmediate,clearImmediate){\nvar nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n  var id = nextImmediateId++;\n  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n  immediateIds[id] = true;\n\n  nextTick(function onNextTick() {\n    if (immediateIds[id]) {\n      // fn.call() is faster so we optimize for the common use-case\n      // @see http://jsperf.com/call-apply-segu\n      if (args) {\n        fn.apply(null, args);\n      } else {\n        fn.call(null);\n      }\n      // Prevent ids from leaking\n      exports.clearImmediate(id);\n    }\n  });\n\n  return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n  delete immediateIds[id];\n};\n}).call(this,require(\"timers\").setImmediate,require(\"timers\").clearImmediate)\n},{\"process/browser.js\":284,\"timers\":335}],336:[function(require,module,exports){\nvar Buffer = require('buffer').Buffer\n\nmodule.exports = function (buf) {\n\t// If the buffer is backed by a Uint8Array, a faster version will work\n\tif (buf instanceof Uint8Array) {\n\t\t// If the buffer isn't a subarray, return the underlying ArrayBuffer\n\t\tif (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {\n\t\t\treturn buf.buffer\n\t\t} else if (typeof buf.buffer.slice === 'function') {\n\t\t\t// Otherwise we need to get a proper copy\n\t\t\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)\n\t\t}\n\t}\n\n\tif (Buffer.isBuffer(buf)) {\n\t\t// This is the slow version that will work with any Buffer\n\t\t// implementation (even in old browsers)\n\t\tvar arrayCopy = new Uint8Array(buf.length)\n\t\tvar len = buf.length\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tarrayCopy[i] = buf[i]\n\t\t}\n\t\treturn arrayCopy.buffer\n\t} else {\n\t\tthrow new Error('Argument must be a Buffer')\n\t}\n}\n\n},{\"buffer\":182}],337:[function(require,module,exports){\nvar undefined = (void 0); // Paranoia\n\n// Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to\n// create, and consume so much memory, that the browser appears frozen.\nvar MAX_ARRAY_LENGTH = 1e5;\n\n// Approximations of internal ECMAScript conversion functions\nvar ECMAScript = (function() {\n  // Stash a copy in case other scripts modify these\n  var opts = Object.prototype.toString,\n      ophop = Object.prototype.hasOwnProperty;\n\n  return {\n    // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues:\n    Class: function(v) { return opts.call(v).replace(/^\\[object *|\\]$/g, ''); },\n    HasProperty: function(o, p) { return p in o; },\n    HasOwnProperty: function(o, p) { return ophop.call(o, p); },\n    IsCallable: function(o) { return typeof o === 'function'; },\n    ToInt32: function(v) { return v >> 0; },\n    ToUint32: function(v) { return v >>> 0; }\n  };\n}());\n\n// Snapshot intrinsics\nvar LN2 = Math.LN2,\n    abs = Math.abs,\n    floor = Math.floor,\n    log = Math.log,\n    min = Math.min,\n    pow = Math.pow,\n    round = Math.round;\n\n// ES5: lock down object properties\nfunction configureProperties(obj) {\n  if (getOwnPropNames && defineProp) {\n    var props = getOwnPropNames(obj), i;\n    for (i = 0; i < props.length; i += 1) {\n      defineProp(obj, props[i], {\n        value: obj[props[i]],\n        writable: false,\n        enumerable: false,\n        configurable: false\n      });\n    }\n  }\n}\n\n// emulate ES5 getter/setter API using legacy APIs\n// http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx\n// (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but\n// note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless)\nvar defineProp\nif (Object.defineProperty && (function() {\n      try {\n        Object.defineProperty({}, 'x', {});\n        return true;\n      } catch (e) {\n        return false;\n      }\n    })()) {\n  defineProp = Object.defineProperty;\n} else {\n  defineProp = function(o, p, desc) {\n    if (!o === Object(o)) throw new TypeError(\"Object.defineProperty called on non-object\");\n    if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); }\n    if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); }\n    if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; }\n    return o;\n  };\n}\n\nvar getOwnPropNames = Object.getOwnPropertyNames || function (o) {\n  if (o !== Object(o)) throw new TypeError(\"Object.getOwnPropertyNames called on non-object\");\n  var props = [], p;\n  for (p in o) {\n    if (ECMAScript.HasOwnProperty(o, p)) {\n      props.push(p);\n    }\n  }\n  return props;\n};\n\n// ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value)\n// for index in 0 ... obj.length\nfunction makeArrayAccessors(obj) {\n  if (!defineProp) { return; }\n\n  if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError(\"Array too large for polyfill\");\n\n  function makeArrayAccessor(index) {\n    defineProp(obj, index, {\n      'get': function() { return obj._getter(index); },\n      'set': function(v) { obj._setter(index, v); },\n      enumerable: true,\n      configurable: false\n    });\n  }\n\n  var i;\n  for (i = 0; i < obj.length; i += 1) {\n    makeArrayAccessor(i);\n  }\n}\n\n// Internal conversion functions:\n//    pack<Type>()   - take a number (interpreted as Type), output a byte array\n//    unpack<Type>() - take a byte array, output a Type-like number\n\nfunction as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; }\nfunction as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; }\n\nfunction packI8(n) { return [n & 0xff]; }\nfunction unpackI8(bytes) { return as_signed(bytes[0], 8); }\n\nfunction packU8(n) { return [n & 0xff]; }\nfunction unpackU8(bytes) { return as_unsigned(bytes[0], 8); }\n\nfunction packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; }\n\nfunction packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; }\nfunction unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); }\n\nfunction packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; }\nfunction unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); }\n\nfunction packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }\nfunction unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }\n\nfunction packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; }\nfunction unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); }\n\nfunction packIEEE754(v, ebits, fbits) {\n\n  var bias = (1 << (ebits - 1)) - 1,\n      s, e, f, ln,\n      i, bits, str, bytes;\n\n  function roundToEven(n) {\n    var w = floor(n), f = n - w;\n    if (f < 0.5)\n      return w;\n    if (f > 0.5)\n      return w + 1;\n    return w % 2 ? w + 1 : w;\n  }\n\n  // Compute sign, exponent, fraction\n  if (v !== v) {\n    // NaN\n    // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping\n    e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0;\n  } else if (v === Infinity || v === -Infinity) {\n    e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0;\n  } else if (v === 0) {\n    e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0;\n  } else {\n    s = v < 0;\n    v = abs(v);\n\n    if (v >= pow(2, 1 - bias)) {\n      e = min(floor(log(v) / LN2), 1023);\n      f = roundToEven(v / pow(2, e) * pow(2, fbits));\n      if (f / pow(2, fbits) >= 2) {\n        e = e + 1;\n        f = 1;\n      }\n      if (e > bias) {\n        // Overflow\n        e = (1 << ebits) - 1;\n        f = 0;\n      } else {\n        // Normalized\n        e = e + bias;\n        f = f - pow(2, fbits);\n      }\n    } else {\n      // Denormalized\n      e = 0;\n      f = roundToEven(v / pow(2, 1 - bias - fbits));\n    }\n  }\n\n  // Pack sign, exponent, fraction\n  bits = [];\n  for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); }\n  for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); }\n  bits.push(s ? 1 : 0);\n  bits.reverse();\n  str = bits.join('');\n\n  // Bits to bytes\n  bytes = [];\n  while (str.length) {\n    bytes.push(parseInt(str.substring(0, 8), 2));\n    str = str.substring(8);\n  }\n  return bytes;\n}\n\nfunction unpackIEEE754(bytes, ebits, fbits) {\n\n  // Bytes to bits\n  var bits = [], i, j, b, str,\n      bias, s, e, f;\n\n  for (i = bytes.length; i; i -= 1) {\n    b = bytes[i - 1];\n    for (j = 8; j; j -= 1) {\n      bits.push(b % 2 ? 1 : 0); b = b >> 1;\n    }\n  }\n  bits.reverse();\n  str = bits.join('');\n\n  // Unpack sign, exponent, fraction\n  bias = (1 << (ebits - 1)) - 1;\n  s = parseInt(str.substring(0, 1), 2) ? -1 : 1;\n  e = parseInt(str.substring(1, 1 + ebits), 2);\n  f = parseInt(str.substring(1 + ebits), 2);\n\n  // Produce number\n  if (e === (1 << ebits) - 1) {\n    return f !== 0 ? NaN : s * Infinity;\n  } else if (e > 0) {\n    // Normalized\n    return s * pow(2, e - bias) * (1 + f / pow(2, fbits));\n  } else if (f !== 0) {\n    // Denormalized\n    return s * pow(2, -(bias - 1)) * (f / pow(2, fbits));\n  } else {\n    return s < 0 ? -0 : 0;\n  }\n}\n\nfunction unpackF64(b) { return unpackIEEE754(b, 11, 52); }\nfunction packF64(v) { return packIEEE754(v, 11, 52); }\nfunction unpackF32(b) { return unpackIEEE754(b, 8, 23); }\nfunction packF32(v) { return packIEEE754(v, 8, 23); }\n\n\n//\n// 3 The ArrayBuffer Type\n//\n\n(function() {\n\n  /** @constructor */\n  var ArrayBuffer = function ArrayBuffer(length) {\n    length = ECMAScript.ToInt32(length);\n    if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer');\n\n    this.byteLength = length;\n    this._bytes = [];\n    this._bytes.length = length;\n\n    var i;\n    for (i = 0; i < this.byteLength; i += 1) {\n      this._bytes[i] = 0;\n    }\n\n    configureProperties(this);\n  };\n\n  exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer;\n\n  //\n  // 4 The ArrayBufferView Type\n  //\n\n  // NOTE: this constructor is not exported\n  /** @constructor */\n  var ArrayBufferView = function ArrayBufferView() {\n    //this.buffer = null;\n    //this.byteOffset = 0;\n    //this.byteLength = 0;\n  };\n\n  //\n  // 5 The Typed Array View Types\n  //\n\n  function makeConstructor(bytesPerElement, pack, unpack) {\n    // Each TypedArray type requires a distinct constructor instance with\n    // identical logic, which this produces.\n\n    var ctor;\n    ctor = function(buffer, byteOffset, length) {\n      var array, sequence, i, s;\n\n      if (!arguments.length || typeof arguments[0] === 'number') {\n        // Constructor(unsigned long length)\n        this.length = ECMAScript.ToInt32(arguments[0]);\n        if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer');\n\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n      } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) {\n        // Constructor(TypedArray array)\n        array = arguments[0];\n\n        this.length = array.length;\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n\n        for (i = 0; i < this.length; i += 1) {\n          this._setter(i, array._getter(i));\n        }\n      } else if (typeof arguments[0] === 'object' &&\n                 !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n        // Constructor(sequence<type> array)\n        sequence = arguments[0];\n\n        this.length = ECMAScript.ToUint32(sequence.length);\n        this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        this.buffer = new ArrayBuffer(this.byteLength);\n        this.byteOffset = 0;\n\n        for (i = 0; i < this.length; i += 1) {\n          s = sequence[i];\n          this._setter(i, Number(s));\n        }\n      } else if (typeof arguments[0] === 'object' &&\n                 (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) {\n        // Constructor(ArrayBuffer buffer,\n        //             optional unsigned long byteOffset, optional unsigned long length)\n        this.buffer = buffer;\n\n        this.byteOffset = ECMAScript.ToUint32(byteOffset);\n        if (this.byteOffset > this.buffer.byteLength) {\n          throw new RangeError(\"byteOffset out of range\");\n        }\n\n        if (this.byteOffset % this.BYTES_PER_ELEMENT) {\n          // The given byteOffset must be a multiple of the element\n          // size of the specific type, otherwise an exception is raised.\n          throw new RangeError(\"ArrayBuffer length minus the byteOffset is not a multiple of the element size.\");\n        }\n\n        if (arguments.length < 3) {\n          this.byteLength = this.buffer.byteLength - this.byteOffset;\n\n          if (this.byteLength % this.BYTES_PER_ELEMENT) {\n            throw new RangeError(\"length of buffer minus byteOffset not a multiple of the element size\");\n          }\n          this.length = this.byteLength / this.BYTES_PER_ELEMENT;\n        } else {\n          this.length = ECMAScript.ToUint32(length);\n          this.byteLength = this.length * this.BYTES_PER_ELEMENT;\n        }\n\n        if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {\n          throw new RangeError(\"byteOffset and length reference an area beyond the end of the buffer\");\n        }\n      } else {\n        throw new TypeError(\"Unexpected argument type(s)\");\n      }\n\n      this.constructor = ctor;\n\n      configureProperties(this);\n      makeArrayAccessors(this);\n    };\n\n    ctor.prototype = new ArrayBufferView();\n    ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement;\n    ctor.prototype._pack = pack;\n    ctor.prototype._unpack = unpack;\n    ctor.BYTES_PER_ELEMENT = bytesPerElement;\n\n    // getter type (unsigned long index);\n    ctor.prototype._getter = function(index) {\n      if (arguments.length < 1) throw new SyntaxError(\"Not enough arguments\");\n\n      index = ECMAScript.ToUint32(index);\n      if (index >= this.length) {\n        return undefined;\n      }\n\n      var bytes = [], i, o;\n      for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;\n           i < this.BYTES_PER_ELEMENT;\n           i += 1, o += 1) {\n        bytes.push(this.buffer._bytes[o]);\n      }\n      return this._unpack(bytes);\n    };\n\n    // NONSTANDARD: convenience alias for getter: type get(unsigned long index);\n    ctor.prototype.get = ctor.prototype._getter;\n\n    // setter void (unsigned long index, type value);\n    ctor.prototype._setter = function(index, value) {\n      if (arguments.length < 2) throw new SyntaxError(\"Not enough arguments\");\n\n      index = ECMAScript.ToUint32(index);\n      if (index >= this.length) {\n        return undefined;\n      }\n\n      var bytes = this._pack(value), i, o;\n      for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT;\n           i < this.BYTES_PER_ELEMENT;\n           i += 1, o += 1) {\n        this.buffer._bytes[o] = bytes[i];\n      }\n    };\n\n    // void set(TypedArray array, optional unsigned long offset);\n    // void set(sequence<type> array, optional unsigned long offset);\n    ctor.prototype.set = function(index, value) {\n      if (arguments.length < 1) throw new SyntaxError(\"Not enough arguments\");\n      var array, sequence, offset, len,\n          i, s, d,\n          byteOffset, byteLength, tmp;\n\n      if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) {\n        // void set(TypedArray array, optional unsigned long offset);\n        array = arguments[0];\n        offset = ECMAScript.ToUint32(arguments[1]);\n\n        if (offset + array.length > this.length) {\n          throw new RangeError(\"Offset plus length of array is out of range\");\n        }\n\n        byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT;\n        byteLength = array.length * this.BYTES_PER_ELEMENT;\n\n        if (array.buffer === this.buffer) {\n          tmp = [];\n          for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) {\n            tmp[i] = array.buffer._bytes[s];\n          }\n          for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) {\n            this.buffer._bytes[d] = tmp[i];\n          }\n        } else {\n          for (i = 0, s = array.byteOffset, d = byteOffset;\n               i < byteLength; i += 1, s += 1, d += 1) {\n            this.buffer._bytes[d] = array.buffer._bytes[s];\n          }\n        }\n      } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') {\n        // void set(sequence<type> array, optional unsigned long offset);\n        sequence = arguments[0];\n        len = ECMAScript.ToUint32(sequence.length);\n        offset = ECMAScript.ToUint32(arguments[1]);\n\n        if (offset + len > this.length) {\n          throw new RangeError(\"Offset plus length of array is out of range\");\n        }\n\n        for (i = 0; i < len; i += 1) {\n          s = sequence[i];\n          this._setter(offset + i, Number(s));\n        }\n      } else {\n        throw new TypeError(\"Unexpected argument type(s)\");\n      }\n    };\n\n    // TypedArray subarray(long begin, optional long end);\n    ctor.prototype.subarray = function(start, end) {\n      function clamp(v, min, max) { return v < min ? min : v > max ? max : v; }\n\n      start = ECMAScript.ToInt32(start);\n      end = ECMAScript.ToInt32(end);\n\n      if (arguments.length < 1) { start = 0; }\n      if (arguments.length < 2) { end = this.length; }\n\n      if (start < 0) { start = this.length + start; }\n      if (end < 0) { end = this.length + end; }\n\n      start = clamp(start, 0, this.length);\n      end = clamp(end, 0, this.length);\n\n      var len = end - start;\n      if (len < 0) {\n        len = 0;\n      }\n\n      return new this.constructor(\n        this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);\n    };\n\n    return ctor;\n  }\n\n  var Int8Array = makeConstructor(1, packI8, unpackI8);\n  var Uint8Array = makeConstructor(1, packU8, unpackU8);\n  var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8);\n  var Int16Array = makeConstructor(2, packI16, unpackI16);\n  var Uint16Array = makeConstructor(2, packU16, unpackU16);\n  var Int32Array = makeConstructor(4, packI32, unpackI32);\n  var Uint32Array = makeConstructor(4, packU32, unpackU32);\n  var Float32Array = makeConstructor(4, packF32, unpackF32);\n  var Float64Array = makeConstructor(8, packF64, unpackF64);\n\n  exports.Int8Array = exports.Int8Array || Int8Array;\n  exports.Uint8Array = exports.Uint8Array || Uint8Array;\n  exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray;\n  exports.Int16Array = exports.Int16Array || Int16Array;\n  exports.Uint16Array = exports.Uint16Array || Uint16Array;\n  exports.Int32Array = exports.Int32Array || Int32Array;\n  exports.Uint32Array = exports.Uint32Array || Uint32Array;\n  exports.Float32Array = exports.Float32Array || Float32Array;\n  exports.Float64Array = exports.Float64Array || Float64Array;\n}());\n\n//\n// 6 The DataView View Type\n//\n\n(function() {\n  function r(array, index) {\n    return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index];\n  }\n\n  var IS_BIG_ENDIAN = (function() {\n    var u16array = new(exports.Uint16Array)([0x1234]),\n        u8array = new(exports.Uint8Array)(u16array.buffer);\n    return r(u8array, 0) === 0x12;\n  }());\n\n  // Constructor(ArrayBuffer buffer,\n  //             optional unsigned long byteOffset,\n  //             optional unsigned long byteLength)\n  /** @constructor */\n  var DataView = function DataView(buffer, byteOffset, byteLength) {\n    if (arguments.length === 0) {\n      buffer = new exports.ArrayBuffer(0);\n    } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) {\n      throw new TypeError(\"TypeError\");\n    }\n\n    this.buffer = buffer || new exports.ArrayBuffer(0);\n\n    this.byteOffset = ECMAScript.ToUint32(byteOffset);\n    if (this.byteOffset > this.buffer.byteLength) {\n      throw new RangeError(\"byteOffset out of range\");\n    }\n\n    if (arguments.length < 3) {\n      this.byteLength = this.buffer.byteLength - this.byteOffset;\n    } else {\n      this.byteLength = ECMAScript.ToUint32(byteLength);\n    }\n\n    if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) {\n      throw new RangeError(\"byteOffset and length reference an area beyond the end of the buffer\");\n    }\n\n    configureProperties(this);\n  };\n\n  function makeGetter(arrayType) {\n    return function(byteOffset, littleEndian) {\n\n      byteOffset = ECMAScript.ToUint32(byteOffset);\n\n      if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n        throw new RangeError(\"Array index out of range\");\n      }\n      byteOffset += this.byteOffset;\n\n      var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT),\n          bytes = [], i;\n      for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n        bytes.push(r(uint8Array, i));\n      }\n\n      if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n        bytes.reverse();\n      }\n\n      return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0);\n    };\n  }\n\n  DataView.prototype.getUint8 = makeGetter(exports.Uint8Array);\n  DataView.prototype.getInt8 = makeGetter(exports.Int8Array);\n  DataView.prototype.getUint16 = makeGetter(exports.Uint16Array);\n  DataView.prototype.getInt16 = makeGetter(exports.Int16Array);\n  DataView.prototype.getUint32 = makeGetter(exports.Uint32Array);\n  DataView.prototype.getInt32 = makeGetter(exports.Int32Array);\n  DataView.prototype.getFloat32 = makeGetter(exports.Float32Array);\n  DataView.prototype.getFloat64 = makeGetter(exports.Float64Array);\n\n  function makeSetter(arrayType) {\n    return function(byteOffset, value, littleEndian) {\n\n      byteOffset = ECMAScript.ToUint32(byteOffset);\n      if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) {\n        throw new RangeError(\"Array index out of range\");\n      }\n\n      // Get bytes\n      var typeArray = new arrayType([value]),\n          byteArray = new exports.Uint8Array(typeArray.buffer),\n          bytes = [], i, byteView;\n\n      for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) {\n        bytes.push(r(byteArray, i));\n      }\n\n      // Flip if necessary\n      if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) {\n        bytes.reverse();\n      }\n\n      // Write them\n      byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT);\n      byteView.set(bytes);\n    };\n  }\n\n  DataView.prototype.setUint8 = makeSetter(exports.Uint8Array);\n  DataView.prototype.setInt8 = makeSetter(exports.Int8Array);\n  DataView.prototype.setUint16 = makeSetter(exports.Uint16Array);\n  DataView.prototype.setInt16 = makeSetter(exports.Int16Array);\n  DataView.prototype.setUint32 = makeSetter(exports.Uint32Array);\n  DataView.prototype.setInt32 = makeSetter(exports.Int32Array);\n  DataView.prototype.setFloat32 = makeSetter(exports.Float32Array);\n  DataView.prototype.setFloat64 = makeSetter(exports.Float64Array);\n\n  exports.DataView = exports.DataView || DataView;\n\n}());\n\n},{}],338:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    unsafeProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    },\n    querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && util.isObject(url) && url instanceof Url) return url;\n\n  var u = new Url;\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n  if (!util.isString(url)) {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  // Copy chrome, IE, opera backslash-handling behavior.\n  // Back slashes before the query string get converted to forward slashes\n  // See: https://code.google.com/p/chromium/issues/detail?id=25916\n  var queryIndex = url.indexOf('?'),\n      splitter =\n          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n      uSplit = url.split(splitter),\n      slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n        hostEnd = hec;\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1)\n      hostEnd = rest.length;\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) continue;\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      // IDNA Support: Returns a punycoded representation of \"domain\".\n      // It only converts parts of the domain name that\n      // have non-ASCII characters, i.e. it doesn't matter if\n      // you call it with a domain that already is ASCII-only.\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  // now rest is set to the post-host stuff.\n  // chop off any delim chars.\n  if (!unsafeProtocol[lowerProto]) {\n\n    // First, make 100% sure that any \"autoEscape\" chars get\n    // escaped, even if encodeURIComponent doesn't think they\n    // need to be.\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1)\n        continue;\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) this.pathname = rest;\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  //to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  // ensure it's an object, and not a string url.\n  // If it's an obj, this is a no-op.\n  // this way, you can call url_format() on strings\n  // to clean up potentially wonky urls.\n  if (util.isString(obj)) obj = urlParse(obj);\n  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n  return obj.format();\n}\n\nUrl.prototype.format = function() {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n      pathname = this.pathname || '',\n      hash = this.hash || '',\n      host = false,\n      query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ?\n        this.hostname :\n        '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query &&\n      util.isObject(this.query) &&\n      Object.keys(this.query).length) {\n    query = querystring.stringify(this.query);\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n  // unless they had them to begin with.\n  if (this.slashes ||\n      (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n  if (search && search.charAt(0) !== '?') search = '?' + search;\n\n  pathname = pathname.replace(/[?#]/g, function(match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) return relative;\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n  if (util.isString(relative)) {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  // hash is always overridden, no matter what.\n  // even href=\"\" will remove it.\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol')\n        result[rkey] = relative[rkey];\n    }\n\n    //urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] &&\n        result.hostname && !result.pathname) {\n      result.path = result.pathname = '/';\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    // if it's a known url protocol, then changing\n    // the protocol does weird things\n    // first, if it's not file:, then we MUST have a host,\n    // and if there was a path\n    // to begin with, then we MUST have a path.\n    // if it is file:, then the host is dropped,\n    // because that's known to be hostless.\n    // anything else is assumed to be absolute.\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift()));\n      if (!relative.host) relative.host = '';\n      if (!relative.hostname) relative.hostname = '';\n      if (relPath[0] !== '') relPath.unshift('');\n      if (relPath.length < 2) relPath.unshift('');\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n      isRelAbs = (\n          relative.host ||\n          relative.pathname && relative.pathname.charAt(0) === '/'\n      ),\n      mustEndAbs = (isRelAbs || isSourceAbs ||\n                    (result.host && relative.pathname)),\n      removeAllDots = mustEndAbs,\n      srcPath = result.pathname && result.pathname.split('/') || [],\n      relPath = relative.pathname && relative.pathname.split('/') || [],\n      psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  // if the url is a non-slashed url, then relative\n  // links like ../.. should be able\n  // to crawl up to the hostname, as well.  This is strange.\n  // result.protocol has already been set by now.\n  // Later on, put the first path part into the host field.\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') srcPath[0] = result.host;\n      else srcPath.unshift(result.host);\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') relPath[0] = relative.host;\n        else relPath.unshift(relative.host);\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = (relative.host || relative.host === '') ?\n                  relative.host : result.host;\n    result.hostname = (relative.hostname || relative.hostname === '') ?\n                      relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    // it's relative\n    // throw away the existing file, and take the new path instead.\n    if (!srcPath) srcPath = [];\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (!util.isNullOrUndefined(relative.search)) {\n    // just pull out the search.\n    // like href='?foo'.\n    // Put this after the other two cases because it simplifies the booleans\n    if (psychotic) {\n      result.hostname = result.host = srcPath.shift();\n      //occationaly the auth can get stuck only in host\n      //this especially happens in cases like\n      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n      var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                       result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.host = result.hostname = authInHost.shift();\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    //to support http.request\n    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n      result.path = (result.pathname ? result.pathname : '') +\n                    (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    // no path at all.  easy.\n    // we've already handled the other stuff above.\n    result.pathname = null;\n    //to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  // if a url ENDs in . or .., then it must get a trailing slash.\n  // however, if it ends in anything else non-slashy,\n  // then it must NOT get a trailing slash.\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (\n      (result.host || relative.host || srcPath.length > 1) &&\n      (last === '.' || last === '..') || last === '');\n\n  // strip single dots, resolve double dots to parent dir\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' &&\n      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' ||\n      (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = result.host = isAbsolute ? '' :\n                                    srcPath.length ? srcPath.shift() : '';\n    //occationaly the auth can get stuck only in host\n    //this especially happens in cases like\n    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n    var authInHost = result.host && result.host.indexOf('@') > 0 ?\n                     result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.host = result.hostname = authInHost.shift();\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (!srcPath.length) {\n    result.pathname = null;\n    result.path = null;\n  } else {\n    result.pathname = srcPath.join('/');\n  }\n\n  //to support request.http\n  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n    result.path = (result.pathname ? result.pathname : '') +\n                  (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function() {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) this.hostname = host;\n};\n\n},{\"./util\":339,\"punycode\":292,\"querystring\":295}],339:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  isString: function(arg) {\n    return typeof(arg) === 'string';\n  },\n  isObject: function(arg) {\n    return typeof(arg) === 'object' && arg !== null;\n  },\n  isNull: function(arg) {\n    return arg === null;\n  },\n  isNullOrUndefined: function(arg) {\n    return arg == null;\n  }\n};\n\n},{}],340:[function(require,module,exports){\n(function (global){\n\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],341:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],342:[function(require,module,exports){\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n},{}],343:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  // Allow for deprecating things in the process of starting up.\n  if (isUndefined(global.process)) {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  if (process.noDeprecation === true) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./support/isBuffer\":342,\"_process\":284,\"inherits\":341}],344:[function(require,module,exports){\nvar indexOf = require('indexof');\n\nvar Object_keys = function (obj) {\n    if (Object.keys) return Object.keys(obj)\n    else {\n        var res = [];\n        for (var key in obj) res.push(key)\n        return res;\n    }\n};\n\nvar forEach = function (xs, fn) {\n    if (xs.forEach) return xs.forEach(fn)\n    else for (var i = 0; i < xs.length; i++) {\n        fn(xs[i], i, xs);\n    }\n};\n\nvar defineProp = (function() {\n    try {\n        Object.defineProperty({}, '_', {});\n        return function(obj, name, value) {\n            Object.defineProperty(obj, name, {\n                writable: true,\n                enumerable: false,\n                configurable: true,\n                value: value\n            })\n        };\n    } catch(e) {\n        return function(obj, name, value) {\n            obj[name] = value;\n        };\n    }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n    if (!(this instanceof Script)) return new Script(code);\n    this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n    if (!(context instanceof Context)) {\n        throw new TypeError(\"needs a 'context' argument.\");\n    }\n    \n    var iframe = document.createElement('iframe');\n    if (!iframe.style) iframe.style = {};\n    iframe.style.display = 'none';\n    \n    document.body.appendChild(iframe);\n    \n    var win = iframe.contentWindow;\n    var wEval = win.eval, wExecScript = win.execScript;\n\n    if (!wEval && wExecScript) {\n        // win.eval() magically appears when this is called in IE:\n        wExecScript.call(win, 'null');\n        wEval = win.eval;\n    }\n    \n    forEach(Object_keys(context), function (key) {\n        win[key] = context[key];\n    });\n    forEach(globals, function (key) {\n        if (context[key]) {\n            win[key] = context[key];\n        }\n    });\n    \n    var winKeys = Object_keys(win);\n\n    var res = wEval.call(win, this.code);\n    \n    forEach(Object_keys(win), function (key) {\n        // Avoid copying circular objects like `top` and `window` by only\n        // updating existing context properties or new properties in the `win`\n        // that was only introduced after the eval.\n        if (key in context || indexOf(winKeys, key) === -1) {\n            context[key] = win[key];\n        }\n    });\n\n    forEach(globals, function (key) {\n        if (!(key in context)) {\n            defineProp(context, key, win[key]);\n        }\n    });\n    \n    document.body.removeChild(iframe);\n    \n    return res;\n};\n\nScript.prototype.runInThisContext = function () {\n    return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n    var ctx = Script.createContext(context);\n    var res = this.runInContext(ctx);\n\n    forEach(Object_keys(ctx), function (key) {\n        context[key] = ctx[key];\n    });\n\n    return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n    exports[name] = Script[name] = function (code) {\n        var s = Script(code);\n        return s[name].apply(s, [].slice.call(arguments, 1));\n    };\n});\n\nexports.createScript = function (code) {\n    return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n    var copy = new Context();\n    if(typeof context === 'object') {\n        forEach(Object_keys(context), function (key) {\n            copy[key] = context[key];\n        });\n    }\n    return copy;\n};\n\n},{\"indexof\":261}],345:[function(require,module,exports){\nvar Pbf = require('pbf')\nvar GeoJSONWrapper = require('./lib/geojson_wrapper')\n\nmodule.exports = fromVectorTileJs\nmodule.exports.fromVectorTileJs = fromVectorTileJs\nmodule.exports.fromGeojsonVt = fromGeojsonVt\nmodule.exports.GeoJSONWrapper = GeoJSONWrapper\n\n/**\n * Serialize a vector-tile-js-created tile to pbf\n *\n * @param {Object} tile\n * @return {Buffer} uncompressed, pbf-serialized tile data\n */\nfunction fromVectorTileJs (tile) {\n  var out = new Pbf()\n  writeTile(tile, out)\n  return out.finish()\n}\n\n/**\n * Serialized a geojson-vt-created tile to pbf.\n *\n * @param {Object} layers - An object mapping layer names to geojson-vt-created vector tile objects\n * @param {Object} [options] - An object specifying the vector-tile specification version and extent that were used to create `layers`.\n * @param {Number} [options.version=1] - Version of vector-tile spec used\n * @param {Number} [options.extent=4096] - Extent of the vector tile\n * @return {Buffer} uncompressed, pbf-serialized tile data\n */\nfunction fromGeojsonVt (layers, options) {\n  options = options || {}\n  var l = {}\n  for (var k in layers) {\n    l[k] = new GeoJSONWrapper(layers[k].features, options)\n    l[k].name = k\n    l[k].version = options.version\n    l[k].extent = options.extent\n  }\n  return fromVectorTileJs({layers: l})\n}\n\nfunction writeTile (tile, pbf) {\n  for (var key in tile.layers) {\n    pbf.writeMessage(3, writeLayer, tile.layers[key])\n  }\n}\n\nfunction writeLayer (layer, pbf) {\n  pbf.writeVarintField(15, layer.version || 1)\n  pbf.writeStringField(1, layer.name || '')\n  pbf.writeVarintField(5, layer.extent || 4096)\n\n  var i\n  var context = {\n    keys: [],\n    values: [],\n    keycache: {},\n    valuecache: {}\n  }\n\n  for (i = 0; i < layer.length; i++) {\n    context.feature = layer.feature(i)\n    pbf.writeMessage(2, writeFeature, context)\n  }\n\n  var keys = context.keys\n  for (i = 0; i < keys.length; i++) {\n    pbf.writeStringField(3, keys[i])\n  }\n\n  var values = context.values\n  for (i = 0; i < values.length; i++) {\n    pbf.writeMessage(4, writeValue, values[i])\n  }\n}\n\nfunction writeFeature (context, pbf) {\n  var feature = context.feature\n\n  if (feature.id !== undefined) {\n    pbf.writeVarintField(1, feature.id)\n  }\n\n  pbf.writeMessage(2, writeProperties, context)\n  pbf.writeVarintField(3, feature.type)\n  pbf.writeMessage(4, writeGeometry, feature)\n}\n\nfunction writeProperties (context, pbf) {\n  var feature = context.feature\n  var keys = context.keys\n  var values = context.values\n  var keycache = context.keycache\n  var valuecache = context.valuecache\n\n  for (var key in feature.properties) {\n    var keyIndex = keycache[key]\n    if (typeof keyIndex === 'undefined') {\n      keys.push(key)\n      keyIndex = keys.length - 1\n      keycache[key] = keyIndex\n    }\n    pbf.writeVarint(keyIndex)\n\n    var value = feature.properties[key]\n    var type = typeof value\n    if (type !== 'string' && type !== 'boolean' && type !== 'number') {\n      value = JSON.stringify(value)\n    }\n    var valueKey = type + ':' + value\n    var valueIndex = valuecache[valueKey]\n    if (typeof valueIndex === 'undefined') {\n      values.push(value)\n      valueIndex = values.length - 1\n      valuecache[valueKey] = valueIndex\n    }\n    pbf.writeVarint(valueIndex)\n  }\n}\n\nfunction command (cmd, length) {\n  return (length << 3) + (cmd & 0x7)\n}\n\nfunction zigzag (num) {\n  return (num << 1) ^ (num >> 31)\n}\n\nfunction writeGeometry (feature, pbf) {\n  var geometry = feature.loadGeometry()\n  var type = feature.type\n  var x = 0\n  var y = 0\n  var rings = geometry.length\n  for (var r = 0; r < rings; r++) {\n    var ring = geometry[r]\n    var count = 1\n    if (type === 1) {\n      count = ring.length\n    }\n    pbf.writeVarint(command(1, count)) // moveto\n    // do not write polygon closing path as lineto\n    var lineCount = type === 3 ? ring.length - 1 : ring.length\n    for (var i = 0; i < lineCount; i++) {\n      if (i === 1 && type !== 1) {\n        pbf.writeVarint(command(2, lineCount - 1)) // lineto\n      }\n      var dx = ring[i].x - x\n      var dy = ring[i].y - y\n      pbf.writeVarint(zigzag(dx))\n      pbf.writeVarint(zigzag(dy))\n      x += dx\n      y += dy\n    }\n    if (type === 3) {\n      pbf.writeVarint(command(7, 1)) // closepath\n    }\n  }\n}\n\nfunction writeValue (value, pbf) {\n  var type = typeof value\n  if (type === 'string') {\n    pbf.writeStringField(1, value)\n  } else if (type === 'boolean') {\n    pbf.writeBooleanField(7, value)\n  } else if (type === 'number') {\n    if (value % 1 !== 0) {\n      pbf.writeDoubleField(3, value)\n    } else if (value < 0) {\n      pbf.writeSVarintField(6, value)\n    } else {\n      pbf.writeVarintField(5, value)\n    }\n  }\n}\n\n},{\"./lib/geojson_wrapper\":346,\"pbf\":277}],346:[function(require,module,exports){\n'use strict'\n\nvar Point = require('@mapbox/point-geometry')\nvar VectorTileFeature = require('@mapbox/vector-tile').VectorTileFeature\n\nmodule.exports = GeoJSONWrapper\n\n// conform to vectortile api\nfunction GeoJSONWrapper (features, options) {\n  this.options = options || {}\n  this.features = features\n  this.length = features.length\n}\n\nGeoJSONWrapper.prototype.feature = function (i) {\n  return new FeatureWrapper(this.features[i], this.options.extent)\n}\n\nfunction FeatureWrapper (feature, extent) {\n  this.id = typeof feature.id === 'number' ? feature.id : undefined\n  this.type = feature.type\n  this.rawGeometry = feature.type === 1 ? [feature.geometry] : feature.geometry\n  this.properties = feature.tags\n  this.extent = extent || 4096\n}\n\nFeatureWrapper.prototype.loadGeometry = function () {\n  var rings = this.rawGeometry\n  this.geometry = []\n\n  for (var i = 0; i < rings.length; i++) {\n    var ring = rings[i]\n    var newRing = []\n    for (var j = 0; j < ring.length; j++) {\n      newRing.push(new Point(ring[j][0], ring[j][1]))\n    }\n    this.geometry.push(newRing)\n  }\n  return this.geometry\n}\n\nFeatureWrapper.prototype.bbox = function () {\n  if (!this.geometry) this.loadGeometry()\n\n  var rings = this.geometry\n  var x1 = Infinity\n  var x2 = -Infinity\n  var y1 = Infinity\n  var y2 = -Infinity\n\n  for (var i = 0; i < rings.length; i++) {\n    var ring = rings[i]\n\n    for (var j = 0; j < ring.length; j++) {\n      var coord = ring[j]\n\n      x1 = Math.min(x1, coord.x)\n      x2 = Math.max(x2, coord.x)\n      y1 = Math.min(y1, coord.y)\n      y2 = Math.max(y2, coord.y)\n    }\n  }\n\n  return [x1, y1, x2, y2]\n}\n\nFeatureWrapper.prototype.toGeoJSON = VectorTileFeature.prototype.toGeoJSON\n\n},{\"@mapbox/point-geometry\":112,\"@mapbox/vector-tile\":113}],347:[function(require,module,exports){\nvar bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n    var wkey;\n    var cacheKeys = Object.keys(cache);\n\n    for (var i = 0, l = cacheKeys.length; i < l; i++) {\n        var key = cacheKeys[i];\n        var exp = cache[key].exports;\n        // Using babel as a transpiler to use esmodule, the export will always\n        // be an object with the default export as a property of it. To ensure\n        // the existing api and babel esmodule exports are both supported we\n        // check for both\n        if (exp === fn || exp && exp.default === fn) {\n            wkey = key;\n            break;\n        }\n    }\n\n    if (!wkey) {\n        wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n        var wcache = {};\n        for (var i = 0, l = cacheKeys.length; i < l; i++) {\n            var key = cacheKeys[i];\n            wcache[key] = key;\n        }\n        sources[wkey] = [\n            'function(require,module,exports){' + fn + '(self); }',\n            wcache\n        ];\n    }\n    var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n    var scache = {}; scache[wkey] = wkey;\n    sources[skey] = [\n        'function(require,module,exports){' +\n            // try to call default if defined to also support babel esmodule exports\n            'var f = require(' + stringify(wkey) + ');' +\n            '(f.default ? f.default : f)(self);' +\n        '}',\n        scache\n    ];\n\n    var workerSources = {};\n    resolveSources(skey);\n\n    function resolveSources(key) {\n        workerSources[key] = true;\n\n        for (var depPath in sources[key][1]) {\n            var depKey = sources[key][1][depPath];\n            if (!workerSources[depKey]) {\n                resolveSources(depKey);\n            }\n        }\n    }\n\n    var src = '(' + bundleFn + ')({'\n        + Object.keys(workerSources).map(function (key) {\n            return stringify(key) + ':['\n                + sources[key][0]\n                + ',' + stringify(sources[key][1]) + ']'\n            ;\n        }).join(',')\n        + '},{},[' + stringify(skey) + '])'\n    ;\n\n    var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n    var blob = new Blob([src], { type: 'text/javascript' });\n    if (options && options.bare) { return blob; }\n    var workerUrl = URL.createObjectURL(blob);\n    var worker = new Worker(workerUrl);\n    worker.objectURL = workerUrl;\n    return worker;\n};\n\n},{}],348:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = BinaryReader;\n\nfunction BinaryReader(buffer, isBigEndian) {\n    this.buffer = buffer;\n    this.position = 0;\n    this.isBigEndian = isBigEndian || false;\n}\n\nfunction _read(readLE, readBE, size) {\n    return function () {\n        var value;\n\n        if (this.isBigEndian)\n            value = readBE.call(this.buffer, this.position);\n        else\n            value = readLE.call(this.buffer, this.position);\n\n        this.position += size;\n\n        return value;\n    };\n}\n\nBinaryReader.prototype.readUInt8 = _read(Buffer.prototype.readUInt8, Buffer.prototype.readUInt8, 1);\nBinaryReader.prototype.readUInt16 = _read(Buffer.prototype.readUInt16LE, Buffer.prototype.readUInt16BE, 2);\nBinaryReader.prototype.readUInt32 = _read(Buffer.prototype.readUInt32LE, Buffer.prototype.readUInt32BE, 4);\nBinaryReader.prototype.readInt8 = _read(Buffer.prototype.readInt8, Buffer.prototype.readInt8, 1);\nBinaryReader.prototype.readInt16 = _read(Buffer.prototype.readInt16LE, Buffer.prototype.readInt16BE, 2);\nBinaryReader.prototype.readInt32 = _read(Buffer.prototype.readInt32LE, Buffer.prototype.readInt32BE, 4);\nBinaryReader.prototype.readFloat = _read(Buffer.prototype.readFloatLE, Buffer.prototype.readFloatBE, 4);\nBinaryReader.prototype.readDouble = _read(Buffer.prototype.readDoubleLE, Buffer.prototype.readDoubleBE, 8);\n\nBinaryReader.prototype.readVarInt = function () {\n    var nextByte,\n        result = 0,\n        bytesRead = 0;\n\n    do {\n        nextByte = this.buffer[this.position + bytesRead];\n        result += (nextByte & 0x7F) << (7 * bytesRead);\n        bytesRead++;\n    } while (nextByte >= 0x80);\n\n    this.position += bytesRead;\n\n    return result;\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182}],349:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = BinaryWriter;\n\nfunction BinaryWriter(size, allowResize) {\n    this.buffer = new Buffer(size);\n    this.position = 0;\n    this.allowResize = allowResize;\n}\n\nfunction _write(write, size) {\n    return function (value, noAssert) {\n        this.ensureSize(size);\n\n        write.call(this.buffer, value, this.position, noAssert);\n        this.position += size;\n    };\n}\n\nBinaryWriter.prototype.writeUInt8 = _write(Buffer.prototype.writeUInt8, 1);\nBinaryWriter.prototype.writeUInt16LE = _write(Buffer.prototype.writeUInt16LE, 2);\nBinaryWriter.prototype.writeUInt16BE = _write(Buffer.prototype.writeUInt16BE, 2);\nBinaryWriter.prototype.writeUInt32LE = _write(Buffer.prototype.writeUInt32LE, 4);\nBinaryWriter.prototype.writeUInt32BE = _write(Buffer.prototype.writeUInt32BE, 4);\nBinaryWriter.prototype.writeInt8 = _write(Buffer.prototype.writeInt8, 1);\nBinaryWriter.prototype.writeInt16LE = _write(Buffer.prototype.writeInt16LE, 2);\nBinaryWriter.prototype.writeInt16BE = _write(Buffer.prototype.writeInt16BE, 2);\nBinaryWriter.prototype.writeInt32LE = _write(Buffer.prototype.writeInt32LE, 4);\nBinaryWriter.prototype.writeInt32BE = _write(Buffer.prototype.writeInt32BE, 4);\nBinaryWriter.prototype.writeFloatLE = _write(Buffer.prototype.writeFloatLE, 4);\nBinaryWriter.prototype.writeFloatBE = _write(Buffer.prototype.writeFloatBE, 4);\nBinaryWriter.prototype.writeDoubleLE = _write(Buffer.prototype.writeDoubleLE, 8);\nBinaryWriter.prototype.writeDoubleBE = _write(Buffer.prototype.writeDoubleBE, 8);\n\nBinaryWriter.prototype.writeBuffer = function (buffer) {\n    this.ensureSize(buffer.length);\n\n    buffer.copy(this.buffer, this.position, 0, buffer.length);\n    this.position += buffer.length;\n};\n\nBinaryWriter.prototype.writeVarInt = function (value) {\n    var length = 1;\n\n    while ((value & 0xFFFFFF80) !== 0) {\n        this.writeUInt8((value & 0x7F) | 0x80);\n        value >>>= 7;\n        length++;\n    }\n\n    this.writeUInt8(value & 0x7F);\n\n    return length;\n};\n\nBinaryWriter.prototype.ensureSize = function (size) {\n    if (this.buffer.length < this.position + size) {\n        if (this.allowResize) {\n            var tempBuffer = new Buffer(this.position + size);\n            this.buffer.copy(tempBuffer, 0, 0, this.buffer.length);\n            this.buffer = tempBuffer;\n        }\n        else {\n            throw new RangeError('index out of range');\n        }\n    }\n};\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":182}],350:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = Geometry;\n\nvar Types = require('./types');\nvar Point = require('./point');\nvar LineString = require('./linestring');\nvar Polygon = require('./polygon');\nvar MultiPoint = require('./multipoint');\nvar MultiLineString = require('./multilinestring');\nvar MultiPolygon = require('./multipolygon');\nvar GeometryCollection = require('./geometrycollection');\nvar BinaryReader = require('./binaryreader');\nvar BinaryWriter = require('./binarywriter');\nvar WktParser = require('./wktparser');\nvar ZigZag = require('./zigzag.js');\n\nfunction Geometry() {\n    this.srid = undefined;\n    this.hasZ = false;\n    this.hasM = false;\n}\n\nGeometry.parse = function (value, options) {\n    var valueType = typeof value;\n\n    if (valueType === 'string' || value instanceof WktParser)\n        return Geometry._parseWkt(value);\n    else if (Buffer.isBuffer(value) || value instanceof BinaryReader)\n        return Geometry._parseWkb(value, options);\n    else\n        throw new Error('first argument must be a string or Buffer');\n};\n\nGeometry._parseWkt = function (value) {\n    var wktParser,\n        srid;\n\n    if (value instanceof WktParser)\n        wktParser = value;\n    else\n        wktParser = new WktParser(value);\n\n    var match = wktParser.matchRegex([/^SRID=(\\d+);/]);\n    if (match)\n        srid = parseInt(match[1], 10);\n\n    var geometryType = wktParser.matchType();\n    var dimension = wktParser.matchDimension();\n\n    var options = {\n        srid: srid,\n        hasZ: dimension.hasZ,\n        hasM: dimension.hasM\n    };\n\n    switch (geometryType) {\n    case Types.wkt.Point:\n        return Point._parseWkt(wktParser, options);\n    case Types.wkt.LineString:\n        return LineString._parseWkt(wktParser, options);\n    case Types.wkt.Polygon:\n        return Polygon._parseWkt(wktParser, options);\n    case Types.wkt.MultiPoint:\n        return MultiPoint._parseWkt(wktParser, options);\n    case Types.wkt.MultiLineString:\n        return MultiLineString._parseWkt(wktParser, options);\n    case Types.wkt.MultiPolygon:\n        return MultiPolygon._parseWkt(wktParser, options);\n    case Types.wkt.GeometryCollection:\n        return GeometryCollection._parseWkt(wktParser, options);\n    }\n};\n\nGeometry._parseWkb = function (value, parentOptions) {\n    var binaryReader,\n        wkbType,\n        geometryType,\n        options = {};\n\n    if (value instanceof BinaryReader)\n        binaryReader = value;\n    else\n        binaryReader = new BinaryReader(value);\n\n    binaryReader.isBigEndian = !binaryReader.readInt8();\n\n    wkbType = binaryReader.readUInt32();\n\n    options.hasSrid = (wkbType & 0x20000000) === 0x20000000;\n    options.isEwkb = (wkbType & 0x20000000) || (wkbType & 0x40000000) || (wkbType & 0x80000000);\n    \n    if (options.hasSrid)\n        options.srid = binaryReader.readUInt32();\n\n    options.hasZ = false;\n    options.hasM = false;\n\n    if (!options.isEwkb && (!parentOptions || !parentOptions.isEwkb)) {\n        if (wkbType >= 1000 && wkbType < 2000) {\n            options.hasZ = true;\n            geometryType = wkbType - 1000;\n        }\n        else if (wkbType >= 2000 && wkbType < 3000) {\n            options.hasM = true;\n            geometryType = wkbType - 2000;\n        }\n        else if (wkbType >= 3000 && wkbType < 4000) {\n            options.hasZ = true;\n            options.hasM = true;\n            geometryType = wkbType - 3000;\n        }\n        else {\n            geometryType = wkbType;\n        }\n    }\n    else {\n        if (wkbType & 0x80000000)\n            options.hasZ = true;\n        if (wkbType & 0x40000000)\n            options.hasM = true;\n\n        geometryType = wkbType & 0xF;\n    }\n\n    switch (geometryType) {\n    case Types.wkb.Point:\n        return Point._parseWkb(binaryReader, options);\n    case Types.wkb.LineString:\n        return LineString._parseWkb(binaryReader, options);\n    case Types.wkb.Polygon:\n        return Polygon._parseWkb(binaryReader, options);\n    case Types.wkb.MultiPoint:\n        return MultiPoint._parseWkb(binaryReader, options);\n    case Types.wkb.MultiLineString:\n        return MultiLineString._parseWkb(binaryReader, options);\n    case Types.wkb.MultiPolygon:\n        return MultiPolygon._parseWkb(binaryReader, options);\n    case Types.wkb.GeometryCollection:\n        return GeometryCollection._parseWkb(binaryReader, options);\n    default:\n        throw new Error('GeometryType ' + geometryType + ' not supported');\n    }\n};\n\nGeometry.parseTwkb = function (value) {\n    var binaryReader,\n        options = {};\n\n    if (value instanceof BinaryReader)\n        binaryReader = value;\n    else\n        binaryReader = new BinaryReader(value);\n\n    var type = binaryReader.readUInt8();\n    var metadataHeader = binaryReader.readUInt8();\n\n    var geometryType = type & 0x0F;\n    options.precision = ZigZag.decode(type >> 4);\n    options.precisionFactor = Math.pow(10, options.precision);\n\n    options.hasBoundingBox = metadataHeader >> 0 & 1;\n    options.hasSizeAttribute = metadataHeader >> 1 & 1;\n    options.hasIdList = metadataHeader >> 2 & 1;\n    options.hasExtendedPrecision = metadataHeader >> 3 & 1;\n    options.isEmpty = metadataHeader >> 4 & 1;\n\n    if (options.hasExtendedPrecision) {\n        var extendedPrecision = binaryReader.readUInt8();\n        options.hasZ = (extendedPrecision & 0x01) === 0x01;\n        options.hasM = (extendedPrecision & 0x02) === 0x02;\n\n        options.zPrecision = ZigZag.decode((extendedPrecision & 0x1C) >> 2);\n        options.zPrecisionFactor = Math.pow(10, options.zPrecision);\n\n        options.mPrecision = ZigZag.decode((extendedPrecision & 0xE0) >> 5);\n        options.mPrecisionFactor = Math.pow(10, options.mPrecision);\n    }\n    else {\n        options.hasZ = false;\n        options.hasM = false;\n    }\n\n    if (options.hasSizeAttribute)\n        binaryReader.readVarInt();\n    if (options.hasBoundingBox) {\n        var dimensions = 2;\n\n        if (options.hasZ)\n            dimensions++;\n        if (options.hasM)\n            dimensions++;\n\n        for (var i = 0; i < dimensions; i++) {\n            binaryReader.readVarInt();\n            binaryReader.readVarInt();\n        }\n    }\n\n    switch (geometryType) {\n    case Types.wkb.Point:\n        return Point._parseTwkb(binaryReader, options);\n    case Types.wkb.LineString:\n        return LineString._parseTwkb(binaryReader, options);\n    case Types.wkb.Polygon:\n        return Polygon._parseTwkb(binaryReader, options);\n    case Types.wkb.MultiPoint:\n        return MultiPoint._parseTwkb(binaryReader, options);\n    case Types.wkb.MultiLineString:\n        return MultiLineString._parseTwkb(binaryReader, options);\n    case Types.wkb.MultiPolygon:\n        return MultiPolygon._parseTwkb(binaryReader, options);\n    case Types.wkb.GeometryCollection:\n        return GeometryCollection._parseTwkb(binaryReader, options);\n    default:\n        throw new Error('GeometryType ' + geometryType + ' not supported');\n    }\n};\n\nGeometry.parseGeoJSON = function (value) {\n\treturn Geometry._parseGeoJSON(value);\n};\n\nGeometry._parseGeoJSON = function (value, isSubGeometry) {\n    var geometry;\n\n    switch (value.type) {\n    case Types.geoJSON.Point:\n        geometry = Point._parseGeoJSON(value); break;\n    case Types.geoJSON.LineString:\n        geometry = LineString._parseGeoJSON(value); break;\n    case Types.geoJSON.Polygon:\n        geometry = Polygon._parseGeoJSON(value); break;\n    case Types.geoJSON.MultiPoint:\n        geometry = MultiPoint._parseGeoJSON(value); break;\n    case Types.geoJSON.MultiLineString:\n        geometry = MultiLineString._parseGeoJSON(value); break;\n    case Types.geoJSON.MultiPolygon:\n        geometry = MultiPolygon._parseGeoJSON(value); break;\n    case Types.geoJSON.GeometryCollection:\n        geometry = GeometryCollection._parseGeoJSON(value); break;\n    default:\n        throw new Error('GeometryType ' + value.type + ' not supported');\n    }\n\n    if (value.crs && value.crs.type && value.crs.type === 'name' && value.crs.properties && value.crs.properties.name) {\n        var crs = value.crs.properties.name;\n\n        if (crs.indexOf('EPSG:') === 0)\n            geometry.srid = parseInt(crs.substring(5));\n        else if (crs.indexOf('urn:ogc:def:crs:EPSG::') === 0)\n            geometry.srid = parseInt(crs.substring(22));\n        else\n            throw new Error('Unsupported crs: ' + crs);\n    }\n\telse if (!isSubGeometry) {\n        geometry.srid = 4326;\n    }\n\n    return geometry;\n};\n\nGeometry.prototype.toEwkt = function () {\n    return 'SRID=' + this.srid + ';' + this.toWkt();\n};\n\nGeometry.prototype.toEwkb = function () {\n    var ewkb = new BinaryWriter(this._getWkbSize() + 4);\n    var wkb = this.toWkb();\n\n    ewkb.writeInt8(1);\n    ewkb.writeUInt32LE(wkb.slice(1, 5).readUInt32LE(0) | 0x20000000, true);\n    ewkb.writeUInt32LE(this.srid);\n\n    ewkb.writeBuffer(wkb.slice(5));\n\n    return ewkb.buffer;\n};\n\nGeometry.prototype._getWktType = function (wktType, isEmpty) {\n    var wkt = wktType;\n\n    if (this.hasZ && this.hasM)\n        wkt += ' ZM ';\n    else if (this.hasZ)\n        wkt += ' Z ';\n    else if (this.hasM)\n        wkt += ' M ';\n\n    if (isEmpty && !this.hasZ && !this.hasM)\n        wkt += ' ';\n\n    if (isEmpty)\n        wkt += 'EMPTY';\n\n    return wkt;\n};\n\nGeometry.prototype._getWktCoordinate = function (point) {\n    var coordinates = point.x + ' ' + point.y;\n\n    if (this.hasZ)\n        coordinates += ' ' + point.z;\n    if (this.hasM)\n        coordinates += ' ' + point.m;\n\n    return coordinates;\n};\n\nGeometry.prototype._writeWkbType = function (wkb, geometryType, parentOptions) {\n    var dimensionType = 0;\n\n    if (typeof this.srid === 'undefined' && (!parentOptions || typeof parentOptions.srid === 'undefined')) {\n        if (this.hasZ && this.hasM)\n            dimensionType += 3000;\n        else if(this.hasZ)\n            dimensionType += 1000;\n        else if(this.hasM)\n            dimensionType += 2000;\n    }\n    else {\n        if (this.hasZ)\n            dimensionType |= 0x80000000;\n        if (this.hasM)\n            dimensionType |= 0x40000000;\n    }\n\n    wkb.writeUInt32LE(dimensionType + geometryType, true);\n};\n\nGeometry.getTwkbPrecision = function (xyPrecision, zPrecision, mPrecision) {\n    return {\n        xy: xyPrecision,\n        z: zPrecision,\n        m: mPrecision,\n        xyFactor: Math.pow(10, xyPrecision),\n        zFactor: Math.pow(10, zPrecision),\n        mFactor: Math.pow(10, mPrecision)\n    };\n};\n\nGeometry.prototype._writeTwkbHeader = function (twkb, geometryType, precision, isEmpty) {\n    var type = (ZigZag.encode(precision.xy) << 4) + geometryType;\n    var metadataHeader = (this.hasZ || this.hasM) << 3;\n    metadataHeader += isEmpty << 4;\n\n    twkb.writeUInt8(type);\n    twkb.writeUInt8(metadataHeader);\n\n    if (this.hasZ || this.hasM) {\n        var extendedPrecision = 0;\n        if (this.hasZ)\n            extendedPrecision |= 0x1;\n        if (this.hasM)\n            extendedPrecision |= 0x2;\n\n        twkb.writeUInt8(extendedPrecision);\n    }\n};\n\nGeometry.prototype.toGeoJSON = function (options) {\n    var geoJSON = {};\n\n    if (this.srid) {\n        if (options) {\n            if (options.shortCrs) {\n                geoJSON.crs = {\n                    type: 'name',\n                    properties: {\n                        name: 'EPSG:' + this.srid\n                    }\n                };\n            }\n            else if (options.longCrs) {\n                geoJSON.crs = {\n                    type: 'name',\n                    properties: {\n                        name: 'urn:ogc:def:crs:EPSG::' + this.srid\n                    }\n                };\n            }\n        }\n    }\n\n    return geoJSON;\n};\n\n}).call(this,{\"isBuffer\":require(\"../../is-buffer/index.js\")})\n},{\"../../is-buffer/index.js\":263,\"./binaryreader\":348,\"./binarywriter\":349,\"./geometrycollection\":351,\"./linestring\":352,\"./multilinestring\":353,\"./multipoint\":354,\"./multipolygon\":355,\"./point\":356,\"./polygon\":357,\"./types\":358,\"./wktparser\":359,\"./zigzag.js\":361}],351:[function(require,module,exports){\nmodule.exports = GeometryCollection;\n\nvar util = require('util');\n\nvar Types = require('./types');\nvar Geometry = require('./geometry');\nvar BinaryWriter = require('./binarywriter');\n\nfunction GeometryCollection(geometries, srid) {\n    Geometry.call(this);\n\n    this.geometries = geometries || [];\n\tthis.srid = srid;\n\n    if (this.geometries.length > 0) {\n        this.hasZ = this.geometries[0].hasZ;\n        this.hasM = this.geometries[0].hasM;\n    }\n}\n\nutil.inherits(GeometryCollection, Geometry);\n\nGeometryCollection.Z = function (geometries, srid) {\n    var geometryCollection = new GeometryCollection(geometries, srid);\n    geometryCollection.hasZ = true;\n    return geometryCollection;\n};\n\nGeometryCollection.M = function (geometries, srid) {\n    var geometryCollection = new GeometryCollection(geometries, srid);\n    geometryCollection.hasM = true;\n    return geometryCollection;\n};\n\nGeometryCollection.ZM = function (geometries, srid) {\n    var geometryCollection = new GeometryCollection(geometries, srid);\n    geometryCollection.hasZ = true;\n    geometryCollection.hasM = true;\n    return geometryCollection;\n};\n\nGeometryCollection._parseWkt = function (value, options) {\n    var geometryCollection = new GeometryCollection();\n    geometryCollection.srid = options.srid;\n    geometryCollection.hasZ = options.hasZ;\n    geometryCollection.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return geometryCollection;\n\n    value.expectGroupStart();\n\n    do {\n        geometryCollection.geometries.push(Geometry.parse(value));\n    } while (value.isMatch([',']));\n\n    value.expectGroupEnd();\n\n    return geometryCollection;\n};\n\nGeometryCollection._parseWkb = function (value, options) {\n    var geometryCollection = new GeometryCollection();\n    geometryCollection.srid = options.srid;\n    geometryCollection.hasZ = options.hasZ;\n    geometryCollection.hasM = options.hasM;\n\n    var geometryCount = value.readUInt32();\n\n    for (var i = 0; i < geometryCount; i++)\n        geometryCollection.geometries.push(Geometry.parse(value, options));\n\n    return geometryCollection;\n};\n\nGeometryCollection._parseTwkb = function (value, options) {\n    var geometryCollection = new GeometryCollection();\n    geometryCollection.hasZ = options.hasZ;\n    geometryCollection.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return geometryCollection;\n\n    var geometryCount = value.readVarInt();\n\n    for (var i = 0; i < geometryCount; i++)\n        geometryCollection.geometries.push(Geometry.parseTwkb(value));\n\n    return geometryCollection;\n};\n\nGeometryCollection._parseGeoJSON = function (value) {\n    var geometryCollection = new GeometryCollection();\n\n    for (var i = 0; i < value.geometries.length; i++)\n        geometryCollection.geometries.push(Geometry._parseGeoJSON(value.geometries[i], true));\n\n    if (geometryCollection.geometries.length > 0)\n        geometryCollection.hasZ = geometryCollection.geometries[0].hasZ;\n\n    return geometryCollection;\n};\n\nGeometryCollection.prototype.toWkt = function () {\n    if (this.geometries.length === 0)\n        return this._getWktType(Types.wkt.GeometryCollection, true);\n\n    var wkt = this._getWktType(Types.wkt.GeometryCollection, false) + '(';\n\n    for (var i = 0; i < this.geometries.length; i++)\n        wkt += this.geometries[i].toWkt() + ',';\n\n    wkt = wkt.slice(0, -1);\n    wkt += ')';\n\n    return wkt;\n};\n\nGeometryCollection.prototype.toWkb = function () {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.GeometryCollection);\n    wkb.writeUInt32LE(this.geometries.length);\n\n    for (var i = 0; i < this.geometries.length; i++)\n        wkb.writeBuffer(this.geometries[i].toWkb({ srid: this.srid }));\n\n    return wkb.buffer;\n};\n\nGeometryCollection.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.geometries.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.GeometryCollection, precision, isEmpty);\n\n    if (this.geometries.length > 0) {\n        twkb.writeVarInt(this.geometries.length);\n\n        for (var i = 0; i < this.geometries.length; i++)\n            twkb.writeBuffer(this.geometries[i].toTwkb());\n    }\n\n    return twkb.buffer;\n};\n\nGeometryCollection.prototype._getWkbSize = function () {\n    var size = 1 + 4 + 4;\n\n    for (var i = 0; i < this.geometries.length; i++)\n        size += this.geometries[i]._getWkbSize();\n\n    return size;\n};\n\nGeometryCollection.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.GeometryCollection;\n    geoJSON.geometries = [];\n\n    for (var i = 0; i < this.geometries.length; i++)\n        geoJSON.geometries.push(this.geometries[i].toGeoJSON());\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./types\":358,\"util\":343}],352:[function(require,module,exports){\nmodule.exports = LineString;\n\nvar util = require('util');\n\nvar Geometry = require('./geometry');\nvar Types = require('./types');\nvar Point = require('./point');\nvar BinaryWriter = require('./binarywriter');\n\nfunction LineString(points, srid) {\n    Geometry.call(this);\n\n    this.points = points || [];\n\tthis.srid = srid;\n\n    if (this.points.length > 0) {\n        this.hasZ = this.points[0].hasZ;\n        this.hasM = this.points[0].hasM;\n    }\n}\n\nutil.inherits(LineString, Geometry);\n\nLineString.Z = function (points, srid) {\n    var lineString = new LineString(points, srid);\n    lineString.hasZ = true;\n    return lineString;\n};\n\nLineString.M = function (points, srid) {\n    var lineString = new LineString(points, srid);\n    lineString.hasM = true;\n    return lineString;\n};\n\nLineString.ZM = function (points, srid) {\n    var lineString = new LineString(points, srid);\n    lineString.hasZ = true;\n    lineString.hasM = true;\n    return lineString;\n};\n\nLineString._parseWkt = function (value, options) {\n    var lineString = new LineString();\n    lineString.srid = options.srid;\n    lineString.hasZ = options.hasZ;\n    lineString.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return lineString;\n\n    value.expectGroupStart();\n    lineString.points.push.apply(lineString.points, value.matchCoordinates(options));\n    value.expectGroupEnd();\n\n    return lineString;\n};\n\nLineString._parseWkb = function (value, options) {\n    var lineString = new LineString();\n    lineString.srid = options.srid;\n    lineString.hasZ = options.hasZ;\n    lineString.hasM = options.hasM;\n\n    var pointCount = value.readUInt32();\n\n    for (var i = 0; i < pointCount; i++)\n        lineString.points.push(Point._readWkbPoint(value, options));\n\n    return lineString;\n};\n\nLineString._parseTwkb = function (value, options) {\n    var lineString = new LineString();\n    lineString.hasZ = options.hasZ;\n    lineString.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return lineString;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var pointCount = value.readVarInt();\n\n    for (var i = 0; i < pointCount; i++)\n        lineString.points.push(Point._readTwkbPoint(value, options, previousPoint));\n\n    return lineString;\n};\n\nLineString._parseGeoJSON = function (value) {\n    var lineString = new LineString();\n\n    if (value.coordinates.length > 0)\n        lineString.hasZ = value.coordinates[0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++)\n        lineString.points.push(Point._readGeoJSONPoint(value.coordinates[i]));\n\n    return lineString;\n};\n\nLineString.prototype.toWkt = function () {\n    if (this.points.length === 0)\n        return this._getWktType(Types.wkt.LineString, true);\n\n    return this._getWktType(Types.wkt.LineString, false) + this._toInnerWkt();\n};\n\nLineString.prototype._toInnerWkt = function () {\n    var innerWkt = '(';\n\n    for (var i = 0; i < this.points.length; i++)\n        innerWkt += this._getWktCoordinate(this.points[i]) + ',';\n\n    innerWkt = innerWkt.slice(0, -1);\n    innerWkt += ')';\n\n    return innerWkt;\n};\n\nLineString.prototype.toWkb = function (parentOptions) {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.LineString, parentOptions);\n    wkb.writeUInt32LE(this.points.length);\n\n    for (var i = 0; i < this.points.length; i++)\n        this.points[i]._writeWkbPoint(wkb);\n\n    return wkb.buffer;\n};\n\nLineString.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.points.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.LineString, precision, isEmpty);\n\n    if (this.points.length > 0) {\n        twkb.writeVarInt(this.points.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.points.length; i++)\n            this.points[i]._writeTwkbPoint(twkb, precision, previousPoint);\n    }\n\n    return twkb.buffer;\n};\n\nLineString.prototype._getWkbSize = function () {\n    var coordinateSize = 16;\n\n    if (this.hasZ)\n        coordinateSize += 8;\n    if (this.hasM)\n        coordinateSize += 8;\n\n    return 1 + 4 + 4 + (this.points.length * coordinateSize);\n};\n\nLineString.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.LineString;\n    geoJSON.coordinates = [];\n\n    for (var i = 0; i < this.points.length; i++) {\n        if (this.hasZ)\n            geoJSON.coordinates.push([this.points[i].x, this.points[i].y, this.points[i].z]);\n        else\n            geoJSON.coordinates.push([this.points[i].x, this.points[i].y]);\n    }\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./point\":356,\"./types\":358,\"util\":343}],353:[function(require,module,exports){\nmodule.exports = MultiLineString;\n\nvar util = require('util');\n\nvar Types = require('./types');\nvar Geometry = require('./geometry');\nvar Point = require('./point');\nvar LineString = require('./linestring');\nvar BinaryWriter = require('./binarywriter');\n\nfunction MultiLineString(lineStrings, srid) {\n    Geometry.call(this);\n\n    this.lineStrings = lineStrings || [];\n\tthis.srid = srid;\n\n    if (this.lineStrings.length > 0) {\n        this.hasZ = this.lineStrings[0].hasZ;\n        this.hasM = this.lineStrings[0].hasM;\n    }\n}\n\nutil.inherits(MultiLineString, Geometry);\n\nMultiLineString.Z = function (lineStrings, srid) {\n    var multiLineString = new MultiLineString(lineStrings, srid);\n    multiLineString.hasZ = true;\n    return multiLineString;\n};\n\nMultiLineString.M = function (lineStrings, srid) {\n    var multiLineString = new MultiLineString(lineStrings, srid);\n    multiLineString.hasM = true;\n    return multiLineString;\n};\n\nMultiLineString.ZM = function (lineStrings, srid) {\n    var multiLineString = new MultiLineString(lineStrings, srid);\n    multiLineString.hasZ = true;\n    multiLineString.hasM = true;\n    return multiLineString;\n};\n\nMultiLineString._parseWkt = function (value, options) {\n    var multiLineString = new MultiLineString();\n    multiLineString.srid = options.srid;\n    multiLineString.hasZ = options.hasZ;\n    multiLineString.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return multiLineString;\n\n    value.expectGroupStart();\n\n    do {\n        value.expectGroupStart();\n        multiLineString.lineStrings.push(new LineString(value.matchCoordinates(options)));\n        value.expectGroupEnd();\n    } while (value.isMatch([',']));\n\n    value.expectGroupEnd();\n\n    return multiLineString;\n};\n\nMultiLineString._parseWkb = function (value, options) {\n    var multiLineString = new MultiLineString();\n    multiLineString.srid = options.srid;\n    multiLineString.hasZ = options.hasZ;\n    multiLineString.hasM = options.hasM;\n\n    var lineStringCount = value.readUInt32();\n\n    for (var i = 0; i < lineStringCount; i++)\n        multiLineString.lineStrings.push(Geometry.parse(value, options));\n\n    return multiLineString;\n};\n\nMultiLineString._parseTwkb = function (value, options) {\n    var multiLineString = new MultiLineString();\n    multiLineString.hasZ = options.hasZ;\n    multiLineString.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return multiLineString;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var lineStringCount = value.readVarInt();\n\n    for (var i = 0; i < lineStringCount; i++) {\n        var lineString = new LineString();\n        lineString.hasZ = options.hasZ;\n        lineString.hasM = options.hasM;\n\n        var pointCount = value.readVarInt();\n\n        for (var j = 0; j < pointCount; j++)\n            lineString.points.push(Point._readTwkbPoint(value, options, previousPoint));\n\n        multiLineString.lineStrings.push(lineString);\n    }\n\n    return multiLineString;\n};\n\nMultiLineString._parseGeoJSON = function (value) {\n    var multiLineString = new MultiLineString();\n\n    if (value.coordinates.length > 0 && value.coordinates[0].length > 0)\n        multiLineString.hasZ = value.coordinates[0][0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++)\n        multiLineString.lineStrings.push(LineString._parseGeoJSON({ coordinates: value.coordinates[i] }));\n\n    return multiLineString;\n};\n\nMultiLineString.prototype.toWkt = function () {\n    if (this.lineStrings.length === 0)\n        return this._getWktType(Types.wkt.MultiLineString, true);\n\n    var wkt = this._getWktType(Types.wkt.MultiLineString, false) + '(';\n\n    for (var i = 0; i < this.lineStrings.length; i++)\n        wkt += this.lineStrings[i]._toInnerWkt() + ',';\n\n    wkt = wkt.slice(0, -1);\n    wkt += ')';\n\n    return wkt;\n};\n\nMultiLineString.prototype.toWkb = function () {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.MultiLineString);\n    wkb.writeUInt32LE(this.lineStrings.length);\n\n    for (var i = 0; i < this.lineStrings.length; i++)\n        wkb.writeBuffer(this.lineStrings[i].toWkb({ srid: this.srid }));\n\n    return wkb.buffer;\n};\n\nMultiLineString.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.lineStrings.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.MultiLineString, precision, isEmpty);\n\n    if (this.lineStrings.length > 0) {\n        twkb.writeVarInt(this.lineStrings.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.lineStrings.length; i++) {\n            twkb.writeVarInt(this.lineStrings[i].points.length);\n\n            for (var j = 0; j < this.lineStrings[i].points.length; j++)\n                this.lineStrings[i].points[j]._writeTwkbPoint(twkb, precision, previousPoint);\n        }\n    }\n\n    return twkb.buffer;\n};\n\nMultiLineString.prototype._getWkbSize = function () {\n    var size = 1 + 4 + 4;\n\n    for (var i = 0; i < this.lineStrings.length; i++)\n        size += this.lineStrings[i]._getWkbSize();\n\n    return size;\n};\n\nMultiLineString.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.MultiLineString;\n    geoJSON.coordinates = [];\n\n    for (var i = 0; i < this.lineStrings.length; i++)\n        geoJSON.coordinates.push(this.lineStrings[i].toGeoJSON().coordinates);\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./linestring\":352,\"./point\":356,\"./types\":358,\"util\":343}],354:[function(require,module,exports){\nmodule.exports = MultiPoint;\n\nvar util = require('util');\n\nvar Types = require('./types');\nvar Geometry = require('./geometry');\nvar Point = require('./point');\nvar BinaryWriter = require('./binarywriter');\n\nfunction MultiPoint(points, srid) {\n    Geometry.call(this);\n\n    this.points = points || [];\n\tthis.srid = srid;\n\t\n    if (this.points.length > 0) {\n        this.hasZ = this.points[0].hasZ;\n        this.hasM = this.points[0].hasM;\n    }\n}\n\nutil.inherits(MultiPoint, Geometry);\n\nMultiPoint.Z = function (points, srid) {\n    var multiPoint = new MultiPoint(points, srid);\n    multiPoint.hasZ = true;\n    return multiPoint;\n};\n\nMultiPoint.M = function (points, srid) {\n    var multiPoint = new MultiPoint(points, srid);\n    multiPoint.hasM = true;\n    return multiPoint;\n};\n\nMultiPoint.ZM = function (points, srid) {\n    var multiPoint = new MultiPoint(points, srid);\n    multiPoint.hasZ = true;\n    multiPoint.hasM = true;\n    return multiPoint;\n};\n\nMultiPoint._parseWkt = function (value, options) {\n    var multiPoint = new MultiPoint();\n    multiPoint.srid = options.srid;\n    multiPoint.hasZ = options.hasZ;\n    multiPoint.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return multiPoint;\n\n    value.expectGroupStart();\n    multiPoint.points.push.apply(multiPoint.points, value.matchCoordinates(options));\n    value.expectGroupEnd();\n\n    return multiPoint;\n};\n\nMultiPoint._parseWkb = function (value, options) {\n    var multiPoint = new MultiPoint();\n    multiPoint.srid = options.srid;\n    multiPoint.hasZ = options.hasZ;\n    multiPoint.hasM = options.hasM;\n\n    var pointCount = value.readUInt32();\n\n    for (var i = 0; i < pointCount; i++)\n        multiPoint.points.push(Geometry.parse(value, options));\n\n    return multiPoint;\n};\n\nMultiPoint._parseTwkb = function (value, options) {\n    var multiPoint = new MultiPoint();\n    multiPoint.hasZ = options.hasZ;\n    multiPoint.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return multiPoint;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var pointCount = value.readVarInt();\n\n    for (var i = 0; i < pointCount; i++)\n        multiPoint.points.push(Point._readTwkbPoint(value, options, previousPoint));\n\n    return multiPoint;\n};\n\nMultiPoint._parseGeoJSON = function (value) {\n    var multiPoint = new MultiPoint();\n\n    if (value.coordinates.length > 0)\n        multiPoint.hasZ = value.coordinates[0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++)\n        multiPoint.points.push(Point._parseGeoJSON({ coordinates: value.coordinates[i] }));\n\n    return multiPoint;\n};\n\nMultiPoint.prototype.toWkt = function () {\n    if (this.points.length === 0)\n        return this._getWktType(Types.wkt.MultiPoint, true);\n\n    var wkt = this._getWktType(Types.wkt.MultiPoint, false) + '(';\n\n    for (var i = 0; i < this.points.length; i++)\n        wkt += this._getWktCoordinate(this.points[i]) + ',';\n\n    wkt = wkt.slice(0, -1);\n    wkt += ')';\n\n    return wkt;\n};\n\nMultiPoint.prototype.toWkb = function () {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.MultiPoint);\n    wkb.writeUInt32LE(this.points.length);\n\n    for (var i = 0; i < this.points.length; i++)\n        wkb.writeBuffer(this.points[i].toWkb({ srid: this.srid }));\n\n    return wkb.buffer;\n};\n\nMultiPoint.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.points.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.MultiPoint, precision, isEmpty);\n\n    if (this.points.length > 0) {\n        twkb.writeVarInt(this.points.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.points.length; i++)\n            this.points[i]._writeTwkbPoint(twkb, precision, previousPoint);\n    }\n\n    return twkb.buffer;\n};\n\nMultiPoint.prototype._getWkbSize = function () {\n    var coordinateSize = 16;\n\n    if (this.hasZ)\n        coordinateSize += 8;\n    if (this.hasM)\n        coordinateSize += 8;\n\n    coordinateSize += 5;\n\n    return 1 + 4 + 4 + (this.points.length * coordinateSize);\n};\n\nMultiPoint.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.MultiPoint;\n    geoJSON.coordinates = [];\n\n    for (var i = 0; i < this.points.length; i++)\n        geoJSON.coordinates.push(this.points[i].toGeoJSON().coordinates);\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./point\":356,\"./types\":358,\"util\":343}],355:[function(require,module,exports){\nmodule.exports = MultiPolygon;\n\nvar util = require('util');\n\nvar Types = require('./types');\nvar Geometry = require('./geometry');\nvar Point = require('./point');\nvar Polygon = require('./polygon');\nvar BinaryWriter = require('./binarywriter');\n\nfunction MultiPolygon(polygons, srid) {\n    Geometry.call(this);\n\n    this.polygons = polygons || [];\n\tthis.srid = srid;\n\n    if (this.polygons.length > 0) {\n        this.hasZ = this.polygons[0].hasZ;\n        this.hasM = this.polygons[0].hasM;\n    }\n}\n\nutil.inherits(MultiPolygon, Geometry);\n\nMultiPolygon.Z = function (polygons, srid) {\n    var multiPolygon = new MultiPolygon(polygons, srid);\n    multiPolygon.hasZ = true;\n    return multiPolygon;\n};\n\nMultiPolygon.M = function (polygons, srid) {\n    var multiPolygon = new MultiPolygon(polygons, srid);\n    multiPolygon.hasM = true;\n    return multiPolygon;\n};\n\nMultiPolygon.ZM = function (polygons, srid) {\n    var multiPolygon = new MultiPolygon(polygons, srid);\n    multiPolygon.hasZ = true;\n    multiPolygon.hasM = true;\n    return multiPolygon;\n};\n\nMultiPolygon._parseWkt = function (value, options) {\n    var multiPolygon = new MultiPolygon();\n    multiPolygon.srid = options.srid;\n    multiPolygon.hasZ = options.hasZ;\n    multiPolygon.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return multiPolygon;\n\n    value.expectGroupStart();\n\n    do {\n        value.expectGroupStart();\n\n        var exteriorRing = [];\n        var interiorRings = [];\n\n        value.expectGroupStart();\n        exteriorRing.push.apply(exteriorRing, value.matchCoordinates(options));\n        value.expectGroupEnd();\n\n        while (value.isMatch([','])) {\n            value.expectGroupStart();\n            interiorRings.push(value.matchCoordinates(options));\n            value.expectGroupEnd();\n        }\n\n        multiPolygon.polygons.push(new Polygon(exteriorRing, interiorRings));\n\n        value.expectGroupEnd();\n\n    } while (value.isMatch([',']));\n\n    value.expectGroupEnd();\n\n    return multiPolygon;\n};\n\nMultiPolygon._parseWkb = function (value, options) {\n    var multiPolygon = new MultiPolygon();\n    multiPolygon.srid = options.srid;\n    multiPolygon.hasZ = options.hasZ;\n    multiPolygon.hasM = options.hasM;\n\n    var polygonCount = value.readUInt32();\n\n    for (var i = 0; i < polygonCount; i++)\n        multiPolygon.polygons.push(Geometry.parse(value, options));\n\n    return multiPolygon;\n};\n\nMultiPolygon._parseTwkb = function (value, options) {\n    var multiPolygon = new MultiPolygon();\n    multiPolygon.hasZ = options.hasZ;\n    multiPolygon.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return multiPolygon;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var polygonCount = value.readVarInt();\n\n    for (var i = 0; i < polygonCount; i++) {\n        var polygon = new Polygon();\n        polygon.hasZ = options.hasZ;\n        polygon.hasM = options.hasM;\n\n        var ringCount = value.readVarInt();\n        var exteriorRingCount = value.readVarInt();\n\n        for (var j = 0; j < exteriorRingCount; j++)\n            polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint));\n\n        for (j = 1; j < ringCount; j++) {\n            var interiorRing = [];\n\n            var interiorRingCount = value.readVarInt();\n\n            for (var k = 0; k < interiorRingCount; k++)\n                interiorRing.push(Point._readTwkbPoint(value, options, previousPoint));\n\n            polygon.interiorRings.push(interiorRing);\n        }\n\n        multiPolygon.polygons.push(polygon);\n    }\n\n    return multiPolygon;\n};\n\nMultiPolygon._parseGeoJSON = function (value) {\n    var multiPolygon = new MultiPolygon();\n\n    if (value.coordinates.length > 0 && value.coordinates[0].length > 0 && value.coordinates[0][0].length > 0)\n        multiPolygon.hasZ = value.coordinates[0][0][0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++)\n        multiPolygon.polygons.push(Polygon._parseGeoJSON({ coordinates: value.coordinates[i] }));\n\n    return multiPolygon;\n};\n\nMultiPolygon.prototype.toWkt = function () {\n    if (this.polygons.length === 0)\n        return this._getWktType(Types.wkt.MultiPolygon, true);\n\n    var wkt = this._getWktType(Types.wkt.MultiPolygon, false) + '(';\n\n    for (var i = 0; i < this.polygons.length; i++)\n        wkt += this.polygons[i]._toInnerWkt() + ',';\n\n    wkt = wkt.slice(0, -1);\n    wkt += ')';\n\n    return wkt;\n};\n\nMultiPolygon.prototype.toWkb = function () {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.MultiPolygon);\n    wkb.writeUInt32LE(this.polygons.length);\n\n    for (var i = 0; i < this.polygons.length; i++)\n        wkb.writeBuffer(this.polygons[i].toWkb({ srid: this.srid }));\n\n    return wkb.buffer;\n};\n\nMultiPolygon.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.polygons.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.MultiPolygon, precision, isEmpty);\n\n    if (this.polygons.length > 0) {\n        twkb.writeVarInt(this.polygons.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.polygons.length; i++) {\n            twkb.writeVarInt(1 + this.polygons[i].interiorRings.length);\n\n            twkb.writeVarInt(this.polygons[i].exteriorRing.length);\n\n            for (var j = 0; j < this.polygons[i].exteriorRing.length; j++)\n                this.polygons[i].exteriorRing[j]._writeTwkbPoint(twkb, precision, previousPoint);\n\n            for (j = 0; j < this.polygons[i].interiorRings.length; j++) {\n                twkb.writeVarInt(this.polygons[i].interiorRings[j].length);\n\n                for (var k = 0; k < this.polygons[i].interiorRings[j].length; k++)\n                    this.polygons[i].interiorRings[j][k]._writeTwkbPoint(twkb, precision, previousPoint);\n            }\n        }\n    }\n\n    return twkb.buffer;\n};\n\nMultiPolygon.prototype._getWkbSize = function () {\n    var size = 1 + 4 + 4;\n\n    for (var i = 0; i < this.polygons.length; i++)\n        size += this.polygons[i]._getWkbSize();\n\n    return size;\n};\n\nMultiPolygon.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.MultiPolygon;\n    geoJSON.coordinates = [];\n\n    for (var i = 0; i < this.polygons.length; i++)\n        geoJSON.coordinates.push(this.polygons[i].toGeoJSON().coordinates);\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./point\":356,\"./polygon\":357,\"./types\":358,\"util\":343}],356:[function(require,module,exports){\nmodule.exports = Point;\n\nvar util = require('util');\n\nvar Geometry = require('./geometry');\nvar Types = require('./types');\nvar BinaryWriter = require('./binarywriter');\nvar ZigZag = require('./zigzag.js');\n\nfunction Point(x, y, z, m, srid) {\n    Geometry.call(this);\n\n    this.x = x;\n    this.y = y;\n    this.z = z;\n    this.m = m;\n\tthis.srid = srid;\n\n    this.hasZ = typeof this.z !== 'undefined';\n    this.hasM = typeof this.m !== 'undefined';\n}\n\nutil.inherits(Point, Geometry);\n\nPoint.Z = function (x, y, z, srid) {\n    var point = new Point(x, y, z, undefined, srid);\n    point.hasZ = true;\n    return point;\n};\n\nPoint.M = function (x, y, m, srid) {\n    var point = new Point(x, y, undefined, m, srid);\n    point.hasM = true;\n    return point;\n};\n\nPoint.ZM = function (x, y, z, m, srid) {\n    var point = new Point(x, y, z, m, srid);\n    point.hasZ = true;\n    point.hasM = true;\n    return point;\n};\n\nPoint._parseWkt = function (value, options) {\n    var point = new Point();\n    point.srid = options.srid;\n    point.hasZ = options.hasZ;\n    point.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return point;\n\n    value.expectGroupStart();\n\n    var coordinate = value.matchCoordinate(options);\n\n    point.x = coordinate.x;\n    point.y = coordinate.y;\n    point.z = coordinate.z;\n    point.m = coordinate.m;\n\n    value.expectGroupEnd();\n\n    return point;\n};\n\nPoint._parseWkb = function (value, options) {\n    var point = Point._readWkbPoint(value, options);\n    point.srid = options.srid;\n    return point;\n};\n\nPoint._readWkbPoint = function (value, options) {\n    return new Point(value.readDouble(), value.readDouble(),\n        options.hasZ ? value.readDouble() : undefined,\n        options.hasM ? value.readDouble() : undefined);\n};\n\nPoint._parseTwkb = function (value, options) {\n    var point = new Point();\n    point.hasZ = options.hasZ;\n    point.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return point;\n\n    point.x = ZigZag.decode(value.readVarInt()) / options.precisionFactor;\n    point.y = ZigZag.decode(value.readVarInt()) / options.precisionFactor;\n    point.z = options.hasZ ? ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor : undefined;\n    point.m = options.hasM ? ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor : undefined;\n\n    return point;\n};\n\nPoint._readTwkbPoint = function (value, options, previousPoint) {\n    previousPoint.x += ZigZag.decode(value.readVarInt()) / options.precisionFactor;\n    previousPoint.y += ZigZag.decode(value.readVarInt()) / options.precisionFactor;\n\n    if (options.hasZ)\n        previousPoint.z += ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor;\n    if (options.hasM)\n        previousPoint.m += ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor;\n\n    return new Point(previousPoint.x, previousPoint.y, previousPoint.z, previousPoint.m);\n};\n\nPoint._parseGeoJSON = function (value) {\n    return Point._readGeoJSONPoint(value.coordinates);\n};\n\nPoint._readGeoJSONPoint = function (coordinates) {\n    if (coordinates.length === 0)\n        return new Point();\n\n    if (coordinates.length > 2)\n        return new Point(coordinates[0], coordinates[1], coordinates[2]);\n\n    return new Point(coordinates[0], coordinates[1]);\n};\n\nPoint.prototype.toWkt = function () {\n    if (typeof this.x === 'undefined' && typeof this.y === 'undefined' &&\n        typeof this.z === 'undefined' && typeof this.m === 'undefined')\n        return this._getWktType(Types.wkt.Point, true);\n\n    return this._getWktType(Types.wkt.Point, false) + '(' + this._getWktCoordinate(this) + ')';\n};\n\nPoint.prototype.toWkb = function (parentOptions) {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n    this._writeWkbType(wkb, Types.wkb.Point, parentOptions);\n\n    if (typeof this.x === 'undefined' && typeof this.y === 'undefined') {\n        wkb.writeDoubleLE(NaN);\n        wkb.writeDoubleLE(NaN);\n\n        if (this.hasZ)\n            wkb.writeDoubleLE(NaN);\n        if (this.hasM)\n            wkb.writeDoubleLE(NaN);\n    }\n    else {\n        this._writeWkbPoint(wkb);\n    }\n\n    return wkb.buffer;\n};\n\nPoint.prototype._writeWkbPoint = function (wkb) {\n    wkb.writeDoubleLE(this.x);\n    wkb.writeDoubleLE(this.y);\n\n    if (this.hasZ)\n        wkb.writeDoubleLE(this.z);\n    if (this.hasM)\n        wkb.writeDoubleLE(this.m);\n};\n\nPoint.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = typeof this.x === 'undefined' && typeof this.y === 'undefined';\n\n    this._writeTwkbHeader(twkb, Types.wkb.Point, precision, isEmpty);\n\n    if (!isEmpty)\n        this._writeTwkbPoint(twkb, precision, new Point(0, 0, 0, 0));\n\n    return twkb.buffer;\n};\n\nPoint.prototype._writeTwkbPoint = function (twkb, precision, previousPoint) {\n    var x = this.x * precision.xyFactor;\n    var y = this.y * precision.xyFactor;\n    var z = this.z * precision.zFactor;\n    var m = this.m * precision.mFactor;\n\n    twkb.writeVarInt(ZigZag.encode(x - previousPoint.x));\n    twkb.writeVarInt(ZigZag.encode(y - previousPoint.y));\n    if (this.hasZ)\n        twkb.writeVarInt(ZigZag.encode(z - previousPoint.z));\n    if (this.hasM)\n        twkb.writeVarInt(ZigZag.encode(m - previousPoint.m));\n\n    previousPoint.x = x;\n    previousPoint.y = y;\n    previousPoint.z = z;\n    previousPoint.m = m;\n};\n\nPoint.prototype._getWkbSize = function () {\n    var size = 1 + 4 + 8 + 8;\n\n    if (this.hasZ)\n        size += 8;\n    if (this.hasM)\n        size += 8;\n\n    return size;\n};\n\nPoint.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.Point;\n\n    if (typeof this.x === 'undefined' && typeof this.y === 'undefined')\n        geoJSON.coordinates = [];\n    else if (typeof this.z !== 'undefined')\n        geoJSON.coordinates = [this.x, this.y, this.z];\n    else\n        geoJSON.coordinates = [this.x, this.y];\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./types\":358,\"./zigzag.js\":361,\"util\":343}],357:[function(require,module,exports){\nmodule.exports = Polygon;\n\nvar util = require('util');\n\nvar Geometry = require('./geometry');\nvar Types = require('./types');\nvar Point = require('./point');\nvar BinaryWriter = require('./binarywriter');\n\nfunction Polygon(exteriorRing, interiorRings, srid) {\n    Geometry.call(this);\n\n    this.exteriorRing = exteriorRing || [];\n    this.interiorRings = interiorRings || [];\n\tthis.srid = srid;\n\n    if (this.exteriorRing.length > 0) {\n        this.hasZ = this.exteriorRing[0].hasZ;\n        this.hasM = this.exteriorRing[0].hasM;\n    }\n}\n\nutil.inherits(Polygon, Geometry);\n\nPolygon.Z = function (exteriorRing, interiorRings, srid) {\n    var polygon = new Polygon(exteriorRing, interiorRings, srid);\n    polygon.hasZ = true;\n    return polygon;\n};\n\nPolygon.M = function (exteriorRing, interiorRings, srid) {\n    var polygon = new Polygon(exteriorRing, interiorRings, srid);\n    polygon.hasM = true;\n    return polygon;\n};\n\nPolygon.ZM = function (exteriorRing, interiorRings, srid) {\n    var polygon = new Polygon(exteriorRing, interiorRings, srid);\n    polygon.hasZ = true;\n    polygon.hasM = true;\n    return polygon;\n};\n\nPolygon._parseWkt = function (value, options) {\n    var polygon = new Polygon();\n    polygon.srid = options.srid;\n    polygon.hasZ = options.hasZ;\n    polygon.hasM = options.hasM;\n\n    if (value.isMatch(['EMPTY']))\n        return polygon;\n\n    value.expectGroupStart();\n\n    value.expectGroupStart();\n    polygon.exteriorRing.push.apply(polygon.exteriorRing, value.matchCoordinates(options));\n    value.expectGroupEnd();\n\n    while (value.isMatch([','])) {\n        value.expectGroupStart();\n        polygon.interiorRings.push(value.matchCoordinates(options));\n        value.expectGroupEnd();\n    }\n\n    value.expectGroupEnd();\n\n    return polygon;\n};\n\nPolygon._parseWkb = function (value, options) {\n    var polygon = new Polygon();\n    polygon.srid = options.srid;\n    polygon.hasZ = options.hasZ;\n    polygon.hasM = options.hasM;\n\n    var ringCount = value.readUInt32();\n\n    if (ringCount > 0) {\n        var exteriorRingCount = value.readUInt32();\n\n        for (var i = 0; i < exteriorRingCount; i++)\n            polygon.exteriorRing.push(Point._readWkbPoint(value, options));\n\n        for (i = 1; i < ringCount; i++) {\n            var interiorRing = [];\n\n            var interiorRingCount = value.readUInt32();\n\n            for (var j = 0; j < interiorRingCount; j++)\n                interiorRing.push(Point._readWkbPoint(value, options));\n\n            polygon.interiorRings.push(interiorRing);\n        }\n    }\n\n    return polygon;\n};\n\nPolygon._parseTwkb = function (value, options) {\n    var polygon = new Polygon();\n    polygon.hasZ = options.hasZ;\n    polygon.hasM = options.hasM;\n\n    if (options.isEmpty)\n        return polygon;\n\n    var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined);\n    var ringCount = value.readVarInt();\n    var exteriorRingCount = value.readVarInt();\n\n    for (var i = 0; i < exteriorRingCount; i++)\n        polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint));\n\n    for (i = 1; i < ringCount; i++) {\n        var interiorRing = [];\n\n        var interiorRingCount = value.readVarInt();\n\n        for (var j = 0; j < interiorRingCount; j++)\n            interiorRing.push(Point._readTwkbPoint(value, options, previousPoint));\n\n        polygon.interiorRings.push(interiorRing);\n    }\n\n    return polygon;\n};\n\nPolygon._parseGeoJSON = function (value) {\n    var polygon = new Polygon();\n\n    if (value.coordinates.length > 0 && value.coordinates[0].length > 0)\n        polygon.hasZ = value.coordinates[0][0].length > 2;\n\n    for (var i = 0; i < value.coordinates.length; i++) {\n        if (i > 0)\n            polygon.interiorRings.push([]);\n\n        for (var j = 0; j  < value.coordinates[i].length; j++) {\n            if (i === 0)\n                polygon.exteriorRing.push(Point._readGeoJSONPoint(value.coordinates[i][j]));\n            else\n                polygon.interiorRings[i - 1].push(Point._readGeoJSONPoint(value.coordinates[i][j]));\n        }\n    }\n\n    return polygon;\n};\n\nPolygon.prototype.toWkt = function () {\n    if (this.exteriorRing.length === 0)\n        return this._getWktType(Types.wkt.Polygon, true);\n\n    return this._getWktType(Types.wkt.Polygon, false) + this._toInnerWkt();\n};\n\nPolygon.prototype._toInnerWkt = function () {\n    var innerWkt = '((';\n\n    for (var i = 0; i < this.exteriorRing.length; i++)\n        innerWkt += this._getWktCoordinate(this.exteriorRing[i]) + ',';\n\n    innerWkt = innerWkt.slice(0, -1);\n    innerWkt += ')';\n\n    for (i = 0; i < this.interiorRings.length; i++) {\n        innerWkt += ',(';\n\n        for (var j = 0; j < this.interiorRings[i].length; j++) {\n            innerWkt += this._getWktCoordinate(this.interiorRings[i][j]) + ',';\n        }\n\n        innerWkt = innerWkt.slice(0, -1);\n        innerWkt += ')';\n    }\n\n    innerWkt += ')';\n\n    return innerWkt;\n};\n\nPolygon.prototype.toWkb = function (parentOptions) {\n    var wkb = new BinaryWriter(this._getWkbSize());\n\n    wkb.writeInt8(1);\n\n    this._writeWkbType(wkb, Types.wkb.Polygon, parentOptions);\n\n    if (this.exteriorRing.length > 0) {\n        wkb.writeUInt32LE(1 + this.interiorRings.length);\n        wkb.writeUInt32LE(this.exteriorRing.length);\n    }\n    else {\n        wkb.writeUInt32LE(0);\n    }\n\n    for (var i = 0; i < this.exteriorRing.length; i++)\n        this.exteriorRing[i]._writeWkbPoint(wkb);\n\n    for (i = 0; i < this.interiorRings.length; i++) {\n        wkb.writeUInt32LE(this.interiorRings[i].length);\n\n        for (var j = 0; j < this.interiorRings[i].length; j++)\n            this.interiorRings[i][j]._writeWkbPoint(wkb);\n    }\n\n    return wkb.buffer;\n};\n\nPolygon.prototype.toTwkb = function () {\n    var twkb = new BinaryWriter(0, true);\n\n    var precision = Geometry.getTwkbPrecision(5, 0, 0);\n    var isEmpty = this.exteriorRing.length === 0;\n\n    this._writeTwkbHeader(twkb, Types.wkb.Polygon, precision, isEmpty);\n\n    if (this.exteriorRing.length > 0) {\n        twkb.writeVarInt(1 + this.interiorRings.length);\n\n        twkb.writeVarInt(this.exteriorRing.length);\n\n        var previousPoint = new Point(0, 0, 0, 0);\n        for (var i = 0; i < this.exteriorRing.length; i++)\n            this.exteriorRing[i]._writeTwkbPoint(twkb, precision, previousPoint);\n\n        for (i = 0; i < this.interiorRings.length; i++) {\n            twkb.writeVarInt(this.interiorRings[i].length);\n\n            for (var j = 0; j < this.interiorRings[i].length; j++)\n                this.interiorRings[i][j]._writeTwkbPoint(twkb, precision, previousPoint);\n        }\n    }\n\n    return twkb.buffer;\n};\n\nPolygon.prototype._getWkbSize = function () {\n    var coordinateSize = 16;\n\n    if (this.hasZ)\n        coordinateSize += 8;\n    if (this.hasM)\n        coordinateSize += 8;\n\n    var size = 1 + 4 + 4;\n\n    if (this.exteriorRing.length > 0)\n        size += 4 + (this.exteriorRing.length * coordinateSize);\n\n    for (var i = 0; i < this.interiorRings.length; i++)\n        size += 4 + (this.interiorRings[i].length * coordinateSize);\n\n    return size;\n};\n\nPolygon.prototype.toGeoJSON = function (options) {\n    var geoJSON = Geometry.prototype.toGeoJSON.call(this, options);\n    geoJSON.type = Types.geoJSON.Polygon;\n    geoJSON.coordinates = [];\n\n    if (this.exteriorRing.length > 0) {\n        var exteriorRing = [];\n\n        for (var i = 0; i < this.exteriorRing.length; i++) {\n            if (this.hasZ)\n                exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y, this.exteriorRing[i].z]);\n            else\n                exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y]);\n        }\n\n        geoJSON.coordinates.push(exteriorRing);\n    }\n\n    for (var j = 0; j < this.interiorRings.length; j++) {\n        var interiorRing = [];\n\n        for (var k = 0; k < this.interiorRings[j].length; k++) {\n            if (this.hasZ)\n                interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y, this.interiorRings[j][k].z]);\n            else\n                interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y]);\n        }\n\n        geoJSON.coordinates.push(interiorRing);\n    }\n\n    return geoJSON;\n};\n\n},{\"./binarywriter\":349,\"./geometry\":350,\"./point\":356,\"./types\":358,\"util\":343}],358:[function(require,module,exports){\nmodule.exports = {\n    wkt: {\n        Point: 'POINT',\n        LineString: 'LINESTRING',\n        Polygon: 'POLYGON',\n        MultiPoint: 'MULTIPOINT',\n        MultiLineString: 'MULTILINESTRING',\n        MultiPolygon: 'MULTIPOLYGON',\n        GeometryCollection: 'GEOMETRYCOLLECTION'\n    },\n    wkb: {\n        Point: 1,\n        LineString: 2,\n        Polygon: 3,\n        MultiPoint: 4,\n        MultiLineString: 5,\n        MultiPolygon: 6,\n        GeometryCollection: 7\n    },\n    geoJSON: {\n        Point: 'Point',\n        LineString: 'LineString',\n        Polygon: 'Polygon',\n        MultiPoint: 'MultiPoint',\n        MultiLineString: 'MultiLineString',\n        MultiPolygon: 'MultiPolygon',\n        GeometryCollection: 'GeometryCollection'\n    }\n};\n\n},{}],359:[function(require,module,exports){\nmodule.exports = WktParser;\n\nvar Types = require('./types');\nvar Point = require('./point');\n\nfunction WktParser(value) {\n    this.value = value;\n    this.position = 0;\n}\n\nWktParser.prototype.match = function (tokens) {\n    this.skipWhitespaces();\n\n    for (var i = 0; i < tokens.length; i++) {\n        if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\n            this.position += tokens[i].length;\n            return tokens[i];\n        }\n    }\n\n    return null;\n};\n\nWktParser.prototype.matchRegex = function (tokens) {\n    this.skipWhitespaces();\n\n    for (var i = 0; i < tokens.length; i++) {\n        var match = this.value.substring(this.position).match(tokens[i]);\n\n        if (match) {\n            this.position += match[0].length;\n            return match;\n        }\n    }\n\n    return null;\n};\n\nWktParser.prototype.isMatch = function (tokens) {\n    this.skipWhitespaces();\n\n    for (var i = 0; i < tokens.length; i++) {\n        if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\n            this.position += tokens[i].length;\n            return true;\n        }\n    }\n\n    return false;\n};\n\nWktParser.prototype.matchType = function () {\n    var geometryType = this.match([Types.wkt.Point, Types.wkt.LineString, Types.wkt.Polygon, Types.wkt.MultiPoint,\n                                   Types.wkt.MultiLineString, Types.wkt.MultiPolygon, Types.wkt.GeometryCollection]);\n\n    if (!geometryType)\n        throw new Error('Expected geometry type');\n\n    return geometryType;\n};\n\nWktParser.prototype.matchDimension = function () {\n    var dimension = this.match(['ZM', 'Z', 'M']);\n\n    switch (dimension) {\n        case 'ZM': return { hasZ: true, hasM: true };\n        case 'Z': return { hasZ: true, hasM: false };\n        case 'M': return { hasZ: false, hasM: true };\n        default: return { hasZ: false, hasM: false };\n    }\n};\n\nWktParser.prototype.expectGroupStart = function () {\n    if (!this.isMatch(['(']))\n        throw new Error('Expected group start');\n};\n\nWktParser.prototype.expectGroupEnd = function () {\n    if (!this.isMatch([')']))\n        throw new Error('Expected group end');\n};\n\nWktParser.prototype.matchCoordinate = function (options) {\n    var match;\n\n    if (options.hasZ && options.hasM)\n        match = this.matchRegex([/^(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)/]);\n    else if (options.hasZ || options.hasM)\n        match = this.matchRegex([/^(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)/]);\n    else\n        match = this.matchRegex([/^(-?\\d+\\.?\\d*)\\s+(-?\\d+\\.?\\d*)/]);\n\n    if (!match)\n        throw new Error('Expected coordinates');\n\n    if (options.hasZ && options.hasM)\n        return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4]));\n    else if (options.hasZ)\n        return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]));\n    else if (options.hasM)\n        return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, parseFloat(match[3]));\n    else\n        return new Point(parseFloat(match[1]), parseFloat(match[2]));\n};\n\nWktParser.prototype.matchCoordinates = function (options) {\n    var coordinates = [];\n\n    do {\n        var startsWithBracket = this.isMatch(['(']);\n\n        coordinates.push(this.matchCoordinate(options));\n\n        if (startsWithBracket)\n            this.expectGroupEnd();\n    } while (this.isMatch([',']));\n\n    return coordinates;\n};\n\nWktParser.prototype.skipWhitespaces = function () {\n    while (this.position < this.value.length && this.value[this.position] === ' ')\n        this.position++;\n};\n\n},{\"./point\":356,\"./types\":358}],360:[function(require,module,exports){\nexports.Types = require('./types');\nexports.Geometry = require('./geometry');\nexports.Point = require('./point');\nexports.LineString = require('./linestring');\nexports.Polygon = require('./polygon');\nexports.MultiPoint = require('./multipoint');\nexports.MultiLineString = require('./multilinestring');\nexports.MultiPolygon = require('./multipolygon');\nexports.GeometryCollection = require('./geometrycollection');\n},{\"./geometry\":350,\"./geometrycollection\":351,\"./linestring\":352,\"./multilinestring\":353,\"./multipoint\":354,\"./multipolygon\":355,\"./point\":356,\"./polygon\":357,\"./types\":358}],361:[function(require,module,exports){\nmodule.exports = {\n    encode: function (value) {\n        return (value << 1) ^ (value >> 31);\n    },\n    decode: function (value) {\n        return (value >> 1) ^ (-(value & 1));\n    }\n};\n\n},{}],362:[function(require,module,exports){\nmodule.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n\n},{}]},{},[1])(1)\n});\n"
  },
  {
    "path": "libs/potree/lazylibs/sql.js/AUTHORS",
    "content": "Ophir LOJKINE <pere.jobs@gmail.com> (https://github.com/lovasoa)\n@kripken\n@hankinsoft\n@firien\n@dinedal\n@taytay\n"
  },
  {
    "path": "libs/potree/lazylibs/sql.js/LICENSE",
    "content": "MIT license\n===========\n\nCopyright (c) 2017 sql.js authors (see AUTHORS)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n\n# Some portions of the Makefile taken from:\nCopyright 2017 Ryusei Yamaguchi\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "libs/potree/lazylibs/sql.js/README.md",
    "content": "# SQLite compiled to javascript\n[![Build Status](https://travis-ci.org/kripken/sql.js.svg?branch=master)](http://travis-ci.org/kripken/sql.js) [![CDNJS version](https://img.shields.io/cdnjs/v/sql.js.svg)](https://cdnjs.com/libraries/sql.js)\n\nFor the impatients, try the demo here: http://kripken.github.io/sql.js/examples/GUI\n\n*sql.js* is a port of [SQLite](http://sqlite.org/about.html) to Webassembly, by compiling the SQLite C code with [Emscripten](http://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html). It uses a [virtual database file stored in memory](https://kripken.github.io/emscripten-site/docs/porting/files/file_systems_overview.html), and thus **doesn't persist the changes** made to the database. However, it allows you to **import** any existing sqlite file, and to **export** the created database as a [javascript typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays).\n\nThere are no C bindings or node-gyp compilation here, sql.js is a simple javascript file, that can be used like any traditional javascript library. If you are building a native application in javascript (using Electron for instance), or are working in node.js, you will likely prefer to use [a native binding of SQLite to javascript](https://www.npmjs.com/package/sqlite3).\n\nSQLite is public domain, sql.js is MIT licensed.\n\nSql.js predates WebAssembly, and thus started as an [asm.js](https://en.wikipedia.org/wiki/Asm.js) project. It still supports asm.js for backwards compatability.\n\n## Version of binaries\nSql.js was last built with:\nEmscripten version 1.38.30 (2019-04-16) [Release History](https://emscripten.org/docs/introducing_emscripten/release_notes.html)\nSqlLite version: 3.28.0 (2019-04-16) [Release History](https://www.sqlite.org/changes.html)\n\n## Documentation\nA [full documentation](http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Database.html) generated from comments inside the source code, is available.\n\n## Usage\n\n```javascript\nvar initSqlJs = require('sql-wasm.js');\n// or if you are in a browser:\n//var initSqlJs = window.initSqlJs;\n\ninitSqlJs().then(function(SQL){\n\n  // Create a database\n  var db = new SQL.Database();\n  // NOTE: You can also use new SQL.Database(data) where\n  // data is an Uint8Array representing an SQLite database file\n\n  // Execute some sql\n  sqlstr = \"CREATE TABLE hello (a int, b char);\";\n  sqlstr += \"INSERT INTO hello VALUES (0, 'hello');\"\n  sqlstr += \"INSERT INTO hello VALUES (1, 'world');\"\n  db.run(sqlstr); // Run the query without returning anything\n\n  var res = db.exec(\"SELECT * FROM hello\");\n  /*\n  [\n    {columns:['a','b'], values:[[0,'hello'],[1,'world']]}\n  ]\n  */\n\n  // Prepare an sql statement\n  var stmt = db.prepare(\"SELECT * FROM hello WHERE a=:aval AND b=:bval\");\n\n  // Bind values to the parameters and fetch the results of the query\n  var result = stmt.getAsObject({':aval' : 1, ':bval' : 'world'});\n  console.log(result); // Will print {a:1, b:'world'}\n\n  // Bind other values\n  stmt.bind([0, 'hello']);\n  while (stmt.step()) console.log(stmt.get()); // Will print [0, 'hello']\n\n  // You can also use javascript functions inside your SQL code\n  // Create the js function you need\n  function add(a, b) {return a+b;}\n  // Specifies the SQL function's name, the number of it's arguments, and the js function to use\n  db.create_function(\"add_js\", add);\n  // Run a query in which the function is used\n  db.run(\"INSERT INTO hello VALUES (add_js(7, 3), add_js('Hello ', 'world'));\"); // Inserts 10 and 'Hello world'\n\n  // free the memory used by the statement\n  stmt.free();\n  // You can not use your statement anymore once it has been freed.\n  // But not freeing your statements causes memory leaks. You don't want that.\n\n  // Export the database to an Uint8Array containing the SQLite database file\n  var binaryArray = db.export();\n});\n\n```\n\n## Demo\nThere are a few examples [available here](https://kripken.github.io/sql.js/index.html). The most full-featured is the [Sqlite Interpreter](https://kripken.github.io/sql.js/examples/GUI/index.html).\n\n## Examples\nThe test files provide up to date example of the use of the api.\n### Inside the browser\n#### Example **HTML** file:\n```html\n<meta charset=\"utf8\" />\n<html>\n  <script src='/dist/sql-wasm.js'></script>\n  <script>\n    config = {\n      locateFile: url => `/dist/${filename}` \n    }\n    // The `initSqlJs` function is globally provided by all of the main dist files if loaded in the browser.\n    // We must specify this locateFile function if we are loading a wasm file from anywhere other than the current html page's folder.\n    initSqlJs(config).then(function(SQL){\n      //Create the database\n      var db = new SQL.Database();\n      // Run a query without reading the results\n      db.run(\"CREATE TABLE test (col1, col2);\");\n      // Insert two rows: (1,111) and (2,222)\n      db.run(\"INSERT INTO test VALUES (?,?), (?,?)\", [1,111,2,222]);\n  \n      // Prepare a statement\n      var stmt = db.prepare(\"SELECT * FROM test WHERE col1 BETWEEN $start AND $end\");\n      stmt.getAsObject({$start:1, $end:1}); // {col1:1, col2:111}\n  \n      // Bind new values\n      stmt.bind({$start:1, $end:2});\n      while(stmt.step()) { //\n        var row = stmt.getAsObject();\n        console.log('Here is a row: ' + JSON.stringify(row));\n      }\n    });\n  </script>\n  <body>\n    Output is in Javscript console\n  </body>\n</html>\n```\n\n#### Creating a database from a file choosen by the user\n`SQL.Database` constructor takes an array of integer representing a database file as an optional parameter.\nThe following code uses an HTML input as the source for loading a database:\n```javascript\ndbFileElm.onchange = () => {\n  var f = dbFileElm.files[0];\n  var r = new FileReader();\n  r.onload = function() {\n    var Uints = new Uint8Array(r.result);\n    db = new SQL.Database(Uints);\n  }\n  r.readAsArrayBuffer(f);\n}\n```\nSee : http://kripken.github.io/sql.js/examples/GUI/gui.js\n\n#### Loading a database from a server\n\n```javascript\nvar xhr = new XMLHttpRequest();\n// For example: https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite\nxhr.open('GET', '/path/to/database.sqlite', true);\nxhr.responseType = 'arraybuffer';\n\nxhr.onload = e => {\n  var uInt8Array = new Uint8Array(this.response);\n  var db = new SQL.Database(uInt8Array);\n  var contents = db.exec(\"SELECT * FROM my_table\");\n  // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}]\n};\nxhr.send();\n```\nSee: https://github.com/kripken/sql.js/wiki/Load-a-database-from-the-server\n\n\n### Use from node.js\n\n`sql.js` is [hosted on npm](https://www.npmjs.org/package/sql.js). To install it, you can simply run `npm install sql.js`.\nAlternatively, you can simply download `sql-wasm.js` and `sql-wasm.wasm`, from the download link below.\n\n#### read a database from the disk:\n```javascript\nvar fs = require('fs');\nvar initSqlJs = require('sql-wasm.js');\nvar filebuffer = fs.readFileSync('test.sqlite');\n \ninitSqlJs().then(function(SQL){\n  // Load the db\n  var db = new SQL.Database(filebuffer);\n});\n\n```\n\n#### write a database to the disk\nYou need to convert the result of `db.export` to a buffer\n```javascript\nvar fs = require(\"fs\");\n// [...] (create the database)\nvar data = db.export();\nvar buffer = new Buffer(data);\nfs.writeFileSync(\"filename.sqlite\", buffer);\n```\n\nSee : https://github.com/kripken/sql.js/blob/master/test/test_node_file.js\n\n### Use as web worker\nIf you don't want to run CPU-intensive SQL queries in your main application thread,\nyou can use the *more limited* WebWorker API.\n\nYou will need to download [dist/worker.sql-wasm.js](dist/worker.sql-wasm.js) [dist/worker.sql-wasm.wasm](dist/worker.sql-wasm.wasm).\n\nExample:\n```html\n<script>\n  var worker = new Worker(\"/dist/worker.sql-wasm.js\");\n  worker.onmessage = () => {\n    console.log(\"Database opened\");\n    worker.onmessage = event => {\n      console.log(event.data); // The result of the query\n    };\n\t\n    worker.postMessage({\n      id: 2,\n      action: 'exec',\n      sql: 'SELECT * FROM test'\n    });\n  };\n\n  worker.onerror = e => console.log(\"Worker error: \", e);\n  worker.postMessage({\n    id:1,\n    action:'open',\n    buffer:buf, /*Optional. An ArrayBuffer representing an SQLite Database file*/\n  });\n</script>\n```\n\nSee [examples/GUI/gui.js](examples/GUI/gui.js) for a full working example.\n\n## Flavors/versions Targets/Downloads\n\nThis library includes both WebAssembly and asm.js versions of Sqlite. (WebAssembly is the newer, preferred way to compile to Javascript, and has superceded asm.js. It produces smaller, faster code.) Asm.js versions are included for compatibility.\n\n## Upgrading from 0.x to 1.x\n\nVersion 1.0 of sql.js must be loaded asynchronously, whereas asm.js was able to be loaded synchronously. \n\nSo in the past, you would:\n```html\n<script src='js/sql.js'></script>\n<script>\n  var db = new SQL.Database();\n  //...\n</script>\n```\nor:\n```javascript\nvar SQL = require('sql.js');\nvar db = new QL.Database();\n//...\n```\n\nVersion 1.x:\n```html\n<script src='dist/sql-wasm.js'></script>\n<script>\n  initSqlJs({ locateFile: filename => `/dist/${filename}` }).then(function(SQL){\n    var db = new SQL.Database();\n    //...\n  });\n</script>\n```\nor:\n```javascript\nvar initSqlJs = require('sql-wasm.js');\ninitSqlJs().then(function(SQL){\n  var db = new SQL.Database();\n  //...\n});\n```\n\n`NOTHING` is now a reserved word in SQLite, whereas previously it was not. This could cause errors like `Error: near \"nothing\": syntax error`\n\n### Downloading/Using: ###\nAlthough asm.js files were distributed as a single Javascript file, WebAssembly libraries are most efficiently distributed as a pair of files, the `.js`  loader and the `.wasm` file, like [dist/sql-wasm.js]([dist/sql-wasm.js]) and [dist/sql-wasm.wasm]([dist/sql-wasm.wasm]). The `.js` file is reponsible for wrapping/loading the `.wasm` file. \n\n\n\n\n## Versions of sql.js included in `dist/`\n - `sql-wasm.js` : The Web Assembly version of Sql.js. Minified and suitable for production. Use this. If you use this, you will need to include/ship `sql-wasm.wasm` as well.\n - `sql-wasm-debug.js` : The Web Assembly, Debug version of Sql.js. Larger, with assertions turned on. Useful for local development. You will need to include/ship `sql-wasm-debug.wasm` if you use this.\n - `sql-asm.js` : The older asm.js version of Sql.js. Slower and larger. Provided for compatiblity reasons.\n - `sql-asm-memory-growth.js` : Asm.js doesn't allow for memory to grow by default, because it is slower and de-optimizes. If you are using sql-asm.js and you see this error (`Cannot enlarge memory arrays`), use this file.\n - `sql-asm-debug.js` : The _Debug_ asm.js version of Sql.js. Use this for local development.\n - `worker.*` - Web Worker versions of the above libraries. More limited API. See [examples/GUI/gui.js](examples/GUI/gui.js) for a good example of this.\n\n## Compiling\n\n- Install the EMSDK, [as described here](https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html)\n- Run `npm run rebuild`\n\n"
  },
  {
    "path": "libs/potree/lazylibs/sql.js/sql-wasm.js",
    "content": "\n// We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n// https://github.com/kripken/emscripten/issues/5820\n// In addition, When you use emcc's modularization, it still expects to export a global object called `Module`,\n// which is able to be used/called before the WASM is loaded.\n// The modularization below exports a promise that loads and resolves to the actual sql.js module.\n// That way, this module can't be used before the WASM is finished loading.\n\n// We are going to define a function that a user will call to start loading initializing our Sql.js library\n// However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module\n// Instead, we want to return the previously loaded module\n\n// TODO: Make this not declare a global if used in the browser\nvar initSqlJsPromise = undefined;\n\nvar initSqlJs = function (moduleConfig) {\n\n    if (initSqlJsPromise){\n      return initSqlJsPromise;\n    }\n    // If we're here, we've never called this function before\n    initSqlJsPromise = new Promise((resolveModule, reject) => {\n\n        // We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n        // https://github.com/kripken/emscripten/issues/5820\n\n        // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add\n        // properties to it, like `preRun`, `postRun`, etc\n        // We are using that to get notified when the WASM has finished loading.\n        // Only then will we return our promise\n\n        // If they passed in a moduleConfig object, use that\n        // Otherwise, initialize Module to the empty object\n        var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {};\n\n        // EMCC only allows for a single onAbort function (not an array of functions)\n        // So if the user defined their own onAbort function, we remember it and call it\n        var originalOnAbortFunction = Module['onAbort'];\n        Module['onAbort'] = function (errorThatCausedAbort) {\n            reject(new Error(errorThatCausedAbort));\n            if (originalOnAbortFunction){\n              originalOnAbortFunction(errorThatCausedAbort);\n            }\n        };\n\n        Module['postRun'] = Module['postRun'] || [];\n        Module['postRun'].push(function () {\n            // When Emscripted calls postRun, this promise resolves with the built Module\n            resolveModule(Module);\n        });\n\n        // There is a section of code in the emcc-generated code below that looks like this:\n        // (Note that this is lowercase `module`)\n        // if (typeof module !== 'undefined') {\n        //     module['exports'] = Module;\n        // }\n        // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js!\n        // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags,\n        // but that carries with it additional unnecessary baggage/bugs we don't want either.\n        // So, we have three options:\n        // 1) We undefine `module`\n        // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later\n        // 3) We write a script to remove those lines of code as part of the Make process.\n        //\n        // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward\n        // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future.\n        // That's a nice side effect since we're handling the modularization efforts ourselves\n        module = undefined;\n        \n        // The emcc-generated code and shell-post.js code goes below,\n        // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort\nvar aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {});\nvar va=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.fb=a;this.db=b;this.nb=1;this.Eb=[]}a.prototype.bind=function(a){if(!this.fb)throw\"Statement closed\";this.reset();return Array.isArray(a)?this.lc(a):this.mc(a)};a.prototype.step=function(){var a;if(!this.fb)throw\"Statement closed\";this.nb=1;switch(a=Tb(this.fb)){case c.hc:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.sc=function(a){null==a&&(a=this.nb++);return Ub(this.fb,a)};a.prototype.tc=\nfunction(a){null==a&&(a=this.nb++);return Vb(this.fb,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.nb++);var c=Wb(this.fb,a);var d=Xb(this.fb,a);var e=new Uint8Array(c);for(a=b=0;0<=c?b<c:b>c;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=ib(this.fb);0<=d?b<d:b>d;a=0<=d?++b:--b)switch(Yb(this.fb,a)){case c.fc:case c.FLOAT:e.push(this.sc(a));break;case c.ic:e.push(this.tc(a));break;case c.Zb:e.push(this.getBlob(a));\nbreak;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=ib(this.fb);0<=b?a<b:a>b;d=0<=b?++a:--a)c.push(Zb(this.fb,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b<c;a=++b){var Sb=e[a];g[Sb]=d[a]}return g};a.prototype.run=function(a){null!=a&&this.bind(a);this.step();return this.reset()};a.prototype.pc=function(a,b){var c;null==b&&(b=this.nb++);a=ba(a);this.Eb.push(c=\nea(a));this.db.handleError(ca(this.fb,b,c,a.length-1,0))};a.prototype.kc=function(a,b){var c;null==b&&(b=this.nb++);this.Eb.push(c=ea(a));this.db.handleError(Ia(this.fb,b,c,a.length,0))};a.prototype.oc=function(a,b){null==b&&(b=this.nb++);this.db.handleError((a===(a|0)?$b:ac)(this.fb,b,a))};a.prototype.nc=function(a){null==a&&(a=this.nb++);Ia(this.fb,a,0,0,0)};a.prototype.Qb=function(a,b){null==b&&(b=this.nb++);switch(typeof a){case \"string\":this.pc(a,b);break;case \"number\":case \"boolean\":this.oc(a+\n0,b);break;case \"object\":if(null===a)this.nc(b);else if(null!=a.length)this.kc(a,b);else throw\"Wrong API use : tried to bind a value of an unknown type (\"+a+\").\";}};a.prototype.mc=function(a){var b;for(b in a){var c=a[b];var d=bc(this.fb,b);0!==d&&this.Qb(c,d)}return!0};a.prototype.lc=function(a){var b,c;var d=b=0;for(c=a.length;b<c;d=++b){var e=a[d];this.Qb(e,d+1)}return!0};a.prototype.reset=function(){this.freemem();return cc(this.fb)===c.xb&&dc(this.fb)===c.xb};a.prototype.freemem=function(){for(var a;a=\nthis.Eb.pop();)ha(a);return null};a.prototype.free=function(){this.freemem();var a=ec(this.fb)===c.xb;delete this.db.Bb[this.fb];this.fb=da;return a};return a}();var e=function(){function a(a){this.filename=\"dbfile_\"+(4294967295*Math.random()>>>0);if(null!=a){var c=this.filename,d=c?n(\"/\",c):\"/\";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if(\"string\"===typeof a){for(var e=Array(a.length),k=0,m=a.length;k<m;++k)e[k]=a.charCodeAt(k);a=e}ka(d,c|146);e=p(d,\"w\");la(e,a,0,a.length,0,void 0);\nma(e);ka(d,c)}}this.handleError(g(this.filename,b));this.db=q(b,\"i32\");fc(this.db);this.Bb={}}a.prototype.run=function(a,c){if(!this.db)throw\"Database closed\";c?(a=this.prepare(a,c),a.step(),a.free()):this.handleError(m(this.db,a,0,0,b));return this};a.prototype.exec=function(a){if(!this.db)throw\"Database closed\";var c=na();var e=oa(a)+1;var g=h(e);r(a,l,g,e);a=g;e=h(4);for(g=[];q(a,\"i8\")!==da;){pa(b);pa(e);this.handleError(fa(this.db,a,-1,b,e));var k=q(b,\"i32\");a=q(e,\"i32\");if(k!==da){var m=new d(k,\nthis);for(k=null;m.step();)null===k&&(k={columns:m.getColumnNames(),values:[]},g.push(k)),k.values.push(m.get());m.free()}}qa(c);return g};a.prototype.each=function(a,b,c,d){\"function\"===typeof b&&(d=c,c=b,b=void 0);for(a=this.prepare(a,b);a.step();)c(a.getAsObject());a.free();if(\"function\"===typeof d)return d()};a.prototype.prepare=function(a,c){pa(b);this.handleError(z(this.db,a,-1,b,da));a=q(b,\"i32\");if(a===da)throw\"Nothing to prepare\";var e=new d(a,this);null!=c&&e.bind(c);return this.Bb[a]=e};\na.prototype[\"export\"]=function(){var a;var c=this.Bb;for(e in c){var d=c[e];d.free()}this.handleError(k(this.db));d=this.filename;var e=e={encoding:\"binary\"};e.flags=e.flags||\"r\";e.encoding=e.encoding||\"binary\";if(\"utf8\"!==e.encoding&&\"binary\"!==e.encoding)throw Error('Invalid encoding type \"'+e.encoding+'\"');c=p(d,e.flags);d=ra(d).size;var m=new Uint8Array(d);sa(c,m,0,d,0);\"utf8\"===e.encoding?a=t(m,0):\"binary\"===e.encoding&&(a=m);ma(c);this.handleError(g(this.filename,b));this.db=q(b,\"i32\");return a};\na.prototype.close=function(){var a;var b=this.Bb;for(a in b){var c=b[a];c.free()}this.handleError(k(this.db));ta(\"/\"+this.filename);return this.db=null};a.prototype.handleError=function(a){if(a===c.xb)return null;a=hc(this.db);throw Error(a);};a.prototype.getRowsModified=function(){return y(this.db)};a.prototype.create_function=function(a,b){var d=ua(function(a,c,d){var e,g;var k=[];for(e=g=0;0<=c?g<c:g>c;e=0<=c?++g:--g){var m=q(d+4*e,\"i32\");var z=jc(m);e=function(){switch(!1){case 1!==z:return kc;\ncase 2!==z:return lc;case 3!==z:return mc;case 4!==z:return function(a){var b,c;var d=nc(a);var e=oc(a);a=new Uint8Array(d);for(b=c=0;0<=d?c<d:c>d;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(m);k.push(e)}if(c=b.apply(null,k))switch(typeof c){case \"number\":return pc(a,c);case \"string\":return qc(a,c,-1,-1)}else return rc(a)});this.handleError(sc(this.db,a,b.length,c.jc,0,d,0,0,0));return this};return a}();var g=f.cwrap(\"sqlite3_open\",\"number\",[\"string\",\"number\"]);\nvar k=f.cwrap(\"sqlite3_close_v2\",\"number\",[\"number\"]);var m=f.cwrap(\"sqlite3_exec\",\"number\",[\"number\",\"string\",\"number\",\"number\",\"number\"]);f.cwrap(\"sqlite3_free\",\"\",[\"number\"]);var y=f.cwrap(\"sqlite3_changes\",\"number\",[\"number\"]);var z=f.cwrap(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"string\",\"number\",\"number\",\"number\"]);var fa=f.cwrap(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var ca=f.cwrap(\"sqlite3_bind_text\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);\nvar Ia=f.cwrap(\"sqlite3_bind_blob\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var ac=f.cwrap(\"sqlite3_bind_double\",\"number\",[\"number\",\"number\",\"number\"]);var $b=f.cwrap(\"sqlite3_bind_int\",\"number\",[\"number\",\"number\",\"number\"]);var bc=f.cwrap(\"sqlite3_bind_parameter_index\",\"number\",[\"number\",\"string\"]);var Tb=f.cwrap(\"sqlite3_step\",\"number\",[\"number\"]);var hc=f.cwrap(\"sqlite3_errmsg\",\"string\",[\"number\"]);var ib=f.cwrap(\"sqlite3_data_count\",\"number\",[\"number\"]);var Ub=f.cwrap(\"sqlite3_column_double\",\n\"number\",[\"number\",\"number\"]);var Vb=f.cwrap(\"sqlite3_column_text\",\"string\",[\"number\",\"number\"]);var Xb=f.cwrap(\"sqlite3_column_blob\",\"number\",[\"number\",\"number\"]);var Wb=f.cwrap(\"sqlite3_column_bytes\",\"number\",[\"number\",\"number\"]);var Yb=f.cwrap(\"sqlite3_column_type\",\"number\",[\"number\",\"number\"]);var Zb=f.cwrap(\"sqlite3_column_name\",\"string\",[\"number\",\"number\"]);var dc=f.cwrap(\"sqlite3_reset\",\"number\",[\"number\"]);var cc=f.cwrap(\"sqlite3_clear_bindings\",\"number\",[\"number\"]);var ec=f.cwrap(\"sqlite3_finalize\",\n\"number\",[\"number\"]);var sc=f.cwrap(\"sqlite3_create_function_v2\",\"number\",\"number string number number number number number number number\".split(\" \"));var jc=f.cwrap(\"sqlite3_value_type\",\"number\",[\"number\"]);var nc=f.cwrap(\"sqlite3_value_bytes\",\"number\",[\"number\"]);var mc=f.cwrap(\"sqlite3_value_text\",\"string\",[\"number\"]);var kc=f.cwrap(\"sqlite3_value_int\",\"number\",[\"number\"]);var oc=f.cwrap(\"sqlite3_value_blob\",\"number\",[\"number\"]);var lc=f.cwrap(\"sqlite3_value_double\",\"number\",[\"number\"]);var pc=\nf.cwrap(\"sqlite3_result_double\",\"\",[\"number\",\"number\"]);var rc=f.cwrap(\"sqlite3_result_null\",\"\",[\"number\"]);var qc=f.cwrap(\"sqlite3_result_text\",\"\",[\"number\",\"string\",\"number\",\"number\"]);var fc=f.cwrap(\"RegisterExtensionFunctions\",\"number\",[\"number\"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var da=0;c.xb=0;c.we=1;c.Pe=2;c.Ze=3;c.Cc=4;c.Ec=5;c.Se=6;c.NOMEM=7;c.bf=8;c.Qe=9;c.Re=10;c.Hc=11;c.NOTFOUND=12;c.Oe=13;c.Fc=14;c.$e=15;c.EMPTY=16;c.cf=17;c.df=18;c.Gc=19;c.Te=20;c.Ue=21;c.Ve=\n22;c.Dc=23;c.Ne=24;c.af=25;c.We=26;c.Xe=27;c.ef=28;c.hc=100;c.DONE=101;c.fc=1;c.FLOAT=2;c.ic=3;c.Zb=4;c.Ye=5;c.jc=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(va);var wa={},u;for(u in f)f.hasOwnProperty(u)&&(wa[u]=f[u]);f.arguments=[];f.thisProgram=\"./this.program\";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var v=!1,w=!1,x=!1,xa=!1;v=\"object\"===typeof window;w=\"function\"===typeof importScripts;x=\"object\"===typeof process&&\"function\"===typeof require&&!v&&!w;xa=!v&&!x&&!w;var A=\"\";\nif(x){A=__dirname+\"/\";var ya,za;f.read=function(a,b){ya||(ya=require(\"fs\"));za||(za=require(\"path\"));a=za.normalize(a);a=ya.readFileSync(a);return b?a:a.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1<process.argv.length&&(f.thisProgram=process.argv[1].replace(/\\\\/g,\"/\"));f.arguments=process.argv.slice(2);\"undefined\"!==typeof module&&(module.exports=f);process.on(\"unhandledRejection\",B);f.quit=function(a){process.exit(a)};f.inspect=\nfunction(){return\"[Emscripten Module object]\"}}else if(xa)\"undefined\"!=typeof read&&(f.read=function(a){return read(a)}),f.readBinary=function(a){if(\"function\"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,\"binary\");assert(\"object\"===typeof a);return a},\"undefined\"!=typeof scriptArgs?f.arguments=scriptArgs:\"undefined\"!=typeof arguments&&(f.arguments=arguments),\"function\"===typeof quit&&(f.quit=function(a){quit(a)});else if(v||w)w?A=self.location.href:document.currentScript&&(A=\ndocument.currentScript.src),A=0!==A.indexOf(\"blob:\")?A.substr(0,A.lastIndexOf(\"/\")+1):\"\",f.read=function(a){var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.send(null);return b.responseText},w&&(f.readBinary=function(a){var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.responseType=\"arraybuffer\";b.send(null);return new Uint8Array(b.response)}),f.readAsync=function(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a,!0);d.responseType=\"arraybuffer\";d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):\nc()};d.onerror=c;d.send(null)},f.setWindowTitle=function(a){document.title=a};var Aa=f.print||(\"undefined\"!==typeof console?console.log.bind(console):\"undefined\"!==typeof print?print:null),C=f.printErr||(\"undefined\"!==typeof printErr?printErr:\"undefined\"!==typeof console&&console.warn.bind(console)||Aa);for(u in wa)wa.hasOwnProperty(u)&&(f[u]=wa[u]);wa=void 0;function Ba(a){var b=D[Ca>>2];a=b+a+15&-16;if(a<=Da())D[Ca>>2]=a;else if(!Ea(a))return 0;return b}\nvar Fa={\"f64-rem\":function(a,b){return a%b},\"debugger\":function(){debugger}},Ga=1,E=Array(64);function ua(a){for(var b=0;64>b;b++)if(!E[b])return E[b]=a,Ga+b;throw\"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.\";}\"object\"!==typeof WebAssembly&&C(\"no native wasm support detected\");\nfunction q(a,b){b=b||\"i8\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":return l[a>>0];case \"i8\":return l[a>>0];case \"i16\":return Ha[a>>1];case \"i32\":return D[a>>2];case \"i64\":return D[a>>2];case \"float\":return Ja[a>>2];case \"double\":return Ka[a>>3];default:B(\"invalid type for getValue: \"+b)}return null}var La,Ma=!1;function assert(a,b){a||B(\"Assertion failed: \"+b)}function Na(a){var b=f[\"_\"+a];assert(b,\"Cannot call unknown function \"+a+\", make sure it is exported\");return b}\nfunction Oa(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,F,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Na(a),k=[];a=0;if(d)for(var m=0;m<d.length;m++){var y=e[c[m]];y?(0===a&&(a=na()),k[m]=y(d[m])):k[m]=d[m]}c=g.apply(null,k);c=function(a){return\"string\"===b?G(a):\"boolean\"===b?!!a:a}(c);0!==a&&qa(a);return c}\nfunction pa(a){var b=\"i32\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":l[a>>0]=0;break;case \"i8\":l[a>>0]=0;break;case \"i16\":Ha[a>>1]=0;break;case \"i32\":D[a>>2]=0;break;case \"i64\":aa=[0,1<=+Pa(0)?~~+Qa(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case \"float\":Ja[a>>2]=0;break;case \"double\":Ka[a>>3]=0;break;default:B(\"invalid type for setValue: \"+b)}}var Ra=0,Sa=3;\nfunction ea(a){var b=Ra;if(\"number\"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;b=b==Sa?e:[Ta,h,Ba][b](Math.max(d,1));if(c){var e=b;assert(0==(b&3));for(a=b+(d&-4);e<a;e+=4)D[e>>2]=0;for(a=b+d;e<a;)l[e++>>0]=0;return b}a.subarray||a.slice?F.set(a,b):F.set(new Uint8Array(a),b);return b}var Ua=\"undefined\"!==typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;\nfunction t(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.subarray&&Ua)return Ua.decode(a.subarray(b,c));for(d=\"\";b<c;){var e=a[b++];if(e&128){var g=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|g);else{var k=a[b++]&63;e=224==(e&240)?(e&15)<<12|g<<6|k:(e&7)<<18|g<<12|k<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function G(a){return a?t(F,a,void 0):\"\"}\nfunction r(a,b,c,d){if(!(0<d))return 0;var e=c;d=c+d-1;for(var g=0;g<a.length;++g){var k=a.charCodeAt(g);if(55296<=k&&57343>=k){var m=a.charCodeAt(++g);k=65536+((k&1023)<<10)|m&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e}\nfunction oa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}\"undefined\"!==typeof TextDecoder&&new TextDecoder(\"utf-16le\");function Va(a){return a.replace(/__Z[\\w\\d_]+/g,function(a){return a===a?a:a+\" [\"+a+\"]\"})}function Wa(a){0<a%65536&&(a+=65536-a%65536);return a}var buffer,l,F,Ha,D,Ja,Ka;\nfunction Xa(){f.HEAP8=l=new Int8Array(buffer);f.HEAP16=Ha=new Int16Array(buffer);f.HEAP32=D=new Int32Array(buffer);f.HEAPU8=F=new Uint8Array(buffer);f.HEAPU16=new Uint16Array(buffer);f.HEAPU32=new Uint32Array(buffer);f.HEAPF32=Ja=new Float32Array(buffer);f.HEAPF64=Ka=new Float64Array(buffer)}var Ca=60128,Ya=f.TOTAL_MEMORY||16777216;5242880>Ya&&C(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+Ya+\"! (TOTAL_STACK=5242880)\");\nf.buffer?buffer=f.buffer:\"object\"===typeof WebAssembly&&\"function\"===typeof WebAssembly.Memory?(La=new WebAssembly.Memory({initial:Ya/65536}),buffer=La.buffer):buffer=new ArrayBuffer(Ya);Xa();D[Ca>>2]=5303264;function Za(a){for(;0<a.length;){var b=a.shift();if(\"function\"==typeof b)b();else{var c=b.rc;\"number\"===typeof c?void 0===b.Fb?f.dynCall_v(c):f.dynCall_vi(c,b.Fb):c(void 0===b.Fb?null:b.Fb)}}}var $a=[],ab=[],bb=[],cb=[],db=!1;function eb(){var a=f.preRun.shift();$a.unshift(a)}\nvar Pa=Math.abs,Qa=Math.ceil,H=0,fb=null,gb=null;f.preloadedImages={};f.preloadedAudios={};function hb(){var a=I;return String.prototype.startsWith?a.startsWith(\"data:application/octet-stream;base64,\"):0===a.indexOf(\"data:application/octet-stream;base64,\")}var I=\"sql-wasm.wasm\";if(!hb()){var jb=I;I=f.locateFile?f.locateFile(jb,A):A+jb}\nfunction kb(){try{if(f.wasmBinary)return new Uint8Array(f.wasmBinary);if(f.readBinary)return f.readBinary(I);throw\"both async and sync fetching of the wasm failed\";}catch(a){B(a)}}function lb(){return f.wasmBinary||!v&&!w||\"function\"!==typeof fetch?new Promise(function(a){a(kb())}):fetch(I,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+I+\"'\";return a.arrayBuffer()}).catch(function(){return kb()})}\nfunction mb(a){function b(a){f.asm=a.exports;H--;f.monitorRunDependencies&&f.monitorRunDependencies(H);0==H&&(null!==fb&&(clearInterval(fb),fb=null),gb&&(a=gb,gb=null,a()))}function c(a){b(a.instance)}function d(a){lb().then(function(a){return WebAssembly.instantiate(a,e)}).then(a,function(a){C(\"failed to asynchronously prepare wasm: \"+a);B(a)})}var e={env:a,global:{NaN:NaN,Infinity:Infinity},\"global.Math\":Math,asm2wasm:Fa};H++;f.monitorRunDependencies&&f.monitorRunDependencies(H);if(f.instantiateWasm)try{return f.instantiateWasm(e,\nb)}catch(g){return C(\"Module.instantiateWasm callback failed with error: \"+g),!1}f.wasmBinary||\"function\"!==typeof WebAssembly.instantiateStreaming||hb()||\"function\"!==typeof fetch?d(c):WebAssembly.instantiateStreaming(fetch(I,{credentials:\"same-origin\"}),e).then(c,function(a){C(\"wasm streaming compile failed: \"+a);C(\"falling back to ArrayBuffer instantiation\");d(c)});return{}}\nf.asm=function(a,b){b.memory=La;b.table=new WebAssembly.Table({initial:2560,maximum:2560,element:\"anyfunc\"});b.__memory_base=1024;b.__table_base=0;return mb(b)};ab.push({rc:function(){nb()}});var J={};\nfunction ob(a){if(ob.rb){var b=D[a>>2];var c=D[b>>2]}else ob.rb=!0,J.USER=J.LOGNAME=\"web_user\",J.PATH=\"/\",J.PWD=\"/\",J.HOME=\"/home/web_user\",J.LANG=\"C.UTF-8\",J._=f.thisProgram,c=db?Ta(1024):Ba(1024),b=db?Ta(256):Ba(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in J)if(\"string\"===typeof J[e]){var g=e+\"=\"+J[e];a.push(g);d+=g.length}if(1024<d)throw Error(\"Environment size exceeded TOTAL_ENV_SIZE!\");for(e=0;e<a.length;e++){d=g=a[e];for(var k=c,m=0;m<d.length;++m)l[k++>>0]=d.charCodeAt(m);l[k>>0]=0;D[b+\n4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function pb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function qb(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];\".\"===e?a.splice(d,1):\"..\"===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift(\"..\");return a}function rb(a){var b=\"/\"===a.charAt(0),c=\"/\"===a.substr(-1);(a=qb(a.split(\"/\").filter(function(a){return!!a}),!b).join(\"/\"))||b||(a=\".\");a&&c&&(a+=\"/\");return(b?\"/\":\"\")+a}\nfunction sb(a){var b=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return\".\";b&&(b=b.substr(0,b.length-1));return a+b}function tb(a){if(\"/\"===a)return\"/\";var b=a.lastIndexOf(\"/\");return-1===b?a:a.substr(b+1)}function ub(){var a=Array.prototype.slice.call(arguments,0);return rb(a.join(\"/\"))}function n(a,b){return rb(a+\"/\"+b)}\nfunction vb(){for(var a=\"\",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:\"/\";if(\"string\"!==typeof b)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!b)return\"\";a=b+\"/\"+a;b=\"/\"===b.charAt(0)}a=qb(a.split(\"/\").filter(function(a){return!!a}),!b).join(\"/\");return(b?\"/\":\"\")+a||\".\"}var wb=[];function xb(a,b){wb[a]={input:[],output:[],ub:b};yb(a,zb)}\nvar zb={open:function(a){var b=wb[a.node.rdev];if(!b)throw new K(L.Cb);a.tty=b;a.seekable=!1},close:function(a){a.tty.ub.flush(a.tty)},flush:function(a){a.tty.ub.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.ub.Xb)throw new K(L.Ob);for(var e=0,g=0;g<d;g++){try{var k=a.tty.ub.Xb(a.tty)}catch(m){throw new K(L.Lb);}if(void 0===k&&0===e)throw new K(L.ac);if(null===k||void 0===k)break;e++;b[c+g]=k}e&&(a.node.timestamp=Date.now());return e},write:function(a,b,c,d){if(!a.tty||!a.tty.ub.Ib)throw new K(L.Ob);\ntry{for(var e=0;e<d;e++)a.tty.ub.Ib(a.tty,b[c+e])}catch(g){throw new K(L.Lb);}d&&(a.node.timestamp=Date.now());return e}},Ab={Xb:function(a){if(!a.input.length){var b=null;if(x){var c=new Buffer(256),d=0,e=process.stdin.fd;if(\"win32\"!=process.platform){var g=!1;try{e=fs.openSync(\"/dev/stdin\",\"r\"),g=!0}catch(k){}}try{d=fs.readSync(e,c,0,256,null)}catch(k){if(-1!=k.toString().indexOf(\"EOF\"))d=0;else throw k;}g&&fs.closeSync(e);0<d?b=c.slice(0,d).toString(\"utf-8\"):b=null}else\"undefined\"!=typeof window&&\n\"function\"==typeof window.prompt?(b=window.prompt(\"Input: \"),null!==b&&(b+=\"\\n\")):\"function\"==typeof readline&&(b=readline(),null!==b&&(b+=\"\\n\"));if(!b)return null;a.input=ba(b,!0)}return a.input.shift()},Ib:function(a,b){null===b||10===b?(Aa(t(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(Aa(t(a.output,0)),a.output=[])}},Bb={Ib:function(a,b){null===b||10===b?(C(t(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&\n(C(t(a.output,0)),a.output=[])}},M={mb:null,jb:function(){return M.createNode(null,\"/\",16895,0)},createNode:function(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new K(L.dc);M.mb||(M.mb={dir:{node:{lb:M.ab.lb,hb:M.ab.hb,lookup:M.ab.lookup,vb:M.ab.vb,rename:M.ab.rename,unlink:M.ab.unlink,rmdir:M.ab.rmdir,readdir:M.ab.readdir,symlink:M.ab.symlink},stream:{ob:M.cb.ob}},file:{node:{lb:M.ab.lb,hb:M.ab.hb},stream:{ob:M.cb.ob,read:M.cb.read,write:M.cb.write,Pb:M.cb.Pb,zb:M.cb.zb,Ab:M.cb.Ab}},link:{node:{lb:M.ab.lb,\nhb:M.ab.hb,readlink:M.ab.readlink},stream:{}},Sb:{node:{lb:M.ab.lb,hb:M.ab.hb},stream:Cb}});c=Db(a,b,c,d);N(c.mode)?(c.ab=M.mb.dir.node,c.cb=M.mb.dir.stream,c.bb={}):32768===(c.mode&61440)?(c.ab=M.mb.file.node,c.cb=M.mb.file.stream,c.gb=0,c.bb=null):40960===(c.mode&61440)?(c.ab=M.mb.link.node,c.cb=M.mb.link.stream):8192===(c.mode&61440)&&(c.ab=M.mb.Sb.node,c.cb=M.mb.Sb.stream);c.timestamp=Date.now();a&&(a.bb[b]=c);return c},ff:function(a){if(a.bb&&a.bb.subarray){for(var b=[],c=0;c<a.gb;++c)b.push(a.bb[c]);\nreturn b}return a.bb},gf:function(a){return a.bb?a.bb.subarray?a.bb.subarray(0,a.gb):new Uint8Array(a.bb):new Uint8Array},Tb:function(a,b){var c=a.bb?a.bb.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.bb,a.bb=new Uint8Array(b),0<a.gb&&a.bb.set(c.subarray(0,a.gb),0))},yc:function(a,b){if(a.gb!=b)if(0==b)a.bb=null,a.gb=0;else{if(!a.bb||a.bb.subarray){var c=a.bb;a.bb=new Uint8Array(new ArrayBuffer(b));c&&a.bb.set(c.subarray(0,Math.min(b,a.gb)))}else if(a.bb||(a.bb=\n[]),a.bb.length>b)a.bb.length=b;else for(;a.bb.length<b;)a.bb.push(0);a.gb=b}},ab:{lb:function(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;N(a.mode)?b.size=4096:32768===(a.mode&61440)?b.size=a.gb:40960===(a.mode&61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.pb=4096;b.blocks=Math.ceil(b.size/b.pb);return b},hb:function(a,b){void 0!==b.mode&&(a.mode=\nb.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&M.yc(a,b.size)},lookup:function(){throw Eb[L.bc];},vb:function(a,b,c,d){return M.createNode(a,b,c,d)},rename:function(a,b,c){if(N(a.mode)){try{var d=O(b,c)}catch(g){}if(d)for(var e in d.bb)throw new K(L.Nb);}delete a.parent.bb[a.name];a.name=c;b.bb[c]=a;a.parent=b},unlink:function(a,b){delete a.bb[b]},rmdir:function(a,b){var c=O(a,b),d;for(d in c.bb)throw new K(L.Nb);delete a.bb[b]},readdir:function(a){var b=[\".\",\"..\"],c;for(c in a.bb)a.bb.hasOwnProperty(c)&&\nb.push(c);return b},symlink:function(a,b,c){a=M.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(40960!==(a.mode&61440))throw new K(L.ib);return a.link}},cb:{read:function(a,b,c,d,e){var g=a.node.bb;if(e>=a.node.gb)return 0;a=Math.min(a.node.gb-e,d);if(8<a&&g.subarray)b.set(g.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=g[e+d];return a},write:function(a,b,c,d,e,g){g=!1;if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.bb||a.bb.subarray)){if(g)return a.bb=b.subarray(c,\nc+d),a.gb=d;if(0===a.gb&&0===e)return a.bb=new Uint8Array(b.subarray(c,c+d)),a.gb=d;if(e+d<=a.gb)return a.bb.set(b.subarray(c,c+d),e),d}M.Tb(a,e+d);if(a.bb.subarray&&b.subarray)a.bb.set(b.subarray(c,c+d),e);else for(g=0;g<d;g++)a.bb[e+g]=b[c+g];a.gb=Math.max(a.gb,e+d);return d},ob:function(a,b,c){1===c?b+=a.position:2===c&&32768===(a.node.mode&61440)&&(b+=a.node.gb);if(0>b)throw new K(L.ib);return b},Pb:function(a,b,c){M.Tb(a.node,b+c);a.node.gb=Math.max(a.node.gb,b+c)},zb:function(a,b,c,d,e,g,k){if(32768!==\n(a.node.mode&61440))throw new K(L.Cb);c=a.node.bb;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0<e||e+d<a.node.gb)c.subarray?c=c.subarray(e,e+d):c=Array.prototype.slice.call(c,e,e+d);a=!0;d=Ta(d);if(!d)throw new K(L.Mb);b.set(c,d)}else a=!1,d=c.byteOffset;return{xc:d,Db:a}},Ab:function(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new K(L.Cb);if(e&2)return 0;M.cb.write(a,b,0,d,c,!1);return 0}}},P={yb:!1,Ac:function(){P.yb=!!process.platform.match(/^win/);var a=process.binding(\"constants\");a.fs&&\n(a=a.fs);P.Ub={1024:a.O_APPEND,64:a.O_CREAT,128:a.O_EXCL,0:a.O_RDONLY,2:a.O_RDWR,4096:a.O_SYNC,512:a.O_TRUNC,1:a.O_WRONLY}},Rb:function(a){return Buffer.rb?Buffer.from(a):new Buffer(a)},jb:function(a){assert(x);return P.createNode(null,\"/\",P.Wb(a.Hb.root),0)},createNode:function(a,b,c){if(!N(c)&&32768!==(c&61440)&&40960!==(c&61440))throw new K(L.ib);a=Db(a,b,c);a.ab=P.ab;a.cb=P.cb;return a},Wb:function(a){try{var b=fs.lstatSync(a);P.yb&&(b.mode=b.mode|(b.mode&292)>>2)}catch(c){if(!c.code)throw c;\nthrow new K(L[c.code]);}return b.mode},kb:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.jb.Hb.root);b.reverse();return ub.apply(null,b)},qc:function(a){a&=-2656257;var b=0,c;for(c in P.Ub)a&c&&(b|=P.Ub[c],a^=c);if(a)throw new K(L.ib);return b},ab:{lb:function(a){a=P.kb(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}P.yb&&!b.pb&&(b.pb=4096);P.yb&&!b.blocks&&(b.blocks=(b.size+b.pb-1)/b.pb|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink,\nuid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,pb:b.pb,blocks:b.blocks}},hb:function(a,b){var c=P.kb(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},lookup:function(a,b){var c=n(P.kb(a),b);c=P.Wb(c);return P.createNode(a,b,c)},vb:function(a,b,c,d){a=P.createNode(a,b,c,d);b=P.kb(a);try{N(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,\"\",{mode:a.mode})}catch(e){if(!e.code)throw e;\nthrow new K(L[e.code]);}return a},rename:function(a,b,c){a=P.kb(a);b=n(P.kb(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},unlink:function(a,b){a=n(P.kb(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},rmdir:function(a,b){a=n(P.kb(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},readdir:function(a){a=P.kb(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new K(L[b.code]);}},symlink:function(a,\nb,c){a=n(P.kb(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},readlink:function(a){var b=P.kb(a);try{return b=fs.readlinkSync(b),b=Fb.relative(Fb.resolve(a.jb.Hb.root),b)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}}},cb:{open:function(a){var b=P.kb(a.node);try{32768===(a.node.mode&61440)&&(a.wb=fs.openSync(b,P.qc(a.flags)))}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.wb&&fs.closeSync(a.wb)}catch(b){if(!b.code)throw b;\nthrow new K(L[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},ob:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.wb).size}catch(d){throw new K(L[d.code]);}if(0>b)throw new K(L.ib);return b}}},Gb=null,Hb={},Q=[],Ib=1,R=null,Jb=!0,S={},K=null,\nEb={};function T(a,b){a=vb(\"/\",a);b=b||{};if(!a)return{path:\"\",node:null};var c={Vb:!0,Jb:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.Jb)throw new K(40);a=qb(a.split(\"/\").filter(function(a){return!!a}),!1);var e=Gb;c=\"/\";for(d=0;d<a.length;d++){var g=d===a.length-1;if(g&&b.parent)break;e=O(e,a[d]);c=n(c,a[d]);e.sb&&(!g||g&&b.Vb)&&(e=e.sb.root);if(!g||b.qb)for(g=0;40960===(e.mode&61440);)if(e=Kb(c),c=vb(sb(c),e),e=T(c,{Jb:b.Jb}).node,40<g++)throw new K(40);}return{path:c,node:e}}\nfunction Lb(a){for(var b;;){if(a===a.parent)return a=a.jb.Yb,b?\"/\"!==a[a.length-1]?a+\"/\"+b:a+b:a;b=b?a.name+\"/\"+b:a.name;a=a.parent}}function Mb(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%R.length}function Nb(a){var b=Mb(a.parent.id,a.name);a.tb=R[b];R[b]=a}function Ob(a){var b=Mb(a.parent.id,a.name);if(R[b]===a)R[b]=a.tb;else for(b=R[b];b;){if(b.tb===a){b.tb=a.tb;break}b=b.tb}}\nfunction O(a,b){var c;if(c=(c=Pb(a,\"x\"))?c:a.ab.lookup?0:13)throw new K(c,a);for(c=R[Mb(a.id,b)];c;c=c.tb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ab.lookup(a,b)}\nfunction Db(a,b,c,d){Qb||(Qb=function(a,b,c,d){a||(a=this);this.parent=a;this.jb=a.jb;this.sb=null;this.id=Ib++;this.name=b;this.mode=c;this.ab={};this.cb={};this.rdev=d},Qb.prototype={},Object.defineProperties(Qb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Qb(a,b,c,d);Nb(a);return a}\nfunction N(a){return 16384===(a&61440)}var Rb={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};function ic(a){var b=[\"r\",\"w\",\"rw\"][a&3];a&512&&(b+=\"w\");return b}function Pb(a,b){if(Jb)return 0;if(-1===b.indexOf(\"r\")||a.mode&292){if(-1!==b.indexOf(\"w\")&&!(a.mode&146)||-1!==b.indexOf(\"x\")&&!(a.mode&73))return 13}else return 13;return 0}function tc(a,b){try{return O(a,b),17}catch(c){}return Pb(a,\"wx\")}\nfunction uc(a,b,c){try{var d=O(a,b)}catch(e){return e.eb}if(a=Pb(a,\"wx\"))return a;if(c){if(!N(d.mode))return 20;if(d===d.parent||\"/\"===Lb(d))return 16}else if(N(d.mode))return 21;return 0}function vc(a){var b=4096;for(a=a||0;a<=b;a++)if(!Q[a])return a;throw new K(24);}\nfunction wc(a,b){xc||(xc=function(){},xc.prototype={},Object.defineProperties(xc.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new xc,d;for(d in a)c[d]=a[d];a=c;b=vc(b);a.fd=b;return Q[b]=a}var Cb={open:function(a){a.cb=Hb[a.node.rdev].cb;a.cb.open&&a.cb.open(a)},ob:function(){throw new K(29);}};function yb(a,b){Hb[a]={cb:b}}\nfunction yc(a,b){var c=\"/\"===b,d=!b;if(c&&Gb)throw new K(16);if(!c&&!d){var e=T(b,{Vb:!1});b=e.path;e=e.node;if(e.sb)throw new K(16);if(!N(e.mode))throw new K(20);}b={type:a,Hb:{},Yb:b,wc:[]};a=a.jb(b);a.jb=b;b.root=a;c?Gb=a:e&&(e.sb=b,e.jb&&e.jb.wc.push(b))}function ja(a,b,c){var d=T(a,{parent:!0}).node;a=tb(a);if(!a||\".\"===a||\"..\"===a)throw new K(22);var e=tc(d,a);if(e)throw new K(e);if(!d.ab.vb)throw new K(1);return d.ab.vb(d,a,b,c)}function U(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)}\nfunction zc(a,b,c){\"undefined\"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function Ac(a,b){if(!vb(a))throw new K(2);var c=T(b,{parent:!0}).node;if(!c)throw new K(2);b=tb(b);var d=tc(c,b);if(d)throw new K(d);if(!c.ab.symlink)throw new K(1);c.ab.symlink(c,b,a)}\nfunction ta(a){var b=T(a,{parent:!0}).node,c=tb(a),d=O(b,c),e=uc(b,c,!1);if(e)throw new K(e);if(!b.ab.unlink)throw new K(1);if(d.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(a)}catch(g){console.log(\"FS.trackingDelegate['willDeletePath']('\"+a+\"') threw an exception: \"+g.message)}b.ab.unlink(b,c);Ob(d);try{if(S.onDeletePath)S.onDeletePath(a)}catch(g){console.log(\"FS.trackingDelegate['onDeletePath']('\"+a+\"') threw an exception: \"+g.message)}}\nfunction Kb(a){a=T(a).node;if(!a)throw new K(2);if(!a.ab.readlink)throw new K(22);return vb(Lb(a.parent),a.ab.readlink(a))}function ra(a,b){a=T(a,{qb:!b}).node;if(!a)throw new K(2);if(!a.ab.lb)throw new K(1);return a.ab.lb(a)}function Bc(a){return ra(a,!0)}function ka(a,b){var c;\"string\"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);c.ab.hb(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})}\nfunction Cc(a){var b;\"string\"===typeof a?b=T(a,{qb:!0}).node:b=a;if(!b.ab.hb)throw new K(1);b.ab.hb(b,{timestamp:Date.now()})}function Dc(a,b){if(0>b)throw new K(22);var c;\"string\"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);if(N(c.mode))throw new K(21);if(32768!==(c.mode&61440))throw new K(22);if(a=Pb(c,\"w\"))throw new K(a);c.ab.hb(c,{size:b,timestamp:Date.now()})}\nfunction p(a,b,c,d){if(\"\"===a)throw new K(2);if(\"string\"===typeof b){var e=Rb[b];if(\"undefined\"===typeof e)throw Error(\"Unknown file open mode: \"+b);b=e}c=b&64?(\"undefined\"===typeof c?438:c)&4095|32768:0;if(\"object\"===typeof a)var g=a;else{a=rb(a);try{g=T(a,{qb:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new K(17);}else g=ja(a,c,0),e=!0;if(!g)throw new K(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!N(g.mode))throw new K(20);if(!e&&(c=g?40960===(g.mode&61440)?40:N(g.mode)&&\n(\"r\"!==ic(b)||b&512)?21:Pb(g,ic(b)):2))throw new K(c);b&512&&Dc(g,0);b&=-641;d=wc({node:g,path:Lb(g),flags:b,seekable:!0,position:0,cb:g.cb,Bc:[],error:!1},d);d.cb.open&&d.cb.open(d);!f.logReadFiles||b&1||(Ec||(Ec={}),a in Ec||(Ec[a]=1,console.log(\"FS.trackingDelegate error on read file: \"+a)));try{S.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),S.onOpenFile(a,g))}catch(k){console.log(\"FS.trackingDelegate['onOpenFile']('\"+a+\"', flags) threw an exception: \"+k.message)}return d}\nfunction ma(a){if(null===a.fd)throw new K(9);a.Gb&&(a.Gb=null);try{a.cb.close&&a.cb.close(a)}catch(b){throw b;}finally{Q[a.fd]=null}a.fd=null}function Fc(a,b,c){if(null===a.fd)throw new K(9);if(!a.seekable||!a.cb.ob)throw new K(29);if(0!=c&&1!=c&&2!=c)throw new K(22);a.position=a.cb.ob(a,b,c);a.Bc=[]}\nfunction sa(a,b,c,d,e){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(1===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.read)throw new K(22);var g=\"undefined\"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.read(a,b,c,d,e);g||(a.position+=b);return b}\nfunction la(a,b,c,d,e,g){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(0===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.write)throw new K(22);a.flags&1024&&Fc(a,0,2);var k=\"undefined\"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&S.onWriteToFile)S.onWriteToFile(a.path)}catch(m){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+a.path+\"') threw an exception: \"+m.message)}return b}\nfunction Gc(){K||(K=function(a,b){this.node=b;this.zc=function(a){this.eb=a};this.zc(a);this.message=\"FS error\";this.stack&&Object.defineProperty(this,\"stack\",{value:Error().stack,writable:!0})},K.prototype=Error(),K.prototype.constructor=K,[2].forEach(function(a){Eb[a]=new K(a);Eb[a].stack=\"<generic error, no stack>\"}))}var Hc;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c}\nfunction Ic(a,b,c){a=n(\"/dev\",a);var d=ia(!!b,!!c);Jc||(Jc=64);var e=Jc++<<8|0;yb(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k<e;k++){try{var m=b()}catch(Ia){throw new K(5);}if(void 0===m&&0===g)throw new K(11);if(null===m||void 0===m)break;g++;c[d+k]=m}g&&(a.node.timestamp=Date.now());return g},write:function(a,b,d,e){for(var g=0;g<e;g++)try{c(b[d+g])}catch(fa){throw new K(5);}e&&(a.node.timestamp=Date.now());return g}});\nzc(a,d,e)}\nvar Jc,V={},Qb,xc,Ec,L={dc:1,bc:2,Ae:3,sd:4,Lb:5,Ob:6,Ic:7,Td:8,Kb:9,Xc:10,ac:11,Ke:11,Mb:12,$b:13,ld:14,ee:15,Vc:16,kd:17,Le:18,Cb:19,cc:20,ud:21,ib:22,Od:23,Gd:24,je:25,He:26,md:27,ae:28,ze:29,ve:30,Hd:31,pe:32,gd:33,ec:34,Xd:42,pd:43,Yc:44,wd:45,xd:46,yd:47,Ed:48,Ie:49,Rd:50,vd:51,cd:35,Ud:37,Oc:52,Rc:53,Me:54,Pd:55,Sc:56,Tc:57,dd:35,Uc:59,ce:60,Sd:61,Ee:62,be:63,Yd:64,Zd:65,ue:66,Vd:67,Lc:68,Be:69,Zc:70,qe:71,Jd:72,hd:73,Qc:74,ke:76,Pc:77,te:78,zd:79,Ad:80,Dd:81,Cd:82,Bd:83,de:38,Nb:39,Kd:36,\nFd:40,le:95,oe:96,bd:104,Qd:105,Mc:97,se:91,he:88,$d:92,xe:108,ad:111,Jc:98,$c:103,Nd:101,Ld:100,Fe:110,nd:112,od:113,rd:115,Nc:114,ed:89,Id:90,re:93,ye:94,Kc:99,Md:102,td:106,fe:107,Ge:109,Je:87,jd:122,Ce:116,ie:95,Wd:123,qd:84,me:75,Wc:125,ge:131,ne:130,De:86},Kc={};\nfunction Lc(a,b,c){try{var d=a(b)}catch(e){if(e&&e.node&&rb(b)!==rb(Lb(e.node)))return-L.cc;throw e;}D[c>>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var W=0;\nfunction X(){W+=4;return D[W-4>>2]}function Y(){return G(X())}function Z(){var a=Q[X()];if(!a)throw new K(L.Kb);return a}function Da(){return l.length}function Ea(a){if(2147418112<a)return!1;for(var b=Math.max(Da(),16777216);b<a;)536870912>=b?b=Wa(2*b):b=Math.min(Wa((3*b+2147483648)/4),2147418112);a=Wa(b);var c=buffer.byteLength;try{var d=-1!==La.grow((a-c)/65536)?buffer=La.buffer:null}catch(e){d=null}if(!d||d.byteLength!=b)return!1;Xa();return!0}\nfunction Mc(a){if(0===a)return 0;a=G(a);if(!J.hasOwnProperty(a))return 0;Mc.rb&&ha(Mc.rb);a=J[a];var b=oa(a)+1,c=Ta(b);c&&r(a,l,c,b);Mc.rb=c;return Mc.rb}r(\"GMT\",F,60272,4);\nfunction Nc(){function a(a){return(a=a.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?a[1]:\"GMT\"}if(!Oc){Oc=!0;D[Pc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Qc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ea(ba(d));e=ea(ba(e));c.getTimezoneOffset()<b.getTimezoneOffset()?(D[Rc()>>2]=d,D[Rc()+4>>2]=e):(D[Rc()>>2]=e,D[Rc()+4>>2]=d)}}var Oc;\nfunction Sc(a){a/=1E3;if((v||w)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b<a;);else for(b=Date.now();Date.now()-b<a;);return 0}f._usleep=Sc;Gc();R=Array(4096);yc(M,\"/\");U(\"/tmp\");U(\"/home\");U(\"/home/web_user\");\n(function(){U(\"/dev\");yb(259,{read:function(){return 0},write:function(a,b,c,k){return k}});zc(\"/dev/null\",259);xb(1280,Ab);xb(1536,Bb);zc(\"/dev/tty\",1280);zc(\"/dev/tty1\",1536);if(\"object\"===typeof crypto&&\"function\"===typeof crypto.getRandomValues){var a=new Uint8Array(1);var b=function(){crypto.getRandomValues(a);return a[0]}}else if(x)try{var c=require(\"crypto\");b=function(){return c.randomBytes(1)[0]}}catch(d){}b||(b=function(){B(\"random_device\")});Ic(\"random\",b);Ic(\"urandom\",b);U(\"/dev/shm\");\nU(\"/dev/shm/tmp\")})();U(\"/proc\");U(\"/proc/self\");U(\"/proc/self/fd\");yc({jb:function(){var a=Db(\"/proc/self\",\"fd\",16895,73);a.ab={lookup:function(a,c){var b=Q[+c];if(!b)throw new K(9);a={parent:null,jb:{Yb:\"fake\"},ab:{readlink:function(){return b.path}}};return a.parent=a}};return a}},\"/proc/self/fd\");if(x){var fs=require(\"fs\"),Fb=require(\"path\");P.Ac()}function ba(a,b){var c=Array(oa(a)+1);a=r(a,c,0,c.length);b&&(c.length=a);return c}\nvar Vc=f.asm({},{n:B,l:function(a){return E[a]()},i:function(a,b){return E[a](b)},h:function(a,b,c){return E[a](b,c)},g:function(a,b,c,d){return E[a](b,c,d)},f:function(a,b,c,d,e){return E[a](b,c,d,e)},e:function(a,b,c,d,e,g){return E[a](b,c,d,e,g)},d:function(a,b,c,d,e,g,k){return E[a](b,c,d,e,g,k)},B:function(a,b,c,d,e){return E[a](b,c,d,e)},A:function(a,b,c){return E[a](b,c)},z:function(a,b,c,d){return E[a](b,c,d)},y:function(a,b,c,d,e){return E[a](b,c,d,e)},c:function(a,b){E[a](b)},b:function(a,\nb,c){E[a](b,c)},k:function(a,b,c,d){E[a](b,c,d)},j:function(a,b,c,d,e){E[a](b,c,d,e)},x:function(a,b,c,d,e,g){E[a](b,c,d,e,g)},w:function(a,b,c,d){E[a](b,c,d)},v:function(a,b,c,d){E[a](b,c,d)},m:function(a,b,c,d){B(\"Assertion failed: \"+G(a)+\", at: \"+[b?G(b):\"unknown filename\",c,d?G(d):\"unknown function\"])},ga:ob,u:pb,fa:function(a,b){W=b;try{var c=Y();ta(c);return 0}catch(d){return\"undefined\"!==typeof V&&d instanceof K||B(d),-d.eb}},ea:function(a,b){W=b;try{return Z(),0}catch(c){return\"undefined\"!==\ntypeof V&&c instanceof K||B(c),-c.eb}},da:function(a,b){W=b;try{var c=Z();X();var d=X(),e=X(),g=X();Fc(c,d,g);D[e>>2]=c.position;c.Gb&&0===d&&0===g&&(c.Gb=null);return 0}catch(k){return\"undefined\"!==typeof V&&k instanceof K||B(k),-k.eb}},ca:function(a,b){W=b;try{var c=Y(),d=X();ka(c,d);return 0}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},ba:function(a,b){W=b;try{var c=X(),d=X();if(0===d)return-L.ib;if(d<oa(\"/\")+1)return-L.ec;r(\"/\",F,c,d);return c}catch(e){return\"undefined\"!==\ntypeof V&&e instanceof K||B(e),-e.eb}},aa:function(a,b){W=b;try{var c=X(),d=X(),e=X(),g=X(),k=X(),m=X();m<<=12;a=!1;if(-1===k){var y=Tc(16384,d);if(!y)return-L.Mb;Uc(y,0,d);a=!0}else{var z=Q[k];if(!z)return-L.Kb;b=F;if(1===(z.flags&2097155))throw new K(13);if(!z.cb.zb)throw new K(19);var fa=z.cb.zb(z,b,c,d,m,e,g);y=fa.xc;a=fa.Db}Kc[y]={vc:y,uc:d,Db:a,fd:k,flags:g};return y}catch(ca){return\"undefined\"!==typeof V&&ca instanceof K||B(ca),-ca.eb}},$:function(a,b){W=b;try{var c=X();X();var d=X();X();var e=\nQ[c];if(!e)throw new K(9);if(0===(e.flags&2097155))throw new K(22);Dc(e.node,d);return 0}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},t:function(a,b){W=b;try{var c=Y(),d=X();return Lc(ra,c,d)}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},_:function(a,b){W=b;try{var c=Y(),d=X();return Lc(Bc,c,d)}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},Z:function(a,b){W=b;try{var c=Z(),d=X();return Lc(ra,c.path,d)}catch(e){return\"undefined\"!==\ntypeof V&&e instanceof K||B(e),-e.eb}},Y:function(a,b){W=b;return 42},X:function(a,b){W=b;return 0},W:function(a,b){W=b;try{var c=X();X();X();var d=Q[c];if(!d)throw new K(9);Cc(d.node);return 0}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},V:function(a,b){W=b;try{var c=Y();X();X();Cc(c);return 0}catch(d){return\"undefined\"!==typeof V&&d instanceof K||B(d),-d.eb}},o:function(a,b){W=b;try{var c=Z();switch(X()){case 0:var d=X();return 0>d?-L.ib:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0;\ncase 3:return c.flags;case 4:return d=X(),c.flags|=d,0;case 12:return d=X(),Ha[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-L.ib;case 9:return pb(L.ib),-1;default:return-L.ib}}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},U:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return sa(c,l,d,e)}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},T:function(a,b){W=b;try{var c=Y();var d=X();if(d&-8)var e=-L.ib;else{var g=T(c,{qb:!0}).node;a=\"\";d&4&&(a+=\"r\");\nd&2&&(a+=\"w\");d&1&&(a+=\"x\");e=a&&Pb(g,a)?-L.$b:0}return e}catch(k){return\"undefined\"!==typeof V&&k instanceof K||B(k),-k.eb}},S:function(a,b){W=b;try{var c=Y(),d=X();a=c;a=rb(a);\"/\"===a[a.length-1]&&(a=a.substr(0,a.length-1));U(a,d);return 0}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},R:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return la(c,l,d,e)}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},Q:function(a,b){W=b;try{var c=Y(),d=T(c,{parent:!0}).node,\ne=tb(c),g=O(d,e),k=uc(d,e,!0);if(k)throw new K(k);if(!d.ab.rmdir)throw new K(1);if(g.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(c)}catch(m){console.log(\"FS.trackingDelegate['willDeletePath']('\"+c+\"') threw an exception: \"+m.message)}d.ab.rmdir(d,e);Ob(g);try{if(S.onDeletePath)S.onDeletePath(c)}catch(m){console.log(\"FS.trackingDelegate['onDeletePath']('\"+c+\"') threw an exception: \"+m.message)}return 0}catch(m){return\"undefined\"!==typeof V&&m instanceof K||B(m),-m.eb}},P:function(a,b){W=\nb;try{var c=Y(),d=X(),e=X();return p(c,d,e).fd}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},s:function(a,b){W=b;try{var c=Z();ma(c);return 0}catch(d){return\"undefined\"!==typeof V&&d instanceof K||B(d),-d.eb}},O:function(a,b){W=b;try{var c=Y(),d=X();var e=X();if(0>=e)var g=-L.ib;else{var k=Kb(c),m=Math.min(e,oa(k)),y=l[d+m];r(k,F,d,e+1);l[d+m]=y;g=m}return g}catch(z){return\"undefined\"!==typeof V&&z instanceof K||B(z),-z.eb}},N:function(a,b){W=b;try{var c=X(),d=X(),e=Kc[c];if(!e)return 0;\nif(d===e.uc){var g=Q[e.fd],k=e.flags,m=new Uint8Array(F.subarray(c,c+d));g&&g.cb.Ab&&g.cb.Ab(g,m,0,d,k);Kc[c]=null;e.Db&&ha(e.vc)}return 0}catch(y){return\"undefined\"!==typeof V&&y instanceof K||B(y),-y.eb}},M:function(a,b){W=b;try{var c=X(),d=X(),e=Q[c];if(!e)throw new K(9);ka(e.node,d);return 0}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},L:Da,K:function(a,b,c){F.set(F.subarray(b,b+c),a)},J:Ea,r:Mc,q:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0},\nI:function(a){return Math.log(a)/Math.LN10},p:function(){B(\"trap!\")},H:function(a){Nc();a=new Date(1E3*D[a>>2]);D[15056]=a.getSeconds();D[15057]=a.getMinutes();D[15058]=a.getHours();D[15059]=a.getDate();D[15060]=a.getMonth();D[15061]=a.getFullYear()-1900;D[15062]=a.getDay();var b=new Date(a.getFullYear(),0,1);D[15063]=(a.getTime()-b.getTime())/864E5|0;D[15065]=-(60*a.getTimezoneOffset());var c=(new Date(2E3,6,1)).getTimezoneOffset();b=b.getTimezoneOffset();a=(c!=b&&a.getTimezoneOffset()==Math.min(b,\nc))|0;D[15064]=a;a=D[Rc()+(a?4:0)>>2];D[15066]=a;return 60224},G:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Sc(1E6*c+a/1E3)},F:function(a){switch(a){case 30:return 16384;case 85:return 131068;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;\ncase 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;\ncase 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return\"object\"===typeof navigator?navigator.hardwareConcurrency||1:1}pb(22);return-1},\nE:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},D:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=G(a);try{b=c;var d=T(a,{qb:!0}).node;d.ab.hb(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof K)){a+=\" : \";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d=\"(no stack trace available)\";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+=\"\\n\"+f.extraStackTrace());d=Va(d);throw a+d;}pb(a.eb);return-1}},C:function(){B(\"OOM\")},\na:Ca},buffer);f.asm=Vc;f._RegisterExtensionFunctions=function(){return f.asm.ha.apply(null,arguments)};var nb=f.___emscripten_environ_constructor=function(){return f.asm.ia.apply(null,arguments)};f.___errno_location=function(){return f.asm.ja.apply(null,arguments)};\nvar Qc=f.__get_daylight=function(){return f.asm.ka.apply(null,arguments)},Pc=f.__get_timezone=function(){return f.asm.la.apply(null,arguments)},Rc=f.__get_tzname=function(){return f.asm.ma.apply(null,arguments)},ha=f._free=function(){return f.asm.na.apply(null,arguments)},Ta=f._malloc=function(){return f.asm.oa.apply(null,arguments)},Tc=f._memalign=function(){return f.asm.pa.apply(null,arguments)},Uc=f._memset=function(){return f.asm.qa.apply(null,arguments)};\nf._sqlite3_bind_blob=function(){return f.asm.ra.apply(null,arguments)};f._sqlite3_bind_double=function(){return f.asm.sa.apply(null,arguments)};f._sqlite3_bind_int=function(){return f.asm.ta.apply(null,arguments)};f._sqlite3_bind_parameter_index=function(){return f.asm.ua.apply(null,arguments)};f._sqlite3_bind_text=function(){return f.asm.va.apply(null,arguments)};f._sqlite3_changes=function(){return f.asm.wa.apply(null,arguments)};f._sqlite3_clear_bindings=function(){return f.asm.xa.apply(null,arguments)};\nf._sqlite3_close_v2=function(){return f.asm.ya.apply(null,arguments)};f._sqlite3_column_blob=function(){return f.asm.za.apply(null,arguments)};f._sqlite3_column_bytes=function(){return f.asm.Aa.apply(null,arguments)};f._sqlite3_column_double=function(){return f.asm.Ba.apply(null,arguments)};f._sqlite3_column_name=function(){return f.asm.Ca.apply(null,arguments)};f._sqlite3_column_text=function(){return f.asm.Da.apply(null,arguments)};f._sqlite3_column_type=function(){return f.asm.Ea.apply(null,arguments)};\nf._sqlite3_create_function_v2=function(){return f.asm.Fa.apply(null,arguments)};f._sqlite3_data_count=function(){return f.asm.Ga.apply(null,arguments)};f._sqlite3_errmsg=function(){return f.asm.Ha.apply(null,arguments)};f._sqlite3_exec=function(){return f.asm.Ia.apply(null,arguments)};f._sqlite3_finalize=function(){return f.asm.Ja.apply(null,arguments)};f._sqlite3_free=function(){return f.asm.Ka.apply(null,arguments)};f._sqlite3_open=function(){return f.asm.La.apply(null,arguments)};\nf._sqlite3_prepare_v2=function(){return f.asm.Ma.apply(null,arguments)};f._sqlite3_reset=function(){return f.asm.Na.apply(null,arguments)};f._sqlite3_result_double=function(){return f.asm.Oa.apply(null,arguments)};f._sqlite3_result_null=function(){return f.asm.Pa.apply(null,arguments)};f._sqlite3_result_text=function(){return f.asm.Qa.apply(null,arguments)};f._sqlite3_step=function(){return f.asm.Ra.apply(null,arguments)};f._sqlite3_value_blob=function(){return f.asm.Sa.apply(null,arguments)};\nf._sqlite3_value_bytes=function(){return f.asm.Ta.apply(null,arguments)};f._sqlite3_value_double=function(){return f.asm.Ua.apply(null,arguments)};f._sqlite3_value_int=function(){return f.asm.Va.apply(null,arguments)};f._sqlite3_value_text=function(){return f.asm.Wa.apply(null,arguments)};f._sqlite3_value_type=function(){return f.asm.Xa.apply(null,arguments)};\nvar h=f.stackAlloc=function(){return f.asm.Za.apply(null,arguments)},qa=f.stackRestore=function(){return f.asm._a.apply(null,arguments)},na=f.stackSave=function(){return f.asm.$a.apply(null,arguments)};f.dynCall_vi=function(){return f.asm.Ya.apply(null,arguments)};f.asm=Vc;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return\"number\"===a});return\"string\"!==b&&e&&!d?Na(a):function(){return Oa(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h;\nfunction Wc(a){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+a+\")\";this.status=a}Wc.prototype=Error();Wc.prototype.constructor=Wc;gb=function Xc(){f.calledRun||Yc();f.calledRun||(gb=Xc)};\nfunction Yc(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Ma)){db||(db=!0,f.noFSInit||Hc||(Hc=!0,Gc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Ic(\"stdin\",f.stdin):Ac(\"/dev/tty\",\"/dev/stdin\"),f.stdout?Ic(\"stdout\",null,f.stdout):Ac(\"/dev/tty\",\"/dev/stdout\"),f.stderr?Ic(\"stderr\",null,f.stderr):Ac(\"/dev/tty1\",\"/dev/stderr\"),p(\"/dev/stdin\",\"r\"),p(\"/dev/stdout\",\"w\"),p(\"/dev/stderr\",\"w\")),Za(ab));Jb=!1;Za(bb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for(\"function\"==\ntypeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();cb.unshift(a)}Za(cb)}}if(!(0<H)){if(f.preRun)for(\"function\"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)eb();Za($a);0<H||f.calledRun||(f.setStatus?(f.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){f.setStatus(\"\")},1);a()},1)):a())}}f.run=Yc;\nfunction B(a){if(f.onAbort)f.onAbort(a);void 0!==a?(Aa(a),C(a),a=JSON.stringify(a)):a=\"\";Ma=!0;throw\"abort(\"+a+\"). Build with -s ASSERTIONS=1 for more info.\";}f.abort=B;if(f.preInit)for(\"function\"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();f.noExitRuntime=!0;Yc();\n\n\n        // The shell-pre.js and emcc-generated code goes above\n        return Module;\n    }); // The end of the promise being returned\n\n  return initSqlJsPromise;\n} // The end of our initSqlJs function\n\n// This bit below is copied almost exactly from what you get when you use the MODULARIZE=1 flag with emcc\n// However, we don't want to use the emcc modularization. See shell-pre.js\nif (typeof exports === 'object' && typeof module === 'object'){\n    module.exports = initSqlJs;\n    // This will allow the module to be used in ES6 or CommonJS\n    module.exports.default = initSqlJs;\n}\nelse if (typeof define === 'function' && define['amd']) {\n    define([], function() { return initSqlJs; });\n}\nelse if (typeof exports === 'object'){\n    exports[\"Module\"] = initSqlJs;\n}\n    \n"
  },
  {
    "path": "libs/potree/potree.css",
    "content": "\n/* CSS - Cascading Style Sheet */\n/* Palette color codes */\n/* Palette URL: http://paletton.com/#uid=13p0u0kex8W2uqu8af7lEqaulDE */\n\n/* Feel free to copy&paste color codes to your application */\n\n/* As hex codes */\n.color-primary-0 { color: #19282C }\t/* Main Primary color */\n.color-primary-1 { color: #7A8184 }\n.color-primary-2 { color: #39474B }\n.color-primary-3 { color: #2D6D82 }\n.color-primary-4 { color: #108FB9 }\n\n/* As RGBa codes */\n.rgba-primary-0 { color: rgba( 25, 40, 44,1) }\t/* Main Primary color */\n.rgba-primary-1 { color: rgba(122,129,132,1) }\n.rgba-primary-2 { color: rgba( 57, 71, 75,1) }\n.rgba-primary-3 { color: rgba( 45,109,130,1) }\n.rgba-primary-4 { color: rgba( 16,143,185,1) }\n\n/* Generated by Paletton.com Â© 2002-2014 */\n/* http://paletton.com */\n\n\n\n\n:root{\n\t\n\t--color-0: \t\t\trgba( 25, 40, 44, 1);\n\t--color-1: \t\t\trgba(122,129,132, 1);\n\t--color-2: \t\t\trgba( 57, 71, 75, 1);\n\t--color-3: \t\t\trgba( 45,109,130, 1);\n\t--color-4: \t\t\trgba( 16,143,185, 1);\n\t\n\t--bg-color:\t\t\tvar(--color-0);\n\t--bg-color-2:\t\trgb(60, 80, 85);\n\t--bg-light-color:\trgba( 48, 61, 65, 1);\n\t--bg-dark-color:\trgba( 24, 31, 33, 1);\n\t--bg-hover-color:\tvar(--color-2);\n\t\n\t--font-color:\t\t#9AA1A4;\n\t--font-color-2:\t\t#ddd;\n\t--font-color:\t\t#cccccc;\n\t--border-color:\t\tblack;\n\t\n\t--measurement-detail-node-bg-light:\t\tvar(--color-1);\n\t--measurement-detail-node-bg-dark:\t\tvar(--color-2);\n\t--measurement-detail-area-bg-color:\t\t#eee;\n\n\t\n}\n\n#potree_sidebar_container{\n\tposition:\tabsolute;\n\tz-index:\t0;\n\twidth:\t\t350px;\n\theight:\t\t100%;\n\toverflow-y:\tscroll;\n\tfont-size:\t85%;\n\tborder-right:\t1px solid black;\n\tbackground-color:\tvar(--bg-color);\n}\n\n#sidebar_root{\n\tcolor:\t\t\t\tvar(--font-color);\n\tfont-family:\t\tArial,Helvetica,sans-serif;\n\tfont-size:\t\t\t1em;\n}\n\n.potree_failpage{\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: white;\n\tposition: absolute;\n\tmargin: 15px;\n}\n\n.potree_failpage a{\n\tcolor: initial !important;\n\ttext-decoration: underline !important;\n}\n\n.potree_info_text{\n\tcolor:\t\twhite;\n\tfont-weight: bold;\n\ttext-shadow:  1px  1px 1px black,\n\t\t\t\t  1px -1px 1px black,\n\t\t\t\t -1px  1px 1px black,\n\t\t\t\t -1px -1px 1px black;\n}\n\n.potree_message{\n\twidth: 500px;\n\tbackground-color: var(--bg-color);\n\tpadding: 5px;\n\tmargin: 5px;\n\tborder-radius: 4px;\n\tcolor: var(--font-color);\n\tfont-family: Arial;\n\topacity: 0.8;\n\tborder: 1px solid black;\n\tdisplay: flex;\n\toverflow: auto;\n}\n\n.potree_message_error{\n\tbackground-color: red;\n}\n\n#potree_description{\n\tposition: absolute; \n\ttop: 10px; \n\tleft: 50%; \n\ttransform: translateX(-50%); \n\ttext-align: center;\n\tz-index:\t1000;\n}\n\n.potree_sidebar_brand{\n\tmargin:\t\t\t1px 20px;\n\tline-height:\t2em;\n\tfont-size:\t\t100%;\n\tfont-weight:\tbold;\n\tposition:\t\trelative;\n\tdisplay:\t\tflex; \n\tflex-direction:\trow;\n}\n\n#potree_sidebar_container a{\n\tcolor: \t\t\t#8Aa1c4;\n}\n\n#potree_quick_buttons{\n\tposition: absolute;\n\tleft: 4px;\n\ttop: 4px; \n\twidth: 10px; \n\theight: 10px; \n\tz-index: 10000;\n\tfloat: left;\n}\n\n.potree_menu_toggle{\n\tfloat:\t\t\tleft;\n\tmargin:\t\t\t0;\n\tbackground:\t\tnone;\n\twidth:\t\t\t2.5em;\n\theight:\t\t\t2.5em;\n\tz-index:\t\t100;\n\tcursor: \t\tpointer;\n\tmargin:\t\t\t4px;\n}\n\n#potree_map_toggle{\n\tfloat:\t\t\tleft;\n\tmargin:\t\t\t0;\n\tbackground:\t\tnone;\n\twidth:\t\t\t2.5em;\n\theight:\t\t\t2.5em;\n\tz-index:\t\t100;\n\tcursor: \t\tpointer;\n\tmargin:\t\t\t4px;\n}\n\n#potree_render_area{\n\tposition: \tabsolute;\n\t/*background: linear-gradient(-90deg, red, yellow);*/\n\ttop: \t\t0px;\n\tbottom: \t0px;\n\tleft: \t\t0px;\n\tright: \t\t0px;\n\toverflow: \thidden;\n\tz-index: \t1;\n\t-webkit-transition: left .35s;\n\ttransition: left .35s;\n}\n\n.potree-panel {\n\tborder: \t\t1px solid black;\n\tborder-radius: \t0.4em;\n\tpadding: \t\t0px;\n\tbackground-color: var(--bg-light-color);\n}\n\n.potree-panel-heading{\n\tbackground-color: var(--bg-dark-color);\n}\n\na:hover, a:visited, a:link, a:active{\n\tcolor: \t\t\t\t#ccccff;\n\ttext-decoration: \tnone;\n}\n\n.annotation{\n\tposition:\t\tabsolute;\n\tpadding:\t\t10px;\n\topacity:\t\t0.5;\n\ttransform:\t\ttranslate(-50%, -30px);\n\twill-change:\tleft, top;\n}\n\n.annotation-titlebar{\n\tcolor:\t\t\twhite;\n\tbackground-color:\tblack;\n\tborder-radius:\t1.5em;\n\tborder:\t\t\t1px solid rgba(255, 255, 255, 0.7);\n\tfont-size:\t\t1em;\n\topacity:\t\t1;\n\tmargin:\t\t\tauto;\n\tdisplay:\t\ttable;\n\tpadding:\t\t1px 8px;\n\tcursor: \t\tpointer;\n}\n\n.annotation-expand{\n\tcolor:\t\t\twhite;\n\tfont-size:\t\t0.6em;\n\topacity:\t\t1;\n}\n\n.annotation-action-icon{\n\twidth:\t\t\t20px;\n\theight:\t\t\t20px;\n\tdisplay:\t\tinline-block;\n\tvertical-align:\tmiddle;\n\tline-height:\t1.5em;\n\ttext-align:\t\tcenter;\n\tfont-family:\tArial;\n\tfont-weight:\tbold;\n\tcursor: \t\tpointer;\n}\n\n.annotation-action-icon:hover{\n\tfilter:\t\t\tdrop-shadow(0px 0px 1px white);\n\twidth:\t\t\t24px;\n\theight:\t\t\t24px;\n\tcursor: \t\tpointer;\n\t\n}\n\n.annotation-item {\n\tcolor:\t\t\twhite;\n\tbackground-color: \tblack;\n\topacity:\t\t0.5;\n\tborder-radius:\t1.5em;\n\tfont-size:\t\t1em;\n\tline-height:\t1.5em;\n\tpadding:\t\t1px 8px 0px 8px;\n\tfont-weight:\tbold;\n\tdisplay:\t\tflex;\n\tcursor:\t\t\tdefault;\n}\n\n.annotation-item:hover {\n\topacity:\t\t1.0;\n\tbox-shadow:\t\t0 0 5px #ffffff;\n}\n\n.annotation-main{\n\tdisplay:\t\tflex;\n\tflex-grow:\t\t1;\n}\n\n.annotation-label{\n\tdisplay:\t\tinline-block;\n\theight:\t\t\t100%;\n\tflex-grow:\t\t1;\n\tuser-select:\tnone;\n\t-moz-user-select: none;\n\tz-index:\t\t100;\n\tvertical-align:\tmiddle;\n\tline-height:\t1.5em;\n\tfont-family:\tArial;\n\tfont-weight:\tbold;\n\tcursor: \t\tpointer;\n\twhite-space:\tnowrap;\n}\n\n.annotation-description{\n\tposition:\t\trelative;\n\tcolor:\t\t\twhite;\n\tbackground-color:\tblack;\n\tpadding:\t\t10px;\n\tmargin:\t\t\t5px 0px 0px 0px;\n\tborder-radius:\t4px;\n\tdisplay:\t\tnone;\n\tmax-width:\t\t500px;\n\twidth:\t\t\t500px;\n}\n\n.annotation-description-close{\n\tfilter:\t\t\tinvert(100%);\n\tfloat:\t\t\tright;\n\topacity:\t\t0.5;\n\tmargin:\t\t\t0px 0px 8px 8px;\n}\n\n\t\n.annotation-description-content{\n\tcolor:\t\t\twhite;\n}\n\n.annotation-icon{\n\twidth:\t\t20px;\n\theight:\t\t20px;\n\tfilter:\t\tinvert(100%);\n\tmargin:\t\t2px 2px;\n\topacity:\t0.5;\n}\n\n\ncanvas { \n\twidth: 100%; \n\theight: 100% \n}\n\nbody{ \n\tmargin: \t0; \n\tpadding: \t0;\n\tposition:\tabsolute;\n\twidth: \t\t100%;\n\theight: \t100%;\n\toverflow:\thidden;\n}\n\n.axis {\n  font: \t\t10px sans-serif;\n  color: \t\tvar(--font-color);\n}\n\n.axis path{\n\tfill: \t\trgba(255, 255, 255, 0.5);\n\tstroke: \t\tvar(--font-color);\n\tshape-rendering: crispEdges;\n\topacity: \t\t0.7;\n}\n\n.axis line {\n\tfill: \t\trgba(255, 255, 255, 0.5);\n\tstroke: \t\tvar(--font-color);\n\tshape-rendering: crispEdges;\n\topacity: \t\t0.1;\n}\n\n.tick text{\n\tfont-size: 12px;\n}\n\n.scene_header{\n\tdisplay:flex;\n\tcursor: pointer;\n\tpadding: 2px;\n}\n\n.scene_content{\n\tpadding: 5px 0px 5px 0px;\n\t/*background-color: rgba(0, 0, 0, 0.4);*/\n}\n\n.measurement_content{\n\tpadding: 5px 15px 5px 10px;\n\t/*background-color: rgba(0, 0, 0, 0.4);*/\n}\n\n.propertypanel_content{\n\tpadding: 5px 15px 5px 10px;\n\t/*background-color: rgba(0, 0, 0, 0.4);*/\n}\n\n.measurement_value_table{\n\twidth: 100%;\n}\n\n.coordinates_table_container table td {\n\twidth: 33%;\n\ttext-align: center;\n}\n\n#scene_object_properties{\n\tmargin:\t\t0px;\n}\n\n\n\n\n.pv-panel-heading{\n\tpadding: \t4px !important;\n\tdisplay: \tflex; \n\tflex-direction: row\n}\n\n.pv-menu-list{\n\tlist-style-type:\tnone;\n\tpadding:\t\t\t0;\n\tmargin:\t\t\t\t15px 0px;\n\toverflow:\t\t\thidden;\n}\n\n.pv-menu-list > *{\n\tmargin: \t4px 20px;\n}\n\n.ui-slider {\n\tmargin-top: 5px;\n\tmargin-bottom: 10px;\n\tbackground-color: \tvar(--color-1) !important;\n\tbackground: \t\tnone;\n\tborder: \t\t\t1px solid black;\n}\n\n.ui-selectmenu-button.ui-button{\n\twidth: \t\t100% !important;\n}\n\n.pv-menu-list > li > .ui-slider{\n\tbackground-color: \tvar(--color-1) !important;\n\tbackground: \t\tnone;\n\tborder: \t\t\t1px solid black;\n}\n\n.pv-menu-list .ui-slider{\n\tbackground-color: \tvar(--color-1) !important;\n\tbackground: \t\tnone;\n\tborder: \t\t\t1px solid black !important;\n}\n\n.ui-slider-handle{\n\tborder: \t\t\t1px solid black !important;\n}\n\n.ui-widget{\n\tbox-sizing:border-box\n}\n\n.panel-body > li > .ui-slider{\n\tbackground-color: var(--color-1) !important;\n\tbackground: none;\n\tborder: 1px solid black;\n}\n\n.panel-body > div > li > .ui-slider{\n\tbackground-color: var(--color-1) !important;\n\tbackground: none;\n\tborder: 1px solid black;\n}\n\n.pv-select-label{\n\tmargin: 1px;\n\tfont-size: 90%;\n\tfont-weight: 100;\n}\n\n.button-icon:hover{\n\t/*background-color:\t#09181C;*/\n\tfilter:\t\t\t\tdrop-shadow(0px 0px 4px white);\n}\n\n.ui-widget-content{\n\t/*color: var(--font-color) !important;*/\n}\n\n.accordion > h3{\n\tbackground-color: var(--bg-color-2) !important;\n\tbackground: #f6f6f6 50% 50% repeat-x;\n\tborder:\t\t1px solid black;\n\tcolor:\t\tvar(--font-color-2);\n\tcursor:\t\tpointer;\n\tmargin:\t\t2px 0 0 0;\n\tpadding:\t4px 10px 4px 30px;\n\tbox-shadow:\t0px 3px 3px #111;\n\ttext-shadow:\t1px 1px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n\tfont-size:\t1em;\n}\n\n.accordion > h3:hover{\n\tfilter: brightness(125%);\n}\n\n.accordion-content{\n\tpadding: 0px 0px !important;\n\tborder: none !important;\n}\n\n.icon-bar{\n\theight: 4px !important;\n\tborder: 1px solid black;\n\tbackground-color: white;\n\tborder-radius: 2px;\n}\n\n.canvas{\n\t-webkit-transition: top .35s, left .35s, bottom .35s, right .35s, width .35s;\n\ttransition: top .35s, left .35s, bottom .35s, right .35s, width .35s;\n}\n\n#profile_window{\n\tbackground-color:\tvar(--bg-color);\n}\n\n#profile_titlebar{\n\tbackground-color:\tvar(--bg-color-2);\n\tcolor: var(--font-color-2);\n\ttext-shadow: 1px 1px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000;\n\tfont-size: 1em;\n\tfont-weight: bold;\n}\n\n#profile_window_title{\n\tposition: absolute;\n\tmargin: 5px;\n}\n\n.profile-container-button{\n\tcursor: pointer;\n}\n\n.profile-button:hover{\n\tbackground-color: #0000CC;\n}\n\n.unselectable{\n\tuser-select: \t\t\tnone;\n}\n\n.selectable{\n\tuser-select: \t\t\ttext;\n}\n\n\n\n.divider {\n\tdisplay: \t\tblock;\n\ttext-align: \tcenter;\n\toverflow: \t\thidden;\n\twhite-space: \tnowrap; \n\tfont-weight:\tbold;\n\tfont-size:\t\t90%;\n\tletter-spacing:\t1px;\n\tmargin-left:\t0px;\n\tmargin-right:\t0px;\n\tmargin-top: \t1px;\n\tmargin-bottom: \t1px;\n\tpadding:\t\t1px !important;\n}\n\n.divider > span {\n\tposition: \trelative;\n\tdisplay: \tinline-block;\n}\n\n.divider > span:before,\n.divider > span:after {\n\tcontent: \t\"\";\n\tposition: \tabsolute;\n\ttop: \t\t50%;\n\twidth: \t\t9999px;\n\theight: \t1px;\n\tbackground: #b2b2b2;\n}\n\n.divider > span:before {\n\tright: 100%;\n\tmargin-right: 5px;\n}\n\n.divider > span:after {\n\tleft: 100%;\n\tmargin-left: 5px;\n}\n\n\n\n\n\n\n\n\n\n\n\n.ol-dragbox {\n  background-color: rgba(255,255,255,0.4);\n  border-color: rgba(100,150,0,1);\n  border: 1px solid red;\n}\n\n.text-icon{\n\topacity:\t0.5;\n\theight:\t\t24px;\n}\n\n.text-icon:hover{\n\topacity:\t1.0;\n}\n\n.input-grid-cell{\n\tflex-grow: 1; margin: 0px 3px 0px 3px;\n}\n\n.input-grid-label{\n\tflex-grow: 1; \n\tmargin: 0px 3px 0px 3px; \n\ttext-align:center; \n\tfont-weight: bold;\n}\n\n.input-grid-cell > input{\n\twidth: 100%\n}\n\n.invalid_value{\n\tcolor: #e05e5e;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/** \n * OVERRIDES\n */\n\n\n.ui-spinner-input{\n\tcolor: black;\n}\n\n.jstree-themeicon-custom{\n\tbackground-size: 16px !important;\n}\n\n.jstree-default .jstree-clicked{\n\t/*background-color: #ffffff !important;*/\n\tbackground-color: #34494f !important;\n}\n\n.jstree-default .jstree-hovered{\n\tbackground-color: #34494f !important;\n}\n\n.jstree-anchor{\n\twidth: 100% !important;\n}\n\n.ui-state-default{\n\tbackground: #a6a9aa !important;\n\tborder: 1px solid black;\n\tcolor: black;\n}\n\n.ui-state-active{\n\tbackground: #c6c9ca !important;\n\tcolor: black !important;\n}\n\n.cesium-viewer .cesium-viewer-cesiumWidgetContainer{\n\tposition: absolute;\n\theight: 100%;\n\twidth: 100%;\n}\n\n\n\n\n.zs_widget{\n\tpadding: 2px;\n\theight: 4em;\n\tuser-select: none;\n}\n.zs_core{\n\toverflow: hidden;\n\tposition: relative;\n\theight: 100%;\n}\n.zs_handle{\n\tposition: absolute;\n\ttop: 0px;\n\tbottom: 0px;\n\tborder: 1px solid black;\n\tborder-radius: 3px;\n\tbackground-color: rgb(166, 169, 170);\n\twidth: 8px;\n\tuser-select: none;\n\twidth: 1.2em;\n\theight: 1.2em;\n\ttop: calc(50% - 0.6em);\n}\n.zs_stretch{\n\tposition: absolute;\n\ttop: 0px;\n\tbottom: 0px;\n\tborder: 1px solid black;\n\tborder-radius: 3px;\n\tbackground-color: rgb(166, 169, 170);\n\twidth: 8px;\n\tuser-select: none;\n\twidth: 1.2em;\n\theight: 1.2em;\n\ttop: calc(50% - 0.6em);\n\tcolor: black;\n\tfont-weight: bold;\n\tfont-size: 1.2em;\n\tfont-family: arial;\n}\n.zs_handle:hover{\n\tbackground-color: lightgreen;\n}\n.zs_inside{\n\tposition: absolute !important;\n\twidth: 100%;\n\tborder: 1px solid black;\n\tbackground-color: white;\n\ttop: calc(50% - 0.326em);\n\theight: 0.652em;\n\tcursor: zoom-in;\n}\n.zs_outside{\n\tposition: absolute !important;\n\twidth: 100%;\n\tbackground-color: var(--color-1) !important;\n\ttop: calc(50% - 0.326em);\n\theight: 0.652em;\n\tcursor: zoom-in;\n}\n.zs_visible_range_label{\n\tposition: absolute;\n\tbottom: 0px;\n\tpointer-events:none;\n}\n.zs_visible_range_label_left{\n\tleft: 0px;\n}\n.zs_visible_range_label_right{\n\tright: 0px;\n}\n.zs_chosen_range_label{\n\tposition: absolute;\n\tpointer-events:none;\n}\n\n#potree_sidebar_container{\n\tscrollbar-color: var(--color-1) var(--bg-color);\n\tscrollbar-width: thin;\n}\n\n\n\n::-webkit-scrollbar {\n\twidth: 6px;\n\tbackground-color: var(--bg-color);\n}\n\n::-webkit-scrollbar-track {\n\n}\n\n::-webkit-scrollbar-thumb {\n\tbackground-color: var(--color-1);\n}\n\n.propertypanel_content .heading{\n\tfont-weight: bold;\n\tpadding-top: 0.6em;\n\tpadding-bottom: 0.1em;\n}"
  },
  {
    "path": "libs/potree/potree.js",
    "content": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = global || self, factory(global.Potree = {}));\n}(this, (function (exports) { 'use strict';\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/ https://github.com/mrdoob/eventdispatcher.js\n\t * \n\t * with slight modifications by mschuetz, http://potree.org\n\t * \n\t */\n\n\t// The MIT License\n\t// \n\t// Copyright (c) 2011 Mr.doob\n\t// \n\t// Permission is hereby granted, free of charge, to any person obtaining a copy\n\t// of this software and associated documentation files (the \"Software\"), to deal\n\t// in the Software without restriction, including without limitation the rights\n\t// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n\t// copies of the Software, and to permit persons to whom the Software is\n\t// furnished to do so, subject to the following conditions:\n\t// \n\t// The above copyright notice and this permission notice shall be included in\n\t// all copies or substantial portions of the Software.\n\t// \n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\t// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\t// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\t// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\t// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\t// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n\t// THE SOFTWARE.\n\n\n\n\n\n\tclass EventDispatcher{\n\n\t\tconstructor(){\n\t\t\tthis._listeners = {};\n\t\t}\n\n\t\taddEventListener(type, listener){\n\n\t\t\tconst listeners = this._listeners;\n\n\t\t\tif(listeners[type] === undefined){\n\t\t\t\tlisteners[type] = [];\n\t\t\t}\n\n\t\t\tif(listeners[type].indexOf(listener) === - 1){\n\t\t\t\tlisteners[type].push( listener );\n\t\t\t}\n\n\t\t}\n\n\t\thasEventListener(type, listener){\n\n\t\t\tconst listeners = this._listeners;\n\n\t\t\treturn listeners[type] !== undefined && listeners[type].indexOf(listener) !== - 1;\n\t\t}\n\n\t\tremoveEventListener(type, listener){\n\n\t\t\tlet listeners = this._listeners;\n\t\t\tlet listenerArray = listeners[type];\n\n\t\t\tif (listenerArray !== undefined){\n\n\t\t\t\tlet index = listenerArray.indexOf(listener);\n\n\t\t\t\tif(index !== - 1){\n\t\t\t\t\tlistenerArray.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tremoveEventListeners(type){\n\t\t\tif(this._listeners[type] !== undefined){\n\t\t\t\tdelete this._listeners[type];\n\t\t\t}\n\t\t};\n\n\t\tdispatchEvent(event){\n\n\t\t\tlet listeners = this._listeners;\n\t\t\tlet listenerArray = listeners[event.type];\n\n\t\t\tif ( listenerArray !== undefined ) {\n\t\t\t\tevent.target = this;\n\n\t\t\t\tfor(let listener of listenerArray.slice(0)){\n\t\t\t\t\tlistener.call(this, event);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass Action extends EventDispatcher {\n\t\tconstructor (args = {}) {\n\t\t\tsuper();\n\n\t\t\tthis.icon = args.icon || '';\n\t\t\tthis.tooltip = args.tooltip;\n\n\t\t\tif (args.onclick !== undefined) {\n\t\t\t\tthis.onclick = args.onclick;\n\t\t\t}\n\t\t}\n\n\t\tonclick (event) {\n\n\t\t}\n\n\t\tpairWith (object) {\n\n\t\t}\n\n\t\tsetIcon (newIcon) {\n\t\t\tlet oldIcon = this.icon;\n\n\t\t\tif (newIcon === oldIcon) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.icon = newIcon;\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'icon_changed',\n\t\t\t\taction: this,\n\t\t\t\ticon: newIcon,\n\t\t\t\toldIcon: oldIcon\n\t\t\t});\n\t\t}\n\t};\n\n\t//Potree.Actions = {};\n\t//\n\t//Potree.Actions.ToggleAnnotationVisibility = class ToggleAnnotationVisibility extends Potree.Action {\n\t//\tconstructor (args = {}) {\n\t//\t\tsuper(args);\n\t//\n\t//\t\tthis.icon = Potree.resourcePath + '/icons/eye.svg';\n\t//\t\tthis.showIn = 'sidebar';\n\t//\t\tthis.tooltip = 'toggle visibility';\n\t//\t}\n\t//\n\t//\tpairWith (annotation) {\n\t//\t\tif (annotation.visible) {\n\t//\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye.svg');\n\t//\t\t} else {\n\t//\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg');\n\t//\t\t}\n\t//\n\t//\t\tannotation.addEventListener('visibility_changed', e => {\n\t//\t\t\tlet annotation = e.annotation;\n\t//\n\t//\t\t\tif (annotation.visible) {\n\t//\t\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye.svg');\n\t//\t\t\t} else {\n\t//\t\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg');\n\t//\t\t\t}\n\t//\t\t});\n\t//\t}\n\t//\n\t//\tonclick (event) {\n\t//\t\tlet annotation = event.annotation;\n\t//\n\t//\t\tannotation.visible = !annotation.visible;\n\t//\n\t//\t\tif (annotation.visible) {\n\t//\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye.svg');\n\t//\t\t} else {\n\t//\t\t\tthis.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg');\n\t//\t\t}\n\t//\t}\n\t//};\n\n\t// threejs.org/license\n\tconst REVISION = '124';\n\tconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\n\tconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\n\tconst CullFaceNone = 0;\n\tconst CullFaceBack = 1;\n\tconst CullFaceFront = 2;\n\tconst CullFaceFrontBack = 3;\n\tconst BasicShadowMap = 0;\n\tconst PCFShadowMap = 1;\n\tconst PCFSoftShadowMap = 2;\n\tconst VSMShadowMap = 3;\n\tconst FrontSide = 0;\n\tconst BackSide = 1;\n\tconst DoubleSide = 2;\n\tconst FlatShading = 1;\n\tconst SmoothShading = 2;\n\tconst NoBlending = 0;\n\tconst NormalBlending = 1;\n\tconst AdditiveBlending = 2;\n\tconst SubtractiveBlending = 3;\n\tconst MultiplyBlending = 4;\n\tconst CustomBlending = 5;\n\tconst AddEquation = 100;\n\tconst SubtractEquation = 101;\n\tconst ReverseSubtractEquation = 102;\n\tconst MinEquation = 103;\n\tconst MaxEquation = 104;\n\tconst ZeroFactor = 200;\n\tconst OneFactor = 201;\n\tconst SrcColorFactor = 202;\n\tconst OneMinusSrcColorFactor = 203;\n\tconst SrcAlphaFactor = 204;\n\tconst OneMinusSrcAlphaFactor = 205;\n\tconst DstAlphaFactor = 206;\n\tconst OneMinusDstAlphaFactor = 207;\n\tconst DstColorFactor = 208;\n\tconst OneMinusDstColorFactor = 209;\n\tconst SrcAlphaSaturateFactor = 210;\n\tconst NeverDepth = 0;\n\tconst AlwaysDepth = 1;\n\tconst LessDepth = 2;\n\tconst LessEqualDepth = 3;\n\tconst EqualDepth = 4;\n\tconst GreaterEqualDepth = 5;\n\tconst GreaterDepth = 6;\n\tconst NotEqualDepth = 7;\n\tconst MultiplyOperation = 0;\n\tconst MixOperation = 1;\n\tconst AddOperation = 2;\n\tconst NoToneMapping = 0;\n\tconst LinearToneMapping = 1;\n\tconst ReinhardToneMapping = 2;\n\tconst CineonToneMapping = 3;\n\tconst ACESFilmicToneMapping = 4;\n\tconst CustomToneMapping = 5;\n\n\tconst UVMapping = 300;\n\tconst CubeReflectionMapping = 301;\n\tconst CubeRefractionMapping = 302;\n\tconst EquirectangularReflectionMapping = 303;\n\tconst EquirectangularRefractionMapping = 304;\n\tconst CubeUVReflectionMapping = 306;\n\tconst CubeUVRefractionMapping = 307;\n\tconst RepeatWrapping = 1000;\n\tconst ClampToEdgeWrapping = 1001;\n\tconst MirroredRepeatWrapping = 1002;\n\tconst NearestFilter = 1003;\n\tconst NearestMipmapNearestFilter = 1004;\n\tconst NearestMipMapNearestFilter = 1004;\n\tconst NearestMipmapLinearFilter = 1005;\n\tconst NearestMipMapLinearFilter = 1005;\n\tconst LinearFilter = 1006;\n\tconst LinearMipmapNearestFilter = 1007;\n\tconst LinearMipMapNearestFilter = 1007;\n\tconst LinearMipmapLinearFilter = 1008;\n\tconst LinearMipMapLinearFilter = 1008;\n\tconst UnsignedByteType = 1009;\n\tconst ByteType = 1010;\n\tconst ShortType = 1011;\n\tconst UnsignedShortType = 1012;\n\tconst IntType = 1013;\n\tconst UnsignedIntType = 1014;\n\tconst FloatType = 1015;\n\tconst HalfFloatType = 1016;\n\tconst UnsignedShort4444Type = 1017;\n\tconst UnsignedShort5551Type = 1018;\n\tconst UnsignedShort565Type = 1019;\n\tconst UnsignedInt248Type$1 = 1020;\n\tconst AlphaFormat = 1021;\n\tconst RGBFormat = 1022;\n\tconst RGBAFormat = 1023;\n\tconst LuminanceFormat = 1024;\n\tconst LuminanceAlphaFormat = 1025;\n\tconst RGBEFormat = RGBAFormat;\n\tconst DepthFormat = 1026;\n\tconst DepthStencilFormat = 1027;\n\tconst RedFormat = 1028;\n\tconst RedIntegerFormat = 1029;\n\tconst RGFormat = 1030;\n\tconst RGIntegerFormat = 1031;\n\tconst RGBIntegerFormat = 1032;\n\tconst RGBAIntegerFormat = 1033;\n\n\tconst RGB_S3TC_DXT1_Format = 33776;\n\tconst RGBA_S3TC_DXT1_Format$1 = 33777;\n\tconst RGBA_S3TC_DXT3_Format = 33778;\n\tconst RGBA_S3TC_DXT5_Format$1 = 33779;\n\tconst RGB_PVRTC_4BPPV1_Format = 35840;\n\tconst RGB_PVRTC_2BPPV1_Format = 35841;\n\tconst RGBA_PVRTC_4BPPV1_Format = 35842;\n\tconst RGBA_PVRTC_2BPPV1_Format = 35843;\n\tconst RGB_ETC1_Format = 36196;\n\tconst RGB_ETC2_Format = 37492;\n\tconst RGBA_ETC2_EAC_Format = 37496;\n\tconst RGBA_ASTC_4x4_Format = 37808;\n\tconst RGBA_ASTC_5x4_Format = 37809;\n\tconst RGBA_ASTC_5x5_Format = 37810;\n\tconst RGBA_ASTC_6x5_Format = 37811;\n\tconst RGBA_ASTC_6x6_Format = 37812;\n\tconst RGBA_ASTC_8x5_Format = 37813;\n\tconst RGBA_ASTC_8x6_Format = 37814;\n\tconst RGBA_ASTC_8x8_Format = 37815;\n\tconst RGBA_ASTC_10x5_Format = 37816;\n\tconst RGBA_ASTC_10x6_Format = 37817;\n\tconst RGBA_ASTC_10x8_Format = 37818;\n\tconst RGBA_ASTC_10x10_Format = 37819;\n\tconst RGBA_ASTC_12x10_Format = 37820;\n\tconst RGBA_ASTC_12x12_Format = 37821;\n\tconst RGBA_BPTC_Format = 36492;\n\tconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\n\tconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\n\tconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\n\tconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\n\tconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\n\tconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\n\tconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\n\tconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\n\tconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\n\tconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\n\tconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\n\tconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\n\tconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\n\tconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\n\tconst LoopOnce = 2200;\n\tconst LoopRepeat = 2201;\n\tconst LoopPingPong = 2202;\n\tconst InterpolateDiscrete = 2300;\n\tconst InterpolateLinear = 2301;\n\tconst InterpolateSmooth = 2302;\n\tconst ZeroCurvatureEnding = 2400;\n\tconst ZeroSlopeEnding = 2401;\n\tconst WrapAroundEnding = 2402;\n\tconst NormalAnimationBlendMode = 2500;\n\tconst AdditiveAnimationBlendMode = 2501;\n\tconst TrianglesDrawMode = 0;\n\tconst TriangleStripDrawMode = 1;\n\tconst TriangleFanDrawMode = 2;\n\tconst LinearEncoding = 3000;\n\tconst sRGBEncoding = 3001;\n\tconst GammaEncoding = 3007;\n\tconst RGBEEncoding = 3002;\n\tconst LogLuvEncoding = 3003;\n\tconst RGBM7Encoding = 3004;\n\tconst RGBM16Encoding = 3005;\n\tconst RGBDEncoding = 3006;\n\tconst BasicDepthPacking = 3200;\n\tconst RGBADepthPacking = 3201;\n\tconst TangentSpaceNormalMap = 0;\n\tconst ObjectSpaceNormalMap = 1;\n\n\tconst ZeroStencilOp = 0;\n\tconst KeepStencilOp = 7680;\n\tconst ReplaceStencilOp = 7681;\n\tconst IncrementStencilOp = 7682;\n\tconst DecrementStencilOp = 7683;\n\tconst IncrementWrapStencilOp = 34055;\n\tconst DecrementWrapStencilOp = 34056;\n\tconst InvertStencilOp = 5386;\n\n\tconst NeverStencilFunc = 512;\n\tconst LessStencilFunc = 513;\n\tconst EqualStencilFunc = 514;\n\tconst LessEqualStencilFunc = 515;\n\tconst GreaterStencilFunc = 516;\n\tconst NotEqualStencilFunc = 517;\n\tconst GreaterEqualStencilFunc = 518;\n\tconst AlwaysStencilFunc = 519;\n\n\tconst StaticDrawUsage = 35044;\n\tconst DynamicDrawUsage = 35048;\n\tconst StreamDrawUsage = 35040;\n\tconst StaticReadUsage = 35045;\n\tconst DynamicReadUsage = 35049;\n\tconst StreamReadUsage = 35041;\n\tconst StaticCopyUsage = 35046;\n\tconst DynamicCopyUsage = 35050;\n\tconst StreamCopyUsage = 35042;\n\n\tconst GLSL1 = '100';\n\tconst GLSL3 = '300 es';\n\n\t/**\n\t * https://github.com/mrdoob/eventdispatcher.js/\n\t */\n\n\tfunction EventDispatcher$1() {}\n\n\tObject.assign( EventDispatcher$1.prototype, {\n\n\t\taddEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\t\tconst listeners = this._listeners;\n\n\t\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\t\tlisteners[ type ] = [];\n\n\t\t\t}\n\n\t\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\t\tlisteners[ type ].push( listener );\n\n\t\t\t}\n\n\t\t},\n\n\t\thasEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) return false;\n\n\t\t\tconst listeners = this._listeners;\n\n\t\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t\t},\n\n\t\tremoveEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) return;\n\n\t\t\tconst listeners = this._listeners;\n\t\t\tconst listenerArray = listeners[ type ];\n\n\t\t\tif ( listenerArray !== undefined ) {\n\n\t\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tdispatchEvent: function ( event ) {\n\n\t\t\tif ( this._listeners === undefined ) return;\n\n\t\t\tconst listeners = this._listeners;\n\t\t\tconst listenerArray = listeners[ event.type ];\n\n\t\t\tif ( listenerArray !== undefined ) {\n\n\t\t\t\tevent.target = this;\n\n\t\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tconst _lut = [];\n\n\tfor ( let i = 0; i < 256; i ++ ) {\n\n\t\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n\t}\n\n\tlet _seed = 1234567;\n\n\tconst MathUtils = {\n\n\t\tDEG2RAD: Math.PI / 180,\n\t\tRAD2DEG: 180 / Math.PI,\n\n\t\tgenerateUUID: function () {\n\n\t\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\t\tconst d0 = Math.random() * 0xffffffff | 0;\n\t\t\tconst d1 = Math.random() * 0xffffffff | 0;\n\t\t\tconst d2 = Math.random() * 0xffffffff | 0;\n\t\t\tconst d3 = Math.random() * 0xffffffff | 0;\n\t\t\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\t\treturn uuid.toUpperCase();\n\n\t\t},\n\n\t\tclamp: function ( value, min, max ) {\n\n\t\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t\t},\n\n\t\t// compute euclidian modulo of m % n\n\t\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\t\teuclideanModulo: function ( n, m ) {\n\n\t\t\treturn ( ( n % m ) + m ) % m;\n\n\t\t},\n\n\t\t// Linear mapping from range <a1, a2> to range <b1, b2>\n\n\t\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t\t},\n\n\t\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\t\tlerp: function ( x, y, t ) {\n\n\t\t\treturn ( 1 - t ) * x + t * y;\n\n\t\t},\n\n\t\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\t\tsmoothstep: function ( x, min, max ) {\n\n\t\t\tif ( x <= min ) return 0;\n\t\t\tif ( x >= max ) return 1;\n\n\t\t\tx = ( x - min ) / ( max - min );\n\n\t\t\treturn x * x * ( 3 - 2 * x );\n\n\t\t},\n\n\t\tsmootherstep: function ( x, min, max ) {\n\n\t\t\tif ( x <= min ) return 0;\n\t\t\tif ( x >= max ) return 1;\n\n\t\t\tx = ( x - min ) / ( max - min );\n\n\t\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t\t},\n\n\t\t// Random integer from <low, high> interval\n\n\t\trandInt: function ( low, high ) {\n\n\t\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t\t},\n\n\t\t// Random float from <low, high> interval\n\n\t\trandFloat: function ( low, high ) {\n\n\t\t\treturn low + Math.random() * ( high - low );\n\n\t\t},\n\n\t\t// Random float from <-range/2, range/2> interval\n\n\t\trandFloatSpread: function ( range ) {\n\n\t\t\treturn range * ( 0.5 - Math.random() );\n\n\t\t},\n\n\t\t// Deterministic pseudo-random float in the interval [ 0, 1 ]\n\n\t\tseededRandom: function ( s ) {\n\n\t\t\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t\t\t// Park-Miller algorithm\n\n\t\t\t_seed = _seed * 16807 % 2147483647;\n\n\t\t\treturn ( _seed - 1 ) / 2147483646;\n\n\t\t},\n\n\t\tdegToRad: function ( degrees ) {\n\n\t\t\treturn degrees * MathUtils.DEG2RAD;\n\n\t\t},\n\n\t\tradToDeg: function ( radians ) {\n\n\t\t\treturn radians * MathUtils.RAD2DEG;\n\n\t\t},\n\n\t\tisPowerOfTwo: function ( value ) {\n\n\t\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t\t},\n\n\t\tceilPowerOfTwo: function ( value ) {\n\n\t\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t\t},\n\n\t\tfloorPowerOfTwo: function ( value ) {\n\n\t\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t\t},\n\n\t\tsetQuaternionFromProperEuler: function ( q, a, b, c, order ) {\n\n\t\t\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t\t\t// rotations are applied to the axes in the order specified by 'order'\n\t\t\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t\t\t// angles are in radians\n\n\t\t\tconst cos = Math.cos;\n\t\t\tconst sin = Math.sin;\n\n\t\t\tconst c2 = cos( b / 2 );\n\t\t\tconst s2 = sin( b / 2 );\n\n\t\t\tconst c13 = cos( ( a + c ) / 2 );\n\t\t\tconst s13 = sin( ( a + c ) / 2 );\n\n\t\t\tconst c1_3 = cos( ( a - c ) / 2 );\n\t\t\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\t\t\tconst c3_1 = cos( ( c - a ) / 2 );\n\t\t\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\t\t\tswitch ( order ) {\n\n\t\t\t\tcase 'XYX':\n\t\t\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YZY':\n\t\t\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZXZ':\n\t\t\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'XZX':\n\t\t\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YXY':\n\t\t\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZYZ':\n\t\t\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tclass Vector2 {\n\n\t\tconstructor( x = 0, y = 0 ) {\n\n\t\t\tObject.defineProperty( this, 'isVector2', { value: true } );\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\n\t\t}\n\n\t\tget width() {\n\n\t\t\treturn this.x;\n\n\t\t}\n\n\t\tset width( value ) {\n\n\t\t\tthis.x = value;\n\n\t\t}\n\n\t\tget height() {\n\n\t\t\treturn this.y;\n\n\t\t}\n\n\t\tset height( value ) {\n\n\t\t\tthis.y = value;\n\n\t\t}\n\n\t\tset( x, y ) {\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetScalar( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetX( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetY( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetComponent( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetComponent( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor( this.x, this.y );\n\n\t\t}\n\n\t\tcopy( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tadd( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddScalar( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddVectors( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddScaledVector( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsub( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsubScalar( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsubVectors( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiply( v ) {\n\n\t\t\tthis.x *= v.x;\n\t\t\tthis.y *= v.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiplyScalar( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdivide( v ) {\n\n\t\t\tthis.x /= v.x;\n\t\t\tthis.y /= v.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdivideScalar( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t}\n\n\t\tapplyMatrix3( m ) {\n\n\t\t\tconst x = this.x, y = this.y;\n\t\t\tconst e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmin( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmax( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclamp( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclampScalar( minVal, maxVal ) {\n\n\t\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclampLength( min, max ) {\n\n\t\t\tconst length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t}\n\n\t\tfloor() {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tceil() {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tround() {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\troundToZero() {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tnegate() {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdot( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y;\n\n\t\t}\n\n\t\tcross( v ) {\n\n\t\t\treturn this.x * v.y - this.y * v.x;\n\n\t\t}\n\n\t\tlengthSq() {\n\n\t\t\treturn this.x * this.x + this.y * this.y;\n\n\t\t}\n\n\t\tlength() {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t\t}\n\n\t\tmanhattanLength() {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t\t}\n\n\t\tnormalize() {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t}\n\n\t\tangle() {\n\n\t\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\t\treturn angle;\n\n\t\t}\n\n\t\tdistanceTo( v ) {\n\n\t\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t\t}\n\n\t\tdistanceToSquared( v ) {\n\n\t\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\t\treturn dx * dx + dy * dy;\n\n\t\t}\n\n\t\tmanhattanDistanceTo( v ) {\n\n\t\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t\t}\n\n\t\tsetLength( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t}\n\n\t\tlerp( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tlerpVectors( v1, v2, alpha ) {\n\n\t\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t\t}\n\n\t\tfromArray( array, offset = 0 ) {\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\trotateAround( center, angle ) {\n\n\t\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\t\tconst x = this.x - center.x;\n\t\t\tconst y = this.y - center.y;\n\n\t\t\tthis.x = x * c - y * s + center.x;\n\t\t\tthis.y = x * s + y * c + center.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\trandom() {\n\n\t\t\tthis.x = Math.random();\n\t\t\tthis.y = Math.random();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tclass Matrix3 {\n\n\t\tconstructor() {\n\n\t\t\tObject.defineProperty( this, 'isMatrix3', { value: true } );\n\n\t\t\tthis.elements = [\n\n\t\t\t\t1, 0, 0,\n\t\t\t\t0, 1, 0,\n\t\t\t\t0, 0, 1\n\n\t\t\t];\n\n\t\t\tif ( arguments.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tidentity() {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0,\n\t\t\t\t0, 1, 0,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().fromArray( this.elements );\n\n\t\t}\n\n\t\tcopy( m ) {\n\n\t\t\tconst te = this.elements;\n\t\t\tconst me = m.elements;\n\n\t\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromMatrix4( m ) {\n\n\t\t\tconst me = m.elements;\n\n\t\t\tthis.set(\n\n\t\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiply( m ) {\n\n\t\t\treturn this.multiplyMatrices( this, m );\n\n\t\t}\n\n\t\tpremultiply( m ) {\n\n\t\t\treturn this.multiplyMatrices( m, this );\n\n\t\t}\n\n\t\tmultiplyMatrices( a, b ) {\n\n\t\t\tconst ae = a.elements;\n\t\t\tconst be = b.elements;\n\t\t\tconst te = this.elements;\n\n\t\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiplyScalar( s ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdeterminant() {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t\t}\n\n\t\tinvert() {\n\n\t\t\tconst te = this.elements,\n\n\t\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\t\tconst detInv = 1 / det;\n\n\t\t\tte[ 0 ] = t11 * detInv;\n\t\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\t\tte[ 3 ] = t12 * detInv;\n\t\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\t\tte[ 6 ] = t13 * detInv;\n\t\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttranspose() {\n\n\t\t\tlet tmp;\n\t\t\tconst m = this.elements;\n\n\t\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetNormalMatrix( matrix4 ) {\n\n\t\t\treturn this.setFromMatrix4( matrix4 ).copy( this ).invert().transpose();\n\n\t\t}\n\n\t\ttransposeIntoArray( r ) {\n\n\t\t\tconst m = this.elements;\n\n\t\t\tr[ 0 ] = m[ 0 ];\n\t\t\tr[ 1 ] = m[ 3 ];\n\t\t\tr[ 2 ] = m[ 6 ];\n\t\t\tr[ 3 ] = m[ 1 ];\n\t\t\tr[ 4 ] = m[ 4 ];\n\t\t\tr[ 5 ] = m[ 7 ];\n\t\t\tr[ 6 ] = m[ 2 ];\n\t\t\tr[ 7 ] = m[ 5 ];\n\t\t\tr[ 8 ] = m[ 8 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\t\tconst c = Math.cos( rotation );\n\t\t\tconst s = Math.sin( rotation );\n\n\t\t\tthis.set(\n\t\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t\t0, 0, 1\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tscale( sx, sy ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\trotate( theta ) {\n\n\t\t\tconst c = Math.cos( theta );\n\t\t\tconst s = Math.sin( theta );\n\n\t\t\tconst te = this.elements;\n\n\t\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\t\tte[ 0 ] = c * a11 + s * a21;\n\t\t\tte[ 3 ] = c * a12 + s * a22;\n\t\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttranslate( tx, ty ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( matrix ) {\n\n\t\t\tconst te = this.elements;\n\t\t\tconst me = matrix.elements;\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfromArray( array, offset = 0 ) {\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tarray[ offset ] = te[ 0 ];\n\t\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\t\treturn array;\n\n\t\t}\n\n\t}\n\n\tlet _canvas;\n\n\tconst ImageUtils = {\n\n\t\tgetDataURL: function ( image ) {\n\n\t\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\t\treturn image.src;\n\n\t\t\t}\n\n\t\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\t\treturn image.src;\n\n\t\t\t}\n\n\t\t\tlet canvas;\n\n\t\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\t\tcanvas = image;\n\n\t\t\t} else {\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t\t_canvas.width = image.width;\n\t\t\t\t_canvas.height = image.height;\n\n\t\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tcanvas = _canvas;\n\n\t\t\t}\n\n\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t\t} else {\n\n\t\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tlet textureId = 0;\n\n\tfunction Texture( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.image = image;\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t}\n\n\tTexture.DEFAULT_IMAGE = undefined;\n\tTexture.DEFAULT_MAPPING = UVMapping;\n\n\tTexture.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), {\n\n\t\tconstructor: Texture,\n\n\t\tisTexture: true,\n\n\t\tupdateMatrix: function () {\n\n\t\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.image = source.image;\n\t\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\t\tthis.mapping = source.mapping;\n\n\t\t\tthis.wrapS = source.wrapS;\n\t\t\tthis.wrapT = source.wrapT;\n\n\t\t\tthis.magFilter = source.magFilter;\n\t\t\tthis.minFilter = source.minFilter;\n\n\t\t\tthis.anisotropy = source.anisotropy;\n\n\t\t\tthis.format = source.format;\n\t\t\tthis.internalFormat = source.internalFormat;\n\t\t\tthis.type = source.type;\n\n\t\t\tthis.offset.copy( source.offset );\n\t\t\tthis.repeat.copy( source.repeat );\n\t\t\tthis.center.copy( source.center );\n\t\t\tthis.rotation = source.rotation;\n\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\tthis.matrix.copy( source.matrix );\n\n\t\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\t\tthis.flipY = source.flipY;\n\t\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\t\tthis.encoding = source.encoding;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t\t}\n\n\t\t\tconst output = {\n\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Texture',\n\t\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t\t},\n\n\t\t\t\tuuid: this.uuid,\n\t\t\t\tname: this.name,\n\n\t\t\t\tmapping: this.mapping,\n\n\t\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\t\trotation: this.rotation,\n\n\t\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\t\tformat: this.format,\n\t\t\t\ttype: this.type,\n\t\t\t\tencoding: this.encoding,\n\n\t\t\t\tminFilter: this.minFilter,\n\t\t\t\tmagFilter: this.magFilter,\n\t\t\t\tanisotropy: this.anisotropy,\n\n\t\t\t\tflipY: this.flipY,\n\n\t\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t\t};\n\n\t\t\tif ( this.image !== undefined ) {\n\n\t\t\t\t// TODO: Move to THREE.Image\n\n\t\t\t\tconst image = this.image;\n\n\t\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\t\timage.uuid = MathUtils.generateUUID(); // UGH\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\t\tlet url;\n\n\t\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\t\turl = [];\n\n\t\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t// check cube texture with data textures\n\n\t\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// process single image\n\n\t\t\t\t\t\turl = serializeImage( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\t\turl: url\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\toutput.image = image.uuid;\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject ) {\n\n\t\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t\t}\n\n\t\t\treturn output;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t},\n\n\t\ttransformUv: function ( uv ) {\n\n\t\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\t\tuv.applyMatrix3( this.matrix );\n\n\t\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.flipY ) {\n\n\t\t\t\tuv.y = 1 - uv.y;\n\n\t\t\t}\n\n\t\t\treturn uv;\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperty( Texture.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tfunction serializeImage( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t// default images\n\n\t\t\treturn ImageUtils.getDataURL( image );\n\n\t\t} else {\n\n\t\t\tif ( image.data ) {\n\n\t\t\t\t// images of DataTexture\n\n\t\t\t\treturn {\n\t\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\t\twidth: image.width,\n\t\t\t\t\theight: image.height,\n\t\t\t\t\ttype: image.data.constructor.name\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\t\treturn {};\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass Vector4 {\n\n\t\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\t\tObject.defineProperty( this, 'isVector4', { value: true } );\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\n\t\t}\n\n\t\tget width() {\n\n\t\t\treturn this.z;\n\n\t\t}\n\n\t\tset width( value ) {\n\n\t\t\tthis.z = value;\n\n\t\t}\n\n\t\tget height() {\n\n\t\t\treturn this.w;\n\n\t\t}\n\n\t\tset height( value ) {\n\n\t\t\tthis.w = value;\n\n\t\t}\n\n\t\tset( x, y, z, w ) {\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetScalar( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\tthis.z = scalar;\n\t\t\tthis.w = scalar;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetX( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetY( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetZ( z ) {\n\n\t\t\tthis.z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetW( w ) {\n\n\t\t\tthis.w = w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetComponent( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tcase 2: this.z = value; break;\n\t\t\t\tcase 3: this.w = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetComponent( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tcase 2: return this.z;\n\t\t\t\tcase 3: return this.w;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t\t}\n\n\t\tcopy( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\tthis.z = v.z;\n\t\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tadd( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\tthis.z += v.z;\n\t\t\tthis.w += v.w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddScalar( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\tthis.z += s;\n\t\t\tthis.w += s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddVectors( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\tthis.z = a.z + b.z;\n\t\t\tthis.w = a.w + b.w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddScaledVector( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\tthis.z += v.z * s;\n\t\t\tthis.w += v.w * s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsub( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\tthis.z -= v.z;\n\t\t\tthis.w -= v.w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsubScalar( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\tthis.z -= s;\n\t\t\tthis.w -= s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsubVectors( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\tthis.z = a.z - b.z;\n\t\t\tthis.w = a.w - b.w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiplyScalar( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\tthis.z *= scalar;\n\t\t\tthis.w *= scalar;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tapplyMatrix4( m ) {\n\n\t\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\t\tconst e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdivideScalar( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t}\n\n\t\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t\t// q is assumed to be normalized\n\n\t\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\t\tif ( s < 0.0001 ) {\n\n\t\t\t\tthis.x = 1;\n\t\t\t\tthis.y = 0;\n\t\t\t\tthis.z = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.x = q.x / s;\n\t\t\t\tthis.y = q.y / s;\n\t\t\t\tthis.z = q.z / s;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tlet angle, x, y, z; // variables for result\n\t\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\t\tte = m.elements,\n\n\t\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t\t     ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t\t     ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t\t// singularity found\n\t\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t\t     ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t\t     ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t\t     ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t\t}\n\n\t\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\t\tangle = Math.PI;\n\n\t\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\t\ty = xy / x;\n\t\t\t\t\t\tz = xz / x;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\t\tx = xy / y;\n\t\t\t\t\t\tz = yz / y;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\t\tz = 0;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\t\tx = xz / z;\n\t\t\t\t\t\ty = yz / z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.set( x, y, z, angle );\n\n\t\t\t\treturn this; // return 180 deg rotation\n\n\t\t\t}\n\n\t\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\t\tthis.x = ( m32 - m23 ) / s;\n\t\t\tthis.y = ( m13 - m31 ) / s;\n\t\t\tthis.z = ( m21 - m12 ) / s;\n\t\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmin( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\t\t\tthis.z = Math.min( this.z, v.z );\n\t\t\tthis.w = Math.min( this.w, v.w );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmax( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\t\t\tthis.z = Math.max( this.z, v.z );\n\t\t\tthis.w = Math.max( this.w, v.w );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclamp( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclampScalar( minVal, maxVal ) {\n\n\t\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclampLength( min, max ) {\n\n\t\t\tconst length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t}\n\n\t\tfloor() {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\t\t\tthis.z = Math.floor( this.z );\n\t\t\tthis.w = Math.floor( this.w );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tceil() {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\t\t\tthis.z = Math.ceil( this.z );\n\t\t\tthis.w = Math.ceil( this.w );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tround() {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\t\t\tthis.z = Math.round( this.z );\n\t\t\tthis.w = Math.round( this.w );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\troundToZero() {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tnegate() {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\t\t\tthis.z = - this.z;\n\t\t\tthis.w = - this.w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdot( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t\t}\n\n\t\tlengthSq() {\n\n\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t\t}\n\n\t\tlength() {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t\t}\n\n\t\tmanhattanLength() {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t\t}\n\n\t\tnormalize() {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t}\n\n\t\tsetLength( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t}\n\n\t\tlerp( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tlerpVectors( v1, v2, alpha ) {\n\n\t\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t\t}\n\n\t\tfromArray( array, offset = 0 ) {\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\t\t\tthis.z = array[ offset + 2 ];\n\t\t\tthis.w = array[ offset + 3 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\t\t\tarray[ offset + 2 ] = this.z;\n\t\t\tarray[ offset + 3 ] = this.w;\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\t\t\tthis.z = attribute.getZ( index );\n\t\t\tthis.w = attribute.getW( index );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\trandom() {\n\n\t\t\tthis.x = Math.random();\n\t\t\tthis.y = Math.random();\n\t\t\tthis.z = Math.random();\n\t\t\tthis.w = Math.random();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\t/*\n\t In options, we can specify:\n\t * Texture parameters for an auto-generated target texture\n\t * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n\t*/\n\tfunction WebGLRenderTarget( width, height, options ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\toptions = options || {};\n\n\t\tthis.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.texture.image = {};\n\t\tthis.texture.image.width = width;\n\t\tthis.texture.image.height = height;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t}\n\n\tWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), {\n\n\t\tconstructor: WebGLRenderTarget,\n\n\t\tisWebGLRenderTarget: true,\n\n\t\tsetSize: function ( width, height ) {\n\n\t\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\t\tthis.width = width;\n\t\t\t\tthis.height = height;\n\n\t\t\t\tthis.texture.image.width = width;\n\t\t\t\tthis.texture.image.height = height;\n\n\t\t\t\tthis.dispose();\n\n\t\t\t}\n\n\t\t\tthis.viewport.set( 0, 0, width, height );\n\t\t\tthis.scissor.set( 0, 0, width, height );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.width = source.width;\n\t\t\tthis.height = source.height;\n\n\t\t\tthis.viewport.copy( source.viewport );\n\n\t\t\tthis.texture = source.texture.clone();\n\n\t\t\tthis.depthBuffer = source.depthBuffer;\n\t\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\t\tthis.depthTexture = source.depthTexture;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\tfunction WebGLMultisampleRenderTarget( width, height, options ) {\n\n\t\tWebGLRenderTarget.call( this, width, height, options );\n\n\t\tthis.samples = 4;\n\n\t}\n\n\tWebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), {\n\n\t\tconstructor: WebGLMultisampleRenderTarget,\n\n\t\tisWebGLMultisampleRenderTarget: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tWebGLRenderTarget.prototype.copy.call( this, source );\n\n\t\t\tthis.samples = source.samples;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tclass Quaternion {\n\n\t\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\t\tObject.defineProperty( this, 'isQuaternion', { value: true } );\n\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._w = w;\n\n\t\t}\n\n\t\tstatic slerp( qa, qb, qm, t ) {\n\n\t\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t\t}\n\n\t\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\t\tlet s = 1 - t;\n\t\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t\t}\n\n\t\t\t\tconst tDir = t * dir;\n\n\t\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t\t// Normalize in case we just did a lerp:\n\t\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\t\tx0 *= f;\n\t\t\t\t\ty0 *= f;\n\t\t\t\t\tz0 *= f;\n\t\t\t\t\tw0 *= f;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdst[ dstOffset ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\n\t\t}\n\n\t\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\t\tconst x0 = src0[ srcOffset0 ];\n\t\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\t\tconst x1 = src1[ srcOffset1 ];\n\t\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\t\treturn dst;\n\n\t\t}\n\n\t\tget x() {\n\n\t\t\treturn this._x;\n\n\t\t}\n\n\t\tset x( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t\tget y() {\n\n\t\t\treturn this._y;\n\n\t\t}\n\n\t\tset y( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t\tget z() {\n\n\t\t\treturn this._z;\n\n\t\t}\n\n\t\tset z( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t\tget w() {\n\n\t\t\treturn this._w;\n\n\t\t}\n\n\t\tset w( value ) {\n\n\t\t\tthis._w = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t\tset( x, y, z, w ) {\n\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._w = w;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t\t}\n\n\t\tcopy( quaternion ) {\n\n\t\t\tthis._x = quaternion.x;\n\t\t\tthis._y = quaternion.y;\n\t\t\tthis._z = quaternion.z;\n\t\t\tthis._w = quaternion.w;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromEuler( euler, update ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t\t//\tcontent/SpinCalc.m\n\n\t\t\tconst cos = Math.cos;\n\t\t\tconst sin = Math.sin;\n\n\t\t\tconst c1 = cos( x / 2 );\n\t\t\tconst c2 = cos( y / 2 );\n\t\t\tconst c3 = cos( z / 2 );\n\n\t\t\tconst s1 = sin( x / 2 );\n\t\t\tconst s2 = sin( y / 2 );\n\t\t\tconst s3 = sin( z / 2 );\n\n\t\t\tswitch ( order ) {\n\n\t\t\t\tcase 'XYZ':\n\t\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YXZ':\n\t\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZXY':\n\t\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZYX':\n\t\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YZX':\n\t\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'XZY':\n\t\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t\t}\n\n\t\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromAxisAngle( axis, angle ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t\t// assumes axis is normalized\n\n\t\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\t\tthis._x = axis.x * s;\n\t\t\tthis._y = axis.y * s;\n\t\t\tthis._z = axis.z * s;\n\t\t\tthis._w = Math.cos( halfAngle );\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromRotationMatrix( m ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tconst te = m.elements,\n\n\t\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\t\ttrace = m11 + m22 + m33;\n\n\t\t\tif ( trace > 0 ) {\n\n\t\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\t\tthis._w = 0.25 / s;\n\t\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\t\tthis._x = 0.25 * s;\n\t\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t\t} else if ( m22 > m33 ) {\n\n\t\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\t\tthis._y = 0.25 * s;\n\t\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t\t} else {\n\n\t\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\t\tthis._z = 0.25 * s;\n\n\t\t\t}\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\t\tconst EPS = 0.000001;\n\n\t\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\t\tif ( r < EPS ) {\n\n\t\t\t\tr = 0;\n\n\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\t\tthis._y = vFrom.x;\n\t\t\t\t\tthis._z = 0;\n\t\t\t\t\tthis._w = r;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\t\tthis._z = vFrom.y;\n\t\t\t\t\tthis._w = r;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t\treturn this.normalize();\n\n\t\t}\n\n\t\tangleTo( q ) {\n\n\t\t\treturn 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t\t}\n\n\t\trotateTowards( q, step ) {\n\n\t\t\tconst angle = this.angleTo( q );\n\n\t\t\tif ( angle === 0 ) return this;\n\n\t\t\tconst t = Math.min( 1, step / angle );\n\n\t\t\tthis.slerp( q, t );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tidentity() {\n\n\t\t\treturn this.set( 0, 0, 0, 1 );\n\n\t\t}\n\n\t\tinvert() {\n\n\t\t\t// quaternion is assumed to have unit length\n\n\t\t\treturn this.conjugate();\n\n\t\t}\n\n\t\tconjugate() {\n\n\t\t\tthis._x *= - 1;\n\t\t\tthis._y *= - 1;\n\t\t\tthis._z *= - 1;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdot( v ) {\n\n\t\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t\t}\n\n\t\tlengthSq() {\n\n\t\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t\t}\n\n\t\tlength() {\n\n\t\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t\t}\n\n\t\tnormalize() {\n\n\t\t\tlet l = this.length();\n\n\t\t\tif ( l === 0 ) {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = 1;\n\n\t\t\t} else {\n\n\t\t\t\tl = 1 / l;\n\n\t\t\t\tthis._x = this._x * l;\n\t\t\t\tthis._y = this._y * l;\n\t\t\t\tthis._z = this._z * l;\n\t\t\t\tthis._w = this._w * l;\n\n\t\t\t}\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiply( q, p ) {\n\n\t\t\tif ( p !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t\t}\n\n\t\t\treturn this.multiplyQuaternions( this, q );\n\n\t\t}\n\n\t\tpremultiply( q ) {\n\n\t\t\treturn this.multiplyQuaternions( q, this );\n\n\t\t}\n\n\t\tmultiplyQuaternions( a, b ) {\n\n\t\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tslerp( qb, t ) {\n\n\t\t\tif ( t === 0 ) return this;\n\t\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\t\tthis._w = - qb._w;\n\t\t\t\tthis._x = - qb._x;\n\t\t\t\tthis._y = - qb._y;\n\t\t\t\tthis._z = - qb._z;\n\n\t\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t\t} else {\n\n\t\t\t\tthis.copy( qb );\n\n\t\t\t}\n\n\t\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\t\tthis._w = w;\n\t\t\t\tthis._x = x;\n\t\t\t\tthis._y = y;\n\t\t\t\tthis._z = z;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\t\tconst s = 1 - t;\n\t\t\t\tthis._w = s * w + t * this._w;\n\t\t\t\tthis._x = s * x + t * this._x;\n\t\t\t\tthis._y = s * y + t * this._y;\n\t\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\t\tthis.normalize();\n\t\t\t\tthis._onChangeCallback();\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( quaternion ) {\n\n\t\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t\t}\n\n\t\tfromArray( array, offset = 0 ) {\n\n\t\t\tthis._x = array[ offset ];\n\t\t\tthis._y = array[ offset + 1 ];\n\t\t\tthis._z = array[ offset + 2 ];\n\t\t\tthis._w = array[ offset + 3 ];\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tarray[ offset ] = this._x;\n\t\t\tarray[ offset + 1 ] = this._y;\n\t\t\tarray[ offset + 2 ] = this._z;\n\t\t\tarray[ offset + 3 ] = this._w;\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfromBufferAttribute( attribute, index ) {\n\n\t\t\tthis._x = attribute.getX( index );\n\t\t\tthis._y = attribute.getY( index );\n\t\t\tthis._z = attribute.getZ( index );\n\t\t\tthis._w = attribute.getW( index );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_onChange( callback ) {\n\n\t\t\tthis._onChangeCallback = callback;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_onChangeCallback() {}\n\n\t}\n\n\tclass Vector3 {\n\n\t\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\t\tObject.defineProperty( this, 'isVector3', { value: true } );\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\n\t\t}\n\n\t\tset( x, y, z ) {\n\n\t\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetScalar( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\tthis.z = scalar;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetX( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetY( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetZ( z ) {\n\n\t\t\tthis.z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetComponent( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tcase 2: this.z = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetComponent( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tcase 2: return this.z;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t\t}\n\n\t\tcopy( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\tthis.z = v.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tadd( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\tthis.z += v.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddScalar( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\tthis.z += s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddVectors( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\tthis.z = a.z + b.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddScaledVector( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\tthis.z += v.z * s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsub( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\tthis.z -= v.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsubScalar( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\tthis.z -= s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsubVectors( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\tthis.z = a.z - b.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiply( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x *= v.x;\n\t\t\tthis.y *= v.y;\n\t\t\tthis.z *= v.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiplyScalar( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\tthis.z *= scalar;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiplyVectors( a, b ) {\n\n\t\t\tthis.x = a.x * b.x;\n\t\t\tthis.y = a.y * b.y;\n\t\t\tthis.z = a.z * b.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tapplyEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion( _quaternion.setFromEuler( euler ) );\n\n\t\t}\n\n\t\tapplyAxisAngle( axis, angle ) {\n\n\t\t\treturn this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t}\n\n\t\tapplyMatrix3( m ) {\n\n\t\t\tconst x = this.x, y = this.y, z = this.z;\n\t\t\tconst e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tapplyNormalMatrix( m ) {\n\n\t\t\treturn this.applyMatrix3( m ).normalize();\n\n\t\t}\n\n\t\tapplyMatrix4( m ) {\n\n\t\t\tconst x = this.x, y = this.y, z = this.z;\n\t\t\tconst e = m.elements;\n\n\t\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tapplyQuaternion( q ) {\n\n\t\t\tconst x = this.x, y = this.y, z = this.z;\n\t\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t\t// calculate quat * vector\n\n\t\t\tconst ix = qw * x + qy * z - qz * y;\n\t\t\tconst iy = qw * y + qz * x - qx * z;\n\t\t\tconst iz = qw * z + qx * y - qy * x;\n\t\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t\t// calculate result * inverse quat\n\n\t\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tproject( camera ) {\n\n\t\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t\t}\n\n\t\tunproject( camera ) {\n\n\t\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t\t}\n\n\t\ttransformDirection( m ) {\n\n\t\t\t// input: THREE.Matrix4 affine matrix\n\t\t\t// vector interpreted as a direction\n\n\t\t\tconst x = this.x, y = this.y, z = this.z;\n\t\t\tconst e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\t\treturn this.normalize();\n\n\t\t}\n\n\t\tdivide( v ) {\n\n\t\t\tthis.x /= v.x;\n\t\t\tthis.y /= v.y;\n\t\t\tthis.z /= v.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdivideScalar( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t}\n\n\t\tmin( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\t\t\tthis.z = Math.min( this.z, v.z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmax( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\t\t\tthis.z = Math.max( this.z, v.z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclamp( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclampScalar( minVal, maxVal ) {\n\n\t\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclampLength( min, max ) {\n\n\t\t\tconst length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t}\n\n\t\tfloor() {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\t\t\tthis.z = Math.floor( this.z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tceil() {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\t\t\tthis.z = Math.ceil( this.z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tround() {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\t\t\tthis.z = Math.round( this.z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\troundToZero() {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tnegate() {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\t\t\tthis.z = - this.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdot( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t\t}\n\n\t\t// TODO lengthSquared?\n\n\t\tlengthSq() {\n\n\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t\t}\n\n\t\tlength() {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t\t}\n\n\t\tmanhattanLength() {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t\t}\n\n\t\tnormalize() {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t}\n\n\t\tsetLength( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t}\n\n\t\tlerp( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tlerpVectors( v1, v2, alpha ) {\n\n\t\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcross( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\t\treturn this.crossVectors( v, w );\n\n\t\t\t}\n\n\t\t\treturn this.crossVectors( this, v );\n\n\t\t}\n\n\t\tcrossVectors( a, b ) {\n\n\t\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\t\tthis.x = ay * bz - az * by;\n\t\t\tthis.y = az * bx - ax * bz;\n\t\t\tthis.z = ax * by - ay * bx;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tprojectOnVector( v ) {\n\n\t\t\tconst denominator = v.lengthSq();\n\n\t\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t\t}\n\n\t\tprojectOnPlane( planeNormal ) {\n\n\t\t\t_vector.copy( this ).projectOnVector( planeNormal );\n\n\t\t\treturn this.sub( _vector );\n\n\t\t}\n\n\t\treflect( normal ) {\n\n\t\t\t// reflect incident vector off plane orthogonal to normal\n\t\t\t// normal is assumed to have unit length\n\n\t\t\treturn this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t}\n\n\t\tangleTo( v ) {\n\n\t\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t\t// clamp, to handle numerical problems\n\n\t\t\treturn Math.acos( MathUtils.clamp( theta, - 1, 1 ) );\n\n\t\t}\n\n\t\tdistanceTo( v ) {\n\n\t\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t\t}\n\n\t\tdistanceToSquared( v ) {\n\n\t\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t\t}\n\n\t\tmanhattanDistanceTo( v ) {\n\n\t\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t\t}\n\n\t\tsetFromSpherical( s ) {\n\n\t\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t\t}\n\n\t\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\t\tthis.y = Math.cos( phi ) * radius;\n\t\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromCylindrical( c ) {\n\n\t\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t\t}\n\n\t\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\t\tthis.x = radius * Math.sin( theta );\n\t\t\tthis.y = y;\n\t\t\tthis.z = radius * Math.cos( theta );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromMatrixPosition( m ) {\n\n\t\t\tconst e = m.elements;\n\n\t\t\tthis.x = e[ 12 ];\n\t\t\tthis.y = e[ 13 ];\n\t\t\tthis.z = e[ 14 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromMatrixScale( m ) {\n\n\t\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tthis.x = sx;\n\t\t\tthis.y = sy;\n\t\t\tthis.z = sz;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromMatrixColumn( m, index ) {\n\n\t\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t\t}\n\n\t\tsetFromMatrix3Column( m, index ) {\n\n\t\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t\t}\n\n\t\tequals( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t\t}\n\n\t\tfromArray( array, offset = 0 ) {\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\t\t\tthis.z = array[ offset + 2 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\t\t\tarray[ offset + 2 ] = this.z;\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\t\t\tthis.z = attribute.getZ( index );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\trandom() {\n\n\t\t\tthis.x = Math.random();\n\t\t\tthis.y = Math.random();\n\t\t\tthis.z = Math.random();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tconst _vector = /*@__PURE__*/ new Vector3();\n\tconst _quaternion = /*@__PURE__*/ new Quaternion();\n\n\tclass Box3 {\n\n\t\tconstructor( min, max ) {\n\n\t\t\tObject.defineProperty( this, 'isBox3', { value: true } );\n\n\t\t\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\t\t\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n\t\t}\n\n\t\tset( min, max ) {\n\n\t\t\tthis.min.copy( min );\n\t\t\tthis.max.copy( max );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromArray( array ) {\n\n\t\t\tlet minX = + Infinity;\n\t\t\tlet minY = + Infinity;\n\t\t\tlet minZ = + Infinity;\n\n\t\t\tlet maxX = - Infinity;\n\t\t\tlet maxY = - Infinity;\n\t\t\tlet maxZ = - Infinity;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst x = array[ i ];\n\t\t\t\tconst y = array[ i + 1 ];\n\t\t\t\tconst z = array[ i + 2 ];\n\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\t\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t\t}\n\n\t\t\tthis.min.set( minX, minY, minZ );\n\t\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromBufferAttribute( attribute ) {\n\n\t\t\tlet minX = + Infinity;\n\t\t\tlet minY = + Infinity;\n\t\t\tlet minZ = + Infinity;\n\n\t\t\tlet maxX = - Infinity;\n\t\t\tlet maxY = - Infinity;\n\t\t\tlet maxZ = - Infinity;\n\n\t\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tconst x = attribute.getX( i );\n\t\t\t\tconst y = attribute.getY( i );\n\t\t\t\tconst z = attribute.getZ( i );\n\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\t\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t\t}\n\n\t\t\tthis.min.set( minX, minY, minZ );\n\t\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromPoints( points ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromCenterAndSize( center, size ) {\n\n\t\t\tconst halfSize = _vector$1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromObject( object ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\treturn this.expandByObject( object );\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( box ) {\n\n\t\t\tthis.min.copy( box.min );\n\t\t\tthis.max.copy( box.max );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeEmpty() {\n\n\t\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tisEmpty() {\n\n\t\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t\t}\n\n\t\tgetCenter( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t\t}\n\n\t\tgetSize( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t\t}\n\n\t\texpandByPoint( point ) {\n\n\t\t\tthis.min.min( point );\n\t\t\tthis.max.max( point );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\texpandByVector( vector ) {\n\n\t\t\tthis.min.sub( vector );\n\t\t\tthis.max.add( vector );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\texpandByScalar( scalar ) {\n\n\t\t\tthis.min.addScalar( - scalar );\n\t\t\tthis.max.addScalar( scalar );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\texpandByObject( object ) {\n\n\t\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t\t// accounting for both the object's, and children's, world transforms\n\n\t\t\tobject.updateWorldMatrix( false, false );\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t}\n\n\t\t\t\t_box.copy( geometry.boundingBox );\n\t\t\t\t_box.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box );\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcontainsPoint( point ) {\n\n\t\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t\t}\n\n\t\tcontainsBox( box ) {\n\n\t\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t\t}\n\n\t\tgetParameter( point, target ) {\n\n\t\t\t// This can potentially have a divide by zero if the box\n\t\t\t// has a size dimension of 0.\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.set(\n\t\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t\t);\n\n\t\t}\n\n\t\tintersectsBox( box ) {\n\n\t\t\t// using 6 splitting planes to rule out intersections.\n\t\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t\t}\n\n\t\tintersectsSphere( sphere ) {\n\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint( sphere.center, _vector$1 );\n\n\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\treturn _vector$1.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t}\n\n\t\tintersectsPlane( plane ) {\n\n\t\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\t\tlet min, max;\n\n\t\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t\t} else {\n\n\t\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t\t}\n\n\t\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t\t} else {\n\n\t\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t\t}\n\n\t\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t\t} else {\n\n\t\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t\t}\n\n\t\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t\t}\n\n\t\tintersectsTriangle( triangle ) {\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// compute box center and extents\n\t\t\tthis.getCenter( _center );\n\t\t\t_extents.subVectors( this.max, _center );\n\n\t\t\t// translate triangle to aabb origin\n\t\t\t_v0.subVectors( triangle.a, _center );\n\t\t\t_v1.subVectors( triangle.b, _center );\n\t\t\t_v2.subVectors( triangle.c, _center );\n\n\t\t\t// compute edge vectors for triangle\n\t\t\t_f0.subVectors( _v1, _v0 );\n\t\t\t_f1.subVectors( _v2, _v1 );\n\t\t\t_f2.subVectors( _v0, _v2 );\n\n\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\tlet axes = [\n\t\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t\t];\n\t\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// test 3 face normals from the aabb\n\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\t\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\t\treturn satForAxes( axes, _v0, _v1, _v2, _extents );\n\n\t\t}\n\n\t\tclampPoint( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t\t}\n\n\t\tdistanceToPoint( point ) {\n\n\t\t\tconst clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max );\n\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t}\n\n\t\tgetBoundingSphere( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\t//target = new Sphere(); // removed to avoid cyclic dependency\n\n\t\t\t}\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$1 ).length() * 0.5;\n\n\t\t\treturn target;\n\n\t\t}\n\n\t\tintersect( box ) {\n\n\t\t\tthis.min.max( box.min );\n\t\t\tthis.max.min( box.max );\n\n\t\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tunion( box ) {\n\n\t\t\tthis.min.min( box.min );\n\t\t\tthis.max.max( box.max );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tapplyMatrix4( matrix ) {\n\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif ( this.isEmpty() ) return this;\n\n\t\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\t\tthis.setFromPoints( _points );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttranslate( offset ) {\n\n\t\t\tthis.min.add( offset );\n\t\t\tthis.max.add( offset );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( box ) {\n\n\t\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t\t}\n\n\t}\n\n\tfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\t\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t_testAxis.fromArray( axes, i );\n\t\t\t// project the aabb onto the seperating axis\n\t\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\tconst p0 = v0.dot( _testAxis );\n\t\t\tconst p1 = v1.dot( _testAxis );\n\t\t\tconst p2 = v2.dot( _testAxis );\n\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tconst _points = [\n\t\t/*@__PURE__*/ new Vector3(),\n\t\t/*@__PURE__*/ new Vector3(),\n\t\t/*@__PURE__*/ new Vector3(),\n\t\t/*@__PURE__*/ new Vector3(),\n\t\t/*@__PURE__*/ new Vector3(),\n\t\t/*@__PURE__*/ new Vector3(),\n\t\t/*@__PURE__*/ new Vector3(),\n\t\t/*@__PURE__*/ new Vector3()\n\t];\n\n\tconst _vector$1 = /*@__PURE__*/ new Vector3();\n\n\tconst _box = /*@__PURE__*/ new Box3();\n\n\t// triangle centered vertices\n\n\tconst _v0 = /*@__PURE__*/ new Vector3();\n\tconst _v1 = /*@__PURE__*/ new Vector3();\n\tconst _v2 = /*@__PURE__*/ new Vector3();\n\n\t// triangle edge vectors\n\n\tconst _f0 = /*@__PURE__*/ new Vector3();\n\tconst _f1 = /*@__PURE__*/ new Vector3();\n\tconst _f2 = /*@__PURE__*/ new Vector3();\n\n\tconst _center = /*@__PURE__*/ new Vector3();\n\tconst _extents = /*@__PURE__*/ new Vector3();\n\tconst _triangleNormal = /*@__PURE__*/ new Vector3();\n\tconst _testAxis = /*@__PURE__*/ new Vector3();\n\n\tconst _box$1 = /*@__PURE__*/ new Box3();\n\n\tclass Sphere {\n\n\t\tconstructor( center, radius ) {\n\n\t\t\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\t\t\tthis.radius = ( radius !== undefined ) ? radius : - 1;\n\n\t\t}\n\n\t\tset( center, radius ) {\n\n\t\t\tthis.center.copy( center );\n\t\t\tthis.radius = radius;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromPoints( points, optionalCenter ) {\n\n\t\t\tconst center = this.center;\n\n\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t} else {\n\n\t\t\t\t_box$1.setFromPoints( points ).getCenter( center );\n\n\t\t\t}\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( sphere ) {\n\n\t\t\tthis.center.copy( sphere.center );\n\t\t\tthis.radius = sphere.radius;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tisEmpty() {\n\n\t\t\treturn ( this.radius < 0 );\n\n\t\t}\n\n\t\tmakeEmpty() {\n\n\t\t\tthis.center.set( 0, 0, 0 );\n\t\t\tthis.radius = - 1;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcontainsPoint( point ) {\n\n\t\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t\t}\n\n\t\tdistanceToPoint( point ) {\n\n\t\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t\t}\n\n\t\tintersectsSphere( sphere ) {\n\n\t\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t\t}\n\n\t\tintersectsBox( box ) {\n\n\t\t\treturn box.intersectsSphere( this );\n\n\t\t}\n\n\t\tintersectsPlane( plane ) {\n\n\t\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t\t}\n\n\t\tclampPoint( point, target ) {\n\n\t\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.copy( point );\n\n\t\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t\ttarget.sub( this.center ).normalize();\n\t\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t\t}\n\n\t\t\treturn target;\n\n\t\t}\n\n\t\tgetBoundingBox( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\t\ttarget = new Box3();\n\n\t\t\t}\n\n\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\t// Empty sphere produces empty bounding box\n\t\t\t\ttarget.makeEmpty();\n\t\t\t\treturn target;\n\n\t\t\t}\n\n\t\t\ttarget.set( this.center, this.center );\n\t\t\ttarget.expandByScalar( this.radius );\n\n\t\t\treturn target;\n\n\t\t}\n\n\t\tapplyMatrix4( matrix ) {\n\n\t\t\tthis.center.applyMatrix4( matrix );\n\t\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttranslate( offset ) {\n\n\t\t\tthis.center.add( offset );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( sphere ) {\n\n\t\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t\t}\n\n\t}\n\n\tconst _vector$2 = /*@__PURE__*/ new Vector3();\n\tconst _segCenter = /*@__PURE__*/ new Vector3();\n\tconst _segDir = /*@__PURE__*/ new Vector3();\n\tconst _diff = /*@__PURE__*/ new Vector3();\n\n\tconst _edge1 = /*@__PURE__*/ new Vector3();\n\tconst _edge2 = /*@__PURE__*/ new Vector3();\n\tconst _normal = /*@__PURE__*/ new Vector3();\n\n\tclass Ray {\n\n\t\tconstructor( origin, direction ) {\n\n\t\t\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\t\t\tthis.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 );\n\n\t\t}\n\n\t\tset( origin, direction ) {\n\n\t\t\tthis.origin.copy( origin );\n\t\t\tthis.direction.copy( direction );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( ray ) {\n\n\t\t\tthis.origin.copy( ray.origin );\n\t\t\tthis.direction.copy( ray.direction );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tat( t, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t\t}\n\n\t\tlookAt( v ) {\n\n\t\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\trecast( t ) {\n\n\t\t\tthis.origin.copy( this.at( t, _vector$2 ) );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclosestPointToPoint( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( point, this.origin );\n\n\t\t\tconst directionDistance = target.dot( this.direction );\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn target.copy( this.origin );\n\n\t\t\t}\n\n\t\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t}\n\n\t\tdistanceToPoint( point ) {\n\n\t\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t\t}\n\n\t\tdistanceSqToPoint( point ) {\n\n\t\t\tconst directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t// point behind the ray\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t}\n\n\t\t\t_vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\treturn _vector$2.distanceToSquared( point );\n\n\t\t}\n\n\t\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\n\t\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\tconst a01 = - this.direction.dot( _segDir );\n\t\t\tconst b0 = _diff.dot( this.direction );\n\t\t\tconst b1 = - _diff.dot( _segDir );\n\t\t\tconst c = _diff.lengthSq();\n\t\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\t\tlet s0, s1, sqrDist, extDet;\n\n\t\t\tif ( det > 0 ) {\n\n\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t}\n\n\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\n\t\t}\n\n\t\tintersectSphere( sphere, target ) {\n\n\t\t\t_vector$2.subVectors( sphere.center, this.origin );\n\t\t\tconst tca = _vector$2.dot( this.direction );\n\t\t\tconst d2 = _vector$2.dot( _vector$2 ) - tca * tca;\n\t\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\tconst t0 = tca - thc;\n\n\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\tconst t1 = tca + thc;\n\n\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t// test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\treturn this.at( t0, target );\n\n\t\t}\n\n\t\tintersectsSphere( sphere ) {\n\n\t\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t}\n\n\t\tdistanceToPlane( plane ) {\n\n\t\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\t\treturn 0;\n\n\t\t\t\t}\n\n\t\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t\t// Return if the ray never intersects the plane\n\n\t\t\treturn t >= 0 ? t : null;\n\n\t\t}\n\n\t\tintersectPlane( plane, target ) {\n\n\t\t\tconst t = this.distanceToPlane( plane );\n\n\t\t\tif ( t === null ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn this.at( t, target );\n\n\t\t}\n\n\t\tintersectsPlane( plane ) {\n\n\t\t\t// check if the ray lies on the plane first\n\n\t\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\t\tif ( distToPoint === 0 ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tintersectBox( box, target ) {\n\n\t\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\t\tconst invdirx = 1 / this.direction.x,\n\t\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\t\tconst origin = this.origin;\n\n\t\t\tif ( invdirx >= 0 ) {\n\n\t\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t\t} else {\n\n\t\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t\t}\n\n\t\t\tif ( invdiry >= 0 ) {\n\n\t\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t\t} else {\n\n\t\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t\t}\n\n\t\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\t\tif ( invdirz >= 0 ) {\n\n\t\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t\t} else {\n\n\t\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t\t}\n\n\t\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t\t//return point closest to the ray (positive side)\n\n\t\t\tif ( tmax < 0 ) return null;\n\n\t\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t\t}\n\n\t\tintersectsBox( box ) {\n\n\t\t\treturn this.intersectBox( box, _vector$2 ) !== null;\n\n\t\t}\n\n\t\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t// Compute the offset origin, edges, and normal.\n\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\t_edge1.subVectors( b, a );\n\t\t\t_edge2.subVectors( c, a );\n\t\t\t_normal.crossVectors( _edge1, _edge2 );\n\n\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t//   |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t//   |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t//   |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\tlet DdN = this.direction.dot( _normal );\n\t\t\tlet sign;\n\n\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\tsign = 1;\n\n\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\tsign = - 1;\n\t\t\t\tDdN = - DdN;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t_diff.subVectors( this.origin, a );\n\t\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t\t// b1 < 0, no intersection\n\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t\t// b2 < 0, no intersection\n\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// b1+b2 > 1, no intersection\n\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Line intersects triangle, check if ray does.\n\t\t\tconst QdN = - sign * _diff.dot( _normal );\n\n\t\t\t// t < 0, no intersection\n\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\t// Ray intersects triangle.\n\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t}\n\n\t\tapplyMatrix4( matrix4 ) {\n\n\t\t\tthis.origin.applyMatrix4( matrix4 );\n\t\t\tthis.direction.transformDirection( matrix4 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( ray ) {\n\n\t\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t\t}\n\n\t}\n\n\tclass Matrix4 {\n\n\t\tconstructor() {\n\n\t\t\tObject.defineProperty( this, 'isMatrix4', { value: true } );\n\n\t\t\tthis.elements = [\n\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, 1, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t];\n\n\t\t\tif ( arguments.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tidentity() {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, 1, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new Matrix4().fromArray( this.elements );\n\n\t\t}\n\n\t\tcopy( m ) {\n\n\t\t\tconst te = this.elements;\n\t\t\tconst me = m.elements;\n\n\t\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcopyPosition( m ) {\n\n\t\t\tconst te = this.elements, me = m.elements;\n\n\t\t\tte[ 12 ] = me[ 12 ];\n\t\t\tte[ 13 ] = me[ 13 ];\n\t\t\tte[ 14 ] = me[ 14 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\t\tthis.set(\n\t\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\textractRotation( m ) {\n\n\t\t\t// this method does not support reflection matrices\n\n\t\t\tconst te = this.elements;\n\t\t\tconst me = m.elements;\n\n\t\t\tconst scaleX = 1 / _v1$1.setFromMatrixColumn( m, 0 ).length();\n\t\t\tconst scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length();\n\t\t\tconst scaleZ = 1 / _v1$1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\t\tte[ 3 ] = 0;\n\n\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\t\tte[ 7 ] = 0;\n\n\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeRotationFromEuler( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\tconst te = this.elements;\n\n\t\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = - c * f;\n\t\t\t\tte[ 8 ] = d;\n\n\t\t\t\tte[ 1 ] = af + be * d;\n\t\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\t\tte[ 9 ] = - b * c;\n\n\t\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\t\tte[ 6 ] = be + af * d;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\t\tte[ 0 ] = ce + df * b;\n\t\t\t\tte[ 4 ] = de * b - cf;\n\t\t\t\tte[ 8 ] = a * d;\n\n\t\t\t\tte[ 1 ] = a * f;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = - b;\n\n\t\t\t\tte[ 2 ] = cf * b - de;\n\t\t\t\tte[ 6 ] = df + ce * b;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\t\tte[ 0 ] = ce - df * b;\n\t\t\t\tte[ 4 ] = - a * f;\n\t\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\t\tte[ 1 ] = cf + de * b;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\t\tte[ 2 ] = - a * d;\n\t\t\t\tte[ 6 ] = b;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = be * d - af;\n\t\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\t\tte[ 1 ] = c * f;\n\t\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\t\tte[ 2 ] = - d;\n\t\t\t\tte[ 6 ] = b * c;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\t\tte[ 1 ] = f;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = - b * e;\n\n\t\t\t\tte[ 2 ] = - d * e;\n\t\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = - f;\n\t\t\t\tte[ 8 ] = d * e;\n\n\t\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\t\tte[ 6 ] = b * e;\n\t\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t\t}\n\n\t\t\t// bottom row\n\t\t\tte[ 3 ] = 0;\n\t\t\tte[ 7 ] = 0;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\t// last column\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeRotationFromQuaternion( q ) {\n\n\t\t\treturn this.compose( _zero, q, _one );\n\n\t\t}\n\n\t\tlookAt( eye, target, up ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\t_z.subVectors( eye, target );\n\n\t\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t\t// eye and target are in the same position\n\n\t\t\t\t_z.z = 1;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t\t// up and z are parallel\n\n\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\t_z.x += 0.0001;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_z.z += 0.0001;\n\n\t\t\t\t}\n\n\t\t\t\t_z.normalize();\n\t\t\t\t_x.crossVectors( up, _z );\n\n\t\t\t}\n\n\t\t\t_x.normalize();\n\t\t\t_y.crossVectors( _z, _x );\n\n\t\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiply( m, n ) {\n\n\t\t\tif ( n !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t\t}\n\n\t\t\treturn this.multiplyMatrices( this, m );\n\n\t\t}\n\n\t\tpremultiply( m ) {\n\n\t\t\treturn this.multiplyMatrices( m, this );\n\n\t\t}\n\n\t\tmultiplyMatrices( a, b ) {\n\n\t\t\tconst ae = a.elements;\n\t\t\tconst be = b.elements;\n\t\t\tconst te = this.elements;\n\n\t\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiplyScalar( s ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdeterminant() {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t\t//TODO: make this more efficient\n\t\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\t\treturn (\n\t\t\t\tn41 * (\n\t\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t\t - n13 * n24 * n32\n\t\t\t\t\t - n14 * n22 * n33\n\t\t\t\t\t + n12 * n24 * n33\n\t\t\t\t\t + n13 * n22 * n34\n\t\t\t\t\t - n12 * n23 * n34\n\t\t\t\t) +\n\t\t\t\tn42 * (\n\t\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t\t - n11 * n24 * n33\n\t\t\t\t\t + n14 * n21 * n33\n\t\t\t\t\t - n13 * n21 * n34\n\t\t\t\t\t + n13 * n24 * n31\n\t\t\t\t\t - n14 * n23 * n31\n\t\t\t\t) +\n\t\t\t\tn43 * (\n\t\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t\t - n11 * n22 * n34\n\t\t\t\t\t - n14 * n21 * n32\n\t\t\t\t\t + n12 * n21 * n34\n\t\t\t\t\t + n14 * n22 * n31\n\t\t\t\t\t - n12 * n24 * n31\n\t\t\t\t) +\n\t\t\t\tn44 * (\n\t\t\t\t\t- n13 * n22 * n31\n\t\t\t\t\t - n11 * n23 * n32\n\t\t\t\t\t + n11 * n22 * n33\n\t\t\t\t\t + n13 * n21 * n32\n\t\t\t\t\t - n12 * n21 * n33\n\t\t\t\t\t + n12 * n23 * n31\n\t\t\t\t)\n\n\t\t\t);\n\n\t\t}\n\n\t\ttranspose() {\n\n\t\t\tconst te = this.elements;\n\t\t\tlet tmp;\n\n\t\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetPosition( x, y, z ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\tte[ 12 ] = x.x;\n\t\t\t\tte[ 13 ] = x.y;\n\t\t\t\tte[ 14 ] = x.z;\n\n\t\t\t} else {\n\n\t\t\t\tte[ 12 ] = x;\n\t\t\t\tte[ 13 ] = y;\n\t\t\t\tte[ 14 ] = z;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tinvert() {\n\n\t\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\t\tconst te = this.elements,\n\n\t\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\t\tconst detInv = 1 / det;\n\n\t\t\tte[ 0 ] = t11 * detInv;\n\t\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\t\tte[ 4 ] = t12 * detInv;\n\t\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\t\tte[ 8 ] = t13 * detInv;\n\t\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\t\tte[ 12 ] = t14 * detInv;\n\t\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tscale( v ) {\n\n\t\t\tconst te = this.elements;\n\t\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetMaxScaleOnAxis() {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t\t}\n\n\t\tmakeTranslation( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeRotationX( theta ) {\n\n\t\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, c, - s, 0,\n\t\t\t\t0, s, c, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeRotationY( theta ) {\n\n\t\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\t c, 0, s, 0,\n\t\t\t\t 0, 1, 0, 0,\n\t\t\t\t- s, 0, c, 0,\n\t\t\t\t 0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeRotationZ( theta ) {\n\n\t\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\tc, - s, 0, 0,\n\t\t\t\ts, c, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeRotationAxis( axis, angle ) {\n\n\t\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\t\tconst c = Math.cos( angle );\n\t\t\tconst s = Math.sin( angle );\n\t\t\tconst t = 1 - c;\n\t\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\t\tconst tx = t * x, ty = t * y;\n\n\t\t\tthis.set(\n\n\t\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeScale( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\tx, 0, 0, 0,\n\t\t\t\t0, y, 0, 0,\n\t\t\t\t0, 0, z, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeShear( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, y, z, 0,\n\t\t\t\tx, 1, z, 0,\n\t\t\t\tx, y, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcompose( position, quaternion, scale ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\t\tte[ 3 ] = 0;\n\n\t\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\t\tte[ 7 ] = 0;\n\n\t\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\tte[ 12 ] = position.x;\n\t\t\tte[ 13 ] = position.y;\n\t\t\tte[ 14 ] = position.z;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdecompose( position, quaternion, scale ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tlet sx = _v1$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\tconst sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\tconst sz = _v1$1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t// if determine is negative, we need to invert one scale\n\t\t\tconst det = this.determinant();\n\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\tposition.x = te[ 12 ];\n\t\t\tposition.y = te[ 13 ];\n\t\t\tposition.z = te[ 14 ];\n\n\t\t\t// scale the rotation part\n\t\t\t_m1.copy( this );\n\n\t\t\tconst invSX = 1 / sx;\n\t\t\tconst invSY = 1 / sy;\n\t\t\tconst invSZ = 1 / sz;\n\n\t\t\t_m1.elements[ 0 ] *= invSX;\n\t\t\t_m1.elements[ 1 ] *= invSX;\n\t\t\t_m1.elements[ 2 ] *= invSX;\n\n\t\t\t_m1.elements[ 4 ] *= invSY;\n\t\t\t_m1.elements[ 5 ] *= invSY;\n\t\t\t_m1.elements[ 6 ] *= invSY;\n\n\t\t\t_m1.elements[ 8 ] *= invSZ;\n\t\t\t_m1.elements[ 9 ] *= invSZ;\n\t\t\t_m1.elements[ 10 ] *= invSZ;\n\n\t\t\tquaternion.setFromRotationMatrix( _m1 );\n\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\t\tif ( far === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t\t}\n\n\t\t\tconst te = this.elements;\n\t\t\tconst x = 2 * near / ( right - left );\n\t\t\tconst y = 2 * near / ( top - bottom );\n\n\t\t\tconst a = ( right + left ) / ( right - left );\n\t\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\t\tconst c = - ( far + near ) / ( far - near );\n\t\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\t\tconst te = this.elements;\n\t\t\tconst w = 1.0 / ( right - left );\n\t\t\tconst h = 1.0 / ( top - bottom );\n\t\t\tconst p = 1.0 / ( far - near );\n\n\t\t\tconst x = ( right + left ) * w;\n\t\t\tconst y = ( top + bottom ) * h;\n\t\t\tconst z = ( far + near ) * p;\n\n\t\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( matrix ) {\n\n\t\t\tconst te = this.elements;\n\t\t\tconst me = matrix.elements;\n\n\t\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfromArray( array, offset = 0 ) {\n\n\t\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tconst te = this.elements;\n\n\t\t\tarray[ offset ] = te[ 0 ];\n\t\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\t\treturn array;\n\n\t\t}\n\n\t}\n\n\tconst _v1$1 = /*@__PURE__*/ new Vector3();\n\tconst _m1 = /*@__PURE__*/ new Matrix4();\n\tconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\n\tconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\n\tconst _x = /*@__PURE__*/ new Vector3();\n\tconst _y = /*@__PURE__*/ new Vector3();\n\tconst _z = /*@__PURE__*/ new Vector3();\n\n\tclass Euler {\n\n\t\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\t\tObject.defineProperty( this, 'isEuler', { value: true } );\n\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._order = order;\n\n\t\t}\n\n\t\tget x() {\n\n\t\t\treturn this._x;\n\n\t\t}\n\n\t\tset x( value ) {\n\n\t\t\tthis._x = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t\tget y() {\n\n\t\t\treturn this._y;\n\n\t\t}\n\n\t\tset y( value ) {\n\n\t\t\tthis._y = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t\tget z() {\n\n\t\t\treturn this._z;\n\n\t\t}\n\n\t\tset z( value ) {\n\n\t\t\tthis._z = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t\tget order() {\n\n\t\t\treturn this._order;\n\n\t\t}\n\n\t\tset order( value ) {\n\n\t\t\tthis._order = value;\n\t\t\tthis._onChangeCallback();\n\n\t\t}\n\n\t\tset( x, y, z, order ) {\n\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._order = order || this._order;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t\t}\n\n\t\tcopy( euler ) {\n\n\t\t\tthis._x = euler._x;\n\t\t\tthis._y = euler._y;\n\t\t\tthis._z = euler._z;\n\t\t\tthis._order = euler._order;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromRotationMatrix( m, order, update ) {\n\n\t\t\tconst clamp = MathUtils.clamp;\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tconst te = m.elements;\n\t\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\t\torder = order || this._order;\n\n\t\t\tswitch ( order ) {\n\n\t\t\t\tcase 'XYZ':\n\n\t\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YXZ':\n\n\t\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZXY':\n\n\t\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._y = 0;\n\t\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZYX':\n\n\t\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._x = 0;\n\t\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YZX':\n\n\t\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._x = 0;\n\t\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'XZY':\n\n\t\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t\t}\n\n\t\t\tthis._order = order;\n\n\t\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromQuaternion( q, order, update ) {\n\n\t\t\t_matrix.makeRotationFromQuaternion( q );\n\n\t\t\treturn this.setFromRotationMatrix( _matrix, order, update );\n\n\t\t}\n\n\t\tsetFromVector3( v, order ) {\n\n\t\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t\t}\n\n\t\treorder( newOrder ) {\n\n\t\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t\t_quaternion$1.setFromEuler( this );\n\n\t\t\treturn this.setFromQuaternion( _quaternion$1, newOrder );\n\n\t\t}\n\n\t\tequals( euler ) {\n\n\t\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t\t}\n\n\t\tfromArray( array ) {\n\n\t\t\tthis._x = array[ 0 ];\n\t\t\tthis._y = array[ 1 ];\n\t\t\tthis._z = array[ 2 ];\n\t\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tarray[ offset ] = this._x;\n\t\t\tarray[ offset + 1 ] = this._y;\n\t\t\tarray[ offset + 2 ] = this._z;\n\t\t\tarray[ offset + 3 ] = this._order;\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\ttoVector3( optionalResult ) {\n\n\t\t\tif ( optionalResult ) {\n\n\t\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t\t} else {\n\n\t\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_onChange( callback ) {\n\n\t\t\tthis._onChangeCallback = callback;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_onChangeCallback() {}\n\n\t}\n\n\tEuler.DefaultOrder = 'XYZ';\n\tEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\n\tconst _matrix = /*@__PURE__*/ new Matrix4();\n\tconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\n\n\tclass Layers {\n\n\t\tconstructor() {\n\n\t\t\tthis.mask = 1 | 0;\n\n\t\t}\n\n\t\tset( channel ) {\n\n\t\t\tthis.mask = 1 << channel | 0;\n\n\t\t}\n\n\t\tenable( channel ) {\n\n\t\t\tthis.mask |= 1 << channel | 0;\n\n\t\t}\n\n\t\tenableAll() {\n\n\t\t\tthis.mask = 0xffffffff | 0;\n\n\t\t}\n\n\t\ttoggle( channel ) {\n\n\t\t\tthis.mask ^= 1 << channel | 0;\n\n\t\t}\n\n\t\tdisable( channel ) {\n\n\t\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t\t}\n\n\t\tdisableAll() {\n\n\t\t\tthis.mask = 0;\n\n\t\t}\n\n\t\ttest( layers ) {\n\n\t\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t\t}\n\n\t}\n\n\tlet _object3DId = 0;\n\n\tconst _v1$2 = new Vector3();\n\tconst _q1 = new Quaternion();\n\tconst _m1$1 = new Matrix4();\n\tconst _target = new Vector3();\n\n\tconst _position = new Vector3();\n\tconst _scale = new Vector3();\n\tconst _quaternion$2 = new Quaternion();\n\n\tconst _xAxis = new Vector3( 1, 0, 0 );\n\tconst _yAxis = new Vector3( 0, 1, 0 );\n\tconst _zAxis = new Vector3( 0, 0, 1 );\n\n\tconst _addedEvent = { type: 'added' };\n\tconst _removedEvent = { type: 'removed' };\n\n\tfunction Object3D() {\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tObject3D.DefaultUp = new Vector3( 0, 1, 0 );\n\tObject3D.DefaultMatrixAutoUpdate = true;\n\n\tObject3D.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), {\n\n\t\tconstructor: Object3D,\n\n\t\tisObject3D: true,\n\n\t\tonBeforeRender: function () {},\n\t\tonAfterRender: function () {},\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\t\tthis.matrix.premultiply( matrix );\n\n\t\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t\t},\n\n\t\tapplyQuaternion: function ( q ) {\n\n\t\t\tthis.quaternion.premultiply( q );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t\t// assumes axis is normalized\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t\t},\n\n\t\tsetRotationFromEuler: function ( euler ) {\n\n\t\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t\t},\n\n\t\tsetRotationFromMatrix: function ( m ) {\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t\t},\n\n\t\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t\t// assumes q is normalized\n\n\t\t\tthis.quaternion.copy( q );\n\n\t\t},\n\n\t\trotateOnAxis: function ( axis, angle ) {\n\n\t\t\t// rotate object on axis in object space\n\t\t\t// axis is assumed to be normalized\n\n\t\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.multiply( _q1 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateOnWorldAxis: function ( axis, angle ) {\n\n\t\t\t// rotate object on axis in world space\n\t\t\t// axis is assumed to be normalized\n\t\t\t// method assumes no rotated parent\n\n\t\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\t\tthis.quaternion.premultiply( _q1 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateX: function ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t\t},\n\n\t\trotateY: function ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t\t},\n\n\t\trotateZ: function ( angle ) {\n\n\t\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t\t},\n\n\t\ttranslateOnAxis: function ( axis, distance ) {\n\n\t\t\t// translate object by distance along axis in object space\n\t\t\t// axis is assumed to be normalized\n\n\t\t\t_v1$2.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\tthis.position.add( _v1$2.multiplyScalar( distance ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslateX: function ( distance ) {\n\n\t\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t\t},\n\n\t\ttranslateY: function ( distance ) {\n\n\t\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t\t},\n\n\t\ttranslateZ: function ( distance ) {\n\n\t\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t\t},\n\n\t\tlocalToWorld: function ( vector ) {\n\n\t\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t\t},\n\n\t\tworldToLocal: function ( vector ) {\n\n\t\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t\t},\n\n\t\tlookAt: function ( x, y, z ) {\n\n\t\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\t_target.copy( x );\n\n\t\t\t} else {\n\n\t\t\t\t_target.set( x, y, z );\n\n\t\t\t}\n\n\t\t\tconst parent = this.parent;\n\n\t\t\tthis.updateWorldMatrix( true, false );\n\n\t\t\t_position.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t\t_m1$1.lookAt( _position, _target, this.up );\n\n\t\t\t} else {\n\n\t\t\t\t_m1$1.lookAt( _target, _position, this.up );\n\n\t\t\t}\n\n\t\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\t\tif ( parent ) {\n\n\t\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t\t}\n\n\t\t},\n\n\t\tadd: function ( object ) {\n\n\t\t\tif ( arguments.length > 1 ) {\n\n\t\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tif ( object === this ) {\n\n\t\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tif ( object && object.isObject3D ) {\n\n\t\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\t\tobject.parent.remove( object );\n\n\t\t\t\t}\n\n\t\t\t\tobject.parent = this;\n\t\t\t\tthis.children.push( object );\n\n\t\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tremove: function ( object ) {\n\n\t\t\tif ( arguments.length > 1 ) {\n\n\t\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tconst index = this.children.indexOf( object );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tobject.parent = null;\n\t\t\t\tthis.children.splice( index, 1 );\n\n\t\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclear: function () {\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tconst object = this.children[ i ];\n\n\t\t\t\tobject.parent = null;\n\n\t\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t\t}\n\n\t\t\tthis.children.length = 0;\n\n\t\t\treturn this;\n\n\n\t\t},\n\n\t\tattach: function ( object ) {\n\n\t\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t\tthis.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t\t}\n\n\t\t\tobject.applyMatrix4( _m1$1 );\n\n\t\t\tobject.updateWorldMatrix( false, false );\n\n\t\t\tthis.add( object );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetObjectById: function ( id ) {\n\n\t\t\treturn this.getObjectByProperty( 'id', id );\n\n\t\t},\n\n\t\tgetObjectByName: function ( name ) {\n\n\t\t\treturn this.getObjectByProperty( 'name', name );\n\n\t\t},\n\n\t\tgetObjectByProperty: function ( name, value ) {\n\n\t\t\tif ( this[ name ] === value ) return this;\n\n\t\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = this.children[ i ];\n\t\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\t\tif ( object !== undefined ) {\n\n\t\t\t\t\treturn object;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t},\n\n\t\tgetWorldPosition: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix( true, false );\n\n\t\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t\t},\n\n\t\tgetWorldQuaternion: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\t\ttarget = new Quaternion();\n\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix( true, false );\n\n\t\t\tthis.matrixWorld.decompose( _position, target, _scale );\n\n\t\t\treturn target;\n\n\t\t},\n\n\t\tgetWorldScale: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix( true, false );\n\n\t\t\tthis.matrixWorld.decompose( _position, _quaternion$2, target );\n\n\t\t\treturn target;\n\n\t\t},\n\n\t\tgetWorldDirection: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix( true, false );\n\n\t\t\tconst e = this.matrixWorld.elements;\n\n\t\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t\t},\n\n\t\traycast: function () {},\n\n\t\ttraverse: function ( callback ) {\n\n\t\t\tcallback( this );\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].traverse( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttraverseVisible: function ( callback ) {\n\n\t\t\tif ( this.visible === false ) return;\n\n\t\t\tcallback( this );\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttraverseAncestors: function ( callback ) {\n\n\t\t\tconst parent = this.parent;\n\n\t\t\tif ( parent !== null ) {\n\n\t\t\t\tcallback( parent );\n\n\t\t\t\tparent.traverseAncestors( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateMatrix: function () {\n\n\t\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t\t},\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\t\tforce = true;\n\n\t\t\t}\n\n\t\t\t// update children\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\t\tconst parent = this.parent;\n\n\t\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t\t}\n\n\t\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\t// update children\n\n\t\t\tif ( updateChildren === true ) {\n\n\t\t\t\tconst children = this.children;\n\n\t\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\t// meta is a string when called from JSON.stringify\n\t\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tconst output = {};\n\n\t\t\t// meta is a hash used to collect geometries, materials.\n\t\t\t// not providing it implies that this is the root object\n\t\t\t// being serialized.\n\t\t\tif ( isRootObject ) {\n\n\t\t\t\t// initialize meta obj\n\t\t\t\tmeta = {\n\t\t\t\t\tgeometries: {},\n\t\t\t\t\tmaterials: {},\n\t\t\t\t\ttextures: {},\n\t\t\t\t\timages: {},\n\t\t\t\t\tshapes: {},\n\t\t\t\t\tskeletons: {},\n\t\t\t\t\tanimations: {}\n\t\t\t\t};\n\n\t\t\t\toutput.metadata = {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Object',\n\t\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\t// standard Object3D serialization\n\n\t\t\tconst object = {};\n\n\t\t\tobject.uuid = this.uuid;\n\t\t\tobject.type = this.type;\n\n\t\t\tif ( this.name !== '' ) object.name = this.name;\n\t\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\t\tif ( this.visible === false ) object.visible = false;\n\t\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\t\tobject.layers = this.layers.mask;\n\t\t\tobject.matrix = this.matrix.toArray();\n\n\t\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t\t// object specific properties\n\n\t\t\tif ( this.isInstancedMesh ) {\n\n\t\t\t\tobject.type = 'InstancedMesh';\n\t\t\t\tobject.count = this.count;\n\t\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfunction serialize( library, element ) {\n\n\t\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t\t}\n\n\t\t\t\treturn element.uuid;\n\n\t\t\t}\n\n\t\t\tif ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\t\tobject.bindMode = this.bindMode;\n\t\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.material !== undefined ) {\n\n\t\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\t\tconst uuids = [];\n\n\t\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.material = uuids;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( this.children.length > 0 ) {\n\n\t\t\t\tobject.children = [];\n\n\t\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( this.animations.length > 0 ) {\n\n\t\t\t\tobject.animations = [];\n\n\t\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( isRootObject ) {\n\n\t\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\t\tconst images = extractFromCache( meta.images );\n\t\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\t\tconst animations = extractFromCache( meta.animations );\n\n\t\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\n\t\t\t}\n\n\t\t\toutput.object = object;\n\n\t\t\treturn output;\n\n\t\t\t// extract data from the cache hash\n\t\t\t// remove metadata on each item\n\t\t\t// and return as array\n\t\t\tfunction extractFromCache( cache ) {\n\n\t\t\t\tconst values = [];\n\t\t\t\tfor ( const key in cache ) {\n\n\t\t\t\t\tconst data = cache[ key ];\n\t\t\t\t\tdelete data.metadata;\n\t\t\t\t\tvalues.push( data );\n\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function ( recursive ) {\n\n\t\t\treturn new this.constructor().copy( this, recursive );\n\n\t\t},\n\n\t\tcopy: function ( source, recursive = true ) {\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.up.copy( source.up );\n\n\t\t\tthis.position.copy( source.position );\n\t\t\tthis.rotation.order = source.rotation.order;\n\t\t\tthis.quaternion.copy( source.quaternion );\n\t\t\tthis.scale.copy( source.scale );\n\n\t\t\tthis.matrix.copy( source.matrix );\n\t\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\t\tthis.layers.mask = source.layers.mask;\n\t\t\tthis.visible = source.visible;\n\n\t\t\tthis.castShadow = source.castShadow;\n\t\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\t\tthis.frustumCulled = source.frustumCulled;\n\t\t\tthis.renderOrder = source.renderOrder;\n\n\t\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\t\tif ( recursive === true ) {\n\n\t\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\t\tconst child = source.children[ i ];\n\t\t\t\t\tthis.add( child.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tconst _vector1 = /*@__PURE__*/ new Vector3();\n\tconst _vector2 = /*@__PURE__*/ new Vector3();\n\tconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\n\tclass Plane {\n\n\t\tconstructor( normal, constant ) {\n\n\t\t\tObject.defineProperty( this, 'isPlane', { value: true } );\n\n\t\t\t// normal is assumed to be normalized\n\n\t\t\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\t\t\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n\t\t}\n\n\t\tset( normal, constant ) {\n\n\t\t\tthis.normal.copy( normal );\n\t\t\tthis.constant = constant;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetComponents( x, y, z, w ) {\n\n\t\t\tthis.normal.set( x, y, z );\n\t\t\tthis.constant = w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\t\tthis.normal.copy( normal );\n\t\t\tthis.constant = - point.dot( this.normal );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( plane ) {\n\n\t\t\tthis.normal.copy( plane.normal );\n\t\t\tthis.constant = plane.constant;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tnormalize() {\n\n\t\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\t\tthis.constant *= inverseNormalLength;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tnegate() {\n\n\t\t\tthis.constant *= - 1;\n\t\t\tthis.normal.negate();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdistanceToPoint( point ) {\n\n\t\t\treturn this.normal.dot( point ) + this.constant;\n\n\t\t}\n\n\t\tdistanceToSphere( sphere ) {\n\n\t\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t\t}\n\n\t\tprojectPoint( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t\t}\n\n\t\tintersectLine( line, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tconst direction = line.delta( _vector1 );\n\n\t\t\tconst denominator = this.normal.dot( direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\t\treturn target.copy( line.start );\n\n\t\t\t\t}\n\n\t\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t\t}\n\n\t\tintersectsLine( line ) {\n\n\t\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\t\tconst startSign = this.distanceToPoint( line.start );\n\t\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t\t}\n\n\t\tintersectsBox( box ) {\n\n\t\t\treturn box.intersectsPlane( this );\n\n\t\t}\n\n\t\tintersectsSphere( sphere ) {\n\n\t\t\treturn sphere.intersectsPlane( this );\n\n\t\t}\n\n\t\tcoplanarPoint( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t\t}\n\n\t\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttranslate( offset ) {\n\n\t\t\tthis.constant -= offset.dot( this.normal );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( plane ) {\n\n\t\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t\t}\n\n\t}\n\n\tconst _v0$1 = /*@__PURE__*/ new Vector3();\n\tconst _v1$3 = /*@__PURE__*/ new Vector3();\n\tconst _v2$1 = /*@__PURE__*/ new Vector3();\n\tconst _v3 = /*@__PURE__*/ new Vector3();\n\n\tconst _vab = /*@__PURE__*/ new Vector3();\n\tconst _vac = /*@__PURE__*/ new Vector3();\n\tconst _vbc = /*@__PURE__*/ new Vector3();\n\tconst _vap = /*@__PURE__*/ new Vector3();\n\tconst _vbp = /*@__PURE__*/ new Vector3();\n\tconst _vcp = /*@__PURE__*/ new Vector3();\n\n\tclass Triangle {\n\n\t\tconstructor( a, b, c ) {\n\n\t\t\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\t\t\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\t\t\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n\t\t}\n\n\t\tstatic getNormal( a, b, c, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( c, b );\n\t\t\t_v0$1.subVectors( a, b );\n\t\t\ttarget.cross( _v0$1 );\n\n\t\t\tconst targetLengthSq = target.lengthSq();\n\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t}\n\n\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t}\n\n\t\t// static/instance method to calculate barycentric coordinates\n\t\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\t\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t\t_v0$1.subVectors( c, a );\n\t\t\t_v1$3.subVectors( b, a );\n\t\t\t_v2$1.subVectors( point, a );\n\n\t\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\t\tconst dot02 = _v0$1.dot( _v2$1 );\n\t\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\t\tconst dot12 = _v1$3.dot( _v2$1 );\n\n\t\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\t// collinear or singular triangle\n\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t}\n\n\t\t\tconst invDenom = 1 / denom;\n\t\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t// barycentric coordinates must always sum to 1\n\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t}\n\n\t\tstatic containsPoint( point, a, b, c ) {\n\n\t\t\tthis.getBarycoord( point, a, b, c, _v3 );\n\n\t\t\treturn ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 );\n\n\t\t}\n\n\t\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\t\tthis.getBarycoord( point, p1, p2, p3, _v3 );\n\n\t\t\ttarget.set( 0, 0 );\n\t\t\ttarget.addScaledVector( uv1, _v3.x );\n\t\t\ttarget.addScaledVector( uv2, _v3.y );\n\t\t\ttarget.addScaledVector( uv3, _v3.z );\n\n\t\t\treturn target;\n\n\t\t}\n\n\t\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t\t_v0$1.subVectors( c, b );\n\t\t\t_v1$3.subVectors( a, b );\n\n\t\t\t// strictly front facing\n\t\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t\t}\n\n\t\tset( a, b, c ) {\n\n\t\t\tthis.a.copy( a );\n\t\t\tthis.b.copy( b );\n\t\t\tthis.c.copy( c );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\t\tthis.a.copy( points[ i0 ] );\n\t\t\tthis.b.copy( points[ i1 ] );\n\t\t\tthis.c.copy( points[ i2 ] );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( triangle ) {\n\n\t\t\tthis.a.copy( triangle.a );\n\t\t\tthis.b.copy( triangle.b );\n\t\t\tthis.c.copy( triangle.c );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetArea() {\n\n\t\t\t_v0$1.subVectors( this.c, this.b );\n\t\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t\t}\n\n\t\tgetMidpoint( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t\t}\n\n\t\tgetNormal( target ) {\n\n\t\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t\t}\n\n\t\tgetPlane( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\t\ttarget = new Plane();\n\n\t\t\t}\n\n\t\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t\t}\n\n\t\tgetBarycoord( point, target ) {\n\n\t\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t\t}\n\n\t\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t\t}\n\n\t\tcontainsPoint( point ) {\n\n\t\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t\t}\n\n\t\tisFrontFacing( direction ) {\n\n\t\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t\t}\n\n\t\tintersectsBox( box ) {\n\n\t\t\treturn box.intersectsTriangle( this );\n\n\t\t}\n\n\t\tclosestPointToPoint( p, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tconst a = this.a, b = this.b, c = this.c;\n\t\t\tlet v, w;\n\n\t\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t\t_vab.subVectors( b, a );\n\t\t\t_vac.subVectors( c, a );\n\t\t\t_vap.subVectors( p, a );\n\t\t\tconst d1 = _vab.dot( _vap );\n\t\t\tconst d2 = _vac.dot( _vap );\n\t\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\t\treturn target.copy( a );\n\n\t\t\t}\n\n\t\t\t_vbp.subVectors( p, b );\n\t\t\tconst d3 = _vab.dot( _vbp );\n\t\t\tconst d4 = _vac.dot( _vbp );\n\t\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\t\treturn target.copy( b );\n\n\t\t\t}\n\n\t\t\tconst vc = d1 * d4 - d3 * d2;\n\t\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t\t}\n\n\t\t\t_vcp.subVectors( p, c );\n\t\t\tconst d5 = _vab.dot( _vcp );\n\t\t\tconst d6 = _vac.dot( _vcp );\n\t\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\t\treturn target.copy( c );\n\n\t\t\t}\n\n\t\t\tconst vb = d5 * d2 - d1 * d6;\n\t\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t\t}\n\n\t\t\tconst va = d3 * d6 - d5 * d4;\n\t\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t\t_vbc.subVectors( c, b );\n\t\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t\t}\n\n\t\t\t// face region\n\t\t\tconst denom = 1 / ( va + vb + vc );\n\t\t\t// u = va * denom\n\t\t\tv = vb * denom;\n\t\t\tw = vc * denom;\n\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tequals( triangle ) {\n\n\t\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t\t}\n\n\t}\n\n\tconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\n\tconst _hslA = { h: 0, s: 0, l: 0 };\n\tconst _hslB = { h: 0, s: 0, l: 0 };\n\n\tfunction hue2rgb( p, q, t ) {\n\n\t\tif ( t < 0 ) t += 1;\n\t\tif ( t > 1 ) t -= 1;\n\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\t\tif ( t < 1 / 2 ) return q;\n\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\t\treturn p;\n\n\t}\n\n\tfunction SRGBToLinear( c ) {\n\n\t\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t}\n\n\tfunction LinearToSRGB( c ) {\n\n\t\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n\t}\n\n\tclass Color {\n\n\t\tconstructor( r, g, b ) {\n\n\t\t\tObject.defineProperty( this, 'isColor', { value: true } );\n\n\t\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t\t// r is THREE.Color, hex or string\n\t\t\t\treturn this.set( r );\n\n\t\t\t}\n\n\t\t\treturn this.setRGB( r, g, b );\n\n\t\t}\n\n\t\tset( value ) {\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetScalar( scalar ) {\n\n\t\t\tthis.r = scalar;\n\t\t\tthis.g = scalar;\n\t\t\tthis.b = scalar;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetHex( hex ) {\n\n\t\t\thex = Math.floor( hex );\n\n\t\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetRGB( r, g, b ) {\n\n\t\t\tthis.r = r;\n\t\t\tthis.g = g;\n\t\t\tthis.b = b;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetHSL( h, s, l ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\th = MathUtils.euclideanModulo( h, 1 );\n\t\t\ts = MathUtils.clamp( s, 0, 1 );\n\t\t\tl = MathUtils.clamp( l, 0, 1 );\n\n\t\t\tif ( s === 0 ) {\n\n\t\t\t\tthis.r = this.g = this.b = l;\n\n\t\t\t} else {\n\n\t\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetStyle( style ) {\n\n\t\t\tfunction handleAlpha( string ) {\n\n\t\t\t\tif ( string === undefined ) return;\n\n\t\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tlet m;\n\n\t\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t\t// rgb / hsl\n\n\t\t\t\tlet color;\n\t\t\t\tconst name = m[ 1 ];\n\t\t\t\tconst components = m[ 2 ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'rgb':\n\t\t\t\t\tcase 'rgba':\n\n\t\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'hsl':\n\t\t\t\t\tcase 'hsla':\n\n\t\t\t\t\t\tif ( color = /^(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\t\tconst l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t\t// hex color\n\n\t\t\t\tconst hex = m[ 1 ];\n\t\t\t\tconst size = hex.length;\n\n\t\t\t\tif ( size === 3 ) {\n\n\t\t\t\t\t// #ff0\n\t\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t\t// #ff0000\n\t\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( style && style.length > 0 ) {\n\n\t\t\t\treturn this.setColorName( style );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetColorName( style ) {\n\n\t\t\t// color keywords\n\t\t\tconst hex = _colorKeywords[ style ];\n\n\t\t\tif ( hex !== undefined ) {\n\n\t\t\t\t// red\n\t\t\t\tthis.setHex( hex );\n\n\t\t\t} else {\n\n\t\t\t\t// unknown color\n\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t\t}\n\n\t\tcopy( color ) {\n\n\t\t\tthis.r = color.r;\n\t\t\tthis.g = color.g;\n\t\t\tthis.b = color.b;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcopyGammaToLinear( color, gammaFactor = 2.0 ) {\n\n\t\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcopyLinearToGamma( color, gammaFactor = 2.0 ) {\n\n\t\t\tconst safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconvertGammaToLinear( gammaFactor ) {\n\n\t\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconvertLinearToGamma( gammaFactor ) {\n\n\t\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcopySRGBToLinear( color ) {\n\n\t\t\tthis.r = SRGBToLinear( color.r );\n\t\t\tthis.g = SRGBToLinear( color.g );\n\t\t\tthis.b = SRGBToLinear( color.b );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcopyLinearToSRGB( color ) {\n\n\t\t\tthis.r = LinearToSRGB( color.r );\n\t\t\tthis.g = LinearToSRGB( color.g );\n\t\t\tthis.b = LinearToSRGB( color.b );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconvertSRGBToLinear() {\n\n\t\t\tthis.copySRGBToLinear( this );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconvertLinearToSRGB() {\n\n\t\t\tthis.copyLinearToSRGB( this );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetHex() {\n\n\t\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t\t}\n\n\t\tgetHexString() {\n\n\t\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t\t}\n\n\t\tgetHSL( target ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t\t}\n\n\t\t\tconst r = this.r, g = this.g, b = this.b;\n\n\t\t\tconst max = Math.max( r, g, b );\n\t\t\tconst min = Math.min( r, g, b );\n\n\t\t\tlet hue, saturation;\n\t\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\t\tif ( min === max ) {\n\n\t\t\t\thue = 0;\n\t\t\t\tsaturation = 0;\n\n\t\t\t} else {\n\n\t\t\t\tconst delta = max - min;\n\n\t\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\t\tswitch ( max ) {\n\n\t\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t\t}\n\n\t\t\t\thue /= 6;\n\n\t\t\t}\n\n\t\t\ttarget.h = hue;\n\t\t\ttarget.s = saturation;\n\t\t\ttarget.l = lightness;\n\n\t\t\treturn target;\n\n\t\t}\n\n\t\tgetStyle() {\n\n\t\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t\t}\n\n\t\toffsetHSL( h, s, l ) {\n\n\t\t\tthis.getHSL( _hslA );\n\n\t\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tadd( color ) {\n\n\t\t\tthis.r += color.r;\n\t\t\tthis.g += color.g;\n\t\t\tthis.b += color.b;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddColors( color1, color2 ) {\n\n\t\t\tthis.r = color1.r + color2.r;\n\t\t\tthis.g = color1.g + color2.g;\n\t\t\tthis.b = color1.b + color2.b;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddScalar( s ) {\n\n\t\t\tthis.r += s;\n\t\t\tthis.g += s;\n\t\t\tthis.b += s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsub( color ) {\n\n\t\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiply( color ) {\n\n\t\t\tthis.r *= color.r;\n\t\t\tthis.g *= color.g;\n\t\t\tthis.b *= color.b;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmultiplyScalar( s ) {\n\n\t\t\tthis.r *= s;\n\t\t\tthis.g *= s;\n\t\t\tthis.b *= s;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tlerp( color, alpha ) {\n\n\t\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tlerpHSL( color, alpha ) {\n\n\t\t\tthis.getHSL( _hslA );\n\t\t\tcolor.getHSL( _hslB );\n\n\t\t\tconst h = MathUtils.lerp( _hslA.h, _hslB.h, alpha );\n\t\t\tconst s = MathUtils.lerp( _hslA.s, _hslB.s, alpha );\n\t\t\tconst l = MathUtils.lerp( _hslA.l, _hslB.l, alpha );\n\n\t\t\tthis.setHSL( h, s, l );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( c ) {\n\n\t\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t\t}\n\n\t\tfromArray( array, offset = 0 ) {\n\n\t\t\tthis.r = array[ offset ];\n\t\t\tthis.g = array[ offset + 1 ];\n\t\t\tthis.b = array[ offset + 2 ];\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tarray[ offset ] = this.r;\n\t\t\tarray[ offset + 1 ] = this.g;\n\t\t\tarray[ offset + 2 ] = this.b;\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfromBufferAttribute( attribute, index ) {\n\n\t\t\tthis.r = attribute.getX( index );\n\t\t\tthis.g = attribute.getY( index );\n\t\t\tthis.b = attribute.getZ( index );\n\n\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t// assuming Uint8Array\n\n\t\t\t\tthis.r /= 255;\n\t\t\t\tthis.g /= 255;\n\t\t\t\tthis.b /= 255;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoJSON() {\n\n\t\t\treturn this.getHex();\n\n\t\t}\n\n\t}\n\n\tColor.NAMES = _colorKeywords;\n\tColor.prototype.r = 1;\n\tColor.prototype.g = 1;\n\tColor.prototype.b = 1;\n\n\tclass Face3 {\n\n\t\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\n\n\t\t\tthis.a = a;\n\t\t\tthis.b = b;\n\t\t\tthis.c = c;\n\n\t\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\t\tthis.materialIndex = materialIndex;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( source ) {\n\n\t\t\tthis.a = source.a;\n\t\t\tthis.b = source.b;\n\t\t\tthis.c = source.c;\n\n\t\t\tthis.normal.copy( source.normal );\n\t\t\tthis.color.copy( source.color );\n\n\t\t\tthis.materialIndex = source.materialIndex;\n\n\t\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tlet materialId = 0;\n\n\tfunction Material() {\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.fog = true;\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.flatShading = false;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaTest = 0;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t}\n\n\tMaterial.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), {\n\n\t\tconstructor: Material,\n\n\t\tisMaterial: true,\n\n\t\tonBeforeCompile: function ( /* shaderobject, renderer */ ) {},\n\n\t\tcustomProgramCacheKey: function () {\n\n\t\t\treturn this.onBeforeCompile.toString();\n\n\t\t},\n\n\t\tsetValues: function ( values ) {\n\n\t\t\tif ( values === undefined ) return;\n\n\t\t\tfor ( const key in values ) {\n\n\t\t\t\tconst newValue = values[ key ];\n\n\t\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst currentValue = this[ key ];\n\n\t\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tif ( isRoot ) {\n\n\t\t\t\tmeta = {\n\t\t\t\t\ttextures: {},\n\t\t\t\t\timages: {}\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tconst data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Material',\n\t\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard Material serialization\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\t\tif ( this.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex();\n\t\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t\t}\n\n\t\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t\t}\n\n\t\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t\t}\n\n\t\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t\t}\n\n\t\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\t\t\t\tdata.refractionRatio = this.refractionRatio;\n\n\t\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\t\t\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\n\t\t\t}\n\n\t\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\t\tdata.depthFunc = this.depthFunc;\n\t\t\tdata.depthTest = this.depthTest;\n\t\t\tdata.depthWrite = this.depthWrite;\n\n\t\t\tdata.stencilWrite = this.stencilWrite;\n\t\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\t\tdata.stencilFunc = this.stencilFunc;\n\t\t\tdata.stencilRef = this.stencilRef;\n\t\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\t\tdata.stencilFail = this.stencilFail;\n\t\t\tdata.stencilZFail = this.stencilZFail;\n\t\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t\t// rotation (SpriteMaterial)\n\t\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\t\tif ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\t\tif ( this.morphNormals === true ) data.morphNormals = true;\n\t\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\t\tif ( this.visible === false ) data.visible = false;\n\n\t\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t\t// TODO: Copied from Object3D.toJSON\n\n\t\t\tfunction extractFromCache( cache ) {\n\n\t\t\t\tconst values = [];\n\n\t\t\t\tfor ( const key in cache ) {\n\n\t\t\t\t\tconst data = cache[ key ];\n\t\t\t\t\tdelete data.metadata;\n\t\t\t\t\tvalues.push( data );\n\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\n\t\t\t}\n\n\t\t\tif ( isRoot ) {\n\n\t\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.fog = source.fog;\n\n\t\t\tthis.blending = source.blending;\n\t\t\tthis.side = source.side;\n\t\t\tthis.flatShading = source.flatShading;\n\t\t\tthis.vertexColors = source.vertexColors;\n\n\t\t\tthis.opacity = source.opacity;\n\t\t\tthis.transparent = source.transparent;\n\n\t\t\tthis.blendSrc = source.blendSrc;\n\t\t\tthis.blendDst = source.blendDst;\n\t\t\tthis.blendEquation = source.blendEquation;\n\t\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\t\tthis.depthFunc = source.depthFunc;\n\t\t\tthis.depthTest = source.depthTest;\n\t\t\tthis.depthWrite = source.depthWrite;\n\n\t\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\t\tthis.stencilFunc = source.stencilFunc;\n\t\t\tthis.stencilRef = source.stencilRef;\n\t\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\t\tthis.stencilFail = source.stencilFail;\n\t\t\tthis.stencilZFail = source.stencilZFail;\n\t\t\tthis.stencilZPass = source.stencilZPass;\n\t\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\t\tconst srcPlanes = source.clippingPlanes;\n\t\t\tlet dstPlanes = null;\n\n\t\t\tif ( srcPlanes !== null ) {\n\n\t\t\t\tconst n = srcPlanes.length;\n\t\t\t\tdstPlanes = new Array( n );\n\n\t\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.clippingPlanes = dstPlanes;\n\t\t\tthis.clipIntersection = source.clipIntersection;\n\t\t\tthis.clipShadows = source.clipShadows;\n\n\t\t\tthis.shadowSide = source.shadowSide;\n\n\t\t\tthis.colorWrite = source.colorWrite;\n\n\t\t\tthis.precision = source.precision;\n\n\t\t\tthis.polygonOffset = source.polygonOffset;\n\t\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\t\tthis.dithering = source.dithering;\n\n\t\t\tthis.alphaTest = source.alphaTest;\n\t\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\t\tthis.visible = source.visible;\n\n\t\t\tthis.toneMapped = source.toneMapped;\n\n\t\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperty( Material.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  opacity: <float>,\n\t *  map: new THREE.Texture( <Image> ),\n\t *\n\t *  lightMap: new THREE.Texture( <Image> ),\n\t *  lightMapIntensity: <float>\n\t *\n\t *  aoMap: new THREE.Texture( <Image> ),\n\t *  aoMapIntensity: <float>\n\t *\n\t *  specularMap: new THREE.Texture( <Image> ),\n\t *\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t *  combine: THREE.Multiply,\n\t *  reflectivity: <float>,\n\t *  refractionRatio: <float>,\n\t *\n\t *  depthTest: <bool>,\n\t *  depthWrite: <bool>,\n\t *\n\t *  wireframe: <boolean>,\n\t *  wireframeLinewidth: <float>,\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>\n\t * }\n\t */\n\n\tfunction MeshBasicMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshBasicMaterial.prototype = Object.create( Material.prototype );\n\tMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\n\tMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\n\tMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t};\n\n\tconst _vector$3 = new Vector3();\n\tconst _vector2$1 = new Vector2();\n\n\tfunction BufferAttribute( array, itemSize, normalized ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( BufferAttribute.prototype, {\n\n\t\tisBufferAttribute: true,\n\n\t\tonUploadCallback: function () {},\n\n\t\tsetUsage: function ( value ) {\n\n\t\t\tthis.usage = value;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.name = source.name;\n\t\t\tthis.array = new source.array.constructor( source.array );\n\t\t\tthis.itemSize = source.itemSize;\n\t\t\tthis.count = source.count;\n\t\t\tthis.normalized = source.normalized;\n\n\t\t\tthis.usage = source.usage;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\t\tindex1 *= this.itemSize;\n\t\t\tindex2 *= attribute.itemSize;\n\n\t\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyArray: function ( array ) {\n\n\t\t\tthis.array.set( array );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyColorsArray: function ( colors ) {\n\n\t\t\tconst array = this.array;\n\t\t\tlet offset = 0;\n\n\t\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\t\tlet color = colors[ i ];\n\n\t\t\t\tif ( color === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\t\tcolor = new Color();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = color.r;\n\t\t\t\tarray[ offset ++ ] = color.g;\n\t\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector2sArray: function ( vectors ) {\n\n\t\t\tconst array = this.array;\n\t\t\tlet offset = 0;\n\n\t\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tlet vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector2();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector3sArray: function ( vectors ) {\n\n\t\t\tconst array = this.array;\n\t\t\tlet offset = 0;\n\n\t\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tlet vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector4sArray: function ( vectors ) {\n\n\t\t\tconst array = this.array;\n\t\t\tlet offset = 0;\n\n\t\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tlet vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector4();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyMatrix3: function ( m ) {\n\n\t\t\tif ( this.itemSize === 2 ) {\n\n\t\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t\t}\n\n\t\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t\t_vector$3.fromBufferAttribute( this, i );\n\t\t\t\t\t_vector$3.applyMatrix3( m );\n\n\t\t\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( m ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$3.x = this.getX( i );\n\t\t\t\t_vector$3.y = this.getY( i );\n\t\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t\t_vector$3.applyMatrix4( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyNormalMatrix: function ( m ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$3.x = this.getX( i );\n\t\t\t\t_vector$3.y = this.getY( i );\n\t\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t\t_vector$3.applyNormalMatrix( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttransformDirection: function ( m ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$3.x = this.getX( i );\n\t\t\t\t_vector$3.y = this.getY( i );\n\t\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t\t_vector$3.transformDirection( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tset: function ( value, offset = 0 ) {\n\n\t\t\tthis.array.set( value, offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetX: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize ];\n\n\t\t},\n\n\t\tsetX: function ( index, x ) {\n\n\t\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetY: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t\t},\n\n\t\tsetY: function ( index, y ) {\n\n\t\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetZ: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t\t},\n\n\t\tsetZ: function ( index, z ) {\n\n\t\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetW: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t\t},\n\n\t\tsetW: function ( index, w ) {\n\n\t\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXY: function ( index, x, y ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZ: function ( index, x, y, z ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\t\t\tthis.array[ index + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\t\t\tthis.array[ index + 2 ] = z;\n\t\t\tthis.array[ index + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tonUpload: function ( callback ) {\n\n\t\t\tthis.onUploadCallback = callback;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\n\tfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\n\tfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n\tUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\n\tfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\n\tfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\n\tfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\n\tfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\tfunction Float16BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n\tFloat16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tFloat16BufferAttribute.prototype.constructor = Float16BufferAttribute;\n\tFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\n\tfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n\tFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\n\tfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n\tFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n\tclass DirectGeometry {\n\n\t\tconstructor() {\n\n\t\t\tthis.vertices = [];\n\t\t\tthis.normals = [];\n\t\t\tthis.colors = [];\n\t\t\tthis.uvs = [];\n\t\t\tthis.uvs2 = [];\n\n\t\t\tthis.groups = [];\n\n\t\t\tthis.morphTargets = {};\n\n\t\t\tthis.skinWeights = [];\n\t\t\tthis.skinIndices = [];\n\n\t\t\t// this.lineDistances = [];\n\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null;\n\n\t\t\t// update flags\n\n\t\t\tthis.verticesNeedUpdate = false;\n\t\t\tthis.normalsNeedUpdate = false;\n\t\t\tthis.colorsNeedUpdate = false;\n\t\t\tthis.uvsNeedUpdate = false;\n\t\t\tthis.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\tcomputeGroups( geometry ) {\n\n\t\t\tconst groups = [];\n\n\t\t\tlet group, i;\n\t\t\tlet materialIndex = undefined;\n\n\t\t\tconst faces = geometry.faces;\n\n\t\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\t// materials\n\n\t\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgroup = {\n\t\t\t\t\t\tstart: i * 3,\n\t\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( group !== undefined ) {\n\n\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\tgroups.push( group );\n\n\t\t\t}\n\n\t\t\tthis.groups = groups;\n\n\t\t}\n\n\t\tfromGeometry( geometry ) {\n\n\t\t\tconst faces = geometry.faces;\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t\t// morphs\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\t\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\t\tlet morphTargetsPosition;\n\n\t\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\t\tmorphTargetsPosition = [];\n\n\t\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t\t \tdata: []\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t\t}\n\n\t\t\tconst morphNormals = geometry.morphNormals;\n\t\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\t\tlet morphTargetsNormal;\n\n\t\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\t\tmorphTargetsNormal = [];\n\n\t\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t\t \tdata: []\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tconst skinIndices = geometry.skinIndices;\n\t\t\tconst skinWeights = geometry.skinWeights;\n\n\t\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t\t//\n\n\t\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst normal = face.normal;\n\n\t\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t\t}\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst color = face.color;\n\n\t\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// morphs\n\n\t\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t\t}\n\n\t\t\t\t// skins\n\n\t\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.computeGroups( geometry );\n\n\t\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tfunction arrayMax( array ) {\n\n\t\tif ( array.length === 0 ) return - Infinity;\n\n\t\tlet max = array[ 0 ];\n\n\t\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t\t}\n\n\t\treturn max;\n\n\t}\n\n\tconst TYPED_ARRAYS = {\n\t\tInt8Array: Int8Array,\n\t\tUint8Array: Uint8Array,\n\t\t// Workaround for IE11 pre KB2929437. See #11440\n\t\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\t\tInt16Array: Int16Array,\n\t\tUint16Array: Uint16Array,\n\t\tInt32Array: Int32Array,\n\t\tUint32Array: Uint32Array,\n\t\tFloat32Array: Float32Array,\n\t\tFloat64Array: Float64Array\n\t};\n\n\tfunction getTypedArray( type, buffer ) {\n\n\t\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n\t}\n\n\tlet _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\n\tconst _m1$2 = new Matrix4();\n\tconst _obj = new Object3D();\n\tconst _offset = new Vector3();\n\tconst _box$2 = new Box3();\n\tconst _boxMorphTargets = new Box3();\n\tconst _vector$4 = new Vector3();\n\n\tfunction BufferGeometry() {\n\n\t\tObject.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), {\n\n\t\tconstructor: BufferGeometry,\n\n\t\tisBufferGeometry: true,\n\n\t\tgetIndex: function () {\n\n\t\t\treturn this.index;\n\n\t\t},\n\n\t\tsetIndex: function ( index ) {\n\n\t\t\tif ( Array.isArray( index ) ) {\n\n\t\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tthis.index = index;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetAttribute: function ( name ) {\n\n\t\t\treturn this.attributes[ name ];\n\n\t\t},\n\n\t\tsetAttribute: function ( name, attribute ) {\n\n\t\t\tthis.attributes[ name ] = attribute;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdeleteAttribute: function ( name ) {\n\n\t\t\tdelete this.attributes[ name ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\thasAttribute: function ( name ) {\n\n\t\t\treturn this.attributes[ name ] !== undefined;\n\n\t\t},\n\n\t\taddGroup: function ( start, count, materialIndex = 0 ) {\n\n\t\t\tthis.groups.push( {\n\n\t\t\t\tstart: start,\n\t\t\t\tcount: count,\n\t\t\t\tmaterialIndex: materialIndex\n\n\t\t\t} );\n\n\t\t},\n\n\t\tclearGroups: function () {\n\n\t\t\tthis.groups = [];\n\n\t\t},\n\n\t\tsetDrawRange: function ( start, count ) {\n\n\t\t\tthis.drawRange.start = start;\n\t\t\tthis.drawRange.count = count;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\tconst position = this.attributes.position;\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\t\tposition.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tconst normal = this.attributes.normal;\n\n\t\t\tif ( normal !== undefined ) {\n\n\t\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\t\tnormal.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tconst tangent = this.attributes.tangent;\n\n\t\t\tif ( tangent !== undefined ) {\n\n\t\t\t\ttangent.transformDirection( matrix );\n\n\t\t\t\ttangent.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tthis.computeBoundingSphere();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateX: function ( angle ) {\n\n\t\t\t// rotate geometry around world x-axis\n\n\t\t\t_m1$2.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix4( _m1$2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateY: function ( angle ) {\n\n\t\t\t// rotate geometry around world y-axis\n\n\t\t\t_m1$2.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix4( _m1$2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateZ: function ( angle ) {\n\n\t\t\t// rotate geometry around world z-axis\n\n\t\t\t_m1$2.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix4( _m1$2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( x, y, z ) {\n\n\t\t\t// translate geometry\n\n\t\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix4( _m1$2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tscale: function ( x, y, z ) {\n\n\t\t\t// scale geometry\n\n\t\t\t_m1$2.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix4( _m1$2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlookAt: function ( vector ) {\n\n\t\t\t_obj.lookAt( vector );\n\n\t\t\t_obj.updateMatrix();\n\n\t\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcenter: function () {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromObject: function ( object ) {\n\n\t\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\t\tthis.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\t\tthis.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\t\tthis.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isMesh ) {\n\n\t\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tconst position = [];\n\n\t\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tconst point = points[ i ];\n\t\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tupdateFromObject: function ( object ) {\n\n\t\t\tlet geometry = object.geometry;\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tlet direct = geometry.__directGeometry;\n\n\t\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\t\tdirect = undefined;\n\t\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t\t}\n\n\t\t\t\tif ( direct === undefined ) {\n\n\t\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t\t}\n\n\t\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\t\tgeometry = direct;\n\n\t\t\t}\n\n\t\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\t\tconst attribute = this.attributes.position;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\t\tconst attribute = this.attributes.normal;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\t\tconst attribute = this.attributes.color;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\t\tconst attribute = this.attributes.uv;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\t\tconst attribute = this.attributes.lineDistance;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\t\tthis.groups = geometry.groups;\n\n\t\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromGeometry: function ( geometry ) {\n\n\t\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t\t},\n\n\t\tfromDirectGeometry: function ( geometry ) {\n\n\t\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\t\tthis.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\t\tthis.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\t\tthis.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\t\tthis.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\t\tthis.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t\t}\n\n\t\t\t// groups\n\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\t// morphs\n\n\t\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\t\tconst array = [];\n\t\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t\t}\n\n\t\t\t// skinning\n\n\t\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\t\tthis.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\t\tthis.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcomputeBoundingBox: function () {\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.boundingBox = new Box3();\n\n\t\t\t}\n\n\t\t\tconst position = this.attributes.position;\n\t\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\t\tthis.boundingBox.set(\n\t\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t\t);\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t\t// process morph attributes if present\n\n\t\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t\t}\n\n\t\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeBoundingSphere: function () {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tconst position = this.attributes.position;\n\t\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( position ) {\n\n\t\t\t\t// first, find the center of the bounding sphere\n\n\t\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t\t// process morph attributes if present\n\n\t\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_vector$4.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t\t_vector$4.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_box$2.getCenter( center );\n\n\t\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\t\tlet maxRadiusSq = 0;\n\n\t\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t\t_vector$4.fromBufferAttribute( position, i );\n\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// process morph attributes if present\n\n\t\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t_vector$4.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t\t_vector$4.add( _offset );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeFaceNormals: function () {\n\n\t\t\t// backwards compatibility\n\n\t\t},\n\n\t\tcomputeVertexNormals: function () {\n\n\t\t\tconst index = this.index;\n\t\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// reset existing normals to zero\n\n\t\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t\t// indexed elements\n\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\t\tnA.add( cb );\n\t\t\t\t\t\tnB.add( cb );\n\t\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.normalizeNormals();\n\n\t\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tmerge: function ( geometry, offset ) {\n\n\t\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( offset === undefined ) {\n\n\t\t\t\toffset = 0;\n\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tconst attributes = this.attributes;\n\n\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\t\tconst attribute1 = attributes[ key ];\n\t\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\t\tfor ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) {\n\n\t\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnormalizeNormals: function () {\n\n\t\t\tconst normals = this.attributes.normal;\n\n\t\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$4.fromBufferAttribute( normals, i );\n\n\t\t\t\t_vector$4.normalize();\n\n\t\t\t\tnormals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoNonIndexed: function () {\n\n\t\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\t\tconst array = attribute.array;\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst normalized = attribute.normalized;\n\n\t\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\t\tlet index = 0, index2 = 0;\n\n\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( this.index === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tconst geometry2 = new BufferGeometry();\n\n\t\t\tconst indices = this.index.array;\n\t\t\tconst attributes = this.attributes;\n\n\t\t\t// attributes\n\n\t\t\tfor ( const name in attributes ) {\n\n\t\t\t\tconst attribute = attributes[ name ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t\t}\n\n\t\t\t// morph attributes\n\n\t\t\tconst morphAttributes = this.morphAttributes;\n\n\t\t\tfor ( const name in morphAttributes ) {\n\n\t\t\t\tconst morphArray = [];\n\t\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t\t}\n\n\t\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t// groups\n\n\t\t\tconst groups = this.groups;\n\n\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\t\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t\treturn geometry2;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard BufferGeometry serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\t\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t\tif ( this.parameters !== undefined ) {\n\n\t\t\t\tconst parameters = this.parameters;\n\n\t\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\n\t\t\t}\n\n\t\t\tdata.data = { attributes: {} };\n\n\t\t\tconst index = this.index;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdata.data.index = {\n\t\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tconst attributes = this.attributes;\n\n\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\tconst attribute = attributes[ key ];\n\n\t\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\t\tdata.data.attributes[ key ] = attributeData;\n\n\t\t\t}\n\n\t\t\tconst morphAttributes = {};\n\t\t\tlet hasMorphAttributes = false;\n\n\t\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\t\t\tarray.push( attributeData );\n\n\t\t\t\t}\n\n\t\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\t\thasMorphAttributes = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasMorphAttributes ) {\n\n\t\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t}\n\n\t\t\tconst groups = this.groups;\n\n\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t\t}\n\n\t\t\tconst boundingSphere = this.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tdata.data.boundingSphere = {\n\t\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\t\tradius: boundingSphere.radius\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\t/*\n\t\t\t // Handle primitives\n\n\t\t\t const parameters = this.parameters;\n\n\t\t\t if ( parameters !== undefined ) {\n\n\t\t\t const values = [];\n\n\t\t\t for ( const key in parameters ) {\n\n\t\t\t values.push( parameters[ key ] );\n\n\t\t\t }\n\n\t\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t\t this.constructor.apply( geometry, values );\n\t\t\t return geometry;\n\n\t\t\t }\n\n\t\t\t return new this.constructor().copy( this );\n\t\t\t */\n\n\t\t\treturn new BufferGeometry().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\t// reset\n\n\t\t\tthis.index = null;\n\t\t\tthis.attributes = {};\n\t\t\tthis.morphAttributes = {};\n\t\t\tthis.groups = [];\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null;\n\n\t\t\t// used for storing cloned, shared data\n\n\t\t\tconst data = {};\n\n\t\t\t// name\n\n\t\t\tthis.name = source.name;\n\n\t\t\t// index\n\n\t\t\tconst index = source.index;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t\t}\n\n\t\t\t// attributes\n\n\t\t\tconst attributes = source.attributes;\n\n\t\t\tfor ( const name in attributes ) {\n\n\t\t\t\tconst attribute = attributes[ name ];\n\t\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t\t}\n\n\t\t\t// morph attributes\n\n\t\t\tconst morphAttributes = source.morphAttributes;\n\n\t\t\tfor ( const name in morphAttributes ) {\n\n\t\t\t\tconst array = [];\n\t\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t\t}\n\n\t\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t\t// groups\n\n\t\t\tconst groups = source.groups;\n\n\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\t\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t\t// bounding box\n\n\t\t\tconst boundingBox = source.boundingBox;\n\n\t\t\tif ( boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t\t}\n\n\t\t\t// bounding sphere\n\n\t\t\tconst boundingSphere = source.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\t// draw range\n\n\t\t\tthis.drawRange.start = source.drawRange.start;\n\t\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t\t// user data\n\n\t\t\tthis.userData = source.userData;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\tconst _inverseMatrix = new Matrix4();\n\tconst _ray = new Ray();\n\tconst _sphere = new Sphere();\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tconst _uvA = new Vector2();\n\tconst _uvB = new Vector2();\n\tconst _uvC = new Vector2();\n\n\tconst _intersectionPoint = new Vector3();\n\tconst _intersectionPointWorld = new Vector3();\n\n\tfunction Mesh( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Mesh,\n\n\t\tisMesh: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t\t}\n\n\t\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t\t}\n\n\t\t\tthis.material = source.material;\n\t\t\tthis.geometry = source.geometry;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tupdateMorphTargets: function () {\n\n\t\t\tconst geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\traycast: function ( raycaster, intersects ) {\n\n\t\t\tconst geometry = this.geometry;\n\t\t\tconst material = this.material;\n\t\t\tconst matrixWorld = this.matrixWorld;\n\n\t\t\tif ( material === undefined ) return;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere.copy( geometry.boundingSphere );\n\t\t\t_sphere.applyMatrix4( matrixWorld );\n\n\t\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t\t//\n\n\t\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\t\t// Check boundingBox before continuing\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tif ( _ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t\t}\n\n\t\t\tlet intersection;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tconst index = geometry.index;\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\t\tconst uv = geometry.attributes.uv;\n\t\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\t\tconst groups = geometry.groups;\n\t\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t// indexed buffer geometry\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\t\tconst vertices = geometry.vertices;\n\t\t\t\tconst faces = geometry.faces;\n\t\t\t\tlet uvs;\n\n\t\t\t\tconst faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\t\tfor ( let f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst face = faces[ f ];\n\t\t\t\t\tconst faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\t\tconst fvA = vertices[ face.a ];\n\t\t\t\t\tconst fvB = vertices[ face.b ];\n\t\t\t\t\tconst fvC = vertices[ face.c ];\n\n\t\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\t\tconst uvs_f = uvs[ f ];\n\t\t\t\t\t\t\t_uvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t\t_uvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t\t_uvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\t\tlet intersect;\n\n\t\tif ( material.side === BackSide ) {\n\n\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t\t} else {\n\n\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t\t}\n\n\t\tif ( intersect === null ) return null;\n\n\t\t_intersectionPointWorld.copy( point );\n\t\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\t\treturn {\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectionPointWorld.clone(),\n\t\t\tobject: object\n\t\t};\n\n\t}\n\n\tfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t\t_vA.fromBufferAttribute( position, a );\n\t\t_vB.fromBufferAttribute( position, b );\n\t\t_vC.fromBufferAttribute( position, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( material.morphTargets && morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.boneTransform( a, _vA );\n\t\t\tobject.boneTransform( b, _vB );\n\t\t\tobject.boneTransform( c, _vC );\n\n\t\t}\n\n\t\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint );\n\n\t\tif ( intersection ) {\n\n\t\t\tif ( uv ) {\n\n\t\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t\t}\n\n\t\t\tif ( uv2 ) {\n\n\t\t\t\t_uvA.fromBufferAttribute( uv2, a );\n\t\t\t\t_uvB.fromBufferAttribute( uv2, b );\n\t\t\t\t_uvC.fromBufferAttribute( uv2, c );\n\n\t\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t\t}\n\n\t\t\tconst face = new Face3( a, b, c );\n\t\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\t\tintersection.face = face;\n\n\t\t}\n\n\t\treturn intersection;\n\n\t}\n\n\tclass BoxBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'BoxBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tdepth: depth,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\tdepthSegments: depthSegments\n\t\t\t};\n\n\t\t\tconst scope = this;\n\n\t\t\t// segments\n\n\t\t\twidthSegments = Math.floor( widthSegments );\n\t\t\theightSegments = Math.floor( heightSegments );\n\t\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// helper variables\n\n\t\t\tlet numberOfVertices = 0;\n\t\t\tlet groupStart = 0;\n\n\t\t\t// build each side of the box geometry\n\n\t\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\t\tconst segmentWidth = width / gridX;\n\t\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\t\tconst widthHalf = width / 2;\n\t\t\t\tconst heightHalf = height / 2;\n\t\t\t\tconst depthHalf = depth / 2;\n\n\t\t\t\tconst gridX1 = gridX + 1;\n\t\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\t\tlet vertexCounter = 0;\n\t\t\t\tlet groupCount = 0;\n\n\t\t\t\tconst vector = new Vector3();\n\n\t\t\t\t// generate vertices, normals and uvs\n\n\t\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t\t// uvs\n\n\t\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t\t// counters\n\n\t\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// indices\n\n\t\t\t\t// 1. you need three indices to draw a single face\n\t\t\t\t// 2. a single segment consists of two faces\n\t\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t\t// faces\n\n\t\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t\t// increase counter\n\n\t\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t\t// calculate new start value for groups\n\n\t\t\t\tgroupStart += groupCount;\n\n\t\t\t\t// update total number of vertices\n\n\t\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uniform Utilities\n\t */\n\n\tfunction cloneUniforms( src ) {\n\n\t\tconst dst = {};\n\n\t\tfor ( const u in src ) {\n\n\t\t\tdst[ u ] = {};\n\n\t\t\tfor ( const p in src[ u ] ) {\n\n\t\t\t\tconst property = src[ u ][ p ];\n\n\t\t\t\tif ( property && ( property.isColor ||\n\t\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\t\tproperty.isTexture ) ) {\n\n\t\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn dst;\n\n\t}\n\n\tfunction mergeUniforms( uniforms ) {\n\n\t\tconst merged = {};\n\n\t\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\t\tfor ( const p in tmp ) {\n\n\t\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn merged;\n\n\t}\n\n\t// Legacy\n\n\tconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\n\tvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\n\tvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n\t/**\n\t * parameters = {\n\t *  defines: { \"label\" : \"value\" },\n\t *  uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n\t *\n\t *  fragmentShader: <string>,\n\t *  vertexShader: <string>,\n\t *\n\t *  wireframe: <boolean>,\n\t *  wireframeLinewidth: <float>,\n\t *\n\t *  lights: <bool>,\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>,\n\t *  morphNormals: <bool>\n\t * }\n\t */\n\n\tfunction ShaderMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.skinning = false; // set to use skinning attribute streams\n\t\tthis.morphTargets = false; // set to use morph targets\n\t\tthis.morphNormals = false; // set to use morph normals\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tShaderMaterial.prototype = Object.create( Material.prototype );\n\tShaderMaterial.prototype.constructor = ShaderMaterial;\n\n\tShaderMaterial.prototype.isShaderMaterial = true;\n\n\tShaderMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.skinning = source.skinning;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t};\n\n\tShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\t\tconst data = Material.prototype.toJSON.call( this, meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t};\n\n\tfunction Camera() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Camera,\n\n\t\tisCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetWorldDirection: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix( true, false );\n\n\t\t\tconst e = this.matrixWorld.elements;\n\n\t\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t\t},\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t\t},\n\n\t\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\t\tObject3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren );\n\n\t\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t} );\n\n\tfunction PerspectiveCamera( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tCamera.call( this );\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\t\tconstructor: PerspectiveCamera,\n\n\t\tisPerspectiveCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.fov = source.fov;\n\t\t\tthis.zoom = source.zoom;\n\n\t\t\tthis.near = source.near;\n\t\t\tthis.far = source.far;\n\t\t\tthis.focus = source.focus;\n\n\t\t\tthis.aspect = source.aspect;\n\t\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\t\tthis.filmGauge = source.filmGauge;\n\t\t\tthis.filmOffset = source.filmOffset;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t\t *\n\t\t * The default film gauge is 35, so that the focal length can be specified for\n\t\t * a 35mm (full frame) camera.\n\t\t *\n\t\t * Values for focal length and film gauge must have the same unit.\n\t\t */\n\t\tsetFocalLength: function ( focalLength ) {\n\n\t\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\t\tthis.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\t/**\n\t\t * Calculates the focal length from the current .fov and .filmGauge.\n\t\t */\n\t\tgetFocalLength: function () {\n\n\t\t\tconst vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov );\n\n\t\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t\t},\n\n\t\tgetEffectiveFOV: function () {\n\n\t\t\treturn MathUtils.RAD2DEG * 2 * Math.atan(\n\t\t\t\tMath.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t\t},\n\n\t\tgetFilmWidth: function () {\n\n\t\t\t// film not completely covered in portrait format (aspect < 1)\n\t\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t\t},\n\n\t\tgetFilmHeight: function () {\n\n\t\t\t// film not completely covered in landscape format (aspect > 1)\n\t\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t\t},\n\n\t\t/**\n\t\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t\t * multi-monitor/multi-machine setups.\n\t\t *\n\t\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t\t * the monitors are in grid like this\n\t\t *\n\t\t *   +---+---+---+\n\t\t *   | A | B | C |\n\t\t *   +---+---+---+\n\t\t *   | D | E | F |\n\t\t *   +---+---+---+\n\t\t *\n\t\t * then for each monitor you would call it like this\n\t\t *\n\t\t *   const w = 1920;\n\t\t *   const h = 1080;\n\t\t *   const fullWidth = w * 3;\n\t\t *   const fullHeight = h * 2;\n\t\t *\n\t\t *   --A--\n\t\t *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t\t *   --B--\n\t\t *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t\t *   --C--\n\t\t *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t\t *   --D--\n\t\t *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t\t *   --E--\n\t\t *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t\t *   --F--\n\t\t *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t\t *\n\t\t *   Note there is no reason monitors have to be the same size or in a grid.\n\t\t */\n\t\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\t\tif ( this.view === null ) {\n\n\t\t\t\tthis.view = {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tfullWidth: 1,\n\t\t\t\t\tfullHeight: 1,\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 0,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.view.enabled = true;\n\t\t\tthis.view.fullWidth = fullWidth;\n\t\t\tthis.view.fullHeight = fullHeight;\n\t\t\tthis.view.offsetX = x;\n\t\t\tthis.view.offsetY = y;\n\t\t\tthis.view.width = width;\n\t\t\tthis.view.height = height;\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tclearViewOffset: function () {\n\n\t\t\tif ( this.view !== null ) {\n\n\t\t\t\tthis.view.enabled = false;\n\n\t\t\t}\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tupdateProjectionMatrix: function () {\n\n\t\t\tconst near = this.near;\n\t\t\tlet top = near * Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\t\tlet height = 2 * top;\n\t\t\tlet width = this.aspect * height;\n\t\t\tlet left = - 0.5 * width;\n\t\t\tconst view = this.view;\n\n\t\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\t\twidth *= view.width / fullWidth;\n\t\t\t\theight *= view.height / fullHeight;\n\n\t\t\t}\n\n\t\t\tconst skew = this.filmOffset;\n\t\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.fov = this.fov;\n\t\t\tdata.object.zoom = this.zoom;\n\n\t\t\tdata.object.near = this.near;\n\t\t\tdata.object.far = this.far;\n\t\t\tdata.object.focus = this.focus;\n\n\t\t\tdata.object.aspect = this.aspect;\n\n\t\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\t\tdata.object.filmGauge = this.filmGauge;\n\t\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tconst fov = 90, aspect = 1;\n\n\tfunction CubeCamera( near, far, renderTarget ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t\tthis.update = function ( renderer, scene ) {\n\n\t\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\trenderer.xr.enabled = false;\n\n\t\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\t\trenderer.render( scene, cameraPX );\n\n\t\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\t\trenderer.render( scene, cameraNX );\n\n\t\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\t\trenderer.render( scene, cameraPY );\n\n\t\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\t\trenderer.render( scene, cameraNY );\n\n\t\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\t\trenderer.render( scene, cameraPZ );\n\n\t\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\t\trenderer.render( scene, cameraNZ );\n\n\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\t};\n\n\t}\n\n\tCubeCamera.prototype = Object.create( Object3D.prototype );\n\tCubeCamera.prototype.constructor = CubeCamera;\n\n\tfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\t\tformat = format !== undefined ? format : RGBFormat;\n\n\t\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.flipY = false;\n\n\t\t// Why CubeTexture._needsFlipEnvMap is necessary:\n\t\t//\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false)\n\t\t// when using WebGLCubeRenderTarget.texture as a cube texture.\n\n\t\tthis._needsFlipEnvMap = true;\n\n\t}\n\n\tCubeTexture.prototype = Object.create( Texture.prototype );\n\tCubeTexture.prototype.constructor = CubeTexture;\n\n\tCubeTexture.prototype.isCubeTexture = true;\n\n\tObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\t\tget: function () {\n\n\t\t\treturn this.image;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.image = value;\n\n\t\t}\n\n\t} );\n\n\tfunction WebGLCubeRenderTarget( size, options, dummy ) {\n\n\t\tif ( Number.isInteger( options ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\t\toptions = dummy;\n\n\t\t}\n\n\t\tWebGLRenderTarget.call( this, size, size, options );\n\n\t\toptions = options || {};\n\n\t\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.texture._needsFlipEnvMap = false;\n\n\t}\n\n\tWebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype );\n\tWebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget;\n\n\tWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\n\tWebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.format = RGBAFormat; // see #18859\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include <begin_vertex>\n\t\t\t\t#include <project_vertex>\n\n\t\t\t}\n\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxBufferGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t};\n\n\tWebGLCubeRenderTarget.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t};\n\n\tfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { data: data || null, width: width || 1, height: height || 1 };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tDataTexture.prototype = Object.create( Texture.prototype );\n\tDataTexture.prototype.constructor = DataTexture;\n\n\tDataTexture.prototype.isDataTexture = true;\n\n\tconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\tconst _vector$5 = /*@__PURE__*/ new Vector3();\n\n\tclass Frustum {\n\n\t\tconstructor( p0, p1, p2, p3, p4, p5 ) {\n\n\t\t\tthis.planes = [\n\n\t\t\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t\t\t];\n\n\t\t}\n\n\t\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\t\tconst planes = this.planes;\n\n\t\t\tplanes[ 0 ].copy( p0 );\n\t\t\tplanes[ 1 ].copy( p1 );\n\t\t\tplanes[ 2 ].copy( p2 );\n\t\t\tplanes[ 3 ].copy( p3 );\n\t\t\tplanes[ 4 ].copy( p4 );\n\t\t\tplanes[ 5 ].copy( p5 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( frustum ) {\n\n\t\t\tconst planes = this.planes;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromProjectionMatrix( m ) {\n\n\t\t\tconst planes = this.planes;\n\t\t\tconst me = m.elements;\n\t\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tintersectsObject( object ) {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t\t}\n\n\t\tintersectsSprite( sprite ) {\n\n\t\t\t_sphere$1.center.set( 0, 0, 0 );\n\t\t\t_sphere$1.radius = 0.7071067811865476;\n\t\t\t_sphere$1.applyMatrix4( sprite.matrixWorld );\n\n\t\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t\t}\n\n\t\tintersectsSphere( sphere ) {\n\n\t\t\tconst planes = this.planes;\n\t\t\tconst center = sphere.center;\n\t\t\tconst negRadius = - sphere.radius;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tintersectsBox( box ) {\n\n\t\t\tconst planes = this.planes;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tconst plane = planes[ i ];\n\n\t\t\t\t// corner at max distance\n\n\t\t\t\t_vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\t_vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\t_vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\tif ( plane.distanceToPoint( _vector$5 ) < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tcontainsPoint( point ) {\n\n\t\t\tconst planes = this.planes;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\tfunction WebGLAnimation() {\n\n\t\tlet context = null;\n\t\tlet isAnimating = false;\n\t\tlet animationLoop = null;\n\t\tlet requestId = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tanimationLoop( time, frame );\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tstart: function () {\n\n\t\t\t\tif ( isAnimating === true ) return;\n\t\t\t\tif ( animationLoop === null ) return;\n\n\t\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\t\tisAnimating = true;\n\n\t\t\t},\n\n\t\t\tstop: function () {\n\n\t\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\t\tisAnimating = false;\n\n\t\t\t},\n\n\t\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\t\tanimationLoop = callback;\n\n\t\t\t},\n\n\t\t\tsetContext: function ( value ) {\n\n\t\t\t\tcontext = value;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction WebGLAttributes( gl, capabilities ) {\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\n\t\tconst buffers = new WeakMap();\n\n\t\tfunction createBuffer( attribute, bufferType ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst usage = attribute.usage;\n\n\t\t\tconst buffer = gl.createBuffer();\n\n\t\t\tgl.bindBuffer( bufferType, buffer );\n\t\t\tgl.bufferData( bufferType, array, usage );\n\n\t\t\tattribute.onUploadCallback();\n\n\t\t\tlet type = 5126;\n\n\t\t\tif ( array instanceof Float32Array ) {\n\n\t\t\t\ttype = 5126;\n\n\t\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\t\ttype = 5131;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttype = 5123;\n\n\t\t\t\t}\n\n\t\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\t\ttype = 5122;\n\n\t\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\t\ttype = 5125;\n\n\t\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\t\ttype = 5124;\n\n\t\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\t\ttype = 5120;\n\n\t\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\t\ttype = 5121;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tbuffer: buffer,\n\t\t\t\ttype: type,\n\t\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\t\tversion: attribute.version\n\t\t\t};\n\n\t\t}\n\n\t\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst updateRange = attribute.updateRange;\n\n\t\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t\t// Not using update ranges\n\n\t\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t\t} else {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t\t}\n\n\t\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction get( attribute ) {\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\treturn buffers.get( attribute );\n\n\t\t}\n\n\t\tfunction remove( attribute ) {\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\tconst data = buffers.get( attribute );\n\n\t\t\tif ( data ) {\n\n\t\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\t\tbuffers.delete( attribute );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction update( attribute, bufferType ) {\n\n\t\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\t\tversion: attribute.version\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\tconst data = buffers.get( attribute );\n\n\t\t\tif ( data === undefined ) {\n\n\t\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\t\tdata.version = attribute.version;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tget: get,\n\t\t\tremove: remove,\n\t\t\tupdate: update\n\n\t\t};\n\n\t}\n\n\tclass PlaneBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'PlaneBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments\n\t\t\t};\n\n\t\t\tconst width_half = width / 2;\n\t\t\tconst height_half = height / 2;\n\n\t\t\tconst gridX = Math.floor( widthSegments );\n\t\t\tconst gridY = Math.floor( heightSegments );\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tconst segment_width = width / gridX;\n\t\t\tconst segment_height = height / gridY;\n\n\t\t\t//\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t}\n\n\t}\n\n\tvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\n\tvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\n\tvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\";\n\n\tvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\";\n\n\tvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\n\tvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\n\tvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\n\tvar bsdfs = \"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\";\n\n\tvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\n\tvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\n\tvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\n\tvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\n\tvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\n\tvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\n\tvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\n\tvar color_pars_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\n\tvar color_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor.xyz *= color.xyz;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\n\tvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\";\n\n\tvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\n\tvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\n\tvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\n\tvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\n\tvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\n\tvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\n\tvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\n\tvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\n\tvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\n\tvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\n\tvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\n\tvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\n\tvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\n\tvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\";\n\n\tvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\";\n\n\tvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\n\tvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\n\tvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\n\tvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\";\n\n\tvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\n\tvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\n\tvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\n\tvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\";\n\n\tvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\n\tvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\n\tvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\n\tvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\n\tvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\";\n\n\tvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3(    0, 1,    0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\n\tvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\n\tvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\";\n\n\tvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\n\tvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\n\tvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\n\tvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\n\tvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\n\tvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\n\tvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\n\tvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\n\tvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\n\tvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\n\tvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\n\tvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\";\n\n\tvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\n\tvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\";\n\n\tvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t\\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\n\tvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\";\n\n\tvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\n\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\";\n\n\tvar clearcoat_normal_fragment_begin = \"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\n\tvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\\n\\t#endif\\n#endif\";\n\n\tvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\n\tvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\n\tvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\n\tvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\n\tvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\n\tvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\n\tvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\n\tvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\n\tvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t  f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t  f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\n\tvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\n\tvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\n\tvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\n\tvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\n\tvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\n\tvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\n\tvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\n\tvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\n\tvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\n\tvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\n\tvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3(  1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108,  1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605,  1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\n\tvar transmissionmap_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n#endif\";\n\n\tvar transmissionmap_pars_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\tuniform sampler2D transmissionMap;\\n#endif\";\n\n\tvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\n\tvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\n\tvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\n\tvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\n\tvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\n\tvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\n\tvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\n\tvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\n\tvar background_vert = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\n\tvar cube_frag = \"#include <envmap_common_pars_fragment>\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include <cube_uv_reflection_fragment>\\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\n\tvar cube_vert = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\n\tvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\";\n\n\tvar depth_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\n\tvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\n\tvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\n\tvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\n\tvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\";\n\n\tvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\n\tvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshbasic_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshmatcap_frag = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\n\tvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_toon_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_toon_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshphysical_frag = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n\\t#define TRANSMISSION\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef TRANSMISSION\\n\\tuniform float transmission;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <transmissionmap_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <lights_pars_begin>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <clearcoat_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#ifdef TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\n\\t#endif\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <clearcoat_normal_fragment_begin>\\n\\t#include <clearcoat_normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <transmissionmap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#ifdef TRANSMISSION\\n\\t\\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\\n\\t#endif\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshphysical_vert = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\n\tvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\n\tvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\n\tvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\n\tvar shadow_vert = \"#include <common>\\n#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\n\tvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tconst ShaderChunk = {\n\t\talphamap_fragment: alphamap_fragment,\n\t\talphamap_pars_fragment: alphamap_pars_fragment,\n\t\talphatest_fragment: alphatest_fragment,\n\t\taomap_fragment: aomap_fragment,\n\t\taomap_pars_fragment: aomap_pars_fragment,\n\t\tbegin_vertex: begin_vertex,\n\t\tbeginnormal_vertex: beginnormal_vertex,\n\t\tbsdfs: bsdfs,\n\t\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\t\tclipping_planes_fragment: clipping_planes_fragment,\n\t\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\t\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\t\tclipping_planes_vertex: clipping_planes_vertex,\n\t\tcolor_fragment: color_fragment,\n\t\tcolor_pars_fragment: color_pars_fragment,\n\t\tcolor_pars_vertex: color_pars_vertex,\n\t\tcolor_vertex: color_vertex,\n\t\tcommon: common,\n\t\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\t\tdefaultnormal_vertex: defaultnormal_vertex,\n\t\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\t\tdisplacementmap_vertex: displacementmap_vertex,\n\t\temissivemap_fragment: emissivemap_fragment,\n\t\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\t\tencodings_fragment: encodings_fragment,\n\t\tencodings_pars_fragment: encodings_pars_fragment,\n\t\tenvmap_fragment: envmap_fragment,\n\t\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\t\tenvmap_pars_fragment: envmap_pars_fragment,\n\t\tenvmap_pars_vertex: envmap_pars_vertex,\n\t\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\t\tenvmap_vertex: envmap_vertex,\n\t\tfog_vertex: fog_vertex,\n\t\tfog_pars_vertex: fog_pars_vertex,\n\t\tfog_fragment: fog_fragment,\n\t\tfog_pars_fragment: fog_pars_fragment,\n\t\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\t\tlightmap_fragment: lightmap_fragment,\n\t\tlightmap_pars_fragment: lightmap_pars_fragment,\n\t\tlights_lambert_vertex: lights_lambert_vertex,\n\t\tlights_pars_begin: lights_pars_begin,\n\t\tlights_toon_fragment: lights_toon_fragment,\n\t\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\t\tlights_phong_fragment: lights_phong_fragment,\n\t\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\t\tlights_physical_fragment: lights_physical_fragment,\n\t\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\t\tlights_fragment_begin: lights_fragment_begin,\n\t\tlights_fragment_maps: lights_fragment_maps,\n\t\tlights_fragment_end: lights_fragment_end,\n\t\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\t\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\t\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\t\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\t\tmap_fragment: map_fragment,\n\t\tmap_pars_fragment: map_pars_fragment,\n\t\tmap_particle_fragment: map_particle_fragment,\n\t\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\t\tmetalnessmap_fragment: metalnessmap_fragment,\n\t\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\t\tmorphnormal_vertex: morphnormal_vertex,\n\t\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\t\tmorphtarget_vertex: morphtarget_vertex,\n\t\tnormal_fragment_begin: normal_fragment_begin,\n\t\tnormal_fragment_maps: normal_fragment_maps,\n\t\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\t\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\t\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\t\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\t\tpacking: packing,\n\t\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\t\tproject_vertex: project_vertex,\n\t\tdithering_fragment: dithering_fragment,\n\t\tdithering_pars_fragment: dithering_pars_fragment,\n\t\troughnessmap_fragment: roughnessmap_fragment,\n\t\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\t\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\t\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\t\tshadowmap_vertex: shadowmap_vertex,\n\t\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\t\tskinbase_vertex: skinbase_vertex,\n\t\tskinning_pars_vertex: skinning_pars_vertex,\n\t\tskinning_vertex: skinning_vertex,\n\t\tskinnormal_vertex: skinnormal_vertex,\n\t\tspecularmap_fragment: specularmap_fragment,\n\t\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\t\ttonemapping_fragment: tonemapping_fragment,\n\t\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\t\ttransmissionmap_fragment: transmissionmap_fragment,\n\t\ttransmissionmap_pars_fragment: transmissionmap_pars_fragment,\n\t\tuv_pars_fragment: uv_pars_fragment,\n\t\tuv_pars_vertex: uv_pars_vertex,\n\t\tuv_vertex: uv_vertex,\n\t\tuv2_pars_fragment: uv2_pars_fragment,\n\t\tuv2_pars_vertex: uv2_pars_vertex,\n\t\tuv2_vertex: uv2_vertex,\n\t\tworldpos_vertex: worldpos_vertex,\n\n\t\tbackground_frag: background_frag,\n\t\tbackground_vert: background_vert,\n\t\tcube_frag: cube_frag,\n\t\tcube_vert: cube_vert,\n\t\tdepth_frag: depth_frag,\n\t\tdepth_vert: depth_vert,\n\t\tdistanceRGBA_frag: distanceRGBA_frag,\n\t\tdistanceRGBA_vert: distanceRGBA_vert,\n\t\tequirect_frag: equirect_frag,\n\t\tequirect_vert: equirect_vert,\n\t\tlinedashed_frag: linedashed_frag,\n\t\tlinedashed_vert: linedashed_vert,\n\t\tmeshbasic_frag: meshbasic_frag,\n\t\tmeshbasic_vert: meshbasic_vert,\n\t\tmeshlambert_frag: meshlambert_frag,\n\t\tmeshlambert_vert: meshlambert_vert,\n\t\tmeshmatcap_frag: meshmatcap_frag,\n\t\tmeshmatcap_vert: meshmatcap_vert,\n\t\tmeshtoon_frag: meshtoon_frag,\n\t\tmeshtoon_vert: meshtoon_vert,\n\t\tmeshphong_frag: meshphong_frag,\n\t\tmeshphong_vert: meshphong_vert,\n\t\tmeshphysical_frag: meshphysical_frag,\n\t\tmeshphysical_vert: meshphysical_vert,\n\t\tnormal_frag: normal_frag,\n\t\tnormal_vert: normal_vert,\n\t\tpoints_frag: points_frag,\n\t\tpoints_vert: points_vert,\n\t\tshadow_frag: shadow_frag,\n\t\tshadow_vert: shadow_vert,\n\t\tsprite_frag: sprite_frag,\n\t\tsprite_vert: sprite_vert\n\t};\n\n\t/**\n\t * Uniforms library for shared webgl shaders\n\t */\n\n\tconst UniformsLib = {\n\n\t\tcommon: {\n\n\t\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\t\topacity: { value: 1.0 },\n\n\t\t\tmap: { value: null },\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tuv2Transform: { value: new Matrix3() },\n\n\t\t\talphaMap: { value: null },\n\n\t\t},\n\n\t\tspecularmap: {\n\n\t\t\tspecularMap: { value: null },\n\n\t\t},\n\n\t\tenvmap: {\n\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\treflectivity: { value: 1.0 },\n\t\t\trefractionRatio: { value: 0.98 },\n\t\t\tmaxMipLevel: { value: 0 }\n\n\t\t},\n\n\t\taomap: {\n\n\t\t\taoMap: { value: null },\n\t\t\taoMapIntensity: { value: 1 }\n\n\t\t},\n\n\t\tlightmap: {\n\n\t\t\tlightMap: { value: null },\n\t\t\tlightMapIntensity: { value: 1 }\n\n\t\t},\n\n\t\temissivemap: {\n\n\t\t\temissiveMap: { value: null }\n\n\t\t},\n\n\t\tbumpmap: {\n\n\t\t\tbumpMap: { value: null },\n\t\t\tbumpScale: { value: 1 }\n\n\t\t},\n\n\t\tnormalmap: {\n\n\t\t\tnormalMap: { value: null },\n\t\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t\t},\n\n\t\tdisplacementmap: {\n\n\t\t\tdisplacementMap: { value: null },\n\t\t\tdisplacementScale: { value: 1 },\n\t\t\tdisplacementBias: { value: 0 }\n\n\t\t},\n\n\t\troughnessmap: {\n\n\t\t\troughnessMap: { value: null }\n\n\t\t},\n\n\t\tmetalnessmap: {\n\n\t\t\tmetalnessMap: { value: null }\n\n\t\t},\n\n\t\tgradientmap: {\n\n\t\t\tgradientMap: { value: null }\n\n\t\t},\n\n\t\tfog: {\n\n\t\t\tfogDensity: { value: 0.00025 },\n\t\t\tfogNear: { value: 1 },\n\t\t\tfogFar: { value: 2000 },\n\t\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t\t},\n\n\t\tlights: {\n\n\t\t\tambientLightColor: { value: [] },\n\n\t\t\tlightProbe: { value: [] },\n\n\t\t\tdirectionalLights: { value: [], properties: {\n\t\t\t\tdirection: {},\n\t\t\t\tcolor: {}\n\t\t\t} },\n\n\t\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowNormalBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {}\n\t\t\t} },\n\n\t\t\tdirectionalShadowMap: { value: [] },\n\t\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\t\tspotLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\tdirection: {},\n\t\t\t\tdistance: {},\n\t\t\t\tconeCos: {},\n\t\t\t\tpenumbraCos: {},\n\t\t\t\tdecay: {}\n\t\t\t} },\n\n\t\t\tspotLightShadows: { value: [], properties: {\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowNormalBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {}\n\t\t\t} },\n\n\t\t\tspotShadowMap: { value: [] },\n\t\t\tspotShadowMatrix: { value: [] },\n\n\t\t\tpointLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\tdecay: {},\n\t\t\t\tdistance: {}\n\t\t\t} },\n\n\t\t\tpointLightShadows: { value: [], properties: {\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowNormalBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {},\n\t\t\t\tshadowCameraNear: {},\n\t\t\t\tshadowCameraFar: {}\n\t\t\t} },\n\n\t\t\tpointShadowMap: { value: [] },\n\t\t\tpointShadowMatrix: { value: [] },\n\n\t\t\themisphereLights: { value: [], properties: {\n\t\t\t\tdirection: {},\n\t\t\t\tskyColor: {},\n\t\t\t\tgroundColor: {}\n\t\t\t} },\n\n\t\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\t\trectAreaLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\twidth: {},\n\t\t\t\theight: {}\n\t\t\t} },\n\n\t\t\tltc_1: { value: null },\n\t\t\tltc_2: { value: null }\n\n\t\t},\n\n\t\tpoints: {\n\n\t\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\t\topacity: { value: 1.0 },\n\t\t\tsize: { value: 1.0 },\n\t\t\tscale: { value: 1.0 },\n\t\t\tmap: { value: null },\n\t\t\talphaMap: { value: null },\n\t\t\tuvTransform: { value: new Matrix3() }\n\n\t\t},\n\n\t\tsprite: {\n\n\t\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\t\topacity: { value: 1.0 },\n\t\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\t\trotation: { value: 0.0 },\n\t\t\tmap: { value: null },\n\t\t\talphaMap: { value: null },\n\t\t\tuvTransform: { value: new Matrix3() }\n\n\t\t}\n\n\t};\n\n\tconst ShaderLib = {\n\n\t\tbasic: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.fog\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t\t},\n\n\t\tlambert: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t\t},\n\n\t\tphong: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\t\tshininess: { value: 30 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t\t},\n\n\t\tstandard: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\tUniformsLib.roughnessmap,\n\t\t\t\tUniformsLib.metalnessmap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\t\troughness: { value: 1.0 },\n\t\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t\t},\n\n\t\ttoon: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\tUniformsLib.gradientmap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t\t},\n\n\t\tmatcap: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tmatcap: { value: null }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t\t},\n\n\t\tpoints: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.points,\n\t\t\t\tUniformsLib.fog\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.points_vert,\n\t\t\tfragmentShader: ShaderChunk.points_frag\n\n\t\t},\n\n\t\tdashed: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tscale: { value: 1 },\n\t\t\t\t\tdashSize: { value: 1 },\n\t\t\t\t\ttotalSize: { value: 2 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t\t},\n\n\t\tdepth: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.displacementmap\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.depth_vert,\n\t\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t\t},\n\n\t\tnormal: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\t{\n\t\t\t\t\topacity: { value: 1.0 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.normal_vert,\n\t\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t\t},\n\n\t\tsprite: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.sprite,\n\t\t\t\tUniformsLib.fog\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t\t},\n\n\t\tbackground: {\n\n\t\t\tuniforms: {\n\t\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\t\tt2D: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: ShaderChunk.background_vert,\n\t\t\tfragmentShader: ShaderChunk.background_frag\n\n\t\t},\n\t\t/* -------------------------------------------------------------------------\n\t\t//\tCube map shader\n\t\t ------------------------------------------------------------------------- */\n\n\t\tcube: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\t{\n\t\t\t\t\topacity: { value: 1.0 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.cube_vert,\n\t\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t\t},\n\n\t\tequirect: {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t\t},\n\n\t\tdistanceRGBA: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\t{\n\t\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t\t},\n\n\t\tshadow: {\n\n\t\t\tuniforms: mergeUniforms( [\n\t\t\t\tUniformsLib.lights,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\t\topacity: { value: 1.0 }\n\t\t\t\t},\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t\t}\n\n\t};\n\n\tShaderLib.physical = {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tShaderLib.standard.uniforms,\n\t\t\t{\n\t\t\t\tclearcoat: { value: 0 },\n\t\t\t\tclearcoatMap: { value: null },\n\t\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\t\tclearcoatNormalMap: { value: null },\n\t\t\t\tsheen: { value: new Color( 0x000000 ) },\n\t\t\t\ttransmission: { value: 0 },\n\t\t\t\ttransmissionMap: { value: null },\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t};\n\n\tfunction WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) {\n\n\t\tconst clearColor = new Color( 0x000000 );\n\t\tlet clearAlpha = 0;\n\n\t\tlet planeMesh;\n\t\tlet boxMesh;\n\n\t\tlet currentBackground = null;\n\t\tlet currentBackgroundVersion = 0;\n\t\tlet currentTonemapping = null;\n\n\t\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\t\tif ( background && background.isTexture ) {\n\n\t\t\t\tbackground = cubemaps.get( background );\n\n\t\t\t}\n\n\t\t\t// Ignore background in AR\n\t\t\t// TODO: Reconsider this.\n\n\t\t\tconst xr = renderer.xr;\n\t\t\tconst session = xr.getSession && xr.getSession();\n\n\t\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\t\tbackground = null;\n\n\t\t\t}\n\n\t\t\tif ( background === null ) {\n\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t} else if ( background && background.isColor ) {\n\n\t\t\t\tsetClear( background, 1 );\n\t\t\t\tforceClear = true;\n\n\t\t\t}\n\n\t\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t\t}\n\n\t\t\tif ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\t\tfog: false\n\t\t\t\t\t\t} )\n\t\t\t\t\t);\n\n\t\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t\t};\n\n\t\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t\t}\n\n\t\t\t\tif ( background.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\t// TODO Deprecate\n\n\t\t\t\t\tbackground = background.texture;\n\n\t\t\t\t}\n\n\t\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\t\tif ( currentBackground !== background ||\n\t\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\t\tcurrentBackground = background;\n\t\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t\t}\n\n\t\t\t\t// push to the pre-sorted opaque render list\n\t\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t\t} else if ( background && background.isTexture ) {\n\n\t\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\t\tfog: false\n\t\t\t\t\t\t} )\n\t\t\t\t\t);\n\n\t\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t\t}\n\n\t\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tbackground.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\t\tif ( currentBackground !== background ||\n\t\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\t\tcurrentBackground = background;\n\t\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t\t}\n\n\n\t\t\t\t// push to the pre-sorted opaque render list\n\t\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setClear( color, alpha ) {\n\n\t\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tgetClearColor: function () {\n\n\t\t\t\treturn clearColor;\n\n\t\t\t},\n\t\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\t\tclearColor.set( color );\n\t\t\t\tclearAlpha = alpha;\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t},\n\t\t\tgetClearAlpha: function () {\n\n\t\t\t\treturn clearAlpha;\n\n\t\t\t},\n\t\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\t\tclearAlpha = alpha;\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t},\n\t\t\trender: render\n\n\t\t};\n\n\t}\n\n\tfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\t\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\t\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\t\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\t\tconst bindingStates = {};\n\n\t\tconst defaultState = createBindingState( null );\n\t\tlet currentState = defaultState;\n\n\t\tfunction setup( object, material, program, geometry, index ) {\n\n\t\t\tlet updateBuffers = false;\n\n\t\t\tif ( vaoAvailable ) {\n\n\t\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\t\tif ( currentState !== state ) {\n\n\t\t\t\t\tcurrentState = state;\n\t\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t\t}\n\n\t\t\t\tupdateBuffers = needsUpdate( geometry, index );\n\n\t\t\t\tif ( updateBuffers ) saveCache( geometry, index );\n\n\t\t\t} else {\n\n\t\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\t\tcurrentState.program = program.id;\n\t\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\t\tupdateBuffers = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattributes.update( index, 34963 );\n\n\t\t\t}\n\n\t\t\tif ( updateBuffers ) {\n\n\t\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction createVertexArrayObject() {\n\n\t\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\t\treturn extension.createVertexArrayOES();\n\n\t\t}\n\n\t\tfunction bindVertexArrayObject( vao ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\t\treturn extension.bindVertexArrayOES( vao );\n\n\t\t}\n\n\t\tfunction deleteVertexArrayObject( vao ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t\t}\n\n\t\tfunction getBindingState( geometry, program, material ) {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\t\tif ( programMap === undefined ) {\n\n\t\t\t\tprogramMap = {};\n\t\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t\t}\n\n\t\t\tlet stateMap = programMap[ program.id ];\n\n\t\t\tif ( stateMap === undefined ) {\n\n\t\t\t\tstateMap = {};\n\t\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t\t}\n\n\t\t\tlet state = stateMap[ wireframe ];\n\n\t\t\tif ( state === undefined ) {\n\n\t\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\t\tstateMap[ wireframe ] = state;\n\n\t\t\t}\n\n\t\t\treturn state;\n\n\t\t}\n\n\t\tfunction createBindingState( vao ) {\n\n\t\t\tconst newAttributes = [];\n\t\t\tconst enabledAttributes = [];\n\t\t\tconst attributeDivisors = [];\n\n\t\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\t\tnewAttributes[ i ] = 0;\n\t\t\t\tenabledAttributes[ i ] = 0;\n\t\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t\t}\n\n\t\t\treturn {\n\n\t\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\t\tgeometry: null,\n\t\t\t\tprogram: null,\n\t\t\t\twireframe: false,\n\n\t\t\t\tnewAttributes: newAttributes,\n\t\t\t\tenabledAttributes: enabledAttributes,\n\t\t\t\tattributeDivisors: attributeDivisors,\n\t\t\t\tobject: vao,\n\t\t\t\tattributes: {},\n\t\t\t\tindex: null\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction needsUpdate( geometry, index ) {\n\n\t\t\tconst cachedAttributes = currentState.attributes;\n\t\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t\tlet attributesNum = 0;\n\n\t\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\t\tif ( currentState.index !== index ) return true;\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfunction saveCache( geometry, index ) {\n\n\t\t\tconst cache = {};\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tlet attributesNum = 0;\n\n\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\tconst attribute = attributes[ key ];\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ key ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t\tcurrentState.attributes = cache;\n\t\t\tcurrentState.attributesNum = attributesNum;\n\n\t\t\tcurrentState.index = index;\n\n\t\t}\n\n\t\tfunction initAttributes() {\n\n\t\t\tconst newAttributes = currentState.newAttributes;\n\n\t\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\t\tnewAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction enableAttribute( attribute ) {\n\n\t\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t\t}\n\n\t\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\t\tconst newAttributes = currentState.newAttributes;\n\t\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\t\tnewAttributes[ attribute ] = 1;\n\n\t\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t\t}\n\n\t\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableUnusedAttributes() {\n\n\t\t\tconst newAttributes = currentState.newAttributes;\n\t\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t\t} else {\n\n\t\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t\t}\n\n\t\t\tinitAttributes();\n\n\t\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t\tconst programAttributes = program.getAttributes();\n\n\t\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\t\tfor ( const name in programAttributes ) {\n\n\t\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\t\tconst geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( name === 'instanceMatrix' ) {\n\n\t\t\t\t\t\tconst attribute = attributes.get( object.instanceMatrix );\n\n\t\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 0, 1 );\n\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 1, 1 );\n\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 2, 1 );\n\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 3, 1 );\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 );\n\t\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 );\n\t\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 );\n\t\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 );\n\n\t\t\t\t\t} else if ( name === 'instanceColor' ) {\n\n\t\t\t\t\t\tconst attribute = attributes.get( object.instanceColor );\n\n\t\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, 1 );\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tgl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 );\n\n\t\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdisableUnusedAttributes();\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\treset();\n\n\t\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometry.id ];\n\n\t\t}\n\n\t\tfunction releaseStatesOfProgram( program ) {\n\n\t\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ program.id ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction reset() {\n\n\t\t\tresetDefaultState();\n\n\t\t\tif ( currentState === defaultState ) return;\n\n\t\t\tcurrentState = defaultState;\n\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t}\n\n\t\t// for backward-compatilibity\n\n\t\tfunction resetDefaultState() {\n\n\t\t\tdefaultState.geometry = null;\n\t\t\tdefaultState.program = null;\n\t\t\tdefaultState.wireframe = false;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tsetup: setup,\n\t\t\treset: reset,\n\t\t\tresetDefaultState: resetDefaultState,\n\t\t\tdispose: dispose,\n\t\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\t\tinitAttributes: initAttributes,\n\t\t\tenableAttribute: enableAttribute,\n\t\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t\t};\n\n\t}\n\n\tfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\n\t\tlet mode;\n\n\t\tfunction setMode( value ) {\n\n\t\t\tmode = value;\n\n\t\t}\n\n\t\tfunction render( start, count ) {\n\n\t\t\tgl.drawArrays( mode, start, count );\n\n\t\t\tinfo.update( count, mode, 1 );\n\n\t\t}\n\n\t\tfunction renderInstances( start, count, primcount ) {\n\n\t\t\tif ( primcount === 0 ) return;\n\n\t\t\tlet extension, methodName;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\textension = gl;\n\t\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\t\tif ( extension === null ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\t\tinfo.update( count, mode, primcount );\n\n\t\t}\n\n\t\t//\n\n\t\tthis.setMode = setMode;\n\t\tthis.render = render;\n\t\tthis.renderInstances = renderInstances;\n\n\t}\n\n\tfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\t\tlet maxAnisotropy;\n\n\t\tfunction getMaxAnisotropy() {\n\n\t\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t\t} else {\n\n\t\t\t\tmaxAnisotropy = 0;\n\n\t\t\t}\n\n\t\t\treturn maxAnisotropy;\n\n\t\t}\n\n\t\tfunction getMaxPrecision( precision ) {\n\n\t\t\tif ( precision === 'highp' ) {\n\n\t\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\t\treturn 'highp';\n\n\t\t\t\t}\n\n\t\t\t\tprecision = 'mediump';\n\n\t\t\t}\n\n\t\t\tif ( precision === 'mediump' ) {\n\n\t\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\t\treturn 'mediump';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn 'lowp';\n\n\t\t}\n\n\t\t/* eslint-disable no-undef */\n\t\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t\t/* eslint-enable no-undef */\n\n\t\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\t\tconst maxPrecision = getMaxPrecision( precision );\n\n\t\tif ( maxPrecision !== precision ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\t\tprecision = maxPrecision;\n\n\t\t}\n\n\t\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\t\tconst maxTextures = gl.getParameter( 34930 );\n\t\tconst maxVertexTextures = gl.getParameter( 35660 );\n\t\tconst maxTextureSize = gl.getParameter( 3379 );\n\t\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\t\tconst maxAttributes = gl.getParameter( 34921 );\n\t\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\t\tconst maxVaryings = gl.getParameter( 36348 );\n\t\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\t\tconst vertexTextures = maxVertexTextures > 0;\n\t\tconst floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' );\n\t\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\t\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\t\treturn {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\t\tprecision: precision,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tmaxTextures: maxTextures,\n\t\t\tmaxVertexTextures: maxVertexTextures,\n\t\t\tmaxTextureSize: maxTextureSize,\n\t\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\t\tmaxAttributes: maxAttributes,\n\t\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\t\tmaxVaryings: maxVaryings,\n\t\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\t\tvertexTextures: vertexTextures,\n\t\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\t\tmaxSamples: maxSamples\n\n\t\t};\n\n\t}\n\n\tfunction WebGLClipping( properties ) {\n\n\t\tconst scope = this;\n\n\t\tlet globalState = null,\n\t\t\tnumGlobalPlanes = 0,\n\t\t\tlocalClippingEnabled = false,\n\t\t\trenderingShadows = false;\n\n\t\tconst plane = new Plane(),\n\t\t\tviewNormalMatrix = new Matrix3(),\n\n\t\t\tuniform = { value: null, needsUpdate: false };\n\n\t\tthis.uniform = uniform;\n\t\tthis.numPlanes = 0;\n\t\tthis.numIntersection = 0;\n\n\t\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\t\tconst enabled =\n\t\t\t\tplanes.length !== 0 ||\n\t\t\t\tenableLocalClipping ||\n\t\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t\t// run another frame in order to reset the state:\n\t\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\t\tlocalClippingEnabled;\n\n\t\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\t\tnumGlobalPlanes = planes.length;\n\n\t\t\treturn enabled;\n\n\t\t};\n\n\t\tthis.beginShadows = function () {\n\n\t\t\trenderingShadows = true;\n\t\t\tprojectPlanes( null );\n\n\t\t};\n\n\t\tthis.endShadows = function () {\n\n\t\t\trenderingShadows = false;\n\t\t\tresetGlobalState();\n\n\t\t};\n\n\t\tthis.setState = function ( material, camera, useCache ) {\n\n\t\t\tconst planes = material.clippingPlanes,\n\t\t\t\tclipIntersection = material.clipIntersection,\n\t\t\t\tclipShadows = material.clipShadows;\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t\t// there's no local clipping\n\n\t\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t\t// there's no global clipping\n\n\t\t\t\t\tprojectPlanes( null );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresetGlobalState();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\t\tthis.numPlanes += nGlobal;\n\n\t\t\t}\n\n\n\t\t};\n\n\t\tfunction resetGlobalState() {\n\n\t\t\tif ( uniform.value !== globalState ) {\n\n\t\t\t\tuniform.value = globalState;\n\t\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t\t}\n\n\t\t\tscope.numPlanes = numGlobalPlanes;\n\t\t\tscope.numIntersection = 0;\n\n\t\t}\n\n\t\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\t\tlet dstArray = null;\n\n\t\t\tif ( nPlanes !== 0 ) {\n\n\t\t\t\tdstArray = uniform.value;\n\n\t\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tuniform.value = dstArray;\n\t\t\t\tuniform.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tscope.numPlanes = nPlanes;\n\t\t\tscope.numIntersection = 0;\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t}\n\n\tfunction WebGLCubeMaps( renderer ) {\n\n\t\tlet cubemaps = new WeakMap();\n\n\t\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tfunction get( texture ) {\n\n\t\t\tif ( texture && texture.isTexture ) {\n\n\t\t\t\tconst mapping = texture.mapping;\n\n\t\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\t\tconst currentRenderList = renderer.getRenderList();\n\t\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\t\t\t\t\t\t\trenderer.setRenderList( currentRenderList );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tfunction onTextureDispose( event ) {\n\n\t\t\tconst texture = event.target;\n\n\t\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\t\tconst cubemap = cubemaps.get( texture );\n\n\t\t\tif ( cubemap !== undefined ) {\n\n\t\t\t\tcubemaps.delete( texture );\n\t\t\t\tcubemap.dispose();\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tcubemaps = new WeakMap();\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\n\t}\n\n\tfunction WebGLExtensions( gl ) {\n\n\t\tconst extensions = {};\n\n\t\treturn {\n\n\t\t\thas: function ( name ) {\n\n\t\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\t\treturn extensions[ name ] !== null;\n\n\t\t\t\t}\n\n\t\t\t\tlet extension;\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t\t}\n\n\t\t\t\textensions[ name ] = extension;\n\n\t\t\t\treturn extension !== null;\n\n\t\t\t},\n\n\t\t\tget: function ( name ) {\n\n\t\t\t\tif ( ! this.has( name ) ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t\t}\n\n\t\t\t\treturn extensions[ name ];\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\t\tconst geometries = new WeakMap();\n\t\tconst wireframeAttributes = new WeakMap();\n\n\t\tfunction onGeometryDispose( event ) {\n\n\t\t\tconst geometry = event.target;\n\t\t\tconst buffergeometry = geometries.get( geometry );\n\n\t\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t\t}\n\n\t\t\tfor ( const name in buffergeometry.attributes ) {\n\n\t\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t\t}\n\n\t\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\t\tgeometries.delete( geometry );\n\n\t\t\tconst attribute = wireframeAttributes.get( buffergeometry );\n\n\t\t\tif ( attribute ) {\n\n\t\t\t\tattributes.remove( attribute );\n\t\t\t\twireframeAttributes.delete( buffergeometry );\n\n\t\t\t}\n\n\t\t\tbindingStates.releaseStatesOfGeometry( buffergeometry );\n\n\t\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tinfo.memory.geometries --;\n\n\t\t}\n\n\t\tfunction get( object, geometry ) {\n\n\t\t\tlet buffergeometry = geometries.get( geometry );\n\n\t\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tbuffergeometry = geometry;\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t\t}\n\n\t\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t\t}\n\n\t\t\tgeometries.set( geometry, buffergeometry );\n\n\t\t\tinfo.memory.geometries ++;\n\n\t\t\treturn buffergeometry;\n\n\t\t}\n\n\t\tfunction update( geometry ) {\n\n\t\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t\t}\n\n\t\t\t// morph targets\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\t\tfor ( const name in morphAttributes ) {\n\n\t\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateWireframeAttribute( geometry ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst geometryIndex = geometry.index;\n\t\t\tconst geometryPosition = geometry.attributes.position;\n\t\t\tlet version = 0;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\tconst array = geometryIndex.array;\n\t\t\t\tversion = geometryIndex.version;\n\n\t\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst array = geometryPosition.array;\n\t\t\t\tversion = geometryPosition.version;\n\n\t\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\t\tconst a = i + 0;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\t\tattribute.version = version;\n\n\t\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t\t//\n\n\t\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t\t//\n\n\t\t\twireframeAttributes.set( geometry, attribute );\n\n\t\t}\n\n\t\tfunction getWireframeAttribute( geometry ) {\n\n\t\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\t\tif ( currentAttribute ) {\n\n\t\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t}\n\n\t\t\treturn wireframeAttributes.get( geometry );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tget: get,\n\t\t\tupdate: update,\n\n\t\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t\t};\n\n\t}\n\n\tfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\n\t\tlet mode;\n\n\t\tfunction setMode( value ) {\n\n\t\t\tmode = value;\n\n\t\t}\n\n\t\tlet type, bytesPerElement;\n\n\t\tfunction setIndex( value ) {\n\n\t\t\ttype = value.type;\n\t\t\tbytesPerElement = value.bytesPerElement;\n\n\t\t}\n\n\t\tfunction render( start, count ) {\n\n\t\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\t\tinfo.update( count, mode, 1 );\n\n\t\t}\n\n\t\tfunction renderInstances( start, count, primcount ) {\n\n\t\t\tif ( primcount === 0 ) return;\n\n\t\t\tlet extension, methodName;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\textension = gl;\n\t\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\t\tif ( extension === null ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\t\tinfo.update( count, mode, primcount );\n\n\t\t}\n\n\t\t//\n\n\t\tthis.setMode = setMode;\n\t\tthis.setIndex = setIndex;\n\t\tthis.render = render;\n\t\tthis.renderInstances = renderInstances;\n\n\t}\n\n\tfunction WebGLInfo( gl ) {\n\n\t\tconst memory = {\n\t\t\tgeometries: 0,\n\t\t\ttextures: 0\n\t\t};\n\n\t\tconst render = {\n\t\t\tframe: 0,\n\t\t\tcalls: 0,\n\t\t\ttriangles: 0,\n\t\t\tpoints: 0,\n\t\t\tlines: 0\n\t\t};\n\n\t\tfunction update( count, mode, instanceCount ) {\n\n\t\t\trender.calls ++;\n\n\t\t\tswitch ( mode ) {\n\n\t\t\t\tcase 4:\n\t\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3:\n\t\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0:\n\t\t\t\t\trender.points += instanceCount * count;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction reset() {\n\n\t\t\trender.frame ++;\n\t\t\trender.calls = 0;\n\t\t\trender.triangles = 0;\n\t\t\trender.points = 0;\n\t\t\trender.lines = 0;\n\n\t\t}\n\n\t\treturn {\n\t\t\tmemory: memory,\n\t\t\trender: render,\n\t\t\tprograms: null,\n\t\t\tautoReset: true,\n\t\t\treset: reset,\n\t\t\tupdate: update\n\t\t};\n\n\t}\n\n\tfunction numericalSort( a, b ) {\n\n\t\treturn a[ 0 ] - b[ 0 ];\n\n\t}\n\n\tfunction absNumericalSort( a, b ) {\n\n\t\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n\t}\n\n\tfunction WebGLMorphtargets( gl ) {\n\n\t\tconst influencesList = {};\n\t\tconst morphInfluences = new Float32Array( 8 );\n\n\t\tconst workInfluences = [];\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t\t}\n\n\t\tfunction update( object, geometry, material, program ) {\n\n\t\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\t\tlet influences = influencesList[ geometry.id ];\n\n\t\t\tif ( influences === undefined ) {\n\n\t\t\t\t// initialise list\n\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t\t}\n\n\t\t\t// Collect influences\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tconst influence = influences[ i ];\n\n\t\t\t\tinfluence[ 0 ] = i;\n\t\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tinfluences.sort( absNumericalSort );\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tworkInfluences.sort( numericalSort );\n\n\t\t\tconst morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\t\tconst morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tconst influence = workInfluences[ i ];\n\t\t\t\tconst index = influence[ 0 ];\n\t\t\t\tconst value = influence[ 1 ];\n\n\t\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tupdate: update\n\n\t\t};\n\n\t}\n\n\tfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\t\tlet updateMap = new WeakMap();\n\n\t\tfunction update( object ) {\n\n\t\t\tconst frame = info.render.frame;\n\n\t\t\tconst geometry = object.geometry;\n\t\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t\t// Update once per frame\n\n\t\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t\t}\n\n\t\t\t\tgeometries.update( buffergeometry );\n\n\t\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t\t}\n\n\t\t\tif ( object.isInstancedMesh ) {\n\n\t\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t\t}\n\n\t\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffergeometry;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tupdateMap = new WeakMap();\n\n\t\t}\n\n\t\tfunction onInstancedMeshDispose( event ) {\n\n\t\t\tconst instancedMesh = event.target;\n\n\t\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tupdate: update,\n\t\t\tdispose: dispose\n\n\t\t};\n\n\t}\n\n\tfunction DataTexture2DArray( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tTexture.call( this, null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tDataTexture2DArray.prototype = Object.create( Texture.prototype );\n\tDataTexture2DArray.prototype.constructor = DataTexture2DArray;\n\tDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\n\tfunction DataTexture3D( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tTexture.call( this, null );\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\n\t\tthis.needsUpdate = true;\n\n\n\t}\n\n\tDataTexture3D.prototype = Object.create( Texture.prototype );\n\tDataTexture3D.prototype.constructor = DataTexture3D;\n\tDataTexture3D.prototype.isDataTexture3D = true;\n\n\t/**\n\t * Uniforms of a program.\n\t * Those form a tree structure with a special top-level container for the root,\n\t * which you get by calling 'new WebGLUniforms( gl, program )'.\n\t *\n\t *\n\t * Properties of inner nodes including the top-level container:\n\t *\n\t * .seq - array of nested uniforms\n\t * .map - nested uniforms by name\n\t *\n\t *\n\t * Methods of all nodes except the top-level container:\n\t *\n\t * .setValue( gl, value, [textures] )\n\t *\n\t * \t\tuploads a uniform value(s)\n\t *  \tthe 'textures' parameter is needed for sampler uniforms\n\t *\n\t *\n\t * Static methods of the top-level container (textures factorizations):\n\t *\n\t * .upload( gl, seq, values, textures )\n\t *\n\t * \t\tsets uniforms in 'seq' to 'values[id].value'\n\t *\n\t * .seqWithValue( seq, values ) : filteredSeq\n\t *\n\t * \t\tfilters 'seq' entries with corresponding entry in values\n\t *\n\t *\n\t * Methods of the top-level container (textures factorizations):\n\t *\n\t * .setValue( gl, name, value, textures )\n\t *\n\t * \t\tsets uniform with  name 'name' to 'value'\n\t *\n\t * .setOptional( gl, obj, prop )\n\t *\n\t * \t\tlike .set for an optional property of the object\n\t *\n\t */\n\n\tconst emptyTexture = new Texture();\n\tconst emptyTexture2dArray = new DataTexture2DArray();\n\tconst emptyTexture3d = new DataTexture3D();\n\tconst emptyCubeTexture = new CubeTexture();\n\n\t// --- Utilities ---\n\n\t// Array Caches (provide typed arrays for temporary by size)\n\n\tconst arrayCacheF32 = [];\n\tconst arrayCacheI32 = [];\n\n\t// Float32Array caches used for uploading Matrix uniforms\n\n\tconst mat4array = new Float32Array( 16 );\n\tconst mat3array = new Float32Array( 9 );\n\tconst mat2array = new Float32Array( 4 );\n\n\t// Flattening for arrays of vectors and matrices\n\n\tfunction flatten( array, nBlocks, blockSize ) {\n\n\t\tconst firstElem = array[ 0 ];\n\n\t\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t\t// unoptimized: ! isNaN( firstElem )\n\t\t// see http://jacksondunstan.com/articles/983\n\n\t\tconst n = nBlocks * blockSize;\n\t\tlet r = arrayCacheF32[ n ];\n\n\t\tif ( r === undefined ) {\n\n\t\t\tr = new Float32Array( n );\n\t\t\tarrayCacheF32[ n ] = r;\n\n\t\t}\n\n\t\tif ( nBlocks !== 0 ) {\n\n\t\t\tfirstElem.toArray( r, 0 );\n\n\t\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\t\toffset += blockSize;\n\t\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n\tfunction arraysEqual( a, b ) {\n\n\t\tif ( a.length !== b.length ) return false;\n\n\t\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction copyArray( a, b ) {\n\n\t\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\t\ta[ i ] = b[ i ];\n\n\t\t}\n\n\t}\n\n\t// Texture unit allocation\n\n\tfunction allocTexUnits( textures, n ) {\n\n\t\tlet r = arrayCacheI32[ n ];\n\n\t\tif ( r === undefined ) {\n\n\t\t\tr = new Int32Array( n );\n\t\t\tarrayCacheI32[ n ] = r;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n\t// --- Setters ---\n\n\t// Note: Defining these methods externally, because they come in a bunch\n\t// and this way their names minify.\n\n\t// Single scalar\n\n\tfunction setValueV1f( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache[ 0 ] === v ) return;\n\n\t\tgl.uniform1f( this.addr, v );\n\n\t\tcache[ 0 ] = v;\n\n\t}\n\n\t// Single float vector (from flat array or THREE.VectorN)\n\n\tfunction setValueV2f( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( v.x !== undefined ) {\n\n\t\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\t\tcache[ 0 ] = v.x;\n\t\t\t\tcache[ 1 ] = v.y;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniform2fv( this.addr, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t}\n\n\t}\n\n\tfunction setValueV3f( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( v.x !== undefined ) {\n\n\t\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\t\tcache[ 0 ] = v.x;\n\t\t\t\tcache[ 1 ] = v.y;\n\t\t\t\tcache[ 2 ] = v.z;\n\n\t\t\t}\n\n\t\t} else if ( v.r !== undefined ) {\n\n\t\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\t\tcache[ 0 ] = v.r;\n\t\t\t\tcache[ 1 ] = v.g;\n\t\t\t\tcache[ 2 ] = v.b;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniform3fv( this.addr, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t}\n\n\t}\n\n\tfunction setValueV4f( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( v.x !== undefined ) {\n\n\t\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\t\tcache[ 0 ] = v.x;\n\t\t\t\tcache[ 1 ] = v.y;\n\t\t\t\tcache[ 2 ] = v.z;\n\t\t\t\tcache[ 3 ] = v.w;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniform4fv( this.addr, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t}\n\n\t}\n\n\t// Single matrix (from flat array or MatrixN)\n\n\tfunction setValueM2( gl, v ) {\n\n\t\tconst cache = this.cache;\n\t\tconst elements = v.elements;\n\n\t\tif ( elements === undefined ) {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\t\tmat2array.set( elements );\n\n\t\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\t\tcopyArray( cache, elements );\n\n\t\t}\n\n\t}\n\n\tfunction setValueM3( gl, v ) {\n\n\t\tconst cache = this.cache;\n\t\tconst elements = v.elements;\n\n\t\tif ( elements === undefined ) {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\t\tmat3array.set( elements );\n\n\t\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\t\tcopyArray( cache, elements );\n\n\t\t}\n\n\t}\n\n\tfunction setValueM4( gl, v ) {\n\n\t\tconst cache = this.cache;\n\t\tconst elements = v.elements;\n\n\t\tif ( elements === undefined ) {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\t\tmat4array.set( elements );\n\n\t\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\t\tcopyArray( cache, elements );\n\n\t\t}\n\n\t}\n\n\t// Single texture (2D / Cube)\n\n\tfunction setValueT1( gl, v, textures ) {\n\n\t\tconst cache = this.cache;\n\t\tconst unit = textures.allocateTextureUnit();\n\n\t\tif ( cache[ 0 ] !== unit ) {\n\n\t\t\tgl.uniform1i( this.addr, unit );\n\t\t\tcache[ 0 ] = unit;\n\n\t\t}\n\n\t\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n\t}\n\n\tfunction setValueT2DArray1( gl, v, textures ) {\n\n\t\tconst cache = this.cache;\n\t\tconst unit = textures.allocateTextureUnit();\n\n\t\tif ( cache[ 0 ] !== unit ) {\n\n\t\t\tgl.uniform1i( this.addr, unit );\n\t\t\tcache[ 0 ] = unit;\n\n\t\t}\n\n\t\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\n\n\t}\n\n\tfunction setValueT3D1( gl, v, textures ) {\n\n\t\tconst cache = this.cache;\n\t\tconst unit = textures.allocateTextureUnit();\n\n\t\tif ( cache[ 0 ] !== unit ) {\n\n\t\t\tgl.uniform1i( this.addr, unit );\n\t\t\tcache[ 0 ] = unit;\n\n\t\t}\n\n\t\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n\t}\n\n\tfunction setValueT6( gl, v, textures ) {\n\n\t\tconst cache = this.cache;\n\t\tconst unit = textures.allocateTextureUnit();\n\n\t\tif ( cache[ 0 ] !== unit ) {\n\n\t\t\tgl.uniform1i( this.addr, unit );\n\t\t\tcache[ 0 ] = unit;\n\n\t\t}\n\n\t\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n\t}\n\n\t// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\n\tfunction setValueV1i( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache[ 0 ] === v ) return;\n\n\t\tgl.uniform1i( this.addr, v );\n\n\t\tcache[ 0 ] = v;\n\n\t}\n\n\tfunction setValueV2i( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n\tfunction setValueV3i( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n\tfunction setValueV4i( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n\t// uint\n\n\tfunction setValueV1ui( gl, v ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache[ 0 ] === v ) return;\n\n\t\tgl.uniform1ui( this.addr, v );\n\n\t\tcache[ 0 ] = v;\n\n\t}\n\n\t// Helper to pick the right setter for the singular case\n\n\tfunction getSingularSetter( type ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\t\tcase 0x1405: return setValueV1ui; // UINT\n\n\t\t\tcase 0x8b5e: // SAMPLER_2D\n\t\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\t\treturn setValueT1;\n\n\t\t\tcase 0x8b5f: // SAMPLER_3D\n\t\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\t\treturn setValueT3D1;\n\n\t\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\t\treturn setValueT6;\n\n\t\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\t\treturn setValueT2DArray1;\n\n\t\t}\n\n\t}\n\n\t// Array of scalars\n\tfunction setValueV1fArray( gl, v ) {\n\n\t\tgl.uniform1fv( this.addr, v );\n\n\t}\n\n\t// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\tfunction setValueV1iArray( gl, v ) {\n\n\t\tgl.uniform1iv( this.addr, v );\n\n\t}\n\n\tfunction setValueV2iArray( gl, v ) {\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t}\n\n\tfunction setValueV3iArray( gl, v ) {\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t}\n\n\tfunction setValueV4iArray( gl, v ) {\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t}\n\n\n\t// Array of vectors (flat or from THREE classes)\n\n\tfunction setValueV2fArray( gl, v ) {\n\n\t\tconst data = flatten( v, this.size, 2 );\n\n\t\tgl.uniform2fv( this.addr, data );\n\n\t}\n\n\tfunction setValueV3fArray( gl, v ) {\n\n\t\tconst data = flatten( v, this.size, 3 );\n\n\t\tgl.uniform3fv( this.addr, data );\n\n\t}\n\n\tfunction setValueV4fArray( gl, v ) {\n\n\t\tconst data = flatten( v, this.size, 4 );\n\n\t\tgl.uniform4fv( this.addr, data );\n\n\t}\n\n\t// Array of matrices (flat or from THREE clases)\n\n\tfunction setValueM2Array( gl, v ) {\n\n\t\tconst data = flatten( v, this.size, 4 );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, data );\n\n\t}\n\n\tfunction setValueM3Array( gl, v ) {\n\n\t\tconst data = flatten( v, this.size, 9 );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, data );\n\n\t}\n\n\tfunction setValueM4Array( gl, v ) {\n\n\t\tconst data = flatten( v, this.size, 16 );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, data );\n\n\t}\n\n\t// Array of textures (2D / Cube)\n\n\tfunction setValueT1Array( gl, v, textures ) {\n\n\t\tconst n = v.length;\n\n\t\tconst units = allocTexUnits( textures, n );\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t\t}\n\n\t}\n\n\tfunction setValueT6Array( gl, v, textures ) {\n\n\t\tconst n = v.length;\n\n\t\tconst units = allocTexUnits( textures, n );\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\ttextures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t\t}\n\n\t}\n\n\t// Helper to pick the right setter for a pure (bottom-level) array\n\n\tfunction getPureArraySetter( type ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\t\tcase 0x8b5e: // SAMPLER_2D\n\t\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\t\treturn setValueT1Array;\n\n\t\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\t\treturn setValueT6Array;\n\n\t\t}\n\n\t}\n\n\t// --- Uniform Classes ---\n\n\tfunction SingleUniform( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n\tfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n\tPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\t\tthis.cache = new Float32Array( data.length );\n\n\t\t}\n\n\t\tcopyArray( cache, data );\n\n\t};\n\n\tfunction StructuredUniform( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t};\n\n\t// --- Top-level ---\n\n\t// Parser - builds up the property tree from the path strings\n\n\tconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n\t// extracts\n\t// \t- the identifier (member name or array index)\n\t//  - followed by an optional right bracket (found when array index)\n\t//  - followed by an optional left bracket or dot (type of subscript)\n\t//\n\t// Note: These portions can be read in a non-overlapping fashion and\n\t// allow straightforward parsing of the hierarchy that WebGL encodes\n\t// in the uniform names.\n\n\tfunction addUniform( container, uniformObject ) {\n\n\t\tcontainer.seq.push( uniformObject );\n\t\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n\t}\n\n\tfunction parseUniform( activeInfo, addr, container ) {\n\n\t\tconst path = activeInfo.name,\n\t\t\tpathLength = path.length;\n\n\t\t// reset RegExp object, because of the early exit of a previous run\n\t\tRePathPart.lastIndex = 0;\n\n\t\twhile ( true ) {\n\n\t\t\tconst match = RePathPart.exec( path ),\n\t\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\t\tlet id = match[ 1 ];\n\t\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\t\tsubscript = match[ 3 ];\n\n\t\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\t\tbreak;\n\n\t\t\t} else {\n\n\t\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\t\tconst map = container.map;\n\t\t\t\tlet next = map[ id ];\n\n\t\t\t\tif ( next === undefined ) {\n\n\t\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\t\taddUniform( container, next );\n\n\t\t\t\t}\n\n\t\t\t\tcontainer = next;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Root Container\n\n\tfunction WebGLUniforms( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, 35718 );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tWebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t};\n\n\tWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t};\n\n\n\t// Static interface\n\n\tWebGLUniforms.upload = function ( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t};\n\n\tfunction WebGLShader( gl, type, string ) {\n\n\t\tconst shader = gl.createShader( type );\n\n\t\tgl.shaderSource( shader, string );\n\t\tgl.compileShader( shader );\n\n\t\treturn shader;\n\n\t}\n\n\tlet programIdCount = 0;\n\n\tfunction addLineNumbers( string ) {\n\n\t\tconst lines = string.split( '\\n' );\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t\t}\n\n\t\treturn lines.join( '\\n' );\n\n\t}\n\n\tfunction getEncodingComponents( encoding ) {\n\n\t\tswitch ( encoding ) {\n\n\t\t\tcase LinearEncoding:\n\t\t\t\treturn [ 'Linear', '( value )' ];\n\t\t\tcase sRGBEncoding:\n\t\t\t\treturn [ 'sRGB', '( value )' ];\n\t\t\tcase RGBEEncoding:\n\t\t\t\treturn [ 'RGBE', '( value )' ];\n\t\t\tcase RGBM7Encoding:\n\t\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\t\tcase RGBM16Encoding:\n\t\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\t\tcase RGBDEncoding:\n\t\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\t\tcase GammaEncoding:\n\t\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\t\tcase LogLuvEncoding:\n\t\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\t\treturn [ 'Linear', '( value )' ];\n\n\t\t}\n\n\t}\n\n\tfunction getShaderErrors( gl, shader, type ) {\n\n\t\tconst status = gl.getShaderParameter( shader, 35713 );\n\t\tconst log = gl.getShaderInfoLog( shader ).trim();\n\n\t\tif ( status && log === '' ) return '';\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst source = gl.getShaderSource( shader );\n\n\t\treturn 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\\n' + log + addLineNumbers( source );\n\n\t}\n\n\tfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\t\tconst components = getEncodingComponents( encoding );\n\t\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n\t}\n\n\tfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\t\tconst components = getEncodingComponents( encoding );\n\t\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n\t}\n\n\tfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\t\tlet toneMappingName;\n\n\t\tswitch ( toneMapping ) {\n\n\t\t\tcase LinearToneMapping:\n\t\t\t\ttoneMappingName = 'Linear';\n\t\t\t\tbreak;\n\n\t\t\tcase ReinhardToneMapping:\n\t\t\t\ttoneMappingName = 'Reinhard';\n\t\t\t\tbreak;\n\n\t\t\tcase CineonToneMapping:\n\t\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\t\tbreak;\n\n\t\t\tcase ACESFilmicToneMapping:\n\t\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\t\tbreak;\n\n\t\t\tcase CustomToneMapping:\n\t\t\t\ttoneMappingName = 'Custom';\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\t\ttoneMappingName = 'Linear';\n\n\t\t}\n\n\t\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n\t}\n\n\tfunction generateExtensions( parameters ) {\n\n\t\tconst chunks = [\n\t\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t\t( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t\t];\n\n\t\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tfunction generateDefines( defines ) {\n\n\t\tconst chunks = [];\n\n\t\tfor ( const name in defines ) {\n\n\t\t\tconst value = defines[ name ];\n\n\t\t\tif ( value === false ) continue;\n\n\t\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t\t}\n\n\t\treturn chunks.join( '\\n' );\n\n\t}\n\n\tfunction fetchAttributeLocations( gl, program ) {\n\n\t\tconst attributes = {};\n\n\t\tconst n = gl.getProgramParameter( program, 35721 );\n\n\t\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\t\tconst info = gl.getActiveAttrib( program, i );\n\t\t\tconst name = info.name;\n\n\t\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t\t}\n\n\t\treturn attributes;\n\n\t}\n\n\tfunction filterEmptyLine( string ) {\n\n\t\treturn string !== '';\n\n\t}\n\n\tfunction replaceLightNums( string, parameters ) {\n\n\t\treturn string\n\t\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n\t}\n\n\tfunction replaceClippingPlaneNums( string, parameters ) {\n\n\t\treturn string\n\t\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n\t}\n\n\t// Resolve Includes\n\n\tconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\n\tfunction resolveIncludes( string ) {\n\n\t\treturn string.replace( includePattern, includeReplacer );\n\n\t}\n\n\tfunction includeReplacer( match, include ) {\n\n\t\tconst string = ShaderChunk[ include ];\n\n\t\tif ( string === undefined ) {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t\treturn resolveIncludes( string );\n\n\t}\n\n\t// Unroll Loops\n\n\tconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\tconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\n\tfunction unrollLoops( string ) {\n\n\t\treturn string\n\t\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n\t}\n\n\tfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\t\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\t\treturn loopReplacer( match, start, end, snippet );\n\n\t}\n\n\tfunction loopReplacer( match, start, end, snippet ) {\n\n\t\tlet string = '';\n\n\t\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\tstring += snippet\n\t\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t\t}\n\n\t\treturn string;\n\n\t}\n\n\t//\n\n\tfunction generatePrecision( parameters ) {\n\n\t\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\t\tif ( parameters.precision === 'highp' ) {\n\n\t\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t\t}\n\n\t\treturn precisionstring;\n\n\t}\n\n\tfunction generateShadowMapTypeDefine( parameters ) {\n\n\t\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\t\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t\t}\n\n\t\treturn shadowMapTypeDefine;\n\n\t}\n\n\tfunction generateEnvMapTypeDefine( parameters ) {\n\n\t\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\t\tif ( parameters.envMap ) {\n\n\t\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\t\tcase CubeReflectionMapping:\n\t\t\t\tcase CubeRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn envMapTypeDefine;\n\n\t}\n\n\tfunction generateEnvMapModeDefine( parameters ) {\n\n\t\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\t\tif ( parameters.envMap ) {\n\n\t\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\t\tcase CubeRefractionMapping:\n\t\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn envMapModeDefine;\n\n\t}\n\n\tfunction generateEnvMapBlendingDefine( parameters ) {\n\n\t\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\t\tif ( parameters.envMap ) {\n\n\t\t\tswitch ( parameters.combine ) {\n\n\t\t\t\tcase MultiplyOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MixOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase AddOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn envMapBlendingDefine;\n\n\t}\n\n\tfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t\tconst gl = renderer.getContext();\n\n\t\tconst defines = parameters.defines;\n\n\t\tlet vertexShader = parameters.vertexShader;\n\t\tlet fragmentShader = parameters.fragmentShader;\n\n\t\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\t\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\t\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\t\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\t\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\t\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\t\tconst customDefines = generateDefines( defines );\n\n\t\tconst program = gl.createProgram();\n\n\t\tlet prefixVertex, prefixFragment;\n\t\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\t\tif ( parameters.isRawShaderMaterial ) {\n\n\t\t\tprefixVertex = [\n\n\t\t\t\tcustomDefines\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\t\tprefixVertex += '\\n';\n\n\t\t\t}\n\n\t\t\tprefixFragment = [\n\n\t\t\t\tcustomExtensions,\n\t\t\t\tcustomDefines\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\t\tprefixFragment += '\\n';\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tprefixVertex = [\n\n\t\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\t\tcustomDefines,\n\n\t\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'attribute vec3 position;',\n\t\t\t\t'attribute vec3 normal;',\n\t\t\t\t'attribute vec2 uv;',\n\n\t\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t\t'\tattribute vec3 color;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t\t'\t#else',\n\n\t\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t\t'\t#endif',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'\\n'\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tprefixFragment = [\n\n\t\t\t\tcustomExtensions,\n\n\t\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\t\tcustomDefines,\n\n\t\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\n\n\t\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\t\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t\t'\\n'\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t}\n\n\t\tvertexShader = resolveIncludes( vertexShader );\n\t\tvertexShader = replaceLightNums( vertexShader, parameters );\n\t\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\t\tfragmentShader = resolveIncludes( fragmentShader );\n\t\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\t\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\t\tvertexShader = unrollLoops( vertexShader );\n\t\tfragmentShader = unrollLoops( fragmentShader );\n\n\t\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\t\tversionString = '#version 300 es\\n';\n\n\t\t\tprefixVertex = [\n\t\t\t\t'#define attribute in',\n\t\t\t\t'#define varying out',\n\t\t\t\t'#define texture2D texture'\n\t\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\t\tprefixFragment = [\n\t\t\t\t'#define varying in',\n\t\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t\t'#define texture2D texture',\n\t\t\t\t'#define textureCube texture',\n\t\t\t\t'#define texture2DProj textureProj',\n\t\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t\t}\n\n\t\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\t\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t\t// console.log( '*VERTEX*', vertexGlsl );\n\t\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\t\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\t\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\t\tgl.attachShader( program, glVertexShader );\n\t\tgl.attachShader( program, glFragmentShader );\n\n\t\t// Force a particular attribute to index 0.\n\n\t\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t\t} else if ( parameters.morphTargets === true ) {\n\n\t\t\t// programs with morphTargets displace position out of attribute 0\n\t\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t\t}\n\n\t\tgl.linkProgram( program );\n\n\t\t// check for link errors\n\t\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\t\tlet runnable = true;\n\t\t\tlet haveDiagnostics = true;\n\n\t\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\t\trunnable = false;\n\n\t\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors );\n\n\t\t\t} else if ( programLog !== '' ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\t\thaveDiagnostics = false;\n\n\t\t\t}\n\n\t\t\tif ( haveDiagnostics ) {\n\n\t\t\t\tthis.diagnostics = {\n\n\t\t\t\t\trunnable: runnable,\n\n\t\t\t\t\tprogramLog: programLog,\n\n\t\t\t\t\tvertexShader: {\n\n\t\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t\t},\n\n\t\t\t\t\tfragmentShader: {\n\n\t\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Clean up\n\n\t\t// Crashes in iOS9 and iOS10. #18402\n\t\t// gl.detachShader( program, glVertexShader );\n\t\t// gl.detachShader( program, glFragmentShader );\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\t// set up caching for uniform locations\n\n\t\tlet cachedUniforms;\n\n\t\tthis.getUniforms = function () {\n\n\t\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t\t}\n\n\t\t\treturn cachedUniforms;\n\n\t\t};\n\n\t\t// set up caching for attribute locations\n\n\t\tlet cachedAttributes;\n\n\t\tthis.getAttributes = function () {\n\n\t\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t\t}\n\n\t\t\treturn cachedAttributes;\n\n\t\t};\n\n\t\t// free resource\n\n\t\tthis.destroy = function () {\n\n\t\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\t\tgl.deleteProgram( program );\n\t\t\tthis.program = undefined;\n\n\t\t};\n\n\t\t//\n\n\t\tthis.name = parameters.shaderName;\n\t\tthis.id = programIdCount ++;\n\t\tthis.cacheKey = cacheKey;\n\t\tthis.usedTimes = 1;\n\t\tthis.program = program;\n\t\tthis.vertexShader = glVertexShader;\n\t\tthis.fragmentShader = glFragmentShader;\n\n\t\treturn this;\n\n\t}\n\n\tfunction WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) {\n\n\t\tconst programs = [];\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\t\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\t\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\t\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\t\tconst vertexTextures = capabilities.vertexTextures;\n\n\t\tlet precision = capabilities.precision;\n\n\t\tconst shaderIDs = {\n\t\t\tMeshDepthMaterial: 'depth',\n\t\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\t\tMeshNormalMaterial: 'normal',\n\t\t\tMeshBasicMaterial: 'basic',\n\t\t\tMeshLambertMaterial: 'lambert',\n\t\t\tMeshPhongMaterial: 'phong',\n\t\t\tMeshToonMaterial: 'toon',\n\t\t\tMeshStandardMaterial: 'physical',\n\t\t\tMeshPhysicalMaterial: 'physical',\n\t\t\tMeshMatcapMaterial: 'matcap',\n\t\t\tLineBasicMaterial: 'basic',\n\t\t\tLineDashedMaterial: 'dashed',\n\t\t\tPointsMaterial: 'points',\n\t\t\tShadowMaterial: 'shadow',\n\t\t\tSpriteMaterial: 'sprite'\n\t\t};\n\n\t\tconst parameterNames = [\n\t\t\t'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor',\n\t\t\t'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV',\n\t\t\t'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap', 'objectSpaceNormalMap', 'tangentSpaceNormalMap', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap', 'displacementMap', 'specularMap',\n\t\t\t'roughnessMap', 'metalnessMap', 'gradientMap',\n\t\t\t'alphaMap', 'combine', 'vertexColors', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',\n\t\t\t'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',\n\t\t\t'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals',\n\t\t\t'maxMorphTargets', 'maxMorphNormals', 'premultipliedAlpha',\n\t\t\t'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights',\n\t\t\t'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows',\n\t\t\t'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights',\n\t\t\t'alphaTest', 'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering',\n\t\t\t'sheen', 'transmissionMap'\n\t\t];\n\n\t\tfunction getMaxBones( object ) {\n\n\t\t\tconst skeleton = object.skeleton;\n\t\t\tconst bones = skeleton.bones;\n\n\t\t\tif ( floatVertexTextures ) {\n\n\t\t\t\treturn 1024;\n\n\t\t\t} else {\n\n\t\t\t\t// default for when object is not specified\n\t\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t\t//\n\t\t\t\t//  - leave some extra space for other uniforms\n\t\t\t\t//  - limit here is ANGLE's 254 max uniform vectors\n\t\t\t\t//    (up to 54 should be safe)\n\n\t\t\t\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\t\tconst maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\t\treturn 0;\n\n\t\t\t\t}\n\n\t\t\t\treturn maxBones;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getTextureEncodingFromMap( map ) {\n\n\t\t\tlet encoding;\n\n\t\t\tif ( map && map.isTexture ) {\n\n\t\t\t\tencoding = map.encoding;\n\n\t\t\t} else if ( map && map.isWebGLRenderTarget ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\t\tencoding = map.texture.encoding;\n\n\t\t\t} else {\n\n\t\t\t\tencoding = LinearEncoding;\n\n\t\t\t}\n\n\t\t\treturn encoding;\n\n\t\t}\n\n\t\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\t\tconst fog = scene.fog;\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t\t// (not to blow over maxLights budget)\n\n\t\t\tconst maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;\n\n\t\t\tif ( material.precision !== null ) {\n\n\t\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet vertexShader, fragmentShader;\n\n\t\t\tif ( shaderID ) {\n\n\t\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\t\tvertexShader = shader.vertexShader;\n\t\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t\t} else {\n\n\t\t\t\tvertexShader = material.vertexShader;\n\t\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t}\n\n\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tconst parameters = {\n\n\t\t\t\tisWebGL2: isWebGL2,\n\n\t\t\t\tshaderID: shaderID,\n\t\t\t\tshaderName: material.type,\n\n\t\t\t\tvertexShader: vertexShader,\n\t\t\t\tfragmentShader: fragmentShader,\n\t\t\t\tdefines: material.defines,\n\n\t\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\t\tglslVersion: material.glslVersion,\n\n\t\t\t\tprecision: precision,\n\n\t\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\t\tmap: !! material.map,\n\t\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\t\tmatcap: !! material.matcap,\n\t\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\t\tenvMap: !! envMap,\n\t\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\t\tlightMap: !! material.lightMap,\n\t\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\t\taoMap: !! material.aoMap,\n\t\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\t\tbumpMap: !! material.bumpMap,\n\t\t\t\tnormalMap: !! material.normalMap,\n\t\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\t\t\t\tclearcoatMap: !! material.clearcoatMap,\n\t\t\t\tclearcoatRoughnessMap: !! material.clearcoatRoughnessMap,\n\t\t\t\tclearcoatNormalMap: !! material.clearcoatNormalMap,\n\t\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\t\tspecularMap: !! material.specularMap,\n\t\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\t\tsheen: !! material.sheen,\n\n\t\t\t\ttransmissionMap: !! material.transmissionMap,\n\n\t\t\t\tcombine: material.combine,\n\n\t\t\t\tvertexTangents: ( material.normalMap && material.vertexTangents ),\n\t\t\t\tvertexColors: material.vertexColors,\n\t\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap,\n\t\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap,\n\n\t\t\t\tfog: !! fog,\n\t\t\t\tuseFog: material.fog,\n\t\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\t\tflatShading: material.flatShading,\n\n\t\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\t\tmaxBones: maxBones,\n\t\t\t\tuseVertexTexture: floatVertexTextures,\n\n\t\t\t\tmorphTargets: material.morphTargets,\n\t\t\t\tmorphNormals: material.morphNormals,\n\t\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\t\tnumDirLights: lights.directional.length,\n\t\t\t\tnumPointLights: lights.point.length,\n\t\t\t\tnumSpotLights: lights.spot.length,\n\t\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\n\t\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\t\tdithering: material.dithering,\n\n\t\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\t\talphaTest: material.alphaTest,\n\t\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\t\tflipSided: material.side === BackSide,\n\n\t\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false,\n\n\t\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t\t};\n\n\t\t\treturn parameters;\n\n\t\t}\n\n\t\tfunction getProgramCacheKey( parameters ) {\n\n\t\t\tconst array = [];\n\n\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\tarray.push( parameters.shaderID );\n\n\t\t\t} else {\n\n\t\t\t\tarray.push( parameters.fragmentShader );\n\t\t\t\tarray.push( parameters.vertexShader );\n\n\t\t\t}\n\n\t\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\t\tarray.push( name );\n\t\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t\t}\n\n\t\t\t\tarray.push( renderer.outputEncoding );\n\t\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t\t}\n\n\t\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\t\treturn array.join();\n\n\t\t}\n\n\t\tfunction getUniforms( material ) {\n\n\t\t\tconst shaderID = shaderIDs[ material.type ];\n\t\t\tlet uniforms;\n\n\t\t\tif ( shaderID ) {\n\n\t\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t\t} else {\n\n\t\t\t\tuniforms = material.uniforms;\n\n\t\t\t}\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\t\tlet program;\n\n\t\t\t// Check if code has been already compiled\n\t\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t\t++ program.usedTimes;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\t\tprograms.push( program );\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction releaseProgram( program ) {\n\n\t\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t\t// Remove from unordered set\n\t\t\t\tconst i = programs.indexOf( program );\n\t\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\t\tprograms.pop();\n\n\t\t\t\t// Free WebGL resources\n\t\t\t\tprogram.destroy();\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\tgetParameters: getParameters,\n\t\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\t\tgetUniforms: getUniforms,\n\t\t\tacquireProgram: acquireProgram,\n\t\t\treleaseProgram: releaseProgram,\n\t\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\t\tprograms: programs\n\t\t};\n\n\t}\n\n\tfunction WebGLProperties() {\n\n\t\tlet properties = new WeakMap();\n\n\t\tfunction get( object ) {\n\n\t\t\tlet map = properties.get( object );\n\n\t\t\tif ( map === undefined ) {\n\n\t\t\t\tmap = {};\n\t\t\t\tproperties.set( object, map );\n\n\t\t\t}\n\n\t\t\treturn map;\n\n\t\t}\n\n\t\tfunction remove( object ) {\n\n\t\t\tproperties.delete( object );\n\n\t\t}\n\n\t\tfunction update( object, key, value ) {\n\n\t\t\tproperties.get( object )[ key ] = value;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tproperties = new WeakMap();\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tremove: remove,\n\t\t\tupdate: update,\n\t\t\tdispose: dispose\n\t\t};\n\n\t}\n\n\tfunction painterSortStable( a, b ) {\n\n\t\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\t\treturn a.groupOrder - b.groupOrder;\n\n\t\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.program !== b.program ) {\n\n\t\t\treturn a.program.id - b.program.id;\n\n\t\t} else if ( a.material.id !== b.material.id ) {\n\n\t\t\treturn a.material.id - b.material.id;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn a.z - b.z;\n\n\t\t} else {\n\n\t\t\treturn a.id - b.id;\n\n\t\t}\n\n\t}\n\n\tfunction reversePainterSortStable( a, b ) {\n\n\t\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\t\treturn a.groupOrder - b.groupOrder;\n\n\t\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else {\n\n\t\t\treturn a.id - b.id;\n\n\t\t}\n\n\t}\n\n\n\tfunction WebGLRenderList( properties ) {\n\n\t\tconst renderItems = [];\n\t\tlet renderItemsIndex = 0;\n\n\t\tconst opaque = [];\n\t\tconst transparent = [];\n\n\t\tconst defaultProgram = { id: - 1 };\n\n\t\tfunction init() {\n\n\t\t\trenderItemsIndex = 0;\n\n\t\t\topaque.length = 0;\n\t\t\ttransparent.length = 0;\n\n\t\t}\n\n\t\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tif ( renderItem === undefined ) {\n\n\t\t\t\trenderItem = {\n\t\t\t\t\tid: object.id,\n\t\t\t\t\tobject: object,\n\t\t\t\t\tgeometry: geometry,\n\t\t\t\t\tmaterial: material,\n\t\t\t\t\tprogram: materialProperties.program || defaultProgram,\n\t\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\t\tz: z,\n\t\t\t\t\tgroup: group\n\t\t\t\t};\n\n\t\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t\t} else {\n\n\t\t\t\trenderItem.id = object.id;\n\t\t\t\trenderItem.object = object;\n\t\t\t\trenderItem.geometry = geometry;\n\t\t\t\trenderItem.material = material;\n\t\t\t\trenderItem.program = materialProperties.program || defaultProgram;\n\t\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\t\trenderItem.z = z;\n\t\t\t\trenderItem.group = group;\n\n\t\t\t}\n\n\t\t\trenderItemsIndex ++;\n\n\t\t\treturn renderItem;\n\n\t\t}\n\n\t\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t\t}\n\n\t\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t\t( material.transparent === true ? transparent : opaque ).unshift( renderItem );\n\n\t\t}\n\n\t\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t\t}\n\n\t\tfunction finish() {\n\n\t\t\t// Clear references from inactive renderItems in the list\n\n\t\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\t\trenderItem.id = null;\n\t\t\t\trenderItem.object = null;\n\t\t\t\trenderItem.geometry = null;\n\t\t\t\trenderItem.material = null;\n\t\t\t\trenderItem.program = null;\n\t\t\t\trenderItem.group = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\n\t\t\topaque: opaque,\n\t\t\ttransparent: transparent,\n\n\t\t\tinit: init,\n\t\t\tpush: push,\n\t\t\tunshift: unshift,\n\t\t\tfinish: finish,\n\n\t\t\tsort: sort\n\t\t};\n\n\t}\n\n\tfunction WebGLRenderLists( properties ) {\n\n\t\tlet lists = new WeakMap();\n\n\t\tfunction get( scene, camera ) {\n\n\t\t\tconst cameras = lists.get( scene );\n\t\t\tlet list;\n\n\t\t\tif ( cameras === undefined ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tlists.set( scene, new WeakMap() );\n\t\t\t\tlists.get( scene ).set( camera, list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = cameras.get( camera );\n\t\t\t\tif ( list === undefined ) {\n\n\t\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\t\tcameras.set( camera, list );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn list;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tlists = new WeakMap();\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\n\t}\n\n\tfunction UniformsCache() {\n\n\t\tconst lights = {};\n\n\t\treturn {\n\n\t\t\tget: function ( light ) {\n\n\t\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\t\treturn lights[ light.id ];\n\n\t\t\t\t}\n\n\t\t\t\tlet uniforms;\n\n\t\t\t\tswitch ( light.type ) {\n\n\t\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SpotLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\t\treturn uniforms;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction ShadowUniformsCache() {\n\n\t\tconst lights = {};\n\n\t\treturn {\n\n\t\t\tget: function ( light ) {\n\n\t\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\t\treturn lights[ light.id ];\n\n\t\t\t\t}\n\n\t\t\t\tlet uniforms;\n\n\t\t\t\tswitch ( light.type ) {\n\n\t\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SpotLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t\t}\n\n\t\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\t\treturn uniforms;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\n\n\tlet nextVersion = 0;\n\n\tfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\t\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n\t}\n\n\tfunction WebGLLights( extensions, capabilities ) {\n\n\t\tconst cache = new UniformsCache();\n\n\t\tconst shadowCache = ShadowUniformsCache();\n\n\t\tconst state = {\n\n\t\t\tversion: 0,\n\n\t\t\thash: {\n\t\t\t\tdirectionalLength: - 1,\n\t\t\t\tpointLength: - 1,\n\t\t\t\tspotLength: - 1,\n\t\t\t\trectAreaLength: - 1,\n\t\t\t\themiLength: - 1,\n\n\t\t\t\tnumDirectionalShadows: - 1,\n\t\t\t\tnumPointShadows: - 1,\n\t\t\t\tnumSpotShadows: - 1\n\t\t\t},\n\n\t\t\tambient: [ 0, 0, 0 ],\n\t\t\tprobe: [],\n\t\t\tdirectional: [],\n\t\t\tdirectionalShadow: [],\n\t\t\tdirectionalShadowMap: [],\n\t\t\tdirectionalShadowMatrix: [],\n\t\t\tspot: [],\n\t\t\tspotShadow: [],\n\t\t\tspotShadowMap: [],\n\t\t\tspotShadowMatrix: [],\n\t\t\trectArea: [],\n\t\t\trectAreaLTC1: null,\n\t\t\trectAreaLTC2: null,\n\t\t\tpoint: [],\n\t\t\tpointShadow: [],\n\t\t\tpointShadowMap: [],\n\t\t\tpointShadowMatrix: [],\n\t\t\themi: []\n\n\t\t};\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\t\tconst vector3 = new Vector3();\n\t\tconst matrix4 = new Matrix4();\n\t\tconst matrix42 = new Matrix4();\n\n\t\tfunction setup( lights ) {\n\n\t\t\tlet r = 0, g = 0, b = 0;\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\t\tlet directionalLength = 0;\n\t\t\tlet pointLength = 0;\n\t\t\tlet spotLength = 0;\n\t\t\tlet rectAreaLength = 0;\n\t\t\tlet hemiLength = 0;\n\n\t\t\tlet numDirectionalShadows = 0;\n\t\t\tlet numPointShadows = 0;\n\t\t\tlet numSpotShadows = 0;\n\n\t\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\t\tconst light = lights[ i ];\n\n\t\t\t\tconst color = light.color;\n\t\t\t\tconst intensity = light.intensity;\n\t\t\t\tconst distance = light.distance;\n\n\t\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\t\tr += color.r * intensity;\n\t\t\t\t\tg += color.g * intensity;\n\t\t\t\t\tb += color.b * intensity;\n\n\t\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\t\tdirectionalLength ++;\n\n\t\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\t\tspotLength ++;\n\n\t\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\t\trectAreaLength ++;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\t\tpointLength ++;\n\n\t\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\t\themiLength ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t\t// WebGL 2\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// WebGL 1\n\n\t\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.ambient[ 0 ] = r;\n\t\t\tstate.ambient[ 1 ] = g;\n\t\t\tstate.ambient[ 2 ] = b;\n\n\t\t\tconst hash = state.hash;\n\n\t\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\t\thash.pointLength !== pointLength ||\n\t\t\t\thash.spotLength !== spotLength ||\n\t\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\t\thash.hemiLength !== hemiLength ||\n\t\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\t\tstate.directional.length = directionalLength;\n\t\t\t\tstate.spot.length = spotLength;\n\t\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\t\tstate.point.length = pointLength;\n\t\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\t\thash.directionalLength = directionalLength;\n\t\t\t\thash.pointLength = pointLength;\n\t\t\t\thash.spotLength = spotLength;\n\t\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\t\thash.hemiLength = hemiLength;\n\n\t\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\t\thash.numPointShadows = numPointShadows;\n\t\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\t\tstate.version = nextVersion ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setupView( lights, camera ) {\n\n\t\t\tlet directionalLength = 0;\n\t\t\tlet pointLength = 0;\n\t\t\tlet spotLength = 0;\n\t\t\tlet rectAreaLength = 0;\n\t\t\tlet hemiLength = 0;\n\n\t\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\t\tconst light = lights[ i ];\n\n\t\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\t\tdirectionalLength ++;\n\n\t\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\t\tspotLength ++;\n\n\t\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\t\tmatrix42.identity();\n\t\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t\trectAreaLength ++;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\tpointLength ++;\n\n\t\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\t\themiLength ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\tsetup: setup,\n\t\t\tsetupView: setupView,\n\t\t\tstate: state\n\t\t};\n\n\t}\n\n\tfunction WebGLRenderState( extensions, capabilities ) {\n\n\t\tconst lights = new WebGLLights( extensions, capabilities );\n\n\t\tconst lightsArray = [];\n\t\tconst shadowsArray = [];\n\n\t\tfunction init() {\n\n\t\t\tlightsArray.length = 0;\n\t\t\tshadowsArray.length = 0;\n\n\t\t}\n\n\t\tfunction pushLight( light ) {\n\n\t\t\tlightsArray.push( light );\n\n\t\t}\n\n\t\tfunction pushShadow( shadowLight ) {\n\n\t\t\tshadowsArray.push( shadowLight );\n\n\t\t}\n\n\t\tfunction setupLights() {\n\n\t\t\tlights.setup( lightsArray );\n\n\t\t}\n\n\t\tfunction setupLightsView( camera ) {\n\n\t\t\tlights.setupView( lightsArray, camera );\n\n\t\t}\n\n\t\tconst state = {\n\t\t\tlightsArray: lightsArray,\n\t\t\tshadowsArray: shadowsArray,\n\n\t\t\tlights: lights\n\t\t};\n\n\t\treturn {\n\t\t\tinit: init,\n\t\t\tstate: state,\n\t\t\tsetupLights: setupLights,\n\t\t\tsetupLightsView: setupLightsView,\n\n\t\t\tpushLight: pushLight,\n\t\t\tpushShadow: pushShadow\n\t\t};\n\n\t}\n\n\tfunction WebGLRenderStates( extensions, capabilities ) {\n\n\t\tlet renderStates = new WeakMap();\n\n\t\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\t\tlet renderState;\n\n\t\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.set( scene, [] );\n\t\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\tif ( renderCallDepth >= renderStates.get( scene ).length ) {\n\n\t\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderState = renderStates.get( scene )[ renderCallDepth ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn renderState;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\trenderStates = new WeakMap();\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\n\t}\n\n\t/**\n\t * parameters = {\n\t *\n\t *  opacity: <float>,\n\t *\n\t *  map: new THREE.Texture( <Image> ),\n\t *\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  displacementMap: new THREE.Texture( <Image> ),\n\t *  displacementScale: <float>,\n\t *  displacementBias: <float>,\n\t *\n\t *  wireframe: <boolean>,\n\t *  wireframeLinewidth: <float>\n\t * }\n\t */\n\n\tfunction MeshDepthMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshDepthMaterial.prototype = Object.create( Material.prototype );\n\tMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\n\tMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n\tMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * parameters = {\n\t *\n\t *  referencePosition: <float>,\n\t *  nearDistance: <float>,\n\t *  farDistance: <float>,\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>,\n\t *\n\t *  map: new THREE.Texture( <Image> ),\n\t *\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  displacementMap: new THREE.Texture( <Image> ),\n\t *  displacementScale: <float>,\n\t *  displacementBias: <float>\n\t *\n\t * }\n\t */\n\n\tfunction MeshDistanceMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.fog = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshDistanceMaterial.prototype = Object.create( Material.prototype );\n\tMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\n\tMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\n\tMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t};\n\n\tvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include <packing>\\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\n\tvar vsm_vert = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\n\tfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\t\tlet _frustum = new Frustum();\n\n\t\tconst _shadowMapSize = new Vector2(),\n\t\t\t_viewportSize = new Vector2(),\n\n\t\t\t_viewport = new Vector4(),\n\n\t\t\t_depthMaterials = [],\n\t\t\t_distanceMaterials = [],\n\n\t\t\t_materialCache = {};\n\n\t\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\t\tconst shadowMaterialVertical = new ShaderMaterial( {\n\n\t\t\tdefines: {\n\t\t\t\tSAMPLE_RATE: 2.0 / 8.0,\n\t\t\t\tHALF_SAMPLE_RATE: 1.0 / 8.0\n\t\t\t},\n\n\t\t\tuniforms: {\n\t\t\t\tshadow_pass: { value: null },\n\t\t\t\tresolution: { value: new Vector2() },\n\t\t\t\tradius: { value: 4.0 }\n\t\t\t},\n\n\t\t\tvertexShader: vsm_vert,\n\n\t\t\tfragmentShader: vsm_frag\n\n\t\t} );\n\n\t\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\t\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\t\tconst fullScreenTri = new BufferGeometry();\n\t\tfullScreenTri.setAttribute(\n\t\t\t'position',\n\t\t\tnew BufferAttribute(\n\t\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t\t3\n\t\t\t)\n\t\t);\n\n\t\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\t\tconst scope = this;\n\n\t\tthis.enabled = false;\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis.type = PCFShadowMap;\n\n\t\tthis.render = function ( lights, scene, camera ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\t\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\t\tif ( lights.length === 0 ) return;\n\n\t\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\t\tconst _state = _renderer.state;\n\n\t\t\t// Set GL state for depth map.\n\t\t\t_state.setBlending( NoBlending );\n\t\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t\t_state.buffers.depth.setTest( true );\n\t\t\t_state.setScissorTest( false );\n\n\t\t\t// render depth map\n\n\t\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\t\tconst light = lights[ i ];\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\t\tif ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\t\tif ( _shadowMapSize.x > maxTextureSize ) {\n\n\t\t\t\t\t\t_viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\t\t\t_viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n\t\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\t\tconst pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t\t_renderer.clear();\n\n\t\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t\t_viewport.set(\n\t\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t\t);\n\n\t\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t\t}\n\n\t\t\t\t// do blur pass for VSM\n\n\t\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t\t}\n\n\t\t\t\tshadow.needsUpdate = false;\n\n\t\t\t}\n\n\t\t\tscope.needsUpdate = false;\n\n\t\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t\t};\n\n\t\tfunction VSMPass( shadow, camera ) {\n\n\t\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\t\t// vertical pass\n\n\t\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t\t_renderer.clear();\n\t\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t\t// horizontal pass\n\n\t\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\t\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t\t}\n\n\t\tfunction getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\t\tlet material = _depthMaterials[ index ];\n\n\t\t\tif ( material === undefined ) {\n\n\t\t\t\tmaterial = new MeshDepthMaterial( {\n\n\t\t\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\t\tskinning: useSkinning\n\n\t\t\t\t} );\n\n\t\t\t\t_depthMaterials[ index ] = material;\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\t\tlet material = _distanceMaterials[ index ];\n\n\t\t\tif ( material === undefined ) {\n\n\t\t\t\tmaterial = new MeshDistanceMaterial( {\n\n\t\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\t\tskinning: useSkinning\n\n\t\t\t\t} );\n\n\t\t\t\t_distanceMaterials[ index ] = material;\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\t\tlet result = null;\n\n\t\t\tlet getMaterialVariant = getDepthMaterialVariant;\n\t\t\tlet customMaterial = object.customDepthMaterial;\n\n\t\t\tif ( light.isPointLight === true ) {\n\n\t\t\t\tgetMaterialVariant = getDistanceMaterialVariant;\n\t\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t\t}\n\n\t\t\tif ( customMaterial === undefined ) {\n\n\t\t\t\tlet useMorphing = false;\n\n\t\t\t\tif ( material.morphTargets === true ) {\n\n\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t}\n\n\t\t\t\tlet useSkinning = false;\n\n\t\t\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\t\t\tif ( material.skinning === true ) {\n\n\t\t\t\t\t\tuseSkinning = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst useInstancing = object.isInstancedMesh === true;\n\n\t\t\t\tresult = getMaterialVariant( useMorphing, useSkinning, useInstancing );\n\n\t\t\t} else {\n\n\t\t\t\tresult = customMaterial;\n\n\t\t\t}\n\n\t\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult.visible = material.visible;\n\t\t\tresult.wireframe = material.wireframe;\n\n\t\t\tif ( type === VSMShadowMap ) {\n\n\t\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t\t} else {\n\n\t\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t\t}\n\n\t\t\tresult.clipShadows = material.clipShadows;\n\t\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\t\tresult.linewidth = material.linewidth;\n\n\t\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tconst visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction WebGLState( gl, extensions, capabilities ) {\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\n\t\tfunction ColorBuffer() {\n\n\t\t\tlet locked = false;\n\n\t\t\tconst color = new Vector4();\n\t\t\tlet currentColorMask = null;\n\t\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\t\treturn {\n\n\t\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentColorMask = null;\n\t\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction DepthBuffer() {\n\n\t\t\tlet locked = false;\n\n\t\t\tlet currentDepthMask = null;\n\t\t\tlet currentDepthFunc = null;\n\t\t\tlet currentDepthClear = null;\n\n\t\t\treturn {\n\n\t\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentDepthMask = null;\n\t\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction StencilBuffer() {\n\n\t\t\tlet locked = false;\n\n\t\t\tlet currentStencilMask = null;\n\t\t\tlet currentStencilFunc = null;\n\t\t\tlet currentStencilRef = null;\n\t\t\tlet currentStencilFuncMask = null;\n\t\t\tlet currentStencilFail = null;\n\t\t\tlet currentStencilZFail = null;\n\t\t\tlet currentStencilZPass = null;\n\t\t\tlet currentStencilClear = null;\n\n\t\t\treturn {\n\n\t\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t\t     currentStencilRef !== stencilRef ||\n\t\t\t\t\t     currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t\t     currentStencilZFail !== stencilZFail ||\n\t\t\t\t\t     currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentStencilMask = null;\n\t\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\t\tcurrentStencilRef = null;\n\t\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\t\tcurrentStencilFail = null;\n\t\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\t//\n\n\t\tconst colorBuffer = new ColorBuffer();\n\t\tconst depthBuffer = new DepthBuffer();\n\t\tconst stencilBuffer = new StencilBuffer();\n\n\t\tlet enabledCapabilities = {};\n\n\t\tlet currentProgram = null;\n\n\t\tlet currentBlendingEnabled = null;\n\t\tlet currentBlending = null;\n\t\tlet currentBlendEquation = null;\n\t\tlet currentBlendSrc = null;\n\t\tlet currentBlendDst = null;\n\t\tlet currentBlendEquationAlpha = null;\n\t\tlet currentBlendSrcAlpha = null;\n\t\tlet currentBlendDstAlpha = null;\n\t\tlet currentPremultipledAlpha = false;\n\n\t\tlet currentFlipSided = null;\n\t\tlet currentCullFace = null;\n\n\t\tlet currentLineWidth = null;\n\n\t\tlet currentPolygonOffsetFactor = null;\n\t\tlet currentPolygonOffsetUnits = null;\n\n\t\tconst maxTextures = gl.getParameter( 35661 );\n\n\t\tlet lineWidthAvailable = false;\n\t\tlet version = 0;\n\t\tconst glVersion = gl.getParameter( 7938 );\n\n\t\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t\t}\n\n\t\tlet currentTextureSlot = null;\n\t\tlet currentBoundTextures = {};\n\n\t\tconst currentScissor = new Vector4();\n\t\tconst currentViewport = new Vector4();\n\n\t\tfunction createTexture( type, target, count ) {\n\n\t\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\t\tconst texture = gl.createTexture();\n\n\t\t\tgl.bindTexture( type, texture );\n\t\t\tgl.texParameteri( type, 10241, 9728 );\n\t\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tconst emptyTextures = {};\n\t\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\t\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t\t// init\n\n\t\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\t\tdepthBuffer.setClear( 1 );\n\t\tstencilBuffer.setClear( 0 );\n\n\t\tenable( 2929 );\n\t\tdepthBuffer.setFunc( LessEqualDepth );\n\n\t\tsetFlipSided( false );\n\t\tsetCullFace( CullFaceBack );\n\t\tenable( 2884 );\n\n\t\tsetBlending( NoBlending );\n\n\t\t//\n\n\t\tfunction enable( id ) {\n\n\t\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\t\tgl.enable( id );\n\t\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disable( id ) {\n\n\t\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\t\tgl.disable( id );\n\t\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction useProgram( program ) {\n\n\t\t\tif ( currentProgram !== program ) {\n\n\t\t\t\tgl.useProgram( program );\n\n\t\t\t\tcurrentProgram = program;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tconst equationToGL = {\n\t\t\t[ AddEquation ]: 32774,\n\t\t\t[ SubtractEquation ]: 32778,\n\t\t\t[ ReverseSubtractEquation ]: 32779\n\t\t};\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\tequationToGL[ MinEquation ] = 32775;\n\t\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t\t} else {\n\n\t\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst factorToGL = {\n\t\t\t[ ZeroFactor ]: 0,\n\t\t\t[ OneFactor ]: 1,\n\t\t\t[ SrcColorFactor ]: 768,\n\t\t\t[ SrcAlphaFactor ]: 770,\n\t\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t\t[ DstColorFactor ]: 774,\n\t\t\t[ DstAlphaFactor ]: 772,\n\t\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t\t[ OneMinusDstAlphaFactor ]: 773\n\t\t};\n\n\t\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\t\tif ( blending === NoBlending ) {\n\n\t\t\t\tif ( currentBlendingEnabled ) {\n\n\t\t\t\t\tdisable( 3042 );\n\t\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( ! currentBlendingEnabled ) {\n\n\t\t\t\tenable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = true;\n\n\t\t\t}\n\n\t\t\tif ( blending !== CustomBlending ) {\n\n\t\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\t\tcurrentBlendDst = null;\n\t\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\t\tcurrentBlending = blending;\n\t\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// custom blending\n\n\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t\t}\n\n\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t\t}\n\n\t\t\tcurrentBlending = blending;\n\t\t\tcurrentPremultipledAlpha = null;\n\n\t\t}\n\n\t\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\t\tmaterial.side === DoubleSide\n\t\t\t\t? disable( 2884 )\n\t\t\t\t: enable( 2884 );\n\n\t\t\tlet flipSided = ( material.side === BackSide );\n\t\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\t\tsetFlipSided( flipSided );\n\n\t\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t\t? setBlending( NoBlending )\n\t\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\t\tdepthBuffer.setTest( material.depthTest );\n\t\t\tdepthBuffer.setMask( material.depthWrite );\n\t\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\t\tconst stencilWrite = material.stencilWrite;\n\t\t\tstencilBuffer.setTest( stencilWrite );\n\t\t\tif ( stencilWrite ) {\n\n\t\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t\t}\n\n\t\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\t}\n\n\t\t//\n\n\t\tfunction setFlipSided( flipSided ) {\n\n\t\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\t\tif ( flipSided ) {\n\n\t\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentFlipSided = flipSided;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setCullFace( cullFace ) {\n\n\t\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\t\tenable( 2884 );\n\n\t\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdisable( 2884 );\n\n\t\t\t}\n\n\t\t\tcurrentCullFace = cullFace;\n\n\t\t}\n\n\t\tfunction setLineWidth( width ) {\n\n\t\t\tif ( width !== currentLineWidth ) {\n\n\t\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\t\tcurrentLineWidth = width;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\t\tif ( polygonOffset ) {\n\n\t\t\t\tenable( 32823 );\n\n\t\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdisable( 32823 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setScissorTest( scissorTest ) {\n\n\t\t\tif ( scissorTest ) {\n\n\t\t\t\tenable( 3089 );\n\n\t\t\t} else {\n\n\t\t\t\tdisable( 3089 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// texture\n\n\t\tfunction activeTexture( webglSlot ) {\n\n\t\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\tactiveTexture();\n\n\t\t\t}\n\n\t\t\tlet boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\t\tif ( boundTexture === undefined ) {\n\n\t\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t\t}\n\n\t\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\t\tboundTexture.type = webglType;\n\t\t\t\tboundTexture.texture = webglTexture;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction unbindTexture() {\n\n\t\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\t\tboundTexture.type = undefined;\n\t\t\t\tboundTexture.texture = undefined;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction compressedTexImage2D() {\n\n\t\t\ttry {\n\n\t\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction texImage2D() {\n\n\t\t\ttry {\n\n\t\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction texImage3D() {\n\n\t\t\ttry {\n\n\t\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction scissor( scissor ) {\n\n\t\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\t\tcurrentScissor.copy( scissor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction viewport( viewport ) {\n\n\t\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\t\tcurrentViewport.copy( viewport );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction reset() {\n\n\t\t\tenabledCapabilities = {};\n\n\t\t\tcurrentTextureSlot = null;\n\t\t\tcurrentBoundTextures = {};\n\n\t\t\tcurrentProgram = null;\n\n\t\t\tcurrentBlendingEnabled = null;\n\t\t\tcurrentBlending = null;\n\t\t\tcurrentBlendEquation = null;\n\t\t\tcurrentBlendSrc = null;\n\t\t\tcurrentBlendDst = null;\n\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\tcurrentBlendDstAlpha = null;\n\t\t\tcurrentPremultipledAlpha = false;\n\n\t\t\tcurrentFlipSided = null;\n\t\t\tcurrentCullFace = null;\n\n\t\t\tcurrentLineWidth = null;\n\n\t\t\tcurrentPolygonOffsetFactor = null;\n\t\t\tcurrentPolygonOffsetUnits = null;\n\n\t\t\tcolorBuffer.reset();\n\t\t\tdepthBuffer.reset();\n\t\t\tstencilBuffer.reset();\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tbuffers: {\n\t\t\t\tcolor: colorBuffer,\n\t\t\t\tdepth: depthBuffer,\n\t\t\t\tstencil: stencilBuffer\n\t\t\t},\n\n\t\t\tenable: enable,\n\t\t\tdisable: disable,\n\n\t\t\tuseProgram: useProgram,\n\n\t\t\tsetBlending: setBlending,\n\t\t\tsetMaterial: setMaterial,\n\n\t\t\tsetFlipSided: setFlipSided,\n\t\t\tsetCullFace: setCullFace,\n\n\t\t\tsetLineWidth: setLineWidth,\n\t\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\t\tsetScissorTest: setScissorTest,\n\n\t\t\tactiveTexture: activeTexture,\n\t\t\tbindTexture: bindTexture,\n\t\t\tunbindTexture: unbindTexture,\n\t\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\t\ttexImage2D: texImage2D,\n\t\t\ttexImage3D: texImage3D,\n\n\t\t\tscissor: scissor,\n\t\t\tviewport: viewport,\n\n\t\t\treset: reset\n\n\t\t};\n\n\t}\n\n\tfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\t\tconst maxTextures = capabilities.maxTextures;\n\t\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\t\tconst maxTextureSize = capabilities.maxTextureSize;\n\t\tconst maxSamples = capabilities.maxSamples;\n\n\t\tconst _videoTextures = new WeakMap();\n\t\tlet _canvas;\n\n\t\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\t\tlet useOffscreenCanvas = false;\n\n\t\ttry {\n\n\t\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t\t} catch ( err ) {\n\n\t\t\t// Ignore any errors\n\n\t\t}\n\n\t\tfunction createCanvas( width, height ) {\n\n\t\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\t\treturn useOffscreenCanvas ?\n\t\t\t\tnew OffscreenCanvas( width, height ) :\n\t\t\t\tdocument.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t}\n\n\t\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\t\tlet scale = 1;\n\n\t\t\t// handle case if texture exceeds max size\n\n\t\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t\t}\n\n\t\t\t// only perform resize if necessary\n\n\t\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t\t// only perform resize for certain image types\n\n\t\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\t\tconst floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;\n\n\t\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\n\t\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\t\treturn canvas;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn image;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn image;\n\n\t\t}\n\n\t\tfunction isPowerOfTwo( image ) {\n\n\t\t\treturn MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height );\n\n\t\t}\n\n\t\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\t\tif ( isWebGL2 ) return false;\n\n\t\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t\t}\n\n\t\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t\t}\n\n\t\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t\t_gl.generateMipmap( target );\n\n\t\t\tconst textureProperties = properties.get( texture );\n\n\t\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t\t}\n\n\t\tfunction getInternalFormat( internalFormatName, glFormat, glType ) {\n\n\t\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\t\tif ( internalFormatName !== null ) {\n\n\t\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t\t}\n\n\t\t\tlet internalFormat = glFormat;\n\n\t\t\tif ( glFormat === 6403 ) {\n\n\t\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t\t}\n\n\t\t\tif ( glFormat === 6407 ) {\n\n\t\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t\t}\n\n\t\t\tif ( glFormat === 6408 ) {\n\n\t\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\t\tif ( glType === 5121 ) internalFormat = 32856;\n\n\t\t\t}\n\n\t\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t\t}\n\n\t\t\treturn internalFormat;\n\n\t\t}\n\n\t\t// Fallback filters for non-power-of-2 textures\n\n\t\tfunction filterFallback( f ) {\n\n\t\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\t\treturn 9728;\n\n\t\t\t}\n\n\t\t\treturn 9729;\n\n\t\t}\n\n\t\t//\n\n\t\tfunction onTextureDispose( event ) {\n\n\t\t\tconst texture = event.target;\n\n\t\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\t\tdeallocateTexture( texture );\n\n\t\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t\t_videoTextures.delete( texture );\n\n\t\t\t}\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\tfunction onRenderTargetDispose( event ) {\n\n\t\t\tconst renderTarget = event.target;\n\n\t\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\t\tdeallocateRenderTarget( renderTarget );\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\t//\n\n\t\tfunction deallocateTexture( texture ) {\n\n\t\t\tconst textureProperties = properties.get( texture );\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\tproperties.remove( texture );\n\n\t\t}\n\n\t\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\n\t\t\tif ( ! renderTarget ) return;\n\n\t\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t\t}\n\n\t\t\tproperties.remove( renderTarget.texture );\n\t\t\tproperties.remove( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tlet textureUnits = 0;\n\n\t\tfunction resetTextureUnits() {\n\n\t\t\ttextureUnits = 0;\n\n\t\t}\n\n\t\tfunction allocateTextureUnit() {\n\n\t\t\tconst textureUnit = textureUnits;\n\n\t\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t\t}\n\n\t\t\ttextureUnits += 1;\n\n\t\t\treturn textureUnit;\n\n\t\t}\n\n\t\t//\n\n\t\tfunction setTexture2D( texture, slot ) {\n\n\t\t\tconst textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tconst image = texture.image;\n\n\t\t\t\tif ( image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' );\n\n\t\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\t\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tfunction setTexture2DArray( texture, slot ) {\n\n\t\t\tconst textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\t\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tfunction setTexture3D( texture, slot ) {\n\n\t\t\tconst textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\t\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tfunction setTextureCube( texture, slot ) {\n\n\t\t\tconst textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tconst wrappingToGL = {\n\t\t\t[ RepeatWrapping ]: 10497,\n\t\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t\t[ MirroredRepeatWrapping ]: 33648\n\t\t};\n\n\t\tconst filterToGL = {\n\t\t\t[ NearestFilter ]: 9728,\n\t\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t\t[ LinearFilter ]: 9729,\n\t\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t\t[ LinearMipmapLinearFilter ]: 9987\n\t\t};\n\n\t\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\t\tif ( supportsMips ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( extension ) {\n\n\t\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\t\tif ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return;\n\n\t\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction initTexture( textureProperties, texture ) {\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\t\tlet textureType = 3553;\n\n\t\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\t\tinitTexture( textureProperties, texture );\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\t\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\n\t\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;\n\t\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\t\tconst supportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format );\n\n\t\t\tlet glType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\t// populate depth texture with dummy data\n\n\t\t\t\tglInternalFormat = 6402;\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t} else if ( texture.type === UnsignedInt248Type$1 ) {\n\n\t\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// validation checks for WebGL 1\n\n\t\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedInt248Type$1 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedInt248Type$1;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else if ( texture.isDataTexture2DArray ) {\n\n\t\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( textureType, texture, image.width, image.height );\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\t\tif ( texture.image.length !== 6 ) return;\n\n\t\t\tinitTexture( textureProperties, texture );\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t\t_gl.pixelStorei( 37440, texture.flipY );\n\n\t\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tsupportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( 34067, texture, image.width, image.height );\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\t// Render targets\n\n\t\t// Setup storage for target texture and bind it to correct framebuffer\n\t\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t\t_gl.bindFramebuffer( 36160, null );\n\n\t\t}\n\n\t\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\t\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t\tlet glInternalFormat = 33189;\n\n\t\t\t\tif ( isMultisample ) {\n\n\t\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t\tif ( isMultisample ) {\n\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\n\t\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t\t} else {\n\n\t\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\n\t\t\t\tif ( isMultisample ) {\n\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t}\n\n\t\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\t\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t\t}\n\n\t\t\t// upload an empty depth texture with framebuffer size\n\t\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup GL resources for a non-texture depth buffer\n\t\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t\t} else {\n\n\t\t\t\tif ( isCube ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bindFramebuffer( 36160, null );\n\n\t\t}\n\n\t\t// Set up GL resources for the render target\n\t\tfunction setupRenderTarget( renderTarget ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\n\t\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\t\tif ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) {\n\n\t\t\t\trenderTarget.texture.format = RGBAFormat;\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t\t}\n\n\t\t\t// Setup framebuffer\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t\tif ( isMultisample ) {\n\n\t\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\t\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\t\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Setup color buffer\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( 34067, renderTarget.texture, supportsMips );\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\t\tgenerateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindTexture( 34067, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( 3553, renderTarget.texture, supportsMips );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\t\tgenerateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindTexture( 3553, null );\n\n\t\t\t}\n\n\t\t\t// Setup depth and stencil buffers\n\n\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\t\tconst texture = renderTarget.texture;\n\t\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\t\tstate.bindTexture( target, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\t\t_gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\t\tconst width = renderTarget.width;\n\t\t\t\t\tconst height = renderTarget.height;\n\t\t\t\t\tlet mask = 16384;\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t\t}\n\n\t\tfunction updateVideoTexture( texture ) {\n\n\t\t\tconst frame = info.render.frame;\n\n\t\t\t// Check the last frame we updated the VideoTexture\n\n\t\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t\t_videoTextures.set( texture, frame );\n\t\t\t\ttexture.update();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// backwards compatibility\n\n\t\tlet warnedTexture2D = false;\n\t\tlet warnedTextureCube = false;\n\n\t\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\t\t\twarnedTexture2D = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\t\t\tsetTexture2D( texture, slot );\n\n\t\t}\n\n\t\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\\'t use cube render targets as textures. Use their .texture property instead.' );\n\t\t\t\t\twarnedTextureCube = true;\n\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\n\t\t\t}\n\n\n\t\t\tsetTextureCube( texture, slot );\n\n\t\t}\n\n\t\t//\n\n\t\tthis.allocateTextureUnit = allocateTextureUnit;\n\t\tthis.resetTextureUnits = resetTextureUnits;\n\n\t\tthis.setTexture2D = setTexture2D;\n\t\tthis.setTexture2DArray = setTexture2DArray;\n\t\tthis.setTexture3D = setTexture3D;\n\t\tthis.setTextureCube = setTextureCube;\n\t\tthis.setupRenderTarget = setupRenderTarget;\n\t\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\t\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\t\tthis.safeSetTexture2D = safeSetTexture2D;\n\t\tthis.safeSetTextureCube = safeSetTextureCube;\n\n\t}\n\n\tfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\n\t\tfunction convert( p ) {\n\n\t\t\tlet extension;\n\n\t\t\tif ( p === UnsignedByteType ) return 5121;\n\t\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\t\tif ( p === ByteType ) return 5120;\n\t\t\tif ( p === ShortType ) return 5122;\n\t\t\tif ( p === UnsignedShortType ) return 5123;\n\t\t\tif ( p === IntType ) return 5124;\n\t\t\tif ( p === UnsignedIntType ) return 5125;\n\t\t\tif ( p === FloatType ) return 5126;\n\n\t\t\tif ( p === HalfFloatType ) {\n\n\t\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === AlphaFormat ) return 6406;\n\t\t\tif ( p === RGBFormat ) return 6407;\n\t\t\tif ( p === RGBAFormat ) return 6408;\n\t\t\tif ( p === LuminanceFormat ) return 6409;\n\t\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\t\tif ( p === DepthFormat ) return 6402;\n\t\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\t\tif ( p === RedFormat ) return 6403;\n\n\t\t\t// WebGL2 formats.\n\n\t\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\t\tif ( p === RGFormat ) return 33319;\n\t\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format$1 ||\n\t\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format$1 ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format$1 ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format$1 ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ||\n\t\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\t// TODO Complete?\n\n\t\t\t\t\treturn p;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\t// TODO Complete?\n\n\t\t\t\t\treturn p;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === UnsignedInt248Type$1 ) {\n\n\t\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn { convert: convert };\n\n\t}\n\n\tfunction ArrayCamera( array = [] ) {\n\n\t\tPerspectiveCamera.call( this );\n\n\t\tthis.cameras = array;\n\n\t}\n\n\tArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\t\tconstructor: ArrayCamera,\n\n\t\tisArrayCamera: true\n\n\t} );\n\n\tfunction Group() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Group';\n\n\t}\n\n\tGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Group,\n\n\t\tisGroup: true\n\n\t} );\n\n\tfunction WebXRController() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tObject.assign( WebXRController.prototype, {\n\n\t\tconstructor: WebXRController,\n\n\t\tgetHandSpace: function () {\n\n\t\t\tif ( this._hand === null ) {\n\n\t\t\t\tthis._hand = new Group();\n\t\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\t\tthis._hand.visible = false;\n\n\t\t\t\tthis._hand.joints = [];\n\t\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t\t\tif ( window.XRHand ) {\n\n\t\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\t\tthis._hand.joints.push( joint );\n\t\t\t\t\t\t// ??\n\t\t\t\t\t\tthis._hand.add( joint );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this._hand;\n\n\t\t},\n\n\t\tgetTargetRaySpace: function () {\n\n\t\t\tif ( this._targetRay === null ) {\n\n\t\t\t\tthis._targetRay = new Group();\n\t\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\t\tthis._targetRay.visible = false;\n\n\t\t\t}\n\n\t\t\treturn this._targetRay;\n\n\t\t},\n\n\t\tgetGripSpace: function () {\n\n\t\t\tif ( this._grip === null ) {\n\n\t\t\t\tthis._grip = new Group();\n\t\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\t\tthis._grip.visible = false;\n\n\t\t\t}\n\n\t\t\treturn this._grip;\n\n\t\t},\n\n\t\tdispatchEvent: function ( event ) {\n\n\t\t\tif ( this._targetRay !== null ) {\n\n\t\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t\t}\n\n\t\t\tif ( this._grip !== null ) {\n\n\t\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t\t}\n\n\t\t\tif ( this._hand !== null ) {\n\n\t\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdisconnect: function ( inputSource ) {\n\n\t\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\t\tif ( this._targetRay !== null ) {\n\n\t\t\t\tthis._targetRay.visible = false;\n\n\t\t\t}\n\n\t\t\tif ( this._grip !== null ) {\n\n\t\t\t\tthis._grip.visible = false;\n\n\t\t\t}\n\n\t\t\tif ( this._hand !== null ) {\n\n\t\t\t\tthis._hand.visible = false;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tupdate: function ( inputSource, frame, referenceSpace ) {\n\n\t\t\tlet inputPose = null;\n\t\t\tlet gripPose = null;\n\t\t\tlet handPose = null;\n\n\t\t\tconst targetRay = this._targetRay;\n\t\t\tconst grip = this._grip;\n\t\t\tconst hand = this._hand;\n\n\t\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\t\thandPose = true;\n\n\t\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\t\tif ( inputSource.hand[ i ] ) {\n\n\t\t\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\t\t\tconst jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace );\n\t\t\t\t\t\t\tconst joint = hand.joints[ i ];\n\n\t\t\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t\t\t\t// Custom events\n\n\t\t\t\t\t\t\t// Check pinch\n\t\t\t\t\t\t\tconst indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ];\n\t\t\t\t\t\t\tconst thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ];\n\t\t\t\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t\t}\n\n\t\t\tif ( grip !== null ) {\n\n\t\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t\t}\n\n\t\t\tif ( hand !== null ) {\n\n\t\t\t\thand.visible = ( handPose !== null );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction WebXRManager( renderer, gl ) {\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\n\t\tlet pose = null;\n\n\t\tconst controllers = [];\n\t\tconst inputSourcesMap = new Map();\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\t\tcontroller.disconnect( inputSource );\n\n\t\t\t} );\n\n\t\t\tinputSourcesMap.clear();\n\n\t\t\t//\n\n\t\t\trenderer.setFramebuffer( null );\n\t\t\trenderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tfunction onRequestReferenceSpace( value ) {\n\n\t\t\treferenceSpace = value;\n\n\t\t\tanimation.setContext( session );\n\t\t\tanimation.start();\n\n\t\t\tscope.isPresenting = true;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn referenceSpace;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\n\t\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tgl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tconst layerInit = {\n\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t};\n\n\t\t\t\t// eslint-disable-next-line no-undef\n\t\t\t\tconst baseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\tsession.updateRenderState( { baseLayer: baseLayer } );\n\n\t\t\t\tsession.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );\n\n\t\t\t\t//\n\n\t\t\t\tsession.addEventListener( 'inputsourceschange', updateInputSources );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction updateInputSources( event ) {\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\t// Assign inputSources to available controllers\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t\t}\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\t\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.getCamera = function ( camera ) {\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update camera and its children\n\n\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( referenceSpace );\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\t\t\t\tconst baseLayer = session.renderState.baseLayer;\n\n\t\t\t\trenderer.setFramebuffer( baseLayer.framebuffer );\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\t\t\t\t\tconst viewport = baseLayer.getViewport( view );\n\n\t\t\t\t\tconst camera = cameras[ i ];\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst inputSources = session.inputSources;\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst controller = controllers[ i ];\n\t\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n\tObject.assign( WebXRManager.prototype, EventDispatcher$1.prototype );\n\n\tfunction WebGLMaterials( properties ) {\n\n\t\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\t\tif ( fog.isFog ) {\n\n\t\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height ) {\n\n\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\t\trefreshUniformsPhysical( uniforms, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t\t}\n\n\t\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\t\tuniforms.color.value.copy( material.color );\n\t\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t\tif ( material.color ) {\n\n\t\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t\t}\n\n\t\t\tif ( material.emissive ) {\n\n\t\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t\t}\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuniforms.map.value = material.map;\n\n\t\t\t}\n\n\t\t\tif ( material.alphaMap ) {\n\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\t}\n\n\t\t\tif ( material.specularMap ) {\n\n\t\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\t}\n\n\t\t\tconst envMap = properties.get( material ).envMap;\n\n\t\t\tif ( envMap ) {\n\n\t\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\t\tconst maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.lightMap ) {\n\n\t\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\t}\n\n\t\t\tif ( material.aoMap ) {\n\n\t\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\t// uv repeat and offset setting priorities\n\t\t\t// 1. color map\n\t\t\t// 2. specular map\n\t\t\t// 3. displacementMap map\n\t\t\t// 4. normal map\n\t\t\t// 5. bump map\n\t\t\t// 6. roughnessMap map\n\t\t\t// 7. metalnessMap map\n\t\t\t// 8. alphaMap map\n\t\t\t// 9. emissiveMap map\n\t\t\t// 10. clearcoat map\n\t\t\t// 11. clearcoat normal map\n\t\t\t// 12. clearcoat roughnessMap map\n\n\t\t\tlet uvScaleMap;\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuvScaleMap = material.map;\n\n\t\t\t} else if ( material.specularMap ) {\n\n\t\t\t\tuvScaleMap = material.specularMap;\n\n\t\t\t} else if ( material.displacementMap ) {\n\n\t\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t\t} else if ( material.normalMap ) {\n\n\t\t\t\tuvScaleMap = material.normalMap;\n\n\t\t\t} else if ( material.bumpMap ) {\n\n\t\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t\t} else if ( material.roughnessMap ) {\n\n\t\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t\t} else if ( material.metalnessMap ) {\n\n\t\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t\t} else if ( material.alphaMap ) {\n\n\t\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t\t} else if ( material.emissiveMap ) {\n\n\t\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t\t// backwards compatibility\n\t\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t\t}\n\n\t\t\t// uv repeat and offset setting priorities for uv2\n\t\t\t// 1. ao map\n\t\t\t// 2. light map\n\n\t\t\tlet uv2ScaleMap;\n\n\t\t\tif ( material.aoMap ) {\n\n\t\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t\t} else if ( material.lightMap ) {\n\n\t\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t\t// backwards compatibility\n\t\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t\t}\n\n\t\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t}\n\n\t\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\t\tuniforms.dashSize.value = material.dashSize;\n\t\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\t\tuniforms.scale.value = material.scale;\n\n\t\t}\n\n\t\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\t\t\tuniforms.size.value = material.size * pixelRatio;\n\t\t\tuniforms.scale.value = height * 0.5;\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuniforms.map.value = material.map;\n\n\t\t\t}\n\n\t\t\tif ( material.alphaMap ) {\n\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\t}\n\n\t\t\t// uv repeat and offset setting priorities\n\t\t\t// 1. color map\n\t\t\t// 2. alpha map\n\n\t\t\tlet uvScaleMap;\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuvScaleMap = material.map;\n\n\t\t\t} else if ( material.alphaMap ) {\n\n\t\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\t\t\tuniforms.rotation.value = material.rotation;\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuniforms.map.value = material.map;\n\n\t\t\t}\n\n\t\t\tif ( material.alphaMap ) {\n\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\t}\n\n\t\t\t// uv repeat and offset setting priorities\n\t\t\t// 1. color map\n\t\t\t// 2. alpha map\n\n\t\t\tlet uvScaleMap;\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuvScaleMap = material.map;\n\n\t\t\t} else if ( material.alphaMap ) {\n\n\t\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\t\tuniforms.specular.value.copy( material.specular );\n\t\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\t\tif ( material.gradientMap ) {\n\n\t\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t\t}\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\t\tuniforms.roughness.value = material.roughness;\n\t\t\tuniforms.metalness.value = material.metalness;\n\n\t\t\tif ( material.roughnessMap ) {\n\n\t\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.metalnessMap ) {\n\n\t\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t\tconst envMap = properties.get( material ).envMap;\n\n\t\t\tif ( envMap ) {\n\n\t\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\t\t\tif ( material.sheen ) uniforms.sheen.value.copy( material.sheen );\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\t\tif ( material.matcap ) {\n\n\t\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t\t}\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\t\tuniforms.farDistance.value = material.farDistance;\n\n\t\t}\n\n\t\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\trefreshFogUniforms: refreshFogUniforms,\n\t\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t\t};\n\n\t}\n\n\tfunction createCanvasElement() {\n\n\t\tconst canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\tcanvas.style.display = 'block';\n\t\treturn canvas;\n\n\t}\n\n\tfunction WebGLRenderer( parameters ) {\n\n\t\tparameters = parameters || {};\n\n\t\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\t\tlet currentRenderList = null;\n\t\tlet currentRenderState = null;\n\n\t\t// render() can be called from within a callback triggered by another render.\n\t\t// We track this so that the nested render call gets its state isolated from the parent render call.\n\n\t\tconst renderStateStack = [];\n\n\t\t// public properties\n\n\t\tthis.domElement = _canvas;\n\n\t\t// Debug configuration container\n\t\tthis.debug = {\n\n\t\t\t/**\n\t\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tcheckShaderErrors: true\n\t\t};\n\n\t\t// clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false;\n\n\t\t// physically based shading\n\n\t\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\t\tthis.outputEncoding = LinearEncoding;\n\n\t\t// physical lights\n\n\t\tthis.physicallyCorrectLights = false;\n\n\t\t// tone mapping\n\n\t\tthis.toneMapping = NoToneMapping;\n\t\tthis.toneMappingExposure = 1.0;\n\n\t\t// morphs\n\n\t\tthis.maxMorphTargets = 8;\n\t\tthis.maxMorphNormals = 4;\n\n\t\t// internal properties\n\n\t\tconst _this = this;\n\n\t\tlet _isContextLost = false;\n\n\t\t// internal state cache\n\n\t\tlet _framebuffer = null;\n\n\t\tlet _currentActiveCubeFace = 0;\n\t\tlet _currentActiveMipmapLevel = 0;\n\t\tlet _currentRenderTarget = null;\n\t\tlet _currentFramebuffer = null;\n\t\tlet _currentMaterialId = - 1;\n\n\t\tlet _currentCamera = null;\n\n\t\tconst _currentViewport = new Vector4();\n\t\tconst _currentScissor = new Vector4();\n\t\tlet _currentScissorTest = null;\n\n\t\t//\n\n\t\tlet _width = _canvas.width;\n\t\tlet _height = _canvas.height;\n\n\t\tlet _pixelRatio = 1;\n\t\tlet _opaqueSort = null;\n\t\tlet _transparentSort = null;\n\n\t\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\t\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\t\tlet _scissorTest = false;\n\n\t\t// frustum\n\n\t\tconst _frustum = new Frustum();\n\n\t\t// clipping\n\n\t\tlet _clippingEnabled = false;\n\t\tlet _localClippingEnabled = false;\n\n\t\t// camera matrices cache\n\n\t\tconst _projScreenMatrix = new Matrix4();\n\n\t\tconst _vector3 = new Vector3();\n\n\t\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tlet _gl = _context;\n\n\t\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\t\tconst contextName = contextNames[ i ];\n\t\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\t\tif ( context !== null ) return context;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst contextAttributes = {\n\t\t\t\talpha: _alpha,\n\t\t\t\tdepth: _depth,\n\t\t\t\tstencil: _stencil,\n\t\t\t\tantialias: _antialias,\n\t\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\t\tpowerPreference: _powerPreference,\n\t\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t\t};\n\n\t\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\t\tcontextNames.shift();\n\n\t\t\t\t}\n\n\t\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\t\tif ( _gl === null ) {\n\n\t\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\t\tthrow error;\n\n\t\t}\n\n\t\tlet extensions, capabilities, state, info;\n\t\tlet properties, textures, cubemaps, attributes, geometries, objects;\n\t\tlet programCache, materials, renderLists, renderStates, clipping;\n\n\t\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\t\tlet utils, bindingStates;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\t\tif ( capabilities.isWebGL2 === false ) {\n\n\t\t\t\textensions.get( 'WEBGL_depth_texture' );\n\t\t\t\textensions.get( 'OES_texture_float' );\n\t\t\t\textensions.get( 'OES_texture_half_float' );\n\t\t\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\t\t\textensions.get( 'OES_standard_derivatives' );\n\t\t\t\textensions.get( 'OES_element_index_uint' );\n\t\t\t\textensions.get( 'OES_vertex_array_object' );\n\t\t\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\textensions.get( 'OES_texture_float_linear' );\n\n\t\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t\t\tinfo = new WebGLInfo( _gl );\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\t\tclipping = new WebGLClipping( properties );\n\t\t\tprogramCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping );\n\t\t\tmaterials = new WebGLMaterials( properties );\n\t\t\trenderLists = new WebGLRenderLists( properties );\n\t\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\t\tinfo.programs = programCache.programs;\n\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.state = state;\n\t\t\t_this.info = info;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// xr\n\n\t\tconst xr = new WebXRManager( _this, _gl );\n\n\t\tthis.xr = xr;\n\n\t\t// shadow map\n\n\t\tconst shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\t\tthis.shadowMap = shadowMap;\n\n\t\t// API\n\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\tthis.getSize = function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' );\n\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn target.set( _width, _height );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\t\tif ( xr.isPresenting ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\t\tif ( updateStyle !== false ) {\n\n\t\t\t\t_canvas.style.width = width + 'px';\n\t\t\t\t_canvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' );\n\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getCurrentViewport = function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' );\n\n\t\t\t\ttarget = new Vector4();\n\n\t\t\t}\n\n\t\t\treturn target.copy( _currentViewport );\n\n\t\t};\n\n\t\tthis.getViewport = function ( target ) {\n\n\t\t\treturn target.copy( _viewport );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_viewport.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t\t};\n\n\t\tthis.getScissor = function ( target ) {\n\n\t\t\treturn target.copy( _scissor );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_scissor.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t\t};\n\n\t\tthis.getScissorTest = function () {\n\n\t\t\treturn _scissorTest;\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\tthis.setOpaqueSort = function ( method ) {\n\n\t\t\t_opaqueSort = method;\n\n\t\t};\n\n\t\tthis.setTransparentSort = function ( method ) {\n\n\t\t\t_transparentSort = method;\n\n\t\t};\n\n\t\t// Clearing\n\n\t\tthis.getClearColor = function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'WebGLRenderer: .getClearColor() now requires a Color as an argument' );\n\n\t\t\t\ttarget = new Color();\n\n\t\t\t}\n\n\t\t\treturn target.copy( background.getClearColor() );\n\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.clear = function ( color, depth, stencil ) {\n\n\t\t\tlet bits = 0;\n\n\t\t\tif ( color === undefined || color ) bits |= 16384;\n\t\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\t\tif ( stencil === undefined || stencil ) bits |= 1024;\n\n\t\t\t_gl.clear( bits );\n\n\t\t};\n\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.dispose = function () {\n\n\t\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tcubemaps.dispose();\n\t\t\tobjects.dispose();\n\t\t\tbindingStates.dispose();\n\n\t\t\txr.dispose();\n\n\t\t\tanimation.stop();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tinitGLContext();\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tconst material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReference( material ) {\n\n\t\t\tconst programInfo = properties.get( material ).program;\n\n\t\t\tif ( programInfo !== undefined ) {\n\n\t\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tfunction renderObjectImmediate( object, program ) {\n\n\t\t\tobject.render( function ( object ) {\n\n\t\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\t\tbindingStates.initAttributes();\n\n\t\t\tconst buffers = properties.get( object );\n\n\t\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\t\tconst programAttributes = program.getAttributes();\n\n\t\t\tif ( object.hasPositions ) {\n\n\t\t\t\t_gl.bindBuffer( 34962, buffers.position );\n\t\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\t\tbindingStates.enableAttribute( programAttributes.position );\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasNormals ) {\n\n\t\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\t\tbindingStates.enableAttribute( programAttributes.normal );\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasUvs ) {\n\n\t\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\t\tbindingStates.enableAttribute( programAttributes.uv );\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasColors ) {\n\n\t\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\t\tbindingStates.enableAttribute( programAttributes.color );\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tbindingStates.disableUnusedAttributes();\n\n\t\t\t_gl.drawArrays( 4, 0, object.count );\n\n\t\t\tobject.count = 0;\n\n\t\t};\n\n\t\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\t//\n\n\t\t\tlet index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t//\n\n\t\t\tif ( index === null ) {\n\n\t\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t\t} else if ( index.count === 0 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\tif ( material.morphTargets || material.morphNormals ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\t}\n\n\t\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\t\tlet attribute;\n\t\t\tlet renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\t\tif ( drawCount === 0 ) return;\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( 0 );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t\tif ( object.isInstancedMesh ) {\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Compile\n\n\t\tthis.compile = function ( scene, camera ) {\n\n\t\t\tcurrentRenderState = renderStates.get( scene );\n\t\t\tcurrentRenderState.init();\n\n\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\tconst compiled = new WeakMap();\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material ) {\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\t\tif ( compiled.has( material2 ) === false ) {\n\n\t\t\t\t\t\t\t\tinitMaterial( material2, scene, object );\n\t\t\t\t\t\t\t\tcompiled.set( material2 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( compiled.has( material ) === false ) {\n\n\t\t\t\t\t\tinitMaterial( material, scene, object );\n\t\t\t\t\t\tcompiled.set( material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time ) {\n\n\t\t\tif ( xr.isPresenting ) return;\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\txr.setAnimationLoop( callback );\n\n\t\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t\t};\n\n\t\t// Rendering\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tlet renderTarget, forceClear;\n\n\t\t\tif ( arguments[ 2 ] !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' );\n\t\t\t\trenderTarget = arguments[ 2 ];\n\n\t\t\t}\n\n\t\t\tif ( arguments[ 3 ] !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' );\n\t\t\t\tforceClear = arguments[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost === true ) return;\n\n\t\t\t// reset caching for this frame\n\n\t\t\tbindingStates.resetDefaultState();\n\t\t\t_currentMaterialId = - 1;\n\t\t\t_currentCamera = null;\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tcamera = xr.getCamera( camera );\n\n\t\t\t}\n\n\t\t\t//\n\t\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget );\n\n\t\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\t\tcurrentRenderState.init();\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\t\tcurrentRenderList.init();\n\n\t\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\t\tcurrentRenderList.finish();\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tcurrentRenderState.setupLights();\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t\t//\n\n\t\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t\tif ( renderTarget !== undefined ) {\n\n\t\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t\t// render scene\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t//\n\n\t\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t\t//\n\n\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t}\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t\t// _gl.finish();\n\n\t\t\trenderStateStack.pop();\n\t\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderState = null;\n\n\t\t\t}\n\n\t\t\tcurrentRenderList = null;\n\n\t\t};\n\n\t\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tconst visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isGroup ) {\n\n\t\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null );\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\t\tconst object = renderItem.object;\n\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\t\tfor ( let j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst camera2 = cameras[ j ];\n\n\t\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\t\tcurrentRenderState.setupLightsView( camera2 );\n\n\t\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\t\t\tstate.setMaterial( material );\n\n\t\t\t\tbindingStates.reset();\n\n\t\t\t\trenderObjectImmediate( object, program );\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t\t}\n\n\t\tfunction initMaterial( material, scene, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tconst lights = currentRenderState.state.lights;\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tconst lightsStateVersion = lights.state.version;\n\n\t\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\t\tlet program = materialProperties.program;\n\t\t\tlet programChange = true;\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\t// new material\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t} else if ( program.cacheKey !== programCacheKey ) {\n\n\t\t\t\t// changed glsl or parameters\n\t\t\t\treleaseMaterialProgramReference( material );\n\n\t\t\t} else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) {\n\n\t\t\t\tprogramChange = false;\n\n\t\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t\t// same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect\n\n\t\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || environment );\n\n\t\t\t\treturn;\n\n\t\t\t} else {\n\n\t\t\t\t// only rebuild uniform list\n\t\t\t\tprogramChange = false;\n\n\t\t\t}\n\n\t\t\tif ( programChange ) {\n\n\t\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\n\t\t\t\tmaterialProperties.program = program;\n\t\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\t\t\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\n\t\t\t}\n\n\t\t\tconst uniforms = materialProperties.uniforms;\n\n\t\t\tif ( ! material.isShaderMaterial &&\n\t\t\t\t! material.isRawShaderMaterial ||\n\t\t\t\tmaterial.clipping === true ) {\n\n\t\t\t\tmaterialProperties.numClippingPlanes = clipping.numPlanes;\n\t\t\t\tmaterialProperties.numIntersection = clipping.numIntersection;\n\t\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t\t}\n\n\t\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.fog = scene.fog;\n\t\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tconst progUniforms = materialProperties.program.getUniforms();\n\t\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\t}\n\n\t\tfunction setProgram( camera, scene, material, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\ttextures.resetTextureUnits();\n\n\t\t\tconst fog = scene.fog;\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\t\tconst materialProperties = properties.get( material );\n\t\t\tconst lights = currentRenderState.state.lights;\n\n\t\t\tif ( _clippingEnabled === true ) {\n\n\t\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\t\tconst useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\t\tif ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t\t} else if ( materialProperties.environment !== environment ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t\t} else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\t\t\t\tmaterialProperties.__version = material.version;\n\n\t\t\t}\n\n\t\t\tlet refreshProgram = false;\n\t\t\tlet refreshMaterial = false;\n\t\t\tlet refreshLights = false;\n\n\t\t\tconst program = materialProperties.program,\n\t\t\t\tp_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t\t// load material specific uniforms\n\t\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t\t// otherwise textures used for skinning can take over texture units reserved for other material textures\n\n\t\t\tif ( material.skinning ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tconst skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tconst bones = skeleton.bones;\n\n\t\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\t\tif ( skeleton.boneTexture === null ) {\n\n\t\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t\t//      RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t\t//  with  8x8  pixel texture max   16 bones * 4 pixels =  (8 * 8)\n\t\t\t\t\t\t\t//       16x16 pixel texture max   64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t\t//       32x32 pixel texture max  256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t\t//       64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\t\tlet size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\t\tsize = MathUtils.ceilPowerOfTwo( size );\n\t\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\n\t\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height );\n\n\t\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t\t}\n\n\t\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t\t}\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\tfunction materialNeedsLights( material ) {\n\n\t\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t\t}\n\n\t\t//\n\t\tthis.setFramebuffer = function ( value ) {\n\n\t\t\tif ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value );\n\n\t\t\t_framebuffer = value;\n\n\t\t};\n\n\t\tthis.getActiveCubeFace = function () {\n\n\t\t\treturn _currentActiveCubeFace;\n\n\t\t};\n\n\t\tthis.getActiveMipmapLevel = function () {\n\n\t\t\treturn _currentActiveMipmapLevel;\n\n\t\t};\n\n\t\tthis.getRenderList = function () {\n\n\t\t\treturn currentRenderList;\n\n\t\t};\n\n\t\tthis.setRenderList = function ( renderList ) {\n\n\t\t\tcurrentRenderList = renderList;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\t\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t}\n\n\t\t\tlet framebuffer = _framebuffer;\n\t\t\tlet isCube = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tlet restore = false;\n\n\t\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t\t\trestore = true;\n\n\t\t\t\t}\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t\t! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) {\n\n\t\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t\t_gl.bindFramebuffer( 36160, _currentFramebuffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\t\tconst levelScale = Math.pow( 2, - level );\n\t\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\t\tconst height = Math.floor( texture.image.height * levelScale );\n\t\t\tconst glFormat = utils.convert( texture.format );\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\t\tconst width = srcTexture.image.width;\n\t\t\tconst height = srcTexture.image.height;\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t\t// As another texture upload may have changed pixelStorei\n\t\t\t// parameters, make sure they are correct for the dstTexture\n\t\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.initTexture = function ( texture ) {\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.resetState = function () {\n\n\t\t\tstate.reset();\n\t\t\tbindingStates.reset();\n\n\t\t};\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tfunction WebGL1Renderer( parameters ) {\n\n\t\tWebGLRenderer.call( this, parameters );\n\n\t}\n\n\tWebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), {\n\n\t\tconstructor: WebGL1Renderer,\n\n\t\tisWebGL1Renderer: true\n\n\t} );\n\n\tclass FogExp2 {\n\n\t\tconstructor( color, density ) {\n\n\t\t\tObject.defineProperty( this, 'isFogExp2', { value: true } );\n\n\t\t\tthis.name = '';\n\n\t\t\tthis.color = new Color( color );\n\t\t\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new FogExp2( this.color, this.density );\n\n\t\t}\n\n\t\ttoJSON( /* meta */ ) {\n\n\t\t\treturn {\n\t\t\t\ttype: 'FogExp2',\n\t\t\t\tcolor: this.color.getHex(),\n\t\t\t\tdensity: this.density\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tclass Fog {\n\n\t\tconstructor( color, near, far ) {\n\n\t\t\tObject.defineProperty( this, 'isFog', { value: true } );\n\n\t\t\tthis.name = '';\n\n\t\t\tthis.color = new Color( color );\n\n\t\t\tthis.near = ( near !== undefined ) ? near : 1;\n\t\t\tthis.far = ( far !== undefined ) ? far : 1000;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new Fog( this.color, this.near, this.far );\n\n\t\t}\n\n\t\ttoJSON( /* meta */ ) {\n\n\t\t\treturn {\n\t\t\t\ttype: 'Fog',\n\t\t\t\tcolor: this.color.getHex(),\n\t\t\t\tnear: this.near,\n\t\t\t\tfar: this.far\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tclass Scene extends Object3D {\n\n\t\tconstructor() {\n\n\t\t\tsuper();\n\n\t\t\tObject.defineProperty( this, 'isScene', { value: true } );\n\n\t\t\tthis.type = 'Scene';\n\n\t\t\tthis.background = null;\n\t\t\tthis.environment = null;\n\t\t\tthis.fog = null;\n\n\t\t\tthis.overrideMaterial = null;\n\n\t\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t\t}\n\n\t\t}\n\n\t\tcopy( source, recursive ) {\n\n\t\t\tsuper.copy( source, recursive );\n\n\t\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\t\tthis.autoUpdate = source.autoUpdate;\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoJSON( meta ) {\n\n\t\t\tconst data = super.toJSON( meta );\n\n\t\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\t\tif ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta );\n\t\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\t\treturn data;\n\n\t\t}\n\n\t}\n\n\tfunction InterleavedBuffer( array, stride ) {\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t}\n\n\tObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( InterleavedBuffer.prototype, {\n\n\t\tisInterleavedBuffer: true,\n\n\t\tonUploadCallback: function () {},\n\n\t\tsetUsage: function ( value ) {\n\n\t\t\tthis.usage = value;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.array = new source.array.constructor( source.array );\n\t\t\tthis.count = source.count;\n\t\t\tthis.stride = source.stride;\n\t\t\tthis.usage = source.usage;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\t\tindex1 *= this.stride;\n\t\t\tindex2 *= attribute.stride;\n\n\t\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tset: function ( value, offset = 0 ) {\n\n\t\t\tthis.array.set( value, offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function ( data ) {\n\n\t\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\t\tdata.arrayBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t\t}\n\n\t\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t\t}\n\n\t\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\t\tconst ib = new InterleavedBuffer( array, this.stride );\n\t\t\tib.setUsage( this.usage );\n\n\t\t\treturn ib;\n\n\t\t},\n\n\t\tonUpload: function ( callback ) {\n\n\t\t\tthis.onUploadCallback = callback;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( data ) {\n\n\t\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\t\tdata.arrayBuffers = {};\n\n\t\t\t}\n\n\t\t\t// generate UUID for array buffer if necessary\n\n\t\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t\t}\n\n\t\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\treturn {\n\t\t\t\tuuid: this.uuid,\n\t\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tstride: this.stride\n\t\t\t};\n\n\t\t}\n\n\t} );\n\n\tconst _vector$6 = new Vector3();\n\n\tfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized === true;\n\n\t}\n\n\tObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\t\tcount: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.data.count;\n\n\t\t\t}\n\n\t\t},\n\n\t\tarray: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.data.array;\n\n\t\t\t}\n\n\t\t},\n\n\t\tneedsUpdate: {\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.data.needsUpdate = value;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( InterleavedBufferAttribute.prototype, {\n\n\t\tisInterleavedBufferAttribute: true,\n\n\t\tapplyMatrix4: function ( m ) {\n\n\t\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$6.x = this.getX( i );\n\t\t\t\t_vector$6.y = this.getY( i );\n\t\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetX: function ( index, x ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( index, y ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetZ: function ( index, z ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetW: function ( index, w ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetX: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t\t},\n\n\t\tgetY: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\t},\n\n\t\tgetZ: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\t},\n\n\t\tgetW: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\t},\n\n\t\tsetXY: function ( index, x, y ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZ: function ( index, x, y, z ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\t\t\tthis.data.array[ index + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\t\t\tthis.data.array[ index + 2 ] = z;\n\t\t\tthis.data.array[ index + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function ( data ) {\n\n\t\t\tif ( data === undefined ) {\n\n\t\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t\t}\n\n\t\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( data ) {\n\n\t\t\tif ( data === undefined ) {\n\n\t\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\t\treturn {\n\t\t\t\t\titemSize: this.itemSize,\n\t\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\t\tarray: array,\n\t\t\t\t\tnormalized: this.normalized\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\t// save as true interlaved attribtue\n\n\t\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\t\titemSize: this.itemSize,\n\t\t\t\t\tdata: this.data.uuid,\n\t\t\t\t\toffset: this.offset,\n\t\t\t\t\tnormalized: this.normalized\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  map: new THREE.Texture( <Image> ),\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *  rotation: <float>,\n\t *  sizeAttenuation: <bool>\n\t * }\n\t */\n\n\tfunction SpriteMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tSpriteMaterial.prototype = Object.create( Material.prototype );\n\tSpriteMaterial.prototype.constructor = SpriteMaterial;\n\tSpriteMaterial.prototype.isSpriteMaterial = true;\n\n\tSpriteMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\treturn this;\n\n\t};\n\n\tlet _geometry;\n\n\tconst _intersectPoint = new Vector3();\n\tconst _worldScale = new Vector3();\n\tconst _mvPosition = new Vector3();\n\n\tconst _alignedPosition = new Vector2();\n\tconst _rotatedPosition = new Vector2();\n\tconst _viewWorldMatrix = new Matrix4();\n\n\tconst _vA$1 = new Vector3();\n\tconst _vB$1 = new Vector3();\n\tconst _vC$1 = new Vector3();\n\n\tconst _uvA$1 = new Vector2();\n\tconst _uvB$1 = new Vector2();\n\tconst _uvC$1 = new Vector2();\n\n\tfunction Sprite( material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\tSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Sprite,\n\n\t\tisSprite: true,\n\n\t\traycast: function ( raycaster, intersects ) {\n\n\t\t\tif ( raycaster.camera === null ) {\n\n\t\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t\t}\n\n\t\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t\t}\n\n\t\t\tconst rotation = this.material.rotation;\n\t\t\tlet sin, cos;\n\n\t\t\tif ( rotation !== 0 ) {\n\n\t\t\t\tcos = Math.cos( rotation );\n\t\t\t\tsin = Math.sin( rotation );\n\n\t\t\t}\n\n\t\t\tconst center = this.center;\n\n\t\t\ttransformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\ttransformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\ttransformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t\t_uvA$1.set( 0, 0 );\n\t\t\t_uvB$1.set( 1, 0 );\n\t\t\t_uvC$1.set( 1, 1 );\n\n\t\t\t// check first triangle\n\t\t\tlet intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint );\n\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\t// check second triangle\n\t\t\t\ttransformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t\t_uvB$1.set( 0, 1 );\n\n\t\t\t\tintersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint );\n\t\t\t\tif ( intersect === null ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\tintersects.push( {\n\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: _intersectPoint.clone(),\n\t\t\t\tuv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ),\n\t\t\t\tface: null,\n\t\t\t\tobject: this\n\n\t\t\t} );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\t\tthis.material = source.material;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t\t// compute position in camera space\n\t\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t\t// to check if rotation is not zero\n\t\tif ( sin !== undefined ) {\n\n\t\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t\t} else {\n\n\t\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t\t}\n\n\n\t\tvertexPosition.copy( mvPosition );\n\t\tvertexPosition.x += _rotatedPosition.x;\n\t\tvertexPosition.y += _rotatedPosition.y;\n\n\t\t// transform to world space\n\t\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n\t}\n\n\tconst _v1$4 = new Vector3();\n\tconst _v2$2 = new Vector3();\n\n\tfunction LOD() {\n\n\t\tObject3D.call( this );\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: LOD,\n\n\t\tisLOD: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\t\tconst levels = source.levels;\n\n\t\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tconst level = levels[ i ];\n\n\t\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t\t}\n\n\t\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddLevel: function ( object, distance = 0 ) {\n\n\t\t\tdistance = Math.abs( distance );\n\n\t\t\tconst levels = this.levels;\n\n\t\t\tlet l;\n\n\t\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\t\tthis.add( object );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetCurrentLevel: function () {\n\n\t\t\treturn this._currentLevel;\n\n\t\t},\n\n\t\tgetObjectForDistance: function ( distance ) {\n\n\t\t\tconst levels = this.levels;\n\n\t\t\tif ( levels.length > 0 ) {\n\n\t\t\t\tlet i, l;\n\n\t\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn levels[ i - 1 ].object;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\traycast: function ( raycaster, intersects ) {\n\n\t\t\tconst levels = this.levels;\n\n\t\t\tif ( levels.length > 0 ) {\n\n\t\t\t\t_v1$4.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$4 );\n\n\t\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdate: function ( camera ) {\n\n\t\t\tconst levels = this.levels;\n\n\t\t\tif ( levels.length > 1 ) {\n\n\t\t\t\t_v1$4.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\t_v2$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tconst distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom;\n\n\t\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\t\tlet i, l;\n\n\t\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._currentLevel = i - 1;\n\n\t\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\t\tdata.object.levels = [];\n\n\t\t\tconst levels = this.levels;\n\n\t\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tconst level = levels[ i ];\n\n\t\t\t\tdata.object.levels.push( {\n\t\t\t\t\tobject: level.object.uuid,\n\t\t\t\t\tdistance: level.distance\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tconst _basePosition = new Vector3();\n\n\tconst _skinIndex = new Vector4();\n\tconst _skinWeight = new Vector4();\n\n\tconst _vector$7 = new Vector3();\n\tconst _matrix$1 = new Matrix4();\n\n\tfunction SkinnedMesh( geometry, material ) {\n\n\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\tconsole.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tMesh.call( this, geometry, material );\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t}\n\n\tSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\t\tconstructor: SkinnedMesh,\n\n\t\tisSkinnedMesh: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tMesh.prototype.copy.call( this, source );\n\n\t\t\tthis.bindMode = source.bindMode;\n\t\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\t\tthis.skeleton = source.skeleton;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tbind: function ( skeleton, bindMatrix ) {\n\n\t\t\tthis.skeleton = skeleton;\n\n\t\t\tif ( bindMatrix === undefined ) {\n\n\t\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t\t}\n\n\t\t\tthis.bindMatrix.copy( bindMatrix );\n\t\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t\t},\n\n\t\tpose: function () {\n\n\t\t\tthis.skeleton.pose();\n\n\t\t},\n\n\t\tnormalizeSkinWeights: function () {\n\n\t\t\tconst vector = new Vector4();\n\n\t\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\t\tvector.x = skinWeight.getX( i );\n\t\t\t\tvector.y = skinWeight.getY( i );\n\t\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t}\n\n\t\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t\t}\n\n\t\t},\n\n\t\tboneTransform: function ( index, target ) {\n\n\t\t\tconst skeleton = this.skeleton;\n\t\t\tconst geometry = this.geometry;\n\n\t\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t\t_basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\t\ttarget.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t\t_matrix$1.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\t\ttarget.addScaledVector( _vector$7.copy( _basePosition ).applyMatrix4( _matrix$1 ), weight );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t\t}\n\n\t} );\n\n\tfunction Bone() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n\tBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Bone,\n\n\t\tisBone: true\n\n\t} );\n\n\tconst _offsetMatrix = new Matrix4();\n\tconst _identityMatrix = new Matrix4();\n\n\tfunction Skeleton( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tObject.assign( Skeleton.prototype, {\n\n\t\tinit: function () {\n\n\t\t\tconst bones = this.bones;\n\t\t\tconst boneInverses = this.boneInverses;\n\n\t\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t\t// calculate inverse bone matrices if necessary\n\n\t\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\t\tthis.calculateInverses();\n\n\t\t\t} else {\n\n\t\t\t\t// handle special case\n\n\t\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tcalculateInverses: function () {\n\n\t\t\tthis.boneInverses.length = 0;\n\n\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tconst inverse = new Matrix4();\n\n\t\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t\t}\n\n\t\t\t\tthis.boneInverses.push( inverse );\n\n\t\t\t}\n\n\t\t},\n\n\t\tpose: function () {\n\n\t\t\t// recover the bind-time world matrices\n\n\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tconst bone = this.bones[ i ];\n\n\t\t\t\tif ( bone ) {\n\n\t\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// compute the local matrices, positions, rotations and scales\n\n\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tconst bone = this.bones[ i ];\n\n\t\t\t\tif ( bone ) {\n\n\t\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tconst bones = this.bones;\n\t\t\tconst boneInverses = this.boneInverses;\n\t\t\tconst boneMatrices = this.boneMatrices;\n\t\t\tconst boneTexture = this.boneTexture;\n\n\t\t\t// flatten bone matrices to array\n\n\t\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\t// compute the offset between the current and the original transform\n\n\t\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t\t}\n\n\t\t\tif ( boneTexture !== null ) {\n\n\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t\t},\n\n\t\tgetBoneByName: function ( name ) {\n\n\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tconst bone = this.bones[ i ];\n\n\t\t\t\tif ( bone.name === name ) {\n\n\t\t\t\t\treturn bone;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t},\n\n\t\tdispose: function ( ) {\n\n\t\t\tif ( this.boneTexture !== null ) {\n\n\t\t\t\tthis.boneTexture.dispose();\n\n\t\t\t\tthis.boneTexture = null;\n\n\t\t\t}\n\n\t\t},\n\n\t\tfromJSON: function ( json, bones ) {\n\n\t\t\tthis.uuid = json.uuid;\n\n\t\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\t\tconst uuid = json.bones[ i ];\n\t\t\t\tlet bone = bones[ uuid ];\n\n\t\t\t\tif ( bone === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\t\tbone = new Bone();\n\n\t\t\t\t}\n\n\t\t\t\tthis.bones.push( bone );\n\t\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t\t}\n\n\t\t\tthis.init();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Skeleton',\n\t\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t\t},\n\t\t\t\tbones: [],\n\t\t\t\tboneInverses: []\n\t\t\t};\n\n\t\t\tdata.uuid = this.uuid;\n\n\t\t\tconst bones = this.bones;\n\t\t\tconst boneInverses = this.boneInverses;\n\n\t\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\t\tconst bone = bones[ i ];\n\t\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tconst _instanceLocalMatrix = new Matrix4();\n\tconst _instanceWorldMatrix = new Matrix4();\n\n\tconst _instanceIntersects = [];\n\n\tconst _mesh = new Mesh();\n\n\tfunction InstancedMesh( geometry, material, count ) {\n\n\t\tMesh.call( this, geometry, material );\n\n\t\tthis.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\n\t\tthis.count = count;\n\n\t\tthis.frustumCulled = false;\n\n\t}\n\n\tInstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\t\tconstructor: InstancedMesh,\n\n\t\tisInstancedMesh: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tMesh.prototype.copy.call( this, source );\n\n\t\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\t\t\tthis.count = source.count;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetColorAt: function ( index, color ) {\n\n\t\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t\t},\n\n\t\tgetMatrixAt: function ( index, matrix ) {\n\n\t\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t\t},\n\n\t\traycast: function ( raycaster, intersects ) {\n\n\t\t\tconst matrixWorld = this.matrixWorld;\n\t\t\tconst raycastTimes = this.count;\n\n\t\t\t_mesh.geometry = this.geometry;\n\t\t\t_mesh.material = this.material;\n\n\t\t\tif ( _mesh.material === undefined ) return;\n\n\t\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t\t// calculate the world matrix for each instance\n\n\t\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t\t// the mesh represents this single instance\n\n\t\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t\t// process the result of raycast\n\n\t\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\t\tintersect.object = this;\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t\t_instanceIntersects.length = 0;\n\n\t\t\t}\n\n\t\t},\n\n\t\tsetColorAt: function ( index, color ) {\n\n\t\t\tif ( this.instanceColor === null ) {\n\n\t\t\t\tthis.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 );\n\n\t\t\t}\n\n\t\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t\t},\n\n\t\tsetMatrixAt: function ( index, matrix ) {\n\n\t\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t\t},\n\n\t\tupdateMorphTargets: function () {\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  opacity: <float>,\n\t *\n\t *  linewidth: <float>,\n\t *  linecap: \"round\",\n\t *  linejoin: \"round\"\n\t * }\n\t */\n\n\tfunction LineBasicMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tLineBasicMaterial.prototype = Object.create( Material.prototype );\n\tLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\n\tLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\n\tLineBasicMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t};\n\n\tconst _start = new Vector3();\n\tconst _end = new Vector3();\n\tconst _inverseMatrix$1 = new Matrix4();\n\tconst _ray$1 = new Ray();\n\tconst _sphere$2 = new Sphere();\n\n\tfunction Line( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Line,\n\n\t\tisLine: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tthis.material = source.material;\n\t\t\tthis.geometry = source.geometry;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcomputeLineDistances: function () {\n\n\t\t\tconst geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tconst vertices = geometry.vertices;\n\t\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\t\tfor ( let i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\traycast: function ( raycaster, intersects ) {\n\n\t\t\tconst geometry = this.geometry;\n\t\t\tconst matrixWorld = this.matrixWorld;\n\t\t\tconst threshold = raycaster.params.Line.threshold;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$2.copy( geometry.boundingSphere );\n\t\t\t_sphere$2.applyMatrix4( matrixWorld );\n\t\t\t_sphere$2.radius += threshold;\n\n\t\t\tif ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return;\n\n\t\t\t//\n\n\t\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\t\tconst vStart = new Vector3();\n\t\t\tconst vEnd = new Vector3();\n\t\t\tconst interSegment = new Vector3();\n\t\t\tconst interRay = new Vector3();\n\t\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tconst index = geometry.index;\n\t\t\t\tconst attributes = geometry.attributes;\n\t\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tconst indices = index.array;\n\n\t\t\t\t\tfor ( let i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tconst a = indices[ i ];\n\t\t\t\t\t\tconst b = indices[ i + 1 ];\n\n\t\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, l = positionAttribute.count - 1; i < l; i += step ) {\n\n\t\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tconst vertices = geometry.vertices;\n\t\t\t\tconst nbVertices = vertices.length;\n\n\t\t\t\tfor ( let i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateMorphTargets: function () {\n\n\t\t\tconst geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tconst _start$1 = new Vector3();\n\tconst _end$1 = new Vector3();\n\n\tfunction LineSegments( geometry, material ) {\n\n\t\tLine.call( this, geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\t\tconstructor: LineSegments,\n\n\t\tisLineSegments: true,\n\n\t\tcomputeLineDistances: function () {\n\n\t\t\tconst geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\t\tconst lineDistances = [];\n\n\t\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tconst vertices = geometry.vertices;\n\t\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\t\tfor ( let i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t\t_start$1.copy( vertices[ i ] );\n\t\t\t\t\t_end$1.copy( vertices[ i + 1 ] );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction LineLoop( geometry, material ) {\n\n\t\tLine.call( this, geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n\tLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\t\tconstructor: LineLoop,\n\n\t\tisLineLoop: true,\n\n\t} );\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  opacity: <float>,\n\t *  map: new THREE.Texture( <Image> ),\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  size: <float>,\n\t *  sizeAttenuation: <bool>\n\t *\n\t *  morphTargets: <bool>\n\t * }\n\t */\n\n\tfunction PointsMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tPointsMaterial.prototype = Object.create( Material.prototype );\n\tPointsMaterial.prototype.constructor = PointsMaterial;\n\n\tPointsMaterial.prototype.isPointsMaterial = true;\n\n\tPointsMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t};\n\n\tconst _inverseMatrix$2 = new Matrix4();\n\tconst _ray$2 = new Ray();\n\tconst _sphere$3 = new Sphere();\n\tconst _position$1 = new Vector3();\n\n\tfunction Points( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Points,\n\n\t\tisPoints: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tthis.material = source.material;\n\t\t\tthis.geometry = source.geometry;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\traycast: function ( raycaster, intersects ) {\n\n\t\t\tconst geometry = this.geometry;\n\t\t\tconst matrixWorld = this.matrixWorld;\n\t\t\tconst threshold = raycaster.params.Points.threshold;\n\n\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t\t_sphere$3.applyMatrix4( matrixWorld );\n\t\t\t_sphere$3.radius += threshold;\n\n\t\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t\t//\n\n\t\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tconst index = geometry.index;\n\t\t\t\tconst attributes = geometry.attributes;\n\t\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\tconst indices = index.array;\n\n\t\t\t\t\tfor ( let i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst a = indices[ i ];\n\n\t\t\t\t\t\t_position$1.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\t\ttestPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t_position$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t\ttestPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst vertices = geometry.vertices;\n\n\t\t\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\ttestPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateMorphTargets: function () {\n\n\t\t\tconst geometry = this.geometry;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\t\tconst rayPointDistanceSq = _ray$2.distanceSqToPoint( point );\n\n\t\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\t\tconst intersectPoint = new Vector3();\n\n\t\t\t_ray$2.closestPointToPoint( point, intersectPoint );\n\t\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\tintersects.push( {\n\n\t\t\t\tdistance: distance,\n\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\t\tpoint: intersectPoint,\n\t\t\t\tindex: index,\n\t\t\t\tface: null,\n\t\t\t\tobject: object\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.format = format !== undefined ? format : RGBFormat;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\t\tconstructor: VideoTexture,\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.image ).copy( this );\n\n\t\t},\n\n\t\tisVideoTexture: true,\n\n\t\tupdate: function () {\n\n\t\t\tconst video = this.image;\n\t\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\t\tthis.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n\tCompressedTexture.prototype = Object.create( Texture.prototype );\n\tCompressedTexture.prototype.constructor = CompressedTexture;\n\n\tCompressedTexture.prototype.isCompressedTexture = true;\n\n\tfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tCanvasTexture.prototype = Object.create( Texture.prototype );\n\tCanvasTexture.prototype.constructor = CanvasTexture;\n\tCanvasTexture.prototype.isCanvasTexture = true;\n\n\tfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type$1;\n\n\t\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n\tDepthTexture.prototype = Object.create( Texture.prototype );\n\tDepthTexture.prototype.constructor = DepthTexture;\n\tDepthTexture.prototype.isDepthTexture = true;\n\n\tlet _geometryId = 0; // Geometry uses even numbers as Id\n\tconst _m1$3 = new Matrix4();\n\tconst _obj$1 = new Object3D();\n\tconst _offset$1 = new Vector3();\n\n\tfunction Geometry() {\n\n\t\tObject.defineProperty( this, 'id', { value: _geometryId += 2 } );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Geometry';\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\tthis.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = false;\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.lineDistancesNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tGeometry.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), {\n\n\t\tconstructor: Geometry,\n\n\t\tisGeometry: true,\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\t\tconst vertex = this.vertices[ i ];\n\t\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\t\tconst face = this.faces[ i ];\n\t\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tthis.computeBoundingSphere();\n\n\t\t\t}\n\n\t\t\tthis.verticesNeedUpdate = true;\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateX: function ( angle ) {\n\n\t\t\t// rotate geometry around world x-axis\n\n\t\t\t_m1$3.makeRotationX( angle );\n\n\t\t\tthis.applyMatrix4( _m1$3 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateY: function ( angle ) {\n\n\t\t\t// rotate geometry around world y-axis\n\n\t\t\t_m1$3.makeRotationY( angle );\n\n\t\t\tthis.applyMatrix4( _m1$3 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateZ: function ( angle ) {\n\n\t\t\t// rotate geometry around world z-axis\n\n\t\t\t_m1$3.makeRotationZ( angle );\n\n\t\t\tthis.applyMatrix4( _m1$3 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( x, y, z ) {\n\n\t\t\t// translate geometry\n\n\t\t\t_m1$3.makeTranslation( x, y, z );\n\n\t\t\tthis.applyMatrix4( _m1$3 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tscale: function ( x, y, z ) {\n\n\t\t\t// scale geometry\n\n\t\t\t_m1$3.makeScale( x, y, z );\n\n\t\t\tthis.applyMatrix4( _m1$3 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlookAt: function ( vector ) {\n\n\t\t\t_obj$1.lookAt( vector );\n\n\t\t\t_obj$1.updateMatrix();\n\n\t\t\tthis.applyMatrix4( _obj$1.matrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromBufferGeometry: function ( geometry ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\t\tconst attributes = geometry.attributes;\n\n\t\t\tif ( attributes.position === undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tconst position = attributes.position;\n\t\t\tconst normal = attributes.normal;\n\t\t\tconst color = attributes.color;\n\t\t\tconst uv = attributes.uv;\n\t\t\tconst uv2 = attributes.uv2;\n\n\t\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\t\tif ( color !== undefined ) {\n\n\t\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\t\tscope.colors[ c ].clone()\n\t\t\t\t];\n\n\t\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t\t];\n\n\t\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\t\tscope.faces.push( face );\n\n\t\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t\t] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t\t] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst groups = geometry.groups;\n\n\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tconst start = group.start;\n\t\t\t\t\tconst count = group.count;\n\n\t\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcenter: function () {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t\tthis.boundingBox.getCenter( _offset$1 ).negate();\n\n\t\t\tthis.translate( _offset$1.x, _offset$1.y, _offset$1.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t\tconst center = this.boundingSphere.center;\n\t\t\tconst radius = this.boundingSphere.radius;\n\n\t\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\t\tconst matrix = new Matrix4();\n\t\t\tmatrix.set(\n\t\t\t\ts, 0, 0, - s * center.x,\n\t\t\t\t0, s, 0, - s * center.y,\n\t\t\t\t0, 0, s, - s * center.z,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t\tthis.applyMatrix4( matrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcomputeFaceNormals: function () {\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tcb.normalize();\n\n\t\t\t\tface.normal.copy( cb );\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\t\tconst vertices = new Array( this.vertices.length );\n\n\t\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\t\tvertices[ v ] = new Vector3();\n\n\t\t\t}\n\n\t\t\tif ( areaWeighted ) {\n\n\t\t\t\t// vertex normals weighted by triangle areas\n\t\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.computeFaceNormals();\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\t\tvertices[ v ].normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.faces.length > 0 ) {\n\n\t\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeFlatVertexNormals: function () {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.faces.length > 0 ) {\n\n\t\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeMorphNormals: function () {\n\n\t\t\t// save original normals\n\t\t\t// - create temp variables on first access\n\t\t\t//   otherwise just copy (for faster repeated calls)\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\t\tconst tmpGeo = new Geometry();\n\t\t\ttmpGeo.faces = this.faces;\n\n\t\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\t// create on first access\n\n\t\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t\t// set vertices to morph target\n\n\t\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t\t// compute morph normals\n\n\t\t\t\ttmpGeo.computeFaceNormals();\n\t\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t\t// store morph normals\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// restore original normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeBoundingBox: function () {\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.boundingBox = new Box3();\n\n\t\t\t}\n\n\t\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t\t},\n\n\t\tcomputeBoundingSphere: function () {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t\t},\n\n\t\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet normalMatrix;\n\t\t\tconst vertexOffset = this.vertices.length,\n\t\t\t\tvertices1 = this.vertices,\n\t\t\t\tvertices2 = geometry.vertices,\n\t\t\t\tfaces1 = this.faces,\n\t\t\t\tfaces2 = geometry.faces,\n\t\t\t\tcolors1 = this.colors,\n\t\t\t\tcolors2 = geometry.colors;\n\n\t\t\tif ( matrix !== undefined ) {\n\n\t\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\t}\n\n\t\t\t// vertices\n\n\t\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\t\tvertices1.push( vertexCopy );\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\t\tconst face = faces2[ i ];\n\t\t\t\tlet normal, color;\n\t\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\t\tfaces1.push( faceCopy );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tmergeMesh: function ( mesh ) {\n\n\t\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t\t},\n\n\t\t/*\n\t\t * Checks for duplicate vertices with hashmap.\n\t\t * Duplicated vertices are removed\n\t\t * and faces' vertices are updated.\n\t\t */\n\n\t\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\t\tconst unique = [], changes = [];\n\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\t\tconst v = this.vertices[ i ];\n\t\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// if faces are completely degenerate after merging vertices, we\n\t\t\t// have to remove them from the geometry.\n\t\t\tconst faceIndicesToRemove = [];\n\n\t\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\t\tconst face = this.faces[ i ];\n\n\t\t\t\tface.a = changes[ face.a ];\n\t\t\t\tface.b = changes[ face.b ];\n\t\t\t\tface.c = changes[ face.c ];\n\n\t\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t\t// we have to remove the face as nothing can be saved\n\t\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Use unique set of vertices\n\n\t\t\tconst diff = this.vertices.length - unique.length;\n\t\t\tthis.vertices = unique;\n\t\t\treturn diff;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.vertices = [];\n\n\t\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tconst point = points[ i ];\n\t\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsortFacesByMaterialIndex: function () {\n\n\t\t\tconst faces = this.faces;\n\t\t\tconst length = faces.length;\n\n\t\t\t// tag faces\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tfaces[ i ]._id = i;\n\n\t\t\t}\n\n\t\t\t// sort faces\n\n\t\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t\t}\n\n\t\t\tfaces.sort( materialIndexSort );\n\n\t\t\t// sort uvs\n\n\t\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\t\tlet newUvs1, newUvs2;\n\n\t\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tconst id = faces[ i ]._id;\n\n\t\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t\t}\n\n\t\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Geometry',\n\t\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard Geometry serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\t\tif ( this.parameters !== undefined ) {\n\n\t\t\t\tconst parameters = this.parameters;\n\n\t\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\n\t\t\t}\n\n\t\t\tconst vertices = [];\n\n\t\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\t\tconst vertex = this.vertices[ i ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t\tconst faces = [];\n\t\t\tconst normals = [];\n\t\t\tconst normalsHash = {};\n\t\t\tconst colors = [];\n\t\t\tconst colorsHash = {};\n\t\t\tconst uvs = [];\n\t\t\tconst uvsHash = {};\n\n\t\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\t\tconst face = this.faces[ i ];\n\n\t\t\t\tconst hasMaterial = true;\n\t\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\t\tlet faceType = 0;\n\n\t\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\t\tfaces.push( faceType );\n\t\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\t\tfaces.push( face.materialIndex );\n\n\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t\t}\n\n\t\t\tfunction getNormalIndex( normal ) {\n\n\t\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tfunction getColorIndex( color ) {\n\n\t\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\t\tcolors.push( color.getHex() );\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tfunction getUvIndex( uv ) {\n\n\t\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tdata.data = {};\n\n\t\t\tdata.data.vertices = vertices;\n\t\t\tdata.data.normals = normals;\n\t\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\t\tdata.data.faces = faces;\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\t/*\n\t\t\t // Handle primitives\n\n\t\t\t const parameters = this.parameters;\n\n\t\t\t if ( parameters !== undefined ) {\n\n\t\t\t const values = [];\n\n\t\t\t for ( const key in parameters ) {\n\n\t\t\t values.push( parameters[ key ] );\n\n\t\t\t }\n\n\t\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t\t this.constructor.apply( geometry, values );\n\t\t\t return geometry;\n\n\t\t\t }\n\n\t\t\t return new this.constructor().copy( this );\n\t\t\t */\n\n\t\t\treturn new Geometry().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\t// reset\n\n\t\t\tthis.vertices = [];\n\t\t\tthis.colors = [];\n\t\t\tthis.faces = [];\n\t\t\tthis.faceVertexUvs = [[]];\n\t\t\tthis.morphTargets = [];\n\t\t\tthis.morphNormals = [];\n\t\t\tthis.skinWeights = [];\n\t\t\tthis.skinIndices = [];\n\t\t\tthis.lineDistances = [];\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null;\n\n\t\t\t// name\n\n\t\t\tthis.name = source.name;\n\n\t\t\t// vertices\n\n\t\t\tconst vertices = source.vertices;\n\n\t\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tconst colors = source.colors;\n\n\t\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tconst faces = source.faces;\n\n\t\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// face vertex uvs\n\n\t\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morph targets\n\n\t\t\tconst morphTargets = source.morphTargets;\n\n\t\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\tconst morphTarget = {};\n\t\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t\t// vertices\n\n\t\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// normals\n\n\t\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t\t// morph normals\n\n\t\t\tconst morphNormals = source.morphNormals;\n\n\t\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\t\tconst morphNormal = {};\n\n\t\t\t\t// vertex normals\n\n\t\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// face normals\n\n\t\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t\t}\n\n\t\t\t// skin weights\n\n\t\t\tconst skinWeights = source.skinWeights;\n\n\t\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// skin indices\n\n\t\t\tconst skinIndices = source.skinIndices;\n\n\t\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// line distances\n\n\t\t\tconst lineDistances = source.lineDistances;\n\n\t\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t\t}\n\n\t\t\t// bounding box\n\n\t\t\tconst boundingBox = source.boundingBox;\n\n\t\t\tif ( boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t\t}\n\n\t\t\t// bounding sphere\n\n\t\t\tconst boundingSphere = source.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\t// update flags\n\n\t\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\tclass BoxGeometry extends Geometry {\n\n\t\tconstructor( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'BoxGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tdepth: depth,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\tdepthSegments: depthSegments\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass CircleBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'CircleBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tsegments: segments,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\tsegments = Math.max( 3, segments );\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// helper variables\n\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst uv = new Vector2();\n\n\t\t\t// center point\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tnormals.push( 0, 0, 1 );\n\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uvs\n\n\t\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t}\n\n\t}\n\n\tclass CircleGeometry extends Geometry {\n\n\t\tconstructor( radius, segments, thetaStart, thetaLength ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'CircleGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tsegments: segments,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass CylinderBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'CylinderBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradiusTop: radiusTop,\n\t\t\t\tradiusBottom: radiusBottom,\n\t\t\t\theight: height,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\topenEnded: openEnded,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\tconst scope = this;\n\n\t\t\tradialSegments = Math.floor( radialSegments );\n\t\t\theightSegments = Math.floor( heightSegments );\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// helper variables\n\n\t\t\tlet index = 0;\n\t\t\tconst indexArray = [];\n\t\t\tconst halfHeight = height / 2;\n\t\t\tlet groupStart = 0;\n\n\t\t\t// generate geometry\n\n\t\t\tgenerateTorso();\n\n\t\t\tif ( openEnded === false ) {\n\n\t\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t\tfunction generateTorso() {\n\n\t\t\t\tconst normal = new Vector3();\n\t\t\t\tconst vertex = new Vector3();\n\n\t\t\t\tlet groupCount = 0;\n\n\t\t\t\t// this will be used to calculate the normal\n\t\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t\t// generate vertices, normals and uvs\n\n\t\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\t\tconst indexRow = [];\n\n\t\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t\t// vertex\n\n\t\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\t// normal\n\n\t\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t\t// uv\n\n\t\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t\t}\n\n\t\t\t\t// generate indices\n\n\t\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t\t// faces\n\n\t\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t\t// update group counter\n\n\t\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t\t// calculate new start value for groups\n\n\t\t\t\tgroupStart += groupCount;\n\n\t\t\t}\n\n\t\t\tfunction generateCap( top ) {\n\n\t\t\t\t// save the index of the first center vertex\n\t\t\t\tconst centerIndexStart = index;\n\n\t\t\t\tconst uv = new Vector2();\n\t\t\t\tconst vertex = new Vector3();\n\n\t\t\t\tlet groupCount = 0;\n\n\t\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t\t// increase index\n\n\t\t\t\t\tindex ++;\n\n\t\t\t\t}\n\n\t\t\t\t// save the index of the last center vertex\n\t\t\t\tconst centerIndexEnd = index;\n\n\t\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t\t// increase index\n\n\t\t\t\t\tindex ++;\n\n\t\t\t\t}\n\n\t\t\t\t// generate indices\n\n\t\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t\t// face top\n\n\t\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// face bottom\n\n\t\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgroupCount += 3;\n\n\t\t\t\t}\n\n\t\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t\t// calculate new start value for groups\n\n\t\t\t\tgroupStart += groupCount;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass CylinderGeometry extends Geometry {\n\n\t\tconstructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'CylinderGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradiusTop: radiusTop,\n\t\t\t\tradiusBottom: radiusBottom,\n\t\t\t\theight: height,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\topenEnded: openEnded,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass ConeGeometry extends CylinderGeometry {\n\n\t\tconstructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\t\t\tthis.type = 'ConeGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\theight: height,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\topenEnded: openEnded,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tclass ConeBufferGeometry extends CylinderBufferGeometry {\n\n\t\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\t\tthis.type = 'ConeBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\theight: height,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\topenEnded: openEnded,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tclass PolyhedronBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( vertices, indices, radius = 1, detail = 0 ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'PolyhedronBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tvertices: vertices,\n\t\t\t\tindices: indices,\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\t// default buffer data\n\n\t\t\tconst vertexBuffer = [];\n\t\t\tconst uvBuffer = [];\n\n\t\t\t// the subdivision creates the vertex buffer data\n\n\t\t\tsubdivide( detail );\n\n\t\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\t\tapplyRadius( radius );\n\n\t\t\t// finally, create the uv data\n\n\t\t\tgenerateUVs();\n\n\t\t\t// build non-indexed geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\t\tif ( detail === 0 ) {\n\n\t\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t\t} else {\n\n\t\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t\t}\n\n\t\t\t// helper functions\n\n\t\t\tfunction subdivide( detail ) {\n\n\t\t\t\tconst a = new Vector3();\n\t\t\t\tconst b = new Vector3();\n\t\t\t\tconst c = new Vector3();\n\n\t\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\t// get the vertices of the face\n\n\t\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t\t// perform subdivision\n\n\t\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\t\tconst cols = detail + 1;\n\n\t\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\t\tconst v = [];\n\n\t\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\t\tv[ i ] = [];\n\n\t\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\t\tconst rows = cols - i;\n\n\t\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// construct all of the faces\n\n\t\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction applyRadius( radius ) {\n\n\t\t\t\tconst vertex = new Vector3();\n\n\t\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction generateUVs() {\n\n\t\t\t\tconst vertex = new Vector3();\n\n\t\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t\t}\n\n\t\t\t\tcorrectUVs();\n\n\t\t\t\tcorrectSeam();\n\n\t\t\t}\n\n\t\t\tfunction correctSeam() {\n\n\t\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t\t// uv data of a single face\n\n\t\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction pushVertex( vertex ) {\n\n\t\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\t\tconst stride = index * 3;\n\n\t\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t\t}\n\n\t\t\tfunction correctUVs() {\n\n\t\t\t\tconst a = new Vector3();\n\t\t\t\tconst b = new Vector3();\n\t\t\t\tconst c = new Vector3();\n\n\t\t\t\tconst centroid = new Vector3();\n\n\t\t\t\tconst uvA = new Vector2();\n\t\t\t\tconst uvB = new Vector2();\n\t\t\t\tconst uvC = new Vector2();\n\n\t\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\t\tfunction azimuth( vector ) {\n\n\t\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t\t}\n\n\n\t\t\t// Angle above the XZ plane.\n\n\t\t\tfunction inclination( vector ) {\n\n\t\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass DodecahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\t\tconstructor( radius = 1, detail = 0 ) {\n\n\t\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\t\tconst r = 1 / t;\n\n\t\t\tconst vertices = [\n\n\t\t\t\t// (±1, ±1, ±1)\n\t\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t\t- t, 0, r, t, 0, r\n\t\t\t];\n\n\t\t\tconst indices = [\n\t\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t\t];\n\n\t\t\tsuper( vertices, indices, radius, detail );\n\n\t\t\tthis.type = 'DodecahedronBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tclass DodecahedronGeometry extends Geometry {\n\n\t\tconstructor( radius, detail ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'DodecahedronGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tconst _v0$2 = new Vector3();\n\tconst _v1$5 = new Vector3();\n\tconst _normal$1 = new Vector3();\n\tconst _triangle = new Triangle();\n\n\tclass EdgesGeometry extends BufferGeometry {\n\n\t\tconstructor( geometry, thresholdAngle ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'EdgesGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tthresholdAngle: thresholdAngle\n\t\t\t};\n\n\t\t\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tgeometry = new BufferGeometry().fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( MathUtils.DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal$1 );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal$1.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal$1.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0$2.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$5.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0$2.x, _v0$2.y, _v0$2.z );\n\t\t\t\t\tvertices.push( _v1$5.x, _v1$5.y, _v1$5.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Port from https://github.com/mapbox/earcut (v2.2.2)\n\t */\n\n\tconst Earcut = {\n\n\t\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\t\tdim = dim || 2;\n\n\t\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\t\tconst triangles = [];\n\n\t\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\t\tif ( data.length > 80 * dim ) {\n\n\t\t\t\tminX = maxX = data[ 0 ];\n\t\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\t\tx = data[ i ];\n\t\t\t\t\ty = data[ i + 1 ];\n\t\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t\t}\n\n\t\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t\t}\n\n\t\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\t\treturn triangles;\n\n\t\t}\n\n\t};\n\n\t// create a circular doubly linked list from polygon points in the specified winding order\n\tfunction linkedList( data, start, end, dim, clockwise ) {\n\n\t\tlet i, last;\n\n\t\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t\t} else {\n\n\t\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t\t}\n\n\t\tif ( last && equals( last, last.next ) ) {\n\n\t\t\tremoveNode( last );\n\t\t\tlast = last.next;\n\n\t\t}\n\n\t\treturn last;\n\n\t}\n\n\t// eliminate colinear or duplicate points\n\tfunction filterPoints( start, end ) {\n\n\t\tif ( ! start ) return start;\n\t\tif ( ! end ) end = start;\n\n\t\tlet p = start,\n\t\t\tagain;\n\t\tdo {\n\n\t\t\tagain = false;\n\n\t\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\t\tremoveNode( p );\n\t\t\t\tp = end = p.prev;\n\t\t\t\tif ( p === p.next ) break;\n\t\t\t\tagain = true;\n\n\t\t\t} else {\n\n\t\t\t\tp = p.next;\n\n\t\t\t}\n\n\t\t} while ( again || p !== end );\n\n\t\treturn end;\n\n\t}\n\n\t// main ear slicing loop which triangulates a polygon (given as a linked list)\n\tfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\t\tif ( ! ear ) return;\n\n\t\t// interlink polygon nodes in z-order\n\t\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\t\tlet stop = ear,\n\t\t\tprev, next;\n\n\t\t// iterate through ears, slicing them one by one\n\t\twhile ( ear.prev !== ear.next ) {\n\n\t\t\tprev = ear.prev;\n\t\t\tnext = ear.next;\n\n\t\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t\t// cut off the triangle\n\t\t\t\ttriangles.push( prev.i / dim );\n\t\t\t\ttriangles.push( ear.i / dim );\n\t\t\t\ttriangles.push( next.i / dim );\n\n\t\t\t\tremoveNode( ear );\n\n\t\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\t\tear = next.next;\n\t\t\t\tstop = next.next;\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tear = next;\n\n\t\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\t\tif ( ear === stop ) {\n\n\t\t\t\t// try filtering points and slicing again\n\t\t\t\tif ( ! pass ) {\n\n\t\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// check whether a polygon node forms a valid ear with adjacent nodes\n\tfunction isEar( ear ) {\n\n\t\tconst a = ear.prev,\n\t\t\tb = ear,\n\t\t\tc = ear.next;\n\n\t\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t\t// now make sure we don't have other points inside the potential ear\n\t\tlet p = ear.next.next;\n\n\t\twhile ( p !== ear.prev ) {\n\n\t\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\t\tp = p.next;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\t\tconst a = ear.prev,\n\t\t\tb = ear,\n\t\t\tc = ear.next;\n\n\t\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t\t// triangle bbox; min & max are calculated like this for speed\n\t\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t\t// z-order range for the current triangle bbox;\n\t\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\t\tlet p = ear.prevZ,\n\t\t\tn = ear.nextZ;\n\n\t\t// look for points inside the triangle in both directions\n\t\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\t\tp = p.prevZ;\n\n\t\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\t\tn = n.nextZ;\n\n\t\t}\n\n\t\t// look for remaining points in decreasing z-order\n\t\twhile ( p && p.z >= minZ ) {\n\n\t\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\t\tp = p.prevZ;\n\n\t\t}\n\n\t\t// look for remaining points in increasing z-order\n\t\twhile ( n && n.z <= maxZ ) {\n\n\t\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\t\tn = n.nextZ;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t// go through all polygon nodes and cure small local self-intersections\n\tfunction cureLocalIntersections( start, triangles, dim ) {\n\n\t\tlet p = start;\n\t\tdo {\n\n\t\t\tconst a = p.prev,\n\t\t\t\tb = p.next.next;\n\n\t\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\t\ttriangles.push( a.i / dim );\n\t\t\t\ttriangles.push( p.i / dim );\n\t\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t\t// remove two nodes involved\n\t\t\t\tremoveNode( p );\n\t\t\t\tremoveNode( p.next );\n\n\t\t\t\tp = start = b;\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t} while ( p !== start );\n\n\t\treturn filterPoints( p );\n\n\t}\n\n\t// try splitting polygon into two and triangulate them independently\n\tfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t\t// look for a valid diagonal that divides the polygon into two\n\t\tlet a = start;\n\t\tdo {\n\n\t\t\tlet b = a.next.next;\n\t\t\twhile ( b !== a.prev ) {\n\n\t\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t\t// filter colinear points around the cuts\n\t\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t\t// run earcut on each half\n\t\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tb = b.next;\n\n\t\t\t}\n\n\t\t\ta = a.next;\n\n\t\t} while ( a !== start );\n\n\t}\n\n\t// link every hole into the outer loop, producing a single-ring polygon without holes\n\tfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\t\tconst queue = [];\n\t\tlet i, len, start, end, list;\n\n\t\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\t\tstart = holeIndices[ i ] * dim;\n\t\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\t\tlist = linkedList( data, start, end, dim, false );\n\t\t\tif ( list === list.next ) list.steiner = true;\n\t\t\tqueue.push( getLeftmost( list ) );\n\n\t\t}\n\n\t\tqueue.sort( compareX );\n\n\t\t// process holes from left to right\n\t\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\t\teliminateHole( queue[ i ], outerNode );\n\t\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t\t}\n\n\t\treturn outerNode;\n\n\t}\n\n\tfunction compareX( a, b ) {\n\n\t\treturn a.x - b.x;\n\n\t}\n\n\t// find a bridge between vertices that connects hole with an outer ring and and link it\n\tfunction eliminateHole( hole, outerNode ) {\n\n\t\touterNode = findHoleBridge( hole, outerNode );\n\t\tif ( outerNode ) {\n\n\t\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t\t// filter collinear points around the cuts\n\t\t\tfilterPoints( outerNode, outerNode.next );\n\t\t\tfilterPoints( b, b.next );\n\n\t\t}\n\n\t}\n\n\t// David Eberly's algorithm for finding a bridge between hole and outer polygon\n\tfunction findHoleBridge( hole, outerNode ) {\n\n\t\tlet p = outerNode;\n\t\tconst hx = hole.x;\n\t\tconst hy = hole.y;\n\t\tlet qx = - Infinity, m;\n\n\t\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t\t// segment's endpoint with lesser x will be potential connection point\n\t\tdo {\n\n\t\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\t\tqx = x;\n\t\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t} while ( p !== outerNode );\n\n\t\tif ( ! m ) return null;\n\n\t\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t\t// if there are no points found, we have a valid connection;\n\t\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\t\tconst stop = m,\n\t\t\tmx = m.x,\n\t\t\tmy = m.y;\n\t\tlet tanMin = Infinity, tan;\n\n\t\tp = m;\n\n\t\tdo {\n\n\t\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\t\tm = p;\n\t\t\t\t\ttanMin = tan;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t} while ( p !== stop );\n\n\t\treturn m;\n\n\t}\n\n\t// whether sector in vertex m contains sector in vertex p in the same coordinates\n\tfunction sectorContainsSector( m, p ) {\n\n\t\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n\t}\n\n\t// interlink polygon nodes in z-order\n\tfunction indexCurve( start, minX, minY, invSize ) {\n\n\t\tlet p = start;\n\t\tdo {\n\n\t\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\t\tp.prevZ = p.prev;\n\t\t\tp.nextZ = p.next;\n\t\t\tp = p.next;\n\n\t\t} while ( p !== start );\n\n\t\tp.prevZ.nextZ = null;\n\t\tp.prevZ = null;\n\n\t\tsortLinked( p );\n\n\t}\n\n\t// Simon Tatham's linked list merge sort algorithm\n\t// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\n\tfunction sortLinked( list ) {\n\n\t\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\t\tinSize = 1;\n\n\t\tdo {\n\n\t\t\tp = list;\n\t\t\tlist = null;\n\t\t\ttail = null;\n\t\t\tnumMerges = 0;\n\n\t\t\twhile ( p ) {\n\n\t\t\t\tnumMerges ++;\n\t\t\t\tq = p;\n\t\t\t\tpSize = 0;\n\t\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\t\tpSize ++;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tif ( ! q ) break;\n\n\t\t\t\t}\n\n\t\t\t\tqSize = inSize;\n\n\t\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\t\te = p;\n\t\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\t\tpSize --;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\te = q;\n\t\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\t\tqSize --;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\t\telse list = e;\n\n\t\t\t\t\te.prevZ = tail;\n\t\t\t\t\ttail = e;\n\n\t\t\t\t}\n\n\t\t\t\tp = q;\n\n\t\t\t}\n\n\t\t\ttail.nextZ = null;\n\t\t\tinSize *= 2;\n\n\t\t} while ( numMerges > 1 );\n\n\t\treturn list;\n\n\t}\n\n\t// z-order of a point given coords and inverse of the longer side of data bbox\n\tfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t\t// coords are transformed into non-negative 15-bit integer range\n\t\tx = 32767 * ( x - minX ) * invSize;\n\t\ty = 32767 * ( y - minY ) * invSize;\n\n\t\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\t\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\t\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\t\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\t\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\t\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\t\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\t\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\t\treturn x | ( y << 1 );\n\n\t}\n\n\t// find the leftmost node of a polygon ring\n\tfunction getLeftmost( start ) {\n\n\t\tlet p = start,\n\t\t\tleftmost = start;\n\t\tdo {\n\n\t\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\t\tp = p.next;\n\n\t\t} while ( p !== start );\n\n\t\treturn leftmost;\n\n\t}\n\n\t// check if a point lies within a convex triangle\n\tfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\t\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n\t}\n\n\t// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n\tfunction isValidDiagonal( a, b ) {\n\n\t\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n\t}\n\n\t// signed area of a triangle\n\tfunction area( p, q, r ) {\n\n\t\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n\t}\n\n\t// check if two points are equal\n\tfunction equals( p1, p2 ) {\n\n\t\treturn p1.x === p2.x && p1.y === p2.y;\n\n\t}\n\n\t// check if two segments intersect\n\tfunction intersects( p1, q1, p2, q2 ) {\n\n\t\tconst o1 = sign( area( p1, q1, p2 ) );\n\t\tconst o2 = sign( area( p1, q1, q2 ) );\n\t\tconst o3 = sign( area( p2, q2, p1 ) );\n\t\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\t\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\t\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\t\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\t\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\t\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\t\treturn false;\n\n\t}\n\n\t// for collinear points p, q, r, check if point q lies on segment pr\n\tfunction onSegment( p, q, r ) {\n\n\t\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n\t}\n\n\tfunction sign( num ) {\n\n\t\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n\t}\n\n\t// check if a polygon diagonal intersects any polygon segments\n\tfunction intersectsPolygon( a, b ) {\n\n\t\tlet p = a;\n\t\tdo {\n\n\t\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\t\tp = p.next;\n\n\t\t} while ( p !== a );\n\n\t\treturn false;\n\n\t}\n\n\t// check if a polygon diagonal is locally inside the polygon\n\tfunction locallyInside( a, b ) {\n\n\t\treturn area( a.prev, a, a.next ) < 0 ?\n\t\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n\t}\n\n\t// check if the middle point of a polygon diagonal is inside the polygon\n\tfunction middleInside( a, b ) {\n\n\t\tlet p = a,\n\t\t\tinside = false;\n\t\tconst px = ( a.x + b.x ) / 2,\n\t\t\tpy = ( a.y + b.y ) / 2;\n\t\tdo {\n\n\t\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\t\tinside = ! inside;\n\t\t\tp = p.next;\n\n\t\t} while ( p !== a );\n\n\t\treturn inside;\n\n\t}\n\n\t// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n\t// if one belongs to the outer ring and another to a hole, it merges it into a single ring\n\tfunction splitPolygon( a, b ) {\n\n\t\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\t\tan = a.next,\n\t\t\tbp = b.prev;\n\n\t\ta.next = b;\n\t\tb.prev = a;\n\n\t\ta2.next = an;\n\t\tan.prev = a2;\n\n\t\tb2.next = a2;\n\t\ta2.prev = b2;\n\n\t\tbp.next = b2;\n\t\tb2.prev = bp;\n\n\t\treturn b2;\n\n\t}\n\n\t// create a node and optionally link it with previous one (in a circular doubly linked list)\n\tfunction insertNode( i, x, y, last ) {\n\n\t\tconst p = new Node( i, x, y );\n\n\t\tif ( ! last ) {\n\n\t\t\tp.prev = p;\n\t\t\tp.next = p;\n\n\t\t} else {\n\n\t\t\tp.next = last.next;\n\t\t\tp.prev = last;\n\t\t\tlast.next.prev = p;\n\t\t\tlast.next = p;\n\n\t\t}\n\n\t\treturn p;\n\n\t}\n\n\tfunction removeNode( p ) {\n\n\t\tp.next.prev = p.prev;\n\t\tp.prev.next = p.next;\n\n\t\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\t\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n\t}\n\n\tfunction Node( i, x, y ) {\n\n\t\t// vertex index in coordinates array\n\t\tthis.i = i;\n\n\t\t// vertex coordinates\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\t// previous and next vertex nodes in a polygon ring\n\t\tthis.prev = null;\n\t\tthis.next = null;\n\n\t\t// z-order curve value\n\t\tthis.z = null;\n\n\t\t// previous and next nodes in z-order\n\t\tthis.prevZ = null;\n\t\tthis.nextZ = null;\n\n\t\t// indicates whether this is a steiner point\n\t\tthis.steiner = false;\n\n\t}\n\n\tfunction signedArea( data, start, end, dim ) {\n\n\t\tlet sum = 0;\n\t\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\t\tj = i;\n\n\t\t}\n\n\t\treturn sum;\n\n\t}\n\n\tconst ShapeUtils = {\n\n\t\t// calculate area of the contour polygon\n\n\t\tarea: function ( contour ) {\n\n\t\t\tconst n = contour.length;\n\t\t\tlet a = 0.0;\n\n\t\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t\t}\n\n\t\t\treturn a * 0.5;\n\n\t\t},\n\n\t\tisClockWise: function ( pts ) {\n\n\t\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t\t},\n\n\t\ttriangulateShape: function ( contour, holes ) {\n\n\t\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\t\tconst holeIndices = []; // array of hole indices\n\t\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\t\tremoveDupEndPts( contour );\n\t\t\taddContour( vertices, contour );\n\n\t\t\t//\n\n\t\t\tlet holeIndex = contour.length;\n\n\t\t\tholes.forEach( removeDupEndPts );\n\n\t\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\t\tholeIndices.push( holeIndex );\n\t\t\t\tholeIndex += holes[ i ].length;\n\t\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t\t}\n\n\t\t\treturn faces;\n\n\t\t}\n\n\t};\n\n\tfunction removeDupEndPts( points ) {\n\n\t\tconst l = points.length;\n\n\t\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.pop();\n\n\t\t}\n\n\t}\n\n\tfunction addContour( vertices, contour ) {\n\n\t\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\t\tvertices.push( contour[ i ].x );\n\t\t\tvertices.push( contour[ i ].y );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates extruded geometry from a path shape.\n\t *\n\t * parameters = {\n\t *\n\t *  curveSegments: <int>, // number of points on the curves\n\t *  steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n\t *  depth: <float>, // Depth to extrude the shape\n\t *\n\t *  bevelEnabled: <bool>, // turn on bevel\n\t *  bevelThickness: <float>, // how deep into the original shape bevel goes\n\t *  bevelSize: <float>, // how far from shape outline (including bevelOffset) is bevel\n\t *  bevelOffset: <float>, // how far from shape outline does bevel start\n\t *  bevelSegments: <int>, // number of bevel layers\n\t *\n\t *  extrudePath: <THREE.Curve> // curve to extrude shape along\n\t *\n\t *  UVGenerator: <Object> // object that provides UV generator functions\n\t *\n\t * }\n\t */\n\n\tclass ExtrudeBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( shapes, options ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'ExtrudeBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tshapes: shapes,\n\t\t\t\toptions: options\n\t\t\t};\n\n\t\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\t\tconst scope = this;\n\n\t\t\tconst verticesArray = [];\n\t\t\tconst uvArray = [];\n\n\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = shapes[ i ];\n\t\t\t\taddShape( shape );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\t\tthis.computeVertexNormals();\n\n\t\t\t// functions\n\n\t\t\tfunction addShape( shape ) {\n\n\t\t\t\tconst placeholder = [];\n\n\t\t\t\t// options\n\n\t\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\t\tlet depth = options.depth !== undefined ? options.depth : 100;\n\n\t\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t\t// deprecated options\n\n\t\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\t\tdepth = options.amount;\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\t\tif ( extrudePath ) {\n\n\t\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\t\textrudeByPath = true;\n\t\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\t\tbinormal = new Vector3();\n\t\t\t\t\tnormal = new Vector3();\n\t\t\t\t\tposition2 = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\t\tbevelSegments = 0;\n\t\t\t\t\tbevelThickness = 0;\n\t\t\t\t\tbevelSize = 0;\n\t\t\t\t\tbevelOffset = 0;\n\n\t\t\t\t}\n\n\t\t\t\t// Variables initialization\n\n\t\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\t\tlet vertices = shapePoints.shape;\n\t\t\t\tconst holes = shapePoints.holes;\n\n\t\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\t\tif ( reverse ) {\n\n\t\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t\t/* Vertices */\n\n\t\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t\t}\n\n\n\t\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t\t}\n\n\t\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t\t// Find directions for point movement\n\n\n\t\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t\t//   shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t\t//\n\t\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t\t//  adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t\t// check for collinear edges\n\t\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t\t// not collinear\n\n\t\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t\t//  but prevent crazy spikes\n\t\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t\t}\n\n\n\t\t\t\tconst contourMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t//  (j)---(i)---(k)\n\t\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tconst holesMovements = [];\n\t\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\toneHoleMovements = [];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t\t//  (j)---(i)---(k)\n\t\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t\t}\n\n\n\t\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t\t// contract shape\n\n\t\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// expand holes\n\n\t\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t\t// Back facing vertices\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Add stepped vertices...\n\t\t\t\t// Including front facing vertices\n\n\t\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\t// Add bevel segments planes\n\n\t\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t\t// contract shape\n\n\t\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// expand holes\n\n\t\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t/* Faces */\n\n\t\t\t\t// Top and bottom faces\n\n\t\t\t\tbuildLidFaces();\n\n\t\t\t\t// Sides faces\n\n\t\t\t\tbuildSideFaces();\n\n\n\t\t\t\t/////  Internal functions\n\n\t\t\t\tfunction buildLidFaces() {\n\n\t\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t\t// Top faces\n\n\t\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Top faces\n\n\t\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t\t}\n\n\t\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\t\tfunction buildSideFaces() {\n\n\t\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\t\tlet layeroffset = 0;\n\t\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t\t//, true\n\t\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t\t}\n\n\t\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\t\tlet i = contour.length;\n\n\t\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\t\tconst j = i;\n\t\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\t\tplaceholder.push( x );\n\t\t\t\t\tplaceholder.push( y );\n\t\t\t\t\tplaceholder.push( z );\n\n\t\t\t\t}\n\n\n\t\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\t\taddVertex( a );\n\t\t\t\t\taddVertex( b );\n\t\t\t\t\taddVertex( c );\n\n\t\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\t\taddVertex( a );\n\t\t\t\t\taddVertex( b );\n\t\t\t\t\taddVertex( d );\n\n\t\t\t\t\taddVertex( b );\n\t\t\t\t\taddVertex( c );\n\t\t\t\t\taddVertex( d );\n\n\n\t\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\t}\n\n\t\t\t\tfunction addVertex( index ) {\n\n\t\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t\t}\n\n\n\t\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttoJSON() {\n\n\t\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\t\tconst shapes = this.parameters.shapes;\n\t\t\tconst options = this.parameters.options;\n\n\t\t\treturn toJSON( shapes, options, data );\n\n\t\t}\n\n\t}\n\n\tconst WorldUVGenerator = {\n\n\t\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\t\tconst a_x = vertices[ indexA * 3 ];\n\t\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\t\tconst b_x = vertices[ indexB * 3 ];\n\t\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\t\tconst c_x = vertices[ indexC * 3 ];\n\t\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, a_y ),\n\t\t\t\tnew Vector2( b_x, b_y ),\n\t\t\t\tnew Vector2( c_x, c_y )\n\t\t\t];\n\n\t\t},\n\n\t\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\t\tconst a_x = vertices[ indexA * 3 ];\n\t\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\t\tconst b_x = vertices[ indexB * 3 ];\n\t\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\t\tconst c_x = vertices[ indexC * 3 ];\n\t\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\t\tconst d_x = vertices[ indexD * 3 ];\n\t\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\t\treturn [\n\t\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t\t];\n\n\t\t\t} else {\n\n\t\t\t\treturn [\n\t\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t\t];\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tfunction toJSON( shapes, options, data ) {\n\n\t\tdata.shapes = [];\n\n\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdata.shapes.push( shapes.uuid );\n\n\t\t}\n\n\t\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * Creates extruded geometry from a path shape.\n\t *\n\t * parameters = {\n\t *\n\t *  curveSegments: <int>, // number of points on the curves\n\t *  steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n\t *  depth: <float>, // Depth to extrude the shape\n\t *\n\t *  bevelEnabled: <bool>, // turn on bevel\n\t *  bevelThickness: <float>, // how deep into the original shape bevel goes\n\t *  bevelSize: <float>, // how far from shape outline (including bevelOffset) is bevel\n\t *  bevelOffset: <float>, // how far from shape outline does bevel start\n\t *  bevelSegments: <int>, // number of bevel layers\n\t *\n\t *  extrudePath: <THREE.Curve> // curve to extrude shape along\n\t *\n\t *  UVGenerator: <Object> // object that provides UV generator functions\n\t *\n\t * }\n\t */\n\n\tclass ExtrudeGeometry extends Geometry {\n\n\t\tconstructor( shapes, options ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'ExtrudeGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tshapes: shapes,\n\t\t\t\toptions: options\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t\ttoJSON() {\n\n\t\t\tconst data = super.toJSON();\n\n\t\t\tconst shapes = this.parameters.shapes;\n\t\t\tconst options = this.parameters.options;\n\n\t\t\treturn toJSON$1( shapes, options, data );\n\n\t\t}\n\n\t}\n\n\tfunction toJSON$1( shapes, options, data ) {\n\n\t\tdata.shapes = [];\n\n\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdata.shapes.push( shapes.uuid );\n\n\t\t}\n\n\t\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tclass IcosahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\t\tconstructor( radius = 1, detail = 0 ) {\n\n\t\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\t\tconst vertices = [\n\t\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t\t];\n\n\t\t\tconst indices = [\n\t\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t\t];\n\n\t\t\tsuper( vertices, indices, radius, detail );\n\n\t\t\tthis.type = 'IcosahedronBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tclass IcosahedronGeometry extends Geometry {\n\n\t\tconstructor( radius, detail ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'IcosahedronGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass LatheBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'LatheBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tpoints: points,\n\t\t\t\tsegments: segments,\n\t\t\t\tphiStart: phiStart,\n\t\t\t\tphiLength: phiLength\n\t\t\t};\n\n\t\t\tsegments = Math.floor( segments );\n\n\t\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\t\tphiLength = MathUtils.clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// helper variables\n\n\t\t\tconst inverseSegments = 1.0 / segments;\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst uv = new Vector2();\n\n\t\t\t// generate vertices and uvs\n\n\t\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\t\tconst sin = Math.sin( phi );\n\t\t\t\tconst cos = Math.cos( phi );\n\n\t\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuv.x = i / segments;\n\t\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\t\tconst a = base;\n\t\t\t\t\tconst b = base + points.length;\n\t\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\t\tconst d = base + 1;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t\t// generate normals\n\n\t\t\tthis.computeVertexNormals();\n\n\t\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\t\tconst normals = this.attributes.normal.array;\n\t\t\t\tconst n1 = new Vector3();\n\t\t\t\tconst n2 = new Vector3();\n\t\t\t\tconst n = new Vector3();\n\n\t\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\t\tconst base = segments * points.length * 3;\n\n\t\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t\t// average normals\n\n\t\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t\t// assign the new values to both normals\n\n\t\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass LatheGeometry extends Geometry {\n\n\t\tconstructor( points, segments, phiStart, phiLength ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'LatheGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tpoints: points,\n\t\t\t\tsegments: segments,\n\t\t\t\tphiStart: phiStart,\n\t\t\t\tphiLength: phiLength\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass OctahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\t\tconstructor( radius = 1, detail = 0 ) {\n\n\t\t\tconst vertices = [\n\t\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t\t];\n\n\t\t\tconst indices = [\n\t\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t\t1, 3, 4,\t1, 4, 2\n\t\t\t];\n\n\t\t\tsuper( vertices, indices, radius, detail );\n\n\t\t\tthis.type = 'OctahedronBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tclass OctahedronGeometry extends Geometry {\n\n\t\tconstructor( radius, detail ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'OctahedronGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Parametric Surfaces Geometry\n\t * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n\t */\n\n\tfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'ParametricBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tconst EPS = 0.00001;\n\n\t\tconst normal = new Vector3();\n\n\t\tconst p0 = new Vector3(), p1 = new Vector3();\n\t\tconst pu = new Vector3(), pv = new Vector3();\n\n\t\tif ( func.length < 3 ) {\n\n\t\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t\t}\n\n\t\t// generate vertices, normals and uvs\n\n\t\tconst sliceCount = slices + 1;\n\n\t\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\t\tconst v = i / stacks;\n\n\t\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\t\tconst u = j / slices;\n\n\t\t\t\t// vertex\n\n\t\t\t\tfunc( u, v, p0 );\n\t\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t\t// normal\n\n\t\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, v );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\t\tconst a = i * sliceCount + j;\n\t\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t\t// faces one and two\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n\t/**\n\t * Parametric Surfaces Geometry\n\t * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n\t */\n\n\tfunction ParametricGeometry( func, slices, stacks ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'ParametricGeometry';\n\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tParametricGeometry.prototype = Object.create( Geometry.prototype );\n\tParametricGeometry.prototype.constructor = ParametricGeometry;\n\n\tclass PlaneGeometry extends Geometry {\n\n\t\tconstructor( width, height, widthSegments, heightSegments ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'PlaneGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass PolyhedronGeometry extends Geometry {\n\n\t\tconstructor( vertices, indices, radius, detail ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'PolyhedronGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tvertices: vertices,\n\t\t\t\tindices: indices,\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass RingBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'RingBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tthetaSegments: thetaSegments,\n\t\t\t\tphiSegments: phiSegments,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// some helper variables\n\n\t\t\tlet radius = innerRadius;\n\t\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst uv = new Vector2();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t\t// increase the radius for next row of vertices\n\n\t\t\t\tradius += radiusStep;\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\t\tconst a = segment;\n\t\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t}\n\n\t}\n\n\tclass RingGeometry extends Geometry {\n\n\t\tconstructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'RingGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tthetaSegments: thetaSegments,\n\t\t\t\tphiSegments: phiSegments,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass ShapeBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( shapes, curveSegments = 12 ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'ShapeBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tshapes: shapes,\n\t\t\t\tcurveSegments: curveSegments\n\t\t\t};\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// helper variables\n\n\t\t\tlet groupStart = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\t// allow single and array values for \"shapes\" parameter\n\n\t\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\t\taddShape( shapes );\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\t\tgroupStart += groupCount;\n\t\t\t\t\tgroupCount = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t\t// helper functions\n\n\t\t\tfunction addShape( shape ) {\n\n\t\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\t\tlet shapeVertices = points.shape;\n\t\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t\t// check direction of vertices\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t\t}\n\n\t\t\t\t// vertices, normals, uvs\n\n\t\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t\t}\n\n\t\t\t\t// incides\n\n\t\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\tgroupCount += 3;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttoJSON() {\n\n\t\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\t\tconst shapes = this.parameters.shapes;\n\n\t\t\treturn toJSON$2( shapes, data );\n\n\t\t}\n\n\t}\n\n\tfunction toJSON$2( shapes, data ) {\n\n\t\tdata.shapes = [];\n\n\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdata.shapes.push( shapes.uuid );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclass ShapeGeometry extends Geometry {\n\n\t\tconstructor( shapes, curveSegments ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'ShapeGeometry';\n\n\t\t\tif ( typeof curveSegments === 'object' ) {\n\n\t\t\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\t\t\tcurveSegments = curveSegments.curveSegments;\n\n\t\t\t}\n\n\t\t\tthis.parameters = {\n\t\t\t\tshapes: shapes,\n\t\t\t\tcurveSegments: curveSegments\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t\ttoJSON() {\n\n\t\t\tconst data = Geometry.prototype.toJSON.call( this );\n\n\t\t\tconst shapes = this.parameters.shapes;\n\n\t\t\treturn toJSON$3( shapes, data );\n\n\t\t}\n\n\t}\n\n\tfunction toJSON$3( shapes, data ) {\n\n\t\tdata.shapes = [];\n\n\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdata.shapes.push( shapes.uuid );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclass SphereBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'SphereBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\tphiStart: phiStart,\n\t\t\t\tphiLength: phiLength,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\t\tlet index = 0;\n\t\t\tconst grid = [];\n\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst normal = new Vector3();\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\t\tconst verticesRow = [];\n\n\t\t\t\tconst v = iy / heightSegments;\n\n\t\t\t\t// special case for the poles\n\n\t\t\t\tlet uOffset = 0;\n\n\t\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\tgrid.push( verticesRow );\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t}\n\n\t}\n\n\tclass SphereGeometry extends Geometry {\n\n\t\tconstructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'SphereGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\tphiStart: phiStart,\n\t\t\t\tphiLength: phiLength,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass TetrahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\t\tconstructor( radius = 1, detail = 0 ) {\n\n\t\t\tconst vertices = [\n\t\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t\t];\n\n\t\t\tconst indices = [\n\t\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t\t];\n\n\t\t\tsuper( vertices, indices, radius, detail );\n\n\t\t\tthis.type = 'TetrahedronBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tclass TetrahedronGeometry extends Geometry {\n\n\t\tconstructor( radius, detail ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'TetrahedronGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Text = 3D Text\n\t *\n\t * parameters = {\n\t *  font: <THREE.Font>, // font\n\t *\n\t *  size: <float>, // size of the text\n\t *  height: <float>, // thickness to extrude text\n\t *  curveSegments: <int>, // number of points on the curves\n\t *\n\t *  bevelEnabled: <bool>, // turn on bevel\n\t *  bevelThickness: <float>, // how deep into text bevel goes\n\t *  bevelSize: <float>, // how far from text outline (including bevelOffset) is bevel\n\t *  bevelOffset: <float> // how far from text outline does bevel start\n\t * }\n\t */\n\n\tclass TextBufferGeometry extends ExtrudeBufferGeometry {\n\n\t\tconstructor( text, parameters = {} ) {\n\n\t\t\tconst font = parameters.font;\n\n\t\t\tif ( ! ( font && font.isFont ) ) {\n\n\t\t\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\t\t\treturn new BufferGeometry();\n\n\t\t\t}\n\n\t\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t\t// translate parameters to ExtrudeGeometry API\n\n\t\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t\t\t// defaults\n\n\t\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\t\tsuper( shapes, parameters );\n\n\t\t\tthis.type = 'TextBufferGeometry';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Text = 3D Text\n\t *\n\t * parameters = {\n\t *  font: <THREE.Font>, // font\n\t *\n\t *  size: <float>, // size of the text\n\t *  height: <float>, // thickness to extrude text\n\t *  curveSegments: <int>, // number of points on the curves\n\t *\n\t *  bevelEnabled: <bool>, // turn on bevel\n\t *  bevelThickness: <float>, // how deep into text bevel goes\n\t *  bevelSize: <float>, // how far from text outline (including bevelOffset) is bevel\n\t *  bevelOffset: <float> // how far from text outline does bevel start\n\t * }\n\t */\n\n\tclass TextGeometry extends Geometry {\n\n\t\tconstructor( text, parameters ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'TextGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\ttext: text,\n\t\t\t\tparameters: parameters\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass TorusBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'TorusBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\ttube: tube,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tarc: arc\n\t\t\t};\n\n\t\t\tradialSegments = Math.floor( radialSegments );\n\t\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// helper variables\n\n\t\t\tconst center = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst normal = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t\t// indices\n\n\t\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t}\n\n\t}\n\n\tclass TorusGeometry extends Geometry {\n\n\t\tconstructor( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'TorusGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\ttube: tube,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tarc: arc\n\t\t\t};\n\n\t\t\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass TorusKnotBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'TorusKnotBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\ttube: tube,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\tp: p,\n\t\t\t\tq: q\n\t\t\t};\n\n\t\t\ttubularSegments = Math.floor( tubularSegments );\n\t\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t\t// buffers\n\n\t\t\tconst indices = [];\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\n\t\t\t// helper variables\n\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst normal = new Vector3();\n\n\t\t\tconst P1 = new Vector3();\n\t\t\tconst P2 = new Vector3();\n\n\t\t\tconst B = new Vector3();\n\t\t\tconst T = new Vector3();\n\t\t\tconst N = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t\t// calculate orthonormal basis\n\n\t\t\t\tT.subVectors( P2, P1 );\n\t\t\t\tN.addVectors( P2, P1 );\n\t\t\t\tB.crossVectors( T, N );\n\t\t\t\tN.crossVectors( B, T );\n\n\t\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\t\tB.normalize();\n\t\t\t\tN.normalize();\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\t// indices\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t\t// this function calculates the current position on the torus curve\n\n\t\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\t\tconst cu = Math.cos( u );\n\t\t\t\tconst su = Math.sin( u );\n\t\t\t\tconst quOverP = q / p * u;\n\t\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass TorusKnotGeometry extends Geometry {\n\n\t\tconstructor( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'TorusKnotGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\ttube: tube,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\tp: p,\n\t\t\t\tq: q\n\t\t\t};\n\n\t\t\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\t\t\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass TubeBufferGeometry extends BufferGeometry {\n\n\t\tconstructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'TubeBufferGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tpath: path,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tradius: radius,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\tclosed: closed\n\t\t\t};\n\n\t\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t\t// expose internals\n\n\t\t\tthis.tangents = frames.tangents;\n\t\t\tthis.normals = frames.normals;\n\t\t\tthis.binormals = frames.binormals;\n\n\t\t\t// helper variables\n\n\t\t\tconst vertex = new Vector3();\n\t\t\tconst normal = new Vector3();\n\t\t\tconst uv = new Vector2();\n\t\t\tlet P = new Vector3();\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst normals = [];\n\t\t\tconst uvs = [];\n\t\t\tconst indices = [];\n\n\t\t\t// create buffer data\n\n\t\t\tgenerateBufferData();\n\n\t\t\t// build geometry\n\n\t\t\tthis.setIndex( indices );\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t\t// functions\n\n\t\t\tfunction generateBufferData() {\n\n\t\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\t\tgenerateSegment( i );\n\n\t\t\t\t}\n\n\t\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t\t// at the regular position on the given path\n\t\t\t\t//\n\t\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t\t// uvs are generated in a separate function.\n\t\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\t\tgenerateUVs();\n\n\t\t\t\t// finally create faces\n\n\t\t\t\tgenerateIndices();\n\n\t\t\t}\n\n\t\t\tfunction generateSegment( i ) {\n\n\t\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\t\tconst N = frames.normals[ i ];\n\t\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t\t// generate normals and vertices for the current segment\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction generateIndices() {\n\n\t\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t\t// faces\n\n\t\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction generateUVs() {\n\n\t\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t\ttoJSON() {\n\n\t\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\t\tdata.path = this.parameters.path.toJSON();\n\n\t\t\treturn data;\n\n\t\t}\n\n\t}\n\n\tclass TubeGeometry extends Geometry {\n\n\t\tconstructor( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'TubeGeometry';\n\n\t\t\tthis.parameters = {\n\t\t\t\tpath: path,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tradius: radius,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\tclosed: closed\n\t\t\t};\n\n\t\t\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\t\t\tconst bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t\t\t// expose internals\n\n\t\t\tthis.tangents = bufferGeometry.tangents;\n\t\t\tthis.normals = bufferGeometry.normals;\n\t\t\tthis.binormals = bufferGeometry.binormals;\n\n\t\t\t// create geometry\n\n\t\t\tthis.fromBufferGeometry( bufferGeometry );\n\t\t\tthis.mergeVertices();\n\n\t\t}\n\n\t}\n\n\tclass WireframeGeometry extends BufferGeometry {\n\n\t\tconstructor( geometry ) {\n\n\t\t\tsuper();\n\t\t\tthis.type = 'WireframeGeometry';\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\n\t\t\t// helper variables\n\n\t\t\tconst edge = [ 0, 0 ], edges = {};\n\t\t\tconst keys = [ 'a', 'b', 'c' ];\n\n\t\t\t// different logic for Geometry and BufferGeometry\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tconst faces = geometry.faces;\n\n\t\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tconst edge1 = face[ keys[ j ] ];\n\t\t\t\t\t\tconst edge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// generate vertices\n\n\t\t\t\tfor ( const key in edges ) {\n\n\t\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\t\tlet vertex = geometry.vertices[ e.index1 ];\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\tconst vertex = new Vector3();\n\n\t\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\t\tconst indices = geometry.index;\n\t\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\t\tconst start = group.start;\n\t\t\t\t\t\tconst count = group.count;\n\n\t\t\t\t\t\tfor ( let i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\tconst edge1 = indices.getX( i + j );\n\t\t\t\t\t\t\t\tconst edge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// generate vertices\n\n\t\t\t\t\tfor ( const key in edges ) {\n\n\t\t\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tvar Geometries = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tBoxGeometry: BoxGeometry,\n\t\tBoxBufferGeometry: BoxBufferGeometry,\n\t\tCircleGeometry: CircleGeometry,\n\t\tCircleBufferGeometry: CircleBufferGeometry,\n\t\tConeGeometry: ConeGeometry,\n\t\tConeBufferGeometry: ConeBufferGeometry,\n\t\tCylinderGeometry: CylinderGeometry,\n\t\tCylinderBufferGeometry: CylinderBufferGeometry,\n\t\tDodecahedronGeometry: DodecahedronGeometry,\n\t\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\t\tEdgesGeometry: EdgesGeometry,\n\t\tExtrudeGeometry: ExtrudeGeometry,\n\t\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\t\tIcosahedronGeometry: IcosahedronGeometry,\n\t\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\t\tLatheGeometry: LatheGeometry,\n\t\tLatheBufferGeometry: LatheBufferGeometry,\n\t\tOctahedronGeometry: OctahedronGeometry,\n\t\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\t\tParametricGeometry: ParametricGeometry,\n\t\tParametricBufferGeometry: ParametricBufferGeometry,\n\t\tPlaneGeometry: PlaneGeometry,\n\t\tPlaneBufferGeometry: PlaneBufferGeometry,\n\t\tPolyhedronGeometry: PolyhedronGeometry,\n\t\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\t\tRingGeometry: RingGeometry,\n\t\tRingBufferGeometry: RingBufferGeometry,\n\t\tShapeGeometry: ShapeGeometry,\n\t\tShapeBufferGeometry: ShapeBufferGeometry,\n\t\tSphereGeometry: SphereGeometry,\n\t\tSphereBufferGeometry: SphereBufferGeometry,\n\t\tTetrahedronGeometry: TetrahedronGeometry,\n\t\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\t\tTextGeometry: TextGeometry,\n\t\tTextBufferGeometry: TextBufferGeometry,\n\t\tTorusGeometry: TorusGeometry,\n\t\tTorusBufferGeometry: TorusBufferGeometry,\n\t\tTorusKnotGeometry: TorusKnotGeometry,\n\t\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\t\tTubeGeometry: TubeGeometry,\n\t\tTubeBufferGeometry: TubeBufferGeometry,\n\t\tWireframeGeometry: WireframeGeometry\n\t});\n\n\t/**\n\t * parameters = {\n\t *  color: <THREE.Color>\n\t * }\n\t */\n\n\tfunction ShadowMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tShadowMaterial.prototype = Object.create( Material.prototype );\n\tShadowMaterial.prototype.constructor = ShadowMaterial;\n\n\tShadowMaterial.prototype.isShadowMaterial = true;\n\n\tShadowMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\treturn this;\n\n\t};\n\n\tfunction RawShaderMaterial( parameters ) {\n\n\t\tShaderMaterial.call( this, parameters );\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n\tRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\n\tRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\n\tRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  roughness: <float>,\n\t *  metalness: <float>,\n\t *  opacity: <float>,\n\t *\n\t *  map: new THREE.Texture( <Image> ),\n\t *\n\t *  lightMap: new THREE.Texture( <Image> ),\n\t *  lightMapIntensity: <float>\n\t *\n\t *  aoMap: new THREE.Texture( <Image> ),\n\t *  aoMapIntensity: <float>\n\t *\n\t *  emissive: <hex>,\n\t *  emissiveIntensity: <float>\n\t *  emissiveMap: new THREE.Texture( <Image> ),\n\t *\n\t *  bumpMap: new THREE.Texture( <Image> ),\n\t *  bumpScale: <float>,\n\t *\n\t *  normalMap: new THREE.Texture( <Image> ),\n\t *  normalMapType: THREE.TangentSpaceNormalMap,\n\t *  normalScale: <Vector2>,\n\t *\n\t *  displacementMap: new THREE.Texture( <Image> ),\n\t *  displacementScale: <float>,\n\t *  displacementBias: <float>,\n\t *\n\t *  roughnessMap: new THREE.Texture( <Image> ),\n\t *\n\t *  metalnessMap: new THREE.Texture( <Image> ),\n\t *\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t *  envMapIntensity: <float>\n\t *\n\t *  refractionRatio: <float>,\n\t *\n\t *  wireframe: <boolean>,\n\t *  wireframeLinewidth: <float>,\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>,\n\t *  morphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshStandardMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.vertexTangents = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshStandardMaterial.prototype = Object.create( Material.prototype );\n\tMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\n\tMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n\tMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.vertexTangents = source.vertexTangents;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * parameters = {\n\t *  clearcoat: <float>,\n\t *  clearcoatMap: new THREE.Texture( <Image> ),\n\t *  clearcoatRoughness: <float>,\n\t *  clearcoatRoughnessMap: new THREE.Texture( <Image> ),\n\t *  clearcoatNormalScale: <Vector2>,\n\t *  clearcoatNormalMap: new THREE.Texture( <Image> ),\n\t *\n\t *  reflectivity: <float>,\n\t *  ior: <float>,\n\t *\n\t *  sheen: <Color>,\n\t *\n\t *  transmission: <float>,\n\t *  transmissionMap: new THREE.Texture( <Image> )\n\t * }\n\t */\n\n\tfunction MeshPhysicalMaterial( parameters ) {\n\n\t\tMeshStandardMaterial.call( this );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.clearcoat = 0.0;\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\t\tObject.defineProperty( this, 'ior', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity );\n\n\t\t\t},\n\t\t\tset: function ( ior ) {\n\n\t\t\t\tthis.reflectivity = MathUtils.clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.sheen = null; // null will disable sheen bsdf\n\n\t\tthis.transmission = 0.0;\n\t\tthis.transmissionMap = null;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\n\tMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\n\tMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\n\tMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\t\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.reflectivity = source.reflectivity;\n\n\t\tif ( source.sheen ) {\n\n\t\t\tthis.sheen = ( this.sheen || new Color() ).copy( source.sheen );\n\n\t\t} else {\n\n\t\t\tthis.sheen = null;\n\n\t\t}\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  specular: <hex>,\n\t *  shininess: <float>,\n\t *  opacity: <float>,\n\t *\n\t *  map: new THREE.Texture( <Image> ),\n\t *\n\t *  lightMap: new THREE.Texture( <Image> ),\n\t *  lightMapIntensity: <float>\n\t *\n\t *  aoMap: new THREE.Texture( <Image> ),\n\t *  aoMapIntensity: <float>\n\t *\n\t *  emissive: <hex>,\n\t *  emissiveIntensity: <float>\n\t *  emissiveMap: new THREE.Texture( <Image> ),\n\t *\n\t *  bumpMap: new THREE.Texture( <Image> ),\n\t *  bumpScale: <float>,\n\t *\n\t *  normalMap: new THREE.Texture( <Image> ),\n\t *  normalMapType: THREE.TangentSpaceNormalMap,\n\t *  normalScale: <Vector2>,\n\t *\n\t *  displacementMap: new THREE.Texture( <Image> ),\n\t *  displacementScale: <float>,\n\t *  displacementBias: <float>,\n\t *\n\t *  specularMap: new THREE.Texture( <Image> ),\n\t *\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t *  combine: THREE.MultiplyOperation,\n\t *  reflectivity: <float>,\n\t *  refractionRatio: <float>,\n\t *\n\t *  wireframe: <boolean>,\n\t *  wireframeLinewidth: <float>,\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>,\n\t *  morphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshPhongMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshPhongMaterial.prototype = Object.create( Material.prototype );\n\tMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\n\tMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\n\tMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *\n\t *  map: new THREE.Texture( <Image> ),\n\t *  gradientMap: new THREE.Texture( <Image> ),\n\t *\n\t *  lightMap: new THREE.Texture( <Image> ),\n\t *  lightMapIntensity: <float>\n\t *\n\t *  aoMap: new THREE.Texture( <Image> ),\n\t *  aoMapIntensity: <float>\n\t *\n\t *  emissive: <hex>,\n\t *  emissiveIntensity: <float>\n\t *  emissiveMap: new THREE.Texture( <Image> ),\n\t *\n\t *  bumpMap: new THREE.Texture( <Image> ),\n\t *  bumpScale: <float>,\n\t *\n\t *  normalMap: new THREE.Texture( <Image> ),\n\t *  normalMapType: THREE.TangentSpaceNormalMap,\n\t *  normalScale: <Vector2>,\n\t *\n\t *  displacementMap: new THREE.Texture( <Image> ),\n\t *  displacementScale: <float>,\n\t *  displacementBias: <float>,\n\t *\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  wireframe: <boolean>,\n\t *  wireframeLinewidth: <float>,\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>,\n\t *  morphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshToonMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshToonMaterial.prototype = Object.create( Material.prototype );\n\tMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\n\tMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\n\tMeshToonMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * parameters = {\n\t *  opacity: <float>,\n\t *\n\t *  bumpMap: new THREE.Texture( <Image> ),\n\t *  bumpScale: <float>,\n\t *\n\t *  normalMap: new THREE.Texture( <Image> ),\n\t *  normalMapType: THREE.TangentSpaceNormalMap,\n\t *  normalScale: <Vector2>,\n\t *\n\t *  displacementMap: new THREE.Texture( <Image> ),\n\t *  displacementScale: <float>,\n\t *  displacementBias: <float>,\n\t *\n\t *  wireframe: <boolean>,\n\t *  wireframeLinewidth: <float>\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>,\n\t *  morphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshNormalMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshNormalMaterial.prototype = Object.create( Material.prototype );\n\tMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\n\tMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\n\tMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  opacity: <float>,\n\t *\n\t *  map: new THREE.Texture( <Image> ),\n\t *\n\t *  lightMap: new THREE.Texture( <Image> ),\n\t *  lightMapIntensity: <float>\n\t *\n\t *  aoMap: new THREE.Texture( <Image> ),\n\t *  aoMapIntensity: <float>\n\t *\n\t *  emissive: <hex>,\n\t *  emissiveIntensity: <float>\n\t *  emissiveMap: new THREE.Texture( <Image> ),\n\t *\n\t *  specularMap: new THREE.Texture( <Image> ),\n\t *\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t *  combine: THREE.Multiply,\n\t *  reflectivity: <float>,\n\t *  refractionRatio: <float>,\n\t *\n\t *  wireframe: <boolean>,\n\t *  wireframeLinewidth: <float>,\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>,\n\t *  morphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshLambertMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshLambertMaterial.prototype = Object.create( Material.prototype );\n\tMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\n\tMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\n\tMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  opacity: <float>,\n\t *\n\t *  matcap: new THREE.Texture( <Image> ),\n\t *\n\t *  map: new THREE.Texture( <Image> ),\n\t *\n\t *  bumpMap: new THREE.Texture( <Image> ),\n\t *  bumpScale: <float>,\n\t *\n\t *  normalMap: new THREE.Texture( <Image> ),\n\t *  normalMapType: THREE.TangentSpaceNormalMap,\n\t *  normalScale: <Vector2>,\n\t *\n\t *  displacementMap: new THREE.Texture( <Image> ),\n\t *  displacementScale: <float>,\n\t *  displacementBias: <float>,\n\t *\n\t *  alphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *  skinning: <bool>,\n\t *  morphTargets: <bool>,\n\t *  morphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshMatcapMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshMatcapMaterial.prototype = Object.create( Material.prototype );\n\tMeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial;\n\n\tMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\n\tMeshMatcapMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  opacity: <float>,\n\t *\n\t *  linewidth: <float>,\n\t *\n\t *  scale: <float>,\n\t *  dashSize: <float>,\n\t *  gapSize: <float>\n\t * }\n\t */\n\n\tfunction LineDashedMaterial( parameters ) {\n\n\t\tLineBasicMaterial.call( this );\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\n\tLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\n\tLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\n\tLineDashedMaterial.prototype.copy = function ( source ) {\n\n\t\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t};\n\n\tvar Materials = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tShadowMaterial: ShadowMaterial,\n\t\tSpriteMaterial: SpriteMaterial,\n\t\tRawShaderMaterial: RawShaderMaterial,\n\t\tShaderMaterial: ShaderMaterial,\n\t\tPointsMaterial: PointsMaterial,\n\t\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\t\tMeshStandardMaterial: MeshStandardMaterial,\n\t\tMeshPhongMaterial: MeshPhongMaterial,\n\t\tMeshToonMaterial: MeshToonMaterial,\n\t\tMeshNormalMaterial: MeshNormalMaterial,\n\t\tMeshLambertMaterial: MeshLambertMaterial,\n\t\tMeshDepthMaterial: MeshDepthMaterial,\n\t\tMeshDistanceMaterial: MeshDistanceMaterial,\n\t\tMeshBasicMaterial: MeshBasicMaterial,\n\t\tMeshMatcapMaterial: MeshMatcapMaterial,\n\t\tLineDashedMaterial: LineDashedMaterial,\n\t\tLineBasicMaterial: LineBasicMaterial,\n\t\tMaterial: Material\n\t});\n\n\tconst AnimationUtils = {\n\n\t\t// same as Array.prototype.slice, but also works on typed arrays\n\t\tarraySlice: function ( array, from, to ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t\t}\n\n\t\t\treturn array.slice( from, to );\n\n\t\t},\n\n\t\t// converts an array to a specific type\n\t\tconvertArray: function ( array, type, forceClone ) {\n\n\t\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\t\treturn new type( array ); // create typed array\n\n\t\t\t}\n\n\t\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t\t},\n\n\t\tisTypedArray: function ( object ) {\n\n\t\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t\t! ( object instanceof DataView );\n\n\t\t},\n\n\t\t// returns an array by which times and values can be sorted\n\t\tgetKeyframeOrder: function ( times ) {\n\n\t\t\tfunction compareTime( i, j ) {\n\n\t\t\t\treturn times[ i ] - times[ j ];\n\n\t\t\t}\n\n\t\t\tconst n = times.length;\n\t\t\tconst result = new Array( n );\n\t\t\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\t\tresult.sort( compareTime );\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\t\tsortedArray: function ( values, stride, order ) {\n\n\t\t\tconst nValues = values.length;\n\t\t\tconst result = new values.constructor( nValues );\n\n\t\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// function for parsing AOS keyframe formats\n\t\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\t\tlet i = 1, key = jsonKeys[ 0 ];\n\n\t\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t}\n\n\t\t\tif ( key === undefined ) return; // no data\n\n\t\t\tlet value = key[ valuePropertyName ];\n\t\t\tif ( value === undefined ) return; // no data\n\n\t\t\tif ( Array.isArray( value ) ) {\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t\t// ...assume THREE.Math-ish\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise push as-is\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t}\n\n\t\t},\n\n\t\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\t\tconst clip = sourceClip.clone();\n\n\t\t\tclip.name = name;\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\t\tconst track = clip.tracks[ i ];\n\t\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\t\ttracks.push( track );\n\n\t\t\t}\n\n\t\t\tclip.tracks = tracks;\n\n\t\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\t\tlet minStartTime = Infinity;\n\n\t\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// shift all tracks such that clip begins at t=0\n\n\t\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t\t}\n\n\t\t\tclip.resetDuration();\n\n\t\t\treturn clip;\n\n\t\t},\n\n\t\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\t\tif ( fps <= 0 ) fps = 30;\n\n\t\t\tconst numTracks = referenceClip.tracks.length;\n\t\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t\t// Make each track's values relative to the values at the reference frame\n\t\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t\t// Skip this track if it's non-numeric\n\t\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t\t} );\n\n\t\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\t\tlet referenceOffset = 0;\n\t\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t\t}\n\n\t\t\t\tlet targetOffset = 0;\n\t\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t\t}\n\n\t\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\t\tlet referenceValue;\n\n\t\t\t\t// Find the value to subtract out of the track\n\t\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Interpolate to the reference value\n\t\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t\t}\n\n\t\t\t\t// Conjugate the quaternion\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t\t}\n\n\t\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\t\tvalueStart\n\t\t\t\t\t\t);\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\t\treturn targetClip;\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Abstract base class of interpolants over parametric samples.\n\t *\n\t * The parameter domain is one dimensional, typically the time or a path\n\t * along a curve defined by the data.\n\t *\n\t * The sample values can have any dimensionality and derived classes may\n\t * apply special interpretations to the data.\n\t *\n\t * This class provides the interval seek in a Template Method, deferring\n\t * the actual interpolation to derived classes.\n\t *\n\t * Time complexity is O(1) for linear access crossing at most two points\n\t * and O(log N) for random access, where N is the number of positions.\n\t *\n\t * References:\n\t *\n\t * \t\thttp://www.oodesign.com/template-method-pattern.html\n\t *\n\t */\n\n\tfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t}\n\n\tObject.assign( Interpolant.prototype, {\n\n\t\tevaluate: function ( t ) {\n\n\t\t\tconst pp = this.parameterPositions;\n\t\t\tlet i1 = this._cachedIndex,\n\t\t\t\tt1 = pp[ i1 ],\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\tvalidate_interval: {\n\n\t\t\t\tseek: {\n\n\t\t\t\t\tlet right;\n\n\t\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t\t//- slower code:\n\t\t\t\t\t\t//-\n\t\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//- slower code:\n\t\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t\t} // linear scan\n\n\t\t\t\t\t// binary search\n\n\t\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t\t// check boundary cases, again\n\n\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t\t}\n\n\t\t\t\t} // seek\n\n\t\t\t\tthis._cachedIndex = i1;\n\n\t\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t\t} // validate_interval\n\n\t\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t\t},\n\n\t\tsettings: null, // optional, subclass-specific settings structure\n\t\t// Note: The indirection allows central control of many interpolants.\n\n\t\t// --- Protected interface\n\n\t\tDefaultSettings_: {},\n\n\t\tgetSettings_: function () {\n\n\t\t\treturn this.settings || this.DefaultSettings_;\n\n\t\t},\n\n\t\tcopySampleValue_: function ( index ) {\n\n\t\t\t// copies a sample value to the result buffer\n\n\t\t\tconst result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\t\t\t\toffset = index * stride;\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// Template methods for derived classes:\n\n\t\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\t\tthrow new Error( 'call to abstract method' );\n\t\t\t// implementations shall return this.resultBuffer\n\n\t\t},\n\n\t\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t\t// empty\n\n\t\t}\n\n\t} );\n\n\t// DECLARE ALIAS AFTER assign prototype\n\tObject.assign( Interpolant.prototype, {\n\n\t\t//( 0, t, t0 ), returns this.resultBuffer\n\t\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t\t//( N-1, tN-1, t ), returns this.resultBuffer\n\t\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n\t} );\n\n\t/**\n\t * Fast and simple cubic spline interpolant.\n\t *\n\t * It was derived from a Hermitian construction setting the first derivative\n\t * at each sample position to the linear slope between neighboring positions\n\t * over their parameter interval.\n\t */\n\n\tfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t}\n\n\tCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: CubicInterpolant,\n\n\t\tDefaultSettings_: {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t},\n\n\t\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\t\tconst pp = this.parameterPositions;\n\t\t\tlet iPrev = i1 - 2,\n\t\t\t\tiNext = i1 + 1,\n\n\t\t\t\ttPrev = pp[ iPrev ],\n\t\t\t\ttNext = pp[ iNext ];\n\n\t\t\tif ( tPrev === undefined ) {\n\n\t\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\t\tiPrev = i1;\n\t\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\t\tiPrev = i1;\n\t\t\t\t\t\ttPrev = t1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( tNext === undefined ) {\n\n\t\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\t\tiNext = i1;\n\t\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\t\tiNext = 1;\n\t\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\t\ttNext = t0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\t\tstride = this.valueSize;\n\n\t\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\t\tthis._offsetPrev = iPrev * stride;\n\t\t\tthis._offsetNext = iNext * stride;\n\n\t\t},\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tconst result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\t\tpp = p * p,\n\t\t\t\tppp = pp * p;\n\n\t\t\t// evaluate polynomials\n\n\t\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t\t// combine data linearly\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] =\n\t\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\tfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: LinearInterpolant,\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tconst result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\toffset1 = i1 * stride,\n\t\t\t\toffset0 = offset1 - stride,\n\n\t\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\t\tweight0 = 1 - weight1;\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] =\n\t\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Interpolant that evaluates to the sample value at the position preceeding\n\t * the parameter.\n\t */\n\n\tfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: DiscreteInterpolant,\n\n\t\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t}\n\n\t} );\n\n\tfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\t\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Static methods\n\n\tObject.assign( KeyframeTrack, {\n\n\t\t// Serialization (in static context, because of constructor invocation\n\t\t// and automatic invocation of .toJSON):\n\n\t\ttoJSON: function ( track ) {\n\n\t\t\tconst trackType = track.constructor;\n\n\t\t\tlet json;\n\n\t\t\t// derived classes can define a static toJSON method\n\t\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\t\tjson = trackType.toJSON( track );\n\n\t\t\t} else {\n\n\t\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\t\tjson = {\n\n\t\t\t\t\t'name': track.name,\n\t\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t\t};\n\n\t\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\t\treturn json;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( KeyframeTrack.prototype, {\n\n\t\tconstructor: KeyframeTrack,\n\n\t\tTimeBufferType: Float32Array,\n\n\t\tValueBufferType: Float32Array,\n\n\t\tDefaultInterpolation: InterpolateLinear,\n\n\t\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tsetInterpolation: function ( interpolation ) {\n\n\t\t\tlet factoryMethod;\n\n\t\t\tswitch ( interpolation ) {\n\n\t\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase InterpolateLinear:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase InterpolateSmooth:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( factoryMethod === undefined ) {\n\n\t\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tthis.createInterpolant = factoryMethod;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetInterpolation: function () {\n\n\t\t\tswitch ( this.createInterpolant ) {\n\n\t\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\t\treturn InterpolateLinear;\n\n\t\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\t\treturn InterpolateSmooth;\n\n\t\t\t}\n\n\t\t},\n\n\t\tgetValueSize: function () {\n\n\t\t\treturn this.values.length / this.times.length;\n\n\t\t},\n\n\t\t// move all keyframes either forwards or backwards in time\n\t\tshift: function ( timeOffset ) {\n\n\t\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\t\tconst times = this.times;\n\n\t\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\t\tscale: function ( timeScale ) {\n\n\t\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\t\tconst times = this.times;\n\n\t\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\t\ttrim: function ( startTime, endTime ) {\n\n\t\t\tconst times = this.times,\n\t\t\t\tnKeys = times.length;\n\n\t\t\tlet from = 0,\n\t\t\t\tto = nKeys - 1;\n\n\t\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t\t++ from;\n\n\t\t\t}\n\n\t\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t\t-- to;\n\n\t\t\t}\n\n\t\t\t++ to; // inclusive -> exclusive bound\n\n\t\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\t\tif ( from >= to ) {\n\n\t\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\t\tfrom = to - 1;\n\n\t\t\t\t}\n\n\t\t\t\tconst stride = this.getValueSize();\n\t\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\t\tvalidate: function () {\n\n\t\t\tlet valid = true;\n\n\t\t\tconst valueSize = this.getValueSize();\n\t\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\t\tvalid = false;\n\n\t\t\t}\n\n\t\t\tconst times = this.times,\n\t\t\t\tvalues = this.values,\n\n\t\t\t\tnKeys = times.length;\n\n\t\t\tif ( nKeys === 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\t\tvalid = false;\n\n\t\t\t}\n\n\t\t\tlet prevTime = null;\n\n\t\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\t\tconst currTime = times[ i ];\n\n\t\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tprevTime = currTime;\n\n\t\t\t}\n\n\t\t\tif ( values !== undefined ) {\n\n\t\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn valid;\n\n\t\t},\n\n\t\t// removes equivalent sequential keys as common in morph target sequences\n\t\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\t\toptimize: function () {\n\n\t\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\t\tstride = this.getValueSize(),\n\n\t\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\t\tlastIndex = times.length - 1;\n\n\t\t\tlet writeIndex = 1;\n\n\t\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\t\tlet keep = false;\n\n\t\t\t\tconst time = times[ i ];\n\t\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tkeep = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// in-place compaction\n\n\t\t\t\tif ( keep ) {\n\n\t\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t++ writeIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// flush last keyframe (compaction looks ahead)\n\n\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t\tif ( writeIndex !== times.length ) {\n\n\t\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t\t} else {\n\n\t\t\t\tthis.times = times;\n\t\t\t\tthis.values = values;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\t\tconst TypedKeyframeTrack = this.constructor;\n\t\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\t\treturn track;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * A Track of Boolean keyframe values.\n\t */\n\n\tfunction BooleanKeyframeTrack( name, times, values ) {\n\n\t\tKeyframeTrack.call( this, name, times, values );\n\n\t}\n\n\tBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: BooleanKeyframeTrack,\n\n\t\tValueTypeName: 'bool',\n\t\tValueBufferType: Array,\n\n\t\tDefaultInterpolation: InterpolateDiscrete,\n\n\t\tInterpolantFactoryMethodLinear: undefined,\n\t\tInterpolantFactoryMethodSmooth: undefined\n\n\t\t// Note: Actually this track could have a optimized / compressed\n\t\t// representation of a single value and a custom interpolant that\n\t\t// computes \"firstValue ^ isOdd( index )\".\n\n\t} );\n\n\t/**\n\t * A Track of keyframe values that represent color.\n\t */\n\n\tfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: ColorKeyframeTrack,\n\n\t\tValueTypeName: 'color'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\t\t// Note: Very basic implementation and nothing special yet.\n\t\t// However, this is the place for color space parameterization.\n\n\t} );\n\n\t/**\n\t * A Track of numeric keyframe values.\n\t */\n\n\tfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: NumberKeyframeTrack,\n\n\t\tValueTypeName: 'number'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\t} );\n\n\t/**\n\t * Spherical linear unit quaternion interpolant.\n\t */\n\n\tfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: QuaternionLinearInterpolant,\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tconst result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\t\tlet offset = i1 * stride;\n\n\t\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * A Track of quaternion keyframe values.\n\t */\n\n\tfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: QuaternionKeyframeTrack,\n\n\t\tValueTypeName: 'quaternion',\n\n\t\t// ValueBufferType is inherited\n\n\t\tDefaultInterpolation: InterpolateLinear,\n\n\t\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n\t} );\n\n\t/**\n\t * A Track that interpolates Strings\n\t */\n\n\tfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: StringKeyframeTrack,\n\n\t\tValueTypeName: 'string',\n\t\tValueBufferType: Array,\n\n\t\tDefaultInterpolation: InterpolateDiscrete,\n\n\t\tInterpolantFactoryMethodLinear: undefined,\n\n\t\tInterpolantFactoryMethodSmooth: undefined\n\n\t} );\n\n\t/**\n\t * A Track of vectored keyframe values.\n\t */\n\n\tfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: VectorKeyframeTrack,\n\n\t\tValueTypeName: 'vector'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\t} );\n\n\tfunction AnimationClip( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\tfunction getTrackTypeForValueTypeName( typeName ) {\n\n\t\tswitch ( typeName.toLowerCase() ) {\n\n\t\t\tcase 'scalar':\n\t\t\tcase 'double':\n\t\t\tcase 'float':\n\t\t\tcase 'number':\n\t\t\tcase 'integer':\n\n\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\tcase 'vector':\n\t\t\tcase 'vector2':\n\t\t\tcase 'vector3':\n\t\t\tcase 'vector4':\n\n\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\tcase 'color':\n\n\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\tcase 'quaternion':\n\n\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\tcase 'bool':\n\t\t\tcase 'boolean':\n\n\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\tcase 'string':\n\n\t\t\t\treturn StringKeyframeTrack;\n\n\t\t}\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n\t}\n\n\tfunction parseKeyframeTrack( json ) {\n\n\t\tif ( json.type === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t\t}\n\n\t\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\t\tif ( json.times === undefined ) {\n\n\t\t\tconst times = [], values = [];\n\n\t\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\t\tjson.times = times;\n\t\t\tjson.values = values;\n\n\t\t}\n\n\t\t// derived classes can define a static parse method\n\t\tif ( trackType.parse !== undefined ) {\n\n\t\t\treturn trackType.parse( json );\n\n\t\t} else {\n\n\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t\t}\n\n\t}\n\n\tObject.assign( AnimationClip, {\n\n\t\tparse: function ( json ) {\n\n\t\t\tconst tracks = [],\n\t\t\t\tjsonTracks = json.tracks,\n\t\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t\t}\n\n\t\t\tconst clip = new AnimationClip( json.name, json.duration, tracks, json.blendMode );\n\t\t\tclip.uuid = json.uuid;\n\n\t\t\treturn clip;\n\n\t\t},\n\n\t\ttoJSON: function ( clip ) {\n\n\t\t\tconst tracks = [],\n\t\t\t\tclipTracks = clip.tracks;\n\n\t\t\tconst json = {\n\n\t\t\t\t'name': clip.name,\n\t\t\t\t'duration': clip.duration,\n\t\t\t\t'tracks': tracks,\n\t\t\t\t'uuid': clip.uuid,\n\t\t\t\t'blendMode': clip.blendMode\n\n\t\t\t};\n\n\t\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn json;\n\n\t\t},\n\n\t\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\t\tlet times = [];\n\t\t\t\tlet values = [];\n\n\t\t\t\ttimes.push(\n\t\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\t\ti,\n\t\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\t\tconst order = AnimationUtils.getKeyframeOrder( times );\n\t\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t\t// last frame as well for perfect loop.\n\t\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\ttracks.push(\n\t\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\t\ttimes, values\n\t\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t\t},\n\n\t\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\t\tlet clipArray = objectOrClipArray;\n\n\t\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\t\tconst o = objectOrClipArray;\n\t\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\t\treturn clipArray[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\t\tconst animationToMorphTargets = {};\n\n\t\t\t// tested with https://regex101.com/ on trick sequences\n\t\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t\t// sort morph target names into animation groups based\n\t\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst clips = [];\n\n\t\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t\t}\n\n\t\t\treturn clips;\n\n\t\t},\n\n\t\t// parse the animation.hierarchy format\n\t\tparseAnimation: function ( animation, bones ) {\n\n\t\t\tif ( ! animation ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t\t// only return track if there are actually keys.\n\t\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tconst tracks = [];\n\n\t\t\tconst clipName = animation.name || 'default';\n\t\t\tconst fps = animation.fps || 30;\n\t\t\tconst blendMode = animation.blendMode;\n\n\t\t\t// automatic length determination in AnimationClip.\n\t\t\tlet duration = animation.length || - 1;\n\n\t\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t\t// skip empty tracks\n\t\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t\t// process morph targets\n\t\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\t\tlet k;\n\n\t\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t\t// the morphTarget is named.\n\t\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\t\tconst times = [];\n\t\t\t\t\t\tconst values = [];\n\n\t\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( tracks.length === 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tconst clip = new AnimationClip( clipName, duration, tracks, blendMode );\n\n\t\t\treturn clip;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( AnimationClip.prototype, {\n\n\t\tresetDuration: function () {\n\n\t\t\tconst tracks = this.tracks;\n\t\t\tlet duration = 0;\n\n\t\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\t\tconst track = this.tracks[ i ];\n\n\t\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t\t}\n\n\t\t\tthis.duration = duration;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttrim: function () {\n\n\t\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tvalidate: function () {\n\n\t\t\tlet valid = true;\n\n\t\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t\t}\n\n\t\t\treturn valid;\n\n\t\t},\n\n\t\toptimize: function () {\n\n\t\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\tthis.tracks[ i ].optimize();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( this.name, this.duration, tracks, this.blendMode );\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\treturn AnimationClip.toJSON( this );\n\n\t\t}\n\n\t} );\n\n\tconst Cache = {\n\n\t\tenabled: false,\n\n\t\tfiles: {},\n\n\t\tadd: function ( key, file ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\t\tthis.files[ key ] = file;\n\n\t\t},\n\n\t\tget: function ( key ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\t\treturn this.files[ key ];\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete this.files[ key ];\n\n\t\t},\n\n\t\tclear: function () {\n\n\t\t\tthis.files = {};\n\n\t\t}\n\n\t};\n\n\tfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n\tconst DefaultLoadingManager = new LoadingManager();\n\n\tfunction Loader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tObject.assign( Loader.prototype, {\n\n\t\tload: function ( /* url, onLoad, onProgress, onError */ ) {},\n\n\t\tloadAsync: function ( url, onProgress ) {\n\n\t\t\tconst scope = this;\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t\t} );\n\n\t\t},\n\n\t\tparse: function ( /* data */ ) {},\n\n\t\tsetCrossOrigin: function ( crossOrigin ) {\n\n\t\t\tthis.crossOrigin = crossOrigin;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetWithCredentials: function ( value ) {\n\n\t\t\tthis.withCredentials = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( path ) {\n\n\t\t\tthis.path = path;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetResourcePath: function ( resourcePath ) {\n\n\t\t\tthis.resourcePath = resourcePath;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetRequestHeader: function ( requestHeader ) {\n\n\t\t\tthis.requestHeader = requestHeader;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tconst loading = {};\n\n\tfunction FileLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tFileLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: FileLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( url === undefined ) url = '';\n\n\t\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\t\turl = this.manager.resolveURL( url );\n\n\t\t\tconst scope = this;\n\n\t\t\tconst cached = Cache.get( url );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t\treturn cached;\n\n\t\t\t}\n\n\t\t\t// Check if request is duplicate\n\n\t\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\t\tloading[ url ].push( {\n\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonProgress: onProgress,\n\t\t\t\t\tonError: onError\n\n\t\t\t\t} );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Check for data: URI\n\t\t\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\t\tlet request;\n\n\t\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\t\tif ( dataUriRegexResult ) {\n\n\t\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\t\tdata = decodeURIComponent( data );\n\n\t\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tlet response;\n\t\t\t\t\tconst responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\t\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t}, 0 );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t}, 0 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Initialise array for duplicate requests\n\n\t\t\t\tloading[ url ] = [];\n\n\t\t\t\tloading[ url ].push( {\n\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonProgress: onProgress,\n\t\t\t\t\tonError: onError\n\n\t\t\t\t} );\n\n\t\t\t\trequest = new XMLHttpRequest();\n\n\t\t\t\trequest.open( 'GET', url, true );\n\n\t\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\t\tconst response = this.response;\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\t\tdelete loading[ url ];\n\n\t\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, false );\n\n\t\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, false );\n\n\t\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\t\tdelete loading[ url ];\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, false );\n\n\t\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\t\tdelete loading[ url ];\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, false );\n\n\t\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\t\tfor ( const header in this.requestHeader ) {\n\n\t\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t\t}\n\n\t\t\t\trequest.send( null );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn request;\n\n\t\t},\n\n\t\tsetResponseType: function ( value ) {\n\n\t\t\tthis.responseType = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetMimeType: function ( value ) {\n\n\t\t\tthis.mimeType = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction AnimationLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tAnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: AnimationLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst loader = new FileLoader( scope.manager );\n\t\t\tloader.setPath( scope.path );\n\t\t\tloader.setRequestHeader( scope.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\tconst animations = [];\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\t\tanimations.push( clip );\n\n\t\t\t}\n\n\t\t\treturn animations;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * Abstract Base class to block based textures loader (dds, pvr, ...)\n\t *\n\t * Sub classes have to implement the parse() method which will be used in load().\n\t */\n\n\tfunction CompressedTextureLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tCompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: CompressedTextureLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst images = [];\n\n\t\t\tconst texture = new CompressedTexture();\n\n\t\t\tconst loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\t\tlet loaded = 0;\n\n\t\t\tfunction loadTexture( i ) {\n\n\t\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\t\timages[ i ] = {\n\t\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t\t};\n\n\t\t\t\t\tloaded += 1;\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\t\ttexture.image = images;\n\t\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}\n\n\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\t\tloadTexture( i );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t} );\n\n\tfunction ImageLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: ImageLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\t\turl = this.manager.resolveURL( url );\n\n\t\t\tconst scope = this;\n\n\t\t\tconst cached = Cache.get( url );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t\treturn cached;\n\n\t\t\t}\n\n\t\t\tconst image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\t\tfunction onImageLoad() {\n\n\t\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\t\tCache.add( url, this );\n\n\t\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}\n\n\t\t\tfunction onImageError( event ) {\n\n\t\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\t\tif ( onError ) onError( event );\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}\n\n\t\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t\t}\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\timage.src = url;\n\n\t\t\treturn image;\n\n\t\t}\n\n\t} );\n\n\tfunction CubeTextureLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tCubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: CubeTextureLoader,\n\n\t\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\t\tconst texture = new CubeTexture();\n\n\t\t\tconst loader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\t\tloader.setPath( this.path );\n\n\t\t\tlet loaded = 0;\n\n\t\t\tfunction loadTexture( i ) {\n\n\t\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\t\tloaded ++;\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, undefined, onError );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n\t *\n\t * Sub classes have to implement the parse() method which will be used in load().\n\t */\n\n\tfunction DataTextureLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tDataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: DataTextureLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst texture = new DataTexture();\n\n\t\t\tconst loader = new FileLoader( this.manager );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\t\tif ( ! texData ) return;\n\n\t\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\t\ttexture.image = texData.image;\n\n\t\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\t\ttexture.format = texData.format;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\t\ttexture.type = texData.type;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t\t}\n\n\t\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t\t}, onProgress, onError );\n\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t} );\n\n\tfunction TextureLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: TextureLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst texture = new Texture();\n\n\t\t\tconst loader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\t\tloader.setPath( this.path );\n\n\t\t\tloader.load( url, function ( image ) {\n\n\t\t\t\ttexture.image = image;\n\n\t\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\t\tconst isJPEG = url.search( /\\.jpe?g($|\\?)/i ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\t\tonLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * Extensible curve object.\n\t *\n\t * Some common of curve methods:\n\t * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n\t * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n\t * .getPoints(), .getSpacedPoints()\n\t * .getLength()\n\t * .updateArcLengths()\n\t *\n\t * This following curves inherit from THREE.Curve:\n\t *\n\t * -- 2D curves --\n\t * THREE.ArcCurve\n\t * THREE.CubicBezierCurve\n\t * THREE.EllipseCurve\n\t * THREE.LineCurve\n\t * THREE.QuadraticBezierCurve\n\t * THREE.SplineCurve\n\t *\n\t * -- 3D curves --\n\t * THREE.CatmullRomCurve3\n\t * THREE.CubicBezierCurve3\n\t * THREE.LineCurve3\n\t * THREE.QuadraticBezierCurve3\n\t *\n\t * A series of curves can be represented as a THREE.CurvePath.\n\t *\n\t **/\n\n\tfunction Curve() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\tObject.assign( Curve.prototype, {\n\n\t\t// Virtual base class method to overwrite and implement in subclasses\n\t\t//\t- t [0 .. 1]\n\n\t\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\t\treturn null;\n\n\t\t},\n\n\t\t// Get point at relative position in curve according to arc length\n\t\t// - u [0 .. 1]\n\n\t\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\t\tconst t = this.getUtoTmapping( u );\n\t\t\treturn this.getPoint( t, optionalTarget );\n\n\t\t},\n\n\t\t// Get sequence of points using getPoint( t )\n\n\t\tgetPoints: function ( divisions = 5 ) {\n\n\t\t\tconst points = [];\n\n\t\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\t// Get sequence of points using getPointAt( u )\n\n\t\tgetSpacedPoints: function ( divisions = 5 ) {\n\n\t\t\tconst points = [];\n\n\t\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\t// Get total curve arc length\n\n\t\tgetLength: function () {\n\n\t\t\tconst lengths = this.getLengths();\n\t\t\treturn lengths[ lengths.length - 1 ];\n\n\t\t},\n\n\t\t// Get list of cumulative segment lengths\n\n\t\tgetLengths: function ( divisions ) {\n\n\t\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\t\tif ( this.cacheArcLengths &&\n\t\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t\t! this.needsUpdate ) {\n\n\t\t\t\treturn this.cacheArcLengths;\n\n\t\t\t}\n\n\t\t\tthis.needsUpdate = false;\n\n\t\t\tconst cache = [];\n\t\t\tlet current, last = this.getPoint( 0 );\n\t\t\tlet sum = 0;\n\n\t\t\tcache.push( 0 );\n\n\t\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\t\tsum += current.distanceTo( last );\n\t\t\t\tcache.push( sum );\n\t\t\t\tlast = current;\n\n\t\t\t}\n\n\t\t\tthis.cacheArcLengths = cache;\n\n\t\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t\t},\n\n\t\tupdateArcLengths: function () {\n\n\t\t\tthis.needsUpdate = true;\n\t\t\tthis.getLengths();\n\n\t\t},\n\n\t\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\t\tgetUtoTmapping: function ( u, distance ) {\n\n\t\t\tconst arcLengths = this.getLengths();\n\n\t\t\tlet i = 0;\n\t\t\tconst il = arcLengths.length;\n\n\t\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\t\tif ( distance ) {\n\n\t\t\t\ttargetArcLength = distance;\n\n\t\t\t} else {\n\n\t\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t\t}\n\n\t\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\t\tlet low = 0, high = il - 1, comparison;\n\n\t\t\twhile ( low <= high ) {\n\n\t\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\t\tlow = i + 1;\n\n\t\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\t\thigh = i - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\thigh = i;\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// DONE\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ti = high;\n\n\t\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\t\treturn i / ( il - 1 );\n\n\t\t\t}\n\n\t\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\t\tconst lengthBefore = arcLengths[ i ];\n\t\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t\t// determine where we are between the 'before' and 'after' points\n\n\t\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t\t// add that fractional amount to t\n\n\t\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\t\treturn t;\n\n\t\t},\n\n\t\t// Returns a unit vector tangent at t\n\t\t// In case any sub curve does not implement its tangent derivation,\n\t\t// 2 points a small delta apart will be used to find its gradient\n\t\t// which seems to give a reasonable approximation\n\n\t\tgetTangent: function ( t, optionalTarget ) {\n\n\t\t\tconst delta = 0.0001;\n\t\t\tlet t1 = t - delta;\n\t\t\tlet t2 = t + delta;\n\n\t\t\t// Capping in case of danger\n\n\t\t\tif ( t1 < 0 ) t1 = 0;\n\t\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\t\tconst pt1 = this.getPoint( t1 );\n\t\t\tconst pt2 = this.getPoint( t2 );\n\n\t\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\t\treturn tangent;\n\n\t\t},\n\n\t\tgetTangentAt: function ( u, optionalTarget ) {\n\n\t\t\tconst t = this.getUtoTmapping( u );\n\t\t\treturn this.getTangent( t, optionalTarget );\n\n\t\t},\n\n\t\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\t\tconst normal = new Vector3();\n\n\t\t\tconst tangents = [];\n\t\t\tconst normals = [];\n\t\t\tconst binormals = [];\n\n\t\t\tconst vec = new Vector3();\n\t\t\tconst mat = new Matrix4();\n\n\t\t\t// compute the tangent vectors for each segment on the curve\n\n\t\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\t\tconst u = i / segments;\n\n\t\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\t\t\t\ttangents[ i ].normalize();\n\n\t\t\t}\n\n\t\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t\t// and in the direction of the minimum tangent xyz component\n\n\t\t\tnormals[ 0 ] = new Vector3();\n\t\t\tbinormals[ 0 ] = new Vector3();\n\t\t\tlet min = Number.MAX_VALUE;\n\t\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\t\tif ( tx <= min ) {\n\n\t\t\t\tmin = tx;\n\t\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( ty <= min ) {\n\n\t\t\t\tmin = ty;\n\t\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t\t}\n\n\t\t\tif ( tz <= min ) {\n\n\t\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t\t}\n\n\t\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\t\tvec.normalize();\n\n\t\t\t\t\tconst theta = Math.acos( MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t\t}\n\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\t\tif ( closed === true ) {\n\n\t\t\t\tlet theta = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\t\ttheta /= segments;\n\n\t\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\t\ttheta = - theta;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t\t// twist a little...\n\t\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttangents: tangents,\n\t\t\t\tnormals: normals,\n\t\t\t\tbinormals: binormals\n\t\t\t};\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Curve',\n\t\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\t\tdata.type = this.type;\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX || 0;\n\t\tthis.aY = aY || 0;\n\n\t\tthis.xRadius = xRadius || 1;\n\t\tthis.yRadius = yRadius || 1;\n\n\t\tthis.aStartAngle = aStartAngle || 0;\n\t\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\t\tthis.aClockwise = aClockwise || false;\n\n\t\tthis.aRotation = aRotation || 0;\n\n\t}\n\n\tEllipseCurve.prototype = Object.create( Curve.prototype );\n\tEllipseCurve.prototype.constructor = EllipseCurve;\n\n\tEllipseCurve.prototype.isEllipseCurve = true;\n\n\tEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tconst point = optionalTarget || new Vector2();\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t};\n\n\tEllipseCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t};\n\n\n\tEllipseCurve.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t};\n\n\tEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t};\n\n\tfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n\tArcCurve.prototype = Object.create( EllipseCurve.prototype );\n\tArcCurve.prototype.constructor = ArcCurve;\n\n\tArcCurve.prototype.isArcCurve = true;\n\n\t/**\n\t * Centripetal CatmullRom Curve - which is useful for avoiding\n\t * cusps and self-intersections in non-uniform catmull rom curves.\n\t * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n\t *\n\t * curve.type accepts centripetal(default), chordal and catmullrom\n\t * curve.tension is used for catmullrom which defaults to 0.5\n\t */\n\n\n\t/*\n\tBased on an optimized c++ solution in\n\t - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n\t - http://ideone.com/NoEbVM\n\n\tThis CubicPoly class could be used for reusing some variables and calculations,\n\tbut for three.js curve use, it could be possible inlined and flatten into a single function call\n\twhich can be placed in CurveUtils.\n\t*/\n\n\tfunction CubicPoly() {\n\n\t\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t\t/*\n\t\t * Compute coefficients for a cubic polynomial\n\t\t *   p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t\t * such that\n\t\t *   p(0) = x0, p(1) = x1\n\t\t *  and\n\t\t *   p'(0) = t0, p'(1) = t1.\n\t\t */\n\t\tfunction init( x0, x1, t0, t1 ) {\n\n\t\t\tc0 = x0;\n\t\t\tc1 = t0;\n\t\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t\t},\n\n\t\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\t\tt1 *= dt1;\n\t\t\t\tt2 *= dt1;\n\n\t\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t\t},\n\n\t\t\tcalc: function ( t ) {\n\n\t\t\t\tconst t2 = t * t;\n\t\t\t\tconst t3 = t2 * t;\n\t\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst tmp = new Vector3();\n\tconst px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\n\tfunction CatmullRomCurve3( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tCatmullRomCurve3.prototype = Object.create( Curve.prototype );\n\tCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\n\tCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\n\tCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t};\n\n\tCatmullRomCurve3.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t};\n\n\tCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * Bezier Curves formulas obtained from\n\t * http://en.wikipedia.org/wiki/Bézier_curve\n\t */\n\n\tfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\t\tconst v0 = ( p2 - p0 ) * 0.5;\n\t\tconst v1 = ( p3 - p1 ) * 0.5;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t * t2;\n\t\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n\t}\n\n\t//\n\n\tfunction QuadraticBezierP0( t, p ) {\n\n\t\tconst k = 1 - t;\n\t\treturn k * k * p;\n\n\t}\n\n\tfunction QuadraticBezierP1( t, p ) {\n\n\t\treturn 2 * ( 1 - t ) * t * p;\n\n\t}\n\n\tfunction QuadraticBezierP2( t, p ) {\n\n\t\treturn t * t * p;\n\n\t}\n\n\tfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\t\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\t\tQuadraticBezierP2( t, p2 );\n\n\t}\n\n\t//\n\n\tfunction CubicBezierP0( t, p ) {\n\n\t\tconst k = 1 - t;\n\t\treturn k * k * k * p;\n\n\t}\n\n\tfunction CubicBezierP1( t, p ) {\n\n\t\tconst k = 1 - t;\n\t\treturn 3 * k * k * t * p;\n\n\t}\n\n\tfunction CubicBezierP2( t, p ) {\n\n\t\treturn 3 * ( 1 - t ) * t * t * p;\n\n\t}\n\n\tfunction CubicBezierP3( t, p ) {\n\n\t\treturn t * t * t * p;\n\n\t}\n\n\tfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\t\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\t\tCubicBezierP3( t, p3 );\n\n\t}\n\n\tfunction CubicBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tCubicBezierCurve.prototype = Object.create( Curve.prototype );\n\tCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\n\tCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\n\tCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tCubicBezierCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t};\n\n\tCubicBezierCurve.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction CubicBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tCubicBezierCurve3.prototype = Object.create( Curve.prototype );\n\tCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\n\tCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\n\tCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t};\n\n\tCubicBezierCurve3.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction LineCurve( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tLineCurve.prototype = Object.create( Curve.prototype );\n\tLineCurve.prototype.constructor = LineCurve;\n\n\tLineCurve.prototype.isLineCurve = true;\n\n\tLineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t};\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\n\tLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t};\n\n\tLineCurve.prototype.getTangent = function ( t, optionalTarget ) {\n\n\t\tconst tangent = optionalTarget || new Vector2();\n\n\t\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\t\treturn tangent;\n\n\t};\n\n\tLineCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tLineCurve.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tLineCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction LineCurve3( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tLineCurve3.prototype = Object.create( Curve.prototype );\n\tLineCurve3.prototype.constructor = LineCurve3;\n\n\tLineCurve3.prototype.isLineCurve3 = true;\n\n\tLineCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t};\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\n\tLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t};\n\n\tLineCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tLineCurve3.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tLineCurve3.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction QuadraticBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\n\tQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\n\tQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\n\tQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tQuadraticBezierCurve.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction QuadraticBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\n\tQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\n\tQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\n\tQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction SplineCurve( points = [] ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tSplineCurve.prototype = Object.create( Curve.prototype );\n\tSplineCurve.prototype.constructor = SplineCurve;\n\n\tSplineCurve.prototype.isSplineCurve = true;\n\n\tSplineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tSplineCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tSplineCurve.prototype.toJSON = function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t};\n\n\tSplineCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tvar Curves = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tArcCurve: ArcCurve,\n\t\tCatmullRomCurve3: CatmullRomCurve3,\n\t\tCubicBezierCurve: CubicBezierCurve,\n\t\tCubicBezierCurve3: CubicBezierCurve3,\n\t\tEllipseCurve: EllipseCurve,\n\t\tLineCurve: LineCurve,\n\t\tLineCurve3: LineCurve3,\n\t\tQuadraticBezierCurve: QuadraticBezierCurve,\n\t\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\t\tSplineCurve: SplineCurve\n\t});\n\n\t/**************************************************************\n\t *\tCurved Path - a curve path is simply a array of connected\n\t *  curves, but retains the api of a curve\n\t **************************************************************/\n\n\tfunction CurvePath() {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\t\tconstructor: CurvePath,\n\n\t\tadd: function ( curve ) {\n\n\t\t\tthis.curves.push( curve );\n\n\t\t},\n\n\t\tclosePath: function () {\n\n\t\t\t// Add a line curve if start and end of lines are not connected\n\t\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t\t}\n\n\t\t},\n\n\t\t// To get accurate point with reference to\n\t\t// entire path distance at time t,\n\t\t// following has to be done:\n\n\t\t// 1. Length of each sub path have to be known\n\t\t// 2. Locate and identify type of curve\n\t\t// 3. Get t for the curve\n\t\t// 4. Return curve.getPointAt(t')\n\n\t\tgetPoint: function ( t ) {\n\n\t\t\tconst d = t * this.getLength();\n\t\t\tconst curveLengths = this.getCurveLengths();\n\t\t\tlet i = 0;\n\n\t\t\t// To think about boundaries points.\n\n\t\t\twhile ( i < curveLengths.length ) {\n\n\t\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t\t}\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t\t// loop where sum != 0, sum > d , sum+1 <d\n\n\t\t},\n\n\t\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t\t// getPoint() depends on getLength\n\n\t\tgetLength: function () {\n\n\t\t\tconst lens = this.getCurveLengths();\n\t\t\treturn lens[ lens.length - 1 ];\n\n\t\t},\n\n\t\t// cacheLengths must be recalculated.\n\t\tupdateArcLengths: function () {\n\n\t\t\tthis.needsUpdate = true;\n\t\t\tthis.cacheLengths = null;\n\t\t\tthis.getCurveLengths();\n\n\t\t},\n\n\t\t// Compute lengths and cache them\n\t\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\n\t\tgetCurveLengths: function () {\n\n\t\t\t// We use cache values if curves and cache array are same length\n\n\t\t\tif ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {\n\n\t\t\t\treturn this.cacheLengths;\n\n\t\t\t}\n\n\t\t\t// Get length of sub-curve\n\t\t\t// Push sums into cached array\n\n\t\t\tconst lengths = [];\n\t\t\tlet sums = 0;\n\n\t\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\t\tsums += this.curves[ i ].getLength();\n\t\t\t\tlengths.push( sums );\n\n\t\t\t}\n\n\t\t\tthis.cacheLengths = lengths;\n\n\t\t\treturn lengths;\n\n\t\t},\n\n\t\tgetSpacedPoints: function ( divisions = 40 ) {\n\n\t\t\tconst points = [];\n\n\t\t\tfor ( let i = 0; i <= divisions; i ++ ) {\n\n\t\t\t\tpoints.push( this.getPoint( i / divisions ) );\n\n\t\t\t}\n\n\t\t\tif ( this.autoClose ) {\n\n\t\t\t\tpoints.push( points[ 0 ] );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\tgetPoints: function ( divisions = 12 ) {\n\n\t\t\tconst points = [];\n\t\t\tlet last;\n\n\t\t\tfor ( let i = 0, curves = this.curves; i < curves.length; i ++ ) {\n\n\t\t\t\tconst curve = curves[ i ];\n\t\t\t\tconst resolution = ( curve && curve.isEllipseCurve ) ? divisions * 2\n\t\t\t\t\t: ( curve && ( curve.isLineCurve || curve.isLineCurve3 ) ) ? 1\n\t\t\t\t\t\t: ( curve && curve.isSplineCurve ) ? divisions * curve.points.length\n\t\t\t\t\t\t\t: divisions;\n\n\t\t\t\tconst pts = curve.getPoints( resolution );\n\n\t\t\t\tfor ( let j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\t\tconst point = pts[ j ];\n\n\t\t\t\t\tif ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\t\tpoints.push( point );\n\t\t\t\t\tlast = point;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.autoClose && points.length > 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\t\tpoints.push( points[ 0 ] );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tCurve.prototype.copy.call( this, source );\n\n\t\t\tthis.curves = [];\n\n\t\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\t\tconst curve = source.curves[ i ];\n\n\t\t\t\tthis.curves.push( curve.clone() );\n\n\t\t\t}\n\n\t\t\tthis.autoClose = source.autoClose;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\t\tdata.autoClose = this.autoClose;\n\t\t\tdata.curves = [];\n\n\t\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\t\tconst curve = this.curves[ i ];\n\t\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\t\tthis.autoClose = json.autoClose;\n\t\t\tthis.curves = [];\n\n\t\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\t\tconst curve = json.curves[ i ];\n\t\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction Path( points ) {\n\n\t\tCurvePath.call( this );\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\t\tconstructor: Path,\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmoveTo: function ( x, y ) {\n\n\t\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlineTo: function ( x, y ) {\n\n\t\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( x, y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\t\tconst curve = new QuadraticBezierCurve(\n\t\t\t\tthis.currentPoint.clone(),\n\t\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\t\tnew Vector2( aX, aY )\n\t\t\t);\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( aX, aY );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\t\tconst curve = new CubicBezierCurve(\n\t\t\t\tthis.currentPoint.clone(),\n\t\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\t\tnew Vector2( aX, aY )\n\t\t\t);\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( aX, aY );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\t\tconst curve = new SplineCurve( npts );\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\t\tconst x0 = this.currentPoint.x;\n\t\t\tconst y0 = this.currentPoint.y;\n\n\t\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\t\tconst x0 = this.currentPoint.x;\n\t\t\tconst y0 = this.currentPoint.y;\n\n\t\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t\t// if a previous curve is present, attempt to join\n\t\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tconst lastPoint = curve.getPoint( 1 );\n\t\t\tthis.currentPoint.copy( lastPoint );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst data = CurvePath.prototype.toJSON.call( this );\n\n\t\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction Shape( points ) {\n\n\t\tPath.call( this, points );\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\t\tconstructor: Shape,\n\n\t\tgetPointsHoles: function ( divisions ) {\n\n\t\t\tconst holesPts = [];\n\n\t\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t\t}\n\n\t\t\treturn holesPts;\n\n\t\t},\n\n\t\t// get points of shape and holes (keypoints based on segments parameter)\n\n\t\textractPoints: function ( divisions ) {\n\n\t\t\treturn {\n\n\t\t\t\tshape: this.getPoints( divisions ),\n\t\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t\t};\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tPath.prototype.copy.call( this, source );\n\n\t\t\tthis.holes = [];\n\n\t\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\t\tconst hole = source.holes[ i ];\n\n\t\t\t\tthis.holes.push( hole.clone() );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst data = Path.prototype.toJSON.call( this );\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.holes = [];\n\n\t\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\t\tconst hole = this.holes[ i ];\n\t\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\t\tthis.uuid = json.uuid;\n\t\t\tthis.holes = [];\n\n\t\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\t\tconst hole = json.holes[ i ];\n\t\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction Light( color, intensity = 1 ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Light,\n\n\t\tisLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tthis.color.copy( source.color );\n\t\t\tthis.intensity = source.intensity;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.color = this.color.getHex();\n\t\t\tdata.object.intensity = this.intensity;\n\n\t\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\t\tLight.call( this, skyColor, intensity );\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: HemisphereLight,\n\n\t\tisHemisphereLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.groundColor.copy( source.groundColor );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction LightShadow( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tObject.assign( LightShadow.prototype, {\n\n\t\t_projScreenMatrix: new Matrix4(),\n\n\t\t_lightPositionWorld: new Vector3(),\n\n\t\t_lookTarget: new Vector3(),\n\n\t\tgetViewportCount: function () {\n\n\t\t\treturn this._viewportCount;\n\n\t\t},\n\n\t\tgetFrustum: function () {\n\n\t\t\treturn this._frustum;\n\n\t\t},\n\n\t\tupdateMatrices: function ( light ) {\n\n\t\t\tconst shadowCamera = this.camera,\n\t\t\t\tshadowMatrix = this.matrix,\n\t\t\t\tprojScreenMatrix = this._projScreenMatrix,\n\t\t\t\tlookTarget = this._lookTarget,\n\t\t\t\tlightPositionWorld = this._lightPositionWorld;\n\n\t\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tshadowCamera.position.copy( lightPositionWorld );\n\n\t\t\tlookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\tshadowCamera.lookAt( lookTarget );\n\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\tprojScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t\t\tshadowMatrix.set(\n\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t},\n\n\t\tgetViewport: function ( viewportIndex ) {\n\n\t\t\treturn this._viewports[ viewportIndex ];\n\n\t\t},\n\n\t\tgetFrameExtents: function () {\n\n\t\t\treturn this._frameExtents;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.camera = source.camera.clone();\n\n\t\t\tthis.bias = source.bias;\n\t\t\tthis.radius = source.radius;\n\n\t\t\tthis.mapSize.copy( source.mapSize );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst object = {};\n\n\t\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\t\tdelete object.camera.matrix;\n\n\t\t\treturn object;\n\n\t\t}\n\n\t} );\n\n\tfunction SpotLightShadow() {\n\n\t\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\t\tconstructor: SpotLightShadow,\n\n\t\tisSpotLightShadow: true,\n\n\t\tupdateMatrices: function ( light ) {\n\n\t\t\tconst camera = this.camera;\n\n\t\t\tconst fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus;\n\t\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\t\tconst far = light.distance || camera.far;\n\n\t\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\t\tcamera.fov = fov;\n\t\t\t\tcamera.aspect = aspect;\n\t\t\t\tcamera.far = far;\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t\t}\n\n\t} );\n\n\tfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tObject.defineProperty( this, 'power', {\n\t\t\tget: function () {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\treturn this.intensity * Math.PI;\n\n\t\t\t},\n\t\t\tset: function ( power ) {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\tthis.intensity = power / Math.PI;\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\t\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\t\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\t\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: SpotLight,\n\n\t\tisSpotLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.distance = source.distance;\n\t\t\tthis.angle = source.angle;\n\t\t\tthis.penumbra = source.penumbra;\n\t\t\tthis.decay = source.decay;\n\n\t\t\tthis.target = source.target.clone();\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction PointLightShadow() {\n\n\t\tLightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t//  xzXZ\n\t\t\t//   y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tPointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\t\tconstructor: PointLightShadow,\n\n\t\tisPointLightShadow: true,\n\n\t\tupdateMatrices: function ( light, viewportIndex = 0 ) {\n\n\t\t\tconst camera = this.camera,\n\t\t\t\tshadowMatrix = this.matrix,\n\t\t\t\tlightPositionWorld = this._lightPositionWorld,\n\t\t\t\tlookTarget = this._lookTarget,\n\t\t\t\tprojScreenMatrix = this._projScreenMatrix;\n\n\t\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\tcamera.position.copy( lightPositionWorld );\n\n\t\t\tlookTarget.copy( camera.position );\n\t\t\tlookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\t\tcamera.lookAt( lookTarget );\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t\tshadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z );\n\n\t\t\tprojScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t\t}\n\n\t} );\n\n\tfunction PointLight( color, intensity, distance, decay ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tObject.defineProperty( this, 'power', {\n\t\t\tget: function () {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t\t},\n\t\t\tset: function ( power ) {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\t\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: PointLight,\n\n\t\tisPointLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.distance = source.distance;\n\t\t\tthis.decay = source.decay;\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction OrthographicCamera( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tCamera.call( this );\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\t\tconstructor: OrthographicCamera,\n\n\t\tisOrthographicCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.left = source.left;\n\t\t\tthis.right = source.right;\n\t\t\tthis.top = source.top;\n\t\t\tthis.bottom = source.bottom;\n\t\t\tthis.near = source.near;\n\t\t\tthis.far = source.far;\n\n\t\t\tthis.zoom = source.zoom;\n\t\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\t\tif ( this.view === null ) {\n\n\t\t\t\tthis.view = {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tfullWidth: 1,\n\t\t\t\t\tfullHeight: 1,\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 0,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.view.enabled = true;\n\t\t\tthis.view.fullWidth = fullWidth;\n\t\t\tthis.view.fullHeight = fullHeight;\n\t\t\tthis.view.offsetX = x;\n\t\t\tthis.view.offsetY = y;\n\t\t\tthis.view.width = width;\n\t\t\tthis.view.height = height;\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tclearViewOffset: function () {\n\n\t\t\tif ( this.view !== null ) {\n\n\t\t\t\tthis.view.enabled = false;\n\n\t\t\t}\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tupdateProjectionMatrix: function () {\n\n\t\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\t\tconst cx = ( this.right + this.left ) / 2;\n\t\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\t\tlet left = cx - dx;\n\t\t\tlet right = cx + dx;\n\t\t\tlet top = cy + dy;\n\t\t\tlet bottom = cy - dy;\n\n\t\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\t\tright = left + scaleW * this.view.width;\n\t\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t\t}\n\n\t\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.zoom = this.zoom;\n\t\t\tdata.object.left = this.left;\n\t\t\tdata.object.right = this.right;\n\t\t\tdata.object.top = this.top;\n\t\t\tdata.object.bottom = this.bottom;\n\t\t\tdata.object.near = this.near;\n\t\t\tdata.object.far = this.far;\n\n\t\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tfunction DirectionalLightShadow() {\n\n\t\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t}\n\n\tDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\t\tconstructor: DirectionalLightShadow,\n\n\t\tisDirectionalLightShadow: true,\n\n\t\tupdateMatrices: function ( light ) {\n\n\t\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t\t}\n\n\t} );\n\n\tfunction DirectionalLight( color, intensity ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: DirectionalLight,\n\n\t\tisDirectionalLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.target = source.target.clone();\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction AmbientLight( color, intensity ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n\tAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: AmbientLight,\n\n\t\tisAmbientLight: true\n\n\t} );\n\n\tfunction RectAreaLight( color, intensity, width, height ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = ( width !== undefined ) ? width : 10;\n\t\tthis.height = ( height !== undefined ) ? height : 10;\n\n\t}\n\n\tRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: RectAreaLight,\n\n\t\tisRectAreaLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.width = source.width;\n\t\t\tthis.height = source.height;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.width = this.width;\n\t\t\tdata.object.height = this.height;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * Primary reference:\n\t *   https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\t *\n\t * Secondary reference:\n\t *   https://www.ppsloan.org/publications/StupidSH36.pdf\n\t */\n\n\t// 3-band SH defined by 9 coefficients\n\n\tclass SphericalHarmonics3 {\n\n\t\tconstructor() {\n\n\t\t\tObject.defineProperty( this, 'isSphericalHarmonics3', { value: true } );\n\n\t\t\tthis.coefficients = [];\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t\t}\n\n\t\t}\n\n\t\tset( coefficients ) {\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tzero() {\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t// get the radiance in the direction of the normal\n\t\t// target is a Vector3\n\t\tgetAt( normal, target ) {\n\n\t\t\t// normal is assumed to be unit length\n\n\t\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t\tconst coeff = this.coefficients;\n\n\t\t\t// band 0\n\t\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t\t// band 1\n\t\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t\t// band 2\n\t\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\t\treturn target;\n\n\t\t}\n\n\t\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t\t// target is a Vector3\n\t\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\t\tgetIrradianceAt( normal, target ) {\n\n\t\t\t// normal is assumed to be unit length\n\n\t\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t\tconst coeff = this.coefficients;\n\n\t\t\t// band 0\n\t\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t\t// band 1\n\t\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t\t// band 2\n\t\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\t\treturn target;\n\n\t\t}\n\n\t\tadd( sh ) {\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\taddScaledSH( sh, s ) {\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tscale( s ) {\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tlerp( sh, alpha ) {\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( sh ) {\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tcopy( sh ) {\n\n\t\t\treturn this.set( sh.coefficients );\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tfromArray( array, offset = 0 ) {\n\n\t\t\tconst coefficients = this.coefficients;\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttoArray( array = [], offset = 0 ) {\n\n\t\t\tconst coefficients = this.coefficients;\n\n\t\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\t// evaluate the basis functions\n\t\t// shBasis is an Array[ 9 ]\n\t\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t\t// normal is assumed to be unit length\n\n\t\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t\t// band 0\n\t\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t\t// band 1\n\t\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t\t// band 2\n\t\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t\t}\n\n\t}\n\n\tfunction LightProbe( sh, intensity ) {\n\n\t\tLight.call( this, undefined, intensity );\n\n\t\tthis.type = 'LightProbe';\n\n\t\tthis.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3();\n\n\t}\n\n\tLightProbe.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: LightProbe,\n\n\t\tisLightProbe: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.sh.copy( source.sh );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\t\tthis.sh.fromArray( json.sh );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.sh = this.sh.toArray();\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tfunction MaterialLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t\tthis.textures = {};\n\n\t}\n\n\tMaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: MaterialLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst loader = new FileLoader( scope.manager );\n\t\t\tloader.setPath( scope.path );\n\t\t\tloader.setRequestHeader( scope.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\tconst textures = this.textures;\n\n\t\t\tfunction getTexture( name ) {\n\n\t\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t\t}\n\n\t\t\t\treturn textures[ name ];\n\n\t\t\t}\n\n\t\t\tconst material = new Materials[ json.type ]();\n\n\t\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\t\tif ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen );\n\t\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\t\tif ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals;\n\t\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\t\tif ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents;\n\n\t\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Shader Material\n\n\t\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\t\tcase 't':\n\t\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\t\tif ( json.extensions !== undefined ) {\n\n\t\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Deprecated\n\n\t\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t\t// for PointsMaterial\n\n\t\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t\t// maps\n\n\t\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\t\tlet normalScale = json.normalScale;\n\n\t\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t\t}\n\n\t\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\n\t\t\treturn material;\n\n\t\t},\n\n\t\tsetTextures: function ( value ) {\n\n\t\t\tthis.textures = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tconst LoaderUtils = {\n\n\t\tdecodeText: function ( array ) {\n\n\t\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\t\treturn new TextDecoder().decode( array );\n\n\t\t\t}\n\n\t\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\t\tlet s = '';\n\n\t\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t// Implicitly assumes little-endian.\n\t\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t\t} catch ( e ) { // see #16358\n\n\t\t\t\treturn s;\n\n\t\t\t}\n\n\t\t},\n\n\t\textractUrlBase: function ( url ) {\n\n\t\t\tconst index = url.lastIndexOf( '/' );\n\n\t\t\tif ( index === - 1 ) return './';\n\n\t\t\treturn url.substr( 0, index + 1 );\n\n\t\t}\n\n\t};\n\n\tfunction InstancedBufferGeometry() {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\t\tconstructor: InstancedBufferGeometry,\n\n\t\tisInstancedBufferGeometry: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\t\tthis.instanceCount = source.instanceCount;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\t\tdata.instanceCount = this.instanceCount;\n\n\t\t\tdata.isInstancedBufferGeometry = true;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tfunction InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) {\n\n\t\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\t\tmeshPerAttribute = normalized;\n\n\t\t\tnormalized = false;\n\n\t\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t\t}\n\n\t\tBufferAttribute.call( this, array, itemSize, normalized );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\t\tconstructor: InstancedBufferAttribute,\n\n\t\tisInstancedBufferAttribute: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ()\t{\n\n\t\t\tconst data = BufferAttribute.prototype.toJSON.call( this );\n\n\t\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\t\tdata.isInstancedBufferAttribute = true;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tfunction BufferGeometryLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tBufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: BufferGeometryLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst loader = new FileLoader( scope.manager );\n\t\t\tloader.setPath( scope.path );\n\t\t\tloader.setRequestHeader( scope.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\tconst interleavedBufferMap = {};\n\t\t\tconst arrayBufferMap = {};\n\n\t\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\t\treturn ib;\n\n\t\t\t}\n\n\t\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\t\treturn ab;\n\n\t\t\t}\n\n\t\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\t\tconst index = json.data.index;\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tconst attributes = json.data.attributes;\n\n\t\t\tfor ( const key in attributes ) {\n\n\t\t\t\tconst attribute = attributes[ key ];\n\t\t\t\tlet bufferAttribute;\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t\t}\n\n\t\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\t\tif ( morphAttributes ) {\n\n\t\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t\t}\n\n\t\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\t\tif ( groups !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\t\tconst center = new Vector3();\n\n\t\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t\t}\n\n\t\t\tif ( json.name ) geometry.name = json.name;\n\t\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t} );\n\n\tclass ObjectLoader extends Loader {\n\n\t\tconstructor( manager ) {\n\n\t\t\tsuper( manager );\n\n\t\t}\n\n\t\tload( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\t\tconst loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\tloader.setWithCredentials( this.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tlet json = null;\n\n\t\t\t\ttry {\n\n\t\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst metadata = json.metadata;\n\n\t\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tscope.parse( json, onLoad );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tparse( json, onLoad ) {\n\n\t\t\tconst animations = this.parseAnimations( json.animations );\n\t\t\tconst shapes = this.parseShapes( json.shapes );\n\t\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t\t} );\n\n\t\t\tconst textures = this.parseTextures( json.textures, images );\n\t\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\t\tconst object = this.parseObject( json.object, geometries, materials, animations );\n\t\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t\t//\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tlet hasImages = false;\n\n\t\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\thasImages = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tparseShapes( json ) {\n\n\t\t\tconst shapes = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tparseSkeletons( json, object ) {\n\n\t\t\tconst skeletons = {};\n\t\t\tconst bones = {};\n\n\t\t\t// generate bone lookup table\n\n\t\t\tobject.traverse( function ( child ) {\n\n\t\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t\t} );\n\n\t\t\t// create skeletons\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn skeletons;\n\n\t\t}\n\n\t\tparseGeometries( json, shapes ) {\n\n\t\t\tconst geometries = {};\n\t\t\tlet geometryShapes;\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tlet geometry;\n\t\t\t\t\tconst data = json[ i ];\n\n\t\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TubeGeometry':\n\t\t\t\t\t\tcase 'TubeBufferGeometry':\n\n\t\t\t\t\t\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t\t\t\t\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.closed\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.' );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn geometries;\n\n\t\t}\n\n\t\tparseMaterials( json, textures ) {\n\n\t\t\tconst cache = {}; // MultiMaterial\n\t\t\tconst materials = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tconst loader = new MaterialLoader();\n\t\t\t\tloader.setTextures( textures );\n\n\t\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst data = json[ i ];\n\n\t\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t\t// Deprecated\n\n\t\t\t\t\t\tconst array = [];\n\n\t\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t}\n\n\t\tparseAnimations( json ) {\n\n\t\t\tconst animations = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\t\tconst data = json[ i ];\n\n\t\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn animations;\n\n\t\t}\n\n\t\tparseImages( json, onLoad ) {\n\n\t\t\tconst scope = this;\n\t\t\tconst images = {};\n\n\t\t\tlet loader;\n\n\t\t\tfunction loadImage( url ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\treturn loader.load( url, function () {\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, undefined, function () {\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfunction deserializeImage( image ) {\n\n\t\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\t\tconst url = image;\n\n\t\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\t\treturn loadImage( path );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\t\theight: image.height\n\t\t\t\t\t\t};\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\t\tloader = new ImageLoader( manager );\n\t\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst image = json[ i ];\n\t\t\t\t\tconst url = image.url;\n\n\t\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// load single image\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn images;\n\n\t\t}\n\n\t\tparseTextures( json, images ) {\n\n\t\t\tfunction parseConstant( value, type ) {\n\n\t\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\t\treturn type[ value ];\n\n\t\t\t}\n\n\t\t\tconst textures = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst data = json[ i ];\n\n\t\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet texture;\n\t\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t\ttexture = new CubeTexture( image );\n\n\t\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\t\ttexture = new DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttexture = new Texture( image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t}\n\n\t\tparseObject( data, geometries, materials, animations ) {\n\n\t\t\tlet object;\n\n\t\t\tfunction getGeometry( name ) {\n\n\t\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t\t}\n\n\t\t\t\treturn geometries[ name ];\n\n\t\t\t}\n\n\t\t\tfunction getMaterial( name ) {\n\n\t\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn array;\n\n\t\t\t\t}\n\n\t\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t\t}\n\n\t\t\t\treturn materials[ name ];\n\n\t\t\t}\n\n\t\t\tlet geometry, material;\n\n\t\t\tswitch ( data.type ) {\n\n\t\t\t\tcase 'Scene':\n\n\t\t\t\t\tobject = new Scene();\n\n\t\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'AmbientLight':\n\n\t\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DirectionalLight':\n\n\t\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\n\t\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\n\t\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\n\t\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\n\t\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LightProbe':\n\n\t\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Mesh':\n\n\t\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'InstancedMesh':\n\n\t\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\t\tconst count = data.count;\n\t\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\n\t\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\t\tobject.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LOD':\n\n\t\t\t\t\tobject = new LOD();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Line':\n\n\t\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LineLoop':\n\n\t\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LineSegments':\n\n\t\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointCloud':\n\t\t\t\tcase 'Points':\n\n\t\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Sprite':\n\n\t\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Group':\n\n\t\t\t\t\tobject = new Group();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Bone':\n\n\t\t\t\t\tobject = new Bone();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tobject = new Object3D();\n\n\t\t\t}\n\n\t\t\tobject.uuid = data.uuid;\n\n\t\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\t\tif ( data.matrix !== undefined ) {\n\n\t\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\t} else {\n\n\t\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t\t}\n\n\t\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\t\tif ( data.shadow ) {\n\n\t\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t\t}\n\n\t\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\t\tif ( data.children !== undefined ) {\n\n\t\t\t\tconst children = data.children;\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, animations ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( data.animations !== undefined ) {\n\n\t\t\t\tconst objectAnimations = data.animations;\n\n\t\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( data.type === 'LOD' ) {\n\n\t\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\t\tconst levels = data.levels;\n\n\t\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\t\tconst level = levels[ l ];\n\t\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tbindSkeletons( object, skeletons ) {\n\n\t\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\t\tobject.traverse( function ( child ) {\n\n\t\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\t/* DEPRECATED */\n\n\t\tsetTexturePath( value ) {\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\t\treturn this.setResourcePath( value );\n\n\t\t}\n\n\t}\n\n\tconst TEXTURE_MAPPING = {\n\t\tUVMapping: UVMapping,\n\t\tCubeReflectionMapping: CubeReflectionMapping,\n\t\tCubeRefractionMapping: CubeRefractionMapping,\n\t\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\t\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\t\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\t\tCubeUVRefractionMapping: CubeUVRefractionMapping\n\t};\n\n\tconst TEXTURE_WRAPPING = {\n\t\tRepeatWrapping: RepeatWrapping,\n\t\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\t\tMirroredRepeatWrapping: MirroredRepeatWrapping\n\t};\n\n\tconst TEXTURE_FILTER = {\n\t\tNearestFilter: NearestFilter,\n\t\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\t\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\t\tLinearFilter: LinearFilter,\n\t\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\t\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n\t};\n\n\tfunction ImageBitmapLoader( manager ) {\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tLoader.call( this, manager );\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: ImageBitmapLoader,\n\n\t\tisImageBitmapLoader: true,\n\n\t\tsetOptions: function setOptions( options ) {\n\n\t\t\tthis.options = options;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( url === undefined ) url = '';\n\n\t\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\t\turl = this.manager.resolveURL( url );\n\n\t\t\tconst scope = this;\n\n\t\t\tconst cached = Cache.get( url );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t\treturn cached;\n\n\t\t\t}\n\n\t\t\tconst fetchOptions = {};\n\t\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\n\t\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\t\treturn res.blob();\n\n\t\t\t} ).then( function ( blob ) {\n\n\t\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\t\tCache.add( url, imageBitmap );\n\n\t\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} ).catch( function ( e ) {\n\n\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t}\n\n\t} );\n\n\tfunction ShapePath() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tObject.assign( ShapePath.prototype, {\n\n\t\tmoveTo: function ( x, y ) {\n\n\t\t\tthis.currentPath = new Path();\n\t\t\tthis.subPaths.push( this.currentPath );\n\t\t\tthis.currentPath.moveTo( x, y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlineTo: function ( x, y ) {\n\n\t\t\tthis.currentPath.lineTo( x, y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsplineThru: function ( pts ) {\n\n\t\t\tthis.currentPath.splineThru( pts );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\t\tconst shapes = [];\n\n\t\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t\t}\n\n\t\t\t\treturn shapes;\n\n\t\t\t}\n\n\t\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t\t// inPt on polygon contour => immediate success    or\n\t\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t\t//  with the horizontal line through inPt, left of inPt\n\t\t\t\t//  not counting lowerY endpoints of edges and whole edges on that line\n\t\t\t\tlet inside = false;\n\t\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t\t// not parallel\n\t\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// parallel or collinear\n\t\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t\t// continue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn\tinside;\n\n\t\t\t}\n\n\t\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\t\tconst subPaths = this.subPaths;\n\t\t\tif ( subPaths.length === 0 ) return [];\n\n\t\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\t\tlet solid, tmpPath, tmpShape;\n\t\t\tconst shapes = [];\n\n\t\t\tif ( subPaths.length === 1 ) {\n\n\t\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\t\ttmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\t\tshapes.push( tmpShape );\n\t\t\t\treturn shapes;\n\n\t\t\t}\n\n\t\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\t\tconst betterShapeHoles = [];\n\t\t\tconst newShapes = [];\n\t\t\tlet newShapeHoles = [];\n\t\t\tlet mainIdx = 0;\n\t\t\tlet tmpPoints;\n\n\t\t\tnewShapes[ mainIdx ] = undefined;\n\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\t\ttmpPath = subPaths[ i ];\n\t\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\t\tif ( solid ) {\n\n\t\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t\t//console.log('cw', i);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t\t//console.log('ccw', i);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\t\tif ( newShapes.length > 1 ) {\n\n\t\t\t\tlet ambiguous = false;\n\t\t\t\tconst toChange = [];\n\n\t\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\n\t\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlet tmpHoles;\n\n\t\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\t\tshapes.push( tmpShape );\n\t\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//console.log(\"shape\", shapes);\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t} );\n\n\tfunction Font( data ) {\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\n\tObject.assign( Font.prototype, {\n\n\t\tisFont: true,\n\n\t\tgenerateShapes: function ( text, size = 100 ) {\n\n\t\t\tconst shapes = [];\n\t\t\tconst paths = createPaths( text, size, this.data );\n\n\t\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t} );\n\n\tfunction createPaths( text, size, data ) {\n\n\t\tconst chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988\n\t\tconst scale = size / data.resolution;\n\t\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\t\tconst paths = [];\n\n\t\tlet offsetX = 0, offsetY = 0;\n\n\t\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\t\tconst char = chars[ i ];\n\n\t\t\tif ( char === '\\n' ) {\n\n\t\t\t\toffsetX = 0;\n\t\t\t\toffsetY -= line_height;\n\n\t\t\t} else {\n\n\t\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\t\toffsetX += ret.offsetX;\n\t\t\t\tpaths.push( ret.path );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn paths;\n\n\t}\n\n\tfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\t\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\t\tif ( ! glyph ) {\n\n\t\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst path = new ShapePath();\n\n\t\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\t\tif ( glyph.o ) {\n\n\t\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\t\tconst action = outline[ i ++ ];\n\n\t\t\t\tswitch ( action ) {\n\n\t\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn { offsetX: glyph.ha * scale, path: path };\n\n\t}\n\n\tfunction FontLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tFontLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: FontLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tlet json;\n\n\t\t\t\ttry {\n\n\t\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\tconst font = scope.parse( json );\n\n\t\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\treturn new Font( json );\n\n\t\t}\n\n\t} );\n\n\tlet _context;\n\n\tconst AudioContext = {\n\n\t\tgetContext: function () {\n\n\t\t\tif ( _context === undefined ) {\n\n\t\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t\t}\n\n\t\t\treturn _context;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\t_context = value;\n\n\t\t}\n\n\t};\n\n\tfunction AudioLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tAudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: AudioLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tconst scope = this;\n\n\t\t\tconst loader = new FileLoader( scope.manager );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.setPath( scope.path );\n\t\t\tloader.setRequestHeader( scope.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t} );\n\n\tfunction HemisphereLightProbe( skyColor, groundColor, intensity ) {\n\n\t\tLightProbe.call( this, undefined, intensity );\n\n\t\tconst color1 = new Color().set( skyColor );\n\t\tconst color2 = new Color().set( groundColor );\n\n\t\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\t\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\t\tconst c0 = Math.sqrt( Math.PI );\n\t\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\t\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\t\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n\t}\n\n\tHemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\t\tconstructor: HemisphereLightProbe,\n\n\t\tisHemisphereLightProbe: true,\n\n\t\tcopy: function ( source ) { // modifying colors not currently supported\n\n\t\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tfunction AmbientLightProbe( color, intensity ) {\n\n\t\tLightProbe.call( this, undefined, intensity );\n\n\t\tconst color1 = new Color().set( color );\n\n\t\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\t\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n\t}\n\n\tAmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\t\tconstructor: AmbientLightProbe,\n\n\t\tisAmbientLightProbe: true,\n\n\t\tcopy: function ( source ) { // modifying color not currently supported\n\n\t\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\tconst _eyeRight = new Matrix4();\n\tconst _eyeLeft = new Matrix4();\n\n\tfunction StereoCamera() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tObject.assign( StereoCamera.prototype, {\n\n\t\tupdate: function ( camera ) {\n\n\t\t\tconst cache = this._cache;\n\n\t\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\tcache.focus = camera.focus;\n\t\t\t\tcache.fov = camera.fov;\n\t\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\t\tcache.near = camera.near;\n\t\t\t\tcache.far = camera.far;\n\t\t\t\tcache.zoom = camera.zoom;\n\t\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\t\tconst ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\t\tlet xmin, xmax;\n\n\t\t\t\t// translate xOffset\n\n\t\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t\t// for left eye\n\n\t\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t// for right eye\n\n\t\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t\t}\n\n\t} );\n\n\tclass Clock {\n\n\t\tconstructor( autoStart ) {\n\n\t\t\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\t\t\tthis.startTime = 0;\n\t\t\tthis.oldTime = 0;\n\t\t\tthis.elapsedTime = 0;\n\n\t\t\tthis.running = false;\n\n\t\t}\n\n\t\tstart() {\n\n\t\t\tthis.startTime = now();\n\n\t\t\tthis.oldTime = this.startTime;\n\t\t\tthis.elapsedTime = 0;\n\t\t\tthis.running = true;\n\n\t\t}\n\n\t\tstop() {\n\n\t\t\tthis.getElapsedTime();\n\t\t\tthis.running = false;\n\t\t\tthis.autoStart = false;\n\n\t\t}\n\n\t\tgetElapsedTime() {\n\n\t\t\tthis.getDelta();\n\t\t\treturn this.elapsedTime;\n\n\t\t}\n\n\t\tgetDelta() {\n\n\t\t\tlet diff = 0;\n\n\t\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\t\tthis.start();\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\tif ( this.running ) {\n\n\t\t\t\tconst newTime = now();\n\n\t\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\t\tthis.oldTime = newTime;\n\n\t\t\t\tthis.elapsedTime += diff;\n\n\t\t\t}\n\n\t\t\treturn diff;\n\n\t\t}\n\n\t}\n\n\tfunction now() {\n\n\t\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t}\n\n\tconst _position$2 = /*@__PURE__*/ new Vector3();\n\tconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\tconst _scale$1 = /*@__PURE__*/ new Vector3();\n\tconst _orientation = /*@__PURE__*/ new Vector3();\n\n\tclass AudioListener extends Object3D {\n\n\t\tconstructor() {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'AudioListener';\n\n\t\t\tthis.context = AudioContext.getContext();\n\n\t\t\tthis.gain = this.context.createGain();\n\t\t\tthis.gain.connect( this.context.destination );\n\n\t\t\tthis.filter = null;\n\n\t\t\tthis.timeDelta = 0;\n\n\t\t\t// private\n\n\t\t\tthis._clock = new Clock();\n\n\t\t}\n\n\t\tgetInput() {\n\n\t\t\treturn this.gain;\n\n\t\t}\n\n\t\tremoveFilter() {\n\n\t\t\tif ( this.filter !== null ) {\n\n\t\t\t\tthis.gain.disconnect( this.filter );\n\t\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\t\tthis.gain.connect( this.context.destination );\n\t\t\t\tthis.filter = null;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetFilter() {\n\n\t\t\treturn this.filter;\n\n\t\t}\n\n\t\tsetFilter( value ) {\n\n\t\t\tif ( this.filter !== null ) {\n\n\t\t\t\tthis.gain.disconnect( this.filter );\n\t\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t\t} else {\n\n\t\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t\t}\n\n\t\t\tthis.filter = value;\n\t\t\tthis.gain.connect( this.filter );\n\t\t\tthis.filter.connect( this.context.destination );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetMasterVolume() {\n\n\t\t\treturn this.gain.gain.value;\n\n\t\t}\n\n\t\tsetMasterVolume( value ) {\n\n\t\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tupdateMatrixWorld( force ) {\n\n\t\t\tsuper.updateMatrixWorld( force );\n\n\t\t\tconst listener = this.context.listener;\n\t\t\tconst up = this.up;\n\n\t\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\t\tthis.matrixWorld.decompose( _position$2, _quaternion$3, _scale$1 );\n\n\t\t\t_orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion$3 );\n\n\t\t\tif ( listener.positionX ) {\n\n\t\t\t\t// code path for Chrome (see #14393)\n\n\t\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\t\tlistener.positionX.linearRampToValueAtTime( _position$2.x, endTime );\n\t\t\t\tlistener.positionY.linearRampToValueAtTime( _position$2.y, endTime );\n\t\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$2.z, endTime );\n\t\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime );\n\t\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t\t} else {\n\n\t\t\t\tlistener.setPosition( _position$2.x, _position$2.y, _position$2.z );\n\t\t\t\tlistener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass Audio extends Object3D {\n\n\t\tconstructor( listener ) {\n\n\t\t\tsuper();\n\n\t\t\tthis.type = 'Audio';\n\n\t\t\tthis.listener = listener;\n\t\t\tthis.context = listener.context;\n\n\t\t\tthis.gain = this.context.createGain();\n\t\t\tthis.gain.connect( listener.getInput() );\n\n\t\t\tthis.autoplay = false;\n\n\t\t\tthis.buffer = null;\n\t\t\tthis.detune = 0;\n\t\t\tthis.loop = false;\n\t\t\tthis.loopStart = 0;\n\t\t\tthis.loopEnd = 0;\n\t\t\tthis.offset = 0;\n\t\t\tthis.duration = undefined;\n\t\t\tthis.playbackRate = 1;\n\t\t\tthis.isPlaying = false;\n\t\t\tthis.hasPlaybackControl = true;\n\t\t\tthis.source = null;\n\t\t\tthis.sourceType = 'empty';\n\n\t\t\tthis._startedAt = 0;\n\t\t\tthis._progress = 0;\n\t\t\tthis._connected = false;\n\n\t\t\tthis.filters = [];\n\n\t\t}\n\n\t\tgetOutput() {\n\n\t\t\treturn this.gain;\n\n\t\t}\n\n\t\tsetNodeSource( audioNode ) {\n\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'audioNode';\n\t\t\tthis.source = audioNode;\n\t\t\tthis.connect();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetMediaElementSource( mediaElement ) {\n\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'mediaNode';\n\t\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\t\tthis.connect();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetMediaStreamSource( mediaStream ) {\n\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'mediaStreamNode';\n\t\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\t\tthis.connect();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetBuffer( audioBuffer ) {\n\n\t\t\tthis.buffer = audioBuffer;\n\t\t\tthis.sourceType = 'buffer';\n\n\t\t\tif ( this.autoplay ) this.play();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tplay( delay = 0 ) {\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\t\tconst source = this.context.createBufferSource();\n\t\t\tsource.buffer = this.buffer;\n\t\t\tsource.loop = this.loop;\n\t\t\tsource.loopStart = this.loopStart;\n\t\t\tsource.loopEnd = this.loopEnd;\n\t\t\tsource.onended = this.onEnded.bind( this );\n\t\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\t\tthis.isPlaying = true;\n\n\t\t\tthis.source = source;\n\n\t\t\tthis.setDetune( this.detune );\n\t\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\t\treturn this.connect();\n\n\t\t}\n\n\t\tpause() {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\t// update current progress\n\n\t\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t\t}\n\n\t\t\t\tthis.source.stop();\n\t\t\t\tthis.source.onended = null;\n\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tstop() {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis._progress = 0;\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\t\t\tthis.isPlaying = false;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconnect() {\n\n\t\t\tif ( this.filters.length > 0 ) {\n\n\t\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t\t} else {\n\n\t\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t\t}\n\n\t\t\tthis._connected = true;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdisconnect() {\n\n\t\t\tif ( this.filters.length > 0 ) {\n\n\t\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t\t} else {\n\n\t\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t\t}\n\n\t\t\tthis._connected = false;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetFilters() {\n\n\t\t\treturn this.filters;\n\n\t\t}\n\n\t\tsetFilters( value ) {\n\n\t\t\tif ( ! value ) value = [];\n\n\t\t\tif ( this._connected === true ) {\n\n\t\t\t\tthis.disconnect();\n\t\t\t\tthis.filters = value.slice();\n\t\t\t\tthis.connect();\n\n\t\t\t} else {\n\n\t\t\t\tthis.filters = value.slice();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetDetune( value ) {\n\n\t\t\tthis.detune = value;\n\n\t\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetDetune() {\n\n\t\t\treturn this.detune;\n\n\t\t}\n\n\t\tgetFilter() {\n\n\t\t\treturn this.getFilters()[ 0 ];\n\n\t\t}\n\n\t\tsetFilter( filter ) {\n\n\t\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t\t}\n\n\t\tsetPlaybackRate( value ) {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.playbackRate = value;\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetPlaybackRate() {\n\n\t\t\treturn this.playbackRate;\n\n\t\t}\n\n\t\tonEnded() {\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\tgetLoop() {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\treturn this.loop;\n\n\t\t}\n\n\t\tsetLoop( value ) {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.loop = value;\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.loop = this.loop;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetLoopStart( value ) {\n\n\t\t\tthis.loopStart = value;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetLoopEnd( value ) {\n\n\t\t\tthis.loopEnd = value;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetVolume() {\n\n\t\t\treturn this.gain.gain.value;\n\n\t\t}\n\n\t\tsetVolume( value ) {\n\n\t\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tconst _position$3 = /*@__PURE__*/ new Vector3();\n\tconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\tconst _scale$2 = /*@__PURE__*/ new Vector3();\n\tconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\n\tclass PositionalAudio extends Audio {\n\n\t\tconstructor( listener ) {\n\n\t\t\tsuper( listener );\n\n\t\t\tthis.panner = this.context.createPanner();\n\t\t\tthis.panner.panningModel = 'HRTF';\n\t\t\tthis.panner.connect( this.gain );\n\n\t\t}\n\n\t\tgetOutput() {\n\n\t\t\treturn this.panner;\n\n\t\t}\n\n\t\tgetRefDistance() {\n\n\t\t\treturn this.panner.refDistance;\n\n\t\t}\n\n\t\tsetRefDistance( value ) {\n\n\t\t\tthis.panner.refDistance = value;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetRolloffFactor() {\n\n\t\t\treturn this.panner.rolloffFactor;\n\n\t\t}\n\n\t\tsetRolloffFactor( value ) {\n\n\t\t\tthis.panner.rolloffFactor = value;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetDistanceModel() {\n\n\t\t\treturn this.panner.distanceModel;\n\n\t\t}\n\n\t\tsetDistanceModel( value ) {\n\n\t\t\tthis.panner.distanceModel = value;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetMaxDistance() {\n\n\t\t\treturn this.panner.maxDistance;\n\n\t\t}\n\n\t\tsetMaxDistance( value ) {\n\n\t\t\tthis.panner.maxDistance = value;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tupdateMatrixWorld( force ) {\n\n\t\t\tsuper.updateMatrixWorld( force );\n\n\t\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\t\tthis.matrixWorld.decompose( _position$3, _quaternion$4, _scale$2 );\n\n\t\t\t_orientation$1.set( 0, 0, 1 ).applyQuaternion( _quaternion$4 );\n\n\t\t\tconst panner = this.panner;\n\n\t\t\tif ( panner.positionX ) {\n\n\t\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\t\tpanner.positionX.linearRampToValueAtTime( _position$3.x, endTime );\n\t\t\t\tpanner.positionY.linearRampToValueAtTime( _position$3.y, endTime );\n\t\t\t\tpanner.positionZ.linearRampToValueAtTime( _position$3.z, endTime );\n\t\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\n\t\t\t} else {\n\n\t\t\t\tpanner.setPosition( _position$3.x, _position$3.y, _position$3.z );\n\t\t\t\tpanner.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass AudioAnalyser {\n\n\t\tconstructor( audio, fftSize = 2048 ) {\n\n\t\t\tthis.analyser = audio.context.createAnalyser();\n\t\t\tthis.analyser.fftSize = fftSize;\n\n\t\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\t\taudio.getOutput().connect( this.analyser );\n\n\t\t}\n\n\n\t\tgetFrequencyData() {\n\n\t\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\t\treturn this.data;\n\n\t\t}\n\n\t\tgetAverageFrequency() {\n\n\t\t\tlet value = 0;\n\t\t\tconst data = this.getFrequencyData();\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tvalue += data[ i ];\n\n\t\t\t}\n\n\t\t\treturn value / data.length;\n\n\t\t}\n\n\t}\n\n\tfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\tObject.assign( PropertyMixer.prototype, {\n\n\t\t// accumulate data in the 'incoming' region into 'accu<i>'\n\t\taccumulate: function ( accuIndex, weight ) {\n\n\t\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t\t// the weight and shouldn't have made the call in the first place\n\n\t\t\tconst buffer = this.buffer,\n\t\t\t\tstride = this.valueSize,\n\t\t\t\toffset = accuIndex * stride + stride;\n\n\t\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\t\tif ( currentWeight === 0 ) {\n\n\t\t\t\t// accuN := incoming * weight\n\n\t\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcurrentWeight = weight;\n\n\t\t\t} else {\n\n\t\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\t\tcurrentWeight += weight;\n\t\t\t\tconst mix = weight / currentWeight;\n\t\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t\t}\n\n\t\t\tthis.cumulativeWeight = currentWeight;\n\n\t\t},\n\n\t\t// accumulate data in the 'incoming' region into 'add'\n\t\taccumulateAdditive: function ( weight ) {\n\n\t\t\tconst buffer = this.buffer,\n\t\t\t\tstride = this.valueSize,\n\t\t\t\toffset = stride * this._addIndex;\n\n\t\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t\t// add = identity\n\n\t\t\t\tthis._setIdentity();\n\n\t\t\t}\n\n\t\t\t// add := add + incoming * weight\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\t\tthis.cumulativeWeightAdditive += weight;\n\n\t\t},\n\n\t\t// apply the state of 'accu<i>' to the binding when accus differ\n\t\tapply: function ( accuIndex ) {\n\n\t\t\tconst stride = this.valueSize,\n\t\t\t\tbuffer = this.buffer,\n\t\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\t\tweight = this.cumulativeWeight,\n\t\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\t\tbinding = this.binding;\n\n\t\t\tthis.cumulativeWeight = 0;\n\t\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\t\tif ( weight < 1 ) {\n\n\t\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\t\tthis._mixBufferRegion(\n\t\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t\t}\n\n\t\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t\t// accuN := accuN + additive accuN\n\n\t\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t\t}\n\n\t\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t// remember the state of the bound property and copy it to both accus\n\t\tsaveOriginalState: function () {\n\n\t\t\tconst binding = this.binding;\n\n\t\t\tconst buffer = this.buffer,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t\t}\n\n\t\t\t// Add to identity for additive\n\t\t\tthis._setIdentity();\n\n\t\t\tthis.cumulativeWeight = 0;\n\t\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\t},\n\n\t\t// apply the state previously taken via 'saveOriginalState' to the binding\n\t\trestoreOriginalState: function () {\n\n\t\t\tconst originalValueOffset = this.valueSize * 3;\n\t\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t\t},\n\n\t\t_setAdditiveIdentityNumeric: function () {\n\n\t\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\t\tthis.buffer[ i ] = 0;\n\n\t\t\t}\n\n\t\t},\n\n\t\t_setAdditiveIdentityQuaternion: function () {\n\n\t\t\tthis._setAdditiveIdentityNumeric();\n\t\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t\t},\n\n\t\t_setAdditiveIdentityOther: function () {\n\n\t\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t\t}\n\n\t\t},\n\n\n\t\t// mix functions\n\n\t\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\t\tif ( t >= 0.5 ) {\n\n\t\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t\t},\n\n\t\t_slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\t\tconst workOffset = this._workIndex * stride;\n\n\t\t\t// Store result in intermediate buffer offset\n\t\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t\t// Slerp to the intermediate result\n\t\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t\t},\n\n\t\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\t\tconst s = 1 - t;\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tconst j = dstOffset + i;\n\n\t\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t\t}\n\n\t\t},\n\n\t\t_lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tconst j = dstOffset + i;\n\n\t\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t// Characters [].:/ are reserved for track binding syntax.\n\tconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\n\tconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n\t// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n\t// only latin characters, and the unicode \\p{L} is not yet supported. So\n\t// instead, we exclude reserved characters and match everything else.\n\tconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\n\tconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n\t// Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t// be matched to parse the rest of the track name.\n\tconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n\t// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\tconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n\t// Object on target node, and accessor. May not contain reserved\n\t// characters. Accessor may contain any character except closing bracket.\n\tconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n\t// Property and accessor. May not contain reserved characters. Accessor may\n\t// contain any non-bracket characters.\n\tconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\n\tconst _trackRe = new RegExp( ''\n\t\t+ '^'\n\t\t+ _directoryRe\n\t\t+ _nodeRe\n\t\t+ _objectRe\n\t\t+ _propertyRe\n\t\t+ '$'\n\t);\n\n\tconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\n\tfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tObject.assign( Composite.prototype, {\n\n\t\tgetValue: function ( array, offset ) {\n\n\t\t\tthis.bind(); // bind all binding\n\n\t\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t\t// and only call .getValue on the first\n\t\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t\t},\n\n\t\tsetValue: function ( array, offset ) {\n\n\t\t\tconst bindings = this._bindings;\n\n\t\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t\t}\n\n\t\t},\n\n\t\tbind: function () {\n\n\t\t\tconst bindings = this._bindings;\n\n\t\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].bind();\n\n\t\t\t}\n\n\t\t},\n\n\t\tunbind: function () {\n\n\t\t\tconst bindings = this._bindings;\n\n\t\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].unbind();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\n\tfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\t\tthis.rootNode = rootNode;\n\n\t}\n\n\tObject.assign( PropertyBinding, {\n\n\t\tComposite: Composite,\n\n\t\tcreate: function ( root, path, parsedPath ) {\n\n\t\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t\t} else {\n\n\t\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Replaces spaces with underscores and removes unsupported characters from\n\t\t * node names, to ensure compatibility with parseTrackName().\n\t\t *\n\t\t * @param {string} name Node name to be sanitized.\n\t\t * @return {string}\n\t\t */\n\t\tsanitizeNodeName: function ( name ) {\n\n\t\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t\t},\n\n\t\tparseTrackName: function ( trackName ) {\n\n\t\t\tconst matches = _trackRe.exec( trackName );\n\n\t\t\tif ( ! matches ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\tconst results = {\n\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\tnodeName: matches[ 2 ],\n\t\t\t\tobjectName: matches[ 3 ],\n\t\t\t\tobjectIndex: matches[ 4 ],\n\t\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\t\tpropertyIndex: matches[ 6 ]\n\t\t\t};\n\n\t\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t// include '.' characters).\n\t\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\t\tresults.objectName = objectName;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t\t}\n\n\t\t\treturn results;\n\n\t\t},\n\n\t\tfindNode: function ( root, nodeName ) {\n\n\t\t\tif ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\t\treturn root;\n\n\t\t\t}\n\n\t\t\t// search into skeleton bones.\n\t\t\tif ( root.skeleton ) {\n\n\t\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\t\treturn bone;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// search into node subtree.\n\t\t\tif ( root.children ) {\n\n\t\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t};\n\n\t\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\t\tif ( subTreeNode ) {\n\n\t\t\t\t\treturn subTreeNode;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t\t// these are used to \"bind\" a nonexistent property\n\t\t_getValue_unavailable: function () {},\n\t\t_setValue_unavailable: function () {},\n\n\t\tBindingType: {\n\t\t\tDirect: 0,\n\t\t\tEntireArray: 1,\n\t\t\tArrayElement: 2,\n\t\t\tHasFromToArray: 3\n\t\t},\n\n\t\tVersioning: {\n\t\t\tNone: 0,\n\t\t\tNeedsUpdate: 1,\n\t\t\tMatrixWorldNeedsUpdate: 2\n\t\t},\n\n\t\tGetterByBindingType: [\n\n\t\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t\t},\n\n\t\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\t\tconst source = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t\t},\n\n\t\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t\t}\n\n\t\t],\n\n\t\tSetterByBindingTypeAndVersioning: [\n\n\t\t\t[\n\t\t\t\t// Direct\n\n\t\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// EntireArray\n\n\t\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// ArrayElement\n\n\t\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// HasToFromArray\n\n\t\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t]\n\n\t\t],\n\n\t\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\t\tthis.bind();\n\t\t\tthis.getValue( targetArray, offset );\n\n\t\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t\t// prototype version of these methods with one that represents\n\t\t\t// the bound state. When the property is not found, the methods\n\t\t\t// become no-ops.\n\n\t\t},\n\n\t\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\t\tthis.bind();\n\t\t\tthis.setValue( sourceArray, offset );\n\n\t\t},\n\n\t\t// create getter / setter pair for a property in the scene graph\n\t\tbind: function () {\n\n\t\t\tlet targetObject = this.node;\n\t\t\tconst parsedPath = this.parsedPath;\n\n\t\t\tconst objectName = parsedPath.objectName;\n\t\t\tconst propertyName = parsedPath.propertyName;\n\t\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\t\tif ( ! targetObject ) {\n\n\t\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\t\tthis.node = targetObject;\n\n\t\t\t}\n\n\t\t\t// set fail state so we can just 'return' on error\n\t\t\tthis.getValue = this._getValue_unavailable;\n\t\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t\t// ensure there is a value node\n\t\t\tif ( ! targetObject ) {\n\n\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( objectName ) {\n\n\t\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\t\tswitch ( objectName ) {\n\n\t\t\t\t\tcase 'materials':\n\n\t\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bones':\n\n\t\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t\t}\n\n\n\t\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// resolve property\n\t\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\t\tif ( nodeProperty === undefined ) {\n\n\t\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// determine versioning scheme\n\t\t\tlet versioning = this.Versioning.None;\n\n\t\t\tthis.targetObject = targetObject;\n\n\t\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t\t}\n\n\t\t\t// determine how the property gets bound\n\t\t\tlet bindingType = this.BindingType.Direct;\n\n\t\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t\t} else {\n\n\t\t\t\tthis.propertyName = propertyName;\n\n\t\t\t}\n\n\t\t\t// select getter / setter\n\t\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t\t},\n\n\t\tunbind: function () {\n\n\t\t\tthis.node = null;\n\n\t\t\t// back to the prototype version of getValue / setValue\n\t\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\t\tthis.getValue = this._getValue_unbound;\n\t\t\tthis.setValue = this._setValue_unbound;\n\n\t\t}\n\n\t} );\n\n\t// DECLARE ALIAS AFTER assign prototype\n\tObject.assign( PropertyBinding.prototype, {\n\n\t\t// initial state of these methods that calls 'bind'\n\t\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n\t} );\n\n\t/**\n\t *\n\t * A group of objects that receives a shared animation state.\n\t *\n\t * Usage:\n\t *\n\t *  - Add objects you would otherwise pass as 'root' to the\n\t *    constructor or the .clipAction method of AnimationMixer.\n\t *\n\t *  - Instead pass this object as 'root'.\n\t *\n\t *  - You can also add and remove objects later when the mixer\n\t *    is running.\n\t *\n\t * Note:\n\t *\n\t *    Objects of this class appear as one object to the mixer,\n\t *    so cache control of the individual objects must be done\n\t *    on the group.\n\t *\n\t * Limitation:\n\t *\n\t *  - The animated properties must be compatible among the\n\t *    all objects in the group.\n\t *\n\t *  - A single property can either be controlled through a\n\t *    target group or directly, but not both.\n\t */\n\n\tfunction AnimationObjectGroup() {\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tObject.assign( AnimationObjectGroup.prototype, {\n\n\t\tisAnimationObjectGroup: true,\n\n\t\tadd: function () {\n\n\t\t\tconst objects = this._objects,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tpaths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length;\n\n\t\t\tlet knownObject = undefined,\n\t\t\t\tnObjects = objects.length,\n\t\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tconst object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid;\n\t\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index === undefined ) {\n\n\t\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\t\tindex = nObjects ++;\n\t\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\t\tobjects.push( object );\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t\t} // else the object is already where we want it to be\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\tremove: function () {\n\n\t\t\tconst objects = this._objects,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length;\n\n\t\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tconst object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\t// remove & forget\n\t\tuncache: function () {\n\n\t\t\tconst objects = this._objects,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length;\n\n\t\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\t\tnObjects = objects.length;\n\n\t\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tconst object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} // cached or active\n\n\t\t\t\t} // if object is known\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\t\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t\t// returns an array of bindings for the given path that is changed\n\t\t\t// according to the contained objects in the group\n\n\t\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\t\tlet index = indicesByPath[ path ];\n\t\t\tconst bindings = this._bindings;\n\n\t\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tobjects = this._objects,\n\t\t\t\tnObjects = objects.length,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\t\tindex = bindings.length;\n\n\t\t\tindicesByPath[ path ] = index;\n\n\t\t\tpaths.push( path );\n\t\t\tparsedPaths.push( parsedPath );\n\t\t\tbindings.push( bindingsForPath );\n\n\t\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\t\tconst object = objects[ i ];\n\t\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t\t}\n\n\t\t\treturn bindingsForPath;\n\n\t\t},\n\n\t\tunsubscribe_: function ( path ) {\n\n\t\t\t// tells the group to forget about a property path and no longer\n\t\t\t// update the array previously obtained with 'subscribe_'\n\n\t\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\t\tindex = indicesByPath[ path ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tconst paths = this._paths,\n\t\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\t\tbindings = this._bindings,\n\t\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\t\tbindings[ index ] = lastBindings;\n\t\t\t\tbindings.pop();\n\n\t\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\t\tparsedPaths.pop();\n\n\t\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\t\tpaths.pop();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tclass AnimationAction {\n\n\t\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\t\tthis._mixer = mixer;\n\t\t\tthis._clip = clip;\n\t\t\tthis._localRoot = localRoot;\n\t\t\tthis.blendMode = blendMode;\n\n\t\t\tconst tracks = clip.tracks,\n\t\t\t\tnTracks = tracks.length,\n\t\t\t\tinterpolants = new Array( nTracks );\n\n\t\t\tconst interpolantSettings = {\n\t\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\t\tinterpolants[ i ] = interpolant;\n\t\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t\t}\n\n\t\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t\t// inside: PropertyMixer (managed by the mixer)\n\t\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\t\tthis._cacheIndex = null; // for the memory manager\n\t\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._weightInterpolant = null;\n\n\t\t\tthis.loop = LoopRepeat;\n\t\t\tthis._loopCount = - 1;\n\n\t\t\t// global mixer time when the action is to be started\n\t\t\t// it's set back to 'null' upon start of the action\n\t\t\tthis._startTime = null;\n\n\t\t\t// scaled local time of the action\n\t\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\t\tthis.time = 0;\n\n\t\t\tthis.timeScale = 1;\n\t\t\tthis._effectiveTimeScale = 1;\n\n\t\t\tthis.weight = 1;\n\t\t\tthis._effectiveWeight = 1;\n\n\t\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\t\tthis.paused = false; // true -> zero effective time scale\n\t\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t\t}\n\n\t\t// State & Scheduling\n\n\t\tplay() {\n\n\t\t\tthis._mixer._activateAction( this );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tstop() {\n\n\t\t\tthis._mixer._deactivateAction( this );\n\n\t\t\treturn this.reset();\n\n\t\t}\n\n\t\treset() {\n\n\t\t\tthis.paused = false;\n\t\t\tthis.enabled = true;\n\n\t\t\tthis.time = 0; // restart clip\n\t\t\tthis._loopCount = - 1;// forget previous loops\n\t\t\tthis._startTime = null;// forget scheduling\n\n\t\t\treturn this.stopFading().stopWarping();\n\n\t\t}\n\n\t\tisRunning() {\n\n\t\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t\t}\n\n\t\t// return true when play has been called\n\t\tisScheduled() {\n\n\t\t\treturn this._mixer._isActiveAction( this );\n\n\t\t}\n\n\t\tstartAt( time ) {\n\n\t\t\tthis._startTime = time;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetLoop( mode, repetitions ) {\n\n\t\t\tthis.loop = mode;\n\t\t\tthis.repetitions = repetitions;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t// Weight\n\n\t\t// set the weight stopping any scheduled fading\n\t\t// although .enabled = false yields an effective weight of zero, this\n\t\t// method does *not* change .enabled, because it would be confusing\n\t\tsetEffectiveWeight( weight ) {\n\n\t\t\tthis.weight = weight;\n\n\t\t\t// note: same logic as when updated at runtime\n\t\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\t\treturn this.stopFading();\n\n\t\t}\n\n\t\t// return the weight considering fading and .enabled\n\t\tgetEffectiveWeight() {\n\n\t\t\treturn this._effectiveWeight;\n\n\t\t}\n\n\t\tfadeIn( duration ) {\n\n\t\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t\t}\n\n\t\tfadeOut( duration ) {\n\n\t\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t\t}\n\n\t\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\t\tfadeOutAction.fadeOut( duration );\n\t\t\tthis.fadeIn( duration );\n\n\t\t\tif ( warp ) {\n\n\t\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t\t}\n\n\t\tstopFading() {\n\n\t\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\t\tif ( weightInterpolant !== null ) {\n\n\t\t\t\tthis._weightInterpolant = null;\n\t\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t// Time Scale Control\n\n\t\t// set the time scale stopping any scheduled warping\n\t\t// although .paused = true yields an effective time scale of zero, this\n\t\t// method does *not* change .paused, because it would be confusing\n\t\tsetEffectiveTimeScale( timeScale ) {\n\n\t\t\tthis.timeScale = timeScale;\n\t\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\t\treturn this.stopWarping();\n\n\t\t}\n\n\t\t// return the time scale considering warping and .paused\n\t\tgetEffectiveTimeScale() {\n\n\t\t\treturn this._effectiveTimeScale;\n\n\t\t}\n\n\t\tsetDuration( duration ) {\n\n\t\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\t\treturn this.stopWarping();\n\n\t\t}\n\n\t\tsyncWith( action ) {\n\n\t\t\tthis.time = action.time;\n\t\t\tthis.timeScale = action.timeScale;\n\n\t\t\treturn this.stopWarping();\n\n\t\t}\n\n\t\thalt( duration ) {\n\n\t\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t\t}\n\n\t\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\t\tconst mixer = this._mixer,\n\t\t\t\tnow = mixer.time,\n\t\t\t\ttimeScale = this.timeScale;\n\n\t\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant === null ) {\n\n\t\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t\t}\n\n\t\t\tconst times = interpolant.parameterPositions,\n\t\t\t\tvalues = interpolant.sampleValues;\n\n\t\t\ttimes[ 0 ] = now;\n\t\t\ttimes[ 1 ] = now + duration;\n\n\t\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tstopWarping() {\n\n\t\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\t\tthis._timeScaleInterpolant = null;\n\t\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t// Object Accessors\n\n\t\tgetMixer() {\n\n\t\t\treturn this._mixer;\n\n\t\t}\n\n\t\tgetClip() {\n\n\t\t\treturn this._clip;\n\n\t\t}\n\n\t\tgetRoot() {\n\n\t\t\treturn this._localRoot || this._mixer._root;\n\n\t\t}\n\n\t\t// Interna\n\n\t\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t\t// called by the mixer\n\n\t\t\tif ( ! this.enabled ) {\n\n\t\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\t\tthis._updateWeight( time );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst startTime = this._startTime;\n\n\t\t\tif ( startTime !== null ) {\n\n\t\t\t\t// check for scheduled start of action\n\n\t\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t\t}\n\n\t\t\t\t// start\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t\t// apply time scale and advance time\n\n\t\t\tdeltaTime *= this._updateTimeScale( time );\n\t\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t\t// note: _updateTime may disable the action resulting in\n\t\t\t// an effective weight of 0\n\n\t\t\tconst weight = this._updateWeight( time );\n\n\t\t\tif ( weight > 0 ) {\n\n\t\t\t\tconst interpolants = this._interpolants;\n\t\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_updateWeight( time ) {\n\n\t\t\tlet weight = 0;\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\tweight = this.weight;\n\t\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._effectiveWeight = weight;\n\t\t\treturn weight;\n\n\t\t}\n\n\t\t_updateTimeScale( time ) {\n\n\t\t\tlet timeScale = 0;\n\n\t\t\tif ( ! this.paused ) {\n\n\t\t\t\ttimeScale = this.timeScale;\n\n\t\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._effectiveTimeScale = timeScale;\n\t\t\treturn timeScale;\n\n\t\t}\n\n\t\t_updateTime( deltaTime ) {\n\n\t\t\tconst duration = this._clip.duration;\n\t\t\tconst loop = this.loop;\n\n\t\t\tlet time = this.time + deltaTime;\n\t\t\tlet loopCount = this._loopCount;\n\n\t\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\t\tif ( deltaTime === 0 ) {\n\n\t\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t\t}\n\n\t\t\tif ( loop === LoopOnce ) {\n\n\t\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t\t// just started\n\n\t\t\t\t\tthis._loopCount = 0;\n\t\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t\t}\n\n\t\t\t\thandle_stop: {\n\n\t\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\t\ttime = duration;\n\n\t\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\t\ttime = 0;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t\t// just started\n\n\t\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t\t// wrap around\n\n\t\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// keep running\n\n\t\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t}\n\n\t\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\t\treturn duration - time;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t}\n\n\t\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\t\tconst settings = this._interpolantSettings;\n\n\t\t\tif ( pingPong ) {\n\n\t\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t\t} else {\n\n\t\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\t\tif ( atStart ) {\n\n\t\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t\t}\n\n\t\t\t\tif ( atEnd ) {\n\n\t\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\t\tconst mixer = this._mixer, now = mixer.time;\n\t\t\tlet interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant === null ) {\n\n\t\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t\t}\n\n\t\t\tconst times = interpolant.parameterPositions,\n\t\t\t\tvalues = interpolant.sampleValues;\n\n\t\t\ttimes[ 0 ] = now;\n\t\t\tvalues[ 0 ] = weightNow;\n\t\t\ttimes[ 1 ] = now + duration;\n\t\t\tvalues[ 1 ] = weightThen;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tfunction AnimationMixer( root ) {\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\tAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), {\n\n\t\tconstructor: AnimationMixer,\n\n\t\t_bindAction: function ( action, prototypeAction ) {\n\n\t\t\tconst root = action._localRoot || this._root,\n\t\t\t\ttracks = action._clip.tracks,\n\t\t\t\tnTracks = tracks.length,\n\t\t\t\tbindings = action._propertyBindings,\n\t\t\t\tinterpolants = action._interpolants,\n\t\t\t\trootUuid = root.uuid,\n\t\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\t\tif ( bindingsByName === undefined ) {\n\n\t\t\t\tbindingsByName = {};\n\t\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\t\tconst track = tracks[ i ],\n\t\t\t\t\ttrackName = track.name;\n\n\t\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t\t}\n\n\t\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t\t}\n\n\t\t},\n\n\t\t_activateAction: function ( action ) {\n\n\t\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\t\tthis._bindAction( action,\n\t\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t\t}\n\n\t\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t\t// increment reference counts / sort out state\n\t\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._lendAction( action );\n\n\t\t\t}\n\n\t\t},\n\n\t\t_deactivateAction: function ( action ) {\n\n\t\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t\t// decrement reference counts / sort out state\n\t\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._takeBackAction( action );\n\n\t\t\t}\n\n\t\t},\n\n\t\t// Memory manager\n\n\t\t_initMemoryManager: function () {\n\n\t\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\t\tthis._nActiveActions = 0;\n\n\t\t\tthis._actionsByClip = {};\n\t\t\t// inside:\n\t\t\t// {\n\t\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t\t// }\n\n\n\t\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\t\tthis._nActiveBindings = 0;\n\n\t\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\t\tthis._controlInterpolants = []; // same game as above\n\t\t\tthis._nActiveControlInterpolants = 0;\n\n\t\t\tconst scope = this;\n\n\t\t\tthis.stats = {\n\n\t\t\t\tactions: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbindings: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcontrolInterpolants: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t},\n\n\t\t// Memory management for AnimationAction objects\n\n\t\t_isActiveAction: function ( action ) {\n\n\t\t\tconst index = action._cacheIndex;\n\t\t\treturn index !== null && index < this._nActiveActions;\n\n\t\t},\n\n\t\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\t\tconst actions = this._actions,\n\t\t\t\tactionsByClip = this._actionsByClip;\n\n\t\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip === undefined ) {\n\n\t\t\t\tactionsForClip = {\n\n\t\t\t\t\tknownActions: [ action ],\n\t\t\t\t\tactionByRoot: {}\n\n\t\t\t\t};\n\n\t\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t\t} else {\n\n\t\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\t\tknownActions.push( action );\n\n\t\t\t}\n\n\t\t\taction._cacheIndex = actions.length;\n\t\t\tactions.push( action );\n\n\t\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t\t},\n\n\t\t_removeInactiveAction: function ( action ) {\n\n\t\t\tconst actions = this._actions,\n\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\t\tcacheIndex = action._cacheIndex;\n\n\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\tactions.pop();\n\n\t\t\taction._cacheIndex = null;\n\n\n\t\t\tconst clipUuid = action._clip.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\t\tlastKnownAction =\n\t\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\t\tknownActionsForClip.pop();\n\n\t\t\taction._byClipCacheIndex = null;\n\n\n\t\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\t\tdelete actionByRoot[ rootUuid ];\n\n\t\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t\t}\n\n\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t},\n\n\t\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_lendAction: function ( action ) {\n\n\t\t\t// [ active actions |  inactive actions  ]\n\t\t\t// [  active actions >| inactive actions ]\n\t\t\t//                 s        a\n\t\t\t//                  <-swap->\n\t\t\t//                 a        s\n\n\t\t\tconst actions = this._actions,\n\t\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\t\taction._cacheIndex = lastActiveIndex;\n\t\t\tactions[ lastActiveIndex ] = action;\n\n\t\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t\t},\n\n\t\t_takeBackAction: function ( action ) {\n\n\t\t\t// [  active actions  | inactive actions ]\n\t\t\t// [ active actions |< inactive actions  ]\n\t\t\t//        a        s\n\t\t\t//         <-swap->\n\t\t\t//        s        a\n\n\t\t\tconst actions = this._actions,\n\t\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\t\taction._cacheIndex = firstInactiveIndex;\n\t\t\tactions[ firstInactiveIndex ] = action;\n\n\t\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t\t},\n\n\t\t// Memory management for PropertyMixer objects\n\n\t\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindings = this._bindings;\n\n\t\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\t\tif ( bindingByName === undefined ) {\n\n\t\t\t\tbindingByName = {};\n\t\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t\t}\n\n\t\t\tbindingByName[ trackName ] = binding;\n\n\t\t\tbinding._cacheIndex = bindings.length;\n\t\t\tbindings.push( binding );\n\n\t\t},\n\n\t\t_removeInactiveBinding: function ( binding ) {\n\n\t\t\tconst bindings = this._bindings,\n\t\t\t\tpropBinding = binding.binding,\n\t\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\t\ttrackName = propBinding.path,\n\t\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\t\tbindings.pop();\n\n\t\t\tdelete bindingByName[ trackName ];\n\n\t\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t\t}\n\n\t\t},\n\n\t\t_lendBinding: function ( binding ) {\n\n\t\t\tconst bindings = this._bindings,\n\t\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\t\tbinding._cacheIndex = lastActiveIndex;\n\t\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t\t},\n\n\t\t_takeBackBinding: function ( binding ) {\n\n\t\t\tconst bindings = this._bindings,\n\t\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t\t},\n\n\n\t\t// Memory management of Interpolants for weight and time scale\n\n\t\t_lendControlInterpolant: function () {\n\n\t\t\tconst interpolants = this._controlInterpolants,\n\t\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\t\tif ( interpolant === undefined ) {\n\n\t\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t\t}\n\n\t\t\treturn interpolant;\n\n\t\t},\n\n\t\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\t\tconst interpolants = this._controlInterpolants,\n\t\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t\t},\n\n\t\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t\t// return an action for a clip optionally using a custom root target\n\t\t// object (this method allocates a lot of dynamic memory in case a\n\t\t// previously unknown clip/root combination is specified)\n\t\tclipAction: function ( clip, optionalRoot, blendMode ) {\n\n\t\t\tconst root = optionalRoot || this._root,\n\t\t\t\trootUuid = root.uuid;\n\n\t\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\t\tlet prototypeAction = null;\n\n\t\t\tif ( blendMode === undefined ) {\n\n\t\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\t\treturn existingAction;\n\n\t\t\t\t}\n\n\t\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t\t// the bindings again but can just copy\n\t\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t\t// also, take the clip from the prototype action\n\t\t\t\tif ( clipObject === null )\n\t\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t\t}\n\n\t\t\t// clip must be known when specified via string\n\t\t\tif ( clipObject === null ) return null;\n\n\t\t\t// allocate all resources required to run it\n\t\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t\t// and make the action known to the memory manager\n\t\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\t\treturn newAction;\n\n\t\t},\n\n\t\t// get an existing action\n\t\texistingAction: function ( clip, optionalRoot ) {\n\n\t\t\tconst root = optionalRoot || this._root,\n\t\t\t\trootUuid = root.uuid,\n\n\t\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\t// deactivates all previously scheduled actions\n\t\tstopAllAction: function () {\n\n\t\t\tconst actions = this._actions,\n\t\t\t\tnActions = this._nActiveActions;\n\n\t\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\t\tactions[ i ].stop();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// advance the time and update apply the animation\n\t\tupdate: function ( deltaTime ) {\n\n\t\t\tdeltaTime *= this.timeScale;\n\n\t\t\tconst actions = this._actions,\n\t\t\t\tnActions = this._nActiveActions,\n\n\t\t\t\ttime = this.time += deltaTime,\n\t\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t\t// run active actions\n\n\t\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\t\tconst action = actions[ i ];\n\n\t\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t\t}\n\n\t\t\t// update scene graph\n\n\t\t\tconst bindings = this._bindings,\n\t\t\t\tnBindings = this._nActiveBindings;\n\n\t\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// Allows you to seek to a specific time in an animation.\n\t\tsetTime: function ( timeInSeconds ) {\n\n\t\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t\t}\n\n\t\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t\t},\n\n\t\t// return this mixer's root target object\n\t\tgetRoot: function () {\n\n\t\t\treturn this._root;\n\n\t\t},\n\n\t\t// free all resources specific to a particular clip\n\t\tuncacheClip: function ( clip ) {\n\n\t\t\tconst actions = this._actions,\n\t\t\t\tclipUuid = clip.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t\t// iteration state and also require updating the state we can\n\t\t\t\t// just throw away\n\n\t\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\t\taction._cacheIndex = null;\n\t\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\t\tactions.pop();\n\n\t\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t\t}\n\n\t\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t\t}\n\n\t\t},\n\n\t\t// free all resources specific to a particular root target object\n\t\tuncacheRoot: function ( root ) {\n\n\t\t\tconst rootUuid = root.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip;\n\n\t\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\t\tif ( action !== undefined ) {\n\n\t\t\t\t\tthis._deactivateAction( action );\n\t\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\t\tif ( bindingByName !== undefined ) {\n\n\t\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t// remove a targeted clip from the cache\n\t\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\t\tif ( action !== null ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tclass Uniform {\n\n\t\tconstructor( value ) {\n\n\t\t\tif ( typeof value === 'string' ) {\n\n\t\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\t\tvalue = arguments[ 1 ];\n\n\t\t\t}\n\n\t\t\tthis.value = value;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t\t}\n\n\t}\n\n\tfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\t\tInterleavedBuffer.call( this, array, stride );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\t\tconstructor: InstancedInterleavedBuffer,\n\n\t\tisInstancedInterleavedBuffer: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function ( data ) {\n\n\t\t\tconst ib = InterleavedBuffer.prototype.clone.call( this, data );\n\n\t\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\t\treturn ib;\n\n\t\t},\n\n\t\ttoJSON: function ( data ) {\n\n\t\t\tconst json = InterleavedBuffer.prototype.toJSON.call( this, data );\n\n\t\t\tjson.isInstancedInterleavedBuffer = true;\n\t\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\t\treturn json;\n\n\t\t}\n\n\t} );\n\n\tfunction GLBufferAttribute( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tObject.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( GLBufferAttribute.prototype, {\n\n\t\tisGLBufferAttribute: true,\n\n\t\tsetBuffer: function ( buffer ) {\n\n\t\t\tthis.buffer = buffer;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetType: function ( type, elementSize ) {\n\n\t\t\tthis.type = type;\n\t\t\tthis.elementSize = elementSize;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetItemSize: function ( itemSize ) {\n\n\t\t\tthis.itemSize = itemSize;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetCount: function ( count ) {\n\n\t\t\tthis.count = count;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t} );\n\n\tfunction Raycaster( origin, direction, near, far ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near || 0;\n\t\tthis.far = far || Infinity;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t\tObject.defineProperties( this.params, {\n\t\t\tPointCloud: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\t\treturn this.Points;\n\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t}\n\n\tfunction ascSort( a, b ) {\n\n\t\treturn a.distance - b.distance;\n\n\t}\n\n\tfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\t\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\t\tobject.raycast( raycaster, intersects );\n\n\t\t}\n\n\t\tif ( recursive === true ) {\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tObject.assign( Raycaster.prototype, {\n\n\t\tset: function ( origin, direction ) {\n\n\t\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\t\tthis.ray.set( origin, direction );\n\n\t\t},\n\n\t\tsetFromCamera: function ( coords, camera ) {\n\n\t\t\tif ( camera && camera.isPerspectiveCamera ) {\n\n\t\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\t\tthis.camera = camera;\n\n\t\t\t} else if ( camera && camera.isOrthographicCamera ) {\n\n\t\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\t\tthis.camera = camera;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t\t}\n\n\t\t},\n\n\t\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\t\tconst intersects = optionalTarget || [];\n\n\t\t\tintersectObject( object, this, intersects, recursive );\n\n\t\t\tintersects.sort( ascSort );\n\n\t\t\treturn intersects;\n\n\t\t},\n\n\t\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\t\tconst intersects = optionalTarget || [];\n\n\t\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\t\treturn intersects;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t\t}\n\n\t\t\tintersects.sort( ascSort );\n\n\t\t\treturn intersects;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n\t *\n\t * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n\t * The azimuthal angle (theta) is measured from the positive z-axis.\n\t */\n\n\tclass Spherical {\n\n\t\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.phi = phi; // polar angle\n\t\t\tthis.theta = theta; // azimuthal angle\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tset( radius, phi, theta ) {\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.phi = phi;\n\t\t\tthis.theta = theta;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( other ) {\n\n\t\t\tthis.radius = other.radius;\n\t\t\tthis.phi = other.phi;\n\t\t\tthis.theta = other.theta;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t// restrict phi to be betwee EPS and PI-EPS\n\t\tmakeSafe() {\n\n\t\t\tconst EPS = 0.000001;\n\t\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromVector3( v ) {\n\n\t\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t\t}\n\n\t\tsetFromCartesianCoords( x, y, z ) {\n\n\t\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\t\tif ( this.radius === 0 ) {\n\n\t\t\t\tthis.theta = 0;\n\t\t\t\tthis.phi = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\t\tthis.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n\t */\n\n\tclass Cylindrical {\n\n\t\tconstructor( radius, theta, y ) {\n\n\t\t\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\t\t\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\t\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tset( radius, theta, y ) {\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.theta = theta;\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( other ) {\n\n\t\t\tthis.radius = other.radius;\n\t\t\tthis.theta = other.theta;\n\t\t\tthis.y = other.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromVector3( v ) {\n\n\t\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t\t}\n\n\t\tsetFromCartesianCoords( x, y, z ) {\n\n\t\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tconst _vector$8 = /*@__PURE__*/ new Vector2();\n\n\tclass Box2 {\n\n\t\tconstructor( min, max ) {\n\n\t\t\tObject.defineProperty( this, 'isBox2', { value: true } );\n\n\t\t\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\t\t\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n\t\t}\n\n\t\tset( min, max ) {\n\n\t\t\tthis.min.copy( min );\n\t\t\tthis.max.copy( max );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromPoints( points ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tsetFromCenterAndSize( center, size ) {\n\n\t\t\tconst halfSize = _vector$8.copy( size ).multiplyScalar( 0.5 );\n\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( box ) {\n\n\t\t\tthis.min.copy( box.min );\n\t\t\tthis.max.copy( box.max );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmakeEmpty() {\n\n\t\t\tthis.min.x = this.min.y = + Infinity;\n\t\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tisEmpty() {\n\n\t\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t\t}\n\n\t\tgetCenter( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t\t}\n\n\t\tgetSize( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t\t}\n\n\t\texpandByPoint( point ) {\n\n\t\t\tthis.min.min( point );\n\t\t\tthis.max.max( point );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\texpandByVector( vector ) {\n\n\t\t\tthis.min.sub( vector );\n\t\t\tthis.max.add( vector );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\texpandByScalar( scalar ) {\n\n\t\t\tthis.min.addScalar( - scalar );\n\t\t\tthis.max.addScalar( scalar );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcontainsPoint( point ) {\n\n\t\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t\t}\n\n\t\tcontainsBox( box ) {\n\n\t\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t\t}\n\n\t\tgetParameter( point, target ) {\n\n\t\t\t// This can potentially have a divide by zero if the box\n\t\t\t// has a size dimension of 0.\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn target.set(\n\t\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t\t);\n\n\t\t}\n\n\t\tintersectsBox( box ) {\n\n\t\t\t// using 4 splitting planes to rule out intersections\n\n\t\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t\t}\n\n\t\tclampPoint( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t\t}\n\n\t\tdistanceToPoint( point ) {\n\n\t\t\tconst clampedPoint = _vector$8.copy( point ).clamp( this.min, this.max );\n\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t}\n\n\t\tintersect( box ) {\n\n\t\t\tthis.min.max( box.min );\n\t\t\tthis.max.min( box.max );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tunion( box ) {\n\n\t\t\tthis.min.min( box.min );\n\t\t\tthis.max.max( box.max );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\ttranslate( offset ) {\n\n\t\t\tthis.min.add( offset );\n\t\t\tthis.max.add( offset );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( box ) {\n\n\t\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t\t}\n\n\t}\n\n\tconst _startP = /*@__PURE__*/ new Vector3();\n\tconst _startEnd = /*@__PURE__*/ new Vector3();\n\n\tclass Line3 {\n\n\t\tconstructor( start, end ) {\n\n\t\t\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\t\t\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n\t\t}\n\n\t\tset( start, end ) {\n\n\t\t\tthis.start.copy( start );\n\t\t\tthis.end.copy( end );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tclone() {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t\tcopy( line ) {\n\n\t\t\tthis.start.copy( line.start );\n\t\t\tthis.end.copy( line.end );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tgetCenter( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t\t}\n\n\t\tdelta( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.subVectors( this.end, this.start );\n\n\t\t}\n\n\t\tdistanceSq() {\n\n\t\t\treturn this.start.distanceToSquared( this.end );\n\n\t\t}\n\n\t\tdistance() {\n\n\t\t\treturn this.start.distanceTo( this.end );\n\n\t\t}\n\n\t\tat( t, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t\t}\n\n\t\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t\t_startP.subVectors( point, this.start );\n\t\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\t\tlet t = startEnd_startP / startEnd2;\n\n\t\t\tif ( clampToLine ) {\n\n\t\t\t\tt = MathUtils.clamp( t, 0, 1 );\n\n\t\t\t}\n\n\t\t\treturn t;\n\n\t\t}\n\n\t\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t\t}\n\n\t\tapplyMatrix4( matrix ) {\n\n\t\t\tthis.start.applyMatrix4( matrix );\n\t\t\tthis.end.applyMatrix4( matrix );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tequals( line ) {\n\n\t\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t\t}\n\n\t}\n\n\tfunction ImmediateRenderObject( material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.material = material;\n\t\tthis.render = function ( /* renderCallback */ ) {};\n\n\t\tthis.hasPositions = false;\n\t\tthis.hasNormals = false;\n\t\tthis.hasColors = false;\n\t\tthis.hasUvs = false;\n\n\t\tthis.positionArray = null;\n\t\tthis.normalArray = null;\n\t\tthis.colorArray = null;\n\t\tthis.uvArray = null;\n\n\t\tthis.count = 0;\n\n\t}\n\n\tImmediateRenderObject.prototype = Object.create( Object3D.prototype );\n\tImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\n\tImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n\tconst _vector$9 = /*@__PURE__*/ new Vector3();\n\n\tclass SpotLightHelper extends Object3D {\n\n\t\tconstructor( light, color ) {\n\n\t\t\tsuper();\n\t\t\tthis.light = light;\n\t\t\tthis.light.updateMatrixWorld();\n\n\t\t\tthis.matrix = light.matrixWorld;\n\t\t\tthis.matrixAutoUpdate = false;\n\n\t\t\tthis.color = color;\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positions = [\n\t\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t\t];\n\n\t\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\t\tpositions.push(\n\t\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\t\tthis.cone = new LineSegments( geometry, material );\n\t\t\tthis.add( this.cone );\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tdispose() {\n\n\t\t\tthis.cone.geometry.dispose();\n\t\t\tthis.cone.material.dispose();\n\n\t\t}\n\n\t\tupdate() {\n\n\t\t\tthis.light.updateMatrixWorld();\n\n\t\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t\t_vector$9.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\t\tthis.cone.lookAt( _vector$9 );\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst _vector$a = /*@__PURE__*/ new Vector3();\n\tconst _boneMatrix = /*@__PURE__*/ new Matrix4();\n\tconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\n\tclass SkeletonHelper extends LineSegments {\n\n\t\tconstructor( object ) {\n\n\t\t\tconst bones = getBoneList( object );\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst vertices = [];\n\t\t\tconst colors = [];\n\n\t\t\tconst color1 = new Color( 0, 0, 1 );\n\t\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tconst bone = bones[ i ];\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\t\tsuper( geometry, material );\n\n\t\t\tthis.type = 'SkeletonHelper';\n\t\t\tthis.isSkeletonHelper = true;\n\n\t\t\tthis.root = object;\n\t\t\tthis.bones = bones;\n\n\t\t\tthis.matrix = object.matrixWorld;\n\t\t\tthis.matrixAutoUpdate = false;\n\n\t\t}\n\n\t\tupdateMatrixWorld( force ) {\n\n\t\t\tconst bones = this.bones;\n\n\t\t\tconst geometry = this.geometry;\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tconst bone = bones[ i ];\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t\t_vector$a.setFromMatrixPosition( _boneMatrix );\n\t\t\t\t\tposition.setXYZ( j, _vector$a.x, _vector$a.y, _vector$a.z );\n\n\t\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t\t_vector$a.setFromMatrixPosition( _boneMatrix );\n\t\t\t\t\tposition.setXYZ( j + 1, _vector$a.x, _vector$a.y, _vector$a.z );\n\n\t\t\t\t\tj += 2;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\t\tsuper.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\n\tfunction getBoneList( object ) {\n\n\t\tconst boneList = [];\n\n\t\tif ( object && object.isBone ) {\n\n\t\t\tboneList.push( object );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t\t}\n\n\t\treturn boneList;\n\n\t}\n\n\tclass PointLightHelper extends Mesh {\n\n\t\tconstructor( light, sphereSize, color ) {\n\n\t\t\tconst geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\t\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\t\tsuper( geometry, material );\n\n\t\t\tthis.light = light;\n\t\t\tthis.light.updateMatrixWorld();\n\n\t\t\tthis.color = color;\n\n\t\t\tthis.type = 'PointLightHelper';\n\n\t\t\tthis.matrix = this.light.matrixWorld;\n\t\t\tthis.matrixAutoUpdate = false;\n\n\t\t\tthis.update();\n\n\n\t\t\t/*\n\t\t// TODO: delete this comment?\n\t\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\t\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\t\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\t\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\t\tconst d = light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\n\t\tthis.add( this.lightDistance );\n\t\t*/\n\n\t\t}\n\n\t\tdispose() {\n\n\t\t\tthis.geometry.dispose();\n\t\t\tthis.material.dispose();\n\n\t\t}\n\n\t\tupdate() {\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t\t}\n\n\t\t\t/*\n\t\t\tconst d = this.light.distance;\n\n\t\t\tif ( d === 0.0 ) {\n\n\t\t\t\tthis.lightDistance.visible = false;\n\n\t\t\t} else {\n\n\t\t\t\tthis.lightDistance.visible = true;\n\t\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t\t}\n\t\t\t*/\n\n\t\t}\n\n\t}\n\n\tconst _vector$b = /*@__PURE__*/ new Vector3();\n\tconst _color1 = /*@__PURE__*/ new Color();\n\tconst _color2 = /*@__PURE__*/ new Color();\n\n\tclass HemisphereLightHelper extends Object3D {\n\n\t\tconstructor( light, size, color ) {\n\n\t\t\tsuper();\n\t\t\tthis.light = light;\n\t\t\tthis.light.updateMatrixWorld();\n\n\t\t\tthis.matrix = light.matrixWorld;\n\t\t\tthis.matrixAutoUpdate = false;\n\n\t\t\tthis.color = color;\n\n\t\t\tconst geometry = new OctahedronBufferGeometry( size );\n\t\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\t\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tdispose() {\n\n\t\t\tthis.children[ 0 ].geometry.dispose();\n\t\t\tthis.children[ 0 ].material.dispose();\n\n\t\t}\n\n\t\tupdate() {\n\n\t\t\tconst mesh = this.children[ 0 ];\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t\t_color1.copy( this.light.color );\n\t\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t\t}\n\n\t\t\t\tcolors.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tmesh.lookAt( _vector$b.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t\t}\n\n\t}\n\n\tclass GridHelper extends LineSegments {\n\n\t\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\t\tcolor1 = new Color( color1 );\n\t\t\tcolor2 = new Color( color2 );\n\n\t\t\tconst center = divisions / 2;\n\t\t\tconst step = size / divisions;\n\t\t\tconst halfSize = size / 2;\n\n\t\t\tconst vertices = [], colors = [];\n\n\t\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\t\tsuper( geometry, material );\n\n\t\t\tthis.type = 'GridHelper';\n\n\t\t}\n\n\t}\n\n\tclass PolarGridHelper extends LineSegments {\n\n\t\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\t\tcolor1 = new Color( color1 );\n\t\t\tcolor2 = new Color( color2 );\n\n\t\t\tconst vertices = [];\n\t\t\tconst colors = [];\n\n\t\t\t// create the radials\n\n\t\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\t// create the circles\n\n\t\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t\t// first vertex\n\n\t\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t\t// second vertex\n\n\t\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\t\tsuper( geometry, material );\n\n\t\t\tthis.type = 'PolarGridHelper';\n\n\t\t}\n\n\t}\n\n\tconst _v1$6 = /*@__PURE__*/ new Vector3();\n\tconst _v2$3 = /*@__PURE__*/ new Vector3();\n\tconst _v3$1 = /*@__PURE__*/ new Vector3();\n\n\tclass DirectionalLightHelper extends Object3D {\n\n\t\tconstructor( light, size, color ) {\n\n\t\t\tsuper();\n\t\t\tthis.light = light;\n\t\t\tthis.light.updateMatrixWorld();\n\n\t\t\tthis.matrix = light.matrixWorld;\n\t\t\tthis.matrixAutoUpdate = false;\n\n\t\t\tthis.color = color;\n\n\t\t\tif ( size === undefined ) size = 1;\n\n\t\t\tlet geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t\t- size, size, 0,\n\t\t\t\tsize, size, 0,\n\t\t\t\tsize, - size, 0,\n\t\t\t\t- size, - size, 0,\n\t\t\t\t- size, size, 0\n\t\t\t], 3 ) );\n\n\t\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\t\tthis.lightPlane = new Line( geometry, material );\n\t\t\tthis.add( this.lightPlane );\n\n\t\t\tgeometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\t\tthis.targetLine = new Line( geometry, material );\n\t\t\tthis.add( this.targetLine );\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tdispose() {\n\n\t\t\tthis.lightPlane.geometry.dispose();\n\t\t\tthis.lightPlane.material.dispose();\n\t\t\tthis.targetLine.geometry.dispose();\n\t\t\tthis.targetLine.material.dispose();\n\n\t\t}\n\n\t\tupdate() {\n\n\t\t\t_v1$6.setFromMatrixPosition( this.light.matrixWorld );\n\t\t\t_v2$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t\t_v3$1.subVectors( _v2$3, _v1$6 );\n\n\t\t\tthis.lightPlane.lookAt( _v2$3 );\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t\t}\n\n\t\t\tthis.targetLine.lookAt( _v2$3 );\n\t\t\tthis.targetLine.scale.z = _v3$1.length();\n\n\t\t}\n\n\t}\n\n\tconst _vector$c = /*@__PURE__*/ new Vector3();\n\tconst _camera = /*@__PURE__*/ new Camera();\n\n\t/**\n\t *\t- shows frustum, line of sight and up of the camera\n\t *\t- suitable for fast updates\n\t * \t- based on frustum visualization in lightgl.js shadowmap example\n\t *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n\t */\n\n\tclass CameraHelper extends LineSegments {\n\n\t\tconstructor( camera ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\t\tconst vertices = [];\n\t\t\tconst colors = [];\n\n\t\t\tconst pointMap = {};\n\n\t\t\t// colors\n\n\t\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\t\tconst colorCone = new Color( 0xff0000 );\n\t\t\tconst colorUp = new Color( 0x00aaff );\n\t\t\tconst colorTarget = new Color( 0xffffff );\n\t\t\tconst colorCross = new Color( 0x333333 );\n\n\t\t\t// near\n\n\t\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t\t// far\n\n\t\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t\t// sides\n\n\t\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t\t// cone\n\n\t\t\taddLine( 'p', 'n1', colorCone );\n\t\t\taddLine( 'p', 'n2', colorCone );\n\t\t\taddLine( 'p', 'n3', colorCone );\n\t\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t\t// up\n\n\t\t\taddLine( 'u1', 'u2', colorUp );\n\t\t\taddLine( 'u2', 'u3', colorUp );\n\t\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t\t// target\n\n\t\t\taddLine( 'c', 't', colorTarget );\n\t\t\taddLine( 'p', 'c', colorCross );\n\n\t\t\t// cross\n\n\t\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\t\tfunction addLine( a, b, color ) {\n\n\t\t\t\taddPoint( a, color );\n\t\t\t\taddPoint( b, color );\n\n\t\t\t}\n\n\t\t\tfunction addPoint( id, color ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\tsuper( geometry, material );\n\n\t\t\tthis.type = 'CameraHelper';\n\n\t\t\tthis.camera = camera;\n\t\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\t\tthis.matrix = camera.matrixWorld;\n\t\t\tthis.matrixAutoUpdate = false;\n\n\t\t\tthis.pointMap = pointMap;\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tupdate() {\n\n\t\t\tconst geometry = this.geometry;\n\t\t\tconst pointMap = this.pointMap;\n\n\t\t\tconst w = 1, h = 1;\n\n\t\t\t// we need just camera projection matrix inverse\n\t\t\t// world matrix must be identity\n\n\t\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t\t// center / target\n\n\t\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t\t// near\n\n\t\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t\t// far\n\n\t\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t\t// up\n\n\t\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t\t// cross\n\n\t\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\n\tfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t\t_vector$c.set( x, y, z ).unproject( camera );\n\n\t\tconst points = pointMap[ point ];\n\n\t\tif ( points !== undefined ) {\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tposition.setXYZ( points[ i ], _vector$c.x, _vector$c.y, _vector$c.z );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst _box$3 = /*@__PURE__*/ new Box3();\n\n\tclass BoxHelper extends LineSegments {\n\n\t\tconstructor( object, color = 0xffff00 ) {\n\n\t\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\t\tthis.object = object;\n\t\t\tthis.type = 'BoxHelper';\n\n\t\t\tthis.matrixAutoUpdate = false;\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tupdate( object ) {\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t\t}\n\n\t\t\tif ( this.object !== undefined ) {\n\n\t\t\t\t_box$3.setFromObject( this.object );\n\n\t\t\t}\n\n\t\t\tif ( _box$3.isEmpty() ) return;\n\n\t\t\tconst min = _box$3.min;\n\t\t\tconst max = _box$3.max;\n\n\t\t\t/*\n\t\t\t\t5____4\n\t\t\t1/___0/|\n\t\t\t| 6__|_7\n\t\t\t2/___3/\n\n\t\t\t0: max.x, max.y, max.z\n\t\t\t1: min.x, max.y, max.z\n\t\t\t2: min.x, min.y, max.z\n\t\t\t3: max.x, min.y, max.z\n\t\t\t4: max.x, max.y, min.z\n\t\t\t5: min.x, max.y, min.z\n\t\t\t6: min.x, min.y, min.z\n\t\t\t7: max.x, min.y, min.z\n\t\t\t*/\n\n\t\t\tconst position = this.geometry.attributes.position;\n\t\t\tconst array = position.array;\n\n\t\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t\tthis.geometry.computeBoundingSphere();\n\n\n\t\t}\n\n\t\tsetFromObject( object ) {\n\n\t\t\tthis.object = object;\n\t\t\tthis.update();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcopy( source ) {\n\n\t\t\tLineSegments.prototype.copy.call( this, source );\n\n\t\t\tthis.object = source.object;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tclass Box3Helper extends LineSegments {\n\n\t\tconstructor( box, color = 0xffff00 ) {\n\n\t\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\t\tthis.box = box;\n\n\t\t\tthis.type = 'Box3Helper';\n\n\t\t\tthis.geometry.computeBoundingSphere();\n\n\t\t}\n\n\t\tupdateMatrixWorld( force ) {\n\n\t\t\tconst box = this.box;\n\n\t\t\tif ( box.isEmpty() ) return;\n\n\t\t\tbox.getCenter( this.position );\n\n\t\t\tbox.getSize( this.scale );\n\n\t\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\t\tsuper.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tclass PlaneHelper extends Line {\n\n\t\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\t\tconst color = hex;\n\n\t\t\tconst positions = [ 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, 1, 0, 0, 0 ];\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\t\tthis.type = 'PlaneHelper';\n\n\t\t\tthis.plane = plane;\n\n\t\t\tthis.size = size;\n\n\t\t\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\t\tconst geometry2 = new BufferGeometry();\n\t\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\t\tgeometry2.computeBoundingSphere();\n\n\t\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t\t}\n\n\t\tupdateMatrixWorld( force ) {\n\n\t\t\tlet scale = - this.plane.constant;\n\n\t\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\t\tthis.lookAt( this.plane.normal );\n\n\t\t\tsuper.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tconst _axis = /*@__PURE__*/ new Vector3();\n\tlet _lineGeometry, _coneGeometry;\n\n\tclass ArrowHelper extends Object3D {\n\n\t\tconstructor( dir, origin, length, color, headLength, headWidth ) {\n\n\t\t\tsuper();\n\t\t\t// dir is assumed to be normalized\n\n\t\t\tthis.type = 'ArrowHelper';\n\n\t\t\tif ( dir === undefined ) dir = new Vector3( 0, 0, 1 );\n\t\t\tif ( origin === undefined ) origin = new Vector3( 0, 0, 0 );\n\t\t\tif ( length === undefined ) length = 1;\n\t\t\tif ( color === undefined ) color = 0xffff00;\n\t\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t\t_coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t\t}\n\n\t\t\tthis.position.copy( origin );\n\n\t\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\t\tthis.line.matrixAutoUpdate = false;\n\t\t\tthis.add( this.line );\n\n\t\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\t\tthis.cone.matrixAutoUpdate = false;\n\t\t\tthis.add( this.cone );\n\n\t\t\tthis.setDirection( dir );\n\t\t\tthis.setLength( length, headLength, headWidth );\n\n\t\t}\n\n\t\tsetDirection( dir ) {\n\n\t\t\t// dir is assumed to be normalized\n\n\t\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t\t}\n\n\t\t}\n\n\t\tsetLength( length, headLength, headWidth ) {\n\n\t\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\t\tthis.line.updateMatrix();\n\n\t\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\t\tthis.cone.position.y = length;\n\t\t\tthis.cone.updateMatrix();\n\n\t\t}\n\n\t\tsetColor( color ) {\n\n\t\t\tthis.line.material.color.set( color );\n\t\t\tthis.cone.material.color.set( color );\n\n\t\t}\n\n\t\tcopy( source ) {\n\n\t\t\tsuper.copy( source, false );\n\n\t\t\tthis.line.copy( source.line );\n\t\t\tthis.cone.copy( source.cone );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t}\n\n\tclass AxesHelper extends LineSegments {\n\n\t\tconstructor( size = 1 ) {\n\n\t\t\tconst vertices = [\n\t\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t\t0, 0, 0,\t0, 0, size\n\t\t\t];\n\n\t\t\tconst colors = [\n\t\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t\t];\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\t\tsuper( geometry, material );\n\n\t\t\tthis.type = 'AxesHelper';\n\n\t\t}\n\n\t}\n\n\tconst _floatView = new Float32Array( 1 );\n\tconst _int32View = new Int32Array( _floatView.buffer );\n\n\tconst DataUtils = {\n\n\t\t// Converts float32 to float16 (stored as uint16 value).\n\n\t\ttoHalfFloat: function ( val ) {\n\n\t\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t\t* by James Tursa?s half-precision code. */\n\n\t\t\t_floatView[ 0 ] = val;\n\t\t\tconst x = _int32View[ 0 ];\n\n\t\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t\t* half, return signed zero. */\n\t\t\tif ( e < 103 ) return bits;\n\n\t\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\t\tif ( e > 142 ) {\n\n\t\t\t\tbits |= 0x7c00;\n\t\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\t\treturn bits;\n\n\t\t\t}\n\n\t\t\t/* If exponent underflows but not too much, return a denormal */\n\t\t\tif ( e < 113 ) {\n\n\t\t\t\tm |= 0x0800;\n\t\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t\t* to 1, which is OK. */\n\t\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\t\treturn bits;\n\n\t\t\t}\n\n\t\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t\t* the exponent, which is OK. */\n\t\t\tbits += m & 1;\n\t\t\treturn bits;\n\n\t\t}\n\n\t};\n\n\tconst LOD_MIN = 4;\n\tconst LOD_MAX = 8;\n\tconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n\t// The standard deviations (radians) associated with the extra mips. These are\n\t// chosen to approximate a Trowbridge-Reitz distribution function times the\n\t// geometric shadowing function. These sigma values squared must match the\n\t// variance #defines in cube_uv_reflection_fragment.glsl.js.\n\tconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n\tconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\t// The maximum length of the blur for loop. Smaller sigmas will use fewer\n\t// samples and exit early, but not recompile the shader.\n\tconst MAX_SAMPLES = 20;\n\n\tconst ENCODINGS = {\n\t\t[ LinearEncoding ]: 0,\n\t\t[ sRGBEncoding ]: 1,\n\t\t[ RGBEEncoding ]: 2,\n\t\t[ RGBM7Encoding ]: 3,\n\t\t[ RGBM16Encoding ]: 4,\n\t\t[ RGBDEncoding ]: 5,\n\t\t[ GammaEncoding ]: 6\n\t};\n\n\tconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\n\tconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\n\tconst _clearColor = /*@__PURE__*/ new Color();\n\tlet _oldTarget = null;\n\n\t// Golden Ratio\n\tconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\n\tconst INV_PHI = 1 / PHI;\n\n\t// Vertices of a dodecahedron (except the opposites, which represent the\n\t// same axis), used as axis directions evenly spread on a sphere.\n\tconst _axisDirections = [\n\t\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n\t/**\n\t * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n\t * (PMREM) from a cubeMap environment texture. This allows different levels of\n\t * blur to be quickly accessed based on material roughness. It is packed into a\n\t * special CubeUV format that allows us to perform custom interpolation so that\n\t * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n\t * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n\t * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n\t * higher roughness levels. In this way we maintain resolution to smoothly\n\t * interpolate diffuse lighting while limiting sampling computation.\n\t */\n\n\tclass PMREMGenerator {\n\n\t\tconstructor( renderer ) {\n\n\t\t\tthis._renderer = renderer;\n\t\t\tthis._pingPongRenderTarget = null;\n\n\t\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\t\tthis._equirectShader = null;\n\t\t\tthis._cubemapShader = null;\n\n\t\t\tthis._compileMaterial( this._blurMaterial );\n\n\t\t}\n\n\t\t/**\n\t\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t\t * is placed at the origin).\n\t\t */\n\t\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\t\tif ( sigma > 0 ) {\n\n\t\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t\t}\n\n\t\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\t\treturn cubeUVRenderTarget;\n\n\t\t}\n\n\t\t/**\n\t\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t\t * as this matches best with the 256 x 256 cubemap output.\n\t\t */\n\t\tfromEquirectangular( equirectangular ) {\n\n\t\t\treturn this._fromTexture( equirectangular );\n\n\t\t}\n\n\t\t/**\n\t\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t\t * as this matches best with the 256 x 256 cubemap output.\n\t\t */\n\t\tfromCubemap( cubemap ) {\n\n\t\t\treturn this._fromTexture( cubemap );\n\n\t\t}\n\n\t\t/**\n\t\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t\t * your texture's network fetch for increased concurrency.\n\t\t */\n\t\tcompileCubemapShader() {\n\n\t\t\tif ( this._cubemapShader === null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t\t * your texture's network fetch for increased concurrency.\n\t\t */\n\t\tcompileEquirectangularShader() {\n\n\t\t\tif ( this._equirectShader === null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t\t * one of them will cause any others to also become unusable.\n\t\t */\n\t\tdispose() {\n\n\t\t\tthis._blurMaterial.dispose();\n\n\t\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// private interface\n\n\t\t_cleanup( outputTarget ) {\n\n\t\t\tthis._pingPongRenderTarget.dispose();\n\t\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\t\toutputTarget.scissorTest = false;\n\t\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t\t}\n\n\t\t_fromTexture( texture ) {\n\n\t\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\t\treturn cubeUVRenderTarget;\n\n\t\t}\n\n\t\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\t\tconst params = {\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tgenerateMipmaps: false,\n\t\t\t\ttype: UnsignedByteType,\n\t\t\t\tformat: RGBEFormat,\n\t\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\t\tdepthBuffer: false\n\t\t\t};\n\n\t\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\t\treturn cubeUVRenderTarget;\n\n\t\t}\n\n\t\t_compileMaterial( material ) {\n\n\t\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t\t}\n\n\t\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\t\tconst fov = 90;\n\t\t\tconst aspect = 1;\n\t\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\t\tconst renderer = this._renderer;\n\n\t\t\tconst outputEncoding = renderer.outputEncoding;\n\t\t\tconst toneMapping = renderer.toneMapping;\n\t\t\trenderer.getClearColor( _clearColor );\n\t\t\tconst clearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.toneMapping = NoToneMapping;\n\t\t\trenderer.outputEncoding = LinearEncoding;\n\n\t\t\tlet background = scene.background;\n\t\t\tif ( background && background.isColor ) {\n\n\t\t\t\tbackground.convertSRGBToLinear();\n\t\t\t\t// Convert linear to RGBE\n\t\t\t\tconst maxComponent = Math.max( background.r, background.g, background.b );\n\t\t\t\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\t\t\t\tbackground = background.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\t\t\t\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\t\t\t\trenderer.setClearColor( background, alpha );\n\t\t\t\tscene.background = null;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tconst col = i % 3;\n\t\t\t\tif ( col == 0 ) {\n\n\t\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.toneMapping = toneMapping;\n\t\t\trenderer.outputEncoding = outputEncoding;\n\t\t\trenderer.setClearColor( _clearColor, clearAlpha );\n\n\t\t}\n\n\t\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\t\tconst renderer = this._renderer;\n\n\t\t\tif ( texture.isCubeTexture ) {\n\n\t\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\t\tconst uniforms = material.uniforms;\n\n\t\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t\t}\n\n\t\t\tuniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ];\n\t\t\tuniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ];\n\n\t\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\t\trenderer.render( mesh, _flatCamera );\n\n\t\t}\n\n\t\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\t\tconst renderer = this._renderer;\n\t\t\tconst autoClear = renderer.autoClear;\n\t\t\trenderer.autoClear = false;\n\n\t\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t\t}\n\n\t\t\trenderer.autoClear = autoClear;\n\n\t\t}\n\n\t\t/**\n\t\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t\t * accurate at the poles, but still does a decent job.\n\t\t */\n\t\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\t\tthis._halfBlur(\n\t\t\t\tcubeUVRenderTarget,\n\t\t\t\tpingPongRenderTarget,\n\t\t\t\tlodIn,\n\t\t\t\tlodOut,\n\t\t\t\tsigma,\n\t\t\t\t'latitudinal',\n\t\t\t\tpoleAxis );\n\n\t\t\tthis._halfBlur(\n\t\t\t\tpingPongRenderTarget,\n\t\t\t\tcubeUVRenderTarget,\n\t\t\t\tlodOut,\n\t\t\t\tlodOut,\n\t\t\t\tsigma,\n\t\t\t\t'longitudinal',\n\t\t\t\tpoleAxis );\n\n\t\t}\n\n\t\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\t\tconst renderer = this._renderer;\n\t\t\tconst blurMaterial = this._blurMaterial;\n\n\t\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\t\tconsole.error(\n\t\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t\t}\n\n\t\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t\t}\n\n\t\t\tconst weights = [];\n\t\t\tlet sum = 0;\n\n\t\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\t\tconst x = i / sigmaPixels;\n\t\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\t\tweights.push( weight );\n\n\t\t\t\tif ( i == 0 ) {\n\n\t\t\t\t\tsum += weight;\n\n\t\t\t\t} else if ( i < samples ) {\n\n\t\t\t\t\tsum += 2 * weight;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t\t}\n\n\t\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\t\tblurUniforms[ 'samples' ].value = samples;\n\t\t\tblurUniforms[ 'weights' ].value = weights;\n\t\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\t\tif ( poleAxis ) {\n\n\t\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t\t}\n\n\t\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\t\t\tblurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\t\t\tblurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\n\t\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\t\trenderer.setRenderTarget( targetOut );\n\t\t\trenderer.render( blurMesh, _flatCamera );\n\n\t\t}\n\n\t}\n\n\tfunction _isLDR( texture ) {\n\n\t\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\t\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n\t}\n\n\tfunction _createPlanes() {\n\n\t\tconst _lodPlanes = [];\n\t\tconst _sizeLods = [];\n\t\tconst _sigmas = [];\n\n\t\tlet lod = LOD_MAX;\n\n\t\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t\t_sizeLods.push( sizeLod );\n\t\t\tlet sigma = 1.0 / sizeLod;\n\n\t\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t\t} else if ( i == 0 ) {\n\n\t\t\t\tsigma = 0;\n\n\t\t\t}\n\n\t\t\t_sigmas.push( sigma );\n\n\t\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\t\tconst min = - texelSize / 2;\n\t\t\tconst max = 1 + texelSize / 2;\n\t\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\t\tconst cubeFaces = 6;\n\t\t\tconst vertices = 6;\n\t\t\tconst positionSize = 3;\n\t\t\tconst uvSize = 2;\n\t\t\tconst faceIndexSize = 1;\n\n\t\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\t\tconst coordinates = [\n\t\t\t\t\tx, y, 0,\n\t\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\t\tx, y, 0,\n\t\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\t\tx, y + 1, 0\n\t\t\t\t];\n\t\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t\t}\n\n\t\t\tconst planes = new BufferGeometry();\n\t\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t\t_lodPlanes.push( planes );\n\n\t\t\tif ( lod > LOD_MIN ) {\n\n\t\t\t\tlod --;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n\t}\n\n\tfunction _createRenderTarget( params ) {\n\n\t\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\t\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\t\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\t\tcubeUVRenderTarget.scissorTest = true;\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\tfunction _setViewport( target, x, y, width, height ) {\n\n\t\ttarget.viewport.set( x, y, width, height );\n\t\ttarget.scissor.set( x, y, width, height );\n\n\t}\n\n\tfunction _getBlurShader( maxSamples ) {\n\n\t\tconst weights = new Float32Array( maxSamples );\n\t\tconst poleAxis = new Vector3( 0, 1, 0 );\n\t\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\t\tname: 'SphericalGaussianBlur',\n\n\t\t\tdefines: { 'n': maxSamples },\n\n\t\t\tuniforms: {\n\t\t\t\t'envMap': { value: null },\n\t\t\t\t'samples': { value: 1 },\n\t\t\t\t'weights': { value: weights },\n\t\t\t\t'latitudinal': { value: false },\n\t\t\t\t'dTheta': { value: 0 },\n\t\t\t\t'mipInt': { value: 0 },\n\t\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t\t},\n\n\t\t\tvertexShader: _getCommonVertexShader(),\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\n\t\t} );\n\n\t\treturn shaderMaterial;\n\n\t}\n\n\tfunction _getEquirectShader() {\n\n\t\tconst texelSize = new Vector2( 1, 1 );\n\t\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\t\tname: 'EquirectangularToCubeUV',\n\n\t\t\tuniforms: {\n\t\t\t\t'envMap': { value: null },\n\t\t\t\t'texelSize': { value: texelSize },\n\t\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t\t},\n\n\t\t\tvertexShader: _getCommonVertexShader(),\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\n\t\t} );\n\n\t\treturn shaderMaterial;\n\n\t}\n\n\tfunction _getCubemapShader() {\n\n\t\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\t\tname: 'CubemapToCubeUV',\n\n\t\t\tuniforms: {\n\t\t\t\t'envMap': { value: null },\n\t\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t\t},\n\n\t\t\tvertexShader: _getCommonVertexShader(),\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\n\t\t} );\n\n\t\treturn shaderMaterial;\n\n\t}\n\n\tfunction _getCommonVertexShader() {\n\n\t\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n\t}\n\n\tfunction _getEncodings() {\n\n\t\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include <encodings_pars_fragment>\n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n\t}\n\n\tfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\t\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\t\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n\t}\n\n\tconst LineStrip = 0;\n\tconst LinePieces = 1;\n\tconst NoColors = 0;\n\tconst FaceColors = 1;\n\tconst VertexColors = 2;\n\n\tfunction MeshFaceMaterial( materials ) {\n\n\t\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\t\treturn materials;\n\n\t}\n\n\tfunction MultiMaterial( materials = [] ) {\n\n\t\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\t\tmaterials.isMultiMaterial = true;\n\t\tmaterials.materials = materials;\n\t\tmaterials.clone = function () {\n\n\t\t\treturn materials.slice();\n\n\t\t};\n\n\t\treturn materials;\n\n\t}\n\n\tfunction PointCloud( geometry, material ) {\n\n\t\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\t\treturn new Points( geometry, material );\n\n\t}\n\n\tfunction Particle( material ) {\n\n\t\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\t\treturn new Sprite( material );\n\n\t}\n\n\tfunction ParticleSystem( geometry, material ) {\n\n\t\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\t\treturn new Points( geometry, material );\n\n\t}\n\n\tfunction PointCloudMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction ParticleBasicMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction ParticleSystemMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction Vertex( x, y, z ) {\n\n\t\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\t\treturn new Vector3( x, y, z );\n\n\t}\n\n\t//\n\n\tfunction DynamicBufferAttribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\t\treturn new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage );\n\n\t}\n\n\tfunction Int8Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\t\treturn new Int8BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint8Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\t\treturn new Uint8BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\t\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Int16Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\t\treturn new Int16BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint16Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\t\treturn new Uint16BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Int32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\t\treturn new Int32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\t\treturn new Uint32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Float32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\t\treturn new Float32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Float64Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\t\treturn new Float64BufferAttribute( array, itemSize );\n\n\t}\n\n\t//\n\n\tCurve.create = function ( construct, getPoint ) {\n\n\t\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\t\tconstruct.prototype = Object.create( Curve.prototype );\n\t\tconstruct.prototype.constructor = construct;\n\t\tconstruct.prototype.getPoint = getPoint;\n\n\t\treturn construct;\n\n\t};\n\n\t//\n\n\tObject.assign( CurvePath.prototype, {\n\n\t\tcreatePointsGeometry: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\t\tconst pts = this.getPoints( divisions );\n\t\t\treturn this.createGeometry( pts );\n\n\t\t},\n\n\t\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\t// generate geometry from equidistant sampling along the path\n\n\t\t\tconst pts = this.getSpacedPoints( divisions );\n\t\t\treturn this.createGeometry( pts );\n\n\t\t},\n\n\t\tcreateGeometry: function ( points ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\tconst geometry = new Geometry();\n\n\t\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tconst point = points[ i ];\n\t\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( Path.prototype, {\n\n\t\tfromPoints: function ( points ) {\n\n\t\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\t\treturn this.setFromPoints( points );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction ClosedSplineCurve3( points ) {\n\n\t\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\t\tthis.closed = true;\n\n\t}\n\n\tClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\t//\n\n\tfunction SplineCurve3( points ) {\n\n\t\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\n\t}\n\n\tSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\t//\n\n\tfunction Spline( points ) {\n\n\t\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\n\t}\n\n\tSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\tObject.assign( Spline.prototype, {\n\n\t\tinitFromArray: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t\t},\n\t\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t\t},\n\t\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction AxisHelper( size ) {\n\n\t\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\t\treturn new AxesHelper( size );\n\n\t}\n\n\tfunction BoundingBoxHelper( object, color ) {\n\n\t\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\t\treturn new BoxHelper( object, color );\n\n\t}\n\n\tfunction EdgesHelper( object, hex ) {\n\n\t\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\t\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n\t}\n\n\tGridHelper.prototype.setColors = function () {\n\n\t\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n\t};\n\n\tSkeletonHelper.prototype.update = function () {\n\n\t\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n\t};\n\n\tfunction WireframeHelper( object, hex ) {\n\n\t\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\t\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n\t}\n\n\t//\n\n\tObject.assign( Loader.prototype, {\n\n\t\textractUrlBase: function ( url ) {\n\n\t\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t} );\n\n\tLoader.Handlers = {\n\n\t\tadd: function ( /* regex, loader */ ) {\n\n\t\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t\t},\n\n\t\tget: function ( /* file */ ) {\n\n\t\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t\t}\n\n\t};\n\n\tfunction XHRLoader( manager ) {\n\n\t\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\t\treturn new FileLoader( manager );\n\n\t}\n\n\tfunction BinaryTextureLoader( manager ) {\n\n\t\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\t\treturn new DataTextureLoader( manager );\n\n\t}\n\n\t//\n\n\tObject.assign( Box2.prototype, {\n\n\t\tcenter: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\t\treturn this.getCenter( optionalTarget );\n\n\t\t},\n\t\tempty: function () {\n\n\t\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\t\treturn this.isEmpty();\n\n\t\t},\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tsize: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\t\treturn this.getSize( optionalTarget );\n\n\t\t}\n\t} );\n\n\tObject.assign( Box3.prototype, {\n\n\t\tcenter: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\t\treturn this.getCenter( optionalTarget );\n\n\t\t},\n\t\tempty: function () {\n\n\t\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\t\treturn this.isEmpty();\n\n\t\t},\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tisIntersectionSphere: function ( sphere ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t},\n\t\tsize: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\t\treturn this.getSize( optionalTarget );\n\n\t\t}\n\t} );\n\n\tObject.assign( Sphere.prototype, {\n\n\t\tempty: function () {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\t\t\treturn this.isEmpty();\n\n\t\t},\n\n\t} );\n\n\tFrustum.prototype.setFromMatrix = function ( m ) {\n\n\t\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\t\treturn this.setFromProjectionMatrix( m );\n\n\t};\n\n\tLine3.prototype.center = function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t};\n\n\tObject.assign( MathUtils, {\n\n\t\trandom16: function () {\n\n\t\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\t\treturn Math.random();\n\n\t\t},\n\n\t\tnearestPowerOfTwo: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\t\treturn MathUtils.floorPowerOfTwo( value );\n\n\t\t},\n\n\t\tnextPowerOfTwo: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\t\treturn MathUtils.ceilPowerOfTwo( value );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Matrix3.prototype, {\n\n\t\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\t\t\treturn this.toArray( array, offset );\n\n\t\t},\n\t\tmultiplyVector3: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix3( this );\n\n\t\t},\n\t\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t\t},\n\t\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\t\t\treturn attribute.applyMatrix3( this );\n\n\t\t},\n\t\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t\t},\n\t\tgetInverse: function ( matrix ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\t\t\treturn this.copy( matrix ).invert();\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Matrix4.prototype, {\n\n\t\textractPosition: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\t\treturn this.copyPosition( m );\n\n\t\t},\n\t\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\t\t\treturn this.toArray( array, offset );\n\n\t\t},\n\t\tgetPosition: function () {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n\t\t},\n\t\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\t\treturn this.makeRotationFromQuaternion( q );\n\n\t\t},\n\t\tmultiplyToArray: function () {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t\t},\n\t\tmultiplyVector3: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\tmultiplyVector4: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t\t},\n\t\trotateAxis: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\t\tv.transformDirection( this );\n\n\t\t},\n\t\tcrossVector: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\ttranslate: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t\t},\n\t\trotateX: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t\t},\n\t\trotateY: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t\t},\n\t\trotateZ: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t\t},\n\t\trotateByAxis: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t\t},\n\t\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\t\t\treturn attribute.applyMatrix4( this );\n\n\t\t},\n\t\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t\t},\n\t\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t\t},\n\t\tgetInverse: function ( matrix ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\t\t\treturn this.copy( matrix ).invert();\n\n\t\t}\n\n\t} );\n\n\tPlane.prototype.isIntersectionLine = function ( line ) {\n\n\t\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\t\treturn this.intersectsLine( line );\n\n\t};\n\n\tObject.assign( Quaternion.prototype, {\n\n\t\tmultiplyVector3: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\t\t\treturn vector.applyQuaternion( this );\n\n\t\t},\n\t\tinverse: function ( ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\t\t\treturn this.invert();\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Ray.prototype, {\n\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tisIntersectionPlane: function ( plane ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\t\treturn this.intersectsPlane( plane );\n\n\t\t},\n\t\tisIntersectionSphere: function ( sphere ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Triangle.prototype, {\n\n\t\tarea: function () {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\t\treturn this.getArea();\n\n\t\t},\n\t\tbarycoordFromPoint: function ( point, target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\t\treturn this.getBarycoord( point, target );\n\n\t\t},\n\t\tmidpoint: function ( target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\t\treturn this.getMidpoint( target );\n\n\t\t},\n\t\tnormal: function ( target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\t\treturn this.getNormal( target );\n\n\t\t},\n\t\tplane: function ( target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\t\treturn this.getPlane( target );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Triangle, {\n\n\t\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t\t},\n\t\tnormal: function ( a, b, c, target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Shape.prototype, {\n\n\t\textractAllPoints: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\t\treturn this.extractPoints( divisions );\n\n\t\t},\n\t\textrude: function ( options ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\t\treturn new ExtrudeGeometry( this, options );\n\n\t\t},\n\t\tmakeGeometry: function ( options ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\t\treturn new ShapeGeometry( this, options );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector2.prototype, {\n\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tdistanceToManhattan: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\t\treturn this.manhattanDistanceTo( v );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector3.prototype, {\n\n\t\tsetEulerFromRotationMatrix: function () {\n\n\t\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t\t},\n\t\tsetEulerFromQuaternion: function () {\n\n\t\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t\t},\n\t\tgetPositionFromMatrix: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\t\treturn this.setFromMatrixPosition( m );\n\n\t\t},\n\t\tgetScaleFromMatrix: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\t\treturn this.setFromMatrixScale( m );\n\n\t\t},\n\t\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t\t},\n\t\tapplyProjection: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\t\treturn this.applyMatrix4( m );\n\n\t\t},\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tdistanceToManhattan: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\t\treturn this.manhattanDistanceTo( v );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector4.prototype, {\n\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( Geometry.prototype, {\n\n\t\tcomputeTangents: function () {\n\n\t\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t\t},\n\t\tcomputeLineDistances: function () {\n\n\t\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t\t},\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Object3D.prototype, {\n\n\t\tgetChildByName: function ( name ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\t\treturn this.getObjectByName( name );\n\n\t\t},\n\t\trenderDepth: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t\t},\n\t\ttranslate: function ( distance, axis ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\t\treturn this.translateOnAxis( axis, distance );\n\n\t\t},\n\t\tgetWorldRotation: function () {\n\n\t\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t\t},\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( Object3D.prototype, {\n\n\t\teulerOrder: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\t\treturn this.rotation.order;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\t\tthis.rotation.order = value;\n\n\t\t\t}\n\t\t},\n\t\tuseQuaternion: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.assign( Mesh.prototype, {\n\n\t\tsetDrawMode: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t},\n\n\t} );\n\n\tObject.defineProperties( Mesh.prototype, {\n\n\t\tdrawMode: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\t\treturn TrianglesDrawMode;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( LOD.prototype, {\n\n\t\tobjects: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\t\treturn this.levels;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tSkinnedMesh.prototype.initBones = function () {\n\n\t\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\n\n\t};\n\n\tObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\t\treturn this.arcLengthDivisions;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\t\tthis.arcLengthDivisions = value;\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\t\tconsole.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' +\n\t\t\t\t'Use .setFocalLength and .filmGauge for a photographic setup.' );\n\n\t\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\t\tthis.setFocalLength( focalLength );\n\n\t};\n\n\t//\n\n\tObject.defineProperties( Light.prototype, {\n\t\tonlyShadow: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraFov: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\t\tthis.shadow.camera.fov = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraLeft: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\t\tthis.shadow.camera.left = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraRight: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\t\tthis.shadow.camera.right = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraTop: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\t\tthis.shadow.camera.top = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraBottom: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraNear: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\t\tthis.shadow.camera.near = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraFar: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\t\tthis.shadow.camera.far = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraVisible: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowBias: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\t\tthis.shadow.bias = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowDarkness: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowMapWidth: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapHeight: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t\t}\n\t\t}\n\t} );\n\n\t//\n\n\tObject.defineProperties( BufferAttribute.prototype, {\n\n\t\tlength: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\t\treturn this.array.length;\n\n\t\t\t}\n\t\t},\n\t\tdynamic: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t\t},\n\t\t\tset: function ( /* value */ ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.assign( BufferAttribute.prototype, {\n\t\tsetDynamic: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\t\treturn this;\n\n\t\t},\n\t\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t\t},\n\t\tsetArray: function ( /* array */ ) {\n\n\t\t\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t\t}\n\t} );\n\n\tObject.assign( BufferGeometry.prototype, {\n\n\t\taddIndex: function ( index ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\t\tthis.setIndex( index );\n\n\t\t},\n\t\taddAttribute: function ( name, attribute ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\t\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( name === 'index' ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\t\tthis.setIndex( attribute );\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\treturn this.setAttribute( name, attribute );\n\n\t\t},\n\t\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\t\tif ( indexOffset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\t\tthis.addGroup( start, count );\n\n\t\t},\n\t\tclearDrawCalls: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\t\tthis.clearGroups();\n\n\t\t},\n\t\tcomputeTangents: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t\t},\n\t\tcomputeOffsets: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t\t},\n\t\tremoveAttribute: function ( name ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\t\t\treturn this.deleteAttribute( name );\n\n\t\t},\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( BufferGeometry.prototype, {\n\n\t\tdrawcalls: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\t\treturn this.groups;\n\n\t\t\t}\n\t\t},\n\t\toffsets: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\t\treturn this.groups;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( InstancedBufferGeometry.prototype, {\n\n\t\tmaxInstancedCount: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\t\treturn this.instanceCount;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\t\tthis.instanceCount = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( Raycaster.prototype, {\n\n\t\tlinePrecision: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\t\treturn this.params.Line.threshold;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\t\tthis.params.Line.threshold = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( InterleavedBuffer.prototype, {\n\n\t\tdynamic: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\t\tthis.setUsage( value );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.assign( InterleavedBuffer.prototype, {\n\t\tsetDynamic: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\t\treturn this;\n\n\t\t},\n\t\tsetArray: function ( /* array */ ) {\n\n\t\t\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t\t}\n\t} );\n\n\t//\n\n\tObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\t\tgetArrays: function () {\n\n\t\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t\t},\n\n\t\taddShapeList: function () {\n\n\t\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t\t},\n\n\t\taddShape: function () {\n\n\t\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( Scene.prototype, {\n\n\t\tdispose: function () {\n\n\t\t\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( Uniform.prototype, {\n\n\t\tdynamic: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t\t}\n\t\t},\n\t\tonUpdate: {\n\t\t\tvalue: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\t\treturn this;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( Material.prototype, {\n\n\t\twrapAround: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t\t}\n\t\t},\n\n\t\toverdraw: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t\t}\n\t\t},\n\n\t\twrapRGB: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\t\treturn new Color();\n\n\t\t\t}\n\t\t},\n\n\t\tshading: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t\t}\n\t\t},\n\n\t\tstencilMask: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\t\treturn this.stencilFuncMask;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\t\tthis.stencilFuncMask = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\t\tmetal: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\t\treturn false;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( MeshPhysicalMaterial.prototype, {\n\n\t\ttransparency: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\t\treturn this.transmission;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\t\tthis.transmission = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( ShaderMaterial.prototype, {\n\n\t\tderivatives: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\t\treturn this.extensions.derivatives;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\t\tthis.extensions.derivatives = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( WebGLRenderer.prototype, {\n\n\t\tclearTarget: function ( renderTarget, color, depth, stencil ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\t\t\tthis.setRenderTarget( renderTarget );\n\t\t\tthis.clear( color, depth, stencil );\n\n\t\t},\n\t\tanimate: function ( callback ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\t\t\tthis.setAnimationLoop( callback );\n\n\t\t},\n\t\tgetCurrentRenderTarget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\t\treturn this.getRenderTarget();\n\n\t\t},\n\t\tgetMaxAnisotropy: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t\t},\n\t\tgetPrecision: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\t\treturn this.capabilities.precision;\n\n\t\t},\n\t\tresetGLState: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\t\treturn this.state.reset();\n\n\t\t},\n\t\tsupportsFloatTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t\t},\n\t\tsupportsHalfFloatTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t\t},\n\t\tsupportsStandardDerivatives: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t\t},\n\t\tsupportsCompressedTextureS3TC: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t},\n\t\tsupportsCompressedTexturePVRTC: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t},\n\t\tsupportsBlendMinMax: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t\t},\n\t\tsupportsVertexTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\t\treturn this.capabilities.vertexTextures;\n\n\t\t},\n\t\tsupportsInstancedArrays: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t},\n\t\tenableScissorTest: function ( boolean ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\t\tthis.setScissorTest( boolean );\n\n\t\t},\n\t\tinitMaterial: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t\t},\n\t\taddPrePlugin: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t\t},\n\t\taddPostPlugin: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t\t},\n\t\tupdateShadowMap: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t\t},\n\t\tsetFaceCulling: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t\t},\n\t\tallocTextureUnit: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n\t\t},\n\t\tsetTexture: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n\t\t},\n\t\tsetTexture2D: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n\t\t},\n\t\tsetTextureCube: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n\t\t},\n\t\tgetActiveMipMapLevel: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\t\t\treturn this.getActiveMipmapLevel();\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( WebGLRenderer.prototype, {\n\n\t\tshadowMapEnabled: {\n\t\t\tget: function () {\n\n\t\t\t\treturn this.shadowMap.enabled;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\t\tthis.shadowMap.enabled = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapType: {\n\t\t\tget: function () {\n\n\t\t\t\treturn this.shadowMap.type;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\t\tthis.shadowMap.type = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapCullFace: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\t\treturn undefined;\n\n\t\t\t},\n\t\t\tset: function ( /* value */ ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t\t}\n\t\t},\n\t\tcontext: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\t\treturn this.getContext();\n\n\t\t\t}\n\t\t},\n\t\tvr: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\t\treturn this.xr;\n\n\t\t\t}\n\t\t},\n\t\tgammaInput: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\t\treturn false;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t\t}\n\t\t},\n\t\tgammaOutput: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\t\treturn false;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t\t}\n\t\t},\n\t\ttoneMappingWhitePoint: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\t\treturn 1.0;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t\t}\n\t\t},\n\n\t} );\n\n\tObject.defineProperties( WebGLShadowMap.prototype, {\n\n\t\tcullFace: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\t\treturn undefined;\n\n\t\t\t},\n\t\t\tset: function ( /* cullFace */ ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t\t}\n\t\t},\n\t\trenderReverseSided: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\t\treturn undefined;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t\t}\n\t\t},\n\t\trenderSingleSided: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\t\treturn undefined;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tfunction WebGLRenderTargetCube( width, height, options ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\t\treturn new WebGLCubeRenderTarget( width, options );\n\n\t}\n\n\t//\n\n\tObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\t\twrapS: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\t\treturn this.texture.wrapS;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\t\tthis.texture.wrapS = value;\n\n\t\t\t}\n\t\t},\n\t\twrapT: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\t\treturn this.texture.wrapT;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\t\tthis.texture.wrapT = value;\n\n\t\t\t}\n\t\t},\n\t\tmagFilter: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\t\treturn this.texture.magFilter;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\t\tthis.texture.magFilter = value;\n\n\t\t\t}\n\t\t},\n\t\tminFilter: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\t\treturn this.texture.minFilter;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\t\tthis.texture.minFilter = value;\n\n\t\t\t}\n\t\t},\n\t\tanisotropy: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\t\treturn this.texture.anisotropy;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\t\tthis.texture.anisotropy = value;\n\n\t\t\t}\n\t\t},\n\t\toffset: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\t\treturn this.texture.offset;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\t\tthis.texture.offset = value;\n\n\t\t\t}\n\t\t},\n\t\trepeat: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\t\treturn this.texture.repeat;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\t\tthis.texture.repeat = value;\n\n\t\t\t}\n\t\t},\n\t\tformat: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\t\treturn this.texture.format;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\t\tthis.texture.format = value;\n\n\t\t\t}\n\t\t},\n\t\ttype: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\t\treturn this.texture.type;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\t\tthis.texture.type = value;\n\n\t\t\t}\n\t\t},\n\t\tgenerateMipmaps: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\t\treturn this.texture.generateMipmaps;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( Audio.prototype, {\n\n\t\tload: {\n\t\t\tvalue: function ( file ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\t\t\t\tconst scope = this;\n\t\t\t\tconst audioLoader = new AudioLoader();\n\t\t\t\taudioLoader.load( file, function ( buffer ) {\n\n\t\t\t\t\tscope.setBuffer( buffer );\n\n\t\t\t\t} );\n\t\t\t\treturn this;\n\n\t\t\t}\n\t\t},\n\t\tstartTime: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: .startTime is now .play( delay ).' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tAudioAnalyser.prototype.getData = function () {\n\n\t\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\t\treturn this.getFrequencyData();\n\n\t};\n\n\t//\n\n\tCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\t\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\t\treturn this.update( renderer, scene );\n\n\t};\n\n\tCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\t\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\t\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n\t};\n\n\t//\n\n\tconst GeometryUtils = {\n\n\t\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\t\tlet matrix;\n\n\t\t\tif ( geometry2.isMesh ) {\n\n\t\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\t\tmatrix = geometry2.matrix;\n\t\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t\t}\n\n\t\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t\t},\n\n\t\tcenter: function ( geometry ) {\n\n\t\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\t\treturn geometry.center();\n\n\t\t}\n\n\t};\n\n\tImageUtils.crossOrigin = undefined;\n\n\tImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\t\tconst loader = new TextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t};\n\n\tImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\t\tconst loader = new CubeTextureLoader();\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t};\n\n\tImageUtils.loadCompressedTexture = function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n\t};\n\n\tImageUtils.loadCompressedTextureCube = function () {\n\n\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n\t};\n\n\t//\n\n\tfunction CanvasRenderer() {\n\n\t\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n\t}\n\n\t//\n\n\tfunction JSONLoader() {\n\n\t\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n\t}\n\n\t//\n\n\tconst SceneUtils = {\n\n\t\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t\t},\n\n\t\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t\t},\n\n\t\tattach: function ( /* child, scene, parent */ ) {\n\n\t\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t\t}\n\n\t};\n\n\t//\n\n\tfunction LensFlare() {\n\n\t\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n\t}\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t/* eslint-disable no-undef */\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\t\trevision: REVISION,\n\t\t} } ) );\n\t\t/* eslint-enable no-undef */\n\n\t}\n\n\tclass PathAnimation{\n\t\t\n\t\tconstructor(path, start, end, speed, callback){\n\t\t\t\tthis.path = path;\n\t\t\t\tthis.length = this.path.spline.getLength();\n\t\t\t\tthis.speed = speed;\n\t\t\t\tthis.callback = callback;\n\t\t\t\tthis.tween = null;\n\t\t\t\tthis.startPoint = Math.max(start, 0);\n\t\t\t\tthis.endPoint = Math.min(end, this.length);\n\t\t\t\tthis.t = 0.0;\n\t\t}\n\n\t\tstart(resume = false){\n\t\t\tif(this.tween){\n\t\t\t\tthis.tween.stop();\n\t\t\t\tthis.tween = null;\n\t\t\t}\n\t\t\n\t\t\tlet tStart;\n\t\t\tif(resume){\n\t\t\t\ttStart = this.t;\n\t\t\t}else {\n\t\t\t\ttStart = this.startPoint / this.length;\n\t\t\t}\n\t\t\tlet tEnd = this.endPoint / this.length;\n\t\t\tlet animationDuration = (tEnd - tStart) * this.length * 1000 / this.speed;\n\t\t\n\t\t\tlet progress = {t: tStart};\n\t\t\tthis.tween = new TWEEN.Tween(progress).to({t: tEnd}, animationDuration);\n\t\t\tthis.tween.easing(TWEEN.Easing.Linear.None);\n\t\t\tthis.tween.onUpdate((e) => {\n\t\t\t\tthis.t = progress.t;\n\t\t\t\tthis.callback(progress.t);\n\t\t\t});\n\t\t\tthis.tween.onComplete(() => {\n\t\t\t\tif(this.repeat){\n\t\t\t\t\tthis.start();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.tween.start();\n\t\t\t}, 0);\n\t\t}\n\n\t\tstop(){\n\t\t\tif(!this.tween){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.tween.stop();\n\t\t\tthis.tween = null;\n\t\t\tthis.t = 0;\n\t\t}\n\n\t\tpause(){\n\t\t\tif(!this.tween){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tthis.tween.stop();\n\t\t\tTWEEN.remove(this.tween);\n\t\t\tthis.tween = null;\n\t\t}\n\n\t\tresume(){\n\t\t\tthis.start(true);\n\t\t}\n\n\t\tgetPoint(t){\n\t\t\treturn this.path.spline.getPoint(t);\n\t\t}\n\n\t}\n\n\tclass AnimationPath{\n\t\tconstructor (points = []) {\n\t\t\tthis.points = points;\n\t\t\tthis.spline = new CatmullRomCurve3(points);\n\t\t\t//this.spline.reparametrizeByArcLength(1 / this.spline.getLength().total);\n\t\t}\n\n\t\tget (t) {\n\t\t\treturn this.spline.getPoint(t);\n\t\t}\n\n\t\tgetLength () {\n\t\t\treturn this.spline.getLength();\n\t\t}\n\n\t\tanimate (start, end, speed, callback) {\n\t\t\tlet animation = new PathAnimation(this, start, end, speed, callback);\n\t\t\tanimation.start();\n\n\t\t\treturn animation;\n\t\t}\n\n\t\tpause () {\n\t\t\tif (this.tween) {\n\t\t\t\tthis.tween.stop();\n\t\t\t}\n\t\t}\n\n\t\tresume () {\n\t\t\tif (this.tween) {\n\t\t\t\tthis.tween.start();\n\t\t\t}\n\t\t}\n\n\t\tgetGeometry () {\n\t\t\tlet geometry = new Geometry();\n\n\t\t\tlet samples = 500;\n\t\t\tlet i = 0;\n\t\t\tfor (let u = 0; u <= 1; u += 1 / samples) {\n\t\t\t\tlet position = this.spline.getPoint(u);\n\t\t\t\tgeometry.vertices[i] = new Vector3(position.x, position.y, position.z);\n\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif(this.closed){\n\t\t\t\tlet position = this.spline.getPoint(0);\n\t\t\t\tgeometry.vertices[i] = new Vector3(position.x, position.y, position.z);\n\t\t\t}\n\n\t\t\treturn geometry;\n\t\t}\n\n\t\tget closed(){\n\t\t\treturn this.spline.closed;\n\t\t}\n\n\t\tset closed(value){\n\t\t\tthis.spline.closed = value;\n\t\t}\n\n\t}\n\n\tconst XHRFactory = {\n\t\tconfig: {\n\t\t\twithCredentials: false,\n\t\t\tcustomHeaders: [\n\t\t\t\t{ header: null, value: null }\n\t\t\t]\n\t\t},\n\n\t\tcreateXMLHttpRequest: function () {\n\t\t\tlet xhr = new XMLHttpRequest();\n\n\t\t\tif (this.config.customHeaders &&\n\t\t\t\tArray.isArray(this.config.customHeaders) &&\n\t\t\t\tthis.config.customHeaders.length > 0) {\n\t\t\t\tlet baseOpen = xhr.open;\n\t\t\t\tlet customHeaders = this.config.customHeaders;\n\t\t\t\txhr.open = function () {\n\t\t\t\t\tbaseOpen.apply(this, [].slice.call(arguments));\n\t\t\t\t\tcustomHeaders.forEach(function (customHeader) {\n\t\t\t\t\t\tif (!!customHeader.header && !!customHeader.value) {\n\t\t\t\t\t\t\txhr.setRequestHeader(customHeader.header, customHeader.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn xhr;\n\t\t}\n\t};\n\n\tclass TextSprite extends Object3D{\n\t\t\n\t\tconstructor(text){\n\t\t\tsuper();\n\n\t\t\tlet texture = new Texture();\n\t\t\ttexture.minFilter = LinearFilter;\n\t\t\ttexture.magFilter = LinearFilter;\n\t\t\tlet spriteMaterial = new SpriteMaterial({\n\t\t\t\tmap: texture,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false});\n\n\t\t\tthis.texture = texture;\n\n\t\t\tthis.material = spriteMaterial;\n\t\t\t//this.material = getRawMaterial(texture);\n\t\t\tthis.sprite = new Sprite(this.material);\n\t\t\tthis.add(this.sprite);\n\n\t\t\tthis.borderThickness = 4;\n\t\t\tthis.fontface = 'Arial';\n\t\t\tthis.fontsize = 28;\n\t\t\tthis.borderColor = { r: 0, g: 0, b: 0, a: 1.0 };\n\t\t\tthis.backgroundColor = { r: 255, g: 255, b: 255, a: 1.0 };\n\t\t\tthis.textColor = {r: 255, g: 255, b: 255, a: 1.0};\n\t\t\tthis.text = '';\n\n\t\t\tthis.setText(text);\n\t\t}\n\n\t\tsetText(text){\n\t\t\tif (this.text !== text){\n\t\t\t\tthis.text = text;\n\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t}\n\n\t\tsetTextColor(color){\n\t\t\tthis.textColor = color;\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tsetBorderColor(color){\n\t\t\tthis.borderColor = color;\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tsetBackgroundColor(color){\n\t\t\tthis.backgroundColor = color;\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet canvas = document.createElement('canvas');\n\t\t\tlet context = canvas.getContext('2d');\n\t\t\tcontext.font = 'Bold ' + this.fontsize + 'px ' + this.fontface;\n\n\t\t\t// get size data (height depends only on font size)\n\t\t\tlet metrics = context.measureText(this.text);\n\t\t\tlet textWidth = metrics.width;\n\t\t\tlet margin = 5;\n\t\t\tlet spriteWidth = 2 * margin + textWidth + 2 * this.borderThickness;\n\t\t\tlet spriteHeight = this.fontsize * 1.4 + 2 * this.borderThickness;\n\n\t\t\tcontext.canvas.width = spriteWidth;\n\t\t\tcontext.canvas.height = spriteHeight;\n\t\t\tcontext.font = 'Bold ' + this.fontsize + 'px ' + this.fontface;\n\n\t\t\t// background color\n\t\t\tcontext.fillStyle = 'rgba(' + this.backgroundColor.r + ',' + this.backgroundColor.g + ',' +\n\t\t\t\tthis.backgroundColor.b + ',' + this.backgroundColor.a + ')';\n\t\t\t// border color\n\t\t\tcontext.strokeStyle = 'rgba(' + this.borderColor.r + ',' + this.borderColor.g + ',' +\n\t\t\t\tthis.borderColor.b + ',' + this.borderColor.a + ')';\n\n\t\t\tcontext.lineWidth = this.borderThickness;\n\t\t\tthis.roundRect(context, this.borderThickness / 2, this.borderThickness / 2,\n\t\t\t\ttextWidth + this.borderThickness + 2 * margin, this.fontsize * 1.4 + this.borderThickness, 6);\n\n\t\t\t// text color\n\t\t\tcontext.strokeStyle = 'rgba(0, 0, 0, 1.0)';\n\t\t\tcontext.strokeText(this.text, this.borderThickness + margin, this.fontsize + this.borderThickness);\n\n\t\t\tcontext.fillStyle = 'rgba(' + this.textColor.r + ',' + this.textColor.g + ',' +\n\t\t\t\tthis.textColor.b + ',' + this.textColor.a + ')';\n\t\t\tcontext.fillText(this.text, this.borderThickness + margin, this.fontsize + this.borderThickness);\n\n\t\t\tlet texture = new Texture(canvas);\n\t\t\ttexture.minFilter = LinearFilter;\n\t\t\ttexture.magFilter = LinearFilter;\n\t\t\ttexture.needsUpdate = true;\n\t\t\t//this.material.needsUpdate = true;\n\n\t\t\t// { // screen-space sprite\n\t\t\t// \tlet [screenWidth, screenHeight] = [1620, 937];\n\n\t\t\t// \tlet uniforms = this.sprite.material.uniforms;\n\t\t\t// \tlet aspect = spriteHeight / spriteWidth;\n\t\t\t// \tlet factor = 0.5;\n\n\t\t\t// \tlet w = spriteWidth / screenWidth;\n\t\t\t// \tlet h = spriteHeight / screenHeight;\n\n\t\t\t// \tuniforms.uScale.value = [2 * w, 2 * h];\n\t\t\t// \t//uniforms.uScale.value = [factor * 1, factor * aspect];\n\t\t\t//\tthis.sprite.material.uniforms.map.value = texture;\n\t\t\t// }\n\n\t\t\tthis.sprite.material.map = texture;\n\t\t\tthis.texture = texture;\n\n\t\t\tthis.sprite.scale.set(spriteWidth * 0.01, spriteHeight * 0.01, 1.0);\n\t\t}\n\n\t\troundRect(ctx, x, y, w, h, r){\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x + r, y);\n\t\t\tctx.lineTo(x + w - r, y);\n\t\t\tctx.quadraticCurveTo(x + w, y, x + w, y + r);\n\t\t\tctx.lineTo(x + w, y + h - r);\n\t\t\tctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h);\n\t\t\tctx.lineTo(x + r, y + h);\n\t\t\tctx.quadraticCurveTo(x, y + h, x, y + h - r);\n\t\t\tctx.lineTo(x, y + r);\n\t\t\tctx.quadraticCurveTo(x, y, x + r, y);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tctx.stroke();\n\t\t}\n\n\t}\n\n\tclass Volume extends Object3D {\n\t\tconstructor (args = {}) {\n\t\t\tsuper();\n\n\t\t\tif(this.constructor.name === \"Volume\"){\n\t\t\t\tconsole.warn(\"Can't create object of class Volume directly. Use classes BoxVolume or SphereVolume instead.\");\n\t\t\t}\n\n\t\t\t//console.log(this);\n\t\t\t//console.log(this.constructor);\n\t\t\t//console.log(this.constructor.name);\n\n\t\t\tthis._clip = args.clip || false;\n\t\t\tthis._visible = true;\n\t\t\tthis.showVolumeLabel = true;\n\t\t\tthis._modifiable = args.modifiable || true;\n\n\t\t\tthis.label = new TextSprite('0');\n\t\t\tthis.label.setBorderColor({r: 0, g: 255, b: 0, a: 0.0});\n\t\t\tthis.label.setBackgroundColor({r: 0, g: 255, b: 0, a: 0.0});\n\t\t\tthis.label.material.depthTest = false;\n\t\t\tthis.label.material.depthWrite = false;\n\t\t\tthis.label.material.transparent = true;\n\t\t\tthis.label.position.y -= 0.5;\n\t\t\tthis.add(this.label);\n\n\t\t\tthis.label.updateMatrixWorld = () => {\n\t\t\t\tlet volumeWorldPos = new Vector3();\n\t\t\t\tvolumeWorldPos.setFromMatrixPosition(this.matrixWorld);\n\t\t\t\tthis.label.position.copy(volumeWorldPos);\n\t\t\t\tthis.label.updateMatrix();\n\t\t\t\tthis.label.matrixWorld.copy(this.label.matrix);\n\t\t\t\tthis.label.matrixWorldNeedsUpdate = false;\n\n\t\t\t\tfor (let i = 0, l = this.label.children.length; i < l; i++) {\n\t\t\t\t\tthis.label.children[ i ].updateMatrixWorld(true);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t{ // event listeners\n\t\t\t\tthis.addEventListener('select', e => {});\n\t\t\t\tthis.addEventListener('deselect', e => {});\n\t\t\t}\n\n\t\t}\n\n\t\tget visible(){\n\t\t\treturn this._visible;\n\t\t}\n\n\t\tset visible(value){\n\t\t\tif(this._visible !== value){\n\t\t\t\tthis._visible = value;\n\n\t\t\t\tthis.dispatchEvent({type: \"visibility_changed\", object: this});\n\t\t\t}\n\t\t}\n\n\t\tgetVolume () {\n\t\t\tconsole.warn(\"override this in subclass\");\n\t\t}\n\n\t\tupdate () {\n\t\t\t\n\t\t};\n\n\t\traycast (raycaster, intersects) {\n\n\t\t}\n\n\t\tget clip () {\n\t\t\treturn this._clip;\n\t\t}\n\n\t\tset clip (value) {\n\n\t\t\tif(this._clip !== value){\n\t\t\t\tthis._clip = value;\n\n\t\t\t\tthis.update();\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: \"clip_changed\",\n\t\t\t\t\tobject: this\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tget modifieable () {\n\t\t\treturn this._modifiable;\n\t\t}\n\n\t\tset modifieable (value) {\n\t\t\tthis._modifiable = value;\n\n\t\t\tthis.update();\n\t\t}\n\t};\n\n\n\tclass BoxVolume extends Volume{\n\n\t\tconstructor(args = {}){\n\t\t\tsuper(args);\n\n\t\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\t\t\tthis.name = 'box_' + this.constructor.counter;\n\n\t\t\tlet boxGeometry = new BoxGeometry(1, 1, 1);\n\t\t\tboxGeometry.computeBoundingBox();\n\n\t\t\tlet boxFrameGeometry = new Geometry();\n\t\t\t{\n\t\t\t\tlet Vector3$1 = Vector3;\n\n\t\t\t\tboxFrameGeometry.vertices.push(\n\n\t\t\t\t\t// bottom\n\t\t\t\t\tnew Vector3$1(-0.5, -0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, -0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, -0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, -0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(0.5, -0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, -0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, -0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, -0.5, 0.5),\n\t\t\t\t\t// top\n\t\t\t\t\tnew Vector3$1(-0.5, 0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, 0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, 0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, 0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(0.5, 0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, 0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, 0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, 0.5, 0.5),\n\t\t\t\t\t// sides\n\t\t\t\t\tnew Vector3$1(-0.5, -0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, 0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, -0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, 0.5, 0.5),\n\t\t\t\t\tnew Vector3$1(0.5, -0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(0.5, 0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, -0.5, -0.5),\n\t\t\t\t\tnew Vector3$1(-0.5, 0.5, -0.5),\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tthis.material = new MeshBasicMaterial({\n\t\t\t\tcolor: 0x00ff00,\n\t\t\t\ttransparent: true,\n\t\t\t\topacity: 0.3,\n\t\t\t\tdepthTest: true,\n\t\t\t\tdepthWrite: false});\n\t\t\tthis.box = new Mesh(boxGeometry, this.material);\n\t\t\tthis.box.geometry.computeBoundingBox();\n\t\t\tthis.boundingBox = this.box.geometry.boundingBox;\n\t\t\tthis.add(this.box);\n\n\t\t\tthis.frame = new LineSegments(boxFrameGeometry, new LineBasicMaterial({color: 0x000000}));\n\t\t\t// this.frame.mode = THREE.Lines;\n\t\t\tthis.add(this.frame);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tthis.boundingBox = this.box.geometry.boundingBox;\n\t\t\tthis.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere());\n\n\t\t\tif (this._clip) {\n\t\t\t\tthis.box.visible = false;\n\t\t\t\tthis.label.visible = false;\n\t\t\t} else {\n\t\t\t\tthis.box.visible = true;\n\t\t\t\tthis.label.visible = this.showVolumeLabel;\n\t\t\t}\n\t\t}\n\n\t\traycast (raycaster, intersects) {\n\t\t\tlet is = [];\n\t\t\tthis.box.raycast(raycaster, is);\n\n\t\t\tif (is.length > 0) {\n\t\t\t\tlet I = is[0];\n\t\t\t\tintersects.push({\n\t\t\t\t\tdistance: I.distance,\n\t\t\t\t\tobject: this,\n\t\t\t\t\tpoint: I.point.clone()\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tgetVolume(){\n\t\t\treturn Math.abs(this.scale.x * this.scale.y * this.scale.z);\n\t\t}\n\n\t};\n\n\tclass SphereVolume extends Volume{\n\n\t\tconstructor(args = {}){\n\t\t\tsuper(args);\n\n\t\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\t\t\tthis.name = 'sphere_' + this.constructor.counter;\n\n\t\t\tlet sphereGeometry = new SphereGeometry(1, 32, 32);\n\t\t\tsphereGeometry.computeBoundingBox();\n\n\t\t\tthis.material = new MeshBasicMaterial({\n\t\t\t\tcolor: 0x00ff00,\n\t\t\t\ttransparent: true,\n\t\t\t\topacity: 0.3,\n\t\t\t\tdepthTest: true,\n\t\t\t\tdepthWrite: false});\n\t\t\tthis.sphere = new Mesh(sphereGeometry, this.material);\n\t\t\tthis.sphere.visible = false;\n\t\t\tthis.sphere.geometry.computeBoundingBox();\n\t\t\tthis.boundingBox = this.sphere.geometry.boundingBox;\n\t\t\tthis.add(this.sphere);\n\n\t\t\tthis.label.visible = false;\n\n\n\t\t\tlet frameGeometry = new Geometry();\n\t\t\t{\n\t\t\t\tlet steps = 64;\n\t\t\t\tlet uSegments = 8;\n\t\t\t\tlet vSegments = 5;\n\t\t\t\tlet r = 1;\n\n\t\t\t\tfor(let uSegment = 0; uSegment < uSegments; uSegment++){\n\n\t\t\t\t\tlet alpha = (uSegment / uSegments) * Math.PI * 2;\n\t\t\t\t\tlet dirx = Math.cos(alpha);\n\t\t\t\t\tlet diry = Math.sin(alpha);\n\n\t\t\t\t\tfor(let i = 0; i <= steps; i++){\n\t\t\t\t\t\tlet v = (i / steps) * Math.PI * 2;\n\t\t\t\t\t\tlet vNext = v + 2 * Math.PI / steps;\n\n\t\t\t\t\t\tlet height = Math.sin(v);\n\t\t\t\t\t\tlet xyAmount = Math.cos(v);\n\n\t\t\t\t\t\tlet heightNext = Math.sin(vNext);\n\t\t\t\t\t\tlet xyAmountNext = Math.cos(vNext);\n\n\t\t\t\t\t\tlet vertex = new Vector3(dirx * xyAmount, diry * xyAmount, height);\n\t\t\t\t\t\tframeGeometry.vertices.push(vertex);\n\n\t\t\t\t\t\tlet vertexNext = new Vector3(dirx * xyAmountNext, diry * xyAmountNext, heightNext);\n\t\t\t\t\t\tframeGeometry.vertices.push(vertexNext);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// creates rings at poles, just because it's easier to implement\n\t\t\t\tfor(let vSegment = 0; vSegment <= vSegments + 1; vSegment++){\n\n\t\t\t\t\t//let height = (vSegment / (vSegments + 1)) * 2 - 1; // -1 to 1\n\t\t\t\t\tlet uh = (vSegment / (vSegments + 1)); // -1 to 1\n\t\t\t\t\tuh = (1 - uh) * (-Math.PI / 2) + uh *(Math.PI / 2);\n\t\t\t\t\tlet height = Math.sin(uh);\n\n\t\t\t\t\tconsole.log(uh, height);\n\n\t\t\t\t\tfor(let i = 0; i <= steps; i++){\n\t\t\t\t\t\tlet u = (i / steps) * Math.PI * 2;\n\t\t\t\t\t\tlet uNext = u + 2 * Math.PI / steps;\n\n\t\t\t\t\t\tlet dirx = Math.cos(u);\n\t\t\t\t\t\tlet diry = Math.sin(u);\n\n\t\t\t\t\t\tlet dirxNext = Math.cos(uNext);\n\t\t\t\t\t\tlet diryNext = Math.sin(uNext);\n\n\t\t\t\t\t\tlet xyAmount = Math.sqrt(1 - height * height);\n\n\t\t\t\t\t\tlet vertex = new Vector3(dirx * xyAmount, diry * xyAmount, height);\n\t\t\t\t\t\tframeGeometry.vertices.push(vertex);\n\n\t\t\t\t\t\tlet vertexNext = new Vector3(dirxNext * xyAmount, diryNext * xyAmount, height);\n\t\t\t\t\t\tframeGeometry.vertices.push(vertexNext);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.frame = new LineSegments(frameGeometry, new LineBasicMaterial({color: 0x000000}));\n\t\t\tthis.add(this.frame);\n\n\t\t\tlet frameMaterial = new MeshBasicMaterial({wireframe: true, color: 0x000000});\n\t\t\tthis.frame = new Mesh(sphereGeometry, frameMaterial);\n\t\t\t//this.add(this.frame);\n\n\t\t\t//this.frame = new THREE.LineSegments(boxFrameGeometry, new THREE.LineBasicMaterial({color: 0x000000}));\n\t\t\t// this.frame.mode = THREE.Lines;\n\t\t\t//this.add(this.frame);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tthis.boundingBox = this.sphere.geometry.boundingBox;\n\t\t\tthis.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere());\n\n\t\t\t//if (this._clip) {\n\t\t\t//\tthis.sphere.visible = false;\n\t\t\t//\tthis.label.visible = false;\n\t\t\t//} else {\n\t\t\t//\tthis.sphere.visible = true;\n\t\t\t//\tthis.label.visible = this.showVolumeLabel;\n\t\t\t//}\n\t\t}\n\n\t\traycast (raycaster, intersects) {\n\t\t\tlet is = [];\n\t\t\tthis.sphere.raycast(raycaster, is);\n\n\t\t\tif (is.length > 0) {\n\t\t\t\tlet I = is[0];\n\t\t\t\tintersects.push({\n\t\t\t\t\tdistance: I.distance,\n\t\t\t\t\tobject: this,\n\t\t\t\t\tpoint: I.point.clone()\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\t// see https://en.wikipedia.org/wiki/Ellipsoid#Volume\n\t\tgetVolume(){\n\t\t\treturn (4 / 3) * Math.PI * this.scale.x * this.scale.y * this.scale.z;\n\t\t}\n\n\t};\n\n\tclass Profile extends Object3D{\n\n\t\tconstructor () {\n\t\t\tsuper();\n\n\t\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\n\t\t\tthis.name = 'Profile_' + this.constructor.counter;\n\t\t\tthis.points = [];\n\t\t\tthis.spheres = [];\n\t\t\tthis.edges = [];\n\t\t\tthis.boxes = [];\n\t\t\tthis.width = 1;\n\t\t\tthis.height = 20;\n\t\t\tthis._modifiable = true;\n\n\t\t\tthis.sphereGeometry = new SphereGeometry(0.4, 10, 10);\n\t\t\tthis.color = new Color(0xff0000);\n\t\t\tthis.lineColor = new Color(0xff0000);\n\t\t}\n\n\t\tcreateSphereMaterial () {\n\t\t\tlet sphereMaterial = new MeshLambertMaterial({\n\t\t\t\t//shading: THREE.SmoothShading,\n\t\t\t\tcolor: 0xff0000,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false}\n\t\t\t);\n\n\t\t\treturn sphereMaterial;\n\t\t};\n\n\t\tgetSegments () {\n\t\t\tlet segments = [];\n\n\t\t\tfor (let i = 0; i < this.points.length - 1; i++) {\n\t\t\t\tlet start = this.points[i].clone();\n\t\t\t\tlet end = this.points[i + 1].clone();\n\t\t\t\tsegments.push({start: start, end: end});\n\t\t\t}\n\n\t\t\treturn segments;\n\t\t}\n\n\t\tgetSegmentMatrices () {\n\t\t\tlet segments = this.getSegments();\n\t\t\tlet matrices = [];\n\n\t\t\tfor (let segment of segments) {\n\t\t\t\tlet {start, end} = segment;\n\n\t\t\t\tlet box = new Object3D();\n\n\t\t\t\tlet length = start.clone().setZ(0).distanceTo(end.clone().setZ(0));\n\t\t\t\tbox.scale.set(length, 10000, this.width);\n\t\t\t\tbox.up.set(0, 0, 1);\n\n\t\t\t\tlet center = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n\t\t\t\tlet diff = new Vector3().subVectors(end, start);\n\t\t\t\tlet target = new Vector3(diff.y, -diff.x, 0);\n\n\t\t\t\tbox.position.set(0, 0, 0);\n\t\t\t\tbox.lookAt(target);\n\t\t\t\tbox.position.copy(center);\n\n\t\t\t\tbox.updateMatrixWorld();\n\t\t\t\tmatrices.push(box.matrixWorld);\n\t\t\t}\n\n\t\t\treturn matrices;\n\t\t}\n\n\t\taddMarker (point) {\n\t\t\tthis.points.push(point);\n\n\t\t\tlet sphere = new Mesh(this.sphereGeometry, this.createSphereMaterial());\n\n\t\t\tthis.add(sphere);\n\t\t\tthis.spheres.push(sphere);\n\n\t\t\t// edges & boxes\n\t\t\tif (this.points.length > 1) {\n\t\t\t\tlet lineGeometry = new Geometry();\n\t\t\t\tlineGeometry.vertices.push(new Vector3(), new Vector3());\n\t\t\t\tlineGeometry.colors.push(this.lineColor, this.lineColor, this.lineColor);\n\t\t\t\tlet lineMaterial = new LineBasicMaterial({\n\t\t\t\t\tvertexColors: VertexColors,\n\t\t\t\t\tlinewidth: 2,\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\topacity: 0.4\n\t\t\t\t});\n\t\t\t\tlineMaterial.depthTest = false;\n\t\t\t\tlet edge = new Line(lineGeometry, lineMaterial);\n\t\t\t\tedge.visible = false;\n\n\t\t\t\tthis.add(edge);\n\t\t\t\tthis.edges.push(edge);\n\n\t\t\t\tlet boxGeometry = new BoxGeometry(1, 1, 1);\n\t\t\t\tlet boxMaterial = new MeshBasicMaterial({color: 0xff0000, transparent: true, opacity: 0.2});\n\t\t\t\tlet box = new Mesh(boxGeometry, boxMaterial);\n\t\t\t\tbox.visible = false;\n\n\t\t\t\tthis.add(box);\n\t\t\t\tthis.boxes.push(box);\n\t\t\t}\n\n\t\t\t{ // event listeners\n\t\t\t\tlet drag = (e) => {\n\t\t\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\t\t\te.drag.end, \n\t\t\t\t\t\te.viewer.scene.getActiveCamera(), \n\t\t\t\t\t\te.viewer, \n\t\t\t\t\t\te.viewer.scene.pointclouds);\n\n\t\t\t\t\tif (I) {\n\t\t\t\t\t\tlet i = this.spheres.indexOf(e.drag.object);\n\t\t\t\t\t\tif (i !== -1) {\n\t\t\t\t\t\t\tthis.setPosition(i, I.location);\n\t\t\t\t\t\t\t//this.dispatchEvent({\n\t\t\t\t\t\t\t//\t'type': 'marker_moved',\n\t\t\t\t\t\t\t//\t'profile': this,\n\t\t\t\t\t\t\t//\t'index': i\n\t\t\t\t\t\t\t//});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet drop = e => {\n\t\t\t\t\tlet i = this.spheres.indexOf(e.drag.object);\n\t\t\t\t\tif (i !== -1) {\n\t\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\t\t'type': 'marker_dropped',\n\t\t\t\t\t\t\t'profile': this,\n\t\t\t\t\t\t\t'index': i\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet mouseover = (e) => e.object.material.emissive.setHex(0x888888);\n\t\t\t\tlet mouseleave = (e) => e.object.material.emissive.setHex(0x000000);\n\n\t\t\t\tsphere.addEventListener('drag', drag);\n\t\t\t\tsphere.addEventListener('drop', drop);\n\t\t\t\tsphere.addEventListener('mouseover', mouseover);\n\t\t\t\tsphere.addEventListener('mouseleave', mouseleave);\n\t\t\t}\n\n\t\t\tlet event = {\n\t\t\t\ttype: 'marker_added',\n\t\t\t\tprofile: this,\n\t\t\t\tsphere: sphere\n\t\t\t};\n\t\t\tthis.dispatchEvent(event);\n\n\t\t\tthis.setPosition(this.points.length - 1, point);\n\t\t}\n\n\t\tremoveMarker (index) {\n\t\t\tthis.points.splice(index, 1);\n\n\t\t\tthis.remove(this.spheres[index]);\n\n\t\t\tlet edgeIndex = (index === 0) ? 0 : (index - 1);\n\t\t\tthis.remove(this.edges[edgeIndex]);\n\t\t\tthis.edges.splice(edgeIndex, 1);\n\t\t\tthis.remove(this.boxes[edgeIndex]);\n\t\t\tthis.boxes.splice(edgeIndex, 1);\n\n\t\t\tthis.spheres.splice(index, 1);\n\n\t\t\tthis.update();\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'marker_removed',\n\t\t\t\t'profile': this\n\t\t\t});\n\t\t}\n\n\t\tsetPosition (index, position) {\n\t\t\tlet point = this.points[index];\n\t\t\tpoint.copy(position);\n\n\t\t\tlet event = {\n\t\t\t\ttype: 'marker_moved',\n\t\t\t\tprofile:\tthis,\n\t\t\t\tindex:\tindex,\n\t\t\t\tposition: point.clone()\n\t\t\t};\n\t\t\tthis.dispatchEvent(event);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tsetWidth (width) {\n\t\t\tthis.width = width;\n\n\t\t\tlet event = {\n\t\t\t\ttype: 'width_changed',\n\t\t\t\tprofile:\tthis,\n\t\t\t\twidth:\twidth\n\t\t\t};\n\t\t\tthis.dispatchEvent(event);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tgetWidth () {\n\t\t\treturn this.width;\n\t\t}\n\n\t\tupdate () {\n\t\t\tif (this.points.length === 0) {\n\t\t\t\treturn;\n\t\t\t} else if (this.points.length === 1) {\n\t\t\t\tlet point = this.points[0];\n\t\t\t\tthis.spheres[0].position.copy(point);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet min = this.points[0].clone();\n\t\t\tlet max = this.points[0].clone();\n\t\t\tlet centroid = new Vector3();\n\t\t\tlet lastIndex = this.points.length - 1;\n\t\t\tfor (let i = 0; i <= lastIndex; i++) {\n\t\t\t\tlet point = this.points[i];\n\t\t\t\tlet sphere = this.spheres[i];\n\t\t\t\tlet leftIndex = (i === 0) ? lastIndex : i - 1;\n\t\t\t\t// let rightIndex = (i === lastIndex) ? 0 : i + 1;\n\t\t\t\tlet leftVertex = this.points[leftIndex];\n\t\t\t\t// let rightVertex = this.points[rightIndex];\n\t\t\t\tlet leftEdge = this.edges[leftIndex];\n\t\t\t\tlet rightEdge = this.edges[i];\n\t\t\t\tlet leftBox = this.boxes[leftIndex];\n\t\t\t\t// rightBox = this.boxes[i];\n\n\t\t\t\t// let leftEdgeLength = point.distanceTo(leftVertex);\n\t\t\t\t// let rightEdgeLength = point.distanceTo(rightVertex);\n\t\t\t\t// let leftEdgeCenter = new THREE.Vector3().addVectors(leftVertex, point).multiplyScalar(0.5);\n\t\t\t\t// let rightEdgeCenter = new THREE.Vector3().addVectors(point, rightVertex).multiplyScalar(0.5);\n\n\t\t\t\tsphere.position.copy(point);\n\n\t\t\t\tif (this._modifiable) {\n\t\t\t\t\tsphere.visible = true;\n\t\t\t\t} else {\n\t\t\t\t\tsphere.visible = false;\n\t\t\t\t}\n\n\t\t\t\tif (leftEdge) {\n\t\t\t\t\tleftEdge.geometry.vertices[1].copy(point);\n\t\t\t\t\tleftEdge.geometry.verticesNeedUpdate = true;\n\t\t\t\t\tleftEdge.geometry.computeBoundingSphere();\n\t\t\t\t}\n\n\t\t\t\tif (rightEdge) {\n\t\t\t\t\trightEdge.geometry.vertices[0].copy(point);\n\t\t\t\t\trightEdge.geometry.verticesNeedUpdate = true;\n\t\t\t\t\trightEdge.geometry.computeBoundingSphere();\n\t\t\t\t}\n\n\t\t\t\tif (leftBox) {\n\t\t\t\t\tlet start = leftVertex;\n\t\t\t\t\tlet end = point;\n\t\t\t\t\tlet length = start.clone().setZ(0).distanceTo(end.clone().setZ(0));\n\t\t\t\t\tleftBox.scale.set(length, 1000000, this.width);\n\t\t\t\t\tleftBox.up.set(0, 0, 1);\n\n\t\t\t\t\tlet center = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n\t\t\t\t\tlet diff = new Vector3().subVectors(end, start);\n\t\t\t\t\tlet target = new Vector3(diff.y, -diff.x, 0);\n\n\t\t\t\t\tleftBox.position.set(0, 0, 0);\n\t\t\t\t\tleftBox.lookAt(target);\n\t\t\t\t\tleftBox.position.copy(center);\n\t\t\t\t}\n\n\t\t\t\tcentroid.add(point);\n\t\t\t\tmin.min(point);\n\t\t\t\tmax.max(point);\n\t\t\t}\n\t\t\tcentroid.multiplyScalar(1 / this.points.length);\n\n\t\t\tfor (let i = 0; i < this.boxes.length; i++) {\n\t\t\t\tlet box = this.boxes[i];\n\n\t\t\t\tbox.position.z = min.z + (max.z - min.z) / 2;\n\t\t\t}\n\t\t}\n\n\t\traycast (raycaster, intersects) {\n\t\t\tfor (let i = 0; i < this.points.length; i++) {\n\t\t\t\tlet sphere = this.spheres[i];\n\n\t\t\t\tsphere.raycast(raycaster, intersects);\n\t\t\t}\n\n\t\t\t// recalculate distances because they are not necessarely correct\n\t\t\t// for scaled objects.\n\t\t\t// see https://github.com/mrdoob/three.js/issues/5827\n\t\t\t// TODO: remove this once the bug has been fixed\n\t\t\tfor (let i = 0; i < intersects.length; i++) {\n\t\t\t\tlet I = intersects[i];\n\t\t\t\tI.distance = raycaster.ray.origin.distanceTo(I.point);\n\t\t\t}\n\t\t\tintersects.sort(function (a, b) { return a.distance - b.distance; });\n\t\t};\n\n\t\tget modifiable () {\n\t\t\treturn this._modifiable;\n\t\t}\n\n\t\tset modifiable (value) {\n\t\t\tthis._modifiable = value;\n\t\t\tthis.update();\n\t\t}\n\n\t}\n\n\tvar LineSegmentsGeometry = function () {\n\n\t\tInstancedBufferGeometry.call( this );\n\n\t\tthis.type = 'LineSegmentsGeometry';\n\n\t\tvar positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\t\tvar uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\t\tvar index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\t\tthis.setIndex( index );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t};\n\n\tLineSegmentsGeometry.prototype = Object.assign( Object.create( InstancedBufferGeometry.prototype ), {\n\n\t\tconstructor: LineSegmentsGeometry,\n\n\t\tisLineSegmentsGeometry: true,\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\tvar start = this.attributes.instanceStart;\n\t\t\tvar end = this.attributes.instanceEnd;\n\n\t\t\tif ( start !== undefined ) {\n\n\t\t\t\tstart.applyMatrix4( matrix );\n\n\t\t\t\tend.applyMatrix4( matrix );\n\n\t\t\t\tstart.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tthis.computeBoundingSphere();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPositions: function ( array ) {\n\n\t\t\tvar lineSegments;\n\n\t\t\tif ( array instanceof Float32Array ) {\n\n\t\t\t\tlineSegments = array;\n\n\t\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\t\tlineSegments = new Float32Array( array );\n\n\t\t\t}\n\n\t\t\tvar instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\t\tthis.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\t\tthis.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\t\t//\n\n\t\t\tthis.computeBoundingBox();\n\t\t\tthis.computeBoundingSphere();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetColors: function ( array ) {\n\n\t\t\tvar colors;\n\n\t\t\tif ( array instanceof Float32Array ) {\n\n\t\t\t\tcolors = array;\n\n\t\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\t\tcolors = new Float32Array( array );\n\n\t\t\t}\n\n\t\t\tvar instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\t\tthis.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\t\tthis.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromWireframeGeometry: function ( geometry ) {\n\n\t\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromEdgesGeometry: function ( geometry ) {\n\n\t\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromMesh: function ( mesh ) {\n\n\t\t\tthis.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );\n\n\t\t\t// set colors, maybe\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromLineSegments: function ( lineSegments ) {\n\n\t\t\tvar geometry = lineSegments.geometry;\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tthis.setPositions( geometry.vertices );\n\n\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t\t}\n\n\t\t\t// set colors, maybe\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcomputeBoundingBox: function () {\n\n\t\t\tvar box = new Box3();\n\n\t\t\treturn function computeBoundingBox() {\n\n\t\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\t\tthis.boundingBox = new Box3();\n\n\t\t\t\t}\n\n\t\t\t\tvar start = this.attributes.instanceStart;\n\t\t\t\tvar end = this.attributes.instanceEnd;\n\n\t\t\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t\t\tbox.setFromBufferAttribute( end );\n\n\t\t\t\t\tthis.boundingBox.union( box );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcomputeBoundingSphere: function () {\n\n\t\t\tvar vector = new Vector3();\n\n\t\t\treturn function computeBoundingSphere() {\n\n\t\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t\t}\n\n\t\t\t\tvar start = this.attributes.instanceStart;\n\t\t\t\tvar end = this.attributes.instanceEnd;\n\n\t\t\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\t\tfor ( var i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t\t\tvector.fromBufferAttribute( start, i );\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t\t\tvector.fromBufferAttribute( end, i );\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttoJSON: function () {\n\n\t\t\t// todo\n\n\t\t},\n\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tconsole.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' );\n\n\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * parameters = {\n\t *  color: <hex>,\n\t *  linewidth: <float>,\n\t *  dashed: <boolean>,\n\t *  dashScale: <float>,\n\t *  dashSize: <float>,\n\t *  dashOffset: <float>,\n\t *  gapSize: <float>,\n\t *  resolution: <Vector2>, // to be set by renderer\n\t * }\n\t */\n\n\tUniformsLib.line = {\n\n\t\tlinewidth: { value: 1 },\n\t\tresolution: { value: new Vector2( 1, 1 ) },\n\t\tdashScale: { value: 1 },\n\t\tdashSize: { value: 1 },\n\t\tdashOffset: { value: 0 },\n\t\tgapSize: { value: 1 }, // todo FIX - maybe change to totalSize\n\t\topacity: { value: 1 }\n\n\t};\n\n\tShaderLib[ 'line' ] = {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.line\n\t\t] ),\n\n\t\tvertexShader:\n\t\t\t`\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\tvarying vec2 vUv;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\tvUv = uv;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec2 ndcStart = clipStart.xy / clipStart.w;\n\t\t\tvec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd - ndcStart;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t// perpendicular to dir\n\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\n\t\t\t// undo aspect ratio adjustment\n\t\t\tdir.x /= aspect;\n\t\t\toffset.x /= aspect;\n\n\t\t\t// sign flip\n\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t// endcaps\n\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\toffset += - dir;\n\n\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\toffset += dir;\n\n\t\t\t}\n\n\t\t\t// adjust for linewidth\n\t\t\toffset *= linewidth;\n\n\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\toffset /= resolution.y;\n\n\t\t\t// select end\n\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t// back to clip space\n\t\t\toffset *= clip.w;\n\n\t\t\tclip.xy += offset;\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t`,\n\n\t\tfragmentShader:\n\t\t\t`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashSize;\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\tfloat a = vUv.x;\n\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t}\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <encodings_fragment>\n\t\t\t#include <fog_fragment>\n\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t}\n\t\t`\n\t};\n\n\tvar LineMaterial = function ( parameters ) {\n\n\t\tShaderMaterial.call( this, {\n\n\t\t\ttype: 'LineMaterial',\n\n\t\t\tuniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ),\n\n\t\t\tvertexShader: ShaderLib[ 'line' ].vertexShader,\n\t\t\tfragmentShader: ShaderLib[ 'line' ].fragmentShader,\n\n\t\t\tclipping: true // required for clipping support\n\n\t\t} );\n\n\t\tthis.dashed = false;\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tcolor: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.diffuse.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.diffuse.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tlinewidth: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.linewidth.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.linewidth.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tdashScale: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.dashScale.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.dashScale.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tdashSize: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.dashSize.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.dashSize.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tdashOffset: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.dashOffset.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.dashOffset.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tgapSize: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.gapSize.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.gapSize.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\topacity: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.opacity.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.opacity.value = value;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tresolution: {\n\n\t\t\t\tenumerable: true,\n\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.resolution.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.resolution.value.copy( value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.setValues( parameters );\n\n\t};\n\n\tLineMaterial.prototype = Object.create( ShaderMaterial.prototype );\n\tLineMaterial.prototype.constructor = LineMaterial;\n\n\tLineMaterial.prototype.isLineMaterial = true;\n\n\tvar LineSegments2 = function ( geometry, material ) {\n\n\t\tif ( geometry === undefined ) geometry = new LineSegmentsGeometry();\n\t\tif ( material === undefined ) material = new LineMaterial( { color: Math.random() * 0xffffff } );\n\n\t\tMesh.call( this, geometry, material );\n\n\t\tthis.type = 'LineSegments2';\n\n\t};\n\n\tLineSegments2.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\t\tconstructor: LineSegments2,\n\n\t\tisLineSegments2: true,\n\n\t\tcomputeLineDistances: ( function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry...\n\n\t\t\tvar start = new Vector3();\n\t\t\tvar end = new Vector3();\n\n\t\t\treturn function computeLineDistances() {\n\n\t\t\t\tvar geometry = this.geometry;\n\n\t\t\t\tvar instanceStart = geometry.attributes.instanceStart;\n\t\t\t\tvar instanceEnd = geometry.attributes.instanceEnd;\n\t\t\t\tvar lineDistances = new Float32Array( 2 * instanceStart.data.count );\n\n\t\t\t\tfor ( var i = 0, j = 0, l = instanceStart.data.count; i < l; i ++, j += 2 ) {\n\n\t\t\t\t\tstart.fromBufferAttribute( instanceStart, i );\n\t\t\t\t\tend.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + start.distanceTo( end );\n\n\t\t\t\t}\n\n\t\t\t\tvar instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\t\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\t\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\traycast: ( function () {\n\n\t\t\tvar start = new Vector4();\n\t\t\tvar end = new Vector4();\n\n\t\t\tvar ssOrigin = new Vector4();\n\t\t\tvar ssOrigin3 = new Vector3();\n\t\t\tvar mvMatrix = new Matrix4();\n\t\t\tvar line = new Line3();\n\t\t\tvar closestPoint = new Vector3();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tif ( raycaster.camera === null ) {\n\n\t\t\t\t\tconsole.error( 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2.' );\n\n\t\t\t\t}\n\n\t\t\t\tvar threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;\n\n\t\t\t\tvar ray = raycaster.ray;\n\t\t\t\tvar camera = raycaster.camera;\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix;\n\n\t\t\t\tvar geometry = this.geometry;\n\t\t\t\tvar material = this.material;\n\t\t\t\tvar resolution = material.resolution;\n\t\t\t\tvar lineWidth = material.linewidth + threshold;\n\n\t\t\t\tvar instanceStart = geometry.attributes.instanceStart;\n\t\t\t\tvar instanceEnd = geometry.attributes.instanceEnd;\n\n\t\t\t\t// pick a point 1 unit out along the ray to avoid the ray origin\n\t\t\t\t// sitting at the camera origin which will cause \"w\" to be 0 when\n\t\t\t\t// applying the projection matrix.\n\t\t\t\tray.at( 1, ssOrigin );\n\n\t\t\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t\t\tssOrigin.w = 1;\n\t\t\t\tssOrigin.applyMatrix4( camera.matrixWorldInverse );\n\t\t\t\tssOrigin.applyMatrix4( projectionMatrix );\n\t\t\t\tssOrigin.multiplyScalar( 1 / ssOrigin.w );\n\n\t\t\t\t// screen space\n\t\t\t\tssOrigin.x *= resolution.x / 2;\n\t\t\t\tssOrigin.y *= resolution.y / 2;\n\t\t\t\tssOrigin.z = 0;\n\n\t\t\t\tssOrigin3.copy( ssOrigin );\n\n\t\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\t\tmvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );\n\n\t\t\t\tfor ( var i = 0, l = instanceStart.count; i < l; i ++ ) {\n\n\t\t\t\t\tstart.fromBufferAttribute( instanceStart, i );\n\t\t\t\t\tend.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\t\tstart.w = 1;\n\t\t\t\t\tend.w = 1;\n\n\t\t\t\t\t// camera space\n\t\t\t\t\tstart.applyMatrix4( mvMatrix );\n\t\t\t\t\tend.applyMatrix4( mvMatrix );\n\n\t\t\t\t\t// clip space\n\t\t\t\t\tstart.applyMatrix4( projectionMatrix );\n\t\t\t\t\tend.applyMatrix4( projectionMatrix );\n\n\t\t\t\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t\t\t\tstart.multiplyScalar( 1 / start.w );\n\t\t\t\t\tend.multiplyScalar( 1 / end.w );\n\n\t\t\t\t\t// skip the segment if it's outside the camera near and far planes\n\t\t\t\t\tvar isBehindCameraNear = start.z < - 1 && end.z < - 1;\n\t\t\t\t\tvar isPastCameraFar = start.z > 1 && end.z > 1;\n\t\t\t\t\tif ( isBehindCameraNear || isPastCameraFar ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// screen space\n\t\t\t\t\tstart.x *= resolution.x / 2;\n\t\t\t\t\tstart.y *= resolution.y / 2;\n\n\t\t\t\t\tend.x *= resolution.x / 2;\n\t\t\t\t\tend.y *= resolution.y / 2;\n\n\t\t\t\t\t// create 2d segment\n\t\t\t\t\tline.start.copy( start );\n\t\t\t\t\tline.start.z = 0;\n\n\t\t\t\t\tline.end.copy( end );\n\t\t\t\t\tline.end.z = 0;\n\n\t\t\t\t\t// get closest point on ray to segment\n\t\t\t\t\tvar param = line.closestPointToPointParameter( ssOrigin3, true );\n\t\t\t\t\tline.at( param, closestPoint );\n\n\t\t\t\t\t// check if the intersection point is within clip space\n\t\t\t\t\tvar zPos = MathUtils.lerp( start.z, end.z, param );\n\t\t\t\t\tvar isInClipSpace = zPos >= - 1 && zPos <= 1;\n\n\t\t\t\t\tvar isInside = ssOrigin3.distanceTo( closestPoint ) < lineWidth * 0.5;\n\n\t\t\t\t\tif ( isInClipSpace && isInside ) {\n\n\t\t\t\t\t\tline.start.fromBufferAttribute( instanceStart, i );\n\t\t\t\t\t\tline.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\t\t\tline.start.applyMatrix4( matrixWorld );\n\t\t\t\t\t\tline.end.applyMatrix4( matrixWorld );\n\n\t\t\t\t\t\tvar pointOnLine = new Vector3();\n\t\t\t\t\t\tvar point = new Vector3();\n\n\t\t\t\t\t\tray.distanceSqToSegment( line.start, line.end, point, pointOnLine );\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tpoint: point,\n\t\t\t\t\t\t\tpointOnLine: pointOnLine,\n\t\t\t\t\t\t\tdistance: ray.origin.distanceTo( point ),\n\n\t\t\t\t\t\t\tobject: this,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: i,\n\t\t\t\t\t\t\tuv: null,\n\t\t\t\t\t\t\tuv2: null,\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() )\n\n\t} );\n\n\tvar LineGeometry = function () {\n\n\t\tLineSegmentsGeometry.call( this );\n\n\t\tthis.type = 'LineGeometry';\n\n\t};\n\n\tLineGeometry.prototype = Object.assign( Object.create( LineSegmentsGeometry.prototype ), {\n\n\t\tconstructor: LineGeometry,\n\n\t\tisLineGeometry: true,\n\n\t\tsetPositions: function ( array ) {\n\n\t\t\t// converts [ x1, y1, z1,  x2, y2, z2, ... ] to pairs format\n\n\t\t\tvar length = array.length - 3;\n\t\t\tvar points = new Float32Array( 2 * length );\n\n\t\t\tfor ( var i = 0; i < length; i += 3 ) {\n\n\t\t\t\tpoints[ 2 * i ] = array[ i ];\n\t\t\t\tpoints[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\t\tpoints[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\t\tpoints[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\t\tpoints[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\t\tpoints[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t\t}\n\n\t\t\tLineSegmentsGeometry.prototype.setPositions.call( this, points );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetColors: function ( array ) {\n\n\t\t\t// converts [ r1, g1, b1,  r2, g2, b2, ... ] to pairs format\n\n\t\t\tvar length = array.length - 3;\n\t\t\tvar colors = new Float32Array( 2 * length );\n\n\t\t\tfor ( var i = 0; i < length; i += 3 ) {\n\n\t\t\t\tcolors[ 2 * i ] = array[ i ];\n\t\t\t\tcolors[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\t\tcolors[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\t\tcolors[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\t\tcolors[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\t\tcolors[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t\t}\n\n\t\t\tLineSegmentsGeometry.prototype.setColors.call( this, colors );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromLine: function ( line ) {\n\n\t\t\tvar geometry = line.geometry;\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tthis.setPositions( geometry.vertices );\n\n\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t\t}\n\n\t\t\t// set colors, maybe\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopy: function ( /* source */ ) {\n\n\t\t\t// todo\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tvar Line2 = function ( geometry, material ) {\n\n\t\tif ( geometry === undefined ) geometry = new LineGeometry();\n\t\tif ( material === undefined ) material = new LineMaterial( { color: Math.random() * 0xffffff } );\n\n\t\tLineSegments2.call( this, geometry, material );\n\n\t\tthis.type = 'Line2';\n\n\t};\n\n\tLine2.prototype = Object.assign( Object.create( LineSegments2.prototype ), {\n\n\t\tconstructor: Line2,\n\n\t\tisLine2: true\n\n\t} );\n\n\tfunction createHeightLine(){\n\t\tlet lineGeometry = new LineGeometry();\n\n\t\tlineGeometry.setPositions([\n\t\t\t0, 0, 0,\n\t\t\t0, 0, 0,\n\t\t]);\n\n\t\tlet lineMaterial = new LineMaterial({ \n\t\t\tcolor: 0x00ff00, \n\t\t\tdashSize: 5, \n\t\t\tgapSize: 2,\n\t\t\tlinewidth: 2, \n\t\t\tresolution:  new Vector2(1000, 1000),\n\t\t});\n\n\t\tlineMaterial.depthTest = false;\n\t\tconst heightEdge = new Line2(lineGeometry, lineMaterial);\n\t\theightEdge.visible = false;\n\n\t\t//this.add(this.heightEdge);\n\t\t\n\t\treturn heightEdge;\n\t}\n\n\tfunction createHeightLabel(){\n\t\tconst heightLabel = new TextSprite('');\n\n\t\theightLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0});\n\t\theightLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\theightLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\theightLabel.fontsize = 16;\n\t\theightLabel.material.depthTest = false;\n\t\theightLabel.material.opacity = 1;\n\t\theightLabel.visible = false;\n\n\t\treturn heightLabel;\n\t}\n\n\tfunction createAreaLabel(){\n\t\tconst areaLabel = new TextSprite('');\n\n\t\tareaLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0});\n\t\tareaLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\tareaLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\tareaLabel.fontsize = 16;\n\t\tareaLabel.material.depthTest = false;\n\t\tareaLabel.material.opacity = 1;\n\t\tareaLabel.visible = false;\n\t\t\n\t\treturn areaLabel;\n\t}\n\n\tfunction createCircleRadiusLabel(){\n\t\tconst circleRadiusLabel = new TextSprite(\"\");\n\n\t\tcircleRadiusLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0});\n\t\tcircleRadiusLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\tcircleRadiusLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\tcircleRadiusLabel.fontsize = 16;\n\t\tcircleRadiusLabel.material.depthTest = false;\n\t\tcircleRadiusLabel.material.opacity = 1;\n\t\tcircleRadiusLabel.visible = false;\n\t\t\n\t\treturn circleRadiusLabel;\n\t}\n\n\tfunction createCircleRadiusLine(){\n\t\tconst lineGeometry = new LineGeometry();\n\n\t\tlineGeometry.setPositions([\n\t\t\t0, 0, 0,\n\t\t\t0, 0, 0,\n\t\t]);\n\n\t\tconst lineMaterial = new LineMaterial({ \n\t\t\tcolor: 0xff0000, \n\t\t\tlinewidth: 2, \n\t\t\tresolution:  new Vector2(1000, 1000),\n\t\t\tgapSize: 1,\n\t\t\tdashed: true,\n\t\t});\n\n\t\tlineMaterial.depthTest = false;\n\n\t\tconst circleRadiusLine = new Line2(lineGeometry, lineMaterial);\n\t\tcircleRadiusLine.visible = false;\n\n\t\treturn circleRadiusLine;\n\t}\n\n\tfunction createCircleLine(){\n\t\tconst coordinates = [];\n\n\t\tlet n = 128;\n\t\tfor(let i = 0; i <= n; i++){\n\t\t\tlet u0 = 2 * Math.PI * (i / n);\n\t\t\tlet u1 = 2 * Math.PI * (i + 1) / n;\n\n\t\t\tlet p0 = new Vector3(\n\t\t\t\tMath.cos(u0), \n\t\t\t\tMath.sin(u0), \n\t\t\t\t0\n\t\t\t);\n\n\t\t\tlet p1 = new Vector3(\n\t\t\t\tMath.cos(u1), \n\t\t\t\tMath.sin(u1), \n\t\t\t\t0\n\t\t\t);\n\n\t\t\tcoordinates.push(\n\t\t\t\t...p0.toArray(),\n\t\t\t\t...p1.toArray(),\n\t\t\t);\n\t\t}\n\n\t\tconst geometry = new LineGeometry();\n\t\tgeometry.setPositions(coordinates);\n\n\t\tconst material = new LineMaterial({ \n\t\t\tcolor: 0xff0000, \n\t\t\tdashSize: 5, \n\t\t\tgapSize: 2,\n\t\t\tlinewidth: 2, \n\t\t\tresolution:  new Vector2(1000, 1000),\n\t\t});\n\n\t\tmaterial.depthTest = false;\n\n\t\tconst circleLine = new Line2(geometry, material);\n\t\tcircleLine.visible = false;\n\t\tcircleLine.computeLineDistances();\n\n\t\treturn circleLine;\n\t}\n\n\tfunction createCircleCenter(){\n\t\tconst sg = new SphereGeometry(1, 32, 32);\n\t\tconst sm = new MeshNormalMaterial();\n\t\t\n\t\tconst circleCenter = new Mesh(sg, sm);\n\t\tcircleCenter.visible = false;\n\n\t\treturn circleCenter;\n\t}\n\n\tfunction createLine(){\n\t\tconst geometry = new LineGeometry();\n\n\t\tgeometry.setPositions([\n\t\t\t0, 0, 0,\n\t\t\t0, 0, 0,\n\t\t]);\n\n\t\tconst material = new LineMaterial({ \n\t\t\tcolor: 0xff0000, \n\t\t\tlinewidth: 2, \n\t\t\tresolution:  new Vector2(1000, 1000),\n\t\t\tgapSize: 1,\n\t\t\tdashed: true,\n\t\t});\n\n\t\tmaterial.depthTest = false;\n\n\t\tconst line = new Line2(geometry, material);\n\n\t\treturn line;\n\t}\n\n\tfunction createCircle(){\n\n\t\tconst coordinates = [];\n\n\t\tlet n = 128;\n\t\tfor(let i = 0; i <= n; i++){\n\t\t\tlet u0 = 2 * Math.PI * (i / n);\n\t\t\tlet u1 = 2 * Math.PI * (i + 1) / n;\n\n\t\t\tlet p0 = new Vector3(\n\t\t\t\tMath.cos(u0), \n\t\t\t\tMath.sin(u0), \n\t\t\t\t0\n\t\t\t);\n\n\t\t\tlet p1 = new Vector3(\n\t\t\t\tMath.cos(u1), \n\t\t\t\tMath.sin(u1), \n\t\t\t\t0\n\t\t\t);\n\n\t\t\tcoordinates.push(\n\t\t\t\t...p0.toArray(),\n\t\t\t\t...p1.toArray(),\n\t\t\t);\n\t\t}\n\n\t\tconst geometry = new LineGeometry();\n\t\tgeometry.setPositions(coordinates);\n\n\t\tconst material = new LineMaterial({ \n\t\t\tcolor: 0xff0000, \n\t\t\tdashSize: 5, \n\t\t\tgapSize: 2,\n\t\t\tlinewidth: 2, \n\t\t\tresolution:  new Vector2(1000, 1000),\n\t\t});\n\n\t\tmaterial.depthTest = false;\n\n\t\tconst line = new Line2(geometry, material);\n\t\tline.computeLineDistances();\n\n\t\treturn line;\n\n\t}\n\n\tfunction createAzimuth(){\n\n\t\tconst azimuth = {\n\t\t\tlabel: null,\n\t\t\tcenter: null,\n\t\t\ttarget: null,\n\t\t\tnorth: null,\n\t\t\tcenterToNorth: null,\n\t\t\tcenterToTarget: null,\n\t\t\tcenterToTargetground: null,\n\t\t\ttargetgroundToTarget: null,\n\t\t\tcircle: null,\n\n\t\t\tnode: null,\n\t\t};\n\n\t\tconst sg = new SphereGeometry(1, 32, 32);\n\t\tconst sm = new MeshNormalMaterial();\n\n\t\t{\n\t\t\tconst label = new TextSprite(\"\");\n\n\t\t\tlabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0});\n\t\t\tlabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\tlabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\tlabel.fontsize = 16;\n\t\t\tlabel.material.depthTest = false;\n\t\t\tlabel.material.opacity = 1;\n\n\t\t\tazimuth.label = label;\n\t\t}\n\n\t\tazimuth.center = new Mesh(sg, sm);\n\t\tazimuth.target = new Mesh(sg, sm);\n\t\tazimuth.north = new Mesh(sg, sm);\n\t\tazimuth.centerToNorth = createLine();\n\t\tazimuth.centerToTarget = createLine();\n\t\tazimuth.centerToTargetground = createLine();\n\t\tazimuth.targetgroundToTarget = createLine();\n\t\tazimuth.circle = createCircle();\n\n\t\tazimuth.node = new Object3D();\n\t\tazimuth.node.add(\n\t\t\tazimuth.centerToNorth,\n\t\t\tazimuth.centerToTarget,\n\t\t\tazimuth.centerToTargetground,\n\t\t\tazimuth.targetgroundToTarget,\n\t\t\tazimuth.circle,\n\t\t\tazimuth.label,\n\t\t\tazimuth.center,\n\t\t\tazimuth.target,\n\t\t\tazimuth.north,\n\t\t);\n\n\t\treturn azimuth;\n\t}\n\n\tclass Measure extends Object3D {\n\t\tconstructor () {\n\t\t\tsuper();\n\n\t\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\n\t\t\tthis.name = 'Measure_' + this.constructor.counter;\n\t\t\tthis.points = [];\n\t\t\tthis._showDistances = true;\n\t\t\tthis._showCoordinates = false;\n\t\t\tthis._showArea = false;\n\t\t\tthis._closed = true;\n\t\t\tthis._showAngles = false;\n\t\t\tthis._showCircle = false;\n\t\t\tthis._showHeight = false;\n\t\t\tthis._showEdges = true;\n\t\t\tthis._showAzimuth = false;\n\t\t\tthis.maxMarkers = Number.MAX_SAFE_INTEGER;\n\n\t\t\tthis.sphereGeometry = new SphereGeometry(0.4, 10, 10);\n\t\t\tthis.color = new Color(0xff0000);\n\n\t\t\tthis.spheres = [];\n\t\t\tthis.edges = [];\n\t\t\tthis.sphereLabels = [];\n\t\t\tthis.edgeLabels = [];\n\t\t\tthis.angleLabels = [];\n\t\t\tthis.coordinateLabels = [];\n\n\t\t\tthis.heightEdge = createHeightLine();\n\t\t\tthis.heightLabel = createHeightLabel();\n\t\t\tthis.areaLabel = createAreaLabel();\n\t\t\tthis.circleRadiusLabel = createCircleRadiusLabel();\n\t\t\tthis.circleRadiusLine = createCircleRadiusLine();\n\t\t\tthis.circleLine = createCircleLine();\n\t\t\tthis.circleCenter = createCircleCenter();\n\n\t\t\tthis.azimuth = createAzimuth();\n\n\t\t\tthis.add(this.heightEdge);\n\t\t\tthis.add(this.heightLabel);\n\t\t\tthis.add(this.areaLabel);\n\t\t\tthis.add(this.circleRadiusLabel);\n\t\t\tthis.add(this.circleRadiusLine);\n\t\t\tthis.add(this.circleLine);\n\t\t\tthis.add(this.circleCenter);\n\n\t\t\tthis.add(this.azimuth.node);\n\n\t\t}\n\n\t\tcreateSphereMaterial () {\n\t\t\tlet sphereMaterial = new MeshLambertMaterial({\n\t\t\t\t//shading: THREE.SmoothShading,\n\t\t\t\tcolor: this.color,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false}\n\t\t\t);\n\n\t\t\treturn sphereMaterial;\n\t\t};\n\n\t\taddMarker (point) {\n\t\t\tif (point.x != null) {\n\t\t\t\tpoint = {position: point};\n\t\t\t}else if(point instanceof Array){\n\t\t\t\tpoint = {position: new Vector3(...point)};\n\t\t\t}\n\t\t\tthis.points.push(point);\n\n\t\t\t// sphere\n\t\t\tlet sphere = new Mesh(this.sphereGeometry, this.createSphereMaterial());\n\n\t\t\tthis.add(sphere);\n\t\t\tthis.spheres.push(sphere);\n\n\t\t\t{ // edges\n\t\t\t\tlet lineGeometry = new LineGeometry();\n\t\t\t\tlineGeometry.setPositions( [\n\t\t\t\t\t\t0, 0, 0,\n\t\t\t\t\t\t0, 0, 0,\n\t\t\t\t]);\n\n\t\t\t\tlet lineMaterial = new LineMaterial({\n\t\t\t\t\tcolor: 0xff0000, \n\t\t\t\t\tlinewidth: 2, \n\t\t\t\t\tresolution:  new Vector2(1000, 1000),\n\t\t\t\t});\n\n\t\t\t\tlineMaterial.depthTest = false;\n\n\t\t\t\tlet edge = new Line2(lineGeometry, lineMaterial);\n\t\t\t\tedge.visible = true;\n\n\t\t\t\tthis.add(edge);\n\t\t\t\tthis.edges.push(edge);\n\t\t\t}\n\n\t\t\t{ // edge labels\n\t\t\t\tlet edgeLabel = new TextSprite();\n\t\t\t\tedgeLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\t\tedgeLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\t\tedgeLabel.material.depthTest = false;\n\t\t\t\tedgeLabel.visible = false;\n\t\t\t\tedgeLabel.fontsize = 16;\n\t\t\t\tthis.edgeLabels.push(edgeLabel);\n\t\t\t\tthis.add(edgeLabel);\n\t\t\t}\n\n\t\t\t{ // angle labels\n\t\t\t\tlet angleLabel = new TextSprite();\n\t\t\t\tangleLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\t\tangleLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\t\tangleLabel.fontsize = 16;\n\t\t\t\tangleLabel.material.depthTest = false;\n\t\t\t\tangleLabel.material.opacity = 1;\n\t\t\t\tangleLabel.visible = false;\n\t\t\t\tthis.angleLabels.push(angleLabel);\n\t\t\t\tthis.add(angleLabel);\n\t\t\t}\n\n\t\t\t{ // coordinate labels\n\t\t\t\tlet coordinateLabel = new TextSprite();\n\t\t\t\tcoordinateLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\t\tcoordinateLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0});\n\t\t\t\tcoordinateLabel.fontsize = 16;\n\t\t\t\tcoordinateLabel.material.depthTest = false;\n\t\t\t\tcoordinateLabel.material.opacity = 1;\n\t\t\t\tcoordinateLabel.visible = false;\n\t\t\t\tthis.coordinateLabels.push(coordinateLabel);\n\t\t\t\tthis.add(coordinateLabel);\n\t\t\t}\n\n\t\t\t{ // Event Listeners\n\t\t\t\tlet drag = (e) => {\n\t\t\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\t\t\te.drag.end, \n\t\t\t\t\t\te.viewer.scene.getActiveCamera(), \n\t\t\t\t\t\te.viewer, \n\t\t\t\t\t\te.viewer.scene.pointclouds,\n\t\t\t\t\t\t{pickClipped: true});\n\n\t\t\t\t\tif (I) {\n\t\t\t\t\t\tlet i = this.spheres.indexOf(e.drag.object);\n\t\t\t\t\t\tif (i !== -1) {\n\t\t\t\t\t\t\tlet point = this.points[i];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// loop through current keys and cleanup ones that will be orphaned\n\t\t\t\t\t\t\tfor (let key of Object.keys(point)) {\n\t\t\t\t\t\t\t\tif (!I.point[key]) {\n\t\t\t\t\t\t\t\t\tdelete point[key];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (let key of Object.keys(I.point).filter(e => e !== 'position')) {\n\t\t\t\t\t\t\t\tpoint[key] = I.point[key];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.setPosition(i, I.location);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet drop = e => {\n\t\t\t\t\tlet i = this.spheres.indexOf(e.drag.object);\n\t\t\t\t\tif (i !== -1) {\n\t\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\t\t'type': 'marker_dropped',\n\t\t\t\t\t\t\t'measurement': this,\n\t\t\t\t\t\t\t'index': i\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet mouseover = (e) => e.object.material.emissive.setHex(0x888888);\n\t\t\t\tlet mouseleave = (e) => e.object.material.emissive.setHex(0x000000);\n\n\t\t\t\tsphere.addEventListener('drag', drag);\n\t\t\t\tsphere.addEventListener('drop', drop);\n\t\t\t\tsphere.addEventListener('mouseover', mouseover);\n\t\t\t\tsphere.addEventListener('mouseleave', mouseleave);\n\t\t\t}\n\n\t\t\tlet event = {\n\t\t\t\ttype: 'marker_added',\n\t\t\t\tmeasurement: this,\n\t\t\t\tsphere: sphere\n\t\t\t};\n\t\t\tthis.dispatchEvent(event);\n\n\t\t\tthis.setMarker(this.points.length - 1, point);\n\t\t};\n\n\t\tremoveMarker (index) {\n\t\t\tthis.points.splice(index, 1);\n\n\t\t\tthis.remove(this.spheres[index]);\n\n\t\t\tlet edgeIndex = (index === 0) ? 0 : (index - 1);\n\t\t\tthis.remove(this.edges[edgeIndex]);\n\t\t\tthis.edges.splice(edgeIndex, 1);\n\n\t\t\tthis.remove(this.edgeLabels[edgeIndex]);\n\t\t\tthis.edgeLabels.splice(edgeIndex, 1);\n\t\t\tthis.coordinateLabels.splice(index, 1);\n\n\t\t\tthis.remove(this.angleLabels[index]);\n\t\t\tthis.angleLabels.splice(index, 1);\n\n\t\t\tthis.spheres.splice(index, 1);\n\n\t\t\tthis.update();\n\n\t\t\tthis.dispatchEvent({type: 'marker_removed', measurement: this});\n\t\t};\n\n\t\tsetMarker (index, point) {\n\t\t\tthis.points[index] = point;\n\n\t\t\tlet event = {\n\t\t\t\ttype: 'marker_moved',\n\t\t\t\tmeasure:\tthis,\n\t\t\t\tindex:\tindex,\n\t\t\t\tposition: point.position.clone()\n\t\t\t};\n\t\t\tthis.dispatchEvent(event);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tsetPosition (index, position) {\n\t\t\tlet point = this.points[index];\n\t\t\tpoint.position.copy(position);\n\n\t\t\tlet event = {\n\t\t\t\ttype: 'marker_moved',\n\t\t\t\tmeasure:\tthis,\n\t\t\t\tindex:\tindex,\n\t\t\t\tposition: position.clone()\n\t\t\t};\n\t\t\tthis.dispatchEvent(event);\n\n\t\t\tthis.update();\n\t\t};\n\n\t\tgetArea () {\n\t\t\tlet area = 0;\n\t\t\tlet j = this.points.length - 1;\n\n\t\t\tfor (let i = 0; i < this.points.length; i++) {\n\t\t\t\tlet p1 = this.points[i].position;\n\t\t\t\tlet p2 = this.points[j].position;\n\t\t\t\tarea += (p2.x + p1.x) * (p1.y - p2.y);\n\t\t\t\tj = i;\n\t\t\t}\n\n\t\t\treturn Math.abs(area / 2);\n\t\t};\n\n\t\tgetTotalDistance () {\n\t\t\tif (this.points.length === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tlet distance = 0;\n\n\t\t\tfor (let i = 1; i < this.points.length; i++) {\n\t\t\t\tlet prev = this.points[i - 1].position;\n\t\t\t\tlet curr = this.points[i].position;\n\t\t\t\tlet d = prev.distanceTo(curr);\n\n\t\t\t\tdistance += d;\n\t\t\t}\n\n\t\t\tif (this.closed && this.points.length > 1) {\n\t\t\t\tlet first = this.points[0].position;\n\t\t\t\tlet last = this.points[this.points.length - 1].position;\n\t\t\t\tlet d = last.distanceTo(first);\n\n\t\t\t\tdistance += d;\n\t\t\t}\n\n\t\t\treturn distance;\n\t\t}\n\n\t\tgetAngleBetweenLines (cornerPoint, point1, point2) {\n\t\t\tlet v1 = new Vector3().subVectors(point1.position, cornerPoint.position);\n\t\t\tlet v2 = new Vector3().subVectors(point2.position, cornerPoint.position);\n\n\t\t\t// avoid the error printed by threejs if denominator is 0\n\t\t\tconst denominator = Math.sqrt( v1.lengthSq() * v2.lengthSq() );\n\t\t\tif(denominator === 0){\n\t\t\t\treturn 0;\n\t\t\t}else {\n\t\t\t\treturn v1.angleTo(v2);\n\t\t\t}\n\t\t};\n\n\t\tgetAngle (index) {\n\t\t\tif (this.points.length < 3 || index >= this.points.length) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tlet previous = (index === 0) ? this.points[this.points.length - 1] : this.points[index - 1];\n\t\t\tlet point = this.points[index];\n\t\t\tlet next = this.points[(index + 1) % (this.points.length)];\n\n\t\t\treturn this.getAngleBetweenLines(point, previous, next);\n\t\t}\n\n\t\t// updateAzimuth(){\n\t\t// \t// if(this.points.length !== 2){\n\t\t// \t// \treturn;\n\t\t// \t// }\n\n\t\t// \t// const azimuth = this.azimuth;\n\n\t\t// \t// const [p0, p1] = this.points;\n\n\t\t// \t// const r = p0.position.distanceTo(p1.position);\n\t\t\t\n\t\t// }\n\n\t\tupdate () {\n\t\t\tif (this.points.length === 0) {\n\t\t\t\treturn;\n\t\t\t} else if (this.points.length === 1) {\n\t\t\t\tlet point = this.points[0];\n\t\t\t\tlet position = point.position;\n\t\t\t\tthis.spheres[0].position.copy(position);\n\n\t\t\t\t{ // coordinate labels\n\t\t\t\t\tlet coordinateLabel = this.coordinateLabels[0];\n\t\t\t\t\t\n\t\t\t\t\tlet msg = position.toArray().map(p => Utils.addCommas(p.toFixed(2))).join(\" / \");\n\t\t\t\t\tcoordinateLabel.setText(msg);\n\n\t\t\t\t\tcoordinateLabel.visible = this.showCoordinates;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet lastIndex = this.points.length - 1;\n\n\t\t\tlet centroid = new Vector3();\n\t\t\tfor (let i = 0; i <= lastIndex; i++) {\n\t\t\t\tlet point = this.points[i];\n\t\t\t\tcentroid.add(point.position);\n\t\t\t}\n\t\t\tcentroid.divideScalar(this.points.length);\n\n\t\t\tfor (let i = 0; i <= lastIndex; i++) {\n\t\t\t\tlet index = i;\n\t\t\t\tlet nextIndex = (i + 1 > lastIndex) ? 0 : i + 1;\n\t\t\t\tlet previousIndex = (i === 0) ? lastIndex : i - 1;\n\n\t\t\t\tlet point = this.points[index];\n\t\t\t\tlet nextPoint = this.points[nextIndex];\n\t\t\t\tlet previousPoint = this.points[previousIndex];\n\n\t\t\t\tlet sphere = this.spheres[index];\n\n\t\t\t\t// spheres\n\t\t\t\tsphere.position.copy(point.position);\n\t\t\t\tsphere.material.color = this.color;\n\n\t\t\t\t{ // edges\n\t\t\t\t\tlet edge = this.edges[index];\n\n\t\t\t\t\tedge.material.color = this.color;\n\n\t\t\t\t\tedge.position.copy(point.position);\n\n\t\t\t\t\tedge.geometry.setPositions([\n\t\t\t\t\t\t0, 0, 0,\n\t\t\t\t\t\t...nextPoint.position.clone().sub(point.position).toArray(),\n\t\t\t\t\t]);\n\n\t\t\t\t\tedge.geometry.verticesNeedUpdate = true;\n\t\t\t\t\tedge.geometry.computeBoundingSphere();\n\t\t\t\t\tedge.computeLineDistances();\n\t\t\t\t\tedge.visible = index < lastIndex || this.closed;\n\t\t\t\t\t\n\t\t\t\t\tif(!this.showEdges){\n\t\t\t\t\t\tedge.visible = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t{ // edge labels\n\t\t\t\t\tlet edgeLabel = this.edgeLabels[i];\n\n\t\t\t\t\tlet center = new Vector3().add(point.position);\n\t\t\t\t\tcenter.add(nextPoint.position);\n\t\t\t\t\tcenter = center.multiplyScalar(0.5);\n\t\t\t\t\tlet distance = point.position.distanceTo(nextPoint.position);\n\n\t\t\t\t\tedgeLabel.position.copy(center);\n\n\t\t\t\t\tlet suffix = \"\";\n\t\t\t\t\tif(this.lengthUnit != null && this.lengthUnitDisplay != null){\n\t\t\t\t\t\tdistance = distance / this.lengthUnit.unitspermeter * this.lengthUnitDisplay.unitspermeter;  //convert to meters then to the display unit\n\t\t\t\t\t\tsuffix = this.lengthUnitDisplay.code;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet txtLength = Utils.addCommas(distance.toFixed(2));\n\t\t\t\t\tedgeLabel.setText(`${txtLength} ${suffix}`);\n\t\t\t\t\tedgeLabel.visible = this.showDistances && (index < lastIndex || this.closed) && this.points.length >= 2 && distance > 0;\n\t\t\t\t}\n\n\t\t\t\t{ // angle labels\n\t\t\t\t\tlet angleLabel = this.angleLabels[i];\n\t\t\t\t\tlet angle = this.getAngleBetweenLines(point, previousPoint, nextPoint);\n\n\t\t\t\t\tlet dir = nextPoint.position.clone().sub(previousPoint.position);\n\t\t\t\t\tdir.multiplyScalar(0.5);\n\t\t\t\t\tdir = previousPoint.position.clone().add(dir).sub(point.position).normalize();\n\n\t\t\t\t\tlet dist = Math.min(point.position.distanceTo(previousPoint.position), point.position.distanceTo(nextPoint.position));\n\t\t\t\t\tdist = dist / 9;\n\n\t\t\t\t\tlet labelPos = point.position.clone().add(dir.multiplyScalar(dist));\n\t\t\t\t\tangleLabel.position.copy(labelPos);\n\n\t\t\t\t\tlet msg = Utils.addCommas((angle * (180.0 / Math.PI)).toFixed(1)) + '\\u00B0';\n\t\t\t\t\tangleLabel.setText(msg);\n\n\t\t\t\t\tangleLabel.visible = this.showAngles && (index < lastIndex || this.closed) && this.points.length >= 3 && angle > 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // update height stuff\n\t\t\t\tlet heightEdge = this.heightEdge;\n\t\t\t\theightEdge.visible = this.showHeight;\n\t\t\t\tthis.heightLabel.visible = this.showHeight;\n\n\t\t\t\tif (this.showHeight) {\n\t\t\t\t\tlet sorted = this.points.slice().sort((a, b) => a.position.z - b.position.z);\n\t\t\t\t\tlet lowPoint = sorted[0].position.clone();\n\t\t\t\t\tlet highPoint = sorted[sorted.length - 1].position.clone();\n\t\t\t\t\tlet min = lowPoint.z;\n\t\t\t\t\tlet max = highPoint.z;\n\t\t\t\t\tlet height = max - min;\n\n\t\t\t\t\tlet start = new Vector3(highPoint.x, highPoint.y, min);\n\t\t\t\t\tlet end = new Vector3(highPoint.x, highPoint.y, max);\n\n\t\t\t\t\theightEdge.position.copy(lowPoint);\n\n\t\t\t\t\theightEdge.geometry.setPositions([\n\t\t\t\t\t\t0, 0, 0,\n\t\t\t\t\t\t...start.clone().sub(lowPoint).toArray(),\n\t\t\t\t\t\t...start.clone().sub(lowPoint).toArray(),\n\t\t\t\t\t\t...end.clone().sub(lowPoint).toArray(),\n\t\t\t\t\t]);\n\n\t\t\t\t\theightEdge.geometry.verticesNeedUpdate = true;\n\t\t\t\t\t// heightEdge.geometry.computeLineDistances();\n\t\t\t\t\t// heightEdge.geometry.lineDistancesNeedUpdate = true;\n\t\t\t\t\theightEdge.geometry.computeBoundingSphere();\n\t\t\t\t\theightEdge.computeLineDistances();\n\n\t\t\t\t\t// heightEdge.material.dashSize = height / 40;\n\t\t\t\t\t// heightEdge.material.gapSize = height / 40;\n\n\t\t\t\t\tlet heightLabelPosition = start.clone().add(end).multiplyScalar(0.5);\n\t\t\t\t\tthis.heightLabel.position.copy(heightLabelPosition);\n\n\t\t\t\t\tlet suffix = \"\";\n\t\t\t\t\tif(this.lengthUnit != null && this.lengthUnitDisplay != null){\n\t\t\t\t\t\theight = height / this.lengthUnit.unitspermeter * this.lengthUnitDisplay.unitspermeter;  //convert to meters then to the display unit\n\t\t\t\t\t\tsuffix = this.lengthUnitDisplay.code;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet txtHeight = Utils.addCommas(height.toFixed(2));\n\t\t\t\t\tlet msg = `${txtHeight} ${suffix}`;\n\t\t\t\t\tthis.heightLabel.setText(msg);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // update circle stuff\n\t\t\t\tconst circleRadiusLabel = this.circleRadiusLabel;\n\t\t\t\tconst circleRadiusLine = this.circleRadiusLine;\n\t\t\t\tconst circleLine = this.circleLine;\n\t\t\t\tconst circleCenter = this.circleCenter;\n\n\t\t\t\tconst circleOkay = this.points.length === 3;\n\n\t\t\t\tcircleRadiusLabel.visible = this.showCircle && circleOkay;\n\t\t\t\tcircleRadiusLine.visible = this.showCircle && circleOkay;\n\t\t\t\tcircleLine.visible = this.showCircle && circleOkay;\n\t\t\t\tcircleCenter.visible = this.showCircle && circleOkay;\n\n\t\t\t\tif(this.showCircle && circleOkay){\n\n\t\t\t\t\tconst A = this.points[0].position;\n\t\t\t\t\tconst B = this.points[1].position;\n\t\t\t\t\tconst C = this.points[2].position;\n\t\t\t\t\tconst AB = B.clone().sub(A);\n\t\t\t\t\tconst AC = C.clone().sub(A);\n\t\t\t\t\tconst N = AC.clone().cross(AB).normalize();\n\n\t\t\t\t\tconst center = Potree.Utils.computeCircleCenter(A, B, C);\n\t\t\t\t\tconst radius = center.distanceTo(A);\n\n\n\t\t\t\t\tconst scale = radius / 20;\n\t\t\t\t\tcircleCenter.position.copy(center);\n\t\t\t\t\tcircleCenter.scale.set(scale, scale, scale);\n\n\t\t\t\t\t//circleRadiusLine.geometry.vertices[0].set(0, 0, 0);\n\t\t\t\t\t//circleRadiusLine.geometry.vertices[1].copy(B.clone().sub(center));\n\n\t\t\t\t\tcircleRadiusLine.geometry.setPositions( [\n\t\t\t\t\t\t0, 0, 0,\n\t\t\t\t\t\t...B.clone().sub(center).toArray()\n\t\t\t\t\t] );\n\n\t\t\t\t\tcircleRadiusLine.geometry.verticesNeedUpdate = true;\n\t\t\t\t\tcircleRadiusLine.geometry.computeBoundingSphere();\n\t\t\t\t\tcircleRadiusLine.position.copy(center);\n\t\t\t\t\tcircleRadiusLine.computeLineDistances();\n\n\t\t\t\t\tconst target = center.clone().add(N);\n\t\t\t\t\tcircleLine.position.copy(center);\n\t\t\t\t\tcircleLine.scale.set(radius, radius, radius);\n\t\t\t\t\tcircleLine.lookAt(target);\n\t\t\t\t\t\n\t\t\t\t\tcircleRadiusLabel.visible = true;\n\t\t\t\t\tcircleRadiusLabel.position.copy(center.clone().add(B).multiplyScalar(0.5));\n\t\t\t\t\tcircleRadiusLabel.setText(`${radius.toFixed(3)}`);\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // update area label\n\t\t\t\tthis.areaLabel.position.copy(centroid);\n\t\t\t\tthis.areaLabel.visible = this.showArea && this.points.length >= 3;\n\t\t\t\tlet area = this.getArea();\n\n\t\t\t\tlet suffix = \"\";\n\t\t\t\tif(this.lengthUnit != null && this.lengthUnitDisplay != null){\n\t\t\t\t\tarea = area / Math.pow(this.lengthUnit.unitspermeter, 2) * Math.pow(this.lengthUnitDisplay.unitspermeter, 2);  //convert to square meters then to the square display unit\n\t\t\t\t\tsuffix = this.lengthUnitDisplay.code;\n\t\t\t\t}\n\n\t\t\t\tlet txtArea = Utils.addCommas(area.toFixed(1));\n\t\t\t\tlet msg =  `${txtArea} ${suffix}\\u00B2`;\n\t\t\t\tthis.areaLabel.setText(msg);\n\t\t\t}\n\n\t\t\t// this.updateAzimuth();\n\t\t};\n\n\t\traycast (raycaster, intersects) {\n\t\t\tfor (let i = 0; i < this.points.length; i++) {\n\t\t\t\tlet sphere = this.spheres[i];\n\n\t\t\t\tsphere.raycast(raycaster, intersects);\n\t\t\t}\n\n\t\t\t// recalculate distances because they are not necessarely correct\n\t\t\t// for scaled objects.\n\t\t\t// see https://github.com/mrdoob/three.js/issues/5827\n\t\t\t// TODO: remove this once the bug has been fixed\n\t\t\tfor (let i = 0; i < intersects.length; i++) {\n\t\t\t\tlet I = intersects[i];\n\t\t\t\tI.distance = raycaster.ray.origin.distanceTo(I.point);\n\t\t\t}\n\t\t\tintersects.sort(function (a, b) { return a.distance - b.distance; });\n\t\t};\n\n\t\tget showCoordinates () {\n\t\t\treturn this._showCoordinates;\n\t\t}\n\n\t\tset showCoordinates (value) {\n\t\t\tthis._showCoordinates = value;\n\t\t\tthis.update();\n\t\t}\n\n\t\tget showAngles () {\n\t\t\treturn this._showAngles;\n\t\t}\n\n\t\tset showAngles (value) {\n\t\t\tthis._showAngles = value;\n\t\t\tthis.update();\n\t\t}\n\n\t\tget showCircle () {\n\t\t\treturn this._showCircle;\n\t\t}\n\n\t\tset showCircle (value) {\n\t\t\tthis._showCircle = value;\n\t\t\tthis.update();\n\t\t}\n\n\t\tget showAzimuth(){\n\t\t\treturn this._showAzimuth;\n\t\t}\n\n\t\tset showAzimuth(value){\n\t\t\tthis._showAzimuth = value;\n\t\t\tthis.update();\n\t\t}\n\n\t\tget showEdges () {\n\t\t\treturn this._showEdges;\n\t\t}\n\n\t\tset showEdges (value) {\n\t\t\tthis._showEdges = value;\n\t\t\tthis.update();\n\t\t}\n\n\t\tget showHeight () {\n\t\t\treturn this._showHeight;\n\t\t}\n\n\t\tset showHeight (value) {\n\t\t\tthis._showHeight = value;\n\t\t\tthis.update();\n\t\t}\n\n\t\tget showArea () {\n\t\t\treturn this._showArea;\n\t\t}\n\n\t\tset showArea (value) {\n\t\t\tthis._showArea = value;\n\t\t\tthis.update();\n\t\t}\n\n\t\tget closed () {\n\t\t\treturn this._closed;\n\t\t}\n\n\t\tset closed (value) {\n\t\t\tthis._closed = value;\n\t\t\tthis.update();\n\t\t}\n\n\t\tget showDistances () {\n\t\t\treturn this._showDistances;\n\t\t}\n\n\t\tset showDistances (value) {\n\t\t\tthis._showDistances = value;\n\t\t\tthis.update();\n\t\t}\n\n\t}\n\n\tclass PolygonClipVolume extends Object3D{\n\t\t\n\t\tconstructor(camera){\n\t\t\tsuper();\n\n\t\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\t\t\tthis.name = \"polygon_clip_volume_\" + this.constructor.counter;\n\n\t\t\tthis.camera = camera.clone();\n\t\t\tthis.camera.rotation.set(...camera.rotation.toArray()); // [r85] workaround because camera.clone() doesn't work on rotation\n\t\t\tthis.camera.rotation.order = camera.rotation.order;\n\t\t\tthis.camera.updateMatrixWorld();\n\t\t\tthis.camera.updateProjectionMatrix();\n\t\t\tthis.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert();\n\n\t\t\tthis.viewMatrix = this.camera.matrixWorldInverse.clone();\n\t\t\tthis.projMatrix = this.camera.projectionMatrix.clone();\n\n\t\t\t// projected markers\n\t\t\tthis.markers = [];\n\t\t\tthis.initialized = false;\n\t\t}\n\n\t\taddMarker() {\n\n\t\t\tlet marker = new Mesh();\n\n\t\t\tlet cancel;\n\n\t\t\tlet drag = e => {\n\t\t\t\tlet size = e.viewer.renderer.getSize(new Vector2());\n\t\t\t\tlet projectedPos = new Vector3(\n\t\t\t\t\t2.0 * (e.drag.end.x / size.width) - 1.0,\n\t\t\t\t\t-2.0 * (e.drag.end.y / size.height) + 1.0,\n\t\t\t\t\t0\n\t\t\t\t);\n\n\t\t\t\tmarker.position.copy(projectedPos);\n\t\t\t};\n\t\t\t\n\t\t\tlet drop = e => {\t\n\t\t\t\tcancel();\n\t\t\t};\n\t\t\t\n\t\t\tcancel = e => {\n\t\t\t\tmarker.removeEventListener(\"drag\", drag);\n\t\t\t\tmarker.removeEventListener(\"drop\", drop);\n\t\t\t};\n\t\t\t\n\t\t\tmarker.addEventListener(\"drag\", drag);\n\t\t\tmarker.addEventListener(\"drop\", drop);\n\n\n\t\t\tthis.markers.push(marker);\n\t\t}\n\n\t\tremoveLastMarker() {\n\t\t\tif(this.markers.length > 0) {\n\t\t\t\tthis.markers.splice(this.markers.length - 1, 1);\n\t\t\t}\n\t\t}\n\n\t};\n\n\tclass Utils {\n\t\tstatic async loadShapefileFeatures (file, callback) {\n\t\t\tlet features = [];\n\n\t\t\tlet handleFinish = () => {\n\t\t\t\tcallback(features);\n\t\t\t};\n\n\t\t\tlet source = await shapefile.open(file);\n\n\t\t\twhile(true){\n\t\t\t\tlet result = await source.read();\n\n\t\t\t\tif (result.done) {\n\t\t\t\t\thandleFinish();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (result.value && result.value.type === 'Feature' && result.value.geometry !== undefined) {\n\t\t\t\t\tfeatures.push(result.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tstatic toString (value) {\n\t\t\tif (value.x != null) {\n\t\t\t\treturn value.x.toFixed(2) + ', ' + value.y.toFixed(2) + ', ' + value.z.toFixed(2);\n\t\t\t} else {\n\t\t\t\treturn '' + value + '';\n\t\t\t}\n\t\t}\n\n\t\tstatic normalizeURL (url) {\n\t\t\tlet u = new URL(url);\n\n\t\t\treturn u.protocol + '//' + u.hostname + u.pathname.replace(/\\/+/g, '/');\n\t\t};\n\n\t\tstatic pathExists (url) {\n\t\t\tlet req = XHRFactory.createXMLHttpRequest();\n\t\t\treq.open('GET', url, false);\n\t\t\treq.send(null);\n\t\t\tif (req.status !== 200) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tstatic debugSphere(parent, position, scale, color){\n\t\t\tlet geometry = new SphereGeometry(1, 8, 8);\n\t\t\tlet material;\n\n\t\t\tif(color !== undefined){\n\t\t\t\tmaterial = new MeshBasicMaterial({color: color});\n\t\t\t}else {\n\t\t\t\tmaterial = new MeshNormalMaterial();\n\t\t\t}\n\t\t\tlet sphere = new Mesh(geometry, material);\n\t\t\tsphere.position.copy(position);\n\t\t\tsphere.scale.set(scale, scale, scale);\n\t\t\tparent.add(sphere);\n\n\t\t\treturn sphere;\n\t\t}\n\n\t\tstatic debugLine(parent, start, end, color){\n\n\t\t\tlet material = new LineBasicMaterial({ color: color }); \n\t\t\tlet geometry = new Geometry();\n\n\t\t\tconst p1 = new Vector3(0, 0, 0);\n\t\t\tconst p2 = end.clone().sub(start);\n\n\t\t\tgeometry.vertices.push(p1, p2);\n\n\t\t\tlet tl = new Line( geometry, material );\n\t\t\ttl.position.copy(start);\n\n\t\t\tparent.add(tl);\n\n\t\t\tlet line = {\n\t\t\t\tnode: tl,\n\t\t\t\tset: (start, end) => {\n\t\t\t\t\tgeometry.vertices[0].copy(start);\n\t\t\t\t\tgeometry.vertices[1].copy(end);\n\t\t\t\t\tgeometry.verticesNeedUpdate = true;\n\t\t\t\t},\n\t\t\t};\n\n\t\t\treturn line;\n\t\t}\n\n\t\tstatic debugCircle(parent, center, radius, normal, color){\n\t\t\tlet material = new LineBasicMaterial({ color: color });\n\n\t\t\tlet geometry = new Geometry();\n\n\t\t\tlet n = 32;\n\t\t\tfor(let i = 0; i <= n; i++){\n\t\t\t\tlet u0 = 2 * Math.PI * (i / n);\n\t\t\t\tlet u1 = 2 * Math.PI * (i + 1) / n;\n\n\t\t\t\tlet p0 = new Vector3(\n\t\t\t\t\tMath.cos(u0), \n\t\t\t\t\tMath.sin(u0), \n\t\t\t\t\t0\n\t\t\t\t);\n\n\t\t\t\tlet p1 = new Vector3(\n\t\t\t\t\tMath.cos(u1), \n\t\t\t\t\tMath.sin(u1), \n\t\t\t\t\t0\n\t\t\t\t);\n\n\t\t\t\tgeometry.vertices.push(p0, p1); \n\t\t\t}\n\n\t\t\tlet tl = new Line( geometry, material ); \n\t\t\ttl.position.copy(center);\n\t\t\ttl.scale.set(radius, radius, radius);\n\n\t\t\tparent.add(tl);\n\t\t}\n\n\t\tstatic debugBox(parent, box, transform = new Matrix4(), color = 0xFFFF00){\n\t\t\t\n\t\t\tlet vertices = [\n\t\t\t\t[box.min.x, box.min.y, box.min.z],\n\t\t\t\t[box.min.x, box.min.y, box.max.z],\n\t\t\t\t[box.min.x, box.max.y, box.min.z],\n\t\t\t\t[box.min.x, box.max.y, box.max.z],\n\n\t\t\t\t[box.max.x, box.min.y, box.min.z],\n\t\t\t\t[box.max.x, box.min.y, box.max.z],\n\t\t\t\t[box.max.x, box.max.y, box.min.z],\n\t\t\t\t[box.max.x, box.max.y, box.max.z],\n\t\t\t].map(v => new Vector3(...v));\n\n\t\t\tlet edges = [\n\t\t\t\t[0, 4], [4, 5], [5, 1], [1, 0],\n\t\t\t\t[2, 6], [6, 7], [7, 3], [3, 2],\n\t\t\t\t[0, 2], [4, 6], [5, 7], [1, 3]\n\t\t\t];\n\n\t\t\tlet center = box.getCenter(new Vector3());\n\n\t\t\tlet centroids = [\n\t\t\t\t{position: [box.min.x, center.y, center.z], color: 0xFF0000},\n\t\t\t\t{position: [box.max.x, center.y, center.z], color: 0x880000},\n\n\t\t\t\t{position: [center.x, box.min.y, center.z], color: 0x00FF00},\n\t\t\t\t{position: [center.x, box.max.y, center.z], color: 0x008800},\n\n\t\t\t\t{position: [center.x, center.y, box.min.z], color: 0x0000FF},\n\t\t\t\t{position: [center.x, center.y, box.max.z], color: 0x000088},\n\t\t\t];\n\n\t\t\tfor(let vertex of vertices){\n\t\t\t\tlet pos = vertex.clone().applyMatrix4(transform);\n\n\t\t\t\tUtils.debugSphere(parent, pos, 0.1, 0xFF0000);\n\t\t\t}\n\n\t\t\tfor(let edge of edges){\n\t\t\t\tlet start = vertices[edge[0]].clone().applyMatrix4(transform);\n\t\t\t\tlet end = vertices[edge[1]].clone().applyMatrix4(transform);\n\n\t\t\t\tUtils.debugLine(parent, start, end, color);\n\t\t\t}\n\n\t\t\tfor(let centroid of centroids){\n\t\t\t\tlet pos = new Vector3(...centroid.position).applyMatrix4(transform);\n\n\t\t\t\tUtils.debugSphere(parent, pos, 0.1, centroid.color);\n\t\t\t}\n\t\t}\n\n\t\tstatic debugPlane(parent, plane, size = 1, color = 0x0000FF){\n\n\t\t\tlet planehelper = new PlaneHelper(plane, size, color);\n\n\t\t\tparent.add(planehelper);\n\n\t\t}\n\n\t\t/**\n\t\t * adapted from mhluska at https://github.com/mrdoob/three.js/issues/1561\n\t\t */\n\t\tstatic computeTransformedBoundingBox (box, transform) {\n\t\t\tlet vertices = [\n\t\t\t\tnew Vector3(box.min.x, box.min.y, box.min.z).applyMatrix4(transform),\n\t\t\t\tnew Vector3(box.min.x, box.min.y, box.min.z).applyMatrix4(transform),\n\t\t\t\tnew Vector3(box.max.x, box.min.y, box.min.z).applyMatrix4(transform),\n\t\t\t\tnew Vector3(box.min.x, box.max.y, box.min.z).applyMatrix4(transform),\n\t\t\t\tnew Vector3(box.min.x, box.min.y, box.max.z).applyMatrix4(transform),\n\t\t\t\tnew Vector3(box.min.x, box.max.y, box.max.z).applyMatrix4(transform),\n\t\t\t\tnew Vector3(box.max.x, box.max.y, box.min.z).applyMatrix4(transform),\n\t\t\t\tnew Vector3(box.max.x, box.min.y, box.max.z).applyMatrix4(transform),\n\t\t\t\tnew Vector3(box.max.x, box.max.y, box.max.z).applyMatrix4(transform)\n\t\t\t];\n\n\t\t\tlet boundingBox = new Box3();\n\t\t\tboundingBox.setFromPoints(vertices);\n\n\t\t\treturn boundingBox;\n\t\t};\n\n\t\t/**\n\t\t * add separators to large numbers\n\t\t *\n\t\t * @param nStr\n\t\t * @returns\n\t\t */\n\t\tstatic addCommas (nStr) {\n\t\t\tnStr += '';\n\t\t\tlet x = nStr.split('.');\n\t\t\tlet x1 = x[0];\n\t\t\tlet x2 = x.length > 1 ? '.' + x[1] : '';\n\t\t\tlet rgx = /(\\d+)(\\d{3})/;\n\t\t\twhile (rgx.test(x1)) {\n\t\t\t\tx1 = x1.replace(rgx, '$1' + ',' + '$2');\n\t\t\t}\n\t\t\treturn x1 + x2;\n\t\t};\n\n\t\tstatic removeCommas (str) {\n\t\t\treturn str.replace(/,/g, '');\n\t\t}\n\n\t\t/**\n\t\t * create worker from a string\n\t\t *\n\t\t * code from http://stackoverflow.com/questions/10343913/how-to-create-a-web-worker-from-a-string\n\t\t */\n\t\tstatic createWorker (code) {\n\t\t\tlet blob = new Blob([code], {type: 'application/javascript'});\n\t\t\tlet worker = new Worker(URL.createObjectURL(blob));\n\n\t\t\treturn worker;\n\t\t};\n\n\t\tstatic moveTo(scene, endPosition, endTarget){\n\n\t\t\tlet view = scene.view;\n\t\t\tlet camera = scene.getActiveCamera();\n\t\t\tlet animationDuration = 500;\n\t\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t\t{ // animate camera position\n\t\t\t\tlet tween = new TWEEN.Tween(view.position).to(endPosition, animationDuration);\n\t\t\t\ttween.easing(easing);\n\t\t\t\ttween.start();\n\t\t\t}\n\n\t\t\t{ // animate camera target\n\t\t\t\tlet camTargetDistance = camera.position.distanceTo(endTarget);\n\t\t\t\tlet target = new Vector3().addVectors(\n\t\t\t\t\tcamera.position,\n\t\t\t\t\tcamera.getWorldDirection(new Vector3()).clone().multiplyScalar(camTargetDistance)\n\t\t\t\t);\n\t\t\t\tlet tween = new TWEEN.Tween(target).to(endTarget, animationDuration);\n\t\t\t\ttween.easing(easing);\n\t\t\t\ttween.onUpdate(() => {\n\t\t\t\t\tview.lookAt(target);\n\t\t\t\t});\n\t\t\t\ttween.onComplete(() => {\n\t\t\t\t\tview.lookAt(target);\n\t\t\t\t});\n\t\t\t\ttween.start();\n\t\t\t}\n\n\t\t}\n\n\t\tstatic loadSkybox (path) {\n\t\t\tlet parent = new Object3D(\"skybox_root\");\n\n\t\t\tlet camera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 100000);\n\t\t\tcamera.up.set(0, 0, 1);\n\t\t\tlet scene = new Scene();\n\n\t\t\tlet format = '.jpg';\n\t\t\tlet urls = [\n\t\t\t\tpath + 'px' + format, path + 'nx' + format,\n\t\t\t\tpath + 'py' + format, path + 'ny' + format,\n\t\t\t\tpath + 'pz' + format, path + 'nz' + format\n\t\t\t];\n\n\t\t\tlet materialArray = [];\n\t\t\t{\n\t\t\t\tfor (let i = 0; i < 6; i++) {\n\t\t\t\t\tlet material = new MeshBasicMaterial({\n\t\t\t\t\t\tmap: null,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tcolor: 0x424556\n\t\t\t\t\t});\n\n\t\t\t\t\tmaterialArray.push(material);\n\n\t\t\t\t\tlet loader = new TextureLoader();\n\t\t\t\t\tloader.load(urls[i],\n\t\t\t\t\t\tfunction loaded (texture) {\n\t\t\t\t\t\t\tmaterial.map = texture;\n\t\t\t\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t\t\t\tmaterial.color.setHex(0xffffff);\n\t\t\t\t\t\t}, function progress (xhr) {\n\t\t\t\t\t\t\t// console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );\n\t\t\t\t\t\t}, function error (xhr) {\n\t\t\t\t\t\t\tconsole.log('An error happened', xhr);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet skyGeometry = new BoxGeometry(700, 700, 700);\n\t\t\tlet skybox = new Mesh(skyGeometry, materialArray);\n\n\t\t\tscene.add(skybox);\n\n\t\t\tscene.traverse(n => n.frustumCulled = false);\n\n\t\t\t// z up\n\t\t\tscene.rotation.x = Math.PI / 2;\n\n\t\t\tparent.children.push(camera);\n\t\t\tcamera.parent = parent;\n\n\t\t\treturn {camera, scene, parent};\n\t\t};\n\n\t\tstatic createGrid (width, length, spacing, color) {\n\t\t\tlet material = new LineBasicMaterial({\n\t\t\t\tcolor: color || 0x888888\n\t\t\t});\n\n\t\t\tlet geometry = new Geometry();\n\t\t\tfor (let i = 0; i <= length; i++) {\n\t\t\t\tgeometry.vertices.push(new Vector3(-(spacing * width) / 2, i * spacing - (spacing * length) / 2, 0));\n\t\t\t\tgeometry.vertices.push(new Vector3(+(spacing * width) / 2, i * spacing - (spacing * length) / 2, 0));\n\t\t\t}\n\n\t\t\tfor (let i = 0; i <= width; i++) {\n\t\t\t\tgeometry.vertices.push(new Vector3(i * spacing - (spacing * width) / 2, -(spacing * length) / 2, 0));\n\t\t\t\tgeometry.vertices.push(new Vector3(i * spacing - (spacing * width) / 2, +(spacing * length) / 2, 0));\n\t\t\t}\n\n\t\t\tlet line = new LineSegments(geometry, material, LinePieces);\n\t\t\tline.receiveShadow = true;\n\t\t\treturn line;\n\t\t}\n\n\t\tstatic createBackgroundTexture (width, height) {\n\t\t\tfunction gauss (x, y) {\n\t\t\t\treturn (1 / (2 * Math.PI)) * Math.exp(-(x * x + y * y) / 2);\n\t\t\t};\n\n\t\t\t// map.magFilter = THREE.NearestFilter;\n\t\t\tlet size = width * height;\n\t\t\tlet data = new Uint8Array(3 * size);\n\n\t\t\tlet chroma = [1, 1.5, 1.7];\n\t\t\tlet max = gauss(0, 0);\n\n\t\t\tfor (let x = 0; x < width; x++) {\n\t\t\t\tfor (let y = 0; y < height; y++) {\n\t\t\t\t\tlet u = 2 * (x / width) - 1;\n\t\t\t\t\tlet v = 2 * (y / height) - 1;\n\n\t\t\t\t\tlet i = x + width * y;\n\t\t\t\t\tlet d = gauss(2 * u, 2 * v) / max;\n\t\t\t\t\tlet r = (Math.random() + Math.random() + Math.random()) / 3;\n\t\t\t\t\tr = (d * 0.5 + 0.5) * r * 0.03;\n\t\t\t\t\tr = r * 0.4;\n\n\t\t\t\t\t// d = Math.pow(d, 0.6);\n\n\t\t\t\t\tdata[3 * i + 0] = 255 * (d / 15 + 0.05 + r) * chroma[0];\n\t\t\t\t\tdata[3 * i + 1] = 255 * (d / 15 + 0.05 + r) * chroma[1];\n\t\t\t\t\tdata[3 * i + 2] = 255 * (d / 15 + 0.05 + r) * chroma[2];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet texture = new DataTexture(data, width, height, RGBFormat);\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\treturn texture;\n\t\t}\n\n\t\tstatic getMousePointCloudIntersection (mouse, camera, viewer, pointclouds, params = {}) {\n\t\t\t\n\t\t\tlet renderer = viewer.renderer;\n\t\t\t\n\t\t\tlet nmouse = {\n\t\t\t\tx: (mouse.x / renderer.domElement.clientWidth) * 2 - 1,\n\t\t\t\ty: -(mouse.y / renderer.domElement.clientHeight) * 2 + 1\n\t\t\t};\n\n\t\t\tlet pickParams = {};\n\n\t\t\tif(params.pickClipped){\n\t\t\t\tpickParams.pickClipped = params.pickClipped;\n\t\t\t}\n\n\t\t\tpickParams.x = mouse.x;\n\t\t\tpickParams.y = renderer.domElement.clientHeight - mouse.y;\n\n\t\t\tlet raycaster = new Raycaster();\n\t\t\traycaster.setFromCamera(nmouse, camera);\n\t\t\tlet ray = raycaster.ray;\n\n\t\t\tlet selectedPointcloud = null;\n\t\t\tlet closestDistance = Infinity;\n\t\t\tlet closestIntersection = null;\n\t\t\tlet closestPoint = null;\n\t\t\t\n\t\t\tfor(let pointcloud of pointclouds){\n\t\t\t\tlet point = pointcloud.pick(viewer, camera, ray, pickParams);\n\t\t\t\t\n\t\t\t\tif(!point){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet distance = camera.position.distanceTo(point.position);\n\n\t\t\t\tif (distance < closestDistance) {\n\t\t\t\t\tclosestDistance = distance;\n\t\t\t\t\tselectedPointcloud = pointcloud;\n\t\t\t\t\tclosestIntersection = point.position;\n\t\t\t\t\tclosestPoint = point;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (selectedPointcloud) {\n\t\t\t\treturn {\n\t\t\t\t\tlocation: closestIntersection,\n\t\t\t\t\tdistance: closestDistance,\n\t\t\t\t\tpointcloud: selectedPointcloud,\n\t\t\t\t\tpoint: closestPoint\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tstatic pixelsArrayToImage (pixels, width, height) {\n\t\t\tlet canvas = document.createElement('canvas');\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tlet context = canvas.getContext('2d');\n\n\t\t\tpixels = new pixels.constructor(pixels);\n\n\t\t\tfor (let i = 0; i < pixels.length; i++) {\n\t\t\t\tpixels[i * 4 + 3] = 255;\n\t\t\t}\n\n\t\t\tlet imageData = context.createImageData(width, height);\n\t\t\timageData.data.set(pixels);\n\t\t\tcontext.putImageData(imageData, 0, 0);\n\n\t\t\tlet img = new Image();\n\t\t\timg.src = canvas.toDataURL();\n\t\t\t// img.style.transform = \"scaleY(-1)\";\n\n\t\t\treturn img;\n\t\t}\n\n\t\tstatic pixelsArrayToDataUrl(pixels, width, height) {\n\t\t\tlet canvas = document.createElement('canvas');\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tlet context = canvas.getContext('2d');\n\n\t\t\tpixels = new pixels.constructor(pixels);\n\n\t\t\tfor (let i = 0; i < pixels.length; i++) {\n\t\t\t\tpixels[i * 4 + 3] = 255;\n\t\t\t}\n\n\t\t\tlet imageData = context.createImageData(width, height);\n\t\t\timageData.data.set(pixels);\n\t\t\tcontext.putImageData(imageData, 0, 0);\n\n\t\t\tlet dataURL = canvas.toDataURL();\n\n\t\t\treturn dataURL;\n\t\t}\n\n\t\tstatic pixelsArrayToCanvas(pixels, width, height){\n\t\t\tlet canvas = document.createElement('canvas');\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tlet context = canvas.getContext('2d');\n\n\t\t\tpixels = new pixels.constructor(pixels);\n\n\t\t\t//for (let i = 0; i < pixels.length; i++) {\n\t\t\t//\tpixels[i * 4 + 3] = 255;\n\t\t\t//}\n\n\t\t\t// flip vertically\n\t\t\tlet bytesPerLine = width * 4;\n\t\t\tfor(let i = 0; i < parseInt(height / 2); i++){\n\t\t\t\tlet j = height - i - 1;\n\n\t\t\t\tlet lineI = pixels.slice(i * bytesPerLine, i * bytesPerLine + bytesPerLine);\n\t\t\t\tlet lineJ = pixels.slice(j * bytesPerLine, j * bytesPerLine + bytesPerLine);\n\t\t\t\tpixels.set(lineJ, i * bytesPerLine);\n\t\t\t\tpixels.set(lineI, j * bytesPerLine);\n\t\t\t}\n\n\t\t\tlet imageData = context.createImageData(width, height);\n\t\t\timageData.data.set(pixels);\n\t\t\tcontext.putImageData(imageData, 0, 0);\n\n\t\t\treturn canvas;\n\t\t}\n\n\t\tstatic removeListeners(dispatcher, type){\n\t\t\tif (dispatcher._listeners === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (dispatcher._listeners[ type ]) {\n\t\t\t\tdelete dispatcher._listeners[ type ];\n\t\t\t}\n\t\t}\n\n\t\tstatic mouseToRay(mouse, camera, width, height){\n\n\t\t\tlet normalizedMouse = {\n\t\t\t\tx: (mouse.x / width) * 2 - 1,\n\t\t\t\ty: -(mouse.y / height) * 2 + 1\n\t\t\t};\n\n\t\t\tlet vector = new Vector3(normalizedMouse.x, normalizedMouse.y, 0.5);\n\t\t\tlet origin = camera.position.clone();\n\t\t\tvector.unproject(camera);\n\t\t\tlet direction = new Vector3().subVectors(vector, origin).normalize();\n\n\t\t\tlet ray = new Ray(origin, direction);\n\n\t\t\treturn ray;\n\t\t}\n\n\t\tstatic projectedRadius(radius, camera, distance, screenWidth, screenHeight){\n\t\t\tif(camera instanceof OrthographicCamera){\n\t\t\t\treturn Utils.projectedRadiusOrtho(radius, camera.projectionMatrix, screenWidth, screenHeight);\n\t\t\t}else if(camera instanceof PerspectiveCamera){\n\t\t\t\treturn Utils.projectedRadiusPerspective(radius, camera.fov * Math.PI / 180, distance, screenHeight);\n\t\t\t}else {\n\t\t\t\tthrow new Error(\"invalid parameters\");\n\t\t\t}\n\t\t}\n\n\t\tstatic projectedRadiusPerspective(radius, fov, distance, screenHeight) {\n\t\t\tlet projFactor = (1 / Math.tan(fov / 2)) / distance;\n\t\t\tprojFactor = projFactor * screenHeight / 2;\n\n\t\t\treturn radius * projFactor;\n\t\t}\n\n\t\tstatic projectedRadiusOrtho(radius, proj, screenWidth, screenHeight) {\n\t\t\tlet p1 = new Vector4(0);\n\t\t\tlet p2 = new Vector4(radius);\n\n\t\t\tp1.applyMatrix4(proj);\n\t\t\tp2.applyMatrix4(proj);\n\t\t\tp1 = new Vector3(p1.x, p1.y, p1.z);\n\t\t\tp2 = new Vector3(p2.x, p2.y, p2.z);\n\t\t\tp1.x = (p1.x + 1.0) * 0.5 * screenWidth;\n\t\t\tp1.y = (p1.y + 1.0) * 0.5 * screenHeight;\n\t\t\tp2.x = (p2.x + 1.0) * 0.5 * screenWidth;\n\t\t\tp2.y = (p2.y + 1.0) * 0.5 * screenHeight;\n\t\t\treturn p1.distanceTo(p2);\n\t\t}\n\t\t\t\n\t\t\t\n\t\tstatic topView(camera, node){\n\t\t\tcamera.position.set(0, 1, 0);\n\t\t\tcamera.rotation.set(-Math.PI / 2, 0, 0);\n\t\t\tcamera.zoomTo(node, 1);\n\t\t}\n\n\t\tstatic frontView (camera, node) {\n\t\t\tcamera.position.set(0, 0, 1);\n\t\t\tcamera.rotation.set(0, 0, 0);\n\t\t\tcamera.zoomTo(node, 1);\n\t\t}\n\n\t\tstatic leftView (camera, node) {\n\t\t\tcamera.position.set(-1, 0, 0);\n\t\t\tcamera.rotation.set(0, -Math.PI / 2, 0);\n\t\t\tcamera.zoomTo(node, 1);\n\t\t}\n\n\t\tstatic rightView (camera, node) {\n\t\t\tcamera.position.set(1, 0, 0);\n\t\t\tcamera.rotation.set(0, Math.PI / 2, 0);\n\t\t\tcamera.zoomTo(node, 1);\n\t\t}\n\n\t\t\n\t\tstatic findClosestGpsTime(target, viewer){\n\t\t\tconst start = performance.now();\n\n\t\t\tconst nodes = [];\n\t\t\tfor(const pc of viewer.scene.pointclouds){\n\t\t\t\tnodes.push(pc.root);\n\n\t\t\t\tfor(const child of pc.root.children){\n\t\t\t\t\tif(child){\n\t\t\t\t\t\tnodes.push(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet closestNode = null;\n\t\t\tlet closestIndex = Infinity;\n\t\t\tlet closestDistance = Infinity;\n\t\t\tlet closestValue = 0;\n\n\t\t\tfor(const node of nodes){\n\n\t\t\t\tconst isOkay = node.geometryNode != null \n\t\t\t\t\t&& node.geometryNode.geometry != null\n\t\t\t\t\t&& node.sceneNode != null;\n\n\t\t\t\tif(!isOkay){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet geometry = node.geometryNode.geometry;\n\t\t\t\tlet gpsTime = geometry.attributes[\"gps-time\"];\n\t\t\t\tlet range = gpsTime.potree.range;\n\n\t\t\t\tfor(let i = 0; i < gpsTime.array.length; i++){\n\t\t\t\t\tlet value = gpsTime.array[i];\n\t\t\t\t\tvalue = value * (range[1] - range[0]) + range[0];\n\t\t\t\t\tconst distance = Math.abs(target - value);\n\n\t\t\t\t\tif(distance < closestDistance){\n\t\t\t\t\t\tclosestIndex = i;\n\t\t\t\t\t\tclosestDistance = distance;\n\t\t\t\t\t\tclosestValue = value;\n\t\t\t\t\t\tclosestNode = node;\n\t\t\t\t\t\t//console.log(\"found a closer one: \" + value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst geometry = closestNode.geometryNode.geometry;\n\t\t\tconst position = new Vector3(\n\t\t\t\tgeometry.attributes.position.array[3 * closestIndex + 0],\n\t\t\t\tgeometry.attributes.position.array[3 * closestIndex + 1],\n\t\t\t\tgeometry.attributes.position.array[3 * closestIndex + 2],\n\t\t\t);\n\n\t\t\tposition.applyMatrix4(closestNode.sceneNode.matrixWorld);\n\n\t\t\tconst end = performance.now();\n\t\t\tconst duration = (end - start);\n\t\t\tconsole.log(`duration: ${duration.toFixed(3)}ms`);\n\n\t\t\treturn {\n\t\t\t\tnode: closestNode,\n\t\t\t\tindex: closestIndex,\n\t\t\t\tposition: position,\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * 0: no intersection\n\t\t * 1: intersection\n\t\t * 2: fully inside\n\t\t */\n\t\tstatic frustumSphereIntersection (frustum, sphere) {\n\t\t\tlet planes = frustum.planes;\n\t\t\tlet center = sphere.center;\n\t\t\tlet negRadius = -sphere.radius;\n\n\t\t\tlet minDistance = Number.MAX_VALUE;\n\n\t\t\tfor (let i = 0; i < 6; i++) {\n\t\t\t\tlet distance = planes[ i ].distanceToPoint(center);\n\n\t\t\t\tif (distance < negRadius) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\tminDistance = Math.min(minDistance, distance);\n\t\t\t}\n\n\t\t\treturn (minDistance >= sphere.radius) ? 2 : 1;\n\t\t}\n\n\t\t// code taken from three.js\n\t\t// ImageUtils - generateDataTexture()\n\t\tstatic generateDataTexture (width, height, color) {\n\t\t\tlet size = width * height;\n\t\t\tlet data = new Uint8Array(4 * width * height);\n\n\t\t\tlet r = Math.floor(color.r * 255);\n\t\t\tlet g = Math.floor(color.g * 255);\n\t\t\tlet b = Math.floor(color.b * 255);\n\n\t\t\tfor (let i = 0; i < size; i++) {\n\t\t\t\tdata[ i * 3 ] = r;\n\t\t\t\tdata[ i * 3 + 1 ] = g;\n\t\t\t\tdata[ i * 3 + 2 ] = b;\n\t\t\t}\n\n\t\t\tlet texture = new DataTexture(data, width, height, RGBAFormat);\n\t\t\ttexture.needsUpdate = true;\n\t\t\ttexture.magFilter = NearestFilter;\n\n\t\t\treturn texture;\n\t\t}\n\n\t\t// from http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n\t\tstatic getParameterByName (name) {\n\t\t\tname = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n\t\t\tlet regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n\t\t\tlet results = regex.exec(document.location.search);\n\t\t\treturn results === null ? null : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n\t\t}\n\n\t\tstatic setParameter (name, value) {\n\t\t\t// value = encodeURIComponent(value);\n\n\t\t\tname = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n\t\t\tlet regex = new RegExp('([\\\\?&])(' + name + '=([^&#]*))');\n\t\t\tlet results = regex.exec(document.location.search);\n\n\t\t\tlet url = window.location.href;\n\t\t\tif (results === null) {\n\t\t\t\tif (window.location.search.length === 0) {\n\t\t\t\t\turl = url + '?';\n\t\t\t\t} else {\n\t\t\t\t\turl = url + '&';\n\t\t\t\t}\n\n\t\t\t\turl = url + name + '=' + value;\n\t\t\t} else {\n\t\t\t\tlet newValue = name + '=' + value;\n\t\t\t\turl = url.replace(results[2], newValue);\n\t\t\t}\n\t\t\twindow.history.replaceState({}, '', url);\n\t\t}\n\n\t\tstatic createChildAABB(aabb, index){\n\t\t\tlet min = aabb.min.clone();\n\t\t\tlet max = aabb.max.clone();\n\t\t\tlet size = new Vector3().subVectors(max, min);\n\n\t\t\tif ((index & 0b0001) > 0) {\n\t\t\t\tmin.z += size.z / 2;\n\t\t\t} else {\n\t\t\t\tmax.z -= size.z / 2;\n\t\t\t}\n\n\t\t\tif ((index & 0b0010) > 0) {\n\t\t\t\tmin.y += size.y / 2;\n\t\t\t} else {\n\t\t\t\tmax.y -= size.y / 2;\n\t\t\t}\n\n\t\t\tif ((index & 0b0100) > 0) {\n\t\t\t\tmin.x += size.x / 2;\n\t\t\t} else {\n\t\t\t\tmax.x -= size.x / 2;\n\t\t\t}\n\n\t\t\treturn new Box3(min, max);\n\t\t}\n\n\t\t// see https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript\n\t\tstatic clipboardCopy(text){\n\t\t\tlet textArea = document.createElement(\"textarea\");\n\n\t\t\ttextArea.style.position = 'fixed';\n\t\t\ttextArea.style.top = 0;\n\t\t\ttextArea.style.left = 0;\n\n\t\t\ttextArea.style.width = '2em';\n\t\t\ttextArea.style.height = '2em';\n\n\t\t\ttextArea.style.padding = 0;\n\n\t\t\ttextArea.style.border = 'none';\n\t\t\ttextArea.style.outline = 'none';\n\t\t\ttextArea.style.boxShadow = 'none';\n\n\t\t\ttextArea.style.background = 'transparent';\n\n\t\t\ttextArea.value = text;\n\n\t\t\tdocument.body.appendChild(textArea);\n\n\t\t\ttextArea.select();\n\n\t\t\t try {\n\t\t\t\tlet success = document.execCommand('copy');\n\t\t\t\tif(success){\n\t\t\t\t\tconsole.log(\"copied text to clipboard\");\n\t\t\t\t}else {\n\t\t\t\t\tconsole.log(\"copy to clipboard failed\");\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.log(\"error while trying to copy to clipboard\");\n\t\t\t}\n\n\t\t\tdocument.body.removeChild(textArea);\n\n\t\t}\n\n\t\tstatic getMeasurementIcon(measurement){\n\t\t\tif (measurement instanceof Measure) {\n\t\t\t\tif (measurement.showDistances && !measurement.showArea && !measurement.showAngles) {\n\t\t\t\t\treturn `${Potree.resourcePath}/icons/distance.svg`;\n\t\t\t\t} else if (measurement.showDistances && measurement.showArea && !measurement.showAngles) {\n\t\t\t\t\treturn `${Potree.resourcePath}/icons/area.svg`;\n\t\t\t\t} else if (measurement.maxMarkers === 1) {\n\t\t\t\t\treturn `${Potree.resourcePath}/icons/point.svg`;\n\t\t\t\t} else if (!measurement.showDistances && !measurement.showArea && measurement.showAngles) {\n\t\t\t\t\treturn `${Potree.resourcePath}/icons/angle.png`;\n\t\t\t\t} else if (measurement.showHeight) {\n\t\t\t\t\treturn `${Potree.resourcePath}/icons/height.svg`;\n\t\t\t\t} else {\n\t\t\t\t\treturn `${Potree.resourcePath}/icons/distance.svg`;\n\t\t\t\t}\n\t\t\t} else if (measurement instanceof Profile) {\n\t\t\t\treturn `${Potree.resourcePath}/icons/profile.svg`;\n\t\t\t} else if (measurement instanceof Volume) {\n\t\t\t\treturn `${Potree.resourcePath}/icons/volume.svg`;\n\t\t\t} else if (measurement instanceof PolygonClipVolume) {\n\t\t\t\treturn `${Potree.resourcePath}/icons/clip-polygon.svg`;\n\t\t\t}\n\t\t}\n\n\t\tstatic lineToLineIntersection(P0, P1, P2, P3){\n\n\t\t\tconst P = [P0, P1, P2, P3];\n\n\t\t\tconst d = (m, n, o, p) => {\n\t\t\t\tlet result =  \n\t\t\t\t\t  (P[m].x - P[n].x) * (P[o].x - P[p].x)\n\t\t\t\t\t+ (P[m].y - P[n].y) * (P[o].y - P[p].y)\n\t\t\t\t\t+ (P[m].z - P[n].z) * (P[o].z - P[p].z);\n\n\t\t\t\treturn result;\n\t\t\t};\n\n\n\t\t\tconst mua = (d(0, 2, 3, 2) * d(3, 2, 1, 0) - d(0, 2, 1, 0) * d(3, 2, 3, 2))\n\t\t\t        /**-----------------------------------------------------------------**/ /\n\t\t\t            (d(1, 0, 1, 0) * d(3, 2, 3, 2) - d(3, 2, 1, 0) * d(3, 2, 1, 0));\n\n\n\t\t\tconst mub = (d(0, 2, 3, 2) + mua * d(3, 2, 1, 0))\n\t\t\t        /**--------------------------------------**/ /\n\t\t\t                       d(3, 2, 3, 2);\n\n\n\t\t\tconst P01 = P1.clone().sub(P0);\n\t\t\tconst P23 = P3.clone().sub(P2);\n\t\t\t\n\t\t\tconst Pa = P0.clone().add(P01.multiplyScalar(mua));\n\t\t\tconst Pb = P2.clone().add(P23.multiplyScalar(mub));\n\n\t\t\tconst center = Pa.clone().add(Pb).multiplyScalar(0.5);\n\n\t\t\treturn center;\n\t\t}\n\n\t\tstatic computeCircleCenter(A, B, C){\n\t\t\tconst AB = B.clone().sub(A);\n\t\t\tconst AC = C.clone().sub(A);\n\n\t\t\tconst N = AC.clone().cross(AB).normalize();\n\n\t\t\tconst ab_dir = AB.clone().cross(N).normalize();\n\t\t\tconst ac_dir = AC.clone().cross(N).normalize();\n\n\t\t\tconst ab_origin = A.clone().add(B).multiplyScalar(0.5);\n\t\t\tconst ac_origin = A.clone().add(C).multiplyScalar(0.5);\n\n\t\t\tconst P0 = ab_origin;\n\t\t\tconst P1 = ab_origin.clone().add(ab_dir);\n\n\t\t\tconst P2 = ac_origin;\n\t\t\tconst P3 = ac_origin.clone().add(ac_dir);\n\n\t\t\tconst center = Utils.lineToLineIntersection(P0, P1, P2, P3);\n\n\t\t\treturn center;\n\n\t\t\t// Potree.Utils.debugLine(viewer.scene.scene, P0, P1, 0x00ff00);\n\t\t\t// Potree.Utils.debugLine(viewer.scene.scene, P2, P3, 0x0000ff);\n\n\t\t\t// Potree.Utils.debugSphere(viewer.scene.scene, center, 0.03, 0xff00ff);\n\n\t\t\t// const radius = center.distanceTo(A);\n\t\t\t// Potree.Utils.debugCircle(viewer.scene.scene, center, radius, new THREE.Vector3(0, 0, 1), 0xff00ff);\n\t\t}\n\n\t\tstatic getNorthVec(p1, distance, projection){\n\t\t\tif(projection){\n\t\t\t\t// if there is a projection, transform coordinates to WGS84\n\t\t\t\t// and compute angle to north there\n\n\t\t\t\tproj4.defs(\"pointcloud\", projection);\n\t\t\t\tconst transform = proj4(\"pointcloud\", \"WGS84\");\n\n\t\t\t\tconst llP1 = transform.forward(p1.toArray());\n\t\t\t\tlet llP2 = transform.forward([p1.x, p1.y + distance]);\n\t\t\t\tconst polarRadius = Math.sqrt((llP2[0] - llP1[0]) ** 2 + (llP2[1] - llP1[1]) ** 2);\n\t\t\t\tllP2 = [llP1[0], llP1[1] + polarRadius];\n\n\t\t\t\tconst northVec = transform.inverse(llP2);\n\t\t\t\t\n\t\t\t\treturn new Vector3(...northVec, p1.z).sub(p1);\n\t\t\t}else {\n\t\t\t\t// if there is no projection, assume [0, 1, 0] as north direction\n\n\t\t\t\tconst vec = new Vector3(0, 1, 0).multiplyScalar(distance);\n\t\t\t\t\n\t\t\t\treturn vec;\n\t\t\t}\n\t\t}\n\n\t\tstatic computeAzimuth(p1, p2, projection){\n\n\t\t\tlet azimuth = 0;\n\n\t\t\tif(projection){\n\t\t\t\t// if there is a projection, transform coordinates to WGS84\n\t\t\t\t// and compute angle to north there\n\n\t\t\t\tlet transform;\n\n\t\t\t\tif (projection.includes('EPSG')) {\n\t\t\t\t\ttransform = proj4(projection, \"WGS84\");\n\t\t\t\t} else {\n\t\t\t\t\tproj4.defs(\"pointcloud\", projection);\n\t\t\t\t\ttransform = proj4(\"pointcloud\", \"WGS84\");\n\t\t\t\t}\n\n\t\t\t\tconst llP1 = transform.forward(p1.toArray());\n\t\t\t\tconst llP2 = transform.forward(p2.toArray());\n\t\t\t\tconst dir = [\n\t\t\t\t\tllP2[0] - llP1[0],\n\t\t\t\t\tllP2[1] - llP1[1],\n\t\t\t\t];\n\t\t\t\tazimuth = Math.atan2(dir[1], dir[0]) - Math.PI / 2;\n\t\t\t}else {\n\t\t\t\t// if there is no projection, assume [0, 1, 0] as north direction\n\n\t\t\t\tconst dir = [p2.x - p1.x, p2.y - p1.y];\n\t\t\t\tazimuth = Math.atan2(dir[1], dir[0]) - Math.PI / 2;\n\t\t\t}\n\n\t\t\t// make clockwise\n\t\t\tazimuth = -azimuth;\n\n\t\t\treturn azimuth;\n\t\t}\n\n\t\tstatic async loadScript(url){\n\n\t\t\treturn new Promise( resolve => {\n\n\t\t\t\tconst element = document.getElementById(url);\n\n\t\t\t\tif(element){\n\t\t\t\t\tresolve();\n\t\t\t\t}else {\n\t\t\t\t\tconst script = document.createElement(\"script\");\n\n\t\t\t\t\tscript.id = url;\n\n\t\t\t\t\tscript.onload = () => {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\tscript.src = url;\n\n\t\t\t\t\tdocument.body.appendChild(script);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tstatic createSvgGradient(scheme){\n\n\t\t\t// this is what we are creating:\n\t\t\t//\n\t\t\t//<svg width=\"1em\" height=\"3em\"  xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t//\t<defs>\n\t\t\t//\t\t<linearGradient id=\"gradientID\" gradientTransform=\"rotate(90)\">\n\t\t\t//\t\t<stop offset=\"0%\"  stop-color=\"rgb(93, 78, 162)\" />\n\t\t\t//\t\t...\n\t\t\t//\t\t<stop offset=\"100%\"  stop-color=\"rgb(157, 0, 65)\" />\n\t\t\t//\t\t</linearGradient>\n\t\t\t//\t</defs>\n\t\t\t//\t\n\t\t\t//\t<rect width=\"100%\" height=\"100%\" fill=\"url('#myGradient')\" stroke=\"black\" stroke-width=\"0.1em\"/>\n\t\t\t//</svg>\n\n\n\t\t\tconst gradientId = `${Math.random()}_${Date.now()}`;\n\t\t\t\n\t\t\tconst svgn = \"http://www.w3.org/2000/svg\";\n\t\t\tconst svg = document.createElementNS(svgn, \"svg\");\n\t\t\tsvg.setAttributeNS(null, \"width\", \"2em\");\n\t\t\tsvg.setAttributeNS(null, \"height\", \"3em\");\n\t\t\t\n\t\t\t{ // <defs>\n\t\t\t\tconst defs = document.createElementNS(svgn, \"defs\");\n\t\t\t\t\n\t\t\t\tconst linearGradient = document.createElementNS(svgn, \"linearGradient\");\n\t\t\t\tlinearGradient.setAttributeNS(null, \"id\", gradientId);\n\t\t\t\tlinearGradient.setAttributeNS(null, \"gradientTransform\", \"rotate(90)\");\n\n\t\t\t\tfor(let i = scheme.length - 1; i >= 0; i--){\n\t\t\t\t\tconst stopVal = scheme[i];\n\t\t\t\t\tconst percent = parseInt(100 - stopVal[0] * 100);\n\t\t\t\t\tconst [r, g, b] = stopVal[1].toArray().map(v => parseInt(v * 255));\n\n\t\t\t\t\tconst stop = document.createElementNS(svgn, \"stop\");\n\t\t\t\t\tstop.setAttributeNS(null, \"offset\", `${percent}%`);\n\t\t\t\t\tstop.setAttributeNS(null, \"stop-color\", `rgb(${r}, ${g}, ${b})`);\n\n\t\t\t\t\tlinearGradient.appendChild(stop);\n\t\t\t\t}\n\n\t\t\t\tdefs.appendChild(linearGradient);\n\t\t\t\tsvg.appendChild(defs);\n\t\t\t}\n\n\t\t\tconst rect = document.createElementNS(svgn, \"rect\");\n\t\t\trect.setAttributeNS(null, \"width\", `100%`);\n\t\t\trect.setAttributeNS(null, \"height\", `100%`);\n\t\t\trect.setAttributeNS(null, \"fill\", `url(\"#${gradientId}\")`);\n\t\t\trect.setAttributeNS(null, \"stroke\", `black`);\n\t\t\trect.setAttributeNS(null, \"stroke-width\", `0.1em`);\n\n\t\t\tsvg.appendChild(rect);\n\t\t\t\n\t\t\treturn svg;\n\t\t}\n\n\t\tstatic async waitAny(promises){\n\t\t\t\n\t\t\treturn new Promise( (resolve) => {\n\n\t\t\t\tpromises.map( promise => {\n\t\t\t\t\tpromise.then( () => {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\tUtils.screenPass = new function () {\n\t\tthis.screenScene = new Scene();\n\t\tthis.screenQuad = new Mesh(new PlaneBufferGeometry(2, 2, 1));\n\t\tthis.screenQuad.material.depthTest = true;\n\t\tthis.screenQuad.material.depthWrite = true;\n\t\tthis.screenQuad.material.transparent = true;\n\t\tthis.screenScene.add(this.screenQuad);\n\t\tthis.camera = new Camera();\n\n\t\tthis.render = function (renderer, material, target) {\n\t\t\tthis.screenQuad.material = material;\n\n\t\t\tif (typeof target === 'undefined') {\n\t\t\t\trenderer.render(this.screenScene, this.camera);\n\t\t\t} else {\n\t\t\t\trenderer.render(this.screenScene, this.camera, target);\n\t\t\t}\n\t\t};\n\t}();\n\n\tclass Annotation extends EventDispatcher {\n\t\tconstructor (args = {}) {\n\t\t\tsuper();\n\n\t\t\tthis.scene = null;\n\t\t\tthis._title = args.title || 'No Title';\n\t\t\tthis._description = args.description || '';\n\t\t\tthis.offset = new Vector3();\n\t\t\tthis.uuid = MathUtils.generateUUID();\n\n\t\t\tif (!args.position) {\n\t\t\t\tthis.position = null;\n\t\t\t} else if (args.position.x != null) {\n\t\t\t\tthis.position = args.position;\n\t\t\t} else {\n\t\t\t\tthis.position = new Vector3(...args.position);\n\t\t\t}\n\n\t\t\tthis.cameraPosition = (args.cameraPosition instanceof Array)\n\t\t\t\t? new Vector3().fromArray(args.cameraPosition) : args.cameraPosition;\n\t\t\tthis.cameraTarget = (args.cameraTarget instanceof Array)\n\t\t\t\t? new Vector3().fromArray(args.cameraTarget) : args.cameraTarget;\n\t\t\tthis.radius = args.radius;\n\t\t\tthis.view = args.view || null;\n\t\t\tthis.keepOpen = false;\n\t\t\tthis.descriptionVisible = false;\n\t\t\tthis.showDescription = true;\n\t\t\tthis.actions = args.actions || [];\n\t\t\tthis.isHighlighted = false;\n\t\t\tthis._visible = true;\n\t\t\tthis.__visible = true;\n\t\t\tthis._display = true;\n\t\t\tthis._expand = false;\n\t\t\tthis.collapseThreshold = [args.collapseThreshold, 100].find(e => e !== undefined);\n\n\t\t\tthis.children = [];\n\t\t\tthis.parent = null;\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t\tlet iconClose = exports.resourcePath + '/icons/close.svg';\n\n\t\t\tthis.domElement = $(`\n\t\t\t<div class=\"annotation\" oncontextmenu=\"return false;\">\n\t\t\t\t<div class=\"annotation-titlebar\">\n\t\t\t\t\t<span class=\"annotation-label\"></span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"annotation-description\">\n\t\t\t\t\t<span class=\"annotation-description-close\">\n\t\t\t\t\t\t<img src=\"${iconClose}\" width=\"16px\">\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"annotation-description-content\">${this._description}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tthis.elTitlebar = this.domElement.find('.annotation-titlebar');\n\t\t\tthis.elTitle = this.elTitlebar.find('.annotation-label');\n\t\t\tthis.elTitle.append(this._title);\n\t\t\tthis.elDescription = this.domElement.find('.annotation-description');\n\t\t\tthis.elDescriptionClose = this.elDescription.find('.annotation-description-close');\n\t\t\t// this.elDescriptionContent = this.elDescription.find(\".annotation-description-content\");\n\n\t\t\tthis.clickTitle = () => {\n\t\t\t\tif(this.hasView()){\n\t\t\t\t\tthis.moveHere(this.scene.getActiveCamera());\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent({type: 'click', target: this});\n\t\t\t};\n\n\t\t\tthis.elTitle.click(this.clickTitle);\n\n\t\t\tthis.actions = this.actions.map(a => {\n\t\t\t\tif (a instanceof Action) {\n\t\t\t\t\treturn a;\n\t\t\t\t} else {\n\t\t\t\t\treturn new Action(a);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (let action of this.actions) {\n\t\t\t\taction.pairWith(this);\n\t\t\t}\n\n\t\t\tlet actions = this.actions.filter(\n\t\t\t\ta => a.showIn === undefined || a.showIn.includes('scene'));\n\n\t\t\tfor (let action of actions) {\n\t\t\t\tlet elButton = $(`<img src=\"${action.icon}\" class=\"annotation-action-icon\">`);\n\t\t\t\tthis.elTitlebar.append(elButton);\n\t\t\t\telButton.click(() => action.onclick({annotation: this}));\n\t\t\t}\n\n\t\t\tthis.elDescriptionClose.hover(\n\t\t\t\te => this.elDescriptionClose.css('opacity', '1'),\n\t\t\t\te => this.elDescriptionClose.css('opacity', '0.5')\n\t\t\t);\n\t\t\tthis.elDescriptionClose.click(e => this.setHighlighted(false));\n\t\t\t// this.elDescriptionContent.html(this._description);\n\n\t\t\tthis.domElement.mouseenter(e => this.setHighlighted(true));\n\t\t\tthis.domElement.mouseleave(e => this.setHighlighted(false));\n\n\t\t\tthis.domElement.on('touchstart', e => {\n\t\t\t\tthis.setHighlighted(!this.isHighlighted);\n\t\t\t});\n\n\t\t\tthis.display = false;\n\t\t\t//this.display = true;\n\n\t\t}\n\n\t\tinstallHandles(viewer){\n\t\t\tif(this.handles !== undefined){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet domElement = $(`\n\t\t\t<div style=\"position: absolute; left: 300; top: 200; pointer-events: none\">\n\t\t\t\t<svg width=\"300\" height=\"600\">\n\t\t\t\t\t<line x1=\"0\" y1=\"0\" x2=\"1200\" y2=\"200\" style=\"stroke: black; stroke-width:2\" />\n\t\t\t\t\t<circle cx=\"50\" cy=\"50\" r=\"4\" stroke=\"black\" stroke-width=\"2\" fill=\"gray\" />\n\t\t\t\t\t<circle cx=\"150\" cy=\"50\" r=\"4\" stroke=\"black\" stroke-width=\"2\" fill=\"gray\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t`);\n\t\t\t\n\t\t\tlet svg = domElement.find(\"svg\")[0];\n\t\t\tlet elLine = domElement.find(\"line\")[0];\n\t\t\tlet elStart = domElement.find(\"circle\")[0];\n\t\t\tlet elEnd = domElement.find(\"circle\")[1];\n\n\t\t\tlet setCoordinates = (start, end) => {\n\t\t\t\telStart.setAttribute(\"cx\", `${start.x}`);\n\t\t\t\telStart.setAttribute(\"cy\", `${start.y}`);\n\n\t\t\t\telEnd.setAttribute(\"cx\", `${end.x}`);\n\t\t\t\telEnd.setAttribute(\"cy\", `${end.y}`);\n\n\t\t\t\telLine.setAttribute(\"x1\", start.x);\n\t\t\t\telLine.setAttribute(\"y1\", start.y);\n\t\t\t\telLine.setAttribute(\"x2\", end.x);\n\t\t\t\telLine.setAttribute(\"y2\", end.y);\n\n\t\t\t\tlet box = svg.getBBox();\n\t\t\t\tsvg.setAttribute(\"width\", `${box.width}`);\n\t\t\t\tsvg.setAttribute(\"height\", `${box.height}`);\n\t\t\t\tsvg.setAttribute(\"viewBox\", `${box.x} ${box.y} ${box.width} ${box.height}`);\n\n\t\t\t\tlet ya = start.y - end.y;\n\t\t\t\tlet xa = start.x - end.x;\n\n\t\t\t\tif(ya > 0){\n\t\t\t\t\tstart.y = start.y - ya;\n\t\t\t\t}\n\t\t\t\tif(xa > 0){\n\t\t\t\t\tstart.x = start.x - xa;\n\t\t\t\t}\n\n\t\t\t\tdomElement.css(\"left\", `${start.x}px`);\n\t\t\t\tdomElement.css(\"top\", `${start.y}px`);\n\n\t\t\t};\n\n\t\t\t$(viewer.renderArea).append(domElement);\n\n\n\t\t\tlet annotationStartPos = this.position.clone();\n\t\t\tlet annotationStartOffset = this.offset.clone();\n\n\t\t\t$(this.domElement).draggable({\n\t\t\t\tstart: (event, ui) => {\n\t\t\t\t\tannotationStartPos = this.position.clone();\n\t\t\t\t\tannotationStartOffset = this.offset.clone();\n\t\t\t\t\t$(this.domElement).find(\".annotation-titlebar\").css(\"pointer-events\", \"none\");\n\n\t\t\t\t\tconsole.log($(this.domElement).find(\".annotation-titlebar\"));\n\t\t\t\t},\n\t\t\t\tstop: () => {\n\t\t\t\t\t$(this.domElement).find(\".annotation-titlebar\").css(\"pointer-events\", \"\");\n\t\t\t\t},\n\t\t\t\tdrag: (event, ui ) => {\n\t\t\t\t\tlet renderAreaWidth = viewer.renderer.getSize(new Vector2()).width;\n\t\t\t\t\t//let renderAreaHeight = viewer.renderer.getSize().height;\n\n\t\t\t\t\tlet diff = {\n\t\t\t\t\t\tx: ui.originalPosition.left - ui.position.left, \n\t\t\t\t\t\ty: ui.originalPosition.top - ui.position.top\n\t\t\t\t\t};\n\n\t\t\t\t\tlet nDiff = {\n\t\t\t\t\t\tx: -(diff.x / renderAreaWidth) * 2,\n\t\t\t\t\t\ty: (diff.y / renderAreaWidth) * 2\n\t\t\t\t\t};\n\n\t\t\t\t\tlet camera = viewer.scene.getActiveCamera();\n\t\t\t\t\tlet oldScreenPos = new Vector3()\n\t\t\t\t\t\t.addVectors(annotationStartPos, annotationStartOffset)\n\t\t\t\t\t\t.project(camera);\n\n\t\t\t\t\tlet newScreenPos = oldScreenPos.clone();\n\t\t\t\t\tnewScreenPos.x += nDiff.x;\n\t\t\t\t\tnewScreenPos.y += nDiff.y;\n\n\t\t\t\t\tlet newPos = newScreenPos.clone();\n\t\t\t\t\tnewPos.unproject(camera);\n\n\t\t\t\t\tlet newOffset = new Vector3().subVectors(newPos, this.position);\n\t\t\t\t\tthis.offset.copy(newOffset);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet updateCallback = () => {\n\t\t\t\tlet position = this.position;\n\t\t\t\tlet scene = viewer.scene;\n\n\t\t\t\tconst renderAreaSize = viewer.renderer.getSize(new Vector2());\n\t\t\t\tlet renderAreaWidth = renderAreaSize.width;\n\t\t\t\tlet renderAreaHeight = renderAreaSize.height;\n\n\t\t\t\tlet start = this.position.clone();\n\t\t\t\tlet end = new Vector3().addVectors(this.position, this.offset);\n\n\t\t\t\tlet toScreen = (position) => {\n\t\t\t\t\tlet camera = scene.getActiveCamera();\n\t\t\t\t\tlet screenPos = new Vector3();\n\n\t\t\t\t\tlet worldView = new Matrix4().multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\n\t\t\t\t\tlet ndc = new Vector4(position.x, position.y, position.z, 1.0).applyMatrix4(worldView);\n\t\t\t\t\t// limit w to small positive value, in case position is behind the camera\n\t\t\t\t\tndc.w = Math.max(ndc.w, 0.1);\n\t\t\t\t\tndc.divideScalar(ndc.w);\n\n\t\t\t\t\tscreenPos.copy(ndc);\n\t\t\t\t\tscreenPos.x = renderAreaWidth * (screenPos.x + 1) / 2;\n\t\t\t\t\tscreenPos.y = renderAreaHeight * (1 - (screenPos.y + 1) / 2);\n\n\t\t\t\t\treturn screenPos;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tstart = toScreen(start);\n\t\t\t\tend = toScreen(end);\n\n\t\t\t\tsetCoordinates(start, end);\n\n\t\t\t};\n\n\t\t\tviewer.addEventListener(\"update\", updateCallback);\n\n\t\t\tthis.handles = {\n\t\t\t\tdomElement: domElement,\n\t\t\t\tsetCoordinates: setCoordinates,\n\t\t\t\tupdateCallback: updateCallback\n\t\t\t};\n\t\t}\n\n\t\tremoveHandles(viewer){\n\t\t\tif(this.handles === undefined){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//$(viewer.renderArea).remove(this.handles.domElement);\n\t\t\tthis.handles.domElement.remove();\n\t\t\tviewer.removeEventListener(\"update\", this.handles.updateCallback);\n\n\t\t\tdelete this.handles;\n\t\t}\n\n\t\tget visible () {\n\t\t\treturn this._visible;\n\t\t}\n\n\t\tset visible (value) {\n\t\t\tif (this._visible === value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._visible = value;\n\n\t\t\t//this.traverse(node => {\n\t\t\t//\tnode.display = value;\n\t\t\t//});\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'visibility_changed',\n\t\t\t\tannotation: this\n\t\t\t});\n\t\t}\n\n\t\tget display () {\n\t\t\treturn this._display;\n\t\t}\n\n\t\tset display (display) {\n\t\t\tif (this._display === display) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._display = display;\n\n\t\t\tif (display) {\n\t\t\t\t// this.domElement.fadeIn(200);\n\t\t\t\tthis.domElement.show();\n\t\t\t} else {\n\t\t\t\t// this.domElement.fadeOut(200);\n\t\t\t\tthis.domElement.hide();\n\t\t\t}\n\t\t}\n\n\t\tget expand () {\n\t\t\treturn this._expand;\n\t\t}\n\n\t\tset expand (expand) {\n\t\t\tif (this._expand === expand) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (expand) {\n\t\t\t\tthis.display = false;\n\t\t\t} else {\n\t\t\t\tthis.display = true;\n\t\t\t\tthis.traverseDescendants(node => {\n\t\t\t\t\tnode.display = false;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._expand = expand;\n\t\t}\n\n\t\tget title () {\n\t\t\treturn this._title;\n\t\t}\n\n\t\tset title (title) {\n\t\t\tif (this._title === title) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._title = title;\n\t\t\tthis.elTitle.empty();\n\t\t\tthis.elTitle.append(this._title);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: \"annotation_changed\",\n\t\t\t\tannotation: this,\n\t\t\t});\n\t\t}\n\n\t\tget description () {\n\t\t\treturn this._description;\n\t\t}\n\n\t\tset description (description) {\n\t\t\tif (this._description === description) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._description = description;\n\n\t\t\tconst elDescriptionContent = this.elDescription.find(\".annotation-description-content\");\n\t\t\telDescriptionContent.empty();\n\t\t\telDescriptionContent.append(this._description);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: \"annotation_changed\",\n\t\t\t\tannotation: this,\n\t\t\t});\n\t\t}\n\n\t\tadd (annotation) {\n\t\t\tif (!this.children.includes(annotation)) {\n\t\t\t\tthis.children.push(annotation);\n\t\t\t\tannotation.parent = this;\n\n\t\t\t\tlet descendants = [];\n\t\t\t\tannotation.traverse(a => { descendants.push(a); });\n\n\t\t\t\tfor (let descendant of descendants) {\n\t\t\t\t\tlet c = this;\n\t\t\t\t\twhile (c !== null) {\n\t\t\t\t\t\tc.dispatchEvent({\n\t\t\t\t\t\t\t'type': 'annotation_added',\n\t\t\t\t\t\t\t'annotation': descendant\n\t\t\t\t\t\t});\n\t\t\t\t\t\tc = c.parent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlevel () {\n\t\t\tif (this.parent === null) {\n\t\t\t\treturn 0;\n\t\t\t} else {\n\t\t\t\treturn this.parent.level() + 1;\n\t\t\t}\n\t\t}\n\n\t\thasChild(annotation) {\n\t\t\treturn this.children.includes(annotation);\n\t\t}\n\n\t\tremove (annotation) {\n\t\t\tif (this.hasChild(annotation)) {\n\t\t\t\tannotation.removeAllChildren();\n\t\t\t\tannotation.dispose();\n\t\t\t\tthis.children = this.children.filter(e => e !== annotation);\n\t\t\t\tannotation.parent = null;\n\t\t\t}\n\t\t}\n\n\t\tremoveAllChildren() {\n\t\t\tthis.children.forEach((child) => {\n\t\t\t\tif (child.children.length > 0) {\n\t\t\t\t\tchild.removeAllChildren();\n\t\t\t\t}\n\n\t\t\t\tthis.remove(child);\n\t\t\t});\n\t\t}\n\n\t\tupdateBounds () {\n\t\t\tlet box = new Box3();\n\n\t\t\tif (this.position) {\n\t\t\t\tbox.expandByPoint(this.position);\n\t\t\t}\n\n\t\t\tfor (let child of this.children) {\n\t\t\t\tchild.updateBounds();\n\n\t\t\t\tbox.union(child.boundingBox);\n\t\t\t}\n\n\t\t\tthis.boundingBox.copy(box);\n\t\t}\n\n\t\ttraverse (handler) {\n\t\t\tlet expand = handler(this);\n\n\t\t\tif (expand === undefined || expand === true) {\n\t\t\t\tfor (let child of this.children) {\n\t\t\t\t\tchild.traverse(handler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttraverseDescendants (handler) {\n\t\t\tfor (let child of this.children) {\n\t\t\t\tchild.traverse(handler);\n\t\t\t}\n\t\t}\n\n\t\tflatten () {\n\t\t\tlet annotations = [];\n\n\t\t\tthis.traverse(annotation => {\n\t\t\t\tannotations.push(annotation);\n\t\t\t});\n\n\t\t\treturn annotations;\n\t\t}\n\n\t\tdescendants () {\n\t\t\tlet annotations = [];\n\n\t\t\tthis.traverse(annotation => {\n\t\t\t\tif (annotation !== this) {\n\t\t\t\t\tannotations.push(annotation);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn annotations;\n\t\t}\n\n\t\tsetHighlighted (highlighted) {\n\t\t\tif (highlighted) {\n\t\t\t\tthis.domElement.css('opacity', '0.8');\n\t\t\t\tthis.elTitlebar.css('box-shadow', '0 0 5px #fff');\n\t\t\t\tthis.domElement.css('z-index', '1000');\n\n\t\t\t\tif (this._description) {\n\t\t\t\t\tthis.descriptionVisible = true;\n\t\t\t\t\tthis.elDescription.fadeIn(200);\n\t\t\t\t\tthis.elDescription.css('position', 'relative');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.domElement.css('opacity', '0.5');\n\t\t\t\tthis.elTitlebar.css('box-shadow', '');\n\t\t\t\tthis.domElement.css('z-index', '100');\n\t\t\t\tthis.descriptionVisible = false;\n\t\t\t\tthis.elDescription.css('display', 'none');\n\t\t\t}\n\n\t\t\tthis.isHighlighted = highlighted;\n\t\t}\n\n\t\thasView () {\n\t\t\tlet hasPosTargetView = this.cameraTarget.x != null;\n\t\t\thasPosTargetView = hasPosTargetView && this.cameraPosition.x != null;\n\n\t\t\tlet hasRadiusView = this.radius !== undefined;\n\n\t\t\tlet hasView = hasPosTargetView || hasRadiusView;\n\n\t\t\treturn hasView;\n\t\t};\n\n\t\tmoveHere (camera) {\n\t\t\tif (!this.hasView()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet view = this.scene.view;\n\t\t\tlet animationDuration = 500;\n\t\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t\tlet endTarget;\n\t\t\tif (this.cameraTarget) {\n\t\t\t\tendTarget = this.cameraTarget;\n\t\t\t} else if (this.position) {\n\t\t\t\tendTarget = this.position;\n\t\t\t} else {\n\t\t\t\tendTarget = this.boundingBox.getCenter(new Vector3());\n\t\t\t}\n\n\t\t\tif (this.cameraPosition) {\n\t\t\t\tlet endPosition = this.cameraPosition;\n\n\t\t\t\tUtils.moveTo(this.scene, endPosition, endTarget);\n\t\t\t} else if (this.radius) {\n\t\t\t\tlet direction = view.direction;\n\t\t\t\tlet endPosition = endTarget.clone().add(direction.multiplyScalar(-this.radius));\n\t\t\t\tlet startRadius = view.radius;\n\t\t\t\tlet endRadius = this.radius;\n\n\t\t\t\t{ // animate camera position\n\t\t\t\t\tlet tween = new TWEEN.Tween(view.position).to(endPosition, animationDuration);\n\t\t\t\t\ttween.easing(easing);\n\t\t\t\t\ttween.start();\n\t\t\t\t}\n\n\t\t\t\t{ // animate radius\n\t\t\t\t\tlet t = {x: 0};\n\n\t\t\t\t\tlet tween = new TWEEN.Tween(t)\n\t\t\t\t\t\t.to({x: 1}, animationDuration)\n\t\t\t\t\t\t.onUpdate(function () {\n\t\t\t\t\t\t\tview.radius = this.x * endRadius + (1 - this.x) * startRadius;\n\t\t\t\t\t\t});\n\t\t\t\t\ttween.easing(easing);\n\t\t\t\t\ttween.start();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tdispose () {\n\t\t\tif (this.domElement.parentElement) {\n\t\t\t\tthis.domElement.parentElement.removeChild(this.domElement);\n\t\t\t}\n\t\t};\n\n\t\ttoString () {\n\t\t\treturn 'Annotation: ' + this._title;\n\t\t}\n\t};\n\n\tclass EnumItem{\n\t\tconstructor(object){\n\t\t\tfor(let key of Object.keys(object)){\n\t\t\t\tthis[key] = object[key];\n\t\t\t}\n\t\t}\n\n\t\tinspect(){\n\t\t\treturn `Enum(${this.name}: ${this.value})`;\n\t\t}\n\t};\n\n\tclass Enum{\n\n\t\tconstructor(object){\n\t\t\tthis.object = object;\n\n\t\t\tfor(let key of Object.keys(object)){\n\t\t\t\tlet value = object[key];\n\n\t\t\t\tif(typeof value === \"object\"){\n\t\t\t\t\tvalue.name = key;\n\t\t\t\t}else {\n\t\t\t\t\tvalue = {name: key, value: value};\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis[key] = new EnumItem(value);\n\t\t\t}\n\t\t}\n\n\t\tfromValue(value){\n\t\t\tfor(let key of Object.keys(this.object)){\n\t\t\t\tif(this[key].value === value){\n\t\t\t\t\treturn this[key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new Error(`No enum for value: ${value}`);\n\t\t}\n\t\t\n\t};\n\n\tconst CameraMode = {\n\t\tORTHOGRAPHIC: 0,\n\t\tPERSPECTIVE: 1,\n\t\tVR: 2,\n\t};\n\n\tconst ClipTask = {\n\t\tNONE: 0,\n\t\tHIGHLIGHT: 1,\n\t\tSHOW_INSIDE: 2,\n\t\tSHOW_OUTSIDE: 3\n\t};\n\n\tconst ClipMethod = {\n\t\tINSIDE_ANY: 0,\n\t\tINSIDE_ALL: 1\n\t};\n\n\tconst ElevationGradientRepeat = {\n\t\tCLAMP: 0,\n\t\tREPEAT: 1,\n\t\tMIRRORED_REPEAT: 2,\n\t};\n\n\tconst MOUSE$1 = {\n\t\tLEFT: 0b0001,\n\t\tRIGHT: 0b0010,\n\t\tMIDDLE: 0b0100\n\t};\n\n\tconst PointSizeType = {\n\t\tFIXED: 0,\n\t\tATTENUATED: 1,\n\t\tADAPTIVE: 2\n\t};\n\n\tconst PointShape = {\n\t\tSQUARE: 0,\n\t\tCIRCLE: 1,\n\t\tPARABOLOID: 2\n\t};\n\n\tconst TreeType = {\n\t\tOCTREE:\t0,\n\t\tKDTREE:\t1\n\t};\n\n\tconst LengthUnits = {\n\t\tMETER: {code: 'm', unitspermeter: 1.0},\n\t\tFEET: {code: 'ft', unitspermeter: 3.28084},\n\t\tINCH: {code: '\\u2033', unitspermeter: 39.3701}\n\t};\n\n\tlet ftCanvas = document.createElement('canvas');\n\n\tconst Features = (function () {\n\n\t\tlet gl = ftCanvas.getContext('webgl') || ftCanvas.getContext('experimental-webgl');\n\t\tif (gl === null){ \n\t\t\treturn null; \n\t\t}\n\n\t\t// -- code taken from THREE.WebGLRenderer --\n\t\tlet _vertexShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT);\n\t\tlet _vertexShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT);\n\t\t// Unused: let _vertexShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT);\n\n\t\tlet _fragmentShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n\t\tlet _fragmentShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT);\n\t\t// Unused: let _fragmentShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT);\n\n\t\tlet highpAvailable = _vertexShaderPrecisionHighpFloat.precision > 0 && _fragmentShaderPrecisionHighpFloat.precision > 0;\n\t\tlet mediumpAvailable = _vertexShaderPrecisionMediumpFloat.precision > 0 && _fragmentShaderPrecisionMediumpFloat.precision > 0;\n\t\t// -----------------------------------------\n\n\t\tlet precision;\n\t\tif (highpAvailable) {\n\t\t\tprecision = 'highp';\n\t\t} else if (mediumpAvailable) {\n\t\t\tprecision = 'mediump';\n\t\t} else {\n\t\t\tprecision = 'lowp';\n\t\t}\n\n\t\treturn {\n\t\t\tSHADER_INTERPOLATION: {\n\t\t\t\tisSupported: function () {\n\t\t\t\t\tlet supported = true;\n\n\t\t\t\t\tsupported = supported && gl.getExtension('EXT_frag_depth');\n\t\t\t\t\tsupported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;\n\n\t\t\t\t\treturn supported;\n\t\t\t\t}\n\t\t\t},\n\t\t\tSHADER_SPLATS: {\n\t\t\t\tisSupported: function () {\n\t\t\t\t\tlet supported = true;\n\n\t\t\t\t\tsupported = supported && gl.getExtension('EXT_frag_depth');\n\t\t\t\t\tsupported = supported && gl.getExtension('OES_texture_float');\n\t\t\t\t\tsupported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;\n\n\t\t\t\t\treturn supported;\n\t\t\t\t}\n\n\t\t\t},\n\t\t\tSHADER_EDL: {\n\t\t\t\tisSupported: function () {\n\t\t\t\t\tlet supported = true;\n\n\t\t\t\t\tsupported = supported && gl.getExtension('EXT_frag_depth');\n\t\t\t\t\tsupported = supported && gl.getExtension('OES_texture_float');\n\t\t\t\t\tsupported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8;\n\n\t\t\t\t\t//supported = supported || (gl instanceof WebGL2RenderingContext);\n\n\t\t\t\t\treturn supported;\n\t\t\t\t}\n\n\t\t\t},\n\t\t\t//WEBGL2: {\n\t\t\t//\tisSupported: function(){\n\t\t\t//\t\treturn gl instanceof WebGL2RenderingContext;\n\t\t\t//\t}\n\t\t\t//},\n\t\t\tprecision: precision\n\t\t};\n\t}());\n\n\tconst KeyCodes = {\n\n\t\tLEFT: 37,\n\t\tUP: 38,\n\t\tRIGHT: 39,\n\t\tBOTTOM: 40,\n\t\tDELETE: 46,\n\n\t\tA: 'A'.charCodeAt(0),\n\t\tS: 'S'.charCodeAt(0),\n\t\tD: 'D'.charCodeAt(0),\n\t\tW: 'W'.charCodeAt(0),\n\t\tQ: 'Q'.charCodeAt(0),\n\t\tE: 'E'.charCodeAt(0),\n\t\tR: 'R'.charCodeAt(0),\n\t\tF: 'F'.charCodeAt(0)\n\t\t\n\t};\n\n\tclass LRUItem{\n\n\t\tconstructor(node){\n\t\t\tthis.previous = null;\n\t\t\tthis.next = null;\n\t\t\tthis.node = node;\n\t\t}\n\n\t}\n\n\t/**\n\t *\n\t * @class A doubly-linked-list of the least recently used elements.\n\t */\n\tclass LRU{\n\n\t\tconstructor(){\n\t\t\t// the least recently used item\n\t\t\tthis.first = null;\n\t\t\t// the most recently used item\n\t\t\tthis.last = null;\n\t\t\t// a list of all items in the lru list\n\t\t\tthis.items = {};\n\t\t\tthis.elements = 0;\n\t\t\tthis.numPoints = 0;\n\t\t}\n\n\t\tsize(){\n\t\t\treturn this.elements;\n\t\t}\n\n\t\tcontains(node){\n\t\t\treturn this.items[node.id] == null;\n\t\t}\n\n\t\ttouch(node){\n\t\t\tif (!node.loaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet item;\n\t\t\tif (this.items[node.id] == null) {\n\t\t\t\t// add to list\n\t\t\t\titem = new LRUItem(node);\n\t\t\t\titem.previous = this.last;\n\t\t\t\tthis.last = item;\n\t\t\t\tif (item.previous !== null) {\n\t\t\t\t\titem.previous.next = item;\n\t\t\t\t}\n\n\t\t\t\tthis.items[node.id] = item;\n\t\t\t\tthis.elements++;\n\n\t\t\t\tif (this.first === null) {\n\t\t\t\t\tthis.first = item;\n\t\t\t\t}\n\t\t\t\tthis.numPoints += node.numPoints;\n\t\t\t} else {\n\t\t\t\t// update in list\n\t\t\t\titem = this.items[node.id];\n\t\t\t\tif (item.previous === null) {\n\t\t\t\t\t// handle touch on first element\n\t\t\t\t\tif (item.next !== null) {\n\t\t\t\t\t\tthis.first = item.next;\n\t\t\t\t\t\tthis.first.previous = null;\n\t\t\t\t\t\titem.previous = this.last;\n\t\t\t\t\t\titem.next = null;\n\t\t\t\t\t\tthis.last = item;\n\t\t\t\t\t\titem.previous.next = item;\n\t\t\t\t\t}\n\t\t\t\t} else if (item.next === null) {\n\t\t\t\t\t// handle touch on last element\n\t\t\t\t} else {\n\t\t\t\t\t// handle touch on any other element\n\t\t\t\t\titem.previous.next = item.next;\n\t\t\t\t\titem.next.previous = item.previous;\n\t\t\t\t\titem.previous = this.last;\n\t\t\t\t\titem.next = null;\n\t\t\t\t\tthis.last = item;\n\t\t\t\t\titem.previous.next = item;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tremove(node){\n\t\t\tlet lruItem = this.items[node.id];\n\t\t\tif (lruItem) {\n\t\t\t\tif (this.elements === 1) {\n\t\t\t\t\tthis.first = null;\n\t\t\t\t\tthis.last = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (!lruItem.previous) {\n\t\t\t\t\t\tthis.first = lruItem.next;\n\t\t\t\t\t\tthis.first.previous = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (!lruItem.next) {\n\t\t\t\t\t\tthis.last = lruItem.previous;\n\t\t\t\t\t\tthis.last.next = null;\n\t\t\t\t\t}\n\t\t\t\t\tif (lruItem.previous && lruItem.next) {\n\t\t\t\t\t\tlruItem.previous.next = lruItem.next;\n\t\t\t\t\t\tlruItem.next.previous = lruItem.previous;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdelete this.items[node.id];\n\t\t\t\tthis.elements--;\n\t\t\t\tthis.numPoints -= node.numPoints;\n\t\t\t}\n\t\t}\n\n\t\tgetLRUItem(){\n\t\t\tif (this.first === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tlet lru = this.first;\n\n\t\t\treturn lru.node;\n\t\t}\n\n\t\ttoString(){\n\t\t\tlet string = '{ ';\n\t\t\tlet curr = this.first;\n\t\t\twhile (curr !== null) {\n\t\t\t\tstring += curr.node.id;\n\t\t\t\tif (curr.next !== null) {\n\t\t\t\t\tstring += ', ';\n\t\t\t\t}\n\t\t\t\tcurr = curr.next;\n\t\t\t}\n\t\t\tstring += '}';\n\t\t\tstring += '(' + this.size() + ')';\n\t\t\treturn string;\n\t\t}\n\n\t\tfreeMemory(){\n\t\t\tif (this.elements <= 1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\twhile (this.numPoints > Potree.pointLoadLimit) {\n\t\t\t\tlet element = this.first;\n\t\t\t\tlet node = element.node;\n\t\t\t\tthis.disposeDescendants(node);\n\t\t\t}\n\t\t}\n\n\t\tdisposeDescendants(node){\n\t\t\tlet stack = [];\n\t\t\tstack.push(node);\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tlet current = stack.pop();\n\n\t\t\t\t// console.log(current);\n\n\t\t\t\tcurrent.dispose();\n\t\t\t\tthis.remove(current);\n\n\t\t\t\tfor (let key in current.children) {\n\t\t\t\t\tif (current.children.hasOwnProperty(key)) {\n\t\t\t\t\t\tlet child = current.children[key];\n\t\t\t\t\t\tif (child.loaded) {\n\t\t\t\t\t\t\tstack.push(current.children[key]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\tclass PointCloudTreeNode extends EventDispatcher{\n\n\t\tconstructor(){\n\t\t\tsuper();\n\t\t\tthis.needsTransformUpdate = true;\n\t\t}\n\n\t\tgetChildren () {\n\t\t\tthrow new Error('override function');\n\t\t}\n\n\t\tgetBoundingBox () {\n\t\t\tthrow new Error('override function');\n\t\t}\n\n\t\tisLoaded () {\n\t\t\tthrow new Error('override function');\n\t\t}\n\n\t\tisGeometryNode () {\n\t\t\tthrow new Error('override function');\n\t\t}\n\n\t\tisTreeNode () {\n\t\t\tthrow new Error('override function');\n\t\t}\n\n\t\tgetLevel () {\n\t\t\tthrow new Error('override function');\n\t\t}\n\n\t\tgetBoundingSphere () {\n\t\t\tthrow new Error('override function');\n\t\t}\n\t};\n\n\tclass PointCloudTree extends Object3D {\n\t\tconstructor () {\n\t\t\tsuper();\n\t\t}\n\n\t\tinitialized () {\n\t\t\treturn this.root !== null;\n\t\t}\n\t};\n\n\t/**\n\t * Some types of possible point attribute data formats\n\t *\n\t * @class\n\t */\n\tconst PointAttributeTypes = {\n\t\tDATA_TYPE_DOUBLE: {ordinal: 0, name: \"double\", size: 8},\n\t\tDATA_TYPE_FLOAT:  {ordinal: 1, name: \"float\",  size: 4},\n\t\tDATA_TYPE_INT8:   {ordinal: 2, name: \"int8\",   size: 1},\n\t\tDATA_TYPE_UINT8:  {ordinal: 3, name: \"uint8\",  size: 1},\n\t\tDATA_TYPE_INT16:  {ordinal: 4, name: \"int16\",  size: 2},\n\t\tDATA_TYPE_UINT16: {ordinal: 5, name: \"uint16\", size: 2},\n\t\tDATA_TYPE_INT32:  {ordinal: 6, name: \"int32\",  size: 4},\n\t\tDATA_TYPE_UINT32: {ordinal: 7, name: \"uint32\", size: 4},\n\t\tDATA_TYPE_INT64:  {ordinal: 8, name: \"int64\",  size: 8},\n\t\tDATA_TYPE_UINT64: {ordinal: 9, name: \"uint64\", size: 8}\n\t};\n\n\tlet i = 0;\n\tfor (let obj in PointAttributeTypes) {\n\t\tPointAttributeTypes[i] = PointAttributeTypes[obj];\n\t\ti++;\n\t}\n\n\n\tclass PointAttribute{\n\t\t\n\t\tconstructor(name, type, numElements){\n\t\t\tthis.name = name;\n\t\t\tthis.type = type;\n\t\t\tthis.numElements = numElements;\n\t\t\tthis.byteSize = this.numElements * this.type.size;\n\t\t\tthis.description = \"\";\n\t\t\tthis.range = [Infinity, -Infinity];\n\t\t}\n\n\t};\n\n\tPointAttribute.POSITION_CARTESIAN = new PointAttribute(\n\t\t\"POSITION_CARTESIAN\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\n\tPointAttribute.RGBA_PACKED = new PointAttribute(\n\t\t\"COLOR_PACKED\", PointAttributeTypes.DATA_TYPE_INT8, 4);\n\n\tPointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED;\n\n\tPointAttribute.RGB_PACKED = new PointAttribute(\n\t\t\"COLOR_PACKED\", PointAttributeTypes.DATA_TYPE_INT8, 3);\n\n\tPointAttribute.NORMAL_FLOATS = new PointAttribute(\n\t\t\"NORMAL_FLOATS\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\n\tPointAttribute.INTENSITY = new PointAttribute(\n\t\t\"INTENSITY\", PointAttributeTypes.DATA_TYPE_UINT16, 1);\n\n\tPointAttribute.CLASSIFICATION = new PointAttribute(\n\t\t\"CLASSIFICATION\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\n\tPointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute(\n\t\t\"NORMAL_SPHEREMAPPED\", PointAttributeTypes.DATA_TYPE_UINT8, 2);\n\n\tPointAttribute.NORMAL_OCT16 = new PointAttribute(\n\t\t\"NORMAL_OCT16\", PointAttributeTypes.DATA_TYPE_UINT8, 2);\n\n\tPointAttribute.NORMAL = new PointAttribute(\n\t\t\"NORMAL\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\t\t\n\tPointAttribute.RETURN_NUMBER = new PointAttribute(\n\t\t\"RETURN_NUMBER\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\t\t\n\tPointAttribute.NUMBER_OF_RETURNS = new PointAttribute(\n\t\t\"NUMBER_OF_RETURNS\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\t\t\n\tPointAttribute.SOURCE_ID = new PointAttribute(\n\t\t\"SOURCE_ID\", PointAttributeTypes.DATA_TYPE_UINT16, 1);\n\n\tPointAttribute.INDICES = new PointAttribute(\n\t\t\"INDICES\", PointAttributeTypes.DATA_TYPE_UINT32, 1);\n\n\tPointAttribute.SPACING = new PointAttribute(\n\t\t\"SPACING\", PointAttributeTypes.DATA_TYPE_FLOAT, 1);\n\n\tPointAttribute.GPS_TIME = new PointAttribute(\n\t\t\"GPS_TIME\", PointAttributeTypes.DATA_TYPE_DOUBLE, 1);\n\n\tclass PointAttributes{\n\n\t\tconstructor(pointAttributes){\n\t\t\tthis.attributes = [];\n\t\t\tthis.byteSize = 0;\n\t\t\tthis.size = 0;\n\t\t\tthis.vectors = [];\n\n\t\t\tif (pointAttributes != null) {\n\t\t\t\tfor (let i = 0; i < pointAttributes.length; i++) {\n\t\t\t\t\tlet pointAttributeName = pointAttributes[i];\n\t\t\t\t\tlet pointAttribute = PointAttribute[pointAttributeName];\n\t\t\t\t\tthis.attributes.push(pointAttribute);\n\t\t\t\t\tthis.byteSize += pointAttribute.byteSize;\n\t\t\t\t\tthis.size++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t\tadd(pointAttribute){\n\t\t\tthis.attributes.push(pointAttribute);\n\t\t\tthis.byteSize += pointAttribute.byteSize;\n\t\t\tthis.size++;\n\t\t};\n\n\t\taddVector(vector){\n\t\t\tthis.vectors.push(vector);\n\t\t}\n\n\t\thasNormals(){\n\t\t\tfor (let name in this.attributes) {\n\t\t\t\tlet pointAttribute = this.attributes[name];\n\t\t\t\tif (\n\t\t\t\t\tpointAttribute === PointAttribute.NORMAL_SPHEREMAPPED ||\n\t\t\t\t\tpointAttribute === PointAttribute.NORMAL_FLOATS ||\n\t\t\t\t\tpointAttribute === PointAttribute.NORMAL ||\n\t\t\t\t\tpointAttribute === PointAttribute.NORMAL_OCT16) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\n\t}\n\n\tclass U {\n\t\tstatic toVector3(v, offset) {\n\t\t\treturn new Vector3().fromArray(v, offset || 0);\n\t\t}\n\n\t\tstatic toBox3(b) {\n\t\t\treturn new Box3(U.toVector3(b), U.toVector3(b, 3));\n\t\t};\n\n\t\tstatic findDim(schema, name) {\n\t\t\tvar dim = schema.find((dim) => dim.name == name);\n\t\t\tif (!dim) throw new Error('Failed to find ' + name + ' in schema');\n\t\t\treturn dim;\n\t\t}\n\n\t\tstatic sphereFrom(b) {\n\t\t\treturn b.getBoundingSphere(new Sphere());\n\t\t}\n\t};\n\n\tclass PointCloudEptGeometry {\n\t\tconstructor(url, info) {\n\t\t\tlet version = info.version;\n\t\t\tlet schema = info.schema;\n\t\t\tlet bounds = info.bounds;\n\t\t\tlet boundsConforming = info.boundsConforming;\n\n\t\t\tlet xyz = [\n\t\t\t\tU.findDim(schema, 'X'),\n\t\t\t\tU.findDim(schema, 'Y'),\n\t\t\t\tU.findDim(schema, 'Z')\n\t\t\t];\n\t\t\tlet scale = xyz.map((d) => d.scale || 1);\n\t\t\tlet offset = xyz.map((d) => d.offset || 0);\n\t\t\tthis.eptScale = U.toVector3(scale);\n\t\t\tthis.eptOffset = U.toVector3(offset);\n\n\t\t\tthis.url = url;\n\t\t\tthis.info = info;\n\t\t\tthis.type = 'ept';\n\n\t\t\tthis.schema = schema;\n\t\t\tthis.span = info.span || info.ticks;\n\t\t\tthis.boundingBox = U.toBox3(bounds);\n\t\t\tthis.tightBoundingBox = U.toBox3(boundsConforming);\n\t\t\tthis.offset = U.toVector3([0, 0, 0]);\n\t\t\tthis.boundingSphere = U.sphereFrom(this.boundingBox);\n\t\t\tthis.tightBoundingSphere = U.sphereFrom(this.tightBoundingBox);\n\t\t\tthis.version = new Potree.Version('1.7');\n\n\t\t\tthis.projection = null;\n\t\t\tthis.fallbackProjection = null;\n\n\t\t\tif (info.srs && info.srs.horizontal) {\n\t\t\t\tthis.projection = info.srs.authority + ':' + info.srs.horizontal;\n\t\t\t}\n\n\t\t\tif (info.srs && info.srs.wkt) {\n\t\t\t\tif (!this.projection) this.projection = info.srs.wkt;\n\t\t\t\telse this.fallbackProjection = info.srs.wkt;\n\t\t\t}\n\n\t\t\t{ \n\t\t\t\t// TODO [mschuetz]: named projections that proj4 can't handle seem to cause problems.\n\t\t\t\t// remove them for now\n\n\t\t\t\ttry{\n\t\t\t\t\tproj4(this.projection);\n\t\t\t\t}catch(e){\n\t\t\t\t\tthis.projection = null;\n\t\t\t\t}\n\n\t\t\t\n\n\t\t\t}\n\n\t\t\t\n\t\t\t{\n\t\t\t\tconst attributes = new PointAttributes();\n\n\t\t\t\tattributes.add(PointAttribute.POSITION_CARTESIAN);\n\t\t\t\tattributes.add(new PointAttribute(\"rgba\", PointAttributeTypes.DATA_TYPE_UINT8, 4));\n\t\t\t\tattributes.add(new PointAttribute(\"intensity\", PointAttributeTypes.DATA_TYPE_UINT16, 1));\n\t\t\t\tattributes.add(new PointAttribute(\"classification\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\t\t\tattributes.add(new PointAttribute(\"gps-time\", PointAttributeTypes.DATA_TYPE_DOUBLE, 1));\n\t\t\t\tattributes.add(new PointAttribute(\"returnNumber\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\t\t\tattributes.add(new PointAttribute(\"number of returns\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\t\t\tattributes.add(new PointAttribute(\"return number\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\t\t\tattributes.add(new PointAttribute(\"source id\", PointAttributeTypes.DATA_TYPE_UINT16, 1));\n\n\t\t\t\tthis.pointAttributes = attributes;\n\t\t\t}\n\n\n\n\t\t\tthis.spacing =\n\t\t\t\t(this.boundingBox.max.x - this.boundingBox.min.x) / this.span;\n\n\t\t\tlet hierarchyType = info.hierarchyType || 'json';\n\n\t\t\tconst dataType = info.dataType;\n\t\t\tif (dataType == 'laszip') {\n\t\t\t\tthis.loader = new Potree.EptLaszipLoader();\n\t\t\t}\n\t\t\telse if (dataType == 'binary') {\n\t\t\t\tthis.loader = new Potree.EptBinaryLoader();\n\t\t\t}\n\t\t\telse if (dataType == 'zstandard') {\n\t\t\t\tthis.loader = new Potree.EptZstandardLoader();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error('Could not read data type: ' + dataType);\n\t\t\t}\n\t\t}\n\t};\n\n\tclass EptKey {\n\t\tconstructor(ept, b, d, x, y, z) {\n\t\t\tthis.ept = ept;\n\t\t\tthis.b = b;\n\t\t\tthis.d = d;\n\t\t\tthis.x = x || 0;\n\t\t\tthis.y = y || 0;\n\t\t\tthis.z = z || 0;\n\t\t}\n\n\t\tname() {\n\t\t\treturn this.d + '-' + this.x + '-' + this.y + '-' + this.z;\n\t\t}\n\n\t\tstep(a, b, c) {\n\t\t\tlet min = this.b.min.clone();\n\t\t\tlet max = this.b.max.clone();\n\t\t\tlet dst = new Vector3().subVectors(max, min);\n\n\t\t\tif (a)\tmin.x += dst.x / 2;\n\t\t\telse\tmax.x -= dst.x / 2;\n\n\t\t\tif (b)\tmin.y += dst.y / 2;\n\t\t\telse\tmax.y -= dst.y / 2;\n\n\t\t\tif (c)\tmin.z += dst.z / 2;\n\t\t\telse\tmax.z -= dst.z / 2;\n\n\t\t\treturn new Potree.EptKey(\n\t\t\t\t\tthis.ept,\n\t\t\t\t\tnew Box3(min, max),\n\t\t\t\t\tthis.d + 1,\n\t\t\t\t\tthis.x * 2 + a,\n\t\t\t\t\tthis.y * 2 + b,\n\t\t\t\t\tthis.z * 2 + c);\n\t\t}\n\n\t\tchildren() {\n\t\t\tvar result = [];\n\t\t\tfor (var a = 0; a < 2; ++a) {\n\t\t\t\tfor (var b = 0; b < 2; ++b) {\n\t\t\t\t\tfor (var c = 0; c < 2; ++c) {\n\t\t\t\t\t\tvar add = this.step(a, b, c).name();\n\t\t\t\t\t\tif (!result.includes(add)) result = result.concat(add);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tclass PointCloudEptGeometryNode extends PointCloudTreeNode {\n\t\tconstructor(ept, b, d, x, y, z) {\n\t\t\tsuper();\n\n\t\t\tthis.ept = ept;\n\t\t\tthis.key = new Potree.EptKey(\n\t\t\t\t\tthis.ept,\n\t\t\t\t\tb || this.ept.boundingBox,\n\t\t\t\t\td || 0,\n\t\t\t\t\tx,\n\t\t\t\t\ty,\n\t\t\t\t\tz);\n\n\t\t\tthis.id = PointCloudEptGeometryNode.IDCount++;\n\t\t\tthis.geometry = null;\n\t\t\tthis.boundingBox = this.key.b;\n\t\t\tthis.tightBoundingBox = this.boundingBox;\n\t\t\tthis.spacing = this.ept.spacing / Math.pow(2, this.key.d);\n\t\t\tthis.boundingSphere = U.sphereFrom(this.boundingBox);\n\n\t\t\t// These are set during hierarchy loading.\n\t\t\tthis.hasChildren = false;\n\t\t\tthis.children = { };\n\t\t\tthis.numPoints = -1;\n\n\t\t\tthis.level = this.key.d;\n\t\t\tthis.loaded = false;\n\t\t\tthis.loading = false;\n\t\t\tthis.oneTimeDisposeHandlers = [];\n\n\t\t\tlet k = this.key;\n\t\t\tthis.name = this.toPotreeName(k.d, k.x, k.y, k.z);\n\t\t\tthis.index = parseInt(this.name.charAt(this.name.length - 1));\n\t\t}\n\n\t\tisGeometryNode() { return true; }\n\t\tgetLevel() { return this.level; }\n\t\tisTreeNode() { return false; }\n\t\tisLoaded() { return this.loaded; }\n\t\tgetBoundingSphere() { return this.boundingSphere; }\n\t\tgetBoundingBox() { return this.boundingBox; }\n\t\turl() { return this.ept.url + 'ept-data/' + this.filename(); }\n\t\tgetNumPoints() { return this.numPoints; }\n\n\t\tfilename() { return this.key.name(); }\n\n\t\tgetChildren() {\n\t\t\tlet children = [];\n\n\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\tif (this.children[i]) {\n\t\t\t\t\tchildren.push(this.children[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn children;\n\t\t}\n\n\t\taddChild(child) {\n\t\t\tthis.children[child.index] = child;\n\t\t\tchild.parent = this;\n\t\t}\n\n\t\tload() {\n\t\t\tif (this.loaded || this.loading) return;\n\t\t\tif (Potree.numNodesLoading >= Potree.maxNodesLoading) return;\n\n\t\t\tthis.loading = true;\n\t\t\t++Potree.numNodesLoading;\n\n\t\t\tif (this.numPoints == -1) this.loadHierarchy();\n\t\t\tthis.loadPoints();\n\t\t}\n\n\t\tloadPoints(){\n\t\t\tthis.ept.loader.load(this);\n\t\t}\n\n\t\tasync loadHierarchy() {\n\t\t\tlet nodes = { };\n\t\t\tnodes[this.filename()] = this;\n\t\t\tthis.hasChildren = false;\n\n\t\t\tlet eptHierarchyFile =\n\t\t\t\t`${this.ept.url}ept-hierarchy/${this.filename()}.json`;\n\n\t\t\tlet response = await fetch(eptHierarchyFile);\n\t\t\tlet hier = await response.json();\n\n\t\t\t// Since we want to traverse top-down, and 10 comes\n\t\t\t// lexicographically before 9 (for example), do a deep sort.\n\t\t\tvar keys = Object.keys(hier).sort((a, b) => {\n\t\t\t\tlet [da, xa, ya, za] = a.split('-').map((n) => parseInt(n, 10));\n\t\t\t\tlet [db, xb, yb, zb] = b.split('-').map((n) => parseInt(n, 10));\n\t\t\t\tif (da < db) return -1; if (da > db) return 1;\n\t\t\t\tif (xa < xb) return -1; if (xa > xb) return 1;\n\t\t\t\tif (ya < yb) return -1; if (ya > yb) return 1;\n\t\t\t\tif (za < zb) return -1; if (za > zb) return 1;\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t\tkeys.forEach((v) => {\n\t\t\t\tlet [d, x, y, z] = v.split('-').map((n) => parseInt(n, 10));\n\t\t\t\tlet a = x & 1, b = y & 1, c = z & 1;\n\t\t\t\tlet parentName =\n\t\t\t\t\t(d - 1) + '-' + (x >> 1) + '-' + (y >> 1) + '-' + (z >> 1);\n\n\t\t\t\tlet parentNode = nodes[parentName];\n\t\t\t\tif (!parentNode) return;\n\t\t\t\tparentNode.hasChildren = true;\n\n\t\t\t\tlet key = parentNode.key.step(a, b, c);\n\n\t\t\t\tlet node = new Potree.PointCloudEptGeometryNode(\n\t\t\t\t\t\tthis.ept,\n\t\t\t\t\t\tkey.b,\n\t\t\t\t\t\tkey.d,\n\t\t\t\t\t\tkey.x,\n\t\t\t\t\t\tkey.y,\n\t\t\t\t\t\tkey.z);\n\n\t\t\t\tnode.level = d;\n\t\t\t\tnode.numPoints = hier[v];\n\n\t\t\t\tparentNode.addChild(node);\n\t\t\t\tnodes[key.name()] = node;\n\t\t\t});\n\t\t}\n\n\t\tdoneLoading(bufferGeometry, tightBoundingBox, np, mean) {\n\t\t\tbufferGeometry.boundingBox = this.boundingBox;\n\t\t\tthis.geometry = bufferGeometry;\n\t\t\tthis.tightBoundingBox = tightBoundingBox;\n\t\t\tthis.numPoints = np;\n\t\t\tthis.mean = mean;\n\t\t\tthis.loaded = true;\n\t\t\tthis.loading = false;\n\t\t\t--Potree.numNodesLoading;\n\t\t}\n\n\t\ttoPotreeName(d, x, y, z) {\n\t\t\tvar name = 'r';\n\n\t\t\tfor (var i = 0; i < d; ++i) {\n\t\t\t\tvar shift = d - i - 1;\n\t\t\t\tvar mask = 1 << shift;\n\t\t\t\tvar step = 0;\n\n\t\t\t\tif (x & mask) step += 4;\n\t\t\t\tif (y & mask) step += 2;\n\t\t\t\tif (z & mask) step += 1;\n\n\t\t\t\tname += step;\n\t\t\t}\n\n\t\t\treturn name;\n\t\t}\n\n\t\tdispose() {\n\t\t\tif (this.geometry && this.parent != null) {\n\t\t\t\tthis.geometry.dispose();\n\t\t\t\tthis.geometry = null;\n\t\t\t\tthis.loaded = false;\n\n\t\t\t\t// this.dispatchEvent( { type: 'dispose' } );\n\t\t\t\tfor (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {\n\t\t\t\t\tlet handler = this.oneTimeDisposeHandlers[i];\n\t\t\t\t\thandler();\n\t\t\t\t}\n\t\t\t\tthis.oneTimeDisposeHandlers = [];\n\t\t\t}\n\t\t}\n\t}\n\n\tPointCloudEptGeometryNode.IDCount = 0;\n\n\tclass PointCloudOctreeGeometry{\n\n\t\tconstructor(){\n\t\t\tthis.url = null;\n\t\t\tthis.octreeDir = null;\n\t\t\tthis.spacing = 0;\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.root = null;\n\t\t\tthis.nodes = null;\n\t\t\tthis.pointAttributes = null;\n\t\t\tthis.hierarchyStepSize = -1;\n\t\t\tthis.loader = null;\n\t\t}\n\t\t\n\t}\n\n\tclass PointCloudOctreeGeometryNode extends PointCloudTreeNode{\n\n\t\tconstructor(name, pcoGeometry, boundingBox){\n\t\t\tsuper();\n\n\t\t\tthis.id = PointCloudOctreeGeometryNode.IDCount++;\n\t\t\tthis.name = name;\n\t\t\tthis.index = parseInt(name.charAt(name.length - 1));\n\t\t\tthis.pcoGeometry = pcoGeometry;\n\t\t\tthis.geometry = null;\n\t\t\tthis.boundingBox = boundingBox;\n\t\t\tthis.boundingSphere = boundingBox.getBoundingSphere(new Sphere());\n\t\t\tthis.children = {};\n\t\t\tthis.numPoints = 0;\n\t\t\tthis.level = null;\n\t\t\tthis.loaded = false;\n\t\t\tthis.oneTimeDisposeHandlers = [];\n\t\t}\n\n\t\tisGeometryNode(){\n\t\t\treturn true;\n\t\t}\n\n\t\tgetLevel(){\n\t\t\treturn this.level;\n\t\t}\n\n\t\tisTreeNode(){\n\t\t\treturn false;\n\t\t}\n\n\t\tisLoaded(){\n\t\t\treturn this.loaded;\n\t\t}\n\n\t\tgetBoundingSphere(){\n\t\t\treturn this.boundingSphere;\n\t\t}\n\n\t\tgetBoundingBox(){\n\t\t\treturn this.boundingBox;\n\t\t}\n\n\t\tgetChildren(){\n\t\t\tlet children = [];\n\n\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\tif (this.children[i]) {\n\t\t\t\t\tchildren.push(this.children[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn children;\n\t\t}\n\n\t\tgetBoundingBox(){\n\t\t\treturn this.boundingBox;\n\t\t}\n\n\t\tgetURL(){\n\t\t\tlet url = '';\n\n\t\t\tlet version = this.pcoGeometry.loader.version;\n\n\t\t\tif (version.equalOrHigher('1.5')) {\n\t\t\t\turl = this.pcoGeometry.octreeDir + '/' + this.getHierarchyPath() + '/' + this.name;\n\t\t\t} else if (version.equalOrHigher('1.4')) {\n\t\t\t\turl = this.pcoGeometry.octreeDir + '/' + this.name;\n\t\t\t} else if (version.upTo('1.3')) {\n\t\t\t\turl = this.pcoGeometry.octreeDir + '/' + this.name;\n\t\t\t}\n\n\t\t\treturn url;\n\t\t}\n\n\t\tgetHierarchyPath(){\n\t\t\tlet path = 'r/';\n\n\t\t\tlet hierarchyStepSize = this.pcoGeometry.hierarchyStepSize;\n\t\t\tlet indices = this.name.substr(1);\n\n\t\t\tlet numParts = Math.floor(indices.length / hierarchyStepSize);\n\t\t\tfor (let i = 0; i < numParts; i++) {\n\t\t\t\tpath += indices.substr(i * hierarchyStepSize, hierarchyStepSize) + '/';\n\t\t\t}\n\n\t\t\tpath = path.slice(0, -1);\n\n\t\t\treturn path;\n\t\t}\n\n\t\taddChild(child) {\n\t\t\tthis.children[child.index] = child;\n\t\t\tchild.parent = this;\n\t\t}\n\n\t\tload(){\n\t\t\tif (this.loading === true || this.loaded === true || Potree.numNodesLoading >= Potree.maxNodesLoading) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.loading = true;\n\n\t\t\tPotree.numNodesLoading++;\n\n\t\t\tif (this.pcoGeometry.loader.version.equalOrHigher('1.5')) {\n\t\t\t\tif ((this.level % this.pcoGeometry.hierarchyStepSize) === 0 && this.hasChildren) {\n\t\t\t\t\tthis.loadHierachyThenPoints();\n\t\t\t\t} else {\n\t\t\t\t\tthis.loadPoints();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.loadPoints();\n\t\t\t}\n\t\t}\n\n\t\tloadPoints(){\n\t\t\tthis.pcoGeometry.loader.load(this);\n\t\t}\n\n\t\tloadHierachyThenPoints(){\n\t\t\tlet node = this;\n\n\t\t\t// load hierarchy\n\t\t\tlet callback = function (node, hbuffer) {\n\n\t\t\t\tlet tStart = performance.now();\n\n\t\t\t\tlet view = new DataView(hbuffer);\n\n\t\t\t\tlet stack = [];\n\t\t\t\tlet children = view.getUint8(0);\n\t\t\t\tlet numPoints = view.getUint32(1, true);\n\t\t\t\tnode.numPoints = numPoints;\n\t\t\t\tstack.push({children: children, numPoints: numPoints, name: node.name});\n\n\t\t\t\tlet decoded = [];\n\n\t\t\t\tlet offset = 5;\n\t\t\t\twhile (stack.length > 0) {\n\t\t\t\t\tlet snode = stack.shift();\n\t\t\t\t\tlet mask = 1;\n\t\t\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\t\t\tif ((snode.children & mask) !== 0) {\n\t\t\t\t\t\t\tlet childName = snode.name + i;\n\n\t\t\t\t\t\t\tlet childChildren = view.getUint8(offset);\n\t\t\t\t\t\t\tlet childNumPoints = view.getUint32(offset + 1, true);\n\n\t\t\t\t\t\t\tstack.push({children: childChildren, numPoints: childNumPoints, name: childName});\n\n\t\t\t\t\t\t\tdecoded.push({children: childChildren, numPoints: childNumPoints, name: childName});\n\n\t\t\t\t\t\t\toffset += 5;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmask = mask * 2;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (offset === hbuffer.byteLength) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// console.log(decoded);\n\n\t\t\t\tlet nodes = {};\n\t\t\t\tnodes[node.name] = node;\n\t\t\t\tlet pco = node.pcoGeometry;\n\n\t\t\t\tfor (let i = 0; i < decoded.length; i++) {\n\t\t\t\t\tlet name = decoded[i].name;\n\t\t\t\t\tlet decodedNumPoints = decoded[i].numPoints;\n\t\t\t\t\tlet index = parseInt(name.charAt(name.length - 1));\n\t\t\t\t\tlet parentName = name.substring(0, name.length - 1);\n\t\t\t\t\tlet parentNode = nodes[parentName];\n\t\t\t\t\tlet level = name.length - 1;\n\t\t\t\t\tlet boundingBox = Utils.createChildAABB(parentNode.boundingBox, index);\n\n\t\t\t\t\tlet currentNode = new PointCloudOctreeGeometryNode(name, pco, boundingBox);\n\t\t\t\t\tcurrentNode.level = level;\n\t\t\t\t\tcurrentNode.numPoints = decodedNumPoints;\n\t\t\t\t\tcurrentNode.hasChildren = decoded[i].children > 0;\n\t\t\t\t\tcurrentNode.spacing = pco.spacing / Math.pow(2, level);\n\t\t\t\t\tparentNode.addChild(currentNode);\n\t\t\t\t\tnodes[name] = currentNode;\n\t\t\t\t}\n\n\t\t\t\tlet duration = performance.now() - tStart;\n\t\t\t\tif(duration > 5){\n\t\t\t\t\tlet msg = `duration: ${duration}ms, numNodes: ${decoded.length}`;\n\t\t\t\t\tconsole.log(msg);\n\t\t\t\t}\n\n\t\t\t\tnode.loadPoints();\n\t\t\t};\n\t\t\tif ((node.level % node.pcoGeometry.hierarchyStepSize) === 0) {\n\t\t\t\t// let hurl = node.pcoGeometry.octreeDir + \"/../hierarchy/\" + node.name + \".hrc\";\n\t\t\t\tlet hurl = node.pcoGeometry.octreeDir + '/' + node.getHierarchyPath() + '/' + node.name + '.hrc';\n\n\t\t\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\t\t\txhr.open('GET', hurl, true);\n\t\t\t\txhr.responseType = 'arraybuffer';\n\t\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\t\t\txhr.onreadystatechange = () => {\n\t\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\t\tif (xhr.status === 200 || xhr.status === 0) {\n\t\t\t\t\t\t\tlet hbuffer = xhr.response;\n\t\t\t\t\t\t\tcallback(node, hbuffer);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + hurl);\n\t\t\t\t\t\t\tPotree.numNodesLoading--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\ttry {\n\t\t\t\t\txhr.send(null);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.log('fehler beim laden der punktwolke: ' + e);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tgetNumPoints(){\n\t\t\treturn this.numPoints;\n\t\t}\n\n\t\tdispose(){\n\t\t\tif (this.geometry && this.parent != null) {\n\t\t\t\tthis.geometry.dispose();\n\t\t\t\tthis.geometry = null;\n\t\t\t\tthis.loaded = false;\n\n\t\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {\n\t\t\t\t\tlet handler = this.oneTimeDisposeHandlers[i];\n\t\t\t\t\thandler();\n\t\t\t\t}\n\t\t\t\tthis.oneTimeDisposeHandlers = [];\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\tPointCloudOctreeGeometryNode.IDCount = 0;\n\n\t// -------------------------------------------\n\t// to get a ready to use gradient array from a chroma.js gradient:\n\t// http://gka.github.io/chroma.js/\n\t// -------------------------------------------\n\t//\n\t// let stops = [];\n\t// for(let i = 0; i <= 10; i++){\n\t//\tlet range = chroma.scale(['yellow', 'navy']).mode('lch').domain([10,0])(i)._rgb\n\t//\t\t.slice(0, 3)\n\t//\t\t.map(v => (v / 255).toFixed(4))\n\t//\t\t.join(\", \");\n\t//\n\t//\tlet line = `[${i / 10}, new THREE.Color(${range})],`;\n\t//\n\t//\tstops.push(line);\n\t// }\n\t// stops.join(\"\\n\");\n\t//\n\t//\n\t//\n\t// -------------------------------------------\n\t// to get a ready to use gradient array from matplotlib:\n\t// -------------------------------------------\n\t// import matplotlib.pyplot as plt\n\t// import matplotlib.colors as colors\n\t//\n\t// norm = colors.Normalize(vmin=0,vmax=1)\n\t// cmap = plt.cm.viridis\n\t//\n\t// for i in range(0,11):\n\t//\tu = i / 10\n\t//\trgb = cmap(norm(u))[0:3]\n\t//\trgb = [\"{0:.3f}\".format(v) for v in rgb]\n\t//\trgb = \"[\" + str(u) + \", new THREE.Color(\" +  \", \".join(rgb) + \")],\"\n\t//\tprint(rgb)\n\n\tlet Gradients = {\n\t\t// From chroma spectral http://gka.github.io/chroma.js/\n\t\tSPECTRAL: [\n\t\t\t[0, new Color(0.3686, 0.3098, 0.6353)],\n\t\t\t[0.1, new Color(0.1961, 0.5333, 0.7412)],\n\t\t\t[0.2, new Color(0.4000, 0.7608, 0.6471)],\n\t\t\t[0.3, new Color(0.6706, 0.8667, 0.6431)],\n\t\t\t[0.4, new Color(0.9020, 0.9608, 0.5961)],\n\t\t\t[0.5, new Color(1.0000, 1.0000, 0.7490)],\n\t\t\t[0.6, new Color(0.9961, 0.8784, 0.5451)],\n\t\t\t[0.7, new Color(0.9922, 0.6824, 0.3804)],\n\t\t\t[0.8, new Color(0.9569, 0.4275, 0.2627)],\n\t\t\t[0.9, new Color(0.8353, 0.2431, 0.3098)],\n\t\t\t[1, new Color(0.6196, 0.0039, 0.2588)]\n\t\t],\n\t\tPLASMA: [\n\t\t\t[0.0, new Color(0.241, 0.015, 0.610)],\n\t\t\t[0.1, new Color(0.387, 0.001, 0.654)],\n\t\t\t[0.2, new Color(0.524, 0.025, 0.653)],\n\t\t\t[0.3, new Color(0.651, 0.125, 0.596)],\n\t\t\t[0.4, new Color(0.752, 0.227, 0.513)],\n\t\t\t[0.5, new Color(0.837, 0.329, 0.431)],\n\t\t\t[0.6, new Color(0.907, 0.435, 0.353)],\n\t\t\t[0.7, new Color(0.963, 0.554, 0.272)],\n\t\t\t[0.8, new Color(0.992, 0.681, 0.195)],\n\t\t\t[0.9, new Color(0.987, 0.822, 0.144)],\n\t\t\t[1.0, new Color(0.940, 0.975, 0.131)]\n\t\t],\n\t\tYELLOW_GREEN: [\n\t\t\t[0, new Color(0.1647, 0.2824, 0.3451)],\n\t\t\t[0.1, new Color(0.1338, 0.3555, 0.4227)],\n\t\t\t[0.2, new Color(0.0610, 0.4319, 0.4864)],\n\t\t\t[0.3, new Color(0.0000, 0.5099, 0.5319)],\n\t\t\t[0.4, new Color(0.0000, 0.5881, 0.5569)],\n\t\t\t[0.5, new Color(0.1370, 0.6650, 0.5614)],\n\t\t\t[0.6, new Color(0.2906, 0.7395, 0.5477)],\n\t\t\t[0.7, new Color(0.4453, 0.8099, 0.5201)],\n\t\t\t[0.8, new Color(0.6102, 0.8748, 0.4850)],\n\t\t\t[0.9, new Color(0.7883, 0.9323, 0.4514)],\n\t\t\t[1, new Color(0.9804, 0.9804, 0.4314)]\n\t\t],\n\t\tVIRIDIS: [\n\t\t\t[0.0, new Color(0.267, 0.005, 0.329)],\n\t\t\t[0.1, new Color(0.283, 0.141, 0.458)],\n\t\t\t[0.2, new Color(0.254, 0.265, 0.530)],\n\t\t\t[0.3, new Color(0.207, 0.372, 0.553)],\n\t\t\t[0.4, new Color(0.164, 0.471, 0.558)],\n\t\t\t[0.5, new Color(0.128, 0.567, 0.551)],\n\t\t\t[0.6, new Color(0.135, 0.659, 0.518)],\n\t\t\t[0.7, new Color(0.267, 0.749, 0.441)],\n\t\t\t[0.8, new Color(0.478, 0.821, 0.318)],\n\t\t\t[0.9, new Color(0.741, 0.873, 0.150)],\n\t\t\t[1.0, new Color(0.993, 0.906, 0.144)]\n\t\t],\n\t\tINFERNO: [\n\t\t\t[0.0, new Color(0.077, 0.042, 0.206)],\n\t\t\t[0.1, new Color(0.225, 0.036, 0.388)],\n\t\t\t[0.2, new Color(0.373, 0.074, 0.432)],\n\t\t\t[0.3, new Color(0.522, 0.128, 0.420)],\n\t\t\t[0.4, new Color(0.665, 0.182, 0.370)],\n\t\t\t[0.5, new Color(0.797, 0.255, 0.287)],\n\t\t\t[0.6, new Color(0.902, 0.364, 0.184)],\n\t\t\t[0.7, new Color(0.969, 0.516, 0.063)],\n\t\t\t[0.8, new Color(0.988, 0.683, 0.072)],\n\t\t\t[0.9, new Color(0.961, 0.859, 0.298)],\n\t\t\t[1.0, new Color(0.988, 0.998, 0.645)]\n\t\t],\n\t\tGRAYSCALE: [\n\t\t\t[0, new Color(0, 0, 0)],\n\t\t\t[1, new Color(1, 1, 1)]\n\t\t],\n\t\t// 16 samples of the TURBU color scheme\n\t\t// values taken from: https://gist.github.com/mikhailov-work/ee72ba4191942acecc03fe6da94fc73f\n\t\t// original file licensed under Apache-2.0\n\t\tTURBO: [\n\t\t\t[0.00, new Color(0.18995, 0.07176, 0.23217)],\n\t\t\t[0.07, new Color(0.25107, 0.25237, 0.63374)],\n\t\t\t[0.13, new Color(0.27628, 0.42118, 0.89123)],\n\t\t\t[0.20, new Color(0.25862, 0.57958, 0.99876)],\n\t\t\t[0.27, new Color(0.15844, 0.73551, 0.92305)],\n\t\t\t[0.33, new Color(0.09267, 0.86554, 0.7623)],\n\t\t\t[0.40, new Color(0.19659, 0.94901, 0.59466)],\n\t\t\t[0.47, new Color(0.42778, 0.99419, 0.38575)],\n\t\t\t[0.53, new Color(0.64362, 0.98999, 0.23356)],\n\t\t\t[0.60, new Color(0.80473, 0.92452, 0.20459)],\n\t\t\t[0.67, new Color(0.93301, 0.81236, 0.22667)],\n\t\t\t[0.73, new Color(0.99314, 0.67408, 0.20348)],\n\t\t\t[0.80, new Color(0.9836, 0.49291, 0.12849)],\n\t\t\t[0.87, new Color(0.92105, 0.31489, 0.05475)],\n\t\t\t[0.93, new Color(0.81608, 0.18462, 0.01809)],\n\t\t\t[1.00, new Color(0.66449, 0.08436, 0.00424)],\n\t\t],\n\t\tRAINBOW: [\n\t\t\t[0, new Color(0.278, 0, 0.714)],\n\t\t\t[1 / 6, new Color(0, 0, 1)],\n\t\t\t[2 / 6, new Color(0, 1, 1)],\n\t\t\t[3 / 6, new Color(0, 1, 0)],\n\t\t\t[4 / 6, new Color(1, 1, 0)],\n\t\t\t[5 / 6, new Color(1, 0.64, 0)],\n\t\t\t[1, new Color(1, 0, 0)]\n\t\t],\n\t\tCONTOUR: [\n\t\t\t[0.00, new Color(0, 0, 0)],\n\t\t\t[0.03, new Color(0, 0, 0)],\n\t\t\t[0.04, new Color(1, 1, 1)],\n\t\t\t[1.00, new Color(1, 1, 1)]\n\t\t],\n\t};\n\n\tlet Shaders = {};\n\n\tShaders[\"pointcloud.vs\"] = `\nprecision highp float;\nprecision highp int;\n\n#define max_clip_polygons 8\n#define PI 3.141592653589793\n\nattribute vec3 position;\nattribute vec3 color;\nattribute float intensity;\nattribute float classification;\nattribute float returnNumber;\nattribute float numberOfReturns;\nattribute float pointSourceID;\nattribute vec4 indices;\nattribute float spacing;\nattribute float gpsTime;\nattribute vec3 normal;\nattribute float aExtra;\n\nuniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat4 uViewInv;\n\nuniform float uScreenWidth;\nuniform float uScreenHeight;\nuniform float fov;\nuniform float near;\nuniform float far;\n\nuniform bool uDebug;\n\nuniform bool uUseOrthographicCamera;\nuniform float uOrthoWidth;\nuniform float uOrthoHeight;\n\n#define CLIPTASK_NONE 0\n#define CLIPTASK_HIGHLIGHT 1\n#define CLIPTASK_SHOW_INSIDE 2\n#define CLIPTASK_SHOW_OUTSIDE 3\n\n#define CLIPMETHOD_INSIDE_ANY 0\n#define CLIPMETHOD_INSIDE_ALL 1\n\nuniform int clipTask;\nuniform int clipMethod;\n#if defined(num_clipboxes) && num_clipboxes > 0\n\tuniform mat4 clipBoxes[num_clipboxes];\n#endif\n\n#if defined(num_clipspheres) && num_clipspheres > 0\n\tuniform mat4 uClipSpheres[num_clipspheres];\n#endif\n\n#if defined(num_clippolygons) && num_clippolygons > 0\n\tuniform int uClipPolygonVCount[num_clippolygons];\n\tuniform vec3 uClipPolygonVertices[num_clippolygons * 8];\n\tuniform mat4 uClipPolygonWVP[num_clippolygons];\n#endif\n\n\nuniform float size;\nuniform float minSize;\nuniform float maxSize;\n\nuniform float uPCIndex;\nuniform float uOctreeSpacing;\nuniform float uNodeSpacing;\nuniform float uOctreeSize;\nuniform vec3 uBBSize;\nuniform float uLevel;\nuniform float uVNStart;\nuniform bool uIsLeafNode;\n\nuniform vec3 uColor;\nuniform float uOpacity;\n\nuniform vec2 elevationRange;\nuniform vec2 intensityRange;\n\nuniform vec2 uFilterReturnNumberRange;\nuniform vec2 uFilterNumberOfReturnsRange;\nuniform vec2 uFilterPointSourceIDClipRange;\nuniform vec2 uFilterGPSTimeClipRange;\nuniform float uGpsScale;\nuniform float uGpsOffset;\n\nuniform vec2 uNormalizedGpsBufferRange;\n\nuniform vec3 uIntensity_gbc;\nuniform vec3 uRGB_gbc;\nuniform vec3 uExtra_gbc;\n\nuniform float uTransition;\nuniform float wRGB;\nuniform float wIntensity;\nuniform float wElevation;\nuniform float wClassification;\nuniform float wReturnNumber;\nuniform float wSourceID;\n\nuniform vec2 uExtraNormalizedRange;\nuniform vec2 uExtraRange;\nuniform float uExtraScale;\nuniform float uExtraOffset;\n\nuniform vec3 uShadowColor;\n\nuniform sampler2D visibleNodes;\nuniform sampler2D gradient;\nuniform sampler2D classificationLUT;\n\n#if defined(color_type_matcap)\nuniform sampler2D matcapTextureUniform;\n#endif\nuniform bool backfaceCulling;\n\n#if defined(num_shadowmaps) && num_shadowmaps > 0\nuniform sampler2D uShadowMap[num_shadowmaps];\nuniform mat4 uShadowWorldView[num_shadowmaps];\nuniform mat4 uShadowProj[num_shadowmaps];\n#endif\n\nvarying vec3\tvColor;\nvarying float\tvLogDepth;\nvarying vec3\tvViewPosition;\nvarying float \tvRadius;\nvarying float \tvPointSize;\n\n\nfloat round(float number){\n\treturn floor(number + 0.5);\n}\n\n// \n//    ###    ########     ###    ########  ######## #### ##     ## ########     ######  #### ######## ########  ######  \n//   ## ##   ##     ##   ## ##   ##     ##    ##     ##  ##     ## ##          ##    ##  ##       ##  ##       ##    ## \n//  ##   ##  ##     ##  ##   ##  ##     ##    ##     ##  ##     ## ##          ##        ##      ##   ##       ##       \n// ##     ## ##     ## ##     ## ########     ##     ##  ##     ## ######       ######   ##     ##    ######    ######  \n// ######### ##     ## ######### ##           ##     ##   ##   ##  ##                ##  ##    ##     ##             ## \n// ##     ## ##     ## ##     ## ##           ##     ##    ## ##   ##          ##    ##  ##   ##      ##       ##    ## \n// ##     ## ########  ##     ## ##           ##    ####    ###    ########     ######  #### ######## ########  ######  \n// \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\n\n// ---------------------\n// OCTREE\n// ---------------------\n\n#if (defined(adaptive_point_size) || defined(color_type_level_of_detail)) && defined(tree_type_octree)\n/**\n * number of 1-bits up to inclusive index position\n * number is treated as if it were an integer in the range 0-255\n *\n */\nint numberOfOnes(int number, int index){\n\tint numOnes = 0;\n\tint tmp = 128;\n\tfor(int i = 7; i >= 0; i--){\n\t\t\n\t\tif(number >= tmp){\n\t\t\tnumber = number - tmp;\n\n\t\t\tif(i <= index){\n\t\t\t\tnumOnes++;\n\t\t\t}\n\t\t}\n\t\t\n\t\ttmp = tmp / 2;\n\t}\n\n\treturn numOnes;\n}\n\n\n/**\n * checks whether the bit at index is 1\n * number is treated as if it were an integer in the range 0-255\n *\n */\nbool isBitSet(int number, int index){\n\n\t// weird multi else if due to lack of proper array, int and bitwise support in WebGL 1.0\n\tint powi = 1;\n\tif(index == 0){\n\t\tpowi = 1;\n\t}else if(index == 1){\n\t\tpowi = 2;\n\t}else if(index == 2){\n\t\tpowi = 4;\n\t}else if(index == 3){\n\t\tpowi = 8;\n\t}else if(index == 4){\n\t\tpowi = 16;\n\t}else if(index == 5){\n\t\tpowi = 32;\n\t}else if(index == 6){\n\t\tpowi = 64;\n\t}else if(index == 7){\n\t\tpowi = 128;\n\t}else{\n\t\treturn false;\n\t}\n\n\tint ndp = number / powi;\n\n\treturn mod(float(ndp), 2.0) != 0.0;\n}\n\n\n/**\n * find the LOD at the point position\n */\nfloat getLOD(){\n\t\n\tvec3 offset = vec3(0.0, 0.0, 0.0);\n\tint iOffset = int(uVNStart);\n\tfloat depth = uLevel;\n\tfor(float i = 0.0; i <= 30.0; i++){\n\t\tfloat nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0);\n\t\t\n\t\tvec3 index3d = (position-offset) / nodeSizeAtLevel;\n\t\tindex3d = floor(index3d + 0.5);\n\t\tint index = int(round(4.0 * index3d.x + 2.0 * index3d.y + index3d.z));\n\t\t\n\t\tvec4 value = texture2D(visibleNodes, vec2(float(iOffset) / 2048.0, 0.0));\n\t\tint mask = int(round(value.r * 255.0));\n\n\t\tif(isBitSet(mask, index)){\n\t\t\t// there are more visible child nodes at this position\n\t\t\tint advanceG = int(round(value.g * 255.0)) * 256;\n\t\t\tint advanceB = int(round(value.b * 255.0));\n\t\t\tint advanceChild = numberOfOnes(mask, index - 1);\n\t\t\tint advance = advanceG + advanceB + advanceChild;\n\n\t\t\tiOffset = iOffset + advance;\n\t\t\t\n\t\t\tdepth++;\n\t\t}else{\n\t\t\t// no more visible child nodes at this position\n\t\t\t//return value.a * 255.0;\n\n\t\t\tfloat lodOffset = (255.0 * value.a) / 10.0 - 10.0;\n\n\t\t\treturn depth  + lodOffset;\n\t\t}\n\t\t\n\t\toffset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d;\n\t}\n\t\t\n\treturn depth;\n}\n\nfloat getSpacing(){\n\tvec3 offset = vec3(0.0, 0.0, 0.0);\n\tint iOffset = int(uVNStart);\n\tfloat depth = uLevel;\n\tfloat spacing = uNodeSpacing;\n\tfor(float i = 0.0; i <= 30.0; i++){\n\t\tfloat nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0);\n\t\t\n\t\tvec3 index3d = (position-offset) / nodeSizeAtLevel;\n\t\tindex3d = floor(index3d + 0.5);\n\t\tint index = int(round(4.0 * index3d.x + 2.0 * index3d.y + index3d.z));\n\t\t\n\t\tvec4 value = texture2D(visibleNodes, vec2(float(iOffset) / 2048.0, 0.0));\n\t\tint mask = int(round(value.r * 255.0));\n\t\tfloat spacingFactor = value.a;\n\n\t\tif(i > 0.0){\n\t\t\tspacing = spacing / (255.0 * spacingFactor);\n\t\t}\n\t\t\n\n\t\tif(isBitSet(mask, index)){\n\t\t\t// there are more visible child nodes at this position\n\t\t\tint advanceG = int(round(value.g * 255.0)) * 256;\n\t\t\tint advanceB = int(round(value.b * 255.0));\n\t\t\tint advanceChild = numberOfOnes(mask, index - 1);\n\t\t\tint advance = advanceG + advanceB + advanceChild;\n\n\t\t\tiOffset = iOffset + advance;\n\n\t\t\t//spacing = spacing / (255.0 * spacingFactor);\n\t\t\t//spacing = spacing / 3.0;\n\t\t\t\n\t\t\tdepth++;\n\t\t}else{\n\t\t\t// no more visible child nodes at this position\n\t\t\treturn spacing;\n\t\t}\n\t\t\n\t\toffset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d;\n\t}\n\t\t\n\treturn spacing;\n}\n\nfloat getPointSizeAttenuation(){\n\treturn pow(2.0, getLOD());\n}\n\n\n#endif\n\n\n// ---------------------\n// KD-TREE\n// ---------------------\n\n#if (defined(adaptive_point_size) || defined(color_type_level_of_detail)) && defined(tree_type_kdtree)\n\nfloat getLOD(){\n\tvec3 offset = vec3(0.0, 0.0, 0.0);\n\tfloat iOffset = 0.0;\n\tfloat depth = 0.0;\n\t\t\n\t\t\n\tvec3 size = uBBSize;\t\n\tvec3 pos = position;\n\t\t\n\tfor(float i = 0.0; i <= 1000.0; i++){\n\t\t\n\t\tvec4 value = texture2D(visibleNodes, vec2(iOffset / 2048.0, 0.0));\n\t\t\n\t\tint children = int(value.r * 255.0);\n\t\tfloat next = value.g * 255.0;\n\t\tint split = int(value.b * 255.0);\n\t\t\n\t\tif(next == 0.0){\n\t\t \treturn depth;\n\t\t}\n\t\t\n\t\tvec3 splitv = vec3(0.0, 0.0, 0.0);\n\t\tif(split == 1){\n\t\t\tsplitv.x = 1.0;\n\t\t}else if(split == 2){\n\t\t \tsplitv.y = 1.0;\n\t\t}else if(split == 4){\n\t\t \tsplitv.z = 1.0;\n\t\t}\n\t\t\n\t\tiOffset = iOffset + next;\n\t\t\n\t\tfloat factor = length(pos * splitv / size);\n\t\tif(factor < 0.5){\n\t\t\t// left\n\t\tif(children == 0 || children == 2){\n\t\t\t\treturn depth;\n\t\t\t}\n\t\t}else{\n\t\t\t// right\n\t\t\tpos = pos - size * splitv * 0.5;\n\t\t\tif(children == 0 || children == 1){\n\t\t\t\treturn depth;\n\t\t\t}\n\t\t\tif(children == 3){\n\t\t\t\tiOffset = iOffset + 1.0;\n\t\t\t}\n\t\t}\n\t\tsize = size * ((1.0 - (splitv + 1.0) / 2.0) + 0.5);\n\t\t\n\t\tdepth++;\n\t}\n\t\t\n\t\t\n\treturn depth;\t\n}\n\nfloat getPointSizeAttenuation(){\n\treturn 0.5 * pow(1.3, getLOD());\n}\n\n#endif\n\n\n\n// \n//    ###    ######## ######## ########  #### ########  ##     ## ######## ########  ######  \n//   ## ##      ##       ##    ##     ##  ##  ##     ## ##     ##    ##    ##       ##    ## \n//  ##   ##     ##       ##    ##     ##  ##  ##     ## ##     ##    ##    ##       ##       \n// ##     ##    ##       ##    ########   ##  ########  ##     ##    ##    ######    ######  \n// #########    ##       ##    ##   ##    ##  ##     ## ##     ##    ##    ##             ## \n// ##     ##    ##       ##    ##    ##   ##  ##     ## ##     ##    ##    ##       ##    ## \n// ##     ##    ##       ##    ##     ## #### ########   #######     ##    ########  ######                                                                               \n// \n\n\n\n// formula adapted from: http://www.dfstudios.co.uk/articles/programming/image-programming-algorithms/image-processing-algorithms-part-5-contrast-adjustment/\nfloat getContrastFactor(float contrast){\n\treturn (1.0158730158730156 * (contrast + 1.0)) / (1.0158730158730156 - contrast);\n}\n\nvec3 getRGB(){\n\tvec3 rgb = color;\n\t\n\trgb = pow(rgb, vec3(uRGB_gbc.x));\n\trgb = rgb + uRGB_gbc.y;\n\trgb = (rgb - 0.5) * getContrastFactor(uRGB_gbc.z) + 0.5;\n\trgb = clamp(rgb, 0.0, 1.0);\n\n\treturn rgb;\n}\n\nfloat getIntensity(){\n\tfloat w = (intensity - intensityRange.x) / (intensityRange.y - intensityRange.x);\n\tw = pow(w, uIntensity_gbc.x);\n\tw = w + uIntensity_gbc.y;\n\tw = (w - 0.5) * getContrastFactor(uIntensity_gbc.z) + 0.5;\n\tw = clamp(w, 0.0, 1.0);\n\n\treturn w;\n}\n\nvec3 getGpsTime(){\n\n\tfloat w = (gpsTime + uGpsOffset) * uGpsScale;\n\n\n\tvec3 c = texture2D(gradient, vec2(w, 1.0 - w)).rgb;\n\n\n\t// vec2 r = uNormalizedGpsBufferRange;\n\t// float w = gpsTime * (r.y - r.x) + r.x;\n\t// w = clamp(w, 0.0, 1.0);\n\t// vec3 c = texture2D(gradient, vec2(w,1.0-w)).rgb;\n\t\n\treturn c;\n}\n\nvec3 getElevation(){\n\tvec4 world = modelMatrix * vec4( position, 1.0 );\n\tfloat w = (world.z - elevationRange.x) / (elevationRange.y - elevationRange.x);\n\tvec3 cElevation = texture2D(gradient, vec2(w,1.0-w)).rgb;\n\t\n\treturn cElevation;\n}\n\nvec4 getClassification(){\n\tvec2 uv = vec2(classification / 255.0, 0.5);\n\tvec4 classColor = texture2D(classificationLUT, uv);\n\t\n\treturn classColor;\n}\n\nvec3 getReturns(){\n\n\t// 0b 00_000_111\n\tfloat rn = mod(returnNumber, 8.0);\n\t// 0b 00_111_000\n\tfloat nr = mod(returnNumber / 8.0, 8.0);\n\n\tif(nr <= 1.0){\n\t\treturn vec3(1.0, 0.0, 0.0);\n\t}else{\n\t\treturn vec3(0.0, 1.0, 0.0);\n\t}\n\n\t// return vec3(nr / 4.0, 0.0, 0.0);\n\n\t// if(nr == 1.0){\n\t// \treturn vec3(1.0, 1.0, 0.0);\n\t// }else{\n\t// \tif(rn == 1.0){\n\t// \t\treturn vec3(1.0, 0.0, 0.0);\n\t// \t}else if(rn == nr){\n\t// \t\treturn vec3(0.0, 0.0, 1.0);\n\t// \t}else{\n\t// \t\treturn vec3(0.0, 1.0, 0.0);\n\t// \t}\n\t// }\n\n\t// if(numberOfReturns == 1.0){\n\t// \treturn vec3(1.0, 1.0, 0.0);\n\t// }else{\n\t// \tif(returnNumber == 1.0){\n\t// \t\treturn vec3(1.0, 0.0, 0.0);\n\t// \t}else if(returnNumber == numberOfReturns){\n\t// \t\treturn vec3(0.0, 0.0, 1.0);\n\t// \t}else{\n\t// \t\treturn vec3(0.0, 1.0, 0.0);\n\t// \t}\n\t// }\n}\n\nvec3 getReturnNumber(){\n\tif(numberOfReturns == 1.0){\n\t\treturn vec3(1.0, 1.0, 0.0);\n\t}else{\n\t\tif(returnNumber == 1.0){\n\t\t\treturn vec3(1.0, 0.0, 0.0);\n\t\t}else if(returnNumber == numberOfReturns){\n\t\t\treturn vec3(0.0, 0.0, 1.0);\n\t\t}else{\n\t\t\treturn vec3(0.0, 1.0, 0.0);\n\t\t}\n\t}\n}\n\nvec3 getNumberOfReturns(){\n\tfloat value = numberOfReturns;\n\n\tfloat w = value / 6.0;\n\n\tvec3 color = texture2D(gradient, vec2(w, 1.0 - w)).rgb;\n\n\treturn color;\n}\n\nvec3 getSourceID(){\n\tfloat w = mod(pointSourceID, 10.0) / 10.0;\n\treturn texture2D(gradient, vec2(w,1.0 - w)).rgb;\n}\n\nvec3 getCompositeColor(){\n\tvec3 c;\n\tfloat w;\n\n\tc += wRGB * getRGB();\n\tw += wRGB;\n\t\n\tc += wIntensity * getIntensity() * vec3(1.0, 1.0, 1.0);\n\tw += wIntensity;\n\t\n\tc += wElevation * getElevation();\n\tw += wElevation;\n\t\n\tc += wReturnNumber * getReturnNumber();\n\tw += wReturnNumber;\n\t\n\tc += wSourceID * getSourceID();\n\tw += wSourceID;\n\t\n\tvec4 cl = wClassification * getClassification();\n\tc += cl.a * cl.rgb;\n\tw += wClassification * cl.a;\n\n\tc = c / w;\n\t\n\tif(w == 0.0){\n\t\t//c = color;\n\t\tgl_Position = vec4(100.0, 100.0, 100.0, 0.0);\n\t}\n\t\n\treturn c;\n}\n\n\nvec3 getNormal(){\n\t//vec3 n_hsv = vec3( modelMatrix * vec4( normal, 0.0 )) * 0.5 + 0.5; // (n_world.xyz + vec3(1.,1.,1.)) / 2.;\n\tvec3 n_view = normalize( vec3(modelViewMatrix * vec4( normal, 0.0 )) );\n\treturn n_view;\n}\nbool applyBackfaceCulling() {\n\t// Black not facing vertices / Backface culling\n\tvec3 e = normalize(vec3(modelViewMatrix * vec4( position, 1. )));\n\tvec3 n = getNormal(); // normalize( vec3(modelViewMatrix * vec4( normal, 0.0 )) );\n\n\tif((uUseOrthographicCamera && n.z <= 0.) || (!uUseOrthographicCamera && dot( n, e ) >= 0.)) { \n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n}\n\n#if defined(color_type_matcap)\n// Matcap Material\nvec3 getMatcap(){ \n\tvec3 eye = normalize( vec3( modelViewMatrix * vec4( position, 1. ) ) ); \n\tif(uUseOrthographicCamera) { \n\t\teye = vec3(0., 0., -1.);\n\t}\n\tvec3 r_en = reflect( eye, getNormal() ); // or r_en = e - 2. * dot( n, e ) * n;\n\tfloat m = 2. * sqrt(pow( r_en.x, 2. ) + pow( r_en.y, 2. ) + pow( r_en.z + 1., 2. ));\n\tvec2 vN = r_en.xy / m + .5;\n\treturn texture2D(matcapTextureUniform, vN).rgb; \n}\n#endif\n\nvec3 getExtra(){\n\n\tfloat w = (aExtra + uExtraOffset) * uExtraScale;\n\tw = clamp(w, 0.0, 1.0);\n\n\tvec3 color = texture2D(gradient, vec2(w,1.0-w)).rgb;\n\n\t// vec2 r = uExtraNormalizedRange;\n\n\t// float w = aExtra * (r.y - r.x) + r.x;\n\n\t// w = (w - uExtraRange.x) / (uExtraRange.y - uExtraRange.x);\n\n\t// w = clamp(w, 0.0, 1.0);\n\n\t// vec3 color = texture2D(gradient, vec2(w,1.0-w)).rgb;\n\n\treturn color;\n}\n\nvec3 getColor(){\n\tvec3 color;\n\t\n\t#ifdef color_type_rgba\n\t\tcolor = getRGB();\n\t#elif defined color_type_height || defined color_type_elevation\n\t\tcolor = getElevation();\n\t#elif defined color_type_rgb_height\n\t\tvec3 cHeight = getElevation();\n\t\tcolor = (1.0 - uTransition) * getRGB() + uTransition * cHeight;\n\t#elif defined color_type_depth\n\t\tfloat linearDepth = gl_Position.w;\n\t\tfloat expDepth = (gl_Position.z / gl_Position.w) * 0.5 + 0.5;\n\t\tcolor = vec3(linearDepth, expDepth, 0.0);\n\t\t//color = vec3(1.0, 0.5, 0.3);\n\t#elif defined color_type_intensity\n\t\tfloat w = getIntensity();\n\t\tcolor = vec3(w, w, w);\n\t#elif defined color_type_gps_time\n\t\tcolor = getGpsTime();\n\t#elif defined color_type_intensity_gradient\n\t\tfloat w = getIntensity();\n\t\tcolor = texture2D(gradient, vec2(w,1.0-w)).rgb;\n\t#elif defined color_type_color\n\t\tcolor = uColor;\n\t#elif defined color_type_level_of_detail\n\t\tfloat depth = getLOD();\n\t\tfloat w = depth / 10.0;\n\t\tcolor = texture2D(gradient, vec2(w,1.0-w)).rgb;\n\t#elif defined color_type_indices\n\t\tcolor = indices.rgb;\n\t#elif defined color_type_classification\n\t\tvec4 cl = getClassification(); \n\t\tcolor = cl.rgb;\n\t#elif defined color_type_return_number\n\t\tcolor = getReturnNumber();\n\t#elif defined color_type_returns\n\t\tcolor = getReturns();\n\t#elif defined color_type_number_of_returns\n\t\tcolor = getNumberOfReturns();\n\t#elif defined color_type_source_id\n\t\tcolor = getSourceID();\n\t#elif defined color_type_point_source_id\n\t\tcolor = getSourceID();\n\t#elif defined color_type_normal\n\t\tcolor = (modelMatrix * vec4(normal, 0.0)).xyz;\n\t#elif defined color_type_phong\n\t\tcolor = color;\n\t#elif defined color_type_composite\n\t\tcolor = getCompositeColor();\n\t#elif defined color_type_matcap\n\t\tcolor = getMatcap();\n\t#else \n\t\tcolor = getExtra();\n\t#endif\n\t\n\tif (backfaceCulling && applyBackfaceCulling()) {\n\t\tcolor = vec3(0.);\n\t}\n\n\treturn color;\n}\n\nfloat getPointSize(){\n\tfloat pointSize = 1.0;\n\t\n\tfloat slope = tan(fov / 2.0);\n\tfloat projFactor = -0.5 * uScreenHeight / (slope * vViewPosition.z);\n\n\tfloat scale = length(\n\t\tmodelViewMatrix * vec4(0, 0, 0, 1) - \n\t\tmodelViewMatrix * vec4(uOctreeSpacing, 0, 0, 1)\n\t) / uOctreeSpacing;\n\tprojFactor = projFactor * scale;\n\t\n\tfloat r = uOctreeSpacing * 1.7;\n\tvRadius = r;\n\t#if defined fixed_point_size\n\t\tpointSize = size;\n\t#elif defined attenuated_point_size\n\t\tif(uUseOrthographicCamera){\n\t\t\tpointSize = size;\n\t\t}else{\n\t\t\tpointSize = size * spacing * projFactor;\n\t\t\t//pointSize = pointSize * projFactor;\n\t\t}\n\t#elif defined adaptive_point_size\n\t\tif(uUseOrthographicCamera) {\n\t\t\tfloat worldSpaceSize = 1.0 * size * r / getPointSizeAttenuation();\n\t\t\tpointSize = (worldSpaceSize / uOrthoWidth) * uScreenWidth;\n\t\t} else {\n\t\t\tfloat worldSpaceSize = 1.0 * size * r / getPointSizeAttenuation();\n\t\t\tpointSize = worldSpaceSize * projFactor;\n\t\t}\n\t#endif\n\n\tpointSize = max(minSize, pointSize);\n\tpointSize = min(maxSize, pointSize);\n\t\n\tvRadius = pointSize / projFactor;\n\n\treturn pointSize;\n}\n\n#if defined(num_clippolygons) && num_clippolygons > 0\nbool pointInClipPolygon(vec3 point, int polyIdx) {\n\n\tmat4 wvp = uClipPolygonWVP[polyIdx];\n\t//vec4 screenClipPos = uClipPolygonVP[polyIdx] * modelMatrix * vec4(point, 1.0);\n\t//screenClipPos.xy = screenClipPos.xy / screenClipPos.w * 0.5 + 0.5;\n\n\tvec4 pointNDC = wvp * vec4(point, 1.0);\n\tpointNDC.xy = pointNDC.xy / pointNDC.w;\n\n\tint j = uClipPolygonVCount[polyIdx] - 1;\n\tbool c = false;\n\tfor(int i = 0; i < 8; i++) {\n\t\tif(i == uClipPolygonVCount[polyIdx]) {\n\t\t\tbreak;\n\t\t}\n\n\t\t//vec4 verti = wvp * vec4(uClipPolygonVertices[polyIdx * 8 + i], 1);\n\t\t//vec4 vertj = wvp * vec4(uClipPolygonVertices[polyIdx * 8 + j], 1);\n\n\t\t//verti.xy = verti.xy / verti.w;\n\t\t//vertj.xy = vertj.xy / vertj.w;\n\n\t\t//verti.xy = verti.xy / verti.w * 0.5 + 0.5;\n\t\t//vertj.xy = vertj.xy / vertj.w * 0.5 + 0.5;\n\n\t\tvec3 verti = uClipPolygonVertices[polyIdx * 8 + i];\n\t\tvec3 vertj = uClipPolygonVertices[polyIdx * 8 + j];\n\n\t\tif( ((verti.y > pointNDC.y) != (vertj.y > pointNDC.y)) && \n\t\t\t(pointNDC.x < (vertj.x-verti.x) * (pointNDC.y-verti.y) / (vertj.y-verti.y) + verti.x) ) {\n\t\t\tc = !c;\n\t\t}\n\t\tj = i;\n\t}\n\n\treturn c;\n}\n#endif\n\nvoid doClipping(){\n\n\t{\n\t\tvec4 cl = getClassification(); \n\t\tif(cl.a == 0.0){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 0.0);\n\t\t\t\n\t\t\treturn;\n\t\t}\n\t}\n\n\t#if defined(clip_return_number_enabled)\n\t{ // return number filter\n\t\tvec2 range = uFilterReturnNumberRange;\n\t\tif(returnNumber < range.x || returnNumber > range.y){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 0.0);\n\t\t\t\n\t\t\treturn;\n\t\t}\n\t}\n\t#endif\n\n\t#if defined(clip_number_of_returns_enabled)\n\t{ // number of return filter\n\t\tvec2 range = uFilterNumberOfReturnsRange;\n\t\tif(numberOfReturns < range.x || numberOfReturns > range.y){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 0.0);\n\t\t\t\n\t\t\treturn;\n\t\t}\n\t}\n\t#endif\n\n\t#if defined(clip_gps_enabled)\n\t{ // GPS time filter\n\t\tfloat time = (gpsTime + uGpsOffset) * uGpsScale;\n\t\tvec2 range = uFilterGPSTimeClipRange;\n\n\t\tif(time < range.x || time > range.y){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 0.0);\n\t\t\t\n\t\t\treturn;\n\t\t}\n\t}\n\t#endif\n\n\t#if defined(clip_point_source_id_enabled)\n\t{ // point source id filter\n\t\tvec2 range = uFilterPointSourceIDClipRange;\n\t\tif(pointSourceID < range.x || pointSourceID > range.y){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 0.0);\n\t\t\t\n\t\t\treturn;\n\t\t}\n\t}\n\t#endif\n\n\tint clipVolumesCount = 0;\n\tint insideCount = 0;\n\n\t#if defined(num_clipboxes) && num_clipboxes > 0\n\t\tfor(int i = 0; i < num_clipboxes; i++){\n\t\t\tvec4 clipPosition = clipBoxes[i] * modelMatrix * vec4( position, 1.0 );\n\t\t\tbool inside = -0.5 <= clipPosition.x && clipPosition.x <= 0.5;\n\t\t\tinside = inside && -0.5 <= clipPosition.y && clipPosition.y <= 0.5;\n\t\t\tinside = inside && -0.5 <= clipPosition.z && clipPosition.z <= 0.5;\n\n\t\t\tinsideCount = insideCount + (inside ? 1 : 0);\n\t\t\tclipVolumesCount++;\n\t\t}\t\n\t#endif\n\n\t#if defined(num_clippolygons) && num_clippolygons > 0\n\t\tfor(int i = 0; i < num_clippolygons; i++) {\n\t\t\tbool inside = pointInClipPolygon(position, i);\n\n\t\t\tinsideCount = insideCount + (inside ? 1 : 0);\n\t\t\tclipVolumesCount++;\n\t\t}\n\t#endif\n\n\tbool insideAny = insideCount > 0;\n\tbool insideAll = (clipVolumesCount > 0) && (clipVolumesCount == insideCount);\n\n\tif(clipMethod == CLIPMETHOD_INSIDE_ANY){\n\t\tif(insideAny && clipTask == CLIPTASK_HIGHLIGHT){\n\t\t\tvColor.r += 0.5;\n\t\t}else if(!insideAny && clipTask == CLIPTASK_SHOW_INSIDE){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 1.0);\n\t\t}else if(insideAny && clipTask == CLIPTASK_SHOW_OUTSIDE){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 1.0);\n\t\t}\n\t}else if(clipMethod == CLIPMETHOD_INSIDE_ALL){\n\t\tif(insideAll && clipTask == CLIPTASK_HIGHLIGHT){\n\t\t\tvColor.r += 0.5;\n\t\t}else if(!insideAll && clipTask == CLIPTASK_SHOW_INSIDE){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 1.0);\n\t\t}else if(insideAll && clipTask == CLIPTASK_SHOW_OUTSIDE){\n\t\t\tgl_Position = vec4(100.0, 100.0, 100.0, 1.0);\n\t\t}\n\t}\n}\n\n\n\n// \n// ##     ##    ###    #### ##    ## \n// ###   ###   ## ##    ##  ###   ## \n// #### ####  ##   ##   ##  ####  ## \n// ## ### ## ##     ##  ##  ## ## ## \n// ##     ## #########  ##  ##  #### \n// ##     ## ##     ##  ##  ##   ### \n// ##     ## ##     ## #### ##    ## \n//\n\nvoid main() {\n\tvec4 mvPosition = modelViewMatrix * vec4(position, 1.0 );\n\tvViewPosition = mvPosition.xyz;\n\tgl_Position = projectionMatrix * mvPosition;\n\tvLogDepth = log2(-mvPosition.z);\n\n\t//gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n\t//gl_PointSize = 5.0;\n\n\t// POINT SIZE\n\tfloat pointSize = getPointSize();\n\t//float pointSize = 2.0;\n\tgl_PointSize = pointSize;\n\tvPointSize = pointSize;\n\n\t// COLOR\n\tvColor = getColor();\n\t// vColor = vec3(1.0, 0.0, 0.0);\n\n\t//gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n\t//gl_Position = vec4(position.xzy / 1000.0, 1.0 );\n\n\t//gl_PointSize = 5.0;\n\t//vColor = vec3(1.0, 1.0, 1.0);\n\n\t// only for \"replacing\" approaches\n\t// if(getLOD() != uLevel){\n\t// \tgl_Position = vec4(10.0, 10.0, 10.0, 1.0);\n\t// }\n\n\n\t#if defined hq_depth_pass\n\t\tfloat originalDepth = gl_Position.w;\n\t\tfloat adjustedDepth = originalDepth + 2.0 * vRadius;\n\t\tfloat adjust = adjustedDepth / originalDepth;\n\n\t\tmvPosition.xyz = mvPosition.xyz * adjust;\n\t\tgl_Position = projectionMatrix * mvPosition;\n\t#endif\n\n\n\t// CLIPPING\n\tdoClipping();\n\n\t#if defined(num_clipspheres) && num_clipspheres > 0\n\t\tfor(int i = 0; i < num_clipspheres; i++){\n\t\t\tvec4 sphereLocal = uClipSpheres[i] * mvPosition;\n\n\t\t\tfloat distance = length(sphereLocal.xyz);\n\n\t\t\tif(distance < 1.0){\n\t\t\t\tfloat w = distance;\n\t\t\t\tvec3 cGradient = texture2D(gradient, vec2(w, 1.0 - w)).rgb;\n\t\t\t\t\n\t\t\t\tvColor = cGradient;\n\t\t\t\t//vColor = cGradient * 0.7 + vColor * 0.3;\n\t\t\t}\n\t\t}\n\t#endif\n\n\t#if defined(num_shadowmaps) && num_shadowmaps > 0\n\n\t\tconst float sm_near = 0.1;\n\t\tconst float sm_far = 10000.0;\n\n\t\tfor(int i = 0; i < num_shadowmaps; i++){\n\t\t\tvec3 viewPos = (uShadowWorldView[i] * vec4(position, 1.0)).xyz;\n\t\t\tfloat distanceToLight = abs(viewPos.z);\n\t\t\t\n\t\t\tvec4 projPos = uShadowProj[i] * uShadowWorldView[i] * vec4(position, 1);\n\t\t\tvec3 nc = projPos.xyz / projPos.w;\n\t\t\t\n\t\t\tfloat u = nc.x * 0.5 + 0.5;\n\t\t\tfloat v = nc.y * 0.5 + 0.5;\n\n\t\t\tvec2 sampleStep = vec2(1.0 / (2.0*1024.0), 1.0 / (2.0*1024.0)) * 1.5;\n\t\t\tvec2 sampleLocations[9];\n\t\t\tsampleLocations[0] = vec2(0.0, 0.0);\n\t\t\tsampleLocations[1] = sampleStep;\n\t\t\tsampleLocations[2] = -sampleStep;\n\t\t\tsampleLocations[3] = vec2(sampleStep.x, -sampleStep.y);\n\t\t\tsampleLocations[4] = vec2(-sampleStep.x, sampleStep.y);\n\n\t\t\tsampleLocations[5] = vec2(0.0, sampleStep.y);\n\t\t\tsampleLocations[6] = vec2(0.0, -sampleStep.y);\n\t\t\tsampleLocations[7] = vec2(sampleStep.x, 0.0);\n\t\t\tsampleLocations[8] = vec2(-sampleStep.x, 0.0);\n\n\t\t\tfloat visibleSamples = 0.0;\n\t\t\tfloat numSamples = 0.0;\n\n\t\t\tfloat bias = vRadius * 2.0;\n\n\t\t\tfor(int j = 0; j < 9; j++){\n\t\t\t\tvec4 depthMapValue = texture2D(uShadowMap[i], vec2(u, v) + sampleLocations[j]);\n\n\t\t\t\tfloat linearDepthFromSM = depthMapValue.x + bias;\n\t\t\t\tfloat linearDepthFromViewer = distanceToLight;\n\n\t\t\t\tif(linearDepthFromSM > linearDepthFromViewer){\n\t\t\t\t\tvisibleSamples += 1.0;\n\t\t\t\t}\n\n\t\t\t\tnumSamples += 1.0;\n\t\t\t}\n\n\t\t\tfloat visibility = visibleSamples / numSamples;\n\n\t\t\tif(u < 0.0 || u > 1.0 || v < 0.0 || v > 1.0 || nc.x < -1.0 || nc.x > 1.0 || nc.y < -1.0 || nc.y > 1.0 || nc.z < -1.0 || nc.z > 1.0){\n\t\t\t\t//vColor = vec3(0.0, 0.0, 0.2);\n\t\t\t}else{\n\t\t\t\t//vColor = vec3(1.0, 1.0, 1.0) * visibility + vec3(1.0, 1.0, 1.0) * vec3(0.5, 0.0, 0.0) * (1.0 - visibility);\n\t\t\t\tvColor = vColor * visibility + vColor * uShadowColor * (1.0 - visibility);\n\t\t\t}\n\n\n\t\t}\n\n\t#endif\n}\n`;\n\n\tShaders[\"pointcloud.fs\"] = `\n#if defined paraboloid_point_shape\n\t#extension GL_EXT_frag_depth : enable\n#endif\n\nprecision highp float;\nprecision highp int;\n\nuniform mat4 viewMatrix;\nuniform mat4 uViewInv;\nuniform mat4 uProjInv;\nuniform vec3 cameraPosition;\n\n\nuniform mat4 projectionMatrix;\nuniform float uOpacity;\n\nuniform float blendHardness;\nuniform float blendDepthSupplement;\nuniform float fov;\nuniform float uSpacing;\nuniform float near;\nuniform float far;\nuniform float uPCIndex;\nuniform float uScreenWidth;\nuniform float uScreenHeight;\n\nvarying vec3\tvColor;\nvarying float\tvLogDepth;\nvarying vec3\tvViewPosition;\nvarying float\tvRadius;\nvarying float \tvPointSize;\nvarying vec3 \tvPosition;\n\n\nfloat specularStrength = 1.0;\n\nvoid main() {\n\n\t// gl_FragColor = vec4(vColor, 1.0);\n\n\tvec3 color = vColor;\n\tfloat depth = gl_FragCoord.z;\n\n\t#if defined(circle_point_shape) || defined(paraboloid_point_shape) \n\t\tfloat u = 2.0 * gl_PointCoord.x - 1.0;\n\t\tfloat v = 2.0 * gl_PointCoord.y - 1.0;\n\t#endif\n\t\n\t#if defined(circle_point_shape) \n\t\tfloat cc = u*u + v*v;\n\t\tif(cc > 1.0){\n\t\t\tdiscard;\n\t\t}\n\t#endif\n\t\t\n\t#if defined color_type_indices\n\t\tgl_FragColor = vec4(color, uPCIndex / 255.0);\n\t#else\n\t\tgl_FragColor = vec4(color, uOpacity);\n\t#endif\n\n\t#if defined paraboloid_point_shape\n\t\tfloat wi = 0.0 - ( u*u + v*v);\n\t\tvec4 pos = vec4(vViewPosition, 1.0);\n\t\tpos.z += wi * vRadius;\n\t\tfloat linearDepth = -pos.z;\n\t\tpos = projectionMatrix * pos;\n\t\tpos = pos / pos.w;\n\t\tfloat expDepth = pos.z;\n\t\tdepth = (pos.z + 1.0) / 2.0;\n\t\tgl_FragDepthEXT = depth;\n\t\t\n\t\t#if defined(color_type_depth)\n\t\t\tcolor.r = linearDepth;\n\t\t\tcolor.g = expDepth;\n\t\t#endif\n\t\t\n\t\t#if defined(use_edl)\n\t\t\tgl_FragColor.a = log2(linearDepth);\n\t\t#endif\n\t\t\n\t#else\n\t\t#if defined(use_edl)\n\t\t\tgl_FragColor.a = vLogDepth;\n\t\t#endif\n\t#endif\n\n\t#if defined(weighted_splats)\n\t\tfloat distance = 2.0 * length(gl_PointCoord.xy - 0.5);\n\t\tfloat weight = max(0.0, 1.0 - distance);\n\t\tweight = pow(weight, 1.5);\n\n\t\tgl_FragColor.a = weight;\n\t\tgl_FragColor.xyz = gl_FragColor.xyz * weight;\n\t#endif\n\n\t//gl_FragColor = vec4(0.0, 0.7, 0.0, 1.0);\n\t\n}\n\n\n`;\n\n\tShaders[\"pointcloud_sm.vs\"] = `\nprecision mediump float;\nprecision mediump int;\n\nattribute vec3 position;\nattribute vec3 color;\n\nuniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\n\nuniform float uScreenWidth;\nuniform float uScreenHeight;\nuniform float near;\nuniform float far;\n\nuniform float uSpacing;\nuniform float uOctreeSize;\nuniform float uLevel;\nuniform float uVNStart;\n\nuniform sampler2D visibleNodes;\n\nvarying float vLinearDepth;\nvarying vec3 vColor;\n\n#define PI 3.141592653589793\n\n\n\n// ---------------------\n// OCTREE\n// ---------------------\n\n#if defined(adaptive_point_size)\n/**\n * number of 1-bits up to inclusive index position\n * number is treated as if it were an integer in the range 0-255\n *\n */\nfloat numberOfOnes(float number, float index){\n\tfloat tmp = mod(number, pow(2.0, index + 1.0));\n\tfloat numOnes = 0.0;\n\tfor(float i = 0.0; i < 8.0; i++){\n\t\tif(mod(tmp, 2.0) != 0.0){\n\t\t\tnumOnes++;\n\t\t}\n\t\ttmp = floor(tmp / 2.0);\n\t}\n\treturn numOnes;\n}\n\n\n/**\n * checks whether the bit at index is 1\n * number is treated as if it were an integer in the range 0-255\n *\n */\nbool isBitSet(float number, float index){\n\treturn mod(floor(number / pow(2.0, index)), 2.0) != 0.0;\n}\n\n\n/**\n * find the LOD at the point position\n */\nfloat getLOD(){\n\t\n\tvec3 offset = vec3(0.0, 0.0, 0.0);\n\tfloat iOffset = uVNStart;\n\tfloat depth = uLevel;\n\tfor(float i = 0.0; i <= 30.0; i++){\n\t\tfloat nodeSizeAtLevel = uOctreeSize  / pow(2.0, i + uLevel + 0.0);\n\t\t\n\t\tvec3 index3d = (position-offset) / nodeSizeAtLevel;\n\t\tindex3d = floor(index3d + 0.5);\n\t\tfloat index = 4.0 * index3d.x + 2.0 * index3d.y + index3d.z;\n\t\t\n\t\tvec4 value = texture2D(visibleNodes, vec2(iOffset / 2048.0, 0.0));\n\t\tfloat mask = value.r * 255.0;\n\t\tif(isBitSet(mask, index)){\n\t\t\t// there are more visible child nodes at this position\n\t\t\tiOffset = iOffset + value.g * 255.0 * 256.0 + value.b * 255.0 + numberOfOnes(mask, index - 1.0);\n\t\t\tdepth++;\n\t\t}else{\n\t\t\t// no more visible child nodes at this position\n\t\t\treturn depth;\n\t\t}\n\t\t\n\t\toffset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d;\n\t}\n\t\t\n\treturn depth;\n}\n\n#endif\n\nfloat getPointSize(){\n\tfloat pointSize = 1.0;\n\t\n\tfloat slope = tan(fov / 2.0);\n\tfloat projFactor =  -0.5 * uScreenHeight / (slope * vViewPosition.z);\n\t\n\tfloat r = uOctreeSpacing * 1.5;\n\tvRadius = r;\n\t#if defined fixed_point_size\n\t\tpointSize = size;\n\t#elif defined attenuated_point_size\n\t\tif(uUseOrthographicCamera){\n\t\t\tpointSize = size;\t\t\t\n\t\t}else{\n\t\t\tpointSize = pointSize * projFactor;\n\t\t}\n\t#elif defined adaptive_point_size\n\t\tif(uUseOrthographicCamera) {\n\t\t\tfloat worldSpaceSize = 1.5 * size * r / getPointSizeAttenuation();\n\t\t\tpointSize = (worldSpaceSize / uOrthoWidth) * uScreenWidth;\n\t\t} else {\n\t\t\tfloat worldSpaceSize = 1.5 * size * r / getPointSizeAttenuation();\n\t\t\tpointSize = worldSpaceSize * projFactor;\n\t\t}\n\t#endif\n\n\tpointSize = max(minSize, pointSize);\n\tpointSize = min(maxSize, pointSize);\n\t\n\tvRadius = pointSize / projFactor;\n\n\treturn pointSize;\n}\n\n\nvoid main() {\n\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tvLinearDepth = gl_Position.w;\n\n\tfloat pointSize = getPointSize();\n\tgl_PointSize = pointSize;\n\n}\n`;\n\n\tShaders[\"pointcloud_sm.fs\"] = `\nprecision mediump float;\nprecision mediump int;\n\nvarying vec3 vColor;\nvarying float vLinearDepth;\n\nvoid main() {\n\n\t//gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n\t//gl_FragColor = vec4(vColor, 1.0);\n\t//gl_FragColor = vec4(vLinearDepth, pow(vLinearDepth, 2.0), 0.0, 1.0);\n\tgl_FragColor = vec4(vLinearDepth, vLinearDepth / 30.0, vLinearDepth / 30.0, 1.0);\n\t\n}\n\n\n`;\n\n\tShaders[\"normalize.vs\"] = `\nprecision mediump float;\nprecision mediump int;\n\nattribute vec3 position;\nattribute vec2 uv;\n\nuniform mat4 projectionMatrix;\nuniform mat4 modelViewMatrix;\n\nvarying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`;\n\n\tShaders[\"normalize.fs\"] = `\n#extension GL_EXT_frag_depth : enable\n\nprecision mediump float;\nprecision mediump int;\n\nuniform sampler2D uWeightMap;\nuniform sampler2D uDepthMap;\n\nvarying vec2 vUv;\n\nvoid main() {\n\tfloat depth = texture2D(uDepthMap, vUv).r;\n\t\n\tif(depth >= 1.0){\n\t\tdiscard;\n\t}\n\n\tgl_FragColor = vec4(depth, 1.0, 0.0, 1.0);\n\n\tvec4 color = texture2D(uWeightMap, vUv); \n\tcolor = color / color.w;\n\t\n\tgl_FragColor = vec4(color.xyz, 1.0); \n\t\n\tgl_FragDepthEXT = depth;\n\n\n}`;\n\n\tShaders[\"normalize_and_edl.fs\"] = `\n#extension GL_EXT_frag_depth : enable\n\n// \n// adapted from the EDL shader code from Christian Boucheny in cloud compare:\n// https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL\n//\n\nprecision mediump float;\nprecision mediump int;\n\nuniform sampler2D uWeightMap;\nuniform sampler2D uEDLMap;\nuniform sampler2D uDepthMap;\n\nuniform float screenWidth;\nuniform float screenHeight;\nuniform vec2 neighbours[NEIGHBOUR_COUNT];\nuniform float edlStrength;\nuniform float radius;\n\nvarying vec2 vUv;\n\nfloat response(float depth){\n\tvec2 uvRadius = radius / vec2(screenWidth, screenHeight);\n\t\n\tfloat sum = 0.0;\n\t\n\tfor(int i = 0; i < NEIGHBOUR_COUNT; i++){\n\t\tvec2 uvNeighbor = vUv + uvRadius * neighbours[i];\n\t\t\n\t\tfloat neighbourDepth = texture2D(uEDLMap, uvNeighbor).a;\n\n\t\tif(neighbourDepth != 0.0){\n\t\t\tif(depth == 0.0){\n\t\t\t\tsum += 100.0;\n\t\t\t}else{\n\t\t\t\tsum += max(0.0, depth - neighbourDepth);\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn sum / float(NEIGHBOUR_COUNT);\n}\n\nvoid main() {\n\n\tfloat edlDepth = texture2D(uEDLMap, vUv).a;\n\tfloat res = response(edlDepth);\n\tfloat shade = exp(-res * 300.0 * edlStrength);\n\n\tfloat depth = texture2D(uDepthMap, vUv).r;\n\tif(depth >= 1.0 && res == 0.0){\n\t\tdiscard;\n\t}\n\t\n\tvec4 color = texture2D(uWeightMap, vUv); \n\tcolor = color / color.w;\n\tcolor = color * shade;\n\n\tgl_FragColor = vec4(color.xyz, 1.0); \n\n\tgl_FragDepthEXT = depth;\n}`;\n\n\tShaders[\"edl.vs\"] = `\nprecision mediump float;\nprecision mediump int;\n\nattribute vec3 position;\nattribute vec2 uv;\n\nuniform mat4 projectionMatrix;\nuniform mat4 modelViewMatrix;\n\nvarying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\t\n\tvec4 mvPosition = modelViewMatrix * vec4(position,1.0);\n\n\tgl_Position = projectionMatrix * mvPosition;\n}`;\n\n\tShaders[\"edl.fs\"] = `\n#extension GL_EXT_frag_depth : enable\n\n// \n// adapted from the EDL shader code from Christian Boucheny in cloud compare:\n// https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL\n//\n\nprecision mediump float;\nprecision mediump int;\n\nuniform float screenWidth;\nuniform float screenHeight;\nuniform vec2 neighbours[NEIGHBOUR_COUNT];\nuniform float edlStrength;\nuniform float radius;\nuniform float opacity;\n\nuniform float uNear;\nuniform float uFar;\n\nuniform mat4 uProj;\n\nuniform sampler2D uEDLColor;\nuniform sampler2D uEDLDepth;\n\nvarying vec2 vUv;\n\nfloat response(float depth){\n\tvec2 uvRadius = radius / vec2(screenWidth, screenHeight);\n\t\n\tfloat sum = 0.0;\n\t\n\tfor(int i = 0; i < NEIGHBOUR_COUNT; i++){\n\t\tvec2 uvNeighbor = vUv + uvRadius * neighbours[i];\n\t\t\n\t\tfloat neighbourDepth = texture2D(uEDLColor, uvNeighbor).a;\n\t\tneighbourDepth = (neighbourDepth == 1.0) ? 0.0 : neighbourDepth;\n\n\t\tif(neighbourDepth != 0.0){\n\t\t\tif(depth == 0.0){\n\t\t\t\tsum += 100.0;\n\t\t\t}else{\n\t\t\t\tsum += max(0.0, depth - neighbourDepth);\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn sum / float(NEIGHBOUR_COUNT);\n}\n\nvoid main(){\n\tvec4 cEDL = texture2D(uEDLColor, vUv);\n\t\n\tfloat depth = cEDL.a;\n\tdepth = (depth == 1.0) ? 0.0 : depth;\n\tfloat res = response(depth);\n\tfloat shade = exp(-res * 300.0 * edlStrength);\n\n\tgl_FragColor = vec4(cEDL.rgb * shade, opacity);\n\n\t{ // write regular hyperbolic depth values to depth buffer\n\t\tfloat dl = pow(2.0, depth);\n\n\t\tvec4 dp = uProj * vec4(0.0, 0.0, -dl, 1.0);\n\t\tfloat pz = dp.z / dp.w;\n\t\tfloat fragDepth = (pz + 1.0) / 2.0;\n\n\t\tgl_FragDepthEXT = fragDepth;\n\t}\n\n\tif(depth == 0.0){\n\t\tdiscard;\n\t}\n\n}\n`;\n\n\tShaders[\"blur.vs\"] = `\nvarying vec2 vUv;\n\nvoid main() {\n\tvUv = uv;\n\n\tgl_Position =   projectionMatrix * modelViewMatrix * vec4(position,1.0);\n}`;\n\n\tShaders[\"blur.fs\"] = `\nuniform mat4 projectionMatrix;\n\nuniform float screenWidth;\nuniform float screenHeight;\nuniform float near;\nuniform float far;\n\nuniform sampler2D map;\n\nvarying vec2 vUv;\n\nvoid main() {\n\n\tfloat dx = 1.0 / screenWidth;\n\tfloat dy = 1.0 / screenHeight;\n\n\tvec3 color = vec3(0.0, 0.0, 0.0);\n\tcolor += texture2D(map, vUv + vec2(-dx, -dy)).rgb;\n\tcolor += texture2D(map, vUv + vec2(  0, -dy)).rgb;\n\tcolor += texture2D(map, vUv + vec2(+dx, -dy)).rgb;\n\tcolor += texture2D(map, vUv + vec2(-dx,   0)).rgb;\n\tcolor += texture2D(map, vUv + vec2(  0,   0)).rgb;\n\tcolor += texture2D(map, vUv + vec2(+dx,   0)).rgb;\n\tcolor += texture2D(map, vUv + vec2(-dx,  dy)).rgb;\n\tcolor += texture2D(map, vUv + vec2(  0,  dy)).rgb;\n\tcolor += texture2D(map, vUv + vec2(+dx,  dy)).rgb;\n\n\tcolor = color / 9.0;\n\t\n\tgl_FragColor = vec4(color, 1.0);\n}`;\n\n\tconst ClassificationScheme = {\n\n\t\tDEFAULT: {\n\t\t\t0:       { visible: true, name: 'never classified'  , color: [0.5,  0.5,  0.5,  1.0] },\n\t\t\t1:       { visible: true, name: 'unclassified'      , color: [0.5,  0.5,  0.5,  1.0] },\n\t\t\t2:       { visible: true, name: 'ground'            , color: [0.63, 0.32, 0.18, 1.0] },\n\t\t\t3:       { visible: true, name: 'low vegetation'    , color: [0.0,  1.0,  0.0,  1.0] },\n\t\t\t4:       { visible: true, name: 'medium vegetation' , color: [0.0,  0.8,  0.0,  1.0] },\n\t\t\t5:       { visible: true, name: 'high vegetation'   , color: [0.0,  0.6,  0.0,  1.0] },\n\t\t\t6:       { visible: true, name: 'building'          , color: [1.0,  0.66, 0.0,  1.0] },\n\t\t\t7:       { visible: true, name: 'low point(noise)'  , color: [1.0,  0.0,  1.0,  1.0] },\n\t\t\t8:       { visible: true, name: 'key-point'         , color: [1.0,  0.0,  0.0,  1.0] },\n\t\t\t9:       { visible: true, name: 'water'             , color: [0.0,  0.0,  1.0,  1.0] },\n\t\t\t12:      { visible: true, name: 'overlap'           , color: [1.0,  1.0,  0.0,  1.0] },\n\t\t\tDEFAULT: { visible: true, name: 'default'           , color: [0.3,  0.6,  0.6,  0.5] },\n\t\t}\n\t};\n\n\tObject.defineProperty(ClassificationScheme, 'RANDOM', {\n\t\tget: function() { \n\n\t\t\tlet scheme = {};\n\n\t\t\tfor(let i = 0; i <= 255; i++){\n\t\t\t\tscheme[i] = new Vector4(Math.random(), Math.random(), Math.random());\n\t\t\t}\n\n\t\t\tscheme[\"DEFAULT\"] = new Vector4(Math.random(), Math.random(), Math.random());\n\n\t\t\treturn scheme;\n\t\t}\n\t});\n\n\t//\n\t// how to calculate the radius of a projected sphere in screen space\n\t// http://stackoverflow.com/questions/21648630/radius-of-projected-sphere-in-screen-space\n\t// http://stackoverflow.com/questions/3717226/radius-of-projected-sphere\n\t//\n\n\n\tclass PointCloudMaterial$1 extends RawShaderMaterial {\n\t\tconstructor (parameters = {}) {\n\t\t\tsuper();\n\n\t\t\tthis.visibleNodesTexture = Utils.generateDataTexture(2048, 1, new Color(0xffffff));\n\t\t\tthis.visibleNodesTexture.minFilter = NearestFilter;\n\t\t\tthis.visibleNodesTexture.magFilter = NearestFilter;\n\n\t\t\tlet getValid = (a, b) => {\n\t\t\t\tif(a !== undefined){\n\t\t\t\t\treturn a;\n\t\t\t\t}else {\n\t\t\t\t\treturn b;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet pointSize = getValid(parameters.size, 1.0);\n\t\t\tlet minSize = getValid(parameters.minSize, 2.0);\n\t\t\tlet maxSize = getValid(parameters.maxSize, 50.0);\n\t\t\tlet treeType = getValid(parameters.treeType, TreeType.OCTREE);\n\n\t\t\tthis._pointSizeType = PointSizeType.FIXED;\n\t\t\tthis._shape = PointShape.SQUARE;\n\t\t\tthis._useClipBox = false;\n\t\t\tthis.clipBoxes = [];\n\t\t\tthis.clipPolygons = [];\n\t\t\tthis._weighted = false;\n\t\t\tthis._gradient = Gradients.SPECTRAL;\n\t\t\tthis.gradientTexture = PointCloudMaterial$1.generateGradientTexture(this._gradient);\n\t\t\tthis._matcap = \"matcap.jpg\";\n\t\t\tthis.matcapTexture = Potree.PointCloudMaterial.generateMatcapTexture(this._matcap);\n\t\t\tthis.lights = false;\n\t\t\tthis.fog = false;\n\t\t\tthis._treeType = treeType;\n\t\t\tthis._useEDL = false;\n\t\t\tthis.defines = new Map();\n\n\t\t\tthis.ranges = new Map();\n\n\t\t\tthis._activeAttributeName = null;\n\n\t\t\tthis._defaultIntensityRangeChanged = false;\n\t\t\tthis._defaultElevationRangeChanged = false;\n\n\t\t\t{\n\t\t\t\tconst [width, height] = [256, 1];\n\t\t\t\tlet data = new Uint8Array(width * 4);\n\t\t\t\tlet texture = new DataTexture(data, width, height, RGBAFormat);\n\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tthis.classificationTexture = texture;\n\t\t\t}\n\n\t\t\tthis.attributes = {\n\t\t\t\tposition: { type: 'fv', value: [] },\n\t\t\t\tcolor: { type: 'fv', value: [] },\n\t\t\t\tnormal: { type: 'fv', value: [] },\n\t\t\t\tintensity: { type: 'f', value: [] },\n\t\t\t\tclassification: { type: 'f', value: [] },\n\t\t\t\treturnNumber: { type: 'f', value: [] },\n\t\t\t\tnumberOfReturns: { type: 'f', value: [] },\n\t\t\t\tpointSourceID: { type: 'f', value: [] },\n\t\t\t\tindices: { type: 'fv', value: [] }\n\t\t\t};\n\n\t\t\tthis.uniforms = {\n\t\t\t\tlevel:\t\t\t\t{ type: \"f\", value: 0.0 },\n\t\t\t\tvnStart:\t\t\t{ type: \"f\", value: 0.0 },\n\t\t\t\tspacing:\t\t\t{ type: \"f\", value: 1.0 },\n\t\t\t\tblendHardness:\t\t{ type: \"f\", value: 2.0 },\n\t\t\t\tblendDepthSupplement:\t{ type: \"f\", value: 0.0 },\n\t\t\t\tfov:\t\t\t\t{ type: \"f\", value: 1.0 },\n\t\t\t\tscreenWidth:\t\t{ type: \"f\", value: 1.0 },\n\t\t\t\tscreenHeight:\t\t{ type: \"f\", value: 1.0 },\n\t\t\t\tnear:\t\t\t\t{ type: \"f\", value: 0.1 },\n\t\t\t\tfar:\t\t\t\t{ type: \"f\", value: 1.0 },\n\t\t\t\tuColor:\t\t\t\t{ type: \"c\", value: new Color( 0xffffff ) },\n\t\t\t\tuOpacity:\t\t\t{ type: \"f\", value: 1.0 },\n\t\t\t\tsize:\t\t\t\t{ type: \"f\", value: pointSize },\n\t\t\t\tminSize:\t\t\t{ type: \"f\", value: minSize },\n\t\t\t\tmaxSize:\t\t\t{ type: \"f\", value: maxSize },\n\t\t\t\toctreeSize:\t\t\t{ type: \"f\", value: 0 },\n\t\t\t\tbbSize:\t\t\t\t{ type: \"fv\", value: [0, 0, 0] },\n\t\t\t\televationRange:\t\t{ type: \"2fv\", value: [0, 0] },\n\n\t\t\t\tclipBoxCount:\t\t{ type: \"f\", value: 0 },\n\t\t\t\t//clipSphereCount:\t{ type: \"f\", value: 0 },\n\t\t\t\tclipPolygonCount:\t{ type: \"i\", value: 0 },\n\t\t\t\tclipBoxes:\t\t\t{ type: \"Matrix4fv\", value: [] },\n\t\t\t\t//clipSpheres:\t\t{ type: \"Matrix4fv\", value: [] },\n\t\t\t\tclipPolygons:\t\t{ type: \"3fv\", value: [] },\n\t\t\t\tclipPolygonVCount:\t{ type: \"iv\", value: [] },\n\t\t\t\tclipPolygonVP:\t\t{ type: \"Matrix4fv\", value: [] },\n\n\t\t\t\tvisibleNodes:\t\t{ type: \"t\", value: this.visibleNodesTexture },\n\t\t\t\tpcIndex:\t\t\t{ type: \"f\", value: 0 },\n\t\t\t\tgradient:\t\t\t{ type: \"t\", value: this.gradientTexture },\n\t\t\t\tclassificationLUT:\t{ type: \"t\", value: this.classificationTexture },\n\t\t\t\tuHQDepthMap:\t\t{ type: \"t\", value: null },\n\t\t\t\ttoModel:\t\t\t{ type: \"Matrix4f\", value: [] },\n\t\t\t\tdiffuse:\t\t\t{ type: \"fv\", value: [1, 1, 1] },\n\t\t\t\ttransition:\t\t\t{ type: \"f\", value: 0.5 },\n\n\t\t\t\t intensityRange:\t\t{ type: \"fv\", value: [Infinity, -Infinity] },\n\n\t\t\t\tintensity_gbc: \t\t{ type: \"fv\", value: [1, 0, 0]},\n\t\t\t\tuRGB_gbc:\t \t\t{ type: \"fv\", value: [1, 0, 0]},\n\t\t\t\t// intensityGamma:\t\t{ type: \"f\", value: 1 },\n\t\t\t\t// intensityContrast:\t{ type: \"f\", value: 0 },\n\t\t\t\t// intensityBrightness:{ type: \"f\", value: 0 },\n\t\t\t\t// rgbGamma:\t\t\t{ type: \"f\", value: 1 },\n\t\t\t\t// rgbContrast:\t\t{ type: \"f\", value: 0 },\n\t\t\t\t// rgbBrightness:\t\t{ type: \"f\", value: 0 },\n\t\t\t\twRGB:\t\t\t\t{ type: \"f\", value: 1 },\n\t\t\t\twIntensity:\t\t\t{ type: \"f\", value: 0 },\n\t\t\t\twElevation:\t\t\t{ type: \"f\", value: 0 },\n\t\t\t\twClassification:\t{ type: \"f\", value: 0 },\n\t\t\t\twReturnNumber:\t\t{ type: \"f\", value: 0 },\n\t\t\t\twSourceID:\t\t\t{ type: \"f\", value: 0 },\n\t\t\t\tuseOrthographicCamera: { type: \"b\", value: false },\n\t\t\t\televationGradientRepat: { type: \"i\", value: ElevationGradientRepeat.CLAMP },\n\t\t\t\tclipTask:\t\t\t{ type: \"i\", value: 1 },\n\t\t\t\tclipMethod:\t\t\t{ type: \"i\", value: 1 },\n\t\t\t\tuShadowColor:\t\t{ type: \"3fv\", value: [0, 0, 0] },\n\n\t\t\t\tuExtraScale:\t\t{ type: \"f\", value: 1},\n\t\t\t\tuExtraOffset:\t\t{ type: \"f\", value: 0},\n\t\t\t\tuExtraRange:\t\t{ type: \"2fv\", value: [0, 1] },\n\t\t\t\tuExtraGammaBrightContr:\t{ type: \"3fv\", value: [1, 0, 0] },\n\n\t\t\t\tuFilterReturnNumberRange:\t\t{ type: \"fv\", value: [0, 7]},\n\t\t\t\tuFilterNumberOfReturnsRange:\t{ type: \"fv\", value: [0, 7]},\n\t\t\t\tuFilterGPSTimeClipRange:\t\t{ type: \"fv\", value: [0, 7]},\n\t\t\t\tuFilterPointSourceIDClipRange:\t\t{ type: \"fv\", value: [0, 65535]},\n\t\t\t\tmatcapTextureUniform: \t{ type: \"t\", value: this.matcapTexture },\n\t\t\t\tbackfaceCulling: { type: \"b\", value: false },\n\t\t\t};\n\n\t\t\tthis.classification = ClassificationScheme.DEFAULT;\n\n\t\t\tthis.defaultAttributeValues.normal = [0, 0, 0];\n\t\t\tthis.defaultAttributeValues.classification = [0, 0, 0];\n\t\t\tthis.defaultAttributeValues.indices = [0, 0, 0, 0];\n\n\t\t\tthis.vertexShader = Shaders['pointcloud.vs'];\n\t\t\tthis.fragmentShader = Shaders['pointcloud.fs'];\n\t\t\t\n\t\t\tthis.vertexColors = VertexColors;\n\n\t\t\tthis.updateShaderSource();\n\t\t}\n\n\t\tsetDefine(key, value){\n\t\t\tif(value !== undefined && value !== null){\n\t\t\t\tif(this.defines.get(key) !== value){\n\t\t\t\t\tthis.defines.set(key, value);\n\t\t\t\t\tthis.updateShaderSource();\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tthis.removeDefine(key);\n\t\t\t}\n\t\t}\n\n\t\tremoveDefine(key){\n\t\t\tthis.defines.delete(key);\n\t\t}\n\n\t\tupdateShaderSource () {\n\n\t\t\tlet vs = Shaders['pointcloud.vs'];\n\t\t\tlet fs = Shaders['pointcloud.fs'];\n\t\t\tlet definesString = this.getDefines();\n\n\t\t\tlet vsVersionIndex = vs.indexOf(\"#version \");\n\t\t\tlet fsVersionIndex = fs.indexOf(\"#version \");\n\n\t\t\tif(vsVersionIndex >= 0){\n\t\t\t\tvs = vs.replace(/(#version .*)/, `$1\\n${definesString}`);\n\t\t\t}else {\n\t\t\t\tvs = `${definesString}\\n${vs}`;\n\t\t\t}\n\n\t\t\tif(fsVersionIndex >= 0){\n\t\t\t\tfs = fs.replace(/(#version .*)/, `$1\\n${definesString}`);\n\t\t\t}else {\n\t\t\t\tfs = `${definesString}\\n${fs}`;\n\t\t\t}\n\n\t\t\tthis.vertexShader = vs;\n\t\t\tthis.fragmentShader = fs;\n\n\t\t\tif (this.opacity === 1.0) {\n\t\t\t\tthis.blending = NoBlending;\n\t\t\t\tthis.transparent = false;\n\t\t\t\tthis.depthTest = true;\n\t\t\t\tthis.depthWrite = true;\n\t\t\t\tthis.depthFunc = LessEqualDepth;\n\t\t\t} else if (this.opacity < 1.0 && !this.useEDL) {\n\t\t\t\tthis.blending = AdditiveBlending;\n\t\t\t\tthis.transparent = true;\n\t\t\t\tthis.depthTest = false;\n\t\t\t\tthis.depthWrite = true;\n\t\t\t\tthis.depthFunc = AlwaysDepth;\n\t\t\t}\n\n\t\t\tif (this.weighted) {\n\t\t\t\tthis.blending = AdditiveBlending;\n\t\t\t\tthis.transparent = true;\n\t\t\t\tthis.depthTest = true;\n\t\t\t\tthis.depthWrite = false;\n\t\t\t}\n\n\t\t\tthis.needsUpdate = true;\n\t\t}\n\n\t\tgetDefines () {\n\t\t\tlet defines = [];\n\n\t\t\tif (this.pointSizeType === PointSizeType.FIXED) {\n\t\t\t\tdefines.push('#define fixed_point_size');\n\t\t\t} else if (this.pointSizeType === PointSizeType.ATTENUATED) {\n\t\t\t\tdefines.push('#define attenuated_point_size');\n\t\t\t} else if (this.pointSizeType === PointSizeType.ADAPTIVE) {\n\t\t\t\tdefines.push('#define adaptive_point_size');\n\t\t\t}\n\n\t\t\tif (this.shape === PointShape.SQUARE) {\n\t\t\t\tdefines.push('#define square_point_shape');\n\t\t\t} else if (this.shape === PointShape.CIRCLE) {\n\t\t\t\tdefines.push('#define circle_point_shape');\n\t\t\t} else if (this.shape === PointShape.PARABOLOID) {\n\t\t\t\tdefines.push('#define paraboloid_point_shape');\n\t\t\t}\n\n\t\t\tif (this._useEDL) {\n\t\t\t\tdefines.push('#define use_edl');\n\t\t\t}\n\n\t\t\tif(this.activeAttributeName){\n\t\t\t\tlet attributeName = this.activeAttributeName.replace(/[^a-zA-Z0-9]/g, '_');\n\n\t\t\t\tdefines.push(`#define color_type_${attributeName}`);\n\t\t\t}\n\t\t\t\n\t\t\tif(this._treeType === TreeType.OCTREE){\n\t\t\t\tdefines.push('#define tree_type_octree');\n\t\t\t}else if(this._treeType === TreeType.KDTREE){\n\t\t\t\tdefines.push('#define tree_type_kdtree');\n\t\t\t}\n\n\t\t\tif (this.weighted) {\n\t\t\t\tdefines.push('#define weighted_splats');\n\t\t\t}\n\n\t\t\tfor(let [key, value] of this.defines){\n\t\t\t\tdefines.push(value);\n\t\t\t}\n\n\t\t\treturn defines.join(\"\\n\");\n\t\t}\n\n\t\tsetClipBoxes (clipBoxes) {\n\t\t\tif (!clipBoxes) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet doUpdate = (this.clipBoxes.length !== clipBoxes.length) && (clipBoxes.length === 0 || this.clipBoxes.length === 0);\n\n\t\t\tthis.uniforms.clipBoxCount.value = this.clipBoxes.length;\n\t\t\tthis.clipBoxes = clipBoxes;\n\n\t\t\tif (doUpdate) {\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\n\t\t\tthis.uniforms.clipBoxes.value = new Float32Array(this.clipBoxes.length * 16);\n\n\t\t\tfor (let i = 0; i < this.clipBoxes.length; i++) {\n\t\t\t\tlet box = clipBoxes[i];\n\n\t\t\t\tthis.uniforms.clipBoxes.value.set(box.inverse.elements, 16 * i);\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this.uniforms.clipBoxes.value.length; i++) {\n\t\t\t\tif (Number.isNaN(this.uniforms.clipBoxes.value[i])) {\n\t\t\t\t\tthis.uniforms.clipBoxes.value[i] = Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsetClipPolygons(clipPolygons, maxPolygonVertices) {\n\t\t\tif(!clipPolygons){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.clipPolygons = clipPolygons;\n\n\t\t\tlet doUpdate = (this.clipPolygons.length !== clipPolygons.length);\n\n\t\t\tif(doUpdate){\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\t\t}\n\t\t\n\t\tget gradient(){\n\t\t\treturn this._gradient;\n\t\t}\n\n\t\tset gradient (value) {\n\t\t\tif (this._gradient !== value) {\n\t\t\t\tthis._gradient = value;\n\t\t\t\tthis.gradientTexture = PointCloudMaterial$1.generateGradientTexture(this._gradient);\n\t\t\t\tthis.uniforms.gradient.value = this.gradientTexture;\n\t\t\t}\n\t\t}\n\n\t\tget matcap(){\n\t\t\treturn this._matcap;\n\t\t}\n\n\t\tset matcap (value) {\n\t\t\tif (this._matcap !== value) {\n\t\t\t\tthis._matcap = value;\n\t\t\t\tthis.matcapTexture = Potree.PointCloudMaterial.generateMatcapTexture(this._matcap);\n\t\t\t\tthis.uniforms.matcapTextureUniform.value = this.matcapTexture;\n\t\t\t}\n\t\t}\n\t\tget useOrthographicCamera() {\n\t\t\treturn this.uniforms.useOrthographicCamera.value;\n\t\t}\n\n\t\tset useOrthographicCamera(value) {\n\t\t\tif(this.uniforms.useOrthographicCamera.value !== value){\n\t\t\t\tthis.uniforms.useOrthographicCamera.value = value;\n\t\t\t}\n\t\t}\n\t\tget backfaceCulling() {\n\t\t\treturn this.uniforms.backfaceCulling.value;\n\t\t}\n\n\t\tset backfaceCulling(value) {\n\t\t\tif(this.uniforms.backfaceCulling.value !== value){\n\t\t\t\tthis.uniforms.backfaceCulling.value = value;\n\t\t\t\tthis.dispatchEvent({type: 'backface_changed', target: this});\n\t\t\t}\n\t\t}\n\n\t\trecomputeClassification () {\n\t\t\tconst classification = this.classification;\n\t\t\tconst data = this.classificationTexture.image.data;\n\n\t\t\tlet width = 256;\n\t\t\tconst black = [1, 1, 1, 1];\n\n\t\t\tlet valuesChanged = false;\n\n\t\t\tfor (let i = 0; i < width; i++) {\n\n\t\t\t\tlet color;\n\t\t\t\tlet visible = true;\n\n\t\t\t\tif (classification[i]) {\n\t\t\t\t\tcolor = classification[i].color;\n\t\t\t\t\tvisible = classification[i].visible;\n\t\t\t\t} else if (classification[i % 32]) {\n\t\t\t\t\tcolor = classification[i % 32].color;\n\t\t\t\t\tvisible = classification[i % 32].visible;\n\t\t\t\t} else if(classification.DEFAULT) {\n\t\t\t\t\tcolor = classification.DEFAULT.color;\n\t\t\t\t\tvisible = classification.DEFAULT.visible;\n\t\t\t\t}else {\n\t\t\t\t\tcolor = black;\n\t\t\t\t}\n\n\t\t\t\tconst r = parseInt(255 * color[0]);\n\t\t\t\tconst g = parseInt(255 * color[1]);\n\t\t\t\tconst b = parseInt(255 * color[2]);\n\t\t\t\tconst a = visible ? parseInt(255 * color[3]) : 0;\n\n\n\t\t\t\tif(data[4 * i + 0] !== r){\n\t\t\t\t\tdata[4 * i + 0] = r;\n\t\t\t\t\tvaluesChanged = true;\n\t\t\t\t}\n\n\t\t\t\tif(data[4 * i + 1] !== g){\n\t\t\t\t\tdata[4 * i + 1] = g;\n\t\t\t\t\tvaluesChanged = true;\n\t\t\t\t}\n\n\t\t\t\tif(data[4 * i + 2] !== b){\n\t\t\t\t\tdata[4 * i + 2] = b;\n\t\t\t\t\tvaluesChanged = true;\n\t\t\t\t}\n\n\t\t\t\tif(data[4 * i + 3] !== a){\n\t\t\t\t\tdata[4 * i + 3] = a;\n\t\t\t\t\tvaluesChanged = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(valuesChanged){\n\t\t\t\tthis.classificationTexture.needsUpdate = true;\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget spacing () {\n\t\t\treturn this.uniforms.spacing.value;\n\t\t}\n\n\t\tset spacing (value) {\n\t\t\tif (this.uniforms.spacing.value !== value) {\n\t\t\t\tthis.uniforms.spacing.value = value;\n\t\t\t}\n\t\t}\n\n\t\tget useClipBox () {\n\t\t\treturn this._useClipBox;\n\t\t}\n\n\t\tset useClipBox (value) {\n\t\t\tif (this._useClipBox !== value) {\n\t\t\t\tthis._useClipBox = value;\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\t\t}\n\n\t\tget clipTask(){\n\t\t\treturn this.uniforms.clipTask.value;\n\t\t}\n\n\t\tset clipTask(mode){\n\t\t\tthis.uniforms.clipTask.value = mode;\n\t\t}\n\n\t\tget elevationGradientRepat(){\n\t\t\treturn this.uniforms.elevationGradientRepat.value;\n\t\t}\n\n\t\tset elevationGradientRepat(mode){\n\t\t\tthis.uniforms.elevationGradientRepat.value = mode;\n\t\t}\n\n\t\tget clipMethod(){\n\t\t\treturn this.uniforms.clipMethod.value;\n\t\t}\n\n\t\tset clipMethod(mode){\n\t\t\tthis.uniforms.clipMethod.value = mode;\n\t\t}\n\n\t\tget weighted(){\n\t\t\treturn this._weighted;\n\t\t}\n\n\t\tset weighted (value) {\n\t\t\tif (this._weighted !== value) {\n\t\t\t\tthis._weighted = value;\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\t\t}\n\n\t\tget fov () {\n\t\t\treturn this.uniforms.fov.value;\n\t\t}\n\n\t\tset fov (value) {\n\t\t\tif (this.uniforms.fov.value !== value) {\n\t\t\t\tthis.uniforms.fov.value = value;\n\t\t\t\t// this.updateShaderSource();\n\t\t\t}\n\t\t}\n\n\t\tget screenWidth () {\n\t\t\treturn this.uniforms.screenWidth.value;\n\t\t}\n\n\t\tset screenWidth (value) {\n\t\t\tif (this.uniforms.screenWidth.value !== value) {\n\t\t\t\tthis.uniforms.screenWidth.value = value;\n\t\t\t\t// this.updateShaderSource();\n\t\t\t}\n\t\t}\n\n\t\tget screenHeight () {\n\t\t\treturn this.uniforms.screenHeight.value;\n\t\t}\n\n\t\tset screenHeight (value) {\n\t\t\tif (this.uniforms.screenHeight.value !== value) {\n\t\t\t\tthis.uniforms.screenHeight.value = value;\n\t\t\t\t// this.updateShaderSource();\n\t\t\t}\n\t\t}\n\n\t\tget near () {\n\t\t\treturn this.uniforms.near.value;\n\t\t}\n\n\t\tset near (value) {\n\t\t\tif (this.uniforms.near.value !== value) {\n\t\t\t\tthis.uniforms.near.value = value;\n\t\t\t}\n\t\t}\n\n\t\tget far () {\n\t\t\treturn this.uniforms.far.value;\n\t\t}\n\n\t\tset far (value) {\n\t\t\tif (this.uniforms.far.value !== value) {\n\t\t\t\tthis.uniforms.far.value = value;\n\t\t\t}\n\t\t}\n\t\t\n\t\tget opacity(){\n\t\t\treturn this.uniforms.uOpacity.value;\n\t\t}\n\n\t\tset opacity (value) {\n\t\t\tif (this.uniforms && this.uniforms.uOpacity) {\n\t\t\t\tif (this.uniforms.uOpacity.value !== value) {\n\t\t\t\t\tthis.uniforms.uOpacity.value = value;\n\t\t\t\t\tthis.updateShaderSource();\n\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\ttype: 'opacity_changed',\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t});\n\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tget activeAttributeName(){\n\t\t\treturn this._activeAttributeName;\n\t\t}\n\n\t\tset activeAttributeName(value){\n\t\t\tif (this._activeAttributeName !== value) {\n\t\t\t\tthis._activeAttributeName = value;\n\n\t\t\t\tthis.updateShaderSource();\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'active_attribute_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget pointSizeType () {\n\t\t\treturn this._pointSizeType;\n\t\t}\n\n\t\tset pointSizeType (value) {\n\t\t\tif (this._pointSizeType !== value) {\n\t\t\t\tthis._pointSizeType = value;\n\t\t\t\tthis.updateShaderSource();\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'point_size_type_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget useEDL(){\n\t\t\treturn this._useEDL;\n\t\t}\n\n\t\tset useEDL (value) {\n\t\t\tif (this._useEDL !== value) {\n\t\t\t\tthis._useEDL = value;\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\t\t}\n\n\t\tget color () {\n\t\t\treturn this.uniforms.uColor.value;\n\t\t}\n\n\t\tset color (value) {\n\t\t\tif (!this.uniforms.uColor.value.equals(value)) {\n\t\t\t\tthis.uniforms.uColor.value.copy(value);\n\t\t\t\t\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'color_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget shape () {\n\t\t\treturn this._shape;\n\t\t}\n\n\t\tset shape (value) {\n\t\t\tif (this._shape !== value) {\n\t\t\t\tthis._shape = value;\n\t\t\t\tthis.updateShaderSource();\n\t\t\t\tthis.dispatchEvent({type: 'point_shape_changed', target: this});\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget treeType () {\n\t\t\treturn this._treeType;\n\t\t}\n\n\t\tset treeType (value) {\n\t\t\tif (this._treeType !== value) {\n\t\t\t\tthis._treeType = value;\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\t\t}\n\n\t\tget bbSize () {\n\t\t\treturn this.uniforms.bbSize.value;\n\t\t}\n\n\t\tset bbSize (value) {\n\t\t\tthis.uniforms.bbSize.value = value;\n\t\t}\n\n\t\tget size () {\n\t\t\treturn this.uniforms.size.value;\n\t\t}\n\n\t\tset size (value) {\n\t\t\tif (this.uniforms.size.value !== value) {\n\t\t\t\tthis.uniforms.size.value = value;\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'point_size_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget minSize(){\n\t\t\treturn this.uniforms.minSize.value;\n\t\t}\n\n\t\tset minSize(value){\n\t\t\tif (this.uniforms.minSize.value !== value) {\n\t\t\t\tthis.uniforms.minSize.value = value;\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'point_size_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget elevationRange () {\n\t\t\treturn this.uniforms.elevationRange.value;\n\t\t}\n\n\t\tset elevationRange (value) {\n\t\t\tlet changed = this.uniforms.elevationRange.value[0] !== value[0]\n\t\t\t\t|| this.uniforms.elevationRange.value[1] !== value[1];\n\n\t\t\tif(changed){\n\t\t\t\tthis.uniforms.elevationRange.value = value;\n\n\t\t\t\tthis._defaultElevationRangeChanged = true;\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget heightMin () {\n\t\t\treturn this.uniforms.elevationRange.value[0];\n\t\t}\n\n\t\tset heightMin (value) {\n\t\t\tthis.elevationRange = [value, this.elevationRange[1]];\n\t\t}\n\n\t\tget heightMax () {\n\t\t\treturn this.uniforms.elevationRange.value[1];\n\t\t}\n\n\t\tset heightMax (value) {\n\t\t\tthis.elevationRange = [this.elevationRange[0], value];\n\t\t}\n\n\t\tget transition () {\n\t\t\treturn this.uniforms.transition.value;\n\t\t}\n\n\t\tset transition (value) {\n\t\t\tthis.uniforms.transition.value = value;\n\t\t}\n\n\t\tget intensityRange () {\n\t\t\treturn this.uniforms.intensityRange.value;\n\t\t}\n\n\t\tset intensityRange (value) {\n\t\t\tif (!(value instanceof Array && value.length === 2)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value[0] === this.uniforms.intensityRange.value[0] &&\n\t\t\t\tvalue[1] === this.uniforms.intensityRange.value[1]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.uniforms.intensityRange.value = value;\n\n\t\t\tthis._defaultIntensityRangeChanged = true;\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'material_property_changed',\n\t\t\t\ttarget: this\n\t\t\t});\n\t\t}\n\n\t\tget intensityGamma () {\n\t\t\treturn this.uniforms.intensity_gbc.value[0];\n\t\t}\n\n\t\tset intensityGamma (value) {\n\t\t\tif (this.uniforms.intensity_gbc.value[0] !== value) {\n\t\t\t\tthis.uniforms.intensity_gbc.value[0] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget intensityContrast () {\n\t\t\treturn this.uniforms.intensity_gbc.value[2];\n\t\t}\n\n\t\tset intensityContrast (value) {\n\t\t\tif (this.uniforms.intensity_gbc.value[2] !== value) {\n\t\t\t\tthis.uniforms.intensity_gbc.value[2] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget intensityBrightness () {\n\t\t\treturn this.uniforms.intensity_gbc.value[1];\n\t\t}\n\n\t\tset intensityBrightness (value) {\n\t\t\tif (this.uniforms.intensity_gbc.value[1] !== value) {\n\t\t\t\tthis.uniforms.intensity_gbc.value[1] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget rgbGamma () {\n\t\t\treturn this.uniforms.uRGB_gbc.value[0];\n\t\t}\n\n\t\tset rgbGamma (value) {\n\t\t\tif (this.uniforms.uRGB_gbc.value[0] !== value) {\n\t\t\t\tthis.uniforms.uRGB_gbc.value[0] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget rgbContrast () {\n\t\t\treturn this.uniforms.uRGB_gbc.value[2];\n\t\t}\n\n\t\tset rgbContrast (value) {\n\t\t\tif (this.uniforms.uRGB_gbc.value[2] !== value) {\n\t\t\t\tthis.uniforms.uRGB_gbc.value[2] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget rgbBrightness () {\n\t\t\treturn this.uniforms.uRGB_gbc.value[1];\n\t\t}\n\n\t\tset rgbBrightness (value) {\n\t\t\tif (this.uniforms.uRGB_gbc.value[1] !== value) {\n\t\t\t\tthis.uniforms.uRGB_gbc.value[1] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t\n\t\tget extraGamma () {\n\t\t\treturn this.uniforms.uExtraGammaBrightContr.value[0];\n\t\t}\n\n\t\tset extraGamma (value) {\n\t\t\tif (this.uniforms.uExtraGammaBrightContr.value[0] !== value) {\n\t\t\t\tthis.uniforms.uExtraGammaBrightContr.value[0] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget extraBrightness () {\n\t\t\treturn this.uniforms.uExtraGammaBrightContr.value[1];\n\t\t}\n\n\t\tset extraBrightness (value) {\n\t\t\tif (this.uniforms.uExtraGammaBrightContr.value[1] !== value) {\n\t\t\t\tthis.uniforms.uExtraGammaBrightContr.value[1] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget extraContrast () {\n\t\t\treturn this.uniforms.uExtraGammaBrightContr.value[2];\n\t\t}\n\n\t\tset extraContrast (value) {\n\t\t\tif (this.uniforms.uExtraGammaBrightContr.value[2] !== value) {\n\t\t\t\tthis.uniforms.uExtraGammaBrightContr.value[2] = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tgetRange(attributeName){\n\t\t\treturn this.ranges.get(attributeName);\n\t\t}\n\n\t\tsetRange(attributeName, newRange){\n\n\t\t\tlet rangeChanged = false;\n\n\t\t\tlet oldRange = this.ranges.get(attributeName);\n\n\t\t\tif(oldRange != null && newRange != null){\n\t\t\t\trangeChanged = oldRange[0] !== newRange[0] || oldRange[1] !== newRange[1];\n\t\t\t}else {\n\t\t\t\trangeChanged = true;\n\t\t\t}\n\n\t\t\tthis.ranges.set(attributeName, newRange);\n\n\t\t\tif(rangeChanged){\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget extraRange () {\n\t\t\treturn this.uniforms.uExtraRange.value;\n\t\t}\n\n\t\tset extraRange (value) {\n\t\t\tif (!(value instanceof Array && value.length === 2)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (value[0] === this.uniforms.uExtraRange.value[0] &&\n\t\t\t\tvalue[1] === this.uniforms.uExtraRange.value[1]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.uniforms.uExtraRange.value = value;\n\n\t\t\tthis._defaultExtraRangeChanged = true;\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'material_property_changed',\n\t\t\t\ttarget: this\n\t\t\t});\n\t\t}\n\n\t\tget weightRGB () {\n\t\t\treturn this.uniforms.wRGB.value;\n\t\t}\n\n\t\tset weightRGB (value) {\n\t\t\tif(this.uniforms.wRGB.value !== value){\n\t\t\t\tthis.uniforms.wRGB.value = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget weightIntensity () {\n\t\t\treturn this.uniforms.wIntensity.value;\n\t\t}\n\n\t\tset weightIntensity (value) {\n\t\t\tif(this.uniforms.wIntensity.value !== value){\n\t\t\t\tthis.uniforms.wIntensity.value = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget weightElevation () {\n\t\t\treturn this.uniforms.wElevation.value;\n\t\t}\n\n\t\tset weightElevation (value) {\n\t\t\tif(this.uniforms.wElevation.value !== value){\n\t\t\t\tthis.uniforms.wElevation.value = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget weightClassification () {\n\t\t\treturn this.uniforms.wClassification.value;\n\t\t}\n\n\t\tset weightClassification (value) {\n\t\t\tif(this.uniforms.wClassification.value !== value){\n\t\t\t\tthis.uniforms.wClassification.value = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget weightReturnNumber () {\n\t\t\treturn this.uniforms.wReturnNumber.value;\n\t\t}\n\n\t\tset weightReturnNumber (value) {\n\t\t\tif(this.uniforms.wReturnNumber.value !== value){\n\t\t\t\tthis.uniforms.wReturnNumber.value = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tget weightSourceID () {\n\t\t\treturn this.uniforms.wSourceID.value;\n\t\t}\n\n\t\tset weightSourceID (value) {\n\t\t\tif(this.uniforms.wSourceID.value !== value){\n\t\t\t\tthis.uniforms.wSourceID.value = value;\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'material_property_changed',\n\t\t\t\t\ttarget: this\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tstatic generateGradientTexture (gradient) {\n\t\t\tlet size = 64;\n\n\t\t\t// create canvas\n\t\t\tlet canvas = document.createElement('canvas');\n\t\t\tcanvas.width = size;\n\t\t\tcanvas.height = size;\n\n\t\t\t// get context\n\t\t\tlet context = canvas.getContext('2d');\n\n\t\t\t// draw gradient\n\t\t\tcontext.rect(0, 0, size, size);\n\t\t\tlet ctxGradient = context.createLinearGradient(0, 0, size, size);\n\n\t\t\tfor (let i = 0; i < gradient.length; i++) {\n\t\t\t\tlet step = gradient[i];\n\n\t\t\t\tctxGradient.addColorStop(step[0], '#' + step[1].getHexString());\n\t\t\t}\n\n\t\t\tcontext.fillStyle = ctxGradient;\n\t\t\tcontext.fill();\n\t\t\t\n\t\t\t//let texture = new THREE.Texture(canvas);\n\t\t\tlet texture = new CanvasTexture(canvas);\n\t\t\ttexture.needsUpdate = true;\n\t\t\t\n\t\t\ttexture.minFilter = LinearFilter;\n\t\t\ttexture.wrap = RepeatWrapping;\n\t\t\ttexture.repeat = 2;\n\t\t\t// textureImage = texture.image;\n\n\t\t\treturn texture;\n\t\t}\n\t\t\n\t\tstatic generateMatcapTexture (matcap) {\n\t\tvar url = new URL(Potree.resourcePath + \"/textures/matcap/\" + matcap).href;\n\t\tlet texture = new TextureLoader().load( url );\n\t\t\ttexture.magFilter = texture.minFilter = LinearFilter; \n\t\t\ttexture.needsUpdate = true;\n\t\t\t// PotreeConverter_1.6_2018_07_29_windows_x64\\PotreeConverter.exe autzen_xyzrgbXYZ_ascii.xyz -f xyzrgbXYZ -a RGB NORMAL -o autzen_xyzrgbXYZ_ascii_a -p index --overwrite\n\t\t\t// Switch matcap texture on the fly : viewer.scene.pointclouds[0].material.matcap = 'matcap1.jpg'; \n\t\t\t// For non power of 2, use LinearFilter and dont generate mipmaps, For power of 2, use NearestFilter and generate mipmaps : matcap2.jpg 1 2 8 11 12 13\n\t\t\treturn texture; \n\t\t}\n\n\t\tdisableEvents(){\n\t\t\tif(this._hiddenListeners === undefined){\n\t\t\t\tthis._hiddenListeners = this._listeners;\n\t\t\t\tthis._listeners = {};\n\t\t\t}\n\t\t};\n\n\t\tenableEvents(){\n\t\t\tthis._listeners = this._hiddenListeners;\n\t\t\tthis._hiddenListeners = undefined;\n\t\t};\n\n\t\t// copyFrom(from){\n\n\t\t// \tvar a = 10;\n\n\t\t// \tfor(let name of Object.keys(this.uniforms)){\n\t\t// \t\tthis.uniforms[name].value = from.uniforms[name].value;\n\t\t// \t}\n\t\t// }\n\n\t\t// copy(from){\n\t\t// \tthis.copyFrom(from);\n\t\t// }\n\n\t}\n\n\tclass PointCloudOctreeNode extends PointCloudTreeNode {\n\t\tconstructor () {\n\t\t\tsuper();\n\n\t\t\t//this.children = {};\n\t\t\tthis.children = [];\n\t\t\tthis.sceneNode = null;\n\t\t\tthis.octree = null;\n\t\t}\n\n\t\tgetNumPoints () {\n\t\t\treturn this.geometryNode.numPoints;\n\t\t}\n\n\t\tisLoaded () {\n\t\t\treturn true;\n\t\t}\n\n\t\tisTreeNode () {\n\t\t\treturn true;\n\t\t}\n\n\t\tisGeometryNode () {\n\t\t\treturn false;\n\t\t}\n\n\t\tgetLevel () {\n\t\t\treturn this.geometryNode.level;\n\t\t}\n\n\t\tgetBoundingSphere () {\n\t\t\treturn this.geometryNode.boundingSphere;\n\t\t}\n\n\t\tgetBoundingBox () {\n\t\t\treturn this.geometryNode.boundingBox;\n\t\t}\n\n\t\tgetChildren () {\n\t\t\tlet children = [];\n\n\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\tif (this.children[i]) {\n\t\t\t\t\tchildren.push(this.children[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn children;\n\t\t}\n\n\t\tgetPointsInBox(boxNode){\n\n\t\t\tif(!this.sceneNode){\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet buffer = this.geometryNode.buffer;\n\n\t\t\tlet posOffset = buffer.offset(\"position\");\n\t\t\tlet stride = buffer.stride;\n\t\t\tlet view = new DataView(buffer.data);\n\n\t\t\tlet worldToBox = boxNode.matrixWorld.clone().invert();\n\t\t\tlet objectToBox = new Matrix4().multiplyMatrices(worldToBox, this.sceneNode.matrixWorld);\n\n\t\t\tlet inBox = [];\n\n\t\t\tlet pos = new Vector4();\n\t\t\tfor(let i = 0; i < buffer.numElements; i++){\n\t\t\t\tlet x = view.getFloat32(i * stride + posOffset + 0, true);\n\t\t\t\tlet y = view.getFloat32(i * stride + posOffset + 4, true);\n\t\t\t\tlet z = view.getFloat32(i * stride + posOffset + 8, true);\n\n\t\t\t\tpos.set(x, y, z, 1);\n\t\t\t\tpos.applyMatrix4(objectToBox);\n\n\t\t\t\tif(-0.5 < pos.x && pos.x < 0.5){\n\t\t\t\t\tif(-0.5 < pos.y && pos.y < 0.5){\n\t\t\t\t\t\tif(-0.5 < pos.z && pos.z < 0.5){\n\t\t\t\t\t\t\tpos.set(x, y, z, 1).applyMatrix4(this.sceneNode.matrixWorld);\n\t\t\t\t\t\t\tinBox.push(new Vector3(pos.x, pos.y, pos.z));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn inBox;\n\t\t}\n\n\t\tget name () {\n\t\t\treturn this.geometryNode.name;\n\t\t}\n\t};\n\n\tclass PointCloudOctree extends PointCloudTree {\n\t\tconstructor (geometry, material) {\n\t\t\tsuper();\n\n\t\t\tthis.pointBudget = Infinity;\n\t\t\tthis.pcoGeometry = geometry;\n\t\t\tthis.boundingBox = this.pcoGeometry.boundingBox;\n\t\t\tthis.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere());\n\t\t\tthis.material = material || new PointCloudMaterial$1();\n\t\t\tthis.visiblePointsTarget = 2 * 1000 * 1000;\n\t\t\tthis.minimumNodePixelSize = 150;\n\t\t\tthis.level = 0;\n\t\t\tthis.position.copy(geometry.offset);\n\t\t\tthis.updateMatrix();\n\n\t\t\t{\n\n\t\t\t\tlet priorityQueue = [\"rgba\", \"rgb\", \"intensity\", \"classification\"];\n\t\t\t\tlet selected = \"rgba\";\n\n\t\t\t\tfor(let attributeName of priorityQueue){\n\t\t\t\t\tlet attribute = this.pcoGeometry.pointAttributes.attributes.find(a => a.name === attributeName);\n\n\t\t\t\t\tif(!attribute){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet min = attribute.range[0].constructor.name === \"Array\" ? attribute.range[0] : [attribute.range[0]];\n\t\t\t\t\tlet max = attribute.range[1].constructor.name === \"Array\" ? attribute.range[1] : [attribute.range[1]];\n\n\t\t\t\t\tlet range_min = new Vector3(...min);\n\t\t\t\t\tlet range_max = new Vector3(...max);\n\t\t\t\t\tlet range = range_min.distanceTo(range_max);\n\n\t\t\t\t\tif(range === 0){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tselected = attributeName;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis.material.activeAttributeName = selected;\n\t\t\t}\n\n\t\t\tthis.showBoundingBox = false;\n\t\t\tthis.boundingBoxNodes = [];\n\t\t\tthis.loadQueue = [];\n\t\t\tthis.visibleBounds = new Box3();\n\t\t\tthis.visibleNodes = [];\n\t\t\tthis.visibleGeometry = [];\n\t\t\tthis.generateDEM = false;\n\t\t\tthis.profileRequests = [];\n\t\t\tthis.name = '';\n\t\t\tthis._visible = true;\n\n\t\t\t{\n\t\t\t\tlet box = [this.pcoGeometry.tightBoundingBox, this.getBoundingBoxWorld()]\n\t\t\t\t\t.find(v => v !== undefined);\n\n\t\t\t\tthis.updateMatrixWorld(true);\n\t\t\t\tbox = Utils.computeTransformedBoundingBox(box, this.matrixWorld);\n\n\t\t\t\tlet bMin = box.min.z;\n\t\t\t\tlet bMax = box.max.z;\n\t\t\t\tthis.material.heightMin = bMin;\n\t\t\t\tthis.material.heightMax = bMax;\n\t\t\t}\n\n\t\t\t// TODO read projection from file instead\n\t\t\tthis.projection = geometry.projection;\n\t\t\tthis.fallbackProjection = geometry.fallbackProjection;\n\n\t\t\tthis.root = this.pcoGeometry.root;\n\t\t}\n\n\t\tsetName (name) {\n\t\t\tif (this.name !== name) {\n\t\t\t\tthis.name = name;\n\t\t\t\tthis.dispatchEvent({type: 'name_changed', name: name, pointcloud: this});\n\t\t\t}\n\t\t}\n\n\t\tgetName () {\n\t\t\treturn this.name;\n\t\t}\n\n\t\tgetAttribute(name){\n\n\t\t\tconst attribute = this.pcoGeometry.pointAttributes.attributes.find(a => a.name === name);\n\n\t\t\tif(attribute){\n\t\t\t\treturn attribute;\n\t\t\t}else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tgetAttributes(){\n\t\t\treturn this.pcoGeometry.pointAttributes;\n\t\t}\n\n\t\ttoTreeNode (geometryNode, parent) {\n\t\t\tlet node = new PointCloudOctreeNode();\n\n\t\t\t// if(geometryNode.name === \"r40206\"){\n\t\t\t//\tconsole.log(\"creating node for r40206\");\n\t\t\t// }\n\t\t\tlet sceneNode = new Points(geometryNode.geometry, this.material);\n\t\t\tsceneNode.name = geometryNode.name;\n\t\t\tsceneNode.position.copy(geometryNode.boundingBox.min);\n\t\t\tsceneNode.frustumCulled = false;\n\t\t\tsceneNode.onBeforeRender = (_this, scene, camera, geometry, material, group) => {\n\t\t\t\tif (material.program) {\n\t\t\t\t\t_this.getContext().useProgram(material.program.program);\n\n\t\t\t\t\tif (material.program.getUniforms().map.level) {\n\t\t\t\t\t\tlet level = geometryNode.getLevel();\n\t\t\t\t\t\tmaterial.uniforms.level.value = level;\n\t\t\t\t\t\tmaterial.program.getUniforms().map.level.setValue(_this.getContext(), level);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.visibleNodeTextureOffsets && material.program.getUniforms().map.vnStart) {\n\t\t\t\t\t\tlet vnStart = this.visibleNodeTextureOffsets.get(node);\n\t\t\t\t\t\tmaterial.uniforms.vnStart.value = vnStart;\n\t\t\t\t\t\tmaterial.program.getUniforms().map.vnStart.setValue(_this.getContext(), vnStart);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (material.program.getUniforms().map.pcIndex) {\n\t\t\t\t\t\tlet i = node.pcIndex ? node.pcIndex : this.visibleNodes.indexOf(node);\n\t\t\t\t\t\tmaterial.uniforms.pcIndex.value = i;\n\t\t\t\t\t\tmaterial.program.getUniforms().map.pcIndex.setValue(_this.getContext(), i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// { // DEBUG\n\t\t\t//\tlet sg = new THREE.SphereGeometry(1, 16, 16);\n\t\t\t//\tlet sm = new THREE.MeshNormalMaterial();\n\t\t\t//\tlet s = new THREE.Mesh(sg, sm);\n\t\t\t//\ts.scale.set(5, 5, 5);\n\t\t\t//\ts.position.copy(geometryNode.mean)\n\t\t\t//\t\t.add(this.position)\n\t\t\t//\t\t.add(geometryNode.boundingBox.min);\n\t\t\t//\n\t\t\t//\tviewer.scene.scene.add(s);\n\t\t\t// }\n\n\t\t\tnode.geometryNode = geometryNode;\n\t\t\tnode.sceneNode = sceneNode;\n\t\t\tnode.pointcloud = this;\n\t\t\tnode.children = [];\n\t\t\t//for (let key in geometryNode.children) {\n\t\t\t//\tnode.children[key] = geometryNode.children[key];\n\t\t\t//}\n\t\t\tfor(let i = 0; i < 8; i++){\n\t\t\t\tnode.children[i] = geometryNode.children[i];\n\t\t\t}\n\n\t\t\tif (!parent) {\n\t\t\t\tthis.root = node;\n\t\t\t\tthis.add(sceneNode);\n\t\t\t} else {\n\t\t\t\tlet childIndex = parseInt(geometryNode.name[geometryNode.name.length - 1]);\n\t\t\t\tparent.sceneNode.add(sceneNode);\n\t\t\t\tparent.children[childIndex] = node;\n\t\t\t}\n\n\t\t\tlet disposeListener = function () {\n\t\t\t\tlet childIndex = parseInt(geometryNode.name[geometryNode.name.length - 1]);\n\t\t\t\tparent.sceneNode.remove(node.sceneNode);\n\t\t\t\tparent.children[childIndex] = geometryNode;\n\t\t\t};\n\t\t\tgeometryNode.oneTimeDisposeHandlers.push(disposeListener);\n\n\t\t\treturn node;\n\t\t}\n\n\t\tupdateVisibleBounds () {\n\t\t\tlet leafNodes = [];\n\t\t\tfor (let i = 0; i < this.visibleNodes.length; i++) {\n\t\t\t\tlet node = this.visibleNodes[i];\n\t\t\t\tlet isLeaf = true;\n\n\t\t\t\tfor (let j = 0; j < node.children.length; j++) {\n\t\t\t\t\tlet child = node.children[j];\n\t\t\t\t\tif (child instanceof PointCloudOctreeNode) {\n\t\t\t\t\t\tisLeaf = isLeaf && !child.sceneNode.visible;\n\t\t\t\t\t} else if (child instanceof PointCloudOctreeGeometryNode) {\n\t\t\t\t\t\tisLeaf = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isLeaf) {\n\t\t\t\t\tleafNodes.push(node);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.visibleBounds.min = new Vector3(Infinity, Infinity, Infinity);\n\t\t\tthis.visibleBounds.max = new Vector3(-Infinity, -Infinity, -Infinity);\n\t\t\tfor (let i = 0; i < leafNodes.length; i++) {\n\t\t\t\tlet node = leafNodes[i];\n\n\t\t\t\tthis.visibleBounds.expandByPoint(node.getBoundingBox().min);\n\t\t\t\tthis.visibleBounds.expandByPoint(node.getBoundingBox().max);\n\t\t\t}\n\t\t}\n\n\t\tupdateMaterial (material, visibleNodes, camera, renderer) {\n\t\t\tmaterial.fov = camera.fov * (Math.PI / 180);\n\t\t\tmaterial.screenWidth = renderer.domElement.clientWidth;\n\t\t\tmaterial.screenHeight = renderer.domElement.clientHeight;\n\t\t\tmaterial.spacing = this.pcoGeometry.spacing; // * Math.max(this.scale.x, this.scale.y, this.scale.z);\n\t\t\tmaterial.near = camera.near;\n\t\t\tmaterial.far = camera.far;\n\t\t\tmaterial.uniforms.octreeSize.value = this.pcoGeometry.boundingBox.getSize(new Vector3()).x;\n\t\t}\n\n\t\tcomputeVisibilityTextureData(nodes, camera){\n\n\t\t\tif(Potree.measureTimings) performance.mark(\"computeVisibilityTextureData-start\");\n\n\t\t\tlet data = new Uint8Array(nodes.length * 4);\n\t\t\tlet visibleNodeTextureOffsets = new Map();\n\n\t\t\t// copy array\n\t\t\tnodes = nodes.slice();\n\n\t\t\t// sort by level and index, e.g. r, r0, r3, r4, r01, r07, r30, ...\n\t\t\tlet sort = function (a, b) {\n\t\t\t\tlet na = a.geometryNode.name;\n\t\t\t\tlet nb = b.geometryNode.name;\n\t\t\t\tif (na.length !== nb.length) return na.length - nb.length;\n\t\t\t\tif (na < nb) return -1;\n\t\t\t\tif (na > nb) return 1;\n\t\t\t\treturn 0;\n\t\t\t};\n\t\t\tnodes.sort(sort);\n\n\t\t\tlet worldDir = new Vector3();\n\n\t\t\tlet nodeMap = new Map();\n\t\t\tlet offsetsToChild = new Array(nodes.length).fill(Infinity);\n\n\t\t\tfor(let i = 0; i < nodes.length; i++){\n\t\t\t\tlet node = nodes[i];\n\n\t\t\t\tnodeMap.set(node.name, node);\n\t\t\t\tvisibleNodeTextureOffsets.set(node, i);\n\n\t\t\t\tif(i > 0){\n\t\t\t\t\tlet index = parseInt(node.name.slice(-1));\n\t\t\t\t\tlet parentName = node.name.slice(0, -1);\n\t\t\t\t\tlet parent = nodeMap.get(parentName);\n\t\t\t\t\tlet parentOffset = visibleNodeTextureOffsets.get(parent);\n\n\t\t\t\t\tlet parentOffsetToChild = (i - parentOffset);\n\n\t\t\t\t\toffsetsToChild[parentOffset] = Math.min(offsetsToChild[parentOffset], parentOffsetToChild);\n\n\t\t\t\t\tdata[parentOffset * 4 + 0] = data[parentOffset * 4 + 0] | (1 << index);\n\t\t\t\t\tdata[parentOffset * 4 + 1] = (offsetsToChild[parentOffset] >> 8);\n\t\t\t\t\tdata[parentOffset * 4 + 2] = (offsetsToChild[parentOffset] % 256);\n\t\t\t\t}\n\n\t\t\t\tlet density = node.geometryNode.density;\n\t\t\t\t\n\t\t\t\tif(typeof density === \"number\" && !Number.isNaN(density)){\n\t\t\t\t\tlet lodOffset = Math.log2(density) / 2 - 1.5;\n\n\t\t\t\t\tlet offsetUint8 = (lodOffset + 10) * 10;\n\n\t\t\t\t\tdata[i * 4 + 3] = offsetUint8;\n\t\t\t\t}else {\n\t\t\t\t\tdata[i * 4 + 3] = 100;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif(Potree.measureTimings){\n\t\t\t\tperformance.mark(\"computeVisibilityTextureData-end\");\n\t\t\t\tperformance.measure(\"render.computeVisibilityTextureData\", \"computeVisibilityTextureData-start\", \"computeVisibilityTextureData-end\");\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\toffsets: visibleNodeTextureOffsets\n\t\t\t};\n\t\t}\n\n\t\tnodeIntersectsProfile (node, profile) {\n\t\t\tlet bbWorld = node.boundingBox.clone().applyMatrix4(this.matrixWorld);\n\t\t\tlet bsWorld = bbWorld.getBoundingSphere(new Sphere());\n\n\t\t\tlet intersects = false;\n\n\t\t\tfor (let i = 0; i < profile.points.length - 1; i++) {\n\n\t\t\t\tlet start = new Vector3(profile.points[i + 0].x, profile.points[i + 0].y, bsWorld.center.z);\n\t\t\t\tlet end = new Vector3(profile.points[i + 1].x, profile.points[i + 1].y, bsWorld.center.z);\n\n\t\t\t\tlet closest = new Line3(start, end).closestPointToPoint(bsWorld.center, true, new Vector3());\n\t\t\t\tlet distance = closest.distanceTo(bsWorld.center);\n\n\t\t\t\tintersects = intersects || (distance < (bsWorld.radius + profile.width));\n\t\t\t}\n\n\t\t\t//console.log(`${node.name}: ${intersects}`);\n\n\t\t\treturn intersects;\n\t\t}\n\n\t\tdeepestNodeAt(position){\n\t\t\t\n\t\t\tconst toObjectSpace = this.matrixWorld.clone().invert();\n\n\t\t\tconst objPos = position.clone().applyMatrix4(toObjectSpace);\n\n\t\t\tlet current = this.root;\n\t\t\twhile(true){\n\n\t\t\t\tlet containingChild = null;\n\n\t\t\t\tfor(const child of current.children){\n\n\t\t\t\t\tif(child !== undefined){\n\t\t\t\t\t\tif(child.getBoundingBox().containsPoint(objPos)){\n\t\t\t\t\t\t\tcontainingChild = child;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(containingChild !== null && containingChild instanceof PointCloudOctreeNode){\n\t\t\t\t\tcurrent = containingChild;\n\t\t\t\t}else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst deepest = current;\n\n\t\t\treturn deepest;\n\t\t}\n\n\t\tnodesOnRay (nodes, ray) {\n\t\t\tlet nodesOnRay = [];\n\n\t\t\tlet _ray = ray.clone();\n\t\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\t\tlet node = nodes[i];\n\t\t\t\tlet sphere = node.getBoundingSphere().clone().applyMatrix4(this.matrixWorld);\n\n\t\t\t\tif (_ray.intersectsSphere(sphere)) {\n\t\t\t\t\tnodesOnRay.push(node);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn nodesOnRay;\n\t\t}\n\n\t\tupdateMatrixWorld (force) {\n\t\t\tif (this.matrixAutoUpdate === true) this.updateMatrix();\n\n\t\t\tif (this.matrixWorldNeedsUpdate === true || force === true) {\n\t\t\t\tif (!this.parent) {\n\t\t\t\t\tthis.matrixWorld.copy(this.matrix);\n\t\t\t\t} else {\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);\n\t\t\t\t}\n\n\t\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\t\tforce = true;\n\t\t\t}\n\t\t}\n\n\t\thideDescendants (object) {\n\t\t\tlet stack = [];\n\t\t\tfor (let i = 0; i < object.children.length; i++) {\n\t\t\t\tlet child = object.children[i];\n\t\t\t\tif (child.visible) {\n\t\t\t\t\tstack.push(child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tlet object = stack.shift();\n\n\t\t\t\tobject.visible = false;\n\n\t\t\t\tfor (let i = 0; i < object.children.length; i++) {\n\t\t\t\t\tlet child = object.children[i];\n\t\t\t\t\tif (child.visible) {\n\t\t\t\t\t\tstack.push(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmoveToOrigin () {\n\t\t\tthis.position.set(0, 0, 0);\n\t\t\tthis.updateMatrixWorld(true);\n\t\t\tlet box = this.boundingBox;\n\t\t\tlet transform = this.matrixWorld;\n\t\t\tlet tBox = Utils.computeTransformedBoundingBox(box, transform);\n\t\t\tthis.position.set(0, 0, 0).sub(tBox.getCenter(new Vector3()));\n\t\t};\n\n\t\tmoveToGroundPlane () {\n\t\t\tthis.updateMatrixWorld(true);\n\t\t\tlet box = this.boundingBox;\n\t\t\tlet transform = this.matrixWorld;\n\t\t\tlet tBox = Utils.computeTransformedBoundingBox(box, transform);\n\t\t\tthis.position.y += -tBox.min.y;\n\t\t};\n\n\t\tgetBoundingBoxWorld () {\n\t\t\tthis.updateMatrixWorld(true);\n\t\t\tlet box = this.boundingBox;\n\t\t\tlet transform = this.matrixWorld;\n\t\t\tlet tBox = Utils.computeTransformedBoundingBox(box, transform);\n\n\t\t\treturn tBox;\n\t\t};\n\n\t\t/**\n\t\t * returns points inside the profile points\n\t\t *\n\t\t * maxDepth:\t\tsearch points up to the given octree depth\n\t\t *\n\t\t *\n\t\t * The return value is an array with all segments of the profile path\n\t\t *\tlet segment = {\n\t\t *\t\tstart:\tTHREE.Vector3,\n\t\t *\t\tend:\tTHREE.Vector3,\n\t\t *\t\tpoints: {}\n\t\t *\t\tproject: function()\n\t\t *\t};\n\t\t *\n\t\t * The project() function inside each segment can be used to transform\n\t\t * that segments point coordinates to line up along the x-axis.\n\t\t *\n\t\t *\n\t\t */\n\t\tgetPointsInProfile (profile, maxDepth, callback) {\n\t\t\tif (callback) {\n\t\t\t\tlet request = new Potree.ProfileRequest(this, profile, maxDepth, callback);\n\t\t\t\tthis.profileRequests.push(request);\n\n\t\t\t\treturn request;\n\t\t\t}\n\n\t\t\tlet points = {\n\t\t\t\tsegments: [],\n\t\t\t\tboundingBox: new Box3(),\n\t\t\t\tprojectedBoundingBox: new Box2()\n\t\t\t};\n\n\t\t\t// evaluate segments\n\t\t\tfor (let i = 0; i < profile.points.length - 1; i++) {\n\t\t\t\tlet start = profile.points[i];\n\t\t\t\tlet end = profile.points[i + 1];\n\t\t\t\tlet ps = this.getProfile(start, end, profile.width, maxDepth);\n\n\t\t\t\tlet segment = {\n\t\t\t\t\tstart: start,\n\t\t\t\t\tend: end,\n\t\t\t\t\tpoints: ps,\n\t\t\t\t\tproject: null\n\t\t\t\t};\n\n\t\t\t\tpoints.segments.push(segment);\n\n\t\t\t\tpoints.boundingBox.expandByPoint(ps.boundingBox.min);\n\t\t\t\tpoints.boundingBox.expandByPoint(ps.boundingBox.max);\n\t\t\t}\n\n\t\t\t// add projection functions to the segments\n\t\t\tlet mileage = new Vector3();\n\t\t\tfor (let i = 0; i < points.segments.length; i++) {\n\t\t\t\tlet segment = points.segments[i];\n\t\t\t\tlet start = segment.start;\n\t\t\t\tlet end = segment.end;\n\n\t\t\t\tlet project = (function (_start, _end, _mileage, _boundingBox) {\n\t\t\t\t\tlet start = _start;\n\t\t\t\t\tlet end = _end;\n\t\t\t\t\tlet mileage = _mileage;\n\t\t\t\t\tlet boundingBox = _boundingBox;\n\n\t\t\t\t\tlet xAxis = new Vector3(1, 0, 0);\n\t\t\t\t\tlet dir = new Vector3().subVectors(end, start);\n\t\t\t\t\tdir.y = 0;\n\t\t\t\t\tdir.normalize();\n\t\t\t\t\tlet alpha = Math.acos(xAxis.dot(dir));\n\t\t\t\t\tif (dir.z > 0) {\n\t\t\t\t\t\talpha = -alpha;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn function (position) {\n\t\t\t\t\t\tlet toOrigin = new Matrix4().makeTranslation(-start.x, -boundingBox.min.y, -start.z);\n\t\t\t\t\t\tlet alignWithX = new Matrix4().makeRotationY(-alpha);\n\t\t\t\t\t\tlet applyMileage = new Matrix4().makeTranslation(mileage.x, 0, 0);\n\n\t\t\t\t\t\tlet pos = position.clone();\n\t\t\t\t\t\tpos.applyMatrix4(toOrigin);\n\t\t\t\t\t\tpos.applyMatrix4(alignWithX);\n\t\t\t\t\t\tpos.applyMatrix4(applyMileage);\n\n\t\t\t\t\t\treturn pos;\n\t\t\t\t\t};\n\t\t\t\t}(start, end, mileage.clone(), points.boundingBox.clone()));\n\n\t\t\t\tsegment.project = project;\n\n\t\t\t\tmileage.x += new Vector3(start.x, 0, start.z).distanceTo(new Vector3(end.x, 0, end.z));\n\t\t\t\tmileage.y += end.y - start.y;\n\t\t\t}\n\n\t\t\tpoints.projectedBoundingBox.min.x = 0;\n\t\t\tpoints.projectedBoundingBox.min.y = points.boundingBox.min.y;\n\t\t\tpoints.projectedBoundingBox.max.x = mileage.x;\n\t\t\tpoints.projectedBoundingBox.max.y = points.boundingBox.max.y;\n\n\t\t\treturn points;\n\t\t}\n\n\t\t/**\n\t\t * returns points inside the given profile bounds.\n\t\t *\n\t\t * start:\n\t\t * end:\n\t\t * width:\n\t\t * depth:\t\tsearch points up to the given octree depth\n\t\t * callback:\tif specified, points are loaded before searching\n\t\t *\n\t\t *\n\t\t */\n\t\tgetProfile (start, end, width, depth, callback) {\n\t\t\tlet request = new Potree.ProfileRequest(start, end, width, depth, callback);\n\t\t\tthis.profileRequests.push(request);\n\t\t};\n\n\t\tgetVisibleExtent () {\n\t\t\treturn this.visibleBounds.applyMatrix4(this.matrixWorld);\n\t\t};\n\n\t\tintersectsPoint(position){\n\n\t\t\tlet rootAvailable = this.pcoGeometry.root && this.pcoGeometry.root.geometry;\n\n\t\t\tif(!rootAvailable){\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif(typeof this.signedDistanceField === \"undefined\"){\n\n\t\t\t\tconst resolution = 32;\n\t\t\t\tconst field = new Float32Array(resolution ** 3).fill(Infinity);\n\n\t\t\t\tconst positions = this.pcoGeometry.root.geometry.attributes.position;\n\t\t\t\tconst boundingBox = this.boundingBox;\n\n\t\t\t\tconst n = positions.count;\n\n\t\t\t\tfor(let i = 0; i < n; i = i + 3){\n\t\t\t\t\tconst x = positions.array[3 * i + 0];\n\t\t\t\t\tconst y = positions.array[3 * i + 1];\n\t\t\t\t\tconst z = positions.array[3 * i + 2];\n\n\t\t\t\t\tconst ix = parseInt(Math.min(resolution * (x / boundingBox.max.x), resolution - 1));\n\t\t\t\t\tconst iy = parseInt(Math.min(resolution * (y / boundingBox.max.y), resolution - 1));\n\t\t\t\t\tconst iz = parseInt(Math.min(resolution * (z / boundingBox.max.z), resolution - 1));\n\n\t\t\t\t\tconst index = ix + iy * resolution + iz * resolution * resolution;\n\n\t\t\t\t\tfield[index] = 0;\n\t\t\t\t}\n\n\t\t\t\tconst sdf = {\n\t\t\t\t\tresolution: resolution,\n\t\t\t\t\tfield: field,\n\t\t\t\t};\n\n\t\t\t\tthis.signedDistanceField = sdf;\n\t\t\t}\n\n\n\t\t\t{\n\t\t\t\tconst sdf = this.signedDistanceField;\n\t\t\t\tconst boundingBox = this.boundingBox;\n\n\t\t\t\tconst toObjectSpace = this.matrixWorld.clone().invert();\n\n\t\t\t\tconst objPos = position.clone().applyMatrix4(toObjectSpace);\n\n\t\t\t\tconst resolution = sdf.resolution;\n\t\t\t\tconst ix = parseInt(resolution * (objPos.x / boundingBox.max.x));\n\t\t\t\tconst iy = parseInt(resolution * (objPos.y / boundingBox.max.y));\n\t\t\t\tconst iz = parseInt(resolution * (objPos.z / boundingBox.max.z));\n\n\t\t\t\tif(ix < 0 || iy < 0 || iz < 0){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif(ix >= resolution || iy >= resolution || iz >= resolution){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst index = ix + iy * resolution + iz * resolution * resolution;\n\n\t\t\t\tconst value = sdf.field[index];\n\n\t\t\t\tif(value === 0){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t *\n\t\t *\n\t\t * params.pickWindowSize:\tLook for points inside a pixel window of this size.\n\t\t *\t\t\t\t\t\t\tUse odd values: 1, 3, 5, ...\n\t\t *\n\t\t *\n\t\t * TODO: only draw pixels that are actually read with readPixels().\n\t\t *\n\t\t */\n\t\tpick(viewer, camera, ray, params = {}){\n\n\t\t\tlet renderer = viewer.renderer;\n\t\t\tlet pRenderer = viewer.pRenderer;\n\n\t\t\tperformance.mark(\"pick-start\");\n\n\t\t\tlet getVal = (a, b) => a !== undefined ? a : b;\n\n\t\t\tlet pickWindowSize = getVal(params.pickWindowSize, 65);\n\t\t\tlet pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false);\n\n\t\t\tlet size = renderer.getSize(new Vector2());\n\n\t\t\tlet width = Math.ceil(getVal(params.width, size.width));\n\t\t\tlet height = Math.ceil(getVal(params.height, size.height));\n\n\t\t\tlet pointSizeType = getVal(params.pointSizeType, this.material.pointSizeType);\n\t\t\tlet pointSize = getVal(params.pointSize, this.material.size);\n\n\t\t\tlet nodes = this.nodesOnRay(this.visibleNodes, ray);\n\n\t\t\tif (nodes.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!this.pickState) {\n\t\t\t\tlet scene = new Scene();\n\n\t\t\t\tlet material = new Potree.PointCloudMaterial();\n\t\t\t\tmaterial.activeAttributeName = \"indices\";\n\n\t\t\t\tlet renderTarget = new WebGLRenderTarget(\n\t\t\t\t\t1, 1,\n\t\t\t\t\t{ minFilter: LinearFilter,\n\t\t\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\t\t\tformat: RGBAFormat }\n\t\t\t\t);\n\n\t\t\t\tthis.pickState = {\n\t\t\t\t\trenderTarget: renderTarget,\n\t\t\t\t\tmaterial: material,\n\t\t\t\t\tscene: scene\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tlet pickState = this.pickState;\n\t\t\tlet pickMaterial = pickState.material;\n\n\t\t\t{ // update pick material\n\t\t\t\tpickMaterial.pointSizeType = pointSizeType;\n\t\t\t\t//pickMaterial.shape = this.material.shape;\n\t\t\t\tpickMaterial.shape = Potree.PointShape.PARABOLOID;\n\n\t\t\t\tpickMaterial.uniforms.uFilterReturnNumberRange.value = this.material.uniforms.uFilterReturnNumberRange.value;\n\t\t\t\tpickMaterial.uniforms.uFilterNumberOfReturnsRange.value = this.material.uniforms.uFilterNumberOfReturnsRange.value;\n\t\t\t\tpickMaterial.uniforms.uFilterGPSTimeClipRange.value = this.material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\tpickMaterial.uniforms.uFilterPointSourceIDClipRange.value = this.material.uniforms.uFilterPointSourceIDClipRange.value;\n\n\t\t\t\tpickMaterial.activeAttributeName = \"indices\";\n\n\t\t\t\tpickMaterial.size = pointSize;\n\t\t\t\tpickMaterial.uniforms.minSize.value = this.material.uniforms.minSize.value;\n\t\t\t\tpickMaterial.uniforms.maxSize.value = this.material.uniforms.maxSize.value;\n\t\t\t\tpickMaterial.classification = this.material.classification;\n\t\t\t\tpickMaterial.recomputeClassification();\n\n\t\t\t\tif(params.pickClipped){\n\t\t\t\t\tpickMaterial.clipBoxes = this.material.clipBoxes;\n\t\t\t\t\tpickMaterial.uniforms.clipBoxes = this.material.uniforms.clipBoxes;\n\t\t\t\t\tif(this.material.clipTask === Potree.ClipTask.HIGHLIGHT){\n\t\t\t\t\t\tpickMaterial.clipTask = Potree.ClipTask.NONE;\n\t\t\t\t\t}else {\n\t\t\t\t\t\tpickMaterial.clipTask = this.material.clipTask;\n\t\t\t\t\t}\n\t\t\t\t\tpickMaterial.clipMethod = this.material.clipMethod;\n\t\t\t\t}else {\n\t\t\t\t\tpickMaterial.clipBoxes = [];\n\t\t\t\t}\n\n\t\t\t\tthis.updateMaterial(pickMaterial, nodes, camera, renderer);\n\t\t\t}\n\n\t\t\tpickState.renderTarget.setSize(width, height);\n\n\t\t\tlet pixelPos = new Vector2(params.x, params.y);\n\n\t\t\tlet gl = renderer.getContext();\n\t\t\tgl.enable(gl.SCISSOR_TEST);\n\t\t\tgl.scissor(\n\t\t\t\tparseInt(pixelPos.x - (pickWindowSize - 1) / 2),\n\t\t\t\tparseInt(pixelPos.y - (pickWindowSize - 1) / 2),\n\t\t\t\tparseInt(pickWindowSize), parseInt(pickWindowSize));\n\n\n\t\t\trenderer.state.buffers.depth.setTest(pickMaterial.depthTest);\n\t\t\trenderer.state.buffers.depth.setMask(pickMaterial.depthWrite);\n\t\t\trenderer.state.setBlending(NoBlending);\n\n\t\t\t{ // RENDER\n\t\t\t\trenderer.setRenderTarget(pickState.renderTarget);\n\t\t\t\tgl.clearColor(0, 0, 0, 0);\n\t\t\t\trenderer.clear(true, true, true);\n\n\t\t\t\tlet tmp = this.material;\n\t\t\t\tthis.material = pickMaterial;\n\n\t\t\t\tpRenderer.renderOctree(this, nodes, camera, pickState.renderTarget);\n\n\t\t\t\tthis.material = tmp;\n\t\t\t}\n\n\t\t\tlet clamp = (number, min, max) => Math.min(Math.max(min, number), max);\n\n\t\t\tlet x = parseInt(clamp(pixelPos.x - (pickWindowSize - 1) / 2, 0, width));\n\t\t\tlet y = parseInt(clamp(pixelPos.y - (pickWindowSize - 1) / 2, 0, height));\n\t\t\tlet w = parseInt(Math.min(x + pickWindowSize, width) - x);\n\t\t\tlet h = parseInt(Math.min(y + pickWindowSize, height) - y);\n\n\t\t\tlet pixelCount = w * h;\n\t\t\tlet buffer = new Uint8Array(4 * pixelCount);\n\n\t\t\tgl.readPixels(x, y, pickWindowSize, pickWindowSize, gl.RGBA, gl.UNSIGNED_BYTE, buffer);\n\n\t\t\trenderer.setRenderTarget(null);\n\t\t\trenderer.state.reset();\n\t\t\trenderer.setScissorTest(false);\n\t\t\tgl.disable(gl.SCISSOR_TEST);\n\n\t\t\tlet pixels = buffer;\n\t\t\tlet ibuffer = new Uint32Array(buffer.buffer);\n\n\t\t\t// find closest hit inside pixelWindow boundaries\n\t\t\tlet min = Number.MAX_VALUE;\n\t\t\tlet hits = [];\n\t\t\tfor (let u = 0; u < pickWindowSize; u++) {\n\t\t\t\tfor (let v = 0; v < pickWindowSize; v++) {\n\t\t\t\t\tlet offset = (u + v * pickWindowSize);\n\t\t\t\t\tlet distance = Math.pow(u - (pickWindowSize - 1) / 2, 2) + Math.pow(v - (pickWindowSize - 1) / 2, 2);\n\n\t\t\t\t\tlet pcIndex = pixels[4 * offset + 3];\n\t\t\t\t\tpixels[4 * offset + 3] = 0;\n\t\t\t\t\tlet pIndex = ibuffer[offset];\n\n\t\t\t\t\tif(!(pcIndex === 0 && pIndex === 0) && (pcIndex !== undefined) && (pIndex !== undefined)){\n\t\t\t\t\t\tlet hit = {\n\t\t\t\t\t\t\tpIndex: pIndex,\n\t\t\t\t\t\t\tpcIndex: pcIndex,\n\t\t\t\t\t\t\tdistanceToCenter: distance\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif(params.all){\n\t\t\t\t\t\t\thits.push(hit);\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tif(hits.length > 0){\n\t\t\t\t\t\t\t\tif(distance < hits[0].distanceToCenter){\n\t\t\t\t\t\t\t\t\thits[0] = hit;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t\thits.push(hit);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t\t// { // DEBUG: show panel with pick image\n\t\t\t// \tlet img = Utils.pixelsArrayToImage(buffer, w, h);\n\t\t\t// \tlet screenshot = img.src;\n\t\t\t\n\t\t\t// \tif(!this.debugDIV){\n\t\t\t// \t\tthis.debugDIV = $(`\n\t\t\t// \t\t\t<div id=\"pickDebug\"\n\t\t\t// \t\t\tstyle=\"position: absolute;\n\t\t\t// \t\t\tright: 400px; width: 300px;\n\t\t\t// \t\t\tbottom: 44px; width: 300px;\n\t\t\t// \t\t\tz-index: 1000;\n\t\t\t// \t\t\t\"></div>`);\n\t\t\t// \t\t$(document.body).append(this.debugDIV);\n\t\t\t// \t}\n\t\t\t\n\t\t\t// \tthis.debugDIV.empty();\n\t\t\t// \tthis.debugDIV.append($(`<img src=\"${screenshot}\"\n\t\t\t// \t\tstyle=\"transform: scaleY(-1); width: 300px\"/>`));\n\t\t\t// \t//$(this.debugWindow.document).append($(`<img src=\"${screenshot}\"/>`));\n\t\t\t// \t//this.debugWindow.document.write('<img src=\"'+screenshot+'\"/>');\n\t\t\t// }\n\n\n\t\t\tfor(let hit of hits){\n\t\t\t\tlet point = {};\n\n\t\t\t\tif (!nodes[hit.pcIndex]) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tlet node = nodes[hit.pcIndex];\n\t\t\t\tlet pc = node.sceneNode;\n\t\t\t\tlet geometry = node.geometryNode.geometry;\n\n\t\t\t\tfor(let attributeName in geometry.attributes){\n\t\t\t\t\tlet attribute = geometry.attributes[attributeName];\n\n\t\t\t\t\tif (attributeName === 'position') {\n\t\t\t\t\t\tlet x = attribute.array[3 * hit.pIndex + 0];\n\t\t\t\t\t\tlet y = attribute.array[3 * hit.pIndex + 1];\n\t\t\t\t\t\tlet z = attribute.array[3 * hit.pIndex + 2];\n\n\t\t\t\t\t\tlet position = new Vector3(x, y, z);\n\t\t\t\t\t\tposition.applyMatrix4(pc.matrixWorld);\n\n\t\t\t\t\t\tpoint[attributeName] = position;\n\t\t\t\t\t} else if (attributeName === 'indices') {\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet values = attribute.array.slice(attribute.itemSize * hit.pIndex, attribute.itemSize * (hit.pIndex + 1)) ;\n\n\t\t\t\t\t\tif(attribute.potree){\n\t\t\t\t\t\t\tconst {scale, offset} = attribute.potree;\n\t\t\t\t\t\t\tvalues = values.map(v => v / scale + offset);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpoint[attributeName] = values;\n\n\t\t\t\t\t\t//debugger;\n\t\t\t\t\t\t//if (values.itemSize === 1) {\n\t\t\t\t\t\t//\tpoint[attribute.name] = values.array[hit.pIndex];\n\t\t\t\t\t\t//} else {\n\t\t\t\t\t\t//\tlet value = [];\n\t\t\t\t\t\t//\tfor (let j = 0; j < values.itemSize; j++) {\n\t\t\t\t\t\t//\t\tvalue.push(values.array[values.itemSize * hit.pIndex + j]);\n\t\t\t\t\t\t//\t}\n\t\t\t\t\t\t//\tpoint[attribute.name] = value;\n\t\t\t\t\t\t//}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\thit.point = point;\n\t\t\t}\n\n\t\t\tperformance.mark(\"pick-end\");\n\t\t\tperformance.measure(\"pick\", \"pick-start\", \"pick-end\");\n\n\t\t\tif(params.all){\n\t\t\t\treturn hits.map(hit => hit.point);\n\t\t\t}else {\n\t\t\t\tif(hits.length === 0){\n\t\t\t\t\treturn null;\n\t\t\t\t}else {\n\t\t\t\t\treturn hits[0].point;\n\t\t\t\t\t//let sorted = hits.sort( (a, b) => a.distanceToCenter - b.distanceToCenter);\n\n\t\t\t\t\t//return sorted[0].point;\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t\t* getFittedBoxGen(boxNode){\n\t\t\tlet start = performance.now();\n\n\t\t\tlet shrinkedLocalBounds = new Box3();\n\t\t\tlet worldToBox = boxNode.matrixWorld.clone().invert();\n\n\t\t\tfor(let node of this.visibleNodes){\n\t\t\t\tif(!node.sceneNode){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet buffer = node.geometryNode.buffer;\n\n\t\t\t\tlet posOffset = buffer.offset(\"position\");\n\t\t\t\tlet stride = buffer.stride;\n\t\t\t\tlet view = new DataView(buffer.data);\n\n\t\t\t\tlet objectToBox = new Matrix4().multiplyMatrices(worldToBox, node.sceneNode.matrixWorld);\n\n\t\t\t\tlet pos = new Vector4();\n\t\t\t\tfor(let i = 0; i < buffer.numElements; i++){\n\t\t\t\t\tlet x = view.getFloat32(i * stride + posOffset + 0, true);\n\t\t\t\t\tlet y = view.getFloat32(i * stride + posOffset + 4, true);\n\t\t\t\t\tlet z = view.getFloat32(i * stride + posOffset + 8, true);\n\n\t\t\t\t\tpos.set(x, y, z, 1);\n\t\t\t\t\tpos.applyMatrix4(objectToBox);\n\n\t\t\t\t\tif(-0.5 < pos.x && pos.x < 0.5){\n\t\t\t\t\t\tif(-0.5 < pos.y && pos.y < 0.5){\n\t\t\t\t\t\t\tif(-0.5 < pos.z && pos.z < 0.5){\n\t\t\t\t\t\t\t\tshrinkedLocalBounds.expandByPoint(pos);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tyield;\n\t\t\t}\n\n\t\t\tlet fittedPosition = shrinkedLocalBounds.getCenter(new Vector3()).applyMatrix4(boxNode.matrixWorld);\n\n\t\t\tlet fitted = new Object3D();\n\t\t\tfitted.position.copy(fittedPosition);\n\t\t\tfitted.scale.copy(boxNode.scale);\n\t\t\tfitted.rotation.copy(boxNode.rotation);\n\n\t\t\tlet ds = new Vector3().subVectors(shrinkedLocalBounds.max, shrinkedLocalBounds.min);\n\t\t\tfitted.scale.multiply(ds);\n\n\t\t\tlet duration = performance.now() - start;\n\t\t\tconsole.log(\"duration: \", duration);\n\n\t\t\tyield fitted;\n\t\t}\n\n\t\tgetFittedBox(boxNode, maxLevel = Infinity){\n\n\t\t\tmaxLevel = Infinity;\n\n\t\t\tlet start = performance.now();\n\n\t\t\tlet shrinkedLocalBounds = new Box3();\n\t\t\tlet worldToBox = boxNode.matrixWorld.clone().invert();\n\n\t\t\tfor(let node of this.visibleNodes){\n\t\t\t\tif(!node.sceneNode || node.getLevel() > maxLevel){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet buffer = node.geometryNode.buffer;\n\n\t\t\t\tlet posOffset = buffer.offset(\"position\");\n\t\t\t\tlet stride = buffer.stride;\n\t\t\t\tlet view = new DataView(buffer.data);\n\n\t\t\t\tlet objectToBox = new Matrix4().multiplyMatrices(worldToBox, node.sceneNode.matrixWorld);\n\n\t\t\t\tlet pos = new Vector4();\n\t\t\t\tfor(let i = 0; i < buffer.numElements; i++){\n\t\t\t\t\tlet x = view.getFloat32(i * stride + posOffset + 0, true);\n\t\t\t\t\tlet y = view.getFloat32(i * stride + posOffset + 4, true);\n\t\t\t\t\tlet z = view.getFloat32(i * stride + posOffset + 8, true);\n\n\t\t\t\t\tpos.set(x, y, z, 1);\n\t\t\t\t\tpos.applyMatrix4(objectToBox);\n\n\t\t\t\t\tif(-0.5 < pos.x && pos.x < 0.5){\n\t\t\t\t\t\tif(-0.5 < pos.y && pos.y < 0.5){\n\t\t\t\t\t\t\tif(-0.5 < pos.z && pos.z < 0.5){\n\t\t\t\t\t\t\t\tshrinkedLocalBounds.expandByPoint(pos);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet fittedPosition = shrinkedLocalBounds.getCenter(new Vector3()).applyMatrix4(boxNode.matrixWorld);\n\n\t\t\tlet fitted = new Object3D();\n\t\t\tfitted.position.copy(fittedPosition);\n\t\t\tfitted.scale.copy(boxNode.scale);\n\t\t\tfitted.rotation.copy(boxNode.rotation);\n\n\t\t\tlet ds = new Vector3().subVectors(shrinkedLocalBounds.max, shrinkedLocalBounds.min);\n\t\t\tfitted.scale.multiply(ds);\n\n\t\t\tlet duration = performance.now() - start;\n\t\t\tconsole.log(\"duration: \", duration);\n\n\t\t\treturn fitted;\n\t\t}\n\n\t\tget progress () {\n\t\t\treturn this.visibleNodes.length / this.visibleGeometry.length;\n\t\t}\n\n\t\tfind(name){\n\t\t\tlet node = null;\n\t\t\tfor(let char of name){\n\t\t\t\tif(char === \"r\"){\n\t\t\t\t\tnode = this.root;\n\t\t\t\t}else {\n\t\t\t\t\tnode = node.children[char];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\n\t\tget visible(){\n\t\t\treturn this._visible;\n\t\t}\n\n\t\tset visible(value){\n\n\t\t\tif(value !== this._visible){\n\t\t\t\tthis._visible = value;\n\n\t\t\t\tthis.dispatchEvent({type: 'visibility_changed', pointcloud: this});\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass Points$1 {\n\t\t\n\t\tconstructor () {\n\t\t\tthis.boundingBox = new Box3();\n\t\t\tthis.numPoints = 0;\n\t\t\tthis.data = {};\n\t\t}\n\n\t\tadd (points) {\n\t\t\tlet currentSize = this.numPoints;\n\t\t\tlet additionalSize = points.numPoints;\n\t\t\tlet newSize = currentSize + additionalSize;\n\n\t\t\tlet thisAttributes = Object.keys(this.data);\n\t\t\tlet otherAttributes = Object.keys(points.data);\n\t\t\tlet attributes = new Set([...thisAttributes, ...otherAttributes]);\n\n\t\t\tfor (let attribute of attributes) {\n\t\t\t\tif (thisAttributes.includes(attribute) && otherAttributes.includes(attribute)) {\n\t\t\t\t\t// attribute in both, merge\n\t\t\t\t\tlet Type = this.data[attribute].constructor;\n\t\t\t\t\tlet merged = new Type(this.data[attribute].length + points.data[attribute].length);\n\t\t\t\t\tmerged.set(this.data[attribute], 0);\n\t\t\t\t\tmerged.set(points.data[attribute], this.data[attribute].length);\n\t\t\t\t\tthis.data[attribute] = merged;\n\t\t\t\t} else if (thisAttributes.includes(attribute) && !otherAttributes.includes(attribute)) {\n\t\t\t\t\t// attribute only in this; take over this and expand to new size\n\t\t\t\t\tlet elementsPerPoint = this.data[attribute].length / this.numPoints;\n\t\t\t\t\tlet Type = this.data[attribute].constructor;\n\t\t\t\t\tlet expanded = new Type(elementsPerPoint * newSize);\n\t\t\t\t\texpanded.set(this.data[attribute], 0);\n\t\t\t\t\tthis.data[attribute] = expanded;\n\t\t\t\t} else if (!thisAttributes.includes(attribute) && otherAttributes.includes(attribute)) {\n\t\t\t\t\t// attribute only in points to be added; take over new points and expand to new size\n\t\t\t\t\tlet elementsPerPoint = points.data[attribute].length / points.numPoints;\n\t\t\t\t\tlet Type = points.data[attribute].constructor;\n\t\t\t\t\tlet expanded = new Type(elementsPerPoint * newSize);\n\t\t\t\t\texpanded.set(points.data[attribute], elementsPerPoint * currentSize);\n\t\t\t\t\tthis.data[attribute] = expanded;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.numPoints = newSize;\n\n\t\t\tthis.boundingBox.union(points.boundingBox);\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * code adapted from three.js BoxHelper.js\n\t * https://github.com/mrdoob/three.js/blob/dev/src/helpers/BoxHelper.js\n\t *\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / http://github.com/Mugen87\n\t * @author mschuetz / http://potree.org\n\t */\n\n\tclass Box3Helper$1 extends LineSegments {\n\t\tconstructor (box, color) {\n\t\t\tif (color === undefined) color = 0xffff00;\n\n\t\t\tlet indices = new Uint16Array([ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ]);\n\t\t\tlet positions = new Float32Array([\n\t\t\t\tbox.min.x, box.min.y, box.min.z,\n\t\t\t\tbox.max.x, box.min.y, box.min.z,\n\t\t\t\tbox.max.x, box.min.y, box.max.z,\n\t\t\t\tbox.min.x, box.min.y, box.max.z,\n\t\t\t\tbox.min.x, box.max.y, box.min.z,\n\t\t\t\tbox.max.x, box.max.y, box.min.z,\n\t\t\t\tbox.max.x, box.max.y, box.max.z,\n\t\t\t\tbox.min.x, box.max.y, box.max.z\n\t\t\t]);\n\n\t\t\tlet geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex(new BufferAttribute(indices, 1));\n\t\t\tgeometry.setAttribute('position', new BufferAttribute(positions, 3));\n\n\t\t\tlet material = new LineBasicMaterial({ color: color });\n\n\t\t\tsuper(geometry, material);\n\t\t}\n\t}\n\n\tfunction updatePointClouds(pointclouds, camera, renderer){\n\n\t\tfor (let pointcloud of pointclouds) {\n\t\t\tlet start = performance.now();\n\n\t\t\tfor (let profileRequest of pointcloud.profileRequests) {\n\t\t\t\tprofileRequest.update();\n\n\t\t\t\tlet duration = performance.now() - start;\n\t\t\t\tif(duration > 5){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet duration = performance.now() - start;\n\t\t}\n\n\t\tlet result = updateVisibility(pointclouds, camera, renderer);\n\n\t\tfor (let pointcloud of pointclouds) {\n\t\t\tpointcloud.updateMaterial(pointcloud.material, pointcloud.visibleNodes, camera, renderer);\n\t\t\tpointcloud.updateVisibleBounds();\n\t\t}\n\n\t\texports.lru.freeMemory();\n\n\t\treturn result;\n\t};\n\n\n\n\tfunction updateVisibilityStructures(pointclouds, camera, renderer) {\n\t\tlet frustums = [];\n\t\tlet camObjPositions = [];\n\t\tlet priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; });\n\n\t\tfor (let i = 0; i < pointclouds.length; i++) {\n\t\t\tlet pointcloud = pointclouds[i];\n\n\t\t\tif (!pointcloud.initialized()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointcloud.numVisibleNodes = 0;\n\t\t\tpointcloud.numVisiblePoints = 0;\n\t\t\tpointcloud.deepestVisibleLevel = 0;\n\t\t\tpointcloud.visibleNodes = [];\n\t\t\tpointcloud.visibleGeometry = [];\n\n\t\t\t// frustum in object space\n\t\t\tcamera.updateMatrixWorld();\n\t\t\tlet frustum = new Frustum();\n\t\t\tlet viewI = camera.matrixWorldInverse;\n\t\t\tlet world = pointcloud.matrixWorld;\n\t\t\t\n\t\t\t// use close near plane for frustum intersection\n\t\t\tlet frustumCam = camera.clone();\n\t\t\tfrustumCam.near = Math.min(camera.near, 0.1);\n\t\t\tfrustumCam.updateProjectionMatrix();\n\t\t\tlet proj = camera.projectionMatrix;\n\n\t\t\tlet fm = new Matrix4().multiply(proj).multiply(viewI).multiply(world);\n\t\t\tfrustum.setFromProjectionMatrix(fm);\n\t\t\tfrustums.push(frustum);\n\n\t\t\t// camera position in object space\n\t\t\tlet view = camera.matrixWorld;\n\t\t\tlet worldI = world.clone().invert();\n\t\t\tlet camMatrixObject = new Matrix4().multiply(worldI).multiply(view);\n\t\t\tlet camObjPos = new Vector3().setFromMatrixPosition(camMatrixObject);\n\t\t\tcamObjPositions.push(camObjPos);\n\n\t\t\tif (pointcloud.visible && pointcloud.root !== null) {\n\t\t\t\tpriorityQueue.push({pointcloud: i, node: pointcloud.root, weight: Number.MAX_VALUE});\n\t\t\t}\n\n\t\t\t// hide all previously visible nodes\n\t\t\t// if(pointcloud.root instanceof PointCloudOctreeNode){\n\t\t\t//\tpointcloud.hideDescendants(pointcloud.root.sceneNode);\n\t\t\t// }\n\t\t\tif (pointcloud.root.isTreeNode()) {\n\t\t\t\tpointcloud.hideDescendants(pointcloud.root.sceneNode);\n\t\t\t}\n\n\t\t\tfor (let j = 0; j < pointcloud.boundingBoxNodes.length; j++) {\n\t\t\t\tpointcloud.boundingBoxNodes[j].visible = false;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t'frustums': frustums,\n\t\t\t'camObjPositions': camObjPositions,\n\t\t\t'priorityQueue': priorityQueue\n\t\t};\n\t};\n\n\n\tfunction updateVisibility(pointclouds, camera, renderer){\n\n\t\tlet numVisibleNodes = 0;\n\t\tlet numVisiblePoints = 0;\n\n\t\tlet numVisiblePointsInPointclouds = new Map(pointclouds.map(pc => [pc, 0]));\n\n\t\tlet visibleNodes = [];\n\t\tlet visibleGeometry = [];\n\t\tlet unloadedGeometry = [];\n\n\t\tlet lowestSpacing = Infinity;\n\n\t\t// calculate object space frustum and cam pos and setup priority queue\n\t\tlet s = updateVisibilityStructures(pointclouds, camera, renderer);\n\t\tlet frustums = s.frustums;\n\t\tlet camObjPositions = s.camObjPositions;\n\t\tlet priorityQueue = s.priorityQueue;\n\n\t\tlet loadedToGPUThisFrame = 0;\n\t\t\n\t\tlet domWidth = renderer.domElement.clientWidth;\n\t\tlet domHeight = renderer.domElement.clientHeight;\n\n\t\t// check if pointcloud has been transformed\n\t\t// some code will only be executed if changes have been detected\n\t\tif(!Potree._pointcloudTransformVersion){\n\t\t\tPotree._pointcloudTransformVersion = new Map();\n\t\t}\n\t\tlet pointcloudTransformVersion = Potree._pointcloudTransformVersion;\n\t\tfor(let pointcloud of pointclouds){\n\n\t\t\tif(!pointcloud.visible){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointcloud.updateMatrixWorld();\n\n\t\t\tif(!pointcloudTransformVersion.has(pointcloud)){\n\t\t\t\tpointcloudTransformVersion.set(pointcloud, {number: 0, transform: pointcloud.matrixWorld.clone()});\n\t\t\t}else {\n\t\t\t\tlet version = pointcloudTransformVersion.get(pointcloud);\n\n\t\t\t\tif(!version.transform.equals(pointcloud.matrixWorld)){\n\t\t\t\t\tversion.number++;\n\t\t\t\t\tversion.transform.copy(pointcloud.matrixWorld);\n\n\t\t\t\t\tpointcloud.dispatchEvent({\n\t\t\t\t\t\ttype: \"transformation_changed\",\n\t\t\t\t\t\ttarget: pointcloud\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twhile (priorityQueue.size() > 0) {\n\t\t\tlet element = priorityQueue.pop();\n\t\t\tlet node = element.node;\n\t\t\tlet parent = element.parent;\n\t\t\tlet pointcloud = pointclouds[element.pointcloud];\n\n\t\t\t// { // restrict to certain nodes for debugging\n\t\t\t//\tlet allowedNodes = [\"r\", \"r0\", \"r4\"];\n\t\t\t//\tif(!allowedNodes.includes(node.name)){\n\t\t\t//\t\tcontinue;\n\t\t\t//\t}\n\t\t\t// }\n\n\t\t\tlet box = node.getBoundingBox();\n\t\t\tlet frustum = frustums[element.pointcloud];\n\t\t\tlet camObjPos = camObjPositions[element.pointcloud];\n\n\t\t\tlet insideFrustum = frustum.intersectsBox(box);\n\t\t\tlet maxLevel = pointcloud.maxLevel || Infinity;\n\t\t\tlet level = node.getLevel();\n\t\t\tlet visible = insideFrustum;\n\t\t\tvisible = visible && !(numVisiblePoints + node.getNumPoints() > Potree.pointBudget);\n\t\t\tvisible = visible && !(numVisiblePointsInPointclouds.get(pointcloud) + node.getNumPoints() > pointcloud.pointBudget);\n\t\t\tvisible = visible && level < maxLevel;\n\t\t\tvisible = visible || node.getLevel() <= 2;\n\n\t\t\tlet clipBoxes = pointcloud.material.clipBoxes;\n\t\t\tif(true && clipBoxes.length > 0){\n\n\t\t\t\t//node.debug = false;\n\n\t\t\t\tlet numIntersecting = 0;\n\t\t\t\tlet numIntersectionVolumes = 0;\n\n\t\t\t\t//if(node.name === \"r60\"){\n\t\t\t\t//\tvar a = 10;\n\t\t\t\t//}\n\n\t\t\t\tfor(let clipBox of clipBoxes){\n\n\t\t\t\t\tlet pcWorldInverse = pointcloud.matrixWorld.clone().invert();\n\t\t\t\t\tlet toPCObject = pcWorldInverse.multiply(clipBox.box.matrixWorld);\n\n\t\t\t\t\tlet px = new Vector3(+0.5, 0, 0).applyMatrix4(pcWorldInverse);\n\t\t\t\t\tlet nx = new Vector3(-0.5, 0, 0).applyMatrix4(pcWorldInverse);\n\t\t\t\t\tlet py = new Vector3(0, +0.5, 0).applyMatrix4(pcWorldInverse);\n\t\t\t\t\tlet ny = new Vector3(0, -0.5, 0).applyMatrix4(pcWorldInverse);\n\t\t\t\t\tlet pz = new Vector3(0, 0, +0.5).applyMatrix4(pcWorldInverse);\n\t\t\t\t\tlet nz = new Vector3(0, 0, -0.5).applyMatrix4(pcWorldInverse);\n\n\t\t\t\t\tlet pxN = new Vector3().subVectors(nx, px).normalize();\n\t\t\t\t\tlet nxN = pxN.clone().multiplyScalar(-1);\n\t\t\t\t\tlet pyN = new Vector3().subVectors(ny, py).normalize();\n\t\t\t\t\tlet nyN = pyN.clone().multiplyScalar(-1);\n\t\t\t\t\tlet pzN = new Vector3().subVectors(nz, pz).normalize();\n\t\t\t\t\tlet nzN = pzN.clone().multiplyScalar(-1);\n\n\t\t\t\t\tlet pxPlane = new Plane().setFromNormalAndCoplanarPoint(pxN, px);\n\t\t\t\t\tlet nxPlane = new Plane().setFromNormalAndCoplanarPoint(nxN, nx);\n\t\t\t\t\tlet pyPlane = new Plane().setFromNormalAndCoplanarPoint(pyN, py);\n\t\t\t\t\tlet nyPlane = new Plane().setFromNormalAndCoplanarPoint(nyN, ny);\n\t\t\t\t\tlet pzPlane = new Plane().setFromNormalAndCoplanarPoint(pzN, pz);\n\t\t\t\t\tlet nzPlane = new Plane().setFromNormalAndCoplanarPoint(nzN, nz);\n\n\t\t\t\t\t//if(window.debugdraw !== undefined && window.debugdraw === true && node.name === \"r60\"){\n\n\t\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, pxPlane, 1, 0xFF0000);\n\t\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, nxPlane, 1, 0x990000);\n\t\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, pyPlane, 1, 0x00FF00);\n\t\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, nyPlane, 1, 0x009900);\n\t\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, pzPlane, 1, 0x0000FF);\n\t\t\t\t\t//\tPotree.utils.debugPlane(viewer.scene.scene, nzPlane, 1, 0x000099);\n\n\t\t\t\t\t//\tPotree.utils.debugBox(viewer.scene.scene, box, new THREE.Matrix4(), 0x00FF00);\n\t\t\t\t\t//\tPotree.utils.debugBox(viewer.scene.scene, box, pointcloud.matrixWorld, 0xFF0000);\n\t\t\t\t\t//\tPotree.utils.debugBox(viewer.scene.scene, clipBox.box.boundingBox, clipBox.box.matrixWorld, 0xFF0000);\n\n\t\t\t\t\t//\twindow.debugdraw = false;\n\t\t\t\t\t//}\n\n\t\t\t\t\tlet frustum = new Frustum(pxPlane, nxPlane, pyPlane, nyPlane, pzPlane, nzPlane);\n\t\t\t\t\tlet intersects = frustum.intersectsBox(box);\n\n\t\t\t\t\tif(intersects){\n\t\t\t\t\t\tnumIntersecting++;\n\t\t\t\t\t}\n\t\t\t\t\tnumIntersectionVolumes++;\n\t\t\t\t}\n\n\t\t\t\tlet insideAny = numIntersecting > 0;\n\t\t\t\tlet insideAll = numIntersecting === numIntersectionVolumes;\n\n\t\t\t\tif(pointcloud.material.clipTask === ClipTask.SHOW_INSIDE){\n\t\t\t\t\tif(pointcloud.material.clipMethod === ClipMethod.INSIDE_ANY && insideAny){\n\t\t\t\t\t\t//node.debug = true\n\t\t\t\t\t}else if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ALL && insideAll){\n\t\t\t\t\t\t//node.debug = true;\n\t\t\t\t\t}else {\n\t\t\t\t\t\tvisible = false;\n\t\t\t\t\t}\n\t\t\t\t} else if(pointcloud.material.clipTask === ClipTask.SHOW_OUTSIDE){\n\t\t\t\t\t//if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ANY && !insideAny){\n\t\t\t\t\t//\t//visible = true;\n\t\t\t\t\t//\tlet a = 10;\n\t\t\t\t\t//}else if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ALL && !insideAll){\n\t\t\t\t\t//\t//visible = true;\n\t\t\t\t\t//\tlet a = 20;\n\t\t\t\t\t//}else{\n\t\t\t\t\t//\tvisible = false;\n\t\t\t\t\t//}\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t}\n\n\t\t\t// visible = [\"r\", \"r0\", \"r06\", \"r060\"].includes(node.name);\n\t\t\t// visible = [\"r\"].includes(node.name);\n\n\t\t\tif (node.spacing) {\n\t\t\t\tlowestSpacing = Math.min(lowestSpacing, node.spacing);\n\t\t\t} else if (node.geometryNode && node.geometryNode.spacing) {\n\t\t\t\tlowestSpacing = Math.min(lowestSpacing, node.geometryNode.spacing);\n\t\t\t}\n\n\t\t\tif (numVisiblePoints + node.getNumPoints() > Potree.pointBudget) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!visible) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// TODO: not used, same as the declaration?\n\t\t\t// numVisibleNodes++;\n\t\t\tnumVisiblePoints += node.getNumPoints();\n\t\t\tlet numVisiblePointsInPointcloud = numVisiblePointsInPointclouds.get(pointcloud);\n\t\t\tnumVisiblePointsInPointclouds.set(pointcloud, numVisiblePointsInPointcloud + node.getNumPoints());\n\n\t\t\tpointcloud.numVisibleNodes++;\n\t\t\tpointcloud.numVisiblePoints += node.getNumPoints();\n\n\t\t\tif (node.isGeometryNode() && (!parent || parent.isTreeNode())) {\n\t\t\t\tif (node.isLoaded() && loadedToGPUThisFrame < 2) {\n\t\t\t\t\tnode = pointcloud.toTreeNode(node, parent);\n\t\t\t\t\tloadedToGPUThisFrame++;\n\t\t\t\t} else {\n\t\t\t\t\tunloadedGeometry.push(node);\n\t\t\t\t\tvisibleGeometry.push(node);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node.isTreeNode()) {\n\t\t\t\texports.lru.touch(node.geometryNode);\n\t\t\t\tnode.sceneNode.visible = true;\n\t\t\t\tnode.sceneNode.material = pointcloud.material;\n\n\t\t\t\tvisibleNodes.push(node);\n\t\t\t\tpointcloud.visibleNodes.push(node);\n\n\t\t\t\tif(node._transformVersion === undefined){\n\t\t\t\t\tnode._transformVersion = -1;\n\t\t\t\t}\n\t\t\t\tlet transformVersion = pointcloudTransformVersion.get(pointcloud);\n\t\t\t\tif(node._transformVersion !== transformVersion.number){\n\t\t\t\t\tnode.sceneNode.updateMatrix();\n\t\t\t\t\tnode.sceneNode.matrixWorld.multiplyMatrices(pointcloud.matrixWorld, node.sceneNode.matrix);\t\n\t\t\t\t\tnode._transformVersion = transformVersion.number;\n\t\t\t\t}\n\n\t\t\t\tif (pointcloud.showBoundingBox && !node.boundingBoxNode && node.getBoundingBox) {\n\t\t\t\t\tlet boxHelper = new Box3Helper$1(node.getBoundingBox());\n\t\t\t\t\tboxHelper.matrixAutoUpdate = false;\n\t\t\t\t\tpointcloud.boundingBoxNodes.push(boxHelper);\n\t\t\t\t\tnode.boundingBoxNode = boxHelper;\n\t\t\t\t\tnode.boundingBoxNode.matrix.copy(pointcloud.matrixWorld);\n\t\t\t\t} else if (pointcloud.showBoundingBox) {\n\t\t\t\t\tnode.boundingBoxNode.visible = true;\n\t\t\t\t\tnode.boundingBoxNode.matrix.copy(pointcloud.matrixWorld);\n\t\t\t\t} else if (!pointcloud.showBoundingBox && node.boundingBoxNode) {\n\t\t\t\t\tnode.boundingBoxNode.visible = false;\n\t\t\t\t}\n\n\t\t\t\t// if(node.boundingBoxNode !== undefined && exports.debug.allowedNodes !== undefined){\n\t\t\t\t// \tif(!exports.debug.allowedNodes.includes(node.name)){\n\t\t\t\t// \t\tnode.boundingBoxNode.visible = false;\n\t\t\t\t// \t}\n\t\t\t\t// }\n\t\t\t}\n\n\t\t\t// add child nodes to priorityQueue\n\t\t\tlet children = node.getChildren();\n\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\tlet child = children[i];\n\n\t\t\t\tlet weight = 0; \n\t\t\t\tif(camera.isPerspectiveCamera){\n\t\t\t\t\tlet sphere = child.getBoundingSphere();\n\t\t\t\t\tlet center = sphere.center;\n\t\t\t\t\t//let distance = sphere.center.distanceTo(camObjPos);\n\t\t\t\t\t\n\t\t\t\t\tlet dx = camObjPos.x - center.x;\n\t\t\t\t\tlet dy = camObjPos.y - center.y;\n\t\t\t\t\tlet dz = camObjPos.z - center.z;\n\t\t\t\t\t\n\t\t\t\t\tlet dd = dx * dx + dy * dy + dz * dz;\n\t\t\t\t\tlet distance = Math.sqrt(dd);\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tlet radius = sphere.radius;\n\t\t\t\t\t\n\t\t\t\t\tlet fov = (camera.fov * Math.PI) / 180;\n\t\t\t\t\tlet slope = Math.tan(fov / 2);\n\t\t\t\t\tlet projFactor = (0.5 * domHeight) / (slope * distance);\n\t\t\t\t\tlet screenPixelRadius = radius * projFactor;\n\t\t\t\t\t\n\t\t\t\t\tif(screenPixelRadius < pointcloud.minimumNodePixelSize){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tweight = screenPixelRadius;\n\n\t\t\t\t\tif(distance - radius < 0){\n\t\t\t\t\t\tweight = Number.MAX_VALUE;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// TODO ortho visibility\n\t\t\t\t\tlet bb = child.getBoundingBox();\t\t\t\t\n\t\t\t\t\tlet distance = child.getBoundingSphere().center.distanceTo(camObjPos);\n\t\t\t\t\tlet diagonal = bb.max.clone().sub(bb.min).length();\n\t\t\t\t\t//weight = diagonal / distance;\n\n\t\t\t\t\tweight = diagonal;\n\t\t\t\t}\n\n\t\t\t\tpriorityQueue.push({pointcloud: element.pointcloud, node: child, parent: node, weight: weight});\n\t\t\t}\n\t\t}// end priority queue loop\n\n\t\t{ // update DEM\n\t\t\tlet maxDEMLevel = 4;\n\t\t\tlet candidates = pointclouds\n\t\t\t\t.filter(p => (p.generateDEM && p.dem instanceof Potree.DEM));\n\t\t\tfor (let pointcloud of candidates) {\n\t\t\t\tlet updatingNodes = pointcloud.visibleNodes.filter(n => n.getLevel() <= maxDEMLevel);\n\t\t\t\tpointcloud.dem.update(updatingNodes);\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0; i < Math.min(Potree.maxNodesLoading, unloadedGeometry.length); i++) {\n\t\t\tunloadedGeometry[i].load();\n\t\t}\n\n\t\treturn {\n\t\t\tvisibleNodes: visibleNodes,\n\t\t\tnumVisiblePoints: numVisiblePoints,\n\t\t\tlowestSpacing: lowestSpacing\n\t\t};\n\t};\n\n\tclass PointCloudArena4DNode extends PointCloudTreeNode {\n\t\tconstructor () {\n\t\t\tsuper();\n\n\t\t\tthis.left = null;\n\t\t\tthis.right = null;\n\t\t\tthis.sceneNode = null;\n\t\t\tthis.kdtree = null;\n\t\t}\n\n\t\tgetNumPoints () {\n\t\t\treturn this.geometryNode.numPoints;\n\t\t}\n\n\t\tisLoaded () {\n\t\t\treturn true;\n\t\t}\n\n\t\tisTreeNode () {\n\t\t\treturn true;\n\t\t}\n\n\t\tisGeometryNode () {\n\t\t\treturn false;\n\t\t}\n\n\t\tgetLevel () {\n\t\t\treturn this.geometryNode.level;\n\t\t}\n\n\t\tgetBoundingSphere () {\n\t\t\treturn this.geometryNode.boundingSphere;\n\t\t}\n\n\t\tgetBoundingBox () {\n\t\t\treturn this.geometryNode.boundingBox;\n\t\t}\n\n\t\ttoTreeNode (child) {\n\t\t\tlet geometryNode = null;\n\n\t\t\tif (this.left === child) {\n\t\t\t\tgeometryNode = this.left;\n\t\t\t} else if (this.right === child) {\n\t\t\t\tgeometryNode = this.right;\n\t\t\t}\n\n\t\t\tif (!geometryNode.loaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet node = new PointCloudArena4DNode();\n\t\t\tlet sceneNode = PointCloud(geometryNode.geometry, this.kdtree.material);\n\t\t\tsceneNode.visible = false;\n\n\t\t\tnode.kdtree = this.kdtree;\n\t\t\tnode.geometryNode = geometryNode;\n\t\t\tnode.sceneNode = sceneNode;\n\t\t\tnode.parent = this;\n\t\t\tnode.left = this.geometryNode.left;\n\t\t\tnode.right = this.geometryNode.right;\n\t\t}\n\n\t\tgetChildren () {\n\t\t\tlet children = [];\n\n\t\t\tif (this.left) {\n\t\t\t\tchildren.push(this.left);\n\t\t\t}\n\n\t\t\tif (this.right) {\n\t\t\t\tchildren.push(this.right);\n\t\t\t}\n\n\t\t\treturn children;\n\t\t}\n\t};\n\n\tclass PointCloudArena4D$1 extends PointCloudTree{\n\t\tconstructor (geometry) {\n\t\t\tsuper();\n\n\t\t\tthis.root = null;\n\t\t\tif (geometry.root) {\n\t\t\t\tthis.root = geometry.root;\n\t\t\t} else {\n\t\t\t\tgeometry.addEventListener('hierarchy_loaded', () => {\n\t\t\t\t\tthis.root = geometry.root;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.visiblePointsTarget = 2 * 1000 * 1000;\n\t\t\tthis.minimumNodePixelSize = 150;\n\n\t\t\tthis.position.sub(geometry.offset);\n\t\t\tthis.updateMatrix();\n\n\t\t\tthis.numVisibleNodes = 0;\n\t\t\tthis.numVisiblePoints = 0;\n\n\t\t\tthis.boundingBoxNodes = [];\n\t\t\tthis.loadQueue = [];\n\t\t\tthis.visibleNodes = [];\n\n\t\t\tthis.pcoGeometry = geometry;\n\t\t\tthis.boundingBox = this.pcoGeometry.boundingBox;\n\t\t\tthis.boundingSphere = this.pcoGeometry.boundingSphere;\n\t\t\tthis.material = new PointCloudMaterial$1({vertexColors: VertexColors, size: 0.05, treeType: TreeType.KDTREE});\n\t\t\tthis.material.sizeType = PointSizeType.ATTENUATED;\n\t\t\tthis.material.size = 0.05;\n\t\t\tthis.profileRequests = [];\n\t\t\tthis.name = '';\n\t\t}\n\n\t\tgetBoundingBoxWorld () {\n\t\t\tthis.updateMatrixWorld(true);\n\t\t\tlet box = this.boundingBox;\n\t\t\tlet transform = this.matrixWorld;\n\t\t\tlet tBox = Utils.computeTransformedBoundingBox(box, transform);\n\n\t\t\treturn tBox;\n\t\t};\n\n\t\tsetName (name) {\n\t\t\tif (this.name !== name) {\n\t\t\t\tthis.name = name;\n\t\t\t\tthis.dispatchEvent({type: 'name_changed', name: name, pointcloud: this});\n\t\t\t}\n\t\t}\n\n\t\tgetName () {\n\t\t\treturn this.name;\n\t\t}\n\n\t\tgetLevel () {\n\t\t\treturn this.level;\n\t\t}\n\n\t\ttoTreeNode (geometryNode, parent) {\n\t\t\tlet node = new PointCloudArena4DNode();\n\t\t\tlet sceneNode = new Points(geometryNode.geometry, this.material);\n\n\t\t\tsceneNode.frustumCulled = false;\n\t\t\tsceneNode.onBeforeRender = (_this, scene, camera, geometry, material, group) => {\n\t\t\t\tif (material.program) {\n\t\t\t\t\t_this.getContext().useProgram(material.program.program);\n\n\t\t\t\t\tif (material.program.getUniforms().map.level) {\n\t\t\t\t\t\tlet level = geometryNode.getLevel();\n\t\t\t\t\t\tmaterial.uniforms.level.value = level;\n\t\t\t\t\t\tmaterial.program.getUniforms().map.level.setValue(_this.getContext(), level);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.visibleNodeTextureOffsets && material.program.getUniforms().map.vnStart) {\n\t\t\t\t\t\tlet vnStart = this.visibleNodeTextureOffsets.get(node);\n\t\t\t\t\t\tmaterial.uniforms.vnStart.value = vnStart;\n\t\t\t\t\t\tmaterial.program.getUniforms().map.vnStart.setValue(_this.getContext(), vnStart);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (material.program.getUniforms().map.pcIndex) {\n\t\t\t\t\t\tlet i = node.pcIndex ? node.pcIndex : this.visibleNodes.indexOf(node);\n\t\t\t\t\t\tmaterial.uniforms.pcIndex.value = i;\n\t\t\t\t\t\tmaterial.program.getUniforms().map.pcIndex.setValue(_this.getContext(), i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tnode.geometryNode = geometryNode;\n\t\t\tnode.sceneNode = sceneNode;\n\t\t\tnode.pointcloud = this;\n\t\t\tnode.left = geometryNode.left;\n\t\t\tnode.right = geometryNode.right;\n\n\t\t\tif (!parent) {\n\t\t\t\tthis.root = node;\n\t\t\t\tthis.add(sceneNode);\n\t\t\t} else {\n\t\t\t\tparent.sceneNode.add(sceneNode);\n\n\t\t\t\tif (parent.left === geometryNode) {\n\t\t\t\t\tparent.left = node;\n\t\t\t\t} else if (parent.right === geometryNode) {\n\t\t\t\t\tparent.right = node;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet disposeListener = function () {\n\t\t\t\tparent.sceneNode.remove(node.sceneNode);\n\n\t\t\t\tif (parent.left === node) {\n\t\t\t\t\tparent.left = geometryNode;\n\t\t\t\t} else if (parent.right === node) {\n\t\t\t\t\tparent.right = geometryNode;\n\t\t\t\t}\n\t\t\t};\n\t\t\tgeometryNode.oneTimeDisposeHandlers.push(disposeListener);\n\n\t\t\treturn node;\n\t\t}\n\n\t\tupdateMaterial (material, visibleNodes, camera, renderer) {\n\t\t\tmaterial.fov = camera.fov * (Math.PI / 180);\n\t\t\tmaterial.screenWidth = renderer.domElement.clientWidth;\n\t\t\tmaterial.screenHeight = renderer.domElement.clientHeight;\n\t\t\tmaterial.spacing = this.pcoGeometry.spacing;\n\t\t\tmaterial.near = camera.near;\n\t\t\tmaterial.far = camera.far;\n\n\t\t\t// reduce shader source updates by setting maxLevel slightly higher than actually necessary\n\t\t\tif (this.maxLevel > material.levels) {\n\t\t\t\tmaterial.levels = this.maxLevel + 2;\n\t\t\t}\n\n\t\t\t// material.uniforms.octreeSize.value = this.boundingBox.size().x;\n\t\t\tlet bbSize = this.boundingBox.getSize(new Vector3());\n\t\t\tmaterial.bbSize = [bbSize.x, bbSize.y, bbSize.z];\n\t\t}\n\n\t\tupdateVisibleBounds () {\n\n\t\t}\n\n\t\thideDescendants (object) {\n\t\t\tlet stack = [];\n\t\t\tfor (let i = 0; i < object.children.length; i++) {\n\t\t\t\tlet child = object.children[i];\n\t\t\t\tif (child.visible) {\n\t\t\t\t\tstack.push(child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tlet child = stack.shift();\n\n\t\t\t\tchild.visible = false;\n\t\t\t\tif (child.boundingBoxNode) {\n\t\t\t\t\tchild.boundingBoxNode.visible = false;\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 0; i < child.children.length; i++) {\n\t\t\t\t\tlet childOfChild = child.children[i];\n\t\t\t\t\tif (childOfChild.visible) {\n\t\t\t\t\t\tstack.push(childOfChild);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tupdateMatrixWorld (force) {\n\t\t\t// node.matrixWorld.multiplyMatrices( node.parent.matrixWorld, node.matrix );\n\n\t\t\tif (this.matrixAutoUpdate === true) this.updateMatrix();\n\n\t\t\tif (this.matrixWorldNeedsUpdate === true || force === true) {\n\t\t\t\tif (this.parent === undefined) {\n\t\t\t\t\tthis.matrixWorld.copy(this.matrix);\n\t\t\t\t} else {\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);\n\t\t\t\t}\n\n\t\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\t\tforce = true;\n\t\t\t}\n\t\t}\n\n\t\tnodesOnRay (nodes, ray) {\n\t\t\tlet nodesOnRay = [];\n\n\t\t\tlet _ray = ray.clone();\n\t\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\t\tlet node = nodes[i];\n\t\t\t\tlet sphere = node.getBoundingSphere().clone().applyMatrix4(node.sceneNode.matrixWorld);\n\t\t\t\t// TODO Unused: let box = node.getBoundingBox().clone().applyMatrix4(node.sceneNode.matrixWorld);\n\n\t\t\t\tif (_ray.intersectsSphere(sphere)) {\n\t\t\t\t\tnodesOnRay.push(node);\n\t\t\t\t}\n\t\t\t\t// if(_ray.isIntersectionBox(box)){\n\t\t\t\t//\tnodesOnRay.push(node);\n\t\t\t\t// }\n\t\t\t}\n\n\t\t\treturn nodesOnRay;\n\t\t}\n\n\t\tpick(viewer, camera, ray, params = {}){\n\n\t\t\tlet renderer = viewer.renderer;\n\t\t\tlet pRenderer = viewer.pRenderer;\n\n\t\t\tperformance.mark(\"pick-start\");\n\n\t\t\tlet getVal = (a, b) => a !== undefined ? a : b;\n\n\t\t\tlet pickWindowSize = getVal(params.pickWindowSize, 17);\n\t\t\tlet pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false);\n\n\t\t\tlet size = renderer.getSize(new Vector2());\n\n\t\t\tlet width = Math.ceil(getVal(params.width, size.width));\n\t\t\tlet height = Math.ceil(getVal(params.height, size.height));\n\n\t\t\tlet pointSizeType = getVal(params.pointSizeType, this.material.pointSizeType);\n\t\t\tlet pointSize = getVal(params.pointSize, this.material.size);\n\n\t\t\tlet nodes = this.nodesOnRay(this.visibleNodes, ray);\n\n\t\t\tif (nodes.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif (!this.pickState) {\n\t\t\t\tlet scene = new Scene();\n\n\t\t\t\tlet material = new PointCloudMaterial$1();\n\t\t\t\tmaterial.activeAttributeName = \"indices\";\n\n\t\t\t\tlet renderTarget = new WebGLRenderTarget(\n\t\t\t\t\t1, 1,\n\t\t\t\t\t{ minFilter: LinearFilter,\n\t\t\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\t\t\tformat: RGBAFormat }\n\t\t\t\t);\n\n\t\t\t\tthis.pickState = {\n\t\t\t\t\trenderTarget: renderTarget,\n\t\t\t\t\tmaterial: material,\n\t\t\t\t\tscene: scene\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tlet pickState = this.pickState;\n\t\t\tlet pickMaterial = pickState.material;\n\n\t\t\t{ // update pick material\n\t\t\t\tpickMaterial.pointSizeType = pointSizeType;\n\t\t\t\tpickMaterial.shape = this.material.shape;\n\n\t\t\t\tpickMaterial.size = pointSize;\n\t\t\t\tpickMaterial.uniforms.minSize.value = this.material.uniforms.minSize.value;\n\t\t\t\tpickMaterial.uniforms.maxSize.value = this.material.uniforms.maxSize.value;\n\t\t\t\tpickMaterial.classification = this.material.classification;\n\t\t\t\tif(params.pickClipped){\n\t\t\t\t\tpickMaterial.clipBoxes = this.material.clipBoxes;\n\t\t\t\t\tif(this.material.clipTask === ClipTask.HIGHLIGHT){\n\t\t\t\t\t\tpickMaterial.clipTask = ClipTask.NONE;\n\t\t\t\t\t}else {\n\t\t\t\t\t\tpickMaterial.clipTask = this.material.clipTask;\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tpickMaterial.clipBoxes = [];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.updateMaterial(pickMaterial, nodes, camera, renderer);\n\t\t\t}\n\n\t\t\tpickState.renderTarget.setSize(width, height);\n\n\t\t\tlet pixelPos = new Vector2(params.x, params.y);\n\t\t\t\n\t\t\tlet gl = renderer.getContext();\n\t\t\tgl.enable(gl.SCISSOR_TEST);\n\t\t\tgl.scissor(\n\t\t\t\tparseInt(pixelPos.x - (pickWindowSize - 1) / 2),\n\t\t\t\tparseInt(pixelPos.y - (pickWindowSize - 1) / 2),\n\t\t\t\tparseInt(pickWindowSize), parseInt(pickWindowSize));\n\n\n\t\t\trenderer.state.buffers.depth.setTest(pickMaterial.depthTest);\n\t\t\trenderer.state.buffers.depth.setMask(pickMaterial.depthWrite);\n\t\t\trenderer.state.setBlending(NoBlending);\n\n\t\t\trenderer.clearTarget(pickState.renderTarget, true, true, true);\n\n\t\t\t{ // RENDER\n\t\t\t\trenderer.setRenderTarget(pickState.renderTarget);\n\t\t\t\tgl.clearColor(0, 0, 0, 0);\n\t\t\t\trenderer.clearTarget( pickState.renderTarget, true, true, true );\n\t\t\t\t\n\t\t\t\tlet tmp = this.material;\n\t\t\t\tthis.material = pickMaterial;\n\t\t\t\t\n\t\t\t\tpRenderer.renderOctree(this, nodes, camera, pickState.renderTarget);\n\t\t\t\t\n\t\t\t\tthis.material = tmp;\n\t\t\t}\n\n\t\t\tlet clamp = (number, min, max) => Math.min(Math.max(min, number), max);\n\n\t\t\tlet x = parseInt(clamp(pixelPos.x - (pickWindowSize - 1) / 2, 0, width));\n\t\t\tlet y = parseInt(clamp(pixelPos.y - (pickWindowSize - 1) / 2, 0, height));\n\t\t\tlet w = parseInt(Math.min(x + pickWindowSize, width) - x);\n\t\t\tlet h = parseInt(Math.min(y + pickWindowSize, height) - y);\n\n\t\t\tlet pixelCount = w * h;\n\t\t\tlet buffer = new Uint8Array(4 * pixelCount);\n\t\t\t\n\t\t\tgl.readPixels(x, y, pickWindowSize, pickWindowSize, gl.RGBA, gl.UNSIGNED_BYTE, buffer); \n\t\t\t\n\t\t\trenderer.setRenderTarget(null);\n\t\t\trenderer.state.reset();\n\t\t\trenderer.setScissorTest(false);\n\t\t\tgl.disable(gl.SCISSOR_TEST);\n\t\t\t\n\t\t\tlet pixels = buffer;\n\t\t\tlet ibuffer = new Uint32Array(buffer.buffer);\n\n\t\t\t// find closest hit inside pixelWindow boundaries\n\t\t\tlet min = Number.MAX_VALUE;\n\t\t\tlet hits = [];\n\t\t\tfor (let u = 0; u < pickWindowSize; u++) {\n\t\t\t\tfor (let v = 0; v < pickWindowSize; v++) {\n\t\t\t\t\tlet offset = (u + v * pickWindowSize);\n\t\t\t\t\tlet distance = Math.pow(u - (pickWindowSize - 1) / 2, 2) + Math.pow(v - (pickWindowSize - 1) / 2, 2);\n\n\t\t\t\t\tlet pcIndex = pixels[4 * offset + 3];\n\t\t\t\t\tpixels[4 * offset + 3] = 0;\n\t\t\t\t\tlet pIndex = ibuffer[offset];\n\n\t\t\t\t\tif(!(pcIndex === 0 && pIndex === 0) && (pcIndex !== undefined) && (pIndex !== undefined)){\n\t\t\t\t\t\tlet hit = {\n\t\t\t\t\t\t\tpIndex: pIndex,\n\t\t\t\t\t\t\tpcIndex: pcIndex,\n\t\t\t\t\t\t\tdistanceToCenter: distance\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif(params.all){\n\t\t\t\t\t\t\thits.push(hit);\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tif(hits.length > 0){\n\t\t\t\t\t\t\t\tif(distance < hits[0].distanceToCenter){\n\t\t\t\t\t\t\t\t\thits[0] = hit;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t\thits.push(hit);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\n\n\t\t\tfor(let hit of hits){\n\t\t\t\tlet point = {};\n\t\t\t\n\t\t\t\tif (!nodes[hit.pcIndex]) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\n\t\t\t\tlet node = nodes[hit.pcIndex];\n\t\t\t\tlet pc = node.sceneNode;\n\t\t\t\tlet geometry = node.geometryNode.geometry;\n\t\t\t\t\n\t\t\t\tfor(let attributeName in geometry.attributes){\n\t\t\t\t\tlet attribute = geometry.attributes[attributeName];\n\t\t\t\n\t\t\t\t\tif (attributeName === 'position') {\n\t\t\t\t\t\tlet x = attribute.array[3 * hit.pIndex + 0];\n\t\t\t\t\t\tlet y = attribute.array[3 * hit.pIndex + 1];\n\t\t\t\t\t\tlet z = attribute.array[3 * hit.pIndex + 2];\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet position = new Vector3(x, y, z);\n\t\t\t\t\t\tposition.applyMatrix4(pc.matrixWorld);\n\t\t\t\n\t\t\t\t\t\tpoint[attributeName] = position;\n\t\t\t\t\t} else if (attributeName === 'indices') {\n\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//if (values.itemSize === 1) {\n\t\t\t\t\t\t//\tpoint[attribute.name] = values.array[hit.pIndex];\n\t\t\t\t\t\t//} else {\n\t\t\t\t\t\t//\tlet value = [];\n\t\t\t\t\t\t//\tfor (let j = 0; j < values.itemSize; j++) {\n\t\t\t\t\t\t//\t\tvalue.push(values.array[values.itemSize * hit.pIndex + j]);\n\t\t\t\t\t\t//\t}\n\t\t\t\t\t\t//\tpoint[attribute.name] = value;\n\t\t\t\t\t\t//}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\thit.point = point;\n\t\t\t}\n\n\t\t\tperformance.mark(\"pick-end\");\n\t\t\tperformance.measure(\"pick\", \"pick-start\", \"pick-end\");\n\n\t\t\tif(params.all){\n\t\t\t\treturn hits.map(hit => hit.point);\n\t\t\t}else {\n\t\t\t\tif(hits.length === 0){\n\t\t\t\t\treturn null;\n\t\t\t\t}else {\n\t\t\t\t\treturn hits[0].point;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcomputeVisibilityTextureData(nodes){\n\n\t\t\tif(exports.measureTimings) performance.mark(\"computeVisibilityTextureData-start\");\n\n\t\t\tlet data = new Uint8Array(nodes.length * 3);\n\t\t\tlet visibleNodeTextureOffsets = new Map();\n\n\t\t\t// copy array\n\t\t\tnodes = nodes.slice();\n\n\t\t\t// sort by level and number\n\t\t\tlet sort = function (a, b) {\n\t\t\t\tlet la = a.geometryNode.level;\n\t\t\t\tlet lb = b.geometryNode.level;\n\t\t\t\tlet na = a.geometryNode.number;\n\t\t\t\tlet nb = b.geometryNode.number;\n\t\t\t\tif (la !== lb) return la - lb;\n\t\t\t\tif (na < nb) return -1;\n\t\t\t\tif (na > nb) return 1;\n\t\t\t\treturn 0;\n\t\t\t};\n\t\t\tnodes.sort(sort);\n\n\t\t\tlet visibleNodeNames = [];\n\t\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\t\tvisibleNodeNames.push(nodes[i].geometryNode.number);\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\t\tlet node = nodes[i];\n\n\t\t\t\tvisibleNodeTextureOffsets.set(node, i);\n\n\t\t\t\tlet b1 = 0;\t// children\n\t\t\t\tlet b2 = 0;\t// offset to first child\n\t\t\t\tlet b3 = 0;\t// split\n\n\t\t\t\tif (node.geometryNode.left && visibleNodeNames.indexOf(node.geometryNode.left.number) > 0) {\n\t\t\t\t\tb1 += 1;\n\t\t\t\t\tb2 = visibleNodeNames.indexOf(node.geometryNode.left.number) - i;\n\t\t\t\t}\n\t\t\t\tif (node.geometryNode.right && visibleNodeNames.indexOf(node.geometryNode.right.number) > 0) {\n\t\t\t\t\tb1 += 2;\n\t\t\t\t\tb2 = (b2 === 0) ? visibleNodeNames.indexOf(node.geometryNode.right.number) - i : b2;\n\t\t\t\t}\n\n\t\t\t\tif (node.geometryNode.split === 'X') {\n\t\t\t\t\tb3 = 1;\n\t\t\t\t} else if (node.geometryNode.split === 'Y') {\n\t\t\t\t\tb3 = 2;\n\t\t\t\t} else if (node.geometryNode.split === 'Z') {\n\t\t\t\t\tb3 = 4;\n\t\t\t\t}\n\n\t\t\t\tdata[i * 3 + 0] = b1;\n\t\t\t\tdata[i * 3 + 1] = b2;\n\t\t\t\tdata[i * 3 + 2] = b3;\n\t\t\t}\n\n\t\t\tif(exports.measureTimings){\n\t\t\t\tperformance.mark(\"computeVisibilityTextureData-end\");\n\t\t\t\tperformance.measure(\"render.computeVisibilityTextureData\", \"computeVisibilityTextureData-start\", \"computeVisibilityTextureData-end\");\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\toffsets: visibleNodeTextureOffsets\n\t\t\t};\n\t\t}\n\n\t\tget progress () {\n\t\t\tif (this.pcoGeometry.root) {\n\t\t\t\treturn exports.numNodesLoading > 0 ? 0 : 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t};\n\n\t// Copied from three.js: WebGLRenderer.js\n\tfunction paramThreeToGL(_gl, p) {\n\n\t\tlet extension;\n\n\t\tif (p === RepeatWrapping) return _gl.REPEAT;\n\t\tif (p === ClampToEdgeWrapping) return _gl.CLAMP_TO_EDGE;\n\t\tif (p === MirroredRepeatWrapping) return _gl.MIRRORED_REPEAT;\n\n\t\tif (p === NearestFilter) return _gl.NEAREST;\n\t\tif (p === NearestMipMapNearestFilter) return _gl.NEAREST_MIPMAP_NEAREST;\n\t\tif (p === NearestMipMapLinearFilter) return _gl.NEAREST_MIPMAP_LINEAR;\n\n\t\tif (p === LinearFilter) return _gl.LINEAR;\n\t\tif (p === LinearMipMapNearestFilter) return _gl.LINEAR_MIPMAP_NEAREST;\n\t\tif (p === LinearMipMapLinearFilter) return _gl.LINEAR_MIPMAP_LINEAR;\n\n\t\tif (p === UnsignedByteType) return _gl.UNSIGNED_BYTE;\n\t\tif (p === UnsignedShort4444Type) return _gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif (p === UnsignedShort5551Type) return _gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif (p === UnsignedShort565Type) return _gl.UNSIGNED_SHORT_5_6_5;\n\n\t\tif (p === ByteType) return _gl.BYTE;\n\t\tif (p === ShortType) return _gl.SHORT;\n\t\tif (p === UnsignedShortType) return _gl.UNSIGNED_SHORT;\n\t\tif (p === IntType) return _gl.INT;\n\t\tif (p === UnsignedIntType) return _gl.UNSIGNED_INT;\n\t\tif (p === FloatType) return _gl.FLOAT;\n\n\t\tif (p === HalfFloatType) {\n\n\t\t\textension = extensions.get('OES_texture_half_float');\n\n\t\t\tif (extension !== null) return extension.HALF_FLOAT_OES;\n\n\t\t}\n\n\t\tif (p === AlphaFormat) return _gl.ALPHA;\n\t\tif (p === RGBFormat) return _gl.RGB;\n\t\tif (p === RGBAFormat) return _gl.RGBA;\n\t\tif (p === LuminanceFormat) return _gl.LUMINANCE;\n\t\tif (p === LuminanceAlphaFormat) return _gl.LUMINANCE_ALPHA;\n\t\tif (p === DepthFormat) return _gl.DEPTH_COMPONENT;\n\t\tif (p === DepthStencilFormat) return _gl.DEPTH_STENCIL;\n\n\t\tif (p === AddEquation) return _gl.FUNC_ADD;\n\t\tif (p === SubtractEquation) return _gl.FUNC_SUBTRACT;\n\t\tif (p === ReverseSubtractEquation) return _gl.FUNC_REVERSE_SUBTRACT;\n\n\t\tif (p === ZeroFactor) return _gl.ZERO;\n\t\tif (p === OneFactor) return _gl.ONE;\n\t\tif (p === SrcColorFactor) return _gl.SRC_COLOR;\n\t\tif (p === OneMinusSrcColorFactor) return _gl.ONE_MINUS_SRC_COLOR;\n\t\tif (p === SrcAlphaFactor) return _gl.SRC_ALPHA;\n\t\tif (p === OneMinusSrcAlphaFactor) return _gl.ONE_MINUS_SRC_ALPHA;\n\t\tif (p === DstAlphaFactor) return _gl.DST_ALPHA;\n\t\tif (p === OneMinusDstAlphaFactor) return _gl.ONE_MINUS_DST_ALPHA;\n\n\t\tif (p === DstColorFactor) return _gl.DST_COLOR;\n\t\tif (p === OneMinusDstColorFactor) return _gl.ONE_MINUS_DST_COLOR;\n\t\tif (p === SrcAlphaSaturateFactor) return _gl.SRC_ALPHA_SATURATE;\n\n\t\tif (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) {\n\n\t\t\textension = extensions.get('WEBGL_compressed_texture_s3tc');\n\n\t\t\tif (extension !== null) {\n\n\t\t\t\tif (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif (p === RGBA_S3TC_DXT1_Format$1) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif (p === RGBA_S3TC_DXT5_Format$1) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) {\n\n\t\t\textension = extensions.get('WEBGL_compressed_texture_pvrtc');\n\n\t\t\tif (extension !== null) {\n\n\t\t\t\tif (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (p === RGB_ETC1_Format) {\n\n\t\t\textension = extensions.get('WEBGL_compressed_texture_etc1');\n\n\t\t\tif (extension !== null) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t}\n\n\t\tif (p === MinEquation || p === MaxEquation) {\n\n\t\t\textension = extensions.get('EXT_blend_minmax');\n\n\t\t\tif (extension !== null) {\n\n\t\t\t\tif (p === MinEquation) return extension.MIN_EXT;\n\t\t\t\tif (p === MaxEquation) return extension.MAX_EXT;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (p === UnsignedInt248Type) {\n\n\t\t\textension = extensions.get('WEBGL_depth_texture');\n\n\t\t\tif (extension !== null) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t}\n\n\t\treturn 0;\n\n\t};\n\n\tlet attributeLocations = {\n\t\t\"position\": {name: \"position\", location: 0},\n\t\t\"color\": {name: \"color\", location: 1},\n\t\t\"rgba\": {name: \"color\", location: 1},\n\t\t\"intensity\": {name: \"intensity\", location: 2},\n\t\t\"classification\": {name: \"classification\", location: 3},\n\t\t\"returnNumber\": {name: \"returnNumber\", location: 4},\n\t\t\"return number\": {name: \"returnNumber\", location: 4},\n\t\t\"returns\": {name: \"returnNumber\", location: 4},\n\t\t\"numberOfReturns\": {name: \"numberOfReturns\", location: 5},\n\t\t\"number of returns\": {name: \"numberOfReturns\", location: 5},\n\t\t\"pointSourceID\": {name: \"pointSourceID\", location: 6},\n\t\t\"source id\": {name: \"pointSourceID\", location: 6},\n\t\t\"point source id\": {name: \"pointSourceID\", location: 6},\n\t\t\"indices\": {name: \"indices\", location: 7},\n\t\t\"normal\": {name: \"normal\", location: 8},\n\t\t\"spacing\": {name: \"spacing\", location: 9},\n\t\t\"gps-time\":  {name: \"gpsTime\", location: 10},\n\t\t\"aExtra\":  {name: \"aExtra\", location: 11},\n\t};\n\n\tclass Shader {\n\n\t\tconstructor(gl, name, vsSource, fsSource) {\n\t\t\tthis.gl = gl;\n\t\t\tthis.name = name;\n\t\t\tthis.vsSource = vsSource;\n\t\t\tthis.fsSource = fsSource;\n\n\t\t\tthis.cache = new Map();\n\n\t\t\tthis.vs = null;\n\t\t\tthis.fs = null;\n\t\t\tthis.program = null;\n\n\t\t\tthis.uniformLocations = {};\n\t\t\tthis.attributeLocations = {};\n\t\t\tthis.uniformBlockIndices = {};\n\t\t\tthis.uniformBlocks = {};\n\t\t\tthis.uniforms = {};\n\n\t\t\tthis.update(vsSource, fsSource);\n\t\t}\n\n\t\tupdate(vsSource, fsSource) {\n\t\t\tthis.vsSource = vsSource;\n\t\t\tthis.fsSource = fsSource;\n\n\t\t\tthis.linkProgram();\n\t\t}\n\n\t\tcompileShader(shader, source){\n\t\t\tlet gl = this.gl;\n\n\t\t\tgl.shaderSource(shader, source);\n\n\t\t\tgl.compileShader(shader);\n\n\t\t\tlet success = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n\t\t\tif (!success) {\n\t\t\t\tlet info = gl.getShaderInfoLog(shader);\n\t\t\t\tlet numberedSource = source.split(\"\\n\").map((a, i) => `${i + 1}`.padEnd(5) + a).join(\"\\n\");\n\t\t\t\tthrow `could not compile shader ${this.name}: ${info}, \\n${numberedSource}`;\n\t\t\t}\n\t\t}\n\n\t\tlinkProgram() {\n\n\t\t\tconst tStart = performance.now();\n\n\t\t\tlet gl = this.gl;\n\n\t\t\tthis.uniformLocations = {};\n\t\t\tthis.attributeLocations = {};\n\t\t\tthis.uniforms = {};\n\n\t\t\tgl.useProgram(null);\n\n\t\t\tlet cached = this.cache.get(`${this.vsSource}, ${this.fsSource}`);\n\t\t\tif (cached) {\n\t\t\t\tthis.program = cached.program;\n\t\t\t\tthis.vs = cached.vs;\n\t\t\t\tthis.fs = cached.fs;\n\t\t\t\tthis.attributeLocations = cached.attributeLocations;\n\t\t\t\tthis.uniformLocations = cached.uniformLocations;\n\t\t\t\tthis.uniformBlocks = cached.uniformBlocks;\n\t\t\t\tthis.uniforms = cached.uniforms;\n\n\t\t\t\treturn;\n\t\t\t} else {\n\n\t\t\t\tthis.vs = gl.createShader(gl.VERTEX_SHADER);\n\t\t\t\tthis.fs = gl.createShader(gl.FRAGMENT_SHADER);\n\t\t\t\tthis.program = gl.createProgram();\n\n\t\t\t\tfor(let name of Object.keys(attributeLocations)){\n\t\t\t\t\tlet location = attributeLocations[name].location;\n\t\t\t\t\tlet glslName = attributeLocations[name].name;\n\t\t\t\t\tgl.bindAttribLocation(this.program, location, glslName);\n\t\t\t\t}\n\n\t\t\t\tthis.compileShader(this.vs, this.vsSource);\n\t\t\t\tthis.compileShader(this.fs, this.fsSource);\n\n\t\t\t\tlet program = this.program;\n\n\t\t\t\tgl.attachShader(program, this.vs);\n\t\t\t\tgl.attachShader(program, this.fs);\n\n\t\t\t\tgl.linkProgram(program);\n\n\t\t\t\tgl.detachShader(program, this.vs);\n\t\t\t\tgl.detachShader(program, this.fs);\n\n\t\t\t\tlet success = gl.getProgramParameter(program, gl.LINK_STATUS);\n\t\t\t\tif (!success) {\n\t\t\t\t\tlet info = gl.getProgramInfoLog(program);\n\t\t\t\t\tthrow `could not link program ${this.name}: ${info}`;\n\t\t\t\t}\n\n\t\t\t\t{ // attribute locations\n\t\t\t\t\tlet numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n\t\t\t\t\tfor (let i = 0; i < numAttributes; i++) {\n\t\t\t\t\t\tlet attribute = gl.getActiveAttrib(program, i);\n\n\t\t\t\t\t\tlet location = gl.getAttribLocation(program, attribute.name);\n\n\t\t\t\t\t\tthis.attributeLocations[attribute.name] = location;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t{ // uniform locations\n\t\t\t\t\tlet numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n\n\t\t\t\t\tfor (let i = 0; i < numUniforms; i++) {\n\t\t\t\t\t\tlet uniform = gl.getActiveUniform(program, i);\n\n\t\t\t\t\t\tlet location = gl.getUniformLocation(program, uniform.name);\n\n\t\t\t\t\t\tthis.uniformLocations[uniform.name] = location;\n\t\t\t\t\t\tthis.uniforms[uniform.name] = {\n\t\t\t\t\t\t\tlocation: location,\n\t\t\t\t\t\t\tvalue: null,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// uniform blocks\n\t\t\t\tif(gl instanceof WebGL2RenderingContext){ \n\t\t\t\t\tlet numBlocks = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n\n\t\t\t\t\tfor (let i = 0; i < numBlocks; i++) {\n\t\t\t\t\t\tlet blockName = gl.getActiveUniformBlockName(program, i);\n\n\t\t\t\t\t\tlet blockIndex = gl.getUniformBlockIndex(program, blockName);\n\n\t\t\t\t\t\tthis.uniformBlockIndices[blockName] = blockIndex;\n\n\t\t\t\t\t\tgl.uniformBlockBinding(program, blockIndex, blockIndex);\n\t\t\t\t\t\tlet dataSize = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE);\n\n\t\t\t\t\t\tlet uBuffer = gl.createBuffer();\t\n\t\t\t\t\t\tgl.bindBuffer(gl.UNIFORM_BUFFER, uBuffer);\n\t\t\t\t\t\tgl.bufferData(gl.UNIFORM_BUFFER, dataSize, gl.DYNAMIC_READ);\n\n\t\t\t\t\t\tgl.bindBufferBase(gl.UNIFORM_BUFFER, blockIndex, uBuffer);\n\n\t\t\t\t\t\tgl.bindBuffer(gl.UNIFORM_BUFFER, null);\n\n\t\t\t\t\t\tthis.uniformBlocks[blockName] = {\n\t\t\t\t\t\t\tname: blockName,\n\t\t\t\t\t\t\tindex: blockIndex,\n\t\t\t\t\t\t\tdataSize: dataSize,\n\t\t\t\t\t\t\tbuffer: uBuffer\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet cached = {\n\t\t\t\t\tprogram: this.program,\n\t\t\t\t\tvs: this.vs,\n\t\t\t\t\tfs: this.fs,\n\t\t\t\t\tattributeLocations: this.attributeLocations,\n\t\t\t\t\tuniformLocations: this.uniformLocations,\n\t\t\t\t\tuniforms: this.uniforms,\n\t\t\t\t\tuniformBlocks: this.uniformBlocks,\n\t\t\t\t};\n\n\t\t\t\tthis.cache.set(`${this.vsSource}, ${this.fsSource}`, cached);\n\t\t\t}\n\n\t\t\tconst tEnd = performance.now();\n\t\t\tconst duration = tEnd - tStart;\n\n\t\t\tconsole.log(`shader compile duration: ${duration.toFixed(3)}`);\n\n\n\t\t}\n\n\t\tsetUniformMatrix4(name, value) {\n\t\t\tconst gl = this.gl;\n\t\t\tconst location = this.uniformLocations[name];\n\n\t\t\tif (location == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet tmp = new Float32Array(value.elements);\n\t\t\tgl.uniformMatrix4fv(location, false, tmp);\n\t\t}\n\n\t\tsetUniform1f(name, value) {\n\t\t\tconst gl = this.gl;\n\t\t\tconst uniform = this.uniforms[name];\n\n\t\t\tif (uniform === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(uniform.value === value){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tuniform.value = value;\n\n\t\t\tgl.uniform1f(uniform.location, value);\n\t\t}\n\n\t\tsetUniformBoolean(name, value) {\n\t\t\tconst gl = this.gl;\n\t\t\tconst uniform = this.uniforms[name];\n\n\t\t\tif (uniform === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(uniform.value === value){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tuniform.value = value;\n\n\t\t\tgl.uniform1i(uniform.location, value);\n\t\t}\n\n\t\tsetUniformTexture(name, value) {\n\t\t\tconst gl = this.gl;\n\t\t\tconst location = this.uniformLocations[name];\n\n\t\t\tif (location == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tgl.uniform1i(location, value);\n\t\t}\n\n\t\tsetUniform2f(name, value) {\n\t\t\tconst gl = this.gl;\n\t\t\tconst location = this.uniformLocations[name];\n\n\t\t\tif (location == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tgl.uniform2f(location, value[0], value[1]);\n\t\t}\n\n\t\tsetUniform3f(name, value) {\n\t\t\tconst gl = this.gl;\n\t\t\tconst location = this.uniformLocations[name];\n\n\t\t\tif (location == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tgl.uniform3f(location, value[0], value[1], value[2]);\n\t\t}\n\n\t\tsetUniform(name, value) {\n\n\t\t\tif (value.constructor === Matrix4) {\n\t\t\t\tthis.setUniformMatrix4(name, value);\n\t\t\t} else if (typeof value === \"number\") {\n\t\t\t\tthis.setUniform1f(name, value);\n\t\t\t} else if (typeof value === \"boolean\") {\n\t\t\t\tthis.setUniformBoolean(name, value);\n\t\t\t} else if (value instanceof WebGLTexture) {\n\t\t\t\tthis.setUniformTexture(name, value);\n\t\t\t} else if (value instanceof Array) {\n\n\t\t\t\tif (value.length === 2) {\n\t\t\t\t\tthis.setUniform2f(name, value);\n\t\t\t\t} else if (value.length === 3) {\n\t\t\t\t\tthis.setUniform3f(name, value);\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tconsole.error(\"unhandled uniform type: \", name, value);\n\t\t\t}\n\n\t\t}\n\n\n\t\tsetUniform1i(name, value) {\n\t\t\tlet gl = this.gl;\n\t\t\tlet location = this.uniformLocations[name];\n\n\t\t\tif (location == null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tgl.uniform1i(location, value);\n\t\t}\n\n\t};\n\n\tclass WebGLTexture {\n\n\t\tconstructor(gl, texture) {\n\t\t\tthis.gl = gl;\n\n\t\t\tthis.texture = texture;\n\t\t\tthis.id = gl.createTexture();\n\n\t\t\tthis.target = gl.TEXTURE_2D;\n\t\t\tthis.version = -1;\n\n\t\t\tthis.update(texture);\n\t\t}\n\n\t\tupdate() {\n\n\t\t\tif (!this.texture.image) {\n\t\t\t\tthis.version = this.texture.version;\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet gl = this.gl;\n\t\t\tlet texture = this.texture;\n\n\t\t\tif (this.version === texture.version) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.target = gl.TEXTURE_2D;\n\n\t\t\tgl.bindTexture(this.target, this.id);\n\n\t\t\tlet level = 0;\n\t\t\tlet internalFormat = paramThreeToGL(gl, texture.format);\n\t\t\tlet width = texture.image.width;\n\t\t\tlet height = texture.image.height;\n\t\t\tlet border = 0;\n\t\t\tlet srcFormat = internalFormat;\n\t\t\tlet srcType = paramThreeToGL(gl, texture.type);\n\t\t\tlet data;\n\n\t\t\tgl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, texture.flipY);\n\t\t\tgl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha);\n\t\t\tgl.pixelStorei(gl.UNPACK_ALIGNMENT, texture.unpackAlignment);\n\n\t\t\tif (texture instanceof DataTexture) {\n\t\t\t\tdata = texture.image.data;\n\n\t\t\t\tgl.texParameteri(this.target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\t\t\tgl.texParameteri(this.target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n\t\t\t\tgl.texParameteri(this.target, gl.TEXTURE_MAG_FILTER, paramThreeToGL(gl, texture.magFilter));\n\t\t\t\tgl.texParameteri(this.target, gl.TEXTURE_MIN_FILTER, paramThreeToGL(gl, texture.minFilter));\n\n\t\t\t\tgl.texImage2D(this.target, level, internalFormat,\n\t\t\t\t\twidth, height, border, srcFormat, srcType,\n\t\t\t\t\tdata);\n\t\t\t} else if ((texture instanceof CanvasTexture) || (texture instanceof Texture)) {\n\t\t\t\tdata = texture.image;\n\n\t\t\t\tgl.texParameteri(this.target, gl.TEXTURE_WRAP_S, paramThreeToGL(gl, texture.wrapS));\n\t\t\t\tgl.texParameteri(this.target, gl.TEXTURE_WRAP_T, paramThreeToGL(gl, texture.wrapT));\n\n\t\t\t\tgl.texParameteri(this.target, gl.TEXTURE_MAG_FILTER, paramThreeToGL(gl, texture.magFilter));\n\t\t\t\tgl.texParameteri(this.target, gl.TEXTURE_MIN_FILTER, paramThreeToGL(gl, texture.minFilter));\n\n\t\t\t\tgl.texImage2D(this.target, level, internalFormat,\n\t\t\t\t\tinternalFormat, srcType, data);\n\n\t\t\t\tif (texture instanceof Texture) {gl.generateMipmap(gl.TEXTURE_2D);}\n\t\t\t}\n\n\t\t\tgl.bindTexture(this.target, null);\n\n\t\t\tthis.version = texture.version;\n\t\t}\n\n\t};\n\n\tclass WebGLBuffer {\n\n\t\tconstructor() {\n\t\t\tthis.numElements = 0;\n\t\t\tthis.vao = null;\n\t\t\tthis.vbos = new Map();\n\t\t}\n\n\t};\n\n\tclass Renderer {\n\n\t\tconstructor(threeRenderer) {\n\t\t\tthis.threeRenderer = threeRenderer;\n\t\t\tthis.gl = this.threeRenderer.getContext();\n\n\t\t\tthis.buffers = new Map();\n\t\t\tthis.shaders = new Map();\n\t\t\tthis.textures = new Map();\n\n\t\t\tthis.glTypeMapping = new Map();\n\t\t\tthis.glTypeMapping.set(Float32Array, this.gl.FLOAT);\n\t\t\tthis.glTypeMapping.set(Uint8Array, this.gl.UNSIGNED_BYTE);\n\t\t\tthis.glTypeMapping.set(Uint16Array, this.gl.UNSIGNED_SHORT);\n\n\t\t\tthis.toggle = 0;\n\t\t}\n\n\t\tdeleteBuffer(geometry) {\n\n\t\t\tlet gl = this.gl;\n\t\t\tlet webglBuffer = this.buffers.get(geometry);\n\t\t\tif (webglBuffer != null) {\n\t\t\t\tfor (let attributeName in geometry.attributes) {\n\t\t\t\t\tgl.deleteBuffer(webglBuffer.vbos.get(attributeName).handle);\n\t\t\t\t}\n\t\t\t\tthis.buffers.delete(geometry);\n\t\t\t}\n\t\t}\n\n\t\tcreateBuffer(geometry){\n\t\t\tlet gl = this.gl;\n\t\t\tlet webglBuffer = new WebGLBuffer();\n\t\t\twebglBuffer.vao = gl.createVertexArray();\n\t\t\twebglBuffer.numElements = geometry.attributes.position.count;\n\n\t\t\tgl.bindVertexArray(webglBuffer.vao);\n\n\t\t\tfor(let attributeName in geometry.attributes){\n\t\t\t\tlet bufferAttribute = geometry.attributes[attributeName];\n\n\t\t\t\tlet vbo = gl.createBuffer();\n\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo);\n\t\t\t\tgl.bufferData(gl.ARRAY_BUFFER, bufferAttribute.array, gl.STATIC_DRAW);\n\n\t\t\t\tlet normalized = bufferAttribute.normalized;\n\t\t\t\tlet type = this.glTypeMapping.get(bufferAttribute.array.constructor);\n\n\t\t\t\tif(attributeLocations[attributeName] === undefined){\n\t\t\t\t\t//attributeLocation = attributeLocations[\"aExtra\"];\n\t\t\t\t}else {\n\t\t\t\t\tlet attributeLocation = attributeLocations[attributeName].location;\n\n\t\t\t\t\tgl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0);\n\t\t\t\t\tgl.enableVertexAttribArray(attributeLocation);\n\t\t\t\t}\n\n\n\t\t\t\twebglBuffer.vbos.set(attributeName, {\n\t\t\t\t\thandle: vbo,\n\t\t\t\t\tname: attributeName,\n\t\t\t\t\tcount: bufferAttribute.count,\n\t\t\t\t\titemSize: bufferAttribute.itemSize,\n\t\t\t\t\ttype: geometry.attributes.position.array.constructor,\n\t\t\t\t\tversion: 0\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\t\t\tgl.bindVertexArray(null);\n\n\t\t\tlet disposeHandler = (event) => {\n\t\t\t\tthis.deleteBuffer(geometry);\n\t\t\t\tgeometry.removeEventListener(\"dispose\", disposeHandler);\n\t\t\t};\n\t\t\tgeometry.addEventListener(\"dispose\", disposeHandler);\n\n\t\t\treturn webglBuffer;\n\t\t}\n\n\t\tupdateBuffer(geometry){\n\t\t\tlet gl = this.gl;\n\n\t\t\tlet webglBuffer = this.buffers.get(geometry);\n\n\t\t\tgl.bindVertexArray(webglBuffer.vao);\n\n\t\t\tfor(let attributeName in geometry.attributes){\n\t\t\t\tlet bufferAttribute = geometry.attributes[attributeName];\n\n\t\t\t\tlet normalized = bufferAttribute.normalized;\n\t\t\t\tlet type = this.glTypeMapping.get(bufferAttribute.array.constructor);\n\n\t\t\t\tlet vbo = null;\n\t\t\t\tif(!webglBuffer.vbos.has(attributeName)){\n\t\t\t\t\tvbo = gl.createBuffer();\n\n\t\t\t\t\twebglBuffer.vbos.set(attributeName, {\n\t\t\t\t\t\thandle: vbo,\n\t\t\t\t\t\tname: attributeName,\n\t\t\t\t\t\tcount: bufferAttribute.count,\n\t\t\t\t\t\titemSize: bufferAttribute.itemSize,\n\t\t\t\t\t\ttype: geometry.attributes.position.array.constructor,\n\t\t\t\t\t\tversion: bufferAttribute.version\n\t\t\t\t\t});\n\t\t\t\t}else {\n\t\t\t\t\tvbo = webglBuffer.vbos.get(attributeName).handle;\n\t\t\t\t\twebglBuffer.vbos.get(attributeName).version = bufferAttribute.version;\n\t\t\t\t}\n\n\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo);\n\t\t\t\tgl.bufferData(gl.ARRAY_BUFFER, bufferAttribute.array, gl.STATIC_DRAW);\n\n\t\t\t\tif(attributeLocations[attributeName] === undefined){\n\t\t\t\t\t//attributeLocation = attributeLocations[\"aExtra\"];\n\t\t\t\t}else {\n\t\t\t\t\tlet attributeLocation = attributeLocations[attributeName].location;\n\t\t\t\t\t\n\t\t\t\t\tgl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0);\n\t\t\t\t\tgl.enableVertexAttribArray(attributeLocation);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\t\t\tgl.bindVertexArray(null);\n\t\t}\n\n\t\ttraverse(scene) {\n\n\t\t\tlet octrees = [];\n\n\t\t\tlet stack = [scene];\n\t\t\twhile (stack.length > 0) {\n\n\t\t\t\tlet node = stack.pop();\n\n\t\t\t\tif (node instanceof PointCloudTree) {\n\t\t\t\t\toctrees.push(node);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet visibleChildren = node.children.filter(c => c.visible);\n\t\t\t\tstack.push(...visibleChildren);\n\n\t\t\t}\n\n\t\t\tlet result = {\n\t\t\t\toctrees: octrees\n\t\t\t};\n\n\t\t\treturn result;\n\t\t}\n\n\n\n\t\trenderNodes(octree, nodes, visibilityTextureData, camera, target, shader, params) {\n\n\t\t\tif (exports.measureTimings) performance.mark(\"renderNodes-start\");\n\n\t\t\tlet gl = this.gl;\n\n\t\t\tlet material = params.material ? params.material : octree.material;\n\t\t\tlet shadowMaps = params.shadowMaps == null ? [] : params.shadowMaps;\n\t\t\tlet view = camera.matrixWorldInverse;\n\n\t\t\tif(params.viewOverride){\n\t\t\t\tview = params.viewOverride;\n\t\t\t}\n\n\t\t\tlet worldView = new Matrix4();\n\n\t\t\tlet mat4holder = new Float32Array(16);\n\n\t\t\tlet i = 0;\n\t\t\tfor (let node of nodes) {\n\n\t\t\t\tif(exports.debug.allowedNodes !== undefined){\n\t\t\t\t\tif(!exports.debug.allowedNodes.includes(node.name)){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet world = node.sceneNode.matrixWorld;\n\t\t\t\tworldView.multiplyMatrices(view, world);\n\n\t\t\t\tif (visibilityTextureData) {\n\t\t\t\t\tlet vnStart = visibilityTextureData.offsets.get(node);\n\t\t\t\t\tshader.setUniform1f(\"uVNStart\", vnStart);\n\t\t\t\t}\n\n\n\t\t\t\tlet level = node.getLevel();\n\n\t\t\t\tif(node.debug){\n\t\t\t\t\tshader.setUniform(\"uDebug\", true);\n\t\t\t\t}else {\n\t\t\t\t\tshader.setUniform(\"uDebug\", false);\n\t\t\t\t}\n\n\t\t\t\t// let isLeaf = false;\n\t\t\t\t// if(node instanceof PointCloudOctreeNode){\n\t\t\t\t// \tisLeaf = Object.keys(node.children).length === 0;\n\t\t\t\t// }else if(node instanceof PointCloudArena4DNode){\n\t\t\t\t// \tisLeaf = node.geometryNode.isLeaf;\n\t\t\t\t// }\n\t\t\t\t// shader.setUniform(\"uIsLeafNode\", isLeaf);\n\n\t\t\t\t// let isLeaf = node.children.filter(n => n != null).length === 0;\n\t\t\t\t// if(!isLeaf){\n\t\t\t\t// \tcontinue;\n\t\t\t\t// }\n\n\n\t\t\t\t// TODO consider passing matrices in an array to avoid uniformMatrix4fv overhead\n\t\t\t\tconst lModel = shader.uniformLocations[\"modelMatrix\"];\n\t\t\t\tif (lModel) {\n\t\t\t\t\tmat4holder.set(world.elements);\n\t\t\t\t\tgl.uniformMatrix4fv(lModel, false, mat4holder);\n\t\t\t\t}\n\n\t\t\t\tconst lModelView = shader.uniformLocations[\"modelViewMatrix\"];\n\t\t\t\t//mat4holder.set(worldView.elements);\n\t\t\t\t// faster then set in chrome 63\n\t\t\t\tfor(let j = 0; j < 16; j++){\n\t\t\t\t\tmat4holder[j] = worldView.elements[j];\n\t\t\t\t}\n\t\t\t\tgl.uniformMatrix4fv(lModelView, false, mat4holder);\n\n\t\t\t\t{ // Clip Polygons\n\t\t\t\t\tif(material.clipPolygons && material.clipPolygons.length > 0){\n\n\t\t\t\t\t\tlet clipPolygonVCount = [];\n\t\t\t\t\t\tlet worldViewProjMatrices = [];\n\n\t\t\t\t\t\tfor(let clipPolygon of material.clipPolygons){\n\n\t\t\t\t\t\t\tlet view = clipPolygon.viewMatrix;\n\t\t\t\t\t\t\tlet proj = clipPolygon.projMatrix;\n\n\t\t\t\t\t\t\tlet worldViewProj = proj.clone().multiply(view).multiply(world);\n\n\t\t\t\t\t\t\tclipPolygonVCount.push(clipPolygon.markers.length);\n\t\t\t\t\t\t\tworldViewProjMatrices.push(worldViewProj);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet flattenedMatrices = [].concat(...worldViewProjMatrices.map(m => m.elements));\n\n\t\t\t\t\t\tlet flattenedVertices = new Array(8 * 3 * material.clipPolygons.length);\n\t\t\t\t\t\tfor(let i = 0; i < material.clipPolygons.length; i++){\n\t\t\t\t\t\t\tlet clipPolygon = material.clipPolygons[i];\n\t\t\t\t\t\t\tfor(let j = 0; j < clipPolygon.markers.length; j++){\n\t\t\t\t\t\t\t\tflattenedVertices[i * 24 + (j * 3 + 0)] = clipPolygon.markers[j].position.x;\n\t\t\t\t\t\t\t\tflattenedVertices[i * 24 + (j * 3 + 1)] = clipPolygon.markers[j].position.y;\n\t\t\t\t\t\t\t\tflattenedVertices[i * 24 + (j * 3 + 2)] = clipPolygon.markers[j].position.z;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst lClipPolygonVCount = shader.uniformLocations[\"uClipPolygonVCount[0]\"];\n\t\t\t\t\t\tgl.uniform1iv(lClipPolygonVCount, clipPolygonVCount);\n\n\t\t\t\t\t\tconst lClipPolygonVP = shader.uniformLocations[\"uClipPolygonWVP[0]\"];\n\t\t\t\t\t\tgl.uniformMatrix4fv(lClipPolygonVP, false, flattenedMatrices);\n\n\t\t\t\t\t\tconst lClipPolygons = shader.uniformLocations[\"uClipPolygonVertices[0]\"];\n\t\t\t\t\t\tgl.uniform3fv(lClipPolygons, flattenedVertices);\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\t//shader.setUniformMatrix4(\"modelMatrix\", world);\n\t\t\t\t//shader.setUniformMatrix4(\"modelViewMatrix\", worldView);\n\t\t\t\tshader.setUniform1f(\"uLevel\", level);\n\t\t\t\tshader.setUniform1f(\"uNodeSpacing\", node.geometryNode.estimatedSpacing);\n\n\t\t\t\tshader.setUniform1f(\"uPCIndex\", i);\n\t\t\t\t// uBBSize\n\n\t\t\t\tif (shadowMaps.length > 0) {\n\n\t\t\t\t\tconst lShadowMap = shader.uniformLocations[\"uShadowMap[0]\"];\n\n\t\t\t\t\tshader.setUniform3f(\"uShadowColor\", material.uniforms.uShadowColor.value);\n\n\t\t\t\t\tlet bindingStart = 5;\n\t\t\t\t\tlet bindingPoints = new Array(shadowMaps.length).fill(bindingStart).map((a, i) => (a + i));\n\t\t\t\t\tgl.uniform1iv(lShadowMap, bindingPoints);\n\n\t\t\t\t\tfor (let i = 0; i < shadowMaps.length; i++) {\n\t\t\t\t\t\tlet shadowMap = shadowMaps[i];\n\t\t\t\t\t\tlet bindingPoint = bindingPoints[i];\n\t\t\t\t\t\tlet glTexture = this.threeRenderer.properties.get(shadowMap.target.texture).__webglTexture;\n\n\t\t\t\t\t\tgl.activeTexture(gl[`TEXTURE${bindingPoint}`]);\n\t\t\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, glTexture);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\n\t\t\t\t\t\tlet worldViewMatrices = shadowMaps\n\t\t\t\t\t\t\t.map(sm => sm.camera.matrixWorldInverse)\n\t\t\t\t\t\t\t.map(view => new Matrix4().multiplyMatrices(view, world));\n\n\t\t\t\t\t\tlet flattenedMatrices = [].concat(...worldViewMatrices.map(c => c.elements));\n\t\t\t\t\t\tconst lWorldView = shader.uniformLocations[\"uShadowWorldView[0]\"];\n\t\t\t\t\t\tgl.uniformMatrix4fv(lWorldView, false, flattenedMatrices);\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet flattenedMatrices = [].concat(...shadowMaps.map(sm => sm.camera.projectionMatrix.elements));\n\t\t\t\t\t\tconst lProj = shader.uniformLocations[\"uShadowProj[0]\"];\n\t\t\t\t\t\tgl.uniformMatrix4fv(lProj, false, flattenedMatrices);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst geometry = node.geometryNode.geometry;\n\n\t\t\t\tif(geometry.attributes[\"gps-time\"]){\n\t\t\t\t\tconst bufferAttribute = geometry.attributes[\"gps-time\"];\n\t\t\t\t\tconst attGPS = octree.getAttribute(\"gps-time\");\n\n\t\t\t\t\tlet initialRange = attGPS.initialRange;\n\t\t\t\t\tlet initialRangeSize = initialRange[1] - initialRange[0];\n\n\t\t\t\t\tlet globalRange = attGPS.range;\n\t\t\t\t\tlet globalRangeSize = globalRange[1] - globalRange[0];\n\n\t\t\t\t\tlet scale = initialRangeSize / globalRangeSize;\n\t\t\t\t\tlet offset = -(globalRange[0] - initialRange[0]) / initialRangeSize;\n\n\t\t\t\t\tscale = Number.isNaN(scale) ? 1 : scale;\n\t\t\t\t\toffset = Number.isNaN(offset) ? 0 : offset;\n\n\t\t\t\t\tshader.setUniform1f(\"uGpsScale\", scale);\n\t\t\t\t\tshader.setUniform1f(\"uGpsOffset\", offset);\n\t\t\t\t\t//shader.setUniform2f(\"uFilterGPSTimeClipRange\", [-Infinity, Infinity]);\n\n\t\t\t\t\tlet uFilterGPSTimeClipRange = material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\t\t// let gpsCliPRangeMin = uFilterGPSTimeClipRange[0]\n\t\t\t\t\t// let gpsCliPRangeMax = uFilterGPSTimeClipRange[1]\n\t\t\t\t\t// shader.setUniform2f(\"uFilterGPSTimeClipRange\", [gpsCliPRangeMin, gpsCliPRangeMax]);\n\n\t\t\t\t\tlet normalizedClipRange = [\n\t\t\t\t\t\t(uFilterGPSTimeClipRange[0] - globalRange[0]) / globalRangeSize,\n\t\t\t\t\t\t(uFilterGPSTimeClipRange[1] - globalRange[0]) / globalRangeSize,\n\t\t\t\t\t];\n\n\t\t\t\t\tshader.setUniform2f(\"uFilterGPSTimeClipRange\", normalizedClipRange);\n\n\n\n\t\t\t\t\t// // ranges in full gps coordinate system\n\t\t\t\t\t// const globalRange = attGPS.range;\n\t\t\t\t\t// const bufferRange = bufferAttribute.potree.range;\n\n\t\t\t\t\t// // ranges in [0, 1]\n\t\t\t\t\t// // normalizedGlobalRange = [0, 1]\n\t\t\t\t\t// // normalizedBufferRange: norm buffer within norm global range e.g. [0.2, 0.8]\n\t\t\t\t\t// const globalWidth = globalRange[1] - globalRange[0];\n\t\t\t\t\t// const normalizedBufferRange = [\n\t\t\t\t\t// \t(bufferRange[0] - globalRange[0]) / globalWidth,\n\t\t\t\t\t// \t(bufferRange[1] - globalRange[0]) / globalWidth,\n\t\t\t\t\t// ];\n\n\t\t\t\t\t// shader.setUniform2f(\"uNormalizedGpsBufferRange\", normalizedBufferRange);\n\n\t\t\t\t\t// let uFilterGPSTimeClipRange = material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\t\t// let gpsCliPRangeMin = uFilterGPSTimeClipRange[0]\n\t\t\t\t\t// let gpsCliPRangeMax = uFilterGPSTimeClipRange[1]\n\t\t\t\t\t// shader.setUniform2f(\"uFilterGPSTimeClipRange\", [gpsCliPRangeMin, gpsCliPRangeMax]);\n\n\t\t\t\t\t// shader.setUniform1f(\"uGpsScale\", bufferAttribute.potree.scale);\n\t\t\t\t\t// shader.setUniform1f(\"uGpsOffset\", bufferAttribute.potree.offset);\n\t\t\t\t}\n\n\t\t\t\t{\n\t\t\t\t\tlet uFilterReturnNumberRange = material.uniforms.uFilterReturnNumberRange.value;\n\t\t\t\t\tlet uFilterNumberOfReturnsRange = material.uniforms.uFilterNumberOfReturnsRange.value;\n\t\t\t\t\tlet uFilterPointSourceIDClipRange = material.uniforms.uFilterPointSourceIDClipRange.value;\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tshader.setUniform2f(\"uFilterReturnNumberRange\", uFilterReturnNumberRange);\n\t\t\t\t\tshader.setUniform2f(\"uFilterNumberOfReturnsRange\", uFilterNumberOfReturnsRange);\n\t\t\t\t\tshader.setUniform2f(\"uFilterPointSourceIDClipRange\", uFilterPointSourceIDClipRange);\n\t\t\t\t}\n\n\t\t\t\tlet webglBuffer = null;\n\t\t\t\tif(!this.buffers.has(geometry)){\n\t\t\t\t\twebglBuffer = this.createBuffer(geometry);\n\t\t\t\t\tthis.buffers.set(geometry, webglBuffer);\n\t\t\t\t}else {\n\t\t\t\t\twebglBuffer = this.buffers.get(geometry);\n\t\t\t\t\tfor(let attributeName in geometry.attributes){\n\t\t\t\t\t\tlet attribute = geometry.attributes[attributeName];\n\n\t\t\t\t\t\tif(attribute.version > webglBuffer.vbos.get(attributeName).version){\n\t\t\t\t\t\t\tthis.updateBuffer(geometry);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgl.bindVertexArray(webglBuffer.vao);\n\n\t\t\t\tlet isExtraAttribute =\n\t\t\t\t\tattributeLocations[material.activeAttributeName] === undefined\n\t\t\t\t\t&& Object.keys(geometry.attributes).includes(material.activeAttributeName);\n\n\t\t\t\tif(isExtraAttribute){\n\n\t\t\t\t\tconst attributeLocation = attributeLocations[\"aExtra\"].location;\n\n\t\t\t\t\tfor(const attributeName in geometry.attributes){\n\t\t\t\t\t\tconst bufferAttribute = geometry.attributes[attributeName];\n\t\t\t\t\t\tconst vbo = webglBuffer.vbos.get(attributeName);\n\t\t\t\t\t\t\n\t\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle);\n\t\t\t\t\t\tgl.disableVertexAttribArray(attributeLocation);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attName = material.activeAttributeName;\n\t\t\t\t\tconst bufferAttribute = geometry.attributes[attName];\n\t\t\t\t\tconst vbo = webglBuffer.vbos.get(attName);\n\n\t\t\t\t\tif(bufferAttribute !== undefined && vbo !== undefined){\n\t\t\t\t\t\tlet type = this.glTypeMapping.get(bufferAttribute.array.constructor);\n\t\t\t\t\t\tlet normalized = bufferAttribute.normalized;\n\n\t\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle);\n\t\t\t\t\t\tgl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0);\n\t\t\t\t\t\tgl.enableVertexAttribArray(attributeLocation);\n\t\t\t\t\t}\n\n\n\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst attExtra = octree.pcoGeometry.pointAttributes.attributes\n\t\t\t\t\t\t\t.find(a => a.name === attName);\n\n\t\t\t\t\t\tlet range = material.getRange(attName);\n\t\t\t\t\t\tif(!range){\n\t\t\t\t\t\t\trange = attExtra.range;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(!range){\n\t\t\t\t\t\t\trange = [0, 1];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet initialRange = attExtra.initialRange;\n\t\t\t\t\t\tlet initialRangeSize = initialRange[1] - initialRange[0];\n\n\t\t\t\t\t\tlet globalRange = range;\n\t\t\t\t\t\tlet globalRangeSize = globalRange[1] - globalRange[0];\n\n\t\t\t\t\t\tlet scale = initialRangeSize / globalRangeSize;\n\t\t\t\t\t\tlet offset = -(globalRange[0] - initialRange[0]) / initialRangeSize;\n\n\t\t\t\t\t\tscale = Number.isNaN(scale) ? 1 : scale;\n\t\t\t\t\t\toffset = Number.isNaN(offset) ? 0 : offset;\n\n\t\t\t\t\t\tshader.setUniform1f(\"uExtraScale\", scale);\n\t\t\t\t\t\tshader.setUniform1f(\"uExtraOffset\", offset);\t\t\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t}else {\n\n\t\t\t\t\tfor(const attributeName in geometry.attributes){\n\t\t\t\t\t\tconst bufferAttribute = geometry.attributes[attributeName];\n\t\t\t\t\t\tconst vbo = webglBuffer.vbos.get(attributeName);\n\n\n\t\t\t\t\t\tif(attributeLocations[attributeName] !== undefined){\n\t\t\t\t\t\t\tconst attributeLocation = attributeLocations[attributeName].location;\n\n\t\t\t\t\t\t\tlet type = this.glTypeMapping.get(bufferAttribute.array.constructor);\n\t\t\t\t\t\t\tlet normalized = bufferAttribute.normalized;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle);\n\t\t\t\t\t\t\tgl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0);\n\t\t\t\t\t\t\tgl.enableVertexAttribArray(attributeLocation);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet numPoints = webglBuffer.numElements;\n\t\t\t\tgl.drawArrays(gl.POINTS, 0, numPoints);\n\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tgl.bindVertexArray(null);\n\n\t\t\tif (exports.measureTimings) {\n\t\t\t\tperformance.mark(\"renderNodes-end\");\n\t\t\t\tperformance.measure(\"render.renderNodes\", \"renderNodes-start\", \"renderNodes-end\");\n\t\t\t}\n\t\t}\n\n\t\trenderOctree(octree, nodes, camera, target, params = {}){\n\n\t\t\tlet gl = this.gl;\n\n\t\t\tlet material = params.material ? params.material : octree.material;\n\t\t\tlet shadowMaps = params.shadowMaps == null ? [] : params.shadowMaps;\n\t\t\tlet view = camera.matrixWorldInverse;\n\t\t\tlet viewInv = camera.matrixWorld;\n\n\t\t\tif(params.viewOverride){\n\t\t\t\tview = params.viewOverride;\n\t\t\t\tviewInv = view.clone().invert();\n\t\t\t}\n\n\t\t\tlet proj = camera.projectionMatrix;\n\t\t\tlet projInv = proj.clone().invert();\n\t\t\t//let worldView = new THREE.Matrix4();\n\n\t\t\tlet shader = null;\n\t\t\tlet visibilityTextureData = null;\n\n\t\t\tlet currentTextureBindingPoint = 0;\n\n\t\t\tif (material.pointSizeType >= 0) {\n\t\t\t\tif (material.pointSizeType === PointSizeType.ADAPTIVE ||\n\t\t\t\t\tmaterial.activeAttributeName === \"level of detail\") {\n\n\t\t\t\t\tlet vnNodes = (params.vnTextureNodes != null) ? params.vnTextureNodes : nodes;\n\t\t\t\t\tvisibilityTextureData = octree.computeVisibilityTextureData(vnNodes, camera);\n\n\t\t\t\t\tconst vnt = material.visibleNodesTexture;\n\t\t\t\t\tconst data = vnt.image.data;\n\t\t\t\t\tdata.set(visibilityTextureData.data);\n\t\t\t\t\tvnt.needsUpdate = true;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // UPDATE SHADER AND TEXTURES\n\t\t\t\tif (!this.shaders.has(material)) {\n\t\t\t\t\tlet [vs, fs] = [material.vertexShader, material.fragmentShader];\n\t\t\t\t\tlet shader = new Shader(gl, \"pointcloud\", vs, fs);\n\n\t\t\t\t\tthis.shaders.set(material, shader);\n\t\t\t\t}\n\n\t\t\t\tshader = this.shaders.get(material);\n\n\t\t\t\t//if(material.needsUpdate){\n\t\t\t\t{\n\t\t\t\t\tlet [vs, fs] = [material.vertexShader, material.fragmentShader];\n\n\t\t\t\t\tlet numSnapshots = material.snapEnabled ? material.numSnapshots : 0;\n\t\t\t\t\tlet numClipBoxes = (material.clipBoxes && material.clipBoxes.length) ? material.clipBoxes.length : 0;\n\t\t\t\t\tlet numClipSpheres = (params.clipSpheres && params.clipSpheres.length) ? params.clipSpheres.length : 0;\n\t\t\t\t\tlet numClipPolygons = (material.clipPolygons && material.clipPolygons.length) ? material.clipPolygons.length : 0;\n\n\t\t\t\t\tlet defines = [\n\t\t\t\t\t\t`#define num_shadowmaps ${shadowMaps.length}`,\n\t\t\t\t\t\t`#define num_snapshots ${numSnapshots}`,\n\t\t\t\t\t\t`#define num_clipboxes ${numClipBoxes}`,\n\t\t\t\t\t\t`#define num_clipspheres ${numClipSpheres}`,\n\t\t\t\t\t\t`#define num_clippolygons ${numClipPolygons}`,\n\t\t\t\t\t];\n\n\n\t\t\t\t\tif(octree.pcoGeometry.root.isLoaded()){\n\t\t\t\t\t\tlet attributes = octree.pcoGeometry.root.geometry.attributes;\n\n\t\t\t\t\t\tif(attributes[\"gps-time\"]){\n\t\t\t\t\t\t\tdefines.push(\"#define clip_gps_enabled\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(attributes[\"return number\"]){\n\t\t\t\t\t\t\tdefines.push(\"#define clip_return_number_enabled\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(attributes[\"number of returns\"]){\n\t\t\t\t\t\t\tdefines.push(\"#define clip_number_of_returns_enabled\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(attributes[\"source id\"] || attributes[\"point source id\"]){\n\t\t\t\t\t\t\tdefines.push(\"#define clip_point_source_id_enabled\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet definesString = defines.join(\"\\n\");\n\n\t\t\t\t\tlet vsVersionIndex = vs.indexOf(\"#version \");\n\t\t\t\t\tlet fsVersionIndex = fs.indexOf(\"#version \");\n\n\t\t\t\t\tif(vsVersionIndex >= 0){\n\t\t\t\t\t\tvs = vs.replace(/(#version .*)/, `$1\\n${definesString}`);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tvs = `${definesString}\\n${vs}`;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(fsVersionIndex >= 0){\n\t\t\t\t\t\tfs = fs.replace(/(#version .*)/, `$1\\n${definesString}`);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tfs = `${definesString}\\n${fs}`;\n\t\t\t\t\t}\n\n\n\t\t\t\t\tshader.update(vs, fs);\n\n\t\t\t\t\tmaterial.needsUpdate = false;\n\t\t\t\t}\n\n\t\t\t\tfor (let uniformName of Object.keys(material.uniforms)) {\n\t\t\t\t\tlet uniform = material.uniforms[uniformName];\n\n\t\t\t\t\tif (uniform.type == \"t\") {\n\n\t\t\t\t\t\tlet texture = uniform.value;\n\n\t\t\t\t\t\tif (!texture) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!this.textures.has(texture)) {\n\t\t\t\t\t\t\tlet webglTexture = new WebGLTexture(gl, texture);\n\n\t\t\t\t\t\t\tthis.textures.set(texture, webglTexture);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet webGLTexture = this.textures.get(texture);\n\t\t\t\t\t\twebGLTexture.update();\n\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgl.useProgram(shader.program);\n\n\t\t\tlet transparent = false;\n\t\t\tif(params.transparent !== undefined){\n\t\t\t\ttransparent = params.transparent && material.opacity < 1;\n\t\t\t}else {\n\t\t\t\ttransparent = material.opacity < 1;\n\t\t\t}\n\n\t\t\tif (transparent){\n\t\t\t\tgl.enable(gl.BLEND);\n\t\t\t\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n\t\t\t\tgl.depthMask(false);\n\t\t\t\tgl.disable(gl.DEPTH_TEST);\n\t\t\t} else {\n\t\t\t\tgl.disable(gl.BLEND);\n\t\t\t\tgl.depthMask(true);\n\t\t\t\tgl.enable(gl.DEPTH_TEST);\n\t\t\t}\n\n\t\t\tif(params.blendFunc !== undefined){\n\t\t\t\tgl.enable(gl.BLEND);\n\t\t\t\tgl.blendFunc(...params.blendFunc);\n\t\t\t}\n\n\t\t\tif(params.depthTest !== undefined){\n\t\t\t\tif(params.depthTest === true){\n\t\t\t\t\tgl.enable(gl.DEPTH_TEST);\n\t\t\t\t}else {\n\t\t\t\t\tgl.disable(gl.DEPTH_TEST);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(params.depthWrite !== undefined){\n\t\t\t\t if(params.depthWrite === true){\n\t\t\t\t\t gl.depthMask(true);\n\t\t\t\t }else {\n\t\t\t\t\t gl.depthMask(false);\n\t\t\t\t }\n\t\t\t\t \n\t\t\t}\n\n\n\t\t\t{ // UPDATE UNIFORMS\n\t\t\t\tshader.setUniformMatrix4(\"projectionMatrix\", proj);\n\t\t\t\tshader.setUniformMatrix4(\"viewMatrix\", view);\n\t\t\t\tshader.setUniformMatrix4(\"uViewInv\", viewInv);\n\t\t\t\tshader.setUniformMatrix4(\"uProjInv\", projInv);\n\n\t\t\t\tlet screenWidth = target ? target.width : material.screenWidth;\n\t\t\t\tlet screenHeight = target ? target.height : material.screenHeight;\n\n\t\t\t\tshader.setUniform1f(\"uScreenWidth\", screenWidth);\n\t\t\t\tshader.setUniform1f(\"uScreenHeight\", screenHeight);\n\t\t\t\tshader.setUniform1f(\"fov\", Math.PI * camera.fov / 180);\n\t\t\t\tshader.setUniform1f(\"near\", camera.near);\n\t\t\t\tshader.setUniform1f(\"far\", camera.far);\n\t\t\t\t\n\t\t\t\tif(camera instanceof OrthographicCamera){\n\t\t\t\t\tshader.setUniform(\"uUseOrthographicCamera\", true);\n\t\t\t\t\tshader.setUniform(\"uOrthoWidth\", camera.right - camera.left); \n\t\t\t\t\tshader.setUniform(\"uOrthoHeight\", camera.top - camera.bottom);\n\t\t\t\t}else {\n\t\t\t\t\tshader.setUniform(\"uUseOrthographicCamera\", false);\n\t\t\t\t}\n\n\t\t\t\tif(material.clipBoxes.length + material.clipPolygons.length === 0){\n\t\t\t\t\tshader.setUniform1i(\"clipTask\", ClipTask.NONE);\n\t\t\t\t}else {\n\t\t\t\t\tshader.setUniform1i(\"clipTask\", material.clipTask);\n\t\t\t\t}\n\n\t\t\t\tshader.setUniform1i(\"clipMethod\", material.clipMethod);\n\n\t\t\t\tif (material.clipBoxes && material.clipBoxes.length > 0) {\n\t\t\t\t\t//let flattenedMatrices = [].concat(...material.clipBoxes.map(c => c.inverse.elements));\n\n\t\t\t\t\t//const lClipBoxes = shader.uniformLocations[\"clipBoxes[0]\"];\n\t\t\t\t\t//gl.uniformMatrix4fv(lClipBoxes, false, flattenedMatrices);\n\n\t\t\t\t\tconst lClipBoxes = shader.uniformLocations[\"clipBoxes[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lClipBoxes, false, material.uniforms.clipBoxes.value);\n\t\t\t\t}\n\n\t\t\t\t// TODO CLIPSPHERES\n\t\t\t\tif(params.clipSpheres && params.clipSpheres.length > 0){\n\n\t\t\t\t\tlet clipSpheres = params.clipSpheres;\n\n\t\t\t\t\tlet matrices = [];\n\t\t\t\t\tfor(let clipSphere of clipSpheres){\n\t\t\t\t\t\t//let mScale = new THREE.Matrix4().makeScale(...clipSphere.scale.toArray());\n\t\t\t\t\t\t//let mTranslate = new THREE.Matrix4().makeTranslation(...clipSphere.position.toArray());\n\n\t\t\t\t\t\t//let clipToWorld = new THREE.Matrix4().multiplyMatrices(mTranslate, mScale);\n\t\t\t\t\t\tlet clipToWorld = clipSphere.matrixWorld;\n\t\t\t\t\t\tlet viewToWorld = camera.matrixWorld;\n\t\t\t\t\t\tlet worldToClip = clipToWorld.clone().invert();\n\n\t\t\t\t\t\tlet viewToClip = new Matrix4().multiplyMatrices(worldToClip, viewToWorld);\n\n\t\t\t\t\t\tmatrices.push(viewToClip);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet flattenedMatrices = [].concat(...matrices.map(matrix => matrix.elements));\n\n\t\t\t\t\tconst lClipSpheres = shader.uniformLocations[\"uClipSpheres[0]\"];\n\t\t\t\t\tgl.uniformMatrix4fv(lClipSpheres, false, flattenedMatrices);\n\t\t\t\t\t\n\t\t\t\t\t//const lClipSpheres = shader.uniformLocations[\"uClipSpheres[0]\"];\n\t\t\t\t\t//gl.uniformMatrix4fv(lClipSpheres, false, material.uniforms.clipSpheres.value);\n\t\t\t\t}\n\n\n\t\t\t\tshader.setUniform1f(\"size\", material.size);\n\t\t\t\tshader.setUniform1f(\"maxSize\", material.uniforms.maxSize.value);\n\t\t\t\tshader.setUniform1f(\"minSize\", material.uniforms.minSize.value);\n\n\n\t\t\t\t// uniform float uPCIndex\n\t\t\t\tshader.setUniform1f(\"uOctreeSpacing\", material.spacing);\n\t\t\t\tshader.setUniform(\"uOctreeSize\", material.uniforms.octreeSize.value);\n\n\n\t\t\t\t//uniform vec3 uColor;\n\t\t\t\tshader.setUniform3f(\"uColor\", material.color.toArray());\n\t\t\t\t//uniform float opacity;\n\t\t\t\tshader.setUniform1f(\"uOpacity\", material.opacity);\n\n\t\t\t\tshader.setUniform2f(\"elevationRange\", material.elevationRange);\n\t\t\t\tshader.setUniform2f(\"intensityRange\", material.intensityRange);\n\n\n\t\t\t\tshader.setUniform3f(\"uIntensity_gbc\", [\n\t\t\t\t\tmaterial.intensityGamma, \n\t\t\t\t\tmaterial.intensityBrightness, \n\t\t\t\t\tmaterial.intensityContrast\n\t\t\t\t]);\n\n\t\t\t\tshader.setUniform3f(\"uRGB_gbc\", [\n\t\t\t\t\tmaterial.rgbGamma, \n\t\t\t\t\tmaterial.rgbBrightness, \n\t\t\t\t\tmaterial.rgbContrast\n\t\t\t\t]);\n\n\t\t\t\tshader.setUniform1f(\"uTransition\", material.transition);\n\t\t\t\tshader.setUniform1f(\"wRGB\", material.weightRGB);\n\t\t\t\tshader.setUniform1f(\"wIntensity\", material.weightIntensity);\n\t\t\t\tshader.setUniform1f(\"wElevation\", material.weightElevation);\n\t\t\t\tshader.setUniform1f(\"wClassification\", material.weightClassification);\n\t\t\t\tshader.setUniform1f(\"wReturnNumber\", material.weightReturnNumber);\n\t\t\t\tshader.setUniform1f(\"wSourceID\", material.weightSourceID);\n\n\t\t\t\tshader.setUniform(\"backfaceCulling\", material.uniforms.backfaceCulling.value);\n\n\t\t\t\tlet vnWebGLTexture = this.textures.get(material.visibleNodesTexture);\n\t\t\t\tif(vnWebGLTexture){\n\t\t\t\t\tshader.setUniform1i(\"visibleNodesTexture\", currentTextureBindingPoint);\n\t\t\t\t\tgl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint);\n\t\t\t\t\tgl.bindTexture(vnWebGLTexture.target, vnWebGLTexture.id);\n\t\t\t\t\tcurrentTextureBindingPoint++;\n\t\t\t\t}\n\n\t\t\t\tlet gradientTexture = this.textures.get(material.gradientTexture);\n\t\t\t\tshader.setUniform1i(\"gradient\", currentTextureBindingPoint);\n\t\t\t\tgl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint);\n\t\t\t\tgl.bindTexture(gradientTexture.target, gradientTexture.id);\n\n\t\t\t\tconst repeat = material.elevationGradientRepeat;\n\t\t\t\tif(repeat === ElevationGradientRepeat.REPEAT){\n\t\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.REPEAT);\n\t\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.REPEAT);\n\t\t\t\t}else if(repeat === ElevationGradientRepeat.MIRRORED_REPEAT){\n\t\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT);\n\t\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT);\n\t\t\t\t}else {\n\t\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\t\t\t\tgl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\t\t\t}\n\t\t\t\tcurrentTextureBindingPoint++;\n\n\t\t\t\tlet classificationTexture = this.textures.get(material.classificationTexture);\n\t\t\t\tshader.setUniform1i(\"classificationLUT\", currentTextureBindingPoint);\n\t\t\t\tgl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint);\n\t\t\t\tgl.bindTexture(classificationTexture.target, classificationTexture.id);\n\t\t\t\tcurrentTextureBindingPoint++;\n\n\t\t\t\tlet matcapTexture = this.textures.get(material.matcapTexture);\n\t\t\t\tshader.setUniform1i(\"matcapTextureUniform\", currentTextureBindingPoint);\n\t\t\t\tgl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint);\n\t\t\t\tgl.bindTexture(matcapTexture.target, matcapTexture.id);\n\t\t\t\tcurrentTextureBindingPoint++;\n\n\n\t\t\t\tif (material.snapEnabled === true) {\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst lSnapshot = shader.uniformLocations[\"uSnapshot[0]\"];\n\t\t\t\t\t\tconst lSnapshotDepth = shader.uniformLocations[\"uSnapshotDepth[0]\"];\n\n\t\t\t\t\t\tlet bindingStart = currentTextureBindingPoint;\n\t\t\t\t\t\tlet lSnapshotBindingPoints = new Array(5).fill(bindingStart).map((a, i) => (a + i));\n\t\t\t\t\t\tlet lSnapshotDepthBindingPoints = new Array(5)\n\t\t\t\t\t\t\t.fill(1 + Math.max(...lSnapshotBindingPoints))\n\t\t\t\t\t\t\t.map((a, i) => (a + i));\n\t\t\t\t\t\tcurrentTextureBindingPoint = 1 + Math.max(...lSnapshotDepthBindingPoints);\n\n\t\t\t\t\t\tgl.uniform1iv(lSnapshot, lSnapshotBindingPoints);\n\t\t\t\t\t\tgl.uniform1iv(lSnapshotDepth, lSnapshotDepthBindingPoints);\n\n\t\t\t\t\t\tfor (let i = 0; i < 5; i++) {\n\t\t\t\t\t\t\tlet texture = material.uniforms[`uSnapshot`].value[i];\n\t\t\t\t\t\t\tlet textureDepth = material.uniforms[`uSnapshotDepth`].value[i];\n\n\t\t\t\t\t\t\tif (!texture) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet snapTexture = this.threeRenderer.properties.get(texture).__webglTexture;\n\t\t\t\t\t\t\tlet snapTextureDepth = this.threeRenderer.properties.get(textureDepth).__webglTexture;\n\n\t\t\t\t\t\t\tlet bindingPoint = lSnapshotBindingPoints[i];\n\t\t\t\t\t\t\tlet depthBindingPoint = lSnapshotDepthBindingPoints[i];\n\n\t\t\t\t\t\t\tgl.activeTexture(gl[`TEXTURE${bindingPoint}`]);\n\t\t\t\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, snapTexture);\n\n\t\t\t\t\t\t\tgl.activeTexture(gl[`TEXTURE${depthBindingPoint}`]);\n\t\t\t\t\t\t\tgl.bindTexture(gl.TEXTURE_2D, snapTextureDepth);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet flattenedMatrices = [].concat(...material.uniforms.uSnapView.value.map(c => c.elements));\n\t\t\t\t\t\tconst lSnapView = shader.uniformLocations[\"uSnapView[0]\"];\n\t\t\t\t\t\tgl.uniformMatrix4fv(lSnapView, false, flattenedMatrices);\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tlet flattenedMatrices = [].concat(...material.uniforms.uSnapProj.value.map(c => c.elements));\n\t\t\t\t\t\tconst lSnapProj = shader.uniformLocations[\"uSnapProj[0]\"];\n\t\t\t\t\t\tgl.uniformMatrix4fv(lSnapProj, false, flattenedMatrices);\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tlet flattenedMatrices = [].concat(...material.uniforms.uSnapProjInv.value.map(c => c.elements));\n\t\t\t\t\t\tconst lSnapProjInv = shader.uniformLocations[\"uSnapProjInv[0]\"];\n\t\t\t\t\t\tgl.uniformMatrix4fv(lSnapProjInv, false, flattenedMatrices);\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tlet flattenedMatrices = [].concat(...material.uniforms.uSnapViewInv.value.map(c => c.elements));\n\t\t\t\t\t\tconst lSnapViewInv = shader.uniformLocations[\"uSnapViewInv[0]\"];\n\t\t\t\t\t\tgl.uniformMatrix4fv(lSnapViewInv, false, flattenedMatrices);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.renderNodes(octree, nodes, visibilityTextureData, camera, target, shader, params);\n\n\t\t\tgl.activeTexture(gl.TEXTURE2);\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, null);\n\t\t\tgl.activeTexture(gl.TEXTURE0);\n\t\t}\n\n\t\trender(scene, camera, target = null, params = {}) {\n\n\t\t\tconst gl = this.gl;\n\n\t\t\t// PREPARE \n\t\t\tif (target != null) {\n\t\t\t\tthis.threeRenderer.setRenderTarget(target);\n\t\t\t}\n\n\t\t\t//camera.updateProjectionMatrix();\n\t\t\t// camera.matrixWorldInverse.invert(camera.matrixWorld);\n\n\t\t\tconst traversalResult = this.traverse(scene);\n\n\n\t\t\t// RENDER\n\t\t\tfor (const octree of traversalResult.octrees) {\n\t\t\t\tlet nodes = octree.visibleNodes;\n\t\t\t\tthis.renderOctree(octree, nodes, camera, target, params);\n\t\t\t}\n\n\n\t\t\t// CLEANUP\n\t\t\tgl.activeTexture(gl.TEXTURE1);\n\t\t\tgl.bindTexture(gl.TEXTURE_2D, null);\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\t\t\tgl.bindVertexArray(null);\n\n\t\t\tthis.threeRenderer.resetState();\n\t\t}\n\n\n\n\t};\n\n\tclass ProfileData {\n\t\tconstructor (profile) {\n\t\t\tthis.profile = profile;\n\n\t\t\tthis.segments = [];\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t\tfor (let i = 0; i < profile.points.length - 1; i++) {\n\t\t\t\tlet start = profile.points[i];\n\t\t\t\tlet end = profile.points[i + 1];\n\n\t\t\t\tlet startGround = new Vector3(start.x, start.y, 0);\n\t\t\t\tlet endGround = new Vector3(end.x, end.y, 0);\n\n\t\t\t\tlet center = new Vector3().addVectors(endGround, startGround).multiplyScalar(0.5);\n\t\t\t\tlet length = startGround.distanceTo(endGround);\n\t\t\t\tlet side = new Vector3().subVectors(endGround, startGround).normalize();\n\t\t\t\tlet up = new Vector3(0, 0, 1);\n\t\t\t\tlet forward = new Vector3().crossVectors(side, up).normalize();\n\t\t\t\tlet N = forward;\n\t\t\t\tlet cutPlane = new Plane().setFromNormalAndCoplanarPoint(N, startGround);\n\t\t\t\tlet halfPlane = new Plane().setFromNormalAndCoplanarPoint(side, center);\n\n\t\t\t\tlet segment = {\n\t\t\t\t\tstart: start,\n\t\t\t\t\tend: end,\n\t\t\t\t\tcutPlane: cutPlane,\n\t\t\t\t\thalfPlane: halfPlane,\n\t\t\t\t\tlength: length,\n\t\t\t\t\tpoints: new Points$1()\n\t\t\t\t};\n\n\t\t\t\tthis.segments.push(segment);\n\t\t\t}\n\t\t}\n\n\t\tsize () {\n\t\t\tlet size = 0;\n\t\t\tfor (let segment of this.segments) {\n\t\t\t\tsize += segment.points.numPoints;\n\t\t\t}\n\n\t\t\treturn size;\n\t\t}\n\t};\n\n\tclass ProfileRequest {\n\t\tconstructor (pointcloud, profile, maxDepth, callback) {\n\t\t\tthis.pointcloud = pointcloud;\n\t\t\tthis.profile = profile;\n\t\t\tthis.maxDepth = maxDepth || Number.MAX_VALUE;\n\t\t\tthis.callback = callback;\n\t\t\tthis.temporaryResult = new ProfileData(this.profile);\n\t\t\tthis.pointsServed = 0;\n\t\t\tthis.highestLevelServed = 0;\n\n\t\t\tthis.priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; });\n\n\t\t\tthis.initialize();\n\t\t}\n\n\t\tinitialize () {\n\t\t\tthis.priorityQueue.push({node: this.pointcloud.pcoGeometry.root, weight: Infinity});\n\t\t};\n\n\t\t// traverse the node and add intersecting descendants to queue\n\t\ttraverse (node) {\n\t\t\tlet stack = [];\n\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\tlet child = node.children[i];\n\t\t\t\tif (child && this.pointcloud.nodeIntersectsProfile(child, this.profile)) {\n\t\t\t\t\tstack.push(child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tlet node = stack.pop();\n\t\t\t\tlet weight = node.boundingSphere.radius;\n\n\t\t\t\tthis.priorityQueue.push({node: node, weight: weight});\n\n\t\t\t\t// add children that intersect the cutting plane\n\t\t\t\tif (node.level < this.maxDepth) {\n\t\t\t\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t\t\t\tlet child = node.children[i];\n\t\t\t\t\t\tif (child && this.pointcloud.nodeIntersectsProfile(child, this.profile)) {\n\t\t\t\t\t\t\tstack.push(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tupdate(){\n\t\t\tif(!this.updateGeneratorInstance){\n\t\t\t\tthis.updateGeneratorInstance = this.updateGenerator();\n\t\t\t}\n\n\t\t\tlet result = this.updateGeneratorInstance.next();\n\t\t\tif(result.done){\n\t\t\t\tthis.updateGeneratorInstance = null;\n\t\t\t}\n\t\t}\n\n\t\t* updateGenerator(){\n\t\t\t// load nodes in queue\n\t\t\t// if hierarchy expands, also load nodes from expanded hierarchy\n\t\t\t// once loaded, add data to this.points and remove node from queue\n\t\t\t// only evaluate 1-50 nodes per frame to maintain responsiveness\n\n\t\t\tlet start = performance.now();\n\n\t\t\tlet maxNodesPerUpdate = 1;\n\t\t\tlet intersectedNodes = [];\n\n\t\t\tfor (let i = 0; i < Math.min(maxNodesPerUpdate, this.priorityQueue.size()); i++) {\n\t\t\t\tlet element = this.priorityQueue.pop();\n\t\t\t\tlet node = element.node;\n\n\t\t\t\tif(node.level > this.maxDepth){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (node.loaded) {\n\t\t\t\t\t// add points to result\n\t\t\t\t\tintersectedNodes.push(node);\n\t\t\t\t\texports.lru.touch(node);\n\t\t\t\t\tthis.highestLevelServed = Math.max(node.getLevel(), this.highestLevelServed);\n\n\t\t\t\t\tvar geom = node.pcoGeometry;\n\t\t\t\t\tvar hierarchyStepSize = geom ? geom.hierarchyStepSize : 1;\n\n\t\t\t\t\tvar doTraverse = node.getLevel() === 0 ||\n\t\t\t\t\t\t(node.level % hierarchyStepSize === 0 && node.hasChildren);\n\n\t\t\t\t\tif (doTraverse) {\n\t\t\t\t\t\tthis.traverse(node);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnode.load();\n\t\t\t\t\tthis.priorityQueue.push(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (intersectedNodes.length > 0) {\n\n\t\t\t\tfor(let done of this.getPointsInsideProfile(intersectedNodes, this.temporaryResult)){\n\t\t\t\t\tif(!done){\n\t\t\t\t\t\t//console.log(\"updateGenerator yields\");\n\t\t\t\t\t\tyield false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.temporaryResult.size() > 100) {\n\t\t\t\t\tthis.pointsServed += this.temporaryResult.size();\n\t\t\t\t\tthis.callback.onProgress({request: this, points: this.temporaryResult});\n\t\t\t\t\tthis.temporaryResult = new ProfileData(this.profile);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.priorityQueue.size() === 0) {\n\t\t\t\t// we're done! inform callback and remove from pending requests\n\n\t\t\t\tif (this.temporaryResult.size() > 0) {\n\t\t\t\t\tthis.pointsServed += this.temporaryResult.size();\n\t\t\t\t\tthis.callback.onProgress({request: this, points: this.temporaryResult});\n\t\t\t\t\tthis.temporaryResult = new ProfileData(this.profile);\n\t\t\t\t}\n\n\t\t\t\tthis.callback.onFinish({request: this});\n\n\t\t\t\tlet index = this.pointcloud.profileRequests.indexOf(this);\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tthis.pointcloud.profileRequests.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tyield true;\n\t\t};\n\n\t\t* getAccepted(numPoints, node, matrix, segment, segmentDir, points, totalMileage){\n\t\t\tlet checkpoint = performance.now();\n\n\t\t\tlet accepted = new Uint32Array(numPoints);\n\t\t\tlet mileage = new Float64Array(numPoints);\n\t\t\tlet acceptedPositions = new Float32Array(numPoints * 3);\n\t\t\tlet numAccepted = 0;\n\n\t\t\tlet pos = new Vector3();\n\t\t\tlet svp = new Vector3();\n\n\t\t\tlet view = new Float32Array(node.geometry.attributes.position.array);\n\n\t\t\tfor (let i = 0; i < numPoints; i++) {\n\n\t\t\t\tpos.set(\n\t\t\t\t\tview[i * 3 + 0],\n\t\t\t\t\tview[i * 3 + 1],\n\t\t\t\t\tview[i * 3 + 2]);\n\n\t\t\t\tpos.applyMatrix4(matrix);\n\t\t\t\tlet distance = Math.abs(segment.cutPlane.distanceToPoint(pos));\n\t\t\t\tlet centerDistance = Math.abs(segment.halfPlane.distanceToPoint(pos));\n\n\t\t\t\tif (distance < this.profile.width / 2 && centerDistance < segment.length / 2) {\n\t\t\t\t\tsvp.subVectors(pos, segment.start);\n\t\t\t\t\tlet localMileage = segmentDir.dot(svp);\n\n\t\t\t\t\taccepted[numAccepted] = i;\n\t\t\t\t\tmileage[numAccepted] = localMileage + totalMileage;\n\t\t\t\t\tpoints.boundingBox.expandByPoint(pos);\n\n\t\t\t\t\tpos.sub(this.pointcloud.position);\n\n\t\t\t\t\tacceptedPositions[3 * numAccepted + 0] = pos.x;\n\t\t\t\t\tacceptedPositions[3 * numAccepted + 1] = pos.y;\n\t\t\t\t\tacceptedPositions[3 * numAccepted + 2] = pos.z;\n\n\t\t\t\t\tnumAccepted++;\n\t\t\t\t}\n\n\t\t\t\tif((i % 1000) === 0){\n\t\t\t\t\tlet duration = performance.now() - checkpoint;\n\t\t\t\t\tif(duration > 4){\n\t\t\t\t\t\t//console.log(`getAccepted yield after ${duration}ms`);\n\t\t\t\t\t\tyield false;\n\t\t\t\t\t\tcheckpoint = performance.now();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taccepted = accepted.subarray(0, numAccepted);\n\t\t\tmileage = mileage.subarray(0, numAccepted);\n\t\t\tacceptedPositions = acceptedPositions.subarray(0, numAccepted * 3);\n\n\t\t\t//let end = performance.now();\n\t\t\t//let duration = end - start;\n\t\t\t//console.log(\"accepted duration \", duration)\n\n\t\t\t//console.log(`getAccepted finished`);\n\n\t\t\tyield [accepted, mileage, acceptedPositions];\n\t\t}\n\n\t\t* getPointsInsideProfile(nodes, target){\n\t\t\tlet checkpoint = performance.now();\n\t\t\tlet totalMileage = 0;\n\n\t\t\tlet pointsProcessed = 0;\n\n\t\t\tfor (let segment of target.segments) {\n\t\t\t\tfor (let node of nodes) {\n\t\t\t\t\tlet numPoints = node.numPoints;\n\t\t\t\t\tlet geometry = node.geometry;\n\n\t\t\t\t\tif(!numPoints){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t{ // skip if current node doesn't intersect current segment\n\t\t\t\t\t\tlet bbWorld = node.boundingBox.clone().applyMatrix4(this.pointcloud.matrixWorld);\n\t\t\t\t\t\tlet bsWorld = bbWorld.getBoundingSphere(new Sphere());\n\n\t\t\t\t\t\tlet start = new Vector3(segment.start.x, segment.start.y, bsWorld.center.z);\n\t\t\t\t\t\tlet end = new Vector3(segment.end.x, segment.end.y, bsWorld.center.z);\n\n\t\t\t\t\t\tlet closest = new Line3(start, end).closestPointToPoint(bsWorld.center, true, new Vector3());\n\t\t\t\t\t\tlet distance = closest.distanceTo(bsWorld.center);\n\n\t\t\t\t\t\tlet intersects = (distance < (bsWorld.radius + target.profile.width));\n\n\t\t\t\t\t\tif(!intersects){\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//{// DEBUG\n\t\t\t\t\t//\tconsole.log(node.name);\n\t\t\t\t\t//\tlet boxHelper = new Potree.Box3Helper(node.getBoundingBox());\n\t\t\t\t\t//\tboxHelper.matrixAutoUpdate = false;\n\t\t\t\t\t//\tboxHelper.matrix.copy(viewer.scene.pointclouds[0].matrixWorld);\n\t\t\t\t\t//\tviewer.scene.scene.add(boxHelper);\n\t\t\t\t\t//}\n\n\t\t\t\t\tlet sv = new Vector3().subVectors(segment.end, segment.start).setZ(0);\n\t\t\t\t\tlet segmentDir = sv.clone().normalize();\n\n\t\t\t\t\tlet points = new Points$1();\n\n\t\t\t\t\tlet nodeMatrix = new Matrix4().makeTranslation(...node.boundingBox.min.toArray());\n\n\t\t\t\t\tlet matrix = new Matrix4().multiplyMatrices(\n\t\t\t\t\t\tthis.pointcloud.matrixWorld, nodeMatrix);\n\n\t\t\t\t\tpointsProcessed = pointsProcessed + numPoints;\n\n\t\t\t\t\tlet accepted = null;\n\t\t\t\t\tlet mileage = null;\n\t\t\t\t\tlet acceptedPositions = null;\n\t\t\t\t\tfor(let result of this.getAccepted(numPoints, node, matrix, segment, segmentDir, points,totalMileage)){\n\t\t\t\t\t\tif(!result){\n\t\t\t\t\t\t\tlet duration = performance.now() - checkpoint;\n\t\t\t\t\t\t\t//console.log(`getPointsInsideProfile yield after ${duration}ms`);\n\t\t\t\t\t\t\tyield false;\n\t\t\t\t\t\t\tcheckpoint = performance.now();\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t[accepted, mileage, acceptedPositions] = result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet duration = performance.now() - checkpoint;\n\t\t\t\t\tif(duration > 4){\n\t\t\t\t\t\t//console.log(`getPointsInsideProfile yield after ${duration}ms`);\n\t\t\t\t\t\tyield false;\n\t\t\t\t\t\tcheckpoint = performance.now();\n\t\t\t\t\t}\n\n\t\t\t\t\tpoints.data.position = acceptedPositions;\n\n\t\t\t\t\tlet relevantAttributes = Object.keys(geometry.attributes).filter(a => ![\"position\", \"indices\"].includes(a));\n\t\t\t\t\tfor(let attributeName of relevantAttributes){\n\n\t\t\t\t\t\tlet attribute = geometry.attributes[attributeName];\n\t\t\t\t\t\tlet numElements = attribute.array.length / numPoints;\n\n\t\t\t\t\t\tif(numElements !== parseInt(numElements)){\n\t\t\t\t\t\t\tdebugger;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet Type = attribute.array.constructor;\n\n\t\t\t\t\t\tlet filteredBuffer = new Type(numElements * accepted.length);\n\n\t\t\t\t\t\tlet source = attribute.array;\n\t\t\t\t\t\tlet target = filteredBuffer;\n\n\t\t\t\t\t\tfor(let i = 0; i < accepted.length; i++){\n\n\t\t\t\t\t\t\tlet index = accepted[i];\n\n\t\t\t\t\t\t\tlet start = index * numElements;\n\t\t\t\t\t\t\tlet end = start + numElements;\n\t\t\t\t\t\t\tlet sub = source.subarray(start, end);\n\n\t\t\t\t\t\t\ttarget.set(sub, i * numElements);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpoints.data[attributeName] = filteredBuffer;\n\t\t\t\t\t}\n\n\t\t\t\t\tpoints.data['mileage'] = mileage;\n\t\t\t\t\tpoints.numPoints = accepted.length;\n\n\t\t\t\t\tsegment.points.add(points);\n\t\t\t\t}\n\n\t\t\t\ttotalMileage += segment.length;\n\t\t\t}\n\n\t\t\tfor (let segment of target.segments) {\n\t\t\t\ttarget.boundingBox.union(segment.points.boundingBox);\n\t\t\t}\n\n\t\t\t//console.log(`getPointsInsideProfile finished`);\n\t\t\tyield true;\n\t\t};\n\n\t\tfinishLevelThenCancel () {\n\t\t\tif (this.cancelRequested) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.maxDepth = this.highestLevelServed;\n\t\t\tthis.cancelRequested = true;\n\n\t\t\t//console.log(`maxDepth: ${this.maxDepth}`);\n\t\t};\n\n\t\tcancel () {\n\t\t\tthis.callback.onCancel();\n\n\t\t\tthis.priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; });\n\n\t\t\tlet index = this.pointcloud.profileRequests.indexOf(this);\n\t\t\tif (index >= 0) {\n\t\t\t\tthis.pointcloud.profileRequests.splice(index, 1);\n\t\t\t}\n\t\t};\n\t}\n\n\tclass Version{\n\n\t\tconstructor(version){\n\t\t\tthis.version = version;\n\t\t\tlet vmLength = (version.indexOf('.') === -1) ? version.length : version.indexOf('.');\n\t\t\tthis.versionMajor = parseInt(version.substr(0, vmLength));\n\t\t\tthis.versionMinor = parseInt(version.substr(vmLength + 1));\n\t\t\tif (this.versionMinor.length === 0) {\n\t\t\t\tthis.versionMinor = 0;\n\t\t\t}\n\t\t}\n\n\t\tnewerThan(version){\n\t\t\tlet v = new Version(version);\n\n\t\t\tif (this.versionMajor > v.versionMajor) {\n\t\t\t\treturn true;\n\t\t\t} else if (this.versionMajor === v.versionMajor && this.versionMinor > v.versionMinor) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tequalOrHigher(version){\n\t\t\tlet v = new Version(version);\n\n\t\t\tif (this.versionMajor > v.versionMajor) {\n\t\t\t\treturn true;\n\t\t\t} else if (this.versionMajor === v.versionMajor && this.versionMinor >= v.versionMinor) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tupTo(version){\n\t\t\treturn !this.newerThan(version);\n\t\t}\n\n\t}\n\n\tclass WorkerPool{\n\t\tconstructor(){\n\t\t\tthis.workers = {};\n\t\t}\n\n\t\tgetWorker(url){\n\t\t\tif (!this.workers[url]){\n\t\t\t\tthis.workers[url] = [];\n\t\t\t}\n\n\t\t\tif (this.workers[url].length === 0){\n\t\t\t\tlet worker = new Worker(url);\n\t\t\t\tthis.workers[url].push(worker);\n\t\t\t}\n\n\t\t\tlet worker = this.workers[url].pop();\n\n\t\t\treturn worker;\n\t\t}\n\n\t\treturnWorker(url, worker){\n\t\t\tthis.workers[url].push(worker);\n\t\t}\n\t};\n\n\t//Potree.workerPool = new Potree.WorkerPool();\n\n\tfunction createPointcloudData(pointcloud) {\r\n\r\n\t\tlet material = pointcloud.material;\r\n\r\n\t\tlet ranges = [];\r\n\t\t\r\n\t\tfor(let [name, value] of material.ranges){\r\n\t\t\tranges.push({\r\n\t\t\t\tname: name,\r\n\t\t\t\tvalue: value,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof material.elevationRange[0] === \"number\"){\r\n\t\t\tranges.push({\r\n\t\t\t\tname: \"elevationRange\",\r\n\t\t\t\tvalue: material.elevationRange,\r\n\t\t\t});\r\n\t\t}\r\n\t\tif(typeof material.intensityRange[0] === \"number\"){\r\n\t\t\tranges.push({\r\n\t\t\t\tname: \"intensityRange\",\r\n\t\t\t\tvalue: material.intensityRange,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tlet pointSizeTypeName = Object.entries(Potree.PointSizeType).find(e => e[1] === material.pointSizeType)[0];\r\n\r\n\t\tlet jsonMaterial = {\r\n\t\t\tactiveAttributeName: material.activeAttributeName,\r\n\t\t\tranges: ranges,\r\n\t\t\tsize: material.size,\r\n\t\t\tminSize: material.minSize,\r\n\t\t\tpointSizeType: pointSizeTypeName,\r\n\t\t\tmatcap: material.matcap,\r\n\t\t};\r\n\r\n\t\tconst pcdata = {\r\n\t\t\tname: pointcloud.name,\r\n\t\t\turl: pointcloud.pcoGeometry.url,\r\n\t\t\tposition: pointcloud.position.toArray(),\r\n\t\t\trotation: pointcloud.rotation.toArray(),\r\n\t\t\tscale: pointcloud.scale.toArray(),\r\n\t\t\tmaterial: jsonMaterial,\r\n\t\t};\r\n\r\n\t\treturn pcdata;\r\n\t}\r\n\r\n\tfunction createProfileData(profile){\r\n\t\tconst data = {\r\n\t\t\tuuid: profile.uuid,\r\n\t\t\tname: profile.name,\r\n\t\t\tpoints: profile.points.map(p => p.toArray()),\r\n\t\t\theight: profile.height,\r\n\t\t\twidth: profile.width,\r\n\t\t};\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createVolumeData(volume){\r\n\t\tconst data = {\r\n\t\t\tuuid: volume.uuid,\r\n\t\t\ttype: volume.constructor.name,\r\n\t\t\tname: volume.name,\r\n\t\t\tposition: volume.position.toArray(),\r\n\t\t\trotation: volume.rotation.toArray(),\r\n\t\t\tscale: volume.scale.toArray(),\r\n\t\t\tvisible: volume.visible,\r\n\t\t\tclip: volume.clip,\r\n\t\t};\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createCameraAnimationData(animation){\r\n\r\n\t\tconst controlPoints = animation.controlPoints.map( cp => {\r\n\t\t\tconst cpdata = {\r\n\t\t\t\tposition: cp.position.toArray(),\r\n\t\t\t\ttarget: cp.target.toArray(),\r\n\t\t\t};\r\n\r\n\t\t\treturn cpdata;\r\n\t\t});\r\n\r\n\t\tconst data = {\r\n\t\t\tuuid: animation.uuid,\r\n\t\t\tname: animation.name,\r\n\t\t\tduration: animation.duration,\r\n\t\t\tt: animation.t,\r\n\t\t\tcurveType: animation.curveType,\r\n\t\t\tvisible: animation.visible,\r\n\t\t\tcontrolPoints: controlPoints,\r\n\t\t};\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createMeasurementData(measurement){\r\n\r\n\t\tconst data = {\r\n\t\t\tuuid: measurement.uuid,\r\n\t\t\tname: measurement.name,\r\n\t\t\tpoints: measurement.points.map(p => p.position.toArray()),\r\n\t\t\tshowDistances: measurement.showDistances,\r\n\t\t\tshowCoordinates: measurement.showCoordinates,\r\n\t\t\tshowArea: measurement.showArea,\r\n\t\t\tclosed: measurement.closed,\r\n\t\t\tshowAngles: measurement.showAngles,\r\n\t\t\tshowHeight: measurement.showHeight,\r\n\t\t\tshowCircle: measurement.showCircle,\r\n\t\t\tshowAzimuth: measurement.showAzimuth,\r\n\t\t\tshowEdges: measurement.showEdges,\r\n\t\t\tcolor: measurement.color.toArray(),\r\n\t\t};\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createOrientedImagesData(images){\r\n\t\tconst data = {\r\n\t\t\tcameraParamsPath: images.cameraParamsPath,\r\n\t\t\timageParamsPath: images.imageParamsPath,\r\n\t\t};\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createGeopackageData(geopackage){\r\n\t\tconst data = {\r\n\t\t\tpath: geopackage.path,\r\n\t\t};\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createAnnotationData(annotation){\r\n\r\n\t\tconst data = {\r\n\t\t\tuuid: annotation.uuid,\r\n\t\t\ttitle: annotation.title.toString(),\r\n\t\t\tdescription: annotation.description,\r\n\t\t\tposition: annotation.position.toArray(),\r\n\t\t\toffset: annotation.offset.toArray(),\r\n\t\t\tchildren: [],\r\n\t\t};\r\n\r\n\t\tif(annotation.cameraPosition){\r\n\t\t\tdata.cameraPosition = annotation.cameraPosition.toArray();\r\n\t\t}\r\n\r\n\t\tif(annotation.cameraTarget){\r\n\t\t\tdata.cameraTarget = annotation.cameraTarget.toArray();\r\n\t\t}\r\n\r\n\t\tif(typeof annotation.radius !== \"undefined\"){\r\n\t\t\tdata.radius = annotation.radius;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createAnnotationsData(viewer){\r\n\t\t\r\n\t\tconst map = new Map();\r\n\r\n\t\tviewer.scene.annotations.traverseDescendants(a => {\r\n\t\t\tconst aData = createAnnotationData(a);\r\n\r\n\t\t\tmap.set(a, aData);\r\n\t\t});\r\n\r\n\t\tfor(const [annotation, data] of map){\r\n\t\t\tfor(const child of annotation.children){\r\n\t\t\t\tconst childData = map.get(child);\r\n\t\t\t\tdata.children.push(childData);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst annotations = viewer.scene.annotations.children.map(a => map.get(a));\r\n\r\n\t\treturn annotations;\r\n\t}\r\n\r\n\tfunction createSettingsData(viewer){\r\n\t\treturn {\r\n\t\t\tpointBudget: viewer.getPointBudget(),\r\n\t\t\tfov: viewer.getFOV(),\r\n\t\t\tedlEnabled: viewer.getEDLEnabled(),\r\n\t\t\tedlRadius: viewer.getEDLRadius(),\r\n\t\t\tedlStrength: viewer.getEDLStrength(),\r\n\t\t\tbackground: viewer.getBackground(),\r\n\t\t\tminNodeSize: viewer.getMinNodeSize(),\r\n\t\t\tshowBoundingBoxes: viewer.getShowBoundingBox(),\r\n\t\t};\r\n\t}\r\n\r\n\tfunction createSceneContentData(viewer){\r\n\r\n\t\tconst data = [];\r\n\r\n\t\tconst potreeObjects = [];\r\n\r\n\t\tviewer.scene.scene.traverse(node => {\r\n\t\t\tif(node.potree){\r\n\t\t\t\tpotreeObjects.push(node);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tfor(const object of potreeObjects){\r\n\t\t\t\r\n\t\t\tif(object.potree.file){\r\n\t\t\t\tconst saveObject = {\r\n\t\t\t\t\tfile: object.potree.file,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tdata.push(saveObject);\r\n\t\t\t}\r\n\r\n\r\n\t\t}\r\n\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createViewData(viewer){\r\n\t\tconst view = viewer.scene.view;\r\n\r\n\t\tconst data = {\r\n\t\t\tposition: view.position.toArray(),\r\n\t\t\ttarget: view.getPivot().toArray(),\r\n\t\t};\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction createClassificationData(viewer){\r\n\t\tconst classifications = viewer.classifications;\r\n\r\n\t\tconst data = classifications;\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tfunction saveProject(viewer) {\r\n\r\n\t\tconst scene = viewer.scene;\r\n\r\n\t\tconst data = {\r\n\t\t\ttype: \"Potree\",\r\n\t\t\tversion: 1.7,\r\n\t\t\tsettings: createSettingsData(viewer),\r\n\t\t\tview: createViewData(viewer),\r\n\t\t\tclassification: createClassificationData(viewer),\r\n\t\t\tpointclouds: scene.pointclouds.map(createPointcloudData),\r\n\t\t\tmeasurements: scene.measurements.map(createMeasurementData),\r\n\t\t\tvolumes: scene.volumes.map(createVolumeData),\r\n\t\t\tcameraAnimations: scene.cameraAnimations.map(createCameraAnimationData),\r\n\t\t\tprofiles: scene.profiles.map(createProfileData),\r\n\t\t\tannotations: createAnnotationsData(viewer),\r\n\t\t\torientedImages: scene.orientedImages.map(createOrientedImagesData),\r\n\t\t\tgeopackages: scene.geopackages.map(createGeopackageData),\r\n\t\t\t// objects: createSceneContentData(viewer),\r\n\t\t};\r\n\r\n\t\treturn data;\r\n\t}\n\n\tclass ControlPoint{\r\n\r\n\t\tconstructor(){\r\n\t\t\tthis.position = new Vector3(0, 0, 0);\r\n\t\t\tthis.target = new Vector3(0, 0, 0);\r\n\t\t\tthis.positionHandle = null;\r\n\t\t\tthis.targetHandle = null;\r\n\t\t}\r\n\r\n\t};\r\n\r\n\r\n\r\n\tclass CameraAnimation extends EventDispatcher{\r\n\r\n\t\tconstructor(viewer){\r\n\t\t\tsuper();\r\n\t\t\t\r\n\t\t\tthis.viewer = viewer;\r\n\r\n\t\t\tthis.selectedElement = null;\r\n\r\n\t\t\tthis.controlPoints = [];\r\n\r\n\t\t\tthis.uuid = MathUtils.generateUUID();\r\n\r\n\t\t\tthis.node = new Object3D();\r\n\t\t\tthis.node.name = \"camera animation\";\r\n\t\t\tthis.viewer.scene.scene.add(this.node);\r\n\r\n\t\t\tthis.frustum = this.createFrustum();\r\n\t\t\tthis.node.add(this.frustum);\r\n\r\n\t\t\tthis.name = \"Camera Animation\";\r\n\t\t\tthis.duration = 5;\r\n\t\t\tthis.t = 0;\r\n\t\t\t// \"centripetal\", \"chordal\", \"catmullrom\"\r\n\t\t\tthis.curveType = \"centripetal\"; \r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.createUpdateHook();\r\n\t\t\tthis.createPath();\r\n\t\t}\r\n\r\n\t\tstatic defaultFromView(viewer){\r\n\t\t\tconst animation = new CameraAnimation(viewer);\r\n\r\n\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\t\t\tconst target = viewer.scene.view.getPivot();\r\n\r\n\t\t\tconst cpCenter = new Vector3(\r\n\t\t\t\t0.3 * camera.position.x + 0.7 * target.x,\r\n\t\t\t\t0.3 * camera.position.y + 0.7 * target.y,\r\n\t\t\t\t0.3 * camera.position.z + 0.7 * target.z,\r\n\t\t\t);\r\n\r\n\t\t\tconst targetCenter = new Vector3(\r\n\t\t\t\t0.05 * camera.position.x + 0.95 * target.x,\r\n\t\t\t\t0.05 * camera.position.y + 0.95 * target.y,\r\n\t\t\t\t0.05 * camera.position.z + 0.95 * target.z,\r\n\t\t\t);\r\n\r\n\t\t\tconst r = camera.position.distanceTo(target) * 0.3;\r\n\r\n\t\t\t//const dir = target.clone().sub(camera.position).normalize();\r\n\t\t\tconst angle = Utils.computeAzimuth(camera.position, target);\r\n\r\n\t\t\tconst n = 5;\r\n\t\t\tfor(let i = 0; i < n; i++){\r\n\t\t\t\tlet u = 1.5 * Math.PI * (i / n) + angle;\r\n\r\n\t\t\t\tconst dx = r * Math.cos(u);\r\n\t\t\t\tconst dy = r * Math.sin(u);\r\n\r\n\t\t\t\tconst cpPos = [\r\n\t\t\t\t\tcpCenter.x + dx,\r\n\t\t\t\t\tcpCenter.y + dy,\r\n\t\t\t\t\tcpCenter.z,\r\n\t\t\t\t];\r\n\r\n\t\t\t\tconst targetPos = [\r\n\t\t\t\t\ttargetCenter.x + dx * 0.1,\r\n\t\t\t\t\ttargetCenter.y + dy * 0.1,\r\n\t\t\t\t\ttargetCenter.z,\r\n\t\t\t\t];\r\n\r\n\t\t\t\tconst cp = animation.createControlPoint();\r\n\t\t\t\tcp.position.set(...cpPos);\r\n\t\t\t\tcp.target.set(...targetPos);\r\n\t\t\t}\r\n\r\n\t\t\treturn animation;\r\n\t\t}\r\n\r\n\t\tcreateUpdateHook(){\r\n\t\t\tconst viewer = this.viewer;\r\n\r\n\t\t\tviewer.addEventListener(\"update\", () => {\r\n\r\n\t\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\t\t\t\tconst {width, height} = viewer.renderer.getSize(new Vector2());\r\n\r\n\t\t\t\tthis.node.visible = this.visible;\r\n\r\n\t\t\t\tfor(const cp of this.controlPoints){\r\n\t\t\t\t\t\r\n\t\t\t\t\t{ // position\r\n\t\t\t\t\t\tconst projected = cp.position.clone().project(camera);\r\n\r\n\t\t\t\t\t\tconst visible = this.visible && (projected.z < 1 && projected.z > -1);\r\n\r\n\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\tconst x = width * (projected.x * 0.5 + 0.5);\r\n\t\t\t\t\t\t\tconst y = height - height * (projected.y * 0.5 + 0.5);\r\n\r\n\t\t\t\t\t\t\tcp.positionHandle.svg.style.left = x - cp.positionHandle.svg.clientWidth / 2;\r\n\t\t\t\t\t\t\tcp.positionHandle.svg.style.top = y - cp.positionHandle.svg.clientHeight / 2;\r\n\t\t\t\t\t\t\tcp.positionHandle.svg.style.display = \"\";\r\n\t\t\t\t\t\t}else {\r\n\t\t\t\t\t\t\tcp.positionHandle.svg.style.display = \"none\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t{ // target\r\n\t\t\t\t\t\tconst projected = cp.target.clone().project(camera);\r\n\r\n\t\t\t\t\t\tconst visible = this.visible && (projected.z < 1 && projected.z > -1);\r\n\r\n\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\tconst x = width * (projected.x * 0.5 + 0.5);\r\n\t\t\t\t\t\t\tconst y = height - height * (projected.y * 0.5 + 0.5);\r\n\r\n\t\t\t\t\t\t\tcp.targetHandle.svg.style.left = x - cp.targetHandle.svg.clientWidth / 2;\r\n\t\t\t\t\t\t\tcp.targetHandle.svg.style.top = y - cp.targetHandle.svg.clientHeight / 2;\r\n\t\t\t\t\t\t\tcp.targetHandle.svg.style.display = \"\";\r\n\t\t\t\t\t\t}else {\r\n\t\t\t\t\t\t\tcp.targetHandle.svg.style.display = \"none\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.line.material.resolution.set(width, height);\r\n\r\n\t\t\t\tthis.updatePath();\r\n\r\n\t\t\t\t{ // frustum\r\n\t\t\t\t\tconst frame = this.at(this.t);\r\n\t\t\t\t\tconst frustum = this.frustum;\r\n\r\n\t\t\t\t\tfrustum.position.copy(frame.position);\r\n\t\t\t\t\tfrustum.lookAt(...frame.target.toArray());\r\n\t\t\t\t\tfrustum.scale.set(20, 20, 20);\r\n\r\n\t\t\t\t\tfrustum.material.resolution.set(width, height);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tcreateControlPoint(index){\r\n\r\n\t\t\tif(index === undefined){\r\n\t\t\t\tindex = this.controlPoints.length;\r\n\t\t\t}\r\n\r\n\t\t\tconst cp = new ControlPoint();\r\n\r\n\r\n\t\t\tif(this.controlPoints.length >= 2 && index === 0){\r\n\t\t\t\tconst cp1 = this.controlPoints[0];\r\n\t\t\t\tconst cp2 = this.controlPoints[1];\r\n\r\n\t\t\t\tconst dir = cp1.position.clone().sub(cp2.position).multiplyScalar(0.5);\r\n\t\t\t\tcp.position.copy(cp1.position).add(dir);\r\n\r\n\t\t\t\tconst tDir = cp1.target.clone().sub(cp2.target).multiplyScalar(0.5);\r\n\t\t\t\tcp.target.copy(cp1.target).add(tDir);\r\n\t\t\t}else if(this.controlPoints.length >= 2 && index === this.controlPoints.length){\r\n\t\t\t\tconst cp1 = this.controlPoints[this.controlPoints.length - 2];\r\n\t\t\t\tconst cp2 = this.controlPoints[this.controlPoints.length - 1];\r\n\r\n\t\t\t\tconst dir = cp2.position.clone().sub(cp1.position).multiplyScalar(0.5);\r\n\t\t\t\tcp.position.copy(cp1.position).add(dir);\r\n\r\n\t\t\t\tconst tDir = cp2.target.clone().sub(cp1.target).multiplyScalar(0.5);\r\n\t\t\t\tcp.target.copy(cp2.target).add(tDir);\r\n\t\t\t}else if(this.controlPoints.length >= 2){\r\n\t\t\t\tconst cp1 = this.controlPoints[index - 1];\r\n\t\t\t\tconst cp2 = this.controlPoints[index];\r\n\r\n\t\t\t\tcp.position.copy(cp1.position.clone().add(cp2.position).multiplyScalar(0.5));\r\n\t\t\t\tcp.target.copy(cp1.target.clone().add(cp2.target).multiplyScalar(0.5));\r\n\t\t\t}\r\n\r\n\t\t\t// cp.position.copy(viewer.scene.view.position);\r\n\t\t\t// cp.target.copy(viewer.scene.view.getPivot());\r\n\r\n\t\t\tcp.positionHandle = this.createHandle(cp.position);\r\n\t\t\tcp.targetHandle = this.createHandle(cp.target);\r\n\r\n\t\t\tthis.controlPoints.splice(index, 0, cp);\r\n\r\n\t\t\tthis.dispatchEvent({\r\n\t\t\t\ttype: \"controlpoint_added\",\r\n\t\t\t\tcontrolpoint: cp,\r\n\t\t\t});\r\n\r\n\t\t\treturn cp;\r\n\t\t}\r\n\r\n\t\tremoveControlPoint(cp){\r\n\t\t\tthis.controlPoints = this.controlPoints.filter(_cp => _cp !== cp);\r\n\r\n\t\t\tthis.dispatchEvent({\r\n\t\t\t\ttype: \"controlpoint_removed\",\r\n\t\t\t\tcontrolpoint: cp,\r\n\t\t\t});\r\n\r\n\t\t\tcp.positionHandle.svg.remove();\r\n\t\t\tcp.targetHandle.svg.remove();\r\n\r\n\t\t\t// TODO destroy cp\r\n\t\t}\r\n\r\n\t\tcreatePath(){\r\n\r\n\t\t\t{ // position\r\n\t\t\t\tconst geometry = new LineGeometry();\r\n\r\n\t\t\t\tlet material = new LineMaterial({ \r\n\t\t\t\t\tcolor: 0x00ff00, \r\n\t\t\t\t\tdashSize: 5, \r\n\t\t\t\t\tgapSize: 2,\r\n\t\t\t\t\tlinewidth: 2, \r\n\t\t\t\t\tresolution:  new Vector2(1000, 1000),\r\n\t\t\t\t});\r\n\r\n\t\t\t\tconst line = new Line2(geometry, material);\r\n\r\n\t\t\t\tthis.line = line;\r\n\t\t\t\tthis.node.add(line);\r\n\t\t\t}\r\n\r\n\t\t\t{ // target\r\n\t\t\t\tconst geometry = new LineGeometry();\r\n\r\n\t\t\t\tlet material = new LineMaterial({ \r\n\t\t\t\t\tcolor: 0x0000ff, \r\n\t\t\t\t\tdashSize: 5, \r\n\t\t\t\t\tgapSize: 2,\r\n\t\t\t\t\tlinewidth: 2, \r\n\t\t\t\t\tresolution:  new Vector2(1000, 1000),\r\n\t\t\t\t});\r\n\r\n\t\t\t\tconst line = new Line2(geometry, material);\r\n\r\n\t\t\t\tthis.targetLine = line;\r\n\t\t\t\tthis.node.add(line);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcreateFrustum(){\r\n\r\n\t\t\tconst f = 0.3;\r\n\r\n\t\t\tconst positions = [\r\n\t\t\t\t 0,  0,  0,\r\n\t\t\t\t-f, -f, +1,\r\n\r\n\t\t\t\t 0,  0,  0,\r\n\t\t\t\t f, -f, +1,\r\n\r\n\t\t\t\t 0,  0,  0,\r\n\t\t\t\t f,  f, +1,\r\n\r\n\t\t\t\t 0,  0,  0,\r\n\t\t\t\t-f,  f, +1,\r\n\r\n\t\t\t\t-f, -f, +1,\r\n\t\t\t\t f, -f, +1,\r\n\r\n\t\t\t\t f, -f, +1,\r\n\t\t\t\t f,  f, +1,\r\n\r\n\t\t\t\t f,  f, +1,\r\n\t\t\t\t-f,  f, +1,\r\n\r\n\t\t\t\t-f,  f, +1,\r\n\t\t\t\t-f, -f, +1,\r\n\t\t\t];\r\n\r\n\t\t\tconst geometry = new LineGeometry();\r\n\r\n\t\t\tgeometry.setPositions(positions);\r\n\t\t\tgeometry.verticesNeedUpdate = true;\r\n\t\t\tgeometry.computeBoundingSphere();\r\n\r\n\t\t\tlet material = new LineMaterial({ \r\n\t\t\t\tcolor: 0xff0000, \r\n\t\t\t\tlinewidth: 2, \r\n\t\t\t\tresolution:  new Vector2(1000, 1000),\r\n\t\t\t});\r\n\r\n\t\t\tconst line = new Line2(geometry, material);\r\n\t\t\tline.computeLineDistances();\r\n\t\t\t\r\n\t\t\treturn line;\r\n\t\t}\r\n\r\n\t\tupdatePath(){\r\n\r\n\t\t\t{ // positions\r\n\t\t\t\tconst positions = this.controlPoints.map(cp => cp.position);\r\n\t\t\t\tconst first = positions[0];\r\n\r\n\t\t\t\tconst curve = new CatmullRomCurve3(positions);\r\n\t\t\t\tcurve.curveType = this.curveType;\r\n\r\n\t\t\t\tconst n = 100;\r\n\r\n\t\t\t\tconst curvePositions = [];\r\n\t\t\t\tfor(let k = 0; k <= n; k++){\r\n\t\t\t\t\tconst t = k / n;\r\n\r\n\t\t\t\t\tconst position = curve.getPoint(t).sub(first);\r\n\r\n\t\t\t\t\tcurvePositions.push(position.x, position.y, position.z);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.line.geometry.setPositions(curvePositions);\r\n\t\t\t\tthis.line.geometry.verticesNeedUpdate = true;\r\n\t\t\t\tthis.line.geometry.computeBoundingSphere();\r\n\t\t\t\tthis.line.position.copy(first);\r\n\t\t\t\tthis.line.computeLineDistances();\r\n\r\n\t\t\t\tthis.cameraCurve = curve;\r\n\t\t\t}\r\n\r\n\t\t\t{ // targets\r\n\t\t\t\tconst positions = this.controlPoints.map(cp => cp.target);\r\n\t\t\t\tconst first = positions[0];\r\n\r\n\t\t\t\tconst curve = new CatmullRomCurve3(positions);\r\n\t\t\t\tcurve.curveType = this.curveType;\r\n\r\n\t\t\t\tconst n = 100;\r\n\r\n\t\t\t\tconst curvePositions = [];\r\n\t\t\t\tfor(let k = 0; k <= n; k++){\r\n\t\t\t\t\tconst t = k / n;\r\n\r\n\t\t\t\t\tconst position = curve.getPoint(t).sub(first);\r\n\r\n\t\t\t\t\tcurvePositions.push(position.x, position.y, position.z);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.targetLine.geometry.setPositions(curvePositions);\r\n\t\t\t\tthis.targetLine.geometry.verticesNeedUpdate = true;\r\n\t\t\t\tthis.targetLine.geometry.computeBoundingSphere();\r\n\t\t\t\tthis.targetLine.position.copy(first);\r\n\t\t\t\tthis.targetLine.computeLineDistances();\r\n\r\n\t\t\t\tthis.targetCurve = curve;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tat(t){\r\n\t\t\t\r\n\t\t\tif(t > 1){\r\n\t\t\t\tt = 1;\r\n\t\t\t}else if(t < 0){\r\n\t\t\t\tt = 0;\r\n\t\t\t}\r\n\r\n\t\t\tconst camPos = this.cameraCurve.getPointAt(t);\r\n\t\t\tconst target = this.targetCurve.getPointAt(t);\r\n\r\n\t\t\tconst frame = {\r\n\t\t\t\tposition: camPos,\r\n\t\t\t\ttarget: target,\r\n\t\t\t};\r\n\r\n\t\t\treturn frame;\r\n\t\t}\r\n\r\n\t\tset(t){\r\n\t\t\tthis.t = t;\r\n\t\t}\r\n\r\n\t\tcreateHandle(vector){\r\n\t\t\t\r\n\t\t\tconst svgns = \"http://www.w3.org/2000/svg\";\r\n\t\t\tconst svg = document.createElementNS(svgns, \"svg\");\r\n\r\n\t\t\tsvg.setAttribute(\"width\", \"2em\");\r\n\t\t\tsvg.setAttribute(\"height\", \"2em\");\r\n\t\t\tsvg.setAttribute(\"position\", \"absolute\");\r\n\r\n\t\t\tsvg.style.left = \"50px\";\r\n\t\t\tsvg.style.top = \"50px\";\r\n\t\t\tsvg.style.position = \"absolute\";\r\n\t\t\tsvg.style.zIndex = \"10000\";\r\n\r\n\t\t\tconst circle = document.createElementNS(svgns, 'circle');\r\n\t\t\tcircle.setAttributeNS(null, 'cx', \"1em\");\r\n\t\t\tcircle.setAttributeNS(null, 'cy', \"1em\");\r\n\t\t\tcircle.setAttributeNS(null, 'r', \"0.5em\");\r\n\t\t\tcircle.setAttributeNS(null, 'style', 'fill: red; stroke: black; stroke-width: 0.2em;' );\r\n\t\t\tsvg.appendChild(circle);\r\n\r\n\r\n\t\t\tconst element = this.viewer.renderer.domElement.parentElement;\r\n\t\t\telement.appendChild(svg);\r\n\r\n\r\n\t\t\tconst startDrag = (evt) => {\r\n\t\t\t\tthis.selectedElement = svg;\r\n\r\n\t\t\t\tdocument.addEventListener(\"mousemove\", drag);\r\n\t\t\t};\r\n\r\n\t\t\tconst endDrag = (evt) => {\r\n\t\t\t\tthis.selectedElement = null;\r\n\r\n\t\t\t\tdocument.removeEventListener(\"mousemove\", drag);\r\n\t\t\t};\r\n\r\n\t\t\tconst drag = (evt) => {\r\n\t\t\t\tif (this.selectedElement) {\r\n\t\t\t\t\tevt.preventDefault();\r\n\r\n\t\t\t\t\tconst rect = viewer.renderer.domElement.getBoundingClientRect();\r\n\r\n\t\t\t\t\tconst x = evt.clientX - rect.x;\r\n\t\t\t\t\tconst y = evt.clientY - rect.y;\r\n\r\n\t\t\t\t\tconst {width, height} = this.viewer.renderer.getSize(new Vector2());\r\n\t\t\t\t\tconst camera = this.viewer.scene.getActiveCamera();\r\n\t\t\t\t\t//const cp = this.controlPoints.find(cp => cp.handle.svg === svg);\r\n\t\t\t\t\tconst projected = vector.clone().project(camera);\r\n\r\n\t\t\t\t\tprojected.x = ((x / width) - 0.5) / 0.5;\r\n\t\t\t\t\tprojected.y = (-(y - height) / height - 0.5) / 0.5;\r\n\r\n\t\t\t\t\tconst unprojected = projected.clone().unproject(camera);\r\n\t\t\t\t\tvector.set(unprojected.x, unprojected.y, unprojected.z);\r\n\r\n\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tsvg.addEventListener('mousedown', startDrag);\r\n\t\t\tsvg.addEventListener('mouseup', endDrag);\r\n\r\n\t\t\tconst handle = {\r\n\t\t\t\tsvg: svg,\r\n\t\t\t};\r\n\r\n\t\t\treturn handle;\r\n\t\t}\r\n\r\n\t\tsetVisible(visible){\r\n\t\t\tthis.node.visible = visible;\r\n\r\n\t\t\tconst display = visible ? \"\" : \"none\";\r\n\r\n\t\t\tfor(const cp of this.controlPoints){\r\n\t\t\t\tcp.positionHandle.svg.style.display = display;\r\n\t\t\t\tcp.targetHandle.svg.style.display = display;\r\n\t\t\t}\r\n\r\n\t\t\tthis.visible = visible;\r\n\t\t}\r\n\r\n\t\tsetDuration(duration){\r\n\t\t\tthis.duration = duration;\r\n\t\t}\r\n\r\n\t\tgetDuration(duration){\r\n\t\t\treturn this.duration;\r\n\t\t}\r\n\r\n\t\tplay(){\r\n\r\n\t\t\tconst tStart = performance.now();\r\n\t\t\tconst duration = this.duration;\r\n\r\n\t\t\tconst originalyVisible = this.visible;\r\n\t\t\tthis.setVisible(false);\r\n\r\n\t\t\tconst onUpdate = (delta) => {\r\n\r\n\t\t\t\tlet tNow = performance.now();\r\n\t\t\t\tlet elapsed = (tNow - tStart) / 1000;\r\n\t\t\t\tlet t = elapsed / duration;\r\n\r\n\t\t\t\tthis.set(t);\r\n\r\n\t\t\t\tconst frame = this.at(t);\r\n\r\n\t\t\t\tviewer.scene.view.position.copy(frame.position);\r\n\t\t\t\tviewer.scene.view.lookAt(frame.target);\r\n\r\n\r\n\t\t\t\tif(t > 1){\r\n\t\t\t\t\tthis.setVisible(originalyVisible);\r\n\r\n\t\t\t\t\tthis.viewer.removeEventListener(\"update\", onUpdate);\r\n\t\t\t\t}\r\n\r\n\t\t\t};\r\n\r\n\t\t\tthis.viewer.addEventListener(\"update\", onUpdate);\r\n\r\n\t\t}\r\n\r\n\t}\n\n\tfunction loadPointCloud(viewer, data){\r\n\r\n\t\tlet loadMaterial = (target) => {\r\n\r\n\t\t\tif(data.material){\r\n\r\n\t\t\t\tif(data.material.activeAttributeName != null){\r\n\t\t\t\t\ttarget.activeAttributeName = data.material.activeAttributeName;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data.material.ranges != null){\r\n\t\t\t\t\tfor(let range of data.material.ranges){\r\n\r\n\t\t\t\t\t\tif(range.name === \"elevationRange\"){\r\n\t\t\t\t\t\t\ttarget.elevationRange = range.value;\r\n\t\t\t\t\t\t}else if(range.name === \"intensityRange\"){\r\n\t\t\t\t\t\t\ttarget.intensityRange = range.value;\r\n\t\t\t\t\t\t}else {\r\n\t\t\t\t\t\t\ttarget.setRange(range.name, range.value);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data.material.size != null){\r\n\t\t\t\t\ttarget.size = data.material.size;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data.material.minSize != null){\r\n\t\t\t\t\ttarget.minSize = data.material.minSize;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data.material.pointSizeType != null){\r\n\t\t\t\t\ttarget.pointSizeType = PointSizeType[data.material.pointSizeType];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data.material.matcap != null){\r\n\t\t\t\t\ttarget.matcap = data.material.matcap;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else if(data.activeAttributeName != null){\r\n\t\t\t\ttarget.activeAttributeName = data.activeAttributeName;\r\n\t\t\t}else {\r\n\t\t\t\t// no material data\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\tconst promise = new Promise((resolve) => {\r\n\r\n\t\t\tconst names = viewer.scene.pointclouds.map(p => p.name);\r\n\t\t\tconst alreadyExists = names.includes(data.name);\r\n\r\n\t\t\tif(alreadyExists){\r\n\t\t\t\tresolve();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tPotree.loadPointCloud(data.url, data.name, (e) => {\r\n\t\t\t\tconst {pointcloud} = e;\r\n\r\n\t\t\t\tpointcloud.position.set(...data.position);\r\n\t\t\t\tpointcloud.rotation.set(...data.rotation);\r\n\t\t\t\tpointcloud.scale.set(...data.scale);\r\n\r\n\t\t\t\tloadMaterial(pointcloud.material);\r\n\r\n\t\t\t\tviewer.scene.addPointCloud(pointcloud);\r\n\r\n\t\t\t\tresolve(pointcloud);\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn promise;\r\n\t}\r\n\r\n\tfunction loadMeasurement(viewer, data){\r\n\r\n\t\tconst duplicate = viewer.scene.measurements.find(measure => measure.uuid === data.uuid);\r\n\t\tif(duplicate){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst measure = new Measure();\r\n\r\n\t\tmeasure.uuid = data.uuid;\r\n\t\tmeasure.name = data.name;\r\n\t\tmeasure.showDistances = data.showDistances;\r\n\t\tmeasure.showCoordinates = data.showCoordinates;\r\n\t\tmeasure.showArea = data.showArea;\r\n\t\tmeasure.closed = data.closed;\r\n\t\tmeasure.showAngles = data.showAngles;\r\n\t\tmeasure.showHeight = data.showHeight;\r\n\t\tmeasure.showCircle = data.showCircle;\r\n\t\tmeasure.showAzimuth = data.showAzimuth;\r\n\t\tmeasure.showEdges = data.showEdges;\r\n\t\t// color\r\n\r\n\t\tfor(const point of data.points){\r\n\t\t\tconst pos = new Vector3(...point);\r\n\t\t\tmeasure.addMarker(pos);\r\n\t\t}\r\n\r\n\t\tviewer.scene.addMeasurement(measure);\r\n\r\n\t}\r\n\r\n\tfunction loadVolume(viewer, data){\r\n\r\n\t\tconst duplicate = viewer.scene.volumes.find(volume => volume.uuid === data.uuid);\r\n\t\tif(duplicate){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet volume = new Potree[data.type];\r\n\r\n\t\tvolume.uuid = data.uuid;\r\n\t\tvolume.name = data.name;\r\n\t\tvolume.position.set(...data.position);\r\n\t\tvolume.rotation.set(...data.rotation);\r\n\t\tvolume.scale.set(...data.scale);\r\n\t\tvolume.visible = data.visible;\r\n\t\tvolume.clip = data.clip;\r\n\r\n\t\tviewer.scene.addVolume(volume);\r\n\t}\r\n\r\n\tfunction loadCameraAnimation(viewer, data){\r\n\r\n\t\tconst duplicate = viewer.scene.cameraAnimations.find(a => a.uuid === data.uuid);\r\n\t\tif(duplicate){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst animation = new CameraAnimation(viewer);\r\n\r\n\t\tanimation.uuid = data.uuid;\r\n\t\tanimation.name = data.name;\r\n\t\tanimation.duration = data.duration;\r\n\t\tanimation.t = data.t;\r\n\t\tanimation.curveType = data.curveType;\r\n\t\tanimation.visible = data.visible;\r\n\t\tanimation.controlPoints = [];\r\n\r\n\t\tfor(const cpdata of data.controlPoints){\r\n\t\t\tconst cp = animation.createControlPoint();\r\n\r\n\t\t\tcp.position.set(...cpdata.position);\r\n\t\t\tcp.target.set(...cpdata.target);\r\n\t\t}\r\n\r\n\t\tviewer.scene.addCameraAnimation(animation);\r\n\t}\r\n\r\n\tfunction loadOrientedImages(viewer, images){\r\n\r\n\t\tconst {cameraParamsPath, imageParamsPath} = images;\r\n\r\n\t\tconst duplicate = viewer.scene.orientedImages.find(i => i.imageParamsPath === imageParamsPath);\r\n\t\tif(duplicate){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tPotree.OrientedImageLoader.load(cameraParamsPath, imageParamsPath, viewer).then( images => {\r\n\t\t\tviewer.scene.addOrientedImages(images);\r\n\t\t});\r\n\r\n\t}\r\n\r\n\tfunction loadGeopackage(viewer, geopackage){\r\n\r\n\t\tconst path = geopackage.path;\r\n\r\n\t\tconst duplicate = viewer.scene.geopackages.find(i => i.path === path);\r\n\t\tif(duplicate){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst projection = viewer.getProjection();\r\n\r\n\t\tproj4.defs(\"WGS84\", \"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs\");\r\n\t\tproj4.defs(\"pointcloud\", projection);\r\n\t\tconst transform = proj4(\"WGS84\", \"pointcloud\");\r\n\t\tconst params = {\r\n\t\t\ttransform: transform,\r\n\t\t};\r\n\r\n\t\tPotree.GeoPackageLoader.loadUrl(path, params).then(data => {\r\n\t\t\tviewer.scene.addGeopackage(data);\r\n\t\t});\r\n\t\t\r\n\r\n\t}\r\n\r\n\tfunction loadSettings(viewer, data){\r\n\t\tif(!data){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tviewer.setPointBudget(data.pointBudget);\r\n\t\tviewer.setFOV(data.fov);\r\n\t\tviewer.setEDLEnabled(data.edlEnabled);\r\n\t\tviewer.setEDLRadius(data.edlRadius);\r\n\t\tviewer.setEDLStrength(data.edlStrength);\r\n\t\tviewer.setBackground(data.background);\r\n\t\tviewer.setMinNodeSize(data.minNodeSize);\r\n\t\tviewer.setShowBoundingBox(data.showBoundingBoxes);\r\n\t}\r\n\r\n\tfunction loadView(viewer, view){\r\n\t\tviewer.scene.view.position.set(...view.position);\r\n\t\tviewer.scene.view.lookAt(...view.target);\r\n\t}\r\n\r\n\tfunction loadAnnotationItem(item){\r\n\r\n\t\tconst annotation = new Annotation({\r\n\t\t\tposition: item.position,\r\n\t\t\ttitle: item.title,\r\n\t\t\tcameraPosition: item.cameraPosition,\r\n\t\t\tcameraTarget: item.cameraTarget,\r\n\t\t});\r\n\r\n\r\n\t\tannotation.description = item.description;\r\n\t\tannotation.uuid = item.uuid;\r\n\r\n\t\tif(item.offset){\r\n\t\t\tannotation.offset.set(...item.offset);\r\n\t\t}\r\n\r\n\t\treturn annotation;\r\n\t}\r\n\r\n\tfunction loadAnnotations(viewer, data){\r\n\r\n\t\tif(!data){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst findDuplicate = (item) => {\r\n\r\n\t\t\tlet duplicate = null;\r\n\r\n\t\t\tviewer.scene.annotations.traverse( a => {\r\n\t\t\t\tif(a.uuid === item.uuid){\r\n\t\t\t\t\tduplicate = a;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn duplicate;\r\n\t\t};\r\n\r\n\t\tconst traverse = (item, parent) => {\r\n\r\n\t\t\tconst duplicate = findDuplicate(item);\r\n\t\t\tif(duplicate){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst annotation = loadAnnotationItem(item);\r\n\r\n\t\t\tfor(const childItem of item.children){\r\n\t\t\t\ttraverse(childItem, annotation);\r\n\t\t\t}\r\n\r\n\t\t\tparent.add(annotation);\r\n\r\n\t\t};\r\n\r\n\t\tfor(const item of data){\r\n\t\t\ttraverse(item, viewer.scene.annotations);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction loadProfile(viewer, data){\r\n\t\t\r\n\t\tconst {name, points} = data;\r\n\r\n\t\tconst duplicate = viewer.scene.profiles.find(profile => profile.uuid === data.uuid);\r\n\t\tif(duplicate){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet profile = new Potree.Profile();\r\n\t\tprofile.name = name;\r\n\t\tprofile.uuid = data.uuid;\r\n\r\n\t\tprofile.setWidth(data.width);\r\n\r\n\t\tfor(const point of points){\r\n\t\t\tprofile.addMarker(new Vector3(...point));\r\n\t\t}\r\n\t\t\r\n\t\tviewer.scene.addProfile(profile);\r\n\t}\r\n\r\n\tfunction loadClassification(viewer, data){\r\n\t\tif(!data){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst classifications = data;\r\n\r\n\t\tviewer.setClassifications(classifications);\r\n\t}\r\n\r\n\tasync function loadProject(viewer, data){\r\n\r\n\t\tif(data.type !== \"Potree\"){\r\n\t\t\tconsole.error(\"not a valid Potree project\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tloadSettings(viewer, data.settings);\r\n\r\n\t\tloadView(viewer, data.view);\r\n\r\n\t\tconst pointcloudPromises = [];\r\n\t\tfor(const pointcloud of data.pointclouds){\r\n\t\t\tconst promise = loadPointCloud(viewer, pointcloud);\r\n\t\t\tpointcloudPromises.push(promise);\r\n\t\t}\r\n\r\n\t\tfor(const measure of data.measurements){\r\n\t\t\tloadMeasurement(viewer, measure);\r\n\t\t}\r\n\r\n\t\tfor(const volume of data.volumes){\r\n\t\t\tloadVolume(viewer, volume);\r\n\t\t}\r\n\r\n\t\tfor(const animation of data.cameraAnimations){\r\n\t\t\tloadCameraAnimation(viewer, animation);\r\n\t\t}\r\n\r\n\t\tfor(const profile of data.profiles){\r\n\t\t\tloadProfile(viewer, profile);\r\n\t\t}\r\n\r\n\t\tif(data.orientedImages){\r\n\t\t\tfor(const images of data.orientedImages){\r\n\t\t\t\tloadOrientedImages(viewer, images);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tloadAnnotations(viewer, data.annotations);\r\n\r\n\t\tloadClassification(viewer, data.classification);\r\n\r\n\t\t// need to load at least one point cloud that defines the scene projection,\r\n\t\t// before we can load stuff in other projections such as geopackages\r\n\t\t//await Promise.any(pointcloudPromises); // (not yet supported)\r\n\t\tUtils.waitAny(pointcloudPromises).then( () => {\r\n\t\t\tif(data.geopackages){\r\n\t\t\t\tfor(const geopackage of data.geopackages){\r\n\t\t\t\t\tloadGeopackage(viewer, geopackage);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tawait Promise.all(pointcloudPromises);\r\n\t}\n\n\t//\n\t// Algorithm by Christian Boucheny\n\t// shader code taken and adapted from CloudCompare\n\t//\n\t// see\n\t// https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL\n\t// http://www.kitware.com/source/home/post/9\n\t// https://tel.archives-ouvertes.fr/tel-00438464/document p. 115+ (french)\n\n\tclass EyeDomeLightingMaterial extends RawShaderMaterial{\n\n\t\tconstructor(parameters = {}){\n\t\t\tsuper();\n\n\t\t\tlet uniforms = {\n\t\t\t\tscreenWidth:    { type: 'f', \tvalue: 0 },\n\t\t\t\tscreenHeight:   { type: 'f', \tvalue: 0 },\n\t\t\t\tedlStrength:    { type: 'f', \tvalue: 1.0 },\n\t\t\t\tuNear:          { type: 'f', \tvalue: 1.0 },\n\t\t\t\tuFar:           { type: 'f', \tvalue: 1.0 },\n\t\t\t\tradius:         { type: 'f', \tvalue: 1.0 },\n\t\t\t\tneighbours:     { type: '2fv', \tvalue: [] },\n\t\t\t\tdepthMap:       { type: 't', \tvalue: null },\n\t\t\t\tuEDLColor:      { type: 't', \tvalue: null },\n\t\t\t\tuEDLDepth:      { type: 't', \tvalue: null },\n\t\t\t\topacity:        { type: 'f',\tvalue: 1.0 },\n\t\t\t\tuProj:          { type: \"Matrix4fv\", value: [] },\n\t\t\t};\n\n\t\t\tthis.setValues({\n\t\t\t\tuniforms: uniforms,\n\t\t\t\tvertexShader: this.getDefines() + Shaders['edl.vs'],\n\t\t\t\tfragmentShader: this.getDefines() + Shaders['edl.fs'],\n\t\t\t\tlights: false\n\t\t\t});\n\n\t\t\tthis.neighbourCount = 8;\n\t\t}\n\n\t\tgetDefines() {\n\t\t\tlet defines = '';\n\n\t\t\tdefines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\\n';\n\n\t\t\treturn defines;\n\t\t}\n\n\t\tupdateShaderSource() {\n\n\t\t\tlet vs = this.getDefines() + Shaders['edl.vs'];\n\t\t\tlet fs = this.getDefines() + Shaders['edl.fs'];\n\n\t\t\tthis.setValues({\n\t\t\t\tvertexShader: vs,\n\t\t\t\tfragmentShader: fs\n\t\t\t});\n\n\t\t\tthis.uniforms.neighbours.value = this.neighbours;\n\n\t\t\tthis.needsUpdate = true;\n\t\t}\n\n\t\tget neighbourCount(){\n\t\t\treturn this._neighbourCount;\n\t\t}\n\n\t\tset neighbourCount(value){\n\t\t\tif (this._neighbourCount !== value) {\n\t\t\t\tthis._neighbourCount = value;\n\t\t\t\tthis.neighbours = new Float32Array(this._neighbourCount * 2);\n\t\t\t\tfor (let c = 0; c < this._neighbourCount; c++) {\n\t\t\t\t\tthis.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount);\n\t\t\t\t\tthis.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount);\n\t\t\t\t}\n\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\t\t}\n\n\t\t\n\t}\n\n\tclass NormalizationEDLMaterial extends RawShaderMaterial{\n\n\t\tconstructor(parameters = {}){\n\t\t\tsuper();\n\n\t\t\tlet uniforms = {\n\t\t\t\tscreenWidth:    { type: 'f',   value: 0 },\n\t\t\t\tscreenHeight:   { type: 'f',   value: 0 },\n\t\t\t\tedlStrength:    { type: 'f',   value: 1.0 },\n\t\t\t\tradius:         { type: 'f',   value: 1.0 },\n\t\t\t\tneighbours:     { type: '2fv', value: [] },\n\t\t\t\tuEDLMap:        { type: 't',   value: null },\n\t\t\t\tuDepthMap:      { type: 't',   value: null },\n\t\t\t\tuWeightMap:     { type: 't',   value: null },\n\t\t\t};\n\n\t\t\tthis.setValues({\n\t\t\t\tuniforms: uniforms,\n\t\t\t\tvertexShader: this.getDefines() + Shaders['normalize.vs'],\n\t\t\t\tfragmentShader: this.getDefines() + Shaders['normalize_and_edl.fs'],\n\t\t\t});\n\n\t\t\tthis.neighbourCount = 8;\n\t\t}\n\n\t\tgetDefines() {\n\t\t\tlet defines = '';\n\n\t\t\tdefines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\\n';\n\n\t\t\treturn defines;\n\t\t}\n\n\t\tupdateShaderSource() {\n\n\t\t\tlet vs = this.getDefines() + Shaders['normalize.vs'];\n\t\t\tlet fs = this.getDefines() + Shaders['normalize_and_edl.fs'];\n\n\t\t\tthis.setValues({\n\t\t\t\tvertexShader: vs,\n\t\t\t\tfragmentShader: fs\n\t\t\t});\n\n\t\t\tthis.uniforms.neighbours.value = this.neighbours;\n\n\t\t\tthis.needsUpdate = true;\n\t\t}\n\n\t\tget neighbourCount(){\n\t\t\treturn this._neighbourCount;\n\t\t}\n\n\t\tset neighbourCount(value){\n\t\t\tif (this._neighbourCount !== value) {\n\t\t\t\tthis._neighbourCount = value;\n\t\t\t\tthis.neighbours = new Float32Array(this._neighbourCount * 2);\n\t\t\t\tfor (let c = 0; c < this._neighbourCount; c++) {\n\t\t\t\t\tthis.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount);\n\t\t\t\t\tthis.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount);\n\t\t\t\t}\n\n\t\t\t\tthis.updateShaderSource();\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\tclass NormalizationMaterial extends RawShaderMaterial{\n\n\t\tconstructor(parameters = {}){\n\t\t\tsuper();\n\n\t\t\tlet uniforms = {\n\t\t\t\tuDepthMap:\t\t{ type: 't', value: null },\n\t\t\t\tuWeightMap:\t\t{ type: 't', value: null },\n\t\t\t};\n\n\t\t\tthis.setValues({\n\t\t\t\tuniforms: uniforms,\n\t\t\t\tvertexShader: this.getDefines() + Shaders['normalize.vs'],\n\t\t\t\tfragmentShader: this.getDefines() + Shaders['normalize.fs'],\n\t\t\t});\n\t\t}\n\n\t\tgetDefines() {\n\t\t\tlet defines = '';\n\n\t\t\treturn defines;\n\t\t}\n\n\t\tupdateShaderSource() {\n\n\t\t\tlet vs = this.getDefines() + Shaders['normalize.vs'];\n\t\t\tlet fs = this.getDefines() + Shaders['normalize.fs'];\n\n\t\t\tthis.setValues({\n\t\t\t\tvertexShader: vs,\n\t\t\t\tfragmentShader: fs\n\t\t\t});\n\n\t\t\tthis.needsUpdate = true;\n\t\t}\n\n\t}\n\n\t/**\n\t * laslaz code taken and adapted from plas.io js-laslaz\n\t *\thttp://plas.io/\n\t *  https://github.com/verma/plasio\n\t *\n\t * Thanks to Uday Verma and Howard Butler\n\t *\n\t */\n\n\tclass LasLazLoader {\n\n\t\tconstructor (version, extension) {\n\t\t\tif (typeof (version) === 'string') {\n\t\t\t\tthis.version = new Version(version);\n\t\t\t} else {\n\t\t\t\tthis.version = version;\n\t\t\t}\n\n\t\t\tthis.extension = extension;\n\t\t}\n\n\t\tstatic progressCB () {\n\n\t\t}\n\n\t\tload (node) {\n\t\t\tif (node.loaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet url = node.getURL();\n\n\t\t\tif (this.version.equalOrHigher('1.4')) {\n\t\t\t\turl += `.${this.extension}`;\n\t\t\t}\n\n\t\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\t\txhr.open('GET', url, true);\n\t\t\txhr.responseType = 'arraybuffer';\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\t\txhr.onreadystatechange = () => {\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\tif (xhr.status === 200 || xhr.status === 0) {\n\t\t\t\t\t\tlet buffer = xhr.response;\n\t\t\t\t\t\tthis.parse(node, buffer);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + url);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\txhr.send(null);\n\t\t}\n\n\t\tasync parse(node, buffer){\n\t\t\tlet lf = new LASFile(buffer);\n\t\t\tlet handler = new LasLazBatcher(node);\n\n\t\t\ttry{\n\t\t\t\t await lf.open();\n\t\t\t\t lf.isOpen = true;\n\t\t\t}catch(e){\n\t\t\t\tconsole.log(\"failed to open file. :(\");\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet header = await lf.getHeader();\n\n\t\t\tlet skip = 1;\n\t\t\tlet totalRead = 0;\n\t\t\tlet totalToRead = (skip <= 1 ? header.pointsCount : header.pointsCount / skip);\n\n\t\t\tlet hasMoreData = true;\n\n\t\t\twhile(hasMoreData){\n\t\t\t\tlet data = await lf.readData(1000 * 1000, 0, skip);\n\n\t\t\t\thandler.push(new LASDecoder(data.buffer,\n\t\t\t\t\theader.pointsFormatId,\n\t\t\t\t\theader.pointsStructSize,\n\t\t\t\t\tdata.count,\n\t\t\t\t\theader.scale,\n\t\t\t\t\theader.offset,\n\t\t\t\t\theader.mins, header.maxs));\n\n\t\t\t\ttotalRead += data.count;\n\t\t\t\tLasLazLoader.progressCB(totalRead / totalToRead);\n\n\t\t\t\thasMoreData = data.hasMoreData;\n\t\t\t}\n\n\t\t\theader.totalRead = totalRead;\n\t\t\theader.versionAsString = lf.versionAsString;\n\t\t\theader.isCompressed = lf.isCompressed;\n\n\t\t\tLasLazLoader.progressCB(1);\n\n\t\t\ttry{\n\t\t\t\tawait lf.close();\n\n\t\t\t\tlf.isOpen = false;\n\t\t\t}catch(e){\n\t\t\t\tconsole.error(\"failed to close las/laz file!!!\");\n\t\t\t\t\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\thandle (node, url) {\n\n\t\t}\n\t};\n\n\tclass LasLazBatcher{\n\n\t\tconstructor (node) {\n\t\t\tthis.node = node;\n\t\t}\n\n\t\tpush (lasBuffer) {\n\t\t\tconst workerPath = Potree.scriptPath + '/workers/LASDecoderWorker.js';\n\t\t\tconst worker = Potree.workerPool.getWorker(workerPath);\n\t\t\tconst node = this.node;\n\t\t\tconst pointAttributes = node.pcoGeometry.pointAttributes;\n\n\t\t\tworker.onmessage = (e) => {\n\t\t\t\tlet geometry = new BufferGeometry();\n\t\t\t\tlet numPoints = lasBuffer.pointsCount;\n\n\t\t\t\tlet positions = new Float32Array(e.data.position);\n\t\t\t\tlet colors = new Uint8Array(e.data.color);\n\t\t\t\tlet intensities = new Float32Array(e.data.intensity);\n\t\t\t\tlet classifications = new Uint8Array(e.data.classification);\n\t\t\t\tlet returnNumbers = new Uint8Array(e.data.returnNumber);\n\t\t\t\tlet numberOfReturns = new Uint8Array(e.data.numberOfReturns);\n\t\t\t\tlet pointSourceIDs = new Uint16Array(e.data.pointSourceID);\n\t\t\t\tlet indices = new Uint8Array(e.data.indices);\n\n\t\t\t\tgeometry.setAttribute('position', new BufferAttribute(positions, 3));\n\t\t\t\tgeometry.setAttribute('color', new BufferAttribute(colors, 4, true));\n\t\t\t\tgeometry.setAttribute('intensity', new BufferAttribute(intensities, 1));\n\t\t\t\tgeometry.setAttribute('classification', new BufferAttribute(classifications, 1));\n\t\t\t\tgeometry.setAttribute('return number', new BufferAttribute(returnNumbers, 1));\n\t\t\t\tgeometry.setAttribute('number of returns', new BufferAttribute(numberOfReturns, 1));\n\t\t\t\tgeometry.setAttribute('source id', new BufferAttribute(pointSourceIDs, 1));\n\t\t\t\tgeometry.setAttribute('indices', new BufferAttribute(indices, 4));\n\t\t\t\tgeometry.attributes.indices.normalized = true;\n\n\t\t\t\tfor(const key in e.data.ranges){\n\t\t\t\t\tconst range = e.data.ranges[key];\n\n\t\t\t\t\tconst attribute = pointAttributes.attributes.find(a => a.name === key);\n\t\t\t\t\tattribute.range[0] = Math.min(attribute.range[0], range[0]);\n\t\t\t\t\tattribute.range[1] = Math.max(attribute.range[1], range[1]);\n\t\t\t\t}\n\n\t\t\t\tlet tightBoundingBox = new Box3(\n\t\t\t\t\tnew Vector3().fromArray(e.data.tightBoundingBox.min),\n\t\t\t\t\tnew Vector3().fromArray(e.data.tightBoundingBox.max)\n\t\t\t\t);\n\n\t\t\t\tgeometry.boundingBox = this.node.boundingBox;\n\t\t\t\tthis.node.tightBoundingBox = tightBoundingBox;\n\n\t\t\t\tthis.node.geometry = geometry;\n\t\t\t\tthis.node.numPoints = numPoints;\n\t\t\t\tthis.node.loaded = true;\n\t\t\t\tthis.node.loading = false;\n\t\t\t\tPotree.numNodesLoading--;\n\t\t\t\tthis.node.mean = new Vector3(...e.data.mean);\n\n\t\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\t\t\t};\n\n\t\t\tlet message = {\n\t\t\t\tbuffer: lasBuffer.arrayb,\n\t\t\t\tnumPoints: lasBuffer.pointsCount,\n\t\t\t\tpointSize: lasBuffer.pointSize,\n\t\t\t\tpointFormatID: 2,\n\t\t\t\tscale: lasBuffer.scale,\n\t\t\t\toffset: lasBuffer.offset,\n\t\t\t\tmins: lasBuffer.mins,\n\t\t\t\tmaxs: lasBuffer.maxs\n\t\t\t};\n\t\t\tworker.postMessage(message, [message.buffer]);\n\t\t};\n\t}\n\n\tclass BinaryLoader{\n\n\t\tconstructor(version, boundingBox, scale){\n\t\t\tif (typeof (version) === 'string') {\n\t\t\t\tthis.version = new Version(version);\n\t\t\t} else {\n\t\t\t\tthis.version = version;\n\t\t\t}\n\n\t\t\tthis.boundingBox = boundingBox;\n\t\t\tthis.scale = scale;\n\t\t}\n\n\t\tload(node){\n\t\t\tif (node.loaded) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet url = node.getURL();\n\n\t\t\tif (this.version.equalOrHigher('1.4')) {\n\t\t\t\turl += '.bin';\n\t\t\t}\n\n\t\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\t\txhr.open('GET', url, true);\n\t\t\txhr.responseType = 'arraybuffer';\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\t\txhr.onreadystatechange = () => {\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\tif((xhr.status === 200 || xhr.status === 0) &&  xhr.response !== null){\n\t\t\t\t\t\tlet buffer = xhr.response;\n\t\t\t\t\t\tthis.parse(node, buffer);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//console.error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`);\n\t\t\t\t\t\tthrow new Error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\ttry {\n\t\t\t\txhr.send(null);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log('fehler beim laden der punktwolke: ' + e);\n\t\t\t}\n\t\t};\n\n\t\tparse(node, buffer){\n\t\t\tlet pointAttributes = node.pcoGeometry.pointAttributes;\n\t\t\tlet numPoints = buffer.byteLength / node.pcoGeometry.pointAttributes.byteSize;\n\n\t\t\tif (this.version.upTo('1.5')) {\n\t\t\t\tnode.numPoints = numPoints;\n\t\t\t}\n\n\t\t\tlet workerPath = Potree.scriptPath + '/workers/BinaryDecoderWorker.js';\n\t\t\tlet worker = Potree.workerPool.getWorker(workerPath);\n\n\t\t\tworker.onmessage = function (e) {\n\n\t\t\t\tlet data = e.data;\n\t\t\t\tlet buffers = data.attributeBuffers;\n\t\t\t\tlet tightBoundingBox = new Box3(\n\t\t\t\t\tnew Vector3().fromArray(data.tightBoundingBox.min),\n\t\t\t\t\tnew Vector3().fromArray(data.tightBoundingBox.max)\n\t\t\t\t);\n\n\t\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\n\t\t\t\tlet geometry = new BufferGeometry();\n\n\t\t\t\tfor(let property in buffers){\n\t\t\t\t\tlet buffer = buffers[property].buffer;\n\t\t\t\t\tlet batchAttribute = buffers[property].attribute;\n\n\t\t\t\t\tif (property === \"POSITION_CARTESIAN\") {\n\t\t\t\t\t\tgeometry.setAttribute('position', new BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t\t} else if (property === \"rgba\") {\n\t\t\t\t\t\tgeometry.setAttribute(\"rgba\", new BufferAttribute(new Uint8Array(buffer), 4, true));\n\t\t\t\t\t} else if (property === \"NORMAL_SPHEREMAPPED\") {\n\t\t\t\t\t\tgeometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t\t} else if (property === \"NORMAL_OCT16\") {\n\t\t\t\t\t\tgeometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t\t} else if (property === \"NORMAL\") {\n\t\t\t\t\t\tgeometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t\t} else if (property === \"INDICES\") {\n\t\t\t\t\t\tlet bufferAttribute = new BufferAttribute(new Uint8Array(buffer), 4);\n\t\t\t\t\t\tbufferAttribute.normalized = true;\n\t\t\t\t\t\tgeometry.setAttribute('indices', bufferAttribute);\n\t\t\t\t\t} else if (property === \"SPACING\") {\n\t\t\t\t\t\tlet bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1);\n\t\t\t\t\t\tgeometry.setAttribute('spacing', bufferAttribute);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1);\n\n\t\t\t\t\t\tbufferAttribute.potree = {\n\t\t\t\t\t\t\toffset: buffers[property].offset,\n\t\t\t\t\t\t\tscale: buffers[property].scale,\n\t\t\t\t\t\t\tpreciseBuffer: buffers[property].preciseBuffer,\n\t\t\t\t\t\t\trange: batchAttribute.range,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgeometry.setAttribute(property, bufferAttribute);\n\n\t\t\t\t\t\tconst attribute = pointAttributes.attributes.find(a => a.name === batchAttribute.name);\n\t\t\t\t\t\tattribute.range[0] = Math.min(attribute.range[0], batchAttribute.range[0]);\n\t\t\t\t\t\tattribute.range[1] = Math.max(attribute.range[1], batchAttribute.range[1]);\n\n\t\t\t\t\t\tif(node.getLevel() === 0){\n\t\t\t\t\t\t\tattribute.initialRange = batchAttribute.range;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttightBoundingBox.max.sub(tightBoundingBox.min);\n\t\t\t\ttightBoundingBox.min.set(0, 0, 0);\n\n\t\t\t\tlet numPoints = e.data.buffer.byteLength / pointAttributes.byteSize;\n\t\t\t\t\n\t\t\t\tnode.numPoints = numPoints;\n\t\t\t\tnode.geometry = geometry;\n\t\t\t\tnode.mean = new Vector3(...data.mean);\n\t\t\t\tnode.tightBoundingBox = tightBoundingBox;\n\t\t\t\tnode.loaded = true;\n\t\t\t\tnode.loading = false;\n\t\t\t\tnode.estimatedSpacing = data.estimatedSpacing;\n\t\t\t\tPotree.numNodesLoading--;\n\t\t\t};\n\n\t\t\tlet message = {\n\t\t\t\tbuffer: buffer,\n\t\t\t\tpointAttributes: pointAttributes,\n\t\t\t\tversion: this.version.version,\n\t\t\t\tmin: [ node.boundingBox.min.x, node.boundingBox.min.y, node.boundingBox.min.z ],\n\t\t\t\toffset: [node.pcoGeometry.offset.x, node.pcoGeometry.offset.y, node.pcoGeometry.offset.z],\n\t\t\t\tscale: this.scale,\n\t\t\t\tspacing: node.spacing,\n\t\t\t\thasChildren: node.hasChildren,\n\t\t\t\tname: node.name\n\t\t\t};\n\t\t\tworker.postMessage(message, [message.buffer]);\n\t\t};\n\n\t\t\n\t}\n\n\tfunction parseAttributes(cloudjs){\n\n\t\tlet version = new Version(cloudjs.version);\n\n\t\tconst replacements = {\n\t\t\t\"COLOR_PACKED\": \"rgba\",\n\t\t\t\"RGBA\": \"rgba\",\n\t\t\t\"INTENSITY\": \"intensity\",\n\t\t\t\"CLASSIFICATION\": \"classification\",\n\t\t\t\"GPS_TIME\": \"gps-time\",\n\t\t};\n\n\t\tconst replaceOldNames = (old) => {\n\t\t\tif(replacements[old]){\n\t\t\t\treturn replacements[old];\n\t\t\t}else {\n\t\t\t\treturn old;\n\t\t\t}\n\t\t};\n\n\t\tconst pointAttributes = [];\n\t\tif(version.upTo('1.7')){\n\t\t\t\n\t\t\tfor(let attributeName of cloudjs.pointAttributes){\n\t\t\t\tconst oldAttribute = PointAttribute[attributeName];\n\n\t\t\t\tconst attribute = {\n\t\t\t\t\tname: oldAttribute.name,\n\t\t\t\t\tsize: oldAttribute.byteSize,\n\t\t\t\t\telements: oldAttribute.numElements,\n\t\t\t\t\telementSize: oldAttribute.byteSize / oldAttribute.numElements,\n\t\t\t\t\ttype: oldAttribute.type.name,\n\t\t\t\t\tdescription: \"\",\n\t\t\t\t};\n\n\t\t\t\tpointAttributes.push(attribute);\n\t\t\t}\n\n\t\t}else {\n\t\t\tpointAttributes.push(...cloudjs.pointAttributes);\n\t\t}\n\n\n\t\t{\n\t\t\tconst attributes = new PointAttributes();\n\n\t\t\tconst typeConversion = {\n\t\t\t\tint8:   PointAttributeTypes.DATA_TYPE_INT8,\n\t\t\t\tint16:  PointAttributeTypes.DATA_TYPE_INT16,\n\t\t\t\tint32:  PointAttributeTypes.DATA_TYPE_INT32,\n\t\t\t\tint64:  PointAttributeTypes.DATA_TYPE_INT64,\n\t\t\t\tuint8:  PointAttributeTypes.DATA_TYPE_UINT8,\n\t\t\t\tuint16: PointAttributeTypes.DATA_TYPE_UINT16,\n\t\t\t\tuint32: PointAttributeTypes.DATA_TYPE_UINT32,\n\t\t\t\tuint64: PointAttributeTypes.DATA_TYPE_UINT64,\n\t\t\t\tdouble: PointAttributeTypes.DATA_TYPE_DOUBLE,\n\t\t\t\tfloat:  PointAttributeTypes.DATA_TYPE_FLOAT,\n\t\t\t};\n\n\t\t\tfor(const jsAttribute of pointAttributes){\n\t\t\t\tconst name = replaceOldNames(jsAttribute.name);\n\t\t\t\tconst type = typeConversion[jsAttribute.type];\n\t\t\t\tconst numElements = jsAttribute.elements;\n\t\t\t\tconst description = jsAttribute.description;\n\n\t\t\t\tconst attribute = new PointAttribute(name, type, numElements);\n\n\t\t\t\tattributes.add(attribute);\n\t\t\t}\n\n\t\t\t{\n\t\t\t\t// check if it has normals\n\t\t\t\tlet hasNormals = \n\t\t\t\t\tpointAttributes.find(a => a.name === \"NormalX\") !== undefined &&\n\t\t\t\t\tpointAttributes.find(a => a.name === \"NormalY\") !== undefined &&\n\t\t\t\t\tpointAttributes.find(a => a.name === \"NormalZ\") !== undefined;\n\n\t\t\t\tif(hasNormals){\n\t\t\t\t\tlet vector = {\n\t\t\t\t\t\tname: \"NORMAL\",\n\t\t\t\t\t\tattributes: [\"NormalX\", \"NormalY\", \"NormalZ\"],\n\t\t\t\t\t};\n\t\t\t\t\tattributes.addVector(vector);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn attributes;\n\t\t}\n\n\t}\n\n\tfunction lasLazAttributes(fMno){\n\t\tconst attributes = new PointAttributes();\n\n\t\tattributes.add(PointAttribute.POSITION_CARTESIAN);\n\t\tattributes.add(new PointAttribute(\"rgba\", PointAttributeTypes.DATA_TYPE_UINT8, 4));\n\t\tattributes.add(new PointAttribute(\"intensity\", PointAttributeTypes.DATA_TYPE_UINT16, 1));\n\t\tattributes.add(new PointAttribute(\"classification\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\tattributes.add(new PointAttribute(\"gps-time\", PointAttributeTypes.DATA_TYPE_DOUBLE, 1));\n\t\tattributes.add(new PointAttribute(\"number of returns\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\tattributes.add(new PointAttribute(\"return number\", PointAttributeTypes.DATA_TYPE_UINT8, 1));\n\t\tattributes.add(new PointAttribute(\"source id\", PointAttributeTypes.DATA_TYPE_UINT16, 1));\n\t\t//attributes.add(new PointAttribute(\"pointSourceID\", PointAttributeTypes.DATA_TYPE_INT8, 4));\n\n\n\t\treturn attributes;\n\t}\n\n\tclass POCLoader {\n\n\t\tstatic load(url, callback){\n\t\t\ttry {\n\t\t\t\tlet pco = new PointCloudOctreeGeometry();\n\t\t\t\tpco.url = url;\n\t\t\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\t\t\txhr.open('GET', url, true);\n\n\t\t\t\txhr.onreadystatechange = function () {\n\t\t\t\t\tif (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 0)) {\n\t\t\t\t\t\tlet fMno = JSON.parse(xhr.responseText);\n\n\t\t\t\t\t\tlet version = new Version(fMno.version);\n\n\t\t\t\t\t\t// assume octreeDir is absolute if it starts with http\n\t\t\t\t\t\tif (fMno.octreeDir.indexOf('http') === 0) {\n\t\t\t\t\t\t\tpco.octreeDir = fMno.octreeDir;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpco.octreeDir = url + '/../' + fMno.octreeDir;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpco.spacing = fMno.spacing;\n\t\t\t\t\t\tpco.hierarchyStepSize = fMno.hierarchyStepSize;\n\n\t\t\t\t\t\tpco.pointAttributes = fMno.pointAttributes;\n\n\t\t\t\t\t\tlet min = new Vector3(fMno.boundingBox.lx, fMno.boundingBox.ly, fMno.boundingBox.lz);\n\t\t\t\t\t\tlet max = new Vector3(fMno.boundingBox.ux, fMno.boundingBox.uy, fMno.boundingBox.uz);\n\t\t\t\t\t\tlet boundingBox = new Box3(min, max);\n\t\t\t\t\t\tlet tightBoundingBox = boundingBox.clone();\n\n\t\t\t\t\t\tif (fMno.tightBoundingBox) {\n\t\t\t\t\t\t\ttightBoundingBox.min.copy(new Vector3(fMno.tightBoundingBox.lx, fMno.tightBoundingBox.ly, fMno.tightBoundingBox.lz));\n\t\t\t\t\t\t\ttightBoundingBox.max.copy(new Vector3(fMno.tightBoundingBox.ux, fMno.tightBoundingBox.uy, fMno.tightBoundingBox.uz));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet offset = min.clone();\n\n\t\t\t\t\t\tboundingBox.min.sub(offset);\n\t\t\t\t\t\tboundingBox.max.sub(offset);\n\n\t\t\t\t\t\ttightBoundingBox.min.sub(offset);\n\t\t\t\t\t\ttightBoundingBox.max.sub(offset);\n\n\t\t\t\t\t\tpco.projection = fMno.projection;\n\t\t\t\t\t\tpco.boundingBox = boundingBox;\n\t\t\t\t\t\tpco.tightBoundingBox = tightBoundingBox;\n\t\t\t\t\t\tpco.boundingSphere = boundingBox.getBoundingSphere(new Sphere());\n\t\t\t\t\t\tpco.tightBoundingSphere = tightBoundingBox.getBoundingSphere(new Sphere());\n\t\t\t\t\t\tpco.offset = offset;\n\t\t\t\t\t\tif (fMno.pointAttributes === 'LAS') {\n\t\t\t\t\t\t\tpco.loader = new LasLazLoader(fMno.version, \"las\");\n\t\t\t\t\t\t\tpco.pointAttributes = lasLazAttributes(fMno);\n\t\t\t\t\t\t} else if (fMno.pointAttributes === 'LAZ') {\n\t\t\t\t\t\t\tpco.loader = new LasLazLoader(fMno.version, \"laz\");\n\t\t\t\t\t\t\tpco.pointAttributes = lasLazAttributes(fMno);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpco.loader = new BinaryLoader(fMno.version, boundingBox, fMno.scale);\n\t\t\t\t\t\t\tpco.pointAttributes = parseAttributes(fMno);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet nodes = {};\n\n\t\t\t\t\t\t{ // load root\n\t\t\t\t\t\t\tlet name = 'r';\n\n\t\t\t\t\t\t\tlet root = new PointCloudOctreeGeometryNode(name, pco, boundingBox);\n\t\t\t\t\t\t\troot.level = 0;\n\t\t\t\t\t\t\troot.hasChildren = true;\n\t\t\t\t\t\t\troot.spacing = pco.spacing;\n\t\t\t\t\t\t\tif (version.upTo('1.5')) {\n\t\t\t\t\t\t\t\troot.numPoints = fMno.hierarchy[0][1];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\troot.numPoints = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpco.root = root;\n\t\t\t\t\t\t\tpco.root.load();\n\t\t\t\t\t\t\tnodes[name] = root;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// load remaining hierarchy\n\t\t\t\t\t\tif (version.upTo('1.4')) {\n\t\t\t\t\t\t\tfor (let i = 1; i < fMno.hierarchy.length; i++) {\n\t\t\t\t\t\t\t\tlet name = fMno.hierarchy[i][0];\n\t\t\t\t\t\t\t\tlet numPoints = fMno.hierarchy[i][1];\n\t\t\t\t\t\t\t\tlet index = parseInt(name.charAt(name.length - 1));\n\t\t\t\t\t\t\t\tlet parentName = name.substring(0, name.length - 1);\n\t\t\t\t\t\t\t\tlet parentNode = nodes[parentName];\n\t\t\t\t\t\t\t\tlet level = name.length - 1;\n\t\t\t\t\t\t\t\t//let boundingBox = POCLoader.createChildAABB(parentNode.boundingBox, index);\n\t\t\t\t\t\t\t\tlet boundingBox = Utils.createChildAABB(parentNode.boundingBox, index);\n\n\t\t\t\t\t\t\t\tlet node = new PointCloudOctreeGeometryNode(name, pco, boundingBox);\n\t\t\t\t\t\t\t\tnode.level = level;\n\t\t\t\t\t\t\t\tnode.numPoints = numPoints;\n\t\t\t\t\t\t\t\tnode.spacing = pco.spacing / Math.pow(2, level);\n\t\t\t\t\t\t\t\tparentNode.addChild(node);\n\t\t\t\t\t\t\t\tnodes[name] = node;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpco.nodes = nodes;\n\n\t\t\t\t\t\tcallback(pco);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\txhr.send(null);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(\"loading failed: '\" + url + \"'\");\n\t\t\t\tconsole.log(e);\n\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\n\t\tloadPointAttributes(mno){\n\t\t\tlet fpa = mno.pointAttributes;\n\t\t\tlet pa = new PointAttributes();\n\n\t\t\tfor (let i = 0; i < fpa.length; i++) {\n\t\t\t\tlet pointAttribute = PointAttribute[fpa[i]];\n\t\t\t\tpa.add(pointAttribute);\n\t\t\t}\n\n\t\t\treturn pa;\n\t\t}\n\n\t\tcreateChildAABB(aabb, index){\n\t\t\tlet min = aabb.min.clone();\n\t\t\tlet max = aabb.max.clone();\n\t\t\tlet size = new Vector3().subVectors(max, min);\n\n\t\t\tif ((index & 0b0001) > 0) {\n\t\t\t\tmin.z += size.z / 2;\n\t\t\t} else {\n\t\t\t\tmax.z -= size.z / 2;\n\t\t\t}\n\n\t\t\tif ((index & 0b0010) > 0) {\n\t\t\t\tmin.y += size.y / 2;\n\t\t\t} else {\n\t\t\t\tmax.y -= size.y / 2;\n\t\t\t}\n\n\t\t\tif ((index & 0b0100) > 0) {\n\t\t\t\tmin.x += size.x / 2;\n\t\t\t} else {\n\t\t\t\tmax.x -= size.x / 2;\n\t\t\t}\n\n\t\t\treturn new Box3(min, max);\n\t\t}\n\t}\n\n\tclass OctreeGeometry{\r\n\r\n\t\tconstructor(){\r\n\t\t\tthis.url = null;\r\n\t\t\tthis.spacing = 0;\r\n\t\t\tthis.boundingBox = null;\r\n\t\t\tthis.root = null;\r\n\t\t\tthis.pointAttributes = null;\r\n\t\t\tthis.loader = null;\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tclass OctreeGeometryNode{\r\n\r\n\t\tconstructor(name, octreeGeometry, boundingBox){\r\n\t\t\tthis.id = OctreeGeometryNode.IDCount++;\r\n\t\t\tthis.name = name;\r\n\t\t\tthis.index = parseInt(name.charAt(name.length - 1));\r\n\t\t\tthis.octreeGeometry = octreeGeometry;\r\n\t\t\tthis.boundingBox = boundingBox;\r\n\t\t\tthis.boundingSphere = boundingBox.getBoundingSphere(new Sphere());\r\n\t\t\tthis.children = {};\r\n\t\t\tthis.numPoints = 0;\r\n\t\t\tthis.level = null;\r\n\t\t\tthis.oneTimeDisposeHandlers = [];\r\n\t\t}\r\n\r\n\t\tisGeometryNode(){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tgetLevel(){\r\n\t\t\treturn this.level;\r\n\t\t}\r\n\r\n\t\tisTreeNode(){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tisLoaded(){\r\n\t\t\treturn this.loaded;\r\n\t\t}\r\n\r\n\t\tgetBoundingSphere(){\r\n\t\t\treturn this.boundingSphere;\r\n\t\t}\r\n\r\n\t\tgetBoundingBox(){\r\n\t\t\treturn this.boundingBox;\r\n\t\t}\r\n\r\n\t\tgetChildren(){\r\n\t\t\tlet children = [];\r\n\r\n\t\t\tfor (let i = 0; i < 8; i++) {\r\n\t\t\t\tif (this.children[i]) {\r\n\t\t\t\t\tchildren.push(this.children[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn children;\r\n\t\t}\r\n\r\n\t\tgetBoundingBox(){\r\n\t\t\treturn this.boundingBox;\r\n\t\t}\r\n\r\n\t\tload(){\r\n\r\n\t\t\tif (Potree.numNodesLoading >= Potree.maxNodesLoading) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.octreeGeometry.loader.load(this);\r\n\t\t}\r\n\r\n\t\tgetNumPoints(){\r\n\t\t\treturn this.numPoints;\r\n\t\t}\r\n\r\n\t\tdispose(){\r\n\t\t\tif (this.geometry && this.parent != null) {\r\n\t\t\t\tthis.geometry.dispose();\r\n\t\t\t\tthis.geometry = null;\r\n\t\t\t\tthis.loaded = false;\r\n\r\n\t\t\t\t// this.dispatchEvent( { type: 'dispose' } );\r\n\t\t\t\tfor (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) {\r\n\t\t\t\t\tlet handler = this.oneTimeDisposeHandlers[i];\r\n\t\t\t\t\thandler();\r\n\t\t\t\t}\r\n\t\t\t\tthis.oneTimeDisposeHandlers = [];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tOctreeGeometryNode.IDCount = 0;\n\n\t// let loadedNodes = new Set();\n\n\tclass NodeLoader{\n\n\t\tconstructor(url){\n\t\t\tthis.url = url;\n\t\t}\n\n\t\tasync load(node){\n\n\t\t\tif(node.loaded || node.loading){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnode.loading = true;\n\t\t\tPotree.numNodesLoading++;\n\n\t\t\t// console.log(node.name, node.numPoints);\n\n\t\t\t// if(loadedNodes.has(node.name)){\n\t\t\t// \t// debugger;\n\t\t\t// }\n\t\t\t// loadedNodes.add(node.name);\n\n\t\t\ttry{\n\t\t\t\tif(node.nodeType === 2){\n\t\t\t\t\tawait this.loadHierarchy(node);\n\t\t\t\t}\n\n\t\t\t\tlet {byteOffset, byteSize} = node;\n\n\n\t\t\t\tlet urlOctree = `${this.url}/../octree.bin`;\n\n\t\t\t\tlet first = byteOffset;\n\t\t\t\tlet last = byteOffset + byteSize - 1n;\n\n\t\t\t\tlet buffer;\n\n\t\t\t\tif(byteSize === 0n){\n\t\t\t\t\tbuffer = new ArrayBuffer(0);\n\t\t\t\t\tconsole.warn(`loaded node with 0 bytes: ${node.name}`);\n\t\t\t\t}else {\n\t\t\t\t\tlet response = await fetch(urlOctree, {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'content-type': 'multipart/byteranges',\n\t\t\t\t\t\t\t'Range': `bytes=${first}-${last}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tbuffer = await response.arrayBuffer();\n\t\t\t\t}\n\n\t\t\t\tlet workerPath;\n\t\t\t\tif(this.metadata.encoding === \"BROTLI\"){\n\t\t\t\t\tworkerPath = Potree.scriptPath + '/workers/2.0/DecoderWorker_brotli.js';\n\t\t\t\t}else {\n\t\t\t\t\tworkerPath = Potree.scriptPath + '/workers/2.0/DecoderWorker.js';\n\t\t\t\t}\n\n\t\t\t\tlet worker = Potree.workerPool.getWorker(workerPath);\n\n\t\t\t\tworker.onmessage = function (e) {\n\n\t\t\t\t\tlet data = e.data;\n\t\t\t\t\tlet buffers = data.attributeBuffers;\n\n\t\t\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\n\t\t\t\t\tlet geometry = new BufferGeometry();\n\t\t\t\t\t\n\t\t\t\t\tfor(let property in buffers){\n\n\t\t\t\t\t\tlet buffer = buffers[property].buffer;\n\n\t\t\t\t\t\tif(property === \"position\"){\n\t\t\t\t\t\t\tgeometry.setAttribute('position', new BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t\t\t}else if(property === \"rgba\"){\n\t\t\t\t\t\t\tgeometry.setAttribute('rgba', new BufferAttribute(new Uint8Array(buffer), 4, true));\n\t\t\t\t\t\t}else if(property === \"NORMAL\"){\n\t\t\t\t\t\t\t//geometry.setAttribute('rgba', new THREE.BufferAttribute(new Uint8Array(buffer), 4, true));\n\t\t\t\t\t\t\tgeometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3));\n\t\t\t\t\t\t}else if (property === \"INDICES\") {\n\t\t\t\t\t\t\tlet bufferAttribute = new BufferAttribute(new Uint8Array(buffer), 4);\n\t\t\t\t\t\t\tbufferAttribute.normalized = true;\n\t\t\t\t\t\t\tgeometry.setAttribute('indices', bufferAttribute);\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tconst bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1);\n\n\t\t\t\t\t\t\tlet batchAttribute = buffers[property].attribute;\n\t\t\t\t\t\t\tbufferAttribute.potree = {\n\t\t\t\t\t\t\t\toffset: buffers[property].offset,\n\t\t\t\t\t\t\t\tscale: buffers[property].scale,\n\t\t\t\t\t\t\t\tpreciseBuffer: buffers[property].preciseBuffer,\n\t\t\t\t\t\t\t\trange: batchAttribute.range,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tgeometry.setAttribute(property, bufferAttribute);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\t// indices ??\n\n\t\t\t\t\tnode.density = data.density;\n\t\t\t\t\tnode.geometry = geometry;\n\t\t\t\t\tnode.loaded = true;\n\t\t\t\t\tnode.loading = false;\n\t\t\t\t\tPotree.numNodesLoading--;\n\t\t\t\t};\n\n\t\t\t\tlet pointAttributes = node.octreeGeometry.pointAttributes;\n\t\t\t\tlet scale = node.octreeGeometry.scale;\n\n\t\t\t\tlet box = node.boundingBox;\n\t\t\t\tlet min = node.octreeGeometry.offset.clone().add(box.min);\n\t\t\t\tlet size = box.max.clone().sub(box.min);\n\t\t\t\tlet max = min.clone().add(size);\n\t\t\t\tlet numPoints = node.numPoints;\n\n\t\t\t\tlet offset = node.octreeGeometry.loader.offset;\n\n\t\t\t\tlet message = {\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tbuffer: buffer,\n\t\t\t\t\tpointAttributes: pointAttributes,\n\t\t\t\t\tscale: scale,\n\t\t\t\t\tmin: min,\n\t\t\t\t\tmax: max,\n\t\t\t\t\tsize: size,\n\t\t\t\t\toffset: offset,\n\t\t\t\t\tnumPoints: numPoints\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(message, [message.buffer]);\n\t\t\t}catch(e){\n\t\t\t\tnode.loaded = false;\n\t\t\t\tnode.loading = false;\n\t\t\t\tPotree.numNodesLoading--;\n\n\t\t\t\tconsole.log(`failed to load ${node.name}`);\n\t\t\t\tconsole.log(e);\n\t\t\t\tconsole.log(`trying again!`);\n\t\t\t}\n\t\t}\n\n\t\tparseHierarchy(node, buffer){\n\n\t\t\tlet view = new DataView(buffer);\n\t\t\tlet tStart = performance.now();\n\n\t\t\tlet bytesPerNode = 22;\n\t\t\tlet numNodes = buffer.byteLength / bytesPerNode;\n\n\t\t\tlet octree = node.octreeGeometry;\n\t\t\t// let nodes = [node];\n\t\t\tlet nodes = new Array(numNodes);\n\t\t\tnodes[0] = node;\n\t\t\tlet nodePos = 1;\n\n\t\t\tfor(let i = 0; i < numNodes; i++){\n\t\t\t\tlet current = nodes[i];\n\n\t\t\t\tlet type = view.getUint8(i * bytesPerNode + 0);\n\t\t\t\tlet childMask = view.getUint8(i * bytesPerNode + 1);\n\t\t\t\tlet numPoints = view.getUint32(i * bytesPerNode + 2, true);\n\t\t\t\tlet byteOffset = view.getBigInt64(i * bytesPerNode + 6, true);\n\t\t\t\tlet byteSize = view.getBigInt64(i * bytesPerNode + 14, true);\n\n\t\t\t\t// if(byteSize === 0n){\n\t\t\t\t// \t// debugger;\n\t\t\t\t// }\n\n\n\t\t\t\tif(current.nodeType === 2){\n\t\t\t\t\t// replace proxy with real node\n\t\t\t\t\tcurrent.byteOffset = byteOffset;\n\t\t\t\t\tcurrent.byteSize = byteSize;\n\t\t\t\t\tcurrent.numPoints = numPoints;\n\t\t\t\t}else if(type === 2){\n\t\t\t\t\t// load proxy\n\t\t\t\t\tcurrent.hierarchyByteOffset = byteOffset;\n\t\t\t\t\tcurrent.hierarchyByteSize = byteSize;\n\t\t\t\t\tcurrent.numPoints = numPoints;\n\t\t\t\t}else {\n\t\t\t\t\t// load real node \n\t\t\t\t\tcurrent.byteOffset = byteOffset;\n\t\t\t\t\tcurrent.byteSize = byteSize;\n\t\t\t\t\tcurrent.numPoints = numPoints;\n\t\t\t\t}\n\n\t\t\t\tif(current.byteSize === 0n){\n\t\t\t\t\t// workaround for issue #1125\n\t\t\t\t\t// some inner nodes erroneously report >0 points even though have 0 points\n\t\t\t\t\t// however, they still report a byteSize of 0, so based on that we now set node.numPoints to 0\n\t\t\t\t\tcurrent.numPoints = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcurrent.nodeType = type;\n\n\t\t\t\tif(current.nodeType === 2){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor(let childIndex = 0; childIndex < 8; childIndex++){\n\t\t\t\t\tlet childExists = ((1 << childIndex) & childMask) !== 0;\n\n\t\t\t\t\tif(!childExists){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet childName = current.name + childIndex;\n\n\t\t\t\t\tlet childAABB = createChildAABB(current.boundingBox, childIndex);\n\t\t\t\t\tlet child = new OctreeGeometryNode(childName, octree, childAABB);\n\t\t\t\t\tchild.name = childName;\n\t\t\t\t\tchild.spacing = current.spacing / 2;\n\t\t\t\t\tchild.level = current.level + 1;\n\n\t\t\t\t\tcurrent.children[childIndex] = child;\n\t\t\t\t\tchild.parent = current;\n\n\t\t\t\t\t// nodes.push(child);\n\t\t\t\t\tnodes[nodePos] = child;\n\t\t\t\t\tnodePos++;\n\t\t\t\t}\n\n\t\t\t\t// if((i % 500) === 0){\n\t\t\t\t// \tyield;\n\t\t\t\t// }\n\t\t\t}\n\n\t\t\tlet duration = (performance.now() - tStart);\n\n\t\t\t// if(duration > 20){\n\t\t\t// \tlet msg = `duration: ${duration}ms, numNodes: ${numNodes}`;\n\t\t\t// \tconsole.log(msg);\n\t\t\t// }\n\t\t}\n\n\t\tasync loadHierarchy(node){\n\n\t\t\tlet {hierarchyByteOffset, hierarchyByteSize} = node;\n\t\t\tlet hierarchyPath = `${this.url}/../hierarchy.bin`;\n\t\t\t\n\t\t\tlet first = hierarchyByteOffset;\n\t\t\tlet last = first + hierarchyByteSize - 1n;\n\n\t\t\tlet response = await fetch(hierarchyPath, {\n\t\t\t\theaders: {\n\t\t\t\t\t'content-type': 'multipart/byteranges',\n\t\t\t\t\t'Range': `bytes=${first}-${last}`,\n\t\t\t\t},\n\t\t\t});\n\n\n\n\t\t\tlet buffer = await response.arrayBuffer();\n\n\t\t\tthis.parseHierarchy(node, buffer);\n\n\t\t\t// let promise = new Promise((resolve) => {\n\t\t\t// \tlet generator = this.parseHierarchy(node, buffer);\n\n\t\t\t// \tlet repeatUntilDone = () => {\n\t\t\t// \t\tlet result = generator.next();\n\n\t\t\t// \t\tif(result.done){\n\t\t\t// \t\t\tresolve();\n\t\t\t// \t\t}else{\n\t\t\t// \t\t\trequestAnimationFrame(repeatUntilDone);\n\t\t\t// \t\t}\n\t\t\t// \t};\n\t\t\t\t\n\t\t\t// \trepeatUntilDone();\n\t\t\t// });\n\n\t\t\t// await promise;\n\n\t\t\t\n\n\n\n\t\t}\n\n\t}\n\n\tlet tmpVec3 = new Vector3();\n\tfunction createChildAABB(aabb, index){\n\t\tlet min = aabb.min.clone();\n\t\tlet max = aabb.max.clone();\n\t\tlet size = tmpVec3.subVectors(max, min);\n\n\t\tif ((index & 0b0001) > 0) {\n\t\t\tmin.z += size.z / 2;\n\t\t} else {\n\t\t\tmax.z -= size.z / 2;\n\t\t}\n\n\t\tif ((index & 0b0010) > 0) {\n\t\t\tmin.y += size.y / 2;\n\t\t} else {\n\t\t\tmax.y -= size.y / 2;\n\t\t}\n\t\t\n\t\tif ((index & 0b0100) > 0) {\n\t\t\tmin.x += size.x / 2;\n\t\t} else {\n\t\t\tmax.x -= size.x / 2;\n\t\t}\n\n\t\treturn new Box3(min, max);\n\t}\n\n\tlet typenameTypeattributeMap = {\n\t\t\"double\": PointAttributeTypes.DATA_TYPE_DOUBLE,\n\t\t\"float\": PointAttributeTypes.DATA_TYPE_FLOAT,\n\t\t\"int8\": PointAttributeTypes.DATA_TYPE_INT8,\n\t\t\"uint8\": PointAttributeTypes.DATA_TYPE_UINT8,\n\t\t\"int16\": PointAttributeTypes.DATA_TYPE_INT16,\n\t\t\"uint16\": PointAttributeTypes.DATA_TYPE_UINT16,\n\t\t\"int32\": PointAttributeTypes.DATA_TYPE_INT32,\n\t\t\"uint32\": PointAttributeTypes.DATA_TYPE_UINT32,\n\t\t\"int64\": PointAttributeTypes.DATA_TYPE_INT64,\n\t\t\"uint64\": PointAttributeTypes.DATA_TYPE_UINT64,\n\t};\n\n\tclass OctreeLoader{\n\n\t\tstatic parseAttributes(jsonAttributes){\n\n\t\t\tlet attributes = new PointAttributes();\n\n\t\t\tlet replacements = {\n\t\t\t\t\"rgb\": \"rgba\",\n\t\t\t};\n\n\t\t\tfor (const jsonAttribute of jsonAttributes) {\n\t\t\t\tlet {name, description, size, numElements, elementSize, min, max} = jsonAttribute;\n\n\t\t\t\tlet type = typenameTypeattributeMap[jsonAttribute.type];\n\n\t\t\t\tlet potreeAttributeName = replacements[name] ? replacements[name] : name;\n\n\t\t\t\tlet attribute = new PointAttribute(potreeAttributeName, type, numElements);\n\n\t\t\t\tif(numElements === 1){\n\t\t\t\t\tattribute.range = [min[0], max[0]];\n\t\t\t\t}else {\n\t\t\t\t\tattribute.range = [min, max];\n\t\t\t\t}\n\n\t\t\t\tif (name === \"gps-time\") { // HACK: Guard against bad gpsTime range in metadata, see potree/potree#909\n\t\t\t\t\tif (attribute.range[0] === attribute.range[1]) {\n\t\t\t\t\t\tattribute.range[1] += 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tattribute.initialRange = attribute.range;\n\n\t\t\t\tattributes.add(attribute);\n\t\t\t}\n\n\t\t\t{\n\t\t\t\t// check if it has normals\n\t\t\t\tlet hasNormals = \n\t\t\t\t\tattributes.attributes.find(a => a.name === \"NormalX\") !== undefined &&\n\t\t\t\t\tattributes.attributes.find(a => a.name === \"NormalY\") !== undefined &&\n\t\t\t\t\tattributes.attributes.find(a => a.name === \"NormalZ\") !== undefined;\n\n\t\t\t\tif(hasNormals){\n\t\t\t\t\tlet vector = {\n\t\t\t\t\t\tname: \"NORMAL\",\n\t\t\t\t\t\tattributes: [\"NormalX\", \"NormalY\", \"NormalZ\"],\n\t\t\t\t\t};\n\t\t\t\t\tattributes.addVector(vector);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn attributes;\n\t\t}\n\n\t\tstatic async load(url){\n\n\t\t\tlet response = await fetch(url);\n\t\t\tlet metadata = await response.json();\n\n\t\t\tlet attributes = OctreeLoader.parseAttributes(metadata.attributes);\n\n\t\t\tlet loader = new NodeLoader(url);\n\t\t\tloader.metadata = metadata;\n\t\t\tloader.attributes = attributes;\n\t\t\tloader.scale = metadata.scale;\n\t\t\tloader.offset = metadata.offset;\n\n\t\t\tlet octree = new OctreeGeometry();\n\t\t\toctree.url = url;\n\t\t\toctree.spacing = metadata.spacing;\n\t\t\toctree.scale = metadata.scale;\n\n\t\t\t// let aPosition = metadata.attributes.find(a => a.name === \"position\");\n\t\t\t// octree\n\n\t\t\tlet min = new Vector3(...metadata.boundingBox.min);\n\t\t\tlet max = new Vector3(...metadata.boundingBox.max);\n\t\t\tlet boundingBox = new Box3(min, max);\n\n\t\t\tlet offset = min.clone();\n\t\t\tboundingBox.min.sub(offset);\n\t\t\tboundingBox.max.sub(offset);\n\n\t\t\toctree.projection = metadata.projection;\n\t\t\toctree.boundingBox = boundingBox;\n\t\t\toctree.tightBoundingBox = boundingBox.clone();\n\t\t\toctree.boundingSphere = boundingBox.getBoundingSphere(new Sphere());\n\t\t\toctree.tightBoundingSphere = boundingBox.getBoundingSphere(new Sphere());\n\t\t\toctree.offset = offset;\n\t\t\toctree.pointAttributes = OctreeLoader.parseAttributes(metadata.attributes);\n\t\t\toctree.loader = loader;\n\n\t\t\tlet root = new OctreeGeometryNode(\"r\", octree, boundingBox);\n\t\t\troot.level = 0;\n\t\t\troot.nodeType = 2;\n\t\t\troot.hierarchyByteOffset = 0n;\n\t\t\troot.hierarchyByteSize = BigInt(metadata.hierarchy.firstChunkSize);\n\t\t\troot.hasChildren = false;\n\t\t\troot.spacing = octree.spacing;\n\t\t\troot.byteOffset = 0;\n\n\t\t\toctree.root = root;\n\n\t\t\tloader.load(root);\n\n\t\t\tlet result = {\n\t\t\t\tgeometry: octree,\n\t\t\t};\n\n\t\t\treturn result;\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author Connor Manning\n\t */\n\n\tclass EptLoader {\n\t\tstatic async load(file, callback) {\n\n\t\t\tlet response = await fetch(file);\n\t\t\tlet json = await response.json();\n\n\t\t\tlet url = file.substr(0, file.lastIndexOf('ept.json'));\n\t\t\tlet geometry = new Potree.PointCloudEptGeometry(url, json);\n\t\t\tlet root = new Potree.PointCloudEptGeometryNode(geometry);\n\n\t\t\tgeometry.root = root;\n\t\t\tgeometry.root.load();\n\n\t\t\tcallback(geometry);\n\t\t}\n\t};\n\n\tclass EptBinaryLoader {\n\t\textension() {\n\t\t\treturn '.bin';\n\t\t}\n\n\t\tworkerPath() {\n\t\t\treturn Potree.scriptPath + '/workers/EptBinaryDecoderWorker.js';\n\t\t}\n\n\t\tload(node) {\n\t\t\tif (node.loaded) return;\n\n\t\t\tlet url = node.url() + this.extension();\n\n\t\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\t\txhr.open('GET', url, true);\n\t\t\txhr.responseType = 'arraybuffer';\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\t\txhr.onreadystatechange = () => {\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\tif (xhr.status === 200) {\n\t\t\t\t\t\tlet buffer = xhr.response;\n\t\t\t\t\t\tthis.parse(node, buffer);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('Failed ' + url + ': ' + xhr.status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ttry {\n\t\t\t\txhr.send(null);\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\tconsole.log('Failed request: ' + e);\n\t\t\t}\n\t\t}\n\n\t\tparse(node, buffer) {\n\t\t\tlet workerPath = this.workerPath();\n\t\t\tlet worker = Potree.workerPool.getWorker(workerPath);\n\n\t\t\tworker.onmessage = function(e) {\n\t\t\t\tlet g = new BufferGeometry();\n\t\t\t\tlet numPoints = e.data.numPoints;\n\n\t\t\t\tlet position = new Float32Array(e.data.position);\n\t\t\t\tg.setAttribute('position', new BufferAttribute(position, 3));\n\n\t\t\t\tlet indices = new Uint8Array(e.data.indices);\n\t\t\t\tg.setAttribute('indices', new BufferAttribute(indices, 4));\n\n\t\t\t\tif (e.data.color) {\n\t\t\t\t\tlet color = new Uint8Array(e.data.color);\n\t\t\t\t\tg.setAttribute('color', new BufferAttribute(color, 4, true));\n\t\t\t\t}\n\t\t\t\tif (e.data.intensity) {\n\t\t\t\t\tlet intensity = new Float32Array(e.data.intensity);\n\t\t\t\t\tg.setAttribute('intensity',\n\t\t\t\t\t\t\tnew BufferAttribute(intensity, 1));\n\t\t\t\t}\n\t\t\t\tif (e.data.classification) {\n\t\t\t\t\tlet classification = new Uint8Array(e.data.classification);\n\t\t\t\t\tg.setAttribute('classification',\n\t\t\t\t\t\t\tnew BufferAttribute(classification, 1));\n\t\t\t\t}\n\t\t\t\tif (e.data.returnNumber) {\n\t\t\t\t\tlet returnNumber = new Uint8Array(e.data.returnNumber);\n\t\t\t\t\tg.setAttribute('return number',\n\t\t\t\t\t\t\tnew BufferAttribute(returnNumber, 1));\n\t\t\t\t}\n\t\t\t\tif (e.data.numberOfReturns) {\n\t\t\t\t\tlet numberOfReturns = new Uint8Array(e.data.numberOfReturns);\n\t\t\t\t\tg.setAttribute('number of returns',\n\t\t\t\t\t\t\tnew BufferAttribute(numberOfReturns, 1));\n\t\t\t\t}\n\t\t\t\tif (e.data.pointSourceId) {\n\t\t\t\t\tlet pointSourceId = new Uint16Array(e.data.pointSourceId);\n\t\t\t\t\tg.setAttribute('source id',\n\t\t\t\t\t\t\tnew BufferAttribute(pointSourceId, 1));\n\t\t\t\t}\n\n\t\t\t\tg.attributes.indices.normalized = true;\n\n\t\t\t\tlet tightBoundingBox = new Box3(\n\t\t\t\t\tnew Vector3().fromArray(e.data.tightBoundingBox.min),\n\t\t\t\t\tnew Vector3().fromArray(e.data.tightBoundingBox.max)\n\t\t\t\t);\n\n\t\t\t\tnode.doneLoading(\n\t\t\t\t\t\tg,\n\t\t\t\t\t\ttightBoundingBox,\n\t\t\t\t\t\tnumPoints,\n\t\t\t\t\t\tnew Vector3(...e.data.mean));\n\n\t\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\t\t\t};\n\n\t\t\tlet toArray = (v) => [v.x, v.y, v.z];\n\t\t\tlet message = {\n\t\t\t\tbuffer: buffer,\n\t\t\t\tschema: node.ept.schema,\n\t\t\t\tscale: node.ept.eptScale,\n\t\t\t\toffset: node.ept.eptOffset,\n\t\t\t\tmins: toArray(node.key.b.min)\n\t\t\t};\n\n\t\t\tworker.postMessage(message, [message.buffer]);\n\t\t}\n\t};\n\n\t/**\n\t * laslaz code taken and adapted from plas.io js-laslaz\n\t *\t  http://plas.io/\n\t *\thttps://github.com/verma/plasio\n\t *\n\t * Thanks to Uday Verma and Howard Butler\n\t *\n\t */\n\n\tclass EptLaszipLoader {\n\t\tload(node) {\n\t\t\tif (node.loaded) return;\n\n\t\t\tlet url = node.url() + '.laz';\n\n\t\t\tlet xhr = XHRFactory.createXMLHttpRequest();\n\t\t\txhr.open('GET', url, true);\n\t\t\txhr.responseType = 'arraybuffer';\n\t\t\txhr.overrideMimeType('text/plain; charset=x-user-defined');\n\t\t\txhr.onreadystatechange = () => {\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\tif (xhr.status === 200) {\n\t\t\t\t\t\tlet buffer = xhr.response;\n\t\t\t\t\t\tthis.parse(node, buffer);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log('Failed ' + url + ': ' + xhr.status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\txhr.send(null);\n\t\t}\n\n\t\tasync parse(node, buffer){\n\t\t\tlet lf = new LASFile(buffer);\n\t\t\tlet handler = new EptLazBatcher(node);\n\n\t\t\ttry{\n\t\t\t\tawait lf.open();\n\n\t\t\t\tlf.isOpen = true;\n\n\t\t\t\tconst header = await lf.getHeader();\n\n\t\t\t\t{\n\t\t\t\t\tlet i = 0;\n\n\t\t\t\t\tlet toArray = (v) => [v.x, v.y, v.z];\n\t\t\t\t\tlet mins = toArray(node.key.b.min);\n\t\t\t\t\tlet maxs = toArray(node.key.b.max);\n\n\t\t\t\t\tlet hasMoreData = true;\n\n\t\t\t\t\twhile(hasMoreData){\n\t\t\t\t\t\tconst data = await lf.readData(1000000, 0, 1);\n\n\t\t\t\t\t\tlet d = new LASDecoder(\n\t\t\t\t\t\t\tdata.buffer,\n\t\t\t\t\t\t\theader.pointsFormatId,\n\t\t\t\t\t\t\theader.pointsStructSize,\n\t\t\t\t\t\t\tdata.count,\n\t\t\t\t\t\t\theader.scale,\n\t\t\t\t\t\t\theader.offset,\n\t\t\t\t\t\t\tmins,\n\t\t\t\t\t\t\tmaxs);\n\n\t\t\t\t\t\td.extraBytes = header.extraBytes;\n\t\t\t\t\t\td.pointsFormatId = header.pointsFormatId;\n\t\t\t\t\t\thandler.push(d);\n\n\t\t\t\t\t\ti += data.count;\n\n\t\t\t\t\t\thasMoreData = data.hasMoreData;\n\t\t\t\t\t}\n\n\t\t\t\t\theader.totalRead = i;\n\t\t\t\t\theader.versionAsString = lf.versionAsString;\n\t\t\t\t\theader.isCompressed = lf.isCompressed;\n\n\t\t\t\t\tawait lf.close();\n\n\t\t\t\t\tlf.isOpen = false;\n\t\t\t\t}\n\n\t\t\t}catch(err){\n\t\t\t\tconsole.error('Error reading LAZ:', err);\n\t\t\t\t\n\t\t\t\tif (lf.isOpen) {\n\t\t\t\t\tawait lf.close();\n\n\t\t\t\t\tlf.isOpen = false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t};\n\n\tclass EptLazBatcher {\n\t\tconstructor(node) { this.node = node; }\n\n\t\tpush(las) {\n\t\t\tlet workerPath = Potree.scriptPath +\n\t\t\t\t'/workers/EptLaszipDecoderWorker.js';\n\t\t\tlet worker = Potree.workerPool.getWorker(workerPath);\n\n\t\t\tworker.onmessage = (e) => {\n\t\t\t\tlet g = new BufferGeometry();\n\t\t\t\tlet numPoints = las.pointsCount;\n\n\t\t\t\tlet positions = new Float32Array(e.data.position);\n\t\t\t\tlet colors = new Uint8Array(e.data.color);\n\n\t\t\t\tlet intensities = new Float32Array(e.data.intensity);\n\t\t\t\tlet classifications = new Uint8Array(e.data.classification);\n\t\t\t\tlet returnNumbers = new Uint8Array(e.data.returnNumber);\n\t\t\t\tlet numberOfReturns = new Uint8Array(e.data.numberOfReturns);\n\t\t\t\tlet pointSourceIDs = new Uint16Array(e.data.pointSourceID);\n\t\t\t\tlet indices = new Uint8Array(e.data.indices);\n\t\t\t\tlet gpsTime = new Float32Array(e.data.gpsTime);\n\n\t\t\t\tg.setAttribute('position',\n\t\t\t\t\t\tnew BufferAttribute(positions, 3));\n\t\t\t\tg.setAttribute('rgba',\n\t\t\t\t\t\tnew BufferAttribute(colors, 4, true));\n\t\t\t\tg.setAttribute('intensity',\n\t\t\t\t\t\tnew BufferAttribute(intensities, 1));\n\t\t\t\tg.setAttribute('classification',\n\t\t\t\t\t\tnew BufferAttribute(classifications, 1));\n\t\t\t\tg.setAttribute('return number',\n\t\t\t\t\t\tnew BufferAttribute(returnNumbers, 1));\n\t\t\t\tg.setAttribute('number of returns',\n\t\t\t\t\t\tnew BufferAttribute(numberOfReturns, 1));\n\t\t\t\tg.setAttribute('source id',\n\t\t\t\t\t\tnew BufferAttribute(pointSourceIDs, 1));\n\t\t\t\tg.setAttribute('indices',\n\t\t\t\t\t\tnew BufferAttribute(indices, 4));\n\t\t\t\tg.setAttribute('gpsTime',\n\t\t\t\t\t\tnew BufferAttribute(gpsTime, 1));\n\t\t\t\tthis.node.gpsTime = e.data.gpsMeta;\n\n\t\t\t\tg.attributes.indices.normalized = true;\n\n\t\t\t\tlet tightBoundingBox = new Box3(\n\t\t\t\t\tnew Vector3().fromArray(e.data.tightBoundingBox.min),\n\t\t\t\t\tnew Vector3().fromArray(e.data.tightBoundingBox.max)\n\t\t\t\t);\n\n\t\t\t\tthis.node.doneLoading(\n\t\t\t\t\tg,\n\t\t\t\t\ttightBoundingBox,\n\t\t\t\t\tnumPoints,\n\t\t\t\t\tnew Vector3(...e.data.mean));\n\n\t\t\t\tPotree.workerPool.returnWorker(workerPath, worker);\n\t\t\t};\n\n\t\t\tlet message = {\n\t\t\t\tbuffer: las.arrayb,\n\t\t\t\tnumPoints: las.pointsCount,\n\t\t\t\tpointSize: las.pointSize,\n\t\t\t\tpointFormatID: las.pointsFormatId,\n\t\t\t\tscale: las.scale,\n\t\t\t\toffset: las.offset,\n\t\t\t\tmins: las.mins,\n\t\t\t\tmaxs: las.maxs\n\t\t\t};\n\n\t\t\tworker.postMessage(message, [message.buffer]);\n\t\t};\n\t};\n\n\tclass EptZstandardLoader extends EptBinaryLoader {\n\t    extension() {\n\t        return '.zst';\n\t    }\n\n\t    workerPath() {\n\t        return Potree.scriptPath + '/workers/EptZstandardDecoderWorker.js';\n\t    }\n\t};\n\n\tclass ShapefileLoader{\n\n\t\tconstructor(){\n\t\t\tthis.transform = null;\n\t\t}\n\n\t\tasync load(path){\n\n\t\t\tconst matLine = new LineMaterial( {\n\t\t\t\tcolor: 0xff0000,\n\t\t\t\tlinewidth: 3, // in pixels\n\t\t\t\tresolution:  new Vector2(1000, 1000),\n\t\t\t\tdashed: false\n\t\t\t} );\n\n\t\t\tconst features = await this.loadShapefileFeatures(path);\n\t\t\tconst node = new Object3D();\n\t\t\t\n\t\t\tfor(const feature of features){\n\t\t\t\tconst fnode = this.featureToSceneNode(feature, matLine);\n\t\t\t\tnode.add(fnode);\n\t\t\t}\n\n\t\t\tlet setResolution = (x, y) => {\n\t\t\t\tmatLine.resolution.set(x, y);\n\t\t\t};\n\n\t\t\tconst result = {\n\t\t\t\tfeatures: features,\n\t\t\t\tnode: node,\n\t\t\t\tsetResolution: setResolution,\n\t\t\t};\n\n\t\t\treturn result;\n\t\t}\n\n\t\tfeatureToSceneNode(feature, matLine){\n\t\t\tlet geometry = feature.geometry;\n\t\t\t\n\t\t\tlet color = new Color(1, 1, 1);\n\n\t\t\tlet transform = this.transform;\n\t\t\tif(transform === null){\n\t\t\t\ttransform = {forward: (v) => v};\n\t\t\t}\n\t\t\t\n\t\t\tif(feature.geometry.type === \"Point\"){\n\t\t\t\tlet sg = new SphereGeometry(1, 18, 18);\n\t\t\t\tlet sm = new MeshNormalMaterial();\n\t\t\t\tlet s = new Mesh(sg, sm);\n\t\t\t\t\n\t\t\t\tlet [long, lat] = geometry.coordinates;\n\t\t\t\tlet pos = transform.forward([long, lat]);\n\t\t\t\t\n\t\t\t\ts.position.set(...pos, 20);\n\t\t\t\t\n\t\t\t\ts.scale.set(10, 10, 10);\n\t\t\t\t\n\t\t\t\treturn s;\n\t\t\t}else if(geometry.type === \"LineString\"){\n\t\t\t\tlet coordinates = [];\n\t\t\t\t\n\t\t\t\tlet min = new Vector3(Infinity, Infinity, Infinity);\n\t\t\t\tfor(let i = 0; i < geometry.coordinates.length; i++){\n\t\t\t\t\tlet [long, lat] = geometry.coordinates[i];\n\t\t\t\t\tlet pos = transform.forward([long, lat]);\n\t\t\t\t\t\n\t\t\t\t\tmin.x = Math.min(min.x, pos[0]);\n\t\t\t\t\tmin.y = Math.min(min.y, pos[1]);\n\t\t\t\t\tmin.z = Math.min(min.z, 20);\n\t\t\t\t\t\n\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t\tif(i > 0 && i < geometry.coordinates.length - 1){\n\t\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor(let i = 0; i < coordinates.length; i += 3){\n\t\t\t\t\tcoordinates[i+0] -= min.x;\n\t\t\t\t\tcoordinates[i+1] -= min.y;\n\t\t\t\t\tcoordinates[i+2] -= min.z;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst lineGeometry = new LineGeometry();\n\t\t\t\tlineGeometry.setPositions( coordinates );\n\n\t\t\t\tconst line = new Line2( lineGeometry, matLine );\n\t\t\t\tline.computeLineDistances();\n\t\t\t\tline.scale.set( 1, 1, 1 );\n\t\t\t\tline.position.copy(min);\n\t\t\t\t\n\t\t\t\treturn line;\n\t\t\t}else if(geometry.type === \"Polygon\"){\n\t\t\t\tfor(let pc of geometry.coordinates){\n\t\t\t\t\tlet coordinates = [];\n\t\t\t\t\t\n\t\t\t\t\tlet min = new Vector3(Infinity, Infinity, Infinity);\n\t\t\t\t\tfor(let i = 0; i < pc.length; i++){\n\t\t\t\t\t\tlet [long, lat] = pc[i];\n\t\t\t\t\t\tlet pos = transform.forward([long, lat]);\n\t\t\t\t\t\t\n\t\t\t\t\t\tmin.x = Math.min(min.x, pos[0]);\n\t\t\t\t\t\tmin.y = Math.min(min.y, pos[1]);\n\t\t\t\t\t\tmin.z = Math.min(min.z, 20);\n\t\t\t\t\t\t\n\t\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t\t\tif(i > 0 && i < pc.length - 1){\n\t\t\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfor(let i = 0; i < coordinates.length; i += 3){\n\t\t\t\t\t\tcoordinates[i+0] -= min.x;\n\t\t\t\t\t\tcoordinates[i+1] -= min.y;\n\t\t\t\t\t\tcoordinates[i+2] -= min.z;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst lineGeometry = new LineGeometry();\n\t\t\t\t\tlineGeometry.setPositions( coordinates );\n\n\t\t\t\t\tconst line = new Line2( lineGeometry, matLine );\n\t\t\t\t\tline.computeLineDistances();\n\t\t\t\t\tline.scale.set( 1, 1, 1 );\n\t\t\t\t\tline.position.copy(min);\n\t\t\t\t\t\n\t\t\t\t\treturn line;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tconsole.log(\"unhandled feature: \", feature);\n\t\t\t}\n\t\t}\n\n\t\tasync loadShapefileFeatures(file){\n\t\t\tlet features = [];\n\n\t\t\tlet source = await shapefile.open(file);\n\n\t\t\twhile(true){\n\t\t\t\tlet result = await source.read();\n\n\t\t\t\tif (result.done) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (result.value && result.value.type === 'Feature' && result.value.geometry !== undefined) {\n\t\t\t\t\tfeatures.push(result.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn features;\n\t\t}\n\n\t};\n\n\tconst defaultColors = {\n\t\t\"landuse\":   [0.5, 0.5, 0.5],\n\t\t\"natural\":   [0.0, 1.0, 0.0],\n\t\t\"places\":    [1.0, 0.0, 1.0],\n\t\t\"points\":    [0.0, 1.0, 1.0],\n\t\t\"roads\":     [1.0, 1.0, 0.0],\n\t\t\"waterways\": [0.0, 0.0, 1.0],\n\t\t\"default\":   [0.9, 0.6, 0.1],\n\t};\n\n\tfunction getColor(feature){\n\t\tlet color = defaultColors[feature];\n\n\t\tif(!color){\n\t\t\tcolor = defaultColors[\"default\"];\n\t\t}\n\n\t\treturn color;\n\t}\n\n\tclass Geopackage$1{\n\t\tconstructor(){\n\t\t\tthis.path = null;\n\t\t\tthis.node = null;\n\t\t}\n\t};\n\n\tclass GeoPackageLoader{\n\n\t\tconstructor(){\n\n\t\t}\n\n\t\tstatic async loadUrl(url, params){\n\n\t\t\tawait Promise.all([\n\t\t\t\tUtils.loadScript(`${Potree.scriptPath}/lazylibs/geopackage/geopackage.js`),\n\t\t\t\tUtils.loadScript(`${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.js`),\n\t\t\t]);\n\t\t\t\n\t\t\tconst result = await fetch(url);\n\t\t\tconst buffer = await result.arrayBuffer();\n\n\t\t\tparams = params || {};\n\n\t\t\tparams.source = url;\n\n\t\t\treturn GeoPackageLoader.loadBuffer(buffer, params);\n\t\t}\n\n\t\tstatic async loadBuffer(buffer, params){\n\n\t\t\tawait Promise.all([\n\t\t\t\tUtils.loadScript(`${Potree.scriptPath}/lazylibs/geopackage/geopackage.js`),\n\t\t\t\tUtils.loadScript(`${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.js`),\n\t\t\t]);\n\n\t\t\tparams = params || {};\n\n\t\t\tconst resolver = async (resolve) => {\n\t\t\t\t\n\t\t\t\tlet transform = params.transform;\n\t\t\t\tif(!transform){\n\t\t\t\t\ttransform = {forward: (arg) => arg};\n\t\t\t\t}\n\n\t\t\t\tconst wasmPath = `${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.wasm`;\n\t\t\t\tconst SQL = await initSqlJs({ locateFile: filename => wasmPath});\n\n\t\t\t\tconst u8 = new Uint8Array(buffer);\n\n\t\t\t\tconst data = await geopackage.open(u8);\n\t\t\t\twindow.data = data;\n\n\t\t\t\tconst geopackageNode = new Object3D();\n\t\t\t\tgeopackageNode.name = params.source;\n\t\t\t\tgeopackageNode.potree = {\n\t\t\t\t\tsource: params.source,\n\t\t\t\t};\n\n\t\t\t\tconst geo = new Geopackage$1();\n\t\t\t\tgeo.path = params.source;\n\t\t\t\tgeo.node = geopackageNode;\n\n\t\t\t\tconst tables = data.getTables();\n\n\t\t\t\tfor(const table of tables.features){\n\t\t\t\t\tconst dao = data.getFeatureDao(table);\n\n\t\t\t\t\tlet boundingBox = dao.getBoundingBox();\n\t\t\t\t\tboundingBox = boundingBox.projectBoundingBox(dao.projection, 'EPSG:4326');\n\t\t\t\t\tconst geoJson = data.queryForGeoJSONFeaturesInTable(table, boundingBox);\n\n\t\t\t\t\tconst matLine = new LineMaterial( {\n\t\t\t\t\t\tcolor: new Color().setRGB(...getColor(table)),\n\t\t\t\t\t\tlinewidth: 2, \n\t\t\t\t\t\tresolution:  new Vector2(1000, 1000),\n\t\t\t\t\t\tdashed: false\n\t\t\t\t\t} );\n\n\t\t\t\t\tconst node = new Object3D();\n\t\t\t\t\tnode.name = table;\n\t\t\t\t\tgeo.node.add(node);\n\n\t\t\t\t\tfor(const [index, feature] of Object.entries(geoJson)){\n\t\t\t\t\t\t//const featureNode = GeoPackageLoader.featureToSceneNode(feature, matLine, transform);\n\t\t\t\t\t\tconst featureNode = GeoPackageLoader.featureToSceneNode(feature, matLine, dao.projection, transform);\n\t\t\t\t\t\tnode.add(featureNode);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresolve(geo);\n\t\t\t};\n\n\t\t\treturn new Promise(resolver);\n\t\t}\n\n\t\tstatic featureToSceneNode(feature, matLine, geopackageProjection, transform){\n\t\t\tlet geometry = feature.geometry;\n\t\t\t\n\t\t\tlet color = new Color(1, 1, 1);\n\t\t\t\n\t\t\tif(feature.geometry.type === \"Point\"){\n\t\t\t\tlet sg = new SphereGeometry(1, 18, 18);\n\t\t\t\tlet sm = new MeshNormalMaterial();\n\t\t\t\tlet s = new Mesh(sg, sm);\n\t\t\t\t\n\t\t\t\tlet [long, lat] = geometry.coordinates;\n\t\t\t\tlet pos = transform.forward(geopackageProjection.forward([long, lat]));\n\t\t\t\t\n\t\t\t\ts.position.set(...pos, 20);\n\t\t\t\t\n\t\t\t\ts.scale.set(10, 10, 10);\n\t\t\t\t\n\t\t\t\treturn s;\n\t\t\t}else if(geometry.type === \"LineString\"){\n\t\t\t\tlet coordinates = [];\n\t\t\t\t\n\t\t\t\tlet min = new Vector3(Infinity, Infinity, Infinity);\n\t\t\t\tfor(let i = 0; i < geometry.coordinates.length; i++){\n\t\t\t\t\tlet [long, lat] = geometry.coordinates[i];\n\t\t\t\t\tlet pos = transform.forward(geopackageProjection.forward([long, lat]));\n\t\t\t\t\t\n\t\t\t\t\tmin.x = Math.min(min.x, pos[0]);\n\t\t\t\t\tmin.y = Math.min(min.y, pos[1]);\n\t\t\t\t\tmin.z = Math.min(min.z, 20);\n\t\t\t\t\t\n\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t\tif(i > 0 && i < geometry.coordinates.length - 1){\n\t\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor(let i = 0; i < coordinates.length; i += 3){\n\t\t\t\t\tcoordinates[i+0] -= min.x;\n\t\t\t\t\tcoordinates[i+1] -= min.y;\n\t\t\t\t\tcoordinates[i+2] -= min.z;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst lineGeometry = new LineGeometry();\n\t\t\t\tlineGeometry.setPositions( coordinates );\n\n\t\t\t\tconst line = new Line2( lineGeometry, matLine );\n\t\t\t\tline.computeLineDistances();\n\t\t\t\tline.scale.set( 1, 1, 1 );\n\t\t\t\tline.position.copy(min);\n\t\t\t\t\n\t\t\t\treturn line;\n\t\t\t}else if(geometry.type === \"Polygon\"){\n\t\t\t\tfor(let pc of geometry.coordinates){\n\t\t\t\t\tlet coordinates = [];\n\t\t\t\t\t\n\t\t\t\t\tlet min = new Vector3(Infinity, Infinity, Infinity);\n\t\t\t\t\tfor(let i = 0; i < pc.length; i++){\n\t\t\t\t\t\tlet [long, lat] = pc[i];\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet pos = transform.forward(geopackageProjection.forward([long, lat]));\n\t\t\t\t\t\t\n\t\t\t\t\t\tmin.x = Math.min(min.x, pos[0]);\n\t\t\t\t\t\tmin.y = Math.min(min.y, pos[1]);\n\t\t\t\t\t\tmin.z = Math.min(min.z, 20);\n\t\t\t\t\t\t\n\t\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t\t\tif(i > 0 && i < pc.length - 1){\n\t\t\t\t\t\t\tcoordinates.push(...pos, 20);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfor(let i = 0; i < coordinates.length; i += 3){\n\t\t\t\t\t\tcoordinates[i+0] -= min.x;\n\t\t\t\t\t\tcoordinates[i+1] -= min.y;\n\t\t\t\t\t\tcoordinates[i+2] -= min.z;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst lineGeometry = new LineGeometry();\n\t\t\t\t\tlineGeometry.setPositions( coordinates );\n\n\t\t\t\t\tconst line = new Line2( lineGeometry, matLine );\n\t\t\t\t\tline.computeLineDistances();\n\t\t\t\t\tline.scale.set( 1, 1, 1 );\n\t\t\t\t\tline.position.copy(min);\n\t\t\t\t\t\n\t\t\t\t\treturn line;\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tconsole.log(\"unhandled feature: \", feature);\n\t\t\t}\n\t\t}\n\n\t};\n\n\tclass ClipVolume extends Object3D{\n\t\t\n\t\tconstructor(args){\n\t\t\tsuper();\n\t\t\t\n\t\t\tthis.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1;\n\t\t\tthis.name = \"clip_volume_\" + this.constructor.counter;\n\n\t\t\tlet alpha = args.alpha || 0;\n\t\t\tlet beta = args.beta || 0;\n\t\t\tlet gamma = args.gamma || 0;\n\n\t\t\tthis.rotation.x = alpha;\n\t\t\tthis.rotation.y = beta;\n\t\t\tthis.rotation.z = gamma;\n\n\t\t\tthis.clipOffset = 0.001;\n\t\t\tthis.clipRotOffset = 1;\n\t\t\t\t\t\n\t\t\tlet boxGeometry = new BoxGeometry(1, 1, 1);\n\t\t\tboxGeometry.computeBoundingBox();\n\t\t\t\n\t\t\tlet boxFrameGeometry = new Geometry();\n\t\t\t{\t\t\t\n\t\t\t\t// bottom\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5));\n\t\t\t\t// top\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5));\n\t\t\t\t// sides\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5));\n\n\t\t\t\tboxFrameGeometry.colors.push(new Vector3(1, 1, 1));\n\t\t\t}\n\n\t\t\tlet planeFrameGeometry = new Geometry();\n\t\t\t{\t\t\t\t\t\t\n\t\t\t\t// middle line\n\t\t\t\tplaneFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.0));\n\t\t\t\tplaneFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.0));\n\t\t\t\tplaneFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.0));\n\t\t\t\tplaneFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.0));\n\t\t\t\tplaneFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.0));\n\t\t\t\tplaneFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.0));\n\t\t\t\tplaneFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.0));\n\t\t\t\tplaneFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.0));\n\t\t\t}\n\n\t\t\tthis.dimension = new Vector3(1, 1, 1);\n\t\t\tthis.material = new MeshBasicMaterial( {\n\t\t\t\tcolor: 0x00ff00, \n\t\t\t\ttransparent: true, \n\t\t\t\topacity: 0.3,\n\t\t\t\tdepthTest: true, \n\t\t\t\tdepthWrite: false} );\n\t\t\tthis.box = new Mesh(boxGeometry, this.material);\n\t\t\tthis.box.geometry.computeBoundingBox();\n\t\t\tthis.boundingBox = this.box.geometry.boundingBox;\n\t\t\tthis.add(this.box);\n\t\t\t\n\t\t\tthis.frame = new LineSegments( boxFrameGeometry, new LineBasicMaterial({color: 0x000000}));\n\t\t\tthis.add(this.frame);\n\t\t\tthis.planeFrame = new LineSegments( planeFrameGeometry, new LineBasicMaterial({color: 0xff0000}));\n\t\t\tthis.add(this.planeFrame);\n\n\t\t\t// set default thickness\n\t\t\tthis.setScaleZ(0.1);\n\n\t\t\t// create local coordinate system\n\t\t\tlet createArrow = (name, direction, color) => {\n\t\t\t\tlet material = new MeshBasicMaterial({\n\t\t\t\t\tcolor: color, \n\t\t\t\t\tdepthTest: false, \n\t\t\t\t\tdepthWrite: false});\n\t\t\t\t\t\n\t\t\t\tlet shaftGeometry = new Geometry();\n\t\t\t\tshaftGeometry.vertices.push(new Vector3(0, 0, 0));\n\t\t\t\tshaftGeometry.vertices.push(new Vector3(0, 1, 0));\n\t\t\t\t\n\t\t\t\tlet shaftMaterial = new LineBasicMaterial({\n\t\t\t\t\tcolor: color, \n\t\t\t\t\tdepthTest: false, \n\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\ttransparent: true\n\t\t\t\t\t});\n\t\t\t\tlet shaft = new Line(shaftGeometry, shaftMaterial);\n\t\t\t\tshaft.name = name + \"_shaft\";\n\t\t\t\t\n\t\t\t\tlet headGeometry = new CylinderGeometry(0, 0.04, 0.1, 10, 1, false);\n\t\t\t\tlet headMaterial = material;\n\t\t\t\tlet head = new Mesh(headGeometry, headMaterial);\n\t\t\t\thead.name = name + \"_head\";\n\t\t\t\thead.position.y = 1;\n\t\t\t\t\n\t\t\t\tlet arrow = new Object3D();\n\t\t\t\tarrow.name = name;\n\t\t\t\tarrow.add(shaft);\n\t\t\t\tarrow.add(head);\n\n\t\t\t\treturn arrow;\n\t\t\t};\n\t\t\t\n\t\t\tthis.arrowX = createArrow(\"arrow_x\", new Vector3(1, 0, 0), 0xFF0000);\n\t\t\tthis.arrowY = createArrow(\"arrow_y\", new Vector3(0, 1, 0), 0x00FF00);\n\t\t\tthis.arrowZ = createArrow(\"arrow_z\", new Vector3(0, 0, 1), 0x0000FF);\n\t\t\t\n\t\t\tthis.arrowX.rotation.z = -Math.PI / 2;\n\t\t\tthis.arrowZ.rotation.x = Math.PI / 2;\n\n\t\t\tthis.arrowX.visible = false;\n\t\t\tthis.arrowY.visible = false;\n\t\t\tthis.arrowZ.visible = false;\n\n\t\t\tthis.add(this.arrowX);\n\t\t\tthis.add(this.arrowY);\n\t\t\tthis.add(this.arrowZ);\n\t\t\t\n\t\t\t{ // event listeners\n\t\t\t\tthis.addEventListener(\"ui_select\", e => { \n\t\t\t\t\tthis.arrowX.visible = true;\n\t\t\t\t\tthis.arrowY.visible = true;\n\t\t\t\t\tthis.arrowZ.visible = true; \n\t\t\t\t});\n\t\t\t\tthis.addEventListener(\"ui_deselect\", e => {\n\t\t\t\t\tthis.arrowX.visible = false;\n\t\t\t\t\tthis.arrowY.visible = false;\n\t\t\t\t\tthis.arrowZ.visible = false; \t\t\t\t\n\t\t\t\t});\n\t\t\t\tthis.addEventListener(\"select\", e => { \n\t\t\t\t\tlet scene_header = $(\"#\" + this.name + \" .scene_header\");\n\t\t\t\t\tif(!scene_header.next().is(\":visible\")) {\n\t\t\t\t\t\tscene_header.click();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis.addEventListener(\"deselect\", e => { \n\t\t\t\t\tlet scene_header = $(\"#\" + this.name + \" .scene_header\");\n\t\t\t\t\tif(scene_header.next().is(\":visible\")) {\n\t\t\t\t\t\tscene_header.click();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tthis.update();\n\t\t};\n\n\t\tsetClipOffset(offset) {\t\t\n\t\t\tthis.clipOffset = offset;\t\n\t\t}\n\n\t\tsetClipRotOffset(offset) {\t\t\n\t\t\tthis.clipRotOffset = offset;\t\t\n\t\t}\n\n\t\tsetScaleX(x) {\n\t\t\tthis.box.scale.x = x;\n\t\t\tthis.frame.scale.x = x;\n\t\t\tthis.planeFrame.scale.x = x;\t\t\t\n\t\t}\n\n\t\tsetScaleY(y) {\n\t\t\tthis.box.scale.y = y;\n\t\t\tthis.frame.scale.y = y;\n\t\t\tthis.planeFrame.scale.y = y;\t\t\n\t\t}\n\n\t\tsetScaleZ(z) {\n\t\t\tthis.box.scale.z = z;\n\t\t\tthis.frame.scale.z = z;\n\t\t\tthis.planeFrame.scale.z = z;\t\t\n\t\t}\n\n\t\toffset(args) {\n\t\t\tlet cs = args.cs || null;\n\t\t\tlet axis = args.axis || null;\n\t\t\tlet dir = args.dir || null;\n\n\t\t\tif(!cs || !axis || !dir) return;\n\n\t\t\tif(axis === \"x\") {\n\t\t\t\tif(cs === \"local\") {\n\t\t\t\t\tthis.position.add(this.localX.clone().multiplyScalar(dir * this.clipOffset));\n\t\t\t\t} else if(cs === \"global\") {\n\t\t\t\t\tthis.position.x = this.position.x + dir * this.clipOffset;\n\t\t\t\t}\n\t\t\t}else if(axis === \"y\") {\n\t\t\t\tif(cs === \"local\") {\n\t\t\t\t\tthis.position.add(this.localY.clone().multiplyScalar(dir * this.clipOffset));\n\t\t\t\t} else if(cs === \"global\") {\n\t\t\t\t\tthis.position.y = this.position.y + dir * this.clipOffset;\n\t\t\t\t}\n\t\t\t}else if(axis === \"z\") {\n\t\t\t\tif(cs === \"local\") {\n\t\t\t\t\tthis.position.add(this.localZ.clone().multiplyScalar(dir * this.clipOffset));\n\t\t\t\t} else if(cs === \"global\") {\n\t\t\t\t\tthis.position.z = this.position.z + dir * this.clipOffset;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.dispatchEvent({\"type\": \"clip_volume_changed\", \"viewer\": viewer, \"volume\": this});\n\t\t}\t\n\n\t\trotate(args) {\n\t\t\tlet cs = args.cs || null;\n\t\t\tlet axis = args.axis || null;\n\t\t\tlet dir = args.dir || null;\n\n\t\t\tif(!cs || !axis || !dir) return;\n\n\t\t\tif(cs === \"local\") {\n\t\t\t\tif(axis === \"x\") {\n\t\t\t\t\tthis.rotateOnAxis(new Vector3(1, 0, 0), dir * this.clipRotOffset * Math.PI / 180);\n\t\t\t\t} else if(axis === \"y\") {\n\t\t\t\t\tthis.rotateOnAxis(new Vector3(0, 1, 0), dir * this.clipRotOffset * Math.PI / 180);\n\t\t\t\t} else if(axis === \"z\") {\n\t\t\t\t\tthis.rotateOnAxis(new Vector3(0, 0, 1), dir * this.clipRotOffset * Math.PI / 180);\n\t\t\t\t}\n\t\t\t} else if(cs === \"global\") {\n\t\t\t\tlet rotaxis = new Vector4(1, 0, 0, 0);\t\n\t\t\t\tif(axis === \"y\") {\n\t\t\t\t\trotaxis = new Vector4(0, 1, 0, 0);\n\t\t\t\t} else if(axis === \"z\") {\n\t\t\t\t\trotaxis = new Vector4(0, 0, 1, 0);\n\t\t\t\t}\n\t\t\t\tthis.updateMatrixWorld();\n\t\t\t\tlet invM = newthis.matrixWorld.clone().invert();\n\t\t\t\trotaxis = rotaxis.applyMatrix4(invM).normalize();\n\t\t\t\trotaxis = new Vector3(rotaxis.x, rotaxis.y, rotaxis.z);\n\t\t\t\tthis.rotateOnAxis(rotaxis, dir * this.clipRotOffset * Math.PI / 180);\n\t\t\t}\n\n\t\t\tthis.updateLocalSystem();\n\n\t\t\tthis.dispatchEvent({\"type\": \"clip_volume_changed\", \"viewer\": viewer, \"volume\": this});\n\t\t}\t\n\n\t\tupdate(){\n\t\t\tthis.boundingBox = this.box.geometry.boundingBox;\n\t\t\tthis.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere());\n\t\t\t\n\t\t\tthis.box.visible = false;\n\n\t\t\tthis.updateLocalSystem();\n\t\t};\n\n\t\tupdateLocalSystem() {\t\t\n\t\t\t// extract local coordinate axes\n\t\t\tlet rotQuat = this.getWorldQuaternion();\n\t\t\tthis.localX = new Vector3(1, 0, 0).applyQuaternion(rotQuat).normalize();\n\t\t\tthis.localY = new Vector3(0, 1, 0).applyQuaternion(rotQuat).normalize();\n\t\t\tthis.localZ = new Vector3(0, 0, 1).applyQuaternion(rotQuat).normalize();\n\t\t}\n\t\t\n\t\traycast(raycaster, intersects){\n\t\t\t\n\t\t\tlet is = [];\n\t\t\tthis.box.raycast(raycaster, is);\n\t\t\n\t\t\tif(is.length > 0){\n\t\t\t\tlet I = is[0];\n\t\t\t\tintersects.push({\n\t\t\t\t\tdistance: I.distance,\n\t\t\t\t\tobject: this,\n\t\t\t\t\tpoint: I.point.clone()\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t};\n\n\tclass ClippingTool extends EventDispatcher{\n\n\t\tconstructor(viewer){\n\t\t\tsuper(); \n\n\t\t\tthis.viewer = viewer;\n\n\t\t\tthis.maxPolygonVertices = 8; \n\t\t\t\n\t\t\tthis.addEventListener(\"start_inserting_clipping_volume\", e => {\n\t\t\t\tthis.viewer.dispatchEvent({\n\t\t\t\t\ttype: \"cancel_insertions\"\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.sceneMarker = new Scene();\n\t\t\tthis.sceneVolume = new Scene();\n\t\t\tthis.sceneVolume.name = \"scene_clip_volume\";\n\t\t\tthis.viewer.inputHandler.registerInteractiveScene(this.sceneVolume);\n\n\t\t\tthis.onRemove = e => {\n\t\t\t\tthis.sceneVolume.remove(e.volume);\n\t\t\t};\n\t\t\t\n\t\t\tthis.onAdd = e => {\n\t\t\t\tthis.sceneVolume.add(e.volume);\n\t\t\t};\n\t\t\t\n\t\t\tthis.viewer.inputHandler.addEventListener(\"delete\", e => {\n\t\t\t\tlet volumes = e.selection.filter(e => (e instanceof ClipVolume));\n\t\t\t\tvolumes.forEach(e => this.viewer.scene.removeClipVolume(e));\n\t\t\t\tlet polyVolumes = e.selection.filter(e => (e instanceof PolygonClipVolume));\n\t\t\t\tpolyVolumes.forEach(e => this.viewer.scene.removePolygonClipVolume(e));\n\t\t\t});\n\t\t}\n\n\t\tsetScene(scene){\n\t\t\tif(this.scene === scene){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif(this.scene){\n\t\t\t\tthis.scene.removeEventListeners(\"clip_volume_added\", this.onAdd);\n\t\t\t\tthis.scene.removeEventListeners(\"clip_volume_removed\", this.onRemove);\n\t\t\t\tthis.scene.removeEventListeners(\"polygon_clip_volume_added\", this.onAdd);\n\t\t\t\tthis.scene.removeEventListeners(\"polygon_clip_volume_removed\", this.onRemove);\n\t\t\t}\n\t\t\t\n\t\t\tthis.scene = scene;\n\t\t\t\n\t\t\tthis.scene.addEventListener(\"clip_volume_added\", this.onAdd);\n\t\t\tthis.scene.addEventListener(\"clip_volume_removed\", this.onRemove);\n\t\t\tthis.scene.addEventListener(\"polygon_clip_volume_added\", this.onAdd);\n\t\t\tthis.scene.addEventListener(\"polygon_clip_volume_removed\", this.onRemove);\n\t\t}\n\n\t\tstartInsertion(args = {}) {\t\n\t\t\tlet type = args.type || null;\n\n\t\t\tif(!type) return null;\n\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\t\t\tlet canvasSize = this.viewer.renderer.getSize(new Vector2());\n\n\t\t\tlet svg = $(`\n\t\t<svg height=\"${canvasSize.height}\" width=\"${canvasSize.width}\" style=\"position:absolute; pointer-events: none\">\n\n\t\t\t<defs>\n\t\t\t\t <marker id=\"diamond\" markerWidth=\"24\" markerHeight=\"24\" refX=\"12\" refY=\"12\"\n\t\t\t\t\t\tmarkerUnits=\"userSpaceOnUse\">\n\t\t\t\t\t<circle cx=\"12\" cy=\"12\" r=\"6\" fill=\"white\" stroke=\"black\" stroke-width=\"3\"/>\n\t\t\t\t</marker>\n\t\t\t</defs>\n\n\t\t\t<polyline fill=\"none\" stroke=\"black\" \n\t\t\t\tstyle=\"stroke:rgb(0, 0, 0);\n\t\t\t\tstroke-width:6;\"\n\t\t\t\tstroke-dasharray=\"9, 6\"\n\t\t\t\tstroke-dashoffset=\"2\"\n\t\t\t\t/>\n\n\t\t\t<polyline fill=\"none\" stroke=\"black\" \n\t\t\t\tstyle=\"stroke:rgb(255, 255, 255);\n\t\t\t\tstroke-width:2;\"\n\t\t\t\tstroke-dasharray=\"5, 10\"\n\t\t\t\tmarker-start=\"url(#diamond)\" \n\t\t\t\tmarker-mid=\"url(#diamond)\" \n\t\t\t\tmarker-end=\"url(#diamond)\" \n\t\t\t\t/>\n\t\t</svg>`);\n\t\t\t$(domElement.parentElement).append(svg);\n\n\t\t\tlet polyClipVol = new PolygonClipVolume(this.viewer.scene.getActiveCamera().clone());\n\n\t\t\tthis.dispatchEvent({\"type\": \"start_inserting_clipping_volume\"});\n\n\t\t\tthis.viewer.scene.addPolygonClipVolume(polyClipVol);\n\t\t\tthis.sceneMarker.add(polyClipVol);\n\n\t\t\tlet cancel = {\n\t\t\t\tcallback: null\n\t\t\t};\n\n\t\t\tlet insertionCallback = (e) => {\n\t\t\t\tif(e.button === MOUSE.LEFT){\n\t\t\t\t\t\n\t\t\t\t\tpolyClipVol.addMarker();\n\n\t\t\t\t\t// SVC Screen Line\n\t\t\t\t\tsvg.find(\"polyline\").each((index, target) => {\n\t\t\t\t\t\tlet newPoint = svg[0].createSVGPoint();\n\t\t\t\t\t\tnewPoint.x = e.offsetX;\n\t\t\t\t\t\tnewPoint.y = e.offsetY;\n\t\t\t\t\t\tlet polyline = target.points.appendItem(newPoint);\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\tif(polyClipVol.markers.length > this.maxPolygonVertices){\n\t\t\t\t\t\tcancel.callback();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\t\t\tpolyClipVol.markers[polyClipVol.markers.length - 1]);\n\t\t\t\t}else if(e.button === MOUSE.RIGHT){\n\t\t\t\t\tcancel.callback(e);\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tcancel.callback = e => {\n\n\t\t\t\t//let first = svg.find(\"polyline\")[0].points[0];\n\t\t\t\t//svg.find(\"polyline\").each((index, target) => {\n\t\t\t\t//\tlet newPoint = svg[0].createSVGPoint();\n\t\t\t\t//\tnewPoint.x = first.x;\n\t\t\t\t//\tnewPoint.y = first.y;\n\t\t\t\t//\tlet polyline = target.points.appendItem(newPoint);\n\t\t\t\t//});\n\t\t\t\tsvg.remove();\n\n\t\t\t\tif(polyClipVol.markers.length > 3) {\n\t\t\t\t\tpolyClipVol.removeLastMarker();\n\t\t\t\t\tpolyClipVol.initialized = true;\t\n\t\t\t\t} else {\n\t\t\t\t\tthis.viewer.scene.removePolygonClipVolume(polyClipVol);\n\t\t\t\t}\n\n\t\t\t\tthis.viewer.renderer.domElement.removeEventListener(\"mouseup\", insertionCallback, true);\n\t\t\t\tthis.viewer.removeEventListener(\"cancel_insertions\", cancel.callback);\n\t\t\t\tthis.viewer.inputHandler.enabled = true;\n\t\t\t};\n\t\t\t\n\t\t\tthis.viewer.addEventListener(\"cancel_insertions\", cancel.callback);\n\t\t\tthis.viewer.renderer.domElement.addEventListener(\"mouseup\", insertionCallback , true);\n\t\t\tthis.viewer.inputHandler.enabled = false;\n\t\t\t\n\t\t\tpolyClipVol.addMarker();\n\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\tpolyClipVol.markers[polyClipVol.markers.length - 1]);\n\n\t\t\treturn polyClipVol;\n\t\t}\n\n\t\tupdate() {\n\n\t\t}\n\t};\n\n\tvar GeoTIFF = (function (exports) {\n\t'use strict';\n\n\tconst Endianness = new Enum({\n\t\tLITTLE: \"II\",\n\t\tBIG: \"MM\",\n\t});\n\n\tconst Type = new Enum({\n\t\tBYTE: {value: 1, bytes: 1},\n\t\tASCII: {value: 2, bytes: 1},\n\t\tSHORT: {value: 3, bytes: 2},\n\t\tLONG: {value: 4, bytes: 4},\n\t\tRATIONAL: {value: 5, bytes: 8},\n\t\tSBYTE: {value: 6, bytes: 1},\n\t\tUNDEFINED: {value: 7, bytes: 1},\n\t\tSSHORT: {value: 8, bytes: 2},\n\t\tSLONG: {value: 9, bytes: 4},\n\t\tSRATIONAL: {value: 10, bytes: 8},\n\t\tFLOAT: {value: 11, bytes: 4},\n\t\tDOUBLE: {value: 12, bytes: 8},\n\t});\n\n\tconst Tag = new Enum({\n\t\tIMAGE_WIDTH: 256,\n\t\tIMAGE_HEIGHT: 257,\n\t\tBITS_PER_SAMPLE: 258,\n\t\tCOMPRESSION: 259,\n\t\tPHOTOMETRIC_INTERPRETATION: 262,\n\t\tSTRIP_OFFSETS: 273,\n\t\tORIENTATION: 274,\n\t\tSAMPLES_PER_PIXEL: 277,\n\t\tROWS_PER_STRIP: 278,\n\t\tSTRIP_BYTE_COUNTS: 279,\n\t\tX_RESOLUTION: 282,\n\t\tY_RESOLUTION: 283,\n\t\tPLANAR_CONFIGURATION: 284,\n\t\tRESOLUTION_UNIT: 296,\n\t\tSOFTWARE: 305,\n\t\tCOLOR_MAP: 320,\n\t\tSAMPLE_FORMAT: 339,\n\t\tMODEL_PIXEL_SCALE: 33550,         // [GeoTIFF] TYPE: double   N: 3\n\t\tMODEL_TIEPOINT: 33922,            // [GeoTIFF] TYPE: double   N: 6 * NUM_TIEPOINTS\n\t\tGEO_KEY_DIRECTORY: 34735,         // [GeoTIFF] TYPE: short    N: >= 4\n\t\tGEO_DOUBLE_PARAMS: 34736,         // [GeoTIFF] TYPE: short    N: variable\n\t\tGEO_ASCII_PARAMS: 34737,          // [GeoTIFF] TYPE: ascii    N: variable\n\t});\n\n\tconst typeMapping = new Map([\n\t\t[Type.BYTE, Uint8Array],\n\t\t[Type.ASCII, Uint8Array],\n\t\t[Type.SHORT, Uint16Array],\n\t\t[Type.LONG, Uint32Array],\n\t\t[Type.RATIONAL, Uint32Array],\n\t\t[Type.SBYTE, Int8Array],\n\t\t[Type.UNDEFINED, Uint8Array],\n\t\t[Type.SSHORT, Int16Array],\n\t\t[Type.SLONG, Int32Array],\n\t\t[Type.SRATIONAL, Int32Array],\n\t\t[Type.FLOAT, Float32Array],\n\t\t[Type.DOUBLE, Float64Array],\n\t]);\n\n\tclass IFDEntry{\n\n\t\tconstructor(tag, type, count, offset, value){\n\t\t\tthis.tag = tag;\n\t\t\tthis.type = type;\n\t\t\tthis.count = count;\n\t\t\tthis.offset = offset;\n\t\t\tthis.value = value;\n\t\t}\n\n\t}\n\n\tclass Image{\n\n\t\tconstructor(){\n\t\t\tthis.width = 0;\n\t\t\tthis.height = 0;\n\t\t\tthis.buffer = null;\n\t\t\tthis.metadata = [];\n\t\t}\n\n\t}\n\n\tclass Reader{\n\n\t\tconstructor(){\n\n\t\t}\n\n\t\tstatic read(data){\n\n\t\t\tlet endiannessTag = String.fromCharCode(...Array.from(data.slice(0, 2)));\n\t\t\tlet endianness = Endianness.fromValue(endiannessTag);\n\n\t\t\tlet tiffCheckTag = data.readUInt8(2);\n\n\t\t\tif(tiffCheckTag !== 42){\n\t\t\t\tthrow new Error(\"not a valid tiff file\");\n\t\t\t}\n\n\t\t\tlet offsetToFirstIFD = data.readUInt32LE(4);\n\n\t\t\tconsole.log(\"offsetToFirstIFD\", offsetToFirstIFD);\n\n\t\t\tlet ifds = [];\n\t\t\tlet IFDsRead = false;\n\t\t\tlet currentIFDOffset = offsetToFirstIFD;\n\t\t\tlet i = 0;\n\t\t\twhile(IFDsRead || i < 100){\n\n\t\t\t\tconsole.log(\"currentIFDOffset\", currentIFDOffset);\n\t\t\t\tlet numEntries = data.readUInt16LE(currentIFDOffset);\n\t\t\t\tlet nextIFDOffset = data.readUInt32LE(currentIFDOffset + 2 + numEntries * 12);\n\n\t\t\t\tconsole.log(\"next offset: \", currentIFDOffset + 2 + numEntries * 12);\n\n\t\t\t\tlet entryBuffer = data.slice(currentIFDOffset + 2, currentIFDOffset + 2 + 12 * numEntries);\n\n\t\t\t\tfor(let i = 0; i < numEntries; i++){\n\t\t\t\t\tlet tag = Tag.fromValue(entryBuffer.readUInt16LE(i * 12));\n\t\t\t\t\tlet type = Type.fromValue(entryBuffer.readUInt16LE(i * 12 + 2));\n\t\t\t\t\tlet count = entryBuffer.readUInt32LE(i * 12 + 4);\n\t\t\t\t\tlet offsetOrValue = entryBuffer.readUInt32LE(i * 12 + 8);\n\t\t\t\t\tlet valueBytes = type.bytes * count;\n\n\t\t\t\t\tlet value;\n\t\t\t\t\tif(valueBytes <= 4){\n\t\t\t\t\t\tvalue = offsetOrValue;\n\t\t\t\t\t}else {\n\t\t\t\t\t\tlet valueBuffer = new Uint8Array(valueBytes);\n\t\t\t\t\t\tvalueBuffer.set(data.slice(offsetOrValue, offsetOrValue + valueBytes));\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet ArrayType = typeMapping.get(type);\n\n\t\t\t\t\t\tvalue = new ArrayType(valueBuffer.buffer);\n\n\t\t\t\t\t\tif(type === Type.ASCII){\n\t\t\t\t\t\t\tvalue = String.fromCharCode(...value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet ifd = new IFDEntry(tag, type, count, offsetOrValue, value);\n\n\t\t\t\t\tifds.push(ifd);\n\t\t\t\t}\n\n\t\t\t\tconsole.log(\"nextIFDOffset\", nextIFDOffset);\n\n\t\t\t\tif(nextIFDOffset === 0){\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcurrentIFDOffset = nextIFDOffset;\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tlet ifdForTag = (tag) => {\n\t\t\t\tfor(let entry of ifds){\n\t\t\t\t\tif(entry.tag === tag){\n\t\t\t\t\t\treturn entry;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t};\n\n\t\t\tlet width = ifdForTag(Tag.IMAGE_WIDTH, ifds).value;\n\t\t\tlet height = ifdForTag(Tag.IMAGE_HEIGHT, ifds).value;\n\t\t\tlet compression = ifdForTag(Tag.COMPRESSION, ifds).value;\n\t\t\tlet rowsPerStrip = ifdForTag(Tag.ROWS_PER_STRIP, ifds).value; \n\t\t\tlet ifdStripOffsets = ifdForTag(Tag.STRIP_OFFSETS, ifds);\n\t\t\tlet ifdStripByteCounts = ifdForTag(Tag.STRIP_BYTE_COUNTS, ifds);\n\n\t\t\tlet numStrips = Math.ceil(height / rowsPerStrip);\n\n\t\t\tlet stripByteCounts = [];\n\t\t\tfor(let i = 0; i < ifdStripByteCounts.count; i++){\n\t\t\t\tlet type = ifdStripByteCounts.type;\n\t\t\t\tlet offset = ifdStripByteCounts.offset + i * type.bytes;\n\n\t\t\t\tlet value;\n\t\t\t\tif(type === Type.SHORT){\n\t\t\t\t\tvalue = data.readUInt16LE(offset);\n\t\t\t\t}else if(type === Type.LONG){\n\t\t\t\t\tvalue = data.readUInt32LE(offset);\n\t\t\t\t}\n\n\t\t\t\tstripByteCounts.push(value);\n\t\t\t}\n\n\t\t\tlet stripOffsets = [];\n\t\t\tfor(let i = 0; i < ifdStripOffsets.count; i++){\n\t\t\t\tlet type = ifdStripOffsets.type;\n\t\t\t\tlet offset = ifdStripOffsets.offset + i * type.bytes;\n\n\t\t\t\tlet value;\n\t\t\t\tif(type === Type.SHORT){\n\t\t\t\t\tvalue = data.readUInt16LE(offset);\n\t\t\t\t}else if(type === Type.LONG){\n\t\t\t\t\tvalue = data.readUInt32LE(offset);\n\t\t\t\t}\n\n\t\t\t\tstripOffsets.push(value);\n\t\t\t}\n\n\t\t\tlet imageBuffer = new Uint8Array(width * height * 3);\n\t\t\t\n\t\t\tlet linesProcessed = 0;\n\t\t\tfor(let i = 0; i < numStrips; i++){\n\t\t\t\tlet stripOffset = stripOffsets[i];\n\t\t\t\tlet stripBytes = stripByteCounts[i];\n\t\t\t\tlet stripData = data.slice(stripOffset, stripOffset + stripBytes);\n\t\t\t\tlet lineBytes = width * 3;\n\t\t\t\tfor(let y = 0; y < rowsPerStrip; y++){\n\t\t\t\t\tlet line = stripData.slice(y * lineBytes, y * lineBytes + lineBytes);\n\t\t\t\t\timageBuffer.set(line, linesProcessed * lineBytes);\n\t\t\t\n\t\t\t\t\tif(line.length === lineBytes){\n\t\t\t\t\t\tlinesProcessed++;\n\t\t\t\t\t}else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log(`width: ${width}`);\n\t\t\tconsole.log(`height: ${height}`);\n\t\t\tconsole.log(`numStrips: ${numStrips}`);\n\t\t\tconsole.log(\"stripByteCounts\", stripByteCounts.join(\", \"));\n\t\t\tconsole.log(\"stripOffsets\", stripOffsets.join(\", \"));\n\n\t\t\tlet image = new Image();\n\t\t\timage.width = width;\n\t\t\timage.height = height;\n\t\t\timage.buffer = imageBuffer;\n\t\t\timage.metadata = ifds;\n\n\t\t\treturn image;\n\t\t}\n\n\t}\n\n\n\tclass Exporter{\n\n\t\tconstructor(){\n\n\t\t}\n\n\t\tstatic toTiffBuffer(image, params = {}){\n\n\t\t\tlet offsetToFirstIFD = 8;\n\t\t\t\n\t\t\tlet headerBuffer = new Uint8Array([0x49, 0x49, 42, 0, offsetToFirstIFD, 0, 0, 0]);\n\n\t\t\tlet [width, height] = [image.width, image.height];\n\n\t\t\tlet ifds = [\n\t\t\t\tnew IFDEntry(Tag.IMAGE_WIDTH,                Type.SHORT,    1,   null, width),\n\t\t\t\tnew IFDEntry(Tag.IMAGE_HEIGHT,               Type.SHORT,    1,   null, height),\n\t\t\t\tnew IFDEntry(Tag.BITS_PER_SAMPLE,            Type.SHORT,    4,   null, new Uint16Array([8, 8, 8, 8])),\n\t\t\t\tnew IFDEntry(Tag.COMPRESSION,                Type.SHORT,    1,   null, 1),\n\t\t\t\tnew IFDEntry(Tag.PHOTOMETRIC_INTERPRETATION, Type.SHORT,    1,   null, 2),\n\t\t\t\tnew IFDEntry(Tag.ORIENTATION,                Type.SHORT,    1,   null, 1),\n\t\t\t\tnew IFDEntry(Tag.SAMPLES_PER_PIXEL,          Type.SHORT,    1,   null, 4),\n\t\t\t\tnew IFDEntry(Tag.ROWS_PER_STRIP,             Type.LONG,     1,   null, height),\n\t\t\t\tnew IFDEntry(Tag.STRIP_BYTE_COUNTS,          Type.LONG,     1,   null, width * height * 3),\n\t\t\t\tnew IFDEntry(Tag.PLANAR_CONFIGURATION,       Type.SHORT,    1,   null, 1),\n\t\t\t\tnew IFDEntry(Tag.RESOLUTION_UNIT,            Type.SHORT,    1,   null, 1),\n\t\t\t\tnew IFDEntry(Tag.SOFTWARE,                   Type.ASCII,    6,   null, \"......\"),\n\t\t\t\tnew IFDEntry(Tag.STRIP_OFFSETS,              Type.LONG,     1,   null, null),\n\t\t\t\tnew IFDEntry(Tag.X_RESOLUTION,               Type.RATIONAL, 1,   null, new Uint32Array([1, 1])),\n\t\t\t\tnew IFDEntry(Tag.Y_RESOLUTION,               Type.RATIONAL, 1,   null, new Uint32Array([1, 1])),\n\t\t\t];\n\n\t\t\tif(params.ifdEntries){\n\t\t\t\tifds.push(...params.ifdEntries);\n\t\t\t}\n\n\t\t\tlet valueOffset = offsetToFirstIFD + 2 + ifds.length * 12 + 4;\n\n\t\t\t// create 12 byte buffer for each ifd and variable length buffers for ifd values\n\t\t\tlet ifdEntryBuffers = new Map();\n\t\t\tlet ifdValueBuffers = new Map();\n\t\t\tfor(let ifd of ifds){\n\t\t\t\tlet entryBuffer = new ArrayBuffer(12);\n\t\t\t\tlet entryView = new DataView(entryBuffer);\n\n\t\t\t\tlet valueBytes = ifd.type.bytes * ifd.count;\n\n\t\t\t\tentryView.setUint16(0, ifd.tag.value, true);\n\t\t\t\tentryView.setUint16(2, ifd.type.value, true);\n\t\t\t\tentryView.setUint32(4, ifd.count, true);\n\n\t\t\t\tif(ifd.count === 1 && ifd.type.bytes <= 4){\n\t\t\t\t\tentryView.setUint32(8, ifd.value, true);\n\t\t\t\t}else {\n\t\t\t\t\tentryView.setUint32(8, valueOffset, true);\n\n\t\t\t\t\tlet valueBuffer = new Uint8Array(ifd.count * ifd.type.bytes);\n\t\t\t\t\tif(ifd.type === Type.ASCII){\n\t\t\t\t\t\tvalueBuffer.set(new Uint8Array(ifd.value.split(\"\").map(c => c.charCodeAt(0))));\n\t\t\t\t\t}else {\n\t\t\t\t\t\tvalueBuffer.set(new Uint8Array(ifd.value.buffer));\n\t\t\t\t\t}\n\t\t\t\t\tifdValueBuffers.set(ifd.tag, valueBuffer);\n\n\t\t\t\t\tvalueOffset = valueOffset + valueBuffer.byteLength;\n\t\t\t\t}\n\n\t\t\t\tifdEntryBuffers.set(ifd.tag, entryBuffer);\n\t\t\t}\n\n\t\t\tlet imageBufferOffset = valueOffset;\n\n\t\t\tnew DataView(ifdEntryBuffers.get(Tag.STRIP_OFFSETS)).setUint32(8, imageBufferOffset, true);\n\n\t\t\tlet concatBuffers = (buffers) => {\n\n\t\t\t\tlet totalLength = buffers.reduce( (sum, buffer) => (sum + buffer.byteLength), 0);\n\t\t\t\tlet merged = new Uint8Array(totalLength);\n\n\t\t\t\tlet offset = 0;\n\t\t\t\tfor(let buffer of buffers){\n\t\t\t\t\tmerged.set(new Uint8Array(buffer), offset);\n\t\t\t\t\toffset += buffer.byteLength;\n\t\t\t\t}\n\n\t\t\t\treturn merged;\n\t\t\t};\n\t\t\t\n\t\t\tlet ifdBuffer = concatBuffers([\n\t\t\t\tnew Uint16Array([ifds.length]), \n\t\t\t\t...ifdEntryBuffers.values(), \n\t\t\t\tnew Uint32Array([0])]);\n\t\t\tlet ifdValueBuffer = concatBuffers([...ifdValueBuffers.values()]);\n\n\t\t\tlet tiffBuffer = concatBuffers([\n\t\t\t\theaderBuffer,\n\t\t\t\tifdBuffer,\n\t\t\t\tifdValueBuffer,\n\t\t\t\timage.buffer\n\t\t\t]);\n\n\t\t\treturn {width: width, height: height, buffer: tiffBuffer};\n\t\t}\n\n\t}\n\n\texports.Tag = Tag;\n\texports.Type = Type;\n\texports.IFDEntry = IFDEntry;\n\texports.Image = Image;\n\texports.Reader = Reader;\n\texports.Exporter = Exporter;\n\n\treturn exports;\n\n\t}({}));\n\n\tfunction updateAzimuth(viewer, measure){\n\n\t\tconst azimuth = measure.azimuth;\n\n\t\tconst isOkay = measure.points.length === 2;\n\n\t\tazimuth.node.visible = isOkay && measure.showAzimuth;\n\n\t\tif(!azimuth.node.visible){\n\t\t\treturn;\n\t\t}\n\n\t\tconst camera = viewer.scene.getActiveCamera();\n\t\tconst renderAreaSize = viewer.renderer.getSize(new Vector2());\n\t\tconst width = renderAreaSize.width;\n\t\tconst height = renderAreaSize.height;\n\t\t\n\t\tconst [p0, p1] = measure.points;\n\t\tconst r = p0.position.distanceTo(p1.position);\n\t\tconst northVec = Utils.getNorthVec(p0.position, r, viewer.getProjection());\n\t\tconst northPos = p0.position.clone().add(northVec);\n\n\t\tazimuth.center.position.copy(p0.position);\n\t\tazimuth.center.scale.set(2, 2, 2);\n\t\t\n\t\tazimuth.center.visible = false;\n\t\t// azimuth.target.visible = false;\n\n\n\t\t{ // north\n\t\t\tazimuth.north.position.copy(northPos);\n\t\t\tazimuth.north.scale.set(2, 2, 2);\n\n\t\t\tlet distance = azimuth.north.position.distanceTo(camera.position);\n\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, width, height);\n\n\t\t\tlet scale = (5 / pr);\n\t\t\tazimuth.north.scale.set(scale, scale, scale);\n\t\t}\n\n\t\t{ // target\n\t\t\tazimuth.target.position.copy(p1.position);\n\t\t\tazimuth.target.position.z = azimuth.north.position.z;\n\n\t\t\tlet distance = azimuth.target.position.distanceTo(camera.position);\n\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, width, height);\n\n\t\t\tlet scale = (5 / pr);\n\t\t\tazimuth.target.scale.set(scale, scale, scale);\n\t\t}\n\n\n\t\tazimuth.circle.position.copy(p0.position);\n\t\tazimuth.circle.scale.set(r, r, r);\n\t\tazimuth.circle.material.resolution.set(width, height);\n\n\t\t// to target\n\t\tazimuth.centerToTarget.geometry.setPositions([\n\t\t\t0, 0, 0,\n\t\t\t...p1.position.clone().sub(p0.position).toArray(),\n\t\t]);\n\t\tazimuth.centerToTarget.position.copy(p0.position);\n\t\tazimuth.centerToTarget.geometry.verticesNeedUpdate = true;\n\t\tazimuth.centerToTarget.geometry.computeBoundingSphere();\n\t\tazimuth.centerToTarget.computeLineDistances();\n\t\tazimuth.centerToTarget.material.resolution.set(width, height);\n\n\t\t// to target ground\n\t\tazimuth.centerToTargetground.geometry.setPositions([\n\t\t\t0, 0, 0,\n\t\t\tp1.position.x - p0.position.x,\n\t\t\tp1.position.y - p0.position.y,\n\t\t\t0,\n\t\t]);\n\t\tazimuth.centerToTargetground.position.copy(p0.position);\n\t\tazimuth.centerToTargetground.geometry.verticesNeedUpdate = true;\n\t\tazimuth.centerToTargetground.geometry.computeBoundingSphere();\n\t\tazimuth.centerToTargetground.computeLineDistances();\n\t\tazimuth.centerToTargetground.material.resolution.set(width, height);\n\n\t\t// to north\n\t\tazimuth.centerToNorth.geometry.setPositions([\n\t\t\t0, 0, 0,\n\t\t\tnorthPos.x - p0.position.x,\n\t\t\tnorthPos.y - p0.position.y,\n\t\t\t0,\n\t\t]);\n\t\tazimuth.centerToNorth.position.copy(p0.position);\n\t\tazimuth.centerToNorth.geometry.verticesNeedUpdate = true;\n\t\tazimuth.centerToNorth.geometry.computeBoundingSphere();\n\t\tazimuth.centerToNorth.computeLineDistances();\n\t\tazimuth.centerToNorth.material.resolution.set(width, height);\n\n\t\t// label\n\t\tconst radians = Utils.computeAzimuth(p0.position, p1.position, viewer.getProjection());\n\t\tlet degrees = MathUtils.radToDeg(radians);\n\t\tif(degrees < 0){\n\t\t\tdegrees = 360 + degrees;\n\t\t}\n\t\tconst txtDegrees = `${degrees.toFixed(2)}°`;\n\t\tconst labelDir = northPos.clone().add(p1.position).multiplyScalar(0.5).sub(p0.position);\n\t\tif(labelDir.length() > 0){\n\t\t\tlabelDir.z = 0;\n\t\t\tlabelDir.normalize();\n\t\t\tconst labelVec = labelDir.clone().multiplyScalar(r);\n\t\t\tconst labelPos = p0.position.clone().add(labelVec);\n\t\t\tazimuth.label.position.copy(labelPos);\n\t\t}\n\t\tazimuth.label.setText(txtDegrees);\n\t\tlet distance = azimuth.label.position.distanceTo(camera.position);\n\t\tlet pr = Utils.projectedRadius(1, camera, distance, width, height);\n\t\tlet scale = (70 / pr);\n\t\tazimuth.label.scale.set(scale, scale, scale);\n\t}\n\n\tclass MeasuringTool extends EventDispatcher{\n\t\tconstructor (viewer) {\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.addEventListener('start_inserting_measurement', e => {\n\t\t\t\tthis.viewer.dispatchEvent({\n\t\t\t\t\ttype: 'cancel_insertions'\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.showLabels = true;\n\t\t\tthis.scene = new Scene();\n\t\t\tthis.scene.name = 'scene_measurement';\n\t\t\tthis.light = new PointLight(0xffffff, 1.0);\n\t\t\tthis.scene.add(this.light);\n\n\t\t\tthis.viewer.inputHandler.registerInteractiveScene(this.scene);\n\n\t\t\tthis.onRemove = (e) => { this.scene.remove(e.measurement);};\n\t\t\tthis.onAdd = e => {this.scene.add(e.measurement);};\n\n\t\t\tfor(let measurement of viewer.scene.measurements){\n\t\t\t\tthis.onAdd({measurement: measurement});\n\t\t\t}\n\n\t\t\tviewer.addEventListener(\"update\", this.update.bind(this));\n\t\t\tviewer.addEventListener(\"render.pass.perspective_overlay\", this.render.bind(this));\n\t\t\tviewer.addEventListener(\"scene_changed\", this.onSceneChange.bind(this));\n\n\t\t\tviewer.scene.addEventListener('measurement_added', this.onAdd);\n\t\t\tviewer.scene.addEventListener('measurement_removed', this.onRemove);\n\t\t}\n\n\t\tonSceneChange(e){\n\t\t\tif(e.oldScene){\n\t\t\t\te.oldScene.removeEventListener('measurement_added', this.onAdd);\n\t\t\t\te.oldScene.removeEventListener('measurement_removed', this.onRemove);\n\t\t\t}\n\n\t\t\te.scene.addEventListener('measurement_added', this.onAdd);\n\t\t\te.scene.addEventListener('measurement_removed', this.onRemove);\n\t\t}\n\n\t\tstartInsertion (args = {}) {\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\t\tlet measure = new Measure();\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'start_inserting_measurement',\n\t\t\t\tmeasure: measure\n\t\t\t});\n\n\t\t\tconst pick = (defaul, alternative) => {\n\t\t\t\tif(defaul != null){\n\t\t\t\t\treturn defaul;\n\t\t\t\t}else {\n\t\t\t\t\treturn alternative;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tmeasure.showDistances = (args.showDistances === null) ? true : args.showDistances;\n\n\t\t\tmeasure.showArea = pick(args.showArea, false);\n\t\t\tmeasure.showAngles = pick(args.showAngles, false);\n\t\t\tmeasure.showCoordinates = pick(args.showCoordinates, false);\n\t\t\tmeasure.showHeight = pick(args.showHeight, false);\n\t\t\tmeasure.showCircle = pick(args.showCircle, false);\n\t\t\tmeasure.showAzimuth = pick(args.showAzimuth, false);\n\t\t\tmeasure.showEdges = pick(args.showEdges, true);\n\t\t\tmeasure.closed = pick(args.closed, false);\n\t\t\tmeasure.maxMarkers = pick(args.maxMarkers, Infinity);\n\n\t\t\tmeasure.name = args.name || 'Measurement';\n\n\t\t\tthis.scene.add(measure);\n\n\t\t\tlet cancel = {\n\t\t\t\tremoveLastMarker: measure.maxMarkers > 3,\n\t\t\t\tcallback: null\n\t\t\t};\n\n\t\t\tlet insertionCallback = (e) => {\n\t\t\t\tif (e.button === MOUSE.LEFT) {\n\t\t\t\t\tmeasure.addMarker(measure.points[measure.points.length - 1].position.clone());\n\n\t\t\t\t\tif (measure.points.length >= measure.maxMarkers) {\n\t\t\t\t\t\tcancel.callback();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\t\t\tmeasure.spheres[measure.spheres.length - 1]);\n\t\t\t\t} else if (e.button === MOUSE.RIGHT) {\n\t\t\t\t\tcancel.callback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tcancel.callback = e => {\n\t\t\t\tif (cancel.removeLastMarker) {\n\t\t\t\t\tmeasure.removeMarker(measure.points.length - 1);\n\t\t\t\t}\n\t\t\t\tdomElement.removeEventListener('mouseup', insertionCallback, false);\n\t\t\t\tthis.viewer.removeEventListener('cancel_insertions', cancel.callback);\n\t\t\t};\n\n\t\t\tif (measure.maxMarkers > 1) {\n\t\t\t\tthis.viewer.addEventListener('cancel_insertions', cancel.callback);\n\t\t\t\tdomElement.addEventListener('mouseup', insertionCallback, false);\n\t\t\t}\n\n\t\t\tmeasure.addMarker(new Vector3(0, 0, 0));\n\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\tmeasure.spheres[measure.spheres.length - 1]);\n\n\t\t\tthis.viewer.scene.addMeasurement(measure);\n\n\t\t\treturn measure;\n\t\t}\n\t\t\n\t\tupdate(){\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\tlet domElement = this.renderer.domElement;\n\t\t\tlet measurements = this.viewer.scene.measurements;\n\n\t\t\tconst renderAreaSize = this.renderer.getSize(new Vector2());\n\t\t\tlet clientWidth = renderAreaSize.width;\n\t\t\tlet clientHeight = renderAreaSize.height;\n\n\t\t\tthis.light.position.copy(camera.position);\n\n\t\t\t// make size independant of distance\n\t\t\tfor (let measure of measurements) {\n\t\t\t\tmeasure.lengthUnit = this.viewer.lengthUnit;\n\t\t\t\tmeasure.lengthUnitDisplay = this.viewer.lengthUnitDisplay;\n\t\t\t\tmeasure.update();\n\n\t\t\t\tupdateAzimuth(this.viewer, measure);\n\n\t\t\t\t// spheres\n\t\t\t\tfor(let sphere of measure.spheres){\n\t\t\t\t\tlet distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3()));\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\t\tlet scale = (15 / pr);\n\t\t\t\t\tsphere.scale.set(scale, scale, scale);\n\t\t\t\t}\n\n\t\t\t\t// labels\n\t\t\t\tlet labels = measure.edgeLabels.concat(measure.angleLabels);\n\t\t\t\tfor(let label of labels){\n\t\t\t\t\tlet distance = camera.position.distanceTo(label.getWorldPosition(new Vector3()));\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\t\tlet scale = (70 / pr);\n\n\t\t\t\t\tif(Potree.debug.scale){\n\t\t\t\t\t\tscale = (Potree.debug.scale / pr);\n\t\t\t\t\t}\n\n\t\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t\t}\n\n\t\t\t\t// coordinate labels\n\t\t\t\tfor (let j = 0; j < measure.coordinateLabels.length; j++) {\n\t\t\t\t\tlet label = measure.coordinateLabels[j];\n\t\t\t\t\tlet sphere = measure.spheres[j];\n\n\t\t\t\t\tlet distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3()));\n\n\t\t\t\t\tlet screenPos = sphere.getWorldPosition(new Vector3()).clone().project(camera);\n\t\t\t\t\tscreenPos.x = Math.round((screenPos.x + 1) * clientWidth / 2);\n\t\t\t\t\tscreenPos.y = Math.round((-screenPos.y + 1) * clientHeight / 2);\n\t\t\t\t\tscreenPos.z = 0;\n\t\t\t\t\tscreenPos.y -= 30;\n\n\t\t\t\t\tlet labelPos = new Vector3( \n\t\t\t\t\t\t(screenPos.x / clientWidth) * 2 - 1, \n\t\t\t\t\t\t-(screenPos.y / clientHeight) * 2 + 1, \n\t\t\t\t\t\t0.5 );\n\t\t\t\t\tlabelPos.unproject(camera);\n\t\t\t\t\tif(this.viewer.scene.cameraMode == CameraMode.PERSPECTIVE) {\n\t\t\t\t\t\tlet direction = labelPos.sub(camera.position).normalize();\n\t\t\t\t\t\tlabelPos = new Vector3().addVectors(\n\t\t\t\t\t\t\tcamera.position, direction.multiplyScalar(distance));\n\n\t\t\t\t\t}\n\t\t\t\t\tlabel.position.copy(labelPos);\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\t\tlet scale = (70 / pr);\n\t\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t\t}\n\n\t\t\t\t// height label\n\t\t\t\tif (measure.showHeight) {\n\t\t\t\t\tlet label = measure.heightLabel;\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet distance = label.position.distanceTo(camera.position);\n\t\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\t\t\tlet scale = (70 / pr);\n\t\t\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t\t\t}\n\n\t\t\t\t\t{ // height edge\n\t\t\t\t\t\tlet edge = measure.heightEdge;\n\n\t\t\t\t\t\tlet sorted = measure.points.slice().sort((a, b) => a.position.z - b.position.z);\n\t\t\t\t\t\tlet lowPoint = sorted[0].position.clone();\n\t\t\t\t\t\tlet highPoint = sorted[sorted.length - 1].position.clone();\n\t\t\t\t\t\tlet min = lowPoint.z;\n\t\t\t\t\t\tlet max = highPoint.z;\n\n\t\t\t\t\t\tlet start = new Vector3(highPoint.x, highPoint.y, min);\n\t\t\t\t\t\tlet end = new Vector3(highPoint.x, highPoint.y, max);\n\n\t\t\t\t\t\tlet lowScreen = lowPoint.clone().project(camera);\n\t\t\t\t\t\tlet startScreen = start.clone().project(camera);\n\t\t\t\t\t\tlet endScreen = end.clone().project(camera);\n\n\t\t\t\t\t\tlet toPixelCoordinates = v => {\n\t\t\t\t\t\t\tlet r = v.clone().addScalar(1).divideScalar(2);\n\t\t\t\t\t\t\tr.x = r.x * clientWidth;\n\t\t\t\t\t\t\tr.y = r.y * clientHeight;\n\t\t\t\t\t\t\tr.z = 0;\n\n\t\t\t\t\t\t\treturn r;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlet lowEL = toPixelCoordinates(lowScreen);\n\t\t\t\t\t\tlet startEL = toPixelCoordinates(startScreen);\n\t\t\t\t\t\tlet endEL = toPixelCoordinates(endScreen);\n\n\t\t\t\t\t\tlet lToS = lowEL.distanceTo(startEL);\n\t\t\t\t\t\tlet sToE = startEL.distanceTo(endEL);\n\n\t\t\t\t\t\tedge.geometry.lineDistances = [0, lToS, lToS, lToS + sToE];\n\t\t\t\t\t\tedge.geometry.lineDistancesNeedUpdate = true;\n\n\t\t\t\t\t\tedge.material.dashSize = 10;\n\t\t\t\t\t\tedge.material.gapSize = 10;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t{ // area label\n\t\t\t\t\tlet label = measure.areaLabel;\n\t\t\t\t\tlet distance = label.position.distanceTo(camera.position);\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\n\t\t\t\t\tlet scale = (70 / pr);\n\t\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t\t}\n\n\t\t\t\t{ // radius label\n\t\t\t\t\tlet label = measure.circleRadiusLabel;\n\t\t\t\t\tlet distance = label.position.distanceTo(camera.position);\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\n\t\t\t\t\tlet scale = (70 / pr);\n\t\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t\t}\n\n\t\t\t\t{ // edges\n\t\t\t\t\tconst materials = [\n\t\t\t\t\t\tmeasure.circleRadiusLine.material,\n\t\t\t\t\t\t...measure.edges.map( (e) => e.material),\n\t\t\t\t\t\tmeasure.heightEdge.material,\n\t\t\t\t\t\tmeasure.circleLine.material,\n\t\t\t\t\t];\n\n\t\t\t\t\tfor(const material of materials){\n\t\t\t\t\t\tmaterial.resolution.set(clientWidth, clientHeight);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(!this.showLabels){\n\n\t\t\t\t\tconst labels = [\n\t\t\t\t\t\t...measure.sphereLabels, \n\t\t\t\t\t\t...measure.edgeLabels, \n\t\t\t\t\t\t...measure.angleLabels, \n\t\t\t\t\t\t...measure.coordinateLabels,\n\t\t\t\t\t\tmeasure.heightLabel,\n\t\t\t\t\t\tmeasure.areaLabel,\n\t\t\t\t\t\tmeasure.circleRadiusLabel,\n\t\t\t\t\t];\n\n\t\t\t\t\tfor(const label of labels){\n\t\t\t\t\t\tlabel.visible = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trender(){\n\t\t\tthis.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t\t}\n\t};\n\n\tclass Message{\n\n\t\tconstructor(content){\n\t\t\tthis.content = content;\n\n\t\t\tlet closeIcon = `${exports.resourcePath}/icons/close.svg`;\n\n\t\t\tthis.element = $(`\n\t\t\t<div class=\"potree_message\">\n\t\t\t\t<span name=\"content_container\" style=\"flex-grow: 1; padding: 5px\"></span>\n\t\t\t\t<img name=\"close\" src=\"${closeIcon}\" class=\"button-icon\" style=\"width: 16px; height: 16px;\">\n\t\t\t</div>`);\n\n\t\t\tthis.elClose = this.element.find(\"img[name=close]\");\n\n\t\t\tthis.elContainer = this.element.find(\"span[name=content_container]\");\n\n\t\t\tif(typeof content === \"string\"){\n\t\t\t\tthis.elContainer.append($(`<span>${content}</span>`));\n\t\t\t}else {\n\t\t\t\tthis.elContainer.append(content);\n\t\t\t}\n\n\t\t}\n\n\t\tsetMessage(content){\n\t\t\tthis.elContainer.empty();\n\t\t\tif(typeof content === \"string\"){\n\t\t\t\tthis.elContainer.append($(`<span>${content}</span>`));\n\t\t\t}else {\n\t\t\t\tthis.elContainer.append(content);\n\t\t\t}\n\t\t}\n\n\t}\n\n\tclass PointCloudSM{\n\n\t\tconstructor(potreeRenderer){\n\n\t\t\tthis.potreeRenderer = potreeRenderer;\n\t\t\tthis.threeRenderer = this.potreeRenderer.threeRenderer;\n\n\t\t\tthis.target = new WebGLRenderTarget(2 * 1024, 2 * 1024, {\n\t\t\t\tminFilter: LinearFilter,\n\t\t\t\tmagFilter: LinearFilter,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: FloatType\n\t\t\t});\n\t\t\tthis.target.depthTexture = new DepthTexture();\n\t\t\tthis.target.depthTexture.type = UnsignedIntType;\n\n\t\t\t//this.threeRenderer.setClearColor(0x000000, 1);\n\t\t\tthis.threeRenderer.setClearColor(0xff0000, 1);\n\n\t\t\t//HACK? removed while moving to three.js 109\n\t\t\t//this.threeRenderer.clearTarget(this.target, true, true, true); \n\t\t\t{\n\t\t\t\tconst oldTarget = this.threeRenderer.getRenderTarget();\n\n\t\t\t\tthis.threeRenderer.setRenderTarget(this.target);\n\t\t\t\tthis.threeRenderer.clear(true, true, true);\n\n\t\t\t\tthis.threeRenderer.setRenderTarget(oldTarget);\n\t\t\t}\n\t\t}\n\n\t\tsetLight(light){\n\t\t\tthis.light = light;\n\n\t\t\tlet fov = (180 * light.angle) / Math.PI;\n\t\t\tlet aspect = light.shadow.mapSize.width / light.shadow.mapSize.height;\n\t\t\tlet near = 0.1;\n\t\t\tlet far = light.distance === 0 ? 10000 : light.distance;\n\t\t\tthis.camera = new PerspectiveCamera(fov, aspect, near, far);\n\t\t\tthis.camera.up.set(0, 0, 1);\n\t\t\tthis.camera.position.copy(light.position);\n\n\t\t\tlet target = new Vector3().subVectors(light.position, light.getWorldDirection(new Vector3()));\n\t\t\tthis.camera.lookAt(target);\n\n\t\t\tthis.camera.updateProjectionMatrix();\n\t\t\tthis.camera.updateMatrix();\n\t\t\tthis.camera.updateMatrixWorld();\n\t\t\tthis.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert();\n\t\t}\n\n\t\tsetSize(width, height){\n\t\t\tif(this.target.width !== width || this.target.height !== height){\n\t\t\t\tthis.target.dispose();\n\t\t\t}\n\t\t\tthis.target.setSize(width, height);\n\t\t}\n\n\t\trender(scene, camera){\n\n\t\t\tthis.threeRenderer.setClearColor(0x000000, 1);\n\t\t\t\n\t\t\tconst oldTarget = this.threeRenderer.getRenderTarget();\n\n\t\t\tthis.threeRenderer.setRenderTarget(this.target);\n\t\t\tthis.threeRenderer.clear(true, true, true);\n\n\t\t\tthis.potreeRenderer.render(scene, this.camera, this.target, {});\n\n\t\t\tthis.threeRenderer.setRenderTarget(oldTarget);\n\t\t}\n\n\n\t}\n\n\tclass ProfileTool extends EventDispatcher {\n\t\tconstructor (viewer) {\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.addEventListener('start_inserting_profile', e => {\n\t\t\t\tthis.viewer.dispatchEvent({\n\t\t\t\t\ttype: 'cancel_insertions'\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.scene = new Scene();\n\t\t\tthis.scene.name = 'scene_profile';\n\t\t\tthis.light = new PointLight(0xffffff, 1.0);\n\t\t\tthis.scene.add(this.light);\n\n\t\t\tthis.viewer.inputHandler.registerInteractiveScene(this.scene);\n\n\t\t\tthis.onRemove = e => this.scene.remove(e.profile);\n\t\t\tthis.onAdd = e => this.scene.add(e.profile);\n\n\t\t\tfor(let profile of viewer.scene.profiles){\n\t\t\t\tthis.onAdd({profile: profile});\n\t\t\t}\n\n\t\t\tviewer.addEventListener(\"update\", this.update.bind(this));\n\t\t\tviewer.addEventListener(\"render.pass.perspective_overlay\", this.render.bind(this));\n\t\t\tviewer.addEventListener(\"scene_changed\", this.onSceneChange.bind(this));\n\n\t\t\tviewer.scene.addEventListener('profile_added', this.onAdd);\n\t\t\tviewer.scene.addEventListener('profile_removed', this.onRemove);\n\t\t}\n\n\t\tonSceneChange(e){\n\t\t\tif(e.oldScene){\n\t\t\t\te.oldScene.removeEventListeners('profile_added', this.onAdd);\n\t\t\t\te.oldScene.removeEventListeners('profile_removed', this.onRemove);\n\t\t\t}\n\n\t\t\te.scene.addEventListener('profile_added', this.onAdd);\n\t\t\te.scene.addEventListener('profile_removed', this.onRemove);\n\t\t}\n\n\t\tstartInsertion (args = {}) {\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\t\tlet profile = new Profile();\n\t\t\tprofile.name = args.name || 'Profile';\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'start_inserting_profile',\n\t\t\t\tprofile: profile\n\t\t\t});\n\n\t\t\tthis.scene.add(profile);\n\n\t\t\tlet cancel = {\n\t\t\t\tcallback: null\n\t\t\t};\n\n\t\t\tlet insertionCallback = (e) => {\n\t\t\t\tif(e.button === MOUSE.LEFT){\n\t\t\t\t\tif(profile.points.length <= 1){\n\t\t\t\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\t\t\t\tlet distance = camera.position.distanceTo(profile.points[0]);\n\t\t\t\t\t\tlet clientSize = this.viewer.renderer.getSize(new Vector2());\n\t\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientSize.width, clientSize.height);\n\t\t\t\t\t\tlet width = (10 / pr);\n\n\t\t\t\t\t\tprofile.setWidth(width);\n\t\t\t\t\t}\n\n\t\t\t\t\tprofile.addMarker(profile.points[profile.points.length - 1].clone());\n\n\t\t\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\t\t\tprofile.spheres[profile.spheres.length - 1]);\n\t\t\t\t} else if (e.button === MOUSE.RIGHT) {\n\t\t\t\t\tcancel.callback();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tcancel.callback = e => {\n\t\t\t\tprofile.removeMarker(profile.points.length - 1);\n\t\t\t\tdomElement.removeEventListener('mouseup', insertionCallback, false);\n\t\t\t\tthis.viewer.removeEventListener('cancel_insertions', cancel.callback);\n\t\t\t};\n\n\t\t\tthis.viewer.addEventListener('cancel_insertions', cancel.callback);\n\t\t\tdomElement.addEventListener('mouseup', insertionCallback, false);\n\n\t\t\tprofile.addMarker(new Vector3(0, 0, 0));\n\t\t\tthis.viewer.inputHandler.startDragging(\n\t\t\t\tprofile.spheres[profile.spheres.length - 1]);\n\n\t\t\tthis.viewer.scene.addProfile(profile);\n\n\t\t\treturn profile;\n\t\t}\n\t\t\n\t\tupdate(){\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\tlet profiles = this.viewer.scene.profiles;\n\t\t\tlet renderAreaSize = this.viewer.renderer.getSize(new Vector2());\n\t\t\tlet clientWidth = renderAreaSize.width;\n\t\t\tlet clientHeight = renderAreaSize.height;\n\n\t\t\tthis.light.position.copy(camera.position);\n\n\t\t\t// make size independant of distance\n\t\t\tfor(let profile of profiles){\n\t\t\t\tfor(let sphere of profile.spheres){\t\t\t\t\n\t\t\t\t\tlet distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3()));\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\t\t\t\t\tlet scale = (15 / pr);\n\t\t\t\t\tsphere.scale.set(scale, scale, scale);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trender(){\n\t\t\tthis.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t\t}\n\n\t}\n\n\tclass ScreenBoxSelectTool extends EventDispatcher{\n\n\t\tconstructor(viewer){\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.scene = new Scene();\n\n\t\t\tviewer.addEventListener(\"update\", this.update.bind(this));\n\t\t\tviewer.addEventListener(\"render.pass.perspective_overlay\", this.render.bind(this));\n\t\t\tviewer.addEventListener(\"scene_changed\", this.onSceneChange.bind(this));\n\t\t}\n\n\t\tonSceneChange(scene){\n\t\t\tconsole.log(\"scene changed\");\n\t\t}\n\n\t\tstartInsertion(){\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\t\tlet volume = new BoxVolume();\n\t\t\tvolume.position.set(12345, 12345, 12345);\n\t\t\tvolume.showVolumeLabel = false;\n\t\t\tvolume.visible = false;\n\t\t\tvolume.update();\n\t\t\tthis.viewer.scene.addVolume(volume);\n\n\t\t\tthis.importance = 10;\n\n\t\t\tlet selectionBox = $(`<div style=\"position: absolute; border: 2px solid white; pointer-events: none; border-style:dashed\"></div>`);\n\t\t\t$(domElement.parentElement).append(selectionBox);\n\t\t\tselectionBox.css(\"right\", \"10px\");\n\t\t\tselectionBox.css(\"bottom\", \"10px\");\n\n\t\t\tlet drag = e =>{\n\n\t\t\t\tvolume.visible = true;\n\n\t\t\t\tlet mStart = e.drag.start;\n\t\t\t\tlet mEnd = e.drag.end;\n\n\t\t\t\tlet box2D = new Box2();\n\t\t\t\tbox2D.expandByPoint(mStart);\n\t\t\t\tbox2D.expandByPoint(mEnd);\n\n\t\t\t\tselectionBox.css(\"left\", `${box2D.min.x}px`);\n\t\t\t\tselectionBox.css(\"top\", `${box2D.min.y}px`);\n\t\t\t\tselectionBox.css(\"width\", `${box2D.max.x - box2D.min.x}px`);\n\t\t\t\tselectionBox.css(\"height\", `${box2D.max.y - box2D.min.y}px`);\n\n\t\t\t\tlet camera = e.viewer.scene.getActiveCamera();\n\t\t\t\tlet size = e.viewer.renderer.getSize(new Vector2());\n\t\t\t\tlet frustumSize = new Vector2(\n\t\t\t\t\tcamera.right - camera.left, \n\t\t\t\t\tcamera.top - camera.bottom);\n\n\t\t\t\tlet screenCentroid = new Vector2().addVectors(e.drag.end, e.drag.start).multiplyScalar(0.5);\n\t\t\t\tlet ray = Utils.mouseToRay(screenCentroid, camera, size.width, size.height);\n\n\t\t\t\tlet diff = new Vector2().subVectors(e.drag.end, e.drag.start);\n\t\t\t\tdiff.divide(size).multiply(frustumSize);\n\t\t\t\t\n\t\t\t\tvolume.position.copy(ray.origin);\n\t\t\t\tvolume.up.copy(camera.up);\n\t\t\t\tvolume.rotation.copy(camera.rotation);\n\t\t\t\tvolume.scale.set(diff.x, diff.y, 1000 * 100);\n\n\t\t\t\te.consume();\n\t\t\t};\n\n\t\t\tlet drop = e => {\n\t\t\t\tthis.importance = 0;\n\n\t\t\t\t$(selectionBox).remove();\n\n\t\t\t\tthis.viewer.inputHandler.deselectAll();\n\t\t\t\tthis.viewer.inputHandler.toggleSelection(volume);\n\n\t\t\t\tlet camera = e.viewer.scene.getActiveCamera();\n\t\t\t\tlet size = e.viewer.renderer.getSize(new Vector2());\n\t\t\t\tlet screenCentroid = new Vector2().addVectors(e.drag.end, e.drag.start).multiplyScalar(0.5);\n\t\t\t\tlet ray = Utils.mouseToRay(screenCentroid, camera, size.width, size.height);\n\n\t\t\t\tlet line = new Line3(ray.origin, new Vector3().addVectors(ray.origin, ray.direction));\n\n\t\t\t\tthis.removeEventListener(\"drag\", drag);\n\t\t\t\tthis.removeEventListener(\"drop\", drop);\n\n\t\t\t\tlet allPointsNear = [];\n\t\t\t\tlet allPointsFar = [];\n\n\t\t\t\t// TODO support more than one point cloud\n\t\t\t\tfor(let pointcloud of this.viewer.scene.pointclouds){\n\n\t\t\t\t\tif(!pointcloud.visible){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet volCam = camera.clone();\n\t\t\t\t\tvolCam.left = -volume.scale.x / 2; \n\t\t\t\t\tvolCam.right = +volume.scale.x / 2;\n\t\t\t\t\tvolCam.top = +volume.scale.y / 2;\n\t\t\t\t\tvolCam.bottom = -volume.scale.y / 2;\n\t\t\t\t\tvolCam.near = -volume.scale.z / 2;\n\t\t\t\t\tvolCam.far = +volume.scale.z / 2;\n\t\t\t\t\tvolCam.rotation.copy(volume.rotation);\n\t\t\t\t\tvolCam.position.copy(volume.position);\n\n\t\t\t\t\tvolCam.updateMatrix();\n\t\t\t\t\tvolCam.updateMatrixWorld();\n\t\t\t\t\tvolCam.updateProjectionMatrix();\n\t\t\t\t\tvolCam.matrixWorldInverse.copy(volCam.matrixWorld).invert();\n\n\t\t\t\t\tlet ray = new Ray(volCam.getWorldPosition(new Vector3()), volCam.getWorldDirection(new Vector3()));\n\t\t\t\t\tlet rayInverse = new Ray(\n\t\t\t\t\t\tray.origin.clone().add(ray.direction.clone().multiplyScalar(volume.scale.z)),\n\t\t\t\t\t\tray.direction.clone().multiplyScalar(-1));\n\n\t\t\t\t\tlet pickerSettings = {\n\t\t\t\t\t\twidth: 8, \n\t\t\t\t\t\theight: 8, \n\t\t\t\t\t\tpickWindowSize: 8, \n\t\t\t\t\t\tall: true,\n\t\t\t\t\t\tpickClipped: true,\n\t\t\t\t\t\tpointSizeType: PointSizeType.FIXED,\n\t\t\t\t\t\tpointSize: 1};\n\t\t\t\t\tlet pointsNear = pointcloud.pick(viewer, volCam, ray, pickerSettings);\n\n\t\t\t\t\tvolCam.rotateX(Math.PI);\n\t\t\t\t\tvolCam.updateMatrix();\n\t\t\t\t\tvolCam.updateMatrixWorld();\n\t\t\t\t\tvolCam.updateProjectionMatrix();\n\t\t\t\t\tvolCam.matrixWorldInverse.copy(volCam.matrixWorld).invert();\n\t\t\t\t\tlet pointsFar = pointcloud.pick(viewer, volCam, rayInverse, pickerSettings);\n\n\t\t\t\t\tallPointsNear.push(...pointsNear);\n\t\t\t\t\tallPointsFar.push(...pointsFar);\n\t\t\t\t}\n\n\t\t\t\tif(allPointsNear.length > 0 && allPointsFar.length > 0){\n\t\t\t\t\tlet viewLine = new Line3(ray.origin, new Vector3().addVectors(ray.origin, ray.direction));\n\n\t\t\t\t\tlet closestOnLine = allPointsNear.map(p => viewLine.closestPointToPoint(p.position, false, new Vector3()));\n\t\t\t\t\tlet closest = closestOnLine.sort( (a, b) => ray.origin.distanceTo(a) - ray.origin.distanceTo(b))[0];\n\n\t\t\t\t\tlet farthestOnLine = allPointsFar.map(p => viewLine.closestPointToPoint(p.position, false, new Vector3()));\n\t\t\t\t\tlet farthest = farthestOnLine.sort( (a, b) => ray.origin.distanceTo(b) - ray.origin.distanceTo(a))[0];\n\n\t\t\t\t\tlet distance = closest.distanceTo(farthest);\n\t\t\t\t\tlet centroid = new Vector3().addVectors(closest, farthest).multiplyScalar(0.5);\n\t\t\t\t\tvolume.scale.z = distance * 1.1;\n\t\t\t\t\tvolume.position.copy(centroid);\n\t\t\t\t}\n\n\t\t\t\tvolume.clip = true;\n\t\t\t};\n\n\t\t\tthis.addEventListener(\"drag\", drag);\n\t\t\tthis.addEventListener(\"drop\", drop);\n\n\t\t\tviewer.inputHandler.addInputListener(this);\n\n\t\t\treturn volume;\n\t\t}\n\n\t\tupdate(e){\n\t\t\t//console.log(e.delta)\n\t\t}\n\n\t\trender(){\n\t\t\tthis.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t\t}\n\n\t}\n\n\tclass SpotLightHelper$1 extends Object3D{\n\n\t\tconstructor(light, color){\n\t\t\tsuper();\n\n\t\t\tthis.light = light;\n\t\t\tthis.color = color;\n\n\t\t\t//this.up.set(0, 0, 1);\n\t\t\tthis.updateMatrix();\n\t\t\tthis.updateMatrixWorld();\n\n\t\t\t{ // SPHERE\n\t\t\t\tlet sg = new SphereGeometry(1, 32, 32);\n\t\t\t\tlet sm = new MeshNormalMaterial();\n\t\t\t\tthis.sphere = new Mesh(sg, sm);\n\t\t\t\tthis.sphere.scale.set(0.5, 0.5, 0.5);\n\t\t\t\tthis.add(this.sphere);\n\t\t\t}\n\n\t\t\t{ // LINES\n\t\t\t\t\n\n\t\t\t\tlet positions = new Float32Array([\n\t\t\t\t\t+0, +0, +0,     +0, +0, -1,\n\n\t\t\t\t\t+0, +0, +0,     -1, -1, -1,\n\t\t\t\t\t+0, +0, +0,     +1, -1, -1,\n\t\t\t\t\t+0, +0, +0,     +1, +1, -1,\n\t\t\t\t\t+0, +0, +0,     -1, +1, -1,\n\n\t\t\t\t\t-1, -1, -1,     +1, -1, -1,\n\t\t\t\t\t+1, -1, -1,     +1, +1, -1,\n\t\t\t\t\t+1, +1, -1,     -1, +1, -1,\n\t\t\t\t\t-1, +1, -1,     -1, -1, -1,\n\t\t\t\t]);\n\n\t\t\t\tlet geometry = new BufferGeometry();\n\t\t\t\tgeometry.setAttribute(\"position\", new BufferAttribute(positions, 3));\n\n\t\t\t\tlet material = new LineBasicMaterial();\n\n\t\t\t\tthis.frustum = new LineSegments(geometry, material);\n\t\t\t\tthis.add(this.frustum);\n\n\t\t\t}\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\n\t\t\tthis.light.updateMatrix();\n\t\t\tthis.light.updateMatrixWorld();\n\n\t\t\tlet position = this.light.position;\n\t\t\tlet target = new Vector3().addVectors(\n\t\t\t\tthis.light.position, this.light.getWorldDirection(new Vector3()).multiplyScalar(-1));\n\t\t\t\n\t\t\tlet quat = new Quaternion().setFromRotationMatrix(\n\t\t\t\tnew Matrix4().lookAt( position, target, new Vector3( 0, 0, 1 ) )\n\t\t\t);\n\n\t\t\tthis.setRotationFromQuaternion(quat);\n\t\t\tthis.position.copy(position);\n\n\n\t\t\tlet coneLength = (this.light.distance > 0) ? this.light.distance : 1000;\n\t\t\tlet coneWidth = coneLength * Math.tan( this.light.angle * 0.5 );\n\n\t\t\tthis.frustum.scale.set(coneWidth, coneWidth, coneLength);\n\n\t\t}\n\n\t}\n\n\tclass TransformationTool {\n\t\tconstructor(viewer) {\n\t\t\tthis.viewer = viewer;\n\n\t\t\tthis.scene = new Scene();\n\n\t\t\tthis.selection = [];\n\t\t\tthis.pivot = new Vector3();\n\t\t\tthis.dragging = false;\n\t\t\tthis.showPickVolumes = false;\n\n\t\t\tthis.viewer.inputHandler.registerInteractiveScene(this.scene);\n\t\t\tthis.viewer.inputHandler.addEventListener('selection_changed', (e) => {\n\t\t\t\tfor(let selected of this.selection){\n\t\t\t\t\tthis.viewer.inputHandler.blacklist.delete(selected);\n\t\t\t\t}\n\n\t\t\t\tthis.selection = e.selection;\n\n\t\t\t\tfor(let selected of this.selection){\n\t\t\t\t\tthis.viewer.inputHandler.blacklist.add(selected);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\tlet red = 0xE73100;\n\t\t\tlet green = 0x44A24A;\n\t\t\tlet blue = 0x2669E7;\n\t\t\t\n\t\t\tthis.activeHandle = null;\n\t\t\tthis.scaleHandles = {\n\t\t\t\t\"scale.x+\": {name: \"scale.x+\", node: new Object3D(), color: red, alignment: [+1, +0, +0]},\n\t\t\t\t\"scale.x-\": {name: \"scale.x-\", node: new Object3D(), color: red, alignment: [-1, +0, +0]},\n\t\t\t\t\"scale.y+\": {name: \"scale.y+\", node: new Object3D(), color: green, alignment: [+0, +1, +0]},\n\t\t\t\t\"scale.y-\": {name: \"scale.y-\", node: new Object3D(), color: green, alignment: [+0, -1, +0]},\n\t\t\t\t\"scale.z+\": {name: \"scale.z+\", node: new Object3D(), color: blue, alignment: [+0, +0, +1]},\n\t\t\t\t\"scale.z-\": {name: \"scale.z-\", node: new Object3D(), color: blue, alignment: [+0, +0, -1]},\n\t\t\t};\n\t\t\tthis.focusHandles = {\n\t\t\t\t\"focus.x+\": {name: \"focus.x+\", node:  new Object3D(), color: red, alignment: [+1, +0, +0]},\n\t\t\t\t\"focus.x-\": {name: \"focus.x-\", node:  new Object3D(), color: red, alignment: [-1, +0, +0]},\n\t\t\t\t\"focus.y+\": {name: \"focus.y+\", node:  new Object3D(), color: green, alignment: [+0, +1, +0]},\n\t\t\t\t\"focus.y-\": {name: \"focus.y-\", node:  new Object3D(), color: green, alignment: [+0, -1, +0]},\n\t\t\t\t\"focus.z+\": {name: \"focus.z+\", node:  new Object3D(), color: blue, alignment: [+0, +0, +1]},\n\t\t\t\t\"focus.z-\": {name: \"focus.z-\", node:  new Object3D(), color: blue, alignment: [+0, +0, -1]},\n\t\t\t};\n\t\t\tthis.translationHandles = {\n\t\t\t\t\"translation.x\": {name: \"translation.x\", node:  new Object3D(), color: red, alignment: [1, 0, 0]},\n\t\t\t\t\"translation.y\": {name: \"translation.y\", node:  new Object3D(), color: green, alignment: [0, 1, 0]},\n\t\t\t\t\"translation.z\": {name: \"translation.z\", node:  new Object3D(), color: blue, alignment: [0, 0, 1]},\n\t\t\t};\n\t\t\tthis.rotationHandles = {\n\t\t\t\t\"rotation.x\": {name: \"rotation.x\", node:  new Object3D(), color: red, alignment: [1, 0, 0]},\n\t\t\t\t\"rotation.y\": {name: \"rotation.y\", node:  new Object3D(), color: green, alignment: [0, 1, 0]},\n\t\t\t\t\"rotation.z\": {name: \"rotation.z\", node:  new Object3D(), color: blue, alignment: [0, 0, 1]},\n\t\t\t};\n\t\t\tthis.handles = Object.assign({}, this.scaleHandles, this.focusHandles, this.translationHandles, this.rotationHandles);\n\t\t\tthis.pickVolumes = [];\n\n\t\t\tthis.initializeScaleHandles();\n\t\t\tthis.initializeFocusHandles();\n\t\t\tthis.initializeTranslationHandles();\n\t\t\tthis.initializeRotationHandles();\n\n\n\t\t\tlet boxFrameGeometry = new Geometry();\n\t\t\t{\n\t\t\t\t// bottom\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5));\n\t\t\t\t// top\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5));\n\t\t\t\t// sides\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5));\n\t\t\t\tboxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5));\n\t\t\t}\n\t\t\tthis.frame = new LineSegments(boxFrameGeometry, new LineBasicMaterial({color: 0xffff00}));\n\t\t\tthis.scene.add(this.frame);\n\n\t\t\t\n\t\t}\n\n\t\tinitializeScaleHandles(){\n\t\t\tlet sgSphere = new SphereGeometry(1, 32, 32);\n\t\t\tlet sgLowPolySphere = new SphereGeometry(1, 16, 16);\n\n\t\t\tfor(let handleName of Object.keys(this.scaleHandles)){\n\t\t\t\tlet handle = this.scaleHandles[handleName];\n\t\t\t\tlet node = handle.node;\n\t\t\t\tthis.scene.add(node);\n\t\t\t\tnode.position.set(...handle.alignment).multiplyScalar(0.5);\n\n\t\t\t\tlet material = new MeshBasicMaterial({\n\t\t\t\t\tcolor: handle.color,\n\t\t\t\t\topacity: 0.4,\n\t\t\t\t\ttransparent: true\n\t\t\t\t\t});\n\n\t\t\t\tlet outlineMaterial = new MeshBasicMaterial({\n\t\t\t\t\tcolor: 0x000000, \n\t\t\t\t\tside: BackSide,\n\t\t\t\t\topacity: 0.4,\n\t\t\t\t\ttransparent: true});\n\n\t\t\t\tlet pickMaterial = new MeshNormalMaterial({\n\t\t\t\t\topacity: 0.2,\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\tvisible: this.showPickVolumes});\n\n\t\t\t\tlet sphere = new Mesh(sgSphere, material);\n\t\t\t\tsphere.scale.set(1.3, 1.3, 1.3);\n\t\t\t\tsphere.name = `${handleName}.handle`;\n\t\t\t\tnode.add(sphere);\n\t\t\t\t\n\t\t\t\tlet outline = new Mesh(sgSphere, outlineMaterial);\n\t\t\t\toutline.scale.set(1.4, 1.4, 1.4);\n\t\t\t\toutline.name = `${handleName}.outline`;\n\t\t\t\tsphere.add(outline);\n\n\t\t\t\tlet pickSphere = new Mesh(sgLowPolySphere, pickMaterial);\n\t\t\t\tpickSphere.name = `${handleName}.pick_volume`;\n\t\t\t\tpickSphere.scale.set(3, 3, 3);\n\t\t\t\tsphere.add(pickSphere);\n\t\t\t\tpickSphere.handle = handleName;\n\t\t\t\tthis.pickVolumes.push(pickSphere);\n\n\t\t\t\tnode.setOpacity = (target) => {\n\t\t\t\t\tlet opacity = {x: material.opacity};\n\t\t\t\t\tlet t = new TWEEN.Tween(opacity).to({x: target}, 100);\n\t\t\t\t\tt.onUpdate(() => {\n\t\t\t\t\t\tsphere.visible = opacity.x > 0;\n\t\t\t\t\t\tpickSphere.visible = opacity.x > 0;\n\t\t\t\t\t\tmaterial.opacity = opacity.x;\n\t\t\t\t\t\toutlineMaterial.opacity = opacity.x;\n\t\t\t\t\t\tpickSphere.material.opacity = opacity.x * 0.5;\n\t\t\t\t\t});\n\t\t\t\t\tt.start();\n\t\t\t\t};\n\n\t\t\t\tpickSphere.addEventListener(\"drag\", (e) => this.dragScaleHandle(e));\n\t\t\t\tpickSphere.addEventListener(\"drop\", (e) => this.dropScaleHandle(e));\n\n\t\t\t\tpickSphere.addEventListener(\"mouseover\", e => {\n\t\t\t\t\t//node.setOpacity(1);\n\t\t\t\t});\n\n\t\t\t\tpickSphere.addEventListener(\"click\", e => {\n\t\t\t\t\te.consume();\n\t\t\t\t});\n\n\t\t\t\tpickSphere.addEventListener(\"mouseleave\", e => {\n\t\t\t\t\t//node.setOpacity(0.4);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tinitializeFocusHandles(){\n\t\t\t//let sgBox = new THREE.BoxGeometry(1, 1, 1);\n\t\t\tlet sgPlane = new PlaneGeometry(4, 4, 1, 1);\n\t\t\tlet sgLowPolySphere = new SphereGeometry(1, 16, 16);\n\n\t\t\tlet texture = new TextureLoader().load(`${exports.resourcePath}/icons/eye_2.png`);\n\n\t\t\tfor(let handleName of Object.keys(this.focusHandles)){\n\t\t\t\tlet handle = this.focusHandles[handleName];\n\t\t\t\tlet node = handle.node;\n\t\t\t\tthis.scene.add(node);\n\t\t\t\tlet align = handle.alignment;\n\n\t\t\t\t//node.lookAt(new THREE.Vector3().addVectors(node.position, new THREE.Vector3(...align)));\n\t\t\t\tnode.lookAt(new Vector3(...align));\n\n\t\t\t\tlet off = 0.8;\n\t\t\t\tif(align[0] === 1){\n\t\t\t\t\tnode.position.set(1, off, -off).multiplyScalar(0.5);\n\t\t\t\t\tnode.rotation.z = Math.PI / 2;\n\t\t\t\t}else if(align[0] === -1){\n\t\t\t\t\tnode.position.set(-1, -off, -off).multiplyScalar(0.5);\n\t\t\t\t\tnode.rotation.z = Math.PI / 2;\n\t\t\t\t}else if(align[1] === 1){\n\t\t\t\t\tnode.position.set(-off, 1, -off).multiplyScalar(0.5);\n\t\t\t\t\tnode.rotation.set(Math.PI / 2, Math.PI, 0.0);\n\t\t\t\t}else if(align[1] === -1){\n\t\t\t\t\tnode.position.set(off, -1, -off).multiplyScalar(0.5);\n\t\t\t\t\tnode.rotation.set(Math.PI / 2, 0.0, 0.0);\n\t\t\t\t}else if(align[2] === 1){\n\t\t\t\t\tnode.position.set(off, off, 1).multiplyScalar(0.5);\n\t\t\t\t}else if(align[2] === -1){\n\t\t\t\t\tnode.position.set(-off, off, -1).multiplyScalar(0.5);\n\t\t\t\t}\n\n\t\t\t\tlet material = new MeshBasicMaterial({\n\t\t\t\t\tcolor: handle.color,\n\t\t\t\t\topacity: 0,\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\tmap: texture\n\t\t\t\t});\n\n\t\t\t\t//let outlineMaterial = new THREE.MeshBasicMaterial({\n\t\t\t\t//\tcolor: 0x000000, \n\t\t\t\t//\tside: THREE.BackSide,\n\t\t\t\t//\topacity: 0,\n\t\t\t\t//\ttransparent: true});\n\n\t\t\t\tlet pickMaterial = new MeshNormalMaterial({\n\t\t\t\t\t//opacity: 0,\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\tvisible: this.showPickVolumes});\n\n\t\t\t\tlet box = new Mesh(sgPlane, material);\n\t\t\t\tbox.name = `${handleName}.handle`;\n\t\t\t\tbox.scale.set(1.5, 1.5, 1.5);\n\t\t\t\tbox.position.set(0, 0, 0);\n\t\t\t\tbox.visible = false;\n\t\t\t\tnode.add(box);\n\t\t\t\t//handle.focusNode = box;\n\t\t\t\t\n\t\t\t\t//let outline = new THREE.Mesh(sgPlane, outlineMaterial);\n\t\t\t\t//outline.scale.set(1.4, 1.4, 1.4);\n\t\t\t\t//outline.name = `${handleName}.outline`;\n\t\t\t\t//box.add(outline);\n\n\t\t\t\tlet pickSphere = new Mesh(sgLowPolySphere, pickMaterial);\n\t\t\t\tpickSphere.name = `${handleName}.pick_volume`;\n\t\t\t\tpickSphere.scale.set(3, 3, 3);\n\t\t\t\tbox.add(pickSphere);\n\t\t\t\tpickSphere.handle = handleName;\n\t\t\t\tthis.pickVolumes.push(pickSphere);\n\n\t\t\t\tnode.setOpacity = (target) => {\n\t\t\t\t\tlet opacity = {x: material.opacity};\n\t\t\t\t\tlet t = new TWEEN.Tween(opacity).to({x: target}, 100);\n\t\t\t\t\tt.onUpdate(() => {\n\t\t\t\t\t\tpickSphere.visible = opacity.x > 0;\n\t\t\t\t\t\tbox.visible = opacity.x > 0;\n\t\t\t\t\t\tmaterial.opacity = opacity.x;\n\t\t\t\t\t\t//outlineMaterial.opacity = opacity.x;\n\t\t\t\t\t\tpickSphere.material.opacity = opacity.x * 0.5;\n\t\t\t\t\t});\n\t\t\t\t\tt.start();\n\t\t\t\t};\n\n\t\t\t\tpickSphere.addEventListener(\"drag\", e => {});\n\n\t\t\t\tpickSphere.addEventListener(\"mouseup\", e => {\n\t\t\t\t\te.consume();\n\t\t\t\t});\n\n\t\t\t\tpickSphere.addEventListener(\"mousedown\", e => {\n\t\t\t\t\te.consume();\n\t\t\t\t});\n\n\t\t\t\tpickSphere.addEventListener(\"click\", e => {\n\t\t\t\t\te.consume();\n\n\t\t\t\t\tlet selected = this.selection[0];\n\t\t\t\t\tlet maxScale = Math.max(...selected.scale.toArray());\n\t\t\t\t\tlet minScale = Math.min(...selected.scale.toArray());\n\t\t\t\t\tlet handleLength = Math.abs(selected.scale.dot(new Vector3(...handle.alignment)));\n\t\t\t\t\tlet alignment = new Vector3(...handle.alignment).multiplyScalar(2 * maxScale / handleLength);\n\t\t\t\t\talignment.applyMatrix4(selected.matrixWorld);\n\t\t\t\t\tlet newCamPos = alignment;\n\t\t\t\t\tlet newCamTarget = selected.getWorldPosition(new Vector3());\n\n\t\t\t\t\tUtils.moveTo(this.viewer.scene, newCamPos, newCamTarget);\n\t\t\t\t});\n\n\t\t\t\tpickSphere.addEventListener(\"mouseover\", e => {\n\t\t\t\t\t//box.setOpacity(1);\n\t\t\t\t});\n\n\t\t\t\tpickSphere.addEventListener(\"mouseleave\", e => {\n\t\t\t\t\t//box.setOpacity(0.4);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tinitializeTranslationHandles(){\n\t\t\tlet boxGeometry = new BoxGeometry(1, 1, 1);\n\n\t\t\tfor(let handleName of Object.keys(this.translationHandles)){\n\t\t\t\tlet handle = this.handles[handleName];\n\t\t\t\tlet node = handle.node;\n\t\t\t\tthis.scene.add(node);\n\n\t\t\t\tlet material = new MeshBasicMaterial({\n\t\t\t\t\tcolor: handle.color,\n\t\t\t\t\topacity: 0.4,\n\t\t\t\t\ttransparent: true});\n\n\t\t\t\tlet outlineMaterial = new MeshBasicMaterial({\n\t\t\t\t\tcolor: 0x000000, \n\t\t\t\t\tside: BackSide,\n\t\t\t\t\topacity: 0.4,\n\t\t\t\t\ttransparent: true});\n\n\t\t\t\tlet pickMaterial = new MeshNormalMaterial({\n\t\t\t\t\topacity: 0.2,\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\tvisible: this.showPickVolumes\n\t\t\t\t});\n\n\t\t\t\tlet box = new Mesh(boxGeometry, material);\n\t\t\t\tbox.name = `${handleName}.handle`;\n\t\t\t\tbox.scale.set(0.2, 0.2, 40);\n\t\t\t\tbox.lookAt(new Vector3(...handle.alignment));\n\t\t\t\tbox.renderOrder = 10;\n\t\t\t\tnode.add(box);\n\t\t\t\thandle.translateNode = box;\n\n\t\t\t\tlet outline = new Mesh(boxGeometry, outlineMaterial);\n\t\t\t\toutline.name = `${handleName}.outline`;\n\t\t\t\toutline.scale.set(3, 3, 1.03);\n\t\t\t\toutline.renderOrder = 0;\n\t\t\t\tbox.add(outline);\n\n\t\t\t\tlet pickVolume = new Mesh(boxGeometry, pickMaterial);\n\t\t\t\tpickVolume.name = `${handleName}.pick_volume`;\n\t\t\t\tpickVolume.scale.set(12, 12, 1.1);\n\t\t\t\tpickVolume.handle = handleName;\n\t\t\t\tbox.add(pickVolume);\n\t\t\t\tthis.pickVolumes.push(pickVolume);\n\n\t\t\t\tnode.setOpacity = (target) => {\n\t\t\t\t\tlet opacity = {x: material.opacity};\n\t\t\t\t\tlet t = new TWEEN.Tween(opacity).to({x: target}, 100);\n\t\t\t\t\tt.onUpdate(() => {\n\t\t\t\t\t\tbox.visible = opacity.x > 0;\n\t\t\t\t\t\tpickVolume.visible = opacity.x > 0;\n\t\t\t\t\t\tmaterial.opacity = opacity.x;\n\t\t\t\t\t\toutlineMaterial.opacity = opacity.x;\n\t\t\t\t\t\tpickMaterial.opacity = opacity.x * 0.5;\n\t\t\t\t\t});\n\t\t\t\t\tt.start();\n\t\t\t\t};\n\n\t\t\t\tpickVolume.addEventListener(\"drag\", (e) => {this.dragTranslationHandle(e);});\n\t\t\t\tpickVolume.addEventListener(\"drop\", (e) => {this.dropTranslationHandle(e);});\n\t\t\t}\n\t\t}\n\n\t\tinitializeRotationHandles(){\n\t\t\tlet adjust = 0.5;\n\t\t\tlet torusGeometry = new TorusGeometry(1, adjust * 0.015, 8, 64, Math.PI / 2);\n\t\t\tlet outlineGeometry = new TorusGeometry(1, adjust * 0.04, 8, 64, Math.PI / 2);\n\t\t\tlet pickGeometry = new TorusGeometry(1, adjust * 0.1, 6, 4, Math.PI / 2);\n\n\t\t\tfor(let handleName of Object.keys(this.rotationHandles)){\n\t\t\t\tlet handle = this.handles[handleName];\n\t\t\t\tlet node = handle.node;\n\t\t\t\tthis.scene.add(node);\n\n\t\t\t\tlet material = new MeshBasicMaterial({\n\t\t\t\t\tcolor: handle.color,\n\t\t\t\t\topacity: 0.4,\n\t\t\t\t\ttransparent: true});\n\n\t\t\t\tlet outlineMaterial = new MeshBasicMaterial({\n\t\t\t\t\tcolor: 0x000000, \n\t\t\t\t\tside: BackSide,\n\t\t\t\t\topacity: 0.4,\n\t\t\t\t\ttransparent: true});\n\n\t\t\t\tlet pickMaterial = new MeshNormalMaterial({\n\t\t\t\t\topacity: 0.2,\n\t\t\t\t\ttransparent: true,\n\t\t\t\t\tvisible: this.showPickVolumes\n\t\t\t\t});\n\n\t\t\t\tlet box = new Mesh(torusGeometry, material);\n\t\t\t\tbox.name = `${handleName}.handle`;\n\t\t\t\tbox.scale.set(20, 20, 20);\n\t\t\t\tbox.lookAt(new Vector3(...handle.alignment));\n\t\t\t\tnode.add(box);\n\t\t\t\thandle.translateNode = box;\n\n\t\t\t\tlet outline = new Mesh(outlineGeometry, outlineMaterial);\n\t\t\t\toutline.name = `${handleName}.outline`;\n\t\t\t\toutline.scale.set(1, 1, 1);\n\t\t\t\toutline.renderOrder = 0;\n\t\t\t\tbox.add(outline);\n\n\t\t\t\tlet pickVolume = new Mesh(pickGeometry, pickMaterial);\n\t\t\t\tpickVolume.name = `${handleName}.pick_volume`;\n\t\t\t\tpickVolume.scale.set(1, 1, 1);\n\t\t\t\tpickVolume.handle = handleName;\n\t\t\t\tbox.add(pickVolume);\n\t\t\t\tthis.pickVolumes.push(pickVolume);\n\n\t\t\t\tnode.setOpacity = (target) => {\n\t\t\t\t\tlet opacity = {x: material.opacity};\n\t\t\t\t\tlet t = new TWEEN.Tween(opacity).to({x: target}, 100);\n\t\t\t\t\tt.onUpdate(() => {\n\t\t\t\t\t\tbox.visible = opacity.x > 0;\n\t\t\t\t\t\tpickVolume.visible = opacity.x > 0;\n\t\t\t\t\t\tmaterial.opacity = opacity.x;\n\t\t\t\t\t\toutlineMaterial.opacity = opacity.x;\n\t\t\t\t\t\tpickMaterial.opacity = opacity.x * 0.5;\n\t\t\t\t\t});\n\t\t\t\t\tt.start();\n\t\t\t\t};\n\n\n\t\t\t\t//pickVolume.addEventListener(\"mouseover\", (e) => {\n\t\t\t\t//\t//let a = this.viewer.scene.getActiveCamera().getWorldDirection(new THREE.Vector3()).dot(pickVolume.getWorldDirection(new THREE.Vector3()));\n\t\t\t\t//\tconsole.log(pickVolume.getWorldDirection(new THREE.Vector3()));\n\t\t\t\t//});\n\t\t\t\t\n\t\t\t\tpickVolume.addEventListener(\"drag\", (e) => {this.dragRotationHandle(e);});\n\t\t\t\tpickVolume.addEventListener(\"drop\", (e) => {this.dropRotationHandle(e);});\n\t\t\t}\n\t\t}\n\n\t\tdragRotationHandle(e){\n\t\t\tlet drag = e.drag;\n\t\t\tlet handle = this.activeHandle;\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\n\t\t\tif(!handle){\n\t\t\t\treturn\n\t\t\t};\n\n\t\t\tlet localNormal = new Vector3(...handle.alignment);\n\t\t\tlet n = new Vector3();\n\t\t\tn.copy(new Vector4(...localNormal.toArray(), 0).applyMatrix4(handle.node.matrixWorld));\n\t\t\tn.normalize();\n\n\t\t\tif (!drag.intersectionStart){\n\n\t\t\t\t//this.viewer.scene.scene.remove(this.debug);\n\t\t\t\t//this.debug = new THREE.Object3D();\n\t\t\t\t//this.viewer.scene.scene.add(this.debug);\n\t\t\t\t//Utils.debugSphere(this.debug, drag.location, 3, 0xaaaaaa);\n\t\t\t\t//let debugEnd = drag.location.clone().add(n.clone().multiplyScalar(20));\n\t\t\t\t//Utils.debugLine(this.debug, drag.location, debugEnd, 0xff0000);\n\n\t\t\t\tdrag.intersectionStart = drag.location;\n\t\t\t\tdrag.objectStart = drag.object.getWorldPosition(new Vector3());\n\t\t\t\tdrag.handle = handle;\n\n\t\t\t\tlet plane = new Plane().setFromNormalAndCoplanarPoint(n, drag.intersectionStart);\n\n\t\t\t\tdrag.dragPlane = plane;\n\t\t\t\tdrag.pivot = drag.intersectionStart;\n\t\t\t}else {\n\t\t\t\thandle = drag.handle;\n\t\t\t}\n\n\t\t\tthis.dragging = true;\n\n\t\t\tlet mouse = drag.end;\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\t\t\t\n\t\t\tlet I = ray.intersectPlane(drag.dragPlane, new Vector3());\n\n\t\t\tif (I) {\n\t\t\t\tlet center = this.scene.getWorldPosition(new Vector3());\n\t\t\t\tlet from = drag.pivot;\n\t\t\t\tlet to = I;\n\n\t\t\t\tlet v1 = from.clone().sub(center).normalize();\n\t\t\t\tlet v2 = to.clone().sub(center).normalize();\n\n\t\t\t\tlet angle = Math.acos(v1.dot(v2));\n\t\t\t\tlet sign = Math.sign(v1.cross(v2).dot(n));\n\t\t\t\tangle = angle * sign;\n\t\t\t\tif (Number.isNaN(angle)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet normal = new Vector3(...handle.alignment);\n\t\t\t\tfor (let selection of this.selection) {\n\t\t\t\t\tselection.rotateOnAxis(normal, angle);\n\t\t\t\t\tselection.dispatchEvent({\n\t\t\t\t\t\ttype: \"orientation_changed\",\n\t\t\t\t\t\tobject: selection\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tdrag.pivot = I;\n\t\t\t}\n\t\t}\n\n\t\tdropRotationHandle(e){\n\t\t\tthis.dragging = false;\n\t\t\tthis.setActiveHandle(null);\n\t\t}\n\n\t\tdragTranslationHandle(e){\n\t\t\tlet drag = e.drag;\n\t\t\tlet handle = this.activeHandle;\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\t\t\n\t\t\tif(!drag.intersectionStart && handle){\n\t\t\t\tdrag.intersectionStart = drag.location;\n\t\t\t\tdrag.objectStart = drag.object.getWorldPosition(new Vector3());\n\n\t\t\t\tlet start = drag.intersectionStart;\n\t\t\t\tlet dir = new Vector4(...handle.alignment, 0).applyMatrix4(this.scene.matrixWorld);\n\t\t\t\tlet end = new Vector3().addVectors(start, dir);\n\t\t\t\tlet line = new Line3(start.clone(), end.clone());\n\t\t\t\tdrag.line = line;\n\n\t\t\t\tlet camOnLine = line.closestPointToPoint(camera.position, false, new Vector3());\n\t\t\t\tlet normal = new Vector3().subVectors(camera.position, camOnLine);\n\t\t\t\tlet plane = new Plane().setFromNormalAndCoplanarPoint(normal, drag.intersectionStart);\n\t\t\t\tdrag.dragPlane = plane;\n\t\t\t\tdrag.pivot = drag.intersectionStart;\n\t\t\t}else {\n\t\t\t\thandle = drag.handle;\n\t\t\t}\n\n\t\t\tthis.dragging = true;\n\n\t\t\t{\n\t\t\t\tlet mouse = drag.end;\n\t\t\t\tlet domElement = this.viewer.renderer.domElement;\n\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\t\t\t\tlet I = ray.intersectPlane(drag.dragPlane, new Vector3());\n\n\t\t\t\tif (I) {\n\t\t\t\t\tlet iOnLine = drag.line.closestPointToPoint(I, false, new Vector3());\n\n\t\t\t\t\tlet diff = new Vector3().subVectors(iOnLine, drag.pivot);\n\n\t\t\t\t\tfor (let selection of this.selection) {\n\t\t\t\t\t\tselection.position.add(diff);\n\t\t\t\t\t\tselection.dispatchEvent({\n\t\t\t\t\t\t\ttype: \"position_changed\",\n\t\t\t\t\t\t\tobject: selection\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdrag.pivot = drag.pivot.add(diff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdropTranslationHandle(e){\n\t\t\tthis.dragging = false;\n\t\t\tthis.setActiveHandle(null);\n\t\t}\n\n\t\tdropScaleHandle(e){\n\t\t\tthis.dragging = false;\n\t\t\tthis.setActiveHandle(null);\n\t\t}\n\n\t\tdragScaleHandle(e){\n\t\t\tlet drag = e.drag;\n\t\t\tlet handle = this.activeHandle;\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\n\t\t\tif(!drag.intersectionStart){\n\t\t\t\tdrag.intersectionStart = drag.location;\n\t\t\t\tdrag.objectStart = drag.object.getWorldPosition(new Vector3());\n\t\t\t\tdrag.handle = handle;\n\n\t\t\t\tlet start = drag.intersectionStart;\n\t\t\t\tlet dir = new Vector4(...handle.alignment, 0).applyMatrix4(this.scene.matrixWorld);\n\t\t\t\tlet end = new Vector3().addVectors(start, dir);\n\t\t\t\tlet line = new Line3(start.clone(), end.clone());\n\t\t\t\tdrag.line = line;\n\n\t\t\t\tlet camOnLine = line.closestPointToPoint(camera.position, false, new Vector3());\n\t\t\t\tlet normal = new Vector3().subVectors(camera.position, camOnLine);\n\t\t\t\tlet plane = new Plane().setFromNormalAndCoplanarPoint(normal, drag.intersectionStart);\n\t\t\t\tdrag.dragPlane = plane;\n\t\t\t\tdrag.pivot = drag.intersectionStart;\n\n\t\t\t\t//Utils.debugSphere(viewer.scene.scene, drag.pivot, 0.05);\n\t\t\t}else {\n\t\t\t\thandle = drag.handle;\n\t\t\t}\n\n\t\t\tthis.dragging = true;\n\n\t\t\t{\n\t\t\t\tlet mouse = drag.end;\n\t\t\t\tlet domElement = this.viewer.renderer.domElement;\n\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\t\t\t\tlet I = ray.intersectPlane(drag.dragPlane, new Vector3());\n\n\t\t\t\tif (I) {\n\t\t\t\t\tlet iOnLine = drag.line.closestPointToPoint(I, false, new Vector3());\n\t\t\t\t\tlet direction = handle.alignment.reduce( (a, v) => a + v, 0);\n\n\t\t\t\t\tlet toObjectSpace = this.selection[0].matrixWorld.clone().invert();\n\t\t\t\t\tlet iOnLineOS = iOnLine.clone().applyMatrix4(toObjectSpace);\n\t\t\t\t\tlet pivotOS = drag.pivot.clone().applyMatrix4(toObjectSpace);\n\t\t\t\t\tlet diffOS = new Vector3().subVectors(iOnLineOS, pivotOS);\n\t\t\t\t\tlet dragDirectionOS = diffOS.clone().normalize();\n\t\t\t\t\tif(iOnLine.distanceTo(drag.pivot) === 0){\n\t\t\t\t\t\tdragDirectionOS.set(0, 0, 0);\n\t\t\t\t\t}\n\t\t\t\t\tlet dragDirection = dragDirectionOS.dot(new Vector3(...handle.alignment));\n\n\t\t\t\t\tlet diff = new Vector3().subVectors(iOnLine, drag.pivot);\n\t\t\t\t\tlet diffScale = new Vector3(...handle.alignment).multiplyScalar(diff.length() * direction * dragDirection);\n\t\t\t\t\tlet diffPosition = diff.clone().multiplyScalar(0.5);\n\n\t\t\t\t\tfor (let selection of this.selection) {\n\t\t\t\t\t\tselection.scale.add(diffScale);\n\t\t\t\t\t\tselection.scale.x = Math.max(0.1, selection.scale.x);\n\t\t\t\t\t\tselection.scale.y = Math.max(0.1, selection.scale.y);\n\t\t\t\t\t\tselection.scale.z = Math.max(0.1, selection.scale.z);\n\t\t\t\t\t\tselection.position.add(diffPosition);\n\t\t\t\t\t\tselection.dispatchEvent({\n\t\t\t\t\t\t\ttype: \"position_changed\",\n\t\t\t\t\t\t\tobject: selection\n\t\t\t\t\t\t});\n\t\t\t\t\t\tselection.dispatchEvent({\n\t\t\t\t\t\t\ttype: \"scale_changed\",\n\t\t\t\t\t\t\tobject: selection\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tdrag.pivot.copy(iOnLine);\n\t\t\t\t\t//Utils.debugSphere(viewer.scene.scene, drag.pivot, 0.05);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsetActiveHandle(handle){\n\t\t\tif(this.dragging){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(this.activeHandle === handle){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.activeHandle = handle;\n\n\t\t\tif(handle === null){\n\t\t\t\tfor(let handleName of Object.keys(this.handles)){\n\t\t\t\t\tlet handle = this.handles[handleName];\n\t\t\t\t\thandle.node.setOpacity(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(let handleName of Object.keys(this.focusHandles)){\n\t\t\t\tlet handle = this.focusHandles[handleName];\n\n\t\t\t\tif(this.activeHandle === handle){\n\t\t\t\t\thandle.node.setOpacity(1.0);\n\t\t\t\t}else {\n\t\t\t\t\thandle.node.setOpacity(0.4);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(let handleName of Object.keys(this.translationHandles)){\n\t\t\t\tlet handle = this.translationHandles[handleName];\n\n\t\t\t\tif(this.activeHandle === handle){\n\t\t\t\t\thandle.node.setOpacity(1.0);\n\t\t\t\t}else {\n\t\t\t\t\thandle.node.setOpacity(0.4);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor(let handleName of Object.keys(this.rotationHandles)){\n\t\t\t\tlet handle = this.rotationHandles[handleName];\n\n\t\t\t\t//if(this.activeHandle === handle){\n\t\t\t\t//\thandle.node.setOpacity(1.0);\n\t\t\t\t//}else{\n\t\t\t\t//\thandle.node.setOpacity(0.4)\n\t\t\t\t//}\n\n\t\t\t\thandle.node.setOpacity(0.4);\n\t\t\t}\n\n\t\t\tfor(let handleName of Object.keys(this.scaleHandles)){\n\t\t\t\tlet handle = this.scaleHandles[handleName];\n\n\t\t\t\tif(this.activeHandle === handle){\n\t\t\t\t\thandle.node.setOpacity(1.0);\n\n\t\t\t\t\tlet relatedFocusHandle = this.focusHandles[handle.name.replace(\"scale\", \"focus\")];\n\t\t\t\t\tlet relatedFocusNode = relatedFocusHandle.node;\n\t\t\t\t\trelatedFocusNode.setOpacity(0.4);\n\n\t\t\t\t\tfor(let translationHandleName of Object.keys(this.translationHandles)){\n\t\t\t\t\t\tlet translationHandle = this.translationHandles[translationHandleName];\n\t\t\t\t\t\ttranslationHandle.node.setOpacity(0.4);\n\t\t\t\t\t}\n\n\t\t\t\t\t//let relatedTranslationHandle = this.translationHandles[\n\t\t\t\t\t//\thandle.name.replace(\"scale\", \"translation\").replace(/[+-]/g, \"\")];\n\t\t\t\t\t//let relatedTranslationNode = relatedTranslationHandle.node;\n\t\t\t\t\t//relatedTranslationNode.setOpacity(0.4);\n\n\n\t\t\t\t}else {\n\t\t\t\t\thandle.node.setOpacity(0.4);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\n\n\n\t\t\tif(handle){\n\t\t\t\thandle.node.setOpacity(1.0);\n\t\t\t}\n\n\t\t\t\n\t\t}\n\n\t\tupdate () {\n\n\t\t\tif(this.selection.length === 1){\n\n\t\t\t\tthis.scene.visible = true;\n\n\t\t\t\tthis.scene.updateMatrix();\n\t\t\t\tthis.scene.updateMatrixWorld();\n\n\t\t\t\tlet selected = this.selection[0];\n\t\t\t\tlet world = selected.matrixWorld;\n\t\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\t\tlet domElement = this.viewer.renderer.domElement;\n\t\t\t\tlet mouse = this.viewer.inputHandler.mouse;\n\n\t\t\t\tlet center = selected.boundingBox.getCenter(new Vector3()).clone().applyMatrix4(selected.matrixWorld);\n\n\t\t\t\tthis.scene.scale.copy(selected.boundingBox.getSize(new Vector3()).multiply(selected.scale));\n\t\t\t\tthis.scene.position.copy(center);\n\t\t\t\tthis.scene.rotation.copy(selected.rotation);\n\n\t\t\t\tthis.scene.updateMatrixWorld();\n\n\t\t\t\t{\n\t\t\t\t\t// adjust scale of components\n\t\t\t\t\tfor(let handleName of Object.keys(this.handles)){\n\t\t\t\t\t\tlet handle = this.handles[handleName];\n\t\t\t\t\t\tlet node = handle.node;\n\n\t\t\t\t\t\tlet handlePos = node.getWorldPosition(new Vector3());\n\t\t\t\t\t\tlet distance = handlePos.distanceTo(camera.position);\n\t\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight);\n\n\t\t\t\t\t\tlet ws = node.parent.getWorldScale(new Vector3());\n\n\t\t\t\t\t\tlet s = (7 / pr);\n\t\t\t\t\t\tlet scale = new Vector3(s, s, s).divide(ws);\n\n\t\t\t\t\t\tlet rot = new Matrix4().makeRotationFromEuler(node.rotation);\n\t\t\t\t\t\tlet rotInv = rot.clone().invert();\n\n\t\t\t\t\t\tscale.applyMatrix4(rotInv);\n\t\t\t\t\t\tscale.x = Math.abs(scale.x);\n\t\t\t\t\t\tscale.y = Math.abs(scale.y);\n\t\t\t\t\t\tscale.z = Math.abs(scale.z);\n\n\t\t\t\t\t\tnode.scale.copy(scale);\n\t\t\t\t\t}\n\n\t\t\t\t\t// adjust rotation handles\n\t\t\t\t\tif(!this.dragging){\n\t\t\t\t\t\tlet tWorld = this.scene.matrixWorld;\n\t\t\t\t\t\tlet tObject = tWorld.clone().invert();\n\t\t\t\t\t\tlet camObjectPos = camera.getWorldPosition(new Vector3()).applyMatrix4(tObject);\n\n\t\t\t\t\t\tlet x = this.rotationHandles[\"rotation.x\"].node.rotation;\n\t\t\t\t\t\tlet y = this.rotationHandles[\"rotation.y\"].node.rotation;\n\t\t\t\t\t\tlet z = this.rotationHandles[\"rotation.z\"].node.rotation;\n\n\t\t\t\t\t\tx.order = \"ZYX\";\n\t\t\t\t\t\ty.order = \"ZYX\";\n\n\t\t\t\t\t\tlet above = camObjectPos.z > 0;\n\t\t\t\t\t\tlet below = !above;\n\t\t\t\t\t\tlet PI_HALF = Math.PI / 2;\n\n\t\t\t\t\t\tif(above){\n\t\t\t\t\t\t\tif(camObjectPos.x > 0 && camObjectPos.y > 0){\n\t\t\t\t\t\t\t\tx.x = 1 * PI_HALF;\n\t\t\t\t\t\t\t\ty.y = 3 * PI_HALF;\n\t\t\t\t\t\t\t\tz.z = 0 * PI_HALF;\n\t\t\t\t\t\t\t}else if(camObjectPos.x < 0 && camObjectPos.y > 0){\n\t\t\t\t\t\t\t\tx.x = 1 * PI_HALF;\n\t\t\t\t\t\t\t\ty.y = 2 * PI_HALF;\n\t\t\t\t\t\t\t\tz.z = 1 * PI_HALF;\n\t\t\t\t\t\t\t}else if(camObjectPos.x < 0 && camObjectPos.y < 0){\n\t\t\t\t\t\t\t\tx.x = 2 * PI_HALF;\n\t\t\t\t\t\t\t\ty.y = 2 * PI_HALF;\n\t\t\t\t\t\t\t\tz.z = 2 * PI_HALF;\n\t\t\t\t\t\t\t}else if(camObjectPos.x > 0 && camObjectPos.y < 0){\n\t\t\t\t\t\t\t\tx.x = 2 * PI_HALF;\n\t\t\t\t\t\t\t\ty.y = 3 * PI_HALF;\n\t\t\t\t\t\t\t\tz.z = 3 * PI_HALF;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else if(below){\n\t\t\t\t\t\t\tif(camObjectPos.x > 0 && camObjectPos.y > 0){\n\t\t\t\t\t\t\t\tx.x = 0 * PI_HALF;\n\t\t\t\t\t\t\t\ty.y = 0 * PI_HALF;\n\t\t\t\t\t\t\t\tz.z = 0 * PI_HALF;\n\t\t\t\t\t\t\t}else if(camObjectPos.x < 0 && camObjectPos.y > 0){\n\t\t\t\t\t\t\t\tx.x = 0 * PI_HALF;\n\t\t\t\t\t\t\t\ty.y = 1 * PI_HALF;\n\t\t\t\t\t\t\t\tz.z = 1 * PI_HALF;\n\t\t\t\t\t\t\t}else if(camObjectPos.x < 0 && camObjectPos.y < 0){\n\t\t\t\t\t\t\t\tx.x = 3 * PI_HALF;\n\t\t\t\t\t\t\t\ty.y = 1 * PI_HALF;\n\t\t\t\t\t\t\t\tz.z = 2 * PI_HALF;\n\t\t\t\t\t\t\t}else if(camObjectPos.x > 0 && camObjectPos.y < 0){\n\t\t\t\t\t\t\t\tx.x = 3 * PI_HALF;\n\t\t\t\t\t\t\t\ty.y = 0 * PI_HALF;\n\t\t\t\t\t\t\t\tz.z = 3 * PI_HALF;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\t\t\t\t\t\tlet raycaster = new Raycaster(ray.origin, ray.direction);\n\t\t\t\t\t\tlet intersects = raycaster.intersectObjects(this.pickVolumes.filter(v => v.visible), true);\n\n\t\t\t\t\t\tif(intersects.length > 0){\n\t\t\t\t\t\t\tlet I = intersects[0];\n\t\t\t\t\t\t\tlet handleName = I.object.handle;\n\t\t\t\t\t\t\tthis.setActiveHandle(this.handles[handleName]);\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\tthis.setActiveHandle(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// \n\t\t\t\t\tfor(let handleName of Object.keys(this.scaleHandles)){\n\t\t\t\t\t\tlet handle = this.handles[handleName];\n\t\t\t\t\t\tlet node = handle.node;\n\t\t\t\t\t\tlet alignment = handle.alignment;\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}else {\n\t\t\t\tthis.scene.visible = false;\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t};\n\n\tclass VolumeTool extends EventDispatcher{\n\t\tconstructor (viewer) {\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.addEventListener('start_inserting_volume', e => {\n\t\t\t\tthis.viewer.dispatchEvent({\n\t\t\t\t\ttype: 'cancel_insertions'\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.scene = new Scene();\n\t\t\tthis.scene.name = 'scene_volume';\n\n\t\t\tthis.viewer.inputHandler.registerInteractiveScene(this.scene);\n\n\t\t\tthis.onRemove = e => {\n\t\t\t\tthis.scene.remove(e.volume);\n\t\t\t};\n\n\t\t\tthis.onAdd = e => {\n\t\t\t\tthis.scene.add(e.volume);\n\t\t\t};\n\n\t\t\tfor(let volume of viewer.scene.volumes){\n\t\t\t\tthis.onAdd({volume: volume});\n\t\t\t}\n\n\t\t\tthis.viewer.inputHandler.addEventListener('delete', e => {\n\t\t\t\tlet volumes = e.selection.filter(e => (e instanceof Volume));\n\t\t\t\tvolumes.forEach(e => this.viewer.scene.removeVolume(e));\n\t\t\t});\n\n\t\t\tviewer.addEventListener(\"update\", this.update.bind(this));\n\t\t\tviewer.addEventListener(\"render.pass.scene\", e => this.render(e));\n\t\t\tviewer.addEventListener(\"scene_changed\", this.onSceneChange.bind(this));\n\n\t\t\tviewer.scene.addEventListener('volume_added', this.onAdd);\n\t\t\tviewer.scene.addEventListener('volume_removed', this.onRemove);\n\t\t}\n\n\t\tonSceneChange(e){\n\t\t\tif(e.oldScene){\n\t\t\t\te.oldScene.removeEventListeners('volume_added', this.onAdd);\n\t\t\t\te.oldScene.removeEventListeners('volume_removed', this.onRemove);\n\t\t\t}\n\n\t\t\te.scene.addEventListener('volume_added', this.onAdd);\n\t\t\te.scene.addEventListener('volume_removed', this.onRemove);\n\t\t}\n\n\t\tstartInsertion (args = {}) {\n\t\t\tlet volume;\n\t\t\tif(args.type){\n\t\t\t\tvolume = new args.type();\n\t\t\t}else {\n\t\t\t\tvolume = new BoxVolume();\n\t\t\t}\n\t\t\t\n\t\t\tvolume.clip = args.clip || false;\n\t\t\tvolume.name = args.name || 'Volume';\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'start_inserting_volume',\n\t\t\t\tvolume: volume\n\t\t\t});\n\n\t\t\tthis.viewer.scene.addVolume(volume);\n\t\t\tthis.scene.add(volume);\n\n\t\t\tlet cancel = {\n\t\t\t\tcallback: null\n\t\t\t};\n\n\t\t\tlet drag = e => {\n\t\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\t\t\n\t\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\t\te.drag.end, \n\t\t\t\t\tthis.viewer.scene.getActiveCamera(), \n\t\t\t\t\tthis.viewer, \n\t\t\t\t\tthis.viewer.scene.pointclouds, \n\t\t\t\t\t{pickClipped: false});\n\n\t\t\t\tif (I) {\n\t\t\t\t\tvolume.position.copy(I.location);\n\n\t\t\t\t\tlet wp = volume.getWorldPosition(new Vector3()).applyMatrix4(camera.matrixWorldInverse);\n\t\t\t\t\t// let pp = new THREE.Vector4(wp.x, wp.y, wp.z).applyMatrix4(camera.projectionMatrix);\n\t\t\t\t\tlet w = Math.abs((wp.z / 5));\n\t\t\t\t\tvolume.scale.set(w, w, w);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet drop = e => {\n\t\t\t\tvolume.removeEventListener('drag', drag);\n\t\t\t\tvolume.removeEventListener('drop', drop);\n\n\t\t\t\tcancel.callback();\n\t\t\t};\n\n\t\t\tcancel.callback = e => {\n\t\t\t\tvolume.removeEventListener('drag', drag);\n\t\t\t\tvolume.removeEventListener('drop', drop);\n\t\t\t\tthis.viewer.removeEventListener('cancel_insertions', cancel.callback);\n\t\t\t};\n\n\t\t\tvolume.addEventListener('drag', drag);\n\t\t\tvolume.addEventListener('drop', drop);\n\t\t\tthis.viewer.addEventListener('cancel_insertions', cancel.callback);\n\n\t\t\tthis.viewer.inputHandler.startDragging(volume);\n\n\t\t\treturn volume;\n\t\t}\n\n\t\tupdate(){\n\t\t\tif (!this.viewer.scene) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\tlet renderAreaSize = this.viewer.renderer.getSize(new Vector2());\n\t\t\tlet clientWidth = renderAreaSize.width;\n\t\t\tlet clientHeight = renderAreaSize.height;\n\n\t\t\tlet volumes = this.viewer.scene.volumes;\n\t\t\tfor (let volume of volumes) {\n\t\t\t\tlet label = volume.label;\n\t\t\t\t\n\t\t\t\t{\n\n\t\t\t\t\tlet distance = label.position.distanceTo(camera.position);\n\t\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight);\n\n\t\t\t\t\tlet scale = (70 / pr);\n\t\t\t\t\tlabel.scale.set(scale, scale, scale);\n\t\t\t\t}\n\n\t\t\t\tlet calculatedVolume = volume.getVolume();\n\t\t\t\tcalculatedVolume = calculatedVolume / Math.pow(this.viewer.lengthUnit.unitspermeter, 3) * Math.pow(this.viewer.lengthUnitDisplay.unitspermeter, 3);  //convert to cubic meters then to the cubic display unit\n\t\t\t\tlet text = Utils.addCommas(calculatedVolume.toFixed(3)) + ' ' + this.viewer.lengthUnitDisplay.code + '\\u00B3';\n\t\t\t\tlabel.setText(text);\n\t\t\t}\n\t\t}\n\n\t\trender(params){\n\t\t\tconst renderer = this.viewer.renderer;\n\n\t\t\tconst oldTarget = renderer.getRenderTarget();\n\t\t\t\n\t\t\tif(params.renderTarget){\n\t\t\t\trenderer.setRenderTarget(params.renderTarget);\n\t\t\t}\n\t\t\trenderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t\t\trenderer.setRenderTarget(oldTarget);\n\t\t}\n\n\t}\n\n\tclass Compass{\r\n\r\n\t\tconstructor(viewer){\r\n\t\t\tthis.viewer = viewer;\r\n\r\n\t\t\tthis.visible = false;\r\n\t\t\tthis.dom = this.createElement();\r\n\r\n\t\t\tviewer.addEventListener(\"update\", () => {\r\n\t\t\t\tconst direction = viewer.scene.view.direction.clone();\r\n\t\t\t\tdirection.z = 0;\r\n\t\t\t\tdirection.normalize();\r\n\r\n\t\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\r\n\t\t\t\tconst p1 = camera.getWorldPosition(new Vector3());\r\n\t\t\t\tconst p2 = p1.clone().add(direction);\r\n\r\n\t\t\t\tconst projection = viewer.getProjection();\r\n\t\t\t\tconst azimuth = Utils.computeAzimuth(p1, p2, projection);\r\n\t\t\t\t\r\n\t\t\t\tthis.dom.css(\"transform\", `rotateZ(${-azimuth}rad)`);\r\n\t\t\t});\r\n\r\n\t\t\tthis.dom.click( () => {\r\n\t\t\t\tviewer.setTopView();\r\n\t\t\t});\r\n\r\n\t\t\tconst renderArea = $(viewer.renderArea);\r\n\t\t\trenderArea.append(this.dom);\r\n\r\n\t\t\tthis.setVisible(this.visible);\r\n\t\t}\r\n\r\n\t\tsetVisible(visible){\r\n\t\t\tthis.visible = visible;\r\n\r\n\t\t\tconst value = visible ? \"\" : \"none\";\r\n\t\t\tthis.dom.css(\"display\", value);\r\n\t\t}\r\n\r\n\t\tisVisible(){\r\n\t\t\treturn this.visible;\r\n\t\t}\r\n\r\n\t\tcreateElement(){\r\n\t\t\tconst style = `style=\"position: absolute; top: 10px; right: 10px; z-index: 10000; width: 64px;\"`;\r\n\t\t\tconst img = $(`<img src=\"${Potree.resourcePath}/images/compas.svg\" ${style} />`);\r\n\r\n\t\t\treturn img;\r\n\t\t}\r\n\r\n\t};\n\n\tclass PotreeRenderer {\n\n\t\tconstructor (viewer) {\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\t{\n\t\t\t\tlet dummyScene = new Scene();\n\t\t\t\tlet geometry = new SphereGeometry(0.001, 2, 2);\n\t\t\t\tlet mesh = new Mesh(geometry, new MeshBasicMaterial());\n\t\t\t\tmesh.position.set(36453, 35163, 764712);\n\t\t\t\tdummyScene.add(mesh);\n\n\t\t\t\tthis.dummyMesh = mesh;\n\t\t\t\tthis.dummyScene = dummyScene;\n\t\t\t}\n\t\t}\n\n\t\tclearTargets(){\n\n\t\t}\n\n\t\tclear(){\n\t\t\tlet {viewer, renderer} = this;\n\n\n\t\t\t// render skybox\n\t\t\tif(viewer.background === \"skybox\"){\n\t\t\t\trenderer.setClearColor(0xff0000, 1);\n\t\t\t}else if(viewer.background === \"gradient\"){\n\t\t\t\trenderer.setClearColor(0x00ff00, 1);\n\t\t\t}else if(viewer.background === \"black\"){\n\t\t\t\trenderer.setClearColor(0x000000, 1);\n\t\t\t}else if(viewer.background === \"white\"){\n\t\t\t\trenderer.setClearColor(0xFFFFFF, 1);\n\t\t\t}else {\n\t\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\t}\n\n\t\t\trenderer.clear();\n\t\t}\n\t \n\t\trender(params){\n\t\t\tlet {viewer, renderer} = this;\n\n\t\t\tconst camera = params.camera ? params.camera : viewer.scene.getActiveCamera();\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.begin\",viewer: viewer});\n\n\t\t\tconst renderAreaSize = renderer.getSize(new Vector2());\n\t\t\tconst width = params.viewport ? params.viewport[2] : renderAreaSize.x;\n\t\t\tconst height = params.viewport ? params.viewport[3] : renderAreaSize.y;\n\n\t\t\t// render skybox\n\t\t\tif(viewer.background === \"skybox\"){\n\t\t\t\tviewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation);\n\t\t\t\tviewer.skybox.camera.fov = viewer.scene.cameraP.fov;\n\t\t\t\tviewer.skybox.camera.aspect = viewer.scene.cameraP.aspect;\n\t\t\t\t\n\t\t\t\tviewer.skybox.parent.rotation.x = 0;\n\t\t\t\tviewer.skybox.parent.updateMatrixWorld();\n\n\t\t\t\tviewer.skybox.camera.updateProjectionMatrix();\n\t\t\t\trenderer.render(viewer.skybox.scene, viewer.skybox.camera);\n\t\t\t}else if(viewer.background === \"gradient\"){\n\t\t\t\trenderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG);\n\t\t\t}\n\t\t\t\n\t\t\tfor(let pointcloud of this.viewer.scene.pointclouds){\n\t\t\t\tconst {material} = pointcloud;\n\t\t\t\tmaterial.useEDL = false;\n\t\t\t}\n\t\t\t\n\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, null, {\n\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof Potree.SphereVolume)),\n\t\t\t});\n\t\t\t\n\t\t\t// render scene\n\t\t\trenderer.render(viewer.scene.scene, camera);\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.scene\",viewer: viewer});\n\t\t\t\n\t\t\tviewer.clippingTool.update();\n\t\t\trenderer.render(viewer.clippingTool.sceneMarker, viewer.scene.cameraScreenSpace); //viewer.scene.cameraScreenSpace);\n\t\t\trenderer.render(viewer.clippingTool.sceneVolume, camera);\n\n\t\t\trenderer.render(viewer.controls.sceneControls, camera);\n\t\t\t\n\t\t\trenderer.clearDepth();\n\t\t\t\n\t\t\tviewer.transformationTool.update();\n\t\t\t\n\t\t\tviewer.dispatchEvent({type: \"render.pass.perspective_overlay\",viewer: viewer});\n\n\t\t\t// renderer.render(viewer.controls.sceneControls, camera);\n\t\t\t// renderer.render(viewer.clippingTool.sceneVolume, camera);\n\t\t\t// renderer.render(viewer.transformationTool.scene, camera);\n\t\t\t\n\t\t\t// renderer.setViewport(width - viewer.navigationCube.width, \n\t\t\t// \t\t\t\t\t\t\theight - viewer.navigationCube.width, \n\t\t\t// \t\t\t\t\t\t\tviewer.navigationCube.width, viewer.navigationCube.width);\n\t\t\t// renderer.render(viewer.navigationCube, viewer.navigationCube.camera);\t\t\n\t\t\t// renderer.setViewport(0, 0, width, height);\n\t\t\t\n\t\t\tviewer.dispatchEvent({type: \"render.pass.end\",viewer: viewer});\n\t\t}\n\n\t}\n\n\tclass EDLRenderer{\n\t\tconstructor(viewer){\n\t\t\tthis.viewer = viewer;\n\n\t\t\tthis.edlMaterial = null;\n\n\t\t\tthis.rtRegular;\n\t\t\tthis.rtEDL;\n\n\t\t\tthis.gl = viewer.renderer.getContext();\n\n\t\t\tthis.shadowMap = new PointCloudSM(this.viewer.pRenderer);\n\t\t}\n\n\t\tinitEDL(){\n\t\t\tif (this.edlMaterial != null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.edlMaterial = new EyeDomeLightingMaterial();\n\t\t\tthis.edlMaterial.depthTest = true;\n\t\t\tthis.edlMaterial.depthWrite = true;\n\t\t\tthis.edlMaterial.transparent = true;\n\n\t\t\tthis.rtEDL = new WebGLRenderTarget(1024, 1024, {\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: FloatType,\n\t\t\t\tdepthTexture: new DepthTexture(undefined, undefined, UnsignedIntType)\n\t\t\t});\n\n\t\t\tthis.rtRegular = new WebGLRenderTarget(1024, 1024, {\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\tdepthTexture: new DepthTexture(undefined, undefined, UnsignedIntType)\n\t\t\t});\n\t\t};\n\n\t\tresize(width, height){\n\t\t\tif(this.screenshot){\n\t\t\t\twidth = this.screenshot.target.width;\n\t\t\t\theight = this.screenshot.target.height;\n\t\t\t}\n\n\t\t\tthis.rtEDL.setSize(width , height);\n\t\t\tthis.rtRegular.setSize(width , height);\n\t\t}\n\n\t\tmakeScreenshot(camera, size, callback){\n\n\t\t\tif(camera === undefined || camera === null){\n\t\t\t\tcamera = this.viewer.scene.getActiveCamera();\n\t\t\t}\n\n\t\t\tif(size === undefined || size === null){\n\t\t\t\tsize = this.viewer.renderer.getSize(new Vector2());\n\t\t\t}\n\n\t\t\tlet {width, height} = size;\n\n\t\t\t//let maxTextureSize = viewer.renderer.capabilities.maxTextureSize;\n\t\t\t//if(width * 4 < \n\t\t\twidth = 2 * width;\n\t\t\theight = 2 * height;\n\n\t\t\tlet target = new WebGLRenderTarget(width, height, {\n\t\t\t\tformat: RGBAFormat,\n\t\t\t});\n\n\t\t\tthis.screenshot = {\n\t\t\t\ttarget: target\n\t\t\t};\n\n\t\t\t// HACK? removed because of error, was this important?\n\t\t\t//this.viewer.renderer.clearTarget(target, true, true, true);\n\n\t\t\tthis.render();\n\n\t\t\tlet pixelCount = width * height;\n\t\t\tlet buffer = new Uint8Array(4 * pixelCount);\n\n\t\t\tthis.viewer.renderer.readRenderTargetPixels(target, 0, 0, width, height, buffer);\n\n\t\t\t// flip vertically\n\t\t\tlet bytesPerLine = width * 4;\n\t\t\tfor(let i = 0; i < parseInt(height / 2); i++){\n\t\t\t\tlet j = height - i - 1;\n\n\t\t\t\tlet lineI = buffer.slice(i * bytesPerLine, i * bytesPerLine + bytesPerLine);\n\t\t\t\tlet lineJ = buffer.slice(j * bytesPerLine, j * bytesPerLine + bytesPerLine);\n\t\t\t\tbuffer.set(lineJ, i * bytesPerLine);\n\t\t\t\tbuffer.set(lineI, j * bytesPerLine);\n\t\t\t}\n\n\t\t\tthis.screenshot.target.dispose();\n\t\t\tdelete this.screenshot;\n\n\t\t\treturn {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tbuffer: buffer\n\t\t\t};\n\t\t}\n\n\t\tclearTargets(){\n\t\t\tconst viewer = this.viewer;\n\t\t\tconst {renderer} = viewer;\n\n\t\t\tconst oldTarget = renderer.getRenderTarget();\n\n\t\t\trenderer.setRenderTarget( this.rtEDL );\n\t\t\trenderer.clear( true, true, true );\n\n\t\t\trenderer.setRenderTarget( this.rtRegular );\n\t\t\trenderer.clear( true, true, false );\n\n\t\t\trenderer.setRenderTarget(oldTarget);\n\t\t}\n\n\t\tclear(){\n\t\t\tthis.initEDL();\n\t\t\tconst viewer = this.viewer;\n\n\t\t\tconst {renderer, background} = viewer;\n\n\t\t\tif(background === \"skybox\"){\n\t\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\t} else if (background === 'gradient') {\n\t\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\t} else if (background === 'black') {\n\t\t\t\trenderer.setClearColor(0x000000, 1);\n\t\t\t} else if (background === 'white') {\n\t\t\t\trenderer.setClearColor(0xFFFFFF, 1);\n\t\t\t} else {\n\t\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\t}\n\t\t\t\n\t\t\trenderer.clear();\n\n\t\t\tthis.clearTargets();\n\t\t}\n\n\t\trenderShadowMap(visiblePointClouds, camera, lights){\n\n\t\t\tconst {viewer} = this;\n\n\t\t\tconst doShadows = lights.length > 0 && !(lights[0].disableShadowUpdates);\n\t\t\tif(doShadows){\n\t\t\t\tlet light = lights[0];\n\n\t\t\t\tthis.shadowMap.setLight(light);\n\n\t\t\t\tlet originalAttributes = new Map();\n\t\t\t\tfor(let pointcloud of viewer.scene.pointclouds){\n\t\t\t\t\t// TODO IMPORTANT !!! check\n\t\t\t\t\toriginalAttributes.set(pointcloud, pointcloud.material.activeAttributeName);\n\t\t\t\t\tpointcloud.material.disableEvents();\n\t\t\t\t\tpointcloud.material.activeAttributeName = \"depth\";\n\t\t\t\t\t//pointcloud.material.pointColorType = PointColorType.DEPTH;\n\t\t\t\t}\n\n\t\t\t\tthis.shadowMap.render(viewer.scene.scenePointCloud, camera);\n\n\t\t\t\tfor(let pointcloud of visiblePointClouds){\n\t\t\t\t\tlet originalAttribute = originalAttributes.get(pointcloud);\n\t\t\t\t\t// TODO IMPORTANT !!! check\n\t\t\t\t\tpointcloud.material.activeAttributeName = originalAttribute;\n\t\t\t\t\tpointcloud.material.enableEvents();\n\t\t\t\t}\n\n\t\t\t\tviewer.shadowTestCam.updateMatrixWorld();\n\t\t\t\tviewer.shadowTestCam.matrixWorldInverse.copy(viewer.shadowTestCam.matrixWorld).invert();\n\t\t\t\tviewer.shadowTestCam.updateProjectionMatrix();\n\t\t\t}\n\n\t\t}\n\n\t\trender(params){\n\t\t\tthis.initEDL();\n\n\t\t\tconst viewer = this.viewer;\n\t\t\tlet camera = params.camera ? params.camera : viewer.scene.getActiveCamera();\n\t\t\tconst {width, height} = this.viewer.renderer.getSize(new Vector2());\n\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.begin\",viewer: viewer});\n\t\t\t\n\t\t\tthis.resize(width, height);\n\n\t\t\tconst visiblePointClouds = viewer.scene.pointclouds.filter(pc => pc.visible);\n\n\t\t\tif(this.screenshot){\n\t\t\t\tlet oldBudget = Potree.pointBudget;\n\t\t\t\tPotree.pointBudget = Math.max(10 * 1000 * 1000, 2 * oldBudget);\n\t\t\t\tlet result = Potree.updatePointClouds(\n\t\t\t\t\tviewer.scene.pointclouds, \n\t\t\t\t\tcamera, \n\t\t\t\t\tviewer.renderer);\n\t\t\t\tPotree.pointBudget = oldBudget;\n\t\t\t}\n\n\t\t\tlet lights = [];\n\t\t\tviewer.scene.scene.traverse(node => {\n\t\t\t\tif(node.type === \"SpotLight\"){\n\t\t\t\t\tlights.push(node);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif(viewer.background === \"skybox\"){\n\t\t\t\tviewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation);\n\t\t\t\tviewer.skybox.camera.fov = viewer.scene.cameraP.fov;\n\t\t\t\tviewer.skybox.camera.aspect = viewer.scene.cameraP.aspect;\n\n\t\t\t\tviewer.skybox.parent.rotation.x = 0;\n\t\t\t\tviewer.skybox.parent.updateMatrixWorld();\n\n\t\t\t\tviewer.skybox.camera.updateProjectionMatrix();\n\t\t\t\tviewer.renderer.render(viewer.skybox.scene, viewer.skybox.camera);\n\t\t\t} else if (viewer.background === 'gradient') {\n\t\t\t\tviewer.renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG);\n\t\t\t} \n\n\t\t\t//TODO adapt to multiple lights\n\t\t\tthis.renderShadowMap(visiblePointClouds, camera, lights);\n\n\t\t\t{ // COLOR & DEPTH PASS\n\t\t\t\tfor (let pointcloud of visiblePointClouds) {\n\t\t\t\t\tlet octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x;\n\n\t\t\t\t\tlet material = pointcloud.material;\n\t\t\t\t\tmaterial.weighted = false;\n\t\t\t\t\tmaterial.useLogarithmicDepthBuffer = false;\n\t\t\t\t\tmaterial.useEDL = true;\n\n\t\t\t\t\tmaterial.screenWidth = width;\n\t\t\t\t\tmaterial.screenHeight = height;\n\t\t\t\t\tmaterial.uniforms.visibleNodes.value = pointcloud.material.visibleNodesTexture;\n\t\t\t\t\tmaterial.uniforms.octreeSize.value = octreeSize;\n\t\t\t\t\tmaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(pointcloud.scale.x, pointcloud.scale.y, pointcloud.scale.z);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// TODO adapt to multiple lights\n\t\t\t\tviewer.renderer.setRenderTarget(this.rtEDL);\n\t\t\t\t\n\t\t\t\tif(lights.length > 0){\n\t\t\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtEDL, {\n\t\t\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)),\n\t\t\t\t\t\tshadowMaps: [this.shadowMap],\n\t\t\t\t\t\ttransparent: false,\n\t\t\t\t\t});\n\t\t\t\t}else {\n\n\t\t\t\t\t\n\t\t\t\t\t// let test = camera.clone();\n\t\t\t\t\t// test.matrixAutoUpdate = false;\n\n\t\t\t\t\t// //test.updateMatrixWorld = () => {};\n\n\t\t\t\t\t// let mat = new THREE.Matrix4().set(\n\t\t\t\t\t// \t1, 0, 0, 0,\n\t\t\t\t\t// \t0, 0, 1, 0,\n\t\t\t\t\t// \t0, -1, 0, 0,\n\t\t\t\t\t// \t0, 0, 0, 1,\n\t\t\t\t\t// );\n\t\t\t\t\t// mat.invert()\n\n\t\t\t\t\t// test.matrix.multiplyMatrices(mat, test.matrix);\n\t\t\t\t\t// test.updateMatrixWorld();\n\n\t\t\t\t\t//test.matrixWorld.multiplyMatrices(mat, test.matrixWorld);\n\t\t\t\t\t//test.matrixWorld.multiply(mat);\n\t\t\t\t\t//test.matrixWorldInverse.invert(test.matrixWorld);\n\t\t\t\t\t//test.matrixWorldInverse.multiplyMatrices(test.matrixWorldInverse, mat);\n\t\t\t\t\t\n\n\t\t\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtEDL, {\n\t\t\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)),\n\t\t\t\t\t\ttransparent: false,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t}\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.scene\", viewer: viewer, renderTarget: this.rtRegular});\n\t\t\tviewer.renderer.setRenderTarget(null);\n\t\t\tviewer.renderer.render(viewer.scene.scene, camera);\n\n\t\t\t{ // EDL PASS\n\n\t\t\t\tconst uniforms = this.edlMaterial.uniforms;\n\n\t\t\t\tuniforms.screenWidth.value = width;\n\t\t\t\tuniforms.screenHeight.value = height;\n\n\t\t\t\tlet proj = camera.projectionMatrix;\n\t\t\t\tlet projArray = new Float32Array(16);\n\t\t\t\tprojArray.set(proj.elements);\n\n\t\t\t\tuniforms.uNear.value = camera.near;\n\t\t\t\tuniforms.uFar.value = camera.far;\n\t\t\t\tuniforms.uEDLColor.value = this.rtEDL.texture;\n\t\t\t\tuniforms.uEDLDepth.value = this.rtEDL.depthTexture;\n\t\t\t\tuniforms.uProj.value = projArray;\n\n\t\t\t\tuniforms.edlStrength.value = viewer.edlStrength;\n\t\t\t\tuniforms.radius.value = viewer.edlRadius;\n\t\t\t\tuniforms.opacity.value = viewer.edlOpacity; // HACK\n\t\t\t\t\n\t\t\t\tUtils.screenPass.render(viewer.renderer, this.edlMaterial);\n\n\t\t\t\tif(this.screenshot){\n\t\t\t\t\tUtils.screenPass.render(viewer.renderer, this.edlMaterial, this.screenshot.target);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.scene\", viewer: viewer});\n\n\t\t\tviewer.renderer.clearDepth();\n\n\t\t\tviewer.transformationTool.update();\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.perspective_overlay\",viewer: viewer});\n\n\t\t\tviewer.renderer.render(viewer.controls.sceneControls, camera);\n\t\t\tviewer.renderer.render(viewer.clippingTool.sceneVolume, camera);\n\t\t\tviewer.renderer.render(viewer.transformationTool.scene, camera);\n\t\t\t\n\t\t\tviewer.dispatchEvent({type: \"render.pass.end\",viewer: viewer});\n\n\t\t}\n\t}\n\n\tclass HQSplatRenderer{\n\t\t\n\t\tconstructor(viewer){\n\t\t\tthis.viewer = viewer;\n\n\t\t\tthis.depthMaterials = new Map();\n\t\t\tthis.attributeMaterials = new Map();\n\t\t\tthis.normalizationMaterial = null;\n\n\t\t\tthis.rtDepth = null;\n\t\t\tthis.rtAttribute = null;\n\t\t\tthis.gl = viewer.renderer.getContext();\n\n\t\t\tthis.initialized = false;\n\t\t}\n\n\t\tinit(){\n\t\t\tif (this.initialized) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.normalizationMaterial = new NormalizationMaterial();\n\t\t\tthis.normalizationMaterial.depthTest = true;\n\t\t\tthis.normalizationMaterial.depthWrite = true;\n\t\t\tthis.normalizationMaterial.transparent = true;\n\n\t\t\tthis.normalizationEDLMaterial = new NormalizationEDLMaterial();\n\t\t\tthis.normalizationEDLMaterial.depthTest = true;\n\t\t\tthis.normalizationEDLMaterial.depthWrite = true;\n\t\t\tthis.normalizationEDLMaterial.transparent = true;\n\n\t\t\tthis.rtDepth = new WebGLRenderTarget(1024, 1024, {\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: FloatType,\n\t\t\t\tdepthTexture: new DepthTexture(undefined, undefined, UnsignedIntType)\n\t\t\t});\n\n\t\t\tthis.rtAttribute = new WebGLRenderTarget(1024, 1024, {\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\tformat: RGBAFormat,\n\t\t\t\ttype: FloatType,\n\t\t\t\tdepthTexture: this.rtDepth.depthTexture,\n\t\t\t});\n\n\t\t\tthis.initialized = true;\n\t\t};\n\n\t\tresize(width, height){\n\t\t\tthis.rtDepth.setSize(width, height);\n\t\t\tthis.rtAttribute.setSize(width, height);\n\t\t}\n\n\t\tclearTargets(){\n\t\t\tconst viewer = this.viewer;\n\t\t\tconst {renderer} = viewer;\n\n\t\t\tconst oldTarget = renderer.getRenderTarget();\n\n\t\t\trenderer.setClearColor(0x000000, 0);\n\n\t\t\trenderer.setRenderTarget( this.rtDepth );\n\t\t\trenderer.clear( true, true, true );\n\n\t\t\trenderer.setRenderTarget( this.rtAttribute );\n\t\t\trenderer.clear( true, true, true );\n\n\t\t\trenderer.setRenderTarget(oldTarget);\n\t\t}\n\n\n\t\tclear(){\n\t\t\tthis.init();\n\n\t\t\tconst {renderer, background} = this.viewer;\n\n\t\t\tif(background === \"skybox\"){\n\t\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\t} else if (background === 'gradient') {\n\t\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\t} else if (background === 'black') {\n\t\t\t\trenderer.setClearColor(0x000000, 1);\n\t\t\t} else if (background === 'white') {\n\t\t\t\trenderer.setClearColor(0xFFFFFF, 1);\n\t\t\t} else {\n\t\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\t}\n\n\t\t\trenderer.clear();\n\n\t\t\tthis.clearTargets();\n\t\t}\n\n\t\trender (params) {\n\t\t\tthis.init();\n\n\t\t\tconst viewer = this.viewer;\n\t\t\tconst camera = params.camera ? params.camera : viewer.scene.getActiveCamera();\n\t\t\tconst {width, height} = this.viewer.renderer.getSize(new Vector2());\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.begin\",viewer: viewer});\n\n\t\t\tthis.resize(width, height);\n\n\t\t\tconst visiblePointClouds = viewer.scene.pointclouds.filter(pc => pc.visible);\n\t\t\tconst originalMaterials = new Map();\n\n\t\t\tfor(let pointcloud of visiblePointClouds){\n\t\t\t\toriginalMaterials.set(pointcloud, pointcloud.material);\n\n\t\t\t\tif(!this.attributeMaterials.has(pointcloud)){\n\t\t\t\t\tlet attributeMaterial = new PointCloudMaterial$1();\n\t\t\t\t\tthis.attributeMaterials.set(pointcloud, attributeMaterial);\n\t\t\t\t}\n\n\t\t\t\tif(!this.depthMaterials.has(pointcloud)){\n\t\t\t\t\tlet depthMaterial = new PointCloudMaterial$1();\n\n\t\t\t\t\tdepthMaterial.setDefine(\"depth_pass\", \"#define hq_depth_pass\");\n\t\t\t\t\tdepthMaterial.setDefine(\"use_edl\", \"#define use_edl\");\n\n\t\t\t\t\tthis.depthMaterials.set(pointcloud, depthMaterial);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // DEPTH PASS\n\t\t\t\tfor (let pointcloud of visiblePointClouds) {\n\t\t\t\t\tlet octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x;\n\n\t\t\t\t\tlet material = originalMaterials.get(pointcloud);\n\t\t\t\t\tlet depthMaterial = this.depthMaterials.get(pointcloud);\n\n\t\t\t\t\tdepthMaterial.size = material.size;\n\t\t\t\t\tdepthMaterial.minSize = material.minSize;\n\t\t\t\t\tdepthMaterial.maxSize = material.maxSize;\n\n\t\t\t\t\tdepthMaterial.pointSizeType = material.pointSizeType;\n\t\t\t\t\tdepthMaterial.visibleNodesTexture = material.visibleNodesTexture;\n\t\t\t\t\tdepthMaterial.weighted = false;\n\t\t\t\t\tdepthMaterial.screenWidth = width;\n\t\t\t\t\tdepthMaterial.shape = PointShape.CIRCLE;\n\t\t\t\t\tdepthMaterial.screenHeight = height;\n\t\t\t\t\tdepthMaterial.uniforms.visibleNodes.value = material.visibleNodesTexture;\n\t\t\t\t\tdepthMaterial.uniforms.octreeSize.value = octreeSize;\n\t\t\t\t\tdepthMaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(...pointcloud.scale.toArray());\n\t\t\t\t\tdepthMaterial.classification = material.classification;\n\t\t\t\t\tdepthMaterial.uniforms.classificationLUT.value.image.data = material.uniforms.classificationLUT.value.image.data;\n\t\t\t\t\tdepthMaterial.classificationTexture.needsUpdate = true;\n\n\t\t\t\t\tdepthMaterial.uniforms.uFilterReturnNumberRange.value = material.uniforms.uFilterReturnNumberRange.value;\n\t\t\t\t\tdepthMaterial.uniforms.uFilterNumberOfReturnsRange.value = material.uniforms.uFilterNumberOfReturnsRange.value;\n\t\t\t\t\tdepthMaterial.uniforms.uFilterGPSTimeClipRange.value = material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\t\tdepthMaterial.uniforms.uFilterPointSourceIDClipRange.value = material.uniforms.uFilterPointSourceIDClipRange.value;\n\n\t\t\t\t\tdepthMaterial.clipTask = material.clipTask;\n\t\t\t\t\tdepthMaterial.clipMethod = material.clipMethod;\n\t\t\t\t\tdepthMaterial.setClipBoxes(material.clipBoxes);\n\t\t\t\t\tdepthMaterial.setClipPolygons(material.clipPolygons);\n\n\t\t\t\t\tpointcloud.material = depthMaterial;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtDepth, {\n\t\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t{ // ATTRIBUTE PASS\n\t\t\t\tfor (let pointcloud of visiblePointClouds) {\n\t\t\t\t\tlet octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x;\n\n\t\t\t\t\tlet material = originalMaterials.get(pointcloud);\n\t\t\t\t\tlet attributeMaterial = this.attributeMaterials.get(pointcloud);\n\n\t\t\t\t\tattributeMaterial.size = material.size;\n\t\t\t\t\tattributeMaterial.minSize = material.minSize;\n\t\t\t\t\tattributeMaterial.maxSize = material.maxSize;\n\n\t\t\t\t\tattributeMaterial.pointSizeType = material.pointSizeType;\n\t\t\t\t\tattributeMaterial.activeAttributeName = material.activeAttributeName;\n\t\t\t\t\tattributeMaterial.visibleNodesTexture = material.visibleNodesTexture;\n\t\t\t\t\tattributeMaterial.weighted = true;\n\t\t\t\t\tattributeMaterial.screenWidth = width;\n\t\t\t\t\tattributeMaterial.screenHeight = height;\n\t\t\t\t\tattributeMaterial.shape = PointShape.CIRCLE;\n\t\t\t\t\tattributeMaterial.uniforms.visibleNodes.value = material.visibleNodesTexture;\n\t\t\t\t\tattributeMaterial.uniforms.octreeSize.value = octreeSize;\n\t\t\t\t\tattributeMaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(...pointcloud.scale.toArray());\n\t\t\t\t\tattributeMaterial.classification = material.classification;\n\t\t\t\t\tattributeMaterial.uniforms.classificationLUT.value.image.data = material.uniforms.classificationLUT.value.image.data;\n\t\t\t\t\tattributeMaterial.classificationTexture.needsUpdate = true;\n\n\t\t\t\t\tattributeMaterial.uniforms.uFilterReturnNumberRange.value = material.uniforms.uFilterReturnNumberRange.value;\n\t\t\t\t\tattributeMaterial.uniforms.uFilterNumberOfReturnsRange.value = material.uniforms.uFilterNumberOfReturnsRange.value;\n\t\t\t\t\tattributeMaterial.uniforms.uFilterGPSTimeClipRange.value = material.uniforms.uFilterGPSTimeClipRange.value;\n\t\t\t\t\tattributeMaterial.uniforms.uFilterPointSourceIDClipRange.value = material.uniforms.uFilterPointSourceIDClipRange.value;\n\n\t\t\t\t\tattributeMaterial.elevationGradientRepeat = material.elevationGradientRepeat;\n\t\t\t\t\tattributeMaterial.elevationRange = material.elevationRange;\n\t\t\t\t\tattributeMaterial.gradient = material.gradient;\n\t\t\t\t\tattributeMaterial.matcap = material.matcap;\n\n\t\t\t\t\tattributeMaterial.intensityRange = material.intensityRange;\n\t\t\t\t\tattributeMaterial.intensityGamma = material.intensityGamma;\n\t\t\t\t\tattributeMaterial.intensityContrast = material.intensityContrast;\n\t\t\t\t\tattributeMaterial.intensityBrightness = material.intensityBrightness;\n\n\t\t\t\t\tattributeMaterial.rgbGamma = material.rgbGamma;\n\t\t\t\t\tattributeMaterial.rgbContrast = material.rgbContrast;\n\t\t\t\t\tattributeMaterial.rgbBrightness = material.rgbBrightness;\n\n\t\t\t\t\tattributeMaterial.weightRGB = material.weightRGB;\n\t\t\t\t\tattributeMaterial.weightIntensity = material.weightIntensity;\n\t\t\t\t\tattributeMaterial.weightElevation = material.weightElevation;\n\t\t\t\t\tattributeMaterial.weightRGB = material.weightRGB;\n\t\t\t\t\tattributeMaterial.weightClassification = material.weightClassification;\n\t\t\t\t\tattributeMaterial.weightReturnNumber = material.weightReturnNumber;\n\t\t\t\t\tattributeMaterial.weightSourceID = material.weightSourceID;\n\n\t\t\t\t\tattributeMaterial.color = material.color;\n\n\t\t\t\t\tattributeMaterial.clipTask = material.clipTask;\n\t\t\t\t\tattributeMaterial.clipMethod = material.clipMethod;\n\t\t\t\t\tattributeMaterial.setClipBoxes(material.clipBoxes);\n\t\t\t\t\tattributeMaterial.setClipPolygons(material.clipPolygons);\n\n\t\t\t\t\tpointcloud.material = attributeMaterial;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tlet gl = this.gl;\n\n\t\t\t\tviewer.renderer.setRenderTarget(null);\n\t\t\t\tviewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtAttribute, {\n\t\t\t\t\tclipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)),\n\t\t\t\t\t//material: this.attributeMaterial,\n\t\t\t\t\tblendFunc: [gl.SRC_ALPHA, gl.ONE],\n\t\t\t\t\t//depthTest: false,\n\t\t\t\t\tdepthWrite: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor(let [pointcloud, material] of originalMaterials){\n\t\t\t\tpointcloud.material = material;\n\t\t\t}\n\n\t\t\tviewer.renderer.setRenderTarget(null);\n\t\t\tif(viewer.background === \"skybox\"){\n\t\t\t\tviewer.renderer.setClearColor(0x000000, 0);\n\t\t\t\tviewer.renderer.clear();\n\t\t\t\tviewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation);\n\t\t\t\tviewer.skybox.camera.fov = viewer.scene.cameraP.fov;\n\t\t\t\tviewer.skybox.camera.aspect = viewer.scene.cameraP.aspect;\n\t\t\t\t\n\t\t\t\tviewer.skybox.parent.rotation.x = 0;\n\t\t\t\tviewer.skybox.parent.updateMatrixWorld();\n\n\t\t\t\tviewer.skybox.camera.updateProjectionMatrix();\n\t\t\t\tviewer.renderer.render(viewer.skybox.scene, viewer.skybox.camera);\n\t\t\t} else if (viewer.background === 'gradient') {\n\t\t\t\tviewer.renderer.setClearColor(0x000000, 0);\n\t\t\t\tviewer.renderer.clear();\n\t\t\t\tviewer.renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG);\n\t\t\t} else if (viewer.background === 'black') {\n\t\t\t\tviewer.renderer.setClearColor(0x000000, 1);\n\t\t\t\tviewer.renderer.clear();\n\t\t\t} else if (viewer.background === 'white') {\n\t\t\t\tviewer.renderer.setClearColor(0xFFFFFF, 1);\n\t\t\t\tviewer.renderer.clear();\n\t\t\t} else {\n\t\t\t\tviewer.renderer.setClearColor(0x000000, 0);\n\t\t\t\tviewer.renderer.clear();\n\t\t\t}\n\n\t\t\t{ // NORMALIZATION PASS\n\t\t\t\tlet normalizationMaterial = this.useEDL ? this.normalizationEDLMaterial : this.normalizationMaterial;\n\n\t\t\t\tif(this.useEDL){\n\t\t\t\t\tnormalizationMaterial.uniforms.edlStrength.value = viewer.edlStrength;\n\t\t\t\t\tnormalizationMaterial.uniforms.radius.value = viewer.edlRadius;\n\t\t\t\t\tnormalizationMaterial.uniforms.screenWidth.value = width;\n\t\t\t\t\tnormalizationMaterial.uniforms.screenHeight.value = height;\n\t\t\t\t\tnormalizationMaterial.uniforms.uEDLMap.value = this.rtDepth.texture;\n\t\t\t\t}\n\n\t\t\t\tnormalizationMaterial.uniforms.uWeightMap.value = this.rtAttribute.texture;\n\t\t\t\tnormalizationMaterial.uniforms.uDepthMap.value = this.rtAttribute.depthTexture;\n\t\t\t\t\n\t\t\t\tUtils.screenPass.render(viewer.renderer, normalizationMaterial);\n\t\t\t}\n\n\t\t\tviewer.renderer.render(viewer.scene.scene, camera);\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.scene\", viewer: viewer});\n\n\t\t\tviewer.renderer.clearDepth();\n\n\t\t\tviewer.transformationTool.update();\n\n\t\t\tviewer.dispatchEvent({type: \"render.pass.perspective_overlay\",viewer: viewer});\n\n\t\t\tviewer.renderer.render(viewer.controls.sceneControls, camera);\n\t\t\tviewer.renderer.render(viewer.clippingTool.sceneVolume, camera);\n\t\t\tviewer.renderer.render(viewer.transformationTool.scene, camera);\n\n\t\t\tviewer.renderer.setViewport(width - viewer.navigationCube.width, \n\t\t\t\t\t\t\t\t\t\theight - viewer.navigationCube.width, \n\t\t\t\t\t\t\t\t\t\tviewer.navigationCube.width, viewer.navigationCube.width);\n\t\t\tviewer.renderer.render(viewer.navigationCube, viewer.navigationCube.camera);\t\t\n\t\t\tviewer.renderer.setViewport(0, 0, width, height);\n\t\t\t\n\t\t\tviewer.dispatchEvent({type: \"render.pass.end\",viewer: viewer});\n\n\t\t}\n\n\t}\n\n\tclass View{\n\t\tconstructor () {\n\t\t\tthis.position = new Vector3(0, 0, 0);\n\n\t\t\tthis.yaw = Math.PI / 4;\n\t\t\tthis._pitch = -Math.PI / 4;\n\t\t\tthis.radius = 1;\n\n\t\t\tthis.maxPitch = Math.PI / 2;\n\t\t\tthis.minPitch = -Math.PI / 2;\n\t\t}\n\n\t\tclone () {\n\t\t\tlet c = new View();\n\t\t\tc.yaw = this.yaw;\n\t\t\tc._pitch = this.pitch;\n\t\t\tc.radius = this.radius;\n\t\t\tc.maxPitch = this.maxPitch;\n\t\t\tc.minPitch = this.minPitch;\n\n\t\t\treturn c;\n\t\t}\n\n\t\tget pitch () {\n\t\t\treturn this._pitch;\n\t\t}\n\n\t\tset pitch (angle) {\n\t\t\tthis._pitch = Math.max(Math.min(angle, this.maxPitch), this.minPitch);\n\t\t}\n\n\t\tget direction () {\n\t\t\tlet dir = new Vector3(0, 1, 0);\n\n\t\t\tdir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch);\n\t\t\tdir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw);\n\n\t\t\treturn dir;\n\t\t}\n\n\t\tset direction (dir) {\n\n\t\t\t//if(dir.x === dir.y){\n\t\t\tif(dir.x === 0 && dir.y === 0){\n\t\t\t\tthis.pitch = Math.PI / 2 * Math.sign(dir.z);\n\t\t\t}else {\n\t\t\t\tlet yaw = Math.atan2(dir.y, dir.x) - Math.PI / 2;\n\t\t\t\tlet pitch = Math.atan2(dir.z, Math.sqrt(dir.x * dir.x + dir.y * dir.y));\n\n\t\t\t\tthis.yaw = yaw;\n\t\t\t\tthis.pitch = pitch;\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tlookAt(t){\n\t\t\tlet V;\n\t\t\tif(arguments.length === 1){\n\t\t\t\tV = new Vector3().subVectors(t, this.position);\n\t\t\t}else if(arguments.length === 3){\n\t\t\t\tV = new Vector3().subVectors(new Vector3(...arguments), this.position);\n\t\t\t}\n\n\t\t\tlet radius = V.length();\n\t\t\tlet dir = V.normalize();\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.direction = dir;\n\t\t}\n\n\t\tgetPivot () {\n\t\t\treturn new Vector3().addVectors(this.position, this.direction.multiplyScalar(this.radius));\n\t\t}\n\n\t\tgetSide () {\n\t\t\tlet side = new Vector3(1, 0, 0);\n\t\t\tside.applyAxisAngle(new Vector3(0, 0, 1), this.yaw);\n\n\t\t\treturn side;\n\t\t}\n\n\t\tpan (x, y) {\n\t\t\tlet dir = new Vector3(0, 1, 0);\n\t\t\tdir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch);\n\t\t\tdir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw);\n\n\t\t\t// let side = new THREE.Vector3(1, 0, 0);\n\t\t\t// side.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw);\n\n\t\t\tlet side = this.getSide();\n\n\t\t\tlet up = side.clone().cross(dir);\n\n\t\t\tlet pan = side.multiplyScalar(x).add(up.multiplyScalar(y));\n\n\t\t\tthis.position = this.position.add(pan);\n\t\t\t// this.target = this.target.add(pan);\n\t\t}\n\n\t\ttranslate (x, y, z) {\n\t\t\tlet dir = new Vector3(0, 1, 0);\n\t\t\tdir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch);\n\t\t\tdir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw);\n\n\t\t\tlet side = new Vector3(1, 0, 0);\n\t\t\tside.applyAxisAngle(new Vector3(0, 0, 1), this.yaw);\n\n\t\t\tlet up = side.clone().cross(dir);\n\n\t\t\tlet t = side.multiplyScalar(x)\n\t\t\t\t.add(dir.multiplyScalar(y))\n\t\t\t\t.add(up.multiplyScalar(z));\n\n\t\t\tthis.position = this.position.add(t);\n\t\t}\n\n\t\ttranslateWorld (x, y, z) {\n\t\t\tthis.position.x += x;\n\t\t\tthis.position.y += y;\n\t\t\tthis.position.z += z;\n\t\t}\n\n\t\tsetView(position, target, duration = 0, callback = null){\n\n\t\t\tlet endPosition = null;\n\t\t\tif(position instanceof Array){\n\t\t\t\tendPosition = new Vector3(...position);\n\t\t\t}else if(position.x != null){\n\t\t\t\tendPosition = position.clone();\n\t\t\t}\n\n\t\t\tlet endTarget = null;\n\t\t\tif(target instanceof Array){\n\t\t\t\tendTarget = new Vector3(...target);\n\t\t\t}else if(target.x != null){\n\t\t\t\tendTarget = target.clone();\n\t\t\t}\n\t\t\t\n\t\t\tconst startPosition = this.position.clone();\n\t\t\tconst startTarget = this.getPivot();\n\n\t\t\t//const endPosition = position.clone();\n\t\t\t//const endTarget = target.clone();\n\n\t\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t\tif(duration === 0){\n\t\t\t\tthis.position.copy(endPosition);\n\t\t\t\tthis.lookAt(endTarget);\n\t\t\t}else {\n\t\t\t\tlet value = {x: 0};\n\t\t\t\tlet tween = new TWEEN.Tween(value).to({x: 1}, duration);\n\t\t\t\ttween.easing(easing);\n\t\t\t\t//this.tweens.push(tween);\n\n\t\t\t\ttween.onUpdate(() => {\n\t\t\t\t\tlet t = value.x;\n\n\t\t\t\t\t//console.log(t);\n\n\t\t\t\t\tconst pos = new Vector3(\n\t\t\t\t\t\t(1 - t) * startPosition.x + t * endPosition.x,\n\t\t\t\t\t\t(1 - t) * startPosition.y + t * endPosition.y,\n\t\t\t\t\t\t(1 - t) * startPosition.z + t * endPosition.z,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst target = new Vector3(\n\t\t\t\t\t\t(1 - t) * startTarget.x + t * endTarget.x,\n\t\t\t\t\t\t(1 - t) * startTarget.y + t * endTarget.y,\n\t\t\t\t\t\t(1 - t) * startTarget.z + t * endTarget.z,\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.position.copy(pos);\n\t\t\t\t\tthis.lookAt(target);\n\n\t\t\t\t});\n\n\t\t\t\ttween.start();\n\n\t\t\t\ttween.onComplete(() => {\n\t\t\t\t\tif(callback){\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tclass Scene$1 extends EventDispatcher{\n\n\t\tconstructor(){\n\t\t\tsuper();\n\n\t\t\tthis.annotations = new Annotation();\n\t\t\t\n\t\t\tthis.scene = new Scene();\n\t\t\tthis.sceneBG = new Scene();\n\t\t\tthis.scenePointCloud = new Scene();\n\n\t\t\tthis.cameraP = new PerspectiveCamera(this.fov, 1, 0.1, 1000*1000);\n\t\t\tthis.cameraO = new OrthographicCamera(-1, 1, 1, -1, 0.1, 1000*1000);\n\t\t\tthis.cameraVR = new PerspectiveCamera();\n\t\t\tthis.cameraBG = new Camera();\n\t\t\tthis.cameraScreenSpace = new OrthographicCamera(-1, 1, 1, -1, 0.1, 10);\n\t\t\tthis.cameraMode = CameraMode.PERSPECTIVE;\n\t\t\tthis.overrideCamera = null;\n\t\t\tthis.pointclouds = [];\n\n\t\t\tthis.measurements = [];\n\t\t\tthis.profiles = [];\n\t\t\tthis.volumes = [];\n\t\t\tthis.polygonClipVolumes = [];\n\t\t\tthis.cameraAnimations = [];\n\t\t\tthis.orientedImages = [];\n\t\t\tthis.images360 = [];\n\t\t\tthis.geopackages = [];\n\t\t\t\n\t\t\tthis.fpControls = null;\n\t\t\tthis.orbitControls = null;\n\t\t\tthis.earthControls = null;\n\t\t\tthis.geoControls = null;\n\t\t\tthis.deviceControls = null;\n\t\t\tthis.inputHandler = null;\n\n\t\t\tthis.view = new View();\n\n\t\t\tthis.directionalLight = null;\n\n\t\t\tthis.initialize();\n\t\t}\n\n\t\testimateHeightAt (position) {\n\t\t\tlet height = null;\n\t\t\tlet fromSpacing = Infinity;\n\n\t\t\tfor (let pointcloud of this.pointclouds) {\n\t\t\t\tif (pointcloud.root.geometryNode === undefined) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet pHeight = null;\n\t\t\t\tlet pFromSpacing = Infinity;\n\n\t\t\t\tlet lpos = position.clone().sub(pointcloud.position);\n\t\t\t\tlpos.z = 0;\n\t\t\t\tlet ray = new Ray(lpos, new Vector3(0, 0, 1));\n\n\t\t\t\tlet stack = [pointcloud.root];\n\t\t\t\twhile (stack.length > 0) {\n\t\t\t\t\tlet node = stack.pop();\n\t\t\t\t\tlet box = node.getBoundingBox();\n\n\t\t\t\t\tlet inside = ray.intersectBox(box);\n\n\t\t\t\t\tif (!inside) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet h = node.geometryNode.mean.z +\n\t\t\t\t\t\tpointcloud.position.z +\n\t\t\t\t\t\tnode.geometryNode.boundingBox.min.z;\n\n\t\t\t\t\tif (node.geometryNode.spacing <= pFromSpacing) {\n\t\t\t\t\t\tpHeight = h;\n\t\t\t\t\t\tpFromSpacing = node.geometryNode.spacing;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let index of Object.keys(node.children)) {\n\t\t\t\t\t\tlet child = node.children[index];\n\t\t\t\t\t\tif (child.geometryNode) {\n\t\t\t\t\t\t\tstack.push(node.children[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (height === null || pFromSpacing < fromSpacing) {\n\t\t\t\t\theight = pHeight;\n\t\t\t\t\tfromSpacing = pFromSpacing;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn height;\n\t\t}\n\t\t\n\t\tgetBoundingBox(pointclouds = this.pointclouds){\n\t\t\tlet box = new Box3();\n\n\t\t\tthis.scenePointCloud.updateMatrixWorld(true);\n\t\t\tthis.referenceFrame.updateMatrixWorld(true);\n\n\t\t\tfor (let pointcloud of pointclouds) {\n\t\t\t\tpointcloud.updateMatrixWorld(true);\n\n\t\t\t\tlet pointcloudBox = pointcloud.pcoGeometry.tightBoundingBox ? pointcloud.pcoGeometry.tightBoundingBox : pointcloud.boundingBox;\n\t\t\t\tlet boxWorld = Utils.computeTransformedBoundingBox(pointcloudBox, pointcloud.matrixWorld);\n\t\t\t\tbox.union(boxWorld);\n\t\t\t}\n\n\t\t\treturn box;\n\t\t}\n\n\t\taddPointCloud (pointcloud) {\n\t\t\tthis.pointclouds.push(pointcloud);\n\t\t\tthis.scenePointCloud.add(pointcloud);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'pointcloud_added',\n\t\t\t\tpointcloud: pointcloud\n\t\t\t});\n\t\t}\n\n\t\taddVolume (volume) {\n\t\t\tthis.volumes.push(volume);\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'volume_added',\n\t\t\t\t'scene': this,\n\t\t\t\t'volume': volume\n\t\t\t});\n\t\t}\n\n\t\taddOrientedImages(images){\n\t\t\tthis.orientedImages.push(images);\n\t\t\tthis.scene.add(images.node);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'oriented_images_added',\n\t\t\t\t'scene': this,\n\t\t\t\t'images': images\n\t\t\t});\n\t\t};\n\n\t\tremoveOrientedImages(images){\n\t\t\tlet index = this.orientedImages.indexOf(images);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.orientedImages.splice(index, 1);\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t'type': 'oriented_images_removed',\n\t\t\t\t\t'scene': this,\n\t\t\t\t\t'images': images\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tadd360Images(images){\n\t\t\tthis.images360.push(images);\n\t\t\tthis.scene.add(images.node);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': '360_images_added',\n\t\t\t\t'scene': this,\n\t\t\t\t'images': images\n\t\t\t});\n\t\t}\n\n\t\tremove360Images(images){\n\t\t\tlet index = this.images360.indexOf(images);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.images360.splice(index, 1);\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t'type': '360_images_removed',\n\t\t\t\t\t'scene': this,\n\t\t\t\t\t'images': images\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\taddGeopackage(geopackage){\n\t\t\tthis.geopackages.push(geopackage);\n\t\t\tthis.scene.add(geopackage.node);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'geopackage_added',\n\t\t\t\t'scene': this,\n\t\t\t\t'geopackage': geopackage\n\t\t\t});\n\t\t};\n\n\t\tremoveGeopackage(geopackage){\n\t\t\tlet index = this.geopackages.indexOf(geopackage);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.geopackages.splice(index, 1);\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t'type': 'geopackage_removed',\n\t\t\t\t\t'scene': this,\n\t\t\t\t\t'geopackage': geopackage\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tremoveVolume (volume) {\n\t\t\tlet index = this.volumes.indexOf(volume);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.volumes.splice(index, 1);\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t'type': 'volume_removed',\n\t\t\t\t\t'scene': this,\n\t\t\t\t\t'volume': volume\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\taddCameraAnimation(animation) {\n\t\t\tthis.cameraAnimations.push(animation);\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'camera_animation_added',\n\t\t\t\t'scene': this,\n\t\t\t\t'animation': animation\n\t\t\t});\n\t\t};\n\n\t\tremoveCameraAnimation(animation){\n\t\t\tlet index = this.cameraAnimations.indexOf(volume);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.cameraAnimations.splice(index, 1);\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t'type': 'camera_animation_removed',\n\t\t\t\t\t'scene': this,\n\t\t\t\t\t'animation': animation\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\taddPolygonClipVolume(volume){\n\t\t\tthis.polygonClipVolumes.push(volume);\n\t\t\tthis.dispatchEvent({\n\t\t\t\t\"type\": \"polygon_clip_volume_added\",\n\t\t\t\t\"scene\": this,\n\t\t\t\t\"volume\": volume\n\t\t\t});\n\t\t};\n\t\t\n\t\tremovePolygonClipVolume(volume){\n\t\t\tlet index = this.polygonClipVolumes.indexOf(volume);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.polygonClipVolumes.splice(index, 1);\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\"type\": \"polygon_clip_volume_removed\",\n\t\t\t\t\t\"scene\": this,\n\t\t\t\t\t\"volume\": volume\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\t\n\t\taddMeasurement(measurement){\n\t\t\tmeasurement.lengthUnit = this.lengthUnit;\n\t\t\tmeasurement.lengthUnitDisplay = this.lengthUnitDisplay;\n\t\t\tthis.measurements.push(measurement);\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'measurement_added',\n\t\t\t\t'scene': this,\n\t\t\t\t'measurement': measurement\n\t\t\t});\n\t\t};\n\n\t\tremoveMeasurement (measurement) {\n\t\t\tlet index = this.measurements.indexOf(measurement);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.measurements.splice(index, 1);\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t'type': 'measurement_removed',\n\t\t\t\t\t'scene': this,\n\t\t\t\t\t'measurement': measurement\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\taddProfile (profile) {\n\t\t\tthis.profiles.push(profile);\n\t\t\tthis.dispatchEvent({\n\t\t\t\t'type': 'profile_added',\n\t\t\t\t'scene': this,\n\t\t\t\t'profile': profile\n\t\t\t});\n\t\t}\n\n\t\tremoveProfile (profile) {\n\t\t\tlet index = this.profiles.indexOf(profile);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.profiles.splice(index, 1);\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t'type': 'profile_removed',\n\t\t\t\t\t'scene': this,\n\t\t\t\t\t'profile': profile\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tremoveAllMeasurements () {\n\t\t\twhile (this.measurements.length > 0) {\n\t\t\t\tthis.removeMeasurement(this.measurements[0]);\n\t\t\t}\n\n\t\t\twhile (this.profiles.length > 0) {\n\t\t\t\tthis.removeProfile(this.profiles[0]);\n\t\t\t}\n\n\t\t\twhile (this.volumes.length > 0) {\n\t\t\t\tthis.removeVolume(this.volumes[0]);\n\t\t\t}\n\t\t}\n\n\t\tremoveAllClipVolumes(){\n\t\t\tlet clipVolumes = this.volumes.filter(volume => volume.clip === true);\n\t\t\tfor(let clipVolume of clipVolumes){\n\t\t\t\tthis.removeVolume(clipVolume);\n\t\t\t}\n\n\t\t\twhile(this.polygonClipVolumes.length > 0){\n\t\t\t\tthis.removePolygonClipVolume(this.polygonClipVolumes[0]);\n\t\t\t}\n\t\t}\n\n\t\tgetActiveCamera() {\n\n\t\t\tif(this.overrideCamera){\n\t\t\t\treturn this.overrideCamera;\n\t\t\t}\n\n\t\t\tif(this.cameraMode === CameraMode.PERSPECTIVE){\n\t\t\t\treturn this.cameraP;\n\t\t\t}else if(this.cameraMode === CameraMode.ORTHOGRAPHIC){\n\t\t\t\treturn this.cameraO;\n\t\t\t}else if(this.cameraMode === CameraMode.VR){\n\t\t\t\treturn this.cameraVR;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t\t\n\t\tinitialize(){\n\t\t\t\n\t\t\tthis.referenceFrame = new Object3D();\n\t\t\tthis.referenceFrame.matrixAutoUpdate = false;\n\t\t\tthis.scenePointCloud.add(this.referenceFrame);\n\n\t\t\tthis.cameraP.up.set(0, 0, 1);\n\t\t\tthis.cameraP.position.set(1000, 1000, 1000);\n\t\t\tthis.cameraO.up.set(0, 0, 1);\n\t\t\tthis.cameraO.position.set(1000, 1000, 1000);\n\t\t\t//this.camera.rotation.y = -Math.PI / 4;\n\t\t\t//this.camera.rotation.x = -Math.PI / 6;\n\t\t\tthis.cameraScreenSpace.lookAt(new Vector3(0, 0, 0), new Vector3(0, 0, -1), new Vector3(0, 1, 0));\n\t\t\t\n\t\t\tthis.directionalLight = new DirectionalLight( 0xffffff, 0.5 );\n\t\t\tthis.directionalLight.position.set( 10, 10, 10 );\n\t\t\tthis.directionalLight.lookAt( new Vector3(0, 0, 0));\n\t\t\tthis.scenePointCloud.add( this.directionalLight );\n\t\t\t\n\t\t\tlet light = new AmbientLight( 0x555555 ); // soft white light\n\t\t\tthis.scenePointCloud.add( light );\n\n\t\t\t{ // background\n\t\t\t\tlet texture = Utils.createBackgroundTexture(512, 512);\n\n\t\t\t\ttexture.minFilter = texture.magFilter = NearestFilter;\n\t\t\t\ttexture.minFilter = texture.magFilter = LinearFilter;\n\t\t\t\tlet bg = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry(2, 2, 1),\n\t\t\t\t\tnew MeshBasicMaterial({\n\t\t\t\t\t\tmap: texture\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\tbg.material.depthTest = false;\n\t\t\t\tbg.material.depthWrite = false;\n\t\t\t\tthis.sceneBG.add(bg);\n\t\t\t}\n\n\t\t\t// { // lights\n\t\t\t// \t{\n\t\t\t// \t\tlet light = new THREE.DirectionalLight(0xffffff);\n\t\t\t// \t\tlight.position.set(10, 10, 1);\n\t\t\t// \t\tlight.target.position.set(0, 0, 0);\n\t\t\t// \t\tthis.scene.add(light);\n\t\t\t// \t}\n\n\t\t\t// \t{\n\t\t\t// \t\tlet light = new THREE.DirectionalLight(0xffffff);\n\t\t\t// \t\tlight.position.set(-10, 10, 1);\n\t\t\t// \t\tlight.target.position.set(0, 0, 0);\n\t\t\t// \t\tthis.scene.add(light);\n\t\t\t// \t}\n\n\t\t\t// \t{\n\t\t\t// \t\tlet light = new THREE.DirectionalLight(0xffffff);\n\t\t\t// \t\tlight.position.set(0, -10, 20);\n\t\t\t// \t\tlight.target.position.set(0, 0, 0);\n\t\t\t// \t\tthis.scene.add(light);\n\t\t\t// \t}\n\t\t\t// }\n\t\t}\n\t\t\n\t\taddAnnotation(position, args = {}){\t\t\n\t\t\tif(position instanceof Array){\n\t\t\t\targs.position = new Vector3().fromArray(position);\n\t\t\t} else if (position.x != null) {\n\t\t\t\targs.position = position;\n\t\t\t}\n\t\t\tlet annotation = new Annotation(args);\n\t\t\tthis.annotations.add(annotation);\n\n\t\t\treturn annotation;\n\t\t}\n\n\t\tgetAnnotations () {\n\t\t\treturn this.annotations;\n\t\t};\n\n\t\tremoveAnnotation(annotationToRemove) {\n\t\t\tthis.annotations.remove(annotationToRemove);\n\t\t}\n\t};\n\n\t// http://epsg.io/\n\tproj4.defs([\n\t\t['UTM10N', '+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs'],\n\t\t['EPSG:6339', '+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6340', '+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6341', '+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6342', '+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6343', '+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6344', '+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6345', '+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6346', '+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6347', '+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:6348', '+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs'],\n\t\t['EPSG:26910', '+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26911', '+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26912', '+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26913', '+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26914', '+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26915', '+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26916', '+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26917', '+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26918', '+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t\t['EPSG:26919', '+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '],\n\t]);\n\n\tclass MapView{\n\n\t\tconstructor (viewer) {\n\t\t\tthis.viewer = viewer;\n\n\t\t\tthis.webMapService = 'WMTS';\n\t\t\tthis.mapProjectionName = 'EPSG:3857';\n\t\t\tthis.mapProjection = proj4.defs(this.mapProjectionName);\n\t\t\tthis.sceneProjection = null;\n\n\t\t\tthis.extentsLayer = null;\n\t\t\tthis.cameraLayer = null;\n\t\t\tthis.toolLayer = null;\n\t\t\tthis.sourcesLayer = null;\n\t\t\tthis.sourcesLabelLayer = null;\n\t\t\tthis.images360Layer = null;\n\t\t\tthis.enabled = false;\n\n\t\t\tthis.createAnnotationStyle = (text) => {\n\t\t\t\treturn [\n\t\t\t\t\tnew ol.style.Style({\n\t\t\t\t\t\timage: new ol.style.Circle({\n\t\t\t\t\t\t\tradius: 10,\n\t\t\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\t\t\tcolor: [255, 255, 255, 0.5],\n\t\t\t\t\t\t\t\twidth: 2\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\t\t\tcolor: [0, 0, 0, 0.5]\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t];\n\t\t\t};\n\n\t\t\tthis.createLabelStyle = (text) => {\n\t\t\t\tlet style = new ol.style.Style({\n\t\t\t\t\timage: new ol.style.Circle({\n\t\t\t\t\t\tradius: 6,\n\t\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\t\tcolor: 'white',\n\t\t\t\t\t\t\twidth: 2\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\t\tcolor: 'green'\n\t\t\t\t\t\t})\n\t\t\t\t\t}),\n\t\t\t\t\ttext: new ol.style.Text({\n\t\t\t\t\t\tfont: '12px helvetica,sans-serif',\n\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\t\tcolor: '#000'\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\t\tcolor: '#fff',\n\t\t\t\t\t\t\twidth: 2\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t});\n\n\t\t\t\treturn style;\n\t\t\t};\n\t\t}\n\n\t\tshowSources (show) {\n\t\t\tthis.sourcesLayer.setVisible(show);\n\t\t\tthis.sourcesLabelLayer.setVisible(show);\n\t\t}\n\n\t\tinit () {\n\n\t\t\tif(typeof ol === \"undefined\"){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.elMap = $('#potree_map');\n\t\t\tthis.elMap.draggable({ handle: $('#potree_map_header') });\n\t\t\tthis.elMap.resizable();\n\n\t\t\tthis.elTooltip = $(`<div style=\"position: relative; z-index: 100\"></div>`);\n\t\t\tthis.elMap.append(this.elTooltip);\n\n\t\t\tlet extentsLayer = this.getExtentsLayer();\n\t\t\tlet cameraLayer = this.getCameraLayer();\n\t\t\tthis.getToolLayer();\n\t\t\tlet sourcesLayer = this.getSourcesLayer();\n\t\t\tthis.images360Layer = this.getImages360Layer();\n\t\t\tthis.getSourcesLabelLayer();\n\t\t\tthis.getAnnotationsLayer();\n\n\t\t\tlet mousePositionControl = new ol.control.MousePosition({\n\t\t\t\tcoordinateFormat: ol.coordinate.createStringXY(5),\n\t\t\t\tprojection: 'EPSG:4326',\n\t\t\t\tundefinedHTML: '&nbsp;'\n\t\t\t});\n\n\t\t\tlet _this = this;\n\t\t\tlet DownloadSelectionControl = function (optOptions) {\n\t\t\t\tlet options = optOptions || {};\n\n\t\t\t\t// TOGGLE TILES\n\t\t\t\tlet btToggleTiles = document.createElement('button');\n\t\t\t\tbtToggleTiles.innerHTML = 'T';\n\t\t\t\tbtToggleTiles.addEventListener('click', () => {\n\t\t\t\t\tlet visible = sourcesLayer.getVisible();\n\t\t\t\t\t_this.showSources(!visible);\n\t\t\t\t}, false);\n\t\t\t\tbtToggleTiles.style.float = 'left';\n\t\t\t\tbtToggleTiles.title = 'show / hide tiles';\n\n\t\t\t\t// DOWNLOAD SELECTED TILES\n\t\t\t\tlet link = document.createElement('a');\n\t\t\t\tlink.href = '#';\n\t\t\t\tlink.download = 'list.txt';\n\t\t\t\tlink.style.float = 'left';\n\n\t\t\t\tlet button = document.createElement('button');\n\t\t\t\tbutton.innerHTML = 'D';\n\t\t\t\tlink.appendChild(button);\n\n\t\t\t\tlet handleDownload = (e) => {\n\t\t\t\t\tlet features = selectedFeatures.getArray();\n\n\t\t\t\t\tlet url = [document.location.protocol, '//', document.location.host, document.location.pathname].join('');\n\n\t\t\t\t\tif (features.length === 0) {\n\t\t\t\t\t\talert('No tiles were selected. Select area with ctrl + left mouse button!');\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (features.length === 1) {\n\t\t\t\t\t\tlet feature = features[0];\n\n\t\t\t\t\t\tif (feature.source) {\n\t\t\t\t\t\t\tlet cloudjsurl = feature.pointcloud.pcoGeometry.url;\n\t\t\t\t\t\t\tlet sourceurl = new URL(url + '/../' + cloudjsurl + '/../source/' + feature.source.name);\n\t\t\t\t\t\t\tlink.href = sourceurl.href;\n\t\t\t\t\t\t\tlink.download = feature.source.name;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet content = '';\n\t\t\t\t\t\tfor (let i = 0; i < features.length; i++) {\n\t\t\t\t\t\t\tlet feature = features[i];\n\n\t\t\t\t\t\t\tif (feature.source) {\n\t\t\t\t\t\t\t\tlet cloudjsurl = feature.pointcloud.pcoGeometry.url;\n\t\t\t\t\t\t\t\tlet sourceurl = new URL(url + '/../' + cloudjsurl + '/../source/' + feature.source.name);\n\t\t\t\t\t\t\t\tcontent += sourceurl.href + '\\n';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet uri = 'data:application/octet-stream;base64,' + btoa(content);\n\t\t\t\t\t\tlink.href = uri;\n\t\t\t\t\t\tlink.download = 'list_of_files.txt';\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tbutton.addEventListener('click', handleDownload, false);\n\n\t\t\t\t// assemble container\n\t\t\t\tlet element = document.createElement('div');\n\t\t\t\telement.className = 'ol-unselectable ol-control';\n\t\t\t\telement.appendChild(link);\n\t\t\t\telement.appendChild(btToggleTiles);\n\t\t\t\telement.style.bottom = '0.5em';\n\t\t\t\telement.style.left = '0.5em';\n\t\t\t\telement.title = 'Download file or list of selected tiles. Select tile with left mouse button or area using ctrl + left mouse.';\n\n\t\t\t\tol.control.Control.call(this, {\n\t\t\t\t\telement: element,\n\t\t\t\t\ttarget: options.target\n\t\t\t\t});\n\t\t\t};\n\t\t\tol.inherits(DownloadSelectionControl, ol.control.Control);\n\n\t\t\tthis.map = new ol.Map({\n\t\t\t\tcontrols: ol.control.defaults({\n\t\t\t\t\tattributionOptions: ({\n\t\t\t\t\t\tcollapsible: false\n\t\t\t\t\t})\n\t\t\t\t}).extend([\n\t\t\t\t\t// this.controls.zoomToExtent,\n\t\t\t\t\tnew DownloadSelectionControl(),\n\t\t\t\t\tmousePositionControl\n\t\t\t\t]),\n\t\t\t\tlayers: [\n\t\t\t\t\tnew ol.layer.Tile({source: new ol.source.OSM()}),\n\t\t\t\t\tthis.toolLayer,\n\t\t\t\t\tthis.annotationsLayer,\n\t\t\t\t\tthis.sourcesLayer,\n\t\t\t\t\tthis.sourcesLabelLayer,\n\t\t\t\t\tthis.images360Layer,\n\t\t\t\t\textentsLayer,\n\t\t\t\t\tcameraLayer\n\t\t\t\t],\n\t\t\t\ttarget: 'potree_map_content',\n\t\t\t\tview: new ol.View({\n\t\t\t\t\tcenter: this.olCenter,\n\t\t\t\t\tzoom: 9\n\t\t\t\t})\n\t\t\t});\n\n\t\t\t// DRAGBOX / SELECTION\n\t\t\tthis.dragBoxLayer = new ol.layer.Vector({\n\t\t\t\tsource: new ol.source.Vector({}),\n\t\t\t\tstyle: new ol.style.Style({\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: 'rgba(0, 0, 255, 1)',\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t});\n\t\t\tthis.map.addLayer(this.dragBoxLayer);\n\n\t\t\tlet select = new ol.interaction.Select();\n\t\t\tthis.map.addInteraction(select);\n\n\t\t\tlet selectedFeatures = select.getFeatures();\n\n\t\t\tlet dragBox = new ol.interaction.DragBox({\n\t\t\t\tcondition: ol.events.condition.platformModifierKeyOnly\n\t\t\t});\n\n\t\t\tthis.map.addInteraction(dragBox);\n\n\t\t\t// this.map.on('pointermove', evt => {\n\t\t\t// \tlet pixel = evt.pixel;\n\t\t\t// \tlet feature = this.map.forEachFeatureAtPixel(pixel, function (feature) {\n\t\t\t// \t\treturn feature;\n\t\t\t// \t});\n\n\t\t\t// \t// console.log(feature);\n\t\t\t// \t// this.elTooltip.css(\"display\", feature ? '' : 'none');\n\t\t\t// \tthis.elTooltip.css('display', 'none');\n\t\t\t// \tif (feature && feature.onHover) {\n\t\t\t// \t\tfeature.onHover(evt);\n\t\t\t// \t\t// overlay.setPosition(evt.coordinate);\n\t\t\t// \t\t// tooltip.innerHTML = feature.get('name');\n\t\t\t// \t}\n\t\t\t// });\n\n\t\t\tthis.map.on('click', evt => {\n\t\t\t\tlet pixel = evt.pixel;\n\t\t\t\tlet feature = this.map.forEachFeatureAtPixel(pixel, function (feature) {\n\t\t\t\t\treturn feature;\n\t\t\t\t});\n\n\t\t\t\tif (feature && feature.onClick) {\n\t\t\t\t\tfeature.onClick(evt);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdragBox.on('boxend', (e) => {\n\t\t\t\t// features that intersect the box are added to the collection of\n\t\t\t\t// selected features, and their names are displayed in the \"info\"\n\t\t\t\t// div\n\t\t\t\tlet extent = dragBox.getGeometry().getExtent();\n\t\t\t\tthis.getSourcesLayer().getSource().forEachFeatureIntersectingExtent(extent, (feature) => {\n\t\t\t\t\tselectedFeatures.push(feature);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// clear selection when drawing a new box and when clicking on the map\n\t\t\tdragBox.on('boxstart', (e) => {\n\t\t\t\tselectedFeatures.clear();\n\t\t\t});\n\t\t\tthis.map.on('click', () => {\n\t\t\t\tselectedFeatures.clear();\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('scene_changed', e => {\n\t\t\t\tthis.setScene(e.scene);\n\t\t\t});\n\n\t\t\tthis.onPointcloudAdded = e => {\n\t\t\t\tthis.load(e.pointcloud);\n\t\t\t};\n\n\t\t\tthis.on360ImagesAdded = e => {\n\t\t\t\tthis.addImages360(e.images);\n\t\t\t};\n\n\t\t\tthis.onAnnotationAdded = e => {\n\t\t\t\tif (!this.sceneProjection) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet annotation = e.annotation;\n\t\t\t\tlet position = annotation.position;\n\t\t\t\tlet mapPos = this.toMap.forward([position.x, position.y]);\n\t\t\t\tlet feature = new ol.Feature({\n\t\t\t\t\tgeometry: new ol.geom.Point(mapPos),\n\t\t\t\t\tname: annotation.title\n\t\t\t\t});\n\t\t\t\tfeature.setStyle(this.createAnnotationStyle(annotation.title));\n\n\t\t\t\tfeature.onHover = evt => {\n\t\t\t\t\tlet coordinates = feature.getGeometry().getCoordinates();\n\t\t\t\t\tlet p = this.map.getPixelFromCoordinate(coordinates);\n\n\t\t\t\t\tthis.elTooltip.html(annotation.title);\n\t\t\t\t\tthis.elTooltip.css('display', '');\n\t\t\t\t\tthis.elTooltip.css('left', `${p[0]}px`);\n\t\t\t\t\tthis.elTooltip.css('top', `${p[1]}px`);\n\t\t\t\t};\n\n\t\t\t\tfeature.onClick = evt => {\n\t\t\t\t\tannotation.clickTitle();\n\t\t\t\t};\n\n\t\t\t\tthis.getAnnotationsLayer().getSource().addFeature(feature);\n\t\t\t};\n\n\t\t\tthis.setScene(this.viewer.scene);\n\t\t}\n\n\t\tsetScene (scene) {\n\t\t\tif (this.scene === scene) {\n\t\t\t\treturn;\n\t\t\t};\n\n\t\t\tif (this.scene) {\n\t\t\t\tthis.scene.removeEventListener('pointcloud_added', this.onPointcloudAdded);\n\t\t\t\tthis.scene.removeEventListener('360_images_added', this.on360ImagesAdded);\n\t\t\t\tthis.scene.annotations.removeEventListener('annotation_added', this.onAnnotationAdded);\n\t\t\t}\n\n\t\t\tthis.scene = scene;\n\n\t\t\tthis.scene.addEventListener('pointcloud_added', this.onPointcloudAdded);\n\t\t\tthis.scene.addEventListener('360_images_added', this.on360ImagesAdded);\n\t\t\tthis.scene.annotations.addEventListener('annotation_added', this.onAnnotationAdded);\n\n\t\t\tfor (let pointcloud of this.viewer.scene.pointclouds) {\n\t\t\t\tthis.load(pointcloud);\n\t\t\t}\n\n\t\t\tthis.viewer.scene.annotations.traverseDescendants(annotation => {\n\t\t\t\tthis.onAnnotationAdded({annotation: annotation});\n\t\t\t});\n\n\t\t\tfor(let images of this.viewer.scene.images360){\n\t\t\t\tthis.on360ImagesAdded({images: images});\n\t\t\t}\n\t\t}\n\n\t\tgetExtentsLayer () {\n\t\t\tif (this.extentsLayer) {\n\t\t\t\treturn this.extentsLayer;\n\t\t\t}\n\n\t\t\tthis.gExtent = new ol.geom.LineString([[0, 0], [0, 0]]);\n\n\t\t\tlet feature = new ol.Feature(this.gExtent);\n\t\t\tlet featureVector = new ol.source.Vector({\n\t\t\t\tfeatures: [feature]\n\t\t\t});\n\n\t\t\tthis.extentsLayer = new ol.layer.Vector({\n\t\t\t\tsource: featureVector,\n\t\t\t\tstyle: new ol.style.Style({\n\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\tcolor: 'rgba(255, 255, 255, 0.2)'\n\t\t\t\t\t}),\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: '#0000ff',\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t}),\n\t\t\t\t\timage: new ol.style.Circle({\n\t\t\t\t\t\tradius: 3,\n\t\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\t\tcolor: '#0000ff'\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t});\n\n\t\t\treturn this.extentsLayer;\n\t\t}\n\n\t\tgetAnnotationsLayer () {\n\t\t\tif (this.annotationsLayer) {\n\t\t\t\treturn this.annotationsLayer;\n\t\t\t}\n\n\t\t\tthis.annotationsLayer = new ol.layer.Vector({\n\t\t\t\tsource: new ol.source.Vector({\n\t\t\t\t}),\n\t\t\t\tstyle: new ol.style.Style({\n\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)'\n\t\t\t\t\t}),\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)',\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t});\n\n\t\t\treturn this.annotationsLayer;\n\t\t}\n\n\t\tgetCameraLayer () {\n\t\t\tif (this.cameraLayer) {\n\t\t\t\treturn this.cameraLayer;\n\t\t\t}\n\n\t\t\t// CAMERA LAYER\n\t\t\tthis.gCamera = new ol.geom.LineString([[0, 0], [0, 0], [0, 0], [0, 0]]);\n\t\t\tlet feature = new ol.Feature(this.gCamera);\n\t\t\tlet featureVector = new ol.source.Vector({\n\t\t\t\tfeatures: [feature]\n\t\t\t});\n\n\t\t\tthis.cameraLayer = new ol.layer.Vector({\n\t\t\t\tsource: featureVector,\n\t\t\t\tstyle: new ol.style.Style({\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: '#0000ff',\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t});\n\n\t\t\treturn this.cameraLayer;\n\t\t}\n\n\t\tgetToolLayer () {\n\t\t\tif (this.toolLayer) {\n\t\t\t\treturn this.toolLayer;\n\t\t\t}\n\n\t\t\tthis.toolLayer = new ol.layer.Vector({\n\t\t\t\tsource: new ol.source.Vector({\n\t\t\t\t}),\n\t\t\t\tstyle: new ol.style.Style({\n\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)'\n\t\t\t\t\t}),\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)',\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t});\n\n\t\t\treturn this.toolLayer;\n\t\t}\n\n\t\tgetImages360Layer(){\n\t\t\tif(this.images360Layer){\n\t\t\t\treturn this.images360Layer;\n\t\t\t}\n\n\t\t\tlet style = new ol.style.Style({\n\t\t\t\timage: new ol.style.Circle({\n\t\t\t\t\tradius: 4,\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: [255, 0, 0, 1],\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t}),\n\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\tcolor: [255, 100, 100, 1]\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t});\n\t\t\t\n\t\t\tlet layer = new ol.layer.Vector({\n\t\t\t\tsource: new ol.source.Vector({}),\n\t\t\t\tstyle: style,\n\t\t\t});\n\n\t\t\tthis.images360Layer = layer;\n\n\t\t\treturn this.images360Layer;\n\t\t}\n\n\t\tgetSourcesLayer () {\n\t\t\tif (this.sourcesLayer) {\n\t\t\t\treturn this.sourcesLayer;\n\t\t\t}\n\n\t\t\tthis.sourcesLayer = new ol.layer.Vector({\n\t\t\t\tsource: new ol.source.Vector({}),\n\t\t\t\tstyle: new ol.style.Style({\n\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\tcolor: 'rgba(0, 0, 150, 0.1)'\n\t\t\t\t\t}),\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: 'rgba(0, 0, 150, 1)',\n\t\t\t\t\t\twidth: 1\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t});\n\n\t\t\treturn this.sourcesLayer;\n\t\t}\n\n\t\tgetSourcesLabelLayer () {\n\t\t\tif (this.sourcesLabelLayer) {\n\t\t\t\treturn this.sourcesLabelLayer;\n\t\t\t}\n\n\t\t\tthis.sourcesLabelLayer = new ol.layer.Vector({\n\t\t\t\tsource: new ol.source.Vector({\n\t\t\t\t}),\n\t\t\t\tstyle: new ol.style.Style({\n\t\t\t\t\tfill: new ol.style.Fill({\n\t\t\t\t\t\tcolor: 'rgba(255, 0, 0, 0.1)'\n\t\t\t\t\t}),\n\t\t\t\t\tstroke: new ol.style.Stroke({\n\t\t\t\t\t\tcolor: 'rgba(255, 0, 0, 1)',\n\t\t\t\t\t\twidth: 2\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t\tminResolution: 0.01,\n\t\t\t\tmaxResolution: 20\n\t\t\t});\n\n\t\t\treturn this.sourcesLabelLayer;\n\t\t}\n\n\t\tsetSceneProjection (sceneProjection) {\n\t\t\tthis.sceneProjection = sceneProjection;\n\t\t\tthis.toMap = proj4(this.sceneProjection, this.mapProjection);\n\t\t\tthis.toScene = proj4(this.mapProjection, this.sceneProjection);\n\t\t};\n\n\t\tgetMapExtent () {\n\t\t\tlet bb = this.viewer.getBoundingBox();\n\n\t\t\tlet bottomLeft = this.toMap.forward([bb.min.x, bb.min.y]);\n\t\t\tlet bottomRight = this.toMap.forward([bb.max.x, bb.min.y]);\n\t\t\tlet topRight = this.toMap.forward([bb.max.x, bb.max.y]);\n\t\t\tlet topLeft = this.toMap.forward([bb.min.x, bb.max.y]);\n\n\t\t\tlet extent = {\n\t\t\t\tbottomLeft: bottomLeft,\n\t\t\t\tbottomRight: bottomRight,\n\t\t\t\ttopRight: topRight,\n\t\t\t\ttopLeft: topLeft\n\t\t\t};\n\n\t\t\treturn extent;\n\t\t};\n\n\t\tgetMapCenter () {\n\t\t\tlet mapExtent = this.getMapExtent();\n\n\t\t\tlet mapCenter = [\n\t\t\t\t(mapExtent.bottomLeft[0] + mapExtent.topRight[0]) / 2,\n\t\t\t\t(mapExtent.bottomLeft[1] + mapExtent.topRight[1]) / 2\n\t\t\t];\n\n\t\t\treturn mapCenter;\n\t\t};\n\n\t\tupdateToolDrawings () {\n\t\t\tthis.toolLayer.getSource().clear();\n\n\t\t\tlet profiles = this.viewer.profileTool.profiles;\n\t\t\tfor (let i = 0; i < profiles.length; i++) {\n\t\t\t\tlet profile = profiles[i];\n\t\t\t\tlet coordinates = [];\n\n\t\t\t\tfor (let j = 0; j < profile.points.length; j++) {\n\t\t\t\t\tlet point = profile.points[j];\n\t\t\t\t\tlet pointMap = this.toMap.forward([point.x, point.y]);\n\t\t\t\t\tcoordinates.push(pointMap);\n\t\t\t\t}\n\n\t\t\t\tlet line = new ol.geom.LineString(coordinates);\n\t\t\t\tlet feature = new ol.Feature(line);\n\t\t\t\tthis.toolLayer.getSource().addFeature(feature);\n\t\t\t}\n\n\t\t\tlet measurements = this.viewer.measuringTool.measurements;\n\t\t\tfor (let i = 0; i < measurements.length; i++) {\n\t\t\t\tlet measurement = measurements[i];\n\t\t\t\tlet coordinates = [];\n\n\t\t\t\tfor (let j = 0; j < measurement.points.length; j++) {\n\t\t\t\t\tlet point = measurement.points[j].position;\n\t\t\t\t\tlet pointMap = this.toMap.forward([point.x, point.y]);\n\t\t\t\t\tcoordinates.push(pointMap);\n\t\t\t\t}\n\n\t\t\t\tif (measurement.closed && measurement.points.length > 0) {\n\t\t\t\t\tcoordinates.push(coordinates[0]);\n\t\t\t\t}\n\n\t\t\t\tlet line = new ol.geom.LineString(coordinates);\n\t\t\t\tlet feature = new ol.Feature(line);\n\t\t\t\tthis.toolLayer.getSource().addFeature(feature);\n\t\t\t}\n\t\t}\n\n\t\taddImages360(images){\n\t\t\tlet transform = this.toMap.forward;\n\t\t\tlet layer = this.getImages360Layer();\n\n\t\t\tfor(let image of images.images){\n\n\t\t\t\tlet p = transform([image.position[0], image.position[1]]);\n\n\t\t\t\tlet feature = new ol.Feature({\n\t\t\t\t\t'geometry': new ol.geom.Point(p),\n\t\t\t\t});\n\n\t\t\t\tfeature.onClick = () => {\n\t\t\t\t\timages.focus(image);\n\t\t\t\t};\n\n\t\t\t\tlayer.getSource().addFeature(feature);\n\t\t\t}\n\t\t}\n\n\t\tasync load (pointcloud) {\n\t\t\tif (!pointcloud) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!pointcloud.projection) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!this.sceneProjection) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.setSceneProjection(pointcloud.projection);\n\t\t\t\t}catch (e) {\n\t\t\t\t\tconsole.log('Failed projection:', e);\n\n\t\t\t\t\tif (pointcloud.fallbackProjection) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconsole.log('Trying fallback projection...');\n\t\t\t\t\t\t\tthis.setSceneProjection(pointcloud.fallbackProjection);\n\t\t\t\t\t\t\tconsole.log('Set projection from fallback');\n\t\t\t\t\t\t}catch (e) {\n\t\t\t\t\t\t\tconsole.log('Failed fallback projection:', e);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet mapExtent = this.getMapExtent();\n\t\t\tlet mapCenter = this.getMapCenter();\n\n\t\t\tlet view = this.map.getView();\n\t\t\tview.setCenter(mapCenter);\n\n\t\t\tthis.gExtent.setCoordinates([\n\t\t\t\tmapExtent.bottomLeft,\n\t\t\t\tmapExtent.bottomRight,\n\t\t\t\tmapExtent.topRight,\n\t\t\t\tmapExtent.topLeft,\n\t\t\t\tmapExtent.bottomLeft\n\t\t\t]);\n\n\t\t\tview.fit(this.gExtent, [300, 300], {\n\t\t\t\tconstrainResolution: false\n\t\t\t});\n\n\t\t\tif (pointcloud.pcoGeometry.type == 'ept'){ \n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet url = `${pointcloud.pcoGeometry.url}/../sources.json`;\n\t\t\t//let response = await fetch(url);\n\n\t\t\tfetch(url).then(async (response) => {\n\t\t\t\tlet data = await response.json();\n\t\t\t\n\t\t\t\tlet sources = data.sources;\n\n\t\t\t\tfor (let i = 0; i < sources.length; i++) {\n\t\t\t\t\tlet source = sources[i];\n\t\t\t\t\tlet name = source.name;\n\t\t\t\t\tlet bounds = source.bounds;\n\n\t\t\t\t\tlet mapBounds = {\n\t\t\t\t\t\tmin: this.toMap.forward([bounds.min[0], bounds.min[1]]),\n\t\t\t\t\t\tmax: this.toMap.forward([bounds.max[0], bounds.max[1]])\n\t\t\t\t\t};\n\t\t\t\t\tlet mapCenter = [\n\t\t\t\t\t\t(mapBounds.min[0] + mapBounds.max[0]) / 2,\n\t\t\t\t\t\t(mapBounds.min[1] + mapBounds.max[1]) / 2\n\t\t\t\t\t];\n\n\t\t\t\t\tlet p1 = this.toMap.forward([bounds.min[0], bounds.min[1]]);\n\t\t\t\t\tlet p2 = this.toMap.forward([bounds.max[0], bounds.min[1]]);\n\t\t\t\t\tlet p3 = this.toMap.forward([bounds.max[0], bounds.max[1]]);\n\t\t\t\t\tlet p4 = this.toMap.forward([bounds.min[0], bounds.max[1]]);\n\n\t\t\t\t\t// let feature = new ol.Feature({\n\t\t\t\t\t//\t'geometry': new ol.geom.LineString([p1, p2, p3, p4, p1])\n\t\t\t\t\t// });\n\t\t\t\t\tlet feature = new ol.Feature({\n\t\t\t\t\t\t'geometry': new ol.geom.Polygon([[p1, p2, p3, p4, p1]])\n\t\t\t\t\t});\n\t\t\t\t\tfeature.source = source;\n\t\t\t\t\tfeature.pointcloud = pointcloud;\n\t\t\t\t\tthis.getSourcesLayer().getSource().addFeature(feature);\n\n\t\t\t\t\tfeature = new ol.Feature({\n\t\t\t\t\t\tgeometry: new ol.geom.Point(mapCenter),\n\t\t\t\t\t\tname: name\n\t\t\t\t\t});\n\t\t\t\t\tfeature.setStyle(this.createLabelStyle(name));\n\t\t\t\t\tthis.sourcesLabelLayer.getSource().addFeature(feature);\n\t\t\t\t}\n\t\t\t}).catch(() => {\n\t\t\t\t\n\t\t\t});\n\n\t\t}\n\n\t\ttoggle () {\n\t\t\tif (this.elMap.is(':visible')) {\n\t\t\t\tthis.elMap.css('display', 'none');\n\t\t\t\tthis.enabled = false;\n\t\t\t} else {\n\t\t\t\tthis.elMap.css('display', 'block');\n\t\t\t\tthis.enabled = true;\n\t\t\t}\n\t\t}\n\n\t\tupdate (delta) {\n\t\t\tif (!this.sceneProjection) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet pm = $('#potree_map');\n\n\t\t\tif (!this.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// resize\n\t\t\tlet mapSize = this.map.getSize();\n\t\t\tlet resized = (pm.width() !== mapSize[0] || pm.height() !== mapSize[1]);\n\t\t\tif (resized) {\n\t\t\t\tthis.map.updateSize();\n\t\t\t}\n\n\t\t\t//\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\n\t\t\tlet scale = this.map.getView().getResolution();\n\t\t\tlet campos = camera.position;\n\t\t\tlet camdir = camera.getWorldDirection(new Vector3());\n\t\t\tlet sceneLookAt = camdir.clone().multiplyScalar(30 * scale).add(campos);\n\t\t\tlet geoPos = camera.position;\n\t\t\tlet geoLookAt = sceneLookAt;\n\t\t\tlet mapPos = new Vector2().fromArray(this.toMap.forward([geoPos.x, geoPos.y]));\n\t\t\tlet mapLookAt = new Vector2().fromArray(this.toMap.forward([geoLookAt.x, geoLookAt.y]));\n\t\t\tlet mapDir = new Vector2().subVectors(mapLookAt, mapPos).normalize();\n\n\t\t\tmapLookAt = mapPos.clone().add(mapDir.clone().multiplyScalar(30 * scale));\n\t\t\tlet mapLength = mapPos.distanceTo(mapLookAt);\n\t\t\tlet mapSide = new Vector2(-mapDir.y, mapDir.x);\n\n\t\t\tlet p1 = mapPos.toArray();\n\t\t\tlet p2 = mapLookAt.clone().sub(mapSide.clone().multiplyScalar(0.3 * mapLength)).toArray();\n\t\t\tlet p3 = mapLookAt.clone().add(mapSide.clone().multiplyScalar(0.3 * mapLength)).toArray();\n\n\t\t\tthis.gCamera.setCoordinates([p1, p2, p3, p1]);\n\t\t}\n\n\t\tget sourcesVisible () {\n\t\t\treturn this.getSourcesLayer().getVisible();\n\t\t}\n\n\t\tset sourcesVisible (value) {\n\t\t\tthis.getSourcesLayer().setVisible(value);\n\t\t}\n\n\t}\n\n\t/**\n\t *\n\t * @author roy.mdr / http://...\n\t *\n\t */\n\n\tclass DXFProfileExporter {\n\n\t\tstatic toXYZ(points, flatten = false) {\n\n\t\t\t/*\n\t\t\tpoints: {\n\t\t\t\t...\n\t\t\t\tdata: {\n\t\t\t\t\tmileage: [0, 1, 2...], -> one per point\n\t\t\t\t\tposition: [0, 0, 0, 1, 1, 1, 2, 2, 2...], -> X, Y, Z\n\t\t\t\t\trgba: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2...] -> R, G, B, A\n\t\t\t\t},\n\t\t\t\tnumPoints: Int\n\t\t\t}\n\t\t\t*/\n\n\t\t\tconst pointsXYZ = {\n\t\t\t\tx: [],\n\t\t\t\ty: [],\n\t\t\t\tz: [],\n\t\t\t\tminX:  Number.MAX_VALUE,\n\t\t\t\tminY:  Number.MAX_VALUE,\n\t\t\t\tminZ:  Number.MAX_VALUE,\n\t\t\t\tmaxX: -Number.MAX_VALUE,\n\t\t\t\tmaxY: -Number.MAX_VALUE,\n\t\t\t\tmaxZ: -Number.MAX_VALUE,\n\t\t\t\tnumPoints: 0\n\t\t\t};\n\n\t\t\tconst pData    = points.data;\n\t\t\tconst pMileage = pData.mileage;\n\t\t\tconst pCoords  = pData.position;\n\t\t\tconst pColor   = pData.rgba;\n\n\t\t\tfor (let pIx = 0; pIx < points.numPoints; pIx++) {\n\n\t\t\t\tconst poMileage = pMileage[pIx];\n\t\t\t\tconst poCoordX  = pCoords[ ((pIx * 3) + 0) ];\n\t\t\t\tconst poCoordY  = pCoords[ ((pIx * 3) + 1) ];\n\t\t\t\tconst poCoordZ  = pCoords[ ((pIx * 3) + 2) ];\n\t\t\t\t// const poColorR  = pColor[ ((pIx * 4) + 0) ];\n\t\t\t\t// const poColorG  = pColor[ ((pIx * 4) + 1) ];\n\t\t\t\t// const poColorB  = pColor[ ((pIx * 4) + 2) ];\n\t\t\t\t// const poColorA  = pColor[ ((pIx * 4) + 3) ];\n\n\t\t\t\tif (flatten === true) {\n\n\t\t\t\t\tpointsXYZ.x.push(poMileage);\n\t\t\t\t\tpointsXYZ.y.push(0);\n\t\t\t\t\tpointsXYZ.z.push(poCoordZ);\n\n\t\t\t\t\t// Get boundaries X\n\t\t\t\t\tif (pointsXYZ.maxX < poMileage) pointsXYZ.maxX = poMileage;\n\t\t\t\t\tif (pointsXYZ.minX > poMileage) pointsXYZ.minX = poMileage;\n\n\t\t\t\t\t// Get boundaries Z\n\t\t\t\t\tif (pointsXYZ.maxZ < poCoordZ) pointsXYZ.maxZ = poCoordZ;\n\t\t\t\t\tif (pointsXYZ.minZ > poCoordZ) pointsXYZ.minZ = poCoordZ;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpointsXYZ.x.push(poCoordX);\n\t\t\t\t\tpointsXYZ.y.push(poCoordY);\n\t\t\t\t\tpointsXYZ.z.push(poCoordZ);\n\n\t\t\t\t\t// Get boundaries X\n\t\t\t\t\tif (pointsXYZ.maxX < poCoordX) pointsXYZ.maxX = poCoordX;\n\t\t\t\t\tif (pointsXYZ.minX > poCoordX) pointsXYZ.minX = poCoordX;\n\n\t\t\t\t\t// Get boundaries Y\n\t\t\t\t\tif (pointsXYZ.maxY < poCoordY) pointsXYZ.maxY = poCoordY;\n\t\t\t\t\tif (pointsXYZ.minY > poCoordY) pointsXYZ.minY = poCoordY;\n\n\t\t\t\t\t// Get boundaries Z\n\t\t\t\t\tif (pointsXYZ.maxZ < poCoordZ) pointsXYZ.maxZ = poCoordZ;\n\t\t\t\t\tif (pointsXYZ.minZ > poCoordZ) pointsXYZ.minZ = poCoordZ;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (flatten === true) {\n\t\t\t\t// Set boundaries Y\n\t\t\t\tpointsXYZ.maxY = 0;\n\t\t\t\tpointsXYZ.minY = 0;\n\t\t\t}\n\n\t\t\tpointsXYZ.numPoints = points.numPoints;\n\n\t\t\treturn pointsXYZ;\n\t\t}\n\n\t\tstatic plotPCloudPoint(x, y, z) {\n\n\t\t\tconst dxfSection = `0\nPOINT\n8\nlayer_pointCloud\n10\n${x}\n20\n${y}\n30\n${z}\n`;\n\n\t\t\treturn dxfSection;\n\t\t}\n\n\t\tstatic toString(points, flatten = false) {\n\n\t\t\tconst pCloud = DXFProfileExporter.toXYZ(points, flatten);\n\n\t\t\tconst dxfHeader = `999\nDXF created from potree\n0\nSECTION\n2\nHEADER\n9\n$ACADVER\n1\nAC1006\n9\n$INSBASE\n10\n0.0\n20\n0.0\n30\n0.0\n9\n$EXTMIN\n10\n${pCloud.minX}\n20\n${pCloud.minY}\n30\n${pCloud.minZ}\n9\n$EXTMAX\n10\n${pCloud.maxX}\n20\n${pCloud.maxY}\n30\n${pCloud.maxZ}\n0\nENDSEC\n`;\n\n\t\t\tlet dxfBody = `0\nSECTION\n2\nENTITIES\n`;\n\n\t\t\tfor (let i = 0; i < pCloud.numPoints; i++) {\n\t\t\t\tdxfBody += DXFProfileExporter.plotPCloudPoint(pCloud.x[i], pCloud.y[i], pCloud.z[i]);\n\t\t\t}\n\n\t\t\tdxfBody += `0\nENDSEC\n`;\n\n\t\t\tconst dxf = dxfHeader + dxfBody + '0\\nEOF';\n\n\t\t\treturn dxf;\n\t\t}\n\n\t}\n\n\tclass CSVExporter {\n\t\tstatic toString (points) {\n\t\t\tlet string = '';\n\n\t\t\tlet attributes = Object.keys(points.data)\n\t\t\t\t.filter(a => a !== 'normal')\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\tif (a === 'position') return -1;\n\t\t\t\t\tif (b === 'position') return 1;\n\t\t\t\t\tif (a === 'rgba') return -1;\n\t\t\t\t\tif (b === 'rgba') return 1;\n\t\t\t\t});\n\n\t\t\tlet headerValues = [];\n\t\t\tfor (let attribute of attributes) {\n\t\t\t\tlet itemSize = points.data[attribute].length / points.numPoints;\n\n\t\t\t\tif (attribute === 'position') {\n\t\t\t\t\theaderValues = headerValues.concat(['x', 'y', 'z']);\n\t\t\t\t} else if (attribute === 'rgba') {\n\t\t\t\t\theaderValues = headerValues.concat(['r', 'g', 'b', 'a']);\n\t\t\t\t} else if (itemSize > 1) {\n\t\t\t\t\tfor (let i = 0; i < itemSize; i++) {\n\t\t\t\t\t\theaderValues.push(`${attribute}_${i}`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\theaderValues.push(attribute);\n\t\t\t\t}\n\t\t\t}\n\t\t\tstring = headerValues.join(', ') + '\\n';\n\n\t\t\tfor (let i = 0; i < points.numPoints; i++) {\n\t\t\t\tlet values = [];\n\n\t\t\t\tfor (let attribute of attributes) {\n\t\t\t\t\tlet itemSize = points.data[attribute].length / points.numPoints;\n\t\t\t\t\tlet value = points.data[attribute]\n\t\t\t\t\t\t.subarray(itemSize * i, itemSize * i + itemSize)\n\t\t\t\t\t\t.join(', ');\n\t\t\t\t\tvalues.push(value);\n\t\t\t\t}\n\n\t\t\t\tstring += values.join(', ') + '\\n';\n\t\t\t}\n\n\t\t\treturn string;\n\t\t}\n\t};\n\n\tclass LASExporter {\n\t\tstatic toLAS (points) {\n\t\t\t// TODO Unused: let string = '';\n\n\t\t\tlet boundingBox = points.boundingBox;\n\t\t\tlet offset = boundingBox.min.clone();\n\t\t\tlet diagonal = boundingBox.min.distanceTo(boundingBox.max);\n\t\t\tlet scale = new Vector3(0.001, 0.001, 0.001);\n\t\t\tif (diagonal > 1000 * 1000) {\n\t\t\t\tscale = new Vector3(0.01, 0.01, 0.01);\n\t\t\t} else {\n\t\t\t\tscale = new Vector3(0.001, 0.001, 0.001);\n\t\t\t}\n\n\t\t\tlet setString = function (string, offset, buffer) {\n\t\t\t\tlet view = new Uint8Array(buffer);\n\n\t\t\t\tfor (let i = 0; i < string.length; i++) {\n\t\t\t\t\tlet charCode = string.charCodeAt(i);\n\t\t\t\t\tview[offset + i] = charCode;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet buffer = new ArrayBuffer(227 + 28 * points.numPoints);\n\t\t\tlet view = new DataView(buffer);\n\t\t\tlet u8View = new Uint8Array(buffer);\n\t\t\t// let u16View = new Uint16Array(buffer);\n\n\t\t\tsetString('LASF', 0, buffer);\n\t\t\tu8View[24] = 1;\n\t\t\tu8View[25] = 2;\n\n\t\t\t// system identifier o:26 l:32\n\n\t\t\t// generating software o:58 l:32\n\t\t\tsetString('Potree 1.7', 58, buffer);\n\n\t\t\t// file creation day of year o:90 l:2\n\t\t\t// file creation year o:92 l:2\n\n\t\t\t// header size o:94 l:2\n\t\t\tview.setUint16(94, 227, true);\n\n\t\t\t// offset to point data o:96 l:4\n\t\t\tview.setUint32(96, 227, true);\n\n\t\t\t// number of letiable length records o:100 l:4\n\n\t\t\t// point data record format 104 1\n\t\t\tu8View[104] = 2;\n\n\t\t\t// point data record length 105 2\n\t\t\tview.setUint16(105, 28, true);\n\n\t\t\t// number of point records 107 4\n\t\t\tview.setUint32(107, points.numPoints, true);\n\n\t\t\t// number of points by return 111 20\n\n\t\t\t// x scale factor 131 8\n\t\t\tview.setFloat64(131, scale.x, true);\n\n\t\t\t// y scale factor 139 8\n\t\t\tview.setFloat64(139, scale.y, true);\n\n\t\t\t// z scale factor 147 8\n\t\t\tview.setFloat64(147, scale.z, true);\n\n\t\t\t// x offset 155 8\n\t\t\tview.setFloat64(155, offset.x, true);\n\n\t\t\t// y offset 163 8\n\t\t\tview.setFloat64(163, offset.y, true);\n\n\t\t\t// z offset 171 8\n\t\t\tview.setFloat64(171, offset.z, true);\n\n\t\t\t// max x 179 8\n\t\t\tview.setFloat64(179, boundingBox.max.x, true);\n\n\t\t\t// min x 187 8\n\t\t\tview.setFloat64(187, boundingBox.min.x, true);\n\n\t\t\t// max y 195 8\n\t\t\tview.setFloat64(195, boundingBox.max.y, true);\n\n\t\t\t// min y 203 8\n\t\t\tview.setFloat64(203, boundingBox.min.y, true);\n\n\t\t\t// max z 211 8\n\t\t\tview.setFloat64(211, boundingBox.max.z, true);\n\n\t\t\t// min z 219 8\n\t\t\tview.setFloat64(219, boundingBox.min.z, true);\n\n\t\t\tlet boffset = 227;\n\t\t\tfor (let i = 0; i < points.numPoints; i++) {\n\n\t\t\t\tlet px = points.data.position[3 * i + 0];\n\t\t\t\tlet py = points.data.position[3 * i + 1];\n\t\t\t\tlet pz = points.data.position[3 * i + 2];\n\n\t\t\t\tlet ux = parseInt((px - offset.x) / scale.x);\n\t\t\t\tlet uy = parseInt((py - offset.y) / scale.y);\n\t\t\t\tlet uz = parseInt((pz - offset.z) / scale.z);\n\n\t\t\t\tview.setUint32(boffset + 0, ux, true);\n\t\t\t\tview.setUint32(boffset + 4, uy, true);\n\t\t\t\tview.setUint32(boffset + 8, uz, true);\n\n\t\t\t\tif (points.data.intensity) {\n\t\t\t\t\tview.setUint16(boffset + 12, (points.data.intensity[i]), true);\n\t\t\t\t}\n\n\t\t\t\tlet rt = 0;\n\t\t\t\tif (points.data.returnNumber) {\n\t\t\t\t\trt += points.data.returnNumber[i];\n\t\t\t\t}\n\t\t\t\tif (points.data.numberOfReturns) {\n\t\t\t\t\trt += (points.data.numberOfReturns[i] << 3);\n\t\t\t\t}\n\t\t\t\tview.setUint8(boffset + 14, rt);\n\n\t\t\t\tif (points.data.classification) {\n\t\t\t\t\tview.setUint8(boffset + 15, points.data.classification[i]);\n\t\t\t\t}\n\t\t\t\t// scan angle rank\n\t\t\t\t// user data\n\t\t\t\t// point source id\n\t\t\t\tif (points.data.pointSourceID) {\n\t\t\t\t\tview.setUint16(boffset + 18, points.data.pointSourceID[i]);\n\t\t\t\t}\n\n\t\t\t\tif (points.data.rgba || points.data.color) {\n\t\t\t\t\tlet rgba = points.data.rgba ?? points.data.color;\n\t\t\t\t\tview.setUint16(boffset + 20, (rgba[4 * i + 0] * 255), true);\n\t\t\t\t\tview.setUint16(boffset + 22, (rgba[4 * i + 1] * 255), true);\n\t\t\t\t\tview.setUint16(boffset + 24, (rgba[4 * i + 2] * 255), true);\n\t\t\t\t}\n\n\t\t\t\tboffset += 28;\n\t\t\t}\n\n\t\t\treturn buffer;\n\t\t}\n\t\t\n\t}\n\n\tfunction copyMaterial(source, target){\n\n\t\tfor(let name of Object.keys(target.uniforms)){\n\t\t\ttarget.uniforms[name].value = source.uniforms[name].value;\n\t\t}\n\n\t\ttarget.gradientTexture = source.gradientTexture;\n\t\ttarget.visibleNodesTexture = source.visibleNodesTexture;\n\t\ttarget.classificationTexture = source.classificationTexture;\n\t\ttarget.matcapTexture = source.matcapTexture;\n\n\t\ttarget.activeAttributeName = source.activeAttributeName;\n\t\ttarget.ranges = source.ranges;\n\n\t\t//target.updateShaderSource();\n\t}\n\n\n\tclass Batch{\n\n\t\tconstructor(geometry, material){\n\t\t\tthis.geometry = geometry;\n\t\t\tthis.material = material;\n\n\t\t\tthis.sceneNode = new Points(geometry, material);\n\n\t\t\tthis.geometryNode = {\n\t\t\t\testimatedSpacing: 1.0,\n\t\t\t\tgeometry: geometry,\n\t\t\t};\n\t\t}\n\n\t\tgetLevel(){\n\t\t\treturn 0;\n\t\t}\n\n\t}\n\n\tclass ProfileFakeOctree extends PointCloudTree{\n\n\t\tconstructor(octree){\n\t\t\tsuper();\n\n\t\t\tthis.trueOctree = octree;\n\t\t\tthis.pcoGeometry = octree.pcoGeometry;\n\t\t\tthis.points = [];\n\t\t\tthis.visibleNodes = [];\n\t\t\t\n\t\t\t//this.material = this.trueOctree.material;\n\t\t\tthis.material = new PointCloudMaterial$1();\n\t\t\t//this.material.copy(this.trueOctree.material);\n\t\t\tcopyMaterial(this.trueOctree.material, this.material);\n\t\t\tthis.material.pointSizeType = PointSizeType.FIXED;\n\n\t\t\tthis.batchSize = 100 * 1000;\n\t\t\tthis.currentBatch = null;\n\t\t}\n\n\t\tgetAttribute(name){\n\t\t\treturn this.trueOctree.getAttribute(name);\n\t\t}\n\n\t\tdispose(){\n\t\t\tfor(let node of this.visibleNodes){\n\t\t\t\tnode.geometry.dispose();\n\t\t\t}\n\n\t\t\tthis.visibleNodes = [];\n\t\t\tthis.currentBatch = null;\n\t\t\tthis.points = [];\n\t\t}\n\n\t\taddPoints(data){\n\t\t\t// since each call to addPoints can deliver very very few points,\n\t\t\t// we're going to batch them into larger buffers for efficiency.\n\n\t\t\tif(this.currentBatch === null){\n\t\t\t\tthis.currentBatch = this.createNewBatch(data);\n\t\t\t}\n\n\t\t\tthis.points.push(data);\n\n\n\t\t\tlet updateRange = {\n\t\t\t\tstart: this.currentBatch.geometry.drawRange.count,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tlet projectedBox = new Box3();\n\n\t\t\tlet truePos = new Vector3();\n\n\t\t\tfor(let i = 0; i < data.numPoints; i++){\n\n\t\t\t\tif(updateRange.start + updateRange.count >= this.batchSize){\n\t\t\t\t\t// current batch full, start new batch\n\n\t\t\t\t\tfor(let key of Object.keys(this.currentBatch.geometry.attributes)){\n\t\t\t\t\t\tlet attribute = this.currentBatch.geometry.attributes[key];\n\t\t\t\t\t\tattribute.updateRange.offset = updateRange.start;\n\t\t\t\t\t\tattribute.updateRange.count = updateRange.count;\n\t\t\t\t\t\tattribute.needsUpdate = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.currentBatch.geometry.computeBoundingBox();\n\t\t\t\t\tthis.currentBatch.geometry.computeBoundingSphere();\n\n\t\t\t\t\tthis.currentBatch = this.createNewBatch(data);\n\t\t\t\t\tupdateRange = {\n\t\t\t\t\t\tstart: 0,\n\t\t\t\t\t\tcount: 0\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\ttruePos.set(\n\t\t\t\t\tdata.data.position[3 * i + 0] + this.trueOctree.position.x,\n\t\t\t\t\tdata.data.position[3 * i + 1] + this.trueOctree.position.y,\n\t\t\t\t\tdata.data.position[3 * i + 2] + this.trueOctree.position.z,\n\t\t\t\t);\n\n\t\t\t\tlet x = data.data.mileage[i];\n\t\t\t\tlet y = 0;\n\t\t\t\tlet z = truePos.z;\n\n\t\t\t\tprojectedBox.expandByPoint(new Vector3(x, y, z));\n\n\t\t\t\tlet index = updateRange.start + updateRange.count;\n\t\t\t\tlet geometry = this.currentBatch.geometry;\n\n\t\t\t\tfor(let attributeName of Object.keys(data.data)){\n\t\t\t\t\tlet source = data.data[attributeName];\n\t\t\t\t\tlet target = geometry.attributes[attributeName];\n\t\t\t\t\tlet numElements = target.itemSize;\n\t\t\t\t\t\n\t\t\t\t\tfor(let item = 0; item < numElements; item++){\n\t\t\t\t\t\ttarget.array[numElements * index + item] = source[numElements * i + item];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t{\n\t\t\t\t\tlet position = geometry.attributes.position;\n\n\t\t\t\t\tposition.array[3 * index + 0] = x;\n\t\t\t\t\tposition.array[3 * index + 1] = y;\n\t\t\t\t\tposition.array[3 * index + 2] = z;\n\t\t\t\t}\n\n\t\t\t\tupdateRange.count++;\n\t\t\t\tthis.currentBatch.geometry.drawRange.count++;\n\t\t\t}\n\n\t\t\tfor(let key of Object.keys(this.currentBatch.geometry.attributes)){\n\t\t\t\tlet attribute = this.currentBatch.geometry.attributes[key];\n\t\t\t\tattribute.updateRange.offset = updateRange.start;\n\t\t\t\tattribute.updateRange.count = updateRange.count;\n\t\t\t\tattribute.needsUpdate = true;\n\t\t\t}\n\n\t\t\tdata.projectedBox = projectedBox;\n\n\t\t\tthis.projectedBox = this.points.reduce( (a, i) => a.union(i.projectedBox), new Box3());\n\t\t}\n\n\t\tcreateNewBatch(data){\n\t\t\tlet geometry = new BufferGeometry();\n\n\t\t\t// create new batches with batch_size elements of the same type as the attribute\n\t\t\tfor(let attributeName of Object.keys(data.data)){\n\t\t\t\tlet buffer = data.data[attributeName];\n\t\t\t\tlet numElements = buffer.length / data.numPoints; // 3 for pos, 4 for col, 1 for scalars\n\t\t\t\tlet constructor = buffer.constructor;\n\t\t\t\tlet normalized = false;\n\t\t\t\t\n\t\t\t\tif(this.trueOctree.root.sceneNode){\n\t\t\t\t\tif(this.trueOctree.root.sceneNode.geometry.attributes[attributeName]){\n\t\t\t\t\t\tnormalized = this.trueOctree.root.sceneNode.geometry.attributes[attributeName].normalized;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\tlet batchBuffer = new constructor(numElements * this.batchSize);\n\n\t\t\t\tlet bufferAttribute = new BufferAttribute(batchBuffer, numElements, normalized);\n\t\t\t\tbufferAttribute.potree = {\n\t\t\t\t\trange: [0, 1],\n\t\t\t\t};\n\n\t\t\t\tgeometry.setAttribute(attributeName, bufferAttribute);\n\t\t\t}\n\n\t\t\tgeometry.drawRange.start = 0;\n\t\t\tgeometry.drawRange.count = 0;\n\n\t\t\tlet batch = new Batch(geometry, this.material);\n\n\t\t\tthis.visibleNodes.push(batch);\n\n\t\t\treturn batch;\n\t\t}\n\t\t\n\t\tcomputeVisibilityTextureData(){\n\t\t\tlet data = new Uint8Array(this.visibleNodes.length * 4);\n\t\t\tlet offsets = new Map();\n\n\t\t\tfor(let i = 0; i < this.visibleNodes.length; i++){\n\t\t\t\tlet node = this.visibleNodes[i];\n\n\t\t\t\toffsets[node] = i;\n\t\t\t}\n\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\toffsets: offsets,\n\t\t\t};\n\t\t}\n\n\t}\n\n\tclass ProfileWindow extends EventDispatcher {\n\t\tconstructor (viewer) {\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.elRoot = $('#profile_window');\n\t\t\tthis.renderArea = this.elRoot.find('#profileCanvasContainer');\n\t\t\tthis.svg = d3.select('svg#profileSVG');\n\t\t\tthis.mouseIsDown = false;\n\n\t\t\tthis.projectedBox = new Box3();\n\t\t\tthis.pointclouds = new Map();\n\t\t\tthis.numPoints = 0;\n\t\t\tthis.lastAddPointsTimestamp = undefined;\n\n\t\t\tthis.mouse = new Vector2(0, 0);\n\t\t\tthis.scale = new Vector3(1, 1, 1);\n\n\t\t\tthis.autoFitEnabled = true; // completely disable/enable\n\t\t\tthis.autoFit = false; // internal\n\n\t\t\tlet cwIcon = `${exports.resourcePath}/icons/arrow_cw.svg`;\n\t\t\t$('#potree_profile_rotate_cw').attr('src', cwIcon);\n\n\t\t\tlet ccwIcon = `${exports.resourcePath}/icons/arrow_ccw.svg`;\n\t\t\t$('#potree_profile_rotate_ccw').attr('src', ccwIcon);\n\t\t\t\n\t\t\tlet forwardIcon = `${exports.resourcePath}/icons/arrow_up.svg`;\n\t\t\t$('#potree_profile_move_forward').attr('src', forwardIcon);\n\n\t\t\tlet backwardIcon = `${exports.resourcePath}/icons/arrow_down.svg`;\n\t\t\t$('#potree_profile_move_backward').attr('src', backwardIcon);\n\n\t\t\tlet dxf2DIcon = `${exports.resourcePath}/icons/file_dxf_2d.svg`;\n\t\t\t$('#potree_download_dxf2D_icon').attr('src', dxf2DIcon);\n\n\t\t\tlet dxf3DIcon = `${exports.resourcePath}/icons/file_dxf_3d.svg`;\n\t\t\t$('#potree_download_dxf3D_icon').attr('src', dxf3DIcon);\n\n\t\t\tlet csvIcon = `${exports.resourcePath}/icons/file_csv_2d.svg`;\n\t\t\t$('#potree_download_csv_icon').attr('src', csvIcon);\n\n\t\t\tlet lasIcon = `${exports.resourcePath}/icons/file_las_3d.svg`;\n\t\t\t$('#potree_download_las_icon').attr('src', lasIcon);\n\n\t\t\tlet closeIcon = `${exports.resourcePath}/icons/close.svg`;\n\t\t\t$('#closeProfileContainer').attr(\"src\", closeIcon);\n\n\t\t\tthis.initTHREE();\n\t\t\tthis.initSVG();\n\t\t\tthis.initListeners();\n\n\t\t\tthis.pRenderer = new Renderer(this.renderer);\n\n\t\t\tthis.elRoot.i18n();\n\t\t}\n\n\t\tinitListeners () {\n\t\t\t$(window).resize(() => {\n\t\t\t\tif (this.enabled) {\n\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.renderArea.mousedown(e => {\n\t\t\t\tthis.mouseIsDown = true;\n\t\t\t});\n\n\t\t\tthis.renderArea.mouseup(e => {\n\t\t\t\tthis.mouseIsDown = false;\n\t\t\t});\n\n\t\t\tlet viewerPickSphereSizeHandler = () => {\n\t\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\t\tlet domElement = this.viewer.renderer.domElement;\n\t\t\t\tlet distance = this.viewerPickSphere.position.distanceTo(camera.position);\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight);\n\t\t\t\tlet scale = (10 / pr);\n\t\t\t\tthis.viewerPickSphere.scale.set(scale, scale, scale);\n\t\t\t};\n\n\t\t\tthis.renderArea.mousemove(e => {\n\t\t\t\tif (this.pointclouds.size === 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet rect = this.renderArea[0].getBoundingClientRect();\n\t\t\t\tlet x = e.clientX - rect.left;\n\t\t\t\tlet y = e.clientY - rect.top;\n\n\t\t\t\tlet newMouse = new Vector2(x, y);\n\n\t\t\t\tif (this.mouseIsDown) {\n\t\t\t\t\t// DRAG\n\t\t\t\t\tthis.autoFit = false;\n\t\t\t\t\tthis.lastDrag = new Date().getTime();\n\n\t\t\t\t\tlet cPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)];\n\t\t\t\t\tlet ncPos = [this.scaleX.invert(newMouse.x), this.scaleY.invert(newMouse.y)];\n\n\t\t\t\t\tthis.camera.position.x -= ncPos[0] - cPos[0];\n\t\t\t\t\tthis.camera.position.z -= ncPos[1] - cPos[1];\n\n\t\t\t\t\tthis.render();\n\t\t\t\t} else if (this.pointclouds.size > 0) {\n\t\t\t\t\t// FIND HOVERED POINT\n\t\t\t\t\tlet radius = Math.abs(this.scaleX.invert(0) - this.scaleX.invert(40));\n\t\t\t\t\tlet mileage = this.scaleX.invert(newMouse.x);\n\t\t\t\t\tlet elevation = this.scaleY.invert(newMouse.y);\n\n\t\t\t\t\tlet closest = this.selectPoint(mileage, elevation, radius);\n\n\t\t\t\t\tif (closest) {\n\t\t\t\t\t\tlet point = closest.point;\n\n\t\t\t\t\t\tlet position = new Float64Array([\n\t\t\t\t\t\t\tpoint.position[0] + closest.pointcloud.position.x,\n\t\t\t\t\t\t\tpoint.position[1] + closest.pointcloud.position.y,\n\t\t\t\t\t\t\tpoint.position[2] + closest.pointcloud.position.z\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tthis.elRoot.find('#profileSelectionProperties').fadeIn(200);\n\t\t\t\t\t\tthis.pickSphere.visible = true;\n\t\t\t\t\t\tthis.pickSphere.scale.set(0.5 * radius, 0.5 * radius, 0.5 * radius);\n\t\t\t\t\t\tthis.pickSphere.position.set(point.mileage, 0, position[2]);\n\n\t\t\t\t\t\tthis.viewerPickSphere.position.set(...position);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!this.viewer.scene.scene.children.includes(this.viewerPickSphere)){\n\t\t\t\t\t\t\tthis.viewer.scene.scene.add(this.viewerPickSphere);\n\t\t\t\t\t\t\tif(!this.viewer.hasEventListener(\"update\", viewerPickSphereSizeHandler)){\n\t\t\t\t\t\t\t\tthis.viewer.addEventListener(\"update\", viewerPickSphereSizeHandler);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\tlet info = this.elRoot.find('#profileSelectionProperties');\n\t\t\t\t\t\tlet html = '<table>';\n\n\t\t\t\t\t\tfor (let attributeName of Object.keys(point)) {\n\n\t\t\t\t\t\t\tlet value = point[attributeName];\n\t\t\t\t\t\t\tlet attribute = closest.pointcloud.getAttribute(attributeName);\n\n\t\t\t\t\t\t\tlet transform = value => value;\n\t\t\t\t\t\t\tif(attribute && attribute.type.size > 4){\n\t\t\t\t\t\t\t\tlet range = attribute.initialRange;\n\t\t\t\t\t\t\t\tlet scale = 1 / (range[1] - range[0]);\n\t\t\t\t\t\t\t\tlet offset = range[0];\n\t\t\t\t\t\t\t\ttransform = value => value / scale + offset;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\tif (attributeName === 'position') {\n\t\t\t\t\t\t\t\tlet values = [...position].map(v => Utils.addCommas(v.toFixed(3)));\n\t\t\t\t\t\t\t\thtml += `\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>x</td>\n\t\t\t\t\t\t\t\t\t<td>${values[0]}</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>y</td>\n\t\t\t\t\t\t\t\t\t<td>${values[1]}</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>z</td>\n\t\t\t\t\t\t\t\t\t<td>${values[2]}</td>\n\t\t\t\t\t\t\t\t</tr>`;\n\t\t\t\t\t\t\t} else if (attributeName === 'rgba') {\n\t\t\t\t\t\t\t\thtml += `\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>${attributeName}</td>\n\t\t\t\t\t\t\t\t\t<td>${value.join(', ')}</td>\n\t\t\t\t\t\t\t\t</tr>`;\n\t\t\t\t\t\t\t} else if (attributeName === 'normal') {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else if (attributeName === 'mileage') {\n\t\t\t\t\t\t\t\thtml += `\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>${attributeName}</td>\n\t\t\t\t\t\t\t\t\t<td>${value.toFixed(3)}</td>\n\t\t\t\t\t\t\t\t</tr>`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thtml += `\n\t\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t\t<td>${attributeName}</td>\n\t\t\t\t\t\t\t\t\t<td>${transform(value)}</td>\n\t\t\t\t\t\t\t\t</tr>`;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\thtml += '</table>';\n\t\t\t\t\t\tinfo.html(html);\n\n\t\t\t\t\t\tthis.selectedPoint = point;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// this.pickSphere.visible = false;\n\t\t\t\t\t\t// this.selectedPoint = null;\n\n\t\t\t\t\t\tthis.viewer.scene.scene.add(this.viewerPickSphere);\n\n\t\t\t\t\t\tlet index = this.viewer.scene.scene.children.indexOf(this.viewerPickSphere);\n\t\t\t\t\t\tif(index >= 0){\n\t\t\t\t\t\t\tthis.viewer.scene.scene.children.splice(index, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.viewer.removeEventListener(\"update\", viewerPickSphereSizeHandler);\n\t\t\t\t\t\t\n\n\t\t\t\t\t}\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\n\t\t\t\tthis.mouse.copy(newMouse);\n\t\t\t});\n\n\t\t\tlet onWheel = e => {\n\t\t\t\tthis.autoFit = false;\n\n\t\t\t\tlet delta = 0;\n\t\t\t\tif (e.wheelDelta !== undefined) { // WebKit / Opera / Explorer 9\n\t\t\t\t\tdelta = e.wheelDelta;\n\t\t\t\t} else if (e.detail !== undefined) { // Firefox\n\t\t\t\t\tdelta = -e.detail;\n\t\t\t\t}\n\n\t\t\t\tlet ndelta = Math.sign(delta);\n\n\t\t\t\tlet cPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)];\n\n\t\t\t\tif (ndelta > 0) {\n\t\t\t\t\t// + 10%\n\t\t\t\t\tthis.scale.multiplyScalar(1.1);\n\t\t\t\t} else {\n\t\t\t\t\t// - 10%\n\t\t\t\t\tthis.scale.multiplyScalar(100 / 110);\n\t\t\t\t}\n\n\t\t\t\tthis.updateScales();\n\t\t\t\tlet ncPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)];\n\n\t\t\t\tthis.camera.position.x -= ncPos[0] - cPos[0];\n\t\t\t\tthis.camera.position.z -= ncPos[1] - cPos[1];\n\n\t\t\t\tthis.render();\n\t\t\t\tthis.updateScales();\n\t\t\t};\n\t\t\t$(this.renderArea)[0].addEventListener('mousewheel', onWheel, false);\n\t\t\t$(this.renderArea)[0].addEventListener('DOMMouseScroll', onWheel, false); // Firefox\n\n\t\t\t$('#closeProfileContainer').click(() => {\n\t\t\t\tthis.hide();\n\t\t\t});\n\n\t\t\tlet getProfilePoints = (truePosition) => {\n\t\t\t\tlet points = new Points$1();\n\t\t\t\t\n\t\t\t\tfor(let [pointcloud, entry] of this.pointclouds){\n\t\t\t\t\tfor(let pointSet of entry.points){\n\n\t\t\t\t\t\tlet originPos = pointSet.data.position;\n\t\t\t\t\t\tlet truePointPosition = new Float64Array(originPos);\n\t\t\t\t\t\tfor(let i = 0; i < pointSet.numPoints; i++){\n\n\t\t\t\t\t\t\tif (truePosition === true) {\n\t\t\t\t\t\t\t\ttruePointPosition[3 * i + 0] += pointcloud.position.x;\n\t\t\t\t\t\t\t\ttruePointPosition[3 * i + 1] += pointcloud.position.y;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttruePointPosition[3 * i + 2] += pointcloud.position.z;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpointSet.data.position = truePointPosition;\n\t\t\t\t\t\tpoints.add(pointSet);\n\t\t\t\t\t\tpointSet.data.position = originPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn points;\n\t\t\t};\n\n\t\t\t$('#potree_download_dxf2D_icon').click(() => {\n\t\t\t\t\n\t\t\t\tconst points = getProfilePoints();\n\n\t\t\t\tconst string = DXFProfileExporter.toString(points, true);\n\n\t\t\t\tconst blob = new Blob([string], {type: \"text/string\"});\n\t\t\t\t$('#potree_download_profile_dxf2D_link').attr('href', URL.createObjectURL(blob));\n\t\t\t});\n\n\t\t\t$('#potree_download_dxf3D_icon').click(() => {\n\t\t\t\t\n\t\t\t\tconst points = getProfilePoints(true);\n\n\t\t\t\tconst string = DXFProfileExporter.toString(points);\n\n\t\t\t\tconst blob = new Blob([string], {type: \"text/string\"});\n\t\t\t\t$('#potree_download_profile_dxf3D_link').attr('href', URL.createObjectURL(blob));\n\t\t\t});\n\n\t\t\t$('#potree_download_csv_icon').click(() => {\n\t\t\t\t\n\t\t\t\tlet points = getProfilePoints(true);\n\n\t\t\t\tlet string = CSVExporter.toString(points);\n\n\t\t\t\tlet blob = new Blob([string], {type: \"text/string\"});\n\t\t\t\t$('#potree_download_profile_ortho_link').attr('href', URL.createObjectURL(blob));\n\t\t\t});\n\n\t\t\t$('#potree_download_las_icon').click(() => {\n\n\t\t\t\tlet points = getProfilePoints(true);\n\n\t\t\t\tlet buffer = LASExporter.toLAS(points);\n\n\t\t\t\tlet blob = new Blob([buffer], {type: \"application/octet-binary\"});\n\t\t\t\t$('#potree_download_profile_link').attr('href', URL.createObjectURL(blob));\n\t\t\t});\n\t\t}\n\n\t\tselectPoint (mileage, elevation, radius) {\n\t\t\tlet closest = {\n\t\t\t\tdistance: Infinity,\n\t\t\t\tpointcloud: null,\n\t\t\t\tpoints: null,\n\t\t\t\tindex: null\n\t\t\t};\n\n\t\t\tlet pointBox = new Box2(\n\t\t\t\tnew Vector2(mileage - radius, elevation - radius),\n\t\t\t\tnew Vector2(mileage + radius, elevation + radius));\n\n\t\t\tlet numTested = 0;\n\t\t\tlet numSkipped = 0;\n\t\t\tlet numTestedPoints = 0;\n\t\t\tlet numSkippedPoints = 0;\n\n\t\t\tfor (let [pointcloud, entry] of this.pointclouds) {\n\t\t\t\tfor(let points of entry.points){\n\n\t\t\t\t\tlet collisionBox = new Box2(\n\t\t\t\t\t\tnew Vector2(points.projectedBox.min.x, points.projectedBox.min.z),\n\t\t\t\t\t\tnew Vector2(points.projectedBox.max.x, points.projectedBox.max.z)\n\t\t\t\t\t);\n\n\t\t\t\t\tlet intersects = collisionBox.intersectsBox(pointBox);\n\n\t\t\t\t\tif(!intersects){\n\t\t\t\t\t\tnumSkipped++;\n\t\t\t\t\t\tnumSkippedPoints += points.numPoints;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tnumTested++;\n\t\t\t\t\tnumTestedPoints += points.numPoints;\n\n\t\t\t\t\tfor (let i = 0; i < points.numPoints; i++) {\n\n\t\t\t\t\t\tlet m = points.data.mileage[i] - mileage;\n\t\t\t\t\t\tlet e = points.data.position[3 * i + 2] - elevation + pointcloud.position.z;\n\t\t\t\t\t\tlet r = Math.sqrt(m * m + e * e);\n\n\t\t\t\t\t\tconst withinDistance = r < radius && r < closest.distance;\n\t\t\t\t\t\tlet unfilteredClass = true;\n\n\t\t\t\t\t\tif(points.data.classification){\n\t\t\t\t\t\t\tconst classification = pointcloud.material.classification;\n\n\t\t\t\t\t\t\tconst pointClassID = points.data.classification[i];\n\t\t\t\t\t\t\tconst pointClassValue = classification[pointClassID];\n\n\t\t\t\t\t\t\tif(pointClassValue && (!pointClassValue.visible || pointClassValue.color.w === 0)){\n\t\t\t\t\t\t\t\tunfilteredClass = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (withinDistance && unfilteredClass) {\n\t\t\t\t\t\t\tclosest = {\n\t\t\t\t\t\t\t\tdistance: r,\n\t\t\t\t\t\t\t\tpointcloud: pointcloud,\n\t\t\t\t\t\t\t\tpoints: points,\n\t\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t//console.log(`nodes: ${numTested}, ${numSkipped} || points: ${numTestedPoints}, ${numSkippedPoints}`);\n\n\t\t\tif (closest.distance < Infinity) {\n\t\t\t\tlet points = closest.points;\n\n\t\t\t\tlet point = {};\n\n\t\t\t\tlet attributes = Object.keys(points.data);\n\t\t\t\tfor (let attribute of attributes) {\n\t\t\t\t\tlet attributeData = points.data[attribute];\n\t\t\t\t\tlet itemSize = attributeData.length / points.numPoints;\n\t\t\t\t\tlet value = attributeData.subarray(itemSize * closest.index, itemSize * closest.index + itemSize);\n\n\t\t\t\t\tif (value.length === 1) {\n\t\t\t\t\t\tpoint[attribute] = value[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpoint[attribute] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclosest.point = point;\n\n\t\t\t\treturn closest;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tinitTHREE () {\n\t\t\tthis.renderer = new WebGLRenderer({alpha: true, premultipliedAlpha: false});\n\t\t\tthis.renderer.setClearColor(0x000000, 0);\n\t\t\tthis.renderer.setSize(10, 10);\n\t\t\tthis.renderer.autoClear = false;\n\t\t\tthis.renderArea.append($(this.renderer.domElement));\n\t\t\tthis.renderer.domElement.tabIndex = '2222';\n\t\t\t$(this.renderer.domElement).css('width', '100%');\n\t\t\t$(this.renderer.domElement).css('height', '100%');\n\n\n\t\t\t{\n\t\t\t\tlet gl = this.renderer.getContext();\n\n\t\t\t\tif(gl.createVertexArray == null){\n\t\t\t\t\tlet extVAO = gl.getExtension('OES_vertex_array_object');\n\n\t\t\t\t\tif(!extVAO){\n\t\t\t\t\t\tthrow new Error(\"OES_vertex_array_object extension not supported\");\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.createVertexArray = extVAO.createVertexArrayOES.bind(extVAO);\n\t\t\t\t\tgl.bindVertexArray = extVAO.bindVertexArrayOES.bind(extVAO);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\n\t\t\tthis.camera = new OrthographicCamera(-1000, 1000, 1000, -1000, -1000, 1000);\n\t\t\tthis.camera.up.set(0, 0, 1);\n\t\t\tthis.camera.rotation.order = \"ZXY\";\n\t\t\tthis.camera.rotation.x = Math.PI / 2.0;\n\t\t\n\n\t\t\tthis.scene = new Scene();\n\t\t\tthis.profileScene = new Scene();\n\n\t\t\tlet sg = new SphereGeometry(1, 16, 16);\n\t\t\tlet sm = new MeshNormalMaterial();\n\t\t\tthis.pickSphere = new Mesh(sg, sm);\n\t\t\tthis.scene.add(this.pickSphere);\n\n\t\t\tthis.viewerPickSphere = new Mesh(sg, sm);\n\t\t}\n\n\t\tinitSVG () {\n\t\t\tlet width = this.renderArea[0].clientWidth;\n\t\t\tlet height = this.renderArea[0].clientHeight;\n\t\t\tlet marginLeft = this.renderArea[0].offsetLeft;\n\n\t\t\tthis.svg.selectAll('*').remove();\n\n\t\t\tthis.scaleX = d3.scale.linear()\n\t\t\t\t.domain([this.camera.left + this.camera.position.x, this.camera.right + this.camera.position.x])\n\t\t\t\t.range([0, width]);\n\t\t\tthis.scaleY = d3.scale.linear()\n\t\t\t\t.domain([this.camera.bottom + this.camera.position.z, this.camera.top + this.camera.position.z])\n\t\t\t\t.range([height, 0]);\n\n\t\t\tthis.xAxis = d3.svg.axis()\n\t\t\t\t.scale(this.scaleX)\n\t\t\t\t.orient('bottom')\n\t\t\t\t.innerTickSize(-height)\n\t\t\t\t.outerTickSize(1)\n\t\t\t\t.tickPadding(10)\n\t\t\t\t.ticks(width / 50);\n\n\t\t\tthis.yAxis = d3.svg.axis()\n\t\t\t\t.scale(this.scaleY)\n\t\t\t\t.orient('left')\n\t\t\t\t.innerTickSize(-width)\n\t\t\t\t.outerTickSize(1)\n\t\t\t\t.tickPadding(10)\n\t\t\t\t.ticks(height / 20);\n\n\t\t\tthis.elXAxis = this.svg.append('g')\n\t\t\t\t.attr('class', 'x axis')\n\t\t\t\t.attr('transform', `translate(${marginLeft}, ${height})`)\n\t\t\t\t.call(this.xAxis);\n\n\t\t\tthis.elYAxis = this.svg.append('g')\n\t\t\t\t.attr('class', 'y axis')\n\t\t\t\t.attr('transform', `translate(${marginLeft}, 0)`)\n\t\t\t\t.call(this.yAxis);\n\t\t}\n\n\t\taddPoints (pointcloud, points) {\n\n\t\t\tif(points.numPoints === 0){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet entry = this.pointclouds.get(pointcloud);\n\t\t\tif(!entry){\n\t\t\t\tentry = new ProfileFakeOctree(pointcloud);\n\t\t\t\tthis.pointclouds.set(pointcloud, entry);\n\t\t\t\tthis.profileScene.add(entry);\n\n\t\t\t\tlet materialChanged = () => {\n\t\t\t\t\tthis.render();\n\t\t\t\t};\n\n\t\t\t\tmaterialChanged();\n\n\t\t\t\tpointcloud.material.addEventListener('material_property_changed', materialChanged);\n\t\t\t\tthis.addEventListener(\"on_reset_once\", () => {\n\t\t\t\t\tpointcloud.material.removeEventListener('material_property_changed', materialChanged);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tentry.addPoints(points);\n\t\t\tthis.projectedBox.union(entry.projectedBox);\n\n\t\t\tif (this.autoFit && this.autoFitEnabled) { \n\t\t\t\tlet width = this.renderArea[0].clientWidth;\n\t\t\t\tlet height = this.renderArea[0].clientHeight;\n\n\t\t\t\tlet size = this.projectedBox.getSize(new Vector3());\n\n\t\t\t\tlet sx = width / size.x;\n\t\t\t\tlet sy = height / size.z;\n\t\t\t\tlet scale = Math.min(sx, sy);\n\n\t\t\t\tlet center = this.projectedBox.getCenter(new Vector3());\n\t\t\t\tthis.scale.set(scale, scale, 1);\n\t\t\t\tthis.camera.position.copy(center);\n\n\t\t\t\t//console.log(\"camera: \", this.camera.position.toArray().join(\", \"));\n\t\t\t}\n\n\t\t\t//console.log(entry);\n\n\t\t\tthis.render();\n\n\t\t\tlet numPoints = 0;\n\t\t\tfor (let [key, value] of this.pointclouds.entries()) {\n\t\t\t\tnumPoints += value.points.reduce( (a, i) => a + i.numPoints, 0);\n\t\t\t}\n\t\t\t$(`#profile_num_points`).html(Utils.addCommas(numPoints));\n\n\t\t}\n\n\t\treset () {\n\t\t\tthis.lastReset = new Date().getTime();\n\n\t\t\tthis.dispatchEvent({type: \"on_reset_once\"});\n\t\t\tthis.removeEventListeners(\"on_reset_once\");\n\n\t\t\tthis.autoFit = true;\n\t\t\tthis.projectedBox = new Box3();\n\n\t\t\tfor(let [key, entry] of this.pointclouds){\n\t\t\t\tentry.dispose();\n\t\t\t}\n\n\t\t\tthis.pointclouds.clear();\n\t\t\tthis.mouseIsDown = false;\n\t\t\tthis.mouse.set(0, 0);\n\n\t\t\tif(this.autoFitEnabled){\n\t\t\t\tthis.scale.set(1, 1, 1);\n\t\t\t}\n\t\t\tthis.pickSphere.visible = false;\n\n\t\t\tthis.elRoot.find('#profileSelectionProperties').hide();\n\n\t\t\tthis.render();\n\t\t}\n\n\t\tshow () {\n\t\t\tthis.elRoot.fadeIn();\n\t\t\tthis.enabled = true;\n\t\t}\n\n\t\thide () {\n\t\t\tthis.elRoot.fadeOut();\n\t\t\tthis.enabled = false;\n\t\t}\n\n\t\tupdateScales () {\n\n\t\t\tlet width = this.renderArea[0].clientWidth;\n\t\t\tlet height = this.renderArea[0].clientHeight;\n\n\t\t\tlet left = (-width / 2) / this.scale.x;\n\t\t\tlet right = (+width / 2) / this.scale.x;\n\t\t\tlet top = (+height / 2) / this.scale.y;\n\t\t\tlet bottom = (-height / 2) / this.scale.y;\n\n\t\t\tthis.camera.left = left;\n\t\t\tthis.camera.right = right;\n\t\t\tthis.camera.top = top;\n\t\t\tthis.camera.bottom = bottom;\n\t\t\tthis.camera.updateProjectionMatrix();\n\n\t\t\tthis.scaleX.domain([this.camera.left + this.camera.position.x, this.camera.right + this.camera.position.x])\n\t\t\t\t.range([0, width]);\n\t\t\tthis.scaleY.domain([this.camera.bottom + this.camera.position.z, this.camera.top + this.camera.position.z])\n\t\t\t\t.range([height, 0]);\n\n\t\t\tlet marginLeft = this.renderArea[0].offsetLeft;\n\n\t\t\tthis.xAxis.scale(this.scaleX)\n\t\t\t\t.orient('bottom')\n\t\t\t\t.innerTickSize(-height)\n\t\t\t\t.outerTickSize(1)\n\t\t\t\t.tickPadding(10)\n\t\t\t\t.ticks(width / 50);\n\t\t\tthis.yAxis.scale(this.scaleY)\n\t\t\t\t.orient('left')\n\t\t\t\t.innerTickSize(-width)\n\t\t\t\t.outerTickSize(1)\n\t\t\t\t.tickPadding(10)\n\t\t\t\t.ticks(height / 20);\n\n\n\t\t\tthis.elXAxis\n\t\t\t\t.attr('transform', `translate(${marginLeft}, ${height})`)\n\t\t\t\t.call(this.xAxis);\n\t\t\tthis.elYAxis\n\t\t\t\t.attr('transform', `translate(${marginLeft}, 0)`)\n\t\t\t\t.call(this.yAxis);\n\t\t}\n\n\t\trequestScaleUpdate(){\n\n\t\t\tlet threshold = 100;\n\t\t\tlet allowUpdate = ((this.lastReset === undefined) || (this.lastScaleUpdate === undefined)) \n\t\t\t\t|| ((new Date().getTime() - this.lastReset) > threshold && (new Date().getTime() - this.lastScaleUpdate) > threshold);\n\n\t\t\tif(allowUpdate){\n\n\t\t\t\tthis.updateScales();\n\n\t\t\t\tthis.lastScaleUpdate = new Date().getTime();\n\n\t\t\t\t\n\n\t\t\t\tthis.scaleUpdatePending = false;\n\t\t\t}else if(!this.scaleUpdatePending) {\n\t\t\t\tsetTimeout(this.requestScaleUpdate.bind(this), 100);\n\t\t\t\tthis.scaleUpdatePending = true;\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\trender () {\n\t\t\tlet width = this.renderArea[0].clientWidth;\n\t\t\tlet height = this.renderArea[0].clientHeight;\n\n\t\t\tlet {renderer, pRenderer, camera, profileScene, scene} = this;\n\t\t\tlet {scaleX, pickSphere} = this;\n\n\t\t\trenderer.setSize(width, height);\n\n\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\trenderer.clear(true, true, false);\n\n\t\t\tfor(let pointcloud of this.pointclouds.keys()){\n\t\t\t\tlet source = pointcloud.material;\n\t\t\t\tlet target = this.pointclouds.get(pointcloud).material;\n\t\t\t\t\n\t\t\t\tcopyMaterial(source, target);\n\t\t\t\ttarget.size = 2;\n\t\t\t}\n\t\t\t\n\t\t\tpRenderer.render(profileScene, camera, null);\n\n\t\t\tlet radius = Math.abs(scaleX.invert(0) - scaleX.invert(5));\n\n\t\t\tif (radius === 0) {\n\t\t\t\tpickSphere.visible = false;\n\t\t\t} else {\n\t\t\t\tpickSphere.scale.set(radius, radius, radius);\n\t\t\t\tpickSphere.visible = true;\n\t\t\t}\n\t\t\t\n\t\t\trenderer.render(scene, camera);\n\n\t\t\tthis.requestScaleUpdate();\n\t\t}\n\t};\n\n\tclass ProfileWindowController {\n\t\tconstructor (viewer) {\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.profileWindow = viewer.profileWindow;\n\t\t\tthis.profile = null;\n\t\t\tthis.numPoints = 0;\n\t\t\tthis.threshold = 60 * 1000;\n\t\t\tthis.rotateAmount = 10;\n\n\t\t\tthis.scheduledRecomputeTime = null;\n\n\t\t\tthis.enabled = true;\n\n\t\t\tthis.requests = [];\n\n\t\t\tthis._recompute = () => { this.recompute(); };\n\n\t\t\tthis.viewer.addEventListener(\"scene_changed\", e => {\n\t\t\t\te.oldScene.removeEventListener(\"pointcloud_added\", this._recompute);\n\t\t\t\te.scene.addEventListener(\"pointcloud_added\", this._recompute);\n\t\t\t});\n\t\t\tthis.viewer.scene.addEventListener(\"pointcloud_added\", this._recompute);\n\n\t\t\t$(\"#potree_profile_rotate_amount\").val(parseInt(this.rotateAmount));\n\t\t\t$(\"#potree_profile_rotate_amount\").on(\"input\", (e) => {\n\t\t\t\tconst str = $(\"#potree_profile_rotate_amount\").val();\n\n\t\t\t\tif(!isNaN(str)){\n\t\t\t\t\tconst value = parseFloat(str);\n\t\t\t\t\tthis.rotateAmount = value;\n\t\t\t\t\t$(\"#potree_profile_rotate_amount\").css(\"background-color\", \"\");\n\t\t\t\t}else {\n\t\t\t\t\t$(\"#potree_profile_rotate_amount\").css(\"background-color\", \"#ff9999\");\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\tconst rotate = (radians) => {\n\t\t\t\tconst profile = this.profile;\n\t\t\t\tconst points = profile.points;\n\t\t\t\tconst start = points[0];\n\t\t\t\tconst end = points[points.length - 1];\n\t\t\t\tconst center = start.clone().add(end).multiplyScalar(0.5);\n\n\t\t\t\tconst mMoveOrigin = new Matrix4().makeTranslation(-center.x, -center.y, -center.z);\n\t\t\t\tconst mRotate = new Matrix4().makeRotationZ(radians);\n\t\t\t\tconst mMoveBack = new Matrix4().makeTranslation(center.x, center.y, center.z);\n\t\t\t\t//const transform = mMoveOrigin.multiply(mRotate).multiply(mMoveBack);\n\t\t\t\tconst transform = mMoveBack.multiply(mRotate).multiply(mMoveOrigin);\n\n\t\t\t\tconst rotatedPoints = points.map( point => point.clone().applyMatrix4(transform) );\n\n\t\t\t\tthis.profileWindow.autoFitEnabled = false;\n\n\t\t\t\tfor(let i = 0; i < points.length; i++){\n\t\t\t\t\tprofile.setPosition(i, rotatedPoints[i]);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t$(\"#potree_profile_rotate_cw\").click( () => {\n\t\t\t\tconst radians = MathUtils.degToRad(this.rotateAmount);\n\t\t\t\trotate(-radians);\n\t\t\t});\n\n\t\t\t$(\"#potree_profile_rotate_ccw\").click( () => {\n\t\t\t\tconst radians = MathUtils.degToRad(this.rotateAmount);\n\t\t\t\trotate(radians);\n\t\t\t});\n\n\t\t\t$(\"#potree_profile_move_forward\").click( () => {\n\t\t\t\tconst profile = this.profile;\n\t\t\t\tconst points = profile.points;\n\t\t\t\tconst start = points[0];\n\t\t\t\tconst end = points[points.length - 1];\n\n\t\t\t\tconst dir = end.clone().sub(start).normalize();\n\t\t\t\tconst up = new Vector3(0, 0, 1);\n\t\t\t\tconst forward = up.cross(dir);\n\t\t\t\tconst move = forward.clone().multiplyScalar(profile.width / 2);\n\n\t\t\t\tthis.profileWindow.autoFitEnabled = false;\n\n\t\t\t\tfor(let i = 0; i < points.length; i++){\n\t\t\t\t\tprofile.setPosition(i, points[i].clone().add(move));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t$(\"#potree_profile_move_backward\").click( () => {\n\t\t\t\tconst profile = this.profile;\n\t\t\t\tconst points = profile.points;\n\t\t\t\tconst start = points[0];\n\t\t\t\tconst end = points[points.length - 1];\n\n\t\t\t\tconst dir = end.clone().sub(start).normalize();\n\t\t\t\tconst up = new Vector3(0, 0, 1);\n\t\t\t\tconst forward = up.cross(dir);\n\t\t\t\tconst move = forward.clone().multiplyScalar(-profile.width / 2);\n\n\t\t\t\tthis.profileWindow.autoFitEnabled = false;\n\n\t\t\t\tfor(let i = 0; i < points.length; i++){\n\t\t\t\t\tprofile.setPosition(i, points[i].clone().add(move));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tsetProfile (profile) {\n\t\t\tif (this.profile !== null && this.profile !== profile) {\n\t\t\t\tthis.profile.removeEventListener('marker_moved', this._recompute);\n\t\t\t\tthis.profile.removeEventListener('marker_added', this._recompute);\n\t\t\t\tthis.profile.removeEventListener('marker_removed', this._recompute);\n\t\t\t\tthis.profile.removeEventListener('width_changed', this._recompute);\n\t\t\t}\n\n\t\t\tthis.profile = profile;\n\n\t\t\t{\n\t\t\t\tthis.profile.addEventListener('marker_moved', this._recompute);\n\t\t\t\tthis.profile.addEventListener('marker_added', this._recompute);\n\t\t\t\tthis.profile.addEventListener('marker_removed', this._recompute);\n\t\t\t\tthis.profile.addEventListener('width_changed', this._recompute);\n\t\t\t}\n\n\t\t\tthis.recompute();\n\t\t}\n\n\t\treset () {\n\t\t\tthis.profileWindow.reset();\n\n\t\t\tthis.numPoints = 0;\n\n\t\t\tif (this.profile) {\n\t\t\t\tfor (let request of this.requests) {\n\t\t\t\t\trequest.cancel();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tprogressHandler (pointcloud, progress) {\n\t\t\tfor (let segment of progress.segments) {\n\t\t\t\tthis.profileWindow.addPoints(pointcloud, segment.points);\n\t\t\t\tthis.numPoints += segment.points.numPoints;\n\t\t\t}\n\t\t}\n\n\t\tcancel () {\n\t\t\tfor (let request of this.requests) {\n\t\t\t\trequest.cancel();\n\t\t\t\t// request.finishLevelThenCancel();\n\t\t\t}\n\n\t\t\tthis.requests = [];\n\t\t};\n\n\t\tfinishLevelThenCancel(){\n\t\t\tfor (let request of this.requests) {\n\t\t\t\trequest.finishLevelThenCancel();\n\t\t\t}\n\n\t\t\tthis.requests = [];\n\t\t}\n\n\t\trecompute () {\n\t\t\tif (!this.profile) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.scheduledRecomputeTime !== null && this.scheduledRecomputeTime > new Date().getTime()) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis.scheduledRecomputeTime = new Date().getTime() + 100;\n\t\t\t}\n\t\t\tthis.scheduledRecomputeTime = null;\n\n\t\t\tthis.reset();\n\n\t\t\tfor (let pointcloud of this.viewer.scene.pointclouds.filter(p => p.visible)) {\n\t\t\t\tlet request = pointcloud.getPointsInProfile(this.profile, null, {\n\t\t\t\t\t'onProgress': (event) => {\n\t\t\t\t\t\tif (!this.enabled) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.progressHandler(pointcloud, event.points);\n\n\t\t\t\t\t\tif (this.numPoints > this.threshold) {\n\t\t\t\t\t\t\tthis.finishLevelThenCancel();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'onFinish': (event) => {\n\t\t\t\t\t\tif (!this.enabled) {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t'onCancel': () => {\n\t\t\t\t\t\tif (!this.enabled) {\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.requests.push(request);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t *\n\t * @author sigeom sa / http://sigeom.ch\n\t * @author Ioda-Net Sàrl / https://www.ioda-net.ch/\n\t * @author Markus Schütz / http://potree.org\n\t *\n\t */\n\n\tclass GeoJSONExporter{\n\n\t\tstatic measurementToFeatures (measurement) {\n\t\t\tlet coords = measurement.points.map(e => e.position.toArray());\n\n\t\t\tlet features = [];\n\n\t\t\tif (coords.length === 1) {\n\t\t\t\tlet feature = {\n\t\t\t\t\ttype: 'Feature',\n\t\t\t\t\tgeometry: {\n\t\t\t\t\t\ttype: 'Point',\n\t\t\t\t\t\tcoordinates: coords[0]\n\t\t\t\t\t},\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tname: measurement.name\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfeatures.push(feature);\n\t\t\t} else if (coords.length > 1 && !measurement.closed) {\n\t\t\t\tlet object = {\n\t\t\t\t\t'type': 'Feature',\n\t\t\t\t\t'geometry': {\n\t\t\t\t\t\t'type': 'LineString',\n\t\t\t\t\t\t'coordinates': coords\n\t\t\t\t\t},\n\t\t\t\t\t'properties': {\n\t\t\t\t\t\tname: measurement.name\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tfeatures.push(object);\n\t\t\t} else if (coords.length > 1 && measurement.closed) {\n\t\t\t\tlet object = {\n\t\t\t\t\t'type': 'Feature',\n\t\t\t\t\t'geometry': {\n\t\t\t\t\t\t'type': 'Polygon',\n\t\t\t\t\t\t'coordinates': [[...coords, coords[0]]]\n\t\t\t\t\t},\n\t\t\t\t\t'properties': {\n\t\t\t\t\t\tname: measurement.name\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfeatures.push(object);\n\t\t\t}\n\n\t\t\tif (measurement.showDistances) {\n\t\t\t\tmeasurement.edgeLabels.forEach((label) => {\n\t\t\t\t\tlet labelPoint = {\n\t\t\t\t\t\ttype: 'Feature',\n\t\t\t\t\t\tgeometry: {\n\t\t\t\t\t\t\ttype: 'Point',\n\t\t\t\t\t\t\tcoordinates: label.position.toArray()\n\t\t\t\t\t\t},\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\tdistance: label.text\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tfeatures.push(labelPoint);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (measurement.showArea) {\n\t\t\t\tlet point = measurement.areaLabel.position;\n\t\t\t\tlet labelArea = {\n\t\t\t\t\ttype: 'Feature',\n\t\t\t\t\tgeometry: {\n\t\t\t\t\t\ttype: 'Point',\n\t\t\t\t\t\tcoordinates: point.toArray()\n\t\t\t\t\t},\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tarea: measurement.areaLabel.text\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfeatures.push(labelArea);\n\t\t\t}\n\n\t\t\treturn features;\n\t\t}\n\n\t\tstatic toString (measurements) {\n\t\t\tif (!(measurements instanceof Array)) {\n\t\t\t\tmeasurements = [measurements];\n\t\t\t}\n\n\t\t\tmeasurements = measurements.filter(m => m instanceof Measure);\n\n\t\t\tlet features = [];\n\t\t\tfor (let measure of measurements) {\n\t\t\t\tlet f = GeoJSONExporter.measurementToFeatures(measure);\n\n\t\t\t\tfeatures = features.concat(f);\n\t\t\t}\n\n\t\t\tlet geojson = {\n\t\t\t\t'type': 'FeatureCollection',\n\t\t\t\t'features': features\n\t\t\t};\n\n\t\t\treturn JSON.stringify(geojson, null, '\\t');\n\t\t}\n\n\t}\n\n\t/**\n\t *\n\t * @author sigeom sa / http://sigeom.ch\n\t * @author Ioda-Net Sàrl / https://www.ioda-net.ch/\n\t * @author Markus Schuetz / http://potree.org\n\t *\n\t */\n\n\tclass DXFExporter {\n\n\t\tstatic measurementPointSection (measurement) {\n\t\t\tlet position = measurement.points[0].position;\n\n\t\t\tif (!position) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tlet dxfSection = `0\nCIRCLE\n8\nlayer_point\n10\n${position.x}\n20\n${position.y}\n30\n${position.z}\n40\n1.0\n`;\n\n\t\t\treturn dxfSection;\n\t\t}\n\n\t\tstatic measurementPolylineSection (measurement) {\n\t\t\t// bit code for polygons/polylines:\n\t\t\t// https://www.autodesk.com/techpubs/autocad/acad2000/dxf/polyline_dxf_06.htm\n\t\t\tlet geomCode = 8;\n\t\t\tif (measurement.closed) {\n\t\t\t\tgeomCode += 1;\n\t\t\t}\n\n\t\t\tlet dxfSection = `0\nPOLYLINE\n8\nlayer_polyline\n62\n1\n66\n1\n10\n0.0\n20\n0.0\n30\n0.0\n70\n${geomCode}\n`;\n\n\t\t\tlet xMax = 0.0;\n\t\t\tlet yMax = 0.0;\n\t\t\tlet zMax = 0.0;\n\t\t\tfor (let point of measurement.points) {\n\t\t\t\tpoint = point.position;\n\t\t\t\txMax = Math.max(xMax, point.x);\n\t\t\t\tyMax = Math.max(yMax, point.y);\n\t\t\t\tzMax = Math.max(zMax, point.z);\n\n\t\t\t\tdxfSection += `0\nVERTEX\n8\n0\n10\n${point.x}\n20\n${point.y}\n30\n${point.z}\n70\n32\n`;\n\t\t\t}\n\t\t\tdxfSection += `0\nSEQEND\n`;\n\n\t\t\treturn dxfSection;\n\t\t}\n\n\t\tstatic measurementSection (measurement) {\n\t\t\t// if(measurement.points.length <= 1){\n\t\t\t//\treturn \"\";\n\t\t\t// }\n\n\t\t\tif (measurement.points.length === 0) {\n\t\t\t\treturn '';\n\t\t\t} else if (measurement.points.length === 1) {\n\t\t\t\treturn DXFExporter.measurementPointSection(measurement);\n\t\t\t} else if (measurement.points.length >= 2) {\n\t\t\t\treturn DXFExporter.measurementPolylineSection(measurement);\n\t\t\t}\n\t\t}\n\n\t\tstatic toString(measurements){\n\t\t\tif (!(measurements instanceof Array)) {\n\t\t\t\tmeasurements = [measurements];\n\t\t\t}\n\t\t\tmeasurements = measurements.filter(m => m instanceof Measure);\n\n\t\t\tlet points = measurements.filter(m => (m instanceof Measure))\n\t\t\t\t.map(m => m.points)\n\t\t\t\t.reduce((a, v) => a.concat(v))\n\t\t\t\t.map(p => p.position);\n\n\t\t\tlet min = new Vector3(Infinity, Infinity, Infinity);\n\t\t\tlet max = new Vector3(-Infinity, -Infinity, -Infinity);\n\t\t\tfor (let point of points) {\n\t\t\t\tmin.min(point);\n\t\t\t\tmax.max(point);\n\t\t\t}\n\n\t\t\tlet dxfHeader = `999\nDXF created from potree\n0\nSECTION\n2\nHEADER\n9\n$ACADVER\n1\nAC1006\n9\n$INSBASE\n10\n0.0\n20\n0.0\n30\n0.0\n9\n$EXTMIN\n10\n${min.x}\n20\n${min.y}\n30\n${min.z}\n9\n$EXTMAX\n10\n${max.x}\n20\n${max.y}\n30\n${max.z}\n0\nENDSEC\n`;\n\n\t\t\tlet dxfBody = `0\nSECTION\n2\nENTITIES\n`;\n\n\t\t\tfor (let measurement of measurements) {\n\t\t\t\tdxfBody += DXFExporter.measurementSection(measurement);\n\t\t\t}\n\n\t\t\tdxfBody += `0\nENDSEC\n`;\n\n\t\t\tlet dxf = dxfHeader + dxfBody + '0\\nEOF';\n\n\t\t\treturn dxf;\n\t\t}\n\n\t}\n\n\tclass MeasurePanel{\n\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.measurement = measurement;\n\t\t\tthis.propertiesPanel = propertiesPanel;\n\n\t\t\tthis._update = () => { this.update(); };\n\t\t}\n\n\t\tcreateCoordinatesTable(points){\n\t\t\tlet table = $(`\n\t\t\t<table class=\"measurement_value_table\">\n\t\t\t\t<tr>\n\t\t\t\t\t<th>x</th>\n\t\t\t\t\t<th>y</th>\n\t\t\t\t\t<th>z</th>\n\t\t\t\t\t<th></th>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t`);\n\n\t\t\tlet copyIconPath = Potree.resourcePath + '/icons/copy.svg';\n\n\t\t\tfor (let point of points) {\n\t\t\t\tlet x = Utils.addCommas(point.x.toFixed(3));\n\t\t\t\tlet y = Utils.addCommas(point.y.toFixed(3));\n\t\t\t\tlet z = Utils.addCommas(point.z.toFixed(3));\n\n\t\t\t\tlet row = $(`\n\t\t\t\t<tr>\n\t\t\t\t\t<td><span>${x}</span></td>\n\t\t\t\t\t<td><span>${y}</span></td>\n\t\t\t\t\t<td><span>${z}</span></td>\n\t\t\t\t\t<td align=\"right\" style=\"width: 25%\">\n\t\t\t\t\t\t<img name=\"copy\" title=\"copy\" class=\"button-icon\" src=\"${copyIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t`);\n\n\t\t\t\tthis.elCopy = row.find(\"img[name=copy]\");\n\t\t\t\tthis.elCopy.click( () => {\n\t\t\t\t\tlet msg = point.toArray().map(c => c.toFixed(3)).join(\", \");\n\t\t\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t\t`Copied value to clipboard: <br>'${msg}'`,\n\t\t\t\t\t\t{duration: 3000});\n\t\t\t\t});\n\n\t\t\t\ttable.append(row);\n\t\t\t}\n\n\t\t\treturn table;\n\t\t};\n\n\t\tcreateAttributesTable(){\n\t\t\tlet elTable = $('<table class=\"measurement_value_table\"></table>');\n\n\t\t\tlet point = this.measurement.points[0];\n\t\t\t\n\t\t\tfor(let attributeName of Object.keys(point)){\n\t\t\t\tif(attributeName === \"position\"){\n\t\t\t\t\n\t\t\t\t}else if(attributeName === \"rgba\"){\n\t\t\t\t\tlet color = point.rgba;\n\t\t\t\t\tlet text = color.join(', ');\n\n\t\t\t\t\telTable.append($(`\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>rgb</td>\n\t\t\t\t\t\t<td>${text}</td>\n\t\t\t\t\t</tr>\n\t\t\t\t`));\n\t\t\t\t}else {\n\t\t\t\t\tlet value = point[attributeName];\n\t\t\t\t\tlet text = value.join(', ');\n\n\t\t\t\t\telTable.append($(`\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td>${attributeName}</td>\n\t\t\t\t\t\t<td>${text}</td>\n\t\t\t\t\t</tr>\n\t\t\t\t`));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elTable;\n\t\t}\n\n\t\tupdate(){\n\n\t\t}\n\t};\n\n\tclass DistancePanel extends MeasurePanel{\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"measurement_content selectable\">\n\t\t\t\t<span class=\"coordinates_table_container\"></span>\n\t\t\t\t<br>\n\t\t\t\t<table id=\"distances_table\" class=\"measurement_value_table\"></table>\n\n\t\t\t\t<!-- ACTIONS -->\n\t\t\t\t<div style=\"display: flex; margin-top: 12px\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<input type=\"button\" name=\"make_profile\" value=\"profile from measure\" />\n\t\t\t\t\t</span>\n\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t<img name=\"remove\" class=\"button-icon\" src=\"${removeIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\t\tthis.elRemove.click( () => {\n\t\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t\t});\n\t\t\t\n\t\t\tthis.elMakeProfile = this.elContent.find(\"input[name=make_profile]\");\n\t\t\tthis.elMakeProfile.click( () => {\n\t\t\t\t//measurement.points;\n\t\t\t\tconst profile = new Profile();\n\n\t\t\t\tprofile.name = measurement.name;\n\t\t\t\tprofile.width = measurement.getTotalDistance() / 50;\n\n\t\t\t\tfor(const point of measurement.points){\n\t\t\t\t\tprofile.addMarker(point.position.clone());\n\t\t\t\t}\n\n\t\t\t\tthis.viewer.scene.addProfile(profile);\n\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\t\telCoordiantesContainer.empty();\n\t\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\t\tlet positions = this.measurement.points.map(p => p.position);\n\t\t\tlet distances = [];\n\t\t\tfor (let i = 0; i < positions.length - 1; i++) {\n\t\t\t\tlet d = positions[i].distanceTo(positions[i + 1]);\n\t\t\t\tdistances.push(d.toFixed(3));\n\t\t\t}\n\n\t\t\tlet totalDistance = this.measurement.getTotalDistance().toFixed(3);\n\t\t\tlet elDistanceTable = this.elContent.find(`#distances_table`);\n\t\t\telDistanceTable.empty();\n\n\t\t\tfor (let i = 0; i < distances.length; i++) {\n\t\t\t\tlet label = (i === 0) ? 'Distances: ' : '';\n\t\t\t\tlet distance = distances[i];\n\t\t\t\tlet elDistance = $(`\n\t\t\t\t<tr>\n\t\t\t\t\t<th>${label}</th>\n\t\t\t\t\t<td style=\"width: 100%; padding-left: 10px\">${distance}</td>\n\t\t\t\t</tr>`);\n\t\t\t\telDistanceTable.append(elDistance);\n\t\t\t}\n\n\t\t\tlet elTotal = $(`\n\t\t\t<tr>\n\t\t\t\t<th>Total: </td><td style=\"width: 100%; padding-left: 10px\">${totalDistance}</th>\n\t\t\t</tr>`);\n\t\t\telDistanceTable.append(elTotal);\n\t\t}\n\t};\n\n\tclass PointPanel extends MeasurePanel{\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"measurement_content selectable\">\n\t\t\t\t<span class=\"coordinates_table_container\"></span>\n\t\t\t\t<br>\n\t\t\t\t<span class=\"attributes_table_container\"></span>\n\n\t\t\t\t<!-- ACTIONS -->\n\t\t\t\t<div style=\"display: flex; margin-top: 12px\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t<img name=\"remove\" class=\"button-icon\" src=\"${removeIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\t\tthis.elRemove.click( () => {\n\t\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\t\telCoordiantesContainer.empty();\n\t\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\t\tlet elAttributesContainer = this.elContent.find('.attributes_table_container');\n\t\t\telAttributesContainer.empty();\n\t\t\telAttributesContainer.append(this.createAttributesTable());\n\t\t}\n\t};\n\n\tclass AreaPanel extends MeasurePanel{\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"measurement_content selectable\">\n\t\t\t\t<span class=\"coordinates_table_container\"></span>\n\t\t\t\t<br>\n\t\t\t\t<span style=\"font-weight: bold\">Area: </span>\n\t\t\t\t<span id=\"measurement_area\"></span>\n\n\t\t\t\t<!-- ACTIONS -->\n\t\t\t\t<div style=\"display: flex; margin-top: 12px\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t<img name=\"remove\" class=\"button-icon\" src=\"${removeIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\t\tthis.elRemove.click( () => {\n\t\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\t\telCoordiantesContainer.empty();\n\t\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\t\tlet elArea = this.elContent.find(`#measurement_area`);\n\t\t\telArea.html(this.measurement.getArea().toFixed(3));\n\t\t}\n\t};\n\n\tclass AnglePanel extends MeasurePanel{\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"measurement_content selectable\">\n\t\t\t\t<span class=\"coordinates_table_container\"></span>\n\t\t\t\t<br>\n\t\t\t\t<table class=\"measurement_value_table\">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>\\u03b1</th>\n\t\t\t\t\t\t<th>\\u03b2</th>\n\t\t\t\t\t\t<th>\\u03b3</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td align=\"center\" id=\"angle_cell_alpha\" style=\"width: 33%\"></td>\n\t\t\t\t\t\t<td align=\"center\" id=\"angle_cell_betta\" style=\"width: 33%\"></td>\n\t\t\t\t\t\t<td align=\"center\" id=\"angle_cell_gamma\" style=\"width: 33%\"></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\n\t\t\t\t<!-- ACTIONS -->\n\t\t\t\t<div style=\"display: flex; margin-top: 12px\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t<img name=\"remove\" class=\"button-icon\" src=\"${removeIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\t\tthis.elRemove.click( () => {\n\t\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\t\telCoordiantesContainer.empty();\n\t\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\t\tlet angles = [];\n\t\t\tfor(let i = 0; i < this.measurement.points.length; i++){\n\t\t\t\tangles.push(this.measurement.getAngle(i) * (180.0 / Math.PI));\n\t\t\t}\n\t\t\tangles = angles.map(a => a.toFixed(1) + '\\u00B0');\n\n\t\t\tlet elAlpha = this.elContent.find(`#angle_cell_alpha`);\n\t\t\tlet elBetta = this.elContent.find(`#angle_cell_betta`);\n\t\t\tlet elGamma = this.elContent.find(`#angle_cell_gamma`);\n\n\t\t\telAlpha.html(angles[0]);\n\t\t\telBetta.html(angles[1]);\n\t\t\telGamma.html(angles[2]);\n\t\t}\n\t};\n\n\tclass CirclePanel extends MeasurePanel{\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"measurement_content selectable\">\n\t\t\t\t<span class=\"coordinates_table_container\"></span>\n\t\t\t\t<br>\n\t\t\t\t<table id=\"infos_table\" class=\"measurement_value_table\"></table>\n\n\t\t\t\t<!-- ACTIONS -->\n\t\t\t\t<div style=\"display: flex; margin-top: 12px\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t<img name=\"remove\" class=\"button-icon\" src=\"${removeIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\t\tthis.elRemove.click( () => {\n\t\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\t\telCoordiantesContainer.empty();\n\t\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\t\tconst elInfos = this.elContent.find(`#infos_table`);\n\n\t\t\tif(this.measurement.points.length !== 3){\n\t\t\t\telInfos.empty();\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst A = this.measurement.points[0].position;\n\t\t\tconst B = this.measurement.points[1].position;\n\t\t\tconst C = this.measurement.points[2].position;\n\n\t\t\tconst center = Potree.Utils.computeCircleCenter(A, B, C);\n\t\t\tconst radius = center.distanceTo(A);\n\t\t\tconst circumference = 2 * Math.PI * radius;\n\t\t\t\n\t\t\tconst format = (number) => {\n\t\t\t\treturn Potree.Utils.addCommas(number.toFixed(3));\n\t\t\t};\n\n\t\t\t\n\t\t\tconst txtCenter = `${format(center.x)} ${format(center.y)} ${format(center.z)}`;\n\t\t\tconst txtRadius = format(radius);\n\t\t\tconst txtCircumference = format(circumference);\n\n\t\t\tconst thStyle = `style=\"text-align: left\"`;\n\t\t\tconst tdStyle = `style=\"width: 100%; padding: 5px;\"`;\n\t\t\t\n\t\t\telInfos.html(`\n\t\t\t<tr>\n\t\t\t\t<th ${thStyle}>Center: </th>\n\t\t\t\t<td ${tdStyle}></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td ${tdStyle} colspan=\"2\">\n\t\t\t\t\t${txtCenter}\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th ${thStyle}>Radius: </th>\n\t\t\t\t<td ${tdStyle}>${txtRadius}</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<th ${thStyle}>Circumference: </th>\n\t\t\t\t<td ${tdStyle}>${txtCircumference}</td>\n\t\t\t</tr>\n\t\t`);\n\t\t}\n\t};\n\n\tclass HeightPanel extends MeasurePanel{\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"measurement_content selectable\">\n\t\t\t\t<span class=\"coordinates_table_container\"></span>\n\t\t\t\t<br>\n\t\t\t\t<span id=\"height_label\">Height: </span><br>\n\n\t\t\t\t<!-- ACTIONS -->\n\t\t\t\t<div style=\"display: flex; margin-top: 12px\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t<img name=\"remove\" class=\"button-icon\" src=\"${removeIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\t\tthis.elRemove.click( () => {\n\t\t\t\tthis.viewer.scene.removeMeasurement(measurement);\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\t\telCoordiantesContainer.empty();\n\t\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position)));\n\n\t\t\t{\n\t\t\t\tlet points = this.measurement.points;\n\n\t\t\t\tlet sorted = points.slice().sort((a, b) => a.position.z - b.position.z);\n\t\t\t\tlet lowPoint = sorted[0].position.clone();\n\t\t\t\tlet highPoint = sorted[sorted.length - 1].position.clone();\n\t\t\t\tlet min = lowPoint.z;\n\t\t\t\tlet max = highPoint.z;\n\t\t\t\tlet height = max - min;\n\t\t\t\theight = height.toFixed(3);\n\n\t\t\t\tthis.elHeightLabel = this.elContent.find(`#height_label`);\n\t\t\t\tthis.elHeightLabel.html(`<b>Height:</b> ${height}`);\n\t\t\t}\n\t\t}\n\t};\n\n\tclass VolumePanel extends MeasurePanel{\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\t\tlet copyIconPath = Potree.resourcePath + '/icons/copy.svg';\n\t\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\n\t\t\tlet lblLengthText = new Map([\n\t\t\t\t[BoxVolume, \"length\"],\n\t\t\t\t[SphereVolume, \"rx\"],\n\t\t\t]).get(measurement.constructor);\n\n\t\t\tlet lblWidthText = new Map([\n\t\t\t\t[BoxVolume, \"width\"],\n\t\t\t\t[SphereVolume, \"ry\"],\n\t\t\t]).get(measurement.constructor);\n\n\t\t\tlet lblHeightText = new Map([\n\t\t\t\t[BoxVolume, \"height\"],\n\t\t\t\t[SphereVolume, \"rz\"],\n\t\t\t]).get(measurement.constructor);\n\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"measurement_content selectable\">\n\t\t\t\t<span class=\"coordinates_table_container\"></span>\n\n\t\t\t\t<table class=\"measurement_value_table\">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>\\u03b1</th>\n\t\t\t\t\t\t<th>\\u03b2</th>\n\t\t\t\t\t\t<th>\\u03b3</th>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td align=\"center\" id=\"angle_cell_alpha\" style=\"width: 33%\"></td>\n\t\t\t\t\t\t<td align=\"center\" id=\"angle_cell_betta\" style=\"width: 33%\"></td>\n\t\t\t\t\t\t<td align=\"center\" id=\"angle_cell_gamma\" style=\"width: 33%\"></td>\n\t\t\t\t\t\t<td align=\"right\" style=\"width: 25%\">\n\t\t\t\t\t\t\t<img name=\"copyRotation\" title=\"copy\" class=\"button-icon\" src=\"${copyIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\n\t\t\t\t<table class=\"measurement_value_table\">\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th>${lblLengthText}</th>\n\t\t\t\t\t\t<th>${lblWidthText}</th>\n\t\t\t\t\t\t<th>${lblHeightText}</th>\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td align=\"center\" id=\"cell_length\" style=\"width: 33%\"></td>\n\t\t\t\t\t\t<td align=\"center\" id=\"cell_width\" style=\"width: 33%\"></td>\n\t\t\t\t\t\t<td align=\"center\" id=\"cell_height\" style=\"width: 33%\"></td>\n\t\t\t\t\t\t<td align=\"right\" style=\"width: 25%\">\n\t\t\t\t\t\t\t<img name=\"copyScale\" title=\"copy\" class=\"button-icon\" src=\"${copyIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</table>\n\n\t\t\t\t<br>\n\t\t\t\t<span style=\"font-weight: bold\">Volume: </span>\n\t\t\t\t<span id=\"measurement_volume\"></span>\n\n\t\t\t\t<!--\n\t\t\t\t<li>\n\t\t\t\t\t<label style=\"whitespace: nowrap\">\n\t\t\t\t\t\t<input id=\"volume_show\" type=\"checkbox\"/>\n\t\t\t\t\t\t<span>show volume</span>\n\t\t\t\t\t</label>\n\t\t\t\t</li>-->\n\n\t\t\t\t<li>\n\t\t\t\t\t<label style=\"whitespace: nowrap\">\n\t\t\t\t\t\t<input id=\"volume_clip\" type=\"checkbox\"/>\n\t\t\t\t\t\t<span>make clip volume</span>\n\t\t\t\t\t</label>\n\t\t\t\t</li>\n\n\t\t\t\t<li style=\"margin-top: 10px\">\n\t\t\t\t\t<input name=\"download_volume\" type=\"button\" value=\"prepare download\" style=\"width: 100%\" />\n\t\t\t\t\t<div name=\"download_message\"></div>\n\t\t\t\t</li>\n\n\n\t\t\t\t<!-- ACTIONS -->\n\t\t\t\t<li style=\"display: grid; grid-template-columns: auto auto; grid-column-gap: 5px; margin-top: 10px\">\n\t\t\t\t\t<input id=\"volume_reset_orientation\" type=\"button\" value=\"reset orientation\"/>\n\t\t\t\t\t<input id=\"volume_make_uniform\" type=\"button\" value=\"make uniform\"/>\n\t\t\t\t</li>\n\t\t\t\t<div style=\"display: flex; margin-top: 12px\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t<img name=\"remove\" class=\"button-icon\" src=\"${removeIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\t{ // download\n\t\t\t\tthis.elDownloadButton = this.elContent.find(\"input[name=download_volume]\");\n\n\t\t\t\tif(this.propertiesPanel.viewer.server){\n\t\t\t\t\tthis.elDownloadButton.click(() => this.download());\n\t\t\t\t} else {\n\t\t\t\t\tthis.elDownloadButton.hide();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.elCopyRotation = this.elContent.find(\"img[name=copyRotation]\");\n\t\t\tthis.elCopyRotation.click( () => {\n\t\t\t\tlet rotation = this.measurement.rotation.toArray().slice(0, 3);\n\t\t\t\tlet msg = rotation.map(c => c.toFixed(3)).join(\", \");\n\t\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t\t`Copied value to clipboard: <br>'${msg}'`,\n\t\t\t\t\t\t{duration: 3000});\n\t\t\t});\n\n\t\t\tthis.elCopyScale = this.elContent.find(\"img[name=copyScale]\");\n\t\t\tthis.elCopyScale.click( () => {\n\t\t\t\tlet scale = this.measurement.scale.toArray();\n\t\t\t\tlet msg = scale.map(c => c.toFixed(3)).join(\", \");\n\t\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t\t`Copied value to clipboard: <br>'${msg}'`,\n\t\t\t\t\t\t{duration: 3000});\n\t\t\t});\n\n\t\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\t\tthis.elRemove.click( () => {\n\t\t\t\tthis.viewer.scene.removeVolume(measurement);\n\t\t\t});\n\n\t\t\tthis.elContent.find(\"#volume_reset_orientation\").click(() => {\n\t\t\t\tmeasurement.rotation.set(0, 0, 0);\n\t\t\t});\n\n\t\t\tthis.elContent.find(\"#volume_make_uniform\").click(() => {\n\t\t\t\tlet mean = (measurement.scale.x + measurement.scale.y + measurement.scale.z) / 3;\n\t\t\t\tmeasurement.scale.set(mean, mean, mean);\n\t\t\t});\n\n\t\t\tthis.elCheckClip = this.elContent.find('#volume_clip');\n\t\t\tthis.elCheckClip.click(event => {\n\t\t\t\tthis.measurement.clip = event.target.checked;\n\t\t\t});\n\n\t\t\tthis.elCheckShow = this.elContent.find('#volume_show');\n\t\t\tthis.elCheckShow.click(event => {\n\t\t\t\tthis.measurement.visible = event.target.checked;\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"position_changed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"orientation_changed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"scale_changed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"clip_changed\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tasync download(){\n\n\t\t\tlet clipBox = this.measurement;\n\n\t\t\tlet regions = [];\n\t\t\t//for(let clipBox of boxes){\n\t\t\t{\n\t\t\t\tlet toClip = clipBox.matrixWorld;\n\n\t\t\t\tlet px = new Vector3(+0.5, 0, 0).applyMatrix4(toClip);\n\t\t\t\tlet nx = new Vector3(-0.5, 0, 0).applyMatrix4(toClip);\n\t\t\t\tlet py = new Vector3(0, +0.5, 0).applyMatrix4(toClip);\n\t\t\t\tlet ny = new Vector3(0, -0.5, 0).applyMatrix4(toClip);\n\t\t\t\tlet pz = new Vector3(0, 0, +0.5).applyMatrix4(toClip);\n\t\t\t\tlet nz = new Vector3(0, 0, -0.5).applyMatrix4(toClip);\n\n\t\t\t\tlet pxN = new Vector3().subVectors(nx, px).normalize();\n\t\t\t\tlet nxN = pxN.clone().multiplyScalar(-1);\n\t\t\t\tlet pyN = new Vector3().subVectors(ny, py).normalize();\n\t\t\t\tlet nyN = pyN.clone().multiplyScalar(-1);\n\t\t\t\tlet pzN = new Vector3().subVectors(nz, pz).normalize();\n\t\t\t\tlet nzN = pzN.clone().multiplyScalar(-1);\n\n\t\t\t\tlet planes = [\n\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(pxN, px),\n\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(nxN, nx),\n\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(pyN, py),\n\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(nyN, ny),\n\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(pzN, pz),\n\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(nzN, nz),\n\t\t\t\t];\n\n\t\t\t\tlet planeQueryParts = [];\n\t\t\t\tfor(let plane of planes){\n\t\t\t\t\tlet part = [plane.normal.toArray(), plane.constant].join(\",\");\n\t\t\t\t\tpart = `[${part}]`;\n\t\t\t\t\tplaneQueryParts.push(part);\n\t\t\t\t}\n\t\t\t\tlet region = \"[\" + planeQueryParts.join(\",\") + \"]\";\n\t\t\t\tregions.push(region);\n\t\t\t}\n\n\t\t\tlet regionsArg = regions.join(\",\");\n\n\t\t\tlet pointcloudArgs = [];\n\t\t\tfor(let pointcloud of this.viewer.scene.pointclouds){\n\t\t\t\tif(!pointcloud.visible){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet offset = pointcloud.pcoGeometry.offset.clone();\n\t\t\t\tlet negateOffset = new Matrix4().makeTranslation(...offset.multiplyScalar(-1).toArray());\n\t\t\t\tlet matrixWorld = pointcloud.matrixWorld;\n\n\t\t\t\tlet transform = new Matrix4().multiplyMatrices(matrixWorld, negateOffset);\n\n\t\t\t\tlet path = `${window.location.pathname}/../${pointcloud.pcoGeometry.url}`;\n\n\t\t\t\tlet arg = {\n\t\t\t\t\tpath: path,\n\t\t\t\t\ttransform: transform.elements,\n\t\t\t\t};\n\t\t\t\tlet argString = JSON.stringify(arg);\n\n\t\t\t\tpointcloudArgs.push(argString);\n\t\t\t}\n\t\t\tlet pointcloudsArg = pointcloudArgs.join(\",\");\n\n\t\t\tlet elMessage = this.elContent.find(\"div[name=download_message]\");\n\n\t\t\tlet error = (message) => {\n\t\t\t\telMessage.html(`<div style=\"color: #ff0000\">ERROR: ${message}</div>`);\n\t\t\t};\n\n\t\t\tlet info = (message) => {\n\t\t\t\telMessage.html(`${message}`);\n\t\t\t};\n\n\t\t\tlet handle = null;\n\t\t\t{ // START FILTER\n\t\t\t\tlet url = `${viewer.server}/create_regions_filter?pointclouds=[${pointcloudsArg}]&regions=[${regionsArg}]`;\n\t\t\t\t\n\t\t\t\t//console.log(url);\n\n\t\t\t\tinfo(\"estimating results ...\");\n\n\t\t\t\tlet response = await fetch(url);\n\t\t\t\tlet jsResponse = await response.json();\n\t\t\t\t//console.log(jsResponse);\n\n\t\t\t\tif(!jsResponse.handle){\n\t\t\t\t\terror(jsResponse.message);\n\t\t\t\t\treturn;\n\t\t\t\t}else {\n\t\t\t\t\thandle = jsResponse.handle;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // WAIT, CHECK PROGRESS, HANDLE FINISH\n\t\t\t\tlet url = `${viewer.server}/check_regions_filter?handle=${handle}`;\n\n\t\t\t\tlet sleep = (function(duration){\n\t\t\t\t\treturn new Promise( (res, rej) => {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tres();\n\t\t\t\t\t\t}, duration);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tlet handleFiltering = (jsResponse) => {\n\t\t\t\t\tlet {progress, estimate} = jsResponse;\n\n\t\t\t\t\tlet progressFract = progress[\"processed points\"] / estimate.points;\n\t\t\t\t\tlet progressPercents = parseInt(progressFract * 100);\n\n\t\t\t\t\tinfo(`progress: ${progressPercents}%`);\n\t\t\t\t};\n\n\t\t\t\tlet handleFinish = (jsResponse) => {\n\t\t\t\t\tlet message = \"downloads ready: <br>\";\n\t\t\t\t\tmessage += \"<ul>\";\n\n\t\t\t\t\tfor(let i = 0; i < jsResponse.pointclouds.length; i++){\n\t\t\t\t\t\tlet url = `${viewer.server}/download_regions_filter_result?handle=${handle}&index=${i}`;\n\n\t\t\t\t\t\tmessage += `<li><a href=\"${url}\">result_${i}.las</a> </li>\\n`;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet reportURL = `${viewer.server}/download_regions_filter_report?handle=${handle}`;\n\t\t\t\t\tmessage += `<li> <a href=\"${reportURL}\">report.json</a> </li>\\n`;\n\t\t\t\t\tmessage += \"</ul>\";\n\n\t\t\t\t\tinfo(message);\n\t\t\t\t};\n\n\t\t\t\tlet handleUnexpected = (jsResponse) => {\n\t\t\t\t\tlet message = `Unexpected Response. <br>status: ${jsResponse.status} <br>message: ${jsResponse.message}`;\n\t\t\t\t\tinfo(message);\n\t\t\t\t};\n\n\t\t\t\tlet handleError = (jsResponse) => {\n\t\t\t\t\tlet message = `ERROR: ${jsResponse.message}`;\n\t\t\t\t\terror(message);\n\n\t\t\t\t\tthrow new Error(message);\n\t\t\t\t};\n\n\t\t\t\tlet start = Date.now();\n\n\t\t\t\twhile(true){\n\t\t\t\t\tlet response = await fetch(url);\n\t\t\t\t\tlet jsResponse = await response.json();\n\n\t\t\t\t\tif(jsResponse.status === \"ERROR\"){\n\t\t\t\t\t\thandleError(jsResponse);\n\t\t\t\t\t}else if(jsResponse.status === \"FILTERING\"){\n\t\t\t\t\t\thandleFiltering(jsResponse);\n\t\t\t\t\t}else if(jsResponse.status === \"FINISHED\"){\n\t\t\t\t\t\thandleFinish(jsResponse);\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}else {\n\t\t\t\t\t\thandleUnexpected(jsResponse);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet durationS = (Date.now() - start) / 1000;\n\t\t\t\t\tlet sleepAmountMS = durationS < 10 ? 100 : 1000;\n\n\t\t\t\t\tawait sleep(sleepAmountMS);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\t\telCoordiantesContainer.empty();\n\t\t\telCoordiantesContainer.append(this.createCoordinatesTable([this.measurement.position]));\n\n\t\t\t{\n\t\t\t\tlet angles = this.measurement.rotation.toVector3();\n\t\t\t\tangles = angles.toArray();\n\t\t\t\t//angles = [angles.z, angles.x, angles.y];\n\t\t\t\tangles = angles.map(v => 180 * v / Math.PI);\n\t\t\t\tangles = angles.map(a => a.toFixed(1) + '\\u00B0');\n\n\t\t\t\tlet elAlpha = this.elContent.find(`#angle_cell_alpha`);\n\t\t\t\tlet elBetta = this.elContent.find(`#angle_cell_betta`);\n\t\t\t\tlet elGamma = this.elContent.find(`#angle_cell_gamma`);\n\n\t\t\t\telAlpha.html(angles[0]);\n\t\t\t\telBetta.html(angles[1]);\n\t\t\t\telGamma.html(angles[2]);\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet dimensions = this.measurement.scale.toArray();\n\t\t\t\tdimensions = dimensions.map(v => Utils.addCommas(v.toFixed(2)));\n\n\t\t\t\tlet elLength = this.elContent.find(`#cell_length`);\n\t\t\t\tlet elWidth = this.elContent.find(`#cell_width`);\n\t\t\t\tlet elHeight = this.elContent.find(`#cell_height`);\n\n\t\t\t\telLength.html(dimensions[0]);\n\t\t\t\telWidth.html(dimensions[1]);\n\t\t\t\telHeight.html(dimensions[2]);\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet elVolume = this.elContent.find(`#measurement_volume`);\n\t\t\t\tlet volume = this.measurement.getVolume();\n\t\t\t\telVolume.html(Utils.addCommas(volume.toFixed(2)));\n\t\t\t}\n\n\t\t\tthis.elCheckClip.prop(\"checked\", this.measurement.clip);\n\t\t\tthis.elCheckShow.prop(\"checked\", this.measurement.visible);\n\n\t\t}\n\t};\n\n\tclass ProfilePanel extends MeasurePanel{\n\t\tconstructor(viewer, measurement, propertiesPanel){\n\t\t\tsuper(viewer, measurement, propertiesPanel);\n\n\t\t\tlet removeIconPath = Potree.resourcePath + '/icons/remove.svg';\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"measurement_content selectable\">\n\t\t\t\t<span class=\"coordinates_table_container\"></span>\n\t\t\t\t<br>\n\t\t\t\t<span style=\"display:flex\">\n\t\t\t\t\t<span style=\"display:flex; align-items: center; padding-right: 10px\">Width: </span>\n\t\t\t\t\t<input id=\"sldProfileWidth\" name=\"sldProfileWidth\" value=\"5.06\" style=\"flex-grow: 1; width:100%\">\n\t\t\t\t</span>\n\t\t\t\t<br>\n\n\t\t\t\t<li style=\"margin-top: 10px\">\n\t\t\t\t\t<input name=\"download_profile\" type=\"button\" value=\"prepare download\" style=\"width: 100%\" />\n\t\t\t\t\t<div name=\"download_message\"></div>\n\t\t\t\t</li>\n\n\t\t\t\t<br>\n\n\t\t\t\t<input type=\"button\" id=\"show_2d_profile\" value=\"show 2d profile\" style=\"width: 100%\"/>\n\n\t\t\t\t<!-- ACTIONS -->\n\t\t\t\t<div style=\"display: flex; margin-top: 12px\">\n\t\t\t\t\t<span></span>\n\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t<img name=\"remove\" class=\"button-icon\" src=\"${removeIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tthis.elRemove = this.elContent.find(\"img[name=remove]\");\n\t\t\tthis.elRemove.click( () => {\n\t\t\t\tthis.viewer.scene.removeProfile(measurement);\n\t\t\t});\n\n\t\t\t{ // download\n\t\t\t\tthis.elDownloadButton = this.elContent.find(`input[name=download_profile]`);\n\n\t\t\t\tif(this.propertiesPanel.viewer.server){\n\t\t\t\t\tthis.elDownloadButton.click(() => this.download());\n\t\t\t\t} else {\n\t\t\t\t\tthis.elDownloadButton.hide();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // width spinner\n\t\t\t\tlet elWidthSlider = this.elContent.find(`#sldProfileWidth`);\n\n\t\t\t\telWidthSlider.spinner({\n\t\t\t\t\tmin: 0, max: 10 * 1000 * 1000, step: 0.01,\n\t\t\t\t\tnumberFormat: 'n',\n\t\t\t\t\tstart: () => {},\n\t\t\t\t\tspin: (event, ui) => {\n\t\t\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\t\t\tmeasurement.setWidth(value);\n\t\t\t\t\t},\n\t\t\t\t\tchange: (event, ui) => {\n\t\t\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\t\t\tmeasurement.setWidth(value);\n\t\t\t\t\t},\n\t\t\t\t\tstop: (event, ui) => {\n\t\t\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\t\t\tmeasurement.setWidth(value);\n\t\t\t\t\t},\n\t\t\t\t\tincremental: (count) => {\n\t\t\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\t\t\tlet step = elWidthSlider.spinner('option', 'step');\n\n\t\t\t\t\t\tlet delta = value * 0.05;\n\t\t\t\t\t\tlet increments = Math.max(1, parseInt(delta / step));\n\n\t\t\t\t\t\treturn increments;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\telWidthSlider.spinner('value', measurement.getWidth());\n\t\t\t\telWidthSlider.spinner('widget').css('width', '100%');\n\n\t\t\t\tlet widthListener = (event) => {\n\t\t\t\t\tlet value = elWidthSlider.spinner('value');\n\t\t\t\t\tif (value !== measurement.getWidth()) {\n\t\t\t\t\t\telWidthSlider.spinner('value', measurement.getWidth());\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"width_changed\", widthListener);\n\t\t\t}\n\n\t\t\tlet elShow2DProfile = this.elContent.find(`#show_2d_profile`);\n\t\t\telShow2DProfile.click(() => {\n\t\t\t\tthis.propertiesPanel.viewer.profileWindow.show();\n\t\t\t\tthis.propertiesPanel.viewer.profileWindowController.setProfile(measurement);\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_added\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_removed\", this._update);\n\t\t\tthis.propertiesPanel.addVolatileListener(measurement, \"marker_moved\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tlet elCoordiantesContainer = this.elContent.find('.coordinates_table_container');\n\t\t\telCoordiantesContainer.empty();\n\t\t\telCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points));\n\t\t}\n\n\t\tasync download(){\n\n\t\t\tlet profile = this.measurement;\n\n\t\t\tlet regions = [];\n\t\t\t{\n\t\t\t\tlet segments = profile.getSegments();\n\t\t\t\tlet width = profile.width;\n\t\t\t\t\n\t\t\t\tfor(let segment of segments){\n\t\t\t\t\tlet start = segment.start.clone().multiply(new Vector3(1, 1, 0));\n\t\t\t\t\tlet end = segment.end.clone().multiply(new Vector3(1, 1, 0));\n\t\t\t\t\tlet center = new Vector3().addVectors(start, end).multiplyScalar(0.5);\n\t\t\t\t\t\n\t\t\t\t\tlet startEndDir = new Vector3().subVectors(end, start).normalize();\n\t\t\t\t\tlet endStartDir = new Vector3().subVectors(start, end).normalize();\n\t\t\t\t\tlet upDir = new Vector3(0, 0, 1);\n\t\t\t\t\tlet rightDir = new Vector3().crossVectors(startEndDir, upDir);\n\t\t\t\t\tlet leftDir = new Vector3().crossVectors(endStartDir, upDir);\n\t\t\t\t\t\n\t\t\t\t\tconsole.log(leftDir);\n\t\t\t\t\t\n\t\t\t\t\tlet right = rightDir.clone().multiplyScalar(width * 0.5).add(center);\n\t\t\t\t\tlet left = leftDir.clone().multiplyScalar(width * 0.5).add(center);\n\t\t\t\t\t\n\t\t\t\t\tlet planes = [\n\t\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(startEndDir, start),\n\t\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(endStartDir, end),\n\t\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(leftDir, right),\n\t\t\t\t\t\tnew Plane().setFromNormalAndCoplanarPoint(rightDir, left),\n\t\t\t\t\t];\n\t\t\t\t\t\n\t\t\t\t\tlet planeQueryParts = [];\n\t\t\t\t\tfor(let plane of planes){\n\t\t\t\t\t\tlet part = [plane.normal.toArray(), plane.constant].join(\",\");\n\t\t\t\t\t\tpart = `[${part}]`;\n\t\t\t\t\t\tplaneQueryParts.push(part);\n\t\t\t\t\t}\n\t\t\t\t\tlet region = \"[\" + planeQueryParts.join(\",\") + \"]\";\n\t\t\t\t\tregions.push(region);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet regionsArg = regions.join(\",\");\n\n\t\t\tlet pointcloudArgs = [];\n\t\t\tfor(let pointcloud of this.viewer.scene.pointclouds){\n\t\t\t\tif(!pointcloud.visible){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet offset = pointcloud.pcoGeometry.offset.clone();\n\t\t\t\tlet negateOffset = new Matrix4().makeTranslation(...offset.multiplyScalar(-1).toArray());\n\t\t\t\tlet matrixWorld = pointcloud.matrixWorld;\n\n\t\t\t\tlet transform = new Matrix4().multiplyMatrices(matrixWorld, negateOffset);\n\n\t\t\t\tlet path = `${window.location.pathname}/../${pointcloud.pcoGeometry.url}`;\n\n\t\t\t\tlet arg = {\n\t\t\t\t\tpath: path,\n\t\t\t\t\ttransform: transform.elements,\n\t\t\t\t};\n\t\t\t\tlet argString = JSON.stringify(arg);\n\n\t\t\t\tpointcloudArgs.push(argString);\n\t\t\t}\n\t\t\tlet pointcloudsArg = pointcloudArgs.join(\",\");\n\n\t\t\tlet elMessage = this.elContent.find(\"div[name=download_message]\");\n\n\t\t\tlet error = (message) => {\n\t\t\t\telMessage.html(`<div style=\"color: #ff0000\">ERROR: ${message}</div>`);\n\t\t\t};\n\n\t\t\tlet info = (message) => {\n\t\t\t\telMessage.html(`${message}`);\n\t\t\t};\n\n\t\t\tlet handle = null;\n\t\t\t{ // START FILTER\n\t\t\t\tlet url = `${viewer.server}/create_regions_filter?pointclouds=[${pointcloudsArg}]&regions=[${regionsArg}]`;\n\t\t\t\t\n\t\t\t\t//console.log(url);\n\n\t\t\t\tinfo(\"estimating results ...\");\n\n\t\t\t\tlet response = await fetch(url);\n\t\t\t\tlet jsResponse = await response.json();\n\t\t\t\t//console.log(jsResponse);\n\n\t\t\t\tif(!jsResponse.handle){\n\t\t\t\t\terror(jsResponse.message);\n\t\t\t\t\treturn;\n\t\t\t\t}else {\n\t\t\t\t\thandle = jsResponse.handle;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // WAIT, CHECK PROGRESS, HANDLE FINISH\n\t\t\t\tlet url = `${viewer.server}/check_regions_filter?handle=${handle}`;\n\n\t\t\t\tlet sleep = (function(duration){\n\t\t\t\t\treturn new Promise( (res, rej) => {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tres();\n\t\t\t\t\t\t}, duration);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tlet handleFiltering = (jsResponse) => {\n\t\t\t\t\tlet {progress, estimate} = jsResponse;\n\n\t\t\t\t\tlet progressFract = progress[\"processed points\"] / estimate.points;\n\t\t\t\t\tlet progressPercents = parseInt(progressFract * 100);\n\n\t\t\t\t\tinfo(`progress: ${progressPercents}%`);\n\t\t\t\t};\n\n\t\t\t\tlet handleFinish = (jsResponse) => {\n\t\t\t\t\tlet message = \"downloads ready: <br>\";\n\t\t\t\t\tmessage += \"<ul>\";\n\n\t\t\t\t\tfor(let i = 0; i < jsResponse.pointclouds.length; i++){\n\t\t\t\t\t\tlet url = `${viewer.server}/download_regions_filter_result?handle=${handle}&index=${i}`;\n\n\t\t\t\t\t\tmessage += `<li><a href=\"${url}\">result_${i}.las</a> </li>\\n`;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet reportURL = `${viewer.server}/download_regions_filter_report?handle=${handle}`;\n\t\t\t\t\tmessage += `<li> <a href=\"${reportURL}\">report.json</a> </li>\\n`;\n\t\t\t\t\tmessage += \"</ul>\";\n\n\t\t\t\t\tinfo(message);\n\t\t\t\t};\n\n\t\t\t\tlet handleUnexpected = (jsResponse) => {\n\t\t\t\t\tlet message = `Unexpected Response. <br>status: ${jsResponse.status} <br>message: ${jsResponse.message}`;\n\t\t\t\t\tinfo(message);\n\t\t\t\t};\n\n\t\t\t\tlet handleError = (jsResponse) => {\n\t\t\t\t\tlet message = `ERROR: ${jsResponse.message}`;\n\t\t\t\t\terror(message);\n\n\t\t\t\t\tthrow new Error(message);\n\t\t\t\t};\n\n\t\t\t\tlet start = Date.now();\n\n\t\t\t\twhile(true){\n\t\t\t\t\tlet response = await fetch(url);\n\t\t\t\t\tlet jsResponse = await response.json();\n\n\t\t\t\t\tif(jsResponse.status === \"ERROR\"){\n\t\t\t\t\t\thandleError(jsResponse);\n\t\t\t\t\t}else if(jsResponse.status === \"FILTERING\"){\n\t\t\t\t\t\thandleFiltering(jsResponse);\n\t\t\t\t\t}else if(jsResponse.status === \"FINISHED\"){\n\t\t\t\t\t\thandleFinish(jsResponse);\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}else {\n\t\t\t\t\t\thandleUnexpected(jsResponse);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet durationS = (Date.now() - start) / 1000;\n\t\t\t\t\tlet sleepAmountMS = durationS < 10 ? 100 : 1000;\n\n\t\t\t\t\tawait sleep(sleepAmountMS);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t};\n\n\tclass CameraPanel{\n\t\tconstructor(viewer, propertiesPanel){\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.propertiesPanel = propertiesPanel;\n\n\t\t\tthis._update = () => { this.update(); };\n\n\t\t\tlet copyIconPath = Potree.resourcePath + '/icons/copy.svg';\n\t\t\tthis.elContent = $(`\n\t\t<div class=\"propertypanel_content\">\n\t\t\t<table>\n\t\t\t\t<tr>\n\t\t\t\t\t<th colspan=\"3\">position</th>\n\t\t\t\t\t<th></th>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td align=\"center\" id=\"camera_position_x\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"center\" id=\"camera_position_y\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"center\" id=\"camera_position_z\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"right\" id=\"copy_camera_position\" style=\"width: 25%\">\n\t\t\t\t\t\t<img name=\"copyPosition\" title=\"copy\" class=\"button-icon\" src=\"${copyIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<th colspan=\"3\">target</th>\n\t\t\t\t\t<th></th>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td align=\"center\" id=\"camera_target_x\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"center\" id=\"camera_target_y\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"center\" id=\"camera_target_z\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"right\" id=\"copy_camera_target\" style=\"width: 25%\">\n\t\t\t\t\t\t<img name=\"copyTarget\" title=\"copy\" class=\"button-icon\" src=\"${copyIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</div>\n\t\t`);\n\n\t\t\tthis.elCopyPosition = this.elContent.find(\"img[name=copyPosition]\");\n\t\t\tthis.elCopyPosition.click( () => {\n\t\t\t\tlet pos = this.viewer.scene.getActiveCamera().position.toArray();\n\t\t\t\tlet msg = pos.map(c => c.toFixed(3)).join(\", \");\n\t\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t\t`Copied value to clipboard: <br>'${msg}'`,\n\t\t\t\t\t\t{duration: 3000});\n\t\t\t});\n\n\t\t\tthis.elCopyTarget = this.elContent.find(\"img[name=copyTarget]\");\n\t\t\tthis.elCopyTarget.click( () => {\n\t\t\t\tlet pos = this.viewer.scene.view.getPivot().toArray();\n\t\t\t\tlet msg = pos.map(c => c.toFixed(3)).join(\", \");\n\t\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t\t`Copied value to clipboard: <br>'${msg}'`,\n\t\t\t\t\t\t{duration: 3000});\n\t\t\t});\n\n\t\t\tthis.propertiesPanel.addVolatileListener(viewer, \"camera_changed\", this._update);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\t//console.log(\"updating camera panel\");\n\n\t\t\tlet camera = this.viewer.scene.getActiveCamera();\n\t\t\tlet view = this.viewer.scene.view;\n\n\t\t\tlet pos = camera.position.toArray().map(c => Utils.addCommas(c.toFixed(3)));\n\t\t\tthis.elContent.find(\"#camera_position_x\").html(pos[0]);\n\t\t\tthis.elContent.find(\"#camera_position_y\").html(pos[1]);\n\t\t\tthis.elContent.find(\"#camera_position_z\").html(pos[2]);\n\n\t\t\tlet target = view.getPivot().toArray().map(c => Utils.addCommas(c.toFixed(3)));\n\t\t\tthis.elContent.find(\"#camera_target_x\").html(target[0]);\n\t\t\tthis.elContent.find(\"#camera_target_y\").html(target[1]);\n\t\t\tthis.elContent.find(\"#camera_target_z\").html(target[2]);\n\t\t}\n\t};\n\n\tclass AnnotationPanel{\n\t\tconstructor(viewer, propertiesPanel, annotation){\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.propertiesPanel = propertiesPanel;\n\t\t\tthis.annotation = annotation;\n\n\t\t\tthis._update = () => { this.update(); };\n\n\t\t\tlet copyIconPath = `${Potree.resourcePath}/icons/copy.svg`;\n\t\t\tthis.elContent = $(`\n\t\t<div class=\"propertypanel_content\">\n\t\t\t<table>\n\t\t\t\t<tr>\n\t\t\t\t\t<th colspan=\"3\">position</th>\n\t\t\t\t\t<th></th>\n\t\t\t\t</tr>\n\t\t\t\t<tr>\n\t\t\t\t\t<td align=\"center\" id=\"annotation_position_x\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"center\" id=\"annotation_position_y\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"center\" id=\"annotation_position_z\" style=\"width: 25%\"></td>\n\t\t\t\t\t<td align=\"right\" id=\"copy_annotation_position\" style=\"width: 25%\">\n\t\t\t\t\t\t<img name=\"copyPosition\" title=\"copy\" class=\"button-icon\" src=\"${copyIconPath}\" style=\"width: 16px; height: 16px\"/>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\n\t\t\t</table>\n\n\t\t\t<div>\n\n\t\t\t\t<div class=\"heading\">Title</div>\n\t\t\t\t<div id=\"annotation_title\" contenteditable=\"true\">\n\t\t\t\t\tAnnotation Title\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"heading\">Description</div>\n\t\t\t\t<div id=\"annotation_description\" contenteditable=\"true\">\n\t\t\t\t\tA longer description of this annotation. \n\t\t\t\t\t\tCan be multiple lines long. TODO: the user should be able\n\t\t\t\t\t\tto modify title and description. \n\t\t\t\t</div>\n\n\t\t\t</div>\n\n\t\t</div>\n\t\t`);\n\n\t\t\tthis.elCopyPosition = this.elContent.find(\"img[name=copyPosition]\");\n\t\t\tthis.elCopyPosition.click( () => {\n\t\t\t\tlet pos = this.annotation.position.toArray();\n\t\t\t\tlet msg = pos.map(c => c.toFixed(3)).join(\", \");\n\t\t\t\tUtils.clipboardCopy(msg);\n\n\t\t\t\tthis.viewer.postMessage(\n\t\t\t\t\t\t`Copied value to clipboard: <br>'${msg}'`,\n\t\t\t\t\t\t{duration: 3000});\n\t\t\t});\n\n\t\t\tthis.elTitle = this.elContent.find(\"#annotation_title\").html(annotation.title);\n\t\t\tthis.elDescription = this.elContent.find(\"#annotation_description\").html(annotation.description);\n\n\t\t\tthis.elTitle[0].addEventListener(\"input\", () => {\n\t\t\t\tconst title = this.elTitle.html();\n\t\t\t\tannotation.title = title;\n\n\t\t\t}, false);\n\n\t\t\tthis.elDescription[0].addEventListener(\"input\", () => {\n\t\t\t\tconst description = this.elDescription.html();\n\t\t\t\tannotation.description = description;\n\t\t\t}, false);\n\n\t\t\tthis.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\tconst {annotation, elContent, elTitle, elDescription} = this;\n\n\t\t\tlet pos = annotation.position.toArray().map(c => Utils.addCommas(c.toFixed(3)));\n\t\t\telContent.find(\"#annotation_position_x\").html(pos[0]);\n\t\t\telContent.find(\"#annotation_position_y\").html(pos[1]);\n\t\t\telContent.find(\"#annotation_position_z\").html(pos[2]);\n\n\t\t\telTitle.html(annotation.title);\n\t\t\telDescription.html(annotation.description);\n\n\n\t\t}\n\t};\n\n\tclass CameraAnimationPanel{\n\t\tconstructor(viewer, propertiesPanel, animation){\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.propertiesPanel = propertiesPanel;\n\t\t\tthis.animation = animation;\n\n\t\t\tthis.elContent = $(`\n\t\t\t<div class=\"propertypanel_content\">\n\t\t\t\t<span id=\"animation_keyframes\"></span>\n\n\t\t\t\t<span>\n\n\t\t\t\t\t<span style=\"display:flex\">\n\t\t\t\t\t\t<span style=\"display:flex; align-items: center; padding-right: 10px\">Duration: </span>\n\t\t\t\t\t\t<input name=\"spnDuration\" value=\"5.0\" style=\"flex-grow: 1; width:100%\">\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<span>Time: </span><span id=\"lblTime\"></span> <div id=\"sldTime\"></div>\n\n\t\t\t\t\t<input name=\"play\" type=\"button\" value=\"play\"/>\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tconst elPlay = this.elContent.find(\"input[name=play]\");\n\t\t\telPlay.click( () => {\n\t\t\t\tanimation.play();\n\t\t\t});\n\n\t\t\tconst elSlider = this.elContent.find('#sldTime');\n\t\t\telSlider.slider({\n\t\t\t\tvalue: 0,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1,\n\t\t\t\tstep: 0.001,\n\t\t\t\tslide: (event, ui) => { \n\t\t\t\t\tanimation.set(ui.value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tlet elDuration = this.elContent.find(`input[name=spnDuration]`);\n\t\t\telDuration.spinner({\n\t\t\t\tmin: 0, max: 300, step: 0.01,\n\t\t\t\tnumberFormat: 'n',\n\t\t\t\tstart: () => {},\n\t\t\t\tspin: (event, ui) => {\n\t\t\t\t\tlet value = elDuration.spinner('value');\n\t\t\t\t\tanimation.setDuration(value);\n\t\t\t\t},\n\t\t\t\tchange: (event, ui) => {\n\t\t\t\t\tlet value = elDuration.spinner('value');\n\t\t\t\t\tanimation.setDuration(value);\n\t\t\t\t},\n\t\t\t\tstop: (event, ui) => {\n\t\t\t\t\tlet value = elDuration.spinner('value');\n\t\t\t\t\tanimation.setDuration(value);\n\t\t\t\t},\n\t\t\t\tincremental: (count) => {\n\t\t\t\t\tlet value = elDuration.spinner('value');\n\t\t\t\t\tlet step = elDuration.spinner('option', 'step');\n\n\t\t\t\t\tlet delta = value * 0.05;\n\t\t\t\t\tlet increments = Math.max(1, parseInt(delta / step));\n\n\t\t\t\t\treturn increments;\n\t\t\t\t}\n\t\t\t});\n\t\t\telDuration.spinner('value', animation.getDuration());\n\t\t\telDuration.spinner('widget').css('width', '100%');\n\n\t\t\tconst elKeyframes = this.elContent.find(\"#animation_keyframes\");\n\n\t\t\tconst updateKeyframes = () => {\n\t\t\t\telKeyframes.empty();\n\n\t\t\t\t//let index = 0;\n\n\t\t\t\t// <span style=\"flex-grow: 0;\">\n\t\t\t\t// \t\t\t\t<img name=\"add\" src=\"${Potree.resourcePath}/icons/add.svg\" style=\"width: 1.5em; height: 1.5em\"/>\n\t\t\t\t// \t\t\t</span>\n\n\t\t\t\tconst addNewKeyframeItem = (index) => {\n\t\t\t\t\tlet elNewKeyframe = $(`\n\t\t\t\t\t<div style=\"display: flex; margin: 0.2em 0em\">\n\t\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t\t<input type=\"button\" name=\"add\" value=\"insert control point\" />\n\t\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\n\t\t\t\t\tconst elAdd = elNewKeyframe.find(\"input[name=add]\");\n\t\t\t\t\telAdd.click( () => {\n\t\t\t\t\t\tanimation.createControlPoint(index);\n\t\t\t\t\t});\n\n\t\t\t\t\telKeyframes.append(elNewKeyframe);\n\t\t\t\t};\n\n\t\t\t\tconst addKeyframeItem = (index) => {\n\t\t\t\t\tlet elKeyframe = $(`\n\t\t\t\t\t<div style=\"display: flex; margin: 0.2em 0em\">\n\t\t\t\t\t\t<span style=\"flex-grow: 0;\">\n\t\t\t\t\t\t\t<img name=\"assign\" src=\"${Potree.resourcePath}/icons/assign.svg\" style=\"width: 1.5em; height: 1.5em\"/>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span style=\"flex-grow: 0;\">\n\t\t\t\t\t\t\t<img name=\"move\" src=\"${Potree.resourcePath}/icons/circled_dot.svg\" style=\"width: 1.5em; height: 1.5em\"/>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span style=\"flex-grow: 0; width: 1.5em; height: 1.5em\"></span>\n\t\t\t\t\t\t<span style=\"flex-grow: 0; font-size: 1.5em\">keyframe</span>\n\t\t\t\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t\t\t\t<span style=\"flex-grow: 0;\">\n\t\t\t\t\t\t\t<img name=\"delete\" src=\"${Potree.resourcePath}/icons/remove.svg\" style=\"width: 1.5em; height: 1.5em\"/>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\n\t\t\t\t\tconst elAssign = elKeyframe.find(\"img[name=assign]\");\n\t\t\t\t\tconst elMove = elKeyframe.find(\"img[name=move]\");\n\t\t\t\t\tconst elDelete = elKeyframe.find(\"img[name=delete]\");\n\n\t\t\t\t\telAssign.click( () => {\n\t\t\t\t\t\tconst cp = animation.controlPoints[index];\n\n\t\t\t\t\t\tcp.position.copy(viewer.scene.view.position);\n\t\t\t\t\t\tcp.target.copy(viewer.scene.view.getPivot());\n\t\t\t\t\t});\n\n\t\t\t\t\telMove.click( () => {\n\t\t\t\t\t\tconst cp = animation.controlPoints[index];\n\n\t\t\t\t\t\tviewer.scene.view.position.copy(cp.position);\n\t\t\t\t\t\tviewer.scene.view.lookAt(cp.target);\n\t\t\t\t\t});\n\n\t\t\t\t\telDelete.click( () => {\n\t\t\t\t\t\tconst cp = animation.controlPoints[index];\n\t\t\t\t\t\tanimation.removeControlPoint(cp);\n\t\t\t\t\t});\n\n\t\t\t\t\telKeyframes.append(elKeyframe);\n\t\t\t\t};\n\n\t\t\t\tlet index = 0;\n\n\t\t\t\taddNewKeyframeItem(index);\n\n\t\t\t\tfor(const cp of animation.controlPoints){\n\t\t\t\t\t\n\t\t\t\t\taddKeyframeItem(index);\n\t\t\t\t\tindex++;\n\t\t\t\t\taddNewKeyframeItem(index);\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tupdateKeyframes();\n\n\t\t\tanimation.addEventListener(\"controlpoint_added\", updateKeyframes);\n\t\t\tanimation.addEventListener(\"controlpoint_removed\", updateKeyframes);\n\n\n\n\n\t\t\t// this._update = () => { this.update(); };\n\n\t\t\t// this.update();\n\t\t}\n\n\t\tupdate(){\n\t\t\t\n\t\t}\n\t};\n\n\tclass PropertiesPanel{\n\n\t\tconstructor(container, viewer){\n\t\t\tthis.container = container;\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.object = null;\n\t\t\tthis.cleanupTasks = [];\n\t\t\tthis.scene = null;\n\t\t}\n\n\t\tsetScene(scene){\n\t\t\tthis.scene = scene;\n\t\t}\n\n\t\tset(object){\n\t\t\tif(this.object === object){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.object = object;\n\t\t\t\n\t\t\tfor(let task of this.cleanupTasks){\n\t\t\t\ttask();\n\t\t\t}\n\t\t\tthis.cleanupTasks = [];\n\t\t\tthis.container.empty();\n\n\t\t\tif(object instanceof PointCloudTree){\n\t\t\t\tthis.setPointCloud(object);\n\t\t\t}else if(object instanceof Measure || object instanceof Profile || object instanceof Volume){\n\t\t\t\tthis.setMeasurement(object);\n\t\t\t}else if(object instanceof Camera){\n\t\t\t\tthis.setCamera(object);\n\t\t\t}else if(object instanceof Annotation){\n\t\t\t\tthis.setAnnotation(object);\n\t\t\t}else if(object instanceof CameraAnimation){\n\t\t\t\tthis.setCameraAnimation(object);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t//\n\t\t// Used for events that should be removed when the property object changes.\n\t\t// This is for listening to materials, scene, point clouds, etc.\n\t\t// not required for DOM listeners, since they are automatically cleared by removing the DOM subtree.\n\t\t//\n\t\taddVolatileListener(target, type, callback){\n\t\t\ttarget.addEventListener(type, callback);\n\t\t\tthis.cleanupTasks.push(() => {\n\t\t\t\ttarget.removeEventListener(type, callback);\n\t\t\t});\n\t\t}\n\n\t\tsetPointCloud(pointcloud){\n\n\t\t\tlet material = pointcloud.material;\n\n\t\t\tlet panel = $(`\n\t\t\t<div class=\"scene_content selectable\">\n\t\t\t\t<ul class=\"pv-menu-list\">\n\n\t\t\t\t<li>\n\t\t\t\t<span data-i18n=\"appearance.point_size\"></span>:&nbsp;<span id=\"lblPointSize\"></span> <div id=\"sldPointSize\"></div>\n\t\t\t\t</li>\n\t\t\t\t<li>\n\t\t\t\t<span data-i18n=\"appearance.min_point_size\"></span>:&nbsp;<span id=\"lblMinPointSize\"></span> <div id=\"sldMinPointSize\"></div>\n\t\t\t\t</li>\n\n\t\t\t\t<!-- SIZE TYPE -->\n\t\t\t\t<li>\n\t\t\t\t\t<label for=\"optPointSizing\" class=\"pv-select-label\" data-i18n=\"appearance.point_size_type\">Point Sizing </label>\n\t\t\t\t\t<select id=\"optPointSizing\" name=\"optPointSizing\">\n\t\t\t\t\t\t<option>FIXED</option>\n\t\t\t\t\t\t<option>ATTENUATED</option>\n\t\t\t\t\t\t<option>ADAPTIVE</option>\n\t\t\t\t\t</select>\n\t\t\t\t</li>\n\n\t\t\t\t<!-- SHAPE -->\n\t\t\t\t<li>\n\t\t\t\t\t<label for=\"optShape\" class=\"pv-select-label\" data-i18n=\"appearance.point_shape\"></label><br>\n\t\t\t\t\t<select id=\"optShape\" name=\"optShape\">\n\t\t\t\t\t\t<option>SQUARE</option>\n\t\t\t\t\t\t<option>CIRCLE</option>\n\t\t\t\t\t\t<option>PARABOLOID</option>\n\t\t\t\t\t</select>\n\t\t\t\t</li>\n\n\t\t\t\t<li id=\"materials_backface_container\">\n\t\t\t\t<label><input id=\"set_backface_culling\" type=\"checkbox\" /><span data-i18n=\"appearance.backface_culling\"></span></label>\n\t\t\t\t</li>\n\t\t\t\t\n\t\t\t\t<!-- OPACITY -->\n\t\t\t\t<li><span data-i18n=\"appearance.point_opacity\"></span>:<span id=\"lblOpacity\"></span><div id=\"sldOpacity\"></div></li>\n\n\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t<span>Attribute</span>\n\t\t\t\t</div>\n\n\t\t\t\t<li>\n\t\t\t\t\t<select id=\"optMaterial\" name=\"optMaterial\"></select>\n\t\t\t\t</li>\n\n\t\t\t\t<div id=\"materials.composite_weight_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>Attribute Weights</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<li>RGB: <span id=\"lblWeightRGB\"></span> <div id=\"sldWeightRGB\"></div>\t</li>\n\t\t\t\t\t<li>Intensity: <span id=\"lblWeightIntensity\"></span> <div id=\"sldWeightIntensity\"></div>\t</li>\n\t\t\t\t\t<li>Elevation: <span id=\"lblWeightElevation\"></span> <div id=\"sldWeightElevation\"></div>\t</li>\n\t\t\t\t\t<li>Classification: <span id=\"lblWeightClassification\"></span> <div id=\"sldWeightClassification\"></div>\t</li>\n\t\t\t\t\t<li>Return Number: <span id=\"lblWeightReturnNumber\"></span> <div id=\"sldWeightReturnNumber\"></div>\t</li>\n\t\t\t\t\t<li>Source ID: <span id=\"lblWeightSourceID\"></span> <div id=\"sldWeightSourceID\"></div>\t</li>\n\t\t\t\t</div>\n\n\t\t\t\t<div id=\"materials.rgb_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>RGB</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<li>Gamma: <span id=\"lblRGBGamma\"></span> <div id=\"sldRGBGamma\"></div>\t</li>\n\t\t\t\t\t<li>Brightness: <span id=\"lblRGBBrightness\"></span> <div id=\"sldRGBBrightness\"></div>\t</li>\n\t\t\t\t\t<li>Contrast: <span id=\"lblRGBContrast\"></span> <div id=\"sldRGBContrast\"></div>\t</li>\n\t\t\t\t</div>\n\n\t\t\t\t<div id=\"materials.extra_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>Extra Attribute</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<li><span data-i18n=\"appearance.extra_range\"></span>: <span id=\"lblExtraRange\"></span> <div id=\"sldExtraRange\"></div></li>\n\n\t\t\t\t\t<li>Gamma: <span id=\"lblExtraGamma\"></span> <div id=\"sldExtraGamma\"></div></li>\n\t\t\t\t\t<li>Brightness: <span id=\"lblExtraBrightness\"></span> <div id=\"sldExtraBrightness\"></div></li>\n\t\t\t\t\t<li>Contrast: <span id=\"lblExtraContrast\"></span> <div id=\"sldExtraContrast\"></div></li>\n\t\t\t\t</div>\n\t\t\t\t\n\t\t\t\t<div id=\"materials.matcap_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>MATCAP</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<div id=\"matcap_scheme_selection\" style=\"display: flex; flex-wrap: wrap;\"> </div>\n\t\t\t\t\t</li>\n\t\t\t\t</div>\n\n\t\t\t\t<div id=\"materials.color_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>Color</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<input id=\"materials.color.picker\" />\n\t\t\t\t</div>\n\n\n\t\t\t\t<div id=\"materials.elevation_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>Elevation</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<li><span data-i18n=\"appearance.elevation_range\"></span>: <span id=\"lblHeightRange\"></span> <div id=\"sldHeightRange\"></div>\t</li>\n\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<selectgroup id=\"gradient_repeat_option\">\n\t\t\t\t\t\t\t<option id=\"gradient_repeat_clamp\" value=\"CLAMP\">Clamp</option>\n\t\t\t\t\t\t\t<option id=\"gradient_repeat_repeat\" value=\"REPEAT\">Repeat</option>\n\t\t\t\t\t\t\t<option id=\"gradient_repeat_mirrored_repeat\" value=\"MIRRORED_REPEAT\">Mirrored Repeat</option>\n\t\t\t\t\t\t</selectgroup>\n\t\t\t\t\t</li>\n\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<span>Gradient Scheme:</span>\n\t\t\t\t\t\t<div id=\"elevation_gradient_scheme_selection\" style=\"display: flex; padding: 1em 0em\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t</div>\n\n\t\t\t\t<div id=\"materials.transition_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>Transition</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<li>transition: <span id=\"lblTransition\"></span> <div id=\"sldTransition\"></div>\t</li>\n\t\t\t\t</div>\n\n\t\t\t\t<div id=\"materials.intensity_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>Intensity</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<li>Range: <span id=\"lblIntensityRange\"></span> <div id=\"sldIntensityRange\"></div>\t</li>\n\t\t\t\t\t<li>Gamma: <span id=\"lblIntensityGamma\"></span> <div id=\"sldIntensityGamma\"></div>\t</li>\n\t\t\t\t\t<li>Brightness: <span id=\"lblIntensityBrightness\"></span> <div id=\"sldIntensityBrightness\"></div>\t</li>\n\t\t\t\t\t<li>Contrast: <span id=\"lblIntensityContrast\"></span> <div id=\"sldIntensityContrast\"></div>\t</li>\n\t\t\t\t</div>\n\n\t\t\t\t<div id=\"materials.gpstime_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>GPS Time</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\t\t\t\t\n\t\t\t\t<div id=\"materials.index_container\">\n\t\t\t\t\t<div class=\"divider\">\n\t\t\t\t\t\t<span>Indices</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`);\n\n\t\t\tpanel.i18n();\n\t\t\tthis.container.append(panel);\n\n\t\t\t{ // POINT SIZE\n\t\t\t\tlet sldPointSize = panel.find(`#sldPointSize`);\n\t\t\t\tlet lblPointSize = panel.find(`#lblPointSize`);\n\n\t\t\t\tsldPointSize.slider({\n\t\t\t\t\tvalue: material.size,\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 3,\n\t\t\t\t\tstep: 0.01,\n\t\t\t\t\tslide: function (event, ui) { material.size = ui.value; }\n\t\t\t\t});\n\n\t\t\t\tlet update = (e) => {\n\t\t\t\t\tlblPointSize.html(material.size.toFixed(2));\n\t\t\t\t\tsldPointSize.slider({value: material.size});\n\t\t\t\t};\n\t\t\t\tthis.addVolatileListener(material, \"point_size_changed\", update);\n\t\t\t\t\n\t\t\t\tupdate();\n\t\t\t}\n\n\t\t\t{ // MINIMUM POINT SIZE\n\t\t\t\tlet sldMinPointSize = panel.find(`#sldMinPointSize`);\n\t\t\t\tlet lblMinPointSize = panel.find(`#lblMinPointSize`);\n\n\t\t\t\tsldMinPointSize.slider({\n\t\t\t\t\tvalue: material.size,\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 3,\n\t\t\t\t\tstep: 0.01,\n\t\t\t\t\tslide: function (event, ui) { material.minSize = ui.value; }\n\t\t\t\t});\n\n\t\t\t\tlet update = (e) => {\n\t\t\t\t\tlblMinPointSize.html(material.minSize.toFixed(2));\n\t\t\t\t\tsldMinPointSize.slider({value: material.minSize});\n\t\t\t\t};\n\t\t\t\tthis.addVolatileListener(material, \"point_size_changed\", update);\n\t\t\t\t\n\t\t\t\tupdate();\n\t\t\t}\n\n\t\t\t{ // POINT SIZING\n\t\t\t\tlet strSizeType = Object.keys(PointSizeType)[material.pointSizeType];\n\n\t\t\t\tlet opt = panel.find(`#optPointSizing`);\n\t\t\t\topt.selectmenu();\n\t\t\t\topt.val(strSizeType).selectmenu('refresh');\n\n\t\t\t\topt.selectmenu({\n\t\t\t\t\tchange: (event, ui) => {\n\t\t\t\t\t\tmaterial.pointSizeType = PointSizeType[ui.item.value];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t{ // SHAPE\n\t\t\t\tlet opt = panel.find(`#optShape`);\n\n\t\t\t\topt.selectmenu({\n\t\t\t\t\tchange: (event, ui) => {\n\t\t\t\t\t\tlet value = ui.item.value;\n\n\t\t\t\t\t\tmaterial.shape = PointShape[value];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet update = () => {\n\t\t\t\t\tlet typename = Object.keys(PointShape)[material.shape];\n\n\t\t\t\t\topt.selectmenu().val(typename).selectmenu('refresh');\n\t\t\t\t};\n\t\t\t\tthis.addVolatileListener(material, \"point_shape_changed\", update);\n\n\t\t\t\tupdate();\n\t\t\t}\n\n\t\t\t{ // BACKFACE CULLING\n\t\t\t\t\n\t\t\t\tlet opt = panel.find(`#set_backface_culling`);\n\t\t\t\topt.click(() => {\n\t\t\t\t\tmaterial.backfaceCulling = opt.prop(\"checked\");\n\t\t\t\t});\n\t\t\t\tlet update = () => {\n\t\t\t\t\tlet value = material.backfaceCulling;\n\t\t\t\t\topt.prop(\"checked\", value);\n\t\t\t\t};\n\t\t\t\tthis.addVolatileListener(material, \"backface_changed\", update);\n\t\t\t\tupdate();\n\n\t\t\t\tlet blockBackface = $('#materials_backface_container');\n\t\t\t\tblockBackface.css('display', 'none');\n\n\t\t\t\tconst pointAttributes = pointcloud.pcoGeometry.pointAttributes;\n\t\t\t\tconst hasNormals = pointAttributes.hasNormals ? pointAttributes.hasNormals() : false;\n\t\t\t\tif(hasNormals) {\n\t\t\t\t\tblockBackface.css('display', 'block');\n\t\t\t\t}\n\t\t\t\t/*\n\t\t\t\topt.checkboxradio({\n\t\t\t\t\tclicked: (event, ui) => {\n\t\t\t\t\t\t// let value = ui.item.value;\n\t\t\t\t\t\tlet value = ui.item.checked;\n\t\t\t\t\t\tconsole.log(value);\n\t\t\t\t\t\tmaterial.backfaceCulling = value; // $('#set_freeze').prop(\"checked\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t*/\n\t\t\t}\n\n\t\t\t{ // OPACITY\n\t\t\t\tlet sldOpacity = panel.find(`#sldOpacity`);\n\t\t\t\tlet lblOpacity = panel.find(`#lblOpacity`);\n\n\t\t\t\tsldOpacity.slider({\n\t\t\t\t\tvalue: material.opacity,\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 1,\n\t\t\t\t\tstep: 0.001,\n\t\t\t\t\tslide: function (event, ui) { \n\t\t\t\t\t\tmaterial.opacity = ui.value;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet update = (e) => {\n\t\t\t\t\tlblOpacity.html(material.opacity.toFixed(2));\n\t\t\t\t\tsldOpacity.slider({value: material.opacity});\n\t\t\t\t};\n\t\t\t\tthis.addVolatileListener(material, \"opacity_changed\", update);\n\n\t\t\t\tupdate();\n\t\t\t}\n\n\t\t\t{\n\n\t\t\t\tconst attributes = pointcloud.pcoGeometry.pointAttributes.attributes;\n\n\t\t\t\tlet options = [];\n\n\t\t\t\toptions.push(...attributes.map(a => a.name));\n\n\t\t\t\tconst intensityIndex = options.indexOf(\"intensity\");\n\t\t\t\tif(intensityIndex >= 0){\n\t\t\t\t\toptions.splice(intensityIndex + 1, 0, \"intensity gradient\");\n\t\t\t\t}\n\n\t\t\t\toptions.push(\n\t\t\t\t\t\"elevation\",\n\t\t\t\t\t\"color\",\n\t\t\t\t\t'matcap',\n\t\t\t\t\t'indices',\n\t\t\t\t\t'level of detail',\n\t\t\t\t\t'composite'\n\t\t\t\t);\n\n\t\t\t\tconst blacklist = [\n\t\t\t\t\t\"POSITION_CARTESIAN\",\n\t\t\t\t\t\"position\",\n\t\t\t\t];\n\n\t\t\t\toptions = options.filter(o => !blacklist.includes(o));\n\n\t\t\t\tlet attributeSelection = panel.find('#optMaterial');\n\t\t\t\tfor(let option of options){\n\t\t\t\t\tlet elOption = $(`<option>${option}</option>`);\n\t\t\t\t\tattributeSelection.append(elOption);\n\t\t\t\t}\n\n\t\t\t\tlet updateMaterialPanel = (event, ui) => {\n\t\t\t\t\tlet selectedValue = attributeSelection.selectmenu().val();\n\t\t\t\t\tmaterial.activeAttributeName = selectedValue;\n\n\t\t\t\t\tlet attribute = pointcloud.getAttribute(selectedValue);\n\n\t\t\t\t\tif(selectedValue === \"intensity gradient\"){\n\t\t\t\t\t\tattribute = pointcloud.getAttribute(\"intensity\");\n\t\t\t\t\t}\n\n\t\t\t\t\tconst isIntensity = attribute ? [\"intensity\", \"intensity gradient\"].includes(attribute.name) : false;\n\n\t\t\t\t\tif(isIntensity){\n\t\t\t\t\t\tif(pointcloud.material.intensityRange[0] === Infinity){\n\t\t\t\t\t\t\tpointcloud.material.intensityRange = attribute.range;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst [min, max] = attribute.range;\n\n\t\t\t\t\t\tpanel.find('#sldIntensityRange').slider({\n\t\t\t\t\t\t\trange: true,\n\t\t\t\t\t\t\tmin: min, max: max, step: 0.01,\n\t\t\t\t\t\t\tvalues: [min, max],\n\t\t\t\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\t\t\t\tlet min = ui.values[0];\n\t\t\t\t\t\t\t\tlet max = ui.values[1];\n\t\t\t\t\t\t\t\tmaterial.intensityRange = [min, max];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if(attribute){\n\t\t\t\t\t\tconst [min, max] = attribute.range;\n\n\t\t\t\t\t\tlet selectedRange = material.getRange(attribute.name);\n\n\t\t\t\t\t\tif(!selectedRange){\n\t\t\t\t\t\t\tselectedRange = [...attribute.range];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet minMaxAreNumbers = typeof min === \"number\" && typeof max === \"number\";\n\n\t\t\t\t\t\tif(minMaxAreNumbers){\n\t\t\t\t\t\t\tpanel.find('#sldExtraRange').slider({\n\t\t\t\t\t\t\t\trange: true,\n\t\t\t\t\t\t\t\tmin: min, \n\t\t\t\t\t\t\t\tmax: max, \n\t\t\t\t\t\t\t\tstep: 0.01,\n\t\t\t\t\t\t\t\tvalues: selectedRange,\n\t\t\t\t\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\t\t\t\t\tlet [a, b] = ui.values;\n\n\t\t\t\t\t\t\t\t\tmaterial.setRange(attribute.name, [a, b]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet blockWeights = $('#materials\\\\.composite_weight_container');\n\t\t\t\t\tlet blockElevation = $('#materials\\\\.elevation_container');\n\t\t\t\t\tlet blockRGB = $('#materials\\\\.rgb_container');\n\t\t\t\t\tlet blockExtra = $('#materials\\\\.extra_container');\n\t\t\t\t\tlet blockColor = $('#materials\\\\.color_container');\n\t\t\t\t\tlet blockIntensity = $('#materials\\\\.intensity_container');\n\t\t\t\t\tlet blockIndex = $('#materials\\\\.index_container');\n\t\t\t\t\tlet blockTransition = $('#materials\\\\.transition_container');\n\t\t\t\t\tlet blockGps = $('#materials\\\\.gpstime_container');\n\t\t\t\t\tlet blockMatcap = $('#materials\\\\.matcap_container');\n\n\t\t\t\t\tblockIndex.css('display', 'none');\n\t\t\t\t\tblockIntensity.css('display', 'none');\n\t\t\t\t\tblockElevation.css('display', 'none');\n\t\t\t\t\tblockRGB.css('display', 'none');\n\t\t\t\t\tblockExtra.css('display', 'none');\n\t\t\t\t\tblockColor.css('display', 'none');\n\t\t\t\t\tblockWeights.css('display', 'none');\n\t\t\t\t\tblockTransition.css('display', 'none');\n\t\t\t\t\tblockMatcap.css('display', 'none');\n\t\t\t\t\tblockGps.css('display', 'none');\n\n\t\t\t\t\tif (selectedValue === 'composite') {\n\t\t\t\t\t\tblockWeights.css('display', 'block');\n\t\t\t\t\t\tblockElevation.css('display', 'block');\n\t\t\t\t\t\tblockRGB.css('display', 'block');\n\t\t\t\t\t\tblockIntensity.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === 'elevation') {\n\t\t\t\t\t\tblockElevation.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === 'RGB and Elevation') {\n\t\t\t\t\t\tblockRGB.css('display', 'block');\n\t\t\t\t\t\tblockElevation.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === 'rgba') {\n\t\t\t\t\t\tblockRGB.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === 'color') {\n\t\t\t\t\t\tblockColor.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === 'intensity') {\n\t\t\t\t\t\tblockIntensity.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === 'intensity gradient') {\n\t\t\t\t\t\tblockIntensity.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === \"indices\" ){\n\t\t\t\t\t\tblockIndex.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === \"matcap\" ){\n\t\t\t\t\t\tblockMatcap.css('display', 'block');\n\t\t\t\t\t} else if (selectedValue === \"classification\" ){\n\t\t\t\t\t\t// add classification color selctor?\n\t\t\t\t\t} else if (selectedValue === \"gps-time\" ){\n\t\t\t\t\t\tblockGps.css('display', 'block');\n\t\t\t\t\t} else if(selectedValue === \"number of returns\"){\n\t\t\t\t\t\t\n\t\t\t\t\t} else if(selectedValue === \"return number\"){\n\t\t\t\t\t\t\n\t\t\t\t\t} else if([\"source id\", \"point source id\"].includes(selectedValue)){\n\t\t\t\t\t\t\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblockExtra.css('display', 'block');\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tattributeSelection.selectmenu({change: updateMaterialPanel});\n\n\t\t\t\tlet update = () => {\n\t\t\t\t\tattributeSelection.val(material.activeAttributeName).selectmenu('refresh');\n\t\t\t\t};\n\t\t\t\tthis.addVolatileListener(material, \"point_color_type_changed\", update);\n\t\t\t\tthis.addVolatileListener(material, \"active_attribute_changed\", update);\n\n\t\t\t\tupdate();\n\t\t\t\tupdateMaterialPanel();\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tconst schemes = Object.keys(Potree.Gradients).map(name => ({name: name, values: Gradients[name]}));\n\n\t\t\t\tlet elSchemeContainer = panel.find(\"#elevation_gradient_scheme_selection\");\n\n\t\t\t\tfor(let scheme of schemes){\n\t\t\t\t\tlet elScheme = $(`\n\t\t\t\t\t<span style=\"flex-grow: 1;\">\n\t\t\t\t\t</span>\n\t\t\t\t`);\n\n\t\t\t\t\tconst svg = Potree.Utils.createSvgGradient(scheme.values);\n\t\t\t\t\tsvg.setAttributeNS(null, \"class\", `button-icon`);\n\n\t\t\t\t\telScheme.append($(svg));\n\n\t\t\t\t\telScheme.click( () => {\n\t\t\t\t\t\tmaterial.gradient = Gradients[scheme.name];\n\t\t\t\t\t});\n\n\t\t\t\t\telSchemeContainer.append(elScheme);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet matcaps = [\n\t\t\t\t\t{name: \"Normals\", icon: `${Potree.resourcePath}/icons/matcap/check_normal+y.jpg`}, \n\t\t\t\t\t{name: \"Basic 1\", icon: `${Potree.resourcePath}/icons/matcap/basic_1.jpg`}, \n\t\t\t\t\t{name: \"Basic 2\", icon: `${Potree.resourcePath}/icons/matcap/basic_2.jpg`}, \n\t\t\t\t\t{name: \"Basic Dark\", icon: `${Potree.resourcePath}/icons/matcap/basic_dark.jpg`}, \n\t\t\t\t\t{name: \"Basic Side\", icon: `${Potree.resourcePath}/icons/matcap/basic_side.jpg`}, \n\t\t\t\t\t{name: \"Ceramic Dark\", icon: `${Potree.resourcePath}/icons/matcap/ceramic_dark.jpg`}, \n\t\t\t\t\t{name: \"Ceramic Lightbulb\", icon: `${Potree.resourcePath}/icons/matcap/ceramic_lightbulb.jpg`}, \n\t\t\t\t\t{name: \"Clay Brown\", icon: `${Potree.resourcePath}/icons/matcap/clay_brown.jpg`}, \n\t\t\t\t\t{name: \"Clay Muddy\", icon: `${Potree.resourcePath}/icons/matcap/clay_muddy.jpg`}, \n\t\t\t\t\t{name: \"Clay Studio\", icon: `${Potree.resourcePath}/icons/matcap/clay_studio.jpg`}, \n\t\t\t\t\t{name: \"Resin\", icon: `${Potree.resourcePath}/icons/matcap/resin.jpg`}, \n\t\t\t\t\t{name: \"Skin\", icon: `${Potree.resourcePath}/icons/matcap/skin.jpg`}, \n\t\t\t\t\t{name: \"Jade\", icon: `${Potree.resourcePath}/icons/matcap/jade.jpg`}, \n\t\t\t\t\t{name: \"Metal_ Anisotropic\", icon: `${Potree.resourcePath}/icons/matcap/metal_anisotropic.jpg`}, \n\t\t\t\t\t{name: \"Metal Carpaint\", icon: `${Potree.resourcePath}/icons/matcap/metal_carpaint.jpg`}, \n\t\t\t\t\t{name: \"Metal Lead\", icon: `${Potree.resourcePath}/icons/matcap/metal_lead.jpg`}, \n\t\t\t\t\t{name: \"Metal Shiny\", icon: `${Potree.resourcePath}/icons/matcap/metal_shiny.jpg`}, \n\t\t\t\t\t{name: \"Pearl\", icon: `${Potree.resourcePath}/icons/matcap/pearl.jpg`}, \n\t\t\t\t\t{name: \"Toon\", icon: `${Potree.resourcePath}/icons/matcap/toon.jpg`},\n\t\t\t\t\t{name: \"Check Rim Light\", icon: `${Potree.resourcePath}/icons/matcap/check_rim_light.jpg`}, \n\t\t\t\t\t{name: \"Check Rim Dark\", icon: `${Potree.resourcePath}/icons/matcap/check_rim_dark.jpg`}, \n\t\t\t\t\t{name: \"Contours 1\", icon: `${Potree.resourcePath}/icons/matcap/contours_1.jpg`}, \n\t\t\t\t\t{name: \"Contours 2\", icon: `${Potree.resourcePath}/icons/matcap/contours_2.jpg`}, \n\t\t\t\t\t{name: \"Contours 3\", icon: `${Potree.resourcePath}/icons/matcap/contours_3.jpg`}, \n\t\t\t\t\t{name: \"Reflection Check Horizontal\", icon: `${Potree.resourcePath}/icons/matcap/reflection_check_horizontal.jpg`}, \n\t\t\t\t\t{name: \"Reflection Check Vertical\", icon: `${Potree.resourcePath}/icons/matcap/reflection_check_vertical.jpg`}, \n\t\t\t\t];\n\n\t\t\t\tlet elMatcapContainer = panel.find(\"#matcap_scheme_selection\");\n\n\t\t\t\tfor(let matcap of matcaps){\n\t\t\t\t\tlet elMatcap = $(`\n\t\t\t\t\t\t<img src=\"${matcap.icon}\" class=\"button-icon\" style=\"width: 25%;\" />\n\t\t\t\t`);\n\n\t\t\t\t\telMatcap.click( () => {\n\t\t\t\t\t\tmaterial.matcap = matcap.icon.substring(matcap.icon.lastIndexOf('/'));\n\t\t\t\t\t});\n\n\t\t\t\t\telMatcapContainer.append(elMatcap);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tpanel.find('#sldRGBGamma').slider({\n\t\t\t\t\tvalue: material.rgbGamma,\n\t\t\t\t\tmin: 0, max: 4, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.rgbGamma = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldRGBContrast').slider({\n\t\t\t\t\tvalue: material.rgbContrast,\n\t\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.rgbContrast = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldRGBBrightness').slider({\n\t\t\t\t\tvalue: material.rgbBrightness,\n\t\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.rgbBrightness = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldExtraGamma').slider({\n\t\t\t\t\tvalue: material.extraGamma,\n\t\t\t\t\tmin: 0, max: 4, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.extraGamma = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldExtraBrightness').slider({\n\t\t\t\t\tvalue: material.extraBrightness,\n\t\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.extraBrightness = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldExtraContrast').slider({\n\t\t\t\t\tvalue: material.extraContrast,\n\t\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.extraContrast = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldHeightRange').slider({\n\t\t\t\t\trange: true,\n\t\t\t\t\tmin: 0, max: 1000, step: 0.01,\n\t\t\t\t\tvalues: [0, 1000],\n\t\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\t\tmaterial.heightMin = ui.values[0];\n\t\t\t\t\t\tmaterial.heightMax = ui.values[1];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldIntensityGamma').slider({\n\t\t\t\t\tvalue: material.intensityGamma,\n\t\t\t\t\tmin: 0, max: 4, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.intensityGamma = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldIntensityContrast').slider({\n\t\t\t\t\tvalue: material.intensityContrast,\n\t\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.intensityContrast = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldIntensityBrightness').slider({\n\t\t\t\t\tvalue: material.intensityBrightness,\n\t\t\t\t\tmin: -1, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.intensityBrightness = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldWeightRGB').slider({\n\t\t\t\t\tvalue: material.weightRGB,\n\t\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.weightRGB = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldWeightIntensity').slider({\n\t\t\t\t\tvalue: material.weightIntensity,\n\t\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.weightIntensity = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldWeightElevation').slider({\n\t\t\t\t\tvalue: material.weightElevation,\n\t\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.weightElevation = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldWeightClassification').slider({\n\t\t\t\t\tvalue: material.weightClassification,\n\t\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.weightClassification = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldWeightReturnNumber').slider({\n\t\t\t\t\tvalue: material.weightReturnNumber,\n\t\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.weightReturnNumber = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find('#sldWeightSourceID').slider({\n\t\t\t\t\tvalue: material.weightSourceID,\n\t\t\t\t\tmin: 0, max: 1, step: 0.01,\n\t\t\t\t\tslide: (event, ui) => {material.weightSourceID = ui.value;}\n\t\t\t\t});\n\n\t\t\t\tpanel.find(`#materials\\\\.color\\\\.picker`).spectrum({\n\t\t\t\t\tflat: true,\n\t\t\t\t\tshowInput: true,\n\t\t\t\t\tpreferredFormat: 'rgb',\n\t\t\t\t\tcancelText: '',\n\t\t\t\t\tchooseText: 'Apply',\n\t\t\t\t\tcolor: `#${material.color.getHexString()}`,\n\t\t\t\t\tmove: color => {\n\t\t\t\t\t\tlet cRGB = color.toRgb();\n\t\t\t\t\t\tlet tc = new Color().setRGB(cRGB.r / 255, cRGB.g / 255, cRGB.b / 255);\n\t\t\t\t\t\tmaterial.color = tc;\n\t\t\t\t\t},\n\t\t\t\t\tchange: color => {\n\t\t\t\t\t\tlet cRGB = color.toRgb();\n\t\t\t\t\t\tlet tc = new Color().setRGB(cRGB.r / 255, cRGB.g / 255, cRGB.b / 255);\n\t\t\t\t\t\tmaterial.color = tc;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.addVolatileListener(material, \"color_changed\", () => {\n\t\t\t\t\tpanel.find(`#materials\\\\.color\\\\.picker`)\n\t\t\t\t\t\t.spectrum('set', `#${material.color.getHexString()}`);\n\t\t\t\t});\n\n\t\t\t\tlet updateHeightRange = function () {\n\t\t\t\t\t\n\n\t\t\t\t\tlet aPosition = pointcloud.getAttribute(\"position\");\n\n\t\t\t\t\tlet bMin, bMax;\n\n\t\t\t\t\tif(aPosition){\n\t\t\t\t\t\t// for new format 2.0 and loader that contain precomputed min/max of attributes\n\t\t\t\t\t\tlet min = aPosition.range[0][2];\n\t\t\t\t\t\tlet max = aPosition.range[1][2];\n\t\t\t\t\t\tlet width = max - min;\n\n\t\t\t\t\t\tbMin = min - 0.2 * width;\n\t\t\t\t\t\tbMax = max + 0.2 * width;\n\t\t\t\t\t}else {\n\t\t\t\t\t\t// for format up until exlusive 2.0\n\t\t\t\t\t\tlet box = [pointcloud.pcoGeometry.tightBoundingBox, pointcloud.getBoundingBoxWorld()]\n\t\t\t\t\t\t\t.find(v => v !== undefined);\n\n\t\t\t\t\t\tpointcloud.updateMatrixWorld(true);\n\t\t\t\t\t\tbox = Utils.computeTransformedBoundingBox(box, pointcloud.matrixWorld);\n\n\t\t\t\t\t\tlet bWidth = box.max.z - box.min.z;\n\t\t\t\t\t\tbMin = box.min.z - 0.2 * bWidth;\n\t\t\t\t\t\tbMax = box.max.z + 0.2 * bWidth;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet range = material.elevationRange;\n\n\t\t\t\t\tpanel.find('#lblHeightRange').html(`${range[0].toFixed(2)} to ${range[1].toFixed(2)}`);\n\t\t\t\t\tpanel.find('#sldHeightRange').slider({min: bMin, max: bMax, values: range});\n\t\t\t\t};\n\n\t\t\t\tlet updateExtraRange = function () {\n\n\t\t\t\t\tlet attributeName = material.activeAttributeName;\n\t\t\t\t\tlet attribute = pointcloud.getAttribute(attributeName);\n\n\t\t\t\t\tif(attribute == null){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet range = material.getRange(attributeName);\n\n\t\t\t\t\tif(range == null){\n\t\t\t\t\t\trange = attribute.range;\n\t\t\t\t\t}\n\n\t\t\t\t\t// currently only supporting scalar ranges.\n\t\t\t\t\t// rgba, normals, positions, etc have vector ranges, however\n\t\t\t\t\tlet isValidRange = (typeof range[0] === \"number\") && (typeof range[1] === \"number\");\n\t\t\t\t\tif(!isValidRange){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(range){\n\t\t\t\t\t\tlet msg = `${range[0].toFixed(2)} to ${range[1].toFixed(2)}`;\n\t\t\t\t\t\tpanel.find('#lblExtraRange').html(msg);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tpanel.find(\"could not deduce range\");\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet updateIntensityRange = function () {\n\t\t\t\t\tlet range = material.intensityRange;\n\n\t\t\t\t\tpanel.find('#lblIntensityRange').html(`${parseInt(range[0])} to ${parseInt(range[1])}`);\n\t\t\t\t};\n\n\t\t\t\t{\n\t\t\t\t\tupdateHeightRange();\n\t\t\t\t\tpanel.find(`#sldHeightRange`).slider('option', 'min');\n\t\t\t\t\tpanel.find(`#sldHeightRange`).slider('option', 'max');\n\t\t\t\t}\n\n\t\t\t\t{\n\t\t\t\t\tlet elGradientRepeat = panel.find(\"#gradient_repeat_option\");\n\t\t\t\t\telGradientRepeat.selectgroup({title: \"Gradient\"});\n\n\t\t\t\t\telGradientRepeat.find(\"input\").click( (e) => {\n\t\t\t\t\t\tthis.viewer.setElevationGradientRepeat(ElevationGradientRepeat[e.target.value]);\n\t\t\t\t\t});\n\n\t\t\t\t\tlet current = Object.keys(ElevationGradientRepeat)\n\t\t\t\t\t\t.filter(key => ElevationGradientRepeat[key] === this.viewer.elevationGradientRepeat);\n\t\t\t\t\telGradientRepeat.find(`input[value=${current}]`).trigger(\"click\");\n\t\t\t\t}\n\n\t\t\t\tlet onIntensityChange = () => {\n\t\t\t\t\tlet gamma = material.intensityGamma;\n\t\t\t\t\tlet contrast = material.intensityContrast;\n\t\t\t\t\tlet brightness = material.intensityBrightness;\n\n\t\t\t\t\tupdateIntensityRange();\n\n\t\t\t\t\tpanel.find('#lblIntensityGamma').html(gamma.toFixed(2));\n\t\t\t\t\tpanel.find('#lblIntensityContrast').html(contrast.toFixed(2));\n\t\t\t\t\tpanel.find('#lblIntensityBrightness').html(brightness.toFixed(2));\n\n\t\t\t\t\tpanel.find('#sldIntensityGamma').slider({value: gamma});\n\t\t\t\t\tpanel.find('#sldIntensityContrast').slider({value: contrast});\n\t\t\t\t\tpanel.find('#sldIntensityBrightness').slider({value: brightness});\n\t\t\t\t};\n\n\t\t\t\tlet onRGBChange = () => {\n\t\t\t\t\tlet gamma = material.rgbGamma;\n\t\t\t\t\tlet contrast = material.rgbContrast;\n\t\t\t\t\tlet brightness = material.rgbBrightness;\n\n\t\t\t\t\tpanel.find('#lblRGBGamma').html(gamma.toFixed(2));\n\t\t\t\t\tpanel.find('#lblRGBContrast').html(contrast.toFixed(2));\n\t\t\t\t\tpanel.find('#lblRGBBrightness').html(brightness.toFixed(2));\n\n\t\t\t\t\tpanel.find('#sldRGBGamma').slider({value: gamma});\n\t\t\t\t\tpanel.find('#sldRGBContrast').slider({value: contrast});\n\t\t\t\t\tpanel.find('#sldRGBBrightness').slider({value: brightness});\n\t\t\t\t};\n\n\t\t\t\tthis.addVolatileListener(material, \"material_property_changed\", updateExtraRange);\n\t\t\t\tthis.addVolatileListener(material, \"material_property_changed\", updateHeightRange);\n\t\t\t\tthis.addVolatileListener(material, \"material_property_changed\", onIntensityChange);\n\t\t\t\tthis.addVolatileListener(material, \"material_property_changed\", onRGBChange);\n\n\t\t\t\tupdateExtraRange();\n\t\t\t\tupdateHeightRange();\n\t\t\t\tonIntensityChange();\n\t\t\t\tonRGBChange();\n\t\t\t}\n\n\t\t}\n\n\t\t\n\n\t\tsetMeasurement(object){\n\n\t\t\tlet TYPE = {\n\t\t\t\tDISTANCE: {panel: DistancePanel},\n\t\t\t\tAREA: {panel: AreaPanel},\n\t\t\t\tPOINT: {panel: PointPanel},\n\t\t\t\tANGLE: {panel: AnglePanel},\n\t\t\t\tHEIGHT: {panel: HeightPanel},\n\t\t\t\tPROFILE: {panel: ProfilePanel},\n\t\t\t\tVOLUME: {panel: VolumePanel},\n\t\t\t\tCIRCLE: {panel: CirclePanel},\n\t\t\t\tOTHER: {panel: PointPanel},\n\t\t\t};\n\n\t\t\tlet getType = (measurement) => {\n\t\t\t\tif (measurement instanceof Measure) {\n\t\t\t\t\tif (measurement.showDistances && !measurement.showArea && !measurement.showAngles) {\n\t\t\t\t\t\treturn TYPE.DISTANCE;\n\t\t\t\t\t} else if (measurement.showDistances && measurement.showArea && !measurement.showAngles) {\n\t\t\t\t\t\treturn TYPE.AREA;\n\t\t\t\t\t} else if (measurement.maxMarkers === 1) {\n\t\t\t\t\t\treturn TYPE.POINT;\n\t\t\t\t\t} else if (!measurement.showDistances && !measurement.showArea && measurement.showAngles) {\n\t\t\t\t\t\treturn TYPE.ANGLE;\n\t\t\t\t\t} else if (measurement.showHeight) {\n\t\t\t\t\t\treturn TYPE.HEIGHT;\n\t\t\t\t\t} else if (measurement.showCircle) {\n\t\t\t\t\t\treturn TYPE.CIRCLE;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn TYPE.OTHER;\n\t\t\t\t\t}\n\t\t\t\t} else if (measurement instanceof Profile) {\n\t\t\t\t\treturn TYPE.PROFILE;\n\t\t\t\t} else if (measurement instanceof Volume) {\n\t\t\t\t\treturn TYPE.VOLUME;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t//this.container.html(\"measurement\");\n\n\t\t\tlet type = getType(object);\n\t\t\tlet Panel = type.panel;\n\n\t\t\tlet panel = new Panel(this.viewer, object, this);\n\t\t\tthis.container.append(panel.elContent);\n\t\t}\n\n\t\tsetCamera(camera){\n\t\t\tlet panel = new CameraPanel(this.viewer, this);\n\t\t\tthis.container.append(panel.elContent);\n\t\t}\n\n\t\tsetAnnotation(annotation){\n\t\t\tlet panel = new AnnotationPanel(this.viewer, this, annotation);\n\t\t\tthis.container.append(panel.elContent);\n\t\t}\n\n\t\tsetCameraAnimation(animation){\n\t\t\tlet panel = new CameraAnimationPanel(this.viewer, this, animation);\n\t\t\tthis.container.append(panel.elContent);\n\t\t}\n\n\t}\n\n\tfunction addCommas(nStr){\r\n\t\tnStr += '';\r\n\t\tlet x = nStr.split('.');\r\n\t\tlet x1 = x[0];\r\n\t\tlet x2 = x.length > 1 ? '.' + x[1] : '';\r\n\t\tlet rgx = /(\\d+)(\\d{3})/;\r\n\t\twhile (rgx.test(x1)) {\r\n\t\t\tx1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n\t\t}\r\n\t\treturn x1 + x2;\r\n\t};\r\n\r\n\tfunction format(value){\r\n\t\treturn addCommas(value.toFixed(3));\r\n\t};\r\n\r\n\tclass HierarchicalSlider{\r\n\r\n\t\tconstructor(params = {}){\r\n\t\t\t\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\r\n\t\t\tthis.labels = [];\r\n\t\t\tthis.sliders = [];\r\n\t\t\tthis.range = params.range != null ? params.range : [0, 1];\r\n\t\t\tthis.slide = params.slide != null ? params.slide : null;\r\n\t\t\tthis.step = params.step != null ? params.step : 0.0001;\r\n\r\n\t\t\tlet levels = params.levels != null ? params.levels : 1;\r\n\r\n\t\t\tfor(let level = 0; level < levels; level++){\r\n\t\t\t\tthis.addLevel();\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsetRange(range){\r\n\t\t\tthis.range = [...range];\r\n\r\n\t\t\t{ // root slider\r\n\t\t\t\tlet slider = this.sliders[0];\r\n\r\n\t\t\t\t$(slider).slider({\r\n\t\t\t\t\tmin: range[0],\r\n\t\t\t\t\tmax: range[1],\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfor(let i = 1; i < this.sliders.length; i++){\r\n\t\t\t\tlet parentSlider = this.sliders[i - 1];\r\n\t\t\t\tlet slider = this.sliders[i];\r\n\r\n\t\t\t\tlet parentValues = $(parentSlider).slider(\"option\", \"values\");\r\n\t\t\t\tlet childRange = [...parentValues];\r\n\r\n\t\t\t\t$(slider).slider({\r\n\t\t\t\t\tmin: childRange[0],\r\n\t\t\t\t\tmax: childRange[1],\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.updateLabels();\r\n\t\t}\r\n\r\n\t\tsetValues(values){\r\n\t\t\tfor(let slider of this.sliders){\r\n\t\t\t\t$(slider).slider({\r\n\t\t\t\t\tvalues: [...values],\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.updateLabels();\r\n\t\t}\r\n\r\n\t\taddLevel(){\r\n\t\t\tconst elLevel = document.createElement(\"li\");\r\n\t\t\tconst elRange = document.createTextNode(\"Range: \");\r\n\t\t\tconst label = document.createElement(\"span\");\r\n\t\t\tconst slider = document.createElement(\"div\");\r\n\r\n\t\t\tlet level = this.sliders.length;\r\n\t\t\tlet [min, max] = [0, 0];\r\n\r\n\t\t\tif(this.sliders.length === 0){\r\n\t\t\t\t[min, max] = this.range;\r\n\t\t\t}else {\r\n\t\t\t\tlet parentSlider = this.sliders[this.sliders.length - 1];\r\n\t\t\t\t[min, max] = $(parentSlider).slider(\"option\", \"values\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t$(slider).slider({\r\n\t\t\t\trange: true, \r\n\t\t\t\tmin: min, \r\n\t\t\t\tmax: max,\r\n\t\t\t\tstep: this.step,\r\n\t\t\t\tvalues: [min, max],\r\n\t\t\t\tslide: (event, ui) => {\r\n\t\t\t\t\t\r\n\t\t\t\t\t// set all descendants to same range\r\n\t\t\t\t\tlet levels = this.sliders.length;\r\n\t\t\t\t\tfor(let i = level + 1; i < levels; i++){\r\n\t\t\t\t\t\tlet descendant = this.sliders[i];\r\n\r\n\t\t\t\t\t\t$(descendant).slider({\r\n\t\t\t\t\t\t\trange: true,\r\n\t\t\t\t\t\t\tmin: ui.values[0],\r\n\t\t\t\t\t\t\tmax: ui.values[1],\r\n\t\t\t\t\t\t\tvalues: [...ui.values],\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(this.slide){\r\n\t\t\t\t\t\tlet values = [...ui.values];\r\n\r\n\t\t\t\t\t\tthis.slide({\r\n\t\t\t\t\t\t\ttarget: this, \r\n\t\t\t\t\t\t\trange: this.range,\r\n\t\t\t\t\t\t\tvalues: values,\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.updateLabels();\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t\telLevel.append(elRange, label, slider);\r\n\r\n\t\t\tthis.sliders.push(slider);\r\n\t\t\tthis.labels.push(label);\r\n\t\t\tthis.element.append(elLevel);\r\n\r\n\t\t\tthis.updateLabels();\r\n\t\t}\r\n\r\n\t\tremoveLevel(){\r\n\r\n\t\t}\r\n\r\n\t\tupdateSliders(){\r\n\r\n\t\t}\r\n\r\n\t\tupdateLabels(){\r\n\r\n\t\t\tlet levels = this.sliders.length;\r\n\r\n\t\t\tfor(let i = 0; i < levels; i++){\r\n\r\n\t\t\t\tlet slider = this.sliders[i];\r\n\t\t\t\tlet label = this.labels[i];\r\n\r\n\t\t\t\tlet [min, max] = $(slider).slider(\"option\", \"values\");\r\n\t\t\t\tlet strMin = format(min);\r\n\t\t\t\tlet strMax = format(max);\r\n\t\t\t\tlet strLabel = `${strMin} to ${strMax}`;\r\n\r\n\t\t\t\tlabel.innerHTML = strLabel;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\r\n\t}\n\n\tclass OrientedImageControls extends EventDispatcher{\n\t\t\n\t\tconstructor(viewer){\n\t\t\tsuper();\n\t\t\t\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.originalCam = viewer.scene.getActiveCamera();\n\t\t\tthis.shearCam = viewer.scene.getActiveCamera().clone();\n\t\t\tthis.shearCam.rotation.set(this.originalCam.rotation.toArray());\n\t\t\tthis.shearCam.updateProjectionMatrix();\n\t\t\tthis.shearCam.updateProjectionMatrix = () => {\n\t\t\t\treturn this.shearCam.projectionMatrix;\n\t\t\t};\n\n\t\t\tthis.image = null;\n\n\t\t\tthis.fadeFactor = 20;\n\t\t\tthis.fovDelta = 0;\n\n\t\t\tthis.fovMin = 0.1;\n\t\t\tthis.fovMax = 120;\n\n\t\t\tthis.shear = [0, 0];\n\n\t\t\t// const style = ``;\n\t\t\tthis.elUp =    $(`<input type=\"button\" value=\"🡅\" style=\"position: absolute; top: 10px; left: calc(50%); z-index: 1000\" />`);\n\t\t\tthis.elRight = $(`<input type=\"button\" value=\"🡆\" style=\"position: absolute; top: calc(50%); right: 10px; z-index: 1000\" />`);\n\t\t\tthis.elDown =  $(`<input type=\"button\" value=\"🡇\" style=\"position: absolute; bottom: 10px; left: calc(50%); z-index: 1000\" />`);\n\t\t\tthis.elLeft =  $(`<input type=\"button\" value=\"🡄\" style=\"position: absolute; top: calc(50%); left: 10px; z-index: 1000\" />`);\n\t\t\tthis.elExit = $(`<input type=\"button\" value=\"Back to 3D view\" style=\"position: absolute; bottom: 10px; right: 10px; z-index: 1000\" />`);\n\n\t\t\tthis.elExit.click( () => {\n\t\t\t\tthis.release();\n\t\t\t});\n\n\t\t\tthis.elUp.click(() => {\n\t\t\t\tconst fovY = viewer.getFOV();\n\t\t\t\tconst top = Math.tan(MathUtils.degToRad(fovY / 2));\n\t\t\t\tthis.shear[1] += 0.1 * top;\n\t\t\t});\n\n\t\t\tthis.elRight.click(() => {\n\t\t\t\tconst fovY = viewer.getFOV();\n\t\t\t\tconst top = Math.tan(MathUtils.degToRad(fovY / 2));\n\t\t\t\tthis.shear[0] += 0.1 * top;\n\t\t\t});\n\n\t\t\tthis.elDown.click(() => {\n\t\t\t\tconst fovY = viewer.getFOV();\n\t\t\t\tconst top = Math.tan(MathUtils.degToRad(fovY / 2));\n\t\t\t\tthis.shear[1] -= 0.1 * top;\n\t\t\t});\n\n\t\t\tthis.elLeft.click(() => {\n\t\t\t\tconst fovY = viewer.getFOV();\n\t\t\t\tconst top = Math.tan(MathUtils.degToRad(fovY / 2));\n\t\t\t\tthis.shear[0] -= 0.1 * top;\n\t\t\t});\n\n\t\t\tthis.scene = null;\n\t\t\tthis.sceneControls = new Scene();\n\n\t\t\tlet scroll = (e) => {\n\t\t\t\tthis.fovDelta += -e.delta * 1.0;\n\t\t\t};\n\n\t\t\tthis.addEventListener('mousewheel', scroll);\n\t\t\t//this.addEventListener(\"mousemove\", onMove);\n\t\t}\n\n\t\thasSomethingCaptured(){\n\t\t\treturn this.image !== null;\n\t\t}\n\n\t\tcapture(image){\n\t\t\tif(this.hasSomethingCaptured()){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.image = image;\n\n\t\t\tthis.originalFOV = this.viewer.getFOV();\n\t\t\tthis.originalControls = this.viewer.getControls();\n\n\t\t\tthis.viewer.setControls(this);\n\t\t\tthis.viewer.scene.overrideCamera = this.shearCam;\n\n\t\t\tconst elCanvas = this.viewer.renderer.domElement;\n\t\t\tconst elRoot = $(elCanvas.parentElement);\n\n\t\t\tthis.shear = [0, 0];\n\n\n\t\t\telRoot.append(this.elUp);\n\t\t\telRoot.append(this.elRight);\n\t\t\telRoot.append(this.elDown);\n\t\t\telRoot.append(this.elLeft);\n\t\t\telRoot.append(this.elExit);\n\t\t}\n\n\t\trelease(){\n\t\t\tthis.image = null;\n\n\t\t\tthis.viewer.scene.overrideCamera = null;\n\n\t\t\tthis.elUp.detach();\n\t\t\tthis.elRight.detach();\n\t\t\tthis.elDown.detach();\n\t\t\tthis.elLeft.detach();\n\t\t\tthis.elExit.detach();\n\n\t\t\tthis.viewer.setFOV(this.originalFOV);\n\t\t\tthis.viewer.setControls(this.originalControls);\n\t\t}\n\n\t\tsetScene (scene) {\n\t\t\tthis.scene = scene;\n\t\t}\n\n\t\tupdate (delta) {\n\t\t\t// const view = this.scene.view;\n\n\t\t\t// let prevTotal = this.shearCam.projectionMatrix.elements.reduce( (a, i) => a + i, 0);\n\n\t\t\t//const progression = Math.min(1, this.fadeFactor * delta);\n\t\t\t//const attenuation = Math.max(0, 1 - this.fadeFactor * delta);\n\t\t\tconst progression = 1;\n\t\t\tconst attenuation = 0;\n\n\t\t\tconst oldFov = this.viewer.getFOV();\n\t\t\tlet fovProgression =  progression * this.fovDelta;\n\t\t\tlet newFov = oldFov * ((1 + fovProgression / 10));\n\n\t\t\tnewFov = Math.max(this.fovMin, newFov);\n\t\t\tnewFov = Math.min(this.fovMax, newFov);\n\n\t\t\tlet diff = newFov / oldFov;\n\n\t\t\tconst mouse = this.viewer.inputHandler.mouse;\n\t\t\tconst canvasSize = this.viewer.renderer.getSize(new Vector2());\n\t\t\tconst uv = [\n\t\t\t\t(mouse.x / canvasSize.x),\n\t\t\t\t((canvasSize.y - mouse.y) / canvasSize.y)\n\t\t\t];\n\n\t\t\tconst fovY = newFov;\n\t\t\tconst aspect = canvasSize.x / canvasSize.y;\n\t\t\tconst top = Math.tan(MathUtils.degToRad(fovY / 2));\n\t\t\tconst height = 2 * top;\n\t\t\tconst width = aspect * height;\n\n\t\t\tconst shearRangeX = [\n\t\t\t\tthis.shear[0] - 0.5 * width,\n\t\t\t\tthis.shear[0] + 0.5 * width,\n\t\t\t];\n\n\t\t\tconst shearRangeY = [\n\t\t\t\tthis.shear[1] - 0.5 * height,\n\t\t\t\tthis.shear[1] + 0.5 * height,\n\t\t\t];\n\n\t\t\tconst shx = (1 - uv[0]) * shearRangeX[0] + uv[0] * shearRangeX[1];\n\t\t\tconst shy = (1 - uv[1]) * shearRangeY[0] + uv[1] * shearRangeY[1];\n\n\t\t\tconst shu = (1 - diff);\n\n\t\t\tconst newShear =  [\n\t\t\t\t(1 - shu) * this.shear[0] + shu * shx,\n\t\t\t\t(1 - shu) * this.shear[1] + shu * shy,\n\t\t\t];\n\t\t\t\n\t\t\tthis.shear = newShear;\n\t\t\tthis.viewer.setFOV(newFov);\n\t\t\t\n\t\t\tconst {originalCam, shearCam} = this;\n\n\t\t\toriginalCam.fov = newFov;\n\t\t\toriginalCam.updateMatrixWorld();\n\t\t\toriginalCam.updateProjectionMatrix();\n\t\t\tshearCam.copy(originalCam);\n\t\t\tshearCam.rotation.set(...originalCam.rotation.toArray());\n\n\t\t\tshearCam.updateMatrixWorld();\n\t\t\tshearCam.projectionMatrix.copy(originalCam.projectionMatrix);\n\n\t\t\tconst [sx, sy] = this.shear;\n\t\t\tconst mShear = new Matrix4().set(\n\t\t\t\t1, 0, sx, 0,\n\t\t\t\t0, 1, sy, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1,\n\t\t\t);\n\n\t\t\tconst proj = shearCam.projectionMatrix;\n\t\t\tproj.multiply(mShear);\n\t\t\tshearCam.projectionMatrixInverse.copy(proj).invert();\n\n\t\t\tlet total = shearCam.projectionMatrix.elements.reduce( (a, i) => a + i, 0);\n\n\t\t\tthis.fovDelta *= attenuation;\n\t\t}\n\t};\n\n\t// https://support.pix4d.com/hc/en-us/articles/205675256-How-are-yaw-pitch-roll-defined\r\n\t// https://support.pix4d.com/hc/en-us/articles/202558969-How-are-omega-phi-kappa-defined\r\n\r\n\tfunction createMaterial(){\r\n\r\n\t\tlet vertexShader = `\r\n\tuniform float uNear;\r\n\tvarying vec2 vUV;\r\n\tvarying vec4 vDebug;\r\n\t\r\n\tvoid main(){\r\n\t\tvDebug = vec4(0.0, 1.0, 0.0, 1.0);\r\n\t\tvec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\r\n\t\t// make sure that this mesh is at least in front of the near plane\r\n\t\tmodelViewPosition.xyz += normalize(modelViewPosition.xyz) * uNear;\r\n\t\tgl_Position = projectionMatrix * modelViewPosition;\r\n\t\tvUV = uv;\r\n\t}\r\n\t`;\r\n\r\n\t\tlet fragmentShader = `\r\n\tuniform sampler2D tColor;\r\n\tuniform float uOpacity;\r\n\tvarying vec2 vUV;\r\n\tvarying vec4 vDebug;\r\n\tvoid main(){\r\n\t\tvec4 color = texture2D(tColor, vUV);\r\n\t\tgl_FragColor = color;\r\n\t\tgl_FragColor.a = uOpacity;\r\n\t}\r\n\t`;\r\n\t\tconst material = new ShaderMaterial( {\r\n\t\t\tuniforms: {\r\n\t\t\t\t// time: { value: 1.0 },\r\n\t\t\t\t// resolution: { value: new THREE.Vector2() }\r\n\t\t\t\ttColor: {value: new Texture() },\r\n\t\t\t\tuNear: {value: 0.0},\r\n\t\t\t\tuOpacity: {value: 1.0},\r\n\t\t\t},\r\n\t\t\tvertexShader: vertexShader,\r\n\t\t\tfragmentShader: fragmentShader,\r\n\t\t\tside: DoubleSide,\r\n\t\t} );\r\n\r\n\t\tmaterial.side = DoubleSide;\r\n\r\n\t\treturn material;\r\n\t}\r\n\r\n\tconst planeGeometry = new PlaneGeometry(1, 1);\r\n\tconst lineGeometry = new Geometry();\r\n\r\n\tlineGeometry.vertices.push(\r\n\t\tnew Vector3(-0.5, -0.5, 0),\r\n\t\tnew Vector3( 0.5, -0.5, 0),\r\n\t\tnew Vector3( 0.5,  0.5, 0),\r\n\t\tnew Vector3(-0.5,  0.5, 0),\r\n\t\tnew Vector3(-0.5, -0.5, 0),\r\n\t);\r\n\r\n\tclass OrientedImage{\r\n\r\n\t\tconstructor(id){\r\n\r\n\t\t\tthis.id = id;\r\n\t\t\tthis.fov = 1.0;\r\n\t\t\tthis.position = new Vector3();\r\n\t\t\tthis.rotation = new Vector3();\r\n\t\t\tthis.width = 0;\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.fov = 1.0;\r\n\r\n\t\t\tconst material = createMaterial();\r\n\t\t\tconst lineMaterial = new LineBasicMaterial( { color: 0x00ff00 } );\r\n\t\t\tthis.mesh = new Mesh(planeGeometry, material);\r\n\t\t\tthis.line = new Line(lineGeometry, lineMaterial);\r\n\t\t\tthis.texture = null;\r\n\r\n\t\t\tthis.mesh.orientedImage = this;\r\n\t\t}\r\n\r\n\t\tset(position, rotation, dimension, fov){\r\n\r\n\t\t\tlet radians = rotation.map(MathUtils.degToRad);\r\n\r\n\t\t\tthis.position.set(...position);\r\n\t\t\tthis.mesh.position.set(...position);\r\n\r\n\t\t\tthis.rotation.set(...radians);\r\n\t\t\tthis.mesh.rotation.set(...radians);\r\n\r\n\t\t\t[this.width, this.height] = dimension;\r\n\t\t\tthis.mesh.scale.set(this.width / this.height, 1, 1);\r\n\r\n\t\t\tthis.fov = fov;\r\n\r\n\t\t\tthis.updateTransform();\r\n\t\t}\r\n\r\n\t\tupdateTransform(){\r\n\t\t\tlet {mesh, line, fov} = this;\r\n\r\n\t\t\tmesh.updateMatrixWorld();\r\n\t\t\tconst dir = mesh.getWorldDirection();\r\n\t\t\tconst alpha = MathUtils.degToRad(fov / 2);\r\n\t\t\tconst d = -0.5 / Math.tan(alpha);\r\n\t\t\tconst move = dir.clone().multiplyScalar(d);\r\n\t\t\tmesh.position.add(move);\r\n\r\n\t\t\tline.position.copy(mesh.position);\r\n\t\t\tline.scale.copy(mesh.scale);\r\n\t\t\tline.rotation.copy(mesh.rotation);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tclass OrientedImages extends EventDispatcher{\r\n\r\n\t\tconstructor(){\r\n\t\t\tsuper();\r\n\r\n\t\t\tthis.node = null;\r\n\t\t\tthis.cameraParams = null;\r\n\t\t\tthis.imageParams = null;\r\n\t\t\tthis.images = null;\r\n\t\t\tthis._visible = true;\r\n\t\t}\r\n\r\n\t\tset visible(visible){\r\n\t\t\tif(this._visible === visible){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tfor(const image of this.images){\r\n\t\t\t\timage.mesh.visible = visible;\r\n\t\t\t\timage.line.visible = visible;\r\n\t\t\t}\r\n\r\n\t\t\tthis._visible = visible;\r\n\t\t\tthis.dispatchEvent({\r\n\t\t\t\ttype: \"visibility_changed\",\r\n\t\t\t\timages: this,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tget visible(){\r\n\t\t\treturn this._visible;\r\n\t\t}\r\n\r\n\r\n\t};\r\n\r\n\tclass OrientedImageLoader{\r\n\r\n\t\tstatic async loadCameraParams(path){\r\n\t\t\tconst res = await fetch(path);\r\n\t\t\tconst text = await res.text();\r\n\r\n\t\t\tconst parser = new DOMParser();\r\n\t\t\tconst doc = parser.parseFromString(text, \"application/xml\");\r\n\r\n\t\t\tconst width = parseInt(doc.getElementsByTagName(\"width\")[0].textContent);\r\n\t\t\tconst height = parseInt(doc.getElementsByTagName(\"height\")[0].textContent);\r\n\t\t\tconst f = parseFloat(doc.getElementsByTagName(\"f\")[0].textContent);\r\n\r\n\t\t\tlet a = (height / 2)  / f;\r\n\t\t\tlet fov = 2 * MathUtils.radToDeg(Math.atan(a));\r\n\r\n\t\t\tconst params = {\r\n\t\t\t\tpath: path,\r\n\t\t\t\twidth: width,\r\n\t\t\t\theight: height,\r\n\t\t\t\tf: f,\r\n\t\t\t\tfov: fov,\r\n\t\t\t};\r\n\r\n\t\t\treturn params;\r\n\t\t}\r\n\r\n\t\tstatic async loadImageParams(path){\r\n\r\n\t\t\tconst response = await fetch(path);\r\n\t\t\tif(!response.ok){\r\n\t\t\t\tconsole.error(`failed to load ${path}`);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst content = await response.text();\r\n\t\t\tconst lines = content.split(/\\r?\\n/);\r\n\t\t\tconst imageParams = [];\r\n\r\n\t\t\tfor(let i = 1; i < lines.length; i++){\r\n\t\t\t\tconst line = lines[i];\r\n\r\n\t\t\t\tif(line.startsWith(\"#\")){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst tokens = line.split(/\\s+/);\r\n\r\n\t\t\t\tif(tokens.length < 6){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst params = {\r\n\t\t\t\t\tid: tokens[0],\r\n\t\t\t\t\tx: Number.parseFloat(tokens[1]),\r\n\t\t\t\t\ty: Number.parseFloat(tokens[2]),\r\n\t\t\t\t\tz: Number.parseFloat(tokens[3]),\r\n\t\t\t\t\tomega: Number.parseFloat(tokens[4]),\r\n\t\t\t\t\tphi: Number.parseFloat(tokens[5]),\r\n\t\t\t\t\tkappa: Number.parseFloat(tokens[6]),\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// const whitelist = [\"47518.jpg\"];\r\n\t\t\t\t// if(whitelist.includes(params.id)){\r\n\t\t\t\t// \timageParams.push(params);\r\n\t\t\t\t// }\r\n\t\t\t\timageParams.push(params);\r\n\t\t\t}\r\n\r\n\t\t\t// debug\r\n\t\t\t//return [imageParams[50]];\r\n\r\n\t\t\treturn imageParams;\r\n\t\t}\r\n\r\n\t\tstatic async load(cameraParamsPath, imageParamsPath, viewer){\r\n\r\n\t\t\tconst tStart = performance.now();\r\n\r\n\t\t\tconst [cameraParams, imageParams] = await Promise.all([\r\n\t\t\t\tOrientedImageLoader.loadCameraParams(cameraParamsPath),\r\n\t\t\t\tOrientedImageLoader.loadImageParams(imageParamsPath),\r\n\t\t\t]);\r\n\r\n\t\t\tconst orientedImageControls = new OrientedImageControls(viewer);\r\n\t\t\tconst raycaster = new Raycaster();\r\n\r\n\t\t\tconst tEnd = performance.now();\r\n\t\t\tconsole.log(tEnd - tStart);\r\n\r\n\t\t\t// const sp = new THREE.PlaneGeometry(1, 1);\r\n\t\t\t// const lg = new THREE.Geometry();\r\n\r\n\t\t\t// lg.vertices.push(\r\n\t\t\t// \tnew THREE.Vector3(-0.5, -0.5, 0),\r\n\t\t\t// \tnew THREE.Vector3( 0.5, -0.5, 0),\r\n\t\t\t// \tnew THREE.Vector3( 0.5,  0.5, 0),\r\n\t\t\t// \tnew THREE.Vector3(-0.5,  0.5, 0),\r\n\t\t\t// \tnew THREE.Vector3(-0.5, -0.5, 0),\r\n\t\t\t// );\r\n\r\n\t\t\tconst {width, height} = cameraParams;\r\n\t\t\tconst orientedImages = [];\r\n\t\t\tconst sceneNode = new Object3D();\r\n\t\t\tsceneNode.name = \"oriented_images\";\r\n\r\n\t\t\tfor(const params of imageParams){\r\n\r\n\t\t\t\t// const material = createMaterial();\r\n\t\t\t\t// const lm = new THREE.LineBasicMaterial( { color: 0x00ff00 } );\r\n\t\t\t\t// const mesh = new THREE.Mesh(sp, material);\r\n\r\n\t\t\t\tconst {x, y, z, omega, phi, kappa} = params;\r\n\t\t\t\t// const [rx, ry, rz] = [omega, phi, kappa]\r\n\t\t\t\t// \t.map(THREE.Math.degToRad);\r\n\t\t\t\t\r\n\t\t\t\t// mesh.position.set(x, y, z);\r\n\t\t\t\t// mesh.scale.set(width / height, 1, 1);\r\n\t\t\t\t// mesh.rotation.set(rx, ry, rz);\r\n\t\t\t\t// {\r\n\t\t\t\t// \tmesh.updateMatrixWorld();\r\n\t\t\t\t// \tconst dir = mesh.getWorldDirection();\r\n\t\t\t\t// \tconst alpha = THREE.Math.degToRad(cameraParams.fov / 2);\r\n\t\t\t\t// \tconst d = -0.5 / Math.tan(alpha);\r\n\t\t\t\t// \tconst move = dir.clone().multiplyScalar(d);\r\n\t\t\t\t// \tmesh.position.add(move);\r\n\t\t\t\t// }\r\n\t\t\t\t// sceneNode.add(mesh);\r\n\r\n\t\t\t\t// const line = new THREE.Line(lg, lm);\r\n\t\t\t\t// line.position.copy(mesh.position);\r\n\t\t\t\t// line.scale.copy(mesh.scale);\r\n\t\t\t\t// line.rotation.copy(mesh.rotation);\r\n\t\t\t\t// sceneNode.add(line);\r\n\r\n\t\t\t\tlet orientedImage = new OrientedImage(params.id);\r\n\t\t\t\t// orientedImage.setPosition(x, y, z);\r\n\t\t\t\t// orientedImage.setRotation(omega, phi, kappa);\r\n\t\t\t\t// orientedImage.setDimension(width, height);\r\n\t\t\t\tlet position = [x, y, z];\r\n\t\t\t\tlet rotation = [omega, phi, kappa];\r\n\t\t\t\tlet dimension = [width, height];\r\n\t\t\t\torientedImage.set(position, rotation, dimension, cameraParams.fov);\r\n\r\n\t\t\t\tsceneNode.add(orientedImage.mesh);\r\n\t\t\t\tsceneNode.add(orientedImage.line);\r\n\t\t\t\t\r\n\t\t\t\torientedImages.push(orientedImage);\r\n\t\t\t}\r\n\r\n\t\t\tlet hoveredElement = null;\r\n\t\t\tlet clipVolume = null;\r\n\r\n\t\t\tconst onMouseMove = (evt) => {\r\n\t\t\t\tconst tStart = performance.now();\r\n\t\t\t\tif(hoveredElement){\r\n\t\t\t\t\thoveredElement.line.material.color.setRGB(0, 1, 0);\r\n\t\t\t\t}\r\n\t\t\t\tevt.preventDefault();\r\n\r\n\t\t\t\t//var array = getMousePosition( container, evt.clientX, evt.clientY );\r\n\t\t\t\tconst rect = viewer.renderer.domElement.getBoundingClientRect();\r\n\t\t\t\tconst [x, y] = [evt.clientX, evt.clientY];\r\n\t\t\t\tconst array = [ \r\n\t\t\t\t\t( x - rect.left ) / rect.width, \r\n\t\t\t\t\t( y - rect.top ) / rect.height \r\n\t\t\t\t];\r\n\t\t\t\tconst onClickPosition = new Vector2(...array);\r\n\t\t\t\t//const intersects = getIntersects(onClickPosition, scene.children);\r\n\t\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\t\t\t\tconst mouse = new Vector3(\r\n\t\t\t\t\t+ ( onClickPosition.x * 2 ) - 1, \r\n\t\t\t\t\t- ( onClickPosition.y * 2 ) + 1 );\r\n\t\t\t\tconst objects = orientedImages.map(i => i.mesh);\r\n\t\t\t\traycaster.setFromCamera( mouse, camera );\r\n\t\t\t\tconst intersects = raycaster.intersectObjects( objects );\r\n\t\t\t\tlet selectionChanged = false;\r\n\r\n\t\t\t\tif ( intersects.length > 0){\r\n\t\t\t\t\t//console.log(intersects);\r\n\t\t\t\t\tconst intersection = intersects[0];\r\n\t\t\t\t\tconst orientedImage = intersection.object.orientedImage;\r\n\t\t\t\t\torientedImage.line.material.color.setRGB(1, 0, 0);\r\n\t\t\t\t\tselectionChanged = hoveredElement !== orientedImage;\r\n\t\t\t\t\thoveredElement = orientedImage;\r\n\t\t\t\t}else {\r\n\t\t\t\t\thoveredElement = null;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet shouldRemoveClipVolume = clipVolume !== null && hoveredElement === null;\r\n\t\t\t\tlet shouldAddClipVolume = clipVolume === null && hoveredElement !== null;\r\n\r\n\t\t\t\tif(clipVolume !== null && (hoveredElement === null || selectionChanged)){\r\n\t\t\t\t\t// remove existing\r\n\t\t\t\t\tviewer.scene.removePolygonClipVolume(clipVolume);\r\n\t\t\t\t\tclipVolume = null;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(shouldAddClipVolume || selectionChanged){\r\n\t\t\t\t\tconst img = hoveredElement;\r\n\t\t\t\t\tconst fov = cameraParams.fov;\r\n\t\t\t\t\tconst aspect  = cameraParams.width / cameraParams.height;\r\n\t\t\t\t\tconst near = 1.0;\r\n\t\t\t\t\tconst far = 1000 * 1000;\r\n\t\t\t\t\tconst camera = new PerspectiveCamera(fov, aspect, near, far);\r\n\t\t\t\t\tcamera.rotation.order = viewer.scene.getActiveCamera().rotation.order;\r\n\t\t\t\t\tcamera.rotation.copy(img.mesh.rotation);\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tconst mesh = img.mesh;\r\n\t\t\t\t\t\tconst dir = mesh.getWorldDirection();\r\n\t\t\t\t\t\tconst pos = mesh.position;\r\n\t\t\t\t\t\tconst alpha = MathUtils.degToRad(fov / 2);\r\n\t\t\t\t\t\tconst d = 0.5 / Math.tan(alpha);\r\n\t\t\t\t\t\tconst newCamPos = pos.clone().add(dir.clone().multiplyScalar(d));\r\n\t\t\t\t\t\tconst newCamDir = pos.clone().sub(newCamPos);\r\n\t\t\t\t\t\tconst newCamTarget = new Vector3().addVectors(\r\n\t\t\t\t\t\t\tnewCamPos,\r\n\t\t\t\t\t\t\tnewCamDir.clone().multiplyScalar(viewer.getMoveSpeed()));\r\n\t\t\t\t\t\tcamera.position.copy(newCamPos);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet volume = new Potree.PolygonClipVolume(camera);\r\n\t\t\t\t\tlet m0 = new Mesh();\r\n\t\t\t\t\tlet m1 = new Mesh();\r\n\t\t\t\t\tlet m2 = new Mesh();\r\n\t\t\t\t\tlet m3 = new Mesh();\r\n\t\t\t\t\tm0.position.set(-1, -1, 0);\r\n\t\t\t\t\tm1.position.set( 1, -1, 0);\r\n\t\t\t\t\tm2.position.set( 1,  1, 0);\r\n\t\t\t\t\tm3.position.set(-1,  1, 0);\r\n\t\t\t\t\tvolume.markers.push(m0, m1, m2, m3);\r\n\t\t\t\t\tvolume.initialized = true;\r\n\t\t\t\t\t\r\n\t\t\t\t\tviewer.scene.addPolygonClipVolume(volume);\r\n\t\t\t\t\tclipVolume = volume;\r\n\t\t\t\t}\r\n\t\t\t\tconst tEnd = performance.now();\r\n\t\t\t\t//console.log(tEnd - tStart);\r\n\t\t\t};\r\n\r\n\t\t\tconst moveToImage = (image) => {\r\n\t\t\t\tconsole.log(\"move to image \" + image.id);\r\n\r\n\t\t\t\tconst mesh = image.mesh;\r\n\t\t\t\tconst newCamPos = image.position.clone();\r\n\t\t\t\tconst newCamTarget = mesh.position.clone();\r\n\r\n\t\t\t\tviewer.scene.view.setView(newCamPos, newCamTarget, 500, () => {\r\n\t\t\t\t\torientedImageControls.capture(image);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(image.texture === null){\r\n\r\n\t\t\t\t\tconst target = image;\r\n\r\n\t\t\t\t\tconst tmpImagePath = `${Potree.resourcePath}/images/loading.jpg`;\r\n\t\t\t\t\tnew TextureLoader().load(tmpImagePath,\r\n\t\t\t\t\t\t(texture) => {\r\n\t\t\t\t\t\t\tif(target.texture === null){\r\n\t\t\t\t\t\t\t\ttarget.texture = texture;\r\n\t\t\t\t\t\t\t\ttarget.mesh.material.uniforms.tColor.value = texture;\r\n\t\t\t\t\t\t\t\tmesh.material.needsUpdate = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tconst imagePath = `${imageParamsPath}/../${target.id}`;\r\n\t\t\t\t\tnew TextureLoader().load(imagePath,\r\n\t\t\t\t\t\t(texture) => {\r\n\t\t\t\t\t\t\ttarget.texture = texture;\r\n\t\t\t\t\t\t\ttarget.mesh.material.uniforms.tColor.value = texture;\r\n\t\t\t\t\t\t\tmesh.material.needsUpdate = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst onMouseClick = (evt) => {\r\n\r\n\t\t\t\tif(orientedImageControls.hasSomethingCaptured()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(hoveredElement){\r\n\t\t\t\t\tmoveToImage(hoveredElement);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tviewer.renderer.domElement.addEventListener( 'mousemove', onMouseMove, false );\r\n\t\t\tviewer.renderer.domElement.addEventListener( 'mousedown', onMouseClick, false );\r\n\r\n\t\t\tviewer.addEventListener(\"update\", () => {\r\n\r\n\t\t\t\tfor(const image of orientedImages){\r\n\t\t\t\t\tconst world = image.mesh.matrixWorld;\r\n\t\t\t\t\tconst {width, height} = image;\r\n\t\t\t\t\tconst aspect = width / height;\r\n\r\n\t\t\t\t\tconst camera = viewer.scene.getActiveCamera();\r\n\r\n\t\t\t\t\tconst imgPos = image.mesh.getWorldPosition(new Vector3());\r\n\t\t\t\t\tconst camPos = camera.position;\r\n\t\t\t\t\tconst d = camPos.distanceTo(imgPos);\r\n\r\n\t\t\t\t\tconst minSize = 1; // in degrees of fov\r\n\t\t\t\t\tconst a = MathUtils.degToRad(minSize);\r\n\t\t\t\t\tlet r = d * Math.tan(a);\r\n\t\t\t\t\tr = Math.max(r, 1);\r\n\r\n\r\n\t\t\t\t\timage.mesh.scale.set(r * aspect, r, 1);\r\n\t\t\t\t\timage.line.scale.set(r * aspect, r, 1);\r\n\r\n\t\t\t\t\timage.mesh.material.uniforms.uNear.value = camera.near;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t\t\tconst images = new OrientedImages();\r\n\t\t\timages.node = sceneNode;\r\n\t\t\timages.cameraParamsPath = cameraParamsPath;\r\n\t\t\timages.imageParamsPath = imageParamsPath;\r\n\t\t\timages.cameraParams = cameraParams;\r\n\t\t\timages.imageParams = imageParams;\r\n\t\t\timages.images = orientedImages;\r\n\r\n\t\t\tPotree.debug.moveToImage = moveToImage;\r\n\r\n\t\t\treturn images;\r\n\t\t}\r\n\t}\n\n\tlet sg = new SphereGeometry(1, 8, 8);\r\n\tlet sgHigh = new SphereGeometry(1, 128, 128);\r\n\r\n\tlet sm = new MeshBasicMaterial({side: BackSide});\r\n\tlet smHovered = new MeshBasicMaterial({side: BackSide, color: 0xff0000});\r\n\r\n\tlet raycaster = new Raycaster();\r\n\tlet currentlyHovered = null;\r\n\r\n\tlet previousView = {\r\n\t\tcontrols: null,\r\n\t\tposition: null,\r\n\t\ttarget: null,\r\n\t};\r\n\r\n\tclass Image360{\r\n\r\n\t\tconstructor(file, time, longitude, latitude, altitude, course, pitch, roll){\r\n\t\t\tthis.file = file;\r\n\t\t\tthis.time = time;\r\n\t\t\tthis.longitude = longitude;\r\n\t\t\tthis.latitude = latitude;\r\n\t\t\tthis.altitude = altitude;\r\n\t\t\tthis.course = course;\r\n\t\t\tthis.pitch = pitch;\r\n\t\t\tthis.roll = roll;\r\n\t\t\tthis.mesh = null;\r\n\t\t}\r\n\t};\r\n\r\n\tclass Images360 extends EventDispatcher{\r\n\r\n\t\tconstructor(viewer){\r\n\t\t\tsuper();\r\n\r\n\t\t\tthis.viewer = viewer;\r\n\r\n\t\t\tthis.selectingEnabled = true;\r\n\r\n\t\t\tthis.images = [];\r\n\t\t\tthis.node = new Object3D();\r\n\r\n\t\t\tthis.sphere = new Mesh(sgHigh, sm);\r\n\t\t\tthis.sphere.visible = false;\r\n\t\t\tthis.sphere.scale.set(1000, 1000, 1000);\r\n\t\t\tthis.node.add(this.sphere);\r\n\t\t\tthis._visible = true;\r\n\t\t\t// this.node.add(label);\r\n\r\n\t\t\tthis.focusedImage = null;\r\n\r\n\t\t\tlet elUnfocus = document.createElement(\"input\");\r\n\t\t\telUnfocus.type = \"button\";\r\n\t\t\telUnfocus.value = \"unfocus\";\r\n\t\t\telUnfocus.style.position = \"absolute\";\r\n\t\t\telUnfocus.style.right = \"10px\";\r\n\t\t\telUnfocus.style.bottom = \"10px\";\r\n\t\t\telUnfocus.style.zIndex = \"10000\";\r\n\t\t\telUnfocus.style.fontSize = \"2em\";\r\n\t\t\telUnfocus.addEventListener(\"click\", () => this.unfocus());\r\n\t\t\tthis.elUnfocus = elUnfocus;\r\n\r\n\t\t\tthis.domRoot = viewer.renderer.domElement.parentElement;\r\n\t\t\tthis.domRoot.appendChild(elUnfocus);\r\n\t\t\tthis.elUnfocus.style.display = \"none\";\r\n\r\n\t\t\tviewer.addEventListener(\"update\", () => {\r\n\t\t\t\tthis.update(viewer);\r\n\t\t\t});\r\n\t\t\tviewer.inputHandler.addInputListener(this);\r\n\r\n\t\t\tthis.addEventListener(\"mousedown\", () => {\r\n\t\t\t\tif(currentlyHovered && currentlyHovered.image360){\r\n\t\t\t\t\tthis.focus(currentlyHovered.image360);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t};\r\n\r\n\t\tset visible(visible){\r\n\t\t\tif(this._visible === visible){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tfor(const image of this.images){\r\n\t\t\t\timage.mesh.visible = visible && (this.focusedImage == null);\r\n\t\t\t}\r\n\r\n\t\t\tthis.sphere.visible = visible && (this.focusedImage != null);\r\n\t\t\tthis._visible = visible;\r\n\t\t\tthis.dispatchEvent({\r\n\t\t\t\ttype: \"visibility_changed\",\r\n\t\t\t\timages: this,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tget visible(){\r\n\t\t\treturn this._visible;\r\n\t\t}\r\n\r\n\t\tfocus(image360){\r\n\t\t\tif(this.focusedImage !== null){\r\n\t\t\t\tthis.unfocus();\r\n\t\t\t}\r\n\r\n\t\t\tpreviousView = {\r\n\t\t\t\tcontrols: this.viewer.controls,\r\n\t\t\t\tposition: this.viewer.scene.view.position.clone(),\r\n\t\t\t\ttarget: viewer.scene.view.getPivot(),\r\n\t\t\t};\r\n\r\n\t\t\tthis.viewer.setControls(this.viewer.orbitControls);\r\n\t\t\tthis.viewer.orbitControls.doubleClockZoomEnabled = false;\r\n\r\n\t\t\tfor(let image of this.images){\r\n\t\t\t\timage.mesh.visible = false;\r\n\t\t\t}\r\n\r\n\t\t\tthis.selectingEnabled = false;\r\n\r\n\t\t\tthis.sphere.visible = false;\r\n\r\n\t\t\tthis.load(image360).then( () => {\r\n\t\t\t\tthis.sphere.visible = true;\r\n\t\t\t\tthis.sphere.material.map = image360.texture;\r\n\t\t\t\tthis.sphere.material.needsUpdate = true;\r\n\t\t\t});\r\n\r\n\t\t\t{ // orientation\r\n\t\t\t\tlet {course, pitch, roll} = image360;\r\n\t\t\t\tthis.sphere.rotation.set(\r\n\t\t\t\t\tMathUtils.degToRad(+roll + 90),\r\n\t\t\t\t\tMathUtils.degToRad(-pitch),\r\n\t\t\t\t\tMathUtils.degToRad(-course + 90),\r\n\t\t\t\t\t\"ZYX\"\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tthis.sphere.position.set(...image360.position);\r\n\r\n\t\t\tlet target = new Vector3(...image360.position);\r\n\t\t\tlet dir = target.clone().sub(viewer.scene.view.position).normalize();\r\n\t\t\tlet move = dir.multiplyScalar(0.000001);\r\n\t\t\tlet newCamPos = target.clone().sub(move);\r\n\r\n\t\t\tviewer.scene.view.setView(\r\n\t\t\t\tnewCamPos, \r\n\t\t\t\ttarget,\r\n\t\t\t\t500\r\n\t\t\t);\r\n\r\n\t\t\tthis.focusedImage = image360;\r\n\r\n\t\t\tthis.elUnfocus.style.display = \"\";\r\n\t\t}\r\n\r\n\t\tunfocus(){\r\n\t\t\tthis.selectingEnabled = true;\r\n\r\n\t\t\tfor(let image of this.images){\r\n\t\t\t\timage.mesh.visible = true;\r\n\t\t\t}\r\n\r\n\t\t\tlet image = this.focusedImage;\r\n\r\n\t\t\tif(image === null){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis.sphere.material.map = null;\r\n\t\t\tthis.sphere.material.needsUpdate = true;\r\n\t\t\tthis.sphere.visible = false;\r\n\r\n\t\t\tlet pos = viewer.scene.view.position;\r\n\t\t\tlet target = viewer.scene.view.getPivot();\r\n\t\t\tlet dir = target.clone().sub(pos).normalize();\r\n\t\t\tlet move = dir.multiplyScalar(10);\r\n\t\t\tlet newCamPos = target.clone().sub(move);\r\n\r\n\t\t\tviewer.orbitControls.doubleClockZoomEnabled = true;\r\n\t\t\tviewer.setControls(previousView.controls);\r\n\r\n\t\t\tviewer.scene.view.setView(\r\n\t\t\t\tpreviousView.position, \r\n\t\t\t\tpreviousView.target,\r\n\t\t\t\t500\r\n\t\t\t);\r\n\r\n\r\n\t\t\tthis.focusedImage = null;\r\n\r\n\t\t\tthis.elUnfocus.style.display = \"none\";\r\n\t\t}\r\n\r\n\t\tload(image360){\r\n\r\n\t\t\treturn new Promise(resolve => {\r\n\t\t\t\tlet texture = new TextureLoader().load(image360.file, resolve);\r\n\t\t\t\ttexture.wrapS = RepeatWrapping;\r\n\t\t\t\ttexture.repeat.x = -1;\r\n\r\n\t\t\t\timage360.texture = texture;\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t\thandleHovering(){\r\n\t\t\tlet mouse = viewer.inputHandler.mouse;\r\n\t\t\tlet camera = viewer.scene.getActiveCamera();\r\n\t\t\tlet domElement = viewer.renderer.domElement;\r\n\r\n\t\t\tlet ray = Potree.Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\r\n\r\n\t\t\t// let tStart = performance.now();\r\n\t\t\traycaster.ray.copy(ray);\r\n\t\t\tlet intersections = raycaster.intersectObjects(this.node.children);\r\n\r\n\t\t\tif(intersections.length === 0){\r\n\t\t\t\t// label.visible = false;\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet intersection = intersections[0];\r\n\t\t\tcurrentlyHovered = intersection.object;\r\n\t\t\tcurrentlyHovered.material = smHovered;\r\n\r\n\t\t\t//label.visible = true;\r\n\t\t\t//label.setText(currentlyHovered.image360.file);\r\n\t\t\t//currentlyHovered.getWorldPosition(label.position);\r\n\t\t}\r\n\r\n\t\tupdate(){\r\n\r\n\t\t\tlet {viewer} = this;\r\n\r\n\t\t\tif(currentlyHovered){\r\n\t\t\t\tcurrentlyHovered.material = sm;\r\n\t\t\t\tcurrentlyHovered = null;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.selectingEnabled){\r\n\t\t\t\tthis.handleHovering();\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\r\n\tclass Images360Loader{\r\n\r\n\t\tstatic async load(url, viewer, params = {}){\r\n\r\n\t\t\tif(!params.transform){\r\n\t\t\t\tparams.transform = {\r\n\t\t\t\t\tforward: a => a,\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlet response = await fetch(`${url}/coordinates.txt`);\r\n\t\t\tlet text = await response.text();\r\n\r\n\t\t\tlet lines = text.split(/\\r?\\n/);\r\n\t\t\tlet coordinateLines = lines.slice(1);\r\n\r\n\t\t\tlet images360 = new Images360(viewer);\r\n\r\n\t\t\tfor(let line of coordinateLines){\r\n\r\n\t\t\t\tif(line.trim().length === 0){\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet tokens = line.split(/\\t/);\r\n\r\n\t\t\t\tlet [filename, time, long, lat, alt, course, pitch, roll] = tokens;\r\n\t\t\t\ttime = parseFloat(time);\r\n\t\t\t\tlong = parseFloat(long);\r\n\t\t\t\tlat = parseFloat(lat);\r\n\t\t\t\talt = parseFloat(alt);\r\n\t\t\t\tcourse = parseFloat(course);\r\n\t\t\t\tpitch = parseFloat(pitch);\r\n\t\t\t\troll = parseFloat(roll);\r\n\r\n\t\t\t\tfilename = filename.replace(/\"/g, \"\");\r\n\t\t\t\tlet file = `${url}/${filename}`;\r\n\r\n\t\t\t\tlet image360 = new Image360(file, time, long, lat, alt, course, pitch, roll);\r\n\r\n\t\t\t\tlet xy = params.transform.forward([long, lat]);\r\n\t\t\t\tlet position = [...xy, alt];\r\n\t\t\t\timage360.position = position;\r\n\r\n\t\t\t\timages360.images.push(image360);\r\n\t\t\t}\r\n\r\n\t\t\tImages360Loader.createSceneNodes(images360, params.transform);\r\n\r\n\t\t\treturn images360;\r\n\r\n\t\t}\r\n\r\n\t\tstatic createSceneNodes(images360, transform){\r\n\r\n\t\t\tfor(let image360 of images360.images){\r\n\t\t\t\tlet {longitude, latitude, altitude} = image360;\r\n\t\t\t\tlet xy = transform.forward([longitude, latitude]);\r\n\r\n\t\t\t\tlet mesh = new Mesh(sg, sm);\r\n\t\t\t\tmesh.position.set(...xy, altitude);\r\n\t\t\t\tmesh.scale.set(1, 1, 1);\r\n\t\t\t\tmesh.material.transparent = true;\r\n\t\t\t\tmesh.material.opacity = 0.75;\r\n\t\t\t\tmesh.image360 = image360;\r\n\r\n\t\t\t\t{ // orientation\r\n\t\t\t\t\tvar {course, pitch, roll} = image360;\r\n\t\t\t\t\tmesh.rotation.set(\r\n\t\t\t\t\t\tMathUtils.degToRad(+roll + 90),\r\n\t\t\t\t\t\tMathUtils.degToRad(-pitch),\r\n\t\t\t\t\t\tMathUtils.degToRad(-course + 90),\r\n\t\t\t\t\t\t\"ZYX\"\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\timages360.node.add(mesh);\r\n\r\n\t\t\t\timage360.mesh = mesh;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\r\n\r\n\t};\n\n\t// This is a generated file. Do not edit.\n\tvar Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\n\tvar ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/;\n\tvar ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/;\n\n\tvar unicode = {\n\t\tSpace_Separator: Space_Separator,\n\t\tID_Start: ID_Start,\n\t\tID_Continue: ID_Continue\n\t};\n\n\tvar util = {\n\t    isSpaceSeparator (c) {\n\t        return typeof c === 'string' && unicode.Space_Separator.test(c)\n\t    },\n\n\t    isIdStartChar (c) {\n\t        return typeof c === 'string' && (\n\t            (c >= 'a' && c <= 'z') ||\n\t        (c >= 'A' && c <= 'Z') ||\n\t        (c === '$') || (c === '_') ||\n\t        unicode.ID_Start.test(c)\n\t        )\n\t    },\n\n\t    isIdContinueChar (c) {\n\t        return typeof c === 'string' && (\n\t            (c >= 'a' && c <= 'z') ||\n\t        (c >= 'A' && c <= 'Z') ||\n\t        (c >= '0' && c <= '9') ||\n\t        (c === '$') || (c === '_') ||\n\t        (c === '\\u200C') || (c === '\\u200D') ||\n\t        unicode.ID_Continue.test(c)\n\t        )\n\t    },\n\n\t    isDigit (c) {\n\t        return typeof c === 'string' && /[0-9]/.test(c)\n\t    },\n\n\t    isHexDigit (c) {\n\t        return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n\t    },\n\t};\n\n\tlet source;\n\tlet parseState;\n\tlet stack;\n\tlet pos;\n\tlet line;\n\tlet column;\n\tlet token;\n\tlet key;\n\tlet root;\n\n\tvar parse = function parse (text, reviver) {\n\t    source = String(text);\n\t    parseState = 'start';\n\t    stack = [];\n\t    pos = 0;\n\t    line = 1;\n\t    column = 0;\n\t    token = undefined;\n\t    key = undefined;\n\t    root = undefined;\n\n\t    do {\n\t        token = lex();\n\n\t        // This code is unreachable.\n\t        // if (!parseStates[parseState]) {\n\t        //     throw invalidParseState()\n\t        // }\n\n\t        parseStates[parseState]();\n\t    } while (token.type !== 'eof')\n\n\t    if (typeof reviver === 'function') {\n\t        return internalize({'': root}, '', reviver)\n\t    }\n\n\t    return root\n\t};\n\n\tfunction internalize (holder, name, reviver) {\n\t    const value = holder[name];\n\t    if (value != null && typeof value === 'object') {\n\t        for (const key in value) {\n\t            const replacement = internalize(value, key, reviver);\n\t            if (replacement === undefined) {\n\t                delete value[key];\n\t            } else {\n\t                value[key] = replacement;\n\t            }\n\t        }\n\t    }\n\n\t    return reviver.call(holder, name, value)\n\t}\n\n\tlet lexState;\n\tlet buffer;\n\tlet doubleQuote;\n\tlet sign$1;\n\tlet c;\n\n\tfunction lex () {\n\t    lexState = 'default';\n\t    buffer = '';\n\t    doubleQuote = false;\n\t    sign$1 = 1;\n\n\t    for (;;) {\n\t        c = peek();\n\n\t        // This code is unreachable.\n\t        // if (!lexStates[lexState]) {\n\t        //     throw invalidLexState(lexState)\n\t        // }\n\n\t        const token = lexStates[lexState]();\n\t        if (token) {\n\t            return token\n\t        }\n\t    }\n\t}\n\n\tfunction peek () {\n\t    if (source[pos]) {\n\t        return String.fromCodePoint(source.codePointAt(pos))\n\t    }\n\t}\n\n\tfunction read () {\n\t    const c = peek();\n\n\t    if (c === '\\n') {\n\t        line++;\n\t        column = 0;\n\t    } else if (c) {\n\t        column += c.length;\n\t    } else {\n\t        column++;\n\t    }\n\n\t    if (c) {\n\t        pos += c.length;\n\t    }\n\n\t    return c\n\t}\n\n\tconst lexStates = {\n\t    default () {\n\t        switch (c) {\n\t        case '\\t':\n\t        case '\\v':\n\t        case '\\f':\n\t        case ' ':\n\t        case '\\u00A0':\n\t        case '\\uFEFF':\n\t        case '\\n':\n\t        case '\\r':\n\t        case '\\u2028':\n\t        case '\\u2029':\n\t            read();\n\t            return\n\n\t        case '/':\n\t            read();\n\t            lexState = 'comment';\n\t            return\n\n\t        case undefined:\n\t            read();\n\t            return newToken('eof')\n\t        }\n\n\t        if (util.isSpaceSeparator(c)) {\n\t            read();\n\t            return\n\t        }\n\n\t        // This code is unreachable.\n\t        // if (!lexStates[parseState]) {\n\t        //     throw invalidLexState(parseState)\n\t        // }\n\n\t        return lexStates[parseState]()\n\t    },\n\n\t    comment () {\n\t        switch (c) {\n\t        case '*':\n\t            read();\n\t            lexState = 'multiLineComment';\n\t            return\n\n\t        case '/':\n\t            read();\n\t            lexState = 'singleLineComment';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    multiLineComment () {\n\t        switch (c) {\n\t        case '*':\n\t            read();\n\t            lexState = 'multiLineCommentAsterisk';\n\t            return\n\n\t        case undefined:\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t    },\n\n\t    multiLineCommentAsterisk () {\n\t        switch (c) {\n\t        case '*':\n\t            read();\n\t            return\n\n\t        case '/':\n\t            read();\n\t            lexState = 'default';\n\t            return\n\n\t        case undefined:\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t        lexState = 'multiLineComment';\n\t    },\n\n\t    singleLineComment () {\n\t        switch (c) {\n\t        case '\\n':\n\t        case '\\r':\n\t        case '\\u2028':\n\t        case '\\u2029':\n\t            read();\n\t            lexState = 'default';\n\t            return\n\n\t        case undefined:\n\t            read();\n\t            return newToken('eof')\n\t        }\n\n\t        read();\n\t    },\n\n\t    value () {\n\t        switch (c) {\n\t        case '{':\n\t        case '[':\n\t            return newToken('punctuator', read())\n\n\t        case 'n':\n\t            read();\n\t            literal('ull');\n\t            return newToken('null', null)\n\n\t        case 't':\n\t            read();\n\t            literal('rue');\n\t            return newToken('boolean', true)\n\n\t        case 'f':\n\t            read();\n\t            literal('alse');\n\t            return newToken('boolean', false)\n\n\t        case '-':\n\t        case '+':\n\t            if (read() === '-') {\n\t                sign$1 = -1;\n\t            }\n\n\t            lexState = 'sign';\n\t            return\n\n\t        case '.':\n\t            buffer = read();\n\t            lexState = 'decimalPointLeading';\n\t            return\n\n\t        case '0':\n\t            buffer = read();\n\t            lexState = 'zero';\n\t            return\n\n\t        case '1':\n\t        case '2':\n\t        case '3':\n\t        case '4':\n\t        case '5':\n\t        case '6':\n\t        case '7':\n\t        case '8':\n\t        case '9':\n\t            buffer = read();\n\t            lexState = 'decimalInteger';\n\t            return\n\n\t        case 'I':\n\t            read();\n\t            literal('nfinity');\n\t            return newToken('numeric', Infinity)\n\n\t        case 'N':\n\t            read();\n\t            literal('aN');\n\t            return newToken('numeric', NaN)\n\n\t        case '\"':\n\t        case \"'\":\n\t            doubleQuote = (read() === '\"');\n\t            buffer = '';\n\t            lexState = 'string';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    identifierNameStartEscape () {\n\t        if (c !== 'u') {\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t        const u = unicodeEscape();\n\t        switch (u) {\n\t        case '$':\n\t        case '_':\n\t            break\n\n\t        default:\n\t            if (!util.isIdStartChar(u)) {\n\t                throw invalidIdentifier()\n\t            }\n\n\t            break\n\t        }\n\n\t        buffer += u;\n\t        lexState = 'identifierName';\n\t    },\n\n\t    identifierName () {\n\t        switch (c) {\n\t        case '$':\n\t        case '_':\n\t        case '\\u200C':\n\t        case '\\u200D':\n\t            buffer += read();\n\t            return\n\n\t        case '\\\\':\n\t            read();\n\t            lexState = 'identifierNameEscape';\n\t            return\n\t        }\n\n\t        if (util.isIdContinueChar(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('identifier', buffer)\n\t    },\n\n\t    identifierNameEscape () {\n\t        if (c !== 'u') {\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t        const u = unicodeEscape();\n\t        switch (u) {\n\t        case '$':\n\t        case '_':\n\t        case '\\u200C':\n\t        case '\\u200D':\n\t            break\n\n\t        default:\n\t            if (!util.isIdContinueChar(u)) {\n\t                throw invalidIdentifier()\n\t            }\n\n\t            break\n\t        }\n\n\t        buffer += u;\n\t        lexState = 'identifierName';\n\t    },\n\n\t    sign () {\n\t        switch (c) {\n\t        case '.':\n\t            buffer = read();\n\t            lexState = 'decimalPointLeading';\n\t            return\n\n\t        case '0':\n\t            buffer = read();\n\t            lexState = 'zero';\n\t            return\n\n\t        case '1':\n\t        case '2':\n\t        case '3':\n\t        case '4':\n\t        case '5':\n\t        case '6':\n\t        case '7':\n\t        case '8':\n\t        case '9':\n\t            buffer = read();\n\t            lexState = 'decimalInteger';\n\t            return\n\n\t        case 'I':\n\t            read();\n\t            literal('nfinity');\n\t            return newToken('numeric', sign$1 * Infinity)\n\n\t        case 'N':\n\t            read();\n\t            literal('aN');\n\t            return newToken('numeric', NaN)\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    zero () {\n\t        switch (c) {\n\t        case '.':\n\t            buffer += read();\n\t            lexState = 'decimalPoint';\n\t            return\n\n\t        case 'e':\n\t        case 'E':\n\t            buffer += read();\n\t            lexState = 'decimalExponent';\n\t            return\n\n\t        case 'x':\n\t        case 'X':\n\t            buffer += read();\n\t            lexState = 'hexadecimal';\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign$1 * 0)\n\t    },\n\n\t    decimalInteger () {\n\t        switch (c) {\n\t        case '.':\n\t            buffer += read();\n\t            lexState = 'decimalPoint';\n\t            return\n\n\t        case 'e':\n\t        case 'E':\n\t            buffer += read();\n\t            lexState = 'decimalExponent';\n\t            return\n\t        }\n\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign$1 * Number(buffer))\n\t    },\n\n\t    decimalPointLeading () {\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'decimalFraction';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    decimalPoint () {\n\t        switch (c) {\n\t        case 'e':\n\t        case 'E':\n\t            buffer += read();\n\t            lexState = 'decimalExponent';\n\t            return\n\t        }\n\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'decimalFraction';\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign$1 * Number(buffer))\n\t    },\n\n\t    decimalFraction () {\n\t        switch (c) {\n\t        case 'e':\n\t        case 'E':\n\t            buffer += read();\n\t            lexState = 'decimalExponent';\n\t            return\n\t        }\n\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign$1 * Number(buffer))\n\t    },\n\n\t    decimalExponent () {\n\t        switch (c) {\n\t        case '+':\n\t        case '-':\n\t            buffer += read();\n\t            lexState = 'decimalExponentSign';\n\t            return\n\t        }\n\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'decimalExponentInteger';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    decimalExponentSign () {\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'decimalExponentInteger';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    decimalExponentInteger () {\n\t        if (util.isDigit(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign$1 * Number(buffer))\n\t    },\n\n\t    hexadecimal () {\n\t        if (util.isHexDigit(c)) {\n\t            buffer += read();\n\t            lexState = 'hexadecimalInteger';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    hexadecimalInteger () {\n\t        if (util.isHexDigit(c)) {\n\t            buffer += read();\n\t            return\n\t        }\n\n\t        return newToken('numeric', sign$1 * Number(buffer))\n\t    },\n\n\t    string () {\n\t        switch (c) {\n\t        case '\\\\':\n\t            read();\n\t            buffer += escape$1();\n\t            return\n\n\t        case '\"':\n\t            if (doubleQuote) {\n\t                read();\n\t                return newToken('string', buffer)\n\t            }\n\n\t            buffer += read();\n\t            return\n\n\t        case \"'\":\n\t            if (!doubleQuote) {\n\t                read();\n\t                return newToken('string', buffer)\n\t            }\n\n\t            buffer += read();\n\t            return\n\n\t        case '\\n':\n\t        case '\\r':\n\t            throw invalidChar(read())\n\n\t        case '\\u2028':\n\t        case '\\u2029':\n\t            separatorChar(c);\n\t            break\n\n\t        case undefined:\n\t            throw invalidChar(read())\n\t        }\n\n\t        buffer += read();\n\t    },\n\n\t    start () {\n\t        switch (c) {\n\t        case '{':\n\t        case '[':\n\t            return newToken('punctuator', read())\n\n\t        // This code is unreachable since the default lexState handles eof.\n\t        // case undefined:\n\t        //     return newToken('eof')\n\t        }\n\n\t        lexState = 'value';\n\t    },\n\n\t    beforePropertyName () {\n\t        switch (c) {\n\t        case '$':\n\t        case '_':\n\t            buffer = read();\n\t            lexState = 'identifierName';\n\t            return\n\n\t        case '\\\\':\n\t            read();\n\t            lexState = 'identifierNameStartEscape';\n\t            return\n\n\t        case '}':\n\t            return newToken('punctuator', read())\n\n\t        case '\"':\n\t        case \"'\":\n\t            doubleQuote = (read() === '\"');\n\t            lexState = 'string';\n\t            return\n\t        }\n\n\t        if (util.isIdStartChar(c)) {\n\t            buffer += read();\n\t            lexState = 'identifierName';\n\t            return\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    afterPropertyName () {\n\t        if (c === ':') {\n\t            return newToken('punctuator', read())\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    beforePropertyValue () {\n\t        lexState = 'value';\n\t    },\n\n\t    afterPropertyValue () {\n\t        switch (c) {\n\t        case ',':\n\t        case '}':\n\t            return newToken('punctuator', read())\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    beforeArrayValue () {\n\t        if (c === ']') {\n\t            return newToken('punctuator', read())\n\t        }\n\n\t        lexState = 'value';\n\t    },\n\n\t    afterArrayValue () {\n\t        switch (c) {\n\t        case ',':\n\t        case ']':\n\t            return newToken('punctuator', read())\n\t        }\n\n\t        throw invalidChar(read())\n\t    },\n\n\t    end () {\n\t        // This code is unreachable since it's handled by the default lexState.\n\t        // if (c === undefined) {\n\t        //     read()\n\t        //     return newToken('eof')\n\t        // }\n\n\t        throw invalidChar(read())\n\t    },\n\t};\n\n\tfunction newToken (type, value) {\n\t    return {\n\t        type,\n\t        value,\n\t        line,\n\t        column,\n\t    }\n\t}\n\n\tfunction literal (s) {\n\t    for (const c of s) {\n\t        const p = peek();\n\n\t        if (p !== c) {\n\t            throw invalidChar(read())\n\t        }\n\n\t        read();\n\t    }\n\t}\n\n\tfunction escape$1 () {\n\t    const c = peek();\n\t    switch (c) {\n\t    case 'b':\n\t        read();\n\t        return '\\b'\n\n\t    case 'f':\n\t        read();\n\t        return '\\f'\n\n\t    case 'n':\n\t        read();\n\t        return '\\n'\n\n\t    case 'r':\n\t        read();\n\t        return '\\r'\n\n\t    case 't':\n\t        read();\n\t        return '\\t'\n\n\t    case 'v':\n\t        read();\n\t        return '\\v'\n\n\t    case '0':\n\t        read();\n\t        if (util.isDigit(peek())) {\n\t            throw invalidChar(read())\n\t        }\n\n\t        return '\\0'\n\n\t    case 'x':\n\t        read();\n\t        return hexEscape()\n\n\t    case 'u':\n\t        read();\n\t        return unicodeEscape()\n\n\t    case '\\n':\n\t    case '\\u2028':\n\t    case '\\u2029':\n\t        read();\n\t        return ''\n\n\t    case '\\r':\n\t        read();\n\t        if (peek() === '\\n') {\n\t            read();\n\t        }\n\n\t        return ''\n\n\t    case '1':\n\t    case '2':\n\t    case '3':\n\t    case '4':\n\t    case '5':\n\t    case '6':\n\t    case '7':\n\t    case '8':\n\t    case '9':\n\t        throw invalidChar(read())\n\n\t    case undefined:\n\t        throw invalidChar(read())\n\t    }\n\n\t    return read()\n\t}\n\n\tfunction hexEscape () {\n\t    let buffer = '';\n\t    let c = peek();\n\n\t    if (!util.isHexDigit(c)) {\n\t        throw invalidChar(read())\n\t    }\n\n\t    buffer += read();\n\n\t    c = peek();\n\t    if (!util.isHexDigit(c)) {\n\t        throw invalidChar(read())\n\t    }\n\n\t    buffer += read();\n\n\t    return String.fromCodePoint(parseInt(buffer, 16))\n\t}\n\n\tfunction unicodeEscape () {\n\t    let buffer = '';\n\t    let count = 4;\n\n\t    while (count-- > 0) {\n\t        const c = peek();\n\t        if (!util.isHexDigit(c)) {\n\t            throw invalidChar(read())\n\t        }\n\n\t        buffer += read();\n\t    }\n\n\t    return String.fromCodePoint(parseInt(buffer, 16))\n\t}\n\n\tconst parseStates = {\n\t    start () {\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        push();\n\t    },\n\n\t    beforePropertyName () {\n\t        switch (token.type) {\n\t        case 'identifier':\n\t        case 'string':\n\t            key = token.value;\n\t            parseState = 'afterPropertyName';\n\t            return\n\n\t        case 'punctuator':\n\t            // This code is unreachable since it's handled by the lexState.\n\t            // if (token.value !== '}') {\n\t            //     throw invalidToken()\n\t            // }\n\n\t            pop();\n\t            return\n\n\t        case 'eof':\n\t            throw invalidEOF()\n\t        }\n\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // throw invalidToken()\n\t    },\n\n\t    afterPropertyName () {\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // if (token.type !== 'punctuator' || token.value !== ':') {\n\t        //     throw invalidToken()\n\t        // }\n\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        parseState = 'beforePropertyValue';\n\t    },\n\n\t    beforePropertyValue () {\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        push();\n\t    },\n\n\t    beforeArrayValue () {\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        if (token.type === 'punctuator' && token.value === ']') {\n\t            pop();\n\t            return\n\t        }\n\n\t        push();\n\t    },\n\n\t    afterPropertyValue () {\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // if (token.type !== 'punctuator') {\n\t        //     throw invalidToken()\n\t        // }\n\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        switch (token.value) {\n\t        case ',':\n\t            parseState = 'beforePropertyName';\n\t            return\n\n\t        case '}':\n\t            pop();\n\t        }\n\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // throw invalidToken()\n\t    },\n\n\t    afterArrayValue () {\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // if (token.type !== 'punctuator') {\n\t        //     throw invalidToken()\n\t        // }\n\n\t        if (token.type === 'eof') {\n\t            throw invalidEOF()\n\t        }\n\n\t        switch (token.value) {\n\t        case ',':\n\t            parseState = 'beforeArrayValue';\n\t            return\n\n\t        case ']':\n\t            pop();\n\t        }\n\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // throw invalidToken()\n\t    },\n\n\t    end () {\n\t        // This code is unreachable since it's handled by the lexState.\n\t        // if (token.type !== 'eof') {\n\t        //     throw invalidToken()\n\t        // }\n\t    },\n\t};\n\n\tfunction push () {\n\t    let value;\n\n\t    switch (token.type) {\n\t    case 'punctuator':\n\t        switch (token.value) {\n\t        case '{':\n\t            value = {};\n\t            break\n\n\t        case '[':\n\t            value = [];\n\t            break\n\t        }\n\n\t        break\n\n\t    case 'null':\n\t    case 'boolean':\n\t    case 'numeric':\n\t    case 'string':\n\t        value = token.value;\n\t        break\n\n\t    // This code is unreachable.\n\t    // default:\n\t    //     throw invalidToken()\n\t    }\n\n\t    if (root === undefined) {\n\t        root = value;\n\t    } else {\n\t        const parent = stack[stack.length - 1];\n\t        if (Array.isArray(parent)) {\n\t            parent.push(value);\n\t        } else {\n\t            parent[key] = value;\n\t        }\n\t    }\n\n\t    if (value !== null && typeof value === 'object') {\n\t        stack.push(value);\n\n\t        if (Array.isArray(value)) {\n\t            parseState = 'beforeArrayValue';\n\t        } else {\n\t            parseState = 'beforePropertyName';\n\t        }\n\t    } else {\n\t        const current = stack[stack.length - 1];\n\t        if (current == null) {\n\t            parseState = 'end';\n\t        } else if (Array.isArray(current)) {\n\t            parseState = 'afterArrayValue';\n\t        } else {\n\t            parseState = 'afterPropertyValue';\n\t        }\n\t    }\n\t}\n\n\tfunction pop () {\n\t    stack.pop();\n\n\t    const current = stack[stack.length - 1];\n\t    if (current == null) {\n\t        parseState = 'end';\n\t    } else if (Array.isArray(current)) {\n\t        parseState = 'afterArrayValue';\n\t    } else {\n\t        parseState = 'afterPropertyValue';\n\t    }\n\t}\n\n\t// This code is unreachable.\n\t// function invalidParseState () {\n\t//     return new Error(`JSON5: invalid parse state '${parseState}'`)\n\t// }\n\n\t// This code is unreachable.\n\t// function invalidLexState (state) {\n\t//     return new Error(`JSON5: invalid lex state '${state}'`)\n\t// }\n\n\tfunction invalidChar (c) {\n\t    if (c === undefined) {\n\t        return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n\t    }\n\n\t    return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n\t}\n\n\tfunction invalidEOF () {\n\t    return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n\t}\n\n\t// This code is unreachable.\n\t// function invalidToken () {\n\t//     if (token.type === 'eof') {\n\t//         return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n\t//     }\n\n\t//     const c = String.fromCodePoint(token.value.codePointAt(0))\n\t//     return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n\t// }\n\n\tfunction invalidIdentifier () {\n\t    column -= 5;\n\t    return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n\t}\n\n\tfunction separatorChar (c) {\n\t    console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`);\n\t}\n\n\tfunction formatChar (c) {\n\t    const replacements = {\n\t        \"'\": \"\\\\'\",\n\t        '\"': '\\\\\"',\n\t        '\\\\': '\\\\\\\\',\n\t        '\\b': '\\\\b',\n\t        '\\f': '\\\\f',\n\t        '\\n': '\\\\n',\n\t        '\\r': '\\\\r',\n\t        '\\t': '\\\\t',\n\t        '\\v': '\\\\v',\n\t        '\\0': '\\\\0',\n\t        '\\u2028': '\\\\u2028',\n\t        '\\u2029': '\\\\u2029',\n\t    };\n\n\t    if (replacements[c]) {\n\t        return replacements[c]\n\t    }\n\n\t    if (c < ' ') {\n\t        const hexString = c.charCodeAt(0).toString(16);\n\t        return '\\\\x' + ('00' + hexString).substring(hexString.length)\n\t    }\n\n\t    return c\n\t}\n\n\tfunction syntaxError (message) {\n\t    const err = new SyntaxError(message);\n\t    err.lineNumber = line;\n\t    err.columnNumber = column;\n\t    return err\n\t}\n\n\tvar stringify = function stringify (value, replacer, space) {\n\t    const stack = [];\n\t    let indent = '';\n\t    let propertyList;\n\t    let replacerFunc;\n\t    let gap = '';\n\t    let quote;\n\n\t    if (\n\t        replacer != null &&\n\t        typeof replacer === 'object' &&\n\t        !Array.isArray(replacer)\n\t    ) {\n\t        space = replacer.space;\n\t        quote = replacer.quote;\n\t        replacer = replacer.replacer;\n\t    }\n\n\t    if (typeof replacer === 'function') {\n\t        replacerFunc = replacer;\n\t    } else if (Array.isArray(replacer)) {\n\t        propertyList = [];\n\t        for (const v of replacer) {\n\t            let item;\n\n\t            if (typeof v === 'string') {\n\t                item = v;\n\t            } else if (\n\t                typeof v === 'number' ||\n\t                v instanceof String ||\n\t                v instanceof Number\n\t            ) {\n\t                item = String(v);\n\t            }\n\n\t            if (item !== undefined && propertyList.indexOf(item) < 0) {\n\t                propertyList.push(item);\n\t            }\n\t        }\n\t    }\n\n\t    if (space instanceof Number) {\n\t        space = Number(space);\n\t    } else if (space instanceof String) {\n\t        space = String(space);\n\t    }\n\n\t    if (typeof space === 'number') {\n\t        if (space > 0) {\n\t            space = Math.min(10, Math.floor(space));\n\t            gap = '          '.substr(0, space);\n\t        }\n\t    } else if (typeof space === 'string') {\n\t        gap = space.substr(0, 10);\n\t    }\n\n\t    return serializeProperty('', {'': value})\n\n\t    function serializeProperty (key, holder) {\n\t        let value = holder[key];\n\t        if (value != null) {\n\t            if (typeof value.toJSON5 === 'function') {\n\t                value = value.toJSON5(key);\n\t            } else if (typeof value.toJSON === 'function') {\n\t                value = value.toJSON(key);\n\t            }\n\t        }\n\n\t        if (replacerFunc) {\n\t            value = replacerFunc.call(holder, key, value);\n\t        }\n\n\t        if (value instanceof Number) {\n\t            value = Number(value);\n\t        } else if (value instanceof String) {\n\t            value = String(value);\n\t        } else if (value instanceof Boolean) {\n\t            value = value.valueOf();\n\t        }\n\n\t        switch (value) {\n\t        case null: return 'null'\n\t        case true: return 'true'\n\t        case false: return 'false'\n\t        }\n\n\t        if (typeof value === 'string') {\n\t            return quoteString(value, false)\n\t        }\n\n\t        if (typeof value === 'number') {\n\t            return String(value)\n\t        }\n\n\t        if (typeof value === 'object') {\n\t            return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n\t        }\n\n\t        return undefined\n\t    }\n\n\t    function quoteString (value) {\n\t        const quotes = {\n\t            \"'\": 0.1,\n\t            '\"': 0.2,\n\t        };\n\n\t        const replacements = {\n\t            \"'\": \"\\\\'\",\n\t            '\"': '\\\\\"',\n\t            '\\\\': '\\\\\\\\',\n\t            '\\b': '\\\\b',\n\t            '\\f': '\\\\f',\n\t            '\\n': '\\\\n',\n\t            '\\r': '\\\\r',\n\t            '\\t': '\\\\t',\n\t            '\\v': '\\\\v',\n\t            '\\0': '\\\\0',\n\t            '\\u2028': '\\\\u2028',\n\t            '\\u2029': '\\\\u2029',\n\t        };\n\n\t        let product = '';\n\n\t        for (let i = 0; i < value.length; i++) {\n\t            const c = value[i];\n\t            switch (c) {\n\t            case \"'\":\n\t            case '\"':\n\t                quotes[c]++;\n\t                product += c;\n\t                continue\n\n\t            case '\\0':\n\t                if (util.isDigit(value[i + 1])) {\n\t                    product += '\\\\x00';\n\t                    continue\n\t                }\n\t            }\n\n\t            if (replacements[c]) {\n\t                product += replacements[c];\n\t                continue\n\t            }\n\n\t            if (c < ' ') {\n\t                let hexString = c.charCodeAt(0).toString(16);\n\t                product += '\\\\x' + ('00' + hexString).substring(hexString.length);\n\t                continue\n\t            }\n\n\t            product += c;\n\t        }\n\n\t        const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b);\n\n\t        product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]);\n\n\t        return quoteChar + product + quoteChar\n\t    }\n\n\t    function serializeObject (value) {\n\t        if (stack.indexOf(value) >= 0) {\n\t            throw TypeError('Converting circular structure to JSON5')\n\t        }\n\n\t        stack.push(value);\n\n\t        let stepback = indent;\n\t        indent = indent + gap;\n\n\t        let keys = propertyList || Object.keys(value);\n\t        let partial = [];\n\t        for (const key of keys) {\n\t            const propertyString = serializeProperty(key, value);\n\t            if (propertyString !== undefined) {\n\t                let member = serializeKey(key) + ':';\n\t                if (gap !== '') {\n\t                    member += ' ';\n\t                }\n\t                member += propertyString;\n\t                partial.push(member);\n\t            }\n\t        }\n\n\t        let final;\n\t        if (partial.length === 0) {\n\t            final = '{}';\n\t        } else {\n\t            let properties;\n\t            if (gap === '') {\n\t                properties = partial.join(',');\n\t                final = '{' + properties + '}';\n\t            } else {\n\t                let separator = ',\\n' + indent;\n\t                properties = partial.join(separator);\n\t                final = '{\\n' + indent + properties + ',\\n' + stepback + '}';\n\t            }\n\t        }\n\n\t        stack.pop();\n\t        indent = stepback;\n\t        return final\n\t    }\n\n\t    function serializeKey (key) {\n\t        if (key.length === 0) {\n\t            return quoteString(key, true)\n\t        }\n\n\t        const firstChar = String.fromCodePoint(key.codePointAt(0));\n\t        if (!util.isIdStartChar(firstChar)) {\n\t            return quoteString(key, true)\n\t        }\n\n\t        for (let i = firstChar.length; i < key.length; i++) {\n\t            if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n\t                return quoteString(key, true)\n\t            }\n\t        }\n\n\t        return key\n\t    }\n\n\t    function serializeArray (value) {\n\t        if (stack.indexOf(value) >= 0) {\n\t            throw TypeError('Converting circular structure to JSON5')\n\t        }\n\n\t        stack.push(value);\n\n\t        let stepback = indent;\n\t        indent = indent + gap;\n\n\t        let partial = [];\n\t        for (let i = 0; i < value.length; i++) {\n\t            const propertyString = serializeProperty(String(i), value);\n\t            partial.push((propertyString !== undefined) ? propertyString : 'null');\n\t        }\n\n\t        let final;\n\t        if (partial.length === 0) {\n\t            final = '[]';\n\t        } else {\n\t            if (gap === '') {\n\t                let properties = partial.join(',');\n\t                final = '[' + properties + ']';\n\t            } else {\n\t                let separator = ',\\n' + indent;\n\t                let properties = partial.join(separator);\n\t                final = '[\\n' + indent + properties + ',\\n' + stepback + ']';\n\t            }\n\t        }\n\n\t        stack.pop();\n\t        indent = stepback;\n\t        return final\n\t    }\n\t};\n\n\tconst JSON5 = {\n\t    parse,\n\t    stringify,\n\t};\n\n\tvar lib = JSON5;\n\n\tclass Sidebar{\n\n\t\tconstructor(viewer){\n\t\t\tthis.viewer = viewer;\n\n\t\t\tthis.measuringTool = viewer.measuringTool;\n\t\t\tthis.profileTool = viewer.profileTool;\n\t\t\tthis.volumeTool = viewer.volumeTool;\n\n\t\t\tthis.dom = $(\"#sidebar_root\");\n\t\t}\n\n\t\tcreateToolIcon(icon, title, callback){\n\t\t\tlet element = $(`\n\t\t\t<img src=\"${icon}\"\n\t\t\t\tstyle=\"width: 32px; height: 32px\"\n\t\t\t\tclass=\"button-icon\"\n\t\t\t\tdata-i18n=\"${title}\" />\n\t\t`);\n\n\t\t\telement.click(callback);\n\n\t\t\treturn element;\n\t\t}\n\n\t\tinit(){\n\n\t\t\tthis.initAccordion();\n\t\t\tthis.initAppearance();\n\t\t\tthis.initToolbar();\n\t\t\tthis.initScene();\n\t\t\tthis.initNavigation();\n\t\t\tthis.initFilters();\n\t\t\tthis.initClippingTool();\n\t\t\tthis.initSettings();\n\t\t\t\n\t\t\t$('#potree_version_number').html(Potree.version.major + \".\" + Potree.version.minor + Potree.version.suffix);\n\t\t}\n\n\t\t\t\n\n\t\tinitToolbar(){\n\n\t\t\t// ANGLE\n\t\t\tlet elToolbar = $('#tools');\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/angle.png',\n\t\t\t\t'[title]tt.angle_measurement',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\t\tshowDistances: false,\n\t\t\t\t\t\tshowAngles: true,\n\t\t\t\t\t\tshowArea: false,\n\t\t\t\t\t\tclosed: true,\n\t\t\t\t\t\tmaxMarkers: 3,\n\t\t\t\t\t\tname: 'Angle'});\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// POINT\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/point.svg',\n\t\t\t\t'[title]tt.point_measurement',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\t\tshowDistances: false,\n\t\t\t\t\t\tshowAngles: false,\n\t\t\t\t\t\tshowCoordinates: true,\n\t\t\t\t\t\tshowArea: false,\n\t\t\t\t\t\tclosed: true,\n\t\t\t\t\t\tmaxMarkers: 1,\n\t\t\t\t\t\tname: 'Point'});\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// DISTANCE\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/distance.svg',\n\t\t\t\t'[title]tt.distance_measurement',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\t\tshowDistances: true,\n\t\t\t\t\t\tshowArea: false,\n\t\t\t\t\t\tclosed: false,\n\t\t\t\t\t\tname: 'Distance'});\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// HEIGHT\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/height.svg',\n\t\t\t\t'[title]tt.height_measurement',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\t\tshowDistances: false,\n\t\t\t\t\t\tshowHeight: true,\n\t\t\t\t\t\tshowArea: false,\n\t\t\t\t\t\tclosed: false,\n\t\t\t\t\t\tmaxMarkers: 2,\n\t\t\t\t\t\tname: 'Height'});\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// CIRCLE\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/circle.svg',\n\t\t\t\t'[title]tt.circle_measurement',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\t\tshowDistances: false,\n\t\t\t\t\t\tshowHeight: false,\n\t\t\t\t\t\tshowArea: false,\n\t\t\t\t\t\tshowCircle: true,\n\t\t\t\t\t\tshowEdges: false,\n\t\t\t\t\t\tclosed: false,\n\t\t\t\t\t\tmaxMarkers: 3,\n\t\t\t\t\t\tname: 'Circle'});\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// AZIMUTH\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/azimuth.svg',\n\t\t\t\t'Azimuth',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\t\tshowDistances: false,\n\t\t\t\t\t\tshowHeight: false,\n\t\t\t\t\t\tshowArea: false,\n\t\t\t\t\t\tshowCircle: false,\n\t\t\t\t\t\tshowEdges: false,\n\t\t\t\t\t\tshowAzimuth: true,\n\t\t\t\t\t\tclosed: false,\n\t\t\t\t\t\tmaxMarkers: 2,\n\t\t\t\t\t\tname: 'Azimuth'});\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// AREA\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/area.svg',\n\t\t\t\t'[title]tt.area_measurement',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown();\n\t\t\t\t\tlet measurement = this.measuringTool.startInsertion({\n\t\t\t\t\t\tshowDistances: true,\n\t\t\t\t\t\tshowArea: true,\n\t\t\t\t\t\tclosed: true,\n\t\t\t\t\t\tname: 'Area'});\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// VOLUME\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/volume.svg',\n\t\t\t\t'[title]tt.volume_measurement',\n\t\t\t\t() => {\n\t\t\t\t\tlet volume = this.volumeTool.startInsertion(); \n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === volume.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// SPHERE VOLUME\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/sphere_distances.svg',\n\t\t\t\t'[title]tt.volume_measurement',\n\t\t\t\t() => { \n\t\t\t\t\tlet volume = this.volumeTool.startInsertion({type: SphereVolume}); \n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === volume.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// PROFILE\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/profile.svg',\n\t\t\t\t'[title]tt.height_profile',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown(); ;\n\t\t\t\t\tlet profile = this.profileTool.startInsertion();\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === profile.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// ANNOTATION\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/annotation.svg',\n\t\t\t\t'[title]tt.annotation',\n\t\t\t\t() => {\n\t\t\t\t\t$('#menu_measurements').next().slideDown(); ;\n\t\t\t\t\tlet annotation = this.viewer.annotationTool.startInsertion();\n\n\t\t\t\t\tlet annotationsRoot = $(\"#jstree_scene\").jstree().get_json(\"annotations\");\n\t\t\t\t\tlet jsonNode = annotationsRoot.children.find(child => child.data.uuid === annotation.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// REMOVE ALL\n\t\t\telToolbar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/reset_tools.svg',\n\t\t\t\t'[title]tt.remove_all_measurement',\n\t\t\t\t() => {\n\t\t\t\t\tthis.viewer.scene.removeAllMeasurements();\n\t\t\t\t}\n\t\t\t));\n\n\n\t\t\t{ // SHOW / HIDE Measurements\n\t\t\t\tlet elShow = $(\"#measurement_options_show\");\n\t\t\t\telShow.selectgroup({title: \"Show/Hide labels\"});\n\n\t\t\t\telShow.find(\"input\").click( (e) => {\n\t\t\t\t\tconst show = e.target.value === \"SHOW\";\n\t\t\t\t\tthis.measuringTool.showLabels = show;\n\t\t\t\t});\n\n\t\t\t\tlet currentShow = this.measuringTool.showLabels ? \"SHOW\" : \"HIDE\";\n\t\t\t\telShow.find(`input[value=${currentShow}]`).trigger(\"click\");\n\t\t\t}\n\t\t}\n\n\t\tinitScene(){\n\n\t\t\tlet elScene = $(\"#menu_scene\");\n\t\t\tlet elObjects = elScene.next().find(\"#scene_objects\");\n\t\t\tlet elProperties = elScene.next().find(\"#scene_object_properties\");\n\t\t\t\n\n\t\t\t{\n\t\t\t\tlet elExport = elScene.next().find(\"#scene_export\");\n\n\t\t\t\tlet geoJSONIcon = `${Potree.resourcePath}/icons/file_geojson.svg`;\n\t\t\t\tlet dxfIcon = `${Potree.resourcePath}/icons/file_dxf.svg`;\n\t\t\t\tlet potreeIcon = `${Potree.resourcePath}/icons/file_potree.svg`;\n\n\t\t\t\telExport.append(`\n\t\t\t\tExport: <br>\n\t\t\t\t<a href=\"#\" download=\"measure.json\"><img name=\"geojson_export_button\" src=\"${geoJSONIcon}\" class=\"button-icon\" style=\"height: 24px\" /></a>\n\t\t\t\t<a href=\"#\" download=\"measure.dxf\"><img name=\"dxf_export_button\" src=\"${dxfIcon}\" class=\"button-icon\" style=\"height: 24px\" /></a>\n\t\t\t\t<a href=\"#\" download=\"potree.json5\"><img name=\"potree_export_button\" src=\"${potreeIcon}\" class=\"button-icon\" style=\"height: 24px\" /></a>\n\t\t\t`);\n\n\t\t\t\tlet elDownloadJSON = elExport.find(\"img[name=geojson_export_button]\").parent();\n\t\t\t\telDownloadJSON.click( (event) => {\n\t\t\t\t\tlet scene = this.viewer.scene;\n\t\t\t\t\tlet measurements = [...scene.measurements, ...scene.profiles, ...scene.volumes];\n\n\t\t\t\t\tif(measurements.length > 0){\n\t\t\t\t\t\tlet geoJson = GeoJSONExporter.toString(measurements);\n\n\t\t\t\t\t\tlet url = window.URL.createObjectURL(new Blob([geoJson], {type: 'data:application/octet-stream'}));\n\t\t\t\t\t\telDownloadJSON.attr('href', url);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tthis.viewer.postError(\"no measurements to export\");\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet elDownloadDXF = elExport.find(\"img[name=dxf_export_button]\").parent();\n\t\t\t\telDownloadDXF.click( (event) => {\n\t\t\t\t\tlet scene = this.viewer.scene;\n\t\t\t\t\tlet measurements = [...scene.measurements, ...scene.profiles, ...scene.volumes];\n\n\t\t\t\t\tif(measurements.length > 0){\n\t\t\t\t\t\tlet dxf = DXFExporter.toString(measurements);\n\n\t\t\t\t\t\tlet url = window.URL.createObjectURL(new Blob([dxf], {type: 'data:application/octet-stream'}));\n\t\t\t\t\t\telDownloadDXF.attr('href', url);\n\t\t\t\t\t}else {\n\t\t\t\t\t\tthis.viewer.postError(\"no measurements to export\");\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet elDownloadPotree = elExport.find(\"img[name=potree_export_button]\").parent();\n\t\t\t\telDownloadPotree.click( (event) => {\n\n\t\t\t\t\tlet data = Potree.saveProject(this.viewer);\n\t\t\t\t\tlet dataString = lib.stringify(data, null, \"\\t\");\n\n\t\t\t\t\tlet url = window.URL.createObjectURL(new Blob([dataString], {type: 'data:application/octet-stream'}));\n\t\t\t\t\telDownloadPotree.attr('href', url);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet propertiesPanel = new PropertiesPanel(elProperties, this.viewer);\n\t\t\tpropertiesPanel.setScene(this.viewer.scene);\n\t\t\t\n\t\t\tlocalStorage.removeItem('jstree');\n\n\t\t\tlet tree = $(`<div id=\"jstree_scene\"></div>`);\n\t\t\telObjects.append(tree);\n\n\t\t\ttree.jstree({\n\t\t\t\t'plugins': [\"checkbox\", \"state\"],\n\t\t\t\t'core': {\n\t\t\t\t\t\"dblclick_toggle\": false,\n\t\t\t\t\t\"state\": {\n\t\t\t\t\t\t\"checked\" : true\n\t\t\t\t\t},\n\t\t\t\t\t'check_callback': true,\n\t\t\t\t\t\"expand_selected_onload\": true\n\t\t\t\t},\n\t\t\t\t\"checkbox\" : {\n\t\t\t\t\t\"keep_selected_style\": true,\n\t\t\t\t\t\"three_state\": false,\n\t\t\t\t\t\"whole_node\": false,\n\t\t\t\t\t\"tie_selection\": false,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tlet createNode = (parent, text, icon, object) => {\n\t\t\t\tlet nodeID = tree.jstree('create_node', parent, { \n\t\t\t\t\t\t\"text\": text, \n\t\t\t\t\t\t\"icon\": icon,\n\t\t\t\t\t\t\"data\": object\n\t\t\t\t\t}, \n\t\t\t\t\t\"last\", false, false);\n\t\t\t\t\n\t\t\t\tif(object.visible){\n\t\t\t\t\ttree.jstree('check_node', nodeID);\n\t\t\t\t}else {\n\t\t\t\t\ttree.jstree('uncheck_node', nodeID);\n\t\t\t\t}\n\n\t\t\t\treturn nodeID;\n\t\t\t};\n\n\t\t\tlet pcID = tree.jstree('create_node', \"#\", { \"text\": \"<b>Point Clouds</b>\", \"id\": \"pointclouds\"}, \"last\", false, false);\n\t\t\tlet measurementID = tree.jstree('create_node', \"#\", { \"text\": \"<b>Measurements</b>\", \"id\": \"measurements\" }, \"last\", false, false);\n\t\t\tlet annotationsID = tree.jstree('create_node', \"#\", { \"text\": \"<b>Annotations</b>\", \"id\": \"annotations\" }, \"last\", false, false);\n\t\t\tlet otherID = tree.jstree('create_node', \"#\", { \"text\": \"<b>Other</b>\", \"id\": \"other\" }, \"last\", false, false);\n\t\t\tlet vectorsID = tree.jstree('create_node', \"#\", { \"text\": \"<b>Vectors</b>\", \"id\": \"vectors\" }, \"last\", false, false);\n\t\t\tlet imagesID = tree.jstree('create_node', \"#\", { \"text\": \"<b> Images</b>\", \"id\": \"images\" }, \"last\", false, false);\n\n\t\t\ttree.jstree(\"check_node\", pcID);\n\t\t\ttree.jstree(\"check_node\", measurementID);\n\t\t\ttree.jstree(\"check_node\", annotationsID);\n\t\t\ttree.jstree(\"check_node\", otherID);\n\t\t\ttree.jstree(\"check_node\", vectorsID);\n\t\t\ttree.jstree(\"check_node\", imagesID);\n\n\t\t\ttree.on('create_node.jstree', (e, data) => {\n\t\t\t\ttree.jstree(\"open_all\");\n\t\t\t});\n\n\t\t\ttree.on(\"select_node.jstree\", (e, data) => {\n\t\t\t\tlet object = data.node.data;\n\t\t\t\tpropertiesPanel.set(object);\n\n\t\t\t\tthis.viewer.inputHandler.deselectAll();\n\n\t\t\t\tif(object instanceof Volume){\n\t\t\t\t\tthis.viewer.inputHandler.toggleSelection(object);\n\t\t\t\t}\n\n\t\t\t\t$(this.viewer.renderer.domElement).focus();\n\t\t\t});\n\n\t\t\ttree.on(\"deselect_node.jstree\", (e, data) => {\n\t\t\t\tpropertiesPanel.set(null);\n\t\t\t});\n\n\t\t\ttree.on(\"delete_node.jstree\", (e, data) => {\n\t\t\t\tpropertiesPanel.set(null);\n\t\t\t});\n\n\t\t\ttree.on('dblclick','.jstree-anchor', (e) => {\n\n\t\t\t\tlet instance = $.jstree.reference(e.target);\n\t\t\t\tlet node = instance.get_node(e.target);\n\t\t\t\tlet object = node.data;\n\n\t\t\t\t// ignore double click on checkbox\n\t\t\t\tif(e.target.classList.contains(\"jstree-checkbox\")){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif(object instanceof PointCloudTree){\n\t\t\t\t\tlet box = this.viewer.getBoundingBox([object]);\n\t\t\t\t\tlet node = new Object3D();\n\t\t\t\t\tnode.boundingBox = box;\n\t\t\t\t\tthis.viewer.zoomTo(node, 1, 500);\n\t\t\t\t}else if(object instanceof Measure){\n\t\t\t\t\tlet points = object.points.map(p => p.position);\n\t\t\t\t\tlet box = new Box3().setFromPoints(points);\n\t\t\t\t\tif(box.getSize(new Vector3()).length() > 0){\n\t\t\t\t\t\tlet node = new Object3D();\n\t\t\t\t\t\tnode.boundingBox = box;\n\t\t\t\t\t\tthis.viewer.zoomTo(node, 2, 500);\n\t\t\t\t\t}\n\t\t\t\t}else if(object instanceof Profile){\n\t\t\t\t\tlet points = object.points;\n\t\t\t\t\tlet box = new Box3().setFromPoints(points);\n\t\t\t\t\tif(box.getSize(new Vector3()).length() > 0){\n\t\t\t\t\t\tlet node = new Object3D();\n\t\t\t\t\t\tnode.boundingBox = box;\n\t\t\t\t\t\tthis.viewer.zoomTo(node, 1, 500);\n\t\t\t\t\t}\n\t\t\t\t}else if(object instanceof Volume){\n\t\t\t\t\t\n\t\t\t\t\tlet box = object.boundingBox.clone().applyMatrix4(object.matrixWorld);\n\n\t\t\t\t\tif(box.getSize(new Vector3()).length() > 0){\n\t\t\t\t\t\tlet node = new Object3D();\n\t\t\t\t\t\tnode.boundingBox = box;\n\t\t\t\t\t\tthis.viewer.zoomTo(node, 1, 500);\n\t\t\t\t\t}\n\t\t\t\t}else if(object instanceof Annotation){\n\t\t\t\t\tobject.moveHere(this.viewer.scene.getActiveCamera());\n\t\t\t\t}else if(object instanceof PolygonClipVolume){\n\t\t\t\t\tlet dir = object.camera.getWorldDirection(new Vector3());\n\t\t\t\t\tlet target;\n\n\t\t\t\t\tif(object.camera instanceof OrthographicCamera){\n\t\t\t\t\t\tdir.multiplyScalar(object.camera.right);\n\t\t\t\t\t\ttarget = new Vector3().addVectors(object.camera.position, dir);\n\t\t\t\t\t\tthis.viewer.setCameraMode(CameraMode.ORTHOGRAPHIC);\n\t\t\t\t\t}else if(object.camera instanceof PerspectiveCamera){\n\t\t\t\t\t\tdir.multiplyScalar(this.viewer.scene.view.radius);\n\t\t\t\t\t\ttarget = new Vector3().addVectors(object.camera.position, dir);\n\t\t\t\t\t\tthis.viewer.setCameraMode(CameraMode.PERSPECTIVE);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.viewer.scene.view.position.copy(object.camera.position);\n\t\t\t\t\tthis.viewer.scene.view.lookAt(target);\n\t\t\t\t}else if(object.type === \"SpotLight\"){\n\t\t\t\t\tlet distance = (object.distance > 0) ? object.distance / 4 : 5 * 1000;\n\t\t\t\t\tlet position = object.position;\n\t\t\t\t\tlet target = new Vector3().addVectors(\n\t\t\t\t\t\tposition, \n\t\t\t\t\t\tobject.getWorldDirection(new Vector3()).multiplyScalar(distance));\n\n\t\t\t\t\tthis.viewer.scene.view.position.copy(object.position);\n\t\t\t\t\tthis.viewer.scene.view.lookAt(target);\n\t\t\t\t}else if(object instanceof Object3D){\n\t\t\t\t\tlet box = new Box3().setFromObject(object);\n\n\t\t\t\t\tif(box.getSize(new Vector3()).length() > 0){\n\t\t\t\t\t\tlet node = new Object3D();\n\t\t\t\t\t\tnode.boundingBox = box;\n\t\t\t\t\t\tthis.viewer.zoomTo(node, 1, 500);\n\t\t\t\t\t}\n\t\t\t\t}else if(object instanceof OrientedImage){\n\t\t\t\t\t// TODO zoom to images\n\n\t\t\t\t\t// let box = new THREE.Box3().setFromObject(object);\n\n\t\t\t\t\t// if(box.getSize(new THREE.Vector3()).length() > 0){\n\t\t\t\t\t// \tlet node = new THREE.Object3D();\n\t\t\t\t\t// \tnode.boundingBox = box;\n\t\t\t\t\t// \tthis.viewer.zoomTo(node, 1, 500);\n\t\t\t\t\t// }\n\t\t\t\t}else if(object instanceof Images360){\n\t\t\t\t\t// TODO\n\t\t\t\t}else if(object instanceof Geopackage){\n\t\t\t\t\t// TODO\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttree.on(\"uncheck_node.jstree\", (e, data) => {\n\t\t\t\tlet object = data.node.data;\n\n\t\t\t\tif(object){\n\t\t\t\t\tobject.visible = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttree.on(\"check_node.jstree\", (e, data) => {\n\t\t\t\tlet object = data.node.data;\n\n\t\t\t\tif(object){\n\t\t\t\t\tobject.visible = true;\n\t\t\t\t}\n\t\t\t});\n\n\n\t\t\tlet onPointCloudAdded = (e) => {\n\t\t\t\tlet pointcloud = e.pointcloud;\n\t\t\t\tlet cloudIcon = `${Potree.resourcePath}/icons/cloud.svg`;\n\t\t\t\tlet node = createNode(pcID, pointcloud.name, cloudIcon, pointcloud);\n\n\t\t\t\tpointcloud.addEventListener(\"visibility_changed\", () => {\n\t\t\t\t\tif(pointcloud.visible){\n\t\t\t\t\t\ttree.jstree('check_node', node);\n\t\t\t\t\t}else {\n\t\t\t\t\t\ttree.jstree('uncheck_node', node);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tlet onMeasurementAdded = (e) => {\n\t\t\t\tlet measurement = e.measurement;\n\t\t\t\tlet icon = Utils.getMeasurementIcon(measurement);\n\t\t\t\tcreateNode(measurementID, measurement.name, icon, measurement);\n\t\t\t};\n\n\t\t\tlet onVolumeAdded = (e) => {\n\t\t\t\tlet volume = e.volume;\n\t\t\t\tlet icon = Utils.getMeasurementIcon(volume);\n\t\t\t\tlet node = createNode(measurementID, volume.name, icon, volume);\n\n\t\t\t\tvolume.addEventListener(\"visibility_changed\", () => {\n\t\t\t\t\tif(volume.visible){\n\t\t\t\t\t\ttree.jstree('check_node', node);\n\t\t\t\t\t}else {\n\t\t\t\t\t\ttree.jstree('uncheck_node', node);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tlet onProfileAdded = (e) => {\n\t\t\t\tlet profile = e.profile;\n\t\t\t\tlet icon = Utils.getMeasurementIcon(profile);\n\t\t\t\tcreateNode(measurementID, profile.name, icon, profile);\n\t\t\t};\n\n\t\t\tlet onAnnotationAdded = (e) => {\n\t\t\t\tlet annotation = e.annotation;\n\n\t\t\t\tlet annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`;\n\t\t\t\tlet parentID = this.annotationMapping.get(annotation.parent);\n\t\t\t\tlet annotationID = createNode(parentID, annotation.title, annotationIcon, annotation);\n\t\t\t\tthis.annotationMapping.set(annotation, annotationID);\n\n\t\t\t\tannotation.addEventListener(\"annotation_changed\", (e) => {\n\t\t\t\t\tlet annotationsRoot = $(\"#jstree_scene\").jstree().get_json(\"annotations\");\n\t\t\t\t\tlet jsonNode = annotationsRoot.children.find(child => child.data.uuid === annotation.uuid);\n\t\t\t\t\t\n\t\t\t\t\t$.jstree.reference(jsonNode.id).rename_node(jsonNode.id, annotation.title);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tlet onCameraAnimationAdded = (e) => {\n\t\t\t\tconst animation = e.animation;\n\n\t\t\t\tconst animationIcon = `${Potree.resourcePath}/icons/camera_animation.svg`;\n\t\t\t\tcreateNode(otherID, \"animation\", animationIcon, animation);\n\t\t\t};\n\n\t\t\tlet onOrientedImagesAdded = (e) => {\n\t\t\t\tconst images = e.images;\n\n\t\t\t\tconst imagesIcon = `${Potree.resourcePath}/icons/picture.svg`;\n\t\t\t\tconst node = createNode(imagesID, \"images\", imagesIcon, images);\n\n\t\t\t\timages.addEventListener(\"visibility_changed\", () => {\n\t\t\t\t\tif(images.visible){\n\t\t\t\t\t\ttree.jstree('check_node', node);\n\t\t\t\t\t}else {\n\t\t\t\t\t\ttree.jstree('uncheck_node', node);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tlet onImages360Added = (e) => {\n\t\t\t\tconst images = e.images;\n\n\t\t\t\tconst imagesIcon = `${Potree.resourcePath}/icons/picture.svg`;\n\t\t\t\tconst node = createNode(imagesID, \"360° images\", imagesIcon, images);\n\n\t\t\t\timages.addEventListener(\"visibility_changed\", () => {\n\t\t\t\t\tif(images.visible){\n\t\t\t\t\t\ttree.jstree('check_node', node);\n\t\t\t\t\t}else {\n\t\t\t\t\t\ttree.jstree('uncheck_node', node);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst onGeopackageAdded = (e) => {\n\t\t\t\tconst geopackage = e.geopackage;\n\n\t\t\t\tconst geopackageIcon = `${Potree.resourcePath}/icons/triangle.svg`;\n\t\t\t\tconst tree = $(`#jstree_scene`);\n\t\t\t\tconst parentNode = \"vectors\";\n\n\t\t\t\tfor(const layer of geopackage.node.children){\n\t\t\t\t\tconst name = layer.name;\n\n\t\t\t\t\tlet shpPointsID = tree.jstree('create_node', parentNode, { \n\t\t\t\t\t\t\t\"text\": name, \n\t\t\t\t\t\t\t\"icon\": geopackageIcon,\n\t\t\t\t\t\t\t\"object\": layer,\n\t\t\t\t\t\t\t\"data\": layer,\n\t\t\t\t\t\t}, \n\t\t\t\t\t\t\"last\", false, false);\n\t\t\t\t\ttree.jstree(layer.visible ? \"check_node\" : \"uncheck_node\", shpPointsID);\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tthis.viewer.scene.addEventListener(\"pointcloud_added\", onPointCloudAdded);\n\t\t\tthis.viewer.scene.addEventListener(\"measurement_added\", onMeasurementAdded);\n\t\t\tthis.viewer.scene.addEventListener(\"profile_added\", onProfileAdded);\n\t\t\tthis.viewer.scene.addEventListener(\"volume_added\", onVolumeAdded);\n\t\t\tthis.viewer.scene.addEventListener(\"camera_animation_added\", onCameraAnimationAdded);\n\t\t\tthis.viewer.scene.addEventListener(\"oriented_images_added\", onOrientedImagesAdded);\n\t\t\tthis.viewer.scene.addEventListener(\"360_images_added\", onImages360Added);\n\t\t\tthis.viewer.scene.addEventListener(\"geopackage_added\", onGeopackageAdded);\n\t\t\tthis.viewer.scene.addEventListener(\"polygon_clip_volume_added\", onVolumeAdded);\n\t\t\tthis.viewer.scene.annotations.addEventListener(\"annotation_added\", onAnnotationAdded);\n\n\t\t\tlet onMeasurementRemoved = (e) => {\n\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.measurement.uuid);\n\t\t\t\t\n\t\t\t\ttree.jstree(\"delete_node\", jsonNode.id);\n\t\t\t};\n\n\t\t\tlet onVolumeRemoved = (e) => {\n\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.volume.uuid);\n\t\t\t\t\n\t\t\t\ttree.jstree(\"delete_node\", jsonNode.id);\n\t\t\t};\n\n\t\t\tlet onPolygonClipVolumeRemoved = (e) => {\n\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.volume.uuid);\n\t\t\t\t\n\t\t\t\ttree.jstree(\"delete_node\", jsonNode.id);\n\t\t\t};\n\n\t\t\tlet onProfileRemoved = (e) => {\n\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.profile.uuid);\n\t\t\t\t\n\t\t\t\ttree.jstree(\"delete_node\", jsonNode.id);\n\t\t\t};\n\n\t\t\tthis.viewer.scene.addEventListener(\"measurement_removed\", onMeasurementRemoved);\n\t\t\tthis.viewer.scene.addEventListener(\"volume_removed\", onVolumeRemoved);\n\t\t\tthis.viewer.scene.addEventListener(\"polygon_clip_volume_removed\", onPolygonClipVolumeRemoved);\n\t\t\tthis.viewer.scene.addEventListener(\"profile_removed\", onProfileRemoved);\n\n\t\t\t{\n\t\t\t\tlet annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`;\n\t\t\t\tthis.annotationMapping = new Map(); \n\t\t\t\tthis.annotationMapping.set(this.viewer.scene.annotations, annotationsID);\n\t\t\t\tthis.viewer.scene.annotations.traverseDescendants(annotation => {\n\t\t\t\t\tlet parentID = this.annotationMapping.get(annotation.parent);\n\t\t\t\t\tlet annotationID = createNode(parentID, annotation.title, annotationIcon, annotation);\n\t\t\t\t\tthis.annotationMapping.set(annotation, annotationID);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst scene = this.viewer.scene;\n\t\t\tfor(let pointcloud of scene.pointclouds){\n\t\t\t\tonPointCloudAdded({pointcloud: pointcloud});\n\t\t\t}\n\n\t\t\tfor(let measurement of scene.measurements){\n\t\t\t\tonMeasurementAdded({measurement: measurement});\n\t\t\t}\n\n\t\t\tfor(let volume of [...scene.volumes, ...scene.polygonClipVolumes]){\n\t\t\t\tonVolumeAdded({volume: volume});\n\t\t\t}\n\n\t\t\tfor(let animation of scene.cameraAnimations){\n\t\t\t\tonCameraAnimationAdded({animation: animation});\n\t\t\t}\n\n\t\t\tfor(let images of scene.orientedImages){\n\t\t\t\tonOrientedImagesAdded({images: images});\n\t\t\t}\n\n\t\t\tfor(let images of scene.images360){\n\t\t\t\tonImages360Added({images: images});\n\t\t\t}\n\n\t\t\tfor(const geopackage of scene.geopackages){\n\t\t\t\tonGeopackageAdded({geopackage: geopackage});\n\t\t\t}\n\n\t\t\tfor(let profile of scene.profiles){\n\t\t\t\tonProfileAdded({profile: profile});\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tcreateNode(otherID, \"Camera\", null, new Camera());\n\t\t\t}\n\n\t\t\tthis.viewer.addEventListener(\"scene_changed\", (e) => {\n\t\t\t\tpropertiesPanel.setScene(e.scene);\n\n\t\t\t\te.oldScene.removeEventListener(\"pointcloud_added\", onPointCloudAdded);\n\t\t\t\te.oldScene.removeEventListener(\"measurement_added\", onMeasurementAdded);\n\t\t\t\te.oldScene.removeEventListener(\"profile_added\", onProfileAdded);\n\t\t\t\te.oldScene.removeEventListener(\"volume_added\", onVolumeAdded);\n\t\t\t\te.oldScene.removeEventListener(\"polygon_clip_volume_added\", onVolumeAdded);\n\t\t\t\te.oldScene.removeEventListener(\"measurement_removed\", onMeasurementRemoved);\n\n\t\t\t\te.scene.addEventListener(\"pointcloud_added\", onPointCloudAdded);\n\t\t\t\te.scene.addEventListener(\"measurement_added\", onMeasurementAdded);\n\t\t\t\te.scene.addEventListener(\"profile_added\", onProfileAdded);\n\t\t\t\te.scene.addEventListener(\"volume_added\", onVolumeAdded);\n\t\t\t\te.scene.addEventListener(\"polygon_clip_volume_added\", onVolumeAdded);\n\t\t\t\te.scene.addEventListener(\"measurement_removed\", onMeasurementRemoved);\n\t\t\t});\n\n\t\t}\n\n\t\tinitClippingTool(){\n\n\n\t\t\tthis.viewer.addEventListener(\"cliptask_changed\", (event) => {\n\t\t\t\tconsole.log(\"TODO\");\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener(\"clipmethod_changed\", (event) => {\n\t\t\t\tconsole.log(\"TODO\");\n\t\t\t});\n\n\t\t\t{\n\t\t\t\tlet elClipTask = $(\"#cliptask_options\");\n\t\t\t\telClipTask.selectgroup({title: \"Clip Task\"});\n\n\t\t\t\telClipTask.find(\"input\").click( (e) => {\n\t\t\t\t\tthis.viewer.setClipTask(ClipTask[e.target.value]);\n\t\t\t\t});\n\n\t\t\t\tlet currentClipTask = Object.keys(ClipTask)\n\t\t\t\t\t.filter(key => ClipTask[key] === this.viewer.clipTask);\n\t\t\t\telClipTask.find(`input[value=${currentClipTask}]`).trigger(\"click\");\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet elClipMethod = $(\"#clipmethod_options\");\n\t\t\t\telClipMethod.selectgroup({title: \"Clip Method\"});\n\n\t\t\t\telClipMethod.find(\"input\").click( (e) => {\n\t\t\t\t\tthis.viewer.setClipMethod(ClipMethod[e.target.value]);\n\t\t\t\t});\n\n\t\t\t\tlet currentClipMethod = Object.keys(ClipMethod)\n\t\t\t\t\t.filter(key => ClipMethod[key] === this.viewer.clipMethod);\n\t\t\t\telClipMethod.find(`input[value=${currentClipMethod}]`).trigger(\"click\");\n\t\t\t}\n\n\t\t\tlet clippingToolBar = $(\"#clipping_tools\");\n\n\t\t\t// CLIP VOLUME\n\t\t\tclippingToolBar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/clip_volume.svg',\n\t\t\t\t'[title]tt.clip_volume',\n\t\t\t\t() => {\n\t\t\t\t\tlet item = this.volumeTool.startInsertion({clip: true}); \n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t// CLIP POLYGON\n\t\t\tclippingToolBar.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/clip-polygon.svg\",\n\t\t\t\t\"[title]tt.clip_polygon\",\n\t\t\t\t() => {\n\t\t\t\t\tlet item = this.viewer.clippingTool.startInsertion({type: \"polygon\"});\n\n\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid);\n\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\t{// SCREEN BOX SELECT\n\t\t\t\tlet boxSelectTool = new ScreenBoxSelectTool(this.viewer);\n\n\t\t\t\tclippingToolBar.append(this.createToolIcon(\n\t\t\t\t\tPotree.resourcePath + \"/icons/clip-screen.svg\",\n\t\t\t\t\t\"[title]tt.screen_clip_box\",\n\t\t\t\t\t() => {\n\t\t\t\t\t\tif(!(this.viewer.scene.getActiveCamera() instanceof OrthographicCamera)){\n\t\t\t\t\t\t\tthis.viewer.postMessage(`Switch to Orthographic Camera Mode before using the Screen-Box-Select tool.`, \n\t\t\t\t\t\t\t\t{duration: 2000});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet item = boxSelectTool.startInsertion();\n\n\t\t\t\t\t\tlet measurementsRoot = $(\"#jstree_scene\").jstree().get_json(\"measurements\");\n\t\t\t\t\t\tlet jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid);\n\t\t\t\t\t\t$.jstree.reference(jsonNode.id).deselect_all();\n\t\t\t\t\t\t$.jstree.reference(jsonNode.id).select_node(jsonNode.id);\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\n\t\t\t{ // REMOVE CLIPPING TOOLS\n\t\t\t\tclippingToolBar.append(this.createToolIcon(\n\t\t\t\t\tPotree.resourcePath + \"/icons/remove.svg\",\n\t\t\t\t\t\"[title]tt.remove_all_clipping_volumes\",\n\t\t\t\t\t() => {\n\n\t\t\t\t\t\tthis.viewer.scene.removeAllClipVolumes();\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\n\t\t}\n\n\t\tinitFilters(){\n\t\t\tthis.initClassificationList();\n\t\t\tthis.initReturnFilters();\n\t\t\tthis.initGPSTimeFilters();\n\t\t\tthis.initPointSourceIDFilters();\n\n\t\t}\n\n\t\tinitReturnFilters(){\n\t\t\tlet elReturnFilterPanel = $('#return_filter_panel');\n\n\t\t\t{ // RETURN NUMBER\n\t\t\t\tlet sldReturnNumber = elReturnFilterPanel.find('#sldReturnNumber');\n\t\t\t\tlet lblReturnNumber = elReturnFilterPanel.find('#lblReturnNumber');\n\n\t\t\t\tsldReturnNumber.slider({\n\t\t\t\t\trange: true,\n\t\t\t\t\tmin: 0, max: 7, step: 1,\n\t\t\t\t\tvalues: [0, 7],\n\t\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\t\tthis.viewer.setFilterReturnNumberRange(ui.values[0], ui.values[1]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet onReturnNumberChanged = (event) => {\n\t\t\t\t\tlet [from, to] = this.viewer.filterReturnNumberRange;\n\n\t\t\t\t\tlblReturnNumber[0].innerHTML = `${from} to ${to}`;\n\t\t\t\t\tsldReturnNumber.slider({values: [from, to]});\n\t\t\t\t};\n\n\t\t\t\tthis.viewer.addEventListener('filter_return_number_range_changed', onReturnNumberChanged);\n\n\t\t\t\tonReturnNumberChanged();\n\t\t\t}\n\n\t\t\t{ // NUMBER OF RETURNS\n\t\t\t\tlet sldNumberOfReturns = elReturnFilterPanel.find('#sldNumberOfReturns');\n\t\t\t\tlet lblNumberOfReturns = elReturnFilterPanel.find('#lblNumberOfReturns');\n\n\t\t\t\tsldNumberOfReturns.slider({\n\t\t\t\t\trange: true,\n\t\t\t\t\tmin: 0, max: 7, step: 1,\n\t\t\t\t\tvalues: [0, 7],\n\t\t\t\t\tslide: (event, ui) => {\n\t\t\t\t\t\tthis.viewer.setFilterNumberOfReturnsRange(ui.values[0], ui.values[1]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet onNumberOfReturnsChanged = (event) => {\n\t\t\t\t\tlet [from, to] = this.viewer.filterNumberOfReturnsRange;\n\n\t\t\t\t\tlblNumberOfReturns[0].innerHTML = `${from} to ${to}`;\n\t\t\t\t\tsldNumberOfReturns.slider({values: [from, to]});\n\t\t\t\t};\n\n\t\t\t\tthis.viewer.addEventListener('filter_number_of_returns_range_changed', onNumberOfReturnsChanged);\n\n\t\t\t\tonNumberOfReturnsChanged();\n\t\t\t}\n\t\t}\n\n\t\tinitGPSTimeFilters(){\n\n\t\t\tlet elGPSTimeFilterPanel = $('#gpstime_filter_panel');\n\n\t\t\t{\n\t\t\t\tlet slider = new HierarchicalSlider({\n\t\t\t\t\tlevels: 4,\n\t\t\t\t\tslide: (event) => {\n\t\t\t\t\t\tthis.viewer.setFilterGPSTimeRange(...event.values);\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tlet initialized = false;\n\n\t\t\t\tlet initialize = () => {\n\t\t\t\t\t\n\t\t\t\t\tlet elRangeContainer = $(\"#gpstime_multilevel_range_container\");\n\t\t\t\t\telRangeContainer[0].prepend(slider.element);\n\n\t\t\t\t\tlet extent = this.viewer.getGpsTimeExtent();\n\n\t\t\t\t\tslider.setRange(extent);\n\t\t\t\t\tslider.setValues(extent);\n\n\n\t\t\t\t\tinitialized = true;\n\t\t\t\t};\n\n\t\t\t\tthis.viewer.addEventListener(\"update\", (e) => {\n\t\t\t\t\tlet extent = this.viewer.getGpsTimeExtent();\n\t\t\t\t\tlet gpsTimeAvailable = extent[0] !== Infinity;\n\n\t\t\t\t\tif(!initialized && gpsTimeAvailable){\n\t\t\t\t\t\tinitialize();\n\t\t\t\t\t}\n\n\t\t\t\t\tslider.setRange(extent);\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\t{\n\t\t\t\t\n\t\t\t\tconst txtGpsTime = elGPSTimeFilterPanel.find(\"#txtGpsTime\");\n\t\t\t\tconst btnFindGpsTime = elGPSTimeFilterPanel.find(\"#btnFindGpsTime\");\n\n\t\t\t\tlet targetTime = null;\n\n\t\t\t\ttxtGpsTime.on(\"input\", (e) => {\n\t\t\t\t\tconst str = txtGpsTime.val();\n\n\t\t\t\t\tif(!isNaN(str)){\n\t\t\t\t\t\tconst value = parseFloat(str);\n\t\t\t\t\t\ttargetTime = value;\n\n\t\t\t\t\t\ttxtGpsTime.css(\"background-color\", \"\");\n\t\t\t\t\t}else {\n\t\t\t\t\t\ttargetTime = null;\n\n\t\t\t\t\t\ttxtGpsTime.css(\"background-color\", \"#ff9999\");\n\t\t\t\t\t}\n\n\t\t\t\t});\n\n\t\t\t\tbtnFindGpsTime.click( () => {\n\t\t\t\t\t\n\t\t\t\t\tif(targetTime !== null){\n\t\t\t\t\t\tviewer.moveToGpsTimeVicinity(targetTime);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t\tinitPointSourceIDFilters() {\n\t\t\tlet elPointSourceIDFilterPanel = $('#pointsourceid_filter_panel');\n\n\t\t\t{\n\t\t\t\tlet slider = new HierarchicalSlider({\n\t\t\t\t\tlevels: 4,\n\t\t\t\t\trange: [0, 65535],\n\t\t\t\t\tprecision: 1,\n\t\t\t\t\tslide: (event) => {\n\t\t\t\t\t\tlet values = event.values;\n\t\t\t\t\t\tthis.viewer.setFilterPointSourceIDRange(values[0], values[1]);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet initialized = false;\n\n\t\t\t\tlet initialize = () => {\n\t\t\t\t\telPointSourceIDFilterPanel[0].prepend(slider.element);\n\n\t\t\t\t\tinitialized = true;\n\t\t\t\t};\n\n\t\t\t\tthis.viewer.addEventListener(\"update\", (e) => {\n\t\t\t\t\tlet extent = this.viewer.filterPointSourceIDRange;\n\n\t\t\t\t\tif(!initialized){\n\t\t\t\t\t\tinitialize();\n\n\t\t\t\t\t\tslider.setValues(extent);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// let lblPointSourceID = elPointSourceIDFilterPanel.find(\"#lblPointSourceID\");\n\t\t\t// let elPointSourceID = elPointSourceIDFilterPanel.find(\"#spnPointSourceID\");\n\n\t\t\t// let slider = new ZoomableSlider();\n\t\t\t// elPointSourceID[0].appendChild(slider.element);\n\t\t\t// slider.update();\n\n\t\t\t// slider.change( () => {\n\t\t\t// \tlet range = slider.chosenRange;\n\t\t\t// \tthis.viewer.setFilterPointSourceIDRange(range[0], range[1]);\n\t\t\t// });\n\n\t\t\t// let onPointSourceIDExtentChanged = (event) => {\n\t\t\t// \tlet range = this.viewer.filterPointSourceIDExtent;\n\t\t\t// \tslider.setVisibleRange(range);\n\t\t\t// };\n\n\t\t\t// let onPointSourceIDChanged = (event) => {\n\t\t\t// \tlet range = this.viewer.filterPointSourceIDRange;\n\n\t\t\t// \tlet precision = 1;\n\t\t\t// \tlet from = `${Utils.addCommas(range[0].toFixed(precision))}`;\n\t\t\t// \tlet to = `${Utils.addCommas(range[1].toFixed(precision))}`;\n\t\t\t// \tlblPointSourceID[0].innerHTML = `${from} to ${to}`;\n\n\t\t\t// \tslider.setRange(range);\n\t\t\t// };\n\n\t\t\t// this.viewer.addEventListener('filter_point_source_id_range_changed', onPointSourceIDChanged);\n\t\t\t// this.viewer.addEventListener('filter_point_source_id_extent_changed', onPointSourceIDExtentChanged);\n\n\t\t}\n\n\t\tinitClassificationList(){\n\t\t\tlet elClassificationList = $('#classificationList');\n\n\t\t\tlet addClassificationItem = (code, name) => {\n\t\t\t\tconst classification = this.viewer.classifications[code];\n\t\t\t\tconst inputID = 'chkClassification_' + code;\n\t\t\t\tconst colorPickerID = 'colorPickerClassification_' + code;\n\n\t\t\t\tconst checked = classification.visible ? \"checked\" : \"\";\n\n\t\t\t\tlet element = $(`\n\t\t\t\t<li>\n\t\t\t\t\t<label style=\"whitespace: nowrap; display: flex\">\n\t\t\t\t\t\t<input id=\"${inputID}\" type=\"checkbox\" ${checked}/>\n\t\t\t\t\t\t<span style=\"flex-grow: 1\">${name}</span>\n\t\t\t\t\t\t<input id=\"${colorPickerID}\" style=\"zoom: 0.5\" />\n\t\t\t\t\t</label>\n\t\t\t\t</li>\n\t\t\t`);\n\n\t\t\t\tconst elInput = element.find('input');\n\t\t\t\tconst elColorPicker = element.find(`#${colorPickerID}`);\n\n\t\t\t\telInput.click(event => {\n\t\t\t\t\tthis.viewer.setClassificationVisibility(code, event.target.checked);\n\t\t\t\t});\n\n\t\t\t\tlet defaultColor = classification.color.map(c => c *  255).join(\", \");\n\t\t\t\tdefaultColor = `rgb(${defaultColor})`;\n\n\n\t\t\t\telColorPicker.spectrum({\n\t\t\t\t\t// flat: true,\n\t\t\t\t\tcolor: defaultColor,\n\t\t\t\t\tshowInput: true,\n\t\t\t\t\tpreferredFormat: 'rgb',\n\t\t\t\t\tcancelText: '',\n\t\t\t\t\tchooseText: 'Apply',\n\t\t\t\t\tmove: color => {\n\t\t\t\t\t\tlet rgb = color.toRgb();\n\t\t\t\t\t\tconst c = [rgb.r / 255, rgb.g / 255, rgb.b / 255, 1];\n\t\t\t\t\t\tclassification.color = c;\n\t\t\t\t\t},\n\t\t\t\t\tchange: color => {\n\t\t\t\t\t\tlet rgb = color.toRgb();\n\t\t\t\t\t\tconst c = [rgb.r / 255, rgb.g / 255, rgb.b / 255, 1];\n\t\t\t\t\t\tclassification.color = c;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telClassificationList.append(element);\n\t\t\t};\n\n\t\t\tconst addToggleAllButton = () => { // toggle all button\n\t\t\t\tconst element = $(`\n\t\t\t\t<li>\n\t\t\t\t\t<label style=\"whitespace: nowrap\">\n\t\t\t\t\t\t<input id=\"toggleClassificationFilters\" type=\"checkbox\" checked/>\n\t\t\t\t\t\t<span>show/hide all</span>\n\t\t\t\t\t</label>\n\t\t\t\t</li>\n\t\t\t`);\n\n\t\t\t\tlet elInput = element.find('input');\n\n\t\t\t\telInput.click(event => {\n\t\t\t\t\tthis.viewer.toggleAllClassificationsVisibility();\n\t\t\t\t});\n\n\t\t\t\telClassificationList.append(element);\n\t\t\t};\n\n\t\t\tconst addInvertButton = () => { \n\t\t\t\tconst element = $(`\n\t\t\t\t<li>\n\t\t\t\t\t<input type=\"button\" value=\"invert\" />\n\t\t\t\t</li>\n\t\t\t`);\n\n\t\t\t\tlet elInput = element.find('input');\n\n\t\t\t\telInput.click( () => {\n\t\t\t\t\tconst classifications = this.viewer.classifications;\n\t\t\n\t\t\t\t\tfor(let key of Object.keys(classifications)){\n\t\t\t\t\t\tlet value = classifications[key];\n\t\t\t\t\t\tthis.viewer.setClassificationVisibility(key, !value.visible);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\telClassificationList.append(element);\n\t\t\t};\n\n\t\t\tconst populate = () => {\n\t\t\t\taddToggleAllButton();\n\t\t\t\tfor (let classID in this.viewer.classifications) {\n\t\t\t\t\taddClassificationItem(classID, this.viewer.classifications[classID].name);\n\t\t\t\t}\n\t\t\t\taddInvertButton();\n\t\t\t};\n\n\t\t\tpopulate();\n\n\t\t\tthis.viewer.addEventListener(\"classifications_changed\", () => {\n\t\t\t\telClassificationList.empty();\n\t\t\t\tpopulate();\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener(\"classification_visibility_changed\", () => {\n\n\t\t\t\t{ // set checked state of classification buttons\n\t\t\t\t\tfor(const classID of Object.keys(this.viewer.classifications)){\n\t\t\t\t\t\tconst classValue = this.viewer.classifications[classID];\n\n\t\t\t\t\t\tlet elItem = elClassificationList.find(`#chkClassification_${classID}`);\n\t\t\t\t\t\telItem.prop(\"checked\", classValue.visible);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t{ // set checked state of toggle button based on state of all other buttons\n\t\t\t\t\tlet numVisible = 0;\n\t\t\t\t\tlet numItems = 0;\n\t\t\t\t\tfor(const key of Object.keys(this.viewer.classifications)){\n\t\t\t\t\t\tif(this.viewer.classifications[key].visible){\n\t\t\t\t\t\t\tnumVisible++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnumItems++;\n\t\t\t\t\t}\n\t\t\t\t\tconst allVisible = numVisible === numItems;\n\n\t\t\t\t\tlet elToggle = elClassificationList.find(\"#toggleClassificationFilters\");\n\t\t\t\t\telToggle.prop(\"checked\", allVisible);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tinitAccordion(){\n\t\t\t$('.accordion > h3').each(function(){\n\t\t\t\tlet header = $(this);\n\t\t\t\tlet content = $(this).next();\n\n\t\t\t\t//header.addClass('accordion-header ui-widget');\n\t\t\t\t//content.addClass('accordion-content ui-widget');\n\n\t\t\t\tcontent.hide();\n\n\t\t\t\theader.click(() => {\n\t\t\t\t\tcontent.slideToggle();\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tlet languages = [\n\t\t\t\t[\"EN\", \"en\"],\n\t\t\t\t[\"FR\", \"fr\"],\n\t\t\t\t[\"DE\", \"de\"],\n\t\t\t\t[\"JP\", \"jp\"],\n\t\t\t\t[\"ES\", \"es\"],\n\t\t\t\t[\"SE\", \"se\"],\n\t\t\t\t[\"ZH\", \"zh\"],\n\t\t\t\t[\"IT\", \"it\"]\n\t\t\t];\n\n\t\t\tlet elLanguages = $('#potree_languages');\n\t\t\tfor(let i = 0; i < languages.length; i++){\n\t\t\t\tlet [key, value] = languages[i];\n\t\t\t\tlet element = $(`<a>${key}</a>`);\n\t\t\t\telement.click(() => this.viewer.setLanguage(value));\n\n\t\t\t\tif(i === 0){\n\t\t\t\t\telement.css(\"margin-left\", \"30px\");\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\telLanguages.append(element);\n\n\t\t\t\tif(i < languages.length - 1){\n\t\t\t\t\telLanguages.append($(document.createTextNode(' - ')));\t\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// to close all, call\n\t\t\t// $(\".accordion > div\").hide()\n\n\t\t\t// to open the, for example, tool menu, call:\n\t\t\t// $(\"#menu_tools\").next().show()\n\t\t}\n\n\t\tinitAppearance(){\n\n\t\t\tconst sldPointBudget = this.dom.find('#sldPointBudget');\n\n\t\t\tsldPointBudget.slider({\n\t\t\t\tvalue: this.viewer.getPointBudget(),\n\t\t\t\tmin: 100 * 1000,\n\t\t\t\tmax: 10 * 1000 * 1000,\n\t\t\t\tstep: 1000,\n\t\t\t\tslide: (event, ui) => { this.viewer.setPointBudget(ui.value); }\n\t\t\t});\n\n\t\t\tthis.dom.find('#sldFOV').slider({\n\t\t\t\tvalue: this.viewer.getFOV(),\n\t\t\t\tmin: 20,\n\t\t\t\tmax: 100,\n\t\t\t\tstep: 1,\n\t\t\t\tslide: (event, ui) => { this.viewer.setFOV(ui.value); }\n\t\t\t});\n\n\t\t\t$('#sldEDLRadius').slider({\n\t\t\t\tvalue: this.viewer.getEDLRadius(),\n\t\t\t\tmin: 1,\n\t\t\t\tmax: 4,\n\t\t\t\tstep: 0.01,\n\t\t\t\tslide: (event, ui) => { this.viewer.setEDLRadius(ui.value); }\n\t\t\t});\n\n\t\t\t$('#sldEDLStrength').slider({\n\t\t\t\tvalue: this.viewer.getEDLStrength(),\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 5,\n\t\t\t\tstep: 0.01,\n\t\t\t\tslide: (event, ui) => { this.viewer.setEDLStrength(ui.value); }\n\t\t\t});\n\n\t\t\t$('#sldEDLOpacity').slider({\n\t\t\t\tvalue: this.viewer.getEDLOpacity(),\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1,\n\t\t\t\tstep: 0.01,\n\t\t\t\tslide: (event, ui) => { this.viewer.setEDLOpacity(ui.value); }\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('point_budget_changed', (event) => {\n\t\t\t\t$('#lblPointBudget')[0].innerHTML = Utils.addCommas(this.viewer.getPointBudget());\n\t\t\t\tsldPointBudget.slider({value: this.viewer.getPointBudget()});\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('fov_changed', (event) => {\n\t\t\t\t$('#lblFOV')[0].innerHTML = parseInt(this.viewer.getFOV());\n\t\t\t\t$('#sldFOV').slider({value: this.viewer.getFOV()});\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('use_edl_changed', (event) => {\n\t\t\t\t$('#chkEDLEnabled')[0].checked = this.viewer.getEDLEnabled();\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('edl_radius_changed', (event) => {\n\t\t\t\t$('#lblEDLRadius')[0].innerHTML = this.viewer.getEDLRadius().toFixed(1);\n\t\t\t\t$('#sldEDLRadius').slider({value: this.viewer.getEDLRadius()});\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('edl_strength_changed', (event) => {\n\t\t\t\t$('#lblEDLStrength')[0].innerHTML = this.viewer.getEDLStrength().toFixed(1);\n\t\t\t\t$('#sldEDLStrength').slider({value: this.viewer.getEDLStrength()});\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('background_changed', (event) => {\n\t\t\t\t$(\"input[name=background][value='\" + this.viewer.getBackground() + \"']\").prop('checked', true);\n\t\t\t});\n\n\t\t\t$('#lblPointBudget')[0].innerHTML = Utils.addCommas(this.viewer.getPointBudget());\n\t\t\t$('#lblFOV')[0].innerHTML = parseInt(this.viewer.getFOV());\n\t\t\t$('#lblEDLRadius')[0].innerHTML = this.viewer.getEDLRadius().toFixed(1);\n\t\t\t$('#lblEDLStrength')[0].innerHTML = this.viewer.getEDLStrength().toFixed(1);\n\t\t\t$('#chkEDLEnabled')[0].checked = this.viewer.getEDLEnabled();\n\t\t\t\n\t\t\t{\n\t\t\t\tlet elBackground = $(`#background_options`);\n\t\t\t\telBackground.selectgroup();\n\n\t\t\t\telBackground.find(\"input\").click( (e) => {\n\t\t\t\t\tthis.viewer.setBackground(e.target.value);\n\t\t\t\t});\n\n\t\t\t\tlet currentBackground = this.viewer.getBackground();\n\t\t\t\t$(`input[name=background_options][value=${currentBackground}]`).trigger(\"click\");\n\t\t\t}\n\n\t\t\t$('#chkEDLEnabled').click( () => {\n\t\t\t\tthis.viewer.setEDLEnabled($('#chkEDLEnabled').prop(\"checked\"));\n\t\t\t});\n\t\t}\n\n\t\tinitNavigation(){\n\t\t\tlet elNavigation = $('#navigation');\n\t\t\tlet sldMoveSpeed = $('#sldMoveSpeed');\n\t\t\tlet lblMoveSpeed = $('#lblMoveSpeed');\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/earth_controls_1.png',\n\t\t\t\t'[title]tt.earth_control',\n\t\t\t\t() => { this.viewer.setControls(this.viewer.earthControls); }\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/fps_controls.svg',\n\t\t\t\t'[title]tt.flight_control',\n\t\t\t\t() => {\n\t\t\t\t\tthis.viewer.setControls(this.viewer.fpControls);\n\t\t\t\t\tthis.viewer.fpControls.lockElevation = false;\n\t\t\t\t}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/helicopter_controls.svg',\n\t\t\t\t'[title]tt.heli_control',\n\t\t\t\t() => { \n\t\t\t\t\tthis.viewer.setControls(this.viewer.fpControls);\n\t\t\t\t\tthis.viewer.fpControls.lockElevation = true;\n\t\t\t\t}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/orbit_controls.svg',\n\t\t\t\t'[title]tt.orbit_control',\n\t\t\t\t() => { this.viewer.setControls(this.viewer.orbitControls); }\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + '/icons/focus.svg',\n\t\t\t\t'[title]tt.focus_control',\n\t\t\t\t() => { this.viewer.fitToScreen(); }\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/navigation_cube.svg\",\n\t\t\t\t\"[title]tt.navigation_cube_control\",\n\t\t\t\t() => {this.viewer.toggleNavigationCube();}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/images/compas.svg\",\n\t\t\t\t\"[title]tt.compass\",\n\t\t\t\t() => {\n\t\t\t\t\tconst visible = !this.viewer.compass.isVisible();\n\t\t\t\t\tthis.viewer.compass.setVisible(visible);\n\t\t\t\t}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/camera_animation.svg\",\n\t\t\t\t\"[title]tt.camera_animation\",\n\t\t\t\t() => {\n\t\t\t\t\tconst animation = CameraAnimation.defaultFromView(this.viewer);\n\n\t\t\t\t\tviewer.scene.addCameraAnimation(animation);\n\t\t\t\t}\n\t\t\t));\n\n\n\t\t\telNavigation.append(\"<br>\");\n\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/left.svg\",\n\t\t\t\t\"[title]tt.left_view_control\",\n\t\t\t\t() => {this.viewer.setLeftView();}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/right.svg\",\n\t\t\t\t\"[title]tt.right_view_control\",\n\t\t\t\t() => {this.viewer.setRightView();}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/front.svg\",\n\t\t\t\t\"[title]tt.front_view_control\",\n\t\t\t\t() => {this.viewer.setFrontView();}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/back.svg\",\n\t\t\t\t\"[title]tt.back_view_control\",\n\t\t\t\t() => {this.viewer.setBackView();}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/top.svg\",\n\t\t\t\t\"[title]tt.top_view_control\",\n\t\t\t\t() => {this.viewer.setTopView();}\n\t\t\t));\n\n\t\t\telNavigation.append(this.createToolIcon(\n\t\t\t\tPotree.resourcePath + \"/icons/bottom.svg\",\n\t\t\t\t\"[title]tt.bottom_view_control\",\n\t\t\t\t() => {this.viewer.setBottomView();}\n\t\t\t));\n\n\n\n\n\n\t\t\tlet elCameraProjection = $(`\n\t\t\t<selectgroup id=\"camera_projection_options\">\n\t\t\t\t<option id=\"camera_projection_options_perspective\" value=\"PERSPECTIVE\">Perspective</option>\n\t\t\t\t<option id=\"camera_projection_options_orthigraphic\" value=\"ORTHOGRAPHIC\">Orthographic</option>\n\t\t\t</selectgroup>\n\t\t`);\n\t\t\telNavigation.append(elCameraProjection);\n\t\t\telCameraProjection.selectgroup({title: \"Camera Projection\"});\n\t\t\telCameraProjection.find(\"input\").click( (e) => {\n\t\t\t\tthis.viewer.setCameraMode(CameraMode[e.target.value]);\n\t\t\t});\n\t\t\tlet cameraMode = Object.keys(CameraMode)\n\t\t\t\t.filter(key => CameraMode[key] === this.viewer.scene.cameraMode);\n\t\t\telCameraProjection.find(`input[value=${cameraMode}]`).trigger(\"click\");\n\n\t\t\tlet speedRange = new Vector2(1, 10 * 1000);\n\n\t\t\tlet toLinearSpeed = (value) => {\n\t\t\t\treturn Math.pow(value, 4) * speedRange.y + speedRange.x;\n\t\t\t};\n\n\t\t\tlet toExpSpeed = (value) => {\n\t\t\t\treturn Math.pow((value - speedRange.x) / speedRange.y, 1 / 4);\n\t\t\t};\n\n\t\t\tsldMoveSpeed.slider({\n\t\t\t\tvalue: toExpSpeed(this.viewer.getMoveSpeed()),\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1,\n\t\t\t\tstep: 0.01,\n\t\t\t\tslide: (event, ui) => { this.viewer.setMoveSpeed(toLinearSpeed(ui.value)); }\n\t\t\t});\n\n\t\t\tthis.viewer.addEventListener('move_speed_changed', (event) => {\n\t\t\t\tlblMoveSpeed.html(this.viewer.getMoveSpeed().toFixed(1));\n\t\t\t\tsldMoveSpeed.slider({value: toExpSpeed(this.viewer.getMoveSpeed())});\n\t\t\t});\n\n\t\t\tlblMoveSpeed.html(this.viewer.getMoveSpeed().toFixed(1));\n\t\t}\n\n\n\t\tinitSettings(){\n\n\t\t\t{\n\t\t\t\t$('#sldMinNodeSize').slider({\n\t\t\t\t\tvalue: this.viewer.getMinNodeSize(),\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 1000,\n\t\t\t\t\tstep: 0.01,\n\t\t\t\t\tslide: (event, ui) => { this.viewer.setMinNodeSize(ui.value); }\n\t\t\t\t});\n\n\t\t\t\tthis.viewer.addEventListener('minnodesize_changed', (event) => {\n\t\t\t\t\t$('#lblMinNodeSize').html(parseInt(this.viewer.getMinNodeSize()));\n\t\t\t\t\t$('#sldMinNodeSize').slider({value: this.viewer.getMinNodeSize()});\n\t\t\t\t});\n\t\t\t\t$('#lblMinNodeSize').html(parseInt(this.viewer.getMinNodeSize()));\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet elSplatQuality = $(\"#splat_quality_options\");\n\t\t\t\telSplatQuality.selectgroup({title: \"Splat Quality\"});\n\n\t\t\t\telSplatQuality.find(\"input\").click( (e) => {\n\t\t\t\t\tif(e.target.value === \"standard\"){\n\t\t\t\t\t\tthis.viewer.useHQ = false;\n\t\t\t\t\t}else if(e.target.value === \"hq\"){\n\t\t\t\t\t\tthis.viewer.useHQ = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tlet currentQuality = this.viewer.useHQ ? \"hq\" : \"standard\";\n\t\t\t\telSplatQuality.find(`input[value=${currentQuality}]`).trigger(\"click\");\n\t\t\t}\n\n\t\t\t$('#show_bounding_box').click(() => {\n\t\t\t\tthis.viewer.setShowBoundingBox($('#show_bounding_box').prop(\"checked\"));\n\t\t\t});\n\n\t\t\t$('#set_freeze').click(() => {\n\t\t\t\tthis.viewer.setFreeze($('#set_freeze').prop(\"checked\"));\n\t\t\t});\n\t\t}\n\n\t}\n\n\tclass AnnotationTool extends EventDispatcher{\n\t\tconstructor (viewer) {\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.sg = new SphereGeometry(0.1);\n\t\t\tthis.sm = new MeshNormalMaterial();\n\t\t\tthis.s = new Mesh(this.sg, this.sm);\n\t\t}\n\n\t\tstartInsertion (args = {}) {\n\t\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\t\tlet annotation = new Annotation({\n\t\t\t\tposition: [589748.270, 231444.540, 753.675],\n\t\t\t\ttitle: \"Annotation Title\",\n\t\t\t\tdescription: `Annotation Description`\n\t\t\t});\n\t\t\tthis.dispatchEvent({type: 'start_inserting_annotation', annotation: annotation});\n\n\t\t\tconst annotations = this.viewer.scene.annotations;\n\t\t\tannotations.add(annotation);\n\n\t\t\tlet callbacks = {\n\t\t\t\tcancel: null,\n\t\t\t\tfinish: null,\n\t\t\t};\n\n\t\t\tlet insertionCallback = (e) => {\n\t\t\t\tif (e.button === MOUSE.LEFT) {\n\t\t\t\t\tcallbacks.finish();\n\t\t\t\t} else if (e.button === MOUSE.RIGHT) {\n\t\t\t\t\tcallbacks.cancel();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tcallbacks.cancel = e => {\n\t\t\t\tannotations.remove(annotation);\n\n\t\t\t\tdomElement.removeEventListener('mouseup', insertionCallback, true);\n\t\t\t};\n\n\t\t\tcallbacks.finish = e => {\n\t\t\t\tdomElement.removeEventListener('mouseup', insertionCallback, true);\n\t\t\t};\n\n\t\t\tdomElement.addEventListener('mouseup', insertionCallback, true);\n\n\t\t\tlet drag = (e) => {\n\t\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\t\te.drag.end, \n\t\t\t\t\te.viewer.scene.getActiveCamera(), \n\t\t\t\t\te.viewer, \n\t\t\t\t\te.viewer.scene.pointclouds,\n\t\t\t\t\t{pickClipped: true});\n\n\t\t\t\tif (I) {\n\t\t\t\t\tthis.s.position.copy(I.location);\n\n\t\t\t\t\tannotation.position.copy(I.location);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet drop = (e) => {\n\t\t\t\tviewer.scene.scene.remove(this.s);\n\t\t\t\tthis.s.removeEventListener(\"drag\", drag);\n\t\t\t\tthis.s.removeEventListener(\"drop\", drop);\n\t\t\t};\n\n\t\t\tthis.s.addEventListener('drag', drag);\n\t\t\tthis.s.addEventListener('drop', drop);\n\n\t\t\tthis.viewer.scene.scene.add(this.s);\n\t\t\tthis.viewer.inputHandler.startDragging(this.s);\n\n\t\t\treturn annotation;\n\t\t}\n\t\t\n\t\tupdate(){\n\t\t\t// let camera = this.viewer.scene.getActiveCamera();\n\t\t\t// let domElement = this.renderer.domElement;\n\t\t\t// let measurements = this.viewer.scene.measurements;\n\n\t\t\t// const renderAreaSize = this.renderer.getSize(new THREE.Vector2());\n\t\t\t// let clientWidth = renderAreaSize.width;\n\t\t\t// let clientHeight = renderAreaSize.height;\n\n\t\t}\n\n\t\trender(){\n\t\t\t//this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera());\n\t\t}\n\t};\n\n\t/**\n\t * @author mschuetz / http://mschuetz.at\n\t *\n\t *\n\t */\n\n\tclass InputHandler extends EventDispatcher {\n\t\tconstructor (viewer) {\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\t\t\tthis.domElement = this.renderer.domElement;\n\t\t\tthis.enabled = true;\n\t\t\t\n\t\t\tthis.scene = null;\n\t\t\tthis.interactiveScenes = [];\n\t\t\tthis.interactiveObjects = new Set();\n\t\t\tthis.inputListeners = [];\n\t\t\tthis.blacklist = new Set();\n\n\t\t\tthis.drag = null;\n\t\t\tthis.mouse = new Vector2(0, 0);\n\n\t\t\tthis.selection = [];\n\n\t\t\tthis.hoveredElements = [];\n\t\t\tthis.pressedKeys = {};\n\n\t\t\tthis.wheelDelta = 0;\n\n\t\t\tthis.speed = 1;\n\n\t\t\tthis.logMessages = false;\n\n\t\t\tif (this.domElement.tabIndex === -1) {\n\t\t\t\tthis.domElement.tabIndex = 2222;\n\t\t\t}\n\n\t\t\tthis.domElement.addEventListener('contextmenu', (event) => { event.preventDefault(); }, false);\n\t\t\tthis.domElement.addEventListener('click', this.onMouseClick.bind(this), false);\n\t\t\tthis.domElement.addEventListener('mousedown', this.onMouseDown.bind(this), false);\n\t\t\tthis.domElement.addEventListener('mouseup', this.onMouseUp.bind(this), false);\n\t\t\tthis.domElement.addEventListener('mousemove', this.onMouseMove.bind(this), false);\n\t\t\tthis.domElement.addEventListener('mousewheel', this.onMouseWheel.bind(this), false);\n\t\t\tthis.domElement.addEventListener('DOMMouseScroll', this.onMouseWheel.bind(this), false); // Firefox\n\t\t\tthis.domElement.addEventListener('dblclick', this.onDoubleClick.bind(this));\n\t\t\tthis.domElement.addEventListener('keydown', this.onKeyDown.bind(this));\n\t\t\tthis.domElement.addEventListener('keyup', this.onKeyUp.bind(this));\n\t\t\tthis.domElement.addEventListener('touchstart', this.onTouchStart.bind(this));\n\t\t\tthis.domElement.addEventListener('touchend', this.onTouchEnd.bind(this));\n\t\t\tthis.domElement.addEventListener('touchmove', this.onTouchMove.bind(this));\n\t\t}\n\n\t\taddInputListener (listener) {\n\t\t\tthis.inputListeners.push(listener);\n\t\t}\n\n\t\tremoveInputListener (listener) {\n\t\t\tthis.inputListeners = this.inputListeners.filter(e => e !== listener);\n\t\t}\n\n\t\tgetSortedListeners(){\n\t\t\treturn this.inputListeners.sort( (a, b) => {\n\t\t\t\tlet ia = (a.importance !== undefined) ? a.importance : 0;\n\t\t\t\tlet ib = (b.importance !== undefined) ? b.importance : 0;\n\n\t\t\t\treturn ib - ia;\n\t\t\t});\n\t\t}\n\n\t\tonTouchStart (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onTouchStart');\n\n\t\t\te.preventDefault();\n\n\t\t\tif (e.touches.length === 1) {\n\t\t\t\tlet rect = this.domElement.getBoundingClientRect();\n\t\t\t\tlet x = e.touches[0].pageX - rect.left;\n\t\t\t\tlet y = e.touches[0].pageY - rect.top;\n\t\t\t\tthis.mouse.set(x, y);\n\n\t\t\t\tthis.startDragging(null);\n\t\t\t}\n\n\t\t\t\n\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\ttouches: e.touches,\n\t\t\t\t\tchangedTouches: e.changedTouches\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tonTouchEnd (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onTouchEnd');\n\n\t\t\te.preventDefault();\n\n\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\ttype: 'drop',\n\t\t\t\t\tdrag: this.drag,\n\t\t\t\t\tviewer: this.viewer\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.drag = null;\n\n\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\ttouches: e.touches,\n\t\t\t\t\tchangedTouches: e.changedTouches\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tonTouchMove (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onTouchMove');\n\n\t\t\te.preventDefault();\n\n\t\t\tif (e.touches.length === 1) {\n\t\t\t\tlet rect = this.domElement.getBoundingClientRect();\n\t\t\t\tlet x = e.touches[0].pageX - rect.left;\n\t\t\t\tlet y = e.touches[0].pageY - rect.top;\n\t\t\t\tthis.mouse.set(x, y);\n\n\t\t\t\tif (this.drag) {\n\t\t\t\t\tthis.drag.mouse = 1;\n\n\t\t\t\t\tthis.drag.lastDrag.x = x - this.drag.end.x;\n\t\t\t\t\tthis.drag.lastDrag.y = y - this.drag.end.y;\n\n\t\t\t\t\tthis.drag.end.set(x, y);\n\n\t\t\t\t\tif (this.logMessages) console.log(this.constructor.name + ': drag: ');\n\t\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\t\t\ttype: 'drag',\n\t\t\t\t\t\t\tdrag: this.drag,\n\t\t\t\t\t\t\tviewer: this.viewer\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\ttype: e.type,\n\t\t\t\t\ttouches: e.touches,\n\t\t\t\t\tchangedTouches: e.changedTouches\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// DEBUG CODE\n\t\t\t// let debugTouches = [...e.touches, {\n\t\t\t//\tpageX: this.domElement.clientWidth / 2,\n\t\t\t//\tpageY: this.domElement.clientHeight / 2}];\n\t\t\t// for(let inputListener of this.getSortedListeners()){\n\t\t\t//\tinputListener.dispatchEvent({\n\t\t\t//\t\ttype: e.type,\n\t\t\t//\t\ttouches: debugTouches,\n\t\t\t//\t\tchangedTouches: e.changedTouches\n\t\t\t//\t});\n\t\t\t// }\n\t\t}\n\n\t\tonKeyDown (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onKeyDown');\n\n\t\t\t// DELETE\n\t\t\tif (e.keyCode === KeyCodes.DELETE && this.selection.length > 0) {\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'delete',\n\t\t\t\t\tselection: this.selection\n\t\t\t\t});\n\n\t\t\t\tthis.deselectAll();\n\t\t\t}\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'keydown',\n\t\t\t\tkeyCode: e.keyCode,\n\t\t\t\tevent: e\n\t\t\t});\n\n\t\t\t// for(let l of this.getSortedListeners()){\n\t\t\t//\tl.dispatchEvent({\n\t\t\t//\t\ttype: \"keydown\",\n\t\t\t//\t\tkeyCode: e.keyCode,\n\t\t\t//\t\tevent: e\n\t\t\t//\t});\n\t\t\t// }\n\n\t\t\tthis.pressedKeys[e.keyCode] = true;\n\n\t\t\t// e.preventDefault();\n\t\t}\n\n\t\tonKeyUp (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onKeyUp');\n\n\t\t\tdelete this.pressedKeys[e.keyCode];\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tonDoubleClick (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onDoubleClick');\n\n\t\t\tlet consumed = false;\n\t\t\tfor (let hovered of this.hoveredElements) {\n\t\t\t\tif (hovered._listeners && hovered._listeners['dblclick']) {\n\t\t\t\t\thovered.object.dispatchEvent({\n\t\t\t\t\t\ttype: 'dblclick',\n\t\t\t\t\t\tmouse: this.mouse,\n\t\t\t\t\t\tobject: hovered.object\n\t\t\t\t\t});\n\t\t\t\t\tconsumed = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!consumed) {\n\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\t\ttype: 'dblclick',\n\t\t\t\t\t\tmouse: this.mouse,\n\t\t\t\t\t\tobject: null\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tonMouseClick (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onMouseClick');\n\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tonMouseDown (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onMouseDown');\n\n\t\t\te.preventDefault();\n\n\t\t\tlet consumed = false;\n\t\t\tlet consume = () => { return consumed = true; };\n\t\t\tif (this.hoveredElements.length === 0) {\n\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\t\ttype: 'mousedown',\n\t\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\t\tmouse: this.mouse\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tfor(let hovered of this.hoveredElements){\n\t\t\t\t\tlet object = hovered.object;\n\t\t\t\t\tobject.dispatchEvent({\n\t\t\t\t\t\ttype: 'mousedown',\n\t\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\t\tconsume: consume\n\t\t\t\t\t});\n\n\t\t\t\t\tif(consumed){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.drag) {\n\t\t\t\tlet target = this.hoveredElements\n\t\t\t\t\t.find(el => (\n\t\t\t\t\t\tel.object._listeners &&\n\t\t\t\t\t\tel.object._listeners['drag'] &&\n\t\t\t\t\t\tel.object._listeners['drag'].length > 0));\n\n\t\t\t\tif (target) {\n\t\t\t\t\tthis.startDragging(target.object, {location: target.point});\n\t\t\t\t} else {\n\t\t\t\t\tthis.startDragging(null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.scene) {\n\t\t\t\tthis.viewStart = this.scene.view.clone();\n\t\t\t}\n\t\t}\n\n\t\tonMouseUp (e) {\n\t\t\tif (this.logMessages) console.log(this.constructor.name + ': onMouseUp');\n\n\t\t\te.preventDefault();\n\n\t\t\tlet noMovement = this.getNormalizedDrag().length() === 0;\n\n\t\t\t\n\t\t\tlet consumed = false;\n\t\t\tlet consume = () => { return consumed = true; };\n\t\t\tif (this.hoveredElements.length === 0) {\n\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\t\ttype: 'mouseup',\n\t\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\t\tmouse: this.mouse,\n\t\t\t\t\t\tconsume: consume\n\t\t\t\t\t});\n\n\t\t\t\t\tif(consumed){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tlet hovered = this.hoveredElements\n\t\t\t\t\t.map(e => e.object)\n\t\t\t\t\t.find(e => (e._listeners && e._listeners['mouseup']));\n\t\t\t\tif(hovered){\n\t\t\t\t\thovered.dispatchEvent({\n\t\t\t\t\t\ttype: 'mouseup',\n\t\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\t\tconsume: consume\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.drag) {\n\t\t\t\tif (this.drag.object) {\n\t\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: drop ${this.drag.object.name}`);\n\t\t\t\t\tthis.drag.object.dispatchEvent({\n\t\t\t\t\t\ttype: 'drop',\n\t\t\t\t\t\tdrag: this.drag,\n\t\t\t\t\t\tviewer: this.viewer\n\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\t\t\ttype: 'drop',\n\t\t\t\t\t\t\tdrag: this.drag,\n\t\t\t\t\t\t\tviewer: this.viewer\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// check for a click\n\t\t\t\tlet clicked = this.hoveredElements.map(h => h.object).find(v => v === this.drag.object) !== undefined;\n\t\t\t\tif(clicked){\n\t\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: click ${this.drag.object.name}`);\n\t\t\t\t\tthis.drag.object.dispatchEvent({\n\t\t\t\t\t\ttype: 'click',\n\t\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\t\tconsume: consume,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.drag = null;\n\t\t\t}\n\n\t\t\tif(!consumed){\n\t\t\t\tif (e.button === MOUSE.LEFT) {\n\t\t\t\t\tif (noMovement) {\n\t\t\t\t\t\tlet selectable = this.hoveredElements\n\t\t\t\t\t\t\t.find(el => el.object._listeners && el.object._listeners['select']);\n\n\t\t\t\t\t\tif (selectable) {\n\t\t\t\t\t\t\tselectable = selectable.object;\n\n\t\t\t\t\t\t\tif (this.isSelected(selectable)) {\n\t\t\t\t\t\t\t\tthis.selection\n\t\t\t\t\t\t\t\t\t.filter(e => e !== selectable)\n\t\t\t\t\t\t\t\t\t.forEach(e => this.toggleSelection(e));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.deselectAll();\n\t\t\t\t\t\t\t\tthis.toggleSelection(selectable);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.deselectAll();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if ((e.button === MOUSE.RIGHT) && noMovement) {\n\t\t\t\t\tthis.deselectAll();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tonMouseMove (e) {\n\t\t\te.preventDefault();\n\n\t\t\tlet rect = this.domElement.getBoundingClientRect();\n\t\t\tlet x = e.clientX - rect.left;\n\t\t\tlet y = e.clientY - rect.top;\n\t\t\tthis.mouse.set(x, y);\n\n\t\t\tlet hoveredElements = this.getHoveredElements();\n\t\t\tif(hoveredElements.length > 0){\n\t\t\t\tlet names = hoveredElements.map(h => h.object.name).join(\", \");\n\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: onMouseMove; hovered: '${names}'`);\n\t\t\t}\n\n\t\t\tif (this.drag) {\n\t\t\t\tthis.drag.mouse = e.buttons;\n\n\t\t\t\tthis.drag.lastDrag.x = x - this.drag.end.x;\n\t\t\t\tthis.drag.lastDrag.y = y - this.drag.end.y;\n\n\t\t\t\tthis.drag.end.set(x, y);\n\n\t\t\t\tif (this.drag.object) {\n\t\t\t\t\tif (this.logMessages) console.log(this.constructor.name + ': drag: ' + this.drag.object.name);\n\t\t\t\t\tthis.drag.object.dispatchEvent({\n\t\t\t\t\t\ttype: 'drag',\n\t\t\t\t\t\tdrag: this.drag,\n\t\t\t\t\t\tviewer: this.viewer\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (this.logMessages) console.log(this.constructor.name + ': drag: ');\n\n\t\t\t\t\tlet dragConsumed = false;\n\t\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\t\t\ttype: 'drag',\n\t\t\t\t\t\t\tdrag: this.drag,\n\t\t\t\t\t\t\tviewer: this.viewer,\n\t\t\t\t\t\t\tconsume: () => {dragConsumed = true;}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif(dragConsumed){\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}else {\n\t\t\t\tlet curr = hoveredElements.map(a => a.object).find(a => true);\n\t\t\t\tlet prev = this.hoveredElements.map(a => a.object).find(a => true);\n\n\t\t\t\tif(curr !== prev){\n\t\t\t\t\tif(curr){\n\t\t\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: mouseover: ${curr.name}`);\n\t\t\t\t\t\tcurr.dispatchEvent({\n\t\t\t\t\t\t\ttype: 'mouseover',\n\t\t\t\t\t\t\tobject: curr,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif(prev){\n\t\t\t\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: mouseleave: ${prev.name}`);\n\t\t\t\t\t\tprev.dispatchEvent({\n\t\t\t\t\t\t\ttype: 'mouseleave',\n\t\t\t\t\t\t\tobject: prev,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(hoveredElements.length > 0){\n\t\t\t\t\tlet object = hoveredElements\n\t\t\t\t\t\t.map(e => e.object)\n\t\t\t\t\t\t.find(e => (e._listeners && e._listeners['mousemove']));\n\t\t\t\t\t\n\t\t\t\t\tif(object){\n\t\t\t\t\t\tobject.dispatchEvent({\n\t\t\t\t\t\t\ttype: 'mousemove',\n\t\t\t\t\t\t\tobject: object\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t\n\t\t\t// for (let inputListener of this.getSortedListeners()) {\n\t\t\t// \tinputListener.dispatchEvent({\n\t\t\t// \t\ttype: 'mousemove',\n\t\t\t// \t\tobject: null\n\t\t\t// \t});\n\t\t\t// }\n\t\t\t\n\n\t\t\tthis.hoveredElements = hoveredElements;\n\t\t}\n\t\t\n\t\tonMouseWheel(e){\n\t\t\tif(!this.enabled) return;\n\n\t\t\tif(this.logMessages) console.log(this.constructor.name + \": onMouseWheel\");\n\t\t\t\n\t\t\te.preventDefault();\n\n\t\t\tlet delta = 0;\n\t\t\tif (e.wheelDelta !== undefined) { // WebKit / Opera / Explorer 9\n\t\t\t\tdelta = e.wheelDelta;\n\t\t\t} else if (e.detail !== undefined) { // Firefox\n\t\t\t\tdelta = -e.detail;\n\t\t\t}\n\n\t\t\tlet ndelta = Math.sign(delta);\n\n\t\t\t// this.wheelDelta += Math.sign(delta);\n\n\t\t\tif (this.hoveredElement) {\n\t\t\t\tthis.hoveredElement.object.dispatchEvent({\n\t\t\t\t\ttype: 'mousewheel',\n\t\t\t\t\tdelta: ndelta,\n\t\t\t\t\tobject: this.hoveredElement.object\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tfor (let inputListener of this.getSortedListeners()) {\n\t\t\t\t\tinputListener.dispatchEvent({\n\t\t\t\t\t\ttype: 'mousewheel',\n\t\t\t\t\t\tdelta: ndelta,\n\t\t\t\t\t\tobject: null\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstartDragging (object, args = null) {\n\n\t\t\tlet name = object ? object.name : \"no name\";\n\t\t\tif (this.logMessages) console.log(`${this.constructor.name}: startDragging: '${name}'`);\n\n\t\t\tthis.drag = {\n\t\t\t\tstart: this.mouse.clone(),\n\t\t\t\tend: this.mouse.clone(),\n\t\t\t\tlastDrag: new Vector2(0, 0),\n\t\t\t\tstartView: this.scene.view.clone(),\n\t\t\t\tobject: object\n\t\t\t};\n\n\t\t\tif (args) {\n\t\t\t\tfor (let key of Object.keys(args)) {\n\t\t\t\t\tthis.drag[key] = args[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tgetMousePointCloudIntersection (mouse) {\n\t\t\treturn Utils.getMousePointCloudIntersection(\n\t\t\t\tthis.mouse, \n\t\t\t\tthis.scene.getActiveCamera(), \n\t\t\t\tthis.viewer, \n\t\t\t\tthis.scene.pointclouds);\n\t\t}\n\n\t\ttoggleSelection (object) {\n\t\t\tlet oldSelection = this.selection;\n\n\t\t\tlet index = this.selection.indexOf(object);\n\n\t\t\tif (index === -1) {\n\t\t\t\tthis.selection.push(object);\n\t\t\t\tobject.dispatchEvent({\n\t\t\t\t\ttype: 'select'\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.selection.splice(index, 1);\n\t\t\t\tobject.dispatchEvent({\n\t\t\t\t\ttype: 'deselect'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'selection_changed',\n\t\t\t\toldSelection: oldSelection,\n\t\t\t\tselection: this.selection\n\t\t\t});\n\t\t}\n\n\t\tdeselect(object){\n\n\t\t\tlet oldSelection = this.selection;\n\n\t\t\tlet index = this.selection.indexOf(object);\n\n\t\t\tif(index >= 0){\n\t\t\t\tthis.selection.splice(index, 1);\n\t\t\t\tobject.dispatchEvent({\n\t\t\t\t\ttype: 'deselect'\n\t\t\t\t});\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'selection_changed',\n\t\t\t\t\toldSelection: oldSelection,\n\t\t\t\t\tselection: this.selection\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tdeselectAll () {\n\t\t\tfor (let object of this.selection) {\n\t\t\t\tobject.dispatchEvent({\n\t\t\t\t\ttype: 'deselect'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet oldSelection = this.selection;\n\n\t\t\tif (this.selection.length > 0) {\n\t\t\t\tthis.selection = [];\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: 'selection_changed',\n\t\t\t\t\toldSelection: oldSelection,\n\t\t\t\t\tselection: this.selection\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tisSelected (object) {\n\t\t\tlet index = this.selection.indexOf(object);\n\n\t\t\treturn index !== -1;\n\t\t}\n\n\t\tregisterInteractiveObject(object){\n\t\t\tthis.interactiveObjects.add(object);\n\t\t}\n\n\t\tremoveInteractiveObject(object){\n\t\t\tthis.interactiveObjects.delete(object);\n\t\t}\n\n\t\tregisterInteractiveScene (scene) {\n\t\t\tlet index = this.interactiveScenes.indexOf(scene);\n\t\t\tif (index === -1) {\n\t\t\t\tthis.interactiveScenes.push(scene);\n\t\t\t}\n\t\t}\n\n\t\tunregisterInteractiveScene (scene) {\n\t\t\tlet index = this.interactiveScenes.indexOf(scene);\n\t\t\tif (index > -1) {\n\t\t\t\tthis.interactiveScenes.splice(index, 1);\n\t\t\t}\n\t\t}\n\n\t\tgetHoveredElement () {\n\t\t\tlet hoveredElements = this.getHoveredElements();\n\t\t\tif (hoveredElements.length > 0) {\n\t\t\t\treturn hoveredElements[0];\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tgetHoveredElements () {\n\t\t\tlet scenes = this.interactiveScenes.concat(this.scene.scene);\n\n\t\t\tlet interactableListeners = ['mouseup', 'mousemove', 'mouseover', 'mouseleave', 'drag', 'drop', 'click', 'select', 'deselect'];\n\t\t\tlet interactables = [];\n\t\t\tfor (let scene of scenes) {\n\t\t\t\tscene.traverseVisible(node => {\n\t\t\t\t\tif (node._listeners && node.visible && !this.blacklist.has(node)) {\n\t\t\t\t\t\tlet hasInteractableListener = interactableListeners.filter((e) => {\n\t\t\t\t\t\t\treturn node._listeners[e] !== undefined;\n\t\t\t\t\t\t}).length > 0;\n\n\t\t\t\t\t\tif (hasInteractableListener) {\n\t\t\t\t\t\t\tinteractables.push(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tlet camera = this.scene.getActiveCamera();\n\t\t\tlet ray = Utils.mouseToRay(this.mouse, camera, this.domElement.clientWidth, this.domElement.clientHeight);\n\t\t\t\n\t\t\tlet raycaster = new Raycaster();\n\t\t\traycaster.ray.set(ray.origin, ray.direction);\n\t\t\traycaster.params.Line.threshold = 0.2;\n\n\t\t\tlet intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), false);\n\n\t\t\treturn intersections;\n\t\t}\n\n\t\tsetScene (scene) {\n\t\t\tthis.deselectAll();\n\n\t\t\tthis.scene = scene;\n\t\t}\n\n\t\tupdate (delta) {\n\n\t\t}\n\n\t\tgetNormalizedDrag () {\n\t\t\tif (!this.drag) {\n\t\t\t\treturn new Vector2(0, 0);\n\t\t\t}\n\n\t\t\tlet diff = new Vector2().subVectors(this.drag.end, this.drag.start);\n\n\t\t\tdiff.x = diff.x / this.domElement.clientWidth;\n\t\t\tdiff.y = diff.y / this.domElement.clientHeight;\n\n\t\t\treturn diff;\n\t\t}\n\n\t\tgetNormalizedLastDrag () {\n\t\t\tif (!this.drag) {\n\t\t\t\treturn new Vector2(0, 0);\n\t\t\t}\n\n\t\t\tlet lastDrag = this.drag.lastDrag.clone();\n\n\t\t\tlastDrag.x = lastDrag.x / this.domElement.clientWidth;\n\t\t\tlastDrag.y = lastDrag.y / this.domElement.clientHeight;\n\n\t\t\treturn lastDrag;\n\t\t}\n\t}\n\n\tclass NavigationCube extends Object3D {\n\n\t\tconstructor(viewer){\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\n\t\t\tlet createPlaneMaterial = (img) => {\n\t\t\t\tlet material = new MeshBasicMaterial( {\n\t\t\t\t\tdepthTest: true, \n\t\t\t\t\tdepthWrite: true,\n\t\t\t\t\tside: DoubleSide\n\t\t\t\t});\n\t\t\t\tnew TextureLoader().load(\n\t\t\t\t\texports.resourcePath + '/textures/navigation/' + img,\n\t\t\t\t\tfunction(texture) {\n\t\t\t\t\t\ttexture.anisotropy = viewer.renderer.capabilities.getMaxAnisotropy();\n\t\t\t\t\t\tmaterial.map = texture;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t\t});\n\t\t\t\treturn material;\n\t\t\t};\n\n\t\t\tlet planeGeometry = new PlaneGeometry(1, 1);\n\n\t\t\tthis.front = new Mesh(planeGeometry, createPlaneMaterial('F.png'));\n\t\t\tthis.front.position.y = -0.5;\n\t\t\tthis.front.rotation.x = Math.PI / 2.0;\n\t\t\tthis.front.updateMatrixWorld();\n\t\t\tthis.front.name = \"F\";\n\t\t\tthis.add(this.front);\n\n\t\t\tthis.back = new Mesh(planeGeometry, createPlaneMaterial('B.png'));\n\t\t\tthis.back.position.y = 0.5;\n\t\t\tthis.back.rotation.x = Math.PI / 2.0;\n\t\t\tthis.back.updateMatrixWorld();\n\t\t\tthis.back.name = \"B\";\n\t\t\tthis.add(this.back);\n\n\t\t\tthis.left = new Mesh(planeGeometry, createPlaneMaterial('L.png'));\n\t\t\tthis.left.position.x = -0.5;\n\t\t\tthis.left.rotation.y = Math.PI / 2.0;\n\t\t\tthis.left.updateMatrixWorld();\n\t\t\tthis.left.name = \"L\";\n\t\t\tthis.add(this.left);\n\n\t\t\tthis.right = new Mesh(planeGeometry, createPlaneMaterial('R.png'));\n\t\t\tthis.right.position.x = 0.5;\n\t\t\tthis.right.rotation.y = Math.PI / 2.0;\n\t\t\tthis.right.updateMatrixWorld();\n\t\t\tthis.right.name = \"R\";\n\t\t\tthis.add(this.right);\n\n\t\t\tthis.bottom = new Mesh(planeGeometry, createPlaneMaterial('D.png'));\n\t\t\tthis.bottom.position.z = -0.5;\n\t\t\tthis.bottom.updateMatrixWorld();\n\t\t\tthis.bottom.name = \"D\";\n\t\t\tthis.add(this.bottom);\n\n\t\t\tthis.top = new Mesh(planeGeometry, createPlaneMaterial('U.png'));\n\t\t\tthis.top.position.z = 0.5;\n\t\t\tthis.top.updateMatrixWorld();\n\t\t\tthis.top.name = \"U\";\n\t\t\tthis.add(this.top);\n\n\t\t\tthis.width = 150; // in px\n\n\t\t\tthis.camera = new OrthographicCamera(-1, 1, 1, -1, -1, 1);\n\t\t\tthis.camera.position.copy(new Vector3(0, 0, 0));\n\t\t\tthis.camera.lookAt(new Vector3(0, 1, 0));\n\t\t\tthis.camera.updateMatrixWorld();\n\t\t\tthis.camera.rotation.order = \"ZXY\";\n\n\t\t\tlet onMouseDown = (event) => {\n\t\t\t\tif (!this.visible) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.pickedFace = null;\n\t\t\t\tlet mouse = new Vector2();\n\t\t\t\tmouse.x = event.clientX - (window.innerWidth - this.width);\n\t\t\t\tmouse.y = event.clientY;\n\n\t\t\t\tif(mouse.x < 0 || mouse.y > this.width) return;\n\n\t\t\t\tmouse.x = (mouse.x / this.width) * 2 - 1;\n\t\t\t\tmouse.y = -(mouse.y / this.width) * 2 + 1;\n\n\t\t\t\tlet raycaster = new Raycaster();\n\t\t\t\traycaster.setFromCamera(mouse, this.camera);\n\t\t\t\traycaster.ray.origin.sub(this.camera.getWorldDirection(new Vector3()));\n\n\t\t\t\tlet intersects = raycaster.intersectObjects(this.children);\n\n\t\t\t\tlet minDistance = 1000;\n\t\t\t\tfor (let i = 0; i < intersects.length; i++) {\n\t\t\t\t\tif(intersects[i].distance < minDistance) {\n\t\t\t\t\t\tthis.pickedFace = intersects[i].object.name;\n\t\t\t\t\t\tminDistance = intersects[i].distance;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(this.pickedFace) {\n\t\t\t\t\tthis.viewer.setView(this.pickedFace);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.viewer.renderer.domElement.addEventListener('mousedown', onMouseDown, false);\n\t\t}\n\n\t\tupdate(rotation) {\n\t\t\tthis.camera.rotation.copy(rotation);\n\t\t\tthis.camera.updateMatrixWorld();\n\t\t}\n\n\t}\n\n\t/**\n\t * @author mschuetz / http://mschuetz.at\n\t *\n\t * adapted from THREE.OrbitControls by\n\t *\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t *\n\t *\n\t *\n\t */\n\n\t \n\tclass OrbitControls extends EventDispatcher{\n\t\t\n\t\tconstructor(viewer){\n\t\t\tsuper();\n\t\t\t\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.scene = null;\n\t\t\tthis.sceneControls = new Scene();\n\n\t\t\tthis.rotationSpeed = 5;\n\n\t\t\tthis.fadeFactor = 20;\n\t\t\tthis.yawDelta = 0;\n\t\t\tthis.pitchDelta = 0;\n\t\t\tthis.panDelta = new Vector2(0, 0);\n\t\t\tthis.radiusDelta = 0;\n\n\t\t\tthis.doubleClockZoomEnabled = true;\n\n\t\t\tthis.tweens = [];\n\n\t\t\tlet drag = (e) => {\n\t\t\t\tif (e.drag.object !== null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (e.drag.startHandled === undefined) {\n\t\t\t\t\te.drag.startHandled = true;\n\n\t\t\t\t\tthis.dispatchEvent({type: 'start'});\n\t\t\t\t}\n\n\t\t\t\tlet ndrag = {\n\t\t\t\t\tx: e.drag.lastDrag.x / this.renderer.domElement.clientWidth,\n\t\t\t\t\ty: e.drag.lastDrag.y / this.renderer.domElement.clientHeight\n\t\t\t\t};\n\n\t\t\t\tif (e.drag.mouse === MOUSE$1.LEFT) {\n\t\t\t\t\tthis.yawDelta += ndrag.x * this.rotationSpeed;\n\t\t\t\t\tthis.pitchDelta += ndrag.y * this.rotationSpeed;\n\n\t\t\t\t\tthis.stopTweens();\n\t\t\t\t} else if (e.drag.mouse === MOUSE$1.RIGHT) {\n\t\t\t\t\tthis.panDelta.x += ndrag.x;\n\t\t\t\t\tthis.panDelta.y += ndrag.y;\n\n\t\t\t\t\tthis.stopTweens();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet drop = e => {\n\t\t\t\tthis.dispatchEvent({type: 'end'});\n\t\t\t};\n\n\t\t\tlet scroll = (e) => {\n\t\t\t\tlet resolvedRadius = this.scene.view.radius + this.radiusDelta;\n\n\t\t\t\tthis.radiusDelta += -e.delta * resolvedRadius * 0.1;\n\n\t\t\t\tthis.stopTweens();\n\t\t\t};\n\n\t\t\tlet dblclick = (e) => {\n\t\t\t\tif(this.doubleClockZoomEnabled){\n\t\t\t\t\tthis.zoomToLocation(e.mouse);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet previousTouch = null;\n\t\t\tlet touchStart = e => {\n\t\t\t\tpreviousTouch = e;\n\t\t\t};\n\n\t\t\tlet touchEnd = e => {\n\t\t\t\tpreviousTouch = e;\n\t\t\t};\n\n\t\t\tlet touchMove = e => {\n\t\t\t\tif (e.touches.length === 2 && previousTouch.touches.length === 2){\n\t\t\t\t\tlet prev = previousTouch;\n\t\t\t\t\tlet curr = e;\n\n\t\t\t\t\tlet prevDX = prev.touches[0].pageX - prev.touches[1].pageX;\n\t\t\t\t\tlet prevDY = prev.touches[0].pageY - prev.touches[1].pageY;\n\t\t\t\t\tlet prevDist = Math.sqrt(prevDX * prevDX + prevDY * prevDY);\n\n\t\t\t\t\tlet currDX = curr.touches[0].pageX - curr.touches[1].pageX;\n\t\t\t\t\tlet currDY = curr.touches[0].pageY - curr.touches[1].pageY;\n\t\t\t\t\tlet currDist = Math.sqrt(currDX * currDX + currDY * currDY);\n\n\t\t\t\t\tlet delta = currDist / prevDist;\n\t\t\t\t\tlet resolvedRadius = this.scene.view.radius + this.radiusDelta;\n\t\t\t\t\tlet newRadius = resolvedRadius / delta;\n\t\t\t\t\tthis.radiusDelta = newRadius - resolvedRadius;\n\n\t\t\t\t\tthis.stopTweens();\n\t\t\t\t}else if(e.touches.length === 3 && previousTouch.touches.length === 3){\n\t\t\t\t\tlet prev = previousTouch;\n\t\t\t\t\tlet curr = e;\n\n\t\t\t\t\tlet prevMeanX = (prev.touches[0].pageX + prev.touches[1].pageX + prev.touches[2].pageX) / 3;\n\t\t\t\t\tlet prevMeanY = (prev.touches[0].pageY + prev.touches[1].pageY + prev.touches[2].pageY) / 3;\n\n\t\t\t\t\tlet currMeanX = (curr.touches[0].pageX + curr.touches[1].pageX + curr.touches[2].pageX) / 3;\n\t\t\t\t\tlet currMeanY = (curr.touches[0].pageY + curr.touches[1].pageY + curr.touches[2].pageY) / 3;\n\n\t\t\t\t\tlet delta = {\n\t\t\t\t\t\tx: (currMeanX - prevMeanX) / this.renderer.domElement.clientWidth,\n\t\t\t\t\t\ty: (currMeanY - prevMeanY) / this.renderer.domElement.clientHeight\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.panDelta.x += delta.x;\n\t\t\t\t\tthis.panDelta.y += delta.y;\n\n\t\t\t\t\tthis.stopTweens();\n\t\t\t\t}\n\n\t\t\t\tpreviousTouch = e;\n\t\t\t};\n\n\t\t\tthis.addEventListener('touchstart', touchStart);\n\t\t\tthis.addEventListener('touchend', touchEnd);\n\t\t\tthis.addEventListener('touchmove', touchMove);\n\t\t\tthis.addEventListener('drag', drag);\n\t\t\tthis.addEventListener('drop', drop);\n\t\t\tthis.addEventListener('mousewheel', scroll);\n\t\t\tthis.addEventListener('dblclick', dblclick);\n\t\t}\n\n\t\tsetScene (scene) {\n\t\t\tthis.scene = scene;\n\t\t}\n\n\t\tstop(){\n\t\t\tthis.yawDelta = 0;\n\t\t\tthis.pitchDelta = 0;\n\t\t\tthis.radiusDelta = 0;\n\t\t\tthis.panDelta.set(0, 0);\n\t\t}\n\t\t\n\t\tzoomToLocation(mouse){\n\t\t\tlet camera = this.scene.getActiveCamera();\n\t\t\t\n\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\tmouse,\n\t\t\t\tcamera,\n\t\t\t\tthis.viewer,\n\t\t\t\tthis.scene.pointclouds,\n\t\t\t\t{pickClipped: true});\n\n\t\t\tif (I === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet targetRadius = 0;\n\t\t\t{\n\t\t\t\tlet minimumJumpDistance = 0.2;\n\n\t\t\t\tlet domElement = this.renderer.domElement;\n\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\n\t\t\t\tlet nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray);\n\t\t\t\tlet lastNode = nodes[nodes.length - 1];\n\t\t\t\tlet radius = lastNode.getBoundingSphere(new Sphere()).radius;\n\t\t\t\ttargetRadius = Math.min(this.scene.view.radius, radius);\n\t\t\t\ttargetRadius = Math.max(minimumJumpDistance, targetRadius);\n\t\t\t}\n\n\t\t\tlet d = this.scene.view.direction.multiplyScalar(-1);\n\t\t\tlet cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius));\n\t\t\t// TODO Unused: let controlsTargetPosition = I.location;\n\n\t\t\tlet animationDuration = 600;\n\t\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t\t{ // animate\n\t\t\t\tlet value = {x: 0};\n\t\t\t\tlet tween = new TWEEN.Tween(value).to({x: 1}, animationDuration);\n\t\t\t\ttween.easing(easing);\n\t\t\t\tthis.tweens.push(tween);\n\n\t\t\t\tlet startPos = this.scene.view.position.clone();\n\t\t\t\tlet targetPos = cameraTargetPosition.clone();\n\t\t\t\tlet startRadius = this.scene.view.radius;\n\t\t\t\tlet targetRadius = cameraTargetPosition.distanceTo(I.location);\n\n\t\t\t\ttween.onUpdate(() => {\n\t\t\t\t\tlet t = value.x;\n\t\t\t\t\tthis.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x;\n\t\t\t\t\tthis.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y;\n\t\t\t\t\tthis.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z;\n\n\t\t\t\t\tthis.scene.view.radius = (1 - t) * startRadius + t * targetRadius;\n\t\t\t\t\tthis.viewer.setMoveSpeed(this.scene.view.radius);\n\t\t\t\t});\n\n\t\t\t\ttween.onComplete(() => {\n\t\t\t\t\tthis.tweens = this.tweens.filter(e => e !== tween);\n\t\t\t\t});\n\n\t\t\t\ttween.start();\n\t\t\t}\n\t\t}\n\n\t\tstopTweens () {\n\t\t\tthis.tweens.forEach(e => e.stop());\n\t\t\tthis.tweens = [];\n\t\t}\n\n\t\tupdate (delta) {\n\t\t\tlet view = this.scene.view;\n\n\t\t\t{ // apply rotation\n\t\t\t\tlet progression = Math.min(1, this.fadeFactor * delta);\n\n\t\t\t\tlet yaw = view.yaw;\n\t\t\t\tlet pitch = view.pitch;\n\t\t\t\tlet pivot = view.getPivot();\n\n\t\t\t\tyaw -= progression * this.yawDelta;\n\t\t\t\tpitch -= progression * this.pitchDelta;\n\n\t\t\t\tview.yaw = yaw;\n\t\t\t\tview.pitch = pitch;\n\n\t\t\t\tlet V = this.scene.view.direction.multiplyScalar(-view.radius);\n\t\t\t\tlet position = new Vector3().addVectors(pivot, V);\n\n\t\t\t\tview.position.copy(position);\n\t\t\t}\n\n\t\t\t{ // apply pan\n\t\t\t\tlet progression = Math.min(1, this.fadeFactor * delta);\n\t\t\t\tlet panDistance = progression * view.radius * 3;\n\n\t\t\t\tlet px = -this.panDelta.x * panDistance;\n\t\t\t\tlet py = this.panDelta.y * panDistance;\n\n\t\t\t\tview.pan(px, py);\n\t\t\t}\n\n\t\t\t{ // apply zoom\n\t\t\t\tlet progression = Math.min(1, this.fadeFactor * delta);\n\n\t\t\t\t// let radius = view.radius + progression * this.radiusDelta * view.radius * 0.1;\n\t\t\t\tlet radius = view.radius + progression * this.radiusDelta;\n\n\t\t\t\tlet V = view.direction.multiplyScalar(-radius);\n\t\t\t\tlet position = new Vector3().addVectors(view.getPivot(), V);\n\t\t\t\tview.radius = radius;\n\n\t\t\t\tview.position.copy(position);\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet speed = view.radius;\n\t\t\t\tthis.viewer.setMoveSpeed(speed);\n\t\t\t}\n\n\t\t\t{ // decelerate over time\n\t\t\t\tlet progression = Math.min(1, this.fadeFactor * delta);\n\t\t\t\tlet attenuation = Math.max(0, 1 - this.fadeFactor * delta);\n\n\t\t\t\tthis.yawDelta *= attenuation;\n\t\t\t\tthis.pitchDelta *= attenuation;\n\t\t\t\tthis.panDelta.multiplyScalar(attenuation);\n\t\t\t\t// this.radiusDelta *= attenuation;\n\t\t\t\tthis.radiusDelta -= progression * this.radiusDelta;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @author mschuetz / http://mschuetz.at\n\t *\n\t * adapted from THREE.OrbitControls by\n\t *\n\t * @author qiao / https://github.com/qiao\n\t * @author mrdoob / http://mrdoob.com\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author erich666 / http://erichaines.com\n\t *\n\t *\n\t *\n\t */\n\n\n\tclass FirstPersonControls extends EventDispatcher {\n\t\tconstructor (viewer) {\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.scene = null;\n\t\t\tthis.sceneControls = new Scene();\n\n\t\t\tthis.rotationSpeed = 200;\n\t\t\tthis.moveSpeed = 10;\n\t\t\tthis.lockElevation = false;\n\n\t\t\tthis.keys = {\n\t\t\t\tFORWARD: ['W'.charCodeAt(0), 38],\n\t\t\t\tBACKWARD: ['S'.charCodeAt(0), 40],\n\t\t\t\tLEFT: ['A'.charCodeAt(0), 37],\n\t\t\t\tRIGHT: ['D'.charCodeAt(0), 39],\n\t\t\t\tUP: ['R'.charCodeAt(0), 33],\n\t\t\t\tDOWN: ['F'.charCodeAt(0), 34]\n\t\t\t};\n\n\t\t\tthis.fadeFactor = 50;\n\t\t\tthis.yawDelta = 0;\n\t\t\tthis.pitchDelta = 0;\n\t\t\tthis.translationDelta = new Vector3(0, 0, 0);\n\t\t\tthis.translationWorldDelta = new Vector3(0, 0, 0);\n\n\t\t\tthis.tweens = [];\n\n\t\t\tlet drag = (e) => {\n\t\t\t\tif (e.drag.object !== null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (e.drag.startHandled === undefined) {\n\t\t\t\t\te.drag.startHandled = true;\n\n\t\t\t\t\tthis.dispatchEvent({type: 'start'});\n\t\t\t\t}\n\n\t\t\t\tlet moveSpeed = this.viewer.getMoveSpeed();\n\n\t\t\t\tlet ndrag = {\n\t\t\t\t\tx: e.drag.lastDrag.x / this.renderer.domElement.clientWidth,\n\t\t\t\t\ty: e.drag.lastDrag.y / this.renderer.domElement.clientHeight\n\t\t\t\t};\n\n\t\t\t\tif (e.drag.mouse === MOUSE$1.LEFT) {\n\t\t\t\t\tthis.yawDelta += ndrag.x * this.rotationSpeed;\n\t\t\t\t\tthis.pitchDelta += ndrag.y * this.rotationSpeed;\n\t\t\t\t} else if (e.drag.mouse === MOUSE$1.RIGHT) {\n\t\t\t\t\tthis.translationDelta.x -= ndrag.x * moveSpeed * 100;\n\t\t\t\t\tthis.translationDelta.z += ndrag.y * moveSpeed * 100;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet drop = e => {\n\t\t\t\tthis.dispatchEvent({type: 'end'});\n\t\t\t};\n\n\t\t\tlet scroll = (e) => {\n\t\t\t\tlet speed = this.viewer.getMoveSpeed();\n\n\t\t\t\tif (e.delta < 0) {\n\t\t\t\t\tspeed = speed * 0.9;\n\t\t\t\t} else if (e.delta > 0) {\n\t\t\t\t\tspeed = speed / 0.9;\n\t\t\t\t}\n\n\t\t\t\tspeed = Math.max(speed, 0.1);\n\n\t\t\t\tthis.viewer.setMoveSpeed(speed);\n\t\t\t};\n\n\t\t\tlet dblclick = (e) => {\n\t\t\t\tthis.zoomToLocation(e.mouse);\n\t\t\t};\n\n\t\t\tthis.addEventListener('drag', drag);\n\t\t\tthis.addEventListener('drop', drop);\n\t\t\tthis.addEventListener('mousewheel', scroll);\n\t\t\tthis.addEventListener('dblclick', dblclick);\n\t\t}\n\n\t\tsetScene (scene) {\n\t\t\tthis.scene = scene;\n\t\t}\n\n\t\tstop(){\n\t\t\tthis.yawDelta = 0;\n\t\t\tthis.pitchDelta = 0;\n\t\t\tthis.translationDelta.set(0, 0, 0);\n\t\t}\n\t\t\n\t\tzoomToLocation(mouse){\n\t\t\tlet camera = this.scene.getActiveCamera();\n\t\t\t\n\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\tmouse,\n\t\t\t\tcamera,\n\t\t\t\tthis.viewer,\n\t\t\t\tthis.scene.pointclouds);\n\n\t\t\tif (I === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet targetRadius = 0;\n\t\t\t{\n\t\t\t\tlet minimumJumpDistance = 0.2;\n\n\t\t\t\tlet domElement = this.renderer.domElement;\n\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\n\t\t\t\tlet nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray);\n\t\t\t\tlet lastNode = nodes[nodes.length - 1];\n\t\t\t\tlet radius = lastNode.getBoundingSphere(new Sphere()).radius;\n\t\t\t\ttargetRadius = Math.min(this.scene.view.radius, radius);\n\t\t\t\ttargetRadius = Math.max(minimumJumpDistance, targetRadius);\n\t\t\t}\n\n\t\t\tlet d = this.scene.view.direction.multiplyScalar(-1);\n\t\t\tlet cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius));\n\t\t\t// TODO Unused: let controlsTargetPosition = I.location;\n\n\t\t\tlet animationDuration = 600;\n\t\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t\t{ // animate\n\t\t\t\tlet value = {x: 0};\n\t\t\t\tlet tween = new TWEEN.Tween(value).to({x: 1}, animationDuration);\n\t\t\t\ttween.easing(easing);\n\t\t\t\tthis.tweens.push(tween);\n\n\t\t\t\tlet startPos = this.scene.view.position.clone();\n\t\t\t\tlet targetPos = cameraTargetPosition.clone();\n\t\t\t\tlet startRadius = this.scene.view.radius;\n\t\t\t\tlet targetRadius = cameraTargetPosition.distanceTo(I.location);\n\n\t\t\t\ttween.onUpdate(() => {\n\t\t\t\t\tlet t = value.x;\n\t\t\t\t\tthis.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x;\n\t\t\t\t\tthis.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y;\n\t\t\t\t\tthis.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z;\n\n\t\t\t\t\tthis.scene.view.radius = (1 - t) * startRadius + t * targetRadius;\n\t\t\t\t\tthis.viewer.setMoveSpeed(this.scene.view.radius / 2.5);\n\t\t\t\t});\n\n\t\t\t\ttween.onComplete(() => {\n\t\t\t\t\tthis.tweens = this.tweens.filter(e => e !== tween);\n\t\t\t\t});\n\n\t\t\t\ttween.start();\n\t\t\t}\n\t\t}\n\n\t\tupdate (delta) {\n\t\t\tlet view = this.scene.view;\n\n\t\t\t{ // cancel move animations on user input\n\t\t\t\tlet changes = [ this.yawDelta,\n\t\t\t\t\tthis.pitchDelta,\n\t\t\t\t\tthis.translationDelta.length(),\n\t\t\t\t\tthis.translationWorldDelta.length() ];\n\t\t\t\tlet changeHappens = changes.some(e => Math.abs(e) > 0.001);\n\t\t\t\tif (changeHappens && this.tweens.length > 0) {\n\t\t\t\t\tthis.tweens.forEach(e => e.stop());\n\t\t\t\t\tthis.tweens = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // accelerate while input is given\n\t\t\t\tlet ih = this.viewer.inputHandler;\n\n\t\t\t\tlet moveForward = this.keys.FORWARD.some(e => ih.pressedKeys[e]);\n\t\t\t\tlet moveBackward = this.keys.BACKWARD.some(e => ih.pressedKeys[e]);\n\t\t\t\tlet moveLeft = this.keys.LEFT.some(e => ih.pressedKeys[e]);\n\t\t\t\tlet moveRight = this.keys.RIGHT.some(e => ih.pressedKeys[e]);\n\t\t\t\tlet moveUp = this.keys.UP.some(e => ih.pressedKeys[e]);\n\t\t\t\tlet moveDown = this.keys.DOWN.some(e => ih.pressedKeys[e]);\n\n\t\t\t\tif(this.lockElevation){\n\t\t\t\t\tlet dir = view.direction;\n\t\t\t\t\tdir.z = 0;\n\t\t\t\t\tdir.normalize();\n\n\t\t\t\t\tif (moveForward && moveBackward) {\n\t\t\t\t\t\tthis.translationWorldDelta.set(0, 0, 0);\n\t\t\t\t\t} else if (moveForward) {\n\t\t\t\t\t\tthis.translationWorldDelta.copy(dir.multiplyScalar(this.viewer.getMoveSpeed()));\n\t\t\t\t\t} else if (moveBackward) {\n\t\t\t\t\t\tthis.translationWorldDelta.copy(dir.multiplyScalar(-this.viewer.getMoveSpeed()));\n\t\t\t\t\t}\n\t\t\t\t}else {\n\t\t\t\t\tif (moveForward && moveBackward) {\n\t\t\t\t\t\tthis.translationDelta.y = 0;\n\t\t\t\t\t} else if (moveForward) {\n\t\t\t\t\t\tthis.translationDelta.y = this.viewer.getMoveSpeed();\n\t\t\t\t\t} else if (moveBackward) {\n\t\t\t\t\t\tthis.translationDelta.y = -this.viewer.getMoveSpeed();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (moveLeft && moveRight) {\n\t\t\t\t\tthis.translationDelta.x = 0;\n\t\t\t\t} else if (moveLeft) {\n\t\t\t\t\tthis.translationDelta.x = -this.viewer.getMoveSpeed();\n\t\t\t\t} else if (moveRight) {\n\t\t\t\t\tthis.translationDelta.x = this.viewer.getMoveSpeed();\n\t\t\t\t}\n\n\t\t\t\tif (moveUp && moveDown) {\n\t\t\t\t\tthis.translationWorldDelta.z = 0;\n\t\t\t\t} else if (moveUp) {\n\t\t\t\t\tthis.translationWorldDelta.z = this.viewer.getMoveSpeed();\n\t\t\t\t} else if (moveDown) {\n\t\t\t\t\tthis.translationWorldDelta.z = -this.viewer.getMoveSpeed();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{ // apply rotation\n\t\t\t\tlet yaw = view.yaw;\n\t\t\t\tlet pitch = view.pitch;\n\n\t\t\t\tyaw -= this.yawDelta * delta;\n\t\t\t\tpitch -= this.pitchDelta * delta;\n\n\t\t\t\tview.yaw = yaw;\n\t\t\t\tview.pitch = pitch;\n\t\t\t}\n\n\t\t\t{ // apply translation\n\t\t\t\tview.translate(\n\t\t\t\t\tthis.translationDelta.x * delta,\n\t\t\t\t\tthis.translationDelta.y * delta,\n\t\t\t\t\tthis.translationDelta.z * delta\n\t\t\t\t);\n\n\t\t\t\tview.translateWorld(\n\t\t\t\t\tthis.translationWorldDelta.x * delta,\n\t\t\t\t\tthis.translationWorldDelta.y * delta,\n\t\t\t\t\tthis.translationWorldDelta.z * delta\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t{ // set view target according to speed\n\t\t\t\tview.radius = 3 * this.viewer.getMoveSpeed();\n\t\t\t}\n\n\t\t\t{ // decelerate over time\n\t\t\t\tlet attenuation = Math.max(0, 1 - this.fadeFactor * delta);\n\t\t\t\tthis.yawDelta *= attenuation;\n\t\t\t\tthis.pitchDelta *= attenuation;\n\t\t\t\tthis.translationDelta.multiplyScalar(attenuation);\n\t\t\t\tthis.translationWorldDelta.multiplyScalar(attenuation);\n\t\t\t}\n\t\t}\n\t};\n\n\tclass EarthControls extends EventDispatcher {\n\t\tconstructor (viewer) {\n\t\t\tsuper(viewer);\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.scene = null;\n\t\t\tthis.sceneControls = new Scene();\n\n\t\t\tthis.rotationSpeed = 10;\n\n\t\t\tthis.fadeFactor = 20;\n\t\t\tthis.wheelDelta = 0;\n\t\t\tthis.zoomDelta = new Vector3();\n\t\t\tthis.camStart = null;\n\n\t\t\tthis.tweens = [];\n\n\t\t\t{\n\t\t\t\tlet sg = new SphereGeometry(1, 16, 16);\n\t\t\t\tlet sm = new MeshNormalMaterial();\n\t\t\t\tthis.pivotIndicator = new Mesh(sg, sm);\n\t\t\t\tthis.pivotIndicator.visible = false;\n\t\t\t\tthis.sceneControls.add(this.pivotIndicator);\n\t\t\t}\n\n\t\t\tlet drag = (e) => {\n\t\t\t\tif (e.drag.object !== null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!this.pivot) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (e.drag.startHandled === undefined) {\n\t\t\t\t\te.drag.startHandled = true;\n\n\t\t\t\t\tthis.dispatchEvent({type: 'start'});\n\t\t\t\t}\n\n\t\t\t\tlet camStart = this.camStart;\n\t\t\t\tlet camera = this.scene.getActiveCamera();\n\t\t\t\tlet view = this.viewer.scene.view;\n\n\t\t\t\t// let camera = this.viewer.scene.camera;\n\t\t\t\tlet mouse = e.drag.end;\n\t\t\t\tlet domElement = this.viewer.renderer.domElement;\n\n\t\t\t\tif (e.drag.mouse === MOUSE$1.LEFT) {\n\n\t\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\t\t\t\t\tlet plane = new Plane().setFromNormalAndCoplanarPoint(\n\t\t\t\t\t\tnew Vector3(0, 0, 1),\n\t\t\t\t\t\tthis.pivot);\n\n\t\t\t\t\tlet distanceToPlane = ray.distanceToPlane(plane);\n\n\t\t\t\t\tif (distanceToPlane > 0) {\n\t\t\t\t\t\tlet I = new Vector3().addVectors(\n\t\t\t\t\t\t\tcamStart.position,\n\t\t\t\t\t\t\tray.direction.clone().multiplyScalar(distanceToPlane));\n\n\t\t\t\t\t\tlet movedBy = new Vector3().subVectors(\n\t\t\t\t\t\t\tI, this.pivot);\n\n\t\t\t\t\t\tlet newCamPos = camStart.position.clone().sub(movedBy);\n\n\t\t\t\t\t\tview.position.copy(newCamPos);\n\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet distance = newCamPos.distanceTo(this.pivot);\n\t\t\t\t\t\t\tview.radius = distance;\n\t\t\t\t\t\t\tlet speed = view.radius / 2.5;\n\t\t\t\t\t\t\tthis.viewer.setMoveSpeed(speed);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (e.drag.mouse === MOUSE$1.RIGHT) {\n\t\t\t\t\tlet ndrag = {\n\t\t\t\t\t\tx: e.drag.lastDrag.x / this.renderer.domElement.clientWidth,\n\t\t\t\t\t\ty: e.drag.lastDrag.y / this.renderer.domElement.clientHeight\n\t\t\t\t\t};\n\n\t\t\t\t\tlet yawDelta = -ndrag.x * this.rotationSpeed * 0.5;\n\t\t\t\t\tlet pitchDelta = -ndrag.y * this.rotationSpeed * 0.2;\n\n\t\t\t\t\tlet originalPitch = view.pitch;\n\t\t\t\t\tlet tmpView = view.clone();\n\t\t\t\t\ttmpView.pitch = tmpView.pitch + pitchDelta;\n\t\t\t\t\tpitchDelta = tmpView.pitch - originalPitch;\n\n\t\t\t\t\tlet pivotToCam = new Vector3().subVectors(view.position, this.pivot);\n\t\t\t\t\tlet pivotToCamTarget = new Vector3().subVectors(view.getPivot(), this.pivot);\n\t\t\t\t\tlet side = view.getSide();\n\n\t\t\t\t\tpivotToCam.applyAxisAngle(side, pitchDelta);\n\t\t\t\t\tpivotToCamTarget.applyAxisAngle(side, pitchDelta);\n\n\t\t\t\t\tpivotToCam.applyAxisAngle(new Vector3(0, 0, 1), yawDelta);\n\t\t\t\t\tpivotToCamTarget.applyAxisAngle(new Vector3(0, 0, 1), yawDelta);\n\n\t\t\t\t\tlet newCam = new Vector3().addVectors(this.pivot, pivotToCam);\n\t\t\t\t\t// TODO: Unused: let newCamTarget = new THREE.Vector3().addVectors(this.pivot, pivotToCamTarget);\n\n\t\t\t\t\tview.position.copy(newCam);\n\t\t\t\t\tview.yaw += yawDelta;\n\t\t\t\t\tview.pitch += pitchDelta;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet onMouseDown = e => {\n\t\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\t\te.mouse, \n\t\t\t\t\tthis.scene.getActiveCamera(), \n\t\t\t\t\tthis.viewer, \n\t\t\t\t\tthis.scene.pointclouds, \n\t\t\t\t\t{pickClipped: false});\n\n\t\t\t\tif (I) {\n\t\t\t\t\tthis.pivot = I.location;\n\t\t\t\t\tthis.camStart = this.scene.getActiveCamera().clone();\n\t\t\t\t\tthis.pivotIndicator.visible = true;\n\t\t\t\t\tthis.pivotIndicator.position.copy(I.location);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlet drop = e => {\n\t\t\t\tthis.dispatchEvent({type: 'end'});\n\t\t\t};\n\n\t\t\tlet onMouseUp = e => {\n\t\t\t\tthis.camStart = null;\n\t\t\t\tthis.pivot = null;\n\t\t\t\tthis.pivotIndicator.visible = false;\n\t\t\t};\n\n\t\t\tlet scroll = (e) => {\n\t\t\t\tthis.wheelDelta += e.delta;\n\t\t\t};\n\n\t\t\tlet dblclick = (e) => {\n\t\t\t\tthis.zoomToLocation(e.mouse);\n\t\t\t};\n\n\t\t\tthis.addEventListener('drag', drag);\n\t\t\tthis.addEventListener('drop', drop);\n\t\t\tthis.addEventListener('mousewheel', scroll);\n\t\t\tthis.addEventListener('mousedown', onMouseDown);\n\t\t\tthis.addEventListener('mouseup', onMouseUp);\n\t\t\tthis.addEventListener('dblclick', dblclick);\n\t\t}\n\n\t\tsetScene (scene) {\n\t\t\tthis.scene = scene;\n\t\t}\n\n\t\tstop(){\n\t\t\tthis.wheelDelta = 0;\n\t\t\tthis.zoomDelta.set(0, 0, 0);\n\t\t}\n\t\t\n\t\tzoomToLocation(mouse){\n\t\t\tlet camera = this.scene.getActiveCamera();\n\t\t\t\n\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\tmouse,\n\t\t\t\tcamera,\n\t\t\t\tthis.viewer,\n\t\t\t\tthis.scene.pointclouds);\n\n\t\t\tif (I === null) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet targetRadius = 0;\n\t\t\t{\n\t\t\t\tlet minimumJumpDistance = 0.2;\n\n\t\t\t\tlet domElement = this.renderer.domElement;\n\t\t\t\tlet ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight);\n\n\t\t\t\tlet nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray);\n\t\t\t\tlet lastNode = nodes[nodes.length - 1];\n\t\t\t\tlet radius = lastNode.getBoundingSphere(new Sphere()).radius;\n\t\t\t\ttargetRadius = Math.min(this.scene.view.radius, radius);\n\t\t\t\ttargetRadius = Math.max(minimumJumpDistance, targetRadius);\n\t\t\t}\n\n\t\t\tlet d = this.scene.view.direction.multiplyScalar(-1);\n\t\t\tlet cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius));\n\t\t\t// TODO Unused: let controlsTargetPosition = I.location;\n\n\t\t\tlet animationDuration = 600;\n\t\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t\t{ // animate\n\t\t\t\tlet value = {x: 0};\n\t\t\t\tlet tween = new TWEEN.Tween(value).to({x: 1}, animationDuration);\n\t\t\t\ttween.easing(easing);\n\t\t\t\tthis.tweens.push(tween);\n\n\t\t\t\tlet startPos = this.scene.view.position.clone();\n\t\t\t\tlet targetPos = cameraTargetPosition.clone();\n\t\t\t\tlet startRadius = this.scene.view.radius;\n\t\t\t\tlet targetRadius = cameraTargetPosition.distanceTo(I.location);\n\n\t\t\t\ttween.onUpdate(() => {\n\t\t\t\t\tlet t = value.x;\n\t\t\t\t\tthis.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x;\n\t\t\t\t\tthis.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y;\n\t\t\t\t\tthis.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z;\n\n\t\t\t\t\tthis.scene.view.radius = (1 - t) * startRadius + t * targetRadius;\n\t\t\t\t\tthis.viewer.setMoveSpeed(this.scene.view.radius / 2.5);\n\t\t\t\t});\n\n\t\t\t\ttween.onComplete(() => {\n\t\t\t\t\tthis.tweens = this.tweens.filter(e => e !== tween);\n\t\t\t\t});\n\n\t\t\t\ttween.start();\n\t\t\t}\n\t\t}\n\n\t\tupdate (delta) {\n\t\t\tlet view = this.scene.view;\n\t\t\tlet fade = Math.pow(0.5, this.fadeFactor * delta);\n\t\t\tlet progression = 1 - fade;\n\t\t\tlet camera = this.scene.getActiveCamera();\n\t\t\t\n\t\t\t// compute zoom\n\t\t\tif (this.wheelDelta !== 0) {\n\t\t\t\tlet I = Utils.getMousePointCloudIntersection(\n\t\t\t\t\tthis.viewer.inputHandler.mouse, \n\t\t\t\t\tthis.scene.getActiveCamera(), \n\t\t\t\t\tthis.viewer, \n\t\t\t\t\tthis.scene.pointclouds);\n\n\t\t\t\tif (I) {\n\t\t\t\t\tlet resolvedPos = new Vector3().addVectors(view.position, this.zoomDelta);\n\t\t\t\t\tlet distance = I.location.distanceTo(resolvedPos);\n\t\t\t\t\tlet jumpDistance = distance * 0.2 * this.wheelDelta;\n\t\t\t\t\tlet targetDir = new Vector3().subVectors(I.location, view.position);\n\t\t\t\t\ttargetDir.normalize();\n\n\t\t\t\t\tresolvedPos.add(targetDir.multiplyScalar(jumpDistance));\n\t\t\t\t\tthis.zoomDelta.subVectors(resolvedPos, view.position);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet distance = resolvedPos.distanceTo(I.location);\n\t\t\t\t\t\tview.radius = distance;\n\t\t\t\t\t\tlet speed = view.radius / 2.5;\n\t\t\t\t\t\tthis.viewer.setMoveSpeed(speed);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// apply zoom\n\t\t\tif (this.zoomDelta.length() !== 0) {\n\t\t\t\tlet p = this.zoomDelta.clone().multiplyScalar(progression);\n\n\t\t\t\tlet newPos = new Vector3().addVectors(view.position, p);\n\t\t\t\tview.position.copy(newPos);\n\t\t\t}\n\n\t\t\tif (this.pivotIndicator.visible) {\n\t\t\t\tlet distance = this.pivotIndicator.position.distanceTo(view.position);\n\t\t\t\tlet pixelwidth = this.renderer.domElement.clientwidth;\n\t\t\t\tlet pixelHeight = this.renderer.domElement.clientHeight;\n\t\t\t\tlet pr = Utils.projectedRadius(1, camera, distance, pixelwidth, pixelHeight);\n\t\t\t\tlet scale = (10 / pr);\n\t\t\t\tthis.pivotIndicator.scale.set(scale, scale, scale);\n\t\t\t}\n\n\t\t\t// decelerate over time\n\t\t\t{\n\t\t\t\tthis.zoomDelta.multiplyScalar(fade);\n\t\t\t\tthis.wheelDelta = 0;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @author chrisl / Geodan\n\t *\n\t * adapted from Potree.FirstPersonControls by\n\t *\n\t * @author mschuetz / http://mschuetz.at\n\t *\n\t * and THREE.DeviceOrientationControls  by\n\t *\n\t * @author richt / http://richt.me\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t *\n\t *\n\t */\n\n\tclass DeviceOrientationControls extends EventDispatcher{\n\t\tconstructor(viewer){\n\t\t\tsuper();\n\n\t\t\tthis.viewer = viewer;\n\t\t\tthis.renderer = viewer.renderer;\n\n\t\t\tthis.scene = null;\n\t\t\tthis.sceneControls = new Scene();\n\n\t\t\tthis.screenOrientation = window.orientation || 0;\n\n\t\t\tlet deviceOrientationChange = e => {\n\t\t\t\tthis.deviceOrientation = e;\n\t\t\t};\n\n\t\t\tlet screenOrientationChange = e => {\n\t\t\t\tthis.screenOrientation = window.orientation || 0;\n\t\t\t};\n\n\t\t\tif ('ondeviceorientationabsolute' in window) {\n\t\t\t\twindow.addEventListener('deviceorientationabsolute', deviceOrientationChange);\n\t\t\t} else if ('ondeviceorientation' in window) {\n\t\t\t\twindow.addEventListener('deviceorientation', deviceOrientationChange);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"No device orientation found.\");\n\t\t\t}\n\t\t\t// window.addEventListener('deviceorientation', deviceOrientationChange);\n\t\t\twindow.addEventListener('orientationchange', screenOrientationChange);\n\t\t}\n\n\t\tsetScene (scene) {\n\t\t\tthis.scene = scene;\n\t\t}\n\n\t\tupdate (delta) {\n\t\t\tlet computeQuaternion = function (alpha, beta, gamma, orient) {\n\t\t\t\tlet quaternion = new Quaternion();\n\n\t\t\t\tlet zee = new Vector3(0, 0, 1);\n\t\t\t\tlet euler = new Euler();\n\t\t\t\tlet q0 = new Quaternion();\n\n\t\t\t\teuler.set(beta, gamma, alpha, 'ZXY');\n\t\t\t\tquaternion.setFromEuler(euler);\n\t\t\t\tquaternion.multiply(q0.setFromAxisAngle(zee, -orient));\n\n\t\t\t\treturn quaternion;\n\t\t\t};\n\n\t\t\tif (typeof this.deviceOrientation !== 'undefined') {\n\t\t\t\tlet alpha = this.deviceOrientation.alpha ? MathUtils.degToRad(this.deviceOrientation.alpha) : 0;\n\t\t\t\tlet beta = this.deviceOrientation.beta ? MathUtils.degToRad(this.deviceOrientation.beta) : 0;\n\t\t\t\tlet gamma = this.deviceOrientation.gamma ? MathUtils.degToRad(this.deviceOrientation.gamma) : 0;\n\t\t\t\tlet orient = this.screenOrientation ? MathUtils.degToRad(this.screenOrientation) : 0;\n\n\t\t\t\tlet quaternion = computeQuaternion(alpha, beta, gamma, orient);\n\t\t\t\tviewer.scene.cameraP.quaternion.set(quaternion.x, quaternion.y, quaternion.z, quaternion.w);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar GLTFLoader = ( function () {\n\n\t\tfunction GLTFLoader( manager ) {\n\n\t\t\tLoader.call( this, manager );\n\n\t\t\tthis.dracoLoader = null;\n\t\t\tthis.ddsLoader = null;\n\t\t\tthis.ktx2Loader = null;\n\t\t\tthis.meshoptDecoder = null;\n\n\t\t\tthis.pluginCallbacks = [];\n\n\t\t\tthis.register( function ( parser ) {\n\n\t\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t\t} );\n\n\t\t\tthis.register( function ( parser ) {\n\n\t\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t\t} );\n\n\t\t\tthis.register( function ( parser ) {\n\n\t\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t\t} );\n\n\t\t\tthis.register( function ( parser ) {\n\n\t\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t\t} );\n\n\t\t\tthis.register( function ( parser ) {\n\n\t\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t\t} );\n\n\t\t\tthis.register( function ( parser ) {\n\n\t\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tGLTFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\t\tconstructor: GLTFLoader,\n\n\t\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\t\tvar scope = this;\n\n\t\t\t\tvar resourcePath;\n\n\t\t\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\t\t\tresourcePath = this.resourcePath;\n\n\t\t\t\t} else if ( this.path !== '' ) {\n\n\t\t\t\t\tresourcePath = this.path;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t\t\t}\n\n\t\t\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\t\t\tthis.manager.itemStart( url );\n\n\t\t\t\tvar _onError = function ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t};\n\n\t\t\t\tvar loader = new FileLoader( this.manager );\n\n\t\t\t\tloader.setPath( this.path );\n\t\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\t\t\tloader.load( url, function ( data ) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t\t}, _onError );\n\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t_onError( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, onProgress, _onError );\n\n\t\t\t},\n\n\t\t\tsetDRACOLoader: function ( dracoLoader ) {\n\n\t\t\t\tthis.dracoLoader = dracoLoader;\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\tsetDDSLoader: function ( ddsLoader ) {\n\n\t\t\t\tthis.ddsLoader = ddsLoader;\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\tsetKTX2Loader: function ( ktx2Loader ) {\n\n\t\t\t\tthis.ktx2Loader = ktx2Loader;\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\tsetMeshoptDecoder: function ( meshoptDecoder ) {\n\n\t\t\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\tregister: function ( callback ) {\n\n\t\t\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\tunregister: function ( callback ) {\n\n\t\t\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t},\n\n\t\t\tparse: function ( data, path, onLoad, onError ) {\n\n\t\t\t\tvar content;\n\t\t\t\tvar extensions = {};\n\t\t\t\tvar plugins = {};\n\n\t\t\t\tif ( typeof data === 'string' ) {\n\n\t\t\t\t\tcontent = data;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\n\n\t\t\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcontent = LoaderUtils.decodeText( new Uint8Array( data ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar json = JSON.parse( content );\n\n\t\t\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar parser = new GLTFParser( json, {\n\n\t\t\t\t\tpath: path || this.resourcePath || '',\n\t\t\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\t\t\tmanager: this.manager,\n\t\t\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t\t\t} );\n\n\t\t\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\t\t\tfor ( var i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\t\t\tvar plugin = this.pluginCallbacks[ i ]( parser );\n\t\t\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t\t\t// Remove this workaround if we move all the existing\n\t\t\t\t\t// extension handlers to plugin system\n\t\t\t\t\textensions[ plugin.name ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.extensionsUsed ) {\n\n\t\t\t\t\tfor ( var i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\t\t\tvar extensionName = json.extensionsUsed[ i ];\n\t\t\t\t\t\tvar extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\n\t\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EXTENSIONS.MSFT_TEXTURE_DDS:\n\t\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureDDSExtension( this.ddsLoader );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tparser.setExtensions( extensions );\n\t\t\t\tparser.setPlugins( plugins );\n\t\t\t\tparser.parse( onLoad, onError );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t/* GLTFREGISTRY */\n\n\t\tfunction GLTFRegistry() {\n\n\t\t\tvar objects = {};\n\n\t\t\treturn\t{\n\n\t\t\t\tget: function ( key ) {\n\n\t\t\t\t\treturn objects[ key ];\n\n\t\t\t\t},\n\n\t\t\t\tadd: function ( key, object ) {\n\n\t\t\t\t\tobjects[ key ] = object;\n\n\t\t\t\t},\n\n\t\t\t\tremove: function ( key ) {\n\n\t\t\t\t\tdelete objects[ key ];\n\n\t\t\t\t},\n\n\t\t\t\tremoveAll: function () {\n\n\t\t\t\t\tobjects = {};\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\t/*********************************/\n\t\t/********** EXTENSIONS ***********/\n\t\t/*********************************/\n\n\t\tvar EXTENSIONS = {\n\t\t\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\t\t\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\t\t\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\t\t\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\t\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\n\t\t\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\t\t\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\t\t\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\t\t\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\t\t\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\t\t\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\t\t\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\t\t\tMSFT_TEXTURE_DDS: 'MSFT_texture_dds'\n\t\t};\n\n\t\t/**\n\t\t * DDS Texture Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds\n\t\t *\n\t\t */\n\t\tfunction GLTFTextureDDSExtension( ddsLoader ) {\n\n\t\t\tif ( ! ddsLoader ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader' );\n\n\t\t\t}\n\n\t\t\tthis.name = EXTENSIONS.MSFT_TEXTURE_DDS;\n\t\t\tthis.ddsLoader = ddsLoader;\n\n\t\t}\n\n\t\t/**\n\t\t * Punctual Lights Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n\t\t */\n\t\tfunction GLTFLightsExtension( parser ) {\n\n\t\t\tthis.parser = parser;\n\t\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t\t// Object3D instance caches\n\t\t\tthis.cache = { refs: {}, uses: {} };\n\n\t\t}\n\n\t\tGLTFLightsExtension.prototype._markDefs = function () {\n\n\t\t\tvar parser = this.parser;\n\t\t\tvar nodeDefs = this.parser.json.nodes || [];\n\n\t\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tGLTFLightsExtension.prototype._loadLight = function ( lightIndex ) {\n\n\t\t\tvar parser = this.parser;\n\t\t\tvar cacheKey = 'light:' + lightIndex;\n\t\t\tvar dependency = parser.cache.get( cacheKey );\n\n\t\t\tif ( dependency ) return dependency;\n\n\t\t\tvar json = parser.json;\n\t\t\tvar extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\t\tvar lightDefs = extensions.lights || [];\n\t\t\tvar lightDef = lightDefs[ lightIndex ];\n\t\t\tvar lightNode;\n\n\t\t\tvar color = new Color( 0xffffff );\n\n\t\t\tif ( lightDef.color !== undefined ) color.fromArray( lightDef.color );\n\n\t\t\tvar range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\t\tswitch ( lightDef.type ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\t\tlightNode.distance = range;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\t\tlightNode.distance = range;\n\t\t\t\t\t// Handle spotlight properties.\n\t\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t\t}\n\n\t\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\t\tlightNode.decay = 2;\n\n\t\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\t\tdependency = Promise.resolve( lightNode );\n\n\t\t\tparser.cache.add( cacheKey, dependency );\n\n\t\t\treturn dependency;\n\n\t\t};\n\n\t\tGLTFLightsExtension.prototype.createNodeAttachment = function ( nodeIndex ) {\n\n\t\t\tvar self = this;\n\t\t\tvar parser = this.parser;\n\t\t\tvar json = parser.json;\n\t\t\tvar nodeDef = json.nodes[ nodeIndex ];\n\t\t\tvar lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\t\tvar lightIndex = lightDef.light;\n\n\t\t\tif ( lightIndex === undefined ) return null;\n\n\t\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Unlit Materials Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n\t\t */\n\t\tfunction GLTFMaterialsUnlitExtension() {\n\n\t\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t\t}\n\n\t\tGLTFMaterialsUnlitExtension.prototype.getMaterialType = function () {\n\n\t\t\treturn MeshBasicMaterial;\n\n\t\t};\n\n\t\tGLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, materialDef, parser ) {\n\n\t\t\tvar pending = [];\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\t\tif ( metallicRoughness ) {\n\n\t\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending );\n\n\t\t};\n\n\t\t/**\n\t\t * Clearcoat Materials Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n\t\t */\n\t\tfunction GLTFMaterialsClearcoatExtension( parser ) {\n\n\t\t\tthis.parser = parser;\n\t\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t\t}\n\n\t\tGLTFMaterialsClearcoatExtension.prototype.getMaterialType = function ( materialIndex ) {\n\n\t\t\tvar parser = this.parser;\n\t\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\t\treturn MeshPhysicalMaterial;\n\n\t\t};\n\n\t\tGLTFMaterialsClearcoatExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) {\n\n\t\t\tvar parser = this.parser;\n\t\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\t\treturn Promise.resolve();\n\n\t\t\t}\n\n\t\t\tvar pending = [];\n\n\t\t\tvar extension = materialDef.extensions[ this.name ];\n\n\t\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t\t}\n\n\t\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t\t}\n\n\t\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t\t}\n\n\t\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\t\tvar scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending );\n\n\t\t};\n\n\t\t/**\n\t\t * Transmission Materials Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n\t\t * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n\t\t */\n\t\tfunction GLTFMaterialsTransmissionExtension( parser ) {\n\n\t\t\tthis.parser = parser;\n\t\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t\t}\n\n\t\tGLTFMaterialsTransmissionExtension.prototype.getMaterialType = function ( materialIndex ) {\n\n\t\t\tvar parser = this.parser;\n\t\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\t\treturn MeshPhysicalMaterial;\n\n\t\t};\n\n\t\tGLTFMaterialsTransmissionExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) {\n\n\t\t\tvar parser = this.parser;\n\t\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\t\treturn Promise.resolve();\n\n\t\t\t}\n\n\t\t\tvar pending = [];\n\n\t\t\tvar extension = materialDef.extensions[ this.name ];\n\n\t\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t\t}\n\n\t\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending );\n\n\t\t};\n\n\t\t/**\n\t\t * BasisU Texture Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n\t\t */\n\t\tfunction GLTFTextureBasisUExtension( parser ) {\n\n\t\t\tthis.parser = parser;\n\t\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t\t}\n\n\t\tGLTFTextureBasisUExtension.prototype.loadTexture = function ( textureIndex ) {\n\n\t\t\tvar parser = this.parser;\n\t\t\tvar json = parser.json;\n\n\t\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar extension = textureDef.extensions[ this.name ];\n\t\t\tvar source = json.images[ extension.source ];\n\t\t\tvar loader = parser.options.ktx2Loader;\n\n\t\t\tif ( ! loader ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn parser.loadTextureImage( textureIndex, source, loader );\n\n\t\t};\n\n\t\t/**\n\t\t * WebP Texture Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n\t\t */\n\t\tfunction GLTFTextureWebPExtension( parser ) {\n\n\t\t\tthis.parser = parser;\n\t\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\t\tthis.isSupported = null;\n\n\t\t}\n\n\t\tGLTFTextureWebPExtension.prototype.loadTexture = function ( textureIndex ) {\n\n\t\t\tvar name = this.name;\n\t\t\tvar parser = this.parser;\n\t\t\tvar json = parser.json;\n\n\t\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar extension = textureDef.extensions[ name ];\n\t\t\tvar source = json.images[ extension.source ];\n\t\t\tvar loader = source.uri ? parser.options.manager.getHandler( source.uri ) : parser.textureLoader;\n\n\t\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, source, loader );\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t\t}\n\n\t\t\t\t// Fall back to PNG or JPEG.\n\t\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t\t} );\n\n\t\t};\n\n\t\tGLTFTextureWebPExtension.prototype.detectSupport = function () {\n\n\t\t\tif ( ! this.isSupported ) {\n\n\t\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\t\tvar image = new Image();\n\n\t\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t\t// WebP images, unfortunately.\n\t\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t\t};\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn this.isSupported;\n\n\t\t};\n\n\t\t/**\n\t\t* meshopt BufferView Compression Extension\n\t\t*\n\t\t* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n\t\t*/\n\t\tfunction GLTFMeshoptCompression( parser ) {\n\n\t\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\t\tthis.parser = parser;\n\n\t\t}\n\n\t\tGLTFMeshoptCompression.prototype.loadBufferView = function ( index ) {\n\n\t\t\tvar json = this.parser.json;\n\t\t\tvar bufferView = json.bufferViews[ index ];\n\n\t\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\t\tvar extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\t\tvar buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\t\tvar decoder = this.parser.options.meshoptDecoder;\n\n\t\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( [ buffer, decoder.ready ] ).then( function ( res ) {\n\n\t\t\t\t\tvar byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\t\tvar byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\t\tvar count = extensionDef.count;\n\t\t\t\t\tvar stride = extensionDef.byteStride;\n\n\t\t\t\t\tvar result = new ArrayBuffer( count * stride );\n\t\t\t\t\tvar source = new Uint8Array( res[ 0 ], byteOffset, byteLength );\n\n\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\treturn result;\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t};\n\n\t\t/* BINARY EXTENSION */\n\t\tvar BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\n\t\tvar BINARY_EXTENSION_HEADER_LENGTH = 12;\n\t\tvar BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\n\t\tfunction GLTFBinaryExtension( data ) {\n\n\t\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\t\tthis.content = null;\n\t\t\tthis.body = null;\n\n\t\t\tvar headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\t\tthis.header = {\n\t\t\t\tmagic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\t\tlength: headerView.getUint32( 8, true )\n\t\t\t};\n\n\t\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t\t}\n\n\t\t\tvar chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\t\tvar chunkIndex = 0;\n\n\t\t\twhile ( chunkIndex < chunkView.byteLength ) {\n\n\t\t\t\tvar chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\t\tchunkIndex += 4;\n\n\t\t\t\tvar chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\t\tchunkIndex += 4;\n\n\t\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\t\tvar contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\t\tthis.content = LoaderUtils.decodeText( contentArray );\n\n\t\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\t\tvar byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t\t}\n\n\t\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\t\tchunkIndex += chunkLength;\n\n\t\t\t}\n\n\t\t\tif ( this.content === null ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * DRACO Mesh Compression Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n\t\t */\n\t\tfunction GLTFDracoMeshCompressionExtension( json, dracoLoader ) {\n\n\t\t\tif ( ! dracoLoader ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t\t}\n\n\t\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\t\tthis.json = json;\n\t\t\tthis.dracoLoader = dracoLoader;\n\t\t\tthis.dracoLoader.preload();\n\n\t\t}\n\n\t\tGLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) {\n\n\t\t\tvar json = this.json;\n\t\t\tvar dracoLoader = this.dracoLoader;\n\t\t\tvar bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\t\tvar gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\t\tvar threeAttributeMap = {};\n\t\t\tvar attributeNormalizedMap = {};\n\t\t\tvar attributeTypeMap = {};\n\n\t\t\tfor ( var attributeName in gltfAttributeMap ) {\n\n\t\t\t\tvar threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t\t}\n\n\t\t\tfor ( attributeName in primitive.attributes ) {\n\n\t\t\t\tvar threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\t\tvar accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\t\tvar componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType;\n\t\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\t\tfor ( var attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\t\tvar attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\t\tvar normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Texture Transform Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n\t\t */\n\t\tfunction GLTFTextureTransformExtension() {\n\n\t\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t\t}\n\n\t\tGLTFTextureTransformExtension.prototype.extendTexture = function ( texture, transform ) {\n\n\t\t\ttexture = texture.clone();\n\n\t\t\tif ( transform.offset !== undefined ) {\n\n\t\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t\t}\n\n\t\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\t\ttexture.rotation = transform.rotation;\n\n\t\t\t}\n\n\t\t\tif ( transform.scale !== undefined ) {\n\n\t\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t\t}\n\n\t\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV sets in \"' + this.name + '\" extension not yet supported.' );\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\treturn texture;\n\n\t\t};\n\n\t\t/**\n\t\t * Specular-Glossiness Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n\t\t */\n\n\t\t/**\n\t\t * A sub class of StandardMaterial with some of the functionality\n\t\t * changed via the `onBeforeCompile` callback\n\t\t * @pailhead\n\t\t */\n\n\t\tfunction GLTFMeshStandardSGMaterial( params ) {\n\n\t\t\tMeshStandardMaterial.call( this );\n\n\t\t\tthis.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t\t//various chunks that need replacing\n\t\t\tvar specularMapParsFragmentChunk = [\n\t\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t\t'#endif'\n\t\t\t].join( '\\n' );\n\n\t\t\tvar glossinessMapParsFragmentChunk = [\n\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t\t'#endif'\n\t\t\t].join( '\\n' );\n\n\t\t\tvar specularMapFragmentChunk = [\n\t\t\t\t'vec3 specularFactor = specular;',\n\t\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t\t'\ttexelSpecular = sRGBToLinear( texelSpecular );',\n\t\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t\t'#endif'\n\t\t\t].join( '\\n' );\n\n\t\t\tvar glossinessMapFragmentChunk = [\n\t\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t\t'#endif'\n\t\t\t].join( '\\n' );\n\n\t\t\tvar lightPhysicalFragmentChunk = [\n\t\t\t\t'PhysicalMaterial material;',\n\t\t\t\t'material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );',\n\t\t\t\t'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );',\n\t\t\t\t'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );',\n\t\t\t\t'material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.',\n\t\t\t\t'material.specularRoughness += geometryRoughness;',\n\t\t\t\t'material.specularRoughness = min( material.specularRoughness, 1.0 );',\n\t\t\t\t'material.specularColor = specularFactor;',\n\t\t\t].join( '\\n' );\n\n\t\t\tvar uniforms = {\n\t\t\t\tspecular: { value: new Color().setHex( 0xffffff ) },\n\t\t\t\tglossiness: { value: 1 },\n\t\t\t\tspecularMap: { value: null },\n\t\t\t\tglossinessMap: { value: null }\n\t\t\t};\n\n\t\t\tthis._extraUniforms = uniforms;\n\n\t\t\tthis.onBeforeCompile = function ( shader ) {\n\n\t\t\t\tfor ( var uniformName in uniforms ) {\n\n\t\t\t\t\tshader.uniforms[ uniformName ] = uniforms[ uniformName ];\n\n\t\t\t\t}\n\n\t\t\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t\t.replace( '#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk )\n\t\t\t\t\t.replace( '#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk )\n\t\t\t\t\t.replace( '#include <roughnessmap_fragment>', specularMapFragmentChunk )\n\t\t\t\t\t.replace( '#include <metalnessmap_fragment>', glossinessMapFragmentChunk )\n\t\t\t\t\t.replace( '#include <lights_physical_fragment>', lightPhysicalFragmentChunk );\n\n\t\t\t};\n\n\t\t\tObject.defineProperties( this, {\n\n\t\t\t\tspecular: {\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn uniforms.specular.value;\n\n\t\t\t\t\t},\n\t\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\t\tuniforms.specular.value = v;\n\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tspecularMap: {\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn uniforms.specularMap.value;\n\n\t\t\t\t\t},\n\t\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\t\tuniforms.specularMap.value = v;\n\n\t\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\t\tthis.defines.USE_SPECULARMAP = ''; // USE_UV is set by the renderer for specular maps\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdelete this.defines.USE_SPECULARMAP;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tglossiness: {\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn uniforms.glossiness.value;\n\n\t\t\t\t\t},\n\t\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\t\tuniforms.glossiness.value = v;\n\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tglossinessMap: {\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn uniforms.glossinessMap.value;\n\n\t\t\t\t\t},\n\t\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\t\tuniforms.glossinessMap.value = v;\n\n\t\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\t\tthis.defines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t\t\tthis.defines.USE_UV = '';\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdelete this.defines.USE_GLOSSINESSMAP;\n\t\t\t\t\t\t\tdelete this.defines.USE_UV;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tdelete this.metalness;\n\t\t\tdelete this.roughness;\n\t\t\tdelete this.metalnessMap;\n\t\t\tdelete this.roughnessMap;\n\n\t\t\tthis.setValues( params );\n\n\t\t}\n\n\t\tGLTFMeshStandardSGMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\n\t\tGLTFMeshStandardSGMaterial.prototype.constructor = GLTFMeshStandardSGMaterial;\n\n\t\tGLTFMeshStandardSGMaterial.prototype.copy = function ( source ) {\n\n\t\t\tMeshStandardMaterial.prototype.copy.call( this, source );\n\t\t\tthis.specularMap = source.specularMap;\n\t\t\tthis.specular.copy( source.specular );\n\t\t\tthis.glossinessMap = source.glossinessMap;\n\t\t\tthis.glossiness = source.glossiness;\n\t\t\tdelete this.metalness;\n\t\t\tdelete this.roughness;\n\t\t\tdelete this.metalnessMap;\n\t\t\tdelete this.roughnessMap;\n\t\t\treturn this;\n\n\t\t};\n\n\t\tfunction GLTFMaterialsPbrSpecularGlossinessExtension() {\n\n\t\t\treturn {\n\n\t\t\t\tname: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,\n\n\t\t\t\tspecularGlossinessParams: [\n\t\t\t\t\t'color',\n\t\t\t\t\t'map',\n\t\t\t\t\t'lightMap',\n\t\t\t\t\t'lightMapIntensity',\n\t\t\t\t\t'aoMap',\n\t\t\t\t\t'aoMapIntensity',\n\t\t\t\t\t'emissive',\n\t\t\t\t\t'emissiveIntensity',\n\t\t\t\t\t'emissiveMap',\n\t\t\t\t\t'bumpMap',\n\t\t\t\t\t'bumpScale',\n\t\t\t\t\t'normalMap',\n\t\t\t\t\t'normalMapType',\n\t\t\t\t\t'displacementMap',\n\t\t\t\t\t'displacementScale',\n\t\t\t\t\t'displacementBias',\n\t\t\t\t\t'specularMap',\n\t\t\t\t\t'specular',\n\t\t\t\t\t'glossinessMap',\n\t\t\t\t\t'glossiness',\n\t\t\t\t\t'alphaMap',\n\t\t\t\t\t'envMap',\n\t\t\t\t\t'envMapIntensity',\n\t\t\t\t\t'refractionRatio',\n\t\t\t\t],\n\n\t\t\t\tgetMaterialType: function () {\n\n\t\t\t\t\treturn GLTFMeshStandardSGMaterial;\n\n\t\t\t\t},\n\n\t\t\t\textendParams: function ( materialParams, materialDef, parser ) {\n\n\t\t\t\t\tvar pbrSpecularGlossiness = materialDef.extensions[ this.name ];\n\n\t\t\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\t\t\tvar pending = [];\n\n\t\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\t\t\t\tvar array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterialParams.emissive = new Color( 0.0, 0.0, 0.0 );\n\t\t\t\t\tmaterialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\t\t\t\tmaterialParams.specular = new Color( 1.0, 1.0, 1.0 );\n\n\t\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\t\t\t\tmaterialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\t\t\t\tvar specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;\n\t\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) );\n\t\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.all( pending );\n\n\t\t\t\t},\n\n\t\t\t\tcreateMaterial: function ( materialParams ) {\n\n\t\t\t\t\tvar material = new GLTFMeshStandardSGMaterial( materialParams );\n\t\t\t\t\tmaterial.fog = true;\n\n\t\t\t\t\tmaterial.color = materialParams.color;\n\n\t\t\t\t\tmaterial.map = materialParams.map === undefined ? null : materialParams.map;\n\n\t\t\t\t\tmaterial.lightMap = null;\n\t\t\t\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\t\t\t\tmaterial.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap;\n\t\t\t\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\t\t\t\tmaterial.emissive = materialParams.emissive;\n\t\t\t\t\tmaterial.emissiveIntensity = 1.0;\n\t\t\t\t\tmaterial.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap;\n\n\t\t\t\t\tmaterial.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap;\n\t\t\t\t\tmaterial.bumpScale = 1;\n\n\t\t\t\t\tmaterial.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap;\n\t\t\t\t\tmaterial.normalMapType = TangentSpaceNormalMap;\n\n\t\t\t\t\tif ( materialParams.normalScale ) material.normalScale = materialParams.normalScale;\n\n\t\t\t\t\tmaterial.displacementMap = null;\n\t\t\t\t\tmaterial.displacementScale = 1;\n\t\t\t\t\tmaterial.displacementBias = 0;\n\n\t\t\t\t\tmaterial.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap;\n\t\t\t\t\tmaterial.specular = materialParams.specular;\n\n\t\t\t\t\tmaterial.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap;\n\t\t\t\t\tmaterial.glossiness = materialParams.glossiness;\n\n\t\t\t\t\tmaterial.alphaMap = null;\n\n\t\t\t\t\tmaterial.envMap = materialParams.envMap === undefined ? null : materialParams.envMap;\n\t\t\t\t\tmaterial.envMapIntensity = 1.0;\n\n\t\t\t\t\tmaterial.refractionRatio = 0.98;\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t};\n\n\t\t}\n\n\t\t/**\n\t\t * Mesh Quantization Extension\n\t\t *\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n\t\t */\n\t\tfunction GLTFMeshQuantizationExtension() {\n\n\t\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t\t}\n\n\t\t/*********************************/\n\t\t/********** INTERPOLATION ********/\n\t\t/*********************************/\n\n\t\t// Spline Interpolation\n\t\t// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\n\t\tfunction GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\t}\n\n\t\tGLTFCubicSplineInterpolant.prototype = Object.create( Interpolant.prototype );\n\t\tGLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;\n\n\t\tGLTFCubicSplineInterpolant.prototype.copySampleValue_ = function ( index ) {\n\n\t\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tvalueSize = this.valueSize,\n\t\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\t\tfor ( var i = 0; i !== valueSize; i ++ ) {\n\n\t\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t};\n\n\t\tGLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;\n\n\t\tGLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;\n\n\t\tGLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {\n\n\t\t\tvar result = this.resultBuffer;\n\t\t\tvar values = this.sampleValues;\n\t\t\tvar stride = this.valueSize;\n\n\t\t\tvar stride2 = stride * 2;\n\t\t\tvar stride3 = stride * 3;\n\n\t\t\tvar td = t1 - t0;\n\n\t\t\tvar p = ( t - t0 ) / td;\n\t\t\tvar pp = p * p;\n\t\t\tvar ppp = pp * p;\n\n\t\t\tvar offset1 = i1 * stride3;\n\t\t\tvar offset0 = offset1 - stride3;\n\n\t\t\tvar s2 = - 2 * ppp + 3 * pp;\n\t\t\tvar s3 = ppp - pp;\n\t\t\tvar s0 = 1 - s2;\n\t\t\tvar s1 = s3 - pp + p;\n\n\t\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t\t//   [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\t\tfor ( var i = 0; i !== stride; i ++ ) {\n\n\t\t\t\tvar p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\t\tvar m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\t\tvar p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\t\tvar m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t};\n\n\t\t/*********************************/\n\t\t/********** INTERNALS ************/\n\t\t/*********************************/\n\n\t\t/* CONSTANTS */\n\n\t\tvar WEBGL_CONSTANTS = {\n\t\t\tFLOAT: 5126,\n\t\t\t//FLOAT_MAT2: 35674,\n\t\t\tFLOAT_MAT3: 35675,\n\t\t\tFLOAT_MAT4: 35676,\n\t\t\tFLOAT_VEC2: 35664,\n\t\t\tFLOAT_VEC3: 35665,\n\t\t\tFLOAT_VEC4: 35666,\n\t\t\tLINEAR: 9729,\n\t\t\tREPEAT: 10497,\n\t\t\tSAMPLER_2D: 35678,\n\t\t\tPOINTS: 0,\n\t\t\tLINES: 1,\n\t\t\tLINE_LOOP: 2,\n\t\t\tLINE_STRIP: 3,\n\t\t\tTRIANGLES: 4,\n\t\t\tTRIANGLE_STRIP: 5,\n\t\t\tTRIANGLE_FAN: 6,\n\t\t\tUNSIGNED_BYTE: 5121,\n\t\t\tUNSIGNED_SHORT: 5123\n\t\t};\n\n\t\tvar WEBGL_COMPONENT_TYPES = {\n\t\t\t5120: Int8Array,\n\t\t\t5121: Uint8Array,\n\t\t\t5122: Int16Array,\n\t\t\t5123: Uint16Array,\n\t\t\t5125: Uint32Array,\n\t\t\t5126: Float32Array\n\t\t};\n\n\t\tvar WEBGL_FILTERS = {\n\t\t\t9728: NearestFilter,\n\t\t\t9729: LinearFilter,\n\t\t\t9984: NearestMipmapNearestFilter,\n\t\t\t9985: LinearMipmapNearestFilter,\n\t\t\t9986: NearestMipmapLinearFilter,\n\t\t\t9987: LinearMipmapLinearFilter\n\t\t};\n\n\t\tvar WEBGL_WRAPPINGS = {\n\t\t\t33071: ClampToEdgeWrapping,\n\t\t\t33648: MirroredRepeatWrapping,\n\t\t\t10497: RepeatWrapping\n\t\t};\n\n\t\tvar WEBGL_TYPE_SIZES = {\n\t\t\t'SCALAR': 1,\n\t\t\t'VEC2': 2,\n\t\t\t'VEC3': 3,\n\t\t\t'VEC4': 4,\n\t\t\t'MAT2': 4,\n\t\t\t'MAT3': 9,\n\t\t\t'MAT4': 16\n\t\t};\n\n\t\tvar ATTRIBUTES = {\n\t\t\tPOSITION: 'position',\n\t\t\tNORMAL: 'normal',\n\t\t\tTANGENT: 'tangent',\n\t\t\tTEXCOORD_0: 'uv',\n\t\t\tTEXCOORD_1: 'uv2',\n\t\t\tCOLOR_0: 'color',\n\t\t\tWEIGHTS_0: 'skinWeight',\n\t\t\tJOINTS_0: 'skinIndex',\n\t\t};\n\n\t\tvar PATH_PROPERTIES = {\n\t\t\tscale: 'scale',\n\t\t\ttranslation: 'position',\n\t\t\trotation: 'quaternion',\n\t\t\tweights: 'morphTargetInfluences'\n\t\t};\n\n\t\tvar INTERPOLATION = {\n\t\t\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t\t                        // keyframe track will be initialized with a default interpolation type, then modified.\n\t\t\tLINEAR: InterpolateLinear,\n\t\t\tSTEP: InterpolateDiscrete\n\t\t};\n\n\t\tvar ALPHA_MODES = {\n\t\t\tOPAQUE: 'OPAQUE',\n\t\t\tMASK: 'MASK',\n\t\t\tBLEND: 'BLEND'\n\t\t};\n\n\t\t/* UTILITY FUNCTIONS */\n\n\t\tfunction resolveURL( url, path ) {\n\n\t\t\t// Invalid URL\n\t\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t\t// Host Relative URL\n\t\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t\t}\n\n\t\t\t// Absolute URL http://,https://,//\n\t\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t\t// Data URI\n\t\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t\t// Blob URL\n\t\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t\t// Relative URL\n\t\t\treturn path + url;\n\n\t\t}\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n\t\t */\n\t\tfunction createDefaultMaterial( cache ) {\n\n\t\t\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\t\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\t\t\tcolor: 0xFFFFFF,\n\t\t\t\t\temissive: 0x000000,\n\t\t\t\t\tmetalness: 1,\n\t\t\t\t\troughness: 1,\n\t\t\t\t\ttransparent: false,\n\t\t\t\t\tdepthTest: true,\n\t\t\t\t\tside: FrontSide\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn cache[ 'DefaultMaterial' ];\n\n\t\t}\n\n\t\tfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t\t\t// Add unknown glTF extensions to an object's userData.\n\n\t\t\tfor ( var name in objectDef.extensions ) {\n\n\t\t\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * @param {Object3D|Material|BufferGeometry} object\n\t\t * @param {GLTF.definition} gltfDef\n\t\t */\n\t\tfunction assignExtrasToUserData( object, gltfDef ) {\n\n\t\t\tif ( gltfDef.extras !== undefined ) {\n\n\t\t\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n\t\t *\n\t\t * @param {BufferGeometry} geometry\n\t\t * @param {Array<GLTF.Target>} targets\n\t\t * @param {GLTFParser} parser\n\t\t * @return {Promise<BufferGeometry>}\n\t\t */\n\t\tfunction addMorphTargets( geometry, targets, parser ) {\n\n\t\t\tvar hasMorphPosition = false;\n\t\t\tvar hasMorphNormal = false;\n\n\t\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\t\tvar target = targets[ i ];\n\n\t\t\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\t\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\n\t\t\t\tif ( hasMorphPosition && hasMorphNormal ) break;\n\n\t\t\t}\n\n\t\t\tif ( ! hasMorphPosition && ! hasMorphNormal ) return Promise.resolve( geometry );\n\n\t\t\tvar pendingPositionAccessors = [];\n\t\t\tvar pendingNormalAccessors = [];\n\n\t\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\t\tvar target = targets[ i ];\n\n\t\t\t\tif ( hasMorphPosition ) {\n\n\t\t\t\t\tvar pendingAccessor = target.POSITION !== undefined\n\t\t\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t\t\t: geometry.attributes.position;\n\n\t\t\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasMorphNormal ) {\n\n\t\t\t\t\tvar pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t\t\t: geometry.attributes.normal;\n\n\t\t\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( [\n\t\t\t\tPromise.all( pendingPositionAccessors ),\n\t\t\t\tPromise.all( pendingNormalAccessors )\n\t\t\t] ).then( function ( accessors ) {\n\n\t\t\t\tvar morphPositions = accessors[ 0 ];\n\t\t\t\tvar morphNormals = accessors[ 1 ];\n\n\t\t\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\t\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t\t\treturn geometry;\n\n\t\t\t} );\n\n\t\t}\n\n\t\t/**\n\t\t * @param {Mesh} mesh\n\t\t * @param {GLTF.Mesh} meshDef\n\t\t */\n\t\tfunction updateMorphTargets( mesh, meshDef ) {\n\n\t\t\tmesh.updateMorphTargets();\n\n\t\t\tif ( meshDef.weights !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\t\t\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\t\t\tvar targetNames = meshDef.extras.targetNames;\n\n\t\t\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( var i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction createPrimitiveKey( primitiveDef ) {\n\n\t\t\tvar dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\t\t\tvar geometryKey;\n\n\t\t\tif ( dracoExtension ) {\n\n\t\t\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t\t\t} else {\n\n\t\t\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t\t\t}\n\n\t\t\treturn geometryKey;\n\n\t\t}\n\n\t\tfunction createAttributesKey( attributes ) {\n\n\t\t\tvar attributesKey = '';\n\n\t\t\tvar keys = Object.keys( attributes ).sort();\n\n\t\t\tfor ( var i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t\t\t}\n\n\t\t\treturn attributesKey;\n\n\t\t}\n\n\t\t/* GLTF PARSER */\n\n\t\tfunction GLTFParser( json, options ) {\n\n\t\t\tthis.json = json || {};\n\t\t\tthis.extensions = {};\n\t\t\tthis.plugins = {};\n\t\t\tthis.options = options || {};\n\n\t\t\t// loader object cache\n\t\t\tthis.cache = new GLTFRegistry();\n\n\t\t\t// associations between Three.js objects and glTF elements\n\t\t\tthis.associations = new Map();\n\n\t\t\t// BufferGeometry caching\n\t\t\tthis.primitiveCache = {};\n\n\t\t\t// Object3D instance caches\n\t\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\t\t// Track node names, to ensure no duplicates\n\t\t\tthis.nodeNamesUsed = {};\n\n\t\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\t\t\tif ( typeof createImageBitmap !== 'undefined' && /Firefox/.test( navigator.userAgent ) === false ) {\n\n\t\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t\t} else {\n\n\t\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t\t}\n\n\t\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\n\t\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t\t}\n\n\t\t}\n\n\t\tGLTFParser.prototype.setExtensions = function ( extensions ) {\n\n\t\t\tthis.extensions = extensions;\n\n\t\t};\n\n\t\tGLTFParser.prototype.setPlugins = function ( plugins ) {\n\n\t\t\tthis.plugins = plugins;\n\n\t\t};\n\n\t\tGLTFParser.prototype.parse = function ( onLoad, onError ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar json = this.json;\n\t\t\tvar extensions = this.extensions;\n\n\t\t\t// Clear the loader cache\n\t\t\tthis.cache.removeAll();\n\n\t\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t\t} );\n\n\t\t\tPromise.all( [\n\n\t\t\t\tthis.getDependencies( 'scene' ),\n\t\t\t\tthis.getDependencies( 'animation' ),\n\t\t\t\tthis.getDependencies( 'camera' ),\n\n\t\t\t] ).then( function ( dependencies ) {\n\n\t\t\t\tvar result = {\n\t\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\t\tasset: json.asset,\n\t\t\t\t\tparser: parser,\n\t\t\t\t\tuserData: {}\n\t\t\t\t};\n\n\t\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} ).catch( onError );\n\n\t\t};\n\n\t\t/**\n\t\t * Marks the special nodes/meshes in json for efficient parse.\n\t\t */\n\t\tGLTFParser.prototype._markDefs = function () {\n\n\t\t\tvar nodeDefs = this.json.nodes || [];\n\t\t\tvar skinDefs = this.json.skins || [];\n\t\t\tvar meshDefs = this.json.meshes || [];\n\n\t\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\t\tfor ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\t\tvar joints = skinDefs[ skinIndex ].joints;\n\n\t\t\t\tfor ( var i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t\t// as well as skeleton joints.\n\t\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\t/**\n\t\t * Counts references to shared node / Object3D resources. These resources\n\t\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t\t * Textures) can be reused directly and are not marked here.\n\t\t *\n\t\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t\t */\n\t\tGLTFParser.prototype._addNodeRef = function ( cache, index ) {\n\n\t\t\tif ( index === undefined ) return;\n\n\t\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t\t}\n\n\t\t\tcache.refs[ index ] ++;\n\n\t\t};\n\n\t\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t\tGLTFParser.prototype._getNodeRef = function ( cache, index, object ) {\n\n\t\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\t\tvar ref = object.clone();\n\n\t\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\t\treturn ref;\n\n\t\t};\n\n\t\tGLTFParser.prototype._invokeOne = function ( func ) {\n\n\t\t\tvar extensions = Object.values( this.plugins );\n\t\t\textensions.push( this );\n\n\t\t\tfor ( var i = 0; i < extensions.length; i ++ ) {\n\n\t\t\t\tvar result = func( extensions[ i ] );\n\n\t\t\t\tif ( result ) return result;\n\n\t\t\t}\n\n\t\t};\n\n\t\tGLTFParser.prototype._invokeAll = function ( func ) {\n\n\t\t\tvar extensions = Object.values( this.plugins );\n\t\t\textensions.unshift( this );\n\n\t\t\tvar pending = [];\n\n\t\t\tfor ( var i = 0; i < extensions.length; i ++ ) {\n\n\t\t\t\tvar result = func( extensions[ i ] );\n\n\t\t\t\tif ( result ) pending.push( result );\n\n\t\t\t}\n\n\t\t\treturn pending;\n\n\t\t};\n\n\t\t/**\n\t\t * Requests the specified dependency asynchronously, with caching.\n\t\t * @param {string} type\n\t\t * @param {number} index\n\t\t * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}\n\t\t */\n\t\tGLTFParser.prototype.getDependency = function ( type, index ) {\n\n\t\t\tvar cacheKey = type + ':' + index;\n\t\t\tvar dependency = this.cache.get( cacheKey );\n\n\t\t\tif ( ! dependency ) {\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'scene':\n\t\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'node':\n\t\t\t\t\t\tdependency = this.loadNode( index );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mesh':\n\t\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'accessor':\n\t\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bufferView':\n\t\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'buffer':\n\t\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'material':\n\t\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skin':\n\t\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'animation':\n\t\t\t\t\t\tdependency = this.loadAnimation( index );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'camera':\n\t\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t\t}\n\n\t\t\treturn dependency;\n\n\t\t};\n\n\t\t/**\n\t\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t\t * @param {string} type\n\t\t * @return {Promise<Array<Object>>}\n\t\t */\n\t\tGLTFParser.prototype.getDependencies = function ( type ) {\n\n\t\t\tvar dependencies = this.cache.get( type );\n\n\t\t\tif ( ! dependencies ) {\n\n\t\t\t\tvar parser = this;\n\t\t\t\tvar defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t\t} ) );\n\n\t\t\t\tthis.cache.add( type, dependencies );\n\n\t\t\t}\n\n\t\t\treturn dependencies;\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t\t * @param {number} bufferIndex\n\t\t * @return {Promise<ArrayBuffer>}\n\t\t */\n\t\tGLTFParser.prototype.loadBuffer = function ( bufferIndex ) {\n\n\t\t\tvar bufferDef = this.json.buffers[ bufferIndex ];\n\t\t\tvar loader = this.fileLoader;\n\n\t\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t\t}\n\n\t\t\t// If present, GLB container is required to be the first buffer.\n\t\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t\t}\n\n\t\t\tvar options = this.options;\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t\t * @param {number} bufferViewIndex\n\t\t * @return {Promise<ArrayBuffer>}\n\t\t */\n\t\tGLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {\n\n\t\t\tvar bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\t\tvar byteLength = bufferViewDef.byteLength || 0;\n\t\t\t\tvar byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t\t * @param {number} accessorIndex\n\t\t * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n\t\t */\n\t\tGLTFParser.prototype.loadAccessor = function ( accessorIndex ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar json = this.json;\n\n\t\t\tvar accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\t\t// Ignore empty accessors, which may be used to declare runtime\n\t\t\t\t// information about attributes coming from another source (e.g. Draco\n\t\t\t\t// compression extension).\n\t\t\t\treturn Promise.resolve( null );\n\n\t\t\t}\n\n\t\t\tvar pendingBufferViews = [];\n\n\t\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t\t} else {\n\n\t\t\t\tpendingBufferViews.push( null );\n\n\t\t\t}\n\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\t\tvar bufferView = bufferViews[ 0 ];\n\n\t\t\t\tvar itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\t\tvar TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\t\tvar elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\t\tvar itemBytes = elementBytes * itemSize;\n\t\t\t\tvar byteOffset = accessorDef.byteOffset || 0;\n\t\t\t\tvar byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\t\tvar normalized = accessorDef.normalized === true;\n\t\t\t\tvar array, bufferAttribute;\n\n\t\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\t\tvar ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\t\tvar ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\t\tvar ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t\t}\n\n\t\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\t\tvar itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\t\tvar TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\t\tvar byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\t\tvar byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\t\tvar sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\t\tvar sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar index = sparseIndices[ i ];\n\n\t\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn bufferAttribute;\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t\t * @param {number} textureIndex\n\t\t * @return {Promise<THREE.Texture>}\n\t\t */\n\t\tGLTFParser.prototype.loadTexture = function ( textureIndex ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar json = this.json;\n\t\t\tvar options = this.options;\n\n\t\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\t\tvar textureExtensions = textureDef.extensions || {};\n\n\t\t\tvar source;\n\n\t\t\tif ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\n\n\t\t\t\tsource = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];\n\n\t\t\t} else {\n\n\t\t\t\tsource = json.images[ textureDef.source ];\n\n\t\t\t}\n\n\t\t\tvar loader;\n\n\t\t\tif ( source.uri ) {\n\n\t\t\t\tloader = options.manager.getHandler( source.uri );\n\n\t\t\t}\n\n\t\t\tif ( ! loader ) {\n\n\t\t\t\tloader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]\n\t\t\t\t\t? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader\n\t\t\t\t\t: this.textureLoader;\n\n\t\t\t}\n\n\t\t\treturn this.loadTextureImage( textureIndex, source, loader );\n\n\t\t};\n\n\t\tGLTFParser.prototype.loadTextureImage = function ( textureIndex, source, loader ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar json = this.json;\n\t\t\tvar options = this.options;\n\n\t\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\t\tvar URL = self.URL || self.webkitURL;\n\n\t\t\tvar sourceURI = source.uri;\n\t\t\tvar isObjectURL = false;\n\t\t\tvar hasAlpha = true;\n\n\t\t\tif ( source.mimeType === 'image/jpeg' ) hasAlpha = false;\n\n\t\t\tif ( source.bufferView !== undefined ) {\n\n\t\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\t\tsourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\t\tif ( source.mimeType === 'image/png' ) {\n\n\t\t\t\t\t\t// Inspect the PNG 'IHDR' chunk to determine whether the image could have an\n\t\t\t\t\t\t// alpha channel. This check is conservative — the image could have an alpha\n\t\t\t\t\t\t// channel with all values == 1, and the indexed type (colorType == 3) only\n\t\t\t\t\t\t// sometimes contains alpha.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header\n\t\t\t\t\t\tvar colorType = new DataView( bufferView, 25, 1 ).getUint8( 0, false );\n\t\t\t\t\t\thasAlpha = colorType === 6 || colorType === 4 || colorType === 3;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tisObjectURL = true;\n\t\t\t\t\tvar blob = new Blob( [ bufferView ], { type: source.mimeType } );\n\t\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\t\treturn sourceURI;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\t\tvar onLoad = resolve;\n\n\t\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\t\tresolve( new CanvasTexture( imageBitmap ) );\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t\tloader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t\t} );\n\n\t\t\t} ).then( function ( texture ) {\n\n\t\t\t\t// Clean up resources and configure Texture.\n\n\t\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.flipY = false;\n\n\t\t\t\tif ( textureDef.name ) texture.name = textureDef.name;\n\n\t\t\t\t// When there is definitely no alpha channel in the texture, set RGBFormat to save space.\n\t\t\t\tif ( ! hasAlpha ) texture.format = RGBFormat;\n\n\t\t\t\tvar samplers = json.samplers || {};\n\t\t\t\tvar sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\t\tparser.associations.set( texture, {\n\t\t\t\t\ttype: 'textures',\n\t\t\t\t\tindex: textureIndex\n\t\t\t\t} );\n\n\t\t\t\treturn texture;\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Asynchronously assigns a texture to the given material parameters.\n\t\t * @param {Object} materialParams\n\t\t * @param {string} mapName\n\t\t * @param {Object} mapDef\n\t\t * @return {Promise}\n\t\t */\n\t\tGLTFParser.prototype.assignTexture = function ( materialParams, mapName, mapDef ) {\n\n\t\t\tvar parser = this;\n\n\t\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\t\t// Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured\n\t\t\t\t// However, we will copy UV set 0 to UV set 1 on demand for aoMap\n\t\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\t\tvar transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\t\tif ( transform ) {\n\n\t\t\t\t\t\tvar gltfReference = parser.associations.get( texture );\n\t\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t\t * already has a material (generated from the glTF material options alone)\n\t\t * but reuse of the same glTF material may require multiple threejs materials\n\t\t * to accomodate different primitive types, defines, etc. New materials will\n\t\t * be created if necessary, and reused from a cache.\n\t\t * @param  {Object3D} mesh Mesh, Line, or Points instance.\n\t\t */\n\t\tGLTFParser.prototype.assignFinalMaterial = function ( mesh ) {\n\n\t\t\tvar geometry = mesh.geometry;\n\t\t\tvar material = mesh.material;\n\n\t\t\tvar useVertexTangents = geometry.attributes.tangent !== undefined;\n\t\t\tvar useVertexColors = geometry.attributes.color !== undefined;\n\t\t\tvar useFlatShading = geometry.attributes.normal === undefined;\n\t\t\tvar useSkinning = mesh.isSkinnedMesh === true;\n\t\t\tvar useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;\n\t\t\tvar useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;\n\n\t\t\tif ( mesh.isPoints ) {\n\n\t\t\t\tvar cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\t\tvar pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t\t}\n\n\t\t\t\tmaterial = pointsMaterial;\n\n\t\t\t} else if ( mesh.isLine ) {\n\n\t\t\t\tvar cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\t\tvar lineMaterial = this.cache.get( cacheKey );\n\n\t\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\t\tlineMaterial.color.copy( material.color );\n\n\t\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t\t}\n\n\t\t\t\tmaterial = lineMaterial;\n\n\t\t\t}\n\n\t\t\t// Clone the material if it will be modified\n\t\t\tif ( useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {\n\n\t\t\t\tvar cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\n\t\t\t\tif ( useSkinning ) cacheKey += 'skinning:';\n\t\t\t\tif ( useVertexTangents ) cacheKey += 'vertex-tangents:';\n\t\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\t\t\t\tif ( useMorphTargets ) cacheKey += 'morph-targets:';\n\t\t\t\tif ( useMorphNormals ) cacheKey += 'morph-normals:';\n\n\t\t\t\tvar cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\t\tif ( useSkinning ) cachedMaterial.skinning = true;\n\t\t\t\t\tif ( useVertexTangents ) cachedMaterial.vertexTangents = true;\n\t\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\t\t\t\t\tif ( useMorphTargets ) cachedMaterial.morphTargets = true;\n\t\t\t\t\tif ( useMorphNormals ) cachedMaterial.morphNormals = true;\n\n\t\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t\t}\n\n\t\t\t\tmaterial = cachedMaterial;\n\n\t\t\t}\n\n\t\t\t// workarounds for mesh and geometry\n\n\t\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\n\n\t\t\t\tgeometry.setAttribute( 'uv2', geometry.attributes.uv );\n\n\t\t\t}\n\n\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\tif ( material.normalScale && ! useVertexTangents ) {\n\n\t\t\t\tmaterial.normalScale.y = - material.normalScale.y;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalScale && ! useVertexTangents ) {\n\n\t\t\t\tmaterial.clearcoatNormalScale.y = - material.clearcoatNormalScale.y;\n\n\t\t\t}\n\n\t\t\tmesh.material = material;\n\n\t\t};\n\n\t\tGLTFParser.prototype.getMaterialType = function ( /* materialIndex */ ) {\n\n\t\t\treturn MeshStandardMaterial;\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t\t * @param {number} materialIndex\n\t\t * @return {Promise<Material>}\n\t\t */\n\t\tGLTFParser.prototype.loadMaterial = function ( materialIndex ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar json = this.json;\n\t\t\tvar extensions = this.extensions;\n\t\t\tvar materialDef = json.materials[ materialIndex ];\n\n\t\t\tvar materialType;\n\t\t\tvar materialParams = {};\n\t\t\tvar materialExtensions = materialDef.extensions || {};\n\n\t\t\tvar pending = [];\n\n\t\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\t\tvar sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\t\tmaterialType = sgExtension.getMaterialType();\n\t\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\t\tvar kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t\t} else {\n\n\t\t\t\t// Specification:\n\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );\n\n\t\t\t\t}\n\n\t\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t\t}\n\n\t\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t\t} );\n\n\t\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t\t} ) ) );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t\t}\n\n\t\t\tvar alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\t\tmaterialParams.transparent = true;\n\n\t\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\t\tmaterialParams.depthWrite = false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterialParams.transparent = false;\n\n\t\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\t\tmaterialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\t\tmaterialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture ) );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\t\tvar material;\n\n\t\t\t\tif ( materialType === GLTFMeshStandardSGMaterial ) {\n\n\t\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterial = new materialType( materialParams );\n\n\t\t\t\t}\n\n\t\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\t\t// baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.\n\t\t\t\tif ( material.map ) material.map.encoding = sRGBEncoding;\n\t\t\t\tif ( material.emissiveMap ) material.emissiveMap.encoding = sRGBEncoding;\n\n\t\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\t\tparser.associations.set( material, { type: 'materials', index: materialIndex } );\n\n\t\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\t\treturn material;\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/** When Object3D instances are targeted by animation, they need unique names. */\n\t\tGLTFParser.prototype.createUniqueName = function ( originalName ) {\n\n\t\t\tvar sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\t\tvar name = sanitizedName;\n\n\t\t\tfor ( var i = 1; this.nodeNamesUsed[ name ]; ++ i ) {\n\n\t\t\t\tname = sanitizedName + '_' + i;\n\n\t\t\t}\n\n\t\t\tthis.nodeNamesUsed[ name ] = true;\n\n\t\t\treturn name;\n\n\t\t};\n\n\t\t/**\n\t\t * @param {BufferGeometry} geometry\n\t\t * @param {GLTF.Primitive} primitiveDef\n\t\t * @param {GLTFParser} parser\n\t\t */\n\t\tfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\t\t\tvar attributes = primitiveDef.attributes;\n\n\t\t\tvar box = new Box3();\n\n\t\t\tif ( attributes.POSITION !== undefined ) {\n\n\t\t\t\tvar accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\t\t\tvar min = accessor.min;\n\t\t\t\tvar max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\tbox.set(\n\t\t\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar targets = primitiveDef.targets;\n\n\t\t\tif ( targets !== undefined ) {\n\n\t\t\t\tvar maxDisplacement = new Vector3();\n\t\t\t\tvar vector = new Vector3();\n\n\t\t\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar target = targets[ i ];\n\n\t\t\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\t\t\tvar accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\t\t\tvar min = accessor.min;\n\t\t\t\t\t\tvar max = accessor.max;\n\n\t\t\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\t\t\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\t\t\tbox.expandByVector( maxDisplacement );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingBox = box;\n\n\t\t\tvar sphere = new Sphere();\n\n\t\t\tbox.getCenter( sphere.center );\n\t\t\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\t\t\tgeometry.boundingSphere = sphere;\n\n\t\t}\n\n\t\t/**\n\t\t * @param {BufferGeometry} geometry\n\t\t * @param {GLTF.Primitive} primitiveDef\n\t\t * @param {GLTFParser} parser\n\t\t * @return {Promise<BufferGeometry>}\n\t\t */\n\t\tfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\t\t\tvar attributes = primitiveDef.attributes;\n\n\t\t\tvar pending = [];\n\n\t\t\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\t\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t\t\t.then( function ( accessor ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( var gltfAttributeName in attributes ) {\n\n\t\t\t\tvar threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\t\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\t\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t\t\t}\n\n\t\t\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\t\t\tvar accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\t\t\tgeometry.setIndex( accessor );\n\n\t\t\t\t} );\n\n\t\t\t\tpending.push( accessor );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( geometry, primitiveDef );\n\n\t\t\tcomputeBounds( geometry, primitiveDef, parser );\n\n\t\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\t\treturn primitiveDef.targets !== undefined\n\t\t\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t\t\t: geometry;\n\n\t\t\t} );\n\n\t\t}\n\n\t\t/**\n\t\t * @param {BufferGeometry} geometry\n\t\t * @param {Number} drawMode\n\t\t * @return {BufferGeometry}\n\t\t */\n\t\tfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\t\t\tvar index = geometry.getIndex();\n\n\t\t\t// generate index if not present\n\n\t\t\tif ( index === null ) {\n\n\t\t\t\tvar indices = [];\n\n\t\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\t\tif ( position !== undefined ) {\n\n\t\t\t\t\tfor ( var i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\t\tindices.push( i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\t\treturn geometry;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar numberOfTriangles = index.count - 2;\n\t\t\tvar newIndices = [];\n\n\t\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\t\tfor ( var i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\t\tfor ( var i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t\t}\n\n\t\t\t// build final geometry\n\n\t\t\tvar newGeometry = geometry.clone();\n\t\t\tnewGeometry.setIndex( newIndices );\n\n\t\t\treturn newGeometry;\n\n\t\t}\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t\t *\n\t\t * Creates BufferGeometries from primitives.\n\t\t *\n\t\t * @param {Array<GLTF.Primitive>} primitives\n\t\t * @return {Promise<Array<BufferGeometry>>}\n\t\t */\n\t\tGLTFParser.prototype.loadGeometries = function ( primitives ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar extensions = this.extensions;\n\t\t\tvar cache = this.primitiveCache;\n\n\t\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tvar pending = [];\n\n\t\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\t\tvar primitive = primitives[ i ];\n\t\t\t\tvar cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t\t// See if we've already created this geometry\n\t\t\t\tvar cached = cache[ cacheKey ];\n\n\t\t\t\tif ( cached ) {\n\n\t\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\t\tpending.push( cached.promise );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar geometryPromise;\n\n\t\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Cache this geometry\n\t\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t\t * @param {number} meshIndex\n\t\t * @return {Promise<Group|Mesh|SkinnedMesh>}\n\t\t */\n\t\tGLTFParser.prototype.loadMesh = function ( meshIndex ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar json = this.json;\n\t\t\tvar extensions = this.extensions;\n\n\t\t\tvar meshDef = json.meshes[ meshIndex ];\n\t\t\tvar primitives = meshDef.primitives;\n\n\t\t\tvar pending = [];\n\n\t\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\t\tvar material = primitives[ i ].material === undefined\n\t\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\t\tpending.push( material );\n\n\t\t\t}\n\n\t\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\t\tvar materials = results.slice( 0, results.length - 1 );\n\t\t\t\tvar geometries = results[ results.length - 1 ];\n\n\t\t\t\tvar meshes = [];\n\n\t\t\t\tfor ( var i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar geometry = geometries[ i ];\n\t\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\t\t// 1. create Mesh\n\n\t\t\t\t\tvar mesh;\n\n\t\t\t\t\tvar material = materials[ i ];\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\t\tif ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) {\n\n\t\t\t\t\t\t\t// we normalize floating point skin weight array to fix malformed assets (see #15319)\n\t\t\t\t\t\t\t// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs\n\t\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\t\tmeshes.push( mesh );\n\n\t\t\t\t}\n\n\t\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tvar group = new Group();\n\n\t\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn group;\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t\t * @param {number} cameraIndex\n\t\t * @return {Promise<THREE.Camera>}\n\t\t */\n\t\tGLTFParser.prototype.loadCamera = function ( cameraIndex ) {\n\n\t\t\tvar camera;\n\t\t\tvar cameraDef = this.json.cameras[ cameraIndex ];\n\t\t\tvar params = cameraDef[ cameraDef.type ];\n\n\t\t\tif ( ! params ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t\t}\n\n\t\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\t\treturn Promise.resolve( camera );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t\t * @param {number} skinIndex\n\t\t * @return {Promise<Object>}\n\t\t */\n\t\tGLTFParser.prototype.loadSkin = function ( skinIndex ) {\n\n\t\t\tvar skinDef = this.json.skins[ skinIndex ];\n\n\t\t\tvar skinEntry = { joints: skinDef.joints };\n\n\t\t\tif ( skinDef.inverseBindMatrices === undefined ) {\n\n\t\t\t\treturn Promise.resolve( skinEntry );\n\n\t\t\t}\n\n\t\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\n\n\t\t\t\tskinEntry.inverseBindMatrices = accessor;\n\n\t\t\t\treturn skinEntry;\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t\t * @param {number} animationIndex\n\t\t * @return {Promise<AnimationClip>}\n\t\t */\n\t\tGLTFParser.prototype.loadAnimation = function ( animationIndex ) {\n\n\t\t\tvar json = this.json;\n\n\t\t\tvar animationDef = json.animations[ animationIndex ];\n\n\t\t\tvar pendingNodes = [];\n\t\t\tvar pendingInputAccessors = [];\n\t\t\tvar pendingOutputAccessors = [];\n\t\t\tvar pendingSamplers = [];\n\t\t\tvar pendingTargets = [];\n\n\t\t\tfor ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\t\tvar channel = animationDef.channels[ i ];\n\t\t\t\tvar sampler = animationDef.samplers[ channel.sampler ];\n\t\t\t\tvar target = channel.target;\n\t\t\t\tvar name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.\n\t\t\t\tvar input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\t\tvar output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\t\tpendingSamplers.push( sampler );\n\t\t\t\tpendingTargets.push( target );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tPromise.all( pendingNodes ),\n\t\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\t\tPromise.all( pendingSamplers ),\n\t\t\t\tPromise.all( pendingTargets )\n\n\t\t\t] ).then( function ( dependencies ) {\n\n\t\t\t\tvar nodes = dependencies[ 0 ];\n\t\t\t\tvar inputAccessors = dependencies[ 1 ];\n\t\t\t\tvar outputAccessors = dependencies[ 2 ];\n\t\t\t\tvar samplers = dependencies[ 3 ];\n\t\t\t\tvar targets = dependencies[ 4 ];\n\n\t\t\t\tvar tracks = [];\n\n\t\t\t\tfor ( var i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar node = nodes[ i ];\n\t\t\t\t\tvar inputAccessor = inputAccessors[ i ];\n\t\t\t\t\tvar outputAccessor = outputAccessors[ i ];\n\t\t\t\t\tvar sampler = samplers[ i ];\n\t\t\t\t\tvar target = targets[ i ];\n\n\t\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\t\tnode.updateMatrix();\n\t\t\t\t\tnode.matrixAutoUpdate = true;\n\n\t\t\t\t\tvar TypedKeyframeTrack;\n\n\t\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\t\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase PATH_PROPERTIES.position:\n\t\t\t\t\t\tcase PATH_PROPERTIES.scale:\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\t\tvar interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\t\t\t\t\tvar targetNames = [];\n\n\t\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\t\t\t\t// Node may be a Group (glTF mesh with several primitives) or a Mesh.\n\t\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\t\tif ( object.isMesh === true && object.morphTargetInfluences ) {\n\n\t\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetNames.push( targetName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar outputArray = outputAccessor.array;\n\n\t\t\t\t\tif ( outputAccessor.normalized ) {\n\n\t\t\t\t\t\tvar scale;\n\n\t\t\t\t\t\tif ( outputArray.constructor === Int8Array ) {\n\n\t\t\t\t\t\t\tscale = 1 / 127;\n\n\t\t\t\t\t\t} else if ( outputArray.constructor === Uint8Array ) {\n\n\t\t\t\t\t\t\tscale = 1 / 255;\n\n\t\t\t\t\t\t} else if ( outputArray.constructor == Int16Array ) {\n\n\t\t\t\t\t\t\tscale = 1 / 32767;\n\n\t\t\t\t\t\t} else if ( outputArray.constructor === Uint16Array ) {\n\n\t\t\t\t\t\t\tscale = 1 / 65535;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported output accessor component type.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar scaled = new Float32Array( outputArray.length );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\toutputArray = scaled;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar track = new TypedKeyframeTrack(\n\t\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\t\t\t\tinputAccessor.array,\n\t\t\t\t\t\t\toutputArray,\n\t\t\t\t\t\t\tinterpolation\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Override interpolation with custom factory method.\n\t\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\t\t\t\t\t\treturn new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttracks.push( track );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar name = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\t\t\treturn new AnimationClip( name, undefined, tracks );\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t\t * @param {number} nodeIndex\n\t\t * @return {Promise<Object3D>}\n\t\t */\n\t\tGLTFParser.prototype.loadNode = function ( nodeIndex ) {\n\n\t\t\tvar json = this.json;\n\t\t\tvar extensions = this.extensions;\n\t\t\tvar parser = this;\n\n\t\t\tvar nodeDef = json.nodes[ nodeIndex ];\n\n\t\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\t\tvar nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\t\treturn ( function () {\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\t\t\t\tvar node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\t\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\t\t\t\tfor ( var i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn node;\n\n\t\t\t\t\t} ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t\t\t} ) );\n\n\t\t\t\t}\n\n\t\t\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t\t\t} ).forEach( function ( promise ) {\n\n\t\t\t\t\tpending.push( promise );\n\n\t\t\t\t} );\n\n\t\t\t\treturn Promise.all( pending );\n\n\t\t\t}() ).then( function ( objects ) {\n\n\t\t\t\tvar node;\n\n\t\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\t\tnode = new Bone();\n\n\t\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\t\tnode = new Group();\n\n\t\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnode = new Object3D();\n\n\t\t\t\t}\n\n\t\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\t\tfor ( var i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\t\tnode.name = nodeName;\n\n\t\t\t\t}\n\n\t\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\t\tvar matrix = new Matrix4();\n\t\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tparser.associations.set( node, { type: 'nodes', index: nodeIndex } );\n\n\t\t\t\treturn node;\n\n\t\t\t} );\n\n\t\t};\n\n\t\t/**\n\t\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t\t * @param {number} sceneIndex\n\t\t * @return {Promise<Group>}\n\t\t */\n\t\tGLTFParser.prototype.loadScene = function () {\n\n\t\t\t// scene node hierachy builder\n\n\t\t\tfunction buildNodeHierachy( nodeId, parentObject, json, parser ) {\n\n\t\t\t\tvar nodeDef = json.nodes[ nodeId ];\n\n\t\t\t\treturn parser.getDependency( 'node', nodeId ).then( function ( node ) {\n\n\t\t\t\t\tif ( nodeDef.skin === undefined ) return node;\n\n\t\t\t\t\t// build skeleton here as well\n\n\t\t\t\t\tvar skinEntry;\n\n\t\t\t\t\treturn parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) {\n\n\t\t\t\t\t\tskinEntry = skin;\n\n\t\t\t\t\t\tvar pendingJoints = [];\n\n\t\t\t\t\t\tfor ( var i = 0, il = skinEntry.joints.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tpendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn Promise.all( pendingJoints );\n\n\t\t\t\t\t} ).then( function ( jointNodes ) {\n\n\t\t\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\t\t\tif ( ! mesh.isMesh ) return;\n\n\t\t\t\t\t\t\tvar bones = [];\n\t\t\t\t\t\t\tvar boneInverses = [];\n\n\t\t\t\t\t\t\tfor ( var j = 0, jl = jointNodes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tvar jointNode = jointNodes[ j ];\n\n\t\t\t\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\t\t\t\tvar mat = new Matrix4();\n\n\t\t\t\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\n\n\t\t\t\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinEntry.joints[ j ] );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn node;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} ).then( function ( node ) {\n\n\t\t\t\t\t// build node hierachy\n\n\t\t\t\t\tparentObject.add( node );\n\n\t\t\t\t\tvar pending = [];\n\n\t\t\t\t\tif ( nodeDef.children ) {\n\n\t\t\t\t\t\tvar children = nodeDef.children;\n\n\t\t\t\t\t\tfor ( var i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tvar child = children[ i ];\n\t\t\t\t\t\t\tpending.push( buildNodeHierachy( child, node, json, parser ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.all( pending );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn function loadScene( sceneIndex ) {\n\n\t\t\t\tvar json = this.json;\n\t\t\t\tvar extensions = this.extensions;\n\t\t\t\tvar sceneDef = this.json.scenes[ sceneIndex ];\n\t\t\t\tvar parser = this;\n\n\t\t\t\t// Loader returns Group, not Scene.\n\t\t\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\t\t\tvar scene = new Group();\n\t\t\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\t\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\t\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\t\t\tvar nodeIds = sceneDef.nodes || [];\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tfor ( var i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\t\t\tpending.push( buildNodeHierachy( nodeIds[ i ], scene, json, parser ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\t\t\treturn scene;\n\n\t\t\t\t} );\n\n\t\t\t};\n\n\t\t}();\n\n\t\treturn GLTFLoader;\n\n\t} )();\n\n\t/**\n\t * @webxr-input-profiles/motion-controllers 1.0.0 https://github.com/immersive-web/webxr-input-profiles\n\t */\n\n\tconst Constants = {\n\t  Handedness: Object.freeze({\n\t    NONE: 'none',\n\t    LEFT: 'left',\n\t    RIGHT: 'right'\n\t  }),\n\n\t  ComponentState: Object.freeze({\n\t    DEFAULT: 'default',\n\t    TOUCHED: 'touched',\n\t    PRESSED: 'pressed'\n\t  }),\n\n\t  ComponentProperty: Object.freeze({\n\t    BUTTON: 'button',\n\t    X_AXIS: 'xAxis',\n\t    Y_AXIS: 'yAxis',\n\t    STATE: 'state'\n\t  }),\n\n\t  ComponentType: Object.freeze({\n\t    TRIGGER: 'trigger',\n\t    SQUEEZE: 'squeeze',\n\t    TOUCHPAD: 'touchpad',\n\t    THUMBSTICK: 'thumbstick',\n\t    BUTTON: 'button'\n\t  }),\n\n\t  ButtonTouchThreshold: 0.05,\n\n\t  AxisTouchThreshold: 0.1,\n\n\t  VisualResponseProperty: Object.freeze({\n\t    TRANSFORM: 'transform',\n\t    VISIBILITY: 'visibility'\n\t  })\n\t};\n\n\t/**\n\t * @description Static helper function to fetch a JSON file and turn it into a JS object\n\t * @param {string} path - Path to JSON file to be fetched\n\t */\n\tasync function fetchJsonFile(path) {\n\t  const response = await fetch(path);\n\t  if (!response.ok) {\n\t    throw new Error(response.statusText);\n\t  } else {\n\t    return response.json();\n\t  }\n\t}\n\n\tasync function fetchProfilesList(basePath) {\n\t  if (!basePath) {\n\t    throw new Error('No basePath supplied');\n\t  }\n\n\t  const profileListFileName = 'profilesList.json';\n\t  const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`);\n\t  return profilesList;\n\t}\n\n\tasync function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) {\n\t  if (!xrInputSource) {\n\t    throw new Error('No xrInputSource supplied');\n\t  }\n\n\t  if (!basePath) {\n\t    throw new Error('No basePath supplied');\n\t  }\n\n\t  // Get the list of profiles\n\t  const supportedProfilesList = await fetchProfilesList(basePath);\n\n\t  // Find the relative path to the first requested profile that is recognized\n\t  let match;\n\t  xrInputSource.profiles.some((profileId) => {\n\t    const supportedProfile = supportedProfilesList[profileId];\n\t    if (supportedProfile) {\n\t      match = {\n\t        profileId,\n\t        profilePath: `${basePath}/${supportedProfile.path}`,\n\t        deprecated: !!supportedProfile.deprecated\n\t      };\n\t    }\n\t    return !!match;\n\t  });\n\n\t  if (!match) {\n\t    if (!defaultProfile) {\n\t      throw new Error('No matching profile name found');\n\t    }\n\n\t    const supportedProfile = supportedProfilesList[defaultProfile];\n\t    if (!supportedProfile) {\n\t      throw new Error(`No matching profile name found and default profile \"${defaultProfile}\" missing.`);\n\t    }\n\n\t    match = {\n\t      profileId: defaultProfile,\n\t      profilePath: `${basePath}/${supportedProfile.path}`,\n\t      deprecated: !!supportedProfile.deprecated\n\t    };\n\t  }\n\n\t  const profile = await fetchJsonFile(match.profilePath);\n\n\t  let assetPath;\n\t  if (getAssetPath) {\n\t    let layout;\n\t    if (xrInputSource.handedness === 'any') {\n\t      layout = profile.layouts[Object.keys(profile.layouts)[0]];\n\t    } else {\n\t      layout = profile.layouts[xrInputSource.handedness];\n\t    }\n\t    if (!layout) {\n\t      throw new Error(\n\t        `No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}`\n\t      );\n\t    }\n\n\t    if (layout.assetPath) {\n\t      assetPath = match.profilePath.replace('profile.json', layout.assetPath);\n\t    }\n\t  }\n\n\t  return { profile, assetPath };\n\t}\n\n\t/** @constant {Object} */\n\tconst defaultComponentValues = {\n\t  xAxis: 0,\n\t  yAxis: 0,\n\t  button: 0,\n\t  state: Constants.ComponentState.DEFAULT\n\t};\n\n\t/**\n\t * @description Converts an X, Y coordinate from the range -1 to 1 (as reported by the Gamepad\n\t * API) to the range 0 to 1 (for interpolation). Also caps the X, Y values to be bounded within\n\t * a circle. This ensures that thumbsticks are not animated outside the bounds of their physical\n\t * range of motion and touchpads do not report touch locations off their physical bounds.\n\t * @param {number} x The original x coordinate in the range -1 to 1\n\t * @param {number} y The original y coordinate in the range -1 to 1\n\t */\n\tfunction normalizeAxes(x = 0, y = 0) {\n\t  let xAxis = x;\n\t  let yAxis = y;\n\n\t  // Determine if the point is outside the bounds of the circle\n\t  // and, if so, place it on the edge of the circle\n\t  const hypotenuse = Math.sqrt((x * x) + (y * y));\n\t  if (hypotenuse > 1) {\n\t    const theta = Math.atan2(y, x);\n\t    xAxis = Math.cos(theta);\n\t    yAxis = Math.sin(theta);\n\t  }\n\n\t  // Scale and move the circle so values are in the interpolation range.  The circle's origin moves\n\t  // from (0, 0) to (0.5, 0.5). The circle's radius scales from 1 to be 0.5.\n\t  const result = {\n\t    normalizedXAxis: (xAxis * 0.5) + 0.5,\n\t    normalizedYAxis: (yAxis * 0.5) + 0.5\n\t  };\n\t  return result;\n\t}\n\n\t/**\n\t * Contains the description of how the 3D model should visually respond to a specific user input.\n\t * This is accomplished by initializing the object with the name of a node in the 3D model and\n\t * property that need to be modified in response to user input, the name of the nodes representing\n\t * the allowable range of motion, and the name of the input which triggers the change. In response\n\t * to the named input changing, this object computes the appropriate weighting to use for\n\t * interpolating between the range of motion nodes.\n\t */\n\tclass VisualResponse {\n\t  constructor(visualResponseDescription) {\n\t    this.componentProperty = visualResponseDescription.componentProperty;\n\t    this.states = visualResponseDescription.states;\n\t    this.valueNodeName = visualResponseDescription.valueNodeName;\n\t    this.valueNodeProperty = visualResponseDescription.valueNodeProperty;\n\n\t    if (this.valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM) {\n\t      this.minNodeName = visualResponseDescription.minNodeName;\n\t      this.maxNodeName = visualResponseDescription.maxNodeName;\n\t    }\n\n\t    // Initializes the response's current value based on default data\n\t    this.value = 0;\n\t    this.updateFromComponent(defaultComponentValues);\n\t  }\n\n\t  /**\n\t   * Computes the visual response's interpolation weight based on component state\n\t   * @param {Object} componentValues - The component from which to update\n\t   * @param {number} xAxis - The reported X axis value of the component\n\t   * @param {number} yAxis - The reported Y axis value of the component\n\t   * @param {number} button - The reported value of the component's button\n\t   * @param {string} state - The component's active state\n\t   */\n\t  updateFromComponent({\n\t    xAxis, yAxis, button, state\n\t  }) {\n\t    const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis);\n\t    switch (this.componentProperty) {\n\t      case Constants.ComponentProperty.X_AXIS:\n\t        this.value = (this.states.includes(state)) ? normalizedXAxis : 0.5;\n\t        break;\n\t      case Constants.ComponentProperty.Y_AXIS:\n\t        this.value = (this.states.includes(state)) ? normalizedYAxis : 0.5;\n\t        break;\n\t      case Constants.ComponentProperty.BUTTON:\n\t        this.value = (this.states.includes(state)) ? button : 0;\n\t        break;\n\t      case Constants.ComponentProperty.STATE:\n\t        if (this.valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY) {\n\t          this.value = (this.states.includes(state));\n\t        } else {\n\t          this.value = this.states.includes(state) ? 1.0 : 0.0;\n\t        }\n\t        break;\n\t      default:\n\t        throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);\n\t    }\n\t  }\n\t}\n\n\tclass Component {\n\t  /**\n\t   * @param {Object} componentId - Id of the component\n\t   * @param {Object} componentDescription - Description of the component to be created\n\t   */\n\t  constructor(componentId, componentDescription) {\n\t    if (!componentId\n\t     || !componentDescription\n\t     || !componentDescription.visualResponses\n\t     || !componentDescription.gamepadIndices\n\t     || Object.keys(componentDescription.gamepadIndices).length === 0) {\n\t      throw new Error('Invalid arguments supplied');\n\t    }\n\n\t    this.id = componentId;\n\t    this.type = componentDescription.type;\n\t    this.rootNodeName = componentDescription.rootNodeName;\n\t    this.touchPointNodeName = componentDescription.touchPointNodeName;\n\n\t    // Build all the visual responses for this component\n\t    this.visualResponses = {};\n\t    Object.keys(componentDescription.visualResponses).forEach((responseName) => {\n\t      const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]);\n\t      this.visualResponses[responseName] = visualResponse;\n\t    });\n\n\t    // Set default values\n\t    this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices);\n\n\t    this.values = {\n\t      state: Constants.ComponentState.DEFAULT,\n\t      button: (this.gamepadIndices.button !== undefined) ? 0 : undefined,\n\t      xAxis: (this.gamepadIndices.xAxis !== undefined) ? 0 : undefined,\n\t      yAxis: (this.gamepadIndices.yAxis !== undefined) ? 0 : undefined\n\t    };\n\t  }\n\n\t  get data() {\n\t    const data = { id: this.id, ...this.values };\n\t    return data;\n\t  }\n\n\t  /**\n\t   * @description Poll for updated data based on current gamepad state\n\t   * @param {Object} gamepad - The gamepad object from which the component data should be polled\n\t   */\n\t  updateFromGamepad(gamepad) {\n\t    // Set the state to default before processing other data sources\n\t    this.values.state = Constants.ComponentState.DEFAULT;\n\n\t    // Get and normalize button\n\t    if (this.gamepadIndices.button !== undefined\n\t        && gamepad.buttons.length > this.gamepadIndices.button) {\n\t      const gamepadButton = gamepad.buttons[this.gamepadIndices.button];\n\t      this.values.button = gamepadButton.value;\n\t      this.values.button = (this.values.button < 0) ? 0 : this.values.button;\n\t      this.values.button = (this.values.button > 1) ? 1 : this.values.button;\n\n\t      // Set the state based on the button\n\t      if (gamepadButton.pressed || this.values.button === 1) {\n\t        this.values.state = Constants.ComponentState.PRESSED;\n\t      } else if (gamepadButton.touched || this.values.button > Constants.ButtonTouchThreshold) {\n\t        this.values.state = Constants.ComponentState.TOUCHED;\n\t      }\n\t    }\n\n\t    // Get and normalize x axis value\n\t    if (this.gamepadIndices.xAxis !== undefined\n\t        && gamepad.axes.length > this.gamepadIndices.xAxis) {\n\t      this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis];\n\t      this.values.xAxis = (this.values.xAxis < -1) ? -1 : this.values.xAxis;\n\t      this.values.xAxis = (this.values.xAxis > 1) ? 1 : this.values.xAxis;\n\n\t      // If the state is still default, check if the xAxis makes it touched\n\t      if (this.values.state === Constants.ComponentState.DEFAULT\n\t        && Math.abs(this.values.xAxis) > Constants.AxisTouchThreshold) {\n\t        this.values.state = Constants.ComponentState.TOUCHED;\n\t      }\n\t    }\n\n\t    // Get and normalize Y axis value\n\t    if (this.gamepadIndices.yAxis !== undefined\n\t        && gamepad.axes.length > this.gamepadIndices.yAxis) {\n\t      this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis];\n\t      this.values.yAxis = (this.values.yAxis < -1) ? -1 : this.values.yAxis;\n\t      this.values.yAxis = (this.values.yAxis > 1) ? 1 : this.values.yAxis;\n\n\t      // If the state is still default, check if the yAxis makes it touched\n\t      if (this.values.state === Constants.ComponentState.DEFAULT\n\t        && Math.abs(this.values.yAxis) > Constants.AxisTouchThreshold) {\n\t        this.values.state = Constants.ComponentState.TOUCHED;\n\t      }\n\t    }\n\n\t    // Update the visual response weights based on the current component data\n\t    Object.values(this.visualResponses).forEach((visualResponse) => {\n\t      visualResponse.updateFromComponent(this.values);\n\t    });\n\t  }\n\t}\n\n\t/**\n\t  * @description Builds a motion controller with components and visual responses based on the\n\t  * supplied profile description. Data is polled from the xrInputSource's gamepad.\n\t  * @author Nell Waliczek / https://github.com/NellWaliczek\n\t*/\n\tclass MotionController {\n\t  /**\n\t   * @param {Object} xrInputSource - The XRInputSource to build the MotionController around\n\t   * @param {Object} profile - The best matched profile description for the supplied xrInputSource\n\t   * @param {Object} assetUrl\n\t   */\n\t  constructor(xrInputSource, profile, assetUrl) {\n\t    if (!xrInputSource) {\n\t      throw new Error('No xrInputSource supplied');\n\t    }\n\n\t    if (!profile) {\n\t      throw new Error('No profile supplied');\n\t    }\n\n\t    this.xrInputSource = xrInputSource;\n\t    this.assetUrl = assetUrl;\n\t    this.id = profile.profileId;\n\n\t    // Build child components as described in the profile description\n\t    this.layoutDescription = profile.layouts[xrInputSource.handedness];\n\t    this.components = {};\n\t    Object.keys(this.layoutDescription.components).forEach((componentId) => {\n\t      const componentDescription = this.layoutDescription.components[componentId];\n\t      this.components[componentId] = new Component(componentId, componentDescription);\n\t    });\n\n\t    // Initialize components based on current gamepad state\n\t    this.updateFromGamepad();\n\t  }\n\n\t  get gripSpace() {\n\t    return this.xrInputSource.gripSpace;\n\t  }\n\n\t  get targetRaySpace() {\n\t    return this.xrInputSource.targetRaySpace;\n\t  }\n\n\t  /**\n\t   * @description Returns a subset of component data for simplified debugging\n\t   */\n\t  get data() {\n\t    const data = [];\n\t    Object.values(this.components).forEach((component) => {\n\t      data.push(component.data);\n\t    });\n\t    return data;\n\t  }\n\n\t  /**\n\t   * @description Poll for updated data based on current gamepad state\n\t   */\n\t  updateFromGamepad() {\n\t    Object.values(this.components).forEach((component) => {\n\t      component.updateFromGamepad(this.xrInputSource.gamepad);\n\t    });\n\t  }\n\t}\n\n\tconst DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles';\n\tconst DEFAULT_PROFILE = 'generic-trigger';\n\n\tfunction XRControllerModel( ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.motionController = null;\n\t\tthis.envMap = null;\n\n\t}\n\n\tXRControllerModel.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: XRControllerModel,\n\n\t\tsetEnvironmentMap: function ( envMap ) {\n\n\t\t\tif ( this.envMap == envMap ) {\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tthis.envMap = envMap;\n\t\t\tthis.traverse( ( child ) => {\n\n\t\t\t\tif ( child.isMesh ) {\n\n\t\t\t\t\tchild.material.envMap = this.envMap;\n\t\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Polls data from the XRInputSource and updates the model's components to match\n\t\t * the real world data\n\t\t */\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tif ( ! this.motionController ) return;\n\n\t\t\t// Cause the MotionController to poll the Gamepad for data\n\t\t\tthis.motionController.updateFromGamepad();\n\n\t\t\t// Update the 3D model to reflect the button, thumbstick, and touchpad state\n\t\t\tObject.values( this.motionController.components ).forEach( ( component ) => {\n\n\t\t\t\t// Update node data based on the visual responses' current states\n\t\t\t\tObject.values( component.visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\t\t\tconst { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse;\n\n\t\t\t\t\t// Skip if the visual response node is not found. No error is needed,\n\t\t\t\t\t// because it will have been reported at load time.\n\t\t\t\t\tif ( ! valueNode ) return;\n\n\t\t\t\t\t// Calculate the new properties based on the weight supplied\n\t\t\t\t\tif ( valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY ) {\n\n\t\t\t\t\t\tvalueNode.visible = value;\n\n\t\t\t\t\t} else if ( valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\t\t\tQuaternion.slerp(\n\t\t\t\t\t\t\tminNode.quaternion,\n\t\t\t\t\t\t\tmaxNode.quaternion,\n\t\t\t\t\t\t\tvalueNode.quaternion,\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvalueNode.position.lerpVectors(\n\t\t\t\t\t\t\tminNode.position,\n\t\t\t\t\t\t\tmaxNode.position,\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * Walks the model's tree to find the nodes needed to animate the components and\n\t * saves them to the motionContoller components for use in the frame loop. When\n\t * touchpads are found, attaches a touch dot to them.\n\t */\n\tfunction findNodes( motionController, scene ) {\n\n\t\t// Loop through the components and find the nodes needed for each components' visual responses\n\t\tObject.values( motionController.components ).forEach( ( component ) => {\n\n\t\t\tconst { type, touchPointNodeName, visualResponses } = component;\n\n\t\t\tif ( type === Constants.ComponentType.TOUCHPAD ) {\n\n\t\t\t\tcomponent.touchPointNode = scene.getObjectByName( touchPointNodeName );\n\t\t\t\tif ( component.touchPointNode ) {\n\n\t\t\t\t\t// Attach a touch dot to the touchpad.\n\t\t\t\t\tconst sphereGeometry = new SphereBufferGeometry( 0.001 );\n\t\t\t\t\tconst material = new MeshBasicMaterial( { color: 0x0000FF } );\n\t\t\t\t\tconst sphere = new Mesh( sphereGeometry, material );\n\t\t\t\t\tcomponent.touchPointNode.add( sphere );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( `Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}` );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Loop through all the visual responses to be applied to this component\n\t\t\tObject.values( visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\t\tconst { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse;\n\n\t\t\t\t// If animating a transform, find the two nodes to be interpolated between.\n\t\t\t\tif ( valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\t\tvisualResponse.minNode = scene.getObjectByName( minNodeName );\n\t\t\t\t\tvisualResponse.maxNode = scene.getObjectByName( maxNodeName );\n\n\t\t\t\t\t// If the extents cannot be found, skip this animation\n\t\t\t\t\tif ( ! visualResponse.minNode ) {\n\n\t\t\t\t\t\tconsole.warn( `Could not find ${minNodeName} in the model` );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! visualResponse.maxNode ) {\n\n\t\t\t\t\t\tconsole.warn( `Could not find ${maxNodeName} in the model` );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// If the target node cannot be found, skip this animation\n\t\t\t\tvisualResponse.valueNode = scene.getObjectByName( valueNodeName );\n\t\t\t\tif ( ! visualResponse.valueNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${valueNodeName} in the model` );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tfunction addAssetSceneToControllerModel( controllerModel, scene ) {\n\n\t\t// Find the nodes needed for animation and cache them on the motionController.\n\t\tfindNodes( controllerModel.motionController, scene );\n\n\t\t// Apply any environment map that the mesh already has set.\n\t\tif ( controllerModel.envMap ) {\n\n\t\t\tscene.traverse( ( child ) => {\n\n\t\t\t\tif ( child.isMesh ) {\n\n\t\t\t\t\tchild.material.envMap = controllerModel.envMap;\n\t\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Add the glTF scene to the controllerModel.\n\t\tcontrollerModel.add( scene );\n\n\t}\n\n\tvar XRControllerModelFactory = ( function () {\n\n\t\tfunction XRControllerModelFactory( gltfLoader = null ) {\n\n\t\t\tthis.gltfLoader = gltfLoader;\n\t\t\tthis.path = DEFAULT_PROFILES_PATH;\n\t\t\tthis._assetCache = {};\n\n\t\t\t// If a GLTFLoader wasn't supplied to the constructor create a new one.\n\t\t\tif ( ! this.gltfLoader ) {\n\n\t\t\t\tthis.gltfLoader = new GLTFLoader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tXRControllerModelFactory.prototype = {\n\n\t\t\tconstructor: XRControllerModelFactory,\n\n\t\t\tcreateControllerModel: function ( controller ) {\n\n\t\t\t\tconst controllerModel = new XRControllerModel();\n\t\t\t\tlet scene = null;\n\n\t\t\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\t\t\tconst xrInputSource = event.data;\n\n\t\t\t\t\tif ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad ) return;\n\n\t\t\t\t\tfetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => {\n\n\t\t\t\t\t\tcontrollerModel.motionController = new MotionController(\n\t\t\t\t\t\t\txrInputSource,\n\t\t\t\t\t\t\tprofile,\n\t\t\t\t\t\t\tassetPath\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ];\n\t\t\t\t\t\tif ( cachedAsset ) {\n\n\t\t\t\t\t\t\tscene = cachedAsset.scene.clone();\n\n\t\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( ! this.gltfLoader ) {\n\n\t\t\t\t\t\t\t\tthrow new Error( 'GLTFLoader not set.' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis.gltfLoader.setPath( '' );\n\t\t\t\t\t\t\tthis.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => {\n\n\t\t\t\t\t\t\t\tthis._assetCache[ controllerModel.motionController.assetUrl ] = asset;\n\n\t\t\t\t\t\t\t\tscene = asset.scene.clone();\n\n\t\t\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t() => {\n\n\t\t\t\t\t\t\t\tthrow new Error( `Asset ${controllerModel.motionController.assetUrl} missing or malformed.` );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} ).catch( ( err ) => {\n\n\t\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\t\t\tcontrollerModel.motionController = null;\n\t\t\t\t\tcontrollerModel.remove( scene );\n\t\t\t\t\tscene = null;\n\n\t\t\t\t} );\n\n\t\t\t\treturn controllerModel;\n\n\t\t\t}\n\n\t\t};\n\n\t\treturn XRControllerModelFactory;\n\n\t} )();\n\n\tlet fakeCam = new PerspectiveCamera();\r\n\r\n\tfunction toScene(vec, ref){\r\n\t\tlet node = ref.clone();\r\n\t\tnode.updateMatrix();\r\n\t\tnode.updateMatrixWorld();\r\n\r\n\t\tlet result = vec.clone().applyMatrix4(node.matrix);\r\n\t\tresult.z -= 0.8 * node.scale.x;\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tfunction computeMove(vrControls, controller){\r\n\r\n\t\tif(!controller || !controller.inputSource || !controller.inputSource.gamepad){\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet pad = controller.inputSource.gamepad;\r\n\r\n\t\tlet axes = pad.axes;\r\n\t\t// [0,1] are for touchpad, [2,3] for thumbsticks?\r\n\t\tlet y = 0;\r\n\t\tif(axes.length === 2){\r\n\t\t\ty = axes[1];\r\n\t\t}else if(axes.length === 4){\r\n\t\t\ty = axes[3];\r\n\t\t}\r\n\r\n\t\ty = Math.sign(y) * (2 * y) ** 2;\r\n\r\n\t\tlet maxSize = 0;\r\n\t\tfor(let pc of viewer.scene.pointclouds){\r\n\t\t\tlet size = pc.boundingBox.min.distanceTo(pc.boundingBox.max);\r\n\t\t\tmaxSize = Math.max(maxSize, size);\r\n\t\t}\r\n\t\tlet multiplicator = Math.pow(maxSize, 0.5) / 2;\r\n\r\n\t\tlet scale = vrControls.node.scale.x;\r\n\t\tlet moveSpeed = viewer.getMoveSpeed();\r\n\t\tlet amount = multiplicator * y * (moveSpeed ** 0.5) / scale;\r\n\r\n\r\n\t\tlet rotation = new Quaternion().setFromEuler(controller.rotation);\r\n\t\tlet dir = new Vector3(0, 0, -1);\r\n\t\tdir.applyQuaternion(rotation);\r\n\r\n\t\tlet move = dir.clone().multiplyScalar(amount);\r\n\r\n\t\tlet p1 = vrControls.toScene(controller.position);\r\n\t\tlet p2 = vrControls.toScene(controller.position.clone().add(move));\r\n\r\n\t\tmove = p2.clone().sub(p1);\r\n\t\t\r\n\t\treturn move;\r\n\t};\r\n\r\n\r\n\tclass FlyMode{\r\n\r\n\t\tconstructor(vrControls){\r\n\t\t\tthis.moveFactor = 1;\r\n\t\t\tthis.dbgLabel = null;\r\n\t\t}\r\n\r\n\t\tstart(vrControls){\r\n\t\t\tif(!this.dbgLabel){\r\n\t\t\t\tthis.dbgLabel = new Potree.TextSprite(\"abc\");\r\n\t\t\t\tthis.dbgLabel.name = \"debug label\";\r\n\t\t\t\tvrControls.viewer.sceneVR.add(this.dbgLabel);\r\n\t\t\t\tthis.dbgLabel.visible = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tend(){\r\n\r\n\t\t}\r\n\r\n\t\tupdate(vrControls, delta){\r\n\r\n\t\t\tlet primary = vrControls.cPrimary;\r\n\t\t\tlet secondary = vrControls.cSecondary;\r\n\r\n\t\t\tlet move1 = computeMove(vrControls, primary);\r\n\t\t\tlet move2 = computeMove(vrControls, secondary);\r\n\r\n\r\n\t\t\tif(!move1){\r\n\t\t\t\tmove1 = new Vector3();\r\n\t\t\t}\r\n\r\n\t\t\tif(!move2){\r\n\t\t\t\tmove2 = new Vector3();\r\n\t\t\t}\r\n\r\n\t\t\tlet move = move1.clone().add(move2);\r\n\r\n\t\t\tmove.multiplyScalar(-delta * this.moveFactor);\r\n\t\t\tvrControls.node.position.add(move);\r\n\t\t\t\r\n\r\n\t\t\tlet scale = vrControls.node.scale.x;\r\n\r\n\t\t\tlet camVR = vrControls.viewer.renderer.xr.getCamera(fakeCam);\r\n\t\t\t\r\n\t\t\tlet vrPos = camVR.getWorldPosition(new Vector3());\r\n\t\t\tlet vrDir = camVR.getWorldDirection(new Vector3());\r\n\t\t\tlet vrTarget = vrPos.clone().add(vrDir.multiplyScalar(scale));\r\n\r\n\t\t\tlet scenePos = toScene(vrPos, vrControls.node);\r\n\t\t\tlet sceneDir = toScene(vrPos.clone().add(vrDir), vrControls.node).sub(scenePos);\r\n\t\t\tsceneDir.normalize().multiplyScalar(scale);\r\n\t\t\tlet sceneTarget = scenePos.clone().add(sceneDir);\r\n\r\n\t\t\tvrControls.viewer.scene.view.setView(scenePos, sceneTarget);\r\n\r\n\t\t\tif(Potree.debug.message){\r\n\t\t\t\tthis.dbgLabel.visible = true;\r\n\t\t\t\tthis.dbgLabel.setText(Potree.debug.message);\r\n\t\t\t\tthis.dbgLabel.scale.set(0.1, 0.1, 0.1);\r\n\t\t\t\tthis.dbgLabel.position.copy(primary.position);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tclass TranslationMode{\r\n\r\n\t\tconstructor(){\r\n\t\t\tthis.controller = null;\r\n\t\t\tthis.startPos = null;\r\n\t\t\tthis.debugLine = null;\r\n\t\t}\r\n\r\n\t\tstart(vrControls){\r\n\t\t\tthis.controller = vrControls.triggered.values().next().value;\r\n\t\t\tthis.startPos = vrControls.node.position.clone();\r\n\t\t}\r\n\t\t\r\n\t\tend(vrControls){\r\n\r\n\t\t}\r\n\r\n\t\tupdate(vrControls, delta){\r\n\r\n\t\t\tlet start = this.controller.start.position;\r\n\t\t\tlet end = this.controller.position;\r\n\r\n\t\t\tstart = vrControls.toScene(start);\r\n\t\t\tend = vrControls.toScene(end);\r\n\r\n\t\t\tlet diff = end.clone().sub(start);\r\n\t\t\tdiff.set(-diff.x, -diff.y, -diff.z);\r\n\r\n\t\t\tlet pos = new Vector3().addVectors(this.startPos, diff);\r\n\r\n\t\t\tvrControls.node.position.copy(pos);\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tclass RotScaleMode{\r\n\r\n\t\tconstructor(){\r\n\t\t\tthis.line = null;\r\n\t\t\tthis.startState = null;\r\n\t\t}\r\n\r\n\t\tstart(vrControls){\r\n\t\t\tif(!this.line){\r\n\t\t\t\tthis.line = Potree.Utils.debugLine(\r\n\t\t\t\t\tvrControls.viewer.sceneVR, \r\n\t\t\t\t\tnew Vector3(0, 0, 0),\r\n\t\t\t\t\tnew Vector3(0, 0, 0),\r\n\t\t\t\t\t0xffff00,\r\n\t\t\t\t);\r\n\r\n\t\t\t\tthis.dbgLabel = new Potree.TextSprite(\"abc\");\r\n\t\t\t\tthis.dbgLabel.scale.set(0.1, 0.1, 0.1);\r\n\t\t\t\tvrControls.viewer.sceneVR.add(this.dbgLabel);\r\n\t\t\t}\r\n\r\n\t\t\tthis.line.node.visible = true;\r\n\r\n\t\t\tthis.startState = vrControls.node.clone();\r\n\t\t}\r\n\r\n\t\tend(vrControls){\r\n\t\t\tthis.line.node.visible = false;\r\n\t\t\tthis.dbgLabel.visible = false;\r\n\t\t}\r\n\r\n\t\tupdate(vrControls, delta){\r\n\r\n\t\t\tlet start_c1 = vrControls.cPrimary.start.position.clone();\r\n\t\t\tlet start_c2 = vrControls.cSecondary.start.position.clone();\r\n\t\t\tlet start_center = start_c1.clone().add(start_c2).multiplyScalar(0.5);\r\n\t\t\tlet start_c1_c2 = start_c2.clone().sub(start_c1);\r\n\t\t\tlet end_c1 = vrControls.cPrimary.position.clone();\r\n\t\t\tlet end_c2 = vrControls.cSecondary.position.clone();\r\n\t\t\tlet end_center = end_c1.clone().add(end_c2).multiplyScalar(0.5);\r\n\t\t\tlet end_c1_c2 = end_c2.clone().sub(end_c1);\r\n\r\n\t\t\tlet d1 = start_c1_c2.length();\r\n\t\t\tlet d2 = end_c1_c2.length();\r\n\r\n\t\t\tlet angleStart = new Vector2(start_c1_c2.x, start_c1_c2.z).angle();\r\n\t\t\tlet angleEnd = new Vector2(end_c1_c2.x, end_c1_c2.z).angle();\r\n\t\t\tlet angleDiff = angleEnd - angleStart;\r\n\t\t\t\r\n\t\t\tlet scale = d2 / d1;\r\n\r\n\t\t\tlet node = this.startState.clone();\r\n\t\t\tnode.updateMatrix();\r\n\t\t\tnode.matrixAutoUpdate = false;\r\n\r\n\t\t\tlet mToOrigin = new Matrix4().makeTranslation(...toScene(start_center, this.startState).multiplyScalar(-1).toArray());\r\n\t\t\tlet mToStart = new Matrix4().makeTranslation(...toScene(start_center, this.startState).toArray());\r\n\t\t\tlet mRotate = new Matrix4().makeRotationZ(angleDiff);\r\n\t\t\tlet mScale = new Matrix4().makeScale(1 / scale, 1 / scale, 1 / scale);\r\n\r\n\t\t\tnode.applyMatrix4(mToOrigin);\r\n\t\t\tnode.applyMatrix4(mRotate);\r\n\t\t\tnode.applyMatrix4(mScale);\r\n\t\t\tnode.applyMatrix4(mToStart);\r\n\r\n\t\t\tlet oldScenePos = toScene(start_center, this.startState);\r\n\t\t\tlet newScenePos = toScene(end_center, node);\r\n\t\t\tlet toNew = oldScenePos.clone().sub(newScenePos);\r\n\t\t\tlet mToNew = new Matrix4().makeTranslation(...toNew.toArray());\r\n\t\t\tnode.applyMatrix4(mToNew);\r\n\r\n\t\t\tnode.matrix.decompose(node.position, node.quaternion, node.scale );\r\n\r\n\t\t\tvrControls.node.position.copy(node.position);\r\n\t\t\tvrControls.node.quaternion.copy(node.quaternion);\r\n\t\t\tvrControls.node.scale.copy(node.scale);\r\n\t\t\tvrControls.node.updateMatrix();\r\n\r\n\t\t\t{\r\n\t\t\t\tlet scale = vrControls.node.scale.x;\r\n\t\t\t\tlet camVR = vrControls.viewer.renderer.xr.getCamera(fakeCam);\r\n\t\t\t\t\r\n\t\t\t\tlet vrPos = camVR.getWorldPosition(new Vector3());\r\n\t\t\t\tlet vrDir = camVR.getWorldDirection(new Vector3());\r\n\t\t\t\tlet vrTarget = vrPos.clone().add(vrDir.multiplyScalar(scale));\r\n\r\n\t\t\t\tlet scenePos = toScene(vrPos, this.startState);\r\n\t\t\t\tlet sceneDir = toScene(vrPos.clone().add(vrDir), this.startState).sub(scenePos);\r\n\t\t\t\tsceneDir.normalize().multiplyScalar(scale);\r\n\t\t\t\tlet sceneTarget = scenePos.clone().add(sceneDir);\r\n\r\n\t\t\t\tvrControls.viewer.scene.view.setView(scenePos, sceneTarget);\r\n\t\t\t\tvrControls.viewer.setMoveSpeed(scale);\r\n\t\t\t}\r\n\r\n\t\t\t{ // update \"GUI\"\r\n\t\t\t\tthis.line.set(end_c1, end_c2);\r\n\r\n\t\t\t\tlet scale = vrControls.node.scale.x;\r\n\t\t\t\tthis.dbgLabel.visible = true;\r\n\t\t\t\tthis.dbgLabel.position.copy(end_center);\r\n\t\t\t\tthis.dbgLabel.setText(`scale: 1 : ${scale.toFixed(2)}`);\r\n\t\t\t\tthis.dbgLabel.scale.set(0.05, 0.05, 0.05);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\r\n\tclass VRControls extends EventDispatcher{\r\n\r\n\t\tconstructor(viewer){\r\n\t\t\tsuper(viewer);\r\n\r\n\t\t\tthis.viewer = viewer;\r\n\r\n\t\t\tviewer.addEventListener(\"vr_start\", this.onStart.bind(this));\r\n\t\t\tviewer.addEventListener(\"vr_end\", this.onEnd.bind(this));\r\n\r\n\t\t\tthis.node = new Object3D();\r\n\t\t\tthis.node.up.set(0, 0, 1);\r\n\t\t\tthis.triggered = new Set();\r\n\r\n\t\t\tlet xr = viewer.renderer.xr;\r\n\r\n\t\t\t{ // lights\r\n\t\t\t\t\r\n\t\t\t\tconst light = new PointLight( 0xffffff, 5, 0, 1 );\r\n\t\t\t\tlight.position.set(0, 2, 0);\r\n\t\t\t\tthis.viewer.sceneVR.add(light);\r\n\t\t\t}\r\n\r\n\t\t\tthis.menu = null;\r\n\r\n\t\t\tconst controllerModelFactory = new XRControllerModelFactory();\r\n\r\n\t\t\tlet sg = new SphereGeometry(1, 32, 32);\r\n\t\t\tlet sm = new MeshNormalMaterial();\r\n\r\n\t\t\t{ // setup primary controller\r\n\t\t\t\tlet controller = xr.getController(0);\r\n\r\n\t\t\t\tlet grip = xr.getControllerGrip(0);\r\n\t\t\t\tgrip.name = \"grip(0)\";\r\n\r\n\t\t\t\t// ADD CONTROLLERMODEL\r\n\t\t\t\tgrip.add( controllerModelFactory.createControllerModel( grip ) );\r\n\t\t\t\tthis.viewer.sceneVR.add(grip);\r\n\r\n\t\t\t\t// ADD SPHERE\r\n\t\t\t\tlet sphere = new Mesh(sg, sm);\r\n\t\t\t\tsphere.scale.set(0.005, 0.005, 0.005);\r\n\r\n\t\t\t\tcontroller.add(sphere);\r\n\t\t\t\tcontroller.visible = true;\r\n\t\t\t\tthis.viewer.sceneVR.add(controller);\r\n\r\n\t\t\t\t{ // ADD LINE\r\n\t\t\t\t\t\r\n\t\t\t\t\tlet lineGeometry = new LineGeometry();\r\n\r\n\t\t\t\t\tlineGeometry.setPositions([\r\n\t\t\t\t\t\t0, 0, -0.15,\r\n\t\t\t\t\t\t0, 0, 0.05,\r\n\t\t\t\t\t]);\r\n\r\n\t\t\t\t\tlet lineMaterial = new LineMaterial({ \r\n\t\t\t\t\t\tcolor: 0xff0000, \r\n\t\t\t\t\t\tlinewidth: 2, \r\n\t\t\t\t\t\tresolution:  new Vector2(1000, 1000),\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tconst line = new Line2(lineGeometry, lineMaterial);\r\n\t\t\t\t\t\r\n\t\t\t\t\tcontroller.add(line);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tcontroller.addEventListener( 'connected', function ( event ) {\r\n\t\t\t\t\tconst xrInputSource = event.data;\r\n\t\t\t\t\tcontroller.inputSource = xrInputSource;\r\n\t\t\t\t\t// initInfo(controller);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcontroller.addEventListener( 'selectstart', () => {this.onTriggerStart(controller);});\r\n\t\t\t\tcontroller.addEventListener( 'selectend', () => {this.onTriggerEnd(controller);});\r\n\r\n\t\t\t\tthis.cPrimary =  controller;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t{ // setup secondary controller\r\n\t\t\t\tlet controller = xr.getController(1);\r\n\r\n\t\t\t\tlet grip = xr.getControllerGrip(1);\r\n\r\n\t\t\t\t// ADD CONTROLLER MODEL\r\n\t\t\t\tlet model = controllerModelFactory.createControllerModel( grip );\r\n\t\t\t\tgrip.add(model);\r\n\t\t\t\tthis.viewer.sceneVR.add( grip );\r\n\r\n\t\t\t\t// ADD SPHERE\r\n\t\t\t\tlet sphere = new Mesh(sg, sm);\r\n\t\t\t\tsphere.scale.set(0.005, 0.005, 0.005);\r\n\t\t\t\tcontroller.add(sphere);\r\n\t\t\t\tcontroller.visible = true;\r\n\t\t\t\tthis.viewer.sceneVR.add(controller);\r\n\r\n\t\t\t\t{ // ADD LINE\r\n\t\t\t\t\t\r\n\t\t\t\t\tlet lineGeometry = new LineGeometry();\r\n\r\n\t\t\t\t\tlineGeometry.setPositions([\r\n\t\t\t\t\t\t0, 0, -0.15,\r\n\t\t\t\t\t\t0, 0, 0.05,\r\n\t\t\t\t\t]);\r\n\r\n\t\t\t\t\tlet lineMaterial = new LineMaterial({ \r\n\t\t\t\t\t\tcolor: 0xff0000, \r\n\t\t\t\t\t\tlinewidth: 2, \r\n\t\t\t\t\t\tresolution:  new Vector2(1000, 1000),\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tconst line = new Line2(lineGeometry, lineMaterial);\r\n\t\t\t\t\t\r\n\t\t\t\t\tcontroller.add(line);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcontroller.addEventListener( 'connected', (event) => {\r\n\t\t\t\t\tconst xrInputSource = event.data;\r\n\t\t\t\t\tcontroller.inputSource = xrInputSource;\r\n\t\t\t\t\tthis.initMenu(controller);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcontroller.addEventListener( 'selectstart', () => {this.onTriggerStart(controller);});\r\n\t\t\t\tcontroller.addEventListener( 'selectend', () => {this.onTriggerEnd(controller);});\r\n\r\n\t\t\t\tthis.cSecondary =  controller;\r\n\t\t\t}\r\n\r\n\t\t\tthis.mode_fly = new FlyMode();\r\n\t\t\tthis.mode_translate = new TranslationMode();\r\n\t\t\tthis.mode_rotScale = new RotScaleMode();\r\n\t\t\tthis.setMode(this.mode_fly);\r\n\t\t}\r\n\r\n\t\tcreateSlider(label, min, max){\r\n\r\n\t\t\tlet sg = new SphereGeometry(1, 8, 8);\r\n\t\t\tlet cg = new CylinderGeometry(1, 1, 1, 8);\r\n\t\t\tlet matHandle = new MeshBasicMaterial({color: 0xff0000});\r\n\t\t\tlet matScale = new MeshBasicMaterial({color: 0xff4444});\r\n\t\t\tlet matValue = new MeshNormalMaterial();\r\n\r\n\t\t\tlet node = new Object3D(\"slider\");\r\n\t\t\tlet nLabel = new Potree.TextSprite(`${label}: 0`);\r\n\t\t\tlet nMax = new Mesh(sg, matHandle);\r\n\t\t\tlet nMin = new Mesh(sg, matHandle);\r\n\t\t\tlet nValue = new Mesh(sg, matValue);\r\n\t\t\tlet nScale = new Mesh(cg, matScale);\r\n\r\n\t\t\tnLabel.scale.set(0.2, 0.2, 0.2);\r\n\t\t\tnLabel.position.set(0, 0.35, 0);\r\n\r\n\t\t\tnMax.scale.set(0.02, 0.02, 0.02);\r\n\t\t\tnMax.position.set(0, 0.25, 0);\r\n\r\n\t\t\tnMin.scale.set(0.02, 0.02, 0.02);\r\n\t\t\tnMin.position.set(0, -0.25, 0);\r\n\r\n\t\t\tnValue.scale.set(0.02, 0.02, 0.02);\r\n\t\t\tnValue.position.set(0, 0, 0);\r\n\r\n\t\t\tnScale.scale.set(0.005, 0.5, 0.005);\r\n\r\n\t\t\tnode.add(nLabel);\r\n\t\t\tnode.add(nMax);\r\n\t\t\tnode.add(nMin);\r\n\t\t\tnode.add(nValue);\r\n\t\t\tnode.add(nScale);\r\n\r\n\t\t\treturn node;\r\n\t\t}\r\n\r\n\t\tcreateInfo(){ \r\n\r\n\t\t\tlet texture = new TextureLoader().load(`${Potree.resourcePath}/images/vr_controller_help.jpg`);\r\n\t\t\tlet plane = new PlaneBufferGeometry(1, 1, 1, 1);\r\n\t\t\tlet infoMaterial = new MeshBasicMaterial({map: texture});\r\n\t\t\tlet infoNode = new Mesh(plane, infoMaterial);\r\n\r\n\t\t\treturn infoNode;\r\n\t\t}\r\n\r\n\t\tinitMenu(controller){\r\n\r\n\t\t\tif(this.menu){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet node = new Object3D(\"vr menu\");\r\n\r\n\t\t\t// let nSlider = this.createSlider(\"speed\", 0, 1);\r\n\t\t\t// let nInfo = this.createInfo();\r\n\r\n\t\t\t// // node.add(nSlider);\r\n\t\t\t// node.add(nInfo);\r\n\r\n\t\t\t// {\r\n\t\t\t// \tnode.rotation.set(-1.5, 0, 0)\r\n\t\t\t// \tnode.scale.set(0.3, 0.3, 0.3);\r\n\t\t\t// \tnode.position.set(-0.2, -0.002, -0.1)\r\n\r\n\t\t\t// \t// nInfo.position.set(0.5, 0, 0);\r\n\t\t\t// \tnInfo.scale.set(0.8, 0.6, 0);\r\n\r\n\t\t\t// \t// controller.add(node);\r\n\t\t\t// }\r\n\r\n\t\t\t// node.position.set(-0.3, 1.2, 0.2);\r\n\t\t\t// node.scale.set(0.3, 0.2, 0.3);\r\n\t\t\t// node.lookAt(new THREE.Vector3(0, 1.5, 0.1));\r\n\r\n\t\t\t// this.viewer.sceneVR.add(node);\r\n\r\n\t\t\tthis.menu = node;\r\n\r\n\t\t\t// window.vrSlider = nSlider;\r\n\t\t\twindow.vrMenu = node;\r\n\r\n\t\t}\r\n\r\n\r\n\t\ttoScene(vec){\r\n\t\t\tlet camVR = this.getCamera();\r\n\r\n\t\t\tlet mat = camVR.matrixWorld;\r\n\t\t\tlet result = vec.clone().applyMatrix4(mat);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\ttoVR(vec){\r\n\t\t\tlet camVR = this.getCamera();\r\n\r\n\t\t\tlet mat = camVR.matrixWorld.clone();\r\n\t\t\tmat.invert();\r\n\t\t\tlet result = vec.clone().applyMatrix4(mat);\r\n\r\n\t\t\treturn result;\r\n\t\t}\r\n\r\n\t\tsetMode(mode){\r\n\r\n\t\t\tif(this.mode === mode){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.mode){\r\n\t\t\t\tthis.mode.end(this);\r\n\t\t\t}\r\n\r\n\t\t\tfor(let controller of [this.cPrimary, this.cSecondary]){\r\n\r\n\t\t\t\tlet start = {\r\n\t\t\t\t\tposition: controller.position.clone(),\r\n\t\t\t\t\trotation: controller.rotation.clone(),\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcontroller.start = start;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.mode = mode;\r\n\t\t\tthis.mode.start(this);\r\n\t\t}\r\n\r\n\t\tonTriggerStart(controller){\r\n\t\t\tthis.triggered.add(controller);\r\n\r\n\t\t\tif(this.triggered.size === 0){\r\n\t\t\t\tthis.setMode(this.mode_fly);\r\n\t\t\t}else if(this.triggered.size === 1){\r\n\t\t\t\tthis.setMode(this.mode_translate);\r\n\t\t\t}else if(this.triggered.size === 2){\r\n\t\t\t\tthis.setMode(this.mode_rotScale);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tonTriggerEnd(controller){\r\n\t\t\tthis.triggered.delete(controller);\r\n\r\n\t\t\tif(this.triggered.size === 0){\r\n\t\t\t\tthis.setMode(this.mode_fly);\r\n\t\t\t}else if(this.triggered.size === 1){\r\n\t\t\t\tthis.setMode(this.mode_translate);\r\n\t\t\t}else if(this.triggered.size === 2){\r\n\t\t\t\tthis.setMode(this.mode_rotScale);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tonStart(){\r\n\r\n\t\t\tlet position = this.viewer.scene.view.position.clone();\r\n\t\t\tlet direction = this.viewer.scene.view.direction;\r\n\t\t\tdirection.multiplyScalar(-1);\r\n\r\n\t\t\tlet target = position.clone().add(direction);\r\n\t\t\ttarget.z = position.z;\r\n\r\n\t\t\tlet scale = this.viewer.getMoveSpeed();\r\n\r\n\t\t\tthis.node.position.copy(position);\r\n\t\t\tthis.node.lookAt(target);\r\n\t\t\tthis.node.scale.set(scale, scale, scale);\r\n\t\t\tthis.node.updateMatrix();\r\n\t\t\tthis.node.updateMatrixWorld();\r\n\t\t}\r\n\r\n\t\tonEnd(){\r\n\t\t\t\r\n\t\t}\r\n\r\n\r\n\t\tsetScene(scene){\r\n\t\t\tthis.scene = scene;\r\n\t\t}\r\n\r\n\t\tgetCamera(){\r\n\t\t\tlet reference = this.viewer.scene.getActiveCamera();\r\n\t\t\tlet camera = new PerspectiveCamera();\r\n\r\n\t\t\t// let scale = this.node.scale.x;\r\n\t\t\tlet scale = this.viewer.getMoveSpeed();\r\n\t\t\t//camera.near = 0.01 / scale;\r\n\t\t\tcamera.near = 0.1;\r\n\t\t\tcamera.far = 1000;\r\n\t\t\t// camera.near = reference.near / scale;\r\n\t\t\t// camera.far = reference.far / scale;\r\n\t\t\tcamera.up.set(0, 0, 1);\r\n\t\t\tcamera.lookAt(new Vector3(0, -1, 0));\r\n\t\t\tcamera.updateMatrix();\r\n\t\t\tcamera.updateMatrixWorld();\r\n\r\n\t\t\tcamera.position.copy(this.node.position);\r\n\t\t\tcamera.rotation.copy(this.node.rotation);\r\n\t\t\tcamera.scale.set(scale, scale, scale);\r\n\t\t\tcamera.updateMatrix();\r\n\t\t\tcamera.updateMatrixWorld();\r\n\t\t\tcamera.matrixAutoUpdate = false;\r\n\t\t\tcamera.parent = camera;\r\n\r\n\t\t\treturn camera;\r\n\t\t}\r\n\r\n\t\tupdate(delta){\r\n\r\n\t\t\t\r\n\r\n\t\t\t// if(this.mode === this.mode_fly){\r\n\t\t\t// \tlet ray = new THREE.Ray(origin, direction);\r\n\t\t\t\t\r\n\t\t\t// \tfor(let object of this.selectables){\r\n\r\n\t\t\t// \t\tif(object.intersectsRay(ray)){\r\n\t\t\t// \t\t\tobject.onHit(ray);\r\n\t\t\t// \t\t}\r\n\r\n\t\t\t// \t}\r\n\r\n\t\t\t// }\r\n\r\n\t\t\tthis.mode.update(this, delta);\r\n\r\n\t\t\t\r\n\r\n\t\t}\r\n\t};\n\n\t// Adapted from three.js VRButton\n\n\n\tclass VRButton {\n\n\t\tconstructor(){\n\t\t\tthis.onStartListeners = [];\n\t\t\tthis.onEndListeners = [];\n\t\t\tthis.element = null;\n\t\t}\n\n\t\tonStart(callback){\n\t\t\tthis.onStartListeners.push(callback);\n\t\t}\n\n\t\tonEnd(callback){\n\t\t\tthis.onEndListeners.push(callback);\n\t\t}\n\n\t\tstatic async createButton( renderer, options ) {\n\n\t\t\tif ( options ) {\n\n\t\t\t\tconsole.error( 'THREE.VRButton: The \"options\" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.' );\n\n\t\t\t}\n\n\t\t\tconst button = new VRButton();\n\t\t\tconst element = document.createElement( 'button' );\n\n\t\t\tbutton.element = element;\n\n\t\t\tfunction setEnter(){\n\t\t\t\tbutton.element.innerHTML = `\n\t\t\t\t<div style=\"font-size: 0.5em;\">ENTER</div>\n\t\t\t\t<div style=\"font-weight: bold;\">VR</div>\n\t\t\t`;\n\t\t\t}\n\n\t\t\tfunction setExit(){\n\t\t\t\tbutton.element.innerHTML = `\n\t\t\t\t<div style=\"font-size: 0.5em;\">EXIT</div>\n\t\t\t\t<div style=\"font-weight: bold;\">VR</div>\n\t\t\t`;\n\t\t\t}\n\n\t\t\tfunction showEnterVR( /*device*/ ) {\n\n\t\t\t\tlet currentSession = null;\n\n\t\t\t\tfunction onSessionStarted( session ) {\n\n\t\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\t\tfor(let listener of button.onStartListeners){\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\n\n\t\t\t\t\trenderer.xr.setSession( session );\n\t\t\t\t\tsetExit();\n\n\t\t\t\t\tcurrentSession = session;\n\n\t\t\t\t}\n\n\t\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\t\tfor(let listener of button.onEndListeners){\n\t\t\t\t\t\tlistener();\n\t\t\t\t\t}\n\n\t\t\t\t\tsetEnter();\n\n\t\t\t\t\tcurrentSession = null;\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tbutton.element.style.display = '';\n\n\t\t\t\tbutton.element.style.cursor = 'pointer';\n\n\t\t\t\tsetEnter();\n\n\t\t\t\tbutton.element.onmouseenter = function () {\n\n\t\t\t\t\tbutton.element.style.opacity = '1.0';\n\n\t\t\t\t};\n\n\t\t\t\tbutton.element.onmouseleave = function () {\n\n\t\t\t\t\tbutton.element.style.opacity = '0.7';\n\n\t\t\t\t};\n\n\t\t\t\tbutton.element.onclick = function () {\n\n\t\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\t\t// WebXR's requestReferenceSpace only works if the corresponding feature\n\t\t\t\t\t\t// was requested at session creation time. For simplicity, just ask for\n\t\t\t\t\t\t// the interesting ones as optional features, but be aware that the\n\t\t\t\t\t\t// requestReferenceSpace call will fail if it turns out to be unavailable.\n\t\t\t\t\t\t// ('local' is always available for immersive sessions and doesn't need to\n\t\t\t\t\t\t// be requested separately.)\n\n\t\t\t\t\t\tconst sessionInit = { optionalFeatures: [ 'local-floor', 'bounded-floor', 'hand-tracking' ] };\n\t\t\t\t\t\tnavigator.xr.requestSession( 'immersive-vr', sessionInit ).then( onSessionStarted );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tfunction stylizeElement( element ) {\n\n\t\t\t\telement.style.position = 'absolute';\n\t\t\t\telement.style.bottom = '20px';\n\t\t\t\telement.style.padding = '12px 6px';\n\t\t\t\telement.style.border = '1px solid #fff';\n\t\t\t\telement.style.borderRadius = '4px';\n\t\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\t\telement.style.color = '#fff';\n\t\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\t\telement.style.textAlign = 'center';\n\t\t\t\telement.style.opacity = '0.7';\n\t\t\t\telement.style.outline = 'none';\n\t\t\t\telement.style.zIndex = '999';\n\n\t\t\t}\n\n\t\t\tif ( 'xr' in navigator ) {\n\n\t\t\t\tbutton.element.id = 'VRButton';\n\t\t\t\tbutton.element.style.display = 'none';\n\n\t\t\t\tstylizeElement( button.element );\n\n\t\t\t\tlet supported = await navigator.xr.isSessionSupported( 'immersive-vr' );\n\n\t\t\t\tif(supported){\n\t\t\t\t\tshowEnterVR();\n\n\t\t\t\t\treturn button;\n\t\t\t\t}else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\t\tconsole.log(\"WEBXR NEEDS HTTPS\");\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.log(\"WEBXR not available\");\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tclass Viewer extends EventDispatcher{\n\t\t\n\t\tconstructor(domElement, args = {}){\n\t\t\tsuper();\n\n\t\t\tthis.renderArea = domElement;\n\t\t\tthis.guiLoaded = false;\n\t\t\tthis.guiLoadTasks = [];\n\n\t\t\tthis.onVrListeners = [];\n\n\t\t\tthis.messages = [];\n\t\t\tthis.elMessages = $(`\n\t\t<div id=\"message_listing\" \n\t\t\tstyle=\"position: absolute; z-index: 1000; left: 10px; bottom: 10px\">\n\t\t</div>`);\n\t\t\t$(domElement).append(this.elMessages);\n\t\t\t\n\t\t\ttry{\n\n\t\t\t{ // generate missing dom hierarchy\n\t\t\t\tif ($(domElement).find('#potree_map').length === 0) {\n\t\t\t\t\tlet potreeMap = $(`\n\t\t\t\t\t<div id=\"potree_map\" class=\"mapBox\" style=\"position: absolute; left: 50px; top: 50px; width: 400px; height: 400px; display: none\">\n\t\t\t\t\t\t<div id=\"potree_map_header\" style=\"position: absolute; width: 100%; height: 25px; top: 0px; background-color: rgba(0,0,0,0.5); z-index: 1000; border-top-left-radius: 3px; border-top-right-radius: 3px;\">\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div id=\"potree_map_content\" class=\"map\" style=\"position: absolute; z-index: 100; top: 25px; width: 100%; height: calc(100% - 25px); border: 2px solid rgba(0,0,0,0.5); box-sizing: border-box;\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\t\t\t\t\t$(domElement).append(potreeMap);\n\t\t\t\t}\n\n\t\t\t\tif ($(domElement).find('#potree_description').length === 0) {\n\t\t\t\t\tlet potreeDescription = $(`<div id=\"potree_description\" class=\"potree_info_text\"></div>`);\n\t\t\t\t\t$(domElement).append(potreeDescription);\n\t\t\t\t}\n\n\t\t\t\tif ($(domElement).find('#potree_annotations').length === 0) {\n\t\t\t\t\tlet potreeAnnotationContainer = $(`\n\t\t\t\t\t<div id=\"potree_annotation_container\" \n\t\t\t\t\t\tstyle=\"position: absolute; z-index: 100000; width: 100%; height: 100%; pointer-events: none;\"></div>`);\n\t\t\t\t\t$(domElement).append(potreeAnnotationContainer);\n\t\t\t\t}\n\n\t\t\t\tif ($(domElement).find('#potree_quick_buttons').length === 0) {\n\t\t\t\t\tlet potreeMap = $(`\n\t\t\t\t\t<div id=\"potree_quick_buttons\" class=\"quick_buttons_container\" style=\"\">\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\n\t\t\t\t\t// {\n\t\t\t\t\t// \tlet imgMenuToggle = document.createElement('img');\n\t\t\t\t\t// \timgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href;\n\t\t\t\t\t// \timgMenuToggle.onclick = this.toggleSidebar;\n\t\t\t\t\t// \t// imgMenuToggle.classList.add('potree_menu_toggle');\n\n\t\t\t\t\t// \tpotreeMap.append(imgMenuToggle);\n\t\t\t\t\t// }\n\n\t\t\t\t\t// {\n\t\t\t\t\t// \tlet imgMenuToggle = document.createElement('img');\n\t\t\t\t\t// \timgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href;\n\t\t\t\t\t// \timgMenuToggle.onclick = this.toggleSidebar;\n\t\t\t\t\t// \t// imgMenuToggle.classList.add('potree_menu_toggle');\n\n\t\t\t\t\t// \tpotreeMap.append(imgMenuToggle);\n\t\t\t\t\t// }\n\n\t\t\t\t\t// {\n\t\t\t\t\t// \tlet imgMenuToggle = document.createElement('img');\n\t\t\t\t\t// \timgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href;\n\t\t\t\t\t// \timgMenuToggle.onclick = this.toggleSidebar;\n\t\t\t\t\t// \t// imgMenuToggle.classList.add('potree_menu_toggle');\n\n\t\t\t\t\t// \tpotreeMap.append(imgMenuToggle);\n\t\t\t\t\t// }\n\n\t\t\t\t\t\n\n\t\t\t\t\t$(domElement).append(potreeMap);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.pointCloudLoadedCallback = args.onPointCloudLoaded || function () {};\n\n\t\t\t// if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {\n\t\t\t//\tdefaultSettings.navigation = \"Orbit\";\n\t\t\t// }\n\n\t\t\tthis.server = null;\n\n\t\t\tthis.fov = 60;\n\t\t\tthis.isFlipYZ = false;\n\t\t\tthis.useDEMCollisions = false;\n\t\t\tthis.generateDEM = false;\n\t\t\tthis.minNodeSize = 30;\n\t\t\tthis.edlStrength = 1.0;\n\t\t\tthis.edlRadius = 1.4;\n\t\t\tthis.edlOpacity = 1.0;\n\t\t\tthis.useEDL = false;\n\t\t\tthis.description = \"\";\n\n\t\t\tthis.classifications = ClassificationScheme.DEFAULT;\n\n\t\t\tthis.moveSpeed = 10;\n\n\t\t\tthis.lengthUnit = LengthUnits.METER;\n\t\t\tthis.lengthUnitDisplay = LengthUnits.METER;\n\n\t\t\tthis.showBoundingBox = false;\n\t\t\tthis.showAnnotations = true;\n\t\t\tthis.freeze = false;\n\t\t\tthis.clipTask = ClipTask.HIGHLIGHT;\n\t\t\tthis.clipMethod = ClipMethod.INSIDE_ANY;\n\n\t\t\tthis.elevationGradientRepeat = ElevationGradientRepeat.CLAMP;\n\n\t\t\tthis.filterReturnNumberRange = [0, 7];\n\t\t\tthis.filterNumberOfReturnsRange = [0, 7];\n\t\t\tthis.filterGPSTimeRange = [-Infinity, Infinity];\n\t\t\tthis.filterPointSourceIDRange = [0, 65535];\n\n\t\t\tthis.potreeRenderer = null;\n\t\t\tthis.edlRenderer = null;\n\t\t\tthis.renderer = null;\n\t\t\tthis.pRenderer = null;\n\n\t\t\tthis.scene = null;\n\t\t\tthis.sceneVR = null;\n\t\t\tthis.overlay = null;\n\t\t\tthis.overlayCamera = null;\n\n\t\t\tthis.inputHandler = null;\n\t\t\tthis.controls = null;\n\n\t\t\tthis.clippingTool =  null;\n\t\t\tthis.transformationTool = null;\n\t\t\tthis.navigationCube = null;\n\t\t\tthis.compass = null;\n\t\t\t\n\t\t\tthis.skybox = null;\n\t\t\tthis.clock = new Clock();\n\t\t\tthis.background = null;\n\n\t\t\tthis.initThree();\n\n\t\t\tif(args.noDragAndDrop){\n\t\t\t\t\n\t\t\t}else {\n\t\t\t\tthis.initDragAndDrop();\n\t\t\t}\n\n\t\t\tif(typeof Stats !== \"undefined\"){\n\t\t\t\tthis.stats = new Stats();\n\t\t\t\tthis.stats.showPanel( 0 ); // 0: fps, 1: ms, 2: mb, 3+: custom\n\t\t\t\tdocument.body.appendChild( this.stats.dom );\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tlet canvas = this.renderer.domElement;\n\t\t\t\tcanvas.addEventListener(\"webglcontextlost\", (e) => {\n\t\t\t\t\tconsole.log(e);\n\t\t\t\t\tthis.postMessage(\"WebGL context lost. \\u2639\");\n\n\t\t\t\t\tlet gl = this.renderer.getContext();\n\t\t\t\t\tlet error = gl.getError();\n\t\t\t\t\tconsole.log(error);\n\t\t\t\t}, false);\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tthis.overlay = new Scene();\n\t\t\t\tthis.overlayCamera = new OrthographicCamera(\n\t\t\t\t\t0, 1,\n\t\t\t\t\t1, 0,\n\t\t\t\t\t-1000, 1000\n\t\t\t\t);\n\t\t\t}\n\t\t\t\n\t\t\tthis.pRenderer = new Renderer(this.renderer);\n\t\t\t\n\t\t\t{\n\t\t\t\tlet near = 2.5;\n\t\t\t\tlet far = 10.0;\n\t\t\t\tlet fov = 90;\n\t\t\t\t\n\t\t\t\tthis.shadowTestCam = new PerspectiveCamera(90, 1, near, far);\n\t\t\t\tthis.shadowTestCam.position.set(3.50, -2.80, 8.561);\n\t\t\t\tthis.shadowTestCam.lookAt(new Vector3(0, 0, 4.87));\n\t\t\t}\n\t\t\t\n\n\t\t\tlet scene = new Scene$1(this.renderer);\n\t\t\t\n\t\t\t{ // create VR scene\n\t\t\t\tthis.sceneVR = new Scene();\n\n\t\t\t\t// let texture = new THREE.TextureLoader().load(`${Potree.resourcePath}/images/vr_controller_help.jpg`);\n\n\t\t\t\t// let plane = new THREE.PlaneBufferGeometry(1, 1, 1, 1);\n\t\t\t\t// let infoMaterial = new THREE.MeshBasicMaterial({map: texture});\n\t\t\t\t// let infoNode = new THREE.Mesh(plane, infoMaterial);\n\t\t\t\t// infoNode.position.set(-0.5, 1, 0);\n\t\t\t\t// infoNode.scale.set(0.4, 0.3, 1);\n\t\t\t\t// infoNode.lookAt(0, 1, 0)\n\t\t\t\t// this.sceneVR.add(infoNode);\n\n\t\t\t\t// window.infoNode = infoNode;\n\t\t\t}\n\n\t\t\tthis.setScene(scene);\n\n\t\t\t{\n\t\t\t\tthis.inputHandler = new InputHandler(this);\n\t\t\t\tthis.inputHandler.setScene(this.scene);\n\n\t\t\t\tthis.clippingTool = new ClippingTool(this);\n\t\t\t\tthis.transformationTool = new TransformationTool(this);\n\t\t\t\tthis.navigationCube = new NavigationCube(this);\n\t\t\t\tthis.navigationCube.visible = false;\n\n\t\t\t\tthis.compass = new Compass(this);\n\t\t\t\t\n\t\t\t\tthis.createControls();\n\n\t\t\t\tthis.clippingTool.setScene(this.scene);\n\t\t\t\t\n\t\t\t\tlet onPointcloudAdded = (e) => {\n\t\t\t\t\tif (this.scene.pointclouds.length === 1) {\n\t\t\t\t\t\tlet speed = e.pointcloud.boundingBox.getSize(new Vector3()).length();\n\t\t\t\t\t\tspeed = speed / 5;\n\t\t\t\t\t\tthis.setMoveSpeed(speed);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet onVolumeRemoved = (e) => {\n\t\t\t\t\tthis.inputHandler.deselect(e.volume);\n\t\t\t\t};\n\n\t\t\t\tthis.addEventListener('scene_changed', (e) => {\n\t\t\t\t\tthis.inputHandler.setScene(e.scene);\n\t\t\t\t\tthis.clippingTool.setScene(this.scene);\n\t\t\t\t\t\n\t\t\t\t\tif(!e.scene.hasEventListener(\"pointcloud_added\", onPointcloudAdded)){\n\t\t\t\t\t\te.scene.addEventListener(\"pointcloud_added\", onPointcloudAdded);\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!e.scene.hasEventListener(\"volume_removed\", onPointcloudAdded)){\n\t\t\t\t\t\te.scene.addEventListener(\"volume_removed\", onVolumeRemoved);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\n\t\t\t\tthis.scene.addEventListener(\"volume_removed\", onVolumeRemoved);\n\t\t\t\tthis.scene.addEventListener('pointcloud_added', onPointcloudAdded);\n\t\t\t}\n\n\t\t\t{ // set defaults\n\t\t\t\tthis.setFOV(60);\n\t\t\t\tthis.setEDLEnabled(false);\n\t\t\t\tthis.setEDLRadius(1.4);\n\t\t\t\tthis.setEDLStrength(0.4);\n\t\t\t\tthis.setEDLOpacity(1.0);\n\t\t\t\tthis.setClipTask(ClipTask.HIGHLIGHT);\n\t\t\t\tthis.setClipMethod(ClipMethod.INSIDE_ANY);\n\t\t\t\tthis.setPointBudget(1*1000*1000);\n\t\t\t\tthis.setShowBoundingBox(false);\n\t\t\t\tthis.setFreeze(false);\n\t\t\t\tthis.setControls(this.orbitControls);\n\t\t\t\tthis.setBackground('gradient');\n\n\t\t\t\tthis.scaleFactor = 1;\n\n\t\t\t\tthis.loadSettingsFromURL();\n\t\t\t}\n\n\t\t\t// start rendering!\n\t\t\t//if(args.useDefaultRenderLoop === undefined || args.useDefaultRenderLoop === true){\n\t\t\t\t//requestAnimationFrame(this.loop.bind(this));\n\t\t\t//}\n\n\t\t\tthis.renderer.setAnimationLoop(this.loop.bind(this));\n\n\t\t\tthis.loadGUI = this.loadGUI.bind(this);\n\n\t\t\tthis.annotationTool = new AnnotationTool(this);\n\t\t\tthis.measuringTool = new MeasuringTool(this);\n\t\t\tthis.profileTool = new ProfileTool(this);\n\t\t\tthis.volumeTool = new VolumeTool(this);\n\n\t\t\t}catch(e){\n\t\t\t\tthis.onCrash(e);\n\t\t\t}\n\t\t}\n\n\t\tonCrash(error){\n\n\t\t\t$(this.renderArea).empty();\n\n\t\t\tif ($(this.renderArea).find('#potree_failpage').length === 0) {\n\t\t\t\tlet elFailPage = $(`\n\t\t\t<div id=\"#potree_failpage\" class=\"potree_failpage\"> \n\t\t\t\t\n\t\t\t\t<h1>Potree Encountered An Error </h1>\n\n\t\t\t\t<p>\n\t\t\t\tThis may happen if your browser or graphics card is not supported.\n\t\t\t\t<br>\n\t\t\t\tWe recommend to use \n\t\t\t\t<a href=\"https://www.google.com/chrome/browser\" target=\"_blank\" style=\"color:initial\">Chrome</a>\n\t\t\t\tor \n\t\t\t\t<a href=\"https://www.mozilla.org/\" target=\"_blank\">Firefox</a>.\n\t\t\t\t</p>\n\n\t\t\t\t<p>\n\t\t\t\tPlease also visit <a href=\"http://webglreport.com/\" target=\"_blank\">webglreport.com</a> and \n\t\t\t\tcheck whether your system supports WebGL.\n\t\t\t\t</p>\n\t\t\t\t<p>\n\t\t\t\tIf you are already using one of the recommended browsers and WebGL is enabled, \n\t\t\t\tconsider filing an issue report at <a href=\"https://github.com/potree/potree/issues\" target=\"_blank\">github</a>,<br>\n\t\t\t\tincluding your operating system, graphics card, browser and browser version, as well as the \n\t\t\t\terror message below.<br>\n\t\t\t\tPlease do not report errors on unsupported browsers.\n\t\t\t\t</p>\n\n\t\t\t\t<pre id=\"potree_error_console\" style=\"width: 100%; height: 100%\"></pre>\n\t\t\t\t\n\t\t\t</div>`);\n\n\t\t\t\tlet elErrorMessage = elFailPage.find('#potree_error_console');\n\t\t\t\telErrorMessage.html(error.stack);\n\n\t\t\t\t$(this.renderArea).append(elFailPage);\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\t// ------------------------------------------------------------------------------------\n\t\t// Viewer API\n\t\t// ------------------------------------------------------------------------------------\n\n\t\tsetScene (scene) {\n\t\t\tif (scene === this.scene) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet oldScene = this.scene;\n\t\t\tthis.scene = scene;\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'scene_changed',\n\t\t\t\toldScene: oldScene,\n\t\t\t\tscene: scene\n\t\t\t});\n\n\t\t\t{ // Annotations\n\t\t\t\t$('.annotation').detach();\n\n\t\t\t\t// for(let annotation of this.scene.annotations){\n\t\t\t\t//\tthis.renderArea.appendChild(annotation.domElement[0]);\n\t\t\t\t// }\n\n\t\t\t\tthis.scene.annotations.traverse(annotation => {\n\t\t\t\t\tthis.renderArea.appendChild(annotation.domElement[0]);\n\t\t\t\t});\n\n\t\t\t\tif (!this.onAnnotationAdded) {\n\t\t\t\t\tthis.onAnnotationAdded = e => {\n\t\t\t\t\t// console.log(\"annotation added: \" + e.annotation.title);\n\n\t\t\t\t\t\te.annotation.traverse(node => {\n\n\t\t\t\t\t\t\t$(\"#potree_annotation_container\").append(node.domElement);\n\t\t\t\t\t\t\t//this.renderArea.appendChild(node.domElement[0]);\n\t\t\t\t\t\t\tnode.scene = this.scene;\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (oldScene) {\n\t\t\t\t\toldScene.annotations.removeEventListener('annotation_added', this.onAnnotationAdded);\n\t\t\t\t}\n\t\t\t\tthis.scene.annotations.addEventListener('annotation_added', this.onAnnotationAdded);\n\t\t\t}\n\t\t};\n\n\t\tsetControls(controls){\n\t\t\tif (controls !== this.controls) {\n\t\t\t\tif (this.controls) {\n\t\t\t\t\tthis.controls.enabled = false;\n\t\t\t\t\tthis.inputHandler.removeInputListener(this.controls);\n\t\t\t\t}\n\n\t\t\t\tthis.controls = controls;\n\t\t\t\tthis.controls.enabled = true;\n\t\t\t\tthis.inputHandler.addInputListener(this.controls);\n\t\t\t}\n\t\t}\n\n\t\tgetControls () {\n\n\t\t\tif(this.renderer.xr.isPresenting){\n\t\t\t\treturn this.vrControls;\n\t\t\t}else {\n\t\t\t\treturn this.controls;\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tgetMinNodeSize () {\n\t\t\treturn this.minNodeSize;\n\t\t};\n\n\t\tsetMinNodeSize (value) {\n\t\t\tif (this.minNodeSize !== value) {\n\t\t\t\tthis.minNodeSize = value;\n\t\t\t\tthis.dispatchEvent({'type': 'minnodesize_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetBackground () {\n\t\t\treturn this.background;\n\t\t}\n\n\t\tsetBackground(bg){\n\t\t\tif (this.background === bg) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(bg === \"skybox\"){\n\t\t\t\tthis.skybox = Utils.loadSkybox(new URL(Potree.resourcePath + '/textures/skybox2/').href);\n\t\t\t}\n\n\t\t\tthis.background = bg;\n\t\t\tthis.dispatchEvent({'type': 'background_changed', 'viewer': this});\n\t\t}\n\n\t\tsetDescription (value) {\n\t\t\tthis.description = value;\n\t\t\t\n\t\t\t$('#potree_description').html(value);\n\t\t\t//$('#potree_description').text(value);\n\t\t}\n\n\t\tgetDescription(){\n\t\t\treturn this.description;\n\t\t}\n\n\t\tsetShowBoundingBox (value) {\n\t\t\tif (this.showBoundingBox !== value) {\n\t\t\t\tthis.showBoundingBox = value;\n\t\t\t\tthis.dispatchEvent({'type': 'show_boundingbox_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetShowBoundingBox () {\n\t\t\treturn this.showBoundingBox;\n\t\t};\n\n\t\tsetMoveSpeed (value) {\n\t\t\tif (this.moveSpeed !== value) {\n\t\t\t\tthis.moveSpeed = value;\n\t\t\t\tthis.dispatchEvent({'type': 'move_speed_changed', 'viewer': this, 'speed': value});\n\t\t\t}\n\t\t};\n\n\t\tgetMoveSpeed () {\n\t\t\treturn this.moveSpeed;\n\t\t};\n\n\t\tsetWeightClassification (w) {\n\t\t\tfor (let i = 0; i < this.scene.pointclouds.length; i++) {\n\t\t\t\tthis.scene.pointclouds[i].material.weightClassification = w;\n\t\t\t\tthis.dispatchEvent({'type': 'attribute_weights_changed' + i, 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tsetFreeze (value) {\n\t\t\tvalue = Boolean(value);\n\t\t\tif (this.freeze !== value) {\n\t\t\t\tthis.freeze = value;\n\t\t\t\tthis.dispatchEvent({'type': 'freeze_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetFreeze () {\n\t\t\treturn this.freeze;\n\t\t};\n\n\t\tgetClipTask(){\n\t\t\treturn this.clipTask;\n\t\t}\n\n\t\tgetClipMethod(){\n\t\t\treturn this.clipMethod;\n\t\t}\n\n\t\tsetClipTask(value){\n\t\t\tif(this.clipTask !== value){\n\n\t\t\t\tthis.clipTask = value;\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: \"cliptask_changed\", \n\t\t\t\t\tviewer: this});\t\t\n\t\t\t}\n\t\t}\n\n\t\tsetClipMethod(value){\n\t\t\tif(this.clipMethod !== value){\n\n\t\t\t\tthis.clipMethod = value;\n\t\t\t\t\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: \"clipmethod_changed\",\n\t\t\t\t\tviewer: this});\n\t\t\t}\n\t\t}\n\n\t\tsetElevationGradientRepeat(value){\n\t\t\tif(this.elevationGradientRepeat !== value){\n\n\t\t\t\tthis.elevationGradientRepeat = value;\n\n\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\ttype: \"elevation_gradient_repeat_changed\", \n\t\t\t\t\tviewer: this});\n\t\t\t}\n\t\t}\n\n\t\tsetPointBudget (value) {\n\t\t\tif (Potree.pointBudget !== value) {\n\t\t\t\tPotree.pointBudget = parseInt(value);\n\t\t\t\tthis.dispatchEvent({'type': 'point_budget_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetPointBudget () {\n\t\t\treturn Potree.pointBudget;\n\t\t};\n\n\t\tsetShowAnnotations (value) {\n\t\t\tif (this.showAnnotations !== value) {\n\t\t\t\tthis.showAnnotations = value;\n\t\t\t\tthis.dispatchEvent({'type': 'show_annotations_changed', 'viewer': this});\n\t\t\t}\n\t\t}\n\n\t\tgetShowAnnotations () {\n\t\t\treturn this.showAnnotations;\n\t\t}\n\t\t\n\t\tsetDEMCollisionsEnabled(value){\n\t\t\tif(this.useDEMCollisions !== value){\n\t\t\t\tthis.useDEMCollisions = value;\n\t\t\t\tthis.dispatchEvent({'type': 'use_demcollisions_changed', 'viewer': this});\n\t\t\t};\n\t\t};\n\n\t\tgetDEMCollisionsEnabled () {\n\t\t\treturn this.useDEMCollisions;\n\t\t};\n\n\t\tsetEDLEnabled (value) {\n\t\t\tvalue = Boolean(value) && Features.SHADER_EDL.isSupported();\n\n\t\t\tif (this.useEDL !== value) {\n\t\t\t\tthis.useEDL = value;\n\t\t\t\tthis.dispatchEvent({'type': 'use_edl_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetEDLEnabled () {\n\t\t\treturn this.useEDL;\n\t\t};\n\n\t\tsetEDLRadius (value) {\n\t\t\tif (this.edlRadius !== value) {\n\t\t\t\tthis.edlRadius = value;\n\t\t\t\tthis.dispatchEvent({'type': 'edl_radius_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetEDLRadius () {\n\t\t\treturn this.edlRadius;\n\t\t};\n\n\t\tsetEDLStrength (value) {\n\t\t\tif (this.edlStrength !== value) {\n\t\t\t\tthis.edlStrength = value;\n\t\t\t\tthis.dispatchEvent({'type': 'edl_strength_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetEDLStrength () {\n\t\t\treturn this.edlStrength;\n\t\t};\n\n\t\tsetEDLOpacity (value) {\n\t\t\tif (this.edlOpacity !== value) {\n\t\t\t\tthis.edlOpacity = value;\n\t\t\t\tthis.dispatchEvent({'type': 'edl_opacity_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetEDLOpacity () {\n\t\t\treturn this.edlOpacity;\n\t\t};\n\n\t\tsetFOV (value) {\n\t\t\tif (this.fov !== value) {\n\t\t\t\tthis.fov = value;\n\t\t\t\tthis.dispatchEvent({'type': 'fov_changed', 'viewer': this});\n\t\t\t}\n\t\t};\n\n\t\tgetFOV () {\n\t\t\treturn this.fov;\n\t\t};\n\n\t\tdisableAnnotations () {\n\t\t\tthis.scene.annotations.traverse(annotation => {\n\t\t\t\tannotation.domElement.css('pointer-events', 'none');\n\n\t\t\t\t// return annotation.visible;\n\t\t\t});\n\t\t};\n\n\t\tenableAnnotations () {\n\t\t\tthis.scene.annotations.traverse(annotation => {\n\t\t\t\tannotation.domElement.css('pointer-events', 'auto');\n\n\t\t\t\t// return annotation.visible;\n\t\t\t});\n\t\t}\n\n\t\tsetClassifications(classifications){\n\t\t\tthis.classifications = classifications;\n\n\t\t\tthis.dispatchEvent({'type': 'classifications_changed', 'viewer': this});\n\t\t}\n\n\t\tsetClassificationVisibility (key, value) {\n\t\t\tif (!this.classifications[key]) {\n\t\t\t\tthis.classifications[key] = {visible: value, name: 'no name'};\n\t\t\t\tthis.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this});\n\t\t\t} else if (this.classifications[key].visible !== value) {\n\t\t\t\tthis.classifications[key].visible = value;\n\t\t\t\tthis.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this});\n\t\t\t}\n\t\t}\n\n\t\ttoggleAllClassificationsVisibility(){\n\n\t\t\tlet numVisible = 0;\n\t\t\tlet numItems = 0;\n\t\t\tfor(const key of Object.keys(this.classifications)){\n\t\t\t\tif(this.classifications[key].visible){\n\t\t\t\t\tnumVisible++;\n\t\t\t\t}\n\t\t\t\tnumItems++;\n\t\t\t}\n\n\t\t\tlet visible = true;\n\t\t\tif(numVisible === numItems){\n\t\t\t\tvisible = false;\n\t\t\t}\n\n\t\t\tlet somethingChanged = false;\n\n\t\t\tfor(const key of Object.keys(this.classifications)){\n\t\t\t\tif(this.classifications[key].visible !== visible){\n\t\t\t\t\tthis.classifications[key].visible = visible;\n\t\t\t\t\tsomethingChanged = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(somethingChanged){\n\t\t\t\tthis.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this});\n\t\t\t}\n\t\t}\n\n\t\tsetFilterReturnNumberRange(from, to){\n\t\t\tthis.filterReturnNumberRange = [from, to];\n\t\t\tthis.dispatchEvent({'type': 'filter_return_number_range_changed', 'viewer': this});\n\t\t}\n\n\t\tsetFilterNumberOfReturnsRange(from, to){\n\t\t\tthis.filterNumberOfReturnsRange = [from, to];\n\t\t\tthis.dispatchEvent({'type': 'filter_number_of_returns_range_changed', 'viewer': this});\n\t\t}\n\n\t\tsetFilterGPSTimeRange(from, to){\n\t\t\tthis.filterGPSTimeRange = [from, to];\n\t\t\tthis.dispatchEvent({'type': 'filter_gps_time_range_changed', 'viewer': this});\n\t\t}\n\n\t\tsetFilterPointSourceIDRange(from, to){\n\t\t\tthis.filterPointSourceIDRange = [from, to];\n\t\t\tthis.dispatchEvent({'type': 'filter_point_source_id_range_changed', 'viewer': this});\n\t\t}\n\n\t\tsetLengthUnit (value) {\n\t\t\tswitch (value) {\n\t\t\t\tcase 'm':\n\t\t\t\t\tthis.lengthUnit = LengthUnits.METER;\n\t\t\t\t\tthis.lengthUnitDisplay = LengthUnits.METER;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ft':\n\t\t\t\t\tthis.lengthUnit = LengthUnits.FEET;\n\t\t\t\t\tthis.lengthUnitDisplay = LengthUnits.FEET;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'in':\n\t\t\t\t\tthis.lengthUnit = LengthUnits.INCH;\n\t\t\t\t\tthis.lengthUnitDisplay = LengthUnits.INCH;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.dispatchEvent({ 'type': 'length_unit_changed', 'viewer': this, value: value});\n\t\t};\n\n\t\tsetLengthUnitAndDisplayUnit(lengthUnitValue, lengthUnitDisplayValue) {\n\t\t\tswitch (lengthUnitValue) {\n\t\t\t\tcase 'm':\n\t\t\t\t\tthis.lengthUnit = LengthUnits.METER;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ft':\n\t\t\t\t\tthis.lengthUnit = LengthUnits.FEET;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'in':\n\t\t\t\t\tthis.lengthUnit = LengthUnits.INCH;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tswitch (lengthUnitDisplayValue) {\n\t\t\t\tcase 'm':\n\t\t\t\t\tthis.lengthUnitDisplay = LengthUnits.METER;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ft':\n\t\t\t\t\tthis.lengthUnitDisplay = LengthUnits.FEET;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'in':\n\t\t\t\t\tthis.lengthUnitDisplay = LengthUnits.INCH;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.dispatchEvent({ 'type': 'length_unit_changed', 'viewer': this, value: lengthUnitValue });\n\t\t};\n\n\t\tzoomTo(node, factor, animationDuration = 0){\n\t\t\tlet view = this.scene.view;\n\n\t\t\tlet camera = this.scene.cameraP.clone();\n\t\t\tcamera.rotation.copy(this.scene.cameraP.rotation);\n\t\t\tcamera.rotation.order = \"ZXY\";\n\t\t\tcamera.rotation.x = Math.PI / 2 + view.pitch;\n\t\t\tcamera.rotation.z = view.yaw;\n\t\t\tcamera.updateMatrix();\n\t\t\tcamera.updateMatrixWorld();\n\t\t\tcamera.zoomTo(node, factor);\n\n\t\t\tlet bs;\n\t\t\tif (node.boundingSphere) {\n\t\t\t\tbs = node.boundingSphere;\n\t\t\t} else if (node.geometry && node.geometry.boundingSphere) {\n\t\t\t\tbs = node.geometry.boundingSphere;\n\t\t\t} else {\n\t\t\t\tbs = node.boundingBox.getBoundingSphere(new Sphere());\n\t\t\t}\n\t\t\tbs = bs.clone().applyMatrix4(node.matrixWorld); \n\n\t\t\tlet startPosition = view.position.clone();\n\t\t\tlet endPosition = camera.position.clone();\n\t\t\tlet startTarget = view.getPivot();\n\t\t\tlet endTarget = bs.center;\n\t\t\tlet startRadius = view.radius;\n\t\t\tlet endRadius = endPosition.distanceTo(endTarget);\n\n\t\t\tlet easing = TWEEN.Easing.Quartic.Out;\n\n\t\t\t{ // animate camera position\n\t\t\t\tlet pos = startPosition.clone();\n\t\t\t\tlet tween = new TWEEN.Tween(pos).to(endPosition, animationDuration);\n\t\t\t\ttween.easing(easing);\n\n\t\t\t\ttween.onUpdate(() => {\n\t\t\t\t\tview.position.copy(pos);\n\t\t\t\t});\n\n\t\t\t\ttween.start();\n\t\t\t}\n\n\t\t\t{ // animate camera target\n\t\t\t\tlet target = startTarget.clone();\n\t\t\t\tlet tween = new TWEEN.Tween(target).to(endTarget, animationDuration);\n\t\t\t\ttween.easing(easing);\n\t\t\t\ttween.onUpdate(() => {\n\t\t\t\t\tview.lookAt(target);\n\t\t\t\t});\n\t\t\t\ttween.onComplete(() => {\n\t\t\t\t\tview.lookAt(target);\n\t\t\t\t\tthis.dispatchEvent({type: 'focusing_finished', target: this});\n\t\t\t\t});\n\n\t\t\t\tthis.dispatchEvent({type: 'focusing_started', target: this});\n\t\t\t\ttween.start();\n\t\t\t}\n\t\t};\n\n\t\tmoveToGpsTimeVicinity(time){\n\t\t\tconst result = Potree.Utils.findClosestGpsTime(time, viewer);\n\n\t\t\tconst box  = result.node.pointcloud.deepestNodeAt(result.position).getBoundingBox();\n\t\t\tconst diameter = box.min.distanceTo(box.max);\n\n\t\t\tconst camera = this.scene.getActiveCamera();\n\t\t\tconst offset = camera.getWorldDirection(new Vector3()).multiplyScalar(diameter);\n\t\t\tconst newCamPos = result.position.clone().sub(offset);\n\n\t\t\tthis.scene.view.position.copy(newCamPos);\n\t\t\tthis.scene.view.lookAt(result.position);\n\t\t}\n\n\t\tshowAbout () {\n\t\t\t$(function () {\n\t\t\t\t$('#about-panel').dialog();\n\t\t\t});\n\t\t};\n\n\t\tgetBoundingBox (pointclouds) {\n\t\t\treturn this.scene.getBoundingBox(pointclouds);\n\t\t};\n\n\t\tgetGpsTimeExtent(){\n\t\t\tconst range = [Infinity, -Infinity];\n\n\t\t\tfor(const pointcloud of this.scene.pointclouds){\n\t\t\t\tconst attributes = pointcloud.pcoGeometry.pointAttributes.attributes;\n\t\t\t\tconst aGpsTime = attributes.find(a => a.name === \"gps-time\");\n\n\t\t\t\tif(aGpsTime){\n\t\t\t\t\trange[0] = Math.min(range[0], aGpsTime.range[0]);\n\t\t\t\t\trange[1] = Math.max(range[1], aGpsTime.range[1]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn range;\n\t\t}\n\n\t\tfitToScreen (factor = 1, animationDuration = 0) {\n\t\t\tlet box = this.getBoundingBox(this.scene.pointclouds);\n\n\t\t\tlet node = new Object3D();\n\t\t\tnode.boundingBox = box;\n\n\t\t\tthis.zoomTo(node, factor, animationDuration);\n\t\t\tthis.controls.stop();\n\t\t};\n\n\t\ttoggleNavigationCube() {\n\t\t\tthis.navigationCube.visible = !this.navigationCube.visible;\n\t\t}\n\n\t\tsetView(view) {\n\t\t\tif(!view) return;\n\n\t\t\tswitch(view) {\n\t\t\t\tcase \"F\":\n\t\t\t\t\tthis.setFrontView();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"B\":\n\t\t\t\t\tthis.setBackView();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"L\":\n\t\t\t\t\tthis.setLeftView();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"R\":\n\t\t\t\t\tthis.setRightView();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"U\":\n\t\t\t\t\tthis.setTopView();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"D\":\n\t\t\t\t\tthis.setBottomView();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\tsetTopView(){\n\t\t\tthis.scene.view.yaw = 0;\n\t\t\tthis.scene.view.pitch = -Math.PI / 2;\n\n\t\t\tthis.fitToScreen();\n\t\t};\n\t\t\n\t\tsetBottomView(){\n\t\t\tthis.scene.view.yaw = -Math.PI;\n\t\t\tthis.scene.view.pitch = Math.PI / 2;\n\t\t\t\n\t\t\tthis.fitToScreen();\n\t\t};\n\n\t\tsetFrontView(){\n\t\t\tthis.scene.view.yaw = 0;\n\t\t\tthis.scene.view.pitch = 0;\n\n\t\t\tthis.fitToScreen();\n\t\t};\n\t\t\n\t\tsetBackView(){\n\t\t\tthis.scene.view.yaw = Math.PI;\n\t\t\tthis.scene.view.pitch = 0;\n\t\t\t\n\t\t\tthis.fitToScreen();\n\t\t};\n\n\t\tsetLeftView(){\n\t\t\tthis.scene.view.yaw = -Math.PI / 2;\n\t\t\tthis.scene.view.pitch = 0;\n\n\t\t\tthis.fitToScreen();\n\t\t};\n\n\t\tsetRightView () {\n\t\t\tthis.scene.view.yaw = Math.PI / 2;\n\t\t\tthis.scene.view.pitch = 0;\n\n\t\t\tthis.fitToScreen();\n\t\t};\n\n\t\tflipYZ () {\n\t\t\tthis.isFlipYZ = !this.isFlipYZ;\n\n\t\t\t// TODO flipyz\n\t\t\tconsole.log('TODO');\n\t\t}\n\t\t\n\t\tsetCameraMode(mode){\n\t\t\tthis.scene.cameraMode = mode;\n\n\t\t\tfor(let pointcloud of this.scene.pointclouds) {\n\t\t\t\tpointcloud.material.useOrthographicCamera = mode == CameraMode.ORTHOGRAPHIC;\n\t\t\t}\n\t\t}\n\n\t\tgetProjection(){\n\t\t\tconst pointcloud = this.scene.pointclouds[0];\n\n\t\t\tif(pointcloud){\n\t\t\t\treturn pointcloud.projection;\n\t\t\t}else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\tasync loadProject(url){\n\n\t\t\tconst response = await fetch(url);\n\t\t\n\t\t\tconst text = await response.text();\n\t\t\tconst json = lib.parse(text);\n\t\t\t// const json = JSON.parse(text);\n\n\t\t\tif(json.type === \"Potree\"){\n\t\t\t\tPotree.loadProject(viewer, json);\n\t\t\t}\n\n\t\t\t//Potree.loadProject(this, url);\n\t\t}\n\n\t\tsaveProject(){\n\t\t\treturn Potree.saveProject(this);\n\t\t}\n\t\t\n\t\tloadSettingsFromURL(){\n\t\t\tif(Utils.getParameterByName(\"pointSize\")){\n\t\t\t\tthis.setPointSize(parseFloat(Utils.getParameterByName(\"pointSize\")));\n\t\t\t}\n\t\t\t\n\t\t\tif(Utils.getParameterByName(\"FOV\")){\n\t\t\t\tthis.setFOV(parseFloat(Utils.getParameterByName(\"FOV\")));\n\t\t\t}\n\t\t\t\n\t\t\tif(Utils.getParameterByName(\"opacity\")){\n\t\t\t\tthis.setOpacity(parseFloat(Utils.getParameterByName(\"opacity\")));\n\t\t\t}\n\t\t\t\n\t\t\tif(Utils.getParameterByName(\"edlEnabled\")){\n\t\t\t\tlet enabled = Utils.getParameterByName(\"edlEnabled\") === \"true\";\n\t\t\t\tthis.setEDLEnabled(enabled);\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('edlRadius')) {\n\t\t\t\tthis.setEDLRadius(parseFloat(Utils.getParameterByName('edlRadius')));\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('edlStrength')) {\n\t\t\t\tthis.setEDLStrength(parseFloat(Utils.getParameterByName('edlStrength')));\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('pointBudget')) {\n\t\t\t\tthis.setPointBudget(parseFloat(Utils.getParameterByName('pointBudget')));\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('showBoundingBox')) {\n\t\t\t\tlet enabled = Utils.getParameterByName('showBoundingBox') === 'true';\n\t\t\t\tif (enabled) {\n\t\t\t\t\tthis.setShowBoundingBox(true);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setShowBoundingBox(false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('material')) {\n\t\t\t\tlet material = Utils.getParameterByName('material');\n\t\t\t\tthis.setMaterial(material);\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('pointSizing')) {\n\t\t\t\tlet sizing = Utils.getParameterByName('pointSizing');\n\t\t\t\tthis.setPointSizing(sizing);\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('quality')) {\n\t\t\t\tlet quality = Utils.getParameterByName('quality');\n\t\t\t\tthis.setQuality(quality);\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('position')) {\n\t\t\t\tlet value = Utils.getParameterByName('position');\n\t\t\t\tvalue = value.replace('[', '').replace(']', '');\n\t\t\t\tlet tokens = value.split(';');\n\t\t\t\tlet x = parseFloat(tokens[0]);\n\t\t\t\tlet y = parseFloat(tokens[1]);\n\t\t\t\tlet z = parseFloat(tokens[2]);\n\n\t\t\t\tthis.scene.view.position.set(x, y, z);\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('target')) {\n\t\t\t\tlet value = Utils.getParameterByName('target');\n\t\t\t\tvalue = value.replace('[', '').replace(']', '');\n\t\t\t\tlet tokens = value.split(';');\n\t\t\t\tlet x = parseFloat(tokens[0]);\n\t\t\t\tlet y = parseFloat(tokens[1]);\n\t\t\t\tlet z = parseFloat(tokens[2]);\n\n\t\t\t\tthis.scene.view.lookAt(new Vector3(x, y, z));\n\t\t\t}\n\n\t\t\tif (Utils.getParameterByName('background')) {\n\t\t\t\tlet value = Utils.getParameterByName('background');\n\t\t\t\tthis.setBackground(value);\n\t\t\t}\n\n\t\t\t// if(Utils.getParameterByName(\"elevationRange\")){\n\t\t\t//\tlet value = Utils.getParameterByName(\"elevationRange\");\n\t\t\t//\tvalue = value.replace(\"[\", \"\").replace(\"]\", \"\");\n\t\t\t//\tlet tokens = value.split(\";\");\n\t\t\t//\tlet x = parseFloat(tokens[0]);\n\t\t\t//\tlet y = parseFloat(tokens[1]);\n\t\t\t//\n\t\t\t//\tthis.setElevationRange(x, y);\n\t\t\t//\t//this.scene.view.target.set(x, y, z);\n\t\t\t// }\n\t\t};\n\n\t\t// ------------------------------------------------------------------------------------\n\t\t// Viewer Internals\n\t\t// ------------------------------------------------------------------------------------\n\n\t\tcreateControls () {\n\t\t\t{ // create FIRST PERSON CONTROLS\n\t\t\t\tthis.fpControls = new FirstPersonControls(this);\n\t\t\t\tthis.fpControls.enabled = false;\n\t\t\t\tthis.fpControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\t\tthis.fpControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t\t}\n\n\t\t\t// { // create GEO CONTROLS\n\t\t\t//\tthis.geoControls = new GeoControls(this.scene.camera, this.renderer.domElement);\n\t\t\t//\tthis.geoControls.enabled = false;\n\t\t\t//\tthis.geoControls.addEventListener(\"start\", this.disableAnnotations.bind(this));\n\t\t\t//\tthis.geoControls.addEventListener(\"end\", this.enableAnnotations.bind(this));\n\t\t\t//\tthis.geoControls.addEventListener(\"move_speed_changed\", (event) => {\n\t\t\t//\t\tthis.setMoveSpeed(this.geoControls.moveSpeed);\n\t\t\t//\t});\n\t\t\t// }\n\n\t\t\t{ // create ORBIT CONTROLS\n\t\t\t\tthis.orbitControls = new OrbitControls(this);\n\t\t\t\tthis.orbitControls.enabled = false;\n\t\t\t\tthis.orbitControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\t\tthis.orbitControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t\t}\n\n\t\t\t{ // create EARTH CONTROLS\n\t\t\t\tthis.earthControls = new EarthControls(this);\n\t\t\t\tthis.earthControls.enabled = false;\n\t\t\t\tthis.earthControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\t\tthis.earthControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t\t}\n\n\t\t\t{ // create DEVICE ORIENTATION CONTROLS\n\t\t\t\tthis.deviceControls = new DeviceOrientationControls(this);\n\t\t\t\tthis.deviceControls.enabled = false;\n\t\t\t\tthis.deviceControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\t\tthis.deviceControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t\t}\n\n\t\t\t{ // create VR CONTROLS\n\t\t\t\tthis.vrControls = new VRControls(this);\n\t\t\t\tthis.vrControls.enabled = false;\n\t\t\t\tthis.vrControls.addEventListener('start', this.disableAnnotations.bind(this));\n\t\t\t\tthis.vrControls.addEventListener('end', this.enableAnnotations.bind(this));\n\t\t\t}\n\n\n\t\t};\n\n\t\ttoggleSidebar () {\n\t\t\tlet renderArea = $('#potree_render_area');\n\t\t\tlet isVisible = renderArea.css('left') !== '0px';\n\n\t\t\tif (isVisible) {\n\t\t\t\trenderArea.css('left', '0px');\n\t\t\t} else {\n\t\t\t\trenderArea.css('left', '300px');\n\t\t\t}\n\t\t};\n\n\t\ttoggleMap () {\n\t\t\t// let map = $('#potree_map');\n\t\t\t// map.toggle(100);\n\n\t\t\tif (this.mapView) {\n\t\t\t\tthis.mapView.toggle();\n\t\t\t}\n\t\t};\n\n\t\tonGUILoaded(callback){\n\t\t\tif(this.guiLoaded){\n\t\t\t\tcallback();\n\t\t\t}else {\n\t\t\t\tthis.guiLoadTasks.push(callback);\n\t\t\t}\n\t\t}\n\n\t\tpromiseGuiLoaded(){\n\t\t\treturn new Promise( resolve => {\n\n\t\t\t\tif(this.guiLoaded){\n\t\t\t\t\tresolve();\n\t\t\t\t}else {\n\t\t\t\t\tthis.guiLoadTasks.push(resolve);\n\t\t\t\t}\n\t\t\t\n\t\t\t});\n\t\t}\n\n\t\tloadGUI(callback){\n\n\t\t\tif(callback){\n\t\t\t\tthis.onGUILoaded(callback);\n\t\t\t}\n\n\t\t\tlet viewer = this;\n\t\t\tlet sidebarContainer = $('#potree_sidebar_container');\n\t\t\tsidebarContainer.load(new URL(Potree.scriptPath + '/sidebar.html').href, () => {\n\t\t\t\tsidebarContainer.css('width', '300px');\n\t\t\t\tsidebarContainer.css('height', '100%');\n\n\t\t\t\tlet imgMenuToggle = document.createElement('img');\n\t\t\t\timgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href;\n\t\t\t\timgMenuToggle.onclick = this.toggleSidebar;\n\t\t\t\timgMenuToggle.classList.add('potree_menu_toggle');\n\n\t\t\t\tlet imgMapToggle = document.createElement('img');\n\t\t\t\timgMapToggle.src = new URL(Potree.resourcePath + '/icons/map_icon.png').href;\n\t\t\t\timgMapToggle.style.display = 'none';\n\t\t\t\timgMapToggle.onclick = e => { this.toggleMap(); };\n\t\t\t\timgMapToggle.id = 'potree_map_toggle';\n\n\t\t\t\t\n\n\t\t\t\tlet elButtons = $(\"#potree_quick_buttons\").get(0);\n\n\t\t\t\telButtons.append(imgMenuToggle);\n\t\t\t\telButtons.append(imgMapToggle);\n\n\n\t\t\t\tVRButton.createButton(this.renderer).then(vrButton => {\n\n\t\t\t\t\tif(vrButton == null){\n\t\t\t\t\t\tconsole.log(\"VR not supported or active.\");\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.renderer.xr.enabled = true;\n\n\t\t\t\t\tlet element = vrButton.element;\n\n\t\t\t\t\telement.style.position = \"\";\n\t\t\t\t\telement.style.bottom = \"\";\n\t\t\t\t\telement.style.left = \"\";\n\t\t\t\t\telement.style.margin = \"4px\";\n\t\t\t\t\telement.style.fontSize = \"100%\";\n\t\t\t\t\telement.style.width = \"2.5em\";\n\t\t\t\t\telement.style.height = \"2.5em\";\n\t\t\t\t\telement.style.padding = \"0\";\n\t\t\t\t\telement.style.textShadow = \"black 2px 2px 2px\";\n\t\t\t\t\telement.style.display = \"block\";\n\n\t\t\t\t\telButtons.append(element);\n\n\t\t\t\t\tvrButton.onStart(() => {\n\t\t\t\t\t\tthis.dispatchEvent({type: \"vr_start\"});\n\t\t\t\t\t});\n\n\t\t\t\t\tvrButton.onEnd(() => {\n\t\t\t\t\t\tthis.dispatchEvent({type: \"vr_end\"});\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tthis.mapView = new MapView(this);\n\t\t\t\tthis.mapView.init();\n\n\t\t\t\ti18n.init({\n\t\t\t\t\tlng: 'en',\n\t\t\t\t\tresGetPath: Potree.resourcePath + '/lang/__lng__/__ns__.json',\n\t\t\t\t\tpreload: ['en', 'fr', 'de', 'jp', 'se', 'es', 'zh', 'it'],\n\t\t\t\t\tgetAsync: true,\n\t\t\t\t\tdebug: false\n\t\t\t\t}, function (t) {\n\t\t\t\t\t// Start translation once everything is loaded\n\t\t\t\t\t$('body').i18n();\n\t\t\t\t});\n\n\t\t\t\t$(() => {\n\t\t\t\t\t//initSidebar(this);\n\t\t\t\t\tlet sidebar = new Sidebar(this);\n\t\t\t\t\tsidebar.init();\n\n\t\t\t\t\tthis.sidebar = sidebar;\n\n\t\t\t\t\t//if (callback) {\n\t\t\t\t\t//\t$(callback);\n\t\t\t\t\t//}\n\n\t\t\t\t\tlet elProfile = $('<div>').load(new URL(Potree.scriptPath + '/profile.html').href, () => {\n\t\t\t\t\t\t$(document.body).append(elProfile.children());\n\t\t\t\t\t\tthis.profileWindow = new ProfileWindow(this);\n\t\t\t\t\t\tthis.profileWindowController = new ProfileWindowController(this);\n\n\t\t\t\t\t\t$('#profile_window').draggable({\n\t\t\t\t\t\t\thandle: $('#profile_titlebar'),\n\t\t\t\t\t\t\tcontainment: $(document.body)\n\t\t\t\t\t\t});\n\t\t\t\t\t\t$('#profile_window').resizable({\n\t\t\t\t\t\t\tcontainment: $(document.body),\n\t\t\t\t\t\t\thandles: 'n, e, s, w'\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t$(() => {\n\t\t\t\t\t\t\tthis.guiLoaded = true;\n\t\t\t\t\t\t\tfor(let task of this.guiLoadTasks){\n\t\t\t\t\t\t\t\ttask();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t\n\n\t\t\t\t});\n\n\t\t\t\t\n\t\t\t});\n\n\t\t\treturn this.promiseGuiLoaded();\n\t\t}\n\n\t\tsetLanguage (lang) {\n\t\t\ti18n.setLng(lang);\n\t\t\t$('body').i18n();\n\t\t}\n\n\t\tsetServer (server) {\n\t\t\tthis.server = server;\n\t\t}\n\n\t\tinitDragAndDrop(){\n\t\t\tfunction allowDrag(e) {\n\t\t\t\te.dataTransfer.dropEffect = 'copy';\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tlet dropHandler = async (event) => {\n\t\t\t\tconsole.log(event);\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tfor(const item of event.dataTransfer.items){\n\t\t\t\t\tconsole.log(item);\n\n\t\t\t\t\tif(item.kind !== \"file\"){\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst file = item.getAsFile();\n\n\t\t\t\t\tconst isJson5 = file.name.toLowerCase().endsWith(\".json5\");\n\t\t\t\t\tconst isGeoPackage = file.name.toLowerCase().endsWith(\".gpkg\");\n\n\t\t\t\t\tif(isJson5){\n\t\t\t\t\t\ttry{\n\n\t\t\t\t\t\t\tconst text = await file.text();\n\t\t\t\t\t\t\tconst json = lib.parse(text);\n\n\t\t\t\t\t\t\tif(json.type === \"Potree\"){\n\t\t\t\t\t\t\t\tPotree.loadProject(viewer, json);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}catch(e){\n\t\t\t\t\t\t\tconsole.error(\"failed to parse the dropped file as JSON\");\n\t\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}else if(isGeoPackage){\n\t\t\t\t\t\tconst hasPointcloud = viewer.scene.pointclouds.length > 0;\n\n\t\t\t\t\t\tif(!hasPointcloud){\n\t\t\t\t\t\t\tlet msg = \"At least one point cloud is needed that specifies the \";\n\t\t\t\t\t\t\tmsg += \"coordinate reference system before loading vector data.\";\n\t\t\t\t\t\t\tconsole.error(msg);\n\t\t\t\t\t\t}else {\n\n\t\t\t\t\t\t\tproj4.defs(\"WGS84\", \"+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs\");\n\t\t\t\t\t\t\tproj4.defs(\"pointcloud\", this.getProjection());\n\t\t\t\t\t\t\tlet transform = proj4(\"WGS84\", \"pointcloud\");\n\n\t\t\t\t\t\t\tconst buffer = await file.arrayBuffer();\n\n\t\t\t\t\t\t\tconst params = {\n\t\t\t\t\t\t\t\ttransform: transform,\n\t\t\t\t\t\t\t\tsource: file.name,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tconst geo = await Potree.GeoPackageLoader.loadBuffer(buffer, params);\n\t\t\t\t\t\t\tviewer.scene.addGeopackage(geo);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t};\n\n\n\t\t\t$(\"body\")[0].addEventListener(\"dragenter\", allowDrag);\n\t\t\t$(\"body\")[0].addEventListener(\"dragover\", allowDrag);\n\t\t\t$(\"body\")[0].addEventListener(\"drop\", dropHandler);\n\t\t}\n\n\t\tinitThree () {\n\n\t\t\tconsole.log(`initializing three.js ${REVISION}`);\n\n\t\t\tlet width = this.renderArea.clientWidth;\n\t\t\tlet height = this.renderArea.clientHeight;\n\n\t\t\tlet contextAttributes = {\n\t\t\t\talpha: true,\n\t\t\t\tdepth: true,\n\t\t\t\tstencil: false,\n\t\t\t\tantialias: false,\n\t\t\t\t//premultipliedAlpha: _premultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer: true,\n\t\t\t\tpowerPreference: \"high-performance\",\n\t\t\t};\n\n\t\t\t// let contextAttributes = {\n\t\t\t// \talpha: false,\n\t\t\t// \tpreserveDrawingBuffer: true,\n\t\t\t// };\n\n\t\t\t// let contextAttributes = {\n\t\t\t// \talpha: false,\n\t\t\t// \tpreserveDrawingBuffer: true,\n\t\t\t// };\n\n\t\t\tlet canvas = document.createElement(\"canvas\");\n\n\t\t\tlet context = canvas.getContext('webgl', contextAttributes );\n\n\t\t\tthis.renderer = new WebGLRenderer({\n\t\t\t\talpha: true, \n\t\t\t\tpremultipliedAlpha: false,\n\t\t\t\tcanvas: canvas,\n\t\t\t\tcontext: context});\n\t\t\tthis.renderer.sortObjects = false;\n\t\t\tthis.renderer.setSize(width, height);\n\t\t\tthis.renderer.autoClear = false;\n\t\t\tthis.renderArea.appendChild(this.renderer.domElement);\n\t\t\tthis.renderer.domElement.tabIndex = '2222';\n\t\t\tthis.renderer.domElement.style.position = 'absolute';\n\t\t\tthis.renderer.domElement.addEventListener('mousedown', () => {\n\t\t\t\tthis.renderer.domElement.focus();\n\t\t\t});\n\t\t\t//this.renderer.domElement.focus();\n\n\t\t\t// NOTE: If extension errors occur, pass the string into this.renderer.extensions.get(x) before enabling\n\t\t\t// enable frag_depth extension for the interpolation shader, if available\n\t\t\tlet gl = this.renderer.getContext();\n\t\t\tgl.getExtension('EXT_frag_depth');\n\t\t\tgl.getExtension('WEBGL_depth_texture');\n\t\t\tgl.getExtension('WEBGL_color_buffer_float'); \t// Enable explicitly for more portability, EXT_color_buffer_float is the proper name in WebGL 2\n\t\t\t\n\t\t\tif(gl.createVertexArray == null){\n\t\t\t\tlet extVAO = gl.getExtension('OES_vertex_array_object');\n\n\t\t\t\tif(!extVAO){\n\t\t\t\t\tthrow new Error(\"OES_vertex_array_object extension not supported\");\n\t\t\t\t}\n\n\t\t\t\tgl.createVertexArray = extVAO.createVertexArrayOES.bind(extVAO);\n\t\t\t\tgl.bindVertexArray = extVAO.bindVertexArrayOES.bind(extVAO);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\tupdateAnnotations () {\n\n\t\t\tif(!this.visibleAnnotations){\n\t\t\t\tthis.visibleAnnotations = new Set();\n\t\t\t}\n\n\t\t\tthis.scene.annotations.updateBounds();\n\t\t\tthis.scene.cameraP.updateMatrixWorld();\n\t\t\tthis.scene.cameraO.updateMatrixWorld();\n\t\t\t\n\t\t\tlet distances = [];\n\n\t\t\tlet renderAreaSize = this.renderer.getSize(new Vector2());\n\n\t\t\tlet viewer = this;\n\n\t\t\tlet visibleNow = [];\n\t\t\tthis.scene.annotations.traverse(annotation => {\n\n\t\t\t\tif (annotation === this.scene.annotations) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tif (!annotation.visible) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tannotation.scene = this.scene;\n\n\t\t\t\tlet element = annotation.domElement;\n\n\t\t\t\tlet position = annotation.position.clone();\n\t\t\t\tposition.add(annotation.offset);\n\t\t\t\tif (!position) {\n\t\t\t\t\tposition = annotation.boundingBox.getCenter(new Vector3());\n\t\t\t\t}\n\n\t\t\t\tlet distance = viewer.scene.cameraP.position.distanceTo(position);\n\t\t\t\tlet radius = annotation.boundingBox.getBoundingSphere(new Sphere()).radius;\n\n\t\t\t\tlet screenPos = new Vector3();\n\t\t\t\tlet screenSize = 0;\n\n\t\t\t\t{\n\t\t\t\t\t// SCREEN POS\n\t\t\t\t\tscreenPos.copy(position).project(this.scene.getActiveCamera());\n\t\t\t\t\tscreenPos.x = renderAreaSize.x * (screenPos.x + 1) / 2;\n\t\t\t\t\tscreenPos.y = renderAreaSize.y * (1 - (screenPos.y + 1) / 2);\n\n\n\t\t\t\t\t// SCREEN SIZE\n\t\t\t\t\tif(viewer.scene.cameraMode == CameraMode.PERSPECTIVE) {\n\t\t\t\t\t\tlet fov = Math.PI * viewer.scene.cameraP.fov / 180;\n\t\t\t\t\t\tlet slope = Math.tan(fov / 2.0);\n\t\t\t\t\t\tlet projFactor =  0.5 * renderAreaSize.y / (slope * distance);\n\t\t\t\t\t\tscreenSize = radius * projFactor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscreenSize = Utils.projectedRadiusOrtho(radius, viewer.scene.cameraO.projectionMatrix, renderAreaSize.x, renderAreaSize.y);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telement.css(\"left\", screenPos.x + \"px\");\n\t\t\t\telement.css(\"top\", screenPos.y + \"px\");\n\t\t\t\t//element.css(\"display\", \"block\");\n\n\t\t\t\tlet zIndex = 10000000 - distance * (10000000 / this.scene.cameraP.far);\n\t\t\t\tif(annotation.descriptionVisible){\n\t\t\t\t\tzIndex += 10000000;\n\t\t\t\t}\n\t\t\t\telement.css(\"z-index\", parseInt(zIndex));\n\n\t\t\t\tif(annotation.children.length > 0){\n\t\t\t\t\tlet expand = screenSize > annotation.collapseThreshold || annotation.boundingBox.containsPoint(this.scene.getActiveCamera().position);\n\t\t\t\t\tannotation.expand = expand;\n\n\t\t\t\t\tif (!expand) {\n\t\t\t\t\t\t//annotation.display = (screenPos.z >= -1 && screenPos.z <= 1);\n\t\t\t\t\t\tlet inFrustum = (screenPos.z >= -1 && screenPos.z <= 1);\n\t\t\t\t\t\tif(inFrustum){\n\t\t\t\t\t\t\tvisibleNow.push(annotation);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn expand;\n\t\t\t\t} else {\n\t\t\t\t\t//annotation.display = (screenPos.z >= -1 && screenPos.z <= 1);\n\t\t\t\t\tlet inFrustum = (screenPos.z >= -1 && screenPos.z <= 1);\n\t\t\t\t\tif(inFrustum){\n\t\t\t\t\t\tvisibleNow.push(annotation);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\n\t\t\tlet notVisibleAnymore = new Set(this.visibleAnnotations);\n\t\t\tfor(let annotation of visibleNow){\n\t\t\t\tannotation.display = true;\n\t\t\t\t\n\t\t\t\tnotVisibleAnymore.delete(annotation);\n\t\t\t}\n\t\t\tthis.visibleAnnotations = visibleNow;\n\n\t\t\tfor(let annotation of notVisibleAnymore){\n\t\t\t\tannotation.display = false;\n\t\t\t}\n\n\t\t}\n\n\t\tupdateMaterialDefaults(pointcloud){\n\t\t\t// PROBLEM STATEMENT:\n\t\t\t// * [min, max] of intensity, source id, etc. are computed as point clouds are loaded\n\t\t\t// * the point cloud material won't know the range it should use until some data is loaded\n\t\t\t// * users can modify the range at runtime, but sensible default ranges should be \n\t\t\t//   applied even if no GUI is present\n\t\t\t// * display ranges shouldn't suddenly change even if the actual range changes over time.\n\t\t\t//   e.g. the root node has intensity range [1, 478]. One of the descendants increases range to \n\t\t\t//   [0, 2047]. We should not automatically change to the new range because that would result\n\t\t\t//   in sudden and drastic changes of brightness. We should adjust the min/max of the sidebar slider.\n\n\t\t\tconst material = pointcloud.material;\n\n\t\t\tconst attIntensity = pointcloud.getAttribute(\"intensity\");\n\t\t\t\n\t\t\tif(attIntensity != null && material.intensityRange[0] === Infinity){\n\t\t\t\tmaterial.intensityRange = [...attIntensity.range];\n\t\t\t}\n\n\t\t\t// const attIntensity = pointcloud.getAttribute(\"intensity\");\n\t\t\t// if(attIntensity && material.intensityRange[0] === Infinity){\n\t\t\t// \tmaterial.intensityRange = [...attIntensity.range];\n\t\t\t// }\n\n\t\t\t// let attributes = pointcloud.getAttributes();\n\n\t\t\t// for(let attribute of attributes.attributes){\n\t\t\t// \tif(attribute.range){\n\t\t\t// \t\tlet range = [...attribute.range];\n\t\t\t// \t\tmaterial.computedRange.set(attribute.name, range);\n\t\t\t// \t\t//material.setRange(attribute.name, range);\n\t\t\t// \t}\n\t\t\t// }\n\n\n\t\t}\n\n\t\tupdate(delta, timestamp){\n\n\t\t\tif(Potree.measureTimings) performance.mark(\"update-start\");\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'update_start',\n\t\t\t\tdelta: delta,\n\t\t\t\ttimestamp: timestamp});\n\n\t\t\t\n\t\t\tconst scene = this.scene;\n\t\t\tconst camera = scene.getActiveCamera();\n\t\t\tconst visiblePointClouds = this.scene.pointclouds.filter(pc => pc.visible);\n\t\t\t\n\t\t\tPotree.pointLoadLimit = Potree.pointBudget * 2;\n\n\t\t\tconst lTarget = camera.position.clone().add(camera.getWorldDirection(new Vector3()).multiplyScalar(1000));\n\t\t\tthis.scene.directionalLight.position.copy(camera.position);\n\t\t\tthis.scene.directionalLight.lookAt(lTarget);\n\n\n\t\t\tfor (let pointcloud of visiblePointClouds) {\n\n\t\t\t\tpointcloud.showBoundingBox = this.showBoundingBox;\n\t\t\t\tpointcloud.generateDEM = this.generateDEM;\n\t\t\t\tpointcloud.minimumNodePixelSize = this.minNodeSize;\n\n\t\t\t\tlet material = pointcloud.material;\n\n\t\t\t\tmaterial.uniforms.uFilterReturnNumberRange.value = this.filterReturnNumberRange;\n\t\t\t\tmaterial.uniforms.uFilterNumberOfReturnsRange.value = this.filterNumberOfReturnsRange;\n\t\t\t\tmaterial.uniforms.uFilterGPSTimeClipRange.value = this.filterGPSTimeRange;\n\t\t\t\tmaterial.uniforms.uFilterPointSourceIDClipRange.value = this.filterPointSourceIDRange;\n\n\t\t\t\tmaterial.classification = this.classifications;\n\t\t\t\tmaterial.recomputeClassification();\n\n\t\t\t\tthis.updateMaterialDefaults(pointcloud);\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tif(this.showBoundingBox){\n\t\t\t\t\tlet bbRoot = this.scene.scene.getObjectByName(\"potree_bounding_box_root\");\n\t\t\t\t\tif(!bbRoot){\n\t\t\t\t\t\tlet node = new Object3D();\n\t\t\t\t\t\tnode.name = \"potree_bounding_box_root\";\n\t\t\t\t\t\tthis.scene.scene.add(node);\n\t\t\t\t\t\tbbRoot = node;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet visibleBoxes = [];\n\t\t\t\t\tfor(let pointcloud of this.scene.pointclouds){\n\t\t\t\t\t\tfor(let node of pointcloud.visibleNodes.filter(vn => vn.boundingBoxNode !== undefined)){\n\t\t\t\t\t\t\tlet box = node.boundingBoxNode;\n\t\t\t\t\t\t\tvisibleBoxes.push(box);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbbRoot.children = visibleBoxes;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.freeze) {\n\t\t\t\tlet result = Potree.updatePointClouds(scene.pointclouds, camera, this.renderer);\n\n\n\t\t\t\t// DEBUG - ONLY DISPLAY NODES THAT INTERSECT MOUSE\n\t\t\t\t//if(false){ \n\n\t\t\t\t//\tlet renderer = viewer.renderer;\n\t\t\t\t//\tlet mouse = viewer.inputHandler.mouse;\n\n\t\t\t\t//\tlet nmouse = {\n\t\t\t\t//\t\tx: (mouse.x / renderer.domElement.clientWidth) * 2 - 1,\n\t\t\t\t//\t\ty: -(mouse.y / renderer.domElement.clientHeight) * 2 + 1\n\t\t\t\t//\t};\n\n\t\t\t\t//\tlet pickParams = {};\n\n\t\t\t\t//\t//if(params.pickClipped){\n\t\t\t\t//\t//\tpickParams.pickClipped = params.pickClipped;\n\t\t\t\t//\t//}\n\n\t\t\t\t//\tpickParams.x = mouse.x;\n\t\t\t\t//\tpickParams.y = renderer.domElement.clientHeight - mouse.y;\n\n\t\t\t\t//\tlet raycaster = new THREE.Raycaster();\n\t\t\t\t//\traycaster.setFromCamera(nmouse, camera);\n\t\t\t\t//\tlet ray = raycaster.ray;\n\n\t\t\t\t//\tfor(let pointcloud of scene.pointclouds){\n\t\t\t\t//\t\tlet nodes = pointcloud.nodesOnRay(pointcloud.visibleNodes, ray);\n\t\t\t\t//\t\tpointcloud.visibleNodes = nodes;\n\n\t\t\t\t//\t}\n\t\t\t\t//}\n\n\t\t\t\t// const tStart = performance.now();\n\t\t\t\t// const worldPos = new THREE.Vector3();\n\t\t\t\t// const camPos = viewer.scene.getActiveCamera().getWorldPosition(new THREE.Vector3());\n\t\t\t\t// let lowestDistance = Infinity;\n\t\t\t\t// let numNodes = 0;\n\n\t\t\t\t// viewer.scene.scene.traverse(node => {\n\t\t\t\t// \tnode.getWorldPosition(worldPos);\n\n\t\t\t\t// \tconst distance = worldPos.distanceTo(camPos);\n\n\t\t\t\t// \tlowestDistance = Math.min(lowestDistance, distance);\n\n\t\t\t\t// \tnumNodes++;\n\n\t\t\t\t// \tif(Number.isNaN(distance)){\n\t\t\t\t// \t\tconsole.error(\":(\");\n\t\t\t\t// \t}\n\t\t\t\t// });\n\t\t\t\t// const duration = (performance.now() - tStart).toFixed(2);\n\n\t\t\t\t// Potree.debug.computeNearDuration = duration;\n\t\t\t\t// Potree.debug.numNodes = numNodes;\n\n\t\t\t\t//console.log(lowestDistance.toString(2), duration);\n\n\t\t\t\tconst tStart = performance.now();\n\t\t\t\tconst campos = camera.position;\n\t\t\t\tlet closestImage = Infinity;\n\t\t\t\tfor(const images of this.scene.orientedImages){\n\t\t\t\t\tfor(const image of images.images){\n\t\t\t\t\t\tconst distance = image.mesh.position.distanceTo(campos);\n\n\t\t\t\t\t\tclosestImage = Math.min(closestImage, distance);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst tEnd = performance.now();\n\n\t\t\t\tif(result.lowestSpacing !== Infinity){\n\t\t\t\t\tlet near = result.lowestSpacing * 10.0;\n\t\t\t\t\tlet far = -this.getBoundingBox().applyMatrix4(camera.matrixWorldInverse).min.z;\n\n\t\t\t\t\tfar = Math.max(far * 1.5, 10000);\n\t\t\t\t\tnear = Math.min(100.0, Math.max(0.01, near));\n\t\t\t\t\tnear = Math.min(near, closestImage);\n\t\t\t\t\tfar = Math.max(far, near + 10000);\n\n\t\t\t\t\tif(near === Infinity){\n\t\t\t\t\t\tnear = 0.1;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tcamera.near = near;\n\t\t\t\t\tcamera.far = far;\n\t\t\t\t}else {\n\t\t\t\t\t// don't change near and far in this case\n\t\t\t\t}\n\n\t\t\t\tif(this.scene.cameraMode == CameraMode.ORTHOGRAPHIC) {\n\t\t\t\t\tcamera.near = -camera.far;\n\t\t\t\t}\n\t\t\t} \n\t\t\t\n\t\t\tthis.scene.cameraP.fov = this.fov;\n\t\t\t\n\t\t\tlet controls = this.getControls();\n\t\t\tif (controls === this.deviceControls) {\n\t\t\t\tthis.controls.setScene(scene);\n\t\t\t\tthis.controls.update(delta);\n\n\t\t\t\tthis.scene.cameraP.position.copy(scene.view.position);\n\t\t\t\tthis.scene.cameraO.position.copy(scene.view.position);\n\t\t\t} else if (controls !== null) {\n\t\t\t\tcontrols.setScene(scene);\n\t\t\t\tcontrols.update(delta);\n\n\t\t\t\tif(typeof debugDisabled === \"undefined\" ){\n\t\t\t\t\tthis.scene.cameraP.position.copy(scene.view.position);\n\t\t\t\t\tthis.scene.cameraP.rotation.order = \"ZXY\";\n\t\t\t\t\tthis.scene.cameraP.rotation.x = Math.PI / 2 + this.scene.view.pitch;\n\t\t\t\t\tthis.scene.cameraP.rotation.z = this.scene.view.yaw;\n\t\t\t\t}\n\n\t\t\t\tthis.scene.cameraO.position.copy(scene.view.position);\n\t\t\t\tthis.scene.cameraO.rotation.order = \"ZXY\";\n\t\t\t\tthis.scene.cameraO.rotation.x = Math.PI / 2 + this.scene.view.pitch;\n\t\t\t\tthis.scene.cameraO.rotation.z = this.scene.view.yaw;\n\t\t\t}\n\t\t\t\n\t\t\tcamera.updateMatrix();\n\t\t\tcamera.updateMatrixWorld();\n\t\t\tcamera.matrixWorldInverse.copy(camera.matrixWorld).invert();\n\n\t\t\t{\n\t\t\t\tif(this._previousCamera === undefined){\n\t\t\t\t\tthis._previousCamera = this.scene.getActiveCamera().clone();\n\t\t\t\t\tthis._previousCamera.rotation.copy(this.scene.getActiveCamera().rotation);\n\t\t\t\t}\n\n\t\t\t\tif(!this._previousCamera.matrixWorld.equals(camera.matrixWorld)){\n\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\ttype: \"camera_changed\",\n\t\t\t\t\t\tprevious: this._previousCamera,\n\t\t\t\t\t\tcamera: camera\n\t\t\t\t\t});\n\t\t\t\t}else if(!this._previousCamera.projectionMatrix.equals(camera.projectionMatrix)){\n\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\ttype: \"camera_changed\",\n\t\t\t\t\t\tprevious: this._previousCamera,\n\t\t\t\t\t\tcamera: camera\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis._previousCamera = this.scene.getActiveCamera().clone();\n\t\t\t\tthis._previousCamera.rotation.copy(this.scene.getActiveCamera().rotation);\n\n\t\t\t}\n\n\t\t\t{ // update clip boxes\n\t\t\t\tlet boxes = [];\n\t\t\t\t\n\t\t\t\t// volumes with clipping enabled\n\t\t\t\t//boxes.push(...this.scene.volumes.filter(v => (v.clip)));\n\t\t\t\tboxes.push(...this.scene.volumes.filter(v => (v.clip && v instanceof BoxVolume)));\n\n\t\t\t\t// profile segments\n\t\t\t\tfor(let profile of this.scene.profiles){\n\t\t\t\t\tboxes.push(...profile.boxes);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Needed for .getInverse(), pre-empt a determinant of 0, see #815 / #816\n\t\t\t\tlet degenerate = (box) => box.matrixWorld.determinant() !== 0;\n\t\t\t\t\n\t\t\t\tlet clipBoxes = boxes.filter(degenerate).map( box => {\n\t\t\t\t\tbox.updateMatrixWorld();\n\t\t\t\t\t\n\t\t\t\t\tlet boxInverse = box.matrixWorld.clone().invert();\n\t\t\t\t\tlet boxPosition = box.getWorldPosition(new Vector3());\n\n\t\t\t\t\treturn {box: box, inverse: boxInverse, position: boxPosition};\n\t\t\t\t});\n\n\t\t\t\tlet clipPolygons = this.scene.polygonClipVolumes.filter(vol => vol.initialized);\n\t\t\t\t\n\t\t\t\t// set clip volumes in material\n\t\t\t\tfor(let pointcloud of visiblePointClouds){\n\t\t\t\t\tpointcloud.material.setClipBoxes(clipBoxes);\n\t\t\t\t\tpointcloud.material.setClipPolygons(clipPolygons, this.clippingTool.maxPolygonVertices);\n\t\t\t\t\tpointcloud.material.clipTask = this.clipTask;\n\t\t\t\t\tpointcloud.material.clipMethod = this.clipMethod;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tfor(let pointcloud of visiblePointClouds){\n\t\t\t\t\tpointcloud.material.elevationGradientRepeat = this.elevationGradientRepeat;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t{ // update navigation cube\n\t\t\t\tthis.navigationCube.update(camera.rotation);\n\t\t\t}\n\n\t\t\tthis.updateAnnotations();\n\t\t\t\n\t\t\tif(this.mapView){\n\t\t\t\tthis.mapView.update(delta);\n\t\t\t\tif(this.mapView.sceneProjection){\n\t\t\t\t\t$( \"#potree_map_toggle\" ).css(\"display\", \"block\");\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tTWEEN.update(timestamp);\n\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'update',\n\t\t\t\tdelta: delta,\n\t\t\t\ttimestamp: timestamp});\n\t\t\t\t\n\t\t\tif(Potree.measureTimings) {\n\t\t\t\tperformance.mark(\"update-end\");\n\t\t\t\tperformance.measure(\"update\", \"update-start\", \"update-end\");\n\t\t\t}\n\t\t}\n\n\t\tgetPRenderer(){\n\t\t\tif(this.useHQ){\n\t\t\t\tif (!this.hqRenderer) {\n\t\t\t\t\tthis.hqRenderer = new HQSplatRenderer(this);\n\t\t\t\t}\n\t\t\t\tthis.hqRenderer.useEDL = this.useEDL;\n\n\t\t\t\treturn this.hqRenderer;\n\t\t\t}else {\n\t\t\t\tif (this.useEDL && Features.SHADER_EDL.isSupported()) {\n\t\t\t\t\tif (!this.edlRenderer) {\n\t\t\t\t\t\tthis.edlRenderer = new EDLRenderer(this);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this.edlRenderer;\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.potreeRenderer) {\n\t\t\t\t\t\tthis.potreeRenderer = new PotreeRenderer(this);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this.potreeRenderer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trenderVR(){\n\n\t\t\tlet renderer = this.renderer;\n\n\t\t\trenderer.setClearColor(0x550000, 0);\n\t\t\trenderer.clear();\n\n\t\t\tlet xr = renderer.xr;\n\t\t\tlet dbg = new PerspectiveCamera();\n\t\t\tlet xrCameras = xr.getCamera(dbg);\n\n\t\t\tif(xrCameras.cameras.length !== 2){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet makeCam = this.vrControls.getCamera.bind(this.vrControls);\n\n\t\t\t{ // clear framebuffer\n\t\t\t\tif(viewer.background === \"skybox\"){\n\t\t\t\t\trenderer.setClearColor(0xff0000, 1);\n\t\t\t\t}else if(viewer.background === \"gradient\"){\n\t\t\t\t\trenderer.setClearColor(0x112233, 1);\n\t\t\t\t}else if(viewer.background === \"black\"){\n\t\t\t\t\trenderer.setClearColor(0x000000, 1);\n\t\t\t\t}else if(viewer.background === \"white\"){\n\t\t\t\t\trenderer.setClearColor(0xFFFFFF, 1);\n\t\t\t\t}else {\n\t\t\t\t\trenderer.setClearColor(0x000000, 0);\n\t\t\t\t}\n\n\t\t\t\trenderer.clear();\n\t\t\t}\n\n\t\t\t// render background\n\t\t\tif(this.background === \"skybox\"){\n\t\t\t\tlet {skybox} = this;\n\n\t\t\t\tlet cam = makeCam();\n\t\t\t\tskybox.camera.rotation.copy(cam.rotation);\n\t\t\t\tskybox.camera.fov = cam.fov;\n\t\t\t\tskybox.camera.aspect = cam.aspect;\n\t\t\t\t\n\t\t\t\t// let dbg = new THREE.Object3D();\n\t\t\t\tlet dbg = skybox.parent;\n\t\t\t\t// dbg.up.set(0, 0, 1);\n\t\t\t\tdbg.rotation.x = Math.PI / 2;\n\n\t\t\t\t// skybox.camera.parent = dbg;\n\t\t\t\t// dbg.children.push(skybox.camera);\n\n\t\t\t\tdbg.updateMatrix();\n\t\t\t\tdbg.updateMatrixWorld();\n\n\t\t\t\tskybox.camera.updateMatrix();\n\t\t\t\tskybox.camera.updateMatrixWorld();\n\t\t\t\tskybox.camera.updateProjectionMatrix();\n\n\t\t\t\trenderer.render(skybox.scene, skybox.camera);\n\t\t\t\t// renderer.render(skybox.scene, cam);\n\t\t\t}else if(this.background === \"gradient\"){\n\t\t\t\t// renderer.render(this.scene.sceneBG, this.scene.cameraBG);\n\t\t\t}\n\n\t\t\tthis.renderer.xr.getSession().updateRenderState({\n\t\t\t\tdepthNear: 0.1,\n\t\t\t\tdepthFar: 10000\n\t\t\t});\n\t\t\t\n\t\t\tlet cam = null;\n\t\t\tlet view = null;\n\n\t\t\t{ // render world scene\n\t\t\t\tcam = makeCam();\n\t\t\t\tcam.position.z -= 0.8 * cam.scale.x;\n\t\t\t\tcam.parent = null;\n\t\t\t\t// cam.near = 0.05;\n\t\t\t\tcam.near = viewer.scene.getActiveCamera().near;\n\t\t\t\tcam.far = viewer.scene.getActiveCamera().far;\n\t\t\t\tcam.updateMatrix();\n\t\t\t\tcam.updateMatrixWorld();\n\n\t\t\t\tthis.scene.scene.updateMatrix();\n\t\t\t\tthis.scene.scene.updateMatrixWorld();\n\t\t\t\tthis.scene.scene.matrixAutoUpdate = false;\n\n\t\t\t\tlet camWorld = cam.matrixWorld.clone();\n\t\t\t\tview = camWorld.clone().invert();\n\t\t\t\tthis.scene.scene.matrix.copy(view);\n\t\t\t\tthis.scene.scene.matrixWorld.copy(view);\n\n\t\t\t\tcam.matrix.identity();\n\t\t\t\tcam.matrixWorld.identity();\n\t\t\t\tcam.matrixWorldInverse.identity();\n\n\t\t\t\trenderer.render(this.scene.scene, cam);\n\n\t\t\t\tthis.scene.scene.matrixWorld.identity();\n\n\t\t\t}\n\t\t\t\n\t\t\tfor(let pointcloud of this.scene.pointclouds){\n\n\t\t\t\tlet viewport = xrCameras.cameras[0].viewport;\n\n\t\t\t\tpointcloud.material.useEDL = false;\n\t\t\t\tpointcloud.screenHeight = viewport.height;\n\t\t\t\tpointcloud.screenWidth = viewport.width;\n\n\t\t\t\t// automatically switch to paraboloids because they cause far less flickering in VR, \n\t\t\t\t// when point sizes are larger than around 2 pixels\n\t\t\t\t// if(Features.SHADER_INTERPOLATION.isSupported()){\n\t\t\t\t// \tpointcloud.material.shape = Potree.PointShape.PARABOLOID;\n\t\t\t\t// }\n\t\t\t}\n\t\t\t\n\t\t\t// render point clouds\n\t\t\tfor(let xrCamera of xrCameras.cameras){\n\n\t\t\t\tlet v = xrCamera.viewport;\n\t\t\t\trenderer.setViewport(v.x, v.y, v.width, v.height);\n\n\t\t\t\t// xrCamera.fov = 90;\n\n\t\t\t\t{ // estimate VR fov\n\t\t\t\t\tlet proj = xrCamera.projectionMatrix;\n\t\t\t\t\tlet inv = proj.clone().invert();\n\n\t\t\t\t\tlet p1 = new Vector4(0, 1, -1, 1).applyMatrix4(inv);\n\t\t\t\t\tlet rad = p1.y;\n\t\t\t\t\tlet fov = 180 * (rad / Math.PI);\n\n\t\t\t\t\txrCamera.fov = fov;\n\t\t\t\t}\n\n\t\t\t\tfor(let pointcloud of this.scene.pointclouds){\n\t\t\t\t\tconst {material} = pointcloud;\n\t\t\t\t\tmaterial.useEDL = false;\n\t\t\t\t}\n\n\t\t\t\tlet vrWorld = view.clone().invert();\n\t\t\t\tvrWorld.multiply(xrCamera.matrixWorld);\n\t\t\t\tlet vrView = vrWorld.clone().invert();\n\n\t\t\t\tthis.pRenderer.render(this.scene.scenePointCloud, xrCamera, null, {\n\t\t\t\t\tviewOverride: vrView,\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\t{ // render VR scene\n\t\t\t\tlet cam = makeCam();\n\t\t\t\tcam.parent = null;\n\n\t\t\t\trenderer.render(this.sceneVR, cam);\n\t\t\t}\n\n\t\t\trenderer.resetState();\n\n\t\t}\n\n\t\trenderDefault(){\n\t\t\tlet pRenderer = this.getPRenderer();\n\n\t\t\t{ // resize\n\t\t\t\tconst width = this.scaleFactor * this.renderArea.clientWidth;\n\t\t\t\tconst height = this.scaleFactor * this.renderArea.clientHeight;\n\n\t\t\t\tthis.renderer.setSize(width, height);\n\t\t\t\tconst pixelRatio = this.renderer.getPixelRatio();\n\t\t\t\tconst aspect = width / height;\n\n\t\t\t\tconst scene = this.scene;\n\n\t\t\t\tscene.cameraP.aspect = aspect;\n\t\t\t\tscene.cameraP.updateProjectionMatrix();\n\n\t\t\t\tlet frustumScale = this.scene.view.radius;\n\t\t\t\tscene.cameraO.left = -frustumScale;\n\t\t\t\tscene.cameraO.right = frustumScale;\n\t\t\t\tscene.cameraO.top = frustumScale * 1 / aspect;\n\t\t\t\tscene.cameraO.bottom = -frustumScale * 1 / aspect;\n\t\t\t\tscene.cameraO.updateProjectionMatrix();\n\n\t\t\t\tscene.cameraScreenSpace.top = 1/aspect;\n\t\t\t\tscene.cameraScreenSpace.bottom = -1/aspect;\n\t\t\t\tscene.cameraScreenSpace.updateProjectionMatrix();\n\t\t\t}\n\n\t\t\tpRenderer.clear();\n\n\t\t\tpRenderer.render(this.renderer);\n\t\t\tthis.renderer.render(this.overlay, this.overlayCamera);\n\t\t}\n\t\t\n\t\trender(){\n\t\t\tif(Potree.measureTimings) performance.mark(\"render-start\");\n\n\t\t\ttry{\n\n\t\t\t\tconst vrActive = this.renderer.xr.isPresenting;\n\n\t\t\t\tif(vrActive){\n\t\t\t\t\tthis.renderVR();\n\t\t\t\t}else {\n\t\t\t\t\tthis.renderDefault();\n\t\t\t\t}\n\n\t\t\t}catch(e){\n\t\t\t\tthis.onCrash(e);\n\t\t\t}\n\t\t\t\n\t\t\tif(Potree.measureTimings){\n\t\t\t\tperformance.mark(\"render-end\");\n\t\t\t\tperformance.measure(\"render\", \"render-start\", \"render-end\");\n\t\t\t}\n\t\t}\n\n\t\tresolveTimings(timestamp){\n\t\t\tif(Potree.measureTimings){\n\t\t\t\tif(!this.toggle){\n\t\t\t\t\tthis.toggle = timestamp;\n\t\t\t\t}\n\t\t\t\tlet duration = timestamp - this.toggle;\n\t\t\t\tif(duration > 1000.0){\n\t\t\t\t\n\t\t\t\t\tlet measures = performance.getEntriesByType(\"measure\");\n\t\t\t\t\t\n\t\t\t\t\tlet names = new Set();\n\t\t\t\t\tfor(let measure of measures){\n\t\t\t\t\t\tnames.add(measure.name);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet groups = new Map();\n\t\t\t\t\tfor(let name of names){\n\t\t\t\t\t\tgroups.set(name, {\n\t\t\t\t\t\t\tmeasures: [],\n\t\t\t\t\t\t\tsum: 0,\n\t\t\t\t\t\t\tn: 0,\n\t\t\t\t\t\t\tmin: Infinity,\n\t\t\t\t\t\t\tmax: -Infinity\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfor(let measure of measures){\n\t\t\t\t\t\tlet group = groups.get(measure.name);\n\t\t\t\t\t\tgroup.measures.push(measure);\n\t\t\t\t\t\tgroup.sum += measure.duration;\n\t\t\t\t\t\tgroup.n++;\n\t\t\t\t\t\tgroup.min = Math.min(group.min, measure.duration);\n\t\t\t\t\t\tgroup.max = Math.max(group.max, measure.duration);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet glQueries = Potree.resolveQueries(this.renderer.getContext());\n\t\t\t\t\tfor(let [key, value] of glQueries){\n\n\t\t\t\t\t\tlet group = {\n\t\t\t\t\t\t\tmeasures: value.map(v => {return {duration: v}}),\n\t\t\t\t\t\t\tsum: value.reduce( (a, i) => a + i, 0),\n\t\t\t\t\t\t\tn: value.length,\n\t\t\t\t\t\t\tmin: Math.min(...value),\n\t\t\t\t\t\t\tmax: Math.max(...value)\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlet groupname = `[tq] ${key}`;\n\t\t\t\t\t\tgroups.set(groupname, group);\n\t\t\t\t\t\tnames.add(groupname);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tfor(let [name, group] of groups){\n\t\t\t\t\t\tgroup.mean = group.sum / group.n;\n\t\t\t\t\t\tgroup.measures.sort( (a, b) => a.duration - b.duration );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(group.n === 1){\n\t\t\t\t\t\t\tgroup.median = group.measures[0].duration;\n\t\t\t\t\t\t}else if(group.n > 1){\n\t\t\t\t\t\t\tgroup.median = group.measures[parseInt(group.n / 2)].duration;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet cn = Array.from(names).reduce( (a, i) => Math.max(a, i.length), 0) + 5;\n\t\t\t\t\tlet cmin = 10;\n\t\t\t\t\tlet cmed = 10;\n\t\t\t\t\tlet cmax = 10;\n\t\t\t\t\tlet csam = 6;\n\t\t\t\t\t\n\t\t\t\t\tlet message = ` ${\"NAME\".padEnd(cn)} |` \n\t\t\t\t\t\t+ ` ${\"MIN\".padStart(cmin)} |`\n\t\t\t\t\t\t+ ` ${\"MEDIAN\".padStart(cmed)} |`\n\t\t\t\t\t\t+ ` ${\"MAX\".padStart(cmax)} |`\n\t\t\t\t\t\t+ ` ${\"SAMPLES\".padStart(csam)} \\n`;\n\t\t\t\t\tmessage += ` ${\"-\".repeat(message.length) }\\n`;\n\t\t\t\t\t\n\t\t\t\t\tnames = Array.from(names).sort();\n\t\t\t\t\tfor(let name of names){\n\t\t\t\t\t\tlet group = groups.get(name);\n\t\t\t\t\t\tlet min = group.min.toFixed(3);\n\t\t\t\t\t\tlet median = group.median.toFixed(3);\n\t\t\t\t\t\tlet max = group.max.toFixed(3);\n\t\t\t\t\t\tlet n = group.n;\n\t\t\t\t\t\t\n\t\t\t\t\t\tmessage += ` ${name.padEnd(cn)} |`\n\t\t\t\t\t\t\t+ ` ${min.padStart(cmin)} |`\n\t\t\t\t\t\t\t+ ` ${median.padStart(cmed)} |`\n\t\t\t\t\t\t\t+ ` ${max.padStart(cmax)} |`\n\t\t\t\t\t\t\t+ ` ${n.toString().padStart(csam)}\\n`;\n\t\t\t\t\t}\n\t\t\t\t\tmessage += `\\n`;\n\t\t\t\t\tconsole.log(message);\n\t\t\t\t\t\n\t\t\t\t\tperformance.clearMarks();\n\t\t\t\t\tperformance.clearMeasures();\n\t\t\t\t\tthis.toggle = timestamp;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tloop(timestamp){\n\n\t\t\tif(this.stats){\n\t\t\t\tthis.stats.begin();\n\t\t\t}\n\n\t\t\tif(Potree.measureTimings){\n\t\t\t\tperformance.mark(\"loop-start\");\n\t\t\t}\n\n\t\t\tthis.update(this.clock.getDelta(), timestamp);\n\t\t\tthis.render();\n\n\t\t\t// let vrActive = viewer.renderer.xr.isPresenting;\n\t\t\t// if(vrActive){\n\t\t\t// \tthis.update(this.clock.getDelta(), timestamp);\n\t\t\t// \tthis.render();\n\t\t\t// }else{\n\n\t\t\t// \tthis.update(this.clock.getDelta(), timestamp);\n\t\t\t// \tthis.render();\n\t\t\t// }\n\n\n\t\t\tif(Potree.measureTimings){\n\t\t\t\tperformance.mark(\"loop-end\");\n\t\t\t\tperformance.measure(\"loop\", \"loop-start\", \"loop-end\");\n\t\t\t}\n\t\t\t\n\t\t\tthis.resolveTimings(timestamp);\n\n\t\t\tPotree.framenumber++;\n\n\t\t\tif(this.stats){\n\t\t\t\tthis.stats.end();\n\t\t\t}\n\t\t}\n\n\t\tpostError(content, params = {}){\n\t\t\tlet message = this.postMessage(content, params);\n\n\t\t\tmessage.element.addClass(\"potree_message_error\");\n\n\t\t\treturn message;\n\t\t}\n\n\t\tpostMessage(content, params = {}){\n\t\t\tlet message = new Message(content);\n\n\t\t\tlet animationDuration = 100;\n\n\t\t\tmessage.element.css(\"display\", \"none\");\n\t\t\tmessage.elClose.click( () => {\n\t\t\t\tmessage.element.slideToggle(animationDuration);\n\n\t\t\t\tlet index = this.messages.indexOf(message);\n\t\t\t\tif(index >= 0){\n\t\t\t\t\tthis.messages.splice(index, 1);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.elMessages.prepend(message.element);\n\n\t\t\tmessage.element.slideToggle(animationDuration);\n\n\t\t\tthis.messages.push(message);\n\n\t\t\tif(params.duration !== undefined){\n\t\t\t\tlet fadeDuration = 500;\n\t\t\t\tlet slideOutDuration = 200;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tmessage.element.animate({\n\t\t\t\t\t\topacity: 0\t\n\t\t\t\t\t}, fadeDuration);\n\t\t\t\t\tmessage.element.slideToggle(slideOutDuration);\n\t\t\t\t}, params.duration);\n\t\t\t}\n\n\t\t\treturn message;\n\t\t}\n\t};\n\n\tOrthographicCamera.prototype.zoomTo = function( node, factor = 1){\n\n\t\tif ( !node.geometry && !node.boundingBox) {\n\t\t\treturn;\n\t\t}\n\n\t\t// TODO\n\n\t\t//let minWS = new THREE.Vector4(node.boundingBox.min.x, node.boundingBox.min.y, node.boundingBox.min.z, 1);\n\t\t//let minVS = minWS.applyMatrix4(this.matrixWorldInverse);\n\n\t\t//let right = node.boundingBox.max.x;\n\t\t//let bottom\t= node.boundingBox.min.y;\n\t\t//let top = node.boundingBox.max.y;\n\n\t\tthis.updateProjectionMatrix();\t\n\t};\n\n\tPerspectiveCamera.prototype.zoomTo = function (node, factor) {\n\t\tif (!node.geometry && !node.boundingSphere && !node.boundingBox) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (node.geometry && node.geometry.boundingSphere === null) {\n\t\t\tnode.geometry.computeBoundingSphere();\n\t\t}\n\n\t\tnode.updateMatrixWorld();\n\n\t\tlet bs;\n\n\t\tif (node.boundingSphere) {\n\t\t\tbs = node.boundingSphere;\n\t\t} else if (node.geometry && node.geometry.boundingSphere) {\n\t\t\tbs = node.geometry.boundingSphere;\n\t\t} else {\n\t\t\tbs = node.boundingBox.getBoundingSphere(new Sphere());\n\t\t}\n\n\t\tlet _factor = factor || 1;\n\n\t\tbs = bs.clone().applyMatrix4(node.matrixWorld);\n\t\tlet radius = bs.radius;\n\t\tlet fovr = this.fov * Math.PI / 180;\n\n\t\tif (this.aspect < 1) {\n\t\t\tfovr = fovr * this.aspect;\n\t\t}\n\n\t\tlet distanceFactor = Math.abs(radius / Math.sin(fovr / 2)) * _factor;\n\n\t\tlet offset = this.getWorldDirection(new Vector3()).multiplyScalar(-distanceFactor);\n\t\tthis.position.copy(bs.center.clone().add(offset));\n\t};\n\n\tRay.prototype.distanceToPlaneWithNegative = function (plane) {\n\t\tlet denominator = plane.normal.dot(this.direction);\n\t\tif (denominator === 0) {\n\t\t\t// line is coplanar, return origin\n\t\t\tif (plane.distanceToPoint(this.origin) === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\t\t\treturn null;\n\t\t}\n\t\tlet t = -(this.origin.dot(plane.normal) + plane.constant) / denominator;\n\n\t\treturn t;\n\t};\n\n\tconst workerPool = new WorkerPool();\n\n\tconst version = {\n\t\tmajor: 1,\n\t\tminor: 8,\n\t\tsuffix: '.0'\n\t};\n\n\tlet lru = new LRU();\n\n\tconsole.log('Potree ' + version.major + '.' + version.minor + version.suffix);\n\n\tlet pointBudget = 1 * 1000 * 1000;\n\tlet framenumber = 0;\n\tlet numNodesLoading = 0;\n\tlet maxNodesLoading = 4;\n\n\tconst debug = {};\n\n\texports.scriptPath = \"\";\n\n\tif (document.currentScript && document.currentScript.src) {\n\t\texports.scriptPath = new URL(document.currentScript.src + '/..').href;\n\t\tif (exports.scriptPath.slice(-1) === '/') {\n\t\t\texports.scriptPath = exports.scriptPath.slice(0, -1);\n\t\t}\n\t} else if(({ url: (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('potree.js', document.baseURI).href)) })){\n\t\texports.scriptPath = new URL((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('potree.js', document.baseURI).href)) + \"/..\").href;\n\t\tif (exports.scriptPath.slice(-1) === '/') {\n\t\t\texports.scriptPath = exports.scriptPath.slice(0, -1);\n\t\t}\n\t}else {\n\t\tconsole.error('Potree was unable to find its script path using document.currentScript. Is Potree included with a script tag? Does your browser support this function?');\n\t}\n\n\tlet resourcePath = exports.scriptPath + '/resources';\n\n\n\tfunction loadPointCloud$1(path, name, callback){\n\t\tlet loaded = function(e){\n\t\t\te.pointcloud.name = name;\n\t\t\tcallback(e);\n\t\t};\n\n\t\tlet promise = new Promise( resolve => {\n\n\t\t\t// load pointcloud\n\t\t\tif (!path){\n\t\t\t\t// TODO: callback? comment? Hello? Bueller? Anyone?\n\t\t\t} else if (path.indexOf('ept.json') > 0) {\n\t\t\t\tEptLoader.load(path, function(geometry) {\n\t\t\t\t\tif (!geometry) {\n\t\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet pointcloud = new PointCloudOctree(geometry);\n\t\t\t\t\t\t//loaded(pointcloud);\n\t\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (path.indexOf('cloud.js') > 0) {\n\t\t\t\tPOCLoader.load(path, function (geometry) {\n\t\t\t\t\tif (!geometry) {\n\t\t\t\t\t\t//callback({type: 'loading_failed'});\n\t\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet pointcloud = new PointCloudOctree(geometry);\n\t\t\t\t\t\t// loaded(pointcloud);\n\t\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (path.indexOf('metadata.json') > 0) {\n\t\t\t\tPotree.OctreeLoader.load(path).then(e => {\n\t\t\t\t\tlet geometry = e.geometry;\n\n\t\t\t\t\tif(!geometry){\n\t\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t\t}else {\n\t\t\t\t\t\tlet pointcloud = new PointCloudOctree(geometry);\n\n\t\t\t\t\t\tlet aPosition = pointcloud.getAttribute(\"position\");\n\n\t\t\t\t\t\tlet material = pointcloud.material;\n\t\t\t\t\t\tmaterial.elevationRange = [\n\t\t\t\t\t\t\taPosition.range[0][2],\n\t\t\t\t\t\t\taPosition.range[1][2],\n\t\t\t\t\t\t];\n\n\t\t\t\t\t\t// loaded(pointcloud);\n\t\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tOctreeLoader.load(path, function (geometry) {\n\t\t\t\t\tif (!geometry) {\n\t\t\t\t\t\t//callback({type: 'loading_failed'});\n\t\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet pointcloud = new PointCloudOctree(geometry);\n\t\t\t\t\t\t// loaded(pointcloud);\n\t\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (path.indexOf('.vpc') > 0) {\n\t\t\t\tPointCloudArena4DGeometry.load(path, function (geometry) {\n\t\t\t\t\tif (!geometry) {\n\t\t\t\t\t\t//callback({type: 'loading_failed'});\n\t\t\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet pointcloud = new PointCloudArena4D(geometry);\n\t\t\t\t\t\t// loaded(pointcloud);\n\t\t\t\t\t\tresolve({type: 'pointcloud_loaded', pointcloud: pointcloud});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t//callback({'type': 'loading_failed'});\n\t\t\t\tconsole.error(new Error(`failed to load point cloud from URL: ${path}`));\n\t\t\t}\n\t\t});\n\n\t\tif(callback){\n\t\t\tpromise.then(pointcloud => {\n\t\t\t\tloaded(pointcloud);\n\t\t\t});\n\t\t}else {\n\t\t\treturn promise;\n\t\t}\n\t};\n\n\n\t// add selectgroup\n\t(function($){\n\t\t$.fn.extend({\n\t\t\tselectgroup: function(args = {}){\n\n\t\t\t\tlet elGroup = $(this);\n\t\t\t\tlet rootID = elGroup.prop(\"id\");\n\t\t\t\tlet groupID = `${rootID}`;\n\t\t\t\tlet groupTitle = (args.title !== undefined) ? args.title : \"\";\n\n\t\t\t\tlet elButtons = [];\n\t\t\t\telGroup.find(\"option\").each((index, value) => {\n\t\t\t\t\tlet buttonID = $(value).prop(\"id\");\n\t\t\t\t\tlet label = $(value).html();\n\t\t\t\t\tlet optionValue = $(value).prop(\"value\");\n\n\t\t\t\t\tlet elButton = $(`\n\t\t\t\t\t<span style=\"flex-grow: 1; display: inherit\">\n\t\t\t\t\t<label for=\"${buttonID}\" class=\"ui-button\" style=\"width: 100%; padding: .4em .1em\">${label}</label>\n\t\t\t\t\t<input type=\"radio\" name=\"${groupID}\" id=\"${buttonID}\" value=\"${optionValue}\" style=\"display: none\"/>\n\t\t\t\t\t</span>\n\t\t\t\t`);\n\t\t\t\t\tlet elLabel = elButton.find(\"label\");\n\t\t\t\t\tlet elInput = elButton.find(\"input\");\n\n\t\t\t\t\telInput.change( () => {\n\t\t\t\t\t\telGroup.find(\"label\").removeClass(\"ui-state-active\");\n\t\t\t\t\t\telGroup.find(\"label\").addClass(\"ui-state-default\");\n\t\t\t\t\t\tif(elInput.is(\":checked\")){\n\t\t\t\t\t\t\telLabel.addClass(\"ui-state-active\");\n\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t//elLabel.addClass(\"ui-state-default\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\telButtons.push(elButton);\n\t\t\t\t});\n\n\t\t\t\tlet elFieldset = $(`\n\t\t\t\t<fieldset style=\"border: none; margin: 0px; padding: 0px\">\n\t\t\t\t\t<legend>${groupTitle}</legend>\n\t\t\t\t\t<span style=\"display: flex\">\n\n\t\t\t\t\t</span>\n\t\t\t\t</fieldset>\n\t\t\t`);\n\n\t\t\t\tlet elButtonContainer = elFieldset.find(\"span\");\n\t\t\t\tfor(let elButton of elButtons){\n\t\t\t\t\telButtonContainer.append(elButton);\n\t\t\t\t}\n\n\t\t\t\telButtonContainer.find(\"label\").each( (index, value) => {\n\t\t\t\t\t$(value).css(\"margin\", \"0px\");\n\t\t\t\t\t$(value).css(\"border-radius\", \"0px\");\n\t\t\t\t\t$(value).css(\"border\", \"1px solid black\");\n\t\t\t\t\t$(value).css(\"border-left\", \"none\");\n\t\t\t\t});\n\t\t\t\telButtonContainer.find(\"label:first\").each( (index, value) => {\n\t\t\t\t\t$(value).css(\"border-radius\", \"4px 0px 0px 4px\");\n\n\t\t\t\t});\n\t\t\t\telButtonContainer.find(\"label:last\").each( (index, value) => {\n\t\t\t\t\t$(value).css(\"border-radius\", \"0px 4px 4px 0px\");\n\t\t\t\t\t$(value).css(\"border-left\", \"none\");\n\t\t\t\t});\n\n\t\t\t\telGroup.empty();\n\t\t\t\telGroup.append(elFieldset);\n\n\n\n\t\t\t}\n\t\t});\n\t})(jQuery);\n\n\texports.Action = Action;\n\texports.AnimationPath = AnimationPath;\n\texports.Annotation = Annotation;\n\texports.Box3Helper = Box3Helper$1;\n\texports.BoxVolume = BoxVolume;\n\texports.CameraAnimation = CameraAnimation;\n\texports.CameraMode = CameraMode;\n\texports.ClassificationScheme = ClassificationScheme;\n\texports.ClipMethod = ClipMethod;\n\texports.ClipTask = ClipTask;\n\texports.ClipVolume = ClipVolume;\n\texports.ClippingTool = ClippingTool;\n\texports.Compass = Compass;\n\texports.DeviceOrientationControls = DeviceOrientationControls;\n\texports.EarthControls = EarthControls;\n\texports.ElevationGradientRepeat = ElevationGradientRepeat;\n\texports.Enum = Enum;\n\texports.EnumItem = EnumItem;\n\texports.EptBinaryLoader = EptBinaryLoader;\n\texports.EptKey = EptKey;\n\texports.EptLaszipLoader = EptLaszipLoader;\n\texports.EptLazBatcher = EptLazBatcher;\n\texports.EptLoader = EptLoader;\n\texports.EptZstandardLoader = EptZstandardLoader;\n\texports.EventDispatcher = EventDispatcher;\n\texports.EyeDomeLightingMaterial = EyeDomeLightingMaterial;\n\texports.Features = Features;\n\texports.FirstPersonControls = FirstPersonControls;\n\texports.GeoPackageLoader = GeoPackageLoader;\n\texports.Geopackage = Geopackage$1;\n\texports.Gradients = Gradients;\n\texports.HierarchicalSlider = HierarchicalSlider;\n\texports.Images360 = Images360;\n\texports.Images360Loader = Images360Loader;\n\texports.KeyCodes = KeyCodes;\n\texports.LRU = LRU;\n\texports.LRUItem = LRUItem;\n\texports.LengthUnits = LengthUnits;\n\texports.MOUSE = MOUSE$1;\n\texports.Measure = Measure;\n\texports.MeasuringTool = MeasuringTool;\n\texports.Message = Message;\n\texports.NodeLoader = NodeLoader;\n\texports.NormalizationEDLMaterial = NormalizationEDLMaterial;\n\texports.NormalizationMaterial = NormalizationMaterial;\n\texports.OctreeLoader = OctreeLoader;\n\texports.OrbitControls = OrbitControls;\n\texports.OrientedImage = OrientedImage;\n\texports.OrientedImageLoader = OrientedImageLoader;\n\texports.OrientedImages = OrientedImages;\n\texports.POCLoader = POCLoader;\n\texports.PathAnimation = PathAnimation;\n\texports.PointAttribute = PointAttribute;\n\texports.PointAttributeTypes = PointAttributeTypes;\n\texports.PointAttributes = PointAttributes;\n\texports.PointCloudEptGeometry = PointCloudEptGeometry;\n\texports.PointCloudEptGeometryNode = PointCloudEptGeometryNode;\n\texports.PointCloudMaterial = PointCloudMaterial$1;\n\texports.PointCloudOctree = PointCloudOctree;\n\texports.PointCloudOctreeGeometry = PointCloudOctreeGeometry;\n\texports.PointCloudOctreeGeometryNode = PointCloudOctreeGeometryNode;\n\texports.PointCloudOctreeNode = PointCloudOctreeNode;\n\texports.PointCloudSM = PointCloudSM;\n\texports.PointCloudTree = PointCloudTree;\n\texports.PointCloudTreeNode = PointCloudTreeNode;\n\texports.PointShape = PointShape;\n\texports.PointSizeType = PointSizeType;\n\texports.Points = Points$1;\n\texports.PolygonClipVolume = PolygonClipVolume;\n\texports.Profile = Profile;\n\texports.ProfileData = ProfileData;\n\texports.ProfileRequest = ProfileRequest;\n\texports.ProfileTool = ProfileTool;\n\texports.Renderer = Renderer;\n\texports.Scene = Scene$1;\n\texports.ScreenBoxSelectTool = ScreenBoxSelectTool;\n\texports.ShapefileLoader = ShapefileLoader;\n\texports.SphereVolume = SphereVolume;\n\texports.SpotLightHelper = SpotLightHelper$1;\n\texports.TextSprite = TextSprite;\n\texports.TransformationTool = TransformationTool;\n\texports.TreeType = TreeType;\n\texports.Utils = Utils;\n\texports.VRControls = VRControls;\n\texports.Version = Version;\n\texports.Viewer = Viewer;\n\texports.Volume = Volume;\n\texports.VolumeTool = VolumeTool;\n\texports.WorkerPool = WorkerPool;\n\texports.XHRFactory = XHRFactory;\n\texports.debug = debug;\n\texports.framenumber = framenumber;\n\texports.loadPointCloud = loadPointCloud$1;\n\texports.loadProject = loadProject;\n\texports.lru = lru;\n\texports.maxNodesLoading = maxNodesLoading;\n\texports.numNodesLoading = numNodesLoading;\n\texports.pointBudget = pointBudget;\n\texports.resourcePath = resourcePath;\n\texports.saveProject = saveProject;\n\texports.updatePointClouds = updatePointClouds;\n\texports.updateVisibility = updateVisibility;\n\texports.updateVisibilityStructures = updateVisibilityStructures;\n\texports.version = version;\n\texports.workerPool = workerPool;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=potree.js.map\n"
  },
  {
    "path": "libs/potree/profile.html",
    "content": "<div id=\"profile_window\" style=\"\n\tposition: absolute; \n\twidth: 84%;\n\tleft: 15%; top: 55%; height: 44%;\n\tmargin: 5px;\n\tborder: 1px solid black; \n\tdisplay: none; box-sizing: border-box; z-index:10000\">\n\t\n\t<div id=\"profile_titlebar\" class=\"pv-titlebar\" style=\"display: flex; position: absolute; height: 30px; width: 100%; box-sizing: border-box;\">\n\t\t<span style=\"padding-right: 10px\">\n\t\t\t<span id=\"profile_window_title\" data-i18n=\"profile.title\"></span>\n\t\t</span>\n\t\t<span id=\"profileInfo\" style=\"flex-grow: 1; flex-direction: row\"> </span>\n\t\t<!-- <span id=\"profile_toggle_size_button\" class=\"ui-icon ui-icon-newwin profile-button\"> </span> -->\n\t\t<!--<span id=\"closeProfileContainer\" class=\"ui-icon ui-icon-close profile-button\"> </span>-->\n\t\t<img id=\"closeProfileContainer\" class=\"button-icon\" style=\"width: 24px; height: 24px; margin: 4px\"/>\n\t</div>\n\t\n\t<div style=\"position: absolute; top: 30px; width: 100%; height: calc(100% - 30px); box-sizing: border-box;\" class=\"pw_content\">\n\t\t\n\t\t<span class=\"pv-main-color\" style=\"height: 100%; width: 100%; padding: 5px; display:flex; flex-direction: column; box-sizing: border-box;\">\n\t\t\t<div style=\" width: 100%; color: #9d9d9d; margin: 5px; display: flex; flex-direction: row; box-sizing: border-box;\">\n\t\t\t\t<span data-i18n=\"profile.nb_points\"></span>: &nbsp;\n\t\t\t\t<span id=\"profile_num_points\">-</span>\n\t\t\t\t<!--<span id=\"profile_threshold\" style=\"width: 300px\">\n\t\t\t\t\tThreshold: <span id=\"potree_profile_threshold_label\">123</span> <div id=\"potree_profile_threshold_slider\"></div>\n\t\t\t\t</span>-->\n\t\t\t\t<span style=\"flex-grow: 1;\"></span>\n\t\t\t\t<span>\n\t\t\t\t\n\t\t\t\t\t<!-- <span contenteditable=\"true\" style=\"display: inline-block; \n\t\t\t\t\t\twidth: 24px; height: 24px; \n\t\t\t\t\t\tvertical-align: top; \n\t\t\t\t\t\tbackground: white; color:black\"></span> -->\n\n\t\t\t\t\t<input id=\"potree_profile_rotate_amount\" \n\t\t\t\t\t\ttype=\"text\" maxlength=\"4\" value=\"10\" style=\"\n\t\t\t\t\t\tdisplay: inline-block; \n\t\t\t\t\t\twidth: 2.5em; \n\t\t\t\t\t\tvertical-align: top; \n\t\t\t\t\t\tbackground: white;\n\t\t\t\t\t\tmargin: 2px;\n\t\t\t\t\t\t\"></span>\n\t\t\t\t\t\n\t\t\t\t\t<img id=\"potree_profile_rotate_cw\" class=\"text-icon\"/>\n\t\t\t\t\t<img id=\"potree_profile_rotate_ccw\" class=\"text-icon\"/>\n\n\t\t\t\t\t<img id=\"potree_profile_move_forward\" class=\"text-icon\"/>\n\t\t\t\t\t<img id=\"potree_profile_move_backward\" class=\"text-icon\"/>\n\n\t\t\t\t\t<a id=\"potree_download_profile_dxf2D_link\" href=\"#\" download=\"profile_2D.dxf\">\n\t\t\t\t\t\t<img id=\"potree_download_dxf2D_icon\" class=\"text-icon\"/>\n\t\t\t\t\t</a>\n\n\t\t\t\t\t<a id=\"potree_download_profile_dxf3D_link\" href=\"#\" download=\"profile_3D.dxf\">\n\t\t\t\t\t\t<img id=\"potree_download_dxf3D_icon\" class=\"text-icon\"/>\n\t\t\t\t\t</a>\n\n\t\t\t\t\t<a id=\"potree_download_profile_ortho_link\" href=\"#\" download=\"profile.csv\">\n\t\t\t\t\t\t<img id=\"potree_download_csv_icon\" class=\"text-icon\"/>\n\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t\t<a id=\"potree_download_profile_link\" href=\"#\" download=\"profile.las\">\n\t\t\t\t\t\t<img id=\"potree_download_las_icon\" class=\"text-icon\"/>\n\t\t\t\t\t</a>\n\t\t\t\t\t\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t\t\n\t\t\t<div id=\"profile_draw_container\" style=\"\n\t\t\t\twidth: 100%; \n\t\t\t\tflex-grow: 1; \n\t\t\t\tposition: relative; height: 100%; \n\t\t\t\tbox-sizing: border-box; user-select: none\">\n\t\t\t\t<div style=\"\n\t\t\t\t\tposition: absolute; \n\t\t\t\t\tleft: 41px; \n\t\t\t\t\ttop: 0; \n\t\t\t\t\tbottom: 20; \n\t\t\t\t\twidth: calc(100% - 41px); \n\t\t\t\t\theight: calc(100% - 20px); \n\t\t\t\t\tbackground-color: #000000;\n\t\t\t\t\t\"></div>\n\t\t\t\t<svg id=\"profileSVG\" style=\"\n\t\t\t\t\tfill: #9d9d9d;\n\t\t\t\t\tposition: absolute; \n\t\t\t\t\tleft: 0; right: 0; \n\t\t\t\t\ttop: 0; bottom: 0; \n\t\t\t\t\twidth: 100%; \n\t\t\t\t\theight: 100%;\n\t\t\t\t\t\"></svg>\n\t\t\t\t<div id=\"profileCanvasContainer\" style=\"\n\t\t\t\t\tposition: absolute; \n\t\t\t\t\tleft: 41px; \n\t\t\t\t\ttop: 0; \n\t\t\t\t\tbottom: 20; \n\t\t\t\t\twidth: calc(100% - 41px); \n\t\t\t\t\theight: calc(100% - 20px); \n\t\t\t\t\t/*background-color: #000000;*/\n\t\t\t\t\t\"></div>\n\t\t\t\t\n\t\t\t\t<div id=\"profileSelectionProperties\" style=\"\n\t\t\t\t\tposition: absolute; \n\t\t\t\t\tleft: 50px; \n\t\t\t\t\ttop: 10px; \n\t\t\t\t\tbackground-color: black;\n\t\t\t\t\tcolor: white;\n\t\t\t\t\topacity: 0.7;\n\t\t\t\t\tpadding: 5px;\n\t\t\t\t\tborder: 1px solid white;\n\t\t\t\t\tuser-select: text;\n\t\t\t\t\t\">\n\t\t\t\t\tposition: asdsadf asdf<br>\n\t\t\t\t\trgb: 123 423 123\n\t\t\t\t\t</div>\n\t\t\t\t\n\t\t\t</div>\n\t\t</span>\n\t</div>\n\n</div>"
  },
  {
    "path": "libs/potree/resources/LICENSE",
    "content": "\n\n\nicons/map_icon.png\nfrom sitn PotreeViewer\nhttp://ne.ch/sitn\nhttps://github.com/PotreeViewer/PotreeViewer\n\nicons/navigation_cube.svg\nicons/orthographic_camera.svg\nicons/perspective_camera.svg\nfree for commerical use without attribution\nhttp://www.freepik.com/free-icon/package-cube-box-for-delivery_720159.htm\n\n\n# VR Controller Model\nimages/vr_controller_help*\nController model from https://sketchfab.com/3d-models/htc-vive-controller-9f03e4a80c5a4b31a24bb122f17cb229\nlicense: CC AttributionCreative Commons Attribution\n\n"
  },
  {
    "path": "libs/potree/resources/icons/image_preview.php",
    "content": "<?php\n\n\n$dir    = './';\n$files = scandir($dir);\n\nforeach($files as $key => $value){\n\t\n\tif($value === \".\" || $value === \"..\" || $value === \"image_preview.php\"){\n\t\tcontinue;\n\t}\n\t\n\t?>\t\n\t<div style=\"float: left; margin: 10px; width: 140px; height: 140px\">\n\t\t<span ><?= $value ?></span><br>\n\t\t<img src=\"<?= $value ?>\" style=\"width: 128px; border: 1px solid black\" />\n\t</div>\n\t<?php\n\n}\n\n\n\n?>"
  },
  {
    "path": "libs/potree/resources/icons/index.html",
    "content": "\n\t\t\t<html>\n\t\t\t\t<head>\n\t\t\t\t\t<style>\n\t\t\t\t\t\t.icon_container{\n\t\t\t\t\t\t\tborder: 1px solid black;\n\t\t\t\t\t\t\tmargin: 10px;\n\t\t\t\t\t\t\tpadding: 10px;\n\t\t\t\t\t\t}\n\t\t\t\t\t</style>\n\t\t\t\t</head>\n\t\t\t\t<body>\n\t\t\t\t\t<div id=\"icons_container\">\n\t\t\t\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"add.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">add.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"annotation.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">annotation.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"area.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">area.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"area_backup.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">area_backup.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"arrow_ccw.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">arrow_ccw.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"arrow_cw.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">arrow_cw.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"arrow_down.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">arrow_down.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"arrow_left.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">arrow_left.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"arrow_right.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">arrow_right.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"arrow_up.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">arrow_up.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"assign.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">assign.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"azimuth.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">azimuth.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"back.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">back.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"bottom.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">bottom.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"camera_animation.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">camera_animation.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"circle.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">circle.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"circled_dot.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">circled_dot.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"clip-plane-x.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">clip-plane-x.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"clip-plane-y.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">clip-plane-y.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"clip-plane-z.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">clip-plane-z.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"clip-polygon.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">clip-polygon.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"clip-screen.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">clip-screen.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"clip_volume.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">clip_volume.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"close.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">close.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"cloud.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">cloud.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"copy.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">copy.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"distance.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">distance.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"earth_controls.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">earth_controls.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"eye.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">eye.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"eye_2.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">eye_2.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"eye_crossed.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">eye_crossed.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"file_csv_2d.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">file_csv_2d.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"file_dxf.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">file_dxf.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"file_dxf_2d.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">file_dxf_2d.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"file_dxf_3d.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">file_dxf_3d.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"file_geojson.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">file_geojson.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"file_las_3d.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">file_las_3d.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"file_potree.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">file_potree.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"flip_y_z.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">flip_y_z.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"focus.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">focus.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"fps_controls.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">fps_controls.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"front.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">front.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"goto.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">goto.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"height.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">height.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"helicopter_controls.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">helicopter_controls.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"left.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">left.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"menu_button.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">menu_button.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"menu_icon.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">menu_icon.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"navigation_cube.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">navigation_cube.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"orbit_controls.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">orbit_controls.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"orthographic-camera.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">orthographic-camera.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"perspective-camera.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">perspective-camera.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"picture.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">picture.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"point.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">point.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"profile.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">profile.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"remove.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">remove.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"reset_tools.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">reset_tools.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"return_number.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">return_number.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"rgb.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">rgb.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"right.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">right.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"rotate.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">rotate.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"scale.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">scale.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"sphere.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">sphere.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"sphere_distances.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">sphere_distances.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"target.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">target.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"top.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">top.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"translate.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">translate.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"triangle.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">triangle.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"volume.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">volume.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"vr_button.svg\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">vr_button.svg</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"angle.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">angle.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"earth_controls.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">earth_controls.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"earth_controls_1.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">earth_controls_1.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"eye_2.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">eye_2.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"flip_y_z.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">flip_y_z.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"fps_controls.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">fps_controls.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"gradients_grayscale.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">gradients_grayscale.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"gradients_plasma.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">gradients_plasma.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"gradients_rainbow.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">gradients_rainbow.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"gradients_spectral.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">gradients_spectral.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"gradients_yellow_green.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">gradients_yellow_green.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"map_icon.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">map_icon.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"profile.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">profile.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"rgb.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">rgb.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"rgb_elevation.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">rgb_elevation.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t<span class=\"icon_container\" style=\"position: relative; float: left\">\n\t\t\t\t<center>\n\t\t\t\t<img src=\"sphere.png\" style=\"height: 32px;\"/>\n\t\t\t\t<div style=\"font-weight: bold\">sphere.png</div>\n\t\t\t\t</center>\n\t\t\t</span>\n\t\t\t\n\t\t\t\t\t</div>\n\t\t\t\t</body>\n\t\t\t</html>\n\t\t"
  },
  {
    "path": "libs/potree/resources/lang/de/translation.json",
    "content": "{\n    \"tb\": {\n        \"navigation_opt\": \"Navigation\",\n        \"rendering_opt\": \"Aussehen\",\n        \"tools_opt\": \"Tools\",\n        \"measurments_opt\": \"Messungen\",\n        \"clipping_opt\": \"Clipping\",\n        \"materials_opt\": \"Materials\",\n        \"scene_opt\": \"Szene\",\n        \"classification_filter_opt\": \"Klassifizierung  Filter\",\n        \"parameters_opt\": \"Weitere Einstellungen\",\n        \"about_opt\": \"Über Potree\"\n    },\n    \"tt\": {\n        \"angle_measurement\": \"Winkelmessung\",\n        \"distance_measurement\": \"Abstandsmessung\",\n        \"area_measurement\": \"Flächenmessung\",\n        \"volume_measurement\": \"Volumenmessung\",\n        \"height_profile\": \"Höhenprofil\",\n        \"clip_volume\": \"Volume clip\",\n        \"clip_polygon\": \"Polygon clip\",\n        \"clip_plane_x\": \"Clipebene auf x-Achse\",\n        \"clip_plane_y\": \"Clipebene auf y-Achse\",\n        \"clip_plane_z\": \"Clipebene auf z-Achse\",\n        \"remove_all_measurement\": \"Alle Messungen entfernen\",\n        \"left_view_control\": \"Linke Seite\",\n        \"front_view_control\": \"Vorderseite\",\n        \"top_view_control\": \"Draufsicht\",\n        \"focus_control\": \"Volle Ausdehnung\",\n        \"orbit_control\": \"Orbit Kontrolle \",\n        \"flight_control\": \"Fly Kontrolle\",\n        \"earth_control\": \"Earth Kontrolle\",\n        \"perspective_camera_control\": \"Perspektivische Kamera\",\n        \"orthographic_camera_control\": \"Orthografische Kamera\",\n        \"navigation_cube_control\": \"Navigationswürfel\",\n        \"remove_all_clipping_volumes\": \"Alle Clipvolumen entfernen\"\n    },\n    \"appearance\": {\n        \"nb_max_pts\": \"Max Punkte\", \n        \"point_size\": \"Punktgrösse\",\n        \"point_opacity\": \"Deckkraft\",\n        \"field_view\": \"Sichtfeld\",\n        \"point_size_type\": \"Punktgrösse\",\n        \"point_material\": \"Materials\",\n        \"elevation_range\": \"Elevation Bereich\",\n        \"point_quality\": \"Qualität\",\n\t\t\"point_shape\": \"Form\",\n        \"edl_radius\": \"Radius\",\n        \"edl_strength\": \"Stärke\",\n        \"edl_enable\": \"Ein\",\n        \"min_node_size\": \"Min Knotengrösse\",\n        \"clip_mode\": \"Clip-Modus\",\n        \"move_speed\": \"Speed\",\n        \"skybox\": \"Sky\",\n        \"bottom_lock\": \"Halten über dem Boden\",\n        \"box\": \"Box\",\n        \"length_unit\": \"Lenght unit\",\n        \"freeze\": \"Lock view\",\n        \"language\": \"Sprache\"\n    },\n    \"profile\": {\n        \"nb_points\": \"Punkt number\",\n        \"title\": \"Höhenprofil\",\n        \"save\": \"Speichern\"\n    },\n    \"settings\": {\n        \"language\": \"Sprache\"\n    }\n}\n"
  },
  {
    "path": "libs/potree/resources/lang/dev/ns.common.json",
    "content": "{\n\t\"simple_dev\": \"ok_from_common_dev\",\n\t\"test\": {\n\t\t\"simple_dev\": \"ok_from_common_dev\",\n\t\t\"fallback_dev\": \"ok_from_common_dev-fallback\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/lang/dev/ns.special.json",
    "content": "{\n\t\"simple_dev\": \"ok_from_special_dev\",\n\t\"test\": {\n\t\t\"simple_dev\": \"ok_from_special_dev\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/lang/dev/translation.json",
    "content": "{\n\t\"simple_dev\": \"ok_from_dev\",\n\t\"test\": {\n\t\t\"simple_dev\": \"ok_from_dev\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/lang/en/ns.common.json",
    "content": "{\n\t\"simple_en\": \"ok_from_common_en\",\n\t\"test\": {\n\t\t\"simple_en\": \"ok_from_common_en\",\n\t\t\"fallback_en\": \"ok_from_common_en-fallback\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/lang/en/ns.special.json",
    "content": "{\n\t\"simple_en\": \"ok_from_special_en\",\n\t\"test\": {\n\t\t\"simple_en\": \"ok_from_special_en\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/lang/en/translation.json",
    "content": "{\n\t\"tb\": {\n\t\t\"navigation_opt\": \"Navigation\",\n\t\t\"rendering_opt\": \"Appearance\",\n\t\t\"tools_opt\": \"Tools\",\n\t\t\"measurments_opt\": \"Measurements\",\n\t\t\"clipping_opt\": \"Clipping\",\n\t\t\"annotations_opt\": \"Annotations\",\n\t\t\"materials_opt\": \"Materials\",\n\t\t\"scene_opt\": \"Scene\",\n\t\t\"classification_filter_opt\": \"Classification filter\",\n\t\t\"filters_opt\": \"Filters\",\n\t\t\"parameters_opt\": \"Other settings\",\n\t\t\"about_opt\": \"About\"\n\t},\n\t\"tt\": {\n\t\t\"angle_measurement\": \"Angle measurement\",\n\t\t\"point_measurement\": \"Point measurement\",\n\t\t\"distance_measurement\": \"Distance measurement\",\n\t\t\"height_measurement\": \"Height measurement\",\n\t\t\"circle_measurement\": \"Circle measurement\",\n\t\t\"area_measurement\": \"Area measurement\",\n\t\t\"volume_measurement\": \"Volume measurement\",\n\t\t\"height_profile\": \"Height profile\",\n\t\t\"annotation\": \"Annotation\",\n\t\t\"clip_volume\": \"Volume clip\",\n\t\t\"clip_polygon\": \"Polygon clip\",\n\t\t\"screen_clip_box\": \"Draw a selection box. Requires you to be in orthographic camera mode!\",\n\t\t\"clip_plane_x\": \"Clip plane on x axis\",\n\t\t\"clip_plane_y\": \"Clip plane on y axis\",\n\t\t\"clip_plane_z\": \"Clip plane on z axis\",\n\t\t\"remove_all_measurement\": \"Remove all measurements\",\n\t\t\"left_view_control\": \"Left view\",\n\t\t\"right_view_control\": \"Righ view\",\n\t\t\"front_view_control\": \"Front view\",\n\t\t\"back_view_control\": \"Back view\",\n\t\t\"top_view_control\": \"Top view\",\n\t\t\"bottom_view_control\": \"Bottom view\",\n\t\t\"focus_control\": \"Full extent\",\n\t\t\"orbit_control\": \"Orbit control\",\n\t\t\"flight_control\": \"Fly control\",\n\t\t\"heli_control\": \"Helicopter control\",\n\t\t\"earth_control\": \"Earth control\",\n\t\t\"perspective_camera_control\": \"Perspective camera\",\n\t\t\"orthographic_camera_control\": \"Orthographic camera\",\n\t\t\"navigation_cube_control\": \"Navigation cube\",\n\t\t\"remove_all_clipping_volumes\": \"Remove all clipping volumes\",\n\t\t\"compass\": \"Compass\",\n\t\t\"camera_animation\": \"Camera Animation\"\n\t},\n\t\"appearance\": {\n\t\t\"nb_max_pts\": \"Point budget\", \n\t\t\"point_size\": \"Point size\",\n\t\t\"min_point_size\": \"Minimum size\",\n\t\t\"point_opacity\": \"Opacity\",\n\t\t\"field_view\": \"Field of view\",\n\t\t\"point_size_type\": \"Point sizing\",\n\t\t\"point_material\": \"Materials\",\n\t\t\"elevation_range\": \"Elevation range\",\n\t\t\"extra_range\": \"Scalar range\",\n\t\t\"point_quality\": \"Quality\",\n\t\t\"point_shape\": \"Shape\",\n\t\t\"edl_radius\": \"Radius\",\n\t\t\"edl_strength\": \"Strength\",\n\t\t\"edl_opacity\": \"Opacity\",\n\t\t\"edl_enable\": \"Enable\",\n\t\t\"min_node_size\": \"Min node size\",\n\t\t\"clip_mode\": \"Clip mode\",\n\t\t\"move_speed\": \"Speed\",\n\t\t\"skybox\": \"Sky\",\n\t\t\"bottom_lock\": \"Keep above ground\",\n\t\t\"box\": \"Box\",\n\t\t\"length_unit\": \"Length unit\",\n\t\t\"freeze\": \"Lock view\",\n\t\t\"language\": \"Language\",\n\t\t\"backface_culling\": \"Backface Culling\"\n\t},\n\t\"measurements\": {\n\t\t\"clip\": \"clip\",\n\t\t\"show\": \"show volume\"\n\t},\n\t\"annotations\": {\n\t\t\"show3D\": \"show in 3D\",\n\t\t\"showMap\": \"show on map\"\n\t}, \n\t\"profile\": {\n\t\t\"nb_points\": \"Number of Points\",\n\t\t\"title\": \"Height profile\",\n\t\t\"save_las\": \"Save LAS(3D)\",\n\t\t\"save_ortho\": \"Save CSV(2D)\"\n\t},\n\t\"scene\": {\n\t\t\"camera_position\": \"Camera Position\",\n\t\t\"camera_target\": \"Camera Target\"\n\t},\n\t\"filters\": {\n\t\t\"return_number\": \"Return Number\",\n\t\t\"number_of_returns\": \"Number of Returns\",\n\t\t\"gps_min\": \"min\",\n\t\t\"gps_max\": \"max\",\n\t\t\"gps_time\": \"GPS Time\"\n\t},\n\t\"settings\": {\n\t\t\"language\": \"Language\"\n\t}\n}\n"
  },
  {
    "path": "libs/potree/resources/lang/en-US/ns.common.json",
    "content": "{\n\t\"simple_en-US\": \"ok_from_common_en-US\",\n\t\"test\": {\n\t\t\"simple_en-US\": \"ok_from_common_en-US\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/lang/en-US/ns.special.json",
    "content": "{\n\t\"simple_en-US\": \"ok_from_special_en-US\",\n\t\"test\": {\n\t\t\"simple_en-US\": \"ok_from_special_en-US\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/lang/en-US/translation.json",
    "content": "{\n\t\"simple_en-US\": \"ok_from_en-US\",\n\t\"test\": {\n\t\t\"simple_en-US\": \"ok_from_en-US\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/lang/es/translation.json",
    "content": "{\n\t\"tb\": {\n\t\t\"navigation_opt\": \"Navegación\",\n\t\t\"rendering_opt\": \"Apariencia\",\n\t\t\"tools_opt\": \"Herramientas\",\n\t\t\"measurments_opt\": \"Medidas\",\n\t\t\"clipping_opt\": \"Recorte\",\n\t\t\"annotations_opt\": \"Anotaciones\",\n\t\t\"materials_opt\": \"Materiales\",\n\t\t\"scene_opt\": \"Escena\",\n\t\t\"classification_filter_opt\": \"Filtro de clasificación\",\n\t\t\"parameters_opt\": \"Otros ajustes\",\n\t\t\"about_opt\": \"Acerca de\"\n\t},\n\t\"tt\": {\n\t\t\"angle_measurement\": \"Medición de ángulos\",\n\t\t\"point_measurement\": \"Medición de puntos\",\n\t\t\"distance_measurement\": \"Medición de distancia\",\n\t\t\"height_measurement\": \"Medición de altura\",\n\t\t\"area_measurement\": \"Medición de área\",\n\t\t\"volume_measurement\": \"Medición de volumen\",\n\t\t\"height_profile\": \"Perfil de altura\",\n\t\t\"clip_volume\": \"Clip de volumen\",\n\t\t\"clip_polygon\": \"Clip poligonal\",\n\t\t\"screen_clip_box\": \"Dibuje un cuadro de selección. Requiere que usted esté en modo de cámara ortográfica\",\n\t\t\"clip_plane_x\": \"Plano del clip en el eje x\",\n\t\t\"clip_plane_y\": \"Plano del clip en el eje y\",\n\t\t\"clip_plane_z\": \"Plano del clip en el eje z\",\n\t\t\"remove_all_measurement\": \"Eliminar todas las mediciones\",\n\t\t\"left_view_control\": \"Vista izquierda\",\n\t\t\"right_view_control\": \"Vista derecha\",\n\t\t\"front_view_control\": \"Vista de frente\",\n\t\t\"back_view_control\": \"Vista desde atrás\",\n\t\t\"top_view_control\": \"Vista superior\",\n\t\t\"bottom_view_control\": \"Vista inferior\",\n\t\t\"focus_control\": \"Alcance total\",\n\t\t\"orbit_control\": \"Control de órbita\",\n\t\t\"flight_control\": \"Control de vuelo\",\n\t\t\"heli_control\": \"Control de helicóptero\",\n\t\t\"earth_control\": \"Control de la tierra\",\n\t\t\"perspective_camera_control\": \"Perspectiva de la cámara\",\n\t\t\"orthographic_camera_control\": \"Cámara ortográfica\",\n\t\t\"navigation_cube_control\": \"Cubo de navegación\",\n\t\t\"remove_all_clipping_volumes\": \"Eliminar todos los volúmenes de recorte\"\n\t},\n\t\"appearance\": {\n\t\t\"nb_max_pts\": \"Presupuesto de puntos\", \n\t\t\"point_size\": \"Tamaño del punto\",\n\t\t\"point_opacity\": \"Opacidad\",\n\t\t\"field_view\": \"Campo de visión\",\n\t\t\"point_size_type\": \"Dimensionamiento de puntos\",\n\t\t\"point_material\": \"Materiales\",\n\t\t\"elevation_range\": \"Rango de elevación\",\n\t\t\"point_quality\": \"Calidad\",\n\t\t\"point_shape\": \"Forma\",\n\t\t\"edl_radius\": \"Radio\",\n\t\t\"edl_strength\": \"Fuerza\",\n\t\t\"edl_enable\": \"Habilitar\",\n\t\t\"min_node_size\": \"Tamaño de nodo mínimo\",\n\t\t\"clip_mode\": \"Modo clip\",\n\t\t\"move_speed\": \"Velocidad\",\n\t\t\"skybox\": \"Cielo\",\n\t\t\"bottom_lock\": \"Mantenerse sobre el suelo\",\n\t\t\"box\": \"Caja\",\n\t\t\"length_unit\": \"Unidad de longitud\",\n\t\t\"freeze\": \"Vista de bloqueo\",\n\t\t\"language\": \"Lenguaje\"\n\t},\n\t\"measurements\": {\n\t\t\"clip\": \"clip\",\n\t\t\"show\": \"ver volumen\"\n\t},\n\t\"annotations\": {\n\t\t\"show3D\": \"ver en 3D\",\n\t\t\"showMap\": \"ver en mapa\"\n\t}, \n\t\"profile\": {\n\t\t\"nb_points\": \"Número de puntos\",\n\t\t\"title\": \"Perfil de altura\",\n\t\t\"save_las\": \"Guardar LAS(3D)\",\n\t\t\"save_ortho\": \"Guardar CSV(2D)\"\n\t},\n\t\"scene\": {\n\t\t\"camera_position\": \"Posición de la cámara\",\n\t\t\"camera_target\": \"Objetuvo de la cámara\"\n\t},\n\t\"settings\": {\n\t\t\"language\": \"Lenguaje\"\n\t}\n}\n"
  },
  {
    "path": "libs/potree/resources/lang/fr/translation.json",
    "content": "{\n    \"tb\": {\n        \"navigation_opt\": \"Navigation\",\n        \"rendering_opt\": \"Apparence\",\n        \"tools_opt\": \"Outils\",\n        \"measurments_opt\": \"Mesures\",\n        \"materials_opt\": \"Matériaux\",\n        \"scene_opt\": \"Scène\",\n        \"classification_filter_opt\": \"Filtre de classification\",\n        \"parameters_opt\": \"Autres paramètres\",\n        \"about_opt\": \"À propos\"\n    },\n    \"tt\": {\n        \"angle_measurement\": \"Mesurer un angle\",\n        \"distance_measurement\": \"Mesurer une distance\",\n        \"area_measurement\": \"Mesurer une surface\",\n        \"volume_measurement\": \"Mesurer un volume\",\n        \"height_profile\": \"Mesurer un profil\",\n        \"clip_volume\": \"Sélectionner des points par un volume\",\n        \"remove_all_measurement\": \"Supprimer toutes les mesures\",\n        \"left_view_control\": \"Vue de la gauche\",\n        \"front_view_control\": \"Vue de face\",\n        \"top_view_control\": \"Vue de dessus\",\n        \"focus_control\": \"Vue complète\",\n        \"orbit_control\": \"Orbite\",\n        \"flight_control\": \"Vol\",\n        \"earth_control\": \"Earth\"\n    },\n    \"appearance\": {\n        \"nb_max_pts\": \"Nb points max\", \n        \"point_size\": \"Taille des points\",\n        \"point_opacity\": \"Opacité\",\n        \"field_view\": \"Angle de vue\",\n        \"point_size_type\": \"Type de taille\",\n        \"point_material\": \"Matériaux\",\n        \"elevation_range\": \"Plage altimétrique\",\n        \"point_quality\": \"Qualité\",\n        \"edl_radius\": \"Rayon\",\n        \"edl_strength\": \"Intensité\",\n        \"edl_enable\": \"Activer\",\n        \"min_node_size\": \"Taille minimum des noeuds\",\n        \"clip_mode\": \"Mode d'intersection\",\n        \"move_speed\": \"Vitesse\",\n        \"skybox\": \"Ciel\",\n        \"bottom_lock\": \"Rester au-dessus du sol\",\n        \"box\": \"Boite\",\n        \"freeze\": \"Vérouiller la vue\",\n        \"language\": \"Choix de la langue\"\n    },\n    \"profile\": {\n        \"nb_points\": \"Nombre de points\",\n        \"title\": \"Profil altimétrique\",\n        \"save\": \"Enregistrer\"\n    },\n    \"settings\": {\n        \"language\": \"Langue\"\n    }\n}\n"
  },
  {
    "path": "libs/potree/resources/lang/it/translation.json",
    "content": "{\n    \"tb\": {\n        \"navigation_opt\": \"Navigazione\",\n        \"rendering_opt\": \"Visualizzazione\",\n        \"tools_opt\": \"Strumenti\",\n        \"measurments_opt\": \"Misure\",\n\t\t\"clipping_opt\": \"Opzioni di ritaglio\",\n\t\t\"annotations_opt\": \"Annotazioni\",\n        \"materials_opt\": \"Materiali\",\n        \"scene_opt\": \"Scena\",\n        \"classification_filter_opt\": \"Filtro di classificazione\",\n\t\t\"filters_opt\": \"Filtri\",\n        \"parameters_opt\": \"Altri parametri\",\n        \"about_opt\": \"A proposito\"\n    },\n    \"tt\": {\n        \"angle_measurement\": \"Misurazione angolo\",\n\t\t\"point_measurement\": \"Misurazione punto\",\n        \"distance_measurement\": \"Misurazione distanza\",\n\t\t\"height_measurement\": \"Misurazione quota\",\n\t\t\"circle_measurement\": \"Misurazione cerchio\",\n        \"area_measurement\": \"Misurazione superficie\",\n        \"volume_measurement\": \"Misurazione volume\",\n        \"height_profile\": \"Misurazione profilo\",\n\t\t\"annotation\": \"Annotazione\",\n        \"clip_volume\": \"Ritaglio con volume\",\n\t\t\"clip_polygon\": \"Ritaglio con poligono\",\n        \"remove_all_measurement\": \"Cancellazione misure\",\n        \"left_view_control\": \"Vista da sinistra\",\n        \"front_view_control\": \"Vista frontale\",\n\t\t\"back_view_control\": \"Vista da dietro\",\n        \"top_view_control\": \"Vista nadirale\",\n\t\t\"bottom_view_control\": \"Vista dal basso\",\n        \"focus_control\": \"Massima estensione\",\n        \"orbit_control\": \"Modalità orbit\",\n        \"flight_control\": \"Modalità volo\",\n\t\t\"heli_control\": \"Modalità elicottero\",\n        \"earth_control\": \"Modalità Earth\",\n\t\t\"perspective_camera_control\": \"Vista prospettica\",\n\t\t\"orthographic_camera_control\": \"Vista ortografica\",\n\t\t\"remove_all_clipping_volumes\": \"Rimuovere tutti i volumi ritagliati\",\n\t\t\"compass\": \"Bussola\",\n\t\t\"camera_animation\": \"Animazione\"\n    },\n    \"appearance\": {\n        \"nb_max_pts\": \"Numero di punti\", \n        \"point_size\": \"Dimensione dei punti\",\n\t\t\"min_point_size\": \"Minima dimensione dei punti\",\n        \"point_opacity\": \"Opacità\",\n        \"field_view\": \"Angolo di vista\",\n        \"point_size_type\": \"Metodo di dimensionamento dei punti\",\n        \"point_material\": \"Materiale\",\n        \"elevation_range\": \"Intervallo altimetrico\",\n\t\t\"extra_range\": \"Intervallo scalare\",\n        \"point_quality\": \"Qualità\",\n\t\t\"point_shape\": \"Forma\",\n        \"edl_radius\": \"Raggio\",\n        \"edl_strength\": \"Intensità\",\n\t\t\"edl_opacity\": \"Opacità\",\n        \"edl_enable\": \"Attiva\",\n\t\t\"min_node_size\": \"Min dimensione dei nodi\",\n\t\t\"clip_mode\": \"Modalità di ritaglio\",\n        \"move_speed\": \"Velocità\",\n        \"skybox\": \"Cielo\",\n        \"bottom_lock\": \"Rimani sotto al suolo\",\n        \"box\": \"Box\",\n\t\t\"length_unit\": \"Unità di misura\",\n        \"freeze\": \"Blocca vista\",\n        \"language\": \"Lingua\"\n    },\n\t\"measurements\": {\n\t\t\"clip\": \"ritaglia\",\n\t\t\"show\": \"mostra volume\"\n\t},\n\t\"annotations\": {\n\t\t\"show3D\": \"mostra in 3D\",\n\t\t\"showMap\": \"mostra sulla mappa\"\n\t}, \n    \"profile\": {\n        \"nb_points\": \"Numero di punti\",\n        \"title\": \"Profilo altimetrico\",\n        \"save_las\": \"Salva come LAS(3D)\",\n\t\t\"save_ortho\": \"Salva come CSV(2D)\"\n    },\n\t\"scene\": {\n\t\t\"camera_position\": \"Posizione della camera\",\n\t\t\"camera_target\": \"Obiettivo della camera\"\n\t},\n\t\"filters\": {\n\t\t\"return_number\": \"Numero di ritorno\",\n\t\t\"number_of_returns\": \"Numero di ritorno\",\n\t\t\"gps_min\": \"min\",\n\t\t\"gps_max\": \"max\",\n\t\t\"gps_time\": \"tempo GPS\"\n\t},\n    \"settings\": {\n        \"language\": \"Lingua\"\n    }\n}\n"
  },
  {
    "path": "libs/potree/resources/lang/jp/translation.json",
    "content": "{\n    \"tb\": {\n        \"navigation_opt\": \"ナビゲーション\",\n        \"rendering_opt\": \"外観\",\n        \"tools_opt\": \"ツール\",\n        \"measurments_opt\": \"測定結果\",\n        \"annotations_opt\": \"注釈\",\n        \"materials_opt\": \"材料\",\n        \"scene_opt\": \"シーン\",\n        \"classification_filter_opt\": \"フィルター分類\",\n        \"parameters_opt\": \"その他の設定\",\n        \"about_opt\": \"協力\"\n    },\n    \"tt\": {\n        \"angle_measurement\": \"角度測定\",\n        \"distance_measurement\": \"距離測定\",\n        \"height_measurement\": \"標高測定\",\n        \"area_measurement\": \"面積測定\",\n        \"volume_measurement\": \"体積測定\",\n        \"height_profile\": \"断面図\",\n        \"clip_volume\": \"クリッピングボリューム\",\n        \"remove_all_measurement\": \"計測結果のクリア\",\n        \"left_view_control\": \"左から見る\",\n        \"front_view_control\": \"前から見る\",\n        \"top_view_control\": \"上から見る\",\n        \"focus_control\": \"全体表示\",\n        \"orbit_control\": \" 軌道制御\",\n        \"flight_control\": \"Vol\",\n        \"earth_control\": \"地球\"\n    },\n    \"appearance\": {\n        \"nb_max_pts\": \"表示するポイント数を設定\", \n        \"point_size\": \"点サイズを設定\",\n        \"point_opacity\": \"不透明度\",\n        \"field_view\": \"視野\",\n        \"point_size_type\": \"点タイプ設定\",\n        \"point_material\": \"点の材質\",\n        \"elevation_range\": \"Plage altimétrique\",\n        \"point_quality\": \"品質\",\n        \"edl_radius\": \"点群の半径\",\n        \"edl_strength\": \"点群の強度\",\n        \"edl_enable\": \"アクティブにする\",\n        \"min_node_size\": \"最小ノードサイズ\",\n        \"clip_mode\": \"クリップモード\",\n        \"move_speed\": \"動く速度\",\n        \"skybox\": \"空\",\n        \"bottom_lock\": \"地上面を固定します。\",\n        \"box\": \"ボックス\",\n        \"freeze\": \"ビューの固定\",\n        \"language\": \"言語\"\n    },\n    \"profile\": {\n        \"nb_points\": \"点群番号\",\n        \"title\": \"Profil altimétrique\",\n        \"save_las\": \"LAS(3D)形式で保存\",\n        \"save_ortho\": \"CSV(2D)形式で保存\",\n        \"save\": \"保存\"\n    },\n\t\"scene\": {\n\t\t\"camera_position\": \"Camera Position\",\n\t\t\"camera_target\": \"Camera Target\"\n\t},\n    \"settings\": {\n        \"language\": \"言語\"\n    }\n}\n"
  },
  {
    "path": "libs/potree/resources/lang/se/translation.json",
    "content": "{\n\t\"tb\": {\n\t\t\"navigation_opt\": \"Navigering\",\n\t\t\"rendering_opt\": \"Utseende\",\n\t\t\"tools_opt\": \"Verktyg\",\n\t\t\"measurments_opt\": \"Mätning\",\n\t\t\"clipping_opt\": \"Urklipp\",\n\t\t\"annotations_opt\": \"Annoteringar\",\n\t\t\"materials_opt\": \"Material\",\n\t\t\"scene_opt\": \"Scen\",\n\t\t\"classification_filter_opt\": \"Klassificeringsfilter\",\n\t\t\"filters_opt\": \"Filter\",\n\t\t\"parameters_opt\": \"Andra inställningar\",\n\t\t\"about_opt\": \"Om\"\n\t},\n\t\"tt\": {\n\t\t\"angle_measurement\": \"Vinkelmätning\",\n\t\t\"point_measurement\": \"Punktmätning\",\n\t\t\"distance_measurement\": \"Distansmätning\",\n\t\t\"height_measurement\": \"Höjdmätning\",\n\t\t\"area_measurement\": \"Areamätning\",\n\t\t\"volume_measurement\": \"Volymmätning\",\n\t\t\"height_profile\": \"Höjdprofil\",\n\t\t\"clip_volume\": \"Volymklippning\",\n\t\t\"clip_polygon\": \"Polygonklippning\",\n\t\t\"screen_clip_box\": \"Rita en yta för selektering. Ortogonalt kameraläge krävs!\",\n\t\t\"clip_plane_x\": \"Klippyta på x axel\",\n\t\t\"clip_plane_y\": \"Klippyta på y axel\",\n\t\t\"clip_plane_z\": \"Klippyta på z axel\",\n\t\t\"remove_all_measurement\": \"Ta bort alla mätningar\",\n\t\t\"left_view_control\": \"Vy vänster\",\n\t\t\"right_view_control\": \"Vy höger\",\n\t\t\"front_view_control\": \"Vy fram\",\n\t\t\"back_view_control\": \"Vy bak\",\n\t\t\"top_view_control\": \"Vy ovan\",\n\t\t\"bottom_view_control\": \"Vy under\",\n\t\t\"focus_control\": \"Full utsträckning\",\n\t\t\"orbit_control\": \"Kretsa kontroll\",\n\t\t\"flight_control\": \"Flyga kontroll\",\n\t\t\"heli_control\": \"Helikopter kontroll\",\n\t\t\"earth_control\": \"Earth control\",\n\t\t\"perspective_camera_control\": \"Kamera perspektiv\",\n\t\t\"orthographic_camera_control\": \"Kamera ortogonal\",\n\t\t\"navigation_cube_control\": \"Navigeringskub\",\n\t\t\"remove_all_clipping_volumes\": \"Ta bort alla klippytor\"\n\t},\n\t\"appearance\": {\n\t\t\"nb_max_pts\": \"Punktbudget\",\n\t\t\"point_size\": \"Punktstorlek\",\n\t\t\"point_opacity\": \"Transparens\",\n\t\t\"field_view\": \"Synfält\",\n\t\t\"point_size_type\": \"Punkttyp\",\n\t\t\"point_material\": \"Material\",\n\t\t\"elevation_range\": \"Höjdintervall\",\n\t\t\"point_quality\": \"Kvalitet\",\n\t\t\"point_shape\": \"Form\",\n\t\t\"edl_radius\": \"Radie\",\n\t\t\"edl_strength\": \"Styrka\",\n\t\t\"edl_enable\": \"Aktiverad\",\n\t\t\"min_node_size\": \"Min nodstorlek\",\n\t\t\"clip_mode\": \"Klippläge\",\n\t\t\"move_speed\": \"Hastighet\",\n\t\t\"skybox\": \"Skybox\",\n\t\t\"bottom_lock\": \"Lås över marknivå\",\n\t\t\"box\": \"Box\",\n\t\t\"length_unit\": \"Enhet för längd\",\n\t\t\"freeze\": \"Lås vy\",\n\t\t\"language\": \"Språk\"\n\t},\n\t\"measurements\": {\n\t\t\"clip\": \"klipp\",\n\t\t\"show\": \"visa volym\"\n\t},\n\t\"annotations\": {\n\t\t\"show3D\": \"visa i 3D\",\n\t\t\"showMap\": \"visa på karta\"\n\t},\n\t\"profile\": {\n\t\t\"nb_points\": \"Antal Punkter\",\n\t\t\"title\": \"Höjdprofil\",\n\t\t\"save_las\": \"Spara LAS(3D)\",\n\t\t\"save_ortho\": \"Spara CSV(2D)\"\n\t},\n\t\"scene\": {\n\t\t\"camera_position\": \"Kamera Position\",\n\t\t\"camera_target\": \"Kamera Mål\"\n\t},\n\t\"filters\": {\n\t\t\"return_number\": \"Returnera Antal\",\n\t\t\"number_of_returns\": \"Antal Returneringar\",\n\t\t\"gps_min\": \"min\",\n\t\t\"gps_max\": \"max\",\n\t\t\"gps_time\": \"GPS Tid\"\n\t},\n\t\"settings\": {\n\t\t\"language\": \"Språk\"\n\t}\n}\n"
  },
  {
    "path": "libs/potree/resources/lang/zh/translation.json",
    "content": "{\n\t\"tb\": {\n\t\t\"navigation_opt\": \"导航\",\n\t\t\"rendering_opt\": \"外观\",\n\t\t\"tools_opt\": \"工具\",\n\t\t\"measurments_opt\": \"量测分析\",\n\t\t\"clipping_opt\": \"裁剪\",\n\t\t\"annotations_opt\": \"标注\",\n\t\t\"materials_opt\": \"材质\",\n\t\t\"scene_opt\": \"场景\",\n\t\t\"classification_filter_opt\": \"分类过滤器\",\n\t\t\"filters_opt\": \"过滤器\",\n\t\t\"parameters_opt\": \"其他选项\",\n\t\t\"about_opt\": \"关于\"\n\t},\n\t\"tt\": {\n\t\t\"angle_measurement\": \"角度量测\",\n\t\t\"point_measurement\": \"点量测\",\n\t\t\"distance_measurement\": \"距离量测\",\n\t\t\"height_measurement\": \"高度量测\",\n\t\t\"circle_measurement\": \"环形量测\",\n\t\t\"area_measurement\": \"面积量测\",\n\t\t\"volume_measurement\": \"体积量测\",\n\t\t\"height_profile\": \"高度剖面\",\n\t\t\"annotation\": \"标注\",\n\t\t\"clip_volume\": \"立体裁剪\",\n\t\t\"clip_polygon\": \"多边形裁剪\",\n\t\t\"screen_clip_box\": \"绘制矩形进行裁剪. 需要使用 orthographic 相机模式!\",\n\t\t\"clip_plane_x\": \"在x轴平面裁剪\",\n\t\t\"clip_plane_y\": \"在y轴平面裁剪\",\n\t\t\"clip_plane_z\": \"在z轴平面裁剪\",\n\t\t\"remove_all_measurement\": \"清除量测结果\",\n\t\t\"left_view_control\": \"左视图\",\n\t\t\"right_view_control\": \"右视图\",\n\t\t\"front_view_control\": \"前视图\",\n\t\t\"back_view_control\": \"后视图\",\n\t\t\"top_view_control\": \"俯视图\",\n\t\t\"bottom_view_control\": \"仰视图\",\n\t\t\"focus_control\": \"复位\",\n\t\t\"orbit_control\": \"轨道控制\",\n\t\t\"flight_control\": \"飞行控制\",\n\t\t\"heli_control\": \"直升机控制\",\n\t\t\"earth_control\": \"地球控制\",\n\t\t\"perspective_camera_control\": \"透视相机\",\n\t\t\"orthographic_camera_control\": \"正交相机\",\n\t\t\"navigation_cube_control\": \"导航立方体\",\n\t\t\"remove_all_clipping_volumes\": \"移除裁剪对象\",\n\t\t\"compass\": \"指北针\",\n\t\t\"camera_animation\": \"相机动画\"\n\t},\n\t\"appearance\": {\n\t\t\"nb_max_pts\": \"显示点数\",\n\t\t\"point_size\": \"点尺寸\",\n\t\t\"min_point_size\": \"最小尺寸\",\n\t\t\"point_opacity\": \"透明度\",\n\t\t\"field_view\": \"视野范围\",\n\t\t\"point_size_type\": \"尺寸\",\n\t\t\"point_material\": \"材质\",\n\t\t\"elevation_range\": \"高程范围\",\n\t\t\"extra_range\": \"标量范围\",\n\t\t\"point_quality\": \"质量\",\n\t\t\"point_shape\": \"形状\",\n\t\t\"edl_radius\": \"半径\",\n\t\t\"edl_strength\": \"强度\",\n\t\t\"edl_opacity\": \"透明度\",\n\t\t\"edl_enable\": \"启用\",\n\t\t\"min_node_size\": \"节点尺寸\",\n\t\t\"clip_mode\": \"裁剪模式\",\n\t\t\"move_speed\": \"速度\",\n\t\t\"skybox\": \"天空\",\n\t\t\"bottom_lock\": \"保持高于地面\",\n\t\t\"box\": \"辅助网格\",\n\t\t\"length_unit\": \"长度单位\",\n\t\t\"freeze\": \"锁定\",\n\t\t\"language\": \"语言\",\n\t\t\"backface_culling\": \"剔除背面\"\n\t},\n\t\"measurements\": {\n\t\t\"clip\": \"裁剪\",\n\t\t\"show\": \"显示体积\"\n\t},\n\t\"annotations\": {\n\t\t\"show3D\": \"以3D形式展示\",\n\t\t\"showMap\": \"在地图展示\"\n\t},\n\t\"profile\": {\n\t\t\"nb_points\": \"点云数量\",\n\t\t\"title\": \"高度剖面\",\n\t\t\"save_las\": \"保存 LAS(3D)\",\n\t\t\"save_ortho\": \"保存 CSV(2D)\"\n\t},\n\t\"scene\": {\n\t\t\"camera_position\": \"相机位置\",\n\t\t\"camera_target\": \"相机目标\"\n\t},\n\t\"filters\": {\n\t\t\"return_number\": \"第几次回波\",\n\t\t\"number_of_returns\": \"回波次数\",\n\t\t\"gps_min\": \"最小值\",\n\t\t\"gps_max\": \"最大值\",\n\t\t\"gps_time\": \"GPS 时间\"\n\t},\n\t\"settings\": {\n\t\t\"language\": \"语言\"\n\t}\n}"
  },
  {
    "path": "libs/potree/resources/models/stanford_bunny_reduced.mtl",
    "content": "# Blender MTL File: 'None'\n# Material Count: 1\n\nnewmtl Material.001\nNs 96.078431\nKa 1.000000 1.000000 1.000000\nKd 0.640000 0.352654 0.488547\nKs 0.500000 0.500000 0.500000\nKe 0.000000 0.000000 0.000000\nNi 1.000000\nd 1.000000\nillum 2\nmap_Kd C:\\\\dev\\\\workspaces\\\\potree\\\\develop\\\\resources\\\\textures\\\\brick_pavement.jpg\n"
  },
  {
    "path": "libs/potree/resources/models/stanford_bunny_reduced.obj",
    "content": "# Blender v2.79 (sub 0) OBJ File: ''\n# www.blender.org\nmtllib stanford_bunny_reduced.mtl\no stanford_bunny_reduced\nv -0.026015 0.080404 0.021808\nv -0.032178 0.141946 -0.017212\nv -0.080718 0.120681 0.015666\nv -0.078180 0.060750 -0.026141\nv -0.023129 0.080012 0.024065\nv 0.016493 0.090119 0.016845\nv -0.024836 0.124400 -0.018354\nv 0.045263 0.054182 0.005458\nv -0.071339 0.123541 -0.007453\nv -0.010076 0.093775 0.015159\nv -0.072013 0.122345 0.015820\nv -0.074228 0.130989 -0.029073\nv -0.075178 0.134347 -0.036959\nv -0.077120 0.132986 -0.038342\nv -0.015844 0.082427 0.024197\nv -0.076832 0.102678 0.036875\nv -0.017349 0.078202 0.026462\nv -0.036220 0.138487 -0.013773\nv -0.037684 0.139022 -0.013772\nv -0.091535 0.113026 0.008638\nv 0.008183 0.099347 -0.000081\nv -0.057447 0.009548 0.031515\nv -0.052683 0.011730 0.030505\nv -0.064144 0.129577 -0.034149\nv -0.030386 0.146611 -0.020306\nv -0.025782 0.083289 0.019083\nv 0.003016 0.010207 0.031317\nv -0.024994 0.148076 -0.023777\nv -0.059546 0.124187 -0.007094\nv -0.062224 0.122949 -0.009014\nv -0.034513 0.094390 0.002787\nv -0.042194 0.011280 0.027613\nv 0.007714 0.009971 0.030783\nv -0.031217 0.093039 -0.012478\nv -0.035327 0.061990 -0.038224\nv -0.057122 0.013203 0.029083\nv -0.039599 0.010934 0.026852\nv 0.000378 0.012080 0.031432\nv 0.004023 0.011975 0.031329\nv 0.007312 0.011940 0.030972\nv -0.040046 0.134464 -0.011134\nv -0.014898 0.093990 0.011910\nv -0.034602 0.094878 -0.010601\nv 0.046793 0.036377 0.010525\nv -0.040882 0.012406 0.027183\nv -0.038322 0.011785 0.026448\nv -0.092009 0.084593 0.017443\nv -0.026958 0.012376 0.036457\nv -0.023633 0.013255 0.038175\nv -0.020423 0.013665 0.037882\nv -0.012974 0.012804 0.035281\nv -0.008831 0.013636 0.033194\nv -0.005391 0.013506 0.032504\nv -0.000347 0.013471 0.032427\nv -0.047362 0.084593 0.017130\nv -0.007039 0.077493 0.028597\nv -0.090110 0.119127 0.003268\nv -0.054905 0.014991 0.026879\nv -0.052070 0.014319 0.027469\nv -0.049074 0.013867 0.027012\nv -0.023893 0.015842 0.035933\nv -0.019197 0.015665 0.035376\nv -0.015144 0.015351 0.033983\nv -0.008304 0.014945 0.033139\nv -0.005708 0.016123 0.035088\nv 0.002444 0.014455 0.034435\nv 0.006239 0.014074 0.034319\nv -0.049627 0.016776 0.023271\nv -0.025482 0.016552 0.034391\nv -0.017873 0.017116 0.032665\nv -0.014947 0.016316 0.033158\nv -0.012387 0.015217 0.033343\nv -0.009590 0.016984 0.035394\nv -0.001358 0.015646 0.035095\nv 0.008826 0.015611 0.034622\nv -0.072733 0.090172 0.039093\nv -0.008626 0.091393 0.019304\nv 0.038479 0.013679 0.016466\nv -0.000258 0.081198 0.027382\nv -0.051771 0.016843 0.023013\nv -0.047589 0.016468 0.024304\nv -0.044138 0.015536 0.025409\nv -0.041036 0.016892 0.025119\nv -0.035882 0.016897 0.024405\nv -0.023690 0.017656 0.032421\nv -0.021546 0.017935 0.031552\nv -0.015981 0.017651 0.033002\nv -0.012593 0.018476 0.035911\nv -0.000968 0.019161 0.039297\nv 0.001126 0.017400 0.037173\nv 0.004630 0.019772 0.038833\nv 0.033102 0.013941 0.015778\nv 0.039679 0.016322 0.017633\nv -0.047040 0.019024 0.023134\nv -0.039629 0.020535 0.024763\nv 0.030947 0.086415 0.005823\nv -0.025818 0.019032 0.027875\nv -0.023336 0.018861 0.028942\nv -0.020714 0.018924 0.030864\nv -0.018801 0.018843 0.032267\nv 0.007987 0.019344 0.037129\nv 0.035101 0.017992 0.016865\nv 0.041841 0.018690 0.018190\nv -0.005506 0.097190 0.010870\nv -0.015881 0.128084 -0.024441\nv -0.041123 0.137672 -0.013007\nv -0.063484 0.126716 -0.031102\nv -0.021843 0.020141 0.029724\nv -0.016423 0.021819 0.035836\nv -0.014229 0.020043 0.035335\nv -0.007408 0.019732 0.037607\nv 0.001576 0.021567 0.039047\nv -0.057993 0.121031 0.016651\nv -0.029770 0.022185 0.021725\nv -0.011009 0.023498 0.037815\nv -0.004453 0.021691 0.039402\nv -0.000824 0.021946 0.040486\nv -0.081302 0.092705 0.037405\nv -0.079377 0.095170 0.038703\nv 0.038609 0.076100 -0.011439\nv -0.064378 0.116329 0.023578\nv -0.028631 0.021472 0.021805\nv -0.003069 0.026557 0.039187\nv 0.007259 0.023757 0.038265\nv 0.003524 0.078491 0.027744\nv 0.044730 0.021740 0.018004\nv -0.043426 0.019982 0.024486\nv -0.036284 0.020563 0.023974\nv -0.032805 0.024396 0.023112\nv -0.077332 0.066048 -0.025371\nv -0.006306 0.024218 0.039313\nv 0.001847 0.025517 0.039657\nv 0.006765 0.026127 0.038919\nv -0.018239 0.091088 0.014621\nv -0.036439 0.083116 0.018087\nv 0.038575 0.024036 0.016681\nv -0.080113 0.122514 0.010129\nv -0.044121 0.026333 0.024910\nv -0.038938 0.026411 0.025850\nv -0.012598 0.028243 0.039554\nv -0.009419 0.028020 0.040946\nv 0.000104 0.026242 0.040068\nv 0.009382 0.026588 0.038262\nv 0.008738 0.090688 0.020263\nv 0.047164 0.024037 0.017403\nv -0.042061 0.026903 0.025732\nv -0.034673 0.027254 0.024800\nv -0.028469 0.026978 0.022111\nv -0.026237 0.025612 0.023968\nv -0.005677 0.028794 0.041281\nv -0.001214 0.028431 0.041391\nv 0.002946 0.028002 0.041241\nv 0.005327 0.028688 0.041184\nv 0.041166 0.024422 0.017197\nv 0.046327 0.026611 0.017286\nv -0.011537 0.097435 0.003912\nv 0.003443 0.031518 0.042224\nv -0.094070 0.086786 0.005882\nv -0.075896 0.109283 0.032761\nv 0.041424 0.029039 0.014859\nv 0.049952 0.028556 0.015935\nv 0.015864 0.081927 0.023081\nv -0.062119 0.116379 -0.017854\nv -0.032605 0.030283 0.024259\nv -0.028615 0.030421 0.022931\nv -0.015490 0.029917 0.038683\nv -0.007841 0.031292 0.041631\nv -0.003890 0.030417 0.041396\nv -0.086077 0.089878 -0.017240\nv -0.009319 0.089331 0.021216\nv 0.000784 0.086219 0.024548\nv 0.045665 0.028693 0.016411\nv -0.029162 0.093425 -0.005410\nv -0.051920 0.030301 0.017158\nv -0.041829 0.030178 0.026529\nv -0.036447 0.030854 0.026747\nv -0.027320 0.030068 0.023317\nv -0.013878 0.032931 0.039144\nv -0.013553 0.030350 0.039774\nv -0.001522 0.030980 0.042189\nv 0.009502 0.034754 0.040111\nv -0.092913 0.086539 -0.003437\nv -0.079644 0.090335 0.036342\nv -0.029531 0.060408 -0.039494\nv 0.024190 0.092277 0.004984\nv 0.003438 0.036804 0.041084\nv 0.005943 0.035637 0.040832\nv -0.020881 0.151348 -0.035620\nv -0.062773 0.035630 0.020312\nv -0.025632 0.093514 -0.009512\nv -0.065246 0.124664 -0.023660\nv -0.039544 0.033939 0.027217\nv -0.036517 0.035093 0.027039\nv -0.015813 0.032908 0.038967\nv -0.010211 0.036109 0.040518\nv -0.005873 0.036366 0.041590\nv 0.047838 0.034236 0.013112\nv 0.049131 0.031489 0.014925\nv -0.013081 0.035727 0.039345\nv -0.001719 0.036860 0.042142\nv 0.038378 0.072776 -0.016165\nv 0.007253 0.086492 0.022914\nv 0.043711 0.033239 0.012460\nv -0.078590 0.143190 -0.062477\nv -0.069048 0.130067 -0.026618\nv -0.041895 0.035691 0.026895\nv -0.034391 0.036818 0.026797\nv -0.028950 0.036053 0.024439\nv -0.027387 0.036864 0.025501\nv -0.017027 0.039211 0.040304\nv -0.015155 0.036177 0.040100\nv 0.001028 0.039731 0.042342\nv -0.036213 0.087986 0.015266\nv -0.021437 0.073004 -0.037219\nv -0.034998 0.136464 -0.029436\nv -0.009531 0.059285 -0.050730\nv -0.044848 0.038916 0.027447\nv -0.030929 0.035164 0.024584\nv -0.028125 0.040378 0.026229\nv 0.045169 0.038817 0.007925\nv -0.015440 0.041483 0.040982\nv -0.013634 0.039205 0.040103\nv -0.011636 0.040088 0.041413\nv -0.002897 0.040769 0.044127\nv 0.008376 0.043114 0.041795\nv -0.062041 0.142885 -0.071148\nv -0.005147 0.086868 0.023756\nv -0.085548 0.076878 -0.007887\nv -0.062535 0.116944 -0.022061\nv -0.032032 0.040991 0.026008\nv -0.026709 0.060074 -0.045354\nv -0.088682 0.070900 0.000429\nv 0.002881 0.060748 -0.047116\nv -0.051080 0.041810 0.027757\nv -0.048204 0.040153 0.026365\nv -0.043048 0.042202 0.028195\nv 0.005240 0.092835 0.018287\nv -0.012850 0.043492 0.042335\nv -0.007009 0.040134 0.043560\nv 0.002571 0.042254 0.041781\nv -0.016576 0.085375 0.021879\nv -0.062760 0.134787 -0.058597\nv -0.022739 0.152500 -0.026962\nv -0.058104 0.043435 0.028018\nv -0.046604 0.042533 0.027463\nv -0.039438 0.041185 0.027481\nv 0.000347 0.044365 0.043697\nv -0.002106 0.084806 0.025425\nv -0.019361 0.084074 0.022276\nv 0.026674 0.088516 0.011286\nv -0.035853 0.143915 -0.019765\nv -0.054403 0.042380 0.027203\nv -0.035933 0.040742 0.027548\nv -0.030914 0.045544 0.026444\nv -0.029977 0.041904 0.025799\nv -0.016210 0.045333 0.041799\nv -0.008727 0.043985 0.042839\nv -0.006232 0.047547 0.043097\nv -0.004349 0.043861 0.044252\nv 0.006161 0.042184 0.042185\nv -0.071298 0.107009 0.033050\nv -0.039823 0.141414 -0.018419\nv -0.062612 0.045204 0.027252\nv -0.041367 0.045579 0.028731\nv -0.021394 0.046855 0.040992\nv 0.002219 0.047593 0.042374\nv -0.032970 0.085251 0.017000\nv -0.024718 0.086877 0.016968\nv -0.014058 0.087329 0.021994\nv 0.006125 0.099100 0.004356\nv -0.051592 0.124827 -0.004366\nv -0.026827 0.148127 -0.022081\nv -0.079019 0.123412 0.004150\nv -0.057394 0.046762 0.029303\nv -0.048964 0.045503 0.029378\nv -0.045222 0.046008 0.027604\nv -0.037561 0.046630 0.028082\nv -0.035739 0.045292 0.027371\nv -0.017466 0.048533 0.043021\nv -0.006584 0.085167 0.024477\nv 0.005932 0.082896 0.025508\nv -0.081211 0.116510 0.022809\nv -0.074595 0.120195 0.020168\nv -0.060661 0.048726 0.028620\nv -0.055796 0.049510 0.030399\nv -0.052110 0.047596 0.029375\nv -0.048528 0.049870 0.029520\nv -0.039763 0.048221 0.028384\nv -0.031305 0.047900 0.026655\nv -0.086409 0.119847 0.010735\nv -0.010563 0.046804 0.043459\nv -0.008846 0.048765 0.043569\nv 0.004138 0.046713 0.041372\nv -0.027393 0.085105 0.017309\nv -0.009020 0.084349 0.024990\nv -0.077226 0.092336 0.037952\nv -0.037833 0.135439 -0.012601\nv -0.066893 0.128382 -0.026896\nv -0.027258 0.093013 0.002517\nv -0.054417 0.048950 0.030500\nv -0.051553 0.050603 0.029999\nv -0.046414 0.049454 0.028962\nv -0.043220 0.049511 0.027488\nv -0.039599 0.050812 0.029039\nv -0.036505 0.049452 0.028951\nv -0.033060 0.049399 0.027109\nv -0.030702 0.051363 0.027789\nv -0.014584 0.048481 0.042341\nv -0.006205 0.051528 0.042306\nv -0.002558 0.049195 0.042954\nv -0.022874 0.085776 0.019211\nv -0.046284 0.132276 -0.009418\nv -0.045718 0.088531 0.012860\nv 0.041047 0.068649 0.008919\nv 0.040153 0.074149 0.000759\nv 0.042368 0.068354 -0.013313\nv -0.036918 0.094703 0.003648\nv -0.006183 0.068969 0.029996\nv -0.046565 0.052312 0.030103\nv -0.017866 0.052716 0.043015\nv -0.016079 0.055138 0.042190\nv -0.008656 0.054628 0.042711\nv -0.003357 0.052403 0.042884\nv 0.001915 0.052917 0.042965\nv -0.018149 0.094118 0.008572\nv -0.003037 0.090313 0.021319\nv -0.039354 0.136762 -0.012132\nv -0.068990 0.127065 -0.021452\nv -0.070915 0.125037 -0.016269\nv -0.069864 0.134031 -0.034188\nv -0.063875 0.049421 0.029212\nv -0.058881 0.052041 0.029192\nv -0.049378 0.053383 0.030969\nv -0.041948 0.052647 0.027962\nv -0.034501 0.053269 0.028193\nv -0.012381 0.052885 0.042782\nv 0.004242 0.054446 0.042479\nv 0.030144 0.085737 0.011309\nv -0.042932 0.086058 0.016317\nv -0.025262 0.149765 -0.023608\nv -0.067077 0.051989 0.028971\nv -0.053727 0.053174 0.030899\nv -0.033992 0.054713 0.028122\nv -0.032162 0.053063 0.027411\nv -0.006345 0.097456 -0.013215\nv 0.004877 0.099545 -0.005586\nv 0.007996 0.054908 0.041475\nv 0.021973 0.054037 0.034659\nv -0.027659 0.061514 -0.040450\nv -0.028953 0.059578 -0.041611\nv 0.043275 0.064315 0.007375\nv -0.072505 0.135666 -0.036816\nv -0.033101 0.144819 -0.019255\nv -0.064942 0.056355 0.030362\nv -0.061295 0.056574 0.030972\nv -0.057629 0.053911 0.029723\nv -0.041282 0.055750 0.028007\nv -0.037809 0.054278 0.029435\nv 0.000710 0.057141 0.041694\nv -0.042988 0.132150 -0.009616\nv 0.018389 0.058693 0.033484\nv 0.040481 0.072186 -0.013728\nv -0.017726 0.087560 0.020011\nv -0.087507 0.084417 -0.012359\nv -0.055814 0.119773 0.014911\nv -0.058843 0.057699 0.030444\nv -0.047219 0.056040 0.030379\nv -0.043824 0.053752 0.028950\nv -0.044886 0.058344 0.028415\nv -0.042671 0.057396 0.027999\nv -0.038054 0.058087 0.028928\nv -0.030532 0.054692 0.029005\nv -0.013810 0.056942 0.042350\nv -0.011578 0.056184 0.041926\nv -0.008098 0.057926 0.042534\nv -0.069408 0.091301 0.038562\nv 0.043075 0.067721 0.000098\nv -0.054994 0.056698 0.030353\nv -0.049662 0.055466 0.031082\nv -0.035690 0.057108 0.028693\nv -0.011165 0.060326 0.041583\nv 0.000857 0.099392 0.001795\nv -0.040053 0.082615 0.019584\nv -0.010678 0.132988 -0.031134\nv -0.012126 0.097681 -0.000640\nv -0.055968 0.059892 0.030789\nv -0.053147 0.058151 0.030152\nv -0.051535 0.060054 0.029431\nv -0.048387 0.059510 0.029524\nv -0.034269 0.058790 0.029962\nv -0.029586 0.057197 0.029411\nv -0.015629 0.061503 0.040264\nv -0.004912 0.060700 0.041600\nv -0.079566 0.103854 0.035818\nv 0.022141 0.092938 0.008539\nv -0.075245 0.122724 -0.012459\nv -0.069723 0.058298 0.027492\nv -0.067639 0.061051 0.027901\nv -0.067076 0.057014 0.029528\nv -0.061937 0.061014 0.030494\nv -0.041196 0.061828 0.027571\nv -0.029031 0.059928 0.029529\nv -0.026999 0.061949 0.030436\nv -0.014403 0.060272 0.041300\nv 0.006156 0.058941 0.040072\nv 0.008266 0.062628 0.037262\nv -0.071052 0.086200 0.038791\nv -0.058010 0.115549 0.018189\nv 0.037205 0.077625 0.007965\nv 0.013341 0.090708 0.018601\nv -0.053425 0.062579 0.029207\nv -0.036848 0.061608 0.029512\nv -0.031998 0.062273 0.029968\nv -0.012777 0.096019 0.009045\nv -0.011420 0.062159 0.040627\nv -0.006813 0.063631 0.039787\nv 0.002583 0.062081 0.040109\nv 0.011675 0.060839 0.037698\nv -0.032736 0.143290 -0.017383\nv -0.061874 0.065566 0.028320\nv -0.057307 0.062312 0.030361\nv -0.025808 0.063587 0.029176\nv -0.009042 0.065816 0.037344\nv 0.005444 0.064418 0.037372\nv 0.017289 0.062737 0.033267\nv 0.020963 0.064483 0.032393\nv 0.036077 0.076570 -0.017753\nv -0.041576 0.096684 -0.003318\nv -0.008646 0.097994 -0.006712\nv -0.059226 0.065783 0.028386\nv -0.054612 0.064433 0.028817\nv -0.049066 0.063054 0.030279\nv -0.045740 0.062730 0.028813\nv -0.039756 0.064073 0.027696\nv -0.032831 0.064039 0.029952\nv -0.029113 0.064002 0.030425\nv 0.044863 0.036413 0.010153\nv -0.049306 0.109265 -0.004123\nv -0.003351 0.066095 0.037317\nv -0.000014 0.064569 0.038952\nv 0.008962 0.065582 0.034410\nv 0.013328 0.065407 0.033726\nv -0.075621 0.088995 0.038640\nv -0.031608 0.087339 0.014541\nv -0.077308 0.116330 0.025430\nv -0.077797 0.097112 0.038897\nv -0.067023 0.068954 0.026549\nv -0.052851 0.068206 0.027645\nv -0.046336 0.067315 0.027861\nv -0.037439 0.068118 0.027285\nv -0.035393 0.065850 0.028543\nv -0.022155 0.066333 0.030133\nv -0.010752 0.133472 -0.035047\nv 0.004987 0.065964 0.035673\nv 0.012658 0.067746 0.033397\nv -0.018227 0.095636 -0.008359\nv -0.072013 0.131096 -0.027653\nv -0.056050 0.032576 0.018945\nv 0.016599 0.096409 0.003368\nv -0.064533 0.065701 0.027702\nv -0.041134 0.065397 0.027357\nv -0.035038 0.070937 0.026142\nv -0.032019 0.066895 0.029429\nv -0.028835 0.067477 0.028663\nv -0.026283 0.067905 0.029544\nv -0.010683 0.068499 0.030364\nv -0.089826 0.084901 -0.010034\nv 0.006039 0.067362 0.032925\nv 0.011550 0.069911 0.032798\nv 0.014924 0.070210 0.032152\nv -0.045320 0.129851 -0.008204\nv -0.075472 0.122875 0.012888\nv -0.049771 0.067238 0.028955\nv -0.048145 0.070481 0.026599\nv -0.008966 0.069570 0.029418\nv -0.020888 0.095338 -0.001915\nv 0.002472 0.069424 0.029849\nv 0.007329 0.069912 0.031589\nv -0.040277 0.086878 0.016028\nv -0.003019 0.099093 -0.003652\nv -0.074450 0.069439 0.022729\nv -0.064900 0.069306 0.027363\nv -0.060926 0.069818 0.027574\nv -0.043574 0.068486 0.027640\nv -0.029221 0.071236 0.027319\nv -0.020268 0.070785 0.028758\nv -0.015698 0.071365 0.028446\nv 0.004874 0.070218 0.030011\nv 0.016848 0.071462 0.030663\nv 0.004956 0.088525 0.021420\nv 0.044097 0.059976 0.008072\nv -0.072895 0.113977 0.028745\nv -0.072039 0.072100 0.023167\nv -0.055781 0.068297 0.028579\nv -0.051503 0.071120 0.026378\nv -0.049986 0.073180 0.025128\nv -0.045100 0.071934 0.027002\nv -0.037322 0.073406 0.024060\nv -0.031536 0.070738 0.027377\nv -0.016978 0.070985 0.028986\nv 0.001132 0.071286 0.029178\nv -0.038611 0.090333 0.013099\nv 0.033722 0.082661 0.009015\nv -0.063348 0.120424 -0.022512\nv -0.077306 0.120013 0.019617\nv -0.042384 0.138522 -0.014876\nv -0.074290 0.073180 0.022267\nv -0.057638 0.072518 0.026797\nv -0.040310 0.070857 0.025783\nv -0.022469 0.070182 0.029358\nv -0.014302 0.074552 0.028514\nv -0.010003 0.071465 0.029007\nv -0.002769 0.074647 0.029412\nv 0.011555 0.098367 0.003374\nv -0.037719 0.142220 -0.024597\nv -0.068664 0.074604 0.023262\nv -0.061071 0.073197 0.025946\nv -0.043308 0.074008 0.026151\nv -0.032262 0.075355 0.024498\nv -0.025032 0.072109 0.028015\nv -0.018779 0.074795 0.027635\nv -0.007432 0.074697 0.029454\nv 0.007649 0.074068 0.027044\nv 0.011344 0.073885 0.028769\nv 0.018486 0.076396 0.025253\nv 0.023507 0.073026 0.025234\nv -0.074352 0.094684 0.038307\nv -0.056454 0.081716 0.021161\nv 0.018205 0.095163 0.005267\nv 0.018720 0.093539 0.009857\nv -0.070944 0.076894 0.022942\nv -0.062134 0.078469 0.022682\nv -0.052694 0.075243 0.025054\nv -0.038573 0.077202 0.022411\nv -0.028150 0.076141 0.024624\nv -0.010180 0.078342 0.027998\nv 0.004494 0.073801 0.027431\nv 0.008798 0.076614 0.025786\nv 0.010437 0.075493 0.026206\nv 0.020468 0.075494 0.025395\nv -0.054129 0.081332 0.020700\nv -0.067917 0.076879 0.023067\nv -0.054728 0.075423 0.025106\nv -0.051732 0.077852 0.023081\nv -0.047844 0.076048 0.024862\nv -0.042079 0.078777 0.022522\nv -0.000022 0.075911 0.028417\nv 0.013217 0.080521 0.024136\nv 0.019134 0.078402 0.024065\nv -0.047974 0.080378 0.021220\nv -0.086500 0.088572 -0.016638\nv -0.030759 0.082733 0.019283\nv -0.019605 0.079632 0.025224\nv -0.004900 0.079782 0.027578\nv -0.020263 0.089064 0.016865\nv 0.014402 0.076447 0.026167\nv -0.078001 0.125738 -0.034254\nv 0.041179 0.063475 -0.019684\nv -0.034415 0.141325 -0.015666\nv -0.031443 0.144059 -0.018177\nv -0.092548 0.084823 0.009485\nv -0.033959 0.139850 -0.015802\nv -0.061038 0.081079 0.021749\nv -0.058664 0.079880 0.021631\nv -0.036175 0.078331 0.021807\nv -0.060710 0.099896 -0.022137\nv -0.005637 0.073582 -0.037281\nv 0.027940 0.084322 0.015839\nv -0.029998 0.093329 -0.008709\nv -0.013203 0.004037 0.036155\nv -0.004920 0.006144 0.033656\nv 0.002920 0.006325 0.031493\nv 0.021359 0.008176 0.026867\nv -0.060906 0.115006 0.022528\nv -0.050080 0.003809 0.031545\nv 0.017171 0.006625 0.029007\nv -0.087528 0.106544 -0.006811\nv -0.049712 0.004906 0.031575\nv -0.022513 0.009098 0.039495\nv -0.000379 0.009263 0.032184\nv 0.013640 0.009960 0.030211\nv 0.042779 0.062709 0.010633\nv -0.053924 0.007339 0.032645\nv -0.044979 0.005821 0.030186\nv -0.041706 0.008027 0.028489\nv -0.017471 0.010277 0.037834\nv -0.012307 0.010687 0.035831\nv -0.006681 0.010512 0.034055\nv 0.016998 0.011484 0.029542\nv 0.018310 0.010454 0.029206\nv 0.023953 0.011537 0.025461\nv -0.050847 0.061563 -0.036288\nv -0.045294 0.011309 0.028783\nv 0.044395 0.065006 -0.007379\nv -0.024044 0.137670 -0.026395\nv -0.028055 0.140956 -0.023585\nv 0.013578 0.013785 0.029368\nv 0.016173 0.013938 0.028883\nv 0.026190 0.013256 0.023287\nv 0.028269 0.013286 0.020978\nv 0.030536 0.012295 0.016357\nv -0.069138 0.052663 -0.032038\nv -0.045052 0.062091 -0.036547\nv 0.021013 0.087852 0.018367\nv -0.066213 0.092248 0.035804\nv -0.048504 0.010925 0.029489\nv 0.022965 0.065808 0.031247\nv -0.030968 0.141188 -0.019107\nv 0.010216 0.014251 0.032200\nv 0.010856 0.012747 0.030123\nv 0.019782 0.012793 0.028059\nv 0.023807 0.015758 0.024778\nv 0.048757 0.015581 0.012010\nv 0.051069 0.015158 0.008824\nv -0.014083 0.140580 -0.033289\nv -0.054657 0.115485 0.012529\nv -0.060398 0.119578 0.020159\nv -0.085693 0.068990 -0.013421\nv -0.055175 0.109036 0.015068\nv -0.022377 0.150804 -0.026014\nv 0.031643 0.072677 0.020710\nv 0.021895 0.016446 0.025994\nv -0.017994 0.136285 -0.028611\nv 0.023912 0.082869 0.019628\nv -0.045664 0.123339 -0.006870\nv -0.032421 0.132039 -0.018904\nv -0.019767 0.128971 -0.019690\nv -0.013186 0.137328 -0.031656\nv 0.012124 0.016933 0.032981\nv 0.015353 0.015304 0.029459\nv 0.018408 0.015875 0.027717\nv -0.038253 0.127516 -0.012907\nv -0.012315 0.147379 -0.038202\nv -0.023228 0.149414 -0.025476\nv -0.044833 0.121174 -0.006407\nv 0.011104 0.020857 0.036890\nv 0.017412 0.016772 0.029101\nv 0.029637 0.017119 0.021727\nv 0.046131 0.017173 0.015791\nv -0.055687 0.096150 0.022903\nv 0.034478 0.062523 0.024193\nv -0.043857 0.124833 -0.008871\nv -0.066720 0.102943 0.029690\nv -0.037065 0.128760 -0.014154\nv 0.011020 0.081669 0.024140\nv 0.019966 0.020311 0.031454\nv 0.023359 0.020273 0.027668\nv 0.024737 0.018793 0.025036\nv 0.032303 0.017628 0.018792\nv 0.053615 0.021585 0.012362\nv 0.056723 0.020471 0.007362\nv 0.038240 0.063240 -0.023806\nv -0.065727 0.076482 0.023396\nv 0.015836 0.059596 0.036475\nv 0.024201 0.071090 0.027221\nv -0.041327 0.124271 -0.008352\nv 0.037614 0.066846 -0.024127\nv -0.013491 0.143690 -0.035246\nv 0.015465 0.020687 0.032970\nv 0.027189 0.018784 0.023717\nv 0.046263 0.019838 0.017165\nv 0.051144 0.020268 0.013550\nv 0.056089 0.022633 0.009788\nv -0.054126 0.016965 0.022384\nv 0.025559 0.085375 0.016445\nv -0.040826 0.118238 -0.010437\nv -0.039454 0.124157 -0.008832\nv -0.048310 0.120963 -0.004162\nv 0.025771 0.023117 0.027568\nv 0.034685 0.019658 0.017758\nv 0.030639 0.080906 0.016647\nv -0.056392 0.086595 0.023920\nv -0.075455 0.035030 0.000686\nv -0.034740 0.134091 -0.017935\nv 0.015713 0.024680 0.034543\nv 0.021354 0.024298 0.032646\nv 0.031968 0.024134 0.024170\nv 0.034639 0.022227 0.019578\nv 0.037816 0.024550 0.016957\nv -0.000867 0.071008 0.029551\nv 0.053520 0.024503 0.013897\nv -0.005812 0.070282 0.029179\nv -0.015075 0.131826 -0.025466\nv -0.046054 0.093135 0.010690\nv -0.044546 0.127487 -0.007980\nv -0.012780 0.131439 -0.027041\nv -0.062670 0.105512 0.021525\nv -0.060424 0.104713 0.020418\nv -0.051268 0.096792 0.018564\nv 0.011149 0.023893 0.038072\nv 0.019461 0.023795 0.033718\nv 0.024468 0.024590 0.029332\nv 0.028539 0.025603 0.026825\nv 0.033216 0.028049 0.024882\nv 0.037491 0.060675 0.021362\nv -0.062443 0.090088 0.030082\nv -0.030326 0.136904 -0.022007\nv -0.060753 0.106745 0.019621\nv 0.036350 0.027815 0.021311\nv 0.059069 0.027349 0.007140\nv -0.035282 0.132329 -0.017259\nv -0.068348 0.107362 0.030867\nv 0.007554 0.030114 0.040648\nv 0.018480 0.028714 0.034296\nv 0.027363 0.028113 0.029036\nv -0.048168 0.088725 0.014481\nv -0.034613 0.127252 -0.011828\nv -0.060985 0.136419 -0.073576\nv -0.052549 0.088778 0.020865\nv 0.011668 0.029213 0.037255\nv 0.013216 0.028224 0.036099\nv 0.018445 0.031299 0.034467\nv 0.020937 0.032477 0.032826\nv 0.021767 0.028320 0.033106\nv 0.030441 0.031199 0.026728\nv 0.035985 0.032895 0.023451\nv 0.039463 0.028858 0.016374\nv -0.061020 0.097053 0.025647\nv 0.056766 0.030495 0.011267\nv 0.009933 0.030907 0.039901\nv 0.024603 0.029548 0.030587\nv 0.039497 0.033456 0.018810\nv -0.064035 0.102349 0.024850\nv 0.052222 0.034532 0.012668\nv 0.053059 0.028763 0.014568\nv -0.068032 0.112837 0.028048\nv -0.070020 0.110895 0.030337\nv -0.014571 0.150944 -0.036773\nv 0.034164 0.032340 0.024960\nv 0.055178 0.033943 0.011650\nv -0.025174 0.132110 -0.021954\nv -0.041096 0.126587 -0.011278\nv -0.060034 0.112517 0.021852\nv 0.011716 0.032185 0.038419\nv 0.040692 0.031231 0.014981\nv -0.017636 0.130309 -0.022205\nv -0.089689 0.059207 -0.002180\nv -0.063602 0.113577 0.023760\nv -0.020410 0.147363 -0.030199\nv -0.016744 0.129038 -0.022324\nv -0.065895 0.086121 0.035922\nv 0.014030 0.033750 0.038260\nv 0.021289 0.035811 0.033686\nv 0.024533 0.036234 0.030163\nv 0.027671 0.031448 0.029185\nv 0.029536 0.068303 0.025620\nv -0.023348 0.130345 -0.020427\nv -0.067694 0.087347 0.037771\nv -0.017700 0.127528 -0.022264\nv 0.043174 0.034828 0.012083\nv -0.032661 0.136572 -0.019664\nv -0.062049 0.094641 0.028002\nv -0.029862 0.144670 -0.019243\nv -0.028076 0.146741 -0.020738\nv -0.048341 0.097618 0.013773\nv 0.011248 0.088544 0.020909\nv -0.061196 0.083231 0.023433\nv 0.011520 0.037857 0.039691\nv 0.015769 0.037339 0.037658\nv 0.035742 0.038223 0.023111\nv 0.038648 0.042051 0.019929\nv 0.040882 0.035228 0.015283\nv 0.043308 0.037655 0.011725\nv 0.025947 0.070137 0.026462\nv -0.053345 0.090629 0.022306\nv -0.026015 0.128714 -0.016304\nv -0.020852 0.152259 -0.027944\nv -0.016122 0.152936 -0.034907\nv -0.030843 0.125910 -0.012882\nv -0.063482 0.082314 0.025660\nv 0.022845 0.038510 0.033578\nv 0.027404 0.037987 0.028376\nv 0.032536 0.036702 0.025762\nv -0.003416 0.069047 0.029422\nv -0.014852 0.130180 -0.024499\nv -0.048138 0.093185 0.015389\nv 0.013748 0.041766 0.039482\nv 0.020005 0.037527 0.035060\nv 0.026239 0.041871 0.030396\nv 0.029704 0.038800 0.026965\nv -0.082241 0.045893 0.009798\nv 0.012694 0.083734 0.022541\nv 0.041059 0.072877 -0.009412\nv -0.027258 0.144785 -0.022318\nv 0.027542 0.072551 0.023651\nv 0.016831 0.040820 0.037124\nv 0.029545 0.041590 0.028673\nv -0.050388 0.099432 0.015972\nv -0.051421 0.084013 0.018788\nv 0.027083 0.065103 0.028274\nv -0.029884 0.130272 -0.018142\nv -0.057785 0.095851 0.024839\nv 0.015103 0.044075 0.039277\nv 0.018452 0.043654 0.037890\nv 0.021744 0.042312 0.035323\nv 0.025289 0.042969 0.032526\nv 0.031868 0.044123 0.028015\nv 0.032815 0.041757 0.025959\nv 0.036379 0.042211 0.023458\nv 0.043492 0.043291 0.012127\nv -0.072920 0.143535 -0.067337\nv -0.042717 0.122880 -0.007631\nv -0.049391 0.116106 -0.003380\nv -0.055718 0.106304 0.016632\nv -0.022850 0.125840 -0.018293\nv 0.023735 0.044781 0.034438\nv 0.026977 0.045358 0.031529\nv 0.040946 0.040487 0.016695\nv -0.012572 0.133399 -0.028427\nv -0.035876 0.136016 -0.014829\nv -0.047530 0.125697 -0.005832\nv -0.045830 0.114496 -0.008533\nv -0.015916 0.073036 -0.037054\nv 0.039433 0.073746 0.007576\nv -0.067828 0.099547 0.032559\nv 0.010984 0.043521 0.040383\nv 0.013753 0.046564 0.039807\nv 0.020723 0.048653 0.036392\nv 0.039451 0.049186 0.019784\nv 0.042536 0.045924 0.013675\nv -0.084424 0.078020 -0.010764\nv -0.028358 0.127439 -0.013965\nv 0.040445 0.074209 -0.004053\nv 0.036592 0.071066 0.015970\nv -0.042697 0.126082 -0.010020\nv -0.065503 0.095213 0.033065\nv -0.063974 0.086307 0.032569\nv 0.024660 0.048131 0.034269\nv 0.028193 0.046943 0.030683\nv 0.036116 0.045700 0.023743\nv 0.044284 0.047913 0.010695\nv -0.049463 0.088664 0.017714\nv -0.087250 0.104534 -0.010641\nv -0.025862 0.140068 -0.025748\nv -0.053300 0.103388 0.016191\nv -0.056346 0.091575 0.025297\nv 0.038439 0.068803 -0.022100\nv -0.055635 0.111929 0.016359\nv -0.059079 0.109297 0.018619\nv 0.008680 0.048657 0.040629\nv 0.033395 0.048212 0.027056\nv -0.029519 0.133846 -0.021490\nv -0.066151 0.082657 0.032692\nv -0.063566 0.080234 0.022965\nv -0.035979 0.130085 -0.015752\nv -0.053843 0.110827 0.012246\nv 0.017297 0.047339 0.038690\nv 0.032407 0.051141 0.027595\nv -0.040327 0.128620 -0.012404\nv 0.033144 0.066524 0.023019\nv -0.068516 0.083815 0.036743\nv -0.041464 0.131936 -0.010195\nv -0.068975 0.081821 0.035193\nv -0.035508 0.124613 -0.011033\nv -0.020356 0.132481 -0.024341\nv 0.024255 0.076332 0.023969\nv -0.020241 0.126047 -0.021563\nv 0.005149 0.051425 0.042342\nv 0.009393 0.052143 0.040966\nv 0.016932 0.053893 0.036140\nv 0.026707 0.049890 0.032006\nv 0.035730 0.051140 0.023716\nv 0.041137 0.049099 0.016914\nv 0.030487 0.061866 0.027759\nv 0.027673 0.076306 0.022722\nv -0.068088 0.077953 0.023652\nv -0.060961 0.090002 0.027706\nv -0.063581 0.110408 0.023757\nv -0.018378 0.148468 -0.032363\nv -0.029871 0.121958 -0.018517\nv 0.030026 0.077762 0.019502\nv 0.012788 0.050789 0.038620\nv 0.038521 0.073169 0.011929\nv 0.024653 0.052597 0.033256\nv 0.029390 0.051820 0.028835\nv 0.043175 0.053133 0.013010\nv -0.062351 0.085953 0.027972\nv 0.027912 0.061203 0.029763\nv -0.050006 0.092118 0.017845\nv -0.062907 0.107820 0.022517\nv -0.016555 0.144200 -0.033074\nv -0.035560 0.125897 -0.010630\nv 0.033070 0.056242 0.027822\nv 0.040882 0.053394 0.017365\nv 0.035337 0.068076 0.019638\nv -0.070012 0.094553 0.037519\nv -0.023272 0.135424 -0.025605\nv -0.030945 0.128903 -0.016308\nv -0.039329 0.132539 -0.011855\nv 0.018981 0.084420 0.021372\nv -0.073052 0.097234 0.037422\nv -0.057238 0.101359 0.021421\nv -0.020159 0.127485 -0.019483\nv -0.065142 0.080088 0.024213\nv 0.026185 0.054290 0.032495\nv 0.035522 0.057497 0.024773\nv 0.038507 0.056267 0.020310\nv -0.023238 0.127508 -0.016799\nv 0.021456 0.072515 0.027787\nv -0.069956 0.103506 0.033569\nv -0.042217 0.120837 -0.008168\nv -0.058067 0.118386 0.019005\nv -0.075288 0.100881 0.037478\nv -0.064547 0.078715 0.022895\nv -0.038272 0.130899 -0.014447\nv -0.065079 0.100197 0.027768\nv -0.061126 0.093021 0.027702\nv 0.042052 0.053266 -0.022685\nv -0.064999 0.105472 0.026330\nv -0.057056 0.105416 0.017942\nv 0.009550 0.057264 0.040087\nv 0.012866 0.055890 0.039233\nv 0.014614 0.055445 0.037531\nv -0.056353 0.083088 0.021613\nv 0.022460 0.059036 0.033531\nv 0.028657 0.057626 0.029377\nv -0.023496 0.144834 -0.027466\nv -0.010817 0.134719 -0.031070\nv -0.059616 0.117188 0.021104\nv -0.065625 0.088636 0.036213\nv -0.062409 0.101433 0.023968\nv 0.045613 0.059891 -0.007367\nv -0.052386 0.092276 0.020955\nv -0.045885 0.116113 -0.006963\nv 0.040667 0.057443 0.016301\nv 0.035006 0.078588 0.012563\nv -0.035285 0.121173 -0.013158\nv -0.066541 0.109462 0.028264\nv -0.020188 0.141754 -0.029993\nv 0.028075 0.081276 0.018719\nv -0.093338 0.089373 0.024838\nv -0.027113 0.125654 -0.015171\nv -0.038500 0.125700 -0.009748\nv -0.059956 0.109926 0.020769\nv -0.063896 0.092800 0.032180\nv -0.048680 0.086676 0.016388\nv -0.047950 0.086723 0.015454\nv 0.012333 0.058979 0.038583\nv -0.010944 0.136885 -0.032733\nv 0.025840 0.062393 0.030984\nv -0.070586 0.098279 0.035796\nv -0.055533 0.115174 0.015175\nv -0.046043 0.089649 0.012108\nv -0.060582 0.086326 0.025914\nv -0.052896 0.084845 0.019410\nv -0.066171 0.113128 0.026295\nv 0.020218 0.068527 0.031194\nv 0.021610 0.079920 0.022403\nv 0.038976 0.062251 0.018175\nv -0.061558 0.128111 -0.048377\nv 0.018170 0.002935 -0.025075\nv 0.017798 0.002775 -0.028054\nv 0.021743 0.005723 0.023806\nv 0.042635 0.007784 -0.007409\nv 0.037876 0.006751 -0.012708\nv 0.021440 0.004700 -0.016940\nv 0.021244 0.005064 -0.018569\nv 0.016742 0.003297 -0.030944\nv 0.042853 0.008920 -0.011694\nv 0.039254 0.009116 -0.015848\nv 0.019636 0.005245 -0.024363\nv 0.018683 0.005031 -0.029322\nv 0.015174 0.004395 -0.034775\nv -0.051269 0.107585 -0.013100\nv -0.010414 0.147671 -0.041742\nv -0.064348 0.087647 -0.023374\nv -0.039344 0.060883 -0.037896\nv 0.049049 0.011467 -0.007140\nv 0.022504 0.007931 -0.021587\nv 0.022528 0.010604 -0.025713\nv 0.020895 0.008736 -0.029246\nv 0.017618 0.006608 -0.033816\nv 0.006723 0.089679 -0.027554\nv 0.024165 0.008783 0.023797\nv 0.024934 0.007975 0.020281\nv -0.062226 0.126210 -0.034147\nv -0.009919 0.146931 -0.044095\nv 0.046990 0.011966 -0.012703\nv 0.023360 0.009397 -0.021864\nv 0.020688 0.010528 -0.034208\nv 0.019441 0.011382 -0.036487\nv -0.091124 0.088493 -0.007749\nv -0.009331 0.135930 -0.034358\nv -0.080806 0.075838 -0.018048\nv -0.061237 0.142695 -0.075625\nv -0.034543 0.120085 -0.014894\nv 0.051587 0.012930 -0.000741\nv 0.048671 0.013898 -0.013905\nv 0.025668 0.011946 -0.023039\nv 0.022363 0.011021 -0.028161\nv -0.009098 0.136845 -0.038598\nv 0.040493 0.054244 -0.025840\nv -0.018355 0.004442 0.038149\nv 0.055334 0.017139 0.005171\nv 0.055903 0.017222 0.002879\nv 0.051501 0.013063 -0.004130\nv 0.053898 0.016634 -0.010336\nv 0.049286 0.012765 -0.011364\nv 0.048699 0.016772 -0.017272\nv 0.025909 0.013165 -0.026574\nv 0.022738 0.012063 -0.029282\nv -0.062485 0.130619 -0.064650\nv -0.089975 0.100500 0.019012\nv -0.013568 0.129891 -0.026740\nv 0.056271 0.017217 -0.001979\nv 0.055426 0.017228 -0.007656\nv 0.029061 0.014847 -0.022313\nv 0.027661 0.014643 -0.026855\nv 0.026163 0.014629 -0.030786\nv 0.022383 0.012853 -0.031597\nv -0.061627 0.128074 -0.043029\nv -0.008756 0.138238 -0.038107\nv 0.056001 0.019505 -0.010587\nv -0.049944 0.112711 -0.003765\nv -0.042418 0.115580 -0.012798\nv -0.061929 0.122710 -0.044806\nv 0.057940 0.020446 0.003689\nv 0.053319 0.017866 -0.013350\nv -0.038193 0.001564 -0.044196\nv 0.027415 0.016014 -0.031327\nv 0.057186 0.019380 -0.006812\nv 0.029709 0.018187 -0.028879\nv 0.026827 0.019212 -0.035166\nv -0.006582 0.067879 -0.038695\nv -0.049048 0.103689 -0.010362\nv -0.060791 0.138894 -0.075525\nv -0.008652 0.139904 -0.041152\nv -0.029920 0.073718 -0.036444\nv -0.062334 0.116840 -0.026563\nv 0.039435 0.067679 0.013622\nv 0.058490 0.020923 -0.002672\nv 0.031871 0.019631 -0.024553\nv 0.028699 0.019467 -0.032819\nv -0.053708 0.114100 0.009373\nv -0.061416 0.125148 -0.040873\nv -0.062334 0.119758 -0.026690\nv 0.059045 0.026511 -0.009269\nv 0.052567 0.021985 -0.017091\nv 0.045502 0.058259 -0.010454\nv -0.062312 0.128596 -0.038466\nv -0.094183 0.088166 0.000596\nv -0.063960 0.121930 -0.052608\nv 0.058729 0.024289 0.006365\nv 0.060771 0.027273 -0.003568\nv 0.054618 0.023535 -0.015199\nv 0.031367 0.022534 -0.028880\nv 0.028583 0.022053 -0.033560\nv -0.018544 0.061442 -0.048945\nv -0.065601 0.034226 0.016716\nv 0.041008 0.059393 -0.023595\nv -0.076184 0.117637 -0.024959\nv -0.081078 0.065281 -0.021684\nv 0.044551 0.062497 0.000962\nv 0.060304 0.026625 0.001841\nv 0.054751 0.027704 -0.016394\nv -0.091303 0.085464 0.013416\nv 0.036146 0.022433 -0.021495\nv 0.035324 0.025268 -0.025538\nv 0.029919 0.025464 -0.031813\nv -0.029086 0.003112 0.037223\nv 0.057981 0.027766 -0.012062\nv -0.090821 0.094177 -0.008600\nv 0.037927 0.024596 -0.020281\nv -0.061559 0.137319 -0.069783\nv -0.062099 0.123075 -0.030604\nv -0.062550 0.129965 -0.060408\nv 0.060082 0.029852 -0.007990\nv 0.039387 0.027932 -0.019902\nv 0.037735 0.028741 -0.024887\nv 0.034433 0.026024 -0.027663\nv 0.029631 0.028587 -0.034044\nv 0.025023 0.026027 -0.038610\nv -0.061594 0.125848 -0.037565\nv -0.065740 0.029647 0.007377\nv -0.052411 0.116354 0.005261\nv 0.058594 0.032801 0.008187\nv 0.061038 0.032084 -0.003056\nv -0.086342 0.075485 -0.003650\nv 0.041101 0.031420 -0.018660\nv 0.035278 0.031128 -0.028282\nv 0.032448 0.028597 -0.031828\nv 0.026745 0.028843 -0.037306\nv -0.048305 0.104481 -0.004741\nv -0.052236 0.112573 0.002870\nv 0.060019 0.033823 0.004933\nv 0.060839 0.032802 0.001478\nv 0.029682 0.030226 -0.034272\nv -0.093250 0.095309 -0.001651\nv -0.081412 0.114069 -0.014749\nv -0.062387 0.135069 -0.062380\nv 0.044459 0.058564 -0.015826\nv -0.040234 0.117398 -0.011717\nv 0.044778 0.055118 -0.015953\nv 0.060009 0.036471 -0.003924\nv -0.086563 0.076818 -0.001774\nv 0.037002 0.033855 -0.027662\nv 0.032216 0.032948 -0.033055\nv -0.073057 0.122432 -0.046750\nv -0.071445 0.148552 -0.070933\nv -0.062792 0.138406 -0.064904\nv -0.061621 0.122623 -0.037695\nv 0.058297 0.034664 -0.010413\nv 0.039637 0.031886 -0.022841\nv 0.038793 0.036356 -0.026574\nv 0.034652 0.034584 -0.030484\nv 0.028791 0.033984 -0.034587\nv 0.026471 0.033018 -0.036797\nv -0.092440 0.099101 -0.001696\nv -0.071978 0.115444 -0.043445\nv -0.022427 0.087795 -0.025727\nv -0.008623 0.142573 -0.041917\nv -0.062716 0.132018 -0.047790\nv 0.059802 0.037633 0.000127\nv 0.057887 0.037472 -0.008639\nv 0.042039 0.034888 -0.017926\nv -0.062319 0.114350 -0.021342\nv -0.044018 0.115103 -0.010018\nv -0.061729 0.122320 -0.033615\nv -0.052670 0.105550 0.012494\nv -0.050582 0.104366 -0.013421\nv -0.053159 0.113247 0.007943\nv -0.084201 0.076858 0.010296\nv 0.041832 0.038185 -0.021334\nv 0.036726 0.036729 -0.028638\nv 0.028381 0.037823 -0.037110\nv -0.062181 0.131013 -0.056828\nv -0.047911 0.103968 -0.000771\nv -0.089039 0.105924 0.013817\nv 0.030522 0.036834 -0.034055\nv -0.031110 0.091337 -0.018100\nv -0.089470 0.087692 -0.011471\nv -0.030603 0.122289 -0.016091\nv -0.049484 0.105778 0.003344\nv -0.009590 0.134527 -0.033880\nv -0.076808 0.115963 -0.022032\nv -0.076158 0.081302 -0.019840\nv -0.089945 0.103516 0.008555\nv -0.086889 0.073818 0.003310\nv 0.034031 0.037777 -0.031364\nv 0.032673 0.039448 -0.032669\nv -0.092535 0.089514 0.014354\nv -0.049693 0.107609 -0.009317\nv 0.043441 0.057071 -0.018845\nv -0.088184 0.089248 -0.014316\nv -0.026029 0.057526 -0.049143\nv 0.043681 0.040506 -0.016124\nv -0.092478 0.091083 -0.006106\nv -0.062519 0.127381 -0.055435\nv 0.045391 0.058930 -0.001794\nv -0.083464 0.079626 0.029846\nv -0.086809 0.081328 -0.010697\nv -0.086556 0.068853 -0.010127\nv -0.062002 0.134547 -0.066668\nv -0.090827 0.106146 0.003450\nv 0.046401 0.043972 -0.006374\nv 0.042310 0.043353 -0.020481\nv 0.033651 0.043393 -0.031272\nv -0.090944 0.080641 0.000105\nv -0.092629 0.091852 0.018571\nv -0.012318 0.131084 -0.030455\nv -0.051361 0.116747 0.000225\nv 0.043714 0.067036 -0.004977\nv -0.037361 0.118285 -0.014198\nv -0.058991 0.003463 0.031335\nv -0.052430 0.109679 0.006546\nv 0.045339 0.043002 -0.012731\nv 0.041772 0.045614 -0.021192\nv 0.038392 0.044074 -0.025721\nv 0.036152 0.042438 -0.027839\nv -0.086695 0.075528 -0.000104\nv 0.043907 0.064129 -0.011921\nv -0.053654 0.118592 0.010544\nv 0.041979 0.058140 -0.022764\nv -0.073736 0.112317 -0.024581\nv -0.048376 0.112935 -0.006725\nv 0.046557 0.043852 -0.001688\nv -0.084164 0.064978 -0.017991\nv -0.086435 0.076554 0.003380\nv -0.084111 0.075540 0.010301\nv -0.062230 0.119292 -0.030804\nv -0.048023 0.112430 -0.009128\nv -0.071960 0.130288 -0.056553\nv 0.046026 0.046855 0.005518\nv 0.036723 0.045023 -0.027779\nv 0.033592 0.047280 -0.032704\nv -0.084106 0.068175 -0.017922\nv -0.084482 0.070203 -0.015139\nv -0.089767 0.105512 0.018524\nv -0.009652 0.140024 -0.036864\nv -0.079452 0.062748 -0.024675\nv -0.050984 0.110769 0.002039\nv -0.072770 0.031928 0.002654\nv -0.049405 0.110681 -0.006867\nv 0.046159 0.048633 -0.009344\nv 0.044756 0.046313 -0.015873\nv 0.039033 0.046324 -0.025482\nv -0.069126 0.108961 -0.023091\nv 0.044722 0.053291 0.008924\nv 0.046307 0.050040 -0.004671\nv 0.045390 0.049720 -0.012598\nv 0.043353 0.049047 -0.018402\nv 0.040042 0.050744 -0.026450\nv 0.037929 0.049956 -0.029529\nv -0.089451 0.062913 0.001839\nv -0.087645 0.093653 -0.015131\nv -0.083408 0.110708 -0.011682\nv -0.049212 0.110842 -0.010388\nv -0.050044 0.109128 -0.010857\nv -0.063382 0.124151 -0.027450\nv 0.046138 0.048289 0.001095\nv 0.045837 0.053741 -0.008344\nv 0.044629 0.051632 -0.013488\nv 0.041245 0.048082 -0.022376\nv -0.086906 0.078418 -0.005851\nv -0.093980 0.094640 0.002264\nv -0.062168 0.131561 -0.053751\nv -0.063868 0.135155 -0.052666\nv -0.062428 0.123764 -0.049954\nv -0.063857 0.147456 -0.073468\nv -0.037341 0.095846 -0.009104\nv -0.064970 0.147911 -0.074569\nv -0.062784 0.146167 -0.073665\nv -0.044708 0.096748 -0.012481\nv -0.064066 0.145088 -0.069428\nv -0.067601 0.148630 -0.069704\nv -0.070039 0.149247 -0.070830\nv -0.066053 0.122586 -0.010880\nv -0.032519 0.093075 0.005183\nv -0.017555 0.095837 0.003464\nv -0.067589 0.145874 -0.065858\nv -0.073480 0.148627 -0.068599\nv -0.070905 0.149006 -0.067866\nv -0.042869 0.097028 -0.006622\nv -0.026500 0.090690 0.008720\nv -0.068173 0.124126 0.009287\nv -0.045205 0.135918 -0.012465\nv -0.036920 0.140936 -0.015417\nv -0.046580 0.098636 0.008540\nv -0.085838 0.121087 -0.000812\nv -0.065851 0.122596 -0.018977\nv -0.048593 0.128609 -0.007038\nv -0.066794 0.141455 -0.060577\nv -0.027392 0.088017 0.013822\nv -0.066679 0.131806 -0.032949\nv -0.074042 0.123739 0.009233\nv -0.047253 0.102362 -0.003186\nv -0.070616 0.123894 0.010182\nv -0.030340 0.093250 0.002593\nv 0.050004 0.038136 0.009502\nv -0.012329 0.151703 -0.041061\nv -0.008530 0.067607 0.034339\nv -0.065047 0.141347 -0.063441\nv -0.064793 0.120676 0.019952\nv -0.057873 0.123339 0.000473\nv 0.013210 0.093168 0.016139\nv -0.065410 0.123579 -0.003925\nv -0.045062 0.099078 -0.003983\nv -0.070847 0.145422 -0.062361\nv -0.074185 0.145626 -0.060940\nv -0.073818 0.147852 -0.064745\nv -0.067586 0.122820 -0.013530\nv -0.055826 0.121151 0.012772\nv -0.052391 0.119393 0.000787\nv -0.058172 0.125307 -0.007720\nv 0.015525 0.095358 0.010414\nv -0.014127 0.153061 -0.039811\nv -0.064580 0.137784 -0.058013\nv -0.061118 0.120890 0.018690\nv -0.084284 0.078541 0.012190\nv -0.087349 0.061819 -0.009207\nv -0.043803 0.097581 -0.002130\nv -0.066781 0.131170 -0.072249\nv -0.038936 0.092883 -0.021974\nv 0.009810 0.097880 0.008149\nv -0.071394 0.143424 -0.058372\nv -0.064970 0.122605 0.015019\nv -0.092954 0.086365 0.019699\nv -0.080851 0.111516 -0.015719\nv -0.069305 0.122090 0.016781\nv -0.075599 0.120275 -0.027875\nv -0.087587 0.064080 -0.011235\nv -0.044188 0.094091 0.005257\nv -0.015280 0.154423 -0.038509\nv -0.084033 0.120472 -0.006447\nv -0.065428 0.137562 -0.054366\nv -0.091047 0.081501 -0.003653\nv -0.070394 0.123730 -0.012472\nv -0.091180 0.116331 0.000042\nv -0.087999 0.065823 -0.009353\nv -0.049014 0.094052 -0.021114\nv -0.016684 0.155189 -0.035776\nv -0.068188 0.139514 -0.052978\nv -0.077521 0.142578 -0.057525\nv -0.012765 0.066042 0.035334\nv -0.075404 0.147039 -0.067304\nv -0.086713 0.120949 0.004663\nv -0.045464 0.093912 0.008929\nv -0.050167 0.104713 0.007296\nv -0.024381 0.090156 0.011842\nv 0.000479 0.091801 0.019275\nv -0.043799 0.095166 0.004295\nv -0.012330 0.065212 0.036741\nv -0.018112 0.154061 -0.032168\nv -0.035636 0.095637 -0.005508\nv -0.072350 0.141434 -0.053046\nv -0.084862 0.059583 -0.018634\nv -0.076638 0.061773 -0.027719\nv -0.089001 0.064113 -0.006400\nv -0.092572 0.094327 0.015000\nv -0.031395 0.089880 0.010426\nv -0.088472 0.119392 -0.001964\nv -0.043384 0.092295 0.007809\nv 0.000967 0.066546 0.036345\nv -0.034955 0.090778 0.011379\nv -0.054429 0.121508 0.004722\nv -0.074851 0.142673 -0.055397\nv 0.058168 0.039143 -0.004387\nv 0.055127 0.040812 -0.004779\nv -0.094758 0.091786 0.004945\nv -0.043933 0.134788 -0.010822\nv -0.001251 0.098276 0.007484\nv 0.032798 0.083899 -0.013427\nv -0.073336 0.113731 -0.029131\nv -0.089783 0.066281 0.001307\nv -0.094338 0.089594 0.009533\nv -0.092055 0.083561 0.022431\nv -0.088949 0.095808 -0.010875\nv -0.042860 0.090309 0.011120\nv -0.081797 0.119107 0.017944\nv -0.067087 0.117953 0.023731\nv -0.058346 0.123770 -0.003744\nv -0.055950 0.123781 -0.003166\nv -0.076987 0.079141 -0.019335\nv -0.028613 0.090059 0.008497\nv -0.068186 0.124397 -0.017972\nv -0.021731 0.153036 -0.032682\nv -0.067079 0.124130 0.001527\nv -0.069868 0.139206 -0.048474\nv -0.065270 0.124039 0.008538\nv -0.071900 0.127809 -0.021547\nv -0.073578 0.125376 -0.018276\nv 0.055184 0.041094 0.001313\nv 0.053034 0.040811 -0.006037\nv 0.047795 0.041352 -0.001680\nv -0.029686 0.086513 0.015383\nv -0.004212 0.095105 0.015274\nv -0.086068 0.063925 -0.014378\nv -0.088457 0.060703 -0.006844\nv -0.089494 0.061152 0.006081\nv -0.080493 0.079274 -0.015660\nv -0.068470 0.118946 0.022877\nv -0.030573 0.093811 -0.001371\nv -0.046428 0.100391 0.004890\nv 0.003835 0.067836 0.032145\nv -0.074641 0.140375 -0.050646\nv -0.032986 0.094742 -0.001324\nv -0.049595 0.102129 0.011288\nv -0.054552 0.122456 -0.000910\nv 0.038563 0.077199 -0.005640\nv 0.035462 0.081019 -0.011008\nv 0.023201 0.091928 -0.012244\nv 0.020025 0.093606 -0.013500\nv -0.075348 0.116406 -0.030101\nv -0.092592 0.085330 0.026115\nv -0.061187 0.123791 0.001706\nv -0.045075 0.097621 0.005506\nv -0.020744 0.153607 -0.028889\nv -0.021549 0.153737 -0.029627\nv -0.023856 0.152143 -0.029089\nv -0.065841 0.136327 -0.046884\nv -0.076665 0.138525 -0.048457\nv -0.020656 0.091794 0.010600\nv -0.074792 0.124041 -0.000218\nv 0.057257 0.039962 0.001657\nv 0.007949 0.096907 0.012050\nv -0.038782 0.095905 -0.001105\nv -0.090644 0.102088 -0.003646\nv -0.090801 0.107076 0.006106\nv -0.092276 0.085145 -0.005529\nv -0.074218 0.124289 -0.015822\nv -0.069513 0.137012 -0.041378\nv -0.073287 0.138944 -0.045551\nv -0.072409 0.124165 0.005438\nv -0.000178 0.069235 0.030020\nv 0.052408 0.041561 0.000301\nv -0.013773 0.092047 0.016555\nv -0.056259 0.122186 0.009588\nv -0.084150 0.074457 -0.013227\nv 0.015046 0.087189 0.020633\nv -0.079465 0.122462 -0.005260\nv -0.045181 0.097716 -0.009125\nv 0.019898 0.089658 0.016931\nv -0.025787 0.150765 -0.027181\nv -0.059419 0.122440 0.013041\nv -0.064977 0.133396 -0.040728\nv 0.017977 0.092481 0.012954\nv -0.069614 0.120482 0.020374\nv 0.013606 0.094739 0.013578\nv 0.058085 0.037467 0.005745\nv 0.048566 0.041309 -0.000686\nv -0.038108 0.093192 0.007841\nv -0.076611 0.122703 -0.008682\nv -0.072140 0.123448 -0.010718\nv -0.061698 0.123845 0.007044\nv -0.082943 0.079701 -0.013579\nv -0.000868 0.096967 0.012039\nv -0.024639 0.151014 -0.025029\nv -0.057536 0.123139 0.004741\nv 0.003072 0.098384 0.008490\nv 0.054779 0.040206 0.005360\nv 0.046496 0.042936 0.001491\nv -0.001334 0.067805 0.034437\nv 0.013462 0.097491 -0.009495\nv -0.086584 0.072335 -0.008248\nv -0.087226 0.078193 0.003357\nv -0.030384 0.147178 -0.027019\nv -0.081735 0.122745 0.001495\nv -0.026093 0.150744 -0.025602\nv -0.072339 0.137631 -0.041359\nv -0.062317 0.123263 0.011375\nv -0.005231 0.098467 0.004531\nv 0.047143 0.041427 0.001669\nv -0.005154 0.092078 0.019070\nv -0.056903 0.124895 -0.005513\nv -0.041812 0.094720 0.003544\nv 0.027316 0.089835 -0.008223\nv 0.019508 0.094783 -0.008781\nv -0.074539 0.145920 -0.068091\nv -0.072532 0.146954 -0.070055\nv -0.080465 0.070399 -0.021152\nv -0.060270 0.123676 -0.004384\nv 0.022150 0.089832 0.015127\nv -0.029861 0.148025 -0.024479\nv -0.075409 0.136660 -0.042092\nv -0.054345 0.120316 0.010439\nv 0.053126 0.039042 0.008106\nv 0.047426 0.039869 0.004050\nv 0.046204 0.041718 0.004173\nv -0.078758 0.120786 -0.012358\nv -0.053305 0.124121 -0.003652\nv -0.010121 0.095742 0.011634\nv -0.076041 0.122515 -0.014480\nv -0.043417 0.096249 0.001213\nv 0.036685 0.079554 0.002745\nv 0.033143 0.084590 -0.005106\nv 0.031002 0.086813 -0.007028\nv 0.023593 0.092964 -0.004159\nv -0.075106 0.117827 -0.039632\nv -0.059992 0.124023 -0.009283\nv -0.008510 0.097309 0.008674\nv -0.027366 0.093616 -0.002633\nv -0.051016 0.119475 -0.002161\nv -0.067326 0.134102 -0.037510\nv 0.054888 0.036652 0.010178\nv 0.051216 0.040692 0.005114\nv -0.024103 0.093230 0.003940\nv 0.016898 0.096503 -0.002943\nv 0.001081 0.099012 -0.009923\nv -0.088444 0.069547 0.005298\nv -0.088601 0.069761 -0.004728\nv -0.036167 0.144125 -0.022866\nv -0.028895 0.148277 -0.022177\nv -0.032354 0.146292 -0.022266\nv 0.046526 0.038155 0.007657\nv 0.045430 0.040905 0.006608\nv -0.073844 0.116664 0.025743\nv 0.001756 0.093753 0.017143\nv 0.034108 0.083020 0.003862\nv 0.028015 0.089606 -0.000343\nv 0.019575 0.095181 0.000975\nv 0.013704 0.097863 -0.004561\nv 0.009915 0.098413 -0.010256\nv -0.071459 0.076329 -0.025363\nv -0.071509 0.002743 -0.005656\nv -0.066851 0.003495 0.000233\nv -0.065600 0.004560 0.012222\nv -0.066410 0.004270 0.014501\nv -0.066707 0.005867 0.020005\nv -0.063741 0.005885 0.027507\nv -0.038782 0.004818 0.028579\nv -0.072231 0.004985 -0.006235\nv -0.067753 0.005403 -0.000844\nv -0.064679 0.005667 0.010164\nv -0.065908 0.006197 0.013848\nv -0.066731 0.005587 0.016435\nv -0.066421 0.004606 0.023193\nv -0.060305 0.005233 0.031039\nv -0.057719 0.006729 0.032281\nv -0.084812 0.045744 0.002062\nv -0.039260 0.007098 0.027598\nv -0.036240 0.006541 0.031588\nv -0.033272 0.006907 0.035873\nv -0.030574 0.008009 0.037333\nv -0.028864 0.006596 0.039138\nv -0.025019 0.004671 0.039673\nv -0.058384 0.064180 -0.035240\nv -0.072310 0.004837 -0.010696\nv -0.063719 0.003716 0.003498\nv -0.061461 0.005042 0.005595\nv -0.059587 0.006261 0.005912\nv -0.064162 0.006932 0.011940\nv -0.065499 0.007702 0.014993\nv -0.065240 0.008106 0.017734\nv -0.064354 0.010268 0.023074\nv -0.062125 0.009341 0.028236\nv -0.036747 0.009440 0.030447\nv -0.030023 0.062319 -0.038845\nv -0.050958 0.064341 -0.036874\nv 0.050730 0.038578 -0.010603\nv -0.071015 0.006959 -0.010365\nv -0.072540 0.005907 -0.008539\nv -0.071485 0.007325 -0.006680\nv -0.059564 0.007551 0.004844\nv -0.041791 0.140092 -0.017569\nv -0.035484 0.008932 0.031893\nv -0.033420 0.008793 0.035598\nv -0.024543 0.010035 0.039482\nv -0.080642 0.064484 0.019374\nv -0.085172 0.099826 0.034313\nv -0.071336 0.006966 -0.011506\nv -0.070417 0.008557 -0.010576\nv -0.065585 0.008959 -0.001398\nv -0.061653 0.007221 0.003134\nv -0.076586 0.065353 0.022505\nv -0.055597 0.016077 0.024293\nv -0.033155 0.011524 0.033740\nv -0.027891 0.009413 0.038775\nv -0.074946 0.064447 0.024511\nv -0.069831 0.010335 -0.007663\nv -0.060519 0.012280 0.028067\nv -0.073086 0.116336 -0.044999\nv -0.038150 0.010595 0.027476\nv -0.035518 0.012852 0.029437\nv -0.041207 0.054857 -0.036049\nv -0.067408 0.012482 -0.009330\nv -0.067448 0.012195 -0.007235\nv -0.065821 0.011013 -0.003894\nv -0.063255 0.009650 -0.000251\nv -0.018690 0.044184 0.040779\nv -0.060298 0.013795 0.026236\nv -0.079261 0.053419 0.021246\nv -0.034018 0.011983 0.031482\nv -0.028110 0.014452 0.035255\nv -0.019368 0.066428 0.030006\nv -0.014325 0.067733 0.030057\nv -0.087982 0.106009 0.026387\nv -0.075486 0.131817 -0.032279\nv -0.059167 0.011556 0.000071\nv -0.058348 0.015068 0.025322\nv -0.082014 0.098832 0.037237\nv -0.035979 0.015060 0.025298\nv -0.031279 0.014832 0.030673\nv -0.028062 0.015904 0.033539\nv -0.084428 0.062628 0.015288\nv -0.063891 0.013550 -0.006145\nv -0.058727 0.014908 -0.005535\nv -0.056152 0.014812 -0.002697\nv -0.016549 0.066287 0.031451\nv -0.033230 0.014787 0.029635\nv -0.076061 0.128514 -0.027189\nv -0.049593 0.132856 -0.011562\nv -0.073646 0.041400 0.019338\nv -0.084810 0.111248 0.025847\nv -0.070863 0.068568 0.025208\nv -0.078113 0.135033 -0.044587\nv -0.027277 0.046051 0.032230\nv -0.051929 0.014278 0.001774\nv -0.092336 0.094075 0.024629\nv -0.087634 0.110711 0.022686\nv -0.076414 0.126186 -0.024736\nv -0.090896 0.115923 0.009748\nv -0.081696 0.047128 0.014918\nv -0.087178 0.058785 0.011159\nv -0.022422 0.060278 0.036944\nv -0.058344 0.016124 -0.007798\nv -0.019137 0.050461 0.042948\nv -0.051384 0.018256 0.019306\nv -0.049596 0.018874 0.021415\nv -0.088461 0.057988 0.008299\nv -0.032143 0.019482 0.022935\nv -0.033266 0.017150 0.025761\nv -0.030330 0.017882 0.027935\nv -0.026528 0.017750 0.031425\nv -0.056448 0.027280 0.008056\nv -0.026721 0.056641 0.033985\nv -0.022828 0.063192 0.031779\nv -0.082703 0.090230 0.034794\nv -0.076727 0.129153 -0.030023\nv -0.056134 0.017127 -0.004881\nv -0.087897 0.096366 0.031451\nv -0.030949 0.019153 0.024330\nv -0.028633 0.018925 0.026921\nv -0.050040 0.130556 -0.008910\nv -0.029459 0.053336 0.029929\nv -0.078237 0.050188 0.021023\nv -0.053612 0.021320 -0.003602\nv -0.051334 0.017216 -0.000277\nv -0.041023 0.135797 -0.025505\nv -0.050891 0.020000 0.018191\nv -0.028552 0.020191 0.022883\nv -0.026035 0.020115 0.025065\nv -0.084123 0.073788 0.011328\nv -0.027573 0.051029 0.034328\nv -0.046999 0.135965 -0.014302\nv -0.050177 0.021315 0.000447\nv -0.076071 0.123433 -0.019183\nv -0.047577 0.021439 0.022325\nv -0.090046 0.086773 0.030956\nv -0.027298 0.022117 0.022515\nv -0.026413 0.060712 0.030865\nv -0.043365 0.059009 -0.037224\nv -0.050828 0.022266 0.004221\nv -0.049212 0.023672 0.020000\nv -0.024059 0.020182 0.027022\nv -0.021935 0.022487 0.030330\nv -0.019057 0.020934 0.033189\nv -0.051173 0.023613 0.000748\nv -0.052026 0.023938 0.004106\nv -0.052121 0.024423 0.006484\nv -0.092411 0.088055 0.028065\nv -0.090653 0.113217 0.012411\nv -0.013661 0.025199 0.036998\nv -0.072517 0.048345 0.024479\nv -0.054594 0.025442 0.005466\nv -0.052769 0.025545 0.007474\nv -0.053000 0.027344 0.011391\nv -0.049890 0.029062 0.019416\nv -0.019285 0.025733 0.034337\nv -0.081823 0.076838 0.013803\nv -0.086236 0.097553 0.034117\nv -0.074528 0.117300 -0.043793\nv -0.083868 0.057050 0.015092\nv -0.077773 0.141007 -0.055151\nv -0.086767 0.069633 0.009697\nv -0.082802 0.051051 0.015883\nv -0.054021 0.027230 0.009504\nv -0.052562 0.028755 0.014507\nv -0.050923 0.026481 0.017189\nv -0.045408 0.028577 0.024314\nv -0.070165 0.063400 0.027553\nv -0.024028 0.026158 0.027310\nv -0.022465 0.030712 0.030048\nv -0.017173 0.028076 0.037111\nv -0.082366 0.095968 0.037502\nv -0.057352 0.029449 0.011892\nv -0.054101 0.028622 0.012297\nv -0.076415 0.146867 -0.065098\nv -0.089198 0.083249 0.029965\nv -0.085037 0.116031 0.019794\nv -0.012831 0.068882 0.029265\nv -0.078113 0.138494 -0.051059\nv -0.080889 0.073414 0.015725\nv -0.051921 0.017136 0.020812\nv -0.090060 0.090263 0.031202\nv -0.077512 0.055775 0.023426\nv -0.048372 0.031730 0.021826\nv -0.078557 0.083600 -0.019444\nv -0.085947 0.092337 0.034033\nv -0.018904 0.062151 0.037905\nv -0.085570 0.066202 0.013285\nv -0.029812 0.046917 0.028034\nv -0.075928 0.082708 -0.020052\nv 0.004609 0.077130 -0.034844\nv -0.022702 0.064360 0.030495\nv -0.019543 0.065486 0.030694\nv -0.081907 0.084312 -0.017406\nv -0.017122 0.064301 0.036310\nv -0.017820 0.066914 0.029581\nv -0.078458 0.085649 0.036318\nv -0.076673 0.072625 0.020267\nv -0.025158 0.055579 0.037172\nv -0.025803 0.040805 0.030451\nv -0.054098 0.128398 -0.008443\nv -0.044133 0.119866 -0.020941\nv -0.067129 0.070384 -0.030229\nv -0.054216 0.057645 -0.036969\nv -0.073235 0.117705 -0.051388\nv -0.085348 0.106855 0.029417\nv -0.021319 0.062456 0.035324\nv -0.026193 0.032788 0.025349\nv -0.019144 0.031106 0.035645\nv -0.081739 0.106121 0.033154\nv -0.077608 0.144682 -0.061127\nv -0.024557 0.050244 0.039826\nv -0.078402 0.113712 0.028270\nv -0.049665 0.058197 -0.036297\nv -0.045285 0.034340 0.025203\nv -0.083202 0.085206 0.034443\nv -0.038418 0.128711 -0.027252\nv -0.086717 0.102275 0.030904\nv -0.023041 0.035135 0.032149\nv -0.074335 0.127147 -0.022559\nv -0.028517 0.004496 0.038966\nv -0.080384 0.083911 0.033658\nv -0.086112 0.088045 0.034234\nv -0.023731 0.040914 0.034502\nv -0.064808 0.102293 -0.022646\nv -0.020122 0.058041 0.040120\nv -0.087829 0.114839 0.016609\nv -0.058283 0.056005 -0.035677\nv -0.022871 0.042833 0.037612\nv -0.071888 0.083428 -0.022260\nv -0.067886 0.060104 -0.031244\nv -0.080808 0.086401 0.034305\nv -0.022693 0.053563 0.040729\nv -0.081172 0.059383 0.018765\nv -0.088490 0.064791 0.008404\nv -0.072730 0.059776 0.026838\nv -0.039859 0.071839 -0.035015\nv -0.039739 0.076115 -0.034286\nv -0.090072 0.097421 0.027293\nv -0.024731 0.046663 0.038424\nv -0.085785 0.117328 0.016945\nv -0.076719 0.131328 -0.034023\nv -0.019846 0.036270 0.037903\nv -0.020978 0.039795 0.037903\nv -0.027944 0.043421 0.029224\nv -0.070739 0.053846 0.027110\nv -0.091694 0.092058 0.028585\nv -0.028984 0.049540 0.030816\nv -0.023566 0.060945 0.034578\nv -0.044638 0.003665 -0.037919\nv -0.045649 0.003111 -0.036507\nv -0.092452 0.098673 0.010931\nv -0.061763 0.006542 0.009138\nv -0.071366 0.136896 -0.063480\nv -0.040366 0.141143 -0.022177\nv -0.077929 0.145223 -0.064586\nv -0.044910 0.006242 -0.036875\nv -0.045642 0.006150 -0.035229\nv -0.047421 0.005545 -0.028961\nv -0.086623 0.095459 -0.016108\nv -0.059202 0.008608 0.006614\nv -0.061418 0.008229 0.008602\nv -0.063955 0.008243 0.011632\nv -0.065234 0.008646 0.014768\nv -0.078042 0.134186 -0.051508\nv -0.067562 0.135824 -0.070424\nv -0.077607 0.143597 -0.064428\nv -0.076638 0.145005 -0.066306\nv -0.042205 0.005830 -0.041335\nv -0.046255 0.005860 -0.032390\nv -0.070102 0.008699 -0.014128\nv -0.063470 0.009848 0.012279\nv -0.078424 0.130040 -0.039777\nv -0.087845 0.097778 -0.012756\nv -0.092644 0.082977 0.000058\nv -0.042966 0.006527 -0.039848\nv -0.043296 0.010802 -0.034521\nv -0.043915 0.010208 -0.032093\nv -0.046729 0.008941 -0.026828\nv -0.065178 0.011795 -0.015813\nv -0.069091 0.010940 -0.012380\nv -0.074552 0.121565 -0.034812\nv -0.075021 0.119145 -0.041245\nv -0.057305 0.009759 0.003904\nv -0.057773 0.009108 0.005318\nv -0.064874 0.010880 0.019332\nv -0.048118 0.135521 -0.016606\nv -0.060322 0.012694 -0.018474\nv -0.067432 0.012295 -0.012112\nv -0.093044 0.099196 0.004858\nv -0.075845 0.118389 -0.022730\nv -0.054061 0.011489 0.003761\nv -0.060846 0.012722 0.013622\nv -0.092256 0.100183 0.002859\nv -0.074632 0.132346 -0.052145\nv -0.041580 0.009154 -0.038070\nv -0.064678 0.062170 -0.033084\nv -0.054601 0.011350 0.005963\nv -0.054046 0.014543 0.009739\nv -0.060415 0.011267 0.011088\nv -0.063114 0.012901 0.017714\nv -0.062504 0.013203 0.022945\nv -0.079137 0.134491 -0.050132\nv -0.077592 0.126349 -0.037129\nv -0.089703 0.082438 -0.008483\nv -0.038101 0.013473 -0.037813\nv -0.041482 0.011902 -0.036832\nv -0.043755 0.012410 -0.028764\nv -0.056592 0.015087 -0.018692\nv -0.059367 0.014216 -0.016547\nv -0.061161 0.014894 -0.012605\nv -0.065247 0.013823 -0.009496\nv -0.061060 0.015103 -0.008457\nv -0.051568 0.013784 0.003555\nv -0.057125 0.015326 0.015656\nv -0.057939 0.015657 0.018376\nv -0.060350 0.014947 0.021904\nv -0.052614 0.130978 -0.015380\nv -0.041207 0.014138 -0.031106\nv -0.042019 0.015112 -0.026941\nv -0.040485 0.065679 -0.036491\nv 0.017274 0.080826 -0.030271\nv -0.057742 0.015878 -0.015776\nv -0.058790 0.016044 -0.011666\nv -0.076589 0.123075 -0.021333\nv -0.050199 0.016233 0.002650\nv -0.050482 0.016387 0.004311\nv -0.052475 0.013454 0.006026\nv -0.055053 0.015511 0.013386\nv -0.055358 0.016692 0.021727\nv -0.073687 0.141200 -0.064191\nv -0.039931 0.013774 -0.035686\nv -0.072062 0.117690 -0.055080\nv -0.092100 0.082149 0.004399\nv -0.091483 0.113724 0.003102\nv -0.053387 0.015664 0.010587\nv -0.053712 0.016925 0.014557\nv -0.053742 0.016915 0.018480\nv -0.052878 0.016910 0.020083\nv -0.073293 0.131117 -0.053174\nv -0.031023 0.015999 -0.038303\nv -0.034445 0.016096 -0.033747\nv -0.057251 0.018151 -0.014718\nv -0.057315 0.020263 -0.011985\nv -0.052045 0.018111 0.008564\nv -0.052446 0.018873 0.012320\nv -0.079908 0.108438 -0.018378\nv -0.050622 0.132991 -0.015016\nv -0.078956 0.132786 -0.045483\nv -0.082440 0.076333 -0.014756\nv -0.025849 0.088873 -0.023146\nv -0.030530 0.017290 -0.035226\nv -0.032033 0.017520 -0.033209\nv -0.031901 0.017482 -0.031882\nv -0.034156 0.017538 -0.028193\nv 0.034172 0.078697 -0.019485\nv -0.055296 0.017733 -0.018704\nv -0.072885 0.110450 -0.022918\nv -0.052211 0.018638 0.016062\nv -0.081716 0.105504 -0.016314\nv -0.031878 0.076618 -0.033393\nv -0.026520 0.017221 -0.040272\nv -0.028620 0.017505 -0.037796\nv -0.029689 0.018559 -0.034631\nv -0.030709 0.018724 -0.031381\nv -0.072710 0.119100 -0.054699\nv -0.051853 0.022976 0.013866\nv -0.030215 0.020417 -0.032049\nv -0.030743 0.020350 -0.029319\nv -0.031774 0.019131 -0.027337\nv -0.055890 0.021404 -0.006844\nv -0.049952 0.021583 0.001843\nv -0.051340 0.021779 0.006868\nv -0.052168 0.023788 0.010993\nv -0.072352 0.123801 -0.049907\nv -0.077836 0.141695 -0.062068\nv -0.068413 0.145582 -0.073105\nv -0.029701 0.021860 -0.035718\nv -0.054647 0.023230 -0.019537\nv -0.056931 0.023336 -0.014012\nv -0.056707 0.023811 -0.008388\nv -0.054316 0.023801 -0.003920\nv -0.091906 0.098429 -0.004781\nv -0.025612 0.022210 -0.042351\nv -0.027703 0.020620 -0.039234\nv -0.030782 0.023538 -0.030250\nv -0.057474 0.025796 -0.012885\nv -0.059144 0.026434 -0.008586\nv -0.056314 0.025121 -0.004033\nv -0.088814 0.105286 -0.003575\nv -0.078768 0.136619 -0.054690\nv -0.074385 0.117661 -0.045749\nv -0.020547 0.148159 -0.037054\nv -0.031883 0.024960 -0.027557\nv -0.056722 0.028761 -0.018315\nv -0.057232 0.027647 -0.016409\nv -0.090381 0.103384 0.000271\nv -0.079376 0.136177 -0.052555\nv -0.091637 0.097051 0.017252\nv -0.071731 0.120364 -0.058801\nv -0.078499 0.140475 -0.060181\nv -0.045866 0.134574 -0.021624\nv -0.023642 0.148572 -0.033853\nv -0.026912 0.024963 -0.042009\nv -0.028886 0.025607 -0.037586\nv -0.030952 0.026081 -0.032382\nv -0.088769 0.104692 0.011891\nv 0.006567 0.072752 -0.035722\nv -0.074052 0.138591 -0.060838\nv -0.078795 0.141360 -0.058295\nv -0.078971 0.140757 -0.059119\nv -0.024048 0.150819 -0.031570\nv -0.025131 0.024059 -0.043774\nv -0.032098 0.027748 -0.029531\nv -0.039186 0.003426 -0.043888\nv -0.004121 0.079485 -0.035300\nv -0.065463 0.030077 -0.016418\nv -0.042787 0.063523 -0.037040\nv -0.060181 0.061360 -0.033814\nv -0.056961 0.061986 -0.036130\nv -0.090101 0.107584 0.000050\nv -0.063061 0.134319 -0.075235\nv -0.077512 0.125457 -0.028655\nv -0.044307 0.138584 -0.019125\nv -0.018798 0.135337 -0.034085\nv -0.068220 0.126778 -0.069442\nv -0.026014 0.028126 -0.045265\nv -0.029636 0.030681 -0.038737\nv -0.033207 0.028778 -0.029173\nv -0.070583 0.058726 -0.030917\nv -0.040396 0.139564 -0.024202\nv -0.043695 0.138529 -0.021076\nv -0.090107 0.100547 0.022849\nv -0.040128 0.141625 -0.020623\nv -0.027246 0.090039 -0.021205\nv -0.033239 0.030483 -0.028938\nv -0.019791 0.002526 -0.042201\nv -0.068886 0.032225 -0.016024\nv -0.061079 0.057172 -0.033766\nv -0.074510 0.119170 -0.044441\nv -0.051264 0.083245 -0.030372\nv -0.038936 0.090571 -0.025164\nv -0.079311 0.138087 -0.055683\nv -0.057213 0.127163 -0.011237\nv -0.028399 0.029946 -0.042819\nv -0.030215 0.028371 -0.035769\nv -0.032263 0.030644 -0.032342\nv 0.033895 0.063322 -0.028467\nv -0.071079 0.033373 -0.014402\nv -0.074133 0.034944 -0.013044\nv -0.035945 0.056086 -0.038758\nv -0.052996 0.129153 -0.016674\nv -0.091230 0.096933 0.023674\nv -0.070516 0.141104 -0.067958\nv -0.089046 0.107410 0.022865\nv -0.084612 0.102005 -0.015064\nv -0.028224 0.034882 -0.044868\nv -0.029914 0.032850 -0.042190\nv -0.032471 0.033220 -0.033388\nv 0.044144 0.036973 -0.013791\nv -0.048411 0.069316 -0.036246\nv -0.060712 0.090485 -0.023344\nv -0.089291 0.100816 -0.010612\nv -0.073915 0.119143 -0.047909\nv -0.078950 0.139261 -0.054766\nv -0.070489 0.133026 -0.062837\nv -0.018127 0.150212 -0.039082\nv -0.030984 0.033850 -0.039302\nv -0.071013 0.037018 -0.019714\nv -0.072536 0.037356 -0.017660\nv -0.075149 0.037731 -0.015204\nv -0.078337 0.116643 -0.016989\nv -0.077452 0.118082 -0.019840\nv -0.078298 0.138503 -0.057840\nv -0.075095 0.137989 -0.059275\nv -0.027335 0.148207 -0.029827\nv -0.045684 0.084691 -0.030113\nv -0.025108 0.032550 -0.047453\nv -0.030367 0.037012 -0.043010\nv -0.031469 0.033922 -0.036392\nv -0.045120 0.092873 -0.023508\nv -0.015026 0.076207 -0.035212\nv -0.073093 0.038858 -0.021297\nv -0.075098 0.039155 -0.019652\nv -0.077120 0.038751 -0.012722\nv -0.080952 0.039822 0.000315\nv 0.010772 0.056371 -0.045775\nv -0.089789 0.102468 -0.007928\nv -0.077558 0.128878 -0.032986\nv -0.077764 0.040161 -0.017213\nv -0.078173 0.040505 -0.014046\nv -0.073708 0.115794 -0.034595\nv -0.046617 0.136347 -0.019326\nv -0.075270 0.127485 -0.042563\nv -0.069204 0.137436 -0.067837\nv -0.086397 0.118917 -0.005689\nv -0.035338 0.039889 -0.032754\nv 0.017043 0.093716 -0.016290\nv -0.078601 0.041332 -0.018414\nv -0.081076 0.044287 -0.016658\nv -0.081754 0.044275 -0.014088\nv -0.081833 0.041449 -0.007279\nv -0.082581 0.043865 -0.002981\nv -0.082048 0.043010 0.001357\nv -0.080954 0.042495 0.004980\nv -0.089309 0.114247 -0.004351\nv -0.084927 0.113277 -0.008343\nv -0.070798 0.122180 -0.061832\nv -0.090795 0.102759 0.005150\nv -0.070938 0.126287 -0.058367\nv -0.073735 0.122651 -0.040519\nv -0.075130 0.130425 -0.048254\nv -0.031971 0.037540 -0.038609\nv -0.083832 0.044311 -0.007261\nv -0.068987 0.100345 -0.023125\nv -0.083705 0.118388 -0.010516\nv -0.090764 0.118187 0.001083\nv 0.026497 0.057776 -0.037116\nv -0.044955 0.057322 -0.036705\nv -0.053796 0.130052 -0.011617\nv -0.022356 0.004899 0.039463\nv -0.076974 0.120545 -0.022222\nv -0.094247 0.094742 0.007774\nv -0.000581 0.078999 -0.034542\nv -0.027534 0.039839 -0.049507\nv -0.029666 0.038593 -0.045745\nv -0.031847 0.042684 -0.043606\nv -0.033628 0.044432 -0.041808\nv -0.033550 0.042358 -0.040044\nv -0.033591 0.040589 -0.036986\nv 0.022828 0.069836 -0.034275\nv -0.084156 0.046119 -0.010743\nv -0.085580 0.046811 -0.001489\nv 0.007925 0.075394 -0.034698\nv -0.072547 0.111855 -0.027743\nv -0.074702 0.134767 -0.055408\nv -0.078199 0.128803 -0.040531\nv -0.032241 0.045256 -0.045663\nv -0.034430 0.044889 -0.038308\nv -0.075676 0.048583 -0.025899\nv -0.080700 0.047920 -0.019742\nv -0.082471 0.048550 -0.016384\nv -0.085907 0.047587 -0.004178\nv -0.086713 0.048904 -0.000675\nv -0.084075 0.048764 0.008162\nv -0.089739 0.102011 0.015327\nv -0.075099 0.110803 -0.020783\nv -0.076460 0.112745 -0.019500\nv -0.080223 0.118681 -0.013668\nv -0.075871 0.119172 -0.034349\nv -0.073815 0.128142 -0.047433\nv -0.073259 0.134957 -0.057563\nv -0.030622 0.044250 -0.047999\nv -0.034749 0.045352 -0.035806\nv -0.062024 0.143268 -0.076267\nv -0.082590 0.050381 -0.018907\nv -0.084183 0.049419 -0.011798\nv -0.086059 0.048277 -0.006555\nv -0.089856 0.117339 -0.002547\nv -0.077556 0.113780 -0.018430\nv -0.077863 0.120533 -0.015177\nv -0.077117 0.121970 -0.025579\nv 0.007185 0.082029 -0.033392\nv -0.034694 0.047663 -0.038069\nv -0.079244 0.051139 -0.024083\nv -0.080661 0.051612 -0.021652\nv -0.082346 0.051784 -0.019924\nv -0.086186 0.051126 -0.008290\nv -0.086598 0.052186 -0.005477\nv -0.086881 0.052149 -0.002145\nv -0.086191 0.047879 0.001948\nv -0.085719 0.051191 0.006577\nv -0.085077 0.053657 0.011640\nv -0.084072 0.049233 0.011822\nv -0.091464 0.108956 0.005870\nv -0.088638 0.112505 0.017206\nv 0.030420 0.084470 -0.017020\nv -0.074911 0.121906 -0.033198\nv -0.049022 0.133702 -0.018521\nv -0.073406 0.125480 -0.044775\nv -0.031469 0.047976 -0.046553\nv -0.032746 0.044857 -0.043049\nv -0.076789 0.051527 -0.026761\nv -0.086263 0.052247 -0.012102\nv -0.086675 0.052184 0.002838\nv -0.086371 0.053246 0.008563\nv -0.055972 0.127833 -0.013200\nv -0.033411 0.074288 -0.034851\nv -0.089239 0.118837 0.007760\nv -0.069526 0.124201 -0.065803\nv -0.074928 0.120726 -0.030934\nv 0.030658 0.055373 -0.034640\nv -0.088511 0.054264 -0.002556\nv -0.089032 0.056286 0.004235\nv -0.091554 0.112298 0.006181\nv -0.091920 0.110513 0.002266\nv -0.089485 0.108091 0.019575\nv -0.075092 0.112414 -0.021421\nv -0.086295 0.116293 -0.007180\nv -0.078764 0.133071 -0.048670\nv -0.028533 0.052381 -0.049868\nv -0.032628 0.050599 -0.043900\nv -0.033737 0.051197 -0.039848\nv 0.026768 0.086872 -0.018219\nv -0.075180 0.052336 -0.028991\nv -0.077748 0.055790 -0.026474\nv -0.084719 0.052057 -0.016883\nv -0.086953 0.054577 -0.012831\nv -0.088054 0.053989 -0.009513\nv -0.088783 0.055694 -0.005710\nv -0.088174 0.054898 0.000370\nv -0.091054 0.108975 0.000689\nv -0.090042 0.112155 -0.000962\nv -0.074778 0.123661 -0.036328\nv -0.091691 0.116298 0.004963\nv -0.085917 0.107183 -0.012009\nv -0.030951 0.052141 -0.045509\nv -0.034022 0.145101 -0.025282\nv -0.082538 0.056112 -0.020692\nv -0.084852 0.056330 -0.017528\nv -0.087425 0.110667 -0.004577\nv -0.077335 0.122832 -0.030045\nv -0.078310 0.130669 -0.044467\nv -0.065000 0.135384 -0.074686\nv -0.071823 0.123955 -0.054004\nv -0.075357 0.119251 -0.026553\nv -0.032593 0.053942 -0.040370\nv -0.087563 0.078259 -0.000919\nv -0.085726 0.057815 -0.014673\nv -0.087644 0.057109 -0.011378\nv -0.088659 0.057016 -0.008238\nv -0.089809 0.107476 0.009521\nv -0.075799 0.117833 -0.033715\nv -0.078845 0.136453 -0.049398\nv -0.083211 0.082227 -0.015779\nv -0.069620 0.128988 -0.064437\nv -0.075599 0.077040 -0.022522\nv -0.029311 0.056067 -0.046454\nv -0.031401 0.055548 -0.041290\nv -0.074605 0.055820 -0.029592\nv -0.080511 0.056268 -0.022627\nv -0.083478 0.058346 -0.020539\nv -0.086047 0.060321 -0.012427\nv -0.087131 0.060437 -0.010578\nv -0.089826 0.058723 0.000305\nv -0.082396 0.115710 -0.012191\nv -0.091043 0.110270 0.012122\nv -0.085581 0.110828 -0.007451\nv -0.089693 0.109288 0.015681\nv -0.083246 0.113185 -0.011881\nv -0.076098 0.116280 -0.025726\nv -0.077773 0.118911 -0.017749\nv -0.077104 0.123891 -0.033626\nv -0.076195 0.118214 -0.029879\nv -0.074231 0.125119 -0.040752\nv -0.085421 0.084842 -0.014931\nv -0.083683 0.106513 -0.014112\nv -0.082337 0.061931 -0.021412\nv -0.031346 0.082467 -0.030927\nv -0.012360 0.066895 -0.039430\nv 0.056585 0.036642 -0.011282\nv 0.000500 0.084565 -0.032022\nv 0.015166 0.090169 -0.023738\nv -0.019076 0.154745 -0.032048\nv 0.037263 0.054745 -0.030432\nv -0.015598 0.070765 -0.037885\nv -0.019300 0.154726 -0.034452\nv 0.007177 0.086427 -0.030080\nv 0.010087 0.080068 -0.033613\nv -0.006782 0.082614 -0.031837\nv 0.048400 0.039500 -0.008680\nv -0.029901 0.145170 -0.029850\nv -0.017478 0.153707 -0.038080\nv -0.043156 0.080832 -0.031030\nv 0.003053 0.066832 -0.038179\nv 0.004836 0.091266 -0.024953\nv 0.056830 0.033722 -0.012856\nv -0.017504 0.003611 -0.041627\nv -0.005180 0.068988 -0.037858\nv 0.016003 0.086445 -0.027315\nv -0.024653 0.063504 -0.039762\nv -0.015860 0.152979 -0.040154\nv 0.052466 0.035919 -0.013520\nv -0.040255 0.084670 -0.029122\nv 0.013836 0.073754 -0.033667\nv 0.018950 0.057551 -0.040689\nv -0.056819 0.126312 -0.013289\nv -0.047399 0.081210 -0.030934\nv -0.061613 0.138879 -0.076540\nv -0.050035 0.077882 -0.033254\nv -0.061950 0.009568 -0.021395\nv -0.013553 0.152136 -0.042065\nv -0.034145 0.081122 -0.031798\nv 0.001634 0.072060 -0.036567\nv -0.008249 0.080279 -0.034779\nv 0.035870 0.074400 -0.020786\nv 0.034752 0.072920 -0.024730\nv -0.061834 0.122399 -0.011428\nv -0.059715 0.123599 -0.011739\nv 0.012242 0.089892 -0.025866\nv -0.048108 0.131761 -0.020683\nv -0.010990 0.149931 -0.042662\nv -0.027122 0.002239 -0.043854\nv -0.023013 0.062652 -0.044316\nv -0.053858 0.094808 -0.019956\nv -0.011305 0.148452 -0.044229\nv -0.015774 0.066433 -0.038998\nv -0.064282 0.121672 -0.012903\nv -0.059714 0.121434 -0.013818\nv 0.013457 0.079478 -0.032683\nv -0.024216 0.076630 -0.035703\nv -0.014057 0.150444 -0.042691\nv -0.017534 0.080920 -0.033520\nv -0.057977 0.118890 -0.015557\nv -0.052416 0.093298 -0.021112\nv 0.020660 0.078841 -0.029764\nv -0.061640 0.120269 -0.014314\nv 0.028086 0.067449 -0.031942\nv 0.017710 0.070319 -0.036204\nv 0.047196 0.039471 -0.009606\nv -0.034604 0.009530 -0.044149\nv -0.029570 0.085497 -0.027706\nv -0.062830 0.119581 -0.015557\nv -0.001501 0.072424 -0.037056\nv 0.047076 0.041565 -0.004724\nv 0.011681 0.065971 -0.037687\nv -0.015325 0.091966 -0.020191\nv 0.007950 0.065862 -0.038425\nv 0.018264 0.074053 -0.031947\nv -0.038315 0.081842 -0.031300\nv 0.011761 0.063411 -0.040812\nv -0.001421 0.067769 -0.038473\nv -0.052425 0.003396 -0.026917\nv -0.063911 0.120240 -0.016704\nv -0.059365 0.114981 -0.016629\nv 0.021602 0.076087 -0.030136\nv -0.007243 0.070450 -0.038083\nv -0.065387 0.083901 -0.024593\nv -0.006281 0.092617 -0.024202\nv -0.015471 0.062226 -0.048302\nv -0.023574 0.082858 -0.030193\nv 0.023783 0.082564 -0.026160\nv -0.012370 0.070347 -0.038694\nv -0.060254 0.002580 -0.024393\nv -0.034537 0.091135 -0.021600\nv 0.034452 0.056261 -0.032270\nv 0.013422 0.062485 -0.040508\nv 0.005859 0.065049 -0.041196\nv -0.004149 0.084695 -0.030351\nv 0.010939 0.086702 -0.029527\nv 0.011702 0.072645 -0.034510\nv 0.011074 0.082671 -0.031264\nv 0.028102 0.063382 -0.034040\nv -0.033632 0.087124 -0.025595\nv 0.015214 0.063306 -0.038578\nv 0.007890 0.067338 -0.036657\nv 0.034346 0.068177 -0.027457\nv -0.035711 0.011107 -0.042851\nv -0.032725 0.013327 -0.041864\nv 0.007047 0.069187 -0.035817\nv -0.039694 0.009222 -0.040995\nv -0.054664 0.085882 -0.028016\nv -0.020458 0.091283 -0.020586\nv -0.014694 0.089931 -0.022563\nv -0.022420 0.064482 -0.039410\nv 0.031888 0.079781 -0.021848\nv -0.055677 0.111740 -0.016120\nv -0.036832 0.084126 -0.029462\nv 0.022632 0.055215 -0.039150\nv 0.005644 0.061131 -0.046502\nv -0.007890 0.062489 -0.048288\nv -0.013340 0.079635 -0.033261\nv -0.016444 0.063827 -0.045731\nv -0.033996 0.004659 -0.045218\nv 0.024407 0.066392 -0.035057\nv -0.008395 0.087278 -0.028727\nv -0.067204 0.147492 -0.074185\nv 0.008931 0.060410 -0.045041\nv -0.002527 0.081152 -0.033352\nv -0.026900 0.079255 -0.032378\nv -0.059994 0.111375 -0.017645\nv -0.003345 0.063779 -0.046646\nv -0.066299 0.009684 -0.018801\nv -0.057452 0.012287 -0.020877\nv 0.046213 0.040519 -0.010585\nv -0.050739 0.086589 -0.028451\nv -0.012146 0.054745 -0.053089\nv 0.003875 0.084283 -0.032725\nv -0.037425 0.007818 -0.043518\nv 0.001325 0.093070 -0.022557\nv -0.016246 0.086065 -0.028692\nv -0.060711 0.109222 -0.019755\nv 0.055036 0.038529 -0.009862\nv 0.000869 0.062969 -0.046333\nv 0.013127 0.059603 -0.043718\nv -0.021183 0.079815 -0.033540\nv 0.028031 0.046705 -0.037068\nv 0.046127 0.033601 -0.015031\nv 0.054263 0.031844 -0.014971\nv -0.002591 0.090131 -0.025463\nv -0.059086 0.088571 -0.023965\nv 0.019837 0.067677 -0.036878\nv -0.039156 0.015975 -0.027426\nv -0.036712 0.013126 -0.040172\nv -0.047779 0.101129 -0.009622\nv 0.048719 0.028832 -0.018790\nv -0.070958 0.083018 0.037050\nv -0.042557 0.088335 -0.027668\nv 0.022855 0.085920 -0.023652\nv 0.006664 0.057282 -0.047650\nv -0.012627 0.061265 -0.049693\nv -0.010406 0.092998 -0.022041\nv -0.001097 0.059267 -0.049227\nv 0.035411 0.059165 -0.030278\nv -0.006727 0.090025 -0.026086\nv -0.006199 0.065048 -0.044686\nv 0.016197 0.057565 -0.042478\nv -0.031950 0.005511 -0.045101\nv -0.027315 0.083083 -0.029761\nv -0.053388 0.105912 -0.015697\nv -0.046574 0.097651 -0.012472\nv -0.038144 0.015407 -0.031348\nv 0.042227 0.027774 -0.018547\nv -0.060228 0.082587 -0.028406\nv -0.013602 0.085252 -0.029884\nv -0.049819 0.003823 -0.026901\nv 0.005412 0.079847 -0.034730\nv -0.023301 0.060553 -0.048303\nv -0.020853 0.066225 -0.038942\nv 0.014900 0.072591 -0.034173\nv -0.043643 0.077698 -0.033039\nv 0.026048 0.081700 -0.024248\nv -0.035907 0.014319 -0.038740\nv -0.010487 0.004035 -0.040075\nv -0.005656 0.077235 -0.037090\nv -0.018311 0.083308 -0.031349\nv -0.011516 0.081893 -0.032039\nv -0.010895 0.089292 -0.025817\nv 0.013726 0.070118 -0.036582\nv -0.010863 0.064506 -0.045891\nv -0.056719 0.106712 -0.019152\nv -0.055565 0.103173 -0.018468\nv 0.022252 0.059444 -0.037999\nv -0.004936 0.059749 -0.049946\nv -0.022750 0.058487 -0.050384\nv -0.017877 0.065468 -0.040004\nv -0.042736 0.003607 -0.041890\nv -0.006289 0.067354 -0.039892\nv -0.026822 0.078237 -0.033581\nv 0.000206 0.065771 -0.042255\nv 0.030287 0.072466 -0.028721\nv -0.049260 0.099567 -0.015084\nv 0.028315 0.051901 -0.036194\nv 0.025205 0.050686 -0.039090\nv 0.045433 0.036649 -0.012316\nv -0.018314 0.069477 -0.038387\nv 0.041602 0.029887 -0.017592\nv 0.009933 0.068447 -0.036779\nv -0.012441 0.096622 -0.011323\nv 0.001062 0.098116 -0.013894\nv 0.043752 0.034165 -0.014645\nv 0.018625 0.090137 -0.021245\nv -0.037207 0.002683 -0.044919\nv 0.025083 0.070807 -0.032411\nv -0.012431 0.058997 -0.051123\nv -0.035588 0.085498 -0.027373\nv -0.014645 0.067661 -0.038225\nv 0.032868 0.076409 -0.023379\nv -0.067854 0.148834 -0.072724\nv -0.034940 0.003167 -0.045791\nv -0.052770 0.101178 -0.018319\nv -0.039384 0.095758 -0.013827\nv 0.006349 0.097978 -0.013954\nv 0.013677 0.096553 -0.013558\nv -0.019286 0.075237 -0.036872\nv 0.013917 0.083406 -0.030333\nv 0.017703 0.084268 -0.028295\nv 0.022872 0.063448 -0.036250\nv -0.057736 0.003752 -0.025009\nv -0.035519 0.088681 -0.024441\nv -0.020475 0.062412 -0.046771\nv -0.010059 0.055339 -0.051824\nv -0.050497 0.096125 -0.018116\nv -0.047939 0.096840 -0.015582\nv 0.029282 0.060420 -0.034228\nv -0.001322 0.088024 -0.027546\nv 0.017300 0.077236 -0.031481\nv 0.031840 0.060080 -0.032942\nv -0.020545 0.094419 -0.011353\nv -0.011843 0.094779 -0.017825\nv -0.000505 0.097134 -0.015882\nv 0.001943 0.075661 -0.034919\nv 0.029830 0.079562 -0.024115\nv -0.019642 0.086126 -0.027146\nv -0.057810 0.087551 -0.025223\nv -0.017314 0.059123 -0.051057\nv -0.049672 0.089904 -0.026097\nv -0.031145 0.002835 -0.045122\nv -0.041759 0.001801 -0.042579\nv 0.011295 0.003897 -0.036913\nv 0.019231 0.085116 -0.026672\nv 0.025859 0.076161 -0.028752\nv -0.032000 0.089495 -0.021955\nv -0.053557 0.099189 -0.019326\nv -0.011162 0.068052 -0.038792\nv -0.002586 0.094724 -0.020810\nv 0.005728 0.094769 -0.020828\nv 0.008960 0.095044 -0.019400\nv 0.014951 0.092664 -0.019696\nv 0.005177 0.063223 -0.044677\nv 0.025112 0.079381 -0.026715\nv -0.063393 0.146044 -0.075291\nv 0.043787 0.031873 -0.016021\nv 0.028596 0.074967 -0.027900\nv 0.000698 0.068695 -0.037429\nv -0.051898 0.096428 -0.018691\nv -0.022347 0.092589 -0.016272\nv 0.023106 0.088406 -0.019808\nv 0.051161 0.032356 -0.016355\nv 0.002514 0.087977 -0.028410\nv 0.040043 0.069521 -0.017978\nv -0.045858 0.094894 -0.020254\nv -0.043119 0.094442 -0.020440\nv -0.036613 0.094320 -0.016831\nv -0.029139 0.092644 -0.012510\nv -0.026540 0.092264 -0.014517\nv -0.016302 0.093610 -0.016836\nv -0.006825 0.094989 -0.020309\nv 0.009169 0.092027 -0.023418\nv 0.007565 0.002043 -0.035313\nv 0.004646 0.002027 -0.035814\nv 0.000025 0.002644 -0.038192\nv -0.003181 0.002657 -0.038481\nv -0.007491 0.002806 -0.039255\nv -0.015579 0.002644 -0.040548\nv -0.044507 0.066321 -0.036117\nv -0.025958 0.002830 -0.043480\nv 0.005415 0.003938 -0.038180\nv 0.000727 0.003908 -0.039001\nv -0.003525 0.004102 -0.039399\nv -0.012543 0.002683 -0.040098\nv -0.015906 0.004752 -0.041386\nv -0.026017 0.004565 -0.043792\nv -0.025188 0.138724 -0.033965\nv -0.055132 0.064690 -0.036111\nv -0.067553 0.001591 -0.020444\nv 0.014452 0.006667 -0.036476\nv -0.000865 0.006305 -0.039711\nv -0.077441 0.090888 -0.021546\nv -0.066541 0.066627 -0.030802\nv -0.074803 0.065360 -0.028051\nv -0.034969 0.128107 -0.027871\nv -0.065022 0.004385 -0.022233\nv -0.066627 0.001676 -0.021561\nv -0.068325 0.003883 -0.020526\nv -0.069787 0.002177 -0.018566\nv 0.023229 0.004649 -0.016492\nv 0.010572 0.005368 -0.037576\nv 0.004208 0.006108 -0.038887\nv -0.006619 0.007713 -0.040497\nv -0.023126 0.004230 -0.043271\nv -0.075282 0.104086 -0.021047\nv -0.066832 0.085632 -0.023437\nv -0.061774 0.004060 -0.023371\nv -0.069532 0.004495 -0.018633\nv -0.070765 0.004173 -0.015606\nv 0.033211 0.006118 -0.014551\nv 0.024238 0.006623 -0.018405\nv 0.007831 0.008891 -0.038129\nv -0.012573 0.007958 -0.041157\nv -0.029947 0.009698 -0.044373\nv -0.075150 0.037313 0.010923\nv -0.060507 0.096404 -0.022243\nv -0.047771 0.004412 -0.027175\nv -0.068799 0.006829 -0.016546\nv 0.011612 0.008315 -0.037805\nv 0.002381 0.009793 -0.038907\nv -0.003904 0.009810 -0.040055\nv -0.009802 0.011115 -0.040624\nv -0.020553 0.009444 -0.043365\nv -0.057435 0.074404 -0.032687\nv 0.014608 0.068291 -0.037224\nv -0.067184 0.007430 -0.020198\nv -0.071324 0.006033 -0.014324\nv 0.032638 0.007994 -0.017258\nv 0.025105 0.007999 -0.019364\nv -0.064758 0.070694 -0.031823\nv 0.014184 0.011172 -0.038788\nv 0.003337 0.011093 -0.039286\nv -0.001248 0.011240 -0.039647\nv -0.004154 0.011234 -0.040451\nv -0.047686 0.008724 -0.026283\nv -0.057112 0.009038 -0.023353\nv -0.067390 0.009163 -0.016487\nv -0.028149 0.143689 -0.032055\nv 0.028014 0.008853 -0.018995\nv -0.032455 0.003877 0.035802\nv 0.017538 0.013059 -0.037851\nv 0.011063 0.011699 -0.039527\nv -0.000556 0.012648 -0.040927\nv -0.007801 0.013746 -0.044097\nv -0.013235 0.014505 -0.044152\nv -0.013890 0.011366 -0.041311\nv -0.017450 0.012004 -0.042200\nv -0.025654 0.012186 -0.043017\nv -0.026218 0.015286 -0.040816\nv -0.070632 0.069441 -0.028703\nv -0.049938 0.011005 -0.025013\nv -0.053387 0.007521 -0.025560\nv -0.025707 0.067798 -0.038532\nv 0.043767 0.011400 -0.014094\nv 0.041397 0.012971 -0.018256\nv 0.035885 0.014007 -0.020647\nv 0.036939 0.009734 -0.017685\nv 0.031029 0.013009 -0.020553\nv 0.027826 0.012745 -0.021139\nv -0.061336 0.065015 -0.032802\nv 0.021035 0.014061 -0.034854\nv 0.008494 0.013850 -0.040165\nv 0.005143 0.013057 -0.040579\nv -0.001678 0.014368 -0.043421\nv -0.005239 0.013444 -0.043587\nv -0.016766 0.013270 -0.042737\nv -0.020829 0.014381 -0.042477\nv -0.021914 0.013686 -0.042423\nv -0.030914 0.012225 -0.043228\nv -0.064637 0.141925 -0.075725\nv -0.054782 0.003935 0.032190\nv -0.012610 0.138850 -0.039956\nv -0.045125 0.012281 -0.025742\nv -0.055060 0.013600 -0.021150\nv -0.075985 0.035397 -0.002547\nv 0.044568 0.014263 -0.018004\nv 0.025119 0.016735 -0.034682\nv 0.020702 0.015295 -0.035755\nv 0.018007 0.015675 -0.037645\nv 0.013867 0.014732 -0.039664\nv 0.010414 0.016728 -0.042389\nv 0.007035 0.016139 -0.042215\nv 0.003474 0.015060 -0.043295\nv -0.001077 0.016427 -0.044909\nv -0.010127 0.013940 -0.043850\nv -0.027961 0.016619 -0.038830\nv -0.049988 0.014169 -0.023643\nv -0.062639 0.068823 -0.032892\nv 0.017298 0.017227 -0.038923\nv 0.014373 0.017271 -0.041386\nv 0.001371 0.017665 -0.045073\nv -0.005849 0.017331 -0.045363\nv -0.042853 0.015952 -0.025784\nv -0.053258 0.016111 -0.021204\nv -0.011770 0.142485 -0.042825\nv 0.042753 0.017093 -0.020618\nv 0.032689 0.016596 -0.021005\nv 0.031324 0.017311 -0.022228\nv 0.022195 0.018623 -0.038080\nv 0.016130 0.019332 -0.041092\nv 0.014119 0.020303 -0.042253\nv 0.005377 0.018158 -0.043571\nv -0.012153 0.018392 -0.046171\nv -0.019870 0.016695 -0.043991\nv -0.023270 0.015923 -0.041978\nv -0.035756 0.076266 -0.034607\nv -0.036448 0.016627 -0.027755\nv -0.037153 0.018069 -0.025618\nv -0.041224 0.018739 -0.025669\nv -0.047062 0.015742 -0.024232\nv -0.021296 0.140251 -0.035811\nv 0.046571 0.016876 -0.018957\nv 0.039166 0.017029 -0.021016\nv -0.071226 0.108156 -0.022089\nv 0.023712 0.019981 -0.037456\nv 0.020398 0.019668 -0.040170\nv -0.003445 0.019845 -0.046057\nv -0.010278 0.020983 -0.048195\nv -0.066697 0.125239 -0.069110\nv -0.032623 0.018493 -0.026101\nv 0.044973 0.020761 -0.020884\nv 0.033943 0.019553 -0.021501\nv 0.026010 0.023402 -0.035715\nv 0.019875 0.022436 -0.042062\nv 0.017882 0.022162 -0.042563\nv 0.008603 0.021635 -0.044894\nv 0.007685 0.023040 -0.045335\nv 0.003696 0.020521 -0.044426\nv 0.000289 0.021309 -0.045058\nv -0.006435 0.020358 -0.047045\nv -0.033829 0.018660 -0.025038\nv -0.038074 0.020329 -0.025228\nv -0.044540 0.022615 -0.025633\nv -0.045670 0.019596 -0.024688\nv -0.071026 0.096111 -0.023729\nv 0.042363 0.021535 -0.021419\nv 0.036877 0.020254 -0.021231\nv -0.068208 0.063898 -0.030912\nv 0.022339 0.022158 -0.040459\nv 0.013256 0.023478 -0.043923\nv 0.004761 0.024479 -0.045397\nv 0.002328 0.023955 -0.046360\nv -0.013253 0.023252 -0.048472\nv -0.015869 0.019021 -0.046406\nv -0.032609 0.020857 -0.025032\nv -0.076650 0.069689 -0.024910\nv 0.049399 0.022931 -0.019555\nv 0.039426 0.023543 -0.020486\nv 0.016920 0.024587 -0.043110\nv -0.011778 0.025054 -0.048809\nv -0.019235 0.022088 -0.046634\nv -0.032705 0.024017 -0.025920\nv -0.042325 0.023970 -0.026105\nv -0.050018 0.019449 -0.022938\nv -0.070685 0.064087 -0.030420\nv -0.024217 0.003651 0.038869\nv 0.015999 0.028100 -0.042824\nv -0.001019 0.024976 -0.046947\nv -0.003987 0.025110 -0.047650\nv -0.006870 0.024932 -0.047900\nv -0.016071 0.026330 -0.049977\nv -0.047147 0.124973 -0.022201\nv -0.038758 0.126336 -0.026136\nv -0.034440 0.022924 -0.024904\nv -0.037104 0.024482 -0.025613\nv -0.053164 0.020563 -0.020826\nv 0.053171 0.027758 -0.017740\nv 0.048195 0.025138 -0.020067\nv 0.043526 0.024477 -0.020408\nv 0.039591 0.026091 -0.019376\nv -0.072539 0.100699 -0.022541\nv -0.080908 0.088992 -0.019464\nv 0.023188 0.026339 -0.040348\nv 0.011135 0.028538 -0.044176\nv 0.005891 0.028056 -0.045343\nv 0.002066 0.028832 -0.047845\nv -0.021543 0.027087 -0.048055\nv -0.035917 0.026760 -0.025922\nv -0.049024 0.023770 -0.024805\nv -0.076039 0.100735 -0.021600\nv -0.010581 0.076552 -0.036443\nv -0.000913 0.031459 -0.049001\nv -0.005442 0.028111 -0.049439\nv -0.009582 0.029373 -0.049787\nv -0.013415 0.028374 -0.050787\nv -0.030472 0.137502 -0.031561\nv -0.032593 0.027384 -0.027314\nv -0.033718 0.025352 -0.025695\nv -0.046260 0.026555 -0.026508\nv -0.035061 0.069112 -0.036741\nv -0.009977 0.031461 -0.050542\nv -0.033731 0.028569 -0.027319\nv -0.042752 0.029668 -0.027580\nv -0.051811 0.073492 -0.033911\nv -0.066047 0.097903 -0.023508\nv -0.077389 0.086534 -0.021264\nv -0.051698 0.069432 -0.035986\nv 0.021847 0.029894 -0.040562\nv 0.014456 0.031519 -0.044452\nv 0.001313 0.032524 -0.049001\nv -0.003756 0.030392 -0.049766\nv -0.014514 0.031252 -0.051704\nv -0.020126 0.032204 -0.050721\nv -0.022567 0.032434 -0.049611\nv -0.038593 0.027253 -0.026065\nv -0.045693 0.029539 -0.027615\nv -0.048470 0.031411 -0.027152\nv -0.048974 0.028400 -0.026351\nv -0.055660 0.029253 -0.020546\nv -0.059410 0.028586 -0.016435\nv -0.078915 0.097366 -0.020306\nv -0.056868 0.069850 -0.033658\nv -0.058760 0.102077 -0.020946\nv -0.081743 0.100643 -0.017961\nv -0.059422 0.067174 -0.033490\nv -0.076751 0.095222 -0.022378\nv 0.010593 0.035697 -0.045353\nv 0.010012 0.031813 -0.046062\nv 0.006019 0.032790 -0.047278\nv -0.013904 0.034020 -0.051883\nv -0.019724 0.034078 -0.051824\nv -0.066329 0.140899 -0.073790\nv -0.034955 0.031274 -0.028368\nv -0.040305 0.031597 -0.028155\nv -0.045649 0.032672 -0.028575\nv -0.053462 0.029240 -0.023515\nv -0.054257 0.032339 -0.023695\nv -0.054969 0.030923 -0.021803\nv -0.056812 0.030568 -0.020737\nv -0.060708 0.030878 -0.019884\nv -0.062960 0.029526 -0.017215\nv -0.070279 0.040338 0.021217\nv 0.024298 0.032664 -0.038310\nv 0.018834 0.032169 -0.042811\nv 0.014704 0.034424 -0.044726\nv -0.001517 0.036456 -0.048858\nv -0.005264 0.034108 -0.049594\nv -0.016567 0.034017 -0.052493\nv -0.050763 0.032643 -0.025921\nv -0.024458 0.132828 -0.031300\nv -0.040687 0.123254 -0.023834\nv -0.015378 0.146370 -0.041448\nv -0.043044 0.127031 -0.024625\nv -0.033777 0.133619 -0.029987\nv -0.062616 0.078846 -0.029387\nv -0.046853 0.075509 -0.033605\nv -0.056398 0.076888 -0.032569\nv -0.031206 0.066274 -0.037535\nv 0.021982 0.034512 -0.041752\nv 0.020033 0.037150 -0.043234\nv 0.016907 0.037428 -0.044325\nv 0.013611 0.037046 -0.045886\nv 0.006080 0.036047 -0.047178\nv 0.002251 0.036462 -0.047909\nv -0.005347 0.036813 -0.050550\nv -0.008836 0.034457 -0.050217\nv -0.027341 0.036930 -0.047999\nv -0.034763 0.033795 -0.029657\nv -0.035824 0.035770 -0.030525\nv -0.037995 0.036224 -0.030164\nv -0.045647 0.034644 -0.029821\nv -0.052932 0.034110 -0.025743\nv -0.055670 0.032876 -0.023379\nv -0.058303 0.034141 -0.024197\nv -0.062249 0.033837 -0.022857\nv -0.065710 0.030898 -0.017803\nv -0.054979 0.109489 -0.016499\nv -0.011417 0.145119 -0.044034\nv -0.061829 0.074746 -0.031349\nv -0.066153 0.081337 -0.025991\nv 0.023886 0.036963 -0.040241\nv 0.005423 0.038802 -0.048611\nv -0.068359 0.106799 -0.022486\nv -0.033450 0.035337 -0.032367\nv -0.041981 0.034621 -0.030037\nv -0.049475 0.037146 -0.028943\nv -0.051404 0.035260 -0.027284\nv 0.000849 0.080895 -0.034544\nv -0.036702 0.132096 -0.028658\nv -0.062940 0.042061 0.025839\nv -0.071118 0.091646 -0.023220\nv -0.074550 0.109251 -0.021225\nv -0.079494 0.038042 0.000899\nv 0.025737 0.036432 -0.038366\nv 0.008226 0.039064 -0.047683\nv -0.008681 0.038171 -0.051124\nv -0.011717 0.038731 -0.052617\nv -0.020453 0.041882 -0.053673\nv -0.056226 0.078983 -0.031912\nv -0.055771 0.036910 -0.028689\nv -0.064562 0.037163 -0.025916\nv -0.065990 0.035460 -0.022212\nv -0.069282 0.035416 -0.019203\nv -0.083464 0.095690 -0.019037\nv -0.079860 0.039351 0.003657\nv -0.020287 0.003742 0.038468\nv -0.045601 0.123307 -0.022359\nv 0.014588 0.039518 -0.045408\nv -0.008841 0.040543 -0.052130\nv -0.021961 0.038689 -0.052763\nv -0.038468 0.039818 -0.031773\nv -0.057935 0.040048 -0.031211\nv -0.060525 0.037374 -0.028868\nv -0.068547 0.038406 -0.024367\nv -0.069476 0.037724 -0.021682\nv -0.065003 0.074609 -0.029219\nv -0.063709 0.030646 0.011078\nv -0.023190 0.145361 -0.035309\nv 0.010445 0.039019 -0.046802\nv 0.007984 0.044038 -0.048625\nv -0.006766 0.043108 -0.051819\nv -0.011586 0.043454 -0.052863\nv -0.023538 0.042862 -0.052963\nv -0.027222 0.042587 -0.050536\nv -0.064686 0.128525 -0.072070\nv -0.042615 0.038900 -0.032333\nv -0.044099 0.038801 -0.031981\nv -0.047121 0.040745 -0.030979\nv -0.049459 0.040238 -0.030194\nv -0.053874 0.038914 -0.030208\nv -0.067756 0.041396 -0.028447\nv -0.073116 0.041534 -0.023803\nv -0.074748 0.087316 -0.022365\nv -0.079429 0.094132 -0.020561\nv -0.022821 0.129499 -0.029142\nv 0.023901 0.042110 -0.040512\nv 0.021017 0.040172 -0.042045\nv 0.011925 0.043554 -0.045456\nv 0.003631 0.043960 -0.049630\nv 0.001780 0.040645 -0.049708\nv -0.003173 0.041154 -0.050439\nv -0.052958 0.041574 -0.031538\nv -0.063178 0.040504 -0.030238\nv -0.075167 0.040745 -0.021903\nv -0.004308 0.070910 -0.037922\nv -0.084933 0.093870 -0.017925\nv -0.027326 0.135026 -0.032074\nv -0.052309 0.112126 -0.014895\nv -0.069732 0.121672 -0.064179\nv -0.026181 0.140666 -0.033737\nv 0.031654 0.044425 -0.034715\nv 0.020435 0.044545 -0.041582\nv 0.015451 0.043166 -0.044147\nv 0.009400 0.043267 -0.047716\nv -0.015491 0.041451 -0.053557\nv -0.035541 0.041959 -0.033694\nv -0.060704 0.042864 -0.032183\nv -0.063584 0.043595 -0.032107\nv -0.070336 0.040686 -0.025735\nv -0.064893 0.094703 -0.023434\nv -0.042003 0.132949 -0.025491\nv -0.033792 0.140856 -0.029075\nv -0.055698 0.117461 -0.016583\nv -0.049188 0.120603 -0.019657\nv 0.027111 0.041296 -0.038510\nv 0.012526 0.047182 -0.045986\nv -0.014137 0.045554 -0.052991\nv -0.028752 0.047491 -0.049984\nv -0.042919 0.044737 -0.033555\nv -0.045701 0.043768 -0.032488\nv -0.050225 0.043361 -0.032567\nv -0.055148 0.044243 -0.033793\nv -0.058127 0.043383 -0.033196\nv -0.066475 0.044206 -0.031324\nv -0.068647 0.043340 -0.029691\nv -0.072322 0.044419 -0.027542\nv -0.073916 0.044150 -0.025205\nv -0.023051 0.071198 -0.038187\nv -0.047584 0.128717 -0.021854\nv -0.071590 0.080746 -0.023363\nv 0.008688 0.047857 -0.047667\nv 0.004696 0.047994 -0.048648\nv -0.008571 0.045295 -0.052359\nv -0.014679 0.048731 -0.053994\nv -0.019478 0.048860 -0.053667\nv -0.021772 0.049277 -0.053529\nv -0.024609 0.045164 -0.052296\nv -0.011129 0.074358 -0.037196\nv -0.068307 0.123900 -0.067211\nv -0.035683 0.046041 -0.034212\nv -0.038642 0.043813 -0.032756\nv -0.049242 0.045907 -0.033516\nv -0.056981 0.046036 -0.034224\nv -0.063511 0.049651 -0.033736\nv -0.078591 0.044022 -0.020747\nv -0.065527 0.144939 -0.075296\nv -0.027467 0.071756 -0.037854\nv -0.030883 0.071812 -0.036954\nv -0.051105 0.123399 -0.019431\nv -0.050661 0.031250 0.019498\nv -0.069074 0.088622 -0.023524\nv 0.008041 0.052195 -0.047172\nv -0.000546 0.046990 -0.050427\nv -0.003905 0.048494 -0.051706\nv -0.005949 0.045867 -0.052450\nv -0.008763 0.050538 -0.052509\nv -0.037298 0.072041 -0.034998\nv -0.047404 0.046861 -0.034032\nv -0.053388 0.046149 -0.034305\nv -0.041120 0.069179 -0.035933\nv 0.032241 0.048051 -0.033973\nv 0.022406 0.047150 -0.040690\nv 0.018435 0.048005 -0.042751\nv 0.013965 0.050480 -0.044738\nv 0.011516 0.051449 -0.045461\nv 0.002711 0.051085 -0.049251\nv -0.000619 0.050144 -0.051166\nv -0.026981 0.049275 -0.051585\nv -0.079127 0.106568 -0.019266\nv -0.015508 0.137276 -0.036814\nv -0.053984 0.067189 -0.036307\nv -0.036026 0.048436 -0.036263\nv -0.044104 0.048802 -0.034688\nv -0.051797 0.050115 -0.036142\nv -0.054953 0.048558 -0.035858\nv -0.059906 0.047637 -0.034006\nv -0.068687 0.048598 -0.031769\nv -0.072307 0.047717 -0.029202\nv -0.061709 0.071472 -0.032857\nv -0.068050 0.029620 0.004821\nv 0.006402 0.050396 -0.048268\nv -0.004198 0.051498 -0.052319\nv -0.066649 0.128161 -0.071589\nv -0.072936 0.050188 -0.030240\nv -0.078377 0.046924 -0.022253\nv -0.073830 0.070011 -0.026957\nv -0.054519 0.124850 -0.016668\nv -0.065272 0.130708 -0.073373\nv -0.054063 0.114945 -0.016216\nv 0.034601 0.051142 -0.032934\nv 0.029936 0.050192 -0.034754\nv 0.022931 0.051774 -0.040325\nv 0.017269 0.053799 -0.043061\nv 0.002338 0.054467 -0.048652\nv -0.008716 0.052954 -0.052606\nv -0.016700 0.053050 -0.053678\nv -0.022145 0.053918 -0.052488\nv -0.035829 0.052120 -0.037154\nv -0.038229 0.051356 -0.036610\nv -0.040555 0.051128 -0.035664\nv -0.061655 0.051098 -0.034004\nv -0.055479 0.122619 -0.016359\nv 0.018798 0.064186 -0.037575\nv -0.057640 0.115183 -0.016388\nv -0.052760 0.119871 -0.017986\nv -0.016828 0.141225 -0.038470\nv 0.013308 0.055706 -0.045269\nv 0.004292 0.055926 -0.048185\nv -0.002237 0.052889 -0.051608\nv -0.080059 0.103223 -0.018690\nv -0.026433 0.054622 -0.050701\nv -0.056469 0.092156 -0.021753\nv -0.035012 0.053459 -0.038952\nv -0.044461 0.052461 -0.036024\nv -0.051239 0.054621 -0.036189\nv -0.055203 0.053819 -0.036034\nv -0.057067 0.051490 -0.036010\nv -0.065064 0.055148 -0.033496\nv -0.061859 0.087638 -0.023826\nv -0.070511 0.030843 0.004786\nv -0.042353 0.074585 -0.034906\nv 0.025280 0.053971 -0.038209\nv -0.018516 0.144469 -0.038516\nv -0.003010 0.056085 -0.050508\nv -0.030613 0.135152 -0.031263\nv -0.017547 0.055527 -0.052938\nv -0.032644 0.055374 -0.039903\nv -0.038201 0.056939 -0.038106\nv -0.037577 0.053960 -0.036809\nv -0.042842 0.055788 -0.036377\nv -0.036320 0.001649 -0.045090\nv -0.030348 0.001302 -0.043625\nv -0.040029 0.001814 -0.044125\nv -0.032917 0.001394 -0.044208\nv -0.027398 0.001308 -0.040998\nv -0.022754 0.001378 -0.040343\nv -0.018731 0.001352 -0.039433\nv -0.014601 0.001508 -0.038851\nv -0.010589 0.001562 -0.038121\nv -0.000795 0.001758 -0.036454\nv 0.012682 0.002524 -0.034190\nv -0.007762 0.001636 -0.037635\nv -0.043616 0.002205 -0.040859\nv -0.035393 0.001404 -0.042421\nv -0.024842 0.001662 -0.035913\nv -0.019484 0.001527 -0.036135\nv -0.014985 0.001699 -0.035383\nv -0.009336 0.001872 -0.034328\nv -0.002561 0.001971 -0.033069\nv 0.003877 0.001980 -0.032118\nv 0.009684 0.001976 -0.030278\nv 0.015684 0.002528 -0.028912\nv -0.040350 0.001346 -0.039957\nv -0.033740 0.001529 -0.035926\nv -0.029022 0.001490 -0.036773\nv -0.019412 0.002293 -0.034221\nv -0.015844 0.002371 -0.033619\nv -0.011445 0.002456 -0.032853\nv 0.008504 0.002308 -0.028595\nv 0.014027 0.002346 -0.032554\nv -0.045044 0.001934 -0.037192\nv -0.044437 0.001340 -0.036205\nv -0.026342 0.002826 -0.034567\nv -0.008344 0.003533 -0.031557\nv 0.000867 0.002623 -0.030703\nv 0.004406 0.002533 -0.030006\nv 0.011959 0.002065 -0.026358\nv -0.037242 0.001558 -0.034698\nv -0.004154 0.002539 -0.031599\nv 0.007102 0.005315 -0.026725\nv 0.014628 0.002238 -0.020932\nv -0.040903 0.001565 -0.029950\nv -0.032115 0.003306 -0.033734\nv -0.026276 0.006104 -0.032453\nv -0.020248 0.005444 -0.032449\nv -0.009995 0.005728 -0.030631\nv -0.002938 0.006702 -0.028508\nv -0.000454 0.005514 -0.029416\nv 0.011264 0.002213 -0.021709\nv -0.046721 0.002546 -0.032475\nv -0.036181 0.002239 -0.032415\nv -0.029527 0.005669 -0.032522\nv -0.022340 0.006465 -0.031210\nv -0.006703 0.006861 -0.028429\nv 0.002239 0.006264 -0.028021\nv 0.010207 0.002765 -0.025483\nv 0.018814 0.002839 -0.021208\nv -0.046318 0.001514 -0.031336\nv -0.045697 0.001368 -0.027518\nv -0.028506 0.006578 -0.030723\nv -0.017935 0.006511 -0.030655\nv -0.013960 0.006593 -0.029893\nv -0.011773 0.006806 -0.027544\nv -0.000980 0.007059 -0.026239\nv 0.006529 0.006407 -0.022874\nv 0.009334 0.002992 -0.022083\nv 0.017424 0.002839 -0.021139\nv 0.020000 0.002957 -0.018566\nv -0.048335 0.001729 -0.028955\nv -0.039732 0.001908 -0.029386\nv -0.038422 0.002889 -0.028625\nv -0.031880 0.006256 -0.030962\nv -0.025552 0.006431 -0.026628\nv -0.004001 0.006915 -0.023849\nv 0.004346 0.006569 -0.026114\nv 0.008832 0.001960 -0.014469\nv 0.020478 0.002709 -0.015478\nv 0.021426 0.002689 -0.015910\nv -0.050545 0.001517 -0.027440\nv -0.034316 0.005988 -0.029492\nv -0.017104 0.006604 -0.024631\nv -0.000868 0.007011 -0.022050\nv 0.002330 0.007141 -0.023477\nv 0.004324 0.006726 -0.020272\nv 0.006119 0.005959 -0.020757\nv 0.006431 0.003249 -0.018260\nv 0.007171 0.002417 -0.017444\nv 0.016321 0.002094 -0.015394\nv 0.018273 0.002156 -0.012368\nv 0.022788 0.002722 -0.013792\nv 0.024891 0.003926 -0.014432\nv 0.028007 0.004560 -0.014384\nv 0.030946 0.005958 -0.015544\nv 0.036135 0.007456 -0.015514\nv -0.055839 0.001920 -0.026262\nv -0.052812 0.001601 -0.026099\nv -0.035995 0.006058 -0.027234\nv -0.032552 0.006439 -0.027337\nv -0.021130 0.006309 -0.019804\nv 0.014412 0.001973 -0.013201\nv 0.022353 0.002359 -0.011144\nv 0.025289 0.002747 -0.011418\nv -0.058816 0.001543 -0.025181\nv -0.057379 0.001404 -0.024972\nv -0.055493 0.001237 -0.022714\nv -0.048975 0.001364 -0.025529\nv -0.043719 0.001536 -0.020029\nv -0.041682 0.001852 -0.023824\nv -0.041719 0.001889 -0.020451\nv -0.039765 0.003083 -0.024897\nv -0.032453 0.006227 -0.018805\nv 0.003251 0.002830 -0.013517\nv 0.006820 0.001902 -0.011401\nv 0.009520 0.002511 -0.011379\nv 0.013526 0.002363 -0.011628\nv 0.015604 0.003765 -0.010943\nv 0.025827 0.002587 -0.009234\nv 0.029847 0.003052 -0.008531\nv 0.031231 0.004048 -0.010996\nv -0.062425 0.001570 -0.023841\nv -0.060709 0.001418 -0.023457\nv -0.051253 0.001259 -0.023910\nv -0.039670 0.004000 -0.021919\nv -0.029129 0.006212 -0.023663\nv -0.009167 0.006658 -0.019716\nv 0.003408 0.005714 -0.016965\nv 0.019200 0.003579 -0.008684\nv 0.021344 0.002266 -0.009273\nv 0.022945 0.002089 -0.006409\nv 0.040073 0.006918 -0.010362\nv -0.063726 0.001590 -0.022569\nv -0.038016 0.006127 -0.022062\nv -0.027065 0.006137 -0.016951\nv -0.022685 0.006390 -0.024132\nv -0.003348 0.006664 -0.014773\nv 0.003180 0.002020 -0.010738\nv 0.004331 0.001879 -0.011433\nv 0.007838 0.002466 -0.009436\nv 0.025053 0.002170 -0.004943\nv 0.032930 0.003361 -0.005595\nv -0.079560 0.079332 0.031056\nv -0.053400 0.001266 -0.017965\nv -0.046619 0.001390 -0.019907\nv -0.040965 0.001663 -0.016328\nv -0.036504 0.006111 -0.020037\nv -0.019542 0.006233 -0.015860\nv -0.015388 0.006473 -0.018706\nv -0.014608 0.006245 -0.014999\nv 0.000071 0.006715 -0.015542\nv 0.000289 0.005677 -0.012636\nv 0.006085 0.002798 -0.008011\nv 0.008937 0.004054 -0.009514\nv 0.022402 0.003572 -0.003949\nv 0.033732 0.003394 -0.002671\nv 0.038393 0.005444 -0.004037\nv -0.048942 0.001423 -0.015379\nv -0.040108 0.001579 -0.014277\nv -0.024538 0.006108 -0.012473\nv -0.005928 0.006490 -0.011379\nv 0.004847 0.001917 -0.005809\nv 0.024912 0.002523 -0.000556\nv 0.027816 0.002443 -0.003930\nv 0.036462 0.004655 -0.001285\nv 0.048343 0.010575 -0.002852\nv -0.065975 0.001396 -0.018475\nv -0.056353 0.001239 -0.016873\nv -0.046435 0.001508 -0.014047\nv -0.038081 0.001458 -0.011482\nv -0.034521 0.006071 -0.016168\nv -0.031534 0.006153 -0.014912\nv -0.009282 0.006322 -0.007641\nv -0.002751 0.006265 -0.008450\nv 0.000747 0.002847 -0.009171\nv 0.000056 0.002544 -0.004646\nv 0.003353 0.002004 -0.004776\nv 0.004746 0.001975 -0.003427\nv -0.068963 0.001494 -0.017441\nv -0.062769 0.001170 -0.018295\nv -0.049724 0.001274 -0.010206\nv -0.035233 0.001551 -0.009666\nv -0.030569 0.006015 -0.011785\nv -0.012388 0.006260 -0.009866\nv 0.005349 0.001773 -0.000562\nv 0.030616 0.003037 0.000006\nv -0.071324 0.002113 -0.014629\nv -0.066760 0.001224 -0.013870\nv -0.044274 0.001313 -0.010300\nv -0.020555 0.006083 -0.009313\nv -0.016154 0.006209 -0.009606\nv 0.022254 0.004325 -0.000547\nv 0.023786 0.002476 0.002636\nv 0.039471 0.006462 0.001530\nv 0.044585 0.008602 -0.000932\nv 0.044182 0.009164 0.004084\nv 0.047791 0.010716 0.003446\nv -0.054924 0.038016 0.024175\nv -0.058143 0.001369 -0.012245\nv -0.047668 0.001347 -0.008647\nv -0.038137 0.001504 -0.005981\nv -0.033841 0.001578 -0.006893\nv -0.028178 0.005909 -0.008384\nv -0.023707 0.005854 -0.003725\nv -0.004693 0.006272 -0.004153\nv -0.002814 0.005607 -0.005331\nv 0.003462 0.001834 -0.001454\nv 0.021348 0.004005 0.002856\nv 0.028070 0.002961 0.002826\nv 0.029077 0.003811 0.005399\nv -0.071319 0.001861 -0.012054\nv -0.069960 0.001676 -0.008585\nv -0.059677 0.001260 -0.013403\nv -0.051590 0.001364 -0.006598\nv -0.043048 0.001698 -0.007756\nv -0.031298 0.001724 -0.003651\nv -0.013893 0.006165 -0.004972\nv -0.008085 0.006211 0.000359\nv -0.000713 0.003247 -0.000052\nv 0.005122 0.001955 0.003594\nv 0.007157 0.002131 0.002188\nv 0.008546 0.002678 0.003600\nv 0.018960 0.003952 0.004607\nv 0.021324 0.002562 0.005385\nv 0.024039 0.003056 0.007826\nv 0.040547 0.007968 0.006356\nv -0.072711 0.003382 -0.013423\nv -0.049184 0.001943 -0.006720\nv -0.046177 0.003536 -0.006639\nv -0.039982 0.003038 -0.005094\nv -0.034533 0.001630 -0.001583\nv 0.000255 0.003365 0.003411\nv 0.001249 0.002399 0.002172\nv 0.003791 0.002512 0.005884\nv 0.007546 0.002204 0.005733\nv 0.013262 0.002347 0.006986\nv 0.017694 0.002480 0.007496\nv 0.034751 0.005472 0.005729\nv -0.089954 0.083482 0.013418\nv -0.050012 0.002913 -0.004835\nv -0.038341 0.003865 -0.003409\nv -0.035403 0.001494 -0.003200\nv -0.033062 0.001523 -0.000904\nv -0.029978 0.001959 0.001487\nv -0.017986 0.006100 -0.004573\nv -0.012428 0.006071 0.000396\nv -0.003824 0.006140 0.000206\nv -0.002747 0.005529 0.000429\nv 0.010525 0.002617 0.005961\nv 0.028650 0.005676 0.010510\nv 0.031673 0.005845 0.009321\nv 0.049892 0.012818 0.006307\nv -0.072477 0.002931 -0.008755\nv -0.067245 0.001812 -0.003501\nv -0.034592 0.001807 0.000510\nv -0.021442 0.005881 0.003338\nv -0.002401 0.006265 0.004765\nv -0.001088 0.005688 0.005016\nv 0.006281 0.002646 0.008746\nv 0.039269 0.008726 0.010163\nv 0.042816 0.010068 0.009030\nv -0.063333 0.001492 -0.006185\nv -0.058324 0.001420 -0.004280\nv -0.052787 0.001482 -0.002868\nv -0.035706 0.003702 0.000151\nv -0.024534 0.005799 0.005177\nv -0.015193 0.006119 0.001485\nv -0.000299 0.006390 0.007366\nv 0.002051 0.003628 0.006515\nv 0.010103 0.002551 0.011116\nv 0.013296 0.002615 0.013827\nv 0.020503 0.003006 0.013384\nv 0.035539 0.009510 0.013282\nv -0.074745 0.035375 0.004974\nv -0.054739 0.001347 0.000685\nv -0.032133 0.001871 0.006568\nv -0.028894 0.003214 0.002843\nv -0.026600 0.005580 0.001174\nv 0.004226 0.004248 0.009303\nv 0.007563 0.003094 0.010679\nv 0.011576 0.003147 0.014579\nv 0.022322 0.003997 0.013407\nv 0.025270 0.006057 0.014585\nv 0.045684 0.011664 0.009591\nv -0.085303 0.048173 0.005532\nv -0.080927 0.077477 0.020572\nv -0.069587 0.002993 -0.002972\nv -0.063672 0.001832 0.000109\nv -0.054930 0.001438 0.004067\nv -0.053835 0.000814 0.003372\nv -0.035807 0.002852 0.004510\nv -0.033670 0.001667 0.005007\nv -0.030712 0.002500 0.007008\nv 0.002775 0.006414 0.010486\nv 0.007225 0.006686 0.014340\nv 0.031121 0.007694 0.012264\nv 0.039177 0.011371 0.014391\nv 0.043331 0.012839 0.013263\nv -0.065842 0.002440 0.000169\nv -0.028674 0.005418 0.006093\nv -0.020686 0.006030 0.008892\nv -0.018194 0.006022 0.005141\nv -0.014990 0.006107 0.007547\nv -0.007022 0.006316 0.007610\nv 0.000370 0.006665 0.010742\nv 0.019506 0.003039 0.018265\nv 0.025911 0.007453 0.016859\nv 0.027623 0.008772 0.016474\nv 0.031924 0.009521 0.013640\nv -0.052377 0.032837 0.020186\nv -0.058621 0.030992 0.015165\nv -0.059872 0.001712 0.003969\nv -0.053272 0.001425 0.006297\nv -0.036188 0.002987 0.007675\nv -0.035602 0.001917 0.009617\nv -0.035264 0.001982 0.012213\nv -0.028333 0.005429 0.008210\nv -0.028530 0.005929 0.014563\nv 0.004494 0.006979 0.013592\nv 0.013803 0.002578 0.018264\nv 0.041878 0.015357 0.017158\nv -0.073751 0.077914 0.028674\nv -0.088429 0.079961 0.020451\nv -0.090230 0.081571 0.019115\nv -0.072874 0.074374 0.022748\nv -0.062714 0.002974 0.005400\nv -0.061792 0.002039 0.004110\nv -0.056594 0.001526 0.006195\nv -0.037366 0.003442 0.009619\nv -0.038260 0.002005 0.012500\nv -0.030155 0.003917 0.009124\nv -0.019398 0.006256 0.013371\nv -0.016258 0.006443 0.015312\nv 0.009143 0.006061 0.016297\nv 0.010110 0.004476 0.018310\nv 0.011270 0.003086 0.018800\nv 0.022251 0.005207 0.019967\nv -0.061082 0.034109 0.019272\nv -0.071893 0.114747 -0.038321\nv -0.084449 0.078183 0.023020\nv -0.087807 0.081695 0.013846\nv -0.062578 0.002489 0.007063\nv -0.041531 0.001704 0.012346\nv -0.032808 0.002386 0.011691\nv -0.031964 0.003600 0.013400\nv -0.030233 0.005539 0.013005\nv -0.010815 0.006311 0.011213\nv 0.000786 0.007002 0.016114\nv 0.007401 0.006973 0.016072\nv 0.008920 0.006129 0.018762\nv 0.008520 0.002676 0.021741\nv 0.010747 0.002403 0.025243\nv 0.017180 0.002764 0.022967\nv 0.019594 0.003860 0.023303\nv -0.079432 0.043460 0.012478\nv -0.063341 0.029243 -0.014910\nv -0.064044 0.003038 0.008125\nv -0.063077 0.002135 0.010603\nv -0.055351 0.002016 0.012234\nv -0.051355 0.001662 0.011451\nv -0.045160 0.001620 0.013292\nv -0.022985 0.006157 0.013781\nv -0.006490 0.006763 0.016394\nv -0.002990 0.006685 0.013862\nv 0.005131 0.007317 0.019132\nv 0.005852 0.002595 0.023028\nv -0.071153 0.115074 -0.041224\nv -0.058901 0.027421 -0.013041\nv -0.064537 0.003179 0.009709\nv -0.011793 0.006791 0.018715\nv 0.002615 0.002662 0.024121\nv 0.017451 0.003900 0.026994\nv 0.019909 0.005407 0.026381\nv -0.075666 0.079059 0.031588\nv -0.048328 0.036128 0.024611\nv -0.080036 0.076803 0.017550\nv -0.071614 0.116355 -0.049906\nv -0.073264 0.076533 0.023634\nv -0.077197 0.044700 0.017603\nv -0.065598 0.028765 -0.010512\nv -0.058595 0.001969 0.011785\nv -0.036446 0.002265 0.018296\nv -0.034423 0.002810 0.017860\nv -0.025986 0.006296 0.017199\nv -0.004218 0.007182 0.022189\nv -0.000306 0.007215 0.020440\nv -0.000911 0.002654 0.025295\nv 0.008076 0.002348 0.024875\nv 0.015230 0.002934 0.026721\nv -0.059051 0.041099 0.026490\nv -0.067959 0.030572 -0.012612\nv -0.064162 0.028207 -0.009578\nv -0.070256 0.115615 -0.046074\nv -0.060365 0.002144 0.017357\nv -0.050758 0.002203 0.014303\nv -0.045150 0.002305 0.015800\nv -0.035213 0.002254 0.020527\nv -0.031645 0.005812 0.017792\nv -0.007765 0.007216 0.022784\nv -0.004748 0.002760 0.026458\nv 0.003497 0.002400 0.027393\nv 0.006167 0.002772 0.029637\nv 0.010287 0.002680 0.028431\nv 0.016299 0.004477 0.028742\nv -0.077644 0.075643 0.019937\nv -0.072921 0.079798 0.033763\nv -0.087712 0.079801 0.026593\nv -0.041791 0.002227 0.015228\nv -0.033152 0.002287 0.023558\nv -0.027974 0.006435 0.018548\nv -0.026541 0.006791 0.022406\nv -0.017628 0.006870 0.021656\nv -0.012520 0.007244 0.024102\nv -0.008677 0.002726 0.027115\nv -0.004048 0.002385 0.029920\nv 0.000985 0.002462 0.029265\nv 0.010023 0.003673 0.030254\nv 0.013213 0.004018 0.029646\nv -0.077317 0.040381 0.012912\nv -0.074907 0.081999 0.036213\nv -0.078905 0.075250 0.017794\nv -0.085838 0.080211 0.015057\nv -0.076138 0.076294 0.023185\nv -0.073128 0.033434 -0.010922\nv -0.064937 0.027842 -0.005909\nv -0.062811 0.026687 -0.002995\nv -0.065553 0.002567 0.014479\nv -0.054769 0.002278 0.021906\nv -0.044539 0.002434 0.021092\nv -0.029429 0.006251 0.020877\nv -0.012563 0.002777 0.028088\nv -0.009550 0.002568 0.028606\nv 0.000602 0.002829 0.030780\nv 0.005454 0.003675 0.031140\nv 0.010446 0.005309 0.030323\nv -0.069819 0.078855 0.028963\nv -0.080862 0.075168 0.015104\nv -0.077475 0.082189 0.034988\nv -0.075597 0.085083 0.037837\nv -0.070719 0.031319 -0.010423\nv -0.069384 0.029438 -0.006856\nv -0.057638 0.025671 0.002336\nv -0.065982 0.002780 0.020038\nv -0.064556 0.002206 0.018555\nv -0.039474 0.002385 0.025436\nv -0.030848 0.002315 0.026274\nv -0.022525 0.006964 0.024034\nv -0.015717 0.007301 0.025221\nv -0.015320 0.002614 0.029377\nv -0.007849 0.002548 0.032371\nv 0.000240 0.003886 0.032218\nv 0.003191 0.004303 0.031720\nv 0.006165 0.005792 0.031042\nv -0.079640 0.081629 0.032138\nv -0.086959 0.079825 0.008470\nv -0.083958 0.078688 0.027177\nv -0.083684 0.078763 0.017593\nv -0.075990 0.035462 -0.008830\nv -0.074304 0.033584 -0.006960\nv -0.070803 0.029989 -0.003974\nv -0.067134 0.028132 0.000134\nv -0.046512 0.002426 0.026629\nv -0.028790 0.002518 0.028426\nv -0.024642 0.002669 0.029112\nv -0.002743 0.003161 0.032375\nv -0.075610 0.075512 0.022310\nv -0.081824 0.044347 0.008035\nv -0.068647 0.028649 -0.002177\nv -0.060740 0.026082 -0.000716\nv -0.067042 0.003568 0.017031\nv -0.065483 0.002964 0.023242\nv -0.051319 0.002407 0.022082\nv -0.043770 0.002724 0.027648\nv -0.041548 0.002563 0.026292\nv -0.038503 0.002956 0.027774\nv -0.018836 0.002596 0.030493\nv -0.014013 0.002514 0.032237\nv -0.010916 0.003272 0.034763\nv -0.008051 0.003859 0.034707\nv -0.004501 0.004151 0.033869\nv -0.051013 0.034558 0.022002\nv -0.068474 0.033411 0.012042\nv -0.063653 0.027472 0.002571\nv -0.040137 0.003778 0.028263\nv -0.035472 0.002594 0.029377\nv -0.028219 0.002747 0.032641\nv -0.023430 0.002657 0.036703\nv -0.016236 0.002708 0.034751\nv -0.067694 0.046686 0.026261\nv -0.087406 0.084629 0.032548\nv -0.068664 0.080386 0.032027\nv -0.077417 0.077623 0.029059\nv -0.081776 0.042249 -0.011563\nv -0.080179 0.039614 -0.008429\nv -0.053758 0.030247 0.015683\nv -0.074490 0.033535 -0.004214\nv -0.072516 0.032335 -0.001469\nv -0.070894 0.030388 -0.000825\nv -0.058362 0.028032 0.008522\nv -0.064158 0.003370 0.027184\nv -0.063537 0.002573 0.025580\nv -0.060826 0.002339 0.026521\nv -0.050829 0.002485 0.029628\nv -0.048080 0.002824 0.029533\nv -0.043390 0.004065 0.029656\nv -0.083843 0.081846 0.032515\nv -0.036908 0.003721 0.030308\nv -0.015851 0.003507 0.036788\nv -0.010310 0.005767 0.035225\nv -0.082287 0.078336 0.014936\nv -0.050771 0.037646 0.023731\nv -0.071581 0.037222 0.015900\nv -0.077580 0.038362 0.007354\nv -0.079660 0.077108 0.023985\nv -0.089993 0.081203 0.025361\nv -0.079742 0.038478 -0.004581\nv -0.077273 0.037089 -0.007372\nv -0.061856 0.028227 0.006850\nv -0.061048 0.002827 0.029162\nv -0.055522 0.002428 0.029861\nv -0.056799 0.035920 0.022774\nv -0.072094 0.034380 0.008469\nv -0.034590 0.003808 0.033243\nv -0.033179 0.002815 0.032816\nv -0.027698 0.002769 0.036396\nv -0.019205 0.002760 0.036450\nv -0.022304 0.126096 -0.024655\nv -0.059503 0.106066 -0.020696\nv -0.017588 0.127330 -0.025001\nv -0.068501 0.120563 -0.062570\nv -0.029155 0.129242 -0.029139\nv -0.049514 0.114809 -0.016863\nv -0.042850 0.118136 -0.019899\nv -0.013511 0.130041 -0.029092\nv -0.013162 0.132073 -0.032555\nv -0.066607 0.114396 -0.039066\nv -0.011579 0.135886 -0.037906\nv -0.062917 0.131242 -0.073937\nv -0.062483 0.119456 -0.040973\nv -0.035894 0.123857 -0.024915\nv -0.009854 0.134879 -0.036924\nv -0.071879 0.113644 -0.035076\nv -0.068586 0.112933 -0.035312\nv -0.009826 0.139848 -0.042138\nv -0.061542 0.134304 -0.074878\nv -0.063885 0.116564 -0.040016\nv -0.067057 0.119679 -0.059949\nv -0.042604 0.116426 -0.017971\nv -0.065347 0.111075 -0.026186\nv -0.061651 0.132722 -0.073130\nv -0.066578 0.120733 -0.061997\nv -0.063739 0.127165 -0.069523\nv -0.063538 0.128218 -0.071369\nv -0.026928 0.123266 -0.018854\nv -0.064239 0.118006 -0.045120\nv -0.018188 0.132429 -0.032146\nv -0.027810 0.123497 -0.022574\nv -0.068068 0.118384 -0.056916\nv -0.071127 0.112045 -0.029618\nv -0.026259 0.126131 -0.026217\nv -0.063890 0.126768 -0.066536\nv -0.064318 0.115042 -0.035837\nv -0.069422 0.113693 -0.038365\nv -0.066804 0.122956 -0.066335\nv -0.009379 0.142749 -0.043453\nv -0.036413 0.120855 -0.021925\nv -0.069129 0.109982 -0.024671\nv -0.069421 0.117128 -0.053741\nv -0.061572 0.113710 -0.019254\nv -0.047990 0.112030 -0.010791\nv -0.009535 0.137682 -0.040130\nv -0.070391 0.110847 -0.026456\nv -0.034591 0.119681 -0.016390\nv -0.072499 0.112418 -0.030472\nv -0.065237 0.124378 -0.066913\nv -0.066294 0.122009 -0.064809\nv -0.063892 0.111272 -0.024279\nv -0.066100 0.113008 -0.033009\nv -0.041067 0.116350 -0.016415\nv -0.067815 0.115418 -0.044114\nv -0.065164 0.121904 -0.056772\nv -0.062599 0.109771 -0.021210\nv -0.026198 0.123651 -0.020945\nv -0.063566 0.126509 -0.060530\nv -0.020735 0.128586 -0.028250\nv -0.014830 0.133913 -0.034342\nv -0.066888 0.109571 -0.023617\nv -0.062942 0.117078 -0.034934\nv -0.065727 0.108134 -0.022320\nv -0.050330 0.111659 -0.013384\nv -0.063310 0.111156 -0.022674\nv -0.063373 0.112572 -0.026219\nv -0.031510 0.121638 -0.020730\nv -0.070355 0.117206 -0.054563\nv -0.017797 0.129008 -0.028534\nv -0.069389 0.112463 -0.033069\nv -0.064167 0.114152 -0.032199\nv -0.062530 0.130237 -0.070390\nv -0.067306 0.116558 -0.048310\nv -0.036572 0.119214 -0.019199\nv -0.047233 0.115704 -0.017699\nv -0.021326 0.125691 -0.022831\nv -0.063220 0.114097 -0.028650\nv -0.065647 0.116073 -0.043338\nv -0.067113 0.118087 -0.052918\nv -0.065207 0.118673 -0.049424\nv -0.030878 0.124840 -0.025717\nv -0.046966 0.113392 -0.014786\nv -0.070821 0.119891 -0.060197\nv -0.062815 0.121231 -0.047386\nv -0.065549 0.112229 -0.029708\nv -0.023099 0.124804 -0.020419\nv -0.071310 0.118507 -0.058151\nv -0.039643 0.120223 -0.021799\nvt -0.100607 0.974489\nvt -0.090082 1.003329\nvt -0.074080 0.989825\nvt 0.997485 0.031388\nvt 0.997893 -0.010341\nvt 0.988386 0.018583\nvt 0.094971 -0.002317\nvt 0.029570 -0.013558\nvt 0.071212 0.039131\nvt 0.069068 -0.033794\nvt 0.034158 0.067142\nvt 0.011407 0.030423\nvt -0.010540 0.070392\nvt -0.368964 -0.015764\nvt -0.356545 0.042010\nvt -0.332974 -0.007374\nvt -0.041326 0.101497\nvt -0.061766 0.142755\nvt -0.032991 0.137846\nvt -0.317890 -0.124907\nvt -0.293453 -0.159289\nvt -0.292074 -0.135252\nvt -0.048650 0.148499\nvt -0.259120 0.235085\nvt -0.235932 0.242019\nvt -0.257608 0.222582\nvt -0.326521 -0.041636\nvt -0.296894 -0.030770\nvt -0.307355 -0.048859\nvt 1.008406 0.003559\nvt -0.155367 1.369103\nvt -0.161947 1.385657\nvt -0.177709 1.360623\nvt -0.360755 -0.243822\nvt -0.359177 -0.208783\nvt -0.340930 -0.207810\nvt -0.033000 0.161646\nvt -0.055974 0.175126\nvt -0.338444 -0.029666\nvt 0.947854 0.079664\nvt 0.976799 0.120820\nvt 0.977007 0.066090\nvt -0.309183 -0.452921\nvt -0.307461 -0.432304\nvt -0.281904 -0.457996\nvt -0.092892 -0.112584\nvt -0.119930 -0.097276\nvt -0.090743 -0.091416\nvt 0.030104 0.102013\nvt 0.066770 0.105241\nvt -0.311463 -0.318130\nvt -0.322933 -0.287385\nvt -0.295442 -0.276533\nvt 0.118278 0.074425\nvt 0.095895 0.102706\nvt 0.116400 0.117695\nvt 1.156975 0.063010\nvt 1.174555 0.078651\nvt 1.178826 0.045348\nvt -0.320512 -0.238947\nvt -0.053417 -0.140937\nvt -0.049844 -0.123594\nvt -0.024122 -0.131263\nvt -0.186079 0.508835\nvt -0.175952 0.494536\nvt -0.191031 0.493091\nvt -0.000858 -0.121231\nvt -0.020430 -0.138269\nvt 0.001495 -0.169539\nvt 0.026411 0.784338\nvt 0.007950 0.802567\nvt -0.002128 0.775119\nvt -0.045070 0.006571\nvt -0.071176 0.034462\nvt -0.054705 0.034138\nvt -0.227928 0.021889\nvt -0.244284 0.017942\nvt -0.241053 0.046725\nvt 1.033877 0.073524\nvt 1.065528 0.083650\nvt 1.039527 0.043895\nvt 0.988761 0.113813\nvt -0.339799 -0.238821\nvt 1.349464 -0.140097\nvt 1.340474 -0.102935\nvt 1.324084 -0.118009\nvt 0.802664 -0.001245\nvt 0.806943 0.038892\nvt 0.829093 0.028855\nvt -0.032812 0.025526\nvt -0.329436 -0.367410\nvt -0.313604 -0.383608\nvt -0.303748 -0.365716\nvt 0.110675 -0.046708\nvt 0.487547 -0.056360\nvt 0.501606 -0.063029\nvt 0.487980 -0.083234\nvt -0.026903 0.103020\nvt 1.050558 0.162566\nvt 1.062655 0.177966\nvt 1.084146 0.141475\nvt -0.012437 0.124329\nvt 0.075236 0.070202\nvt 0.012987 0.115856\nvt -0.086374 0.183614\nvt -0.094796 0.168389\nvt -0.080986 0.165412\nvt 0.756052 -0.006192\nvt 0.766713 0.052759\nvt 0.772545 0.023147\nvt 1.123704 0.032226\nvt 1.149592 0.031918\nvt 1.145004 0.010860\nvt 0.877269 0.028618\nvt 0.887486 -0.003218\nvt 0.862318 -0.012739\nvt 0.797951 0.014977\nvt -0.060316 0.114668\nvt 0.679956 0.160619\nvt 0.671498 0.176034\nvt 0.686437 0.176592\nvt 0.267289 0.066490\nvt 0.232863 0.066528\nvt 0.259964 0.114587\nvt 1.196078 -0.063650\nvt 1.185529 -0.048113\nvt 1.163766 -0.081551\nvt 0.084901 0.122908\nvt 0.059971 0.156504\nvt 0.085210 0.146973\nvt 0.133377 0.018567\nvt 0.159834 0.055747\nvt -0.210441 1.205691\nvt -0.195978 1.217116\nvt -0.191289 1.195143\nvt -0.292629 -0.327605\nvt 0.745904 0.054807\nvt 0.728871 0.082710\nvt 0.730006 0.044364\nvt 0.930714 0.009523\nvt 0.970585 -0.020746\nvt 0.979675 0.015834\nvt 1.299283 0.157158\nvt 1.281228 0.173228\nvt 1.290695 0.145278\nvt 1.300100 0.130681\nvt 1.294402 0.114751\nvt 0.125238 0.147761\nvt 0.118805 0.173672\nvt 0.157255 0.175072\nvt -0.352624 -0.064505\nvt -0.359638 -0.041545\nvt 1.309011 0.037286\nvt 1.288103 0.048866\nvt 1.288665 0.028750\nvt 1.302541 0.075732\nvt -0.333350 -0.354950\nvt -0.356944 -0.334644\nvt -0.339875 -0.318593\nvt 0.233724 -0.213755\nvt 0.257839 -0.219838\nvt 0.234267 -0.235088\nvt 0.902569 0.056049\nvt 0.910757 -0.000188\nvt -0.115465 0.217121\nvt -0.150037 0.187470\nvt -0.131277 0.147444\nvt -0.400984 1.115544\nvt -0.387842 1.132370\nvt -0.408245 1.137813\nvt 0.174958 0.101447\nvt 0.145446 0.094585\nvt 0.148064 0.125679\nvt 1.191807 0.019091\nvt 1.169979 0.018613\nvt 0.584979 0.072922\nvt 0.596746 0.101958\nvt 0.621784 0.090379\nvt 0.480529 0.132998\nvt 0.495315 0.108356\nvt 0.473399 0.115342\nvt -0.330014 -0.419758\nvt -0.347586 -0.424763\nvt -0.349898 -0.398455\nvt 1.200398 -0.002993\nvt 1.229640 -0.007364\nvt 1.204756 -0.038473\nvt -0.425723 1.255970\nvt -0.455637 1.262591\nvt -0.435062 1.276556\nvt 1.413642 -0.352499\nvt 1.412125 -0.327605\nvt 1.395692 -0.316000\nvt -0.389663 1.099366\nvt -0.373162 1.113025\nvt -0.377055 1.145627\nvt -0.389132 1.191644\nvt -0.405843 1.157364\nvt 1.084697 0.108568\nvt 1.099658 0.077254\nvt 1.023580 0.044216\nvt 0.052291 0.124792\nvt 0.029487 0.143297\nvt -0.198181 1.334810\nvt -0.187587 1.373917\nvt -0.308514 0.765304\nvt -0.299772 0.784484\nvt -0.277270 0.759219\nvt -0.199401 0.200586\nvt -0.215478 0.196295\nvt -0.220796 0.226971\nvt -0.370469 1.183621\nvt -0.364078 1.228703\nvt -0.381185 1.258940\nvt -0.403967 1.207117\nvt -0.373717 0.217081\nvt -0.400362 0.199191\nvt -0.381185 0.236468\nvt 0.829334 0.062870\nvt 0.603711 -0.143106\nvt 0.599357 -0.134667\nvt 0.615497 -0.127370\nvt -0.352696 -0.154958\nvt -0.215045 1.267355\nvt -0.183998 1.266426\nvt -0.203073 1.248111\nvt -0.209877 0.018570\nvt -0.234435 0.005868\nvt 0.187281 0.005366\nvt 0.209847 0.042941\nvt 0.195800 0.073233\nvt 0.744951 0.045646\nvt -0.037895 0.581383\nvt -0.054709 0.537408\nvt -0.030025 0.567212\nvt -0.292501 0.016706\nvt 0.792653 0.033331\nvt -0.207507 0.766524\nvt -0.222453 0.784741\nvt -0.188848 0.778721\nvt 1.305696 -0.131106\nvt 1.334470 -0.125353\nvt 1.329494 -0.152100\nvt -0.091022 1.328190\nvt -0.084714 1.357195\nvt -0.056789 1.334900\nvt -0.341120 1.485846\nvt -0.360724 1.486427\nvt -0.347586 1.497270\nvt -0.290142 0.859180\nvt -0.309401 0.893010\nvt -0.287508 0.907109\nvt -0.109780 0.781803\nvt -0.089589 0.797014\nvt -0.088619 0.769152\nvt -0.032078 0.060679\nvt -0.329614 -0.382181\nvt -0.307375 -0.406050\nvt 1.077178 -0.009399\nvt 1.063841 0.020035\nvt 1.094859 0.001818\nvt 0.095108 0.175267\nvt -0.289726 0.992020\nvt -0.297577 1.037946\nvt -0.273429 1.020942\nvt -0.365058 1.170354\nvt -0.359889 1.193228\nvt -0.341167 1.170107\nvt -0.291323 -0.413253\nvt -0.302016 -0.409306\nvt -0.301290 -0.428249\nvt -0.417383 -0.028283\nvt -0.383613 -0.040855\nvt -0.393615 -0.049801\nvt -0.359930 1.171354\nvt -0.343593 1.260744\nvt 0.849363 -0.065396\nvt 0.839960 -0.013461\nvt 0.825563 -0.048573\nvt -0.101041 -0.053417\nvt -0.082133 -0.068378\nvt -0.081804 -0.058170\nvt 0.165976 0.160514\nvt 1.101514 0.238622\nvt 1.083188 0.213040\nvt 1.074187 0.235072\nvt -0.054012 1.421325\nvt -0.076676 1.444221\nvt -0.038156 1.463558\nvt -0.209877 1.329990\nvt 0.161365 -0.024236\nvt 0.091414 -0.091085\nvt 0.048947 -0.084188\nvt 0.073628 -0.144517\nvt -0.362206 1.090216\nvt -0.353539 1.129050\nvt -0.344667 1.146461\nvt -0.116620 -0.105300\nvt -0.091022 -0.126575\nvt -0.094569 -0.106164\nvt -0.054912 -0.066338\nvt 0.659811 0.092235\nvt 0.697025 0.099381\nvt 0.681280 0.120407\nvt 0.870803 -0.027860\nvt 0.873968 0.045578\nvt 0.853293 0.004520\nvt -0.055654 0.091336\nvt -0.069959 0.123301\nvt -0.065353 0.088334\nvt -0.288396 1.180990\nvt -0.273314 1.232038\nvt -0.252179 1.206745\nvt -0.362038 1.063518\nvt -0.331011 1.071139\nvt -0.342487 1.098255\nvt -0.332691 1.213182\nvt 1.421118 -0.478968\nvt 1.447160 -0.472720\nvt 1.421216 -0.472038\nvt 1.210958 0.177115\nvt 1.241084 0.160946\nvt 1.219125 0.150538\nvt 1.287416 -0.166774\nvt 1.251954 -0.152070\nvt 1.272298 -0.194965\nvt -0.337754 0.974889\nvt -0.353120 0.982267\nvt -0.354210 0.956725\nvt -0.319793 1.105958\nvt -0.323913 1.128156\nvt 1.218034 -0.030615\nvt 1.229734 -0.027413\nvt 1.228631 -0.003376\nvt 0.204505 0.153207\nvt 0.189012 0.174091\nvt 0.184666 0.136275\nvt 1.228540 0.012254\nvt 1.238696 0.036930\nvt 1.252977 0.013801\nvt 0.979267 0.048678\nvt 1.002993 0.097865\nvt 0.976518 0.095213\nvt 1.158396 0.076878\nvt 1.170259 0.120552\nvt 1.146412 0.101793\nvt 0.197325 -0.051754\nvt 0.221667 -0.026509\nvt -0.300676 -0.223171\nvt -0.294122 -0.252326\nvt -0.282095 -0.229655\nvt -0.323972 1.239707\nvt -0.166602 -0.057430\nvt -0.136830 -0.079171\nvt -0.126334 -0.068552\nvt 0.939709 -0.047375\nvt 0.965866 -0.050213\nvt 1.364731 -0.397803\nvt 1.362127 -0.436989\nvt 1.391541 -0.411582\nvt -0.099287 0.649853\nvt -0.109448 0.668766\nvt -0.091181 0.665399\nvt 1.197681 0.067050\nvt -0.329723 0.950784\nvt -0.314713 0.991982\nvt -0.343451 0.990413\nvt 0.204015 0.959956\nvt 0.187258 0.962049\nvt 0.195208 0.942553\nvt -0.234965 0.796980\nvt -0.221119 0.814197\nvt -0.210440 0.797748\nvt 0.161674 0.601507\nvt 0.185594 0.617704\nvt 0.164747 0.629956\nvt 0.434985 0.649439\nvt 0.417300 0.646810\nvt 0.439594 0.610312\nvt -0.303512 0.953421\nvt -0.324961 0.915508\nvt -0.289701 1.406869\nvt -0.276468 1.399598\nvt -0.291560 1.374951\nvt -0.330277 1.007619\nvt 0.232829 0.959952\nvt 0.115023 0.592789\nvt 0.147379 0.613529\nvt 0.103423 0.617429\nvt 0.170671 0.581405\nvt 0.196577 0.578808\nvt 0.156571 0.258052\nvt 0.181448 0.257349\nvt 0.170671 0.278552\nvt 0.181448 0.564476\nvt 0.156571 0.565193\nvt 0.174575 0.552409\nvt -0.340893 -0.164505\nvt -0.319665 -0.182231\nvt -0.331525 -0.158678\nvt 0.208571 0.857537\nvt 0.219178 0.873619\nvt 0.196005 0.885069\nvt 0.595074 -0.047629\nvt 0.633774 -0.060250\nvt 0.606267 -0.028768\nvt 1.150238 0.076655\nvt 1.146666 0.118115\nvt -0.430191 1.239254\nvt 0.208249 0.125751\nvt -0.321943 0.880678\nvt -0.307717 0.899471\nvt -0.309613 1.007516\nvt 0.159339 1.071270\nvt 0.194481 1.048584\nvt 0.187818 1.087010\nvt -0.181938 -0.027413\nvt -0.173817 -0.018809\nvt -0.176226 -0.002410\nvt 1.074946 0.047564\nvt 1.119137 0.058952\nvt -0.282139 -0.122234\nvt -0.278599 -0.135472\nvt 0.733777 -0.102128\nvt 0.749615 -0.066564\nvt 0.711271 -0.078866\nvt 1.305420 -0.315608\nvt 1.305240 -0.344027\nvt 1.342628 -0.334906\nvt 0.247533 0.012364\nvt -0.303878 0.871916\nvt -0.294667 1.004806\nvt 0.136526 0.818542\nvt 0.111446 0.807293\nvt 0.124304 0.782136\nvt 0.218846 0.719971\nvt 0.177490 0.697877\nvt 0.205553 0.688293\nvt 0.200163 0.661081\nvt 0.190353 0.678560\nvt 0.166598 0.656919\nvt 0.189756 1.116429\nvt 0.157255 1.109369\nvt 0.203897 0.254916\nvt 0.196577 0.277762\nvt 0.206640 0.550797\nvt 0.203897 0.564242\nvt 0.486215 -0.051421\nvt 0.490417 -0.034072\nvt 0.474743 -0.043214\nvt 0.881941 -0.006790\nvt 0.769050 -0.096310\nvt 0.789254 -0.064854\nvt -0.020979 -0.021433\nvt 0.588927 0.196295\nvt 0.588550 0.180587\nvt 0.582865 0.209320\nvt 0.018892 0.499976\nvt 0.068161 0.537058\nvt 0.045416 0.515177\nvt -0.286517 0.931212\nvt -0.289020 0.955823\nvt 0.196045 0.770689\nvt 0.182231 0.801599\nvt 0.171534 0.771162\nvt 0.268994 0.970540\nvt 0.300444 0.977728\nvt 0.280170 1.004216\nvt 0.177455 0.733959\nvt 0.161007 0.753939\nvt 0.142252 0.734341\nvt 0.169132 0.807611\nvt 0.156357 0.785574\nvt 0.167058 0.843951\nvt 0.158836 0.872779\nvt 0.131073 0.840442\nvt 0.108386 0.554489\nvt 0.117187 0.574927\nvt 0.113895 0.730973\nvt 0.134213 0.761025\nvt 0.133040 0.664014\nvt 0.110944 0.648049\nvt 0.123593 0.630796\nvt 0.194557 0.725995\nvt -0.310397 1.252964\nvt -0.297696 1.254949\nvt -0.303952 1.287883\nvt 1.186314 0.011138\nvt 1.218972 0.015354\nvt 1.182815 0.038236\nvt 0.772457 0.031978\nvt 0.773276 -0.000010\nvt 0.814698 0.011612\nvt 0.992580 -0.034583\nvt -0.392867 0.112640\nvt -0.435843 0.116778\nvt -0.396995 0.150432\nvt -0.303884 0.837614\nvt -0.289307 0.867414\nvt -0.268794 0.899222\nvt 0.154699 0.661868\nvt 0.174095 0.673878\nvt 0.145701 0.676807\nvt 0.139611 1.061625\nvt 0.118854 1.075698\nvt 0.127434 0.690366\nvt 0.203540 0.644901\nvt 0.208506 0.614778\nvt 0.211163 0.777032\nvt 0.213237 0.814873\nvt 0.807919 -0.082113\nvt 0.862690 -0.085142\nvt 0.872881 -0.064533\nvt -0.010137 1.422476\nvt -0.053016 1.417243\nvt -0.047512 1.396374\nvt 0.662658 -0.038841\nvt 0.654085 -0.019771\nvt -0.067989 0.078875\nvt -0.084617 0.121172\nvt -0.093205 0.147702\nvt 0.134780 0.007109\nvt 0.135236 0.046426\nvt 0.127887 0.044906\nvt -0.282023 0.820087\nvt 0.143600 0.694205\nvt 0.198556 -0.112641\nvt 0.183505 -0.094882\nvt 0.183654 -0.134760\nvt 0.325356 0.537341\nvt 0.313441 0.546878\nvt 0.343928 0.569736\nvt 0.148360 0.632539\nvt 0.188027 0.287004\nvt 0.215164 0.278382\nvt 0.195208 0.268246\nvt 0.238170 0.885327\nvt 0.210415 0.910235\nvt 0.233678 0.898028\nvt 0.618622 0.046550\nvt 0.634304 0.048607\nvt 0.635588 0.016736\nvt -0.098026 -0.061741\nvt -0.135324 -0.058047\nvt -0.126719 -0.045286\nvt -0.264412 0.868909\nvt -0.268363 0.930293\nvt 0.439850 0.587564\nvt 0.469780 0.618148\nvt 0.111630 0.834465\nvt 0.229786 0.625107\nvt 0.214235 0.589296\nvt 0.272002 0.910983\nvt 0.255860 0.961994\nvt 0.244966 0.929206\nvt 0.161712 0.969338\nvt 0.153839 1.000907\nvt 0.135085 0.992275\nvt -0.251610 0.132517\nvt -0.238751 0.075859\nvt -0.267164 0.091579\nvt 0.801951 0.081262\nvt 0.799948 0.056797\nvt 0.785371 0.057573\nvt -0.275646 0.769845\nvt -0.273401 0.791300\nvt -0.308096 0.801417\nvt -0.261893 0.959313\nvt -0.262881 0.982382\nvt -0.270139 1.018371\nvt 0.935385 0.044169\nvt 0.178039 1.018518\nvt 0.152225 1.036994\nvt 0.152774 0.955335\nvt 0.148068 0.967440\nvt 0.446505 -0.036328\nvt 0.445013 -0.007078\nvt 0.427525 -0.027233\nvt 0.191151 0.298601\nvt 1.220496 -0.069122\nvt 1.207503 -0.045925\nvt 0.252294 1.004565\nvt 0.262272 1.041974\nvt 0.244209 1.032374\nvt 0.120459 0.897074\nvt 0.153892 0.923489\nvt 0.107483 0.917080\nvt 1.054327 0.005754\nvt -0.262808 -0.014229\nvt -0.244271 -0.009734\nvt -0.247315 -0.036132\nvt 1.206756 0.108491\nvt 1.216858 0.083565\nvt 1.204029 0.085177\nvt -0.014738 0.159322\nvt -0.260082 0.815342\nvt -0.247937 0.837968\nvt 0.184661 0.986505\nvt 0.170864 0.956625\nvt 0.120537 1.027331\nvt 0.805094 -0.020282\nvt 0.766654 -0.043403\nvt 0.256690 1.077888\nvt 0.240640 1.054304\nvt -0.316938 -0.102935\nvt -0.330077 -0.067558\nvt -0.311450 -0.079182\nvt 0.013747 -0.033997\nvt -0.247678 0.876592\nvt -0.237194 0.908082\nvt -0.250294 0.931774\nvt -0.239451 0.977748\nvt -0.246452 1.027997\nvt -0.262662 1.036183\nvt 1.283191 -0.293869\nvt 1.279187 -0.317725\nvt 0.117187 0.265374\nvt 0.151616 0.264845\nvt 0.144720 0.283057\nvt -0.242632 0.779225\nvt -0.237784 0.801933\nvt 0.103257 0.992616\nvt 0.187258 0.248350\nvt 0.170864 0.247250\nvt 0.180163 0.262922\nvt 0.240391 0.945169\nvt 1.273818 -0.255435\nvt 1.286577 -0.259857\nvt 1.267232 -0.263669\nvt 0.133255 1.099212\nvt 0.115023 0.283007\nvt 0.488798 -0.005243\nvt 0.204015 0.259122\nvt 0.206202 0.228103\nvt 0.906408 -0.090865\nvt 0.947673 -0.079220\nvt -0.066861 -0.108490\nvt -0.043249 -0.107883\nvt -0.239388 0.850733\nvt -0.228048 0.891557\nvt -0.226776 0.948934\nvt -0.219586 0.997573\nvt -0.231369 1.040533\nvt 0.171621 0.906505\nvt 0.191151 0.922458\nvt 0.180163 0.945789\nvt 0.223722 0.263292\nvt -0.110574 1.345106\nvt -0.382247 1.053390\nvt -0.374272 1.073422\nvt -0.364302 1.047303\nvt -0.388199 1.125284\nvt -0.415737 1.135919\nvt -0.384688 1.147358\nvt -0.221404 0.869758\nvt -0.095654 -0.087554\nvt 0.910868 -0.037875\nvt 0.161674 0.297244\nvt 0.147379 0.311741\nvt 0.100462 0.696337\nvt 0.436747 0.680960\nvt -0.322006 -0.394592\nvt -0.284021 -0.176293\nvt -0.297215 -0.181820\nvt -0.285049 -0.201129\nvt -0.117844 -0.082231\nvt -0.225521 0.209320\nvt -0.244295 0.216348\nvt -0.024726 1.442928\nvt -0.217370 0.772021\nvt -0.249093 0.763278\nvt -0.226877 0.820692\nvt -0.218796 0.922558\nvt 0.203498 1.073136\nvt 0.230767 1.087140\nvt 0.213632 1.101777\nvt -0.403989 1.169726\nvt -0.423579 1.179023\nvt -0.392499 1.187337\nvt -0.054981 1.405290\nvt -0.032542 1.404430\nvt -0.220928 0.742232\nvt -0.129619 0.222966\nvt -0.119986 0.236421\nvt -0.144788 0.232225\nvt -0.217461 0.816873\nvt -0.212756 0.845705\nvt -0.199138 1.014156\nvt -0.215499 1.037914\nvt 0.255860 0.262967\nvt 0.231422 0.239875\nvt 0.232829 0.267376\nvt 0.215164 0.930403\nvt 0.969895 -0.066846\nvt 0.980977 -0.098385\nvt 0.995791 -0.077687\nvt 0.160589 0.291589\nvt -0.260430 1.228292\nvt -0.255531 1.242982\nvt 0.297082 0.922902\nvt 0.632868 -0.200295\nvt 0.668260 -0.188887\nvt 0.646944 -0.173659\nvt -0.025255 1.343708\nvt -0.001791 1.366696\nvt 0.012451 1.360467\nvt 1.244637 0.102458\nvt 1.239674 0.085692\nvt 0.459313 0.631132\nvt 0.470219 0.664381\nvt -0.214096 0.532835\nvt -0.238147 0.547910\nvt -0.240004 0.528670\nvt -0.205627 0.562808\nvt -0.235932 0.572864\nvt 0.465697 0.678595\nvt -0.210690 0.909904\nvt 0.268994 0.252802\nvt 0.231422 0.987078\nvt 0.452362 0.709629\nvt 0.460222 0.731289\nvt 0.448697 0.720471\nvt 1.195163 0.066323\nvt -0.084615 0.696210\nvt -0.118583 -0.200099\nvt -0.106089 -0.214615\nvt -0.129167 -0.207922\nvt 0.279513 0.883378\nvt -0.043039 0.527762\nvt -0.067552 0.509202\nvt -0.040673 0.513425\nvt -0.296463 -0.108121\nvt -0.308514 -0.150684\nvt -0.286717 -0.133408\nvt -0.414013 1.044021\nvt -0.405110 1.058254\nvt -0.395460 1.023866\nvt -0.201719 0.807625\nvt -0.197913 0.828156\nvt -0.208792 0.879677\nvt -0.206773 0.948315\nvt -0.205706 0.996344\nvt -0.197016 1.056214\nvt -0.230676 1.049895\nvt 0.114316 0.962485\nvt 1.207666 -0.020099\nvt 0.731305 -0.209820\nvt 0.724554 -0.188961\nvt 0.705096 -0.192598\nvt -0.146481 -0.024887\nvt -0.135556 -0.043866\nvt -0.120648 -0.036483\nvt 1.241543 -0.135472\nvt 1.239199 -0.159289\nvt -0.201442 0.231001\nvt -0.203541 0.181291\nvt -0.200418 0.160619\nvt -0.191826 0.176592\nvt -0.045022 1.364948\nvt -0.194686 0.768135\nvt -0.197795 0.892666\nvt -0.197573 0.968205\nvt 0.252294 0.222111\nvt 0.225233 0.222378\nvt -0.290028 -0.389552\nvt -0.301950 -0.370003\nvt -0.286836 -0.352499\nvt 0.245847 1.025256\nvt 0.208083 0.997377\nvt 0.222842 1.029281\nvt -0.185004 0.861349\nvt -0.180939 0.913144\nvt -0.185753 0.941708\nvt -0.187218 0.982262\nvt -0.173483 1.031400\nvt -0.200424 0.185558\nvt -0.168426 -0.077318\nvt -0.138509 -0.092332\nvt 0.214043 1.005707\nvt 0.229208 1.040214\nvt -0.343524 -0.112944\nvt -0.326503 -0.137091\nvt -0.205627 0.251723\nvt -0.180992 0.227880\nvt -0.184768 0.597250\nvt -0.184555 0.611571\nvt -0.199401 0.597708\nvt -0.308921 -0.257626\nvt -0.180239 0.793341\nvt -0.183065 0.847130\nvt 0.115236 0.679288\nvt 0.182946 0.854387\nvt 0.293700 0.998058\nvt 0.301496 1.028275\nvt 0.284599 1.017910\nvt 0.393587 0.605551\nvt 0.475931 0.646815\nvt 0.300245 0.501089\nvt 0.300339 0.514817\nvt 0.312547 0.514470\nvt -0.173324 1.074711\nvt -0.169310 1.060171\nvt -0.158087 1.087049\nvt 0.424838 0.594149\nvt -0.216373 0.703486\nvt -0.207329 0.715574\nvt -0.192522 0.705562\nvt -0.177265 0.823150\nvt -0.176302 0.888956\nvt -0.174650 0.963840\nvt 0.416643 0.576107\nvt 0.480529 0.716435\nvt -0.051851 0.105775\nvt 0.257078 0.783594\nvt 0.279942 0.780718\nvt 0.272057 0.805874\nvt -0.170856 0.209397\nvt -0.184768 0.202348\nvt -0.170856 0.595146\nvt 0.847857 0.046025\nvt 0.843530 0.026050\nvt 1.266978 0.077372\nvt -0.164130 0.773070\nvt -0.175051 0.756820\nvt -0.163867 0.839818\nvt -0.168333 0.865268\nvt -0.172597 1.001843\nvt -0.263738 1.050875\nvt 0.151616 0.574693\nvt -0.175780 1.308434\nvt -0.170451 1.340750\nvt 1.448460 -0.442157\nvt 1.463499 -0.430419\nvt 1.417888 -0.399536\nvt -0.167108 0.612598\nvt -0.170773 0.629081\nvt -0.304127 -0.317725\nvt -0.319883 -0.323341\nvt -0.310648 -0.345014\nvt -0.162838 0.820310\nvt -0.158236 0.910932\nvt -0.162305 0.942233\nvt 0.282301 0.920868\nvt 0.233724 0.933056\nvt 0.253703 0.948892\nvt -0.064106 0.520351\nvt -0.082221 0.547790\nvt -0.050430 0.548934\nvt 0.090259 -0.190827\nvt 0.075862 -0.180760\nvt 0.051701 -0.198026\nvt 0.283552 1.058989\nvt 0.214235 0.279824\nvt 0.307301 0.885719\nvt -0.145902 1.402800\nvt 0.029839 1.386700\nvt -0.012960 1.389426\nvt 0.025669 1.406553\nvt -0.177100 0.557309\nvt -0.155190 0.559928\nvt -0.180992 0.577391\nvt -0.381570 1.067380\nvt -0.154698 0.796785\nvt -0.152404 0.880995\nvt -0.153867 0.973756\nvt 1.496558 -0.247714\nvt 1.476077 -0.257499\nvt 1.486463 -0.258409\nvt 0.074952 1.410296\nvt 0.086912 1.437343\nvt 0.088900 1.422559\nvt -0.298536 -0.398888\nvt 0.144720 0.589534\nvt -0.147300 0.588782\nvt -0.152145 0.748380\nvt -0.141631 0.987919\nvt -0.133245 1.020470\nvt -0.139064 1.070172\nvt 0.280170 0.215873\nvt 0.189132 0.833762\nvt 1.163433 -0.022180\nvt 1.180909 -0.027236\nvt -0.142440 0.619131\nvt 1.172574 -0.010617\nvt 1.186676 -0.029135\nvt 1.161296 -0.028941\nvt -0.155126 0.717145\nvt -0.131986 0.726364\nvt -0.139859 0.770811\nvt -0.141033 0.820697\nvt -0.145154 0.849650\nvt -0.143447 0.950221\nvt -0.119412 1.046667\nvt -0.139064 0.154875\nvt -0.158087 0.131281\nvt -0.169310 0.160425\nvt 0.505536 0.015307\nvt 0.483978 0.024027\nvt 0.236744 0.598318\nvt 0.223722 0.580016\nvt -0.139451 1.384793\nvt -0.133121 0.666377\nvt -0.147184 0.662489\nvt -0.128383 0.793861\nvt -0.126794 0.929138\nvt -0.120944 0.152904\nvt -0.138575 0.119399\nvt 0.676891 -0.011046\nvt 0.659287 0.019143\nvt 0.452362 0.128547\nvt 0.570585 0.055607\nvt 0.583933 0.061589\nvt 0.590640 0.041604\nvt 1.242492 0.017794\nvt 1.265668 0.020426\nvt 1.270042 0.045032\nvt -0.134029 0.559735\nvt -0.126122 0.598041\nvt -0.131538 0.688732\nvt -0.155969 0.677805\nvt -0.132350 0.842109\nvt -0.137283 0.874521\nvt -0.127220 0.904777\nvt -0.121168 0.966410\nvt -0.120944 1.075771\nvt 0.662233 -0.068408\nvt 0.303977 0.851593\nvt -0.114647 1.416278\nvt -0.126719 1.422487\nvt -0.116523 0.622907\nvt -0.117437 0.811896\nvt -0.127802 0.863289\nvt -0.109312 1.009720\nvt 0.225233 0.998053\nvt -0.129046 1.383336\nvt -0.119367 1.400589\nvt 0.600349 0.153134\nvt 0.597736 0.175284\nvt 0.609646 0.167671\nvt 0.189756 0.168328\nvt 0.244158 0.153661\nvt 1.246357 -0.013455\nvt 1.245729 -0.037601\nvt 1.228820 -0.036248\nvt -0.125071 0.567418\nvt -0.111803 0.663022\nvt -0.115938 0.714405\nvt -0.095276 0.722284\nvt -0.115216 0.763867\nvt -0.116319 0.829583\nvt -0.104101 0.853241\nvt -0.117388 0.920099\nvt -0.221297 1.230109\nvt -0.094802 0.693347\nvt -0.102407 0.801036\nvt 0.206202 0.988329\nvt -0.098026 1.444770\nvt -0.103244 1.431704\nvt -0.116314 0.557375\nvt -0.107599 0.563178\nvt -0.093685 0.623102\nvt -0.091295 0.760844\nvt -0.105770 0.879237\nvt -0.097536 0.903271\nvt -0.101569 0.947714\nvt -0.100775 0.983806\nvt -0.104259 1.407245\nvt -0.091604 0.585540\nvt -0.090944 0.598076\nvt -0.089969 0.791898\nvt -0.095194 0.820296\nvt -0.087603 0.932229\nvt -0.092943 1.017426\nvt -0.094748 1.050087\nvt -0.093205 1.083330\nvt -0.109571 1.099354\nvt 0.532755 -0.156139\nvt 0.545508 -0.132022\nvt 0.508923 -0.122807\nvt 0.090373 1.092508\nvt -0.093254 1.428050\nvt 1.379086 -0.455688\nvt 1.410467 -0.432843\nvt -0.082694 0.668771\nvt -0.081520 0.846350\nvt -0.089633 0.872558\nvt -0.079931 0.884040\nvt -0.085182 0.966956\nvt -0.071066 1.064665\nvt 0.161235 -0.051346\nvt -0.069942 0.649266\nvt -0.080769 0.734054\nvt -0.078045 0.856209\nvt -0.080933 1.447423\nvt 1.427742 -0.064367\nvt 1.436874 -0.086928\nvt 1.442046 -0.073993\nvt -0.071680 0.819931\nvt -0.070115 0.919867\nvt -0.064572 0.939360\nvt -0.066233 0.997110\nvt 0.001738 -0.124801\nvt 0.032502 -0.151278\nvt 0.033933 -0.127161\nvt -0.077816 1.437355\nvt 1.085070 0.126147\nvt 1.114166 0.104449\nvt 1.108866 0.116467\nvt -0.061102 -0.098009\nvt -0.065421 0.615721\nvt -0.068574 0.689447\nvt -0.059701 0.809702\nvt -0.061280 0.965598\nvt -0.055974 1.047474\nvt 0.133255 0.189023\nvt 0.829349 0.006110\nvt 0.822110 -0.013089\nvt -0.057132 0.722769\nvt -0.064660 0.762544\nvt -0.057034 0.793624\nvt -0.065548 0.844945\nvt -0.054423 0.856067\nvt -0.064432 0.907810\nvt -0.038162 1.002475\nvt 0.517946 -0.047629\nvt 0.521894 -0.027055\nvt 0.586666 -0.027055\nvt 0.218029 0.664224\nvt -0.065662 1.451660\nvt -0.069469 1.460839\nvt -0.071959 1.471275\nvt -0.060642 1.466087\nvt -0.053427 1.483505\nvt 0.792953 0.081162\nvt 0.752340 0.088603\nvt 0.757893 0.071980\nvt 1.276474 -0.332479\nvt 1.286100 -0.329877\nvt 1.282051 -0.353443\nvt -0.049225 0.634172\nvt -0.040343 0.666888\nvt -0.047964 0.873167\nvt 0.875382 0.031250\nvt 0.916858 -0.006875\nvt 0.489354 0.697684\nvt -0.258407 0.119184\nvt -0.250126 0.088647\nvt -0.265250 0.102213\nvt -0.069469 -0.075162\nvt -0.060642 -0.080582\nvt -0.071959 -0.087935\nvt 0.493306 -0.083234\nvt 0.507692 -0.083253\nvt 0.505204 -0.072137\nvt -0.041338 0.690393\nvt -0.050638 0.768773\nvt -0.055587 0.833342\nvt -0.044179 0.891809\nvt -0.044740 0.919618\nvt -0.045472 0.968996\nvt 0.130670 0.954053\nvt 0.390748 0.616922\nvt 0.379941 0.577901\nvt 0.105940 1.011702\nvt 0.109044 1.064086\nvt 0.098712 0.878143\nvt 0.094900 0.855627\nvt -0.043624 0.728836\nvt -0.037992 0.758361\nvt 0.800089 0.225443\nvt 0.793380 0.234856\nvt 0.823728 0.233183\nvt 0.811282 0.253851\nvt -0.317865 1.226508\nvt -0.294668 1.220861\nvt -0.312635 1.211752\nvt 0.837193 0.247794\nvt -0.047097 0.846806\nvt -0.042843 0.943339\nvt -0.080933 -0.063439\nvt -0.287226 1.451520\nvt -0.266585 1.430731\nvt 0.784010 0.224006\nvt 1.470863 -0.459344\nvt -0.030310 0.905604\nvt -0.023589 1.031578\nvt -0.021998 1.051267\nvt -0.033000 1.063663\nvt -0.214929 0.109975\nvt -0.218720 0.084198\nvt 0.293771 0.501229\nvt 0.506123 0.038440\nvt -0.037661 1.484395\nvt -0.029134 1.493856\nvt -0.043249 1.494882\nvt 1.437964 -0.389552\nvt -0.305447 -0.286266\nvt -0.291119 -0.293869\nvt -0.284507 -0.264491\nvt -0.041451 0.629306\nvt -0.032496 0.687979\nvt -0.032960 0.734374\nvt 1.423721 -0.330339\nvt 1.418487 -0.305034\nvt 1.435637 -0.332963\nvt 1.297247 -0.379693\nvt 1.305959 -0.398888\nvt 1.336673 -0.369685\nvt -0.026310 0.897161\nvt -0.025423 0.946258\nvt 0.144963 -0.144531\nvt 0.157399 -0.175086\nvt 0.125669 -0.163679\nvt -0.336756 -0.218084\nvt -0.331706 -0.237897\nvt -0.319891 -0.218380\nvt 1.308084 -0.185958\nvt -0.019955 0.278253\nvt -0.037565 0.272435\nvt -0.037895 0.284149\nvt -0.027096 0.258006\nvt 0.678366 0.202661\nvt 0.696937 0.216531\nvt 0.724761 0.217571\nvt -0.204206 0.084629\nvt 0.269334 0.023409\nvt -0.295511 -0.086037\nvt -0.282272 -0.070527\nvt -0.022181 0.916785\nvt -0.016878 0.974957\nvt 0.096680 1.078498\nvt 0.075378 1.041740\nvt 0.061143 1.064672\nvt 0.106141 0.756692\nvt -0.210436 0.115767\nvt -0.007329 0.573213\nvt -0.009106 0.590872\nvt -0.013542 0.551238\nvt -0.036394 0.546987\nvt 0.904801 -0.119002\nvt 0.905358 -0.150818\nvt 0.938503 -0.143925\nvt -0.305583 -0.212548\nvt -0.322904 -0.189873\nvt -0.343593 0.239713\nvt -0.350076 0.219222\nvt 0.580044 0.115767\nvt 0.564962 0.084629\nvt -0.289547 -0.234515\nvt -0.000977 0.922062\nvt -0.003895 1.028899\nvt -0.014738 1.075759\nvt -0.048650 1.073273\nvt -0.016621 1.493504\nvt -0.004567 1.502637\nvt -0.018453 1.505034\nvt -0.009106 0.288779\nvt -0.007724 0.264805\nvt -0.005304 0.241058\nvt -0.022247 0.233776\nvt -0.010239 0.227950\nvt -0.023731 0.214591\nvt -0.285456 1.276801\nvt 0.220954 0.099121\nvt -0.403939 0.053701\nvt -0.385396 0.071827\nvt 1.468864 -0.406050\nvt 0.000617 0.961803\nvt -0.002154 1.068245\nvt 0.722077 0.016709\nvt 0.709741 -0.027582\nvt 0.728911 -0.015475\nvt 0.396575 0.547653\nvt 0.297421 1.082417\nvt 0.692132 0.022634\nvt 0.775592 -0.006064\nvt 0.787930 -0.029834\nvt -0.337576 -0.145265\nvt 1.524745 -0.176083\nvt 1.517066 -0.194777\nvt 1.532446 -0.200710\nvt 0.002757 0.935529\nvt -0.021998 0.173761\nvt -0.023589 0.192360\nvt -0.002154 0.174635\nvt 0.233868 0.978612\nvt 0.248435 0.986183\nvt 0.255697 0.978246\nvt 0.014577 0.576016\nvt 0.006912 0.258874\nvt 0.610603 0.246396\nvt 0.610885 0.227950\nvt 0.601869 0.241058\nvt -0.014292 0.916215\nvt -0.034815 0.902634\nvt -0.050952 0.908130\nvt -0.168426 1.272533\nvt -0.147268 1.300941\nvt -0.138509 1.289134\nvt 0.635503 0.118535\nvt -0.105370 0.729999\nvt -0.087233 0.755020\nvt -0.090545 0.726904\nvt 0.020163 1.026309\nvt 0.015671 0.158616\nvt 0.014577 0.302083\nvt 0.022947 0.284976\nvt 0.012591 0.254178\nvt 0.012591 0.611911\nvt 0.004890 0.620216\nvt -0.005304 0.611483\nvt 1.286286 0.065805\nvt 1.279873 0.050893\nvt 0.266568 1.097891\nvt 0.245055 1.101912\nvt 0.021782 0.936179\nvt 0.021830 1.056629\nvt -0.071694 0.037327\nvt -0.081733 0.032690\nvt -0.059650 0.018578\nvt 1.244022 -0.002410\nvt 0.494961 0.677658\nvt -0.288288 0.179688\nvt -0.303952 0.205483\nvt -0.258293 0.181100\nvt 0.245877 -0.021313\nvt -0.241506 0.168934\nvt -0.212853 0.169643\nvt -0.235950 0.150368\nvt -0.218386 0.037286\nvt 0.015636 0.965914\nvt 0.025801 0.993289\nvt 0.032987 0.180089\nvt 0.001244 1.512125\nvt 0.011651 1.522057\nvt -0.001231 1.523705\nvt 0.812515 -0.042495\nvt 0.031987 0.266471\nvt 0.025652 0.263752\nvt 0.031987 0.599574\nvt 0.025652 0.611357\nvt 0.006912 0.605160\nvt 0.601744 0.263752\nvt 0.616017 0.270047\nvt 0.626622 0.250529\nvt 1.403692 -0.276533\nvt -0.000916 0.848356\nvt 0.023355 0.827187\nvt 0.032034 0.842577\nvt 0.056207 0.248668\nvt 0.041023 0.258186\nvt 0.066853 0.284686\nvt 0.032987 1.080425\nvt 0.230092 0.645831\nvt -0.049513 0.802994\nvt -0.340275 0.080617\nvt -0.351422 0.106519\nvt 0.043335 0.792183\nvt 0.034764 0.814024\nvt 0.287146 -0.016442\nvt 0.290682 -0.048652\nvt 0.032351 0.939494\nvt 0.038098 0.967281\nvt 0.035564 1.016543\nvt 0.040841 1.065510\nvt 1.341156 -0.431072\nvt -0.108596 0.754538\nvt 0.050617 0.587519\nvt 0.022947 0.589667\nvt 0.050617 0.275466\nvt 0.044903 0.603224\nvt 0.041885 0.631676\nvt 0.023901 0.625630\nvt 0.247350 -0.049049\nvt 0.044234 0.859107\nvt 0.016632 0.878923\nvt -0.300473 -0.379693\nvt 0.046831 0.969877\nvt 0.045838 1.045385\nvt 0.247096 0.550722\nvt 0.228092 0.569747\nvt 0.034507 0.507384\nvt 0.047647 0.500786\nvt 0.037764 0.750388\nvt 0.048595 0.765903\nvt 0.054437 0.813672\nvt 0.055673 0.894155\nvt 0.047301 0.902558\nvt 0.033164 -0.108476\nvt 0.045586 -0.123338\nvt 0.065427 0.570140\nvt 0.051961 0.594113\nvt 0.060738 0.654743\nvt 0.036767 0.674381\nvt 0.048254 0.686949\nvt 0.046047 0.707366\nvt 0.050536 0.729678\nvt 0.066275 0.779613\nvt 0.059722 0.871426\nvt -0.024840 -0.099475\nvt -0.035845 -0.110596\nvt 0.056360 0.991629\nvt 0.058029 1.078849\nvt 0.056858 0.619549\nvt 1.252328 -0.176293\nvt 1.394858 -0.260851\nvt 1.390181 -0.208783\nvt 1.405966 -0.243822\nvt -0.278166 1.241492\nvt 0.056207 0.945082\nvt 0.066401 0.952925\nvt 0.058029 0.193631\nvt 0.151403 0.545966\nvt 0.069435 0.586610\nvt 0.068025 0.608853\nvt 1.361737 -0.123734\nvt 1.359761 -0.139033\nvt 1.372968 -0.130333\nvt 0.064694 0.726611\nvt 0.059256 0.707523\nvt 0.060924 0.750351\nvt 0.074559 0.756377\nvt 0.069473 0.843734\nvt 0.077777 0.894521\nvt 0.314447 0.981213\nvt 0.319551 1.003783\nvt 0.078837 0.643136\nvt -0.047593 0.895083\nvt 0.081885 0.802219\nvt 0.076034 0.907037\nvt -0.025255 -0.135462\nvt 0.012451 -0.149335\nvt 0.084497 1.017502\nvt 0.725502 -0.050642\nvt 0.088525 0.598671\nvt 0.084288 0.729214\nvt 0.074957 0.866247\nvt 0.076034 0.320821\nvt 0.069821 0.294290\nvt 0.055673 0.325414\nvt -0.277553 -0.152070\nvt 0.092415 1.058502\nvt 0.090373 0.188320\nvt 0.089697 0.674002\nvt 0.061477 0.689907\nvt 0.067995 0.675526\nvt 0.094420 0.782978\nvt 0.093602 0.815605\nvt 0.092783 0.244306\nvt 0.066401 0.243258\nvt 0.081062 0.250764\nvt 0.092783 0.957624\nvt 0.085708 0.970559\nvt 1.348340 -0.443667\nvt 0.587608 -0.074401\nvt 0.623190 -0.073163\nvt 0.093710 0.575818\nvt 0.097306 0.584749\nvt 0.069435 0.271100\nvt 0.097306 0.269708\nvt 0.088525 0.285101\nvt -0.206959 0.180587\nvt -0.223887 0.191807\nvt 0.095764 0.277898\nvt 0.092268 0.932001\nvt -0.050120 1.473668\nvt -0.461104 0.065805\nvt -0.449925 0.030093\nvt -0.465569 0.050893\nvt 0.510459 0.718452\nvt 1.268795 -0.229655\nvt 1.288535 -0.236185\nvt 0.118805 1.111262\nvt 0.095108 1.106591\nvt 0.761518 -0.035433\nvt 0.092268 0.298408\nvt 0.131111 0.298222\nvt 0.264382 0.577878\nvt 0.246672 0.576832\nvt 0.218107 0.838663\nvt 0.015038 -0.122656\nvt -0.017849 -0.106362\nvt -0.005383 -0.095938\nvt 0.372203 0.647479\nvt 0.380717 0.674202\nvt 0.348793 0.657505\nvt -0.039585 1.352636\nvt -0.082280 1.351364\nvt -0.056548 1.342204\nvt -0.031085 1.340455\nvt 0.233633 0.682146\nvt 0.221790 0.693709\nvt 0.241813 0.864242\nvt 0.262088 0.889542\nvt 1.401572 -0.057727\nvt 1.388431 -0.078926\nvt 0.247867 0.800584\nvt -0.260377 0.775324\nvt -0.242789 0.778871\nvt -0.241479 0.756105\nvt 0.612855 0.093751\nvt 0.620460 0.127880\nvt 0.576590 0.103730\nvt 0.686310 0.145758\nvt 0.701495 0.171895\nvt 0.670108 0.155267\nvt 0.627619 0.110308\nvt 0.640383 0.138358\nvt 0.013678 -0.020072\nvt -0.007838 0.018067\nvt -0.013512 -0.041641\nvt -0.114000 0.531186\nvt -0.130702 0.537526\nvt -0.142195 0.510483\nvt -0.122844 0.831737\nvt -0.091927 0.813363\nvt -0.083306 0.713421\nvt -0.072901 0.690813\nvt 0.371521 0.783922\nvt 0.381939 0.811836\nvt 0.346432 0.803174\nvt 0.468881 0.599961\nvt 0.259549 0.623946\nvt 0.290278 0.621378\nvt 0.286831 0.645160\nvt -0.056822 0.972924\nvt -0.085343 0.954497\nvt 0.362426 0.566659\nvt 0.374489 0.603067\nvt 0.491615 -0.062155\nvt 0.404678 0.733448\nvt 0.418791 0.730904\nvt 0.406561 0.713830\nvt 0.329900 0.640534\nvt 0.321004 0.650585\nvt 0.341044 0.742034\nvt 0.321449 0.730069\nvt 0.342872 0.697401\nvt 0.247830 0.767832\nvt 0.228967 0.779808\nvt 0.257839 0.914862\nvt 0.283339 0.875585\nvt 0.264552 0.875678\nvt -0.172097 0.512854\nvt 1.322130 -0.413253\nvt 1.338442 -0.410680\nvt 0.228092 0.249115\nvt 0.068173 1.393321\nvt 0.063981 1.420141\nvt 0.051082 1.382581\nvt -0.327832 1.153591\nvt -0.323533 1.189273\nvt 0.356289 0.599589\nvt 0.339577 0.610957\nvt 0.332761 0.573219\nvt 0.590720 -0.008763\nvt 1.258400 -0.201129\nvt 0.232621 0.741147\nvt -0.313704 1.054858\nvt -0.295812 1.070600\nvt -0.308095 1.078971\nvt -0.297987 1.112421\nvt -0.309005 1.162245\nvt 1.143978 0.287842\nvt 1.152631 0.265747\nvt 1.179660 0.272643\nvt -0.332776 -0.353443\nvt -0.185346 0.516226\nvt 0.074952 -0.215250\nvt 0.088900 -0.230432\nvt 0.086727 -0.208546\nvt -0.310785 1.014847\nvt -0.086849 1.386014\nvt -0.067321 1.384040\nvt -0.083151 1.398044\nvt 0.241278 0.829421\nvt -0.293971 1.087770\nvt -0.312558 1.215593\nvt 0.431750 0.695923\nvt 0.268876 0.761378\nvt 0.261630 0.737611\nvt 1.037340 0.266651\nvt 1.045245 0.294306\nvt 1.031636 0.283724\nvt 1.060986 0.288704\nvt 1.102808 0.287896\nvt 1.123049 0.269201\nvt 0.865228 0.154766\nvt 0.898052 0.167557\nvt 0.887295 0.189316\nvt 0.710858 0.125974\nvt 0.713591 0.147822\nvt 0.730160 0.123534\nvt 0.749489 0.157455\nvt -0.050000 1.371975\nvt -0.091604 1.370698\nvt 0.314447 0.215743\nvt 0.293700 0.216842\nvt 0.300444 0.233170\nvt -0.297558 0.266651\nvt -0.316840 0.283724\nvt -0.314713 0.262115\nvt 1.205980 0.254197\nvt 0.882520 0.098597\nvt 0.901178 0.116081\nvt 0.958221 0.152510\nvt 0.972579 0.124925\nvt 1.009566 0.129255\nvt 0.768629 0.126273\nvt 0.786601 0.136844\nvt 1.106580 0.263160\nvt 1.175817 0.246165\nvt -0.079163 -0.148951\nvt -0.076931 -0.127414\nvt -0.068696 -0.134667\nvt 0.857201 0.182137\nvt -0.114572 0.898328\nvt -0.122365 0.931066\nvt -0.087155 0.905880\nvt 1.062259 0.265815\nvt 1.078156 0.290688\nvt 1.088066 0.248837\nvt 1.220316 0.236425\nvt -0.300225 1.229929\nvt 1.241546 0.063085\nvt 1.229233 0.057417\nvt 0.358945 1.013543\nvt 0.363132 1.035005\nvt 0.345628 1.037529\nvt -0.279344 0.218655\nvt -0.290673 0.208778\nvt 1.034997 0.218655\nvt 1.157073 0.233045\nvt 0.516167 0.679074\nvt 0.969218 0.184861\nvt 1.003929 0.176618\nvt 0.993988 0.198596\nvt 0.341990 0.977970\nvt 0.380231 0.936829\nvt 0.369984 0.978832\nvt 1.119144 0.234638\nvt 1.193077 0.223225\nvt 0.510035 0.223573\nvt 0.512189 0.205997\nvt 0.528931 0.226895\nvt -0.310785 0.204948\nvt -0.322598 0.241200\nvt 1.059839 0.234432\nvt 1.171759 0.213123\nvt 1.226770 0.205663\nvt 1.245336 0.222988\nvt 0.031162 1.413020\nvt 0.015038 1.387056\nvt 0.503099 0.621088\nvt 0.519965 0.630074\nvt 0.519317 0.649996\nvt 0.321925 0.684435\nvt 0.302571 0.676046\nvt 0.299753 0.648594\nvt 0.760166 0.179534\nvt 0.338859 0.927129\nvt 0.331102 0.961496\nvt 0.319186 0.967999\nvt 0.040981 1.467046\nvt 0.061895 1.463565\nvt 0.069926 1.488749\nvt 0.703313 -0.044257\nvt 0.865601 0.212599\nvt -0.286615 1.020050\nvt -0.290673 1.029422\nvt 1.108084 0.232590\nvt 0.605415 -0.003000\nvt 0.615946 0.025260\nvt 1.187756 0.124664\nvt 1.193353 0.169944\nvt 1.196165 0.137812\nvt 0.184061 0.500028\nvt 0.212033 0.498490\nvt 0.202465 0.519018\nvt 0.899906 0.208637\nvt 0.079281 1.417118\nvt 0.057858 1.442340\nvt 0.066751 1.379943\nvt 1.235307 -0.047864\nvt 1.087477 0.232616\nvt 1.193353 0.190428\nvt -0.280161 1.258018\nvt -0.023592 -0.067796\nvt -0.050000 -0.080341\nvt -0.039585 -0.051826\nvt -0.173593 -0.030160\nvt 0.317489 0.561491\nvt 0.303441 0.594999\nvt 0.289019 0.570060\nvt 0.325448 -0.193243\nvt 0.332579 -0.166651\nvt 0.306775 -0.172184\nvt -0.279917 1.030416\nvt -0.279917 0.200260\nvt 1.062389 0.220386\nvt 1.135609 0.218565\nvt -0.262537 1.145222\nvt -0.272018 1.175123\nvt -0.269564 1.128757\nvt -0.283117 1.181372\nvt 1.209103 0.197196\nvt -0.280021 1.236383\nvt -0.076260 0.677752\nvt 1.380900 -0.169024\nvt 1.370329 -0.141087\nvt 1.367908 -0.164386\nvt 1.041261 0.203452\nvt 1.020803 0.200260\nvt -0.273802 1.202967\nvt -0.001989 1.341721\nvt -0.004635 1.353110\nvt 0.269563 0.850610\nvt 0.253741 0.861206\nvt 0.937810 0.177548\nvt 0.758938 0.250978\nvt 0.766433 0.265521\nvt 0.720456 0.249394\nvt 0.291994 0.950502\nvt 1.383708 -0.150543\nvt 1.392715 -0.168589\nvt -0.259546 1.072002\nvt -0.230946 1.073833\nvt -0.262130 1.097090\nvt -0.230629 1.107832\nvt -0.263263 1.117697\nvt -0.240454 1.137019\nvt -0.261757 1.267773\nvt -0.117270 1.002299\nvt -0.354895 1.228488\nvt -0.386133 1.210172\nvt -0.358642 1.239079\nvt -0.075843 0.077674\nvt -0.082141 0.046976\nvt 0.052759 1.396830\nvt 0.048126 1.419785\nvt 0.927215 0.200622\nvt 0.802222 0.228180\nvt 0.785071 0.205569\nvt 0.822205 0.205386\nvt 0.317209 1.048404\nvt 0.080152 1.402328\nvt -0.258468 1.197511\nvt -0.255271 1.233092\nvt -0.255807 1.250783\nvt -0.275419 1.218716\nvt -0.219955 0.509594\nvt 0.802743 0.050973\nvt 0.225290 0.518979\nvt 0.271195 0.527961\nvt 1.502511 -0.134077\nvt 1.493024 -0.130405\nvt 1.461763 -0.143983\nvt -0.004869 1.407141\nvt -0.017849 1.384522\nvt 1.006868 0.066415\nvt 1.007323 0.037222\nvt 0.995681 0.066566\nvt -0.236717 1.174615\nvt 1.201766 0.177431\nvt 1.223479 0.185266\nvt -0.252949 1.282666\nvt -0.189566 -0.047864\nvt 0.051082 -0.130333\nvt 0.033602 -0.108072\nvt 0.333094 0.768551\nvt 0.355664 0.766633\nvt 0.338132 0.792349\nvt 0.258784 0.587205\nvt 0.272841 0.597219\nvt -0.260713 1.211380\nvt 0.034728 0.552884\nvt 0.069982 0.555690\nvt 0.022248 -0.191674\nvt 0.023776 -0.175261\nvt 0.040099 -0.200710\nvt -0.150083 1.352966\nvt -0.137462 1.343373\nvt 0.361780 0.695705\nvt 0.723240 -0.033513\nvt 0.299308 0.727185\nvt 0.309931 0.745608\nvt 0.290542 0.738896\nvt 0.016183 1.450350\nvt -0.022550 1.438841\nvt 1.282638 0.115471\nvt -0.226130 1.139059\nvt -0.235476 1.202305\nvt -0.249287 1.228803\nvt 1.219190 0.170593\nvt 1.261866 0.167655\nvt 1.241169 0.192663\nvt 1.273053 0.187556\nvt -0.258293 1.298980\nvt -0.242381 1.290842\nvt -0.241872 1.308897\nvt 0.776370 -0.193471\nvt -0.003687 -0.095884\nvt -0.001989 -0.081374\nvt -0.015547 -0.081785\nvt 0.279892 0.696387\nvt 0.296907 0.704424\nvt 0.302414 0.771562\nvt 0.039691 1.363550\nvt 0.033602 1.372226\nvt 0.019058 1.363098\nvt -0.204712 1.088737\nvt 1.231879 -0.111279\nvt 1.249307 -0.087928\nvt 1.222424 -0.101285\nvt 0.295442 0.814845\nvt 0.007658 0.981063\nvt -0.003357 0.968739\nvt -0.011312 1.005812\nvt 0.813673 0.261968\nvt 0.801670 0.277417\nvt 0.782735 0.258714\nvt 0.052605 1.371351\nvt -0.183998 -0.071609\nvt 1.483891 -0.118804\nvt 0.279641 0.591101\nvt 0.033164 1.353245\nvt 0.019058 -0.090904\nvt -0.210144 1.101375\nvt 1.098218 0.216176\nvt 1.102998 0.186540\nvt 1.129446 0.199836\nvt -0.226348 1.208370\nvt -0.225777 1.246764\nvt -0.241992 1.271480\nvt 0.177861 0.230484\nvt 0.160711 0.243257\nvt 0.147766 0.216163\nvt -0.187858 0.508734\nvt -0.153040 0.522473\nvt -0.006396 1.471376\nvt 0.601403 0.214397\nvt 0.611507 0.232358\nvt 0.585386 0.220930\nvt 0.336290 0.823286\nvt 0.322268 0.841761\nvt 0.322317 0.811283\nvt 0.508666 0.179791\nvt 0.527558 0.181938\nvt 1.079123 0.185921\nvt 1.064220 0.206776\nvt 1.040282 0.191028\nvt 1.091761 0.195758\nvt -0.203597 1.112611\nvt -0.195970 1.143440\nvt -0.209842 1.188465\nvt -0.222637 1.227020\nvt 0.704820 0.123022\nvt 0.270013 0.561124\nvt 0.280130 0.678738\nvt 0.278975 0.554099\nvt -0.123740 1.324073\nvt -0.116620 1.303381\nvt -0.207080 1.061889\nvt 1.237150 0.155163\nvt 1.259300 0.147081\nvt -0.049852 1.470258\nvt 0.723313 0.112973\nvt 0.654869 0.056062\nvt 0.697032 0.053589\nvt 1.343632 -0.108476\nvt 1.353485 -0.090904\nvt 1.343337 -0.089495\nvt 0.593454 0.171770\nvt 0.624846 0.177141\nvt 0.589975 0.191810\nvt -0.086867 -0.046319\nvt 0.590645 0.029986\nvt 0.299784 0.538544\nvt 0.332724 0.853319\nvt 0.052759 -0.190921\nvt 0.080593 -0.195733\nvt 0.016383 -0.089495\nvt 0.015823 -0.103690\nvt 1.261424 0.129020\nvt -0.287561 -0.448452\nvt -0.279723 -0.443667\nvt 0.416058 0.015938\nvt 0.423418 0.053941\nvt 0.402878 0.034726\nvt 0.387195 0.703493\nvt 0.397963 0.743650\nvt 0.376078 0.733267\nvt -0.259120 0.566559\nvt 0.330375 0.908635\nvt 1.078346 0.164411\nvt 1.101921 0.165310\nvt 1.133827 0.170213\nvt -0.189964 1.161462\nvt 1.435292 -0.117491\nvt -0.330374 1.049422\nvt -0.037514 1.444905\nvt 1.391405 -0.187766\nvt 0.399624 0.707280\nvt 0.879928 0.292475\nvt 0.873764 0.272063\nvt 0.901370 0.270580\nvt 0.014669 1.488641\nvt 0.310748 0.931945\nvt 0.319186 0.229308\nvt -0.178302 1.074387\nvt 1.052275 0.175992\nvt -0.183646 1.087960\nvt 1.178852 0.154015\nvt 1.193608 0.128779\nvt 1.198756 0.157026\nvt 1.229632 0.127091\nvt 1.217406 0.146350\nvt 0.793560 0.252940\nvt 0.826850 0.240324\nvt 0.835810 0.132303\nvt 0.607308 0.164716\nvt 0.342883 1.003601\nvt 0.355604 0.948977\nvt 1.109208 0.148545\nvt 1.139465 0.137515\nvt 1.151848 0.152522\nvt 0.261243 0.651203\nvt -0.086867 1.309864\nvt -0.054912 1.317481\nvt 0.402315 0.770867\nvt 0.800175 0.116499\nvt 0.377986 0.767772\nvt 0.356748 0.747586\nvt 0.349602 0.876092\nvt 0.563605 0.202458\nvt 0.551878 0.217292\nvt 0.533079 0.205938\nvt 0.316496 0.590302\nvt 0.322845 0.611017\nvt 1.064773 0.155364\nvt 1.078764 0.142342\nvt 0.354603 0.836463\nvt 0.375196 0.831823\nvt 1.016157 0.062235\nvt 0.808273 0.158954\nvt 1.227490 0.058966\nvt -0.143922 1.013106\nvt -0.135116 0.991858\nvt 0.857032 0.233411\nvt 0.822210 0.231862\nvt 0.362094 0.905037\nvt 0.389334 0.909519\nvt 0.328452 1.065511\nvt 0.331534 0.642482\nvt 0.349095 0.633273\nvt 0.337108 0.613874\nvt 1.317937 -0.297490\nvt 1.300650 -0.279958\nvt 1.065098 0.148984\nvt 0.000312 0.544837\nvt -0.091604 -0.064027\nvt -0.057246 -0.067818\nvt -0.114472 1.387447\nvt -0.108256 1.361319\nvt 0.590671 -0.231398\nvt 0.586562 -0.221556\nvt 0.592610 -0.214501\nvt 0.761254 0.203624\nvt 0.734037 0.201254\nvt -0.302590 1.230670\nvt -0.282139 1.242283\nvt -0.160303 1.094683\nvt -0.174810 1.088377\nvt 1.503948 -0.127354\nvt 1.495420 -0.117650\nvt -0.120648 1.284098\nvt -0.124692 1.289831\nvt -0.146481 1.268431\nvt 0.365227 -0.062609\nvt 0.345163 -0.054689\nvt 0.319434 -0.082134\nvt 0.637865 0.208481\nvt 0.088103 1.438544\nvt 0.309535 -0.050646\nvt 0.300245 -0.065107\nvt 0.312547 -0.069075\nvt 0.808867 0.178544\nvt 0.837591 0.162033\nvt -0.101475 0.536099\nvt -0.099990 0.501049\nvt -0.113500 0.506126\nvt 0.249756 0.713115\nvt -0.031085 -0.060058\nvt -0.023592 1.361340\nvt 1.187894 0.093300\nvt 0.630920 0.231680\nvt 0.662988 0.188964\nvt 0.647892 0.226603\nvt 0.686092 0.225942\nvt 0.665020 0.241701\nvt 0.340767 0.674633\nvt 0.316005 0.788414\nvt 1.451075 -0.477100\nvt 0.638918 0.086948\nvt -0.226705 -0.152338\nvt -0.196895 -0.142744\nvt -0.207329 -0.132224\nvt 0.640700 0.159244\nvt -0.419625 -0.000512\nvt 0.008415 -0.112350\nvt 0.664589 0.213343\nvt 1.380891 -0.218224\nvt 1.369574 -0.188742\nvt -0.216775 0.016736\nvt -0.230410 0.015970\nvt -0.233093 -0.013762\nvt 1.527219 -0.219365\nvt 0.016383 1.352951\nvt 0.840996 0.290192\nvt -0.186889 0.557857\nvt -0.171521 0.542284\nvt 1.368983 -0.461199\nvt 0.532323 -0.008763\nvt 0.538094 0.029986\nvt 0.756846 0.011254\nvt 0.742552 -0.022071\nvt 0.749709 -0.028755\nvt 0.400518 0.794684\nvt -0.029822 -0.085203\nvt 1.461429 -0.108844\nvt 1.460645 -0.087853\nvt 0.449764 0.134031\nvt 0.468881 0.151290\nvt 0.439850 0.160615\nvt -0.332203 1.221013\nvt -0.343524 1.236671\nvt -0.064202 0.134963\nvt 0.836885 0.104410\nvt -0.364721 -0.016774\nvt -0.352043 -0.045539\nvt -0.345184 -0.031058\nvt 0.612685 0.068678\nvt 0.061475 -0.243638\nvt 0.069829 -0.236786\nvt 0.078970 -0.247714\nvt 1.294731 -0.357882\nvt 1.291501 -0.367410\nvt 1.384207 -0.195733\nvt 0.486804 0.589092\nvt 0.939363 0.218379\nvt 0.968357 0.204937\nvt 0.344516 0.900512\nvt -0.266101 1.399498\nvt 0.541474 0.690893\nvt -0.196763 0.175284\nvt 0.022342 0.996309\nvt 0.045346 0.981281\nvt -0.379212 -0.305034\nvt -0.369331 -0.287268\nvt -0.355513 -0.302212\nvt -0.096540 1.384427\nvt 0.173919 0.525909\nvt 0.935104 0.136481\nvt 0.507466 -0.156657\nvt 0.493156 -0.127665\nvt 0.001382 0.516176\nvt 1.393182 -0.356488\nvt 0.233965 0.702434\nvt 0.774309 0.234725\nvt -0.194249 1.298278\nvt 1.446327 -0.242627\nvt 1.447531 -0.253113\nvt 0.111785 0.248249\nvt 0.563814 0.186695\nvt 0.557046 0.155154\nvt 0.732798 0.049632\nvt 0.741733 0.068463\nvt 1.481130 -0.241433\nvt 0.590117 0.078795\nvt -0.183153 1.275282\nvt 0.324187 0.181938\nvt 0.330856 0.158580\nvt 0.342545 0.155952\nvt 0.704002 0.077172\nvt 1.400982 -0.191028\nvt 1.428931 -0.208134\nvt 1.407505 -0.179936\nvt 0.412123 0.650314\nvt 0.486408 -0.074401\nvt 0.458206 -0.079399\nvt 0.423362 0.679722\nvt 0.697667 0.203576\nvt 0.854629 0.311304\nvt 0.851593 0.299684\nvt 0.875714 0.306862\nvt 0.758158 0.220695\nvt 0.417799 0.769779\nvt 0.325356 -0.088682\nvt 0.307598 -0.103859\nvt 0.244199 0.675394\nvt 1.265715 -0.004035\nvt -0.152042 1.309872\nvt 0.155397 -0.244938\nvt 0.193981 -0.237709\nvt 0.189323 -0.261467\nvt 0.379726 0.866646\nvt 1.300259 -0.000235\nvt 1.315038 -0.003395\nvt 1.331136 0.003687\nvt 1.456474 -0.080582\nvt 0.063862 0.510296\nvt 0.083612 0.522104\nvt 1.405369 -0.090732\nvt 0.358213 0.656557\nvt -0.157713 1.324651\nvt 1.325234 -0.017057\nvt 1.343353 -0.010975\nvt -0.082280 -0.037240\nvt 0.045790 0.506673\nvt 1.512444 -0.147248\nvt 1.486570 -0.177413\nvt -0.160378 1.118479\nvt -0.099020 -0.053117\nvt -0.134189 1.307571\nvt -0.159225 1.275329\nvt -0.137600 1.321519\nvt -0.145380 1.334847\nvt -0.088388 1.333346\nvt 1.347425 -0.123338\nvt -0.356620 0.928888\nvt -0.369145 0.904397\nvt -0.373882 0.933579\nvt 0.533001 0.155952\nvt 0.925558 0.052417\nvt 0.949316 0.011227\nvt -0.078068 0.514539\nvt 0.030355 -0.176083\nvt 1.025391 0.157129\nvt -0.057031 -0.251579\nvt -0.036875 -0.221556\nvt -0.024977 -0.235111\nvt 1.281217 -0.345014\nvt 1.290051 -0.365716\nvt 1.280218 -0.027744\nvt 1.258817 -0.024887\nvt 1.333760 -0.024903\nvt 0.784487 -0.101158\nvt 1.407630 -0.106726\nvt -0.128114 1.331012\nvt 0.842974 0.080752\nvt 1.457433 -0.182266\nvt 1.479135 -0.217273\nvt 0.313438 0.621121\nvt 0.326614 0.776046\nvt 0.331102 0.224129\nvt 0.740316 0.013554\nvt 0.111785 0.953517\nvt -0.115323 1.330236\nvt -0.126531 -0.033485\nvt -0.137462 -0.024903\nvt -0.128114 -0.013515\nvt 1.351088 -0.041172\nvt 1.373723 -0.026096\nvt 1.503471 -0.207517\nvt 0.735995 0.272700\nvt 0.717571 0.273436\nvt 0.028540 1.496184\nvt 1.479028 -0.162641\nvt -0.033503 0.972542\nvt -0.300225 0.937532\nvt -0.288049 0.965295\nvt -0.273588 0.952524\nvt 0.452739 -0.052711\nvt 0.836716 -0.111348\nvt -0.115323 -0.016788\nvt -0.126531 1.346823\nvt -0.121287 1.360702\nvt 0.866478 0.244023\nvt 0.843705 0.265307\nvt 0.344708 1.058323\nvt 0.313438 0.232358\nvt 0.290278 0.258201\nvt 0.279641 0.232695\nvt 0.640971 0.243720\nvt 0.638981 0.266337\nvt -0.108816 1.340765\nvt 0.120407 0.524678\nvt 0.577466 -0.235111\nvt -0.068960 1.414982\nvt -0.107128 -0.044609\nvt -0.108816 -0.023039\nvt -0.107128 1.353163\nvt 1.207496 0.043841\nvt 1.418436 -0.050517\nvt 0.099035 0.509078\nvt 1.290590 -0.138690\nvt 1.320582 -0.143875\nvt 1.295141 -0.110173\nvt 0.611764 0.258201\nvt 1.397256 -0.466313\nvt 1.434904 -0.460196\nvt 1.441906 -0.473406\nvt -0.158848 -0.014746\nvt 1.366642 -0.055115\nvt 1.377834 -0.037422\nvt 1.353936 -0.108884\nvt 0.694811 0.267571\nvt 0.272841 0.242145\nvt 0.530632 0.714434\nvt 0.548353 -0.148728\nvt 1.280536 -0.053417\nvt 1.274484 -0.036483\nvt -0.088745 1.342113\nvt -0.088745 -0.029064\nvt -0.099020 1.361653\nvt -0.107256 1.376255\nvt -0.301290 1.337620\nvt -0.300961 1.357566\nvt -0.287561 1.360052\nvt -0.336662 -0.195931\nvt 1.440736 -0.161236\nvt 0.502587 0.586203\nvt 0.611475 0.135992\nvt 0.579479 0.125479\nvt 1.397632 -0.042516\nvt 0.293771 -0.062155\nvt -0.376892 -0.332963\nvt 1.263534 -0.192648\nvt 1.256390 -0.218084\nvt 1.248858 -0.195931\nvt -0.138575 1.099187\nvt 0.528655 0.732926\nvt 1.438695 -0.370003\nvt 1.338513 -0.430513\nvt 1.318870 -0.415287\nvt 1.320924 -0.405676\nvt 1.171850 0.021747\nvt -0.057400 1.446487\nvt -0.057246 1.362633\nvt 0.672532 0.297797\nvt 0.692820 0.305748\nvt 0.684095 0.315865\nvt 0.674821 0.252282\nvt -0.210434 0.534076\nvt -0.235861 0.544429\nvt -0.221856 0.575572\nvt 0.155627 0.509263\nvt 0.786389 0.110377\nvt 0.769785 0.128671\nvt 0.794822 0.145326\nvt 1.521646 -0.153700\nvt 1.374283 -0.282716\nvt 1.350924 -0.219074\nvt 1.347361 -0.250223\nvt 0.839383 0.122952\nvt 0.822553 0.088391\nvt 0.805989 0.099210\nvt 0.836583 0.101945\nvt -0.148456 -0.087050\nvt -0.131276 -0.076428\nvt 0.957086 0.046424\nvt 0.988680 0.042785\nvt 1.310747 -0.262347\nvt 1.327384 -0.235501\nvt 1.026158 -0.031644\nvt 1.000087 0.004999\nvt -0.089036 0.109146\nvt -0.093031 0.095889\nvt -0.276827 0.164415\nvt -0.441417 0.066415\nvt -0.466801 0.044216\nvt -0.443721 0.037222\nvt -0.078248 -0.129078\nvt -0.103485 -0.124400\nvt 0.412533 -0.043245\nvt 0.400644 -0.062403\nvt 0.421938 -0.064680\nvt 0.508840 0.255373\nvt 0.513295 0.231264\nvt 0.496128 0.229058\nvt 0.629956 0.138146\nvt 0.659777 0.121253\nvt 1.347610 -0.286728\nvt 0.948437 0.109688\nvt 1.274085 0.026115\nvt 1.288094 0.030093\nvt 1.284853 0.004664\nvt 1.119835 0.096566\nvt -0.132834 -0.140402\nvt -0.113291 -0.143716\nvt -0.127296 -0.168835\nvt 0.285261 -0.138563\nvt 0.257510 -0.118539\nvt 0.281123 -0.101523\nvt 1.179726 0.101891\nvt 1.310150 -0.213809\nvt 0.544988 -0.190011\nvt 0.560861 -0.172184\nvt 0.555463 -0.156382\nvt 0.698504 -0.207682\nvt -0.081132 -0.186858\nvt -0.106382 -0.170483\nvt 0.670008 -0.211157\nvt 0.679446 -0.190442\nvt 1.264413 0.110038\nvt -0.086725 0.126862\nvt 1.284309 0.096465\nvt 0.390172 0.831835\nvt 0.363258 0.860712\nvt 0.389156 0.866774\nvt -0.102511 0.851069\nvt -0.085006 0.847652\nvt -0.090583 0.838509\nvt 1.134788 0.205099\nvt 1.115283 0.211614\nvt 1.138118 0.229798\nvt 0.520441 0.125001\nvt 0.529388 0.122900\nvt 0.529291 0.102213\nvt 0.517779 0.105876\nvt 1.428112 -0.237406\nvt 1.416735 -0.216620\nvt 1.412946 -0.230432\nvt 0.339051 0.764623\nvt 0.370055 0.785984\nvt 0.347718 0.740918\nvt 1.313238 -0.165404\nvt 0.021480 0.498387\nvt 0.045835 0.498921\nvt 0.015776 0.519899\nvt 1.052662 -0.024997\nvt 1.071713 -0.034806\nvt 1.267201 0.043785\nvt 0.703807 -0.158945\nvt 0.699883 -0.184407\nvt 0.681199 -0.154033\nvt 0.389026 0.660375\nvt 0.368097 0.636557\nvt 1.371160 -0.323409\nvt 0.698025 -0.182139\nvt 0.730986 -0.170594\nvt 0.709192 -0.164586\nvt -0.008853 -0.155066\nvt -0.022036 -0.142042\nvt -0.001231 -0.140545\nvt 0.623659 -0.185582\nvt 0.626944 -0.153636\nvt 0.606007 -0.180527\nvt 0.061372 -0.139033\nvt -0.191560 -0.059004\nvt -0.213225 -0.035801\nvt -0.184535 -0.035428\nvt 0.231086 -0.208474\nvt 0.257568 -0.193880\nvt 0.240552 -0.189885\nvt 1.332161 -0.212922\nvt 1.334633 -0.189589\nvt 0.742396 -0.179501\nvt 0.769324 -0.169967\nvt 0.762805 -0.146535\nvt 0.650782 -0.220056\nvt -0.107179 0.128824\nvt 1.393812 -0.208546\nvt -0.398291 1.090198\nvt 0.809189 0.124191\nvt 1.266943 -0.005516\nvt 0.885669 -0.028711\nvt 0.862947 -0.034167\nvt 0.843395 -0.132889\nvt 0.869991 -0.111893\nvt 0.511215 0.051509\nvt 0.510105 0.085087\nvt 0.495064 0.062901\nvt -0.109571 0.132915\nvt 1.270674 -0.137824\nvt 1.253676 -0.102184\nvt 0.020594 -0.064767\nvt 0.814125 -0.158068\nvt 0.846816 -0.164235\nvt 0.819504 -0.137052\nvt -0.202404 0.153134\nvt 0.386285 0.740600\nvt 0.390521 0.718805\nvt 0.560123 -0.100800\nvt 0.554668 -0.113771\nvt 0.574470 -0.108809\nvt 0.878542 -0.117561\nvt 0.715189 -0.016774\nvt 0.726296 -0.006826\nvt 0.737635 -0.043342\nvt 1.100108 0.170261\nvt 0.104546 0.963628\nvt 0.077797 0.947259\nvt 0.069553 0.962925\nvt -0.267685 0.510451\nvt -0.272129 0.493452\nvt -0.281005 0.493586\nvt -0.096606 -0.230717\nvt -0.069396 -0.242267\nvt -0.089774 -0.249003\nvt 0.029839 -0.175931\nvt 1.249405 0.064671\nvt 0.601953 0.127594\nvt 0.588655 0.142861\nvt -0.121137 0.698419\nvt 1.028269 -0.029518\nvt 1.035844 -0.014409\nvt 1.049357 -0.040868\nvt 0.668329 -0.173759\nvt 0.685604 -0.149553\nvt 0.704216 -0.145325\nvt -0.431942 0.037951\nvt 0.125669 1.060863\nvt 0.108068 1.097250\nvt -0.291387 -0.021320\nvt -0.282131 0.001550\nvt 0.841656 -0.021439\nvt 0.829760 -0.039113\nvt -0.076572 1.394822\nvt 0.922432 -0.020345\nvt 1.216985 0.048204\nvt 0.567212 0.067762\nvt 0.342804 -0.139818\nvt 0.352361 -0.108809\nvt 0.329200 -0.113771\nvt -0.059025 0.935125\nvt -0.021487 0.945526\nvt -0.240372 0.079798\nvt -0.215035 0.069167\nvt 0.109056 0.946078\nvt 0.278659 -0.174577\nvt 0.274875 -0.203634\nvt 0.255697 -0.189767\nvt 0.723835 -0.151984\nvt 1.115979 -0.015205\nvt 0.966882 -0.012802\nvt -0.439233 0.003559\nvt -0.467501 0.018559\nvt -0.458330 -0.014409\nvt 1.029453 0.018559\nvt 0.650762 -0.145329\nvt 1.009247 0.126707\nvt 0.997761 0.113775\nvt 0.073648 1.455343\nvt 0.089968 1.457144\nvt -0.421334 0.126707\nvt -0.439600 0.101316\nvt 0.776328 -0.144504\nvt 0.804754 -0.133293\nvt 0.798837 -0.155837\nvt 1.045822 -0.048155\nvt 1.010307 -0.089505\nvt 1.049716 -0.072678\nvt 0.330844 -0.137901\nvt 0.102855 -0.224457\nvt 0.132274 -0.219171\nvt 0.101007 -0.213400\nvt 0.329668 0.731423\nvt 0.334682 0.708118\nvt 1.404321 -0.458735\nvt 1.052124 0.108244\nvt 0.721291 -0.137897\nvt 0.690774 -0.112417\nvt 0.597268 -0.153633\nvt 0.639835 0.087760\nvt 0.625110 0.072308\nvt 0.319844 0.705703\nvt 1.360785 -0.155085\nvt 0.537264 -0.105750\nvt 0.527258 -0.103859\nvt 0.620446 0.056079\nvt 0.582433 -0.170343\nvt 0.309195 -0.156382\nvt 1.225830 0.126242\nvt 1.245944 0.128218\nvt 0.034684 -0.216440\nvt 0.049683 -0.219365\nvt 1.407228 -0.219975\nvt 0.307761 -0.132022\nvt 0.313441 -0.105750\nvt 0.669311 -0.126384\nvt 0.645604 -0.130824\nvt 0.400764 0.772418\nvt 0.416053 0.783586\nvt 0.287735 0.202561\nvt 0.302408 0.205997\nvt 0.289885 0.223573\nvt -0.438571 -0.029518\nvt 1.281244 -0.028283\nvt 0.663788 -0.092355\nvt 0.789333 -0.130440\nvt 0.271864 0.849969\nvt 0.573076 -0.139818\nvt 0.341121 -0.170343\nvt 1.005692 -0.029978\nvt 0.929416 -0.121194\nvt 0.607121 -0.124101\nvt 0.606594 -0.103267\nvt 0.591288 -0.108234\nvt -0.049914 -0.082898\nvt 1.367418 -0.344412\nvt 0.214953 -0.263952\nvt 0.192514 -0.273925\nvt 0.795861 -0.179743\nvt 0.780448 -0.146122\nvt 0.192514 0.900017\nvt 0.214953 0.895094\nvt 0.199473 0.873742\nvt 1.278636 -0.264491\nvt 1.341140 -0.033205\nvt 1.316815 -0.036630\nvt 1.319705 -0.019870\nvt 0.743531 -0.014037\nvt -0.108833 0.233082\nvt 0.148560 -0.205341\nvt 0.385356 0.914971\nvt 0.371330 0.892842\nvt 0.345811 0.915384\nvt 0.515422 0.138024\nvt 0.525699 0.145840\nvt 0.660044 -0.142946\nvt 0.643500 -0.144606\nvt 0.637065 -0.133431\nvt 0.150025 1.021984\nvt 0.167254 0.999198\nvt 0.115382 1.009941\nvt 0.942776 -0.107360\nvt -0.394718 1.055513\nvt -0.374857 1.043761\nvt 0.252637 0.528246\nvt 0.286693 0.560432\nvt 0.257568 0.512739\nvt 0.054023 0.944592\nvt 0.154161 -0.217204\nvt 0.088797 0.238765\nvt 0.058333 0.263551\nvt 0.068231 0.235230\nvt 0.069617 0.939366\nvt 1.395108 -0.382312\nvt 0.636526 0.071526\nvt -0.198014 0.067762\nvt 0.801331 -0.109242\nvt 0.773972 -0.132078\nvt 0.510182 0.099540\nvt 0.510934 0.132267\nvt 0.499859 0.105775\nvt -0.316228 -0.065881\nvt -0.292862 -0.068572\nvt -0.309904 -0.042595\nvt 1.360269 -0.368848\nvt 0.766204 0.053672\nvt 1.357622 -0.189603\nvt 0.687595 -0.083879\nvt 0.185703 -0.200973\nvt 0.362333 0.734167\nvt 0.377015 0.752009\nvt 0.054322 -0.221704\nvt 0.026129 -0.225677\nvt 0.028976 0.956986\nvt 0.047518 0.965780\nvt -0.091372 0.865583\nvt -0.068844 0.860723\nvt 1.271383 -0.107092\nvt 1.254676 -0.014746\nvt 0.202465 -0.138929\nvt -0.088145 0.244023\nvt -0.337910 -0.332479\nvt -0.326258 -0.328948\nvt 0.619224 -0.003223\nvt 0.635656 -0.013762\nvt 0.611436 -0.038310\nvt 0.492505 -0.101267\nvt 0.540344 0.127315\nvt 0.009753 -0.091687\nvt 0.604261 -0.196546\nvt 0.587357 -0.193243\nvt -0.279263 0.127315\nvt -0.237180 0.070149\nvt -0.221805 0.134871\nvt 0.579004 0.134871\nvt 0.572392 0.109975\nvt 0.626248 -0.103231\nvt 0.641018 -0.094942\nvt 0.195759 -0.098190\nvt 0.177250 -0.072306\nvt -0.131062 0.495030\nvt -0.119248 0.495117\nvt 0.325208 0.966068\nvt 0.345702 0.943147\nvt 0.309815 0.959441\nvt 0.350513 0.714709\nvt 0.373897 0.707638\nvt 0.356249 0.677874\nvt 0.375480 0.677943\nvt 0.306638 -0.148728\nvt 1.286395 -0.283532\nvt 1.276278 -0.268784\nvt 0.374067 0.810735\nvt 0.383289 0.805474\nvt 1.159458 0.199468\nvt 0.943116 -0.025628\nvt 0.307598 0.536871\nvt -0.360724 -0.415920\nvt 0.009389 1.027553\nvt -0.029630 1.023733\nvt -0.006927 1.048329\nvt 0.268270 -0.167725\nvt 0.249738 -0.178720\nvt 0.299001 -0.083253\nvt 0.394792 0.695217\nvt 0.411569 0.678924\nvt 0.205629 -0.197548\nvt 0.079475 0.280790\nvt 0.043161 0.280711\nvt -0.124692 -0.027744\nvt 0.356599 0.689059\nvt 0.518228 -0.187329\nvt 0.289885 0.519648\nvt 0.941725 0.104380\nvt -0.101041 1.290149\nvt -0.081804 1.302441\nvt 0.868949 0.100148\nvt 0.857334 0.072408\nvt -0.021127 0.565917\nvt -0.057031 0.566184\nvt -0.024977 0.587080\nvt 0.190952 -0.217119\nvt 0.495630 -0.167725\nvt -0.106965 0.833297\nvt 0.503125 -0.193880\nvt 0.064145 -0.178727\nvt 1.246149 0.097718\nvt 1.251970 0.107477\nvt 0.146500 0.887295\nvt 0.120293 0.890582\nvt 0.131154 0.918094\nvt 0.569103 -0.194417\nvt -0.314180 -0.197541\nvt 0.297570 -0.194417\nvt 0.677135 -0.076586\nvt 0.651223 -0.088764\nvt 0.076058 1.473320\nvt 0.086282 1.485691\nvt 0.912140 0.093837\nvt -0.056789 -0.132045\nvt 0.203307 0.141381\nvt 1.221794 0.088181\nvt -0.249891 0.043981\nvt 0.421411 0.560354\nvt 1.267356 0.079410\nvt 0.899732 0.050067\nvt 0.076820 1.496076\nvt 0.061475 1.521222\nvt 0.078970 1.506171\nvt 0.550819 -0.205561\nvt -0.053166 0.491624\nvt -0.070706 0.492253\nvt -0.058608 0.502090\nvt 0.590678 0.063150\nvt 0.323892 -0.055017\nvt -0.057778 -0.217961\nvt 0.535586 0.063150\nvt 0.531701 0.078795\nvt 0.494554 0.086552\nvt -0.388444 0.007595\nvt -0.106776 0.871403\nvt 0.123262 0.511074\nvt 0.524664 0.076564\nvt 0.515859 0.083852\nvt 0.531883 0.088647\nvt -0.365067 -0.055340\nvt -0.303896 0.053919\nvt -0.311362 0.106892\nvt -0.328037 0.113003\nvt 1.309968 -0.086037\nvt 1.479658 -0.457996\nvt -0.437918 0.075329\nvt -0.081602 0.062524\nvt -0.053116 0.061195\nvt -0.352399 -0.372480\nvt -0.346271 -0.267435\nvt 1.117002 0.145885\nvt 1.135597 0.161260\nvt 0.527910 0.080083\nvt 0.528655 0.112973\nvt 0.550479 0.082710\nvt 1.389885 -0.467620\nvt 1.517919 -0.228253\nvt -0.030025 0.292352\nvt -0.054709 0.298330\nvt -0.036394 0.308177\nvt 0.562199 0.044364\nvt 0.551044 0.013554\nvt 0.544822 0.054807\nvt 0.516626 0.098833\nvt 0.530677 0.052460\nvt 0.634710 0.180020\nvt 0.653882 0.160829\nvt 0.530283 0.010874\nvt 0.503588 0.078405\nvt -0.361185 0.131468\nvt -0.373708 0.177404\nvt -0.355202 0.181164\nvt -0.337577 0.151482\nvt 0.549128 -0.015475\nvt -0.336800 -0.103585\nvt -0.348260 -0.081255\nvt 1.130120 0.051781\nvt 1.149435 0.016310\nvt 0.511724 0.045551\nvt 0.515995 0.002290\nvt 0.471575 0.095764\nvt 0.460222 0.112799\nvt 0.495315 0.743052\nvt 0.023312 0.695069\nvt 0.485499 0.038814\nvt 0.477721 0.071140\nvt 0.738086 0.097597\nvt 0.721676 0.112799\nvt 0.462313 0.097597\nvt 0.462313 0.747700\nvt 0.471575 0.743181\nvt -0.212655 0.142861\nvt 0.480235 0.032029\nvt 0.475786 0.054887\nvt 0.745270 0.071140\nvt 0.755903 0.054887\nvt -0.187587 -0.017325\nvt -0.215287 -0.014137\nvt -0.261346 0.136484\nvt 1.169451 0.148120\nvt 0.107483 0.315082\nvt 1.293886 -0.070527\nvt 0.532144 0.144307\nvt 0.561187 0.164415\nvt 0.484370 -0.015755\nvt 0.475329 0.011254\nvt 0.471369 0.053672\nvt 0.755390 0.032029\nvt 1.140137 -0.018787\nvt -0.284800 -0.044581\nvt -0.044919 -0.041893\nvt -0.050777 -0.015949\nvt 1.383684 -0.234515\nvt 1.372837 -0.181414\nvt -0.445384 0.138013\nvt -0.301163 -0.181414\nvt -0.317334 -0.138199\nvt -0.302624 -0.140097\nvt -0.271390 0.121144\nvt -0.289502 0.146020\nvt 1.267528 -0.078376\nvt -0.313392 0.199654\nvt -0.089261 0.005902\nvt -0.110739 0.035957\nvt 1.470024 -0.470439\nvt -0.263674 0.055140\nvt 1.460726 -0.373757\nvt 1.475643 -0.400860\nvt 1.464417 -0.397365\nvt -0.095931 -0.071389\nvt -0.100904 -0.018644\nvt -0.082208 -0.028867\nvt -0.098017 0.068400\nvt -0.304239 0.963179\nvt -0.333796 1.003759\nvt -0.265250 0.538904\nvt -0.250126 0.541497\nvt -0.252754 0.525472\nvt -0.243992 -0.121671\nvt -0.226016 -0.116086\nvt -0.059097 -0.041675\nvt -0.241872 0.157158\nvt -0.263206 0.171073\nvt -0.058369 -0.080052\nvt 1.446366 -0.349173\nvt 1.438052 -0.354424\nvt -0.321196 0.182574\nvt -0.142379 0.051781\nvt -0.131422 0.067686\nvt -0.144989 0.072815\nvt -0.138639 -0.001703\nvt -0.145014 0.028961\nvt -0.129811 0.020850\nvt -0.154580 -0.041592\nvt -0.145902 -0.030373\nvt -0.324100 -0.439990\nvt -0.230038 0.108946\nvt -0.217543 0.075732\nvt -0.144989 1.132339\nvt -0.147641 1.125004\nvt -0.131422 1.129299\nvt -0.353422 -0.110490\nvt 1.139490 0.081084\nvt -0.283328 -0.430419\nvt -0.455158 0.096465\nvt 1.135436 -0.001703\nvt 1.139210 0.028961\nvt -0.319092 0.158046\nvt -0.014196 -0.127354\nvt -0.106138 0.097022\nvt -0.142151 0.096801\nvt -0.361279 -0.176843\nvt -0.018453 -0.117650\nvt 0.153892 0.309383\nvt -0.160303 0.126147\nvt -0.257962 0.193015\nvt -0.257419 0.013569\nvt -0.030183 0.819088\nvt -0.040776 0.840289\nvt -0.026448 0.855586\nvt -0.174401 1.382140\nvt -0.159097 1.401339\nvt -0.132724 1.390250\nvt -0.291544 0.101780\nvt 1.338092 -0.168808\nvt 1.320377 0.018570\nvt -0.365204 -0.142098\nvt 1.322256 -0.079182\nvt 0.763198 0.077490\nvt 1.474782 -0.098064\nvt 1.484243 -0.107226\nvt -0.268090 -0.034511\nvt -0.270752 -0.018032\nvt -0.255518 -0.019870\nvt -0.404361 0.165987\nvt 0.895098 -0.019348\nvt 0.230875 -0.104689\nvt 0.202940 -0.075575\nvt 0.217704 -0.107242\nvt 1.274006 0.159167\nvt -0.114851 -0.050888\nvt 0.057559 -0.228253\nvt -0.189566 1.244921\nvt 0.458323 0.037137\nvt 1.115391 0.079382\nvt 1.122726 0.072815\nvt -0.147641 0.079382\nvt -0.061766 1.078917\nvt 1.037370 0.105036\nvt -0.151190 -0.041695\nvt -0.252474 -0.004924\nvt -0.014196 1.513561\nvt -0.302590 -0.117714\nvt -0.163926 -0.041637\nvt -0.154419 -0.018787\nvt -0.243095 -0.009201\nvt 1.404552 -0.293693\nvt 1.039823 0.069857\nvt -0.435759 0.004664\nvt 1.058368 0.120695\nvt 1.508648 -0.236786\nvt 1.048710 0.151614\nvt -0.156350 0.104449\nvt 1.103133 0.096801\nvt -0.027174 -0.055598\nvt 0.067912 1.430530\nvt 1.043514 0.196611\nvt 1.050539 0.008646\nvt 1.062996 0.083247\nvt -0.252595 0.076564\nvt 0.336067 0.120536\nvt 0.344708 0.151614\nvt 0.359752 0.120695\nvt 0.328452 0.155752\nvt -0.341221 -0.145876\nvt -0.153609 0.016310\nvt -0.367622 -0.400860\nvt 1.065709 -0.004476\nvt 1.084775 0.041158\nvt 0.365231 0.083247\nvt 0.319105 0.077517\nvt 0.618655 0.018907\nvt -0.375171 -0.349173\nvt 0.465831 0.108965\nvt 0.502587 0.103730\nvt 0.486804 0.125479\nvt 0.345220 0.041158\nvt 0.305182 0.146757\nvt -0.291383 -0.118009\nvt -0.333698 -0.440694\nvt 0.020586 0.929742\nvt -0.216975 0.114751\nvt 0.047301 0.318342\nvt 0.037111 0.291348\nvt 0.028697 0.513059\nvt -0.053427 -0.095115\nvt -0.037661 -0.098064\nvt -0.227082 0.130681\nvt 1.139693 -0.041637\nvt 0.769519 0.242983\nvt 0.748748 0.222541\nvt 0.377866 -0.048155\nvt 0.340447 -0.012634\nvt 0.365608 -0.004476\nvt 0.305125 0.101785\nvt 0.289813 0.159069\nvt 0.297421 0.168870\nvt 0.200538 -0.034326\nvt 0.195526 -0.011184\nvt 0.183549 -0.034542\nvt 0.144884 0.278567\nvt 0.810456 -0.037039\nvt 0.061764 -0.155085\nvt 0.315033 0.015105\nvt 1.050557 0.160425\nvt 0.152774 0.248414\nvt 0.336706 -0.080864\nvt 0.276701 0.131925\nvt 0.266568 0.158479\nvt 0.256690 0.184340\nvt -0.001791 -0.155429\nvt -0.306411 -0.005889\nvt 0.281770 0.110780\nvt 0.130670 0.244334\nvt 0.312358 -0.040079\nvt 0.287605 0.050151\nvt 0.278258 0.079452\nvt -0.032077 1.471042\nvt -0.375770 -0.373757\nvt 0.588586 0.169643\nvt 0.245055 0.170469\nvt 1.502249 -0.142042\nvt 1.511657 -0.155066\nvt 1.484788 -0.160105\nvt 0.543210 0.200999\nvt 0.547390 0.175460\nvt 0.513174 0.180052\nvt 1.262964 -0.039721\nvt 0.311708 -0.091715\nvt 0.246864 0.136180\nvt 1.127112 -0.030736\nvt -0.050641 0.053651\nvt 0.213632 0.181814\nvt 0.775839 0.098344\nvt -0.118092 0.973108\nvt 0.492063 -0.148003\nvt 0.473399 0.731047\nvt 0.244829 0.862988\nvt -0.278166 -0.111279\nvt -0.357598 0.922656\nvt -0.342472 0.890772\nvt 0.289813 1.094746\nvt -0.084911 1.414244\nvt 0.735778 0.012230\nvt -0.234435 1.335272\nvt 0.651678 0.229920\nvt -0.053044 0.234185\nvt -0.057270 0.209576\nvt -0.073090 0.219343\nvt 0.010789 0.754380\nvt 0.682763 0.248608\nvt 0.648777 0.277880\nvt 0.685456 0.286810\nvt 0.024952 0.906978\nvt -0.041465 0.227263\nvt -0.040911 0.199699\nvt 0.536883 0.236233\nvt 0.556945 0.235085\nvt -0.072838 0.245790\nvt -0.088461 0.244432\nvt -0.040911 0.620558\nvt -0.365274 -0.087446\nvt -0.073126 0.529885\nvt -0.074136 0.542760\nvt -0.031827 0.773434\nvt -0.042274 0.806909\nvt -0.013996 0.791027\nvt 1.196746 0.223613\nvt 1.206304 0.199573\nvt 0.000932 0.894196\nvt -0.017741 0.862122\nvt -0.071066 0.159540\nvt 0.008461 0.284623\nvt 0.024952 0.302240\nvt -0.025106 0.657567\nvt 0.504562 0.201812\nvt -0.203073 -0.058177\nvt 0.049014 1.481862\nvt 0.058036 1.509674\nvt 1.418700 -0.287268\nvt -0.260409 -0.092228\nvt -0.270924 -0.112523\nvt -0.233810 -0.098052\nvt -0.072327 0.273807\nvt 0.601958 0.189674\nvt 0.619468 0.195886\nvt 0.005652 -0.179588\nvt 0.006894 -0.158740\nvt 0.791647 0.305778\nvt 0.816092 0.315348\nvt 0.821448 0.277824\nvt 0.484253 0.032690\nvt 0.485455 0.046976\nvt 0.498394 0.044529\nvt 0.668191 0.209468\nvt 0.689713 0.192484\nvt -0.264695 0.926530\nvt 0.752400 0.279007\nvt 0.787469 0.263500\nvt -0.094807 -0.145961\nvt -0.026310 0.254182\nvt -0.001837 0.260421\nvt -0.000977 0.251661\nvt 0.367168 -0.031564\nvt 0.380686 -0.055825\nvt 0.647954 0.207101\nvt 1.232670 -0.122234\nvt 1.211248 -0.108857\nvt -0.328882 0.850291\nvt -0.017948 1.429669\nvt 1.372907 -0.176843\nvt -0.016794 0.514618\nvt -0.032350 0.633706\nvt -0.023731 0.620040\nvt -0.237501 0.124675\nvt -0.244392 0.101667\nvt -0.231325 0.098489\nvt -0.121753 1.435401\nvt -0.103485 1.453532\nvt -0.096847 0.547172\nvt -0.078221 0.564532\nvt -0.088461 0.570467\nvt 1.352847 -0.181666\nvt 1.354727 -0.161440\nvt -0.013636 0.825706\nvt -0.072838 0.583674\nvt 0.884583 0.295677\nvt 0.889138 0.279529\nvt 0.852509 0.297233\nvt -0.166829 -0.054125\nvt 0.506010 0.238577\nvt 0.517770 0.259120\nvt 0.537559 0.251333\nvt 0.846454 0.241488\nvt 0.037238 -0.124631\nvt 0.058699 -0.160552\nvt 1.350360 -0.142098\nvt -0.369750 -0.161440\nvt 0.720702 0.302226\nvt 0.712953 0.262944\nvt -0.059525 0.583977\nvt 0.551784 0.273807\nvt 0.554919 0.258393\nvt 0.534092 0.261197\nvt 0.859757 0.275479\nvt 0.863554 0.244257\nvt -0.341013 0.812738\nvt -0.257653 0.518454\nvt -0.270081 0.546496\nvt -0.091604 0.216184\nvt -0.176198 0.699327\nvt -0.194230 0.718630\nvt -0.191826 0.696050\nvt -0.007329 0.304083\nvt -0.186562 0.681112\nvt 0.751661 0.251357\nvt -0.059525 0.252873\nvt -0.078221 0.258393\nvt 0.647492 0.094512\nvt 0.330285 -0.019531\nvt 0.310613 -0.000252\nvt 0.326613 -0.034443\nvt 0.533146 0.286491\nvt 0.020586 0.253017\nvt -0.207793 0.121253\nvt -0.215304 0.127435\nvt -0.214764 0.108371\nvt -0.206212 0.094512\nvt 0.045835 -0.185989\nvt 0.013733 1.494074\nvt -0.004307 1.474973\nvt -0.007394 1.496891\nvt 0.560853 0.244432\nvt 0.545443 0.231051\nvt -0.105908 0.621501\nvt -0.081102 0.639215\nvt 0.744767 0.302226\nvt 0.765505 0.300234\nvt -0.431583 0.159167\nvt -0.006873 0.279529\nvt 0.000932 0.295677\nvt 0.669404 0.142524\nvt 0.061372 1.369374\nvt 1.315681 -0.087446\nvt 1.313236 -0.102123\nvt 1.341029 -0.110490\nvt -0.397607 1.072513\nvt -0.043241 0.062901\nvt 0.492591 0.074280\nvt -0.126035 1.409689\nvt -0.014827 0.801261\nvt 0.305874 0.179791\nvt -0.212968 0.150553\nvt -0.204803 0.142524\nvt 0.528453 0.164549\nvt 0.624093 0.197187\nvt 0.610426 0.214591\nvt 0.069821 0.927873\nvt 0.376775 0.537305\nvt 0.365227 0.523408\nvt 0.345209 0.543166\nvt -0.424926 1.242115\nvt -0.175902 0.729344\nvt 0.553565 0.224030\nvt -0.065421 0.200054\nvt -0.375111 0.863460\nvt 0.511260 0.155681\nvt 0.497475 0.159751\nvt -0.433818 1.083732\nvt -0.410544 1.098648\nvt -0.432690 1.113030\nvt -0.296850 1.151025\nvt -0.260418 1.164629\nvt -0.434664 1.148633\nvt -0.246164 0.147013\nvt 0.018521 0.730316\nvt -0.413948 1.064355\nvt -0.194857 1.325062\nvt -0.167836 1.335803\nvt -0.181774 1.305976\nvt -0.218675 0.080806\nvt -0.201792 0.087760\nvt -0.201141 0.071526\nvt 0.091883 -0.219975\nvt 0.146564 0.077737\nvt 0.151945 0.093781\nvt 0.137599 0.076025\nvt 0.520673 -0.035045\nvt 0.514303 -0.054278\nvt 0.496205 -0.048127\nvt 0.711653 -0.045539\nvt 0.730673 -0.060284\nvt -0.312281 1.328483\nvt -0.311683 1.348126\nvt 0.575926 0.216184\nvt -0.050247 0.985939\nvt -0.460766 1.098872\nvt -0.445997 1.140534\nvt -0.424926 0.219929\nvt -0.380062 0.825318\nvt -0.442650 1.060419\nvt -0.427398 1.164153\nvt -0.428601 1.212129\nvt 0.506141 -0.029514\nvt -0.294548 -0.078025\nvt -0.275777 -0.074015\nvt -0.346608 -0.155354\nvt 0.031563 -0.165755\nvt -0.076931 0.610108\nvt -0.099616 0.606074\nvt -0.301859 1.378109\nvt -0.275486 1.378596\nvt -0.187858 0.258824\nvt -0.219955 0.263227\nvt -0.225007 0.247332\nvt -0.213756 0.748365\nvt -0.127410 0.610651\nvt 0.493128 -0.016265\nvt 0.520628 -0.027253\nvt 0.513443 -0.014792\nvt 0.531533 -0.028696\nvt 0.547797 -0.041007\nvt -0.369381 0.978474\nvt 0.502269 0.142480\nvt 0.504247 0.126922\nvt -0.110743 0.515623\nvt -0.119986 0.508527\nvt -0.108833 0.502911\nvt 0.778248 0.163658\nvt 0.755718 0.175502\nvt 0.815705 0.187000\nvt -0.403805 1.202907\nvt 0.664768 0.296817\nvt 0.521573 0.231882\nvt -0.382474 0.783232\nvt -0.381015 0.803039\nvt -0.350568 0.784105\nvt -0.134923 0.646353\nvt -0.072327 0.561397\nvt 1.103417 0.275807\nvt 1.139020 0.276378\nvt 1.130921 0.258183\nvt 0.523126 -0.002101\nvt 0.507148 0.000940\nvt 0.543668 -0.008809\nvt 0.532503 -0.052943\nvt -0.068696 0.608970\nvt -0.068599 0.625110\nvt -0.262936 0.872992\nvt -0.266870 0.831530\nvt -0.322681 -0.008809\nvt -0.306138 -0.020187\nvt 0.838742 0.321513\nvt 1.017165 -0.049191\nvt 1.034407 -0.064213\nvt 1.014252 -0.063401\nvt 0.511803 0.112876\nvt -0.368787 0.928835\nvt -0.087672 0.021653\nvt -0.011318 0.507656\nvt -0.132573 0.719062\nvt -0.069258 0.646679\nvt -0.387048 0.847376\nvt 0.915389 0.100866\nvt -0.311601 0.918905\nvt -0.099616 -0.131372\nvt 0.490644 0.142334\nvt 1.154539 0.277716\nvt 1.171253 0.254451\nvt 0.492099 0.180275\nvt 0.493357 0.202147\nvt 0.548299 0.016919\nvt -0.295305 0.016919\nvt -0.229304 0.583840\nvt -0.200483 0.580198\nvt -0.196420 0.600253\nvt 0.874388 0.119671\nvt 0.887547 0.254182\nvt -0.200483 0.055607\nvt -0.229304 0.025089\nvt 0.925019 0.134180\nvt 1.202516 0.244302\nvt -0.333968 0.532739\nvt -0.339064 0.516761\nvt -0.295305 0.557912\nvt 0.094929 1.437726\nvt -0.044553 0.503982\nvt 0.510001 0.037736\nvt 0.493551 0.023207\nvt -0.127295 0.857190\nvt 0.900624 0.147856\nvt 0.187074 0.003846\nvt 0.176877 0.010899\nvt 0.175698 -0.029798\nvt 1.257015 0.156873\nvt 0.032351 0.245416\nvt -0.144277 -0.100365\nvt -0.142195 0.245930\nvt -0.174207 0.245088\nvt 0.534278 0.033955\nvt -0.088230 0.543705\nvt -0.076169 0.655792\nvt -0.460669 1.075048\nvt 0.821599 0.151912\nvt 0.862547 0.146519\nvt 0.974247 0.150836\nvt -0.023607 0.513898\nvt -0.003873 0.511613\nvt -0.023202 0.502052\nvt -0.281107 0.522909\nvt 0.986224 0.146601\nvt 0.022350 0.658391\nvt 0.126357 0.247734\nvt 0.486322 -0.210376\nvt 0.494362 -0.205699\nvt 0.498144 -0.215339\nvt 0.787400 -0.190038\nvt 0.803750 -0.204038\nvt 0.782696 -0.200913\nvt -0.293695 0.033955\nvt -0.277789 0.041785\nvt -0.126700 0.954955\nvt 0.075862 0.499501\nvt 0.085762 0.521838\nvt -0.308496 0.519615\nvt -0.280958 0.508099\nvt -0.293695 0.543891\nvt 0.878472 0.171587\nvt 0.913290 0.175744\nvt -0.348724 0.765331\nvt -0.376009 0.999080\nvt -0.396479 0.922903\nvt 1.228840 0.198351\nvt 1.265154 0.178613\nvt -0.302338 0.506590\nvt -0.295453 0.499393\nvt -0.277789 0.548605\nvt -0.246883 0.005719\nvt 0.590030 0.010182\nvt 0.583187 -0.009734\nvt 0.567285 0.222582\nvt 0.563244 0.200121\nvt -0.031145 -0.255848\nvt -0.023202 -0.253301\nvt -0.033029 -0.236354\nvt -0.288973 1.129178\nvt -0.330835 1.138791\nvt -0.272664 0.200121\nvt -0.236548 -0.033205\nvt -0.229185 0.010182\nvt -0.289854 0.512668\nvt -0.031145 0.498017\nvt 0.837762 0.188522\nvt 0.498486 0.067375\nvt 0.522414 0.064888\nvt 0.538991 0.041785\nvt -0.266856 0.064888\nvt 0.574227 0.025089\nvt 0.574889 0.005719\nvt -0.196895 0.723424\nvt -0.226705 0.734684\nvt 0.885470 -0.226087\nvt 0.852293 -0.238348\nvt 0.851110 -0.228879\nvt 0.535670 -0.069045\nvt 0.539226 -0.084841\nvt 0.523840 -0.094375\nvt 0.371902 0.547724\nvt 0.342545 0.542615\nvt -0.093935 0.493991\nvt -0.084517 0.504357\nvt 1.276579 -0.307278\nvt -0.426480 0.178613\nvt -0.106716 0.493410\nvt -0.187230 0.579454\nvt -0.209552 0.592708\nvt -0.187439 0.615499\nvt 1.055588 0.221758\nvt 1.041383 0.248040\nvt 1.065435 0.254803\nvt 1.089258 0.256484\nvt 1.232502 0.219929\nvt -0.248689 0.506376\nvt -0.216093 0.876222\nvt -0.193095 0.902968\nvt -0.185024 0.879992\nvt 0.853847 0.203402\nvt 0.997621 0.137718\nvt 0.507540 0.081687\nvt -0.265548 0.081687\nvt -0.068491 0.669658\nvt 0.919221 0.197120\nvt -0.400094 0.888085\nvt -0.170821 1.361364\nvt 1.050806 0.265667\nvt -0.265548 0.517153\nvt -0.252595 0.534277\nvt -0.229185 0.599644\nvt -0.211968 0.628268\nvt -0.317953 0.842212\nvt -0.279537 0.821658\nvt -0.314872 0.814469\nvt 0.913043 0.210811\nvt 0.968861 0.181843\nvt 0.558324 -0.020187\nvt 0.107693 1.046661\nvt -0.278737 1.479637\nvt -0.269392 1.460688\nvt -0.293302 1.472090\nvt 0.107693 -0.173821\nvt 0.136738 -0.184162\nvt 0.097679 -0.193905\nvt 0.075378 -0.175198\nvt 0.228657 1.074563\nvt 0.202981 1.072689\nvt 0.199877 1.094886\nvt -0.063610 1.005730\nvt 0.125858 -0.197464\nvt 0.215150 -0.088924\nvt 1.368495 -0.449679\nvt 1.400259 -0.437220\nvt 0.174825 -0.217112\nvt 0.208253 -0.218791\nvt 0.256042 -0.090949\nvt 0.216578 -0.116354\nvt 0.207842 -0.206722\nvt 1.411261 -0.419563\nvt -0.333698 1.496757\nvt -0.313001 1.476483\nvt 1.436304 -0.420383\nvt 1.466870 -0.455520\nvt -0.327357 1.445917\nvt -0.343763 1.462507\nvt -0.354818 1.478791\nvt 1.353595 -0.396352\nvt -0.369147 1.472542\nvt 1.381159 -0.385427\nvt 1.407575 -0.389819\nvt 1.436961 -0.394674\nvt 1.452893 -0.416146\nvt -0.343763 -0.416146\nvt -0.349000 -0.394674\nvt -0.369147 -0.409109\nvt 1.462928 -0.409109\nvt -0.349000 1.446574\nvt -0.375760 1.462935\nvt 1.453321 -0.396289\nvt 1.307123 -0.378572\nvt 1.335162 -0.354915\nvt 1.440336 -0.380180\nvt 1.450542 -0.382971\nvt -0.377320 -0.380180\nvt -0.375760 -0.396289\nvt 0.289396 0.944704\nvt 0.274875 0.962739\nvt 1.419151 -0.371783\nvt -0.351492 -0.371783\nvt 1.394339 -0.349427\nvt -0.381849 -0.367302\nvt 1.432011 -0.367302\nvt 1.362469 -0.342537\nvt -0.358613 -0.361118\nvt 1.295966 -0.108190\nvt -0.346082 -0.349427\nvt 1.418549 -0.351321\nvt 1.433933 -0.360048\nvt -0.380475 -0.351321\nvt -0.346082 1.403953\nvt -0.380475 1.428163\nvt -0.358613 1.424655\nvt 1.319244 -0.325136\nvt -0.355928 -0.334720\nvt 1.415705 -0.336593\nvt 1.368133 -0.319471\nvt 1.393047 -0.334720\nvt -0.383685 -0.329815\nvt 1.405688 -0.329815\nvt 1.402670 -0.315243\nvt -0.385070 -0.360048\nvt -0.383868 -0.354424\nvt 1.159141 0.173274\nvt 1.318194 -0.297167\nvt 1.376519 -0.312447\nvt -0.295899 0.138024\nvt -0.283985 0.125001\nvt -0.287511 0.112876\nvt 0.353866 0.895168\nvt 0.334854 0.877118\nvt 0.150538 -0.064914\nvt 0.163034 -0.110479\nvt 0.136339 -0.098554\nvt -0.317510 1.087672\nvt -0.285256 1.081018\nvt -0.302210 1.067260\nvt -0.355450 -0.312447\nvt -0.378729 -0.308095\nvt 1.389077 -0.308095\nvt 0.082953 -0.106957\nvt 0.111116 -0.121705\nvt 0.079616 -0.132729\nvt 0.742749 -0.015755\nvt -0.121554 -0.107883\nvt 0.108068 -0.134566\nvt 0.096680 -0.152592\nvt 1.347821 -0.280283\nvt 1.391162 -0.298702\nvt 0.223662 -0.130449\nvt 0.316331 1.046321\nvt 0.325401 1.024596\nvt 0.295014 1.020910\nvt 1.363408 -0.285886\nvt -0.358853 -0.285886\nvt -0.383655 -0.288727\nvt 1.381470 -0.288727\nvt 0.193089 -0.098674\nvt -0.055038 0.784788\nvt 0.775175 -0.284146\nvt 0.800606 -0.274274\nvt 0.797295 -0.297693\nvt 0.830676 -0.296903\nvt 0.855837 -0.273599\nvt 0.845972 -0.302589\nvt -0.334854 -0.297163\nvt -0.353764 -0.268784\nvt -0.345919 -0.307278\nvt 1.308849 -0.275616\nvt 0.357606 1.025828\nvt 0.349182 0.994462\nvt 0.330505 1.002610\nvt -0.032644 0.734820\nvt -0.000055 0.704129\nvt -0.017398 0.704922\nvt 0.725206 -0.284145\nvt 0.736563 -0.268761\nvt 0.745062 -0.294436\nvt 0.782039 -0.268201\nvt 0.829035 -0.267147\nvt 0.883191 -0.266090\nvt 0.865794 -0.291954\nvt 1.329652 -0.262141\nvt 1.379525 -0.266969\nvt 0.069617 -0.225654\nvt 0.111057 -0.228808\nvt 0.079839 -0.269755\nvt 0.711226 -0.262769\nvt 0.695309 -0.280419\nvt -0.030756 -0.072208\nvt -0.380560 -0.260035\nvt 1.365073 -0.260035\nvt 0.203033 1.042668\nvt 0.229582 1.047048\nvt 0.665110 -0.265483\nvt -0.359808 -0.247039\nvt 1.343341 -0.247039\nvt 0.006938 0.667635\nvt -0.017556 0.646960\nvt -0.023582 0.674724\nvt 0.677533 -0.248788\nvt 0.697356 -0.244494\nvt 0.725765 -0.250092\nvt 0.764487 -0.254161\nvt 0.779315 -0.250359\nvt 0.818512 -0.256165\nvt 0.011651 -0.147248\nvt 1.310343 -0.233084\nvt 0.186999 -0.126833\nvt 0.624733 -0.245593\nvt 0.643522 -0.243260\nvt 0.637347 -0.255307\nvt 0.879802 -0.240543\nvt -0.034815 -0.232619\nvt -0.014292 -0.227921\nvt -0.028331 -0.266090\nvt 0.012392 1.531259\nvt 0.006894 1.532146\nvt 0.890551 0.085008\nvt 0.199877 -0.144585\nvt 0.171147 -0.150433\nvt 0.776415 -0.241888\nvt 0.841333 -0.232069\nvt 0.822597 -0.228506\nvt 0.893020 -0.232619\nvt 1.286408 -0.238040\nvt 1.327188 -0.234677\nvt 1.360780 -0.228023\nvt -0.344896 -0.263669\nvt -0.346112 1.005152\nvt 0.202090 0.955007\nvt 0.174825 0.938935\nvt 0.158754 0.951648\nvt 0.704183 -0.224782\nvt 0.729374 -0.220047\nvt 0.762259 -0.229841\nvt 1.277413 -0.227034\nvt -0.379801 -0.233167\nvt 1.352334 -0.233167\nvt -0.317865 -0.114123\nvt 0.488176 -0.235404\nvt 0.517675 -0.228505\nvt 0.497748 -0.242447\nvt 0.512920 -0.238658\nvt 0.536074 -0.236332\nvt 0.189323 0.914298\nvt 0.234267 0.915578\nvt 0.613874 -0.224317\nvt 0.647917 -0.213065\nvt 0.682553 -0.220923\nvt 0.779539 -0.217991\nvt -0.106424 0.555057\nvt 0.535608 -0.216370\nvt 0.562720 -0.230717\nvt 0.565090 -0.214615\nvt 0.798474 -0.216364\nvt -0.076303 0.832211\nvt -0.068496 0.850947\nvt -0.090430 0.074280\nvt 0.028999 -0.170489\nvt 0.062927 -0.183546\nvt 0.034300 -0.185310\nvt 0.666782 -0.200660\nvt 0.704675 -0.204918\nvt 0.750188 -0.208973\nvt 0.828895 -0.210119\nvt 0.838038 -0.222393\nvt 0.081706 0.493399\nvt 0.082401 0.510279\nvt 0.102855 0.501893\nvt 1.317238 -0.204477\nvt -0.356448 -0.204477\nvt -0.375660 -0.209944\nvt 1.335583 -0.209944\nvt 0.001447 -0.067579\nvt 0.042711 -0.071427\nvt 0.014339 -0.097025\nvt 0.125858 1.025300\nvt 0.097679 1.030723\nvt 1.056503 0.135078\nvt -0.152571 0.525343\nvt -0.129838 0.545222\nvt -0.150714 0.507757\nvt -0.129167 0.563979\nvt -0.106089 0.574703\nvt 0.622340 -0.200314\nvt 0.073145 -0.078178\nvt 0.049379 -0.094324\nvt -0.349147 -0.192648\nvt -0.358685 -0.227034\nvt 1.286593 -0.190972\nvt 1.302925 -0.194131\nvt -0.344947 -0.101878\nvt -0.330746 -0.091069\nvt -0.358636 -0.090649\nvt 1.506227 -0.199646\nvt 1.522332 -0.216440\nvt 1.498473 -0.223275\nvt 0.515104 -0.196976\nvt 0.515730 -0.208212\nvt 0.546857 -0.192143\nvt 0.554366 -0.207922\nvt -0.054414 -0.196957\nvt -0.041374 -0.214501\nvt 0.591144 -0.196957\nvt 0.599808 -0.192896\nvt 0.759538 -0.186499\nvt 1.331415 -0.190319\nvt -0.005069 -0.286223\nvt -0.023685 -0.291954\nvt 1.484461 -0.209435\nvt 0.081706 -0.216715\nvt 0.068369 -0.230215\nvt 0.682300 -0.177273\nvt 0.046311 0.936209\nvt 1.277453 -0.186642\nvt 0.997385 0.163292\nvt 1.028095 -0.091929\nvt 1.013342 -0.088487\nvt 0.011457 1.515841\nvt 0.542806 -0.175571\nvt -0.141554 -0.192143\nvt -0.064671 -0.183188\nvt -0.048668 -0.192896\nvt 0.612489 -0.175268\nvt 0.651154 -0.177540\nvt 0.714332 -0.177438\nvt -0.240122 0.508347\nvt -0.349334 -0.124293\nvt -0.372328 -0.186034\nvt 1.318807 -0.186034\nvt 1.042975 0.135090\nvt 0.513125 -0.177594\nvt 0.490504 -0.178180\nvt 0.569631 -0.168835\nvt 0.567146 -0.200099\nvt 0.745406 -0.180079\nvt 1.297200 -0.167662\nvt 1.305258 -0.183113\nvt -0.357357 -0.183113\nvt -0.063767 -0.174128\nvt -0.074343 0.723945\nvt -0.055633 -0.170713\nvt 0.592458 -0.174128\nvt 0.600936 -0.170713\nvt 0.592715 -0.183188\nvt 0.069904 -0.164386\nvt 1.502616 -0.171997\nvt 1.487278 -0.187586\nvt 1.517751 -0.179588\nvt 0.510973 -0.154193\nvt 0.633796 -0.162993\nvt 0.662532 -0.158079\nvt 0.237551 -0.133062\nvt 0.071080 0.856426\nvt 0.034210 0.861767\nvt 0.035805 0.886310\nvt 1.007843 0.145451\nvt -0.210944 0.682330\nvt 1.267710 -0.161975\nvt 1.280055 -0.160457\nvt 1.311579 -0.161592\nvt -0.357474 -0.167662\nvt 0.534154 -0.139630\nvt 0.557836 -0.152844\nvt 0.612034 -0.156638\nvt 1.464054 -0.160263\nvt 0.047647 -0.233285\nvt 0.503241 -0.142003\nvt -0.062899 -0.143106\nvt -0.065114 0.672146\nvt -0.072683 0.679179\nvt 0.067794 0.900930\nvt 0.069130 0.885452\nvt 0.512121 0.727923\nvt 0.524386 0.700104\nvt 0.503212 0.703596\nvt 1.240493 -0.164505\nvt 1.249451 -0.155354\nvt 0.576276 -0.140402\nvt 0.669565 -0.155636\nvt 0.048381 0.907491\nvt 0.027409 0.902143\nvt 0.020986 -0.203158\nvt 0.320587 0.935930\nvt 0.310112 0.915836\nvt -0.461047 1.217109\nvt -0.467546 1.226599\nvt -0.460639 1.248310\nvt 1.294121 -0.146777\nvt 1.287137 -0.137755\nvt 1.477765 -0.140937\nvt -0.075589 -0.131211\nvt -0.059981 -0.167610\nvt -0.088940 -0.143351\nvt 0.512130 -0.072306\nvt 0.492440 -0.048767\nvt 0.511872 -0.042759\nvt 0.824848 -0.139173\nvt 0.853949 -0.137213\nvt 0.830369 -0.154395\nvt -0.376725 0.863563\nvt -0.379669 0.897418\nvt -0.355269 0.863763\nvt 1.266853 -0.132106\nvt 1.276113 -0.126873\nvt -0.032600 -0.160105\nvt 0.315843 0.619124\nvt 0.095125 1.455941\nvt 0.887805 -0.134940\nvt 0.901440 -0.124933\nvt 0.894783 -0.145716\nvt -0.388354 0.911053\nvt -0.281099 -0.431072\nvt -0.079087 1.036480\nvt -0.059981 1.045658\nvt 1.236645 -0.145876\nvt 1.239805 -0.124293\nvt 1.434607 -0.154967\nvt 1.463586 -0.129078\nvt -0.050120 -0.160263\nvt 0.159917 -0.272771\nvt 0.131154 -0.274907\nvt 0.822198 -0.120893\nvt 0.062927 1.026326\nvt 0.857207 -0.110954\nvt 0.918732 -0.104518\nvt 0.923965 -0.129688\nvt -0.369226 0.958436\nvt -0.395266 0.963279\nvt 1.303658 -0.394592\nvt 0.144286 -0.219122\nvt 0.270323 -0.067700\nvt 1.030807 -0.122022\nvt 1.059612 -0.117950\nvt 1.066115 -0.080864\nvt 0.970873 -0.125311\nvt 0.994691 -0.116085\nvt 0.081761 1.005282\nvt 0.046311 -0.222706\nvt 0.041742 -0.268665\nvt 0.051421 1.002926\nvt -0.370178 0.834461\nvt -0.386931 0.831811\nvt 0.825426 -0.104300\nvt -0.395585 0.866820\nvt -0.415838 0.881011\nvt 0.871397 -0.096700\nvt 0.953666 -0.100884\nvt -0.022461 -0.114497\nvt 0.228657 -0.158052\nvt -0.154040 0.566569\nvt -0.138526 0.591624\nvt -0.132834 0.585889\nvt 1.227058 -0.112944\nvt 1.264690 -0.106895\nvt 1.281252 -0.111658\nvt 0.165144 0.974621\nvt 0.198813 0.979347\nvt 0.305879 0.888502\nvt 0.556956 -0.132218\nvt 0.793425 -0.108404\nvt -0.409417 0.865759\nvt 0.895867 -0.102663\nvt 0.248984 1.052068\nvt 1.240464 -0.102720\nvt -0.174465 -0.069857\nvt 1.436570 -0.107883\nvt 1.443919 -0.124400\nvt 1.425787 -0.121709\nvt 0.196069 0.522274\nvt 0.613484 -0.098663\nvt 0.631691 -0.089861\nvt 0.672717 -0.117014\nvt 0.669449 -0.081523\nvt 0.672807 -0.096753\nvt -0.359107 0.760862\nvt -0.054677 -0.036951\nvt 0.378347 1.004305\nvt 0.391202 0.980487\nvt 0.159917 0.912561\nvt 1.229465 -0.098365\nvt 1.418727 -0.100365\nvt 1.391726 -0.104110\nvt 0.111673 -0.261533\nvt 0.100128 -0.286116\nvt -0.029099 -0.185726\nvt -0.063610 -0.184442\nvt -0.029630 -0.177518\nvt -0.359107 -0.106016\nvt 0.773618 -0.098120\nvt 0.800224 -0.091264\nvt 0.826599 -0.092501\nvt -0.408109 0.836212\nvt 0.879840 -0.083701\nvt 0.999001 -0.110238\nvt 0.019909 -0.141803\nvt -0.006927 -0.162600\nvt -0.064444 -0.106367\nvt -0.081761 -0.103943\nvt 1.242721 -0.089609\nvt 1.279156 -0.091932\nvt 1.403828 -0.088422\nvt 0.576110 -0.084098\nvt 0.594171 -0.084174\nvt 0.565959 -0.100871\nvt -0.208913 0.623097\nvt -0.223463 0.603785\nvt -0.219036 0.641304\nvt -0.382541 -0.082199\nvt 0.751248 -0.106016\nvt 0.755257 -0.082199\nvt 0.817026 -0.085564\nvt 0.916666 -0.079312\nvt 0.938485 -0.078838\nvt 0.990793 -0.079698\nvt 1.249789 -0.082306\nvt 1.284814 -0.077661\nvt 1.385775 -0.082931\nvt 1.372527 -0.097688\nvt -0.164224 -0.088422\nvt 0.109056 -0.220637\nvt 0.077797 -0.221297\nvt -0.257769 0.569385\nvt -0.232311 0.585723\nvt -0.238182 0.566609\nvt -0.251251 -0.069454\nvt -0.232311 -0.084098\nvt -0.257769 -0.082607\nvt 0.207842 0.942387\nvt 0.221793 0.949957\nvt -0.318936 -0.087580\nvt -0.341146 -0.077050\nvt -0.376830 -0.074002\nvt 0.775429 -0.070214\nvt 0.828463 -0.071747\nvt 0.857635 -0.076152\nvt 0.856145 -0.097746\nvt -0.031995 -0.101246\nvt -0.036962 0.170107\nvt -0.040757 0.142902\nvt -0.023392 0.160898\nvt 0.144286 0.945331\nvt 0.118626 0.953649\nvt 0.015776 -0.178001\nvt -0.391469 1.222934\nvt -0.367933 1.252335\nvt -0.375411 1.259403\nvt 1.269331 -0.072470\nvt -0.290918 -0.064440\nvt -0.298570 -0.084841\nvt -0.240162 -0.064187\nvt 0.581506 -0.064187\nvt 0.632412 -0.052148\nvt 0.714877 -0.087580\nvt 0.693093 -0.065881\nvt 0.728116 -0.077050\nvt 0.747263 -0.074002\nvt 0.804528 -0.068340\nvt 0.000945 -0.225518\nvt 0.031956 -0.229571\nvt -0.003098 -0.259003\nvt 0.866065 -0.246459\nvt 0.879975 -0.254924\nvt 0.899646 -0.233008\nvt 1.193294 -0.067863\nvt 1.213320 -0.081953\nvt 1.200559 -0.088015\nvt 1.234336 -0.063803\nvt 1.354722 -0.070317\nvt 1.398191 -0.069857\nvt 0.012392 -0.153700\nvt 0.553637 -0.064440\nvt -0.280636 0.044243\nvt -0.267808 0.071550\nvt -0.295453 0.044653\nvt 0.597020 -0.056968\nvt 0.661844 -0.068511\nvt -0.358982 -0.060284\nvt 0.867766 -0.056663\nvt 0.909479 -0.054649\nvt 0.952332 -0.059840\nvt 0.994177 -0.057226\nvt 1.112402 -0.059789\nvt 1.124731 -0.066455\nvt 1.113884 -0.078858\nvt -0.397901 1.243950\nvt -0.380745 1.278945\nvt 1.295882 -0.060103\nvt 1.367185 -0.061490\nvt -0.205156 -0.061490\nvt -0.180636 -0.082931\nvt 1.380919 -0.059004\nvt -0.324528 -0.052943\nvt -0.306020 -0.069045\nvt 0.649205 -0.044455\nvt -0.331199 -0.054812\nvt 0.700930 -0.054812\nvt -0.379624 -0.052381\nvt 0.749612 -0.052381\nvt 0.775346 -0.052666\nvt 1.077717 -0.070072\nvt 1.082330 -0.054225\nvt 1.086630 -0.074181\nvt -0.437304 1.134344\nvt -0.401732 1.261376\nvt 1.283244 -0.049801\nvt 1.309413 -0.055340\nvt 1.476814 -0.415920\nvt -0.263502 -0.042543\nvt 0.845665 -0.044089\nvt 0.944051 -0.048115\nvt 0.981366 -0.046788\nvt -0.408749 1.003790\nvt -0.412185 1.026779\nvt 1.140555 -0.043577\nvt 1.169409 -0.059329\nvt 0.360726 0.977391\nvt 1.325355 -0.070276\nvt 1.345714 -0.046609\nvt -0.317632 -0.041007\nvt -0.306304 -0.039179\nvt 0.582642 -0.036132\nvt 0.226152 0.519378\nvt 0.231086 0.509335\nvt 0.021480 -0.190098\nvt 0.884873 -0.041330\nvt 1.052253 -0.058421\nvt -0.432485 1.214369\nvt -0.417233 1.209797\nvt -0.415358 1.238434\nvt 1.251762 -0.057181\nvt 1.297613 -0.040855\nvt -0.372432 -0.043342\nvt -0.404218 -0.035433\nvt 0.910535 -0.033191\nvt 0.326548 0.851144\nvt 0.308473 0.859635\nvt 1.335330 -0.047214\nvt -0.228075 -0.046609\nvt 0.660300 -0.045524\nvt 0.653563 -0.015112\nvt -0.306020 0.545283\nvt -0.315637 0.529353\nvt -0.324528 0.542116\nvt -0.417383 1.290857\nvt -0.393615 1.292857\nvt -0.408451 1.272577\nvt -0.014218 0.242216\nvt -0.035077 0.291938\nvt -0.038638 0.266303\nvt 0.309994 -0.117950\nvt 1.036708 -0.135073\nvt 0.278659 0.988222\nvt -0.278737 -0.470439\nvt -0.289499 -0.465511\nvt -0.041374 0.602223\nvt -0.036875 0.596176\nvt -0.057778 0.591944\nvt 0.088930 0.887415\nvt 0.100128 0.909287\nvt -0.257129 1.046479\nvt 0.492554 -0.019105\nvt 0.247682 0.961366\nvt 0.225831 0.084186\nvt 0.205500 0.082633\nvt 0.212325 0.068071\nvt 0.263228 -0.142958\nvt -0.203870 0.505919\nvt -0.264019 1.456773\nvt 0.000898 -0.132119\nvt -0.047858 -0.145626\nvt 0.180437 1.058054\nvt 0.442227 0.672319\nvt 0.424238 0.660836\nvt 0.437961 0.686748\nvt 0.061143 -0.160489\nvt 0.043091 -0.152356\nvt -0.328508 0.920197\nvt 0.011643 -0.222319\nvt 1.529284 -0.191674\nvt 0.107402 -0.095132\nvt 0.243596 0.889589\nvt -0.088940 1.066348\nvt 0.173654 0.897402\nvt 0.180437 -0.179887\nvt 0.706330 -0.056467\nvt 0.452642 0.715944\nvt 0.452875 0.700305\nvt 0.434545 0.697209\nvt 0.690691 -0.065862\nvt 0.336547 0.679622\nvt 0.183282 0.864489\nvt 0.331790 1.040420\nvt 0.357606 -0.121109\nvt 0.331790 -0.122022\nvt 0.516931 0.672217\nvt 0.876984 -0.163183\nvt 0.301440 1.002106\nvt 0.408345 0.856430\nvt 0.079616 1.092245\nvt 0.111116 1.114944\nvt 0.190928 1.027772\nvt 0.395701 0.886598\nvt -0.129501 0.127772\nvt 1.017711 -0.105640\nvt 0.361632 -0.072678\nvt 0.371654 -0.105640\nvt -0.044553 0.297584\nvt -0.067552 0.287881\nvt 1.014982 -0.138860\nvt 0.272080 1.009949\nvt 0.157399 1.059978\nvt 0.136738 1.036679\nvt 0.529665 -0.023818\nvt 0.540240 -0.033513\nvt 0.512121 -0.048792\nvt -0.289499 1.492380\nvt 0.274830 1.057953\nvt 0.271900 1.034454\nvt -0.184555 0.189674\nvt 0.451093 0.649814\nvt 0.486546 0.679543\nvt 0.285261 1.063741\nvt 0.500272 -0.028877\nvt 0.014226 -0.275765\nvt 0.027409 -0.290601\nvt 0.310517 0.836149\nvt 0.245607 0.909260\nvt 0.723287 -0.040575\nvt 0.464116 0.732900\nvt 0.468852 0.712095\nvt 1.152767 -0.059468\nvt -0.091115 -0.220942\nvt 0.261049 -0.153857\nvt 0.235622 -0.136424\nvt 0.690490 -0.058695\nvt 0.163034 1.118035\nvt 0.144963 1.083590\nvt 0.136300 1.097970\nvt 0.541909 0.712927\nvt 0.347264 0.837015\nvt 0.345325 0.801549\nvt 0.326037 0.828721\nvt 0.549766 0.672271\nvt 0.309994 1.069225\nvt 0.497694 0.134963\nvt -0.274891 -0.062696\nvt 1.233369 -0.076950\nvt 0.309815 -0.190463\nvt 0.078022 0.990304\nvt -0.266770 -0.054213\nvt 1.289384 -0.062696\nvt -0.253628 -0.036630\nvt -0.001307 0.881971\nvt -0.005069 0.896071\nvt 0.000898 1.082025\nvt -0.047858 1.066344\nvt 0.245607 -0.233008\nvt 0.243596 -0.254924\nvt 0.263228 1.072812\nvt 0.237551 1.096338\nvt -0.253628 1.326428\nvt -0.253619 1.311650\nvt -0.268090 1.318237\nvt -0.253619 -0.050825\nvt -0.251239 1.267601\nvt -0.274891 1.298998\nvt -0.266770 1.303695\nvt -0.270038 1.277142\nvt 0.045727 -0.230594\nvt -0.023685 0.875407\nvt -0.241766 1.294281\nvt -0.266306 1.258921\nvt 0.053686 -0.110517\nvt -0.089774 0.558552\nvt -0.069396 0.573710\nvt 1.302036 -0.050825\nvt -0.218159 1.334968\nvt -0.224716 1.319739\nvt 0.486408 0.597221\nvt 0.458206 0.580096\nvt 0.471880 0.597934\nvt 0.822221 -0.181313\nvt -0.116961 0.545687\nvt -0.096606 0.572334\nvt 0.143739 0.977106\nvt 0.028999 1.051400\nvt -0.032464 1.049860\nvt 0.031956 0.929620\nvt 0.000945 0.922892\nvt 0.011643 0.934790\nvt -0.226065 1.245476\nvt 0.049379 1.110498\nvt 0.082953 1.117542\nvt 0.053686 1.096607\nvt 0.376775 -0.074309\nvt 0.019909 1.070637\nvt -0.279723 1.357954\nvt 0.854149 -0.158495\nvt -0.233177 1.211154\nvt 0.034300 1.035098\nvt 0.540240 0.732854\nvt 0.009389 -0.185447\nvt 0.159785 1.034930\nvt -0.029099 1.016786\nvt 1.257987 -0.070013\nvt 0.085762 -0.165589\nvt -0.247111 1.179519\nvt -0.225300 1.187001\nvt -0.211594 1.159802\nvt -0.231472 1.111795\nvt -0.249338 1.087322\nvt -0.260432 1.100393\nvt -0.240628 1.080364\nvt -0.239461 1.268980\nvt 1.201540 -0.087234\nvt 1.177387 -0.082563\nvt -0.206221 1.173379\nvt -0.219149 1.068968\nvt 0.002824 0.850781\nvt 1.016214 -0.121109\nvt -0.274103 0.080361\nvt -0.280958 0.067375\nvt -0.213645 1.129901\nvt -0.203805 1.119593\nvt -0.203805 -0.100612\nvt -0.185074 -0.134642\nvt -0.240628 -0.128674\nvt -0.195945 1.050965\nvt -0.229809 1.021873\nvt 0.476147 -0.022071\nvt -0.200268 1.140957\nvt -0.185074 1.096423\nvt -0.192356 1.073797\nvt 0.476147 0.752165\nvt 0.500272 0.746074\nvt -0.190708 1.138887\nvt -0.187555 1.014361\nvt 0.227519 0.867524\nvt 1.129274 -0.080166\nvt -0.190708 -0.080166\nvt -0.180585 -0.100626\nvt -0.169557 1.037079\nvt 0.067794 -0.295705\nvt 0.048381 -0.286214\nvt -0.088468 -0.123339\nvt -0.182262 1.162380\nvt -0.173248 1.143766\nvt -0.173248 -0.062864\nvt -0.154000 -0.116971\nvt -0.157850 1.060838\nvt 0.412877 0.650631\nvt 0.422842 0.673401\nvt -0.078248 1.473199\nvt 1.134152 -0.062864\nvt 0.527719 0.671847\nvt 0.358329 0.825348\nvt -0.159038 -0.094760\nvt -0.136511 1.085710\nvt -0.154000 1.116687\nvt 0.111057 0.942500\nvt -0.140341 -0.096024\nvt -0.140594 1.034499\nvt 0.464116 -0.040575\nvt 0.388437 0.948116\nvt 0.034507 -0.240648\nvt -0.111787 1.100978\nvt -0.120795 1.060694\nvt 0.136300 -0.130311\nvt 0.244182 0.510160\nvt 0.265247 0.513298\nvt -0.268884 -0.102544\nvt -0.111787 -0.106498\nvt -0.111787 -0.128275\nvt 0.516626 0.749237\nvt -0.107553 1.041394\nvt 0.124583 0.966768\nvt -0.257309 0.500345\nvt -0.134107 0.522534\nvt -0.238182 -0.099013\nvt -0.097429 1.056984\nvt -0.268884 0.548048\nvt -0.247494 0.493269\nvt -0.097429 -0.157612\nvt -0.120795 -0.155289\nvt 0.094492 0.844203\nvt 0.085328 0.860479\nvt 0.171147 1.083269\nvt -0.101070 0.109157\nvt -0.111787 1.116760\nvt -0.081761 1.104823\nvt -0.088468 1.088078\nvt 0.202981 -0.161833\nvt -0.328745 -0.027647\nvt -0.227174 0.495845\nvt -0.075589 1.077446\nvt -0.079087 -0.173556\nvt -0.362050 1.008614\nvt -0.259031 1.140791\nvt -0.149817 0.935445\nvt -0.365867 1.037709\nvt -0.334684 1.033910\nvt -0.328150 0.956742\nvt 0.300339 -0.072137\nvt -0.254932 0.807908\nvt -0.243851 0.865026\nvt -0.235552 0.834211\nvt -0.349979 0.960635\nvt -0.336721 1.052222\nvt -0.222830 0.850107\nvt -0.312404 0.509241\nvt -0.300808 0.494176\nvt -0.292344 1.055445\nvt -0.374626 1.103141\nvt -0.356245 1.078755\nvt 0.512810 0.632803\nvt -0.206153 1.300980\nvt -0.001332 -0.231884\nvt 0.491183 0.639263\nvt -0.359194 0.839983\nvt 0.482968 0.654329\nvt -0.138526 -0.132502\nvt -0.331462 1.108317\nvt -0.230984 1.007579\nvt -0.327817 0.883604\nvt 0.421411 0.141732\nvt 0.460973 0.624454\nvt -0.038353 -0.013732\nvt -0.354745 -0.255435\nvt -0.183727 0.736294\nvt -0.176867 0.697150\nvt -0.244540 0.920829\nvt -0.251627 0.941268\nvt -0.377506 -0.060103\nvt 0.774491 -0.128553\nvt 0.324798 0.660395\nvt 0.312268 0.662526\nvt -0.268056 0.992951\nvt 0.445824 0.599415\nvt 0.443161 0.629732\nvt 0.154472 -0.062591\nvt -0.268264 1.080955\nvt -0.316917 1.167696\nvt -0.345104 0.766246\nvt -0.344947 0.747983\nvt -0.345104 -0.118983\nvt -0.339682 -0.144504\nvt -0.326128 -0.132170\nvt 0.436563 -0.081116\nvt 0.436563 0.571280\nvt -0.234827 0.905853\nvt -0.183619 0.757405\nvt -0.139831 1.349854\nvt 0.421339 0.598978\nvt 0.423108 0.643444\nvt -0.053166 -0.254290\nvt -0.222343 0.924312\nvt 0.018892 -0.244565\nvt -0.281005 -0.110559\nvt -0.272129 -0.119245\nvt -0.260411 -0.116622\nvt 1.517363 -0.230594\nvt 0.405710 0.620991\nvt -0.169592 0.802611\nvt -0.199583 0.824823\nvt 0.503805 -0.083691\nvt 0.499628 -0.096613\nvt -0.313917 -0.122831\nvt -0.320259 -0.104505\nvt -0.256810 0.901583\nvt -0.182139 0.796098\nvt 0.131137 -0.057344\nvt 0.113520 -0.034175\nvt 0.519740 -0.069445\nvt 0.421938 0.544965\nvt 0.406135 0.549180\nvt 0.398940 0.578349\nvt 0.013691 0.547201\nvt -0.369919 1.132726\nvt -0.326128 0.760457\nvt -0.314599 0.778579\nvt -0.433573 1.096243\nvt -0.425765 1.123497\nvt -0.267236 0.970607\nvt -0.234195 0.959535\nvt -0.238062 0.990621\nvt -0.343874 0.825318\nvt -0.195768 0.855578\nvt -0.152878 0.874021\nvt -0.149506 0.840834\nvt 0.400718 0.635861\nvt -0.142022 0.885532\nvt -0.138077 0.916349\nvt -0.280036 0.780316\nvt 0.406135 -0.077218\nvt 0.385681 0.616207\nvt -0.138977 0.788110\nvt -0.147066 0.815863\nvt -0.163504 0.225265\nvt -0.165833 0.998164\nvt -0.304613 0.533454\nvt 0.583094 -0.101245\nvt 0.684204 -0.105328\nvt 0.693872 -0.118248\nvt -0.304747 1.489518\nvt 0.365790 0.571534\nvt 0.377122 0.596019\nvt -0.298777 1.444517\nvt 0.367805 0.600902\nvt -0.039418 0.099540\nvt -0.041741 0.085087\nvt 0.135266 0.504311\nvt -0.072495 0.267497\nvt -0.397597 1.000406\nvt -0.198906 0.956682\nvt -0.199675 0.984396\nvt -0.176468 0.955890\nvt -0.033959 0.754676\nvt -0.226205 1.284529\nvt -0.136904 0.748268\nvt 0.352361 0.584084\nvt -0.157286 1.324434\nvt -0.226016 0.707146\nvt -0.167660 0.760866\nvt -0.157965 0.781496\nvt -0.251543 -0.068690\nvt -0.157598 0.719219\nvt -0.147034 0.747594\nvt -0.312281 -0.415287\nvt -0.180648 0.644990\nvt -0.150041 0.637106\nvt -0.157753 0.616502\nvt -0.157617 0.705754\nvt -0.157913 0.684370\nvt -0.233810 0.691395\nvt -0.221232 0.693817\nvt -0.339584 0.808451\nvt -0.339682 0.785941\nvt -0.436460 1.087331\nvt 0.412893 0.823739\nvt -0.138450 0.863544\nvt -0.167257 0.590192\nvt -0.164987 0.543767\nvt -0.259156 0.737852\nvt 0.681782 -0.098052\nvt -0.233197 -0.081523\nvt 0.319434 0.527942\nvt -0.011318 0.308821\nvt 1.479905 -0.462889\nvt 1.489068 -0.452921\nvt -0.161785 0.664003\nvt -0.225946 0.682420\nvt -0.153536 0.906573\nvt -0.193850 0.921926\nvt -0.180313 0.676598\nvt -0.143738 0.497789\nvt -0.137732 0.507361\nvt 0.317033 0.735049\nvt 0.317135 0.770183\nvt 0.668138 -0.142981\nvt -0.330746 0.735420\nvt -0.042534 0.237534\nvt 0.325448 0.596970\nvt 0.305492 0.609861\nvt 0.609511 -0.212176\nvt 0.108803 0.535386\nvt 0.129927 0.510736\nvt 0.306932 0.804585\nvt 0.278719 -0.040926\nvt 0.265397 -0.061582\nvt 0.272927 -0.100796\nvt 1.029927 0.173977\nvt 1.347953 -0.445174\nvt -0.214508 0.941368\nvt 0.295298 0.587141\nvt 0.600248 -0.216435\nvt 0.624375 -0.232680\nvt 0.306476 0.633989\nvt 0.677180 -0.233377\nvt 0.708706 -0.241506\nvt 0.725436 -0.231191\nvt 0.696090 -0.218010\nvt 0.297450 0.756952\nvt -0.137841 0.685248\nvt 0.293222 0.616988\nvt 0.289652 0.635884\nvt 0.303117 0.686794\nvt 0.304039 0.718319\nvt 0.290730 0.736323\nvt 0.293475 0.786801\nvt -0.236682 -0.068511\nvt 0.279822 0.810417\nvt 0.343928 -0.100800\nvt 0.297570 0.578716\nvt 0.276901 0.589731\nvt 0.272064 0.600331\nvt 0.263197 0.674549\nvt 0.282551 0.702324\nvt -0.278377 -0.058277\nvt -0.362582 0.814367\nvt 0.273704 0.571875\nvt 0.276047 0.634014\nvt 0.269480 0.650567\nvt -0.237683 0.492322\nvt -0.259156 -0.153555\nvt 0.264089 0.614696\nvt 0.269397 0.738218\nvt 0.253567 0.752485\nvt 0.259457 0.777386\nvt 1.476233 -0.434701\nvt 1.487657 -0.424763\nvt 1.487143 -0.440694\nvt 0.250811 0.558997\nvt 0.252662 0.697887\nvt 0.254356 0.717719\nvt 0.248642 0.583295\nvt 0.252101 0.600631\nvt 0.250367 0.621325\nvt 0.246898 0.735612\nvt 0.239489 0.804803\nvt 0.249313 0.827314\nvt -0.043644 -0.240543\nvt -0.047593 -0.226087\nvt 0.244471 0.642996\nvt 0.229993 0.677534\nvt 0.225285 0.749079\nvt 0.235388 0.780037\nvt 0.233251 0.539497\nvt 0.229502 0.562592\nvt 0.226298 0.726404\nvt 0.232595 0.833928\nvt 0.827401 -0.203566\nvt 0.815734 -0.193731\nvt 0.791936 -0.209528\nvt 0.211966 0.577274\nvt 0.225075 0.596921\nvt 0.212710 0.630415\nvt 0.222327 0.699893\nvt 0.218151 0.778076\nvt 0.213289 0.809408\nvt 0.208878 0.839021\nvt 0.207444 0.543428\nvt 0.202011 0.592898\nvt 0.206448 0.640005\nvt 0.210140 0.749389\nvt 0.194202 0.674248\nvt 0.195077 0.706560\nvt 0.208484 0.783340\nvt 0.190692 0.606683\nvt 0.195488 0.728793\nvt 0.197688 0.826740\nvt 0.182714 0.524430\nvt 0.176765 0.558456\nvt 0.189092 0.571867\nvt 0.191004 0.747602\nvt 0.186043 0.810342\nvt -0.260411 0.492418\nvt 0.185446 1.009227\nvt 0.190952 0.509619\nvt 0.170242 0.549586\nvt 0.186489 0.649830\nvt 0.166141 0.760179\nvt 0.178770 0.782810\nvt 0.177700 0.585539\nvt 0.179215 0.622816\nvt 0.169356 0.731626\nvt 0.172489 0.831443\nvt 0.169944 0.854532\nvt -0.206507 0.493663\nvt 0.163349 0.603317\nvt 0.169881 0.646254\nvt 0.168087 0.679547\nvt 0.162953 0.704746\nvt 0.154161 0.500784\nvt 0.158951 0.509414\nvt 0.150259 0.803494\nvt 0.499117 0.270415\nvt 0.498526 0.250383\nvt -0.429100 1.061867\nvt 0.150190 0.569072\nvt 0.150190 -0.235869\nvt 0.142534 -0.252894\nvt 0.177700 -0.252036\nvt 0.189092 -0.233498\nvt 0.155962 0.628192\nvt 0.148082 0.525778\nvt 0.142534 0.580811\nvt 0.146639 0.594866\nvt 0.147030 0.653221\nvt 0.143635 0.731584\nvt 0.149761 0.825017\nvt 0.145467 0.559464\nvt 0.130470 0.618196\nvt 0.147756 0.697473\nvt 0.138718 0.843761\nvt 0.133445 0.865572\nvt 0.815705 -0.162925\nvt 0.127342 0.549699\nvt 0.145467 -0.227135\nvt 0.128349 0.690191\nvt 0.132327 0.763655\nvt 0.132274 0.500871\nvt 0.125630 0.559423\nvt 0.125630 -0.232625\nvt 0.126775 0.654139\nvt 0.118058 0.715557\nvt 0.113381 0.795826\nvt 0.127329 0.813755\nvt 0.125329 0.834260\nvt 0.118226 -0.254029\nvt 0.118226 0.574506\nvt 0.114061 0.601036\nvt 0.117491 0.734019\nvt 0.115513 0.985005\nvt 0.110059 0.621702\nvt 0.116839 0.674620\nvt 0.107804 0.776993\nvt 0.107095 0.652922\nvt 0.094733 0.743291\nvt 0.094173 0.827712\nvt 0.100735 0.576567\nvt 0.088577 0.683235\nvt 0.085888 0.697489\nvt 0.253841 -0.099387\nvt 0.087081 0.558607\nvt 0.087081 -0.233803\nvt 0.100735 -0.257510\nvt 0.083831 0.625970\nvt 0.093670 0.717937\nvt 0.073591 0.653758\nvt 0.093639 0.759485\nvt 0.095481 0.791921\nvt 0.084858 -0.255821\nvt 0.084858 0.577895\nvt 0.071029 0.608279\nvt 0.074008 0.747119\nvt 0.074899 0.779355\nvt 0.057486 0.793692\nvt 0.053787 0.815377\nvt 0.068369 0.501051\nvt 0.063643 0.581746\nvt 0.063524 0.641455\nvt 0.062416 0.676420\nvt 0.059079 0.714961\nvt 0.391196 0.082601\nvt 0.059176 0.560319\nvt 0.063643 -0.257882\nvt 0.054917 0.696064\nvt -0.298570 0.548840\nvt 0.039116 1.446740\nvt 0.039991 0.844858\nvt -0.113291 0.591784\nvt 0.512792 0.164949\nvt 0.492306 0.165412\nvt 0.493298 0.233082\nvt 0.039544 0.573317\nvt 0.045664 0.612574\nvt 0.044286 0.662467\nvt 0.040900 0.714936\nvt 0.048243 0.765682\nvt 0.218968 -0.034176\nvt 0.207490 -0.020910\nvt 0.488506 0.183614\nvt 0.034872 0.564673\nvt -0.277270 -0.162905\nvt 0.214272 -0.055270\nvt 0.027594 1.468882\nvt 0.030253 1.508087\nvt 0.004078 0.746831\nvt 0.014372 0.768624\nvt 0.021028 0.816258\nvt 0.045727 1.526977\nvt 0.018354 0.596696\nvt 0.022691 0.633511\nvt 0.016604 0.702561\nvt 0.019350 0.715354\nvt -0.273169 0.499728\nvt -0.283176 0.503477\nvt 0.493423 0.080361\nvt 0.490115 0.091708\nvt 0.011805 0.580902\nvt 0.033661 0.191321\nvt 0.000233 0.207554\nvt 0.021577 0.134767\nvt 0.008623 1.440095\nvt 0.005370 0.819101\nvt 0.043008 0.148014\nvt -0.216373 -0.118248\nvt -0.221232 -0.105328\nvt 0.446250 0.105135\nvt 0.422036 0.112870\nvt 0.430762 0.086882\nvt 0.494822 0.109774\nvt -0.267612 0.105876\nvt 0.176179 -0.048767\nvt 0.004399 0.576160\nvt -0.004852 0.591428\nvt -0.006687 0.775312\nvt -0.286541 0.504436\nvt -0.287511 0.521416\nvt -0.267612 0.527392\nvt 0.212033 -0.151693\nvt 0.184061 -0.161326\nvt 0.220088 -0.163181\nvt 0.171841 0.208144\nvt 0.197886 -0.081147\nvt 0.493864 0.098959\nvt -0.020841 0.634346\nvt 0.756633 -0.118983\nvt 0.090630 -0.008657\nvt 0.069428 -0.023846\nvt -0.027036 0.600284\nvt 1.427730 -0.244138\nvt -0.309183 1.498681\nvt -0.252754 0.083852\nvt 0.054273 -0.058884\nvt 0.043719 -0.022072\nvt 0.063862 0.290295\nvt 1.177723 -0.084078\nvt 0.287133 0.168174\nvt 0.248205 0.168167\nvt 0.244746 0.137880\nvt 0.271261 0.200268\nvt 0.227349 0.215804\nvt 0.222408 0.507808\nvt 0.191215 0.507822\nvt 0.299708 0.062993\nvt 0.299545 0.080258\nvt 0.274769 0.094667\nvt 0.455577 0.071375\nvt 0.324035 0.039704\nvt 0.305893 0.039761\nvt 0.079475 0.505069\nvt 0.121581 0.224103\nvt 0.073490 0.171248\nvt 0.306904 0.016542\nvt 0.149123 0.043142\nvt 0.162513 0.058324\nvt 0.155730 0.066782\nvt 0.357721 -0.014736\nvt -0.082125 0.270415\nvt 0.022895 0.292307\nvt 0.045790 0.294612\nvt 0.028697 0.303903\nvt 0.224206 0.237569\nvt 0.196083 0.245797\nvt 0.209117 0.213296\nvt 0.046700 0.215658\nvt 0.491845 0.004891\nvt 0.316351 0.061492\nvt 0.212143 0.191901\nvt 0.207490 0.499569\nvt 0.214989 0.510412\nvt 0.195526 0.501835\nvt 0.233004 0.143013\nvt 0.230918 0.171827\nvt 0.318077 0.096921\nvt 0.244514 0.091187\nvt 0.257947 0.225895\nvt 0.299683 -0.019801\nvt 0.306571 -0.032571\nvt 0.244182 0.245861\nvt 0.222408 0.250015\nvt 0.480210 0.067017\nvt 0.325002 0.009756\nvt -0.325582 -0.271006\nvt -0.337338 -0.253061\nvt 0.490189 0.091336\nvt 0.133576 0.138120\nvt 0.106055 0.095443\nvt 0.343861 0.016671\nvt 0.293941 0.134856\nvt 0.169889 -0.116760\nvt 0.148062 -0.107017\nvt 0.159908 -0.166085\nvt 0.125635 -0.172201\nvt 0.136504 -0.182230\nvt 0.180451 -0.175743\nvt 0.490265 -0.034176\nvt 0.500799 -0.021447\nvt 0.489955 -0.020910\nvt 0.049410 0.244023\nvt 0.179868 0.083661\nvt 0.167985 0.087967\nvt 0.222997 0.168483\nvt 0.182833 0.107000\nvt 0.186383 0.020106\nvt 0.190504 0.039660\nvt 0.177620 0.033571\nvt 0.031216 0.012282\nvt 0.172932 0.115072\nvt -0.072305 0.204303\nvt 0.493545 -0.107242\nvt 0.495303 -0.081147\nvt 0.513797 -0.098190\nvt 0.100984 0.199018\nvt 0.068527 0.208021\nvt 0.109685 0.155402\nvt 0.494602 0.143013\nvt 0.494187 0.171827\nvt 0.503677 0.168483\nvt 0.285049 -0.015777\nvt 0.099035 0.280406\nvt 0.100411 0.264465\nvt 0.097032 0.506854\nvt -0.013481 0.078832\nvt -0.027585 0.051509\nvt 0.702034 0.014729\nvt 0.520271 0.288369\nvt 0.007626 0.066282\nvt -0.474690 0.073524\nvt -0.477750 0.108244\nvt 0.265247 0.239688\nvt 0.986778 0.164958\nvt 0.191215 0.256060\nvt -0.460041 0.135090\nvt 0.121954 0.015151\nvt 0.202840 0.058431\nvt 0.193936 0.200688\nvt -0.046894 0.186003\nvt 0.495287 0.043142\nvt 0.496095 0.066782\nvt 0.510867 0.046426\nvt 0.491388 0.191901\nvt 0.514960 0.171566\nvt 0.135266 0.264493\nvt 0.125194 0.194964\nvt 0.345595 0.062786\nvt 0.222949 0.119372\nvt 0.125635 0.500067\nvt 0.159908 0.500640\nvt 0.150885 0.520375\nvt 0.175768 0.512107\nvt 0.306358 0.135013\nvt 0.069153 0.046201\nvt 0.050279 0.053637\nvt 0.059150 0.009557\nvt -0.062020 0.164949\nvt 0.273106 0.227760\nvt 0.515885 -0.014182\nvt 0.511399 0.007109\nvt 0.080162 0.120041\nvt 0.051668 0.095016\nvt -0.461927 0.173977\nvt 0.490487 0.011782\nvt 0.516859 -0.112641\nvt 0.123262 0.274687\nvt 0.252362 -0.046610\nvt -0.449632 0.183098\nvt 0.275474 -0.148003\nvt 0.159087 -0.019105\nvt 0.154372 0.011782\nvt 0.188953 0.068031\nvt -0.431947 0.146275\nvt -0.307129 -0.096055\nvt -0.316756 -0.075557\nvt -0.322382 -0.083234\nvt 0.514494 0.154740\nvt 0.326480 0.143052\nvt 0.158095 0.253604\nvt 0.491995 -0.130449\nvt -0.460307 0.216613\nvt -0.192975 0.245741\nvt 0.158095 0.502047\nvt 0.135210 -0.014182\nvt -0.002907 0.137568\nvt -0.417243 0.163589\nvt 1.027418 0.216613\nvt 0.159354 0.153492\nvt 0.151898 0.183019\nvt 0.025410 0.251640\nvt -0.005949 0.294031\nvt 0.156514 0.116823\nvt 0.098801 0.045950\nvt -0.097950 0.250383\nvt -0.444734 0.225024\nvt 0.396575 0.134160\nvt 0.370191 0.107124\nvt 0.147298 -0.135607\nvt 0.126675 -0.119298\nvt 0.108236 -0.150561\nvt 0.133932 0.528487\nvt 0.133932 -0.151097\nvt -0.407703 0.145451\nvt -0.454877 0.248040\nvt 0.205615 0.116391\nvt 0.196864 0.103195\nvt -0.393317 -0.014037\nvt -0.077009 -0.003553\nvt 0.260502 -0.031200\nvt 0.246313 -0.035879\nvt 0.169273 -0.147777\nvt -0.422466 0.200630\nvt 0.012784 0.104194\nvt 0.246313 0.498863\nvt 0.260502 0.508435\nvt 0.218968 0.499879\nvt 0.015506 0.306083\nvt 0.015506 0.508278\nvt -0.398422 0.183922\nvt -0.419109 0.229007\nvt -0.373480 -0.006826\nvt -0.027182 0.196445\nvt -0.392343 0.163292\nvt -0.415741 0.247227\nvt -0.418328 0.265447\nvt -0.418328 1.041419\nvt -0.454877 1.050996\nvt 0.378766 0.005307\nvt -0.390332 0.012230\nvt 0.029795 0.078587\nvt -0.406074 0.052759\nvt -0.404545 0.098344\nvt -0.424941 0.057573\nvt 0.362970 0.043539\nvt -0.316840 1.041249\nvt 0.714744 0.026115\nvt 0.366419 0.535255\nvt 0.366419 0.127211\nvt 0.702365 -0.004009\nvt -0.389774 0.207223\nvt -0.364690 0.026115\nvt -0.388637 0.049632\nvt 0.734985 0.093694\nvt -0.376009 0.179587\nvt -0.052384 0.132267\nvt 0.989467 0.179587\nvt -0.374461 0.241856\nvt -0.353214 -0.004009\nvt -0.362129 0.195786\nvt -0.365731 0.201761\nvt -0.389088 0.255488\nvt -0.389088 1.024258\nvt -0.389635 1.039938\nvt 0.175768 0.260018\nvt 0.155627 0.263418\nvt -0.375573 0.093694\nvt -0.391142 0.068463\nvt 0.748765 0.131633\nvt 0.290508 -0.083234\nvt 0.282415 -0.101267\nvt -0.056580 0.222842\nvt -0.361067 0.048178\nvt -0.372961 0.163658\nvt -0.403670 0.145326\nvt -0.388219 0.128671\nvt 1.034147 0.282324\nvt 1.045900 0.273249\nvt 1.030325 0.262873\nvt 0.712236 0.048178\nvt 0.278014 -0.127665\nvt 0.972654 0.195496\nvt 0.988572 0.195786\nvt 0.216400 0.154740\nvt 0.214877 0.171566\nvt -0.329318 0.016373\nvt -0.354482 0.014729\nvt -0.341009 0.033470\nvt -0.356225 0.077449\nvt 0.727823 0.118056\nvt -0.362129 0.998185\nvt -0.365731 1.003518\nvt -0.343451 0.198773\nvt -0.349438 0.239225\nvt -0.362508 0.259116\nvt -0.362508 1.022393\nvt -0.374857 0.282324\nvt -0.389635 0.262873\nvt -0.319632 -0.003303\nvt 0.691066 0.061613\nvt 0.714591 0.077449\nvt -0.358986 0.118056\nvt -0.346112 0.204823\nvt -0.343772 0.273967\nvt -0.357332 0.290687\nvt 0.094759 0.228587\nvt 0.677831 0.016373\nvt 0.680549 0.037865\nvt 0.693841 0.033470\nvt -0.338127 0.101307\nvt -0.015585 -0.201646\nvt -0.357332 1.042465\nvt -0.332868 -0.056360\nvt -0.332837 -0.038782\nvt -0.342339 -0.048127\nvt 0.487040 0.071550\nvt 0.489779 0.044653\nvt -0.293784 -0.028260\nvt 0.707799 0.101307\nvt 0.384240 0.025263\nvt -0.321013 0.023207\nvt -0.302338 0.045088\nvt 0.485829 -0.038782\nvt -0.289273 0.003160\nvt -0.314602 0.028639\nvt -0.329934 0.037865\nvt -0.327324 0.076165\nvt -0.342744 0.061613\nvt -0.334624 0.152032\nvt -0.373780 0.131633\nvt -0.348724 0.175502\nvt -0.330277 0.200099\nvt 0.352471 0.080352\nvt -0.283983 -0.021880\nvt -0.304269 0.044411\nvt -0.313417 0.125698\nvt 0.349555 0.115239\nvt -0.330374 0.296401\nvt -0.296361 -0.082615\nvt -0.300808 -0.103679\nvt -0.301719 -0.051178\nvt -0.323558 -0.015106\nvt -0.340741 -0.016265\nvt -0.248073 -0.045524\nvt 0.484922 -0.154149\nvt -0.310526 0.076406\nvt -0.325741 0.188327\nvt -0.274477 -0.081387\nvt -0.305028 0.019602\nvt -0.334135 0.004891\nvt -0.274763 0.023052\nvt 0.169273 0.525493\nvt 0.511946 0.077737\nvt 0.509405 -0.138929\nvt 0.488876 -0.151693\nvt 0.155958 -0.042759\nvt -0.293480 0.142334\nvt -0.286541 0.109774\nvt -0.276579 0.115870\nvt -0.280510 0.061048\nvt -0.294753 0.093852\nvt -0.293808 0.157601\nvt -0.325741 0.758084\nvt 0.499589 0.287881\nvt -0.278328 0.001277\nvt -0.249728 -0.015112\nvt -0.260622 0.038612\nvt -0.237683 -0.126963\nvt -0.247494 -0.128386\nvt -0.253367 -0.047990\nvt -0.280893 0.119116\nvt -0.227174 -0.135771\nvt -0.224808 -0.111546\nvt -0.230676 -0.071676\nvt -0.268243 0.090255\nvt -0.239447 0.059441\nvt 0.496977 0.045088\nvt -0.307129 0.493598\nvt -0.322382 0.497594\nvt -0.206507 -0.134655\nvt -0.274501 0.182150\nvt -0.210526 -0.079135\nvt -0.242898 -0.040087\nvt -0.244134 0.014285\nvt 0.484563 -0.103679\nvt 0.483985 -0.096055\nvt -0.262957 0.175051\nvt -0.274501 0.725951\nvt -0.191031 -0.143808\nvt -0.195868 -0.119710\nvt 0.150885 -0.157298\nvt -0.175952 -0.154149\nvt -0.180315 -0.130765\nvt -0.254703 0.070592\nvt -0.283176 0.098959\nvt -0.143738 -0.235404\nvt -0.149343 -0.203638\nvt -0.153481 -0.210376\nvt 0.482268 -0.203638\nvt 0.483454 -0.170405\nvt -0.164931 -0.178180\nvt -0.162177 -0.170405\nvt -0.198165 -0.001543\nvt -0.273169 0.091708\nvt 1.240574 -0.018809\nvt 1.237839 -0.030160\nvt -0.286674 0.170154\nvt -0.296409 0.180275\nvt -0.303640 0.159751\nvt -0.233727 0.198954\nvt -0.233727 0.727925\nvt -0.121442 -0.229247\nvt -0.131062 -0.247149\nvt -0.157942 -0.144341\nvt -0.219664 0.048173\nvt -0.119248 -0.257699\nvt -0.106716 -0.258188\nvt -0.164236 -0.092388\nvt -0.180091 -0.061478\nvt -0.185426 -0.026170\nvt -0.206337 0.023921\nvt -0.232322 0.085787\nvt -0.245985 0.123941\nvt -0.258065 0.161978\nvt -0.293003 0.202147\nvt -0.228609 0.172813\nvt -0.125215 -0.160943\nvt 0.283410 0.074944\nvt -0.093935 -0.264288\nvt -0.087608 -0.246071\nvt -0.144440 -0.093219\nvt -0.220967 0.071261\nvt -0.279719 0.218106\nvt -0.283956 0.229058\nvt -0.100226 -0.193352\nvt -0.162979 -0.052387\nvt -0.187398 0.010493\nvt -0.261215 0.224527\nvt -0.070706 -0.258271\nvt -0.130531 -0.119127\nvt -0.171394 -0.015525\nvt -0.181745 -0.002376\nvt -0.213491 0.066514\nvt -0.209650 0.086484\nvt -0.223842 0.127010\nvt -0.117226 -0.157094\nvt -0.130789 -0.096104\nvt -0.203541 0.706881\nvt -0.192575 0.739706\nvt -0.108283 -0.151895\nvt -0.092982 -0.177769\nvt -0.117448 -0.126449\nvt -0.125640 -0.067959\nvt -0.119793 -0.053955\nvt -0.148228 -0.026807\nvt -0.161216 -0.001820\nvt -0.262726 0.242559\nvt -0.076319 -0.201733\nvt 0.494165 -0.126449\nvt 0.500428 -0.106120\nvt 0.486020 -0.096104\nvt -0.219863 0.193029\nvt -0.262726 0.502037\nvt -0.283956 0.505741\nvt -0.065228 -0.186772\nvt -0.080256 -0.157815\nvt -0.091718 -0.142401\nvt 0.514944 -0.107100\nvt 0.492842 -0.151895\nvt 0.514473 -0.142401\nvt -0.139861 -0.009446\nvt -0.171394 0.491928\nvt -0.139861 0.494329\nvt -0.161216 0.506873\nvt -0.196560 0.121661\nvt -0.192489 0.141131\nvt -0.248689 0.257392\nvt 0.644601 0.015970\nvt -0.040673 0.309479\nvt -0.044115 -0.207518\nvt -0.063629 -0.167853\nvt -0.065228 0.505303\nvt -0.063629 0.525443\nvt -0.092982 0.498022\nvt -0.095189 -0.093275\nvt -0.105512 -0.107100\nvt -0.025824 -0.192456\nvt -0.047562 0.521430\nvt -0.068211 -0.143107\nvt -0.105955 -0.034881\nvt -0.118932 0.008723\nvt -0.196320 0.194230\nvt -0.040592 -0.166217\nvt -0.067539 -0.084863\nvt -0.106336 0.002672\nvt -0.025824 0.502029\nvt -0.047562 -0.178499\nvt -0.081656 -0.066867\nvt -0.154208 0.151352\nvt -0.154277 0.134230\nvt 0.371902 0.136601\nvt -0.025373 0.524400\nvt -0.025373 -0.178029\nvt -0.044845 -0.118027\nvt -0.086511 -0.022483\nvt -0.107727 0.020227\nvt -0.061267 -0.058292\nvt -0.089742 0.044529\nvn -0.0198 0.0994 -0.9948\nvn -0.9845 0.0661 -0.1627\nvn -0.2253 0.9711 -0.0792\nvn -0.2201 0.9696 -0.1073\nvn -0.3579 0.9238 0.1360\nvn -0.1265 0.9836 -0.1283\nvn -0.0848 0.9237 0.3736\nvn 0.1444 -0.9378 -0.3156\nvn 0.0035 0.7173 0.6968\nvn -0.3696 0.7375 0.5653\nvn 0.2809 0.9566 -0.0781\nvn -0.8285 -0.5415 -0.1428\nvn 0.1251 0.4835 0.8664\nvn -0.4242 0.8184 0.3877\nvn -0.1184 0.7292 0.6740\nvn -0.1596 0.9871 0.0110\nvn -0.8462 0.4448 0.2936\nvn 0.3318 0.9426 0.0361\nvn -0.4863 0.8671 0.1080\nvn -0.3425 0.9017 0.2638\nvn 0.4989 0.8319 0.2430\nvn -0.1017 0.9761 0.1921\nvn -0.8661 0.4999 -0.0094\nvn 0.5034 0.8322 0.2322\nvn -0.6061 0.7836 -0.1363\nvn -0.5523 0.3505 -0.7564\nvn -0.0048 -0.9999 -0.0108\nvn -0.4214 -0.4880 0.7644\nvn 0.3606 0.9320 0.0370\nvn -0.0299 0.9940 0.1049\nvn -0.9153 -0.4010 0.0381\nvn -0.9271 0.1943 0.3206\nvn -0.3584 0.8615 0.3596\nvn 0.6509 0.6415 0.4059\nvn -0.9903 -0.0967 -0.0998\nvn -0.2717 0.9434 0.1903\nvn -0.0338 -0.9524 -0.3029\nvn -0.1777 0.9736 -0.1434\nvn -0.9290 0.0807 -0.3612\nvn -0.3019 0.8963 0.3249\nvn -0.9484 -0.2350 -0.2128\nvn -0.3525 0.8529 0.3851\nvn -0.2653 0.9440 0.1963\nvn -0.3007 0.8654 0.4008\nvn -0.2799 0.8966 0.3433\nvn 0.2313 -0.9638 -0.1327\nvn -0.9304 -0.3641 0.0427\nvn -0.9567 0.2019 -0.2095\nvn -0.9679 0.1336 -0.2128\nvn -0.9134 -0.4028 -0.0586\nvn 0.3034 0.8037 0.5120\nvn -0.2786 0.8990 0.3380\nvn -0.7854 -0.2971 0.5430\nvn 0.3555 0.9150 0.1907\nvn 0.7000 0.4138 -0.5820\nvn -0.2175 0.8512 0.4777\nvn -0.2252 0.9064 0.3573\nvn -0.1326 0.9904 0.0400\nvn 0.6840 0.2154 -0.6970\nvn 0.6227 0.7658 0.1607\nvn 0.7301 0.6390 0.2421\nvn 0.9100 0.4146 0.0012\nvn 0.7008 0.4631 0.5425\nvn 0.7974 0.5093 0.3237\nvn 0.0156 0.7799 0.6257\nvn -0.3712 0.8801 0.2960\nvn 0.6738 0.6597 0.3327\nvn 0.7915 0.6053 0.0845\nvn 0.1138 0.9238 0.3656\nvn 0.3946 0.7157 -0.5763\nvn 0.1990 0.8968 0.3952\nvn -0.9862 -0.1478 -0.0753\nvn -0.0285 -0.9994 0.0219\nvn -0.4042 -0.1584 0.9008\nvn -0.0894 0.9552 0.2820\nvn -0.8620 0.4958 -0.1060\nvn -0.9362 0.0175 -0.3510\nvn -0.1812 0.7204 0.6694\nvn -0.1925 0.9652 0.1772\nvn -0.8981 0.3734 -0.2325\nvn -0.6761 -0.0227 -0.7365\nvn 0.7450 0.6325 0.2119\nvn -0.1593 -0.4949 0.8542\nvn -0.1560 -0.3619 0.9191\nvn -0.2111 0.3597 0.9089\nvn -0.9910 -0.1311 0.0281\nvn -0.8086 -0.5883 -0.0109\nvn -0.4042 0.8281 0.3885\nvn -0.1260 0.6372 0.7603\nvn -0.3938 -0.5638 -0.7260\nvn -0.0575 0.9177 0.3932\nvn -0.1953 0.3646 0.9105\nvn -0.2758 0.6029 0.7486\nvn -0.0639 0.9835 0.1693\nvn -0.3426 0.7529 0.5619\nvn -0.9986 -0.0331 0.0415\nvn -0.8533 0.2191 -0.4732\nvn -0.4227 0.8143 0.3977\nvn -0.1371 -0.4890 -0.8614\nvn -0.0346 0.8973 0.4400\nvn 0.0134 0.9995 0.0280\nvn 0.0231 0.9975 0.0661\nvn -0.9412 -0.3358 0.0373\nvn -0.2438 0.3809 0.8919\nvn 0.0820 0.9855 -0.1483\nvn -0.8836 -0.4675 -0.0274\nvn 0.0913 -0.5981 -0.7962\nvn 0.1026 -0.1814 0.9780\nvn -0.0940 0.5360 0.8390\nvn -0.9622 0.1105 0.2490\nvn -0.0201 -0.5679 -0.8228\nvn -0.6688 0.2351 -0.7053\nvn -0.5337 0.0787 -0.8420\nvn -0.3575 -0.1299 -0.9248\nvn -0.1209 0.9856 0.1180\nvn -0.1938 0.8634 0.4658\nvn 0.4218 0.7618 0.4916\nvn -0.8781 -0.1769 -0.4446\nvn -0.1822 0.8237 0.5370\nvn -0.5542 0.2812 -0.7834\nvn -0.2515 0.2126 -0.9442\nvn 0.4319 -0.7045 -0.5631\nvn -0.5215 0.6821 -0.5126\nvn 0.0253 0.3374 0.9410\nvn -0.0953 0.6816 0.7255\nvn 0.9738 -0.1576 -0.1642\nvn 0.5621 -0.8028 0.1988\nvn -0.0239 0.9603 0.2779\nvn -0.0379 0.7482 0.6624\nvn -0.9385 0.1265 0.3212\nvn -0.5114 0.1241 -0.8503\nvn 0.0803 0.6060 0.7914\nvn -0.0716 0.9956 -0.0598\nvn 0.0253 -0.9993 -0.0273\nvn -0.2040 0.1025 0.9736\nvn 0.0340 -0.1902 0.9812\nvn 0.2878 0.1797 0.9407\nvn 0.2891 0.1627 0.9434\nvn 0.1120 -0.7109 -0.6943\nvn 0.2409 0.4884 0.8387\nvn 0.5246 -0.8260 0.2063\nvn 0.8664 -0.0204 0.4990\nvn 0.9906 0.0099 -0.1362\nvn -0.0601 0.9981 -0.0120\nvn -0.2030 0.8540 0.4791\nvn -0.9823 -0.1661 -0.0867\nvn 0.3640 -0.9207 0.1405\nvn 0.2792 0.1008 -0.9549\nvn -0.1542 -0.1997 0.9677\nvn -0.1942 0.1004 0.9758\nvn 0.1894 0.4911 0.8502\nvn 0.7746 0.0744 -0.6281\nvn -0.1677 0.9848 -0.0455\nvn -0.9587 0.2533 0.1291\nvn 0.9762 -0.2093 -0.0561\nvn -0.3138 0.1294 0.9406\nvn -0.1061 -0.1200 0.9871\nvn 0.0874 0.2014 0.9756\nvn 0.1783 0.3306 0.9268\nvn 0.1805 0.2390 0.9541\nvn 0.8962 -0.4427 0.0287\nvn -0.0600 -0.9959 0.0676\nvn -0.8126 -0.4008 -0.4232\nvn 0.8659 0.4855 0.1201\nvn 0.8240 0.4964 0.2731\nvn 0.0600 0.9830 -0.1736\nvn -0.9533 0.2480 -0.1722\nvn 0.1633 0.9846 -0.0626\nvn 0.0297 0.8526 0.5217\nvn 0.5719 -0.7992 -0.1851\nvn 0.2023 0.5149 0.8330\nvn 0.1725 0.5743 0.8003\nvn 0.3322 -0.8671 -0.3712\nvn 0.8893 0.4178 -0.1859\nvn 0.9925 -0.1220 0.0003\nvn 0.0258 -0.1474 -0.9887\nvn -0.0961 0.9766 0.1925\nvn -0.9943 -0.0555 -0.0915\nvn -0.3163 0.3935 0.8632\nvn -0.1275 0.1345 0.9827\nvn -0.3905 0.5747 0.7192\nvn -0.0019 -0.5426 -0.8400\nvn -0.1654 -0.3895 0.9060\nvn -0.2138 0.1422 0.9665\nvn -0.1465 0.9802 -0.1329\nvn -0.1369 0.9853 -0.1024\nvn -0.3401 0.3502 0.8728\nvn -0.3796 -0.2296 -0.8962\nvn -0.1223 0.0171 0.9923\nvn -0.2315 0.5410 0.8085\nvn 0.1601 -0.0073 0.9871\nvn -0.2489 -0.6304 0.7353\nvn -0.0473 -0.6915 0.7209\nvn -0.0050 -0.7827 0.6224\nvn 0.0276 -0.0227 0.9994\nvn -0.1456 -0.9707 -0.1911\nvn 0.1939 0.4001 0.8957\nvn 0.7675 -0.3508 -0.5366\nvn -0.8433 0.5221 0.1272\nvn -0.2617 0.9613 0.0858\nvn -0.6812 -0.0830 -0.7274\nvn 0.0059 0.9265 0.3762\nvn 0.0051 0.8474 0.5310\nvn -0.1596 -0.0257 0.9868\nvn -0.0405 0.0988 0.9943\nvn 0.2429 0.5973 0.7644\nvn 0.6721 -0.6985 0.2456\nvn -0.9770 0.0813 -0.1969\nvn 0.5622 -0.7486 -0.3514\nvn 0.9482 -0.1975 -0.2486\nvn 0.8934 -0.3690 -0.2561\nvn -0.0754 0.9834 0.1650\nvn -0.1925 0.9792 -0.0641\nvn 0.2197 0.9742 -0.0520\nvn -0.5060 0.2609 0.8221\nvn -0.3379 0.3980 0.8529\nvn -0.1253 0.1258 0.9841\nvn -0.0797 0.2608 0.9621\nvn 0.3466 -0.0370 0.9373\nvn 0.1910 -0.5881 0.7859\nvn 0.0408 0.5857 0.8095\nvn 0.0508 -0.8347 0.5484\nvn 0.1090 -0.0731 0.9914\nvn -0.0613 -0.7950 0.6036\nvn 0.1068 -0.0678 0.9920\nvn 0.5161 -0.7289 -0.4498\nvn 0.4605 -0.4049 0.7899\nvn 0.9971 0.0459 -0.0600\nvn 0.9101 -0.1518 -0.3856\nvn -0.2655 0.9619 -0.0651\nvn -0.8098 0.3786 -0.4482\nvn 0.3651 -0.3169 -0.8754\nvn -0.0600 0.0825 0.9948\nvn -0.1254 0.2448 0.9614\nvn -0.3855 0.3778 0.8418\nvn -0.1085 0.1284 0.9858\nvn 0.2797 0.6658 0.6918\nvn 0.1919 -0.2499 0.9491\nvn 0.6274 -0.0451 0.7774\nvn -0.0417 0.2769 0.9600\nvn 0.2551 0.3557 0.8991\nvn -0.0617 -0.4667 0.8823\nvn 0.0086 0.0417 0.9991\nvn 0.2377 0.1783 0.9548\nvn 0.0851 -0.1050 0.9908\nvn 0.3136 -0.1364 0.9397\nvn 0.4614 -0.4284 0.7769\nvn 0.5660 0.4682 0.6786\nvn 0.9746 0.2128 -0.0692\nvn 0.9992 0.0246 -0.0325\nvn 0.8358 0.5135 -0.1941\nvn -0.2358 0.8914 0.3870\nvn -0.4053 0.8090 0.4256\nvn -0.3557 0.8981 0.2585\nvn -0.3892 -0.1014 0.9156\nvn -0.3939 0.2959 0.8702\nvn -0.3649 0.0504 0.9297\nvn -0.3144 0.4312 0.8457\nvn 0.4359 -0.0710 0.8972\nvn -0.0239 -0.5276 0.8491\nvn 0.1876 -0.5856 0.7886\nvn -0.0432 0.5893 0.8068\nvn -0.3836 -0.5187 0.7641\nvn 0.1723 -0.2285 0.9582\nvn 0.4310 -0.1576 0.8885\nvn 0.0875 0.2005 0.9758\nvn 0.9726 -0.1604 -0.1682\nvn 0.9271 0.0991 -0.3616\nvn 0.5277 0.2753 0.8036\nvn 0.8468 -0.2834 -0.4501\nvn 0.2500 0.8444 0.4738\nvn 0.3360 0.7935 0.5074\nvn 0.2037 0.7627 0.6139\nvn -0.4924 -0.8704 -0.0061\nvn -0.2266 -0.1933 0.9546\nvn -0.3113 0.1744 0.9342\nvn -0.3934 0.2998 0.8691\nvn 0.0035 -0.2986 0.9544\nvn -0.1128 -0.9933 0.0263\nvn 0.5150 -0.5433 -0.6631\nvn -0.2919 0.1249 0.9483\nvn 0.2419 0.8243 0.5119\nvn 0.1613 0.4898 0.8568\nvn 0.1307 0.4629 0.8767\nvn -0.7681 -0.3987 0.5011\nvn -0.2908 0.7818 0.5516\nvn -0.1513 -0.1845 0.9711\nvn -0.1842 0.4257 0.8859\nvn 0.2851 -0.2806 0.9165\nvn -0.1910 -0.0261 0.9812\nvn 0.2985 -0.4851 0.8220\nvn 0.2587 0.2222 0.9401\nvn 0.2429 0.2161 0.9457\nvn 0.2380 0.9618 0.1349\nvn -0.8203 -0.5167 0.2454\nvn -0.2804 -0.3691 0.8861\nvn -0.1691 0.0813 0.9822\nvn -0.0639 0.0870 0.9942\nvn -0.1027 0.4280 0.8979\nvn -0.1498 0.4651 0.8725\nvn -0.1105 0.5070 0.8549\nvn 0.9112 0.4076 0.0599\nvn 0.0449 0.1939 0.9800\nvn 0.1344 0.3017 0.9439\nvn 0.5094 -0.8379 -0.1961\nvn 0.2653 0.7476 0.6089\nvn 0.7106 0.1625 -0.6846\nvn 0.1017 0.4673 0.8782\nvn 0.0288 0.5395 0.8415\nvn -0.9338 0.0919 -0.3459\nvn -0.3566 0.9340 0.0218\nvn -0.9113 -0.2841 0.2980\nvn -0.2187 0.8430 0.4914\nvn 0.0815 -0.3997 0.9130\nvn 0.1267 -0.2343 0.9639\nvn 0.1550 -0.2885 0.9448\nvn -0.2106 0.2143 0.9538\nvn -0.2361 0.5512 0.8003\nvn -0.1632 0.4639 0.8707\nvn 0.9789 -0.0203 -0.2031\nvn 0.3526 -0.4659 0.8116\nvn 0.0932 0.4319 0.8971\nvn -0.9838 -0.1345 -0.1186\nvn 0.4677 0.7502 0.4673\nvn -0.1681 0.9829 0.0749\nvn -0.2411 0.9498 -0.1994\nvn 0.1526 0.1276 0.9800\nvn -0.0948 0.4301 0.8978\nvn -0.0394 0.1812 0.9827\nvn -0.1378 0.4249 0.8947\nvn 0.0401 0.5318 0.8459\nvn 0.1800 0.2635 0.9477\nvn 0.1100 0.0690 0.9915\nvn 0.7474 -0.5882 -0.3088\nvn 0.0044 -0.7743 0.6327\nvn -0.2857 0.8997 0.3299\nvn -0.2716 -0.2957 0.9159\nvn -0.3093 -0.1905 0.9317\nvn -0.2299 -0.0444 0.9722\nvn -0.0604 0.4682 0.8816\nvn 0.0095 0.0432 0.9990\nvn -0.2772 0.7055 0.6523\nvn 0.0905 0.1688 0.9815\nvn 0.1486 0.3338 0.9309\nvn -0.7090 -0.2246 -0.6684\nvn -0.0422 0.5941 0.8033\nvn -0.0785 -0.7052 0.7047\nvn 0.4918 -0.8397 -0.2304\nvn -0.3150 0.7113 0.6284\nvn 0.8866 0.2722 -0.3739\nvn -0.4967 0.8604 0.1141\nvn -0.1636 0.9258 0.3409\nvn 0.0853 -0.3245 0.9420\nvn 0.2539 -0.1017 0.9619\nvn -0.0631 -0.0739 0.9953\nvn -0.1519 0.1332 0.9794\nvn -0.0885 0.5627 0.8219\nvn 0.1097 0.1204 0.9866\nvn 0.2373 0.6021 0.7623\nvn -0.1057 0.6888 0.7172\nvn 0.2419 0.4968 0.8335\nvn 0.3424 -0.7387 0.5807\nvn -0.2673 -0.6113 0.7449\nvn -0.2892 0.8561 0.4282\nvn 0.0026 0.9869 0.1614\nvn -0.1223 -0.5486 -0.8271\nvn -0.3328 -0.3978 -0.8550\nvn -0.3087 0.1234 -0.9431\nvn -0.0128 -0.1391 0.9902\nvn -0.0178 0.1646 0.9862\nvn -0.0755 0.3593 0.9302\nvn -0.0906 0.5675 0.8184\nvn 0.3073 -0.3557 0.8826\nvn 0.2395 -0.7756 -0.5840\nvn 0.9142 0.2209 -0.3398\nvn 0.0052 -0.7672 0.6413\nvn -0.0987 -0.6488 0.7546\nvn -0.2384 0.4493 0.8610\nvn -0.2030 -0.8720 -0.4455\nvn 0.5631 -0.7971 -0.2182\nvn -0.4902 0.8586 0.1501\nvn -0.1699 0.8915 0.4200\nvn 0.2644 0.8477 0.4599\nvn -0.5225 0.1289 -0.8429\nvn 0.0251 -0.5544 0.8319\nvn -0.4349 -0.1038 0.8945\nvn -0.3735 -0.0131 0.9275\nvn -0.0277 -0.1955 0.9803\nvn 0.0740 0.5238 0.8486\nvn -0.0823 0.0365 0.9959\nvn 0.5549 -0.1573 0.8169\nvn 0.0947 0.4090 0.9076\nvn -0.0170 0.0177 0.9997\nvn 0.1862 0.4768 0.8591\nvn -0.6428 0.2115 -0.7362\nvn -0.2419 -0.1077 -0.9643\nvn 0.0320 -0.5724 0.8194\nvn 0.1882 -0.8904 0.4145\nvn -0.1311 -0.3327 0.9339\nvn -0.1802 -0.2721 0.9452\nvn -0.2799 0.0478 0.9588\nvn -0.2834 0.0292 0.9586\nvn 0.1002 0.4239 0.9001\nvn 0.0198 0.6256 0.7799\nvn -0.0094 0.5602 0.8283\nvn 0.1969 0.0139 0.9803\nvn 0.0706 0.7120 0.6986\nvn 0.1458 0.6186 0.7721\nvn 0.8615 0.3833 -0.3329\nvn 0.2131 0.7505 0.6256\nvn 0.2363 -0.1613 0.9582\nvn 0.6266 0.4288 -0.6508\nvn 0.1410 0.1896 0.9717\nvn -0.2510 0.1472 0.9567\nvn 0.7482 -0.3386 -0.5705\nvn 0.0246 -0.6697 -0.7422\nvn -0.9995 -0.0285 0.0161\nvn -0.0908 0.1741 0.9805\nvn -0.1351 0.2721 0.9527\nvn -0.0117 0.4408 0.8975\nvn -0.0799 0.5570 0.8267\nvn -0.1597 0.3388 0.9272\nvn -0.2969 0.8135 0.5000\nvn 0.0688 -0.4473 0.8917\nvn -0.1043 -0.0765 0.9916\nvn 0.2524 0.3023 0.9192\nvn 0.2452 0.3474 0.9051\nvn -0.2656 -0.4024 0.8761\nvn 0.0746 0.7138 0.6964\nvn 0.0493 0.6822 0.7295\nvn 0.1095 0.4562 0.8831\nvn 0.5339 0.3619 0.7642\nvn 0.9130 0.3608 0.1903\nvn -0.0393 -0.4695 -0.8820\nvn -0.4796 0.7115 -0.5136\nvn 0.1838 0.1026 0.9776\nvn -0.6022 -0.1635 0.7814\nvn -0.5086 -0.6910 -0.5137\nvn -0.3960 -0.3979 -0.8275\nvn 0.1706 -0.4417 0.8808\nvn 0.2434 -0.1303 0.9611\nvn -0.0098 0.1496 0.9887\nvn 0.1714 -0.0818 0.9818\nvn 0.3404 0.2166 0.9150\nvn 0.3044 0.1501 0.9406\nvn 0.2911 0.3840 0.8762\nvn 0.0722 0.5845 0.8082\nvn 0.4714 0.1444 0.8700\nvn -0.0844 -0.7604 0.6439\nvn -0.1321 0.0036 0.9912\nvn -0.0624 -0.0849 0.9944\nvn 0.9832 0.0484 -0.1763\nvn -0.0212 -0.5308 0.8473\nvn 0.2010 0.0147 0.9795\nvn 0.7221 -0.3245 -0.6110\nvn 0.5703 -0.7989 0.1913\nvn -0.9460 -0.2607 -0.1926\nvn 0.6778 -0.6413 -0.3596\nvn 0.1012 0.8627 0.4955\nvn -0.4494 -0.7172 0.5327\nvn -0.2352 -0.3796 -0.8948\nvn -0.2063 -0.2974 0.9322\nvn 0.3038 -0.2475 0.9200\nvn 0.1747 0.2159 0.9606\nvn 0.0872 0.2582 0.9622\nvn 0.0522 0.3190 0.9463\nvn 0.1064 0.3545 0.9290\nvn -0.0296 0.2106 0.9771\nvn -0.1871 0.8010 0.5687\nvn 0.1972 0.3676 0.9088\nvn 0.6546 0.6566 0.3746\nvn 0.6467 0.7022 0.2979\nvn 0.2797 0.0926 -0.9556\nvn -0.1356 0.1625 0.9773\nvn -0.2293 -0.0855 0.9696\nvn -0.2571 0.2519 0.9330\nvn -0.2987 0.2834 0.9113\nvn -0.2157 0.4714 0.8551\nvn 0.3450 0.4818 0.8055\nvn 0.0198 0.5738 0.8187\nvn 0.0164 0.9913 0.1305\nvn 0.0043 -0.2025 0.9793\nvn 0.0766 -0.7412 -0.6669\nvn -0.1135 -0.1437 0.9831\nvn 0.1439 0.2525 0.9568\nvn 0.1341 0.2529 0.9581\nvn -0.2449 -0.9292 -0.2768\nvn 0.2096 0.7227 0.6586\nvn -0.0692 0.6617 0.7466\nvn -0.4299 0.8108 0.3973\nvn -0.3401 0.9025 0.2643\nvn 0.3651 -0.8916 -0.2678\nvn -0.1981 -0.2965 0.9343\nvn 0.0005 -0.3297 0.9441\nvn -0.0135 -0.0558 0.9984\nvn 0.0142 0.3437 0.9390\nvn 0.2504 0.3609 0.8983\nvn 0.3240 -0.4169 0.8492\nvn 0.1972 0.8912 0.4085\nvn 0.0090 0.2904 0.9569\nvn 0.2534 0.4960 0.8306\nvn -0.2055 0.1476 0.9675\nvn 0.1535 0.0945 0.9836\nvn 0.2436 0.4628 0.8523\nvn 0.2056 -0.4472 -0.8705\nvn 0.3030 0.6395 0.7065\nvn -0.1865 -0.0603 0.9806\nvn -0.2681 0.9603 0.0769\nvn -0.4209 -0.5335 -0.7337\nvn -0.0213 -0.0305 0.9993\nvn 0.1003 -0.2202 0.9703\nvn 0.0576 -0.3687 0.9278\nvn 0.0327 0.3502 0.9361\nvn -0.0669 -0.2202 0.9732\nvn 0.0545 0.5690 0.8205\nvn 0.0380 0.4980 0.8663\nvn 0.0185 0.5680 0.8228\nvn -0.2599 -0.2886 0.9215\nvn -0.2605 0.5672 0.7813\nvn 0.6700 -0.6863 0.2831\nvn -0.1458 -0.7932 0.5912\nvn 0.3722 -0.0841 0.9243\nvn -0.1993 0.7590 0.6198\nvn -0.2677 0.6408 0.7196\nvn -0.9028 -0.3868 0.1880\nvn -0.9589 -0.2790 -0.0523\nvn -0.9994 -0.0293 0.0163\nvn 0.0601 0.9830 -0.1736\nvn 0.1355 -0.4885 0.8620\nvn 0.1321 -0.4609 0.8776\nvn 0.1537 -0.3447 0.9260\nvn 0.2794 -0.0138 0.9601\nvn -0.2879 0.2993 0.9097\nvn -0.2814 0.2949 0.9132\nvn -0.0526 0.6419 0.7650\nvn 0.1978 0.6677 0.7176\nvn 0.2712 -0.5808 0.7675\nvn 0.2326 0.4410 0.8668\nvn -0.2789 -0.6506 0.7063\nvn 0.4330 -0.3726 0.8208\nvn 0.2723 0.2799 0.9206\nvn 0.2197 0.4408 0.8703\nvn 0.8085 0.4277 0.4041\nvn -0.5177 0.4454 0.7305\nvn -0.5580 0.1496 0.8162\nvn 0.4287 -0.8876 -0.1685\nvn 0.2446 -0.0560 0.9680\nvn 0.2869 -0.0205 0.9577\nvn 0.1988 0.2970 0.9340\nvn 0.3907 -0.1197 0.9127\nvn 0.2796 0.3322 0.9008\nvn 0.2564 0.4808 0.8385\nvn 0.3995 0.5862 0.7048\nvn 0.0495 0.1350 -0.9896\nvn -0.0541 0.1960 -0.9791\nvn -0.0322 -0.9442 0.3278\nvn 0.2270 0.3416 0.9120\nvn 0.2086 0.2262 0.9515\nvn 0.2664 0.4803 0.8357\nvn 0.3537 -0.7143 0.6039\nvn -0.0279 0.1971 0.9800\nvn -0.1660 0.5949 0.7865\nvn 0.9095 -0.1731 -0.3778\nvn -0.1454 -0.5698 -0.8088\nvn 0.0878 0.6515 0.7536\nvn 0.1228 0.6812 0.7217\nvn -0.1409 0.9893 0.0377\nvn -0.5254 -0.1371 0.8397\nvn 0.4418 -0.2112 0.8719\nvn 0.4414 -0.1926 0.8764\nvn 0.1721 -0.3575 0.9179\nvn 0.2928 -0.0297 0.9557\nvn 0.4112 0.2364 0.8804\nvn -0.2386 0.2389 0.9413\nvn -0.2645 0.3002 0.9165\nvn 0.6153 0.5077 -0.6030\nvn -0.1736 -0.6820 -0.7104\nvn -0.0124 -0.8516 -0.5240\nvn -0.0968 -0.7006 0.7069\nvn 0.1558 0.4261 0.8912\nvn 0.2445 0.6430 0.7258\nvn 0.3086 0.2288 0.9233\nvn -0.0748 0.6346 0.7692\nvn -0.1641 0.4393 0.8832\nvn -0.0210 0.9876 0.1557\nvn -0.3611 -0.1792 0.9151\nvn 0.3852 0.3409 0.8576\nvn -0.0648 0.4260 0.9024\nvn 0.0416 0.5982 0.8002\nvn 0.0059 0.6438 0.7652\nvn -0.1020 0.7004 0.7064\nvn 0.1635 0.7038 0.6913\nvn 0.1039 -0.2813 0.9540\nvn 0.2544 0.0326 0.9666\nvn 0.1503 0.4673 0.8712\nvn -0.2330 -0.3162 0.9196\nvn 0.8718 0.3265 -0.3650\nvn 0.1306 -0.9675 -0.2167\nvn -0.3962 0.2469 0.8843\nvn 0.6757 0.6214 0.3966\nvn -0.7985 0.4352 -0.4159\nvn -0.2757 -0.4020 0.8732\nvn -0.2099 -0.1061 0.9719\nvn -0.1980 0.0389 0.9794\nvn 0.4131 -0.2066 0.8870\nvn 0.4992 -0.2985 0.8134\nvn 0.4099 -0.2445 0.8787\nvn 0.3880 -0.0001 0.9217\nvn 0.4975 0.2129 0.8409\nvn -0.0077 0.2024 0.9793\nvn 0.0010 0.1826 0.9832\nvn -0.0368 0.6715 0.7401\nvn -0.0090 0.6108 0.7917\nvn -0.1309 0.7534 0.6444\nvn 0.6007 -0.7967 -0.0670\nvn 0.5378 -0.5650 0.6258\nvn 0.0708 0.4689 0.8804\nvn -0.8718 -0.4881 0.0419\nvn 0.2014 0.4392 0.8755\nvn -0.3447 -0.1001 0.9334\nvn -0.0375 -0.2020 0.9787\nvn -0.2818 -0.0121 0.9594\nvn -0.2577 0.1788 0.9495\nvn 0.2444 0.1045 0.9640\nvn 0.1642 0.2495 0.9544\nvn -0.1684 0.7642 0.6227\nvn 0.9459 -0.1937 -0.2605\nvn 0.9959 0.0732 -0.0537\nvn -0.2722 0.6844 0.6764\nvn 0.0342 0.3608 0.9320\nvn 0.0705 0.4355 0.8974\nvn -0.7589 0.4691 0.4517\nvn 0.8458 -0.1942 0.4968\nvn 0.3007 0.5434 0.7837\nvn 0.0026 0.2028 0.9792\nvn -0.4584 -0.1792 0.8705\nvn -0.4816 -0.1234 0.8677\nvn -0.4248 -0.0650 0.9030\nvn 0.3208 -0.2675 0.9086\nvn 0.4962 0.0688 0.8655\nvn 0.2515 0.1691 0.9530\nvn 0.2646 0.0050 0.9643\nvn 0.1603 -0.0582 0.9854\nvn 0.2731 0.0529 0.9605\nvn 0.3512 0.2280 0.9081\nvn -0.1122 0.6330 0.7660\nvn 0.7880 -0.1927 -0.5848\nvn 0.8601 0.3875 -0.3319\nvn -0.0300 0.2228 0.9744\nvn -0.0537 0.6357 0.7701\nvn -0.1001 0.4212 0.9014\nvn -0.0912 0.1317 0.9871\nvn -0.0474 -0.1680 0.9847\nvn -0.1645 0.2261 0.9601\nvn -0.2641 -0.0386 0.9637\nvn -0.0180 -0.0105 0.9998\nvn 0.3665 0.2062 0.9073\nvn 0.2675 0.5389 0.7987\nvn 0.1930 0.2069 0.9591\nvn 0.8980 0.2290 -0.3756\nvn -0.2417 -0.3703 0.8969\nvn -0.0928 0.4225 0.9016\nvn 0.1010 0.2962 0.9498\nvn 0.3686 0.4924 0.7884\nvn 0.1050 0.3694 0.9233\nvn -0.8673 0.4181 0.2702\nvn 0.3503 -0.2604 0.8997\nvn 0.1225 0.8058 0.5793\nvn -0.9027 0.0246 -0.4295\nvn -0.0589 0.4155 0.9077\nvn -0.0646 -0.1742 0.9826\nvn -0.0730 -0.2308 0.9703\nvn -0.1847 -0.0673 0.9805\nvn -0.0074 0.1715 0.9852\nvn -0.0367 -0.0897 0.9953\nvn 0.1452 -0.1689 0.9749\nvn 0.1298 -0.2182 0.9672\nvn -0.5218 -0.1781 0.8343\nvn -0.3724 0.0667 0.9257\nvn -0.3519 0.0752 0.9330\nvn 0.0776 0.0702 0.9945\nvn -0.1822 0.0621 0.9813\nvn 0.4426 0.3233 0.8364\nvn 0.6204 -0.1614 -0.7675\nvn -0.7094 -0.7025 -0.0576\nvn 0.8866 0.2497 -0.3894\nvn -0.0161 -0.1891 0.9818\nvn -0.0187 -0.1691 0.9854\nvn 0.2134 -0.1796 0.9603\nvn 0.1591 0.0331 0.9867\nvn 0.2514 0.5011 0.8280\nvn 0.0566 0.4219 0.9049\nvn -0.1001 0.6712 0.7345\nvn 0.2830 0.0312 0.9586\nvn 0.3416 0.4024 0.8493\nvn 0.2265 -0.2029 0.9526\nvn -0.0300 -0.0866 0.9958\nvn -0.3410 0.1024 0.9345\nvn -0.3218 0.0721 0.9441\nvn -0.4080 -0.0116 0.9129\nvn -0.3908 0.2006 0.8983\nvn -0.0944 0.1541 0.9835\nvn -0.2024 0.2993 0.9324\nvn 0.0489 0.5193 0.8532\nvn 0.1429 0.4337 0.8896\nvn 0.2401 -0.5602 0.7928\nvn 0.4644 0.2315 0.8548\nvn 0.1236 0.4286 0.8950\nvn 0.1370 0.0439 0.9896\nvn 0.0842 -0.0671 0.9942\nvn 0.2352 -0.1864 0.9539\nvn -0.0647 -0.2716 0.9602\nvn -0.0780 -0.2399 0.9677\nvn -0.0176 -0.1044 0.9944\nvn -0.3009 0.3094 0.9021\nvn -0.2836 0.2564 0.9240\nvn 0.0047 0.4639 0.8859\nvn 0.2317 0.6050 0.7617\nvn 0.2204 0.6316 0.7433\nvn -0.0377 0.6566 0.7533\nvn 0.8577 -0.4964 -0.1339\nvn 0.1260 0.4260 0.8959\nvn 0.0170 0.3726 0.9279\nvn -0.1093 0.6179 0.7786\nvn 0.3988 0.1377 0.9066\nvn 0.1789 0.4877 0.8545\nvn 0.9944 -0.0746 0.0751\nvn -0.2500 0.9665 -0.0585\nvn 0.2263 0.1383 0.9642\nvn 0.2878 -0.3419 0.8946\nvn -0.0142 0.0394 0.9991\nvn 0.1201 -0.3331 0.9352\nvn 0.0517 -0.1133 0.9922\nvn 0.3864 0.1459 0.9107\nvn -0.2499 -0.0745 0.9654\nvn -0.2054 0.5129 0.8335\nvn -0.0128 0.4700 0.8826\nvn 0.0093 0.5434 0.8394\nvn 0.2452 0.0412 0.9686\nvn 0.1157 0.0143 0.9932\nvn 0.2148 0.5859 0.7814\nvn 0.0230 0.9752 -0.2201\nvn 0.3690 -0.1279 0.9206\nvn 0.2877 -0.3406 0.8951\nvn 0.1986 -0.1082 0.9741\nvn 0.3518 0.0013 0.9361\nvn 0.2609 -0.0449 0.9643\nvn -0.1328 -0.5230 0.8419\nvn -0.0763 0.4298 0.8997\nvn -0.0039 0.5566 0.8308\nvn 0.7661 -0.2534 0.5907\nvn -0.8120 0.2936 -0.5044\nvn 0.4548 -0.2419 0.8571\nvn 0.4696 -0.0716 0.8800\nvn -0.1314 0.0380 0.9906\nvn -0.3317 0.3168 0.8886\nvn -0.2493 0.2423 0.9376\nvn -0.2073 0.3317 0.9203\nvn -0.0851 0.6044 0.7922\nvn 0.0415 -0.6132 0.7888\nvn 0.1987 -0.8806 -0.4302\nvn 0.1593 0.1821 0.9703\nvn 0.6214 0.1210 0.7740\nvn 0.9140 0.1554 0.3749\nvn 0.3965 -0.9090 -0.1284\nvn 0.2756 0.1421 0.9507\nvn 0.5115 -0.1999 0.8357\nvn 0.5378 -0.0492 0.8417\nvn 0.3193 -0.2661 0.9095\nvn 0.1967 -0.0658 0.9782\nvn -0.2875 -0.4101 0.8655\nvn -0.2793 0.4256 0.8607\nvn -0.3583 0.4743 0.8042\nvn -0.1249 0.6047 0.7866\nvn -0.1251 0.6039 0.7872\nvn 0.5105 -0.8373 -0.1959\nvn 0.0274 0.8867 0.4615\nvn -0.2290 0.7861 0.5741\nvn 0.1453 -0.2049 0.9679\nvn 0.0170 0.7942 0.6074\nvn -0.9887 -0.1077 -0.1044\nvn 0.4519 -0.2130 0.8662\nvn 0.4946 -0.1168 0.8612\nvn 0.3687 -0.0328 0.9290\nvn 0.3710 -0.1783 0.9114\nvn 0.1870 0.0302 0.9819\nvn 0.3013 -0.1515 0.9414\nvn 0.3113 -0.0635 0.9482\nvn -0.2061 -0.5713 0.7945\nvn -0.2274 -0.4133 0.8817\nvn -0.0100 0.0048 0.9999\nvn -0.2554 0.4742 0.8425\nvn -0.2675 0.4793 0.8359\nvn -0.1327 0.5630 0.8157\nvn 0.9957 0.0488 -0.0783\nvn 0.6409 -0.6596 -0.3926\nvn 0.7326 -0.5692 -0.3732\nvn 0.0228 -0.2720 0.9620\nvn 0.0086 -0.5787 0.8155\nvn 0.2718 -0.2029 0.9407\nvn -0.2634 0.7210 0.6409\nvn 0.4828 0.3048 0.8210\nvn -0.1625 0.6709 0.7235\nvn 0.9562 -0.0427 0.2897\nvn -0.8937 -0.3280 -0.3061\nvn -0.3646 0.8243 0.4331\nvn 0.3481 -0.1066 0.9314\nvn 0.3713 -0.2802 0.8852\nvn 0.3917 -0.1040 0.9142\nvn 0.1912 -0.0559 0.9800\nvn 0.1526 -0.1183 0.9812\nvn 0.0952 -0.0638 0.9934\nvn 0.9698 0.2310 0.0785\nvn -0.0637 0.5288 0.8464\nvn -0.5792 0.6222 -0.5268\nvn 0.3817 0.2708 0.8837\nvn -0.0636 0.7667 0.6388\nvn 0.8413 -0.4970 -0.2125\nvn -0.0859 0.0414 0.9954\nvn -0.2958 0.8690 0.3966\nvn -0.2436 0.9057 0.3470\nvn 0.3165 -0.1709 0.9331\nvn 0.1867 -0.1997 0.9619\nvn 0.1585 -0.1326 0.9784\nvn -0.4602 -0.2029 0.8643\nvn -0.5227 -0.2689 0.8090\nvn 0.0545 -0.1796 0.9822\nvn 0.0974 -0.0628 0.9933\nvn -0.1266 -0.0503 0.9907\nvn -0.1214 0.2118 0.9697\nvn -0.0807 0.4773 0.8750\nvn -0.0898 0.5169 0.8513\nvn -0.1217 0.4982 0.8585\nvn -0.1156 0.5973 0.7937\nvn -0.1887 0.1817 0.9651\nvn 0.3131 -0.3871 0.8673\nvn -0.0920 0.4752 0.8750\nvn -0.0096 0.0550 0.9984\nvn -0.1985 0.6927 0.6934\nvn -0.7237 -0.6816 -0.1087\nvn 0.3116 -0.1600 0.9366\nvn 0.3154 -0.2072 0.9261\nvn 0.1799 -0.2444 0.9528\nvn 0.1596 -0.1969 0.9674\nvn -0.4177 -0.2617 0.8701\nvn -0.7110 -0.1040 0.6954\nvn -0.8965 -0.1566 0.4145\nvn 0.1675 -0.2103 -0.9632\nvn -0.8677 0.0077 0.4971\nvn -0.5826 0.0892 0.8079\nvn 0.1333 0.4396 0.8883\nvn 0.1590 0.3469 0.9243\nvn -0.2059 0.7378 0.6429\nvn -0.3738 -0.1253 -0.9190\nvn -0.7289 -0.1799 0.6606\nvn 0.3571 -0.2134 0.9094\nvn 0.0818 0.3046 0.9490\nvn -0.1816 0.4367 0.8811\nvn -0.9999 -0.0040 0.0113\nvn -0.2682 0.9433 0.1954\nvn -0.0689 0.8937 0.4434\nvn 0.8098 0.4614 0.3625\nvn 0.3277 -0.8706 -0.3669\nvn -0.1085 -0.3141 0.9432\nvn -0.0989 -0.0965 0.9904\nvn -0.1327 0.5917 0.7952\nvn -0.0477 0.6880 0.7242\nvn -0.0461 0.6770 0.7345\nvn -0.4724 0.6955 -0.5414\nvn -0.4905 0.6997 -0.5194\nvn -0.3842 -0.4187 -0.8228\nvn 0.0350 -0.1090 0.9934\nvn 0.0825 0.4897 0.8680\nvn 0.6066 -0.7937 -0.0465\nvn 0.0162 0.6880 0.7255\nvn 0.8244 0.5031 0.2593\nvn 0.6163 -0.7453 -0.2543\nvn -0.1028 -0.0521 0.9933\nvn -0.3357 -0.2317 0.9130\nvn -0.3409 -0.2620 0.9028\nvn -0.4367 -0.2792 0.8552\nvn -0.4219 -0.2679 0.8662\nvn -0.4385 -0.2758 0.8553\nvn -0.7620 0.5781 0.2917\nvn 0.8925 -0.4378 -0.1086\nvn 0.0357 0.8297 0.5571\nvn -0.4721 0.0808 0.8778\nvn -0.3548 0.2824 0.8913\nvn -0.2135 0.7291 -0.6503\nvn 0.2030 0.8461 0.4929\nvn 0.4874 -0.1658 0.8573\nvn -0.3874 -0.8999 -0.2001\nvn 0.9758 -0.2119 -0.0546\nvn -0.1155 0.4684 0.8759\nvn 0.1329 0.1759 0.9754\nvn -0.1728 0.9756 0.1357\nvn -0.3749 0.7128 0.5928\nvn -0.3554 0.8164 0.4551\nvn -0.6898 -0.2278 0.6873\nvn 0.1552 0.9798 0.1264\nvn -0.6211 0.6411 -0.4507\nvn 0.3410 0.9335 0.1111\nvn 0.6655 0.7237 0.1823\nvn -0.0204 -0.8306 -0.5566\nvn 0.3683 0.3838 0.8468\nvn 0.3677 0.3969 0.8410\nvn -0.2298 0.3922 0.8907\nvn -0.2431 0.5073 0.8268\nvn 0.0864 -0.7400 -0.6671\nvn -0.0187 0.5316 -0.8468\nvn 0.1429 -0.1010 0.9846\nvn -0.0480 -0.4741 0.8791\nvn 0.0118 0.2916 0.9565\nvn 0.2041 0.2676 0.9417\nvn -0.5827 0.6796 -0.4457\nvn -0.4947 0.5402 0.6808\nvn -0.2648 0.3687 0.8910\nvn -0.2619 0.4255 0.8662\nvn 0.7302 0.0734 -0.6793\nvn 0.4496 0.8172 0.3607\nvn -0.0231 0.7442 0.6675\nvn -0.0936 0.7269 0.6804\nvn -0.9184 0.2514 -0.3055\nvn 0.5720 0.7688 0.2858\nvn -0.3537 -0.1538 0.9226\nvn -0.3157 -0.0647 0.9467\nvn -0.2793 0.4823 0.8303\nvn -0.4192 0.6371 0.6468\nvn -0.2607 0.5464 0.7959\nvn -0.2862 0.5787 0.7637\nvn 0.6793 0.0346 0.7330\nvn -0.1339 -0.1946 0.9717\nvn 0.0759 0.4142 0.9070\nvn -0.3297 0.6812 0.6536\nvn -0.1125 0.9069 0.4060\nvn -0.0724 0.9447 0.3198\nvn -0.0825 0.9425 0.3239\nvn -0.3831 0.8516 0.3577\nvn -0.2077 0.7677 0.6062\nvn 0.3394 0.4910 0.8024\nvn 0.0841 0.9695 0.2302\nvn -0.1945 0.9798 -0.0471\nvn 0.1602 0.9744 0.1579\nvn 0.6269 0.6104 0.4842\nvn 0.2987 0.4360 0.8489\nvn -0.1851 0.3840 0.9046\nvn -0.4963 0.5453 0.6755\nvn 0.8838 0.3351 -0.3265\nvn 0.8835 0.3247 -0.3377\nvn -0.1327 -0.5409 0.8306\nvn 0.1959 -0.1628 0.9670\nvn 0.2408 0.5547 0.7964\nvn 0.9499 0.1711 -0.2614\nvn -0.0457 0.8886 0.4565\nvn -0.9645 -0.2616 -0.0355\nvn -0.8727 -0.4619 -0.1584\nvn -0.3203 0.8408 0.4365\nvn 0.8166 0.3736 0.4399\nvn -0.0668 0.1919 0.9791\nvn -0.5399 0.6007 0.5897\nvn -0.4474 0.5875 0.6743\nvn 0.4135 -0.0503 0.9091\nvn 0.1003 0.4728 -0.8754\nvn 0.1395 0.4355 0.8893\nvn 0.0930 0.2058 0.9742\nvn 0.2029 -0.0235 0.9789\nvn -0.0147 0.6540 0.7563\nvn 0.0719 0.8844 0.4611\nvn 0.0102 0.9446 0.3282\nvn -0.6861 0.4526 0.5696\nvn -0.2648 0.6474 -0.7147\nvn -0.0973 -0.5655 -0.8190\nvn -0.9693 0.0785 -0.2328\nvn -0.2361 -0.4408 -0.8660\nvn -0.2274 0.4787 0.8480\nvn -0.3335 0.7086 0.6218\nvn 0.2527 0.3781 0.8906\nvn 0.2828 0.2126 0.9353\nvn -0.3297 0.8296 0.4507\nvn 0.1055 0.7515 0.6513\nvn 0.0885 0.8795 0.4676\nvn -0.4163 0.7285 0.5440\nvn -0.5826 0.1983 0.7882\nvn -0.8616 0.5059 0.0404\nvn -0.7831 0.5254 -0.3327\nvn 0.4719 0.6010 0.6451\nvn 0.0381 0.2004 0.9790\nvn -0.1414 0.4324 0.8905\nvn -0.3256 0.6174 0.7161\nvn -0.0301 -0.9953 -0.0922\nvn -0.0917 0.5894 0.8026\nvn 0.0268 0.4872 0.8729\nvn 0.9085 -0.4167 0.0306\nvn 0.1137 0.4154 0.9025\nvn 0.1146 0.3518 0.9290\nvn 0.1580 0.7531 0.6387\nvn 0.2678 0.9597 -0.0854\nvn -0.0601 0.9977 -0.0300\nvn -0.9112 0.3337 -0.2414\nvn 0.3026 0.9528 -0.0251\nvn 0.1782 0.9059 0.3843\nvn -0.2769 0.9404 -0.1974\nvn 0.3590 0.8848 0.2971\nvn 0.1723 0.3040 0.9370\nvn 0.2093 0.1908 0.9591\nvn -0.1154 0.4272 0.8968\nvn -0.2073 0.5488 0.8098\nvn -0.3417 0.7104 0.6152\nvn 0.4480 0.5070 0.7364\nvn 0.9259 0.1576 -0.3433\nvn 0.0460 0.8712 0.4888\nvn -0.3879 0.7235 0.5711\nvn -0.2741 0.0739 0.9589\nvn -0.6839 -0.3630 0.6328\nvn -0.5719 0.2123 0.7924\nvn -0.7422 -0.1948 0.6412\nvn 0.7812 0.6076 0.1434\nvn -0.3918 0.1945 0.8993\nvn -0.3286 0.8669 0.3749\nvn -0.3253 0.6178 0.7159\nvn 0.9466 -0.0347 -0.3206\nvn 0.0508 -0.0371 0.9980\nvn 0.2175 0.4443 0.8691\nvn -0.5982 -0.3529 0.7194\nvn -0.1240 0.9906 0.0578\nvn -0.9508 0.1251 -0.2835\nvn -0.2347 -0.3114 0.9209\nvn -0.3488 -0.2687 0.8979\nvn 0.4197 0.8904 -0.1760\nvn 0.4159 0.9051 -0.0886\nvn -0.0782 0.1598 0.9840\nvn -0.0843 0.2975 0.9510\nvn -0.2314 0.4020 0.8859\nvn -0.1630 0.5902 0.7906\nvn 0.9336 0.1949 -0.3006\nvn 0.9320 -0.3621 0.0167\nvn -0.2622 -0.4229 -0.8674\nvn -0.3109 0.8434 0.4382\nvn 0.2588 -0.2477 0.9336\nvn 0.0711 0.2069 0.9758\nvn 0.2859 0.6759 0.6793\nvn 0.2507 0.7972 0.5492\nvn -0.2053 0.1140 0.9720\nvn -0.5860 -0.3861 0.7124\nvn -0.3146 0.9455 0.0844\nvn 0.2866 0.9367 -0.2011\nvn -0.2611 -0.4321 0.8632\nvn -0.0467 -0.0030 0.9989\nvn -0.1562 0.4199 0.8940\nvn 0.2009 -0.8893 -0.4108\nvn 0.2425 0.4242 0.8725\nvn 0.0778 0.2951 0.9523\nvn -0.1866 0.5503 0.8138\nvn -0.0245 -0.9064 -0.4216\nvn 0.2471 0.6553 0.7139\nvn 0.0956 0.1267 0.9873\nvn 0.2423 -0.0438 0.9692\nvn 0.0565 -0.2400 0.9691\nvn -0.1264 -0.2259 0.9659\nvn -0.3178 -0.9088 -0.2703\nvn -0.2390 0.5765 0.7814\nvn -0.4187 -0.5406 0.7297\nvn 0.3476 -0.2993 -0.8886\nvn -0.1904 -0.1561 0.9692\nvn -0.2667 -0.2508 0.9306\nvn 0.2163 -0.2731 0.9374\nvn -0.2897 0.2544 0.9227\nvn -0.3305 0.3930 0.8581\nvn -0.1448 0.5072 0.8496\nvn -0.1600 0.5852 0.7950\nvn 0.9314 0.3514 -0.0948\nvn -0.0953 0.4365 0.8947\nvn -0.0169 0.1914 0.9814\nvn 0.1469 -0.8512 -0.5039\nvn -0.2752 0.4465 0.8514\nvn 0.3799 -0.9213 0.0824\nvn 0.3196 0.6321 0.7059\nvn 0.0471 0.6431 0.7643\nvn -0.1706 -0.0171 0.9852\nvn -0.1443 -0.2141 0.9661\nvn -0.3224 -0.4268 0.8449\nvn -0.3123 -0.2543 0.9153\nvn -0.1703 -0.1705 0.9705\nvn -0.2863 -0.2533 0.9240\nvn 0.2300 0.0234 0.9729\nvn 0.3124 0.0916 0.9455\nvn -0.2625 0.2472 0.9327\nvn -0.8865 0.0703 -0.4573\nvn 0.3360 -0.9090 -0.2465\nvn -0.4113 0.1610 0.8972\nvn -0.3979 0.4661 0.7902\nvn 0.9280 -0.1572 -0.3379\nvn -0.1034 0.1579 0.9820\nvn 0.1907 0.3990 0.8969\nvn -0.2753 -0.5604 0.7811\nvn 0.0856 0.9564 0.2794\nvn 0.8066 -0.5472 -0.2238\nvn -0.6888 0.6489 0.3233\nvn 0.5075 -0.4892 -0.7093\nvn -0.1937 -0.0684 0.9787\nvn 0.1525 0.4191 0.8950\nvn 0.2021 0.5092 0.8366\nvn -0.4188 0.4947 0.7615\nvn -0.2886 0.7307 0.6187\nvn 0.6555 -0.7314 -0.1879\nvn 0.1881 0.2058 0.9604\nvn 0.3487 0.5008 0.7922\nvn 0.2106 0.5804 0.7867\nvn 0.2069 0.6106 0.7644\nvn -0.4511 -0.5698 0.6869\nvn -0.0332 0.0905 0.9953\nvn -0.5716 -0.3189 0.7560\nvn -0.0285 -0.3039 0.9523\nvn 0.8278 0.3634 0.4274\nvn 0.2486 -0.3614 0.8986\nvn -0.0904 -0.0459 0.9949\nvn 0.3078 -0.1556 0.9386\nvn 0.2820 -0.1426 0.9488\nvn -0.2860 -0.5339 0.7957\nvn -0.2245 -0.3286 0.9174\nvn -0.1672 -0.0152 0.9858\nvn -0.1202 0.0632 0.9907\nvn -0.0880 0.2851 0.9544\nvn 0.9622 0.2286 -0.1477\nvn 0.2812 0.2866 0.9159\nvn 0.2007 0.5125 0.8349\nvn 0.3748 0.4167 0.8282\nvn -0.4078 -0.2085 0.8889\nvn -0.5010 -0.2151 0.8383\nvn -0.5194 0.1516 -0.8410\nvn -0.4478 -0.2576 0.8562\nvn -0.3079 -0.1080 0.9453\nvn -0.2557 0.0311 0.9663\nvn -0.0850 0.4511 0.8884\nvn 0.1907 -0.8440 -0.5014\nvn 0.3618 0.9317 0.0311\nvn -0.2030 0.3455 0.9162\nvn -0.1891 0.5155 0.8357\nvn 0.9091 -0.1399 -0.3924\nvn -0.0581 0.5478 0.8346\nvn -0.0074 0.5868 0.8097\nvn -0.1740 -0.6162 0.7681\nvn -0.3225 -0.3162 0.8922\nvn 0.2444 0.1874 0.9514\nvn 0.2060 0.0603 0.9767\nvn -0.3080 0.7119 0.6312\nvn 0.9699 0.0964 0.2238\nvn 0.6652 -0.7224 -0.1888\nvn -0.2316 0.4711 0.8512\nvn -0.2308 0.4674 0.8534\nvn -0.1207 0.5947 0.7948\nvn -0.1827 0.7007 0.6897\nvn -0.2418 0.7393 0.6285\nvn 0.6614 -0.7085 -0.2460\nvn 0.3298 -0.4108 0.8500\nvn -0.1342 -0.5546 0.8212\nvn -0.2371 -0.2782 0.9308\nvn -0.3007 -0.0546 0.9522\nvn -0.4018 -0.2732 0.8740\nvn -0.3180 0.0622 0.9461\nvn -0.0821 -0.2878 0.9542\nvn -0.0854 -0.2666 0.9600\nvn -0.1409 0.0677 0.9877\nvn -0.0495 0.1463 0.9880\nvn -0.1102 0.2748 0.9552\nvn -0.1639 0.7873 0.5944\nvn -0.0702 0.1749 0.9821\nvn -0.0094 0.1448 0.9894\nvn 0.9072 -0.4125 -0.0828\nvn 0.6372 -0.4511 -0.6249\nvn 0.2810 0.5583 0.7806\nvn 0.0513 0.0210 0.9985\nvn -0.0166 -0.7462 0.6655\nvn -0.2498 -0.2900 0.9239\nvn -0.2219 -0.4001 0.8892\nvn 0.0734 0.9682 0.2390\nvn -0.2143 0.0882 0.9728\nvn -0.2208 0.1024 0.9699\nvn 0.9065 -0.1272 -0.4026\nvn -0.3335 0.8651 0.3746\nvn -0.3252 0.1290 0.9368\nvn 0.8720 0.2531 -0.4191\nvn 0.1450 0.4264 0.8928\nvn 0.1953 0.0143 0.9806\nvn 0.0492 0.5871 0.8080\nvn 0.1509 0.3874 0.9095\nvn 0.3267 0.4532 0.8294\nvn -0.3560 -0.5993 0.7170\nvn -0.3941 -0.3337 0.8563\nvn -0.4207 -0.0178 0.9070\nvn 0.1053 -0.1476 0.9834\nvn 0.0137 0.4635 0.8860\nvn -0.0933 0.6981 0.7099\nvn -0.5754 0.3896 -0.7191\nvn -0.6102 0.7776 -0.1517\nvn 0.0452 0.5651 0.8237\nvn -0.1801 -0.4979 0.8484\nvn 0.1089 -0.1474 0.9831\nvn -0.0329 0.5104 0.8593\nvn 0.8780 -0.4643 -0.1161\nvn 0.0607 0.3579 0.9318\nvn -0.0651 -0.0858 0.9942\nvn -0.0982 0.3043 0.9475\nvn -0.0465 0.4545 0.8895\nvn 0.0899 0.3229 0.9421\nvn -0.1331 0.5933 0.7939\nvn -0.0885 0.6930 0.7155\nvn -0.8752 -0.4768 -0.0825\nvn 0.1955 0.3832 0.9028\nvn -0.1967 -0.7008 0.6857\nvn 0.1951 -0.0377 0.9801\nvn -0.1213 -0.7696 0.6269\nvn -0.0680 -0.5923 0.8028\nvn -0.0504 -0.1815 0.9821\nvn -0.2444 0.1026 0.9642\nvn -0.3058 0.0418 0.9512\nvn -0.3004 0.1421 0.9432\nvn 0.2581 0.1865 0.9480\nvn 0.3161 0.1274 0.9401\nvn -0.0231 0.3429 0.9391\nvn -0.8146 -0.5681 -0.1170\nvn 0.0272 0.4716 0.8814\nvn -0.0398 0.8613 0.5066\nvn -0.3789 -0.2462 0.8921\nvn -0.0006 -0.3950 0.9187\nvn -0.1213 -0.0967 0.9879\nvn -0.0494 0.1948 0.9796\nvn 0.3493 -0.1275 0.9283\nvn 0.1673 0.2146 0.9623\nvn 0.3286 -0.1572 0.9313\nvn 0.2379 0.7645 0.5991\nvn 0.4973 -0.3061 0.8118\nvn 0.3156 0.1506 0.9369\nvn 0.4995 -0.2181 0.8384\nvn 0.4155 -0.6177 0.6677\nvn 0.4112 0.0399 0.9107\nvn 0.4425 0.5323 0.7217\nvn 0.7955 -0.3400 0.5016\nvn 0.9753 0.0999 -0.1969\nvn -0.7933 -0.5696 0.2149\nvn 0.3076 -0.0359 0.9508\nvn 0.4173 -0.5953 0.6867\nvn -0.2245 -0.5079 -0.8316\nvn 0.6506 -0.5474 0.5263\nvn 0.8870 -0.2213 0.4053\nvn 0.9750 0.0301 -0.2202\nvn 0.7371 -0.3973 0.5467\nvn 0.7463 -0.2907 0.5988\nvn 0.7962 -0.1774 0.5785\nvn 0.0182 -0.9994 -0.0307\nvn -0.3519 0.7435 0.5686\nvn 0.3769 0.1108 0.9196\nvn -0.4518 -0.6167 -0.6447\nvn -0.4448 -0.3809 -0.8106\nvn 0.5756 -0.0232 0.8174\nvn 0.5660 -0.5749 0.5909\nvn 0.4372 -0.4292 0.7904\nvn 0.2373 -0.5050 0.8298\nvn -0.3096 0.4117 -0.8571\nvn 0.4793 -0.4909 0.7276\nvn 0.2697 -0.1979 0.9424\nvn 0.9242 0.2243 -0.3091\nvn 0.9863 -0.0489 -0.1573\nvn 0.8319 -0.5278 -0.1711\nvn 0.6792 -0.1766 -0.7124\nvn 0.5512 -0.3935 0.7358\nvn 0.4671 0.1274 0.8750\nvn 0.2716 -0.0654 0.9602\nvn 0.4563 0.5522 -0.6978\nvn -0.2682 0.5709 -0.7760\nvn 0.4834 0.2837 0.8281\nvn 0.8734 -0.4770 -0.0985\nvn 0.9392 -0.3433 0.0015\nvn 0.3123 -0.7210 0.6185\nvn 0.1719 0.0300 0.9847\nvn 0.4081 0.6170 0.6729\nvn 0.4284 0.3099 0.8488\nvn 0.4481 0.2968 0.8433\nvn 0.5529 -0.1634 0.8170\nvn 0.7562 -0.5802 -0.3025\nvn 0.8448 -0.5249 -0.1038\nvn 0.4825 -0.0612 0.8737\nvn 0.5454 -0.3487 0.7622\nvn 0.5524 0.3460 0.7584\nvn 0.5763 0.4350 0.6918\nvn 0.6098 0.4081 0.6794\nvn 0.7040 0.2048 0.6801\nvn 0.1027 -0.9268 -0.3613\nvn 0.1719 0.2917 0.9409\nvn 0.3047 -0.0177 0.9523\nvn -0.0607 -0.7485 -0.6604\nvn -0.2163 -0.4938 0.8422\nvn 0.5040 0.1699 0.8468\nvn 0.5353 -0.1089 0.8376\nvn 0.6543 -0.1557 0.7401\nvn 0.5666 0.0815 0.8199\nvn 0.6098 0.1866 0.7703\nvn 0.5380 0.3217 0.7791\nvn 0.5484 0.0932 0.8310\nvn 0.4536 0.3481 0.8204\nvn 0.5951 -0.0586 0.8015\nvn 0.6360 -0.5597 0.5313\nvn 0.6467 -0.5452 0.5334\nvn 0.6529 0.4235 0.6280\nvn 0.5255 0.3640 0.7690\nvn -0.1913 0.3899 -0.9008\nvn 0.8743 0.1246 0.4691\nvn 0.8053 -0.0828 0.5870\nvn 0.8146 0.0348 0.5790\nvn 0.8603 -0.1418 0.4897\nvn 0.2542 0.6668 0.7005\nvn 0.5400 0.6286 0.5597\nvn 0.5597 -0.7326 0.3873\nvn 0.6939 0.1962 0.6928\nvn 0.5274 0.3647 0.7674\nvn 0.9014 0.3962 -0.1750\nvn 0.9138 0.0650 0.4009\nvn 0.7251 0.4051 0.5569\nvn 0.8674 0.0224 0.4971\nvn 0.7762 0.3172 0.5449\nvn 0.8358 0.1688 0.5225\nvn -0.1502 0.9363 -0.3174\nvn 0.8671 0.0827 0.4913\nvn -0.1459 0.2459 -0.9582\nvn 0.7841 -0.4533 0.4240\nvn 0.8616 -0.1485 0.4853\nvn 0.8920 -0.0670 0.4471\nvn 0.8735 0.0989 0.4767\nvn 0.8126 0.1946 0.5494\nvn 0.7696 0.1163 0.6279\nvn 0.6339 0.3248 0.7019\nvn 0.3053 -0.4072 0.8608\nvn 0.8427 0.4466 0.3005\nvn 0.5937 0.4744 0.6500\nvn -0.1753 0.2069 -0.9625\nvn 0.6688 -0.6857 0.2873\nvn 0.8149 -0.4748 0.3324\nvn 0.7438 0.4560 0.4887\nvn 0.8483 0.1519 0.5073\nvn 0.6224 0.3205 0.7140\nvn 0.2956 0.6482 0.7018\nvn 0.3599 0.3385 0.8694\nvn 0.3497 -0.9140 -0.2058\nvn 0.6647 0.3661 0.6513\nvn 0.5236 0.4083 0.7477\nvn 0.5403 -0.2454 0.8049\nvn 0.7933 0.3443 0.5022\nvn 0.8585 0.0871 0.5053\nvn 0.7440 -0.4728 0.4721\nvn 0.5201 -0.7978 0.3049\nvn 0.8237 -0.4635 0.3266\nvn 0.7653 0.4371 0.4726\nvn 0.8672 0.1987 0.4566\nvn 0.8297 0.0515 0.5558\nvn 0.7922 0.2247 0.5674\nvn 0.2341 0.6580 0.7157\nvn 0.5559 -0.3727 0.7430\nvn 0.6924 -0.1517 0.7054\nvn 0.8164 0.0055 0.5774\nvn 0.5378 0.3903 0.7473\nvn 0.5745 0.3924 0.7183\nvn 0.8380 0.0903 -0.5381\nvn 0.8375 0.0636 0.5427\nvn 0.1822 0.1227 0.9756\nvn 0.2885 -0.5952 0.7500\nvn 0.9282 -0.1525 0.3394\nvn 0.8486 0.0467 0.5270\nvn 0.7872 0.3551 0.5042\nvn 0.7164 0.4142 0.5615\nvn 0.8759 0.0425 0.4806\nvn 0.9348 -0.3059 -0.1803\nvn -0.9883 0.0195 -0.1512\nvn -0.2900 -0.5991 0.7463\nvn 0.7371 0.2267 0.6366\nvn 0.4535 0.4967 0.7401\nvn 0.5575 0.4389 0.7047\nvn 0.8613 -0.3070 -0.4049\nvn 0.8695 0.0768 -0.4879\nvn 0.8181 -0.2468 0.5194\nvn 0.8482 0.0473 0.5275\nvn 0.8974 0.0705 0.4355\nvn 0.6620 0.2337 0.7121\nvn 0.0817 0.8385 0.5388\nvn 0.3868 -0.4152 0.8234\nvn 0.5761 -0.7937 0.1955\nvn 0.5540 0.1432 0.8201\nvn 0.4524 -0.7281 -0.5150\nvn 0.5887 -0.4125 0.6952\nvn 0.4814 -0.7011 0.5260\nvn 0.6886 -0.5291 0.4959\nvn 0.7591 -0.2204 0.6125\nvn 0.7246 0.2977 0.6216\nvn 0.5581 0.4453 0.7001\nvn 0.6053 0.4299 0.6699\nvn 0.8772 -0.0016 0.4801\nvn 0.8962 -0.0942 0.4335\nvn 0.7021 0.0040 0.7120\nvn -0.4709 -0.4961 -0.7295\nvn 0.5728 -0.7712 -0.2778\nvn 0.7757 -0.6083 0.1682\nvn 0.0777 -0.0962 0.9923\nvn 0.6694 -0.5981 0.4407\nvn 0.6911 -0.5305 0.4908\nvn 0.6063 0.4368 0.6645\nvn 0.5076 -0.1852 0.8415\nvn 0.5272 -0.4956 0.6903\nvn 0.5140 -0.0009 0.8578\nvn -0.9732 0.0570 -0.2228\nvn 0.7464 0.3492 0.5665\nvn 0.8205 -0.2691 0.5043\nvn 0.3522 0.5424 0.7627\nvn 0.8219 0.0448 0.5679\nvn 0.5055 -0.5085 0.6971\nvn 0.4193 -0.3625 0.8323\nvn 0.4555 0.0261 0.8899\nvn 0.4950 0.2555 0.8305\nvn 0.3626 0.4155 0.8342\nvn 0.4147 0.0020 0.9099\nvn -0.0843 0.1224 -0.9889\nvn -0.4400 0.0989 -0.8925\nvn -0.1770 -0.9842 0.0058\nvn 0.3849 0.4968 0.7779\nvn -0.2658 -0.6052 -0.7504\nvn 0.6705 0.4058 0.6212\nvn 0.7929 0.0593 0.6065\nvn 0.5403 0.0545 0.8397\nvn 0.4179 0.4278 0.8015\nvn 0.4457 0.5613 0.6973\nvn 0.2552 -0.6350 0.7291\nvn 0.5113 -0.2335 0.8271\nvn 0.5189 0.4634 0.7183\nvn 0.5831 -0.2983 0.7556\nvn 0.6049 -0.2105 0.7679\nvn 0.4994 -0.0595 0.8643\nvn 0.1504 -0.1681 0.9742\nvn 0.9949 0.0848 0.0550\nvn 0.2137 -0.1235 0.9691\nvn 0.7959 -0.2797 0.5369\nvn 0.9060 -0.3575 -0.2265\nvn 0.3103 0.6179 0.7224\nvn -0.8991 -0.4331 0.0642\nvn 0.3726 0.4623 0.8046\nvn 0.4026 0.4361 0.8048\nvn 0.3695 0.5704 0.7335\nvn 0.7512 -0.1940 0.6309\nvn 0.6603 -0.3958 0.6382\nvn 0.6993 0.0515 0.7130\nvn 0.3403 0.1572 0.9271\nvn 0.3768 -0.9019 -0.2110\nvn 0.2168 0.8089 0.5465\nvn 0.6756 0.3978 0.6208\nvn 0.4070 -0.3592 0.8399\nvn 0.4748 -0.4877 0.7326\nvn 0.3978 -0.5011 0.7685\nvn 0.5145 0.3839 0.7667\nvn 0.3181 0.3312 0.8883\nvn 0.2848 0.3538 0.8909\nvn 0.3662 0.2383 0.8995\nvn -0.1706 0.9853 0.0079\nvn 0.6912 -0.1243 0.7119\nvn 0.4390 -0.1339 0.8884\nvn 0.7249 0.3730 -0.5792\nvn 0.5168 -0.2654 0.8139\nvn 0.5490 0.1973 0.8122\nvn 0.9249 0.3747 0.0647\nvn 0.6267 0.2885 0.7239\nvn 0.5978 0.3790 0.7064\nvn 0.4929 0.3856 0.7800\nvn 0.4329 0.0688 0.8988\nvn 0.8200 -0.3647 0.4411\nvn 0.9050 -0.1267 0.4062\nvn 0.9105 -0.1358 0.3906\nvn 0.8757 -0.0012 0.4828\nvn 0.8330 -0.1375 0.5359\nvn 0.5782 0.5333 0.6175\nvn 0.5711 0.4570 0.6820\nvn 0.7808 -0.1687 -0.6016\nvn 0.7956 -0.1775 0.5793\nvn 0.6949 0.4223 0.5821\nvn 0.5512 -0.7737 0.3124\nvn 0.6130 -0.2572 0.7470\nvn 0.5119 -0.2314 0.8273\nvn 0.6082 0.3607 0.7071\nvn 0.6772 -0.2020 0.7075\nvn 0.3962 0.5874 0.7057\nvn 0.8951 -0.0118 -0.4458\nvn 0.2674 0.2383 0.9336\nvn 0.0640 0.4264 -0.9023\nvn 0.7509 -0.0247 0.6600\nvn 0.6038 0.3571 0.7127\nvn 0.1146 -0.7495 -0.6520\nvn 0.5299 -0.4069 0.7441\nvn 0.7688 -0.2921 0.5689\nvn 0.5030 -0.0615 0.8621\nvn 0.6167 -0.3630 0.6985\nvn 0.1821 0.7959 0.5774\nvn 0.6273 -0.2922 0.7218\nvn 0.6942 0.2526 0.6740\nvn 0.6197 0.1901 0.7614\nvn 0.5699 -0.0409 0.8207\nvn -0.0448 -0.9986 -0.0270\nvn 0.3020 -0.1273 0.9448\nvn 0.7946 -0.5450 -0.2676\nvn 0.6010 -0.0104 0.7992\nvn 0.3908 -0.1310 0.9111\nvn 0.6178 -0.5014 0.6057\nvn 0.6634 0.1666 0.7295\nvn 0.5737 0.4714 0.6698\nvn 0.6950 -0.6947 0.1853\nvn 0.5746 0.1469 0.8051\nvn -0.8852 0.4594 -0.0734\nvn 0.1336 -0.3190 0.9383\nvn 0.6984 -0.3878 0.6015\nvn 0.7207 0.1376 0.6795\nvn 0.6690 0.2118 0.7124\nvn 0.6195 0.3799 0.6869\nvn 0.5750 0.5176 0.6336\nvn 0.6575 0.2715 0.7028\nvn 0.6479 -0.2221 0.7286\nvn 0.7287 0.2655 0.6313\nvn 0.3577 0.4764 0.8032\nvn 0.5348 -0.2387 0.8106\nvn 0.3113 0.3426 0.8864\nvn 0.3514 0.1323 0.9268\nvn 0.3866 0.1986 0.9006\nvn -0.1092 -0.5798 -0.8074\nvn 0.4647 0.1742 0.8682\nvn 0.6194 -0.3198 0.7170\nvn 0.6350 0.4272 0.6437\nvn 0.7692 0.1975 0.6077\nvn 0.8861 -0.1116 0.4498\nvn 0.7749 0.0834 0.6266\nvn 0.9627 0.2236 -0.1526\nvn 0.1313 0.5035 0.8539\nvn 0.2270 0.2534 0.9403\nvn 0.3776 -0.3387 0.8618\nvn 0.7165 0.3907 0.5780\nvn 0.9938 -0.0816 0.0761\nvn 0.3221 -0.1401 0.9363\nvn 0.4938 -0.0035 0.8696\nvn 0.7458 -0.1053 0.6577\nvn 0.8437 -0.0532 0.5342\nvn 0.2730 -0.0429 0.9611\nvn 0.6986 -0.4500 0.5563\nvn 0.5212 -0.6052 0.6017\nvn 0.8497 -0.5222 -0.0729\nvn 0.5628 -0.0903 0.8217\nvn 0.4442 0.1558 0.8823\nvn 0.4203 0.4260 0.8012\nvn 0.2796 0.4359 0.8554\nvn 0.0268 -0.6710 -0.7410\nvn 0.3806 0.5245 0.7616\nvn -0.1879 -0.7766 -0.6013\nvn 0.5382 -0.7030 0.4649\nvn 0.3051 0.4973 0.8122\nvn 0.4970 0.2602 0.8278\nvn 0.5395 0.3302 0.7745\nvn 0.9438 0.0762 0.3215\nvn 0.2093 -0.7220 -0.6595\nvn 0.3060 0.2522 0.9180\nvn -0.1185 -0.5455 -0.8297\nvn 0.4631 -0.8834 0.0719\nvn 0.6113 0.0834 0.7870\nvn 0.2104 -0.3654 0.9068\nvn 0.6793 0.0346 0.7331\nvn 0.5424 0.0694 0.8372\nvn -0.3724 0.5367 0.7572\nvn 0.4801 -0.0404 0.8763\nvn 0.3108 0.1662 0.9358\nvn 0.4709 0.1809 0.8634\nvn 0.7126 -0.0514 0.6997\nvn 0.7913 0.1216 0.5992\nvn 0.6293 0.4274 0.6490\nvn 0.7551 -0.3090 0.5782\nvn 0.3857 0.8847 0.2619\nvn 0.3230 0.9223 0.2121\nvn 0.2564 -0.4582 0.8510\nvn 0.0938 -0.6338 -0.7678\nvn 0.0380 0.3665 0.9296\nvn 0.6788 -0.0971 0.7278\nvn 0.9164 0.0587 0.3960\nvn 0.6531 -0.1173 0.7481\nvn 0.5633 -0.2171 0.7972\nvn 0.6581 -0.1588 0.7360\nvn 0.7728 0.2418 0.5867\nvn 0.3966 0.4867 0.7784\nvn 0.6372 0.0534 0.7688\nvn 0.5593 0.4158 0.7172\nvn 0.4750 0.7075 0.5232\nvn 0.4916 0.2466 0.8352\nvn 0.6742 -0.3078 0.6714\nvn 0.6325 -0.2416 0.7360\nvn 0.7926 0.1018 0.6012\nvn 0.7241 0.5345 0.4359\nvn 0.8268 0.2082 0.5225\nvn 0.8083 0.1630 0.5657\nvn 0.7393 0.0723 0.6695\nvn 0.0146 0.6744 0.7382\nvn 0.8844 0.1888 0.4268\nvn 0.7670 0.3431 0.5422\nvn 0.6437 -0.4347 0.6299\nvn 0.4505 0.1601 0.8783\nvn 0.2893 0.5541 0.7806\nvn 0.4437 0.5400 0.7152\nvn 0.4123 0.4893 0.7685\nvn 0.7839 -0.3358 0.5223\nvn 0.2748 0.4720 0.8377\nvn 0.7674 0.1101 0.6317\nvn 0.8040 0.2580 0.5357\nvn 0.5311 -0.4706 0.7045\nvn 0.3105 0.6180 0.7223\nvn 0.6840 -0.0782 0.7253\nvn 0.6018 -0.6678 0.4380\nvn 0.4972 0.2910 0.8174\nvn 0.6133 -0.3221 0.7212\nvn 0.5355 -0.5399 0.6494\nvn 0.7909 -0.6002 -0.1190\nvn 0.6747 -0.1704 0.7181\nvn 0.5529 0.2497 0.7949\nvn 0.8874 -0.0615 0.4568\nvn 0.4849 0.1638 0.8591\nvn 0.8593 0.0111 0.5113\nvn 0.5916 -0.3806 0.7108\nvn 0.6815 0.1620 0.7137\nvn 0.4578 -0.0146 0.8889\nvn 0.7714 -0.2843 0.5693\nvn 0.4622 -0.2150 0.8603\nvn 0.3997 -0.5324 0.7462\nvn 0.9214 0.1154 0.3711\nvn 0.8147 -0.1211 0.5671\nvn 0.9196 0.1306 0.3706\nvn 0.8115 0.2327 0.5360\nvn 0.5670 -0.5027 0.6525\nvn 0.3721 -0.0396 0.9273\nvn 0.8497 0.5240 0.0581\nvn 0.8828 -0.0828 0.4625\nvn -0.9712 -0.2375 0.0203\nvn -0.0795 0.4884 -0.8690\nvn 0.3217 0.6117 0.7227\nvn 0.1152 -0.3701 0.9218\nvn 0.6109 -0.0468 0.7904\nvn 0.8913 -0.0115 0.4532\nvn 0.8089 0.4398 0.3902\nvn -0.0808 0.0395 0.9960\nvn 0.3011 0.3216 0.8977\nvn 0.7533 -0.1267 0.6454\nvn 0.6298 0.1452 0.7631\nvn 0.5980 0.3310 0.7300\nvn 0.3860 0.6172 0.6856\nvn 0.6503 0.0272 -0.7592\nvn 0.8890 -0.3858 -0.2465\nvn 0.7255 0.3630 0.5846\nvn 0.1230 0.2799 0.9521\nvn 0.2939 0.3262 0.8984\nvn 0.2394 0.7067 0.6658\nvn 0.5771 -0.0888 0.8119\nvn 0.4575 -0.8892 0.0115\nvn -0.2280 -0.3874 -0.8933\nvn -0.7338 0.2083 -0.6466\nvn 0.8240 -0.1786 0.5377\nvn 0.1586 -0.5881 -0.7931\nvn 0.4166 -0.3179 0.8517\nvn 0.0642 0.2789 0.9582\nvn 0.5777 -0.4020 0.7104\nvn 0.4806 0.5811 0.6567\nvn 0.8990 0.1859 0.3966\nvn 0.8274 0.4294 0.3620\nvn 0.6565 0.4000 0.6395\nvn 0.7919 -0.0748 0.6060\nvn 0.5919 -0.5205 0.6154\nvn 0.0959 -0.0420 0.9945\nvn 0.3513 0.0100 0.9362\nvn 0.1613 -0.8085 -0.5660\nvn 0.6902 -0.4316 0.5808\nvn 0.6172 0.3316 0.7135\nvn 0.6188 -0.6837 -0.3869\nvn 0.8064 0.0639 0.5880\nvn 0.5021 -0.1932 0.8429\nvn 0.5332 0.1880 0.8249\nvn 0.4855 0.1269 0.8650\nvn 0.9102 -0.0887 0.4045\nvn -0.3813 0.2283 -0.8958\nvn 0.3559 -0.1060 0.9285\nvn 0.3452 0.2880 0.8932\nvn 0.3504 0.2932 0.8895\nvn 0.4616 -0.6617 0.5908\nvn 0.1453 0.8843 0.4438\nvn 0.3837 0.5933 0.7076\nvn 0.7613 0.5887 0.2718\nvn 0.1246 -0.5788 -0.8059\nvn 0.6171 -0.5022 0.6058\nvn 0.8409 -0.2582 0.4756\nvn 0.8206 -0.0675 0.5675\nvn 0.8622 -0.0019 0.5065\nvn 0.7227 -0.2344 0.6502\nvn 0.6559 -0.0940 0.7489\nvn 0.5241 0.4177 0.7422\nvn 0.4643 -0.0837 0.8817\nvn 0.7302 0.5522 -0.4022\nvn 0.3265 0.6282 0.7063\nvn 0.8198 -0.3042 0.4852\nvn 0.6338 -0.2886 0.7176\nvn 0.1924 -0.2809 0.9402\nvn 0.2147 -0.0452 0.9756\nvn 0.4263 0.3485 0.8347\nvn 0.7139 0.3843 0.5854\nvn 0.7947 -0.0773 0.6020\nvn -0.0792 -0.7596 -0.6455\nvn 0.8410 -0.2570 0.4760\nvn -0.5179 0.7437 -0.4228\nvn 0.9014 0.1934 0.3874\nvn 0.9042 0.2426 0.3515\nvn 0.9604 0.2175 -0.1742\nvn 0.3370 0.2495 0.9079\nvn 0.3722 -0.9263 -0.0584\nvn 0.6965 -0.3372 0.6334\nvn -0.6849 0.6567 0.3158\nvn -0.5394 -0.7917 0.2868\nvn 0.8692 0.3513 0.3481\nvn 0.6552 -0.0682 0.7523\nvn 0.4554 -0.0816 0.8865\nvn 0.7722 0.1116 0.6255\nvn -0.2813 0.2396 -0.9292\nvn 0.3128 0.2884 0.9050\nvn 0.2545 -0.0936 0.9625\nvn 0.4670 0.4862 0.7386\nvn 0.3825 0.0623 0.9219\nvn 0.7958 -0.4785 -0.3711\nvn 0.9968 0.0636 0.0487\nvn 0.4697 0.1336 0.8727\nvn 0.6791 -0.7268 -0.1026\nvn 0.8051 0.5521 -0.2170\nvn 0.5786 -0.0636 0.8131\nvn 0.5762 -0.0232 0.8170\nvn 0.4166 -0.8756 0.2444\nvn 0.7813 -0.3365 0.5258\nvn 0.7494 -0.2136 0.6267\nvn 0.4696 -0.6512 0.5962\nvn 0.9450 -0.0351 0.3251\nvn 0.5179 -0.2089 0.8295\nvn 0.5798 -0.4646 0.6693\nvn -0.2259 -0.4715 -0.8524\nvn 0.2371 0.6511 0.7210\nvn 0.6351 -0.7423 0.2137\nvn 0.9339 0.0410 0.3551\nvn 0.9420 -0.0976 0.3210\nvn -0.6604 -0.7232 -0.2022\nvn 0.6230 -0.0598 0.7800\nvn 0.8604 -0.5083 0.0362\nvn 0.3897 -0.5961 0.7020\nvn 0.7028 0.3681 0.6087\nvn 0.5513 -0.3912 0.7369\nvn 0.5593 0.7473 -0.3589\nvn 0.3756 0.5630 0.7362\nvn -0.8362 -0.3402 -0.4302\nvn 0.7213 -0.6856 -0.0985\nvn 0.2258 0.8470 0.4812\nvn 0.2090 0.7545 0.6221\nvn 0.4063 -0.0991 0.9084\nvn 0.8211 -0.2241 0.5250\nvn 0.5928 -0.5074 0.6254\nvn 0.6498 0.5489 0.5258\nvn 0.6070 0.0408 0.7936\nvn 0.5181 -0.2636 0.8137\nvn 0.6686 -0.7262 -0.1596\nvn 0.6052 -0.0366 0.7952\nvn 0.2127 -0.3308 -0.9194\nvn 0.2781 0.3183 0.9063\nvn 0.6754 -0.0428 0.7362\nvn 0.6155 -0.3857 0.6873\nvn 0.5922 -0.2180 0.7758\nvn 0.8682 0.2466 0.4307\nvn 0.8697 0.2700 0.4132\nvn -0.5487 0.7811 0.2980\nvn 0.2713 0.3802 0.8842\nvn 0.3592 -0.9300 -0.0779\nvn 0.0290 0.1260 -0.9916\nvn 0.1627 -0.9538 -0.2524\nvn 0.9828 0.1762 0.0553\nvn -0.4837 0.8360 0.2590\nvn -0.2166 -0.2788 -0.9356\nvn 0.7524 0.1351 0.6447\nvn 0.5000 0.5952 0.6290\nvn 0.5457 0.1940 0.8152\nvn 0.7121 0.2248 0.6651\nvn 0.9989 0.0266 -0.0398\nvn 0.2373 0.0382 0.9707\nvn 0.8055 0.3394 0.4858\nvn 0.1971 -0.0753 0.9775\nvn 0.8548 -0.4988 -0.1430\nvn 0.8920 -0.4281 -0.1454\nvn 0.3120 0.0044 0.9501\nvn 0.3787 0.5031 0.7768\nvn 0.8586 0.4960 0.1296\nvn 0.4741 -0.3327 0.8152\nvn 0.3784 0.2098 0.9015\nvn 0.6270 0.0279 0.7785\nvn 0.7249 -0.1111 0.6799\nvn 0.3549 -0.0560 0.9332\nvn 0.5051 0.0701 0.8602\nvn 0.8959 -0.3344 -0.2924\nvn 0.4023 0.3855 0.8304\nvn 0.9972 -0.0458 -0.0598\nvn 0.8985 0.0490 -0.4362\nvn 0.3112 -0.0179 0.9502\nvn 0.8019 -0.3313 0.4972\nvn 0.1257 0.9253 0.3579\nvn 0.9351 -0.0517 0.3507\nvn 0.7524 -0.4631 0.4685\nvn -0.7891 -0.5890 0.1745\nvn -0.0586 0.8161 0.5749\nvn 0.9402 0.3270 0.0950\nvn 0.6676 -0.5829 0.4632\nvn 0.5958 -0.0032 0.8031\nvn 0.1656 0.1240 0.9784\nvn 0.6242 -0.7258 0.2889\nvn -0.0861 -0.4290 -0.8992\nvn 0.8211 0.3325 0.4640\nvn 0.9160 0.2042 -0.3452\nvn 0.7627 0.0047 0.6467\nvn 0.7214 -0.5139 0.4642\nvn 0.4553 -0.5724 0.6820\nvn 0.2416 -0.3550 0.9031\nvn 0.7582 0.3827 0.5280\nvn 0.3143 -0.0458 0.9482\nvn 0.6788 0.5847 -0.4443\nvn 0.5003 -0.6606 -0.5597\nvn 0.5951 0.1547 0.7886\nvn 0.0847 -0.7767 -0.6241\nvn 0.9621 0.1548 0.2243\nvn 0.7941 -0.1866 0.5784\nvn 0.7069 0.2607 0.6575\nvn 0.6816 -0.0977 0.7252\nvn 0.4838 -0.0141 0.8751\nvn 0.8850 0.0037 0.4656\nvn 0.7310 -0.2566 0.6323\nvn 0.6880 0.0775 0.7216\nvn 0.4839 -0.6847 -0.5450\nvn 0.3203 -0.3856 0.8653\nvn 0.4148 -0.3379 0.8449\nvn 0.6377 -0.4531 0.6229\nvn 0.8730 -0.1931 0.4478\nvn 0.5416 0.0149 0.8405\nvn 0.1997 0.8511 -0.4856\nvn 0.7974 0.0002 0.6034\nvn 0.5682 -0.3992 0.7196\nvn 0.2978 0.3207 0.8991\nvn 0.2064 0.3648 0.9079\nvn 0.9783 0.2072 -0.0096\nvn 0.4140 0.2320 0.8802\nvn 0.7185 -0.3714 0.5881\nvn 0.3081 -0.0823 0.9478\nvn 0.3320 0.2705 0.9037\nvn 0.6261 0.4332 -0.6484\nvn 0.5652 0.0389 0.8241\nvn 0.1841 0.2142 0.9593\nvn 0.6975 -0.2201 0.6819\nvn 0.7771 0.4018 0.4845\nvn 0.5218 0.2060 0.8278\nvn 0.3826 0.1647 0.9091\nvn 0.8348 -0.0397 0.5491\nvn 0.2119 0.3918 0.8953\nvn 0.3237 -0.0330 0.9456\nvn 0.7373 0.0483 0.6738\nvn 0.7773 -0.3484 0.5238\nvn 0.7380 -0.3812 0.5568\nvn 0.2580 -0.0656 0.9639\nvn 0.6720 0.1117 -0.7321\nvn 0.3336 -0.1720 0.9269\nvn 0.4256 -0.0546 0.9033\nvn 0.5535 0.0730 0.8297\nvn 0.7517 -0.0261 0.6590\nvn 0.4720 -0.3806 0.7952\nvn 0.1195 0.8958 0.4280\nvn 0.2484 -0.0896 0.9645\nvn 0.3592 0.0310 0.9327\nvn 0.8274 -0.1035 0.5520\nvn 0.4965 0.3998 0.7705\nvn 0.7389 0.0558 0.6716\nvn 0.8816 0.1335 0.4526\nvn 0.6556 0.2863 0.6987\nvn 0.7391 -0.3954 0.5454\nvn 0.6293 0.3538 0.6920\nvn 0.1328 0.8898 0.4366\nvn 0.3773 0.1834 0.9077\nvn 0.9793 0.1192 0.1635\nvn 0.5930 -0.1548 0.7902\nvn 0.5293 -0.2007 0.8244\nvn 0.2824 0.3030 0.9102\nvn 0.2850 0.6269 0.7251\nvn 0.4346 -0.4528 0.7785\nvn 0.7843 -0.3709 0.4974\nvn -0.6632 0.2747 -0.6962\nvn 0.8366 -0.0832 0.5415\nvn 0.7174 -0.5804 0.3852\nvn 0.4114 -0.1443 0.9000\nvn -0.9855 0.1085 -0.1304\nvn 0.5235 -0.0291 0.8516\nvn -0.2388 0.2462 -0.9393\nvn 0.6015 0.4101 0.6856\nvn 0.3072 0.5817 0.7532\nvn 0.3312 0.2794 0.9013\nvn 0.5557 0.7052 0.4404\nvn 0.7316 0.3746 0.5697\nvn 0.2906 -0.3387 0.8949\nvn 0.7928 0.2963 0.5326\nvn 0.3793 -0.2366 0.8945\nvn 0.9949 0.0850 0.0543\nvn -0.1587 0.7497 -0.6424\nvn 0.6314 -0.4041 0.6618\nvn 0.4060 -0.1835 0.8952\nvn 0.2207 -0.1159 0.9684\nvn 0.7715 -0.6361 -0.0143\nvn 0.6168 -0.5532 0.5599\nvn 0.6222 -0.2986 0.7236\nvn 0.7257 -0.0421 0.6867\nvn 0.3598 0.2041 0.9104\nvn 0.8681 0.0511 -0.4937\nvn 0.4724 -0.2430 0.8473\nvn 0.5796 0.3522 0.7349\nvn 0.5815 -0.0119 0.8135\nvn 0.7113 -0.1298 0.6908\nvn 0.5136 -0.8006 0.3086\nvn 0.6076 -0.2153 0.7645\nvn 0.9343 -0.0556 0.3522\nvn 0.8105 -0.3538 0.4668\nvn 0.7642 -0.3515 -0.5407\nvn 0.5491 -0.0842 0.8315\nvn -0.0632 0.5085 0.8587\nvn -0.0004 0.6773 0.7357\nvn 0.4489 0.3409 0.8260\nvn 0.8724 -0.0044 -0.4888\nvn 0.3012 0.0048 0.9535\nvn 0.5960 -0.1723 0.7843\nvn 0.2820 0.1347 0.9499\nvn 0.9929 0.0906 0.0768\nvn 0.4550 -0.1166 0.8828\nvn 0.4303 -0.0054 0.9026\nvn 0.6988 0.1832 0.6914\nvn 0.9671 0.2007 -0.1561\nvn 0.5260 -0.4202 0.7394\nvn 0.6282 -0.2416 0.7396\nvn 0.5711 0.6787 0.4617\nvn 0.6111 0.2889 0.7369\nvn 0.8160 0.5176 -0.2572\nvn 0.7717 0.3485 0.5320\nvn 0.1640 0.4870 0.8579\nvn 0.3906 -0.1434 0.9093\nvn 0.2543 0.2328 0.9387\nvn 0.2450 0.7506 0.6137\nvn 0.7745 -0.1447 0.6158\nvn 0.6994 0.1638 0.6957\nvn 0.7611 -0.0151 0.6485\nvn 0.7315 -0.3103 0.6072\nvn 0.7024 -0.3810 0.6012\nvn 0.5935 0.1209 0.7957\nvn 0.7669 -0.2699 0.5823\nvn -0.0164 0.4130 -0.9106\nvn 0.7185 0.4070 0.5641\nvn -0.4637 -0.0190 -0.8858\nvn 0.3851 0.1282 0.9139\nvn 0.3819 -0.7045 -0.5982\nvn 0.9313 -0.0747 -0.3565\nvn 0.5814 -0.3358 0.7411\nvn 0.2041 0.7596 0.6176\nvn 0.5539 0.2333 0.7992\nvn 0.6372 -0.2639 0.7241\nvn 0.9201 0.0554 -0.3878\nvn -0.2560 -0.5729 -0.7786\nvn 0.3404 -0.0029 0.9403\nvn 0.7638 0.0362 0.6445\nvn 0.8614 -0.0320 0.5070\nvn 0.4407 0.6269 0.6424\nvn 0.4486 -0.4967 0.7430\nvn 0.5710 -0.6370 0.5180\nvn 0.3904 0.2715 0.8797\nvn 0.6828 -0.4088 0.6055\nvn 0.5944 0.4746 0.6491\nvn 0.8203 -0.1172 0.5598\nvn 0.4196 0.4445 0.7914\nvn 0.4711 0.2349 0.8502\nvn 0.8436 0.1780 0.5066\nvn -0.2428 0.6018 0.7608\nvn 0.2778 0.0244 0.9603\nvn 0.9062 -0.0309 0.4217\nvn 0.5585 -0.0051 0.8295\nvn 0.3589 0.4367 0.8249\nvn 0.5684 0.1504 0.8089\nvn 0.6109 0.1738 0.7724\nvn 0.5541 0.0583 0.8304\nvn 0.7690 -0.2868 0.5713\nvn 0.6237 0.3910 0.6768\nvn -0.7216 0.0808 -0.6876\nvn 0.6284 -0.7540 -0.1912\nvn 0.6567 0.2910 0.6958\nvn 0.4535 0.2309 0.8608\nvn 0.0025 0.8669 0.4985\nvn 0.3854 0.3313 0.8612\nvn 0.5632 0.0999 0.8203\nvn -0.8963 0.1539 -0.4159\nvn 0.7161 -0.1875 0.6723\nvn 0.2747 0.0645 0.9594\nvn -0.0498 0.7848 0.6178\nvn 0.3329 0.4682 0.8185\nvn 0.9474 0.2586 0.1886\nvn 0.9729 0.1554 -0.1710\nvn 0.6749 -0.4169 0.6089\nvn -0.7333 -0.0668 -0.6766\nvn 0.6577 0.4055 0.6348\nvn 0.6280 -0.7379 0.2474\nvn 0.5523 -0.3351 0.7633\nvn 0.4757 -0.4398 0.7618\nvn 0.8146 -0.2789 0.5086\nvn 0.7389 -0.4482 0.5032\nvn 0.9650 0.2202 -0.1422\nvn 0.9400 -0.0701 0.3340\nvn 0.7280 -0.2421 0.6414\nvn 0.3197 -0.6737 0.6663\nvn 0.6295 -0.1660 0.7591\nvn 0.6015 0.1909 0.7757\nvn 0.4672 -0.2163 0.8573\nvn 0.3715 0.1823 0.9104\nvn 0.8620 -0.4869 -0.1409\nvn 0.6213 0.0594 0.7813\nvn 0.6527 -0.4861 0.5812\nvn 0.8767 0.1654 0.4516\nvn 0.8441 0.3009 0.4439\nvn 0.6589 -0.4519 0.6014\nvn 0.2933 -0.2750 0.9156\nvn 0.0928 0.8601 0.5017\nvn 0.4166 0.4135 0.8096\nvn 0.4299 0.3560 0.8297\nvn 0.1976 -0.6375 0.7447\nvn -0.0666 -0.6449 -0.7613\nvn -0.2190 -0.9352 -0.2784\nvn 0.1033 0.1655 0.9808\nvn 0.5525 0.4918 0.6730\nvn 0.0232 0.2243 0.9742\nvn 0.7141 0.0539 0.6980\nvn 0.5818 -0.5568 0.5929\nvn 0.6595 -0.5156 0.5471\nvn -0.0223 -0.9997 0.0073\nvn -0.1518 0.7120 0.6856\nvn -0.1328 0.7620 0.6338\nvn 0.7596 -0.2359 0.6060\nvn 0.7841 -0.3277 0.5271\nvn -0.0111 -0.9997 0.0228\nvn -0.4685 0.7697 0.4337\nvn 0.2899 0.0296 0.9566\nvn -0.7677 -0.6077 -0.2033\nvn 0.1300 0.5790 0.8049\nvn 0.5698 0.1786 0.8022\nvn 0.2856 0.2304 0.9302\nvn 0.1864 0.7955 0.5766\nvn 0.9435 0.2915 -0.1579\nvn 0.5140 0.0145 0.8577\nvn 0.7117 -0.3975 0.5792\nvn 0.9840 -0.0359 -0.1744\nvn 0.6933 -0.3685 0.6193\nvn 0.7255 -0.2223 0.6514\nvn 0.3969 0.2667 0.8783\nvn 0.3697 0.4738 0.7993\nvn 0.5569 0.4127 0.7208\nvn 0.7619 -0.1618 0.6272\nvn -0.8548 -0.4889 -0.1741\nvn 0.7627 0.6101 0.2146\nvn -0.7330 -0.4026 -0.5482\nvn 0.9051 0.4238 -0.0350\nvn -0.0656 -0.4805 0.8745\nvn 0.3284 -0.0580 0.9428\nvn 0.6746 -0.1774 0.7166\nvn 0.4937 -0.5236 0.6943\nvn 0.5930 -0.1576 0.7896\nvn 0.7558 -0.2850 0.5895\nvn 0.5645 -0.0469 0.8241\nvn 0.6218 0.0782 0.7793\nvn 0.7661 -0.2309 0.5998\nvn -0.3911 0.7526 0.5298\nvn 0.3940 0.3886 0.8329\nvn 0.4796 -0.4900 0.7279\nvn 0.4170 -0.2563 0.8720\nvn 0.3847 0.4456 0.8084\nvn 0.7980 -0.3363 0.5001\nvn 0.2343 0.6642 0.7099\nvn 0.6019 0.0749 0.7951\nvn 0.5890 -0.6170 -0.5218\nvn 0.7211 -0.2630 0.6410\nvn 0.3521 0.6021 0.7166\nvn 0.6750 -0.1498 0.7225\nvn 0.3955 0.4225 0.8155\nvn 0.4771 -0.0708 0.8760\nvn 0.7240 -0.1876 0.6638\nvn 0.7580 0.0175 0.6520\nvn 0.2876 0.6706 0.6838\nvn -0.2720 0.5150 -0.8129\nvn 0.4958 -0.3092 0.8115\nvn 0.5535 0.3390 0.7607\nvn 0.6616 0.0825 0.7453\nvn 0.2840 0.0388 0.9580\nvn -0.7529 -0.6170 0.2291\nvn 0.5383 -0.5204 0.6629\nvn 0.6978 0.3727 0.6117\nvn 0.4901 0.3760 0.7864\nvn 0.9237 0.3710 0.0962\nvn -0.8693 -0.3920 0.3011\nvn -0.7119 -0.5916 0.3784\nvn -0.5592 0.8219 0.1082\nvn -0.9019 0.4046 0.1514\nvn 0.9828 -0.1839 -0.0141\nvn 0.9927 -0.0162 -0.1193\nvn 0.5189 -0.8508 0.0830\nvn 0.8347 0.5423 -0.0962\nvn -0.6269 -0.7467 -0.2223\nvn -0.4332 0.8700 -0.2356\nvn -0.9902 -0.1391 -0.0152\nvn -0.5690 -0.8217 0.0321\nvn -0.6233 0.7392 -0.2549\nvn 0.3842 -0.8106 -0.4419\nvn -0.7138 0.0286 0.6997\nvn -0.9719 -0.2320 0.0412\nvn 0.9369 -0.3215 -0.1375\nvn -0.9190 0.3640 -0.1513\nvn 0.9593 0.2821 0.0144\nvn 0.6127 -0.6561 -0.4407\nvn -0.8516 0.4177 0.3166\nvn -0.6756 0.5835 -0.4507\nvn -0.9913 0.0580 0.1184\nvn -0.9359 0.3313 0.1198\nvn -0.3200 0.9068 -0.2743\nvn 0.4294 0.6863 -0.5870\nvn 0.9421 -0.2986 -0.1525\nvn 0.4332 -0.8010 -0.4132\nvn 0.9805 -0.1506 -0.1259\nvn -0.8614 0.4971 0.1043\nvn 0.9780 0.1649 0.1279\nvn 0.9799 -0.1822 -0.0816\nvn 0.8957 -0.3606 -0.2603\nvn 0.7198 -0.3260 -0.6129\nvn -0.3164 0.9221 -0.2229\nvn 0.8034 0.3751 0.4624\nvn -0.9585 -0.0360 0.2827\nvn -0.3876 0.8928 -0.2295\nvn 0.7395 -0.1154 -0.6632\nvn -0.9176 -0.2344 0.3210\nvn -0.9736 0.1484 0.1735\nvn 0.2788 -0.9553 0.0986\nvn 0.8219 -0.4006 0.4050\nvn -0.7984 0.5752 0.1779\nvn 0.5044 0.1256 -0.8543\nvn -0.6185 -0.4690 -0.6304\nvn -0.8808 0.4162 0.2258\nvn -0.7664 -0.0296 -0.6416\nvn -0.7621 -0.0491 -0.6456\nvn 0.8703 -0.4440 -0.2132\nvn -0.9312 0.1461 0.3341\nvn -0.9817 -0.1018 -0.1608\nvn 0.6634 -0.0582 -0.7460\nvn 0.9737 -0.2275 0.0090\nvn 0.9208 0.2686 0.2830\nvn 0.1851 -0.9759 0.1155\nvn -0.1319 -0.5122 0.8487\nvn -0.8740 -0.1298 -0.4683\nvn -0.9940 0.0774 0.0770\nvn -0.9004 0.0891 -0.4258\nvn -0.7889 -0.4533 -0.4149\nvn 0.6581 -0.3448 -0.6693\nvn 0.9593 0.2742 0.0672\nvn 0.9994 -0.0011 0.0336\nvn 0.7386 -0.0419 -0.6729\nvn -0.4976 0.8594 0.1171\nvn 0.9087 0.4143 0.0518\nvn 0.8594 -0.1046 -0.5004\nvn 0.4540 -0.8630 -0.2217\nvn 0.8375 0.5249 0.1515\nvn -0.5462 0.8148 0.1944\nvn 0.4049 -0.7169 -0.5675\nvn 0.9996 -0.0094 0.0259\nvn 0.9449 0.2940 0.1437\nvn 0.9319 0.3286 0.1533\nvn 0.9672 0.1363 0.2142\nvn 0.8092 0.0074 -0.5875\nvn 0.7505 -0.3418 -0.5656\nvn -0.0050 -0.9997 0.0257\nvn 0.7357 -0.1431 -0.6621\nvn 0.9701 -0.2168 -0.1090\nvn 0.9202 0.2543 0.2975\nvn -0.3813 -0.0869 -0.9204\nvn -0.8576 -0.5100 0.0661\nvn -0.7450 0.2329 -0.6251\nvn -0.9312 0.2142 -0.2949\nvn 0.8974 0.0061 -0.4412\nvn 0.7827 -0.5385 0.3122\nvn -0.3061 0.6971 0.6483\nvn 0.9624 -0.2440 -0.1191\nvn 0.0107 -0.9997 -0.0212\nvn 0.8236 0.0076 -0.5671\nvn 0.7650 0.1290 -0.6310\nvn -0.5412 0.8079 0.2331\nvn 0.6981 -0.0610 -0.7134\nvn 0.8176 -0.0052 -0.5758\nvn 0.6329 -0.6262 -0.4553\nvn 0.7679 0.1901 -0.6117\nvn -0.8445 -0.5041 -0.1808\nvn -0.9383 0.3369 -0.0783\nvn 0.9984 -0.0106 0.0559\nvn 0.1158 0.1028 -0.9879\nvn 0.9811 -0.1537 -0.1177\nvn 0.9908 -0.0301 -0.1318\nvn -0.6642 0.3027 -0.6835\nvn -0.3085 0.7007 -0.6433\nvn -0.4035 -0.5934 -0.6965\nvn 0.0372 -0.7235 -0.6893\nvn -0.9457 -0.1953 -0.2600\nvn -0.8875 0.2255 -0.4018\nvn 0.9242 0.3538 -0.1434\nvn -0.7861 0.6119 0.0879\nvn -0.9437 0.3068 -0.1235\nvn -0.0627 -0.4526 -0.8895\nvn -0.6427 -0.4706 -0.6045\nvn 0.8285 -0.1864 -0.5280\nvn 0.6967 -0.2916 -0.6555\nvn -0.5020 0.8574 -0.1137\nvn 0.1107 0.6530 -0.7492\nvn -0.3329 0.9193 0.2097\nvn -0.7954 -0.5857 -0.1561\nvn -0.9645 -0.2187 -0.1484\nvn -0.1396 -0.3285 -0.9341\nvn -0.9233 -0.0992 -0.3710\nvn -0.8683 0.0189 -0.4956\nvn -0.8262 -0.1115 -0.5522\nvn -0.8625 0.4349 -0.2586\nvn -0.0594 -0.3725 -0.9261\nvn 0.9997 0.0011 0.0252\nvn 0.6612 -0.7305 -0.1709\nvn -0.2315 0.2151 -0.9488\nvn -0.5634 0.8217 -0.0862\nvn 0.0295 0.2387 -0.9706\nvn -0.8794 0.4666 -0.0952\nvn 0.1178 0.7389 -0.6634\nvn 0.7325 0.1659 -0.6602\nvn -0.8975 0.1449 -0.4165\nvn -0.8917 0.3938 -0.2229\nvn -0.6688 -0.6727 -0.3165\nvn -0.8361 -0.4462 -0.3191\nvn 0.8306 -0.2005 -0.5196\nvn -0.8595 0.4948 -0.1278\nvn -0.8704 -0.3863 0.3052\nvn -0.1957 -0.3796 -0.9042\nvn -0.6824 -0.6854 0.2543\nvn -0.7043 -0.3168 -0.6353\nvn 0.7007 0.6120 -0.3667\nvn 0.6078 -0.7626 -0.2215\nvn 0.0752 -0.8141 -0.5758\nvn 0.9125 -0.0368 0.4074\nvn 0.8921 -0.3702 -0.2591\nvn 0.5224 -0.2605 -0.8119\nvn 0.9894 0.0338 0.1415\nvn -0.9170 -0.3459 0.1987\nvn 0.7732 -0.3142 -0.5509\nvn -0.7712 -0.3732 -0.5157\nvn 0.8805 -0.3357 -0.3348\nvn -0.9224 -0.3065 -0.2350\nvn 0.5808 -0.2333 -0.7799\nvn 0.7615 -0.1381 -0.6333\nvn 0.8864 -0.3695 0.2788\nvn 0.9421 -0.3327 0.0416\nvn 0.8058 0.2824 0.5206\nvn 0.8906 -0.4547 -0.0073\nvn 0.7400 -0.1514 -0.6553\nvn 0.7853 -0.5216 -0.3335\nvn -0.8144 -0.5637 -0.1378\nvn 0.5594 0.5663 0.6053\nvn -0.9408 -0.3168 0.1203\nvn 0.8143 -0.4573 -0.3574\nvn -0.8493 0.5092 -0.1394\nvn 0.4587 -0.8171 -0.3493\nvn -0.9694 0.1067 0.2212\nvn 0.9989 -0.0361 0.0294\nvn -0.3540 0.8373 -0.4165\nvn 0.9710 -0.2389 0.0016\nvn 0.9672 -0.2295 -0.1090\nvn -0.9358 0.1858 -0.2996\nvn 0.6060 -0.7121 -0.3545\nvn -0.9076 0.2539 -0.3343\nvn 0.7617 -0.4397 -0.4759\nvn 0.8548 -0.4757 -0.2075\nvn 0.8405 -0.4975 -0.2147\nvn 0.9186 0.2445 0.3103\nvn -0.9433 -0.2167 0.2514\nvn 0.6090 0.1695 -0.7749\nvn 0.5770 -0.7519 0.3189\nvn -0.5886 -0.6878 -0.4248\nvn -0.8344 0.2474 -0.4925\nvn -0.8051 -0.0456 -0.5914\nvn 0.8857 -0.3117 -0.3440\nvn -0.9676 0.2291 -0.1060\nvn 0.8215 -0.2944 -0.4883\nvn -0.9266 0.3109 -0.2117\nvn -0.9665 -0.1515 0.2071\nvn -0.8950 0.1807 0.4077\nvn 0.9380 -0.3423 0.0554\nvn 0.5251 0.2740 -0.8057\nvn 0.6182 -0.5020 -0.6048\nvn 0.7845 -0.5795 -0.2209\nvn 0.6672 -0.7011 -0.2517\nvn -0.7654 -0.5448 -0.3425\nvn 0.7250 0.0647 -0.6857\nvn 0.6486 -0.6096 -0.4557\nvn -0.9225 0.0995 -0.3730\nvn 0.7078 -0.5175 -0.4809\nvn 0.7972 -0.5663 -0.2094\nvn 0.7866 -0.5782 -0.2165\nvn 0.7950 -0.5111 -0.3266\nvn 0.4032 -0.9147 -0.0279\nvn 0.9960 -0.0882 0.0113\nvn 0.9106 0.3867 0.1461\nvn 0.9900 0.1383 -0.0290\nvn 0.6332 -0.7209 -0.2816\nvn 0.4236 0.6474 -0.6336\nvn 0.7805 -0.2057 -0.5904\nvn 0.6881 -0.3861 -0.6144\nvn 0.4437 0.3621 -0.8197\nvn 0.7485 -0.5915 0.2997\nvn 0.8456 -0.5016 -0.1827\nvn 0.8631 -0.4798 -0.1574\nvn -0.7908 0.5820 -0.1895\nvn -0.3058 0.9500 0.0625\nvn 0.5467 -0.8024 -0.2394\nvn -0.7748 -0.6195 -0.1261\nvn 0.9236 -0.3820 -0.0318\nvn 0.7509 -0.6387 0.1680\nvn 0.9676 0.2524 -0.0014\nvn -0.2005 -0.7632 0.6142\nvn 0.9052 -0.4089 -0.1161\nvn 0.0997 -0.8607 -0.4992\nvn 0.6102 0.4816 -0.6290\nvn -0.7157 0.5354 -0.4484\nvn -0.8290 -0.1901 -0.5259\nvn 0.3231 0.3440 -0.8816\nvn 0.9107 -0.3937 -0.1251\nvn 0.8785 0.1109 -0.4648\nvn 0.7026 -0.5160 -0.4900\nvn 0.4855 -0.8070 0.3363\nvn -0.5734 -0.4309 0.6968\nvn 0.4253 -0.4518 -0.7842\nvn -0.1562 -0.0403 -0.9869\nvn 0.0360 -0.8971 -0.4404\nvn -0.8855 -0.4106 -0.2176\nvn 0.9904 -0.0412 0.1319\nvn -0.0549 -0.9951 -0.0823\nvn 0.9660 0.1770 -0.1884\nvn 0.2659 0.3187 0.9098\nvn -0.1934 0.6201 -0.7603\nvn 0.9732 0.2013 0.1109\nvn 0.2614 0.5744 0.7757\nvn -0.7994 -0.5826 -0.1466\nvn 0.8763 -0.2005 -0.4381\nvn -0.6761 0.7210 -0.1520\nvn 0.8874 -0.1638 -0.4310\nvn 0.8010 0.1490 -0.5798\nvn 0.8135 -0.1009 -0.5728\nvn 0.8357 -0.1644 -0.5239\nvn 0.6932 -0.6599 0.2898\nvn 0.7121 0.1135 -0.6929\nvn 0.9867 0.1379 0.0866\nvn -0.9435 -0.3116 -0.1132\nvn -0.5353 -0.8080 -0.2461\nvn 0.9501 -0.2742 -0.1484\nvn 0.9907 -0.1180 -0.0674\nvn 0.9939 0.0056 0.1105\nvn -0.8489 -0.5124 -0.1297\nvn 0.8417 0.4795 0.2482\nvn -0.9191 0.2360 -0.3156\nvn 0.8852 -0.3123 -0.3449\nvn -0.7767 0.5484 0.3099\nvn 0.9944 -0.0639 -0.0836\nvn 0.0937 -0.9041 -0.4168\nvn 0.6664 -0.1627 -0.7276\nvn 0.8252 -0.1842 -0.5340\nvn 0.0293 -0.9979 0.0582\nvn 0.4488 -0.8536 -0.2644\nvn 0.1140 0.1424 -0.9832\nvn 0.8011 0.0023 -0.5986\nvn -0.2705 0.2439 -0.9313\nvn 0.9946 0.0946 0.0423\nvn 0.9990 0.0020 0.0447\nvn 0.9501 0.2465 0.1912\nvn 0.7341 -0.1466 -0.6631\nvn 0.7768 -0.1572 -0.6098\nvn 0.6839 -0.4959 0.5352\nvn 0.5427 -0.2879 0.7891\nvn -0.3681 -0.9075 0.2025\nvn -0.2857 -0.8969 0.3376\nvn 0.0139 -0.9992 0.0388\nvn -0.1771 -0.9395 -0.2933\nvn 0.8602 -0.0331 -0.5089\nvn 0.8492 -0.5038 -0.1583\nvn -0.9469 -0.1339 0.2923\nvn 0.7755 -0.5866 -0.2334\nvn 0.7983 -0.5487 -0.2484\nvn 0.0667 -0.8336 -0.5483\nvn 0.1804 -0.9385 -0.2944\nvn 0.7828 -0.5761 -0.2351\nvn 0.9773 0.1264 0.1700\nvn 0.8915 -0.0364 -0.4515\nvn -0.6873 0.4404 -0.5776\nvn 0.9117 -0.1644 -0.3766\nvn 0.0095 -0.9997 -0.0230\nvn 0.6763 -0.5600 -0.4786\nvn 0.7814 -0.1390 -0.6083\nvn 0.8512 -0.5053 -0.1420\nvn -0.5183 0.6375 -0.5700\nvn -0.4472 0.8593 0.2482\nvn -0.9107 -0.3372 -0.2384\nvn -0.4860 0.8020 -0.3472\nvn -0.6614 0.6592 -0.3577\nvn 0.8025 -0.4265 -0.4172\nvn 0.6223 -0.1005 -0.7763\nvn -0.4481 -0.8125 -0.3728\nvn -0.9166 0.3613 -0.1713\nvn 0.6318 -0.7442 0.2166\nvn 0.6687 -0.5990 -0.4404\nvn -0.6868 -0.4113 -0.5992\nvn 0.9091 -0.2343 -0.3445\nvn -0.6072 0.4165 -0.6766\nvn 0.5066 0.3424 -0.7913\nvn 0.3908 -0.0658 -0.9181\nvn 0.9592 -0.2812 -0.0287\nvn -0.9594 0.1404 -0.2445\nvn -0.6301 -0.7688 -0.1087\nvn 0.5531 -0.4499 -0.7012\nvn 0.6000 -0.6761 -0.4276\nvn 0.8861 -0.0323 -0.4623\nvn 0.8495 -0.2903 -0.4406\nvn 0.8549 -0.4952 -0.1547\nvn -0.9934 0.0261 -0.1115\nvn -0.6959 0.7070 -0.1260\nvn -0.7128 0.3254 -0.6213\nvn 0.8736 -0.3431 -0.3451\nvn -0.9835 0.0650 -0.1691\nvn 0.6946 0.0345 -0.7186\nvn 0.9996 -0.0275 0.0110\nvn 0.9731 0.2020 0.1110\nvn -0.9949 0.0959 0.0319\nvn -0.8238 0.2640 -0.5016\nvn 0.8154 0.1611 -0.5560\nvn 0.7513 -0.3760 -0.5424\nvn -0.8794 -0.2104 -0.4271\nvn 0.5820 -0.4658 -0.6666\nvn -0.5878 0.8016 0.1095\nvn -0.2125 0.6426 -0.7361\nvn 0.5129 -0.7466 -0.4238\nvn 0.6061 -0.7619 -0.2282\nvn 0.8090 -0.4781 -0.3419\nvn 0.4143 -0.7400 -0.5298\nvn 0.9733 0.2295 0.0064\nvn 0.9377 0.0083 -0.3475\nvn 0.8646 0.0029 -0.5024\nvn 0.6776 -0.2733 -0.6828\nvn 0.1920 -0.8336 -0.5179\nvn 0.1035 -0.9805 0.1672\nvn -0.9945 0.0390 -0.0972\nvn -0.9329 -0.1792 -0.3124\nvn -0.9638 -0.0277 -0.2651\nvn 0.7882 -0.3730 0.4895\nvn 0.5853 -0.6122 0.5316\nvn 0.9343 0.1434 0.3263\nvn 0.9981 -0.0602 0.0126\nvn 0.6664 -0.4905 -0.5615\nvn -0.9085 0.3383 0.2452\nvn 0.5842 -0.1914 -0.7887\nvn 0.7106 -0.5942 -0.3768\nvn 0.5306 -0.4086 0.7426\nvn -0.1513 0.9828 -0.1056\nvn 0.2461 0.4109 0.8778\nvn 0.8956 0.2604 0.3606\nvn -0.1459 -0.3982 -0.9056\nvn 0.5050 -0.8243 -0.2560\nvn -0.9779 0.2088 -0.0101\nvn 0.5982 0.0552 -0.7995\nvn 0.9929 0.1039 0.0588\nvn 0.4607 -0.7582 -0.4614\nvn 0.5305 -0.5978 0.6010\nvn -0.8839 -0.3739 0.2809\nvn 0.0369 0.5831 -0.8116\nvn -0.0583 0.3934 -0.9175\nvn 0.6135 -0.1276 -0.7793\nvn 0.1261 -0.7814 -0.6111\nvn 0.7712 -0.5212 -0.3656\nvn 0.5134 -0.8158 0.2661\nvn 0.3660 0.3385 0.8669\nvn 0.8588 0.3566 0.3679\nvn -0.3233 -0.3482 -0.8799\nvn 0.6379 -0.5249 0.5635\nvn 0.6906 -0.5695 -0.4458\nvn -0.0944 -0.7363 -0.6701\nvn 0.9363 0.2208 0.2729\nvn 0.9628 0.1548 0.2215\nvn 0.9409 -0.0959 0.3249\nvn 0.2200 0.5646 -0.7955\nvn 0.8825 -0.3365 -0.3287\nvn 0.8472 -0.1884 -0.4967\nvn 0.7366 -0.1393 -0.6618\nvn 0.8033 0.1065 -0.5859\nvn 0.7477 -0.5078 -0.4279\nvn 0.8880 -0.1656 -0.4290\nvn 0.9254 0.1318 0.3554\nvn 0.4272 -0.8956 -0.1239\nvn 0.4717 -0.6516 0.5940\nvn 0.6677 -0.7430 -0.0461\nvn 0.1082 -0.7901 -0.6034\nvn 0.5348 -0.7755 0.3355\nvn 0.4960 -0.7270 -0.4749\nvn 0.9494 0.1842 0.2544\nvn 0.7590 -0.0996 -0.6434\nvn 0.1230 -0.1352 -0.9832\nvn 0.7215 -0.1998 -0.6629\nvn 0.4986 -0.8613 -0.0972\nvn 0.9428 0.2189 0.2516\nvn 0.8866 0.3468 0.3061\nvn 0.4153 0.8909 -0.1837\nvn 0.9296 0.3250 0.1739\nvn 0.0259 -0.7077 -0.7060\nvn -0.1529 -0.9723 0.1766\nvn 0.9473 -0.3139 -0.0645\nvn 0.9794 0.1452 0.1404\nvn 0.9461 -0.2022 -0.2530\nvn -0.3782 0.7540 0.5370\nvn 0.9926 -0.0718 0.0980\nvn 0.1013 -0.6481 0.7548\nvn 0.7650 -0.4437 -0.4668\nvn 0.5656 -0.8058 -0.1752\nvn 0.9753 0.1471 0.1648\nvn 0.7390 -0.6590 -0.1402\nvn 0.9491 0.0262 0.3139\nvn 0.9067 0.3493 0.2364\nvn 0.9198 0.2903 -0.2639\nvn 0.8378 0.4321 0.3339\nvn 0.9623 -0.0793 0.2600\nvn 0.8207 -0.2852 -0.4951\nvn 0.8603 -0.0790 -0.5036\nvn 0.9451 0.0088 0.3267\nvn -0.9750 -0.2203 0.0291\nvn 0.9766 0.1145 0.1820\nvn 0.8789 0.2752 -0.3897\nvn 0.1796 -0.9549 -0.2363\nvn 0.9653 0.2546 0.0586\nvn 0.9429 0.0563 0.3282\nvn 0.3859 0.6309 -0.6731\nvn 0.6746 -0.5325 0.5112\nvn 0.8758 -0.3838 0.2928\nvn 0.9157 0.0026 0.4018\nvn 0.6298 -0.5483 -0.5502\nvn 0.1456 -0.6514 -0.7446\nvn -0.1861 -0.3727 -0.9091\nvn 0.2902 -0.4286 0.8556\nvn 0.9783 0.1034 0.1794\nvn 0.9694 0.2051 0.1346\nvn 0.9830 0.1704 0.0677\nvn 0.7843 -0.5616 0.2637\nvn 0.8534 -0.4836 0.1946\nvn 0.9701 -0.0624 0.2345\nvn 0.1719 -0.8017 -0.5724\nvn 0.8338 -0.1774 -0.5228\nvn 0.9827 0.1467 0.1133\nvn 0.8996 0.4013 0.1720\nvn 0.9048 0.3947 0.1598\nvn 0.9373 0.3279 0.1184\nvn -0.2536 0.8281 -0.5000\nvn 0.6817 -0.5378 -0.4960\nvn 0.9792 0.1985 0.0415\nvn 0.8616 0.4326 0.2656\nvn 0.9776 0.1374 0.1596\nvn 0.9794 -0.0735 0.1880\nvn 0.9547 -0.1682 0.2454\nvn 0.9694 -0.2174 0.1141\nvn 0.9831 0.1436 0.1137\nvn 0.9519 0.2868 0.1080\nvn 0.9554 0.2836 0.0822\nvn 0.6817 -0.7298 0.0523\nvn 0.9967 -0.0608 0.0533\nvn 0.9111 0.4078 0.0603\nvn 0.9217 0.1070 0.3729\nvn 0.4905 -0.7889 -0.3702\nvn 0.8623 0.3539 0.3622\nvn 0.8348 0.4104 0.3670\nvn 0.9243 0.3137 0.2174\nvn 0.7974 0.5346 -0.2799\nvn 0.6410 -0.7561 0.1320\nvn 0.6335 -0.7609 0.1402\nvn 0.9365 -0.3085 0.1666\nvn 0.9659 -0.0690 0.2496\nvn 0.8727 0.4011 0.2786\nvn 0.9109 0.4042 -0.0832\nvn -0.9802 -0.1393 0.1405\nvn -0.3528 0.8100 0.4685\nvn -0.2115 0.9714 -0.1081\nvn -0.6294 -0.4174 -0.6555\nvn -0.1084 0.1008 -0.9890\nvn 0.9565 0.2482 0.1536\nvn 0.3325 0.1687 0.9279\nvn -0.9842 0.1232 0.1275\nvn 0.9780 0.0973 -0.1845\nvn 0.9770 -0.0797 0.1976\nvn 0.8365 -0.5443 0.0638\nvn -0.6223 0.7651 0.1657\nvn 0.0077 1.0000 0.0017\nvn -0.0645 0.9946 0.0811\nvn -0.2087 0.9717 -0.1108\nvn 0.8338 0.4571 0.3095\nvn 0.4655 0.7120 0.5258\nvn 0.7415 0.5614 0.3673\nvn -0.3684 0.9113 0.1840\nvn 0.2669 0.9563 0.1197\nvn 0.2656 0.8208 0.5057\nvn 0.8127 0.4249 0.3987\nvn 0.2269 0.9707 0.0793\nvn -0.3791 -0.8766 -0.2964\nvn -0.8381 -0.5437 -0.0458\nvn -0.3897 0.8602 0.3290\nvn -0.8064 -0.5643 0.1768\nvn -0.9667 0.1887 0.1730\nvn -0.1206 -0.7272 -0.6758\nvn 0.8272 0.5499 -0.1155\nvn 0.3868 0.3324 0.8602\nvn 0.5171 0.6944 0.5004\nvn 0.9757 -0.1777 -0.1285\nvn 0.0769 -0.2942 0.9527\nvn 0.8526 0.3619 0.3769\nvn -0.5989 0.6019 0.5282\nvn 0.6757 0.7372 0.0021\nvn 0.5770 0.7439 0.3371\nvn 0.3766 0.7496 0.5443\nvn 0.4847 0.8735 -0.0452\nvn -0.8109 0.0855 0.5789\nvn 0.4851 0.8733 -0.0449\nvn 0.4358 0.8690 0.2344\nvn 0.0923 0.8956 0.4351\nvn -0.1347 0.9245 0.3565\nvn -0.1625 0.9195 0.3580\nvn 0.4852 0.8024 -0.3473\nvn 0.1167 0.9676 0.2241\nvn -0.0295 0.8672 0.4972\nvn -0.2603 0.8340 0.4866\nvn 0.8263 0.5614 0.0441\nvn 0.1824 0.9821 -0.0471\nvn 0.0917 0.9757 0.1988\nvn 0.0660 0.9916 -0.1108\nvn -0.2296 0.8672 0.4419\nvn -0.0869 0.8431 0.5306\nvn -0.2740 0.8058 0.5249\nvn 0.0298 0.6701 0.7417\nvn -0.4799 0.8610 -0.1688\nvn -0.6489 -0.0550 0.7589\nvn -0.0342 0.9921 -0.1208\nvn -0.1036 0.9830 0.1518\nvn -0.2917 0.8901 0.3502\nvn 0.7899 0.3596 0.4968\nvn 0.8804 0.4696 0.0660\nvn -0.8931 0.3818 -0.2377\nvn -0.2660 0.9383 0.2212\nvn 0.4602 0.7518 0.4722\nvn 0.4228 0.5863 0.6910\nvn -0.3392 0.8677 0.3635\nvn -0.3581 0.9331 -0.0338\nvn -0.4245 0.9054 -0.0008\nvn 0.0842 0.9962 -0.0223\nvn 0.6509 0.6685 0.3598\nvn 0.7192 0.4394 0.5382\nvn 0.8163 0.5231 0.2450\nvn 0.9401 0.0900 0.3289\nvn -0.1065 0.9701 -0.2183\nvn -0.3312 0.7472 0.5761\nvn -0.1160 0.8782 0.4640\nvn -0.2925 0.9529 0.0804\nvn -0.5975 0.7152 -0.3626\nvn -0.9761 0.1423 -0.1645\nvn 0.0674 0.9977 -0.0093\nvn -0.0325 0.7298 0.6828\nvn 0.2663 0.9636 0.0242\nvn 0.7235 0.6842 0.0919\nvn -0.7733 0.5731 -0.2712\nvn -0.8238 -0.5668 -0.0086\nvn -0.1205 0.9571 -0.2636\nvn 0.6581 0.7459 -0.1031\nvn 0.8991 0.4050 0.1659\nvn 0.8703 0.4060 0.2789\nvn 0.7954 0.5799 -0.1762\nvn 0.8690 0.3686 0.3301\nvn 0.3456 0.9310 -0.1178\nvn 0.3731 -0.8487 -0.3749\nvn -0.9892 0.1427 0.0319\nvn 0.9877 0.1440 0.0604\nvn -0.0772 0.9780 -0.1936\nvn 0.7399 0.5211 0.4254\nvn 0.7056 0.6480 0.2867\nvn 0.9670 0.2535 -0.0256\nvn -0.9976 0.0490 -0.0494\nvn 0.7062 0.6052 0.3674\nvn -0.6107 -0.7728 0.1726\nvn 0.5935 0.6913 0.4121\nvn -0.0384 -0.4831 0.8747\nvn 0.1216 0.9575 0.2614\nvn -0.1185 0.9926 0.0283\nvn 0.0266 0.9960 -0.0859\nvn 0.9735 0.2185 -0.0670\nvn 0.8533 0.5205 -0.0316\nvn 0.0964 0.7226 0.6845\nvn 0.1991 0.9765 0.0827\nvn 0.3843 0.7511 0.5368\nvn 0.7057 0.6357 -0.3127\nvn 0.8519 0.4654 0.2403\nvn 0.1708 0.9853 0.0062\nvn 0.1034 -0.9260 -0.3630\nvn -0.3051 0.8045 0.5096\nvn -0.6971 0.6957 0.1733\nvn 0.2469 0.9548 -0.1653\nvn 0.4932 0.8169 0.2990\nvn 0.3438 0.9365 -0.0697\nvn -0.9592 -0.0690 -0.2741\nvn 0.1871 0.9673 0.1714\nvn -0.3911 0.3955 -0.8311\nvn -0.6635 0.3122 -0.6800\nvn -0.1926 -0.7832 -0.5912\nvn -0.9916 -0.1087 -0.0699\nvn 0.2914 0.9530 -0.0828\nvn 0.3834 0.9031 -0.1934\nvn 0.1566 0.9394 0.3049\nvn 0.7418 0.5161 0.4282\nvn 0.8468 0.4631 0.2615\nvn 0.4142 0.8733 -0.2566\nvn -0.7491 0.5640 0.3477\nvn 0.0111 0.8545 0.5193\nvn 0.2133 0.9189 0.3319\nvn 0.2631 0.8798 0.3958\nvn 0.3287 0.8775 0.3492\nvn 0.3541 0.9343 -0.0414\nvn 0.4819 0.8317 0.2757\nvn -0.1508 0.9885 0.0088\nvn -0.8844 -0.3349 0.3252\nvn -0.2199 0.7161 0.6625\nvn -0.0654 0.8369 0.5435\nvn -0.8897 -0.4549 0.0400\nvn 0.1851 0.9736 0.1332\nvn 0.4643 0.8842 0.0516\nvn 0.4014 0.5261 0.7498\nvn -0.0017 0.9693 0.2460\nvn 0.9515 0.2872 0.1099\nvn 0.2006 0.8481 0.4904\nvn -0.0056 0.9312 0.3644\nvn -0.9863 0.1632 0.0257\nvn -0.3939 0.8228 0.4097\nvn -0.1300 0.8394 0.5278\nvn 0.1752 -0.8318 -0.5267\nvn -0.3497 0.8988 -0.2644\nvn -0.3410 0.9139 -0.2201\nvn 0.8659 0.4644 0.1859\nvn 0.0340 0.7499 0.6606\nvn 0.9136 0.3939 0.1011\nvn -0.8031 0.5641 0.1921\nvn -0.3019 0.9429 -0.1409\nvn -0.3441 0.9151 -0.2100\nvn 0.6264 0.6580 0.4179\nvn -0.1755 0.6113 0.7717\nvn -0.4924 0.8517 0.1793\nvn -0.1634 0.8334 0.5280\nvn 0.7225 0.6883 0.0655\nvn -0.9685 0.0957 0.2300\nvn 0.8432 0.4700 0.2611\nvn -0.1720 0.9716 0.1624\nvn -0.0030 0.9644 0.2643\nvn -0.1747 0.9844 -0.0206\nvn 0.8527 0.5126 0.1005\nvn 0.2248 0.9733 0.0471\nvn -0.9417 0.2435 0.2323\nvn -0.1527 0.8822 0.4453\nvn -0.3243 0.8340 0.4464\nvn -0.4833 0.7830 0.3916\nvn 0.0381 0.9002 0.4338\nvn -0.2011 0.8108 0.5497\nvn -0.4257 0.8071 0.4092\nvn -0.3512 0.7743 0.5264\nvn 0.2055 0.7410 0.6392\nvn 0.2000 0.9671 0.1572\nvn 0.9119 -0.2338 -0.3373\nvn -0.0170 0.8562 0.5164\nvn -0.4521 0.8606 0.2344\nvn 0.6117 0.7381 0.2846\nvn 0.1357 0.9908 0.0018\nvn 0.0698 0.9299 0.3612\nvn 0.8020 0.5746 -0.1634\nvn -0.5312 0.1908 -0.8255\nvn 0.5546 -0.7987 -0.2336\nvn 0.3696 0.8931 0.2565\nvn 0.1273 0.6848 0.7176\nvn -0.0073 0.9998 -0.0188\nvn -0.0848 0.9902 0.1106\nvn 0.1497 0.9766 0.1546\nvn 0.8201 0.4595 0.3411\nvn 0.1476 0.9884 0.0348\nvn 0.3635 0.9311 -0.0311\nvn 0.1831 0.9739 -0.1341\nvn 0.3782 0.9032 -0.2030\nvn -0.6283 0.2550 -0.7349\nvn 0.0309 0.9995 0.0049\nvn 0.1155 0.9821 0.1486\nvn 0.1398 0.8729 0.4673\nvn 0.0513 0.9756 0.2135\nvn -0.5742 0.8187 -0.0058\nvn 0.7370 0.5625 0.3746\nvn 0.3250 0.9174 0.2298\nvn 0.1699 0.9438 0.2834\nvn 0.6316 0.5012 0.5915\nvn 0.9968 0.0696 0.0392\nvn -0.5484 0.7242 0.4182\nvn 0.6618 0.6505 0.3727\nvn -0.8990 -0.3802 0.2175\nvn 0.2036 0.9753 0.0860\nvn 0.3557 0.9106 0.2103\nvn 0.7943 -0.1443 0.5902\nvn 0.8213 0.0765 0.5654\nvn -0.4436 0.8556 -0.2667\nvn 0.2317 0.9212 0.3126\nvn 0.1218 0.8671 0.4831\nvn 0.2385 0.9671 -0.0886\nvn -0.9358 -0.0528 0.3485\nvn -0.9159 -0.3967 -0.0610\nvn -0.9656 -0.0576 0.2537\nvn 0.8186 0.4973 0.2873\nvn -0.3497 0.8729 0.3403\nvn -0.1457 0.8380 0.5259\nvn 0.9613 -0.2494 -0.1168\nvn 0.2005 0.9022 0.3819\nvn -0.0038 0.9412 0.3379\nvn -0.2076 0.1142 -0.9715\nvn 0.8415 0.3777 0.3863\nvn -0.3287 0.8427 0.4263\nvn 0.6102 0.6450 0.4601\nvn -0.8634 -0.1576 -0.4792\nvn -0.3172 -0.9118 -0.2609\nvn 0.0270 0.9981 -0.0561\nvn -0.6831 0.6348 0.3612\nvn 0.3177 0.9355 -0.1548\nvn 0.4836 0.8462 -0.2239\nvn -0.3298 0.8287 0.4522\nvn 0.5679 -0.1869 -0.8016\nvn -0.0611 0.9087 0.4129\nvn 0.4655 -0.8846 -0.0285\nvn 0.8318 0.1717 0.5278\nvn 0.1642 0.8303 0.5326\nvn 0.2061 0.6866 0.6972\nvn 0.8539 0.5101 0.1034\nvn 0.8153 0.5046 0.2842\nvn 0.1583 0.9827 -0.0966\nvn -0.2696 0.7951 0.5433\nvn 0.1504 0.7565 0.6365\nvn 0.0049 0.9648 0.2629\nvn -0.3870 0.8878 0.2491\nvn -0.3211 0.9343 0.1551\nvn 0.3285 0.8362 0.4391\nvn 0.2832 0.1185 0.9517\nvn -0.2150 0.8665 0.4505\nvn 0.4051 0.1034 0.9084\nvn 0.4375 -0.8654 -0.2442\nvn 0.6474 0.7416 0.1758\nvn 0.4237 0.8204 0.3840\nvn 0.8213 0.5617 -0.1000\nvn 0.4267 0.8832 -0.1947\nvn -0.0678 0.9943 0.0824\nvn -0.9810 0.0554 -0.1859\nvn -0.4569 0.7894 0.4100\nvn -0.1003 0.9823 0.1582\nvn 0.0538 0.9986 -0.0010\nvn -0.4057 0.7901 0.4594\nvn 0.0577 0.9983 -0.0047\nvn -0.7481 0.5872 0.3092\nvn -0.8017 0.5231 0.2893\nvn 0.8559 0.1951 0.4789\nvn 0.8153 0.5649 0.1274\nvn 0.8280 0.5517 0.1005\nvn -0.5883 0.7617 -0.2715\nvn -0.4030 0.8524 -0.3331\nvn -0.0285 0.9936 -0.1091\nvn 0.7311 0.5644 0.3834\nvn 0.7056 0.5567 0.4384\nvn -0.2475 0.8991 0.3612\nvn 0.8989 0.2424 0.3649\nvn 0.9208 0.2080 0.3301\nvn 0.8722 0.3580 0.3335\nvn 0.8001 0.5751 -0.1708\nvn 0.0578 0.9983 -0.0100\nvn 0.5230 0.7312 0.4378\nvn 0.0105 0.9952 -0.0973\nvn 0.1348 0.9444 0.2998\nvn -0.4560 0.8885 -0.0506\nvn -0.1246 0.9462 0.2988\nvn 0.4609 0.8768 0.1375\nvn -0.8839 -0.4122 0.2208\nvn -0.9942 0.1020 -0.0352\nvn -0.2395 0.9292 0.2815\nvn -0.4474 0.8930 0.0486\nvn 0.3818 0.8412 0.3829\nvn 0.2789 0.5613 0.7792\nvn 0.6223 0.6082 0.4928\nvn 0.6771 0.6851 0.2687\nvn 0.6538 0.3933 0.6465\nvn -0.4528 0.8818 -0.1319\nvn -0.0398 0.9711 -0.2354\nvn -0.1593 0.8583 0.4878\nvn 0.8773 0.3747 0.2999\nvn -0.0314 0.9894 -0.1421\nvn -0.4313 0.9020 0.0202\nvn 0.0593 0.9093 0.4120\nvn -0.0160 0.8578 0.5137\nvn -0.4143 -0.5028 -0.7586\nvn -0.9208 -0.3801 -0.0872\nvn 0.5602 0.5821 0.5894\nvn 0.8042 0.5928 -0.0427\nvn 0.8051 0.5929 0.0171\nvn 0.7567 0.6458 0.1017\nvn 0.9051 0.3534 0.2365\nvn 0.0790 0.9880 0.1329\nvn 0.1119 0.9848 0.1329\nvn -0.3913 0.2132 0.8952\nvn 0.2280 0.8477 0.4790\nvn -0.5664 0.7532 -0.3343\nvn 0.2483 0.8521 0.4607\nvn -0.4768 -0.4019 -0.7818\nvn 0.8068 0.5906 0.0149\nvn 0.7068 0.6821 0.1877\nvn -0.0457 0.9988 -0.0175\nvn 0.6918 0.6016 0.3994\nvn -0.9203 0.1930 -0.3404\nvn -0.1293 0.8298 0.5429\nvn 0.8150 0.5592 0.1519\nvn 0.8154 0.5146 -0.2651\nvn 0.7420 0.6694 0.0373\nvn -0.3576 0.8650 0.3519\nvn 0.1843 0.9824 0.0301\nvn 0.4064 0.8887 0.2124\nvn 0.1954 0.7654 0.6132\nvn 0.0835 0.9738 0.2117\nvn 0.4395 0.8259 0.3532\nvn 0.5463 0.6863 0.4802\nvn 0.4519 0.7152 0.5331\nvn -0.2584 -0.9218 -0.2890\nvn 0.1939 0.9804 -0.0350\nvn -0.1803 0.9770 0.1137\nvn 0.5698 0.7840 0.2465\nvn -0.3434 0.9354 -0.0845\nvn 0.1506 0.8823 0.4459\nvn 0.7565 0.6471 -0.0943\nvn 0.7092 0.7046 0.0248\nvn 0.7118 0.7019 0.0248\nvn 0.6307 0.7536 0.1854\nvn -0.7559 -0.1324 0.6411\nvn -0.4056 0.7815 0.4741\nvn 0.1647 0.7744 0.6109\nvn -0.0691 0.9128 0.4025\nvn -0.0088 0.9653 0.2609\nvn 0.5255 -0.7057 0.4751\nvn 0.8088 0.5242 -0.2667\nvn 0.7635 0.6411 -0.0776\nvn 0.6096 0.7630 0.2150\nvn 0.7546 0.5879 0.2915\nvn 0.3495 0.4415 0.8264\nvn 0.2864 0.0983 -0.9530\nvn 0.6469 0.7579 0.0846\nvn 0.6071 0.6136 0.5048\nvn 0.6456 0.6707 0.3652\nvn 0.1689 0.9814 -0.0912\nvn 0.2650 0.9212 0.2849\nvn 0.3258 0.4664 0.8224\nvn -0.3360 0.7618 -0.5538\nvn -0.2395 0.9513 -0.1942\nvn 0.0390 0.5847 0.8103\nvn 0.6579 0.7391 0.1446\nvn -0.2002 0.7626 0.6151\nvn -0.1311 0.7536 0.6441\nvn 0.8967 0.3735 0.2374\nvn 0.4598 0.8684 -0.1857\nvn 0.7964 0.5533 0.2439\nvn 0.3125 0.0040 0.9499\nvn 0.2216 0.9662 0.1316\nvn -0.3516 0.8102 0.4690\nvn 0.0914 0.7062 0.7021\nvn -0.0345 0.9755 0.2172\nvn 0.6556 0.7398 0.1513\nvn 0.3787 0.8941 0.2391\nvn 0.8694 0.3508 0.3479\nvn -0.3401 -0.6121 -0.7139\nvn 0.2088 0.9457 0.2490\nvn 0.7732 0.5403 -0.3322\nvn -0.8617 -0.3290 0.3864\nvn 0.3079 -0.0567 0.9497\nvn 0.3174 0.7792 0.5404\nvn 0.8146 0.5560 0.1652\nvn -0.9100 0.0393 -0.4128\nvn 0.6557 0.7394 -0.1527\nvn 0.6403 0.7674 -0.0345\nvn 0.6136 0.7607 0.2120\nvn 0.5298 0.7674 0.3611\nvn 0.4068 0.7090 0.5761\nvn -0.6125 0.7877 0.0657\nvn 0.0056 -0.9665 0.2567\nvn 0.1689 0.9039 0.3930\nvn 0.1577 0.6826 0.7136\nvn -0.8869 -0.2685 -0.3758\nvn 0.1579 -0.8883 -0.4314\nvn 0.6220 0.7823 -0.0325\nvn 0.9964 0.0702 0.0479\nvn 0.6269 0.5813 0.5188\nvn -0.0211 0.8164 0.5771\nvn 0.1446 0.9297 0.3387\nvn -0.2073 0.9193 0.3345\nvn 0.8723 -0.4886 -0.0212\nvn -0.9258 -0.1218 -0.3578\nvn 0.5852 0.7682 -0.2598\nvn 0.2978 0.8404 0.4527\nvn 0.0883 0.7713 0.6303\nvn 0.0296 0.8502 0.5256\nvn -0.4884 -0.1785 0.8542\nvn -0.0706 0.8384 0.5405\nvn -0.8399 -0.3184 -0.4396\nvn 0.5926 0.8052 0.0218\nvn 0.3324 0.8532 0.4018\nvn 0.0989 0.8334 0.5438\nvn 0.5659 0.6001 0.5654\nvn -0.0135 0.7171 0.6968\nvn -0.0085 -0.7091 -0.7050\nvn -0.4085 0.8814 0.2372\nvn 0.2976 0.8794 0.3716\nvn 0.0787 0.9903 0.1143\nvn 0.1852 0.9701 0.1569\nvn -0.1071 0.9538 0.2806\nvn 0.4232 -0.6999 -0.5754\nvn -0.1584 0.9173 0.3654\nvn 0.2112 0.8810 0.4233\nvn -0.5512 0.8223 0.1412\nvn 0.6238 0.7394 -0.2533\nvn 0.5491 0.8252 -0.1323\nvn 0.5129 0.8579 0.0310\nvn 0.4361 0.8959 0.0847\nvn 0.2739 0.9159 0.2934\nvn -0.2481 0.9657 -0.0768\nvn 0.6705 -0.1382 0.7289\nvn -0.0306 0.8687 0.4944\nvn -0.1906 0.7901 0.5826\nvn -0.2585 0.8445 0.4691\nvn -0.7503 0.6611 -0.0038\nvn -0.8817 0.0034 0.4718\nvn 0.5962 0.6971 0.3983\nvn 0.3295 0.5207 0.7876\nvn -0.9230 0.1794 -0.3404\nvn 0.4355 0.8889 0.1426\nvn 0.4829 0.6546 0.5817\nvn 0.4620 0.6396 0.6144\nvn 0.5002 0.8341 -0.2325\nvn 0.0206 0.9724 0.2322\nvn -0.9818 -0.1440 -0.1235\nvn 0.5065 0.7716 0.3849\nvn -0.4739 0.8105 0.3443\nvn -0.0302 0.9584 0.2840\nvn -0.7067 0.6682 -0.2326\nvn 0.7356 0.5661 0.3720\nvn -0.9145 0.3594 0.1860\nvn -0.7569 -0.0939 -0.6467\nvn -0.8213 -0.0454 -0.5687\nvn 0.5431 0.7586 -0.3600\nvn 0.5116 0.8264 0.2351\nvn 0.4618 0.7748 0.4317\nvn 0.4500 0.7285 0.5165\nvn -0.2508 0.7319 0.6335\nvn 0.8375 0.4771 0.2664\nvn 0.5804 0.7737 0.2540\nvn -0.8739 0.2423 -0.4214\nvn -0.7500 -0.0586 -0.6589\nvn 0.1044 -0.9942 0.0271\nvn 0.5087 0.8468 -0.1553\nvn 0.5249 0.8407 -0.1331\nvn 0.4586 0.8868 -0.0564\nvn 0.4822 0.8618 0.1574\nvn 0.4437 0.8740 0.1980\nvn 0.2422 0.6928 0.6792\nvn -0.5041 0.8567 0.1091\nvn -0.7936 -0.5455 0.2694\nvn 0.8064 0.5501 0.2172\nvn 0.7062 0.3921 0.5895\nvn -0.2047 0.8557 0.4752\nvn -0.2475 0.7990 0.5481\nvn -0.4397 0.8450 0.3044\nvn 0.0031 0.0423 -0.9991\nvn 0.7720 -0.5134 -0.3748\nvn 0.4647 0.8853 -0.0186\nvn -0.0965 0.7711 0.6293\nvn 0.3824 -0.9115 -0.1515\nvn -0.4019 0.8482 0.3450\nvn 0.7976 0.5333 0.2817\nvn 0.1155 0.8914 0.4383\nvn 0.2148 0.8852 0.4126\nvn -0.1385 0.6148 0.7764\nvn -0.2036 0.8143 0.5436\nvn -0.7656 -0.0185 -0.6430\nvn -0.7321 0.5573 -0.3918\nvn 0.5670 0.2811 -0.7743\nvn 0.4037 0.9143 0.0328\nvn 0.2528 0.9035 0.3460\nvn 0.2650 0.9033 0.3374\nvn 0.1325 0.7795 0.6123\nvn 0.6591 -0.6943 -0.2891\nvn -0.2618 0.8645 0.4291\nvn -0.4983 0.1856 0.8469\nvn -0.1097 0.9650 0.2381\nvn 0.1927 0.6807 0.7067\nvn -0.4019 0.7864 0.4692\nvn -0.4062 -0.0908 -0.9093\nvn -0.8021 -0.5961 -0.0346\nvn 0.0969 0.2275 -0.9690\nvn -0.2852 -0.2407 -0.9278\nvn 0.1728 0.8274 0.5343\nvn 0.0067 -0.6672 -0.7449\nvn -0.7610 -0.6296 0.1567\nvn 0.2427 0.8141 0.5275\nvn -0.2154 0.6811 0.6998\nvn -0.0687 0.6186 0.7827\nvn -0.8492 -0.5230 0.0727\nvn -0.8488 -0.5238 0.0722\nvn 0.4232 0.9028 -0.0769\nvn -0.8342 -0.0223 0.5510\nvn -0.4702 0.8039 0.3642\nvn -0.5309 -0.2530 0.8088\nvn -0.8523 -0.1025 0.5130\nvn -0.4273 0.5238 0.7369\nvn -0.2212 0.9319 0.2875\nvn -0.7858 0.4534 0.4207\nvn -0.6074 0.6756 0.4178\nvn 0.3368 0.6182 0.7102\nvn -0.2270 -0.0314 0.9734\nvn -0.6429 0.7481 0.1641\nvn -0.5010 0.0864 0.8611\nvn -0.7550 0.5775 0.3104\nvn -0.2147 0.0732 0.9739\nvn 0.0533 0.4343 0.8992\nvn -0.5135 -0.0639 -0.8557\nvn 0.1973 -0.8324 -0.5178\nvn -0.8924 0.2563 0.3714\nvn -0.6315 0.3999 0.6643\nvn -0.8412 -0.0357 0.5396\nvn 0.0354 0.7521 0.6582\nvn -0.4440 0.7413 0.5034\nvn -0.6565 -0.0497 0.7527\nvn -0.1376 0.2155 0.9668\nvn 0.7950 -0.4735 -0.3792\nvn -0.8448 0.3175 0.4307\nvn -0.7984 -0.0844 0.5962\nvn -0.4132 -0.0009 -0.9106\nvn 0.1661 -0.9453 -0.2809\nvn -0.5123 -0.0698 0.8560\nvn -0.1449 -0.5872 -0.7964\nvn 0.2868 -0.7426 -0.6053\nvn -0.5605 -0.0698 -0.8252\nvn -0.7171 0.5763 0.3920\nvn -0.3578 0.3245 0.8756\nvn -0.1589 -0.7876 -0.5953\nvn -0.1989 -0.7442 -0.6376\nvn -0.5385 0.6506 0.5355\nvn -0.7258 0.5044 0.4678\nvn 0.0824 0.2705 0.9592\nvn -0.7888 0.0592 0.6118\nvn -0.5851 0.7973 -0.1480\nvn -0.8765 -0.1379 0.4613\nvn -0.7486 -0.4686 0.4690\nvn -0.2704 0.9416 0.2005\nvn -0.8635 -0.5040 0.0178\nvn -0.7351 -0.1737 0.6554\nvn -0.2337 0.3639 -0.9016\nvn -0.8310 -0.4048 0.3815\nvn -0.3873 0.9131 -0.1273\nvn -0.5713 0.6340 0.5212\nvn 0.1640 -0.3196 0.9333\nvn 0.2333 -0.8912 -0.3890\nvn -0.8196 -0.1173 0.5608\nvn -0.1586 0.9171 0.3656\nvn -0.5054 0.8495 0.1513\nvn -0.6863 0.6518 0.3226\nvn -0.2032 -0.4326 -0.8784\nvn 0.3401 0.2916 0.8941\nvn 0.7252 -0.6161 -0.3074\nvn -0.4891 -0.0960 0.8669\nvn -0.3941 -0.0943 -0.9142\nvn -0.6928 0.6524 0.3072\nvn -0.4889 0.3086 0.8159\nvn -0.5543 -0.1791 -0.8128\nvn -0.1915 -0.1116 0.9751\nvn -0.4562 -0.0359 0.8891\nvn -0.7605 -0.1903 0.6208\nvn -0.5615 0.4926 0.6649\nvn -0.2356 -0.8687 0.4357\nvn 0.5643 -0.7187 -0.4063\nvn -0.5785 0.4856 -0.6553\nvn -0.6369 0.4207 0.6460\nvn -0.8324 -0.0224 0.5537\nvn -0.7838 0.4496 0.4284\nvn -0.8238 0.5372 0.1811\nvn -0.5001 0.0455 0.8647\nvn -0.5323 0.5649 0.6306\nvn -0.7437 0.4566 0.4883\nvn -0.8951 -0.2175 0.3893\nvn -0.5661 0.8146 0.1264\nvn -0.5151 0.7296 0.4498\nvn -0.7878 0.1013 0.6076\nvn -0.7654 -0.1859 0.6161\nvn 0.0578 -0.9977 0.0366\nvn -0.9121 0.2980 0.2816\nvn -0.6358 0.6495 0.4170\nvn -0.6366 0.7065 0.3091\nvn -0.7961 -0.3301 0.5072\nvn 0.4036 0.2088 0.8908\nvn -0.3928 0.5802 0.7135\nvn -0.8051 0.4404 0.3974\nvn -0.2897 -0.3519 -0.8901\nvn -0.7255 0.4615 0.5105\nvn -0.5286 -0.2212 0.8196\nvn -0.4313 -0.3702 0.8227\nvn -0.9190 0.3436 0.1935\nvn 0.7618 -0.6066 -0.2272\nvn 0.5241 -0.8507 -0.0415\nvn -0.5587 0.2842 0.7792\nvn -0.5492 0.3436 0.7618\nvn -0.5961 0.6789 0.4286\nvn -0.8739 0.1607 0.4588\nvn -0.2011 0.8500 0.4869\nvn -0.7258 0.4618 0.5099\nvn -0.5395 -0.5440 0.6427\nvn 0.8557 -0.4794 -0.1947\nvn -0.4817 0.6291 0.6101\nvn -0.8778 -0.0589 0.4754\nvn -0.6613 -0.2594 0.7038\nvn -0.8306 -0.2746 0.4845\nvn -0.8116 -0.0946 0.5765\nvn -0.6125 0.6955 0.3757\nvn -0.9713 -0.2328 0.0495\nvn 0.1633 -0.8394 -0.5184\nvn 0.0809 -0.9924 -0.0926\nvn -0.7981 0.3900 0.4593\nvn -0.4013 0.8174 0.4133\nvn -0.5213 -0.0882 -0.8488\nvn -0.6309 -0.3577 0.6885\nvn -0.2961 0.7205 0.6270\nvn 0.6258 -0.6952 0.3536\nvn 0.7612 -0.2110 -0.6132\nvn -0.5703 -0.7415 0.3534\nvn -0.8902 -0.4497 -0.0726\nvn -0.5225 -0.7861 0.3302\nvn -0.0408 -0.9400 0.3386\nvn 0.1900 -0.9055 -0.3794\nvn -0.6876 0.2172 -0.6929\nvn -0.8535 -0.2277 0.4688\nvn 0.1434 -0.8598 -0.4901\nvn -0.7458 0.4213 0.5160\nvn -0.7806 -0.1989 0.5925\nvn 0.1816 -0.1328 -0.9744\nvn -0.7655 -0.4309 0.4777\nvn -0.4544 0.8086 0.3737\nvn -0.7416 -0.1890 0.6437\nvn -0.5946 0.6514 0.4712\nvn -0.5106 -0.4413 0.7380\nvn -0.9051 -0.2333 0.3554\nvn 0.5483 -0.1182 0.8279\nvn -0.9486 0.2563 0.1857\nvn -0.6750 0.6436 0.3608\nvn -0.6746 -0.2909 0.6785\nvn 0.4001 -0.9163 0.0176\nvn -0.9237 -0.0262 0.3822\nvn 0.4073 0.0945 0.9084\nvn -0.4895 -0.1113 0.8649\nvn -0.8457 -0.5197 -0.1209\nvn -0.4508 0.8163 0.3612\nvn -0.5503 0.0665 -0.8323\nvn -0.5769 -0.2732 0.7698\nvn -0.5993 0.6940 0.3990\nvn 0.6691 -0.6821 0.2951\nvn 0.4860 -0.8577 -0.1679\nvn -0.4672 0.0567 0.8823\nvn -0.4051 -0.7437 0.5319\nvn -0.9084 0.2921 -0.2992\nvn -0.6972 -0.0946 0.7106\nvn -0.6494 0.4079 0.6418\nvn -0.5390 0.2691 0.7982\nvn -0.4951 0.6605 0.5644\nvn 0.0427 0.6679 0.7430\nvn -0.5884 0.0653 0.8059\nvn 0.1331 -0.7008 -0.7009\nvn -0.4746 0.6143 0.6304\nvn -0.1910 -0.9242 -0.3307\nvn 0.0788 -0.0046 0.9969\nvn -0.3064 0.1553 0.9392\nvn -0.6723 -0.1737 0.7196\nvn 0.4351 0.1811 0.8820\nvn -0.8613 -0.2401 0.4478\nvn -0.6597 -0.1414 0.7381\nvn -0.2208 0.9193 0.3257\nvn -0.4595 0.3149 0.8305\nvn -0.8443 0.0439 0.5340\nvn -0.3403 0.1278 0.9316\nvn -0.4304 -0.4799 0.7645\nvn -0.2723 -0.8642 0.4231\nvn -0.7390 0.3762 0.5589\nvn -0.3687 0.7836 0.5001\nvn -0.5147 -0.2289 0.8262\nvn -0.9886 0.1504 -0.0052\nvn 0.0762 -0.7777 -0.6241\nvn -0.8113 0.0034 0.5846\nvn -0.1950 0.0535 0.9793\nvn 0.1993 0.1344 -0.9707\nvn 0.4671 -0.6509 0.5985\nvn -0.4451 0.8180 0.3644\nvn -0.6163 0.1472 0.7736\nvn -0.6688 -0.0490 0.7418\nvn -0.1816 -0.8793 0.4403\nvn -0.8043 -0.3372 0.4892\nvn -0.1752 0.9143 0.3652\nvn -0.8372 -0.2646 0.4786\nvn -0.2845 0.9557 -0.0760\nvn -0.5302 -0.3992 0.7480\nvn -0.8374 -0.2632 0.4790\nvn -0.1151 0.0456 0.9923\nvn -0.6022 -0.1935 0.7746\nvn -0.4866 0.1631 -0.8583\nvn -0.3962 -0.1569 -0.9047\nvn 0.0966 -0.0789 0.9922\nvn -0.4811 -0.2622 -0.8365\nvn -0.3500 -0.8638 0.3623\nvn -0.4968 -0.7174 0.4883\nvn -0.4327 -0.8866 0.1634\nvn -0.3574 0.1190 -0.9264\nvn 0.5557 -0.6525 -0.5153\nvn -0.4323 -0.8138 0.3883\nvn -0.4880 -0.1599 0.8580\nvn 0.2329 0.0330 0.9719\nvn -0.8961 0.4202 -0.1430\nvn -0.8041 -0.5187 -0.2906\nvn -0.4007 -0.5537 -0.7300\nvn -0.6698 0.6216 0.4062\nvn -0.3272 0.3949 -0.8585\nvn -0.6195 0.1885 0.7620\nvn -0.5830 0.5017 0.6391\nvn -0.4742 0.6604 0.5823\nvn -0.5598 -0.2650 0.7851\nvn -0.3573 -0.3013 0.8841\nvn -0.4870 -0.4884 0.7241\nvn -0.7689 0.4410 0.4629\nvn -0.5974 0.4482 0.6650\nvn -0.5021 -0.1293 0.8551\nvn -0.9171 0.3916 -0.0743\nvn -0.5891 0.7031 0.3982\nvn -0.3244 -0.8380 -0.4387\nvn -0.4809 -0.7576 0.4413\nvn 0.0116 -0.9999 -0.0100\nvn -0.3527 -0.5773 0.7364\nvn 0.1123 0.6940 0.7112\nvn 0.1296 0.2197 -0.9669\nvn -0.6235 -0.1934 -0.7575\nvn -0.0829 -0.5273 -0.8456\nvn 0.0502 -0.8457 0.5314\nvn 0.0861 -0.4690 -0.8790\nvn -0.3732 0.8556 0.3587\nvn -0.8580 0.1480 0.4919\nvn 0.0430 0.1869 -0.9814\nvn -0.3656 -0.4356 0.8226\nvn -0.9864 0.1514 0.0641\nvn -0.8449 0.4781 0.2399\nvn -0.7765 0.5276 -0.3445\nvn -0.8944 0.3687 0.2532\nvn -0.8693 0.4941 0.0140\nvn -0.8640 0.1603 0.4773\nvn -0.2328 0.9287 0.2888\nvn -0.6546 0.1200 0.7464\nvn -0.9386 0.1377 -0.3162\nvn 0.0812 -0.3851 0.9193\nvn -0.8512 0.2076 0.4821\nvn -0.1071 -0.5309 -0.8407\nvn -0.2384 0.2048 0.9493\nvn -0.6994 -0.4688 0.5395\nvn -0.6224 0.2268 0.7491\nvn -0.3998 0.8759 -0.2701\nvn -0.6428 0.2770 -0.7142\nvn -0.8510 -0.2819 0.4431\nvn -0.9156 0.3389 0.2163\nvn -0.7244 -0.1451 0.6740\nvn -0.9950 -0.0140 -0.0992\nvn -0.8081 0.2313 -0.5417\nvn -0.8223 0.2782 0.4965\nvn -0.8429 -0.2981 0.4479\nvn -0.6514 -0.3113 -0.6919\nvn 0.1044 -0.1160 -0.9877\nvn -0.5864 0.0605 0.8077\nvn -0.5075 0.5179 0.6887\nvn 0.6853 -0.5234 -0.5064\nvn -0.2710 -0.8639 0.4246\nvn -0.3079 -0.8167 0.4880\nvn -0.3910 0.7269 0.5645\nvn -0.4479 -0.2673 0.8532\nvn -0.8363 -0.0551 0.5454\nvn 0.1035 -0.1057 -0.9890\nvn -0.4785 0.3371 0.8108\nvn -0.7783 -0.4163 0.4700\nvn -0.5257 -0.0765 0.8473\nvn -0.9056 0.3377 0.2566\nvn -0.8271 0.5382 -0.1622\nvn -0.8574 0.5044 0.1020\nvn -0.8956 0.4210 -0.1433\nvn -0.5968 0.3336 -0.7298\nvn -0.0916 0.0476 -0.9947\nvn -0.4704 0.4447 0.7622\nvn 0.0079 -0.9997 0.0240\nvn -0.6230 0.7765 0.0943\nvn -0.7309 0.2361 0.6403\nvn -0.5890 -0.5654 -0.5773\nvn 0.0761 0.7056 0.7045\nvn -0.9301 0.1556 -0.3326\nvn -0.5383 0.4272 0.7265\nvn -0.5669 0.4217 0.7076\nvn -0.6266 0.0885 0.7743\nvn -0.6631 0.3093 0.6816\nvn 0.1953 -0.9003 -0.3889\nvn 0.0614 -0.9968 0.0510\nvn -0.1150 -0.6689 0.7344\nvn 0.1562 -0.4580 -0.8751\nvn -0.4196 -0.3163 0.8508\nvn -0.2739 0.2450 -0.9300\nvn -0.1262 -0.0566 0.9904\nvn -0.3587 -0.2627 -0.8957\nvn -0.6095 -0.2451 0.7539\nvn 0.7546 0.4269 0.4984\nvn -0.9103 0.2326 0.3425\nvn -0.4003 0.2795 -0.8727\nvn -0.5393 -0.4171 0.7316\nvn -0.0467 0.8209 -0.5692\nvn -0.9720 0.0847 -0.2191\nvn -0.8382 -0.4174 -0.3511\nvn -0.2632 -0.2957 -0.9183\nvn -0.7634 0.3085 0.5676\nvn 0.1282 -0.3912 -0.9113\nvn -0.8589 -0.4860 0.1617\nvn -0.6264 0.5306 0.5710\nvn -0.5847 0.6322 0.5084\nvn -0.5186 0.8484 0.1062\nvn -0.0407 0.0255 -0.9988\nvn -0.5264 -0.7444 0.4109\nvn -0.5773 0.5428 0.6100\nvn -0.9113 -0.0104 0.4116\nvn -0.7852 0.0986 0.6114\nvn -0.9117 0.4045 0.0719\nvn 0.4689 -0.8832 -0.0128\nvn -0.7269 0.4368 0.5300\nvn -0.2077 0.7238 0.6580\nvn -0.9510 0.1581 -0.2656\nvn -0.9670 0.1293 0.2195\nvn -0.4589 0.7208 0.5194\nvn -0.2843 0.8987 0.3338\nvn -0.3551 0.6832 0.6381\nvn -0.7979 -0.3403 0.4975\nvn -0.7673 -0.3885 0.5102\nvn -0.7204 0.1412 0.6790\nvn -0.4352 0.8240 0.3629\nvn -0.8365 -0.2998 0.4587\nvn -0.8627 0.0426 0.5039\nvn -0.8660 0.1841 0.4650\nvn -0.2270 -0.0316 0.9734\nvn -0.2293 0.9301 0.2868\nvn -0.6504 0.6545 0.3854\nvn 0.1627 0.3027 0.9391\nvn -0.9585 0.2808 0.0492\nvn -0.8994 0.3918 -0.1940\nvn -0.3774 0.0294 0.9256\nvn -0.6905 0.4016 0.6015\nvn -0.5305 0.5729 0.6248\nvn -0.0768 -0.1130 0.9906\nvn -0.5799 0.3270 0.7462\nvn -0.4403 0.5219 0.7306\nvn -0.7848 0.0667 0.6161\nvn -0.7386 -0.0199 0.6738\nvn -0.5639 -0.2075 0.7993\nvn 0.5640 -0.5194 -0.6420\nvn 0.9152 -0.0327 0.4017\nvn -0.0579 0.5388 0.8404\nvn -0.5259 -0.7449 0.4106\nvn 0.0094 0.0348 0.9994\nvn -0.4173 -0.6406 0.6446\nvn 0.2604 0.2133 0.9416\nvn -0.8620 0.5069 0.0068\nvn -0.6478 -0.1257 0.7514\nvn 0.2540 -0.8281 -0.4997\nvn -0.6290 0.7622 0.1529\nvn -0.7699 0.0225 0.6378\nvn -0.6775 0.5175 0.5227\nvn -0.2100 -0.0221 -0.9775\nvn -0.3584 -0.1576 -0.9202\nvn 0.7522 -0.1938 0.6298\nvn -0.0141 -0.2470 -0.9689\nvn -0.8446 0.0299 0.5345\nvn -0.7895 0.2901 0.5408\nvn 0.4332 -0.8320 -0.3465\nvn -0.7388 -0.4628 0.4900\nvn -0.0587 -0.9983 -0.0011\nvn -0.8518 0.5227 -0.0354\nvn -0.9104 0.1096 0.3989\nvn -0.8267 0.3903 0.4054\nvn -0.8349 0.3463 0.4279\nvn -0.6897 0.6468 0.3257\nvn -0.9708 0.0319 0.2379\nvn -0.3395 0.7979 0.4981\nvn -0.1297 -0.3904 -0.9115\nvn 0.0603 0.0400 -0.9974\nvn -0.2325 0.3592 -0.9039\nvn 0.3982 0.0778 0.9140\nvn -0.8690 0.2148 0.4457\nvn -0.7306 0.5441 0.4125\nvn -0.6240 0.7507 -0.2169\nvn 0.1941 -0.7911 0.5801\nvn -0.7106 0.5089 0.4859\nvn -0.6212 0.3900 0.6797\nvn -0.3205 0.8747 0.3634\nvn -0.4448 0.7717 0.4546\nvn -0.4532 0.1960 -0.8696\nvn -0.4179 -0.1664 -0.8931\nvn -0.5512 -0.0610 0.8321\nvn -0.9092 -0.1914 0.3699\nvn -0.7920 -0.2733 0.5459\nvn -0.7826 -0.1002 0.6144\nvn -0.7576 0.2948 0.5823\nvn -0.0400 0.9174 0.3961\nvn -0.6088 0.7135 0.3468\nvn -0.0788 0.4643 0.8822\nvn 0.1558 -0.1693 -0.9732\nvn -0.5446 0.2407 0.8034\nvn -0.8207 -0.3763 0.4300\nvn -0.6895 0.1742 0.7030\nvn -0.2889 -0.0328 -0.9568\nvn -0.8434 -0.3402 0.4159\nvn -0.9019 -0.1050 0.4190\nvn -0.7767 0.2205 0.5900\nvn -0.6749 -0.2241 0.7031\nvn 0.0085 -0.9986 -0.0525\nvn -0.2055 0.8333 0.5132\nvn -0.3204 0.8895 0.3258\nvn -0.7910 -0.2542 0.5565\nvn -0.7996 -0.0636 -0.5971\nvn -0.8549 -0.4025 -0.3272\nvn -0.2785 0.6073 0.7440\nvn -0.4812 0.6540 0.5837\nvn -0.3652 0.7577 0.5408\nvn -0.5044 0.6650 0.5509\nvn -0.4721 0.5225 0.7100\nvn -0.1296 0.1334 -0.9825\nvn -0.3077 0.7181 0.6242\nvn -0.0315 0.2105 -0.9771\nvn -0.1217 0.1107 -0.9864\nvn -0.4082 0.8249 0.3910\nvn -0.1375 -0.5141 0.8466\nvn -0.8569 0.0767 0.5097\nvn 0.0171 0.5877 0.8089\nvn -0.8066 -0.3029 0.5077\nvn -0.3559 0.9342 0.0256\nvn -0.9425 -0.0615 0.3285\nvn -0.2615 0.8476 0.4618\nvn -0.5603 0.4499 0.6954\nvn -0.0204 0.3348 -0.9421\nvn -0.1138 0.4424 -0.8895\nvn -0.1288 0.2769 -0.9522\nvn 0.2953 -0.9334 -0.2040\nvn -0.7709 -0.0996 0.6291\nvn -0.7548 0.1204 0.6448\nvn -0.3879 0.4139 0.8235\nvn -0.5643 -0.4299 0.7048\nvn -0.7587 0.1005 0.6437\nvn -0.6227 -0.1156 0.7738\nvn -0.6251 0.2227 0.7481\nvn -0.8807 0.3783 0.2852\nvn -0.7117 0.5703 0.4102\nvn -0.7241 0.5360 0.4340\nvn 0.1388 -0.2037 -0.9692\nvn -0.5684 -0.5791 0.5845\nvn -0.4975 0.4908 0.7152\nvn -0.3909 0.7476 0.5369\nvn -0.2759 0.8343 0.4773\nvn -0.8089 0.2829 0.5155\nvn -0.7260 0.5705 0.3840\nvn 0.4977 -0.8377 -0.2248\nvn 0.0466 -0.0065 -0.9989\nvn -0.7865 -0.0588 0.6147\nvn -0.7183 0.2461 0.6507\nvn -0.4063 0.0261 -0.9134\nvn -0.7713 0.5034 0.3895\nvn -0.9040 -0.3272 0.2752\nvn -0.4615 0.1549 0.8735\nvn -0.5469 0.8074 0.2214\nvn -0.5521 0.7901 0.2663\nvn -0.5875 0.6997 0.4066\nvn -0.6646 0.6993 0.2632\nvn -0.7772 0.2987 0.5538\nvn -0.3341 -0.0418 -0.9416\nvn 0.1374 -0.6545 -0.7434\nvn -0.8275 -0.0320 0.5605\nvn 0.0696 0.2856 0.9558\nvn -0.1940 -0.3876 -0.9012\nvn -0.0646 0.1974 0.9782\nvn -0.4972 0.7553 0.4269\nvn -0.5881 0.7388 0.3291\nvn -0.5332 0.7899 0.3030\nvn -0.6436 0.4441 0.6233\nvn -0.3625 0.6675 0.6505\nvn -0.4475 0.7825 0.4329\nvn -0.6113 0.5455 0.5734\nvn 0.0207 -0.6161 -0.7874\nvn -0.6859 0.4694 -0.5561\nvn -0.8235 0.4951 -0.2770\nvn -0.3499 -0.2582 -0.9005\nvn -0.7288 -0.3503 0.5884\nvn -0.7323 -0.0053 0.6810\nvn 0.5480 -0.4293 0.7180\nvn -0.3314 -0.1301 -0.9345\nvn 0.9758 -0.1889 -0.1104\nvn -0.0502 0.2053 -0.9774\nvn -0.9417 0.2123 0.2611\nvn -0.9235 0.0856 0.3739\nvn -0.8980 -0.3360 -0.2840\nvn -0.8338 0.3783 0.4022\nvn 0.2822 0.1747 0.9433\nvn -0.8517 0.3090 0.4232\nvn -0.4583 0.7599 0.4609\nvn -0.4136 -0.2086 -0.8863\nvn -0.7411 -0.2769 0.6116\nvn -0.9855 0.1473 0.0842\nvn -0.5528 0.1072 -0.8264\nvn -0.7897 -0.3216 0.5224\nvn -0.7832 -0.0469 0.6200\nvn -0.8223 0.0741 0.5642\nvn -0.6529 0.5821 0.4846\nvn -0.1717 -0.2118 0.9621\nvn -0.6720 -0.1008 0.7337\nvn -0.3264 0.7406 0.5873\nvn -0.5221 0.7756 0.3546\nvn -0.6446 0.7321 0.2205\nvn -0.4560 0.7001 0.5495\nvn -0.5304 0.6706 0.5186\nvn 0.1397 0.0517 -0.9888\nvn -0.6960 0.0482 -0.7164\nvn -0.7838 0.0072 0.6210\nvn -0.7967 -0.3336 0.5040\nvn -0.7865 0.3590 0.5025\nvn -0.6944 0.4761 0.5396\nvn -0.7217 0.4877 0.4912\nvn -0.7084 0.5602 0.4294\nvn -0.8209 -0.0333 0.5701\nvn -0.8291 -0.0430 0.5574\nvn -0.7314 0.4813 0.4831\nvn -0.5626 0.5967 0.5722\nvn -0.6691 0.7339 0.1170\nvn -0.3631 0.7754 0.5165\nvn -0.5655 -0.2993 -0.7685\nvn -0.3369 -0.0499 -0.9402\nvn -0.6223 -0.1778 -0.7623\nvn -0.7258 0.1350 0.6745\nvn -0.6064 -0.0319 0.7945\nvn -0.5756 0.0086 -0.8177\nvn -0.6742 -0.3459 0.6525\nvn -0.8422 0.2140 0.4949\nvn -0.8552 0.2557 0.4509\nvn -0.5121 0.6644 0.5444\nvn 0.7430 -0.2062 -0.6368\nvn -0.5676 0.2952 0.7685\nvn -0.6588 -0.2043 0.7240\nvn -0.4805 0.5643 0.6714\nvn -0.3860 0.8314 0.3997\nvn -0.5778 0.5623 0.5916\nvn -0.6809 0.1943 0.7062\nvn -0.3358 -0.0993 -0.9367\nvn -0.4232 -0.4097 -0.8081\nvn -0.7365 0.1349 0.6628\nvn -0.6850 0.2593 0.6808\nvn -0.7314 0.6376 -0.2421\nvn -0.1220 0.1020 -0.9873\nvn 0.0355 -0.9988 -0.0324\nvn -0.3807 0.0158 -0.9246\nvn -0.7423 0.2376 0.6265\nvn -0.7447 0.3968 0.5366\nvn -0.3467 -0.1548 -0.9251\nvn -0.0469 0.5429 -0.8385\nvn -0.1366 0.2679 -0.9537\nvn 0.0401 0.7729 -0.6333\nvn -0.0971 0.8026 -0.5885\nvn 0.0701 0.6181 -0.7829\nvn -0.2382 0.6231 -0.7450\nvn 0.0563 0.7355 -0.6752\nvn -0.5731 0.3592 -0.7366\nvn 0.1959 0.8995 -0.3906\nvn -0.8527 0.0603 -0.5189\nvn -0.8559 -0.1248 -0.5018\nvn 0.1605 0.9078 -0.3874\nvn 0.2797 0.7747 -0.5672\nvn 0.1196 0.7641 -0.6340\nvn -0.8687 -0.1094 -0.4832\nvn -0.6011 -0.0297 -0.7986\nvn -0.9866 0.0921 0.1344\nvn -0.7682 -0.2934 -0.5691\nvn -0.6177 -0.4453 -0.6482\nvn -0.6238 -0.4453 -0.6423\nvn -0.4393 -0.5280 -0.7268\nvn 0.2501 -0.9081 -0.3360\nvn -0.9436 0.1095 -0.3124\nvn -0.9377 -0.0214 -0.3468\nvn -0.6920 -0.0273 -0.7214\nvn -0.4393 0.8966 -0.0555\nvn -0.8736 -0.1440 -0.4648\nvn -0.4124 -0.5171 -0.7500\nvn -0.6542 0.0261 -0.7558\nvn -0.9464 -0.0794 -0.3131\nvn -0.8346 -0.3133 -0.4530\nvn -0.6842 -0.4620 -0.5642\nvn -0.6619 -0.5156 -0.5441\nvn -0.4322 -0.6705 -0.6030\nvn -0.6848 0.4527 -0.5711\nvn -0.8493 -0.2683 -0.4547\nvn -0.3568 -0.6499 -0.6711\nvn -0.7945 -0.2123 -0.5690\nvn 0.8219 -0.5615 -0.0965\nvn 0.6321 -0.7430 -0.2200\nvn -0.9609 0.1588 -0.2270\nvn -0.9798 0.0367 -0.1964\nvn -0.7293 -0.4965 -0.4708\nvn -0.3905 -0.6979 -0.6004\nvn -0.8536 -0.2149 -0.4746\nvn 0.1000 0.3206 -0.9419\nvn -0.7504 -0.4796 -0.4548\nvn -0.3872 -0.7068 -0.5921\nvn -0.9667 0.1449 -0.2108\nvn -0.9610 -0.1054 -0.2555\nvn -0.8903 -0.2637 -0.3712\nvn -0.3868 -0.7065 -0.5927\nvn -0.9881 -0.1173 -0.0998\nvn -0.6727 -0.4907 -0.5538\nvn -0.8831 0.4441 0.1510\nvn -0.9540 -0.1189 -0.2752\nvn -0.8819 -0.3203 -0.3460\nvn -0.7404 -0.5319 -0.4111\nvn -0.3937 -0.7385 -0.5474\nvn -0.9887 0.1182 0.0922\nvn -0.5062 -0.6356 -0.5829\nvn -0.8672 -0.4150 -0.2750\nvn -0.3753 -0.7246 -0.5780\nvn -0.4011 -0.6224 -0.6722\nvn -0.9496 -0.1190 0.2902\nvn -0.9651 0.2005 -0.1685\nvn -0.9823 0.1406 -0.1240\nvn -0.5103 -0.7569 -0.4082\nvn -0.9697 0.2263 0.0920\nvn -0.8654 -0.2220 -0.4492\nvn -0.9570 -0.1259 -0.2613\nvn -0.9071 -0.3133 -0.2811\nvn -0.6653 -0.5594 -0.4945\nvn -0.4295 -0.7453 -0.5099\nvn -0.7048 -0.5575 -0.4386\nvn -0.7222 0.6258 0.2946\nvn -0.9220 0.0557 -0.3830\nvn -0.0630 0.9973 0.0371\nvn -0.9618 0.2344 0.1414\nvn -0.5232 0.7370 -0.4278\nvn -0.9116 0.4059 0.0652\nvn -0.9887 -0.0740 -0.1306\nvn -0.7666 -0.5234 -0.3720\nvn -0.7893 -0.5165 -0.3319\nvn -0.9709 0.2129 0.1097\nvn -0.4903 0.7825 -0.3837\nvn -0.6392 0.7020 -0.3142\nvn 0.7575 -0.6163 -0.2152\nvn 0.5907 0.2243 -0.7751\nvn 0.1483 0.8623 -0.4842\nvn -0.8246 0.5287 0.2012\nvn 0.0304 -0.0063 -0.9995\nvn -0.9196 -0.2527 -0.3009\nvn -0.4794 -0.7097 -0.5163\nvn -0.6946 -0.6391 -0.3303\nvn -0.4321 -0.7612 -0.4835\nvn -0.2778 0.7033 -0.6544\nvn 0.7146 0.6891 -0.1205\nvn -0.9736 0.1949 -0.1185\nvn -0.5888 0.7932 -0.1555\nvn -0.6265 -0.4943 0.6026\nvn -0.1716 0.7349 -0.6561\nvn -0.8396 -0.4124 -0.3536\nvn -0.9293 -0.2934 -0.2244\nvn -0.9576 -0.2108 -0.1963\nvn -0.6613 -0.6448 -0.3834\nvn -0.3685 -0.9291 -0.0325\nvn 0.5009 0.3473 -0.7927\nvn -0.9837 -0.0433 -0.1743\nvn -0.9539 0.2467 -0.1709\nvn -0.7477 -0.5593 -0.3578\nvn -0.7660 -0.5321 -0.3608\nvn -0.5010 -0.7546 -0.4238\nvn -0.4891 -0.7556 -0.4357\nvn -0.6840 -0.6028 -0.4108\nvn -0.9836 0.0875 0.1579\nvn -0.1106 0.8352 -0.5387\nvn -0.6282 -0.1093 -0.7703\nvn -0.7777 0.0659 -0.6252\nvn -0.7795 0.0497 -0.6244\nvn -0.6817 0.4145 -0.6029\nvn -0.5669 -0.8147 -0.1219\nvn -0.9797 0.0194 -0.1995\nvn -0.9553 0.2814 -0.0912\nvn 0.4476 0.4938 -0.7455\nvn 0.1976 0.9331 -0.3004\nvn -0.6052 -0.3947 -0.6913\nvn -0.7684 -0.3339 -0.5460\nvn -0.8128 0.0407 -0.5810\nvn -0.8576 0.2228 -0.4635\nvn -0.6586 0.5642 -0.4978\nvn -0.2160 0.2482 -0.9443\nvn -0.9778 0.0229 -0.2083\nvn -0.9593 -0.2593 -0.1122\nvn -0.9378 -0.3363 -0.0868\nvn -0.9898 0.1170 0.0815\nvn -0.0978 0.9258 -0.3651\nvn -0.7688 -0.4139 -0.4875\nvn -0.7451 -0.4422 -0.4993\nvn -0.7622 -0.3467 -0.5467\nvn -0.8377 -0.3184 -0.4437\nvn -0.8533 0.2457 -0.4599\nvn 0.0203 -0.9996 -0.0179\nvn -0.5148 -0.7671 -0.3828\nvn -0.9406 -0.3284 -0.0862\nvn 0.3231 0.5635 -0.7603\nvn -0.7076 -0.1915 -0.6802\nvn -0.8959 0.2941 -0.3331\nvn -0.9390 0.3026 -0.1633\nvn -0.5323 -0.7467 -0.3988\nvn -0.7733 -0.5554 -0.3059\nvn -0.9388 0.2644 0.2209\nvn -0.2751 0.9195 0.2807\nvn 0.3200 0.5702 -0.7566\nvn -0.5510 -0.3900 -0.7378\nvn -0.7749 -0.2186 -0.5931\nvn -0.7279 -0.2406 -0.6421\nvn -0.7952 -0.4137 -0.4433\nvn -0.8832 -0.2706 -0.3831\nvn -0.9020 -0.3455 -0.2589\nvn -0.9191 -0.3223 -0.2266\nvn -0.9283 -0.0358 -0.3702\nvn -0.9628 0.2237 -0.1517\nvn -0.7783 0.2420 -0.5793\nvn 0.3698 0.7688 0.5218\nvn -0.9933 -0.0448 -0.1066\nvn -0.8425 -0.4399 -0.3110\nvn -0.9907 0.1171 0.0697\nvn 0.1053 0.3965 -0.9120\nvn -0.0938 0.7244 -0.6830\nvn -0.7435 -0.2756 -0.6093\nvn -0.7438 -0.3175 -0.5881\nvn -0.7875 -0.3555 -0.5035\nvn -0.7496 -0.2056 -0.6292\nvn -0.7990 0.4233 -0.4271\nvn -0.7329 0.5754 -0.3630\nvn -0.8286 0.4806 -0.2871\nvn -0.4668 0.8200 -0.3312\nvn -0.5332 0.5140 0.6719\nvn -0.9350 0.3359 -0.1136\nvn -0.9729 0.2170 0.0802\nvn -0.1466 0.7096 -0.6892\nvn -0.1622 0.7856 -0.5971\nvn -0.7762 -0.1652 -0.6085\nvn -0.8341 0.4045 -0.3750\nvn -0.9009 0.3195 -0.2938\nvn -0.6853 0.6521 -0.3243\nvn -0.9864 -0.0450 -0.1582\nvn -0.9190 0.3669 -0.1442\nvn -0.9535 -0.2118 -0.2144\nvn -0.8224 -0.5263 -0.2158\nvn -0.9451 -0.3200 -0.0658\nvn -0.9254 0.2913 0.2425\nvn -0.9393 0.2666 0.2160\nvn -0.2422 -0.4962 -0.8338\nvn 0.0569 0.7851 0.6167\nvn -0.6427 -0.7407 -0.1957\nvn 0.3159 -0.3110 0.8964\nvn -0.4221 0.8497 -0.3160\nvn 0.1670 0.5426 -0.8232\nvn -0.9297 -0.1891 -0.3160\nvn -0.9423 -0.1605 -0.2937\nvn -0.8589 -0.2697 -0.4354\nvn -0.8151 -0.3929 -0.4258\nvn -0.8291 0.1432 -0.5405\nvn -0.9650 -0.0189 -0.2614\nvn -0.7985 0.4535 -0.3959\nvn -0.9880 -0.0904 -0.1256\nvn -0.5712 -0.7478 -0.3384\nvn -0.9873 -0.1524 -0.0444\nvn -0.8457 -0.3503 0.4025\nvn -0.1736 0.1773 0.9687\nvn 0.2658 0.8522 -0.4506\nvn 0.2628 0.8323 -0.4881\nvn -0.3368 -0.7911 -0.5106\nvn -0.8729 0.2318 -0.4294\nvn -0.7738 0.3212 -0.5460\nvn -0.6323 0.5254 -0.5693\nvn 0.3887 0.6084 -0.6919\nvn -0.9144 -0.0863 -0.3955\nvn -0.7314 -0.2677 -0.6272\nvn -0.8865 -0.4207 -0.1928\nvn -0.8853 -0.3730 -0.2777\nvn -0.9603 -0.2009 -0.1938\nvn -0.8099 -0.1575 0.5650\nvn -0.1788 0.6286 0.7569\nvn -0.6610 0.6273 -0.4118\nvn -0.6755 0.6049 -0.4217\nvn 0.7367 -0.6693 -0.0967\nvn -0.6699 0.5681 -0.4781\nvn -0.8818 -0.3195 -0.3470\nvn -0.8914 -0.4127 -0.1874\nvn -0.9371 0.0831 -0.3390\nvn -0.5125 0.0505 -0.8572\nvn -0.4968 -0.8646 0.0751\nvn 0.2543 0.6946 -0.6730\nvn -0.9636 -0.1697 0.2066\nvn -0.8734 0.4856 -0.0369\nvn -0.9946 -0.0058 -0.1033\nvn -0.9476 -0.1971 -0.2516\nvn -0.9143 -0.2132 -0.3444\nvn -0.9018 -0.4087 -0.1400\nvn -0.9613 -0.2280 -0.1544\nvn -0.9051 -0.3628 -0.2219\nvn -0.9612 -0.2330 -0.1475\nvn -0.9741 -0.0742 -0.2135\nvn -0.8049 -0.2385 -0.5434\nvn 0.9942 0.0577 -0.0907\nvn -0.0388 -0.6186 -0.7847\nvn -0.9594 -0.2104 -0.1879\nvn -0.5731 -0.7180 -0.3951\nvn -0.7813 -0.5576 -0.2803\nvn -0.5920 -0.7000 -0.3994\nvn -0.9797 -0.1976 0.0321\nvn -0.1879 0.9142 -0.3590\nvn 0.0187 0.6146 -0.7886\nvn -0.8775 -0.3442 0.3341\nvn -0.9314 0.0679 -0.3575\nvn -0.5262 0.2710 -0.8060\nvn -0.5740 0.3532 -0.7387\nvn -0.4177 0.3855 -0.8227\nvn -0.7646 -0.0706 -0.6407\nvn -0.8655 0.0239 -0.5004\nvn -0.8756 -0.0490 -0.4804\nvn -0.8111 -0.3992 -0.4274\nvn -0.9903 -0.0846 -0.1105\nvn -0.3454 0.8164 -0.4627\nvn -0.6626 -0.7401 -0.1149\nvn -0.9889 -0.0854 -0.1215\nvn -0.8793 0.4634 -0.1102\nvn -0.9324 0.3555 -0.0657\nvn -0.9552 -0.2339 -0.1812\nvn -0.4331 -0.8170 -0.3806\nvn -0.6897 0.3149 -0.6520\nvn -0.8321 0.2166 -0.5105\nvn -0.9131 0.0666 -0.4022\nvn -0.7865 0.4794 -0.3893\nvn -0.4675 0.8394 -0.2773\nvn -0.3815 0.8726 -0.3050\nvn -0.6474 0.6302 -0.4286\nvn -0.9523 -0.0987 -0.2886\nvn -0.8984 -0.2439 -0.3652\nvn -0.8983 -0.3133 -0.3081\nvn -0.8732 -0.0938 -0.4783\nvn -0.9728 -0.2158 -0.0841\nvn -0.8757 -0.0907 -0.4743\nvn -0.8501 0.5081 0.1388\nvn -0.8645 0.4844 0.1340\nvn -0.9132 -0.3525 -0.2046\nvn -0.9281 0.3104 0.2055\nvn -0.9030 0.0888 -0.4204\nvn -0.5506 0.6435 -0.5318\nvn -0.7283 0.2163 -0.6503\nvn 0.1155 -0.8108 -0.5738\nvn -0.8186 0.4643 -0.3381\nvn -0.9735 0.2198 -0.0639\nvn -0.9096 -0.2173 -0.3542\nvn -0.8952 -0.2441 -0.3730\nvn -0.8771 -0.3117 -0.3654\nvn 0.2212 0.3660 -0.9039\nvn -0.8461 -0.2745 0.4570\nvn -0.9770 0.2030 0.0656\nvn 0.0860 -0.6069 -0.7901\nvn -0.7135 -0.6957 -0.0829\nvn -0.9874 -0.1079 -0.1156\nvn -0.8881 -0.1826 0.4219\nvn -0.7167 0.1146 -0.6879\nvn -0.6824 0.2393 -0.6907\nvn -0.8803 0.4610 -0.1118\nvn -0.6870 0.6963 -0.2079\nvn -0.4010 0.8274 -0.3931\nvn -0.5877 0.6286 -0.5095\nvn -0.9855 -0.0565 -0.1601\nvn -0.9288 0.0174 -0.3702\nvn -0.9145 -0.2138 -0.3435\nvn -0.9139 -0.2816 -0.2923\nvn -0.3846 0.3170 -0.8669\nvn -0.8266 0.4065 -0.3893\nvn -0.5170 0.7015 -0.4905\nvn -0.1890 -0.7669 -0.6133\nvn -0.3906 0.7681 -0.5073\nvn -0.5616 0.7742 -0.2921\nvn -0.9089 0.3702 -0.1921\nvn -0.4127 -0.9106 -0.0218\nvn -0.5604 -0.7127 -0.4219\nvn -0.8449 -0.4860 -0.2233\nvn -0.9867 0.0828 0.1400\nvn -0.7986 -0.5439 -0.2575\nvn -0.9998 -0.0051 -0.0194\nvn -0.9705 0.1414 -0.1952\nvn -0.9099 -0.3021 -0.2843\nvn -0.8681 0.4766 -0.1388\nvn -0.6881 0.6826 -0.2460\nvn -0.9325 0.0431 -0.3585\nvn -0.9720 -0.1377 -0.1901\nvn -0.8951 -0.2539 -0.3664\nvn -0.8314 -0.3794 -0.4060\nvn 0.0243 0.5604 -0.8279\nvn -0.4048 0.8323 0.3785\nvn -0.9987 0.0381 -0.0347\nvn -0.8739 0.4857 0.0203\nvn -0.9484 -0.2781 -0.1522\nvn -0.5613 -0.7114 -0.4228\nvn -0.9604 -0.2237 -0.1663\nvn -0.3375 0.9152 -0.2201\nvn -0.5672 -0.5668 -0.5975\nvn 0.0213 -0.5362 -0.8438\nvn -0.8138 0.5774 -0.0664\nvn -0.5195 0.8511 0.0760\nvn -0.3138 0.9240 -0.2184\nvn -0.4953 0.8457 -0.1985\nvn -0.7368 0.6697 0.0925\nvn -0.9403 0.1551 -0.3031\nvn -0.2538 0.0523 -0.9658\nvn -0.9117 -0.3200 0.2575\nvn 0.0592 -0.8938 -0.4445\nvn -0.9580 0.2696 -0.0977\nvn -0.7454 0.4041 -0.5302\nvn -0.7133 0.4984 -0.4928\nvn -0.9413 0.1402 -0.3071\nvn 0.1125 -0.9930 0.0358\nvn -0.9878 -0.1333 -0.0801\nvn -0.9070 -0.3187 -0.2751\nvn -0.9380 -0.2675 -0.2206\nvn -0.9415 -0.1894 -0.2789\nvn 0.1361 0.8248 -0.5488\nvn 0.0420 0.4610 -0.8864\nvn -0.7713 0.3257 0.5468\nvn -0.9467 -0.2377 -0.2172\nvn -0.8212 0.3623 -0.4410\nvn -0.5211 0.8124 -0.2616\nvn -0.8267 -0.0543 0.5600\nvn -0.6894 -0.5563 0.4640\nvn -0.6892 -0.5605 0.4592\nvn -0.5170 -0.1814 -0.8365\nvn -0.7241 -0.6676 -0.1733\nvn -0.9909 -0.0973 -0.0927\nvn -0.8864 0.4616 0.0347\nvn -0.6882 -0.6825 -0.2462\nvn -0.5786 -0.7214 -0.3806\nvn -0.8539 -0.4816 -0.1975\nvn -0.9905 0.1028 0.0917\nvn -0.8756 0.4726 -0.0998\nvn -0.8916 0.1486 -0.4278\nvn -0.8225 0.4650 -0.3276\nvn -0.8005 0.5169 -0.3034\nvn -0.7259 0.5893 -0.3548\nvn -0.5905 0.7163 -0.3718\nvn -0.9610 0.2093 -0.1810\nvn -0.9792 -0.0677 -0.1912\nvn -0.9335 -0.2650 -0.2416\nvn -0.9411 -0.2408 -0.2374\nvn -0.6260 0.7093 0.3240\nvn -0.8418 0.3162 -0.4374\nvn -0.8853 0.4245 -0.1901\nvn -0.2150 -0.0208 -0.9764\nvn -0.9068 -0.4184 -0.0521\nvn -0.9297 0.2843 0.2343\nvn -0.6414 0.5461 -0.5389\nvn -0.6736 0.4634 -0.5758\nvn -0.7303 0.6246 -0.2768\nvn 0.1140 -0.7937 -0.5975\nvn -0.9811 -0.0021 -0.1936\nvn -0.9355 -0.0541 0.3490\nvn -0.4888 0.8458 -0.2137\nvn -0.9061 0.3248 -0.2711\nvn -0.1928 0.1304 -0.9725\nvn 0.0023 0.5338 -0.8456\nvn 0.4237 0.4638 -0.7780\nvn -0.9853 0.0198 -0.1698\nvn -0.7396 0.5905 -0.3229\nvn -0.9558 -0.2896 -0.0508\nvn -0.5156 0.8428 0.1543\nvn -0.8089 -0.5841 0.0666\nvn -0.9907 -0.1097 0.0810\nvn -0.9978 -0.0480 -0.0453\nvn -0.9914 0.1258 0.0353\nvn -0.8845 -0.4049 0.2316\nvn -0.6860 0.6626 -0.3006\nvn 0.2518 0.6191 0.7438\nvn -0.8952 0.3531 -0.2719\nvn -0.7049 0.6479 -0.2887\nvn -0.9309 -0.0312 -0.3640\nvn -0.8296 -0.1658 -0.5332\nvn -0.9576 -0.1047 -0.2685\nvn -0.9357 -0.2491 -0.2498\nvn -0.7008 -0.6622 -0.2653\nvn -0.0015 0.4195 -0.9077\nvn -0.9043 0.3864 0.1815\nvn -0.0151 0.6689 -0.7432\nvn 0.0281 -0.9978 0.0593\nvn 0.4031 0.1555 -0.9019\nvn -0.9196 0.3810 -0.0961\nvn -0.8780 0.3683 -0.3056\nvn -0.6908 -0.1477 -0.7078\nvn -0.5900 -0.6258 -0.5102\nvn -0.9065 0.3983 -0.1402\nvn -0.9722 0.0612 0.2259\nvn -0.6884 -0.6804 -0.2513\nvn -0.6561 0.5582 -0.5080\nvn -0.9079 0.3197 0.2710\nvn -0.1441 0.2858 -0.9474\nvn -0.0200 0.7488 -0.6625\nvn -0.6750 -0.5505 -0.4912\nvn -0.7798 -0.1343 -0.6114\nvn -0.7041 -0.0136 -0.7100\nvn -0.9185 0.3829 -0.0990\nvn -0.9948 -0.0257 -0.0987\nvn -0.6007 -0.7827 -0.1628\nvn -0.9100 -0.4145 0.0132\nvn 0.9373 -0.1137 -0.3295\nvn -0.7636 -0.6282 -0.1489\nvn -0.9981 -0.0607 -0.0049\nvn -0.9007 -0.4015 -0.1659\nvn -0.8627 0.5021 0.0608\nvn -0.7930 -0.6042 -0.0778\nvn -0.9959 -0.0843 0.0325\nvn -0.9845 -0.1730 0.0276\nvn -0.9509 -0.3034 0.0607\nvn -0.9933 -0.0370 0.1097\nvn -0.5809 0.7281 -0.3640\nvn 0.5939 0.0103 -0.8045\nvn -0.2642 0.6871 0.6768\nvn 0.6336 -0.2195 -0.7419\nvn -0.7275 0.0393 -0.6850\nvn -0.6600 0.2765 -0.6986\nvn 0.4597 -0.7921 -0.4016\nvn 0.0499 0.4678 -0.8824\nvn -0.8364 -0.5292 0.1426\nvn -0.9051 -0.4068 0.1235\nvn -0.2884 -0.0314 -0.9570\nvn -0.8226 -0.5186 -0.2333\nvn -0.8017 -0.5473 -0.2403\nvn -0.8533 -0.4763 -0.2120\nvn -0.5897 0.6985 -0.4054\nvn -0.3113 -0.0464 -0.9492\nvn -0.8412 0.5366 -0.0666\nvn -0.6532 0.4844 -0.5819\nvn -0.5970 0.6027 -0.5295\nvn -0.6139 0.7819 -0.1083\nvn -0.9840 -0.1366 0.1141\nvn 0.1978 0.8225 -0.5332\nvn -0.7237 -0.1170 -0.6802\nvn -0.9899 -0.1131 -0.0853\nvn -0.9609 0.2511 0.1168\nvn -0.2857 -0.4323 -0.8553\nvn -0.8072 0.5687 0.1581\nvn -0.9538 -0.3005 0.0053\nvn 0.0146 0.9754 -0.2200\nvn -0.0030 -0.9989 0.0458\nvn -0.5464 0.8219 -0.1613\nvn -0.9488 -0.0638 0.3093\nvn -0.9721 0.2290 -0.0514\nvn -0.9747 0.2175 -0.0513\nvn -0.8931 -0.4258 0.1451\nvn -0.9055 0.3913 0.1643\nvn 0.2129 0.8529 -0.4768\nvn -0.2942 0.6279 -0.7206\nvn 0.5187 0.4083 -0.7512\nvn -0.8138 -0.0365 -0.5800\nvn -0.8137 -0.0318 -0.5805\nvn -0.6981 0.3125 -0.6442\nvn -0.6648 0.2151 -0.7153\nvn -0.6177 0.7052 0.3481\nvn -0.8833 0.3440 0.3187\nvn -0.9107 -0.1679 -0.3773\nvn -0.8966 0.3943 0.2015\nvn -0.9981 0.0367 -0.0490\nvn -0.8693 -0.4941 -0.0156\nvn -0.9965 0.0807 0.0234\nvn 0.2134 0.8988 -0.3830\nvn 0.0542 -0.9956 0.0767\nvn 0.4366 0.7872 -0.4356\nvn 0.1889 0.2455 -0.9508\nvn 0.6275 0.5524 -0.5488\nvn 0.7252 0.5512 -0.4126\nvn 0.0538 0.8923 -0.4483\nvn -0.3025 0.5399 -0.7855\nvn -0.1684 0.9248 -0.3412\nvn -0.2600 0.5709 -0.7788\nvn -0.6409 -0.4127 -0.6472\nvn -0.8678 -0.0750 -0.4913\nvn -0.6598 -0.2200 -0.7185\nvn -0.7329 0.0319 -0.6796\nvn -0.7089 0.1565 -0.6877\nvn -0.2262 0.9004 -0.3716\nvn 0.1813 0.7086 -0.6819\nvn -0.8317 -0.5291 -0.1683\nvn -0.9825 0.0747 -0.1704\nvn -0.9120 -0.0103 0.4100\nvn -0.6070 0.3679 -0.7044\nvn -0.8179 -0.5427 -0.1909\nvn -0.9278 0.3727 0.0153\nvn -0.9818 0.0422 -0.1852\nvn -0.8954 0.4450 -0.0140\nvn -0.8901 -0.4319 -0.1456\nvn -0.8532 -0.4748 -0.2160\nvn -0.9779 0.2072 -0.0287\nvn -0.8617 -0.4119 0.2964\nvn -0.9678 0.1443 0.2065\nvn -0.9027 0.4011 0.1556\nvn 0.1621 0.0480 -0.9856\nvn 0.4366 0.3905 -0.8105\nvn 0.0120 0.3391 -0.9407\nvn -0.7033 0.6485 -0.2912\nvn -0.7434 0.1834 -0.6432\nvn 0.2064 -0.8313 0.5160\nvn -0.8364 -0.3537 -0.4188\nvn -0.6628 -0.2301 -0.7126\nvn -0.7567 0.0829 -0.6484\nvn 0.8374 0.5455 0.0344\nvn 0.8288 0.5360 0.1608\nvn -0.0599 0.5123 -0.8567\nvn 0.1924 0.3938 -0.8989\nvn -0.7435 -0.5746 -0.3422\nvn -0.8666 -0.4546 -0.2057\nvn -0.5720 0.8112 0.1212\nvn -0.9839 -0.0710 0.1642\nvn -0.6385 0.3444 -0.6883\nvn -0.6598 0.5971 -0.4562\nvn -0.9155 0.3896 0.1010\nvn -0.8025 -0.5860 -0.1122\nvn 0.1658 -0.0002 0.9862\nvn -0.8194 -0.1951 -0.5390\nvn -0.8606 -0.2215 -0.4586\nvn -0.7829 -0.2285 -0.5786\nvn -0.4884 0.7744 0.4022\nvn 0.4329 0.3836 -0.8157\nvn -0.6219 -0.4153 -0.6639\nvn -0.7566 0.2349 -0.6103\nvn 0.0169 -0.9995 -0.0249\nvn 0.0137 -0.9998 -0.0142\nvn 0.5204 0.5378 -0.6633\nvn 0.1667 0.5508 -0.8178\nvn 0.2346 0.4272 -0.8732\nvn -0.6970 -0.0424 -0.7158\nvn -0.6911 -0.2633 -0.6731\nvn -0.4418 0.8516 -0.2823\nvn -0.5842 0.7523 -0.3044\nvn -0.9566 0.2890 -0.0363\nvn -0.6836 0.4544 -0.5711\nvn -0.6362 0.6128 -0.4687\nvn 0.0613 0.7999 -0.5971\nvn -0.2572 0.7293 -0.6340\nvn -0.5052 -0.7121 -0.4874\nvn -0.7582 -0.2556 -0.5999\nvn -0.6930 -0.3255 -0.6433\nvn -0.7570 -0.2939 -0.5836\nvn -0.6756 -0.1578 -0.7202\nvn -0.7167 -0.1208 -0.6868\nvn -0.7752 0.0945 -0.6247\nvn -0.8403 0.2055 -0.5017\nvn -0.0292 0.5804 -0.8138\nvn -0.1962 0.7845 -0.5883\nvn 0.4613 0.2380 -0.8547\nvn 0.4326 0.7706 -0.4681\nvn -0.7623 -0.4491 -0.4660\nvn -0.8636 0.2112 -0.4578\nvn -0.9864 0.1612 -0.0312\nvn -0.8157 -0.3125 -0.4868\nvn -0.9662 0.2188 0.1363\nvn -0.6822 0.4539 -0.5732\nvn -0.6393 0.7567 -0.1365\nvn -0.6937 0.3372 -0.6365\nvn -0.6854 -0.0294 -0.7275\nvn -0.5805 -0.6734 -0.4578\nvn -0.6612 -0.4901 -0.5680\nvn -0.7067 -0.3305 -0.6256\nvn -0.7970 0.1722 -0.5789\nvn -0.7554 0.2343 -0.6120\nvn -0.7682 0.0277 -0.6396\nvn -0.7071 0.1565 -0.6896\nvn -0.6295 0.4938 -0.5999\nvn 0.2842 -0.1096 -0.9525\nvn -0.3019 0.9096 -0.2855\nvn -0.8128 -0.2111 -0.5429\nvn -0.8054 -0.4178 -0.4204\nvn -0.9748 0.1107 -0.1936\nvn -0.7035 0.3548 -0.6158\nvn -0.6862 0.4500 -0.5715\nvn -0.6669 0.7091 -0.2292\nvn 0.0430 0.9190 -0.3919\nvn -0.4429 0.6321 -0.6358\nvn -0.5194 0.7768 -0.3561\nvn -0.2264 0.3155 -0.9215\nvn -0.5920 -0.7409 -0.3171\nvn -0.4772 -0.8631 -0.1655\nvn -0.4568 -0.8677 -0.1959\nvn -0.5795 -0.7474 -0.3250\nvn -0.7963 -0.3946 -0.4585\nvn -0.8186 -0.3200 -0.4769\nvn -0.7684 -0.2825 -0.5743\nvn -0.8056 -0.1130 -0.5816\nvn -0.7865 -0.1415 -0.6011\nvn -0.8469 -0.1734 -0.5027\nvn -0.7815 -0.2912 -0.5517\nvn 0.0425 0.8697 -0.4918\nvn -0.1945 0.9367 -0.2911\nvn 0.0149 -0.9922 0.1239\nvn 0.0474 0.5628 -0.8252\nvn 0.0875 0.6507 -0.7543\nvn -0.0632 -0.8200 0.5689\nvn -0.5130 0.1929 -0.8364\nvn -0.5550 0.2367 -0.7975\nvn -0.9542 -0.1232 -0.2727\nvn -0.9623 0.1677 -0.2142\nvn -0.9565 0.0110 -0.2915\nvn -0.9078 0.3904 0.1536\nvn -0.1470 -0.2251 -0.9632\nvn -0.1793 0.2246 -0.9578\nvn 0.1032 0.7652 -0.6355\nvn -0.3870 0.8153 -0.4308\nvn -0.7830 -0.6177 -0.0734\nvn -0.5480 0.7273 -0.4132\nvn -0.8124 0.3962 -0.4277\nvn -0.9226 0.0509 -0.3823\nvn -0.5649 -0.6165 -0.5485\nvn -0.6055 -0.5982 -0.5250\nvn -0.7823 -0.6200 -0.0595\nvn -0.8735 -0.2593 -0.4121\nvn -0.7998 -0.5032 -0.3274\nvn -0.7630 -0.5397 -0.3557\nvn -0.7293 0.3040 -0.6130\nvn -0.6247 0.4831 -0.6135\nvn -0.5996 0.3490 -0.7202\nvn -0.2554 0.7603 -0.5972\nvn -0.2403 0.9186 -0.3137\nvn -0.1115 0.6960 -0.7093\nvn -0.2390 0.0326 -0.9705\nvn -0.1811 0.6381 -0.7483\nvn -0.9664 -0.1041 0.2350\nvn 0.6028 0.5655 -0.5629\nvn -0.7517 -0.0010 -0.6595\nvn -0.7222 0.3120 -0.6173\nvn 0.5765 -0.7661 -0.2842\nvn -0.1896 -0.4357 -0.8799\nvn -0.6990 0.3595 -0.6181\nvn -0.7539 0.6158 -0.2289\nvn 0.5361 0.6633 0.5221\nvn -0.7260 0.6599 -0.1938\nvn -0.2612 -0.9499 0.1718\nvn -0.8140 0.3803 -0.4391\nvn -0.8893 -0.2488 -0.3836\nvn -0.5249 -0.7700 -0.3627\nvn 0.0354 -0.9989 -0.0316\nvn -0.4636 -0.8049 -0.3704\nvn -0.9644 -0.0877 -0.2495\nvn -0.9719 -0.0432 -0.2313\nvn -0.8915 0.1657 -0.4216\nvn -0.9887 0.0210 -0.1487\nvn -0.8911 0.1744 -0.4189\nvn -0.8190 0.3452 -0.4584\nvn -0.7183 0.0307 -0.6951\nvn -0.2333 0.9177 -0.3214\nvn -0.6918 0.1650 -0.7030\nvn -0.9697 0.1899 -0.1536\nvn -0.9349 0.2846 -0.2121\nvn 0.0391 -0.9992 0.0101\nvn -0.7551 0.4767 -0.4502\nvn -0.6850 0.7087 -0.1689\nvn -0.7592 0.6116 -0.2225\nvn -0.6799 0.7161 -0.1576\nvn -0.5730 0.6192 -0.5369\nvn -0.8128 -0.5764 0.0849\nvn -0.8869 0.1157 -0.4472\nvn -0.9240 -0.0293 -0.3813\nvn -0.9024 -0.3530 -0.2473\nvn -0.5763 -0.6333 -0.5165\nvn -0.6525 -0.6083 -0.4519\nvn -0.6776 -0.7354 -0.0077\nvn -0.7816 -0.6229 -0.0333\nvn -0.9259 -0.2871 -0.2455\nvn -0.9634 -0.0692 -0.2589\nvn -0.8003 0.3896 -0.4558\nvn -0.8104 -0.0076 -0.5858\nvn -0.8102 -0.0093 -0.5861\nvn -0.6582 0.3115 -0.6854\nvn -0.8491 0.1716 -0.4996\nvn -0.6560 0.1378 -0.7421\nvn -0.6896 0.3732 -0.6206\nvn -0.7524 0.6456 0.1309\nvn -0.9753 0.1505 0.1615\nvn -0.8638 0.3430 -0.3690\nvn -0.5655 0.7304 -0.3831\nvn -0.5624 -0.6249 -0.5414\nvn -0.7048 -0.6454 -0.2943\nvn -0.7107 -0.6772 -0.1906\nvn -0.8405 -0.3589 -0.4058\nvn -0.9377 -0.1126 -0.3287\nvn -0.8638 0.0416 -0.5022\nvn -0.8558 0.1565 -0.4930\nvn -0.9433 0.1945 -0.2690\nvn -0.8660 0.2596 -0.4273\nvn -0.8078 0.3493 -0.4748\nvn -0.6197 0.1748 -0.7652\nvn -0.7932 0.3257 -0.5145\nvn 0.5186 0.5624 -0.6440\nvn -0.8474 0.1716 -0.5025\nvn -0.7792 0.2751 -0.5631\nvn -0.7477 0.4807 -0.4580\nvn -0.6452 0.7450 0.1695\nvn -0.6212 0.7832 0.0273\nvn -0.9871 0.0674 0.1455\nvn -0.5774 0.6480 -0.4967\nvn -0.5314 0.7340 -0.4229\nvn -0.3884 0.9114 -0.1359\nvn -0.9172 0.3130 -0.2465\nvn -0.9186 0.3019 -0.2549\nvn -0.9942 0.0722 -0.0792\nvn 0.3390 -0.2428 -0.9089\nvn -0.0425 -0.9270 0.3725\nvn -0.7729 -0.5929 -0.2261\nvn -0.8119 -0.5488 -0.1991\nvn -0.8950 -0.3511 -0.2752\nvn -0.8678 0.0473 -0.4947\nvn -0.9951 -0.0516 -0.0845\nvn -0.6869 -0.3796 -0.6198\nvn -0.6492 -0.4636 -0.6030\nvn -0.8095 -0.3143 -0.4959\nvn -0.8529 0.2289 -0.4693\nvn -0.7014 0.1568 -0.6953\nvn -0.6113 0.2822 -0.7394\nvn 0.9658 -0.2426 -0.0913\nvn -0.5583 0.4428 -0.7016\nvn -0.8458 0.0126 -0.5333\nvn -0.8448 0.0175 -0.5348\nvn -0.7352 0.4056 -0.5431\nvn -0.7613 0.2622 -0.5931\nvn -0.6971 0.6599 -0.2805\nvn -0.8832 0.4440 0.1512\nvn -0.9895 0.1419 0.0274\nvn -0.7183 -0.6201 -0.3154\nvn -0.6108 -0.6769 -0.4108\nvn -0.6295 -0.6033 -0.4896\nvn -0.8279 -0.4339 -0.3554\nvn -0.8623 -0.3651 -0.3509\nvn -0.8543 0.2820 -0.4366\nvn -0.8876 0.1481 -0.4361\nvn -0.7974 0.3003 -0.5233\nvn -0.6474 -0.4543 -0.6120\nvn -0.8908 0.0254 -0.4536\nvn -0.6847 -0.4593 -0.5659\nvn -0.6366 -0.5439 -0.5468\nvn -0.8754 -0.1284 -0.4660\nvn -0.6987 -0.3506 -0.6237\nvn -0.9184 0.0395 -0.3936\nvn -0.9164 0.1655 -0.3646\nvn -0.5375 0.4486 -0.7140\nvn -0.8507 0.2281 -0.4737\nvn -0.6169 -0.3171 -0.7203\nvn 0.3884 0.1376 -0.9112\nvn -0.6638 0.4065 -0.6278\nvn -0.6978 0.7149 -0.0432\nvn -0.7055 0.7071 -0.0476\nvn -0.4370 0.7597 0.4815\nvn -0.3884 0.8993 -0.2008\nvn -0.3725 0.9112 -0.1758\nvn -0.7294 -0.6585 -0.1855\nvn -0.6391 0.4023 -0.6555\nvn -0.0843 -0.2857 -0.9546\nvn -0.8288 0.2481 -0.5016\nvn -0.8395 -0.2624 -0.4757\nvn -0.8881 -0.1868 -0.4199\nvn -0.9099 0.1857 -0.3710\nvn -0.9013 0.3727 -0.2206\nvn -0.9610 0.1253 -0.2465\nvn -0.9057 0.2673 -0.3289\nvn -0.9090 0.2346 -0.3444\nvn -0.9398 0.1424 -0.3106\nvn -0.9399 0.0846 -0.3308\nvn -0.8480 -0.0301 -0.5292\nvn -0.6876 0.3728 -0.6231\nvn -0.8197 0.1235 -0.5593\nvn -0.6715 0.1285 -0.7298\nvn -0.4834 0.8720 -0.0771\nvn -0.8789 0.4224 0.2216\nvn -0.6479 0.7458 -0.1551\nvn -0.7344 0.6771 0.0466\nvn -0.6275 0.7772 -0.0466\nvn 0.2524 -0.8354 -0.4882\nvn -0.5296 0.8466 -0.0521\nvn -0.9367 0.3352 0.1011\nvn -0.9688 -0.2409 0.0589\nvn -0.1930 -0.4428 -0.8756\nvn -0.7870 -0.5961 -0.1593\nvn -0.9493 -0.0595 -0.3087\nvn -0.9429 -0.0704 -0.3255\nvn -0.9913 -0.1290 -0.0275\nvn -0.9846 -0.1622 -0.0652\nvn -0.0139 -0.9999 0.0079\nvn 0.8213 0.4361 -0.3680\nvn 0.5092 0.7070 -0.4907\nvn 0.6480 0.5629 -0.5131\nvn 0.2617 0.5764 -0.7741\nvn 0.0980 -0.7998 -0.5923\nvn 0.6376 0.6791 -0.3636\nvn -0.4943 -0.1211 -0.8608\nvn -0.2546 0.6480 -0.7178\nvn 0.7927 0.5089 -0.3357\nvn 0.0934 0.5729 -0.8143\nvn -0.4165 0.4699 -0.7783\nvn -0.6944 -0.5996 -0.3979\nvn 0.0888 0.6731 -0.7342\nvn 0.1469 -0.9780 -0.1484\nvn 0.4022 0.6797 -0.6134\nvn -0.1349 0.7567 -0.6397\nvn -0.3451 0.8923 -0.2912\nvn -0.3154 0.2292 -0.9209\nvn -0.3213 0.8100 -0.4906\nvn 0.8802 -0.0926 -0.4654\nvn 0.6745 0.1087 -0.7302\nvn -0.1271 0.8440 -0.5210\nvn 0.2415 0.5840 -0.7750\nvn 0.0200 0.4165 -0.9089\nvn -0.0790 0.7331 -0.6755\nvn 0.0164 -0.9970 0.0761\nvn 0.5929 -0.7692 0.2383\nvn -0.4569 0.1526 -0.8763\nvn 0.1644 -0.9756 -0.1455\nvn 0.3642 0.6972 -0.6175\nvn -0.0384 0.7598 -0.6490\nvn -0.7076 0.5028 -0.4965\nvn 0.1734 -0.5382 -0.8248\nvn -0.1926 0.9308 -0.3106\nvn -0.2582 0.8552 -0.4494\nvn 0.9238 -0.1191 -0.3638\nvn 0.5350 0.3337 -0.7762\nvn -0.1080 0.6891 -0.7166\nvn 0.1629 0.3214 -0.9328\nvn -0.0757 0.7455 -0.6621\nvn 0.8877 0.0160 -0.4601\nvn 0.5996 0.4187 -0.6820\nvn 0.8663 -0.1322 -0.4816\nvn 0.7008 -0.2395 -0.6719\nvn 0.6540 0.1336 -0.7446\nvn 0.3624 0.8402 -0.4034\nvn 0.0820 0.2386 -0.9677\nvn 0.3667 0.6045 -0.7072\nvn 0.4013 0.6710 -0.6235\nvn 0.4263 0.4266 -0.7976\nvn 0.6058 -0.2040 -0.7690\nvn 0.6416 0.4908 -0.5895\nvn 0.3825 0.5115 -0.7694\nvn 0.6760 0.5908 -0.4404\nvn -0.4002 0.5384 -0.7416\nvn 0.1715 0.4831 -0.8586\nvn 0.4471 0.7374 -0.5063\nvn -0.2141 0.3943 -0.8937\nvn 0.5880 0.1209 -0.7998\nvn 0.7786 -0.1673 -0.6048\nvn 0.6514 0.3500 -0.6732\nvn -0.5352 0.0827 -0.8407\nvn -0.1560 0.5982 -0.7860\nvn 0.5265 0.3915 -0.7547\nvn 0.1234 0.4438 -0.8876\nvn 0.6188 0.2950 -0.7281\nvn 0.0812 -0.9794 0.1849\nvn 0.7373 0.4450 -0.5083\nvn 0.7371 0.4453 -0.5084\nvn 0.4994 0.6925 -0.5206\nvn -0.2291 -0.9732 0.0193\nvn 0.6763 0.3912 -0.6242\nvn 0.3472 0.2380 -0.9071\nvn 0.4893 0.1846 -0.8523\nvn -0.2695 0.5476 -0.7921\nvn 0.2410 0.7021 -0.6700\nvn -0.1318 0.2587 -0.9569\nvn 0.2105 0.4535 -0.8660\nvn 0.4030 0.4172 -0.8146\nvn -0.6195 0.7193 0.3145\nvn -0.1075 0.4564 -0.8833\nvn 0.4097 0.5915 -0.6944\nvn 0.0918 0.8755 -0.4744\nvn 0.3577 0.8075 -0.4690\nvn 0.5853 0.6432 -0.4936\nvn 0.5565 0.2715 -0.7853\nvn 0.4412 0.4619 -0.7694\nvn -0.1611 0.8401 -0.5180\nvn 0.4987 0.2923 -0.8160\nvn 0.1528 -0.8350 0.5286\nvn 0.8019 0.5456 -0.2435\nvn -0.2250 0.6301 -0.7432\nvn -0.3982 0.8564 -0.3286\nvn 0.4802 0.3149 -0.8187\nvn 0.3757 -0.9152 -0.1460\nvn 0.7950 0.4583 -0.3975\nvn 0.2244 0.0616 -0.9726\nvn 0.4846 0.5469 -0.6827\nvn 0.7605 0.1313 -0.6359\nvn 0.7596 0.0898 -0.6442\nvn 0.0382 0.6695 -0.7419\nvn 0.3630 0.8831 -0.2974\nvn 0.3547 0.7057 -0.6133\nvn 0.8707 0.3571 -0.3381\nvn 0.2560 0.5199 -0.8150\nvn -0.0174 0.5147 -0.8572\nvn 0.0171 -0.4102 0.9118\nvn 0.3860 0.4538 -0.8032\nvn -0.2962 0.9239 -0.2421\nvn 0.1200 -0.9928 -0.0051\nvn -0.1211 0.5537 -0.8239\nvn 0.7657 0.2880 -0.5751\nvn -0.0002 0.7031 -0.7111\nvn 0.7502 0.4278 -0.5042\nvn 0.4418 0.7883 -0.4283\nvn 0.5391 0.0688 -0.8394\nvn 0.7376 0.3102 -0.5998\nvn -0.1903 0.9409 -0.2803\nvn -0.6272 0.3169 -0.7114\nvn 0.3452 0.3301 -0.8786\nvn -0.0824 0.8852 -0.4578\nvn 0.3505 0.4474 -0.8228\nvn -0.2570 0.9482 -0.1865\nvn 0.3520 0.8047 -0.4781\nvn 0.6599 0.0894 -0.7461\nvn -0.0020 -0.9999 0.0159\nvn -0.0227 -0.9984 0.0519\nvn 0.6280 0.0178 -0.7780\nvn 0.3074 0.8314 -0.4630\nvn -0.2469 0.9127 -0.3257\nvn 0.4765 0.7439 -0.4686\nvn 0.4198 0.6151 -0.6674\nvn 0.0307 -0.0594 -0.9978\nvn 0.0097 0.3451 -0.9385\nvn 0.7652 0.1282 -0.6309\nvn 0.7450 -0.6100 0.2700\nvn 0.2263 0.0761 -0.9711\nvn 0.6604 0.7217 -0.2076\nvn 0.7805 0.1029 -0.6166\nvn 0.3103 0.6943 -0.6493\nvn -0.0070 0.8987 -0.4385\nvn -0.1227 0.9212 -0.3692\nvn -0.1182 0.3269 -0.9376\nvn -0.0151 0.8523 -0.5228\nvn 0.3379 0.2358 -0.9112\nvn -0.0914 0.5854 -0.8056\nvn -0.7327 0.5674 -0.3759\nvn 0.5978 0.4933 -0.6319\nvn -0.0147 0.9064 -0.4221\nvn 0.1141 0.8030 -0.5850\nvn 0.1265 0.8115 -0.5704\nvn 0.7587 0.4825 -0.4377\nvn -0.3919 0.8065 -0.4427\nvn 0.2163 0.4838 -0.8480\nvn 0.0072 0.9011 -0.4335\nvn -0.0297 0.8149 -0.5789\nvn -0.5050 0.8393 -0.2016\nvn 0.9701 -0.2418 -0.0215\nvn -0.2204 0.6624 -0.7160\nvn -0.0111 0.6722 -0.7403\nvn 0.4671 0.6363 -0.6140\nvn 0.3316 0.6497 -0.6841\nvn -0.6895 0.2432 -0.6822\nvn 0.4915 0.7871 -0.3727\nvn 0.1310 -0.9913 0.0116\nvn -0.9015 -0.2457 -0.3563\nvn -0.4458 0.6199 -0.6457\nvn -0.3080 0.7555 -0.5782\nvn 0.4589 0.5145 -0.7243\nvn 0.5572 0.5622 -0.6112\nvn 0.7201 0.3232 -0.6140\nvn 0.3477 0.2411 -0.9061\nvn 0.4513 0.5895 -0.6699\nvn 0.0995 0.7302 -0.6759\nvn 0.3865 0.6827 -0.6201\nvn 0.1173 0.7677 -0.6299\nvn 0.3134 0.3055 -0.8991\nvn -0.4316 0.5804 -0.6906\nvn -0.0937 0.5173 -0.8507\nvn -0.1928 0.3227 -0.9267\nvn 0.5473 0.4738 -0.6899\nvn 0.0970 0.6500 -0.7537\nvn 0.1079 0.5723 -0.8129\nvn 0.0609 0.5365 -0.8417\nvn -0.2584 0.8453 -0.4677\nvn 0.1147 0.6019 -0.7903\nvn -0.4779 0.8162 -0.3248\nvn -0.7181 0.0872 -0.6905\nvn -0.1905 0.5409 -0.8192\nvn -0.2028 0.6123 -0.7642\nvn -0.6481 0.5273 -0.5494\nvn -0.6844 0.3723 -0.6270\nvn -0.5345 0.1143 -0.8374\nvn -0.5435 0.1880 -0.8181\nvn 0.4781 -0.6003 -0.6412\nvn 0.0415 0.8286 -0.5583\nvn 0.8958 -0.0050 0.4444\nvn -0.4504 0.8031 -0.3902\nvn -0.1622 0.4657 -0.8700\nvn 0.4424 -0.8965 -0.0255\nvn 0.7087 -0.0343 -0.7047\nvn -0.5524 0.5534 -0.6234\nvn -0.2640 0.8089 -0.5254\nvn 0.1014 0.7474 -0.6566\nvn 0.2852 0.5696 -0.7708\nvn 0.3153 0.2658 -0.9110\nvn 0.1059 0.3190 -0.9418\nvn -0.1480 0.7492 -0.6456\nvn 0.0527 0.5164 -0.8547\nvn -0.0598 0.6291 -0.7750\nvn 0.0990 0.6969 -0.7103\nvn -0.0574 -0.5987 -0.7989\nvn -0.2071 0.4234 -0.8819\nvn 0.4117 -0.7340 -0.5402\nvn -0.0184 0.1820 -0.9831\nvn 0.3104 0.2073 -0.9277\nvn -0.3835 0.6481 -0.6580\nvn 0.1699 -0.7928 -0.5854\nvn -0.2396 0.8281 -0.5067\nvn 0.0212 0.6680 -0.7439\nvn 0.2577 -0.6557 -0.7097\nvn -0.2522 0.9463 -0.2023\nvn 0.3896 0.6134 -0.6870\nvn -0.7087 -0.0202 -0.7052\nvn 0.0182 -0.9998 0.0130\nvn 0.3744 0.3938 -0.8395\nvn -0.1357 -0.5164 0.8456\nvn -0.1712 0.5303 -0.8303\nvn 0.2387 0.4368 -0.8673\nvn 0.1826 0.4168 -0.8904\nvn 0.3579 0.4662 -0.8091\nvn 0.2464 0.4948 -0.8333\nvn -0.2026 0.7409 -0.6403\nvn -0.1253 0.5538 -0.8231\nvn -0.0262 0.9900 -0.1389\nvn -0.1806 0.6644 -0.7252\nvn 0.4170 -0.8753 0.2451\nvn 0.7510 0.0545 -0.6580\nvn -0.0813 -0.8072 0.5847\nvn 0.4694 0.4054 -0.7844\nvn -0.2246 0.7999 -0.5565\nvn 0.3664 0.3647 -0.8560\nvn 0.0394 0.4248 -0.9044\nvn 0.1648 0.4280 -0.8886\nvn -0.2563 0.6072 -0.7521\nvn 0.4481 0.3236 -0.8334\nvn 0.0479 0.0226 -0.9986\nvn 0.4611 0.1964 -0.8653\nvn 0.3096 0.5696 -0.7614\nvn 0.1383 0.0017 -0.9904\nvn 0.6906 0.1037 -0.7158\nvn 0.7280 0.1065 -0.6772\nvn -0.2313 0.6276 -0.7434\nvn 0.5414 0.2063 -0.8151\nvn -0.2016 0.8236 -0.5301\nvn -0.1853 0.9413 -0.2823\nvn 0.7303 0.0517 0.6812\nvn 0.3073 0.2944 -0.9049\nvn -0.2161 0.9340 -0.2845\nvn -0.1894 0.5274 -0.8282\nvn 0.2892 0.3385 -0.8954\nvn -0.3141 0.6162 -0.7222\nvn -0.6164 0.7740 0.1448\nvn -0.2220 0.3835 -0.8965\nvn 0.4136 0.0217 -0.9102\nvn 0.6326 0.4650 -0.6194\nvn -0.0620 0.5588 -0.8270\nvn 0.1679 0.5435 -0.8225\nvn 0.0279 0.8621 -0.5059\nvn 0.3878 0.4849 -0.7839\nvn -0.6664 -0.7430 0.0622\nvn 0.2749 0.6753 -0.6844\nvn -0.0367 0.5850 -0.8102\nvn -0.0467 0.6098 -0.7912\nvn -0.2760 0.7170 -0.6401\nvn -0.1817 0.5144 -0.8381\nvn 0.6754 0.4541 -0.5811\nvn 0.2456 0.5128 -0.8227\nvn 0.5177 0.2858 -0.8064\nvn 0.1852 0.9117 -0.3667\nvn 0.1017 0.7708 -0.6289\nvn 0.2663 0.8882 -0.3745\nvn 0.3850 0.5555 -0.7370\nvn 0.7027 0.4766 -0.5283\nvn 0.4853 0.0918 -0.8695\nvn -0.2671 0.6644 -0.6980\nvn -0.3104 0.1666 -0.9359\nvn 0.1904 0.7897 -0.5831\nvn 0.1698 0.9530 -0.2509\nvn -0.0269 0.8208 -0.5706\nvn 0.5853 0.1695 -0.7929\nvn 0.0057 0.6112 -0.7915\nvn -0.1950 0.6088 -0.7690\nvn -0.1852 0.5111 -0.8393\nvn -0.5648 0.8244 0.0374\nvn -0.3278 0.8456 -0.4214\nvn 0.1105 0.9584 -0.2631\nvn 0.8257 0.3130 0.4693\nvn -0.0244 0.7004 -0.7133\nvn 0.3398 0.6446 -0.6848\nvn 0.7139 0.3967 -0.5770\nvn 0.4187 0.5112 -0.7506\nvn -0.1119 0.4504 -0.8858\nvn -0.2270 0.6215 -0.7498\nvn -0.4896 0.6996 -0.5205\nvn 0.3399 0.3158 -0.8858\nvn 0.7173 0.2973 -0.6302\nvn 0.4022 0.1446 -0.9040\nvn -0.3883 0.9038 -0.1801\nvn 0.1570 0.6230 -0.7663\nvn -0.0846 0.2965 -0.9513\nvn 0.0835 0.8876 -0.4530\nvn 0.3915 0.8355 -0.3855\nvn 0.0802 0.5780 -0.8121\nvn 0.1130 0.8964 -0.4286\nvn 0.9689 0.2026 0.1421\nvn -0.1706 0.7689 -0.6162\nvn -0.1705 0.7683 -0.6170\nvn 0.1259 0.4791 -0.8687\nvn 0.8639 0.3912 -0.3173\nvn 0.3856 0.1669 -0.9074\nvn -0.1287 0.8428 -0.5226\nvn -0.0495 0.7713 -0.6346\nvn -0.0859 0.7239 -0.6845\nvn 0.1757 0.7143 -0.6774\nvn 0.0516 0.7647 -0.6423\nvn 0.5817 0.4098 -0.7026\nvn 0.2316 0.8499 -0.4733\nvn -0.1487 0.7696 -0.6209\nvn -0.0448 0.5879 -0.8077\nvn 0.1345 0.4929 -0.8596\nvn 0.5937 0.4106 -0.6920\nvn -0.2052 0.8504 -0.4844\nvn -0.0958 0.8283 -0.5520\nvn 0.5806 -0.1635 -0.7976\nvn -0.5422 0.5433 -0.6410\nvn -0.3827 0.0426 0.9229\nvn 0.0493 0.9004 -0.4323\nvn 0.4359 0.2904 -0.8518\nvn 0.7483 0.5560 -0.3618\nvn 0.7661 0.4540 -0.4550\nvn -0.1888 0.3124 -0.9310\nvn 0.0278 0.2817 -0.9591\nvn 0.6207 0.3193 -0.7160\nvn 0.0020 0.2580 -0.9661\nvn 0.1594 0.8255 -0.5415\nvn -0.0737 0.6784 -0.7310\nvn 0.2444 0.6290 -0.7380\nvn -0.2455 0.5331 -0.8096\nvn 0.6120 0.1772 -0.7708\nvn -0.1226 0.8956 -0.4275\nvn -0.0772 0.8389 -0.5387\nvn -0.0158 0.6708 -0.7415\nvn -0.0495 0.5855 -0.8092\nvn -0.1049 0.5617 -0.8206\nvn -0.0367 0.9049 -0.4239\nvn 0.6290 0.1880 -0.7543\nvn -0.2349 0.9135 -0.3321\nvn -0.0081 0.8534 -0.5212\nvn -0.2562 0.7633 -0.5931\nvn -0.3742 -0.5424 -0.7522\nvn 0.3995 0.8288 -0.3918\nvn 0.2771 0.9246 -0.2615\nvn 0.1068 0.8552 -0.5071\nvn -0.0015 0.2301 -0.9732\nvn -0.1160 0.8229 -0.5563\nvn -0.4098 0.6769 -0.6114\nvn 0.2415 0.3956 -0.8861\nvn -0.0423 0.7258 -0.6866\nvn -0.3057 0.9218 -0.2386\nvn 0.1750 0.9432 -0.2823\nvn 0.5694 0.1163 -0.8138\nvn 0.1412 0.9581 -0.2494\nvn 0.0287 0.5363 -0.8435\nvn 0.0820 0.7215 -0.6875\nvn 0.0189 0.9053 -0.4243\nvn -0.0607 0.6562 -0.7522\nvn -0.3821 0.8559 -0.3484\nvn 0.0403 -0.7073 -0.7058\nvn 0.2406 0.8837 -0.4014\nvn -0.0536 0.6176 -0.7847\nvn 0.3271 0.8275 -0.4564\nvn -0.0629 0.5965 -0.8001\nvn 0.4761 -0.8794 0.0041\nvn -0.0754 0.0556 -0.9956\nvn 0.1139 0.9601 -0.2554\nvn 0.0665 0.6944 -0.7165\nvn 0.1621 0.4501 -0.8781\nvn 0.1707 0.3322 -0.9277\nvn -0.0696 0.8377 -0.5417\nvn 0.2328 0.6919 -0.6834\nvn 0.3056 -0.2379 0.9219\nvn -0.1158 0.9237 -0.3651\nvn -0.3353 0.7305 -0.5949\nvn 0.2809 0.8233 -0.4933\nvn 0.1465 0.4232 -0.8941\nvn 0.1265 0.8473 -0.5159\nvn 0.1427 0.8014 -0.5808\nvn -0.1095 -0.9907 0.0803\nvn 0.2999 0.3929 -0.8693\nvn -0.0970 0.9474 -0.3050\nvn 0.2050 -0.0719 0.9761\nvn 0.1138 0.6974 0.7076\nvn 0.0338 0.6891 -0.7239\nvn 0.5385 0.2750 -0.7965\nvn 0.3641 0.5184 -0.7738\nvn 0.6015 0.3590 -0.7137\nvn -0.1673 0.6139 -0.7715\nvn -0.1577 0.5326 -0.8316\nvn -0.1607 0.5503 -0.8194\nvn -0.0438 0.7662 -0.6411\nvn 0.2325 0.2799 -0.9314\nvn 0.0364 0.9186 -0.3934\nvn 0.0644 -0.0623 -0.9960\nvn 0.3482 0.4849 -0.8023\nvn -0.3503 0.2615 -0.8994\nvn 0.5895 0.7616 -0.2693\nvn 0.2912 0.5617 -0.7744\nvn 0.6279 0.2884 -0.7229\nvn 0.4583 0.8076 -0.3711\nvn -0.2166 0.6403 -0.7370\nvn -0.5197 0.4573 -0.7217\nvn -0.3754 0.7296 -0.5716\nvn 0.2115 0.9124 -0.3504\nvn 0.2660 0.4952 -0.8271\nvn 0.0202 0.6189 -0.7852\nvn -0.0858 0.4772 -0.8746\nvn 0.1471 0.5692 -0.8090\nvn -0.4221 0.6347 -0.6473\nvn -0.2542 0.5692 -0.7819\nvn -0.6432 0.2177 -0.7341\nvn -0.1689 0.4368 -0.8836\nvn -0.3490 0.2409 -0.9056\nvn -0.0129 0.7116 -0.7025\nvn 0.1771 0.9413 -0.2874\nvn 0.2216 0.5084 -0.8321\nvn 0.0718 0.8136 -0.5770\nvn -0.0947 0.9423 -0.3212\nvn 0.7459 0.2830 -0.6030\nvn -0.0470 0.6324 -0.7732\nvn 0.2733 0.3666 -0.8893\nvn 0.2478 0.5582 -0.7918\nvn 0.6898 0.6129 -0.3854\nvn 0.2322 0.6683 -0.7067\nvn 0.4966 0.7028 -0.5093\nvn -0.1858 0.6272 -0.7564\nvn 0.3575 0.4665 -0.8090\nvn -0.0830 0.6042 -0.7925\nvn -0.0511 0.7412 -0.6693\nvn -0.3797 0.5352 -0.7546\nvn 0.3326 -0.9381 0.0964\nvn -0.0051 0.8993 -0.4372\nvn -0.3581 0.8366 -0.4146\nvn -0.6309 0.7636 -0.1376\nvn 0.3486 0.4334 -0.8310\nvn 0.2983 0.2756 -0.9138\nvn -0.6391 -0.7387 -0.2143\nvn 0.3677 0.8393 -0.4005\nvn 0.3201 0.6596 -0.6801\nvn 0.4670 0.5935 -0.6555\nvn 0.0138 0.6215 -0.7833\nvn -0.0159 0.5045 -0.8632\nvn 0.0222 0.7629 -0.6461\nvn 0.3170 0.3378 -0.8862\nvn -0.0050 0.7621 -0.6474\nvn 0.3853 0.4084 -0.8275\nvn -0.4997 -0.7873 -0.3612\nvn -0.3041 0.3030 -0.9032\nvn -0.3540 0.7612 -0.5434\nvn -0.2613 0.9086 -0.3258\nvn 0.5115 0.2682 -0.8164\nvn 0.1072 0.6723 -0.7325\nvn 0.2623 0.7276 -0.6339\nvn 0.0041 0.8976 -0.4407\nvn 0.8804 -0.4694 -0.0676\nvn -0.6343 0.3194 -0.7040\nvn 0.3675 0.2458 -0.8970\nvn -0.0689 0.1451 -0.9870\nvn -0.2855 0.3156 -0.9049\nvn -0.2574 -0.1034 -0.9608\nvn -0.4892 0.3476 -0.7999\nvn -0.4150 0.0734 -0.9069\nvn 0.0278 -0.9747 -0.2216\nvn -0.2173 -0.2696 -0.9382\nvn -0.3975 -0.0395 -0.9167\nvn -0.3963 0.3616 -0.8439\nvn -0.3461 0.3238 -0.8805\nvn -0.4374 0.3601 -0.8240\nvn 0.0431 0.7559 0.6533\nvn -0.0781 0.0523 -0.9956\nvn -0.4651 0.0564 -0.8835\nvn -0.4154 0.5280 -0.7407\nvn -0.3675 -0.0643 -0.9278\nvn -0.3355 0.3133 -0.8884\nvn 0.6378 -0.1516 -0.7551\nvn 0.5305 -0.6780 -0.5088\nvn -0.5646 -0.0721 -0.8222\nvn -0.5857 0.1418 -0.7980\nvn 0.0817 -0.8702 -0.4859\nvn 0.5785 -0.1506 -0.8016\nvn -0.5768 -0.7856 -0.2240\nvn -0.7042 -0.0062 -0.7100\nvn -0.4113 0.2821 -0.8667\nvn -0.5660 -0.6539 -0.5020\nvn 0.4166 0.0162 -0.9090\nvn -0.2664 0.7633 -0.5885\nvn -0.0626 0.0578 -0.9964\nvn -0.1492 0.3070 -0.9399\nvn -0.3632 0.0792 -0.9283\nvn -0.4643 0.2453 -0.8510\nvn 0.4066 -0.6906 0.5981\nvn 0.5199 -0.3210 -0.7917\nvn -0.4375 -0.0329 -0.8986\nvn -0.5631 -0.6777 -0.4729\nvn 0.3965 -0.2718 -0.8769\nvn 0.3101 -0.0512 -0.9493\nvn -0.2809 -0.4507 -0.8473\nvn 0.0109 -0.9992 -0.0389\nvn -0.6911 -0.7227 -0.0044\nvn -0.4032 -0.3365 -0.8510\nvn -0.5707 0.2578 -0.7796\nvn -0.6588 0.7014 -0.2721\nvn 0.3799 -0.7118 -0.5908\nvn -0.7426 -0.3811 -0.5507\nvn 0.6785 -0.0765 -0.7306\nvn -0.3356 0.3533 -0.8732\nvn 0.2725 0.1107 -0.9558\nvn 0.3134 -0.5280 -0.7893\nvn 0.3685 -0.2870 -0.8842\nvn 0.0515 0.1464 -0.9879\nvn 0.2584 0.2209 -0.9404\nvn -0.4076 -0.8355 -0.3686\nvn -0.1730 0.2318 -0.9573\nvn -0.5329 -0.6047 -0.5918\nvn 0.5378 -0.6802 -0.4981\nvn -0.1389 0.2052 -0.9688\nvn -0.4610 -0.5246 -0.7157\nvn -0.8850 -0.0341 -0.4642\nvn -0.1090 0.9859 -0.1268\nvn -0.3799 -0.6341 -0.6735\nvn -0.5759 -0.5835 -0.5726\nvn 0.3601 -0.7863 -0.5020\nvn 0.2847 -0.5455 -0.7883\nvn 0.1519 -0.1625 -0.9749\nvn -0.5469 0.0577 -0.8352\nvn 0.0832 -0.5898 -0.8032\nvn -0.0954 -0.3235 -0.9414\nvn -0.3617 -0.4019 -0.8412\nvn 0.8307 0.3665 -0.4191\nvn -0.1323 -0.7175 -0.6839\nvn 0.1116 -0.1669 -0.9796\nvn -0.0611 0.3458 -0.9363\nvn -0.0744 0.4022 -0.9125\nvn -0.0321 0.4818 -0.8757\nvn 0.2496 -0.9276 -0.2780\nvn 0.0520 0.1274 -0.9905\nvn 0.0885 -0.9044 -0.4174\nvn -0.0695 0.7287 -0.6813\nvn 0.0524 -0.8849 -0.4628\nvn -0.0743 -0.9954 -0.0606\nvn -0.0175 0.1544 -0.9879\nvn -0.6916 0.3147 -0.6501\nvn -0.8199 -0.0928 -0.5650\nvn 0.1033 -0.5200 -0.8479\nvn -0.0160 -0.0779 -0.9968\nvn -0.1012 0.2937 -0.9505\nvn -0.1930 -0.0319 -0.9807\nvn 0.0940 -0.4492 -0.8885\nvn -0.3555 0.3061 -0.8831\nvn -0.8297 0.0755 -0.5531\nvn -0.5221 -0.4171 -0.7439\nvn -0.4887 -0.0620 -0.8702\nvn -0.4975 -0.0419 -0.8665\nvn -0.1643 -0.1515 -0.9747\nvn -0.4275 -0.6877 -0.5867\nvn -0.5990 -0.7017 -0.3857\nvn -0.1152 0.2310 -0.9661\nvn 0.1099 -0.6280 -0.7704\nvn 0.0304 -0.0061 -0.9995\nvn 0.0272 -0.9992 -0.0306\nvn -0.8170 0.5051 -0.2782\nvn -0.7586 0.2977 -0.5796\nvn -0.1633 -0.1465 -0.9756\nvn 0.3715 -0.6315 -0.6806\nvn 0.2617 -0.5054 -0.8222\nvn 0.2927 -0.4226 -0.8578\nvn 0.0143 0.2104 -0.9775\nvn 0.1475 0.3868 -0.9103\nvn 0.1058 -0.0315 -0.9939\nvn -0.5385 -0.0754 -0.8392\nvn -0.5974 0.1570 -0.7865\nvn -0.4824 -0.6181 -0.6207\nvn -0.1563 0.0222 -0.9875\nvn -0.4010 -0.0422 -0.9151\nvn -0.1396 0.0712 -0.9876\nvn -0.0958 0.1960 -0.9759\nvn -0.2762 0.1604 -0.9476\nvn -0.4138 0.5280 -0.7416\nvn -0.3820 0.3750 -0.8447\nvn -0.3488 0.1349 -0.9274\nvn 0.2886 0.1654 -0.9431\nvn -0.5766 0.1867 -0.7954\nvn -0.3704 -0.1023 -0.9232\nvn -0.0997 0.0637 -0.9930\nvn -0.6010 -0.4800 -0.6390\nvn -0.0849 0.0071 -0.9964\nvn -0.0208 -0.1406 -0.9898\nvn -0.5282 0.1285 -0.8394\nvn -0.0307 -0.0882 -0.9956\nvn -0.7634 -0.5912 -0.2602\nvn 0.5065 0.0656 -0.8598\nvn -0.1938 0.0649 -0.9789\nvn -0.2825 0.1976 -0.9387\nvn -0.2921 0.3287 -0.8981\nvn -0.0910 -0.2578 -0.9619\nvn -0.1891 0.0697 -0.9795\nvn -0.1641 0.0879 -0.9825\nvn 0.2223 -0.7125 -0.6655\nvn 0.1173 -0.1109 -0.9869\nvn 0.1109 -0.0830 -0.9904\nvn -0.1871 0.1353 -0.9730\nvn -0.3007 -0.0057 -0.9537\nvn 0.0619 0.4287 -0.9013\nvn -0.2542 0.1672 -0.9526\nvn 0.1303 -0.2308 -0.9642\nvn 0.0393 -0.9826 0.1816\nvn -0.1213 0.4117 -0.9032\nvn -0.3404 0.3433 -0.8754\nvn -0.7499 0.0716 -0.6576\nvn -0.6299 0.1819 -0.7551\nvn -0.7987 -0.1142 -0.5908\nvn -0.8340 -0.2429 -0.4954\nvn 0.1367 -0.5413 -0.8296\nvn -0.4968 0.8517 0.1666\nvn -0.2339 -0.1735 -0.9566\nvn -0.2121 0.2694 -0.9394\nvn 0.0918 -0.5260 -0.8455\nvn 0.0072 -0.1282 -0.9917\nvn -0.0175 -0.1581 -0.9873\nvn -0.4515 0.3448 -0.8230\nvn -0.5948 0.1184 -0.7951\nvn -0.0473 -0.0858 -0.9952\nvn -0.0315 -0.3456 -0.9378\nvn 0.1508 -0.3838 -0.9110\nvn 0.1543 -0.3971 -0.9047\nvn 0.3826 0.5115 0.7694\nvn 0.5597 -0.3899 -0.7312\nvn 0.2736 -0.8790 -0.3905\nvn 0.1474 -0.4823 -0.8635\nvn -0.6823 -0.2008 -0.7030\nvn -0.1815 0.1498 -0.9719\nvn 0.5168 -0.3502 -0.7812\nvn 0.1622 -0.0481 -0.9856\nvn 0.3823 0.5786 -0.7205\nvn 0.6078 -0.7886 -0.0935\nvn 0.2040 -0.6878 0.6966\nvn -0.0134 -0.9999 0.0079\nvn -0.6565 0.3423 -0.6722\nvn -0.0544 0.4532 -0.8897\nvn -0.6128 -0.0687 -0.7872\nvn 0.3094 -0.7497 -0.5850\nvn 0.2281 -0.4824 -0.8457\nvn -0.6472 -0.2018 -0.7351\nvn -0.3067 0.1816 -0.9343\nvn 0.3555 0.0425 -0.9337\nvn 0.3687 -0.0310 -0.9290\nvn 0.4170 0.4775 -0.7733\nvn 0.1795 -0.2277 -0.9570\nvn -0.3662 0.0841 -0.9267\nvn 0.4785 -0.4129 -0.7750\nvn -0.4176 -0.0191 -0.9084\nvn -0.2598 -0.4605 -0.8488\nvn -0.3787 -0.5646 -0.7333\nvn -0.5703 0.2575 -0.7800\nvn 0.1026 -0.9025 -0.4184\nvn -0.0079 -0.4437 -0.8961\nvn -0.0149 -0.4530 -0.8914\nvn -0.1096 -0.8463 -0.5214\nvn 0.2089 -0.3717 -0.9046\nvn -0.6609 -0.3651 -0.6557\nvn -0.6473 0.2830 -0.7078\nvn -0.2685 -0.7487 -0.6061\nvn -0.1082 -0.5796 -0.8077\nvn -0.0810 0.2922 -0.9529\nvn -0.4555 -0.2710 -0.8480\nvn 0.6208 -0.0694 -0.7809\nvn -0.1114 -0.7653 -0.6340\nvn -0.2300 -0.2114 -0.9500\nvn -0.3337 -0.2720 -0.9026\nvn -0.2758 -0.6617 -0.6972\nvn -0.4811 -0.8764 -0.0206\nvn -0.4453 -0.4408 -0.7794\nvn -0.9818 0.1516 0.1144\nvn 0.1962 -0.4658 -0.8629\nvn -0.4553 0.7592 0.4650\nvn -0.5476 -0.3744 -0.7483\nvn -0.2951 -0.2606 -0.9192\nvn -0.4140 -0.2908 -0.8625\nvn -0.1845 -0.5249 -0.8309\nvn 0.7288 0.1757 -0.6619\nvn 0.6599 -0.2152 -0.7199\nvn 0.5530 -0.0003 -0.8332\nvn 0.0572 -0.1327 -0.9895\nvn -0.3474 0.2048 -0.9151\nvn -0.5141 0.4783 -0.7120\nvn -0.0337 -0.6400 -0.7676\nvn -0.5098 0.4541 -0.7307\nvn -0.6413 -0.6262 -0.4434\nvn -0.3356 0.3175 -0.8869\nvn -0.1905 -0.7902 -0.5825\nvn 0.2532 -0.6244 -0.7389\nvn 0.2430 -0.4590 -0.8546\nvn -0.0177 -0.9337 0.3576\nvn -0.8111 0.2037 -0.5482\nvn 0.5753 0.1576 -0.8026\nvn 0.4124 -0.7732 -0.4817\nvn -0.3335 -0.2716 -0.9028\nvn -0.5543 -0.2636 -0.7894\nvn -0.3805 -0.4504 -0.8077\nvn 0.5509 0.1364 -0.8234\nvn -0.0248 -0.2072 -0.9780\nvn -0.5080 -0.6500 -0.5652\nvn 0.4923 -0.1646 -0.8547\nvn 0.6583 0.0875 -0.7476\nvn -0.3621 0.1469 0.9205\nvn 0.2174 -0.9216 -0.3214\nvn -0.0286 -0.2761 -0.9607\nvn -0.1494 -0.5061 -0.8494\nvn -0.2591 -0.3035 -0.9169\nvn 0.1415 -0.3970 -0.9068\nvn -0.5939 -0.1999 -0.7793\nvn -0.4052 -0.6112 -0.6799\nvn 0.2335 0.0433 -0.9714\nvn 0.2822 -0.6618 -0.6946\nvn -0.4730 -0.2390 0.8480\nvn -0.6878 -0.0977 -0.7193\nvn -0.0238 0.1251 0.9919\nvn 0.6657 -0.2094 -0.7163\nvn 0.5385 0.0574 -0.8406\nvn -0.9627 0.0192 -0.2699\nvn 0.9200 -0.1313 -0.3693\nvn -0.0591 -0.2408 -0.9688\nvn 0.1004 0.0880 -0.9911\nvn -0.0494 -0.6830 -0.7288\nvn -0.0117 -0.9984 0.0558\nvn 0.5081 -0.4890 -0.7090\nvn 0.5390 -0.2297 -0.8104\nvn 0.8061 -0.2750 -0.5240\nvn 0.0475 -0.2531 -0.9663\nvn -0.0435 -0.0127 -0.9990\nvn 0.6499 -0.2587 -0.7146\nvn 0.5199 -0.0463 -0.8530\nvn 0.4076 0.0886 -0.9088\nvn -0.2906 0.1339 -0.9474\nvn -0.1706 0.4225 -0.8902\nvn -0.3841 -0.2731 -0.8820\nvn 0.2384 0.0634 -0.9691\nvn 0.3760 -0.7368 -0.5619\nvn -0.5501 0.2174 -0.8063\nvn 0.3353 0.0483 -0.9409\nvn -0.6796 0.4181 -0.6027\nvn -0.2223 0.0399 -0.9742\nvn 0.1755 -0.9801 -0.0932\nvn 0.4825 0.0144 -0.8758\nvn 0.1506 -0.4646 -0.8726\nvn 0.1088 0.2269 -0.9678\nvn 0.2304 0.0568 -0.9714\nvn -0.7757 -0.5860 -0.2342\nvn -0.7375 -0.1752 -0.6522\nvn -0.4361 -0.2295 -0.8701\nvn -0.2499 -0.3125 -0.9165\nvn -0.5439 -0.7489 -0.3786\nvn -0.3559 0.4368 -0.8262\nvn 0.0217 -0.1136 -0.9933\nvn -0.5437 -0.6882 -0.4803\nvn -0.5687 0.3954 -0.7213\nvn 0.3717 -0.6379 -0.6744\nvn 0.6501 -0.4424 -0.6177\nvn 0.6722 -0.1168 -0.7311\nvn 0.7468 -0.1864 -0.6383\nvn 0.7743 -0.1960 -0.6016\nvn 0.4934 -0.0470 -0.8686\nvn 0.0265 -0.3521 -0.9356\nvn -0.0554 -0.4367 -0.8979\nvn 0.0242 -0.2932 -0.9557\nvn -0.0687 -0.2548 -0.9645\nvn -0.2128 -0.1063 -0.9713\nvn 0.0220 -0.6169 -0.7867\nvn 0.7985 0.4583 -0.3903\nvn 0.4530 -0.4431 -0.7736\nvn 0.5248 -0.4901 -0.6960\nvn 0.3759 0.0862 -0.9227\nvn 0.6137 0.0102 -0.7895\nvn 0.6131 0.1083 -0.7826\nvn 0.3368 0.0666 -0.9392\nvn 0.3851 0.1476 -0.9110\nvn 0.3227 0.0919 -0.9420\nvn -0.5157 0.0191 -0.8565\nvn -0.3806 -0.4081 -0.8298\nvn 0.0458 0.1964 -0.9795\nvn -0.7093 0.5028 -0.4941\nvn -0.8735 -0.2698 -0.4052\nvn -0.3275 -0.7749 -0.5406\nvn -0.2507 0.1644 -0.9540\nvn -0.5281 -0.0589 -0.8471\nvn -0.2467 -0.7547 -0.6079\nvn -0.7992 0.4947 -0.3413\nvn 0.3962 -0.6386 -0.6597\nvn 0.5362 -0.0863 -0.8397\nvn 0.4536 -0.0386 -0.8904\nvn 0.0125 -0.9726 0.2323\nvn 0.5942 -0.7112 -0.3756\nvn -0.4476 0.3030 -0.8413\nvn -0.0084 0.1453 -0.9894\nvn 0.4767 -0.4306 -0.7663\nvn 0.4825 -0.4149 -0.7714\nvn 0.2565 -0.6779 -0.6890\nvn 0.3319 0.1009 -0.9379\nvn 0.4216 -0.2910 -0.8589\nvn 0.4620 -0.2341 -0.8555\nvn 0.4305 -0.1787 -0.8847\nvn 0.4634 0.0174 -0.8860\nvn 0.4468 0.0421 -0.8936\nvn -0.4786 0.8726 0.0981\nvn -0.1412 -0.1117 -0.9837\nvn -0.2607 -0.9521 -0.1598\nvn 0.5374 -0.6410 -0.5481\nvn 0.1390 -0.1961 -0.9707\nvn -0.4446 0.3498 -0.8246\nvn -0.0096 -0.8271 -0.5619\nvn -0.8188 0.5013 -0.2796\nvn -0.5777 -0.0440 -0.8151\nvn -0.6226 -0.4272 -0.6556\nvn 0.6593 -0.0589 -0.7495\nvn 0.2752 -0.5065 -0.8171\nvn 0.2571 -0.1143 -0.9596\nvn 0.4472 0.1883 -0.8744\nvn -0.6175 -0.1063 -0.7793\nvn -0.1146 -0.8415 -0.5279\nvn -0.1099 -0.5714 -0.8133\nvn 0.2097 -0.6428 -0.7367\nvn 0.2172 -0.5528 -0.8045\nvn 0.3133 -0.1549 -0.9369\nvn 0.3157 -0.1365 -0.9390\nvn 0.4378 0.2021 -0.8760\nvn 0.4383 0.1995 -0.8764\nvn 0.4191 0.1505 -0.8954\nvn 0.4641 -0.0308 -0.8852\nvn 0.4146 0.1175 -0.9024\nvn 0.0476 -0.1281 -0.9906\nvn -0.0893 -0.1037 0.9906\nvn 0.0851 0.1706 -0.9817\nvn -0.7432 0.1471 -0.6527\nvn 0.1864 -0.9748 0.1225\nvn 0.1442 0.0063 -0.9895\nvn 0.3955 -0.2664 -0.8790\nvn 0.3723 -0.2565 -0.8920\nvn 0.3638 -0.1183 -0.9239\nvn 0.3544 -0.1365 -0.9251\nvn -0.2121 -0.2109 -0.9542\nvn -0.1709 -0.4855 -0.8574\nvn 0.0260 0.1856 -0.9823\nvn -0.2201 0.2995 -0.9283\nvn -0.3592 0.4813 -0.7996\nvn -0.1504 0.1118 -0.9823\nvn 0.4399 -0.0079 -0.8980\nvn 0.5355 -0.5445 -0.6456\nvn 0.4734 -0.4210 -0.7737\nvn 0.5870 -0.3997 -0.7041\nvn 0.2040 -0.5481 -0.8112\nvn 0.4383 -0.2047 -0.8752\nvn 0.4275 0.0058 -0.9040\nvn 0.4847 -0.0469 -0.8734\nvn 0.4621 0.1303 -0.8772\nvn 0.4228 0.0366 -0.9055\nvn 0.7826 -0.2763 -0.5578\nvn -0.6118 0.6652 -0.4280\nvn 0.2835 0.2771 -0.9181\nvn 0.1307 0.4658 -0.8752\nvn -0.2930 -0.1902 -0.9370\nvn -0.0356 0.2535 -0.9667\nvn -0.1992 -0.5296 -0.8245\nvn 0.3803 -0.4043 -0.8318\nvn 0.3628 -0.1921 -0.9118\nvn 0.1394 -0.4309 -0.8916\nvn 0.2489 -0.1180 -0.9613\nvn 0.2771 0.1498 -0.9491\nvn 0.2056 0.0373 -0.9779\nvn 0.4758 -0.0296 -0.8790\nvn 0.9210 0.3113 -0.2340\nvn -0.3724 0.5979 -0.7098\nvn 0.2146 -0.4369 -0.8735\nvn -0.3090 -0.4042 -0.8609\nvn 0.8928 0.3021 0.3341\nvn -0.2368 -0.1467 -0.9604\nvn -0.3092 0.2296 -0.9229\nvn -0.0846 -0.8423 0.5323\nvn -0.1333 0.2814 -0.9503\nvn -0.2002 -0.4898 -0.8486\nvn -0.4182 0.2901 -0.8608\nvn -0.1928 -0.2098 -0.9586\nvn 0.4784 -0.4236 -0.7692\nvn 0.4064 -0.2197 -0.8869\nvn 0.2242 -0.3345 -0.9153\nvn 0.3116 0.0601 -0.9483\nvn 0.3608 0.2275 -0.9045\nvn 0.3234 -0.1889 -0.9272\nvn -0.0885 0.4776 -0.8741\nvn -0.0430 0.2891 -0.9563\nvn -0.0229 0.0081 -0.9997\nvn 0.0142 -0.3418 -0.9397\nvn -0.2606 0.1263 -0.9572\nvn -0.5243 -0.1357 -0.8407\nvn -0.1620 -0.4212 -0.8924\nvn -0.1756 0.3917 -0.9032\nvn -0.5418 -0.2767 -0.7937\nvn 0.1555 -0.4437 -0.8826\nvn 0.1898 -0.2187 -0.9572\nvn 0.1185 -0.1034 -0.9876\nvn 0.0162 -0.3990 -0.9168\nvn 0.2935 0.1827 -0.9383\nvn 0.3481 0.1951 -0.9169\nvn 0.2589 -0.0655 -0.9637\nvn 0.1867 -0.0343 -0.9818\nvn -0.5291 -0.0310 -0.8480\nvn -0.4709 -0.0564 -0.8804\nvn -0.1586 0.4588 -0.8743\nvn -0.7857 -0.4136 0.4600\nvn 0.7077 0.0794 -0.7021\nvn 0.3254 -0.1869 -0.9269\nvn 0.1383 -0.4313 -0.8915\nvn 0.1164 -0.1519 -0.9815\nvn 0.1774 -0.6731 -0.7180\nvn 0.2741 -0.5765 -0.7698\nvn 0.3439 -0.3231 -0.8816\nvn 0.2694 -0.2440 -0.9316\nvn 0.2884 -0.4017 -0.8692\nvn 0.3452 0.1184 -0.9310\nvn 0.0163 -0.3992 -0.9167\nvn -0.2482 -0.2037 -0.9470\nvn -0.1857 0.1485 -0.9713\nvn -0.6780 0.3579 -0.6421\nvn -0.3739 0.0255 -0.9271\nvn -0.2658 -0.3644 -0.8925\nvn -0.5650 -0.2280 -0.7929\nvn 0.3275 -0.3684 -0.8701\nvn 0.1922 0.0315 -0.9809\nvn 0.6666 0.0036 -0.7454\nvn 0.4109 0.0734 -0.9087\nvn 0.6648 -0.2145 -0.7156\nvn 0.4199 0.1644 -0.8926\nvn 0.4682 0.2161 -0.8568\nvn 0.4434 0.0099 -0.8963\nvn -0.2547 -0.5164 -0.8176\nvn -0.0553 -0.4440 -0.8943\nvn -0.0608 -0.9964 0.0597\nvn 0.2354 0.2594 -0.9366\nvn 0.2172 0.1793 -0.9595\nvn -0.6499 0.1727 -0.7402\nvn -0.0115 -0.3720 -0.9282\nvn 0.0695 -0.1017 -0.9924\nvn 0.0074 -0.4527 -0.8916\nvn 0.0723 -0.6396 -0.7653\nvn 0.3793 -0.0430 -0.9243\nvn 0.3652 -0.1091 -0.9245\nvn -0.7939 -0.2739 -0.5428\nvn -0.2552 0.0721 -0.9642\nvn -0.3337 0.0244 -0.9424\nvn -0.0392 -0.2602 -0.9648\nvn -0.2360 0.0685 -0.9693\nvn -0.5391 0.1934 -0.8198\nvn 0.2274 0.2481 -0.9417\nvn -0.3839 -0.1902 -0.9036\nvn -0.1794 0.0051 -0.9838\nvn 0.3529 -0.4876 -0.7986\nvn 0.4522 0.3548 -0.8183\nvn 0.0317 -0.4451 -0.8949\nvn 0.2102 0.0738 -0.9749\nvn 0.1846 -0.3762 -0.9080\nvn 0.2337 -0.4238 -0.8751\nvn 0.3376 -0.3636 -0.8682\nvn 0.4795 -0.1405 -0.8662\nvn 0.5748 0.0978 -0.8124\nvn 0.4203 0.0286 -0.9069\nvn 0.0280 -0.9996 0.0086\nvn 0.3767 -0.9242 -0.0629\nvn -0.0804 0.0313 -0.9963\nvn 0.0107 -0.2401 -0.9707\nvn -0.3468 -0.3035 -0.8875\nvn 0.1974 -0.8540 -0.4813\nvn -0.0796 -0.3695 -0.9258\nvn 0.1453 -0.4666 -0.8725\nvn 0.3169 0.1243 -0.9403\nvn 0.3763 0.0215 -0.9263\nvn 0.3224 -0.3750 -0.8692\nvn 0.4175 0.1641 -0.8937\nvn 0.4054 0.1514 -0.9015\nvn -0.3084 0.2313 -0.9227\nvn 0.0712 0.0914 -0.9933\nvn -0.5438 0.2749 -0.7929\nvn 0.2254 0.1204 -0.9668\nvn 0.6032 0.0427 -0.7965\nvn 0.1934 -0.5625 -0.8039\nvn 0.2022 0.0036 -0.9793\nvn 0.0487 -0.3849 -0.9217\nvn 0.2313 -0.5633 -0.7932\nvn -0.0393 -0.3231 -0.9456\nvn 0.3236 -0.1607 -0.9325\nvn 0.1053 0.0818 -0.9911\nvn 0.2350 -0.0277 -0.9716\nvn -0.0953 -0.7741 -0.6259\nvn -0.6244 -0.3274 -0.7092\nvn 0.0571 0.0252 -0.9980\nvn -0.4298 0.4727 -0.7693\nvn -0.6157 0.0494 -0.7864\nvn -0.2197 -0.9591 -0.1786\nvn 0.1973 -0.3203 -0.9265\nvn 0.1523 0.0703 -0.9858\nvn 0.0791 -0.3325 -0.9398\nvn 0.2463 -0.6807 -0.6899\nvn -0.1208 -0.2863 -0.9505\nvn 0.0249 0.0074 -0.9997\nvn 0.3226 -0.3751 -0.8690\nvn 0.2322 -0.1160 -0.9657\nvn 0.2255 -0.1030 -0.9688\nvn 0.2185 0.1760 -0.9598\nvn -0.5826 0.2997 -0.7555\nvn -0.2042 -0.2195 -0.9540\nvn -0.9530 0.0655 -0.2956\nvn 0.1727 -0.2171 -0.9607\nvn 0.3932 -0.6078 -0.6899\nvn 0.3587 -0.2993 -0.8842\nvn 0.1131 -0.2656 -0.9574\nvn 0.1231 -0.4347 -0.8921\nvn 0.0814 -0.3862 -0.9188\nvn 0.2525 -0.0265 -0.9672\nvn 0.3349 0.2486 -0.9089\nvn 0.2447 -0.0174 -0.9695\nvn -0.2509 0.0022 -0.9680\nvn 0.2288 0.1813 -0.9564\nvn 0.0984 0.4071 -0.9081\nvn 0.0498 0.3386 -0.9396\nvn 0.0362 -0.0148 -0.9992\nvn -0.3751 -0.2239 -0.8995\nvn -0.5383 0.0839 -0.8386\nvn 0.2696 0.2642 -0.9260\nvn 0.0053 -0.4154 -0.9096\nvn 0.3748 0.1630 -0.9127\nvn 0.3671 -0.3040 -0.8791\nvn 0.3587 -0.0809 -0.9300\nvn 0.4073 -0.3198 -0.8555\nvn 0.4020 -0.2468 -0.8817\nvn 0.5194 -0.1512 -0.8410\nvn 0.4634 -0.3461 -0.8158\nvn 0.3463 -0.2152 -0.9131\nvn 0.2864 0.1975 -0.9375\nvn 0.0859 0.0814 -0.9930\nvn -0.0290 0.0506 -0.9983\nvn -0.1482 0.5178 -0.8426\nvn -0.2997 0.4276 -0.8529\nvn -0.2588 0.0262 -0.9656\nvn 0.1432 -0.5885 -0.7957\nvn 0.1918 -0.7929 -0.5785\nvn 0.1698 -0.2188 -0.9609\nvn 0.1901 0.0266 -0.9814\nvn 0.3292 0.1787 -0.9272\nvn 0.2912 0.1531 -0.9443\nvn 0.3180 0.0193 -0.9479\nvn 0.2091 0.0327 -0.9773\nvn 0.3573 0.3006 -0.8843\nvn -0.2810 -0.4656 -0.8392\nvn -0.7797 -0.0960 0.6188\nvn -0.9727 0.2273 -0.0464\nvn 0.0234 0.3236 -0.9459\nvn 0.1370 0.4376 -0.8887\nvn -0.2495 0.5184 -0.8179\nvn -0.5537 -0.4735 -0.6850\nvn -0.3389 0.4350 -0.8342\nvn 0.0917 -0.6050 -0.7909\nvn 0.1210 -0.7910 -0.5998\nvn 0.0938 -0.7728 -0.6276\nvn 0.1961 0.0624 -0.9786\nvn 0.0537 -0.4738 -0.8790\nvn -0.1258 -0.6195 -0.7748\nvn 0.1353 -0.3917 -0.9101\nvn -0.1802 0.4927 -0.8513\nvn -0.4190 -0.2647 -0.8685\nvn 0.5901 0.1129 -0.7994\nvn -0.0102 0.0693 -0.9975\nvn -0.2368 0.3827 -0.8930\nvn 0.0397 -0.1187 -0.9921\nvn 0.1504 -0.1876 -0.9707\nvn 0.1628 0.0755 -0.9838\nvn 0.1003 -0.6019 -0.7923\nvn 0.1724 -0.4568 -0.8727\nvn 0.0183 -0.4528 -0.8914\nvn 0.0802 -0.2864 -0.9548\nvn 0.2388 0.2063 -0.9489\nvn 0.1461 -0.0582 -0.9875\nvn 0.5285 -0.1823 -0.8291\nvn 0.1963 0.3916 -0.8990\nvn 0.0200 -0.9993 -0.0309\nvn 0.0521 -0.5585 -0.8278\nvn 0.0801 -0.2338 -0.9690\nvn 0.0640 -0.3227 -0.9443\nvn 0.0357 -0.6817 -0.7308\nvn 0.2311 0.0727 -0.9702\nvn 0.1017 -0.3020 -0.9479\nvn 0.1304 -0.2719 -0.9535\nvn 0.2282 -0.3630 -0.9034\nvn 0.4655 0.1335 -0.8749\nvn 0.4807 0.2039 -0.8528\nvn 0.4042 0.3835 -0.8304\nvn 0.3646 0.1509 -0.9188\nvn -0.5503 -0.2593 -0.7937\nvn 0.1735 0.1988 -0.9646\nvn -0.6827 -0.4308 -0.5902\nvn -0.6343 0.0135 -0.7730\nvn 0.1950 0.1728 -0.9655\nvn 0.1796 0.0594 -0.9819\nvn 0.1794 -0.0529 -0.9824\nvn 0.2978 -0.7181 -0.6290\nvn 0.3482 -0.2883 -0.8920\nvn -0.0127 0.0272 -0.9996\nvn 0.1117 -0.2814 -0.9531\nvn 0.1395 -0.0607 -0.9884\nvn -0.3942 -0.6511 -0.6486\nvn -0.4150 -0.7553 -0.5072\nvn -0.3006 -0.2445 -0.9219\nvn -0.2721 -0.3570 -0.8936\nvn -0.4179 0.3461 -0.8400\nvn 0.0443 -0.0525 -0.9976\nvn -0.1005 0.0777 -0.9919\nvn 0.0743 -0.5224 -0.8495\nvn 0.1414 0.0256 -0.9896\nvn 0.2608 -0.2159 -0.9409\nvn 0.1786 -0.7475 -0.6398\nvn 0.0730 -0.2718 -0.9596\nvn 0.3606 -0.3223 -0.8753\nvn 0.1979 -0.3720 -0.9069\nvn 0.1634 0.0480 -0.9854\nvn 0.3761 -0.1674 -0.9113\nvn 0.2623 -0.2146 -0.9408\nvn 0.2428 -0.1711 -0.9549\nvn 0.3184 0.0352 -0.9473\nvn -0.4686 0.0580 -0.8815\nvn -0.6802 0.1059 -0.7254\nvn 0.1003 -0.3989 -0.9115\nvn -0.1599 0.2750 -0.9480\nvn 0.3883 -0.2061 -0.8982\nvn -0.5095 0.1428 0.8485\nvn -0.8523 -0.1529 -0.5001\nvn -0.3795 -0.1911 -0.9052\nvn 0.2252 -0.7581 -0.6121\nvn 0.0080 -0.4145 -0.9100\nvn 0.1943 -0.6113 -0.7672\nvn 0.0345 -0.2967 -0.9543\nvn 0.2110 -0.2631 -0.9414\nvn 0.3618 -0.3007 -0.8824\nvn 0.3849 -0.1696 -0.9072\nvn 0.3524 -0.0092 -0.9358\nvn 0.2089 0.2547 -0.9442\nvn 0.0688 0.0523 -0.9963\nvn -0.4140 -0.3367 -0.8457\nvn 0.0322 0.0608 -0.9976\nvn 0.0764 -0.2295 -0.9703\nvn 0.2637 -0.2544 -0.9305\nvn 0.3229 -0.3641 -0.8736\nvn 0.2115 0.1308 -0.9686\nvn 0.2097 -0.2766 -0.9378\nvn 0.9085 -0.4078 -0.0915\nvn -0.3464 0.0143 -0.9380\nvn -0.1872 0.2027 -0.9612\nvn 0.3055 0.2494 -0.9189\nvn 0.2102 0.2284 -0.9506\nvn 0.2116 -0.4431 -0.8711\nvn 0.0956 -0.1741 -0.9801\nvn 0.1049 -0.4712 -0.8758\nvn 0.1498 -0.0498 -0.9875\nvn 0.2398 -0.2259 -0.9442\nvn 0.2081 0.1131 -0.9715\nvn 0.0809 -0.1917 -0.9781\nvn 0.1490 0.2752 -0.9498\nvn 0.1458 0.3533 -0.9241\nvn 0.0156 0.2406 -0.9705\nvn -0.1496 0.0658 -0.9866\nvn 0.3709 -0.1517 -0.9162\nvn -0.4157 -0.3047 -0.8570\nvn -0.3737 -0.2593 -0.8906\nvn 0.3551 -0.2064 -0.9118\nvn 0.1351 -0.5085 -0.8504\nvn 0.1345 -0.3942 -0.9091\nvn -0.0508 -0.4167 -0.9076\nvn 0.1404 0.1027 -0.9847\nvn 0.0501 -0.0411 -0.9979\nvn 0.1421 0.2226 -0.9645\nvn -0.8165 0.5055 -0.2789\nvn -0.3079 -0.2513 -0.9176\nvn 0.2029 -0.9753 -0.0873\nvn -0.2245 -0.3644 -0.9038\nvn -0.2185 -0.2782 -0.9354\nvn 0.1103 0.0662 -0.9917\nvn 0.0350 -0.2622 -0.9644\nvn 0.0238 -0.8034 -0.5950\nvn 0.0350 -0.8112 -0.5837\nvn 0.2603 -0.1534 -0.9533\nvn 0.0323 -0.1654 -0.9857\nvn 0.1315 -0.3267 -0.9359\nvn 0.1316 0.3749 -0.9177\nvn 0.1528 0.2450 -0.9574\nvn -0.6938 -0.6671 -0.2713\nvn 0.0188 0.2390 -0.9708\nvn -0.0080 0.0520 -0.9986\nvn -0.4159 0.3347 -0.8456\nvn -0.9256 0.0914 -0.3674\nvn 0.1795 -0.0817 -0.9804\nvn 0.0609 -0.3294 -0.9422\nvn 0.1756 0.0398 -0.9837\nvn 0.0693 -0.2393 -0.9685\nvn 0.5026 -0.3086 -0.8076\nvn 0.2195 -0.0593 -0.9738\nvn 0.0158 -0.2274 -0.9737\nvn 0.4709 -0.7328 -0.4912\nvn -0.4474 -0.6719 -0.5903\nvn -0.1703 0.3578 -0.9181\nvn -0.4001 -0.4986 -0.7690\nvn 0.3882 0.1810 -0.9036\nvn -0.2387 0.3990 -0.8853\nvn -0.6828 0.2643 -0.6811\nvn 0.1507 -0.2677 -0.9516\nvn -0.1316 -0.7522 -0.6457\nvn -0.1242 -0.2695 -0.9550\nvn 0.0314 -0.4808 -0.8763\nvn 0.1142 -0.6615 -0.7412\nvn 0.1667 -0.2976 -0.9400\nvn -0.0282 -0.0296 -0.9992\nvn 0.1862 0.3956 -0.8993\nvn -0.2321 -0.1022 -0.9673\nvn -0.3610 -0.7549 -0.5476\nvn 0.1556 -0.4583 -0.8751\nvn 0.1126 0.0684 -0.9913\nvn 0.0391 -0.4480 -0.8932\nvn 0.2012 -0.0564 -0.9779\nvn 0.3628 -0.3430 -0.8664\nvn 0.1991 -0.0584 -0.9782\nvn 0.1117 -0.0243 -0.9934\nvn 0.2558 -0.0438 -0.9657\nvn -0.1357 0.2000 -0.9703\nvn 0.0302 0.9275 -0.3727\nvn -0.8092 0.4713 -0.3507\nvn 0.1110 -0.6497 -0.7521\nvn 0.1766 0.0733 -0.9815\nvn -0.8508 -0.4974 0.1694\nvn 0.4553 0.1399 -0.8793\nvn 0.1189 -0.8141 -0.5684\nvn 0.0700 0.3607 -0.9301\nvn 0.2521 -0.3678 -0.8951\nvn 0.0024 -0.4615 -0.8871\nvn -0.0300 -0.1599 -0.9867\nvn 0.3086 -0.2716 -0.9116\nvn 0.3136 -0.0165 -0.9494\nvn 0.3731 -0.3095 -0.8747\nvn 0.3218 -0.2372 -0.9166\nvn 0.1162 0.0806 -0.9899\nvn -0.1667 0.0041 -0.9860\nvn 0.1551 -0.0745 -0.9851\nvn -0.4898 0.2663 -0.8302\nvn 0.6326 0.0923 -0.7690\nvn -0.0608 -0.8340 -0.5483\nvn 0.0201 -0.0129 -0.9997\nvn -0.5481 -0.1475 -0.8233\nvn -0.5706 0.3940 -0.7206\nvn -0.1201 0.2126 -0.9697\nvn -0.0222 -0.9377 0.3467\nvn 0.3644 -0.9106 0.1949\nvn 0.1000 -0.1952 -0.9757\nvn 0.1670 0.0197 -0.9858\nvn -0.0734 -0.7538 -0.6530\nvn 0.0812 -0.6780 -0.7306\nvn -0.2733 -0.4614 -0.8440\nvn 0.3225 -0.3620 -0.8746\nvn 0.2514 -0.1177 -0.9607\nvn 0.3045 -0.2391 -0.9220\nvn -0.1913 0.1262 -0.9734\nvn -0.3614 -0.3539 -0.8626\nvn 0.0412 0.7554 0.6540\nvn -0.4014 0.5912 -0.6996\nvn 0.0432 0.0131 -0.9990\nvn -0.1212 -0.7718 -0.6242\nvn -0.0807 0.2956 -0.9519\nvn -0.4742 0.2311 -0.8496\nvn 0.2124 -0.2299 -0.9498\nvn -0.4389 -0.8580 -0.2667\nvn -0.5128 -0.4556 -0.7276\nvn -0.5176 0.1832 -0.8358\nvn -0.5847 -0.2724 -0.7642\nvn 0.3039 0.2491 -0.9196\nvn 0.2516 -0.2053 -0.9458\nvn 0.0860 0.1127 -0.9899\nvn -0.5828 -0.2409 -0.7761\nvn -0.3131 0.6470 -0.6952\nvn 0.0009 0.1476 -0.9890\nvn -0.0361 -0.6392 -0.7682\nvn -0.2665 0.2968 -0.9170\nvn -0.1264 0.4700 -0.8736\nvn -0.3290 -0.0392 -0.9435\nvn 0.7085 -0.6497 0.2756\nvn 0.7466 -0.6145 0.2551\nvn -0.7377 -0.3581 0.5723\nvn 0.2474 -0.1892 -0.9502\nvn -0.0678 -0.6616 -0.7468\nvn -0.1583 -0.5133 -0.8435\nvn -0.0211 -0.4563 -0.8896\nvn 0.1633 -0.3088 -0.9370\nvn 0.0976 -0.4734 -0.8754\nvn 0.2218 -0.1117 -0.9687\nvn 0.2200 -0.1694 -0.9607\nvn 0.1000 -0.1983 -0.9750\nvn -0.2216 -0.2711 -0.9367\nvn 0.1148 -0.3730 -0.9207\nvn 0.0627 -0.8773 -0.4758\nvn -0.2884 -0.3253 -0.9005\nvn -0.1031 -0.0513 -0.9934\nvn -0.7160 -0.1311 -0.6857\nvn 0.2160 -0.9625 0.1643\nvn 0.0128 -0.9969 0.0773\nvn 0.7326 -0.6765 0.0756\nvn -0.5173 -0.4723 -0.7137\nvn -0.5868 -0.2754 -0.7614\nvn -0.4345 -0.5786 -0.6903\nvn 0.2508 0.0530 -0.9666\nvn 0.1397 -0.4495 -0.8823\nvn -0.0159 -0.4308 -0.9023\nvn 0.0004 -0.4390 -0.8985\nvn 0.2028 -0.0564 -0.9776\nvn 0.1273 0.0942 -0.9874\nvn 0.0154 0.2909 -0.9566\nvn -0.1805 0.1835 -0.9663\nvn -0.3801 -0.6689 -0.6388\nvn 0.6139 -0.0631 0.7868\nvn -0.3237 -0.5203 -0.7902\nvn -0.0378 -0.0057 -0.9993\nvn -0.5364 -0.4068 -0.7394\nvn 0.2176 -0.9681 0.1244\nvn -0.5496 -0.2971 -0.7808\nvn -0.6630 -0.0131 -0.7485\nvn 0.3828 -0.3563 -0.8523\nvn -0.4706 0.7898 -0.3934\nvn -0.0650 -0.1323 -0.9891\nvn -0.0013 -0.2736 -0.9619\nvn -0.0730 -0.3115 -0.9474\nvn -0.5262 0.2468 -0.8138\nvn -0.3347 -0.7280 -0.5983\nvn -0.6497 0.2547 -0.7163\nvn -0.3803 0.0561 -0.9231\nvn -0.3011 -0.2450 -0.9216\nvn -0.4939 -0.3229 -0.8074\nvn -0.7661 0.1924 -0.6132\nvn -0.4795 0.4265 -0.7670\nvn 0.2408 -0.1352 -0.9611\nvn -0.8021 -0.0995 -0.5888\nvn 0.2816 0.0931 -0.9550\nvn -0.2145 -0.5013 -0.8383\nvn -0.3273 -0.4221 -0.8454\nvn -0.1310 -0.2131 -0.9682\nvn -0.2208 -0.3717 -0.9017\nvn -0.1971 -0.4016 -0.8943\nvn -0.2280 -0.4570 -0.8597\nvn -0.0668 0.0417 -0.9969\nvn 0.5292 0.3151 -0.7878\nvn -0.5282 0.4015 -0.7482\nvn -0.4302 -0.6423 -0.6343\nvn -0.6192 -0.1701 -0.7666\nvn -0.8444 0.4917 0.2128\nvn 0.0263 0.3351 -0.9418\nvn 0.3109 -0.7109 -0.6309\nvn -0.1468 -0.3178 -0.9367\nvn -0.1867 -0.4825 -0.8558\nvn -0.2977 -0.3916 -0.8706\nvn -0.3525 -0.4028 -0.8447\nvn -0.3532 -0.3536 -0.8662\nvn 0.1728 0.0785 -0.9818\nvn -0.1927 0.1252 -0.9732\nvn -0.1732 0.2269 -0.9584\nvn -0.1558 -0.5260 -0.8361\nvn -0.3613 0.3161 -0.8772\nvn -0.5312 -0.5810 -0.6166\nvn 0.2250 0.4311 -0.8738\nvn 0.0152 -0.9974 0.0707\nvn -0.0697 0.2108 -0.9750\nvn -0.5605 0.1942 -0.8051\nvn -0.5460 0.1221 -0.8289\nvn -0.8293 -0.0077 -0.5588\nvn 0.0035 -0.9985 0.0554\nvn -0.3807 -0.4727 -0.7948\nvn -0.3769 -0.4626 -0.8025\nvn -0.6595 -0.0662 -0.7488\nvn -0.6461 0.0079 -0.7632\nvn -0.2996 -0.7995 -0.5207\nvn -0.2036 -0.2892 -0.9354\nvn 0.0231 -0.0023 -0.9997\nvn -0.0192 0.2173 -0.9759\nvn 0.0160 -0.9974 0.0705\nvn -0.0456 0.1480 -0.9879\nvn -0.3937 -0.6588 -0.6411\nvn -0.4944 0.3317 -0.8034\nvn 0.4217 -0.8516 0.3112\nvn -0.9166 0.0205 -0.3993\nvn -0.4548 -0.2488 -0.8551\nvn -0.4814 -0.0434 -0.8754\nvn -0.4167 -0.3267 -0.8483\nvn -0.4204 0.1660 -0.8920\nvn 0.0152 0.1566 -0.9875\nvn 0.1051 0.3952 -0.9126\nvn 0.0176 0.0309 -0.9994\nvn -0.1126 0.4135 -0.9035\nvn -0.4893 -0.1318 -0.8621\nvn -0.3987 0.7977 -0.4524\nvn -0.3371 -0.9102 -0.2408\nvn -0.5636 0.0171 -0.8259\nvn 0.2393 -0.1355 -0.9615\nvn 0.1452 0.2585 -0.9550\nvn 0.0129 -0.0975 -0.9951\nvn -0.4076 -0.3755 -0.8324\nvn -0.4110 -0.3952 -0.8215\nvn -0.2659 -0.1460 -0.9529\nvn -0.0584 0.0091 -0.9983\nvn -0.0242 -0.5123 -0.8584\nvn -0.3274 0.3098 -0.8926\nvn -0.5608 0.0384 -0.8270\nvn -0.5108 0.1852 -0.8395\nvn -0.3672 0.1468 -0.9185\nvn -0.0977 -0.9872 0.1260\nvn -0.0224 -0.9970 -0.0738\nvn -0.4692 -0.7948 -0.3848\nvn -0.5781 -0.1352 -0.8047\nvn -0.7535 0.5799 -0.3097\nvn -0.5393 0.4427 -0.7164\nvn 0.1865 -0.2341 -0.9542\nvn -0.1257 0.1199 -0.9848\nvn -0.4590 -0.2220 -0.8602\nvn -0.5323 -0.3212 -0.7833\nvn -0.5067 -0.4393 -0.7418\nvn -0.5068 -0.4440 -0.7389\nvn -0.4253 -0.3741 -0.8241\nvn -0.2311 -0.0222 -0.9727\nvn -0.8005 -0.0820 -0.5936\nvn -0.6905 -0.4943 -0.5281\nvn -0.4497 0.1246 -0.8845\nvn 0.3728 0.1071 -0.9217\nvn -0.7622 0.5795 -0.2885\nvn 0.0318 -0.9994 -0.0164\nvn -0.2440 -0.4294 -0.8695\nvn -0.3942 -0.0559 -0.9173\nvn 0.0475 -0.9859 0.1606\nvn 0.1654 -0.0994 -0.9812\nvn -0.5254 -0.2441 -0.8151\nvn -0.6205 -0.3264 -0.7131\nvn -0.5542 -0.2751 -0.7856\nvn -0.5257 -0.3417 -0.7790\nvn 0.0793 0.1453 -0.9862\nvn 0.8313 -0.3308 -0.4468\nvn -0.0408 0.1323 -0.9904\nvn -0.1402 0.1018 -0.9849\nvn -0.4503 0.1799 -0.8746\nvn -0.4584 0.8038 -0.3793\nvn -0.1772 -0.5246 -0.8327\nvn -0.2029 -0.3503 -0.9144\nvn -0.3959 -0.0953 -0.9134\nvn 0.0140 -0.0073 -0.9999\nvn 0.0600 0.2346 -0.9702\nvn -0.0964 0.5646 -0.8197\nvn -0.3604 -0.0328 -0.9322\nvn -0.3954 0.1910 -0.8984\nvn -0.5264 -0.2452 -0.8141\nvn -0.5222 -0.2365 -0.8194\nvn -0.4540 0.0464 -0.8898\nvn -0.3441 0.1791 -0.9217\nvn -0.3067 0.3643 -0.8793\nvn -0.8036 -0.5539 -0.2178\nvn -0.5126 0.0316 -0.8580\nvn -0.1664 0.3465 -0.9232\nvn -0.0562 0.1440 -0.9880\nvn 0.8003 -0.5385 -0.2636\nvn -0.1444 0.0025 -0.9895\nvn 0.1571 -0.0990 -0.9826\nvn -0.1723 -0.7215 -0.6707\nvn -0.2740 0.3654 -0.8896\nvn 0.0036 -1.0000 -0.0058\nvn 0.0843 -0.8081 0.5830\nvn -0.3074 -0.6087 -0.7314\nvn 0.1096 0.3230 -0.9400\nvn -0.6875 -0.4229 -0.5903\nvn -0.3309 0.9430 -0.0363\nvn -0.6066 -0.3971 -0.6887\nvn -0.5494 -0.0136 -0.8355\nvn -0.3494 -0.0396 -0.9361\nvn -0.3515 0.1876 -0.9172\nvn 0.0540 -0.2458 -0.9678\nvn -0.6913 -0.3568 -0.6283\nvn -0.5060 -0.0335 -0.8619\nvn -0.4821 -0.3252 -0.8135\nvn 0.4525 -0.3145 -0.8345\nvn -0.1121 -0.9936 0.0171\nvn -0.5668 0.0869 -0.8193\nvn -0.5897 0.2630 -0.7636\nvn 0.5614 0.1628 -0.8114\nvn -0.7661 0.1042 -0.6342\nvn 0.1336 0.2936 -0.9466\nvn -0.0285 0.2747 -0.9611\nvn -0.1615 0.3424 -0.9256\nvn 0.0806 -0.9966 -0.0173\nvn 0.0558 -0.9984 -0.0006\nvn 0.1895 -0.0896 0.9778\nvn -0.2602 -0.8377 -0.4802\nvn -0.1312 -0.9882 -0.0787\nvn 0.4257 -0.8620 0.2752\nvn -0.5476 -0.8069 -0.2216\nvn 0.4351 -0.2650 0.8605\nvn -0.0567 -0.9937 -0.0963\nvn 0.0228 -0.9971 0.0720\nvn 0.4500 -0.8761 0.1730\nvn -0.5538 -0.8178 0.1569\nvn -0.5581 -0.8092 0.1836\nvn 0.2239 -0.9094 -0.3506\nvn 0.2669 -0.8824 -0.3874\nvn 0.1322 -0.9857 -0.1048\nvn -0.4463 -0.8034 0.3941\nvn -0.5362 -0.8274 -0.1670\nvn 0.0947 -0.7306 0.6762\nvn 0.2240 -0.9408 -0.2544\nvn 0.0040 -0.9959 0.0905\nvn 0.0311 -0.9941 0.1035\nvn -0.9331 -0.2289 0.2775\nvn -0.5334 -0.8218 -0.2003\nvn -0.5070 -0.7467 -0.4306\nvn 0.0344 -0.9945 -0.0992\nvn 0.1007 -0.8355 -0.5402\nvn 0.5521 -0.3442 0.7594\nvn -0.3097 -0.9501 -0.0361\nvn 0.0845 -0.9907 0.1065\nvn 0.0256 -0.9989 0.0390\nvn 0.0806 -0.9966 -0.0185\nvn 0.0876 -0.9921 0.0903\nvn -0.0105 -0.9984 -0.0557\nvn 0.0849 -0.9915 0.0982\nvn 0.1855 -0.8514 0.4906\nvn 0.4886 -0.8703 0.0623\nvn 0.0872 -0.9238 -0.3729\nvn 0.4114 -0.9015 0.1340\nvn 0.4206 -0.8638 0.2775\nvn -0.4188 0.2834 0.8627\nvn 0.1240 -0.9897 -0.0721\nvn -0.4498 -0.8913 0.0573\nvn 0.0090 -0.9812 -0.1926\nvn 0.0614 -0.9847 -0.1634\nvn -0.1243 -0.9815 -0.1455\nvn -0.4851 -0.8617 -0.1489\nvn 0.8318 -0.5370 0.1405\nvn 0.0129 -0.9986 0.0507\nvn 0.1794 -0.9687 -0.1716\nvn -0.5941 -0.7996 0.0876\nvn -0.4238 -0.8817 -0.2073\nvn -0.9647 0.1039 -0.2420\nvn 0.1274 -0.9890 -0.0746\nvn 0.1249 -0.9894 -0.0737\nvn 0.0682 -0.9943 0.0823\nvn -0.0973 -0.9870 -0.1281\nvn 0.0880 -0.9950 0.0470\nvn 0.0190 -0.9987 -0.0482\nvn -0.1936 -0.9810 0.0141\nvn 0.0339 -0.9989 -0.0328\nvn 0.1203 -0.9616 -0.2466\nvn -0.5834 -0.8107 -0.0495\nvn 0.0076 -0.9940 -0.1095\nvn -0.7023 0.0570 0.7096\nvn 0.3508 -0.8888 0.2948\nvn -0.0414 -0.9462 0.3208\nvn 0.0272 -0.9995 -0.0186\nvn 0.2038 -0.8639 0.4606\nvn 0.0479 -0.9930 0.1078\nvn 0.1441 0.0414 0.9887\nvn 0.2989 -0.7991 -0.5216\nvn 0.0075 -0.9999 -0.0110\nvn -0.1086 0.9521 0.2858\nvn 0.6829 -0.4435 0.5805\nvn -0.8729 -0.4503 0.1881\nvn 0.0351 -0.9981 -0.0511\nvn -0.4273 -0.8462 0.3184\nvn -0.5183 -0.6346 -0.5732\nvn -0.5379 -0.6303 0.5598\nvn 0.0014 -0.9975 -0.0707\nvn -0.0960 -0.9908 0.0959\nvn 0.0402 -0.9990 -0.0183\nvn -0.5375 -0.6521 0.5347\nvn -0.0387 -0.9986 0.0372\nvn -0.6918 -0.5307 -0.4896\nvn 0.0180 -0.9961 0.0862\nvn 0.0281 -0.9967 0.0763\nvn -0.7549 -0.6527 -0.0640\nvn 0.0124 -0.9992 0.0378\nvn -0.5228 -0.7762 0.3524\nvn 0.1840 -0.8502 0.4932\nvn -0.1829 -0.4956 0.8491\nvn -0.4683 -0.8585 0.2088\nvn 0.4875 -0.8722 -0.0394\nvn 0.1648 -0.0099 0.9863\nvn -0.6295 -0.6540 0.4196\nvn 0.0044 -0.9989 -0.0461\nvn 0.0994 -0.9950 0.0031\nvn -0.7863 -0.6179 -0.0024\nvn -0.8081 -0.1416 0.5718\nvn 0.0843 -0.9907 0.1067\nvn 0.0415 -0.9991 -0.0096\nvn 0.3984 -0.9071 -0.1360\nvn -0.6121 -0.7831 0.1104\nvn -0.3737 -0.3872 0.8429\nvn -0.5944 -0.7322 0.3324\nvn 0.8264 -0.4905 0.2767\nvn 0.0594 -0.1957 0.9789\nvn 0.2675 -0.8288 0.4915\nvn -0.7310 0.0210 0.6821\nvn 0.1059 -0.8296 0.5482\nvn 0.9712 -0.1526 0.1830\nvn 0.1234 -0.8638 0.4884\nvn -0.5693 -0.7742 0.2768\nvn -0.6402 -0.7499 0.1668\nvn 0.0139 -0.9994 -0.0325\nvn 0.3864 -0.9220 -0.0237\nvn 0.0936 -0.9924 -0.0796\nvn -0.2800 -0.8483 0.4495\nvn 0.0298 -0.9648 0.2615\nvn -0.0218 -0.9940 -0.1071\nvn 0.2590 -0.9620 0.0860\nvn -0.7047 -0.6745 0.2200\nvn 0.1586 -0.6332 0.7576\nvn -0.7433 -0.3855 -0.5468\nvn 0.1154 -0.9631 0.2430\nvn 0.0024 -0.9975 0.0712\nvn -0.3404 0.8118 0.4745\nvn 0.0586 -0.9955 0.0740\nvn -0.1879 -0.9515 0.2435\nvn 0.1113 -0.9935 0.0245\nvn -0.1487 -0.4582 0.8763\nvn 0.2388 -0.0355 0.9704\nvn 0.1072 -0.9886 0.1053\nvn 0.4561 -0.8439 0.2826\nvn -0.0136 -0.9991 0.0392\nvn 0.4748 -0.8740 0.1030\nvn -0.4167 -0.7269 0.5458\nvn -0.2552 -0.4548 0.8533\nvn -0.0218 -0.9997 -0.0116\nvn 0.1055 -0.9923 0.0657\nvn 0.3643 -0.9024 0.2300\nvn 0.0931 -0.9884 -0.1200\nvn 0.3020 -0.8279 0.4725\nvn -0.7066 -0.6894 -0.1595\nvn 0.0897 -0.9959 -0.0091\nvn -0.0510 -0.9961 -0.0721\nvn 0.0554 -0.9983 0.0181\nvn 0.0095 -0.9989 0.0449\nvn -0.2937 -0.3663 0.8829\nvn -0.6501 -0.7436 0.1562\nvn -0.5792 -0.7640 -0.2844\nvn -0.8245 -0.5526 -0.1220\nvn -0.7488 -0.6624 -0.0240\nvn -0.7109 -0.6475 -0.2747\nvn 0.0926 -0.7760 0.6239\nvn -0.0396 -0.9821 0.1841\nvn 0.0137 -0.9979 -0.0641\nvn -0.5278 -0.8080 -0.2619\nvn 0.0222 -0.9993 -0.0286\nvn 0.3519 -0.8022 0.4823\nvn 0.0521 -0.9933 0.1029\nvn 0.2110 -0.9455 -0.2481\nvn -0.3877 -0.9139 -0.1203\nvn -0.4561 -0.8512 -0.2595\nvn -0.6664 -0.5567 -0.4960\nvn -0.6642 -0.5465 -0.5102\nvn 0.2094 -0.9778 -0.0078\nvn 0.1099 -0.9938 0.0151\nvn 0.4058 -0.7709 0.4910\nvn 0.0101 -0.9994 -0.0341\nvn -0.2330 -0.9673 0.0999\nvn -0.4711 -0.8413 -0.2652\nvn -0.4200 -0.8790 -0.2258\nvn -0.8178 -0.5726 -0.0581\nvn 0.4697 -0.8354 0.2854\nvn 0.1462 -0.9524 0.2676\nvn -0.7470 -0.6480 -0.1485\nvn -0.6583 -0.7525 -0.0193\nvn 0.3930 -0.9086 0.1412\nvn 0.5670 -0.8145 0.1228\nvn -0.0513 -0.9978 0.0409\nvn -0.7912 -0.6040 -0.0956\nvn 0.1217 -0.8384 0.5313\nvn 0.0139 -0.8544 0.5195\nvn 0.0430 -0.5897 0.8064\nvn -0.0512 -0.9985 -0.0213\nvn 0.0196 -0.9921 -0.1239\nvn 0.0362 -0.9964 0.0768\nvn -0.3893 -0.8221 0.4154\nvn 0.3761 -0.8981 0.2280\nvn -0.6373 -0.7642 0.0995\nvn -0.3585 -0.9086 -0.2143\nvn -0.7536 -0.5424 0.3713\nvn -0.2707 -0.9070 0.3227\nvn 0.0473 -0.9970 0.0610\nvn 0.0558 -0.9982 -0.0200\nvn -0.0127 -0.9999 0.0004\nvn 0.0347 -0.9976 0.0600\nvn -0.0777 -0.9595 0.2708\nvn -0.0177 -0.9995 -0.0268\nvn -0.4329 -0.8340 0.3422\nvn -0.5392 -0.8411 0.0410\nvn -0.0078 -0.9943 -0.1063\nvn -0.4252 -0.8861 0.1844\nvn 0.2547 -0.8209 0.5111\nvn 0.0389 -0.9992 -0.0112\nvn 0.0074 -0.5975 0.8018\nvn -0.0374 -0.9817 0.1867\nvn 0.2985 -0.8887 0.3480\nvn -0.0010 -0.9575 0.2885\nvn -0.0139 -0.9980 -0.0618\nvn -0.4442 -0.8578 0.2588\nvn -0.4672 -0.8780 -0.1044\nvn -0.6274 -0.6656 0.4042\nvn -0.5403 0.4285 -0.7242\nvn 0.4534 -0.8462 0.2800\nvn 0.2575 -0.9151 0.3102\nvn 0.0584 -0.9959 0.0694\nvn 0.0143 -0.9998 -0.0164\nvn -0.2548 -0.8912 0.3753\nvn 0.0325 -0.9978 0.0573\nvn -0.6198 -0.7270 -0.2955\nvn 0.0300 -0.9982 -0.0522\nvn -0.8227 0.0184 0.5682\nvn 0.0560 -0.9984 0.0010\nvn 0.4041 -0.8083 0.4282\nvn -0.0296 -0.9813 0.1900\nvn -0.3238 -0.9349 -0.1457\nvn -0.4216 -0.9064 0.0256\nvn 0.0391 -0.9990 0.0215\nvn 0.1733 -0.9276 0.3310\nvn -0.0424 -0.9988 0.0225\nvn 0.0366 -0.4822 0.8753\nvn 0.0653 -0.8978 0.4356\nvn -0.8411 -0.3089 -0.4439\nvn -0.0617 -0.9911 -0.1179\nvn -0.1044 -0.9647 0.2418\nvn -0.5393 0.8297 0.1440\nvn -0.7751 -0.5158 0.3649\nvn 0.0191 -0.9977 -0.0652\nvn 0.0229 -0.9973 0.0691\nvn 0.3573 -0.8384 0.4116\nvn -0.3422 -0.8179 0.4625\nvn 0.3839 -0.9137 0.1331\nvn 0.2640 -0.3125 0.9125\nvn -0.3776 -0.9246 -0.0498\nvn -0.2884 -0.9469 -0.1420\nvn -0.3023 -0.9413 0.1503\nvn 0.0262 -0.9996 0.0106\nvn -0.5789 -0.7738 -0.2569\nvn -0.6291 -0.6612 0.4087\nvn -0.1399 -0.4237 -0.8949\nvn 0.0206 -0.9995 -0.0232\nvn 0.1692 -0.9852 0.0281\nvn -0.0440 0.7238 0.6886\nvn 0.0261 -0.9992 0.0291\nvn -0.5735 -0.8191 0.0135\nvn -0.3162 -0.8752 0.3660\nvn -0.4439 -0.7169 0.5376\nvn -0.4403 -0.7201 0.5363\nvn -0.4661 -0.6042 0.6463\nvn 0.0394 -0.9586 0.2819\nvn 0.0262 -0.9992 -0.0295\nvn 0.2945 -0.9320 -0.2112\nvn 0.1569 -0.9857 -0.0611\nvn -0.7691 -0.6314 -0.0989\nvn -0.6141 -0.7731 -0.1584\nvn -0.8455 -0.4214 -0.3279\nvn 0.0287 -0.9996 -0.0030\nvn -0.6714 -0.7220 0.1671\nvn -0.7930 0.2138 0.5705\nvn 0.0532 -0.9948 0.0873\nvn 0.0012 -0.9974 0.0718\nvn 0.0062 -0.9978 0.0661\nvn 0.0044 -0.9955 0.0950\nvn -0.1055 -0.9856 0.1324\nvn 0.1125 -0.5587 0.8217\nvn 0.1093 -0.9914 0.0718\nvn 0.2953 -0.6279 0.7201\nvn 0.0285 -0.9988 -0.0390\nvn 0.3994 -0.7318 -0.5522\nvn -0.7199 -0.4397 0.5370\nvn 0.2493 0.5973 0.7623\nvn -0.7835 -0.6214 -0.0088\nvn -0.7781 -0.6104 0.1483\nvn -0.4879 -0.4307 0.7592\nvn 0.0457 -0.9984 0.0333\nvn -0.0451 -0.9473 0.3172\nvn 0.0754 -0.6208 0.7803\nvn 0.2069 -0.8104 0.5481\nvn 0.0490 -0.8875 0.4582\nvn -0.7122 -0.6994 -0.0606\nvn -0.3311 -0.9434 0.0211\nvn -0.3828 -0.9234 -0.0277\nvn 0.0931 -0.9956 0.0064\nvn -0.0020 -0.9979 0.0654\nvn 0.0094 -0.9999 -0.0127\nvn -0.7460 -0.6659 -0.0108\nvn -0.6228 -0.7817 -0.0341\nvn -0.8112 -0.4427 0.3821\nvn -0.4530 -0.8895 0.0603\nvn -0.4788 -0.8763 0.0542\nvn -0.4739 -0.8768 0.0813\nvn 0.1503 -0.9852 0.0822\nvn -0.5393 -0.7854 -0.3039\nvn 0.1337 -0.0720 0.9884\nvn -0.5887 -0.7989 -0.1231\nvn -0.7728 -0.5565 0.3050\nvn -0.7304 -0.4510 0.5130\nvn 0.1418 -0.3466 -0.9272\nvn -0.2110 -0.9587 0.1905\nvn -0.6474 -0.7443 -0.1640\nvn 0.5749 -0.3259 0.7505\nvn -0.7125 -0.6998 -0.0502\nvn -0.7710 -0.6366 -0.0158\nvn -0.0266 -0.9996 0.0026\nvn -0.8256 -0.2081 0.5244\nvn -0.5020 -0.7732 0.3874\nvn -0.1600 -0.9510 0.2645\nvn -0.2504 -0.8980 0.3618\nvn -0.2433 -0.7625 0.5995\nvn 0.0592 -0.4236 0.9039\nvn 0.0472 -0.5431 0.8383\nvn 0.0118 -0.4994 0.8663\nvn 0.0280 -0.9983 0.0504\nvn -0.1309 -0.5859 0.7997\nvn 0.2110 -0.7615 0.6129\nvn 0.5285 -0.8371 0.1413\nvn 0.5416 -0.8225 0.1739\nvn -0.6833 -0.6907 0.2369\nvn -0.7769 -0.5791 0.2471\nvn -0.8026 -0.5834 0.1249\nvn -0.7992 -0.5025 0.3299\nvn -0.0972 -0.4480 0.8887\nvn -0.1683 -0.5555 0.8143\nvn 0.0399 -0.9992 0.0062\nvn -0.1830 -0.9667 0.1789\nvn 0.0028 -0.9991 0.0432\nvn -0.0529 -0.9148 0.4005\nvn 0.0018 -0.9957 0.0921\nvn -0.0432 -0.9485 0.3138\nvn 0.5520 -0.7663 0.3287\nvn -0.5831 -0.7422 -0.3304\nvn 0.5303 -0.6368 0.5597\nvn -0.5976 -0.8018 0.0070\nvn -0.5773 -0.7890 0.2103\nvn -0.6136 -0.6635 0.4281\nvn 0.0277 -0.9996 -0.0115\nvn -0.5134 -0.8384 0.1833\nvn -0.2158 -0.8441 0.4908\nvn -0.5959 -0.5708 0.5649\nvn 0.0057 -1.0000 -0.0080\nvn -0.4264 -0.8466 0.3184\nvn -0.6325 -0.7581 -0.1591\nvn -0.7563 -0.6523 0.0501\nvn -0.0265 -0.8723 0.4883\nvn 0.2414 -0.9702 0.0220\nvn 0.0051 -0.9997 0.0259\nvn -0.7040 -0.4090 0.5806\nvn -0.8034 -0.1076 0.5856\nvn -0.0017 -0.9996 0.0274\nvn 0.0140 -0.9987 0.0500\nvn -0.4618 -0.8868 -0.0172\nvn 0.0486 -0.9971 0.0589\nvn 0.1574 0.1309 0.9788\nvn -0.4276 -0.1363 0.8936\nvn -0.6351 -0.7548 -0.1639\nvn -0.6900 -0.7214 -0.0594\nvn -0.6873 -0.7018 0.1872\nvn -0.6257 -0.7720 0.1123\nvn -0.6456 -0.7453 0.1667\nvn -0.6921 -0.6673 0.2751\nvn -0.7658 -0.4632 0.4460\nvn 0.0143 -0.9994 -0.0302\nvn 0.1087 -0.9938 -0.0217\nvn 0.4190 -0.9041 0.0842\nvn -0.6004 -0.7138 0.3606\nvn -0.2120 -0.1376 0.9675\nvn -0.1096 -0.3944 0.9124\nvn -0.4027 -0.7900 0.4623\nvn 0.1020 -0.9652 0.2407\nvn -0.1336 -0.8192 0.5577\nvn -0.1516 -0.4255 0.8922\nvn -0.4298 -0.7666 0.4771\nvn 0.5958 -0.7462 0.2969\nvn -0.1757 -0.9468 0.2696\nvn -0.0338 -0.9987 0.0392\nvn -0.5396 -0.6253 0.5637\nvn 0.0087 -0.9961 0.0876\nvn -0.6296 -0.7592 -0.1648\nvn -0.7972 -0.5768 0.1783\nvn -0.6243 -0.7543 0.2033\nvn 0.0865 -0.4524 0.8876\nvn -0.7037 -0.6937 -0.1538\nvn -0.2446 -0.9329 0.2644\nvn 0.0384 -0.9628 0.2676\nvn 0.1162 -0.8961 0.4284\nvn -0.2177 -0.8071 0.5488\nvn -0.3175 -0.7758 0.5453\nvn -0.1238 0.7206 0.6822\nvn -0.0907 -0.9957 -0.0200\nvn -0.0097 -0.9938 -0.1105\nvn -0.4507 -0.8481 -0.2787\nvn -0.7762 -0.6279 0.0572\nvn -0.7247 -0.6833 -0.0883\nvn -0.7299 -0.6631 -0.1660\nvn -0.5801 -0.7853 0.2165\nvn -0.0797 -0.8329 0.5476\nvn -0.0219 -0.9732 0.2290\nvn -0.0079 -0.9283 0.3717\nvn -0.4037 -0.4952 0.7693\nvn 0.4512 -0.8756 -0.1725\nvn -0.7297 -0.6838 -0.0008\nvn -0.7046 -0.7063 -0.0678\nvn 0.4546 -0.8436 0.2860\nvn -0.6273 -0.5043 0.5934\nvn -0.3133 -0.9461 -0.0825\nvn -0.3981 -0.8674 -0.2986\nvn -0.4186 -0.8658 -0.2742\nvn -0.6939 -0.6311 0.3467\nvn -0.7105 -0.5086 0.4864\nvn 0.0324 -0.9993 0.0166\nvn -0.0161 -0.9997 0.0167\nvn 0.1656 -0.9856 -0.0343\nvn 0.2042 -0.9389 0.2770\nvn -0.0259 -0.9361 0.3507\nvn -0.5715 -0.5817 0.5788\nvn -0.4570 -0.8684 -0.1923\nvn -0.7234 -0.6898 -0.0304\nvn 0.1496 -0.9878 0.0426\nvn -0.3068 -0.9407 -0.1447\nvn -0.3401 -0.9403 0.0124\nvn -0.5769 -0.8123 0.0862\nvn -0.6560 -0.6651 0.3567\nvn -0.5951 -0.6888 0.4140\nvn -0.5989 -0.6642 0.4473\nvn 0.6187 -0.7637 0.1845\nvn 0.0041 -0.9999 -0.0150\nvn -0.6573 -0.7450 0.1135\nvn 0.2247 -0.9381 0.2635\nvn 0.1994 -0.9291 0.3113\nvn 0.1206 -0.9914 0.0500\nvn 0.0842 -0.9896 -0.1163\nvn -0.3522 -0.9315 -0.0905\nvn 0.2456 -0.9450 0.2161\nvn -0.8862 0.2654 0.3797\nvn -0.2708 -0.9506 -0.1518\nvn -0.3938 -0.8978 -0.1973\nvn -0.5383 -0.8259 0.1678\nvn -0.5180 -0.8472 0.1178\nvn -0.5290 -0.8440 0.0885\nvn -0.5180 -0.7977 0.3086\nvn -0.2545 -0.8900 0.3784\nvn -0.0780 -0.9723 0.2202\nvn 0.3081 -0.8891 0.3386\nvn 0.5572 -0.8277 0.0674\nvn 0.0418 -0.7260 0.6865\nvn 0.1351 -0.9868 -0.0899\nvn -0.0143 -0.9961 -0.0874\nvn -0.0397 -0.9979 -0.0510\nvn -0.1352 -0.9908 0.0085\nvn -0.1381 -0.9904 0.0012\nvn -0.4493 -0.8841 0.1288\nvn -0.7148 -0.1414 0.6849\nvn -0.2263 -0.9491 -0.2193\nvn -0.5154 -0.7799 0.3552\nvn 0.0568 -0.9982 -0.0217\nvn 0.0005 -0.9980 -0.0631\nvn 0.6532 -0.7135 0.2537\nvn 0.2817 -0.9266 0.2491\nvn 0.2663 -0.8986 0.3486\nvn 0.2897 -0.8606 0.4188\nvn -0.3808 -0.8906 -0.2486\nvn -0.3960 -0.8342 0.3837\nvn -0.4398 -0.7408 0.5078\nvn -0.8688 0.3874 -0.3085\nvn -0.0569 -0.9953 -0.0783\nvn -0.0634 -0.9968 -0.0481\nvn -0.2216 -0.9354 -0.2754\nvn -0.2624 -0.9241 -0.2778\nvn -0.2211 -0.9629 -0.1546\nvn -0.2874 -0.9310 -0.2252\nvn -0.4391 -0.8775 0.1927\nvn -0.5081 -0.6830 0.5247\nvn 0.4757 -0.4825 0.7354\nvn 0.0125 -0.9998 -0.0155\nvn -0.9922 -0.0300 0.1212\nvn -0.0910 -0.9901 0.1072\nvn 0.4722 -0.8468 0.2450\nvn 0.1510 -0.7496 0.6444\nvn -0.0655 -0.9944 -0.0830\nvn -0.2973 -0.9369 0.1839\nvn -0.7504 -0.3127 -0.5824\nvn -0.3321 -0.9345 -0.1281\nvn -0.3191 -0.9477 -0.0031\nvn -0.5916 -0.6933 0.4115\nvn -0.3529 0.0429 0.9347\nvn 0.0134 -0.9999 -0.0030\nvn -0.3135 -0.5815 0.7507\nvn -0.0871 -0.9581 0.2728\nvn -0.7307 -0.6200 0.2857\nvn -0.4977 -0.2685 -0.8247\nvn -0.0330 0.2373 -0.9709\nvn -0.0799 -0.9936 -0.0798\nvn -0.0515 -0.9972 0.0542\nvn -0.3611 -0.8685 0.3396\nvn -0.2396 -0.9598 -0.1462\nvn -0.4118 -0.8165 0.4046\nvn 0.1138 0.0195 0.9933\nvn 0.0322 -0.9986 0.0410\nvn -0.6672 -0.5920 0.4521\nvn 0.0321 -0.9993 -0.0186\nvn 0.1372 -0.9858 0.0965\nvn -0.0471 -0.9434 0.3284\nvn -0.3847 -0.8780 -0.2848\nvn -0.0676 -0.9965 -0.0488\nvn -0.4564 -0.7513 0.4766\nvn -0.4796 -0.8516 -0.2115\nvn -0.2511 -0.9630 0.0979\nvn -0.3318 -0.9159 0.2259\nvn -0.3009 -0.9111 0.2817\nvn -0.4321 -0.8086 0.3992\nvn -0.4521 -0.7893 0.4155\nvn -0.4407 -0.4416 0.7816\nvn -0.7468 -0.2161 0.6289\nvn -0.0359 -0.9993 0.0108\nvn 0.0046 -0.9996 0.0291\nvn -0.2459 0.6566 -0.7130\nvn -0.0767 -0.9906 0.1133\nvn 0.2604 -0.9425 0.2095\nvn 0.3011 -0.8874 0.3490\nvn 0.0169 -0.9995 0.0274\nvn -0.0441 -0.9975 0.0546\nvn -0.3764 -0.8785 0.2941\nvn -0.3256 -0.9192 -0.2213\nvn -0.3000 -0.9414 -0.1543\nvn -0.3568 -0.9310 0.0774\nvn -0.4362 -0.7257 0.5321\nvn -0.2744 0.3729 -0.8864\nvn -0.2851 -0.8460 0.4505\nvn 0.1060 -0.9927 -0.0578\nvn 0.1864 -0.8497 0.4932\nvn -0.0435 -0.9967 -0.0681\nvn -0.0731 -0.9857 -0.1515\nvn 0.0644 -0.9977 -0.0223\nvn -0.7144 -0.6770 -0.1770\nvn -0.3077 -0.9436 -0.1221\nvn 0.0346 -0.9977 0.0586\nvn -0.0108 -0.9998 -0.0146\nvn -0.2507 -0.9604 -0.1211\nvn -0.3859 -0.8153 0.4317\nvn -0.4015 -0.8281 0.3911\nvn -0.2420 -0.9700 0.0252\nvn 0.0240 -0.9997 -0.0040\nvn 0.2156 0.1482 0.9652\nvn -0.4743 -0.8595 0.1905\nvn -0.3013 -0.8616 0.4085\nvn 0.1554 -0.9671 -0.2013\nvn -0.0753 -0.9971 -0.0108\nvn -0.0244 -0.9996 -0.0173\nvn -0.0121 -0.9996 0.0261\nvn -0.6715 0.7151 0.1942\nvn 0.6047 -0.7853 0.1329\nvn -0.2400 -0.9700 -0.0392\nvn -0.1796 -0.9531 0.2437\nvn -0.3304 -0.9197 0.2120\nvn -0.2947 -0.9121 0.2848\nvn -0.3882 -0.4712 0.7920\nvn -0.7611 0.0063 0.6486\nvn 0.4767 -0.7013 0.5300\nvn -0.6606 -0.2480 -0.7086\nvn -0.0937 -0.9793 -0.1793\nvn -0.0463 -0.9976 0.0514\nvn -0.2540 -0.9325 0.2566\nvn -0.0178 -0.9998 -0.0014\nvn -0.8257 -0.5459 0.1418\nvn -0.2700 -0.8820 0.3861\nvn -0.3811 -0.7194 0.5807\nvn -0.0828 -0.9936 -0.0769\nvn -0.0806 -0.9963 0.0291\nvn -0.5393 -0.4426 0.7164\nvn 0.3153 -0.9207 -0.2299\nvn 0.3154 -0.9239 -0.2168\nvn 0.0098 -1.0000 0.0017\nvn 0.0385 -0.9983 0.0430\nvn -0.0224 -0.9995 0.0209\nvn -0.7314 -0.2690 -0.6267\nvn -0.2081 -0.9217 0.3274\nvn -0.2192 -0.8852 0.4102\nvn -0.2581 -0.8606 0.4390\nvn -0.2753 -0.8507 0.4478\nvn -0.3364 -0.7569 0.5602\nvn -0.3055 -0.6252 0.7182\nvn -0.2201 -0.9753 0.0178\nvn -0.0000 -0.9995 0.0320\nvn 0.2634 -0.9415 0.2102\nvn 0.2505 -0.9172 0.3099\nvn 0.1891 -0.9173 0.3506\nvn -0.0901 -0.9918 -0.0904\nvn -0.0319 -0.9908 -0.1316\nvn 0.0062 -1.0000 0.0033\nvn 0.0650 -0.9979 0.0079\nvn 0.1660 -0.2214 0.9610\nvn -0.1774 -0.9830 0.0480\nvn -0.2162 -0.9128 0.3466\nvn 0.0410 -0.9962 0.0766\nvn 0.0327 -0.9978 0.0571\nvn -0.0006 -0.9997 -0.0246\nvn 0.3910 -0.8280 0.4018\nvn -0.0343 -0.9981 0.0520\nvn 0.3342 0.9411 0.0515\nvn -0.3062 -0.8377 0.4522\nvn -0.5103 -0.8213 -0.2552\nvn -0.4523 -0.8063 0.3811\nvn -0.1245 -0.7536 0.6455\nvn 0.3901 -0.5808 -0.7145\nvn 0.0260 -0.9945 -0.1011\nvn -0.0071 -0.9972 -0.0741\nvn -0.0567 -0.9981 0.0248\nvn -0.1574 -0.9797 0.1245\nvn -0.7817 -0.6130 -0.1144\nvn -0.5404 -0.8361 -0.0940\nvn -0.9285 -0.2878 -0.2348\nvn -0.0928 -0.9908 0.0990\nvn 0.1961 -0.0912 0.9763\nvn -0.6818 0.2162 -0.6988\nvn 0.1616 -0.9834 0.0824\nvn 0.0390 -0.9940 -0.1021\nvn -0.4518 -0.8594 -0.2395\nvn -0.7569 -0.5947 -0.2711\nvn -0.5986 -0.7935 -0.1098\nvn -0.5775 -0.6961 -0.4265\nvn 0.0117 -0.9999 0.0068\nvn -0.0187 -0.9996 0.0209\nvn -0.1590 -0.9814 0.1074\nvn -0.4407 -0.8849 -0.1507\nvn 0.6452 -0.7398 0.1909\nvn 0.7151 -0.6762 0.1770\nvn -0.4414 -0.8938 -0.0786\nvn -0.5016 -0.8639 0.0462\nvn 0.0071 -0.9997 -0.0213\nvn -0.2370 -0.7139 0.6589\nvn -0.2676 -0.6358 0.7240\nvn -0.2772 -0.6304 0.7251\nvn 0.0350 -0.9993 -0.0124\nvn -0.2795 -0.9199 -0.2751\nvn -0.2447 -0.9689 -0.0365\nvn -0.1933 -0.9579 -0.2123\nvn -0.1261 -0.9919 -0.0173\nvn -0.0707 -0.9904 -0.1187\nvn -0.0061 -1.0000 0.0063\nvn -0.0550 -0.9982 0.0251\nvn -0.4270 -0.8918 -0.1495\nvn 0.0278 -0.9972 0.0690\nvn -0.7389 0.3966 0.5447\nvn -0.2005 -0.9527 -0.2284\nvn -0.0985 -0.9881 -0.1184\nvn -0.1386 -0.9829 -0.1209\nvn 0.0033 -1.0000 0.0032\nvn 0.0377 -0.9992 -0.0112\nvn 0.0286 -0.9995 0.0114\nvn 0.0477 -0.9986 -0.0215\nvn -0.0240 -0.9996 0.0125\nvn 0.0030 -0.9995 0.0326\nvn 0.0184 -0.9994 -0.0279\nvn -0.0641 -0.9979 0.0109\nvn -0.0478 -0.9980 0.0405\nvn -0.1050 -0.9935 0.0435\nvn -0.0372 -0.9962 -0.0791\nvn -0.2815 -0.9545 0.0987\nvn -0.2391 -0.9333 0.2679\nvn -0.2222 -0.8362 0.5014\nvn -0.1902 -0.7576 0.6244\nvn 0.1054 0.2526 -0.9618\nvn 0.4193 -0.9024 -0.0990\nvn 0.0504 -0.9981 0.0358\nvn 0.0229 -0.9995 0.0231\nvn 0.0004 -0.9994 0.0358\nvn 0.0201 -0.9989 -0.0413\nvn 0.0151 -0.9998 0.0151\nvn -0.0419 -0.9990 0.0182\nvn -0.8253 -0.4619 0.3250\nvn -0.3849 -0.7432 -0.5473\nvn 0.5276 -0.8484 -0.0426\nvn 0.0301 -0.5740 0.8183\nvn 0.0155 -0.9999 -0.0041\nvn 0.0343 -0.9993 -0.0127\nvn -0.1822 -0.4683 0.8646\nvn -0.1348 -0.9724 0.1904\nvn 0.0240 -0.9990 0.0372\nvn 0.0014 -0.9958 -0.0919\nvn -0.0186 -0.9980 -0.0606\nvn 0.0509 -0.9987 0.0090\nvn -0.0206 -0.9995 0.0255\nvn 0.0002 -0.9986 0.0521\nvn -0.3030 -0.9484 0.0935\nvn -0.4641 -0.8516 0.2437\nvn -0.1827 -0.8564 0.4830\nvn -0.3145 -0.9486 0.0339\nvn -0.0003 -0.9999 -0.0138\nvn 0.0283 -0.9993 0.0234\nvn 0.0456 -0.9987 -0.0218\nvn 0.5594 -0.8031 0.2049\nvn -0.0885 -0.9950 0.0471\nvn -0.0916 -0.9957 0.0165\nvn -0.1163 -0.8452 0.5217\nvn -0.2504 -0.5641 0.7868\nvn -0.4333 -0.8801 -0.1942\nvn -0.0056 -0.9956 0.0939\nvn -0.6797 -0.6096 -0.4079\nvn 0.0579 -0.9964 0.0614\nvn -0.2195 -0.9682 -0.1204\nvn -0.0558 -0.9958 -0.0720\nvn 0.0244 -0.9994 0.0257\nvn 0.0691 -0.9961 0.0553\nvn 0.1306 -0.9914 -0.0122\nvn 0.0237 -0.9995 0.0195\nvn 0.0492 -0.9986 -0.0187\nvn 0.2384 -0.9599 0.1472\nvn -0.1215 -0.9712 0.2051\nvn 0.2245 -0.8229 0.5220\nvn -0.4974 -0.8675 -0.0049\nvn -0.3508 -0.9008 0.2558\nvn -0.0309 -0.9994 0.0174\nvn 0.0035 -0.9968 0.0802\nvn -0.2675 -0.8458 -0.4616\nvn -0.1595 -0.7588 0.6314\nvn -0.6772 -0.6312 -0.3780\nvn 0.3818 -0.9174 -0.1124\nvn 0.3778 -0.9212 -0.0932\nvn 0.2053 -0.9656 0.1598\nvn 0.2457 -0.9663 0.0764\nvn 0.1765 -0.9842 0.0130\nvn 0.0513 -0.9985 0.0186\nvn 0.0099 -0.9994 0.0346\nvn -0.2066 -0.9057 0.3702\nvn -0.7923 -0.5684 0.2216\nvn -0.0690 -0.6976 0.7131\nvn 0.0492 -0.4910 0.8698\nvn -0.0166 -0.5454 0.8380\nvn 0.0365 -0.5726 0.8190\nvn 0.4688 -0.8394 0.2751\nvn 0.1162 -0.9652 0.2342\nvn 0.5231 -0.8341 0.1749\nvn 0.6211 -0.7386 0.2621\nvn 0.5465 -0.8373 0.0155\nvn 0.1563 -0.9842 -0.0827\nvn 0.0324 -0.9994 0.0101\nvn 0.0095 -0.9990 -0.0447\nvn 0.0091 -0.9983 -0.0572\nvn -0.0274 -0.9990 -0.0362\nvn 0.3840 -0.7524 0.5353\nvn 0.3793 -0.7443 0.5496\nvn -0.0330 -0.9956 0.0876\nvn -0.2641 -0.9521 0.1540\nvn -0.4177 0.3847 -0.8231\nvn -0.2514 -0.6011 0.7586\nvn -0.2324 -0.6848 0.6907\nvn 0.0496 -0.9988 -0.0023\nvn 0.6249 -0.7315 0.2727\nvn 0.0085 -0.9998 0.0171\nvn -0.0014 -0.9998 0.0196\nvn 0.0800 -0.9647 0.2508\nvn 0.7631 -0.6240 0.1680\nvn 0.0020 -0.9996 0.0269\nvn 0.0063 -0.9997 0.0215\nvn -0.5396 -0.4081 0.7364\nvn 0.4177 -0.7344 0.5350\nvn -0.6118 -0.0585 -0.7888\nvn -0.0548 -0.6960 0.7159\nvn 0.1472 0.1297 0.9806\nvn 0.5340 -0.7291 0.4280\nvn 0.3546 -0.8373 0.4160\nvn 0.5941 -0.6572 0.4639\nvn 0.5944 -0.6581 0.4622\nvn 0.6930 -0.6626 0.2841\nvn 0.6981 -0.6583 0.2816\nvn 0.7844 -0.5993 0.1597\nvn 0.0513 -0.9908 0.1252\nvn -0.0993 -0.6349 0.7662\nvn -0.0738 -0.9946 0.0732\nvn -0.0484 -0.9795 0.1958\nvn -0.0929 -0.9804 0.1735\nvn -0.1142 -0.9191 0.3770\nvn -0.6274 -0.3493 0.6960\nvn -0.7224 0.0478 0.6898\nvn 0.2171 -0.7596 0.6130\nvn -0.7173 -0.6468 0.2593\nvn -0.1338 -0.7545 0.6426\nvn -0.0054 -0.9999 0.0157\nvn -0.0440 -0.9984 0.0359\nvn 0.4330 -0.6782 0.5937\nvn 0.3834 -0.6483 0.6578\nvn 0.0046 -0.9998 0.0192\nvn -0.1342 -0.9859 0.1001\nvn -0.0631 -0.4759 0.8772\nvn -0.4561 -0.4729 0.7539\nvn -0.5159 -0.3874 0.7640\nvn -0.4962 -0.3339 0.8014\nvn 0.0742 -0.9970 -0.0206\nvn 0.0379 -0.9992 -0.0125\nvn 0.0469 -0.9681 0.2463\nvn -0.3715 -0.1219 0.9204\nvn -0.0270 -0.9991 0.0326\nvn -0.0184 -0.9998 0.0062\nvn 0.0292 -0.9993 0.0253\nvn -0.8978 -0.3122 -0.3105\nvn 0.4706 -0.0236 0.8820\nvn 0.0485 -0.9983 -0.0310\nvn 0.0264 -0.9974 0.0673\nvn 0.0735 -0.8901 0.4498\nvn 0.0240 -0.7852 0.6188\nvn 0.2881 -0.6677 0.6864\nvn 0.1557 -0.9847 0.0784\nvn 0.1127 -0.9871 0.1140\nvn 0.1105 -0.9938 0.0152\nvn 0.0132 -0.9985 -0.0529\nvn -0.2163 -0.7490 0.6262\nvn 0.0360 -0.9989 0.0288\nvn -0.0174 -0.8368 0.5472\nvn 0.2669 -0.8900 -0.3696\nvn -0.3773 -0.3601 0.8532\nvn 0.0278 -0.9996 -0.0108\nvn -0.8780 0.2303 -0.4197\nvn 0.4087 -0.9123 0.0254\nvn 0.3071 -0.9223 0.2346\nvn 0.0901 -0.9937 0.0667\nvn 0.0361 -0.9990 -0.0252\nvn 0.0250 -0.9997 0.0085\nvn -0.1112 -0.9733 0.2009\nvn 0.0363 -0.9991 0.0222\nvn 0.2995 -0.9366 0.1821\nvn 0.3690 -0.9075 0.2009\nvn -0.4060 -0.3709 0.8352\nvn 0.0307 -0.9993 0.0227\nvn 0.0308 -0.9957 0.0879\nvn 0.0205 -0.9938 0.1091\nvn -0.4707 -0.6511 0.5954\nvn 0.0086 -0.9989 0.0463\nvn 0.0791 -0.5222 0.8491\nvn 0.0560 -0.9034 0.4251\nvn 0.0375 -0.9989 -0.0298\nvn -0.2665 -0.7020 0.6604\nvn -0.0338 -0.9806 0.1929\nvn -0.0847 -0.9612 0.2627\nvn 0.1117 -0.9890 -0.0967\nvn 0.3627 -0.7465 0.5579\nvn 0.1374 -0.9905 -0.0012\nvn 0.2600 -0.7949 0.5483\nvn 0.0500 -0.9987 -0.0119\nvn 0.4934 -0.6512 0.5766\nvn -0.0892 -0.8003 0.5929\nvn 0.0548 -0.5419 0.8386\nvn 0.1136 -0.9111 0.3963\nvn -0.0400 -0.9989 -0.0244\nvn 0.0128 -0.9999 0.0095\nvn -0.4772 -0.6454 0.5964\nvn -0.0340 -0.9983 0.0471\nvn 0.0283 -0.9991 -0.0311\nvn -0.0073 -0.9982 0.0591\nvn -0.1048 -0.7512 0.6517\nvn 0.0254 -0.9968 0.0757\nvn -0.0096 -0.9986 -0.0527\nvn 0.0271 -0.9996 0.0085\nvn -0.2907 -0.7162 0.6345\nvn 0.0119 -0.9997 0.0230\nvn 0.0078 -0.9996 0.0268\nvn -0.0062 -0.9999 0.0107\nvn 0.0379 -0.8292 0.5577\nvn -0.7795 -0.5304 0.3334\nvn -0.5143 -0.7884 -0.3375\nvn 0.4547 -0.8903 -0.0245\nvn -0.0238 -0.9996 -0.0133\nvn 0.0395 -0.9988 -0.0282\nvn 0.4386 -0.7755 0.4542\nvn 0.0240 -0.9975 0.0669\nvn -0.4490 -0.8893 0.0863\nvn 0.0977 -0.5426 0.8343\nvn -0.0051 -0.9994 -0.0328\nvn 0.2600 -0.8161 0.5161\nvn -0.0597 -0.5402 0.8394\nvn 0.0036 -0.9632 0.2689\nvn -0.0200 -0.9996 -0.0215\nvn 0.0196 -0.9986 -0.0501\nvn 0.0176 -0.9998 0.0010\nvn 0.0138 -0.9998 -0.0170\nvn -0.5514 -0.6358 0.5401\nvn 0.1266 -0.9713 0.2013\nvn -0.1615 -0.9869 0.0020\nvn 0.0251 -0.9991 -0.0336\nvn -0.2997 -0.4743 0.8278\nvn 0.0402 -0.9991 -0.0119\nvn 0.0468 -0.9978 0.0479\nvn -0.1632 -0.9856 -0.0452\nvn 0.0260 -0.9993 0.0261\nvn -0.0229 -0.9983 0.0531\nvn -0.0912 -0.8012 0.5915\nvn -0.0817 -0.5049 0.8593\nvn -0.0922 -0.8393 0.5358\nvn 0.0414 -0.9989 -0.0239\nvn -0.0077 -0.9999 -0.0088\nvn -0.5913 -0.6970 0.4057\nvn 0.0708 -0.9804 0.1841\nvn 0.0225 -0.9645 0.2631\nvn 0.0039 -1.0000 0.0000\nvn -0.3233 -0.4238 0.8461\nvn 0.0299 -0.9984 0.0482\nvn -0.0175 -0.9986 0.0490\nvn 0.0107 -0.9995 -0.0287\nvn -0.0208 -0.9991 -0.0377\nvn -0.6208 -0.6793 0.3914\nvn -0.0187 -0.9995 0.0266\nvn -0.9951 0.0193 0.0969\nusemtl Material.001\ns off\nf 2826/1/1 2535/2/1 2060/3/1\nf 1095/4/2 228/5/2 1078/6/2\nf 429/7/3 456/8/3 385/9/3\nf 2331/10/4 456/8/4 429/7/4\nf 1229/11/5 476/12/5 1456/13/5\nf 1402/14/6 1373/15/6 9/16/6\nf 1334/17/7 444/18/7 1243/19/7\nf 3464/20/8 3508/21/8 3446/22/8\nf 1243/19/9 444/18/9 1345/23/9\nf 1530/24/10 36/25/10 1540/26/10\nf 1287/27/11 1227/28/11 1261/29/11\nf 228/5/12 1095/4/12 1214/30/12\nf 471/31/13 312/32/13 1241/33/13\nf 1434/34/14 13/35/14 352/36/14\nf 294/37/15 1345/23/15 552/38/15\nf 1403/39/16 1402/14/16 9/16/16\nf 1459/40/17 1602/41/17 1138/42/17\nf 2341/43/18 1225/44/18 1219/45/18\nf 1461/46/19 1906/47/19 251/48/19\nf 1229/11/20 325/49/20 414/50/20\nf 1292/51/21 1338/52/21 1370/53/21\nf 1421/54/22 1450/55/22 104/56/22\nf 1766/57/23 1981/58/23 1869/59/23\nf 1338/52/24 1381/60/24 1370/53/24\nf 1416/61/25 1433/62/25 1418/63/25\nf 2298/64/26 2968/65/26 2978/66/26\nf 3033/67/27 2972/68/27 2952/69/27\nf 1539/70/28 265/71/28 1701/72/28\nf 173/73/29 1356/74/29 1352/75/29\nf 1332/76/30 1331/77/30 1254/78/30\nf 1806/79/31 158/80/31 1747/81/31\nf 1138/42/32 1602/41/32 1179/82/32\nf 1419/83/33 1434/34/33 352/36/33\nf 298/84/34 328/85/34 191/86/34\nf 2030/87/35 2016/88/35 2042/89/35\nf 1451/90/36 1456/13/36 476/12/36\nf 3506/91/37 3427/92/37 3444/93/37\nf 2331/10/38 429/7/38 345/94/38\nf 3084/95/39 2438/96/39 2428/97/39\nf 1456/13/40 1334/17/40 1234/98/40\nf 47/99/41 1277/100/41 1141/101/41\nf 1299/102/42 1234/98/42 1243/19/42\nf 156/103/43 1229/11/43 414/50/43\nf 1234/98/44 1334/17/44 1243/19/44\nf 1372/104/45 1234/98/45 1299/102/45\nf 3294/105/46 3279/106/46 3280/107/46\nf 1974/108/47 1976/109/47 1975/110/47\nf 1088/111/48 1108/112/48 1855/113/48\nf 737/114/49 1348/115/49 2103/116/49\nf 2015/117/50 2016/88/50 2030/87/50\nf 1334/17/51 1310/118/51 444/18/51\nf 1456/13/52 1234/98/52 1372/104/52\nf 174/119/53 1627/120/53 2819/121/53\nf 459/122/54 514/123/54 1265/124/54\nf 2292/125/55 1120/126/55 2343/127/55\nf 1441/128/56 1386/129/56 10/130/56\nf 104/56/57 1450/55/57 1441/128/57\nf 480/131/58 1421/54/58 382/132/58\nf 2292/133/59 964/134/59 1120/135/59\nf 1285/136/60 1292/51/60 1370/53/60\nf 1374/137/61 1399/138/61 1113/139/61\nf 1162/140/62 783/141/62 823/142/62\nf 113/143/63 902/144/63 365/145/63\nf 1262/146/64 365/145/64 1435/147/64\nf 1346/148/65 1423/149/65 1300/150/65\nf 1380/151/66 396/152/66 1403/39/66\nf 1358/153/67 1263/154/67 1452/155/67\nf 1358/153/68 1315/156/68 1263/154/68\nf 1275/157/69 1316/158/69 1305/159/69\nf 2198/160/70 2227/161/70 2203/162/70\nf 1381/60/71 1419/83/71 352/36/71\nf 1348/115/72 1204/163/72 1308/164/72\nf 3342/165/73 3326/166/73 3305/167/73\nf 118/168/74 119/169/74 1644/170/74\nf 1409/171/75 1321/172/75 1406/173/75\nf 1869/59/76 1862/174/76 1377/175/76\nf 1799/176/77 1817/177/77 1845/178/77\nf 197/179/78 1249/180/78 44/181/78\nf 1232/182/79 1231/183/79 1260/184/79\nf 577/185/80 2120/186/80 2088/187/80\nf 1979/188/81 1978/189/81 2071/190/81\nf 1267/191/82 1285/192/82 1217/193/82\nf 183/194/83 296/195/83 118/168/83\nf 296/195/84 119/169/84 118/168/84\nf 446/196/85 394/197/85 1550/198/85\nf 158/80/86 1325/199/86 1319/200/86\nf 1747/81/87 1158/201/87 1806/79/87\nf 42/202/88 1372/104/88 134/203/88\nf 271/204/89 1241/33/89 1593/205/89\nf 2750/206/90 2793/207/90 2762/208/90\nf 80/209/91 664/210/91 58/211/91\nf 16/212/92 394/197/92 446/196/92\nf 159/213/93 1685/214/93 1682/215/93\nf 382/132/94 1321/172/94 1409/171/94\nf 445/216/95 282/217/95 1685/218/95\nf 2016/88/96 2057/219/96 2042/89/96\nf 1842/220/97 2549/221/97 2574/222/97\nf 352/36/98 13/35/98 12/223/98\nf 2858/224/99 3429/225/99 2767/226/99\nf 1440/227/100 1424/228/100 1332/76/100\nf 346/229/101 382/132/101 21/230/101\nf 21/230/102 382/132/102 270/231/102\nf 1974/108/103 1958/232/103 1976/109/103\nf 1543/233/104 1493/234/104 48/235/104\nf 9/16/105 1256/236/105 1227/28/105\nf 2005/237/106 2016/88/106 2015/117/106\nf 2761/238/107 2791/239/107 2790/240/107\nf 296/195/108 446/196/108 119/169/108\nf 16/212/109 159/213/109 394/197/109\nf 2034/241/110 1570/242/110 1895/243/110\nf 3437/244/111 2424/245/111 3504/246/111\nf 1429/247/112 1295/248/112 1231/249/112\nf 2887/250/113 1703/251/113 1769/252/113\nf 2810/253/114 2809/254/114 2775/255/114\nf 1451/90/115 299/256/115 1456/13/115\nf 104/56/116 1441/128/116 1346/148/116\nf 1232/182/117 1258/257/117 1230/258/117\nf 982/259/118 182/260/118 1147/261/118\nf 10/130/119 1386/129/119 77/262/119\nf 2735/263/120 2699/264/120 2674/265/120\nf 2609/266/121 2434/267/121 2600/268/121\nf 3472/269/122 3461/270/122 2548/271/122\nf 1988/272/123 1439/273/123 2021/274/123\nf 446/196/124 903/275/124 16/212/124\nf 492/276/125 1685/214/125 159/213/125\nf 1093/277/126 1211/278/126 1212/279/126\nf 1163/280/127 3470/281/127 986/282/127\nf 1321/172/128 104/56/128 1406/173/128\nf 1467/283/129 1346/148/129 1300/150/129\nf 1719/284/130 931/285/130 1620/286/130\nf 2615/287/131 2781/288/131 2467/289/131\nf 1593/205/132 1440/290/132 271/204/132\nf 1458/291/133 480/131/133 346/229/133\nf 3024/292/134 3046/293/134 2962/294/134\nf 443/295/135 527/296/135 296/195/135\nf 296/195/136 527/296/136 446/196/136\nf 527/296/137 891/297/137 446/196/137\nf 446/196/138 891/297/138 903/275/138\nf 3511/298/139 3437/299/139 3463/300/139\nf 903/275/140 159/213/140 16/212/140\nf 986/282/141 3470/281/141 1132/301/141\nf 700/302/142 1076/303/142 719/304/142\nf 1093/277/143 1039/305/143 1211/278/143\nf 346/229/144 480/131/144 382/132/144\nf 1441/128/145 10/130/145 1346/148/145\nf 2117/306/146 737/114/146 2082/307/146\nf 3190/308/147 3241/309/147 3173/310/147\nf 1697/311/148 3479/312/148 3425/313/148\nf 3336/314/149 407/315/149 443/295/149\nf 76/316/150 527/296/150 443/295/150\nf 903/275/151 261/317/151 159/213/151\nf 2161/318/152 985/319/152 1026/320/152\nf 429/7/153 385/9/153 480/131/153\nf 2069/321/154 2048/322/154 2121/323/154\nf 1180/324/155 3500/325/155 3485/326/155\nf 493/327/156 507/328/156 481/329/156\nf 407/315/157 76/316/157 443/295/157\nf 76/316/158 376/330/158 527/296/158\nf 376/330/159 886/331/159 527/296/159\nf 527/296/160 886/331/160 891/297/160\nf 1208/332/161 1207/333/161 1193/334/161\nf 3246/335/162 3262/336/162 3216/337/162\nf 2093/338/163 2085/339/163 1978/340/163\nf 315/341/164 409/342/164 814/343/164\nf 1353/344/165 1357/345/165 1238/346/165\nf 2345/347/166 346/229/166 1472/348/166\nf 1204/163/167 1348/115/167 737/114/167\nf 346/229/168 21/230/168 1472/348/168\nf 1406/173/169 1346/148/169 1467/283/169\nf 3433/349/170 3501/350/170 3443/351/170\nf 261/317/171 727/352/171 159/213/171\nf 159/213/172 727/352/172 492/276/172\nf 3505/353/173 3445/354/173 3476/355/173\nf 316/356/174 362/357/174 783/141/174\nf 1002/358/175 3495/359/175 1153/360/175\nf 2594/361/176 2634/362/176 2607/363/176\nf 1321/172/177 1421/54/177 104/56/177\nf 1981/58/178 1154/364/178 1869/59/178\nf 1564/365/179 516/366/179 493/327/179\nf 516/366/180 3222/367/180 493/327/180\nf 478/368/181 488/369/181 468/370/181\nf 2812/371/182 2844/372/182 2828/373/182\nf 90/374/183 91/375/183 112/376/183\nf 154/377/184 136/378/184 103/379/184\nf 345/94/185 429/7/185 1458/291/185\nf 429/7/186 480/131/186 1458/291/186\nf 447/380/187 1564/365/187 1640/381/187\nf 2096/382/188 1894/383/188 2857/384/188\nf 516/366/189 531/385/189 3222/367/189\nf 469/386/190 478/368/190 468/370/190\nf 376/330/191 76/316/191 407/315/191\nf 65/387/192 89/388/192 111/389/192\nf 66/390/193 67/391/193 90/374/193\nf 38/392/194 39/393/194 66/394/194\nf 39/395/195 38/396/195 27/397/195\nf 3471/398/196 3493/399/196 3456/400/196\nf 347/401/197 911/402/197 405/403/197\nf 1018/404/198 1045/405/198 1013/406/198\nf 1762/407/199 1724/408/199 1981/58/199\nf 385/9/200 1229/11/200 156/103/200\nf 2120/409/201 1978/189/201 1979/188/201\nf 1409/171/202 1406/173/202 1375/410/202\nf 1375/410/203 1406/173/203 1467/283/203\nf 397/411/204 398/412/204 1640/381/204\nf 542/413/205 531/385/205 516/366/205\nf 171/414/206 281/415/206 490/416/206\nf 1207/417/207 1181/418/207 1175/419/207\nf 1041/420/208 1319/200/208 1215/421/208\nf 3474/422/209 3446/22/209 3489/423/209\nf 1123/424/210 1146/425/210 1115/426/210\nf 1042/427/211 3478/428/211 1148/429/211\nf 382/132/212 1421/54/212 1321/172/212\nf 396/152/213 1402/14/213 1403/39/213\nf 1472/348/214 21/230/214 1471/430/214\nf 399/431/215 398/412/215 397/411/215\nf 447/380/216 516/366/216 1564/365/216\nf 653/432/217 542/413/217 516/366/217\nf 310/433/218 258/434/218 259/435/218\nf 181/436/219 157/437/219 703/438/219\nf 133/439/220 153/440/220 132/441/220\nf 490/416/221 237/442/221 1300/443/221\nf 40/444/222 67/445/222 39/393/222\nf 33/446/223 40/447/223 27/397/223\nf 67/445/224 66/394/224 39/393/224\nf 40/447/225 39/395/225 27/397/225\nf 988/448/226 998/449/226 978/450/226\nf 112/376/227 89/388/227 90/374/227\nf 1211/278/228 1039/305/228 922/451/228\nf 1156/452/229 1195/453/229 1146/425/229\nf 456/8/230 190/454/230 476/12/230\nf 664/455/231 1811/456/231 1525/457/231\nf 1909/458/232 2442/459/232 2414/460/232\nf 460/461/233 1640/381/233 398/412/233\nf 1640/381/234 460/461/234 447/380/234\nf 482/462/235 516/366/235 447/380/235\nf 260/463/236 293/464/236 240/465/236\nf 489/466/237 899/467/237 525/468/237\nf 186/469/238 212/470/238 200/471/238\nf 240/465/239 266/472/239 247/473/239\nf 324/474/240 359/475/240 323/476/240\nf 588/477/241 38/396/241 53/478/241\nf 196/479/242 200/471/242 224/480/242\nf 123/481/243 131/482/243 116/483/243\nf 157/437/244 181/436/244 187/484/244\nf 266/472/245 324/474/245 310/433/245\nf 703/438/246 157/437/246 153/440/246\nf 703/438/247 153/440/247 133/439/247\nf 726/485/248 946/486/248 1330/487/248\nf 1083/488/249 438/489/249 1127/490/249\nf 1176/491/250 1155/492/250 1199/493/250\nf 783/141/251 362/357/251 120/494/251\nf 1456/13/252 299/256/252 1334/17/252\nf 325/49/253 1372/104/253 42/202/253\nf 137/495/254 290/496/254 3/497/254\nf 341/498/255 354/499/255 399/431/255\nf 400/500/256 398/412/256 399/431/256\nf 482/462/257 447/380/257 460/461/257\nf 482/462/258 653/432/258 516/366/258\nf 293/464/259 266/472/259 240/465/259\nf 142/501/260 152/502/260 151/503/260\nf 153/440/261 152/502/261 132/441/261\nf 248/504/262 171/414/262 227/505/262\nf 123/481/263 151/503/263 168/506/263\nf 133/439/264 132/441/264 124/507/264\nf 101/508/265 124/507/265 91/375/265\nf 260/463/266 225/509/266 840/510/266\nf 1201/511/267 1093/277/267 1212/279/267\nf 1093/277/268 1143/512/268 1091/513/268\nf 595/514/269 697/515/269 842/516/269\nf 1013/406/270 1061/517/270 1037/518/270\nf 299/256/271 1228/519/271 1334/17/271\nf 1314/520/272 444/18/272 1310/118/272\nf 1314/520/273 213/521/273 444/18/273\nf 3103/522/274 3145/523/274 3144/524/274\nf 341/498/275 331/525/275 354/499/275\nf 354/499/276 400/500/276 399/431/276\nf 400/500/277 460/461/277 398/412/277\nf 151/503/278 152/502/278 180/526/278\nf 2964/527/279 2983/528/279 2974/529/279\nf 2458/530/280 979/531/280 2488/532/280\nf 117/533/281 123/481/281 116/483/281\nf 454/534/282 441/535/282 468/536/282\nf 911/402/283 938/537/283 406/538/283\nf 406/538/284 938/537/284 418/539/284\nf 1605/540/285 1617/541/285 1854/542/285\nf 1237/543/286 506/544/286 106/545/286\nf 331/525/287 355/546/287 354/499/287\nf 420/547/288 460/461/288 400/500/288\nf 103/379/289 3218/548/289 661/549/289\nf 310/433/290 323/476/290 309/550/290\nf 636/551/291 101/508/291 75/552/291\nf 425/553/292 470/554/292 442/555/292\nf 501/556/293 547/557/293 513/558/293\nf 1394/559/294 1408/560/294 1404/561/294\nf 3182/562/295 2043/563/295 1489/564/295\nf 2709/565/296 263/566/296 3386/567/296\nf 355/546/297 400/500/297 354/499/297\nf 483/568/298 482/462/298 460/461/298\nf 483/568/299 517/569/299 482/462/299\nf 517/569/300 653/432/300 482/462/300\nf 517/569/301 532/570/301 653/432/301\nf 1162/140/302 823/142/302 377/571/302\nf 547/557/303 125/572/303 79/573/303\nf 1384/574/304 501/556/304 680/575/304\nf 959/576/305 954/577/305 3029/578/305\nf 424/579/306 441/535/306 454/534/306\nf 2696/580/307 964/581/307 2292/125/307\nf 556/582/308 162/583/308 548/584/308\nf 393/585/309 440/586/309 416/587/309\nf 1379/588/310 182/260/310 982/259/310\nf 1785/589/311 1575/590/311 1796/591/311\nf 2104/592/312 2047/593/312 1378/594/312\nf 1243/19/313 1345/23/313 268/595/313\nf 284/596/314 331/525/314 263/566/314\nf 284/596/315 332/597/315 331/525/315\nf 332/597/316 355/546/316 331/525/316\nf 420/547/317 483/568/317 460/461/317\nf 488/369/318 537/598/318 477/599/318\nf 248/504/319 227/505/319 554/600/319\nf 1195/453/320 1194/601/320 1166/602/320\nf 101/508/321 91/375/321 75/552/321\nf 162/583/322 1389/603/322 782/604/322\nf 2082/307/323 737/114/323 2103/116/323\nf 328/605/324 329/606/324 1335/607/324\nf 385/9/325 156/103/325 1421/54/325\nf 190/454/326 456/8/326 2361/608/326\nf 366/609/327 400/500/327 355/546/327\nf 421/610/328 420/547/328 400/500/328\nf 430/611/329 483/568/329 420/547/329\nf 508/612/330 517/569/330 483/568/330\nf 517/569/331 564/613/331 532/570/331\nf 532/570/332 564/613/332 563/614/332\nf 124/507/333 112/376/333 91/375/333\nf 3503/615/334 3502/616/334 1042/427/334\nf 53/617/335 54/618/335 74/619/335\nf 1372/104/336 1299/102/336 134/203/336\nf 244/620/337 274/621/337 263/566/337\nf 263/566/338 274/621/338 284/596/338\nf 274/621/339 332/597/339 284/596/339\nf 421/610/340 430/611/340 420/547/340\nf 680/575/341 513/558/341 522/622/341\nf 488/623/342 477/624/342 1354/625/342\nf 323/476/343 359/475/343 393/585/343\nf 455/626/344 470/554/344 469/386/344\nf 1631/627/345 1912/628/345 1531/629/345\nf 227/505/346 171/414/346 326/630/346\nf 74/619/347 65/631/347 53/617/347\nf 998/449/348 968/632/348 954/577/348\nf 478/633/349 523/634/349 488/623/349\nf 316/356/350 558/635/350 2393/636/350\nf 1433/62/351 1463/637/351 1462/638/351\nf 329/606/352 1380/151/352 1287/27/352\nf 356/639/353 355/546/353 332/597/353\nf 356/639/354 366/609/354 355/546/354\nf 366/609/355 386/640/355 400/500/355\nf 494/641/356 483/568/356 430/611/356\nf 543/642/357 564/613/357 517/569/357\nf 528/643/358 563/614/358 564/613/358\nf 417/644/359 424/645/359 440/586/359\nf 468/370/360 488/369/360 1354/646/360\nf 911/402/361 406/538/361 405/403/361\nf 609/647/362 67/445/362 40/444/362\nf 123/481/363 142/501/363 151/503/363\nf 1441/128/364 42/202/364 1386/129/364\nf 1287/27/365 1380/151/365 1403/39/365\nf 2592/648/366 2424/245/366 3437/244/366\nf 1657/649/367 2625/650/367 1662/651/367\nf 2753/652/368 2723/653/368 2640/654/368\nf 366/609/369 378/655/369 386/640/369\nf 400/500/370 386/640/370 421/610/370\nf 494/641/371 508/612/371 483/568/371\nf 508/612/372 543/642/372 517/569/372\nf 212/470/373 224/480/373 200/471/373\nf 3445/354/374 3511/298/374 3497/656/374\nf 1171/657/375 558/635/375 316/356/375\nf 90/658/376 89/659/376 74/619/376\nf 168/506/377 180/526/377 167/660/377\nf 154/377/378 160/661/378 136/378/378\nf 3506/91/379 2768/662/379 3427/92/379\nf 3494/663/380 3475/664/380 3459/665/380\nf 251/48/381 1906/47/381 262/666/381\nf 1525/667/382 1549/668/382 58/211/382\nf 1228/519/383 1310/118/383 1334/17/383\nf 2769/669/384 2615/287/384 2467/289/384\nf 252/670/385 244/620/385 3287/671/385\nf 274/621/386 285/672/386 332/597/386\nf 332/597/387 285/672/387 356/639/387\nf 356/639/388 378/655/388 366/609/388\nf 421/610/389 431/673/389 430/611/389\nf 431/673/390 494/641/390 430/611/390\nf 240/465/391 247/473/391 212/470/391\nf 125/572/392 281/415/392 171/414/392\nf 310/433/393 324/474/393 323/476/393\nf 202/674/394 756/675/394 144/676/394\nf 2643/677/395 1928/678/395 2879/679/395\nf 2894/680/396 2615/287/396 2766/681/396\nf 3287/671/397 3095/682/397 252/670/397\nf 3371/683/398 3381/684/398 3370/685/398\nf 300/686/399 274/621/399 244/620/399\nf 274/621/400 300/686/400 285/672/400\nf 342/687/401 378/655/401 356/639/401\nf 285/672/402 342/687/402 356/639/402\nf 494/641/403 543/642/403 508/612/403\nf 543/642/404 544/688/404 564/613/404\nf 544/688/405 541/689/405 564/613/405\nf 564/613/406 541/689/406 528/643/406\nf 470/690/407 524/691/407 469/692/407\nf 418/539/408 442/555/408 441/693/408\nf 201/694/409 2168/695/409 427/696/409\nf 454/534/410 1313/697/410 424/579/410\nf 225/509/411 260/463/411 181/436/411\nf 2264/698/412 3479/312/412 2253/699/412\nf 425/553/413 426/700/413 470/554/413\nf 142/501/414 123/481/414 117/533/414\nf 2552/701/415 1071/702/415 1059/703/415\nf 3457/704/416 2754/705/416 3482/706/416\nf 20/707/417 2067/708/417 2047/593/417\nf 126/709/418 155/710/418 154/377/418\nf 583/711/419 22/712/419 1488/713/419\nf 23/714/420 22/712/420 583/711/420\nf 22/712/421 23/714/421 36/715/421\nf 155/710/422 172/716/422 154/377/422\nf 1540/26/423 36/25/423 1549/668/423\nf 252/670/424 300/686/424 244/620/424\nf 300/686/425 342/687/425 285/672/425\nf 386/640/426 411/717/426 421/610/426\nf 421/610/427 411/717/427 431/673/427\nf 111/389/428 89/388/428 116/483/428\nf 470/690/429 489/718/429 524/691/429\nf 524/719/430 489/466/430 556/582/430\nf 548/584/431 162/583/431 782/604/431\nf 203/720/432 437/721/432 750/722/432\nf 1127/490/433 438/489/433 1133/723/433\nf 2607/363/434 2634/362/434 2652/724/434\nf 1804/725/435 1778/726/435 1779/727/435\nf 361/728/436 426/700/436 425/553/436\nf 1494/729/437 2469/730/437 1693/731/437\nf 2721/732/438 2750/733/438 2720/734/438\nf 2107/735/439 1666/736/439 1350/737/439\nf 286/738/440 300/686/440 252/670/440\nf 301/739/441 342/687/441 300/686/441\nf 342/687/442 387/740/442 378/655/442\nf 378/655/443 387/740/443 386/640/443\nf 386/640/444 387/740/444 411/717/444\nf 431/673/445 448/741/445 494/641/445\nf 494/641/446 448/741/446 543/642/446\nf 543/642/447 533/742/447 544/688/447\nf 789/743/448 914/744/448 541/689/448\nf 65/631/449 74/619/449 89/659/449\nf 180/526/450 200/471/450 196/479/450\nf 682/745/451 680/575/451 522/622/451\nf 1142/746/452 1208/332/452 1193/334/452\nf 132/441/453 152/502/453 142/501/453\nf 186/469/454 200/471/454 180/526/454\nf 1125/747/455 1129/748/455 1106/749/455\nf 1117/750/456 1015/751/456 1092/752/456\nf 1747/81/457 1041/420/457 182/260/457\nf 3489/753/458 3508/754/458 3500/325/458\nf 59/755/459 80/209/459 58/211/459\nf 3207/756/460 174/757/460 2819/758/460\nf 2894/680/461 2766/681/461 3428/759/461\nf 252/670/462 234/760/462 286/738/462\nf 301/739/463 300/686/463 286/738/463\nf 387/740/464 388/761/464 411/717/464\nf 411/717/465 448/741/465 431/673/465\nf 495/762/466 533/742/466 543/642/466\nf 448/741/467 495/762/467 543/642/467\nf 180/526/468 157/437/468 186/469/468\nf 556/763/469 539/764/469 524/691/469\nf 782/604/470 1389/603/470 756/675/470\nf 1252/765/471 1242/766/471 1267/767/471\nf 1242/766/472 1292/51/472 1285/136/472\nf 2182/768/473 2006/769/473 2141/770/473\nf 379/771/474 387/740/474 342/687/474\nf 388/761/475 432/772/475 411/717/475\nf 432/772/476 473/773/476 411/717/476\nf 473/773/477 448/741/477 411/717/477\nf 473/773/478 495/762/478 448/741/478\nf 496/774/479 544/688/479 533/742/479\nf 544/688/480 550/775/480 541/689/480\nf 664/210/481 80/209/481 1653/776/481\nf 187/484/482 260/463/482 186/469/482\nf 3498/777/483 3430/778/483 3445/354/483\nf 186/469/484 260/463/484 240/465/484\nf 393/585/485 359/475/485 417/644/485\nf 538/779/486 548/584/486 645/780/486\nf 3464/20/487 1830/781/487 3469/782/487\nf 23/783/488 60/784/488 59/755/488\nf 68/785/489 1578/786/489 80/787/489\nf 1456/13/490 1372/104/490 325/49/490\nf 1229/11/491 1456/13/491 325/49/491\nf 3433/349/492 3477/788/492 3501/350/492\nf 234/760/493 275/789/493 286/738/493\nf 301/739/494 333/790/494 342/687/494\nf 333/790/495 379/771/495 342/687/495\nf 387/740/496 379/771/496 388/761/496\nf 495/762/497 496/774/497 533/742/497\nf 123/481/498 168/506/498 150/791/498\nf 454/534/499 1354/625/499 1313/697/499\nf 337/792/500 359/475/500 324/474/500\nf 540/793/501 948/794/501 549/795/501\nf 103/379/502 136/378/502 102/796/502\nf 145/797/503 155/710/503 126/709/503\nf 548/584/504 782/604/504 645/780/504\nf 2977/798/505 956/799/505 2429/800/505\nf 937/801/506 55/802/506 313/803/506\nf 93/804/507 103/379/507 102/796/507\nf 385/9/508 476/12/508 1229/11/508\nf 2656/805/509 2691/806/509 2668/807/509\nf 275/789/510 287/808/510 286/738/510\nf 287/808/511 301/739/511 286/738/511\nf 287/808/512 333/790/512 301/739/512\nf 379/771/513 389/809/513 388/761/513\nf 389/809/514 432/772/514 388/761/514\nf 473/773/515 474/810/515 495/762/515\nf 495/762/516 474/810/516 496/774/516\nf 550/775/517 789/743/517 541/689/517\nf 78/811/518 93/804/518 102/796/518\nf 197/812/519 203/720/519 172/716/519\nf 3228/813/520 3241/309/520 3190/308/520\nf 54/618/521 66/394/521 74/619/521\nf 793/814/522 794/815/522 847/816/522\nf 60/784/523 81/817/523 68/818/523\nf 81/819/524 1578/786/524 68/785/524\nf 2083/820/525 2117/306/525 2065/821/525\nf 1747/81/526 158/80/526 1041/420/526\nf 20/707/527 2087/822/527 2067/708/527\nf 1458/291/528 346/229/528 2345/347/528\nf 245/823/529 234/760/529 235/824/529\nf 245/823/530 275/789/530 234/760/530\nf 319/825/531 333/790/531 287/808/531\nf 367/826/532 379/771/532 333/790/532\nf 474/810/533 545/827/533 496/774/533\nf 545/827/534 544/688/534 496/774/534\nf 545/827/535 550/775/535 544/688/535\nf 550/775/536 55/802/536 789/743/536\nf 563/614/537 914/744/537 757/828/537\nf 79/573/538 125/572/538 171/414/538\nf 38/396/539 66/390/539 54/829/539\nf 112/376/540 117/533/540 89/388/540\nf 271/204/541 668/830/541 811/831/541\nf 271/204/542 811/831/542 1241/33/542\nf 226/832/543 1224/833/543 1100/834/543\nf 94/835/544 1578/786/544 81/819/544\nf 94/835/545 1607/836/545 1578/786/545\nf 3502/837/546 3465/838/546 3455/839/546\nf 302/840/547 287/808/547 275/789/547\nf 319/825/548 367/826/548 333/790/548\nf 367/826/549 389/809/549 379/771/549\nf 433/841/550 432/772/550 389/809/550\nf 432/772/551 449/842/551 473/773/551\nf 473/773/552 449/842/552 474/810/552\nf 406/538/553 441/693/553 424/645/553\nf 2872/843/554 2198/844/554 2454/845/554\nf 2290/846/555 2193/847/555 2443/848/555\nf 2917/849/556 2927/850/556 2916/851/556\nf 162/583/557 948/794/557 890/852/557\nf 359/475/558 405/403/558 417/644/558\nf 549/795/559 948/794/559 162/583/559\nf 609/647/560 75/853/560 67/445/560\nf 361/728/561 915/854/561 426/700/561\nf 1320/855/562 1593/205/562 312/32/562\nf 1142/746/563 964/581/563 1208/332/563\nf 3453/856/564 2669/857/564 1897/858/564\nf 606/859/565 593/860/565 60/861/565\nf 593/860/566 81/819/566 60/861/566\nf 480/131/567 385/9/567 1421/54/567\nf 1669/862/568 443/295/568 183/194/568\nf 276/863/569 275/789/569 245/823/569\nf 276/863/570 302/840/570 275/789/570\nf 319/825/571 287/808/571 302/840/571\nf 369/864/572 433/841/572 389/809/572\nf 432/772/573 433/841/573 449/842/573\nf 449/842/574 497/865/574 474/810/574\nf 497/865/575 545/827/575 474/810/575\nf 2174/866/576 977/867/576 2178/868/576\nf 3434/869/577 3441/870/577 3468/871/577\nf 2768/662/578 3461/270/578 3473/872/578\nf 74/873/579 66/390/579 90/374/579\nf 811/831/580 471/31/580 1241/33/580\nf 406/538/581 418/539/581 441/693/581\nf 501/556/582 537/598/582 547/557/582\nf 82/874/583 81/819/583 593/860/583\nf 82/874/584 94/835/584 81/819/584\nf 270/231/585 382/132/585 1409/171/585\nf 235/824/586 217/875/586 245/823/586\nf 367/826/587 369/864/587 389/809/587\nf 497/865/588 518/876/588 545/827/588\nf 518/876/589 546/877/589 545/827/589\nf 545/827/590 546/877/590 550/775/590\nf 339/878/591 55/802/591 550/775/591\nf 489/718/592 525/879/592 556/763/592\nf 153/440/593 157/437/593 152/502/593\nf 347/401/594 337/792/594 858/880/594\nf 525/468/595 540/793/595 549/795/595\nf 151/503/596 180/526/596 168/506/596\nf 2277/881/597 1120/126/597 1025/882/597\nf 3469/782/598 3493/399/598 3508/21/598\nf 127/883/599 94/835/599 82/874/599\nf 1262/146/600 113/143/600 365/145/600\nf 1960/884/601 833/885/601 1935/886/601\nf 1687/887/602 206/888/602 217/875/602\nf 217/875/603 236/889/603 245/823/603\nf 245/823/604 236/889/604 276/863/604\nf 303/890/605 302/840/605 276/863/605\nf 368/891/606 319/825/606 302/840/606\nf 303/890/607 368/891/607 302/840/607\nf 368/891/608 367/826/608 319/825/608\nf 367/826/609 368/891/609 369/864/609\nf 433/841/610 484/892/610 449/842/610\nf 449/842/611 484/892/611 497/865/611\nf 383/893/612 339/878/612 550/775/612\nf 546/877/613 383/893/613 550/775/613\nf 339/894/614 313/895/614 55/896/614\nf 968/632/615 996/897/615 3063/898/615\nf 629/899/616 75/552/616 609/900/616\nf 471/31/617 360/901/617 312/32/617\nf 1489/564/618 2016/88/618 2005/237/618\nf 556/582/619 525/468/619 162/583/619\nf 127/883/620 146/902/620 138/903/620\nf 206/888/621 236/889/621 217/875/621\nf 236/889/622 264/904/622 276/863/622\nf 264/904/623 303/890/623 276/863/623\nf 433/841/624 461/905/624 484/892/624\nf 484/892/625 518/876/625 497/865/625\nf 339/894/626 479/906/626 1328/907/626\nf 1037/518/627 1067/908/627 1044/909/627\nf 1199/493/628 1194/601/628 1211/278/628\nf 197/179/629 44/181/629 203/910/629\nf 1384/574/630 477/599/630 501/556/630\nf 360/901/631 1320/855/631 312/32/631\nf 1567/911/632 1798/912/632 1597/913/632\nf 1014/914/633 803/915/633 1161/916/633\nf 593/860/634 32/917/634 82/874/634\nf 83/918/635 127/883/635 82/874/635\nf 146/902/636 175/919/636 1639/920/636\nf 1687/887/637 1639/920/637 175/919/637\nf 175/919/638 206/888/638 1687/887/638\nf 303/890/639 334/921/639 368/891/639\nf 334/921/640 370/922/640 368/891/640\nf 368/891/641 370/922/641 369/864/641\nf 370/922/642 401/923/642 433/841/642\nf 369/864/643 370/922/643 433/841/643\nf 401/923/644 461/905/644 433/841/644\nf 484/892/645 509/924/645 518/876/645\nf 479/925/646 339/878/646 383/893/646\nf 1055/926/647 1061/517/647 1045/405/647\nf 316/356/648 2393/636/648 362/357/648\nf 348/927/649 915/854/649 361/728/649\nf 1320/855/650 327/928/650 106/929/650\nf 83/918/651 82/874/651 32/917/651\nf 83/918/652 95/930/652 127/883/652\nf 127/883/653 95/930/653 146/902/653\nf 288/931/654 303/890/654 264/904/654\nf 288/931/655 334/921/655 303/890/655\nf 334/921/656 357/932/656 370/922/656\nf 461/905/657 509/924/657 484/892/657\nf 518/876/658 534/933/658 546/877/658\nf 157/437/659 187/484/659 186/469/659\nf 1120/126/660 964/581/660 1142/746/660\nf 89/388/661 117/533/661 116/483/661\nf 556/582/662 548/584/662 539/934/662\nf 852/935/663 41/936/663 1320/855/663\nf 360/901/664 852/935/664 1320/855/664\nf 41/936/665 327/928/665 1320/855/665\nf 1831/937/666 1577/938/666 1599/939/666\nf 293/464/667 858/880/667 266/472/667\nf 1375/410/668 237/940/668 1255/941/668\nf 1979/942/669 2122/943/669 1206/944/669\nf 32/917/670 45/945/670 83/918/670\nf 95/930/671 139/946/671 146/902/671\nf 146/902/672 139/946/672 175/919/672\nf 175/919/673 192/947/673 206/888/673\nf 192/947/674 193/948/674 206/888/674\nf 193/948/675 246/949/675 206/888/675\nf 246/949/676 236/889/676 206/888/676\nf 246/949/677 264/904/677 236/889/677\nf 288/931/678 304/950/678 334/921/678\nf 334/921/679 304/950/679 357/932/679\nf 304/950/680 358/951/680 357/932/680\nf 357/932/681 401/923/681 370/922/681\nf 401/923/682 434/952/682 461/905/682\nf 518/876/683 509/924/683 534/933/683\nf 2696/953/684 2767/226/684 964/134/684\nf 2005/237/685 1976/109/685 1489/564/685\nf 1025/882/686 1120/126/686 1142/746/686\nf 139/946/687 176/954/687 175/919/687\nf 176/954/688 192/947/688 175/919/688\nf 246/949/689 277/955/689 264/904/689\nf 277/955/690 288/931/690 264/904/690\nf 534/933/691 383/893/691 546/877/691\nf 523/956/692 539/934/692 538/779/692\nf 1237/957/693 106/929/693 19/958/693\nf 37/959/694 46/960/694 45/945/694\nf 46/960/695 83/918/695 45/945/695\nf 128/961/696 139/946/696 95/930/696\nf 193/948/697 253/962/697 246/949/697\nf 358/951/698 371/963/698 357/932/698\nf 357/932/699 371/963/699 401/923/699\nf 371/963/700 412/964/700 401/923/700\nf 412/964/701 434/952/701 401/923/701\nf 434/952/702 450/965/702 461/905/702\nf 450/965/703 509/924/703 461/905/703\nf 450/965/704 498/966/704 509/924/704\nf 509/924/705 498/966/705 534/933/705\nf 75/552/706 91/375/706 67/391/706\nf 41/936/707 297/967/707 327/928/707\nf 1551/968/708 84/969/708 83/918/708\nf 83/918/709 84/969/709 95/930/709\nf 176/954/710 193/948/710 192/947/710\nf 278/970/711 277/955/711 246/949/711\nf 305/971/712 288/931/712 277/955/712\nf 288/931/713 305/971/713 304/950/713\nf 304/950/714 305/971/714 358/951/714\nf 412/964/715 451/972/715 434/952/715\nf 451/972/716 450/965/716 434/952/716\nf 534/933/717 565/973/717 383/893/717\nf 565/973/718 135/974/718 383/893/718\nf 383/893/719 135/974/719 479/925/719\nf 213/975/720 502/976/720 479/925/720\nf 971/977/721 970/978/721 961/979/721\nf 337/792/722 405/403/722 359/475/722\nf 539/934/723 548/584/723 538/779/723\nf 326/630/724 170/980/724 227/505/724\nf 297/967/725 18/981/725 327/928/725\nf 327/928/726 18/981/726 19/958/726\nf 1153/360/727 3447/982/727 1064/983/727\nf 385/9/728 456/8/728 476/12/728\nf 84/969/729 128/961/729 95/930/729\nf 147/984/730 176/954/730 139/946/730\nf 253/962/731 278/970/731 246/949/731\nf 278/970/732 305/971/732 277/955/732\nf 335/985/733 380/986/733 371/963/733\nf 358/951/734 335/985/734 371/963/734\nf 371/963/735 390/987/735 412/964/735\nf 462/988/736 498/966/736 450/965/736\nf 267/989/737 479/925/737 135/974/737\nf 267/989/738 213/975/738 479/925/738\nf 132/441/739 142/501/739 117/533/739\nf 247/473/740 259/435/740 224/480/740\nf 19/958/741 18/981/741 1237/957/741\nf 2332/990/742 1458/291/742 2345/347/742\nf 129/991/743 139/946/743 128/961/743\nf 129/991/744 147/984/744 139/946/744\nf 207/992/745 253/962/745 193/948/745\nf 335/985/746 358/951/746 305/971/746\nf 343/993/747 380/986/747 335/985/747\nf 371/963/748 380/986/748 390/987/748\nf 451/972/749 462/988/749 450/965/749\nf 18/981/750 559/994/750 1237/957/750\nf 562/995/751 608/996/751 2/997/751\nf 2093/338/752 2120/186/752 577/185/752\nf 306/998/753 305/971/753 278/970/753\nf 306/998/754 335/985/754 305/971/754\nf 390/987/755 435/999/755 412/964/755\nf 463/1000/756 451/972/756 412/964/756\nf 435/999/757 463/1000/757 412/964/757\nf 519/1001/758 534/933/758 498/966/758\nf 519/1001/759 565/973/759 534/933/759\nf 67/391/760 91/375/760 90/374/760\nf 3424/1002/761 3492/1003/761 3426/1004/761\nf 441/693/762 442/555/762 455/626/762\nf 18/981/763 562/1005/763 559/994/763\nf 943/1006/764 1297/1007/764 684/1008/764\nf 3470/281/765 3497/656/765 3490/1009/765\nf 84/969/766 1580/1010/766 128/961/766\nf 164/1011/767 176/954/767 147/984/767\nf 164/1011/768 193/948/768 176/954/768\nf 164/1011/769 207/992/769 193/948/769\nf 289/1012/770 306/998/770 278/970/770\nf 343/993/771 390/987/771 380/986/771\nf 499/1013/772 462/988/772 451/972/772\nf 463/1000/773 499/1013/773 451/972/773\nf 552/1014/774 135/974/774 565/973/774\nf 552/1014/775 267/989/775 135/974/775\nf 959/576/776 998/449/776 954/577/776\nf 454/534/777 468/536/777 1354/625/777\nf 524/691/778 539/764/778 523/634/778\nf 181/436/779 260/463/779 187/484/779\nf 1300/150/780 1423/149/780 326/1015/780\nf 2030/87/781 2041/1016/781 2040/1017/781\nf 218/1018/782 207/992/782 164/1011/782\nf 218/1018/783 230/1019/783 207/992/783\nf 230/1019/784 253/962/784 207/992/784\nf 230/1019/785 254/1020/785 253/962/785\nf 253/962/786 254/1020/786 278/970/786\nf 344/1021/787 335/985/787 306/998/787\nf 344/1021/788 343/993/788 335/985/788\nf 344/1021/789 372/1022/789 343/993/789\nf 343/993/790 372/1022/790 390/987/790\nf 390/987/791 413/1023/791 435/999/791\nf 519/1001/792 498/966/792 462/988/792\nf 499/1013/793 519/1001/793 462/988/793\nf 535/1024/794 565/973/794 519/1001/794\nf 1199/493/795 1211/278/795 922/451/795\nf 998/449/796 1018/1025/796 997/1026/796\nf 1018/404/797 1013/406/797 997/1027/797\nf 152/502/798 157/437/798 180/526/798\nf 54/829/799 53/478/799 38/396/799\nf 143/1028/800 133/439/800 124/507/800\nf 524/691/801 523/634/801 478/633/801\nf 559/994/802 2/1029/802 419/1030/802\nf 353/1031/803 560/1032/803 25/1033/803\nf 1183/1034/804 1465/1035/804 1438/1036/804\nf 1805/1037/805 1838/1038/805 3510/1039/805\nf 42/202/806 134/203/806 1386/129/806\nf 114/1040/807 129/991/807 128/961/807\nf 148/1041/808 147/984/808 129/991/808\nf 148/1041/809 164/1011/809 147/984/809\nf 254/1020/810 289/1012/810 278/970/810\nf 289/1012/811 344/1021/811 306/998/811\nf 391/1042/812 413/1023/812 390/987/812\nf 1149/1043/813 922/451/813 594/1044/813\nf 198/1045/814 197/812/814 172/716/814\nf 1772/1046/815 1733/1047/815 1734/1048/815\nf 2/1029/816 560/1032/816 419/1030/816\nf 419/1049/817 560/1050/817 353/1051/817\nf 2967/1052/818 957/1053/818 956/1054/818\nf 167/660/819 180/526/819 196/479/819\nf 414/50/820 42/202/820 1441/128/820\nf 1450/55/821 414/50/821 1441/128/821\nf 165/1055/822 218/1018/822 164/1011/822\nf 255/1056/823 230/1019/823 218/1018/823\nf 255/1056/824 254/1020/824 230/1019/824\nf 289/1012/825 307/1057/825 344/1021/825\nf 307/1057/826 372/1022/826 344/1021/826\nf 391/1042/827 390/987/827 372/1022/827\nf 402/1058/828 413/1023/828 391/1042/828\nf 413/1023/829 436/1059/829 435/999/829\nf 435/999/830 436/1059/830 463/1000/830\nf 485/1060/831 499/1013/831 463/1000/831\nf 485/1060/832 519/1001/832 499/1013/832\nf 485/1060/833 535/1024/833 519/1001/833\nf 552/1014/834 565/973/834 535/1024/834\nf 680/575/835 774/1061/835 1384/574/835\nf 102/796/836 670/1062/836 92/1063/836\nf 56/1064/837 554/600/837 280/1065/837\nf 323/476/838 375/1066/838 322/1067/838\nf 469/386/839 524/719/839 478/368/839\nf 2005/237/840 2015/117/840 1975/110/840\nf 148/1041/841 129/991/841 114/1040/841\nf 165/1055/842 164/1011/842 148/1041/842\nf 165/1055/843 208/1068/843 218/1018/843\nf 208/1068/844 255/1056/844 218/1018/844\nf 255/1056/845 219/1069/845 254/1020/845\nf 289/1070/846 1661/1071/846 307/1072/846\nf 1661/1071/847 1720/1073/847 307/1072/847\nf 1197/1074/848 3486/1075/848 2702/1076/848\nf 1720/1073/849 1594/1077/849 307/1072/849\nf 1594/1078/850 391/1042/850 372/1022/850\nf 436/1059/851 464/1079/851 463/1000/851\nf 463/1000/852 464/1079/852 485/1060/852\nf 559/1080/853 419/1049/853 353/1051/853\nf 2499/1081/854 2161/1082/854 2096/382/854\nf 289/1070/855 254/1083/855 1661/1071/855\nf 212/470/856 247/473/856 224/480/856\nf 455/626/857 469/386/857 441/693/857\nf 469/386/858 468/370/858 441/693/858\nf 1981/58/859 1378/594/859 1154/364/859\nf 156/103/860 414/50/860 1450/55/860\nf 1406/173/861 104/56/861 1346/148/861\nf 1222/1084/862 1224/833/862 226/832/862\nf 3476/355/863 3445/354/863 3497/656/863\nf 402/1058/864 403/1085/864 413/1023/864\nf 413/1023/865 403/1085/865 436/1059/865\nf 1/1086/866 552/1014/866 535/1024/866\nf 1/1086/867 26/1087/867 552/1014/867\nf 26/1087/868 294/1088/868 552/1014/868\nf 1772/1046/869 1771/1089/869 1733/1047/869\nf 1771/1089/870 1770/1090/870 1733/1047/870\nf 2976/1091/871 956/799/871 2977/798/871\nf 168/506/872 167/660/872 150/791/872\nf 393/585/873 417/644/873 440/586/873\nf 996/897/874 987/1092/874 3063/898/874\nf 754/1093/875 272/1094/875 1462/1095/875\nf 1267/191/876 1100/834/876 1252/1096/876\nf 3496/1097/877 3503/1098/877 3452/1099/877\nf 148/1041/878 114/1040/878 122/1100/878\nf 148/1041/879 177/1101/879 165/1055/879\nf 165/1055/880 177/1101/880 208/1068/880\nf 177/1101/881 209/1102/881 208/1068/881\nf 209/1102/882 219/1069/882 255/1056/882\nf 208/1068/883 209/1102/883 255/1056/883\nf 1937/1103/884 1651/1104/884 1633/1105/884\nf 3448/1106/885 3473/1107/885 3481/1108/885\nf 1375/410/886 1467/283/886 237/940/886\nf 402/1058/887 1610/1109/887 403/1085/887\nf 465/1110/888 485/1060/888 464/1079/888\nf 2358/1111/889 2134/1112/889 2221/1113/889\nf 59/755/890 60/784/890 80/209/890\nf 112/376/891 132/441/891 117/533/891\nf 3236/1114/892 3264/1115/892 3460/1116/892\nf 1118/1117/893 1180/324/893 3485/326/893\nf 554/600/894 227/505/894 280/1065/894\nf 323/476/895 393/585/895 375/1066/895\nf 1421/54/896 156/103/896 1450/55/896\nf 69/1118/897 1553/1119/897 1543/1120/897\nf 69/1118/898 1583/1121/898 1553/1119/898\nf 177/1122/899 1680/1123/899 209/1124/899\nf 21/230/900 270/231/900 514/123/900\nf 1771/1089/901 1800/1125/901 1770/1090/901\nf 1471/430/902 21/230/902 1457/1126/902\nf 1240/1127/903 1261/29/903 2206/1128/903\nf 2768/662/904 3473/872/904 3427/92/904\nf 403/1085/905 422/1129/905 436/1059/905\nf 436/1059/906 422/1129/906 464/1079/906\nf 465/1110/907 520/1130/907 485/1060/907\nf 520/1130/908 535/1024/908 485/1060/908\nf 3430/778/909 3511/298/909 3445/354/909\nf 2248/1131/910 2309/1132/910 2297/1133/910\nf 858/880/911 324/474/911 266/472/911\nf 196/479/912 224/480/912 239/1134/912\nf 522/622/913 513/558/913 56/1064/913\nf 247/473/914 266/472/914 310/433/914\nf 1771/1089/915 1808/1135/915 1800/1125/915\nf 49/1136/916 61/1137/916 48/235/916\nf 61/1137/917 1543/233/917 48/235/917\nf 1517/1138/918 49/1136/918 1527/1139/918\nf 652/1140/919 1920/1141/919 2229/1142/919\nf 1453/1143/920 1381/60/920 330/1144/920\nf 237/940/921 1467/283/921 1300/150/921\nf 492/1145/922 1466/1146/922 1685/218/922\nf 1808/1147/923 1817/177/923 1800/1148/923\nf 1370/53/924 1381/60/924 1395/1149/924\nf 422/1129/925 1664/1150/925 464/1079/925\nf 1664/1150/926 465/1110/926 464/1079/926\nf 520/1130/927 5/1151/927 535/1024/927\nf 5/1151/928 1/1086/928 535/1024/928\nf 268/1152/929 294/1088/929 26/1087/929\nf 268/1152/930 1345/1153/930 294/1088/930\nf 28/1154/931 634/1155/931 340/1156/931\nf 92/1063/932 78/811/932 102/796/932\nf 523/956/933 538/779/933 537/598/933\nf 61/1157/934 69/1118/934 1543/1120/934\nf 85/1158/935 1583/1121/935 69/1118/935\nf 85/1158/936 98/1159/936 97/1160/936\nf 1583/1121/937 85/1158/937 97/1160/937\nf 1614/1161/938 1601/1162/938 97/1160/938\nf 98/1159/939 1614/1161/939 97/1160/939\nf 946/486/940 121/1163/940 1330/487/940\nf 1274/1164/941 270/231/941 1409/171/941\nf 1373/15/942 1417/1165/942 273/1166/942\nf 514/123/943 270/231/943 1274/1164/943\nf 1230/1167/944 1252/1096/944 1224/833/944\nf 1610/1109/945 422/1129/945 403/1085/945\nf 510/1168/946 520/1130/946 465/1110/946\nf 311/1169/947 268/1152/947 26/1087/947\nf 1094/1170/948 1102/1171/948 1114/1172/948\nf 1091/513/949 558/635/949 1171/657/949\nf 3170/1173/950 78/811/950 92/1063/950\nf 124/507/951 132/441/951 112/376/951\nf 1389/603/952 890/852/952 604/1174/952\nf 1077/1175/953 1067/908/953 1094/1170/953\nf 61/1157/954 85/1158/954 69/1118/954\nf 2065/821/955 2117/306/955 2082/307/955\nf 1986/1176/956 2030/87/956 2004/1177/956\nf 352/36/957 12/223/957 457/1178/957\nf 1303/1179/958 768/1180/958 1291/1181/958\nf 465/1110/959 452/1182/959 510/1168/959\nf 26/1183/960 1/1184/960 311/1185/960\nf 311/1169/961 1/1086/961 5/1151/961\nf 240/465/962 212/470/962 186/469/962\nf 2223/1186/963 2157/1187/963 2302/1188/963\nf 162/583/964 890/852/964 1389/603/964\nf 259/435/965 247/473/965 310/433/965\nf 537/598/966 125/572/966 547/557/966\nf 50/1189/967 61/1137/967 49/1136/967\nf 61/1157/968 86/1190/968 85/1158/968\nf 86/1190/969 98/1159/969 85/1158/969\nf 108/1191/970 1614/1192/970 98/1193/970\nf 2153/1194/971 349/1195/971 1507/1196/971\nf 3498/1197/972 1674/1198/972 3430/1199/972\nf 1817/177/973 1846/1200/973 1845/178/973\nf 2689/1201/974 1969/1202/974 2688/1203/974\nf 553/1204/975 5/1151/975 520/1130/975\nf 311/1185/976 555/1205/976 268/595/976\nf 782/604/977 756/675/977 202/674/977\nf 442/555/978 470/554/978 455/626/978\nf 1299/102/979 555/1205/979 134/203/979\nf 50/1206/980 62/1207/980 61/1157/980\nf 62/1207/981 86/1190/981 61/1157/981\nf 99/1208/982 98/1159/982 86/1190/982\nf 99/1209/983 108/1210/983 98/1211/983\nf 2087/822/984 57/1212/984 1989/1213/984\nf 1960/884/985 577/185/985 833/885/985\nf 6/1214/986 410/1215/986 1389/603/986\nf 452/1182/987 1544/1216/987 510/1168/987\nf 553/1204/988 520/1130/988 510/1168/988\nf 249/1217/989 311/1169/989 5/1151/989\nf 3140/1218/990 3128/1219/990 3113/1220/990\nf 144/676/991 237/442/991 490/416/991\nf 79/573/992 171/414/992 248/504/992\nf 1193/334/993 1207/333/993 1175/1221/993\nf 155/710/994 161/1222/994 172/716/994\nf 161/1222/995 198/1045/995 172/716/995\nf 1253/1223/996 1330/1224/996 617/1225/996\nf 1472/348/997 1471/430/997 1413/1226/997\nf 190/454/998 173/73/998 1451/90/998\nf 577/185/999 2088/187/999 833/885/999\nf 21/230/1000 514/123/1000 1457/1126/1000\nf 1381/60/1001 352/36/1001 330/1144/1001\nf 1788/1227/1002 1810/1228/1002 1787/1229/1002\nf 1332/76/1003 1254/78/1003 1358/1230/1003\nf 1544/1216/1004 486/1231/1004 510/1168/1004\nf 486/1231/1005 521/1232/1005 510/1168/1005\nf 521/1232/1006 553/1204/1006 510/1168/1006\nf 553/1204/1007 249/1217/1007 5/1151/1007\nf 363/1233/1008 555/1205/1008 311/1185/1008\nf 620/1234/1009 767/1235/1009 243/1236/1009\nf 1195/453/1010 1201/511/1010 1200/1237/1010\nf 62/1207/1011 70/1238/1011 86/1190/1011\nf 100/1239/1012 99/1208/1012 86/1190/1012\nf 70/1240/1013 100/1241/1013 86/1242/1013\nf 100/1243/1014 1616/1244/1014 108/1191/1014\nf 99/1209/1015 100/1241/1015 108/1210/1015\nf 108/1191/1016 1616/1244/1016 1615/1245/1016\nf 1285/192/1017 1370/1246/1017 1217/193/1017\nf 1705/1247/1018 1576/1248/1018 320/1249/1018\nf 1545/1250/1019 1558/1251/1019 1294/1252/1019\nf 363/1253/1020 311/1169/1020 249/1217/1020\nf 1123/424/1021 1156/452/1021 1146/425/1021\nf 690/1254/1022 143/1028/1022 124/507/1022\nf 525/468/1023 549/795/1023 162/583/1023\nf 1661/1255/1024 254/1020/1024 219/1069/1024\nf 1383/1256/1025 273/1166/1025 1245/1257/1025\nf 1088/111/1026 1855/113/1026 1147/261/1026\nf 1539/70/1027 256/1258/1027 265/71/1027\nf 265/71/1028 279/1259/1028 1576/1248/1028\nf 1413/1226/1029 1427/1260/1029 1362/1261/1029\nf 1413/1226/1030 1471/430/1030 1427/1260/1030\nf 1668/1262/1031 500/1263/1031 486/1231/1031\nf 500/1263/1032 521/1232/1032 486/1231/1032\nf 17/1264/1033 553/1204/1033 521/1232/1033\nf 241/1265/1034 363/1253/1034 249/1217/1034\nf 1094/1170/1035 1067/908/1035 1102/1171/1035\nf 1002/358/1036 3449/1266/1036 3495/359/1036\nf 2689/1201/1037 2730/1267/1037 1969/1202/1037\nf 1243/19/1038 555/1205/1038 1299/102/1038\nf 840/510/1039 858/880/1039 293/464/1039\nf 260/463/1040 840/510/1040 293/464/1040\nf 50/1189/1041 63/1268/1041 62/1269/1041\nf 63/1270/1042 70/1238/1042 62/1207/1042\nf 70/1240/1043 87/1271/1043 100/1241/1043\nf 100/1241/1044 109/1272/1044 1616/1273/1044\nf 1417/1165/1045 137/495/1045 273/1166/1045\nf 1472/348/1046 1413/1226/1046 2346/1274/1046\nf 265/71/1047 256/1258/1047 279/1259/1047\nf 279/1259/1048 320/1249/1048 1576/1248/1048\nf 321/1275/1049 1698/1276/1049 320/1249/1049\nf 3427/92/1050 3448/1277/1050 3444/93/1050\nf 500/1263/1051 487/1278/1051 521/1232/1051\nf 487/1278/1052 17/1264/1052 521/1232/1052\nf 15/1279/1053 249/1217/1053 553/1204/1053\nf 3469/782/1054 3508/21/1054 3464/20/1054\nf 525/468/1055 899/467/1055 540/793/1055\nf 33/446/1056 581/1280/1056 610/1281/1056\nf 610/1281/1057 40/447/1057 33/446/1057\nf 101/508/1058 690/1254/1058 124/507/1058\nf 309/550/1059 323/476/1059 322/1067/1059\nf 3456/400/1060 3493/399/1060 3469/782/1060\nf 172/716/1061 203/720/1061 160/661/1061\nf 100/1241/1062 87/1271/1062 109/1272/1062\nf 2150/1282/1063 2414/460/1063 2407/1283/1063\nf 210/1284/1064 221/1285/1064 1539/70/1064\nf 221/1285/1065 256/1258/1065 1539/70/1065\nf 308/1286/1066 279/1259/1066 256/1258/1066\nf 404/1287/1067 1698/1276/1067 321/1275/1067\nf 404/1287/1068 392/1288/1068 1698/1276/1068\nf 17/1264/1069 15/1279/1069 553/1204/1069\nf 241/1265/1070 249/1217/1070 15/1279/1070\nf 316/356/1071 783/141/1071 1162/140/1071\nf 554/600/1072 79/573/1072 248/504/1072\nf 547/557/1073 79/573/1073 554/600/1073\nf 3511/298/1074 3463/300/1074 3497/656/1074\nf 172/716/1075 160/661/1075 154/377/1075\nf 749/1289/1076 3426/1004/1076 105/1290/1076\nf 50/1189/1077 51/1291/1077 63/1268/1077\nf 63/1268/1078 71/1292/1078 70/1240/1078\nf 70/1240/1079 71/1292/1079 87/1271/1079\nf 109/1272/1080 1622/1293/1080 1643/1294/1080\nf 1622/1293/1081 166/1295/1081 1643/1294/1081\nf 194/1296/1082 211/1297/1082 210/1284/1082\nf 211/1297/1083 221/1285/1083 210/1284/1083\nf 221/1285/1084 238/1298/1084 256/1258/1084\nf 279/1259/1085 308/1286/1085 320/1249/1085\nf 308/1286/1086 321/1275/1086 320/1249/1086\nf 373/1299/1087 404/1287/1087 321/1275/1087\nf 2120/186/1088 1979/942/1088 1206/944/1088\nf 3480/1300/1089 3454/1301/1089 3424/1002/1089\nf 511/1302/1090 17/1264/1090 487/1278/1090\nf 269/1303/1091 363/1253/1091 241/1265/1091\nf 1146/425/1092 1195/453/1092 1166/602/1092\nf 126/709/1093 154/377/1093 103/379/1093\nf 337/792/1094 347/401/1094 405/403/1094\nf 87/1271/1095 110/1304/1095 109/1272/1095\nf 1274/1164/1096 1409/171/1096 1375/410/1096\nf 3494/1305/1097 3485/326/1097 3500/325/1097\nf 1565/1306/1098 13/1307/1098 1434/1308/1098\nf 3486/1075/1099 3488/1309/1099 3479/312/1099\nf 238/1298/1100 308/1286/1100 256/1258/1100\nf 1545/1310/1101 1650/1311/1101 500/1263/1101\nf 500/1263/1102 1650/1311/1102 487/1278/1102\nf 269/1303/1103 241/1265/1103 15/1279/1103\nf 269/1312/1104 1386/129/1104 363/1233/1104\nf 998/449/1105 997/1026/1105 968/632/1105\nf 580/1313/1106 27/397/1106 38/396/1106\nf 417/644/1107 406/538/1107 424/645/1107\nf 51/1291/1108 72/1314/1108 63/1268/1108\nf 63/1268/1109 72/1314/1109 71/1292/1109\nf 72/1314/1110 88/1315/1110 87/1271/1110\nf 71/1292/1111 72/1314/1111 87/1271/1111\nf 87/1271/1112 88/1315/1112 110/1304/1112\nf 110/1304/1113 1622/1293/1113 109/1272/1113\nf 775/1316/1114 1004/1317/1114 683/1318/1114\nf 199/1319/1115 211/1297/1115 194/1296/1115\nf 178/1320/1116 199/1319/1116 194/1296/1116\nf 199/1319/1117 222/1321/1117 211/1297/1117\nf 222/1321/1118 221/1285/1118 211/1297/1118\nf 222/1321/1119 223/1322/1119 221/1285/1119\nf 223/1322/1120 238/1298/1120 221/1285/1120\nf 336/1323/1121 321/1275/1121 308/1286/1121\nf 336/1323/1122 373/1299/1122 321/1275/1122\nf 381/1324/1123 404/1287/1123 373/1299/1123\nf 922/451/1124 1171/657/1124 594/1044/1124\nf 526/1325/1125 856/1326/1125 540/793/1125\nf 540/793/1126 856/1326/1126 948/794/1126\nf 405/403/1127 406/538/1127 417/644/1127\nf 88/1315/1128 115/1327/1128 1622/1293/1128\nf 110/1304/1129 88/1315/1129 1622/1293/1129\nf 349/1195/1130 184/1328/1130 1507/1196/1130\nf 199/1319/1131 223/1322/1131 222/1321/1131\nf 238/1298/1132 291/1329/1132 308/1286/1132\nf 291/1329/1133 336/1323/1133 308/1286/1133\nf 381/1324/1134 415/1330/1134 404/1287/1134\nf 3457/1331/1135 3482/1332/1135 3424/1002/1135\nf 514/123/1136 459/122/1136 1457/1126/1136\nf 536/1333/1137 17/1264/1137 511/1302/1137\nf 15/1279/1138 17/1264/1138 536/1333/1138\nf 1932/1334/1139 1115/426/1139 1146/425/1139\nf 202/674/1140 144/676/1140 490/416/1140\nf 202/674/1141 490/416/1141 281/415/1141\nf 72/1314/1142 73/1335/1142 88/1315/1142\nf 199/1319/1143 195/1336/1143 223/1322/1143\nf 336/1323/1144 374/1337/1144 373/1299/1144\nf 374/1337/1145 381/1324/1145 373/1299/1145\nf 415/1338/1146 1302/1339/1146 404/1340/1146\nf 1064/983/1147 1100/834/1147 1153/360/1147\nf 3508/21/1148 3494/663/1148 3500/1341/1148\nf 295/1342/1149 15/1279/1149 536/1333/1149\nf 295/1342/1150 269/1303/1150 15/1279/1150\nf 295/1342/1151 170/980/1151 269/1303/1151\nf 170/1343/1152 77/262/1152 269/1312/1152\nf 77/262/1153 1386/129/1153 269/1312/1153\nf 3443/351/1154 3501/350/1154 3452/1099/1154\nf 123/481/1155 150/791/1155 131/482/1155\nf 73/1335/1156 111/389/1156 88/1315/1156\nf 88/1315/1157 111/389/1157 115/1327/1157\nf 141/1344/1158 167/660/1158 179/1345/1158\nf 140/1346/1159 141/1344/1159 179/1345/1159\nf 167/660/1160 195/1336/1160 179/1345/1160\nf 223/1322/1161 257/1347/1161 238/1298/1161\nf 257/1347/1162 291/1329/1162 238/1298/1162\nf 292/1348/1163 336/1323/1163 291/1329/1163\nf 292/1348/1164 322/1067/1164 336/1323/1164\nf 322/1067/1165 374/1337/1165 336/1323/1165\nf 475/1349/1166 1650/1350/1166 466/1351/1166\nf 1650/1311/1167 475/1352/1167 512/1353/1167\nf 512/1353/1168 536/1333/1168 511/1302/1168\nf 3495/359/1169 3450/1354/1169 3447/982/1169\nf 999/1355/1170 1038/1356/1170 1018/404/1170\nf 51/1291/1171 52/1357/1171 72/1314/1171\nf 52/1357/1172 64/1358/1172 72/1314/1172\nf 72/1359/1173 64/1360/1173 73/1361/1173\nf 111/389/1174 131/482/1174 115/1327/1174\nf 115/1327/1175 131/482/1175 140/1346/1175\nf 1811/1362/1176 1802/1363/1176 1525/667/1176\nf 375/1066/1177 374/1337/1177 322/1067/1177\nf 375/1066/1178 381/1324/1178 374/1337/1178\nf 1061/517/1179 1067/908/1179 1037/518/1179\nf 1251/1364/1180 475/1349/1180 466/1351/1180\nf 522/622/1181 536/1333/1181 512/1353/1181\nf 1091/513/1182 1143/512/1182 558/635/1182\nf 477/599/1183 537/598/1183 501/556/1183\nf 858/880/1184 337/792/1184 324/474/1184\nf 523/956/1185 537/598/1185 488/369/1185\nf 513/558/1186 547/557/1186 554/600/1186\nf 51/1291/1187 588/477/1187 52/1357/1187\nf 131/482/1188 141/1344/1188 140/1346/1188\nf 195/1336/1189 239/1134/1189 223/1322/1189\nf 223/1322/1190 239/1134/1190 257/1347/1190\nf 257/1347/1191 292/1348/1191 291/1329/1191\nf 381/1324/1192 416/587/1192 415/1330/1192\nf 415/1330/1193 416/587/1193 423/1365/1193\nf 2781/288/1194 2144/1366/1194 2467/289/1194\nf 57/1367/1195 1311/1368/1195 1989/1369/1195\nf 198/1045/1196 724/1370/1196 197/812/1196\nf 195/1336/1197 196/479/1197 239/1134/1197\nf 258/434/1198 292/1348/1198 257/1347/1198\nf 393/585/1199 416/587/1199 381/1324/1199\nf 3485/326/1200 3443/1371/1200 3436/1372/1200\nf 513/558/1201 554/600/1201 56/1064/1201\nf 682/745/1202 522/622/1202 512/1353/1202\nf 56/1064/1203 536/1333/1203 522/622/1203\nf 56/1064/1204 295/1342/1204 536/1333/1204\nf 280/1065/1205 227/505/1205 295/1342/1205\nf 295/1342/1206 227/505/1206 170/980/1206\nf 170/980/1207 1423/1373/1207 77/1374/1207\nf 2015/117/1208 2030/87/1208 1986/1176/1208\nf 588/477/1209 53/478/1209 52/1357/1209\nf 53/617/1210 65/631/1210 64/1360/1210\nf 52/1357/1211 53/478/1211 64/1358/1211\nf 64/1360/1212 65/631/1212 73/1361/1212\nf 65/387/1213 111/389/1213 73/1335/1213\nf 141/1344/1214 150/791/1214 167/660/1214\nf 195/1336/1215 167/660/1215 196/479/1215\nf 259/435/1216 257/1347/1216 239/1134/1216\nf 259/435/1217 258/434/1217 257/1347/1217\nf 258/434/1218 309/550/1218 292/1348/1218\nf 309/550/1219 322/1067/1219 292/1348/1219\nf 393/585/1220 381/1324/1220 375/1066/1220\nf 1974/108/1221 1986/1176/1221 3390/1375/1221\nf 56/1064/1222 280/1065/1222 295/1342/1222\nf 423/1376/1223 439/1377/1223 1251/1364/1223\nf 111/389/1224 116/483/1224 131/482/1224\nf 150/791/1225 141/1344/1225 131/482/1225\nf 224/480/1226 259/435/1226 239/1134/1226\nf 258/434/1227 310/433/1227 309/550/1227\nf 145/797/1228 126/709/1228 661/549/1228\nf 598/1378/1229 597/1379/1229 581/1280/1229\nf 840/510/1230 859/1380/1230 858/880/1230\nf 855/1381/1231 731/1382/1231 747/1383/1231\nf 677/1384/1232 694/1385/1232 693/1386/1232\nf 822/1387/1233 707/1388/1233 769/1389/1233\nf 769/1389/1234 932/1390/1234 822/1387/1234\nf 710/1391/1235 720/1392/1235 703/438/1235\nf 859/1380/1236 912/1393/1236 347/401/1236\nf 654/1394/1237 425/553/1237 442/555/1237\nf 608/996/1238 810/1395/1238 674/1396/1238\nf 1194/601/1239 1200/1237/1239 1211/278/1239\nf 2083/820/1240 2065/821/1240 2042/89/1240\nf 793/814/1241 847/816/1241 817/1397/1241\nf 597/1379/1242 629/899/1242 610/1281/1242\nf 2776/1398/1243 2792/1399/1243 2731/1400/1243\nf 651/1401/1244 650/1402/1244 614/1403/1244\nf 735/1404/1245 722/1405/1245 717/1406/1245\nf 1194/601/1246 1195/453/1246 1200/1237/1246\nf 651/1401/1247 663/1407/1247 650/1402/1247\nf 663/1407/1248 681/1408/1248 650/1402/1248\nf 663/1407/1249 719/304/1249 681/1408/1249\nf 3087/1409/1250 3101/1410/1250 3057/1411/1250\nf 268/595/1251 555/1205/1251 1243/19/1251\nf 1490/1412/1252 585/1413/1252 3402/1414/1252\nf 2869/1415/1253 2841/1416/1253 2809/254/1253\nf 2652/724/1254 2687/1417/1254 1908/1418/1254\nf 797/1419/1255 841/1420/1255 829/1421/1255\nf 610/1281/1256 629/899/1256 609/900/1256\nf 3218/548/1257 639/1422/1257 661/549/1257\nf 659/1423/1258 646/1424/1258 691/1425/1258\nf 2817/1426/1259 2619/1427/1259 2060/3/1259\nf 601/1428/1260 92/1063/1260 649/1429/1260\nf 126/709/1261 103/379/1261 661/549/1261\nf 1200/1237/1262 1212/279/1262 1211/278/1262\nf 1166/602/1263 1194/601/1263 1155/492/1263\nf 2967/1052/1264 956/1054/1264 2976/1430/1264\nf 1124/1431/1265 1104/1432/1265 1096/1433/1265\nf 669/1434/1266 693/1386/1266 692/1435/1266\nf 772/1436/1267 744/1437/1267 745/1438/1267\nf 777/1439/1268 817/1397/1268 816/1440/1268\nf 2227/1441/1269 2158/1442/1269 2289/1443/1269\nf 2968/65/1270 2298/64/1270 2446/1444/1270\nf 891/297/1271 261/317/1271 903/275/1271\nf 3473/1107/1272 3472/1445/1272 3458/1446/1272\nf 1002/358/1273 3458/1446/1273 3449/1266/1273\nf 610/1447/1274 609/647/1274 40/444/1274\nf 817/1397/1275 840/510/1275 816/1440/1275\nf 809/1448/1276 628/1449/1276 683/1450/1276\nf 941/1451/1277 900/1452/1277 891/297/1277\nf 900/1452/1278 261/317/1278 891/297/1278\nf 638/1453/1279 660/1454/1279 599/1455/1279\nf 997/1027/1280 1013/406/1280 1006/1456/1280\nf 3459/1457/1281 3443/1371/1281 3485/326/1281\nf 758/1458/1282 816/1440/1282 225/509/1282\nf 851/1459/1283 741/1460/1283 748/1461/1283\nf 376/330/1284 605/1462/1284 886/331/1284\nf 605/1462/1285 815/1463/1285 886/331/1285\nf 886/331/1286 815/1463/1286 941/1451/1286\nf 941/1464/1287 815/1465/1287 900/1466/1287\nf 3510/1467/1288 3444/93/1288 3455/839/1288\nf 593/860/1289 606/859/1289 578/1468/1289\nf 703/438/1290 720/1392/1290 181/436/1290\nf 3434/1469/1291 3468/1470/1291 3438/1471/1291\nf 653/432/1292 866/1472/1292 542/413/1292\nf 701/1473/1293 626/1474/1293 674/1475/1293\nf 872/1476/1294 912/1393/1294 859/1380/1294\nf 741/1460/1295 920/1477/1295 748/1461/1295\nf 748/1461/1296 920/1477/1296 376/330/1296\nf 376/330/1297 920/1477/1297 605/1462/1297\nf 900/1452/1298 702/1478/1298 261/317/1298\nf 559/994/1299 562/1005/1299 2/1029/1299\nf 203/720/1300 750/722/1300 735/1479/1300\nf 786/1480/1301 777/1439/1301 759/1481/1301\nf 843/1482/1302 851/1483/1302 853/1484/1302\nf 843/1482/1303 741/1485/1303 851/1483/1303\nf 605/1486/1304 826/1487/1304 815/1465/1304\nf 702/1478/1305 727/352/1305 261/317/1305\nf 2619/1427/1306 2826/1/1306 2060/3/1306\nf 925/1488/1307 949/1489/1307 695/1490/1307\nf 750/1491/1308 762/1492/1308 735/1404/1308\nf 750/1491/1309 763/1493/1309 762/1492/1309\nf 763/1493/1310 808/1494/1310 762/1492/1310\nf 791/1495/1311 626/1474/1311 845/1496/1311\nf 526/1497/1312 540/1498/1312 899/1499/1312\nf 843/1500/1313 853/1501/1313 3388/1502/1313\nf 900/1466/1314 815/1465/1314 702/1503/1314\nf 702/1478/1315 726/485/1315 727/352/1315\nf 2277/881/1316 1025/882/1316 1083/488/1316\nf 491/1504/1317 582/1505/1317 925/1488/1317\nf 824/1506/1318 873/1507/1318 926/1508/1318\nf 808/1494/1319 800/1509/1319 820/1510/1319\nf 605/1486/1320 935/1511/1320 826/1487/1320\nf 815/1465/1321 643/1512/1321 702/1503/1321\nf 1827/1513/1322 2560/1514/1322 2549/1515/1322\nf 925/1488/1323 695/1490/1323 897/1516/1323\nf 967/1517/1324 1793/1518/1324 35/1519/1324\nf 827/1520/1325 741/1485/1325 843/1482/1325\nf 827/1520/1326 920/1521/1326 741/1485/1326\nf 827/1520/1327 696/1522/1327 920/1521/1327\nf 696/1522/1328 935/1511/1328 920/1521/1328\nf 920/1521/1329 935/1511/1329 605/1486/1329\nf 643/1512/1330 928/1523/1330 702/1503/1330\nf 702/1478/1331 928/1524/1331 726/485/1331\nf 786/1480/1332 794/815/1332 793/814/1332\nf 1014/914/1333 1084/1525/1333 1191/1526/1333\nf 871/1527/1334 671/1528/1334 930/1529/1334\nf 35/1519/1335 1793/1518/1335 2619/1427/1335\nf 770/1530/1336 843/1500/1336 894/1531/1336\nf 770/1532/1337 827/1520/1337 843/1482/1337\nf 826/1487/1338 906/1533/1338 815/1465/1338\nf 906/1533/1339 643/1512/1339 815/1465/1339\nf 726/485/1340 928/1524/1340 946/486/1340\nf 60/861/1341 23/714/1341 606/859/1341\nf 725/1534/1342 724/1370/1342 161/1222/1342\nf 3477/788/1343 3496/1097/1343 3501/350/1343\nf 621/1535/1344 871/1536/1344 865/1537/1344\nf 785/1538/1345 850/1539/1345 621/1540/1345\nf 777/1439/1346 786/1480/1346 793/814/1346\nf 935/1511/1347 752/1541/1347 826/1487/1347\nf 643/1512/1348 909/1542/1348 928/1523/1348\nf 3270/1543/1349 953/1544/1349 573/1545/1349\nf 866/1546/1350 894/1531/1350 3333/1547/1350\nf 877/1548/1351 827/1520/1351 770/1532/1351\nf 752/1541/1352 906/1533/1352 826/1487/1352\nf 906/1533/1353 723/1549/1353 643/1512/1353\nf 909/1542/1354 868/1550/1354 928/1523/1354\nf 928/1523/1355 868/1550/1355 946/1551/1355\nf 683/1450/1356 623/1552/1356 855/1553/1356\nf 662/1554/1357 650/1555/1357 681/1556/1357\nf 721/1557/1358 714/1558/1358 676/1559/1358\nf 808/1494/1359 761/1560/1359 722/1405/1359\nf 790/1561/1360 764/1562/1360 655/1563/1360\nf 881/1564/1361 658/1565/1361 633/1566/1361\nf 2149/1567/1362 1102/1171/1362 1061/517/1362\nf 897/1516/1363 695/1490/1363 896/1568/1363\nf 653/432/1364 904/1569/1364 866/1472/1364\nf 904/1569/1365 894/1570/1365 866/1472/1365\nf 877/1548/1366 696/1522/1366 827/1520/1366\nf 696/1522/1367 907/1571/1367 935/1511/1367\nf 935/1511/1368 907/1571/1368 752/1541/1368\nf 752/1541/1369 723/1549/1369 906/1533/1369\nf 723/1549/1370 909/1542/1370 643/1512/1370\nf 1021/1572/1371 1037/518/1371 1031/1573/1371\nf 1879/1574/1372 1188/1575/1372 1128/1576/1372\nf 2935/1577/1373 2928/1578/1373 2939/1579/1373\nf 896/1568/1374 695/1490/1374 641/1580/1374\nf 939/1581/1375 615/1582/1375 628/1449/1375\nf 686/1583/1376 809/1448/1376 683/1450/1376\nf 3487/1584/1377 1207/333/1377 1208/332/1377\nf 1067/908/1378 1061/517/1378 1102/1171/1378\nf 867/1585/1379 696/1522/1379 877/1548/1379\nf 867/1585/1380 907/1571/1380 696/1522/1380\nf 723/1549/1381 687/1586/1381 909/1542/1381\nf 946/486/1382 738/1587/1382 121/1163/1382\nf 766/1588/1383 791/1589/1383 822/1590/1383\nf 660/1454/1384 638/1453/1384 677/1384/1384\nf 3467/1591/1385 1015/751/1385 1117/750/1385\nf 591/1592/1386 622/1593/1386 611/1594/1386\nf 2506/1595/1387 1009/1596/1387 1010/1597/1387\nf 904/1569/1388 844/1598/1388 894/1570/1388\nf 844/1599/1389 770/1530/1389 894/1531/1389\nf 770/1532/1390 944/1600/1390 877/1548/1390\nf 944/1600/1391 867/1585/1391 877/1548/1391\nf 907/1571/1392 718/1601/1392 752/1541/1392\nf 718/1602/1393 921/1603/1393 752/1604/1393\nf 752/1604/1394 921/1603/1394 723/1605/1394\nf 880/1606/1395 868/1550/1395 909/1542/1395\nf 687/1586/1396 880/1606/1396 909/1542/1396\nf 946/486/1397 868/1607/1397 738/1587/1397\nf 2652/724/1398 1908/1418/1398 2621/1608/1398\nf 3508/21/1399 3475/664/1399 3494/663/1399\nf 384/1609/1400 686/1610/1400 1160/1611/1400\nf 904/1569/1401 532/570/1401 844/1598/1401\nf 757/1612/1402 770/1532/1402 844/1613/1402\nf 757/1612/1403 944/1600/1403 770/1532/1403\nf 723/1605/1404 921/1603/1404 687/1614/1404\nf 840/510/1405 872/1476/1405 859/1380/1405\nf 805/1615/1406 898/1616/1406 932/1390/1406\nf 872/1476/1407 860/1617/1407 913/1618/1407\nf 1041/420/1408 1088/111/1408 1147/261/1408\nf 695/1490/1409 885/1619/1409 641/1580/1409\nf 779/1620/1410 796/1621/1410 744/1622/1410\nf 899/467/1411 489/466/1411 947/1623/1411\nf 809/1624/1412 384/1609/1412 918/1625/1412\nf 563/614/1413 757/828/1413 844/1598/1413\nf 944/1626/1414 672/1627/1414 867/1628/1414\nf 867/1628/1415 836/1629/1415 907/1630/1415\nf 836/1629/1416 792/1631/1416 907/1630/1416\nf 792/1631/1417 718/1602/1417 907/1630/1417\nf 868/1607/1418 574/1632/1418 738/1587/1418\nf 2826/1/1419 1710/1633/1419 2535/2/1419\nf 2711/1634/1420 2838/1635/1420 2019/1636/1420\nf 3189/1637/1421 3152/1638/1421 3140/1218/1421\nf 628/1449/1422 615/1582/1422 623/1552/1422\nf 3483/1639/1423 1897/858/1423 2839/1640/1423\nf 641/1580/1424 885/1619/1424 850/1641/1424\nf 841/1642/1425 830/1643/1425 862/1644/1425\nf 913/1618/1426 860/1617/1426 654/1394/1426\nf 624/1645/1427 890/852/1427 948/794/1427\nf 918/1646/1428 939/1581/1428 628/1449/1428\nf 757/828/1429 914/744/1429 944/1626/1429\nf 672/1627/1430 836/1629/1430 867/1628/1430\nf 688/1647/1431 687/1614/1431 921/1603/1431\nf 934/1648/1432 733/1649/1432 868/1607/1432\nf 880/1650/1433 934/1648/1433 868/1607/1433\nf 868/1607/1434 733/1649/1434 574/1632/1434\nf 2500/1651/1435 578/1468/1435 583/711/1435\nf 1210/1652/1436 1199/493/1436 1149/1043/1436\nf 3332/1653/1437 576/1654/1437 581/1280/1437\nf 620/1655/1438 634/1656/1438 917/1657/1438\nf 1037/518/1439 1044/909/1439 1031/1573/1439\nf 855/1553/1440 887/1658/1440 731/1659/1440\nf 1415/1660/1441 2100/1661/1441 1178/1662/1441\nf 792/1631/1442 892/1663/1442 718/1602/1442\nf 892/1663/1443 921/1603/1443 718/1602/1443\nf 892/1663/1444 688/1647/1444 921/1603/1444\nf 698/1664/1445 880/1606/1445 687/1586/1445\nf 698/1664/1446 934/1665/1446 880/1606/1446\nf 733/1649/1447 919/1666/1447 574/1632/1447\nf 738/1587/1448 574/1632/1448 121/1163/1448\nf 3487/1667/1449 3505/353/1449 3467/1591/1449\nf 683/1668/1450 855/1381/1450 736/1669/1450\nf 850/1641/1451 885/1619/1451 621/1535/1451\nf 779/1670/1452 787/1671/1452 807/1672/1452\nf 630/1673/1453 637/1674/1453 659/1423/1453\nf 914/744/1454 672/1627/1454 944/1626/1454\nf 698/1675/1455 687/1614/1455 688/1647/1455\nf 586/1676/1456 587/1677/1456 51/1291/1456\nf 606/859/1457 23/714/1457 583/711/1457\nf 578/1468/1458 606/859/1458 583/711/1458\nf 2139/1678/1459 2136/1679/1459 1291/1680/1459\nf 852/935/1460 685/1681/1460 825/1682/1460\nf 693/1386/1461 694/1385/1461 715/1683/1461\nf 2149/1567/1462 2133/1684/1462 1102/1171/1462\nf 743/1685/1463 771/1686/1463 778/1687/1463\nf 929/1688/1464 834/1689/1464 595/514/1464\nf 1435/147/1465 1172/1690/1465 1315/156/1465\nf 836/1629/1466 640/1691/1466 792/1631/1466\nf 792/1631/1467 640/1691/1467 892/1663/1467\nf 910/1692/1468 698/1675/1468 688/1647/1468\nf 910/1692/1469 839/1693/1469 698/1675/1469\nf 839/1694/1470 934/1665/1470 698/1664/1470\nf 839/1694/1471 408/1695/1471 934/1665/1471\nf 408/1695/1472 733/1696/1472 934/1665/1472\nf 408/1695/1473 919/1697/1473 733/1696/1473\nf 408/1695/1474 902/144/1474 919/1697/1474\nf 617/1698/1475 902/1699/1475 113/1700/1475\nf 919/1666/1476 902/1699/1476 617/1698/1476\nf 1125/747/1477 2770/1701/1477 1129/748/1477\nf 700/302/1478 719/304/1478 663/1407/1478\nf 621/1535/1479 885/1619/1479 824/1506/1479\nf 3509/1702/1480 805/1703/1480 7/1704/1480\nf 712/1705/1481 713/1706/1481 743/1685/1481\nf 778/1687/1482 771/1686/1482 795/1707/1482\nf 740/1708/1483 736/1709/1483 627/1710/1483\nf 709/1711/1484 836/1629/1484 672/1627/1484\nf 892/1663/1485 910/1692/1485 688/1647/1485\nf 3488/1712/1486 3466/1713/1486 3479/1714/1486\nf 348/927/1487 860/1617/1487 818/1715/1487\nf 214/1716/1488 2797/1717/1488 2183/1718/1488\nf 861/1719/1489 828/1720/1489 807/1721/1489\nf 775/1722/1490 736/1709/1490 740/1708/1490\nf 3429/1723/1491 3505/353/1491 3487/1667/1491\nf 676/1559/1492 691/1425/1492 646/1424/1492\nf 917/1657/1493 634/1656/1493 28/1724/1493\nf 631/1725/1494 630/1673/1494 598/1378/1494\nf 740/1708/1495 627/1710/1495 749/1726/1495\nf 736/1669/1496 855/1381/1496 627/1727/1496\nf 765/1728/1497 836/1629/1497 709/1711/1497\nf 836/1729/1498 923/1730/1498 640/1731/1498\nf 910/1692/1499 804/1732/1499 839/1693/1499\nf 839/1693/1500 838/1733/1500 408/1734/1500\nf 3298/1735/1501 3313/1736/1501 3284/1737/1501\nf 575/1738/1502 584/1739/1502 578/1468/1502\nf 1013/406/1503 1021/1572/1503 1006/1456/1503\nf 834/1689/1504 929/1688/1504 917/1740/1504\nf 181/436/1505 758/1458/1505 225/509/1505\nf 648/1741/1506 647/1742/1506 622/1743/1506\nf 861/1744/1507 874/1745/1507 828/1746/1507\nf 775/1722/1508 683/1450/1508 736/1709/1508\nf 953/1544/1509 3234/1747/1509 975/1748/1509\nf 160/661/1510 203/720/1510 735/1479/1510\nf 1766/57/1511 1869/59/1511 1108/112/1511\nf 528/643/1512 541/689/1512 914/744/1512\nf 709/1749/1513 672/1750/1513 914/1751/1513\nf 836/1729/1514 765/1752/1514 923/1730/1514\nf 923/1753/1515 689/1754/1515 640/1691/1515\nf 640/1691/1516 689/1754/1516 892/1663/1516\nf 892/1663/1517 835/1755/1517 910/1692/1517\nf 804/1732/1518 619/1756/1518 839/1693/1518\nf 838/1733/1519 839/1693/1519 619/1756/1519\nf 719/304/1520 1076/303/1520 730/1757/1520\nf 930/1529/1521 624/1645/1521 948/794/1521\nf 778/1687/1522 795/1707/1522 794/815/1522\nf 611/1594/1523 598/1378/1523 589/1758/1523\nf 714/1558/1524 713/1706/1524 704/1759/1524\nf 590/1760/1525 611/1594/1525 589/1758/1525\nf 2670/1761/1526 3437/244/1526 3511/1762/1526\nf 789/743/1527 945/1763/1527 914/744/1527\nf 945/1763/1528 709/1711/1528 914/744/1528\nf 689/1754/1529 835/1755/1529 892/1663/1529\nf 838/1764/1530 942/1765/1530 408/1695/1530\nf 365/145/1531 902/144/1531 408/1695/1531\nf 942/1765/1532 365/145/1532 408/1695/1532\nf 1039/305/1533 1171/657/1533 922/451/1533\nf 753/1766/1534 754/1093/1534 25/1033/1534\nf 593/860/1535 578/1468/1535 584/1739/1535\nf 407/315/1536 851/1459/1536 748/1461/1536\nf 730/1757/1537 1076/303/1537 1454/1767/1537\nf 1054/1768/1538 1044/909/1538 1086/1769/1538\nf 676/1559/1539 714/1558/1539 704/1759/1539\nf 691/1425/1540 676/1559/1540 704/1759/1540\nf 749/1770/1541 627/1771/1541 893/1772/1541\nf 923/1730/1542 765/1752/1542 709/1749/1542\nf 3402/1414/1543 584/1739/1543 575/1738/1543\nf 649/1773/1544 678/1774/1544 638/1775/1544\nf 1132/301/1545 927/1776/1545 986/282/1545\nf 1005/1777/1546 1021/1572/1546 1031/1573/1546\nf 573/1778/1547 591/1592/1547 590/1760/1547\nf 895/1779/1548 915/854/1548 348/927/1548\nf 887/1658/1549 595/514/1549 842/516/1549\nf 782/604/1550 202/674/1550 645/780/1550\nf 3428/759/1551 2754/705/1551 3457/704/1551\nf 654/1394/1552 442/555/1552 418/539/1552\nf 3483/1780/1553 3434/1469/1553 453/1781/1553\nf 749/1289/1554 893/1782/1554 857/1783/1554\nf 489/466/1555 470/554/1555 947/1623/1555\nf 615/1582/1556 929/1688/1556 595/514/1556\nf 910/1692/1557 835/1755/1557 804/1732/1557\nf 616/1784/1558 365/145/1558 942/1765/1558\nf 2548/271/1559 2744/1785/1559 3450/1786/1559\nf 585/1413/1560 593/860/1560 584/1739/1560\nf 3437/244/1561 2670/1761/1561 2592/648/1561\nf 3054/1787/1562 3091/1788/1562 3062/1789/1562\nf 729/1790/1563 760/1791/1563 773/1792/1563\nf 786/1480/1564 778/1687/1564 794/815/1564\nf 340/1156/1565 272/1094/1565 28/1154/1565\nf 591/1592/1566 611/1594/1566 590/1760/1566\nf 1530/1793/1567 22/712/1567 36/715/1567\nf 861/1744/1568 895/1779/1568 874/1745/1568\nf 38/396/1569 588/477/1569 580/1313/1569\nf 895/1779/1570 940/1794/1570 915/854/1570\nf 832/1795/1571 923/1730/1571 709/1749/1571\nf 923/1730/1572 879/1796/1572 689/1797/1572\nf 689/1754/1573 788/1798/1573 835/1755/1573\nf 917/1657/1574 28/1724/1574 596/1799/1574\nf 1335/607/1575 1287/27/1575 1261/29/1575\nf 514/123/1576 1274/1164/1576 1265/124/1576\nf 407/315/1577 2279/1800/1577 851/1459/1577\nf 3504/246/1578 3428/759/1578 3457/704/1578\nf 1517/1138/1579 50/1189/1579 49/1136/1579\nf 834/1689/1580 596/1801/1580 697/515/1580\nf 1134/1802/1581 918/1625/1581 384/1609/1581\nf 715/1683/1582 773/1792/1582 745/1438/1582\nf 712/1705/1583 743/1685/1583 778/1687/1583\nf 694/1385/1584 716/1803/1584 729/1790/1584\nf 654/1804/1585 361/1805/1585 425/1806/1585\nf 615/1582/1586 595/514/1586 623/1552/1586\nf 739/1807/1587 917/1740/1587 929/1688/1587\nf 940/1794/1588 655/1563/1588 607/1808/1588\nf 655/1809/1589 526/1497/1589 899/1499/1589\nf 789/743/1590 936/1810/1590 945/1763/1590\nf 832/1795/1591 709/1749/1591 945/1811/1591\nf 936/1810/1592 832/1812/1592 945/1763/1592\nf 832/1795/1593 879/1796/1593 923/1730/1593\nf 835/1813/1594 1119/1814/1594 804/1815/1594\nf 1119/1814/1595 846/1816/1595 619/1817/1595\nf 804/1815/1596 1119/1814/1596 619/1817/1596\nf 829/1818/1597 875/1819/1597 861/1719/1597\nf 272/1094/1598 340/1156/1598 1462/1095/1598\nf 876/1820/1599 491/1504/1599 925/1488/1599\nf 949/1489/1600 824/1506/1600 885/1619/1600\nf 670/1821/1601 678/1774/1601 649/1773/1601\nf 816/1440/1602 840/510/1602 225/509/1602\nf 865/1822/1603 948/794/1603 856/1326/1603\nf 746/1823/1604 785/1538/1604 764/1562/1604\nf 607/1808/1605 655/1563/1605 899/467/1605\nf 807/1721/1606 796/1621/1606 779/1620/1606\nf 936/1810/1607 789/743/1607 55/802/1607\nf 879/1796/1608 776/1824/1608 689/1797/1608\nf 755/1825/1609 788/1826/1609 689/1797/1609\nf 629/899/1610 630/1673/1610 659/1423/1610\nf 623/1552/1611 887/1658/1611 855/1553/1611\nf 834/1689/1612 917/1740/1612 596/1801/1612\nf 857/1783/1613 893/1782/1613 805/1703/1613\nf 929/1688/1614 615/1582/1614 881/1564/1614\nf 675/1827/1615 690/1254/1615 659/1423/1615\nf 927/1828/1616 1132/1829/1616 769/1389/1616\nf 1006/1456/1617 1021/1572/1617 1005/1777/1617\nf 760/1791/1618 799/1830/1618 773/1792/1618\nf 842/516/1619 674/1475/1619 626/1474/1619\nf 763/1493/1620 800/1509/1620 808/1494/1620\nf 818/1715/1621 828/1746/1621 348/927/1621\nf 800/1509/1622 831/1831/1622 820/1510/1622\nf 798/1832/1623 797/1419/1623 780/1833/1623\nf 895/1779/1624 916/1834/1624 940/1794/1624\nf 874/1745/1625 895/1779/1625 348/927/1625\nf 599/1835/1626 591/1836/1626 974/1837/1626\nf 612/1838/1627 660/1454/1627 648/1839/1627\nf 648/1839/1628 660/1454/1628 669/1434/1628\nf 936/1840/1629 706/1841/1629 832/1795/1629\nf 706/1841/1630 776/1824/1630 879/1796/1630\nf 832/1795/1631 706/1841/1631 879/1796/1631\nf 776/1824/1632 755/1825/1632 689/1797/1632\nf 629/899/1633 659/1423/1633 636/551/1633\nf 875/1842/1634 848/1843/1634 916/1834/1634\nf 315/341/1635 823/142/1635 1444/1844/1635\nf 831/1831/1636 863/1845/1636 820/1510/1636\nf 2047/593/1637 2068/1846/1637 1154/364/1637\nf 2303/1847/1638 1710/1633/1638 2890/1848/1638\nf 887/1658/1639 842/516/1639 731/1659/1639\nf 659/1423/1640 691/1425/1640 675/1827/1640\nf 829/1421/1641 861/1744/1641 807/1672/1641\nf 831/1831/1642 876/1820/1642 863/1845/1642\nf 788/1826/1643 755/1825/1643 1357/345/1643\nf 680/575/1644 682/745/1644 774/1061/1644\nf 607/1808/1645 947/1623/1645 426/700/1645\nf 862/1644/1646 883/1849/1646 848/1850/1646\nf 591/1592/1647 599/1455/1647 612/1838/1647\nf 864/1851/1648 641/1852/1648 746/1823/1648\nf 930/1529/1649 665/1853/1649 624/1645/1649\nf 2552/1854/1650 1047/1855/1650 1023/1856/1650\nf 1042/427/1651 1218/1857/1651 3507/1858/1651\nf 936/1840/1652 937/1859/1652 706/1841/1652\nf 50/1189/1653 1517/1138/1653 579/1860/1653\nf 51/1291/1654 587/1677/1654 588/477/1654\nf 791/1589/1655 845/1861/1655 888/1862/1655\nf 297/967/1656 41/936/1656 889/1863/1656\nf 3470/281/1657 1163/280/1657 3476/355/1657\nf 2592/648/1658 1689/1864/1658 2424/245/1658\nf 1834/1865/1659 2515/1866/1659 1835/1867/1659\nf 761/1560/1660 799/1868/1660 760/1869/1660\nf 3484/1870/1661 3474/1871/1661 3486/1075/1661\nf 772/1436/1662 787/1671/1662 779/1670/1662\nf 589/1758/1663 598/1378/1663 581/1280/1663\nf 772/1436/1664 780/1833/1664 787/1671/1664\nf 943/1872/1665 706/1873/1665 313/803/1665\nf 776/1824/1666 684/1008/1666 755/1825/1666\nf 1357/345/1667 755/1825/1667 1238/346/1667\nf 1407/1874/1668 340/1875/1668 634/1656/1668\nf 862/1644/1669 896/1568/1669 883/1849/1669\nf 1092/1876/1670 666/1877/1670 1117/1878/1670\nf 3332/1653/1671 581/1280/1671 33/446/1671\nf 538/779/1672 125/572/1672 537/598/1672\nf 2992/1879/1673 2991/1880/1673 2440/1881/1673\nf 678/1774/1674 677/1882/1674 638/1775/1674\nf 615/1582/1675 1189/1883/1675 658/1565/1675\nf 2989/1884/1676 2977/1885/1676 2429/1886/1676\nf 819/1887/1677 884/1888/1677 897/1516/1677\nf 576/1654/1678 573/1778/1678 590/1760/1678\nf 828/1746/1679 874/1745/1679 348/927/1679\nf 780/1833/1680 772/1436/1680 745/1438/1680\nf 684/1008/1681 776/1824/1681 706/1841/1681\nf 2261/1889/1682 2335/1890/1682 1887/1891/1682\nf 181/436/1683 742/1892/1683 758/1458/1683\nf 50/1189/1684 586/1676/1684 51/1291/1684\nf 912/1393/1685 911/402/1685 347/401/1685\nf 805/1703/1686 932/1893/1686 7/1704/1686\nf 747/1383/1687 791/1589/1687 766/1588/1687\nf 898/1616/1688 766/1894/1688 822/1387/1688\nf 1298/1895/1689 1119/1814/1689 1357/345/1689\nf 2761/238/1690 2731/1400/1690 2791/239/1690\nf 648/1741/1691 669/1896/1691 647/1742/1691\nf 717/1406/1692 722/1405/1692 699/1897/1692\nf 897/1516/1693 896/1568/1693 862/1644/1693\nf 863/1845/1694 884/1888/1694 819/1887/1694\nf 693/1898/1695 715/1899/1695 705/1900/1695\nf 715/1683/1696 745/1438/1696 705/1901/1696\nf 706/1873/1697 937/801/1697 313/803/1697\nf 806/1902/1698 828/1746/1698 818/1715/1698\nf 985/319/1699 2027/1903/1699 1222/1084/1699\nf 731/1659/1700 842/516/1700 791/1495/1700\nf 651/1401/1701 1043/1904/1701 663/1407/1701\nf 659/1423/1702 690/1254/1702 636/551/1702\nf 597/1379/1703 598/1378/1703 630/1673/1703\nf 581/1280/1704 590/1760/1704 589/1758/1704\nf 818/1715/1705 860/1617/1705 847/816/1705\nf 1076/303/1706 1399/138/1706 1454/1767/1706\nf 808/1494/1707 819/1887/1707 761/1560/1707\nf 2719/1905/1708 2706/1906/1708 2691/1907/1708\nf 717/1406/1709 699/1897/1709 679/1908/1709\nf 1988/272/1710 1284/1909/1710 1439/273/1710\nf 684/1008/1711 1297/1007/1711 755/1825/1711\nf 755/1825/1712 1297/1007/1712 1238/346/1712\nf 1039/305/1713 1091/513/1713 1171/657/1713\nf 938/537/1714 911/402/1714 912/1393/1714\nf 857/1783/1715 3499/1910/1715 3426/1004/1715\nf 699/1897/1716 694/1911/1716 677/1882/1716\nf 14/1912/1717 1714/1913/1717 13/1307/1717\nf 1854/1914/1718 1861/1915/1718 1853/1916/1718\nf 1283/1917/1719 1291/1181/1719 768/1180/1719\nf 898/1616/1720 893/1918/1720 627/1710/1720\nf 721/1557/1721 705/1901/1721 745/1438/1721\nf 860/1919/1722 361/1805/1722 654/1804/1722\nf 2298/64/1723 2480/1920/1723 2464/1921/1723\nf 125/572/1724 645/780/1724 281/415/1724\nf 758/1458/1725 777/1439/1725 816/1440/1725\nf 607/1808/1726 899/467/1726 947/1623/1726\nf 721/1557/1727 745/1438/1727 744/1437/1727\nf 3450/1354/1728 3435/1922/1728 3447/982/1728\nf 1176/491/1729 1199/493/1729 1210/1652/1729\nf 745/1438/1730 773/1792/1730 780/1833/1730\nf 996/897/1731 1006/1923/1731 1005/1924/1731\nf 2197/1925/1732 2192/1926/1732 2257/1927/1732\nf 799/1830/1733 798/1832/1733 773/1792/1733\nf 799/1830/1734 830/1928/1734 798/1832/1734\nf 1132/301/1735 3451/1929/1735 7/1704/1735\nf 596/1799/1736 784/1930/1736 608/996/1736\nf 784/1930/1737 753/1931/1737 608/996/1737\nf 3195/1932/1738 639/1933/1738 3218/1934/1738\nf 1465/1035/1739 1183/1034/1739 831/1831/1739\nf 712/1705/1740 778/1687/1740 759/1481/1740\nf 893/1918/1741 898/1616/1741 805/1615/1741\nf 2543/1935/1742 1830/1936/1742 1197/1074/1742\nf 791/1495/1743 842/516/1743 626/1474/1743\nf 3228/813/1744 3242/1937/1744 3241/309/1744\nf 876/1820/1745 831/1831/1745 1198/1938/1745\nf 762/1492/1746 808/1494/1746 722/1405/1746\nf 3355/1939/1747 1922/1940/1747 3321/1941/1747\nf 852/935/1748 889/1863/1748 41/936/1748\nf 1005/1777/1749 1031/1573/1749 1017/1942/1749\nf 1132/1829/1750 932/1390/1750 769/1389/1750\nf 621/1535/1751 824/1506/1751 871/1536/1751\nf 693/1386/1752 705/1901/1752 692/1435/1752\nf 2164/1943/1753 1250/1944/1753 2174/1945/1753\nf 627/1710/1754 766/1894/1754 898/1616/1754\nf 1872/1946/1755 3506/1947/1755 3510/1039/1755\nf 453/1948/1756 1134/1802/1756 384/1609/1756\nf 627/1727/1757 747/1383/1757 766/1588/1757\nf 747/1383/1758 731/1382/1758 791/1589/1758\nf 681/1556/1759 725/1534/1759 161/1222/1759\nf 1043/1904/1760 700/302/1760 663/1407/1760\nf 613/1949/1761 662/1554/1761 639/1422/1761\nf 746/1950/1762 850/1641/1762 785/1951/1762\nf 916/1834/1763 864/1851/1763 878/1952/1763\nf 787/1671/1764 797/1419/1764 807/1672/1764\nf 997/1026/1765 996/897/1765 968/632/1765\nf 795/1707/1766 818/1715/1766 794/815/1766\nf 2161/1082/1767 3442/1953/1767 1894/383/1767\nf 817/1397/1768 872/1476/1768 840/510/1768\nf 681/1556/1769 719/1954/1769 725/1534/1769\nf 780/1833/1770 797/1419/1770 787/1671/1770\nf 143/1028/1771 710/1391/1771 703/438/1771\nf 1263/154/1772 1161/916/1772 803/915/1772\nf 803/915/1773 1452/155/1773 1263/154/1773\nf 1810/1228/1774 1811/1362/1774 1577/1955/1774\nf 724/1370/1775 198/1045/1775 161/1222/1775\nf 3480/1300/1776 3499/1910/1776 3509/1702/1776\nf 2347/1956/1777 813/1957/1777 214/1716/1777\nf 3508/21/1778 3493/399/1778 3475/664/1778\nf 1193/334/1779 1014/914/1779 438/489/1779\nf 1651/1958/1780 1371/1959/1780 1355/1960/1780\nf 2708/1961/1781 2424/245/1781 1689/1864/1781\nf 841/1642/1782 862/1644/1782 848/1850/1782\nf 809/1448/1783 918/1646/1783 628/1449/1783\nf 697/515/1784 595/514/1784 834/1689/1784\nf 883/1849/1785 896/1568/1785 641/1580/1785\nf 1155/492/1786 1194/601/1786 1199/493/1786\nf 27/397/1787 580/1313/1787 572/1962/1787\nf 949/1489/1788 1030/1963/1788 824/1506/1788\nf 691/1425/1789 704/1759/1789 675/1827/1789\nf 962/1964/1790 961/979/1790 951/1965/1790\nf 3478/428/1791 3448/1106/1791 3481/1108/1791\nf 1993/1966/1792 586/1676/1792 579/1860/1792\nf 654/1394/1793 418/539/1793 938/537/1793\nf 1267/191/1794 1217/193/1794 242/1967/1794\nf 662/1554/1795 681/1556/1795 145/797/1795\nf 785/1538/1796 865/1822/1796 526/1325/1796\nf 734/1968/1797 181/436/1797 720/1392/1797\nf 830/1643/1798 841/1642/1798 797/1969/1798\nf 780/1833/1799 773/1792/1799 798/1832/1799\nf 913/1618/1800 654/1394/1800 938/537/1800\nf 1013/406/1801 1037/518/1801 1021/1572/1801\nf 668/830/1802 271/204/1802 1452/1970/1802\nf 1142/746/1803 1193/334/1803 438/489/1803\nf 977/867/1804 1111/1971/1804 3462/1972/1804\nf 858/880/1805 859/1380/1805 347/401/1805\nf 596/1799/1806 28/1724/1806 784/1930/1806\nf 318/1973/1807 475/1349/1807 1251/1364/1807\nf 1465/1035/1808 831/1831/1808 800/1509/1808\nf 649/1773/1809 600/1974/1809 601/1975/1809\nf 1958/232/1810 2712/1976/1810 2724/1977/1810\nf 791/1589/1811 888/1862/1811 822/1590/1811\nf 977/867/1812 965/1978/1812 1111/1971/1812\nf 614/1403/1813 994/1979/1813 651/1401/1813\nf 803/1980/1814 668/830/1814 1452/1970/1814\nf 513/558/1815 680/575/1815 501/556/1815\nf 975/1981/1816 3204/1982/1816 3205/1983/1816\nf 3428/759/1817 2766/681/1817 2669/857/1817\nf 1076/303/1818 1085/1984/1818 1399/138/1818\nf 1200/1237/1819 1201/511/1819 1212/279/1819\nf 819/1887/1820 830/1643/1820 799/1868/1820\nf 601/1975/1821 600/1974/1821 975/1748/1821\nf 597/1379/1822 630/1673/1822 629/899/1822\nf 101/508/1823 636/551/1823 690/1254/1823\nf 983/1985/1824 1189/1986/1824 939/1987/1824\nf 679/1988/1825 670/1062/1825 136/378/1825\nf 201/694/1826 120/494/1826 362/357/1826\nf 999/1989/1827 988/448/1827 2505/1990/1827\nf 160/661/1828 735/1479/1828 717/1991/1828\nf 3498/777/1829 3445/354/1829 3505/353/1829\nf 1014/914/1830 1191/1526/1830 438/489/1830\nf 722/1405/1831 716/1992/1831 699/1897/1831\nf 912/1993/1832 913/1994/1832 938/1995/1832\nf 913/1618/1833 912/1393/1833 872/1476/1833\nf 145/797/1834 681/1556/1834 161/1222/1834\nf 876/1820/1835 884/1888/1835 863/1845/1835\nf 798/1996/1836 830/1643/1836 797/1969/1836\nf 716/1803/1837 761/1997/1837 760/1791/1837\nf 2458/1998/1838 2440/1881/1838 969/1999/1838\nf 711/2000/1839 742/1892/1839 734/1968/1839\nf 710/1391/1840 711/2000/1840 734/1968/1840\nf 924/2001/1841 803/915/1841 1175/1221/1841\nf 1014/914/1842 1175/1221/1842 803/915/1842\nf 635/2002/1843 668/830/1843 803/1980/1843\nf 2322/2003/1844 2220/2004/1844 2382/2005/1844\nf 722/1405/1845 761/1560/1845 716/1992/1845\nf 662/1554/1846 661/549/1846 639/1422/1846\nf 860/1617/1847 872/1476/1847 817/1397/1847\nf 847/816/1848 860/1617/1848 817/1397/1848\nf 1094/1170/1849 1113/139/1849 1086/1769/1849\nf 848/1843/1850 875/1842/1850 829/1421/1850\nf 649/1773/1851 638/1775/1851 600/1974/1851\nf 848/1843/1852 883/2006/1852 916/1834/1852\nf 865/1822/1853 856/1326/1853 526/1325/1853\nf 3479/312/1854 2264/698/1854 3425/313/1854\nf 829/1421/1855 841/1420/1855 848/1843/1855\nf 597/1379/1856 610/1281/1856 581/1280/1856\nf 924/2001/1857 635/2007/1857 803/915/1857\nf 635/2007/1858 625/2008/1858 811/2009/1858\nf 668/830/1859 635/2002/1859 811/831/1859\nf 532/570/1860 563/614/1860 844/1598/1860\nf 608/996/1861 560/2010/1861 2/997/1861\nf 1452/1970/1862 271/204/1862 1440/290/1862\nf 570/2011/1863 3406/2012/1863 586/1676/1863\nf 819/1887/1864 897/1516/1864 862/1644/1864\nf 596/1799/1865 608/996/1865 751/2013/1865\nf 670/1821/1866 679/1908/1866 678/1774/1866\nf 777/1439/1867 793/814/1867 817/1397/1867\nf 2552/1854/1868 1059/2014/1868 1047/1855/1868\nf 675/1827/1869 704/1759/1869 711/2000/1869\nf 742/1892/1870 759/1481/1870 758/1458/1870\nf 685/1681/1871 811/831/1871 625/2015/1871\nf 642/2016/1872 685/2017/1872 625/2008/1872\nf 711/2000/1873 712/1705/1873 742/1892/1873\nf 822/1590/1874 888/1862/1874 707/2018/1874\nf 3405/2019/1875 570/2011/1875 586/1676/1875\nf 3406/2012/1876 587/1677/1876 586/1676/1876\nf 768/1180/1877 767/2020/1877 869/2021/1877\nf 864/1851/1878 790/1561/1878 878/1952/1878\nf 819/1887/1879 862/1644/1879 830/1643/1879\nf 925/1488/1880 582/1505/1880 949/1489/1880\nf 943/1872/1881 684/2022/1881 706/1873/1881\nf 679/1908/1882 699/1897/1882 678/1774/1882\nf 1189/1883/1883 633/1566/1883 658/1565/1883\nf 888/1862/1884 644/2023/1884 707/2018/1884\nf 883/2006/1885 864/1851/1885 916/1834/1885\nf 985/319/1886 1064/983/1886 1026/320/1886\nf 712/1705/1887 759/1481/1887 742/1892/1887\nf 901/2024/1888 635/2002/1888 924/2025/1888\nf 802/2026/1889 625/2015/1889 635/2002/1889\nf 802/2026/1890 642/2027/1890 625/2015/1890\nf 769/1389/1891 854/2028/1891 927/1828/1891\nf 775/1316/1892 105/2029/1892 1004/1317/1892\nf 2423/2030/1893 1307/2031/1893 130/2032/1893\nf 761/1560/1894 819/1887/1894 799/1868/1894\nf 3205/2033/1895 601/1975/1895 975/1748/1895\nf 599/1455/1896 660/1454/1896 612/1838/1896\nf 1324/2034/1897 1460/2035/1897 1308/164/1897\nf 778/1687/1898 786/1480/1898 759/1481/1898\nf 2246/2036/1899 2335/1890/1899 2261/1889/1899\nf 940/1794/1900 790/1561/1900 655/1563/1900\nf 930/1529/1901 948/794/1901 865/1822/1901\nf 426/700/1902 915/854/1902 607/1808/1902\nf 1291/1680/1903 2136/1679/1903 1303/2037/1903\nf 871/1536/1904 926/1508/1904 671/2038/1904\nf 734/1968/1905 742/1892/1905 181/436/1905\nf 1030/1963/1906 873/1507/1906 824/1506/1906\nf 692/1435/1907 705/1901/1907 721/1557/1907\nf 1199/493/1908 922/451/1908 1149/1043/1908\nf 2498/2039/1909 2515/2040/1909 2478/2041/1909\nf 649/1429/1910 92/1063/1910 670/1062/1910\nf 758/1458/1911 759/1481/1911 777/1439/1911\nf 576/1654/1912 590/1760/1912 581/1280/1912\nf 3455/2042/1913 3444/2043/1913 3478/428/1913\nf 666/2044/1914 924/2001/1914 1117/2045/1914\nf 666/1877/1915 901/2024/1915 924/2025/1915\nf 825/2046/1916 685/2017/1916 642/2016/1916\nf 685/1681/1917 852/935/1917 471/31/1917\nf 1167/2047/1918 1195/453/1918 1156/452/1918\nf 898/1616/1919 822/1387/1919 932/1390/1919\nf 615/1582/1920 658/1565/1920 881/1564/1920\nf 807/1672/1921 797/1419/1921 829/1421/1921\nf 697/2048/1922 596/1799/1922 751/2013/1922\nf 1015/751/1923 1163/280/1923 1092/752/1923\nf 772/1436/1924 779/1670/1924 744/1437/1924\nf 1465/1035/1925 800/1509/1925 763/1493/1925\nf 751/2013/1926 608/996/1926 674/1396/1926\nf 1038/1356/1927 1045/405/1927 1018/404/1927\nf 635/2002/1928 901/2024/1928 802/2026/1928\nf 656/2049/1929 642/2027/1929 802/2026/1929\nf 656/2049/1930 825/1682/1930 642/2027/1930\nf 864/1851/1931 746/1823/1931 790/1561/1931\nf 1167/2047/1932 1201/511/1932 1195/453/1932\nf 3406/2012/1933 588/477/1933 587/1677/1933\nf 662/1554/1934 145/797/1934 661/549/1934\nf 145/797/1935 161/1222/1935 155/710/1935\nf 1210/1652/1936 1149/1043/1936 8/2050/1936\nf 694/1385/1937 729/1790/1937 715/1683/1937\nf 715/1683/1938 729/1790/1938 773/1792/1938\nf 881/2051/1939 633/2052/1939 869/2021/1939\nf 1083/488/1940 1025/882/1940 1142/746/1940\nf 669/1434/1941 692/1435/1941 647/2053/1941\nf 796/2054/1942 806/1902/1942 795/1707/1942\nf 764/2055/1943 526/1497/1943 655/1809/1943\nf 883/2006/1944 641/1852/1944 864/1851/1944\nf 1317/2056/1945 1094/1170/1945 1114/1172/1945\nf 695/1490/1946 949/1489/1946 885/1619/1946\nf 682/745/1947 318/2057/1947 774/1061/1947\nf 667/2058/1948 802/2026/1948 901/2024/1948\nf 667/2058/1949 656/2049/1949 802/2026/1949\nf 732/2059/1950 825/2060/1950 656/2061/1950\nf 849/2062/1951 852/2063/1951 825/2046/1951\nf 633/2052/1952 728/2064/1952 869/2021/1952\nf 869/2021/1953 728/2064/1953 768/1180/1953\nf 974/1837/1954 591/1836/1954 573/1545/1954\nf 744/1622/1955 771/2065/1955 743/2066/1955\nf 929/1688/1956 881/1564/1956 869/2067/1956\nf 869/2021/1957 620/1655/1957 739/2068/1957\nf 2797/1717/1958 2816/2069/1958 2183/1718/1958\nf 824/1506/1959 926/1508/1959 871/1536/1959\nf 2422/2070/1960 2459/2071/1960 2517/2072/1960\nf 538/779/1961 645/780/1961 125/572/1961\nf 2483/2073/1962 988/448/1962 978/450/1962\nf 908/2074/1963 1093/277/1963 1201/511/1963\nf 901/2024/1964 666/1877/1964 667/2058/1964\nf 667/2075/1965 732/2059/1965 656/2061/1965\nf 732/2076/1966 849/2077/1966 825/1682/1966\nf 889/1863/1967 852/935/1967 849/2077/1967\nf 908/2074/1968 1143/512/1968 1093/277/1968\nf 3483/1639/1969 3453/856/1969 1897/858/1969\nf 717/1991/1970 679/1988/1970 136/378/1970\nf 875/1819/1971 916/2078/1971 895/2079/1971\nf 863/1845/1972 819/1887/1972 808/1494/1972\nf 568/2080/1973 665/1853/1973 930/1529/1973\nf 622/1593/1974 647/2053/1974 631/1725/1974\nf 647/2081/1975 646/2082/1975 631/2083/1975\nf 622/1593/1976 631/1725/1976 611/1594/1976\nf 692/2084/1977 676/2085/1977 647/1742/1977\nf 865/1822/1978 871/1527/1978 930/1529/1978\nf 869/2021/1979 767/2020/1979 620/1655/1979\nf 624/1645/1980 604/1174/1980 890/852/1980\nf 471/31/1981 811/831/1981 685/1681/1981\nf 897/1516/1982 884/1888/1982 925/1488/1982\nf 933/2086/1983 732/2076/1983 667/2058/1983\nf 3406/2012/1984 571/2087/1984 588/477/1984\nf 820/1510/1985 863/1845/1985 808/1494/1985\nf 794/815/1986 818/1715/1986 847/816/1986\nf 941/1451/1987 891/297/1987 886/331/1987\nf 591/1592/1988 612/1838/1988 622/1593/1988\nf 714/1558/1989 721/1557/1989 713/1706/1989\nf 721/1557/1990 744/1437/1990 713/1706/1990\nf 744/1622/1991 796/1621/1991 771/2065/1991\nf 878/1952/1992 790/1561/1992 940/1794/1992\nf 2478/2088/1993 2515/1866/1993 1834/1865/1993\nf 997/1026/1994 1006/1923/1994 996/897/1994\nf 842/516/1995 697/515/1995 751/2089/1995\nf 854/2028/1996 933/2086/1996 667/2058/1996\nf 632/2090/1997 732/2059/1997 933/2091/1997\nf 732/2076/1998 632/2092/1998 849/2077/1998\nf 674/1475/1999 842/516/1999 751/2089/1999\nf 1862/174/2000 1893/2093/2000 2093/338/2000\nf 18/2094/2001 810/1395/2001 562/995/2001\nf 571/2087/2002 3406/2012/2002 3376/2095/2002\nf 68/818/2003 80/209/2003 60/784/2003\nf 645/780/2004 202/674/2004 281/415/2004\nf 1036/2096/2005 1209/2097/2005 504/2098/2005\nf 1155/492/2006 2197/1925/2006 2257/1927/2006\nf 647/1742/2007 676/2085/2007 646/2099/2007\nf 2096/2100/2008 2651/2101/2008 2499/2102/2008\nf 641/1580/2009 850/1641/2009 746/1950/2009\nf 1175/419/2010 1181/418/2010 812/2103/2010\nf 927/1828/2011 667/2058/2011 666/1877/2011\nf 927/1828/2012 854/2028/2012 667/2058/2012\nf 905/2104/2013 889/2105/2013 849/2062/2013\nf 749/1770/2014 105/2029/2014 740/2106/2014\nf 1083/488/2015 1142/746/2015 438/489/2015\nf 762/1492/2016 722/1405/2016 735/1404/2016\nf 744/1622/2017 743/2066/2017 713/2107/2017\nf 631/2083/2018 646/2082/2018 637/2108/2018\nf 796/2054/2019 795/1707/2019 771/1686/2019\nf 719/1954/2020 730/2109/2020 725/1534/2020\nf 612/1838/2021 648/1839/2021 622/1593/2021\nf 360/901/2022 471/31/2022 852/935/2022\nf 971/977/2023 990/2110/2023 970/978/2023\nf 690/1254/2024 711/2000/2024 710/1391/2024\nf 600/1974/2025 599/1835/2025 975/1748/2025\nf 884/1888/2026 876/1820/2026 925/1488/2026\nf 949/1489/2027 582/1505/2027 1030/1963/2027\nf 1163/2111/2028 666/2044/2028 1092/2112/2028\nf 854/2028/2029 882/2113/2029 933/2086/2029\nf 882/2114/2030 632/2090/2030 933/2091/2030\nf 644/2115/2031 849/2077/2031 632/2092/2031\nf 849/2077/2032 644/2115/2032 905/2116/2032\nf 637/1674/2033 646/1424/2033 659/1423/2033\nf 2548/2117/2034 2852/2118/2034 2744/2119/2034\nf 3439/2120/2035 3493/399/2035 3471/398/2035\nf 904/1569/2036 653/432/2036 532/570/2036\nf 624/1645/2037 665/1853/2037 604/1174/2037\nf 475/1352/2038 682/745/2038 512/1353/2038\nf 929/2121/2039 869/2021/2039 739/2068/2039\nf 614/2122/2040 650/1555/2040 662/1554/2040\nf 614/1403/2041 662/2123/2041 613/2124/2041\nf 3279/106/2042 3294/105/2042 3342/165/2042\nf 707/2018/2043 632/2090/2043 882/2114/2043\nf 707/2018/2044 644/2023/2044 632/2090/2044\nf 810/1395/2045 297/2125/2045 889/2105/2045\nf 905/2104/2046 810/1395/2046 889/2105/2046\nf 2976/2126/2047 2977/1885/2047 2989/1884/2047\nf 1355/1960/2048 1633/2127/2048 1651/1958/2048\nf 571/2087/2049 580/1313/2049 588/477/2049\nf 1964/2128/2050 3236/2129/2050 3439/2130/2050\nf 1328/2131/2051 943/1872/2051 313/803/2051\nf 785/1538/2052 621/1540/2052 865/1822/2052\nf 611/1594/2053 631/1725/2053 598/1378/2053\nf 627/1727/2054 855/1381/2054 747/1383/2054\nf 1171/657/2055 316/356/2055 594/1044/2055\nf 878/1952/2056 940/1794/2056 916/1834/2056\nf 699/1897/2057 677/1882/2057 678/1774/2057\nf 1067/908/2058 1077/1175/2058 1044/909/2058\nf 600/1974/2059 638/1775/2059 599/1835/2059\nf 699/1897/2060 716/1992/2060 694/1911/2060\nf 915/854/2061 940/1794/2061 607/1808/2061\nf 1454/2132/2062 724/1370/2062 730/2109/2062\nf 845/1496/2063 905/2116/2063 644/2115/2063\nf 297/2125/2064 810/1395/2064 18/2094/2064\nf 3390/1375/2065 1986/1176/2065 2004/1177/2065\nf 1267/191/2066 1242/2133/2066 1285/192/2066\nf 1898/2134/2067 2808/2135/2067 2062/2136/2067\nf 1246/2137/2068 1083/488/2068 1127/490/2068\nf 407/315/2069 3336/314/2069 2279/1800/2069\nf 704/1759/2070 712/1705/2070 711/2000/2070\nf 796/2054/2071 807/1672/2071 806/1902/2071\nf 630/1673/2072 631/1725/2072 637/1674/2072\nf 560/1032/2073 608/2138/2073 753/1766/2073\nf 739/2068/2074 620/1655/2074 917/1657/2074\nf 713/1706/2075 712/1705/2075 704/1759/2075\nf 716/1803/2076 760/1791/2076 729/1790/2076\nf 608/996/2077 562/995/2077 810/1395/2077\nf 1386/129/2078 134/203/2078 363/1233/2078\nf 790/1561/2079 746/1823/2079 764/1562/2079\nf 660/1454/2080 677/1384/2080 669/1434/2080\nf 854/2028/2081 769/1389/2081 882/2113/2081\nf 769/1389/2082 707/1388/2082 882/2113/2082\nf 674/1396/2083 810/1395/2083 905/2104/2083\nf 888/2139/2084 845/1496/2084 644/2115/2084\nf 690/1254/2085 675/1827/2085 711/2000/2085\nf 999/1989/2086 1018/1025/2086 988/448/2086\nf 710/2140/2087 734/2141/2087 720/2142/2087\nf 785/1538/2088 526/1325/2088 764/1562/2088\nf 807/1672/2089 828/1746/2089 806/1902/2089\nf 623/1552/2090 595/514/2090 887/1658/2090\nf 795/1707/2091 806/1902/2091 818/1715/2091\nf 692/2084/2092 721/2143/2092 676/2085/2092\nf 875/1819/2093 895/2079/2093 861/1719/2093\nf 628/1449/2094 623/1552/2094 683/1450/2094\nf 2481/2144/2095 2465/2145/2095 2503/2146/2095\nf 669/1434/2096 677/1384/2096 693/1386/2096\nf 701/1473/2097 905/2116/2097 845/1496/2097\nf 905/2116/2098 701/1473/2098 674/1475/2098\nf 580/1313/2099 571/2087/2099 3348/2147/2099\nf 781/2148/2100 3252/2149/2100 1572/2150/2100\nf 636/551/2101 75/552/2101 629/899/2101\nf 1367/2151/2102 767/2020/2102 1303/1179/2102\nf 626/1474/2103 701/1473/2103 845/1496/2103\nf 1112/2152/2104 1040/2153/2104 1011/2154/2104\nf 2045/2155/2105 2044/2156/2105 2017/2157/2105\nf 2045/2155/2106 2058/2158/2106 2044/2156/2106\nf 1906/47/2107 1896/2159/2107 1514/2160/2107\nf 232/2161/2108 1138/42/2108 1170/2162/2108\nf 1016/2163/2109 1035/2164/2109 3436/1372/2109\nf 1016/2163/2110 1011/2154/2110 1035/2164/2110\nf 749/1289/2111 857/1783/2111 3426/1004/2111\nf 1360/2165/2112 1359/2166/2112 120/494/2112\nf 3189/1637/2113 3212/2167/2113 3211/2168/2113\nf 1788/1227/2114 1787/1229/2114 1773/2169/2114\nf 1041/420/2115 158/80/2115 1319/200/2115\nf 1415/2170/2116 1158/2171/2116 2100/2172/2116\nf 2090/2173/2117 515/2174/2117 1461/46/2117\nf 955/2175/2118 2993/2176/2118 960/2177/2118\nf 1487/2178/2119 1479/2179/2119 3397/2180/2119\nf 1839/2181/2120 1626/2182/2120 1846/1200/2120\nf 3507/1858/2121 1016/2163/2121 3436/1372/2121\nf 1855/113/2122 1377/175/2122 1960/884/2122\nf 1011/2154/2123 950/2183/2123 1112/2152/2123\nf 988/448/2124 1018/1025/2124 998/449/2124\nf 1459/40/2125 1634/2184/2125 1602/41/2125\nf 2031/2185/2126 1311/2186/2126 1968/2187/2126\nf 1319/200/2127 1325/199/2127 1995/2188/2127\nf 1995/2188/2128 1724/408/2128 1762/407/2128\nf 1792/2189/2129 2275/2190/2129 1791/2191/2129\nf 2373/2192/2130 2135/2193/2130 2334/2194/2130\nf 1218/1857/2131 1016/2163/2131 3507/1858/2131\nf 955/2175/2132 960/2177/2132 959/576/2132\nf 1218/1857/2133 950/2183/2133 1016/2163/2133\nf 1724/408/2134 1137/2195/2134 1981/58/2134\nf 1011/2154/2135 1040/2153/2135 1035/2164/2135\nf 3436/1372/2136 1035/2164/2136 1101/2196/2136\nf 980/2197/2137 1010/2198/2137 1001/2199/2137\nf 1107/2200/2138 1125/747/2138 1106/749/2138\nf 1814/2201/2139 2294/2202/2139 1827/1513/2139\nf 633/2052/2140 1189/1986/2140 965/1978/2140\nf 1378/594/2141 1137/2195/2141 2104/592/2141\nf 2275/2190/2142 2294/2202/2142 1791/2191/2142\nf 1082/2203/2143 1087/2204/2143 1071/702/2143\nf 2104/592/2144 20/707/2144 2047/593/2144\nf 20/707/2145 1571/2205/2145 2087/822/2145\nf 3280/107/2146 3279/106/2146 3213/2206/2146\nf 1193/334/2147 1175/1221/2147 1014/914/2147\nf 2087/822/2148 1571/2205/2148 2061/2207/2148\nf 2859/2208/2149 2064/2209/2149 2218/2210/2149\nf 2898/2211/2150 2882/2212/2150 2867/2213/2150\nf 1925/2214/2151 1568/2215/2151 1711/2216/2151\nf 1501/2217/2152 1735/2218/2152 1734/2219/2152\nf 1725/2220/2153 1501/2217/2153 1734/2219/2153\nf 1027/2221/2154 1012/2222/2154 3468/2223/2154\nf 1138/42/2155 1179/82/2155 1178/1662/2155\nf 1188/1575/2156 2121/323/2156 1128/1576/2156\nf 2784/2224/2157 2770/2225/2157 1125/2226/2157\nf 1101/2196/2158 1118/1117/2158 3485/326/2158\nf 1065/2227/2159 1209/2097/2159 1036/2096/2159\nf 3241/309/2160 3280/107/2160 3213/2206/2160\nf 2925/2228/2161 2926/2229/2161 2944/2230/2161\nf 467/2231/2162 1379/588/2162 1131/2232/2162\nf 1188/1575/2163 2069/321/2163 2121/323/2163\nf 1288/2233/2164 2031/2185/2164 1978/340/2164\nf 2687/2234/2165 1931/2235/2165 1908/2236/2165\nf 1059/2014/2166 1070/2237/2166 1046/2238/2166\nf 1216/2239/2167 1112/2152/2167 950/2183/2167\nf 1027/2221/2168 1111/1971/2168 1012/2222/2168\nf 1097/2240/2169 1139/2241/2169 1105/2242/2169\nf 1369/2243/2170 1393/2244/2170 243/2245/2170\nf 1216/2239/2171 1217/193/2171 1112/2152/2171\nf 1047/2246/2172 1046/2247/2172 1033/2248/2172\nf 3426/1004/2173 1004/2249/2173 105/1290/2173\nf 1263/154/2174 1315/156/2174 1172/1690/2174\nf 1820/2250/2175 1992/2251/2175 1561/2252/2175\nf 2372/2253/2176 963/2254/2176 2910/2255/2176\nf 1118/1117/2177 1101/2196/2177 1073/2256/2177\nf 1073/2256/2178 1040/2153/2178 976/2257/2178\nf 985/319/2179 1222/1084/2179 226/832/2179\nf 226/832/2180 1100/834/2180 1064/983/2180\nf 1140/2258/2181 1157/2259/2181 1169/2260/2181\nf 1072/2261/2182 1071/702/2182 2552/701/2182\nf 3212/2167/2183 3213/2206/2183 3227/2262/2183\nf 1072/2261/2184 1082/2203/2184 1071/702/2184\nf 1134/1802/2185 3438/2263/2185 983/1985/2185\nf 1012/2222/2186 1189/1986/2186 983/1985/2186\nf 2723/653/2187 2753/652/2187 2601/2264/2187\nf 781/2148/2188 2046/2265/2188 2017/2157/2188\nf 2031/2185/2189 2071/2266/2189 1978/340/2189\nf 2103/116/2190 2116/2267/2190 2102/2268/2190\nf 992/2269/2191 1173/2270/2191 908/2074/2191\nf 3175/2271/2192 3197/2272/2192 3174/2273/2192\nf 502/2274/2193 1328/907/2193 479/906/2193\nf 1029/2275/2194 1116/2276/2194 3489/753/2194\nf 3045/2277/2195 3087/1409/2195 3057/1411/2195\nf 1203/2278/2196 2137/2279/2196 1202/2280/2196\nf 1139/2241/2197 1140/2258/2197 1169/2260/2197\nf 1810/1228/2198 1577/1955/2198 1831/2281/2198\nf 1139/2282/2199 1124/1431/2199 1105/2283/2199\nf 2137/2279/2200 992/2269/2200 1202/2280/2200\nf 2488/2284/2201 989/2285/2201 1007/2286/2201\nf 992/2269/2202 1050/2287/2202 1173/2270/2202\nf 3355/2288/2203 3414/2289/2203 1957/2290/2203\nf 1568/2215/2204 1925/2214/2204 1159/2291/2204\nf 1035/2164/2205 1073/2256/2205 1101/2196/2205\nf 2209/2292/2206 2377/2293/2206 2215/2294/2206\nf 1218/1857/2207 1148/429/2207 950/2183/2207\nf 1148/429/2208 1216/2239/2208 950/2183/2208\nf 2436/2295/2209 3019/2296/2209 3030/2297/2209\nf 2276/2298/2210 2231/2299/2210 2230/2300/2210\nf 2839/1640/2211 3434/869/2211 3483/1639/2211\nf 3482/1332/2212 3453/2301/2212 3492/1003/2212\nf 2085/339/2213 1807/2302/2213 1288/2233/2213\nf 1807/2302/2214 2085/339/2214 2068/1846/2214\nf 1246/2137/2215 2277/881/2215 1083/488/2215\nf 1831/937/2216 1818/2303/2216 1809/2304/2216\nf 1766/57/2217 1088/111/2217 1215/421/2217\nf 2634/362/2218 2653/2305/2218 2652/724/2218\nf 1151/2306/2219 1777/2307/2219 364/2308/2219\nf 1081/2309/2220 1105/2242/2220 1080/2310/2220\nf 1105/2242/2221 1096/2311/2221 1080/2310/2221\nf 1239/2312/2222 1311/1368/2222 57/1367/2222\nf 2221/2313/2223 2248/1131/2223 2287/2314/2223\nf 1784/2315/2224 1555/2316/2224 1785/589/2224\nf 2040/1017/2225 2081/2317/2225 2056/2318/2225\nf 1379/588/2226 1747/81/2226 182/260/2226\nf 2424/245/2227 2673/2319/2227 3428/759/2227\nf 1348/115/2228 1308/164/2228 1289/2320/2228\nf 2084/2321/2229 2068/1846/2229 2085/339/2229\nf 1893/2093/2230 2085/339/2230 2093/338/2230\nf 1800/1148/2231 1799/176/2231 1786/2322/2231\nf 2653/2305/2232 2689/1201/2232 2652/724/2232\nf 1029/2275/2233 1180/324/2233 1036/2096/2233\nf 1008/2323/2234 1007/2324/2234 989/2325/2234\nf 2153/1194/2235 2677/2326/2235 2482/2327/2235\nf 1757/2328/2236 1770/1090/2236 1764/2329/2236\nf 1024/2330/2237 2377/2293/2237 2209/2292/2237\nf 1869/59/2238 1377/175/2238 1108/112/2238\nf 2201/2331/2239 2191/2332/2239 2302/2333/2239\nf 1124/2334/2240 1139/2241/2240 1169/2260/2240\nf 1855/113/2241 1062/2335/2241 1147/261/2241\nf 1460/2035/2242 1078/6/2242 1414/2336/2242\nf 1214/2337/2243 1286/2338/2243 1777/2339/2243\nf 1286/2340/2244 1379/588/2244 1777/2307/2244\nf 1081/2309/2245 1080/2310/2245 1070/2341/2245\nf 1377/175/2246 1862/174/2246 1960/884/2246\nf 1269/2342/2247 1415/1660/2247 1122/2343/2247\nf 2524/2344/2248 3462/2345/2248 3441/870/2248\nf 1269/2346/2249 3352/2347/2249 1415/2170/2249\nf 2795/2348/2250 2012/2349/2250 2847/2350/2250\nf 1322/2351/2251 1828/2352/2251 2049/2353/2251\nf 1000/2354/2252 1008/2323/2252 989/2325/2252\nf 2406/2355/2253 2405/2356/2253 2911/2357/2253\nf 846/1816/2254 838/1764/2254 619/1817/2254\nf 1218/1857/2255 1042/427/2255 1148/429/2255\nf 2713/2358/2256 1125/2226/2256 1107/2359/2256\nf 1026/320/2257 1064/983/2257 708/2360/2257\nf 561/2361/2258 1325/199/2258 158/80/2258\nf 1096/2311/2259 1104/2362/2259 1103/2363/2259\nf 2120/186/2260 2093/338/2260 1978/340/2260\nf 1033/2248/2261 1046/2247/2261 1022/2364/2261\nf 1845/178/2262 1619/2365/2262 1612/2366/2262\nf 2713/2358/2263 1107/2359/2263 2662/2367/2263\nf 1097/2240/2264 1105/2242/2264 1081/2309/2264\nf 599/1835/2265 974/1837/2265 975/1748/2265\nf 1044/909/2266 1054/1768/2266 1031/1573/2266\nf 384/1609/2267 809/1624/2267 686/1610/2267\nf 1004/1317/2268 3431/2368/2268 686/1610/2268\nf 1105/2242/2269 1124/2334/2269 1096/2311/2269\nf 970/978/2270 979/2369/2270 969/2370/2270\nf 1612/2366/2271 1617/541/2271 1844/2371/2271\nf 1189/1883/2272 615/1582/2272 939/1581/2272\nf 1378/594/2273 2047/593/2273 1154/364/2273\nf 1020/2372/2274 1033/2248/2274 1022/2364/2274\nf 1862/174/2275 577/185/2275 1960/884/2275\nf 1010/1597/2276 1009/1596/2276 1001/2373/2276\nf 2119/2374/2277 1621/2375/2277 20/707/2277\nf 1180/324/2278 1065/2227/2278 1036/2096/2278\nf 2145/2376/2279 1291/1680/2279 1283/2377/2279\nf 983/1985/2280 991/2378/2280 1012/2222/2280\nf 3500/325/2281 1180/324/2281 1029/2275/2281\nf 1862/174/2282 2093/338/2282 577/185/2282\nf 970/2379/2283 989/2325/2283 979/2380/2283\nf 1460/2035/2284 1414/2336/2284 1289/2320/2284\nf 1070/2341/2285 1069/2381/2285 1058/2382/2285\nf 980/2197/2286 1001/2199/2286 971/977/2286\nf 962/1964/2287 980/2197/2287 971/977/2287\nf 1111/1971/2288 1189/1986/2288 1012/2222/2288\nf 2044/2156/2289 2043/563/2289 3182/562/2289\nf 1124/1431/2290 1169/2383/2290 1168/2384/2290\nf 3251/2385/2291 953/2386/2291 3270/2387/2291\nf 1151/2388/2292 1214/2337/2292 1777/2339/2292\nf 1968/2187/2293 1988/2389/2293 2071/2266/2293\nf 982/259/2294 1147/261/2294 1062/2335/2294\nf 1069/2381/2295 1103/2363/2295 1068/2390/2295\nf 1078/6/2296 228/5/2296 1414/2336/2296\nf 1203/2278/2297 1202/2280/2297 1196/2391/2297\nf 1762/407/2298 1766/57/2298 1215/421/2298\nf 2044/2156/2299 2057/219/2299 2043/563/2299\nf 1798/912/2300 1605/540/2300 1597/913/2300\nf 1017/1942/2301 1031/1573/2301 1054/1768/2301\nf 2289/1443/2302 2158/1442/2302 2862/2392/2302\nf 1059/703/2303 1081/2309/2303 1070/2341/2303\nf 1020/2372/2304 1022/2364/2304 1008/2393/2304\nf 1020/2394/2305 1008/2323/2305 1009/1596/2305\nf 821/2395/2306 1214/30/2306 1151/2306/2306\nf 652/1140/2307 2229/1142/2307 657/2396/2307\nf 1032/2397/2308 2551/2398/2308 2527/2399/2308\nf 1855/113/2309 1935/886/2309 1062/2335/2309\nf 1070/2341/2310 1058/2382/2310 1032/2397/2310\nf 1022/2364/2311 1032/2397/2311 1007/2286/2311\nf 1008/2393/2312 1022/2364/2312 1007/2286/2312\nf 961/979/2313 970/978/2313 969/2370/2313\nf 3451/1929/2314 870/2400/2314 3480/1300/2314\nf 1126/2401/2315 1216/2239/2315 1148/429/2315\nf 242/1967/2316 1217/193/2316 1216/2239/2316\nf 1126/2401/2317 242/1967/2317 1216/2239/2317\nf 3501/350/2318 3496/1097/2318 3452/1099/2318\nf 2250/2402/2319 2242/2403/2319 2382/2005/2319\nf 1157/2259/2320 1185/2404/2320 1184/2405/2320\nf 1185/2404/2321 1203/2278/2321 1184/2405/2321\nf 2242/2406/2322 2250/2407/2322 2282/2408/2322\nf 953/1544/2323 975/1748/2323 974/1837/2323\nf 3452/2409/2324 3507/1858/2324 3436/1372/2324\nf 1001/2199/2325 990/2110/2325 971/977/2325\nf 1916/2410/2326 2171/2411/2326 1449/2412/2326\nf 1784/2315/2327 1785/589/2327 1796/591/2327\nf 970/2379/2328 1000/2354/2328 989/2325/2328\nf 3391/2413/2329 1974/108/2329 3390/1375/2329\nf 3438/2263/2330 991/2378/2330 983/1985/2330\nf 3431/2368/2331 1160/1611/2331 686/1610/2331\nf 1035/2164/2332 1040/2153/2332 1073/2256/2332\nf 3371/683/2333 3372/2414/2333 3381/684/2333\nf 3481/1108/2334 1148/429/2334 3478/428/2334\nf 2911/2357/2335 2405/2356/2335 2909/2415/2335\nf 1920/2416/2336 2360/2417/2336 2225/2418/2336\nf 1484/2419/2337 1502/2420/2337 1501/2217/2337\nf 2616/2421/2338 1866/2422/2338 2581/2423/2338\nf 1996/2424/2339 2364/2425/2339 2307/2426/2339\nf 3449/1266/2340 3450/1354/2340 3495/359/2340\nf 652/1140/2341 657/2396/2341 837/2427/2341\nf 1032/2397/2342 1058/2382/2342 2551/2398/2342\nf 857/1783/2343 805/1703/2343 3509/1702/2343\nf 1694/2428/2344 3335/2429/2344 1669/862/2344\nf 2419/2430/2345 981/2431/2345 963/2432/2345\nf 2377/2293/2346 2339/2433/2346 2215/2294/2346\nf 2909/2415/2347 2405/2356/2347 2404/2434/2347\nf 1286/2340/2348 1747/81/2348 1379/588/2348\nf 1118/1117/2349 1065/2227/2349 1180/324/2349\nf 3329/2435/2350 3374/2436/2350 3328/2437/2350\nf 1166/602/2351 1155/492/2351 2257/1927/2351\nf 947/1623/2352 470/554/2352 426/700/2352\nf 2377/2293/2353 2132/2438/2353 2339/2433/2353\nf 1090/2439/2354 242/1967/2354 1126/2401/2354\nf 1389/603/2355 410/1215/2355 756/675/2355\nf 1617/541/2356 1612/2366/2356 1618/2440/2356\nf 1104/2362/2357 1123/424/2357 1103/2363/2357\nf 1800/1125/2358 1786/2441/2358 1764/2329/2358\nf 1213/2442/2359 908/2074/2359 1201/511/2359\nf 558/635/2360 652/1140/2360 837/2427/2360\nf 1168/2443/2361 1213/2442/2361 1167/2047/2361\nf 1096/2311/2362 1103/2363/2362 1069/2381/2362\nf 3214/2444/2363 3243/2445/2363 3228/2446/2363\nf 1104/2362/2364 1124/2334/2364 1168/2443/2364\nf 1118/1117/2365 976/2257/2365 1065/2227/2365\nf 2104/592/2366 2119/2374/2366 20/707/2366\nf 1910/2447/2367 1889/2448/2367 3288/2449/2367\nf 1066/2450/2368 1148/429/2368 3481/1108/2368\nf 1066/2450/2369 1126/2401/2369 1148/429/2369\nf 1411/2451/2370 1183/1034/2370 1438/1036/2370\nf 1095/4/2371 2100/1661/2371 1214/30/2371\nf 976/2257/2372 1040/2153/2372 24/2452/2372\nf 1855/113/2373 1960/884/2373 1935/886/2373\nf 1103/2363/2374 1079/2453/2374 1068/2390/2374\nf 1786/2322/2375 1798/912/2375 1567/911/2375\nf 1066/2450/2376 1090/2439/2376 1126/2401/2376\nf 2403/2454/2377 2909/2415/2377 2404/2434/2377\nf 1129/2455/2378 2770/2225/2378 1140/2456/2378\nf 2770/1701/2379 1185/2404/2379 1157/2259/2379\nf 2907/2457/2380 2916/851/2380 2906/2458/2380\nf 3496/1097/2381 3465/838/2381 3502/837/2381\nf 2339/2433/2382 2328/2459/2382 2138/2460/2382\nf 1156/452/2383 1168/2443/2383 1167/2047/2383\nf 1923/2461/2384 1507/1196/2384 2896/2462/2384\nf 1029/2275/2385 229/2463/2385 1116/2276/2385\nf 1029/2275/2386 1036/2096/2386 229/2463/2386\nf 1036/2096/2387 504/2098/2387 229/2463/2387\nf 1169/2260/2388 1184/2405/2388 1168/2443/2388\nf 1157/2259/2389 1184/2405/2389 1169/2260/2389\nf 812/2464/2390 924/2001/2390 1175/1221/2390\nf 136/378/2391 670/1062/2391 102/796/2391\nf 2939/2465/2392 2964/527/2392 2974/529/2392\nf 3382/2466/2393 3372/2414/2393 3342/165/2393\nf 3382/2466/2394 3342/165/2394 3294/105/2394\nf 1805/2467/2395 3510/1467/2395 3491/2468/2395\nf 2770/1701/2396 1157/2259/2396 1140/2258/2396\nf 3494/1305/2397 3459/1457/2397 3485/326/2397\nf 1843/2469/2398 1853/2470/2398 1816/2471/2398\nf 961/979/2399 969/2370/2399 957/1053/2399\nf 3503/615/2400 1042/427/2400 3507/1858/2400\nf 3482/1332/2401 3492/1003/2401 3424/1002/2401\nf 3465/838/2402 3491/2468/2402 3455/839/2402\nf 961/979/2403 957/1053/2403 2956/2472/2403\nf 985/319/2404 226/832/2404 1064/983/2404\nf 1202/2280/2405 992/2269/2405 908/2074/2405\nf 1744/2473/2406 1734/2219/2406 1735/2218/2406\nf 1202/2280/2407 908/2074/2407 1213/2442/2407\nf 3045/2277/2408 3057/1411/2408 2998/2474/2408\nf 1023/2475/2409 1033/2248/2409 2506/2476/2409\nf 1023/2475/2410 1047/2246/2410 1033/2248/2410\nf 962/1964/2411 971/977/2411 961/979/2411\nf 1744/2477/2412 1772/1046/2412 1734/1048/2412\nf 1756/2478/2413 1757/2328/2413 1764/2329/2413\nf 1844/2371/2414 1845/178/2414 1612/2366/2414\nf 1772/1046/2415 1801/2479/2415 1771/1089/2415\nf 1801/2480/2416 1808/1147/2416 1771/2481/2416\nf 1057/2482/2417 1069/2381/2417 1063/2483/2417\nf 1129/2455/2418 1140/2456/2418 1139/2282/2418\nf 2984/2484/2419 3025/2485/2419 2983/528/2419\nf 1818/2303/2420 1817/177/2420 1808/1147/2420\nf 3242/1937/2421 3280/107/2421 3241/309/2421\nf 1032/2397/2422 2527/2399/2422 1007/2286/2422\nf 1777/2307/2423 467/2231/2423 364/2308/2423\nf 1103/2363/2424 1123/424/2424 1079/2453/2424\nf 2371/2486/2425 1887/1891/2425 2902/2487/2425\nf 2336/2488/2426 2190/2489/2426 2003/2490/2426\nf 1106/2491/2427 1129/2455/2427 1097/2492/2427\nf 1002/358/2428 1066/2450/2428 3481/1108/2428\nf 1460/2035/2429 1289/2320/2429 1308/164/2429\nf 1214/2337/2430 2100/2172/2430 1286/2338/2430\nf 1071/2493/2431 1081/2494/2431 1059/2014/2431\nf 1001/2373/2432 1000/2354/2432 990/2495/2432\nf 1213/2442/2433 1201/511/2433 1167/2047/2433\nf 1196/2391/2434 1202/2280/2434 1213/2442/2434\nf 951/1965/2435 961/979/2435 2956/2472/2435\nf 1817/177/2436 1818/2303/2436 1846/1200/2436\nf 1770/1090/2437 1800/1125/2437 1764/2329/2437\nf 2031/2185/2438 1968/2187/2438 2071/2266/2438\nf 1069/2381/2439 1068/2390/2439 1063/2483/2439\nf 1936/2496/2440 1864/2497/2440 1912/628/2440\nf 2770/2225/2441 2830/2498/2441 1185/2499/2441\nf 1066/2450/2442 1002/358/2442 1090/2439/2442\nf 1090/2439/2443 1100/834/2443 242/1967/2443\nf 1905/2500/2444 2069/321/2444 1188/1575/2444\nf 1289/2320/2445 1414/2336/2445 1152/2501/2445\nf 992/2269/2446 2137/2279/2446 1050/2287/2446\nf 1203/2278/2447 1196/2391/2447 1184/2405/2447\nf 228/5/2448 1214/30/2448 821/2395/2448\nf 969/2502/2449 979/531/2449 2458/530/2449\nf 1295/2503/2450 1260/184/2450 1231/183/2450\nf 2268/2504/2451 2252/2505/2451 2213/2506/2451\nf 963/2254/2452 958/2507/2452 2929/2508/2452\nf 1009/1596/2453 1008/2323/2453 1000/2354/2453\nf 2956/2472/2454 957/1053/2454 2967/1052/2454\nf 969/1999/2455 2440/1881/2455 957/2509/2455\nf 1077/1175/2456 1094/1170/2456 1086/1769/2456\nf 908/2074/2457 1173/2270/2457 1143/512/2457\nf 1123/424/2458 1104/2362/2458 1156/452/2458\nf 1080/2510/2459 1096/1433/2459 1069/2511/2459\nf 2402/2512/2460 2372/2253/2460 2910/2255/2460\nf 3375/2513/2461 3385/2514/2461 3374/2436/2461\nf 931/285/2462 1159/2291/2462 1277/100/2462\nf 2085/339/2463 1288/2233/2463 1978/340/2463\nf 1799/176/2464 1845/178/2464 1844/2371/2464\nf 775/1316/2465 740/2106/2465 105/2029/2465\nf 666/2515/2466 1163/280/2466 927/1776/2466\nf 616/1784/2467 942/1765/2467 846/1816/2467\nf 950/2183/2468 1011/2154/2468 1016/2163/2468\nf 2506/2476/2469 1033/2248/2469 1020/2372/2469\nf 1905/2500/2470 1925/2214/2470 1711/2216/2470\nf 1087/2516/2471 1097/2492/2471 1081/2494/2471\nf 972/2517/2472 980/2197/2472 962/1964/2472\nf 576/1654/2473 3270/2518/2473 573/1778/2473\nf 1653/776/2474 1811/1362/2474 664/210/2474\nf 860/1617/2475 348/927/2475 361/728/2475\nf 314/2519/2476 873/1507/2476 1030/1963/2476\nf 2810/253/2477 2869/1415/2477 2809/254/2477\nf 1001/2373/2478 1009/1596/2478 1000/2354/2478\nf 1766/57/2479 1108/112/2479 1088/111/2479\nf 1097/2492/2480 1129/2455/2480 1139/2282/2480\nf 1183/1034/2481 1210/1652/2481 8/2050/2481\nf 963/2254/2482 2929/2508/2482 2910/2255/2482\nf 1163/2520/2483 986/2521/2483 927/1828/2483\nf 1579/2522/2484 2066/2523/2484 2058/2158/2484\nf 2477/2524/2485 2498/2525/2485 2478/2526/2485\nf 2443/848/2486 2193/847/2486 2498/2525/2486\nf 1071/2493/2487 1087/2516/2487 1081/2494/2487\nf 2402/2512/2488 2410/2527/2488 2372/2253/2488\nf 972/2517/2489 962/1964/2489 958/2528/2489\nf 1132/301/2490 3470/281/2490 870/2400/2490\nf 725/1534/2491 730/2109/2491 724/1370/2491\nf 314/2519/2492 1030/1963/2492 582/1505/2492\nf 2869/1415/2493 2868/2529/2493 2841/1416/2493\nf 924/2001/2494 812/2464/2494 1117/2045/2494\nf 963/2530/2495 972/2517/2495 958/2528/2495\nf 3492/1003/2496 3483/1780/2496 3432/2531/2496\nf 1119/1814/2497 1121/2532/2497 846/1816/2497\nf 1034/2533/2498 616/1784/2498 846/1816/2498\nf 616/1784/2499 1034/2533/2499 1172/1690/2499\nf 2285/2534/2500 2316/2535/2500 2254/2536/2500\nf 1022/2364/2501 1046/2247/2501 1032/2397/2501\nf 1196/2391/2502 1213/2442/2502 1168/2443/2502\nf 1184/2405/2503 1196/2391/2503 1168/2443/2503\nf 1104/2362/2504 1168/2443/2504 1156/452/2504\nf 1046/2247/2505 1070/2341/2505 1032/2397/2505\nf 2490/2537/2506 1010/2198/2506 980/2197/2506\nf 1198/1938/2507 491/1504/2507 876/1820/2507\nf 3440/2538/2508 3433/349/2508 3459/665/2508\nf 7/1704/2509 932/1893/2509 1132/301/2509\nf 996/897/2510 1005/1924/2510 987/1092/2510\nf 2403/2454/2511 2410/2527/2511 2402/2512/2511\nf 1117/750/2512 812/2103/2512 3467/1591/2512\nf 2490/2539/2513 2506/1595/2513 1010/1597/2513\nf 1121/2532/2514 1034/2533/2514 846/1816/2514\nf 1068/2390/2515 2329/2540/2515 2599/2541/2515\nf 2697/2542/2516 977/2543/2516 3462/2345/2516\nf 1070/2341/2517 1080/2310/2517 1069/2381/2517\nf 3063/898/2518 954/577/2518 968/632/2518\nf 491/1504/2519 351/2544/2519 582/1505/2519\nf 351/2544/2520 314/2519/2520 582/1505/2520\nf 2346/1274/2521 1413/1226/2521 1362/1261/2521\nf 438/489/2522 1191/1526/2522 1133/723/2522\nf 3463/300/2523 3437/299/2523 3504/2545/2523\nf 3246/335/2524 3216/337/2524 3192/2546/2524\nf 3481/1108/2525 3458/1446/2525 1002/358/2525\nf 1165/2547/2526 1121/2532/2526 1119/1814/2526\nf 1079/2453/2527 1123/424/2527 1115/426/2527\nf 1764/2329/2528 1548/2548/2528 1756/2478/2528\nf 1002/358/2529 1153/360/2529 1090/2439/2529\nf 3194/2549/2530 78/811/2530 3170/1173/2530\nf 1058/2382/2531 1069/2381/2531 1057/2482/2531\nf 990/2495/2532 1000/2354/2532 970/2379/2532\nf 1073/2256/2533 976/2257/2533 1118/1117/2533\nf 453/1948/2534 3438/2263/2534 1134/1802/2534\nf 1183/1034/2535 1198/1938/2535 831/1831/2535\nf 814/343/2536 873/1507/2536 314/2519/2536\nf 1173/2270/2537 558/635/2537 1143/512/2537\nf 1165/2547/2538 1119/1814/2538 1298/1895/2538\nf 1034/2533/2539 1075/2550/2539 1172/1690/2539\nf 1045/405/2540 1061/517/2540 1013/406/2540\nf 1047/2246/2541 1059/703/2541 1046/2247/2541\nf 1084/1525/2542 1014/914/2542 1161/916/2542\nf 2046/2265/2543 2045/2155/2543 2017/2157/2543\nf 8/2050/2544 491/1504/2544 1198/1938/2544\nf 558/635/2545 837/2427/2545 2393/636/2545\nf 3477/788/2546 3433/349/2546 3460/1116/2546\nf 594/1044/2547 1162/140/2547 1053/2551/2547\nf 1034/2533/2548 1121/2532/2548 1075/2550/2548\nf 2178/2552/2549 2164/2553/2549 2174/2554/2549\nf 974/1837/2550 573/1545/2550 953/1544/2550\nf 651/1401/2551 1017/1942/2551 1043/1904/2551\nf 1076/303/2552 700/302/2552 1085/1984/2552\nf 981/2555/2553 980/2197/2553 972/2517/2553\nf 2901/2556/2554 2903/2557/2554 2370/2558/2554\nf 2673/2319/2555 2894/680/2555 3428/759/2555\nf 703/438/2556 133/439/2556 143/1028/2556\nf 8/2050/2557 1198/1938/2557 1183/1034/2557\nf 1053/2551/2558 351/2544/2558 491/1504/2558\nf 1153/360/2559 1100/834/2559 1090/2439/2559\nf 995/2559/2560 1017/1942/2560 651/1401/2560\nf 994/1979/2561 995/2559/2561 651/1401/2561\nf 1054/1768/2562 1085/1984/2562 700/302/2562\nf 2991/1880/2563 2990/2560/2563 2440/1881/2563\nf 981/2555/2564 2490/2537/2564 980/2197/2564\nf 1149/1043/2565 491/1504/2565 8/2050/2565\nf 315/341/2566 314/2519/2566 351/2544/2566\nf 377/571/2567 315/341/2567 351/2544/2567\nf 315/341/2568 814/343/2568 314/2519/2568\nf 2515/2040/2569 2231/2299/2569 1813/2561/2569\nf 963/2530/2570 981/2555/2570 972/2517/2570\nf 594/1044/2571 1053/2551/2571 1149/1043/2571\nf 1133/723/2572 1165/2547/2572 1298/1895/2572\nf 1084/1525/2573 1121/2532/2573 1165/2547/2573\nf 1121/2532/2574 1084/1525/2574 1075/2550/2574\nf 1043/1904/2575 1054/1768/2575 700/302/2575\nf 1153/360/2576 3495/359/2576 3447/982/2576\nf 1149/1043/2577 1053/2551/2577 491/1504/2577\nf 1053/2551/2578 377/571/2578 351/2544/2578\nf 1162/140/2579 377/571/2579 1053/2551/2579\nf 987/1092/2580 1005/1924/2580 995/2562/2580\nf 1044/909/2581 1077/1175/2581 1086/1769/2581\nf 823/142/2582 315/341/2582 377/571/2582\nf 838/1764/2583 846/1816/2583 942/1765/2583\nf 959/576/2584 978/450/2584 998/449/2584\nf 1133/723/2585 1191/1526/2585 1165/2547/2585\nf 1191/1526/2586 1084/1525/2586 1165/2547/2586\nf 1161/916/2587 1263/154/2587 1075/2550/2587\nf 120/494/2588 427/696/2588 1360/2165/2588\nf 987/1092/2589 995/2562/2589 994/2563/2589\nf 3149/2564/2590 987/1092/2590 994/2563/2590\nf 1017/1942/2591 1054/1768/2591 1043/1904/2591\nf 1054/1768/2592 1086/1769/2592 1085/1984/2592\nf 1113/139/2593 1399/138/2593 1085/1984/2593\nf 594/1044/2594 316/356/2594 1162/140/2594\nf 2043/563/2595 2057/219/2595 2016/88/2595\nf 353/1051/2596 251/48/2596 1237/543/2596\nf 1390/2565/2597 1373/15/2597 1402/14/2597\nf 2898/2211/2598 2897/2566/2598 2882/2212/2598\nf 35/1519/2599 1923/2461/2599 967/1517/2599\nf 1086/1769/2600 1113/139/2600 1085/1984/2600\nf 3348/2147/2601 571/2087/2601 3377/2567/2601\nf 1513/2568/2602 1500/2569/2602 1733/2570/2602\nf 1093/277/2603 1091/513/2603 1039/305/2603\nf 1084/1525/2604 1161/916/2604 1075/2550/2604\nf 995/2559/2605 1005/1777/2605 1017/1942/2605\nf 1380/151/2606 1442/2571/2606 396/152/2606\nf 1337/2572/2607 1383/1256/2607 1235/2573/2607\nf 1383/1256/2608 1247/2574/2608 1235/2573/2608\nf 1390/2565/2609 1417/1165/2609 1373/15/2609\nf 504/2098/2610 191/86/2610 1240/2575/2610\nf 1258/257/2611 1242/766/2611 1230/258/2611\nf 1219/2576/2612 1224/833/2612 1222/1084/2612\nf 1296/2577/2613 290/496/2613 137/495/2613\nf 1352/75/2614 31/2578/2614 1248/2579/2614\nf 1258/257/2615 1260/184/2615 1259/2580/2615\nf 1224/833/2616 1252/1096/2616 1100/834/2616\nf 1287/27/2617 9/16/2617 1227/28/2617\nf 3439/2120/2618 3236/1114/2618 3460/1116/2618\nf 1489/564/2619 2043/563/2619 2016/88/2619\nf 1382/2581/2620 1371/1959/2620 1434/34/2620\nf 1975/110/2621 1986/1176/2621 1974/108/2621\nf 1309/2582/2622 1871/2583/2622 1724/408/2622\nf 3453/2301/2623 3483/1780/2623 3492/1003/2623\nf 1094/1170/2624 1317/2056/2624 1113/139/2624\nf 574/1632/2625 919/1666/2625 121/1163/2625\nf 1410/2584/2626 1454/2585/2626 1399/2586/2626\nf 3442/2587/2627 1026/320/2627 708/2360/2627\nf 103/379/2628 93/804/2628 3218/548/2628\nf 1266/2588/2629 1283/1917/2629 728/2064/2629\nf 48/2589/2630 1493/2590/2630 1527/2591/2630\nf 1113/2592/2631 1317/2593/2631 1374/2594/2631\nf 1374/2594/2632 1410/2584/2632 1399/2586/2632\nf 1436/2595/2633 1454/2585/2633 1410/2584/2633\nf 1317/2593/2634 1342/2596/2634 1374/2594/2634\nf 1599/939/2635 1613/2597/2635 1638/2598/2635\nf 1318/2599/2636 1342/2596/2636 1317/2593/2636\nf 1374/2594/2637 1342/2596/2637 1410/2584/2637\nf 1410/2584/2638 1455/2600/2638 1436/2595/2638\nf 472/2601/2639 505/2602/2639 283/2603/2639\nf 11/2604/2640 472/2601/2640 283/2603/2640\nf 1318/2599/2641 1317/2593/2641 1114/2605/2641\nf 1342/2596/2642 1455/2600/2642 1410/2584/2642\nf 1436/2595/2643 1455/2600/2643 1249/180/2643\nf 1340/2606/2644 1341/2607/2644 329/606/2644\nf 1443/2608/2645 1257/2609/2645 1353/344/2645\nf 1385/2610/2646 1342/2596/2646 1318/2599/2646\nf 1342/2596/2647 1385/2610/2647 1455/2600/2647\nf 1343/2611/2648 1385/2610/2648 1318/2599/2648\nf 1455/2600/2649 1464/2612/2649 1249/180/2649\nf 1464/2612/2650 437/2613/2650 44/181/2650\nf 1249/180/2651 1464/2612/2651 44/181/2651\nf 1249/2614/2652 197/812/2652 724/1370/2652\nf 1439/273/2653 1402/14/2653 396/152/2653\nf 166/1295/2654 1681/2615/2654 1643/1294/2654\nf 1400/2616/2655 1385/2610/2655 1343/2611/2655\nf 1385/2610/2656 1400/2616/2656 1455/2600/2656\nf 1437/2617/2657 1464/2612/2657 1455/2600/2657\nf 220/2618/2658 763/1493/2658 437/2619/2658\nf 1257/2609/2659 1127/490/2659 1353/344/2659\nf 1108/112/2660 1377/175/2660 1855/113/2660\nf 1400/2616/2661 1437/2617/2661 1455/2600/2661\nf 220/2620/2662 1464/2612/2662 1437/2617/2662\nf 220/2621/2663 437/721/2663 1464/2622/2663\nf 414/50/2664 325/49/2664 42/202/2664\nf 1239/2312/2665 1296/2577/2665 1417/1165/2665\nf 1810/1228/2666 1809/2623/2666 1787/1229/2666\nf 1344/2624/2667 1400/2616/2667 1343/2611/2667\nf 1400/2616/2668 1422/2625/2668 1437/2617/2668\nf 1438/1036/2669 220/2618/2669 1437/2626/2669\nf 1422/2627/2670 1438/1036/2670 1437/2626/2670\nf 1438/1036/2671 1465/1035/2671 220/2618/2671\nf 345/94/2672 1458/291/2672 2332/990/2672\nf 1593/2628/2673 1673/2629/2673 1424/228/2673\nf 1424/228/2674 1331/77/2674 1332/76/2674\nf 1417/1165/2675 1296/2577/2675 137/495/2675\nf 1773/2169/2676 1765/2630/2676 1744/2477/2676\nf 1188/1575/2677 1879/1574/2677 2018/2631/2677\nf 1400/2616/2678 1344/2624/2678 1422/2625/2678\nf 416/2632/2679 439/1377/2679 423/1376/2679\nf 1254/78/2680 1408/560/2680 1358/1230/2680\nf 504/2098/2681 1240/2575/2681 2206/2633/2681\nf 1736/2634/2682 1773/2635/2682 1744/2473/2682\nf 1178/1662/2683 2100/1661/2683 1095/4/2683\nf 1343/2611/2684 2143/2636/2684 1344/2624/2684\nf 2197/2637/2685 1411/2638/2685 1344/2624/2685\nf 1344/2639/2686 1411/2451/2686 1422/2627/2686\nf 1422/2627/2687 1411/2451/2687 1438/1036/2687\nf 1391/2640/2688 2277/881/2688 1246/2137/2688\nf 1435/147/2689 365/145/2689 1172/1690/2689\nf 1261/29/2690 1227/28/2690 2180/2641/2690\nf 3475/664/2691 3440/2538/2691 3459/665/2691\nf 1178/1662/2692 1095/4/2692 1170/2162/2692\nf 2197/1925/2693 1176/491/2693 1411/2451/2693\nf 2397/2642/2694 569/2643/2694 190/454/2694\nf 788/1826/2695 1357/345/2695 835/1813/2695\nf 1395/2644/2696 1244/2645/2696 24/2452/2696\nf 2197/1925/2697 1155/492/2697 1176/491/2697\nf 1277/100/2698 1159/2291/2698 1141/101/2698\nf 1244/2645/2699 298/84/2699 24/2452/2699\nf 3238/2646/2700 3352/2347/2700 1269/2346/2700\nf 1244/2647/2701 205/2648/2701 298/2649/2701\nf 531/385/2702 542/413/2702 866/1472/2702\nf 1420/2650/2703 1276/2651/2703 1394/559/2703\nf 1383/1256/2704 1373/15/2704 273/1166/2704\nf 173/73/2705 1352/75/2705 1451/90/2705\nf 229/2463/2706 504/2098/2706 163/2652/2706\nf 783/141/2707 1359/2166/2707 823/142/2707\nf 1330/1224/2708 1351/2653/2708 492/1145/2708\nf 1304/2654/2709 1376/2655/2709 1356/74/2709\nf 1232/182/2710 1230/258/2710 1225/44/2710\nf 1222/1084/2711 2384/2656/2711 1219/2576/2711\nf 814/343/2712 409/342/2712 873/1507/2712\nf 1365/2657/2713 1404/561/2713 1408/560/2713\nf 3510/1467/2714 3455/839/2714 3491/2468/2714\nf 505/2602/2715 282/217/2715 445/216/2715\nf 1683/2658/2716 1647/2659/2716 1728/2660/2716\nf 2396/2661/2717 1220/2662/2717 43/2663/2717\nf 1275/157/2718 1292/51/2718 1242/766/2718\nf 43/2663/2719 1304/2654/2719 569/2643/2719\nf 182/260/2720 1041/420/2720 1147/261/2720\nf 1376/2655/2721 317/2664/2721 31/2578/2721\nf 1675/2665/2722 1473/2666/2722 2735/263/2722\nf 1734/2667/2723 1733/2668/2723 1500/2669/2723\nf 2693/2670/2724 2719/1905/2724 2692/2671/2724\nf 1308/164/2725 1204/163/2725 1324/2034/2725\nf 1220/2662/2726 1304/2654/2726 43/2663/2726\nf 43/2663/2727 569/2643/2727 34/2672/2727\nf 113/2673/2728 1394/559/2728 1268/2674/2728\nf 1119/1814/2729 835/1813/2729 1357/345/2729\nf 1100/834/2730 1267/191/2730 242/1967/2730\nf 2396/2661/2731 34/2672/2731 1130/2675/2731\nf 1293/2676/2732 1683/2658/2732 1882/2677/2732\nf 1253/1223/2733 1397/2678/2733 1351/2653/2733\nf 1305/159/2734 1382/2581/2734 1338/52/2734\nf 1376/2655/2735 1443/2679/2735 1425/2680/2735\nf 1443/2679/2736 1301/2681/2736 1425/2680/2736\nf 1233/2682/2737 1271/2683/2737 428/2684/2737\nf 1271/2683/2738 1443/2679/2738 428/2684/2738\nf 1287/27/2739 1403/39/2739 9/16/2739\nf 1141/101/2740 1325/199/2740 561/2361/2740\nf 106/545/2741 1236/2685/2741 1320/2686/2741\nf 1397/2678/2742 1466/1146/2742 1351/2653/2742\nf 2057/219/2743 2083/820/2743 2042/89/2743\nf 1226/2687/2744 1232/182/2744 1225/44/2744\nf 1408/560/2745 1387/2688/2745 1315/2689/2745\nf 1301/2690/2746 1282/2691/2746 1425/2692/2746\nf 317/2664/2747 1376/2655/2747 1425/2680/2747\nf 977/867/2748 2174/866/2748 965/1978/2748\nf 205/2648/2749 1340/2606/2749 328/605/2749\nf 1276/2651/2750 1397/2678/2750 1253/1223/2750\nf 1178/1662/2751 1170/2162/2751 1138/42/2751\nf 1340/2606/2752 1692/2693/2752 1341/2607/2752\nf 10/130/2753 77/262/2753 1423/149/2753\nf 3504/2545/2754 3457/1331/2754 3454/1301/2754\nf 1284/1909/2755 1402/14/2755 1439/273/2755\nf 1284/1909/2756 1390/2565/2756 1402/14/2756\nf 1443/2608/2757 1353/344/2757 1366/2694/2757\nf 1351/2653/2758 1466/1146/2758 492/1145/2758\nf 504/2098/2759 2206/2633/2759 163/2652/2759\nf 2087/822/2760 2061/2207/2760 57/1212/2760\nf 1239/2312/2761 1417/1165/2761 1390/2565/2761\nf 1284/1909/2762 1239/2312/2762 1390/2565/2762\nf 1225/44/2763 1224/2695/2763 1219/45/2763\nf 1241/33/2764 312/32/2764 1593/205/2764\nf 1296/2577/2765 2061/2696/2765 290/496/2765\nf 283/2603/2766 505/2602/2766 445/216/2766\nf 1233/2697/2767 1257/2609/2767 1271/2698/2767\nf 1325/199/2768 1309/2582/2768 1995/2188/2768\nf 1366/2694/2769 1353/344/2769 1238/346/2769\nf 1245/1257/2770 137/495/2770 472/2601/2770\nf 1247/2574/2771 11/2604/2771 1279/2699/2771\nf 1418/63/2772 1407/2700/2772 1393/2244/2772\nf 1127/490/2773 1133/723/2773 1353/344/2773\nf 2341/43/2774 1226/2687/2774 1225/44/2774\nf 1309/2582/2775 1724/408/2775 1995/2188/2775\nf 1401/2701/2776 1425/2680/2776 1312/2702/2776\nf 262/666/2777 506/544/2777 1237/543/2777\nf 1547/2703/2778 12/223/2778 13/35/2778\nf 1316/158/2779 1355/1960/2779 1305/159/2779\nf 555/1205/2780 363/1233/2780 134/203/2780\nf 1316/158/2781 1633/2127/2781 1355/1960/2781\nf 340/2704/2782 1407/2700/2782 1418/63/2782\nf 1313/697/2783 440/2705/2783 424/579/2783\nf 1356/74/2784 1376/2655/2784 31/2578/2784\nf 964/581/2785 3487/1584/2785 1208/332/2785\nf 1312/2702/2786 943/2706/2786 1328/907/2786\nf 1549/668/2787 1789/2707/2787 1540/26/2787\nf 1395/1149/2788 1453/1143/2788 1244/2647/2788\nf 1431/2708/2789 1365/2657/2789 1254/78/2789\nf 1268/2674/2790 1276/2651/2790 1253/1223/2790\nf 1246/2137/2791 1127/490/2791 1257/2609/2791\nf 2837/2709/2792 2073/2710/2792 2880/2711/2792\nf 3459/665/2793 3433/349/2793 3443/351/2793\nf 1335/607/2794 329/606/2794 1287/27/2794\nf 326/630/2795 171/414/2795 1300/443/2795\nf 1337/2572/2796 1373/15/2796 1383/1256/2796\nf 1331/77/2797 1431/2708/2797 1254/78/2797\nf 428/2684/2798 1443/2679/2798 1376/2655/2798\nf 1209/2097/2799 191/86/2799 504/2098/2799\nf 1365/2657/2800 1408/560/2800 1254/78/2800\nf 1304/2654/2801 1356/74/2801 569/2643/2801\nf 34/2672/2802 569/2643/2802 2397/2642/2802\nf 43/2663/2803 34/2672/2803 2396/2661/2803\nf 2173/2712/2804 1874/2713/2804 2780/2714/2804\nf 1337/2572/2805 1235/2573/2805 1339/2715/2805\nf 1404/561/2806 1339/2715/2806 1420/2650/2806\nf 457/1178/2807 1340/2606/2807 205/2648/2807\nf 1420/2650/2808 1339/2715/2808 1276/2651/2808\nf 1433/62/2809 2090/2173/2809 1463/637/2809\nf 107/2716/2810 298/84/2810 1209/2097/2810\nf 1387/2688/2811 1394/559/2811 113/2673/2811\nf 1338/52/2812 1382/2581/2812 1381/60/2812\nf 1440/2717/2813 1358/153/2813 1452/155/2813\nf 1210/1652/2814 1411/2451/2814 1176/491/2814\nf 12/223/2815 1560/2718/2815 1692/2693/2815\nf 191/86/2816 1335/2719/2816 1240/2575/2816\nf 1977/2720/2817 1976/109/2817 1958/232/2817\nf 1304/2654/2818 428/2684/2818 1376/2655/2818\nf 1352/75/2819 1356/74/2819 31/2578/2819\nf 754/2721/2820 784/1930/2820 272/2722/2820\nf 1303/1179/2821 767/2020/2821 768/1180/2821\nf 2170/2723/2822 30/2724/2822 1449/2725/2822\nf 31/2578/2823 317/2664/2823 1228/519/2823\nf 1401/2701/2824 502/2274/2824 1314/520/2824\nf 1356/74/2825 173/73/2825 569/2643/2825\nf 1879/1574/2826 2104/592/2826 1137/2195/2826\nf 2083/820/2827 2066/2523/2827 2117/306/2827\nf 1137/2195/2828 1378/594/2828 1981/58/2828\nf 873/1507/2829 409/342/2829 926/1508/2829\nf 1463/637/2830 251/48/2830 353/1051/2830\nf 1401/2701/2831 1312/2702/2831 1328/907/2831\nf 3489/753/2832 1116/2276/2832 3488/1712/2832\nf 317/2664/2833 1401/2701/2833 1228/519/2833\nf 317/2664/2834 1425/2680/2834 1401/2701/2834\nf 2677/2326/2835 2817/1426/2835 2482/2327/2835\nf 728/2064/2836 633/2052/2836 1266/2588/2836\nf 3/497/2837 1329/2726/2837 505/2602/2837\nf 1225/44/2838 1230/258/2838 1224/2695/2838\nf 1348/115/2839 1289/2320/2839 1270/2727/2839\nf 2948/2728/2840 2986/2729/2840 2965/2730/2840\nf 9/16/2841 1373/15/2841 1256/236/2841\nf 1713/2731/2842 2061/2207/2842 1571/2205/2842\nf 2344/2732/2843 1220/2662/2843 2396/2661/2843\nf 1250/1944/2844 2164/1943/2844 1266/2733/2844\nf 1340/2606/2845 457/1178/2845 12/223/2845\nf 2767/226/2846 3487/2734/2846 964/134/2846\nf 1279/2699/2847 11/2604/2847 283/2603/2847\nf 3092/2735/2848 3054/1787/2848 954/577/2848\nf 1366/2694/2849 1282/2736/2849 1301/2737/2849\nf 1425/2680/2850 1282/2738/2850 1312/2702/2850\nf 444/2739/2851 213/975/2851 267/989/2851\nf 315/341/2852 1444/1844/2852 409/342/2852\nf 503/2740/2853 926/1508/2853 409/342/2853\nf 1223/2741/2854 1233/2682/2854 2344/2732/2854\nf 506/544/2855 1236/2685/2855 106/545/2855\nf 1253/1223/2856 1351/2653/2856 1330/1224/2856\nf 1235/2573/2857 1247/2574/2857 1279/2699/2857\nf 1424/228/2858 29/2742/2858 1331/77/2858\nf 1549/668/2859 1802/1363/2859 1789/2707/2859\nf 1228/519/2860 1314/520/2860 1310/118/2860\nf 143/1028/2861 690/1254/2861 710/1391/2861\nf 1401/2701/2862 1328/907/2862 502/2274/2862\nf 634/1155/2863 620/1234/2863 1407/2743/2863\nf 3484/2744/2864 3446/22/2864 3474/422/2864\nf 1240/1127/2865 1335/607/2865 1261/29/2865\nf 1244/2647/2866 330/1144/2866 205/2648/2866\nf 783/141/2867 120/494/2867 1359/2166/2867\nf 2293/2745/2868 1391/2746/2868 1223/2741/2868\nf 1383/1256/2869 1245/1257/2869 1247/2574/2869\nf 1869/59/2870 1154/364/2870 1893/2093/2870\nf 1264/2747/2871 29/2742/2871 1424/228/2871\nf 29/2742/2872 1431/2708/2872 1331/77/2872\nf 1404/561/2873 1337/2572/2873 1339/2715/2873\nf 1340/2606/2874 12/223/2874 1692/2693/2874\nf 1337/2572/2875 1404/561/2875 1365/2657/2875\nf 1882/2677/2876 1633/1105/2876 1293/2676/2876\nf 1651/1104/2877 1937/1103/2877 2106/2748/2877\nf 763/1493/2878 220/2618/2878 1465/1035/2878\nf 1444/1844/2879 1468/2749/2879 409/342/2879\nf 409/342/2880 1468/2749/2880 503/2740/2880\nf 1284/1909/2881 1968/2750/2881 1239/2312/2881\nf 1968/2750/2882 1311/1368/2882 1239/2312/2882\nf 1256/236/2883 1337/2572/2883 1431/2708/2883\nf 338/2751/2884 926/1508/2884 503/2740/2884\nf 338/2751/2885 671/2038/2885 926/1508/2885\nf 1545/1250/2886 1294/1252/2886 1251/1364/2886\nf 1366/2694/2887 1238/346/2887 1297/1007/2887\nf 1282/2736/2888 1366/2694/2888 1297/1007/2888\nf 2174/866/2889 1250/2752/2889 965/1978/2889\nf 1391/2640/2890 1246/2137/2890 1257/2609/2890\nf 1337/2572/2891 1365/2657/2891 1431/2708/2891\nf 1258/257/2892 1275/157/2892 1242/766/2892\nf 1373/15/2893 1337/2572/2893 1256/236/2893\nf 1394/559/2894 1276/2651/2894 1268/2674/2894\nf 1239/2312/2895 57/1367/2895 1296/2577/2895\nf 1305/159/2896 1355/1960/2896 1382/2581/2896\nf 1358/1230/2897 1408/560/2897 1315/2689/2897\nf 1844/2371/2898 1617/541/2898 1605/540/2898\nf 2117/306/2899 1204/163/2899 737/114/2899\nf 472/2601/2900 137/495/2900 3/497/2900\nf 29/2742/2901 30/2724/2901 1431/2708/2901\nf 1305/159/2902 1292/51/2902 1275/157/2902\nf 410/1215/2903 144/676/2903 756/675/2903\nf 568/2753/2904 671/2038/2904 338/2751/2904\nf 1282/2738/2905 1297/2754/2905 1312/2702/2905\nf 1297/1007/2906 943/1006/2906 1312/2755/2906\nf 1789/2707/2907 1788/1227/2907 1773/2169/2907\nf 2397/2642/2908 190/454/2908 2398/2756/2908\nf 1418/63/2909 1462/638/2909 340/2704/2909\nf 1065/2227/2910 976/2257/2910 107/2716/2910\nf 30/2724/2911 1256/236/2911 1431/2708/2911\nf 1449/2725/2912 30/2724/2912 29/2742/2912\nf 1276/2651/2913 1279/2699/2913 1397/2678/2913\nf 1440/227/2914 1332/76/2914 1358/1230/2914\nf 2501/2757/2915 2524/2344/2915 3441/870/2915\nf 1326/2758/2916 1277/100/2916 47/99/2916\nf 568/2080/2917 930/1529/2917 671/1528/2917\nf 1360/2165/2918 1445/2759/2918 1359/2166/2918\nf 1444/1844/2919 1445/2759/2919 1468/2749/2919\nf 1468/2749/2920 96/2760/2920 503/2740/2920\nf 1443/2608/2921 1366/2694/2921 1301/2737/2921\nf 299/256/2922 1248/2579/2922 1228/519/2922\nf 1451/90/2923 1352/75/2923 1248/2579/2923\nf 127/883/2924 1607/836/2924 94/835/2924\nf 1259/2580/2925 1316/158/2925 1275/157/2925\nf 1733/1047/2926 1757/2328/2926 1513/2761/2926\nf 1258/257/2927 1259/2580/2927 1275/157/2927\nf 2810/253/2928 2775/255/2928 1969/1202/2928\nf 1359/2166/2929 1445/2759/2929 1444/1844/2929\nf 503/2740/2930 96/2760/2930 338/2751/2930\nf 569/2643/2931 173/73/2931 190/454/2931\nf 1230/1167/2932 1242/2133/2932 1252/1096/2932\nf 1348/115/2933 1270/2727/2933 2116/2267/2933\nf 283/2603/2934 445/216/2934 1466/1146/2934\nf 1112/2152/2935 1370/1246/2935 1395/2644/2935\nf 1828/2352/2936 1360/2165/2936 427/696/2936\nf 1445/2759/2937 96/2760/2937 1468/2749/2937\nf 1382/2581/2938 1434/34/2938 1419/83/2938\nf 1233/2682/2939 428/2684/2939 1304/2654/2939\nf 1292/51/2940 1305/159/2940 1338/52/2940\nf 502/2274/2941 213/521/2941 1314/520/2941\nf 1339/2715/2942 1235/2573/2942 1276/2651/2942\nf 330/1144/2943 1244/2647/2943 1453/1143/2943\nf 250/2762/2944 568/2763/2944 338/2764/2944\nf 250/2762/2945 665/2765/2945 568/2763/2945\nf 3469/782/2946 2007/2766/2946 3456/400/2946\nf 1233/2682/2947 1304/2654/2947 1220/2662/2947\nf 1245/1257/2948 273/1166/2948 137/495/2948\nf 1271/2683/2949 1257/2767/2949 1443/2679/2949\nf 1295/2503/2950 1647/2768/2950 1260/184/2950\nf 330/1144/2951 457/1178/2951 205/2648/2951\nf 1360/2165/2952 1446/2769/2952 1445/2759/2952\nf 1445/2759/2953 1446/2769/2953 96/2760/2953\nf 1446/2769/2954 1469/2770/2954 96/2760/2954\nf 96/2771/2955 185/2772/2955 338/2764/2955\nf 1854/542/2956 1596/2773/2956 1605/540/2956\nf 1316/158/2957 1293/2774/2957 1633/2127/2957\nf 1268/2674/2958 1253/1223/2958 617/1225/2958\nf 1279/2699/2959 283/2603/2959 1397/2678/2959\nf 1276/2651/2960 1235/2573/2960 1279/2699/2960\nf 3181/2775/2961 614/2776/2961 613/2777/2961\nf 1322/2351/2962 1360/2165/2962 1828/2352/2962\nf 1360/2165/2963 1322/2351/2963 1446/2769/2963\nf 250/2762/2964 338/2764/2964 185/2772/2964\nf 298/84/2965 191/86/2965 1209/2097/2965\nf 617/1698/2966 121/1163/2966 919/1666/2966\nf 3479/312/2967 1697/311/2967 3486/1075/2967\nf 1469/2778/2968 185/2772/2968 96/2771/2968\nf 1432/2779/2969 665/2765/2969 250/2762/2969\nf 328/605/2970 1335/607/2970 191/2780/2970\nf 1233/2682/2971 1220/2662/2971 2344/2732/2971\nf 1248/2579/2972 31/2578/2972 1228/519/2972\nf 121/1163/2973 617/1698/2973 1330/487/2973\nf 1226/2687/2974 2341/43/2974 1099/2781/2974\nf 190/454/2975 2361/608/2975 2398/2756/2975\nf 1665/2782/2976 1668/1262/2976 1544/1216/2976\nf 1315/2689/2977 1387/2688/2977 1435/2783/2977\nf 392/2784/2978 1302/1339/2978 1667/2785/2978\nf 1466/1146/2979 445/216/2979 1685/218/2979\nf 1065/2227/2980 107/2716/2980 1209/2097/2980\nf 1223/2741/2981 1391/2746/2981 1233/2682/2981\nf 1353/344/2982 1298/1895/2982 1357/345/2982\nf 993/2786/2983 586/1676/2983 1993/1966/2983\nf 1387/2688/2984 1408/560/2984 1394/559/2984\nf 251/48/2985 262/666/2985 1237/543/2985\nf 25/2787/2986 754/2788/2986 1462/638/2986\nf 1245/1257/2987 472/2601/2987 11/2604/2987\nf 1435/2783/2988 1387/2688/2988 1262/2789/2988\nf 1387/2688/2989 113/2673/2989 1262/2789/2989\nf 1283/1917/2990 768/1180/2990 728/2064/2990\nf 2501/2757/2991 3441/870/2991 3434/869/2991\nf 1381/60/2992 1382/2581/2992 1419/83/2992\nf 1391/2640/2993 2293/2790/2993 2277/881/2993\nf 1717/2791/2994 1661/1071/2994 219/2792/2994\nf 748/1461/2995 376/330/2995 407/315/2995\nf 1268/2674/2996 617/1225/2996 113/2673/2996\nf 1112/2152/2997 1217/193/2997 1370/1246/2997\nf 1379/588/2998 982/259/2998 1131/2232/2998\nf 1322/2793/2999 1426/2794/2999 1446/2795/2999\nf 1446/2795/3000 1426/2794/3000 1469/2778/3000\nf 185/2772/3001 395/2796/3001 250/2762/3001\nf 395/2796/3002 1432/2779/3002 250/2762/3002\nf 1392/2797/3003 604/2798/3003 1432/2779/3003\nf 1449/2725/3004 29/2742/3004 1264/2747/3004\nf 3012/2799/3005 3050/2800/3005 3036/2801/3005\nf 1354/625/3006 1412/2802/3006 1313/697/3006\nf 171/414/3007 490/416/3007 1300/443/3007\nf 2029/2803/3008 2030/87/3008 2040/1017/3008\nf 3492/1003/3009 3431/2804/3009 3426/1004/3009\nf 1426/2794/3010 1447/2805/3010 1469/2778/3010\nf 1210/1652/3011 1183/1034/3011 1411/2451/3011\nf 937/1859/3012 936/1840/3012 55/2806/3012\nf 1384/2807/3013 1354/625/3013 477/624/3013\nf 1354/625/3014 1384/2807/3014 1412/2802/3014\nf 472/2601/3015 3/497/3015 505/2602/3015\nf 3472/1445/3016 3449/1266/3016 3458/1446/3016\nf 2004/1177/3017 2030/87/3017 2029/2803/3017\nf 1322/2793/3018 2076/2808/3018 1426/2794/3018\nf 1432/2779/3019 1396/2809/3019 1392/2797/3019\nf 1392/2797/3020 6/2810/3020 1389/2811/3020\nf 1313/697/3021 1412/2802/3021 439/1377/3021\nf 3336/314/3022 443/295/3022 1669/862/3022\nf 1397/2678/3023 283/2603/3023 1466/1146/3023\nf 467/2231/3024 1777/2307/3024 1379/588/3024\nf 1469/2778/3025 1447/2805/3025 185/2772/3025\nf 395/2796/3026 1396/2809/3026 1432/2779/3026\nf 1396/2809/3027 6/2810/3027 1392/2797/3027\nf 604/2798/3028 665/2765/3028 1432/2779/3028\nf 416/2632/3029 440/2705/3029 439/1377/3029\nf 2754/2812/3030 3453/2301/3030 3482/1332/3030\nf 1784/2315/3031 1536/2813/3031 1555/2316/3031\nf 530/2814/3032 1396/2809/3032 395/2796/3032\nf 1451/90/3033 1248/2579/3033 299/256/3033\nf 1394/559/3034 1404/561/3034 1420/2650/3034\nf 1384/2807/3035 774/2815/3035 1412/2802/3035\nf 3473/872/3036 3461/270/3036 3472/269/3036\nf 1341/2607/3037 1380/151/3037 329/606/3037\nf 328/605/3038 1340/2606/3038 329/606/3038\nf 1418/63/3039 1433/62/3039 1462/638/3039\nf 2076/2808/3040 1361/2816/3040 1426/2794/3040\nf 1426/2794/3041 1361/2816/3041 1447/2805/3041\nf 1447/2805/3042 1470/2817/3042 185/2772/3042\nf 529/2818/3043 395/2796/3043 185/2772/3043\nf 529/2818/3044 530/2814/3044 395/2796/3044\nf 476/12/3045 190/454/3045 1451/90/3045\nf 272/1094/3046 784/2819/3046 28/1154/3046\nf 1412/2802/3047 1251/1364/3047 439/1377/3047\nf 10/130/3048 1423/149/3048 1346/148/3048\nf 1260/184/3049 1683/2820/3049 1259/2580/3049\nf 1809/2304/3050 1810/2821/3050 1831/937/3050\nf 1854/542/3051 1853/2470/3051 1843/2469/3051\nf 205/2648/3052 328/605/3052 298/2649/3052\nf 25/1033/3053 560/1032/3053 753/1766/3053\nf 2103/116/3054 1348/115/3054 2116/2267/3054\nf 185/2772/3055 1470/2817/3055 529/2818/3055\nf 1255/941/3056 6/2810/3056 1396/2809/3056\nf 1255/941/3057 410/2822/3057 6/2810/3057\nf 1233/2682/3058 1391/2746/3058 1257/2767/3058\nf 774/2815/3059 318/1973/3059 1412/2802/3059\nf 2081/2317/3060 2082/307/3060 2103/116/3060\nf 1265/124/3061 1396/2809/3061 530/2814/3061\nf 1462/638/3062 1463/637/3062 25/2787/3062\nf 318/1973/3063 1251/1364/3063 1412/2802/3063\nf 1393/2823/3064 1369/2824/3064 1948/2825/3064\nf 24/2452/3065 298/84/3065 107/2716/3065\nf 1504/2826/3066 1758/2827/3066 1478/2828/3066\nf 1979/942/3067 2071/2266/3067 1988/2389/3067\nf 2118/2829/3068 1979/942/3068 1988/2389/3068\nf 1361/2816/3069 2390/2830/3069 1362/1261/3069\nf 529/2818/3070 1265/124/3070 530/2814/3070\nf 1398/2831/3071 1396/2809/3071 1265/124/3071\nf 1398/2831/3072 1255/941/3072 1396/2809/3072\nf 423/1376/3073 1302/1339/3073 415/1338/3073\nf 24/2452/3074 107/2716/3074 976/2257/3074\nf 1381/60/3075 1453/1143/3075 1395/1149/3075\nf 1979/942/3076 2118/2829/3076 2122/943/3076\nf 982/259/3077 1062/2335/3077 1327/2832/3077\nf 3141/2833/3078 3173/310/3078 3189/1637/3078\nf 1362/1261/3079 1427/1260/3079 1361/2816/3079\nf 1427/1260/3080 1447/2805/3080 1361/2816/3080\nf 1427/1260/3081 1457/1126/3081 1447/2805/3081\nf 1470/2817/3082 459/122/3082 529/2818/3082\nf 459/122/3083 1265/124/3083 529/2818/3083\nf 1255/941/3084 144/2834/3084 410/2822/3084\nf 1463/637/3085 1461/46/3085 251/48/3085\nf 1489/564/3086 3364/2835/3086 3182/562/3086\nf 1040/2153/3087 1395/2644/3087 24/2452/3087\nf 1266/2588/3088 633/2052/3088 1250/2752/3088\nf 1251/1364/3089 1294/1252/3089 423/1376/3089\nf 423/1376/3090 1294/1252/3090 1302/1339/3090\nf 1463/637/3091 353/1051/3091 25/2787/3091\nf 1709/2836/3092 2890/1848/3092 2826/1/3092\nf 952/2837/3093 958/2528/3093 962/1964/3093\nf 1457/1126/3094 1470/2817/3094 1447/2805/3094\nf 1328/907/3095 313/895/3095 339/894/3095\nf 870/2400/3096 3490/1009/3096 3454/1301/3096\nf 1355/1960/3097 1371/1959/3097 1382/2581/3097\nf 1298/1895/3098 1353/344/3098 1133/723/3098\nf 352/36/3099 457/1178/3099 330/1144/3099\nf 1228/519/3100 1401/2701/3100 1314/520/3100\nf 44/2838/3101 437/721/3101 203/720/3101\nf 1294/1252/3102 1667/2785/3102 1302/1339/3102\nf 1327/2832/3103 1062/2335/3103 1935/886/3103\nf 2120/186/3104 1206/944/3104 2088/187/3104\nf 2876/2839/3105 2289/1443/3105 2862/2392/3105\nf 1457/1126/3106 459/122/3106 1470/2817/3106\nf 1274/1164/3107 1375/410/3107 1398/2831/3107\nf 1265/124/3108 1274/1164/3108 1398/2831/3108\nf 1255/941/3109 237/940/3109 144/2834/3109\nf 3489/423/3110 3488/2840/3110 3474/422/3110\nf 1259/2580/3111 1683/2820/3111 1316/158/3111\nf 1528/2841/3112 1708/2842/3112 1640/381/3112\nf 1247/2574/3113 1245/1257/3113 11/2604/3113\nf 1389/603/3114 604/1174/3114 1392/2843/3114\nf 1316/158/3115 1683/2820/3115 1293/2774/3115\nf 2894/680/3116 215/2844/3116 2615/287/3116\nf 3413/2845/3117 1958/232/3117 1974/108/3117\nf 2890/1848/3118 1710/1633/3118 2826/1/3118\nf 2730/1267/3119 2810/253/3119 1969/1202/3119\nf 1398/2831/3120 1375/410/3120 1255/941/3120\nf 1197/1074/3121 3484/1870/3121 3486/1075/3121\nf 1975/110/3122 2015/117/3122 1986/1176/3122\nf 1232/182/3123 1260/184/3123 1258/257/3123\nf 1593/205/3124 1424/2846/3124 1440/290/3124\nf 106/929/3125 327/928/3125 19/958/3125\nf 2040/1017/3126 2041/1016/3126 2081/2317/3126\nf 2041/1016/3127 2082/307/3127 2081/2317/3127\nf 1471/430/3128 1457/1126/3128 1427/1260/3128\nf 1614/1192/3129 1615/1245/3129 1641/2847/3129\nf 1582/2848/3130 1591/2849/3130 1581/2850/3130\nf 1716/2851/3131 1539/70/3131 1701/72/3131\nf 1642/2852/3132 1628/2853/3132 1681/2854/3132\nf 1659/2855/3133 1698/1276/3133 392/1288/3133\nf 1592/2856/3134 1601/1162/3134 1600/2857/3134\nf 1505/2858/3135 1530/2859/3135 1504/2826/3135\nf 1559/2860/3136 1581/2850/3136 1533/2861/3136\nf 122/1100/3137 114/1040/3137 1600/2862/3137\nf 1708/2842/3138 397/411/3138 1640/381/3138\nf 1380/151/3139 1341/2607/3139 1606/2863/3139\nf 1492/2864/3140 1493/234/3140 1516/2865/3140\nf 1633/1105/3141 1882/2677/3141 1937/1103/3141\nf 487/1278/3142 1650/1311/3142 511/1302/3142\nf 1551/968/3143 1580/1010/3143 84/969/3143\nf 2743/2866/3144 2787/2867/3144 2806/2868/3144\nf 3454/1301/3145 3457/1331/3145 3424/1002/3145\nf 1546/2869/3146 1927/2870/3146 1711/2216/3146\nf 1705/1247/3147 1574/2871/3147 1671/2872/3147\nf 1615/1245/3148 1642/2852/3148 1641/2847/3148\nf 444/18/3149 267/2873/3149 1345/23/3149\nf 1679/2874/3150 1659/2875/3150 1667/2785/3150\nf 149/2876/3151 177/1101/3151 148/1041/3151\nf 1664/1150/3152 1665/2782/3152 452/1182/3152\nf 3435/1922/3153 3442/2587/3153 3447/982/3153\nf 1479/2179/3154 1504/2826/3154 1486/2877/3154\nf 1641/2847/3155 1642/2852/3155 1680/1123/3155\nf 2708/1961/3156 215/2844/3156 2673/2319/3156\nf 3440/2538/3157 3460/1116/3157 3433/349/3157\nf 296/195/3158 183/194/3158 443/295/3158\nf 2669/857/3159 3453/856/3159 2754/705/3159\nf 2767/2878/3160 3429/1723/3160 3487/1667/3160\nf 2671/2879/3161 2184/2880/3161 2697/2542/3161\nf 1371/2881/3162 1651/1104/3162 2106/2748/3162\nf 320/1249/3163 1698/1276/3163 1705/1247/3163\nf 2692/2671/3164 2719/1905/3164 2691/1907/3164\nf 2659/2882/3165 2694/2883/3165 2658/2884/3165\nf 1526/2885/3166 1543/1120/3166 1553/1119/3166\nf 1578/2886/3167 1599/939/3167 1577/938/3167\nf 585/1413/3168 45/945/3168 32/917/3168\nf 1599/939/3169 1607/2887/3169 1613/2597/3169\nf 1336/2888/3170 1369/2243/3170 1368/2889/3170\nf 1712/2890/3171 1684/2891/3171 1603/2892/3171\nf 1531/629/3172 1912/628/3172 1864/2497/3172\nf 1549/668/3173 1525/667/3173 1802/1363/3173\nf 3128/2893/3174 3152/2894/3174 3162/2895/3174\nf 1627/120/3175 1639/2896/3175 1656/2897/3175\nf 2489/2898/3176 1769/252/3176 2422/2070/3176\nf 1696/2899/3177 1712/2890/3177 1566/2900/3177\nf 1827/1513/3178 2294/2202/3178 2536/2901/3178\nf 1610/2902/3179 1586/2903/3179 1664/2904/3179\nf 563/614/3180 528/643/3180 914/744/3180\nf 3018/2905/3181 2992/1879/3181 2439/2906/3181\nf 149/2907/3182 1641/2847/3182 177/1122/3182\nf 1592/2856/3183 97/1160/3183 1601/1162/3183\nf 1906/47/3184 1514/2160/3184 262/666/3184\nf 13/1307/3185 1565/1306/3185 14/1912/3185\nf 2607/363/3186 2652/724/3186 2621/1608/3186\nf 32/917/3187 593/860/3187 585/1413/3187\nf 3474/2908/3188 3488/1712/3188 3486/2909/3188\nf 341/498/3189 399/431/3189 1718/2910/3189\nf 2615/287/3190 2769/669/3190 2416/2911/3190\nf 1714/1913/3191 1547/2912/3191 13/1307/3191\nf 493/327/3192 481/329/3192 1564/365/3192\nf 2787/2867/3193 2837/2709/3193 2806/2868/3193\nf 1495/2913/3194 1494/729/3194 1693/731/3194\nf 148/1041/3195 122/1100/3195 1609/2914/3195\nf 108/1191/3196 1615/1245/3196 1614/1192/3196\nf 1600/2862/3197 1601/2915/3197 1609/2914/3197\nf 1645/2916/3198 3396/2917/3198 1584/2918/3198\nf 1207/417/3199 3487/1667/3199 3467/1591/3199\nf 1903/2919/3200 515/2920/3200 2781/288/3200\nf 1506/2921/3201 1542/2922/3201 1533/2923/3201\nf 1614/1192/3202 1641/2847/3202 149/2907/3202\nf 1547/2912/3203 1714/1913/3203 1961/2924/3203\nf 1588/2925/3204 1547/2912/3204 1961/2924/3204\nf 1576/1248/3205 1705/1247/3205 1684/2926/3205\nf 1542/2922/3206 1559/2927/3206 1533/2923/3206\nf 1574/2928/3207 1721/2929/3207 1671/2930/3207\nf 1566/2900/3208 1712/2890/3208 1603/2892/3208\nf 1896/2159/3209 1604/2931/3209 1514/2160/3209\nf 1559/2860/3210 1582/2848/3210 1581/2850/3210\nf 1480/2932/3211 1491/2933/3211 1506/2934/3211\nf 372/2935/3212 307/1072/3212 1594/1077/3212\nf 2962/294/3213 2980/2936/3213 2961/2937/3213\nf 1560/2938/3214 1588/2925/3214 1895/243/3214\nf 12/223/3215 1547/2703/3215 1588/2939/3215\nf 1560/2718/3216 12/223/3216 1588/2939/3216\nf 1681/2854/3217 1715/2940/3217 1691/2941/3217\nf 585/1413/3218 1490/1412/3218 37/959/3218\nf 1552/2942/3219 1559/2927/3219 1542/2922/3219\nf 1526/2943/3220 1542/2944/3220 1515/2945/3220\nf 2702/1076/3221 2543/1935/3221 1197/1074/3221\nf 1585/2946/3222 1721/2929/3222 391/2947/3222\nf 341/498/3223 1718/2910/3223 1623/2948/3223\nf 3386/567/3224 341/498/3224 1623/2948/3224\nf 1570/242/3225 1560/2938/3225 1895/243/3225\nf 3502/616/3226 3455/2042/3226 1042/427/3226\nf 3431/2804/3227 1004/2249/3227 3426/1004/3227\nf 1487/2949/3228 22/712/3228 1505/2950/3228\nf 1505/2950/3229 22/712/3229 1530/1793/3229\nf 1581/2850/3230 1551/2951/3230 1533/2861/3230\nf 1603/2892/3231 1585/2946/3231 1594/1077/3231\nf 36/25/3232 58/211/3232 1549/668/3232\nf 1671/2930/3233 1721/2929/3233 1585/2946/3233\nf 1656/2952/3234 3378/2953/3234 2819/2954/3234\nf 3443/1371/3235 3452/2409/3235 3436/1372/3235\nf 1527/2591/3236 49/2955/3236 48/2589/3236\nf 1638/2598/3237 1613/2597/3237 1627/120/3237\nf 1627/2956/3238 1656/2952/3238 2819/2954/3238\nf 209/1124/3239 1672/2957/3239 219/2792/3239\nf 177/1122/3240 1641/2847/3240 1680/1123/3240\nf 1526/2885/3241 1552/2958/3241 1542/2959/3241\nf 1846/1200/3242 1626/2182/3242 1625/2960/3242\nf 3504/2545/3243 3454/1301/3243 3490/1009/3243\nf 3016/2961/3244 3028/2962/3244 3001/2963/3244\nf 1526/2943/3245 1515/2945/3245 1516/2964/3245\nf 1236/2685/3246 506/544/3246 1604/2931/3246\nf 2780/2714/3247 2708/1961/3247 1689/1864/3247\nf 140/1346/3248 179/1345/3248 1622/1293/3248\nf 1586/2903/3249 1665/2965/3249 1664/2904/3249\nf 614/2776/3250 3149/2564/3250 994/2563/3250\nf 2161/318/3251 1026/320/3251 3442/2587/3251\nf 1626/2966/3252 1646/2967/3252 1636/2968/3252\nf 1619/2365/3253 1846/1200/3253 1625/2960/3253\nf 1625/2969/3254 1626/2966/3254 1636/2968/3254\nf 2927/850/3255 2926/2970/3255 2916/851/3255\nf 2991/1880/3256 3001/2963/3256 2990/2560/3256\nf 1865/2971/3257 2737/2972/3257 1875/2973/3257\nf 1566/2900/3258 1720/1073/3258 1661/1071/3258\nf 3492/1003/3259 3432/2531/3259 3431/2804/3259\nf 1506/2934/3260 1533/2974/3260 1532/2975/3260\nf 1638/2598/3261 1627/120/3261 174/119/3261\nf 2561/2976/3262 2594/361/3262 2593/2977/3262\nf 1696/2899/3263 1716/2978/3263 1701/2979/3263\nf 1329/2726/3264 290/496/3264 1713/2980/3264\nf 1615/1245/3265 1616/1244/3265 1628/2853/3265\nf 1721/2981/3266 1574/2982/3266 1679/2874/3266\nf 115/1327/3267 140/1346/3267 1622/1293/3267\nf 1638/2598/3268 174/119/3268 1637/2983/3268\nf 683/1450/3269 1004/2984/3269 686/1583/3269\nf 1606/2985/3270 1570/242/3270 1797/2986/3270\nf 1606/2985/3271 1692/2987/3271 1570/242/3271\nf 1694/2428/3272 1669/862/3272 1704/2988/3272\nf 3174/2989/3273 3190/308/3273 3173/310/3273\nf 1720/1073/3274 1603/2892/3274 1594/1077/3274\nf 3402/1414/3275 585/1413/3275 584/1739/3275\nf 127/883/3276 138/903/3276 1607/836/3276\nf 3152/2894/3277 3188/2990/3277 3162/2895/3277\nf 1679/2874/3278 1665/2965/3278 1586/2903/3278\nf 2708/1961/3279 1598/2991/3279 215/2844/3279\nf 265/71/3280 1684/2926/3280 1712/2992/3280\nf 1679/2874/3281 1586/2903/3281 1721/2981/3281\nf 3234/2993/3282 3204/1982/3282 975/1981/3282\nf 3467/1591/3283 3505/353/3283 1015/751/3283\nf 402/1058/3284 391/1042/3284 1610/1109/3284\nf 174/757/3285 3392/2994/3285 1637/2995/3285\nf 1478/2828/3286 1758/2827/3286 1503/2996/3286\nf 1656/2952/3287 1639/920/3287 1687/887/3287\nf 1614/1192/3288 1609/2997/3288 1601/2998/3288\nf 1487/2949/3289 1488/713/3289 22/712/3289\nf 1583/1121/3290 1582/2848/3290 1552/2958/3290\nf 404/1287/3291 1302/2999/3291 392/1288/3291\nf 399/431/3292 397/411/3292 1718/2910/3292\nf 2457/3000/3293 2992/3001/3293 2468/3002/3293\nf 1682/215/3294 1685/214/3294 1563/3003/3294\nf 3264/1115/3295 3477/788/3295 3460/1116/3295\nf 1993/1966/3296 579/1860/3296 1495/2913/3296\nf 119/169/3297 446/196/3297 1550/198/3297\nf 1704/2988/3298 1669/862/3298 183/194/3298\nf 45/945/3299 585/1413/3299 37/959/3299\nf 1566/2900/3300 1603/2892/3300 1720/1073/3300\nf 166/1295/3301 194/1296/3301 1681/2615/3301\nf 466/1351/3302 1545/1250/3302 1251/1364/3302\nf 1528/2841/3303 1640/381/3303 1564/365/3303\nf 1585/2946/3304 391/2947/3304 1594/1077/3304\nf 119/169/3305 1550/198/3305 1644/170/3305\nf 1687/887/3306 3272/3004/3306 1656/2952/3306\nf 1645/2916/3307 1636/2968/3307 1646/2967/3307\nf 1533/2974/3308 46/3005/3308 1532/2975/3308\nf 1591/2849/3309 1580/3006/3309 1581/2850/3309\nf 1718/2910/3310 1655/3007/3310 1623/2948/3310\nf 1478/2828/3311 1485/3008/3311 3367/3009/3311\nf 3429/1723/3312 3498/777/3312 3505/353/3312\nf 1614/1192/3313 149/2907/3313 1609/2997/3313\nf 1695/3010/3314 1587/3011/3314 1658/3012/3314\nf 2624/3013/3315 1697/311/3315 566/3014/3315\nf 639/1933/3316 3195/1932/3316 613/2777/3316\nf 1667/2785/3317 1665/2965/3317 1679/2874/3317\nf 1630/3015/3318 1644/170/3318 1550/198/3318\nf 1644/170/3319 1630/3015/3319 1658/3012/3319\nf 3208/3016/3320 1646/2967/3320 3392/2994/3320\nf 1680/1123/3321 1642/2852/3321 1691/2941/3321\nf 1591/2849/3322 1600/2857/3322 1580/3006/3322\nf 209/1124/3323 1691/2941/3323 1672/2957/3323\nf 1802/1363/3324 1810/1228/3324 1788/1227/3324\nf 194/1296/3325 1715/3017/3325 1681/2615/3325\nf 1680/1123/3326 1691/2941/3326 209/1124/3326\nf 1495/2913/3327 1517/1138/3327 1494/729/3327\nf 1539/70/3328 1716/2851/3328 1715/3017/3328\nf 2780/2714/3329 1598/2991/3329 2708/1961/3329\nf 2422/2070/3330 2517/2072/3330 2489/2898/3330\nf 1704/2988/3331 1587/3011/3331 1688/3018/3331\nf 2818/3019/3332 2591/3020/3332 2783/3021/3332\nf 1624/3022/3333 1625/2969/3333 1584/2918/3333\nf 1619/3023/3334 1625/2969/3334 1624/3022/3334\nf 1618/3024/3335 1619/3023/3335 1624/3022/3335\nf 2600/268/3336 2434/267/3336 2543/1935/3336\nf 3468/1470/3337 991/3025/3337 3438/1471/3337\nf 3155/3026/3338 3165/3027/3338 3154/3028/3338\nf 1576/1248/3339 1684/2926/3339 265/71/3339\nf 572/1962/3340 580/1313/3340 3348/2147/3340\nf 1520/3029/3341 2456/3030/3341 3124/3031/3341\nf 1922/3032/3342 3355/2288/3342 1943/3033/3342\nf 2808/3034/3343 1898/3035/3343 2548/2117/3343\nf 1533/2974/3344 1551/3036/3344 46/3005/3344\nf 2817/1426/3345 2060/3/3345 1028/3037/3345\nf 1654/3038/3346 1658/3012/3346 1590/3039/3346\nf 1600/2862/3347 1609/2914/3347 122/1100/3347\nf 1563/3040/3348 1685/218/3348 282/217/3348\nf 1623/2948/3349 1655/3007/3349 1595/3041/3349\nf 1688/3018/3350 1695/3010/3350 3387/3042/3350\nf 118/168/3351 1658/3012/3351 1587/3011/3351\nf 1599/939/3352 1578/2886/3352 1607/2887/3352\nf 1519/3043/3353 1682/215/3353 1678/3044/3353\nf 1718/2910/3354 1708/2842/3354 1655/3007/3354\nf 1497/3045/3355 1520/3029/3355 3124/3031/3355\nf 1526/2885/3356 1553/1119/3356 1552/2958/3356\nf 1889/2448/3357 2695/3046/3357 2660/3047/3357\nf 1323/3048/3358 3471/398/3358 3456/400/3358\nf 2960/3049/3359 3033/67/3359 2952/69/3359\nf 183/194/3360 118/168/3360 1587/3011/3360\nf 724/1370/3361 1454/2132/3361 1249/2614/3361\nf 2561/2976/3362 2560/3050/3362 2537/3051/3362\nf 2852/2118/3363 1272/3052/3363 2857/384/3363\nf 3435/3053/3364 2744/2119/3364 2857/384/3364\nf 575/3054/3365 2500/3055/3365 3417/3056/3365\nf 2749/3057/3366 2731/1400/3366 2761/238/3366\nf 1683/2820/3367 1260/184/3367 1647/2768/3367\nf 1684/2891/3368 1671/2930/3368 1603/2892/3368\nf 2538/3058/3369 2561/2976/3369 2537/3051/3369\nf 179/1345/3370 166/1295/3370 1622/1293/3370\nf 3150/3059/3371 1497/3045/3371 3124/3031/3371\nf 1510/3060/3372 1520/3029/3372 1497/3045/3372\nf 1511/3061/3373 1510/3060/3373 1497/3045/3373\nf 1510/3060/3374 1521/3062/3374 1520/3029/3374\nf 1521/3062/3375 1753/3063/3375 1520/3029/3375\nf 1671/2930/3376 1585/2946/3376 1603/2892/3376\nf 1582/2848/3377 1583/1121/3377 97/1160/3377\nf 481/329/3378 507/328/3378 1670/3064/3378\nf 1477/3065/3379 1484/2419/3379 1476/3066/3379\nf 1480/3067/3380 3381/3068/3380 3372/3069/3380\nf 1491/2933/3381 1516/2964/3381 1515/2945/3381\nf 2852/2118/3382 2857/384/3382 2744/2119/3382\nf 1494/729/3383 1517/1138/3383 1527/1139/3383\nf 3276/3070/3384 1562/3071/3384 1595/3072/3384\nf 1630/3015/3385 1550/198/3385 1519/3043/3385\nf 2560/1514/3386 1827/1513/3386 2536/2901/3386\nf 2879/679/3387 1928/678/3387 1832/3073/3387\nf 1691/2941/3388 1696/2899/3388 1672/2957/3388\nf 1504/2826/3389 1478/2828/3389 1486/2877/3389\nf 1643/3074/3390 1681/2854/3390 1628/2853/3390\nf 1497/3045/3391 3150/3059/3391 1511/3061/3391\nf 1511/3061/3392 1521/3062/3392 1510/3060/3392\nf 1506/2934/3393 1532/2975/3393 1490/3075/3393\nf 1717/2791/3394 1566/2900/3394 1661/1071/3394\nf 2814/3076/3395 2854/3077/3395 2796/3078/3395\nf 2561/2976/3396 2582/3079/3396 2594/361/3396\nf 1695/3010/3397 1658/3012/3397 1654/3038/3397\nf 1516/2865/3398 1543/233/3398 1526/3080/3398\nf 1057/2482/3399 2551/2398/3399 1058/2382/3399\nf 1636/2968/3400 1645/2916/3400 1584/2918/3400\nf 1636/2968/3401 1584/2918/3401 1625/2969/3401\nf 1593/2628/3402 1236/2685/3402 1561/2252/3402\nf 210/1284/3403 1715/3017/3403 194/1296/3403\nf 1658/3081/3404 1630/3082/3404 1590/3083/3404\nf 2594/361/3405 2582/3079/3405 2634/362/3405\nf 1528/2841/3406 1564/365/3406 481/329/3406\nf 219/2792/3407 1672/2957/3407 1717/2791/3407\nf 138/903/3408 1639/920/3408 1607/836/3408\nf 1512/3084/3409 1511/3061/3409 1481/3085/3409\nf 1529/3086/3410 1521/3062/3410 1511/3061/3410\nf 1512/3084/3411 1529/3086/3411 1511/3061/3411\nf 1743/3087/3412 2456/3030/3412 1520/3029/3412\nf 2549/3088/3413 2560/3050/3413 2574/3089/3413\nf 2887/250/3414 1911/3090/3414 2870/3091/3414\nf 1550/198/3415 394/197/3415 1682/215/3415\nf 3173/310/3416 3213/2206/3416 3212/2167/3416\nf 1529/3092/3417 1536/2813/3417 1535/3093/3417\nf 1705/3094/3418 1671/2930/3418 1684/2891/3418\nf 1405/3095/3419 2107/3096/3419 1350/3097/3419\nf 1345/23/3420 267/2873/3420 552/38/3420\nf 1484/2419/3421 1483/3098/3421 1476/3066/3421\nf 1550/198/3422 1682/215/3422 1519/3043/3422\nf 1705/1247/3423 1698/1276/3423 1574/2871/3423\nf 1708/2842/3424 1528/2841/3424 1655/3007/3424\nf 1524/3099/3425 1528/2841/3425 481/329/3425\nf 3427/92/3426 3473/872/3426 3448/1277/3426\nf 3113/1220/3427 3128/1219/3427 3139/3100/3427\nf 1693/731/3428 2585/3101/3428 1495/2913/3428\nf 2653/2305/3429 2704/3102/3429 2689/1201/3429\nf 183/194/3430 1587/3011/3430 1704/2988/3430\nf 2896/2462/3431 1507/1196/3431 184/1328/3431\nf 1688/3018/3432 1587/3011/3432 1695/3010/3432\nf 2593/2977/3433 2581/3103/3433 2574/3089/3433\nf 1595/3041/3434 1655/3007/3434 1541/3104/3434\nf 939/1987/3435 918/1625/3435 983/1985/3435\nf 1634/2184/3436 1459/40/3436 1707/3105/3436\nf 1769/252/3437 2567/3106/3437 2422/2070/3437\nf 265/71/3438 1712/2992/3438 1701/72/3438\nf 2536/2901/3439 2537/3107/3439 2560/1514/3439\nf 3367/3009/3440 1485/3008/3440 1477/3065/3440\nf 1476/3066/3441 3324/3108/3441 1477/3065/3441\nf 2708/1961/3442 2673/2319/3442 2424/245/3442\nf 1519/3109/3443 1690/3110/3443 1630/3082/3443\nf 2704/3102/3444 2730/1267/3444 2689/1201/3444\nf 3340/3111/3445 3368/3112/3445 1486/2877/3445\nf 1512/3084/3446 1537/3113/3446 1529/3086/3446\nf 1537/3114/3447 1536/2813/3447 1529/3092/3447\nf 1535/3093/3448 1536/2813/3448 1784/2315/3448\nf 2560/3050/3449 2593/2977/3449 2574/3089/3449\nf 1626/2966/3450 1637/2995/3450 1646/2967/3450\nf 1557/3115/3451 1567/3116/3451 1597/3117/3451\nf 1579/2522/3452 1573/3118/3452 1707/3105/3452\nf 1506/2934/3453 1490/3075/3453 1480/2932/3453\nf 1736/2634/3454 1503/2996/3454 1773/2635/3454\nf 3476/355/3455 1163/280/3455 1015/751/3455\nf 1721/2929/3456 1610/3119/3456 391/2947/3456\nf 1650/1350/3457 1545/1250/3457 466/1351/3457\nf 1485/3008/3458 1484/2419/3458 1477/3065/3458\nf 1621/2375/3459 1571/2205/3459 20/707/3459\nf 1567/3120/3460 1557/3121/3460 1764/2329/3460\nf 1667/2785/3461 1294/1252/3461 1558/1251/3461\nf 1559/2860/3462 1552/2958/3462 1582/2848/3462\nf 1642/2852/3463 1681/2854/3463 1691/2941/3463\nf 1717/2791/3464 1672/2957/3464 1566/2900/3464\nf 1491/2933/3465 1515/2945/3465 1506/2934/3465\nf 290/496/3466 1329/2726/3466 3/497/3466\nf 2045/2155/3467 1573/3118/3467 1579/2522/3467\nf 1573/3118/3468 1660/3122/3468 1707/3105/3468\nf 1660/3122/3469 1634/2184/3469 1707/3105/3469\nf 397/411/3470 1708/2842/3470 1718/2910/3470\nf 1591/2849/3471 1592/2856/3471 1600/2857/3471\nf 1606/2863/3472 1341/2607/3472 1692/2693/3472\nf 486/1231/3473 1544/1216/3473 1668/1262/3473\nf 1503/2996/3474 1736/2634/3474 1502/2420/3474\nf 1485/3008/3475 1502/2420/3475 1484/2419/3475\nf 146/902/3476 1639/920/3476 138/903/3476\nf 1519/3109/3477 1678/3123/3477 1690/3110/3477\nf 1678/3044/3478 1682/215/3478 1563/3003/3478\nf 2500/1651/3479 583/711/3479 1488/713/3479\nf 1512/3124/3480 1481/3125/3480 1537/3126/3480\nf 1610/1109/3481 1664/1150/3481 422/1129/3481\nf 1607/2887/3482 1639/2896/3482 1613/2597/3482\nf 1613/2597/3483 1639/2896/3483 1627/120/3483\nf 118/168/3484 1644/170/3484 1658/3012/3484\nf 3441/870/3485 1027/3127/3485 3468/871/3485\nf 1134/1802/3486 983/1985/3486 918/1625/3486\nf 318/2057/3487 682/745/3487 475/1352/3487\nf 3392/2994/3488 1646/2967/3488 1637/2995/3488\nf 1495/2913/3489 579/1860/3489 1517/1138/3489\nf 1060/3128/3490 1693/731/3490 2469/730/3490\nf 586/1676/3491 50/1189/3491 579/1860/3491\nf 1503/2996/3492 1502/2420/3492 1485/3008/3492\nf 1695/3010/3493 1654/3038/3493 3387/3042/3493\nf 3463/300/3494 3504/2545/3494 3490/1009/3494\nf 1380/151/3495 1606/2863/3495 1442/2571/3495\nf 1482/3129/3496 1481/3085/3496 3184/3130/3496\nf 1482/3129/3497 1537/3113/3497 1481/3085/3497\nf 1534/3131/3498 2898/2211/3498 2868/2529/3498\nf 2869/1415/3499 1534/3131/3499 2868/2529/3499\nf 754/2721/3500 753/1931/3500 784/1930/3500\nf 2791/239/3501 2812/371/3501 2828/373/3501\nf 1573/3118/3502 1554/3132/3502 1660/3122/3502\nf 1660/3122/3503 1602/41/3503 1634/2184/3503\nf 959/576/3504 3029/578/3504 955/2175/3504\nf 1696/2899/3505 1701/2979/3505 1712/2890/3505\nf 3059/3133/3506 3074/3134/3506 3035/3135/3506\nf 1478/2828/3507 1503/2996/3507 1485/3008/3507\nf 2048/322/3508 1621/2375/3508 2121/323/3508\nf 2048/322/3509 1699/3136/3509 1621/2375/3509\nf 1699/3136/3510 1571/2205/3510 1621/2375/3510\nf 1434/1308/3511 1371/2881/3511 1565/1306/3511\nf 1599/939/3512 1638/2598/3512 1839/2181/3512\nf 1558/1251/3513 1668/3137/3513 1665/2965/3513\nf 3435/3053/3514 2857/384/3514 1894/383/3514\nf 2560/3050/3515 2561/2976/3515 2593/2977/3515\nf 2816/2069/3516 2817/1426/3516 1028/3037/3516\nf 1490/1412/3517 3402/1414/3517 3381/3068/3517\nf 1630/3082/3518 1690/3110/3518 1590/3083/3518\nf 1713/2731/3519 1571/2205/3519 1699/3136/3519\nf 1896/2159/3520 1906/47/3520 1904/3138/3520\nf 3402/3139/3521 575/3054/3521 3401/3140/3521\nf 1522/3141/3522 1537/3113/3522 1482/3129/3522\nf 1515/3142/3523 1542/2922/3523 1506/2921/3523\nf 1582/2848/3524 1592/2856/3524 1591/2849/3524\nf 1561/2252/3525 1236/2685/3525 1604/2931/3525\nf 215/2844/3526 2781/288/3526 2615/287/3526\nf 2593/2977/3527 2617/3143/3527 2581/3103/3527\nf 3387/3042/3528 1654/3038/3528 1608/3144/3528\nf 2046/2265/3529 1635/3145/3529 2045/2155/3529\nf 2045/2155/3530 1632/3146/3530 1573/3118/3530\nf 1632/3146/3531 1554/3132/3531 1573/3118/3531\nf 1652/3147/3532 1602/41/3532 1660/3122/3532\nf 664/210/3533 1525/667/3533 58/211/3533\nf 1581/2850/3534 1580/3006/3534 1551/2951/3534\nf 1600/2862/3535 114/1040/3535 1580/1010/3535\nf 2415/3148/3536 2433/3149/3536 2409/3150/3536\nf 1524/3099/3537 481/329/3537 1670/3064/3537\nf 1672/2957/3538 1696/2899/3538 1566/2900/3538\nf 1479/3151/3539 1487/2949/3539 1505/2950/3539\nf 2897/2566/3540 967/1517/3540 1923/2461/3540\nf 1572/2150/3541 1635/3145/3541 2046/2265/3541\nf 1635/3145/3542 1632/3146/3542 2045/2155/3542\nf 1652/3147/3543 3334/3152/3543 1602/41/3543\nf 109/1272/3544 1643/1294/3544 1628/3153/3544\nf 3313/1736/3545 3312/3154/3545 3284/1737/3545\nf 1582/2848/3546 97/1160/3546 1592/2856/3546\nf 1667/2785/3547 1558/1251/3547 1665/2965/3547\nf 1715/2940/3548 1716/2978/3548 1696/2899/3548\nf 2930/3155/3549 1723/3156/3549 1722/3157/3549\nf 2809/3158/3550 2841/3159/3550 2026/3160/3550\nf 394/197/3551 159/213/3551 1682/215/3551\nf 1522/3161/3552 1538/3162/3552 1537/3114/3552\nf 1537/3114/3553 1538/3162/3553 1555/2316/3553\nf 1574/2982/3554 1659/2875/3554 1679/2874/3554\nf 1698/1276/3555 1659/2855/3555 1574/2871/3555\nf 1793/1518/3556 2829/3163/3556 2619/1427/3556\nf 1659/2875/3557 392/2784/3557 1667/2785/3557\nf 2290/846/3558 2246/2036/3558 2193/847/3558\nf 2677/2326/3559 2619/1427/3559 2817/1426/3559\nf 1604/2931/3560 506/544/3560 1514/2160/3560\nf 2926/2229/3561 2927/3164/3561 2945/3165/3561\nf 1486/2877/3562 3397/2180/3562 1479/2179/3562\nf 1544/1216/3563 452/1182/3563 1665/2782/3563\nf 1691/2941/3564 1715/2940/3564 1696/2899/3564\nf 2139/1678/3565 1368/2889/3565 2136/1679/3565\nf 1839/2181/3566 1638/2598/3566 1626/2182/3566\nf 1668/3137/3567 1558/1251/3567 1545/1250/3567\nf 1482/3166/3568 1498/3167/3568 1522/3168/3568\nf 2829/3163/3569 1709/2836/3569 2826/1/3569\nf 2619/1427/3570 2829/3163/3570 2826/1/3570\nf 1507/1196/3571 35/1519/3571 2677/2326/3571\nf 870/2400/3572 3454/1301/3572 3480/1300/3572\nf 1632/3146/3573 1706/3169/3573 1554/3132/3573\nf 1554/3132/3574 1518/3170/3574 1660/3122/3574\nf 1516/2865/3575 1493/234/3575 1543/233/3575\nf 1623/2948/3576 1595/3041/3576 1562/3171/3576\nf 1596/2773/3577 1597/913/3577 1605/540/3577\nf 507/328/3578 3302/3172/3578 1670/3064/3578\nf 1518/3173/3579 1524/3099/3579 1670/3064/3579\nf 1569/3174/3580 1699/3136/3580 2048/322/3580\nf 1569/3174/3581 1649/3175/3581 1699/3136/3581\nf 1649/3175/3582 1713/2731/3582 1699/3136/3582\nf 2593/2977/3583 2594/361/3583 2607/363/3583\nf 1475/3176/3584 3196/3177/3584 1498/3167/3584\nf 1498/3167/3585 1538/3178/3585 1522/3168/3585\nf 1538/3162/3586 1548/2548/3586 1555/2316/3586\nf 1555/2316/3587 1548/2548/3587 1556/3179/3587\nf 1589/3180/3588 1843/2469/3588 1575/3181/3588\nf 1530/2859/3589 1540/3182/3589 1774/3183/3589\nf 2175/3184/3590 2409/3185/3590 2904/3186/3590\nf 2779/3187/3591 2564/3188/3591 2624/3013/3591\nf 1635/3145/3592 1706/3169/3592 1632/3146/3592\nf 1652/3147/3593 1660/3122/3593 1518/3170/3593\nf 2434/267/3594 2838/1635/3594 2711/1634/3594\nf 1530/2859/3595 1774/3183/3595 1504/2826/3595\nf 1626/2182/3596 1638/2598/3596 1637/2983/3596\nf 178/1320/3597 179/1345/3597 195/1336/3597\nf 1540/26/3598 1789/2707/3598 1774/3189/3598\nf 1916/3190/3599 1264/2747/3599 1673/2629/3599\nf 1721/2981/3600 1586/2903/3600 1610/2902/3600\nf 1589/3191/3601 1575/590/3601 1556/3179/3601\nf 1596/2773/3602 1843/2469/3602 1589/3180/3602\nf 2425/3192/3603 2436/2295/3603 3030/2297/3603\nf 2370/2558/3604 2175/3193/3604 2901/2556/3604\nf 1635/3145/3605 1541/3194/3605 1706/3169/3605\nf 83/918/3606 46/960/3606 1551/968/3606\nf 2697/2542/3607 3462/2345/3607 2524/2344/3607\nf 465/1110/3608 1664/1150/3608 452/1182/3608\nf 1424/228/3609 1673/2629/3609 1264/2747/3609\nf 1673/2629/3610 1992/2251/3610 1916/3190/3610\nf 1553/1119/3611 1583/1121/3611 1552/2958/3611\nf 1498/3195/3612 1523/3196/3612 1538/3197/3612\nf 1538/3162/3613 1523/3198/3613 1548/2548/3613\nf 1548/2548/3614 1557/3121/3614 1556/3179/3614\nf 1557/3199/3615 1589/3180/3615 1556/3200/3615\nf 2706/3201/3616 2719/3202/3616 2749/3057/3616\nf 184/3203/3617 2111/3204/3617 2896/3205/3617\nf 2466/3206/3618 2255/3207/3618 2455/3208/3618\nf 2615/287/3619 2416/2911/3619 2766/681/3619\nf 1572/2150/3620 1595/3072/3620 1635/3145/3620\nf 1706/3169/3621 1518/3170/3621 1554/3132/3621\nf 3206/3209/3622 601/1428/3622 3205/3210/3622\nf 2900/3211/3623 2335/1890/3623 2342/3212/3623\nf 3442/2587/3624 708/2360/3624 3447/982/3624\nf 2677/2326/3625 35/1519/3625 2619/1427/3625\nf 931/285/3626 1719/284/3626 1568/2215/3626\nf 2121/323/3627 1621/2375/3627 2119/2374/3627\nf 1677/3213/3628 1838/1038/3628 1805/1037/3628\nf 1546/2869/3629 1569/3174/3629 1927/2870/3629\nf 128/961/3630 1580/1010/3630 114/1040/3630\nf 1505/2858/3631 1504/2826/3631 1479/2179/3631\nf 1329/2726/3632 1649/3214/3632 282/217/3632\nf 2335/1890/3633 2900/3211/3633 1019/3215/3633\nf 1635/3145/3634 1595/3072/3634 1541/3194/3634\nf 2034/241/3635 1797/2986/3635 1570/242/3635\nf 2516/3216/3636 2523/3217/3636 2583/3218/3636\nf 1364/3219/3637 1648/3220/3637 1620/286/3637\nf 1608/3221/3638 1654/3222/3638 1620/286/3638\nf 1654/3222/3639 1719/284/3639 1620/286/3639\nf 1569/3174/3640 1563/3223/3640 1649/3175/3640\nf 1164/3224/3641 2500/1651/3641 1488/713/3641\nf 1609/2914/3642 149/2876/3642 148/1041/3642\nf 1593/2628/3643 1561/2252/3643 1673/2629/3643\nf 1673/2629/3644 1561/2252/3644 1992/2251/3644\nf 1820/2250/3645 1561/2252/3645 1604/2931/3645\nf 1513/2761/3646 1756/2478/3646 1548/2548/3646\nf 1523/3198/3647 1513/2761/3647 1548/2548/3647\nf 1676/3225/3648 592/3226/3648 1686/3227/3648\nf 2073/2710/3649 2837/2709/3649 2787/2867/3649\nf 1541/3194/3650 1655/3228/3650 1706/3169/3650\nf 1648/3220/3651 1608/3221/3651 1620/286/3651\nf 1719/284/3652 1590/3083/3652 1711/2216/3652\nf 1563/3223/3653 1569/3174/3653 1546/2869/3653\nf 1678/3123/3654 1563/3223/3654 1546/2869/3654\nf 1560/2938/3655 1570/242/3655 1692/2987/3655\nf 1615/1245/3656 1628/2853/3656 1642/2852/3656\nf 1629/3229/3657 1179/82/3657 3334/3152/3657\nf 1499/3230/3658 1523/3196/3658 1498/3195/3658\nf 1499/3231/3659 1513/2761/3659 1523/3198/3659\nf 1513/2761/3660 1757/2328/3660 1756/2478/3660\nf 1548/2548/3661 1764/2329/3661 1557/3121/3661\nf 2617/3143/3662 2616/3232/3662 2581/3103/3662\nf 2896/2462/3663 2882/2212/3663 1923/2461/3663\nf 1272/3052/3664 2096/382/3664 2857/384/3664\nf 1655/3228/3665 1524/3233/3665 1706/3169/3665\nf 1524/3099/3666 1518/3173/3666 1706/3234/3666\nf 2591/3020/3667 2818/3019/3667 2798/3235/3667\nf 3387/3236/3668 1608/3221/3668 1648/3220/3668\nf 1590/3083/3669 1690/3110/3669 1711/2216/3669\nf 1690/3110/3670 1546/2869/3670 1711/2216/3670\nf 1563/3040/3671 282/217/3671 1649/3214/3671\nf 1038/1356/3672 1055/926/3672 1045/405/3672\nf 1494/729/3673 1527/1139/3673 1493/234/3673\nf 1628/3153/3674 1616/1273/3674 109/1272/3674\nf 1499/3237/3675 1500/2669/3675 1513/3238/3675\nf 506/544/3676 262/666/3676 1514/2160/3676\nf 1557/3115/3677 1597/3117/3677 1589/3239/3677\nf 1589/3239/3678 1597/3117/3678 1596/3240/3678\nf 602/3241/3679 2813/3242/3679 2846/3243/3679\nf 2617/3143/3680 2621/1608/3680 2616/3232/3680\nf 1528/3244/3681 1524/3233/3681 1655/3228/3681\nf 1518/3170/3682 1670/3245/3682 1652/3147/3682\nf 1529/3086/3683 1535/3246/3683 1521/3062/3683\nf 1923/2461/3684 35/1519/3684 1507/1196/3684\nf 3046/293/3685 3045/2277/3685 2980/2936/3685\nf 215/2844/3686 2894/680/3686 2673/2319/3686\nf 1590/3083/3687 1719/284/3687 1654/3222/3687\nf 1690/3110/3688 1678/3123/3688 1546/2869/3688\nf 2096/382/3689 2161/1082/3689 1894/383/3689\nf 2142/3247/3690 2309/1132/3690 2248/1131/3690\nf 2384/3248/3691 2027/3249/3691 2815/3250/3691\nf 2142/3251/3692 2251/3252/3692 2167/3253/3692\nf 2309/3254/3693 2142/3251/3693 2167/3253/3693\nf 2222/3255/3694 2140/3256/3694 973/3257/3694\nf 1028/3037/3695 2060/3/3695 1833/3258/3695\nf 2167/3253/3696 2251/3252/3696 1888/3259/3696\nf 2723/653/3697 1928/678/3697 2643/677/3697\nf 2345/347/3698 2346/1274/3698 2380/3260/3698\nf 1272/3261/3699 1738/3262/3699 2096/2100/3699\nf 2651/2101/3700 2096/2100/3700 1738/3262/3700\nf 2147/3263/3701 2200/3264/3701 2220/2004/3701\nf 2380/3260/3702 2381/3265/3702 2401/3266/3702\nf 2228/3267/3703 2200/3264/3703 2147/3263/3703\nf 1738/3262/3704 1967/3268/3704 2651/2101/3704\nf 1429/247/3705 1099/3269/3705 1849/3270/3705\nf 1818/2303/3706 1839/2181/3706 1846/1200/3706\nf 1967/3268/3707 1926/3271/3707 1849/3272/3707\nf 1926/3273/3708 801/3274/3708 1429/247/3708\nf 1849/3270/3709 1926/3273/3709 1429/247/3709\nf 801/3274/3710 1428/3275/3710 1429/247/3710\nf 3499/1910/3711 3480/1300/3711 3424/1002/3711\nf 2108/3276/3712 1272/3261/3712 1898/2134/3712\nf 2108/3276/3713 1738/3262/3713 1272/3261/3713\nf 1428/3275/3714 1295/248/3714 1429/247/3714\nf 1226/2687/3715 1099/2781/3715 1232/182/3715\nf 2108/3276/3716 1967/3268/3716 1738/3262/3716\nf 801/3274/3717 1740/3277/3717 1428/3275/3717\nf 1740/3277/3718 1295/248/3718 1428/3275/3718\nf 2108/3276/3719 1938/3278/3719 1967/3268/3719\nf 1967/3268/3720 1726/3279/3720 1926/3271/3720\nf 1726/3279/3721 1803/3280/3721 1926/3271/3721\nf 1926/3271/3722 1803/3280/3722 801/3281/3722\nf 801/3282/3723 1803/3283/3723 1740/3284/3723\nf 1728/2660/3724 1647/2659/3724 1740/3285/3724\nf 1938/3278/3725 1726/3279/3725 1967/3268/3725\nf 1803/3286/3726 1739/3287/3726 1740/3277/3726\nf 1740/3285/3727 1739/3288/3727 1728/2660/3727\nf 3444/2043/3728 3448/1106/3728 3478/428/3728\nf 3502/837/3729 3503/1098/3729 3496/1097/3729\nf 1980/3289/3730 1982/3290/3730 2062/2136/3730\nf 1982/3290/3731 2108/3276/3731 2062/2136/3731\nf 1848/3291/3732 204/3292/3732 1739/3288/3732\nf 1803/3283/3733 1848/3293/3733 1739/3294/3733\nf 1739/3288/3734 204/3292/3734 1728/2660/3734\nf 2274/3295/3735 2454/845/3735 2191/3296/3735\nf 1726/3279/3736 1881/3297/3736 1803/3280/3736\nf 1803/3283/3737 1881/3298/3737 1848/3293/3737\nf 1872/1946/3738 1982/3290/3738 1980/3289/3738\nf 2108/3276/3739 1982/3290/3739 1938/3278/3739\nf 1938/3278/3740 2024/3299/3740 1726/3279/3740\nf 1881/3298/3741 1873/3300/3741 1848/3293/3741\nf 1873/3301/3742 1882/2677/3742 204/3292/3742\nf 1848/3291/3743 1873/3301/3743 204/3292/3743\nf 1683/2658/3744 204/3292/3744 1882/2677/3744\nf 1982/3290/3745 1182/3302/3745 1938/3278/3745\nf 1182/3302/3746 2024/3299/3746 1938/3278/3746\nf 2024/3299/3747 1881/3297/3747 1726/3279/3747\nf 1881/3298/3748 1947/3303/3748 1873/3300/3748\nf 2034/241/3749 1994/3304/3749 1797/2986/3749\nf 2024/3305/3750 1947/3303/3750 1881/3298/3750\nf 1946/3306/3751 1883/3307/3751 1873/3301/3751\nf 1947/3303/3752 1946/3308/3752 1873/3300/3752\nf 2024/3309/3753 1946/3310/3753 1947/3311/3753\nf 1946/3306/3754 1882/2677/3754 1883/3307/3754\nf 1838/1038/3755 2097/3312/3755 1872/1946/3755\nf 2097/3312/3756 1982/3290/3756 1872/1946/3756\nf 2024/3305/3757 2008/3313/3757 1946/3308/3757\nf 1915/3314/3758 1937/1103/3758 1882/2677/3758\nf 1946/3306/3759 1915/3314/3759 1882/2677/3759\nf 2097/3312/3760 1182/3302/3760 1982/3290/3760\nf 1182/3302/3761 1812/3315/3761 2024/3299/3761\nf 2024/3299/3762 1812/3315/3762 2008/3316/3762\nf 2008/3313/3763 1863/3317/3763 1946/3308/3763\nf 1946/3306/3764 1863/3318/3764 1915/3314/3764\nf 1371/2881/3765 2106/2748/3765 1565/1306/3765\nf 1736/2634/3766 1735/2218/3766 1501/2217/3766\nf 1810/1228/3767 1802/1363/3767 1811/1362/3767\nf 1870/3319/3768 2106/2748/3768 1937/1103/3768\nf 1883/3320/3769 1882/3321/3769 1873/3300/3769\nf 1871/2583/3770 1925/2214/3770 1003/3322/3770\nf 1847/3323/3771 1182/3302/3771 2097/3312/3771\nf 1812/3315/3772 1767/3324/3772 2008/3316/3772\nf 1863/3318/3773 1870/3319/3773 1915/3314/3773\nf 1870/3319/3774 1937/1103/3774 1915/3314/3774\nf 1787/1229/3775 1809/2623/3775 1801/2479/3775\nf 1484/3325/3776 1501/3326/3776 1483/3327/3776\nf 3455/2042/3777 3478/428/3777 1042/427/3777\nf 2357/3328/3778 2064/2209/3778 1990/3329/3778\nf 2363/3330/3779 2262/3331/3779 2378/3332/3779\nf 1758/2827/3780 1504/2826/3780 1774/3183/3780\nf 2820/3333/3781 966/3334/3781 2435/3335/3781\nf 1847/3323/3782 1812/3315/3782 1182/3302/3782\nf 1767/3336/3783 1737/3337/3783 2008/3313/3783\nf 1737/3338/3784 1870/3319/3784 1863/3318/3784\nf 2008/3313/3785 1737/3337/3785 1863/3317/3785\nf 2284/3339/3786 2211/3340/3786 2310/3341/3786\nf 2143/3342/3787 2197/1925/3787 1344/2639/3787\nf 1838/1038/3788 1847/3323/3788 2097/3312/3788\nf 1727/3343/3789 1906/47/3789 1461/46/3789\nf 1595/3072/3790 1572/2150/3790 3276/3070/3790\nf 2287/3344/3791 2248/3345/3791 2310/3341/3791\nf 1893/2093/3792 1154/364/3792 2084/2321/3792\nf 2084/2321/3793 1154/364/3793 2068/1846/3793\nf 1847/3323/3794 2023/3346/3794 1812/3315/3794\nf 1737/3338/3795 1775/3347/3795 1870/3319/3795\nf 2955/3348/3796 2948/2728/3796 2965/2730/3796\nf 2214/3349/3797 2383/3350/3797 2188/3351/3797\nf 1677/3213/3798 1936/2496/3798 1838/1038/3798\nf 1936/2496/3799 1847/3323/3799 1838/1038/3799\nf 2023/3346/3800 1984/3352/3800 1812/3315/3800\nf 1812/3315/3801 1984/3352/3801 1767/3324/3801\nf 1984/3353/3802 2072/3354/3802 1737/3337/3802\nf 1767/3336/3803 1984/3353/3803 1737/3337/3803\nf 1737/3338/3804 2072/3355/3804 1775/3347/3804\nf 2106/2748/3805 1870/3319/3805 1775/3347/3805\nf 2363/3330/3806 2379/3356/3806 2262/3331/3806\nf 2025/3357/3807 2787/2867/3807 2743/2866/3807\nf 2025/3358/3808 2053/3359/3808 2787/3360/3808\nf 2053/3359/3809 2073/3361/3809 2787/3360/3809\nf 2110/3362/3810 2880/3363/3810 2073/3361/3810\nf 3274/3364/3811 1864/3365/3811 1677/3366/3811\nf 1677/3213/3812 1864/2497/3812 1936/2496/3812\nf 1098/3367/3813 1847/3323/3813 1936/2496/3813\nf 2365/3368/3814 2386/3369/3814 2374/3370/3814\nf 2345/347/3815 1472/348/3815 2346/1274/3815\nf 2686/3371/3816 2633/3372/3816 1950/3373/3816\nf 2686/3374/3817 1998/3375/3817 1997/3376/3817\nf 2010/3377/3818 2053/3359/3818 2025/3358/3818\nf 2053/3359/3819 2089/3378/3819 2073/3361/3819\nf 2110/3362/3820 231/3379/3820 1145/3380/3820\nf 1507/1196/3821 2677/2326/3821 2153/1194/3821\nf 1098/3367/3822 2052/3381/3822 1847/3323/3822\nf 1847/3323/3823 2052/3381/3823 2023/3346/3823\nf 2072/3355/3824 1821/3382/3824 1775/3347/3824\nf 1775/3347/3825 1821/3382/3825 2106/2748/3825\nf 2132/3383/3826 2320/3384/3826 2312/3385/3826\nf 1929/3386/3827 1998/3375/3827 2686/3374/3827\nf 1950/3387/3828 1929/3386/3828 2686/3374/3828\nf 1997/3376/3829 1998/3375/3829 2025/3358/3829\nf 2025/3358/3830 1998/3375/3830 2010/3377/3830\nf 2089/3378/3831 2110/3362/3831 2073/3361/3831\nf 3057/1411/3832 3032/3388/3832 2998/2474/3832\nf 1984/3353/3833 2095/3389/3833 2072/3354/3833\nf 2095/3390/3834 1821/3382/3834 2072/3355/3834\nf 2035/3391/3835 2224/3392/3835 2141/770/3835\nf 1899/3393/3836 1929/3386/3836 1950/3387/3836\nf 2089/3378/3837 2111/3204/3837 2110/3362/3837\nf 1912/628/3838 1098/3367/3838 1936/2496/3838\nf 1966/3394/3839 2095/3389/3839 1984/3353/3839\nf 2023/3346/3840 1966/3395/3840 1984/3352/3840\nf 1821/3382/3841 1565/1306/3841 2106/2748/3841\nf 1555/2316/3842 1556/3179/3842 1785/589/3842\nf 2224/3392/3843 2035/3391/3843 2140/3256/3843\nf 2606/3396/3844 1885/3397/3844 1899/3398/3844\nf 1899/3393/3845 1917/3399/3845 1929/3386/3845\nf 1917/3399/3846 1930/3400/3846 1929/3386/3846\nf 1929/3386/3847 1951/3401/3847 1998/3375/3847\nf 1951/3401/3848 1999/3402/3848 1998/3375/3848\nf 1998/3375/3849 1999/3402/3849 2010/3377/3849\nf 1999/3402/3850 2054/3403/3850 2010/3377/3850\nf 2054/3403/3851 2074/3404/3851 2053/3359/3851\nf 2010/3377/3852 2054/3403/3852 2053/3359/3852\nf 2074/3404/3853 2089/3378/3853 2053/3359/3853\nf 243/2245/3854 767/3405/3854 1368/2889/3854\nf 1098/3367/3855 1983/3406/3855 2052/3381/3855\nf 2052/3381/3856 1966/3395/3856 2023/3346/3856\nf 1831/937/3857 1839/2181/3857 1818/2303/3857\nf 2222/3255/3858 2224/3392/3858 2140/3256/3858\nf 2262/3331/3859 2148/3407/3859 2358/1111/3859\nf 1856/3408/3860 1876/3409/3860 1885/3410/3860\nf 1876/3409/3861 1917/3399/3861 1885/3410/3861\nf 1885/3410/3862 1917/3399/3862 1899/3393/3862\nf 1930/3400/3863 1951/3401/3863 1929/3386/3863\nf 2111/3204/3864 2089/3378/3864 2074/3404/3864\nf 350/3411/3865 231/3379/3865 2110/3362/3865\nf 2111/3204/3866 350/3411/3866 2110/3362/3866\nf 349/3412/3867 2153/3413/3867 231/3414/3867\nf 767/1235/3868 1367/3415/3868 1368/3416/3868\nf 1983/3406/3869 1098/3367/3869 1912/628/3869\nf 1204/163/3870 1349/3417/3870 1707/3105/3870\nf 2358/1111/3871 973/3418/3871 2392/3419/3871\nf 2148/3407/3872 973/3418/3872 2358/1111/3872\nf 1999/3402/3873 2000/3420/3873 2054/3403/3873\nf 2099/3421/3874 2111/3204/3874 2074/3404/3874\nf 2075/3422/3875 2099/3421/3875 2074/3404/3875\nf 349/3423/3876 231/3379/3876 350/3411/3876\nf 1755/3424/3877 1912/628/3877 1631/627/3877\nf 1755/3424/3878 1983/3406/3878 1912/628/3878\nf 1983/3406/3879 2127/3425/3879 2052/3381/3879\nf 2052/3381/3880 2127/3425/3880 1966/3395/3880\nf 2095/3390/3881 1745/3426/3881 1821/3382/3881\nf 1745/3426/3882 14/1912/3882 1565/1306/3882\nf 1821/3382/3883 1745/3426/3883 1565/1306/3883\nf 2689/1201/3884 2688/1203/3884 2687/1417/3884\nf 440/2705/3885 1313/697/3885 439/1377/3885\nf 1864/3365/3886 3274/3364/3886 1531/3427/3886\nf 531/385/3887 3275/3428/3887 3222/367/3887\nf 1787/1229/3888 1801/2479/3888 1765/2630/3888\nf 2232/3429/3889 2147/3430/3889 2387/3431/3889\nf 1940/3432/3890 1985/3433/3890 1951/3401/3890\nf 1930/3400/3891 1940/3432/3891 1951/3401/3891\nf 1951/3401/3892 2001/3434/3892 1999/3402/3892\nf 1999/3402/3893 2001/3434/3893 2000/3420/3893\nf 2000/3420/3894 2075/3422/3894 2054/3403/3894\nf 2054/3403/3895 2075/3422/3895 2074/3404/3895\nf 350/3411/3896 2111/3204/3896 184/3203/3896\nf 1631/627/3897 1448/3435/3897 1755/3424/3897\nf 1966/3394/3898 2009/3436/3898 2095/3389/3898\nf 2009/3437/3899 1745/3426/3899 2095/3390/3899\nf 1579/2522/3900 2058/2158/3900 2045/2155/3900\nf 500/1263/3901 1668/1262/3901 1545/1310/3901\nf 2200/3264/3902 2203/162/3902 2220/2004/3902\nf 2220/2004/3903 2203/162/3903 2382/2005/3903\nf 1830/781/3904 3464/20/3904 1197/3438/3904\nf 2912/3439/3905 1748/3440/3905 2319/3441/3905\nf 1748/3440/3906 1741/3442/3906 2319/3441/3906\nf 1748/3440/3907 2233/3443/3907 1741/3442/3907\nf 2382/3444/3908 2203/3445/3908 2250/2407/3908\nf 1857/3446/3909 1877/3447/3909 1876/3409/3909\nf 1856/3408/3910 1857/3446/3910 1876/3409/3910\nf 1917/3399/3911 1900/3448/3911 1930/3400/3911\nf 1951/3401/3912 1985/3433/3912 2001/3434/3912\nf 2001/3434/3913 2011/3449/3913 2000/3420/3913\nf 1843/2469/3914 1596/2773/3914 1854/542/3914\nf 1532/3450/3915 46/960/3915 37/959/3915\nf 1768/3451/3916 2233/3443/3916 1748/3440/3916\nf 1768/3451/3917 2276/3452/3917 2233/3443/3917\nf 1160/1611/3918 453/1948/3918 384/1609/3918\nf 1768/3451/3919 1778/3453/3919 2276/3452/3919\nf 1876/3409/3920 1877/3447/3920 1917/3399/3920\nf 1900/3448/3921 1940/3432/3921 1930/3400/3921\nf 2036/3454/3922 2075/3422/3922 2000/3420/3922\nf 2075/3455/3923 2882/2212/3923 2099/3456/3923\nf 3189/1637/3924 3188/3457/3924 3152/1638/3924\nf 2308/3458/3925 2244/3459/3925 2185/3460/3925\nf 1579/2522/3926 1349/3417/3926 2066/2523/3926\nf 1722/3157/3927 1768/3451/3927 1748/3440/3927\nf 1807/2302/3928 2087/822/3928 1288/2233/3928\nf 1917/3399/3929 1877/3447/3929 1900/3448/3929\nf 1877/3447/3930 1918/3461/3930 1900/3448/3930\nf 1900/3448/3931 1952/3462/3931 1940/3432/3931\nf 1940/3432/3932 1952/3462/3932 1985/3433/3932\nf 1985/3433/3933 2002/3463/3933 2001/3434/3933\nf 2001/3434/3934 2002/3463/3934 2011/3449/3934\nf 2011/3449/3935 2036/3454/3935 2000/3420/3935\nf 2075/3422/3936 2867/3464/3936 2882/3465/3936\nf 229/2463/3937 163/2652/3937 1116/2276/3937\nf 2908/3466/3938 2306/3467/3938 2406/3468/3938\nf 1983/3406/3939 2086/3469/3939 2127/3425/3939\nf 2086/3470/3940 1776/3471/3940 1966/3394/3940\nf 2127/3425/3941 2086/3469/3941 1966/3395/3941\nf 1966/3394/3942 1776/3471/3942 2009/3436/3942\nf 1776/3472/3943 1745/3426/3943 2009/3437/3943\nf 2389/3473/3944 2399/3474/3944 2235/3475/3944\nf 1888/3476/3945 2307/2426/3945 2167/3477/3945\nf 1056/3478/3946 1141/101/3946 561/2361/3946\nf 2930/3155/3947 1722/3157/3947 2912/3439/3947\nf 1729/3479/3948 1768/3480/3948 1722/3481/3948\nf 1729/3479/3949 1779/3482/3949 1768/3480/3949\nf 1779/3482/3950 1778/3483/3950 1768/3480/3950\nf 1835/1867/3951 1857/3446/3951 1834/1865/3951\nf 1835/1867/3952 1850/3484/3952 1857/3446/3952\nf 1857/3446/3953 1850/3484/3953 1877/3447/3953\nf 2026/3160/3954 2841/3159/3954 2036/3454/3954\nf 2011/3449/3955 2026/3160/3955 2036/3454/3955\nf 2362/3485/3956 2284/3339/3956 2199/3486/3956\nf 3236/1114/3957 1964/3487/3957 1448/3488/3957\nf 1448/3435/3958 2022/3489/3958 1755/3424/3958\nf 2022/3489/3959 1754/3490/3959 1755/3424/3959\nf 1754/3490/3960 1983/3406/3960 1755/3424/3960\nf 1754/3490/3961 2086/3469/3961 1983/3406/3961\nf 1955/3491/3962 1941/3492/3962 1956/3493/3962\nf 188/3494/3963 2145/3495/3963 1939/3496/3963\nf 1723/3156/3964 1730/3497/3964 1722/3157/3964\nf 1730/3497/3965 1729/3498/3965 1722/3157/3965\nf 1749/3499/3966 1779/3500/3966 1729/3498/3966\nf 1824/3501/3967 1835/3502/3967 1813/2561/3967\nf 1814/2201/3968 1824/3501/3968 1813/2561/3968\nf 1824/3503/3969 1836/3504/3969 1835/1867/3969\nf 1835/1867/3970 1836/3504/3970 1850/3484/3970\nf 1900/3448/3971 1918/3461/3971 1952/3462/3971\nf 1985/3433/3972 1952/3462/3972 2002/3463/3972\nf 2775/3505/3973 2026/3160/3973 2002/3463/3973\nf 2002/3463/3974 2026/3160/3974 2011/3449/3974\nf 2775/3505/3975 2809/3158/3975 2026/3160/3975\nf 1724/408/3976 2018/2631/3976 1137/2195/3976\nf 2018/2631/3977 1879/1574/3977 1137/2195/3977\nf 1776/3472/3978 557/3506/3978 1745/3426/3978\nf 1745/3426/3979 1714/1913/3979 14/1912/3979\nf 982/259/3980 1327/2832/3980 1131/2232/3980\nf 2300/3507/3981 1145/3508/3981 231/3414/3981\nf 1865/3509/3982 188/3494/3982 1939/3496/3982\nf 2908/3510/3983 2907/2457/3983 2413/3511/3983\nf 1730/3497/3984 1749/3499/3984 1729/3498/3984\nf 1324/2034/3985 232/2161/3985 1460/2035/3985\nf 1919/3512/3986 1931/2235/3986 1952/3462/3986\nf 1918/3461/3987 1919/3512/3987 1952/3462/3987\nf 1952/3462/3988 1931/2235/3988 2002/3463/3988\nf 2339/2433/3989 2179/3513/3989 2328/2459/3989\nf 2017/2157/3990 2044/2156/3990 3182/562/3990\nf 1159/2291/3991 1925/2214/3991 1871/2583/3991\nf 2370/2558/3992 2903/2557/3992 2342/3212/3992\nf 1964/2128/3993 2105/3514/3993 1448/3435/3993\nf 1448/3435/3994 2105/3514/3994 2022/3489/3994\nf 3273/3515/3995 1629/3229/3995 3334/3152/3995\nf 1136/3516/3996 1333/3517/3996 1350/3097/3996\nf 1875/2973/3997 188/3518/3997 1865/2971/3997\nf 1750/3519/3998 1749/3499/3998 1730/3497/3998\nf 1749/3520/3999 1804/725/3999 1779/727/3999\nf 1825/3521/4000 1824/3501/4000 1814/2201/4000\nf 1825/3521/4001 1836/3522/4001 1824/3501/4001\nf 1836/3504/4002 1840/3523/4002 1850/3484/4002\nf 1850/3484/4003 1878/3524/4003 1877/3447/4003\nf 1877/3447/4004 1878/3524/4004 1918/3461/4004\nf 1931/2235/4005 2703/3525/4005 2002/3463/4005\nf 2351/3526/4006 2465/2145/4006 2481/2144/4006\nf 1736/2634/4007 1744/2473/4007 1735/2218/4007\nf 1765/2630/4008 1772/1046/4008 1744/2477/4008\nf 3483/1780/4009 453/1781/4009 3432/2531/4009\nf 1765/2630/4010 1801/2479/4010 1772/1046/4010\nf 1801/2479/4011 1809/2623/4011 1808/1135/4011\nf 1809/2304/4012 1818/2303/4012 1808/1147/4012\nf 3469/782/4013 1174/3527/4013 2007/2766/4013\nf 2086/3470/4014 2125/3528/4014 1776/3471/4014\nf 1776/3472/4015 2125/3529/4015 557/3506/4015\nf 557/3506/4016 1961/2924/4016 1745/3426/4016\nf 3136/3530/4017 47/99/4017 1056/3478/4017\nf 1141/101/4018 1159/2291/4018 1309/2582/4018\nf 1742/3531/4019 1730/3497/4019 2949/3532/4019\nf 2930/3155/4020 2949/3532/4020 1723/3156/4020\nf 1742/3531/4021 1750/3519/4021 1730/3497/4021\nf 1791/3533/4022 1804/3534/4022 1749/3499/4022\nf 1869/59/4023 1893/2093/4023 1862/174/4023\nf 1850/3484/4024 1840/3523/4024 1878/3524/4024\nf 1918/3461/4025 1878/3524/4025 1919/3512/4025\nf 2703/3525/4026 1969/3535/4026 2002/3463/4026\nf 2221/2313/4027 2142/3247/4027 2248/1131/4027\nf 1575/590/4028 1785/589/4028 1556/3179/4028\nf 1905/2500/4029 1188/1575/4029 1003/3322/4029\nf 2063/3536/4030 1754/3490/4030 2022/3489/4030\nf 2063/3536/4031 2050/3537/4031 1754/3490/4031\nf 2050/3538/4032 2125/3528/4032 2086/3470/4032\nf 1754/3490/4033 2050/3537/4033 2086/3469/4033\nf 1826/3539/4034 1814/2201/4034 1827/1513/4034\nf 2688/1203/4035 2703/3540/4035 2687/1417/4035\nf 2669/857/4036 2754/705/4036 3428/759/4036\nf 1791/3533/4037 1749/3499/4037 1750/3519/4037\nf 1826/3539/4038 1825/3521/4038 1814/2201/4038\nf 2294/2202/4039 1814/2201/4039 1804/725/4039\nf 1837/3541/4040 1836/3522/4040 1825/3521/4040\nf 1826/3542/4041 1837/3543/4041 1825/3544/4041\nf 1837/3543/4042 1840/3523/4042 1836/3504/4042\nf 2482/2327/4043 2817/1426/4043 2816/2069/4043\nf 1128/1576/4044 2121/323/4044 2119/2374/4044\nf 1160/3545/4045 3432/2531/4045 453/1781/4045\nf 2087/822/4046 1989/1213/4046 1288/2233/4046\nf 1884/3546/4047 188/3494/4047 1875/3547/4047\nf 1884/3546/4048 1336/3548/4048 188/3494/4048\nf 2949/3532/4049 1731/3549/4049 1742/3531/4049\nf 3141/2833/4050 3189/1637/4050 3140/1218/4050\nf 1840/3523/4051 1858/3550/4051 1878/3524/4051\nf 1886/3551/4052 1908/2236/4052 1919/3512/4052\nf 1878/3524/4053 1886/3551/4053 1919/3512/4053\nf 1919/3512/4054 1908/2236/4054 1931/2235/4054\nf 2401/3266/4055 2172/3552/4055 973/3418/4055\nf 2259/3553/4056 2895/3554/4056 2368/3555/4056\nf 1602/41/4057 3334/3152/4057 1179/82/4057\nf 1056/3478/4058 47/99/4058 1141/101/4058\nf 1758/2827/4059 1773/2635/4059 1503/2996/4059\nf 1733/1047/4060 1770/1090/4060 1757/2328/4060\nf 1629/3229/4061 1122/2343/4061 1179/82/4061\nf 1629/3229/4062 1269/2342/4062 1122/2343/4062\nf 1629/3229/4063 3407/3556/4063 1269/2342/4063\nf 2656/805/4064 2668/807/4064 2655/3557/4064\nf 1964/2128/4065 1363/3558/4065 2105/3514/4065\nf 2126/3559/4066 2022/3489/4066 2105/3514/4066\nf 2022/3489/4067 2126/3559/4067 2063/3536/4067\nf 2063/3536/4068 2094/3560/4068 2125/3529/4068\nf 2050/3538/4069 2063/3561/4069 2125/3528/4069\nf 2125/3529/4070 2094/3560/4070 557/3506/4070\nf 557/3506/4071 1895/243/4071 1961/2924/4071\nf 1520/3029/4072 1753/3063/4072 1743/3087/4072\nf 1736/2634/4073 1501/2217/4073 1502/2420/4073\nf 1751/3562/4074 1750/3519/4074 1742/3531/4074\nf 1751/3562/4075 1780/3563/4075 1750/3519/4075\nf 1780/3563/4076 1791/3533/4076 1750/3519/4076\nf 1827/1513/4077 1837/3541/4077 1826/3539/4077\nf 1841/3564/4078 1840/3523/4078 1837/3543/4078\nf 1840/3523/4079 1841/3564/4079 1858/3550/4079\nf 1858/3550/4080 1866/2422/4080 1878/3524/4080\nf 1878/3524/4081 1866/2422/4081 1886/3551/4081\nf 1764/2329/4082 1786/2441/4082 1567/3120/4082\nf 1800/1148/4083 1817/177/4083 1799/176/4083\nf 1799/176/4084 1798/912/4084 1786/2322/4084\nf 2868/2529/4085 2898/2211/4085 2867/2213/4085\nf 1363/3558/4086 2126/3559/4086 2105/3514/4086\nf 1895/243/4087 1588/2925/4087 1961/2924/4087\nf 1948/2825/4088 1875/3547/4088 2144/3565/4088\nf 1948/2825/4089 1884/3546/4089 1875/3547/4089\nf 1369/2824/4090 1336/3548/4090 1884/3546/4090\nf 2407/3566/4091 2907/2457/4091 2906/2458/4091\nf 2949/3532/4092 2446/3567/4092 1731/3549/4092\nf 1141/101/4093 1309/2582/4093 1325/199/4093\nf 1842/3568/4094 1837/3541/4094 1827/1513/4094\nf 1842/220/4095 1841/3564/4095 1837/3543/4095\nf 1886/3569/4096 1901/3570/4096 1908/1418/4096\nf 2283/3571/4097 2337/3572/4097 2368/3555/4097\nf 2155/3573/4098 2271/3574/4098 2391/3575/4098\nf 1798/912/4099 1799/176/4099 1844/2371/4099\nf 1989/1213/4100 1311/2186/4100 2031/2185/4100\nf 1846/1200/4101 1619/2365/4101 1845/178/4101\nf 57/1367/4102 2061/2696/4102 1296/2577/4102\nf 3471/3576/4103 1323/3577/4103 1363/3558/4103\nf 1895/243/4104 557/3506/4104 2094/3560/4104\nf 1807/2302/4105 2067/708/4105 2087/822/4105\nf 2068/1846/4106 2067/708/4106 1807/2302/4106\nf 1977/2720/4107 1958/232/4107 2724/1977/4107\nf 1369/2824/4108 1884/3546/4108 1948/2825/4108\nf 727/352/4109 726/485/4109 492/276/4109\nf 1751/3562/4110 1742/3531/4110 1731/3549/4110\nf 1792/3578/4111 1791/3533/4111 1780/3563/4111\nf 1842/220/4112 1866/2422/4112 1858/3550/4112\nf 1841/3564/4113 1842/220/4113 1858/3550/4113\nf 2574/222/4114 2581/2423/4114 1842/220/4114\nf 1866/2422/4115 2616/2421/4115 1886/3551/4115\nf 1886/3551/4116 2616/2421/4116 1901/3579/4116\nf 2337/3572/4117 2259/3553/4117 2368/3555/4117\nf 1961/2924/4118 1714/1913/4118 1745/3426/4118\nf 2212/3580/4119 2368/3555/4119 1048/3581/4119\nf 2916/851/4120 2915/3582/4120 2906/2458/4120\nf 2274/3295/4121 2247/3583/4121 2350/3584/4121\nf 1170/2162/4122 1078/6/4122 1460/2035/4122\nf 1288/2233/4123 1989/1213/4123 2031/2185/4123\nf 1893/3585/4124 2084/3586/4124 2085/3587/4124\nf 3456/400/4125 2007/2766/4125 1323/3048/4125\nf 1280/3588/4126 2063/3536/4126 2126/3559/4126\nf 2098/3589/4127 1280/3588/4127 2126/3559/4127\nf 2063/3536/4128 1280/3588/4128 2094/3560/4128\nf 1416/3590/4129 1948/2825/4129 2144/3565/4129\nf 2048/322/4130 2069/321/4130 1569/3174/4130\nf 2183/1718/4131 2347/1956/4131 214/1716/4131\nf 2226/3591/4132 2131/3592/4132 2338/3593/4132\nf 3025/3594/4133 3011/3595/4133 3049/3596/4133\nf 2055/3597/4134 2078/3598/4134 2077/3599/4134\nf 2078/3600/4135 4/3601/4135 2112/3602/4135\nf 232/2161/4136 1170/2162/4136 1460/2035/4136\nf 1078/6/4137 1170/2162/4137 1095/4/4137\nf 2100/2172/4138 1158/2171/4138 1286/2338/4138\nf 1128/1576/4139 2119/2374/4139 2104/592/4139\nf 1012/2222/4140 991/2378/4140 3468/2223/4140\nf 1323/3577/4141 2123/3603/4141 1363/3558/4141\nf 2123/3603/4142 1051/3604/4142 2126/3559/4142\nf 1363/3558/4143 2123/3603/4143 2126/3559/4143\nf 2126/3559/4144 1051/3604/4144 2098/3589/4144\nf 1280/3588/4145 2034/241/4145 2094/3560/4145\nf 2034/241/4146 1895/243/4146 2094/3560/4146\nf 1277/100/4147 1364/3219/4147 931/285/4147\nf 1879/1574/4148 1128/1576/4148 2104/592/4148\nf 2067/708/4149 2068/1846/4149 2047/593/4149\nf 1393/2244/4150 1948/3605/4150 1416/61/4150\nf 2552/1854/4151 1023/1856/4151 2544/3606/4151\nf 1320/2686/4152 1236/2685/4152 1593/2628/4152\nf 1027/3127/4153 3441/870/4153 1111/3607/4153\nf 4/3608/4154 1190/3609/4154 1307/3610/4154\nf 1190/3611/4155 130/2032/4155 1307/2031/4155\nf 2548/271/4156 3450/1786/4156 3449/3612/4156\nf 2252/2505/4157 2165/3613/4157 2131/3614/4157\nf 2058/2158/4158 2066/2523/4158 2057/219/4158\nf 2058/2158/4159 2057/219/4159 2044/2156/4159\nf 2897/2566/4160 1923/2461/4160 2882/2212/4160\nf 2007/3615/4161 1174/3616/4161 1323/3577/4161\nf 1323/3577/4162 1174/3616/4162 2123/3603/4162\nf 1280/3588/4163 2098/3589/4163 2034/241/4163\nf 1988/272/4164 1968/2750/4164 1284/1909/4164\nf 602/3241/4165 2887/250/4165 2813/3242/4165\nf 1766/57/4166 1762/407/4166 1981/58/4166\nf 2781/3617/4167 2090/3618/4167 2144/3565/4167\nf 2090/2173/4168 1416/61/4168 2144/3619/4168\nf 1418/63/4169 1393/2244/4169 1416/61/4169\nf 1349/3417/4170 2117/306/4170 2066/2523/4170\nf 2322/2003/4171 2266/3620/4171 2254/3621/4171\nf 2055/3597/4172 2037/3622/4172 2078/3598/4172\nf 2030/87/4173 2042/89/4173 2041/1016/4173\nf 1324/2034/4174 1459/40/4174 232/2161/4174\nf 1534/3131/4175 2897/2566/4175 2898/2211/4175\nf 1535/3246/4176 1753/3063/4176 1521/3062/4176\nf 1326/2758/4177 1364/3219/4177 1277/100/4177\nf 30/2724/4178 2170/2723/4178 1227/28/4178\nf 3213/2206/4179 3279/106/4179 3227/2262/4179\nf 2090/2173/4180 1433/62/4180 1416/61/4180\nf 1122/2343/4181 1178/1662/4181 1179/82/4181\nf 1215/421/4182 1995/2188/4182 1762/407/4182\nf 1319/200/4183 1995/2188/4183 1215/421/4183\nf 561/2361/4184 158/80/4184 1806/79/4184\nf 1575/3181/4185 1843/2469/4185 1816/2471/4185\nf 2381/3265/4186 2172/3552/4186 2401/3266/4186\nf 2167/3477/4187 2244/3623/4187 2309/1132/4187\nf 2003/2490/4188 2190/2489/4188 2247/3583/4188\nf 2037/3622/4189 2113/3624/4189 2078/3598/4189\nf 2078/3598/4190 2113/3624/4190 4/3608/4190\nf 1052/3625/4191 130/3626/4191 1190/3609/4191\nf 2575/3627/4192 130/2032/4192 1430/3628/4192\nf 2061/2696/4193 1713/2980/4193 290/496/4193\nf 1719/284/4194 1711/2216/4194 1568/2215/4194\nf 2768/3629/4195 1980/3289/4195 2062/2136/4195\nf 1927/2870/4196 1569/3174/4196 2069/321/4196\nf 1003/3322/4197 1188/1575/4197 2018/2631/4197\nf 2066/2523/4198 2083/820/4198 2057/219/4198\nf 2117/306/4199 1349/3417/4199 1204/163/4199\nf 2204/3630/4200 2147/3263/4200 2322/2003/4200\nf 3173/310/4201 3212/2167/4201 3189/1637/4201\nf 2390/2830/4202 1970/3631/4202 1362/1261/4202\nf 2370/2558/4203 2342/3212/4203 2246/2036/4203\nf 2304/3632/4204 2281/3633/4204 2076/3634/4204\nf 2168/695/4205 2169/3635/4205 2340/3636/4205\nf 2204/3630/4206 2322/2003/4206 2254/3621/4206\nf 2167/3477/4207 2610/3637/4207 2244/3623/4207\nf 2179/3638/4208 2132/3383/4208 2245/3639/4208\nf 2610/3637/4209 1954/3640/4209 2244/3623/4209\nf 2055/3641/4210 2854/3077/4210 2037/3642/4210\nf 2037/3622/4211 2038/3643/4211 2113/3624/4211\nf 2113/3644/4212 2114/3645/4212 4/3601/4212\nf 4/3608/4213 2114/3646/4213 1190/3609/4213\nf 1052/3625/4214 1430/3647/4214 130/3626/4214\nf 2389/3473/4215 2235/3475/4215 1823/3648/4215\nf 973/3418/4216 2172/3552/4216 2222/3649/4216\nf 2041/1016/4217 2065/821/4217 2082/307/4217\nf 1215/421/4218 1088/111/4218 1041/420/4218\nf 1579/2522/4219 1707/3105/4219 1349/3417/4219\nf 2502/3650/4220 2522/3651/4220 1792/3652/4220\nf 1830/3653/4221 2123/3603/4221 1174/3616/4221\nf 1135/3654/4222 1763/3655/4222 1051/3604/4222\nf 2123/3603/4223 1135/3654/4223 1051/3604/4223\nf 1763/3655/4224 2098/3589/4224 1051/3604/4224\nf 1763/3655/4225 1994/3304/4225 2034/241/4225\nf 2098/3589/4226 1763/3655/4226 2034/241/4226\nf 931/285/4227 1568/2215/4227 1159/2291/4227\nf 1122/2343/4228 1415/1660/4228 1178/1662/4228\nf 1324/2034/4229 1707/3105/4229 1459/40/4229\nf 232/2161/4230 1459/40/4230 1138/42/4230\nf 2166/3656/4231 1880/3657/4231 2232/3429/4231\nf 2872/843/4232 2315/3658/4232 2158/1442/4232\nf 2252/2505/4233 1833/3258/4233 2165/3613/4233\nf 2502/3659/4234 1792/3578/4234 1780/3563/4234\nf 2111/3204/4235 2099/3421/4235 2896/3205/4235\nf 3402/3139/4236 3401/3140/4236 3370/685/4236\nf 2854/3660/4237 2038/3643/4237 2037/3622/4237\nf 2113/3644/4238 2091/3661/4238 2114/3645/4238\nf 2114/3646/4239 2130/3662/4239 1190/3609/4239\nf 1359/2166/4240 1444/1844/4240 823/142/4240\nf 1395/2644/4241 1040/2153/4241 1112/2152/4241\nf 2309/1132/4242 2244/3623/4242 2297/1133/4242\nf 2348/3663/4243 2224/3392/4243 2222/3255/4243\nf 1830/3653/4244 2070/3664/4244 2123/3603/4244\nf 2070/3664/4245 1135/3654/4245 2123/3603/4245\nf 1759/3665/4246 1604/2931/4246 1896/2159/4246\nf 1707/3105/4247 1324/2034/4247 1204/163/4247\nf 1874/2713/4248 1903/2919/4248 1598/2991/4248\nf 1727/3666/4249 515/3667/4249 1903/3668/4249\nf 1871/2583/4250 1003/3322/4250 2018/2631/4250\nf 1158/201/4251 1747/81/4251 1286/2340/4251\nf 33/446/4252 3350/3669/4252 3332/1653/4252\nf 2595/3670/4253 1851/3671/4253 2655/3672/4253\nf 1851/3671/4254 1867/3673/4254 2638/3674/4254\nf 2655/3672/4255 1851/3671/4255 2638/3674/4255\nf 1577/1955/4256 1811/1362/4256 1653/776/4256\nf 2003/2490/4257 2247/3583/4257 2274/3295/4257\nf 2763/3675/4258 2814/3076/4258 2796/3078/4258\nf 1052/3625/4259 1190/3609/4259 2130/3662/4259\nf 2998/2474/4260 3032/3388/4260 3033/67/4260\nf 3057/1411/4261 3080/3676/4261 3032/3388/4261\nf 2340/3677/4262 2169/3678/4262 2386/3369/4262\nf 2266/3679/4263 2285/2534/4263 2254/2536/4263\nf 2165/3613/4264 1833/3258/4264 2535/2/4264\nf 2711/1634/4265 2019/1636/4265 1830/1936/4265\nf 2019/3680/4266 2070/3664/4266 1830/3653/4266\nf 1773/2169/4267 1787/1229/4267 1765/2630/4267\nf 515/2174/4268 1727/3343/4268 1461/46/4268\nf 1905/2500/4269 1003/3322/4269 1925/2214/4269\nf 1904/3681/4270 1903/3668/4270 1874/3682/4270\nf 1904/3681/4271 1727/3666/4271 1903/3668/4271\nf 2288/3683/4272 2243/3684/4272 2312/3385/4272\nf 2321/3685/4273 1833/3686/4273 2252/3687/4273\nf 1955/3491/4274 1956/3493/4274 2763/3688/4274\nf 2814/3689/4275 2013/3690/4275 2854/3660/4275\nf 2013/3690/4276 2039/3691/4276 2038/3643/4276\nf 2854/3660/4277 2013/3690/4277 2038/3643/4277\nf 2039/3692/4278 2091/3661/4278 2113/3644/4278\nf 2038/3643/4279 2039/3691/4279 2113/3624/4279\nf 2114/3646/4280 1306/3693/4280 2130/3662/4280\nf 1333/3517/4281 1136/3516/4281 2109/3694/4281\nf 2347/1956/4282 2183/1718/4282 2268/2504/4282\nf 2366/3695/4283 2308/3458/4283 2213/3696/4283\nf 2225/2418/4284 2360/2417/4284 2357/3328/4284\nf 1130/2675/4285 2375/3697/4285 2217/3698/4285\nf 2070/3664/4286 2020/3699/4286 1135/3654/4286\nf 1945/3700/4287 1763/3655/4287 1135/3654/4287\nf 1945/3700/4288 1797/2986/4288 1994/3304/4288\nf 1763/3655/4289 1945/3700/4289 1994/3304/4289\nf 1159/2291/4290 1871/2583/4290 1309/2582/4290\nf 1965/3701/4291 1904/3681/4291 1874/3682/4291\nf 1906/47/4292 1727/3343/4292 1904/3138/4292\nf 1781/3702/4293 1829/3703/4293 2503/3704/4293\nf 2595/3705/4294 1829/3706/4294 1851/3707/4294\nf 1956/3493/4295 1971/3708/4295 2763/3688/4295\nf 2763/3709/4296 1971/3710/4296 2814/3689/4296\nf 2013/3690/4297 2028/3711/4297 2039/3691/4297\nf 1306/3693/4298 1177/3712/4298 2130/3662/4298\nf 1177/3712/4299 1052/3625/4299 2130/3662/4299\nf 1177/3712/4300 1186/3713/4300 1052/3625/4300\nf 1186/3713/4301 1430/3647/4301 1052/3625/4301\nf 984/3714/4302 1333/3517/4302 2109/3694/4302\nf 2415/3148/4303 2175/3193/4303 2370/2558/4303\nf 2331/10/4304 2362/3485/4304 2399/3474/4304\nf 2020/3699/4305 2070/3664/4305 2019/3680/4305\nf 2020/3699/4306 2032/3715/4306 1135/3654/4306\nf 2124/3716/4307 1797/2986/4307 1945/3700/4307\nf 2051/3717/4308 1874/3682/4308 2173/3718/4308\nf 2051/3717/4309 1965/3701/4309 1874/3682/4309\nf 1896/2159/4310 1904/3138/4310 1965/3719/4310\nf 1024/3720/4311 2320/3384/4311 2377/3721/4311\nf 1760/3722/4312 1781/3723/4312 2256/3724/4312\nf 1782/3725/4313 1781/3726/4313 1760/3727/4313\nf 2228/3728/4314 2232/3429/4314 2330/3729/4314\nf 2722/3730/4315 1942/3731/4315 1941/3492/4315\nf 1942/3731/4316 1962/3732/4316 1956/3493/4316\nf 1941/3492/4317 1942/3731/4317 1956/3493/4317\nf 1956/3493/4318 1962/3732/4318 1971/3708/4318\nf 1971/3710/4319 1972/3733/4319 2814/3689/4319\nf 2814/3689/4320 1972/3733/4320 2013/3690/4320\nf 2028/3711/4321 2079/3734/4321 2039/3691/4321\nf 2079/3734/4322 2092/3735/4322 2091/3736/4322\nf 2039/3691/4323 2079/3734/4323 2091/3736/4323\nf 2092/3735/4324 1306/3693/4324 2114/3646/4324\nf 2091/3736/4325 2092/3735/4325 2114/3646/4325\nf 1907/3737/4326 2389/3473/4326 1823/3648/4326\nf 2398/2756/4327 2389/3473/4327 1907/3737/4327\nf 3307/3738/4328 3215/3739/4328 3281/3740/4328\nf 2204/3741/4329 1024/2330/4329 2151/3742/4329\nf 2387/3431/4330 2204/3741/4330 2151/3742/4330\nf 2960/3049/4331 2952/69/4331 2944/3743/4331\nf 2019/1636/4332 1819/3744/4332 2020/3745/4332\nf 2032/3746/4333 2020/3745/4333 1819/3744/4333\nf 2032/3715/4334 1944/3747/4334 1135/3654/4334\nf 1944/3747/4335 2124/3716/4335 1945/3700/4335\nf 1135/3654/4336 1944/3747/4336 1945/3700/4336\nf 1797/2986/4337 2124/3716/4337 1606/2985/4337\nf 2868/2529/4338 2867/2213/4338 2841/1416/4338\nf 2330/3729/4339 2198/844/4339 2228/3728/4339\nf 2228/3267/4340 2198/160/4340 2200/3264/4340\nf 1752/3748/4341 1760/3727/4341 2255/3749/4341\nf 2041/1016/4342 2042/89/4342 2065/821/4342\nf 1795/3750/4343 1781/3726/4343 1782/3725/4343\nf 1795/3751/4344 1829/3703/4344 1781/3702/4344\nf 1829/3703/4345 1852/3752/4345 1851/3671/4345\nf 2695/3046/4346 1910/2447/4346 2722/3730/4346\nf 2722/3753/4347 1910/3754/4347 1942/3755/4347\nf 1962/3756/4348 1972/3733/4348 1971/3710/4348\nf 1972/3733/4349 2014/3757/4349 2013/3690/4349\nf 2013/3690/4350 2014/3757/4350 2028/3711/4350\nf 2014/3757/4351 2079/3734/4351 2028/3711/4351\nf 1186/3713/4352 984/3714/4352 1430/3647/4352\nf 1350/3097/4353 1333/3517/4353 984/3714/4353\nf 2781/288/4354 1598/2991/4354 1903/2919/4354\nf 2275/2190/4355 2537/3107/4355 2536/2901/4355\nf 2237/3758/4356 2318/3759/4356 2176/3760/4356\nf 2283/3571/4357 2368/3555/4357 2212/3580/4357\nf 2215/2294/4358 2339/2433/4358 2138/2460/4358\nf 2132/2438/4359 2179/3513/4359 2339/2433/4359\nf 1620/286/4360 931/285/4360 1364/3219/4360\nf 2289/3761/4361 2267/3762/4361 2219/3763/4361\nf 1832/3764/4362 1819/3765/4362 2838/3766/4362\nf 1278/3767/4363 2032/3715/4363 1819/3765/4363\nf 3446/22/4364 3508/21/4364 3489/423/4364\nf 2689/1201/4365 2687/1417/4365 2652/724/4365\nf 2173/3718/4366 1924/3768/4366 2051/3717/4366\nf 1759/3769/4367 1965/3701/4367 2051/3717/4367\nf 1303/2037/4368 2136/1679/4368 1367/3770/4368\nf 1752/3771/4369 2255/3207/4369 2466/3206/4369\nf 3185/3772/4370 3224/3773/4370 3196/3774/4370\nf 1815/3775/4371 1829/3703/4371 1795/3751/4371\nf 1851/3671/4372 1868/3776/4372 1867/3673/4372\nf 1889/2448/4373 1910/2447/4373 2695/3046/4373\nf 2980/2936/4374 2998/2474/4374 3033/67/4374\nf 1942/3731/4375 1943/3777/4375 1962/3732/4375\nf 2092/3735/4376 2101/3778/4376 1306/3693/4376\nf 2101/3778/4377 1347/3779/4377 1306/3693/4377\nf 1347/3779/4378 1177/3712/4378 1306/3693/4378\nf 1187/3780/4379 1186/3713/4379 1177/3712/4379\nf 1347/3779/4380 1187/3780/4380 1177/3712/4380\nf 1822/3781/4381 984/3714/4381 1186/3713/4381\nf 1205/3782/4382 1732/3783/4382 2765/3784/4382\nf 2318/3759/4383 2245/3639/4383 2176/3760/4383\nf 1278/3785/4384 1944/3786/4384 2032/3746/4384\nf 1944/3747/4385 2033/3787/4385 2124/3716/4385\nf 2033/3787/4386 1606/2985/4386 2124/3716/4386\nf 2980/2936/4387 3033/67/4387 2960/3049/4387\nf 1790/3788/4388 2051/3717/4388 1924/3768/4388\nf 1790/3789/4389 1820/2250/4389 2051/3790/4389\nf 1820/3791/4390 1759/3769/4390 2051/3717/4390\nf 1965/3719/4391 1759/3665/4391 1896/2159/4391\nf 1743/3792/4392 1752/3748/4392 2466/3793/4392\nf 1612/2366/4393 1619/2365/4393 1618/2440/4393\nf 1815/3775/4394 1852/3752/4394 1829/3703/4394\nf 1852/3752/4395 1859/3794/4395 1851/3671/4395\nf 1851/3671/4396 1859/3794/4396 1868/3776/4396\nf 1921/3795/4397 1943/3777/4397 1942/3731/4397\nf 1910/3754/4398 1921/3796/4398 1942/3755/4398\nf 1943/3777/4399 1963/3797/4399 1962/3732/4399\nf 1963/3798/4400 1972/3733/4400 1962/3756/4400\nf 1972/3733/4401 1973/3799/4401 2014/3757/4401\nf 2079/3734/4402 2101/3778/4402 2092/3735/4402\nf 1822/3781/4403 1350/3097/4403 984/3714/4403\nf 551/3800/4404 1144/3801/4404 169/3802/4404\nf 1144/3801/4405 1205/3782/4405 169/3802/4405\nf 1928/678/4406 2723/653/4406 1732/3803/4406\nf 1278/3767/4407 1819/3765/4407 1832/3764/4407\nf 1089/3804/4408 1944/3786/4408 1278/3785/4408\nf 2021/3805/4409 2033/3787/4409 1944/3747/4409\nf 1442/3806/4410 1606/2985/4410 2033/3787/4410\nf 1905/2500/4411 1927/2870/4411 2069/321/4411\nf 1647/2659/4412 1295/3807/4412 1740/3285/4412\nf 1783/3808/4413 1795/3750/4413 1782/3725/4413\nf 1921/3795/4414 1922/1940/4414 1943/3777/4414\nf 1943/3033/4415 1957/2290/4415 1963/3798/4415\nf 1963/3798/4416 1973/3799/4416 1972/3733/4416\nf 1973/3799/4417 2004/1177/4417 2014/3757/4417\nf 2004/1177/4418 2029/2803/4418 2014/3757/4418\nf 2079/3734/4419 2080/3809/4419 2101/3778/4419\nf 1347/3779/4420 618/3810/4420 1187/3780/4420\nf 1388/3811/4421 1186/3713/4421 1187/3780/4421\nf 618/3810/4422 1388/3811/4422 1187/3780/4422\nf 1388/3811/4423 1822/3781/4423 1186/3713/4423\nf 1822/3812/4424 1405/3813/4424 1350/737/4424\nf 1746/3814/4425 1928/3815/4425 1732/3783/4425\nf 2386/3369/4426 2169/3678/4426 2323/3816/4426\nf 1206/944/4427 1278/3767/4427 1832/3764/4427\nf 2856/3817/4428 2059/3818/4428 1924/3768/4428\nf 2059/3818/4429 1790/3788/4429 1924/3768/4429\nf 1820/2250/4430 1604/2931/4430 1759/3665/4430\nf 1774/3189/4431 1789/2707/4431 1773/2169/4431\nf 1798/912/4432 1844/2371/4432 1605/540/4432\nf 1753/3819/4433 1752/3748/4433 1743/3792/4433\nf 1753/3819/4434 1761/3820/4434 1752/3748/4434\nf 1796/591/4435 1795/3750/4435 1783/3808/4435\nf 1796/3821/4436 1815/3775/4436 1795/3751/4436\nf 1796/3821/4437 1816/2471/4437 1815/3775/4437\nf 1816/2471/4438 1852/3752/4438 1815/3775/4438\nf 2430/3822/4439 2419/2430/4439 2372/3823/4439\nf 2926/2970/4440 2925/3824/4440 2915/3582/4440\nf 2029/2803/4441 2056/2318/4441 2079/3734/4441\nf 2014/3757/4442 2029/2803/4442 2079/3734/4442\nf 2079/3734/4443 2056/2318/4443 2080/3809/4443\nf 2080/3809/4444 2102/2268/4444 2101/3778/4444\nf 2101/3778/4445 2115/3825/4445 1347/3779/4445\nf 2107/3096/4446 364/2308/4446 2128/3826/4446\nf 2128/3826/4447 364/2308/4447 551/3800/4447\nf 364/2308/4448 1144/3801/4448 551/3800/4448\nf 1746/3814/4449 1732/3783/4449 1205/3782/4449\nf 1935/886/4450 1928/3815/4450 1746/3814/4450\nf 2088/3827/4451 2129/3828/4451 1928/678/4451\nf 3500/325/4452 1029/2275/4452 3489/753/4452\nf 2129/3828/4453 1206/3829/4453 1832/3073/4453\nf 1206/944/4454 2122/943/4454 1278/3767/4454\nf 1278/3767/4455 2122/943/4455 1089/3830/4455\nf 2118/2829/4456 1944/3747/4456 1089/3830/4456\nf 2118/2829/4457 2021/3805/4457 1944/3747/4457\nf 1439/3831/4458 2033/3787/4458 2021/3805/4458\nf 1683/2658/4459 1728/2660/4459 204/3292/4459\nf 1816/2471/4460 1853/2470/4460 1852/3752/4460\nf 1943/3033/4461 3355/2288/4461 1957/2290/4461\nf 1957/3832/4462 3390/3833/4462 1963/3797/4462\nf 1963/3798/4463 3390/1375/4463 1973/3799/4463\nf 1973/3799/4464 3390/1375/4464 2004/1177/4464\nf 2056/2318/4465 2081/2317/4465 2080/3809/4465\nf 2102/2268/4466 2115/3825/4466 2101/3778/4466\nf 1281/3834/4467 618/3810/4467 1347/3779/4467\nf 821/2395/4468 1822/3781/4468 1388/3811/4468\nf 821/2395/4469 1151/2306/4469 1405/3095/4469\nf 1822/3781/4470 821/2395/4470 1405/3095/4470\nf 1151/2306/4471 364/2308/4471 2107/3096/4471\nf 1405/3095/4472 1151/2306/4472 2107/3096/4472\nf 467/2231/4473 1131/2232/4473 1144/3801/4473\nf 364/2308/4474 467/2231/4474 1144/3801/4474\nf 1131/2232/4475 1205/3782/4475 1144/3801/4475\nf 1327/2832/4476 1746/3814/4476 1205/3782/4476\nf 2088/3827/4477 1206/3829/4477 2129/3828/4477\nf 2122/943/4478 2118/2829/4478 1089/3830/4478\nf 2688/1203/4479 1969/1202/4479 2703/3540/4479\nf 1990/3329/4480 2891/3835/4480 2241/3836/4480\nf 2059/3818/4481 2856/3817/4481 2159/3837/4481\nf 1992/2251/4482 1790/3789/4482 2059/3838/4482\nf 1790/3789/4483 1992/2251/4483 1820/2250/4483\nf 1537/3114/4484 1555/2316/4484 1536/2813/4484\nf 1784/2315/4485 1783/3808/4485 1761/3820/4485\nf 1784/2315/4486 1796/591/4486 1783/3808/4486\nf 3265/3839/4487 1859/3794/4487 1860/3840/4487\nf 2466/3841/4488 2447/3842/4488 1743/3843/4488\nf 2593/2977/4489 2607/363/4489 2617/3143/4489\nf 2116/2267/4490 2115/3825/4490 2102/2268/4490\nf 2115/3825/4491 2116/2267/4491 1347/3779/4491\nf 1347/3779/4492 2116/2267/4492 1281/3834/4492\nf 1289/2320/4493 618/3810/4493 1281/3834/4493\nf 1289/2320/4494 1152/2501/4494 618/3810/4494\nf 1152/2501/4495 1414/2336/4495 618/3810/4495\nf 1414/2336/4496 1388/3811/4496 618/3810/4496\nf 1414/2336/4497 228/5/4497 1388/3811/4497\nf 228/5/4498 821/2395/4498 1388/3811/4498\nf 1327/2832/4499 1205/3782/4499 1131/2232/4499\nf 1327/2832/4500 1935/886/4500 1746/3814/4500\nf 833/885/4501 1928/3815/4501 1935/886/4501\nf 833/885/4502 2088/187/4502 1928/3815/4502\nf 1988/3844/4503 2021/3845/4503 2118/3846/4503\nf 1461/46/4504 1463/637/4504 2090/2173/4504\nf 1724/408/4505 1871/2583/4505 2018/2631/4505\nf 1916/3190/4506 1992/2251/4506 2059/3838/4506\nf 1758/2827/4507 1774/3183/4507 1773/2635/4507\nf 1535/3093/4508 1761/3820/4508 1753/3819/4508\nf 3497/656/4509 3463/300/4509 3490/1009/4509\nf 1535/3093/4510 1784/2315/4510 1761/3820/4510\nf 1796/3821/4511 1575/3181/4511 1816/2471/4511\nf 1852/3752/4512 1853/2470/4512 1859/3794/4512\nf 2607/363/4513 2621/1608/4513 2617/3143/4513\nf 2029/2803/4514 2040/1017/4514 2056/2318/4514\nf 2081/2317/4515 2103/116/4515 2102/2268/4515\nf 2080/3809/4516 2081/2317/4516 2102/2268/4516\nf 2116/2267/4517 1270/2727/4517 1281/3834/4517\nf 1270/2727/4518 1289/2320/4518 1281/3834/4518\nf 3361/3847/4519 3422/3848/4519 3383/3849/4519\nf 1828/2352/4520 427/696/4520 2168/695/4520\nf 2076/2808/4521 2281/3850/4521 2390/2830/4521\nf 2304/3632/4522 2214/3851/4522 2281/3633/4522\nf 2201/3852/4523 2302/1188/4523 2157/1187/4523\nf 2413/3511/4524 2907/2457/4524 2407/3566/4524\nf 2384/3853/4525 1221/3854/4525 1219/45/4525\nf 2335/1890/4526 1019/3215/4526 1887/1891/4526\nf 1835/3855/4527 2515/3856/4527 1813/3857/4527\nf 1222/1084/4528 2027/1903/4528 2384/2656/4528\nf 216/3858/4529 2283/3571/4529 2243/3859/4529\nf 2699/264/4530 2296/3860/4530 2674/265/4530\nf 3011/3595/4531 3072/3861/4531 3049/3596/4531\nf 2223/1186/4532 2302/1188/4532 2311/3862/4532\nf 3146/3863/4533 3132/3864/4533 3119/3865/4533\nf 2373/2192/4534 2152/3866/4534 2135/2193/4534\nf 2358/1111/4535 2392/3419/4535 2134/1112/4535\nf 2153/3413/4536 2237/3758/4536 2176/3760/4536\nf 2351/3526/4537 2481/2144/4537 2205/3867/4537\nf 2399/3474/4538 2362/3485/4538 2199/3486/4538\nf 2257/1927/4539 1932/1334/4539 1166/602/4539\nf 985/3868/4540 2161/1082/4540 2027/3249/4540\nf 1823/3648/4541 1110/3869/4541 2194/3870/4541\nf 2140/3256/4542 2035/3391/4542 2260/3871/4542\nf 2295/3872/4543 2599/3873/4543 2329/3874/4543\nf 2310/3341/4544 2297/3875/4544 2263/3876/4544\nf 2917/849/4545 2916/851/4545 2908/3510/4545\nf 3174/2989/4546 3173/310/4546 3141/2833/4546\nf 2423/2030/4547 2584/3877/4547 1307/2031/4547\nf 3493/399/4548 3440/2538/4548 3475/664/4548\nf 2217/3698/4549 2375/3697/4549 2226/3591/4549\nf 2301/3878/4550 2179/3638/4550 2318/3759/4550\nf 188/3494/4551 2139/3879/4551 2145/3495/4551\nf 2342/3212/4552 2903/2557/4552 2900/3211/4552\nf 345/94/4553 2400/3880/4553 2362/3485/4553\nf 2362/3485/4554 2400/3880/4554 2284/3339/4554\nf 1932/1334/4555 1146/425/4555 1166/602/4555\nf 2267/3881/4556 2289/1443/4556 2876/2839/4556\nf 2338/3882/4557 2131/3614/4557 2165/3613/4557\nf 233/3883/4558 2242/2406/4558 2282/2408/4558\nf 2392/3419/4559 2260/3884/4559 2134/1112/4559\nf 1932/1334/4560 2333/3885/4560 1115/426/4560\nf 2333/3886/4561 2385/3887/4561 1079/3888/4561\nf 1115/426/4562 2333/3885/4562 1079/2453/4562\nf 1079/2453/4563 2385/3889/4563 2329/2540/4563\nf 1107/2359/4564 1106/2491/4564 1082/3890/4564\nf 1130/2675/4565 2217/3698/4565 2396/2661/4565\nf 233/3883/4566 2282/2408/4566 2877/3891/4566\nf 2365/3368/4567 2383/3350/4567 2304/3892/4567\nf 2365/3893/4568 2304/3894/4568 2076/2808/4568\nf 2391/3575/4569 2271/3574/4569 2596/3895/4569\nf 2830/2498/4570 2859/2208/4570 1185/2499/4570\nf 652/1140/4571 2286/3896/4571 1920/1141/4571\nf 2386/3369/4572 2323/3816/4572 2336/2488/4572\nf 362/357/4573 2393/636/4573 201/694/4573\nf 2246/2036/4574 2342/3212/4574 2335/1890/4574\nf 2336/2488/4575 2201/3852/4575 2208/3897/4575\nf 2281/3850/4576 2334/2194/4576 2390/2830/4576\nf 2178/2552/4577 2184/2880/4577 2164/2553/4577\nf 2218/2210/4578 2137/3898/4578 2859/2208/4578\nf 2329/2540/4579 1068/2390/4579 1079/2453/4579\nf 2190/2489/4580 1920/2416/4580 2225/2418/4580\nf 2583/3218/4581 2523/3217/4581 2595/3705/4581\nf 2287/2314/4582 2310/3899/4582 2211/3900/4582\nf 2247/3583/4583 2190/2489/4583 2225/2418/4583\nf 2035/3391/4584 2299/3901/4584 2260/3871/4584\nf 2286/3902/4585 2218/2210/4585 2360/2417/4585\nf 3227/2262/4586 3305/167/4586 3240/3903/4586\nf 2238/3904/4587 1828/2352/4587 2340/3636/4587\nf 1828/2352/4588 2168/695/4588 2340/3636/4588\nf 2049/3905/4589 2238/3906/4589 2365/3893/4589\nf 1060/3907/4590 2469/3908/4590 3422/3848/4590\nf 2214/3851/4591 2304/3632/4591 2383/3909/4591\nf 2359/3910/4592 2208/3897/4592 2201/3852/4592\nf 2360/2417/4593 2218/2210/4593 2064/2209/4593\nf 2134/3911/4594 2251/3912/4594 2221/2313/4594\nf 2265/3913/4595 2133/3914/4595 2155/3915/4595\nf 2815/3250/4596 1221/3916/4596 2384/3248/4596\nf 2385/3887/4597 2295/3872/4597 2329/3874/4597\nf 2349/3917/4598 2214/3349/4598 1794/3918/4598\nf 1653/776/4599 1578/3919/4599 1577/1955/4599\nf 2598/3920/4600 2295/3872/4600 2278/3921/4600\nf 2373/3922/4601 2214/3349/4601 2349/3917/4601\nf 1343/2611/4602 2265/3913/4602 1509/3923/4602\nf 1970/3631/4603 2334/2194/4603 2381/3265/4603\nf 2049/3905/4604 2365/3893/4604 2076/2808/4604\nf 2225/2418/4605 2357/3328/4605 1990/3329/4605\nf 2374/3370/4606 2386/3369/4606 2336/2488/4606\nf 2353/3924/4607 2245/3639/4607 1048/3925/4607\nf 2862/2392/4608 2158/1442/4608 2861/3926/4608\nf 3381/684/4609 3402/3139/4609 3370/685/4609\nf 201/694/4610 2393/636/4610 2168/695/4610\nf 2183/1718/4611 1028/3037/4611 1833/3258/4611\nf 1783/3808/4612 1782/3725/4612 1752/3748/4612\nf 2323/3816/4613 2190/2489/4613 2336/2488/4613\nf 3470/281/4614 3490/1009/4614 870/2400/4614\nf 2169/3635/4615 2168/695/4615 837/2427/4615\nf 2443/848/4616 2415/3148/4616 2290/846/4616\nf 2227/1441/4617 2289/1443/4617 2219/3927/4617\nf 2257/1927/4618 2327/3928/4618 1932/1334/4618\nf 1932/1334/4619 2327/3928/4619 2333/3885/4619\nf 2327/3929/4620 2270/3930/4620 2333/3886/4620\nf 1261/29/4621 2180/2641/4621 2206/1128/4621\nf 2334/2194/4622 2281/3850/4622 2373/2192/4622\nf 2324/3931/4623 1120/126/4623 2277/881/4623\nf 2374/3370/4624 2336/2488/4624 2208/3897/4624\nf 2270/3930/4625 2385/3887/4625 2333/3886/4625\nf 78/811/4626 3218/548/4626 93/804/4626\nf 1794/3918/4627 2214/3349/4627 2188/3351/4627\nf 1814/2201/4628 1813/2561/4628 2305/3932/4628\nf 2921/3933/4629 2936/3934/4629 2929/2508/4629\nf 2278/3921/4630 2295/3872/4630 2385/3887/4630\nf 2271/3935/4631 1061/517/4631 1055/926/4631\nf 2262/3936/4632 2358/3937/4632 2272/3938/4632\nf 1102/1171/4633 2133/1684/4633 1114/1172/4633\nf 2390/2830/4634 2334/2194/4634 1970/3631/4634\nf 2064/2209/4635 2891/3835/4635 1990/3329/4635\nf 837/2427/4636 657/2396/4636 2229/1142/4636\nf 2398/2756/4637 2361/608/4637 2389/3473/4637\nf 2144/1366/4638 1875/2973/4638 2467/289/4638\nf 2872/843/4639 2350/3584/4639 2315/3658/4639\nf 2399/3474/4640 2199/3486/4640 2235/3475/4640\nf 2155/3573/4641 2149/3939/4641 2271/3574/4641\nf 456/8/4642 2331/10/4642 2361/608/4642\nf 2334/2194/4643 2135/2193/4643 2381/3265/4643\nf 2325/3940/4644 2269/3941/4644 2326/3942/4644\nf 3279/106/4645 3342/165/4645 3305/167/4645\nf 3279/106/4646 3305/167/4646 3227/2262/4646\nf 2149/3939/4647 1061/3943/4647 2271/3574/4647\nf 2380/3260/4648 2346/1274/4648 2381/3265/4648\nf 2331/10/4649 2399/3474/4649 2361/608/4649\nf 1114/2605/4650 2133/3914/4650 2265/3913/4650\nf 2214/3349/4651 2373/3922/4651 2281/3944/4651\nf 2178/2552/4652 977/2543/4652 2697/2542/4652\nf 2138/2460/4653 2328/2459/4653 813/1957/4653\nf 2257/1927/4654 2192/1926/4654 2327/3928/4654\nf 3243/2445/4655 3242/3945/4655 3228/2446/4655\nf 2290/846/4656 2415/3148/4656 2370/2558/4656\nf 2180/2641/4657 2195/3946/4657 2206/1128/4657\nf 3466/1713/4658 2253/3947/4658 3479/1714/4658\nf 2201/2331/4659 2003/3948/4659 2191/2332/4659\nf 2363/3330/4660 2332/990/4660 2379/3356/4660\nf 2132/3383/4661 2312/3385/4661 2245/3639/4661\nf 2807/3949/4662 2138/2460/4662 813/1957/4662\nf 1907/3737/4663 1823/3648/4663 2375/3697/4663\nf 2359/3910/4664 2201/3852/4664 2157/1187/4664\nf 2270/3930/4665 2278/3921/4665 2385/3887/4665\nf 1916/2410/4666 2159/3837/4666 2171/2411/4666\nf 1920/2416/4667 2286/3902/4667 2360/2417/4667\nf 1227/28/4668 2170/2723/4668 2180/2641/4668\nf 2170/2723/4669 2189/3950/4669 2180/2641/4669\nf 2180/2641/4670 2189/3950/4670 2195/3946/4670\nf 2195/3951/4671 163/2652/4671 2206/2633/4671\nf 1760/3727/4672 1752/3748/4672 1782/3725/4672\nf 2228/3728/4673 2147/3430/4673 2232/3429/4673\nf 2320/3384/4674 2288/3683/4674 2312/3385/4674\nf 2375/3697/4675 1823/3648/4675 2194/3870/4675\nf 2171/3952/4676 2170/2723/4676 1449/2725/4676\nf 3485/326/4677 3436/1372/4677 1101/2196/4677\nf 1048/3581/4678 2317/3953/4678 2300/3954/4678\nf 1110/3955/4679 2213/2506/4679 2194/3956/4679\nf 2219/3957/4680 2267/3958/4680 2203/162/4680\nf 2152/3959/4681 2222/3255/4681 2172/3960/4681\nf 2173/3718/4682 2856/3817/4682 1924/3768/4682\nf 2076/2808/4683 2390/2830/4683 1361/2816/4683\nf 3141/2833/4684 3140/1218/4684 3113/1220/4684\nf 3506/1947/4685 1980/3289/4685 2768/3629/4685\nf 2171/3961/4686 2181/3962/4686 2170/3963/4686\nf 2170/2723/4687 2181/3964/4687 2189/3950/4687\nf 2207/3965/4688 2195/3966/4688 2189/3967/4688\nf 2207/3965/4689 163/3968/4689 2195/3966/4689\nf 2286/3896/4690 1050/2287/4690 2137/2279/4690\nf 2188/3351/4691 2208/3897/4691 2359/3910/4691\nf 2227/1441/4692 2219/3927/4692 2203/3445/4692\nf 2154/3969/4693 1283/2377/4693 1266/2733/4693\nf 2135/2193/4694 2152/3866/4694 2172/3552/4694\nf 1509/3923/4695 2265/3913/4695 2155/3915/4695\nf 1794/3918/4696 2188/3351/4696 2359/3910/4696\nf 2300/3954/4697 2317/3953/4697 1145/3970/4697\nf 2186/3971/4698 2189/3967/4698 2181/3962/4698\nf 2186/3971/4699 2207/3965/4699 2189/3967/4699\nf 163/3968/4700 2207/3965/4700 3466/3972/4700\nf 2272/3938/4701 2221/2313/4701 2287/2314/4701\nf 2272/3938/4702 2287/2314/4702 2211/3900/4702\nf 216/3858/4703 2337/3572/4703 2283/3571/4703\nf 2236/3973/4704 2310/3341/4704 2263/3876/4704\nf 2316/2535/4705 2243/3859/4705 2254/2536/4705\nf 2153/3413/4706 2176/3760/4706 231/3414/4706\nf 1205/3782/4707 2765/3784/4707 169/3802/4707\nf 2498/2525/4708 2193/847/4708 2230/3974/4708\nf 2498/2525/4709 2230/3974/4709 2231/3975/4709\nf 2856/3817/4710 2181/3976/4710 2171/2411/4710\nf 2159/3837/4711 2856/3817/4711 2171/2411/4711\nf 2856/3977/4712 2871/3978/4712 2181/3962/4712\nf 2871/3978/4713 2186/3971/4713 2181/3962/4713\nf 999/3979/4714 2505/3980/4714 2541/3981/4714\nf 2226/3591/4715 2375/3697/4715 2194/3870/4715\nf 1172/1690/4716 365/145/4716 616/1784/4716\nf 2300/3507/4717 231/3414/4717 2176/3760/4717\nf 2368/3555/4718 2895/3554/4718 2317/3953/4718\nf 3505/353/4719 3476/355/4719 1015/751/4719\nf 2859/3982/4720 2137/2279/4720 1203/2278/4720\nf 2233/3983/4721 2276/3984/4721 2230/3974/4721\nf 2305/3932/4722 2231/2299/4722 2276/2298/4722\nf 2379/3356/4723 2401/3266/4723 2148/3407/4723\nf 2152/3959/4724 2349/3917/4724 2348/3663/4724\nf 2196/3985/4725 2307/2426/4725 2364/2425/4725\nf 2807/3949/4726 2209/2292/4726 2215/2294/4726\nf 2310/3341/4727 2248/3345/4727 2297/3875/4727\nf 2244/3623/4728 2308/3986/4728 2297/1133/4728\nf 2221/2313/4729 2251/3912/4729 2142/3247/4729\nf 2291/3987/4730 2131/3614/4730 2194/3956/4730\nf 3428/759/4731 3504/246/4731 2424/245/4731\nf 2318/3988/4732 2237/3989/4732 2301/3990/4732\nf 2440/1881/4733 2429/1886/4733 957/2509/4733\nf 2179/3513/4734 2301/3990/4734 2328/2459/4734\nf 2239/3991/4735 2253/699/4735 2207/3965/4735\nf 2199/3992/4736 2284/3993/4736 2236/3994/4736\nf 2993/2176/4737 2439/2906/4737 2457/3995/4737\nf 2305/3932/4738 1813/2561/4738 2231/2299/4738\nf 1110/3955/4739 2366/3996/4739 2213/2506/4739\nf 2744/2119/4740 3435/3053/4740 3450/3997/4740\nf 2536/2901/4741 2294/2202/4741 2275/2190/4741\nf 2152/3959/4742 2373/3922/4742 2349/3917/4742\nf 4/3608/4743 1307/3610/4743 2112/3998/4743\nf 2961/2937/4744 2980/2936/4744 2960/3049/4744\nf 2264/698/4745 2313/3999/4745 3425/313/4745\nf 2926/2229/4746 2945/3165/4746 2944/2230/4746\nf 1954/3640/4747 2807/3949/4747 813/1957/4747\nf 813/1957/4748 2347/1956/4748 1954/3640/4748\nf 2244/3623/4749 1954/3640/4749 2185/4000/4749\nf 2133/4001/4750 2149/3939/4750 2155/3573/4750\nf 1888/3476/4751 1996/2424/4751 2307/2426/4751\nf 2252/3687/4752 2268/4002/4752 2321/3685/4752\nf 2260/3871/4753 2707/4003/4753 2134/3911/4753\nf 30/2724/4754 1227/28/4754 1256/236/4754\nf 2268/2504/4755 2183/1718/4755 2321/4004/4755\nf 1132/301/4756 870/2400/4756 3451/1929/4756\nf 2207/4005/4757 2253/3947/4757 3466/1713/4757\nf 2945/4006/4758 2960/3049/4758 2944/3743/4758\nf 2642/4007/4759 2314/4008/4759 2376/4009/4759\nf 2353/3924/4760 1048/3925/4760 2300/3507/4760\nf 2225/2418/4761 1990/3329/4761 2350/3584/4761\nf 2498/2525/4762 2477/2524/4762 2443/848/4762\nf 2881/4010/4763 2273/4011/4763 1934/4012/4763\nf 2273/4011/4764 2367/4013/4764 2296/3860/4764\nf 2241/3836/4765 2891/3835/4765 2861/3926/4765\nf 2370/2558/4766 2246/2036/4766 2290/846/4766\nf 2360/2417/4767 2064/2209/4767 2357/3328/4767\nf 2224/3392/4768 2182/768/4768 2141/770/4768\nf 2873/4014/4769 2239/3991/4769 2207/3965/4769\nf 1082/3890/4770 1106/2491/4770 1087/2516/4770\nf 2313/4015/4771 2292/125/4771 2314/4016/4771\nf 2367/4013/4772 2273/4011/4772 2881/4010/4772\nf 2891/3835/4773 2326/3942/4773 2861/3926/4773\nf 2284/3339/4774 2400/3880/4774 2211/3340/4774\nf 2361/608/4775 2399/3474/4775 2389/3473/4775\nf 763/1493/4776 750/1491/4776 437/2619/4776\nf 2151/3742/4777 1024/2330/4777 2209/2292/4777\nf 2331/10/4778 345/94/4778 2362/3485/4778\nf 2223/1186/4779 2311/3862/4779 2330/3729/4779\nf 2314/4008/4780 2343/4017/4780 2376/4009/4780\nf 2234/4018/4781 2296/3860/4781 2367/4013/4781\nf 1578/3919/4782 1653/776/4782 80/209/4782\nf 2866/4019/4783 2317/3953/4783 2895/3554/4783\nf 1087/2516/4784 1106/2491/4784 1097/2492/4784\nf 2365/4020/4785 2238/3904/4785 2340/3636/4785\nf 2213/2506/4786 2252/2505/4786 2291/3987/4786\nf 2147/3430/4787 2204/3741/4787 2387/3431/4787\nf 2401/3266/4788 973/3418/4788 2148/3407/4788\nf 2292/133/4789 2343/4017/4789 2314/4008/4789\nf 3223/4021/4790 1498/4022/4790 3224/3773/4790\nf 2336/2488/4791 2003/2490/4791 2201/3852/4791\nf 2177/4023/4792 2187/4024/4792 2881/4010/4792\nf 2881/4010/4793 2187/4024/4793 2367/4013/4793\nf 2187/4025/4794 2369/4026/4794 2367/4027/4794\nf 1913/4028/4795 2718/4029/4795 2234/4018/4795\nf 652/1140/4796 1050/2287/4796 2286/3896/4796\nf 233/3883/4797 2285/2534/4797 2266/3679/4797\nf 2188/3351/4798 2383/3350/4798 2208/3897/4798\nf 2147/3263/4799 2220/2004/4799 2322/2003/4799\nf 2200/3264/4800 2198/160/4800 2203/162/4800\nf 2143/2636/4801 2192/4030/4801 2197/2637/4801\nf 2365/3368/4802 2374/3370/4802 2383/3350/4802\nf 558/635/4803 1050/2287/4803 652/1140/4803\nf 2376/4009/4804 2388/4031/4804 2177/4023/4804\nf 2369/4032/4805 2234/4018/4805 2367/4013/4805\nf 2246/2036/4806 2261/1889/4806 2193/847/4806\nf 2380/3260/4807 2401/3266/4807 2379/3356/4807\nf 2143/2636/4808 1509/3923/4808 2192/4030/4808\nf 2288/3683/4809 2254/3621/4809 2243/3684/4809\nf 2343/4017/4810 2388/4031/4810 2376/4009/4810\nf 2187/4024/4811 2177/4023/4811 2388/4031/4811\nf 2258/4033/4812 2234/4018/4812 2369/4032/4812\nf 2258/4033/4813 1913/4028/4813 2234/4018/4813\nf 2549/1515/4814 1842/3568/4814 1827/1513/4814\nf 2176/3760/4815 2353/3924/4815 2300/3507/4815\nf 2397/2642/4816 1907/3737/4816 1130/2675/4816\nf 633/2052/4817 965/1978/4817 1250/2752/4817\nf 2192/4034/4818 1509/4035/4818 2327/3929/4818\nf 2250/2407/4819 2203/3445/4819 2267/3881/4819\nf 1120/126/4820 2324/3931/4820 2343/127/4820\nf 2355/4036/4821 2187/4024/4821 2388/4031/4821\nf 2162/4037/4822 2718/4029/4822 1913/4028/4822\nf 1833/3258/4823 2321/4004/4823 2183/1718/4823\nf 1804/725/4824 2305/3932/4824 1778/726/4824\nf 2267/3881/4825 1959/4038/4825 2250/2407/4825\nf 2324/3931/4826 2355/4039/4826 2343/127/4826\nf 2343/4017/4827 2355/4036/4827 2388/4031/4827\nf 1804/725/4828 1791/2191/4828 2294/2202/4828\nf 1954/3640/4829 2347/1956/4829 2268/2504/4829\nf 2185/4000/4830 1954/3640/4830 2268/2504/4830\nf 2288/3683/4831 2204/3630/4831 2254/3621/4831\nf 1362/1261/4832 1970/3631/4832 2346/1274/4832\nf 2316/2535/4833 216/3858/4833 2243/3859/4833\nf 2345/347/4834 2380/3260/4834 2379/3356/4834\nf 1075/2550/4835 1263/154/4835 1172/1690/4835\nf 2355/4040/4836 1290/4041/4836 2187/4025/4836\nf 2187/4025/4837 1290/4041/4837 2369/4026/4837\nf 2160/4042/4838 1913/4028/4838 2258/4033/4838\nf 427/696/4839 120/494/4839 201/694/4839\nf 2225/2418/4840 2350/3584/4840 2247/3583/4840\nf 1823/3648/4841 2235/3475/4841 1110/3869/4841\nf 2312/3385/4842 2283/4043/4842 2212/4044/4842\nf 2263/3876/4843 2297/3875/4843 2308/3458/4843\nf 2217/3698/4844 2226/3591/4844 2352/4045/4844\nf 2199/3486/4845 2236/3973/4845 1110/3869/4845\nf 2324/4046/4846 2356/4047/4846 2355/4036/4846\nf 2355/4040/4847 2356/4048/4847 1290/4041/4847\nf 1290/4041/4848 1953/4049/4848 2369/4026/4848\nf 2369/4032/4849 1949/4050/4849 2258/4033/4849\nf 2160/4042/4850 2162/4037/4850 1913/4028/4850\nf 2365/3368/4851 2340/3677/4851 2386/3369/4851\nf 2236/3973/4852 2263/3876/4852 2366/3695/4852\nf 2245/3639/4853 2212/4044/4853 1048/3925/4853\nf 1063/4051/4854 1068/4052/4854 2599/3873/4854\nf 2781/288/4855 515/2920/4855 2090/4053/4855\nf 195/1336/4856 199/1319/4856 178/1320/4856\nf 2320/3384/4857 2204/3630/4857 2288/3683/4857\nf 1794/3918/4858 2359/3910/4858 2182/768/4858\nf 2293/2790/4859 2324/3931/4859 2277/881/4859\nf 2293/2790/4860 2356/4054/4860 2324/3931/4860\nf 1949/4050/4861 2160/4042/4861 2258/4033/4861\nf 2237/3989/4862 2153/1194/4862 2482/2327/4862\nf 2271/3574/4863 1055/4055/4863 2596/3895/4863\nf 2301/3990/4864 2237/3989/4864 2482/2327/4864\nf 2322/2003/4865 2382/2005/4865 2266/3620/4865\nf 2272/3938/4866 2358/3937/4866 2221/2313/4866\nf 1996/2424/4867 1888/3476/4867 2251/3912/4867\nf 2707/4003/4868 2251/3912/4868 2134/3911/4868\nf 2860/4056/4869 2770/2225/4869 2269/3941/4869\nf 2356/4048/4870 2394/4057/4870 1290/4041/4870\nf 2394/4057/4871 1953/4049/4871 1290/4041/4871\nf 2280/4058/4872 2369/4032/4872 1953/4059/4872\nf 2280/4058/4873 1949/4050/4873 2369/4032/4873\nf 2320/4060/4874 2132/2438/4874 2377/2293/4874\nf 1130/2675/4875 1907/3737/4875 2375/3697/4875\nf 2891/3835/4876 2325/3940/4876 2326/3942/4876\nf 2176/3760/4877 2245/3639/4877 2353/3924/4877\nf 2400/3880/4878 2378/3332/4878 2211/3340/4878\nf 2263/3876/4879 2308/3458/4879 2366/3695/4879\nf 2711/1634/4880 1830/1936/4880 2543/1935/4880\nf 2293/2745/4881 1223/2741/4881 2356/4048/4881\nf 2356/4048/4882 1223/2741/4882 2394/4057/4882\nf 2394/4057/4883 2395/4061/4883 1953/4049/4883\nf 2146/4062/4884 2160/4042/4884 1949/4050/4884\nf 2245/3639/4885 2312/3385/4885 2212/4044/4885\nf 2236/3973/4886 2284/3339/4886 2310/3341/4886\nf 1833/3258/4887 2060/3/4887 2535/2/4887\nf 1509/3923/4888 2155/3915/4888 2327/4063/4888\nf 1804/725/4889 1814/2201/4889 2305/3932/4889\nf 34/2672/4890 2397/2642/4890 1130/2675/4890\nf 2190/2489/4891 2229/4064/4891 1920/2416/4891\nf 1223/2741/4892 2395/4061/4892 2394/4057/4892\nf 2146/4062/4893 2303/1847/4893 2160/4042/4893\nf 1110/3869/4894 2236/3973/4894 2366/3695/4894\nf 2332/990/4895 2345/347/4895 2379/3356/4895\nf 2155/3573/4896 2270/3930/4896 2327/3929/4896\nf 1752/3748/4897 1761/3820/4897 1783/3808/4897\nf 2150/4065/4898 2407/3566/4898 2906/2458/4898\nf 1318/2599/4899 2265/3913/4899 1343/2611/4899\nf 2213/2506/4900 2291/3987/4900 2194/3956/4900\nf 1970/3631/4901 2381/3265/4901 2346/1274/4901\nf 2391/3575/4902 2278/3921/4902 2270/3930/4902\nf 7/1704/4903 3451/1929/4903 3480/1300/4903\nf 2707/4003/4904 2364/2425/4904 1996/2424/4904\nf 2344/2732/4905 2395/4061/4905 1223/2741/4905\nf 1953/4059/4906 1914/4066/4906 2280/4058/4906\nf 2156/4067/4907 1949/4050/4907 2280/4058/4907\nf 2156/4067/4908 2146/4062/4908 1949/4050/4908\nf 2235/3475/4909 2199/3486/4909 1110/3869/4909\nf 2378/3332/4910 2272/4068/4910 2211/3340/4910\nf 576/1654/4911 3315/4069/4911 3301/4070/4911\nf 345/94/4912 2332/990/4912 2363/3330/4912\nf 1760/3727/4913 2163/4071/4913 2255/3749/4913\nf 2381/3265/4914 2135/2193/4914 2172/3552/4914\nf 2872/843/4915 2158/1442/4915 2227/1441/4915\nf 2395/4061/4916 1273/4072/4916 1953/4049/4916\nf 1273/4072/4917 1914/4073/4917 1953/4049/4917\nf 3128/1219/4918 3140/1218/4918 3152/1638/4918\nf 2391/3575/4919 2596/3895/4919 2278/3921/4919\nf 2397/2642/4920 2398/2756/4920 1907/3737/4920\nf 3315/4069/4921 576/1654/4921 3332/1653/4921\nf 1249/2614/4922 1454/2132/4922 1436/4074/4922\nf 2302/1188/4923 2191/3296/4923 2311/3862/4923\nf 2323/3816/4924 2229/4064/4924 2190/2489/4924\nf 2152/3959/4925 2348/3663/4925 2222/3255/4925\nf 2169/3678/4926 2229/4064/4926 2323/3816/4926\nf 2368/3555/4927 2317/3953/4927 1048/3581/4927\nf 2202/4075/4928 2146/4062/4928 2156/4067/4928\nf 2202/4075/4929 2303/1847/4929 2146/4062/4929\nf 2379/3356/4930 2148/3407/4930 2262/3331/4930\nf 1794/3918/4931 2224/3392/4931 2348/3663/4931\nf 1024/3720/4932 2204/3630/4932 2320/3384/4932\nf 2151/3742/4933 2209/2292/4933 2764/4076/4933\nf 2003/2490/4934 2274/3295/4934 2191/3296/4934\nf 2216/4077/4935 3019/2296/4935 2436/2295/4935\nf 2076/2808/4936 1322/2793/4936 2049/3905/4936\nf 2224/3392/4937 1794/3918/4937 2182/768/4937\nf 2286/3902/4938 2137/3898/4938 2218/2210/4938\nf 1318/2599/4939 1114/2605/4939 2265/3913/4939\nf 2308/3986/4940 2268/2504/4940 2213/2506/4940\nf 1741/4078/4941 2233/3983/4941 2261/1889/4941\nf 1760/3727/4942 2256/4079/4942 2163/4071/4942\nf 2395/4061/4943 2396/2661/4943 1273/4072/4943\nf 1914/4066/4944 2156/4067/4944 2280/4058/4944\nf 2240/4080/4945 2202/4075/4945 2156/4067/4945\nf 2202/4075/4946 1710/1633/4946 2303/1847/4946\nf 2291/3987/4947 2252/2505/4947 2131/3614/4947\nf 2503/2146/4948 2256/3724/4948 1781/3723/4948\nf 2465/2145/4949 2163/4081/4949 2256/3724/4949\nf 2780/2714/4950 1874/2713/4950 1598/2991/4950\nf 3002/4082/4951 2216/4077/4951 2436/2295/4951\nf 2351/3526/4952 3002/4082/4952 2436/2295/4952\nf 2378/3332/4953 2262/3331/4953 2272/4068/4953\nf 2344/2732/4954 2396/2661/4954 2395/4061/4954\nf 2338/3882/4955 2156/4067/4955 1914/4066/4955\nf 2338/3593/4956 2240/4083/4956 2156/4084/4956\nf 345/94/4957 2363/3330/4957 2400/3880/4957\nf 2169/3635/4958 837/2427/4958 2229/1142/4958\nf 2391/3575/4959 2270/3930/4959 2155/3573/4959\nf 1959/4038/4960 2267/3881/4960 2876/2839/4960\nf 2383/3350/4961 2374/3370/4961 2208/3897/4961\nf 1828/2352/4962 2238/3904/4962 2049/2353/4962\nf 2242/2406/4963 2266/3679/4963 2382/3444/4963\nf 2352/4045/4964 1914/4073/4964 1273/4072/4964\nf 2185/4000/4965 2268/2504/4965 2308/3986/4965\nf 2864/4085/4966 2259/3553/4966 2354/4086/4966\nf 973/3257/4967 2140/3256/4967 2392/4087/4967\nf 2226/3591/4968 2194/3870/4968 2131/3592/4968\nf 2503/2146/4969 2465/2145/4969 2256/3724/4969\nf 7/1704/4970 3480/1300/4970 3509/1702/4970\nf 2143/2636/4971 1343/2611/4971 1509/3923/4971\nf 2139/1678/4972 1291/1680/4972 2145/2376/4972\nf 1336/2888/4973 1368/2889/4973 2139/1678/4973\nf 2349/3917/4974 1794/3918/4974 2348/3663/4974\nf 2315/3658/4975 1990/3329/4975 2241/3836/4975\nf 3211/2168/4976 3212/2167/4976 3226/4088/4976\nf 2217/3698/4977 1273/4072/4977 2396/2661/4977\nf 1273/4089/4978 2217/4090/4978 2352/4091/4978\nf 1914/4066/4979 2352/4091/4979 2338/3882/4979\nf 2165/3613/4980 2202/4075/4980 2240/4080/4980\nf 2165/3613/4981 2535/2/4981 2202/4075/4981\nf 2392/3419/4982 2140/4092/4982 2260/3884/4982\nf 2350/3584/4983 1990/3329/4983 2315/3658/4983\nf 2312/3385/4984 2243/3684/4984 2283/4043/4984\nf 2337/3572/4985 2354/4086/4985 2259/3553/4985\nf 3288/2449/4986 3337/4093/4986 1921/3795/4986\nf 2205/3867/4987 2994/4094/4987 2351/3526/4987\nf 2145/2376/4988 1283/2377/4988 2154/3969/4988\nf 2318/3759/4989 2179/3638/4989 2245/3639/4989\nf 2315/3658/4990 2241/3836/4990 2158/1442/4990\nf 2352/4091/4991 2226/4095/4991 2338/3882/4991\nf 2338/3593/4992 2165/4096/4992 2240/4083/4992\nf 2363/3330/4993 2378/3332/4993 2400/3880/4993\nf 3473/1107/4994 3458/1446/4994 3481/1108/4994\nf 2575/3627/4995 1430/3628/4995 2109/4097/4995\nf 2445/4098/4996 2177/4023/4996 2881/4010/4996\nf 1793/1518/4997 2408/4099/4997 2829/3163/4997\nf 2436/2295/4998 2425/3192/4998 2163/4081/4998\nf 1657/649/4999 1662/651/4999 1136/4100/4999\nf 1473/2666/5000 2109/4097/5000 2799/4101/5000\nf 2422/2070/5001 2479/4102/5001 1675/2665/5001\nf 956/4103/5002 957/2509/5002 2429/1886/5002\nf 2792/1399/5003 2845/4104/5003 2812/371/5003\nf 2870/3091/5004 1700/4105/5004 2886/4106/5004\nf 2479/4102/5005 2855/4107/5005 1473/2666/5005\nf 2799/4101/5006 1702/4108/5006 2435/3335/5006\nf 1473/2666/5007 2799/4101/5007 2699/264/5007\nf 58/211/5008 23/783/5008 59/755/5008\nf 2886/4106/5009 1700/4105/5009 2885/4109/5009\nf 2427/4110/5010 2425/3192/5010 2426/4111/5010\nf 2699/264/5011 2799/4101/5011 2210/4112/5011\nf 2625/650/5012 2421/4113/5012 2752/4114/5012\nf 2210/4112/5013 2799/4101/5013 2435/3335/5013\nf 1038/4115/5014 2596/3895/5014 1055/4055/5014\nf 2506/1595/5015 1020/2394/5015 1009/1596/5015\nf 2874/4116/5016 2871/3978/5016 2818/3019/5016\nf 2818/3019/5017 2871/3978/5017 2856/3977/5017\nf 2409/3185/5018 2905/4117/5018 2904/3186/5018\nf 1038/4115/5019 2576/4118/5019 2596/3895/5019\nf 3288/2449/5020 1921/3795/5020 1910/2447/5020\nf 2077/4119/5021 2078/3600/5021 2112/3602/5021\nf 2584/3877/5022 2423/2030/5022 2479/4102/5022\nf 3212/2167/5023 3227/2262/5023 3226/4088/5023\nf 2576/4118/5024 2597/4120/5024 2596/3895/5024\nf 2275/2190/5025 2522/4121/5025 2537/3107/5025\nf 2710/4122/5026 2779/3187/5026 2820/3333/5026\nf 2676/4123/5027 2718/4029/5027 2162/4037/5027\nf 1902/4124/5028 2112/3602/5028 2584/3877/5028\nf 2609/266/5029 2879/679/5029 2434/267/5029\nf 3195/1932/5030 3218/1934/5030 3194/4125/5030\nf 2541/3981/5031 2576/4118/5031 1038/4115/5031\nf 2434/267/5032 2879/679/5032 2838/1635/5032\nf 3469/782/5033 1830/781/5033 1174/3527/5033\nf 2541/3981/5034 2550/4126/5034 2576/4118/5034\nf 2550/4126/5035 2597/4120/5035 2576/4118/5035\nf 3498/1197/5036 2783/3021/5036 1674/1198/5036\nf 3057/1411/5037 3100/4127/5037 3080/3676/5037\nf 3236/1114/5038 1448/3488/5038 1631/4128/5038\nf 2706/3201/5039 2705/4129/5039 2636/4130/5039\nf 1496/4131/5040 2489/2898/5040 2644/4132/5040\nf 2033/4133/5041 1439/273/5041 1442/2571/5041\nf 959/576/5042 2483/2073/5042 978/450/5042\nf 2796/4134/5043 2012/2349/5043 2795/2348/5043\nf 1072/4135/5044 2602/4136/5044 1082/3890/5044\nf 2698/4137/5045 2674/265/5045 2676/4123/5045\nf 1697/311/5046 3425/313/5046 2642/4007/5046\nf 2505/3980/5047 2525/4138/5047 2541/3981/5047\nf 2541/3981/5048 2525/4138/5048 2550/4126/5048\nf 2598/3920/5049 2597/4120/5049 2550/4126/5049\nf 2565/4139/5050 2598/3920/5050 2550/4126/5050\nf 2983/528/5051 3025/2485/5051 3048/4140/5051\nf 966/3334/5052 1934/4012/5052 2888/4141/5052\nf 2722/3730/5053 2721/732/5053 2695/3046/5053\nf 959/576/5054 960/2177/5054 2483/2073/5054\nf 2564/3188/5055 2600/268/5055 1987/4142/5055\nf 2763/3675/5056 2796/3078/5056 2751/4143/5056\nf 1842/220/5057 2581/2423/5057 1866/2422/5057\nf 1231/183/5058 1232/182/5058 1099/2781/5058\nf 2763/3675/5059 2751/4143/5059 1955/4144/5059\nf 2751/4145/5060 2795/4146/5060 2778/4147/5060\nf 2483/2073/5061 2484/4148/5061 2505/1990/5061\nf 2505/3980/5062 2484/4149/5062 2525/4138/5062\nf 2525/4138/5063 2565/4139/5063 2550/4126/5063\nf 1700/4105/5064 1911/3090/5064 1892/4150/5064\nf 2748/4151/5065 2761/238/5065 2790/240/5065\nf 2792/1399/5066 2812/371/5066 2791/239/5066\nf 2672/4152/5067 2592/648/5067 2670/1761/5067\nf 1173/2270/5068 1050/2287/5068 558/635/5068\nf 2658/2884/5069 2693/2670/5069 2692/2671/5069\nf 2525/4138/5070 2542/4153/5070 2565/4139/5070\nf 2565/4139/5071 2577/4154/5071 2598/3920/5071\nf 2577/4154/5072 2599/3873/5072 2598/3920/5072\nf 2598/3920/5073 2599/3873/5073 2295/3872/5073\nf 2901/4155/5074 2175/3184/5074 2904/3186/5074\nf 2417/4156/5075 592/3226/5075 1676/3225/5075\nf 2905/4117/5076 1909/4157/5076 2906/2458/5076\nf 2498/2039/5077 2231/2299/5077 2515/2040/5077\nf 1909/4157/5078 2905/4117/5078 2409/3185/5078\nf 3030/4158/5079 3019/4159/5079 3020/4160/5079\nf 1887/1891/5080 1019/3215/5080 2902/2487/5080\nf 2154/4161/5081 1939/3496/5081 2145/3495/5081\nf 2036/3454/5082 2841/3159/5082 2867/3464/5082\nf 2484/4149/5083 2542/4153/5083 2525/4138/5083\nf 2542/4153/5084 2566/4162/5084 2565/4139/5084\nf 2566/4162/5085 2577/4154/5085 2565/4139/5085\nf 2752/4114/5086 2710/4122/5086 2820/3333/5086\nf 2827/4163/5087 2828/373/5087 2843/4164/5087\nf 2676/4123/5088 2674/265/5088 2718/4029/5088\nf 2428/97/5089 2437/4165/5089 2427/4166/5089\nf 1350/737/5090 1657/649/5090 1136/4100/5090\nf 2601/2264/5091 2421/4113/5091 2625/650/5091\nf 2601/2264/5092 2753/652/5092 2421/4113/5092\nf 2752/4114/5093 2820/3333/5093 2435/3335/5093\nf 2778/4147/5094 2750/733/5094 2733/4167/5094\nf 2734/4168/5095 2778/4147/5095 2733/4167/5095\nf 1891/4169/5096 1769/252/5096 2489/2898/5096\nf 2811/4170/5097 2828/373/5097 2827/4163/5097\nf 966/3334/5098 2820/3333/5098 2779/3187/5098\nf 3034/4171/5099 3058/4172/5099 3024/292/5099\nf 2437/4165/5100 2447/4173/5100 2455/3208/5100\nf 2427/4166/5101 2437/4165/5101 2455/3208/5101\nf 2752/4114/5102 2435/3335/5102 1702/4108/5102\nf 960/4174/5103 2486/4175/5103 2484/4149/5103\nf 2486/4175/5104 2485/4176/5104 2484/4149/5104\nf 2484/4149/5105 2485/4176/5105 2542/4153/5105\nf 2566/4162/5106 1063/4051/5106 2577/4154/5106\nf 1063/4051/5107 2599/3873/5107 2577/4154/5107\nf 2415/3148/5108 2443/848/5108 2452/4177/5108\nf 2753/652/5109 2645/4178/5109 2421/4113/5109\nf 2753/652/5110 2640/654/5110 2645/4178/5110\nf 2778/4179/5111 2794/4180/5111 2750/206/5111\nf 1769/252/5112 1891/4169/5112 1911/3090/5112\nf 169/4181/5113 2765/4182/5113 2601/2264/5113\nf 2644/4132/5114 2848/4183/5114 2641/4184/5114\nf 2641/4184/5115 2848/4183/5115 2453/4185/5115\nf 2453/4185/5116 2698/4137/5116 2676/4123/5116\nf 2699/264/5117 2210/4112/5117 2296/3860/5117\nf 2848/4183/5118 2459/2071/5118 2698/4137/5118\nf 2517/2072/5119 2459/2071/5119 2848/4183/5119\nf 1934/4012/5120 2445/4098/5120 2881/4010/5120\nf 2645/4178/5121 2640/654/5121 2609/266/5121\nf 2853/4186/5122 602/3241/5122 2846/3243/5122\nf 2887/250/5123 1769/252/5123 1911/3090/5123\nf 2706/3201/5124 2636/4130/5124 2668/807/5124\nf 2884/4187/5125 1686/3227/5125 1991/4188/5125\nf 2883/4189/5126 2884/4187/5126 1991/4188/5126\nf 2640/654/5127 2879/679/5127 2609/266/5127\nf 2485/4176/5128 2566/4162/5128 2542/4153/5128\nf 1964/2128/5129 3439/2130/5129 3471/3576/5129\nf 2566/4162/5130 1057/4190/5130 1063/4051/5130\nf 967/1517/5131 1611/4191/5131 1890/4192/5131\nf 1892/4150/5132 1496/4131/5132 2417/4156/5132\nf 1496/4131/5133 2641/4184/5133 2417/4156/5133\nf 2777/4193/5134 2813/3242/5134 2776/1398/5134\nf 2584/3877/5135 2567/3106/5135 1703/251/5135\nf 1902/4124/5136 2584/3877/5136 1703/251/5136\nf 2993/2176/5137 2457/3995/5137 2486/4194/5137\nf 2485/4176/5138 2551/4195/5138 2566/4162/5138\nf 2551/4195/5139 1057/4190/5139 2566/4162/5139\nf 602/3241/5140 1902/4124/5140 1703/251/5140\nf 1700/4105/5141 1892/4150/5141 1676/3225/5141\nf 2299/3901/5142 2707/4003/5142 2260/3871/5142\nf 2645/4178/5143 2609/266/5143 2600/268/5143\nf 2788/4196/5144 2842/4197/5144 2810/253/5144\nf 3371/683/5145 3370/685/5145 3359/4198/5145\nf 2675/4199/5146 2160/4042/5146 2303/1847/5146\nf 2425/3192/5147 2455/4200/5147 2163/4081/5147\nf 2595/3670/5148 2523/4201/5148 1829/3703/5148\nf 2780/2714/5149 2798/3235/5149 2173/2712/5149\nf 2638/3674/5150 2657/4202/5150 2655/3672/5150\nf 2657/4202/5151 2656/4203/5151 2655/3672/5151\nf 2457/3000/5152 2485/4176/5152 2486/4175/5152\nf 1393/2244/5153 1407/2700/5153 243/2245/5153\nf 1700/4105/5154 1676/3225/5154 2885/4109/5154\nf 1221/3916/5155 2815/3250/5155 2249/4204/5155\nf 2457/3000/5156 2487/4205/5156 2485/4176/5156\nf 2487/4205/5157 2526/4206/5157 2485/4176/5157\nf 2526/4206/5158 2551/4195/5158 2485/4176/5158\nf 1675/2665/5159 2479/4102/5159 1473/2666/5159\nf 1911/3090/5160 1891/4169/5160 1892/4150/5160\nf 2844/372/5161 2886/4106/5161 2843/4164/5161\nf 2842/4197/5162 2883/4189/5162 2869/1415/5162\nf 2791/239/5163 2828/373/5163 2811/4170/5163\nf 2790/240/5164 2791/239/5164 2811/4170/5164\nf 1407/2743/5165 620/1234/5165 243/1236/5165\nf 999/3979/5166 2541/3981/5166 1038/4115/5166\nf 2439/2906/5167 2993/2176/5167 955/2175/5167\nf 2749/3057/5168 2761/238/5168 2748/4151/5168\nf 1849/3270/5169 2499/1081/5169 2651/4207/5169\nf 2567/3106/5170 2584/3877/5170 2422/2070/5170\nf 2526/4206/5171 2527/4208/5171 2551/4195/5171\nf 2582/3079/5172 2561/2976/5172 2538/3058/5172\nf 2253/699/5173 2696/953/5173 2264/698/5173\nf 3214/4209/5174 3228/813/5174 3197/4210/5174\nf 3362/4211/5175 3348/2147/5175 3377/2567/5175\nf 3383/3849/5176 3422/3848/5176 3421/4212/5176\nf 984/4213/5177 2109/4097/5177 1430/3628/5177\nf 2626/4214/5178 2623/4215/5178 1933/4216/5178\nf 1849/3270/5179 2815/3250/5179 2499/1081/5179\nf 2439/2906/5180 2992/1879/5180 2457/3995/5180\nf 2457/3000/5181 2468/3002/5181 2487/4205/5181\nf 2025/3357/5182 2743/2866/5182 1997/4217/5182\nf 2873/4014/5183 2186/3971/5183 2782/4218/5183\nf 2860/4056/5184 2859/2208/5184 2830/2498/5184\nf 2859/2208/5185 2860/4056/5185 2064/2209/5185\nf 2313/3999/5186 2264/698/5186 2696/953/5186\nf 2730/1267/5187 2745/4219/5187 2810/253/5187\nf 2112/3602/5188 1902/4124/5188 602/3241/5188\nf 2527/4208/5189 2526/4206/5189 1007/4220/5189\nf 2112/3602/5190 602/3241/5190 2853/4186/5190\nf 2726/4221/5191 2670/1761/5191 1674/1198/5191\nf 2692/4222/5192 2691/806/5192 2656/805/5192\nf 2799/4101/5193 1136/4100/5193 1702/4108/5193\nf 3227/2262/5194 3240/3903/5194 3226/4088/5194\nf 2747/4223/5195 2811/4170/5195 2789/4224/5195\nf 2811/4170/5196 2827/4163/5196 2789/4224/5196\nf 2659/2882/5197 2639/4225/5197 2660/3047/5197\nf 3435/3053/5198 1894/383/5198 3442/1953/5198\nf 2796/4134/5199 2854/3660/5199 2012/2349/5199\nf 2129/3828/5200 1832/3073/5200 1928/678/5200\nf 2660/3047/5201 2694/2883/5201 2659/2882/5201\nf 3511/1762/5202 1674/1198/5202 2670/1761/5202\nf 2454/845/5203 2198/844/5203 2330/3729/5203\nf 2690/4226/5204 2747/4223/5204 2746/4227/5204\nf 2860/4056/5205 2325/3940/5205 2064/2209/5205\nf 2548/271/5206 3461/270/5206 2808/4228/5206\nf 2608/4229/5207 2562/4230/5207 2563/4231/5207\nf 2636/4130/5208 2654/4232/5208 2635/4233/5208\nf 2658/4234/5209 2692/4222/5209 2657/4235/5209\nf 3188/3457/5210 3189/1637/5210 3211/2168/5210\nf 2847/4236/5211 2853/4186/5211 2846/3243/5211\nf 1905/2500/5212 1711/2216/5212 1927/2870/5212\nf 2488/532/5213 2487/4205/5213 2468/3002/5213\nf 1329/2726/5214 1713/2980/5214 1649/3214/5214\nf 2795/4237/5215 2847/4236/5215 2794/4180/5215\nf 2845/4104/5216 2886/4106/5216 2844/372/5216\nf 551/4238/5217 2601/2264/5217 1666/736/5217\nf 2636/4130/5218 2690/4226/5218 2654/4232/5218\nf 2292/125/5219 2313/4015/5219 2696/580/5219\nf 2859/2208/5220 1203/4239/5220 1185/2499/5220\nf 2325/3940/5221 2891/3835/5221 2064/2209/5221\nf 2883/4189/5222 1991/4188/5222 2899/4240/5222\nf 2502/3650/5223 2539/4241/5223 2522/3651/5223\nf 1751/4242/5224 2464/1921/5224 2502/3650/5224\nf 2732/4243/5225 2731/1400/5225 2719/3202/5225\nf 2459/2071/5226 2735/263/5226 2698/4137/5226\nf 1867/3673/5227 2658/4244/5227 2638/3674/5227\nf 2351/3526/5228 2436/2295/5228 2465/2145/5228\nf 2659/2882/5229 2658/2884/5229 1867/4245/5229\nf 2992/3001/5230 2440/4246/5230 2468/3002/5230\nf 2468/3002/5231 2458/530/5231 2488/532/5231\nf 2585/4247/5232 1060/3907/5232 3422/3848/5232\nf 2249/4248/5233 1849/3272/5233 2341/4249/5233\nf 1082/3890/5234 2602/4136/5234 2662/2367/5234\nf 2505/1990/5235 988/448/5235 2483/2073/5235\nf 2636/4130/5236 2635/4233/5236 2618/4250/5236\nf 2595/3705/5237 2655/3557/5237 2608/4229/5237\nf 2658/4234/5238 2657/4235/5238 2638/4251/5238\nf 1082/3890/5239 2662/2367/5239 1107/2359/5239\nf 603/4252/5240 592/3226/5240 1508/4253/5240\nf 2734/4168/5241 2721/732/5241 2722/3730/5241\nf 1125/2226/5242 2713/2358/5242 2784/2224/5242\nf 2326/3942/5243 2269/3941/5243 2784/2224/5243\nf 37/959/5244 1490/1412/5244 1532/3450/5244\nf 3499/1910/5245 3424/1002/5245 3426/1004/5245\nf 2827/4163/5246 2842/4197/5246 2788/4196/5246\nf 2789/4224/5247 2827/4163/5247 2788/4196/5247\nf 2608/4229/5248 2637/4254/5248 2618/4250/5248\nf 2827/4163/5249 2843/4164/5249 2883/4189/5249\nf 2595/3705/5250 2608/4229/5250 2583/3218/5250\nf 2501/2757/5251 3434/869/5251 2839/1640/5251\nf 2624/3013/5252 566/3014/5252 2445/4098/5252\nf 2440/4246/5253 2458/530/5253 2468/3002/5253\nf 1715/3017/5254 210/1284/5254 1539/70/5254\nf 2912/4255/5255 2319/4256/5255 2371/2486/5255\nf 1650/1311/5256 512/1353/5256 511/1302/5256\nf 2713/2358/5257 2700/4257/5257 2784/2224/5257\nf 2755/4258/5258 2326/3942/5258 2784/2224/5258\nf 2621/4259/5259 1908/2236/5259 1901/3579/5259\nf 1116/2276/5260 3466/1713/5260 3488/1712/5260\nf 2562/4230/5261 2618/4250/5261 2582/3079/5261\nf 1933/4216/5262 2408/4099/5262 603/4252/5262\nf 1955/4144/5263 2751/4143/5263 1941/4260/5263\nf 3360/4261/5264 3383/3849/5264 3421/4212/5264\nf 2506/4262/5265 2528/4263/5265 1023/1856/5265\nf 1023/1856/5266 2528/4263/5266 2544/3606/5266\nf 1072/2261/5267 2552/701/5267 2544/4264/5267\nf 2432/4265/5268 2412/4266/5268 2406/3468/5268\nf 1686/3227/5269 592/3226/5269 603/4252/5269\nf 2662/2367/5270 2700/4257/5270 2713/2358/5270\nf 2700/4257/5271 2755/4258/5271 2784/2224/5271\nf 2831/4267/5272 2326/3942/5272 2755/4258/5272\nf 1890/4192/5273 603/4252/5273 2408/4099/5273\nf 2890/1848/5274 1933/4216/5274 2675/4199/5274\nf 2591/3020/5275 2672/4152/5275 2726/4221/5275\nf 2779/3187/5276 2624/3013/5276 2445/4098/5276\nf 2990/2560/5277 2429/1886/5277 2440/1881/5277\nf 1598/2991/5278 2781/288/5278 215/2844/5278\nf 2445/4098/5279 566/3014/5279 2177/4023/5279\nf 1145/3380/5280 2880/3363/5280 2110/3362/5280\nf 2027/3249/5281 2161/1082/5281 2499/1081/5281\nf 2988/4268/5282 2987/4269/5282 2966/4270/5282\nf 2326/3942/5283 2831/4267/5283 2861/3926/5283\nf 2828/373/5284 2844/372/5284 2843/4164/5284\nf 2873/4014/5285 2207/3965/5285 2186/3971/5285\nf 1880/3657/5286 2223/1186/5286 2232/3429/5286\nf 3221/4271/5287 47/99/5287 3136/3530/5287\nf 1898/2134/5288 1272/3261/5288 2852/4272/5288\nf 2747/4223/5289 2789/4224/5289 2746/4227/5289\nf 2608/4229/5290 2618/4250/5290 2562/4230/5290\nf 2734/4168/5291 2733/4167/5291 2721/732/5291\nf 2840/4273/5292 2641/4184/5292 2623/4215/5292\nf 2710/4122/5293 2564/3188/5293 2779/3187/5293\nf 2751/4145/5294 2778/4147/5294 1941/3492/5294\nf 2855/4107/5295 2575/3627/5295 1473/2666/5295\nf 2506/4262/5296 2507/4274/5296 2528/4263/5296\nf 2528/4275/5297 2568/4276/5297 2544/4264/5297\nf 2568/4277/5298 2602/4136/5298 1072/4135/5298\nf 2627/4278/5299 2678/4279/5299 2700/4280/5299\nf 2662/4281/5300 2627/4278/5300 2700/4280/5300\nf 2700/4257/5301 2756/4282/5301 2755/4258/5301\nf 2618/4250/5302 2635/4233/5302 2622/4283/5302\nf 2690/4226/5303 2704/3102/5303 2622/4283/5303\nf 2635/4233/5304 2654/4232/5304 2622/4283/5304\nf 2582/3079/5305 2618/4250/5305 2622/4283/5305\nf 2645/4178/5306 2564/3188/5306 2710/4122/5306\nf 2731/1400/5307 2749/3057/5307 2719/3202/5307\nf 2393/636/5308 837/2427/5308 2168/695/5308\nf 2545/4284/5309 2553/4285/5309 2568/4277/5309\nf 2528/4263/5310 2545/4284/5310 2568/4277/5310\nf 2553/4285/5311 2627/4286/5311 2602/4136/5311\nf 2678/4287/5312 2679/4288/5312 2700/4257/5312\nf 2679/4288/5313 2756/4282/5313 2700/4257/5313\nf 2771/4289/5314 2831/4267/5314 2755/4258/5314\nf 2756/4282/5315 2771/4289/5315 2755/4258/5315\nf 2274/3295/5316 2350/3584/5316 2872/843/5316\nf 2591/3020/5317 2798/3235/5317 2672/4152/5317\nf 1662/651/5318 2625/650/5318 1702/4108/5318\nf 2829/3163/5319 1933/4216/5319 2890/1848/5319\nf 2139/3879/5320 188/3494/5320 1336/3548/5320\nf 2775/3505/5321 2002/3463/5321 1969/3535/5321\nf 1868/4290/5322 2639/4225/5322 1867/4245/5322\nf 2564/3188/5323 2645/4178/5323 2600/268/5323\nf 2077/4119/5324 2112/3602/5324 2853/4186/5324\nf 2695/3046/5325 2694/2883/5325 2660/3047/5325\nf 1780/3563/5326 1751/3562/5326 2502/3659/5326\nf 2507/4274/5327 2545/4284/5327 2528/4263/5327\nf 2568/4277/5328 2553/4285/5328 2602/4136/5328\nf 2771/4289/5329 2832/4291/5329 2831/4267/5329\nf 3372/2414/5330 3371/683/5330 3342/165/5330\nf 989/2325/5331 2488/4292/5331 979/2380/5331\nf 2516/3216/5332 2503/2146/5332 2523/3217/5332\nf 2624/3013/5333 2564/3188/5333 1987/4142/5333\nf 2490/4293/5334 2508/4294/5334 2507/4274/5334\nf 2508/4294/5335 2518/4295/5335 2507/4274/5335\nf 2507/4274/5336 2518/4295/5336 2545/4284/5336\nf 2586/4296/5337 2627/4286/5337 2553/4285/5337\nf 2586/4296/5338 2663/4297/5338 2627/4286/5338\nf 2627/4286/5339 2663/4297/5339 2678/4287/5339\nf 2678/4287/5340 2663/4297/5340 2679/4288/5340\nf 2831/4267/5341 2832/4291/5341 2861/3926/5341\nf 2832/4291/5342 2862/2392/5342 2861/3926/5342\nf 396/152/5343 1442/2571/5343 1439/273/5343\nf 2562/4230/5344 2582/3079/5344 2538/3058/5344\nf 2660/3047/5345 3253/4298/5345 1889/2448/5345\nf 2483/2073/5346 960/2177/5346 2484/4148/5346\nf 2745/4219/5347 2788/4196/5347 2810/253/5347\nf 2480/1920/5348 2503/2146/5348 2516/3216/5348\nf 3506/91/5349 3444/93/5349 3510/1467/5349\nf 2455/3208/5350 2447/4173/5350 2466/3206/5350\nf 1891/4169/5351 1496/4131/5351 1892/4150/5351\nf 2854/3077/5352 2055/3641/5352 2012/4299/5352\nf 2490/4293/5353 2470/4300/5353 2508/4294/5353\nf 2545/4284/5354 2554/4301/5354 2553/4285/5354\nf 2554/4301/5355 2578/4302/5355 2553/4285/5355\nf 2578/4302/5356 2586/4296/5356 2553/4285/5356\nf 2351/3526/5357 2994/4094/5357 3003/4303/5357\nf 2732/4304/5358 2693/2670/5358 2694/2883/5358\nf 1674/1198/5359 3511/1762/5359 3430/1199/5359\nf 2518/4295/5360 2529/4305/5360 2545/4284/5360\nf 2545/4284/5361 2529/4305/5361 2554/4301/5361\nf 2663/4297/5362 2680/4306/5362 2679/4288/5362\nf 2727/4307/5363 2679/4288/5363 2680/4306/5363\nf 2727/4307/5364 2756/4282/5364 2679/4288/5364\nf 2727/4307/5365 2772/4308/5365 2756/4282/5365\nf 2772/4308/5366 2771/4289/5366 2756/4282/5366\nf 2771/4289/5367 2772/4308/5367 2832/4291/5367\nf 2770/2225/5368 2860/4056/5368 2830/2498/5368\nf 2869/1415/5369 2883/4189/5369 2899/4240/5369\nf 194/1296/5370 166/1295/5370 178/1320/5370\nf 2454/845/5371 2274/3295/5371 2872/843/5371\nf 1429/4309/5372 1231/4310/5372 1099/4311/5372\nf 3241/309/5373 3213/2206/5373 3173/310/5373\nf 3002/4082/5374 2351/3526/5374 3003/4303/5374\nf 981/2431/5375 2460/4312/5375 2470/4300/5375\nf 2586/4296/5376 2628/4313/5376 2663/4297/5376\nf 2628/4313/5377 2664/4314/5377 2663/4297/5377\nf 2663/4297/5378 2664/4314/5378 2680/4306/5378\nf 2746/4227/5379 2788/4196/5379 2745/4219/5379\nf 2746/4227/5380 2745/4219/5380 2704/3102/5380\nf 2624/3013/5381 1987/4142/5381 1697/311/5381\nf 2464/1921/5382 2480/1920/5382 2502/3650/5382\nf 2481/2144/5383 2503/2146/5383 2480/1920/5383\nf 1987/4142/5384 2600/268/5384 2702/1076/5384\nf 2470/4300/5385 2509/4315/5385 2508/4294/5385\nf 2509/4315/5386 2519/4316/5386 2518/4295/5386\nf 2508/4294/5387 2509/4315/5387 2518/4295/5387\nf 2518/4295/5388 2519/4316/5388 2529/4305/5388\nf 2529/4305/5389 2530/4317/5389 2554/4301/5389\nf 2664/4314/5390 2681/4318/5390 2680/4306/5390\nf 2681/4318/5391 2727/4307/5391 2680/4306/5391\nf 2772/4308/5392 2785/4319/5392 2832/4291/5392\nf 2785/4319/5393 2833/4320/5393 2832/4291/5393\nf 2832/4291/5394 2833/4320/5394 2862/2392/5394\nf 1072/2261/5395 2544/4264/5395 2568/4276/5395\nf 349/3412/5396 350/4321/5396 184/4322/5396\nf 2597/4120/5397 2278/3921/5397 2596/3895/5397\nf 2872/843/5398 2227/1441/5398 2198/844/5398\nf 2789/4224/5399 2788/4196/5399 2746/4227/5399\nf 2298/64/5400 2205/3867/5400 2480/1920/5400\nf 2762/208/5401 2731/1400/5401 2732/4243/5401\nf 981/2431/5402 2419/2430/5402 2460/4312/5402\nf 2460/4312/5403 2509/4315/5403 2470/4300/5403\nf 2530/4317/5404 2569/4323/5404 2554/4301/5404\nf 2554/4301/5405 2569/4323/5405 2578/4302/5405\nf 2603/4324/5406 2586/4296/5406 2578/4302/5406\nf 2569/4323/5407 2603/4324/5407 2578/4302/5407\nf 2833/4320/5408 2876/2839/5408 2862/2392/5408\nf 1116/2276/5409 163/2652/5409 3466/1713/5409\nf 2273/4011/5410 2296/3860/5410 2210/4112/5410\nf 2704/3102/5411 2745/4219/5411 2730/1267/5411\nf 1534/3131/5412 1611/4191/5412 2897/2566/5412\nf 1189/1986/5413 1111/1971/5413 965/1978/5413\nf 2645/4178/5414 2710/4122/5414 2421/4113/5414\nf 2502/3650/5415 2516/3216/5415 2539/4241/5415\nf 2961/2937/5416 2960/3049/5416 2945/4006/5416\nf 2205/3867/5417 2481/2144/5417 2480/1920/5417\nf 2762/208/5418 2776/1398/5418 2731/1400/5418\nf 2423/2030/5419 2855/4107/5419 2479/4102/5419\nf 2417/4156/5420 1508/4253/5420 592/3226/5420\nf 2372/3823/5421 2419/2430/5421 963/2432/5421\nf 2519/4316/5422 2530/4317/5422 2529/4305/5422\nf 2586/4296/5423 2603/4324/5423 2628/4313/5423\nf 2681/4318/5424 2738/4325/5424 2727/4307/5424\nf 2757/4326/5425 2772/4308/5425 2727/4307/5425\nf 2757/4326/5426 2785/4319/5426 2772/4308/5426\nf 1710/1633/5427 2202/4075/5427 2535/2/5427\nf 1890/4192/5428 2408/4099/5428 1793/1518/5428\nf 2843/4164/5429 2886/4106/5429 2885/4109/5429\nf 2842/4197/5430 2827/4163/5430 2883/4189/5430\nf 2516/3216/5431 2583/3218/5431 2539/4241/5431\nf 2637/4254/5432 2668/807/5432 2636/4130/5432\nf 2783/3021/5433 3498/1197/5433 3429/225/5433\nf 2215/2294/5434 2138/2460/5434 2807/3949/5434\nf 1666/736/5435 2625/650/5435 1657/649/5435\nf 2419/2430/5436 2448/4327/5436 2460/4312/5436\nf 2460/4312/5437 2471/4328/5437 2509/4315/5437\nf 2628/4313/5438 2646/4329/5438 2664/4314/5438\nf 2664/4314/5439 2646/4329/5439 2681/4318/5439\nf 2757/4326/5440 2727/4307/5440 2738/4325/5440\nf 2834/4330/5441 2833/4320/5441 2785/4319/5441\nf 2833/4320/5442 2834/4330/5442 2876/2839/5442\nf 2834/4330/5443 1959/4038/5443 2876/2839/5443\nf 2798/3235/5444 2780/2714/5444 2672/4152/5444\nf 1662/651/5445 1702/4108/5445 1136/4100/5445\nf 2675/4199/5446 2303/1847/5446 2890/1848/5446\nf 2017/2157/5447 3182/562/5447 3364/2835/5447\nf 2325/4331/5448 2860/4332/5448 2269/4333/5448\nf 2419/2430/5449 2430/3822/5449 2448/4327/5449\nf 2448/4327/5450 2471/4328/5450 2460/4312/5450\nf 2471/4328/5451 2491/4334/5451 2509/4315/5451\nf 2491/4334/5452 2510/4335/5452 2509/4315/5452\nf 2509/4315/5453 2510/4335/5453 2519/4316/5453\nf 2510/4335/5454 2555/4336/5454 2530/4317/5454\nf 2519/4316/5455 2510/4335/5455 2530/4317/5455\nf 2603/4324/5456 2647/4337/5456 2628/4313/5456\nf 2647/4337/5457 2646/4329/5457 2628/4313/5457\nf 2646/4329/5458 2738/4325/5458 2681/4318/5458\nf 2563/4231/5459 2562/4230/5459 2538/3058/5459\nf 2563/4231/5460 2538/3058/5460 2522/3651/5460\nf 1743/3087/5461 2447/4173/5461 2456/3030/5461\nf 2583/3218/5462 2563/4231/5462 2539/4241/5462\nf 2845/4104/5463 2844/372/5463 2812/371/5463\nf 1666/736/5464 2601/2264/5464 2625/650/5464\nf 2530/4317/5465 2555/4336/5465 2569/4323/5465\nf 2555/4336/5466 2603/4324/5466 2569/4323/5466\nf 2738/4325/5467 2773/4338/5467 2757/4326/5467\nf 2773/4338/5468 2800/4339/5468 2785/4319/5468\nf 2757/4326/5469 2773/4338/5469 2785/4319/5469\nf 2800/4339/5470 2821/4340/5470 2785/4319/5470\nf 2821/4340/5471 2834/4330/5471 2785/4319/5471\nf 2821/4340/5472 1959/4038/5472 2834/4330/5472\nf 2654/4232/5473 2690/4226/5473 2622/4283/5473\nf 2690/4226/5474 2746/4227/5474 2704/3102/5474\nf 3342/165/5475 3371/683/5475 3326/166/5475\nf 2006/769/5476 2157/1187/5476 2223/1186/5476\nf 2006/769/5477 2182/768/5477 2157/1187/5477\nf 2173/2712/5478 2798/3235/5478 2856/3977/5478\nf 2810/253/5479 2842/4197/5479 2869/1415/5479\nf 2430/3822/5480 2441/4341/5480 2448/4327/5480\nf 2441/4341/5481 2471/4328/5481 2448/4327/5481\nf 2491/4334/5482 2511/4342/5482 2510/4335/5482\nf 2555/4336/5483 2556/4343/5483 2603/4324/5483\nf 2714/4344/5484 2773/4338/5484 2738/4325/5484\nf 1967/3268/5485 1849/3272/5485 2651/2101/5485\nf 1611/4191/5486 603/4252/5486 1890/4192/5486\nf 1991/4188/5487 603/4252/5487 1611/4191/5487\nf 1991/4188/5488 1611/4191/5488 2899/4240/5488\nf 2027/3249/5489 2499/1081/5489 2815/3250/5489\nf 2371/2486/5490 1741/4078/5490 1887/1891/5490\nf 1880/3657/5491 2006/769/5491 2223/1186/5491\nf 2874/4116/5492 2818/3019/5492 2783/3021/5492\nf 2417/4156/5493 2840/4273/5493 1508/4253/5493\nf 2490/4293/5494 2507/4274/5494 2506/4262/5494\nf 1959/4038/5495 2282/2408/5495 2250/2407/5495\nf 2510/4335/5496 2511/4342/5496 2555/4336/5496\nf 2556/4343/5497 2604/4345/5497 2603/4324/5497\nf 2604/4345/5498 2648/4346/5498 2647/4337/5498\nf 2603/4324/5499 2604/4345/5499 2647/4337/5499\nf 2646/4329/5500 2714/4344/5500 2738/4325/5500\nf 2714/4344/5501 2739/4347/5501 2773/4338/5501\nf 2739/4347/5502 2800/4339/5502 2773/4338/5502\nf 1959/4038/5503 2821/4340/5503 2282/2408/5503\nf 3371/683/5504 3359/4198/5504 3326/166/5504\nf 857/1783/5505 3509/1702/5505 3499/1910/5505\nf 1686/3227/5506 603/4252/5506 1991/4188/5506\nf 2885/4109/5507 1676/3225/5507 2884/4187/5507\nf 2583/3218/5508 2608/4229/5508 2563/4231/5508\nf 1160/3545/5509 3431/2804/5509 3432/2531/5509\nf 2441/4341/5510 2491/4334/5510 2471/4328/5510\nf 2511/4342/5511 2531/4348/5511 2555/4336/5511\nf 2648/4346/5512 2646/4329/5512 2647/4337/5512\nf 2648/4346/5513 2682/4349/5513 2646/4329/5513\nf 2646/4329/5514 2682/4349/5514 2714/4344/5514\nf 2850/4350/5515 2821/4340/5515 2800/4339/5515\nf 2739/4347/5516 2850/4350/5516 2800/4339/5516\nf 1996/2424/5517 2251/3912/5517 2707/4003/5517\nf 1987/4142/5518 2702/1076/5518 1697/311/5518\nf 2698/4137/5519 2735/263/5519 2674/265/5519\nf 2299/3901/5520 2141/770/5520 2006/769/5520\nf 2313/3999/5521 2314/4008/5521 2642/4007/5521\nf 2488/532/5522 1007/4220/5522 2487/4205/5522\nf 2430/3822/5523 2431/4351/5523 2441/4341/5523\nf 2441/4341/5524 2461/4352/5524 2491/4334/5524\nf 2491/4334/5525 2492/4353/5525 2511/4342/5525\nf 2555/4336/5526 2531/4348/5526 2556/4343/5526\nf 2714/4344/5527 2701/4354/5527 2739/4347/5527\nf 2801/4355/5528 2850/4350/5528 2739/4347/5528\nf 2821/4340/5529 2877/3891/5529 2282/2408/5529\nf 3434/1469/5530 3438/1471/5530 453/1781/5530\nf 3002/4082/5531 3020/4356/5531 2216/4077/5531\nf 2006/769/5532 1663/4357/5532 2299/3901/5532\nf 2880/2711/5533 1145/3970/5533 2317/3953/5533\nf 2818/3019/5534 2856/3977/5534 2798/3235/5534\nf 3460/1116/5535 3440/2538/5535 3439/2120/5535\nf 2372/3823/5536 2410/4358/5536 2430/3822/5536\nf 2431/4351/5537 2449/4359/5537 2441/4341/5537\nf 2441/4341/5538 2449/4359/5538 2461/4352/5538\nf 2461/4352/5539 2492/4353/5539 2491/4334/5539\nf 2570/4360/5540 2556/4343/5540 2531/4348/5540\nf 2570/4360/5541 2604/4345/5541 2556/4343/5541\nf 2682/4349/5542 2701/4354/5542 2714/4344/5542\nf 2701/4354/5543 2759/4361/5543 2739/4347/5543\nf 2759/4361/5544 2758/4362/5544 2739/4347/5544\nf 2758/4362/5545 2801/4355/5545 2739/4347/5545\nf 2423/2030/5546 2575/3627/5546 2855/4107/5546\nf 2637/4254/5547 2636/4130/5547 2618/4250/5547\nf 1898/2134/5548 2062/2136/5548 2108/3276/5548\nf 2410/4358/5549 2431/4351/5549 2430/3822/5549\nf 2492/4353/5550 2512/4363/5550 2511/4342/5550\nf 2511/4342/5551 2512/4363/5551 2531/4348/5551\nf 2557/4364/5552 2570/4360/5552 2531/4348/5552\nf 2682/4349/5553 2683/4365/5553 2701/4354/5553\nf 2683/4365/5554 2759/4361/5554 2701/4354/5554\nf 2801/4355/5555 2835/4366/5555 2850/4350/5555\nf 2863/4367/5556 2821/4340/5556 2850/4350/5556\nf 2863/4367/5557 2877/3891/5557 2821/4340/5557\nf 2434/267/5558 2711/1634/5558 2543/1935/5558\nf 2387/3431/5559 2166/3656/5559 2232/3429/5559\nf 2364/2425/5560 1880/3657/5560 2166/3656/5560\nf 2364/2425/5561 2006/769/5561 1880/3657/5561\nf 2006/769/5562 2364/2425/5562 1663/4357/5562\nf 2858/224/5563 2874/4116/5563 2783/3021/5563\nf 1700/4105/5564 2870/3091/5564 1911/3090/5564\nf 1697/311/5565 2642/4007/5565 566/3014/5565\nf 2995/4368/5566 2994/4094/5566 2205/3867/5566\nf 2376/4009/5567 566/3014/5567 2642/4007/5567\nf 2512/4363/5568 2520/4369/5568 2531/4348/5568\nf 2520/4369/5569 2557/4364/5569 2531/4348/5569\nf 2557/4364/5570 2571/4370/5570 2570/4360/5570\nf 2571/4370/5571 2605/4371/5571 2570/4360/5571\nf 2570/4360/5572 2605/4371/5572 2604/4345/5572\nf 2604/4345/5573 2605/4371/5573 2648/4346/5573\nf 2605/4371/5574 2629/4372/5574 2648/4346/5574\nf 2835/4366/5575 2863/4367/5575 2850/4350/5575\nf 1508/4253/5576 1933/4216/5576 603/4252/5576\nf 2707/4003/5577 2299/3901/5577 1663/4357/5577\nf 2232/3429/5578 2223/1186/5578 2330/3729/5578\nf 2626/4214/5579 2840/4273/5579 2623/4215/5579\nf 2421/4113/5580 2710/4122/5580 2752/4114/5580\nf 2404/4373/5581 2411/4374/5581 2410/4358/5581\nf 2403/2454/5582 2404/2434/5582 2410/2527/5582\nf 2410/4358/5583 2411/4374/5583 2431/4351/5583\nf 2683/4365/5584 2682/4349/5584 2648/4346/5584\nf 2629/4372/5585 2683/4365/5585 2648/4346/5585\nf 2822/4375/5586 2801/4355/5586 2758/4362/5586\nf 2801/4355/5587 2822/4375/5587 2835/4366/5587\nf 2863/4367/5588 2285/2534/5588 2877/3891/5588\nf 2285/2534/5589 233/3883/5589 2877/3891/5589\nf 2783/3021/5590 2726/4221/5590 1674/1198/5590\nf 3420/4376/5591 1491/2933/5591 3404/4377/5591\nf 1751/3562/5592 1731/3549/5592 2446/3567/5592\nf 2598/3920/5593 2278/3921/5593 2597/4120/5593\nf 2242/2406/5594 233/3883/5594 2266/3679/5594\nf 2234/4018/5595 2718/4029/5595 2296/3860/5595\nf 2128/4378/5596 551/4238/5596 1666/736/5596\nf 2674/265/5597 2296/3860/5597 2718/4029/5597\nf 2472/4379/5598 2492/4353/5598 2461/4352/5598\nf 2472/4380/5599 2493/4381/5599 2512/4382/5599\nf 2492/4383/5600 2472/4380/5600 2512/4382/5600\nf 2520/4369/5601 2558/4384/5601 2557/4364/5601\nf 2557/4364/5602 2558/4384/5602 2571/4370/5602\nf 2748/4151/5603 2790/240/5603 2747/4223/5603\nf 2790/240/5604 2811/4170/5604 2747/4223/5604\nf 2167/3477/5605 2307/2426/5605 2610/3637/5605\nf 551/4238/5606 169/4181/5606 2601/2264/5606\nf 2269/3941/5607 2770/2225/5607 2784/2224/5607\nf 2364/2425/5608 2707/4003/5608 1663/4357/5608\nf 2502/3650/5609 2480/1920/5609 2516/3216/5609\nf 2873/4014/5610 2782/4218/5610 2858/224/5610\nf 2411/4374/5611 2420/4385/5611 2431/4351/5611\nf 2420/4385/5612 2449/4359/5612 2431/4351/5612\nf 2493/4386/5613 2513/4387/5613 2512/4363/5613\nf 2512/4363/5614 2513/4387/5614 2520/4369/5614\nf 2558/4384/5615 2587/4388/5615 2571/4370/5615\nf 2571/4370/5616 2587/4388/5616 2605/4371/5616\nf 2665/4389/5617 2683/4365/5617 2629/4372/5617\nf 2759/4361/5618 2822/4375/5618 2758/4362/5618\nf 2822/4375/5619 2836/4390/5619 2835/4366/5619\nf 2141/770/5620 2299/3901/5620 2035/3391/5620\nf 3101/1410/5621 3100/4127/5621 3057/1411/5621\nf 2404/4373/5622 2412/4266/5622 2411/4374/5622\nf 2411/4374/5623 2412/4266/5623 2420/4385/5623\nf 2449/4359/5624 2462/4391/5624 2461/4352/5624\nf 2461/4352/5625 2462/4391/5625 2472/4379/5625\nf 2520/4369/5626 2546/4392/5626 2558/4384/5626\nf 2587/4388/5627 2611/4393/5627 2605/4371/5627\nf 2605/4371/5628 2611/4393/5628 2629/4372/5628\nf 2683/4365/5629 2665/4389/5629 2759/4361/5629\nf 2836/4390/5630 2878/4394/5630 2835/4366/5630\nf 2878/4394/5631 2863/4367/5631 2835/4366/5631\nf 2878/4394/5632 2893/4395/5632 2863/4367/5632\nf 2893/4395/5633 2285/2534/5633 2863/4367/5633\nf 2655/3557/5634 2637/4254/5634 2608/4229/5634\nf 2196/3985/5635 2166/3656/5635 2387/3431/5635\nf 2055/3597/5636 2853/4396/5636 2012/2349/5636\nf 1891/4169/5637 2489/2898/5637 1496/4131/5637\nf 2779/3187/5638 2445/4098/5638 1934/4012/5638\nf 2450/4397/5639 2449/4359/5639 2420/4385/5639\nf 2449/4359/5640 2450/4397/5640 2462/4391/5640\nf 2462/4398/5641 2493/4381/5641 2472/4380/5641\nf 2587/4388/5642 2630/4399/5642 2611/4393/5642\nf 2629/4372/5643 2611/4393/5643 2665/4389/5643\nf 2665/4389/5644 2760/4400/5644 2759/4361/5644\nf 2759/4361/5645 2760/4400/5645 2822/4375/5645\nf 2721/732/5646 2694/2883/5646 2695/3046/5646\nf 2721/732/5647 2720/734/5647 2694/2883/5647\nf 2846/3243/5648 2813/3242/5648 2777/4193/5648\nf 2726/4221/5649 2672/4152/5649 2670/1761/5649\nf 1496/4131/5650 2644/4132/5650 2641/4184/5650\nf 2873/4014/5651 2858/224/5651 2239/3991/5651\nf 2600/268/5652 2543/1935/5652 2702/1076/5652\nf 2404/4373/5653 2405/4401/5653 2412/4266/5653\nf 2432/4265/5654 2450/4397/5654 2420/4385/5654\nf 2450/4397/5655 2463/4402/5655 2462/4391/5655\nf 2462/4398/5656 2463/4403/5656 2493/4381/5656\nf 2513/4387/5657 2546/4392/5657 2520/4369/5657\nf 2558/4384/5658 2546/4392/5658 2587/4388/5658\nf 2587/4388/5659 2588/4404/5659 2630/4399/5659\nf 2611/4393/5660 2666/4405/5660 2665/4389/5660\nf 2760/4400/5661 2824/4406/5661 2822/4375/5661\nf 2822/4375/5662 2823/4407/5662 2836/4390/5662\nf 2823/4407/5663 2851/4408/5663 2836/4390/5663\nf 2836/4390/5664 2851/4408/5664 2878/4394/5664\nf 2782/4218/5665 2871/3978/5665 2874/4116/5665\nf 2765/4182/5666 1732/3803/5666 2723/653/5666\nf 2634/362/5667 2622/4283/5667 2653/2305/5667\nf 2319/4256/5668 1741/4078/5668 2371/2486/5668\nf 2151/3742/5669 2764/4076/5669 2196/3985/5669\nf 179/1345/5670 178/1320/5670 166/1295/5670\nf 2687/2234/5671 2703/3525/5671 1931/2235/5671\nf 2870/3091/5672 2886/4106/5672 2845/4104/5672\nf 2463/4403/5673 2494/4409/5673 2493/4381/5673\nf 2494/4410/5674 2521/4411/5674 2513/4387/5674\nf 2493/4386/5675 2494/4410/5675 2513/4387/5675\nf 2521/4411/5676 2546/4392/5676 2513/4387/5676\nf 2546/4392/5677 2588/4404/5677 2587/4388/5677\nf 2666/4405/5678 2684/4412/5678 2665/4389/5678\nf 2665/4389/5679 2684/4412/5679 2760/4400/5679\nf 2822/4375/5680 2824/4406/5680 2823/4407/5680\nf 2316/2535/5681 2285/2534/5681 2893/4395/5681\nf 567/4413/5682 2307/2426/5682 2196/3985/5682\nf 2636/4130/5683 2705/4129/5683 2690/4226/5683\nf 2702/1076/5684 3486/1075/5684 1697/311/5684\nf 2420/4385/5685 2412/4266/5685 2432/4265/5685\nf 2546/4392/5686 2559/4414/5686 2588/4404/5686\nf 2588/4404/5687 2612/4415/5687 2630/4399/5687\nf 2630/4399/5688 2666/4405/5688 2611/4393/5688\nf 2740/4416/5689 2824/4406/5689 2760/4400/5689\nf 951/1965/5690 952/2837/5690 962/1964/5690\nf 2539/4241/5691 2563/4231/5691 2522/3651/5691\nf 2298/64/5692 2464/1921/5692 2446/1444/5692\nf 2239/3991/5693 2767/226/5693 2696/953/5693\nf 2829/3163/5694 2890/1848/5694 1709/2836/5694\nf 2521/4411/5695 2559/4414/5695 2546/4392/5695\nf 2559/4414/5696 2589/4417/5696 2588/4404/5696\nf 2588/4404/5697 2589/4417/5697 2612/4415/5697\nf 2684/4412/5698 2715/4418/5698 2760/4400/5698\nf 2760/4400/5699 2715/4418/5699 2740/4416/5699\nf 2824/4406/5700 2825/4419/5700 2823/4407/5700\nf 2823/4407/5701 2825/4419/5701 2851/4408/5701\nf 2864/4085/5702 2878/4394/5702 2851/4408/5702\nf 2864/4085/5703 2893/4395/5703 2878/4394/5703\nf 2764/4076/5704 2209/2292/5704 567/4413/5704\nf 2644/4132/5705 2517/2072/5705 2848/4183/5705\nf 2415/3148/5706 2409/3150/5706 2175/3193/5706\nf 2783/3021/5707 2591/3020/5707 2726/4221/5707\nf 2705/4129/5708 2747/4223/5708 2690/4226/5708\nf 2767/226/5709 2239/3991/5709 2858/224/5709\nf 2405/4401/5710 2406/3468/5710 2412/4266/5710\nf 2494/4410/5711 2473/4420/5711 2521/4411/5711\nf 2589/4417/5712 2613/4421/5712 2612/4415/5712\nf 2620/4422/5713 2666/4405/5713 2630/4399/5713\nf 2825/4419/5714 2864/4085/5714 2851/4408/5714\nf 2316/2535/5715 2893/4395/5715 216/3858/5715\nf 2437/4165/5716 2438/96/5716 2447/4173/5716\nf 2625/650/5717 2752/4114/5717 1702/4108/5717\nf 2966/4270/5718 2987/4269/5718 2940/4423/5718\nf 2705/4129/5719 2748/4151/5719 2747/4223/5719\nf 2782/4218/5720 2874/4116/5720 2858/224/5720\nf 2432/4265/5721 2451/4424/5721 2450/4397/5721\nf 2450/4397/5722 2451/4424/5722 2463/4402/5722\nf 2451/4425/5723 2473/4426/5723 2494/4409/5723\nf 2463/4403/5724 2451/4425/5724 2494/4409/5724\nf 2559/4414/5725 2547/4427/5725 2589/4417/5725\nf 2612/4415/5726 2613/4421/5726 2630/4399/5726\nf 2666/4405/5727 2685/4428/5727 2684/4412/5727\nf 2354/4086/5728 2893/4395/5728 2864/4085/5728\nf 2354/4086/5729 216/3858/5729 2893/4395/5729\nf 1901/3579/5730 2616/2421/5730 2621/4259/5730\nf 2209/2292/5731 2807/3949/5731 567/4413/5731\nf 567/4413/5732 2807/3949/5732 2307/2426/5732\nf 2735/263/5733 1473/2666/5733 2699/264/5733\nf 2438/96/5734 2437/4165/5734 2428/97/5734\nf 2547/4427/5735 2579/4429/5735 2589/4417/5735\nf 2620/4422/5736 2630/4399/5736 2613/4421/5736\nf 2685/4428/5737 2666/4405/5737 2620/4422/5737\nf 2684/4412/5738 2685/4428/5738 2715/4418/5738\nf 2715/4418/5739 2728/4430/5739 2740/4416/5739\nf 2728/4430/5740 2802/4431/5740 2740/4416/5740\nf 2740/4416/5741 2802/4431/5741 2824/4406/5741\nf 1909/4157/5742 2150/4065/5742 2906/2458/5742\nf 1941/3492/5743 2734/4168/5743 2722/3730/5743\nf 2807/3949/5744 2610/3637/5744 2307/2426/5744\nf 2691/806/5745 2706/3201/5745 2668/807/5745\nf 2157/1187/5746 2182/768/5746 2359/3910/5746\nf 2453/4185/5747 2848/4183/5747 2698/4137/5747\nf 2438/96/5748 2456/3030/5748 2447/4173/5748\nf 2406/3468/5749 2306/3467/5749 2432/4265/5749\nf 2514/4432/5750 2473/4426/5750 2451/4425/5750\nf 2514/4433/5751 2521/4411/5751 2473/4420/5751\nf 2521/4411/5752 2532/4434/5752 2559/4414/5752\nf 2532/4434/5753 2547/4427/5753 2559/4414/5753\nf 2589/4417/5754 2579/4429/5754 2613/4421/5754\nf 2802/4431/5755 2825/4419/5755 2824/4406/5755\nf 2166/3656/5756 2196/3985/5756 2364/2425/5756\nf 2489/2898/5757 2517/2072/5757 2644/4132/5757\nf 2720/734/5758 2732/4304/5758 2694/2883/5758\nf 2622/4283/5759 2704/3102/5759 2653/2305/5759\nf 2442/459/5760 2451/4424/5760 2432/4265/5760\nf 2514/4433/5761 2532/4434/5761 2521/4411/5761\nf 2716/4435/5762 2741/4436/5762 2728/4430/5762\nf 2715/4418/5763 2716/4435/5763 2728/4430/5763\nf 2728/4430/5764 2741/4436/5764 2802/4431/5764\nf 2802/4431/5765 2786/4437/5765 2825/4419/5765\nf 2825/4419/5766 2803/4438/5766 2864/4085/5766\nf 2623/4215/5767 2676/4123/5767 2162/4037/5767\nf 2164/1943/5768 2154/3969/5768 1266/2733/5768\nf 1916/2410/5769 2059/3818/5769 2159/3837/5769\nf 2216/4077/5770 3020/4356/5770 3019/2296/5770\nf 2864/4085/5771 2803/4438/5771 2259/3553/5771\nf 3367/3009/5772 3340/3111/5772 1486/2877/5772\nf 3425/313/5773 2313/3999/5773 2642/4007/5773\nf 2406/2355/5774 2911/2357/5774 2908/3510/5774\nf 2311/3862/5775 2191/3296/5775 2454/845/5775\nf 2306/3467/5776 2413/4439/5776 2432/4265/5776\nf 2474/4440/5777 2532/4434/5777 2514/4433/5777\nf 2547/4427/5778 2572/4441/5778 2579/4429/5778\nf 2613/4421/5779 2614/4442/5779 2620/4422/5779\nf 2620/4422/5780 2649/4443/5780 2685/4428/5780\nf 2649/4443/5781 2716/4435/5781 2715/4418/5781\nf 2685/4428/5782 2649/4443/5782 2715/4418/5782\nf 2741/4436/5783 2786/4437/5783 2802/4431/5783\nf 1611/4191/5784 967/1517/5784 2897/2566/5784\nf 2869/1415/5785 2899/4240/5785 1534/3131/5785\nf 2261/1889/5786 1887/1891/5786 1741/4078/5786\nf 2490/4293/5787 981/2431/5787 2470/4300/5787\nf 2732/4304/5788 2719/1905/5788 2693/2670/5788\nf 2843/4164/5789 2884/4187/5789 2883/4189/5789\nf 2655/3557/5790 2668/807/5790 2637/4254/5790\nf 1829/3706/5791 2523/3217/5791 2503/2146/5791\nf 2888/4141/5792 1934/4012/5792 2273/4011/5792\nf 2916/851/5793 2926/2970/5793 2915/3582/5793\nf 3091/1788/5794 3135/4444/5794 3062/1789/5794\nf 2413/4439/5795 2442/459/5795 2432/4265/5795\nf 2475/4445/5796 2451/4424/5796 2442/459/5796\nf 2474/4446/5797 2514/4432/5797 2451/4425/5797\nf 2475/4445/5798 2474/4440/5798 2451/4424/5798\nf 2532/4434/5799 2572/4441/5799 2547/4427/5799\nf 2579/4429/5800 2614/4442/5800 2613/4421/5800\nf 2631/4447/5801 2649/4443/5801 2620/4422/5801\nf 2786/4437/5802 2803/4438/5802 2825/4419/5802\nf 2623/4215/5803 2453/4185/5803 2676/4123/5803\nf 2672/4152/5804 1689/1864/5804 2592/648/5804\nf 23/783/5805 58/211/5805 36/25/5805\nf 2163/4081/5806 2455/4200/5806 2255/4448/5806\nf 2408/4099/5807 1933/4216/5807 2829/3163/5807\nf 3461/270/5808 2768/662/5808 2808/4228/5808\nf 2311/3862/5809 2454/845/5809 2330/3729/5809\nf 2425/3192/5810 2427/4110/5810 2455/4200/5810\nf 2582/3079/5811 2622/4283/5811 2634/362/5811\nf 2964/527/5812 2984/2484/5812 2983/528/5812\nf 2501/2757/5813 2875/4449/5813 2524/2344/5813\nf 2464/1921/5814 1751/4242/5814 2446/1444/5814\nf 2671/2879/5815 2697/2542/5815 2524/2344/5815\nf 2696/953/5816 2253/699/5816 2239/3991/5816\nf 2614/4442/5817 2631/4447/5817 2620/4422/5817\nf 2803/4438/5818 2865/4450/5818 2259/3553/5818\nf 2128/4378/5819 1666/736/5819 2107/735/5819\nf 1792/3652/5820 2522/3651/5820 2275/4451/5820\nf 2623/4215/5821 2162/4037/5821 2675/4199/5821\nf 2706/3201/5822 2749/3057/5822 2705/4129/5822\nf 2422/2070/5823 2584/3877/5823 2479/4102/5823\nf 1028/3037/5824 2183/1718/5824 2816/2069/5824\nf 3030/2297/5825 2426/4111/5825 2425/3192/5825\nf 3295/4452/5826 3280/4453/5826 3242/3945/5826\nf 3243/2445/5827 3295/4452/5827 3242/3945/5827\nf 3404/4377/5828 1480/2932/5828 3372/4454/5828\nf 2413/4439/5829 2414/460/5829 2442/459/5829\nf 2495/4455/5830 2474/4440/5830 2475/4445/5830\nf 2495/4455/5831 2573/4456/5831 2474/4440/5831\nf 2474/4440/5832 2573/4456/5832 2532/4434/5832\nf 2572/4441/5833 2590/4457/5833 2579/4429/5833\nf 2579/4429/5834 2590/4457/5834 2614/4442/5834\nf 2631/4447/5835 2667/4458/5835 2649/4443/5835\nf 2667/4458/5836 2774/4459/5836 2649/4443/5836\nf 2649/4443/5837 2774/4459/5837 2716/4435/5837\nf 2813/3242/5838 2845/4104/5838 2792/1399/5838\nf 2705/4129/5839 2749/3057/5839 2748/4151/5839\nf 3464/20/5840 3446/22/5840 3484/2744/5840\nf 2776/1398/5841 2813/3242/5841 2792/1399/5841\nf 2813/3242/5842 2870/3091/5842 2845/4104/5842\nf 3084/95/5843 3124/3031/5843 2438/96/5843\nf 3013/4460/5844 3037/4461/5844 3012/2799/5844\nf 2911/2357/5845 2917/849/5845 2908/3510/5845\nf 3295/4452/5846 3294/4462/5846 3280/4453/5846\nf 2839/1640/5847 2875/4449/5847 2501/2757/5847\nf 2671/2879/5848 2524/2344/5848 2875/4449/5848\nf 1898/3035/5849 2852/2118/5849 2548/2117/5849\nf 2476/4463/5850 2475/4445/5850 2442/459/5850\nf 2476/4463/5851 2495/4455/5851 2475/4445/5851\nf 2532/4434/5852 2573/4456/5852 2572/4441/5852\nf 2572/4441/5853 2573/4456/5853 2590/4457/5853\nf 2716/4435/5854 2774/4459/5854 2741/4436/5854\nf 2774/4459/5855 2786/4437/5855 2741/4436/5855\nf 2895/3554/5856 2259/3553/5856 2865/4450/5856\nf 2641/4184/5857 2453/4185/5857 2623/4215/5857\nf 2750/733/5858 2762/4464/5858 2720/734/5858\nf 717/1991/5859 136/378/5859 160/661/5859\nf 2793/207/5860 2777/4193/5860 2762/208/5860\nf 2843/4164/5861 2885/4109/5861 2884/4187/5861\nf 1666/736/5862 1657/649/5862 1350/737/5862\nf 3013/4460/5863 3012/2799/5863 2975/4465/5863\nf 2892/4466/5864 2671/2879/5864 2875/4449/5864\nf 1939/4467/5865 2184/2880/5865 2671/2879/5865\nf 2414/460/5866 2150/1282/5866 1909/458/5866\nf 1778/726/5867 2305/3932/5867 2276/2298/5867\nf 2667/4458/5868 2729/4468/5868 2774/4459/5868\nf 2729/4468/5869 2717/4469/5869 2774/4459/5869\nf 2804/4470/5870 2803/4438/5870 2786/4437/5870\nf 2099/3456/5871 2882/2212/5871 2896/2462/5871\nf 2733/4167/5872 2750/733/5872 2721/732/5872\nf 2154/4471/5873 2184/2880/5873 1939/4467/5873\nf 2782/4218/5874 2186/3971/5874 2871/3978/5874\nf 2793/207/5875 2846/3243/5875 2777/4193/5875\nf 2847/4236/5876 2846/3243/5876 2794/4180/5876\nf 2456/3030/5877 2438/96/5877 3124/3031/5877\nf 2154/4471/5878 2164/2553/5878 2184/2880/5878\nf 1909/458/5879 2452/4177/5879 2442/459/5879\nf 1857/3446/5880 1856/3408/5880 1834/1865/5880\nf 2442/459/5881 2452/4177/5881 2476/4463/5881\nf 2533/4472/5882 2573/4456/5882 2495/4455/5882\nf 2580/4473/5883 2590/4457/5883 2573/4456/5883\nf 2632/4474/5884 2614/4442/5884 2590/4457/5884\nf 2632/4474/5885 2631/4447/5885 2614/4442/5885\nf 2650/4475/5886 2667/4458/5886 2631/4447/5886\nf 2632/4474/5887 2650/4475/5887 2631/4447/5887\nf 2803/4438/5888 2804/4470/5888 2865/4450/5888\nf 2241/3836/5889 2861/3926/5889 2158/1442/5889\nf 2109/4097/5890 1136/4100/5890 2799/4101/5890\nf 2720/734/5891 2762/4464/5891 2732/4304/5891\nf 3239/4476/5892 3254/4477/5892 1499/3237/5892\nf 1499/3230/5893 3223/4478/5893 3239/4479/5893\nf 2328/2459/5894 214/1716/5894 813/1957/5894\nf 960/2177/5895 2993/2176/5895 2486/4194/5895\nf 2496/4480/5896 2495/4455/5896 2476/4463/5896\nf 2496/4480/5897 2533/4472/5897 2495/4455/5897\nf 2533/4472/5898 2580/4473/5898 2573/4456/5898\nf 2606/3396/5899 2590/4457/5899 2580/4473/5899\nf 2606/3396/5900 2632/4474/5900 2590/4457/5900\nf 2804/4470/5901 2786/4437/5901 2774/4459/5901\nf 2804/4470/5902 2866/4019/5902 2865/4450/5902\nf 2865/4450/5903 2866/4019/5903 2895/3554/5903\nf 2777/4193/5904 2776/1398/5904 2762/208/5904\nf 2723/653/5905 2643/677/5905 2640/654/5905\nf 2795/4237/5906 2794/4180/5906 2778/4179/5906\nf 2160/4042/5907 2675/4199/5907 2162/4037/5907\nf 3309/4481/5908 3344/4482/5908 3229/4483/5908\nf 1933/4216/5909 2840/4273/5909 2626/4214/5909\nf 2417/4156/5910 2641/4184/5910 2840/4273/5910\nf 2640/654/5911 2643/677/5911 2879/679/5911\nf 1725/2220/5912 1734/2219/5912 1500/2569/5912\nf 2908/3510/5913 2916/851/5913 2907/2457/5913\nf 2540/4484/5914 2839/1640/5914 1897/858/5914\nf 2540/4484/5915 2875/4449/5915 2839/1640/5915\nf 1865/2971/5916 2671/2879/5916 2892/4466/5916\nf 2671/2879/5917 1865/2971/5917 1939/4467/5917\nf 1941/3492/5918 2778/4147/5918 2734/4168/5918\nf 2650/4475/5919 2729/4468/5919 2667/4458/5919\nf 2774/4459/5920 2717/4469/5920 2804/4470/5920\nf 2804/4470/5921 2805/4485/5921 2866/4019/5921\nf 3230/4486/5922 3309/4481/5922 3229/4483/5922\nf 1508/4253/5923 2840/4273/5923 1933/4216/5923\nf 2692/2671/5924 2656/4487/5924 2657/4488/5924\nf 2575/3627/5925 2109/4097/5925 1473/2666/5925\nf 3158/4489/5926 3157/4490/5926 3123/4491/5926\nf 3266/4492/5927 1476/3066/5927 1483/3098/5927\nf 2540/4484/5928 2892/4466/5928 2875/4449/5928\nf 2780/2714/5929 1689/1864/5929 2672/4152/5929\nf 2633/3372/5930 2632/4474/5930 2606/3396/5930\nf 2887/250/5931 602/3241/5931 1703/251/5931\nf 2301/3990/5932 2797/1717/5932 2328/2459/5932\nf 2797/1717/5933 214/1716/5933 2328/2459/5933\nf 2522/3651/5934 2538/3058/5934 2537/3051/5934\nf 1933/4216/5935 2623/4215/5935 2675/4199/5935\nf 2765/4182/5936 2723/653/5936 2601/2264/5936\nf 1483/3327/5937 1501/3326/5937 1725/4493/5937\nf 2986/2729/5938 3036/2801/5938 3011/4494/5938\nf 2737/2972/5939 1865/2971/5939 2892/4466/5939\nf 1909/458/5940 2433/3149/5940 2452/4177/5940\nf 2497/4495/5941 2476/4463/5941 2452/4177/5941\nf 2476/4463/5942 2497/4495/5942 2496/4480/5942\nf 2496/4480/5943 2534/4496/5943 2533/4472/5943\nf 2633/3372/5944 2650/4475/5944 2632/4474/5944\nf 2729/4468/5945 2742/4497/5945 2717/4469/5945\nf 2717/4469/5946 2805/4485/5946 2804/4470/5946\nf 2792/1399/5947 2791/239/5947 2731/1400/5947\nf 2163/4081/5948 2465/2145/5948 2436/2295/5948\nf 1675/2665/5949 2459/2071/5949 2422/2070/5949\nf 2838/1635/5950 1819/3744/5950 2019/1636/5950\nf 3266/4498/5951 1483/4499/5951 1725/4500/5951\nf 2928/4501/5952 2935/4502/5952 2920/4503/5952\nf 3268/4504/5953 3298/1735/5953 3284/1737/5953\nf 2985/4505/5954 2986/2729/5954 3011/4494/5954\nf 2737/2972/5955 2892/4466/5955 2540/4484/5955\nf 1725/2220/5956 1499/3230/5956 3254/4506/5956\nf 2459/2071/5957 1675/2665/5957 2735/263/5957\nf 2409/3150/5958 2433/3149/5958 1909/458/5958\nf 2497/4495/5959 2534/4496/5959 2496/4480/5959\nf 1856/4507/5960 2533/4472/5960 2534/4496/5960\nf 1856/4507/5961 2580/4473/5961 2533/4472/5961\nf 1856/4507/5962 1885/3397/5962 2580/4473/5962\nf 1885/3397/5963 2606/3396/5963 2580/4473/5963\nf 2633/3372/5964 2729/4468/5964 2650/4475/5964\nf 2742/4497/5965 2805/4485/5965 2717/4469/5965\nf 2036/3454/5966 2867/3464/5966 2075/3422/5966\nf 2796/4134/5967 2795/2348/5967 2751/4508/5967\nf 1307/2031/5968 2584/3877/5968 2112/3602/5968\nf 566/3014/5969 2376/4009/5969 2177/4023/5969\nf 3266/4492/5970 1725/2220/5970 3254/4506/5970\nf 3070/4509/5971 3081/4510/5971 3058/4172/5971\nf 2416/2911/5972 2540/4484/5972 1897/858/5972\nf 2769/669/5973 2737/2972/5973 2540/4484/5973\nf 3370/685/5974 3401/3140/5974 3359/4198/5974\nf 2433/3149/5975 2415/3148/5975 2452/4177/5975\nf 1834/4511/5976 1856/4507/5976 2534/4496/5976\nf 1950/3373/5977 2633/3372/5977 2606/3396/5977\nf 1899/3398/5978 1950/3373/5978 2606/3396/5978\nf 1997/4217/5979 2729/4468/5979 2633/3372/5979\nf 2196/3985/5980 2387/3431/5980 2151/3742/5980\nf 1111/1971/5981 3441/4512/5981 3462/1972/5981\nf 2301/3990/5982 2482/2327/5982 2797/1717/5982\nf 1676/3225/5983 1892/4150/5983 2417/4156/5983\nf 1099/3269/5984 2341/4513/5984 1849/3270/5984\nf 1500/4514/5985 1499/3231/5985 1725/4493/5985\nf 2766/681/5986 1897/858/5986 2669/857/5986\nf 2766/681/5987 2416/2911/5987 1897/858/5987\nf 2416/2911/5988 2769/669/5988 2540/4484/5988\nf 2779/3187/5989 1934/4012/5989 966/3334/5989\nf 2452/4177/5990 2477/2524/5990 2497/4495/5990\nf 2477/2524/5991 2478/2526/5991 2497/4495/5991\nf 2497/4495/5992 2478/2526/5992 2534/4496/5992\nf 2478/2526/5993 1834/4511/5993 2534/4496/5993\nf 1997/4217/5994 2743/2866/5994 2729/4468/5994\nf 2743/2866/5995 2742/4497/5995 2729/4468/5995\nf 2806/2868/5996 2805/4485/5996 2742/4497/5996\nf 2805/4485/5997 2837/2709/5997 2866/4019/5997\nf 2866/4019/5998 2880/2711/5998 2317/3953/5998\nf 3471/3576/5999 1363/3558/5999 1964/2128/5999\nf 1703/251/6000 2567/3106/6000 1769/252/6000\nf 2210/4112/6001 966/3334/6001 2888/4141/6001\nf 2482/2327/6002 2816/2069/6002 2797/1717/6002\nf 3452/2409/6003 3503/615/6003 3507/1858/6003\nf 2887/250/6004 2870/3091/6004 2813/3242/6004\nf 2884/4187/6005 1676/3225/6005 1686/3227/6005\nf 2694/2883/6006 2693/2670/6006 2658/2884/6006\nf 2435/3335/6007 966/3334/6007 2210/4112/6007\nf 3047/4515/6008 3088/4516/6008 3045/2277/6008\nf 3375/2513/6009 570/4517/6009 3385/2514/6009\nf 2794/4180/6010 2793/207/6010 2750/206/6010\nf 2443/848/6011 2477/2524/6011 2452/4177/6011\nf 2012/2349/6012 2853/4396/6012 2847/2350/6012\nf 1802/1363/6013 1788/1227/6013 1789/2707/6013\nf 2686/3371/6014 1997/4217/6014 2633/3372/6014\nf 2742/4497/6015 2743/2866/6015 2806/2868/6015\nf 2837/2709/6016 2805/4485/6016 2806/2868/6016\nf 2837/2709/6017 2880/2711/6017 2866/4019/6017\nf 2899/4240/6018 1611/4191/6018 1534/3131/6018\nf 2853/4396/6019 2055/3597/6019 2077/3599/6019\nf 2697/2542/6020 2184/2880/6020 2178/2552/6020\nf 2794/4180/6021 2846/3243/6021 2793/207/6021\nf 2526/4206/6022 2487/4205/6022 1007/4220/6022\nf 3059/3133/6023 3035/3135/6023 3036/2801/6023\nf 2769/669/6024 2467/289/6024 2737/2972/6024\nf 2737/2972/6025 2467/289/6025 1875/2973/6025\nf 2627/4286/6026 2662/2367/6026 2602/4136/6026\nf 1832/3764/6027 2838/3766/6027 2879/4518/6027\nf 2764/4076/6028 567/4413/6028 2196/3985/6028\nf 967/1517/6029 1890/4192/6029 1793/1518/6029\nf 2273/4011/6030 2210/4112/6030 2888/4141/6030\nf 3203/4519/6031 3217/4520/6031 3168/4521/6031\nf 3250/4522/6032 3249/4523/6032 3217/4520/6032\nf 3314/4524/6033 3332/1653/6033 3331/4525/6033\nf 3105/4526/6034 3121/4527/6034 3134/4528/6034\nf 2948/2728/6035 2975/4465/6035 2986/2729/6035\nf 3181/2775/6036 3158/4489/6036 3093/4529/6036\nf 3060/4530/6037 3105/4526/6037 3089/4531/6037\nf 3375/4532/6038 3406/2012/6038 570/2011/6038\nf 3284/1737/6039 3312/3154/6039 3297/4533/6039\nf 3267/4534/6040 3309/4481/6040 3230/4486/6040\nf 3092/2735/6041 3123/4491/6041 3091/1788/6041\nf 3052/4535/6042 3060/4530/6042 3089/4531/6042\nf 3116/4536/6043 3130/4537/6043 3129/4538/6043\nf 3018/2905/6044 3001/2963/6044 2991/1880/6044\nf 2992/1879/6045 3018/2905/6045 2991/1880/6045\nf 3017/4539/6046 3016/2961/6046 3001/2963/6046\nf 3420/4540/6047 3421/4212/6047 2469/3908/6047\nf 1677/3366/6048 1805/2467/6048 3274/3364/6048\nf 3423/4541/6049 3405/4542/6049 993/4543/6049\nf 3018/2905/6050 3017/4539/6050 3001/2963/6050\nf 3300/4544/6051 3299/4545/6051 3285/4546/6051\nf 3345/4547/6052 3344/4482/6052 3309/4481/6052\nf 1481/3085/6053 3150/3059/6053 1474/4548/6053\nf 3060/4530/6054 3090/4549/6054 3105/4526/6054\nf 3090/4549/6055 3121/4527/6055 3105/4526/6055\nf 3249/4523/6056 3285/4546/6056 3248/4550/6056\nf 3464/20/6057 3484/2744/6057 1197/3438/6057\nf 3037/4551/6058 3051/4552/6058 3050/4553/6058\nf 3178/4554/6059 3168/4521/6059 3233/4555/6059\nf 3122/4556/6060 3134/4528/6060 3121/4527/6060\nf 3134/4528/6061 3168/4521/6061 3133/4557/6061\nf 3203/4519/6062 3250/4522/6062 3217/4520/6062\nf 3250/4522/6063 3286/4558/6063 3249/4523/6063\nf 3028/2962/6064 3027/4559/6064 3000/4560/6064\nf 3286/4558/6065 3300/4544/6065 3249/4523/6065\nf 3315/4561/6066 3314/4562/6066 3300/4544/6066\nf 3063/898/6067 3094/4563/6067 3092/2735/6067\nf 3001/2963/6068 3000/4560/6068 2990/2560/6068\nf 3094/4563/6069 3093/4529/6069 3092/2735/6069\nf 3094/4563/6070 3181/2775/6070 3093/4529/6070\nf 3381/3068/6071 1480/3067/6071 1490/1412/6071\nf 3001/2963/6072 3028/2962/6072 3000/4560/6072\nf 3038/4564/6073 3060/4530/6073 3052/4535/6073\nf 3290/4565/6074 3274/3364/6074 3465/838/6074\nf 3274/3364/6075 3491/2468/6075 3465/838/6075\nf 3290/4565/6076 1109/4566/6076 3274/3364/6076\nf 3274/3364/6077 1109/4566/6077 1531/3427/6077\nf 3190/4567/6078 3197/2272/6078 3228/2446/6078\nf 3165/3027/6079 3261/4568/6079 3201/4569/6079\nf 3496/1097/6080 3290/4565/6080 3465/838/6080\nf 1109/4566/6081 3264/1115/6081 1631/4128/6081\nf 3236/1114/6082 1631/4128/6082 3264/1115/6082\nf 1730/3497/6083 1723/3156/6083 2949/3532/6083\nf 3061/4570/6084 3016/2961/6084 3017/4539/6084\nf 3061/4570/6085 3038/4564/6085 3016/2961/6085\nf 3061/4570/6086 3060/4530/6086 3038/4564/6086\nf 3264/1115/6087 1109/4566/6087 3290/4565/6087\nf 3122/4556/6088 3169/4571/6088 3134/4528/6088\nf 2982/4572/6089 3048/4140/6089 2981/4573/6089\nf 3217/4520/6090 3233/4555/6090 3168/4521/6090\nf 2980/2936/6091 3045/2277/6091 2998/2474/6091\nf 3496/1097/6092 3477/788/6092 3290/4565/6092\nf 1531/3427/6093 1109/4566/6093 1631/4128/6093\nf 3290/4565/6094 3477/788/6094 3264/1115/6094\nf 1493/234/6095 2469/730/6095 1494/729/6095\nf 3123/4491/6096 3157/4490/6096 3135/4444/6096\nf 2934/4574/6097 2938/4575/6097 2918/4576/6097\nf 3088/4516/6098 3087/1409/6098 3045/2277/6098\nf 3286/4558/6099 3315/4561/6099 3300/4544/6099\nf 3285/4546/6100 3299/4545/6100 3298/1735/6100\nf 27/397/6101 572/1962/6101 3350/3669/6101\nf 2990/2560/6102 2989/1884/6102 2429/1886/6102\nf 2402/2512/6103 2919/4577/6103 2403/2454/6103\nf 2136/1679/6104 1368/2889/6104 1367/3770/6104\nf 3013/4578/6105 3051/4579/6105 3037/4580/6105\nf 3364/2835/6106 781/2148/6106 2017/2157/6106\nf 3374/2436/6107 3346/4581/6107 3328/2437/6107\nf 3131/4582/6108 3166/4583/6108 3130/4537/6108\nf 3232/4584/6109 3233/4555/6109 3248/4550/6109\nf 3166/4583/6110 3176/4585/6110 3165/3027/6110\nf 3075/4586/6111 3082/4587/6111 3104/4588/6111\nf 3104/4588/6112 3131/4582/6112 3130/4537/6112\nf 3142/4589/6113 3101/1410/6113 3087/1409/6113\nf 3165/3027/6114 3176/4585/6114 3191/4590/6114\nf 3306/4591/6115 3382/2466/6115 3294/105/6115\nf 2965/4592/6116 2985/4593/6116 2984/4594/6116\nf 3296/4595/6117 3310/4596/6117 3267/4534/6117\nf 3260/4597/6118 3296/4595/6118 3267/4534/6118\nf 3178/4598/6119 3233/4599/6119 3232/4600/6119\nf 3165/3027/6120 3201/4569/6120 3154/3028/6120\nf 3028/2962/6121 3052/4535/6121 3026/4601/6121\nf 3376/4602/6122 3375/2513/6122 3347/4603/6122\nf 2927/3164/6123 2933/4604/6123 2945/3165/6123\nf 3027/4559/6124 3028/2962/6124 3026/4601/6124\nf 2990/2560/6125 3000/4560/6125 2989/1884/6125\nf 3331/4525/6126 3332/1653/6126 3350/3669/6126\nf 3129/4538/6127 3166/4583/6127 3155/3026/6127\nf 3048/4140/6128 3034/4171/6128 2981/4573/6128\nf 3163/4605/6129 3175/4606/6129 3101/1410/6129\nf 3414/2289/6130 3355/2288/6130 3393/4607/6130\nf 1491/2933/6131 3420/4376/6131 1492/4608/6131\nf 3090/4549/6132 3122/4556/6132 3121/4527/6132\nf 3142/4589/6133 3153/4609/6133 3101/1410/6133\nf 958/2507/6134 2921/3933/6134 2929/2508/6134\nf 1158/2171/6135 1415/2170/6135 1806/4610/6135\nf 3386/567/6136 331/525/6136 341/498/6136\nf 1806/4610/6137 3352/2347/6137 561/4611/6137\nf 3197/2272/6138 3190/4567/6138 3174/2273/6138\nf 3375/4532/6139 3376/2095/6139 3406/2012/6139\nf 3301/4612/6140 3315/4561/6140 3286/4558/6140\nf 3318/4613/6141 1652/3147/6141 1670/3245/6141\nf 3299/4545/6142 3314/4562/6142 3331/4614/6142\nf 3447/982/6143 708/2360/6143 1064/983/6143\nf 3300/4544/6144 3314/4562/6144 3299/4545/6144\nf 1415/2170/6145 3352/2347/6145 1806/4610/6145\nf 3352/2347/6146 3136/4615/6146 561/4611/6146\nf 3102/4616/6147 3070/4509/6147 3058/4172/6147\nf 3119/3865/6148 3132/3864/6148 3118/4617/6148\nf 3016/2961/6149 3038/4564/6149 3028/2962/6149\nf 3038/4564/6150 3052/4535/6150 3028/2962/6150\nf 3037/4461/6151 3050/2800/6151 3012/2799/6151\nf 3248/4550/6152 3285/4546/6152 3263/4618/6152\nf 3307/3738/6153 3327/4619/6153 3215/3739/6153\nf 3116/4620/6154 3129/4621/6154 3145/4622/6154\nf 3194/2549/6155 3218/548/6155 78/811/6155\nf 3232/4600/6156 3248/4623/6156 3247/4624/6156\nf 3362/4625/6157 3347/4603/6157 3312/3154/6157\nf 3282/4626/6158 3296/4595/6158 3260/4597/6158\nf 1329/2726/6159 282/217/6159 505/2602/6159\nf 3061/4570/6160 3106/4627/6160 3060/4530/6160\nf 3168/4521/6161 3178/4554/6161 3167/4628/6161\nf 3106/4627/6162 3090/4549/6162 3060/4530/6162\nf 2938/4629/6163 2934/4630/6163 2947/4631/6163\nf 3331/4525/6164 3350/3669/6164 3349/4632/6164\nf 3106/4627/6165 3122/4556/6165 3090/4549/6165\nf 3179/4633/6166 3169/4571/6166 3122/4556/6166\nf 3168/4521/6167 3167/4628/6167 3133/4557/6167\nf 3179/4633/6168 3203/4519/6168 3169/4571/6168\nf 3392/2994/6169 174/757/6169 3207/756/6169\nf 244/620/6170 2709/565/6170 3287/671/6170\nf 3143/4634/6171 3164/4635/6171 3114/4636/6171\nf 3215/3739/6172 3327/4619/6172 3295/4637/6172\nf 3269/4638/6173 3286/4558/6173 3250/4522/6173\nf 2989/1884/6174 3000/4560/6174 2976/2126/6174\nf 3269/4638/6175 3301/4612/6175 3286/4558/6175\nf 3071/4639/6176 3072/3861/6176 3103/4640/6176\nf 3163/4605/6177 3214/4209/6177 3197/4210/6177\nf 3285/4546/6178 3298/1735/6178 3263/4618/6178\nf 3203/4519/6179 3168/4521/6179 3169/4571/6179\nf 3244/4641/6180 3230/4486/6180 3200/4642/6180\nf 263/566/6181 2709/565/6181 244/620/6181\nf 3352/2347/6182 3238/2646/6182 3136/4615/6182\nf 3238/2646/6183 3221/4643/6183 3136/4615/6183\nf 1326/2758/6184 47/99/6184 3221/4271/6184\nf 3073/4644/6185 3116/4620/6185 3145/4622/6185\nf 2964/4645/6186 2965/4592/6186 2984/4594/6186\nf 3347/4603/6187 3362/4625/6187 3377/4646/6187\nf 2999/4647/6188 3013/4460/6188 2975/4465/6188\nf 3046/293/6189 3047/4515/6189 3045/2277/6189\nf 3238/2646/6190 3220/4648/6190 3221/4643/6190\nf 2962/294/6191 3046/293/6191 2980/2936/6191\nf 3181/2775/6192 3195/1932/6192 3158/4489/6192\nf 3299/4545/6193 3313/1736/6193 3298/1735/6193\nf 952/4649/6194 2921/3933/6194 958/2507/6194\nf 3072/4650/6195 3035/3135/6195 3073/4651/6195\nf 3011/4494/6196 3035/3135/6196 3072/4650/6196\nf 2985/4593/6197 3011/3595/6197 3025/3594/6197\nf 2984/4594/6198 2985/4593/6198 3025/3594/6198\nf 2966/4270/6199 2940/4423/6199 2921/3933/6199\nf 952/4649/6200 2966/4270/6200 2921/3933/6200\nf 3195/1932/6201 3194/4125/6201 3157/4490/6201\nf 2999/4647/6202 2975/4465/6202 2940/4423/6202\nf 3117/4652/6203 3131/4582/6203 3104/4588/6203\nf 3238/2646/6204 3319/4653/6204 3220/4648/6204\nf 2418/4654/6205 3076/4655/6205 2428/4656/6205\nf 3231/4657/6206 3232/4600/6206 3247/4624/6206\nf 3180/4658/6207 3179/4633/6207 3122/4556/6207\nf 3331/4614/6208 3330/4659/6208 3313/1736/6208\nf 2955/4660/6209 2965/4592/6209 2964/4645/6209\nf 3221/4643/6210 3220/4648/6210 3412/4661/6210\nf 3251/2385/6211 3250/4522/6211 3203/4519/6211\nf 3234/2993/6212 3251/2385/6212 3203/4519/6212\nf 3082/4587/6213 3117/4652/6213 3104/4588/6213\nf 3178/4598/6214 3232/4600/6214 3231/4657/6214\nf 3400/4662/6215 3401/3140/6215 575/3054/6215\nf 3299/4545/6216 3331/4614/6216 3313/1736/6216\nf 3330/4663/6217 3331/4525/6217 3349/4632/6217\nf 3071/4664/6218 3102/4616/6218 3058/4172/6218\nf 2929/2508/6219 2920/4503/6219 2910/2255/6219\nf 3229/4483/6220 3344/4482/6220 3259/4665/6220\nf 2988/4268/6221 3027/4559/6221 3026/4601/6221\nf 3251/2385/6222 3269/4638/6222 3250/4522/6222\nf 1269/2346/6223 3319/4653/6223 3238/2646/6223\nf 3319/4653/6224 3354/4666/6224 3220/4648/6224\nf 1648/3220/6225 1364/3219/6225 3412/4667/6225\nf 1645/2916/6226 1646/2967/6226 3208/3016/6226\nf 3245/4668/6227 3283/4669/6227 3261/4568/6227\nf 3027/4559/6228 2988/4268/6228 3000/4560/6228\nf 3373/4670/6229 3384/4671/6229 3361/3847/6229\nf 3216/337/6230 3245/4668/6230 3202/4672/6230\nf 2935/4502/6231 2934/4574/6231 2919/4577/6231\nf 3144/524/6232 3115/4673/6232 3102/4616/6232\nf 3382/2466/6233 3421/4212/6233 3404/4674/6233\nf 3220/4648/6234 3304/4675/6234 3412/4661/6234\nf 3312/3154/6235 3329/2435/6235 3297/4533/6235\nf 3145/523/6236 3155/3026/6236 3154/3028/6236\nf 3157/4490/6237 3170/4676/6237 3148/4677/6237\nf 2963/4678/6238 2973/4679/6238 2953/4680/6238\nf 2938/4629/6239 2947/4631/6239 2946/4681/6239\nf 2963/4678/6240 2953/4680/6240 2946/4682/6240\nf 3157/4490/6241 3148/4677/6241 3135/4444/6241\nf 3347/4603/6242 3375/2513/6242 3374/2436/6242\nf 3071/4664/6243 3058/4172/6243 3034/4171/6243\nf 1269/2346/6244 3407/4683/6244 3319/4653/6244\nf 3319/4653/6245 3407/4683/6245 3354/4666/6245\nf 3304/4675/6246 1648/4684/6246 3412/4661/6246\nf 2230/3974/6247 2261/1889/6247 2233/3983/6247\nf 3093/4529/6248 3158/4489/6248 3123/4491/6248\nf 570/4517/6249 3405/4542/6249 3385/2514/6249\nf 3202/4672/6250 3261/4568/6250 3165/3027/6250\nf 3114/4636/6251 3142/4589/6251 3088/4516/6251\nf 3167/4628/6252 3177/4685/6252 3156/4686/6252\nf 3262/336/6253 3283/4669/6253 3245/4668/6253\nf 1957/3832/6254 3391/4687/6254 3390/3833/6254\nf 3075/4586/6255 3104/4588/6255 3074/3134/6255\nf 1491/2933/6256 1492/4608/6256 1516/2964/6256\nf 3113/1220/6257 3139/3100/6257 3099/4688/6257\nf 3015/4689/6258 3014/4690/6258 2999/4647/6258\nf 2974/529/6259 2982/4572/6259 2954/4691/6259\nf 3354/4666/6260 3237/4692/6260 3220/4648/6260\nf 3220/4648/6261 3237/4692/6261 3304/4675/6261\nf 3153/4609/6262 3198/4693/6262 3163/4605/6262\nf 3405/4542/6263 3423/4541/6263 3385/2514/6263\nf 3059/3133/6264 3075/4586/6264 3074/3134/6264\nf 3014/4694/6265 3015/4695/6265 3013/4696/6265\nf 2725/4697/6266 2585/4247/6266 3384/4671/6266\nf 1872/1946/6267 1980/3289/6267 3506/1947/6267\nf 2975/4465/6268 3036/2801/6268 2986/2729/6268\nf 2954/4691/6269 2963/4678/6269 2946/4682/6269\nf 1369/2243/6270 243/2245/6270 1368/2889/6270\nf 3273/3515/6271 3407/3556/6271 1629/3229/6271\nf 3024/292/6272 3047/4515/6272 3046/293/6272\nf 2953/4680/6273 2962/294/6273 2961/2937/6273\nf 3118/4617/6274 3131/4582/6274 3117/4652/6274\nf 3372/2414/6275 3382/2466/6275 3404/4674/6275\nf 3093/4529/6276 3123/4491/6276 3092/2735/6276\nf 1993/1966/6277 2725/4698/6277 993/2786/6277\nf 3407/4683/6278 3183/4699/6278 3354/4666/6278\nf 3354/4666/6279 3183/4699/6279 3237/4692/6279\nf 3237/4692/6280 3353/4700/6280 3304/4675/6280\nf 3201/4569/6281 3200/4642/6281 3115/4673/6281\nf 3391/4687/6282 1957/3832/6282 3414/4701/6282\nf 3166/4583/6283 3165/3027/6283 3155/3026/6283\nf 3429/225/6284 2858/224/6284 2783/3021/6284\nf 3070/4509/6285 3143/4634/6285 3114/4636/6285\nf 3308/4702/6286 3327/4619/6286 3307/3738/6286\nf 559/1080/6287 353/1051/6287 1237/543/6287\nf 3423/4541/6288 3384/4671/6288 3373/4670/6288\nf 3407/4683/6289 3273/4703/6289 3183/4699/6289\nf 3353/4700/6290 1150/4704/6290 3304/4675/6290\nf 3403/4705/6291 1648/4684/6291 3304/4675/6291\nf 1150/4704/6292 3403/4705/6292 3304/4675/6292\nf 3403/4706/6293 3387/3042/6293 1648/4707/6293\nf 3330/4659/6294 3362/4625/6294 3312/3154/6294\nf 3034/4171/6295 3024/292/6295 2973/4679/6295\nf 3039/4708/6296 3017/4539/6296 3018/2905/6296\nf 3039/4708/6297 3061/4570/6297 3017/4539/6297\nf 1974/108/6298 3391/2413/6298 3413/2845/6298\nf 3391/4687/6299 3414/4701/6299 3413/4709/6299\nf 1477/3065/6300 3324/3108/6300 3367/3009/6300\nf 3200/4642/6301 3199/4710/6301 3164/4635/6301\nf 1976/4711/6302 3364/4712/6302 1489/4713/6302\nf 1652/3147/6303 3318/4613/6303 3334/3152/6303\nf 3259/4665/6304 3281/3740/6304 3215/3739/6304\nf 2918/4576/6305 2917/849/6305 2911/2357/6305\nf 2909/2415/6306 2918/4576/6306 2911/2357/6306\nf 3344/4482/6307 3308/4702/6307 3281/3740/6307\nf 3353/4700/6308 3237/4692/6308 3183/4699/6308\nf 2585/3101/6309 1993/1966/6309 1495/2913/6309\nf 3083/4714/6310 3106/4627/6310 3061/4570/6310\nf 853/4715/6311 851/1459/6311 2279/1800/6311\nf 3101/1410/6312 3175/4606/6312 3100/4127/6312\nf 3472/269/6313 2548/271/6313 3449/3612/6313\nf 3273/3515/6314 3334/3152/6314 3318/4613/6314\nf 1330/487/6315 492/276/6315 726/485/6315\nf 3393/4607/6316 2504/4716/6316 3414/2289/6316\nf 1976/109/6317 1977/2720/6317 3364/2835/6317\nf 3335/2429/6318 3336/314/6318 1669/862/6318\nf 3163/4605/6319 3259/4665/6319 3215/3739/6319\nf 2918/4576/6320 2938/4575/6320 2917/849/6320\nf 3170/1173/6321 3206/3209/6321 3193/4717/6321\nf 3170/4676/6322 3193/4718/6322 3148/4677/6322\nf 3423/4541/6323 2725/4697/6323 3384/4671/6323\nf 3356/4719/6324 3393/4607/6324 3355/2288/6324\nf 3411/4720/6325 3353/4700/6325 3183/4699/6325\nf 2936/3934/6326 2948/2728/6326 2955/3348/6326\nf 3163/4605/6327 3197/4210/6327 3175/4606/6327\nf 3360/4261/6328 3421/4212/6328 3382/2466/6328\nf 2975/4465/6329 3012/2799/6329 3036/2801/6329\nf 3412/4667/6330 1326/2758/6330 3221/4271/6330\nf 3413/4709/6331 2504/4721/6331 2712/4722/6331\nf 2724/1977/6332 3410/4723/6332 1977/2720/6332\nf 3073/4651/6333 3130/4537/6333 3116/4536/6333\nf 3273/4703/6334 3302/4724/6334 3183/4699/6334\nf 3183/4699/6335 3302/4724/6335 3411/4720/6335\nf 3214/4209/6336 3215/3739/6336 3243/4725/6336\nf 1921/3795/6337 3321/1941/6337 1922/1940/6337\nf 575/1738/6338 578/1468/6338 2500/1651/6338\nf 3414/4701/6339 2504/4721/6339 3413/4709/6339\nf 3252/2149/6340 781/2148/6340 3364/2835/6340\nf 3302/4726/6341 3273/3515/6341 3318/4613/6341\nf 2414/460/6342 2413/4439/6342 2407/1283/6342\nf 3411/4720/6343 3389/4727/6343 3353/4700/6343\nf 3321/1941/6344 3356/4728/6344 3355/1939/6344\nf 576/1654/6345 3301/4070/6345 3270/2518/6345\nf 2005/237/6346 1975/110/6346 1976/109/6346\nf 3413/2845/6347 2712/1976/6347 1958/232/6347\nf 3384/4671/6348 3422/3848/6348 3361/3847/6348\nf 1670/3245/6349 3302/4726/6349 3318/4613/6349\nf 3363/4729/6350 3320/4730/6350 3302/4724/6350\nf 3320/4730/6351 3411/4720/6351 3302/4724/6351\nf 3389/4727/6352 1150/4704/6352 3353/4700/6352\nf 1150/4704/6353 3040/4731/6353 3403/4705/6353\nf 3040/4732/6354 3351/4733/6354 3403/4706/6354\nf 3351/4733/6355 1694/2428/6355 3403/4706/6355\nf 3403/4706/6356 1694/2428/6356 1688/3018/6356\nf 3361/3847/6357 3383/3849/6357 3360/4261/6357\nf 2927/3164/6358 2938/4629/6358 2933/4604/6358\nf 3349/4734/6359 3348/4735/6359 3330/4659/6359\nf 3180/4658/6360 3203/4519/6360 3179/4633/6360\nf 3180/4658/6361 3234/2993/6361 3203/4519/6361\nf 2712/4722/6362 3410/4736/6362 2724/4737/6362\nf 3410/4723/6363 3316/4738/6363 3364/2835/6363\nf 1977/2720/6364 3410/4723/6364 3364/2835/6364\nf 3316/4738/6365 3252/2149/6365 3364/2835/6365\nf 2933/4604/6366 2938/4629/6366 2945/3165/6366\nf 2938/4629/6367 2946/4681/6367 2945/3165/6367\nf 3164/4635/6368 3199/4710/6368 3153/4609/6368\nf 3320/4730/6369 3389/4727/6369 3411/4720/6369\nf 2967/4739/6370 2966/4270/6370 2956/4740/6370\nf 3384/4671/6371 2585/4247/6371 3422/3848/6371\nf 3360/4261/6372 3382/2466/6372 3343/4741/6372\nf 2938/4575/6373 2927/850/6373 2917/849/6373\nf 3270/2387/6374 3269/4638/6374 3251/2385/6374\nf 3337/4093/6375 3321/1941/6375 1921/3795/6375\nf 3269/4638/6376 3270/2387/6376 3301/4612/6376\nf 2504/4721/6377 673/4742/6377 2712/4722/6377\nf 673/4742/6378 3410/4736/6378 2712/4722/6378\nf 3276/4743/6379 1572/4744/6379 3252/4745/6379\nf 3088/4516/6380 3142/4589/6380 3087/1409/6380\nf 3145/523/6381 3154/3028/6381 3144/524/6381\nf 3040/4731/6382 1150/4704/6382 3389/4727/6382\nf 3335/4746/6383 1694/4747/6383 3351/4748/6383\nf 3347/4603/6384 3374/2436/6384 3329/2435/6384\nf 3129/4538/6385 3130/4537/6385 3166/4583/6385\nf 3321/1941/6386 3337/4093/6386 3356/4728/6386\nf 3393/4607/6387 673/4749/6387 2504/4716/6387\nf 2946/4682/6388 2953/4680/6388 2945/4006/6388\nf 951/4750/6389 2966/4270/6389 952/4649/6389\nf 3154/3028/6390 3201/4569/6390 3144/524/6390\nf 507/4751/6391 3363/4752/6391 3302/4726/6391\nf 1474/4548/6392 3184/3130/6392 1481/3085/6392\nf 3385/2514/6393 3423/4541/6393 3373/4670/6393\nf 3261/4568/6394 3260/4597/6394 3201/4569/6394\nf 3246/335/6395 3231/4753/6395 3247/4754/6395\nf 3245/4668/6396 3261/4568/6396 3202/4672/6396\nf 572/1962/6397 3349/4632/6397 3350/3669/6397\nf 1492/2864/6398 2469/730/6398 1493/234/6398\nf 3337/4093/6399 3357/4755/6399 3356/4728/6399\nf 3356/4728/6400 3357/4755/6400 3393/4756/6400\nf 3357/4755/6401 3394/4757/6401 3393/4756/6401\nf 3393/4756/6402 3394/4757/6402 673/4742/6402\nf 673/4742/6403 3171/4758/6403 3410/4736/6403\nf 3410/4723/6404 2444/4759/6404 3316/4738/6404\nf 3316/4738/6405 3276/3070/6405 3252/2149/6405\nf 2940/4423/6406 2975/4465/6406 2948/2728/6406\nf 2940/4423/6407 2936/3934/6407 2921/3933/6407\nf 3092/2735/6408 3091/1788/6408 3054/1787/6408\nf 3192/2546/6409 3178/4554/6409 3231/4753/6409\nf 3222/367/6410 3363/4760/6410 507/328/6410\nf 3222/367/6411 3275/3428/6411 3320/4761/6411\nf 3363/4729/6412 3222/4762/6412 3320/4730/6412\nf 3219/4763/6413 3389/4727/6413 3320/4730/6413\nf 3271/4764/6414 3040/4731/6414 3389/4727/6414\nf 3040/4732/6415 3271/4765/6415 3351/4733/6415\nf 3271/4764/6416 3335/4766/6416 3351/4767/6416\nf 843/1500/6417 3388/1502/6417 894/1531/6417\nf 3192/2546/6418 3216/337/6418 3191/4590/6418\nf 3343/4741/6419 3382/2466/6419 3306/4591/6419\nf 3177/4685/6420 3178/4554/6420 3192/2546/6420\nf 3249/4523/6421 3300/4544/6421 3285/4546/6421\nf 3337/4093/6422 3338/4768/6422 3357/4755/6422\nf 673/4749/6423 1192/4769/6423 3171/4770/6423\nf 3171/4758/6424 2444/4771/6424 3410/4736/6424\nf 3170/1173/6425 92/1063/6425 3206/3209/6425\nf 3072/3861/6426 3073/4644/6426 3103/4640/6426\nf 3178/4554/6427 3177/4685/6427 3167/4628/6427\nf 3275/4772/6428 3219/4763/6428 3320/4730/6428\nf 3219/4763/6429 3271/4764/6429 3389/4727/6429\nf 3303/4773/6430 3317/4774/6430 3271/4764/6430\nf 3271/4764/6431 3317/4774/6431 3335/4766/6431\nf 326/1015/6432 1423/149/6432 170/1343/6432\nf 3133/4557/6433 3167/4628/6433 3146/3863/6433\nf 3297/4533/6434 3329/2435/6434 3311/4775/6434\nf 3288/2449/6435 3338/4768/6435 3337/4093/6435\nf 3357/4776/6436 3395/4777/6436 3394/4778/6436\nf 3395/4777/6437 1192/4769/6437 673/4749/6437\nf 3394/4778/6438 3395/4777/6438 673/4749/6438\nf 3171/4758/6439 3419/4779/6439 2444/4771/6439\nf 2953/4680/6440 2961/2937/6440 2945/4006/6440\nf 3014/4690/6441 3013/4460/6441 2999/4647/6441\nf 2925/3824/6442 2914/4780/6442 2915/3582/6442\nf 3335/2429/6443 3317/4781/6443 3336/314/6443\nf 3470/281/6444 3476/355/6444 3497/656/6444\nf 3103/4640/6445 3073/4644/6445 3145/4622/6445\nf 3084/4782/6446 3108/4783/6446 3124/4784/6446\nf 3149/2564/6447 3181/2775/6447 3094/4563/6447\nf 3224/4785/6448 1498/3195/6448 3196/4786/6448\nf 1889/2448/6449 3253/4298/6449 3288/2449/6449\nf 3253/4298/6450 3277/4787/6450 3288/2449/6450\nf 3288/2449/6451 3277/4787/6451 3338/4768/6451\nf 3419/4788/6452 3171/4770/6452 1192/4769/6452\nf 1562/3071/6453 3276/3070/6453 3316/4738/6453\nf 3115/4673/6454 3200/4642/6454 3143/4634/6454\nf 3144/524/6455 3201/4569/6455 3115/4673/6455\nf 3053/4789/6456 3061/4570/6456 3039/4708/6456\nf 3333/1547/6457 3219/4763/6457 3275/4772/6457\nf 3303/4773/6458 3271/4764/6458 3219/4763/6458\nf 3184/4790/6459 3196/3774/6459 1475/4791/6459\nf 2428/4656/6460 3076/4655/6460 3084/4782/6460\nf 3108/4792/6461 3150/3059/6461 3124/3031/6461\nf 3053/4789/6462 3083/4714/6462 3061/4570/6462\nf 3277/4787/6463 3322/4793/6463 3338/4768/6463\nf 3338/4768/6464 3322/4793/6464 3357/4755/6464\nf 3357/4755/6465 3365/4794/6465 3395/4795/6465\nf 2889/4796/6466 3419/4779/6466 1192/4797/6466\nf 2444/4771/6467 3409/4798/6467 3316/4799/6467\nf 3409/4798/6468 1562/4800/6468 3316/4799/6468\nf 953/2386/6469 3251/2385/6469 3234/2993/6469\nf 2920/4503/6470 2919/4577/6470 2402/2512/6470\nf 2939/2465/6471 2955/3348/6471 2964/527/6471\nf 531/4801/6472 3333/1547/6472 3275/4772/6472\nf 3333/1547/6473 3303/4773/6473 3219/4763/6473\nf 3118/4617/6474 3117/4652/6474 3082/4587/6474\nf 3000/4560/6475 2988/4268/6475 2976/2126/6475\nf 3076/4655/6476 3108/4783/6476 3084/4782/6476\nf 3107/4802/6477 3122/4556/6477 3106/4627/6477\nf 1831/937/6478 1599/939/6478 1839/2181/6478\nf 3277/4787/6479 3289/4803/6479 3322/4793/6479\nf 3322/4793/6480 3365/4794/6480 3357/4755/6480\nf 3365/4794/6481 3358/4804/6481 3395/4795/6481\nf 3358/4804/6482 2889/4796/6482 1192/4797/6482\nf 3395/4795/6483 3358/4804/6483 1192/4797/6483\nf 3419/4779/6484 3379/4805/6484 2444/4771/6484\nf 3422/3848/6485 2469/3908/6485 3421/4212/6485\nf 3191/4590/6486 3216/337/6486 3202/4672/6486\nf 3147/4806/6487 3180/4658/6487 3122/4556/6487\nf 3063/898/6488 987/1092/6488 3094/4563/6488\nf 3303/4773/6489 2279/4807/6489 3317/4774/6489\nf 2967/4739/6490 2988/4268/6490 2966/4270/6490\nf 3064/4808/6491 2418/4654/6491 2426/4809/6491\nf 3085/4810/6492 3076/4655/6492 2418/4654/6492\nf 3085/4810/6493 3108/4783/6493 3076/4655/6493\nf 3085/4810/6494 3109/4811/6494 3108/4783/6494\nf 3109/4811/6495 3150/4812/6495 3108/4783/6495\nf 3404/4377/6496 1491/2933/6496 1480/2932/6496\nf 3253/4298/6497 3289/4803/6497 3277/4787/6497\nf 3379/4805/6498 3409/4798/6498 2444/4771/6498\nf 3081/4510/6499 3047/4515/6499 3024/292/6499\nf 3048/4140/6500 3071/4664/6500 3034/4171/6500\nf 3204/1982/6501 3234/2993/6501 3180/4658/6501\nf 3333/1547/6502 531/4801/6502 866/1546/6502\nf 3388/1502/6503 3303/4773/6503 3333/1547/6503\nf 3388/1502/6504 853/1501/6504 3303/4773/6504\nf 3265/4813/6505 2639/4225/6505 1868/4290/6505\nf 3156/4686/6506 3166/4583/6506 3131/4582/6506\nf 3156/4686/6507 3176/4585/6507 3166/4583/6507\nf 2949/3532/6508 2968/4814/6508 2446/3567/6508\nf 3030/4158/6509 3064/4808/6509 2426/4809/6509\nf 3064/4808/6510 3085/4810/6510 2418/4654/6510\nf 3493/399/6511 3439/2120/6511 3440/2538/6511\nf 2639/4225/6512 3265/4813/6512 3253/4298/6512\nf 2660/3047/6513 2639/4225/6513 3253/4298/6513\nf 3253/4298/6514 3265/4813/6514 3289/4803/6514\nf 3358/4804/6515 2849/4815/6515 2889/4796/6515\nf 2661/4816/6516 1562/4800/6516 3409/4798/6516\nf 92/1063/6517 601/1428/6517 3206/3209/6517\nf 3081/4510/6518 3114/4636/6518 3088/4516/6518\nf 1511/3061/6519 3150/3059/6519 1481/3085/6519\nf 3167/4628/6520 3156/4686/6520 3132/3864/6520\nf 894/1531/6521 3388/1502/6521 3333/1547/6521\nf 3303/4773/6522 853/1501/6522 2279/4807/6522\nf 3077/4817/6523 3064/4808/6523 3030/4158/6523\nf 3151/4818/6524 1474/4819/6524 3109/4811/6524\nf 2768/3629/6525 2062/2136/6525 2808/2135/6525\nf 3322/4793/6526 3323/4820/6526 3365/4794/6526\nf 3323/4820/6527 3358/4804/6527 3365/4794/6527\nf 2889/4796/6528 3379/4805/6528 3419/4779/6528\nf 493/327/6529 3222/367/6529 507/328/6529\nf 3081/4510/6530 3088/4516/6530 3047/4515/6530\nf 2935/1577/6531 2939/1579/6531 2954/4821/6531\nf 2920/4503/6532 2935/4502/6532 2919/4577/6532\nf 3129/4621/6533 3155/4822/6533 3145/4622/6533\nf 2978/66/6534 2995/4368/6534 2205/3867/6534\nf 2298/64/6535 2978/66/6535 2205/3867/6535\nf 3020/4160/6536 3077/4817/6536 3030/4158/6536\nf 3151/4818/6537 3109/4811/6537 3085/4810/6537\nf 1474/4819/6538 3151/4818/6538 3184/4790/6538\nf 3265/4813/6539 3322/4793/6539 3289/4803/6539\nf 2849/4815/6540 3379/4805/6540 2889/4796/6540\nf 3350/3669/6541 33/446/6541 27/397/6541\nf 3229/4483/6542 3259/4665/6542 3198/4693/6542\nf 2955/4660/6543 2939/4823/6543 2928/4824/6543\nf 3115/4673/6544 3143/4634/6544 3070/4509/6544\nf 3215/3739/6545 3295/4637/6545 3243/4725/6545\nf 2919/4577/6546 2934/4574/6546 2918/4576/6546\nf 3048/4140/6547 3025/2485/6547 3049/4825/6547\nf 3077/4817/6548 3085/4810/6548 3064/4808/6548\nf 3177/4685/6549 3176/4585/6549 3156/4686/6549\nf 3324/4826/6550 3266/4827/6550 3255/4828/6550\nf 3323/4820/6551 3380/4829/6551 3358/4804/6551\nf 3358/4804/6552 3380/4829/6552 2849/4815/6552\nf 3380/4829/6553 1074/4830/6553 2849/4815/6553\nf 1074/4830/6554 3379/4805/6554 2849/4815/6554\nf 3379/4805/6555 1049/4831/6555 3409/4798/6555\nf 2661/4832/6556 3386/567/6556 1623/2948/6556\nf 1492/4608/6557 3420/4376/6557 2469/4833/6557\nf 3312/3154/6558 3347/4603/6558 3329/2435/6558\nf 3200/4642/6559 3229/4483/6559 3199/4710/6559\nf 2249/4204/6560 2341/4513/6560 1221/3916/6560\nf 3132/3864/6561 3156/4686/6561 3131/4582/6561\nf 3083/4714/6562 3107/4802/6562 3106/4627/6562\nf 3147/4806/6563 3122/4556/6563 3107/4802/6563\nf 3159/4834/6564 3085/4810/6564 3077/4817/6564\nf 3159/4834/6565 3151/4818/6565 3085/4810/6565\nf 3151/4818/6566 3196/3774/6566 3184/4790/6566\nf 3265/4813/6567 1860/4835/6567 3322/4793/6567\nf 3322/4793/6568 1860/4835/6568 3323/4820/6568\nf 3323/4820/6569 3366/4836/6569 3380/4829/6569\nf 1049/4831/6570 2661/4816/6570 3409/4798/6570\nf 1954/3640/6571 2610/3637/6571 2807/3949/6571\nf 2939/2465/6572 2974/529/6572 2954/4691/6572\nf 2910/2255/6573 2920/4503/6573 2402/2512/6573\nf 3377/4646/6574 3376/4602/6574 3347/4603/6574\nf 3263/4618/6575 3298/1735/6575 3268/4504/6575\nf 3003/4837/6576 3020/4160/6576 3002/4838/6576\nf 3110/4839/6577 3077/4817/6577 3020/4160/6577\nf 1860/3840/6578 1859/3794/6578 1853/2470/6578\nf 3246/335/6579 3247/4754/6579 3262/336/6579\nf 3283/4669/6580 3282/4626/6580 3260/4597/6580\nf 3110/4839/6581 3020/4160/6581 3003/4837/6581\nf 1860/4835/6582 1861/1915/6582 3323/4820/6582\nf 1074/4830/6583 2736/4840/6583 3379/4805/6583\nf 2736/4840/6584 1049/4831/6584 3379/4805/6584\nf 2983/528/6585 2982/4572/6585 2974/529/6585\nf 3153/4609/6586 3163/4605/6586 3101/1410/6586\nf 3377/2567/6587 571/2087/6587 3376/2095/6587\nf 3192/2546/6588 3231/4753/6588 3246/335/6588\nf 3015/4689/6589 2988/4268/6589 3026/4601/6589\nf 2994/4841/6590 3004/4842/6590 3003/4837/6590\nf 3004/4842/6591 3065/4843/6591 3003/4837/6591\nf 3065/4843/6592 3110/4839/6592 3003/4837/6592\nf 3110/4839/6593 3159/4834/6593 3077/4817/6593\nf 1916/3190/6594 1449/2725/6594 1264/2747/6594\nf 987/1092/6595 3149/2564/6595 3094/4563/6595\nf 1861/1915/6596 3366/4836/6596 3323/4820/6596\nf 3415/4844/6597 3380/4829/6597 3366/4836/6597\nf 3339/4845/6598 3415/4844/6598 3366/4836/6598\nf 3380/4829/6599 3415/4844/6599 1074/4830/6599\nf 2661/4832/6600 2709/565/6600 3386/567/6600\nf 3184/3130/6601 1475/4846/6601 1482/3129/6601\nf 613/2777/6602 3195/1932/6602 3181/2775/6602\nf 2427/4110/6603 2418/4847/6603 2428/4848/6603\nf 2995/4849/6604 3004/4842/6604 2994/4841/6604\nf 3185/3772/6605 3151/4818/6605 3159/4834/6605\nf 3185/3772/6606 3196/3774/6606 3151/4818/6606\nf 3200/4642/6607 3164/4635/6607 3143/4634/6607\nf 1326/2758/6608 3412/4667/6608 1364/3219/6608\nf 2736/4840/6609 1074/4830/6609 3415/4844/6609\nf 1049/4831/6610 189/4850/6610 2661/4816/6610\nf 2983/528/6611 3048/4140/6611 2982/4572/6611\nf 3132/3864/6612 3131/4582/6612 3118/4617/6612\nf 1562/3171/6613 2661/4832/6613 1623/2948/6613\nf 3029/578/6614 3018/2905/6614 955/2175/6614\nf 3029/578/6615 3039/4708/6615 3018/2905/6615\nf 3041/4851/6616 3065/4843/6616 3004/4842/6616\nf 3065/4843/6617 3096/4852/6617 3110/4839/6617\nf 3160/4853/6618 3159/4834/6618 3110/4839/6618\nf 2427/4166/6619 2426/4854/6619 2418/4855/6619\nf 3339/4845/6620 3396/2917/6620 3415/4844/6620\nf 1645/2916/6621 2736/4840/6621 3415/4844/6621\nf 3396/2917/6622 1645/2916/6622 3415/4844/6622\nf 2736/4840/6623 3235/4856/6623 1049/4831/6623\nf 3235/4856/6624 189/4850/6624 1049/4831/6624\nf 189/4857/6625 2709/565/6625 2661/4832/6625\nf 3104/4588/6626 3130/4537/6626 3073/4651/6626\nf 2940/4423/6627 2948/2728/6627 2936/3934/6627\nf 3135/4444/6628 3107/4802/6628 3083/4714/6628\nf 3135/4444/6629 3148/4677/6629 3107/4802/6629\nf 3148/4677/6630 3147/4806/6630 3107/4802/6630\nf 2978/4858/6631 3021/4859/6631 2995/4849/6631\nf 3021/4859/6632 3004/4842/6632 2995/4849/6632\nf 3021/4859/6633 3041/4851/6633 3004/4842/6633\nf 3096/4852/6634 3160/4853/6634 3110/4839/6634\nf 1704/2988/6635 1688/3018/6635 1694/2428/6635\nf 1861/1915/6636 3339/4845/6636 3366/4836/6636\nf 3208/3016/6637 2736/4840/6637 1645/2916/6637\nf 3344/4482/6638 3281/3740/6638 3259/4665/6638\nf 3262/336/6639 3245/4668/6639 3216/337/6639\nf 2956/4740/6640 2966/4270/6640 951/4750/6640\nf 3193/4718/6641 3180/4658/6641 3147/4806/6641\nf 3160/4853/6642 3185/3772/6642 3159/4834/6642\nf 1219/45/6643 1221/3854/6643 2341/43/6643\nf 3208/3016/6644 3235/4856/6644 2736/4840/6644\nf 3048/4140/6645 3049/4825/6645 3071/4664/6645\nf 3404/4674/6646 3421/4212/6646 3420/4540/6646\nf 2954/4691/6647 2946/4682/6647 2947/4860/6647\nf 2413/4439/6648 2306/3467/6648 2908/3466/6648\nf 2968/4861/6649 3005/4862/6649 2978/4858/6649\nf 3005/4862/6650 3021/4859/6650 2978/4858/6650\nf 3209/4863/6651 3185/3772/6651 3160/4853/6651\nf 3209/4863/6652 3224/3773/6652 3185/3772/6652\nf 3224/4785/6653 3239/4479/6653 3223/4478/6653\nf 3254/4864/6654 3255/4828/6654 3266/4827/6654\nf 1476/3066/6655 3266/4492/6655 3324/3108/6655\nf 3191/4590/6656 3202/4672/6656 3165/3027/6656\nf 3314/4524/6657 3315/4069/6657 3332/1653/6657\nf 2423/2030/6658 130/2032/6658 2575/3627/6658\nf 3163/4605/6659 3215/3739/6659 3214/4209/6659\nf 3249/4523/6660 3248/4550/6660 3233/4555/6660\nf 2912/4865/6661 2931/4866/6661 2930/4867/6661\nf 2931/4868/6662 2957/4869/6662 2949/3532/6662\nf 2930/4867/6663 2931/4866/6663 2949/4870/6663\nf 2949/4870/6664 2957/4871/6664 2968/4861/6664\nf 3041/4851/6665 3111/4872/6665 3065/4843/6665\nf 3111/4872/6666 3096/4852/6666 3065/4843/6666\nf 3209/4863/6667 3239/4873/6667 3224/3773/6667\nf 3239/4873/6668 3255/4828/6668 3254/4864/6668\nf 1181/418/6669 3467/1591/6669 812/2103/6669\nf 1181/4874/6670 1207/333/6670 3467/4875/6670\nf 3341/4876/6671 3340/4877/6671 3367/4878/6671\nf 3324/4826/6672 3341/4876/6672 3367/4878/6672\nf 2953/4680/6673 3024/292/6673 2962/294/6673\nf 3235/4856/6674 3418/4879/6674 189/4850/6674\nf 3418/4880/6675 3287/671/6675 189/4857/6675\nf 189/4857/6676 3287/671/6676 2709/565/6676\nf 2982/4572/6677 2981/4573/6677 2963/4678/6677\nf 3011/4494/6678 3036/2801/6678 3035/3135/6678\nf 2922/4881/6679 2912/4865/6679 2371/4882/6679\nf 2912/4865/6680 2922/4881/6680 2931/4866/6680\nf 2958/4883/6681 2968/4861/6681 2957/4871/6681\nf 2958/4883/6682 3005/4862/6682 2968/4861/6682\nf 3111/4872/6683 3160/4853/6683 3096/4852/6683\nf 3172/4884/6684 3209/4863/6684 3160/4853/6684\nf 3209/4863/6685 3255/4828/6685 3239/4873/6685\nf 3283/4669/6686 3260/4597/6686 3261/4568/6686\nf 1498/3195/6687 3223/4478/6687 1499/3230/6687\nf 1805/2467/6688 3491/2468/6688 3274/3364/6688\nf 2922/4881/6689 2371/4882/6689 2902/4885/6689\nf 1019/4886/6690 2922/4881/6690 2902/4885/6690\nf 3042/4887/6691 3005/4862/6691 2958/4883/6691\nf 3042/4887/6692 3021/4859/6692 3005/4862/6692\nf 3021/4859/6693 3055/4888/6693 3041/4851/6693\nf 3055/4888/6694 3078/4889/6694 3041/4851/6694\nf 3078/4889/6695 3111/4872/6695 3041/4851/6695\nf 3161/4890/6696 3160/4853/6696 3111/4872/6696\nf 3161/4890/6697 3172/4884/6697 3160/4853/6697\nf 3172/4884/6698 3225/4891/6698 3209/4863/6698\nf 3278/4892/6699 3255/4828/6699 3209/4863/6699\nf 3291/4893/6700 3324/4826/6700 3255/4828/6700\nf 3291/4893/6701 3341/4876/6701 3324/4826/6701\nf 3341/4876/6702 3368/4894/6702 3340/4877/6702\nf 2928/4501/6703 2936/3934/6703 2955/3348/6703\nf 458/4895/6704 3235/4856/6704 3208/3016/6704\nf 458/4895/6705 3418/4879/6705 3235/4856/6705\nf 216/3858/6706 2354/4086/6706 2337/3572/6706\nf 954/577/6707 3054/1787/6707 3029/578/6707\nf 3199/4710/6708 3229/4483/6708 3198/4693/6708\nf 2941/4896/6709 2931/4866/6709 2922/4881/6709\nf 2941/4896/6710 2957/4871/6710 2931/4866/6710\nf 2941/4896/6711 2958/4883/6711 2957/4871/6711\nf 3042/4887/6712 3055/4888/6712 3021/4859/6712\nf 3278/4892/6713 3291/4893/6713 3255/4828/6713\nf 3368/3112/6714 3397/2180/6714 1486/2877/6714\nf 3105/4526/6715 3134/4528/6715 3120/4897/6715\nf 3050/2800/6716 3059/3133/6716 3036/2801/6716\nf 3418/4880/6717 3095/682/6717 3287/671/6717\nf 3114/4636/6718 3164/4635/6718 3142/4589/6718\nf 3164/4635/6719 3153/4609/6719 3142/4589/6719\nf 2934/4630/6720 2935/1577/6720 2947/4631/6720\nf 2982/4572/6721 2963/4678/6721 2954/4691/6721\nf 3198/4693/6722 3259/4665/6722 3163/4605/6722\nf 2900/4898/6723 2913/4899/6723 1019/4886/6723\nf 2913/4899/6724 2922/4881/6724 1019/4886/6724\nf 3006/4900/6725 3042/4887/6725 2958/4883/6725\nf 3186/4901/6726 3225/4891/6726 3172/4884/6726\nf 3291/4893/6727 3398/4902/6727 3341/4876/6727\nf 3398/4902/6728 3368/4894/6728 3341/4876/6728\nf 3368/4894/6729 3398/4902/6729 3397/4903/6729\nf 3392/2994/6730 458/4895/6730 3208/3016/6730\nf 3103/522/6731 3144/524/6731 3102/4616/6731\nf 3102/4616/6732 3115/4673/6732 3070/4509/6732\nf 2937/4904/6733 2941/4896/6733 2922/4881/6733\nf 3066/4905/6734 3078/4889/6734 3055/4888/6734\nf 3137/4906/6735 3161/4890/6735 3111/4872/6735\nf 3225/4891/6736 3278/4892/6736 3209/4863/6736\nf 3291/4893/6737 3399/4907/6737 3398/4902/6737\nf 3392/2994/6738 3207/756/6738 458/4895/6738\nf 2935/1577/6739 2954/4821/6739 2947/4631/6739\nf 3071/4664/6740 3103/522/6740 3102/4616/6740\nf 3281/3740/6741 3308/4702/6741 3307/3738/6741\nf 3049/3596/6742 3072/3861/6742 3071/4639/6742\nf 3169/4571/6743 3168/4521/6743 3134/4528/6743\nf 3217/4520/6744 3249/4523/6744 3233/4555/6744\nf 2903/4908/6745 2913/4899/6745 2900/4898/6745\nf 2937/4904/6746 2922/4881/6746 2913/4899/6746\nf 3007/4909/6747 2958/4883/6747 2941/4896/6747\nf 3007/4909/6748 3006/4900/6748 2958/4883/6748\nf 3066/4905/6749 3055/4888/6749 3042/4887/6749\nf 3097/4910/6750 3078/4889/6750 3066/4905/6750\nf 3125/4911/6751 3111/4872/6751 3078/4889/6751\nf 3097/4910/6752 3125/4911/6752 3078/4889/6752\nf 3125/4911/6753 3137/4906/6753 3111/4872/6753\nf 3187/4912/6754 3186/4901/6754 3172/4884/6754\nf 3187/4912/6755 3210/4913/6755 3186/4901/6755\nf 3210/4913/6756 3225/4891/6756 3186/4901/6756\nf 3256/4914/6757 3278/4892/6757 3225/4891/6757\nf 1867/4245/6758 2639/4225/6758 2659/2882/6758\nf 458/4895/6759 3207/756/6759 3418/4879/6759\nf 1868/3776/6760 1859/3794/6760 3265/3839/6760\nf 3054/1787/6761 3039/4708/6761 3029/578/6761\nf 3054/1787/6762 3053/4789/6762 3039/4708/6762\nf 2937/4904/6763 2969/4915/6763 2941/4896/6763\nf 2969/4915/6764 3007/4909/6764 2941/4896/6764\nf 3007/4909/6765 3008/4916/6765 3006/4900/6765\nf 3006/4900/6766 3066/4905/6766 3042/4887/6766\nf 3256/4914/6767 3291/4893/6767 3278/4892/6767\nf 3399/4907/6768 3397/4903/6768 3398/4902/6768\nf 781/2148/6769 1572/2150/6769 2046/2265/6769\nf 3207/4917/6770 3378/2953/6770 3418/4880/6770\nf 3378/2953/6771 3408/4918/6771 3095/682/6771\nf 3418/4880/6772 3378/2953/6772 3095/682/6772\nf 3095/682/6773 3408/4918/6773 252/670/6773\nf 2970/4919/6774 2969/4915/6774 2937/4904/6774\nf 2950/4920/6775 2970/4919/6775 2937/4904/6775\nf 2970/4919/6776 3007/4909/6776 2969/4915/6776\nf 2970/4919/6777 3009/4921/6777 3007/4909/6777\nf 3009/4921/6778 3008/4916/6778 3007/4909/6778\nf 3008/4916/6779 3043/4922/6779 3006/4900/6779\nf 3043/4922/6780 3066/4905/6780 3006/4900/6780\nf 3043/4922/6781 3056/4923/6781 3066/4905/6781\nf 3056/4923/6782 3086/4924/6782 3066/4905/6782\nf 3086/4924/6783 3097/4910/6783 3066/4905/6783\nf 3126/4925/6784 3125/4911/6784 3097/4910/6784\nf 3126/4925/6785 3137/4906/6785 3125/4911/6785\nf 3256/4914/6786 3225/4891/6786 3210/4913/6786\nf 3416/4926/6787 3397/4903/6787 3399/4907/6787\nf 2261/1889/6788 2230/3974/6788 2193/847/6788\nf 2819/2954/6789 3378/2953/6789 3207/4917/6789\nf 3408/4918/6790 234/760/6790 252/670/6790\nf 2403/2454/6791 2919/4577/6791 2909/2415/6791\nf 3205/1983/6792 3204/1982/6792 3180/4658/6792\nf 2923/4927/6793 2913/4899/6793 2903/4908/6793\nf 2923/4927/6794 2937/4904/6794 2913/4899/6794\nf 2923/4927/6795 2950/4920/6795 2937/4904/6795\nf 3009/4928/6796 3022/4929/6796 3008/4930/6796\nf 3256/4914/6797 3325/4931/6797 3291/4893/6797\nf 3325/4931/6798 3399/4907/6798 3291/4893/6798\nf 3416/4932/6799 1487/2949/6799 3397/4933/6799\nf 3193/4718/6800 3205/1983/6800 3180/4658/6800\nf 1849/3270/6801 2249/4204/6801 2815/3250/6801\nf 3408/4918/6802 235/824/6802 234/760/6802\nf 572/1962/6803 3348/2147/6803 3349/4632/6803\nf 3149/2564/6804 614/2776/6804 3181/2775/6804\nf 2942/4934/6805 2950/4920/6805 2923/4927/6805\nf 2979/4935/6806 2970/4919/6806 2950/4920/6806\nf 2979/4935/6807 2996/4936/6807 2970/4919/6807\nf 3031/4937/6808 3009/4928/6808 2970/4938/6808\nf 2996/4939/6809 3031/4937/6809 2970/4938/6809\nf 3031/4937/6810 3022/4929/6810 3009/4928/6810\nf 3112/4940/6811 3097/4910/6811 3086/4924/6811\nf 3097/4941/6812 3112/4942/6812 3126/4943/6812\nf 3257/4944/6813 3256/4914/6813 3210/4913/6813\nf 3257/4944/6814 3292/4945/6814 3256/4914/6814\nf 3417/3056/6815 3416/4926/6815 3399/4907/6815\nf 3417/3056/6816 1164/4946/6816 3416/4926/6816\nf 1164/3224/6817 1487/2949/6817 3416/4932/6817\nf 1482/3129/6818 1475/4846/6818 1498/3195/6818\nf 3348/4735/6819 3362/4625/6819 3330/4659/6819\nf 1853/2470/6820 1861/4947/6820 1860/3840/6820\nf 2585/4247/6821 1693/4948/6821 1060/3907/6821\nf 2924/4949/6822 2923/4927/6822 2903/4908/6822\nf 2901/4155/6823 2924/4949/6823 2903/4908/6823\nf 2971/4950/6824 2979/4935/6824 2950/4920/6824\nf 2942/4951/6825 2971/4952/6825 2950/4953/6825\nf 3325/4931/6826 3417/3056/6826 3399/4907/6826\nf 2920/4503/6827 2936/3934/6827 2928/4501/6827\nf 2279/1800/6828 3336/314/6828 3317/4781/6828\nf 1656/2952/6829 3272/3004/6829 3378/2953/6829\nf 3272/3004/6830 3408/4918/6830 3378/2953/6830\nf 3272/3004/6831 235/824/6831 3408/4918/6831\nf 2929/2508/6832 2936/3934/6832 2920/4503/6832\nf 2963/4678/6833 2981/4573/6833 2973/4679/6833\nf 3313/1736/6834 3330/4659/6834 3312/3154/6834\nf 1488/713/6835 1487/2949/6835 1164/3224/6835\nf 2904/3186/6836 2924/4949/6836 2901/4155/6836\nf 3044/4954/6837 3031/4955/6837 2996/4936/6837\nf 3292/4945/6838 3325/4931/6838 3256/4914/6838\nf 1872/1946/6839 3510/1039/6839 1838/1038/6839\nf 586/1676/6840 993/2786/6840 3405/2019/6840\nf 2981/4573/6841 3034/4171/6841 2973/4679/6841\nf 3244/4641/6842 3267/4534/6842 3230/4486/6842\nf 2932/4956/6843 2923/4927/6843 2924/4949/6843\nf 2932/4956/6844 2942/4934/6844 2923/4927/6844\nf 2942/4951/6845 2951/4957/6845 2971/4952/6845\nf 2997/4958/6846 2979/4935/6846 2971/4950/6846\nf 2997/4958/6847 2996/4936/6847 2979/4935/6847\nf 2997/4958/6848 3044/4954/6848 2996/4936/6848\nf 3067/4959/6849 3086/4924/6849 3056/4923/6849\nf 3112/4940/6850 3127/4960/6850 3126/4925/6850\nf 3292/4945/6851 3369/4961/6851 3325/4931/6851\nf 2500/3055/6852 1164/4946/6852 3417/3056/6852\nf 955/2175/6853 3018/2905/6853 2439/2906/6853\nf 3272/3004/6854 1687/887/6854 235/824/6854\nf 3070/4509/6855 3114/4636/6855 3081/4510/6855\nf 1722/3157/6856 1748/3440/6856 2912/3439/6856\nf 3054/1787/6857 3062/1789/6857 3053/4789/6857\nf 3062/1789/6858 3083/4714/6858 3053/4789/6858\nf 2959/4962/6859 2997/4958/6859 2971/4950/6859\nf 3010/4963/6860 3044/4954/6860 2997/4958/6860\nf 3098/4964/6861 3086/4924/6861 3067/4959/6861\nf 3098/4964/6862 3112/4940/6862 3086/4924/6862\nf 3369/4961/6863 3417/3056/6863 3325/4931/6863\nf 3062/1789/6864 3135/4444/6864 3083/4714/6864\nf 3123/4491/6865 3135/4444/6865 3091/1788/6865\nf 1687/887/6866 217/875/6866 235/824/6866\nf 3199/4710/6867 3198/4693/6867 3153/4609/6867\nf 3267/4534/6868 3310/4596/6868 3309/4481/6868\nf 3310/4596/6869 3345/4547/6869 3309/4481/6869\nf 3177/4685/6870 3192/2546/6870 3176/4585/6870\nf 2905/4117/6871 2924/4949/6871 2904/3186/6871\nf 2942/4951/6872 2932/4965/6872 2951/4957/6872\nf 2959/4962/6873 2971/4950/6873 2951/4966/6873\nf 3010/4963/6874 3068/4967/6874 3044/4954/6874\nf 3127/4960/6875 3112/4940/6875 3098/4964/6875\nf 3293/4968/6876 3292/4945/6876 3257/4944/6876\nf 3258/4969/6877 3293/4968/6877 3257/4944/6877\nf 2976/2126/6878 2988/4268/6878 2967/4739/6878\nf 993/4543/6879 2725/4697/6879 3423/4541/6879\nf 3146/3863/6880 3167/4628/6880 3132/3864/6880\nf 3148/4677/6881 3193/4718/6881 3147/4806/6881\nf 2988/4268/6882 2999/4647/6882 2987/4269/6882\nf 3193/4718/6883 3206/4970/6883 3205/1983/6883\nf 2914/4780/6884 2932/4956/6884 2924/4949/6884\nf 2932/4965/6885 2943/4971/6885 2951/4957/6885\nf 2943/4972/6886 2959/4962/6886 2951/4966/6886\nf 3023/4973/6887 3010/4963/6887 2997/4958/6887\nf 3400/4662/6888 3417/3056/6888 3369/4961/6888\nf 3192/2546/6889 3191/4590/6889 3176/4585/6889\nf 3374/2436/6890 3385/2514/6890 3373/4670/6890\nf 3024/292/6891 3058/4172/6891 3081/4510/6891\nf 2919/4577/6892 2918/4576/6892 2909/2415/6892\nf 2988/4268/6893 3015/4689/6893 2999/4647/6893\nf 2905/4117/6894 2914/4780/6894 2924/4949/6894\nf 2959/4962/6895 3023/4973/6895 2997/4958/6895\nf 3079/4974/6896 3098/4964/6896 3067/4959/6896\nf 3127/4960/6897 3098/4964/6897 3138/4975/6897\nf 3326/166/6898 3292/4945/6898 3293/4968/6898\nf 3326/166/6899 3369/4961/6899 3292/4945/6899\nf 3359/4198/6900 3400/4662/6900 3369/4961/6900\nf 575/3054/6901 3417/3056/6901 3400/4662/6901\nf 1056/3478/6902 561/2361/6902 3136/3530/6902\nf 2965/2730/6903 2986/2729/6903 2985/4505/6903\nf 3063/898/6904 3092/2735/6904 954/577/6904\nf 3069/4976/6905 3010/4963/6905 3023/4973/6905\nf 3069/4976/6906 3068/4967/6906 3010/4963/6906\nf 3158/4489/6907 3195/1932/6907 3157/4490/6907\nf 3260/4597/6908 3267/4534/6908 3244/4641/6908\nf 1474/4819/6909 3150/4812/6909 3109/4811/6909\nf 2585/3101/6910 2725/4698/6910 1993/1966/6910\nf 3374/2436/6911 3373/4670/6911 3346/4581/6911\nf 3157/4490/6912 3194/4125/6912 3170/4676/6912\nf 2932/4965/6913 2944/2230/6913 2943/4971/6913\nf 2952/69/6914 2959/4962/6914 2943/4972/6914\nf 2952/69/6915 2972/68/6915 2959/4962/6915\nf 2972/68/6916 3023/4973/6916 2959/4962/6916\nf 3099/4688/6917 3098/4964/6917 3079/4974/6917\nf 3099/4688/6918 3139/3100/6918 3098/4964/6918\nf 3098/4964/6919 3139/3100/6919 3138/4975/6919\nf 3401/3140/6920 3400/4662/6920 3359/4198/6920\nf 3074/3134/6921 3073/4651/6921 3035/3135/6921\nf 2987/4269/6922 2999/4647/6922 2940/4423/6922\nf 331/525/6923 3386/567/6923 263/566/6923\nf 2973/4679/6924 3024/292/6924 2953/4680/6924\nf 3260/4597/6925 3244/4641/6925 3201/4569/6925\nf 3074/3134/6926 3104/4588/6926 3073/4651/6926\nf 3201/4569/6927 3244/4641/6927 3200/4642/6927\nf 2915/3582/6928 2914/4780/6928 2905/4117/6928\nf 2914/4780/6929 2925/3824/6929 2932/4956/6929\nf 2932/4965/6930 2925/2228/6930 2944/2230/6930\nf 2952/69/6931 2943/4972/6931 2944/3743/6931\nf 3032/3388/6932 3023/4973/6932 2972/68/6932\nf 3032/3388/6933 3069/4976/6933 3023/4973/6933\nf 3139/3100/6934 3162/4977/6934 3138/4975/6934\nf 3305/167/6935 3258/4969/6935 3240/3903/6935\nf 3305/167/6936 3293/4968/6936 3258/4969/6936\nf 3326/166/6937 3359/4198/6937 3369/4961/6937\nf 1688/3018/6938 3387/3042/6938 3403/4706/6938\nf 3230/4486/6939 3229/4483/6939 3200/4642/6939\nf 2906/2458/6940 2915/3582/6940 2905/4117/6940\nf 3033/67/6941 3032/3388/6941 2972/68/6941\nf 3032/3388/6942 3080/3676/6942 3069/4976/6942\nf 3139/3100/6943 3128/1219/6943 3162/4977/6943\nf 3305/167/6944 3326/166/6944 3293/4968/6944\nf 1478/2828/6945 3367/3009/6945 1486/2877/6945\n"
  },
  {
    "path": "libs/potree/resources/textures/LICENSE",
    "content": "\n\n\nbrick_pavement.jpg:\nhttp://www.wildtextures.com/terms-of-use/\n==============================\nAll textures at wildtextures.com are completely free for both, personal and commercial use, however you can’t:\n\nhost textures for download on any other website or server,\ndirect link to texture file from any other website ( however you can link to texture page ),\nsell them as a stock materials,\n==============================\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "libs/potree/resources/textures/matcap/blender_matcap_license.txt",
    "content": "These matcap images are licensed as CC0 or public domain.\n\nThanks to the Blender community for contributing these matcaps.\n\n(Matcap images from /Blender/2.80/datafiles/studiolights/matcap/*\")\n"
  },
  {
    "path": "libs/potree/resources/textures/skybox/skyboxsun25degtest.txt",
    "content": "http://reije081.home.xs4all.nl/skyboxes/\n"
  },
  {
    "path": "libs/potree/resources/textures/skybox2/README.TXT",
    "content": "THIS SKY WAS UPDATED AT THE 27TH\nTHE ORIG HAD SOME ERRORS\n\nMIRAMAR\nhigh res 1024^2 environment map\nships as TGA.\n\n\nBy Jockum Skoglund aka hipshot\nhipshot@zfight.com\nwww.zfight.com\nStockholm, 2005 08 25\n\n\nModify however you like, just cred me for my work, maybe link to my page.\n"
  },
  {
    "path": "libs/potree/resources/textures/skyboxsun25degtest.txt",
    "content": "http://reije081.home.xs4all.nl/skyboxes/\n"
  },
  {
    "path": "libs/potree/sidebar.html",
    "content": "\n<div id=\"sidebar_root\" class=\"\">\n\t<div id=\"sidebar_header\">\n\t\t<span id=\"potree_branding\" class=\"potree_sidebar_brand\">\n\t\t\t<a href=\"http://potree.org\" target=\"_blank\">potree.org</a> \n\t\t\t<span style=\"margin: 0px 3px; color: #9AA1A4\"> - </span> \n\t\t\t<a href=\"https://github.com/potree/potree\" target=\"_blank\">github</a>\n\t\t\t<span style=\"margin: 0px 3px; color: #9AA1A4\"> - </span> \n\t\t\t<a href=\"https://twitter.com/m_schuetz\" target=\"_blank\">twitter</a>\n\t\t\t<span style=\"flex-grow: 1\"></span>\n\t\t\t<span id=\"potree_version_number\" style=\"color: #9AA1A4; font-size: 80%; font-weight: 100\"></span>\n\t\t</span>\n\t\t<div id=\"potree_languages\" style=\"font-family:arial;\"></div>\n\t</div>\n\t<div> \n\n\t<div id=\"potree_menu\" class=\"accordion\">\n\n\t\t\n\t\t<!-- APPEARANCE -->\n\t\t<h3 id=\"menu_appearance\"><span data-i18n=\"tb.rendering_opt\"></span></h3>\n\t\t<div>\n\t\t\t<ul class=\"pv-menu-list\">\n\t\t\t\t<li><span data-i18n=\"appearance.nb_max_pts\"></span>: <span id=\"lblPointBudget\"></span> <div id=\"sldPointBudget\"></div></li>\n\t\t\t\t<li><span data-i18n=\"appearance.field_view\"></span>: <span id=\"lblFOV\"></span><div id=\"sldFOV\"></div></li>\n\n\t\t\t\t<div class=\"divider\"><span>Eye-Dome-Lighting</span></div>\n\n\t\t\t\t<li><label><input type=\"checkbox\" id=\"chkEDLEnabled\"/><span data-i18n=\"appearance.edl_enable\"></span></label></li>\n\t\t\t\t<li><span data-i18n=\"appearance.edl_radius\"></span>: <span id=\"lblEDLRadius\"></span><div id=\"sldEDLRadius\"></div></li>\n\t\t\t\t<li><span data-i18n=\"appearance.edl_strength\"></span>: <span id=\"lblEDLStrength\"></span><div id=\"sldEDLStrength\"></div></li>\n\t\t\t\t<li><span data-i18n=\"appearance.edl_opacity\"></span>: <span id=\"lblEDLOpacity\"></span><div id=\"sldEDLOpacity\"></div></li>\n\t\t\t\t\n\t\t\t\t<div class=\"divider\"><span>Background</span></div>\n\n\t\t\t\t<li>\n\t\t\t\t\t<selectgroup id=\"background_options\">\n\t\t\t\t\t\t<option id=\"background_options_skybox\" value=\"skybox\">Skybox</option>\n\t\t\t\t\t\t<option id=\"background_options_gradient\" value=\"gradient\">Gradient</option>\n\t\t\t\t\t\t<option id=\"background_options_black\" value=\"black\">Black</option>\n\t\t\t\t\t\t<option id=\"background_options_white\" value=\"white\">White</option>\n\t\t\t\t\t\t<option id=\"background_options_none\" value=\"null\">None</option>\n\t\t\t\t\t</selectgroup>\n\t\t\t\t</li>\n\n\t\t\t\t<div class=\"divider\"><span>Other</span></div>\n\n\t\t\t\t<li>\n\t\t\t\t\t<selectgroup id=\"splat_quality_options\">\n\t\t\t\t\t\t<option id=\"splat_quality_options_standard\" value=\"standard\">Standard</option>\n\t\t\t\t\t\t<option id=\"splat_quality_options_hq\" value=\"hq\">High Quality</option>\n\t\t\t\t\t</selectgroup>\n\t\t\t\t</li>\n\t\t\t\t\n\t\t\t\t<li><span data-i18n=\"appearance.min_node_size\"></span>: <span id=\"lblMinNodeSize\"></span><div id=\"sldMinNodeSize\"></div></li>\n\t\t\t\t<li><label><input id=\"show_bounding_box\" type=\"checkbox\" /><span data-i18n=\"appearance.box\"></span></label></li>\n\t\t\t\t<li><label><input id=\"set_freeze\" type=\"checkbox\" /><span data-i18n=\"appearance.freeze\"></span></label></li>\n\t\t\t</ul>\n\t\t\t\n\t\t</div>\n\t\t\n\t\t<!-- TOOLS -->\n\t\t<h3 id=\"menu_tools\"><span data-i18n=\"tb.tools_opt\"></span></h3>\n\t\t<div class=\"pv-menu-list\">\n\n\t\t\t<div class=\"divider\"><span>Measurement</span></div>\n\n\t\t\t<li id=\"tools\"></li>\n\n\t\t\t<li>\n\t\t\t\t<selectgroup id=\"measurement_options_show\">\n\t\t\t\t\t<option id=\"measurement_options_show_yes\" value=\"SHOW\">Show</option>\n\t\t\t\t\t<option id=\"measurement_options_show_no\" value=\"HIDE\">Hide</option>\n\t\t\t\t</selectgroup>\n\t\t\t</li>\n\n\t\t\t<div class=\"divider\"><span>Clipping</span></div>\n\n\t\t\t<li id=\"clipping_tools\"></li>\n\n\t\t\t<li>\n\t\t\t\t<selectgroup id=\"cliptask_options\">\n\t\t\t\t\t<option id=\"cliptask_options_none\" value=\"NONE\">None</option>\n\t\t\t\t\t<option id=\"cliptask_options_highlight\" value=\"HIGHLIGHT\">Highlight</option>\n\t\t\t\t\t<option id=\"cliptask_options_show_inside\" value=\"SHOW_INSIDE\">Inside</option>\n\t\t\t\t\t<option id=\"cliptask_options_show_outside\" value=\"SHOW_OUTSIDE\">Outside</option>\n\t\t\t\t</selectgroup>\n\t\t\t</li>\n\n\t\t\t<li>\n\t\t\t\t<selectgroup id=\"clipmethod_options\">\n\t\t\t\t\t<option id=\"clipmethod_options_any\" value=\"INSIDE_ANY\">Inside Any</option>\n\t\t\t\t\t<option id=\"clipmethod_options_all\" value=\"INSIDE_ALL\">Inside All</option>\n\t\t\t\t</selectgroup>\n\t\t\t</li>\n\t\t\t\n\t\t\t<div class=\"divider\"><span>Navigation</span></div>\n\n\t\t\t<li id=\"navigation\"></li>\n\n\t\t\t<li><span data-i18n=\"appearance.move_speed\"></span>: <span id=\"lblMoveSpeed\"></span><div id=\"sldMoveSpeed\"></div></li>\n\t\t</div>\n\n\t\t<!-- SCENE -->\n\t\t<h3 id=\"menu_scene\"><span data-i18n=\"tb.scene_opt\"></span></h3>\n\t\t<div class=\"pv-menu-list\">\n\n\t\t\t<div id=\"scene_export\"></div>\n\n\t\t\t<div class=\"divider\"><span>Objects</span></div>\n\n\t\t\t<div id=\"scene_objects\"></div>\n\n\t\t\t<div class=\"divider\"><span>Properties</span></div>\n\n\t\t\t<div id=\"scene_object_properties\"></div>\n\t\t</div>\n\n\t\t<!-- Classification -->\n\t\t<h3 id=\"menu_filters\"><span data-i18n=\"tb.filters_opt\"></span></h3>\n\t\t<div>\n\n\t\t\t<div class=\"divider\"><span>Classification</span></div>\n\n\t\t\t<ul id=\"classificationList\" class=\"pv-menu-list\"></ul>\n\n\t\t\t<div class=\"divider\"><span>Returns</span></div>\n\n\t\t\t<div id=\"return_filter_panel\">\n\t\t\t\t<ul class=\"pv-menu-list\">\n\t\t\t\t\t\n\t\t\t\t\t<li><span data-i18n=\"filters.return_number\"></span>: <span id=\"lblReturnNumber\"></span> <div id=\"sldReturnNumber\"></div></li>\n\t\t\t\t\t<li><span data-i18n=\"filters.number_of_returns\"></span>: <span id=\"lblNumberOfReturns\"></span> <div id=\"sldNumberOfReturns\"></div></li>\n\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<div class=\"divider\"><span>Point Source ID</span></div>\n\n\t\t\t<div>\n\t\t\t\t<ul class=\"pv-menu-list\" id=\"pointsourceid_filter_panel\">\n\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<div class=\"divider\"><span>GPS Time</span></div>\n\n\t\t\t<div id=\"gpstime_filter_panel\">\n\n\t\t\t\t<ul class=\"pv-menu-list\">\n\t\t\t\t\t<div id=\"gpstime_multilevel_range_container\">\n\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<span style=\"display: flex\">\n\t\t\t\t\t\t\t\t<span>Time: </span>\n\t\t\t\t\t\t\t\t<input id=\"txtGpsTime\" type=\"text\" style=\"margin: auto 10px\"/>\n\t\t\t\t\t\t\t\t<input id=\"btnFindGpsTime\" type=\"button\" value=\"find\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</li>\n\n\t\t\t\t\t</div>\n\n\t\t\t\t</ul>\n\n\t\t\t</div>\n\t\t</div>\n\t\t\n\t\t<!-- ABOUT -->\n\t\t<h3 id=\"menu_about\"><span data-i18n=\"tb.about_opt\"></span></h3>\n\t\t<div>\n\t\t\t<ul class=\"pv-menu-list\">\n\t\t\t\t<li><a href=\"http://potree.org\" target=\"_blank\">Potree</a> is a viewer for large point cloud / LIDAR data sets, developed at the Vienna University of Technology. \n\t\t\t\t<a href=\"https://github.com/potree/potree\" target=\"_blank\">(github)</a>\n\t\t\t\t</li>\n\t\t\t\t<li><b>Author: </b><a href=\"mailto:mschuetz@potree.org\">Markus Sch&uuml;tz</a></li>\n\t\t\t\t<li><b>License: </b><a target=\"_blank\" href=\"https://github.com/potree/potree/blob/develop/LICENSE/\">FreeBSD (2-clause BSD)</a></li>\n\t\t\t\t<li><b>Dependency Licenses:</b> <a target=\"_blank\" href=\"https://github.com/potree/potree/tree/develop/libs/\">See github</a></li>\n\n<li>\n<b>Funding:</b>\nPotree is funded by a combination of research projects, companies, institutions and individuals. If you're making good use of Potree, please consider funding its future development <a href=\"https://github.com/sponsors/potree\">via Github Sponsors</a> or by directly inquiring <a href=\"mailto:mschuetz@potree.org\">via e-mail</a>.\n\n<br>\n<br>\nResearch projects who's funding contributes to Potree:\n\n<table>\n\t<tr>\n\t\t<th>Project Name</th>\n\t\t<th>Funding Agency</th>\n\t</tr>\n\t<tr>\n\t\t<td><a href=\"https://projekte.ffg.at/projekt/3851914\">LargeClouds2BIM</a></td>\n\t\t<td><a href=\"https://www.ffg.at/\">FFG</a></td>\n\t</tr>\n\t<tr>\n\t\t<td><a href=\"https://harvest4d.org/\">Harvest4D</a></td>\n\t\t<td><a href=\"https://ec.europa.eu/transport/themes/research/fp7_en\">EU 7th Framework Program 323567</a></td>\n\t</tr>\n\t<tr>\n\t\t<td><a href=\"https://gcd.tuwien.ac.at/\">GCD Doctoral College</a></td>\n\t\t<td><a href=\"https://www.tuwien.at/en/\">TU Wien</a></td>\n\t</tr>\n\t<tr>\n\t\t<td><a href=\"https://www.cg.tuwien.ac.at/research/projects/Superhumans/\">Superhumans</a></td>\n\t\t<td><a href=\"https://www.fwf.ac.at/\">FWF</a></td>\n\t</tr>\n</table>\n\n<br>\nThanks to all the companies and institutions funding Potree:\n\n<table style=\"width: 100%; text-align: center;\">\n\t<tr>\n\t\t<th style=\"padding-top: 0.7em;\">• Diamond •</th>\n\t</tr>\n\t\n\t<tr><td><a href=\"http://www.ne.ch/autorites/DDTE/SGRF/SITN/Pages/accueil.aspx\">SITN</a> </td></tr>\n\t<tr><td><a href=\"http://synth.earth/\">Synth</a></td></tr>\n\t<tr><td><a href=\"http://www.geocue.com\">GeoCue Group</a> </td></tr>\n\t<tr><td><a href=\"http://rapidlasso.com\">Rapidlasso</a> </td></tr>\n\n\t<tr>\n\t\t<th style=\"padding-top: 0.7em;\">• Gold •</th>\n\t</tr>\n\t<tr><td><a href=\"https://www.bart.gov\">BART</a></td></tr>\n\t<tr>\n\t\t<th style=\"padding-top: 0.7em;\">• Silver •</th>\n\t</tr>\n\t<tr><td><a href=\"https://biology.anu.edu.au/research/facilities/australian-plant-phenomics-facility-anu\">APPF ANU</a></td></tr>\n\t<tr><td><a href=\"https://www.limit-addict.fr/\">LimitAddict</a></td></tr>\n\t<tr><td><a href=\"http://georepublic.info\">Georepublic</a></td></tr>\n\t<tr>\n\t\t<th style=\"padding-top: 0.7em;\">• Bronze •</th>\n\t</tr>\n\t<tr><td><a href=\"https://www.eventart.at/\">EventArt</a></td></tr>\n\t<tr><td><a href=\"https://www.geodelta.com/\">Geodelta</a></td></tr>\n\t<tr><td><a href=\"https://www.e-cassini.fr/\">E-Cassini</a></td></tr>\n\t<tr><td><a href=\"https://www.sogelink.fr/\">Sogelink</a></td></tr>\n\t<tr><td>Data-viewer</td></tr>\n\t<tr><td><a href=\"http://www.helimap.com/\">Helimap</a></td></tr>\n\t<tr><td><a href=\"http://www.vevey.ch/\">Vevey</a></td></tr>\n\t<tr><td><a href=\"https://www.yverdon-les-bains.ch/\">yverdon-les-bains</a></td></tr>\n\t<tr><td><a href=\"http://archpro.lbg.ac.at\">LBI ArchPro</a> </td></tr>\n\t<tr><td><a href=\"http://www.kts.co.jp\">KTS</a></td></tr>\n\t<tr><td><a href=\"http://veesus.com\">Veesus</a></td></tr>\n\t<tr><td><a href=\"http://www.sigeom.ch\">Sigeom</a></td></tr>\n</table>\n</li>\n\n\t\t\t\t\n\n\t\t\t\n\t\t\t</ul>\n\t\t</div>\n\n\t</div>\n\n\t<div>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t\t<br>\n\t\t</div>\n\t</div>\n\t\n</div>\n\n\n"
  },
  {
    "path": "libs/potree/workers/2.0/DecoderWorker.js",
    "content": "/**\n * Some types of possible point attribute data formats\n *\n * @class\n */\nconst PointAttributeTypes = {\n\tDATA_TYPE_DOUBLE: {ordinal: 0, name: \"double\", size: 8},\n\tDATA_TYPE_FLOAT:  {ordinal: 1, name: \"float\",  size: 4},\n\tDATA_TYPE_INT8:   {ordinal: 2, name: \"int8\",   size: 1},\n\tDATA_TYPE_UINT8:  {ordinal: 3, name: \"uint8\",  size: 1},\n\tDATA_TYPE_INT16:  {ordinal: 4, name: \"int16\",  size: 2},\n\tDATA_TYPE_UINT16: {ordinal: 5, name: \"uint16\", size: 2},\n\tDATA_TYPE_INT32:  {ordinal: 6, name: \"int32\",  size: 4},\n\tDATA_TYPE_UINT32: {ordinal: 7, name: \"uint32\", size: 4},\n\tDATA_TYPE_INT64:  {ordinal: 8, name: \"int64\",  size: 8},\n\tDATA_TYPE_UINT64: {ordinal: 9, name: \"uint64\", size: 8}\n};\n\nlet i = 0;\nfor (let obj in PointAttributeTypes) {\n\tPointAttributeTypes[i] = PointAttributeTypes[obj];\n\ti++;\n}\n\n\nclass PointAttribute{\n\t\n\tconstructor(name, type, numElements){\n\t\tthis.name = name;\n\t\tthis.type = type;\n\t\tthis.numElements = numElements;\n\t\tthis.byteSize = this.numElements * this.type.size;\n\t\tthis.description = \"\";\n\t\tthis.range = [Infinity, -Infinity];\n\t}\n\n}\nPointAttribute.POSITION_CARTESIAN = new PointAttribute(\n\t\"POSITION_CARTESIAN\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\nPointAttribute.RGBA_PACKED = new PointAttribute(\n\t\"COLOR_PACKED\", PointAttributeTypes.DATA_TYPE_INT8, 4);\n\nPointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED;\n\nPointAttribute.RGB_PACKED = new PointAttribute(\n\t\"COLOR_PACKED\", PointAttributeTypes.DATA_TYPE_INT8, 3);\n\nPointAttribute.NORMAL_FLOATS = new PointAttribute(\n\t\"NORMAL_FLOATS\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\nPointAttribute.INTENSITY = new PointAttribute(\n\t\"INTENSITY\", PointAttributeTypes.DATA_TYPE_UINT16, 1);\n\nPointAttribute.CLASSIFICATION = new PointAttribute(\n\t\"CLASSIFICATION\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\nPointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute(\n\t\"NORMAL_SPHEREMAPPED\", PointAttributeTypes.DATA_TYPE_UINT8, 2);\n\nPointAttribute.NORMAL_OCT16 = new PointAttribute(\n\t\"NORMAL_OCT16\", PointAttributeTypes.DATA_TYPE_UINT8, 2);\n\nPointAttribute.NORMAL = new PointAttribute(\n\t\"NORMAL\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\t\nPointAttribute.RETURN_NUMBER = new PointAttribute(\n\t\"RETURN_NUMBER\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\t\nPointAttribute.NUMBER_OF_RETURNS = new PointAttribute(\n\t\"NUMBER_OF_RETURNS\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\t\nPointAttribute.SOURCE_ID = new PointAttribute(\n\t\"SOURCE_ID\", PointAttributeTypes.DATA_TYPE_UINT16, 1);\n\nPointAttribute.INDICES = new PointAttribute(\n\t\"INDICES\", PointAttributeTypes.DATA_TYPE_UINT32, 1);\n\nPointAttribute.SPACING = new PointAttribute(\n\t\"SPACING\", PointAttributeTypes.DATA_TYPE_FLOAT, 1);\n\nPointAttribute.GPS_TIME = new PointAttribute(\n\t\"GPS_TIME\", PointAttributeTypes.DATA_TYPE_DOUBLE, 1);\n\nconst typedArrayMapping = {\r\n\t\"int8\":   Int8Array,\r\n\t\"int16\":  Int16Array,\r\n\t\"int32\":  Int32Array,\r\n\t\"int64\":  Float64Array,\r\n\t\"uint8\":  Uint8Array,\r\n\t\"uint16\": Uint16Array,\r\n\t\"uint32\": Uint32Array,\r\n\t\"uint64\": Float64Array,\r\n\t\"float\":  Float32Array,\r\n\t\"double\": Float64Array,\r\n};\r\n\r\nPotree = {};\r\n\r\nonmessage = function (event) {\r\n\r\n\tlet {buffer, pointAttributes, scale, name, min, max, size, offset, numPoints} = event.data;\r\n\r\n\tlet tStart = performance.now();\r\n\r\n\tlet view = new DataView(buffer);\r\n\t\r\n\tlet attributeBuffers = {};\r\n\tlet attributeOffset = 0;\r\n\r\n\tlet bytesPerPoint = 0;\r\n\tfor (let pointAttribute of pointAttributes.attributes) {\r\n\t\tbytesPerPoint += pointAttribute.byteSize;\r\n\t}\r\n\r\n\tlet gridSize = 32;\r\n\tlet grid = new Uint32Array(gridSize ** 3);\r\n\tlet toIndex = (x, y, z) => {\r\n\t\t// let dx = gridSize * (x - min.x) / size.x;\r\n\t\t// let dy = gridSize * (y - min.y) / size.y;\r\n\t\t// let dz = gridSize * (z - min.z) / size.z;\r\n\r\n\t\t// min is already subtracted\r\n\t\tlet dx = gridSize * x / size.x;\r\n\t\tlet dy = gridSize * y / size.y;\r\n\t\tlet dz = gridSize * z / size.z;\r\n\r\n\t\tlet ix = Math.min(parseInt(dx), gridSize - 1);\r\n\t\tlet iy = Math.min(parseInt(dy), gridSize - 1);\r\n\t\tlet iz = Math.min(parseInt(dz), gridSize - 1);\r\n\r\n\t\tlet index = ix + iy * gridSize + iz * gridSize * gridSize;\r\n\r\n\t\treturn index;\r\n\t};\r\n\r\n\tlet numOccupiedCells = 0;\r\n\tfor (let pointAttribute of pointAttributes.attributes) {\r\n\t\t\r\n\t\tif([\"POSITION_CARTESIAN\", \"position\"].includes(pointAttribute.name)){\r\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4 * 3);\r\n\t\t\tlet positions = new Float32Array(buff);\r\n\t\t\r\n\t\t\tfor (let j = 0; j < numPoints; j++) {\r\n\t\t\t\t\r\n\t\t\t\tlet pointOffset = j * bytesPerPoint;\r\n\r\n\t\t\t\tlet x = (view.getInt32(pointOffset + attributeOffset + 0, true) * scale[0]) + offset[0] - min.x;\r\n\t\t\t\tlet y = (view.getInt32(pointOffset + attributeOffset + 4, true) * scale[1]) + offset[1] - min.y;\r\n\t\t\t\tlet z = (view.getInt32(pointOffset + attributeOffset + 8, true) * scale[2]) + offset[2] - min.z;\r\n\r\n\t\t\t\tlet index = toIndex(x, y, z);\r\n\t\t\t\tlet count = grid[index]++;\r\n\t\t\t\tif(count === 0){\r\n\t\t\t\t\tnumOccupiedCells++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tpositions[3 * j + 0] = x;\r\n\t\t\t\tpositions[3 * j + 1] = y;\r\n\t\t\t\tpositions[3 * j + 2] = z;\r\n\t\t\t}\r\n\r\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\r\n\t\t}else if([\"RGBA\", \"rgba\"].includes(pointAttribute.name)){\r\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4);\r\n\t\t\tlet colors = new Uint8Array(buff);\r\n\r\n\t\t\tfor (let j = 0; j < numPoints; j++) {\r\n\t\t\t\tlet pointOffset = j * bytesPerPoint;\r\n\r\n\t\t\t\tlet r = view.getUint16(pointOffset + attributeOffset + 0, true);\r\n\t\t\t\tlet g = view.getUint16(pointOffset + attributeOffset + 2, true);\r\n\t\t\t\tlet b = view.getUint16(pointOffset + attributeOffset + 4, true);\r\n\r\n\t\t\t\tcolors[4 * j + 0] = r > 255 ? r / 256 : r;\r\n\t\t\t\tcolors[4 * j + 1] = g > 255 ? g / 256 : g;\r\n\t\t\t\tcolors[4 * j + 2] = b > 255 ? b / 256 : b;\r\n\t\t\t}\r\n\r\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\r\n\t\t}else {\r\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4);\r\n\t\t\tlet f32 = new Float32Array(buff);\r\n\r\n\t\t\tlet TypedArray = typedArrayMapping[pointAttribute.type.name];\r\n\t\t\tpreciseBuffer = new TypedArray(numPoints);\r\n\r\n\t\t\tlet [offset, scale] = [0, 1];\r\n\r\n\t\t\tconst getterMap = {\r\n\t\t\t\t\"int8\":   view.getInt8,\r\n\t\t\t\t\"int16\":  view.getInt16,\r\n\t\t\t\t\"int32\":  view.getInt32,\r\n\t\t\t\t// \"int64\":  view.getInt64,\r\n\t\t\t\t\"uint8\":  view.getUint8,\r\n\t\t\t\t\"uint16\": view.getUint16,\r\n\t\t\t\t\"uint32\": view.getUint32,\r\n\t\t\t\t// \"uint64\": view.getUint64,\r\n\t\t\t\t\"float\":  view.getFloat32,\r\n\t\t\t\t\"double\": view.getFloat64,\r\n\t\t\t};\r\n\t\t\tconst getter = getterMap[pointAttribute.type.name].bind(view);\r\n\r\n\t\t\t// compute offset and scale to pack larger types into 32 bit floats\r\n\t\t\tif(pointAttribute.type.size > 4){\r\n\t\t\t\tlet [amin, amax] = pointAttribute.range;\r\n\t\t\t\toffset = amin;\r\n\t\t\t\tscale = 1 / (amax - amin);\r\n\t\t\t}\r\n\r\n\t\t\tfor(let j = 0; j < numPoints; j++){\r\n\t\t\t\tlet pointOffset = j * bytesPerPoint;\r\n\t\t\t\tlet value = getter(pointOffset + attributeOffset, true);\r\n\r\n\t\t\t\tf32[j] = (value - offset) * scale;\r\n\t\t\t\tpreciseBuffer[j] = value;\r\n\t\t\t}\r\n\r\n\t\t\tattributeBuffers[pointAttribute.name] = { \r\n\t\t\t\tbuffer: buff,\r\n\t\t\t\tpreciseBuffer: preciseBuffer,\r\n\t\t\t\tattribute: pointAttribute,\r\n\t\t\t\toffset: offset,\r\n\t\t\t\tscale: scale,\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tattributeOffset += pointAttribute.byteSize;\r\n\r\n\r\n\t}\r\n\r\n\tlet occupancy = parseInt(numPoints / numOccupiedCells);\r\n\t// console.log(`${name}: #points: ${numPoints}: #occupiedCells: ${numOccupiedCells}, occupancy: ${occupancy} points/cell`);\r\n\r\n\t{ // add indices\r\n\t\tlet buff = new ArrayBuffer(numPoints * 4);\r\n\t\tlet indices = new Uint32Array(buff);\r\n\r\n\t\tfor (let i = 0; i < numPoints; i++) {\r\n\t\t\tindices[i] = i;\r\n\t\t}\r\n\t\t\r\n\t\tattributeBuffers[\"INDICES\"] = { buffer: buff, attribute: PointAttribute.INDICES };\r\n\t}\r\n\r\n\r\n\t{ // handle attribute vectors\r\n\t\tlet vectors = pointAttributes.vectors;\r\n\r\n\t\tfor(let vector of vectors){\r\n\r\n\t\t\tlet {name, attributes} = vector;\r\n\t\t\tlet numVectorElements = attributes.length;\r\n\t\t\tlet buffer = new ArrayBuffer(numVectorElements * numPoints * 4);\r\n\t\t\tlet f32 = new Float32Array(buffer);\r\n\r\n\t\t\tlet iElement = 0;\r\n\t\t\tfor(let sourceName of attributes){\r\n\t\t\t\tlet sourceBuffer = attributeBuffers[sourceName];\r\n\t\t\t\tlet {offset, scale} = sourceBuffer;\r\n\t\t\t\tlet view = new DataView(sourceBuffer.buffer);\r\n\r\n\t\t\t\tconst getter = view.getFloat32.bind(view);\r\n\r\n\t\t\t\tfor(let j = 0; j < numPoints; j++){\r\n\t\t\t\t\tlet value = getter(j * 4, true);\r\n\r\n\t\t\t\t\tf32[j * numVectorElements + iElement] = (value / scale) + offset;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tiElement++;\r\n\t\t\t}\r\n\r\n\t\t\tlet vecAttribute = new PointAttribute(name, PointAttributeTypes.DATA_TYPE_FLOAT, 3);\r\n\r\n\t\t\tattributeBuffers[name] = { \r\n\t\t\t\tbuffer: buffer, \r\n\t\t\t\tattribute: vecAttribute,\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t// let duration = performance.now() - tStart;\r\n\t// let pointsPerMs = numPoints / duration;\r\n\t// console.log(`duration: ${duration.toFixed(1)}ms, #points: ${numPoints}, points/ms: ${pointsPerMs.toFixed(1)}`);\r\n\r\n\tlet message = {\r\n\t\tbuffer: buffer,\r\n\t\tattributeBuffers: attributeBuffers,\r\n\t\tdensity: occupancy,\r\n\t};\r\n\r\n\tlet transferables = [];\r\n\tfor (let property in message.attributeBuffers) {\r\n\t\ttransferables.push(message.attributeBuffers[property].buffer);\r\n\t}\r\n\ttransferables.push(buffer);\r\n\r\n\tpostMessage(message, transferables);\r\n};\n"
  },
  {
    "path": "libs/potree/workers/2.0/DecoderWorker_brotli.js",
    "content": "/**\n * Some types of possible point attribute data formats\n *\n * @class\n */\nconst PointAttributeTypes = {\n\tDATA_TYPE_DOUBLE: {ordinal: 0, name: \"double\", size: 8},\n\tDATA_TYPE_FLOAT:  {ordinal: 1, name: \"float\",  size: 4},\n\tDATA_TYPE_INT8:   {ordinal: 2, name: \"int8\",   size: 1},\n\tDATA_TYPE_UINT8:  {ordinal: 3, name: \"uint8\",  size: 1},\n\tDATA_TYPE_INT16:  {ordinal: 4, name: \"int16\",  size: 2},\n\tDATA_TYPE_UINT16: {ordinal: 5, name: \"uint16\", size: 2},\n\tDATA_TYPE_INT32:  {ordinal: 6, name: \"int32\",  size: 4},\n\tDATA_TYPE_UINT32: {ordinal: 7, name: \"uint32\", size: 4},\n\tDATA_TYPE_INT64:  {ordinal: 8, name: \"int64\",  size: 8},\n\tDATA_TYPE_UINT64: {ordinal: 9, name: \"uint64\", size: 8}\n};\n\nlet i = 0;\nfor (let obj in PointAttributeTypes) {\n\tPointAttributeTypes[i] = PointAttributeTypes[obj];\n\ti++;\n}\n\n\nclass PointAttribute{\n\t\n\tconstructor(name, type, numElements){\n\t\tthis.name = name;\n\t\tthis.type = type;\n\t\tthis.numElements = numElements;\n\t\tthis.byteSize = this.numElements * this.type.size;\n\t\tthis.description = \"\";\n\t\tthis.range = [Infinity, -Infinity];\n\t}\n\n}\nPointAttribute.POSITION_CARTESIAN = new PointAttribute(\n\t\"POSITION_CARTESIAN\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\nPointAttribute.RGBA_PACKED = new PointAttribute(\n\t\"COLOR_PACKED\", PointAttributeTypes.DATA_TYPE_INT8, 4);\n\nPointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED;\n\nPointAttribute.RGB_PACKED = new PointAttribute(\n\t\"COLOR_PACKED\", PointAttributeTypes.DATA_TYPE_INT8, 3);\n\nPointAttribute.NORMAL_FLOATS = new PointAttribute(\n\t\"NORMAL_FLOATS\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\nPointAttribute.INTENSITY = new PointAttribute(\n\t\"INTENSITY\", PointAttributeTypes.DATA_TYPE_UINT16, 1);\n\nPointAttribute.CLASSIFICATION = new PointAttribute(\n\t\"CLASSIFICATION\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\nPointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute(\n\t\"NORMAL_SPHEREMAPPED\", PointAttributeTypes.DATA_TYPE_UINT8, 2);\n\nPointAttribute.NORMAL_OCT16 = new PointAttribute(\n\t\"NORMAL_OCT16\", PointAttributeTypes.DATA_TYPE_UINT8, 2);\n\nPointAttribute.NORMAL = new PointAttribute(\n\t\"NORMAL\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\t\nPointAttribute.RETURN_NUMBER = new PointAttribute(\n\t\"RETURN_NUMBER\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\t\nPointAttribute.NUMBER_OF_RETURNS = new PointAttribute(\n\t\"NUMBER_OF_RETURNS\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\t\nPointAttribute.SOURCE_ID = new PointAttribute(\n\t\"SOURCE_ID\", PointAttributeTypes.DATA_TYPE_UINT16, 1);\n\nPointAttribute.INDICES = new PointAttribute(\n\t\"INDICES\", PointAttributeTypes.DATA_TYPE_UINT32, 1);\n\nPointAttribute.SPACING = new PointAttribute(\n\t\"SPACING\", PointAttributeTypes.DATA_TYPE_FLOAT, 1);\n\nPointAttribute.GPS_TIME = new PointAttribute(\n\t\"GPS_TIME\", PointAttributeTypes.DATA_TYPE_DOUBLE, 1);\n\n/* Copyright 2017 Google Inc. All Rights Reserved.\n\n   Distributed under MIT license.\n   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT\n*/\n\n/** @return {function(!Int8Array):!Int8Array} */\nfunction BrotliDecodeClosure() {\n\n  /** @type {!Int8Array} */\n  var DICTIONARY_DATA = new Int8Array(0);\n\n  /**\n   * @constructor\n   * @param {!Int8Array} bytes\n   * @struct\n   */\n  function InputStream(bytes) {\n    /** @type {!Int8Array} */\n    this.data = bytes;\n    /** @type {!number} */\n    this.offset = 0;\n  }\n  var MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]);\n  var CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]);\n  var DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]);\n  var DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]);\n  var FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]);\n  var DICTIONARY_OFFSETS_BY_LENGTH = Int32Array.from([0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, 122016]);\n  var DICTIONARY_SIZE_BITS_BY_LENGTH = Int32Array.from([0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5]);\n  var BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]);\n  var BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]);\n  var INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]);\n  var COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]);\n  var CMD_LOOKUP = new Int16Array(2816);\n  {\n    unpackCommandLookupTable(CMD_LOOKUP);\n  }\n  /**\n   * @param {number} i\n   * @return {number}\n   */\n  function log2floor(i) {\n    var /** number */ result = -1;\n    var /** number */ step = 16;\n    while (step > 0) {\n      if ((i >>> step) != 0) {\n        result += step;\n        i = i >>> step;\n      }\n      step = step >> 1;\n    }\n    return result + i;\n  }\n  /**\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @param {number} maxndistbits\n   * @return {number}\n   */\n  function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) {\n    return 16 + ndirect + 2 * (maxndistbits << npostfix);\n  }\n  /**\n   * @param {number} maxDistance\n   * @param {number} npostfix\n   * @param {number} ndirect\n   * @return {number}\n   */\n  function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) {\n    if (maxDistance < ndirect + (2 << npostfix)) {\n      throw \"maxDistance is too small\";\n    }\n    var /** number */ offset = ((maxDistance - ndirect) >> npostfix) + 4;\n    var /** number */ ndistbits = log2floor(offset) - 1;\n    var /** number */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1);\n    return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16;\n  }\n  /**\n   * @param {!Int16Array} cmdLookup\n   * @return {void}\n   */\n  function unpackCommandLookupTable(cmdLookup) {\n    var /** !Int16Array */ insertLengthOffsets = new Int16Array(24);\n    var /** !Int16Array */ copyLengthOffsets = new Int16Array(24);\n    copyLengthOffsets[0] = 2;\n    for (var /** number */ i = 0; i < 23; ++i) {\n      insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i]));\n      copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i]));\n    }\n    for (var /** number */ cmdCode = 0; cmdCode < 704; ++cmdCode) {\n      var /** number */ rangeIdx = cmdCode >>> 6;\n      var /** number */ distanceContextOffset = -4;\n      if (rangeIdx >= 2) {\n        rangeIdx -= 2;\n        distanceContextOffset = 0;\n      }\n      var /** number */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7);\n      var /** number */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7);\n      var /** number */ copyLengthOffset = copyLengthOffsets[copyCode];\n      var /** number */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2);\n      var /** number */ index = cmdCode * 4;\n      cmdLookup[index + 0] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8));\n      cmdLookup[index + 1] = insertLengthOffsets[insertCode];\n      cmdLookup[index + 2] = copyLengthOffsets[copyCode];\n      cmdLookup[index + 3] = distanceContext;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeWindowBits(s) {\n    var /** number */ largeWindowEnabled = s.isLargeWindow;\n    s.isLargeWindow = 0;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) == 0) {\n      return 16;\n    }\n    var /** number */ n = readFewBits(s, 3);\n    if (n != 0) {\n      return 17 + n;\n    }\n    n = readFewBits(s, 3);\n    if (n != 0) {\n      if (n == 1) {\n        if (largeWindowEnabled == 0) {\n          return -1;\n        }\n        s.isLargeWindow = 1;\n        if (readFewBits(s, 1) == 1) {\n          return -1;\n        }\n        n = readFewBits(s, 6);\n        if (n < 10 || n > 30) {\n          return -1;\n        }\n        return n;\n      } else {\n        return 8 + n;\n      }\n    }\n    return 17;\n  }\n  /**\n   * @param {!State} s\n   * @param {!InputStream} input\n   * @return {void}\n   */\n  function initState(s, input) {\n    if (s.runningState != 0) {\n      throw \"State MUST be uninitialized\";\n    }\n    s.blockTrees = new Int32Array(3091);\n    s.blockTrees[0] = 7;\n    s.distRbIdx = 3;\n    var /** number */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 15 << 3);\n    s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit);\n    s.distOffset = new Int32Array(maxDistanceAlphabetLimit);\n    s.input = input;\n    initBitReader(s);\n    s.runningState = 1;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function close(s) {\n    if (s.runningState == 0) {\n      throw \"State MUST be initialized\";\n    }\n    if (s.runningState == 11) {\n      return;\n    }\n    s.runningState = 11;\n    if (s.input != null) {\n      closeInput(s.input);\n      s.input = null;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeVarLenUnsignedByte(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) != 0) {\n      var /** number */ n = readFewBits(s, 3);\n      if (n == 0) {\n        return 1;\n      } else {\n        return readFewBits(s, n) + (1 << n);\n      }\n    }\n    return 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeMetaBlockLength(s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.inputEnd = readFewBits(s, 1);\n    s.metaBlockLength = 0;\n    s.isUncompressed = 0;\n    s.isMetadata = 0;\n    if ((s.inputEnd != 0) && readFewBits(s, 1) != 0) {\n      return;\n    }\n    var /** number */ sizeNibbles = readFewBits(s, 2) + 4;\n    if (sizeNibbles == 7) {\n      s.isMetadata = 1;\n      if (readFewBits(s, 1) != 0) {\n        throw \"Corrupted reserved bit\";\n      }\n      var /** number */ sizeBytes = readFewBits(s, 2);\n      if (sizeBytes == 0) {\n        return;\n      }\n      for (var /** number */ i = 0; i < sizeBytes; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        var /** number */ bits = readFewBits(s, 8);\n        if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) {\n          throw \"Exuberant nibble\";\n        }\n        s.metaBlockLength |= bits << (i * 8);\n      }\n    } else {\n      for (var /** number */ i = 0; i < sizeNibbles; i++) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        var /** number */ bits = readFewBits(s, 4);\n        if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) {\n          throw \"Exuberant nibble\";\n        }\n        s.metaBlockLength |= bits << (i * 4);\n      }\n    }\n    s.metaBlockLength++;\n    if (s.inputEnd == 0) {\n      s.isUncompressed = readFewBits(s, 1);\n    }\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSymbol(tableGroup, tableIdx, s) {\n    var /** number */ offset = tableGroup[tableIdx];\n    var /** number */ val = (s.accumulator32 >>> s.bitOffset);\n    offset += val & 0xFF;\n    var /** number */ bits = tableGroup[offset] >> 16;\n    var /** number */ sym = tableGroup[offset] & 0xFFFF;\n    if (bits <= 8) {\n      s.bitOffset += bits;\n      return sym;\n    }\n    offset += sym;\n    var /** number */ mask = (1 << bits) - 1;\n    offset += (val & mask) >>> 8;\n    s.bitOffset += ((tableGroup[offset] >> 16) + 8);\n    return tableGroup[offset] & 0xFFFF;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readBlockLength(tableGroup, tableIdx, s) {\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    var /** number */ code = readSymbol(tableGroup, tableIdx, s);\n    var /** number */ n = BLOCK_LENGTH_N_BITS[code];\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n));\n  }\n  /**\n   * @param {!Int32Array} v\n   * @param {number} index\n   * @return {void}\n   */\n  function moveToFront(v, index) {\n    var /** number */ value = v[index];\n    for (; index > 0; index--) {\n      v[index] = v[index - 1];\n    }\n    v[0] = value;\n  }\n  /**\n   * @param {!Int8Array} v\n   * @param {number} vLen\n   * @return {void}\n   */\n  function inverseMoveToFrontTransform(v, vLen) {\n    var /** !Int32Array */ mtf = new Int32Array(256);\n    for (var /** number */ i = 0; i < 256; i++) {\n      mtf[i] = i;\n    }\n    for (var /** number */ i = 0; i < vLen; i++) {\n      var /** number */ index = v[i] & 0xFF;\n      v[i] = mtf[index];\n      if (index != 0) {\n        moveToFront(mtf, index);\n      }\n    }\n  }\n  /**\n   * @param {!Int32Array} codeLengthCodeLengths\n   * @param {number} numSymbols\n   * @param {!Int32Array} codeLengths\n   * @param {!State} s\n   * @return {void}\n   */\n  function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) {\n    var /** number */ symbol = 0;\n    var /** number */ prevCodeLen = 8;\n    var /** number */ repeat = 0;\n    var /** number */ repeatCodeLen = 0;\n    var /** number */ space = 32768;\n    var /** !Int32Array */ table = new Int32Array(32 + 1);\n    var /** number */ tableIdx = table.length - 1;\n    buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18);\n    while (symbol < numSymbols && space > 0) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 31;\n      s.bitOffset += table[p] >> 16;\n      var /** number */ codeLen = table[p] & 0xFFFF;\n      if (codeLen < 16) {\n        repeat = 0;\n        codeLengths[symbol++] = codeLen;\n        if (codeLen != 0) {\n          prevCodeLen = codeLen;\n          space -= 32768 >> codeLen;\n        }\n      } else {\n        var /** number */ extraBits = codeLen - 14;\n        var /** number */ newLen = 0;\n        if (codeLen == 16) {\n          newLen = prevCodeLen;\n        }\n        if (repeatCodeLen != newLen) {\n          repeat = 0;\n          repeatCodeLen = newLen;\n        }\n        var /** number */ oldRepeat = repeat;\n        if (repeat > 0) {\n          repeat -= 2;\n          repeat <<= extraBits;\n        }\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        repeat += readFewBits(s, extraBits) + 3;\n        var /** number */ repeatDelta = repeat - oldRepeat;\n        if (symbol + repeatDelta > numSymbols) {\n          throw \"symbol + repeatDelta > numSymbols\";\n        }\n        for (var /** number */ i = 0; i < repeatDelta; i++) {\n          codeLengths[symbol++] = repeatCodeLen;\n        }\n        if (repeatCodeLen != 0) {\n          space -= repeatDelta << (15 - repeatCodeLen);\n        }\n      }\n    }\n    if (space != 0) {\n      throw \"Unused space\";\n    }\n    codeLengths.fill(0, symbol, numSymbols);\n  }\n  /**\n   * @param {!Int32Array} symbols\n   * @param {number} length\n   * @return {void}\n   */\n  function checkDupes(symbols, length) {\n    for (var /** number */ i = 0; i < length - 1; ++i) {\n      for (var /** number */ j = i + 1; j < length; ++j) {\n        if (symbols[i] == symbols[j]) {\n          throw \"Duplicate simple Huffman code symbol\";\n        }\n      }\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit);\n    var /** !Int32Array */ symbols = new Int32Array(4);\n    var /** number */ maxBits = 1 + log2floor(alphabetSizeMax - 1);\n    var /** number */ numSymbols = readFewBits(s, 2) + 1;\n    for (var /** number */ i = 0; i < numSymbols; i++) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      var /** number */ symbol = readFewBits(s, maxBits);\n      if (symbol >= alphabetSizeLimit) {\n        throw \"Can't readHuffmanCode\";\n      }\n      symbols[i] = symbol;\n    }\n    checkDupes(symbols, numSymbols);\n    var /** number */ histogramId = numSymbols;\n    if (numSymbols == 4) {\n      histogramId += readFewBits(s, 1);\n    }\n    switch(histogramId) {\n      case 1:\n        codeLengths[symbols[0]] = 1;\n        break;\n      case 2:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 1;\n        break;\n      case 3:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        break;\n      case 4:\n        codeLengths[symbols[0]] = 2;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 2;\n        codeLengths[symbols[3]] = 2;\n        break;\n      case 5:\n        codeLengths[symbols[0]] = 1;\n        codeLengths[symbols[1]] = 2;\n        codeLengths[symbols[2]] = 3;\n        codeLengths[symbols[3]] = 3;\n        break;\n    }\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeLimit\n   * @param {number} skip\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) {\n    var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit);\n    var /** !Int32Array */ codeLengthCodeLengths = new Int32Array(18);\n    var /** number */ space = 32;\n    var /** number */ numCodes = 0;\n    for (var /** number */ i = skip; i < 18 && space > 0; i++) {\n      var /** number */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i];\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 15;\n      s.bitOffset += FIXED_TABLE[p] >> 16;\n      var /** number */ v = FIXED_TABLE[p] & 0xFFFF;\n      codeLengthCodeLengths[codeLenIdx] = v;\n      if (v != 0) {\n        space -= (32 >> v);\n        numCodes++;\n      }\n    }\n    if (space != 0 && numCodes != 1) {\n      throw \"Corrupted Huffman code histogram\";\n    }\n    readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s);\n    return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit);\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {!State} s\n   * @return {number}\n   */\n  function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    var /** number */ simpleCodeOrSkip = readFewBits(s, 2);\n    if (simpleCodeOrSkip == 1) {\n      return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s);\n    } else {\n      return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s);\n    }\n  }\n  /**\n   * @param {number} contextMapSize\n   * @param {!Int8Array} contextMap\n   * @param {!State} s\n   * @return {number}\n   */\n  function decodeContextMap(contextMapSize, contextMap, s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    var /** number */ numTrees = decodeVarLenUnsignedByte(s) + 1;\n    if (numTrees == 1) {\n      contextMap.fill(0, 0, contextMapSize);\n      return numTrees;\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    var /** number */ useRleForZeros = readFewBits(s, 1);\n    var /** number */ maxRunLengthPrefix = 0;\n    if (useRleForZeros != 0) {\n      maxRunLengthPrefix = readFewBits(s, 4) + 1;\n    }\n    var /** number */ alphabetSize = numTrees + maxRunLengthPrefix;\n    var /** number */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5];\n    var /** !Int32Array */ table = new Int32Array(tableSize + 1);\n    var /** number */ tableIdx = table.length - 1;\n    readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s);\n    for (var /** number */ i = 0; i < contextMapSize; ) {\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      var /** number */ code = readSymbol(table, tableIdx, s);\n      if (code == 0) {\n        contextMap[i] = 0;\n        i++;\n      } else if (code <= maxRunLengthPrefix) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        var /** number */ reps = (1 << code) + readFewBits(s, code);\n        while (reps != 0) {\n          if (i >= contextMapSize) {\n            throw \"Corrupted context map\";\n          }\n          contextMap[i] = 0;\n          i++;\n          reps--;\n        }\n      } else {\n        contextMap[i] = (code - maxRunLengthPrefix);\n        i++;\n      }\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    if (readFewBits(s, 1) == 1) {\n      inverseMoveToFrontTransform(contextMap, contextMapSize);\n    }\n    return numTrees;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function decodeBlockTypeAndLength(s, treeType, numBlockTypes) {\n    var /** !Int32Array */ ringBuffers = s.rings;\n    var /** number */ offset = 4 + treeType * 2;\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    var /** number */ blockType = readSymbol(s.blockTrees, 2 * treeType, s);\n    var /** number */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n    if (blockType == 1) {\n      blockType = ringBuffers[offset + 1] + 1;\n    } else if (blockType == 0) {\n      blockType = ringBuffers[offset];\n    } else {\n      blockType -= 2;\n    }\n    if (blockType >= numBlockTypes) {\n      blockType -= numBlockTypes;\n    }\n    ringBuffers[offset] = ringBuffers[offset + 1];\n    ringBuffers[offset + 1] = blockType;\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeLiteralBlockSwitch(s) {\n    s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes);\n    var /** number */ literalBlockType = s.rings[5];\n    s.contextMapSlice = literalBlockType << 6;\n    s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF;\n    var /** number */ contextMode = s.contextModes[literalBlockType];\n    s.contextLookupOffset1 = contextMode << 9;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeCommandBlockSwitch(s) {\n    s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes);\n    s.commandTreeIdx = s.rings[7];\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decodeDistanceBlockSwitch(s) {\n    s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes);\n    s.distContextMapSlice = s.rings[9] << 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function maybeReallocateRingBuffer(s) {\n    var /** number */ newSize = s.maxRingBufferSize;\n    if (newSize > s.expectedTotalSize) {\n      var /** number */ minimalNewSize = s.expectedTotalSize;\n      while ((newSize >> 1) > minimalNewSize) {\n        newSize >>= 1;\n      }\n      if ((s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) {\n        newSize = 16384;\n      }\n    }\n    if (newSize <= s.ringBufferSize) {\n      return;\n    }\n    var /** number */ ringBufferSizeWithSlack = newSize + 37;\n    var /** !Int8Array */ newBuffer = new Int8Array(ringBufferSizeWithSlack);\n    if (s.ringBuffer.length != 0) {\n      newBuffer.set(s.ringBuffer.subarray(0, 0 + s.ringBufferSize), 0);\n    }\n    s.ringBuffer = newBuffer;\n    s.ringBufferSize = newSize;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readNextMetablockHeader(s) {\n    if (s.inputEnd != 0) {\n      s.nextRunningState = 10;\n      s.runningState = 12;\n      return;\n    }\n    s.literalTreeGroup = new Int32Array(0);\n    s.commandTreeGroup = new Int32Array(0);\n    s.distanceTreeGroup = new Int32Array(0);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    decodeMetaBlockLength(s);\n    if ((s.metaBlockLength == 0) && (s.isMetadata == 0)) {\n      return;\n    }\n    if ((s.isUncompressed != 0) || (s.isMetadata != 0)) {\n      jumpToByteBoundary(s);\n      s.runningState = (s.isMetadata != 0) ? 5 : 6;\n    } else {\n      s.runningState = 3;\n    }\n    if (s.isMetadata != 0) {\n      return;\n    }\n    s.expectedTotalSize += s.metaBlockLength;\n    if (s.expectedTotalSize > 1 << 30) {\n      s.expectedTotalSize = 1 << 30;\n    }\n    if (s.ringBufferSize < s.maxRingBufferSize) {\n      maybeReallocateRingBuffer(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} treeType\n   * @param {number} numBlockTypes\n   * @return {number}\n   */\n  function readMetablockPartition(s, treeType, numBlockTypes) {\n    var /** number */ offset = s.blockTrees[2 * treeType];\n    if (numBlockTypes <= 1) {\n      s.blockTrees[2 * treeType + 1] = offset;\n      s.blockTrees[2 * treeType + 2] = offset;\n      return 1 << 28;\n    }\n    var /** number */ blockTypeAlphabetSize = numBlockTypes + 2;\n    offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s);\n    s.blockTrees[2 * treeType + 1] = offset;\n    var /** number */ blockLengthAlphabetSize = 26;\n    offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s);\n    s.blockTrees[2 * treeType + 2] = offset;\n    return readBlockLength(s.blockTrees, 2 * treeType + 1, s);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} alphabetSizeLimit\n   * @return {void}\n   */\n  function calculateDistanceLut(s, alphabetSizeLimit) {\n    var /** !Int8Array */ distExtraBits = s.distExtraBits;\n    var /** !Int32Array */ distOffset = s.distOffset;\n    var /** number */ npostfix = s.distancePostfixBits;\n    var /** number */ ndirect = s.numDirectDistanceCodes;\n    var /** number */ postfix = 1 << npostfix;\n    var /** number */ bits = 1;\n    var /** number */ half = 0;\n    var /** number */ i = 16;\n    for (var /** number */ j = 0; j < ndirect; ++j) {\n      distExtraBits[i] = 0;\n      distOffset[i] = j + 1;\n      ++i;\n    }\n    while (i < alphabetSizeLimit) {\n      var /** number */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;\n      for (var /** number */ j = 0; j < postfix; ++j) {\n        distExtraBits[i] = bits;\n        distOffset[i] = base + j;\n        ++i;\n      }\n      bits = bits + half;\n      half = half ^ 1;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function readMetablockHuffmanCodesAndContextMaps(s) {\n    s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes);\n    s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes);\n    s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1;\n    s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes);\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    if (s.bitOffset >= 16) {\n      s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n      s.bitOffset -= 16;\n    }\n    s.distancePostfixBits = readFewBits(s, 2);\n    s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits;\n    s.distancePostfixMask = (1 << s.distancePostfixBits) - 1;\n    s.contextModes = new Int8Array(s.numLiteralBlockTypes);\n    for (var /** number */ i = 0; i < s.numLiteralBlockTypes; ) {\n      var /** number */ limit = min(i + 96, s.numLiteralBlockTypes);\n      for (; i < limit; ++i) {\n        if (s.bitOffset >= 16) {\n          s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n          s.bitOffset -= 16;\n        }\n        s.contextModes[i] = readFewBits(s, 2);\n      }\n      if (s.halfOffset > 2030) {\n        doReadMoreInput(s);\n      }\n    }\n    s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6);\n    var /** number */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s);\n    s.trivialLiteralContext = 1;\n    for (var /** number */ j = 0; j < s.numLiteralBlockTypes << 6; j++) {\n      if (s.contextMap[j] != j >> 6) {\n        s.trivialLiteralContext = 0;\n        break;\n      }\n    }\n    s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2);\n    var /** number */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s);\n    s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s);\n    s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s);\n    var /** number */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24);\n    var /** number */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax;\n    if (s.isLargeWindow == 1) {\n      distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62);\n      distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes);\n    }\n    s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s);\n    calculateDistanceLut(s, distanceAlphabetSizeLimit);\n    s.contextMapSlice = 0;\n    s.distContextMapSlice = 0;\n    s.contextLookupOffset1 = s.contextModes[0] * 512;\n    s.contextLookupOffset2 = s.contextLookupOffset1 + 256;\n    s.literalTreeIdx = 0;\n    s.commandTreeIdx = 0;\n    s.rings[4] = 1;\n    s.rings[5] = 0;\n    s.rings[6] = 1;\n    s.rings[7] = 0;\n    s.rings[8] = 1;\n    s.rings[9] = 0;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function copyUncompressedData(s) {\n    var /** !Int8Array */ ringBuffer = s.ringBuffer;\n    if (s.metaBlockLength <= 0) {\n      reload(s);\n      s.runningState = 2;\n      return;\n    }\n    var /** number */ chunkLength = min(s.ringBufferSize - s.pos, s.metaBlockLength);\n    copyBytes(s, ringBuffer, s.pos, chunkLength);\n    s.metaBlockLength -= chunkLength;\n    s.pos += chunkLength;\n    if (s.pos == s.ringBufferSize) {\n      s.nextRunningState = 6;\n      s.runningState = 12;\n      return;\n    }\n    reload(s);\n    s.runningState = 2;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function writeRingBuffer(s) {\n    var /** number */ toWrite = min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten);\n    if (toWrite != 0) {\n      s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed);\n      s.outputUsed += toWrite;\n      s.ringBufferBytesWritten += toWrite;\n    }\n    if (s.outputUsed < s.outputLength) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n  /**\n   * @param {number} alphabetSizeMax\n   * @param {number} alphabetSizeLimit\n   * @param {number} n\n   * @param {!State} s\n   * @return {!Int32Array}\n   */\n  function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) {\n    var /** number */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5];\n    var /** !Int32Array */ group = new Int32Array(n + n * maxTableSize);\n    var /** number */ next = n;\n    for (var /** number */ i = 0; i < n; ++i) {\n      group[i] = next;\n      next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s);\n    }\n    return group;\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function calculateFence(s) {\n    var /** number */ result = s.ringBufferSize;\n    if (s.isEager != 0) {\n      result = min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed);\n    }\n    return result;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function decompress(s) {\n    if (s.runningState == 0) {\n      throw \"Can't decompress until initialized\";\n    }\n    if (s.runningState == 11) {\n      throw \"Can't decompress after close\";\n    }\n    if (s.runningState == 1) {\n      var /** number */ windowBits = decodeWindowBits(s);\n      if (windowBits == -1) {\n        throw \"Invalid 'windowBits' code\";\n      }\n      s.maxRingBufferSize = 1 << windowBits;\n      s.maxBackwardDistance = s.maxRingBufferSize - 16;\n      s.runningState = 2;\n    }\n    var /** number */ fence = calculateFence(s);\n    var /** number */ ringBufferMask = s.ringBufferSize - 1;\n    var /** !Int8Array */ ringBuffer = s.ringBuffer;\n    while (s.runningState != 10) {\n      switch(s.runningState) {\n        case 2:\n          if (s.metaBlockLength < 0) {\n            throw \"Invalid metablock length\";\n          }\n          readNextMetablockHeader(s);\n          fence = calculateFence(s);\n          ringBufferMask = s.ringBufferSize - 1;\n          ringBuffer = s.ringBuffer;\n          continue;\n        case 3:\n          readMetablockHuffmanCodesAndContextMaps(s);\n          s.runningState = 4;\n        case 4:\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 2;\n            continue;\n          }\n          if (s.halfOffset > 2030) {\n            doReadMoreInput(s);\n          }\n          if (s.commandBlockLength == 0) {\n            decodeCommandBlockSwitch(s);\n          }\n          s.commandBlockLength--;\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          var /** number */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2;\n          var /** number */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode];\n          var /** number */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1];\n          var /** number */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2];\n          s.distanceCode = CMD_LOOKUP[cmdCode + 3];\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          var /** number */ extraBits = insertAndCopyExtraBits & 0xFF;\n          s.insertLength = insertLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits));\n          if (s.bitOffset >= 16) {\n            s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n            s.bitOffset -= 16;\n          }\n          var /** number */ extraBits = insertAndCopyExtraBits >> 8;\n          s.copyLength = copyLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits));\n          s.j = 0;\n          s.runningState = 7;\n        case 7:\n          if (s.trivialLiteralContext != 0) {\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength == 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              s.literalBlockLength--;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s);\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          } else {\n            var /** number */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF;\n            var /** number */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF;\n            while (s.j < s.insertLength) {\n              if (s.halfOffset > 2030) {\n                doReadMoreInput(s);\n              }\n              if (s.literalBlockLength == 0) {\n                decodeLiteralBlockSwitch(s);\n              }\n              var /** number */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2];\n              var /** number */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF;\n              s.literalBlockLength--;\n              prevByte2 = prevByte1;\n              if (s.bitOffset >= 16) {\n                s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                s.bitOffset -= 16;\n              }\n              prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s);\n              ringBuffer[s.pos] = prevByte1;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 7;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState != 7) {\n            continue;\n          }\n          s.metaBlockLength -= s.insertLength;\n          if (s.metaBlockLength <= 0) {\n            s.runningState = 4;\n            continue;\n          }\n          var /** number */ distanceCode = s.distanceCode;\n          if (distanceCode < 0) {\n            s.distance = s.rings[s.distRbIdx];\n          } else {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.distanceBlockLength == 0) {\n              decodeDistanceBlockSwitch(s);\n            }\n            s.distanceBlockLength--;\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            var /** number */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF;\n            distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s);\n            if (distanceCode < 16) {\n              var /** number */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3;\n              s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode];\n              if (s.distance < 0) {\n                throw \"Negative distance\";\n              }\n            } else {\n              var /** number */ extraBits = s.distExtraBits[distanceCode];\n              var /** number */ bits;\n              if (s.bitOffset + extraBits <= 32) {\n                bits = readFewBits(s, extraBits);\n              } else {\n                if (s.bitOffset >= 16) {\n                  s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n                  s.bitOffset -= 16;\n                }\n                bits = ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits));\n              }\n              s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits);\n            }\n          }\n          if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) {\n            s.maxDistance = s.pos;\n          } else {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.distance > s.maxDistance) {\n            s.runningState = 9;\n            continue;\n          }\n          if (distanceCode > 0) {\n            s.distRbIdx = (s.distRbIdx + 1) & 0x3;\n            s.rings[s.distRbIdx] = s.distance;\n          }\n          if (s.copyLength > s.metaBlockLength) {\n            throw \"Invalid backward reference\";\n          }\n          s.j = 0;\n          s.runningState = 8;\n        case 8:\n          var /** number */ src = (s.pos - s.distance) & ringBufferMask;\n          var /** number */ dst = s.pos;\n          var /** number */ copyLength = s.copyLength - s.j;\n          var /** number */ srcEnd = src + copyLength;\n          var /** number */ dstEnd = dst + copyLength;\n          if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) {\n            if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) {\n              for (var /** number */ k = 0; k < copyLength; k += 4) {\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n                ringBuffer[dst++] = ringBuffer[src++];\n              }\n            } else {\n              ringBuffer.copyWithin(dst, src, srcEnd);\n            }\n            s.j += copyLength;\n            s.metaBlockLength -= copyLength;\n            s.pos += copyLength;\n          } else {\n            for (; s.j < s.copyLength; ) {\n              ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask];\n              s.metaBlockLength--;\n              s.pos++;\n              s.j++;\n              if (s.pos >= fence) {\n                s.nextRunningState = 8;\n                s.runningState = 12;\n                break;\n              }\n            }\n          }\n          if (s.runningState == 8) {\n            s.runningState = 4;\n          }\n          continue;\n        case 9:\n          if (s.distance > 0x7FFFFFFC) {\n            throw \"Invalid backward reference\";\n          }\n          if (s.copyLength >= 4 && s.copyLength <= 24) {\n            var /** number */ offset = DICTIONARY_OFFSETS_BY_LENGTH[s.copyLength];\n            var /** number */ wordId = s.distance - s.maxDistance - 1;\n            var /** number */ shift = DICTIONARY_SIZE_BITS_BY_LENGTH[s.copyLength];\n            var /** number */ mask = (1 << shift) - 1;\n            var /** number */ wordIdx = wordId & mask;\n            var /** number */ transformIdx = wordId >>> shift;\n            offset += wordIdx * s.copyLength;\n            if (transformIdx < 121) {\n              var /** number */ len = transformDictionaryWord(ringBuffer, s.pos, DICTIONARY_DATA, offset, s.copyLength, RFC_TRANSFORMS, transformIdx);\n              s.pos += len;\n              s.metaBlockLength -= len;\n              if (s.pos >= fence) {\n                s.nextRunningState = 4;\n                s.runningState = 12;\n                continue;\n              }\n            } else {\n              throw \"Invalid backward reference\";\n            }\n          } else {\n            throw \"Invalid backward reference\";\n          }\n          s.runningState = 4;\n          continue;\n        case 5:\n          while (s.metaBlockLength > 0) {\n            if (s.halfOffset > 2030) {\n              doReadMoreInput(s);\n            }\n            if (s.bitOffset >= 16) {\n              s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n              s.bitOffset -= 16;\n            }\n            readFewBits(s, 8);\n            s.metaBlockLength--;\n          }\n          s.runningState = 2;\n          continue;\n        case 6:\n          copyUncompressedData(s);\n          continue;\n        case 12:\n          s.ringBufferBytesReady = min(s.pos, s.ringBufferSize);\n          s.runningState = 13;\n        case 13:\n          if (writeRingBuffer(s) == 0) {\n            return;\n          }\n          if (s.pos >= s.maxBackwardDistance) {\n            s.maxDistance = s.maxBackwardDistance;\n          }\n          if (s.pos >= s.ringBufferSize) {\n            if (s.pos > s.ringBufferSize) {\n              ringBuffer.copyWithin(0, s.ringBufferSize, s.pos);\n            }\n            s.pos &= ringBufferMask;\n            s.ringBufferBytesWritten = 0;\n          }\n          s.runningState = s.nextRunningState;\n          continue;\n        default:\n          throw \"Unexpected state \" + s.runningState;\n      }\n    }\n    if (s.runningState == 10) {\n      if (s.metaBlockLength < 0) {\n        throw \"Invalid metablock length\";\n      }\n      jumpToByteBoundary(s);\n      checkHealth(s, 1);\n    }\n  }\n\n  /**\n   * @constructor\n   * @param {number} numTransforms\n   * @param {number} prefixSuffixLen\n   * @param {number} prefixSuffixCount\n   * @struct\n   */\n  function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) {\n    /** @type {!number} */\n    this.numTransforms = 0;\n    /** @type {!Int32Array} */\n    this.triplets = new Int32Array(0);\n    /** @type {!Int8Array} */\n    this.prefixSuffixStorage = new Int8Array(0);\n    /** @type {!Int32Array} */\n    this.prefixSuffixHeads = new Int32Array(0);\n    /** @type {!Int16Array} */\n    this.params = new Int16Array(0);\n    this.numTransforms = numTransforms;\n    this.triplets = new Int32Array(numTransforms * 3);\n    this.params = new Int16Array(numTransforms);\n    this.prefixSuffixStorage = new Int8Array(prefixSuffixLen);\n    this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1);\n  }\n\n  var RFC_TRANSFORMS = new Transforms(121, 167, 50);\n  /**\n   * @param {!Int8Array} prefixSuffix\n   * @param {!Int32Array} prefixSuffixHeads\n   * @param {!Int32Array} transforms\n   * @param {!string} prefixSuffixSrc\n   * @param {!string} transformsSrc\n   * @return {void}\n   */\n  function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) {\n    var /** number */ n = prefixSuffixSrc.length;\n    var /** number */ index = 1;\n    var /** number */ j = 0;\n    for (var /** number */ i = 0; i < n; ++i) {\n      var /** number */ c = prefixSuffixSrc.charCodeAt(i);\n      if (c == 35) {\n        prefixSuffixHeads[index++] = j;\n      } else {\n        prefixSuffix[j++] = c;\n      }\n    }\n    for (var /** number */ i = 0; i < 363; ++i) {\n      transforms[i] = transformsSrc.charCodeAt(i) - 32;\n    }\n  }\n  {\n    unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, \"# #s #, #e #.# the #.com/#\\u00C2\\u00A0# of # and # in # to #\\\"#\\\">#\\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\\n\\t#:#ed #(# at #ly #=\\\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #\", \"     !! ! ,  *!  &!  \\\" !  ) *   * -  ! # !  #!*!  +  ,$ !  -  %  .  / #   0  1 .  \\\"   2  3!*   4%  ! # /   5  6  7  8 0  1 &   $   9 +   :  ;  < '  !=  >  ?! 4  @ 4  2  &   A *# (   B  C& ) %  ) !*# *-% A +! *.  D! %'  & E *6  F  G% ! *A *%  H! D  I!+!  J!+   K +- *4! A  L!*4  M  N +6  O!*% +.! K *G  P +%(  ! G *D +D  Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K\");\n  }\n  /**\n   * @param {!Int8Array} dst\n   * @param {number} dstOffset\n   * @param {!Int8Array} src\n   * @param {number} srcOffset\n   * @param {number} len\n   * @param {!Transforms} transforms\n   * @param {number} transformIndex\n   * @return {number}\n   */\n  function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) {\n    var /** number */ offset = dstOffset;\n    var /** !Int32Array */ triplets = transforms.triplets;\n    var /** !Int8Array */ prefixSuffixStorage = transforms.prefixSuffixStorage;\n    var /** !Int32Array */ prefixSuffixHeads = transforms.prefixSuffixHeads;\n    var /** number */ transformOffset = 3 * transformIndex;\n    var /** number */ prefixIdx = triplets[transformOffset];\n    var /** number */ transformType = triplets[transformOffset + 1];\n    var /** number */ suffixIdx = triplets[transformOffset + 2];\n    var /** number */ prefix = prefixSuffixHeads[prefixIdx];\n    var /** number */ prefixEnd = prefixSuffixHeads[prefixIdx + 1];\n    var /** number */ suffix = prefixSuffixHeads[suffixIdx];\n    var /** number */ suffixEnd = prefixSuffixHeads[suffixIdx + 1];\n    var /** number */ omitFirst = transformType - 11;\n    var /** number */ omitLast = transformType - 0;\n    if (omitFirst < 1 || omitFirst > 9) {\n      omitFirst = 0;\n    }\n    if (omitLast < 1 || omitLast > 9) {\n      omitLast = 0;\n    }\n    while (prefix != prefixEnd) {\n      dst[offset++] = prefixSuffixStorage[prefix++];\n    }\n    if (omitFirst > len) {\n      omitFirst = len;\n    }\n    srcOffset += omitFirst;\n    len -= omitFirst;\n    len -= omitLast;\n    var /** number */ i = len;\n    while (i > 0) {\n      dst[offset++] = src[srcOffset++];\n      i--;\n    }\n    if (transformType == 10 || transformType == 11) {\n      var /** number */ uppercaseOffset = offset - len;\n      if (transformType == 10) {\n        len = 1;\n      }\n      while (len > 0) {\n        var /** number */ c0 = dst[uppercaseOffset] & 0xFF;\n        if (c0 < 0xC0) {\n          if (c0 >= 97 && c0 <= 122) {\n            dst[uppercaseOffset] ^= 32;\n          }\n          uppercaseOffset += 1;\n          len -= 1;\n        } else if (c0 < 0xE0) {\n          dst[uppercaseOffset + 1] ^= 32;\n          uppercaseOffset += 2;\n          len -= 2;\n        } else {\n          dst[uppercaseOffset + 2] ^= 5;\n          uppercaseOffset += 3;\n          len -= 3;\n        }\n      }\n    } else if (transformType == 21 || transformType == 22) {\n      var /** number */ shiftOffset = offset - len;\n      var /** number */ param = transforms.params[transformIndex];\n      var /** number */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000));\n      while (len > 0) {\n        var /** number */ step = 1;\n        var /** number */ c0 = dst[shiftOffset] & 0xFF;\n        if (c0 < 0x80) {\n          scalar += c0;\n          dst[shiftOffset] = (scalar & 0x7F);\n        } else if (c0 < 0xC0) ; else if (c0 < 0xE0) {\n          if (len >= 2) {\n            var /** number */ c1 = dst[shiftOffset + 1];\n            scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6);\n            dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F));\n            step = 2;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF0) {\n          if (len >= 3) {\n            var /** number */ c1 = dst[shiftOffset + 1];\n            var /** number */ c2 = dst[shiftOffset + 2];\n            scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12);\n            dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F));\n            step = 3;\n          } else {\n            step = len;\n          }\n        } else if (c0 < 0xF8) {\n          if (len >= 4) {\n            var /** number */ c1 = dst[shiftOffset + 1];\n            var /** number */ c2 = dst[shiftOffset + 2];\n            var /** number */ c3 = dst[shiftOffset + 3];\n            scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18);\n            dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07));\n            dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F));\n            dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F));\n            dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F));\n            step = 4;\n          } else {\n            step = len;\n          }\n        }\n        shiftOffset += step;\n        len -= step;\n        if (transformType == 21) {\n          len = 0;\n        }\n      }\n    }\n    while (suffix != suffixEnd) {\n      dst[offset++] = prefixSuffixStorage[suffix++];\n    }\n    return offset - dstOffset;\n  }\n\n  /**\n   * @param {number} key\n   * @param {number} len\n   * @return {number}\n   */\n  function getNextKey(key, len) {\n    var /** number */ step = 1 << (len - 1);\n    while ((key & step) != 0) {\n      step >>= 1;\n    }\n    return (key & (step - 1)) + step;\n  }\n  /**\n   * @param {!Int32Array} table\n   * @param {number} offset\n   * @param {number} step\n   * @param {number} end\n   * @param {number} item\n   * @return {void}\n   */\n  function replicateValue(table, offset, step, end, item) {\n    do {\n      end -= step;\n      table[offset + end] = item;\n    } while (end > 0);\n  }\n  /**\n   * @param {!Int32Array} count\n   * @param {number} len\n   * @param {number} rootBits\n   * @return {number}\n   */\n  function nextTableBitSize(count, len, rootBits) {\n    var /** number */ left = 1 << (len - rootBits);\n    while (len < 15) {\n      left -= count[len];\n      if (left <= 0) {\n        break;\n      }\n      len++;\n      left <<= 1;\n    }\n    return len - rootBits;\n  }\n  /**\n   * @param {!Int32Array} tableGroup\n   * @param {number} tableIdx\n   * @param {number} rootBits\n   * @param {!Int32Array} codeLengths\n   * @param {number} codeLengthsSize\n   * @return {number}\n   */\n  function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) {\n    var /** number */ tableOffset = tableGroup[tableIdx];\n    var /** number */ key;\n    var /** !Int32Array */ sorted = new Int32Array(codeLengthsSize);\n    var /** !Int32Array */ count = new Int32Array(16);\n    var /** !Int32Array */ offset = new Int32Array(16);\n    var /** number */ symbol;\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      count[codeLengths[symbol]]++;\n    }\n    offset[1] = 0;\n    for (var /** number */ len = 1; len < 15; len++) {\n      offset[len + 1] = offset[len] + count[len];\n    }\n    for (symbol = 0; symbol < codeLengthsSize; symbol++) {\n      if (codeLengths[symbol] != 0) {\n        sorted[offset[codeLengths[symbol]]++] = symbol;\n      }\n    }\n    var /** number */ tableBits = rootBits;\n    var /** number */ tableSize = 1 << tableBits;\n    var /** number */ totalSize = tableSize;\n    if (offset[15] == 1) {\n      for (key = 0; key < totalSize; key++) {\n        tableGroup[tableOffset + key] = sorted[0];\n      }\n      return totalSize;\n    }\n    key = 0;\n    symbol = 0;\n    for (var /** number */ len = 1, step = 2; len <= rootBits; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    var /** number */ mask = totalSize - 1;\n    var /** number */ low = -1;\n    var /** number */ currentOffset = tableOffset;\n    for (var /** number */ len = rootBits + 1, step = 2; len <= 15; len++, step <<= 1) {\n      for (; count[len] > 0; count[len]--) {\n        if ((key & mask) != low) {\n          currentOffset += tableSize;\n          tableBits = nextTableBitSize(count, len, rootBits);\n          tableSize = 1 << tableBits;\n          totalSize += tableSize;\n          low = key & mask;\n          tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low);\n        }\n        replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]);\n        key = getNextKey(key, len);\n      }\n    }\n    return totalSize;\n  }\n\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function doReadMoreInput(s) {\n    if (s.endOfStreamReached != 0) {\n      if (halfAvailable(s) >= -2) {\n        return;\n      }\n      throw \"No more input\";\n    }\n    var /** number */ readOffset = s.halfOffset << 1;\n    var /** number */ bytesInBuffer = 4096 - readOffset;\n    s.byteBuffer.copyWithin(0, readOffset, 4096);\n    s.halfOffset = 0;\n    while (bytesInBuffer < 4096) {\n      var /** number */ spaceLeft = 4096 - bytesInBuffer;\n      var /** number */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft);\n      if (len <= 0) {\n        s.endOfStreamReached = 1;\n        s.tailBytes = bytesInBuffer;\n        bytesInBuffer += 1;\n        break;\n      }\n      bytesInBuffer += len;\n    }\n    bytesToNibbles(s, bytesInBuffer);\n  }\n  /**\n   * @param {!State} s\n   * @param {number} endOfStream\n   * @return {void}\n   */\n  function checkHealth(s, endOfStream) {\n    if (s.endOfStreamReached == 0) {\n      return;\n    }\n    var /** number */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4;\n    if (byteOffset > s.tailBytes) {\n      throw \"Read after end\";\n    }\n    if ((endOfStream != 0) && (byteOffset != s.tailBytes)) {\n      throw \"Unused bytes after end\";\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readFewBits(s, n) {\n    var /** number */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1);\n    s.bitOffset += n;\n    return val;\n  }\n  /**\n   * @param {!State} s\n   * @param {number} n\n   * @return {number}\n   */\n  function readManyBits(s, n) {\n    var /** number */ low = readFewBits(s, 16);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    return low | (readFewBits(s, n - 16) << 16);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function initBitReader(s) {\n    s.byteBuffer = new Int8Array(4160);\n    s.accumulator32 = 0;\n    s.shortBuffer = new Int16Array(2080);\n    s.bitOffset = 32;\n    s.halfOffset = 2048;\n    s.endOfStreamReached = 0;\n    prepare(s);\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function prepare(s) {\n    if (s.halfOffset > 2030) {\n      doReadMoreInput(s);\n    }\n    checkHealth(s, 0);\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n    s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n    s.bitOffset -= 16;\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function reload(s) {\n    if (s.bitOffset == 32) {\n      prepare(s);\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {void}\n   */\n  function jumpToByteBoundary(s) {\n    var /** number */ padding = (32 - s.bitOffset) & 7;\n    if (padding != 0) {\n      var /** number */ paddingBits = readFewBits(s, padding);\n      if (paddingBits != 0) {\n        throw \"Corrupted padding bits\";\n      }\n    }\n  }\n  /**\n   * @param {!State} s\n   * @return {number}\n   */\n  function halfAvailable(s) {\n    var /** number */ limit = 2048;\n    if (s.endOfStreamReached != 0) {\n      limit = (s.tailBytes + 1) >> 1;\n    }\n    return limit - s.halfOffset;\n  }\n  /**\n   * @param {!State} s\n   * @param {!Int8Array} data\n   * @param {number} offset\n   * @param {number} length\n   * @return {void}\n   */\n  function copyBytes(s, data, offset, length) {\n    if ((s.bitOffset & 7) != 0) {\n      throw \"Unaligned copyBytes\";\n    }\n    while ((s.bitOffset != 32) && (length != 0)) {\n      data[offset++] = (s.accumulator32 >>> s.bitOffset);\n      s.bitOffset += 8;\n      length--;\n    }\n    if (length == 0) {\n      return;\n    }\n    var /** number */ copyNibbles = min(halfAvailable(s), length >> 1);\n    if (copyNibbles > 0) {\n      var /** number */ readOffset = s.halfOffset << 1;\n      var /** number */ delta = copyNibbles << 1;\n      data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset);\n      offset += delta;\n      length -= delta;\n      s.halfOffset += copyNibbles;\n    }\n    if (length == 0) {\n      return;\n    }\n    if (halfAvailable(s) > 0) {\n      if (s.bitOffset >= 16) {\n        s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);\n        s.bitOffset -= 16;\n      }\n      while (length != 0) {\n        data[offset++] = (s.accumulator32 >>> s.bitOffset);\n        s.bitOffset += 8;\n        length--;\n      }\n      checkHealth(s, 0);\n      return;\n    }\n    while (length > 0) {\n      var /** number */ len = readInput(s.input, data, offset, length);\n      if (len == -1) {\n        throw \"Unexpected end of input\";\n      }\n      offset += len;\n      length -= len;\n    }\n  }\n  /**\n   * @param {!State} s\n   * @param {number} byteLen\n   * @return {void}\n   */\n  function bytesToNibbles(s, byteLen) {\n    var /** !Int8Array */ byteBuffer = s.byteBuffer;\n    var /** number */ halfLen = byteLen >> 1;\n    var /** !Int16Array */ shortBuffer = s.shortBuffer;\n    for (var /** number */ i = 0; i < halfLen; ++i) {\n      shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8));\n    }\n  }\n\n  var LOOKUP = new Int32Array(2048);\n  /**\n   * @param {!Int32Array} lookup\n   * @param {!string} map\n   * @param {!string} rle\n   * @return {void}\n   */\n  function unpackLookupTable(lookup, map, rle) {\n    for (var /** number */ i = 0; i < 256; ++i) {\n      lookup[i] = i & 0x3F;\n      lookup[512 + i] = i >> 2;\n      lookup[1792 + i] = 2 + (i >> 6);\n    }\n    for (var /** number */ i = 0; i < 128; ++i) {\n      lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32);\n    }\n    for (var /** number */ i = 0; i < 64; ++i) {\n      lookup[1152 + i] = i & 1;\n      lookup[1216 + i] = 2 + (i & 1);\n    }\n    var /** number */ offset = 1280;\n    for (var /** number */ k = 0; k < 19; ++k) {\n      var /** number */ value = k & 3;\n      var /** number */ rep = rle.charCodeAt(k) - 32;\n      for (var /** number */ i = 0; i < rep; ++i) {\n        lookup[offset++] = value;\n      }\n    }\n    for (var /** number */ i = 0; i < 16; ++i) {\n      lookup[1792 + i] = 1;\n      lookup[2032 + i] = 6;\n    }\n    lookup[1792] = 0;\n    lookup[2047] = 7;\n    for (var /** number */ i = 0; i < 256; ++i) {\n      lookup[1536 + i] = lookup[1792 + i] << 3;\n    }\n  }\n  {\n    unpackLookupTable(LOOKUP, \"         !!  !                  \\\"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# \", \"A/*  ':  & : $  \\u0081 @\");\n  }\n\n  /**\n   * @constructor\n   * @struct\n   */\n  function State() {\n    /** @type {!Int8Array} */\n    this.ringBuffer = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextModes = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.contextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distContextMap = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.distExtraBits = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.output = new Int8Array(0);\n    /** @type {!Int8Array} */\n    this.byteBuffer = new Int8Array(0);\n    /** @type {!Int16Array} */\n    this.shortBuffer = new Int16Array(0);\n    /** @type {!Int32Array} */\n    this.intBuffer = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.rings = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.blockTrees = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.literalTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.commandTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distanceTreeGroup = new Int32Array(0);\n    /** @type {!Int32Array} */\n    this.distOffset = new Int32Array(0);\n    /** @type {!number} */\n    this.runningState = 0;\n    /** @type {!number} */\n    this.nextRunningState = 0;\n    /** @type {!number} */\n    this.accumulator32 = 0;\n    /** @type {!number} */\n    this.bitOffset = 0;\n    /** @type {!number} */\n    this.halfOffset = 0;\n    /** @type {!number} */\n    this.tailBytes = 0;\n    /** @type {!number} */\n    this.endOfStreamReached = 0;\n    /** @type {!number} */\n    this.metaBlockLength = 0;\n    /** @type {!number} */\n    this.inputEnd = 0;\n    /** @type {!number} */\n    this.isUncompressed = 0;\n    /** @type {!number} */\n    this.isMetadata = 0;\n    /** @type {!number} */\n    this.literalBlockLength = 0;\n    /** @type {!number} */\n    this.numLiteralBlockTypes = 0;\n    /** @type {!number} */\n    this.commandBlockLength = 0;\n    /** @type {!number} */\n    this.numCommandBlockTypes = 0;\n    /** @type {!number} */\n    this.distanceBlockLength = 0;\n    /** @type {!number} */\n    this.numDistanceBlockTypes = 0;\n    /** @type {!number} */\n    this.pos = 0;\n    /** @type {!number} */\n    this.maxDistance = 0;\n    /** @type {!number} */\n    this.distRbIdx = 0;\n    /** @type {!number} */\n    this.trivialLiteralContext = 0;\n    /** @type {!number} */\n    this.literalTreeIdx = 0;\n    /** @type {!number} */\n    this.commandTreeIdx = 0;\n    /** @type {!number} */\n    this.j = 0;\n    /** @type {!number} */\n    this.insertLength = 0;\n    /** @type {!number} */\n    this.contextMapSlice = 0;\n    /** @type {!number} */\n    this.distContextMapSlice = 0;\n    /** @type {!number} */\n    this.contextLookupOffset1 = 0;\n    /** @type {!number} */\n    this.contextLookupOffset2 = 0;\n    /** @type {!number} */\n    this.distanceCode = 0;\n    /** @type {!number} */\n    this.numDirectDistanceCodes = 0;\n    /** @type {!number} */\n    this.distancePostfixMask = 0;\n    /** @type {!number} */\n    this.distancePostfixBits = 0;\n    /** @type {!number} */\n    this.distance = 0;\n    /** @type {!number} */\n    this.copyLength = 0;\n    /** @type {!number} */\n    this.maxBackwardDistance = 0;\n    /** @type {!number} */\n    this.maxRingBufferSize = 0;\n    /** @type {!number} */\n    this.ringBufferSize = 0;\n    /** @type {!number} */\n    this.expectedTotalSize = 0;\n    /** @type {!number} */\n    this.outputOffset = 0;\n    /** @type {!number} */\n    this.outputLength = 0;\n    /** @type {!number} */\n    this.outputUsed = 0;\n    /** @type {!number} */\n    this.ringBufferBytesWritten = 0;\n    /** @type {!number} */\n    this.ringBufferBytesReady = 0;\n    /** @type {!number} */\n    this.isEager = 0;\n    /** @type {!number} */\n    this.isLargeWindow = 0;\n    /** @type {!InputStream|null} */\n    this.input = null;\n    this.ringBuffer = new Int8Array(0);\n    this.rings = new Int32Array(10);\n    this.rings[0] = 16;\n    this.rings[1] = 15;\n    this.rings[2] = 11;\n    this.rings[3] = 4;\n  }\n\n  /**\n   * @param {!Int8Array} dictionary\n   * @param {!string} data0\n   * @param {!string} data1\n   * @param {!string} skipFlip\n   * @return {void}\n   */\n  function unpackDictionaryData(dictionary, data0, data1, skipFlip) {\n    var /** !Int8Array */ dict = toUsAsciiBytes(data0 + data1);\n    if (dict.length != dictionary.length) {\n      throw \"Corrupted brotli dictionary\";\n    }\n    var /** number */ offset = 0;\n    var /** number */ n = skipFlip.length;\n    for (var /** number */ i = 0; i < n; i += 2) {\n      var /** number */ skip = skipFlip.charCodeAt(i) - 36;\n      var /** number */ flip = skipFlip.charCodeAt(i + 1) - 36;\n      offset += skip;\n      for (var /** number */ j = 0; j < flip; ++j) {\n        dict[offset] |= 0x80;\n        offset++;\n      }\n    }\n    dictionary.set(dict);\n  }\n  {\n    var /** !Int8Array */ dictionary = new Int8Array(122784);\n    unpackDictionaryData(dictionary, \"timedownlifeleftbackcodedatashowonlysitecityopenjustlikefreeworktextyearoverbodyloveformbookplaylivelinehelphomesidemorewordlongthemviewfindpagedaysfullheadtermeachareafromtruemarkableuponhighdatelandnewsevennextcasebothpostusedmadehandherewhatnameLinkblogsizebaseheldmakemainuser') +holdendswithNewsreadweresigntakehavegameseencallpathwellplusmenufilmpartjointhislistgoodneedwayswestjobsmindalsologorichuseslastteamarmyfoodkingwilleastwardbestfirePageknowaway.pngmovethanloadgiveselfnotemuchfeedmanyrockicononcelookhidediedHomerulehostajaxinfoclublawslesshalfsomesuchzone100%onescareTimeracebluefourweekfacehopegavehardlostwhenparkkeptpassshiproomHTMLplanTypedonesavekeepflaglinksoldfivetookratetownjumpthusdarkcardfilefearstaykillthatfallautoever.comtalkshopvotedeepmoderestturnbornbandfellroseurl(skinrolecomeactsagesmeetgold.jpgitemvaryfeltthensenddropViewcopy1.0\\\"</a>stopelseliestourpack.gifpastcss?graymean&gt;rideshotlatesaidroadvar feeljohnrickportfast'UA-dead</b>poorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$('#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml\\\"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid=\\\"sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnear<!--growJSONdutyNamesaleyou lotspainjazzcoldeyesfishwww.risktabsprev10pxrise25pxBlueding300,ballfordearnwildbox.fairlackverspairjunetechif(!pickevil$(\\\"#warmlorddoespull,000ideadrawhugespotfundburnhrefcellkeystickhourlossfuel12pxsuitdealRSS\\\"agedgreyGET\\\"easeaimsgirlaids8px;navygridtips#999warsladycars); }php?helltallwhomzh:e*/\\r\\n 100hall.\\n\\nA7px;pushchat0px;crew*/</hash75pxflatrare && tellcampontolaidmissskiptentfinemalegetsplot400,\\r\\n\\r\\ncoolfeet.php<br>ericmostguidbelldeschairmathatom/img&#82luckcent000;tinygonehtmlselldrugFREEnodenick?id=losenullvastwindRSS wearrelybeensamedukenasacapewishgulfT23:hitsslotgatekickblurthey15px''););\\\">msiewinsbirdsortbetaseekT18:ordstreemall60pxfarmb\\u0000\\u0019sboys[0].');\\\"POSTbearkids);}}marytend(UK)quadzh:f-siz----prop');\\rliftT19:viceandydebt>RSSpoolneckblowT16:doorevalT17:letsfailoralpollnovacolsgene b\\u0000\\u0014softrometillross<h3>pourfadepink<tr>mini)|!(minezh:hbarshear00);milk -->ironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees<h2>json', 'contT21: RSSloopasiamoon</p>soulLINEfortcartT14:<h1>80px!--<9px;T04:mike:46ZniceinchYorkricezh:d'));puremageparatonebond:37Z_of_']);000,zh:gtankyardbowlbush:56ZJava30px\\n|}\\n%C3%:34ZjeffEXPIcashvisagolfsnowzh:iquer.csssickmeatmin.binddellhirepicsrent:36ZHTTP-201fotowolfEND xbox:54ZBODYdick;\\n}\\nexit:35Zvarsbeat'});diet999;anne}}</[i].LangkmB2wiretoysaddssealalex;\\n\\t}echonine.org005)tonyjewssandlegsroof000) 200winegeardogsbootgarycutstyletemption.xmlcockgang$('.50pxPh.Dmiscalanloandeskmileryanunixdisc);}\\ndustclip).\\n\\n70px-200DVDs7]><tapedemoi++)wageeurophiloptsholeFAQsasin-26TlabspetsURL bulkcook;}\\r\\nHEAD[0])abbrjuan(198leshtwin</i>sonyguysfuckpipe|-\\n!002)ndow[1];[];\\nLog salt\\r\\n\\t\\tbangtrimbath){\\r\\n00px\\n});ko:lfeesad>\\rs:// [];tollplug(){\\n{\\r\\n .js'200pdualboat.JPG);\\n}quot);\\n\\n');\\n\\r\\n}\\r201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037201320122011201020092008200720062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195010001024139400009999comomC!sesteestaperotodohacecadaaC1obiendC-aasC-vidacasootroforosolootracualdijosidograntipotemadebealgoquC)estonadatrespococasabajotodasinoaguapuesunosantediceluisellamayozonaamorpisoobraclicellodioshoracasiP7P0P=P0P>P<Q\\u0000P0Q\\u0000Q\\u0003Q\\u0002P0P=P5P?P>P>Q\\u0002P8P7P=P>P4P>Q\\u0002P>P6P5P>P=P8Q\\u0005P\\u001DP0P5P5P1Q\\u000BP<Q\\u000BP\\u0012Q\\u000BQ\\u0001P>P2Q\\u000BP2P>P\\u001DP>P>P1P\\u001FP>P;P8P=P8P P$P\\u001DP5P\\u001CQ\\u000BQ\\u0002Q\\u000BP\\u001EP=P8P<P4P0P\\u0017P0P\\u0014P0P\\u001DQ\\u0003P\\u001EP1Q\\u0002P5P\\u0018P7P5P9P=Q\\u0003P<P<P\\\"Q\\u000BQ\\u0003P6Y\\u0001Y\\nX#Y\\u0006Y\\u0005X'Y\\u0005X9Y\\u0003Y\\u0004X#Y\\u0008X1X/Y\\nX'Y\\u0001Y\\tY\\u0007Y\\u0008Y\\u0004Y\\u0005Y\\u0004Y\\u0003X'Y\\u0008Y\\u0004Y\\u0007X(X3X'Y\\u0004X%Y\\u0006Y\\u0007Y\\nX#Y\\nY\\u0002X/Y\\u0007Y\\u0004X+Y\\u0005X(Y\\u0007Y\\u0004Y\\u0008Y\\u0004Y\\nX(Y\\u0004X'Y\\nX(Y\\u0003X4Y\\nX'Y\\u0005X#Y\\u0005Y\\u0006X*X(Y\\nY\\u0004Y\\u0006X-X(Y\\u0007Y\\u0005Y\\u0005X4Y\\u0008X4firstvideolightworldmediawhitecloseblackrightsmallbooksplacemusicfieldorderpointvalueleveltableboardhousegroupworksyearsstatetodaywaterstartstyledeathpowerphonenighterrorinputabouttermstitletoolseventlocaltimeslargewordsgamesshortspacefocusclearmodelblockguideradiosharewomenagainmoneyimagenamesyounglineslatercolorgreenfront&amp;watchforcepricerulesbeginaftervisitissueareasbelowindextotalhourslabelprintpressbuiltlinksspeedstudytradefoundsenseundershownformsrangeaddedstillmovedtakenaboveflashfixedoftenotherviewschecklegalriveritemsquickshapehumanexistgoingmoviethirdbasicpeacestagewidthloginideaswrotepagesusersdrivestorebreaksouthvoicesitesmonthwherebuildwhichearthforumthreesportpartyClicklowerlivesclasslayerentrystoryusagesoundcourtyour birthpopuptypesapplyImagebeinguppernoteseveryshowsmeansextramatchtrackknownearlybegansuperpapernorthlearngivennamedendedTermspartsGroupbrandusingwomanfalsereadyaudiotakeswhile.com/livedcasesdailychildgreatjudgethoseunitsneverbroadcoastcoverapplefilescyclesceneplansclickwritequeenpieceemailframeolderphotolimitcachecivilscaleenterthemetheretouchboundroyalaskedwholesincestock namefaithheartemptyofferscopeownedmightalbumthinkbloodarraymajortrustcanonunioncountvalidstoneStyleLoginhappyoccurleft:freshquitefilmsgradeneedsurbanfightbasishoverauto;route.htmlmixedfinalYour slidetopicbrownalonedrawnsplitreachRightdatesmarchquotegoodsLinksdoubtasyncthumballowchiefyouthnovel10px;serveuntilhandsCheckSpacequeryjamesequaltwice0,000Startpanelsongsroundeightshiftworthpostsleadsweeksavoidthesemilesplanesmartalphaplantmarksratesplaysclaimsalestextsstarswrong</h3>thing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //-->adminegyptEvent15px;Emailtrue\\\"crossspentblogsbox\\\">notedleavechinasizesguest</h4>robotheavytrue,sevengrandcrimesignsawaredancephase><!--en_US&#39;200px_namelatinenjoyajax.ationsmithU.S. holdspeterindianav\\\">chainscorecomesdoingpriorShare1990sromanlistsjapanfallstrialowneragree</h2>abusealertopera\\\"-//WcardshillsteamsPhototruthclean.php?saintmetallouismeantproofbriefrow\\\">genretrucklooksValueFrame.net/-->\\n<try {\\nvar makescostsplainadultquesttrainlaborhelpscausemagicmotortheir250pxleaststepsCountcouldglasssidesfundshotelawardmouthmovesparisgivesdutchtexasfruitnull,||[];top\\\">\\n<!--POST\\\"ocean<br/>floorspeakdepth sizebankscatchchart20px;aligndealswould50px;url=\\\"parksmouseMost ...</amongbrainbody none;basedcarrydraftreferpage_home.meterdelaydreamprovejoint</tr>drugs<!-- aprilidealallenexactforthcodeslogicView seemsblankports (200saved_linkgoalsgrantgreekhomesringsrated30px;whoseparse();\\\" Blocklinuxjonespixel');\\\">);if(-leftdavidhorseFocusraiseboxesTrackement</em>bar\\\">.src=toweralt=\\\"cablehenry24px;setupitalysharpminortastewantsthis.resetwheelgirls/css/100%;clubsstuffbiblevotes 1000korea});\\r\\nbandsqueue= {};80px;cking{\\r\\n\\t\\taheadclockirishlike ratiostatsForm\\\"yahoo)[0];Aboutfinds</h1>debugtasksURL =cells})();12px;primetellsturns0x600.jpg\\\"spainbeachtaxesmicroangel--></giftssteve-linkbody.});\\n\\tmount (199FAQ</rogerfrankClass28px;feeds<h1><scotttests22px;drink) || lewisshall#039; for lovedwaste00px;ja:c\\u0002simon<fontreplymeetsuntercheaptightBrand) != dressclipsroomsonkeymobilmain.Name platefunnytreescom/\\\"1.jpgwmodeparamSTARTleft idden, 201);\\n}\\nform.viruschairtransworstPagesitionpatch<!--\\no-cacfirmstours,000 asiani++){adobe')[0]id=10both;menu .2.mi.png\\\"kevincoachChildbruce2.jpgURL)+.jpg|suitesliceharry120\\\" sweettr>\\r\\nname=diegopage swiss-->\\n\\n#fff;\\\">Log.com\\\"treatsheet) && 14px;sleepntentfiledja:c\\u0003id=\\\"cName\\\"worseshots-box-delta\\n&lt;bears:48Z<data-rural</a> spendbakershops= \\\"\\\";php\\\">ction13px;brianhellosize=o=%2F joinmaybe<img img\\\">, fjsimg\\\" \\\")[0]MTopBType\\\"newlyDanskczechtrailknows</h5>faq\\\">zh-cn10);\\n-1\\\");type=bluestrulydavis.js';>\\r\\n<!steel you h2>\\r\\nform jesus100% menu.\\r\\n\\t\\r\\nwalesrisksumentddingb-likteachgif\\\" vegasdanskeestishqipsuomisobredesdeentretodospuedeaC1osestC!tienehastaotrospartedondenuevohacerformamismomejormundoaquC-dC-assC3loayudafechatodastantomenosdatosotrassitiomuchoahoralugarmayorestoshorastenerantesfotosestaspaC-snuevasaludforosmedioquienmesespoderchileserC!vecesdecirjosC)estarventagrupohechoellostengoamigocosasnivelgentemismaairesjuliotemashaciafavorjuniolibrepuntobuenoautorabrilbuenatextomarzosaberlistaluegocC3moenerojuegoperC:haberestoynuncamujervalorfueralibrogustaigualvotoscasosguC-apuedosomosavisousteddebennochebuscafaltaeurosseriedichocursoclavecasasleC3nplazolargoobrasvistaapoyojuntotratavistocrearcampohemoscincocargopisosordenhacenC!readiscopedrocercapuedapapelmenorC:tilclarojorgecalleponertardenadiemarcasigueellassiglocochemotosmadreclaserestoniC1oquedapasarbancohijosviajepabloC)stevienereinodejarfondocanalnorteletracausatomarmanoslunesautosvillavendopesartipostengamarcollevapadreunidovamoszonasambosbandamariaabusomuchasubirriojavivirgradochicaallC-jovendichaestantalessalirsuelopesosfinesllamabuscoC)stalleganegroplazahumorpagarjuntadobleislasbolsabaC1ohablaluchaC\\u0001readicenjugarnotasvalleallC!cargadolorabajoestC)gustomentemariofirmacostofichaplatahogarartesleyesaquelmuseobasespocosmitadcielochicomiedoganarsantoetapadebesplayaredessietecortecoreadudasdeseoviejodeseaaguas&quot;domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo\\\">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother\\\" id=\\\"marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo\\\" bottomlist\\\">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed&nbsp;courseAbout island<html cookiename=\\\"amazonmodernadvicein</a>: The dialoghousesBEGIN MexicostartscentreheightaddingIslandassetsEmpireSchooleffortdirectnearlymanualSelect.\\n\\nOnejoinedmenu\\\">PhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunited</b></beginsplantsassistartistissued300px|canadaagencyschemeremainBrazilsamplelogo\\\">beyond-scaleacceptservedmarineFootercamera</h1>\\n_form\\\"leavesstress\\\" />\\r\\n.gif\\\" onloadloaderOxfordsistersurvivlistenfemaleDesignsize=\\\"appealtext\\\">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople<br />wonderpricesturned|| {};main\\\">inlinesundaywrap\\\">failedcensusminutebeaconquotes150px|estateremoteemail\\\"linkedright;signalformal1.htmlsignupprincefloat:.png\\\" forum.AccesspaperssoundsextendHeightsliderUTF-8\\\"&amp; Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome\\\">headerensurebranchpiecesblock;statedtop\\\"><racingresize--&gt;pacitysexualbureau.jpg\\\" 10,000obtaintitlesamount, Inc.comedymenu\\\" lyricstoday.indeedcounty_logo.FamilylookedMarketlse ifPlayerturkey);var forestgivingerrorsDomain}else{insertBlog</footerlogin.fasteragents<body 10px 0pragmafridayjuniordollarplacedcoversplugin5,000 page\\\">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline\\\">body\\\">\\n* TheThoughseeingjerseyNews</verifyexpertinjurywidth=CookieSTART across_imagethreadnativepocketbox\\\">\\nSystem DavidcancertablesprovedApril reallydriveritem\\\">more\\\">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php\\\" assumelayerswilsonstoresreliefswedenCustomeasily your String\\n\\nWhiltaylorclear:resortfrenchthough\\\") + \\\"<body>buyingbrandsMembername\\\">oppingsector5px;\\\">vspacepostermajor coffeemartinmaturehappen</nav>kansaslink\\\">Images=falsewhile hspace0&amp; \\n\\nIn  powerPolski-colorjordanBottomStart -count2.htmlnews\\\">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml\\\"  rights.html-blockregExp:hoverwithinvirginphones</tr>\\rusing \\n\\tvar >');\\n\\t</td>\\n</tr>\\nbahasabrasilgalegomagyarpolskisrpskiX1X/Y\\u0008d8-f\\u0016\\u0007g.\\u0000d=\\u0013g9\\u0001i+\\u0014d?!f\\u0001/d8-e\\u001B=f\\u0008\\u0011d;,d8\\u0000d8*e\\u0005,e\\u000F8g.!g\\u0010\\u0006h.:e\\u001D\\u001Be\\u000F/d;%f\\u001C\\re\\n!f\\u00176i\\u00174d8*d::d:'e\\u0013\\u0001h\\u0007*e71d<\\u0001d8\\u001Af\\u001F%g\\u001C\\u000Be7%d=\\u001Ch\\u0001\\u0014g3;f2!f\\u001C\\tg=\\u0011g+\\u0019f\\t\\u0000f\\u001C\\th/\\u0004h.:d8-e?\\u0003f\\u0016\\u0007g+ g\\u0014(f\\u00087i&\\u0016i!5d=\\u001Ch\\u0000\\u0005f\\n\\u0000f\\u001C/i\\u0017.i\\\"\\u0018g\\u001B8e\\u00053d8\\u000Bh==f\\u0010\\u001Cg4\\\"d=?g\\u0014(h=/d;6e\\u001C(g:?d8;i\\\"\\u0018h5\\u0004f\\u0016\\u0019h'\\u0006i\\\"\\u0011e\\u001B\\u001Ee$\\rf3(e\\u0006\\u000Cg=\\u0011g;\\u001Cf\\u00146h\\u0017\\u000Fe\\u0006\\u0005e.9f\\u000E(h\\r\\u0010e8\\u0002e\\u001C:f6\\u0008f\\u0001/g):i\\u00174e\\u000F\\u0011e8\\u0003d;\\u0000d9\\u0008e%=e\\u000F\\u000Bg\\u0014\\u001Ff4;e\\u001B>g\\t\\u0007e\\u000F\\u0011e1\\u0015e&\\u0002f\\u001E\\u001Cf\\t\\u000Bf\\u001C:f\\u00160i\\u0017;f\\u001C\\u0000f\\u00160f\\u00169e<\\u000Fe\\u000C\\u0017d:,f\\u000F\\u0010d>\\u001Be\\u00053d:\\u000Ef\\u001B4e$\\u001Ah?\\u0019d8*g3;g;\\u001Fg\\u001F%i\\u0001\\u0013f88f\\u0008\\u000Fe9?e\\u0011\\ne\\u00056d;\\u0016e\\u000F\\u0011h!(e.\\te\\u0005(g,,d8\\u0000d<\\u001Ae\\u0011\\u0018h?\\u001Bh!\\u000Cg\\u00029e\\u0007;g\\t\\u0008f\\u001D\\u0003g\\u00145e-\\u0010d8\\u0016g\\u0015\\u000Ch.>h.!e\\u0005\\rh49f\\u0015\\u0019h\\u00022e\\n e\\u0005%f4;e\\n(d;\\u0016d;,e\\u0015\\u0006e\\u0013\\u0001e\\r\\u001Ae.\\\"g\\u000E0e\\u001C(d8\\nf57e&\\u0002d=\\u0015e72g;\\u000Fg\\u0015\\u0019h(\\u0000h/&g;\\u0006g$>e\\u000C:g\\u0019;e=\\u0015f\\u001C,g+\\u0019i\\u001C\\u0000h&\\u0001d;7f <f\\u0014/f\\u000C\\u0001e\\u001B=i\\u0019\\u0005i\\u0013>f\\u000E%e\\u001B=e.6e;:h.>f\\u001C\\u000Be\\u000F\\u000Bi\\u0018\\u0005h/;f3\\u0015e>\\u000Bd=\\rg=.g;\\u000Ff5\\u000Ei\\u0000\\tf\\u000B)h?\\u0019f 7e=\\u0013e\\t\\re\\u0008\\u0006g1;f\\u000E\\u0012h!\\u000Ce\\u001B d8:d:$f\\u0018\\u0013f\\u001C\\u0000e\\u0010\\u000Ei\\u001F3d9\\u0010d8\\rh\\u0003=i\\u0000\\u001Ah?\\u0007h!\\u000Cd8\\u001Ag'\\u0011f\\n\\u0000e\\u000F/h\\u0003=h.>e$\\u0007e\\u0010\\u0008d=\\u001Ce$'e.6g$>d<\\u001Ag \\u0014g)6d8\\u0013d8\\u001Ae\\u0005(i\\u0003(i!9g\\u001B.h?\\u0019i\\u0007\\u000Ch?\\u0018f\\u0018/e<\\u0000e'\\u000Bf\\u0003\\u0005e\\u00065g\\u00145h\\u0004\\u0011f\\u0016\\u0007d;6e\\u0013\\u0001g\\t\\u000Ce8.e\\n)f\\u0016\\u0007e\\u000C\\u0016h5\\u0004f:\\u0010e$'e-&e-&d9 e\\u001C0e\\u001D\\u0000f5\\u000Fh'\\u0008f\\n\\u0015h5\\u0004e7%g(\\u000Bh&\\u0001f1\\u0002f\\u0000\\u000Ed9\\u0008f\\u00176e\\u0000\\u0019e\\n\\u001Fh\\u0003=d8;h&\\u0001g\\u001B.e\\t\\rh5\\u0004h./e\\u001F\\u000Ee8\\u0002f\\u00169f3\\u0015g\\u00145e=1f\\u000B\\u001Bh\\u0001\\u0018e#0f\\u0018\\u000Ed;;d=\\u0015e\\u0001%e:7f\\u00150f\\r.g>\\u000Ee\\u001B=f1=h=&d;\\u000Bg;\\rd=\\u0006f\\u0018/d:$f5\\u0001g\\u0014\\u001Fd:'f\\t\\u0000d;%g\\u00145h/\\u001Df\\u0018>g$:d8\\u0000d:\\u001Be\\r\\u0015d=\\rd::e\\u0011\\u0018e\\u0008\\u0006f\\u001E\\u0010e\\u001C0e\\u001B>f\\u0017\\u0005f88e7%e\\u00057e-&g\\u0014\\u001Fg3;e\\u0008\\u0017g=\\u0011e\\u000F\\u000Be8\\u0016e-\\u0010e/\\u0006g \\u0001i\\\"\\u0011i\\u0001\\u0013f\\u000E'e\\u00086e\\u001C0e\\u000C:e\\u001F:f\\u001C,e\\u0005(e\\u001B=g=\\u0011d8\\ni\\u0007\\rh&\\u0001g,,d:\\u000Ce\\u0016\\u001Cf,\\\"h?\\u001Be\\u0005%e\\u000F\\u000Bf\\u0003\\u0005h?\\u0019d:\\u001Bh\\u0000\\u0003h/\\u0015e\\u000F\\u0011g\\u000E0e\\u001F9h.-d;%d8\\nf\\u0014?e:\\u001Cf\\u0008\\u0010d8:g\\u000E/e\\\"\\u0003i&\\u0019f8/e\\u0010\\u000Cf\\u00176e(1d9\\u0010e\\u000F\\u0011i\\u0000\\u0001d8\\u0000e.\\u001Ae<\\u0000e\\u000F\\u0011d=\\u001Ce\\u0013\\u0001f \\u0007e\\u0007\\u0006f,\\\"h?\\u000Eh'#e\\u00063e\\u001C0f\\u00169d8\\u0000d8\\u000Bd;%e\\u000F\\nh4#d;;f\\u0008\\u0016h\\u0000\\u0005e.\\\"f\\u00087d;#h!(g'/e\\u0008\\u0006e%3d::f\\u00150g \\u0001i\\u0014\\u0000e\\u0014.e\\u0007:g\\u000E0g&;g:?e:\\u0014g\\u0014(e\\u0008\\u0017h!(d8\\re\\u0010\\u000Cg<\\u0016h>\\u0011g;\\u001Fh.!f\\u001F%h/\\\"d8\\rh&\\u0001f\\u001C\\te\\u00053f\\u001C:f\\u001E\\u0004e>\\u0008e$\\u001Af\\u0012-f\\u0014>g;\\u0004g;\\u0007f\\u0014?g-\\u0016g\\u001B4f\\u000E%h\\u0003=e\\n\\u001Bf\\u001D%f:\\u0010f\\u0019\\u0002i\\u0016\\u0013g\\u001C\\u000Be\\u00080g\\u0003-i\\u0017(e\\u00053i\\u0014.d8\\u0013e\\u000C:i\\u001D\\u001Ee88h\\u000B1h/-g\\u0019>e:&e8\\u000Cf\\u001C\\u001Bg>\\u000Ee%3f/\\u0014h>\\u0003g\\u001F%h/\\u0006h'\\u0004e.\\u001Ae;:h..i\\u0003(i\\u0017(f\\u0004\\u000Fh'\\u0001g2>e=)f\\u0017%f\\u001C,f\\u000F\\u0010i+\\u0018e\\u000F\\u0011h(\\u0000f\\u00169i\\u001D\\\"e\\u001F:i\\u0007\\u0011e$\\u0004g\\u0010\\u0006f\\u001D\\u0003i\\u0019\\u0010e=1g\\t\\u0007i\\u00136h!\\u000Ch?\\u0018f\\u001C\\te\\u0008\\u0006d:+g\\t)e\\u0013\\u0001g;\\u000Fh\\u0010%f7;e\\n d8\\u0013e.6h?\\u0019g'\\rh/\\u001Di\\\"\\u0018h57f\\u001D%d8\\u001Ae\\n!e\\u0005,e\\u0011\\nh.0e=\\u0015g.\\u0000d;\\u000Bh4(i\\u0007\\u000Fg\\u00147d::e=1e\\u0013\\re<\\u0015g\\u0014(f\\n%e\\u0011\\ni\\u0003(e\\u0008\\u0006e?+i\\u0000\\u001Fe\\u0012(h/\\\"f\\u00176e0\\u001Af3(f\\u0004\\u000Fg\\u00143h/7e-&f !e:\\u0014h/%e\\u000E\\u0006e\\u000F2e\\u000F*f\\u0018/h?\\u0014e\\u001B\\u001Eh4-d90e\\u0010\\rg'0d8:d:\\u0006f\\u0008\\u0010e\\n\\u001Fh/4f\\u0018\\u000Ed>\\u001Be:\\u0014e-)e-\\u0010d8\\u0013i\\\"\\u0018g(\\u000Be:\\u000Fd8\\u0000h\\u0008,f\\u001C\\u0003e\\u0013!e\\u000F*f\\u001C\\te\\u00056e.\\u0003d?\\u001Df\\n$h\\u0000\\u000Cd8\\u0014d;\\ne$)g*\\u0017e\\u000F#e\\n(f\\u0000\\u0001g\\n6f\\u0000\\u0001g\\t9e\\u0008+h.$d8:e?\\u0005i!;f\\u001B4f\\u00160e0\\u000Fh/4f\\u0008\\u0011e\\u0000\\u0011d=\\u001Cd8:e*\\u0012d=\\u0013e\\u000C\\u0005f\\u000B,i\\u0002#d9\\u0008d8\\u0000f 7e\\u001B=e\\u0006\\u0005f\\u0018/e\\u0010&f 9f\\r.g\\u00145h'\\u0006e-&i\\u0019\\\"e\\u00057f\\u001C\\th?\\u0007g(\\u000Bg\\u00141d:\\u000Ed::f\\t\\re\\u0007:f\\u001D%d8\\rh?\\u0007f-#e\\u001C(f\\u0018\\u000Ef\\u0018\\u001Ff\\u0015\\u0005d:\\u000Be\\u00053g3;f \\u0007i\\\"\\u0018e\\u0015\\u0006e\\n!h>\\u0013e\\u0005%d8\\u0000g\\u001B4e\\u001F:g!\\u0000f\\u0015\\u0019e-&d:\\u0006h'#e;:g-\\u0011g;\\u0013f\\u001E\\u001Ce\\u0005(g\\u0010\\u0003i\\u0000\\u001Ag\\u001F%h.!e\\u0008\\u0012e/9d:\\u000Eh\\t:f\\u001C/g\\u001B8e\\u0006\\u000Ce\\u000F\\u0011g\\u0014\\u001Fg\\u001C\\u001Fg\\u001A\\u0004e;:g+\\u000Bg-\\tg:'g1;e\\u001E\\u000Bg;\\u000Fi*\\u000Ce.\\u001Eg\\u000E0e\\u00086d=\\u001Cf\\u001D%h\\u0007*f \\u0007g->d;%d8\\u000Be\\u000E\\u001Fe\\u0008\\u001Bf\\u0017 f3\\u0015e\\u00056d8-e\\u0000\\u000Bd::d8\\u0000e\\u0008\\u0007f\\u000C\\u0007e\\r\\u0017e\\u00053i\\u0017-i\\u001B\\u0006e\\u001B\\\"g,,d8\\te\\u00053f3(e\\u001B f-$g\\u0005'g\\t\\u0007f71e\\u001C3e\\u0015\\u0006d8\\u001Ae9?e7\\u001Ef\\u0017%f\\u001C\\u001Fi+\\u0018g:'f\\u001C\\u0000h?\\u0011g;<e\\u0010\\u0008h!(g$:d8\\u0013h>\\u0011h!\\u000Cd8:d:$i\\u0000\\u001Ah/\\u0004d;7h'\\te>\\u0017g2>e\\r\\u000Ee.6e:-e.\\u000Cf\\u0008\\u0010f\\u0004\\u001Fh'\\te.\\th#\\u0005e>\\u0017e\\u00080i\\u0002.d;6e\\u00086e:&i#\\u001Fe\\u0013\\u0001h\\u0019=g\\u00046h=,h==f\\n%d;7h.0h\\u0000\\u0005f\\u00169f!\\u0008h!\\u000Cf\\u0014?d::f0\\u0011g\\u0014(e\\u0013\\u0001d8\\u001Ch%?f\\u000F\\u0010e\\u0007:i\\u0005\\u0012e:\\u0017g\\u00046e\\u0010\\u000Ed;\\u0018f,>g\\u0003-g\\u00029d;%e\\t\\re.\\u000Ce\\u0005(e\\u000F\\u0011e8\\u0016h.>g=.i\\\"\\u0006e/<e7%d8\\u001Ae\\u000C;i\\u0019\\\"g\\u001C\\u000Bg\\u001C\\u000Bg;\\u000Fe\\u00058e\\u000E\\u001Fe\\u001B e93e\\u000F0e\\u0010\\u0004g'\\re\\\"\\u001Ee\\n f\\u001D\\u0010f\\u0016\\u0019f\\u00160e\\\"\\u001Ed9\\u000Be\\u0010\\u000Eh\\u0001\\u000Cd8\\u001Af\\u0015\\u0008f\\u001E\\u001Cd;\\ne94h.:f\\u0016\\u0007f\\u0008\\u0011e\\u001B=e\\u0011\\nh/\\tg\\t\\u0008d8;d?.f\\u00149e\\u000F\\u0002d8\\u000Ef\\t\\u0013e\\r0e?+d9\\u0010f\\u001C:f\\\"0h'\\u0002g\\u00029e-\\u0018e\\u001C(g2>g%\\u001Eh\\u000E7e>\\u0017e\\u0008)g\\u0014(g;'g;-d= d;,h?\\u0019d9\\u0008f(!e<\\u000Fh/-h(\\u0000h\\u0003=e$\\u001Fi\\u001B\\u0005h\\u0019\\u000Ef\\u0013\\rd=\\u001Ci#\\u000Ef <d8\\u0000h57g'\\u0011e-&d=\\u0013h\\u00022g\\u001F-d?!f\\u001D!d;6f2;g\\u0016\\u0017h?\\u0010e\\n(d:'d8\\u001Ad<\\u001Ah..e/<h\\u0008*e\\u0005\\u0008g\\u0014\\u001Fh\\u0001\\u0014g\\u001B\\u001Fe\\u000F/f\\u0018/e\\u0015\\u000Fi!\\u000Cg;\\u0013f\\u001E\\u0004d=\\u001Cg\\u0014(h0\\u0003f\\u001F%h3\\u0007f\\u0016\\u0019h\\u0007*e\\n(h4\\u001Fh4#e\\u0006\\u001Cd8\\u001Ah.?i\\u0017.e.\\u001Ef\\u0016=f\\u000E%e\\u000F\\u0017h.(h.:i\\u0002#d8*e\\u000F\\ri&\\u0008e\\n e<:e%3f\\u0000'h\\u000C\\u0003e\\u001B4f\\u001C\\re\\u000B\\u0019d<\\u0011i\\u00172d;\\nf\\u0017%e.\\\"f\\u001C\\rh'\\u0000g\\u001C\\u000Be\\u000F\\u0002e\\n g\\u001A\\u0004h/\\u001Dd8\\u0000g\\u00029d?\\u001Dh/\\u0001e\\u001B>d9&f\\u001C\\tf\\u0015\\u0008f5\\u000Bh/\\u0015g';e\\n(f\\t\\rh\\u0003=e\\u00063e.\\u001Ah\\u0002!g%(d8\\rf\\u0016-i\\u001C\\u0000f1\\u0002d8\\re>\\u0017e\\n\\u001Ef3\\u0015d9\\u000Bi\\u00174i\\u0007\\u0007g\\u0014(h\\u0010%i\\u0014\\u0000f\\n\\u0015h/\\tg\\u001B.f \\u0007g\\u00081f\\u0003\\u0005f\\u0011\\u0004e=1f\\u001C\\td:\\u001Bh$\\u0007h#=f\\u0016\\u0007e-&f\\u001C:d<\\u001Af\\u00150e-\\u0017h#\\u0005d?.h4-g\\t)e\\u0006\\u001Cf\\u001D\\u0011e\\u0005(i\\u001D\\\"g2>e\\u0013\\u0001e\\u00056e.\\u001Ed:\\u000Bf\\u0003\\u0005f04e93f\\u000F\\u0010g$:d8\\ne8\\u0002h0\\\"h0\\\"f\\u0019.i\\u0000\\u001Af\\u0015\\u0019e8\\u0008d8\\nd< g1;e\\u0008+f-\\u000Cf\\u001B2f\\u000B%f\\u001C\\te\\u0008\\u001Bf\\u00160i\\u0005\\rd;6e\\u000F*h&\\u0001f\\u00176d;#h3\\u0007h(\\nh>>e\\u00080d::g\\u0014\\u001Fh.\\\"i\\u0018\\u0005h\\u0000\\u0001e8\\u0008e1\\u0015g$:e?\\u0003g\\u0010\\u0006h44e-\\u0010g62g+\\u0019d8;i!\\u000Ch\\u0007*g\\u00046g:'e\\u0008+g.\\u0000e\\r\\u0015f\\u00149i\\u001D)i\\u0002#d:\\u001Bf\\u001D%h/4f\\t\\u0013e<\\u0000d;#g \\u0001e\\u0008 i\\u0019$h/\\u0001e\\u00088h\\n\\u0002g\\u001B.i\\u0007\\rg\\u00029f,!f\\u00158e$\\u001Ae0\\u0011h'\\u0004e\\u0008\\u0012h5\\u0004i\\u0007\\u0011f\\t>e\\u00080d;%e\\u0010\\u000Ee$'e\\u0005(d8;i!5f\\u001C\\u0000d=3e\\u001B\\u001Eg-\\u0014e$)d8\\u000Bd?\\u001Di\\u001A\\u001Cg\\u000E0d;#f#\\u0000f\\u001F%f\\n\\u0015g%(e0\\u000Ff\\u00176f2\\u0012f\\u001C\\tf-#e88g\\u0014\\u001Ah\\u00073d;#g\\u0010\\u0006g\\u001B.e=\\u0015e\\u0005,e<\\u0000e$\\re\\u00086i\\u0007\\u0011h\\u001E\\re98g&\\u000Fg\\t\\u0008f\\u001C,e=\\\"f\\u0008\\u0010e\\u0007\\u0006e$\\u0007h!\\u000Cf\\u0003\\u0005e\\u001B\\u001Ee\\u00080f\\u0000\\u001Df\\u00033f\\u0000\\u000Ef 7e\\r\\u000Fh..h.$h/\\u0001f\\u001C\\u0000e%=d:'g\\u0014\\u001Ff\\u000C\\tg\\u0005'f\\u001C\\rh#\\u0005e9?d8\\u001Ce\\n(f<+i\\u0007\\u0007h4-f\\u00160f\\t\\u000Bg;\\u0004e\\u001B>i\\u001D\\\"f\\u001D?e\\u000F\\u0002h\\u0000\\u0003f\\u0014?f2;e.9f\\u0018\\u0013e$)e\\u001C0e\\n*e\\n\\u001Bd::d;,e\\r\\u0007g:'i\\u0000\\u001Fe:&d::g\\t)h0\\u0003f\\u00154f5\\u0001h!\\u000Ci\\u0000 f\\u0008\\u0010f\\u0016\\u0007e-\\u0017i\\u001F)e\\u001B=h48f\\u0018\\u0013e<\\u0000e1\\u0015g\\u001B8i\\u0017\\u001Ch!(g\\u000E0e=1h'\\u0006e&\\u0002f-$g>\\u000Ee.9e$'e0\\u000Ff\\n%i\\u0001\\u0013f\\u001D!f,>e?\\u0003f\\u0003\\u0005h.8e$\\u001Af3\\u0015h'\\u0004e.6e1\\u0005d9&e:\\u0017h?\\u001Ef\\u000E%g+\\u000Be\\r3d8>f\\n%f\\n\\u0000e7'e%%h?\\u0010g\\u0019;e\\u0005%d;%f\\u001D%g\\u0010\\u0006h.:d:\\u000Bd;6h\\u0007*g\\u00141d8-e\\r\\u000Ee\\n\\u001Ee\\u0005,e&\\u0008e&\\u0008g\\u001C\\u001Ff-#d8\\ri\\u0014\\u0019e\\u0005(f\\u0016\\u0007e\\u0010\\u0008e\\u0010\\u000Cd;7e\\u0000<e\\u0008+d::g\\u001B\\u0011g\\u001D#e\\u00057d=\\u0013d8\\u0016g:*e\\u001B\\\"i\\u0018\\u001Fe\\u0008\\u001Bd8\\u001Af\\t?f\\u000B\\u0005e\\\"\\u001Ei\\u0015?f\\u001C\\td::d?\\u001Df\\u000C\\u0001e\\u0015\\u0006e.6g;4d?.e\\u000F0f9>e7&e\\u000F3h\\u0002!d;=g-\\u0014f!\\u0008e.\\u001Ei\\u0019\\u0005g\\u00145d?!g;\\u000Fg\\u0010\\u0006g\\u0014\\u001Fe\\u0011=e.#d< d;;e\\n!f-#e<\\u000Fg\\t9h\\t2d8\\u000Bf\\u001D%e\\r\\u000Fd<\\u001Ae\\u000F*h\\u0003=e=\\u0013g\\u00046i\\u0007\\rf\\u00160e\\u0005'e.9f\\u000C\\u0007e/<h?\\u0010h!\\u000Cf\\u0017%e?\\u0017h3#e.6h6\\u0005h?\\u0007e\\u001C\\u001Fe\\u001C0f5\\u0019f1\\u001Ff\\u0014/d;\\u0018f\\u000E(e\\u0007:g+\\u0019i\\u0015?f\\u001D-e7\\u001Ef\\t'h!\\u000Ce\\u00086i\\u0000 d9\\u000Bd8\\u0000f\\u000E(e9?g\\u000E0e\\u001C:f\\u000F\\u000Fh?0e\\u000F\\u0018e\\u000C\\u0016d< g;\\u001Ff-\\u000Cf\\t\\u000Bd?\\u001Di\\u0019)h/>g(\\u000Be\\u000C;g\\u0016\\u0017g;\\u000Fh?\\u0007h?\\u0007e\\u000E;d9\\u000Be\\t\\rf\\u00146e\\u0005%e94e:&f\\u001D\\u0002e?\\u0017g>\\u000Ed8=f\\u001C\\u0000i+\\u0018g\\u0019;i\\u0019\\u0006f\\u001C*f\\u001D%e\\n e7%e\\u0005\\rh4#f\\u0015\\u0019g(\\u000Bg\\t\\u0008e\\u001D\\u0017h:+d=\\u0013i\\u0007\\re:\\u0006e\\u0007:e\\u0014.f\\u0008\\u0010f\\u001C,e=\\\"e<\\u000Fe\\u001C\\u001Fh1\\u0006e\\u0007:e\\u00039d8\\u001Cf\\u00169i\\u0002.g.1e\\r\\u0017d:,f1\\u0002h\\u0001\\u000Ce\\u000F\\u0016e>\\u0017h\\u0001\\u000Cd=\\rg\\u001B8d?!i!5i\\u001D\\\"e\\u0008\\u0006i\\u0012\\u001Fg=\\u0011i!5g!.e.\\u001Ae\\u001B>d>\\u000Bg=\\u0011e\\u001D\\u0000g'/f\\u001E\\u0001i\\u0014\\u0019h//g\\u001B.g\\u001A\\u0004e.\\u001Dh4\\u001Df\\u001C:e\\u00053i#\\u000Ei\\u0019)f\\u000E\\u0008f\\u001D\\u0003g\\u0017\\u0005f/\\u0012e. g\\t)i\\u0019$d:\\u0006h)\\u0015h+\\u0016g\\u0016>g\\u0017\\u0005e\\u000F\\nf\\u00176f1\\u0002h4-g+\\u0019g\\u00029e\\u0004?g+%f/\\u000Fe$)d8-e$.h.$h/\\u0006f/\\u000Fd8*e$)f4%e-\\u0017d=\\u0013e\\u000F0g\\u0001#g;4f\\n$f\\u001C,i!5d8*f\\u0000'e.\\u0018f\\u00169e88h'\\u0001g\\u001B8f\\u001C:f\\u0008\\u0018g\\u0015%e:\\u0014e=\\u0013e>\\u000Be8\\u0008f\\u00169d>?f !e\\u001B-h\\u0002!e8\\u0002f\\u0008?e1\\u000Bf \\u000Fg\\u001B.e\\u0011\\u0018e7%e/<h\\u00074g*\\u0001g\\u00046i\\u0001\\u0013e\\u00057f\\u001C,g=\\u0011g;\\u0013e\\u0010\\u0008f!#f!\\u0008e\\n3e\\n(e\\u000F&e$\\u0016g>\\u000Ee\\u0005\\u0003e<\\u0015h57f\\u00149e\\u000F\\u0018g,,e\\u001B\\u001Bd<\\u001Ah.!h**f\\u0018\\u000Ei\\u001A\\u0010g'\\u0001e.\\u001De.\\u001Dh'\\u0004h\\u000C\\u0003f6\\u0008h49e\\u00051e\\u0010\\u000Ce?\\u0018h.0d=\\u0013g3;e8&f\\u001D%e\\u0010\\re-\\u0017g\\u0019<h!(e<\\u0000f\\u0014>e\\n g\\u001B\\u001Fe\\u000F\\u0017e\\u00080d:\\u000Cf\\t\\u000Be$'i\\u0007\\u000Ff\\u0008\\u0010d::f\\u00150i\\u0007\\u000Fe\\u00051d:+e\\u000C:e\\u001F\\u001Fe%3e-)e\\u000E\\u001Fe\\u0008\\u0019f\\t\\u0000e\\u001C(g;\\u0013f\\u001D\\u001Fi\\u0000\\u001Ad?!h6\\u0005g:'i\\u0005\\rg=.e=\\u0013f\\u00176d<\\u0018g'\\u0000f\\u0000'f\\u0004\\u001Ff\\u0008?d:'i\\u0001\\nf\\u00082e\\u0007:e\\u000F#f\\u000F\\u0010d:$e01d8\\u001Ad?\\u001De\\u0001%g(\\u000Be:&e\\u000F\\u0002f\\u00150d:\\u000Bd8\\u001Af\\u00154d8*e11d8\\u001Cf\\u0003\\u0005f\\u0004\\u001Fg\\t9f.\\ne\\u0008\\u0006i!\\u001Ef\\u0010\\u001Ce0\\u000Be1\\u001Ed:\\u000Ei\\u0017(f\\u00087h4\\\"e\\n!e#0i\\u001F3e\\u000F\\ne\\u00056h4\\\"g;\\u000Fe\\u001D\\u001Af\\u000C\\u0001e92i\\u0003(f\\u0008\\u0010g+\\u000Be\\u0008)g\\u001B\\nh\\u0000\\u0003h\\u0019\\u0011f\\u0008\\u0010i\\u0003=e\\u000C\\u0005h#\\u0005g\\u0014(f\\u00086f/\\u0014h5\\u001Bf\\u0016\\u0007f\\u0018\\u000Ef\\u000B\\u001Be\\u0015\\u0006e.\\u000Cf\\u00154g\\u001C\\u001Ff\\u0018/g\\u001C<g\\u001D\\u001Bd<\\u0019d<4e(\\u0001f\\u001C\\u001Bi\\\"\\u0006e\\u001F\\u001Fe\\r+g\\u0014\\u001Fd<\\u0018f\\u0003 h+\\u0016e#\\u0007e\\u0005,e\\u00051h\\t/e%=e\\u0005\\u0005e\\u0008\\u0006g,&e\\u0010\\u0008i\\u0019\\u0004d;6g\\t9g\\u00029d8\\re\\u000F/h\\u000B1f\\u0016\\u0007h5\\u0004d:'f 9f\\u001C,f\\u0018\\u000Ef\\u0018>e/\\u0006g\\\"<e\\u0005,d<\\u0017f0\\u0011f\\u0017\\u000Ff\\u001B4e\\n d:+e\\u000F\\u0017e\\u0010\\u000Ce-&e\\u0010/e\\n(i\\u0000\\u0002e\\u0010\\u0008e\\u000E\\u001Ff\\u001D%i\\u0017.g-\\u0014f\\u001C,f\\u0016\\u0007g>\\u000Ei#\\u001Fg;?h\\t2g(3e.\\u001Ag;\\u0008d:\\u000Eg\\u0014\\u001Fg\\t)d>\\u001Bf1\\u0002f\\u0010\\u001Cg\\u000B\\u0010e\\n\\u001Bi\\u0007\\u000Fd8%i\\u0007\\rf08h?\\u001Ce\\u0006\\u0019g\\u001C\\u001Ff\\u001C\\ti\\u0019\\u0010g+\\u001Ed:\\te/9h1!h49g\\u0014(d8\\re%=g;\\u001De/9e\\r\\u0001e\\u0008\\u0006d?\\u0003h?\\u001Bg\\u00029h/\\u0004e=1i\\u001F3d<\\u0018e\\n?d8\\re0\\u0011f,#h5\\u000Fe96d8\\u0014f\\u001C\\tg\\u00029f\\u00169e\\u0010\\u0011e\\u0005(f\\u00160d?!g\\u0014(h.>f\\u0016=e=\\\"h1!h5\\u0004f <g*\\u0001g 4i\\u001A\\u000Fg\\u001D\\u0000i\\u0007\\re$'d:\\u000Ef\\u0018/f/\\u0015d8\\u001Af\\u0019:h\\u0003=e\\u000C\\u0016e7%e.\\u000Cg>\\u000Ee\\u0015\\u0006e\\u001F\\u000Eg;\\u001Fd8\\u0000e\\u0007:g\\t\\u0008f\\t\\u0013i\\u0000 g\\u0014\\\"e\\u0013\\u0001f&\\u0002e\\u00065g\\u0014(d:\\u000Ed?\\u001Dg\\u0015\\u0019e\\u001B g4 d8-e\\u001C\\u000Be-\\u0018e\\u0002(h44e\\u001B>f\\u001C\\u0000f\\u0004\\u001Bi\\u0015?f\\u001C\\u001Fe\\u000F#d;7g\\u0010\\u0006h4\\\"e\\u001F:e\\u001C0e.\\tf\\u000E\\u0012f-&f1\\ti\\u0007\\u000Ci\\u001D\\\"e\\u0008\\u001Be;:e$)g):i&\\u0016e\\u0005\\u0008e.\\u000Ce\\u0016\\u0004i)1e\\n(d8\\u000Bi\\u001D\\\"d8\\re\\u0006\\rh/\\u001Ad?!f\\u0004\\u000Fd9\\ti\\u00183e\\u0005\\th\\u000B1e\\u001B=f<\\u0002d:.e\\u0006\\u001Bd:\\u000Bg\\u000E)e.6g>$d<\\u0017e\\u0006\\u001Cf0\\u0011e\\r3e\\u000F/e\\u0010\\rg(1e.6e\\u00057e\\n(g\\u0014;f\\u00033e\\u00080f3(f\\u0018\\u000Ee0\\u000Fe-&f\\u0000'h\\u0003=h\\u0000\\u0003g \\u0014g!,d;6h'\\u0002g\\u001C\\u000Bf8\\u0005f%\\u001Af\\u0010\\u001Eg,\\u0011i&\\u0016i \\u0001i;\\u0004i\\u0007\\u0011i\\u0000\\u0002g\\u0014(f1\\u001Fh\\u000B\\u000Fg\\u001C\\u001Fe.\\u001Ed8;g.!i\\u00186f.5h(;e\\u0006\\ng?;h/\\u0011f\\u001D\\u0003e\\u0008)e\\u0001\\u001Ae%=d<<d9\\u000Ei\\u0000\\u001Ah./f\\u0016=e7%g\\u000B\\u0000f\\u0005\\u000Bd9\\u001Fh.8g\\u000E/d?\\u001De\\u001F9e\\u0005;f&\\u0002e?5e$'e\\u001E\\u000Bf\\u001C:g%(g\\u0010\\u0006h'#e\\u000C?e\\u0010\\rcuandoenviarmadridbuscariniciotiempoporquecuentaestadopuedenjuegoscontraestC!nnombretienenperfilmaneraamigosciudadcentroaunquepuedesdentroprimerpreciosegC:nbuenosvolverpuntossemanahabC-aagostonuevosunidoscarlosequiponiC1osmuchosalgunacorreoimagenpartirarribamarC-ahombreempleoverdadcambiomuchasfueronpasadolC-neaparecenuevascursosestabaquierolibroscuantoaccesomiguelvarioscuatrotienesgruposserC!neuropamediosfrenteacercademC!sofertacochesmodeloitalialetrasalgC:ncompracualesexistecuerposiendoprensallegarviajesdineromurciapodrC!puestodiariopuebloquieremanuelpropiocrisisciertoseguromuertefuentecerrargrandeefectopartesmedidapropiaofrecetierrae-mailvariasformasfuturoobjetoseguirriesgonormasmismosC:nicocaminositiosrazC3ndebidopruebatoledotenC-ajesC:sesperococinaorigentiendacientocC!dizhablarserC-alatinafuerzaestiloguerraentrarC)xitolC3pezagendavC-deoevitarpaginametrosjavierpadresfC!cilcabezaC!reassalidaenvC-ojapC3nabusosbienestextosllevarpuedanfuertecomC:nclaseshumanotenidobilbaounidadestC!seditarcreadoP4P;Q\\u000FQ\\u0007Q\\u0002P>P:P0P:P8P;P8Q\\rQ\\u0002P>P2Q\\u0001P5P5P3P>P?Q\\u0000P8Q\\u0002P0P:P5Q\\tP5Q\\u0003P6P5P\\u001AP0P:P1P5P7P1Q\\u000BP;P>P=P8P\\u0012Q\\u0001P5P?P>P4P-Q\\u0002P>Q\\u0002P>P<Q\\u0007P5P<P=P5Q\\u0002P;P5Q\\u0002Q\\u0000P0P7P>P=P0P3P4P5P<P=P5P\\u0014P;Q\\u000FP\\u001FQ\\u0000P8P=P0Q\\u0001P=P8Q\\u0005Q\\u0002P5P<P:Q\\u0002P>P3P>P4P2P>Q\\u0002Q\\u0002P0P<P!P(P\\u0010P<P0Q\\u000FP'Q\\u0002P>P2P0Q\\u0001P2P0P<P5P<Q\\u0003P\\\"P0P:P4P2P0P=P0P<Q\\rQ\\u0002P8Q\\rQ\\u0002Q\\u0003P\\u0012P0P<Q\\u0002P5Q\\u0005P?Q\\u0000P>Q\\u0002Q\\u0003Q\\u0002P=P0P4P4P=Q\\u000FP\\u0012P>Q\\u0002Q\\u0002Q\\u0000P8P=P5P9P\\u0012P0Q\\u0001P=P8P<Q\\u0001P0P<Q\\u0002P>Q\\u0002Q\\u0000Q\\u0003P1P\\u001EP=P8P<P8Q\\u0000P=P5P5P\\u001EP\\u001EP\\u001EP;P8Q\\u0006Q\\rQ\\u0002P0P\\u001EP=P0P=P5P<P4P>P<P<P>P9P4P2P5P>P=P>Q\\u0001Q\\u0003P4`$\\u0015`%\\u0007`$9`%\\u0008`$\\u0015`%\\u0000`$8`%\\u0007`$\\u0015`$>`$\\u0015`%\\u000B`$\\u0014`$0`$*`$0`$(`%\\u0007`$\\u000F`$\\u0015`$\\u0015`$?`$-`%\\u0000`$\\u0007`$8`$\\u0015`$0`$$`%\\u000B`$9`%\\u000B`$\\u0006`$*`$9`%\\u0000`$/`$9`$/`$>`$$`$\\u0015`$%`$>jagran`$\\u0006`$\\u001C`$\\u001C`%\\u000B`$\\u0005`$,`$&`%\\u000B`$\\u0017`$\\u0008`$\\u001C`$>`$\\u0017`$\\u000F`$9`$.`$\\u0007`$(`$5`$9`$/`%\\u0007`$%`%\\u0007`$%`%\\u0000`$\\u0018`$0`$\\u001C`$,`$&`%\\u0000`$\\u0015`$\\u0008`$\\u001C`%\\u0000`$5`%\\u0007`$(`$\\u0008`$(`$\\u000F`$9`$0`$\\t`$8`$.`%\\u0007`$\\u0015`$.`$5`%\\u000B`$2`%\\u0007`$8`$,`$.`$\\u0008`$&`%\\u0007`$\\u0013`$0`$\\u0006`$.`$,`$8`$-`$0`$,`$(`$\\u001A`$2`$.`$(`$\\u0006`$\\u0017`$8`%\\u0000`$2`%\\u0000X9Y\\u0004Y\\tX%Y\\u0004Y\\tY\\u0007X0X'X\\\"X.X1X9X/X/X'Y\\u0004Y\\tY\\u0007X0Y\\u0007X5Y\\u0008X1X:Y\\nX1Y\\u0003X'Y\\u0006Y\\u0008Y\\u0004X'X(Y\\nY\\u0006X9X1X6X0Y\\u0004Y\\u0003Y\\u0007Y\\u0006X'Y\\nY\\u0008Y\\u0005Y\\u0002X'Y\\u0004X9Y\\u0004Y\\nX'Y\\u0006X'Y\\u0004Y\\u0003Y\\u0006X-X*Y\\tY\\u0002X(Y\\u0004Y\\u0008X-X)X'X.X1Y\\u0001Y\\u0002X7X9X(X/X1Y\\u0003Y\\u0006X%X0X'Y\\u0003Y\\u0005X'X'X-X/X%Y\\u0004X'Y\\u0001Y\\nY\\u0007X(X9X6Y\\u0003Y\\nY\\u0001X(X-X+Y\\u0008Y\\u0005Y\\u0006Y\\u0008Y\\u0007Y\\u0008X#Y\\u0006X'X,X/X'Y\\u0004Y\\u0007X'X3Y\\u0004Y\\u0005X9Y\\u0006X/Y\\u0004Y\\nX3X9X(X1X5Y\\u0004Y\\tY\\u0005Y\\u0006X0X(Y\\u0007X'X#Y\\u0006Y\\u0007Y\\u0005X+Y\\u0004Y\\u0003Y\\u0006X*X'Y\\u0004X'X-Y\\nX+Y\\u0005X5X1X4X1X-X-Y\\u0008Y\\u0004Y\\u0008Y\\u0001Y\\nX'X0X'Y\\u0004Y\\u0003Y\\u0004Y\\u0005X1X)X'Y\\u0006X*X'Y\\u0004Y\\u0001X#X(Y\\u0008X.X'X5X#Y\\u0006X*X'Y\\u0006Y\\u0007X'Y\\u0004Y\\nX9X6Y\\u0008Y\\u0008Y\\u0002X/X'X(Y\\u0006X.Y\\nX1X(Y\\u0006X*Y\\u0004Y\\u0003Y\\u0005X4X'X!Y\\u0008Y\\u0007Y\\nX'X(Y\\u0008Y\\u0002X5X5Y\\u0008Y\\u0005X'X1Y\\u0002Y\\u0005X#X-X/Y\\u0006X-Y\\u0006X9X/Y\\u0005X1X#Y\\nX'X-X)Y\\u0003X*X(X/Y\\u0008Y\\u0006Y\\nX,X(Y\\u0005Y\\u0006Y\\u0007X*X-X*X,Y\\u0007X)X3Y\\u0006X)Y\\nX*Y\\u0005Y\\u0003X1X)X:X2X)Y\\u0006Y\\u0001X3X(Y\\nX*Y\\u0004Y\\u0004Y\\u0007Y\\u0004Y\\u0006X'X*Y\\u0004Y\\u0003Y\\u0002Y\\u0004X(Y\\u0004Y\\u0005X'X9Y\\u0006Y\\u0007X#Y\\u0008Y\\u0004X4Y\\nX!Y\\u0006Y\\u0008X1X#Y\\u0005X'Y\\u0001Y\\nY\\u0003X(Y\\u0003Y\\u0004X0X'X*X1X*X(X(X#Y\\u0006Y\\u0007Y\\u0005X3X'Y\\u0006Y\\u0003X(Y\\nX9Y\\u0001Y\\u0002X/X-X3Y\\u0006Y\\u0004Y\\u0007Y\\u0005X4X9X1X#Y\\u0007Y\\u0004X4Y\\u0007X1Y\\u0002X7X1X7Y\\u0004X(profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashion<title>countryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture&quot;,journalprojectsurfaces&quot;expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\\r\\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular &amp; animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&amp;History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit&lt;!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle=\\\"Mobile killingshowingItaliandroppedheavilyeffects-1']);\\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,&quot;animatefeelingarrivedpassingnaturalroughly.\\n\\nThe but notdensityBritainChineselack oftributeIreland\\\" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang=\\\"return leadersplannedpremiumpackageAmericaEdition]&quot;Messageneed tovalue=\\\"complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling.&quot;AccountEdward segmentRobert effortsPacificlearnedup withheight:we haveAngelesnations_searchappliedacquiremassivegranted: falsetreatedbiggestbenefitdrivingStudiesminimumperhapsmorningsellingis usedreversevariant role=\\\"missingachievepromotestudentsomeoneextremerestorebottom:evolvedall thesitemapenglishway to  AugustsymbolsCompanymattersmusicalagainstserving})();\\r\\npaymenttroubleconceptcompareparentsplayersregionsmonitor ''The winningexploreadaptedGalleryproduceabilityenhancecareers). The collectSearch ancientexistedfooter handlerprintedconsoleEasternexportswindowsChannelillegalneutralsuggest_headersigning.html\\\">settledwesterncausing-webkitclaimedJusticechaptervictimsThomas mozillapromisepartieseditionoutside:false,hundredOlympic_buttonauthorsreachedchronicdemandssecondsprotectadoptedprepareneithergreatlygreateroverallimprovecommandspecialsearch.worshipfundingthoughthighestinsteadutilityquarterCulturetestingclearlyexposedBrowserliberal} catchProjectexamplehide();FloridaanswersallowedEmperordefenseseriousfreedomSeveral-buttonFurtherout of != nulltrainedDenmarkvoid(0)/all.jspreventRequestStephen\\n\\nWhen observe</h2>\\r\\nModern provide\\\" alt=\\\"borders.\\n\\nFor \\n\\nMany artistspoweredperformfictiontype ofmedicalticketsopposedCouncilwitnessjusticeGeorge Belgium...</a>twitternotablywaitingwarfare Other rankingphrasesmentionsurvivescholar</p>\\r\\n Countryignoredloss ofjust asGeorgiastrange<head><stopped1']);\\r\\nislandsnotableborder:list ofcarried100,000</h3>\\n severalbecomesselect wedding00.htmlmonarchoff theteacherhighly biologylife ofor evenrise of&raquo;plusonehunting(thoughDouglasjoiningcirclesFor theAncientVietnamvehiclesuch ascrystalvalue =Windowsenjoyeda smallassumed<a id=\\\"foreign All rihow theDisplayretiredhoweverhidden;battlesseekingcabinetwas notlook atconductget theJanuaryhappensturninga:hoverOnline French lackingtypicalextractenemieseven ifgeneratdecidedare not/searchbeliefs-image:locatedstatic.login\\\">convertviolententeredfirst\\\">circuitFinlandchemistshe was10px;\\\">as suchdivided</span>will beline ofa greatmystery/index.fallingdue to railwaycollegemonsterdescentit withnuclearJewish protestBritishflowerspredictreformsbutton who waslectureinstantsuicidegenericperiodsmarketsSocial fishingcombinegraphicwinners<br /><by the NaturalPrivacycookiesoutcomeresolveSwedishbrieflyPersianso muchCenturydepictscolumnshousingscriptsnext tobearingmappingrevisedjQuery(-width:title\\\">tooltipSectiondesignsTurkishyounger.match(})();\\n\\nburningoperatedegreessource=Richardcloselyplasticentries</tr>\\r\\ncolor:#ul id=\\\"possessrollingphysicsfailingexecutecontestlink toDefault<br />\\n: true,chartertourismclassicproceedexplain</h1>\\r\\nonline.?xml vehelpingdiamonduse theairlineend -->).attr(readershosting#ffffffrealizeVincentsignals src=\\\"/ProductdespitediversetellingPublic held inJoseph theatreaffects<style>a largedoesn'tlater, ElementfaviconcreatorHungaryAirportsee theso thatMichaelSystemsPrograms, and  width=e&quot;tradingleft\\\">\\npersonsGolden Affairsgrammarformingdestroyidea ofcase ofoldest this is.src = cartoonregistrCommonsMuslimsWhat isin manymarkingrevealsIndeed,equally/show_aoutdoorescape(Austriageneticsystem,In the sittingHe alsoIslandsAcademy\\n\\t\\t<!--Daniel bindingblock\\\">imposedutilizeAbraham(except{width:putting).html(|| [];\\nDATA[ *kitchenmountedactual dialectmainly _blank'installexpertsif(typeIt also&copy; \\\">Termsborn inOptionseasterntalkingconcerngained ongoingjustifycriticsfactoryits ownassaultinvitedlastinghis ownhref=\\\"/\\\" rel=\\\"developconcertdiagramdollarsclusterphp?id=alcohol);})();using a><span>vesselsrevivalAddressamateurandroidallegedillnesswalkingcentersqualifymatchesunifiedextinctDefensedied in\\n\\t<!-- customslinkingLittle Book ofeveningmin.js?are thekontakttoday's.html\\\" target=wearingAll Rig;\\n})();raising Also, crucialabout\\\">declare-->\\n<scfirefoxas muchappliesindex, s, but type = \\n\\r\\n<!--towardsRecordsPrivateForeignPremierchoicesVirtualreturnsCommentPoweredinline;povertychamberLiving volumesAnthonylogin\\\" RelatedEconomyreachescuttinggravitylife inChapter-shadowNotable</td>\\r\\n returnstadiumwidgetsvaryingtravelsheld bywho arework infacultyangularwho hadairporttown of\\n\\nSome 'click'chargeskeywordit willcity of(this);Andrew unique checkedor more300px; return;rsion=\\\"pluginswithin herselfStationFederalventurepublishsent totensionactresscome tofingersDuke ofpeople,exploitwhat isharmonya major\\\":\\\"httpin his menu\\\">\\nmonthlyofficercouncilgainingeven inSummarydate ofloyaltyfitnessand wasemperorsupremeSecond hearingRussianlongestAlbertalateralset of small\\\">.appenddo withfederalbank ofbeneathDespiteCapitalgrounds), and percentit fromclosingcontainInsteadfifteenas well.yahoo.respondfighterobscurereflectorganic= Math.editingonline paddinga wholeonerroryear ofend of barrierwhen itheader home ofresumedrenamedstrong>heatingretainscloudfrway of March 1knowingin partBetweenlessonsclosestvirtuallinks\\\">crossedEND -->famous awardedLicenseHealth fairly wealthyminimalAfricancompetelabel\\\">singingfarmersBrasil)discussreplaceGregoryfont copursuedappearsmake uproundedboth ofblockedsaw theofficescoloursif(docuwhen heenforcepush(fuAugust UTF-8\\\">Fantasyin mostinjuredUsuallyfarmingclosureobject defenceuse of Medical<body>\\nevidentbe usedkeyCodesixteenIslamic#000000entire widely active (typeofone cancolor =speakerextendsPhysicsterrain<tbody>funeralviewingmiddle cricketprophetshifteddoctorsRussell targetcompactalgebrasocial-bulk ofman and</td>\\n he left).val()false);logicalbankinghome tonaming Arizonacredits);\\n});\\nfounderin turnCollinsbefore But thechargedTitle\\\">CaptainspelledgoddessTag -->Adding:but wasRecent patientback in=false&Lincolnwe knowCounterJudaismscript altered']);\\n  has theunclearEvent',both innot all\\n\\n<!-- placinghard to centersort ofclientsstreetsBernardassertstend tofantasydown inharbourFreedomjewelry/about..searchlegendsis mademodern only ononly toimage\\\" linear painterand notrarely acronymdelivershorter00&amp;as manywidth=\\\"/* <![Ctitle =of the lowest picked escapeduses ofpeoples PublicMatthewtacticsdamagedway forlaws ofeasy to windowstrong  simple}catch(seventhinfoboxwent topaintedcitizenI don'tretreat. Some ww.\\\");\\nbombingmailto:made in. Many carries||{};wiwork ofsynonymdefeatsfavoredopticalpageTraunless sendingleft\\\"><comScorAll thejQuery.touristClassicfalse\\\" Wilhelmsuburbsgenuinebishops.split(global followsbody ofnominalContactsecularleft tochiefly-hidden-banner</li>\\n\\n. When in bothdismissExplorealways via thespaC1olwelfareruling arrangecaptainhis sonrule ofhe tookitself,=0&amp;(calledsamplesto makecom/pagMartin Kennedyacceptsfull ofhandledBesides//--></able totargetsessencehim to its by common.mineralto takeways tos.org/ladvisedpenaltysimple:if theyLettersa shortHerbertstrikes groups.lengthflightsoverlapslowly lesser social </p>\\n\\t\\tit intoranked rate oful>\\r\\n  attemptpair ofmake itKontaktAntoniohaving ratings activestreamstrapped\\\").css(hostilelead tolittle groups,Picture-->\\r\\n\\r\\n rows=\\\" objectinverse<footerCustomV><\\\\/scrsolvingChamberslaverywoundedwhereas!= 'undfor allpartly -right:Arabianbacked centuryunit ofmobile-Europe,is homerisk ofdesiredClintoncost ofage of become none ofp&quot;Middle ead')[0Criticsstudios>&copy;group\\\">assemblmaking pressedwidget.ps:\\\" ? rebuiltby someFormer editorsdelayedCanonichad thepushingclass=\\\"but arepartialBabylonbottom carrierCommandits useAs withcoursesa thirddenotesalso inHouston20px;\\\">accuseddouble goal ofFamous ).bind(priests Onlinein Julyst + \\\"gconsultdecimalhelpfulrevivedis veryr'+'iptlosing femalesis alsostringsdays ofarrivalfuture <objectforcingString(\\\" />\\n\\t\\there isencoded.  The balloondone by/commonbgcolorlaw of Indianaavoidedbut the2px 3pxjquery.after apolicy.men andfooter-= true;for usescreen.Indian image =family,http:// &nbsp;driverseternalsame asnoticedviewers})();\\n is moreseasonsformer the newis justconsent Searchwas thewhy theshippedbr><br>width: height=made ofcuisineis thata very Admiral fixed;normal MissionPress, ontariocharsettry to invaded=\\\"true\\\"spacingis mosta more totallyfall of});\\r\\n  immensetime inset outsatisfyto finddown tolot of Playersin Junequantumnot thetime todistantFinnishsrc = (single help ofGerman law andlabeledforestscookingspace\\\">header-well asStanleybridges/globalCroatia About [0];\\n  it, andgroupedbeing a){throwhe madelighterethicalFFFFFF\\\"bottom\\\"like a employslive inas seenprintermost ofub-linkrejectsand useimage\\\">succeedfeedingNuclearinformato helpWomen'sNeitherMexicanprotein<table by manyhealthylawsuitdevised.push({sellerssimply Through.cookie Image(older\\\">us.js\\\"> Since universlarger open to!-- endlies in']);\\r\\n  marketwho is (\\\"DOMComanagedone fortypeof Kingdomprofitsproposeto showcenter;made itdressedwere inmixtureprecisearisingsrc = 'make a securedBaptistvoting \\n\\t\\tvar March 2grew upClimate.removeskilledway the</head>face ofacting right\\\">to workreduceshas haderectedshow();action=book ofan area== \\\"htt<header\\n<html>conformfacing cookie.rely onhosted .customhe wentbut forspread Family a meansout theforums.footage\\\">MobilClements\\\" id=\\\"as highintense--><!--female is seenimpliedset thea stateand hisfastestbesidesbutton_bounded\\\"><img Infoboxevents,a youngand areNative cheaperTimeoutand hasengineswon the(mostlyright: find a -bottomPrince area ofmore ofsearch_nature,legallyperiod,land ofor withinducedprovingmissilelocallyAgainstthe wayk&quot;px;\\\">\\r\\npushed abandonnumeralCertainIn thismore inor somename isand, incrownedISBN 0-createsOctobermay notcenter late inDefenceenactedwish tobroadlycoolingonload=it. TherecoverMembersheight assumes<html>\\npeople.in one =windowfooter_a good reklamaothers,to this_cookiepanel\\\">London,definescrushedbaptismcoastalstatus title\\\" move tolost inbetter impliesrivalryservers SystemPerhapses and contendflowinglasted rise inGenesisview ofrising seem tobut in backinghe willgiven agiving cities.flow of Later all butHighwayonly bysign ofhe doesdiffersbattery&amp;lasinglesthreatsintegertake onrefusedcalled =US&ampSee thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\\r\\nAtlantanucleusCounty,purely count\\\">easily build aonclicka givenpointerh&quot;events else {\\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m&quot;renewedDetroitamongsteither them inSenatorUs</a><King ofFrancis-produche usedart andhim andused byscoringat hometo haverelatesibilityfactionBuffalolink\\\"><what hefree toCity ofcome insectorscountedone daynervoussquare };if(goin whatimg\\\" alis onlysearch/tuesdaylooselySolomonsexual - <a hrmedium\\\"DO NOT France,with a war andsecond take a >\\r\\n\\r\\n\\r\\nmarket.highwaydone inctivity\\\"last\\\">obligedrise to\\\"undefimade to Early praisedin its for hisathleteJupiterYahoo! termed so manyreally s. The a woman?value=direct right\\\" bicycleacing=\\\"day andstatingRather,higher Office are nowtimes, when a pay foron this-link\\\">;borderaround annual the Newput the.com\\\" takin toa brief(in thegroups.; widthenzymessimple in late{returntherapya pointbanninginks\\\">\\n();\\\" rea place\\\\u003Caabout atr>\\r\\n\\t\\tccount gives a<SCRIPTRailwaythemes/toolboxById(\\\"xhumans,watchesin some if (wicoming formats Under but hashanded made bythan infear ofdenoted/iframeleft involtagein eacha&quot;base ofIn manyundergoregimesaction </p>\\r\\n<ustomVa;&gt;</importsor thatmostly &amp;re size=\\\"</a></ha classpassiveHost = WhetherfertileVarious=[];(fucameras/></td>acts asIn some>\\r\\n\\r\\n<!organis <br />BeijingcatalC deutscheuropeueuskaragaeilgesvenskaespaC1amensajeusuariotrabajomC)xicopC!ginasiempresistemaoctubreduranteaC1adirempresamomentonuestroprimeratravC)sgraciasnuestraprocesoestadoscalidadpersonanC:meroacuerdomC:sicamiembroofertasalgunospaC-sesejemploderechoademC!sprivadoagregarenlacesposiblehotelessevillaprimeroC:ltimoeventosarchivoculturamujeresentradaanuncioembargomercadograndesestudiomejoresfebrerodiseC1oturismocC3digoportadaespaciofamiliaantoniopermiteguardaralgunaspreciosalguiensentidovisitastC-tuloconocersegundoconsejofranciaminutossegundatenemosefectosmC!lagasesiC3nrevistagranadacompraringresogarcC-aacciC3necuadorquienesinclusodeberC!materiahombresmuestrapodrC-amaC1anaC:ltimaestamosoficialtambienningC:nsaludospodemosmejorarpositionbusinesshomepagesecuritylanguagestandardcampaignfeaturescategoryexternalchildrenreservedresearchexchangefavoritetemplatemilitaryindustryservicesmaterialproductsz-index:commentssoftwarecompletecalendarplatformarticlesrequiredmovementquestionbuildingpoliticspossiblereligionphysicalfeedbackregisterpicturesdisabledprotocolaudiencesettingsactivityelementslearninganythingabstractprogressoverviewmagazineeconomictrainingpressurevarious <strong>propertyshoppingtogetheradvancedbehaviordownloadfeaturedfootballselectedLanguagedistanceremembertrackingpasswordmodifiedstudentsdirectlyfightingnortherndatabasefestivalbreakinglocationinternetdropdownpracticeevidencefunctionmarriageresponseproblemsnegativeprogramsanalysisreleasedbanner\\\">purchasepoliciesregionalcreativeargumentbookmarkreferrerchemicaldivisioncallbackseparateprojectsconflicthardwareinterestdeliverymountainobtained= false;for(var acceptedcapacitycomputeridentityaircraftemployedproposeddomesticincludesprovidedhospitalverticalcollapseapproachpartnerslogo\\\"><adaughterauthor\\\" culturalfamilies/images/assemblypowerfulteachingfinisheddistrictcriticalcgi-bin/purposesrequireselectionbecomingprovidesacademicexerciseactuallymedicineconstantaccidentMagazinedocumentstartingbottom\\\">observed: &quot;extendedpreviousSoftwarecustomerdecisionstrengthdetailedslightlyplanningtextareacurrencyeveryonestraighttransferpositiveproducedheritageshippingabsolutereceivedrelevantbutton\\\" violenceanywherebenefitslaunchedrecentlyalliancefollowedmultiplebulletinincludedoccurredinternal$(this).republic><tr><tdcongressrecordedultimatesolution<ul id=\\\"discoverHome</a>websitesnetworksalthoughentirelymemorialmessagescontinueactive\\\">somewhatvictoriaWestern  title=\\\"LocationcontractvisitorsDownloadwithout right\\\">\\nmeasureswidth = variableinvolvedvirginianormallyhappenedaccountsstandingnationalRegisterpreparedcontrolsaccuratebirthdaystrategyofficialgraphicscriminalpossiblyconsumerPersonalspeakingvalidateachieved.jpg\\\" />machines</h2>\\n  keywordsfriendlybrotherscombinedoriginalcomposedexpectedadequatepakistanfollow\\\" valuable</label>relativebringingincreasegovernorplugins/List of Header\\\">\\\" name=\\\" (&quot;graduate</head>\\ncommercemalaysiadirectormaintain;height:schedulechangingback to catholicpatternscolor: #greatestsuppliesreliable</ul>\\n\\t\\t<select citizensclothingwatching<li id=\\\"specificcarryingsentence<center>contrastthinkingcatch(e)southernMichael merchantcarouselpadding:interior.split(\\\"lizationOctober ){returnimproved--&gt;\\n\\ncoveragechairman.png\\\" />subjectsRichard whateverprobablyrecoverybaseballjudgmentconnect..css\\\" /> websitereporteddefault\\\"/></a>\\r\\nelectricscotlandcreationquantity. ISBN 0did not instance-search-\\\" lang=\\\"speakersComputercontainsarchivesministerreactiondiscountItalianocriteriastrongly: 'http:'script'coveringofferingappearedBritish identifyFacebooknumerousvehiclesconcernsAmericanhandlingdiv id=\\\"William provider_contentaccuracysection andersonflexibleCategorylawrence<script>layout=\\\"approved maximumheader\\\"></table>Serviceshamiltoncurrent canadianchannels/themes//articleoptionalportugalvalue=\\\"\\\"intervalwirelessentitledagenciesSearch\\\" measuredthousandspending&hellip;new Date\\\" size=\\\"pageNamemiddle\\\" \\\" /></a>hidden\\\">sequencepersonaloverflowopinionsillinoislinks\\\">\\n\\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal=\\\"false\\\"EspaC1olreleasessubmit\\\" er&quot;additionsymptomsorientedresourceright\\\"><pleasurestationshistory.leaving  border=contentscenter\\\">.\\n\\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal\\\"><span>search\\\">operatorrequestsa &quot;allowingDocumentrevision. \\n\\nThe yourselfContact michiganEnglish columbiapriorityprintingdrinkingfacilityreturnedContent officersRussian generate-8859-1\\\"indicatefamiliar qualitymargin:0 contentviewportcontacts-title\\\">portable.length eligibleinvolvesatlanticonload=\\\"default.suppliedpaymentsglossary\\n\\nAfter guidance</td><tdencodingmiddle\\\">came to displaysscottishjonathanmajoritywidgets.clinicalthailandteachers<head>\\n\\taffectedsupportspointer;toString</small>oklahomawill be investor0\\\" alt=\\\"holidaysResourcelicensed (which . After considervisitingexplorerprimary search\\\" android\\\"quickly meetingsestimate;return ;color:# height=approval, &quot; checked.min.js\\\"magnetic></a></hforecast. While thursdaydvertise&eacute;hasClassevaluateorderingexistingpatients Online coloradoOptions\\\"campbell<!-- end</span><<br />\\r\\n_popups|sciences,&quot; quality Windows assignedheight: <b classle&quot; value=\\\" Companyexamples<iframe believespresentsmarshallpart of properly).\\n\\nThe taxonomymuch of </span>\\n\\\" data-srtuguC*sscrollTo project<head>\\r\\nattorneyemphasissponsorsfancyboxworld's wildlifechecked=sessionsprogrammpx;font- Projectjournalsbelievedvacationthompsonlightingand the special border=0checking</tbody><button Completeclearfix\\n<head>\\narticle <sectionfindingsrole in popular  Octoberwebsite exposureused to  changesoperatedclickingenteringcommandsinformed numbers  </div>creatingonSubmitmarylandcollegesanalyticlistingscontact.loggedInadvisorysiblingscontent\\\"s&quot;)s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.pngjapanesecodebasebutton\\\">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth=\\\"2lazyloadnovemberused in height=\\\"cript\\\">\\n&nbsp;</<tr><td height:2/productcountry include footer\\\" &lt;!-- title\\\"></jquery.</form>\\n(g.\\u0000d=\\u0013)(g9\\u0001i+\\u0014)hrvatskiitalianoromC\\\"nD\\u0003tC<rkC'eX'X1X/Y\\u0008tambiC)nnoticiasmensajespersonasderechosnacionalserviciocontactousuariosprogramagobiernoempresasanunciosvalenciacolombiadespuC)sdeportesproyectoproductopC:bliconosotroshistoriapresentemillonesmediantepreguntaanteriorrecursosproblemasantiagonuestrosopiniC3nimprimirmientrasamC)ricavendedorsociedadrespectorealizarregistropalabrasinterC)sentoncesespecialmiembrosrealidadcC3rdobazaragozapC!ginassocialesbloqueargestiC3nalquilersistemascienciascompletoversiC3ncompletaestudiospC:blicaobjetivoalicantebuscadorcantidadentradasaccionesarchivossuperiormayorC-aalemaniafunciC3nC:ltimoshaciendoaquellosediciC3nfernandoambientefacebooknuestrasclientesprocesosbastantepresentareportarcongresopublicarcomerciocontratojC3venesdistritotC)cnicaconjuntoenergC-atrabajarasturiasrecienteutilizarboletC-nsalvadorcorrectatrabajosprimerosnegocioslibertaddetallespantallaprC3ximoalmerC-aanimalesquiC)nescorazC3nsecciC3nbuscandoopcionesexteriorconceptotodavC-agalerC-aescribirmedicinalicenciaconsultaaspectoscrC-ticadC3laresjusticiadeberC!nperC-odonecesitamantenerpequeC1orecibidatribunaltenerifecanciC3ncanariasdescargadiversosmallorcarequieretC)cnicodeberC-aviviendafinanzasadelantefuncionaconsejosdifC-cilciudadesantiguasavanzadatC)rminounidadessC!nchezcampaC1asoftonicrevistascontienesectoresmomentosfacultadcrC)ditodiversassupuestofactoressegundospequeC1aP3P>P4P0P5Q\\u0001P;P8P5Q\\u0001Q\\u0002Q\\u000CP1Q\\u000BP;P>P1Q\\u000BQ\\u0002Q\\u000CQ\\rQ\\u0002P>P<P\\u0015Q\\u0001P;P8Q\\u0002P>P3P>P<P5P=Q\\u000FP2Q\\u0001P5Q\\u0005Q\\rQ\\u0002P>P9P4P0P6P5P1Q\\u000BP;P8P3P>P4Q\\u0003P4P5P=Q\\u000CQ\\rQ\\u0002P>Q\\u0002P1Q\\u000BP;P0Q\\u0001P5P1Q\\u000FP>P4P8P=Q\\u0001P5P1P5P=P0P4P>Q\\u0001P0P9Q\\u0002Q\\u0004P>Q\\u0002P>P=P5P3P>Q\\u0001P2P>P8Q\\u0001P2P>P9P8P3Q\\u0000Q\\u000BQ\\u0002P>P6P5P2Q\\u0001P5P<Q\\u0001P2P>Q\\u000EP;P8Q\\u0008Q\\u000CQ\\rQ\\u0002P8Q\\u0005P?P>P:P0P4P=P5P9P4P>P<P0P<P8Q\\u0000P0P;P8P1P>Q\\u0002P5P<Q\\u0003Q\\u0005P>Q\\u0002Q\\u000FP4P2Q\\u0003Q\\u0005Q\\u0001P5Q\\u0002P8P;Q\\u000EP4P8P4P5P;P>P<P8Q\\u0000P5Q\\u0002P5P1Q\\u000FQ\\u0001P2P>P5P2P8P4P5Q\\u0007P5P3P>Q\\rQ\\u0002P8P<Q\\u0001Q\\u0007P5Q\\u0002Q\\u0002P5P<Q\\u000BQ\\u0006P5P=Q\\u000BQ\\u0001Q\\u0002P0P;P2P5P4Q\\u000CQ\\u0002P5P<P5P2P>P4Q\\u000BQ\\u0002P5P1P5P2Q\\u000BQ\\u0008P5P=P0P<P8Q\\u0002P8P?P0Q\\u0002P>P<Q\\u0003P?Q\\u0000P0P2P;P8Q\\u0006P0P>P4P=P0P3P>P4Q\\u000BP7P=P0Q\\u000EP<P>P3Q\\u0003P4Q\\u0000Q\\u0003P3P2Q\\u0001P5P9P8P4P5Q\\u0002P:P8P=P>P>P4P=P>P4P5P;P0P4P5P;P5Q\\u0001Q\\u0000P>P:P8Q\\u000EP=Q\\u000FP2P5Q\\u0001Q\\u000CP\\u0015Q\\u0001Q\\u0002Q\\u000CQ\\u0000P0P7P0P=P0Q\\u0008P8X'Y\\u0004Y\\u0004Y\\u0007X'Y\\u0004X*Y\\nX,Y\\u0005Y\\nX9X.X'X5X)X'Y\\u0004X0Y\\nX9Y\\u0004Y\\nY\\u0007X,X/Y\\nX/X'Y\\u0004X\\\"Y\\u0006X'Y\\u0004X1X/X*X-Y\\u0003Y\\u0005X5Y\\u0001X-X)Y\\u0003X'Y\\u0006X*X'Y\\u0004Y\\u0004Y\\nY\\nY\\u0003Y\\u0008Y\\u0006X4X(Y\\u0003X)Y\\u0001Y\\nY\\u0007X'X(Y\\u0006X'X*X-Y\\u0008X'X!X#Y\\u0003X+X1X.Y\\u0004X'Y\\u0004X'Y\\u0004X-X(X/Y\\u0004Y\\nY\\u0004X/X1Y\\u0008X3X'X6X:X7X*Y\\u0003Y\\u0008Y\\u0006Y\\u0007Y\\u0006X'Y\\u0003X3X'X-X)Y\\u0006X'X/Y\\nX'Y\\u0004X7X(X9Y\\u0004Y\\nY\\u0003X4Y\\u0003X1X'Y\\nY\\u0005Y\\u0003Y\\u0006Y\\u0005Y\\u0006Y\\u0007X'X4X1Y\\u0003X)X1X&Y\\nX3Y\\u0006X4Y\\nX7Y\\u0005X'X0X'X'Y\\u0004Y\\u0001Y\\u0006X4X(X'X(X*X9X(X1X1X-Y\\u0005X)Y\\u0003X'Y\\u0001X)Y\\nY\\u0002Y\\u0008Y\\u0004Y\\u0005X1Y\\u0003X2Y\\u0003Y\\u0004Y\\u0005X)X#X-Y\\u0005X/Y\\u0002Y\\u0004X(Y\\nY\\nX9Y\\u0006Y\\nX5Y\\u0008X1X)X7X1Y\\nY\\u0002X4X'X1Y\\u0003X,Y\\u0008X'Y\\u0004X#X.X1Y\\tY\\u0005X9Y\\u0006X'X'X(X-X+X9X1Y\\u0008X6X(X4Y\\u0003Y\\u0004Y\\u0005X3X,Y\\u0004X(Y\\u0006X'Y\\u0006X.X'Y\\u0004X/Y\\u0003X*X'X(Y\\u0003Y\\u0004Y\\nX)X(X/Y\\u0008Y\\u0006X#Y\\nX6X'Y\\nY\\u0008X,X/Y\\u0001X1Y\\nY\\u0002Y\\u0003X*X(X*X#Y\\u0001X6Y\\u0004Y\\u0005X7X(X.X'Y\\u0003X+X1X(X'X1Y\\u0003X'Y\\u0001X6Y\\u0004X'X-Y\\u0004Y\\tY\\u0006Y\\u0001X3Y\\u0007X#Y\\nX'Y\\u0005X1X/Y\\u0008X/X#Y\\u0006Y\\u0007X'X/Y\\nY\\u0006X'X'Y\\u0004X'Y\\u0006Y\\u0005X9X1X6X*X9Y\\u0004Y\\u0005X/X'X.Y\\u0004Y\\u0005Y\\u0005Y\\u0003Y\\u0006\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0001\\u0000\\u0001\\u0000\\u0001\\u0000\\u0001\\u0000\\u0002\\u0000\\u0002\\u0000\\u0002\\u0000\\u0002\\u0000\\u0004\\u0000\\u0004\\u0000\\u0004\\u0000\\u0004\\u0000\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\u0007\\u0006\\u0005\\u0004\\u0003\\u0002\\u0001\\u0000\\u0008\\t\\n\\u000B\\u000C\\r\\u000E\\u000F\\u000F\\u000E\\r\\u000C\\u000B\\n\\t\\u0008\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0017\\u0016\\u0015\\u0014\\u0013\\u0012\\u0011\\u0010\\u0018\\u0019\\u001A\\u001B\\u001C\\u001D\\u001E\\u001F\\u001F\\u001E\\u001D\\u001C\\u001B\\u001A\\u0019\\u0018\\u007F\\u007F\\u007F\\u007F\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u0000\\u007F\\u007F\\u007F\\u007F\\u0001\\u0000\\u0000\\u0000\\u0002\\u0000\\u0000\\u0000\\u0002\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u0000\\u0003\\u0000\\u0000\\u0000\\u007F\\u007F\\u0000\\u0001\\u0000\\u0000\\u0000\\u0001\\u0000\\u0000\\u007F\\u007F\\u0000\\u0001\\u0000\\u0000\\u0000\\u0008\\u0000\\u0008\\u0000\\u0008\\u0000\\u0008\\u0000\\u0000\\u0000\\u0001\\u0000\\u0002\\u0000\\u0003\\u0000\\u0004\\u0000\\u0005\\u0000\\u0006\\u0000\\u0007resourcescountriesquestionsequipmentcommunityavailablehighlightDTD/xhtmlmarketingknowledgesomethingcontainerdirectionsubscribeadvertisecharacter\\\" value=\\\"</select>Australia\\\" class=\\\"situationauthorityfollowingprimarilyoperationchallengedevelopedanonymousfunction functionscompaniesstructureagreement\\\" title=\\\"potentialeducationargumentssecondarycopyrightlanguagesexclusivecondition</form>\\r\\nstatementattentionBiography} else {\\nsolutionswhen the Analyticstemplatesdangeroussatellitedocumentspublisherimportantprototypeinfluence&raquo;</effectivegenerallytransformbeautifultransportorganizedpublishedprominentuntil thethumbnailNational .focus();over the migrationannouncedfooter\\\">\\nexceptionless thanexpensiveformationframeworkterritoryndicationcurrentlyclassNamecriticismtraditionelsewhereAlexanderappointedmaterialsbroadcastmentionedaffiliate</option>treatmentdifferent/default.Presidentonclick=\\\"biographyotherwisepermanentFranC'aisHollywoodexpansionstandards</style>\\nreductionDecember preferredCambridgeopponentsBusiness confusion>\\n<title>presentedexplaineddoes not worldwideinterfacepositionsnewspaper</table>\\nmountainslike the essentialfinancialselectionaction=\\\"/abandonedEducationparseInt(stabilityunable to</title>\\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper\\\">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabeth</iframe>discoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inherited</strong>CommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish</from the scheduleddownloads</label>\\nsuspectedmargin: 0spiritual</head>\\n\\nmicrosoftgraduallydiscussedhe becameexecutivejquery.jshouseholdconfirmedpurchasedliterallydestroyedup to thevariationremainingit is notcenturiesJapanese among thecompletedalgorithminterestsrebellionundefinedencourageresizableinvolvingsensitiveuniversalprovision(althoughfeaturingconducted), which continued-header\\\">February numerous overflow:componentfragmentsexcellentcolspan=\\\"technicalnear the Advanced source ofexpressedHong Kong Facebookmultiple mechanismelevationoffensive</form>\\n\\tsponsoreddocument.or &quot;there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting\\\" width=\\\".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper\\\"enough toalong thedelivered-->\\r\\n<!--American protectedNovember </style><furnitureInternet  onblur=\\\"suspendedrecipientbased on Moreover,abolishedcollectedwere madeemotionalemergencynarrativeadvocatespx;bordercommitteddir=\\\"ltr\\\"employeesresearch. selectedsuccessorcustomersdisplayedSeptemberaddClass(Facebook suggestedand lateroperatingelaborateSometimesInstitutecertainlyinstalledfollowersJerusalemthey havecomputinggeneratedprovincesguaranteearbitraryrecognizewanted topx;width:theory ofbehaviourWhile theestimatedbegan to it becamemagnitudemust havemore thanDirectoryextensionsecretarynaturallyoccurringvariablesgiven theplatform.</label><failed tocompoundskinds of societiesalongside --&gt;\\n\\nsouthwestthe rightradiationmay have unescape(spoken in\\\" href=\\\"/programmeonly the come fromdirectoryburied ina similarthey were</font></Norwegianspecifiedproducingpassenger(new DatetemporaryfictionalAfter theequationsdownload.regularlydeveloperabove thelinked tophenomenaperiod oftooltip\\\">substanceautomaticaspect ofAmong theconnectedestimatesAir Forcesystem ofobjectiveimmediatemaking itpaintingsconqueredare stillproceduregrowth ofheaded byEuropean divisionsmoleculesfranchiseintentionattractedchildhoodalso useddedicatedsingaporedegree offather ofconflicts</a></p>\\ncame fromwere usednote thatreceivingExecutiveeven moreaccess tocommanderPoliticalmusiciansdeliciousprisonersadvent ofUTF-8\\\" /><![CDATA[\\\">ContactSouthern bgcolor=\\\"series of. It was in Europepermittedvalidate.appearingofficialsseriously-languageinitiatedextendinglong-terminflationsuch thatgetCookiemarked by</button>implementbut it isincreasesdown the requiringdependent-->\\n<!-- interviewWith the copies ofconsensuswas builtVenezuela(formerlythe statepersonnelstrategicfavour ofinventionWikipediacontinentvirtuallywhich wasprincipleComplete identicalshow thatprimitiveaway frommolecularpreciselydissolvedUnder theversion=\\\">&nbsp;</It is the This is will haveorganismssome timeFriedrichwas firstthe only fact thatform id=\\\"precedingTechnicalphysicistoccurs innavigatorsection\\\">span id=\\\"sought tobelow thesurviving}</style>his deathas in thecaused bypartiallyexisting using thewas givena list oflevels ofnotion ofOfficial dismissedscientistresemblesduplicateexplosiverecoveredall othergalleries{padding:people ofregion ofaddressesassociateimg alt=\\\"in modernshould bemethod ofreportingtimestampneeded tothe Greatregardingseemed toviewed asimpact onidea thatthe Worldheight ofexpandingThese arecurrent\\\">carefullymaintainscharge ofClassicaladdressedpredictedownership<div id=\\\"right\\\">\\r\\nresidenceleave thecontent\\\">are often  })();\\r\\nprobably Professor-button\\\" respondedsays thathad to beplaced inHungarianstatus ofserves asUniversalexecutionaggregatefor whichinfectionagreed tohowever, popular\\\">placed onconstructelectoralsymbol ofincludingreturn toarchitectChristianprevious living ineasier toprofessor\\n&lt;!-- effect ofanalyticswas takenwhere thetook overbelief inAfrikaansas far aspreventedwork witha special<fieldsetChristmasRetrieved\\n\\nIn the back intonortheastmagazines><strong>committeegoverninggroups ofstored inestablisha generalits firsttheir ownpopulatedan objectCaribbeanallow thedistrictswisconsinlocation.; width: inhabitedSocialistJanuary 1</footer>similarlychoice ofthe same specific business The first.length; desire todeal withsince theuserAgentconceivedindex.phpas &quot;engage inrecently,few yearswere also\\n<head>\\n<edited byare knowncities inaccesskeycondemnedalso haveservices,family ofSchool ofconvertednature of languageministers</object>there is a popularsequencesadvocatedThey wereany otherlocation=enter themuch morereflectedwas namedoriginal a typicalwhen theyengineerscould notresidentswednesdaythe third productsJanuary 2what theya certainreactionsprocessorafter histhe last contained\\\"></div>\\n</a></td>depend onsearch\\\">\\npieces ofcompetingReferencetennesseewhich has version=</span> <</header>gives thehistorianvalue=\\\"\\\">padding:0view thattogether,the most was foundsubset ofattack onchildren,points ofpersonal position:allegedlyClevelandwas laterand afterare givenwas stillscrollingdesign ofmakes themuch lessAmericans.\\n\\nAfter , but theMuseum oflouisiana(from theminnesotaparticlesa processDominicanvolume ofreturningdefensive00px|righmade frommouseover\\\" style=\\\"states of(which iscontinuesFranciscobuilding without awith somewho woulda form ofa part ofbefore itknown as  Serviceslocation and oftenmeasuringand it ispaperbackvalues of\\r\\n<title>= window.determineer&quot; played byand early</center>from thisthe threepower andof &quot;innerHTML<a href=\\\"y:inline;Church ofthe eventvery highofficial -height: content=\\\"/cgi-bin/to createafrikaansesperantofranC'aislatvieE!ulietuviE3D\\u000CeE!tinaD\\reE!tina`9\\u0004`8\\u0017`8\\\"f\\u0017%f\\u001C,h*\\u001Eg.\\u0000d=\\u0013e-\\u0017g9\\u0001i+\\u0014e-\\u0017m\\u0015\\u001Cj5-l\\u00164d8:d;\\u0000d9\\u0008h.!g.\\u0017f\\u001C:g,\\u0014h.0f\\u001C,h(\\u000Eh+\\u0016e\\r\\u0000f\\u001C\\re\\n!e\\u0019(d:\\u0012h\\u0001\\u0014g=\\u0011f\\u0008?e\\u001C0d:'d?1d9\\u0010i\\u0003(e\\u0007:g\\t\\u0008g$>f\\u000E\\u0012h!\\u000Cf&\\u001Ci\\u0003(h\\u0010=f <h?\\u001Bd8\\u0000f-%f\\u0014/d;\\u0018e.\\u001Di*\\u000Ch/\\u0001g \\u0001e'\\u0014e\\u0011\\u0018d<\\u001Af\\u00150f\\r.e:\\u0013f6\\u0008h49h\\u0000\\u0005e\\n\\u001Ee\\u0005,e.$h.(h.:e\\u000C:f71e\\u001C3e8\\u0002f\\u0012-f\\u0014>e\\u0019(e\\u000C\\u0017d:,e8\\u0002e$'e-&g\\u0014\\u001Fh6\\nf\\u001D%h6\\ng.!g\\u0010\\u0006e\\u0011\\u0018d?!f\\u0001/g=\\u0011serviciosartC-culoargentinabarcelonacualquierpublicadoproductospolC-ticarespuestawikipediasiguientebC:squedacomunidadseguridadprincipalpreguntascontenidorespondervenezuelaproblemasdiciembrerelaciC3nnoviembresimilaresproyectosprogramasinstitutoactividadencuentraeconomC-aimC!genescontactardescargarnecesarioatenciC3ntelC)fonocomisiC3ncancionescapacidadencontraranC!lisisfavoritostC)rminosprovinciaetiquetaselementosfuncionesresultadocarC!cterpropiedadprincipionecesidadmunicipalcreaciC3ndescargaspresenciacomercialopinionesejercicioeditorialsalamancagonzC!lezdocumentopelC-cularecientesgeneralestarragonaprC!cticanovedadespropuestapacientestC)cnicasobjetivoscontactos`$.`%\\u0007`$\\u0002`$2`$?`$\\u000F`$9`%\\u0008`$\\u0002`$\\u0017`$/`$>`$8`$>`$%`$\\u000F`$5`$\\u0002`$0`$9`%\\u0007`$\\u0015`%\\u000B`$\\u0008`$\\u0015`%\\u0001`$\\u001B`$0`$9`$>`$,`$>`$&`$\\u0015`$9`$>`$8`$-`%\\u0000`$9`%\\u0001`$\\u000F`$0`$9`%\\u0000`$.`%\\u0008`$\\u0002`$&`$?`$(`$,`$>`$$diplodocs`$8`$.`$/`$0`%\\u0002`$*`$(`$>`$.`$*`$$`$>`$+`$?`$0`$\\u0014`$8`$$`$$`$0`$9`$2`%\\u000B`$\\u0017`$9`%\\u0001`$\\u0006`$,`$>`$0`$&`%\\u0007`$6`$9`%\\u0001`$\\u0008`$\\u0016`%\\u0007`$2`$/`$&`$?`$\\u0015`$>`$.`$5`%\\u0007`$,`$$`%\\u0000`$(`$,`%\\u0000`$\\u001A`$.`%\\u000C`$$`$8`$>`$2`$2`%\\u0007`$\\u0016`$\\u001C`%\\t`$,`$.`$&`$&`$$`$%`$>`$(`$9`%\\u0000`$6`$9`$0`$\\u0005`$2`$\\u0017`$\\u0015`$-`%\\u0000`$(`$\\u0017`$0`$*`$>`$8`$0`$>`$$`$\\u0015`$?`$\\u000F`$\\t`$8`%\\u0007`$\\u0017`$/`%\\u0000`$9`%\\u0002`$\\u0001`$\\u0006`$\\u0017`%\\u0007`$\\u001F`%\\u0000`$.`$\\u0016`%\\u000B`$\\u001C`$\\u0015`$>`$0`$\\u0005`$-`%\\u0000`$\\u0017`$/`%\\u0007`$$`%\\u0001`$.`$5`%\\u000B`$\\u001F`$&`%\\u0007`$\\u0002`$\\u0005`$\\u0017`$0`$\\u0010`$8`%\\u0007`$.`%\\u0007`$2`$2`$\\u0017`$>`$9`$>`$2`$\\n`$*`$0`$\\u001A`$>`$0`$\\u0010`$8`$>`$&`%\\u0007`$0`$\\u001C`$?`$8`$&`$?`$2`$,`$\\u0002`$&`$,`$(`$>`$9`%\\u0002`$\\u0002`$2`$>`$\\u0016`$\\u001C`%\\u0000`$$`$,`$\\u001F`$(`$.`$?`$2`$\\u0007`$8`%\\u0007`$\\u0006`$(`%\\u0007`$(`$/`$>`$\\u0015`%\\u0001`$2`$2`%\\t`$\\u0017`$-`$>`$\\u0017`$0`%\\u0007`$2`$\\u001C`$\\u0017`$9`$0`$>`$.`$2`$\\u0017`%\\u0007`$*`%\\u0007`$\\u001C`$9`$>`$%`$\\u0007`$8`%\\u0000`$8`$9`%\\u0000`$\\u0015`$2`$>`$ `%\\u0000`$\\u0015`$9`$>`$\\u0001`$&`%\\u0002`$0`$$`$9`$$`$8`$>`$$`$/`$>`$&`$\\u0006`$/`$>`$*`$>`$\\u0015`$\\u0015`%\\u000C`$(`$6`$>`$.`$&`%\\u0007`$\\u0016`$/`$9`%\\u0000`$0`$>`$/`$\\u0016`%\\u0001`$&`$2`$\\u0017`%\\u0000categoriesexperience</title>\\r\\nCopyright javascriptconditionseverything<p class=\\\"technologybackground<a class=\\\"management&copy; 201javaScriptcharactersbreadcrumbthemselveshorizontalgovernmentCaliforniaactivitiesdiscoveredNavigationtransitionconnectionnavigationappearance</title><mcheckbox\\\" techniquesprotectionapparentlyas well asunt', 'UA-resolutionoperationstelevisiontranslatedWashingtonnavigator. = window.impression&lt;br&gt;literaturepopulationbgcolor=\\\"#especially content=\\\"productionnewsletterpropertiesdefinitionleadershipTechnologyParliamentcomparisonul class=\\\".indexOf(\\\"conclusiondiscussioncomponentsbiologicalRevolution_containerunderstoodnoscript><permissioneach otheratmosphere onfocus=\\\"<form id=\\\"processingthis.valuegenerationConferencesubsequentwell-knownvariationsreputationphenomenondisciplinelogo.png\\\" (document,boundariesexpressionsettlementBackgroundout of theenterprise(\\\"https:\\\" unescape(\\\"password\\\" democratic<a href=\\\"/wrapper\\\">\\nmembershiplinguisticpx;paddingphilosophyassistanceuniversityfacilitiesrecognizedpreferenceif (typeofmaintainedvocabularyhypothesis.submit();&amp;nbsp;annotationbehind theFoundationpublisher\\\"assumptionintroducedcorruptionscientistsexplicitlyinstead ofdimensions onClick=\\\"considereddepartmentoccupationsoon afterinvestmentpronouncedidentifiedexperimentManagementgeographic\\\" height=\\\"link rel=\\\".replace(/depressionconferencepunishmenteliminatedresistanceadaptationoppositionwell knownsupplementdeterminedh1 class=\\\"0px;marginmechanicalstatisticscelebratedGovernment\\n\\nDuring tdevelopersartificialequivalentoriginatedCommissionattachment<span id=\\\"there wereNederlandsbeyond theregisteredjournalistfrequentlyall of thelang=\\\"en\\\" </style>\\r\\nabsolute; supportingextremely mainstream</strong> popularityemployment</table>\\r\\n colspan=\\\"</form>\\n  conversionabout the </p></div>integrated\\\" lang=\\\"enPortuguesesubstituteindividualimpossiblemultimediaalmost allpx solid #apart fromsubject toin Englishcriticizedexcept forguidelinesoriginallyremarkablethe secondh2 class=\\\"<a title=\\\"(includingparametersprohibited= \\\"http://dictionaryperceptionrevolutionfoundationpx;height:successfulsupportersmillenniumhis fatherthe &quot;no-repeat;commercialindustrialencouragedamount of unofficialefficiencyReferencescoordinatedisclaimerexpeditiondevelopingcalculatedsimplifiedlegitimatesubstring(0\\\" class=\\\"completelyillustratefive yearsinstrumentPublishing1\\\" class=\\\"psychologyconfidencenumber of absence offocused onjoined thestructurespreviously></iframe>once againbut ratherimmigrantsof course,a group ofLiteratureUnlike the</a>&nbsp;\\nfunction it was theConventionautomobileProtestantaggressiveafter the Similarly,\\\" /></div>collection\\r\\nfunctionvisibilitythe use ofvolunteersattractionunder the threatened*<![CDATA[importancein generalthe latter</form>\\n</.indexOf('i = 0; i <differencedevoted totraditionssearch forultimatelytournamentattributesso-called }\\n</style>evaluationemphasizedaccessible</section>successionalong withMeanwhile,industries</a><br />has becomeaspects ofTelevisionsufficientbasketballboth sidescontinuingan article<img alt=\\\"adventureshis mothermanchesterprinciplesparticularcommentaryeffects ofdecided to\\\"><strong>publishersJournal ofdifficultyfacilitateacceptablestyle.css\\\"\\tfunction innovation>Copyrightsituationswould havebusinessesDictionarystatementsoften usedpersistentin Januarycomprising</title>\\n\\tdiplomaticcontainingperformingextensionsmay not beconcept of onclick=\\\"It is alsofinancial making theLuxembourgadditionalare calledengaged in\\\"script\\\");but it waselectroniconsubmit=\\\"\\n<!-- End electricalofficiallysuggestiontop of theunlike theAustralianOriginallyreferences\\n</head>\\r\\nrecognisedinitializelimited toAlexandriaretirementAdventuresfour years\\n\\n&lt;!-- increasingdecorationh3 class=\\\"origins ofobligationregulationclassified(function(advantagesbeing the historians<base hrefrepeatedlywilling tocomparabledesignatednominationfunctionalinside therevelationend of thes for the authorizedrefused totake placeautonomouscompromisepolitical restauranttwo of theFebruary 2quality ofswfobject.understandnearly allwritten byinterviews\\\" width=\\\"1withdrawalfloat:leftis usuallycandidatesnewspapersmysteriousDepartmentbest knownparliamentsuppressedconvenientremembereddifferent systematichas led topropagandacontrolledinfluencesceremonialproclaimedProtectionli class=\\\"Scientificclass=\\\"no-trademarksmore than widespreadLiberationtook placeday of theas long asimprisonedAdditional\\n<head>\\n<mLaboratoryNovember 2exceptionsIndustrialvariety offloat: lefDuring theassessmenthave been deals withStatisticsoccurrence/ul></div>clearfix\\\">the publicmany yearswhich wereover time,synonymouscontent\\\">\\npresumablyhis familyuserAgent.unexpectedincluding challengeda minorityundefined\\\"belongs totaken fromin Octoberposition: said to bereligious Federation rowspan=\\\"only a fewmeant thatled to the-->\\r\\n<div <fieldset>Archbishop class=\\\"nobeing usedapproachesprivilegesnoscript>\\nresults inmay be theEaster eggmechanismsreasonablePopulationCollectionselected\\\">noscript>\\r/index.phparrival of-jssdk'));managed toincompletecasualtiescompletionChristiansSeptember arithmeticproceduresmight haveProductionit appearsPhilosophyfriendshipleading togiving thetoward theguaranteeddocumentedcolor:#000video gamecommissionreflectingchange theassociatedsans-serifonkeypress; padding:He was theunderlyingtypically , and the srcElementsuccessivesince the should be networkingaccountinguse of thelower thanshows that</span>\\n\\t\\tcomplaintscontinuousquantitiesastronomerhe did notdue to itsapplied toan averageefforts tothe futureattempt toTherefore,capabilityRepublicanwas formedElectronickilometerschallengespublishingthe formerindigenousdirectionssubsidiaryconspiracydetails ofand in theaffordablesubstancesreason forconventionitemtype=\\\"absolutelysupposedlyremained aattractivetravellingseparatelyfocuses onelementaryapplicablefound thatstylesheetmanuscriptstands for no-repeat(sometimesCommercialin Americaundertakenquarter ofan examplepersonallyindex.php?</button>\\npercentagebest-knowncreating a\\\" dir=\\\"ltrLieutenant\\n<div id=\\\"they wouldability ofmade up ofnoted thatclear thatargue thatto anotherchildren'spurpose offormulatedbased uponthe regionsubject ofpassengerspossession.\\n\\nIn the Before theafterwardscurrently across thescientificcommunity.capitalismin Germanyright-wingthe systemSociety ofpoliticiandirection:went on toremoval of New York apartmentsindicationduring theunless thehistoricalhad been adefinitiveingredientattendanceCenter forprominencereadyStatestrategiesbut in theas part ofconstituteclaim thatlaboratorycompatiblefailure of, such as began withusing the to providefeature offrom which/\\\" class=\\\"geologicalseveral ofdeliberateimportant holds thating&quot; valign=topthe Germanoutside ofnegotiatedhis careerseparationid=\\\"searchwas calledthe fourthrecreationother thanpreventionwhile the education,connectingaccuratelywere builtwas killedagreementsmuch more Due to thewidth: 100some otherKingdom ofthe entirefamous forto connectobjectivesthe Frenchpeople andfeatured\\\">is said tostructuralreferendummost oftena separate->\\n<div id Official worldwide.aria-labelthe planetand it wasd\\\" value=\\\"looking atbeneficialare in themonitoringreportedlythe modernworking onallowed towhere the innovative</a></div>soundtracksearchFormtend to beinput id=\\\"opening ofrestrictedadopted byaddressingtheologianmethods ofvariant ofChristian very largeautomotiveby far therange frompursuit offollow thebrought toin Englandagree thataccused ofcomes frompreventingdiv style=his or hertremendousfreedom ofconcerning0 1em 1em;Basketball/style.cssan earliereven after/\\\" title=\\\".com/indextaking thepittsburghcontent\\\">\\r<script>(fturned outhaving the</span>\\r\\n occasionalbecause itstarted tophysically></div>\\n  created byCurrently, bgcolor=\\\"tabindex=\\\"disastrousAnalytics also has a><div id=\\\"</style>\\n<called forsinger and.src = \\\"//violationsthis pointconstantlyis locatedrecordingsd from thenederlandsportuguC*sW\\\"W\\u0011W(W\\u0019W*Y\\u0001X'X1X3[\\u000CdesarrollocomentarioeducaciC3nseptiembreregistradodirecciC3nubicaciC3npublicidadrespuestasresultadosimportantereservadosartC-culosdiferentessiguientesrepC:blicasituaciC3nministerioprivacidaddirectorioformaciC3npoblaciC3npresidentecont\", \"enidosaccesoriostechnoratipersonalescategorC-aespecialesdisponibleactualidadreferenciavalladolidbibliotecarelacionescalendariopolC-ticasanterioresdocumentosnaturalezamaterialesdiferenciaeconC3micatransporterodrC-guezparticiparencuentrandiscusiC3nestructurafundaciC3nfrecuentespermanentetotalmenteP<P>P6P=P>P1Q\\u0003P4P5Q\\u0002P<P>P6P5Q\\u0002P2Q\\u0000P5P<Q\\u000FQ\\u0002P0P:P6P5Q\\u0007Q\\u0002P>P1Q\\u000BP1P>P;P5P5P>Q\\u0007P5P=Q\\u000CQ\\rQ\\u0002P>P3P>P:P>P3P4P0P?P>Q\\u0001P;P5P2Q\\u0001P5P3P>Q\\u0001P0P9Q\\u0002P5Q\\u0007P5Q\\u0000P5P7P<P>P3Q\\u0003Q\\u0002Q\\u0001P0P9Q\\u0002P0P6P8P7P=P8P<P5P6P4Q\\u0003P1Q\\u0003P4Q\\u0003Q\\u0002P\\u001FP>P8Q\\u0001P:P7P4P5Q\\u0001Q\\u000CP2P8P4P5P>Q\\u0001P2Q\\u000FP7P8P=Q\\u0003P6P=P>Q\\u0001P2P>P5P9P;Q\\u000EP4P5P9P?P>Q\\u0000P=P>P<P=P>P3P>P4P5Q\\u0002P5P9Q\\u0001P2P>P8Q\\u0005P?Q\\u0000P0P2P0Q\\u0002P0P:P>P9P<P5Q\\u0001Q\\u0002P>P8P<P5P5Q\\u0002P6P8P7P=Q\\u000CP>P4P=P>P9P;Q\\u0003Q\\u0007Q\\u0008P5P?P5Q\\u0000P5P4Q\\u0007P0Q\\u0001Q\\u0002P8Q\\u0007P0Q\\u0001Q\\u0002Q\\u000CQ\\u0000P0P1P>Q\\u0002P=P>P2Q\\u000BQ\\u0005P?Q\\u0000P0P2P>Q\\u0001P>P1P>P9P?P>Q\\u0002P>P<P<P5P=P5P5Q\\u0007P8Q\\u0001P;P5P=P>P2Q\\u000BP5Q\\u0003Q\\u0001P;Q\\u0003P3P>P:P>P;P>P=P0P7P0P4Q\\u0002P0P:P>P5Q\\u0002P>P3P4P0P?P>Q\\u0007Q\\u0002P8P\\u001FP>Q\\u0001P;P5Q\\u0002P0P:P8P5P=P>P2Q\\u000BP9Q\\u0001Q\\u0002P>P8Q\\u0002Q\\u0002P0P:P8Q\\u0005Q\\u0001Q\\u0000P0P7Q\\u0003P!P0P=P:Q\\u0002Q\\u0004P>Q\\u0000Q\\u0003P<P\\u001AP>P3P4P0P:P=P8P3P8Q\\u0001P;P>P2P0P=P0Q\\u0008P5P9P=P0P9Q\\u0002P8Q\\u0001P2P>P8P<Q\\u0001P2Q\\u000FP7Q\\u000CP;Q\\u000EP1P>P9Q\\u0007P0Q\\u0001Q\\u0002P>Q\\u0001Q\\u0000P5P4P8P\\u001AQ\\u0000P>P<P5P$P>Q\\u0000Q\\u0003P<Q\\u0000Q\\u000BP=P:P5Q\\u0001Q\\u0002P0P;P8P?P>P8Q\\u0001P:Q\\u0002Q\\u000BQ\\u0001Q\\u000FQ\\u0007P<P5Q\\u0001Q\\u000FQ\\u0006Q\\u0006P5P=Q\\u0002Q\\u0000Q\\u0002Q\\u0000Q\\u0003P4P0Q\\u0001P0P<Q\\u000BQ\\u0005Q\\u0000Q\\u000BP=P:P0P\\u001DP>P2Q\\u000BP9Q\\u0007P0Q\\u0001P>P2P<P5Q\\u0001Q\\u0002P0Q\\u0004P8P;Q\\u000CP<P<P0Q\\u0000Q\\u0002P0Q\\u0001Q\\u0002Q\\u0000P0P=P<P5Q\\u0001Q\\u0002P5Q\\u0002P5P:Q\\u0001Q\\u0002P=P0Q\\u0008P8Q\\u0005P<P8P=Q\\u0003Q\\u0002P8P<P5P=P8P8P<P5Q\\u000EQ\\u0002P=P>P<P5Q\\u0000P3P>Q\\u0000P>P4Q\\u0001P0P<P>P<Q\\rQ\\u0002P>P<Q\\u0003P:P>P=Q\\u0006P5Q\\u0001P2P>P5P<P:P0P:P>P9P\\u0010Q\\u0000Q\\u0005P8P2Y\\u0005Y\\u0006X*X/Y\\tX%X1X3X'Y\\u0004X1X3X'Y\\u0004X)X'Y\\u0004X9X'Y\\u0005Y\\u0003X*X(Y\\u0007X'X(X1X'Y\\u0005X,X'Y\\u0004Y\\nY\\u0008Y\\u0005X'Y\\u0004X5Y\\u0008X1X,X/Y\\nX/X)X'Y\\u0004X9X6Y\\u0008X%X6X'Y\\u0001X)X'Y\\u0004Y\\u0002X3Y\\u0005X'Y\\u0004X9X'X(X*X-Y\\u0005Y\\nY\\u0004Y\\u0005Y\\u0004Y\\u0001X'X*Y\\u0005Y\\u0004X*Y\\u0002Y\\tX*X9X/Y\\nY\\u0004X'Y\\u0004X4X9X1X#X.X(X'X1X*X7Y\\u0008Y\\nX1X9Y\\u0004Y\\nY\\u0003Y\\u0005X%X1Y\\u0001X'Y\\u0002X7Y\\u0004X(X'X*X'Y\\u0004Y\\u0004X:X)X*X1X*Y\\nX(X'Y\\u0004Y\\u0006X'X3X'Y\\u0004X4Y\\nX.Y\\u0005Y\\u0006X*X/Y\\nX'Y\\u0004X9X1X(X'Y\\u0004Y\\u0002X5X5X'Y\\u0001Y\\u0004X'Y\\u0005X9Y\\u0004Y\\nY\\u0007X'X*X-X/Y\\nX+X'Y\\u0004Y\\u0004Y\\u0007Y\\u0005X'Y\\u0004X9Y\\u0005Y\\u0004Y\\u0005Y\\u0003X*X(X)Y\\nY\\u0005Y\\u0003Y\\u0006Y\\u0003X'Y\\u0004X7Y\\u0001Y\\u0004Y\\u0001Y\\nX/Y\\nY\\u0008X%X/X'X1X)X*X'X1Y\\nX.X'Y\\u0004X5X-X)X*X3X,Y\\nY\\u0004X'Y\\u0004Y\\u0008Y\\u0002X*X9Y\\u0006X/Y\\u0005X'Y\\u0005X/Y\\nY\\u0006X)X*X5Y\\u0005Y\\nY\\u0005X#X1X4Y\\nY\\u0001X'Y\\u0004X0Y\\nY\\u0006X9X1X(Y\\nX)X(Y\\u0008X'X(X)X#Y\\u0004X9X'X(X'Y\\u0004X3Y\\u0001X1Y\\u0005X4X'Y\\u0003Y\\u0004X*X9X'Y\\u0004Y\\tX'Y\\u0004X#Y\\u0008Y\\u0004X'Y\\u0004X3Y\\u0006X)X,X'Y\\u0005X9X)X'Y\\u0004X5X-Y\\u0001X'Y\\u0004X/Y\\nY\\u0006Y\\u0003Y\\u0004Y\\u0005X'X*X'Y\\u0004X.X'X5X'Y\\u0004Y\\u0005Y\\u0004Y\\u0001X#X9X6X'X!Y\\u0003X*X'X(X)X'Y\\u0004X.Y\\nX1X1X3X'X&Y\\u0004X'Y\\u0004Y\\u0002Y\\u0004X(X'Y\\u0004X#X/X(Y\\u0005Y\\u0002X'X7X9Y\\u0005X1X'X3Y\\u0004Y\\u0005Y\\u0006X7Y\\u0002X)X'Y\\u0004Y\\u0003X*X(X'Y\\u0004X1X,Y\\u0004X'X4X*X1Y\\u0003X'Y\\u0004Y\\u0002X/Y\\u0005Y\\nX9X7Y\\nY\\u0003sByTagName(.jpg\\\" alt=\\\"1px solid #.gif\\\" alt=\\\"transparentinformationapplication\\\" onclick=\\\"establishedadvertising.png\\\" alt=\\\"environmentperformanceappropriate&amp;mdash;immediately</strong></rather thantemperaturedevelopmentcompetitionplaceholdervisibility:copyright\\\">0\\\" height=\\\"even thoughreplacementdestinationCorporation<ul class=\\\"AssociationindividualsperspectivesetTimeout(url(http://mathematicsmargin-top:eventually description) no-repeatcollections.JPG|thumb|participate/head><bodyfloat:left;<li class=\\\"hundreds of\\n\\nHowever, compositionclear:both;cooperationwithin the label for=\\\"border-top:New Zealandrecommendedphotographyinteresting&lt;sup&gt;controversyNetherlandsalternativemaxlength=\\\"switzerlandDevelopmentessentially\\n\\nAlthough </textarea>thunderbirdrepresented&amp;ndash;speculationcommunitieslegislationelectronics\\n\\t<div id=\\\"illustratedengineeringterritoriesauthoritiesdistributed6\\\" height=\\\"sans-serif;capable of disappearedinteractivelooking forit would beAfghanistanwas createdMath.floor(surroundingcan also beobservationmaintenanceencountered<h2 class=\\\"more recentit has beeninvasion of).getTime()fundamentalDespite the\\\"><div id=\\\"inspirationexaminationpreparationexplanation<input id=\\\"</a></span>versions ofinstrumentsbefore the  = 'http://Descriptionrelatively .substring(each of theexperimentsinfluentialintegrationmany peopledue to the combinationdo not haveMiddle East<noscript><copyright\\\" perhaps theinstitutionin Decemberarrangementmost famouspersonalitycreation oflimitationsexclusivelysovereignty-content\\\">\\n<td class=\\\"undergroundparallel todoctrine ofoccupied byterminologyRenaissancea number ofsupport forexplorationrecognitionpredecessor<img src=\\\"/<h1 class=\\\"publicationmay also bespecialized</fieldset>progressivemillions ofstates thatenforcementaround the one another.parentNodeagricultureAlternativeresearcherstowards theMost of themany other (especially<td width=\\\";width:100%independent<h3 class=\\\" onchange=\\\").addClass(interactionOne of the daughter ofaccessoriesbranches of\\r\\n<div id=\\\"the largestdeclarationregulationsInformationtranslationdocumentaryin order to\\\">\\n<head>\\n<\\\" height=\\\"1across the orientation);</script>implementedcan be seenthere was ademonstratecontainer\\\">connectionsthe Britishwas written!important;px; margin-followed byability to complicatedduring the immigrationalso called<h4 class=\\\"distinctionreplaced bygovernmentslocation ofin Novemberwhether the</p>\\n</div>acquisitioncalled the persecutiondesignation{font-size:appeared ininvestigateexperiencedmost likelywidely useddiscussionspresence of (document.extensivelyIt has beenit does notcontrary toinhabitantsimprovementscholarshipconsumptioninstructionfor exampleone or morepx; paddingthe currenta series ofare usuallyrole in thepreviously derivativesevidence ofexperiencescolorschemestated thatcertificate</a></div>\\n selected=\\\"high schoolresponse tocomfortableadoption ofthree yearsthe countryin Februaryso that thepeople who provided by<param nameaffected byin terms ofappointmentISO-8859-1\\\"was born inhistorical regarded asmeasurementis based on and other : function(significantcelebrationtransmitted/js/jquery.is known astheoretical tabindex=\\\"it could be<noscript>\\nhaving been\\r\\n<head>\\r\\n< &quot;The compilationhe had beenproduced byphilosopherconstructedintended toamong othercompared toto say thatEngineeringa differentreferred todifferencesbelief thatphotographsidentifyingHistory of Republic ofnecessarilyprobabilitytechnicallyleaving thespectacularfraction ofelectricityhead of therestaurantspartnershipemphasis onmost recentshare with saying thatfilled withdesigned toit is often\\\"></iframe>as follows:merged withthrough thecommercial pointed outopportunityview of therequirementdivision ofprogramminghe receivedsetInterval\\\"></span></in New Yorkadditional compression\\n\\n<div id=\\\"incorporate;</script><attachEventbecame the \\\" target=\\\"_carried outSome of thescience andthe time ofContainer\\\">maintainingChristopherMuch of thewritings of\\\" height=\\\"2size of theversion of mixture of between theExamples ofeducationalcompetitive onsubmit=\\\"director ofdistinctive/DTD XHTML relating totendency toprovince ofwhich woulddespite thescientific legislature.innerHTML allegationsAgriculturewas used inapproach tointelligentyears later,sans-serifdeterminingPerformanceappearances, which is foundationsabbreviatedhigher thans from the individual composed ofsupposed toclaims thatattributionfont-size:1elements ofHistorical his brotherat the timeanniversarygoverned byrelated to ultimately innovationsit is stillcan only bedefinitionstoGMTStringA number ofimg class=\\\"Eventually,was changedoccurred inneighboringdistinguishwhen he wasintroducingterrestrialMany of theargues thatan Americanconquest ofwidespread were killedscreen and In order toexpected todescendantsare locatedlegislativegenerations backgroundmost peopleyears afterthere is nothe highestfrequently they do notargued thatshowed thatpredominanttheologicalby the timeconsideringshort-lived</span></a>can be usedvery littleone of the had alreadyinterpretedcommunicatefeatures ofgovernment,</noscript>entered the\\\" height=\\\"3Independentpopulationslarge-scale. Although used in thedestructionpossibilitystarting intwo or moreexpressionssubordinatelarger thanhistory and</option>\\r\\nContinentaleliminatingwill not bepractice ofin front ofsite of theensure thatto create amississippipotentiallyoutstandingbetter thanwhat is nowsituated inmeta name=\\\"TraditionalsuggestionsTranslationthe form ofatmosphericideologicalenterprisescalculatingeast of theremnants ofpluginspage/index.php?remained intransformedHe was alsowas alreadystatisticalin favor ofMinistry ofmovement offormulationis required<link rel=\\\"This is the <a href=\\\"/popularizedinvolved inare used toand severalmade by theseems to belikely thatPalestiniannamed afterit had beenmost commonto refer tobut this isconsecutivetemporarilyIn general,conventionstakes placesubdivisionterritorialoperationalpermanentlywas largelyoutbreak ofin the pastfollowing a xmlns:og=\\\"><a class=\\\"class=\\\"textConversion may be usedmanufactureafter beingclearfix\\\">\\nquestion ofwas electedto become abecause of some peopleinspired bysuccessful a time whenmore commonamongst thean officialwidth:100%;technology,was adoptedto keep thesettlementslive birthsindex.html\\\"Connecticutassigned to&amp;times;account foralign=rightthe companyalways beenreturned toinvolvementBecause thethis period\\\" name=\\\"q\\\" confined toa result ofvalue=\\\"\\\" />is actuallyEnvironment\\r\\n</head>\\r\\nConversely,>\\n<div id=\\\"0\\\" width=\\\"1is probablyhave becomecontrollingthe problemcitizens ofpoliticiansreached theas early as:none; over<table cellvalidity ofdirectly toonmousedownwhere it iswhen it wasmembers of relation toaccommodatealong with In the latethe Englishdelicious\\\">this is notthe presentif they areand finallya matter of\\r\\n\\t</div>\\r\\n\\r\\n</script>faster thanmajority ofafter whichcomparativeto maintainimprove theawarded theer\\\" class=\\\"frameborderrestorationin the sameanalysis oftheir firstDuring the continentalsequence offunction(){font-size: work on the</script>\\n<begins withjavascript:constituentwas foundedequilibriumassume thatis given byneeds to becoordinatesthe variousare part ofonly in thesections ofis a commontheories ofdiscoveriesassociationedge of thestrength ofposition inpresent-dayuniversallyto form thebut insteadcorporationattached tois commonlyreasons for &quot;the can be madewas able towhich meansbut did notonMouseOveras possibleoperated bycoming fromthe primaryaddition offor severaltransferreda period ofare able tohowever, itshould havemuch larger\\n\\t</script>adopted theproperty ofdirected byeffectivelywas broughtchildren ofProgramminglonger thanmanuscriptswar againstby means ofand most ofsimilar to proprietaryoriginatingprestigiousgrammaticalexperience.to make theIt was alsois found incompetitorsin the U.S.replace thebrought thecalculationfall of thethe generalpracticallyin honor ofreleased inresidentialand some ofking of thereaction to1st Earl ofculture andprincipally</title>\\n  they can beback to thesome of hisexposure toare similarform of theaddFavoritecitizenshippart in thepeople within practiceto continue&amp;minus;approved by the first allowed theand for thefunctioningplaying thesolution toheight=\\\"0\\\" in his bookmore than afollows thecreated thepresence in&nbsp;</td>nationalistthe idea ofa characterwere forced class=\\\"btndays of thefeatured inshowing theinterest inin place ofturn of thethe head ofLord of thepoliticallyhas its ownEducationalapproval ofsome of theeach other,behavior ofand becauseand anotherappeared onrecorded inblack&quot;may includethe world'scan lead torefers to aborder=\\\"0\\\" government winning theresulted in while the Washington,the subjectcity in the></div>\\r\\n\\t\\treflect theto completebecame moreradioactiverejected bywithout anyhis father,which couldcopy of theto indicatea politicalaccounts ofconstitutesworked wither</a></li>of his lifeaccompaniedclientWidthprevent theLegislativedifferentlytogether inhas severalfor anothertext of thefounded thee with the is used forchanged theusually theplace wherewhereas the> <a href=\\\"\\\"><a href=\\\"themselves,although hethat can betraditionalrole of theas a resultremoveChilddesigned bywest of theSome peopleproduction,side of thenewslettersused by thedown to theaccepted bylive in theattempts tooutside thefrequenciesHowever, inprogrammersat least inapproximatealthough itwas part ofand variousGovernor ofthe articleturned into><a href=\\\"/the economyis the mostmost widelywould laterand perhapsrise to theoccurs whenunder whichconditions.the westerntheory thatis producedthe city ofin which heseen in thethe centralbuilding ofmany of hisarea of theis the onlymost of themany of thethe WesternThere is noextended toStatisticalcolspan=2 |short storypossible totopologicalcritical ofreported toa Christiandecision tois equal toproblems ofThis can bemerchandisefor most ofno evidenceeditions ofelements in&quot;. Thecom/images/which makesthe processremains theliterature,is a memberthe popularthe ancientproblems intime of thedefeated bybody of thea few yearsmuch of thethe work ofCalifornia,served as agovernment.concepts ofmovement in\\t\\t<div id=\\\"it\\\" value=\\\"language ofas they areproduced inis that theexplain thediv></div>\\nHowever thelead to the\\t<a href=\\\"/was grantedpeople havecontinuallywas seen asand relatedthe role ofproposed byof the besteach other.Constantinepeople fromdialects ofto revisionwas renameda source ofthe initiallaunched inprovide theto the westwhere thereand similarbetween twois also theEnglish andconditions,that it wasentitled tothemselves.quantity ofransparencythe same asto join thecountry andthis is theThis led toa statementcontrast tolastIndexOfthrough hisis designedthe term isis providedprotect theng</a></li>The currentthe site ofsubstantialexperience,in the Westthey shouldslovenD\\rinacomentariosuniversidadcondicionesactividadesexperienciatecnologC-aproducciC3npuntuaciC3naplicaciC3ncontraseC1acategorC-asregistrarseprofesionaltratamientoregC-stratesecretarC-aprincipalesprotecciC3nimportantesimportanciaposibilidadinteresantecrecimientonecesidadessuscribirseasociaciC3ndisponiblesevaluaciC3nestudiantesresponsableresoluciC3nguadalajararegistradosoportunidadcomercialesfotografC-aautoridadesingenierC-atelevisiC3ncompetenciaoperacionesestablecidosimplementeactualmentenavegaciC3nconformidadline-height:font-family:\\\" : \\\"http://applicationslink\\\" href=\\\"specifically//<![CDATA[\\nOrganizationdistribution0px; height:relationshipdevice-width<div class=\\\"<label for=\\\"registration</noscript>\\n/index.html\\\"window.open( !important;application/independence//www.googleorganizationautocompleterequirementsconservative<form name=\\\"intellectualmargin-left:18th centuryan importantinstitutionsabbreviation<img class=\\\"organisationcivilization19th centuryarchitectureincorporated20th century-container\\\">most notably/></a></div>notification'undefined')Furthermore,believe thatinnerHTML = prior to thedramaticallyreferring tonegotiationsheadquartersSouth AfricaunsuccessfulPennsylvaniaAs a result,<html lang=\\\"&lt;/sup&gt;dealing withphiladelphiahistorically);</script>\\npadding-top:experimentalgetAttributeinstructionstechnologiespart of the =function(){subscriptionl.dtd\\\">\\r\\n<htgeographicalConstitution', function(supported byagriculturalconstructionpublicationsfont-size: 1a variety of<div style=\\\"Encyclopediaiframe src=\\\"demonstratedaccomplisheduniversitiesDemographics);</script><dedicated toknowledge ofsatisfactionparticularly</div></div>English (US)appendChild(transmissions. However, intelligence\\\" tabindex=\\\"float:right;Commonwealthranging fromin which theat least onereproductionencyclopedia;font-size:1jurisdictionat that time\\\"><a class=\\\"In addition,description+conversationcontact withis generallyr\\\" content=\\\"representing&lt;math&gt;presentationoccasionally<img width=\\\"navigation\\\">compensationchampionshipmedia=\\\"all\\\" violation ofreference toreturn true;Strict//EN\\\" transactionsinterventionverificationInformation difficultiesChampionshipcapabilities<![endif]-->}\\n</script>\\nChristianityfor example,Professionalrestrictionssuggest thatwas released(such as theremoveClass(unemploymentthe Americanstructure of/index.html published inspan class=\\\"\\\"><a href=\\\"/introductionbelonging toclaimed thatconsequences<meta name=\\\"Guide to theoverwhelmingagainst the concentrated,\\n.nontouch observations</a>\\n</div>\\nf (document.border: 1px {font-size:1treatment of0\\\" height=\\\"1modificationIndependencedivided intogreater thanachievementsestablishingJavaScript\\\" neverthelesssignificanceBroadcasting>&nbsp;</td>container\\\">\\nsuch as the influence ofa particularsrc='http://navigation\\\" half of the substantial &nbsp;</div>advantage ofdiscovery offundamental metropolitanthe opposite\\\" xml:lang=\\\"deliberatelyalign=centerevolution ofpreservationimprovementsbeginning inJesus ChristPublicationsdisagreementtext-align:r, function()similaritiesbody></html>is currentlyalphabeticalis sometimestype=\\\"image/many of the flow:hidden;available indescribe theexistence ofall over thethe Internet\\t<ul class=\\\"installationneighborhoodarmed forcesreducing thecontinues toNonetheless,temperatures\\n\\t\\t<a href=\\\"close to theexamples of is about the(see below).\\\" id=\\\"searchprofessionalis availablethe official\\t\\t</script>\\n\\n\\t\\t<div id=\\\"accelerationthrough the Hall of Famedescriptionstranslationsinterference type='text/recent yearsin the worldvery popular{background:traditional some of the connected toexploitationemergence ofconstitutionA History ofsignificant manufacturedexpectations><noscript><can be foundbecause the has not beenneighbouringwithout the added to the\\t<li class=\\\"instrumentalSoviet Unionacknowledgedwhich can bename for theattention toattempts to developmentsIn fact, the<li class=\\\"aimplicationssuitable formuch of the colonizationpresidentialcancelBubble Informationmost of the is describedrest of the more or lessin SeptemberIntelligencesrc=\\\"http://px; height: available tomanufacturerhuman rightslink href=\\\"/availabilityproportionaloutside the astronomicalhuman beingsname of the are found inare based onsmaller thana person whoexpansion ofarguing thatnow known asIn the earlyintermediatederived fromScandinavian</a></div>\\r\\nconsider thean estimatedthe National<div id=\\\"pagresulting incommissionedanalogous toare required/ul>\\n</div>\\nwas based onand became a&nbsp;&nbsp;t\\\" value=\\\"\\\" was capturedno more thanrespectivelycontinue to >\\r\\n<head>\\r\\n<were createdmore generalinformation used for theindependent the Imperialcomponent ofto the northinclude the Constructionside of the would not befor instanceinvention ofmore complexcollectivelybackground: text-align: its originalinto accountthis processan extensivehowever, thethey are notrejected thecriticism ofduring whichprobably thethis article(function(){It should bean agreementaccidentallydiffers fromArchitecturebetter knownarrangementsinfluence onattended theidentical tosouth of thepass throughxml\\\" title=\\\"weight:bold;creating thedisplay:nonereplaced the<img src=\\\"/ihttps://www.World War IItestimonialsfound in therequired to and that thebetween the was designedconsists of considerablypublished bythe languageConservationconsisted ofrefer to theback to the css\\\" media=\\\"People from available onproved to besuggestions\\\"was known asvarieties oflikely to becomprised ofsupport the hands of thecoupled withconnect and border:none;performancesbefore beinglater becamecalculationsoften calledresidents ofmeaning that><li class=\\\"evidence forexplanationsenvironments\\\"></a></div>which allowsIntroductiondeveloped bya wide rangeon behalf ofvalign=\\\"top\\\"principle ofat the time,</noscript>\\rsaid to havein the firstwhile othershypotheticalphilosopherspower of thecontained inperformed byinability towere writtenspan style=\\\"input name=\\\"the questionintended forrejection ofimplies thatinvented thethe standardwas probablylink betweenprofessor ofinteractionschanging theIndian Ocean class=\\\"lastworking with'http://www.years beforeThis was therecreationalentering themeasurementsan extremelyvalue of thestart of the\\n</script>\\n\\nan effort toincrease theto the southspacing=\\\"0\\\">sufficientlythe Europeanconverted toclearTimeoutdid not haveconsequentlyfor the nextextension ofeconomic andalthough theare producedand with theinsufficientgiven by thestating thatexpenditures</span></a>\\nthought thaton the basiscellpadding=image of thereturning toinformation,separated byassassinateds\\\" content=\\\"authority ofnorthwestern</div>\\n<div \\\"></div>\\r\\n  consultationcommunity ofthe nationalit should beparticipants align=\\\"leftthe greatestselection ofsupernaturaldependent onis mentionedallowing thewas inventedaccompanyinghis personalavailable atstudy of theon the otherexecution ofHuman Rightsterms of theassociationsresearch andsucceeded bydefeated theand from thebut they arecommander ofstate of theyears of agethe study of<ul class=\\\"splace in thewhere he was<li class=\\\"fthere are nowhich becamehe publishedexpressed into which thecommissionerfont-weight:territory ofextensions\\\">Roman Empireequal to theIn contrast,however, andis typicallyand his wife(also called><ul class=\\\"effectively evolved intoseem to havewhich is thethere was noan excellentall of thesedescribed byIn practice,broadcastingcharged withreflected insubjected tomilitary andto the pointeconomicallysetTargetingare actuallyvictory over();</script>continuouslyrequired forevolutionaryan effectivenorth of the, which was front of theor otherwisesome form ofhad not beengenerated byinformation.permitted toincludes thedevelopment,entered intothe previousconsistentlyare known asthe field ofthis type ofgiven to thethe title ofcontains theinstances ofin the northdue to theirare designedcorporationswas that theone of thesemore popularsucceeded insupport fromin differentdominated bydesigned forownership ofand possiblystandardizedresponseTextwas intendedreceived theassumed thatareas of theprimarily inthe basis ofin the senseaccounts fordestroyed byat least twowas declaredcould not beSecretary ofappear to bemargin-top:1/^\\\\s+|\\\\s+$/ge){throw e};the start oftwo separatelanguage andwho had beenoperation ofdeath of thereal numbers\\t<link rel=\\\"provided thethe story ofcompetitionsenglish (UK)english (US)P\\u001CP>P=P3P>P;P!Q\\u0000P?Q\\u0001P:P8Q\\u0001Q\\u0000P?Q\\u0001P:P8Q\\u0001Q\\u0000P?Q\\u0001P:P>Y\\u0004X9X1X(Y\\nX)f-#i+\\u0014d8-f\\u0016\\u0007g.\\u0000d=\\u0013d8-f\\u0016\\u0007g9\\u0001d=\\u0013d8-f\\u0016\\u0007f\\u001C\\ti\\u0019\\u0010e\\u0005,e\\u000F8d::f0\\u0011f\\u0014?e:\\u001Ci\\u0018?i\\u0007\\u000Ce74e74g$>d<\\u001Ad8;d9\\tf\\u0013\\rd=\\u001Cg3;g;\\u001Ff\\u0014?g-\\u0016f3\\u0015h'\\u0004informaciC3nherramientaselectrC3nicodescripciC3nclasificadosconocimientopublicaciC3nrelacionadasinformC!ticarelacionadosdepartamentotrabajadoresdirectamenteayuntamientomercadoLibrecontC!ctenoshabitacionescumplimientorestaurantesdisposiciC3nconsecuenciaelectrC3nicaaplicacionesdesconectadoinstalaciC3nrealizaciC3nutilizaciC3nenciclopediaenfermedadesinstrumentosexperienciasinstituciC3nparticularessubcategoriaQ\\u0002P>P;Q\\u000CP:P>P P>Q\\u0001Q\\u0001P8P8Q\\u0000P0P1P>Q\\u0002Q\\u000BP1P>P;Q\\u000CQ\\u0008P5P?Q\\u0000P>Q\\u0001Q\\u0002P>P<P>P6P5Q\\u0002P5P4Q\\u0000Q\\u0003P3P8Q\\u0005Q\\u0001P;Q\\u0003Q\\u0007P0P5Q\\u0001P5P9Q\\u0007P0Q\\u0001P2Q\\u0001P5P3P4P0P P>Q\\u0001Q\\u0001P8Q\\u000FP\\u001CP>Q\\u0001P:P2P5P4Q\\u0000Q\\u0003P3P8P5P3P>Q\\u0000P>P4P0P2P>P?Q\\u0000P>Q\\u0001P4P0P=P=Q\\u000BQ\\u0005P4P>P;P6P=Q\\u000BP8P<P5P=P=P>P\\u001CP>Q\\u0001P:P2Q\\u000BQ\\u0000Q\\u0003P1P;P5P9P\\u001CP>Q\\u0001P:P2P0Q\\u0001Q\\u0002Q\\u0000P0P=Q\\u000BP=P8Q\\u0007P5P3P>Q\\u0000P0P1P>Q\\u0002P5P4P>P;P6P5P=Q\\u0003Q\\u0001P;Q\\u0003P3P8Q\\u0002P5P?P5Q\\u0000Q\\u000CP\\u001EP4P=P0P:P>P?P>Q\\u0002P>P<Q\\u0003Q\\u0000P0P1P>Q\\u0002Q\\u0003P0P?Q\\u0000P5P;Q\\u000FP2P>P>P1Q\\tP5P>P4P=P>P3P>Q\\u0001P2P>P5P3P>Q\\u0001Q\\u0002P0Q\\u0002Q\\u000CP8P4Q\\u0000Q\\u0003P3P>P9Q\\u0004P>Q\\u0000Q\\u0003P<P5Q\\u0005P>Q\\u0000P>Q\\u0008P>P?Q\\u0000P>Q\\u0002P8P2Q\\u0001Q\\u0001Q\\u000BP;P:P0P:P0P6P4Q\\u000BP9P2P;P0Q\\u0001Q\\u0002P8P3Q\\u0000Q\\u0003P?P?Q\\u000BP2P<P5Q\\u0001Q\\u0002P5Q\\u0000P0P1P>Q\\u0002P0Q\\u0001P:P0P7P0P;P?P5Q\\u0000P2Q\\u000BP9P4P5P;P0Q\\u0002Q\\u000CP4P5P=Q\\u000CP3P8P?P5Q\\u0000P8P>P4P1P8P7P=P5Q\\u0001P>Q\\u0001P=P>P2P5P<P>P<P5P=Q\\u0002P:Q\\u0003P?P8Q\\u0002Q\\u000CP4P>P;P6P=P0Q\\u0000P0P<P:P0Q\\u0005P=P0Q\\u0007P0P;P>P P0P1P>Q\\u0002P0P\\\"P>P;Q\\u000CP:P>Q\\u0001P>P2Q\\u0001P5P<P2Q\\u0002P>Q\\u0000P>P9P=P0Q\\u0007P0P;P0Q\\u0001P?P8Q\\u0001P>P:Q\\u0001P;Q\\u0003P6P1Q\\u000BQ\\u0001P8Q\\u0001Q\\u0002P5P<P?P5Q\\u0007P0Q\\u0002P8P=P>P2P>P3P>P?P>P<P>Q\\tP8Q\\u0001P0P9Q\\u0002P>P2P?P>Q\\u0007P5P<Q\\u0003P?P>P<P>Q\\tQ\\u000CP4P>P;P6P=P>Q\\u0001Q\\u0001Q\\u000BP;P:P8P1Q\\u000BQ\\u0001Q\\u0002Q\\u0000P>P4P0P=P=Q\\u000BP5P<P=P>P3P8P5P?Q\\u0000P>P5P:Q\\u0002P!P5P9Q\\u0007P0Q\\u0001P<P>P4P5P;P8Q\\u0002P0P:P>P3P>P>P=P;P0P9P=P3P>Q\\u0000P>P4P5P2P5Q\\u0000Q\\u0001P8Q\\u000FQ\\u0001Q\\u0002Q\\u0000P0P=P5Q\\u0004P8P;Q\\u000CP<Q\\u000BQ\\u0003Q\\u0000P>P2P=Q\\u000FQ\\u0000P0P7P=Q\\u000BQ\\u0005P8Q\\u0001P:P0Q\\u0002Q\\u000CP=P5P4P5P;Q\\u000EQ\\u000FP=P2P0Q\\u0000Q\\u000FP<P5P=Q\\u000CQ\\u0008P5P<P=P>P3P8Q\\u0005P4P0P=P=P>P9P7P=P0Q\\u0007P8Q\\u0002P=P5P;Q\\u000CP7Q\\u000FQ\\u0004P>Q\\u0000Q\\u0003P<P0P\\\"P5P?P5Q\\u0000Q\\u000CP<P5Q\\u0001Q\\u000FQ\\u0006P0P7P0Q\\tP8Q\\u0002Q\\u000BP\\u001BQ\\u0003Q\\u0007Q\\u0008P8P5`$(`$9`%\\u0000`$\\u0002`$\\u0015`$0`$(`%\\u0007`$\\u0005`$*`$(`%\\u0007`$\\u0015`$?`$/`$>`$\\u0015`$0`%\\u0007`$\\u0002`$\\u0005`$(`%\\r`$/`$\\u0015`%\\r`$/`$>`$\\u0017`$>`$\\u0007`$!`$,`$>`$0`%\\u0007`$\\u0015`$?`$8`%\\u0000`$&`$?`$/`$>`$*`$9`$2`%\\u0007`$8`$?`$\\u0002`$9`$-`$>`$0`$$`$\\u0005`$*`$(`%\\u0000`$5`$>`$2`%\\u0007`$8`%\\u0007`$5`$>`$\\u0015`$0`$$`%\\u0007`$.`%\\u0007`$0`%\\u0007`$9`%\\u000B`$(`%\\u0007`$8`$\\u0015`$$`%\\u0007`$,`$9`%\\u0001`$$`$8`$>`$\\u0007`$\\u001F`$9`%\\u000B`$\\u0017`$>`$\\u001C`$>`$(`%\\u0007`$.`$?`$(`$\\u001F`$\\u0015`$0`$$`$>`$\\u0015`$0`$(`$>`$\\t`$(`$\\u0015`%\\u0007`$/`$9`$>`$\\u0001`$8`$,`$8`%\\u0007`$-`$>`$7`$>`$\\u0006`$*`$\\u0015`%\\u0007`$2`$?`$/`%\\u0007`$6`%\\u0001`$0`%\\u0002`$\\u0007`$8`$\\u0015`%\\u0007`$\\u0018`$\\u0002`$\\u001F`%\\u0007`$.`%\\u0007`$0`%\\u0000`$8`$\\u0015`$$`$>`$.`%\\u0007`$0`$>`$2`%\\u0007`$\\u0015`$0`$\\u0005`$'`$?`$\\u0015`$\\u0005`$*`$(`$>`$8`$.`$>`$\\u001C`$.`%\\u0001`$\\u001D`%\\u0007`$\\u0015`$>`$0`$#`$9`%\\u000B`$$`$>`$\\u0015`$!`$<`%\\u0000`$/`$9`$>`$\\u0002`$9`%\\u000B`$\\u001F`$2`$6`$,`%\\r`$&`$2`$?`$/`$>`$\\u001C`%\\u0000`$5`$(`$\\u001C`$>`$$`$>`$\\u0015`%\\u0008`$8`%\\u0007`$\\u0006`$*`$\\u0015`$>`$5`$>`$2`%\\u0000`$&`%\\u0007`$(`%\\u0007`$*`%\\u0002`$0`%\\u0000`$*`$>`$(`%\\u0000`$\\t`$8`$\\u0015`%\\u0007`$9`%\\u000B`$\\u0017`%\\u0000`$,`%\\u0008`$ `$\\u0015`$\\u0006`$*`$\\u0015`%\\u0000`$5`$0`%\\r`$7`$\\u0017`$>`$\\u0002`$5`$\\u0006`$*`$\\u0015`%\\u000B`$\\u001C`$?`$2`$>`$\\u001C`$>`$(`$>`$8`$9`$.`$$`$9`$.`%\\u0007`$\\u0002`$\\t`$(`$\\u0015`%\\u0000`$/`$>`$9`%\\u0002`$&`$0`%\\r`$\\u001C`$8`%\\u0002`$\\u001A`%\\u0000`$*`$8`$\\u0002`$&`$8`$5`$>`$2`$9`%\\u000B`$(`$>`$9`%\\u000B`$$`%\\u0000`$\\u001C`%\\u0008`$8`%\\u0007`$5`$>`$*`$8`$\\u001C`$(`$$`$>`$(`%\\u0007`$$`$>`$\\u001C`$>`$0`%\\u0000`$\\u0018`$>`$/`$2`$\\u001C`$?`$2`%\\u0007`$(`%\\u0000`$\\u001A`%\\u0007`$\\u001C`$>`$\\u0002`$\\u001A`$*`$$`%\\r`$0`$\\u0017`%\\u0002`$\\u0017`$2`$\\u001C`$>`$$`%\\u0007`$,`$>`$9`$0`$\\u0006`$*`$(`%\\u0007`$5`$>`$9`$(`$\\u0007`$8`$\\u0015`$>`$8`%\\u0001`$,`$9`$0`$9`$(`%\\u0007`$\\u0007`$8`$8`%\\u0007`$8`$9`$?`$$`$,`$!`$<`%\\u0007`$\\u0018`$\\u001F`$(`$>`$$`$2`$>`$6`$*`$>`$\\u0002`$\\u001A`$6`%\\r`$0`%\\u0000`$,`$!`$<`%\\u0000`$9`%\\u000B`$$`%\\u0007`$8`$>`$\\u0008`$\\u001F`$6`$>`$/`$&`$8`$\\u0015`$$`%\\u0000`$\\u001C`$>`$$`%\\u0000`$5`$>`$2`$>`$9`$\\u001C`$>`$0`$*`$\\u001F`$(`$>`$0`$\\u0016`$(`%\\u0007`$8`$!`$<`$\\u0015`$.`$?`$2`$>`$\\t`$8`$\\u0015`%\\u0000`$\\u0015`%\\u0007`$5`$2`$2`$\\u0017`$$`$>`$\\u0016`$>`$(`$>`$\\u0005`$0`%\\r`$%`$\\u001C`$9`$>`$\\u0002`$&`%\\u0007`$\\u0016`$>`$*`$9`$2`%\\u0000`$(`$?`$/`$.`$,`$?`$(`$>`$,`%\\u0008`$\\u0002`$\\u0015`$\\u0015`$9`%\\u0000`$\\u0002`$\\u0015`$9`$(`$>`$&`%\\u0007`$$`$>`$9`$.`$2`%\\u0007`$\\u0015`$>`$+`%\\u0000`$\\u001C`$,`$\\u0015`$?`$$`%\\u0001`$0`$$`$.`$>`$\\u0002`$\\u0017`$5`$9`%\\u0000`$\\u0002`$0`%\\u000B`$\\u001C`$<`$.`$?`$2`%\\u0000`$\\u0006`$0`%\\u000B`$*`$8`%\\u0007`$(`$>`$/`$>`$&`$5`$2`%\\u0007`$(`%\\u0007`$\\u0016`$>`$$`$>`$\\u0015`$0`%\\u0000`$,`$\\t`$(`$\\u0015`$>`$\\u001C`$5`$>`$,`$*`%\\u0002`$0`$>`$,`$!`$<`$>`$8`%\\u000C`$&`$>`$6`%\\u0007`$/`$0`$\\u0015`$?`$/`%\\u0007`$\\u0015`$9`$>`$\\u0002`$\\u0005`$\\u0015`$8`$0`$,`$(`$>`$\\u000F`$5`$9`$>`$\\u0002`$8`%\\r`$%`$2`$.`$?`$2`%\\u0007`$2`%\\u0007`$\\u0016`$\\u0015`$5`$?`$7`$/`$\\u0015`%\\r`$0`$\\u0002`$8`$.`%\\u0002`$9`$%`$>`$(`$>X*X3X*X7Y\\nX9Y\\u0005X4X'X1Y\\u0003X)X(Y\\u0008X'X3X7X)X'Y\\u0004X5Y\\u0001X-X)Y\\u0005Y\\u0008X'X6Y\\nX9X'Y\\u0004X.X'X5X)X'Y\\u0004Y\\u0005X2Y\\nX/X'Y\\u0004X9X'Y\\u0005X)X'Y\\u0004Y\\u0003X'X*X(X'Y\\u0004X1X/Y\\u0008X/X(X1Y\\u0006X'Y\\u0005X,X'Y\\u0004X/Y\\u0008Y\\u0004X)X'Y\\u0004X9X'Y\\u0004Y\\u0005X'Y\\u0004Y\\u0005Y\\u0008Y\\u0002X9X'Y\\u0004X9X1X(Y\\nX'Y\\u0004X3X1Y\\nX9X'Y\\u0004X,Y\\u0008X'Y\\u0004X'Y\\u0004X0Y\\u0007X'X(X'Y\\u0004X-Y\\nX'X)X'Y\\u0004X-Y\\u0002Y\\u0008Y\\u0002X'Y\\u0004Y\\u0003X1Y\\nY\\u0005X'Y\\u0004X9X1X'Y\\u0002Y\\u0005X-Y\\u0001Y\\u0008X8X)X'Y\\u0004X+X'Y\\u0006Y\\nY\\u0005X4X'Y\\u0007X/X)X'Y\\u0004Y\\u0005X1X#X)X'Y\\u0004Y\\u0002X1X\\\"Y\\u0006X'Y\\u0004X4X(X'X(X'Y\\u0004X-Y\\u0008X'X1X'Y\\u0004X,X/Y\\nX/X'Y\\u0004X#X3X1X)X'Y\\u0004X9Y\\u0004Y\\u0008Y\\u0005Y\\u0005X,Y\\u0005Y\\u0008X9X)X'Y\\u0004X1X-Y\\u0005Y\\u0006X'Y\\u0004Y\\u0006Y\\u0002X'X7Y\\u0001Y\\u0004X3X7Y\\nY\\u0006X'Y\\u0004Y\\u0003Y\\u0008Y\\nX*X'Y\\u0004X/Y\\u0006Y\\nX'X(X1Y\\u0003X'X*Y\\u0007X'Y\\u0004X1Y\\nX'X6X*X-Y\\nX'X*Y\\nX(X*Y\\u0008Y\\u0002Y\\nX*X'Y\\u0004X#Y\\u0008Y\\u0004Y\\tX'Y\\u0004X(X1Y\\nX/X'Y\\u0004Y\\u0003Y\\u0004X'Y\\u0005X'Y\\u0004X1X'X(X7X'Y\\u0004X4X.X5Y\\nX3Y\\nX'X1X'X*X'Y\\u0004X+X'Y\\u0004X+X'Y\\u0004X5Y\\u0004X'X)X'Y\\u0004X-X/Y\\nX+X'Y\\u0004X2Y\\u0008X'X1X'Y\\u0004X.Y\\u0004Y\\nX,X'Y\\u0004X,Y\\u0005Y\\nX9X'Y\\u0004X9X'Y\\u0005Y\\u0007X'Y\\u0004X,Y\\u0005X'Y\\u0004X'Y\\u0004X3X'X9X)Y\\u0005X4X'Y\\u0007X/Y\\u0007X'Y\\u0004X1X&Y\\nX3X'Y\\u0004X/X.Y\\u0008Y\\u0004X'Y\\u0004Y\\u0001Y\\u0006Y\\nX)X'Y\\u0004Y\\u0003X*X'X(X'Y\\u0004X/Y\\u0008X1Y\\nX'Y\\u0004X/X1Y\\u0008X3X'X3X*X:X1Y\\u0002X*X5X'Y\\u0005Y\\nY\\u0005X'Y\\u0004X(Y\\u0006X'X*X'Y\\u0004X9X8Y\\nY\\u0005entertainmentunderstanding = function().jpg\\\" width=\\\"configuration.png\\\" width=\\\"<body class=\\\"Math.random()contemporary United Statescircumstances.appendChild(organizations<span class=\\\"\\\"><img src=\\\"/distinguishedthousands of communicationclear\\\"></div>investigationfavicon.ico\\\" margin-right:based on the Massachusettstable border=internationalalso known aspronunciationbackground:#fpadding-left:For example, miscellaneous&lt;/math&gt;psychologicalin particularearch\\\" type=\\\"form method=\\\"as opposed toSupreme Courtoccasionally Additionally,North Americapx;backgroundopportunitiesEntertainment.toLowerCase(manufacturingprofessional combined withFor instance,consisting of\\\" maxlength=\\\"return false;consciousnessMediterraneanextraordinaryassassinationsubsequently button type=\\\"the number ofthe original comprehensiverefers to the</ul>\\n</div>\\nphilosophicallocation.hrefwas publishedSan Francisco(function(){\\n<div id=\\\"mainsophisticatedmathematical /head>\\r\\n<bodysuggests thatdocumentationconcentrationrelationshipsmay have been(for example,This article in some casesparts of the definition ofGreat Britain cellpadding=equivalent toplaceholder=\\\"; font-size: justificationbelieved thatsuffered fromattempted to leader of thecript\\\" src=\\\"/(function() {are available\\n\\t<link rel=\\\" src='http://interested inconventional \\\" alt=\\\"\\\" /></are generallyhas also beenmost popular correspondingcredited withtyle=\\\"border:</a></span></.gif\\\" width=\\\"<iframe src=\\\"table class=\\\"inline-block;according to together withapproximatelyparliamentarymore and moredisplay:none;traditionallypredominantly&nbsp;|&nbsp;&nbsp;</span> cellspacing=<input name=\\\"or\\\" content=\\\"controversialproperty=\\\"og:/x-shockwave-demonstrationsurrounded byNevertheless,was the firstconsiderable Although the collaborationshould not beproportion of<span style=\\\"known as the shortly afterfor instance,described as /head>\\n<body starting withincreasingly the fact thatdiscussion ofmiddle of thean individualdifficult to point of viewhomosexualityacceptance of</span></div>manufacturersorigin of thecommonly usedimportance ofdenominationsbackground: #length of thedeterminationa significant\\\" border=\\\"0\\\">revolutionaryprinciples ofis consideredwas developedIndo-Europeanvulnerable toproponents ofare sometimescloser to theNew York City name=\\\"searchattributed tocourse of themathematicianby the end ofat the end of\\\" border=\\\"0\\\" technological.removeClass(branch of theevidence that![endif]-->\\r\\nInstitute of into a singlerespectively.and thereforeproperties ofis located insome of whichThere is alsocontinued to appearance of &amp;ndash; describes theconsiderationauthor of theindependentlyequipped withdoes not have</a><a href=\\\"confused with<link href=\\\"/at the age ofappear in theThese includeregardless ofcould be used style=&quot;several timesrepresent thebody>\\n</html>thought to bepopulation ofpossibilitiespercentage ofaccess to thean attempt toproduction ofjquery/jquerytwo differentbelong to theestablishmentreplacing thedescription\\\" determine theavailable forAccording to wide range of\\t<div class=\\\"more commonlyorganisationsfunctionalitywas completed &amp;mdash; participationthe characteran additionalappears to befact that thean example ofsignificantlyonmouseover=\\\"because they async = true;problems withseems to havethe result of src=\\\"http://familiar withpossession offunction () {took place inand sometimessubstantially<span></span>is often usedin an attemptgreat deal ofEnvironmentalsuccessfully virtually all20th century,professionalsnecessary to determined bycompatibilitybecause it isDictionary ofmodificationsThe followingmay refer to:Consequently,Internationalalthough somethat would beworld's firstclassified asbottom of the(particularlyalign=\\\"left\\\" most commonlybasis for thefoundation ofcontributionspopularity ofcenter of theto reduce thejurisdictionsapproximation onmouseout=\\\"New Testamentcollection of</span></a></in the Unitedfilm director-strict.dtd\\\">has been usedreturn to thealthough thischange in theseveral otherbut there areunprecedentedis similar toespecially inweight: bold;is called thecomputationalindicate thatrestricted to\\t<meta name=\\\"are typicallyconflict withHowever, the An example ofcompared withquantities ofrather than aconstellationnecessary forreported thatspecificationpolitical and&nbsp;&nbsp;<references tothe same yearGovernment ofgeneration ofhave not beenseveral yearscommitment to\\t\\t<ul class=\\\"visualization19th century,practitionersthat he wouldand continuedoccupation ofis defined ascentre of thethe amount of><div style=\\\"equivalent ofdifferentiatebrought aboutmargin-left: automaticallythought of asSome of these\\n<div class=\\\"input class=\\\"replaced withis one of theeducation andinfluenced byreputation as\\n<meta name=\\\"accommodation</div>\\n</div>large part ofInstitute forthe so-called against the In this case,was appointedclaimed to beHowever, thisDepartment ofthe remainingeffect on theparticularly deal with the\\n<div style=\\\"almost alwaysare currentlyexpression ofphilosophy offor more thancivilizationson the islandselectedIndexcan result in\\\" value=\\\"\\\" />the structure /></a></div>Many of thesecaused by theof the Unitedspan class=\\\"mcan be tracedis related tobecame one ofis frequentlyliving in thetheoreticallyFollowing theRevolutionarygovernment inis determinedthe politicalintroduced insufficient todescription\\\">short storiesseparation ofas to whetherknown for itswas initiallydisplay:blockis an examplethe principalconsists of arecognized as/body></html>a substantialreconstructedhead of stateresistance toundergraduateThere are twogravitationalare describedintentionallyserved as theclass=\\\"headeropposition tofundamentallydominated theand the otheralliance withwas forced torespectively,and politicalin support ofpeople in the20th century.and publishedloadChartbeatto understandmember statesenvironmentalfirst half ofcountries andarchitecturalbe consideredcharacterizedclearIntervalauthoritativeFederation ofwas succeededand there area consequencethe Presidentalso includedfree softwaresuccession ofdeveloped thewas destroyedaway from the;\\n</script>\\n<although theyfollowed by amore powerfulresulted in aUniversity ofHowever, manythe presidentHowever, someis thought tountil the endwas announcedare importantalso includes><input type=the center of DO NOT ALTERused to referthemes/?sort=that had beenthe basis forhas developedin the summercomparativelydescribed thesuch as thosethe resultingis impossiblevarious otherSouth Africanhave the sameeffectivenessin which case; text-align:structure and; background:regarding thesupported theis also knownstyle=\\\"marginincluding thebahasa Melayunorsk bokmC%lnorsk nynorskslovenE!D\\rinainternacionalcalificaciC3ncomunicaciC3nconstrucciC3n\\\"><div class=\\\"disambiguationDomainName', 'administrationsimultaneouslytransportationInternational margin-bottom:responsibility<![endif]-->\\n</><meta name=\\\"implementationinfrastructurerepresentationborder-bottom:</head>\\n<body>=http%3A%2F%2F<form method=\\\"method=\\\"post\\\" /favicon.ico\\\" });\\n</script>\\n.setAttribute(Administration= new Array();<![endif]-->\\r\\ndisplay:block;Unfortunately,\\\">&nbsp;</div>/favicon.ico\\\">='stylesheet' identification, for example,<li><a href=\\\"/an alternativeas a result ofpt\\\"></script>\\ntype=\\\"submit\\\" \\n(function() {recommendationform action=\\\"/transformationreconstruction.style.display According to hidden\\\" name=\\\"along with thedocument.body.approximately Communicationspost\\\" action=\\\"meaning &quot;--<![endif]-->Prime Ministercharacteristic</a> <a class=the history of onmouseover=\\\"the governmenthref=\\\"https://was originallywas introducedclassificationrepresentativeare considered<![endif]-->\\n\\ndepends on theUniversity of in contrast to placeholder=\\\"in the case ofinternational constitutionalstyle=\\\"border-: function() {Because of the-strict.dtd\\\">\\n<table class=\\\"accompanied byaccount of the<script src=\\\"/nature of the the people in in addition tos); js.id = id\\\" width=\\\"100%\\\"regarding the Roman Catholican independentfollowing the .gif\\\" width=\\\"1the following discriminationarchaeologicalprime minister.js\\\"></script>combination of marginwidth=\\\"createElement(w.attachEvent(</a></td></tr>src=\\\"https://aIn particular, align=\\\"left\\\" Czech RepublicUnited Kingdomcorrespondenceconcluded that.html\\\" title=\\\"(function () {comes from theapplication of<span class=\\\"sbelieved to beement('script'</a>\\n</li>\\n<livery different><span class=\\\"option value=\\\"(also known as\\t<li><a href=\\\"><input name=\\\"separated fromreferred to as valign=\\\"top\\\">founder of theattempting to carbon dioxide\\n\\n<div class=\\\"class=\\\"search-/body>\\n</html>opportunity tocommunications</head>\\r\\n<body style=\\\"width:Tia:?ng Via;\\u0007tchanges in theborder-color:#0\\\" border=\\\"0\\\" </span></div><was discovered\\\" type=\\\"text\\\" );\\n</script>\\n\\nDepartment of ecclesiasticalthere has beenresulting from</body></html>has never beenthe first timein response toautomatically </div>\\n\\n<div iwas consideredpercent of the\\\" /></a></div>collection of descended fromsection of theaccept-charsetto be confusedmember of the padding-right:translation ofinterpretation href='http://whether or notThere are alsothere are manya small numberother parts ofimpossible to  class=\\\"buttonlocated in the. However, theand eventuallyAt the end of because of itsrepresents the<form action=\\\" method=\\\"post\\\"it is possiblemore likely toan increase inhave also beencorresponds toannounced thatalign=\\\"right\\\">many countriesfor many yearsearliest knownbecause it waspt\\\"></script>\\r valign=\\\"top\\\" inhabitants offollowing year\\r\\n<div class=\\\"million peoplecontroversial concerning theargue that thegovernment anda reference totransferred todescribing the style=\\\"color:although therebest known forsubmit\\\" name=\\\"multiplicationmore than one recognition ofCouncil of theedition of the  <meta name=\\\"Entertainment away from the ;margin-right:at the time ofinvestigationsconnected withand many otheralthough it isbeginning with <span class=\\\"descendants of<span class=\\\"i align=\\\"right\\\"</head>\\n<body aspects of thehas since beenEuropean Unionreminiscent ofmore difficultVice Presidentcomposition ofpassed throughmore importantfont-size:11pxexplanation ofthe concept ofwritten in the\\t<span class=\\\"is one of the resemblance toon the groundswhich containsincluding the defined by thepublication ofmeans that theoutside of thesupport of the<input class=\\\"<span class=\\\"t(Math.random()most prominentdescription ofConstantinoplewere published<div class=\\\"seappears in the1\\\" height=\\\"1\\\" most importantwhich includeswhich had beendestruction ofthe population\\n\\t<div class=\\\"possibility ofsometimes usedappear to havesuccess of theintended to bepresent in thestyle=\\\"clear:b\\r\\n</script>\\r\\n<was founded ininterview with_id\\\" content=\\\"capital of the\\r\\n<link rel=\\\"srelease of thepoint out thatxMLHttpRequestand subsequentsecond largestvery importantspecificationssurface of theapplied to theforeign policy_setDomainNameestablished inis believed toIn addition tomeaning of theis named afterto protect theis representedDeclaration ofmore efficientClassificationother forms ofhe returned to<span class=\\\"cperformance of(function() {\\rif and only ifregions of theleading to therelations withUnited Nationsstyle=\\\"height:other than theype\\\" content=\\\"Association of\\n</head>\\n<bodylocated on theis referred to(including theconcentrationsthe individualamong the mostthan any other/>\\n<link rel=\\\" return false;the purpose ofthe ability to;color:#fff}\\n.\\n<span class=\\\"the subject ofdefinitions of>\\r\\n<link rel=\\\"claim that thehave developed<table width=\\\"celebration ofFollowing the to distinguish<span class=\\\"btakes place inunder the namenoted that the><![endif]-->\\nstyle=\\\"margin-instead of theintroduced thethe process ofincreasing thedifferences inestimated thatespecially the/div><div id=\\\"was eventuallythroughout histhe differencesomething thatspan></span></significantly ></script>\\r\\n\\r\\nenvironmental to prevent thehave been usedespecially forunderstand theis essentiallywere the firstis the largesthave been made\\\" src=\\\"http://interpreted assecond half ofcrolling=\\\"no\\\" is composed ofII, Holy Romanis expected tohave their owndefined as thetraditionally have differentare often usedto ensure thatagreement withcontaining theare frequentlyinformation onexample is theresulting in a</a></li></ul> class=\\\"footerand especiallytype=\\\"button\\\" </span></span>which included>\\n<meta name=\\\"considered thecarried out byHowever, it isbecame part ofin relation topopular in thethe capital ofwas officiallywhich has beenthe History ofalternative todifferent fromto support thesuggested thatin the process  <div class=\\\"the foundationbecause of hisconcerned withthe universityopposed to thethe context of<span class=\\\"ptext\\\" name=\\\"q\\\"\\t\\t<div class=\\\"the scientificrepresented bymathematicianselected by thethat have been><div class=\\\"cdiv id=\\\"headerin particular,converted into);\\n</script>\\n<philosophical srpskohrvatskitia:?ng Via;\\u0007tP Q\\u0003Q\\u0001Q\\u0001P:P8P9Q\\u0000Q\\u0003Q\\u0001Q\\u0001P:P8P9investigaciC3nparticipaciC3nP:P>Q\\u0002P>Q\\u0000Q\\u000BP5P>P1P;P0Q\\u0001Q\\u0002P8P:P>Q\\u0002P>Q\\u0000Q\\u000BP9Q\\u0007P5P;P>P2P5P:Q\\u0001P8Q\\u0001Q\\u0002P5P<Q\\u000BP\\u001DP>P2P>Q\\u0001Q\\u0002P8P:P>Q\\u0002P>Q\\u0000Q\\u000BQ\\u0005P>P1P;P0Q\\u0001Q\\u0002Q\\u000CP2Q\\u0000P5P<P5P=P8P:P>Q\\u0002P>Q\\u0000P0Q\\u000FQ\\u0001P5P3P>P4P=Q\\u000FQ\\u0001P:P0Q\\u0007P0Q\\u0002Q\\u000CP=P>P2P>Q\\u0001Q\\u0002P8P#P:Q\\u0000P0P8P=Q\\u000BP2P>P?Q\\u0000P>Q\\u0001Q\\u000BP:P>Q\\u0002P>Q\\u0000P>P9Q\\u0001P4P5P;P0Q\\u0002Q\\u000CP?P>P<P>Q\\tQ\\u000CQ\\u000EQ\\u0001Q\\u0000P5P4Q\\u0001Q\\u0002P2P>P1Q\\u0000P0P7P>P<Q\\u0001Q\\u0002P>Q\\u0000P>P=Q\\u000BQ\\u0003Q\\u0007P0Q\\u0001Q\\u0002P8P5Q\\u0002P5Q\\u0007P5P=P8P5P\\u0013P;P0P2P=P0Q\\u000FP8Q\\u0001Q\\u0002P>Q\\u0000P8P8Q\\u0001P8Q\\u0001Q\\u0002P5P<P0Q\\u0000P5Q\\u0008P5P=P8Q\\u000FP!P:P0Q\\u0007P0Q\\u0002Q\\u000CP?P>Q\\rQ\\u0002P>P<Q\\u0003Q\\u0001P;P5P4Q\\u0003P5Q\\u0002Q\\u0001P:P0P7P0Q\\u0002Q\\u000CQ\\u0002P>P2P0Q\\u0000P>P2P:P>P=P5Q\\u0007P=P>Q\\u0000P5Q\\u0008P5P=P8P5P:P>Q\\u0002P>Q\\u0000P>P5P>Q\\u0000P3P0P=P>P2P:P>Q\\u0002P>Q\\u0000P>P<P P5P:P;P0P<P0X'Y\\u0004Y\\u0005Y\\u0006X*X/Y\\tY\\u0005Y\\u0006X*X/Y\\nX'X*X'Y\\u0004Y\\u0005Y\\u0008X6Y\\u0008X9X'Y\\u0004X(X1X'Y\\u0005X,X'Y\\u0004Y\\u0005Y\\u0008X'Y\\u0002X9X'Y\\u0004X1X3X'X&Y\\u0004Y\\u0005X4X'X1Y\\u0003X'X*X'Y\\u0004X#X9X6X'X!X'Y\\u0004X1Y\\nX'X6X)X'Y\\u0004X*X5Y\\u0005Y\\nY\\u0005X'Y\\u0004X'X9X6X'X!X'Y\\u0004Y\\u0006X*X'X&X,X'Y\\u0004X#Y\\u0004X9X'X(X'Y\\u0004X*X3X,Y\\nY\\u0004X'Y\\u0004X#Y\\u0002X3X'Y\\u0005X'Y\\u0004X6X:X7X'X*X'Y\\u0004Y\\u0001Y\\nX/Y\\nY\\u0008X'Y\\u0004X*X1X-Y\\nX(X'Y\\u0004X,X/Y\\nX/X)X'Y\\u0004X*X9Y\\u0004Y\\nY\\u0005X'Y\\u0004X#X.X(X'X1X'Y\\u0004X'Y\\u0001Y\\u0004X'Y\\u0005X'Y\\u0004X#Y\\u0001Y\\u0004X'Y\\u0005X'Y\\u0004X*X'X1Y\\nX.X'Y\\u0004X*Y\\u0002Y\\u0006Y\\nX)X'Y\\u0004X'Y\\u0004X9X'X(X'Y\\u0004X.Y\\u0008X'X7X1X'Y\\u0004Y\\u0005X,X*Y\\u0005X9X'Y\\u0004X/Y\\nY\\u0003Y\\u0008X1X'Y\\u0004X3Y\\nX'X-X)X9X(X/X'Y\\u0004Y\\u0004Y\\u0007X'Y\\u0004X*X1X(Y\\nX)X'Y\\u0004X1Y\\u0008X'X(X7X'Y\\u0004X#X/X(Y\\nX)X'Y\\u0004X'X.X(X'X1X'Y\\u0004Y\\u0005X*X-X/X)X'Y\\u0004X'X:X'Y\\u0006Y\\ncursor:pointer;</title>\\n<meta \\\" href=\\\"http://\\\"><span class=\\\"members of the window.locationvertical-align:/a> | <a href=\\\"<!doctype html>media=\\\"screen\\\" <option value=\\\"favicon.ico\\\" />\\n\\t\\t<div class=\\\"characteristics\\\" method=\\\"get\\\" /body>\\n</html>\\nshortcut icon\\\" document.write(padding-bottom:representativessubmit\\\" value=\\\"align=\\\"center\\\" throughout the science fiction\\n  <div class=\\\"submit\\\" class=\\\"one of the most valign=\\\"top\\\"><was established);\\r\\n</script>\\r\\nreturn false;\\\">).style.displaybecause of the document.cookie<form action=\\\"/}body{margin:0;Encyclopedia ofversion of the .createElement(name\\\" content=\\\"</div>\\n</div>\\n\\nadministrative </body>\\n</html>history of the \\\"><input type=\\\"portion of the as part of the &nbsp;<a href=\\\"other countries\\\">\\n<div class=\\\"</span></span><In other words,display: block;control of the introduction of/>\\n<meta name=\\\"as well as the in recent years\\r\\n\\t<div class=\\\"</div>\\n\\t</div>\\ninspired by thethe end of the compatible withbecame known as style=\\\"margin:.js\\\"></script>< International there have beenGerman language style=\\\"color:#Communist Partyconsistent withborder=\\\"0\\\" cell marginheight=\\\"the majority of\\\" align=\\\"centerrelated to the many different Orthodox Churchsimilar to the />\\n<link rel=\\\"swas one of the until his death})();\\n</script>other languagescompared to theportions of thethe Netherlandsthe most commonbackground:url(argued that thescrolling=\\\"no\\\" included in theNorth American the name of theinterpretationsthe traditionaldevelopment of frequently useda collection ofvery similar tosurrounding theexample of thisalign=\\\"center\\\">would have beenimage_caption =attached to thesuggesting thatin the form of involved in theis derived fromnamed after theIntroduction torestrictions on style=\\\"width: can be used to the creation ofmost important information andresulted in thecollapse of theThis means thatelements of thewas replaced byanalysis of theinspiration forregarded as themost successfulknown as &quot;a comprehensiveHistory of the were consideredreturned to theare referred toUnsourced image>\\n\\t<div class=\\\"consists of thestopPropagationinterest in theavailability ofappears to haveelectromagneticenableServices(function of theIt is important</script></div>function(){var relative to theas a result of the position ofFor example, in method=\\\"post\\\" was followed by&amp;mdash; thethe applicationjs\\\"></script>\\r\\nul></div></div>after the deathwith respect tostyle=\\\"padding:is particularlydisplay:inline; type=\\\"submit\\\" is divided intod8-f\\u0016\\u0007 (g.\\u0000d=\\u0013)responsabilidadadministraciC3ninternacionalescorrespondiente`$\\t`$*`$/`%\\u000B`$\\u0017`$*`%\\u0002`$0`%\\r`$5`$9`$.`$>`$0`%\\u0007`$2`%\\u000B`$\\u0017`%\\u000B`$\\u0002`$\\u001A`%\\u0001`$(`$>`$5`$2`%\\u0007`$\\u0015`$?`$(`$8`$0`$\\u0015`$>`$0`$*`%\\u0001`$2`$?`$8`$\\u0016`%\\u000B`$\\u001C`%\\u0007`$\\u0002`$\\u001A`$>`$9`$?`$\\u000F`$-`%\\u0007`$\\u001C`%\\u0007`$\\u0002`$6`$>`$.`$?`$2`$9`$.`$>`$0`%\\u0000`$\\u001C`$>`$\\u0017`$0`$#`$,`$(`$>`$(`%\\u0007`$\\u0015`%\\u0001`$.`$>`$0`$,`%\\r`$2`%\\t`$\\u0017`$.`$>`$2`$?`$\\u0015`$.`$9`$?`$2`$>`$*`%\\u0003`$7`%\\r`$ `$,`$\\\"`$<`$$`%\\u0007`$-`$>`$\\u001C`$*`$>`$\\u0015`%\\r`$2`$?`$\\u0015`$\\u001F`%\\r`$0`%\\u0007`$(`$\\u0016`$?`$2`$>`$+`$&`%\\u000C`$0`$>`$(`$.`$>`$.`$2`%\\u0007`$.`$$`$&`$>`$(`$,`$>`$\\u001C`$>`$0`$5`$?`$\\u0015`$>`$8`$\\u0015`%\\r`$/`%\\u000B`$\\u0002`$\\u001A`$>`$9`$$`%\\u0007`$*`$9`%\\u0001`$\\u0001`$\\u001A`$,`$$`$>`$/`$>`$8`$\\u0002`$5`$>`$&`$&`%\\u0007`$\\u0016`$(`%\\u0007`$*`$?`$\\u001B`$2`%\\u0007`$5`$?`$6`%\\u0007`$7`$0`$>`$\\u001C`%\\r`$/`$\\t`$$`%\\r`$$`$0`$.`%\\u0001`$\\u0002`$,`$\\u0008`$&`%\\u000B`$(`%\\u000B`$\\u0002`$\\t`$*`$\\u0015`$0`$#`$*`$\\\"`$<`%\\u0007`$\\u0002`$8`%\\r`$%`$?`$$`$+`$?`$2`%\\r`$.`$.`%\\u0001`$\\u0016`%\\r`$/`$\\u0005`$\\u001A`%\\r`$\\u001B`$>`$\\u001B`%\\u0002`$\\u001F`$$`%\\u0000`$8`$\\u0002`$\\u0017`%\\u0000`$$`$\\u001C`$>`$\\u000F`$\\u0017`$>`$5`$?`$-`$>`$\\u0017`$\\u0018`$#`%\\r`$\\u001F`%\\u0007`$&`%\\u0002`$8`$0`%\\u0007`$&`$?`$(`%\\u000B`$\\u0002`$9`$$`%\\r`$/`$>`$8`%\\u0007`$\\u0015`%\\r`$8`$\\u0017`$>`$\\u0002`$'`%\\u0000`$5`$?`$6`%\\r`$5`$0`$>`$$`%\\u0007`$\\u0002`$&`%\\u0008`$\\u001F`%\\r`$8`$(`$\\u0015`%\\r`$6`$>`$8`$>`$.`$(`%\\u0007`$\\u0005`$&`$>`$2`$$`$,`$?`$\\u001C`$2`%\\u0000`$*`%\\u0001`$0`%\\u0002`$7`$9`$?`$\\u0002`$&`%\\u0000`$.`$?`$$`%\\r`$0`$\\u0015`$5`$?`$$`$>`$0`%\\u0001`$*`$/`%\\u0007`$8`%\\r`$%`$>`$(`$\\u0015`$0`%\\u000B`$!`$<`$.`%\\u0001`$\\u0015`%\\r`$$`$/`%\\u000B`$\\u001C`$(`$>`$\\u0015`%\\u0003`$*`$/`$>`$*`%\\u000B`$8`%\\r`$\\u001F`$\\u0018`$0`%\\u0007`$2`%\\u0002`$\\u0015`$>`$0`%\\r`$/`$5`$?`$\\u001A`$>`$0`$8`%\\u0002`$\\u001A`$(`$>`$.`%\\u0002`$2`%\\r`$/`$&`%\\u0007`$\\u0016`%\\u0007`$\\u0002`$9`$.`%\\u0007`$6`$>`$8`%\\r`$\\u0015`%\\u0002`$2`$.`%\\u0008`$\\u0002`$(`%\\u0007`$$`%\\u0008`$/`$>`$0`$\\u001C`$?`$8`$\\u0015`%\\u0007rss+xml\\\" title=\\\"-type\\\" content=\\\"title\\\" content=\\\"at the same time.js\\\"></script>\\n<\\\" method=\\\"post\\\" </span></a></li>vertical-align:t/jquery.min.js\\\">.click(function( style=\\\"padding-})();\\n</script>\\n</span><a href=\\\"<a href=\\\"http://); return false;text-decoration: scrolling=\\\"no\\\" border-collapse:associated with Bahasa IndonesiaEnglish language<text xml:space=.gif\\\" border=\\\"0\\\"</body>\\n</html>\\noverflow:hidden;img src=\\\"http://addEventListenerresponsible for s.js\\\"></script>\\n/favicon.ico\\\" />operating system\\\" style=\\\"width:1target=\\\"_blank\\\">State Universitytext-align:left;\\ndocument.write(, including the around the world);\\r\\n</script>\\r\\n<\\\" style=\\\"height:;overflow:hiddenmore informationan internationala member of the one of the firstcan be found in </div>\\n\\t\\t</div>\\ndisplay: none;\\\">\\\" />\\n<link rel=\\\"\\n  (function() {the 15th century.preventDefault(large number of Byzantine Empire.jpg|thumb|left|vast majority ofmajority of the  align=\\\"center\\\">University Pressdominated by theSecond World Wardistribution of style=\\\"position:the rest of the characterized by rel=\\\"nofollow\\\">derives from therather than the a combination ofstyle=\\\"width:100English-speakingcomputer scienceborder=\\\"0\\\" alt=\\\"the existence ofDemocratic Party\\\" style=\\\"margin-For this reason,.js\\\"></script>\\n\\tsByTagName(s)[0]js\\\"></script>\\r\\n<.js\\\"></script>\\r\\nlink rel=\\\"icon\\\" ' alt='' class='formation of theversions of the </a></div></div>/page>\\n  <page>\\n<div class=\\\"contbecame the firstbahasa Indonesiaenglish (simple)N\\u0015N;N;N7N=N9N:N,Q\\u0005Q\\u0000P2P0Q\\u0002Q\\u0001P:P8P:P>P<P?P0P=P8P8Q\\u000FP2P;Q\\u000FP5Q\\u0002Q\\u0001Q\\u000FP\\u0014P>P1P0P2P8Q\\u0002Q\\u000CQ\\u0007P5P;P>P2P5P:P0Q\\u0000P0P7P2P8Q\\u0002P8Q\\u000FP\\u0018P=Q\\u0002P5Q\\u0000P=P5Q\\u0002P\\u001EQ\\u0002P2P5Q\\u0002P8Q\\u0002Q\\u000CP=P0P?Q\\u0000P8P<P5Q\\u0000P8P=Q\\u0002P5Q\\u0000P=P5Q\\u0002P:P>Q\\u0002P>Q\\u0000P>P3P>Q\\u0001Q\\u0002Q\\u0000P0P=P8Q\\u0006Q\\u000BP:P0Q\\u0007P5Q\\u0001Q\\u0002P2P5Q\\u0003Q\\u0001P;P>P2P8Q\\u000FQ\\u0005P?Q\\u0000P>P1P;P5P<Q\\u000BP?P>P;Q\\u0003Q\\u0007P8Q\\u0002Q\\u000CQ\\u000FP2P;Q\\u000FQ\\u000EQ\\u0002Q\\u0001Q\\u000FP=P0P8P1P>P;P5P5P:P>P<P?P0P=P8Q\\u000FP2P=P8P<P0P=P8P5Q\\u0001Q\\u0000P5P4Q\\u0001Q\\u0002P2P0X'Y\\u0004Y\\u0005Y\\u0008X'X6Y\\nX9X'Y\\u0004X1X&Y\\nX3Y\\nX)X'Y\\u0004X'Y\\u0006X*Y\\u0002X'Y\\u0004Y\\u0005X4X'X1Y\\u0003X'X*Y\\u0003X'Y\\u0004X3Y\\nX'X1X'X*X'Y\\u0004Y\\u0005Y\\u0003X*Y\\u0008X(X)X'Y\\u0004X3X9Y\\u0008X/Y\\nX)X'X-X5X'X&Y\\nX'X*X'Y\\u0004X9X'Y\\u0004Y\\u0005Y\\nX)X'Y\\u0004X5Y\\u0008X*Y\\nX'X*X'Y\\u0004X'Y\\u0006X*X1Y\\u0006X*X'Y\\u0004X*X5X'Y\\u0005Y\\nY\\u0005X'Y\\u0004X%X3Y\\u0004X'Y\\u0005Y\\nX'Y\\u0004Y\\u0005X4X'X1Y\\u0003X)X'Y\\u0004Y\\u0005X1X&Y\\nX'X*robots\\\" content=\\\"<div id=\\\"footer\\\">the United States<img src=\\\"http://.jpg|right|thumb|.js\\\"></script>\\r\\n<location.protocolframeborder=\\\"0\\\" s\\\" />\\n<meta name=\\\"</a></div></div><font-weight:bold;&quot; and &quot;depending on the margin:0;padding:\\\" rel=\\\"nofollow\\\" President of the twentieth centuryevision>\\n  </pageInternet Explorera.async = true;\\r\\ninformation about<div id=\\\"header\\\">\\\" action=\\\"http://<a href=\\\"https://<div id=\\\"content\\\"</div>\\r\\n</div>\\r\\n<derived from the <img src='http://according to the \\n</body>\\n</html>\\nstyle=\\\"font-size:script language=\\\"Arial, Helvetica,</a><span class=\\\"</script><script political partiestd></tr></table><href=\\\"http://www.interpretation ofrel=\\\"stylesheet\\\" document.write('<charset=\\\"utf-8\\\">\\nbeginning of the revealed that thetelevision series\\\" rel=\\\"nofollow\\\"> target=\\\"_blank\\\">claiming that thehttp%3A%2F%2Fwww.manifestations ofPrime Minister ofinfluenced by theclass=\\\"clearfix\\\">/div>\\r\\n</div>\\r\\n\\r\\nthree-dimensionalChurch of Englandof North Carolinasquare kilometres.addEventListenerdistinct from thecommonly known asPhonetic Alphabetdeclared that thecontrolled by theBenjamin Franklinrole-playing gamethe University ofin Western Europepersonal computerProject Gutenbergregardless of thehas been proposedtogether with the></li><li class=\\\"in some countriesmin.js\\\"></script>of the populationofficial language<img src=\\\"images/identified by thenatural resourcesclassification ofcan be consideredquantum mechanicsNevertheless, themillion years ago</body>\\r\\n</html>\\rN\\u0015N;N;N7N=N9N:N,\\ntake advantage ofand, according toattributed to theMicrosoft Windowsthe first centuryunder the controldiv class=\\\"headershortly after thenotable exceptiontens of thousandsseveral differentaround the world.reaching militaryisolated from theopposition to thethe Old TestamentAfrican Americansinserted into theseparate from themetropolitan areamakes it possibleacknowledged thatarguably the mosttype=\\\"text/css\\\">\\nthe InternationalAccording to the pe=\\\"text/css\\\" />\\ncoincide with thetwo-thirds of theDuring this time,during the periodannounced that hethe internationaland more recentlybelieved that theconsciousness andformerly known assurrounded by thefirst appeared inoccasionally usedposition:absolute;\\\" target=\\\"_blank\\\" position:relative;text-align:center;jax/libs/jquery/1.background-color:#type=\\\"application/anguage\\\" content=\\\"<meta http-equiv=\\\"Privacy Policy</a>e(\\\"%3Cscript src='\\\" target=\\\"_blank\\\">On the other hand,.jpg|thumb|right|2</div><div class=\\\"<div style=\\\"float:nineteenth century</body>\\r\\n</html>\\r\\n<img src=\\\"http://s;text-align:centerfont-weight: bold; According to the difference between\\\" frameborder=\\\"0\\\" \\\" style=\\\"position:link href=\\\"http://html4/loose.dtd\\\">\\nduring this period</td></tr></table>closely related tofor the first time;font-weight:bold;input type=\\\"text\\\" <span style=\\\"font-onreadystatechange\\t<div class=\\\"cleardocument.location. For example, the a wide variety of <!DOCTYPE html>\\r\\n<&nbsp;&nbsp;&nbsp;\\\"><a href=\\\"http://style=\\\"float:left;concerned with the=http%3A%2F%2Fwww.in popular culturetype=\\\"text/css\\\" />it is possible to Harvard Universitytylesheet\\\" href=\\\"/the main characterOxford University  name=\\\"keywords\\\" cstyle=\\\"text-align:the United Kingdomfederal government<div style=\\\"margin depending on the description of the<div class=\\\"header.min.js\\\"></script>destruction of theslightly differentin accordance withtelecommunicationsindicates that theshortly thereafterespecially in the European countriesHowever, there aresrc=\\\"http://staticsuggested that the\\\" src=\\\"http://www.a large number of Telecommunications\\\" rel=\\\"nofollow\\\" tHoly Roman Emperoralmost exclusively\\\" border=\\\"0\\\" alt=\\\"Secretary of Stateculminating in theCIA World Factbookthe most importantanniversary of thestyle=\\\"background-<li><em><a href=\\\"/the Atlantic Oceanstrictly speaking,shortly before thedifferent types ofthe Ottoman Empire><img src=\\\"http://An Introduction toconsequence of thedeparture from theConfederate Statesindigenous peoplesProceedings of theinformation on thetheories have beeninvolvement in thedivided into threeadjacent countriesis responsible fordissolution of thecollaboration withwidely regarded ashis contemporariesfounding member ofDominican Republicgenerally acceptedthe possibility ofare also availableunder constructionrestoration of thethe general publicis almost entirelypasses through thehas been suggestedcomputer and videoGermanic languages according to the different from theshortly afterwardshref=\\\"https://www.recent developmentBoard of Directors<div class=\\\"search| <a href=\\\"http://In particular, theMultiple footnotesor other substancethousands of yearstranslation of the</div>\\r\\n</div>\\r\\n\\r\\n<a href=\\\"index.phpwas established inmin.js\\\"></script>\\nparticipate in thea strong influencestyle=\\\"margin-top:represented by thegraduated from theTraditionally, theElement(\\\"script\\\");However, since the/div>\\n</div>\\n<div left; margin-left:protection against0; vertical-align:Unfortunately, thetype=\\\"image/x-icon/div>\\n<div class=\\\" class=\\\"clearfix\\\"><div class=\\\"footer\\t\\t</div>\\n\\t\\t</div>\\nthe motion pictureP\\u0011Q\\nP;P3P0Q\\u0000Q\\u0001P:P8P1Q\\nP;P3P0Q\\u0000Q\\u0001P:P8P$P5P4P5Q\\u0000P0Q\\u0006P8P8P=P5Q\\u0001P:P>P;Q\\u000CP:P>Q\\u0001P>P>P1Q\\tP5P=P8P5Q\\u0001P>P>P1Q\\tP5P=P8Q\\u000FP?Q\\u0000P>P3Q\\u0000P0P<P<Q\\u000BP\\u001EQ\\u0002P?Q\\u0000P0P2P8Q\\u0002Q\\u000CP1P5Q\\u0001P?P;P0Q\\u0002P=P>P<P0Q\\u0002P5Q\\u0000P8P0P;Q\\u000BP?P>P7P2P>P;Q\\u000FP5Q\\u0002P?P>Q\\u0001P;P5P4P=P8P5Q\\u0000P0P7P;P8Q\\u0007P=Q\\u000BQ\\u0005P?Q\\u0000P>P4Q\\u0003P:Q\\u0006P8P8P?Q\\u0000P>P3Q\\u0000P0P<P<P0P?P>P;P=P>Q\\u0001Q\\u0002Q\\u000CQ\\u000EP=P0Q\\u0005P>P4P8Q\\u0002Q\\u0001Q\\u000FP8P7P1Q\\u0000P0P=P=P>P5P=P0Q\\u0001P5P;P5P=P8Q\\u000FP8P7P<P5P=P5P=P8Q\\u000FP:P0Q\\u0002P5P3P>Q\\u0000P8P8P\\u0010P;P5P:Q\\u0001P0P=P4Q\\u0000`$&`%\\r`$5`$>`$0`$>`$.`%\\u0008`$(`%\\u0001`$\\u0005`$2`$*`%\\r`$0`$&`$>`$(`$-`$>`$0`$$`%\\u0000`$/`$\\u0005`$(`%\\u0001`$&`%\\u0007`$6`$9`$?`$(`%\\r`$&`%\\u0000`$\\u0007`$\\u0002`$!`$?`$/`$>`$&`$?`$2`%\\r`$2`%\\u0000`$\\u0005`$'`$?`$\\u0015`$>`$0`$5`%\\u0000`$!`$?`$/`%\\u000B`$\\u001A`$?`$\\u001F`%\\r`$ `%\\u0007`$8`$.`$>`$\\u001A`$>`$0`$\\u001C`$\\u0002`$\\u0015`%\\r`$6`$(`$&`%\\u0001`$(`$?`$/`$>`$*`%\\r`$0`$/`%\\u000B`$\\u0017`$\\u0005`$(`%\\u0001`$8`$>`$0`$\\u0011`$(`$2`$>`$\\u0007`$(`$*`$>`$0`%\\r`$\\u001F`%\\u0000`$6`$0`%\\r`$$`%\\u000B`$\\u0002`$2`%\\u000B`$\\u0015`$8`$-`$>`$+`$<`%\\r`$2`%\\u0008`$6`$6`$0`%\\r`$$`%\\u0007`$\\u0002`$*`%\\r`$0`$&`%\\u0007`$6`$*`%\\r`$2`%\\u0007`$/`$0`$\\u0015`%\\u0007`$\\u0002`$&`%\\r`$0`$8`%\\r`$%`$?`$$`$?`$\\t`$$`%\\r`$*`$>`$&`$\\t`$(`%\\r`$9`%\\u0007`$\\u0002`$\\u001A`$?`$\\u001F`%\\r`$ `$>`$/`$>`$$`%\\r`$0`$>`$\\u001C`%\\r`$/`$>`$&`$>`$*`%\\u0001`$0`$>`$(`%\\u0007`$\\u001C`%\\u000B`$!`$<`%\\u0007`$\\u0002`$\\u0005`$(`%\\u0001`$5`$>`$&`$6`%\\r`$0`%\\u0007`$#`%\\u0000`$6`$?`$\\u0015`%\\r`$7`$>`$8`$0`$\\u0015`$>`$0`%\\u0000`$8`$\\u0002`$\\u0017`%\\r`$0`$9`$*`$0`$?`$#`$>`$.`$,`%\\r`$0`$>`$\\u0002`$!`$,`$\\u001A`%\\r`$\\u001A`%\\u000B`$\\u0002`$\\t`$*`$2`$,`%\\r`$'`$.`$\\u0002`$$`%\\r`$0`%\\u0000`$8`$\\u0002`$*`$0`%\\r`$\\u0015`$\\t`$.`%\\r`$.`%\\u0000`$&`$.`$>`$'`%\\r`$/`$.`$8`$9`$>`$/`$$`$>`$6`$,`%\\r`$&`%\\u000B`$\\u0002`$.`%\\u0000`$!`$?`$/`$>`$\\u0006`$\\u0008`$*`%\\u0000`$\\u000F`$2`$.`%\\u000B`$,`$>`$\\u0007`$2`$8`$\\u0002`$\\u0016`%\\r`$/`$>`$\\u0006`$*`$0`%\\u0007`$6`$(`$\\u0005`$(`%\\u0001`$,`$\\u0002`$'`$,`$>`$\\u001C`$<`$>`$0`$(`$5`%\\u0000`$(`$$`$.`$*`%\\r`$0`$.`%\\u0001`$\\u0016`$*`%\\r`$0`$6`%\\r`$(`$*`$0`$?`$5`$>`$0`$(`%\\u0001`$\\u0015`$8`$>`$(`$8`$.`$0`%\\r`$%`$(`$\\u0006`$/`%\\u000B`$\\u001C`$?`$$`$8`%\\u000B`$.`$5`$>`$0X'Y\\u0004Y\\u0005X4X'X1Y\\u0003X'X*X'Y\\u0004Y\\u0005Y\\u0006X*X/Y\\nX'X*X'Y\\u0004Y\\u0003Y\\u0005X(Y\\nY\\u0008X*X1X'Y\\u0004Y\\u0005X4X'Y\\u0007X/X'X*X9X/X/X'Y\\u0004X2Y\\u0008X'X1X9X/X/X'Y\\u0004X1X/Y\\u0008X/X'Y\\u0004X%X3Y\\u0004X'Y\\u0005Y\\nX)X'Y\\u0004Y\\u0001Y\\u0008X*Y\\u0008X4Y\\u0008X(X'Y\\u0004Y\\u0005X3X'X(Y\\u0002X'X*X'Y\\u0004Y\\u0005X9Y\\u0004Y\\u0008Y\\u0005X'X*X'Y\\u0004Y\\u0005X3Y\\u0004X3Y\\u0004X'X*X'Y\\u0004X,X1X'Y\\u0001Y\\nY\\u0003X3X'Y\\u0004X'X3Y\\u0004X'Y\\u0005Y\\nX)X'Y\\u0004X'X*X5X'Y\\u0004X'X*keywords\\\" content=\\\"w3.org/1999/xhtml\\\"><a target=\\\"_blank\\\" text/html; charset=\\\" target=\\\"_blank\\\"><table cellpadding=\\\"autocomplete=\\\"off\\\" text-align: center;to last version by background-color: #\\\" href=\\\"http://www./div></div><div id=<a href=\\\"#\\\" class=\\\"\\\"><img src=\\\"http://cript\\\" src=\\\"http://\\n<script language=\\\"//EN\\\" \\\"http://www.wencodeURIComponent(\\\" href=\\\"javascript:<div class=\\\"contentdocument.write('<scposition: absolute;script src=\\\"http:// style=\\\"margin-top:.min.js\\\"></script>\\n</div>\\n<div class=\\\"w3.org/1999/xhtml\\\" \\n\\r\\n</body>\\r\\n</html>distinction between/\\\" target=\\\"_blank\\\"><link href=\\\"http://encoding=\\\"utf-8\\\"?>\\nw.addEventListener?action=\\\"http://www.icon\\\" href=\\\"http:// style=\\\"background:type=\\\"text/css\\\" />\\nmeta property=\\\"og:t<input type=\\\"text\\\"  style=\\\"text-align:the development of tylesheet\\\" type=\\\"tehtml; charset=utf-8is considered to betable width=\\\"100%\\\" In addition to the contributed to the differences betweendevelopment of the It is important to </script>\\n\\n<script  style=\\\"font-size:1></span><span id=gbLibrary of Congress<img src=\\\"http://imEnglish translationAcademy of Sciencesdiv style=\\\"display:construction of the.getElementById(id)in conjunction withElement('script'); <meta property=\\\"og:P\\u0011Q\\nP;P3P0Q\\u0000Q\\u0001P:P8\\n type=\\\"text\\\" name=\\\">Privacy Policy</a>administered by theenableSingleRequeststyle=&quot;margin:</div></div></div><><img src=\\\"http://i style=&quot;float:referred to as the total population ofin Washington, D.C. style=\\\"background-among other things,organization of theparticipated in thethe introduction ofidentified with thefictional character Oxford University misunderstanding ofThere are, however,stylesheet\\\" href=\\\"/Columbia Universityexpanded to includeusually referred toindicating that thehave suggested thataffiliated with thecorrelation betweennumber of different></td></tr></table>Republic of Ireland\\n</script>\\n<script under the influencecontribution to theOfficial website ofheadquarters of thecentered around theimplications of thehave been developedFederal Republic ofbecame increasinglycontinuation of theNote, however, thatsimilar to that of capabilities of theaccordance with theparticipants in thefurther developmentunder the directionis often consideredhis younger brother</td></tr></table><a http-equiv=\\\"X-UA-physical propertiesof British Columbiahas been criticized(with the exceptionquestions about thepassing through the0\\\" cellpadding=\\\"0\\\" thousands of peopleredirects here. Forhave children under%3E%3C/script%3E\\\"));<a href=\\\"http://www.<li><a href=\\\"http://site_name\\\" content=\\\"text-decoration:nonestyle=\\\"display: none<meta http-equiv=\\\"X-new Date().getTime() type=\\\"image/x-icon\\\"</span><span class=\\\"language=\\\"javascriptwindow.location.href<a href=\\\"javascript:-->\\r\\n<script type=\\\"t<a href='http://www.hortcut icon\\\" href=\\\"</div>\\r\\n<div class=\\\"<script src=\\\"http://\\\" rel=\\\"stylesheet\\\" t</div>\\n<script type=/a> <a href=\\\"http:// allowTransparency=\\\"X-UA-Compatible\\\" conrelationship between\\n</script>\\r\\n<script </a></li></ul></div>associated with the programming language</a><a href=\\\"http://</a></li><li class=\\\"form action=\\\"http://<div style=\\\"display:type=\\\"text\\\" name=\\\"q\\\"<table width=\\\"100%\\\" background-position:\\\" border=\\\"0\\\" width=\\\"rel=\\\"shortcut icon\\\" h6><ul><li><a href=\\\"  <meta http-equiv=\\\"css\\\" media=\\\"screen\\\" responsible for the \\\" type=\\\"application/\\\" style=\\\"background-html; charset=utf-8\\\" allowtransparency=\\\"stylesheet\\\" type=\\\"te\\r\\n<meta http-equiv=\\\"></span><span class=\\\"0\\\" cellspacing=\\\"0\\\">;\\n</script>\\n<script sometimes called thedoes not necessarilyFor more informationat the beginning of <!DOCTYPE html><htmlparticularly in the type=\\\"hidden\\\" name=\\\"javascript:void(0);\\\"effectiveness of the autocomplete=\\\"off\\\" generally considered><input type=\\\"text\\\" \\\"></script>\\r\\n<scriptthroughout the worldcommon misconceptionassociation with the</div>\\n</div>\\n<div cduring his lifetime,corresponding to thetype=\\\"image/x-icon\\\" an increasing numberdiplomatic relationsare often consideredmeta charset=\\\"utf-8\\\" <input type=\\\"text\\\" examples include the\\\"><img src=\\\"http://iparticipation in thethe establishment of\\n</div>\\n<div class=\\\"&amp;nbsp;&amp;nbsp;to determine whetherquite different frommarked the beginningdistance between thecontributions to theconflict between thewidely considered towas one of the firstwith varying degreeshave speculated that(document.getElementparticipating in theoriginally developedeta charset=\\\"utf-8\\\"> type=\\\"text/css\\\" />\\ninterchangeably withmore closely relatedsocial and politicalthat would otherwiseperpendicular to thestyle type=\\\"text/csstype=\\\"submit\\\" name=\\\"families residing indeveloping countriescomputer programmingeconomic developmentdetermination of thefor more informationon several occasionsportuguC*s (Europeu)P#P:Q\\u0000P0Q\\u0017P=Q\\u0001Q\\u000CP:P0Q\\u0003P:Q\\u0000P0Q\\u0017P=Q\\u0001Q\\u000CP:P0P P>Q\\u0001Q\\u0001P8P9Q\\u0001P:P>P9P<P0Q\\u0002P5Q\\u0000P8P0P;P>P2P8P=Q\\u0004P>Q\\u0000P<P0Q\\u0006P8P8Q\\u0003P?Q\\u0000P0P2P;P5P=P8Q\\u000FP=P5P>P1Q\\u0005P>P4P8P<P>P8P=Q\\u0004P>Q\\u0000P<P0Q\\u0006P8Q\\u000FP\\u0018P=Q\\u0004P>Q\\u0000P<P0Q\\u0006P8Q\\u000FP P5Q\\u0001P?Q\\u0003P1P;P8P:P8P:P>P;P8Q\\u0007P5Q\\u0001Q\\u0002P2P>P8P=Q\\u0004P>Q\\u0000P<P0Q\\u0006P8Q\\u000EQ\\u0002P5Q\\u0000Q\\u0000P8Q\\u0002P>Q\\u0000P8P8P4P>Q\\u0001Q\\u0002P0Q\\u0002P>Q\\u0007P=P>X'Y\\u0004Y\\u0005X*Y\\u0008X'X,X/Y\\u0008Y\\u0006X'Y\\u0004X'X4X*X1X'Y\\u0003X'X*X'Y\\u0004X'Y\\u0002X*X1X'X-X'X*html; charset=UTF-8\\\" setTimeout(function()display:inline-block;<input type=\\\"submit\\\" type = 'text/javascri<img src=\\\"http://www.\\\" \\\"http://www.w3.org/shortcut icon\\\" href=\\\"\\\" autocomplete=\\\"off\\\" </a></div><div class=</a></li>\\n<li class=\\\"css\\\" type=\\\"text/css\\\" <form action=\\\"http://xt/css\\\" href=\\\"http://link rel=\\\"alternate\\\" \\r\\n<script type=\\\"text/ onclick=\\\"javascript:(new Date).getTime()}height=\\\"1\\\" width=\\\"1\\\" People's Republic of  <a href=\\\"http://www.text-decoration:underthe beginning of the </div>\\n</div>\\n</div>\\nestablishment of the </div></div></div></d#viewport{min-height:\\n<script src=\\\"http://option><option value=often referred to as /option>\\n<option valu<!DOCTYPE html>\\n<!--[International Airport>\\n<a href=\\\"http://www</a><a href=\\\"http://w`8 `82`8)`82`9\\u0004`8\\u0017`8\\\"a\\u0003%a\\u0003\\u0010a\\u0003 a\\u0003\\u0017a\\u0003#a\\u0003\\u001Aa\\u0003\\u0018f-#i+\\u0014d8-f\\u0016\\u0007 (g9\\u0001i+\\u0014)`$(`$?`$0`%\\r`$&`%\\u0007`$6`$!`$>`$\\t`$(`$2`%\\u000B`$!`$\\u0015`%\\r`$7`%\\u0007`$$`%\\r`$0`$\\u001C`$>`$(`$\\u0015`$>`$0`%\\u0000`$8`$\\u0002`$,`$\\u0002`$'`$?`$$`$8`%\\r`$%`$>`$*`$(`$>`$8`%\\r`$5`%\\u0000`$\\u0015`$>`$0`$8`$\\u0002`$8`%\\r`$\\u0015`$0`$#`$8`$>`$.`$\\u0017`%\\r`$0`%\\u0000`$\\u001A`$?`$\\u001F`%\\r`$ `%\\u000B`$\\u0002`$5`$?`$\\u001C`%\\r`$\\u001E`$>`$(`$\\u0005`$.`%\\u0007`$0`$?`$\\u0015`$>`$5`$?`$-`$?`$(`%\\r`$(`$\\u0017`$>`$!`$?`$/`$>`$\\u0001`$\\u0015`%\\r`$/`%\\u000B`$\\u0002`$\\u0015`$?`$8`%\\u0001`$0`$\\u0015`%\\r`$7`$>`$*`$9`%\\u0001`$\\u0001`$\\u001A`$$`%\\u0000`$*`%\\r`$0`$,`$\\u0002`$'`$(`$\\u001F`$?`$*`%\\r`$*`$#`%\\u0000`$\\u0015`%\\r`$0`$?`$\\u0015`%\\u0007`$\\u001F`$*`%\\r`$0`$>`$0`$\\u0002`$-`$*`%\\r`$0`$>`$*`%\\r`$$`$.`$>`$2`$?`$\\u0015`%\\u000B`$\\u0002`$0`$+`$<`%\\r`$$`$>`$0`$(`$?`$0`%\\r`$.`$>`$#`$2`$?`$.`$?`$\\u001F`%\\u0007`$!description\\\" content=\\\"document.location.prot.getElementsByTagName(<!DOCTYPE html>\\n<html <meta charset=\\\"utf-8\\\">:url\\\" content=\\\"http://.css\\\" rel=\\\"stylesheet\\\"style type=\\\"text/css\\\">type=\\\"text/css\\\" href=\\\"w3.org/1999/xhtml\\\" xmltype=\\\"text/javascript\\\" method=\\\"get\\\" action=\\\"link rel=\\\"stylesheet\\\"  = document.getElementtype=\\\"image/x-icon\\\" />cellpadding=\\\"0\\\" cellsp.css\\\" type=\\\"text/css\\\" </a></li><li><a href=\\\"\\\" width=\\\"1\\\" height=\\\"1\\\"\\\"><a href=\\\"http://www.style=\\\"display:none;\\\">alternate\\\" type=\\\"appli-//W3C//DTD XHTML 1.0 ellspacing=\\\"0\\\" cellpad type=\\\"hidden\\\" value=\\\"/a>&nbsp;<span role=\\\"s\\n<input type=\\\"hidden\\\" language=\\\"JavaScript\\\"  document.getElementsBg=\\\"0\\\" cellspacing=\\\"0\\\" ype=\\\"text/css\\\" media=\\\"type='text/javascript'with the exception of ype=\\\"text/css\\\" rel=\\\"st height=\\\"1\\\" width=\\\"1\\\" ='+encodeURIComponent(<link rel=\\\"alternate\\\" \\nbody, tr, input, textmeta name=\\\"robots\\\" conmethod=\\\"post\\\" action=\\\">\\n<a href=\\\"http://www.css\\\" rel=\\\"stylesheet\\\" </div></div><div classlanguage=\\\"javascript\\\">aria-hidden=\\\"true\\\">B7<ript\\\" type=\\\"text/javasl=0;})();\\n(function(){background-image: url(/a></li><li><a href=\\\"h\\t\\t<li><a href=\\\"http://ator\\\" aria-hidden=\\\"tru> <a href=\\\"http://www.language=\\\"javascript\\\" /option>\\n<option value/div></div><div class=rator\\\" aria-hidden=\\\"tre=(new Date).getTime()portuguC*s (do Brasil)P>Q\\u0000P3P0P=P8P7P0Q\\u0006P8P8P2P>P7P<P>P6P=P>Q\\u0001Q\\u0002Q\\u000CP>P1Q\\u0000P0P7P>P2P0P=P8Q\\u000FQ\\u0000P5P3P8Q\\u0001Q\\u0002Q\\u0000P0Q\\u0006P8P8P2P>P7P<P>P6P=P>Q\\u0001Q\\u0002P8P>P1Q\\u000FP7P0Q\\u0002P5P;Q\\u000CP=P0<!DOCTYPE html PUBLIC \\\"nt-Type\\\" content=\\\"text/<meta http-equiv=\\\"Conteransitional//EN\\\" \\\"http:<html xmlns=\\\"http://www-//W3C//DTD XHTML 1.0 TDTD/xhtml1-transitional//www.w3.org/TR/xhtml1/pe = 'text/javascript';<meta name=\\\"descriptionparentNode.insertBefore<input type=\\\"hidden\\\" najs\\\" type=\\\"text/javascri(document).ready(functiscript type=\\\"text/javasimage\\\" content=\\\"http://UA-Compatible\\\" content=tml; charset=utf-8\\\" />\\nlink rel=\\\"shortcut icon<link rel=\\\"stylesheet\\\" </script>\\n<script type== document.createElemen<a target=\\\"_blank\\\" href= document.getElementsBinput type=\\\"text\\\" name=a.type = 'text/javascrinput type=\\\"hidden\\\" namehtml; charset=utf-8\\\" />dtd\\\">\\n<html xmlns=\\\"http-//W3C//DTD HTML 4.01 TentsByTagName('script')input type=\\\"hidden\\\" nam<script type=\\\"text/javas\\\" style=\\\"display:none;\\\">document.getElementById(=document.createElement(' type='text/javascript'input type=\\\"text\\\" name=\\\"d.getElementsByTagName(snical\\\" href=\\\"http://www.C//DTD HTML 4.01 Transit<style type=\\\"text/css\\\">\\n\\n<style type=\\\"text/css\\\">ional.dtd\\\">\\n<html xmlns=http-equiv=\\\"Content-Typeding=\\\"0\\\" cellspacing=\\\"0\\\"html; charset=utf-8\\\" />\\n style=\\\"display:none;\\\"><<li><a href=\\\"http://www. type='text/javascript'>P4P5Q\\u000FQ\\u0002P5P;Q\\u000CP=P>Q\\u0001Q\\u0002P8Q\\u0001P>P>Q\\u0002P2P5Q\\u0002Q\\u0001Q\\u0002P2P8P8P?Q\\u0000P>P8P7P2P>P4Q\\u0001Q\\u0002P2P0P1P5P7P>P?P0Q\\u0001P=P>Q\\u0001Q\\u0002P8`$*`%\\u0001`$8`%\\r`$$`$?`$\\u0015`$>`$\\u0015`$>`$\\u0002`$\\u0017`%\\r`$0`%\\u0007`$8`$\\t`$(`%\\r`$9`%\\u000B`$\\u0002`$(`%\\u0007`$5`$?`$'`$>`$(`$8`$-`$>`$+`$?`$\\u0015`%\\r`$8`$?`$\\u0002`$\\u0017`$8`%\\u0001`$0`$\\u0015`%\\r`$7`$?`$$`$\\u0015`%\\t`$*`%\\u0000`$0`$>`$\\u0007`$\\u001F`$5`$?`$\\u001C`%\\r`$\\u001E`$>`$*`$(`$\\u0015`$>`$0`%\\r`$0`$5`$>`$\\u0008`$8`$\\u0015`%\\r`$0`$?`$/`$$`$>\", \"\\u06F7%\\u018C'T%\\u0085'W%\\u00D7%O%g%\\u00A6&\\u0193%\\u01E5&>&*&'&^&\\u0088\\u0178\\u0C3E&\\u01AD&\\u0192&)&^&%&'&\\u0082&P&1&\\u00B1&3&]&m&u&E&t&C&\\u00CF&V&V&/&>&6&\\u0F76\\u177Co&p&@&E&M&P&x&@&F&e&\\u00CC&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\\u025E*\\u03EA\\u21F3&\\u1372&K&;&)&E&H&P&0&?&9&V&\\u0081&-&v&a&,&E&)&?&=&'&'&B&\\u0D2E&\\u0503&\\u0316*&*8&%&%&&&%,)&\\u009A&>&\\u0086&7&]&F&2&>&J&6&n&2&%&?&\\u008E&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\\u053C\\u0084(,(<&,&\\u03DA&\\u18C7&-&,(%&(&%&(\\u013B0&X&D&\\u0081&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\\u00C6-\\u0360\\u1EF3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\\u072C\\u2A25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\\u1E78\\u00CC-&7&1&F&7&t&W&7&I&.&.&^&=\\u0F9C\\u19D3&8(>&/&/&\\u077B')'\\u1065')'%@/&0&%\\u043E\\u09C0*&*@&C\\u053D\\u05D4\\u0274\\u05EB4\\u0DD7\\u071A\\u04D16\\u0D84&/\\u0178\\u0303Z&*%\\u0246\\u03FF&\\u0134&1\\u00A8\\u04B4\\u0174\");\n    DICTIONARY_DATA = dictionary;\n  }\n\n\n  /**\n   * @param {!number} a\n   * @param {!number} b\n   * @return {!number}\n   */\n  function min(a, b) {\n    return a <= b ? a : b;\n  }\n\n  /**\n   * @param {!InputStream|null} src\n   * @param {!Int8Array} dst\n   * @param {!number} offset\n   * @param {!number} length\n   * @return {!number}\n   */\n  function readInput(src, dst, offset, length) {\n    if (src == null) return -1;\n    var /** number */ end = min(src.offset + length, src.data.length);\n    var /** number */ bytesRead = end - src.offset;\n    dst.set(src.data.subarray(src.offset, end), offset);\n    src.offset += bytesRead;\n    return bytesRead;\n  }\n\n  /**\n   * @param {!InputStream} src\n   * @return {!number}\n   */\n  function closeInput(src) { return 0; }\n\n  /**\n   * @param {!string} src\n   * @return {!Int8Array}\n   */\n  function toUsAsciiBytes(src) {\n    var /** !number */ n = src.length;\n    var /** !Int8Array */ result = new Int8Array(n);\n    for (var /** !number */ i = 0; i < n; ++i) {\n      result[i] = src.charCodeAt(i);\n    }\n    return result;\n  }\n\n  /**\n   * @param {!Int8Array} bytes\n   * @return {!Int8Array}\n   */\n  function decode(bytes) {\n    var /** !State */ s = new State();\n    initState(s, new InputStream(bytes));\n    var /** !number */ totalOutput = 0;\n    var /** !Array<!Int8Array> */ chunks = [];\n    while (true) {\n      var /** !Int8Array */ chunk = new Int8Array(16384);\n      chunks.push(chunk);\n      s.output = chunk;\n      s.outputOffset = 0;\n      s.outputLength = 16384;\n      s.outputUsed = 0;\n      decompress(s);\n      totalOutput += s.outputUsed;\n      if (s.outputUsed < 16384) break;\n    }\n    close(s);\n    var /** !Int8Array */ result = new Int8Array(totalOutput);\n    var /** !number */ offset = 0;\n    for (var /** !number */ i = 0; i < chunks.length; ++i) {\n      var /** !Int8Array */ chunk = chunks[i];\n      var /** !number */ end = min(totalOutput, offset + 16384);\n      var /** !number */ len = end - offset;\n      if (len < 16384) {\n        result.set(chunk.subarray(0, len), offset);\n      } else {\n        result.set(chunk, offset);\n      }\n      offset += len;\n    }\n    return result;\n  }\n\n  return decode;\n}\n\nlet BrotliDecode = BrotliDecodeClosure();\n\n// /** @export */\n// var BrotliDecode = BrotliDecodeClosure();\n\n// window[\"BrotliDecode\"] = BrotliDecode;\n\nconst typedArrayMapping = {\n\t\"int8\":   Int8Array,\n\t\"int16\":  Int16Array,\n\t\"int32\":  Int32Array,\n\t\"int64\":  Float64Array,\n\t\"uint8\":  Uint8Array,\n\t\"uint16\": Uint16Array,\n\t\"uint32\": Uint32Array,\n\t\"uint64\": Float64Array,\n\t\"float\":  Float32Array,\n\t\"double\": Float64Array,\n};\n\nPotree = {};\n\nfunction dealign24b(mortoncode){\n\t// see https://stackoverflow.com/questions/45694690/how-i-can-remove-all-odds-bits-in-c\n\n\t// input alignment of desired bits\n\t// ..a..b..c..d..e..f..g..h..i..j..k..l..m..n..o..p\n\tlet x = mortoncode;\n\n\t//          ..a..b..c..d..e..f..g..h..i..j..k..l..m..n..o..p                     ..a..b..c..d..e..f..g..h..i..j..k..l..m..n..o..p \n\t//          ..a.....c.....e.....g.....i.....k.....m.....o...                     .....b.....d.....f.....h.....j.....l.....n.....p \n\t//          ....a.....c.....e.....g.....i.....k.....m.....o.                     .....b.....d.....f.....h.....j.....l.....n.....p \n\tx = ((x & 0b001000001000001000001000) >>  2) | ((x & 0b000001000001000001000001) >> 0);\n\t//          ....ab....cd....ef....gh....ij....kl....mn....op                     ....ab....cd....ef....gh....ij....kl....mn....op\n\t//          ....ab..........ef..........ij..........mn......                     ..........cd..........gh..........kl..........op\n\t//          ........ab..........ef..........ij..........mn..                     ..........cd..........gh..........kl..........op\n\tx = ((x & 0b000011000000000011000000) >>  4) | ((x & 0b000000000011000000000011) >> 0);\n\t//          ........abcd........efgh........ijkl........mnop                     ........abcd........efgh........ijkl........mnop\n\t//          ........abcd....................ijkl............                     ....................efgh....................mnop\n\t//          ................abcd....................ijkl....                     ....................efgh....................mnop\n\tx = ((x & 0b000000001111000000000000) >>  8) | ((x & 0b000000000000000000001111) >> 0);\n\t//          ................abcdefgh................ijklmnop                     ................abcdefgh................ijklmnop\n\t//          ................abcdefgh........................                     ........................................ijklmnop\n\t//          ................................abcdefgh........                     ........................................ijklmnop\n\tx = ((x & 0b000000000000000000000000) >> 16) | ((x & 0b000000000000000011111111) >> 0);\n\n\t// sucessfully realigned! \n\t//................................abcdefghijklmnop\n\n\treturn x;\n}\n\nonmessage = function (event) {\n\n\tlet {pointAttributes, scale, name, min, max, size, offset, numPoints} = event.data;\n\n\tlet tStart = performance.now();\n\n\tlet buffer; \n\tif(numPoints === 0){\n\t\tbuffer = {buffer: new ArrayBuffer(0)};\n\t}else {\n\t\ttry{\n\t\t\tbuffer = BrotliDecode(new Int8Array(event.data.buffer));\n\t\t}catch(e){\n\t\t\tbuffer = {buffer: new ArrayBuffer(numPoints * (pointAttributes.byteSize + 12))};\n\t\t\tconsole.error(`problem with node ${name}: `, e);\n\t\t}\n\t}\n\n\tlet view = new DataView(buffer.buffer);\n\t\n\tlet attributeBuffers = {};\n\n\tlet bytesPerPoint = 0;\n\tfor (let pointAttribute of pointAttributes.attributes) {\n\t\tbytesPerPoint += pointAttribute.byteSize;\n\t}\n\n\tlet gridSize = 32;\n\tlet grid = new Uint32Array(gridSize ** 3);\n\tlet toIndex = (x, y, z) => {\n\n\t\t// min is already subtracted\n\t\tlet dx = gridSize * x / size.x;\n\t\tlet dy = gridSize * y / size.y;\n\t\tlet dz = gridSize * z / size.z;\n\n\t\tlet ix = Math.min(parseInt(dx), gridSize - 1);\n\t\tlet iy = Math.min(parseInt(dy), gridSize - 1);\n\t\tlet iz = Math.min(parseInt(dz), gridSize - 1);\n\n\t\tlet index = ix + iy * gridSize + iz * gridSize * gridSize;\n\n\t\treturn index;\n\t};\n\n\tlet numOccupiedCells = 0;\n\tlet byteOffset = 0;\n\tfor (let pointAttribute of pointAttributes.attributes) {\n\t\t\n\n\t\tif([\"POSITION_CARTESIAN\", \"position\"].includes(pointAttribute.name)){\n\n\t\t\t// let tStart = performance.now();\n\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4 * 3);\n\t\t\tlet positions = new Float32Array(buff);\n\t\t\n\t\t\tfor (let j = 0; j < numPoints; j++) {\n\n\n\t\t\t\tlet mc_0 = view.getUint32(byteOffset +  4, true);\n\t\t\t\tlet mc_1 = view.getUint32(byteOffset +  0, true);\n\t\t\t\tlet mc_2 = view.getUint32(byteOffset + 12, true);\n\t\t\t\tlet mc_3 = view.getUint32(byteOffset +  8, true);\n\n\t\t\t\tbyteOffset += 16;\n\n\t\t\t\tlet X = dealign24b((mc_3 & 0x00FFFFFF) >>> 0) \n\t\t\t\t\t\t| (dealign24b(((mc_3 >>> 24) | (mc_2 << 8)) >>> 0) << 8);\n\n\t\t\t\tlet Y = dealign24b((mc_3 & 0x00FFFFFF) >>> 1) \n\t\t\t\t\t\t| (dealign24b(((mc_3 >>> 24) | (mc_2 << 8)) >>> 1) << 8);\n\t\t\t\t\t\t\n\n\t\t\t\tlet Z = dealign24b((mc_3 & 0x00FFFFFF) >>> 2) \n\t\t\t\t\t\t| (dealign24b(((mc_3 >>> 24) | (mc_2 << 8)) >>> 2) << 8);\n\t\t\t\t\t\t\n\n\t\t\t\tif(mc_1 != 0 || mc_2 != 0){\n\t\t\t\t\tX = X | (dealign24b((mc_1 & 0x00FFFFFF) >>> 0) << 16)\n\t\t\t\t\t\t| (dealign24b(((mc_1 >>> 24) | (mc_0 << 8)) >>> 0) << 24);\n\n\t\t\t\t\tY = Y | (dealign24b((mc_1 & 0x00FFFFFF) >>> 1) << 16)\n\t\t\t\t\t\t| (dealign24b(((mc_1 >>> 24) | (mc_0 << 8)) >>> 1) << 24);\n\n\t\t\t\t\tZ = Z | (dealign24b((mc_1 & 0x00FFFFFF) >>> 2) << 16)\n\t\t\t\t\t\t| (dealign24b(((mc_1 >>> 24) | (mc_0 << 8)) >>> 2) << 24);\n\t\t\t\t}\n\n\t\t\t\t// =======================\n\t\t\t\t// VERIFY AGAINST LOOP VERSION\n\t\t\t\t// =======================\n\t\t\t\t// let reference;\n\t\t\t\t// { // correct reference\n\n\t\t\t\t// \tlet mc_upper = view.getBigUint64(byteOffset + 0, true);\n\t\t\t\t// \tlet mc_lower = view.getBigUint64(byteOffset + 8, true);\n\n\t\t\t\t// \tlet X = 0n;\n\t\t\t\t// \tlet Y = 0n;\n\t\t\t\t// \tlet Z = 0n;\n\n\t\t\t\t// \tfor(let k = 0n; k < 16n; k++){\n\t\t\t\t// \t\tlet mask_lower = (mc_lower >> (3n * k)) & 0b111n;\n\t\t\t\t// \t\tlet mask_upper = (mc_upper >> (3n * k)) & 0b111n;\n\n\t\t\t\t// \t\tX = X | (((mask_lower >> 0n) & 0b001n) << k);\n\t\t\t\t// \t\tX = X | ((((mask_upper >> 0n) & 0b001n) << k) << 16n);\n\n\t\t\t\t// \t\tY = Y | (((mask_lower >> 1n) & 0b001n) << k);\n\t\t\t\t// \t\tY = Y | ((((mask_upper >> 1n) & 0b001n) << k) << 16n);\n\n\t\t\t\t// \t\tZ = Z | (((mask_lower >> 2n) & 0b001n) << k);\n\t\t\t\t// \t\tZ = Z | ((((mask_upper >> 2n) & 0b001n) << k) << 16n);\n\t\t\t\t// \t}\n\n\t\t\t\t// \treference = [X, Y, Z];\n\t\t\t\t// }\n\t\t\t\t// //dbgad += parseInt(reference[2]);\n\t\t\t\t// let [rX, rY, rZ] = reference;\n\n\t\t\t\t// if(X !== parseInt(rX)){\n\t\t\t\t// \tdebugger;\n\t\t\t\t// }\n\t\t\t\t// if(Y !== parseInt(rY)){\n\t\t\t\t// \tdebugger;\n\t\t\t\t// }\n\t\t\t\t// if(Z !== parseInt(rZ)){\n\t\t\t\t// \tdebugger;\n\t\t\t\t// }\n\n\t\t\t\t\n\n\n\t\t\t\t// let mc_upper = view.getBigUint64(byteOffset + 0, true);\n\t\t\t\t// let mc_lower = view.getBigUint64(byteOffset + 8, true);\n\t\t\t\t// byteOffset += 16;\n\n\t\t\t\t// =======================\n\t\t\t\t// MAGIC NUMBERS 32BIT\n\t\t\t\t// =======================\n\t\t\t\t// let mc0 = parseInt((mc_lower >>  0n) & 0x00FFFFFFn);\n\t\t\t\t// let mc1 = parseInt((mc_lower >> 24n) & 0x00FFFFFFn);\n\t\t\t\t// let mc2 = parseInt((mc_lower >> 48n) & 0x00FFFFFFn);\n\n\t\t\t\t// let X = dealign24b(mc0 >> 0) | (dealign24b(mc1 >> 0) << 8) | (dealign24b(mc2 >> 0) << 16);\n\t\t\t\t// let Y = dealign24b(mc0 >> 1) | (dealign24b(mc1 >> 1) << 8) | (dealign24b(mc2 >> 1) << 16);\n\t\t\t\t// let Z = dealign24b(mc0 >> 2) | (dealign24b(mc1 >> 2) << 8) | (dealign24b(mc2 >> 2) << 16);\n\n\n\t\t\t\t// =======================\n\t\t\t\t// MAGIC NUMBERS BIGINT\n\t\t\t\t// =======================\n\t\t\t\t// let X = dealign(mc_lower >> 0n);// | (dealign(mc_upper >> 0n) << 16n);\n\t\t\t\t// let Y = dealign(mc_lower >> 1n);// | (dealign(mc_upper >> 1n) << 16n);\n\t\t\t\t// let Z = dealign(mc_lower >> 2n);// | (dealign(mc_upper >> 2n) << 16n);\n\n\t\t\t\t// =======================\n\t\t\t\t// LOOP\n\t\t\t\t// =======================\n\t\t\t\t// let X = 0n;\n\t\t\t\t// let Y = 0n;\n\t\t\t\t// let Z = 0n;\n\n\t\t\t\t// for(let k = 0n; k < 16n; k++){\n\t\t\t\t// \tlet mask_lower = (mc_lower >> (3n * k)) & 0b111n;\n\t\t\t\t// \tlet mask_upper = (mc_upper >> (3n * k)) & 0b111n;\n\n\t\t\t\t// \tX = X | (((mask_lower >> 0n) & 0b001n) << k);\n\t\t\t\t// \tX = X | ((((mask_upper >> 0n) & 0b001n) << k) << 16n);\n\n\t\t\t\t// \tY = Y | (((mask_lower >> 1n) & 0b001n) << k);\n\t\t\t\t// \tY = Y | ((((mask_upper >> 1n) & 0b001n) << k) << 16n);\n\n\t\t\t\t// \tZ = Z | (((mask_lower >> 2n) & 0b001n) << k);\n\t\t\t\t// \tZ = Z | ((((mask_upper >> 2n) & 0b001n) << k) << 16n);\n\t\t\t\t// }\n\n\n\n\t\t\t\tlet x = parseInt(X) * scale[0] + offset[0] - min.x;\n\t\t\t\tlet y = parseInt(Y) * scale[1] + offset[1] - min.y;\n\t\t\t\tlet z = parseInt(Z) * scale[2] + offset[2] - min.z;\n\n\t\t\t\tlet index = toIndex(x, y, z);\n\t\t\t\tlet count = grid[index]++;\n\t\t\t\tif(count === 0){\n\t\t\t\t\tnumOccupiedCells++;\n\t\t\t\t}\n\n\t\t\t\tpositions[3 * j + 0] = x;\n\t\t\t\tpositions[3 * j + 1] = y;\n\t\t\t\tpositions[3 * j + 2] = z;\n\t\t\t}\n\n\t\t\t// let duration = performance.now() - tStart;\n\t\t\t// console.log(`xyz: ${duration.toFixed(1)}ms`);\n\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\n\t\t}else if([\"RGBA\", \"rgba\"].includes(pointAttribute.name)){\n\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4);\n\t\t\tlet colors = new Uint8Array(buff);\n\n\t\t\t// for (let j = 0; j < numPoints; j++) {\n\t\t\t// \tlet r = view.getUint16(byteOffset + 0, true);\n\t\t\t// \tlet g = view.getUint16(byteOffset + 2, true);\n\t\t\t// \tlet b = view.getUint16(byteOffset + 4, true);\n\t\t\t// \tbyteOffset += 6;\n\n\t\t\t// \tcolors[4 * j + 0] = r > 255 ? r / 256 : r;\n\t\t\t// \tcolors[4 * j + 1] = g > 255 ? g / 256 : g;\n\t\t\t// \tcolors[4 * j + 2] = b > 255 ? b / 256 : b;\n\t\t\t// }\n\n\t\t\t// let tStart = performance.now();\n\n\t\t\tfor (let j = 0; j < numPoints; j++) {\n\n\t\t\t\tlet mc_0 = view.getUint32(byteOffset +  4, true);\n\t\t\t\tlet mc_1 = view.getUint32(byteOffset +  0, true);\n\t\t\t\tbyteOffset += 8;\n\n\t\t\t\tlet r = dealign24b((mc_1 & 0x00FFFFFF) >>> 0) \n\t\t\t\t\t\t| (dealign24b(((mc_1 >>> 24) | (mc_0 << 8)) >>> 0) << 8);\n\n\t\t\t\tlet g = dealign24b((mc_1 & 0x00FFFFFF) >>> 1) \n\t\t\t\t\t\t| (dealign24b(((mc_1 >>> 24) | (mc_0 << 8)) >>> 1) << 8);\n\n\t\t\t\tlet b = dealign24b((mc_1 & 0x00FFFFFF) >>> 2) \n\t\t\t\t\t\t| (dealign24b(((mc_1 >>> 24) | (mc_0 << 8)) >>> 2) << 8);\n\n\t\t\t\t// let bits = mask_b0[mc_1 >>> 24];\n\t\t\t\t\n\t\t\t\t// if(((r >> 8) & 0b11) !== bits){\n\t\t\t\t// \tdebugger;\t\n\t\t\t\t// }\n\n\t\t\t\t// let r = dealign24b(mc0 >> 0) | (dealign24b(mc1 >> 0) << 8);\n\t\t\t\t// let g = dealign24b(mc0 >> 1) | (dealign24b(mc1 >> 1) << 8);\n\t\t\t\t// let b = dealign24b(mc0 >> 2) | (dealign24b(mc1 >> 2) << 8);\n\n\n\t\t\t\tcolors[4 * j + 0] = r > 255 ? r / 256 : r;\n\t\t\t\tcolors[4 * j + 1] = g > 255 ? g / 256 : g;\n\t\t\t\tcolors[4 * j + 2] = b > 255 ? b / 256 : b;\n\t\t\t}\n\t\t\t// let duration = performance.now() - tStart;\n\t\t\t// console.log(`rgb: ${duration.toFixed(1)}ms`);\n\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\n\t\t}else {\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4);\n\t\t\tlet f32 = new Float32Array(buff);\n\n\t\t\tlet TypedArray = typedArrayMapping[pointAttribute.type.name];\n\t\t\tpreciseBuffer = new TypedArray(numPoints);\n\n\t\t\tlet [offset, scale] = [0, 1];\n\n\t\t\tconst getterMap = {\n\t\t\t\t\"int8\":   view.getInt8,\n\t\t\t\t\"int16\":  view.getInt16,\n\t\t\t\t\"int32\":  view.getInt32,\n\t\t\t\t// \"int64\":  view.getInt64,\n\t\t\t\t\"uint8\":  view.getUint8,\n\t\t\t\t\"uint16\": view.getUint16,\n\t\t\t\t\"uint32\": view.getUint32,\n\t\t\t\t// \"uint64\": view.getUint64,\n\t\t\t\t\"float\":  view.getFloat32,\n\t\t\t\t\"double\": view.getFloat64,\n\t\t\t};\n\t\t\tconst getter = getterMap[pointAttribute.type.name].bind(view);\n\n\t\t\t// compute offset and scale to pack larger types into 32 bit floats\n\t\t\tif(pointAttribute.type.size > 4){\n\t\t\t\tlet [amin, amax] = pointAttribute.range;\n\t\t\t\toffset = amin;\n\t\t\t\tscale = 1 / (amax - amin);\n\t\t\t}\n\n\t\t\tfor(let j = 0; j < numPoints; j++){\n\t\t\t\t// let pointOffset = j * bytesPerPoint;\n\t\t\t\tlet value = getter(byteOffset, true);\n\t\t\t\tbyteOffset += pointAttribute.byteSize;\n\n\t\t\t\tf32[j] = (value - offset) * scale;\n\t\t\t\tpreciseBuffer[j] = value;\n\t\t\t}\n\n\t\t\tattributeBuffers[pointAttribute.name] = { \n\t\t\t\tbuffer: buff,\n\t\t\t\tpreciseBuffer: preciseBuffer,\n\t\t\t\tattribute: pointAttribute,\n\t\t\t\toffset: offset,\n\t\t\t\tscale: scale,\n\t\t\t};\n\t\t}\n\n\t\t// attributeOffset += pointAttribute.byteSize;\n\n\n\t}\n\n\tlet occupancy = parseInt(numPoints / numOccupiedCells);\n\t// console.log(`${name}: #points: ${numPoints}: #occupiedCells: ${numOccupiedCells}, occupancy: ${occupancy} points/cell`);\n\n\t{ // add indices\n\t\tlet buff = new ArrayBuffer(numPoints * 4);\n\t\tlet indices = new Uint32Array(buff);\n\n\t\tfor (let i = 0; i < numPoints; i++) {\n\t\t\tindices[i] = i;\n\t\t}\n\t\t\n\t\tattributeBuffers[\"INDICES\"] = { buffer: buff, attribute: PointAttribute.INDICES };\n\t}\n\n\n\t{ // handle attribute vectors\n\t\tlet vectors = pointAttributes.vectors;\n\n\t\tfor(let vector of vectors){\n\n\t\t\tlet {name, attributes} = vector;\n\t\t\tlet numVectorElements = attributes.length;\n\t\t\tlet buffer = new ArrayBuffer(numVectorElements * numPoints * 4);\n\t\t\tlet f32 = new Float32Array(buffer);\n\n\t\t\tlet iElement = 0;\n\t\t\tfor(let sourceName of attributes){\n\t\t\t\tlet sourceBuffer = attributeBuffers[sourceName];\n\t\t\t\tlet {offset, scale} = sourceBuffer;\n\t\t\t\tlet view = new DataView(sourceBuffer.buffer);\n\n\t\t\t\tconst getter = view.getFloat32.bind(view);\n\n\t\t\t\tfor(let j = 0; j < numPoints; j++){\n\t\t\t\t\tlet value = getter(j * 4, true);\n\n\t\t\t\t\tf32[j * numVectorElements + iElement] = (value / scale) + offset;\n\t\t\t\t}\n\n\t\t\t\tiElement++;\n\t\t\t}\n\n\t\t\tlet vecAttribute = new PointAttribute(name, PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\n\t\t\tattributeBuffers[name] = { \n\t\t\t\tbuffer: buffer, \n\t\t\t\tattribute: vecAttribute,\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\n\tlet duration = performance.now() - tStart;\n\t// console.log(`duration: ${duration.toFixed(1)}ms, #points: ${numPoints}, points/ms: ${pointsPerMs.toFixed(1)}`);\n\n\tlet message = {\n\t\tbuffer: buffer,\n\t\tattributeBuffers: attributeBuffers,\n\t\tdensity: occupancy,\n\t};\n\n\tlet transferables = [];\n\tfor (let property in message.attributeBuffers) {\n\t\ttransferables.push(message.attributeBuffers[property].buffer);\n\t}\n\t// transferables.push(buffer);\n\n\tpostMessage(message, transferables);\n};\n"
  },
  {
    "path": "libs/potree/workers/BinaryDecoderWorker.js",
    "content": "class Version{\n\n\tconstructor(version){\n\t\tthis.version = version;\n\t\tlet vmLength = (version.indexOf('.') === -1) ? version.length : version.indexOf('.');\n\t\tthis.versionMajor = parseInt(version.substr(0, vmLength));\n\t\tthis.versionMinor = parseInt(version.substr(vmLength + 1));\n\t\tif (this.versionMinor.length === 0) {\n\t\t\tthis.versionMinor = 0;\n\t\t}\n\t}\n\n\tnewerThan(version){\n\t\tlet v = new Version(version);\n\n\t\tif (this.versionMajor > v.versionMajor) {\n\t\t\treturn true;\n\t\t} else if (this.versionMajor === v.versionMajor && this.versionMinor > v.versionMinor) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tequalOrHigher(version){\n\t\tlet v = new Version(version);\n\n\t\tif (this.versionMajor > v.versionMajor) {\n\t\t\treturn true;\n\t\t} else if (this.versionMajor === v.versionMajor && this.versionMinor >= v.versionMinor) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tupTo(version){\n\t\treturn !this.newerThan(version);\n\t}\n\n}\n\n/**\n * Some types of possible point attribute data formats\n *\n * @class\n */\nconst PointAttributeTypes = {\n\tDATA_TYPE_DOUBLE: {ordinal: 0, name: \"double\", size: 8},\n\tDATA_TYPE_FLOAT:  {ordinal: 1, name: \"float\",  size: 4},\n\tDATA_TYPE_INT8:   {ordinal: 2, name: \"int8\",   size: 1},\n\tDATA_TYPE_UINT8:  {ordinal: 3, name: \"uint8\",  size: 1},\n\tDATA_TYPE_INT16:  {ordinal: 4, name: \"int16\",  size: 2},\n\tDATA_TYPE_UINT16: {ordinal: 5, name: \"uint16\", size: 2},\n\tDATA_TYPE_INT32:  {ordinal: 6, name: \"int32\",  size: 4},\n\tDATA_TYPE_UINT32: {ordinal: 7, name: \"uint32\", size: 4},\n\tDATA_TYPE_INT64:  {ordinal: 8, name: \"int64\",  size: 8},\n\tDATA_TYPE_UINT64: {ordinal: 9, name: \"uint64\", size: 8}\n};\n\nlet i = 0;\nfor (let obj in PointAttributeTypes) {\n\tPointAttributeTypes[i] = PointAttributeTypes[obj];\n\ti++;\n}\n\n\nclass PointAttribute{\n\t\n\tconstructor(name, type, numElements){\n\t\tthis.name = name;\n\t\tthis.type = type;\n\t\tthis.numElements = numElements;\n\t\tthis.byteSize = this.numElements * this.type.size;\n\t\tthis.description = \"\";\n\t\tthis.range = [Infinity, -Infinity];\n\t}\n\n}\nPointAttribute.POSITION_CARTESIAN = new PointAttribute(\n\t\"POSITION_CARTESIAN\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\nPointAttribute.RGBA_PACKED = new PointAttribute(\n\t\"COLOR_PACKED\", PointAttributeTypes.DATA_TYPE_INT8, 4);\n\nPointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED;\n\nPointAttribute.RGB_PACKED = new PointAttribute(\n\t\"COLOR_PACKED\", PointAttributeTypes.DATA_TYPE_INT8, 3);\n\nPointAttribute.NORMAL_FLOATS = new PointAttribute(\n\t\"NORMAL_FLOATS\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\nPointAttribute.INTENSITY = new PointAttribute(\n\t\"INTENSITY\", PointAttributeTypes.DATA_TYPE_UINT16, 1);\n\nPointAttribute.CLASSIFICATION = new PointAttribute(\n\t\"CLASSIFICATION\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\nPointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute(\n\t\"NORMAL_SPHEREMAPPED\", PointAttributeTypes.DATA_TYPE_UINT8, 2);\n\nPointAttribute.NORMAL_OCT16 = new PointAttribute(\n\t\"NORMAL_OCT16\", PointAttributeTypes.DATA_TYPE_UINT8, 2);\n\nPointAttribute.NORMAL = new PointAttribute(\n\t\"NORMAL\", PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\t\nPointAttribute.RETURN_NUMBER = new PointAttribute(\n\t\"RETURN_NUMBER\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\t\nPointAttribute.NUMBER_OF_RETURNS = new PointAttribute(\n\t\"NUMBER_OF_RETURNS\", PointAttributeTypes.DATA_TYPE_UINT8, 1);\n\t\nPointAttribute.SOURCE_ID = new PointAttribute(\n\t\"SOURCE_ID\", PointAttributeTypes.DATA_TYPE_UINT16, 1);\n\nPointAttribute.INDICES = new PointAttribute(\n\t\"INDICES\", PointAttributeTypes.DATA_TYPE_UINT32, 1);\n\nPointAttribute.SPACING = new PointAttribute(\n\t\"SPACING\", PointAttributeTypes.DATA_TYPE_FLOAT, 1);\n\nPointAttribute.GPS_TIME = new PointAttribute(\n\t\"GPS_TIME\", PointAttributeTypes.DATA_TYPE_DOUBLE, 1);\n\nconst typedArrayMapping = {\n\t\"int8\":   Int8Array,\n\t\"int16\":  Int16Array,\n\t\"int32\":  Int32Array,\n\t\"int64\":  Float64Array,\n\t\"uint8\":  Uint8Array,\n\t\"uint16\": Uint16Array,\n\t\"uint32\": Uint32Array,\n\t\"uint64\": Float64Array,\n\t\"float\":  Float32Array,\n\t\"double\": Float64Array,\n};\n\nPotree = {};\n\nonmessage = function (event) {\n\n\tperformance.mark(\"binary-decoder-start\");\n\t\n\tlet buffer = event.data.buffer;\n\tlet pointAttributes = event.data.pointAttributes;\n\tlet numPoints = buffer.byteLength / pointAttributes.byteSize;\n\tlet view = new DataView(buffer);\n\tlet version = new Version(event.data.version);\n\tlet nodeOffset = event.data.offset;\n\tlet scale = event.data.scale;\n\tlet spacing = event.data.spacing;\n\tlet hasChildren = event.data.hasChildren;\n\tlet name = event.data.name;\n\t\n\tlet tightBoxMin = [ Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY ];\n\tlet tightBoxMax = [ Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY ];\n\tlet mean = [0, 0, 0];\n\t\n\n\tlet attributeBuffers = {};\n\tlet inOffset = 0;\n\tfor (let pointAttribute of pointAttributes.attributes) {\n\t\t\n\t\tif (pointAttribute.name === \"POSITION_CARTESIAN\") {\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4 * 3);\n\t\t\tlet positions = new Float32Array(buff);\n\t\t\n\t\t\tfor (let j = 0; j < numPoints; j++) {\n\t\t\t\tlet x, y, z;\n\n\t\t\t\tif (version.newerThan('1.3')) {\n\t\t\t\t\tx = (view.getUint32(inOffset + j * pointAttributes.byteSize + 0, true) * scale);\n\t\t\t\t\ty = (view.getUint32(inOffset + j * pointAttributes.byteSize + 4, true) * scale);\n\t\t\t\t\tz = (view.getUint32(inOffset + j * pointAttributes.byteSize + 8, true) * scale);\n\t\t\t\t} else {\n\t\t\t\t\tx = view.getFloat32(j * pointAttributes.byteSize + 0, true) + nodeOffset[0];\n\t\t\t\t\ty = view.getFloat32(j * pointAttributes.byteSize + 4, true) + nodeOffset[1];\n\t\t\t\t\tz = view.getFloat32(j * pointAttributes.byteSize + 8, true) + nodeOffset[2];\n\t\t\t\t}\n\n\t\t\t\tpositions[3 * j + 0] = x;\n\t\t\t\tpositions[3 * j + 1] = y;\n\t\t\t\tpositions[3 * j + 2] = z;\n\n\t\t\t\tmean[0] += x / numPoints;\n\t\t\t\tmean[1] += y / numPoints;\n\t\t\t\tmean[2] += z / numPoints;\n\n\t\t\t\ttightBoxMin[0] = Math.min(tightBoxMin[0], x);\n\t\t\t\ttightBoxMin[1] = Math.min(tightBoxMin[1], y);\n\t\t\t\ttightBoxMin[2] = Math.min(tightBoxMin[2], z);\n\n\t\t\t\ttightBoxMax[0] = Math.max(tightBoxMax[0], x);\n\t\t\t\ttightBoxMax[1] = Math.max(tightBoxMax[1], y);\n\t\t\t\ttightBoxMax[2] = Math.max(tightBoxMax[2], z);\n\t\t\t}\n\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\n\t\t} else if (pointAttribute.name === \"rgba\") {\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4);\n\t\t\tlet colors = new Uint8Array(buff);\n\n\t\t\tfor (let j = 0; j < numPoints; j++) {\n\t\t\t\tcolors[4 * j + 0] = view.getUint8(inOffset + j * pointAttributes.byteSize + 0);\n\t\t\t\tcolors[4 * j + 1] = view.getUint8(inOffset + j * pointAttributes.byteSize + 1);\n\t\t\t\tcolors[4 * j + 2] = view.getUint8(inOffset + j * pointAttributes.byteSize + 2);\n\t\t\t}\n\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\n\t\t} else if (pointAttribute.name === \"NORMAL_SPHEREMAPPED\") {\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4 * 3);\n\t\t\tlet normals = new Float32Array(buff);\n\n\t\t\tfor (let j = 0; j < numPoints; j++) {\n\t\t\t\tlet bx = view.getUint8(inOffset + j * pointAttributes.byteSize + 0);\n\t\t\t\tlet by = view.getUint8(inOffset + j * pointAttributes.byteSize + 1);\n\n\t\t\t\tlet ex = bx / 255;\n\t\t\t\tlet ey = by / 255;\n\n\t\t\t\tlet nx = ex * 2 - 1;\n\t\t\t\tlet ny = ey * 2 - 1;\n\t\t\t\tlet nz = 1;\n\t\t\t\tlet nw = -1;\n\n\t\t\t\tlet l = (nx * (-nx)) + (ny * (-ny)) + (nz * (-nw));\n\t\t\t\tnz = l;\n\t\t\t\tnx = nx * Math.sqrt(l);\n\t\t\t\tny = ny * Math.sqrt(l);\n\n\t\t\t\tnx = nx * 2;\n\t\t\t\tny = ny * 2;\n\t\t\t\tnz = nz * 2 - 1;\n\n\t\t\t\tnormals[3 * j + 0] = nx;\n\t\t\t\tnormals[3 * j + 1] = ny;\n\t\t\t\tnormals[3 * j + 2] = nz;\n\t\t\t}\n\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\n\t\t} else if (pointAttribute.name === \"NORMAL_OCT16\") {\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4 * 3);\n\t\t\tlet normals = new Float32Array(buff);\n\n\t\t\tfor (let j = 0; j < numPoints; j++) {\n\t\t\t\tlet bx = view.getUint8(inOffset + j * pointAttributes.byteSize + 0);\n\t\t\t\tlet by = view.getUint8(inOffset + j * pointAttributes.byteSize + 1);\n\n\t\t\t\tlet u = (bx / 255) * 2 - 1;\n\t\t\t\tlet v = (by / 255) * 2 - 1;\n\n\t\t\t\tlet z = 1 - Math.abs(u) - Math.abs(v);\n\n\t\t\t\tlet x = 0;\n\t\t\t\tlet y = 0;\n\t\t\t\tif (z >= 0) {\n\t\t\t\t\tx = u;\n\t\t\t\t\ty = v;\n\t\t\t\t} else {\n\t\t\t\t\tx = -(v / Math.sign(v) - 1) / Math.sign(u);\n\t\t\t\t\ty = -(u / Math.sign(u) - 1) / Math.sign(v);\n\t\t\t\t}\n\n\t\t\t\tlet length = Math.sqrt(x * x + y * y + z * z);\n\t\t\t\tx = x / length;\n\t\t\t\ty = y / length;\n\t\t\t\tz = z / length;\n\t\t\t\t\n\t\t\t\tnormals[3 * j + 0] = x;\n\t\t\t\tnormals[3 * j + 1] = y;\n\t\t\t\tnormals[3 * j + 2] = z;\n\t\t\t}\n\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\n\t\t} else if (pointAttribute.name === \"NORMAL\") {\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4 * 3);\n\t\t\tlet normals = new Float32Array(buff);\n\n\t\t\tfor (let j = 0; j < numPoints; j++) {\n\t\t\t\tlet x = view.getFloat32(inOffset + j * pointAttributes.byteSize + 0, true);\n\t\t\t\tlet y = view.getFloat32(inOffset + j * pointAttributes.byteSize + 4, true);\n\t\t\t\tlet z = view.getFloat32(inOffset + j * pointAttributes.byteSize + 8, true);\n\t\t\t\t\n\t\t\t\tnormals[3 * j + 0] = x;\n\t\t\t\tnormals[3 * j + 1] = y;\n\t\t\t\tnormals[3 * j + 2] = z;\n\t\t\t}\n\n\t\t\tattributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute };\n\t\t} else {\n\t\t\tlet buff = new ArrayBuffer(numPoints * 4);\n\t\t\tlet f32 = new Float32Array(buff);\n\n\t\t\tlet TypedArray = typedArrayMapping[pointAttribute.type.name];\n\t\t\tpreciseBuffer = new TypedArray(numPoints);\n\n\t\t\tlet [min, max] = [Infinity, -Infinity];\n\t\t\tlet [offset, scale] = [0, 1];\n\n\t\t\tconst getterMap = {\n\t\t\t\t\"int8\":   view.getInt8,\n\t\t\t\t\"int16\":  view.getInt16,\n\t\t\t\t\"int32\":  view.getInt32,\n\t\t\t\t\"int64\":  view.getInt64,\n\t\t\t\t\"uint8\":  view.getUint8,\n\t\t\t\t\"uint16\": view.getUint16,\n\t\t\t\t\"uint32\": view.getUint32,\n\t\t\t\t\"uint64\": view.getUint64,\n\t\t\t\t\"float\":  view.getFloat32,\n\t\t\t\t\"double\": view.getFloat64,\n\t\t\t};\n\t\t\tconst getter = getterMap[pointAttribute.type.name].bind(view);\n\n\t\t\t// compute offset and scale to pack larger types into 32 bit floats\n\t\t\tif(pointAttribute.type.size > 4){\n\t\t\t\tfor(let j = 0; j < numPoints; j++){\n\t\t\t\t\tlet value = getter(inOffset + j * pointAttributes.byteSize, true);\n\n\t\t\t\t\tif(!Number.isNaN(value)){\n\t\t\t\t\t\tmin = Math.min(min, value);\n\t\t\t\t\t\tmax = Math.max(max, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t\n\n\t\t\t\tif(pointAttribute.initialRange != null){\n\t\t\t\t\toffset = pointAttribute.initialRange[0];\n\t\t\t\t\tscale = 1 / (pointAttribute.initialRange[1] - pointAttribute.initialRange[0]);\n\t\t\t\t}else {\n\t\t\t\t\toffset = min;\n\t\t\t\t\tscale = 1 / (max - min);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\n\t\t\tfor(let j = 0; j < numPoints; j++){\n\t\t\t\tlet value = getter(inOffset + j * pointAttributes.byteSize, true);\n\n\t\t\t\tif(!Number.isNaN(value)){\n\t\t\t\t\tmin = Math.min(min, value);\n\t\t\t\t\tmax = Math.max(max, value);\n\t\t\t\t}\n\n\t\t\t\tf32[j] = (value - offset) * scale;\n\t\t\t\tpreciseBuffer[j] = value;\n\t\t\t}\n\n\t\t\tpointAttribute.range = [min, max];\n\n\t\t\tattributeBuffers[pointAttribute.name] = { \n\t\t\t\tbuffer: buff,\n\t\t\t\tpreciseBuffer: preciseBuffer,\n\t\t\t\tattribute: pointAttribute,\n\t\t\t\toffset: offset,\n\t\t\t\tscale: scale,\n\t\t\t};\n\t\t}\n\n\t\tinOffset += pointAttribute.byteSize;\n\t}\n\n\t{ // add indices\n\t\tlet buff = new ArrayBuffer(numPoints * 4);\n\t\tlet indices = new Uint32Array(buff);\n\n\t\tfor (let i = 0; i < numPoints; i++) {\n\t\t\tindices[i] = i;\n\t\t}\n\t\t\n\t\tattributeBuffers[\"INDICES\"] = { buffer: buff, attribute: PointAttribute.INDICES };\n\t}\n\n\t{ // handle attribute vectors\n\t\tlet vectors = pointAttributes.vectors;\n\n\t\tfor(let vector of vectors){\n\n\t\t\tlet {name, attributes} = vector;\n\t\t\tlet numVectorElements = attributes.length;\n\t\t\tlet buffer = new ArrayBuffer(numVectorElements * numPoints * 4);\n\t\t\tlet f32 = new Float32Array(buffer);\n\n\t\t\tlet iElement = 0;\n\t\t\tfor(let sourceName of attributes){\n\t\t\t\tlet sourceBuffer = attributeBuffers[sourceName];\n\t\t\t\tlet {offset, scale} = sourceBuffer;\n\t\t\t\tlet view = new DataView(sourceBuffer.buffer);\n\n\t\t\t\tconst getter = view.getFloat32.bind(view);\n\n\t\t\t\tfor(let j = 0; j < numPoints; j++){\n\t\t\t\t\tlet value = getter(j * 4, true);\n\n\t\t\t\t\tf32[j * numVectorElements + iElement] = (value / scale) + offset;\n\t\t\t\t}\n\n\t\t\t\tiElement++;\n\t\t\t}\n\n\t\t\tlet vecAttribute = new PointAttribute(name, PointAttributeTypes.DATA_TYPE_FLOAT, 3);\n\n\t\t\tattributeBuffers[name] = { \n\t\t\t\tbuffer: buffer, \n\t\t\t\tattribute: vecAttribute,\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\tperformance.mark(\"binary-decoder-end\");\n\n\t// { // print timings\n\t// \t//performance.measure(\"spacing\", \"spacing-start\", \"spacing-end\");\n\t// \tperformance.measure(\"binary-decoder\", \"binary-decoder-start\", \"binary-decoder-end\");\n\t// \tlet measure = performance.getEntriesByType(\"measure\")[0];\n\t// \tlet dpp = 1000 * measure.duration / numPoints;\n\t// \tlet pps = parseInt(numPoints / (measure.duration / 1000));\n\t// \tlet debugMessage = `${measure.duration.toFixed(3)} ms, ${numPoints} points, ${pps.toLocaleString()} points/sec`;\n\t// \tconsole.log(debugMessage);\n\t// }\n\n\tperformance.clearMarks();\n\tperformance.clearMeasures();\n\n\tlet message = {\n\t\tbuffer: buffer,\n\t\tmean: mean,\n\t\tattributeBuffers: attributeBuffers,\n\t\ttightBoundingBox: { min: tightBoxMin, max: tightBoxMax },\n\t};\n\n\tlet transferables = [];\n\tfor (let property in message.attributeBuffers) {\n\t\ttransferables.push(message.attributeBuffers[property].buffer);\n\t}\n\ttransferables.push(buffer);\n\n\tpostMessage(message, transferables);\n};\n"
  },
  {
    "path": "libs/potree/workers/EptBinaryDecoderWorker.js",
    "content": "function parseEpt(event) {\n\tlet buffer = event.data.buffer;\n\tlet view = new DataView(buffer);\n\tlet schema = event.data.schema;\n\tlet scale = event.data.scale;\n\tlet offset = event.data.offset;\n\tlet mins = event.data.mins;\n\n\tlet dimensions = schema.reduce((p, c) => {\n\t\tp[c.name] = c;\n\t\treturn p;\n\t}, { });\n\n\tlet dimOffset = (name) => {\n\t\tlet offset = 0;\n\t\tfor (var i = 0; i < schema.length; ++i) {\n\t\t\tif (schema[i].name == name) return offset;\n\t\t\toffset += schema[i].size;\n\t\t}\n\t\treturn undefined;\n\t};\n\n\tlet getExtractor = (name) => {\n\t\tlet offset = dimOffset(name);\n\t\tlet type = dimensions[name].type;\n\t\tlet size = dimensions[name].size;\n\n\t\tif (type == 'signed') switch (size) {\n\t\t\tcase 1: return (p) => view.getInt8(p + offset);\n\t\t\tcase 2: return (p) => view.getInt16(p + offset, true);\n\t\t\tcase 4: return (p) => view.getInt32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getInt64(p + offset, true);\n\t\t}\n\t\tif (type == 'unsigned') switch (size) {\n\t\t\tcase 1: return (p) => view.getUint8(p + offset);\n\t\t\tcase 2: return (p) => view.getUint16(p + offset, true);\n\t\t\tcase 4: return (p) => view.getUint32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getUint64(p + offset, true);\n\t\t}\n\t\tif (type == 'float') switch (size) {\n\t\t\tcase 4: return (p) => view.getFloat32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getFloat64(p + offset, true);\n\t\t}\n\n\t\tlet str = JSON.stringify(dimensions[name]);\n\t\tthrow new Error(`Invalid dimension specification for ${name}: ${str}`);\n\t};\n\n\tlet pointSize = schema.reduce((p, c) => p + c.size, 0);\n\tlet numPoints = buffer.byteLength / pointSize;\n\n\tlet xyzBuffer, rgbBuffer, intensityBuffer, classificationBuffer,\n\t\treturnNumberBuffer, numberOfReturnsBuffer, pointSourceIdBuffer;\n\tlet xyz, rgb, intensity, classification, returnNumber, numberOfReturns,\n\t\tpointSourceId;\n\tlet xyzExtractor, rgbExtractor, intensityExtractor, classificationExtractor,\n\t\treturnNumberExtractor, numberOfReturnsExtractor, pointSourceIdExtractor;\n\tlet twoByteColor = false;\n\n\tif (dimensions['X'] && dimensions['Y'] && dimensions['Z']) {\n\t\txyzBuffer = new ArrayBuffer(numPoints * 4 * 3);\n\t\txyz = new Float32Array(xyzBuffer);\n\t\txyzExtractor = [\n\t\t\tgetExtractor('X'),\n\t\t\tgetExtractor('Y'),\n\t\t\tgetExtractor('Z')\n\t\t];\n\t}\n\n\tif (dimensions['Red'] && dimensions['Green'] && dimensions['Blue']) {\n\t\trgbBuffer = new ArrayBuffer(numPoints * 4);\n\t\trgb = new Uint8Array(rgbBuffer);\n\t\trgbExtractor = [\n\t\t\tgetExtractor('Red'),\n\t\t\tgetExtractor('Green'),\n\t\t\tgetExtractor('Blue')\n\t\t];\n\n\t\tlet r, g, b, pos;\n\t\tfor (let i = 0; i < numPoints && !twoByteColor; ++i) {\n\t\t\tpos = i * pointSize;\n\t\t\tr = rgbExtractor[0](pos);\n\t\t\tg = rgbExtractor[1](pos);\n\t\t\tb = rgbExtractor[2](pos);\n\t\t\tif (r > 255 || g > 255 || b > 255) twoByteColor = true;\n\t\t}\n\t}\n\n\tif (dimensions['Intensity']) {\n\t\tintensityBuffer = new ArrayBuffer(numPoints * 4);\n\t\tintensity = new Float32Array(intensityBuffer);\n\t\tintensityExtractor = getExtractor('Intensity');\n\t}\n\n\tif (dimensions['Classification']) {\n\t\tclassificationBuffer = new ArrayBuffer(numPoints);\n\t\tclassification = new Uint8Array(classificationBuffer);\n\t\tclassificationExtractor = getExtractor('Classification');\n\t}\n\n\tif (dimensions['ReturnNumber']) {\n\t\treturnNumberBuffer = new ArrayBuffer(numPoints);\n\t\treturnNumber = new Uint8Array(returnNumberBuffer);\n\t\treturnNumberExtractor = getExtractor('ReturnNumber');\n\t}\n\n\tif (dimensions['NumberOfReturns']) {\n\t\tnumberOfReturnsBuffer = new ArrayBuffer(numPoints);\n\t\tnumberOfReturns = new Uint8Array(numberOfReturnsBuffer);\n\t\tnumberOfReturnsExtractor = getExtractor('NumberOfReturns');\n\t}\n\n\tif (dimensions['PointSourceId']) {\n\t\tpointSourceIdBuffer = new ArrayBuffer(numPoints * 2);\n\t\tpointSourceId = new Uint16Array(pointSourceIdBuffer);\n\t\tpointSourceIdExtractor = getExtractor('PointSourceId');\n\t}\n\n\tlet mean = [0, 0, 0];\n\tlet bounds = {\n\t\tmin: [Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE],\n\t\tmax: [-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE],\n\t};\n\n\tlet x, y, z, r, g, b;\n\tfor (let i = 0; i < numPoints; ++i) {\n\t\tlet pos = i * pointSize;\n\t\tif (xyz) {\n\t\t\tx = xyzExtractor[0](pos) * scale.x + offset.x - mins[0];\n\t\t\ty = xyzExtractor[1](pos) * scale.y + offset.y - mins[1];\n\t\t\tz = xyzExtractor[2](pos) * scale.z + offset.z - mins[2];\n\n\t\t\tmean[0] += x / numPoints;\n\t\t\tmean[1] += y / numPoints;\n\t\t\tmean[2] += z / numPoints;\n\n\t\t\tbounds.min[0] = Math.min(bounds.min[0], x);\n\t\t\tbounds.min[1] = Math.min(bounds.min[1], y);\n\t\t\tbounds.min[2] = Math.min(bounds.min[2], z);\n\n\t\t\tbounds.max[0] = Math.max(bounds.max[0], x);\n\t\t\tbounds.max[1] = Math.max(bounds.max[1], y);\n\t\t\tbounds.max[2] = Math.max(bounds.max[2], z);\n\n\t\t\txyz[3 * i + 0] = x;\n\t\t\txyz[3 * i + 1] = y;\n\t\t\txyz[3 * i + 2] = z;\n\t\t}\n\n\t\tif (rgb) {\n\t\t\tr = rgbExtractor[0](pos);\n\t\t\tg = rgbExtractor[1](pos);\n\t\t\tb = rgbExtractor[2](pos);\n\n\t\t\tif (twoByteColor) {\n\t\t\t\tr /= 256;\n\t\t\t\tg /= 256;\n\t\t\t\tb /= 256;\n\t\t\t}\n\n\t\t\trgb[4 * i + 0] = r;\n\t\t\trgb[4 * i + 1] = g;\n\t\t\trgb[4 * i + 2] = b;\n\t\t}\n\n\t\tif (intensity) intensity[i] = intensityExtractor(pos);\n\t\tif (classification) classification[i] = classificationExtractor(pos);\n\t\tif (returnNumber) returnNumber[i] = returnNumberExtractor(pos);\n\t\tif (numberOfReturns) numberOfReturns[i] = numberOfReturnsExtractor(pos);\n\t\tif (pointSourceId) pointSourceId[i] = pointSourceIdExtractor(pos);\n\t}\n\n\tlet indicesBuffer = new ArrayBuffer(numPoints * 4);\n\tlet indices = new Uint32Array(indicesBuffer);\n\tfor (let i = 0; i < numPoints; ++i) {\n\t\tindices[i] = i;\n\t}\n\n\tlet message = {\n\t\tnumPoints: numPoints,\n\t\ttightBoundingBox: bounds,\n\t\tmean: mean,\n\n\t\tposition: xyzBuffer,\n\t\tcolor: rgbBuffer,\n\t\tintensity: intensityBuffer,\n\t\tclassification: classificationBuffer,\n\t\treturnNumber: returnNumberBuffer,\n\t\tnumberOfReturns: numberOfReturnsBuffer,\n\t\tpointSourceId: pointSourceIdBuffer,\n\t\tindices: indicesBuffer\n\t};\n\n\tlet transferables = [\n\t\tmessage.position,\n\t\tmessage.color,\n\t\tmessage.intensity,\n\t\tmessage.classification,\n\t\tmessage.returnNumber,\n\t\tmessage.numberOfReturns,\n\t\tmessage.pointSourceId,\n\t\tmessage.indices\n\t].filter((v) => v);\n\n\tpostMessage(message, transferables);\n}\n\n\n// importScripts('/libs/ept/ParseBuffer.js');\nonmessage = function(event) {\n\tparseEpt(event);\n}\n\n"
  },
  {
    "path": "libs/potree/workers/EptLaszipDecoderWorker.js",
    "content": "function readUsingDataView(event) {\n\tperformance.mark(\"laslaz-start\");\n\n\tlet buffer = event.data.buffer;\n\tlet numPoints = event.data.numPoints;\n\tlet pointSize = event.data.pointSize;\n\tlet pointFormat = event.data.pointFormatID;\n\n\t// gps time byte offsets from LAS specification\n\tlet gpsOffsets = [null, 20, null, 20, 20, 20, 22, 22, 22, 22, 22] \n\tlet gpsOffset = gpsOffsets[pointFormat];\n\n\tlet scale = event.data.scale;\n\tlet offset = event.data.offset;\n\n\tlet sourceUint8 = new Uint8Array(buffer);\n\tlet sourceView = new DataView(buffer);\n\n\tlet tightBoundingBox = {\n\t\tmin: [\n\t\t\tNumber.POSITIVE_INFINITY,\n\t\t\tNumber.POSITIVE_INFINITY,\n\t\t\tNumber.POSITIVE_INFINITY\n\t\t],\n\t\tmax: [\n\t\t\tNumber.NEGATIVE_INFINITY,\n\t\t\tNumber.NEGATIVE_INFINITY,\n\t\t\tNumber.NEGATIVE_INFINITY\n\t\t]\n\t};\n\n\tlet mean = [0, 0, 0];\n\n\tlet pBuff = new ArrayBuffer(numPoints * 3 * 4);\n\tlet cBuff = new ArrayBuffer(numPoints * 4);\n\tlet iBuff = new ArrayBuffer(numPoints * 4);\n\tlet clBuff = new ArrayBuffer(numPoints);\n\tlet rnBuff = new ArrayBuffer(numPoints);\n\tlet nrBuff = new ArrayBuffer(numPoints);\n\tlet psBuff = new ArrayBuffer(numPoints * 2);\n\tlet gpsBuff64 = new ArrayBuffer(numPoints * 8);\n\tlet gpsBuff32 = new ArrayBuffer(numPoints * 4);\n\n\tlet positions = new Float32Array(pBuff);\n\tlet colors = new Uint8Array(cBuff);\n\tlet intensities = new Float32Array(iBuff);\n\tlet classifications = new Uint8Array(clBuff);\n\tlet returnNumbers = new Uint8Array(rnBuff);\n\tlet numberOfReturns = new Uint8Array(nrBuff);\n\tlet pointSourceIDs = new Uint16Array(psBuff);\n\tlet gpsTime64 = new Float64Array(gpsBuff64)\n\tlet gpsTime32 = new Float32Array(gpsBuff32)\n\n\t// Point format 3 contains an 8-byte GpsTime before RGB values, so make\n\t// sure we have the correct color offset.\n\tlet hasColor = pointFormat == 2 || pointFormat == 3;\n\tlet co = pointFormat == 2 ? 20 : 28;\n\n\t// TODO This should be cached per-resource since this is an expensive check.\n\tlet twoByteColor = false;\n\tif (hasColor) {\n\t\tlet r, g, b, pos;\n\t\tfor (let i = 0; i < numPoints && !twoByteColor; ++i) {\n\t\t\tpos = i * pointSize;\n\t\t\tr = sourceView.getUint16(pos + co, true)\n\t\t\tg = sourceView.getUint16(pos + co + 2, true)\n\t\t\tb = sourceView.getUint16(pos + co + 4, true)\n\t\t\tif (r > 255 || g > 255 || b > 255) twoByteColor = true;\n\t\t}\n\t}\n\n\tfor (let i = 0; i < numPoints; i++) {\n\t\t// POSITION\n\t\tlet ux = sourceView.getInt32(i * pointSize + 0, true);\n\t\tlet uy = sourceView.getInt32(i * pointSize + 4, true);\n\t\tlet uz = sourceView.getInt32(i * pointSize + 8, true);\n\n\t\tx = ux * scale[0] + offset[0] - event.data.mins[0];\n\t\ty = uy * scale[1] + offset[1] - event.data.mins[1];\n\t\tz = uz * scale[2] + offset[2] - event.data.mins[2];\n\n\t\tpositions[3 * i + 0] = x;\n\t\tpositions[3 * i + 1] = y;\n\t\tpositions[3 * i + 2] = z;\n\n\t\tmean[0] += x / numPoints;\n\t\tmean[1] += y / numPoints;\n\t\tmean[2] += z / numPoints;\n\n\t\ttightBoundingBox.min[0] = Math.min(tightBoundingBox.min[0], x);\n\t\ttightBoundingBox.min[1] = Math.min(tightBoundingBox.min[1], y);\n\t\ttightBoundingBox.min[2] = Math.min(tightBoundingBox.min[2], z);\n\n\t\ttightBoundingBox.max[0] = Math.max(tightBoundingBox.max[0], x);\n\t\ttightBoundingBox.max[1] = Math.max(tightBoundingBox.max[1], y);\n\t\ttightBoundingBox.max[2] = Math.max(tightBoundingBox.max[2], z);\n\n\t\t// INTENSITY\n\t\tlet intensity = sourceView.getUint16(i * pointSize + 12, true);\n\t\tintensities[i] = intensity;\n\n\t\t// RETURN NUMBER, stored in the first 3 bits - 00000111\n\t\t// number of returns stored in next 3 bits\t - 00111000\n\t\tlet returnNumberAndNumberOfReturns = sourceView.getUint8(i * pointSize + 14, true);\n\t\tlet returnNumber = returnNumberAndNumberOfReturns & 0b0111;\n\t\tlet numberOfReturn = (returnNumberAndNumberOfReturns & 0b00111000) >> 3;\n\t\treturnNumbers[i] = returnNumber;\n\t\tnumberOfReturns[i] = numberOfReturn;\n\n\t\t// CLASSIFICATION\n\t\tlet classification = sourceView.getUint8(i * pointSize + 15, true);\n\t\tclassifications[i] = classification;\n\n\t\t// POINT SOURCE ID\n\t\tlet pointSourceID = sourceView.getUint16(i * pointSize + 18, true);\n\t\tpointSourceIDs[i] = pointSourceID;\n\n\t\t// COLOR, if available\n\t\tif (hasColor) {\n\t\t\tlet r = sourceView.getUint16(i * pointSize + co, true)\n\t\t\tlet g = sourceView.getUint16(i * pointSize + co + 2, true)\n\t\t\tlet b = sourceView.getUint16(i * pointSize + co + 4, true)\n\n\t\t\tif (twoByteColor) {\n\t\t\t\tr /= 256;\n\t\t\t\tg /= 256;\n\t\t\t\tb /= 256;\n\t\t\t}\n\n\t\t\tcolors[4 * i + 0] = r;\n\t\t\tcolors[4 * i + 1] = g;\n\t\t\tcolors[4 * i + 2] = b;\n\t\t\tcolors[4 * i + 3] = 255;\n\t\t}\n\t}\n\n\tlet min = Infinity\n\tlet max = -Infinity\n\n\tfor (let i = 0; i < numPoints; i++) {\n\t\tmin = Math.min(min, gpsTime64[i])\n\t\tmax = Math.max(max, gpsTime64[i])\n\t}\n\n\tfor (let i = 0; i < numPoints; i++) {\n\t\tgpsTime32[i] = gpsTime64[i] = min\n\t}\n\n\tlet indices = new ArrayBuffer(numPoints * 4);\n\tlet iIndices = new Uint32Array(indices);\n\tfor (let i = 0; i < numPoints; i++) {\n\t\tiIndices[i] = i;\n\t}\n\n\tperformance.mark(\"laslaz-end\");\n\n\t//{ // print timings\n\t//\t  performance.measure(\"laslaz\", \"laslaz-start\", \"laslaz-end\");\n\t//\t  let measure = performance.getEntriesByType(\"measure\")[0];\n\t//\t  let dpp = 1000 * measure.duration / numPoints;\n\t//\t  let debugMessage = `${measure.duration.toFixed(3)} ms, ${numPoints} points, ${dpp.toFixed(3)} µs / point`;\n\t//\t  console.log(debugMessage);\n\t//}\n\tperformance.clearMarks();\n\tperformance.clearMeasures();\n\n\tlet message = {\n\t\tmean: mean,\n\t\tposition: pBuff,\n\t\tcolor: cBuff,\n\t\tintensity: iBuff,\n\t\tclassification: clBuff,\n\t\treturnNumber: rnBuff,\n\t\tnumberOfReturns: nrBuff,\n\t\tpointSourceID: psBuff,\n\t\ttightBoundingBox: tightBoundingBox,\n\t\tindices: indices,\n\t\tgpsTime: gpsBuff32,\n\t\tgpsMeta: { offset: min, range: max-min }\n\t};\n\n\tlet transferables = [\n\t\tmessage.position,\n\t\tmessage.color,\n\t\tmessage.intensity,\n\t\tmessage.classification,\n\t\tmessage.returnNumber,\n\t\tmessage.numberOfReturns,\n\t\tmessage.pointSourceID,\n\t\tmessage.indices,\n\t\tmessage.gpsTime\n\t];\n\n\tpostMessage(message, transferables);\n};\n\n\n\nonmessage = readUsingDataView;\n\n"
  },
  {
    "path": "libs/potree/workers/EptZstandardDecoderWorker.js",
    "content": "window = { };\r\ndocument = { };\n(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n'use strict';window.ZstdCodec=require('./lib/zstd-codec.js');window.ZstdStream=require('./lib/zstd-stream.js');\n\n},{\"./lib/zstd-codec.js\":7,\"./lib/zstd-stream.js\":8}],2:[function(require,module,exports){\n\"use strict\";exports.DEFAULT_COMPRESSION_LEVEL=3;exports.STREAMING_DEFAULT_BUFFER_SIZE=512*1024;\n\n},{}],3:[function(require,module,exports){\n(function (Buffer){\n'use strict';var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var ArrayBufferHelper=function(){function ArrayBufferHelper(){_classCallCheck(this,ArrayBufferHelper);}_createClass(ArrayBufferHelper,null,[{key:'transfer',value:function transfer(old_buffer,new_capacity){var bytes=new Uint8Array(new ArrayBuffer(new_capacity));bytes.set(new Uint8Array(old_buffer.slice(0,new_capacity)));return bytes.buffer;}}]);return ArrayBufferHelper;}();var getClassName=function getClassName(obj){if(!obj||(typeof obj==='undefined'?'undefined':_typeof(obj))!='object')return null;// Object.prototype.toString returns '[object ClassName]',\n// remove prefix '[object ' and suffix ']'\nreturn Object.prototype.toString.call(obj).slice('[object '.length,-1);};var isUint8Array=function isUint8Array(obj){return getClassName(obj)=='Uint8Array';};var isString=function isString(obj){return typeof obj=='string'||getClassName(obj)=='String';};var toTypedArray=function toTypedArray(chunk,encoding,string_decoder){if(isString(chunk)){chunk=string_decoder(encoding);}if(isUint8Array(chunk)){// NOTE: Buffer is recognized as Uint8Array object.\nreturn chunk;}else if(getClassName(chunk)=='ArrayBuffer'){return new Uint8Array(chunk);}else if(Array.isArray(chunk)){return new Uint8Array(chunk);}return null;};// NOTE: only available on Node.js environment\nvar fromTypedArrayToBuffer=function fromTypedArrayToBuffer(typedArray){return Buffer.from(typedArray.buffer);};exports.ArrayBufferHelper=ArrayBufferHelper;exports.getClassName=getClassName;exports.isUint8Array=isUint8Array;exports.isString=isString;exports.toTypedArray=toTypedArray;exports.fromTypedArrayToBuffer=fromTypedArrayToBuffer;\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],4:[function(require,module,exports){\n\"use strict\";var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};// REF: https://stackoverflow.com/a/47880734\nvar wasmSupported=function(){try{if((typeof WebAssembly===\"undefined\"?\"undefined\":_typeof(WebAssembly))===\"object\"&&typeof WebAssembly.instantiate===\"function\"){var module=new WebAssembly.Module(Uint8Array.of(0x0,0x61,0x73,0x6d,0x01,0x00,0x00,0x00));if(module instanceof WebAssembly.Module)return new WebAssembly.Instance(module)instanceof WebAssembly.Instance;}}catch(e){}return false;}();exports.run=function(f){var Module={};Module.onRuntimeInitialized=function(){f(Module);};if(wasmSupported){require('./zstd-codec-binding-wasm.js')(Module);}else{require('./zstd-codec-binding.js')(Module);}};\n\n},{\"./zstd-codec-binding-wasm.js\":5,\"./zstd-codec-binding.js\":6}],5:[function(require,module,exports){\n(function (process,Buffer,__dirname){\n'use strict';var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var Module=function(){var _scriptDir=typeof document!=='undefined'&&document.currentScript?document.currentScript.src:undefined;return function(Module){Module=Module||{};var Module;if(!Module)Module=typeof Module!=='undefined'?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key];}}Module[\"arguments\"]=[];Module[\"thisProgram\"]=\"./this.program\";Module[\"quit\"]=function(status,toThrow){throw toThrow;};Module[\"preRun\"]=[];Module[\"postRun\"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=(typeof window==='undefined'?'undefined':_typeof(window))===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=(typeof process==='undefined'?'undefined':_typeof(process))===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory);}else{return scriptDirectory+path;}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+\"/\";var nodeFS;var nodePath;Module[\"read\"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename);}return binary?ret:ret.toString();};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret);}assert(ret.buffer);return ret;};if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\");}Module[\"arguments\"]=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex;}});process[\"on\"](\"unhandledRejection\",function(reason,p){process[\"exit\"](1);});Module[\"quit\"]=function(status){process[\"exit\"](status);};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\";};}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){Module[\"read\"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data);}return read(f);};}Module[\"readBinary\"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data;}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f));}data=read(f,\"binary\");assert((typeof data==='undefined'?'undefined':_typeof(data))===\"object\");return data;};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs;}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments;}if(typeof quit===\"function\"){Module[\"quit\"]=function(status){quit(status);};}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WEB){if(document.currentScript){scriptDirectory=document.currentScript.src;}}else{scriptDirectory=self.location.href;}if(_scriptDir){scriptDirectory=_scriptDir;}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.split(\"/\").slice(0,-1).join(\"/\")+\"/\";}else{scriptDirectory=\"\";}Module[\"read\"]=function shell_read(url){try{var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText;}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data);}throw err;}};if(ENVIRONMENT_IS_WORKER){Module[\"readBinary\"]=function readBinary(url){try{var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response);}catch(err){var data=tryParseAsDataURI(url);if(data){return data;}throw err;}};}Module[\"readAsync\"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return;}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return;}onerror();};xhr.onerror=onerror;xhr.send(null);};Module[\"setWindowTitle\"]=function(title){document.title=title;};}else{}var out=Module[\"print\"]||(typeof console!==\"undefined\"?console.log.bind(console):typeof print!==\"undefined\"?print:null);var err=Module[\"printErr\"]||(typeof printErr!==\"undefined\"?printErr:typeof console!==\"undefined\"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key];}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret;}function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0;}}return ret;}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret;}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4;}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8;}else{return 0;}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text);}}var asm2wasmImports={\"f64-rem\":function f64Rem(x,y){return x%y;},\"debugger\":function _debugger(){debugger;}};var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args));}else{return Module[\"dynCall_\"+sig].call(null,ptr);}}var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text);}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func;}var JSfuncs={\"stackSave\":function stackSave(){_stackSave();},\"stackRestore\":function stackRestore(){_stackRestore();},\"arrayToC\":function arrayToC(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret;},\"stringToC\":function stringToC(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len);}return ret;}};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};function ccall(ident,returnType,argTypes,args,opts){function convertReturnValue(ret){if(returnType===\"string\")return Pointer_stringify(ret);if(returnType===\"boolean\")return Boolean(ret);return ret;}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=_stackSave();cArgs[i]=converter(args[i]);}else{cArgs[i]=args[i];}}}var ret=func.apply(null,cArgs);ret=convertReturnValue(ret);if(stack!==0)_stackRestore(stack);return ret;}function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type);}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function Pointer_stringify(ptr,length){if(length===0||!ptr)return\"\";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break;}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK;}return ret;}return UTF8ToString(ptr);}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr]){++endPtr;}if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr));}else{var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue;}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue;}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2;}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3;}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4;}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5;}}}if(u0<65536){str+=String.fromCharCode(u0);}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023);}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr);}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023;}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u;}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63;}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}}outU8Array[outIdx]=0;return outIdx-startIdx;}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len;}else if(u<=2047){len+=2;}else if(u<=65535){len+=3;}else if(u<=2097151){len+=4;}else if(u<=67108863){len+=5;}else{len+=6;}}return len;}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function demangle(func){var __cxa_demangle_func=Module[\"___cxa_demangle\"]||Module[\"__cxa_demangle\"];assert(__cxa_demangle_func);try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(HEAP32[status>>2]===0&&ret){return Pointer_stringify(ret);}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret);}return func;}function demangleAll(text){var regex=/__Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\";});}function jsStackTrace(){var err=new Error();if(!err.stack){try{throw new Error(0);}catch(e){err=e;}if(!err.stack){return\"(no stack trace available)\";}}return err.stack.toString();}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js);}var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple;}return x;}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module[\"buffer\"]=buffer=buf;}function updateGlobalBufferViews(){Module[\"HEAP8\"]=HEAP8=new Int8Array(buffer);Module[\"HEAP16\"]=HEAP16=new Int16Array(buffer);Module[\"HEAP32\"]=HEAP32=new Int32Array(buffer);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buffer);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buffer);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buffer);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buffer);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buffer);}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){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  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 \");}function enlargeMemory(){abortOnCannotGrowMemory();}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)err(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+TOTAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\");if(Module[\"buffer\"]){buffer=Module[\"buffer\"];}else{if((typeof WebAssembly==='undefined'?'undefined':_typeof(WebAssembly))===\"object\"&&typeof WebAssembly.Memory===\"function\"){Module[\"wasmMemory\"]=new WebAssembly.Memory({\"initial\":TOTAL_MEMORY/WASM_PAGE_SIZE,\"maximum\":TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=Module[\"wasmMemory\"].buffer;}else{buffer=new ArrayBuffer(TOTAL_MEMORY);}Module[\"buffer\"]=buffer;}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY;}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue;}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func);}else{Module[\"dynCall_vi\"](func,callback.arg);}}else{func(callback.arg===undefined?null:callback.arg);}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift());}}callRuntimeCallbacks(__ATPRERUN__);}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__);}function preMain(){callRuntimeCallbacks(__ATMAIN__);}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true;}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift());}}callRuntimeCallbacks(__ATPOSTRUN__);}function addOnPreRun(cb){__ATPRERUN__.unshift(cb);}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb);}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer);}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i);}if(!dontAddNull)HEAP8[buffer>>0]=0;}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id;}function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies);}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies);}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null;}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback();}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0;}function integrateWasmJS(){var wasmTextFile=\"\";var wasmBinaryFile=\"data:application/octet-stream;base64,AGFzbQEAAAABxQMzYAF/AGAAAX9gAn9/AGADf39/AGABfwF/YAN/f38Bf2AAAGACf38Bf2AEf39/fwF/YAV/f39/fwF/YAZ/f39/f38Bf2AEf39/fwBgBn9/f39/fwBgBX9/f39/AGANf39/f39/f39/f39/fwBgCH9/f39/f39/AGADf39/AXxgB39/f39/f38Bf2ABfwF+YAF+AX5gAn5+AX5gAn9+AX9gAn9+AGANf39/f39/f39/f39/fwF/YAh/f39/f39/fwF/YAx/f39/f39/f39/f38Bf2AEf39+fwBgAn5/AX9gBX9/fn9/AX9gBn9/f39/fgF/YAN/f34Bf2AFf39/f34Bf2ALf39/f39/f39/f38Bf2AHf39/f39/fwBgBX9/f35/AX9gCX9/f39/f39/fwF/YAp/f39/f39/f39/AX9gEH9/f39/f39/f39/f39/f38Bf2AEfn9/fgF+YAJ/fwF+YAN+f38Bf2AFf35/f38AYAd/fn9/f39/AX5gCH9/f39/f35/AX9gBn9/f39+fwF/YAR/f39+AX9gB39/f39/f34Bf2AJf39/f39/f39/AGACfn4Bf2AGf3x/f39/AX9gAnx/AXwC9Ak0A2VudgZtZW1vcnkCAYACgAIDZW52BXRhYmxlAXABnAOcAwNlbnYJdGFibGVCYXNlA38AA2Vudg5EWU5BTUlDVE9QX1BUUgN/AANlbnYIU1RBQ0tUT1ADfwADZW52CVNUQUNLX01BWAN/AANlbnYFYWJvcnQAAANlbnYNZW5sYXJnZU1lbW9yeQABA2Vudg5nZXRUb3RhbE1lbW9yeQABA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQABA2VudhlfX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uAAQDZW52DF9fX2N4YV90aHJvdwADA2VudgdfX19sb2NrAAADZW52C19fX3NldEVyck5vAAADZW52DV9fX3N5c2NhbGwxNDAABwNlbnYNX19fc3lzY2FsbDE0NQAHA2Vudg1fX19zeXNjYWxsMTQ2AAcDZW52DV9fX3N5c2NhbGwyMjEABwNlbnYLX19fc3lzY2FsbDUABwNlbnYMX19fc3lzY2FsbDU0AAcDZW52C19fX3N5c2NhbGw2AAcDZW52CV9fX3VubG9jawAAA2VudhZfX2VtYmluZF9yZWdpc3Rlcl9ib29sAA0DZW52F19fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzAA4DZW52I19fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yAAwDZW52IF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uAA8DZW52F19fZW1iaW5kX3JlZ2lzdGVyX2VtdmFsAAIDZW52F19fZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0AAMDZW52Gl9fZW1iaW5kX3JlZ2lzdGVyX2Z1bmN0aW9uAAwDZW52GV9fZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIADQNlbnYdX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcAAwNlbnYcX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZwACA2Vudh1fX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZwADA2VudhZfX2VtYmluZF9yZWdpc3Rlcl92b2lkAAIDZW52Cl9fZW12YWxfYXMAEANlbnYMX19lbXZhbF9jYWxsAAgDZW52GF9fZW12YWxfY2FsbF92b2lkX21ldGhvZAALA2Vudg5fX2VtdmFsX2RlY3JlZgAAA2VudhlfX2VtdmFsX2dldF9tZXRob2RfY2FsbGVyAAcDZW52G19fZW12YWxfZ2V0X21vZHVsZV9wcm9wZXJ0eQAEA2VudhRfX2VtdmFsX2dldF9wcm9wZXJ0eQAHA2Vudg5fX2VtdmFsX2luY3JlZgAAA2VudgtfX2VtdmFsX25ldwAIA2VudhNfX2VtdmFsX25ld19jc3RyaW5nAAQDZW52F19fZW12YWxfcnVuX2Rlc3RydWN0b3JzAAADZW52El9fZW12YWxfdGFrZV92YWx1ZQAHA2VudgZfYWJvcnQABgNlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA2VudhRfcHRocmVhZF9nZXRzcGVjaWZpYwAEA2VudhNfcHRocmVhZF9rZXlfY3JlYXRlAAcDZW52DV9wdGhyZWFkX29uY2UABwNlbnYUX3B0aHJlYWRfc2V0c3BlY2lmaWMABwPmB+QHBAEAAgIAAQYCAgQCBwIEBwcFBwcEBwUHBwAAAwMABAIAAgcEBAIHBAQCBwQEAgcEBAIHBAQCBwQCAwMFAwQAAQQDCwcFCAADBwQAAAUEBwQAAQUJCAQAAQgFBAEGBwcIBQgABAICBwQIAAQCBwQDAAQCBwQCAAQCBwQAAAcHAgQCBwcEBwQCBwcEBQcHAAQHBAIHBwQHBAIHBwQFBwcEBAkEBAQRCgQICQUDBAcHBwcCBwcEEhITBBIUFBUFBRIHBwIKBwkKCAkKCQgHBQkJBwkKBQMDAAACBAMDAgIWFgICBAUICQgKAwUKCQoCAhcYBQUZGQQBBAAEBBoaBwUKBwoACREICgUFAwMFCwoFBQkEBwcHBwcbGxsbBwgAAAAEBxwdHgISBRQHBx8CAAQEGSAHCgoKCgoKCgoKCgoKCgoKCgMHBwgLBQgFDQ0AAwIFBwgHBwcJCQoNESERGAkJCgkRIgoJAwAYCQMjGAQkCSUICAcIAwsJJicoGwUbCCkqCwsCBQIDAyssAxoJBRgYCgkFAi0RCgEEBC4dLQceBwgIBQcJAgoJBAoJBBgJDy8KCQoJGAcKGAoYAAQBBAQHBAQEBAQEBAcHBQQFCCcnBQUFBAcEEgQHBwcFBAcHBwcFBQcEBQggAwwCCgQREREDGAIRERgEBAoHBQkFCAgEBQUFCAERAREBEQUCCQUJBQkRBQMEAhgEAgQjBwgJBAkJCQkJCAgHCQkFCQUJEQgJBQkPLwICCQQFBQUEBwIFCQUJBQkRBQIYCAgJCAgFCREICQUJCQQFAwUFAgkFBQkFCSMFAwQCGAcJCAQICAkJCAgFCREPLwgJBAUJCQkEBQMFAQkRBAMFBQkFCRgFAwQCGAQJCAgICAUJCREPLwgJBQkJBQkIBAQJCQkJBwcKAQQECQUFBAcEMAUICQQIBAUBBQEFAQUEBQQBCQkJCQQJBAkECQkECQIGAAQEAAcHBwIEBQUEAQUFBQcEBAUHBQcHCAgFCQMEAygbGw0HMTIFBwUEBQcHBwQHBAEEBAAEBwQEBAQGAQIFDA0LBQsLDQgMDQsGAAUFBQwNCwsMDQgCAgILAAAEBQAAAwMEBQIPAwAFBQUFBQIFBwICBQUDAgUFAwUFBQIFAwICAgIFBQUFBwMFAAMLBQUICAUFBQUFBQUFBQUFBQUFBQUFBQUFAgUCAwUFBQUFBQUFBQICAgACAgIDAggFAwwCAgUAAAsCAAcHCAIFBQUCBQUFBwIAAgIFCwIAAAIIAAAAAAIAAgACBQAHBAUEBgQFBQUFBAcFCAkKEQIDCw0MIQEEBwUICQoGAAIDCw0MBh8GfwEjAQt/ASMCC38BIwMLfwFBAAt/AUEAC38BQQALB94EJRhfX0dMT0JBTF9fc3ViX0lfYmluZF9jcHAAgwYfX19HTE9CQUxfX3N1Yl9JX3pzdGRfYmluZGluZ19jYwCKARBfX19jeGFfY2FuX2NhdGNoAO8HD19fX2N4YV9kZW1hbmdsZQDZBhZfX19jeGFfaXNfcG9pbnRlcl90eXBlAPAHEV9fX2Vycm5vX2xvY2F0aW9uAJAGDl9fX2dldFR5cGVOYW1lAIUGBV9mcmVlAIcGD19sbHZtX2Jzd2FwX2kzMgDyBw5fbGx2bV9jdGx6X2k2NADzBwdfbWFsbG9jAIYGB19tZW1jcHkA9AcIX21lbW1vdmUA9QcHX21lbXNldAD2BwVfc2JyawD3BwlkeW5DYWxsX2kAbgpkeW5DYWxsX2lpAPgHC2R5bkNhbGxfaWlpAPkHDGR5bkNhbGxfaWlpaQD6Bw1keW5DYWxsX2lpaWlpAPsHDmR5bkNhbGxfaWlpaWlpAPwHD2R5bkNhbGxfaWlpaWlpaQD9BwlkeW5DYWxsX3YAdApkeW5DYWxsX3ZpAP4HC2R5bkNhbGxfdmlpAP8HDGR5bkNhbGxfdmlpaQCACA1keW5DYWxsX3ZpaWlpAIEIDmR5bkNhbGxfdmlpaWlpAIIID2R5bkNhbGxfdmlpaWlpaQCDCBNlc3RhYmxpc2hTdGFja1NwYWNlADELZ2V0VGVtcFJldDAANAtydW5Qb3N0U2V0cwDxBwtzZXRUZW1wUmV0MAAzCHNldFRocmV3ADIKc3RhY2tBbGxvYwAuDHN0YWNrUmVzdG9yZQAwCXN0YWNrU2F2ZQAvCbcFAQAjAAucA4QIf4UBiQFthAiECIQIhQhMUVJVVllaXV5hYmWRAZUBmAGbAZ4BoQGkAacBrQGxAbMBtwG+AcIBxAHIAYwGvQZ3ezx9boMBbogBbkJrbjjGA9wFhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhghQVFhcYGSUAZoBoAGmAa8BsAG1AbYBwAHBAcYBxwHoBHY6fIsBjAE9PkBBcUNFRnGGCIYIhgiGCIYIhgiGCIYIhgiGCIYIhgiGCIYIhgiGCIYIhgiGCIYIhgiG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ACAEJAUgAA8LIARBEWohASAEQRBqIQIgAygCACAFKAIANgIMIAMoAgAgAygCACgCDEEEajYCEAJAIAAoAgBBBE8EQCADKAIAIAUoAgAgACgCAGpBfGo2AgggAygCACgCCBDhASECIAMoAgAgAjYCACABIAUoAgAgACgCAEEBa2osAAA6AAAgAS0AAAR/QQggAS0AABDUAWsFQQALIQIgAygCACACNgIEIAEtAABFBEAgBkF/NgIAIAYoAgAhACAEJAUgAA8LBSADKAIAIAMoAgAoAgw2AgggAygCACADKAIAKAIMLQAANgIAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEECaw4GBQQDAgEABgsgAygCACIBIAEoAgAgBSgCAC0ABkEQdGo2AgAMBgsMBQsMBQsMBQsMBQsMBQsMBQsgAygCACIBIAEoAgAgBSgCAC0ABUEIdGo2AgALIAMoAgAiASABKAIAIAUoAgAtAARqNgIACyADKAIAIgEgASgCACAFKAIALQADQRh0ajYCAAsgAygCACIBIAEoAgAgBSgCAC0AAkEQdGo2AgALIAMoAgAiASABKAIAIAUoAgAtAAFBCHRqNgIACyACIAUoAgAgACgCAEEBa2osAAA6AAAgAi0AAAR/QQggAi0AABDUAWsFQQALIQEgAygCACABNgIEIAItAAAEQCADKAIAQQRqIgEgASgCAEEEIAAoAgBrQQN0ajYCAAwCCyAGQWw2AgAgBigCACEAIAQkBSAADwsLIAYgACgCADYCACAGKAIAIQAgBCQFIAALhQEBAn8jBSEDIwVBIGokBSADQRBqIgQgADYCACADQQxqIgAgATYCACADQQhqIgEgAjYCACADQQRqIgIgASgCADYCACADIAIoAgA2AgAgACgCACADKAIALwEAENwBIQIgBCgCACACNgIAIAAoAgAQ2QEaIAQoAgAgASgCAEEEajYCBCADJAULvQMBBn8jBSEDIwVBEGokBSADQQxqIQIgA0EIaiIBIAA2AgAgASgCACgCBEEgSwRAIAJBAzYCACACKAIAIQAgAyQFIAAPCyABKAIAIQUgASgCACgCCCABKAIAKAIQTwRAIAEoAgBBCGoiACAAKAIAIAUoAgRBA3ZrNgIAIAEoAgBBBGoiACAAKAIAQQdxNgIAIAEoAgAoAggQ4QEhACAB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AzAgAkIANwM4IAJBQGtCADcDACACQgA3A0ggAiAAKQMAQoeVr6+Ytt6bnn98Qs/W077Sx6vZQnw3AwggAiAAKQMAQs/W077Sx6vZQnw3AxAgAiAAKQMAQgB8NwMYIAIgACkDAEKHla+vmLbem55/fTcDICADKAIAIgAgAikDADcDACAAIAIpAwg3AwggACACKQMQNwMQIAAgAikDGDcDGCAAIAIpAyA3AyAgACACKQMoNwMoIAAgAikDMDcDMCAAIAIpAzg3AzggAEFAayACQUBrKQMANwMAIAAgAikDSDcDSCAAIAIpA1A3A1AgAiQFQQALSQECfyMFIQMjBUEQaiQFIANBCGoiBCAANgIAIANBBGoiACABNgIAIAMgAjYCACAEKAIAIgEgACgCACADKAIAEPQHGiADJAUgAQvcJQJ8fwJ+IwUhAyMFQeAEaiQFIANBuAFqIRogA0HQBGohLCADQcwEaiEtIANByARqIS4gA0HEBGohLyADQcAEaiEwIANBsAFqIRsgA0G8BGohMSADQbgEaiEyIANBtARqITMgA0GwBGohNCADQawEaiE1IANBqAFqIRwgA0GoBGohNiADQaQEaiE3IANBoARqITggA0GcBGohOSADQZgEaiE6IANBoAFqIR0gA0GUBGohOyADQZAEaiE8IANBjARqIT0gA0GIBGohPiADQYQEaiE/IANBmAFqIR4gA0GABGohQCADQfwDaiFBIANB+ANqIUIgA0H0A2ohQyADQfADaiFEIANBkAFqIR8gA0HsA2ohRSADQegDaiFGIANB5ANqIUcgA0HgA2ohSCADQdwDaiFJIANBiAFqISAgA0HYA2ohSiADQdQDaiFLIANB0ANqIUwgA0HMA2ohTSADQcgDaiFOIANBgAFqISEgA0HEA2ohTyADQcADaiFQIANBvANqIVEgA0G4A2ohUiADQbQDaiFTIANBsANqISIgA0GsA2ohBCADQagDaiEOIANBpANqIQogA0GgA2ohCCADQZwDaiEGIANBmANqIQsgA0GUA2ohVCADQfgAaiEPIANB8ABqIRAgA0HoAGohESADQeAAaiESIANB2ABqISMgA0GQA2ohVSADQYwDaiFWIANBiANqIVcgA0GEA2ohWCADQYADaiFZIANB0ABqISQgA0H8AmohWiADQfgCaiFbIANB9AJqIVwgA0HwAmohXSADQewCaiFeIANByABqISUgA0HoAmohXyADQeQCaiFgIANB4AJqIWEgA0HcAmohYiADQdgCaiFjIANBQGshJiADQdQCaiFkIANB0AJqIWUgA0HMAmohZiADQcgCaiFnIANBxAJqIWggA0E4aiEnIANBwAJqIWkgA0G8AmohaiADQbgCaiFrIANBtAJqIWwgA0GwAmohbSADQTBqISggA0GsAmohbiADQagCaiFvIANBpAJqIXAgA0GgAmohcSADQZwCaiFyIANBKGohKSADQZgCaiFzIANBlAJqIXQgA0GQAmohdSADQYwCaiF2IANBiAJqIXcgA0EgaiEqIANBhAJqIXggA0GAAmoheSADQfwBaiF6IANB+AFqIXsgA0H0AWohfCADQfABaiErIANB7AFqIQUgA0HoAWohEyADQeQBaiEMIANB4AFqIQkgA0HcAWohByADQdgBaiENIANB1AFqIX0gA0EYaiEUIANBEGohFSADQQhqIRYgAyEXIANB0AFqIRggA0HMAWoiGSAANgIAIANByAFqIn4gATYCACADQcQBaiIBIAI2AgAgA0HAAWoiAEGA5QAsAAA2AgAgGSgCACEZIH4oAgAhAiABKAIAIQEgACgCAEEBRgR/IAUgGTYCACATIAI2AgAgDCABNgIAIAlBATYCACAHIBMoAgA2AgAgDSAHKAIAIAwoAgBqNgIAIAUoAgAiACAAKQMAIAwoAgCtfDcDACAFKAIAIQAgBSgCACgCSCAMKAIAakEgSQRAIABBKGogBSgCACgCSGogEygCACAMKAIAEOoBGiAFKAIAQcgAaiIAIAAoAgAgDCgCAGo2AgAgK0EANgIABSAAKAJIBEAgBSgCAEEoaiAFKAIAKAJIaiATKAIAQSAgBSgCACgCSGsQ6gEaIAUoAgApAwghgAEgCSgCACEAIHsgBSgCAEEoajYCACB8IAA2AgAgfCgCACEAIHggeygCADYCACB5IAA2AgAgekEBNgIAIHkoAgBBAUYhASB4KAIAIQAgeigCAEEBRgRAIAAQ5gEhfyABRQRAIH8Q5AEhfwsgKiB/NwMABSAAKQMAIX8gAUUEQCB/EOQBIX8LICogfzcDAAsggAEgKikDABDnASF/IAUoAgAgfzcDCCAFKAIAKQMQIYABIAkoAgAhACB2IAUoAgBBMGo2AgAgdyAANgIAIHcoAgAhACBzIHYoAgA2AgAgdCAANgIAIHVBATYCACB0KAIAQQFGIQEgcygCACEAIHUoAgBBAUYEQCAAEOYBIX8gAUUEQCB/EOQBIX8LICkgfzcDAAUgACkDACF/IAFFBEAgfxDkASF/CyApIH83AwALIIABICkpAwAQ5wEhfyAFKAIAIH83AxAgBSgCACkDGCGAASAJKAIAIQAgcSAFKAIAQThqNgIAIHIgADYCACByKAIAIQAgbiBxKAIANgIAIG8gADYCACBwQQE2AgAgbygCAEEBRiEBIG4oAgAhACBwKAIAQQFGBEAgABDmASF/IAFFBEAgfxDkASF/CyAoIH83AwAFIAApAwAhfyABRQRAIH8Q5AEhfwsgKCB/NwMACyCAASAoKQMAEOcBIX8gBSgCACB/NwMYIAUoAgApAyAhgAEgCSgCACEAIGwgBSgCAEFAazYCACBtIAA2AgAgbSgCACEAIGkgbCgCADYCACBqIAA2AgAga0EBNgIAIGooAgBBAUYhASBpKAIAIQAgaygCAEEBRgRAIAAQ5gEhfyABRQRAIH8Q5AEhfwsgJyB/NwMABSAAKQMAIX8gAUUEQCB/EOQBIX8LICcgfzcDAAsggAEgJykDABDnASF/IAUoAgAgfzcDICAHIAcoAgBBICAFKAIAKAJIa2o2AgAgBSgCAEEANgJICyAHKAIAQSBqIA0oAgBNBEAgfSANKAIAQWBqNgIAIBQgBSgCACkDCDcDACAVIAUoAgApAxA3AwAgFiAFKAIAKQMYNwMAIBcgBSgCACkDIDcDAANAIBQpAwAhgAEgCSgCACEAIGcgBygCADYCACBoIAA2AgAgaCgCACEAIGQgZygCADYCACBlIAA2AgAgZkEBNgIAIGUoAgBBAUYhASBkKAIAIQAgZigCAEEBRgRAIAAQ5gEhfyABRQRAIH8Q5AEhfwsgJiB/NwMABSAAKQMAIX8gAUUEQCB/EOQBIX8LICYgfzcDAAsgFCCAASAmKQMAEOcBNwMAIAcgBygCAEEIajYCACAVKQMAIYABIAkoAgAhACBiIAcoAgA2AgAgYyAANgIAIGMoAgAhACBfIGIoAgA2AgAgYCAANgIAIGFBATYCACBgKAIAQQFGIQEgXygCACEAIGEoAgBBAUYEQCAAEOYBIX8gAUUEQCB/EOQBIX8LICUgfzcDAAUgACkDACF/IAFFBEAgfxDkASF/CyAlIH83AwALIBUggAEgJSkDABDnATcDACAHIAcoAgBBCGo2AgAgFikDACGAASAJKAIAIQAgXSAHKAIANgIAIF4gADYCACBeKAIAIQAgWiBdKAIANgIAIFsgADYCACBcQQE2AgAgWygCAEEBRiEBIFooAgAhACBcKAIAQQFGBEAgABDmASF/IAFFBEAgfxDkASF/CyAkIH83AwAFIAApAwAhfyABRQRAIH8Q5AEhfwsgJCB/NwMACyAWIIABICQpAwAQ5wE3AwAgByAHKAIAQQhqNgIAIBcpAwAhgAEgCSgCACEAIFggBygCADYCACBZIAA2AgAgWSgCACEAIFUgWCgCADYCACBWIAA2AgAgV0EBNgIAIFYoAgBBAUYhASBVKAIAIQAgVygCAEEBRgRAIAAQ5gEhfyABRQRAIH8Q5AEhfwsgIyB/NwMABSAAKQMAIX8gAUUEQCB/EOQBIX8LICMgfzcDAAsgFyCAASAjKQMAEOcBNwMAIAcgBygCAEEIajYCACAHKAIAIH0oAgBNDQALIAUoAgAgFCkDADcDCCAFKAIAIBUpAwA3AxAgBSgCACAWKQMANwMYIAUoAgAgFykDADcDIAsgBygCACANKAIASQRAIAUoAgBBKGogBygCACANKAIAIAcoAgBrEOoBGiAFKAIAIA0oAgAgBygCAGs2AkgLICtBADYCAAsgGCArKAIANgIAIBgoAgAhACADJAUgAAUgBCAZNgIAIA4gAjYCACAKIAE2AgAgCEEANgIAIAYgDigCADYCACALIAYoAgAgCigCAGo2AgAgBCgCACIAIAApAwAgCigCAK18NwMAIAQoAgAhACAEKAIAKAJIIAooAgBqQSBJBEAgAEEoaiAEKAIAKAJIaiAOKAIAIAooAgAQ6gEaIAQoAgBByABqIgAgACgCACAKKAIAajYCACAiQQA2AgAFIAAoAkgEQCAEKAIAQShqIAQoAgAoAkhqIA4oAgBBICAEKAIAKAJIaxDqARogBCgCACkDCCGAASAIKAIAIQAgUiAEKAIAQShqNgIAIFMgADYCACBTKAIAIQAgTyBSKAIANgIAIFAgADYCACBRQQE2AgAgUCgCAEEBRiEBIE8oAgAhACBRKAIAQQFGBEAgABDmASF/IAFFBEAgfxDkASF/CyAhIH83AwAFIAApAwAhfyABRQRAIH8Q5AEhfwsgISB/NwMACyCAASAhKQMAEOcBIX8gBCgCACB/NwMIIAQoAgApAxAhgAEgCCgCACEAIE0gBCgCAEEwajYCACBOIAA2AgAgTigCACEAIEogTSgCADYCACBLIAA2AgAgTEEBNgIAIEsoAgBBAUYhASBKKAIAIQAgTCgCAEEBRgRAIAAQ5gEhfyABRQRAIH8Q5AEhfwsgICB/NwMABSAAKQMAIX8gAUUEQCB/EOQBIX8LICAgfzcDAAsggAEgICkDABDnASF/IAQoAgAgfzcDECAEKAIAKQMYIYABIAgoAgAhACBIIAQoAgBBOGo2AgAgSSAANgIAIEkoAgAhACBFIEgoAgA2AgAgRiAANgIAIEdBATYCACBGKAIAQQFGIQEgRSgCACEAIEcoAgBBAUYEQCAAEOYBIX8gAUUEQCB/EOQBIX8LIB8gfzcDAAUgACkDACF/IAFFBEAgfxDkASF/CyAfIH83AwALIIABIB8pAwAQ5wEhfyAEKAIAIH83AxggBCgCACkDICGAASAIKAIAIQAgQyAEKAIAQUBrNgIAIEQgADYCACBEKAIAIQAgQCBDKAIANgIAIEEgADYCACBCQQE2AgAgQSgCAEEBRiEBIEAoAgAhACBCKAIAQQFGBEAgABDmASF/IAFFBEAgfxDkASF/CyAeIH83AwAFIAApAwAhfyABRQRAIH8Q5AEhfwsgHiB/NwMACyCAASAeKQMAEOcBIX8gBCgCACB/NwMgIAYgBigCAEEgIAQoAgAoAkhrajYCACAEKAIAQQA2AkgLIAYoAgBBIGogCygCAE0EQCBUIAsoAgBBYGo2AgAgDyAEKAIAKQMINwMAIBAgBCgCACkDEDcDACARIAQoAgApAxg3AwAgEiAEKAIAKQMgNwMAA0AgDykDACGAASAIKAIAIQAgPiAGKAIANgIAID8gADYCACA/KAIAIQAgOyA+KAIANgIAIDwgADYCACA9QQE2AgAgPCgCAEEBRiEBIDsoAgAhACA9KAIAQQFGBEAgABDmASF/IAFFBEAgfxDkASF/CyAdIH83AwAFIAApAwAhfyABRQRAIH8Q5AEhfwsgHSB/NwMACyAPIIABIB0pAwAQ5wE3AwAgBiAGKAIAQQhqNgIAIBApAwAhgAEgCCgCACEAIDkgBigCADYCACA6IAA2AgAgOigCACEAIDYgOSgCADYCACA3IAA2AgAgOEEBNgIAIDcoAgBBAUYhASA2KAIAIQAgOCgCAEEBRgRAIAAQ5gEhfyABRQRAIH8Q5AEhfwsgHCB/NwMABSAAKQMAIX8gAUUEQCB/EOQBIX8LIBwgfzcDAAsgECCAASAcKQMAEOcBNwMAIAYgBigCAEEIajYCACARKQMAIYABIAgoAgAhACA0IAYoAgA2AgAgNSAANgIAIDUoAgAhACAxIDQoAgA2AgAgMiAANgIAIDNBATYCACAyKAIAQQFGIQEgMSgCACEAIDMoAgBBAUYEQCAAEOYBIX8gAUUEQCB/EOQBIX8LIBsgfzcDAAUgACkDACF/IAFFBEAgfxDkASF/CyAbIH83AwALIBEggAEgGykDABDnATcDACAGIAYoAgBBCGo2AgAgEikDACGAASAIKAIAIQAgLyAGKAIANgIAIDAgADYCACAwKAIAIQAgLCAvKAIANgIAIC0gADYCACAuQQE2AgAgLSgCAEEBRiEBICwoAgAhACAuKAIAQQFGBEAgABDmASF/IAFFBEAgfxDkASF/CyAaIH83AwAFIAApAwAhfyABRQRAIH8Q5AEhfwsgGiB/NwMACyASIIABIBopAwAQ5wE3AwAgBiAGKAIAQQhqNgIAIAYoAgAgVCgCAE0NAAsgBCgCACAPKQMANwMIIAQoAgAgECkDADcDECAEKAIAIBEpAwA3AxggBCgCACASKQMANwMgCyAGKAIAIAsoAgBJBEAgBCgCAEEoaiAGKAIAIAsoAgAgBigCAGsQ6gEaIAQoAgAgCygCACAGKAIAazYCSAsgIkEANgIACyAYICIoAgA2AgAgGCgCACEAIAMkBSAACwuaEwIvfwF+IwUhASMFQYACaiQFIAFB9AFqIRQgAUHwAWohGiABQewBaiEbIAFB6AFqIRwgAUHkAWohHSABQeABaiEeIAFB8ABqIRUgAUHcAWohHyABQdgBaiEgIAFB1AFqISEgAUHQAWohIiABQcwBaiEjIAFByAFqIQcgAUHEAWohFiABQcABaiEFIAFBvAFqIQkgAUHoAGohAiABQeAAaiEKIAFB2ABqIQsgAUHQAGohDCABQcgAaiENIAFBQGshJCABQbgBaiEXIAFBtAFqISUgAUGwAWohJiABQawBaiEnIAFBqAFqISggAUGkAWohKSABQThqIRggAUGgAWohKiABQZwBaiErIAFBmAFqISwgAUGUAWohLSABQZABaiEuIAFBjAFqIQggAUGIAWohGSABQYQBaiEGIAFBgAFqIQ4gAUEwaiEDIAFBKGohDyABQSBqIRAgAUEYaiERIAFBEGohEiABQQhqIS8gASETIAFB/ABqIgQgADYCACABQfgAaiIAQYDlACwAADYCACAEKAIAIQQgACgCAEEBRgR+IAggBDYCACAZQQE2AgAgBiAIKAIAQShqNgIAIA4gCCgCAEEoaiAIKAIAKAJIajYCACAIKAIAIQAgCCgCACkDAEIgWgRAIA8gACkDCDcDACAQIAgoAgApAxA3AwAgESAIKAIAKQMYNwMAIBIgCCgCACkDIDcDACADIA8pAwBCAYYgDykDAEI/iIQgECkDAEIHhiAQKQMAQjmIhHwgESkDAEIMhiARKQMAQjSIhHwgEikDAEIShiASKQMAQi6IhHw3AwAgAyADKQMAIA8pAwAQ6AE3AwAgAyADKQMAIBApAwAQ6AE3AwAgAyADKQMAIBEpAwAQ6AE3AwAgAyADKQMAIBIpAwAQ6AE3AwAFIAMgACkDGELFz9my8eW66id8NwMACyADIAMpAwAgCCgCACkDAHw3AwADQAJAIAYoAgAhBCAGKAIAQQhqIA4oAgBLDQAgGSgCACEAIC0gBDYCACAuIAA2AgAgLigCACEAICogLSgCADYCACArIAA2AgAgLEEBNgIAICsoAgBBAUYhBCAqKAIAIQAgLCgCAEEBRgRAIAAQ5gEhMCAERQRAIDAQ5AEhMAsgGCAwNwMABSAAKQMAITAgBEUEQCAwEOQBITALIBggMDcDAAsgL0IAIBgpAwAQ5wE3AwAgAyADKQMAIC8pAwCFNwMAIAMgAykDAEIbhiADKQMAQiWIhEKHla+vmLbem55/fkLj3MqV/M7y9YV/fDcDACAGIAYoAgBBCGo2AgAMAQsLIARBBGogDigCAE0EQCAZKAIAIQAgKCAGKAIANgIAICkgADYCACApKAIAIQAgJSAoKAIANgIAICYgADYCACAnQQE2AgAgJigCAEEBRiEEICUoAgAhACAnKAIAQQFGBEAgABDlASEAIARFBEAgABDRASEACyAXIAA2AgAFIAAoAgAhACAERQRAIAAQ0QEhAAsgFyAANgIACyADIAMpAwAgFygCAK1Ch5Wvr5i23puef36FNwMAIAMgAykDAEIXhiADKQMAQimIhELP1tO+0ser2UJ+Qvnz3fGZ9pmrFnw3AwAgBiAGKAIAQQRqNgIACwNAIAYoAgAgDigCAEkEQCADIAMpAwAgBigCAC0AAK1Cxc/ZsvHluuonfoU3AwAgAyADKQMAQguGIAMpAwBCNYiEQoeVr6+Ytt6bnn9+NwMAIAYgBigCAEEBajYCAAwBCwsgAyADKQMAIAMpAwBCIYiFNwMAIAMgAykDAELP1tO+0ser2UJ+NwMAIAMgAykDACADKQMAQh2IhTcDACADIAMpAwBC+fPd8Zn2masWfjcDACADIAMpAwAgAykDAEIgiIU3AwAgEyADKQMANwMAIBMpAwAhMCABJAUgMAUgByAENgIAIBZBADYCACAFIAcoAgBBKGo2AgAgCSAHKAIAQShqIAcoAgAoAkhqNgIAIAcoAgAhACAHKAIAKQMAQiBaBEAgCiAAKQMINwMAIAsgBygCACkDEDcDACAMIAcoAgApAxg3AwAgDSAHKAIAKQMgNwMAIAIgCikDAEIBhiAKKQMAQj+IhCALKQMAQgeGIAspAwBCOYiEfCAMKQMAQgyGIAwpAwBCNIiEfCANKQMAQhKGIA0pAwBCLoiEfDcDACACIAIpAwAgCikDABDoATcDACACIAIpAwAgCykDABDoATcDACACIAIpAwAgDCkDABDoATcDACACIAIpAwAgDSkDABDoATcDAAUgAiAAKQMYQsXP2bLx5brqJ3w3AwALIAIgAikDACAHKAIAKQMAfDcDAANAAkAgBSgCACEEIAUoAgBBCGogCSgCAEsNACAWKAIAIQAgIiAENgIAICMgADYCACAjKAIAIQAgHyAiKAIANgIAICAgADYCACAhQQE2AgAgICgCAEEBRiEEIB8oAgAhACAhKAIAQQFGBEAgABDmASEwIARFBEAgMBDkASEwCyAVIDA3AwAFIAApAwAhMCAERQRAIDAQ5AEhMAsgFSAwNwMACyAkQgAgFSkDABDnATcDACACIAIpAwAgJCkDAIU3AwAgAiACKQMAQhuGIAIpAwBCJYiEQoeVr6+Ytt6bnn9+QuPcypX8zvL1hX98NwMAIAUgBSgCAEEIajYCAAwBCwsgBEEEaiAJKAIATQRAIBYoAgAhACAdIAUoAgA2AgAgHiAANgIAIB4oAgAhACAaIB0oAgA2AgAgGyAANgIAIBxBATYCACAbKAIAQQFGIQQgGigCACEAIBwoAgBBAUYEQCAAEOUBIQAgBEUEQCAAENEBIQALIBQgADYCAAUgACgCACEAIARFBEAgABDRASEACyAUIAA2AgALIAIgAikDACAUKAIArUKHla+vmLbem55/foU3AwAgAiACKQMAQheGIAIpAwBCKYiEQs/W077Sx6vZQn5C+fPd8Zn2masWfDcDACAFIAUoAgBBBGo2AgALA0AgBSgCACAJKAIASQRAIAIgAikDACAFKAIALQAArULFz9my8eW66id+hTcDACACIAIpAwBCC4YgAikDAEI1iIRCh5Wvr5i23puef343AwAgBSAFKAIAQQFqNgIADAELCyACIAIpAwAgAikDAEIhiIU3AwAgAiACKQMAQs/W077Sx6vZQn43AwAgAiACKQMAIAIpAwBCHYiFNwMAIAIgAikDAEL5893xmfaZqxZ+NwMAIAIgAikDACACKQMAQiCIhTcDACATIAIpAwA3AwAgEykDACEwIAEkBSAwCwttAQN/IwUhAiMFQRBqJAUgAkEEaiEDIAIiBCAANgIAIAEoAgAEfyADIAEoAgggBCgCACABKAIAQT9xQcgAahEHADYCACADKAIAIQAgAiQFIAAFIAMgBCgCABCGBjYCACADKAIAIQAgAiQFIAALC5ABAQR/IwUhAiMFQRBqJAUgAkEIaiEDIAIhBCACQQRqIgUgADYCACABKAIABH8gBCABKAIIIAUoAgAgASgCAEE/cUHIAGoRBwA2AgAgBCgCAEEAIAUoAgAQ9gcaIAMgBCgCADYCACADKAIAIQAgAiQFIAAFIANBASAFKAIAEIgGNgIAIAMoAgAhACACJAUgAAsLWAECfyMFIQIjBUEQaiQFIAIiAyAANgIAIAIoAgBFBEAgAiQFDwsgASgCBARAIAEoAgggAygCACABKAIEQR9xQeQCahECACACJAUFIAMoAgAQhwYgAiQFCwvLCgEOfyMFIQYjBUHwCGokBSAGQeQIaiEKIAZBtAhqIQ0gBkGwCGohCyAGQawIaiERIAZBqAhqIQggBkHgCGoiDiAANgIAIAZB3AhqIgcgATYCACAGQdgIaiIPIAI2AgAgBkHUCGoiCSADNgIAIAZB0AhqIgEgBDYCACAGQcwIaiIDIAU2AgAgBkHICGoiAkEBIAko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AgAoAhBLBEAgASgCACABKAIAKAIQNgIMCyABKAIAQQRqIgMgAygCAEEHcTYCACABKAIAIgEgASgCACAAKAIAQQN0djYCACACJAULRgECfyMFIQIjBUEQaiQFIAJBBGoiAyAANgIAIAIgATYCACADKAIAIAIoAgAoAgAgAigCACgCDBCIAiADKAIAEIQCIAIkBQuLAQEDfyMFIQIjBUEQaiQFIAJBBGohAyACIgEgADYCACABKAIAQQFBARCHAiABKAIAEIQCIAEoAgAoAgwgASgCACgCEE8EfyADQQA2AgAgAygCACEAIAIkBSAABSADIAEoAgAoAgwgASgCACgCCGsgASgCACgCBEEAS2o2AgAgAygCACEAIAIkBSAACwtoAQJ/IwUhAyMFQRBqJAUgA0EIaiIEIAA2AgAgA0EEaiIAIAE2AgAgAyACNgIAIAQoAgAiASABKAIAIAAoAgAgBCgCACgCBHRyNgIAIAQoAgBBBGoiACAAKAIAIAMoAgBqNgIAIAMkBQt4AQJ/IwUhAyMFQRBqJAUgA0EIaiIEIAA2AgAgA0EEaiIAIAE2AgAgAyACNgIAIAQoAgAiASABKAIAIAAoAgAgAygCAEECdEHgHWooAgBxIAQoAgAoAgR0cjYCACAEKAIAQQRqIgAgACgCACADKAIAajYCACADJAULNwECfyMFIQIjBUEQaiQFIAJBBGoiAyAANgIAIAIgATYCACADKAIAIgMgAigCACIBEIoCIAIkBQtUAQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAMoAgAhAyACKAIAIQFBkOUALQAABEAgAyABEI0CIAIkBQUgAyABENEBEI0CIAIkBQsLVAECfyMFIQIjBUEQaiQFIAJBCGoiAyAANgIAIAIgATcDACADKAIAIQMgAikDACEBQZDlAC0AAARAIAMgARCMAiACJAUFIAMgARDkARCMAiACJAULCzMBAn8jBSECIwVBEGokBSACQQhqIgMgADYCACACIAE3AwAgAygCACACKQMANwAAIAIkBQszAQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAMoAgAgAigCADYAACACJAULuAEBBH8jBSECIwVBIGokBSACQRBqIgMgADYCACACQQxqIgQgATYCACACQQhqIgEgBCgCADYCACACQQRqIgUgASgCADYCACACIgAgASgCABCPAkH//wNxNgIAIAMoAgBBASACKAIAdDYCACADKAIAIAUoAgBBBGo2AgQgAygCACAEKAIAIgRBBGogAigCAAR/QQEgACgCAEEBa3QFQQELIgFBAnRqNgIIIAMoAgAgACgCADYCDCACJAULJgEBfyMFIQEjBUEQaiQFIAEgADYCACABKAIALgAAIQAgASQFIAALSgECfyMFIQMjBUEQaiQFIANBCGoiBCAANgIAIANBBGoiACABNgIAIAMgAjYCACAEKAIAIAAoAgAgAygCAEEBEPgBIQAgAyQFIAAL+gUBCX8jBSEEIwVB0ANqJAUgBEHEA2ohBSAEQcADaiIHIAA2AgAgBEG8A2oiACABNgIAIARBuANqIgogAjYCACAEQbQDaiICIAM2AgAgBEGwA2oiCSAHKAIANgIAIARBrANqIgEgCSgCADYCACAEQagDaiILIAkoAgAgACgCAGo2AgAgBEGkA2oiA0EMNgIAIARBoANqIgdBBjYCACACKAIAQQFNBEAgBUEANgIAIAUoAgAhACAEJAUgAA8LIARBnANqIgAgBEEgaiIIIAMgCigCACACKAIAEPQBNgIAIAAoAgAQzQFBAEchDCAAKAIAIQYgDARAIAUgBjYCACAFKAIAIQAgBCQFIAAPCyAGIAIoAgBGBEAgBUEBNgIAIAUoAgAhACAEJAUgAA8LIAAoAgBBAUYEQCAFQQA2AgAgBSgCACEAIAQkBSAADwsgByAHKAIAIAIoAgAgAygCABD6ATYCACAEQZgDaiIGIAQiACAHKAIAIAggAigCACADKAIAEPsBNgIAIAYoAgAQzQEEQCAFIAYoAgA2AgAgBSgCACEAIAQkBSAADwsgBEGUA2oiBiABKAIAIAsoAgAgASgCAGsgACADKAIAIAcoAgAQ8gE2AgAgBigCABDNAUEARyEIIAYoAgAhBiAIBEAgBSAGNgIAIAUoAgAhACAEJAUgAA8LIAEgASgCACAGajYCACAEQZADaiIGIARBoAFqIgggACADKAIAIAcoAgAgBEHgAGpBwAAQ8AE2AgAgBigCABDNAQRAIAUgBigCADYCACAFKAIAIQAgBCQFIAAPCyAEQYwDaiIAIAEoAgAgCygCACABKAIAayAKKAIAIAIoAgAgCBD+ATYCACAAKAIAEM0BQQBHIQMgACgCACECIAMEQCAFIAI2AgAgBSgCACEAIAQkBSAADwsgAgR/IAEgASgCACAAKAIAajYCACAFIAEoAgAgCSgCAGs2AgAgBSgCACEAIAQkBSAABSAFQQA2AgAgBSgCACEAIAQkBSAACwulBQEGfyMFIQUjBUHAAmokBSAFQaACaiEGIAVBnAJqIgcgADYCACAFQZgCaiIJIAE2AgAgBUGUAmoiCiACNgIAIAVBkAJqIgIgAzYCACAFQYwCaiIIIAQ2AgAgBUGIAmoiBCAHKAIANgIAIAIoAgBB/wFLBEAgBkFSNgIAIAYoAgAhACAFJAUgAA8LIAUhACAFQYACaiEDIAVBpAJqIgdBADoAACAFQYQCaiIBQQE2AgADQCABKAIAIAgoAgBBAWpJBEAgByABKAIAaiAIKAIAQQFqIAEoAgBrOgAAIAEgASgCAEEBajYCAAwBCwsgAUEANgIAA0AgASgCACACKAIASQRAIAAgASgCAGogByAKKAIAIAEoAgBBAnRqLQACaiwAADoAACABIAEoAgBBAWo2AgAMAQsLIAMgBCgCAEEBaiAJKAIAQQFrIAAgAigCABCRAjYCACADKAIAEM0BQQBHIQcgAygCACEIIAcEQCAGIAg2AgAgBigCACEAIAUkBSAADwsgCEEBSyADKAIAIAIoAgBBAm5JcQRAIAQoAgAgAygCADoAACAGIAMoAgBBAWo2AgAgBigCACEAIAUkBSAADwsgAigCAEGAAUsEQCAGQX82AgAgBigCACEAIAUkBSAADwsgAigCAEEBakECbkEBaiAJKAIASwRAIAZBun82AgAgBigCACEAIAUkBSAADwsgBCgCACACKAIAQf8AajoAACAAIAIoAgBqQQA6AAAgAUEANgIAA0AgASgCACACKAIASQRAIAQoAgAgASgCAEECbkEBamogACABKAIAai0AAEEEdCAAIAEoAgBBAWpqLQAAajoAACABIAEoAgBBAmo2AgAMAQsLIAYgAigCAEEBakECbkEBajYCACAGKAIAIQAgBSQFIAALmAcBEH8jBSEEIwVB0ANqJAUgBEG8A2ohBSAEQbgDaiIMIAA2AgAgBEG0A2oiDyABNgIAIARBsANqIgAgAjYCACAEQawDaiIGIAM2AgAgBEGoA2oiAUEANgIAIARBpANqIgJBADYCACAEQaADaiINIARB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akEAQfwHIAMoAgBBAnRrEPYHGiANQQhqIgggBygCACARKAIAIAEoAgBBgAhqIAMoAgAgACgCABCSAjYCACAIKAIAEM0BBEAgDiAIKAIANgIAIA4oAgAhACANJAUgAA8LIA1BBGohCyANIQACQCAEKAIABEAgBCgCACgCAARAIAsgBSgCACABKAIAIAMoAgAQnwI2AgAgACABKAIAQYAIaiABKAIAIAMoAgAQnwI2AgAgCygCACAIKAIAIAAoAgBqSwRAIAgoAgBBDGogAigCAEkNAwsgDiAGKAIAIAcoAgAgCigCACAPKAIAIAIoAgAgECgCACAFKAIAIAkoAgAQnQI2AgAgDigCACEAIA0kBSAADwsLCyAIKAIAQQxqIAIoAgBPBEAgDkEANgIAIA4oAgAhACANJAUgAA8LIAcgBygCACAIKAIAajYCACAEKAIABEAgBCgCAEEANgIACyAFKAIABEAgBSgCACABKAIAQYAIakGACBD0BxoLIA4gBigCACAHKAIAIAooAgAgDygCACACKAIAIBAoAgAgASgCAEGACGogCSgCABCdAjYCACAOKAIAIQAgDSQFIAAL+gIBBX8jBSEIIwVBMGokBSAIQSBqIgogADYCACAIQRxqIgkgATYCACAIQRhqIgEgAjYCACAIQRRqIgsgAzYCACAIQRBqIgIgBDYCACAIQQxqIgwgBTYCACAIQQhqIgUgBjYCACAIQQRqIgYgBzYCACAJKAIAIQAgASgCACAJKAIAayEBIAsoAgAhAyACKAIAIQQgBSgCACEFIAYoAgAhBiAMKAIABH8gACABIAMgBCAFIAYQlwIFIAAgASADIAQgBSAGEJkCCyEDIAhBJGohASAIIgAgAzYCACAIKAIAEM0BQQBHIQQgCCgCACEDIAQEQCABIAM2AgAgASgCACEAIAgkBSAADwsgA0UEQCABQQA2AgAgASgCACEAIAgkBSAADwsgCSAJKAIAIAAoAgBqNgIAIAkoAgAgCigCAGsgAigCAEEBa08EfyABQQA2AgAgASgCACEAIAgkBSAABSABIAkoAgAgCigCAGs2AgAgASgCACEAIAgkBSAACwutAQEDfyMFIQMjBUEgaiQFIANBEGoiBCAANgIAIANBDGoiBSABNgIAIANBCGoiASACNgIAIANBBGoiAkEANgIAIAMiAEEANgIAA0Ag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AiQFIAALnRIBBH8jBSEGIwVBIGokBSAGQRBqIQQgBiIFQQxqIgMgADYCACAFQQhqIgAgATYCACAFQQRqIgEgAjYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQprDsMIABYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAQIDBAUGBwgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWERITFBUWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgoLDBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWDg8QFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCRYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg0WCyABKAIAQQFLBEAgBEFYNgIADBcFIAMoAgAgASgCADYCACAEIAMoAgAoAgA2AgAMFwsACyAFIAEoAgA2AgAgBSgCAEEWSgRAIAVBFjYCAAsgBSgCAARAIAMoAgAgBSgCAEEASDYCMCADKAIAIAUoAgA2AiwLIAMoAgAoAixBAE4EQCAEIAMoAgAoAiw2AgAMFgUgBEEANgIADBYLAAsgASgCAEEASwRAIAEoAgBBCkkgASgCAEEeS3IEQCAEQVY2AgAMFgsLIAMoAgAgASgCADYCBCAEIAMoAgAoAgQ2AgAMFAsgASgCAEEASwRAIAEoAgBBBkkgASgCAEEeS3IEQCAEQVY2AgAMFQsLIAMoAgAgASgCADYCDCAEIAMoAgAoAgw2AgAMEwsgASgCAEEASwRAIAEoAgBBBkkgASgCAEEdS3IEQCAEQVY2AgAMFAsLIAMoAgAgASgCADYCCCAEIAMoAgAoAgg2AgAMEgsgASgCAEEASwRAIAEoAgBBAUkgASgCAEEdS3IEQCAEQVY2AgAMEwsLIAMoAgAgASgCADYCECAEIAEoAgA2AgAMEQsgASgCAEEASwRAIAEoAgBBA0kgASgCAEEHS3IEQCAEQVY2AgAMEgsLIAMoAgAgASgCADYCFCAEIAMoAgAoAhQ2AgAMEAsgAygCACABKAIANgIYIAQgAygCACgCGDYCAAwPCyABKAIAQQBLBEAgASgCAEEBSSABKAIAQQhLcgRAIARBVjYCAAwQCwsgAygCACABKAIANgIc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BiQFIAALC8kBAQN/IwUhAyMFQSBqJAUgA0EQaiEEIANBDGoiBSAANgIAIANBCGoiACABNgIAIANBBGoiASACNgIAIAAoAgAgASgCAEkEQCAEQWI2AgAgBCgCACEAIAMkBSAADwsgAyIAQQA2AgACQAJAA0AgACgCACABKAIASw0CIAUoAgAgACgCAEEBdGouAQBFDQEgACAAKAIAQQFqNgIADAALAAsgBEFiNgIAIAQoAgAhACADJAUgAA8LIARBADYCACAEKAIAIQAgAyQFIAALogMBBH8jBSEEIwVBIGokBSAEQQhqIQUgBEEcaiIDIAA2AgAgBEEYaiIGIAE2AgAgBEEUaiIBIAI2AgAgBEEQaiIAIAYoAgA2AgAgBEEMaiICQQE2AgAgBigCACADKAIAKAIARwRAIAUgAygCACgCACADKAIAKAIEazYCACADKAIAIAMoAgAoAgw2AhAgAygCACAFKAIANgIMIAMoAgAgAygCACgCBDYCCCADKAIAIAAoAgAgBSgCAGs2AgQgAygCACgCDCADKAIAKAIQa0EISQRAIAMoAgAgAygCACgCDDYCEAsgAkEANgIACyADKAIAIAAoAgAgASgCAGo2AgAgACgCACABKAIAaiADKAIAKAIIIAMoAgAoAhBqSyAAKAIAIAMoAgAoAgggAygCACgCDGpJcUUEQCACKAIAIQAgBCQFIAAPCyAEQQRqIgUgACgCACABKAIAaiADKAIAKAIIazYCACAEIAUoAgAgAygCACgCDEoEfyADKAIAKAIMBSAFKAIACyIANgIAIAMoAgAgBCgCADYCECACKAIAIQAgBCQFIAAL9wIBCX8jBSEDIwVBQGskBSADQQhqIQkgA0EEaiEEIAMhByADQTBqIgggADYCACADQSxqIgAgATYCACADQShqIgUgAjYCACADQSRqIgogCCgCACgCJDYCACADQSBqIgIgACgCACgCCDYCACADQRxqIgEgACgCACgCEDYCACADQRhqIgsgCCgCACgCBDYCACADQRRqIgYgCygCACAIKAIAKAIYajYCACADQRBqIgAgBSgCAEF4ajYCACADQQM2AgwDQCAGKAIAQQJqIAAoAgBNBEAgCSAGKAIAIAsoAgBrNgIAIARBADYCAANAIAYoAgAhBSAEKAIAQQNJBEAgByAFIAQoAgBqIAIoAgAgASgCABC7AjYCAAJAAkAgBCgCAEUNACAKKAIAIAcoAgBBAnRqKAIARQ0ADAELIAooAgAgBygCAEECdGogCSgCACAEKAIAajYCAAsgBCAEKAIAQQFqNgIADAELCyAGIAVBA2o2AgAMAQsLIAMkBQvjAwEMfyMFIQMjBUFAayQFIANBDGohCCADQQhqIQQgA0EEaiEKIAMhCSADQTxqIgYgADYCACADQThqIgAgATYCACADQTRqIgcgAjYCACADQTBqIgsgBigCACgCJDYCACADQSxqIg0gACgCACgCCDYCACADQShqIg4gACgCACgCEDYCACADQSRqIgIgBigCACgCLDYCACADQSBqIgEgACgCACgCBDYCACADQRxqIgwgBigCACgCBDYCACADQRhqIgUgDCgCACAGKAIAKAIYajYCACADQRRqIgAgBygCAEF4ajYCACADQQM2AhADQCAFKAIAQQJqIAAoAgBNBEAgCCAFKAIAIAwoAgBrNgIAIARBADYCAANAAkAgBSgCACEHIAQoAgBBA08NACAKIAcgBCgCAGogASgCACAOKAIAELsCNgIAIAkgBSgCACAEKAIAaiANKAIAQQgQuwI2AgAgBCgCAEUEQCACKAIAIAooAgBBAnRqIAgoAgAgBCgCAGo2AgALAkACQCAEKAIARQ0AIAsoAgAgCSgCAEECdGooAgBFDQAMAQsgCygCACAJKAIAQQJ0aiAIKAIAIAQoAgBqNgIACyAEIAQoAgBBAWo2AgAMAQsLIAUgB0EDajYCAAwBCwsgAyQFC1ABAn8jBSEDIwVBEGokBSADQQhqIgQgADYCACADQQRqIgAgATYCACADIAI2AgAgBCgCACAAKAIAIAMoAgAgACgCACgCEBDJAiEAIAMkBSAAC7cCAQZ/IwUhBCMFQUBrJAUgBEEMaiIFIAA2AgAgBEEIaiIAIAE2AgAgBEEEaiIBIAI2AgAgBCADNgIAIAAoAgAhAiABKAIAIQEgBCgCACEDIAAoAgAoAhAhBiAEQTBqIgAgBSgCADYCACAEQSxqIgUgAjYCACAEQShqIgcgATYCACAEQSRqIgggAzYCACAEQSBqIgkgBjYCACAEQRxqIgZBADYCACAEQRhqIgIgACgCACgCBDYCACAEQRRqIgMgBygCACACKAIAazYCACAEQRBqIgEgACgCACgCGDYCAANAIAEo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IAQ2AgAgDEEYaiIEIAU2AgAgDEEUaiIFIAY2AgAgDEEQaiIGIAc2AgAgDEEMaiIHIAg2AgAgDEEIaiIIIAk2AgAgDEEEaiIJIAo2AgAgDCALNgIAIAwoAgAEfyANIA4oAgAgACgCACABKAIAIAIoAgAgAygCACAEKAIAIAUoAgAgBigCACAHKAIAIAgoAgAgCSgCABDeAjYCACANKAIAIQAgDCQFIAAFIA0gDigCACAAKAIAIAEoAgAgAigCACADKAIAIAQoAgAgBSgCACAGKAIAIAcoAgAgCCgCACAJKAIAEN4CNgIAIA0oAgAhACAMJAUgAAsLlwsBCn8jBSELIwVB0AFqJAUgC0HAAWohDSALQShqIgwgADYCACALQSRqIgAgATYCACALQSBqIgEgAjYCACALQRxqIgIgAzYCACALQRhqIgMgBDYCACALQRRqIgQgBTYCACALQRBqIgUgBjYCACALQQxqIgYgBzYCACALQQhqIgcgCDYCACALQQRqIgggCTYCACALIAo2AgAgACgCACEAIAEoAgAhASACKAIAIQIgAygCACEDIAQoAgAhBCAFKAIAIQUgBigCACEGIAcoAgAhByAIKAIAIQ4gCygCACEPIAtBvAFqIhAgDCgCADYCACALQbgBaiIMIAA2AgAgC0G0AWoiESABNgIAIAtBsAFqIgkgAjYCACALQawBaiICIAM2AgAgC0GoAWoiCCAENgIAIAtBpAFqIgQgBTYCACALQaABaiIKIAY2AgAgC0GcAWoiAyAHNgIAIAtBmAFqIgEgDjYCACALQZQBaiISIA82AgAgC0HMAGoiBSALQYABaiIAIBAoAgAgDCgCABCAAjYCACAFKAIAEM0BBEAgDUG6fzYCACANKAIAIQAgCyQFIAAPCyALQfAAaiITIBEoAgAgCSgCACABKAIAQQFrai0AABCBAiALQeAAaiIRIAIoAgAgCCgCACABKAIAQQFrai0AABCBAiALQdAAaiIUIAQoAgAgCigCACABKAIAQQFrai0AABCBAiAAIAMoAgAgASgCAEEDdGpBfGovAQAgCigCACABKAIAQQFrai0AAEECdEGwNGooAgAQiAIgABCEAiAAIAMoAgAgASgCAEEDdGpBfmovAQAgCSgCACABKAIAQQFrai0AAEECdEHANWooAgAQiAIgABCEAiALQcgAaiECIAtBxABqIQQgEigCAARAIAIgCCgCACABKAIAQQFrai0AADYCACAEIAIoAgAgAigCAEEYSQR/IAIoAgAFQRgLazYCACAEKAIABEAgACADKAIAIAEoAgBBAWtBA3RqKAIAIAQoAgAQiAIgABCEAgsgACADKAIAIAEoAgBBAWtBA3RqKAIAIAQoAgB2IAIoAgAgBCgCAGsQiAIFIAAgAygCACABKAIAQQFrQQN0aigCACAIKAIAIAEoAgBBAWtqLQAAEIgCCyALQcYBaiEMIAtBxQFqIQ4gC0HEAWohDyALQTxqIQUgC0E4aiEEIAtBNGohBiALQTBqIQcgC0EsaiEQIAAQhAIgC0FAayICIAEoAgBBAms2AgADQCACKAIAIAEoAgBJBEAgDCAKKAIAIAIoAgBqLAAAOgAAIA4gCCgCACACKAIAaiwAADoAACAPIAkoAgAgAigCAGosAAA6AAAgBSAMLQAAQQJ0QbA0aigCADYCACAEIA4tAAA2AgAgBiAPLQAAQQJ0QcA1aigCADYCACAAIBEgDi0AABCCAiAAIBMgDy0AABCCAiAAEIQCIAAgFCAMLQAAEIICIAAQhAIgACADKAIAIAIoAgBBA3RqLwEEIAUoAgAQiAIgBSgCACAGKAIAakEYSwRAIAAQhAILIAAgAygCACACKAIAQQN0ai8BBiAGKAIAEIgCIAAQhAIgEigCAARAIAcgBCgCACAEKAIAQRhJBH8gBCgCAAVBGAtrNgIAIAcoAgAEQCAAIAMoAgAgAigCAEEDdGooAgAgBygCABCIAiAAEIQCCyAAIAMoAgAgAigCAEEDdGooAgAgBygCAHYgBCgCACAHKAIAaxCIAgUgACADKAIAIAIoAgBBA3RqKAIAIAQoAgAQiAILIAAQhAIgAiACKAIAQX9qNgIADAELCyAAIBMQhQIgACAREIUCIAAgFBCFAiAQIAAQhgI2AgAgECgCAAR/IA0gECgCADYCACANKAIAIQAgCyQFIAAFIA1Bun82AgAgDSgCACEAIAskBSAACwtFAQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAIoAgBBAEdBJGxB4B5qIAMoAgBBAnRqKAIAIQAgAiQFIAALnDIBeX8jBSEGIwVBgARqJAUgBkH0A2ohPCAGQfADaiE9IAZB7ANqISwgBkHoA2ohbyAGQeQDaiFwIAZB4ANqIS0gBkHcA2ohcSAGQdgDaiEuIAZB1ANqISQgBkHQA2ohHCAGQcwDaiE+IAZByANqIQcgBkHEA2ohEyAGQcADaiFWIAZBvANqIT8gBkG4A2ohJSAGQbQDaiFAIAZBsANqIQsgBkGsA2ohDyAGQagDaiEvIAZBpANqIVcgBkGgA2ohHSAGQZwDaiFYIAZBmANqIUEgBkGUA2ohWSAGQZADaiEXIAZBjANqIVogBkGIA2ohWyAGQYQDaiFyIAZBgANqIUIgBkH8AmohQyAGQfgCaiEwIAZB9AJqIXMgBkHwAmohdCAGQewCaiExIAZB6AJqIXUgBkHkAmohMiAGQeACaiEmIAZB3AJqIR4gBkHYAmohRCAGQdQCaiEIIAZB0AJqIRQgBkHMAmohXCAGQcgCaiFFIAZBxAJqIScgBkHAAmohRiAGQbwCaiEMIAZBuAJqIRAgBkG0AmohMyAGQbACaiFdIAZBrAJqIR8gBkGoAmohXiAGQaQCaiFHIAZBoAJqIV8gBkGcAmohGCAGQZgCaiFgIAZBlAJqIWEgBkGQAmohdiAGQYwCaiFIIAZBiAJqIUkgBkGEAmohNCAGQYACaiF3IAZB/AFqIXggBkH4AWohNSAGQfQBaiF5IAZB8AFqITYgBkHsAWohKCAGQegBaiEgIAZB5AFqIUogBkHgAWohCSAGQdwBaiEVIAZB2AFqIWIgBkHUAWohSyAGQdABaiEpIAZBzAFqIUwgBkHIAWohDSAGQcQBaiERIAZBwAFqITcgBkG8AWohYyAGQbgBaiEhIAZBtAFqIWQgBkGwAWohTSAGQawBaiFlIAZBqAFqIRkgBkGkAWohZiAGQaABaiFnIAZBnAFqIXogBkGYAWohTiAGQZQBaiFPIAZBkAFqITggBkGMAWoheyAGQYgBaiF8IAZBhAFqITkgBkGAAWohfSAGQfwAaiE6IAZB+ABqISogBkH0AGohIiAGQfAAaiFQIAZB7ABqIQogBkHoAGohFiAGQeQAaiFoIAZB4ABqIVEgBkHcAGohKyAGQdgAaiFSIAZB1ABqIQ4gBkHQAGohEiAGQcwAaiE7IAZByABqIWkgBkHEAGohIyAGQUBrIWogBkE8aiFTIAZBOGohayAGQTRqIRogBkEwaiFsIAZBLGohbSAGQShqIX4gBkEkaiEbIAZBIGoi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IFIoAgBJBEAgaiAKKAIAIDkoAgAgOigCABC7AjYCACBTIAooAgAgIigCAGs2AgAgayAqKAIAIGooAgBBAnRqKAIANgIAIBogIigCACBrKAIAajYCACAqKAIAIGooAgBBAnRqIFMoAgA2AgACQCAOKAIAQQBLIAooAgBBAWogDigCAGsQ0AEgCigCAEEBahDQAUZxBEAgIyAKKAIAQQVqIAooAgBBBWogDigCAGsgKygCABC8AkEEajYCACAKIAooAgBBAWo2AgAgTygCACAKKAIAIBYoAgBrIBYoAgBBACAjKAIAQQNrEPkCBSBrKAIAIGgoAgBLBEAgGigCABDQASAKKAIAENABRgRAICMgCigCAEEEaiAaKAIAQQRqICsoAgAQvAJBBGo2AgAgbCAKKAIAIBooAgBrNgIAA0ACQCAKKAIAIBYoAgBLIBooAgAgUSgCAEtxRQ0AIAooAgBBf2otAAAgGigCAEF/ai0AAEcNACAKIAooAgBBf2o2AgAgGiAaKAIAQX9qNgIAICMgIygCAEEBajYCAAwBCwsgEiAOKAIANgIAIA4gbCgCADYCACBPKAIAIAooAgAgFigCAGsgFigCACBsKAIAQQJqICMoAgBBA2sQ+QIMAwsLIAogCigCACAKKAIAIBYoAgBrQQh1IH0oAgBqajYCAAwDCwsgCiAKKAIAICMoAgBqNgIAIBYgCigCADYCAAJAIAooAgAgUigCAE0EQCBTKAIAQQJqIQAgKigCACAiKAIAIFMoAgBqQQJqIDkoAgAgOigCABC7AkECdGogADYCACAKKAIAQX5qICIoAgBrIQAgKigCACAKKAIAQX5qIDkoAgAgOigCABC7AkECdGogADYCAANAIAooAgAgUigCAEsNAiASKAIAQQBLIAooAgAQ0AEgCigCACASKAIAaxDQAUZxRQ0CIG0gCigCAEEEaiAKKAIAQQRqIBIoAgBrICsoAgAQvAJBBGo2AgAgfiASKAIANgIAIBIgDigCADYCACAOIH4oAgA2AgAgCigCACAiKAIAayEAICooAgAgCigCACA5KAIAIDooAgAQuwJBAnRqIAA2AgAgTygCAEEAIBYoAgBBACBtKAIAQQNrEPkCIAogCigCACBtKAIAajYCACAWIAooAgA2AgAMAAsACwsMAQsLIA4oAgAhACA7KAIAIQEgOCgCACAO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ai0AAEcNAyAHIAcoAgBBf2o2AgAgIiAiKAIAQX9qNgIAIA0gDSgCAEEBajYCAAwACwALCyAHIAcoAgAgBygCACALKAIAa0EIdUEBamo2AgAMAwsgFyAMKAIANgIAIAwgSigCADYCACBgKAIAIAcoAgAgCygCAGsgCygCACBKKAIAQQJqIA0oAgBBA2sQ+QILIAcgBygCACANKAIAajYCACALIAcoAgA2AgACQCAHKAIAIGIoAgBNBEAgNygCAEECaiEAIDUoAgAgGygCACA3KAIAakECaiBHKAIAIEYoAgAQuwJBAnRqIAA2AgAgHygCACAbKAIAIDcoAgBqQQJqIDQoAgBBCBC7AkECdGogADYCACAHKAIAQX5qIBsoAgBrIQAgNSgCACAHKAIAQX5qIEcoAgAgRigCABC7AkECdGogADYCACAfKAIAIAcoAgBBfmogNCgCAEEIELsCQQJ0aiAANgIAA0AgBygCACBiKAIASw0CIBcoAgBBAEsgBygCABDQASAHKAIAIBcoAgBrENABRnFFDQIgdiAHKAIAQQRqIAcoAgBBBGogFygCAGsgICgCABC8AkEEajYCACCUASAXKAIANgIAIBcgDCgCADYCACAMIJQBKAIANgIAIAcoAgAgGygCAGshACA1KAIAIAcoAgAgRygCACBGKAIAELsCQQJ0aiAANgIAIAcoAgAgGygCAGshACAfKAIAIAcoAgAgNCgCAEEIELsCQQJ0aiAANgIAIGAoAgBBACALKAIAQQAgdigCAEEDaxD5AiAHIAcoAgAgdigCAGo2AgAgCyAHKAIANgIADAALAAsLDAELCyAMKAIAIQAgSSgCACEBIEUoAgAgDCgCAAR/IAAFIAELNgIAIBcoAgAhACBJKAIAIQEgRSgCACAXKAIABH8gAAUgAQs2AgQgMyAgKAIAIAsoAgBrNgIAIDMoAgAhACAGJAUgAA8LIG0oAgAhBCABKAIAIQEgACgCACEAIAIoAgAhAiADKAIAIQMgUiBsKAIANgIAIGYgBDYCACBTIAE2AgAggAEgADYCACCYASACNgIAIJkBIAM2AgAgVEEFNgIAICkgUigCACgCJDYCACA8IIABKAIAKAIINgIAID0gUigCACgCLDYCACBVIIABKAIAKAIENgIAIB0gUigCACgCBDYCACBnIJgBKAIANgIAIAkgZygC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BE8EQCAcKAIAIB0oAgBKBEAgASAPKAIANgIAIAIgDigCADYCACADIAAoAgA2AgAMAgsLIBQoAgBBAkcNAiAAKAIAIA0oAgBPDQIgACAAKAIAQQFqNgIAAkAgAigCAARAIAcoAgBBAEsgACgCABDQASAAKAIAIAcoAgBrENABRnEEQCAQIAAoAgBBBGogACgCAEEEaiAHKAIAayAEKAIAELwCQQRqNgIAIB4gECgCAEECdDYCACAfIAEoAgBBAnQgAigCAEEBahDUAWtBAWo2AgAgECgCAEEETwRAIB4oAgAgHygCAEwNAyABIBAoAgA2AgAgAkEANgIAIAMgACgCADYCAAsLCwsgEUH/wdcvNgIAIBIgCigCACATKAIAIAAoAgAgBCgCACARIBYoAgBBB3FBuAFqEQkANgIAICAgEigCAEECdCARKAIAQQFqENQBazYCACAhIAEoAgBBAnQgAigCAEEBahDUAWtBB2o2AgAgEigCAEEESQ0CICAoAgAgISgCAEwNAiABIBIoAgA2AgAgAiARKAIANgIAIAMgACgCADYCAAwACwALCyACKAIABEADQAJAIAMoAgAgBSgCAEsgAygCACACKAIAQQJrayAVKAIAS3FFDQAgAygCAEF/ai0AACADKAIAIAIoAgBrLQABRw0AIAMgAygCAEF/ajYCACABIAEoAgBBAWo2AgAMAQsLIAggBygCADYCACAHIAIoAgBBAms2AgALCyAiIAMoAgAgBSgCAGs2AgAgGSgCACAiKAIAIAUoAgAgAigCACABKAIAQQNrEPkCIAAgAygCACABKAIAaiIjNgIAIAUgIzYCAANAAkAgACgCACANKAIATSAIKAIAQQBLcUUNACAAKAIAENABIAAoAgAgCCgCAGsQ0AFHDQAgASAAKAIAQQRqIAAoAgBBBGogCCgCAGsgBCgCABC8AkEEajYCACACIAgoAgA2AgAgCCAHKAIANgIAIAcgAigCADYCACAZKAIAQQAgBSgCAEEAIAEoAgBBA2sQ+QIgACAAKAIAIAEoAgBqNgIAIAUgACgCADYCAAwBCwsMAQsLIAcoAgAhACAMKAIAIQEgCygCACAHKAIABH8gAAUgAQs2AgAgCCgCACEAIAwoAgAhASALKAIAIAgoAgAEfyAABSABCzYCBCAEKAIAIAUoAgBrIQAgBiQFIAALjREB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IRwgBkHoD2ohkQIgBkHkD2ohugMgBkHgD2ohnQEgBkHcD2ohkgIgBkHYD2ohkwIgBkHUD2oh2QEgBkHQD2ohUyAGQcwPaiGUAiAGQcgPaiGVAiAGQcQPaiHsAiAGQcAPaiGWAiAGQbwPaiHaASAGQbgPaiHbASAGQbQPaiGXAiAGQbAPaiG7AyAGQawPaiEvIAZBqA9qIe0CIAZBpA9qIWogBkGgD2ohvAMgBkGcD2ohayAGQZgPaiGeASAGQZQPaiHuAiAGQZAPaiFUIAZBjA9qIe8CIAZBiA9qIWwgBkGED2ohbSAGQYAPaiG9AyAGQfwOaiG+AyAGQfgOaiHcASAGQfQOaiECIAZB8A5qIZ8BIAZB7A5qIZgCIAZB6A5qIUMgBkHkDmohoAEgBkHgDmohFCAGQdwOaiFEIAZB2A5qIZkCIAZB1A5qIb8DIAZB0A5qIZoCIAZBzA5qIW4gBkHIDmohwAMgBkHEDmohoQEgBkHADmoh8AIgBkG8DmohogEgBkG4DmohKCAGQbQOaiHBAyAGQbAOaiE6IAZBrA5qIfECIAZBqA5qIfICIAZBpA5qIR0gBkGgDmohmwIgBkGcDmohwgMgBkGYDmohowEgBkGUDmohnAIgBkGQDmohnQIgBkGMDmoh3QEgBkGIDmohVSAGQYQOaiGeAiAGQYAOaiGfAiAGQfwNaiHzAiAGQfgNaiGgAiAGQfQNaiHeASAGQfANaiHfASAGQewNaiGhAiAGQegNaiHDAyAGQeQNaiEwIAZB4A1qIfQCIAZB3A1qIW8gBkHYDWohxAMgBkHUDWohcCAGQdANaiGkASAGQcwNaiH1AiAGQcgNaiFWIAZBxA1qIfYCIAZBwA1qIXEgBkG8DWohciAGQbgNaiHFAyAGQbQNaiHGAyAGQbANaiHgASAGQawNaiEDIAZBqA1qIaUBIAZBpA1qIaICIAZBoA1qIUUgBkGcDWohpgEgBkGYDWohFSAGQZQNaiFGIAZBkA1qIaMCIAZBjA1qIccDIAZBiA1qIaQCIAZBhA1qIXMgBkGADWohyAMgBkH8DGohpwEgBkH4DGoh9wIgBkH0DGohqAEgBkHwDGohKSAGQewMaiHJAyAGQegMaiE7IAZB5AxqIfgCIAZB4AxqIfkCIAZB3AxqIR4gBkHYDGohpQIgBkHUDGohygMgBkHQDGohqQEg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NgIAIJIBKAIAIKADKAIASyAaKAIAIJIBKAIAaiBQKAIARnIEQCBPKAIAIC4oAgBBAWo2Ahgg1AJBATYCAAwFCwsLCwsgoQMoAgAgogMoAgBBAnRqIC4oAgA2AgACQAJAAkADQAJAIKQDIKQDKAIAIgdBf2o2AgAgB0UNACAjKAIAINwCKAIATQ0AIP4BINcCKAIAICMoAgAgzQEoAgBxQQN0ajYCACDYAigCACEHINkCKAIAIQggDyDYAigCACDZAigCAEkEfyAHBSAICzYCAAJAAkAg1QIoAgBFDQAgIygCACAPKAIAaiBiKAIATw0AIM8BIPsBKAIAICMoAgBqNgIAIBooAgAgDygCAGogzwEoAgAgDygCAGogUCgCACDaAigCACDbAigCABC9AiEHIA8gDygCACAHajYCACAjKAIAIA8oAgBqIGIoAgBPBEAgzwEgzAEoAgAgIygCAGo2AgALDAELIM8BIMwBKAIAICMoAgBqNgIAIBooAgAgDygCAGogzwEoAgAgDygCAGogUCgCABC8AiEHIA8gDygCACAHajYCAAsgDygCACCPASgCAEsEQCAPKAIAIN0CKAIAICMoAgBrSwRAIN0CICMoAgAgDygCAGo2AgALII8BIA8oAgA2AgAgjgEoAgAgNigCAEEDdGogLigCACAjKAIAa0ECajYCACCOASgCACA2KAIAQQN0aiAPKAIANgIEIDYgNigCAEEBajYCACAPKAIAQYAgSw0BIBooAgAgDygCAGogUCgCAEYNAQsgIygCACEHIM8BKAIAIA8oAgBqLQAAIBooAgAgDygCAGotAABIBEAg/AEoAgAgBzYCACDYAiAPKAIANgIAICMoAgAgowMoAgBNDQMg/AEg/gEoAgBBBGo2AgAgIyD+ASgCACgCBDYCAAUg/QEoAgAgBzYCACDZAiAPKAIANgIAICMoAgAgowMoAgBNDQQg/QEg/gEoAgA2AgAgIyD+ASgCACgCADYCAAsMAQsLDAILIPwBIPsDNgIADAELIP0BIPsDNgIACyD9ASgCAEEANgIAIPwBKAIAQQA2AgAgTygCACDdAigCAEEIazYCGCDUAiA2KAIANgIACyDQASDUAigCADYCAAwECyCTASgCACEHIJQBKAIAIQgg0QEoAgAhCSDSASgCACEKIIECKAIAIQwgggIoAgAhECCDAigCACERIIQCKAIAIRIgSSBkKAIANgIAILgBIAc2AgAgFyAINgIAIEogCTYCACC3AiAKNgIAIN8DIAw2AgAguAIgEDYCACB/IBE2AgAg4AMgEjYCACC5AUEGNgIAIIsDILgBKAIAKAIUQf8fSQR/ILgBKAIAKAIUBUH/HwsiBzYCACC6ASBJKAIAKAIENgIAICsgFygCACC6ASgCAGs2AgAg4QMguAEoAgAoAgg2AgAgPSC5ASgCAEEDRgR/QQMFQQQLNgIAIIwDIEkoAgAoAiQ2AgAgjQMgFygCACDhAygCACC5ASgCABC7AjYCACAgIIwDKAIAII0DKAIAQQJ0aigCADYCACC5AiBJKAIAKAIsNgIAIOIDILgBKAIAKAIEQQFrNgIAILsBQQEg4gMoAgB0QQFrNgIAILoCQQA2AgAguwJBADYCACDvASBJKAIAKAIINgIAIFwgSSgCACgCDDYCACC8AiDvASgCACBcKAIAajYCACC9AiC6ASgCACBcKAIAajYCACCOAyC7ASgCACArKAIATwR/QQAFICsoAgAguwEoAgBrCyIHNgIAIL4CIEkoAgAoAhA2AgAg8AEguQIoAgAgKygCACC7ASgCAHFBA3RqNgIAIPEBILkCKAIAICsoAgAguwEoAgBxQQN0akEEajYCACC/AiArKAIAQQlqNgIAIDNBADYCACCPA0EBILgBKAIAKAIMdDYCACCAASDgAygCAEEBazYCACDkAyC4AigCAEEDajYCACCBASC4AigCADYCAAJAAkACQANAIIEBKAIAIOQDKAIATw0CIN8DKAIAIQcgvAEggQEoAgBBA0YEfyAHKAIAQQFrBSAHIIEBKAIAQQJ0aigCAAsiBzYCACCQAyArKAIAILwBKAIAazYCACBdQQA2AgAgvAEoAgBBAWsgKygCACBcKAIAa0kEQCAXKAIAID0oAgAQ8QIgFygCACC8ASgCAGsgPSgCABDxAkYEQCBdIBcoAgAgPSgCAGogFygCACA9KAIAaiC8ASgCAGsgSigCABC8AiA9KAIAajYCAAsFIJEDIO8BKAIAIJADKAIAajYCACC3AigCAARAILwBKAIAQQFrICsoAgAgvgIoAgBrSSBcKAIAQQFrIJADKAIAa0EDT3EEQCAXKAIAID0oAgAQ8QIgkQMoAgAgPSgCABDxAkYEQCBdIBcoAgAgPSgCAGogkQMoAgAgPSgCAGogSigCACC8AigCACC9AigCABC9AiA9KAIAajYCAAsLCwsgXSgCACCAASgCAEsEQCCAASBdKAIANgIAIH8oAgAgMygCAEEDdGoggQEoAgAguAIoAgBrNgIAIH8oAgAgMygCAEEDdGogXSgCADYCBCAzIDMoAgBBAWo2AgAgXSgCACCLAygCAEsgFygCACBdKAIAaiBKKAIARnINAgsggQEggQEoAgBBAWo2AgAMAAsACyC2AiAzKAIANgIADAELILkBKAIAQQNGBEAggAEoAgAguQEoAgBJBEAgggEgSSgCACAXKAIAEPICNgIAIIIBKAIAIL4CKAIASyArKAIAIIIBKAIAa0GAgBBJcQRAAkACQCC3AigCAEUNACCCASgCACBcKAIATw0AIOYDIO8BKAIAIIIBKAIAajYCACCDASAXKAIAIOYDKAIAIEooAgAgvAIoAgAgvQIoAgAQvQI2AgAMAQsg5QMgugEoAgAgggEoAgBqNgIAIIMBIBcoAgAg5QMoAgAgSigCABC8AjYCAAsggwEoAgAguQEoAgBPBEAggAEggwEoAgA2AgAgfygCACArKAIAIIIBKAIAa0ECajYCACB/KAIAIIMBKAIANgIEIDNBATYCACCDASgCACCLAygCAEsgFygCACCDASgCAGogSigCAEZyBEAgSSgCACArKAIAQQFqNgIYILYCQQE2AgAMBQsLCwsLIIwDKAIAII0DKAIAQQJ0aiArKAIANgIAAkACQAJAA0ACQCCPAyCPAygCACIHQX9qNgIAIAdFDQAgICgCACC+AigCAE0NACDyASC5AigCACAgKAIAILsBKAIAcUEDdGo2AgAgugIoAgAhByC7AigCACEIIAsgugIoAgAguwIoAgBJBH8gBwUgCAs2AgACQAJAILcCKAIARQ0AICAoAgAgCygCAGogXCgCAE8NACC9ASDvASgCACAgKAIAajYCACAXKAIAIAsoAgBqIL0BKAIAIAsoAgBqIEooAgAgvAIoAgAgvQIoAgAQvQIhByALIAsoAgAgB2o2AgAgICgCACALKAIAaiBcKAIATwRAIL0BILoBKAIAICAoAgBqNgIACwwBCyC9ASC6ASgCACAgKAIAajYCACAXKAIAIAsoAgBqIL0BKAIAIAsoAgBqIEooAgAQvAIhByALIAsoAgAgB2o2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ASAlKAIAIIUCKAIAazYCAAsLILADIIUCKAIANgIAILEDIN8CKAIANgIAIGYgASgCADYCAANAIOQCIAAoAgAgZigCAEEcbGooAgg2AgAgiwQgACgCACBmKAIAQRxsaigCBDYCACAAKAIAIGYoAgBBHGxqILADKAIANgIIIAAoAgAgZigCAEEcbGogsQMoAgA2AgQgsAMg5AIoAgA2AgAgsQMgiwQoAgA2AgAg5AIoAgAgZigCAE0EQCBmIGYoAgAg5AIoAgBrNgIADAELCyBnQQA2AgADQCBnKAIAICUoAgBJBEAg5QIgJCgCACBSKAIAazYCACDWASAAKAIAIGcoAgBBHGxqKAIINgIAINcBIAAoAgAgZygCAEEcbGooAgQ2AgAg1gEoAgBBAUYEQCAkICQoAgBBAWo2AgAgZyBnKAIAQQFqNgIADAILIGcgZygCACDWASgCAGo2AgAgJCAkKAIAINYBKAIAajYCACDXASgCAEEDTwRAICYoAgAgJigCACgCBDYCCCAmKAIAICYoAgAoAgA2AgQgJigCACDXASgCAEECazYCAAUgigIg1wEoAgAg5QIoAgBFajYCACCKAigCAARAICYoAgAhByCMBCCKAigCAEEDRgR/IAcoAgBBAWsFIAcgigIoAgBBAnRqKAIACyIHNgIAIIoCKAIAQQJPBEAgJigCACAmKAIAKAIENgIICyAmKAIAICYoAgAoAgA2AgQgJigCACCMBCgCADYCAAsLIDgoAgAg5QIoAgAgUigCACDXASgCACDWASgCABD4AiCOBCgCACDlAigCACBSKAIAINcBKAIAINYBKAIAQQNrEPkCIFIgJCgCADYCAAwBCwsgOCgCABD6AgwBCwsgjQIoAgAgUigCAGshACAGJAUgAAuM1gEBiQR/IwUhBiMFQeAQaiQFIAZBFGoiCyAANgIAIAZBEGoiACABNgIAIAZBDGoiASACNgIAIAZBCGoiAiADNgIAIAZBBGoiAyAENgIAIAYgBTYCACAAKAIAIQAgASgCACEBIAIoAgAhAiADKAIAIQMgBigCACEEIAZBsAJqImggCygCADYCACAGQawCaiKOBCAANgIAIAZBqAJqIiYgATYCACAGQaQCaiLYASACNgIAIAZBoAJqIgcgAzYCACAGQZwCaiIIIAQ2AgAgBkGYAmoijAJBAjYCACAGQZQC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IDYoAgBBA3RqIJABKAIAINYCKAIAazYCACCOASgCACA2KAIAQQN0aiBjKAIANgIEIDYgNigCAEEBajYCACBjKAIAIKADKAIASyAaKAIAIGMoAgBqIFAoAgBGcg0CCyCQASCQASgCAEEBajYCAAwACwALINQCIDYoAgA2AgAMAQsgywEoAgBBA0YEQCCPASgCACDLASgCAEkEQCCRASBPKAIAIBooAgAQ8gI2AgAgkQEoAgAg3AIoAgBLIC4oAgAgkQEoAgBrQYCAEElxBEACQAJAINUCKAIARQ0AIJEBKAIAIGIoAgBPDQAg/gMg+wEoAgAgkQEoAgBqNgIAIJIBIBooAgAg/gMoAgAgUCgCACDaAigCACDbAigCABC9AjYCAAwBCyD9AyDMASgCACCRASgCAGo2AgAgkgEgGigCACD9AygCACBQKAIAELwCNgIACyCSASgCACDLASgCAE8EQCCPASCSASgCADYCACCOASgCACAuKAIAIJEBKAIAa0ECajYCACCOASgCACCSASgCADYCBCA2QQE2AgAgkgEoAgAgoAMoAgBLIBooAgAgkgEoAgBqIFAoAgBGcgRAIE8oAgAgLigCAEEBajYCGCDUAkEBNgIADAULCwsLCyChAygCACCiAygCAEECdGogLigCADYCAAJAAkACQANAAkAgpAMgpAMoAgAiB0F/ajYCACAHRQ0AICMoAgAg3AIoAgBNDQAg/gEg1wIoAgAgIygCACDNASgCAHFBA3RqNgIAINgCKAIAIQcg2QIoAgAhCCAPINgCKAIAINkCKAIASQR/IAcFIAgLNgIAAkACQCDVAigCAEUNACAjKAIAIA8oAgBqIGIoAgBPDQAgzwEg+wEoAgAgIygCAGo2AgAgGigCACAPKAIAaiDPASgCACAPKAIAaiBQKAIAINoCKAIAINsCKAIAEL0CIQcgDyAPKAIAIAdqNgIAICMoAgAgDygCAGogYigCAE8EQCDPASDMASgCACAjKAIAajYCAAsMAQsgzwEgzAEoAgAgIygCAGo2AgAgGigCACAPKAIAaiDPASgCACAPKAIAaiBQKAIAELwCIQcgDyAPKAIAIAdqNgIACyAPKAIAII8BKAIASwRAIA8oAgAg3QIoAgAgIygCAGtLBEAg3QIgIygCACAPKAIAajYCAAsgjwEgDygCADYCACCOASgCACA2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KAIASyAXKAIAIIMBKAIAaiBKKAIARnIEQCBJKAIAICsoAgBBAWo2AhggtgJBATYCAAwFCwsLCwsgjAMoAgAgjQMoAgBBAnRqICsoAgA2AgACQAJAAkADQAJAII8DII8DKAIAIgdBf2o2AgAgB0UNACAgKAIAIL4CKAIATQ0AIPIBILkCKAIAICAoAgAguwEoAgBxQQN0ajYCACC6AigCACEHILsCKAIAIQggCyC6AigCACC7AigCAEkEfyAHBSAICzYCAAJAAkAgtwIoAgBFDQAgICgCACALKAIAaiBcKAIATw0AIL0BIO8BKAIAICAoAgBqNgIAIBcoAgAgCygCAGogvQEoAgAgCygCAGogSigCACC8AigCACC9AigCABC9AiEHIAsgCygCACAHajYCACAgKAIAIAsoAgBqIFwoAgBPBEAgvQEgugEoAgAgICgCAGo2AgALDAELIL0BILoBKAIAICAoAgBqNgIAIBcoAgAgCygCAGogvQEoAgAgCygCAGogSigCABC8AiEHIAsgCygCACAHajYCAAsgCygCACCAASgCAEsEQCALKAIAIL8CKAIAICAoAgBrSwRAIL8CICAoAgAgCygCAGo2AgALIIABIAsoAgA2AgAgfygCACAzKAIAQQN0aiArKAIAICAoAgBrQQJqNgIAIH8oAgAgMygCAEEDdGogCygCADYCBCAzIDMoAgBBAWo2AgAgCygCAEGAIEsNASAXKAIAIAsoAgBqIEooAgBGDQELICAoAgAhByC9ASgCACALKAIAai0AACAXKAIAIAsoAgBqLQAASARAIPABKAIAIAc2AgAgugIgCygCADYCACAgKAIAII4DKAIATQ0DIPABIPIBKAIAQQRqNgIAICAg8gEoAgAoAgQ2AgAFIPEBKAIAIAc2AgAguwIgCygCADYCACAgKAIAII4DKAIATQ0EIPEBIPIBKAIANgIAICAg8gEoAgAoAgA2AgALDAELCwwCCyDwASDjAzYCAAwBCyDxASDjAzYCAAsg8QEoAgBBADYCACDwASgCAEEANgIAIEkoAgAgvwIoAgBBCGs2AhggtgIgMygCADYCAAsg0AEgtgIoAgA2AgAMAwsgkwEoAgAhByCUASgCACEIINEBKAIAIQkg0gEoAgAhCiCBAigCACEMIIICKAIAIRAggwIoAgAhESCEAigCACESIEsg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sgFBADYCAAUgfSgCACEHIH4oAgAhCCCzASgCACEJIIcDKAIAIQogtAEoAgAhDCDpASBbKAIANgIAINcDIAc2AgAg2AMgCDYCACDZAyAJNgIAINoDIAo2AgAg2wMgDDYCACCFAyDpASgCACgCBDYCACCGAyDYAygCACCFAygCAGs2AgAg6gEg6QEoAgAoAhg2AgADQCDqASgCACCGAygCAEkEQCDpASgCACDXAygCACCFAygCACDqASgCAGog2QMoAgAg2gMoAgAg2wMoAgAQugIhByDqASDqASgCACAHajYCAAwBCwsg6QEoAgAghgMoAgA2AhgCQAJAAkACQCCHAygCAEEDaw4FAAMCAQEDCyB9KAIAIQcgfigCACEIILMBKAIAIQkgtAEoAgAhCiDrASgCACEMIOwBKAIAIRAg7QEoAgAhESDuASgCACESIEcgWygCADYCACCsASAHNgIAIBYgCDYCACBIIAk2AgAgrQIgCjYCACDPAyAMNgIAIK4CIBA2AgAgeCARNgIAINADIBI2AgAgrQFBAzYCACD+AiCsASgCACgCFEH/H0kEfyCsASgCACgCFAVB/x8LIgc2AgAgrgEgRygCACgCBDYCACAqIBYoAgAgrgEoAgBrNgIAINEDIKwBKAIAKAIINgIAIDwgrQEoAgBBA0YEf0EDBUEECzYCACD/AiBHKAIAKAIkNgIAIIADIBYoAgAg0QMoAgAgrQEoAgAQuwI2AgAgHyD/AigCACCAAygCAEECdGooAgA2AgAgrwIgRygCACgCLDYCACDSAyCsASgCACgCBEEBazYCACCvAUEBINIDKAIAdEEBazYCACCwAkEANgIAILECQQA2AgAg5QEgRygCACgCCDYCACBZIEcoAgAoAgw2AgAgsgIg5QEoAgAgWSgCAGo2AgAgswIgrgEoAgAgWSgCAGo2AgAggQMgrwEoAgAgKigCAE8Ef0EABSAqKAIAIK8BKAIAawsiBzYCACC0AiBHKAIAKAIQNgIAIOYBIK8CKAIAICooAgAgrwEoAgBxQQN0ajYCACDnASCvAigCACAqKAIAIK8BKAIAcUEDdGpBBGo2AgAgtQIgKigCAEEJajYCACAyQQA2AgAgggNBASCsASgCACgCDHQ2AgAgeSDQAygCAEEBazYCACDUAyCuAigCAEEDajYCACB6IK4CKAIANgIA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NgIAAkACQCBRKAIAICUoAgBLDQAgrwMoAgAgACgCACBRKAIAQRxsaigCAEgNACCMAigCAEUNAgwBCwNAICUoAgAgUSgCAEkEQCAAKAIAICUoAgBBAWpBHGxqQYCAgIAENgIAICUgJSgCAEEBajYCAAwBCwsgACgCACBRKAIAQRxsaiCWASgCADYCCCAAKAIAIFEoAgBBHGxqIOMCKAIANgIEIAAoAgAgUSgCAEEcbGog1QEoAgA2AgwgACgCACBRKAIAQRxsaiCvAygCADYCACAAKAIAIFEoAgBBHGxqQRBqIgcgrgMpAgA3AgAgByCuAygCCDYCCAsglgEglgEoAgBBf2o2AgAMAQsLIGUgZSgCAEEBajYCAAwACwALCwsgASABKAIAQQFqNgIADAALAAsghQIg4gIoAgA2AgAg3wIgNygCACCJAigCAEEBa0EDdGooAgA2AgAgJSABKAIAQQFqNgIADAILIIUCIAAoAgAgJSgCAEEcbGooAgg2AgAg3wIgACgCACAlKAIAQRxsaigCBDYCACABICUoAgAghQIoAgBrNgIACwsgsAMghQIoAgA2AgAgsQMg3wIoAgA2AgAgZiABKAIANgIAA0Ag5AIgACgCACBmKAIAQRxsaigCCDYCACCLBCAAKAIAIGYoAgBBHGxqKAIENgIAIAAoAgAgZigCAEEcbGogsAMoAgA2AgggACgCACBmKAIAQRxsaiCxAygCADYCBCCwAyDkAigCADYCACCxAyCLBCgCADYCACDkAigCACBmKAIATQRAIGYgZigCACDkAigCAGs2AgAMAQsLIGdBADYCAANAIGcoAgAgJSgCAEkEQCDlAiAkKAIAIFIoAgBrNgIAINYBIAAoAgAgZygCAEEcbGooAgg2AgAg1wEgACgCACBnKAIAQRxsaigCBDYCACDWASgCAEEBRgRAICQgJCgCAEEBajYCACBnIGcoAgBBAWo2AgAMAgsgZyBnKAIAINYBKAIAajYCACAkICQoAgAg1gEoAgBqNgIAINcBKAIAQQNPBEAgJigCACAmKAIAKAIENgIIICYoAgAgJigCACgCADYCBCAmKAIAINcBKAIAQQJrNgIABSCKAiDXASgCACDlAigCAEVqNgIAIIoCKAIABEAgJigCACEHIIwEIIoCKAIAQQNGBH8gBygCAEEBawUgByCKAigCAEEC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ACEQIDcoAgAhESCLAigCACESIGQgaCgCADYCACCTASAHNgIAIJQBIAg2AgAg0QEgCTYCACDSASAKNgIAIIECIAw2AgAgggIgEDYCACCDAiARNgIAIIQCIBI2AgAgqQMgkwEoAgAoAhA2AgACQCCUASgCACBkKAIAKAIEIGQoAgAoAhhqSQRAINABQQA2AgAFIJMBKAIAIQcglAEoAgAhCCDRASgCACEJIKkDKAIAIQog0gEoAgAhDCD/ASBkKAIANgIAIP8DIAc2AgAggAQgCDYCACCBBCAJNgIAIIIEIAo2AgAggwQgDDYCACCnAyD/ASgCACgCBDYCACCoAyCABCgCACCnAygCAGs2AgAggAIg/wEoAgAoAhg2AgADQCCAAigCACCoAygCAEkEQCD/ASgCACD/AygCACCnAygCACCAAigCAGoggQQoAgAgggQoAgAggwQoAgAQugIhByCAAiCAAigCACAHajYCAAwBCwsg/wEoAgAgqAMoAgA2AhgCQAJAAkACQCCpAygCAEEDaw4FAAMCAQEDCyCTASgCACEHIJQBKAIAIQgg0QEoAgAhCSDSASgCACEKIIECKAIAIQwgggIoAgAhECCDAigCACERIIQCKAIAIRIgTyBkKAIANgIAIMoBIAc2AgAgGiAINgIAIFAgCTYCACDVAiAKNgIAIPcDIAw2AgAg1gIgEDYCACCOASARNgIAIPgDIBI2AgAgywFBAzYCACCgAyDKASgCACgCFEH/H0kEfyDKASgCACgCFAVB/x8LIgc2AgAgzAEgTygCACgCBDYCACAuIBooAgAgzAEoAgBrNgIAIPkDIMoBKAIAKAIINgIAIEAgywEoAgBBA0YEf0EDBUEECzYCACChAyBPKAIAKAIkNgIAIKIDIBooAgAg+QMoAgAgywEoAgAQuwI2AgAgIyChAygCACCiAygCAEECdGooAgA2AgAg1wIgTygCACgCLDYCACD6AyDKASgCACgCBEEBazYCACDNAUEBIPoDKAIAdEEBazYCACDYAkEANgIAINkCQQA2AgAg+wEgTygCACgCCDYCACBiIE8oAgAoAgw2AgAg2gIg+wEoAgAgYigCAGo2AgAg2wIgzAEoAgAgYigCAGo2AgAgowMgzQEoAgAgLigCAE8Ef0EABSAuKAIAIM0BKAIAawsiBzYCACDcAiBPKAIAKAIQ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a0EDT3EEQCAXKAIAID0oAgAQ8QIgkQMoAgAgPSgCABDxAkYEQCBdIBcoAgAgPSgCAGogkQMoAgAgPSgCAGogSigCACC8AigCACC9AigCABC9AiA9KAIAajYCAAsLCwsgXSgCACCAASgCAEsEQCCAASBdKAIANgIAIH8oAgAgMygCAEEDdGoggQEoAgAguAIoAgBrNgIAIH8oAgAgMygCAEEDdGogXSgCADYCBCAzIDMoAgBBAWo2AgAgXSgCACCLAygCAEsgFygCACBdKAIAaiBKKAIARnINAgsggQEggQEoAgBBAWo2AgAMAAsACyC2AiAzKAIANgIADAELILkBKAIAQQNGBEAggAEoAgAguQEoAgBJBEAgggEgSSgCACAXKAIAEPICNgIAIIIBKAIAIL4CKAIASyArKAIAIIIBKAIAa0GAgBBJcQRAAkACQCC3AigCAEUNACCCASgCACBcKAIATw0AIOYDIO8BKAIAIIIBKAIAajYCACCDASAXKAIAIOYDKAIAIEooAgAgvAIoAgAgvQIoAgAQvQI2AgAMAQsg5QMgugEoAgAgggEoAgBqNgIAIIMBIBcoAgAg5QMoAgAgSigCABC8AjYCAAsggwEoAgAguQEoAgBPBEAggAEggwEoAgA2AgAgfygCACArKAIAIIIBKAIAa0ECajYCACB/KAIAIIMBKAIANgIEIDNBATYCACCDASgCACCLAygCAEsgFygCACCDASgCAGogSigCAEZyBEAgSSgCACArKAIAQQFqNgIYILYCQQE2AgAMBQsLCwsLIIwDKAIAII0DKAIAQQJ0aiArKAIANgIAAkACQAJAA0ACQCCPAyCPAygCACIHQX9qNgIAIAdFDQAgICgCACC+AigCAE0NACDyASC5AigCACAgKAIAILsBKAIAcUEDdGo2AgAgugIoAgAhByC7AigCACEIIAsgugIoAgAguwIoAgBJBH8gBwUgCAs2AgACQAJAILcCKAIARQ0AICAoAgAgCygCAGogXCgCAE8NACC9ASDvASgCACAgKAIAajYCACAXKAIAIAsoAgBqIL0BKAIAIAsoAgBqIEooAgAgvAIoAgAgvQIoAgAQvQIhByALIAsoAgAgB2o2AgAgICgCACALKAIAaiBcKAIATwRAIL0BILoBKAIAICAoAgBqNgIACwwBCyC9ASC6ASgCACAgKAIA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CyCFAiAAKAIAICUoAgBBHGxqKAIINgIAIN8CIAAoAgAgJSgCAEEcbGooAgQ2AgAgASAlKAIAIIUCKAIAazYCAAsLILADIIUCKAIANgIAILEDIN8CKAIANgIAIGYgASgCADYCAANAIOQCIAAoAgAgZigCAEEcbGooAgg2AgAgiwQgACgCACBmKAIAQRxsaigCBDYCACAAKAIAIGYoAgBBHGxqILADKAIANgIIIAAoAgAgZigCAEEcbGogsQMoAgA2AgQgsAMg5AIoAgA2AgAgsQMgiwQoAgA2AgAg5AIoAgAgZigCAE0EQCBmIGYoAgAg5AIoAgBrNgIADAELCyBnQQA2AgADQCBnKAIAICUoAgBJBEAg5QIgJCgCACBSKAIAazYCACDWASAAKAIAIGcoAgBBHGxqKAIINgIAINcBIAAoAgAgZygCAEEcbGooAgQ2AgAg1gEoAgBBAUYEQCAkICQoAgBBAWo2AgAgZyBnKAIAQQFqNgIADAILIGcgZygCACDWASgCAGo2AgAgJCAkKAIAINYBKAIAajYCACDXASgCAEEDTwRAICYoAgAgJigCACgCBDYCCCAmKAIAICYoAgAoAgA2AgQgJigCACDXASgCAEECazYCAAUgigIg1wEoAgAg5QIoAgBFajYCACCKAigCAARAICYoAgAhByCMBCCKAigCAEEDRgR/IAcoAgBBAWsFIAcgigIoAgBBAnRqKAIACyIHNgIAIIoCKAIAQQJPBEAgJigCACAmKAIAKAIENgIICyAmKAIAICYoAgAoAgA2AgQgJigCACCMBCgCADYCAAsLIDgoAgAg5QIoAgAgUigCACDXASgCACDWASgCABD4AiCOBCgCACDlAigCACBSKAIAINcBKAIAINYBKAIAQQNrEPkCIFIgJCgCADYCAAwBCwsgOCgCABD6AgwBCwsgjQIoAgAgUigCAGshACAGJAUgAAuM1gEBiQR/IwUhBiMFQeAQaiQFIAZBFGoiCyAANgIAIAZBEGoiACABNgIAIAZBDGoiASACNgIAIAZBCGoiAiADNgIAIAZBBGoiAyAENgIAIAYgBTYCACAAKAIAIQAgASgCACEBIAIoAgAhAiADKAIAIQMgBigCACEEIAZBsAJqImggCygCADYCACAGQawCaiKOBCAANgIAIAZBqAJqIiYgATYCACAGQaQCaiLYASAC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ABC9AiBAKAIAajYCAAsLCwsgYygCACCPASgCAEsEQCCPASBjKAIANgIAII4BKAIAIDYoAgBBA3RqIJABKAIAINYCKAIAazYCACCOASgCACA2KAIAQQN0aiBjKAIANgIEIDYgNigCAEEBajYCACBjKAIAIKADKAIASyAaKAIAIGMoAgBqIFAoAgBGcg0CCyCQASCQASgCAEEBajYCAAwACwALINQCIDYoAgA2AgAMAQsgywEoAgBBA0YEQCCPASgCACDLASgCAEkEQCCRASBPKAIAIBooAgAQ8gI2AgAgkQEoAgAg3AIoAgBLIC4oAgAgkQEoAgBrQYCAEElxBEACQAJAINUCKAIARQ0AIJEBKAIAIGIoAgBPDQAg/gMg+wEoAgAgkQEoAgBqNgIAIJIBIBooAgAg/gMoAgAgUCgCACDaAigCACDbAigCABC9AjYCAAwBCyD9AyDMASgCACCRASgCAGo2AgAgkgEgGigCACD9AygCACBQKAIAELwCNgIACyCSASgCACDLASgCAE8EQCCPASCSASgCADYCACCOASgCACAuKAIAIJEBKAIAa0ECajYCACCOASgCACCSASgCADYCBCA2QQE2AgAgkgEoAgAgoAMoAgBLIBooAgAgkgEoAgBqIFAoAgBGcgRAIE8oAgAgLigCAEEBajYCGCDUAkEBNgIADAULCwsLCyChAygCACCiAygCAEECdGogLigCADYCAAJAAkACQANAAkAgpAMgpAMoAgAiB0F/ajYCACAHRQ0AICMoAgAg3AIoAgBNDQAg/gEg1wIoAgAgIygCACDNASgCAHFBA3RqNgIAINgCKAIAIQcg2QIoAgAhCCAPINgCKAIAINkCKAIASQR/IAcFIAgLNgIAAkACQCDVAigCAEUNACAjKAIAIA8oAgBqIGIoAgBPDQAgzwEg+wEoAgAgIygCAGo2AgAgGigCACAPKAIAaiDPASgCACAPKAIAaiBQKAIAINoCKAIAINsCKAIAEL0CIQcgDyAPKAIAIAdqNgIAICMoAgAgDygCAGogYigCAE8EQCDPASDMASgCACAjKAIAajYCAAsMAQsgzwEgzAEoAgAgIygCAGo2AgAgGigCACAPKAIAaiDPASgCACAPKAIAaiBQKAIAELwCIQcgDyAPKAIAIAdqNgIACyAPKAIAII8BKAIASwRAIA8oAgAg3QIo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ICsoAgAgggEoAgBrQQJqNgIAIH8oAgAggwEoAgA2AgQgM0EBNgIAIIMBKAIAIIsDKAIASyAXKAIAIIMBKAIAaiBKKAIARnIEQCBJKAIAICsoAgBBAWo2AhggtgJBATYCAAwFCwsLCwsgjAMoAgAgjQMoAgBBAnRqICsoAgA2AgACQAJAAkADQAJAII8DII8DKAIAIgdBf2o2AgAgB0UNACAgKAIAIL4CKAIATQ0AIPIBILkCKAIAICAoAgAguwEoAgBxQQN0ajYCACC6AigCACEHILsCKAIAIQggCyC6AigCACC7AigCAEkEfyAHBSAICzYCAAJAAkAgtwIoAgBFDQAgICgCACALKAIAaiBcKAIATw0AIL0BIO8BKAIAICAoAgBqNgIAIBcoAgAgCygCAGogvQEoAgAgCygCAGogSigCACC8AigCACC9AigCABC9AiEHIAsgCygCACAHajYCACAgKAIAIAsoAgBqIFwoAgBPBEAgvQEgugEoAgAgICgCAGo2AgALDAELIL0BILoBKAIAICAoAgBqNgIAIBcoAgAgCygCAGogvQEoAgAgCygCAGogSigCABC8AiEHIAsgCygCACAHajYCAAsgCygCACCAASgCAEsEQCALKAIAIL8CKAIAICAoAgBrSwRAIL8CICAoAgAgCygCAGo2AgALIIABIAsoAgA2AgAgfygCACAzKAIAQQN0aiArKAIAICAoAgBrQQJqNgIAIH8oAgAgMygCAEEDdGogCygCADYCBCAzIDMoAgBBAWo2AgAgCygCAEGAIEsNASAXKAIAIAsoAgBqIEooAgBGDQELICAoAgAhByC9ASgCACALKAIAai0AACAXKAIAIAsoAgBqLQAASARAIPABKAIAIAc2AgAgugIgCygCADYCACAgKAIAII4DKAIATQ0DIPABIPIBKAIAQQRqNgIAICAg8gEoAgAoAgQ2AgAFIPEBKAIAIAc2AgAguwIgCygCADYCACAgKAIAII4DKAIATQ0EIPEBIPIBKAIANgIAICAg8gEoAgAoAgA2AgALDAELCwwCCyDwASDjAzYCAAwBCyDxASDjAzYCAAsg8QEoAgBBADYCACDwASgCAEEANgIAIEkoAgAgvwIoAgBBCGs2AhggtgIgMygCADYCAAsg0AEgtgIoAgA2AgAMAwsgkwEoAgAhByCUASgCACEIINEB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ASASNgIAIIcDIH0oAgAoAhA2AgACQCB+KAIAIFsoAgAoAgQgWygCACgCGGpJBEAgsgFBADYCAAUgfSgCACEHIH4oAgAhCCCzASgCACEJIIcDKAIAIQogtAEoAgAhDCDpASBbKAIANgIAINcDIAc2AgAg2AMgCDYCACDZAyAJNgIAINoDIAo2AgAg2wMgDDYCACCFAyDpASgCACgCBDYCACCGAyDYAygCACCFAygCAGs2AgAg6gEg6QEoAgAoAhg2AgADQCDqASgCACCGAygCAEkEQCDpASgCACDXAygCACCFAygCACDqASgCAGog2QMoAgAg2gMoAgAg2wMoAgAQugIhByDqASDqASgCACAHajYCAAwBCwsg6QEoAgAghgMoAgA2AhgCQAJAAkACQCCHAygCAEEDaw4FAAMCAQEDCyB9KAIAIQcgfigCACEIILMBKAIAIQkgtAEoAgAhCiDrASgCACEMIOwBKAIAIRAg7QEoAgAhESDuASgCACESIEcgWygCADYCACCsASAHNgIAIBYgCDYCACBIIAk2AgAgrQIgCjYCACDPAyAMNgIAIK4CIBA2AgAgeCARNgIAINADIBI2AgAgrQFBAzYCACD+AiCsASgCACgCFEH/H0kEfyCsASgCACgCFAVB/x8LIgc2AgAgrgEgRygCACgCBDYCACAqIBYoAgAgrgEoAgBrNgIAINEDIKwBKAIAKAIINgIAIDwgrQEoAgBBA0YEf0EDBUEECzYCACD/AiBHKAIAKAIkNgIAIIADIBYoAgAg0QMoAgAgrQEoAgAQuwI2AgAgHyD/AigCACCAAygCAEECdGooAgA2AgAgrwIgRygCACgCLDYCACDSAyCsASgCACgCBEEBazYCACCvAUEBINIDKAIAdEEBazYCACCwAkEANgIAILECQQA2AgAg5QEgRygCACgCCDYCACBZIEcoAgAoAgw2AgAgsgIg5QEoAgAgWSgCAGo2AgAgswIgrgEoAgAgWSgCAGo2AgAggQMgrwEoAgAgKigCAE8Ef0EABSAqKAIAIK8BKAIAawsiBzYCACC0AiBHKAIAKAIQNgIAIOYBIK8CKAIAICooAgAgrwEoAgBxQQN0ajYCACDnASCvAigCACAqKAIAIK8BKAIAcUEDdGpBBGo2AgAgtQIgKigCAEEJajYCACAyQQA2AgAgggNBASCsASgCACgCDHQ2AgAgeSDQAygCAEEBazYCACDUAyCuAigCAEEDajYCACB6IK4CKAIANgIAAkACQAJAA0AgeigCACDUAygCAE8NAiDPAygCACEHILABIHooAgBBA0YEfyAHKAIAQQFrBSAHIHooAgBBAnRqKAIACyIHNgIAIIMDICooAgAgsAEoAgBrNgIAIFpBADYCAAJAILABKAIAQQFrICooAgAgWSgCAGtJBEAgFigCACA8KAIAEPECIBYoAgAgsAEoAgBrIDwoAgAQ8QJHDQEgWiAWKAIAIDwoAgBqIBYoAgAgPCgCAGogsAEoAgBrIEgoAgAQvAIgPCgCAGo2AgAFIIQDIOUBKAIAIIMDKAIAajYCACCtAigCAEUNASCwASgCAEEBayAqKAIAILQCKAIAa0kgWSgCAEEBayCDAygCAGtBA09xRQ0BIBYoAgAgPCgCABDxAiCEAygCACA8KAIAEPECRw0BIFogFigCACA8KAIAaiCEAygCACA8KAIAaiBIKAIAILICKAIAILMCKAIAEL0CIDwoAgBqNgIACwsgWigCACB5KAIASwRAIHkgWigCADYCACB4KAIAIDIoAgBBA3RqIHooAgAgrgIoAgBrNgIAIHgoAgAgMigCAEEDdGogWigCADYCBCAyIDIoAgBBAWo2AgAgWigCACD+AigCAEsgFigCACBaKAIAaiBIKAIARnINAgsgeiB6KAIAQQFqNgIADAALAAsgrAIgMigCADYCAAwBCwJAIK0BKAIAQQNGBEAgeSgCACCtASgCAE8NASB7IEcoAgAgFigCABDyAjYCACB7KAIAILQCKAIASyAqKAIAIHsoAgBrQYCAEElxRQ0BAkACQCCtAigCAEUNACB7KAIAIFkoAgBPDQAg1gMg5QEoAgAgeygCAGo2AgAgfCAWKAIAINYDKAIAIEgoAgAgsgIoAgAgswIoAgAQvQI2AgAMAQsg1QMgrgEoAgAgeygCAGo2AgAgfCAWKAIAINUDKAIAIEgoAgAQvAI2AgALIHwoAgAgrQEoAgBJDQEgeSB8KAIANgIAIHgoAgAgKigCACB7KAIAa0ECajYCACB4KAIAIHwoAgA2AgQgMkEBNgIAIHwoAgAg/gIoAgBLIBYoAgAgfCgCAGogSCgCAEZyRQ0BIEcoAgAgKigCAEEBajYCGCCsAkEBNgIADAILCyD/AigCACCAAygCAEECdGogKigCADYCAAJAAkACQANAAkAgggMgggMoAgAiB0F/ajYCACAHRQ0AIB8oAgAgtAIoAgBNDQAg6AEgrwIoAgAgHygCACCvASgCAHFBA3RqNgIAILACKAIAIQcgsQIoAgAhCCAFILACKAIAILECKAIASQR/IAcFIAgLNgIAAkACQCCtAigCAEUNACAfKAIAIAUoAgBqIFkoAgBPDQAgsQEg5QEoAgAgHygCAGo2AgAgFigCACAFKAIAaiCxASgCACAFKAIAaiBIKAIAILICKAIAILMCKAIAEL0CIQcgBSAFKAIAIAdqNgIAIB8oAgAgBSgCAGogWSgCAEkNASCxASCuASgCACAfKAIAajYCAAwBCyCxASCuASgCACAfKAIAajYCACAWKAIAIAUoAgBqILEBKAIAIAUoAgBqIEgoAgAQvAIhByAFIAUoAgAgB2o2AgALIAUoAgAgeSgCAEsEQCAFKAIAILUCKAIAIB8oAgBrSwRAILUCIB8oAgAgBSgCAGo2AgALIHkgBSgCADYCACB4KAIAIDIoAgBBA3RqICooAgAgHygCAGtBAmo2AgAgeCgCACAyKAIAQQN0aiAFKAIANgIEIDIgMigCAEEBajYCACAFKAIAQYAgSw0BIBYoAgAgBSgCAGogSCgCAEYNAQsgHygCACEHILEBKAIAIAUoAgBqLQAAIBYoAgAgBSgCAGotAABIBEAg5gEoAgAgBzYCACCwAiAFKAIANgIAIB8oAgAggQMoAgBNDQMg5gEg6AEoAgBBBGo2AgAgHyDoASgCACgCBDYCAAUg5wEoAgAgBzYCACCxAiAFKAIANgIAIB8oAgAggQMoAgBNDQQg5wEg6AEoAgA2AgAgHyDoASgCACgCADYCAAsMAQsLDAILIOYBINMDNgIADAELIOcBINMDNgIACyDnASgCAEEANgIAIOYBKAIAQQA2AgAgRygCACC1AigCAEEIazYCGCCsAiAyKAIANgIACyCyASCsAigCADYCAAwECyB9KAIAIQcgfigCACEIILMBKAIAIQkgtAEoAgAhCiDrASgCACEMIOwBKAIAIRAg7QEoAgAhESDuASgCACESIEEgWygCADYCACCaASAHNgIAIBMgCDYCACBCIAk2AgAgjwIgCjYCACC3AyAMNgIAIJACIBA2AgAgaSARNgIAILgDIBI2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CyAHQUBrIR8gB0E8aiEgIAdBOGohFSAHQTRqIRYgB0EwaiEdIAdBLGohCiAHQShqISEgB0EkaiEiIAdBIGohDSAHQRxqIQ4gB0EYaiEXIAdBFGohIyAHQRBqIQYgB0EMaiEPIAdBCGohASAHQQRqIQggACATKAIANgIAA0AgACgCAARAIB8gBCgCACAAKAIAIAIoAgBxQQN0akEEajYCACAgIB8oAgAoAgA2AgAgCSgCACALKAIAIAAoAgAgECgCACAFKAIAIBwoAgAgHigCABCIAyAAICAoAgA2AgAgBSAFKAIAQQFqNgIADAELCyAVQQA2AgAgFkEANgIAIB0gCSgCACgCCDYCACAKIAkoAgAoAgw2AgAgISAdKAIAIAooAgBqNgIAICIgESgCACAKKAIAajYCACANIAQoAgAgAygCACACKAIAcUEDdGo2AgAgDiAEKAIAIAMoAgAgAigCAHFBA3RqQQRqNgIAIBcgAygCAEEJajYCACAGQQA2AgAgACAZKAIAIBooAgBBAnRqKAIANgIAIBkoAgAgGigCAEECdGogAygCADYCAAJAAkACQANAAkAgEiASKAIAIgVBf2o2AgAgBUUNACAAKAIAIBsoAgBNDQAgDyAEKAIAIAAoAgAgAigCAHFBA3RqNgIAIBUoAgAhBSAWKAIAIQsgASAVKAIAIBYoAgBJBH8gBQUgCws2AgACQAJAIB4oAgBFDQAgACgCACABKAIAaiAKKAIATw0AIAggHSgCACAAKAIAajYCACAMKAIAIAEoAgBqIAgoAgAgASgCAGogECgCACAhKAIAICIoAgAQvQIhBSABIAEoAgAgBWo2AgAgACgCACABKAIAaiAKKAIATwRAIAggESgCACAAKAIAajYCAAsMAQsgCCARKAIAIAAoAgBqNgIAIAwoAgAgASgCAGogCCgCACABKAIAaiAQKAIAELwCIQUgASABKAIAIAVqNgIACyABKAIAIAYoAgBLBEAgASgCACAXKAIAIAAoAgBrSwRAIBcgACgCACABKAIAajYCAAsgASgCACAGKAIAa0ECdCADKAIAIAAoAgBrQQFqENQBIBgoAgAoAgBBAWoQ1AFrSgRAIAYgASgCADYCACAYKAIAIAMoAgBBAmogACgCAGs2AgALIAwoAgAgASgCAGogECgCAEYNAQsgACgCACEFIAgoAgAg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ACEAIAUkBSAADwsgAigCAEUEQCAIKAIAQajqvmkQigIgAUEENgIACyAPLAAAIQIgBCgCACEHIAEgASgCACIIQQFqNgIAIAcgCGogAjoAACAKKAIARQRAIA4sAAAhAiAEKAIAIQcgASABKAIAIghBAWo2AgAgByAIaiACOgAACwJAAkACQAJAIAsoAgBBAWsOAwECAAMLIAQoAgAgASgCAGogCSgCABCKAiABIAEoAgBBBGo2AgAMAgsgBCgCACABKAIAaiAJKAIAOgAAIAEgASgCAEEBajYCAAwBCyAEKAIAIAEoAgBqIAkoAgBB//8DcRCaAiABIAEoAgBBAmo2AgALAkACQAJAAkACQCAMKAIAQQFrDgMBAgADCyAEKAIAIAEoAgBqIAApAwAQiwIgASABKAIAQQhqNgIADAMLIAQoAgAgASgCAGogACkDAEKAAn2nQf//A3EQmgIgASABKAIAQQJqNgIADAILIAQoAgAgASgCAGogACkDAKcQigIgASABKAIAQQRqNgIADAELIAooAgAEQCAAKQMAp0H/AXEhACAEKAIAIQIgASABKAIAIgRBAWo2AgAgAiAEaiAAOgAACwsgBiABKAIANgIAIAYoAgAhACAFJAUgAAuQCAEPfyMFIQYjBUHwAGokBSAGQcgAaiIHIAA2AgAgBkHEAGoiCiABNgIAIAZBQGsiDSACNgIAIAZBPGoiASADNgIAIAZBOGoiACAENgIAIAZBNGoiECAFNgIAIAZBMGoiAiAHKAIAKALoATYCACAGQSxqIgsgACgCADYCACAGQShqIgggASgCADYCACAGQSRqIg8gCigCADYCACAGQSBqIgQgDygCADYCACAGQRxqIhFBASAHKAIAKAJ4dDYCACAHKAIAKAKYAUEARyAAKAIAQQBHcQRAIAcoAgBBiAJqIAEoAgAgACgCABDrARoLIAZB0ABqIQogBkHMAGohBSAGQRhqIQEgBkEUaiESIAZBEGohEyAGQQxqIQ4gBkEIaiEDIAZBBGohFCAGIQACQAJAAkACQANAIAsoAgBFDQQgASAHKAIAQeADajYCACASIBAoAgAgAigCACALKAIAT3E2AgAgDSgCAEEGSQ0BIAsoAgAgAigCAEkEQCACIAsoAgA2AgALIAgoAgAgAigCAGohDCAKIAEoAgAiCSkCADcCACAKIAkpAgg3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KAIAIgYpAgA3AgAgAiAGKQIINwIIIAIgBikCEDcCECAhIAcgCiACEKkDNgIAICJBADYCACAoIAApAwAgDSgCABCqAzYCACADICEoAgA2AgADQCADKAIAICEoAgAgLygCAEEDdGpJBEACQCADKAIAKAIEICgoAgBGBEAgAygCACgCACAmKAIASwRAIBQoAgAEQCAlKAIAIQYgDygCACEHICkgAygCACgCACAOKAIASQR/IAYFIAcLNgIAICMgKSgCACADKAIAKAIAajYCACAnKAIAIQYgECgCACEHICogAygCACgCACAOKAIASQR/IAYFIAcLNgIAIDIoAgAhBiAZKAIAIQcgKyADKAIAKAIAIA4oAgBJBH8gBgUgBws2AgAgCyABKAIAICMoAgAgECgCACAqKAIAIBkoAgAQvQI2AgAgCygCACAMKAIASQ0DIBYgASgCACARKAIAICMoAgAgKygCABCrAzYCACAcIAsoAgAgFigCAGo2AgAFICQgDygCACADKAIAKAIAajYCACALIAEoAgAgJCgCACAQKAIAELwCNgIAIAsoAgAgDCgCAEkNAyAWIAEoAgAgESgCACAkKAIAIBkoAgAQqwM2AgAgHCALKAIAIBYoAgBqNgIACyAcKAIAICIoAgBLBEAgIiAcKAIANgIAICAgCygCADYCACAaIBYoAgA2AgAgGyADKAIANgIACwsLCyADIAMoAgBBCGo2AgAMAQsLIBsoAgBFBEAgCCgCACEHIAApAwAhNSANKAIAIQogHygCACEXIAIgCSgCACIGKQIANwIAIAIgBikCCDcCCCACIAYpAhA3AhAgByA1IAogFyACEKwDIAEgASgCAEEBajYCAAwBCyASICAoAgAgGigCAGo2AgAgASABKAIAIBooAgBrNgIAICwgGygCACgCADYCACAtIB8oAgAgLCgCAGs2AgAgHSATKAIAKAIAIBMoAgAoAghBDGxqNgIAIBMoAgAoAgggEygCACgCDEYNASAdKAIAIAEoAgAgESgCAGs2AgQgHSgCACASKAIANgIIIB0oAgAgLSgCADYCACATKAIAQQhqIgYgBigCAEEBajYCACAIKAIAIQcgACkDACE1IA0oAgAhCiAEKAIAIA8oAgBrIRcgAiAJKAIAIgYpAgA3AgAgAiAGKQIINwIIIAIgBikCEDcCECAHIDUgCiAXIAIQrAMgASgCACASKAIAaiAeKAIATQRAIAgoAgAhByAAKQMAITUgBCgCACEKIAEoAgAgEigCAGohFyAPKAIAITMgDSgCACE0IAIgCSgCACIGKQIANwIAIAIgBikCCDcCCCACIAYpAhA3AhAgACAHIDUgCiAXIDMgNCACEK0DNwMAIAQgASgCACASKAIAakF/ajYCAAsgASABKAIAIBIoAgBqNgIAIBEgASgCADYCAAwACwALIBhBun82AgAgGCgCACEAIAUkBSAADwsgGCAQKAIAIBEoAgBrNgIAIBgoAgAhACAFJAUgAAuKAQEDfyMFIQUjBUEgaiQFIAVBCGoiBCAANwMAIAVBEWoiBiABOgAAIAVBEGoiASACOgAAIAUgAzcDACAEIAQpAwAgBi0AAEEKaqwgBSkDAH59NwMAIAQgBCkDAELjyJW9y5vvjU9+NwMAIAQgBCkDACABLQAAQQpqrHw3AwAgBCkDACEAIAUkBSAAC5oBAgN/AX4jBSECIwVBIGokBSACQRBqIgMgADYCACACQQxqIgQgATYCACACIgBCADcDACAAQQhqIgFBADYCAANAIAApAwAhBSABKAIAIAQoAgBJBEAgACAFQuPIlb3Lm++NT343AwAgACAAKQMAIAMoAgAgASgCAGotAABBCmqsfDcDACABIAEoAgBBAWo2AgAMAQsLIAIkBSAFC6ABAQN/IwUhAyMFQSBqJAUgA0EQaiEEIAMgADcDACADQQxqIgUgATYCACADQQhqIgEgAjYCACADKQMAIQBBICAFKAIAayABKAIASQR/IAQgAEEBIAEoAgB0QQFrrYM+AgAgBCgCACEBIAMkBSABBSAEIABBICAFKAIAayABKAIAa62IQQEgASgCAHRBAWutgz4CACAEKAIAIQEgAyQFIAELC00BA38jBSECIwVBEGokBSACIgQgADcDACACQQhqIgMgATYCACADKAIARQRAIAIkBUEADwsgBCkDAEHAACADKAIAa62IpyEBIAIkBSABC0EBAn8jBSEDIwVBEGokBSADQQRqIgQgADYCACADIAE2AgAgBCgCACgCFCADKAIAIAIoAgh0QQN0aiEAIAMkBSAAC0EBAn8jBSECIwVBEGokBSACIAA3AwAgAkEIaiIDIAE2AgAgAikDAEEgIAMoAgBrrYhC/////w+DpyEBIAIkBSAB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CyAANgIAIAlBIGoiDCABNgIAIAlBHGoiASACNgIAIAlBGGoiDSADNgIAIAlBFGoiAiAENgIAIAkiACAGNwMAIAlBEGoiAyAHNgIAIAIoAgAEQCACKAIAKAIIQQBLBEAgCygCAEEMaiIBIAUpAgA3AgAgASAFKQIINwIIIAEgBSkCEDcCECABIAUpAhg3AhggASAFKQIgNwIgIAEgBSkCKDcCKCABIAUpAjA3AjAgASAFKQI4NwI4IAFBQGsgBUFAaykCADcCACABIAUpAkg3AkggASAFKQJQNwJQIAEgBSkCWDcCWCABIAUpAmA3AmAgCygCACEBIAIoAgAhAiAFKAIEIQQgACkDACEGIAMoAgAhACAIIAVBIGoiAykCADcCACAIIAMoAgg2AgggCiABIAIgBCAIIAYgABC2AzYCACAKKAIAIQAgCSQFIAAPCwsgCygCACECIAApAwAhBiADKAIAIQMgCCAFKQIANwIAIAggBSkCCDcCCCAIIAUpAhA3AhAgCCAFKQIYNwIYIAggBSkCIDcCICAIIAUpAig3AiggCCAFKQIwNwIwIAggBSkCODcCOCAIQUBrIAVBQGspAgA3AgAgCCAFKQJINwJIIAggBSkCUDcCUCAIIAUpAlg3AlggCCAFKQJgNwJgIAlBDGoiACACIAggBkEAIAMQzwI2AgAgACgCABDNAQRAIAogACgCADYCACAKKAIAIQAgCSQFIAAPCyAJQQhqIgAgCygCACgC2AMgCygCAEHgA2ogBSAMKAIAIAEoAgAgDSgCACALKAIAKALMBBCxAjYCACAAKAIAEMwBQQBHIQEgACgCACEAIAEEfyAKIAA2AgAgCigCACEAIAkkBSAABSALKAIAIAA2AtwBIApBADYCACAKKAIAIQAgCSQFIAALC80GAQV/IwUhBiMFQYACaiQFIAZBlAFqIgcgADYCACAGQZABaiIIIAE2AgAgBkGMAWoiCSACNgIAIAYiACAENwMAIABBiAFqIgogBTYCACAAQSBqIgEgBygCAEEMaiICKQIANwIAIAEgAikCCDcCCCABIAIpAhA3AhAgASACKQIYNwIYIAEgAikCIDcCICABIAIpAig3AiggASACKQIwNwIwIAEgAikCODcCOCABQUBrIAJBQGspAgA3AgAgASACKQJINwJIIAEgAikCUDcCUCABIAIpAlg3AlggASACKQJgNwJgIAFBBGoiAiAIKAIAQfAkaiIFKQIANwIAIAIgBSkCCDcCCCACIAUpAhA3AhAgAiAFKAIYNgIYIAkoAgAEQCABIAkoAgA2AgQLIAFBIGoiAiADKQIANwIAIAIgAygCCDYCCCAHKAIAIQIgACkDACEEIAooAgAhAyAGQZgBaiIAIAEpAgA3AgAgACABKQIINwIIIAAgASkCEDcCECAAIAEpAhg3AhggACABKQIgNwIgIAAgASkCKDcCKCAAIAEpAjA3AjAgACABKQI4NwI4IABBQGsgAUFAaykCADcCACAAIAEpAkg3AkggACABKQJQNwJQIAAgASkCWDcCWCAAIAEpAmA3AmAgAiAAIARBASADEM8CGiAGQRxqIgEgCCgCAEGIJWooAgBBAUYEf0EABUEBIAgoAgBB9CRqKAIAdAsiADYCACAGQRhqIgBBASAIKAIAQfgkaigCAHQ2AgAgBkEUaiICIAEoAgAgACgCAGpBAnQ2AgAgBygCACgChAQgCCgCACgCOCACKAIAEPQHGiAGQRBqIgBBASAHKAIAKAKABHQ2AgAgBygCACgCiARBACAAKAIAQQJ0EPYHGiAGQQxqIgAgCCgCAEEUajYCACAGQQhqIgEgBygCAEHgA2o2AgAgASgCACICIAAoAgAiAykCADcCACACIAMpAgg3AgggAiADKAIQNgIQIAEoAgAgACgCACgCGDYCGCABKAIAIAAoAgAoAhw2AhwgASgCACAAKAIAKAIUNgIUIAcoAgAgCCgCAEGYJWooAgA2AtwBIAcoAgAoAtgDIAgoAgBBgAFqQfAjEPQHGiAGJAVBAAv2AgECfyMFIQMjBUHwAGokBSADIAEpAgA3AgAgAyABKQIINwIIIAMgASkCEDcCECADIAEpAhg3AhggAyABKQIgNwIgIAMgASkCKDcCKCADIAEpAjA3AjAgAyABKQI4NwI4IANBQGsgAUFAaykCADcCACADIAEpAkg3AkggAyABKQJQNwJQIAMgASkCWDcCWCADIAEpAmA3AmAgA0EEaiIBIAIpAgA3AgAgASACKQIINwIIIAEgAikCEDcCECABIAIoAhg2AhggA0EgaiIEIAJBHGoiASkCADcCACAEIAEoAgg2AgggA0EDNgIsIAAgAykCADcCACAAIAMpAgg3AgggACADKQIQNwIQIAAgAykCGDcCGCAAIAMpAiA3AiAgACADKQIoNwIoIAAgAykCMDcCMCAAIAMpAjg3AjggAEFAayADQUBrKQIANwIAIAAgAykCSDcCSCAAIAMpAlA3AlAgACADKQJYNwJYIAAgAykCYDcCYCADJAUL1wEBAn8jBSEEIwVB4ABqJAUgBEHUAGoiBSABNgIAIAQgAjcDACAEQdAAaiIBIAM2AgAgBEEIaiIDIAUoAgAgBCkDACABKAIAEKgCIARBKGoiAUIANwIAIAFCADcCCCABQgA3AhAgAUIANwIYIAFCADcCICABIAMpAgA3AgAgASADKQIINwIIIAEgAykCEDcCECABIAMoAhg2AhggAUEBNgIcIAAgASkCADcCACAAIAEpAgg3AgggACABKQIQNwIQIAAgASkCGDcCGCAAIAEpAiA3AiAgBCQFC78CAQV/IwUhBSMFQSBqJAUgBUEcaiEGIAVBGGoiByAANgIAIAVBFGoiCCABNgIAIAVBEGoiCSACNgIAIAVBDGoiASADNgIAIAVBCGoiAiAENgIAIAUiACAHKAIAIAgoAgAgCSgCACABKAIAIAIoAgBBAUEBEI8DNgIAIAUoAgAQzAEEQCAGIAAoAgA2AgAgBigCACEAIAUkBSAADwsgBUEEaiIBIAcoAgAgCCgCACAAKAIAaiAJKAIAIAAoAgBrELoDNgIAIAEoAgAQzAEEQCAGIAEoAgA2AgAgBigCACEAIAUkBSAADwsgBygCACgClAEEQCAHKAIAKQPwASAHKAIAKQP4AUIBfFIEQCAGQbh/NgIAIAYoAgAhACAFJAUgAA8LCyAGIAAoAgAgASgCAGo2AgAgBigCACEAIAUkBSAAC5UFAQp/IwUhAyMFQZABaiQFIANBIGohBCADQRxqIgYgADYCACADQRhqIgggATYCACADQRRqIgcgAjYCACADQRBqIgogCCgCADYCACADQQxqIgUgCigCADYCACADQQhqIglBADYCACAGKAIAKAIARQRAIARBRDYCACAEKAIAIQAgAyQFIAAPCyADQShqIQEgA0EEaiELIAMhAAJAIAYoAgAoAgBBAUYEQCAIKAIAIQggBygCACEMIAEgBigCAEH0AGoiAikCADcCACABIAIpAgg3AgggASACKQIQNwIQIAEgAikCGDcCGCABIAIpAiA3AiAgASACKQIoNwIoIAEg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AgAiBkEBajYCACAGIAQ6AAAgGSgCACEEIBooAgAhBiBHIAwoAgA2AgAgSCAENgIAIGEgBjYCACBJIEcoAgAgYSgCABDgATYCACBiIEgoAgAgSSgCAEEBdGosAAA6AAAgRygCACBIKAIAIEkoAgBBAXRqLQABEN4BIGIsAAAhBCADIAMoAgAiBkEBajYCACAGIAQ6AAAMAQsLAkADQCAMKAIAENkBRSADKAIAIB4oAgBJcUUNASAZKAIAIQQgGigCACEGIEQgDCgCADYCACBFIAQ2AgAgXyAGNgIAIEYgRCgCACBfKAIAEOABNgIAIGAgRSgCACBGKAIAQQF0aiwAADoAACBEKAIAIEUoAgAgRigCAEEBdGotAAEQ3gEgYCwAACEEIAMgAygCACIGQQFqNgIAIAYgBDoAAAwACwALA0AgAygCACAeKAIASQRAIBkoAgAhBCAaKAIAIQYgJSAMKAIANgIAIEIgBDYCACBdIAY2AgAgQyAlKAIAIF0oAgAQ4AE2AgAgXiBCKAIAIEMoAgBBAXRqLAAAOgAAICUoAgAgQigCACBDKAIAQQF0ai0AARDeASBeLAAAIQQgAyADKAIAIgZBAWo2AgAgBiAEOgAADAELCyBUKAIAIQMgACgCACEAIAEoAgAhASACICgoAgA2AgAgCyAYNgIAIB0gAzYCACAOIAA2AgAgDyABNgIAIHYgAigCADYCAANAIAsoAgAQ2QFFIAIoAgAgHSgCAEF9aklxBEAgDigCACEAIA8oAgAhASAiIAsoAgA2AgAgIyAANgIAIFsgATYCACAkICIoAgAgWygCABDgATYCACBcICMoAgAgJCgCAEEBdGosAAA6AAAgIigCACAjKAIAICQoAgBBAXRqLQABEN4BIFwsAAAhACACIAIoAgAiAUEBajYCACABIAA6AAAgDigCACEAIA8oAgAhASBBIAsoAgA2AgAgICAANgIAIFkgATYCACAhIEEoAgAgWSgCABDgATYCACBaICAoAgAgISgCAEEBdGosAAA6AAAgQSgCACAgKAIAICEoAgBBAXRqLQABEN4BIFosAAAhACACIAIoAgAiAUEBajYCACABIAA6AAAMAQsLAkADQCALKAIAENkBRSACKAIAIB0oAgBJcUUNASAOKAIAIQAgDygCACEBID4gCygCADYCACA/IAA2AgAgVyABNgIA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BzYCACAlICEoAgAgOigCABDgATYCACA5KAIAIB0oAgAgJSgCAEECdGouAAA7AAAgISgCACAdKAIAICUoAgBBAnRqLQACEN4BIAMgAygCACAdKAIAICUoAgBBAnRqLQADajYCACABKAIAIQggAigCACEHIDcgBCgCADYCACAcICo2AgAgFCAINgIAIDggBzYCACAXIBwoAgAgOCgCABDgATYCACA3KAIAIBQoAgAgFygCAEECdGouAAA7AAAgHCgCACAUKAIAIBcoAgBBAnRqLQACEN4BIAQgBCgCACAUKAIAIBcoAgBBAnRqLQADajYCACABKAIAIQggAigCACEHIDUgECgCADYCACAbICs2AgAgICAINgIAIDYgBzYCACAWIBsoAgAgNigCABDgATYCACA1KAIAICAoAgAgFigCAEECdGouAAA7AAAgGygCACAgKAIAIBYoAgBBAnRqLQACEN4BIBAgECgCACAgKAIAIBYoAgBBAnRqLQADajYCACABKAIAIQggAigCACEHIDMgJCgCADYCACAuICw2AgAgGSAINgIAIDQgBzYCACAaIC4oAgAgNCgCABDgATYCACAzKAIAIBkoAgAgGigCAEECdGouAAA7AAAgLigCACAZKAIAIBooAgBBAnRqLQACEN4BICQgJCgCACAZKAIAIBooAgBBAnRqLQADajYCACABKAIAIQggAigCACEHIDEgAygCADYCACAVICk2AgAgDiAINgIAIDIgBzYCACAPIBUoAgAgMigCABDgATYCACAxKAIAIA4oAgAgDygCAEECdGouAAA7AAAgFSgCACAOKAIAIA8oAgBBAnRqLQACEN4BIAMgAygCACAOKAIAIA8oAgBBAnRqLQADajYCACABKAIAIQggAigCACEHICggBCgCADYCACAeICo2AgAgDSAINgIAIC0gBzYCACALIB4oAgAgLSgCABDgATYCACAoKAIAIA0oAgAgCygCAEECdGouAAA7AAAgHigCACANKAIAIAsoAgBBAnRqLQACEN4BIAQgBCgCACANKAIAIAsoAgBBAnRqLQADajYCACABKAIAIQggAigCACEHICYgECgCADYCACASICs2AgAgDCAINgIAICcgBzYCACAKIBIoAgAgJygCABDgATYCACAmKAIAIAwoAgAgCigCAEECdGouAAA7AAAgEigCACAM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IQAgASQFIAALegEDfyMFIQIjBUEQaiQFIAJBBGohAyACIgEgADYCACABKAIABH8gASgCACgCABDyAxogASgCACgCMBCHBiABKAIAKAI8EIcGIAEoAgAQhwYgA0EANgIAIAMoAgAhACACJAUgAAUgA0EANgIAIAMoAgAhACACJAUgAAsLegEDfyMFIQIjBUEQaiQFIAJBBGohAyACIgEgADYCACABKAIABH8gASgCACgCABDyAxogASgCACgCHBCHBiABKAIAKAIoEIcGIAEoAgAQhwYgA0EANgIAIAMoAgAhACACJAUgAAUgA0EANgIAIAMoAgAhACACJAUgAAsL1gEBA38jBSECIwVBEGokBSACQQRqIQMgAiIBIAA2AgAgASgCAEUEQCADQQA2AgAgAygCACEAIAIkBSAADwsgASgCACgCABDxAxogASgCACgCJARAIAEoAgAoAmQgASgCACgCJCABKAIAKAJgQR9xQeQCahECAAsgASgCACgCMARAIAEoAgAoAmQgASgCACgCMCABKAIAKAJgQR9xQeQCahECAAsgASgCACgCZCABKAIAIAEoAgAoAmBBH3FB5AJqEQIAIANBADYCACADKAIAIQAgAiQFIAALeQEDfyMFIQEjBUEQaiQFIAFBBGohAiABIgMgADYCACABKAIABH8gAygCAEHEqQFqKAIAIAMoAgAgAygCAEHAqQFqKAIAQR9xQeQCahECACACQQA2AgAgAigCACEAIAEkBSAABSACQQA2AgAgAigCACEAIAEkBSAACwskAQF/IwUhASMFQRBqJAUgASAANgIAIAEoAgAQhwYgASQFQQALegEDfyMFIQIjBUEQaiQFIAJBBGohAyACIgEgADYCACABKAIABH8gASgCACgCABDyAxogASgCACgCKBCHBiABKAIAKAI0EIcGIAEoAgAQhwYgA0EANgIAIAMoAgAhACACJAUgAAUgA0EANgIAIAMoAgAhACACJAUgAAsLrgEBBH8jBSEDIwVBEGokBSADQQxqIQIgAyEEIANBCGoiBSAANgIAIANBBGoiACABNgIAAkAgACgCAEEESQRAIAJBADYCAAUgBCAFKAIAEM8BNgIAAkACQAJAAkACQCAEKAIAQaTqvmlrDgQAAQIDBAsgAkEENgIADAULIAJBBTYCAAwECyACQQY2AgAMAwsgAkEHNgIADAILIAJBADYCAAsLIAIoAgAhACADJAUgAAs5AQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAMoAgAgAigCAEEAEPYDIQAgAiQFIAALpgIBBH8jBSEDIwVBMGokBSADQRxqIQQgA0EYaiIFIAA2AgAgA0EUaiIAIAE2AgAgA0EQaiIGIAI2AgAgA0EMaiIBIAYoAgAQ9wM2AgAgACgCACABKAIASQRAIARBuH82AgAgBCgCACEAIAMkBSAADwsgA0EgaiICIAUoAgAgASgCAEEBa2osAAA6AAAgA0EIaiIGIAItAABBA3E2AgAgA0EEaiIFIAItAABBBXVBAXE2AgAgAyIAIAItAABBBnU2AgAgBCABKAIAIgEgBSgCACICQQBHQQFzaiAGKAIAQQJ0QfAiaigCACIGaiADKAIAQQJ0QYAjaigCAGogBSgCAAR/IAAoAgBBAEdBAXMFQQALIgBBAXFqNgIAIAQoAgAhACADJAUgAAs/AQJ/IwUhASMFQRBqJAUgAUEEaiICIAA2AgAgASIAIAIoAgBBAUYEf0EBBUEFCzYCACAAKAIAIQAgASQFIAALSgECfyMFIQMjBUEQaiQFIANBCGoiBCAANgIAIANBBGoiACABNgIAIAMgAjYCACAEKAIAIAAoAgAgAygCAEEAEPkDIQAgAyQFIAALiwkCDH8BfiMFIQQjBUHQAGokBSAEQcgAaiEFIARBxABqIgcgADYCACAEQUBrIgAgATYCACAEQTxqIgEgAjYCACAEQThqIgYgAzYCACAEQTRqIgIgACgCADYCACAEQTBqIgMgBigCABD3AzYCACABKAIAIAMoAgBJBEAgBSADKAIANgIAIAUoAgAhACAEJAUgAA8LIAYoAgBBAUcEQCAAKAIAEM8BQajqvmlHBEAgACgCABDPAUFwcUHQ1LTCAUcEQCAFQXY2AgAgBSgCACEAIAQkBSAADwsgASgCAEEISQRAIAVBCDYCACAFKAIAIQAgBCQFIAAPBSAHKAIAIgFCADcDACABQgA3AwggAUIANwMQIAFCADcDGCABQgA3AyAgACgCAEEEahDPAa0hECAHKAIAIBA3AwAgBygCAEEBNgIUIAVBADYCACAFKAIAIQAgBCQFIAAPCwALCyAEQSxqIgggACgCACABKAIAIAYoAgAQ9gM2AgAgCCgCACEAIAEoAgAgCCgCAEkEQCAFIAA2AgAgBSgCACEAIAQkBSAADwsgBygCACAANgIYIARBzQBqIgYgAigCACADKAIAQQFraiwAADoAACAEQShqIgEgAygCADYCACAEQSRqIgsgBi0AAEEDcTYCACAEQSBqIgwgBi0AAEECdUEBcTYCACAEQRxqIgkgBi0AAEEFdUEBcTYCACAEQRhqIg0gBi0AAEEGdTYCACAEQQhqIgNCADcDACAEQRRqIghBADYCACAEIgBCfzcDACAGLQAAQQhxBEAgBUFyNgIAIAUoAgAhACAEJAUgAA8LIARBzABqIQYgBEEQaiEKAkAgCSgCAEUEQCACKAIAIQ4gASABKAIAIg9BAWo2AgAgBiAOIA9qLAAAOgAAIAogBi0AAEEDdUEKajYCACAKKAIAQR5NBEAgA0IBIAooAgCthjcDACADIAMpAwAgAykDAEIDiCAGLQAAQQdxrH58NwMADAILIAVBcDYCACAFKAIAIQAgBCQFIAAPCwsCQAJAAkACQCALKAIAQQFrDgMBAgADCyAIIAIoAgAgASgCAGoQzwE2AgAgASABKAIAQQRqNgIADAILIAggAigCACABKAIAai0AADYCACABIAEoAgBBAWo2AgAMAQsgCCACKAIAIAEoAgBqENgDQf//A3E2AgAgASABKAIAQQJqNgIACwJAAkACQAJAAkAgDSgCAEEBaw4DAQIAAwsgACACKAIAIAEoAgBqEOIBNwMADAMLIAAgAigCACABKAIAahDYA0H//wNxQYACaqw3AwAMAgsgACACKAIAIAEoAgBqEM8BrTcDAAwBCyAJKAIABEAgACACKAIAIAEoAgBqLQAArTcDAAsLIAkoAgAEQCADIAApAwA3AwALIAcoAgBBADYCFCAHKAIAIAApAwA3AwAgBygCACADKQMANwMIIAMpAwAhECAHKAIAIAMpAwBCgIAIVAR+IBAFQoCACAs+AhAgBygCACAIKAIANgIcIAcoAgAgDCgCADYCICAFQQA2AgAgBSgCACEAIAQkBSAAC8sBAgZ/AX4jBSECIwVBQGskBSACQTBqIQMgAkEoaiEFIAIhBiACQTxqIgQgADYCACACQThqIgcgATYCACAEKAIAIAcoAgAQ9ANBAEchACAEKAIAIQQgBygCACEBAkAgAARAIAUgBCABEPsDNwMAIAUp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AiQFIAALxQEBA38jBSECIwVBEGokBSACQQxqIQMgAkEIaiIEIAA2AgAgAkEEaiIAIAE2AgAgAiAEKAIAIAAoAgAQ9AM2AgACQAJAAkACQAJAAkAgAigCAEEEaw4EAAECAwQLIAMgBCgCACAAKAIAEIkENgIADAQLIAMgBCgCACAAKAIAEIoENgIADAMLIAMgBCgCACAAKAIAEIsENgIADAILIAMgBCgCACAAKAIAEIwENgIADAELIANBdjYCAAsgAygCACEAIAIkBSAAC4kCAQN/IwUhAyMFQSBqJAUgA0EUaiEEIANBEGoiBSAANgIAIANBDGoiACABNgIAIANBCGoiASACNgIAIAAoAgBBA0kEQCAEQbh/NgIAIAQoAgAhACADJAUgAA8LIANBBGoiAiAFKAIAEIgENgIAIAMiACACKAIAQQN2NgIAIAEoAgAgAigCAEEBcTYCBCABKAIAIAIoAgBBAXZBA3E2AgAgASgCACADKAIANgIIIAEoAgAoAgBBAUYEQCAEQQE2AgAgBCgCACEAIAMkBSAADwsgASgCACgCAEEDRgR/IARBbDYCACAEKAIAIQAgAyQFIAAFIAQgACgCADYCACAEKAIAIQAgAyQFIAALCzcBAX8jBSEBIwVBEGokBSABIAA2AgAgASgCABDYA0H//wNxIAEoAgAtAAJBEHRqIQAgASQFIAALNwECfyMFIQIjBUEQaiQFIAJBBGoiAyAANgIAIAIgATYCACADKAIAIAIoAgAQjwQhACACJAUgAAv/AgEFfyMFIQIjBUEwaiQFIAJBIGohAyACQRxqIgUgADYCACACQRhqIgAgATYCACACQRRqIgEgBSgCADYCACACQRBqIgQgACgCADYCACAAKAIAQQVJBEAgA0G4fzYCACADKAIAIQAgAiQFIAAPCyAFKAIAEM8BQaXqvmlHBEAgA0F2NgIAIAMoAgAhACACJAUgAA8LIAJBCGohBiACIQAgASABKAIAQQVqNgIAIAQgBCgCAEEFazYCAAJAAkACQANAIAAgASgCACAEKAIAIAYQjgQ2AgAgACgCABDMAQ0BIAEgASgCAEEDajYCACAEIAQoAgBBA2s2AgAgACgCACAEKAIASw0CIAAoAgBFDQMgASABKAIAIAAoAgBqNgIAIAQgBCgCACAAKAIAazYCAAwACwALIAMgACgCADYC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IBEoAgAgLigCAGtLBEAgEkFsNgIADAQLIAkgGygCACAJKAIAIBooAgBrajYCACAJKAIAIAsoAgRqIBsoAgBNBEAgESgCACAJKAIAIAsoAgQQ9QcaIBIgHCgCADYCAAwECyAkIBsoAgAgCSgCAGs2AgAgESgCACAJKAIAICQoAgAQ9QcaIAogESgCACAkKAIAajYCACALQQRqIgAgACgCACAkKAIAazYCACAJIBooAgA2AgAgCigCACAUKAIATQRAIAsoAgRBA08NAgsgFkEANgIAA0AgFigCACALKAIESQRAIAooAgAgFigCAGogCSgCACAWKAIAaiwAADoAACAWIBYoAgBBAWo2AgAMAQsLIBIgHCgCADYCAAwDCwsgCygCCEEISQRAIDogCygCCEECdEGQPWooAgA2AgAgCigCACAJKAIALAAAOgAAIAooAgAgCSgCACwAAToAASAKKAIAIAkoAgAsAAI6AAIgCigCACAJKAIALAADOgADIAkgCSgCACALKAIIQQJ0QbA9aigCAGo2AgAgCigCAEEEaiAJKAIAEJ4EIAkgCSgCACA6KAIAazYCAAUgCigCACAJKAIAEPwCCyAKIAooAgBBCGo2AgAgCSAJKAIAQQhqNgIAIAooAgAhAAJAICMoAgAgGSgCAEFzaksEQCAAIBQoAgBJBEAgCigCACAJKAIAIBQoAgAgCigCAGsQ+wIgCSAJKAIAIBQoAgAgCigCAGtqNgIAIAogFCgCADYCAAsDQCAKKAIAICMoAgBPDQIgCSAJKAIAIgBBAWo2AgAgACwAACEBIAogCigCACIAQQFqNgIAIAAgAToAAAwACwAFIAAgCSgCACALKAIEQQhrEPsCCwsgEiAcKAIANgIACwsgNSASKAIANgIAIDUoAgAQzQFBAEchACA1KAIAIQEgAA0CIBMgEygCACABajYCAAwBCwsMAQsgECABNgIAIBAoAgAhACAHJAUgAA8LIAIEQCAQQWw2AgAgECgCACEAIAckBSAADwsgGEEANgIAA0AgGCgCAEEDTw0CIA4oAgBBrOABaiAYKAIAQQJ0aiANQSxqIBgoAgBBAnRqKAIANgIAIBggGCgCAEEBajYCAAwACwALCyApIEgoAgAgKygCAGs2AgAgKSgCACBHKAIAIBMoAgBrSwR/IBBBun82AgAgECgCACEAIAckBSAABSATKAIAICsoAgAgKSgCABD0BxogEyATKAIAICkoAgBqNgIAIBAgEygCACA5KAIAazYCACAQKAIAIQAgByQFIAALC4UBAQJ/IwUhAyMFQSBqJAUgA0EQaiIEIAA2AgAgA0EMaiIAIAE2AgAgA0EIaiIBIAI2AgAgA0EEaiICIAEoAgA2AgAgAyACKAIANgIAIAAoAgAgAygCACgCBBDcASECIAQoAgAgAjYCACAAKAIAENkBGiAEKAIAIAEoAgBBCGo2AgQgAyQFC6kGAQh/IwUhCCMFQUBrJAUgCEE4aiEKIAhBNGoiCSAANgIAIAhBMGoiCyABNgIAIAhBLGoiDSADNgIAIAhBKGoiDCAENgIAIAhBJGoiBCAFNgIAIAhBIGoiDiAGNgIAIAhBHGoiBSAHNgIAIAhBGGoiAyAJKAIAIAIoAgBqNgIAIAhBFGoiBiACKAIAIAIoAgRqNgIAIAhBEGoiByAJKAIAIAYoAgBqNgIAIAhBDGoiACALKAIAQXhqNgIAIAhBCGoiDyANKAIAKAIAIAIoAgBqNgIAIAhBBGoiASADKAIAIAIoAghrNgIAIAcoAgAgCygCAEsEQCAKQbp/NgIAIAooAgAhACAIJAUgAA8LIA8oAgAgDCgCAEsEQCAKQWw2AgAgCigCACEAIAgkBSAADwsgAygCACAAKAIATQRAIApBfzYCACAKKAIAIQAgCCQFIAAPCyAJKAIAIAAoAgBJBEAgCSgCACANKAIAKAIAIAAoAgAgCSgCAGsQ+wIgDSgCACILIAsoAgAgACgCACAJKAIAa2o2AgAgCSAAKAIANgIACyAIIQADQCAJKAIAIAMoAgBJBEAgDSgCACIMKAIAIQsgDCALQQFqNgIAIAssAAAhCyAJIAkoAgAiDEEBajYCACAMIAs6AAAMAQsLAkAgAigCCCADKAIAIAQoAgBrSwRAIAIoAgggAygCACAOKAIAa0sEQCAKQWw2AgAgCigCACEAIAgkBSAADwsgASAFKAIAIAQoAgAgASgCAGtrNgIAIAEoAgAgAigCBGogBSgCAEsEQCAAIAUoAgAgASgCAGs2AgAgAygCACABKAIAIAAoAgAQ9QcaIAkgAygCACAAKAIAajYCACACQQRqIgIgAigCACAAKAIAazYCACABIAQoAgA2AgAMAgsgAygCACABKAIAIAIoAgQQ9QcaIAogBigCADYCACAKKAIAIQAgCCQFIAAPCwsDQCAJKAIAIAcoAgBJBEAgASABKAIAIgBBAWo2AgAgACwAACEAIAkgCSgCACICQQFqNgIAIAIgADoAAAwBCwsgCiAGKAIANgIAIAooAgAhACAIJAUgAAs2AQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAMoAgAgAigCACgAADYAACACJAULkTYBen8jBSEHIwVBkAZqJAUgB0H4BWohISAHQfQFaiEbIAdB8AVqIQogB0HsBWohKyAHQegFaiEiIAdB5AVqIVAgB0HgBWohOCAHQdwFaiFRIAdB2AVqITkgB0HUBWohHCAHQdAFaiEsIAdBzAVqITogB0HIBWohHyAHQcQFaiFSIAdBwAVqIQsgB0G8BWohOyAHQbgFaiEjIAdBtAVqIWQgB0HQAGohDiAHQbAFaiEdIAdBrAVqIQwgB0GoBWohLSAHQaQFaiEkIAdBoAVqIVMgB0GcBWohPCAHQZgFaiFUIAdBlAVqIT0gB0GQBWohHiAHQYwFaiEuIAdBiAVqIT4gB0GEBWohICAHQYAFaiFVIAdB/ARqIQ0gB0H4BGohPyAHQfQEaiElIAdB8ARqIWUgB0FAayEPIAdB7ARqIUAgB0HoBGohZiAHQeAEaiFWIAdB3ARqIWcgB0HYBGohaCAHQdQEaiFBIAdB0ARqIWkgB0HIBGohVyAHQcQEaiFqIAdBwARqIWsgB0G8BGohQiAHQbgEaiFsIAdBsARqIVggB0GsBGohbSAHQagEaiFuIAdBpARqIQggB0GgBGohbyAHQZAEaiEXIAdBjARqIS8gB0GIBGohMCAHQYQEaiEZIAdBgARqIXAgB0H8A2ohWSAHQfgDaiFxIAdB9ANqIVogB0HwA2ohEiAHQewDaiEmIAdB6ANqITEgB0HkA2ohQyAHQeADaiFyIAdB3ANqIUQgB0HYA2ohcyAHQdADaiFbIAdBzANqIXQgB0HIA2ohdSAHQcQDaiFFIAdBwANqIXYgB0G4A2ohXCAHQbQDaiF3IAdBsANqIXggB0GsA2ohRiAHQagDaiF5IAdBoANqIV0gB0GcA2oheiAHQZgDaiF7IAdBlANqIQkgB0GQA2ohfCAHQYADaiEYIAdB+AJqITIgB0H0AmohMyAHQfACaiEaIAdB7AJqIX0gB0HoAmohXiAHQeQCaiF+IAdB4AJqIV8gB0HcAmohEyAHQdgCaiEnIAdB1AJqITQgB0HQAmohRyAHQcwCaiF/IAdByAJqIRQgByFIIAdBgAJqIUkgB0G8AWohESAHQbgBaiEQIAdBtAFqISggB0GwAWohgAEgB0GgAWohSiAHQZABaiE1IAdBiAFqIUsgB0GEAWohYCAHQYABaiEpIAdB/ABqIUwgB0H4AGoiNiAANgIAIAdB9ABqIk0gATYCACAHQfAAaiIBIAI2AgAgB0HsAGoiACADNgIAIAdB6ABqIk4gBDYCACAHQeQAaiIEIAU2AgAgB0HgAGoiAyAGNgIAIE0oAgAhAiABKAIAIQEgACgCACEAIE4oAgAhBiAEKAIAIQUgAygCACEEIAdBxAJqIhYgNigCADYCACAHQcACaiIDIAI2AgAgB0G8AmoiAiABNgIAIAdBuAJqIgEgADYCACAHQbQCaiIAIAY2AgAgB0GwAmoiKiAFNgIAIAdBrAJqIk0gBDYCACAHQagCaiIEIAEoAgA2AgAgB0GkAmoiASAEKAIAIAAoAgBqNgIAIAdBoAJqImEgAygCADYCACAHQZwCaiJiIGEoAgAgAigCAGo2AgAgB0GYAmoiFSBhKAIANgIAIAdBlAJqIjcgFigCAEH04QFqKAIANgIAIAdBkAJqImMgNygCACAWKAIAQYTiAWooAgBqNgIAIAdBjAJqIk8gFigCAEG84AFqKAIANgIAIAdBiAJqIk4gFigCAEHA4AFqKAIANgIAIAdBhAJqIjYgFigCAEHE4AFqKAIANgIAAkAgKigCAARAICooAgAhACBJICooAgBBBEgEfyAABUEECzYCACAWKAIAQYzhAWpBATYCACAoQQA2AgADQCAoKAIAQQNJBEAgEUEsaiAoKAIAQQJ0aiAWKAIAQazgAWogKCgCAEECdGooAgA2AgAgKCAoKAIAQQFqNgIADAELCyARIE8oAgA2AjggEUFAayAVKAIAIE8oAgBrNgIAIBEgNigCADYCPCCAASARIAQoAgAgASgCACAEKAIAaxDXATYCACCAASgCABDNAQRAIBRBbDYCACAUKAIAIQAgByQFIAAPCyARQRRqIBEgFigCACgCABCcBCARQRxqIBEgFigCACgCCBCcBCARQSRqIBEgFigCACgCBBCcBCAQQQA2AgADQAJAIBEQ2QFBAk0EfyAQKAIAIEkoAgBIBUEACyEAIBAoAgAhAiAARQ0AIE0oAgAhACAJIBE2AgAgfCAANgIAIDIgCSgCACgCGCAJKAIAKAIUQQN0ai0AAjYCACAzIAkoAgAoAiggCSgCACgCJEEDdGotAAI2AgAgGiAJKAIAKAIgIAkoAgAoAhxBA3RqLQACNgIAIH0gMigCACAzKAIAaiAaKAIAajYCACBeIAkoAgAoAhggCSgCACgCFEEDdGooAgQ2AgAgfiAJKAIAKAIoIAkoAgAoAiRBA3RqKAIENgIAIF8gCSgCACgCICAJKAIAKAIcQQN0aigCBDYCAAJAIBooAgAEQCB8KAIARQRAIBMgXygCACAJKAIAIBooAgAQ3wFqNgIAIAkoAgAQ2QEaDAILIBooAgAhACAnIBooAgAgGigCAEEYSQR/IAAFQRgLazYCACATIF8oAgAgCSgCACAaKAIAICcoAgBrEN8BICcoAgB0ajYCACAnKAIAQQFyBEAgCSgCABDZARoLICcoAgAEQCAJKAIAICcoAgAQ3wEhACATIBMoAgAgAGo2AgALBSATQQA2AgALCwJAIBooAgBBAU0EQCATIBMoAgAgXigCAEVqNgIAIBMoAgBFBEAgEyAJKAIAKAIsNgIADAILIAkoAgBBLGohACA0IBMoAgBBA0YEfyAAKAIAQQFrBSAAIBMoAgBBAnRqKAIACzYCACA0IDQoAgAgNCgCAEEAR0EBc2o2AgAgEygCAEEBRwRAIAkoAgAgCSgCACgCMDYCNAsgCSgCACAJKAIAKAIsNgIwIBMgNCgCACIANgIAIAkoAgAgADYCLAUgCSgCACAJKAIAKAIwNgI0IAkoAgAgCSgCACgCLDYCMCAJKAIAIBMoAgA2AiwLCyAYIBMoAgA2AgggGCB+KAIAIDMoAgBBAEsEfyAJKAIAIDMoAgAQ3wEFQQALajYCBCAzKAIAIDIoAgBqQRRPBEAgCSgCABDZARoLIH0oAgBBH09BAHEEQCAJKAIAENkBGgsgGCBeKAIAIDIoAgBBAEsEfyAJKAIAIDIoAgAQ3wEFQQALajYCACAJKAIAENkBGiBHIAkoAgBBQGsoAgAgGCgCAGo2AgAgCSgCACEAIH8gGCgCCCBHKAIASwR/IAAoAjwFIAAoAjgLNgIAIBggfygCACBHKAIAaiAYKAIIazYCDCAJKAIAQUBrIEcoAgAgGCgCBGo2AgAgCSgCACEAIEYgCSgCAEEUajYCACB5IAA2AgAgXSBGKAIAKAIEIEYoAgAoAgBBA3RqKQIANwIAIHogXS0AAzYCACB7IHkoAgAgeigCABDcATYCACBGKAIAIF0vAQAgeygCAGo2AgAgCSgCACEAIEUgCSgCAEEkajYCACB2IAA2AgAgXCBFKAIAKAIEIEUoAgAoAgBBA3RqKQIANwIAIHcgXC0AAzYCACB4IHYoAgAgdygCABDcATYCACBFKAIAIFwvAQAgeCgCAGo2AgAgCSgCABDZARogCSgCACEAIEQgCSgCAEEcajYCACBzIAA2AgAgWyBEKAIAKAIEIEQoAgAoAgBBA3RqKQIANwIAIHQgWy0AAzYCACB1IHMoAgAgdCgCABDcATYCACBEKAIAIFsvAQAgdSgCAGo2AgAgSiAYKQIANwIAIEogGCkCCDcCCCBIIAJBBHRqIgAgSikCADcCACAAIEopAgg3AgggECAQKAIAQQFqNgIADAELCyACIEkoAgBIBEAgFEFsNgIAIBQoAgAhACAHJAUgAA8LAkACQANAAkAgERDZAUECSw0AIBAoAgAgKigCAE4NACBNKAIAIQAgCCARNgIAIG8gADYCACAvIAgoAgAoAhggCCgCACgCFEEDdGotAAI2AgAgMCAIKAIAKAIoIAgoAgAoAiRBA3RqLQACNgIAIBkgCCgCACgCICAIKAIAKAIcQQN0ai0AAjYCACBwIC8oAgAgMCgCAGogGSgCAGo2AgAgWSAIKAIAKAIYIAgoAgAoAhRBA3RqKAIENgIAIHEgCCgCACgCKCAIKAIAKAIkQQN0aigCBDYCACBaIAgoAgAoAiAgCCgCACgCHEEDdGooAgQ2AgACQCAZKAIABEAgbygCAEUEQCASIFooAgAgCCgCACAZKAIAEN8BajYCACAIKAIAENkBGgwCCyAZKAIAIQAgJiAZKAIAIBkoAgBBGEkEfyAABUEYC2s2AgAgEiBaKAIAIAgoAgAgGSgCACAmKAIAaxDfASAmKAIAdGo2AgAgJigCAEEBcgRAIAgoAgAQ2QEaCyAmKAIABEAgCCgCACAmKAIAEN8BIQAgEiASKAIAIABqNgIACwUgEkEANgIACwsCQCAZKAIAQQFNBEAgEiASKAIAIFkoAgBFajYCACASKAIARQRAIBIgCCgCACgCLDYCAAwCCyAIKAIAQSxqIQAgMSASKAIAQQNGBH8gACgCAEEBawUgACASKAIAQQJ0aigCAAs2AgAgMSAxKAIAIDEoAgBBAEdBAXNqNgIAIBIoAgBBAUcEQCAIKAIAIAgoAgAoAjA2AjQLIAgoAgAgCCgCACgCLDYCMCASIDEoAgAiADYCACAIKAIAIAA2AiwFIAgoAgAgCCgCACgCMDYCNCAIKAIAIAgoAgAoAiw2AjAgCCgCACASKAIANgIsCwsgFyASKAIANgIIIBcgcSgCACAwKAIAQQBLBH8gCCgCACAwKAIAEN8BBUEAC2o2AgQgMCgCACAvKAIAakEUTwRAIAgoAgAQ2QEaCyBwKAIAQR9PQQBxBEAgCCgCABDZARoLIBcgWSgCACAvKAIAQQBLBH8gCCgCACAvKAIAEN8BBUEAC2o2AgAgCCgCABDZARogQyAIKAIAQUBrKAIAIBcoAgBqNgIAIAgoAgAhACByIBcoAgggQygCAEsEfyAAKAI8BSAAKAI4CzYCACAXIHIoAgAgQygCAGogFygCCGs2AgwgCCgCAEFAayBDKAIAIBcoAgRqNgIAIAgoAgAhACBCIAgoAgBBFGo2AgAgbCAANgIAIFggQigCACgCBCBCKAIAKAIAQQN0aikCADcCACBtIFgtAAM2AgAgbiBsKAIAIG0oAgAQ3AE2AgAgQigCACBYLwEAIG4oAgBqNgIAIAgoAgAhACBBIAgoAgBBJGo2AgAgaSAANgIAIFcgQSgCACgCBCBBKAIAKAIAQQN0aikCADcCACBqIFctAAM2AgAgayBpKAIAIGooAgAQ3AE2AgAgQSgCACBXLwEAIGsoAgBqNgIAIAgoAgAQ2QEaIAgoAgAhACBAIAgoAgBBHGo2AgAgZiAANgIAIFYgQCgCACgCBCBAKAIAKAIAQQN0aikCADcCACBnIFYtAAM2AgAgaCBmKAIAIGcoAgAQ3AE2AgAgQCgCACBWLwEAIGgoAgBqNgIAIDUgFykCADcCACA1IBcpAgg3AgggFSgCACEGIGIoAgAhBSBjKAIAIQQgTygCACEDIE4oAgAhAiA2KAIAIQEgDyBIIBAoAgBBBGtBA3FBBHRqIgApAAA3AAAgDyAAKQAINwAIIAwgBjYCACAtIAU2AgAgJCA3NgIAIFMgBDYCACA8IAM2AgAgVCACNgIAID0gATYCACAeIAwoAgAgDygCAGo2AgAgLiAPKAIAIA8oAgRqNgIAID4gDCgCACAuKAIAajYCACAgIC0oAgBBeGo2AgAgVSAkKAIAKAIAIA8oAgBqNgIAIA0gDygCDDYCAAJAID4oAgAgLSgCAEsEQCAdQbp/NgIABSBVKAIAIFMoAgBLBEAgHUFsNgIADAILIAwoAgAhBiAeKAIAICAoAgBLBEAgLSgCACEFICQoAgAhBCBTKAIAIQMgPCgCACECIFQoAgAhASA9KAIAIQAgISAPKQIANwIAICEgDykCCDcCCCAdIAYgBSAhIAQgAyACIAEgABCdBDYCAAwCCyAGICQoAgAoAgAQ/AIgDygCAEEISwRAIAwoAgBBCGogJCgCACgCAEEIaiAPKAIAQQhrEPsCCyAMIB4oAgA2AgAgJCgCACBVKAIANgIAAkAgDygCCCAeKAIAIDwoAgBrSwRAIA8oAgggHigCACBUKAIAa0sEQCAdQWw2AgAMBAsgDSgCACAPKAIEaiA9KAIATQRAIB4oAgAgDSgCACAPKAIEEPUHGiAdIC4oAgA2AgAMBAsgPyA9KAIAIA0oAgBrNgIAIB4oAgAgDSgCACA/KAIAEPUHGiAMIB4oAgAgPygCAGo2AgAgD0EEaiIAIAAoAgAgPygCAGs2AgAgDSA8KAIANgIAIAwoAgAgICgCAE0EQCAPKAIEQQNPDQILICVBADYCAANAICUoAgAgDygCBEkEQCAMKAIAICUoAgBqIA0oAgAgJSgCAGosAAA6AAAgJSAlKAIAQQFqNgIADAELCyAdIC4oAgA2AgAMAwsLIA8oAghBCEkEQCBlIA8oAghBAnRBkD1qKAIANgIAIAwoAgAgDSgCACwAADoAACAMKAIAIA0oAgAsAAE6AAEgDCgCACANKAIALAACOgACIAwoAgAgDSgCACwAAzoAAyANIA0oAgAgDygCCEECdEGwPWooAgBqNgIAIAwoAgBBBGogDSgCABCeBCANIA0oAgAgZSgCAGs2AgAFIAwoAgAgDSgCABD8AgsgDCAMKAIAQQhqNgIAIA0gDSgCAEEIajYCACAMKAIAIQACQCA+KAIAIC0oAgBBc2pLBEAgACAgKAIASQRAIAwoAgAgDSgCACAgKAIAIAwoAgBrEPsCIA0gDSgCACAgKAIAIAwoAgBrajYCACAMICAoAgA2AgALA0AgDCgCACA+KAIATw0CIA0gDSgCACIAQQFqNgIAIAAsAAAhASAMIAwoAgAiAEEBajYCACAAIAE6AAAMAAsABSAAIA0oAgAgDygCBEEIaxD7AgsLIB0gLigCADYCAAsLIEsgHSgCADYCACBLKAIAEM0BDQIgNSgCDBogSCAQKAIAQQNxQQR0aiIAIDUpAgA3AgAgACA1KQIINwIIIBUgFSgCACBLKAIAajYCACAQIBAoAgBBAWo2AgAMAQsLDAELIBQgSygCADYCACAUKAIAIQAgByQFIAAPCyAQKAIAICooAgBIBEAgFEFsNgIAIBQoAgAhACAHJAUgAA8LIBAgECgCACBJKAIAazYCAAJAAkADQCAQKAIAICooAgBIBEAgFSgCACEGIGIoAgAhBSBjKAIAIQQgTygCACEDIE4oAgAhAiA2KAIAIQEgDiBIIBAoAgBBA3FBBHRqIgApAAA3AAAgDiAAKQAINwAIIAogBjYCACArIAU2AgAgIiA3NgIAIFAgBDYCACA4IAM2AgAgUSACNgIAIDkgATYCACAcIAooAgAgDigCAGo2AgAgLCAOKAIAIA4oAgRqNgIAIDogCigCACAsKAIAajYCACAfICsoAgBBeGo2AgAgUiAiKAIAKAIAIA4oAgBqNgIAIAsgDigCDDYCAAJAIDooAgAgKygCAEsEQCAbQbp/NgIABSBSKAIAIFAoAgBLBEAgG0FsNgIADAILIAooAgAhBiAcKAIAIB8oAgBLBEAgKygCACEFICIoAgAhBCBQKAIAIQMgOCgCACECIFEoAgAhASA5KAIAIQAgISAOKQIANwIAICEgDikCCDcCCCAbIAYgBSAhIAQgAyACIAEgABCdBDYCAAwCCyAGICIoAgAoAgAQ/AIgDigCAEEISwRAIAooAgBBCGogIigCACgCAEEIaiAOKAIAQQhrEPsCCyAKIBwoAgA2AgAgIigCACBSKAIANgIAAkAgDigCCCAcKAIAIDgoAgBrSwRAIA4oAgggHCgCACBRKAIAa0sEQCAbQWw2AgAMBAsgCygCACAOKAIEaiA5KAIATQRAIBwoAgAgCygCACAOKAIEEPUHGiAbICwoAgA2AgAMBAsgOyA5KAIAIAsoAgBrNgIAIBwoAgAgCygCACA7KAIAEPUHGiAKIBwoAgAgOygCAGo2AgAgDkEEaiIAIAAoAgAgOygCAGs2AgAgCyA4KAIANgIAIAooAgAgHygCAE0EQCAOKAIEQQNPDQILICNBADYCAANAICMoAgAgDigCBEkEQCAKKAIAICMoAgBqIAsoAgAgIygCAGosAAA6AAAgIyAjKAIAQQFqNgIADAELCyAbICwoAgA2AgAMAwsLIA4oAghBCEkEQCBkIA4oAghBAnRBkD1qKAIANgIAIAooAgAgCygCACwAADoAACAKKAIAIAsoAgAsAAE6AAEgCigCACALKAIALAACOgACIAooAgAgCygCACwAAzoAAyALIAsoAgAgDigCCEECdEGwPWooAgBqNgIAIAooAgBBBGogCygCABCeBCALIAsoAgAgZCgCAGs2AgAFIAooAgAgCygCABD8AgsgCiAKKAIAQQhqNgIAIAsgCygCAEEIajYCACAKKAIAIQACQCA6KAIAICsoAgBBc2pLBEAgACAfKAIASQRAIAooAgAgCygCACAfKAIAIAooAgBrEPsCIAsgCygCACAfKAIAIAooAgBrajYCACAKIB8oAgA2AgALA0AgCigCACA6KAIATw0CIAsgCygCACIAQQFqNgIAIAAsAAAhASAKIAooAgAiAEEBajYCACAAIAE6AAAMAAsABSAAIAsoAgAgDigCBEEIaxD7AgsLIBsgLCgCADYCAAsLIGAgGygCADYCACBgKAIAEM0BQQBHIQAgYCgCACEBIAANAiAVIBUoAgAgAWo2AgAgECAQKAIAQQFqNgIADAELCwwBCyAUIAE2AgAgFCgCACEAIAckBSAADwsgKUEANgIAA0AgKSgCAEEDTw0CIBYoAgBBrOABaiApKAIAQQJ0aiARQSxqICkoAgBBAnRqKAIANgIAICkgKSgCAEEBajYCAAwACwALCyBMIGMoAgAgNygCAGs2AgAgTCgCACBiKAIAIBUoAgBrSwR/IBRBun82AgAgFCgCACEAIAckBSAABSAVKAIAIDcoAgAgTCgCABD0BxogFSAVKAIAIEwoAgBqNgIAIBQgFSgCACBhKAIAazYCACAUKAIAIQAgByQFIAALC44BAQJ/IwUhByMFQSBqJAUgB0EYaiIIIAA2AgAgB0EUaiIAIAE2AgAgB0EQaiIBIAI2AgAgB0EMaiICIAM2AgAgB0EIaiIDIAQ2AgAgB0EEaiIEIAU2AgAgByAGNgIAIAgoAgAgACgCACABKAIAIAIoAgAgAygCACAEKAIAIAcoAgBBABChBCEAIAckBSAAC64HAQx/IwUhCCMFQdAAaiQFIAhBPGoiDSAANgIAIAhBOGoiCSABNgIAIAhBNGoiCyACNgIAIAhBMGoiCiADNgIAIAhBLGoiAiAENgIAIAhBKGoiDiAFNgIAIAhBJGoiDyAGNgIAIAhBIGoiBCAHNgIAIAhBHGoiEiAJKAIANgIAIAQoAgAEQCAOIAQoAgAQogQ2AgAgDyAEKAIAEKMENgIACyAIQUBrIQEgCEEYaiEGIAhBFGohByAIQRBqIQMgCEEMaiEFIAhBCGohECAIQQRqIREgCCEAAkACQAJAAkACQAJAAkACQAJAA0AgAigCAEEFSQ0JIAooAgAgAigCABD0A0EARyETIAooAgAhDCATBEAgAyAMIAIoAgAQhgQ2AgAgAygCABDNAQ0CIA0oAgBBjOIBaigCAA0DIAcgCSgCACALKAIAIAooAgAgAygCACAOKAIAIA8oAgAQpAQ2AgAgCSAJKAIAIAcoAgBqNgIAIAsgCygCACAHKAIAazYCACAKIAooAgAgAygCAGo2AgAgAiACKAIAIAMoAgBrNgIADAELIAYgDBDPATYCACAGKAIAQajqvmlHBEAgBigCAEFwcUHQ1LTCAUcNBiACKAIAQQhJDQQgBSAKKAIAQQRqEM8BQQhqNgIAIAIoAgAgBSgCAEkNBSAKIAooAgAgBSgCAGo2AgAgAiACKAIAIAUoAgBrNgIADAELIA0oAgAhDCAEKAIABEAgECAMIAQoAgAQpQQ2AgAgECgCABDNAQ0HBSARIAwgDigCACAPKAIAEKYENgIAIBEoAgAQzQENCAsgDSgCACAJKAIAEJYEIAAgDSgCACAJKAIAIAsoAgAgCiACEKcENgIAIAAoAgAQzQENCCAJIAkoAgAgACgCAGo2AgAgCyALKAIAIAAoAgBrNgIADAALAAsgASADKAIANgIAIAEoAgAhACAIJAUgAA8LIAFBQDYCACABKAIAIQAgCCQFIAAPCyABQbh/NgIAIAEoAgAhACAIJAUgAA8LIAFBuH82AgAgASgCACEAIAgkBSAADwsgAUF2NgIAIAEoAgAhACAIJAUgAA8LIAEgECgCADYCACABKAIAIQAgCCQFIAAPCyABIBEoAgA2AgAgASgCACEAIAgkBSAADwsgASAAKAIANgIAIAEoAgAhACAIJAUgAA8LIAIoAgAEfyABQbh/NgIAIAEoAgAhACAIJAUgAAUgASAJKAIAIBIoAgBrNgIAIAEoAgAhACAIJAUgAAsLJgEBfyMFIQEjBUEQaiQFIAEgADYCACABKAIAKAIEIQAgASQFIAALJgEBfyMFIQEjBUEQaiQFIAEgADYCACABKAIAKAIIIQAgASQFIAAL0QQBDH8jBSEGIwVBQGskBSAGQTRqIQcgBkEUaiEPIAZBEGohCiAGQQxqIRAgBkEIaiELIAZBBGohESAGIQwgBkEwaiINIAA2AgAgBkEsaiIOIAE2AgAgBkEoaiIIIAI2AgAgBkEkaiIJIAM2AgAgBkEgaiICIAQ2AgAgBkEcaiIBIAU2AgAgBkEYaiIAIAgoAgAgCSgCABD0AzYCAAJAAkACQAJAAkAgACgCAEEEaw4EAAECAwQLIAcgDSgCACAOKAIAIAgoAgAgCSgCABCvBDYCACAHKAIAIQAgBiQFIAAPCyAKELAENgIAIAooAgAEQCAPIAooAgAgDSgCACAOKAIAIAgoAgAgCSgCACACKAIAIAEoAgAQsQQ2AgAgCigCABDyAxogByAPKAIANgIAIAcoAgAhACAGJAUgAA8FIAdBQDYCACAHKAIAIQAgBiQFIAAPCwALIAsQsgQ2AgAgCygCAARAIBAgCygCACANKAIAIA4oAgAgCCgCACAJKAIAIAIoAgAgASgCABCzBDYCACALKAIAEPIDGiAHIBAoAgA2AgAgBygCACEAIAYkBSAADwUgB0FANgIAIAcoAgAhACAGJAUgAA8LAAsgDBC0BDYCACAMKAIABEAgESAMKAIAIA0oAgAgDigCACAIKAIAIAkoAgAgAigCACABKAIAELUENgIAIAwoAgAQ8QMaIAcgESgCADYCACAHKAIAIQAgBiQFIAAPBSAHQUA2AgAgBygCACEAIAYkBSAADwsACyAHQXY2AgAgBygCACEAIAYkBSAAC9MDAQR/IwUhBCMFQRBqJAUgBEEMaiEFIARBCGoiAiAANgIAIARBBGoiAyABNgIAIAQiACACKAIAEKsENgIAIAQoAgAQzQEEQCAFIAAoAgA2AgAgBSgCACEAIAQkBSAADwsgAygCAARAIAIoAgBB7OEBaiADKAIAQbTgAWooAgA2AgAgAigCAEG84AFqIAMoAgAoAgQ2AgAgAigCAEHA4AFqIAMoAgAoAgQ2AgAgAigCAEHE4AFqIAMoAgAoAgQgAygCACgCCGo2AgAgAigCAEG44AFqIAIoAgBBxOABaigCADYCACACKAIAQYjhAWohACADKAIAQbjgAWooAgAEQCAAQQE2AgAgAigCAEGM4QFqQQE2AgAgAigCACADKAIAQQxqNgIAIAIoAgAgAygCAEGcMGo2AgQgAigCACADKAIAQZQgajYCCCACKAIAIAMoAgBBpNAAajYCDCACKAIAQazgAWogAygCAEGo4AFqKAIANgIAIAIoAgBBsOABaiADKAIAQazgAWooAgA2AgAgAigCAEG04AFqIAMoAgBBsOABaigCADYCAAUgAEEANgIAIAIoAgBBjOEBakEANgIACwsgBUEANgIAIAUoAgAhACAEJAUgAAvSAQEEfyMFIQMjBUEgaiQFIANBFGohBCADQRBqIgUgADYCACADQQxqIgYgATYCACADQQhqIgEgAjYCACADQQRqIgAgBSgCABCrBDYCACAAKAIAEM0BBEAgBCAAKAIANgIAIAQoAgAhACADJAUgAA8LIAMhACAGKAIAQQBHIAEoAgBBAEdxBEAgACAFKAIAIAYoAgAgASgCABCsBDYCACAAKAIAEM0BBEAgBEFiNgIAIAQoAgAhACADJAUgAA8LCyAEQQA2AgAgBCgCACEAIAMkBSAAC+gIAQt/IwUhBSMFQdAAaiQFIAVBzABqIQYgBUHIAGoiCCAANgIAIAVBxABqIgAgATYCACAFQUBrIgcgAjYCACAFQTxqIg0gAzYCACAFQThqIg4gBDYCACAFQTRqIgEgDSgCACgCADYCACAFQTBqIgogACgCADYCACAFQSxqIgwgCigCACAHKAIAajYCACAFQShqIgMgCigCADYCACAFQSRqIgIgDigCACgCADYCACACKAIAQQlJBEAgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyAFQSBqIgkgASgCAEEFEPUDNgIAIAkoAgAQzQEEQCAGIAkoAgA2AgAgBigCACEAIAUkBSAADwsgAigCACAJKAIAQQNqSQRAIAZBuH82AgAgBigCACEAIAUkBSAADwsgBUEcaiIAIAgoAgAgASgCACAJKAIAEKgENgIAIAAoAgAQzQEEQCAGIAAoAgA2AgAgBigCACEAIAUk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ACANKAIAQQJ0aigCADYCACAOIBEoAgA2AgAgFCARKAIAIBAoAgBqNgIAIAogBC8BACATKAIAQQh0akH//wNxEOAEIAogDygCACAWKAIAajoAAiAKQQI6AAMDQCAVKAIAIQEgDiAOKAIAIgJBAWo2AgAgASACQQJ0aiAKKAEANgEAIA4oAgAgFCgCAEkNAAsgACANKAIAQQJ0aiIBIAEoAgAgECgCAGo2AgAgCyALKAIAQQFqNgIADAELCyAJJAULcwEDfyMFIQIjBUEQaiQFIAIhAyACQQRqIgQgADYCACACQQhqIgAgATsBACAEKAIAIQFBkOUALQAABEAgASAALgEAEOEEIAIkBQUgAyABNgIAIAMoAgAgAC4BADoAACADKAIAIAAvAQBBCHU6AAEgAiQFCwszAQF/IwUhAiMFQRBqJAUgAiAANgIAIAJBBGoiACABOwEAIAIoAgAgAC4AADsAACACJAULwgIBBn8jBSEFIwVB0ABqJAUgBUE8aiEGIAVBOGoiByAANgIAIAVBNGoiCCABNgIAIAVBMGoiCSACNgIAIAVBLGoiCiADNgIAIAVBKGoiACAENgIAIAVBJGoiASAHKAIANgIAIAVBIGoiAyABKAIAIAgoAgBqNgIAIAVBHGoiAiAAKAIAQQRqNgIAIAVBGGoiBCACKAIANgIAIAVBQGsiAiAAKAIAENIDIAVBBGoiByACLQACNgIAIAUiACAFQQhqIgIgCSgCACAKKAIAEL4ENgIAIAUoAgAQzAEEQCAGIAAoAgA2AgAgBigCACEAIAUkBSAADwsgASgCACACIAMoAgAgBCgCACAHKAIAENgEGiACENUDBH8gBiAIKAIANgIAIAYoAgAhACAFJAUgAAUgBkFsNgIAIAYoAgAhACAFJAUgAAsLhgIBAn8jBSECIwVBEGokBSACQQRqIgEgADYCACABKAIAQaCoAWpBBTYCACABKAIAQcyoAWpBADYCACABKAIAQZCoAWpBADYCACABKAIAQZSoAWpBADYCACABKAIAQZioAWpBADYCACABKAIAQZyoAWpBADYCACABKAIAQYwoakGMgIDgADYCACABKAIAQdSoAWpBADYCACABKAIAQdCoAWpBADYCACABKAIAQbSpAWpBADYCACACIgBBADYCAANAIAAoAgBBA0gEQCABKAIAQaSoAWogACgC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ACIBIAEoAgAgBSgCAC0AAUEIdGo2AgALIAIgBSgCACAAKAIAQQFraiwAADoAACACLQAABEBBCCACLQAAENQBayEBIAMoAgAgATYCBCADKAIAQQRqIgEgASgCAEEEIAAoAgBrQQN0ajYCAAwCCyAGQX82AgAgBigCACEAIAQkBSAADwsACyAGIAAoAgA2AgAgBigCACEAIAQkBSAAC+MFAQl/IwUhBCMFQTBqJAUgBEEEaiEDIARBKGoiBiAANgIAIARBJGoiAiABNgIAIARBIGoiASACKAIAQRBqEMMEQf8BcTYCACAEQRxqIgcgAigCAEEgahDDBEH/AXE2AgAgBEEYaiIAIAIoAgBBGGoQwwRB/wFxNgIAIARBFGoiCCABKAIAQQJ0QbA0aigCADYCACAEQRBqIgkgBygCAEECdEHANWooAgA2AgAgBEEMaiIFIAAoAgA2AgAgBEEIaiIKIAgoAgAgCSgCAGogBSgCAGo2AgAgACgCAARAIAMgACgCAEECdEGgN2ooAgAgAigCACAFKAIAENwBajYCACACKAIAEMAEGgUgA0EANgIACyAEIQACQCADKAIAQQNJBEAgASgCAEUgAygCAEEBTXEEQCADQQEgAygCAGs2AgALIAIoAgBBKGohBSADKAIARQRAIAMgBSgCADYCAAwCCyAAIAUgAygCAEECdGooAgA2AgAgAygCAEEBRwRAIAIoAgAgAigCACgCLDYCMAsgAigCACACKAIAKAIoNgIsIAMgACgCACIANgIAIAIoAgAgADYCKAUgAyADKAIAQQJrNgIAIAIoAgAgAigCACgCLDYCMCACKAIAIAIoAgAoAig2AiwgAigCACADKAIANgIoCwsgBigCACADKAIANgIIIAcoAgBBAnRBoDhqKAIAIQMgBygCAEEfSwR/IAIoAgAgCSgCABDcAQVBAAshACAGKAIAIANBA2ogAGo2AgQgCSgCACAIKAIAakEYSwRAIAIoAgAQwAQaCyABKAIAQQJ0QYA6aigCACEDIAEoAgBBD0sEfyACKAIAIAgoAgAQ3AEFQQALIQAgBigCACADIABqNgIAIAooAgBBH0tBAXIEQCACKAIAEMAEGgsgAigCAEEQaiACKAIAEMQEIAIoAgBBIGogAigCABDEBCACKAIAEMAEGiACKAIAQRhqIAIoAgAQxAQgBCQFC+gI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QTBqIgcgACgCAEEGajYCACAFQSxqIhMgBygCACAKKAIAajYCACAFQShqIhQgEygCACALKAIAajYCACAFQSRqIhYgFCgCACAMKAIAajYCACAFQSBqIgAgECgCAEEDakEEbjYCACAFQRxqIg4gBCgCACAAKAIAajYCACAFQRhqIg8gDigCACAAKAIAajYCACAFQRRqIhEgDygCACAAKAIAajYCACAFQRBqIgMgBCgCADYCACAFQQxqIgQgDigCADYCACAFQQhqIgggDygCADYCACAFQQRqIg0gESgCADYCACAFQTRqIhUgCSgCACAKKAIAIAsoAgBqIAwoAgBqQQZqazYCACAVKAIAIAkoAgBLBEAgBkFsNgIAIAYoAgAhACAFJAUgAA8LIAVBiAFqIgAgBUH4AGoiCSAHKAIAIAooAgAQ8QQ2AgAgACgCABDMAQRAIAYgACgCADYCACAGKAIAIQAgBSQFIAAPCyAAIAVB6ABqIgogEygCACALKAIAEPEENgIAIAAoAgAQzAEEQCAGIAAoAgA2AgAgBigCACEAIAUkBSAADwsgACAFQdgAaiILIBQoAgAgDCgCABDxBDYCACAAKAIAEMwBBEAgBiAAKAIANgIAIAYoAgAhACAFJAUgAA8LIAAgBUHIAGoiDCAWKAIAIBUoAgAQ8QQ2AgAgACgCABDMAQRAIAYgACgCADYCACAGKAIAIQAgBSQFIAAPCyAFIgAgCRDABCAKEMAEciALEMAEciAMEMAEcjYCAANAAkAgACgCAA0AIA0oAgAgEigCAEF5ak8NACADKAIAIAkgASgCACACKAIAENAEIQcgAyADKAIAIAdqNgIAIAQoAgAgCiABKAIAIAIoAgAQ0AQhByAEIAQoAgAgB2o2AgAgCCgCACALIAEoAgAgAigCABDQBCEHIAggCCgCACAHajYCACANKAIAIAwgASgCACACKAIAENAEIQcgDSANKAIAIAdqNgIAIAMoAgAgCSABKAIAIAIoAgAQ0AQhByADIAMoAgAgB2o2AgAgBCgCACAKIAEoAgAgAigCABDQBCEHIAQgBCgCACAHajYCACAIKAIAIAsgASgCACACKAIAENAEIQcgCCAIKAIAIAdqNgIAIA0oAgAgDCABKAIAIAIoAgAQ0AQhByANIA0oAgAgB2o2AgAgACAJEMAEIAoQwARyIAsQwARy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mNABaiAAKAIAIAIoAgBBkNABaigCACACKAIAQZTQAWooAgBrazYCACACKAIAQZTQAWogACgCADYCACACKAIAQZDQAWogACgCADYCACADJAUL/AYBCX8jBSEFIwVB0ABqJAUgBUHEAGohBiAFQUBrIgkgADYCACAFQTxqIgAgATYCACAFQThqIgogAjYCACAFQTRqIgggAzYCACAFQTBqIgcgBDYCACAFQSxqIgEgCCgCADYCACAFQShqIg0gASgCACAHKAIAajYCACAFQSRqIgsgACgCADYCACAFQSBqIgMgCygCADYCACAFQRxqIgwgCygCACAKKAIAajYCACAFQRhqIgIgBygCADYCACAHKAIAQQhJBEAgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyAFQQhqIgAgCSgCACAIKAIAQQUQiAU2AgAgACgCABDMAQRAIAYgACgCADYCACAGKAIAIQAgBSQFIAAPCyAHKAIAIAAoAgBBA2pJBEAgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyABIAEoAgAgACgCAGo2AgAgAiACKAIAIAAoAgBrNgIAIAAgCSgCACAIKAIAIAAoAgAQiQU2AgAgACgCABDMAQRAIAYgACgCADYCACAGKAIAIQAgBSQFIAAPCyAFQRBqIQcgBUEEaiEEIAUhAAJAAkACQAJAAkACQAJAA0AgBEEANgIAIAAgASgCACANKAIAIAEoAgBrIAcQjgQ2AgAgACgCABDMAQ0BIAEgASgCAEEDajYCACACIAIoAgBBA2s2AgAgACgCACACKAIASw0CAkACQAJAAkACQAJAIAcoAgAOBAECAAMECwwICyAEIAkoAgAgAygCACAMKAIAIAMoAgBrIAEoAgAgACgCABCKBTYCAAwDCyAEIAMoAgAgDCgCACADKAIAayABKAIAIAAoAgAQqQQ2AgAMAgsgAigCAA0GDAELDAYLIAAoAgBFDQcgBCgCABDMAUEARyEKIAQoAgAhCCAKDQYgAyADKAIAIAhqNgIAIAEgASgCACAAKAIAajYCACACIAIoAgAgACgCAGs2AgAMAAsACyAGIAAoAgA2AgAgBigCACEAIAUkBSAADwsgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyAGQX82AgAgBigCACEAIAUkBSAADwsgBkG4fzYCACAGKAIAIQAgBSQFIAAP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AgAgCigCACEAIAkkBSAADwsgBygCAEEKTQRAIAEgASgCACADKAIAajYCACANKAIAIAAgEigCACAHKAIAEJUFGgwBCyAKQWw2AgAgCigCACEAIAkkBSAADwsgCiABKAIAIAgoAgBrNgIAIAooAgAhACAJJAUgAAuuBQEFfyMFIQQjBUEgaiQFIARBFGohBSAEQRBqIgMgADYCACAEQQxqIgYgATYCACAEQQhqIgEgAjYCACABKAIAQQFJBEAgAygCACIAQgA3AgAgAEIANwIIIAVBuH82AgAgBSgCACEAIAQkBSAADwsgBEEEaiECIAQhACABKAIAQQRPIQcgAygCACAGKAIANgIMAkAgBwRAIAMoAgAgBigCACABKAIAakF8ajYCCCADKAIAKAIIEOEBIQAgAygCACAANgIAIAIgBigCACABKAIAQQFrai0AADYCACACKAIABEBBCCACKAIAENQBayEAIAMoAgAgADYCBAwCCyAFQX82AgAgBSgCACEAIAQkBSAADwUgAygCACADKAIAKAIMNgIIIAMoAgAgAygCACgCDC0AADYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEoAgBBAmsOBgUEAwIBAAYLIAMoAgAiAiACKAIAIAMoAgAoAgwtAAZBEHRqNgIADAYLDAULDAULDAULDAULDAULDAULIAMoAgAiAiACKAIAIAMoAgAoAgwtAAVBCHRqNgIACyADKAIAIgIgAigCACADKAIAKAIMLQAEajYCAAsgAygCACICIAIoAgAgAygCACgCDC0AA0EYdGo2AgALIAMoAgAiAiACKAIAIAMoAgAoAgwtAAJBEHRqNgIACyADKAIAIgIgAigCACADKAIAKAIMLQABQQh0ajYCAAsgACAGKAIAIAEoAgBBAWtqLQAANgIAIAAoAgAEQEEIIAAoAgAQ1AFrIQAgAygCACAANgIEIAMoAgBBBGoiACAAKAIAQQQgASgCAGtBA3RqNgIADAILIAVBfzYCACAFKAIAIQAgBCQFIAAPCwALIAUgASgCADYCACAFKAIAIQAgBCQFIAALhQEBAn8jBSEDIwVBIGokBSADQRBqIgQgADYCACADQQxqIgAgATYCACADQQhqIgEgAjYCACADQQRqIgIgASgCADYCACADIAIoAgA2AgAgACgCACADKAIALwEAENwB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BiAANgIAIAVBDGoiACABNgIAIAVBCGoiASACNgIAIAVBBGoiAiADNgIAIAUgBDYCACAGKAIAIAAoAgAgASgCACACKAIAIAUoAgBBAEEAEK8FIQAgBSQFIAALxggBB38jBSEHIwVB0ABqJAUgB0HIAGoiCCAANgIAIAdBxABqIgAgATYCACAHQUBrIgsgAjYCACAHQTxqIgogAzYCACAHQThqIgkgBDYCACAHQTRqIgEgBTYCACAHQTBqIgUgBjYCACAHQSxqIgIgCigCADYCACAHQShqIg0gAigCACAJKAIAajYCACAHQSRqIgYgACgCADYCACAHQSBqIgQgBigCADYCACAHQRxqIgwgBigCACALKAIAajYCACAHQRhqIgMgCSgCADYCACAIKAIAELAFGiABKAIABEAgCCgCACABKAIAIAUoAgAQsQUgCCgCAEGY0ABqIAgoAgBBjNAAaigCADYCACAIKAIAQZTQAGogACgCACAIKAIAQYzQAGooAgAgCCgCAEGQ0ABqKAIAa2s2AgAgCCgCAEGQ0ABqIAAoAgA2AgAFIAgoAgBBmNAAaiAAKAIAIgA2AgAgCCgCAEGQ0ABqIAA2AgAgCCgCAEGU0ABqIAA2AgALIAdBzABqIQEgCSgCAEEISQRAIAFBuH82AgAgASgCACEAIAckBSAADwsgB0EIaiIAIAgoAgAgCigCAEEFELIFNgIAIAAoAgAQzAEEQCABIAAoAgA2AgAgASgCACEAIAckBSAADwsgCSgCACAAKAIAQQNqSQRAIAFBuH82AgAgASgCACEAIAckBSAADwsgAiACKAIAIAAoAgBqNgIAIAMgAygCACAAKAIAazYCACAAIAgoAgAgCigCACAAKAIAELMFNgIAIAAoAgAQzAEEQCABIAAoAgA2AgAgASgCACEAIAckBSAADwsgB0EQaiEJIAdBBGohBSAHIQACQAJAAkACQAJAAkACQANAIAVBADYCACAAIAIoAgAgDSgCACACKAIAayAJEI4ENgIAIAAoAgAQzAENASACIAIoAgBBA2o2AgAgAyADKAIAQQNrNgIAIAAoAgAgAygCAEsNAgJAAkACQAJAAkACQCAJKAIADgQBAgADBAsMCAsgBSAIKAIAIAQoAgAgDCgCACAEKAIAayACKAIAIAAoAgAQtAU2AgAMAwsgBSAEKAIAIAwoAgAg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AgAgBSgCACEAIAQkBSAADwsgBEEEaiECIAQhACABKAIAQQRPIQcgAygCACAGKAIANgIMAkAgBwRAIAMoAgAgBigCACABKAIAakF8ajYCCCADKAIAKAIIEL0FIQAgAygCACAANgIAIAIgBigCACABKAIAQQFrai0AADYCACACKAIABEBBCCACKAIAENQBayEAIAMoAgAgADYCBAwCCyAFQX82AgAgBSgCACEAIAQkBSAADwUgAygCACADKAIAKAIMNgIIIAMoAgAgAygCACgCDC0AADYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEoAgBBAmsOBgUEAwIBAAYLIAMoAgAiAiACKAIAIAMoAgAoAgwtAAZBEHRqNgIADAYLDAULDAULDAULDAULDAULDAULIAMoAgAiAiACKAIAIAMoAgAoAgwtAAVBCHRqNgIACyADKAIAIgIgAigCACADKAIAKAIMLQAEajYCAAsgAygCACICIAIoAgAgAygCACgCDC0AA0EYdGo2AgALIAMoAgAiAiACKAIAIAMoAgAoAgwtAAJBEHRqNgIACyADKAIAIgIgAigCACADKAIAKAIMLQABQQh0ajYCAAsgACAGKAIAIAEoAgBBAWtqLQAANgIAIAAoAgAEQEEIIAAoAgAQ1AFrIQAgAygCACAANgIEIAMoAgBBBGoiACAAKAIAQQQgASgCAGtBA3RqNgIADAILIAVBfzYCACAFKAIAIQAgBCQFIAAPCwALIAUgASgCADYCACAFKAIAIQAgBCQFIAALdgECfyMFIQMjBUEQaiQFIANBCGoiBCAANgIAIANBBGoiACABNgIAIAMgAjYCACADQQxqIgEgAygCACgBADYBACAAKAIAIAEvAQAQ3AEhASAEKAIAIAE2AgAgACgCABC6BRogBCgCACADKAIAQQRqNgIEIAMkBQvAAwEGfyMFIQMjBUEQaiQFIANBDGohAiADQQhqIgEgADYCACABKAIAKAIEQSBLBEAgAkEDNgIAIAIoAgAhACADJAUgAA8LIAEoAgAhBSABKAIAKAIIIAEoAgAoAgxBBGpPBEAgASgCAEEIaiIAIAAoAgAgBSgCBEEDdms2AgAgASgCAEEEaiIAIAAoAgBBB3E2AgAgASgCACgCCBC9BSEAIAEoAgAgADYCACACQQA2AgAgAigCACEAIAMk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QCACKAIIQQRPDQILA0AgCCgCACAGKAIASQRAIAEgASgCACIAQQFqNgIAIAAsAAAhACAIIAgoAgAiAkEBajYCACACIAA6AAAMAQsLIAogBSgCADYCACAKKAIAIQAgCSQFIAAPCwsgAigCBEEISQRAIAAgAigCBEECdEGQPWooAgA2AgAgCCgCACABKAIALAAAOgAAIAgoAgAgASgCACwAAToAASAIKAIAIAEoAgAsAAI6AAIgCCgCACABKAIALAADOgADIAEgASgCACACKAIEQQJ0QbA9aigCAGo2AgAgCCgCAEEEaiABKAIAEJ4EIAEgASgCACAAKAIAazYCAAUgCCgCACABKAIAEPwCCyAIIAgoAgBBCGo2AgAgASABKAIAQQhqNgIAIAgoAgAhAAJAIAYoAgAgCygCAEF0aksEQCAAIAQoAgBJBEAgCCgCACABKAIAIAQoAgAgCCgCAGsQ+wIgASABKAIAIAQoAgAgCCgCAGtqNgIAIAggBCgCADYCAAsDQCAIKAIAIAYoAgBPDQIgASABKAIAIgBBAWo2AgAgACwAACEAIAggCCgCACICQQFqNgIAIAIgADoAAAwACwAFIAAgASgCACACKAIIQQhrEPsCCwsgCiAFKAIANgIAIAooAgAhACAJJAUgAAs3AQJ/IwUhASMFQRBqJAUgASAANgIAIAFBBGoiAiABKAIAIgAQkAQ2AgAgAigCACEAIAEkBSAAC40LARB/IwUhBSMFQdAAaiQFIAVBQGshBiAFQTxqIhIgADYCACAFQThqIg8gATYCACAFQTRqIgggAjYCACAFQTBqIgAgAzYCACAFQSxqIhAgBDYCACAFQShqIg4gACgCADYCACAFQSRqIgsgDigCACAQKAIAajYCACAFQSBqIgIgDigCADYCACAFQQhqIglBADYCACAFQQRqIhNBADYCACAQKAIAQQRJBEAgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyAFQRBqIgMgAigCABCQBDYCACAFQRxqIgQgAygCAEEPcUEFajYCACAEKAIAQQ9KBEAgBkFUNgIAIAYoAgAhACAFJAUgAA8LIAUhACAFQcYAaiERIAVBxABqIQcgAyADKAIAQQR2NgIAIAVBDGoiAUEENgIAIAgoAgAgBCgCADYCACAFQRhqIgxBASAEKAIAdEEBajYCACAFQRRqIghB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CyABQQRqIgAgACgCACABKAIEQQR2ajYCACABQQhqIgAgACgCACABKAIIQQN2ajYCACABKAIEIAEoAgBJBEAgA0EBNgIACyAFIAcoAgAgBigCACAIKAIAIAIoAgAgAygCAEECdEHE5QBqKAIAQQ9xQagBahEIADYCACAFKAIAIQAgBCQFIAALrQIBBn8jBSEEIwVBoMAAaiQFIARBnMAAaiEFIARBmMAAaiIHIAA2AgAgBEGUwABqIgggATYCACAEQZDAAGoiBiACNgIAIARBjMAAaiIBIAM2AgAgBCIAQQBBgsAAEPYHGiAEQQw7AQAgBEGIwABqIgMgBigCADYCACAEQYTAAGoiAiAEIAYoAgAgASgCABDLBTYCACACKAIAEMwBQQBHIQkgAigCACEGIAkEQCAFIAY2AgAgBSgCACEAIAQkBSAADwsgBiABKAIATwR/IAVBuH82AgAgBSgCACEAIAQkBSAABSADIAMoAgAgAigCAGo2AgAgASABKAIAIAIoAgBrNgIAIAUgBygCACAIKAIAIAMoAgAgASgCACAAEMwFNgIAIAUoAgAhACAEJAUgAAsLrQIBBn8jBSEEIwVBoIABaiQFIARBnIABaiEFIARBmIABaiIHIAA2AgAgBEGUgAFqIgggATYCACAEQZCAAWoiBiACNgIAIARBjIABaiIBIAM2AgAgBCIAQQBBhIABEPYHGiAEQQw2AgAgBEGIgAFqIgMgBigCADYCACAEQYSAAWoiAiAEIAYoAgAgASgCABDDBTYCACACKAIAEMwBQQBHIQkgAigCACEGIAkEQCAFIAY2AgAgBSgCACEAIAQkBSAADwsgBiABKAIATwR/IAVBuH82AgAgBSgCACEAIAQkBSAABSADIAMoAgAgAigCAGo2AgAgASABKAIAIAIoAgBrNgIAIAUgBygCACAIKAIAIAMoAgAgASgCACAAEMQFNgIAIAUoAgAhACAEJAUgAAsLhQoBG38jBSEDIwVB0BBqJAUgA0HIEGohBiADQcQQaiIEIAA2AgAgA0HAEGoiACABNgIAIANBvBBqIgEgAjYCACADQZAJaiICQgA3AwAgAkIANwMIIAJCADcDECACQgA3AxggAkIANwMgIAJCADcDKCACQgA3AzAgAkIANwM4IAJBQGtBADYCACADQcAIaiIHQgA3AwAgB0IANwMIIAdC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AigCAEECdGooAgA2AgAgCiAELgEAEOAEIAogFigCADoAAiAKQQE6AAMgDEEANgIAA0AgDCgCACASKAIATw0CIBUoAgAgDCgCAEECdGogCigBADYBACAMIAwoAgBBAWo2AgAMAAsACwsgC0EANgIAA0AgCygCACAFKAIASQRAIBMgAygCACALKAIAQQF0ai0AADYCACANIAMoAgAgCygCAEEBdGotAAE2AgAgDyAGKAIAIA0oAgBrNgIAIBBBASAXKAIAIA8oAgBrdDYCACARIAAgDSgCAEECdGooAgA2AgAgDiARKAIANgIAIBQgESgCACAQKAIAajYCACAKIAQvAQAgEygCAEEIdGpB//8DcRDgBCAKIA8oAgAgFigCAGo6AAIgCkECOgADA0AgFSgCACEBIA4gDigCACICQQFqNgIAIAEgAkECdGogCigBADYBACAOKAIAIBQoAgBJDQALIAAgDSgCAEECdGoiASABKAIAIBAoAgBqNgIAIAsgCygCAEEBajYCAAwBCwsgCSQFC6YDAQh/IwUhBCMFQcCEAWokBSAEQbSEAWohBSAEQbCEAWoiByAANgIAIARBrIQBaiIIIAE2AgAgBEGohAFqIgEgAjYCACAEQaSEAWoiAiADNgIAIARBoIQBaiIAIAEoAgA2AgAgBEGchAFqIgMgACgCADYCACAEQZSEAWoiBkH/ATYCACACKAIAQQJJBEAgBUG4fzYCACAFKAIAIQAgBCQFIAAPCyAEQZCEAWoiASAEQZCAAWoiCSAGIARBmIQBaiIKIAAoAgAgAigCABC+BTYCACABKAIAEMwBQQBHIQsgASgCACEAIAsEQCAFIAA2AgAgBSgCACEAIAQkBSAADwsgACACKAIATwRAIAVBuH82AgAgBSgCACEAIAQkBSAADwsgAyADKAIAIAEoAgBqNgIAIAIgAigCACABKAIAazYCACABIAQiACAJIAYoAgAgCigCABCVBTYCACABKAIAEMwBBH8gBSABKAIANgIAIAUoAgAhACAEJAUgAAUgBSAHKAIAIAgoAgAgAygCACACKAIAIAAQygU2AgAgBSgCACEAIAQkBSAACwuNDgEkfyMFIQUjBUHAAWokBSAFQbgBaiEQIAVBtAFqIRsgBUGwAWohHCAFQawBaiEdIAVBqAFqIR4gBUGkAWohFSAFQaABaiEKIAVB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AWogADYCACAFKAIAQejhAWooAgAQzQFBAEchAyAFKAIAIQAgAwRAIAYgAEHo4QFqKAIANgIAIAYoAgAhACAHJAUgAA8FIABB3OIJaiACKAIAIAEoAgAQ9AcaIAUoAgBByOABaiAFKAIAQejhAWooAgAgASgCAGs2AgAgBSgCAEGE4QFqQQE2AgAgBkEANgIAIAYoAgAhACAHJAUgAA8LAAsgBSgCAEHc4glqIAUoAgBB6OEBaigCACABKAIAa2ogAigCACABKAIAEPQHGiALIAUoAgAgBSgCAEHc4glqIAUoAgBB6OEBaigCABCoBDYCACALKAIAEM0BBEAgBiALKAIANgIAIAYoAgAhACAHJAUgAA8FIAUoAgBByOABakEDNgIAIAUoAgBBhOEBakECNgIAIAZBADYCACAGKAIAIQAgByQFIAAPCwALIAogAigCAEEDIAQQhwQ2AgAgCigCABDNAUEARyEBIAooAgAhACABBEAgBiAANgIAIAYoAgAhACAHJAUgAA8LIAUoAgBByOABaiAANgIAIAUoAgBBgOEBaiAEKAIANgIAIAUoAgBBiOIBaiAEKAIINgIAIAQoAgRBAEchACAKKAIABEAgBSgCAEGE4QFqIAAEf0EEBUEDCzYCACAGQQA2AgAgBigCACEAIAckBSAADwsgBSgCACEBIAAEQCAFKAIAQcjgAWohACABQfDgAWooAgAEQCAAQQQ2AgAgBSgCAEGE4QFqQQU2AgAFIABBADYCACAFKAIAQYThAWpBADYCAAsFIAFByOABakEDNgIAIAUoAgBBhOEBakECNgIACyAGQQA2AgAgBigCACEAIAckBSAADwsCQAJAAkACQAJAIAUoAgBBgOEBaigCAA4DAQIAAwsgAyAFKAIAIAgoAgAgCSgCACACKAIAIAEoAgBBARCXBDYCAAwDCyADIAgoAgAgCSgCACACKAIAIAEoAgAQqQQ2AgAMAgsgAyAIKAIAIAkoAgAgAigCACABKAIAIAUoAgBBiOIBaigCABDUBTYCAAwBCyAGQWw2AgAgBigCACEAIAckBSAADwsgAygCABDNAUEARyEBIAMoAgAhACABBEAgBiAANgIAIAYoAgAhACAHJAUgAA8LIAUoAgBB+OABaiIBIAEpAwAgAK18NwMAIAUoAgBB8OABaigCAARAIAUoAgBBkOEBaiAI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AygCAEGE4QFqQQI2AgALIAMoAgBB2OABaiADKAIAQdjgAWopAwBCgAhWBH4gAygCAEHY4AFqKQMABUKACAs3AwAgAygCAEHY4AFqKQMAIAMoAgBBrOIBaigCAK1WBEBBNCEBDAULIBkgAygCAEHg4AFqKAIAQQRLBH8gAygCAEHg4AFqKAIABUEECyIGNgIAIBogAygCAEHY4AFqKQMAIAMoAgBB0OABaikDABDjBTYCAAJAAkAgAygCAEGk4gFqKAIAIBkoAgBJDQAgAygCAEG04gFqKAIAIBooAgBJDQAMAQsgIiAZKAIAIBooAgBqNgIAIAMoAgBBjOIBaigCAARAICIoAgAgAygCAEGM4gFqKAIAQfDiCWtLBEBBOyEBDAcLBSADKAIAQaDiAWooAgAhBiANIAMoAgBB+OEBaiIOKQIANwIAIA0gDigCCDYCCCAGIA0Q7wEgAygCAEGk4gFqQQA2AgAgAygCAEG04gFqQQA2AgAgIigCACEGIA0gAygCAEH44QFqIg4pAgA3AgAgDSAOKAIINgIIIAYgDRDtASEGIAMoAgBBoOIBaiAGNgIAIAMoAgBBoOIBaigCAEUEQEE9IQEMBwsLIAMoAgBBpOIBaiAZKAIANgIAIAMoAgBBsOIBaiADKAIAQaDiAWooAgAgAygCAEGk4gFqKAIAajYCACADKAIAQbTiAWogGigCADYCAAsgAygCAEGc4gFqQQI2AgALIBEgAygCABDRBTYCACARKAIARQRAIAMoAgBBnOIBakEANgIAIAFBADYCAAwDCyALKAIAIAIoAgBrIBEoAgBJBEAgAigCACALKAIARgRAIAFBADYCAAwEBSADKAIAQZziAWpBAzYCAAwCCwALICMgAygCABDnBTYCACASIAMoAgAiDiADKAIAQbDiAWooAgAgAygCAEG44gFqKAIAaiAjKAIABH9BAAUgAygCAEG04gFqKAIAIAMoAgBBuOIBaigCAGsLIgYgAigCACARKAIAENMFNgIAIBIoAgAQzQEEQEHGACEBDAQLIAIgAigCACARKAIAajYCACASKAIAICMoAgByBEAgAygCAEG84gFqIAMoAgBBuOIBaigCACASKAIAajYCACADKAIAQZziAWpBBDYCAAsMAgsgJCADKAIAENEFNgIAIBMgJCgCACADKAIAQajiAWooAgBrNgIA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NgIAIAMoAgAhASAAKAIABEAgARDSBUECRkEDbCEBIAAgACgCACABajYCACAAIAAoAgAgAygCAEGo4gFqKAIAazYCACAFIAAoAgA2AgAgBSgCACEAIAQkBSAADwsgAygCAEHQ4gFqKAIAQQBHIQAgAUG84gFqKAIAIAMoAgBBuOIBaigCAEcEQCAARQRAIAcoAgBBCGoiACAAKAIAQX9qNgIAIAMoAgBB0OIBakEBNgIACyAFQQE2AgAgBSgCACEAIAQkBSAADwsCQCAABEAgBygCACgCCCAHKAIAKAIESQRAIAcoAgBBCGoiACAAKAIAQQFqNgIADAILIAMoAgBBnOIBakECNgIAIAVBATYCACAFKAIAIQAgBCQFIAAPCwsgBUEANgIAIAUoAgAhACAEJAUgAA8LQQALvggBHH8jBSEEIwVBgAFqJAUgBEHwAGohBiAEQdwAaiEQIARB2ABqIREgBEHUAGohCCAEQdAAaiESIARBzABqIQkgBEHIAGohEyAEQcQAaiEUIARBQGshFSAEQTxqIQogBEE4aiEWIARBNGohCyAEQTBqIRcgBEEsaiEYIARBKGohGSAEQSRqIQwgBEEgaiEaIARBHGohDSAEQRhqIRsgBEEUaiEcIARBEGohHSAEQQxqIQ4gBEEIaiEeIARBBGohDyAEIR8gBEHsAGoiByAANgIAIARB6ABqIgAgATYCACAEQeQAaiIFIAI2AgAgBEHgAGoiASADNgIAAkACQAJAAkACQCAAKAIAQQRrDgQDAgEABAsgHCAHKAIANgIAIB0gASgCACgCACABKAIAKAIIajYCACAOIAEoAgAoAgQgASgCACgCCGs2AgAgHiAFKAIAKAIAIAUoAgAoAghqNgIAIA8gBSgCACgCBCAFKAIAKAIIazYCACAfIBwoAgAgHigCACAPIB0oAgAgDhD4BTYCACAFKAIAQQhqIgAgACgCACAPKAIAajYCACABKAIAQQhqIgAgACgCACAOKAIAajYCACAGIB8oAgA2AgAgBigCACEAIAQkBSAADwsgGCAHKAIANgIAIBkgASgCACgCACABKAIAKAIIajYCACAMIAEoAgAoAgQgASgCACgCCGs2AgAgGiAFKAIAKAIAIAUoAgAoAghqNgIAIA0gBSgCACgCBCAFKAIAKAIIazYCACAbIBgoAgAgGigCACANIBkoAgAgDBD3BTYCACAFKAIAQQhqIgAgACgCACANKAIAajYCACABKAIAQQhqIgAgACgCACAMKAIAajYCACAGIBsoAgA2AgAgBigCACEAIAQkBSAADwsgFCAHKAIANgIAIBUgASgCACgCACABKAIAKAIIajYCACAKIAEoAgAoAgQgASgCACgCCGs2AgAgFiAFKAIAKAIAIAUoAgAoAghqNgIAIAsgBSgCACgCBCAFKAIAKAIIazYCACAXIBQoAgAgFigCACALIBUoAgAgChD2BTYCACAFKAIAQQhqIgAgACgCACALKAIAajYCACABKAIAQQhqIgAgACgCACAKKAIAajYCACAGIBcoAgA2AgAgBigCACEAIAQkBSAADwsgECAHKAIANgIAIBEgASgCACgCACABKAIAKAIIajYCACAIIAEoAgAoAgQgASgCACgCCGs2AgAgEiAFKAIAKAIAIAUoAgAoAghqNgIAIAkgBSgCACgCBCAFKAIAKAIIazYCACATIBAoAgAgEigCACAJIBEoAgAgCBD1BTYCACAFKAIAQQhqIgAgACgCACAJKAIAajYCACABKAIAQQhqIgAgACgCACAIKAIAajYCACAGIBMoAgA2AgAgBigCACEAIAQkBSAADwsgBkF0NgIAIAYoAgAhACAEJAUgAAuRBQEGfyMFIQUjBUEwaiQFIAVBIGoiBiAANgIAIAVBHGoiByABNgIAIAVBGGoiCCACNgIAIAVBFGoiCSADNgIAIAVBEGoiAyAENgIAIAcoAgAgCCgCAEcEQCAGKAIAKAIAIAcoAgAQ7AMaCyAFQSRqIQEgBUEMaiECIAVBCGohBCAFQQRqIQogBSEAAkACQAJAAkACQCAIKAIAQQRrDgQDAgEABAsgACAHKAIAIAgoAgBHBH8Q7wUFIAYoAgAoAgALNgIAIAAoAgAEQCAAKAIAIAkoAgAgAygCABDwBRogBigCACAAKAIANgIAIAFBADYCACABKAIAIQAgBSQFIAAPBSABQUA2AgAgASgCACEAIAUkBSAADwsACyAKIAcoAgAgCCgCAEcEfxDtBQUgBigCACgCAAs2AgAgCigCAARAIAooAgAgCSgCACADKAIAEO4FGiAGKAIAIAooAgA2AgAgAUEANgIAIAEoAgAhACAFJAUgAA8FIAFBQDYCACABKAIAIQAgBSQFIAAPCwALIAQgBygCACAIKAIARwR/EOsFBSAGKAIAKAIACzYCACAEKAIABEAgBCgCACAJKAIAIAMoAgAQ7AUaIAYoAgAgBCgCADYCACABQQA2AgAgASgCACEAIAUkBSAADwUgAUFANgIAIAEoAgAhACAFJAUgAA8LAAsgAiAHKAIAIAgoAgBHBH8Q9AUFIAYoAgAoAgALNgIAIAIoAgAEQCACKAIAEOkFGiACKAIAIAkoAgAgAygCABDqBRogBigCACACKAIANgIAIAFBADYCACABKAIAIQAgBSQFIAAPBSABQUA2AgAgASgCACEAIAUkBSAADwsACyABQQA2AgAgASgCACEAIAUkBSAACy4BAX8jBSEBIwVBEGokBSABIAA2AgAgASgCAEGE4QFqKAIAQQdGIQAgASQFIAALhwEBBH8jBSEEIwVBIGokBSAEQRBqIgYgADYCACAEQQxqIgUgATYCACAEQQhqIgcgAjYCACAEQQRqIgEgAzYCACAFKAIAIQIgASgCACEDIAQiACAFKAIAIAEoAgBJBH8gAgUgAws2AgAgBigCACAHKAIAIAAoAgAQ9AcaIAAoAgAhACAEJAUgAAsmAQF/IwUhASMFQRBqJAUgASAANgIAIAEoAgAQ8wUhACABJAUgAAtIAQJ/IwUhAyMFQRBqJAUgA0EIaiIEIAA2AgAgA0EEaiIAIAE2AgAgAyACNgIAIAQoAgAgACgCACADKAIAEPIFIQAgAyQFIAALzAEBBH8jBSECIwVBEGokBSACQQRqIQMgAiIBQeAAEIYGNgIAIAEoAgAEfyABKAIAIgBCADcDACAAQgA3AwggAEIANwMQIABCADcDGCAAQgA3AyAgAEIANwMoIABCADcDMCAAQgA3AzggAEFAa0IANwMAIABCADcDSCAAQgA3A1AgAEIANwNYELAEIQAgASgCACAANgIAIAEoAgBBADYCUCADIAEoAgA2AgAgAygCACEBIAIkBSABBSADQQA2AgAgAygCACEBIAIkBSABCwt9AQJ/IwUhBCMFQRBqJAUgBEEIaiIDIAA2AgAgBEEEaiIAIAE2AgAgBCACNgIAIAMoAgBBATYCUCADKAIAQQA2AkggAygCAEEANgJEIAMoAgBBADYCOCADKAIAQQA2AkwgAygCACgCACAAKAIAIAQoAgAQhQUhACAEJAUgAAu+AQEEfyMFIQIjBUEQaiQFIAJBBGohAyACIgFB0AAQhgY2AgAgASgCAAR/IAEoAgAiAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AyggAEIANwMwIABCADcDOCAAQUBrQgA3AwAgAEIANwNIELIEIQAgASgCACAANgIAIAEoAgBBADYCGCADIAEoAgA2AgAgAygCACEBIAIkBSABBSADQQA2AgAgAygCACEBIAIkBSABCwt9AQJ/IwUhBCMFQRBqJAUgBEEIaiIDIAA2AgAgBEEEaiIAIAE2AgAgBCACNgIAIAMoAgBBATYCGCADKAIAQQA2AjQgAygCAEEANgIwIAMoAgBBADYCJCADKAIAQQA2AkwgAygCACgCACAAKAIAIAQoAgAQ6gQhACAEJAUgAAs0AQJ/IwUhACMFQRBqJAUgAEGg5QApAgA3AgAgAEGo5QAoAgA2AgggABDxBSEBIAAkBSABC30BAn8jBSEEIwVBEGokBSAEQQhqIgMgADYCACAEQQRqIgAgATYCACAEIAI2AgAgAygCAEEBNgIgIAMoAgBBADYCPCADKAIAQQA2AjggAygCAEEANgIsIAMoAgBBADYCWCADKAIAKAIAIAAoAgAgBCgCABC2BCEAIAQkBSAAC5wDAQV/IwUhBCMFQSBqJAUgACgCAEUEQCAAKAIERQRAIABBoOUAKQIANwIAIABBqOUAKAIANgIICwsgBEEIaiEFIARBBGohAiAEIQMgACgCAARAIAAoAgQEQCADIAAoAghB6AAgACgCAEE/cUHIAGoRBwA2AgAgAygCAEUEQCACQQA2AgAgAigCACEAIAQkBSAADwsgAygCACIBQgA3AwAgAUIANwMIIAFCADcDECABQgA3AxggAUIANwMgIAFCADcDKCABQgA3AzAgAUIANwM4IAFBQGtCADcDACABQgA3A0ggAUIANwNQIAFCADcDWCABQgA3A2AgAygCAEHcAGoiASAAKQIANwIAIAEgACgCCDYCCCAFIAApAgA3AgAgBSAAKAIINgIIIAUQ5wQhACADKAIAIAA2AgAgAygCACEAIAMoAgAoAgAEQCAAQQA2AiAgAiADKAIANgIAIAIoAgAhACAEJAUgAA8FIAAQ8AMaIAJBADYCACACKAIAIQAgBCQFIAAPCwALCyACQQA2AgAgAigCACEAIAQkBSAAC04B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AAAAAAAAAGIEfyAARAAAAAAAAPBDoiABEKkGIQAgASgCAEFAagVBAAsiAjYCAAwBCyABIASnQf8PcUGCeGo2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvyEACyAAC6UCAAJ/IAAEfyABQYABSQRAIAAgAToAAEEBDAILQZDpACgCACgCAEUEQCABQYB/cUGAvwNGBEAgACABOgAAQQEMAwVByLUBQdQANgIAQX8MAwsACyABQYAQSQRAIAAgAUEGdkHAAXI6AAAgACABQT9xQYABcjoAAUECDAILIAFBgLADSSABQYBAcUGAwANGcgRAIAAgAUEMdkHgAXI6AAAgACABQQZ2QT9xQYABcjoAASAAIAFBP3FBgAFyOgACQQMMAgsgAUGAgHxqQYCAwABJBH8gACABQRJ2QfABcjoAACAAIAFBDHZBP3FBgAFyOgABIAAgAUEGdkE/cUGAAXI6AAIgACABQT9xQYABcjoAA0EEBUHItQFB1AA2AgBBfwsFQQELCwuTAQECfwJAAkACQANAIAJB8MUAai0AACAARg0BIAJBAWoiAkHXAEcNAAtB1wAhAgwBCyACDQBB0MYAIQAMAQtB0MYAIQADQCAAIQMDQCADQQFqIQAgAywAAARAIAAhAwwBCwsgAkF/aiICDQALCyABKAIUIgEEfyABKAIAIAEoAgQgABCZBgVBAAsiAQR/IAEFIAALC/MBAQR/AkACQCACQRBqIgQoAgAiAw0AIAIQrQYEf0EABSAEKAIAIQMMAQshAgwBCyADIAJBFGoiBSgCACIEayABSQRAIAIgACABIAIoAiRBH3FBiAFqEQUAIQIMAQsCfyACLABLQQBIIAFFcgR/QQAFIAEhAwNAIAAgA0F/aiIGaiwAAEEKRwRAIAYEQCAGIQMMAgVBAAwECwALCyACIAAgAyACKAIkQR9xQYgBahEFACICIANJDQIgACADaiEAIAEgA2shASAFKAIAIQQgAwsLIQIgBCAAIAEQ9AcaIAUgBSgCACABajYCACACIAFqIQILIAILawECfyAAQcoAaiICLAAAIQEgAiABQf8BaiABcjoAACAAKAIAIgFBCHEEfyAAIAFBIHI2AgBBfwUgAEEANgIIIABBADYCBCAAIAAoAiwiATYCHCAAIAE2AhQgACABIAAoAjBqNgIQQQALIgALOwECfyAAKAIQIABBFGoiAygCACIEayIAIAJLBEAgAiEACyAEIAEgABD0BxogAyADKAIAIABqNgIAIAILLAEBfyMFIQIjBUEQaiQFIAIgATYCAEHQ5QAoAgAgACACEJ4GIQAgAiQFIAALqwEBBn8jBSEDIwVBEGokBSADIgQgAUH/AXEiBzoAAAJAAkAgAEEQaiICKAIAIgUNACAAEK0GBH9BfwUgAigCACEFDAELIQEMAQsgAEEUaiICKAIAIgYgBUkEQCABQf8BcSIBIAAsAEtHBEAgAiAGQQFqNgIAIAYgBzoAAAwCCwsgACAEQQEgACgCJEEfcUGIAWoRBQBBAUYEfyAELQAABUF/CyEBCyADJAUgAQvCAQEFfyMFIQMjBUEwaiQFIANBIGohBSADQRBqIQQgAyECQc6TASABLAAAEJQGBEAgARCyBiEGIAIgADYCACACIAZBgIACcjYCBCACQbYDNgIIQQUgAhAMEI8GIgJBAEgEQEEAIQAFIAZBgIAgcQRAIAQgAjYCACAEQQI2AgQgBEEBNgIIQd0BIAQQCxoLIAIgARCzBiIARQRAIAUgAjYCAEEGIAUQDhpBACEACwsFQci1AUEWNgIAQQAhAAsgAyQFIAALmAEBA38gAEErEJQGRSECIAAsAAAiA0HyAEchASACBH8gAQVBAiIBC0GAAXIhAiAAQfgAEJQGBH8gAiIBBSABC0GAgCByIQIgAEHlABCUBgR/IAIiAQUgAQtBwAByIQAgA0HyAEYEfyABBSAAIgELQYAEciEAIANB9wBGBH8gAAUgASIAC0GACHIhASADQeEARgR/IAEFIAALC6IDAQd/IwUhAyMFQUBrJAUgA0EoaiEFIANBGGohBiADQRBqIQcgAyEEIANBOGohCEHOkwEgASwAABCUBgRAQYQJEIYGIgIEQCACQQBB/AAQ9gcaIAFBKxCUBkUEQCACIAEsAABB8gBGBH9BCAVBBAs2AgALIAFB5QAQlAYEQCAEIAA2AgAgBEECNgIEIARBATYCCEHdASAEEAsaCyABLAAAQeEARgRAIAcgADYCACAHQQM2AgRB3QEgBxALIgFBgAhxRQRAIAYgADYCACAGQQQ2AgQgBiABQYAIcjYCCEHdASAGEAsaCyACIAIoAgBBgAFyIgE2AgAFIAIoAgAhAQsgAiAANgI8IAIgAkGEAWo2AiwgAkGACDYCMCACQcsAaiIEQX86AAAgAUEIcUUEQCAFIAA2AgAgBUGTqAE2AgQgBSAINgIIQTYgBRANRQRAIARBCjoAAAsLIAJBFjYCICACQQM2AiQgAkECNgIoIAJBHTYCDEGMtQEoAgBFBEAgAkF/NgJMCyACELQGGgVBACECCwVByLUBQRY2AgALIAMkBSACCzEBAn8gABC1BiIBKAIANgI4IAEoAgAiAgRAIAIgADYCNAsgASAANgIAQcy1ARAPIAALDABBzLUBEAZB1LUBC4YBAQJ/AkAgAARAIAAoAkxBf0wEQCAAELkGIQAMAgsgABC5BiEBIAEhAAVB0OYAKAIABH9B0OYAKAIAELYGBUEACyEAELUGKAIAIgEEQANAIAEoAkwaQQAhAiABKAIUIAEoAhxLBEAgARC5BiAAciEACyABKAI4IgENAAsLQcy1ARAPCwsgAAupAQEFfyAAKAJMGkEAIQUgABC4BiAAKAIAQQFxQQBHIgRFBEAQtQYhAyAAQThqIQEgACgCNCICBEAgAiABKAIANgI4CyABKAIAIgEEQCABIAI2AjQLIAEhAiADKAIAIABGBEAgAyACNgIAC0HMtQEQDwsgABC2BiEDIAAgACgCDEE/cUEIahEEACEBIAAoAlwiAgRAIAIQhwYLIARFBEAgABCHBgsgASADcgtCAQF/IAAoAkQEQCAAQfAAaiEBIAAoAnQiAARAIAAgASgCADYCcAsgASgCACIBBH8gAUH0AGoFQbzpAAsgADYCAAsLngEBBn8CfwJAIABBFGoiASgCACAAQRxqIgIoAgBNDQAgAEEAQQAgACgCJEEfcUGIAWoRBQAaIAEoAgANAEF/DAELIABBBGoiAygCACIEIABBCGoiBSgCACIGSQRAIAAgBCAGa0EBIAAoAihBH3FBiAFqEQUAGgsgAEEANgIQIAJBADYCACABQQA2AgAgBUEANgIAIANBADYCAEEACyIAC2IBBH8CfwJAIAEoAkxBAEgNAAwACyAAQf8BcSEDIABB/wFxIgQgASwAS0cEQCABQRRqIgUoAgAiAiABKAIQSQRAIAUgAkEBajYCACACIAM6AAAgBAwCCwsgASAAELAGCyIACwsAIABBv39qQRpJCxcAIABBIHJBn39qQQZJIAAQlQZBAEdyCwYAQdKTAQtIAQF/IABFBEBBASEACwN/An8gABCGBiIBBEAgAQwBC0HgtQFB4LUBKAIAIgE2AgAgAQR/IAFBA3FB4AFqEQYADAIFQQALCwsLmgICBn8BfiMFIQIjBUEwaiQFIAJBGGohASACQRBqIQQgAiEDIAJBJGohBRDABiIABEAgACgCACIABEAgACkDMCIGQoB+g0KA1qyZ9MiTpsMAUgRAIAFBjZUBNgIAQduUASABEMEGCyAAQdAAaiEBIAZCgdasmfTIk6bDAFEEQCAAKAIsIQELIAUgATYCACAAKAIAIgAoAgQhAUGw3AAgACAFQbDcACgCACgCEEEfcUGIAWoRBQAEQCAFKAIAIgAgACgCACgCCEE/cUEIahEEACEAIANBjZUBNgIAIAMgATYCBCADIAA2AghBhZQBIAMQwQYFIARBjZUBNgIAIAQgATYCBEGylAEgBBDBBgsLC0GBlQEgAkEgahDBBgs8AQJ/IwUhASMFQRBqJAUgASEAQdi1AUEDECwEQEGYlgEgABDBBgVB3LUBKAIAECohACABJAUgAA8LQQALMQEBfyMFIQIjBUEQaiQFIAIgATYCAEHU5gAoAgAiASAAIAIQngYaQQogARC6BhoQKAvSAQEDfyMFIQUjBUFAayQFIAUhAyAAIAFBABDGBgR/QQEFIAEEfyABQcjcAEG43ABBABDKBiIBBH8gA0EEaiIEQgA3AgAgBEIANwIIIARCADcCECAEQgA3AhggBEIANwIgIARCADcCKCAEQQA2AjAgAyABNgIAIAMgADYCCCADQX82AgwgA0EBNgIwIAEgAyACKAIAQQEgASgCACgCHEEHcUGMA2oRCwAgAygCGEEBRgR/IAIgAygCEDYCAEEBBUEACwVBAAsFQQALCyEAIAUkBSAACx4AIAAgASgCCCAFEMYGBEBBACABIAIgAyAEEMkGCwufAQACQCAAIAEoAgggBBDGBgRAQQAgASACIAMQyAYFIAAgASgCACAEEMYGBEAgASgCECACRwRAIAFBFGoiACgCACACRwRAIAEgAzYCICAAIAI2AgAgAUEoaiIAIAAoAgBBAWo2AgAgASgCJEEBRgRAIAEoAhhBAkYEQCABQQE6ADYLCyABQQQ2AiwMBAsLIANBAUYEQCABQQE2AiALCwsLCxwAIAAgASgCCEEAEMYGBEBBACABIAIgAxDHBgsLBwAgACABRgttAQF/AkAgAUEQaiIAKAIAIgQEQCAEIAJHBEAgAUEkaiIAIAAoAgBBAWo2AgAgAUECNgIYIAFBAToANgwCCyABQRhqIgAoAgBBAkYEQCAAIAM2AgALBSAAIAI2AgAgASADNgIYIAFBATYCJAsLCyYBAX8gASgCBCACRgRAIAFBHGoiBCgCAEEBRwRAIAQgAzYCAAsLC7YBACABQQE6ADUCQCABKAIEIANGBEAgAUEBOgA0IAFBEGoiACgCACIDRQRAIAAgAjYCACABIAQ2AhggAUEBNgIkIARBAUYgASgCMEEBRnFFDQIgAUEBOgA2DAILIAMgAkcEQCABQSRqIgAgACgCAEEBajYCACABQQE6ADYMAgsgAUEYaiICKAIAIgBBAkYEQCACIAQ2AgAFIAAhBAsgASgCMEEBRiAEQQFGcQRAIAFBAToANgsLCwuGAwEHfyMFIQgjBUFAayQFIAAgACgCACIEQXhqKAIAaiEHIARBfGooAgAhBiAIIgQgAjYCACAEIAA2AgQgBCABNgIIIAQgAzYCDCAEQRRqIQAgBEEYaiEJIARBHGohCiAEQSBqIQMgBEEoaiEBIARBEGoiBUIANwIAIAVCADcCCCAFQgA3AhAgBUIANwIYIAVBADYCICAFQQA7ASQgBUEAOgAmAkAgBiACQQAQxgYEfyAEQQE2AjAgBiAEIAcgB0EBQQAgBigCACgCFEEDcUGYA2oRDAAgCSgCAEEBRgR/IAcFQQALBSAGIAQgB0EBQQAgBigCACgCGEEDcUGUA2oRDQACQAJAAkACQCAEKAIkDgIAAQILIAAoAgAhACABKAIAQQFGIAooAgBBAUZxIAMoAgBBAUZxRQRAQQAhAAsMBAsMAQtBACEADAILIAkoAgBBAUcEQCABKAIARSAKKAIAQQFGcSADKAIAQQFGcUUEQEEAIQAMAwsLIAUoAgALIQALIAgkBSAAC0QBAX8gACABKAIIIAUQxgYEQEEAIAEgAiADIAQQyQYFIAAoAggiBiABIAIgAyAEIAUgBigCACgCFEEDcUGYA2oRDAALC70CAQN/AkAgACABKAIIIAQQxgYEQEEAIAEgAiADEMgGBSAAIAEoAgAgBBDGBkUEQCAAKAIIIgAgASACIAMgBCAAKAIAKAIYQQNxQZQDahENAAwCCyABKAIQIAJHBEAgAUEUaiIFKAIAIAJHBEAgASADNgIgIAFBLGoiAygCAEEERg0DIAFBNGoiBkEAOgAAIAFBNWoiB0EAOgAAIAAoAggiACABIAIgAkEBIAQgACgCACgCFEEDcUGYA2oRDAAgAwJ/AkAgBywAAAR/IAYsAAANAUEBBUEACyEAIAUgAjYCACABQShqIgIgAigCAEEBajYCACABKAIkQQFGBEAgASgCGEECRgRAIAFBAToANiAADQJBBAwDCwsgAA0AQQQMAQtBAwsiADYCAAwDCwsgA0EBRgRAIAFBATYCIAsLCws+AQF/IAAgASgCCEEAEMYGBEBBACABIAIgAxDHBgUgACgCCCIEIAEgAiADIAQoAgAoAhxBB3FBjANqEQsACwstAQJ/IwUhACMFQRBqJAUgACEBQdy1AUHIABArBEBByZYBIAEQwQYFIAAkBQsLNAECfyMFIQEjBUEQaiQFIAEhAiAAEIcGQdy1ASgCAEEAEC0EQEH7lgEgAhDBBgUgASQFCwsLACAAIAFBABDGBguBAwEDfyMFIQUjBUFAayQFIAUhAyACIAIoAgAoAgA2AgAgACABIgRBABDGBgR/QQEFIARBqN0AQQAQxgYLBH9BAQUgAQR/IAFByNwAQYDdAEEAEMoGIgEEfyABKAIIIAAoAghBf3NxBH9BAAUgAEEMaiIAKAIAIAFBDGoiASgCAEEAEMYGBH9BAQUgACgCAEGg3QBBABDGBgR/QQEFIAAoAgAiAAR/IABByNwAQbjcAEEAEMoGIgQEfyABKAIAIgAEfyAAQcjcAEG43ABBABDKBiIBBH8gA0EEaiIAQgA3AgAgAEIANwIIIABCADcCECAAQgA3AhggAEIANwIgIABCADcCKCAAQQA2AjAgAyABNgIAIAMgBDYCCCADQX82AgwgA0EBNgIwIAEgAyACKAIAQQEgASgCACgCHEEHcUGMA2oRCwAgAygCGEEBRgR/IAIgAygCEDYCAEEBBUEACwVBAAsFQQALBUEACwVBAAsLCwsFQQALBUEACwshACAFJAUgAAsEAEEAC4QCAQh/IAAgASgCCCAFEMYGBEBBACABIAIgAyAEEMkGBSABQTRqIgYsAAAhCSABQTVqIgcsAAAhCiAAQRBqIAAoAgwiCEEDdGohCyAGQQA6AAAgB0EAOgAAIABBEGogASACIAMgBCAFENcGAkAgCEEBSgRAIAFBGGohDCAAQQhqIQggAUE2aiENIABBGGohAANAIA0sAAANAiAGLAAABEAgDCgCAEEBRg0DIAgoAgBBAnFFDQMFIAcsAAAEQCAIKAIAQQFxRQ0ECwsgBkEAOgAAIAdBADoAACAAIAEgAiADIAQgBRDXBiAAQQhqIgAgC0kNAAsLCyAGIAk6AAAgByAKOgAACwubBQEJfwJAIAAgASgCCCAEEMYGBEBBACABIAIgAxDIBgUgACABKAIAIAQQxgZFBEAgACgCDCEFIABBEGogASACIAMgBBDYBiAFQQFMDQIgAEEQaiAFQQN0aiEHIABBGGohBSAAKAIIIgZBAnFFBEAgAUEkaiIAKAIAQQFHBEAgBkEBcUUEQCABQTZqIQYDQCAGLAAADQYgACgCAEEBRg0GIAUgASACIAMgBBDYBiAFQQhqIgUgB0kNAAsMBQsgAUEYaiEGIAFBNmohCANAIAgsAAANBSAAKAIAQQFGBEAgBigCAEEBRg0GCyAFIAEgAiADIAQQ2AYgBUEIaiIFIAdJDQALDAQLCyABQTZqIQADQCAALAAADQMgBSABIAIgAyAEENgGIAVBCGoiBSAHSQ0ACwwCCyABKAIQIAJHBEAgAUEUaiILKAIAIAJHBEAgASADNgIgIAFBLGoiDCgCAEEERg0DIABBEGogACgCDEEDdGohDSABQTRqIQcgAUE1aiEGIAFBNmohCCAAQQhqIQkgAUEYaiEKQQAhAyAAQRBqIQVBACEAAn8CQAJAA0AgBSANTw0BIAdBADoAACAGQQA6AAAgBSABIAIgAkEBIAQQ1wYgCCwAAA0BAkAgBiwAAARAIAcsAABFBEAgCSgCAEEBcQRAQQEhAwwDBUEBIQMMBQsACyAKKAIAQQFGDQQgCSgCAEECcUUNBEEBIQNBASEACwsgBUEIaiEFDAALAAsgAEUEQCALIAI2AgAgAUEoaiIAIAAoAgBBAWo2AgAgASgCJEEBRgRAIAooAgBBAkYEQCAIQQE6AAAgAw0DQQQMBAsLCyADDQBBBAwBC0EDCyEAIAwgADYCAAwDCwsgA0EBRgRAIAFBATYCIAsLCwt5AQJ/AkAgACABKAIIQQAQxgYEQEEAIAEgAiADEMcGBSAAQRBqIAAoAgwiBEEDdGohBSAAQRBqIAEgAiADENYGIARBAUoEQCABQTZqIQQgAEEYaiEAA0AgACABIAIgAxDWBiAELAAADQMgAEEIaiIAIAVJDQALCwsLC1YBA38gACgCBCIFQQh1IQQgBUEBcQRAIAIoAgAgBGooAgAhBAsgACgCACIAKAIAKAIcIQYgACABIAIgBGogBUECcQR/IAMFQQILIAZBB3FBjANqEQsAC1oBA38gACgCBCIHQQh1IQYgB0EBcQRAIAMoAgAgBmooAgAhBgsgACgCACIAKAIAKAIUIQggACABIAIgAyAGaiAHQQJxBH8gBAVBAgsgBSAIQQNxQZgDahEMAAtYAQN/IAAoAgQiBkEIdSEFIAZBAXEEQCACKAIAIAVqKAIAIQULIAAoAgAiACgCACgCGCEHIAAgASACIAVqIAZBAnEEfyADBUECCyAEIAdBA3FBlANqEQ0AC4sGAQx/IwUhCyMFQeAgaiQFIAtB0CBqIQcgCyIKQZAgaiEFAkACQCAARQ0AIAFBAEciBCACRSINcQ0AIAQEfyACKAIABUEACyEMIApBgCBqIAo2AgAgBSAKENoGIAVBMGoiBEIANwIAIARBADYCCCAEQQA6AAwgBUE9aiIOQQE6AAAgBUEgaiEIIAVBJGoiBigCACIEIAUoAihJBEAgByAKENsGIARBADYCACAEQQA2AgQgBEEANgIIIAQgBygCADYCDCAGIAYoAgBBEGo2AgAFIAggChDcBgsgBUE+aiIJQQA6AAAgBUEBOgA/IAdBADYCACAAIAAgABCWBmoiDyAFIAcQ3QYCQAJAAkAgBygCACIEIAksAABFcgR/IAQhAAwBBSAIKAIAIgQgBigCAEYNAiAEKAIAIAQoAgRGDQIgCUEAOgAAIA5BADoAACAFKAIAIQYgBUEEaiIIKAIAIQQDQCAEIAZHBEAgBEFoaiIEEN4GDAELCyAIIAY2AgAgBSgCECEGIAVBFGoiCCgCACEEA0AgBCAGRwRAIARBcGoiBBDfBgwBCwsgCCAGNgIAIAAgDyAFIAcQ3QYgCSwAAAR/IAdBfjYCAEEAIQFBfgUgBygCACEADAILCyEADAILIABFDQBBACEBDAELIAVBBGoiACgCAEFoahDgBiIEQQFqIgYgDEsEQCABIAYQiQYiAUUEQCAHQX82AgBBACEBQX8hAAwCCyANRQRAIAIgBjYCAAsFIAFFBEBBACEBQQAhAAwCCwsgACgCACICQXRqIgcsAAsiCUEASCEGIAcoAgAhDCACQXhqKAIAIQggCUH/AXEhCSACQWhqIAYEfyAMBSAHCyAGBH8gCAUgCQsQ4QYaIAAoAgBBaGoiACwAC0EASARAIAAoAgAhAAsgASAAIAQQ9AcaIAEgBGpBADoAAEEAIQALIAMEQCADIAA2AgALIAVBIGoQ4gYgBUEQahDjBiAFEN8GIApBgCBqQQA2AgAMAQsgAwR/IANBfTYCAEEABUEACyEBCyALJAUgAQuPAQECfyMFIQIjBUEQaiQFIAIgATYCACAAQQA2AgAgAEEANgIEIABBADYCCCAAIAIoAgA2AgwgAiABENsGIABBEGoiA0EANgIAIANBADYCBCADQQA2AgggAyACKAIANgIMIAIgATYCACAAQSBqIgBBADYCACAAQQA2AgQgAEEANgIIIAAgAigCADYCDCACJAULCQAgACABNgIAC9sBAQl/IwUhBSMFQSBqJAUgBUEUaiEGIAUhBEH/////ACIHIABBBGoiCCgCACAAKAIAa0EEdUEBaiIDSQRAECgFIAAoAgggACgCACIJayICQQR1IAdBAXZJIQogAkEDdSICIANPBEAgAiEDCyAAQQxqIQIgBCAKBH8gAwUgBwsgCCgCACAJa0EEdSACENwHIARBCGoiAygCACECIAYgARDbBiACQQA2AgAgAkEANgIEIAJBADYCCCACIAYoAgA2AgwgAyACQRBqNgIAIAAgBBDdByAEEN4HIAUkBQsLtgIBAX8CQCAAIAFJBEACQCAALAAAQd8ARgRAIAEgAGtBA0wEQCADQX42AgAMBAsCQAJAAkACQAJAIAAsAAFB2gBrDgYAAgICAgECCyAAQQJqIgQgASACEOwGIgAgBEYgACABRnJFBEAgACwAAEEuRgRAIAAgASACEO0GIQALCyAAIAFGDQUgA0F+NgIADAcLDAELDAELIAAsAAJB3wBGBEAgACwAA0HaAEYEQCAAQQRqIgQgASACEOwGIgAgBEYgACABRnIEQCADQX42AgAMBwsgACABIAIQ7gYgAUYNBCADQX42AgAMBgsLCyADQX42AgAMAwUgACABIAIQ7wYgAUcEQCADQX42AgAMBAsLCyADKAIARQRAIAIoAgAgAigCBEYEQCADQX42AgALCwUgA0F+NgIACwsLDwAgAEEMahDrBiAAEOsGC1IBA38gACgCACICBEAgAEEEaiIDKAIAIQED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aiEADAELCyADIAZBDGoiAEECEPwGQduZARCWBiECIAMoAgQhBSADLAALIg1B/wFxIQ4gAiANQQBIBH8gBQUgDgtGBEAgA0HbmQEgAhD9BkUhAiADEOsGIAIEQCAAEOQHCwUgAxDrBgsgBCAJEIAHIARBAEHbmQEQ8gYaIAogBCkCADcCACAKIAQoAgg2AghBACECA0AgAkEDRwRAIAQgAkECdGpBADYCACACQQFqIQIMAQsLIApBkpoBEPMGGiAIIAopAgA3AgAgCCAKKAIINgIIQQAhAgNAIAJBA0cEQCAKIAJBAnRqQQA2AgAgAkEBaiECDAELCyAALAALIgVBAEghAiAAKAIAIQ0gBigCECEOIAVB/wFxIQUgCCACBH8gDQUgAAsgAgR/IA4FIAULEOEGGiAMIAgpAgA3AgAgDCAIKAIINgIIQQAhAANAIABBA0cEQCAIIABBAnRqQQA2AgAgAEEBaiEADAELCyAHKAIAIgJBdGoiAEELaiIHLAAAQQBIBEAgACgCACEHIANBADoAACAHIAMQ6AYgAkF4akEANgIABSADQQA6AAAgACADEOgGIAdBADoAAAsgABCOByAAIAwpAgA3AgAgACAMKAIINgIIQQAhAANAIABBA0cEQCAMIABBAnRqQQA2AgAgAEEBaiEADAELCyAMEOsGIAgQ6wYgChDrBiAEEOsGIAkQ3gYgBhDeBiABIQALCwsLCwsLCyALJAUgAAtEAQF/IABBADYCACAAQQRqIgNBADYCACAAQQA2AgggACACKAIANgIMIAAQ4wcgAygCACABEPQGIAMgAygCAEEYajYCAAuSAgEIfyMFIQcjBUEgaiQFIAchBUH/////ACIIIABBBGoiCSgCACAAKAIAa0EEdUEBaiIDSQRAECgFIAAoAgggACgCACIEayICQQR1IAhBAXZJIQYgAkEDdSICIANPBEAgAiEDCyAAQQxqIQIgBSAGBH8gAwUgCAsgCSgCACAEa0EEdSACENwHIAVBCGoiBigCACIEQQA2AgAgBEEEaiICQQA2AgAgBEEIaiIDQQA2AgAgBCABKAIMNgIMIAQgASgCADYCACACIAFBBGoiAigCADYCACADIAFBCGoiAygCADYCACADQQA2AgAgAkEANgIAIAFBADYCACAGIARBEGo2AgAgACAFEN0HIAUQ4gcgByQFCwvr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QfeZARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDBYLIANCADcCACADQQA2AgggA0GimgFBopoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMFQsgA0IANwIAIANBADYCCCADQaWaAUGlmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwUCyAAIAEgAhCVByEADBMLIAAgASACEJYHIQAMEgsMEQsCQAJAAkACQAJAAkAgBCwAAUHjAGsOFAAFBQUFBQUFBQECBQMFBQUFBQUEBQsgACABIAIQlwchAAwVCyAAIAEgAhCYByEADBQLIANCADcCACADQQA2AgggA0GnmgFBp5oBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMEwsgA0IANwIAIANBADYCCCADQamaAUGpmgEQlgYQjAcgAEECaiIEIAEgAyACEJQHIQEgAxDrBiABIARHBEAgASEACwwSCyAAIAEgAhCZByEADBELDBALAkACQAJAAkACQAJAAkACQAJAAkAgBCwAAUHWAGsOIQgJCQkJCQkJCQkJAAkBCQIJCQkJCQkDCQQJCQkJBQYJBwkLIARBAmoiBCABIAIQjQciASAERg0YIAIoAgAgAkEEaiICKAIARg0YIAdCADcCACAHQQA2AggCQCAKBEAgB0GrmgFBq5oBEJYGEIwHBUEAIQADQCAAQQNGDQIgByAAQQJ0akEANgIAIABBAWohAAwACwALCyAHQa6aARDzBhogBiAHKQIANwIAIAYgBygCCDYCCEEAIQADQCAAQQNHBEAgByAAQQJ0akEANgIAIABBAWohAAwBCwsgCCACKAIAQWhqEIAHIAgsAAsiBEEASCEAIAgoAgAhCSAIKAIEIQogBEH/AXEhBCAGIAAEfyAJBSAICyAABH8gCgUgBAsQ4QYaIAUgBikCADcCACAFIAYoAgg2AghBACEAA0AgAEEDRwRAIAYgAEECdGpBADYCACAAQQFqIQAMAQsLIAIoAgAiAkFoaiIAQQtqIgQsAABBAEgEQCAAKAIAIQQgA0EAOgAAIAQgAxDoBiACQWxqQQA2AgAFIANBADoAACAAIAMQ6AYgBEEAOgAACyAAEI4HIAAgBSkCADcCACAAIAUoAgg2AghBACEAA0AgAEEDRwRAIAUgAEECdGpBADYCACAAQQFqIQAMAQsLIAUQ6wYgCBDrBiAGEOsGIAcQ6wYgASEADBgLIAAgASACEJoHIQAMFwsgA0IANwIAIANBADYCCCADQfWZAUH1mQEQlgYQjAcgAEECaiIEIAEgAyACEJQHIQEgAxDrBiABIARHBEAgASEACwwWCyAEQQJqIgQgASACEI0HIgEgBEYNFSACKAIAIAJBBGoiAigCAEYNFSAHQgA3AgAgB0EANgIIAkAgCgRAIAdBq5oBQauaARCWBhCMBwVBACEAA0AgAEEDRg0CIAcgAEECdGpBADYCACAAQQFqIQAMAAsACwsgB0G4mgEQ8wYaIAYgBykCADcCACAGIAcoAgg2AghBACEAA0AgAEEDRwRAIAcgAEECdGpBADYCACAAQQFqIQAMAQsLIAggAigCAEFoahCAByAILAALIgRBAEghACAIKAIAIQkgCCgCBCEKIARB/wFxIQQgBiAABH8gCQUgCAsgAAR/IAoFIAQLEOEGGiAFIAYpAgA3AgAgBSAGKAIINgIIQQAhAANAIABBA0cEQCAGIABBAnRqQQA2AgAgAEEBaiEADAELCyACKAIAIgJBaGoiAEELaiIELAAAQQBIBEAgACgCACEEIANBADoAACAEIAMQ6AYgAkFsakEANgIABSADQQA6AAAgACADEOgGIARBADoAAAsgABCOByAAIAUpAgA3AgAgACAFKAIINgIIQQAhAANAIABBA0cEQCAFIABBAnRqQQA2AgAgAEEBaiEADAELCyAFEOsGIAgQ6wYgBhDrBiAHEOsGIAEhAAwVCyAAIAEgAhCbByEADBQLIAAgASACEJwHIQAMEwsgACABIAIQnQchAAwSCyADQgA3AgAgA0EANgIIIANBwJoBQcCaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDBELIANCADcCACADQQA2AgggA0HCmgFBwpoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMEAsMDwsCQAJAAkACQCAELAABQc8Aaw4jAQMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwIDCyADQgA3AgAgA0EANgIIIANBxZoBQcWaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDBELIANCADcCACADQQA2AgggA0HHmgFBx5oBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMEAsgA0IANwIAIANBADYCCCADQcqaAUHKmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwPCwwOCwJAAkACQCAELAABQeUAaw4QAAICAgICAgICAgICAgICAQILIANCADcCACADQQA2AgggA0HNmgFBzZoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDwsgA0IANwIAIANBADYCCCADQYeaAUGHmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwOCwwNCyAELAABQfgARw0MIABBAmoiBCABIAIQjQciCSAERg0MIAJBBGohBCAJIAEgAhCNByIBIAlGBEAgBCgCACECQQAhAQNAIAFBf0cEQCACIAFBf2oiAUEYbGoQ3gYMAQsLIAQgAkFoajYCAAwNCyAEKAIAIgkgAigCAGtBGG1BAkkNDCADIAlBaGoQgAcgBCgCACECQQAhAANAIABBf0cEQCACIABBf2oiAEEYbGoQ3gYMAQsLIAQgAkFoajYCACAFIAJBUGoQgAcgDEHjmQEgBRCPByAMQdCaARDzBhogCCAMKQIANwIAIAggDCgCCDYCCEEAIQADQCAAQQNHBEAgDCAAQQJ0akEANgIAIABBAWohAAwBCwsgAywACyICQQBIIQAgAygCACEJIAMoAgQhCiACQf8BcSECIAggAAR/IAkFIAMLIAAEfyAKBSACCxDhBhogByAIKQIANwIAIAcgCCgCCDYCCEEAIQADQCAAQQNHBEAgCCAAQQJ0akEANgIAIABBAWohAAwBCwsgB0GSmgEQ8wYaIBAgBykCADcCACAQIAcoAgg2AghBACEAA0AgAEEDRwRAIAcgAEECdGpBADYCACAAQQFqIQAMAQsLIAYgEBCDByAEKAIAQWhqIAYQhAcgBhDeBiAQEOsGIAcQ6wYgCBDrBiAMEOsGIAUQ6wYgAxDrBiABIQAMDAsCQAJAAkACQAJAIAQsAAFB0wBrDiICBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAEDBAsgA0IANwIAIANBADYCCCADQdOaAUHTmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwPCyADQgA3AgAgA0EANgIIIANB1poBQdaaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDA4LIANCADcCACADQQA2AgggA0HZmgFB2ZoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDQsgA0IANwIAIANBADYCCCADQYWaAUGFmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwMCwwLCwJAAkACQAJAAkACQCAELAABQckAaw4lAQUFAwUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUABQUCBAULIANCADcCACADQQA2AgggA0HdmgFB3ZoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDwsgA0IANwIAIANBADYCCCADQd+aAUHfmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwOCyADQgA3AgAgA0EANgIIIANB9ZkBQfWZARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDA0LIANCADcCACADQQA2AgggA0HimgFB4poBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDAsgAEECaiIEIAFHBEAgBCwAAEHfAEYEQCADQgA3AgAgA0EANgIIIANB5ZoBQeWaARCWBhCMByAAQQNqIgQgASADIAIQlAchASADEOsGIAEgBEcEQCABIQALDA0LCyAEIAEgAhCNByIBIARGDQsgAigCACACQQRqIgIoAgAiBEYNCyAGIARBaGoQgAcgBkEAQeOZARDyBhogBSAGKQIANwIAIAUgBigCCDYCCEEAIQADQCAAQQNHBEAgBiAAQQJ0akEANgIAIABBAWohAAwBCwsgBUHomgEQ8wYaIBEgBSkCADcCACARIAUoAgg2AghBACEAA0AgAEEDRwRAIAUgAEECdGpBADYCACAAQQFqIQAMAQsLIAMgERCDByACKAIAQWhqIAMQhAcgAxDeBiAREOsGIAUQ6wYgBhDrBiABIQAMCwsMCgsCQAJAAkACQAJAAkAgBCwAAUHhAGsOGAAFBQUBBQIFBQUFBQUFBQUFBQUDBQUABAULIAAgASACEJ4HIQAMDgsgA0IANwIAIANBADYCCCADQeyaAUHsmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwNCyADQgA3AgAgA0EANgIIIANB3ZoBQd2aARCWBhCMByAAQQJqIgQgASADIAIQlAchASADEOsGIAEgBEcEQCABIQALDAwLIANCADcCACADQQA2AgggA0HvmgFB75oBEJYGEIwHIABBAmoiBCABIAMgAhCUByEBIAMQ6wYgASAERwRAIAEhAAsMCwsgAEECaiIEIAEgAhCfByIBIARHBEAgASEACwwKCwwJCwJAAkACQAJAAkAgBCwAAUHSAGsOIQMEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAQQEAgQLIAAgASACEJsHIQAMDAsgA0IANwIAIANBADYCCCADQfGaAUHxmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwLCyADQgA3AgAgA0EANgIIIANB9JoBQfSaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDAoLIANCADcCACADQQA2AgggA0H2mgFB9poBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMCQsMCAsCQAJAAkACQAJAAkACQCAELAABQcwAaw4pAgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYBAAYGAwYGBAUGCyADQgA3AgAgA0EANgIIIANB+ZoBQfmaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDA0LIANCADcCACADQQA2AgggA0H9mgFB/ZoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDAsgA0IANwIAIANBADYCCCADQf+aAUH/mgEQlgYQjAcgAEECaiIEIAEg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BEAgACwAAEHMAEYEQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQQFqIgUsAABB1ABrDiYAFBQUFBQUFBQUFBMUBAIDERIQFAUICRQKCw4PFBQUBgcUFAEMDRQLDBYLIANCADcCACADQQA2AgggA0GLowFBi6MBEJYGEIwHIABBAmoiBCABIAMgAhDNByEBIAMQ6wYgASAERwRAIAEhAAsMFQsgACwAA0HFAEcNFAJAAkACQCAALAACQTBrDgIAAQILIANBk6MBEKkHIAJBBGoiBCgCACIBIAIoAghJBEAgASADEIUHIAQgBCgCAEEYajYCAAUgAiADEIYHCyADEN4GIABBBGohAAwWCyADQZmjARDOByACQQRqIgQoAgAiASACKAIISQRAIAEgAxCFByAEIAQoAgBBGGo2AgAFIAIgAxCGBwsgAxDeBiAAQQRqIQAMFQsMFAsgA0IANwIAIANBADYCCCADQZ6jAUGeowEQlgYQjAcgAEECaiIEIAEgAyACEM0HIQEgAxDrBiABIARHBEAgASEACwwTCyADQgA3AgAgA0EANgIIIANBo6MBQaOjARCWBhCMByAAQQJqIgQgASADIAIQzQchASADEOsGIAEgBEcEQCABIQALDBILIANCADcCACADQQA2AgggA0GvowFBr6MBEJYGEIwHIABBAmoiBCABIAMgAhDNByEBIAMQ6wYgASAERwRAIAEhAAsMEQsgA0IANwIAIANBADYCCCADQb2jAUG9owEQlgYQjAcgAEECaiIEIAEgAyACEM0HIQEgAxDrBiABIARHBEAgASEACwwQCyADQgA3AgAgA0EANgIIIANBw6MBQcOjARCWBhCMByAAQQJqIgQgASADIAIQzQchASADEOsGIAEgBEcEQCABIQALDA8LIANCADcCACADQQA2AgggA0HstQFB7LUBEJYGEIwHIABBAmoiBCABIAMgAhDNByEBIAMQ6wYgASAERwRAIAEhAAsMDgsgA0IANwIAIANBADYCCCADQdKjAUHSowEQlgYQjAcgAEECaiIEIAEgAyACEM0HIQEgAxDrBiABIARHBEAgASEACwwNCyADQgA3AgAgA0EANgIIIANB1KMBQdSjARCWBhCMByAAQQJqIgQgASADIAIQzQchASADEOsGIAEgBEcEQCAB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QQA6AAAgACALEOgGIARBADoAAAsgABCOByAAIAkpAgA3AgAgACAJKAIINgIIQQAhAANAIABBA0cEQCAJIABBAnRqQQA2AgAgAEEBaiEADAELCyAJEOsGIAMQ6wYgBRDrBiAHEOsGIAgQ6wYgASEADAILAkACQCAEIAEQ7QciAyAERgR/IAAhAUEDBSADIAEgAhDsBiIBIANGBH8gACEBQQAFIAIoAgAgAigCBCICRgR/IAAhAUEBBSACQWhqIQIgACwAAkH2AEYEfyACQQBB4acBEPIGGkEABSACQQBB86cBEPIGGkEACwsLCyICQQNxDgQAAQEAAQsgASEADAILIAJFBEAgASEACwsLIAYkBSAACw8AIAAoAgAgACwABDoAAAvHAQECfwJAIAAgAUcEQAJAAkACQAJAIAAsAABB6ABrDg8AAgICAgICAgICAgICAgECCyAAQQFqIgMgARCLByICIANGIAIgAUZyDQQgAkEBaiEBIAIsAABB3wBGBH8gAQUgAAsPCwwBCwwCCyAAQQFqIgMgARCLByICIANGIAIgAUZyRQRAIAIsAABB3wBGBEAgAkEBaiIDIAEQiwciAiADRiACIAFGckUEQCACQQFqIQEgAiwAAEHfAEYEQCABIQALCwsLCwsgAAsZACAALAAAQQFGBH9BAAUgAEEBOgAAQQELC0sBAn8jBSEDIwVBEGokBSADIgQgAigCADYCACAAIAEgAyAAKAIAKAIQQR9xQYgBahEFACIABEAgAiAEKAIANgIACyADJAUgAEEBcQscACAABH8gAEHI3ABBgN0AQQAQygZBAEcFQQALCwMAAQsrACAAQf8BcUEYdCAAQQh1Qf8BcUEQdHIgAEEQdUH/AXFBCHRyIABBGHZyCx0BAX8gAWciA0EgRgRAIAMgAGdqIQMLQQAkCSADC8MDAQN/IAJBgMAATgRAIAAgASACECkPCyAAIQQgACACaiEDIABBA3EgAUEDcUYEQANAIABBA3EEQCACRQRAIAQPCyAAIAEsAAA6AAAgAEEBaiEAIAFBAWohASACQQFrIQIMAQsLIANBfHEiAkFAaiEFA0AgACAFTARAIAAgASgCADYCACAAIAEoAgQ2AgQgACABKAIINgIIIAAgASgCDDYCDCAAIAEoAhA2AhAgACABKAIUNgIUIAAgASgCGDYCGCAAIAEoAhw2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AAAFAAAAAwAAAEAAAAAHAAAAFwAAABcAAAAWAAAABwAAAAMAAACAAAAABwAAABkAAAAZAAAAFwAAAAcAAAADAAAAgAAAAAgAAAAaAAAAGgAAABgAAAAHAAAAAwAAAAABAAAIAAAAGwAAABsAAAAZAAAACQAAAAMAAAAAAgAACAAAABIAAAAMAAAADQAAAAEAAAAFAAAAAQAAAAEAAAASAAAADQAAAA4AAAABAAAABgAAAAEAAAABAAAAEgAAAA4AAAANAAAAAQAAAAUAAAAIAAAAAgAAABIAAAAQAAAADwAAAAEAAAAFAAAACAAAAAIAAAASAAAADwAAABEAAAABAAAABQAAAAgAAAADAAAAEgAAABAAAAARAAAABAAAAAUAAAAIAAAAAwAAABIAAAAQAAAAEQAAAAMAAAAFAAAACAAAAAQAAAASAAAAEQAAABEAAAAEAAAABAAAAAgAAAAEAAAAEgAAABEAAAARAAAABAAAAAQAAAAIAAAABQAAABIAAAARAAAAEQAAAAUAAAAEAAAACAAAAAUAAAASAAAAEQAAABEAAAAGAAAABAAAAAgAAAAFAAAAEgAAABIAAAARAAAABgAAAAQAAAAIAAAABQAAABIAAAASAAAAEQAAAAUAAAAEAAAACAAAAAYAAAASAAAAEwAAABEAAAAHAAAABAAAAAgAAAAGAAAAEgAAABIAAAASAAAABAAAAAQAAAAQAAAABwAAABIAAAASAAAAEgAAAAQAAAADAAAAEAAAAAcAAAASAAAAEwAAABIAAAAGAAAAAwAAACAAAAAHAAAAEgAAABMAAAASAAAACAAAAAMAAABAAAAABwAAABIAAAATAAAAEgAAAAkAAAADAAAAgAAAAAcAAAASAAAAEwAAABIAAAAKAAAAAwAAAAABAAAHAAAAEgAAABMAAAASAAAACwAAAAMAAAAAAgAACAAAABIAAAATAAAAEgAAAAwAAAADAAAAAAIAAAgAAAASAAAAEwAAABIAAAANAAAAAwAAAAACAAAIAAAAEQAAAAwAAAAMAAAAAQAAAAUAAAABAAAAAQAAABEAAAAMAAAADQAAAAEAAAAGAAAAAQAAAAEAAAARAAAADQAAABAAAAABAAAABQAAAAEAAAABAAAAEQAAABAAAAAQAAAAAgAAAAUAAAAIAAAAAgAAABEAAAANAAAADwAAAAMAAAAEAAAACAAAAAMAAAARAAAADwAAABEAAAAEAAAABAAAAAgAAAADAAAAEQAAABAAAAARAAAAAwAAAAQAAAAIAAAABAAAABEAAAAPAAAAEQAAAAQAAAAEAAAACAAAAAUAAAARAAAAEQAAABEAAAAEAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAABQAAAAQAAAAIAAAABQAAABEAAAARAAAAEQAAAAYAAAAEAAAACAAAAAUAAAARAAAAEQAAABEAAAAHAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAACAAAAAQAAAAIAAAABQAAABEAAAASAAAAEQAAAAYAAAAEAAAACAAAAAYAAAARAAAAEQAAABEAAAAHAAAAAwAAAAgAAAAHAAAAEQAAABEAAAARAAAABwAAAAMAAAAQAAAABwAAABEAAAASAAAAEQAAAAcAAAADAAAAIAAAAAcAAAARAAAAEgAAABEAAAAHAAAAAwAAAEAAAAAHAAAAEQAAABIAAAARAAAABwAAAAMAAAAAAQAABwAAABEAAAASAAAAEQAAAAgAAAADAAAAAAEAAAcAAAARAAAAEgAAABEAAAAJAAAAAwAAAAABAAAIAAAAEQAAABIAAAARAAAACgAAAAMAAAAAAQAACAAAABEAAAASAAAAEQAAAAsAAAADAAAAAAIAAAgAAAAOAAAADAAAAA0AAAABAAAABQAAAAEAAAABAAAADgAAAA4AAAAOAAAAAQAAAAYAAAABAAAAAQAAAA4AAAAOAAAADgAAAAEAAAAEAAAAAQAAAAEAAAAOAAAADgAAAA4AAAABAAAABAAAAAYAAAACAAAADgAAAA4AAAAOAAAABAAAAAQAAAAGAAAAAwAAAA4AAAAOAAAADgAAAAMAAAAEAAAABgAAAAQAAAAOAAAADgAAAA4AAAAEAAAABAAAAAYAAAAFAAAADgAAAA4AAAAOAAAABQAAAAQAAAAGAAAABQAAAA4AAAAOAAAADgAAAAYAAAAEAAAABgAAAAUAAAAOAAAADwAAAA4AAAAGAAAABAAAAAYAAAAGAAAADgAAAA8AAAAOAAAAAwAAAAMAAAAGAAAABwAAAA4AAAAPAAAADgAAAAYAAAADAAAACAAAAAcAAAAOAAAADwAAAA4AAAAGAAAAAwAAABAAAAAHAAAADgAAAA8AAAAOAAAABgAAAAMAAAAYAAAABwAAAA4AAAAPAAAADwAAAAYAAAADAAAAMAAAAAcAAAAOAAAADwAAAA8AAAAGAAAAAwAAAEAAAAAHAAAADgAAAA8AAAAPAAAABgAAAAMAAABgAAAABwAAAA4AAAAPAAAADwAAAAYAAAADAAAAgAAAAAcAAAAOAAAADwAAAA8AAAAGAAAAAwAAAAABAAAHAAAADgAAAA8AAAAPAAAABwAAAAMAAAAAAQAABwAAAA4AAAAPAAAADwAAAAgAAAADAAAAAAEAAAgAAAAOAAAADwAAAA8AAAAJAAAAAwAAAAABAAAIAAAADgAAAA8AAAAPAAAACgAAAAMAAAAAAQAACAAAAAAAAAABAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AQAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAEGxHwuHAgECAwQFBgcICQoLDA0ODxAQERESEhMTFBQUFBUVFRUWFhYWFhYWFhcXFxcXFxcXGBgYGBgYGBgYGBgYGBgYGAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICAhISIiIyMkJCQkJSUlJSYmJiYmJiYmJycnJycnJycoKCgoKCgoKCgoKCgoKCgoKSkpKSkpKSkpKSkpKSkpKSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqBAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AEHAIQuqAQEAAQABAAEAAQABAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP////////////8AAAAAAAABAAQAAwACAAIAAgACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP//////////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AAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQbAyC0gEAAMAAgACAAIAAgACAAIAAgACAAIAAgACAAEAAQABAAIAAgACAAIAAgACAAIAAgACAAMAAgABAAEAAQABAAEA//////////8AQYAzC6oBAQABAAEAAQABAAEAAgACAAIAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA/////////////wAAAAAAAAEABAADAAIAAgACAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA//////////////////8AQfA0C00BAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEABBwDYLUQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEABBpDcLbQEAAAADAAAABwAAAA8AAAAfAAAAPwAAAH8AAAD/AAAA/wEAAP8DAAD/BwAA/w8AAP8fAAD/PwAA/38AAP//AAD//wEA//8DAP//BwD//w8A//8fAP//PwD//38A////AP///wH///8DAQAAAAEAQaQ4C88BAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAiAAAAJAAAACYAAAAoAAAALAAAADAAAAA4AAAAQAAAAFAAAABgAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAEGEOgvUAQEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAASAAAAFAAAABYAAAAYAAAAHAAAACAAAAAoAAAAMAAAAEAAAACAAAAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAAAAAEABAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AEHgOwvtAgEAAQABAAEAAQABAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP////////////8AAAAAAAABAAQAAwACAAIAAgACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP//////////////////AAAAAAAACAAAAAgAAAAIAAAABwAAAAgAAAAJAAAACgAAAAsAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAEAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAAAAgEAAAABAAAAAQAAAAEAAAABAEHYPgsNAQAAAAEAAAACAAAAAgBB8D4LlQMBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAQAAAAIAAAADAAAABAAAAAcAAAAIAAAADwAAABAAAAAfAAAAIAAAAD8AAABAAAAAfwAAAIAAQZDCAAsYEQAKABEREQAAAAAFAAAAAAAACQAAAAALAEGwwgALIREADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQBB4cIACwELAEHqwgALGBEACgoREREACgAAAgAJCwAAAAkACwAACwBBm8MACwEMAEGnwwALFQwAAAAADAAAAAAJDAAAAAAADAAADABB1cMACwEOAEHhwwALFQ0AAAAEDQAAAAAJDgAAAAAADgAADgBBj8QACwEQAEGbxAALHg8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgBB0sQACw4SAAAAEhISAAAAAAAACQBBg8UACwELAEGPxQALFQoAAAAACgAAAAAJCwAAAAAACwAACwBBvcUACwEMAEHJxQALfgwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRlQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABB0MYAC/0cSWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVk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AAAAAAAAAAMAAAAEAAAAAAAAAAUAAAAGAAAAAAAAANQyAAAFAEHg5QALAR0AQfjlAAsOAQAAAAIAAABIVAAAAAQAQZDmAAsBAQBBn+YACwUK/////wBB0OYACwnUMgAAWDMAAAUAQeTmAAsBHQBB/OYACwoDAAAAAgAAAOxaAEGU5wALAQIAQaPnAAsF//////8AQZDpAAsCsFoAQezpAAsBBABBk+oACwX//////wBByOoAC+09IC4AADIAAAAzAAAAHgAAAAEAAAAAAAAAOC4AADQAAAA1AAAANgAAADcAAAAFAAAAAQAAAAEAAAABAAAAAAAAAGAuAAA0AAAAOAAAADYAAAA3AAAABQAAAAIAAAACAAAAAgAAAAAAAACQLgAANAAAADkAAAA2AAAANwAAAAYAAAAAAAAAgC4AADQAAAA6AAAANgAAADcAAAAHAAAAAAAAABAvAAA0AAAAOwAAADYAAAA3AAAACAAAAAAAAAAgLwAANAAAADwAAAA2AAAANwAAAAUAAAADAAAAAwAAAAMAAABkdW1teQByYgBsZW5ndGgAYnVmZmVyAGNvbnN0cnVjdG9yAHNldABIRUFQVTgAVmVjdG9yVTgAY2xvbmVUb1ZlY3RvcgBjbG9uZUFzVHlwZWRBcnJheQB0b1R5cGVkQXJyYXlWaWV3AFpzdGRDb21wcmVzc2lvbkRpY3QAY3JlYXRlQ29tcHJlc3Npb25EaWN0AFpzdGREZWNvbXByZXNzaW9uRGljdABjcmVhdGVEZWNvbXByZXNzaW9uRGljdABac3RkQ29kZWMAY29tcHJlc3NCb3VuZABjb250ZW50U2l6ZQBjb21wcmVzcwBkZWNvbXByZXNzAGNvbXByZXNzVXNpbmdEaWN0AGRlY29tcHJlc3NVc2luZ0RpY3QAWnN0ZENvbXByZXNzU3RyZWFtQmluZGluZwBiZWdpbgBiZWdpblVzaW5nRGljdAB0cmFuc2Zvcm0AZmx1c2gAZW5kAFpzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZwBOMTBlbXNjcmlwdGVuM3ZhbEUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4yNVpzdGRDb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0UzJF8wTlNfOWFsbG9jYXRvcklTNV9FRUZ2UktOU182dmVjdG9ySWhOUzZfSWhFRUVFRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UktOU182dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFRUVFAFpOMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nOVRyYW5zZm9ybUVOMTBlbXNjcmlwdGVuM3ZhbEVTMV9FMyRfMABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfMU5TXzlhbGxvY2F0b3JJUzVfRUVGdlJLTlNfNnZlY3RvckloTlM2X0loRUVFRUVFRQBaTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfMQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzNFbmRFTjEwZW1zY3JpcHRlbjN2YWxFRTMkXzJOU185YWxsb2NhdG9ySVM1X0VFRnZSS05TXzZ2ZWN0b3JJaE5TNl9JaEVFRUVFRUUAWk4yNVpzdGRDb21wcmVzc1N0cmVhbUJpbmRpbmczRW5kRU4xMGVtc2NyaXB0ZW4zdmFsRUUzJF8yAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0UzJF8zTlNfOWFsbG9jYXRvcklTNV9FRUZ2UktOU182dmVjdG9ySWhOUzZfSWhFRUVFRUVFAFpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVMxX0UzJF8zAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc1Rmx1c2hFTjEwZW1zY3JpcHRlbjN2YWxFRTMkXzROU185YWxsb2NhdG9ySVM1X0VFRnZSS05TXzZ2ZWN0b3JJaE5TNl9JaEVFRUVFRUUAWk4yN1pzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nM0VuZEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNU5TXzlhbGxvY2F0b3JJUzVfRUVGdlJLTlNfNnZlY3RvckloTlM2X0loRUVFRUVFRQBaTjI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nM0VuZEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNQBwdXNoX2JhY2sAcmVzaXplAHNpemUAZ2V0AE5TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAE5TdDNfXzIxM19fdmVjdG9yX2Jhc2VJaE5TXzlhbGxvY2F0b3JJaEVFRUUATlN0M19fMjIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUVFAFBOU3QzX18yNnZlY3RvckloTlNfOWFsbG9jYXRvckloRUVFRQBQS05TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAGlpAHYAdmkAdmlpaQB2aWlpaQBpaWkAaWlpaQBpaWlpaQAxOVpzdGRDb21wcmVzc2lvbkRpY3QAOFJlc291cmNlSTEyWlNURF9DRGljdF9zRQBQMTlac3RkQ29tcHJlc3Npb25EaWN0AFBLMTlac3RkQ29tcHJlc3Npb25EaWN0ADIxWnN0ZERlY29tcHJlc3Npb25EaWN0ADhSZXNvdXJjZUkxMlpTVERfRERpY3Rfc0UAUDIxWnN0ZERlY29tcHJlc3Npb25EaWN0AFBLMjFac3RkRGVjb21wcmVzc2lvbkRpY3QAOVpzdGRDb2RlYwBQOVpzdGRDb2RlYwBQSzlac3RkQ29kZWMAaWlpaWlpADI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZwBQMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nAFBLMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nADI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nAFAyN1pzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZwBQSzI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nAFBGdlAxMVpTVERfQ0N0eF9zRQBGdlAxMVpTVERfQ0N0eF9zRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZQMTFaU1REX0NDdHhfc0VOU185YWxsb2NhdG9ySVM1X0VFUzRfRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZQMTFaU1REX0NDdHhfc0VFRQBQRnZQMTFaU1REX0RDdHhfc0UARnZQMTFaU1REX0RDdHhfc0UATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2UDExWlNURF9EQ3R4X3NFTlNfOWFsbG9jYXRvcklTNV9FRVM0X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UDExWlNURF9EQ3R4X3NFRUUAUEZ2UDEyWlNURF9DRGljdF9zRQBGdlAxMlpTVERfQ0RpY3Rfc0UATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2UDEyWlNURF9DRGljdF9zRU5TXzlhbGxvY2F0b3JJUzVfRUVTNF9FRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlAxMlpTVERfQ0RpY3Rfc0VFRQBQRnZQMTJaU1REX0REaWN0X3NFAEZ2UDEyWlNURF9ERGljdF9zRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZQMTJaU1REX0REaWN0X3NFTlNfOWFsbG9jYXRvcklTNV9FRVM0X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UDEyWlNURF9ERGljdF9zRUVFAFpOMThac3RkQ29tcHJlc3NTdHJlYW01QmVnaW5FaUUzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMThac3RkQ29tcHJlc3NTdHJlYW01QmVnaW5FaUUzJF8wTlNfOWFsbG9jYXRvcklTM19FRUZtUDExWlNURF9DQ3R4X3NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRm1QMTFaU1REX0NDdHhfc0VFRQBaTjE4WnN0ZENvbXByZXNzU3RyZWFtNUJlZ2luRVJLMTlac3RkQ29tcHJlc3Npb25EaWN0RTMkXzEATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4xOFpzdGRDb21wcmVzc1N0cmVhbTVCZWdpbkVSSzE5WnN0ZENvbXByZXNzaW9uRGljdEUzJF8xTlNfOWFsbG9jYXRvcklTNl9FRUZtUDExWlNURF9DQ3R4X3NFRUUAWk4yMFpzdGREZWNvbXByZXNzU3RyZWFtNUJlZ2luRXZFMyRfMgBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjIwWnN0ZERlY29tcHJlc3NTdHJlYW01QmVnaW5FdkUzJF8yTlNfOWFsbG9jYXRvcklTM19FRUZtUDExWlNURF9EQ3R4X3NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRm1QMTFaU1REX0RDdHhfc0VFRQBaTjIwWnN0ZERlY29tcHJlc3NTdHJlYW01QmVnaW5FUksyMVpzdGREZWNvbXByZXNzaW9uRGljdEUzJF8zAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjBac3RkRGVjb21wcmVzc1N0cmVhbTVCZWdpbkVSSzIxWnN0ZERlY29tcHJlc3Npb25EaWN0RTMkXzNOU185YWxsb2NhdG9ySVM2X0VFRm1QMTFaU1REX0RDdHhfc0VFRQBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUATlN0M19fMjEyYmFzaWNfc3RyaW5nSWhOU18xMWNoYXJfdHJhaXRzSWhFRU5TXzlhbGxvY2F0b3JJaEVFRUUATlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOAHJ3YQBzdGQ6OmJhZF9mdW5jdGlvbl9jYWxsAE5TdDNfXzIxN2JhZF9mdW5jdGlvbl9jYWxsRQB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzOiAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZm9yZWlnbiBleGNlcHRpb24AdGVybWluYXRpbmcAdW5jYXVnaHQAU3Q5ZXhjZXB0aW9uAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAFN0OXR5cGVfaW5mbwBOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAHB0aHJlYWRfb25jZSBmYWlsdXJlIGluIF9fY3hhX2dldF9nbG9iYWxzX2Zhc3QoKQBjYW5ub3QgY3JlYXRlIHB0aHJlYWQga2V5IGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAGNhbm5vdCB6ZXJvIG91dCB0aHJlYWQgdmFsdWUgZm9yIF9fY3hhX2dldF9nbG9iYWxzKCkAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAE4xMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fcGJhc2VfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMjNfX2Z1bmRhbWVudGFsX3R5cGVfaW5mb0UAdgBEbgBiAGMAaABhAHMAdABpAGoAbQBmAGQATjEwX19jeHhhYml2MTIwX19mdW5jdGlvbl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0UAIGNvbnN0ACB2b2xhdGlsZQAgcmVzdHJpY3QAIGNvbXBsZXgAIGltYWdpbmFyeQAgWwAgKAApACgAJiYAb2JqY19vYmplY3Q8ACoAJgBvYmpjcHJvdG8AIAA8AD4AIHZlY3RvclsAXQBwaXhlbCB2ZWN0b3JbACY9AD0ALAB+ADo6AGRlbGV0ZVtdIABkZWxldGUgAC8ALz0AXgBePQA9PQA+PQApWwA8PQA8PAA8PD0ALQAtPQAqPQAtLQApLS0AIT0AIQB8fAB8AHw9AC0+KgArACs9ACsrACkrKwApID8gKAApIDogKAAlACU9AD4+AD4+PQB0aHJvdwB0aHJvdyAAdHlwZWlkKABzaXplb2YuLi4oACwgAHNpemVvZiAoAHN0YXRpY19jYXN0PAA+KAByZWludGVycHJldF9jYXN0PAAtPgBub2V4Y2VwdCAoAFtdIAApIAAuAC4qAHN0ZDo6AG9wZXJhdG9yJiYAb3BlcmF0b3ImAG9wZXJhdG9yJj0Ab3BlcmF0b3I9AG9wZXJhdG9yKCkAb3BlcmF0b3IsAG9wZXJhdG9yfgBvcGVyYXRvciAAb3BlcmF0b3IgZGVsZXRlW10Ab3BlcmF0b3IqAG9wZXJhdG9yLwBvcGVyYXRvci89AG9wZXJhdG9yXgBvcGVyYXRvcl49AG9wZXJhdG9yPT0Ab3BlcmF0b3I+PQBvcGVyYXRvcj4Ab3BlcmF0b3JbXQBvcGVyYXRvcjw9AG9wZXJhdG9yIiIgAG9wZXJhdG9yPDwAb3BlcmF0b3I8PD0Ab3BlcmF0b3I8AG9wZXJhdG9yLQBvcGVyYXRvci09AG9wZXJhdG9yKj0Ab3BlcmF0b3ItLQBvcGVyYXRvciBuZXdbXQBvcGVyYXRvciE9AG9wZXJhdG9yIQBvcGVyYXRvciBuZXcAb3BlcmF0b3J8fABvcGVyYXRvcnwAb3BlcmF0b3J8PQBvcGVyYXRvci0+KgBvcGVyYXRvcisAb3BlcmF0b3IrPQBvcGVyYXRvcisrAG9wZXJhdG9yLT4Ab3BlcmF0b3I/AG9wZXJhdG9yJQBvcGVyYXRvciU9AG9wZXJhdG9yPj4Ab3BlcmF0b3I+Pj0Ab3BlcmF0b3IgZGVsZXRlACd1bm5hbWVkACdsYW1iZGEnKABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+AGJhc2ljX3N0cmluZwBzdGQ6OmlzdHJlYW0Ac3RkOjpiYXNpY19pc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBiYXNpY19pc3RyZWFtAHN0ZDo6b3N0cmVhbQBzdGQ6OmJhc2ljX29zdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+AGJhc2ljX29zdHJlYW0Ac3RkOjppb3N0cmVhbQBzdGQ6OmJhc2ljX2lvc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBiYXNpY19pb3N0cmVhbQBkeW5hbWljX2Nhc3Q8ACkoAGNvbnN0X2Nhc3Q8AGFsaWdub2YgKABmcAB3Y2hhcl90AGZhbHNlAHRydWUAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AHUAbAB1bABsbAB1bGwAX19pbnQxMjgAdW5zaWduZWQgX19pbnQxMjgAJUxhTAAlYQAlYWYAZGVjbHR5cGUoAHN0ZDo6YWxsb2NhdG9yAHN0ZDo6YmFzaWNfc3RyaW5nADo6c3RyaW5nIGxpdGVyYWwAc3RkAF9HTE9CQUxfX04AKGFub255bW91cyBuYW1lc3BhY2UpACA+AFRfAGlkADo6KgAgJgAgJiYAIFtdAHZvaWQAYm9vbABpbnQAdW5zaWduZWQgaW50AGxvbmcAdW5zaWduZWQgbG9uZwBsb25nIGxvbmcAZmxvYXQAbG9uZyBkb3VibGUAX19mbG9hdDEyOAAuLi4AZGVjaW1hbDY0AGRlY2ltYWwxMjgAZGVjaW1hbDMyAGRlY2ltYWwxNgBjaGFyMzJfdABjaGFyMTZfdABhdXRvAHN0ZDo6bnVsbHB0cl90AGRvdWJsZQB1bnNpZ25lZCBsb25nIGxvbmcAX2Jsb2NrX2ludm9rZQBpbnZvY2F0aW9uIGZ1bmN0aW9uIGZvciBibG9jayBpbiAAdnRhYmxlIGZvciAAVlRUIGZvciAAdHlwZWluZm8gZm9yIAB0eXBlaW5mbyBuYW1lIGZvciAAY292YXJpYW50IHJldHVybiB0aHVuayB0byAAY29uc3RydWN0aW9uIHZ0YWJsZSBmb3IgAC1pbi0AdmlydHVhbCB0aHVuayB0byAAbm9uLXZpcnR1YWwgdGh1bmsgdG8gAGd1YXJkIHZhcmlhYmxlIGZvciAAcmVmZXJlbmNlIHRlbXBvcmFyeSBmb3Ig\";var asmjsCodeFile=\"\";if(!isDataURI(wasmTextFile)){wasmTextFile=locateFile(wasmTextFile);}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile);}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=locateFile(asmjsCodeFile);}var wasmPageSize=64*1024;var info={\"global\":null,\"env\":null,\"asm2wasm\":asm2wasmImports,\"parent\":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module[\"buffer\"];if(newBuffer.byteLength<oldBuffer.byteLength){err(\"the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here\");}var oldView=new Int8Array(oldBuffer);var newView=new Int8Array(newBuffer);newView.set(oldView);updateGlobalBuffer(newBuffer);updateGlobalBufferViews();}function fixImports(imports){return imports;}function getBinary(){try{if(Module[\"wasmBinary\"]){return new Uint8Array(Module[\"wasmBinary\"]);}var binary=tryParseAsDataURI(wasmBinaryFile);if(binary){return binary;}if(Module[\"readBinary\"]){return Module[\"readBinary\"](wasmBinaryFile);}else{throw\"both async and sync fetching of the wasm failed\";}}catch(err){abort(err);}}function getBinaryPromise(){if(!Module[\"wasmBinary\"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\";}return response[\"arrayBuffer\"]();}).catch(function(){return getBinary();});}return new Promise(function(resolve,reject){resolve(getBinary());});}function doNativeWasm(global,env,providedBuffer){if((typeof WebAssembly==='undefined'?'undefined':_typeof(WebAssembly))!==\"object\"){err(\"no native wasm support detected\");return false;}if(!(Module[\"wasmMemory\"]instanceof WebAssembly.Memory)){err(\"no native wasm Memory in use\");return false;}env[\"memory\"]=Module[\"wasmMemory\"];info[\"global\"]={\"NaN\":NaN,\"Infinity\":Infinity};info[\"global.Math\"]=Math;info[\"env\"]=env;function receiveInstance(instance,module){exports=instance.exports;if(exports.memory)mergeMemory(exports.memory);Module[\"asm\"]=exports;Module[\"usingWasm\"]=true;removeRunDependency(\"wasm-instantiate\");}addRunDependency(\"wasm-instantiate\");if(Module[\"instantiateWasm\"]){try{return Module[\"instantiateWasm\"](info,receiveInstance);}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false;}}function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"],output[\"module\"]);}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info);}).then(receiver).catch(function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason);});}if(!Module[\"wasmBinary\"]&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&typeof fetch===\"function\"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:\"same-origin\"}),info).then(receiveInstantiatedSource).catch(function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource);});}else{instantiateArrayBuffer(receiveInstantiatedSource);}return{};}Module[\"asmPreload\"]=Module[\"asm\"];var asmjsReallocBuffer=Module[\"reallocBuffer\"];var wasmReallocBuffer=function wasmReallocBuffer(size){var PAGE_MULTIPLE=Module[\"usingWasm\"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;size=alignUp(size,PAGE_MULTIPLE);var old=Module[\"buffer\"];var oldSize=old.byteLength;if(Module[\"usingWasm\"]){try{var result=Module[\"wasmMemory\"].grow((size-oldSize)/wasmPageSize);if(result!==(-1|0)){return Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;}else{return null;}}catch(e){return null;}}};Module[\"reallocBuffer\"]=function(size){if(finalMethod===\"asmjs\"){return asmjsReallocBuffer(size);}else{return wasmReallocBuffer(size);}};var finalMethod=\"\";Module[\"asm\"]=function(global,env,providedBuffer){env=fixImports(env);if(!env[\"table\"]){var TABLE_SIZE=Module[\"wasmTableSize\"];if(TABLE_SIZE===undefined)TABLE_SIZE=1024;var MAX_TABLE_SIZE=Module[\"wasmMaxTableSize\"];if((typeof WebAssembly==='undefined'?'undefined':_typeof(WebAssembly))===\"object\"&&typeof WebAssembly.Table===\"function\"){if(MAX_TABLE_SIZE!==undefined){env[\"table\"]=new WebAssembly.Table({\"initial\":TABLE_SIZE,\"maximum\":MAX_TABLE_SIZE,\"element\":\"anyfunc\"});}else{env[\"table\"]=new WebAssembly.Table({\"initial\":TABLE_SIZE,element:\"anyfunc\"});}}else{env[\"table\"]=new Array(TABLE_SIZE);}Module[\"wasmTable\"]=env[\"table\"];}if(!env[\"memoryBase\"]){env[\"memoryBase\"]=Module[\"STATIC_BASE\"];}if(!env[\"tableBase\"]){env[\"tableBase\"]=0;}var exports;exports=doNativeWasm(global,env,providedBuffer);assert(exports,\"no binaryen method succeeded.\");return exports;};}integrateWasmJS();STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+23280;__ATINIT__.push({func:function func(){__GLOBAL__sub_I_zstd_binding_cc();}},{func:function func(){__GLOBAL__sub_I_bind_cpp();}});var STATIC_BUMP=23280;Module[\"STATIC_BASE\"]=STATIC_BASE;Module[\"STATIC_BUMP\"]=STATIC_BUMP;var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___cxa_allocate_exception(size){return _malloc(size);}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception;}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function deAdjust(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var key in EXCEPTIONS.infos){var ptr=+key;var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr;}}return adjusted;},addRef:function addRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++;},decRef:function decRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module[\"dynCall_vi\"](info.destructor,ptr);}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr);}},clearRef:function clearRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0;}};function ___cxa_begin_catch(ptr){var info=EXCEPTIONS.infos[ptr];if(info&&!info.caught){info.caught=true;__ZSt18uncaught_exceptionv.uncaught_exception--;}if(info)info.rethrown=false;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr;}function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr;}throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\";}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0;}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0;}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module[\"___cxa_is_pointer_type\"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i<typeArray.length;i++){if(typeArray[i]&&Module[\"___cxa_can_catch\"](typeArray[i],throwntype,thrown)){thrown=HEAP32[thrown>>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0;}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0;}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};EXCEPTIONS.last=ptr;if(!(\"uncaught_exception\"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1;}else{__ZSt18uncaught_exceptionv.uncaught_exception++;}throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\";}function ___gxx_personality_v0(){}function ___lock(){}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var ERRNO_MESSAGES={0:\"Success\",1:\"Not super-user\",2:\"No such file or directory\",3:\"No such process\",4:\"Interrupted system call\",5:\"I/O error\",6:\"No such device or address\",7:\"Arg list too long\",8:\"Exec format error\",9:\"Bad file number\",10:\"No children\",11:\"No more processes\",12:\"Not enough core\",13:\"Permission denied\",14:\"Bad address\",15:\"Block device required\",16:\"Mount device busy\",17:\"File exists\",18:\"Cross-device link\",19:\"No such device\",20:\"Not a directory\",21:\"Is a directory\",22:\"Invalid argument\",23:\"Too many open files in system\",24:\"Too many open files\",25:\"Not a typewriter\",26:\"Text file busy\",27:\"File too large\",28:\"No space left on device\",29:\"Illegal seek\",30:\"Read only file system\",31:\"Too many links\",32:\"Broken pipe\",33:\"Math arg out of domain of func\",34:\"Math result not representable\",35:\"File locking deadlock error\",36:\"File or path name too long\",37:\"No record locks available\",38:\"Function not implemented\",39:\"Directory not empty\",40:\"Too many symbolic links\",42:\"No message of desired type\",43:\"Identifier removed\",44:\"Channel number out of range\",45:\"Level 2 not synchronized\",46:\"Level 3 halted\",47:\"Level 3 reset\",48:\"Link number out of range\",49:\"Protocol driver not attached\",50:\"No CSI structure available\",51:\"Level 2 halted\",52:\"Invalid exchange\",53:\"Invalid request descriptor\",54:\"Exchange full\",55:\"No anode\",56:\"Invalid request code\",57:\"Invalid slot\",59:\"Bad font file fmt\",60:\"Device not a stream\",61:\"No data (for no delay io)\",62:\"Timer expired\",63:\"Out of streams resources\",64:\"Machine is not on the network\",65:\"Package not installed\",66:\"The object is remote\",67:\"The link has been severed\",68:\"Advertise error\",69:\"Srmount error\",70:\"Communication error on send\",71:\"Protocol error\",72:\"Multihop attempted\",73:\"Cross mount point (not really error)\",74:\"Trying to read unreadable message\",75:\"Value too large for defined data type\",76:\"Given log. name not unique\",77:\"f.d. invalid for this operation\",78:\"Remote address changed\",79:\"Can   access a needed shared lib\",80:\"Accessing a corrupted shared lib\",81:\".lib section in a.out corrupted\",82:\"Attempting to link in too many libs\",83:\"Attempting to exec a shared library\",84:\"Illegal byte sequence\",86:\"Streams pipe error\",87:\"Too many users\",88:\"Socket operation on non-socket\",89:\"Destination address required\",90:\"Message too long\",91:\"Protocol wrong type for socket\",92:\"Protocol not available\",93:\"Unknown protocol\",94:\"Socket type not supported\",95:\"Not supported\",96:\"Protocol family not supported\",97:\"Address family not supported by protocol family\",98:\"Address already in use\",99:\"Address not available\",100:\"Network interface is not configured\",101:\"Network is unreachable\",102:\"Connection reset by network\",103:\"Connection aborted\",104:\"Connection reset by peer\",105:\"No buffer space available\",106:\"Socket is already connected\",107:\"Socket is not connected\",108:\"Can't send after socket shutdown\",109:\"Too many references\",110:\"Connection timed out\",111:\"Connection refused\",112:\"Host is down\",113:\"Host is unreachable\",114:\"Socket already connected\",115:\"Connection already in progress\",116:\"Stale file handle\",122:\"Quota exceeded\",123:\"No medium (in tape drive)\",125:\"Operation canceled\",130:\"Previous owner died\",131:\"State not recoverable\"};function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value;}var PATH={splitPath:function splitPath(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1);},normalizeArray:function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1);}else if(last===\"..\"){parts.splice(i,1);up++;}else if(up){parts.splice(i,1);up--;}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\");}}return parts;},normalize:function normalize(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p;}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\";}if(path&&trailingSlash){path+=\"/\";}return(isAbsolute?\"/\":\"\")+path;},dirname:function dirname(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\";}if(dir){dir=dir.substr(0,dir.length-1);}return root+dir;},basename:function basename(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1);},extname:function extname(path){return PATH.splitPath(path)[3];},join:function join(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"));},join2:function join2(l,r){return PATH.normalize(l+\"/\"+r);},resolve:function resolve(){var resolvedPath=\"\",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!==\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\");}else if(!path){return\"\";}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=path.charAt(0)===\"/\";}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter(function(p){return!!p;}),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\";},relative:function relative(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break;}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break;}if(start>end)return[];return arr.slice(start,end-start+1);}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break;}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\");}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\");}};var TTY={ttys:[],init:function init(){},shutdown:function shutdown(){},register:function register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops);},stream_ops:{open:function open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}stream.tty=tty;stream.seekable=false;},close:function close(stream){stream.tty.ops.flush(stream.tty);},flush:function flush(stream){stream.tty.ops.flush(stream.tty);},read:function read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO);}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result;}if(bytesRead){stream.node.timestamp=Date.now();}return bytesRead;},write:function write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO);}for(var i=0;i<length;i++){try{stream.tty.ops.put_char(stream.tty,buffer[offset+i]);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}}if(length){stream.node.timestamp=Date.now();}return i;}},default_tty_ops:{get_char:function get_char(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!=\"win32\";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync(\"/dev/stdin\",\"r\");usingDevice=true;}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null);}catch(e){if(e.toString().indexOf(\"EOF\")!=-1)bytesRead=0;else throw e;}if(usingDevice){fs.closeSync(fd);}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\");}else{result=null;}}else if(typeof window!=\"undefined\"&&typeof window.prompt==\"function\"){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\";}}else if(typeof readline==\"function\"){result=readline();if(result!==null){result+=\"\\n\";}}if(!result){return null;}tty.input=intArrayFromString(result,true);}return tty.input.shift();},put_char:function put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[];}else{if(val!=0)tty.output.push(val);}},flush:function flush(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[];}}},default_tty1_ops:{put_char:function put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[];}else{if(val!=0)tty.output.push(val);}},flush:function flush(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[];}}}};var MEMFS={ops_table:null,mount:function mount(_mount){return MEMFS.createNode(null,\"/\",16384|511,0);},createNode:function createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={};}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null;}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream;}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream;}node.timestamp=Date.now();if(parent){parent.contents[name]=node;}return node;},getFileDataAsRegularArray:function getFileDataAsRegularArray(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i<node.usedBytes;++i){arr.push(node.contents[i]);}return arr;}return node.contents;},getFileDataAsTypedArray:function getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array();if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents);},expandFileStorage:function expandFileStorage(node,newCapacity){if(node.contents&&node.contents.subarray&&newCapacity>node.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length;}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return;}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.length<newCapacity){node.contents.push(0);}},resizeFileStorage:function resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return;}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)));}node.usedBytes=newSize;return;}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length<newSize){node.contents.push(0);}node.usedBytes=newSize;},node_ops:{getattr:function getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096;}else if(FS.isFile(node.mode)){attr.size=node.usedBytes;}else if(FS.isLink(node.mode)){attr.size=node.link.length;}else{attr.size=0;}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr;},setattr:function setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode;}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp;}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size);}},lookup:function lookup(parent,name){throw FS.genericErrors[ERRNO_CODES.ENOENT];},mknod:function mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev);},rename:function rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir;},unlink:function unlink(parent,name){delete parent.contents[name];},rmdir:function rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}delete parent.contents[name];},readdir:function readdir(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node;},readlink:function readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return node.link;}},stream_ops:{read:function read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset);}else{for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i];}}return size;},write:function write(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length;}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length;}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length;}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i];}}node.usedBytes=Math.max(node.usedBytes,position+length);return length;},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes;}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;},allocate:function allocate(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset;}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length);}else{contents=Array.prototype.slice.call(contents,position,position+length);}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);}buffer.set(contents,ptr);}return{ptr:ptr,allocated:allocated};},msync:function msync(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}if(mmapFlags&2){return 0;}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0;}}};var IDBFS={dbs:{},indexedDB:function(_indexedDB){function indexedDB(){return _indexedDB.apply(this,arguments);}indexedDB.toString=function(){return _indexedDB.toString();};return indexedDB;}(function(){if(typeof indexedDB!==\"undefined\")return indexedDB;var ret=null;if((typeof window==='undefined'?'undefined':_typeof(window))===\"object\")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,\"IDBFS used, but indexedDB not supported\");return ret;}),DB_VERSION:21,DB_STORE_NAME:\"FILE_DATA\",mount:function mount(_mount2){return MEMFS.mount.apply(null,arguments);},syncfs:function syncfs(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback);});});},getDB:function getDB(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db);}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION);}catch(e){return callback(e);}if(!req){return callback(\"Unable to connect to IndexedDB\");}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME);}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME);}if(!fileStore.indexNames.contains(\"timestamp\")){fileStore.createIndex(\"timestamp\",\"timestamp\",{unique:false});}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db);};req.onerror=function(e){callback(this.error);e.preventDefault();};},getLocalSet:function getLocalSet(mount,callback){var entries={};function isRealDir(p){return p!==\".\"&&p!==\"..\";}function toAbsolute(root){return function(p){return PATH.join2(root,p);};}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path);}catch(e){return callback(e);}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));}entries[path]={timestamp:stat.mtime};}return callback(null,{type:\"local\",entries:entries});},getRemoteSet:function getRemoteSet(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readonly\");transaction.onerror=function(e){callback(this.error);e.preventDefault();};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index(\"timestamp\");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:\"remote\",db:db,entries:entries});}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue();};}catch(e){return callback(e);}});},loadLocalEntry:function loadLocalEntry(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path);}catch(e){return callback(e);}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode});}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents});}else{return callback(new Error(\"node type not supported\"));}},storeLocalEntry:function storeLocalEntry(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode);}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true});}else{return callback(new Error(\"node type not supported\"));}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp);}catch(e){return callback(e);}callback(null);},removeLocalEntry:function removeLocalEntry(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path);}else if(FS.isFile(stat.mode)){FS.unlink(path);}}catch(e){return callback(e);}callback(null);},loadRemoteEntry:function loadRemoteEntry(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result);};req.onerror=function(e){callback(this.error);e.preventDefault();};},storeRemoteEntry:function storeRemoteEntry(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null);};req.onerror=function(e){callback(this.error);e.preventDefault();};},removeRemoteEntry:function removeRemoteEntry(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null);};req.onerror=function(e){callback(this.error);e.preventDefault();};},reconcile:function reconcile(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++;}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++;}});if(!total){return callback(null);}var completed=0;var db=src.type===\"remote\"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readwrite\");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err);}return;}if(++completed>=total){return callback(null);}}transaction.onerror=function(e){done(this.error);e.preventDefault();};create.sort().forEach(function(path){if(dst.type===\"local\"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done);});}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done);});}});remove.sort().reverse().forEach(function(path){if(dst.type===\"local\"){IDBFS.removeLocalEntry(path,done);}else{IDBFS.removeRemoteEntry(store,path,done);}});}};var NODEFS={isWindows:false,staticInit:function staticInit(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process[\"binding\"](\"constants\");if(flags[\"fs\"]){flags=flags[\"fs\"];}NODEFS.flagsForNodeMap={\"1024\":flags[\"O_APPEND\"],\"64\":flags[\"O_CREAT\"],\"128\":flags[\"O_EXCL\"],\"0\":flags[\"O_RDONLY\"],\"2\":flags[\"O_RDWR\"],\"4096\":flags[\"O_SYNC\"],\"512\":flags[\"O_TRUNC\"],\"1\":flags[\"O_WRONLY\"]};},bufferFrom:function bufferFrom(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer);},mount:function mount(_mount3){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,\"/\",NODEFS.getMode(_mount3.opts.root),0);},createNode:function createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node;},getMode:function getMode(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2;}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}return stat.mode;},realPath:function realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent;}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts);},flagsForNode:function flagsForNode(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k;}}if(!flags){return newFlags;}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}},node_ops:{getattr:function getattr(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096;}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0;}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks};},setattr:function setattr(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode;}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date);}if(attr.size!==undefined){fs.truncateSync(path,attr.size);}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},lookup:function lookup(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode);},mknod:function mknod(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode);}else{fs.writeFileSync(path,\"\",{mode:node.mode});}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}return node;},rename:function rename(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},unlink:function unlink(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},rmdir:function rmdir(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},readdir:function readdir(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},symlink:function symlink(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},readlink:function readlink(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path;}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}}},stream_ops:{open:function open(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags));}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},close:function close(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd);}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},read:function read(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},write:function write(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size;}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function mount(_mount4){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync();var root=WORKERFS.createNode(null,\"/\",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split(\"/\");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join(\"/\");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0);}parent=createdParents[curr];}return parent;}function base(path){var parts=path.split(\"/\");return parts[parts.length-1];}Array.prototype.forEach.call(_mount4.opts[\"files\"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate);});(_mount4.opts[\"blobs\"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj[\"name\"]),base(obj[\"name\"]),WORKERFS.FILE_MODE,0,obj[\"data\"]);});(_mount4.opts[\"packages\"]||[]).forEach(function(pack){pack[\"metadata\"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack[\"blob\"].slice(file.start,file.end));});});return root;},createNode:function createNode(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date()).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents;}else{node.size=4096;node.contents={};}if(parent){parent.contents[name]=node;}return node;},node_ops:{getattr:function getattr(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)};},setattr:function setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode;}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp;}},lookup:function lookup(parent,name){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);},mknod:function mknod(parent,name,mode,dev){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},rename:function rename(oldNode,newDir,newName){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},unlink:function unlink(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},rmdir:function rmdir(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},readdir:function readdir(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newName,oldPath){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},readlink:function readlink(node){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}},stream_ops:{read:function read(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size;},write:function write(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO);},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size;}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;}}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function handleFSError(e){if(!(e instanceof FS.ErrnoError))throw e+\" : \"+stackTrace();return ___setErrNo(e.errno);},lookupPath:function lookupPath(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:\"\",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key];}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP);}var parts=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p;}),false);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break;}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root;}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP);}}}}return{path:current_path,node:current};},getPath:function getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?mount+\"/\"+path:mount+path;}path=path?node.name+\"/\"+path:node.name;node=node.parent;}},hashName:function hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0;}return(parentid+hash>>>0)%FS.nameTable.length;},hashAddNode:function hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node;},hashRemoveNode:function hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next;}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break;}current=current.name_next;}}},lookupNode:function lookupNode(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent);}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node;}}return FS.lookup(parent,name);},createNode:function createNode(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this;}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function get(){return(this.mode&readMode)===readMode;},set:function set(val){val?this.mode|=readMode:this.mode&=~readMode;}},write:{get:function get(){return(this.mode&writeMode)===writeMode;},set:function set(val){val?this.mode|=writeMode:this.mode&=~writeMode;}},isFolder:{get:function get(){return FS.isDir(this.mode);}},isDevice:{get:function get(){return FS.isChrdev(this.mode);}}});}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node;},destroyNode:function destroyNode(node){FS.hashRemoveNode(node);},isRoot:function isRoot(node){return node===node.parent;},isMountpoint:function isMountpoint(node){return!!node.mounted;},isFile:function isFile(mode){return(mode&61440)===32768;},isDir:function isDir(mode){return(mode&61440)===16384;},isLink:function isLink(mode){return(mode&61440)===40960;},isChrdev:function isChrdev(mode){return(mode&61440)===8192;},isBlkdev:function isBlkdev(mode){return(mode&61440)===24576;},isFIFO:function isFIFO(mode){return(mode&61440)===4096;},isSocket:function isSocket(mode){return(mode&49152)===49152;},flagModes:{\"r\":0,\"rs\":1052672,\"r+\":2,\"w\":577,\"wx\":705,\"xw\":705,\"w+\":578,\"wx+\":706,\"xw+\":706,\"a\":1089,\"ax\":1217,\"xa\":1217,\"a+\":1090,\"ax+\":1218,\"xa+\":1218},modeStringToFlags:function modeStringToFlags(str){var flags=FS.flagModes[str];if(typeof flags===\"undefined\"){throw new Error(\"Unknown file open mode: \"+str);}return flags;},flagsToPermissionString:function flagsToPermissionString(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\";}return perms;},nodePermissions:function nodePermissions(node,perms){if(FS.ignorePermissions){return 0;}if(perms.indexOf(\"r\")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES;}else if(perms.indexOf(\"w\")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES;}else if(perms.indexOf(\"x\")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES;}return 0;},mayLookup:function mayLookup(dir){var err=FS.nodePermissions(dir,\"x\");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0;},mayCreate:function mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST;}catch(e){}return FS.nodePermissions(dir,\"wx\");},mayDelete:function mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name);}catch(e){return e.errno;}var err=FS.nodePermissions(dir,\"wx\");if(err){return err;}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR;}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY;}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR;}}return 0;},mayOpen:function mayOpen(node,flags){if(!node){return ERRNO_CODES.ENOENT;}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP;}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!==\"r\"||flags&512){return ERRNO_CODES.EISDIR;}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags));},MAX_OPEN_FDS:4096,nextfd:function nextfd(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd;}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE);},getStream:function getStream(fd){return FS.streams[fd];},createStream:function createStream(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function get(){return this.node;},set:function set(val){this.node=val;}},isRead:{get:function get(){return(this.flags&2097155)!==1;}},isWrite:{get:function get(){return(this.flags&2097155)!==0;}},isAppend:{get:function get(){return this.flags&1024;}}});}var newStream=new FS.FSStream();for(var p in stream){newStream[p]=stream[p];}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream;},closeStream:function closeStream(fd){FS.streams[fd]=null;},chrdev_stream_ops:{open:function open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream);}},llseek:function llseek(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}},major:function major(dev){return dev>>8;},minor:function minor(dev){return dev&255;},makedev:function makedev(ma,mi){return ma<<8|mi;},registerDevice:function registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops};},getDevice:function getDevice(dev){return FS.devices[dev];},getMounts:function getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts);}return mounts;},syncfs:function syncfs(populate,callback){if(typeof populate===\"function\"){callback=populate;populate=false;}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log(\"warning: \"+FS.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err);}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err);}return;}if(++completed>=mounts.length){doCallback(null);}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null);}mount.type.syncfs(mount,populate,done);});},mount:function mount(type,opts,mountpoint){var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot;}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount);}}return mountRoot;},unmount:function unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current);}current=next;}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1);},lookup:function lookup(parent,name){return parent.node_ops.lookup(parent,name);},mknod:function mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name===\".\"||name===\"..\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return parent.node_ops.mknod(parent,name,mode,dev);},create:function create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0);},mkdir:function mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0);},mkdirTree:function mkdirTree(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+=\"/\"+dirs[i];try{FS.mkdir(d,mode);}catch(e){if(e.errno!=ERRNO_CODES.EEXIST)throw e;}}},mkdev:function mkdev(path,mode,dev){if(typeof dev===\"undefined\"){dev=mode;mode=438;}mode|=8192;return FS.mknod(path,mode,dev);},symlink:function symlink(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return parent.node_ops.symlink(parent,newname,oldpath);},rename:function rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV);}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(old_node===new_node){return;}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err);}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err);}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,\"w\");if(err){throw new FS.ErrnoError(err);}}try{if(FS.trackingDelegate[\"willMovePath\"]){FS.trackingDelegate[\"willMovePath\"](old_path,new_path);}}catch(e){console.log(\"FS.trackingDelegate['willMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message);}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);}catch(e){throw e;}finally{FS.hashAddNode(old_node);}try{if(FS.trackingDelegate[\"onMovePath\"])FS.trackingDelegate[\"onMovePath\"](old_path,new_path);}catch(e){console.log(\"FS.trackingDelegate['onMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message);}},rmdir:function rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path);}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message);}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path);}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message);}},readdir:function readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}return node.node_ops.readdir(node);},unlink:function unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path);}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message);}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path);}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message);}},readlink:function readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link));},stat:function stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return node.node_ops.getattr(node);},lstat:function lstat(path){return FS.stat(path,true);},chmod:function chmod(path,mode,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()});},lchmod:function lchmod(path,mode){FS.chmod(path,mode,true);},fchmod:function fchmod(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}FS.chmod(stream.node,mode);},chown:function chown(path,uid,gid,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}node.node_ops.setattr(node,{timestamp:Date.now()});},lchown:function lchown(path,uid,gid){FS.chown(path,uid,gid,true);},fchown:function fchown(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}FS.chown(stream.node,uid,gid);},truncate:function truncate(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var err=FS.nodePermissions(node,\"w\");if(err){throw new FS.ErrnoError(err);}node.node_ops.setattr(node,{size:len,timestamp:Date.now()});},ftruncate:function ftruncate(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}FS.truncate(stream.node,len);},utime:function utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)});},open:function open(path,flags,mode,fd_start,fd_end){if(path===\"\"){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}flags=typeof flags===\"string\"?FS.modeStringToFlags(flags):flags;mode=typeof mode===\"undefined\"?438:mode;if(flags&64){mode=mode&4095|32768;}else{mode=0;}var node;if((typeof path==='undefined'?'undefined':_typeof(path))===\"object\"){node=path;}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node;}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST);}}else{node=FS.mknod(path,mode,0);created=true;}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(FS.isChrdev(node.mode)){flags&=~512;}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err);}}if(flags&512){FS.truncate(node,0);}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream);}if(Module[\"logReadFiles\"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;err(\"read file: \"+path);}}try{if(FS.trackingDelegate[\"onOpenFile\"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ;}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE;}FS.trackingDelegate[\"onOpenFile\"](path,trackingFlags);}}catch(e){console.log(\"FS.trackingDelegate['onOpenFile']('\"+path+\"', flags) threw an exception: \"+e.message);}return stream;},close:function close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream);}}catch(e){throw e;}finally{FS.closeStream(stream.fd);}stream.fd=null;},isClosed:function isClosed(stream){return stream.fd===null;},llseek:function llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position;},read:function read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position;}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead;},write:function write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(stream.flags&1024){FS.llseek(stream,0,2);}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position;}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate[\"onWriteToFile\"])FS.trackingDelegate[\"onWriteToFile\"](stream.path);}catch(e){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+path+\"') threw an exception: \"+e.message);}return bytesWritten;},allocate:function allocate(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);}stream.stream_ops.allocate(stream,offset,length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES);}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags);},msync:function msync(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0;}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags);},munmap:function munmap(stream){return 0;},ioctl:function ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);}return stream.stream_ops.ioctl(stream,cmd,arg);},readFile:function readFile(path,opts){opts=opts||{};opts.flags=opts.flags||\"r\";opts.encoding=opts.encoding||\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){throw new Error('Invalid encoding type \"'+opts.encoding+'\"');}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){ret=UTF8ArrayToString(buf,0);}else if(opts.encoding===\"binary\"){ret=buf;}FS.close(stream);return ret;},writeFile:function writeFile(path,data,opts){opts=opts||{};opts.flags=opts.flags||\"w\";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data===\"string\"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn);}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);}else{throw new Error(\"Unsupported data type\");}FS.close(stream);},cwd:function cwd(){return FS.currentPath;},chdir:function chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}var err=FS.nodePermissions(lookup.node,\"x\");if(err){throw new FS.ErrnoError(err);}FS.currentPath=lookup.path;},createDefaultDirectories:function createDefaultDirectories(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\");},createDefaultDevices:function createDefaultDevices(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:function read(){return 0;},write:function write(stream,buffer,offset,length,pos){return length;}});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var random_device;if(typeof crypto!==\"undefined\"){var randomBuffer=new Uint8Array(1);random_device=function random_device(){crypto.getRandomValues(randomBuffer);return randomBuffer[0];};}else if(ENVIRONMENT_IS_NODE){random_device=function random_device(){return require(\"crypto\")[\"randomBytes\"](1)[0];};}else{random_device=function random_device(){return Math.random()*256|0;};}FS.createDevice(\"/dev\",\"random\",random_device);FS.createDevice(\"/dev\",\"urandom\",random_device);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\");},createSpecialDirectories:function createSpecialDirectories(){FS.mkdir(\"/proc\");FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount:function mount(){var node=FS.createNode(\"/proc/self\",\"fd\",16384|511,73);node.node_ops={lookup:function lookup(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function readlink(){return stream.path;}}};ret.parent=ret;return ret;}};return node;}},{},\"/proc/self/fd\");},createStandardStreams:function createStandardStreams(){if(Module[\"stdin\"]){FS.createDevice(\"/dev\",\"stdin\",Module[\"stdin\"]);}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\");}if(Module[\"stdout\"]){FS.createDevice(\"/dev\",\"stdout\",null,Module[\"stdout\"]);}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\");}if(Module[\"stderr\"]){FS.createDevice(\"/dev\",\"stderr\",null,Module[\"stderr\"]);}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\");}var stdin=FS.open(\"/dev/stdin\",\"r\");assert(stdin.fd===0,\"invalid handle for stdin (\"+stdin.fd+\")\");var stdout=FS.open(\"/dev/stdout\",\"w\");assert(stdout.fd===1,\"invalid handle for stdout (\"+stdout.fd+\")\");var stderr=FS.open(\"/dev/stderr\",\"w\");assert(stderr.fd===2,\"invalid handle for stderr (\"+stderr.fd+\")\");},ensureErrnoError:function ensureErrnoError(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break;}}};this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack)Object.defineProperty(this,\"stack\",{value:new Error().stack,writable:true});};FS.ErrnoError.prototype=new Error();FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=\"<generic error, no stack>\";});},staticInit:function staticInit(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={\"MEMFS\":MEMFS,\"IDBFS\":IDBFS,\"NODEFS\":NODEFS,\"WORKERFS\":WORKERFS};},init:function init(input,output,error){assert(!FS.init.initialized,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");FS.init.initialized=true;FS.ensureErrnoError();Module[\"stdin\"]=input||Module[\"stdin\"];Module[\"stdout\"]=output||Module[\"stdout\"];Module[\"stderr\"]=error||Module[\"stderr\"];FS.createStandardStreams();},quit:function quit(){FS.init.initialized=false;var fflush=Module[\"_fflush\"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue;}FS.close(stream);}},getMode:function getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode;},joinPath:function joinPath(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]==\"/\")path=path.substr(1);return path;},absolutePath:function absolutePath(relative,base){return PATH.resolve(base,relative);},standardizePath:function standardizePath(path){return PATH.normalize(path);},findObject:function findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object;}else{___setErrNo(ret.error);return null;}},analyzePath:function analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path;}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\";}catch(e){ret.error=e.errno;}return ret;},createFolder:function createFolder(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode);},createPath:function createPath(parent,path,canRead,canWrite){parent=typeof parent===\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current);}catch(e){}parent=current;}return current;},createFile:function createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode);},createDataFile:function createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data===\"string\"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i){arr[i]=data.charCodeAt(i);}data=arr;}FS.chmod(node,mode|146);var stream=FS.open(node,\"w\");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode);}return node;},createDevice:function createDevice(parent,name,input,output){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function open(stream){stream.seekable=false;},close:function close(stream){if(output&&output.buffer&&output.buffer.length){output(10);}},read:function read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input();}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result;}if(bytesRead){stream.node.timestamp=Date.now();}return bytesRead;},write:function write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i]);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}}if(length){stream.node.timestamp=Date.now();}return i;}});return FS.mkdev(path,mode,dev);},createLink:function createLink(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);return FS.symlink(target,path);},forceLoadFile:function forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!==\"undefined\"){throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");}else if(Module[\"read\"]){try{obj.contents=intArrayFromString(Module[\"read\"](obj.url),true);obj.usedBytes=obj.contents.length;}catch(e){success=false;}}else{throw new Error(\"Cannot load without read() or XMLHttpRequest.\");}if(!success)___setErrNo(ERRNO_CODES.EIO);return success;},createLazyFile:function createLazyFile(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[];}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined;}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset];};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter;};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest();xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function doXHR(from,to){if(from>to)throw new Error(\"invalid range (\"+from+\", \"+to+\") or no bytes requested!\");if(to>datalength-1)throw new Error(\"only \"+datalength+\" bytes available! programmer error!\");var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);if(typeof Uint8Array!=\"undefined\")xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[]);}else{return intArrayFromString(xhr.responseText||\"\",true);}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]===\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end);}if(typeof lazyArray.chunks[chunkNum]===\"undefined\")throw new Error(\"doXHR failed!\");return lazyArray.chunks[chunkNum];});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log(\"LazyFiles on gzip forces download of the whole file when length is accessed\");}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true;};if(typeof XMLHttpRequest!==\"undefined\"){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var lazyArray=new LazyUint8Array();Object.defineProperties(lazyArray,{length:{get:function get(){if(!this.lengthKnown){this.cacheLength();}return this._length;}},chunkSize:{get:function get(){if(!this.lengthKnown){this.cacheLength();}return this._chunkSize;}}});var properties={isDevice:false,contents:lazyArray};}else{var properties={isDevice:false,url:url};}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents;}else if(properties.url){node.contents=null;node.url=properties.url;}Object.defineProperties(node,{usedBytes:{get:function get(){return this.contents.length;}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO);}return fn.apply(null,arguments);};});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO);}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i];}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i);}}return size;};node.stream_ops=stream_ops;return node;},createPreloadedFile:function createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(\"cp \"+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn);}if(onload)onload();removeRunDependency(dep);}var handled=false;Module[\"preloadPlugins\"].forEach(function(plugin){if(handled)return;if(plugin[\"canHandle\"](fullname)){plugin[\"handle\"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep);});handled=true;}});if(!handled)finish(byteArray);}addRunDependency(dep);if(typeof url==\"string\"){Browser.asyncLoad(url,function(byteArray){processData(byteArray);},onerror);}else{processData(url);}},indexedDB:function indexedDB(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;},DB_NAME:function DB_NAME(){return\"EM_FS_\"+window.location.pathname;},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function saveFilesToDB(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION);}catch(e){return onerror(e);}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log(\"creating db\");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME);};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],\"readwrite\");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror();}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish();};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish();};});transaction.onerror=onerror;};openRequest.onerror=onerror;},loadFilesFromDB:function loadFilesFromDB(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION);}catch(e){return onerror(e);}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],\"readonly\");}catch(e){onerror(e);return;}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror();}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path);}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish();};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish();};});transaction.onerror=onerror;};openRequest.onerror=onerror;}};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function calculateAt(dirfd,path){if(path[0]!==\"/\"){var dir;if(dirfd===-100){dir=FS.cwd();}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path;}path=PATH.join2(dir,path);}return path;},doStat:function doStat(func,path,buf){try{var stat=func(path);}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR;}throw e;}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0;},doMsync:function doMsync(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags);},doMkdir:function doMkdir(path,mode){path=PATH.normalize(path);if(path[path.length-1]===\"/\")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0;},doMknod:function doMknod(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL;}FS.mknod(path,mode,dev);return 0;},doReadlink:function doReadlink(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len;},doAccess:function doAccess(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL;}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms=\"\";if(amode&4)perms+=\"r\";if(amode&2)perms+=\"w\";if(amode&1)perms+=\"x\";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES;}return 0;},doDup:function doDup(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd;},doReadv:function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break;}return ret;},doWritev:function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;}return ret;},varargs:0,get:function get(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret;},getStr:function getStr(){var ret=Pointer_stringify(SYSCALLS.get());return ret;},getStreamFromFD:function getStreamFromFD(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream;},getSocketFromFD:function getSocketFromFD(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket;},getSocketAddress:function getSocketAddress(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info;},get64:function get64(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low;},getZero:function getZero(){assert(SYSCALLS.get()===0);}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt);}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt);}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL;}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd;};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0;};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0;};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL;}}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0;};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL;};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp);};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};default:abort(\"bad ioctl syscall \"+op);}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+size);}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i);}embind_charCodes=codes;}var embind_charCodes=undefined;function readLatin1String(ptr){var ret=\"\";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]];}return ret;}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return\"_unknown\";}name=name.replace(/[^a-zA-Z0-9_]/g,\"$\");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return\"_\"+name;}else{return name;}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function(\"body\",\"return function \"+name+\"() {\\n\"+'    \"use strict\";'+\"    return body.apply(this, arguments);\\n\"+\"};\\n\")(body);}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+\"\\n\"+stack.replace(/^Error(:[^\\n]*)?\\n/,\"\");}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name;}else{return this.name+\": \"+this.message;}};return errorClass;}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message);}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message);}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes;});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError(\"Mismatched type converter count\");}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i]);}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach(function(dt,i){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt];}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[];}awaitingDependencies[dt].push(function(){typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters);}});}});if(0===unregisteredTypes.length){onComplete(typeConverters);}}function registerType(rawType,registeredInstance,options){options=options||{};if(!(\"argPackAdvance\"in registeredInstance)){throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");}var name=registeredInstance.name;if(!rawType){throwBindingError('type \"'+name+'\" must have a positive integer typeid pointer');}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return;}else{throwBindingError(\"Cannot register type '\"+name+\"' twice\");}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(function(cb){cb();});}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(wt){return!!wt;},\"toWireType\":function toWireType(destructors,o){return o?trueValue:falseValue;},\"argPackAdvance\":8,\"readValueFromPointer\":function readValueFromPointer(pointer){var heap;if(size===1){heap=HEAP8;}else if(size===2){heap=HEAP16;}else if(size===4){heap=HEAP32;}else{throw new TypeError(\"Unknown boolean type size: \"+name);}return this[\"fromWireType\"](heap[pointer>>shift]);},destructorFunction:null});}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false;}if(!(other instanceof ClassHandle)){return false;}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass;}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass;}return leftClass===rightClass&&left===right;}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType};}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name;}throwBindingError(getInstanceTypeName(obj)+\" instance already deleted\");}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this;}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone;}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr);}else{$$.ptrType.registeredClass.rawDestructor($$.ptr);}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\");}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this);}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined;}}function ClassHandle_isDeleted(){return!this.$$.ptr;}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj[\"delete\"]();}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\");}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes);}this.$$.deleteScheduled=true;return this;}function init_ClassHandle(){ClassHandle.prototype[\"isAliasOf\"]=ClassHandle_isAliasOf;ClassHandle.prototype[\"clone\"]=ClassHandle_clone;ClassHandle.prototype[\"delete\"]=ClassHandle_delete;ClassHandle.prototype[\"isDeleted\"]=ClassHandle_isDeleted;ClassHandle.prototype[\"deleteLater\"]=ClassHandle_deleteLater;}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError(\"Function '\"+humanName+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+proto[methodName].overloadTable+\")!\");}return proto[methodName].overloadTable[arguments.length].apply(this,arguments);};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc;}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(\"Cannot register public name '\"+name+\"' twice\");}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError(\"Cannot register multiple overloads of a function with the same number of arguments (\"+numArguments+\")!\");}Module[name].overloadTable[numArguments]=value;}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments;}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[];}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(\"Expected null or instance of \"+desiredClass.name+\", got an instance of \"+ptrClass.name);}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass;}return ptr;}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}return 0;}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr;}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr);}return ptr;}else{return 0;}}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError(\"Passing raw pointer to smart pointer is illegal\");}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr;}else{throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name);}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr;}else{var clonedHandle=handle[\"clone\"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle[\"delete\"]();}));if(destructors!==null){destructors.push(this.rawDestructor,ptr);}}break;default:throwBindingError(\"Unsupporting sharing policy\");}}return ptr;}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}return 0;}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}if(handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+handle.$$.ptrType.name+\" to parameter type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr;}function simpleReadValueFromPointer(pointer){return this[\"fromWireType\"](HEAPU32[pointer>>2]);}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr);}return ptr;}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr);}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle[\"delete\"]();}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr;}if(undefined===desiredClass.baseClass){return null;}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null;}return desiredClass.downcast(rv);}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length;}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k]);}}return rv;}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes);}}function init_embind(){Module[\"getInheritedInstanceCount\"]=getInheritedInstanceCount;Module[\"getLiveInheritedInstances\"]=getLiveInheritedInstances;Module[\"flushPendingDeletes\"]=flushPendingDeletes;Module[\"setDelayFunction\"]=setDelayFunction;}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError(\"ptr should not be undefined\");}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass;}return ptr;}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr];}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError(\"makeClassHandle requires ptr and ptrType\");}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError(\"Both smartPtrType and smartPtr must be specified\");}record.count={value:1};return Object.create(prototype,{$$:{value:record}});}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null;}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance[\"clone\"]();}else{var rv=registeredInstance[\"clone\"]();this.destructor(ptr);return rv;}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr});}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr});}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this);}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType;}else{toType=registeredPointerRecord.pointerType;}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this);}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr});}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp});}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype[\"argPackAdvance\"]=8;RegisteredPointer.prototype[\"readValueFromPointer\"]=simpleReadValueFromPointer;RegisteredPointer.prototype[\"deleteObject\"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype[\"fromWireType\"]=RegisteredPointer_fromWireType;}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this[\"toWireType\"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null;}else{this[\"toWireType\"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null;}}else{this[\"toWireType\"]=genericPointerToWireType;}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError(\"Replacing nonexistant public symbol\");}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value;}else{Module[name]=value;Module[name].argCount=numArguments;}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i<signature.length;++i){args.push(\"a\"+i);}var name=\"dynCall_\"+signature+\"_\"+rawFunction;var body=\"return function \"+name+\"(\"+args.join(\", \")+\") {\\n\";body+=\"    return dynCall(rawFunction\"+(args.length?\", \":\"\")+args.join(\", \")+\");\\n\";body+=\"};\\n\";return new Function(\"dynCall\",\"rawFunction\",body)(dynCall,rawFunction);}var fp;if(Module[\"FUNCTION_TABLE_\"+signature]!==undefined){fp=Module[\"FUNCTION_TABLE_\"+signature][rawFunction];}else if(typeof FUNCTION_TABLE!==\"undefined\"){fp=FUNCTION_TABLE[rawFunction];}else{var dc=Module[\"asm\"][\"dynCall_\"+signature];if(dc===undefined){dc=Module[\"asm\"][\"dynCall_\"+signature.replace(/f/g,\"d\")];if(dc===undefined){throwBindingError(\"No dynCall invoker for signature: \"+signature);}}fp=makeDynCaller(dc);}if(typeof fp!==\"function\"){throwBindingError(\"unknown function pointer with signature \"+signature+\": \"+rawFunction);}return fp;}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv;}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return;}if(registeredTypes[type]){return;}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return;}unboundTypes.push(type);seen[type]=true;}types.forEach(visit);throw new UnboundTypeError(message+\": \"+unboundTypes.map(getTypeName).join([\", \"]));}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast);}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast);}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(\"Cannot construct \"+name+\" due to unbound types\",[baseClassRawType]);});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype;}else{basePrototype=ClassHandle.prototype;}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(\"Use 'new' to construct \"+name);}if(undefined===registeredClass.constructor_body){throw new BindingError(name+\" has no accessible constructor\");}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError(\"Tried to invoke ctor of \"+name+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(registeredClass.constructor_body).toString()+\") parameters instead!\");}return body.apply(this,arguments);});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+\"*\",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+\" const*\",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter];});}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAP32[(firstElement>>2)+i]);}return array;}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr);}}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=\"constructor \"+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[];}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(\"Cannot register multiple constructors with identical number of parameters (\"+(argCount-1)+\") for class '\"+classType.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError(\"Cannot construct \"+classType.name+\" due to unbound types\",rawArgTypes);};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+\" called with \"+arguments.length+\" arguments, expected \"+(argCount-1));}var destructors=[];var args=new Array(argCount);args[0]=rawConstructor;for(var i=1;i<argCount;++i){args[i]=argTypes[i][\"toWireType\"](destructors,arguments[i-1]);}var ptr=invoker.apply(null,args);runDestructors(destructors);return argTypes[0][\"fromWireType\"](ptr);};return[];});return[];});}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError(\"new_ called with constructor type \"+(typeof constructor==='undefined'?'undefined':_typeof(constructor))+\" which is not a function\");}var dummy=createNamedFunction(constructor.name||\"unknownFunctionName\",function(){});dummy.prototype=constructor.prototype;var obj=new dummy();var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj;}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break;}}var returns=argTypes[0].name!==\"void\";var argsList=\"\";var argsListWired=\"\";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;argsListWired+=(i!==0?\", \":\"\")+\"arg\"+i+\"Wired\";}var invokerFnBody=\"return function \"+makeLegalFunctionName(humanName)+\"(\"+argsList+\") {\\n\"+\"if (arguments.length !== \"+(argCount-2)+\") {\\n\"+\"throwBindingError('function \"+humanName+\" called with ' + arguments.length + ' arguments, expected \"+(argCount-2)+\" args!');\\n\"+\"}\\n\";if(needsDestructorStack){invokerFnBody+=\"var destructors = [];\\n\";}var dtorStack=needsDestructorStack?\"destructors\":\"null\";var args1=[\"throwBindingError\",\"invoker\",\"fn\",\"runDestructors\",\"retType\",\"classParam\"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+=\"var thisWired = classParam.toWireType(\"+dtorStack+\", this);\\n\";}for(var i=0;i<argCount-2;++i){invokerFnBody+=\"var arg\"+i+\"Wired = argType\"+i+\".toWireType(\"+dtorStack+\", arg\"+i+\"); // \"+argTypes[i+2].name+\"\\n\";args1.push(\"argType\"+i);args2.push(argTypes[i+2]);}if(isClassMethodFunc){argsListWired=\"thisWired\"+(argsListWired.length>0?\", \":\"\")+argsListWired;}invokerFnBody+=(returns?\"var rv = \":\"\")+\"invoker(fn\"+(argsListWired.length>0?\", \":\"\")+argsListWired+\");\\n\";if(needsDestructorStack){invokerFnBody+=\"runDestructors(destructors);\\n\";}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?\"thisWired\":\"arg\"+(i-2)+\"Wired\";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+\"_dtor(\"+paramName+\"); // \"+argTypes[i].name+\"\\n\";args1.push(paramName+\"_dtor\");args2.push(argTypes[i].destructorFunction);}}}if(returns){invokerFnBody+=\"var ret = retType.fromWireType(rv);\\n\"+\"return ret;\\n\";}else{}invokerFnBody+=\"}\\n\";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction;}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+\".\"+methodName;if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName);}function unboundTypesHandler(){throwUnboundTypeError(\"Cannot call \"+humanName+\" due to unbound types\",rawArgTypes);}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler;}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler;}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction;}else{proto[methodName].overloadTable[argCount-2]=memberFunction;}return[];});return[];});}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle);}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count;}}return count;}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i];}}return null;}function init_emval(){Module[\"count_emval_handles\"]=count_emval_handles;Module[\"get_first_emval\"]=get_first_emval;}function __emval_register(value){switch(value){case undefined:{return 1;};case null:{return 2;};case true:{return 3;};case false:{return 4;};default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle;}}}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv;},\"toWireType\":function toWireType(destructors,value){return __emval_register(value);},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:null});}function _embind_repr(v){if(v===null){return\"null\";}var t=typeof v==='undefined'?'undefined':_typeof(v);if(t===\"object\"||t===\"array\"||t===\"function\"){return v.toString();}else{return\"\"+v;}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this[\"fromWireType\"](HEAPF32[pointer>>2]);};case 3:return function(pointer){return this[\"fromWireType\"](HEAPF64[pointer>>3]);};default:throw new TypeError(\"Unknown float type: \"+name);}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){return value;},\"toWireType\":function toWireType(destructors,value){if(typeof value!==\"number\"&&typeof value!==\"boolean\"){throw new TypeError('Cannot convert \"'+_embind_repr(value)+'\" to '+this.name);}return value;},\"argPackAdvance\":8,\"readValueFromPointer\":floatReadValueFromPointer(name,shift),destructorFunction:null});}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError(\"Cannot call \"+name+\" due to unbound types\",argTypes);},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[];});}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer];}:function readU8FromPointer(pointer){return HEAPU8[pointer];};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1];}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1];};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2];}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2];};default:throw new TypeError(\"Unknown integer type: \"+name);}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295;}var shift=getShiftFromSize(size);var fromWireType=function fromWireType(value){return value;};if(minRange===0){var bitshift=32-8*size;fromWireType=function fromWireType(value){return value<<bitshift>>>bitshift;};}var isUnsignedType=name.indexOf(\"unsigned\")!=-1;registerType(primitiveType,{name:name,\"fromWireType\":fromWireType,\"toWireType\":function toWireType(destructors,value){if(typeof value!==\"number\"&&typeof value!==\"boolean\"){throw new TypeError('Cannot convert \"'+_embind_repr(value)+'\" to '+this.name);}if(value<minRange||value>maxRange){throw new TypeError('Passing a number \"'+_embind_repr(value)+'\" from JS side to C/C++ side to an argument of type \"'+name+'\", which is outside the valid range ['+minRange+\", \"+maxRange+\"]!\");}return isUnsignedType?value>>>0:value|0;},\"argPackAdvance\":8,\"readValueFromPointer\":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null});}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap[\"buffer\"],data,size);}name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":decodeMemoryView,\"argPackAdvance\":8,\"readValueFromPointer\":decodeMemoryView},{ignoreDuplicateRegistrations:true});}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name===\"std::string\";registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var endChar=HEAPU8[value+4+length];var endCharSwap=0;if(endChar!=0){endCharSwap=endChar;HEAPU8[value+4+length]=0;}var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0){var stringSegment=UTF8ToString(decodeStartPtr);if(str===undefined)str=stringSegment;else{str+=String.fromCharCode(0);str+=stringSegment;}decodeStartPtr=currentBytePtr+1;}}if(endCharSwap!=0)HEAPU8[value+4+length]=endCharSwap;}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[value+4+i]);}str=a.join(\"\");}_free(value);return str;},\"toWireType\":function toWireType(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value);}var getLength;var valueIsOfTypeString=typeof value===\"string\";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError(\"Cannot pass non-string to std::string\");}if(stdStringIsUTF8&&valueIsOfTypeString){getLength=function getLength(){return lengthBytesUTF8(value);};}else{getLength=function getLength(){return value.length;};}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1);}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError(\"String has UTF-16 code units that do not fit in 8 bits\");}HEAPU8[ptr+4+i]=charCode;}}else{for(var i=0;i<length;++i){HEAPU8[ptr+4+i]=value[i];}}}if(destructors!==null){destructors.push(_free,ptr);}return ptr;},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function destructorFunction(ptr){_free(ptr);}});}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var getHeap,shift;if(charSize===2){getHeap=function getHeap(){return HEAPU16;};shift=1;}else if(charSize===4){getHeap=function getHeap(){return HEAPU32;};shift=2;}registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){var HEAP=getHeap();var length=HEAPU32[value>>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAP[start+i]);}_free(value);return a.join(\"\");},\"toWireType\":function toWireType(destructors,value){var HEAP=getHeap();var length=value.length;var ptr=_malloc(4+length*charSize);HEAPU32[ptr>>2]=length;var start=ptr+4>>shift;for(var i=0;i<length;++i){HEAP[start+i]=value.charCodeAt(i);}if(destructors!==null){destructors.push(_free,ptr);}return ptr;},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function destructorFunction(ptr){_free(ptr);}});}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,\"argPackAdvance\":0,\"fromWireType\":function fromWireType(){return undefined;},\"toWireType\":function toWireType(destructors,o){return undefined;}});}function requireHandle(handle){if(!handle){throwBindingError(\"Cannot use deleted val. handle = \"+handle);}return emval_handle_array[handle].value;}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+\" has unknown type \"+getTypeName(rawType));}return impl;}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,\"emval::as\");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType[\"toWireType\"](destructors,handle);}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAP32[(argTypes>>2)+i],\"parameter \"+i);}return a;}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i<argCount;++i){var type=types[i];args[i]=type[\"readValueFromPointer\"](argv);argv+=type[\"argPackAdvance\"];}var rv=handle.apply(undefined,args);return __emval_register(rv);}function __emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>2]=__emval_register(destructors);return destructors;}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address);}else{return symbol;}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args);}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id;}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+\"_$\"+types.slice(1).map(function(t){return t.name;}).join(\"_\")+\"$\";var params=[\"retType\"];var args=[retType];var argsList=\"\";for(var i=0;i<argCount-1;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;params.push(\"argType\"+i);args.push(types[1+i]);}var functionName=makeLegalFunctionName(\"methodCaller_\"+signatureName);var functionBody=\"return function \"+functionName+\"(handle, name, destructors, args) {\\n\";var offset=0;for(var i=0;i<argCount-1;++i){functionBody+=\"    var arg\"+i+\" = argType\"+i+\".readValueFromPointer(args\"+(offset?\"+\"+offset:\"\")+\");\\n\";offset+=types[i+1][\"argPackAdvance\"];}functionBody+=\"    var rv = handle[name](\"+argsList+\");\\n\";for(var i=0;i<argCount-1;++i){if(types[i+1][\"deleteObject\"]){functionBody+=\"    argType\"+i+\".deleteObject(arg\"+i+\");\\n\";}}if(!retType.isVoid){functionBody+=\"    return retType.toWireType(destructors, rv);\\n\";}functionBody+=\"};\\n\";params.push(functionBody);var invokerFunction=new_(Function,params).apply(null,args);return __emval_addMethodCaller(invokerFunction);}function __emval_get_module_property(name){name=getStringOrSymbol(name);return __emval_register(Module[name]);}function __emval_get_property(handle,key){handle=requireHandle(handle);key=requireHandle(key);return __emval_register(handle[key]);}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1;}}function craftEmvalAllocator(argCount){var argsList=\"\";for(var i=0;i<argCount;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;}var functionBody=\"return function emval_allocator_\"+argCount+\"(constructor, argTypes, args) {\\n\";for(var i=0;i<argCount;++i){functionBody+=\"var argType\"+i+\" = requireRegisteredType(HEAP32[(argTypes >> 2) + \"+i+'], \"parameter '+i+'\");\\n'+\"var arg\"+i+\" = argType\"+i+\".readValueFromPointer(args);\\n\"+\"args += argType\"+i+\"['argPackAdvance'];\\n\";}functionBody+=\"var obj = new constructor(\"+argsList+\");\\n\"+\"return __emval_register(obj);\\n\"+\"}\\n\";return new Function(\"requireRegisteredType\",\"HEAP32\",\"__emval_register\",functionBody)(requireRegisteredType,HEAP32,__emval_register);}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer;}return newer(handle,argTypes,args);}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v));}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle);}function __emval_take_value(type,argv){type=requireRegisteredType(type,\"_emval_take_value\");var v=type[\"readValueFromPointer\"](argv);return __emval_register(v);}function _abort(){Module[\"abort\"]();}function _llvm_cttz_i32(x){x=x|0;return(x?31-(Math_clz32(x^x-1)|0)|0:32)|0;}function _llvm_cttz_i64(l,h){var ret=_llvm_cttz_i32(l);if(ret==32)ret+=_llvm_cttz_i32(h);return(setTempRet0(0),ret)|0;}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest;}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0;}var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL;}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0;}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module[\"dynCall_v\"](func);_pthread_once.seen[ptr]=1;}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL;}PTHREAD_SPECIFIC[key]=value;return 0;}FS.staticInit();__ATINIT__.unshift(function(){if(!Module[\"noFSInit\"]&&!FS.init.initialized)FS.init();});__ATMAIN__.push(function(){FS.ignorePermissions=false;});__ATEXIT__.push(function(){FS.quit();});__ATINIT__.unshift(function(){TTY.init();});__ATEXIT__.push(function(){TTY.shutdown();});if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var NODEJS_PATH=require(\"path\");NODEFS.staticInit();}embind_init_charCodes();BindingError=Module[\"BindingError\"]=extendError(Error,\"BindingError\");InternalError=Module[\"InternalError\"]=extendError(Error,\"InternalError\");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module[\"UnboundTypeError\"]=extendError(Error,\"UnboundTypeError\");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array;}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\")  at offset \"+i+\" not in 0x00-0xFF.\");}chr&=255;}ret.push(String.fromCharCode(chr));}return ret.join(\"\");}var decodeBase64=typeof atob===\"function\"?atob:function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2);}if(enc4!==64){output=output+String.fromCharCode(chr3);}}while(i<input.length);return output;};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE===\"boolean\"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,\"base64\");}catch(_){buf=new Buffer(s,\"base64\");}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength);}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i);}return bytes;}catch(_){throw new Error(\"Converting base64 string to bytes failed.\");}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return;}return intArrayFromBase64(filename.slice(dataURIPrefix.length));}Module[\"wasmTableSize\"]=412;Module[\"wasmMaxTableSize\"]=412;function invoke_i(index){var sp=_stackSave();try{return Module[\"dynCall_i\"](index);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_ii(index,a1){var sp=_stackSave();try{return Module[\"dynCall_ii\"](index,a1);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iii(index,a1,a2){var sp=_stackSave();try{return Module[\"dynCall_iii\"](index,a1,a2);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiii(index,a1,a2,a3){var sp=_stackSave();try{return Module[\"dynCall_iiii\"](index,a1,a2,a3);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=_stackSave();try{return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=_stackSave();try{return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=_stackSave();try{return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_v(index){var sp=_stackSave();try{Module[\"dynCall_v\"](index);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_vi(index,a1){var sp=_stackSave();try{Module[\"dynCall_vi\"](index,a1);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_vii(index,a1,a2){var sp=_stackSave();try{Module[\"dynCall_vii\"](index,a1,a2);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viii(index,a1,a2,a3){var sp=_stackSave();try{Module[\"dynCall_viii\"](index,a1,a2,a3);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiii(index,a1,a2,a3,a4){var sp=_stackSave();try{Module[\"dynCall_viiii\"](index,a1,a2,a3,a4);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=_stackSave();try{Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=_stackSave();try{Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}Module.asmGlobalArg={};Module.asmLibraryArg={\"abort\":abort,\"assert\":assert,\"enlargeMemory\":enlargeMemory,\"getTotalMemory\":getTotalMemory,\"abortOnCannotGrowMemory\":abortOnCannotGrowMemory,\"invoke_i\":invoke_i,\"invoke_ii\":invoke_ii,\"invoke_iii\":invoke_iii,\"invoke_iiii\":invoke_iiii,\"invoke_iiiii\":invoke_iiiii,\"invoke_iiiiii\":invoke_iiiiii,\"invoke_iiiiiii\":invoke_iiiiiii,\"invoke_v\":invoke_v,\"invoke_vi\":invoke_vi,\"invoke_vii\":invoke_vii,\"invoke_viii\":invoke_viii,\"invoke_viiii\":invoke_viiii,\"invoke_viiiii\":invoke_viiiii,\"invoke_viiiiii\":invoke_viiiiii,\"ClassHandle\":ClassHandle,\"ClassHandle_clone\":ClassHandle_clone,\"ClassHandle_delete\":ClassHandle_delete,\"ClassHandle_deleteLater\":ClassHandle_deleteLater,\"ClassHandle_isAliasOf\":ClassHandle_isAliasOf,\"ClassHandle_isDeleted\":ClassHandle_isDeleted,\"RegisteredClass\":RegisteredClass,\"RegisteredPointer\":RegisteredPointer,\"RegisteredPointer_deleteObject\":RegisteredPointer_deleteObject,\"RegisteredPointer_destructor\":RegisteredPointer_destructor,\"RegisteredPointer_fromWireType\":RegisteredPointer_fromWireType,\"RegisteredPointer_getPointee\":RegisteredPointer_getPointee,\"__ZSt18uncaught_exceptionv\":__ZSt18uncaught_exceptionv,\"___cxa_allocate_exception\":___cxa_allocate_exception,\"___cxa_begin_catch\":___cxa_begin_catch,\"___cxa_find_matching_catch\":___cxa_find_matching_catch,\"___cxa_throw\":___cxa_throw,\"___gxx_personality_v0\":___gxx_personality_v0,\"___lock\":___lock,\"___resumeException\":___resumeException,\"___setErrNo\":___setErrNo,\"___syscall140\":___syscall140,\"___syscall145\":___syscall145,\"___syscall146\":___syscall146,\"___syscall221\":___syscall221,\"___syscall5\":___syscall5,\"___syscall54\":___syscall54,\"___syscall6\":___syscall6,\"___unlock\":___unlock,\"__embind_register_bool\":__embind_register_bool,\"__embind_register_class\":__embind_register_class,\"__embind_register_class_constructor\":__embind_register_class_constructor,\"__embind_register_class_function\":__embind_register_class_function,\"__embind_register_emval\":__embind_register_emval,\"__embind_register_float\":__embind_register_float,\"__embind_register_function\":__embind_register_function,\"__embind_register_integer\":__embind_register_integer,\"__embind_register_memory_view\":__embind_register_memory_view,\"__embind_register_std_string\":__embind_register_std_string,\"__embind_register_std_wstring\":__embind_register_std_wstring,\"__embind_register_void\":__embind_register_void,\"__emval_addMethodCaller\":__emval_addMethodCaller,\"__emval_allocateDestructors\":__emval_allocateDestructors,\"__emval_as\":__emval_as,\"__emval_call\":__emval_call,\"__emval_call_void_method\":__emval_call_void_method,\"__emval_decref\":__emval_decref,\"__emval_get_method_caller\":__emval_get_method_caller,\"__emval_get_module_property\":__emval_get_module_property,\"__emval_get_property\":__emval_get_property,\"__emval_incref\":__emval_incref,\"__emval_lookupTypes\":__emval_lookupTypes,\"__emval_new\":__emval_new,\"__emval_new_cstring\":__emval_new_cstring,\"__emval_register\":__emval_register,\"__emval_run_destructors\":__emval_run_destructors,\"__emval_take_value\":__emval_take_value,\"_abort\":_abort,\"_embind_repr\":_embind_repr,\"_emscripten_memcpy_big\":_emscripten_memcpy_big,\"_llvm_cttz_i32\":_llvm_cttz_i32,\"_llvm_cttz_i64\":_llvm_cttz_i64,\"_pthread_getspecific\":_pthread_getspecific,\"_pthread_key_create\":_pthread_key_create,\"_pthread_once\":_pthread_once,\"_pthread_setspecific\":_pthread_setspecific,\"constNoSmartPtrRawPointerToWireType\":constNoSmartPtrRawPointerToWireType,\"count_emval_handles\":count_emval_handles,\"craftEmvalAllocator\":craftEmvalAllocator,\"craftInvokerFunction\":craftInvokerFunction,\"createNamedFunction\":createNamedFunction,\"downcastPointer\":downcastPointer,\"embind__requireFunction\":embind__requireFunction,\"embind_init_charCodes\":embind_init_charCodes,\"ensureOverloadTable\":ensureOverloadTable,\"exposePublicSymbol\":exposePublicSymbol,\"extendError\":extendError,\"floatReadValueFromPointer\":floatReadValueFromPointer,\"flushPendingDeletes\":flushPendingDeletes,\"genericPointerToWireType\":genericPointerToWireType,\"getBasestPointer\":getBasestPointer,\"getInheritedInstance\":getInheritedInstance,\"getInheritedInstanceCount\":getInheritedInstanceCount,\"getLiveInheritedInstances\":getLiveInheritedInstances,\"getShiftFromSize\":getShiftFromSize,\"getStringOrSymbol\":getStringOrSymbol,\"getTypeName\":getTypeName,\"get_first_emval\":get_first_emval,\"heap32VectorToArray\":heap32VectorToArray,\"init_ClassHandle\":init_ClassHandle,\"init_RegisteredPointer\":init_RegisteredPointer,\"init_embind\":init_embind,\"init_emval\":init_emval,\"integerReadValueFromPointer\":integerReadValueFromPointer,\"makeClassHandle\":makeClassHandle,\"makeLegalFunctionName\":makeLegalFunctionName,\"new_\":new_,\"nonConstNoSmartPtrRawPointerToWireType\":nonConstNoSmartPtrRawPointerToWireType,\"readLatin1String\":readLatin1String,\"registerType\":registerType,\"replacePublicSymbol\":replacePublicSymbol,\"requireHandle\":requireHandle,\"requireRegisteredType\":requireRegisteredType,\"runDestructor\":runDestructor,\"runDestructors\":runDestructors,\"setDelayFunction\":setDelayFunction,\"shallowCopyInternalPointer\":shallowCopyInternalPointer,\"simpleReadValueFromPointer\":simpleReadValueFromPointer,\"throwBindingError\":throwBindingError,\"throwInstanceAlreadyDeleted\":throwInstanceAlreadyDeleted,\"throwInternalError\":throwInternalError,\"throwUnboundTypeError\":throwUnboundTypeError,\"upcastPointer\":upcastPointer,\"whenDependentTypesAreResolved\":whenDependentTypesAreResolved,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR,\"tempDoublePtr\":tempDoublePtr,\"ABORT\":ABORT,\"STACKTOP\":STACKTOP,\"STACK_MAX\":STACK_MAX};var asm=Module[\"asm\"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module[\"asm\"]=asm;var __GLOBAL__sub_I_bind_cpp=Module[\"__GLOBAL__sub_I_bind_cpp\"]=function(){return Module[\"asm\"][\"__GLOBAL__sub_I_bind_cpp\"].apply(null,arguments);};var __GLOBAL__sub_I_zstd_binding_cc=Module[\"__GLOBAL__sub_I_zstd_binding_cc\"]=function(){return Module[\"asm\"][\"__GLOBAL__sub_I_zstd_binding_cc\"].apply(null,arguments);};var ___cxa_can_catch=Module[\"___cxa_can_catch\"]=function(){return Module[\"asm\"][\"___cxa_can_catch\"].apply(null,arguments);};var ___cxa_demangle=Module[\"___cxa_demangle\"]=function(){return Module[\"asm\"][\"___cxa_demangle\"].apply(null,arguments);};var ___cxa_is_pointer_type=Module[\"___cxa_is_pointer_type\"]=function(){return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null,arguments);};var ___errno_location=Module[\"___errno_location\"]=function(){return Module[\"asm\"][\"___errno_location\"].apply(null,arguments);};var ___getTypeName=Module[\"___getTypeName\"]=function(){return Module[\"asm\"][\"___getTypeName\"].apply(null,arguments);};var _free=Module[\"_free\"]=function(){return Module[\"asm\"][\"_free\"].apply(null,arguments);};var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=function(){return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null,arguments);};var _llvm_ctlz_i64=Module[\"_llvm_ctlz_i64\"]=function(){return Module[\"asm\"][\"_llvm_ctlz_i64\"].apply(null,arguments);};var _malloc=Module[\"_malloc\"]=function(){return Module[\"asm\"][\"_malloc\"].apply(null,arguments);};var _memcpy=Module[\"_memcpy\"]=function(){return Module[\"asm\"][\"_memcpy\"].apply(null,arguments);};var _memmove=Module[\"_memmove\"]=function(){return Module[\"asm\"][\"_memmove\"].apply(null,arguments);};var _memset=Module[\"_memset\"]=function(){return Module[\"asm\"][\"_memset\"].apply(null,arguments);};var _sbrk=Module[\"_sbrk\"]=function(){return Module[\"asm\"][\"_sbrk\"].apply(null,arguments);};var establishStackSpace=Module[\"establishStackSpace\"]=function(){return Module[\"asm\"][\"establishStackSpace\"].apply(null,arguments);};var getTempRet0=Module[\"getTempRet0\"]=function(){return Module[\"asm\"][\"getTempRet0\"].apply(null,arguments);};var runPostSets=Module[\"runPostSets\"]=function(){return Module[\"asm\"][\"runPostSets\"].apply(null,arguments);};var setTempRet0=Module[\"setTempRet0\"]=function(){return Module[\"asm\"][\"setTempRet0\"].apply(null,arguments);};var setThrew=Module[\"setThrew\"]=function(){return Module[\"asm\"][\"setThrew\"].apply(null,arguments);};var stackAlloc=Module[\"stackAlloc\"]=function(){return Module[\"asm\"][\"stackAlloc\"].apply(null,arguments);};var _stackRestore=Module[\"stackRestore\"]=function(){return Module[\"asm\"][\"stackRestore\"].apply(null,arguments);};var _stackSave=Module[\"stackSave\"]=function(){return Module[\"asm\"][\"stackSave\"].apply(null,arguments);};var dynCall_i=Module[\"dynCall_i\"]=function(){return Module[\"asm\"][\"dynCall_i\"].apply(null,arguments);};var dynCall_ii=Module[\"dynCall_ii\"]=function(){return Module[\"asm\"][\"dynCall_ii\"].apply(null,arguments);};var dynCall_iii=Module[\"dynCall_iii\"]=function(){return Module[\"asm\"][\"dynCall_iii\"].apply(null,arguments);};var dynCall_iiii=Module[\"dynCall_iiii\"]=function(){return Module[\"asm\"][\"dynCall_iiii\"].apply(null,arguments);};var dynCall_iiiii=Module[\"dynCall_iiiii\"]=function(){return Module[\"asm\"][\"dynCall_iiiii\"].apply(null,arguments);};var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=function(){return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null,arguments);};var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=function(){return Module[\"asm\"][\"dynCall_iiiiiii\"].apply(null,arguments);};var dynCall_v=Module[\"dynCall_v\"]=function(){return Module[\"asm\"][\"dynCall_v\"].apply(null,arguments);};var dynCall_vi=Module[\"dynCall_vi\"]=function(){return Module[\"asm\"][\"dynCall_vi\"].apply(null,arguments);};var dynCall_vii=Module[\"dynCall_vii\"]=function(){return Module[\"asm\"][\"dynCall_vii\"].apply(null,arguments);};var dynCall_viii=Module[\"dynCall_viii\"]=function(){return Module[\"asm\"][\"dynCall_viii\"].apply(null,arguments);};var dynCall_viiii=Module[\"dynCall_viiii\"]=function(){return Module[\"asm\"][\"dynCall_viiii\"].apply(null,arguments);};var dynCall_viiiii=Module[\"dynCall_viiiii\"]=function(){return Module[\"asm\"][\"dynCall_viiiii\"].apply(null,arguments);};var dynCall_viiiiii=Module[\"dynCall_viiiiii\"]=function(){return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null,arguments);};Module[\"asm\"]=asm;Module[\"FS\"]=FS;Module[\"then\"]=function(func){if(Module[\"calledRun\"]){func(Module);}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module);};}return Module;};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status;}ExitStatus.prototype=new Error();ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller;};function run(args){args=args||Module[\"arguments\"];if(runDependencies>0){return;}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun();}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\");},1);doRun();},1);}else{doRun();}}Module[\"run\"]=run;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what);}if(what!==undefined){out(what);err(what);what=JSON.stringify(what);}else{what=\"\";}ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()();}}Module[\"noExitRuntime\"]=true;run();return Module;};}();if((typeof exports==='undefined'?'undefined':_typeof(exports))==='object'&&(typeof module==='undefined'?'undefined':_typeof(module))==='object')module.exports=Module;else if(typeof define==='function'&&define['amd'])define([],function(){return Module;});else if((typeof exports==='undefined'?'undefined':_typeof(exports))==='object')exports[\"Module\"]=Module;\n\n}).call(this,require('_process'),require(\"buffer\").Buffer,\"/lib\")\n},{\"_process\":126,\"buffer\":54,\"crypto\":63,\"fs\":9,\"path\":119}],6:[function(require,module,exports){\n(function (process,Buffer,__dirname){\n'use strict';var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var Module=function(){var _scriptDir=typeof document!=='undefined'&&document.currentScript?document.currentScript.src:undefined;return function(Module){Module=Module||{};var Module;if(!Module)Module=typeof Module!=='undefined'?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key];}}Module[\"arguments\"]=[];Module[\"thisProgram\"]=\"./this.program\";Module[\"quit\"]=function(status,toThrow){throw toThrow;};Module[\"preRun\"]=[];Module[\"postRun\"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=(typeof window==='undefined'?'undefined':_typeof(window))===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=(typeof process==='undefined'?'undefined':_typeof(process))===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory);}else{return scriptDirectory+path;}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+\"/\";var nodeFS;var nodePath;Module[\"read\"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename);}return binary?ret:ret.toString();};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret);}assert(ret.buffer);return ret;};if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\");}Module[\"arguments\"]=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex;}});process[\"on\"](\"unhandledRejection\",function(reason,p){process[\"exit\"](1);});Module[\"quit\"]=function(status){process[\"exit\"](status);};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\";};}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){Module[\"read\"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data);}return read(f);};}Module[\"readBinary\"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data;}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f));}data=read(f,\"binary\");assert((typeof data==='undefined'?'undefined':_typeof(data))===\"object\");return data;};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs;}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments;}if(typeof quit===\"function\"){Module[\"quit\"]=function(status){quit(status);};}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WEB){if(document.currentScript){scriptDirectory=document.currentScript.src;}}else{scriptDirectory=self.location.href;}if(_scriptDir){scriptDirectory=_scriptDir;}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.split(\"/\").slice(0,-1).join(\"/\")+\"/\";}else{scriptDirectory=\"\";}Module[\"read\"]=function shell_read(url){try{var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText;}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data);}throw err;}};if(ENVIRONMENT_IS_WORKER){Module[\"readBinary\"]=function readBinary(url){try{var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response);}catch(err){var data=tryParseAsDataURI(url);if(data){return data;}throw err;}};}Module[\"readAsync\"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return;}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return;}onerror();};xhr.onerror=onerror;xhr.send(null);};Module[\"setWindowTitle\"]=function(title){document.title=title;};}else{}var out=Module[\"print\"]||(typeof console!==\"undefined\"?console.log.bind(console):typeof print!==\"undefined\"?print:null);var err=Module[\"printErr\"]||(typeof printErr!==\"undefined\"?printErr:typeof console!==\"undefined\"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key];}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret;}function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0;}}return ret;}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret;}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4;}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8;}else{return 0;}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text);}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args));}else{return Module[\"dynCall_\"+sig].call(null,ptr);}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text);}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func;}var JSfuncs={\"stackSave\":function stackSave(){_stackSave();},\"stackRestore\":function stackRestore(){_stackRestore();},\"arrayToC\":function arrayToC(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret;},\"stringToC\":function stringToC(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len);}return ret;}};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};function ccall(ident,returnType,argTypes,args,opts){function convertReturnValue(ret){if(returnType===\"string\")return Pointer_stringify(ret);if(returnType===\"boolean\")return Boolean(ret);return ret;}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=_stackSave();cArgs[i]=converter(args[i]);}else{cArgs[i]=args[i];}}}var ret=func.apply(null,cArgs);ret=convertReturnValue(ret);if(stack!==0)_stackRestore(stack);return ret;}function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type);}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function Pointer_stringify(ptr,length){if(length===0||!ptr)return\"\";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break;}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK;}return ret;}return UTF8ToString(ptr);}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr]){++endPtr;}if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr));}else{var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue;}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue;}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2;}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3;}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4;}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5;}}}if(u0<65536){str+=String.fromCharCode(u0);}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023);}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr);}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023;}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u;}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63;}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}}outU8Array[outIdx]=0;return outIdx-startIdx;}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len;}else if(u<=2047){len+=2;}else if(u<=65535){len+=3;}else if(u<=2097151){len+=4;}else if(u<=67108863){len+=5;}else{len+=6;}}return len;}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function demangle(func){var __cxa_demangle_func=Module[\"___cxa_demangle\"]||Module[\"__cxa_demangle\"];assert(__cxa_demangle_func);try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(HEAP32[status>>2]===0&&ret){return Pointer_stringify(ret);}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret);}return func;}function demangleAll(text){var regex=/__Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\";});}function jsStackTrace(){var err=new Error();if(!err.stack){try{throw new Error(0);}catch(e){err=e;}if(!err.stack){return\"(no stack trace available)\";}}return err.stack.toString();}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js);}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module[\"HEAP8\"]=HEAP8=new Int8Array(buffer);Module[\"HEAP16\"]=HEAP16=new Int16Array(buffer);Module[\"HEAP32\"]=HEAP32=new Int32Array(buffer);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buffer);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buffer);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buffer);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buffer);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buffer);}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){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  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 \");}function enlargeMemory(){abortOnCannotGrowMemory();}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)err(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+TOTAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\");if(Module[\"buffer\"]){buffer=Module[\"buffer\"];}else{{buffer=new ArrayBuffer(TOTAL_MEMORY);}Module[\"buffer\"]=buffer;}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY;}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue;}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func);}else{Module[\"dynCall_vi\"](func,callback.arg);}}else{func(callback.arg===undefined?null:callback.arg);}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift());}}callRuntimeCallbacks(__ATPRERUN__);}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__);}function preMain(){callRuntimeCallbacks(__ATMAIN__);}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true;}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift());}}callRuntimeCallbacks(__ATPOSTRUN__);}function addOnPreRun(cb){__ATPRERUN__.unshift(cb);}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb);}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer);}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i);}if(!dontAddNull)HEAP8[buffer>>0]=0;}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id;}function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies);}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies);}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null;}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback();}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0;}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+22272;__ATINIT__.push({func:function func(){__GLOBAL__sub_I_zstd_binding_cc();}},{func:function func(){__GLOBAL__sub_I_bind_cpp();}});memoryInitializer=\"data:application/octet-stream;base64,AAAAAAAAAACwKgAASCcAAAgrAADQKgAAwCoAADAnAAAIKwAA0CoAAPAqAADwJwAAMCcAADAnAADwKgAAAAAAAAAAAAAAAAAA8CoAAPAnAAAwJwAAMCcAAPAqAADwJwAAMCcAADAnAABwJwAAAAAAAAAAAAAAAAAA8CoAAPAnAAAwJwAAMCcAAKgnAAAAAAAAAAAAAAAAAADAKgAACCgAAHAmAABwJgAAwCoAADAoAABwJgAAcCYAAAAAAABrOAcADbIHAJzyBwBwZAgAYK4KALBxCwAwqgwAEwAAAAwAAAANAAAAAQAAAAYAAAABAAAAAQAAABMAAAANAAAADgAAAAEAAAAHAAAAAQAAAAEAAAATAAAADwAAABAAAAABAAAABgAAAAEAAAABAAAAFAAAABAAAAARAAAAAQAAAAUAAAAIAAAAAgAAABQAAAARAAAAEgAAAAEAAAAFAAAACAAAAAIAAAAUAAAAEQAAABIAAAACAAAABQAAABAAAAADAAAAFQAAABEAAAATAAAAAgAAAAUAAAAQAAAABAAAABUAAAASAAAAEwAAAAMAAAAFAAAAEAAAAAQAAAAVAAAAEgAAABQAAAADAAAABQAAABAAAAAFAAAAFQAAABMAAAAUAAAAAwAAAAUAAAAQAAAABQAAABUAAAATAAAAFQAAAAQAAAAFAAAAEAAAAAUAAAAWAAAAFAAAABYAAAAEAAAABQAAABAAAAAFAAAAFgAAABQAAAAWAAAABQAAAAUAAAAQAAAABQAAABYAAAAVAAAAFgAAAAQAAAAFAAAAIAAAAAYAAAAWAAAAFQAAABYAAAAFAAAABQAAACAAAAAGAAAAFgAAABYAAAAWAAAABgAAAAUAAAAgAAAABgAAABYAAAAVAAAAFgAAAAQAAAAFAAAAMAAAAAcAAAAXAAAAFgAAABYAAAAEAAAABAAAADAAAAAHAAAAFwAAABYAAAAWAAAABQAAAAMAAABAAAAABwAAABcAAAAXAAAAFgAAAAcAAAADAAAAgAAAAAcAAAAZAAAAGQAAABcAAAAHAAAAAwAAAIAAAAAIAAAAGgAAABoAAAAYAAAABwAAAAMAAAAAAQAACAAAABsAAAAbAAAAGQAAAAkAAAADAAAAAAIAAAgAAAASAAAADAAAAA0AAAABAAAABQAAAAEAAAABAAAAEgAAAA0AAAAOAAAAAQAAAAYAAAABAAAAAQAAABIAAAAOAAAADQAAAAEAAAAFAAAACAAAAAIAAAASAAAAEAAAAA8AAAABAAAABQAAAAgAAAACAAAAEgAAAA8AAAARAAAAAQAAAAUAAAAIAAAAAwAAABIAAAAQAAAAEQAAAAQAAAAFAAAACAAAAAMAAAASAAAAEAAAABEAAAADAAAABQAAAAgAAAAEAAAAEgAAABEAAAARAAAABAAAAAQAAAAIAAAABAAAABIAAAARAAAAEQAAAAQAAAAEAAAACAAAAAUAAAASAAAAEQAAABEAAAAFAAAABAAAAAgAAAAFAAAAEgAAABEAAAARAAAABgAAAAQAAAAIAAAABQAAABIAAAASAAAAEQAAAAYAAAAEAAAACAAAAAUAAAASAAAAEgAAABEAAAAFAAAABAAAAAgAAAAGAAAAEgAAABMAAAARAAAABwAAAAQAAAAIAAAABgAAABIAAAASAAAAEgAAAAQAAAAEAAAAEAAAAAcAAAASAAAAEgAAABIAAAAEAAAAAwAAABAAAAAHAAAAEgAAABMAAAASAAAABgAAAAMAAAAgAAAABwAAABIAAAATAAAAEgAAAAgAAAADAAAAQAAAAAcAAAASAAAAEwAAABIAAAAJAAAAAwAAAIAAAAAHAAAAEgAAABMAAAASAAAACgAAAAMAAAAAAQAABwAAABIAAAATAAAAEgAAAAsAAAADAAAAAAIAAAgAAAASAAAAEwAAABIAAAAMAAAAAwAAAAACAAAIAAAAEgAAABMAAAASAAAADQAAAAMAAAAAAgAACAAAABEAAAAMAAAADAAAAAEAAAAFAAAAAQAAAAEAAAARAAAADAAAAA0AAAABAAAABgAAAAEAAAABAAAAEQAAAA0AAAAQAAAAAQAAAAUAAAABAAAAAQAAABEAAAAQAAAAEAAAAAIAAAAFAAAACAAAAAIAAAARAAAADQAAAA8AAAADAAAABAAAAAgAAAADAAAAEQAAAA8AAAARAAAABAAAAAQAAAAIAAAAAwAAABEAAAAQAAAAEQAAAAMAAAAEAAAACAAAAAQAAAARAAAADwAAABEAAAAEAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAABAAAAAQAAAAIAAAABQAAABEAAAARAAAAEQAAAAUAAAAEAAAACAAAAAUAAAARAAAAEQAAABEAAAAGAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAABwAAAAQAAAAIAAAABQAAABEAAAARAAAAEQAAAAgAAAAEAAAACAAAAAUAAAARAAAAEgAAABEAAAAGAAAABAAAAAgAAAAGAAAAEQAAABEAAAARAAAABwAAAAMAAAAIAAAABwAAABEAAAARAAAAEQAAAAcAAAADAAAAEAAAAAcAAAARAAAAEgAAABEAAAAHAAAAAwAAACAAAAAHAAAAEQAAABIAAAARAAAABwAAAAMAAABAAAAABwAAABEAAAASAAAAEQAAAAcAAAADAAAAAAEAAAcAAAARAAAAEgAAABEAAAAIAAAAAwAAAAABAAAHAAAAEQAAABIAAAARAAAACQAAAAMAAAAAAQAACAAAABEAAAASAAAAEQAAAAoAAAADAAAAAAEAAAgAAAARAAAAEgAAABEAAAALAAAAAwAAAAACAAAIAAAADgAAAAwAAAANAAAAAQAAAAUAAAABAAAAAQAAAA4AAAAOAAAADgAAAAEAAAAGAAAAAQAAAAEAAAAOAAAADgAAAA4AAAABAAAABAAAAAEAAAABAAAADgAAAA4AAAAOAAAAAQAAAAQAAAAGAAAAAgAAAA4AAAAOAAAADgAAAAQAAAAEAAAABgAAAAMAAAAOAAAADgAAAA4AAAADAAAABAAAAAYAAAAEAAAADgAAAA4AAAAOAAAABAAAAAQAAAAGAAAABQAAAA4AAAAOAAAADgAAAAUAAAAEAAAABgAAAAUAAAAOAAAADgAAAA4AAAAGAAAABAAAAAYAAAAFAAAADgAAAA8AAAAOAAAABgAAAAQAAAAGAAAABgAAAA4AAAAPAAAADgAAAAMAAAADAAAABgAAAAcAAAAOAAAADwAAAA4AAAAGAAAAAwAAAAgAAAAHAAAADgAAAA8AAAAOAAAABgAAAAMAAAAQAAAABwAAAA4AAAAPAAAADgAAAAYAAAADAAAAGAAAAAcAAAAOAAAADwAAAA8AAAAGAAAAAwAAADAAAAAHAAAADgAAAA8AAAAPAAAABgAAAAMAAABAAAAABwAAAA4AAAAPAAAADwAAAAYAAAADAAAAYAAAAAcAAAAOAAAADwAAAA8AAAAGAAAAAwAAAIAAAAAHAAAADgAAAA8AAAAPAAAABgAAAAMAAAAAAQAABwAAAA4AAAAPAAAADwAAAAcAAAADAAAAAAEAAAcAAAAOAAAADwAAAA8AAAAIAAAAAwAAAAABAAAIAAAADgAAAA8AAAAPAAAACQAAAAMAAAAAAQAACAAAAA4AAAAPAAAADwAAAAoAAAADAAAAAAEAAAgAAAAAAAAAAQAAAAMAAAAHAAAADwAAAB8AAAA/AAAAfwAAAP8AAAD/AQAA/wMAAP8HAAD/DwAA/x8AAP8/AAD/fwAA//8AAP//AQD//wMA//8HAP//DwD//x8A//8/AP//fwD///8A////Af///wP///8H////D////x////8/////fwEAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAAAAAAAAAAAAAECAwQFBgcICQoLDA0ODxAQERESEhMTFBQUFBUVFRUWFhYWFhYWFhcXFxcXFxcXGBgYGBgYGBgYGBgYGBgYGAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICAhISIiIyMkJCQkJSUlJSYmJiYmJiYmJycnJycnJycoKCgoKCgoKCgoKCgoKCgoKSkpKSkpKSkpKSkpKSkpKSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqBAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AAAAAAAAAAABAAEAAQABAAEAAQACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD/////////////AAAAAAAAAQAEAAMAAgACAAIAAgACAAIAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD//////////////////wAAAAAAAAAAAAABAAAAAgAAAAQAAAAAAAAAAgAAAAQAAAAIAAAAAAAAAAEAAAACAAAACAAAAAEAAQEGAAAAAAAABAAAAAAQAAAEAAAAACAAAAUBAAAAAAAABQMAAAAAAAAFBAAAAAAAAAUGAAAAAAAABQcAAAAAAAAFCQAAAAAAAAUKAAAAAAAABQwAAAAAAAAGDgAAAAAAAQUQAAAA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AxAAAAMgAAADQAAAA4AAAAMAAQAAAAAAAAAAAAAAAAAEAAMAAgACAAIAAgACAAIAAgACAAIAAgACAAEAAQABAAIAAgACAAIAAgACAAIAAgACAAMAAgABAAEAAQABAAEA//////////8AAAAAAAAAAAEAAQABAAEAAQABAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP////////////8AAAAAAAABAAQAAwACAAIAAgACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP//////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADwAAAB8AAAA/AAAAfwAAAP8AAAD/AQAA/wMAAP8HAAD/DwAA/x8AAP8/AAD/fwAA//8AAP//AQD//wMA//8HAP//DwD//x8A//8/AP//fwD///8A////Af///wMBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACIAAAAkAAAAJgAAACgAAAAsAAAAMAAAADgAAABAAAAAUAAAAGAAAACAAAAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAASAAAAFAAAABYAAAAYAAAAHAAAACAAAAAoAAAAMAAAAEAAAACAAAAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAAAAAEABAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AAAAAAAAAAABAAEAAQABAAEAAQACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD/////////////AAAAAAAAAQAEAAMAAgACAAIAAgACAAIAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD//////////////////wAAAAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAAAAAAAAAAEAAAACAAAAAQAAAAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQAAAAIBAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAACAAAAAgAAAAAAAAAAAAAAAQAAAAEAAAACAAAAAgAAACYAAACCAAAAIQUAAEoAAABnCAAAJgAAAMABAACAAAAASQUAAEoAAAC+CAAAKQAAACwCAACAAAAASQUAAEoAAAC+CAAALwAAAMoCAACAAAAAigUAAEoAAACECQAANQAAAHMDAACAAAAAnQUAAEoAAACgCQAAPQAAAIEDAACAAAAA6wUAAEsAAAA+CgAARAAAAJ4DAACAAAAATQYAAEsAAACqCgAASwAAALMDAACAAAAAwQYAAE0AAAAfDQAATQAAAFMEAACAAAAAIwgAAFEAAACmDwAAVAAAAJkEAACAAAAASwkAAFcAAACxEgAAWAAAANoEAACAAAAAbwkAAF0AAAAjFAAAVAAAAEUFAACAAAAAVAoAAGoAAACMFAAAagAAAK8FAACAAAAAdgkAAHwAAABOEAAAfAAAANICAACAAAAAYwcAAJEAAACQBwAAkgAAAAEAAAACAAAAAwAAAAQAAAAHAAAACAAAAA8AAAAQAAAAHwAAACAAAAA/AAAAQAAAAH8AAACAAAAAAAAAAAAAAAARAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAARAAoKERERAAoAAAIACQsAAAAJAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA0AAAAEDQAAAAAJDgAAAAAADgAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAAAA8AAAAACRAAAAAAABAAABAAABIAAAASEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAABISEgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAACgAAAAAJCwAAAAAACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAADAxMjM0NTY3ODlBQkNERUZUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wAAAAAAAAAAABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAAAAAAHQxAAC1MwAAdDEAAFY0AACcMQAAyDMAAHgmAAAAAAAAdDEAAJg0AACcMQAA2zQAAHgmAAAAAAAAdDEAAGI1AACcMQAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCoAADIAAAAzAAAAHgAAAAEAAAAAAAAASCoAADQAAAA1AAAANgAAADcAAAAFAAAAAQAAAAEAAAABAAAAAAAAAHAqAAA0AAAAOAAAADYAAAA3AAAABQAAAAIAAAACAAAAAgAAAAAAAACgKgAANAAAADkAAAA2AAAANwAAAAYAAAAAAAAAkCoAADQAAAA6AAAANgAAADcAAAAHAAAAAAAAACArAAA0AAAAOwAAADYAAAA3AAAACAAAAAAAAAAwKwAANAAAADwAAAA2AAAANwAAAAUAAAADAAAAAwAAAAMAAABkdW1teQByYgBsZW5ndGgAYnVmZmVyAGNvbnN0cnVjdG9yAHNldABIRUFQVTgAVmVjdG9yVTgAY2xvbmVUb1ZlY3RvcgBjbG9uZUFzVHlwZWRBcnJheQB0b1R5cGVkQXJyYXlWaWV3AFpzdGRDb21wcmVzc2lvbkRpY3QAY3JlYXRlQ29tcHJlc3Npb25EaWN0AFpzdGREZWNvbXByZXNzaW9uRGljdABjcmVhdGVEZWNvbXByZXNzaW9uRGljdABac3RkQ29kZWMAY29tcHJlc3NCb3VuZABjb250ZW50U2l6ZQBjb21wcmVzcwBkZWNvbXByZXNzAGNvbXByZXNzVXNpbmdEaWN0AGRlY29tcHJlc3NVc2luZ0RpY3QAWnN0ZENvbXByZXNzU3RyZWFtQmluZGluZwBiZWdpbgBiZWdpblVzaW5nRGljdAB0cmFuc2Zvcm0AZmx1c2gAZW5kAFpzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZwBOMTBlbXNjcmlwdGVuM3ZhbEUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4yNVpzdGRDb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0UzJF8wTlNfOWFsbG9jYXRvcklTNV9FRUZ2UktOU182dmVjdG9ySWhOUzZfSWhFRUVFRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UktOU182dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFRUVFAFpOMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nOVRyYW5zZm9ybUVOMTBlbXNjcmlwdGVuM3ZhbEVTMV9FMyRfMABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfMU5TXzlhbGxvY2F0b3JJUzVfRUVGdlJLTlNfNnZlY3RvckloTlM2X0loRUVFRUVFRQBaTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfMQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzNFbmRFTjEwZW1zY3JpcHRlbjN2YWxFRTMkXzJOU185YWxsb2NhdG9ySVM1X0VFRnZSS05TXzZ2ZWN0b3JJaE5TNl9JaEVFRUVFRUUAWk4yNVpzdGRDb21wcmVzc1N0cmVhbUJpbmRpbmczRW5kRU4xMGVtc2NyaXB0ZW4zdmFsRUUzJF8yAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0UzJF8zTlNfOWFsbG9jYXRvcklTNV9FRUZ2UktOU182dmVjdG9ySWhOUzZfSWhFRUVFRUVFAFpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVMxX0UzJF8zAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc1Rmx1c2hFTjEwZW1zY3JpcHRlbjN2YWxFRTMkXzROU185YWxsb2NhdG9ySVM1X0VFRnZSS05TXzZ2ZWN0b3JJaE5TNl9JaEVFRUVFRUUAWk4yN1pzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nM0VuZEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNU5TXzlhbGxvY2F0b3JJUzVfRUVGdlJLTlNfNnZlY3RvckloTlM2X0loRUVFRUVFRQBaTjI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nM0VuZEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNQBwdXNoX2JhY2sAcmVzaXplAHNpemUAZ2V0AE5TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAE5TdDNfXzIxM19fdmVjdG9yX2Jhc2VJaE5TXzlhbGxvY2F0b3JJaEVFRUUATlN0M19fMjIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUVFAFBOU3QzX18yNnZlY3RvckloTlNfOWFsbG9jYXRvckloRUVFRQBQS05TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAGlpAHYAdmkAdmlpaQB2aWlpaQBpaWkAaWlpaQBpaWlpaQAxOVpzdGRDb21wcmVzc2lvbkRpY3QAOFJlc291cmNlSTEyWlNURF9DRGljdF9zRQBQMTlac3RkQ29tcHJlc3Npb25EaWN0AFBLMTlac3RkQ29tcHJlc3Npb25EaWN0ADIxWnN0ZERlY29tcHJlc3Npb25EaWN0ADhSZXNvdXJjZUkxMlpTVERfRERpY3Rfc0UAUDIxWnN0ZERlY29tcHJlc3Npb25EaWN0AFBLMjFac3RkRGVjb21wcmVzc2lvbkRpY3QAOVpzdGRDb2RlYwBQOVpzdGRDb2RlYwBQSzlac3RkQ29kZWMAaWlpaWlpADI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZwBQMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nAFBLMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nADI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nAFAyN1pzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZwBQSzI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nAFBGdlAxMVpTVERfQ0N0eF9zRQBGdlAxMVpTVERfQ0N0eF9zRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZQMTFaU1REX0NDdHhfc0VOU185YWxsb2NhdG9ySVM1X0VFUzRfRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZQMTFaU1REX0NDdHhfc0VFRQBQRnZQMTFaU1REX0RDdHhfc0UARnZQMTFaU1REX0RDdHhfc0UATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2UDExWlNURF9EQ3R4X3NFTlNfOWFsbG9jYXRvcklTNV9FRVM0X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UDExWlNURF9EQ3R4X3NFRUUAUEZ2UDEyWlNURF9DRGljdF9zRQBGdlAxMlpTVERfQ0RpY3Rfc0UATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2UDEyWlNURF9DRGljdF9zRU5TXzlhbGxvY2F0b3JJUzVfRUVTNF9FRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlAxMlpTVERfQ0RpY3Rfc0VFRQBQRnZQMTJaU1REX0REaWN0X3NFAEZ2UDEyWlNURF9ERGljdF9zRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZQMTJaU1REX0REaWN0X3NFTlNfOWFsbG9jYXRvcklTNV9FRVM0X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UDEyWlNURF9ERGljdF9zRUVFAFpOMThac3RkQ29tcHJlc3NTdHJlYW01QmVnaW5FaUUzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMThac3RkQ29tcHJlc3NTdHJlYW01QmVnaW5FaUUzJF8wTlNfOWFsbG9jYXRvcklTM19FRUZtUDExWlNURF9DQ3R4X3NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRm1QMTFaU1REX0NDdHhfc0VFRQBaTjE4WnN0ZENvbXByZXNzU3RyZWFtNUJlZ2luRVJLMTlac3RkQ29tcHJlc3Npb25EaWN0RTMkXzEATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4xOFpzdGRDb21wcmVzc1N0cmVhbTVCZWdpbkVSSzE5WnN0ZENvbXByZXNzaW9uRGljdEUzJF8xTlNfOWFsbG9jYXRvcklTNl9FRUZtUDExWlNURF9DQ3R4X3NFRUUAWk4yMFpzdGREZWNvbXByZXNzU3RyZWFtNUJlZ2luRXZFMyRfMgBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjIwWnN0ZERlY29tcHJlc3NTdHJlYW01QmVnaW5FdkUzJF8yTlNfOWFsbG9jYXRvcklTM19FRUZtUDExWlNURF9EQ3R4X3NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRm1QMTFaU1REX0RDdHhfc0VFRQBaTjIwWnN0ZERlY29tcHJlc3NTdHJlYW01QmVnaW5FUksyMVpzdGREZWNvbXByZXNzaW9uRGljdEUzJF8zAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjBac3RkRGVjb21wcmVzc1N0cmVhbTVCZWdpbkVSSzIxWnN0ZERlY29tcHJlc3Npb25EaWN0RTMkXzNOU185YWxsb2NhdG9ySVM2X0VFRm1QMTFaU1REX0RDdHhfc0VFRQBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUATlN0M19fMjEyYmFzaWNfc3RyaW5nSWhOU18xMWNoYXJfdHJhaXRzSWhFRU5TXzlhbGxvY2F0b3JJaEVFRUUATlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOAHJ3YQBzdGQ6OmJhZF9mdW5jdGlvbl9jYWxsAE5TdDNfXzIxN2JhZF9mdW5jdGlvbl9jYWxsRQB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzOiAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZm9yZWlnbiBleGNlcHRpb24AdGVybWluYXRpbmcAdW5jYXVnaHQAU3Q5ZXhjZXB0aW9uAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAFN0OXR5cGVfaW5mbwBOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAHB0aHJlYWRfb25jZSBmYWlsdXJlIGluIF9fY3hhX2dldF9nbG9iYWxzX2Zhc3QoKQBjYW5ub3QgY3JlYXRlIHB0aHJlYWQga2V5IGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAGNhbm5vdCB6ZXJvIG91dCB0aHJlYWQgdmFsdWUgZm9yIF9fY3hhX2dldF9nbG9iYWxzKCkAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAE4xMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fcGJhc2VfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMjNfX2Z1bmRhbWVudGFsX3R5cGVfaW5mb0UAdgBEbgBiAGMAaABhAHMAdABpAGoAbQBmAGQATjEwX19jeHhhYml2MTIwX19mdW5jdGlvbl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0UAIGNvbnN0ACB2b2xhdGlsZQAgcmVzdHJpY3QAIGNvbXBsZXgAIGltYWdpbmFyeQAgWwAgKAApACgAJiYAb2JqY19vYmplY3Q8ACoAJgBvYmpjcHJvdG8AIAA8AD4AIHZlY3RvclsAXQBwaXhlbCB2ZWN0b3JbACY9AD0ALAB+ADo6AGRlbGV0ZVtdIABkZWxldGUgAC8ALz0AXgBePQA9PQA+PQApWwA8PQA8PAA8PD0ALQAtPQAqPQAtLQApLS0AIT0AIQB8fAB8AHw9AC0+KgArACs9ACsrACkrKwApID8gKAApIDogKAAlACU9AD4+AD4+PQB0aHJvdwB0aHJvdyAAdHlwZWlkKABzaXplb2YuLi4oACwgAHNpemVvZiAoAHN0YXRpY19jYXN0PAA+KAByZWludGVycHJldF9jYXN0PAAtPgBub2V4Y2VwdCAoAFtdIAApIAAuAC4qAHN0ZDo6AG9wZXJhdG9yJiYAb3BlcmF0b3ImAG9wZXJhdG9yJj0Ab3BlcmF0b3I9AG9wZXJhdG9yKCkAb3BlcmF0b3IsAG9wZXJhdG9yfgBvcGVyYXRvciAAb3BlcmF0b3IgZGVsZXRlW10Ab3BlcmF0b3IqAG9wZXJhdG9yLwBvcGVyYXRvci89AG9wZXJhdG9yXgBvcGVyYXRvcl49AG9wZXJhdG9yPT0Ab3BlcmF0b3I+PQBvcGVyYXRvcj4Ab3BlcmF0b3JbXQBvcGVyYXRvcjw9AG9wZXJhdG9yIiIgAG9wZXJhdG9yPDwAb3BlcmF0b3I8PD0Ab3BlcmF0b3I8AG9wZXJhdG9yLQBvcGVyYXRvci09AG9wZXJhdG9yKj0Ab3BlcmF0b3ItLQBvcGVyYXRvciBuZXdbXQBvcGVyYXRvciE9AG9wZXJhdG9yIQBvcGVyYXRvciBuZXcAb3BlcmF0b3J8fABvcGVyYXRvcnwAb3BlcmF0b3J8PQBvcGVyYXRvci0+KgBvcGVyYXRvcisAb3BlcmF0b3IrPQBvcGVyYXRvcisrAG9wZXJhdG9yLT4Ab3BlcmF0b3I/AG9wZXJhdG9yJQBvcGVyYXRvciU9AG9wZXJhdG9yPj4Ab3BlcmF0b3I+Pj0Ab3BlcmF0b3IgZGVsZXRlACd1bm5hbWVkACdsYW1iZGEnKABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+AGJhc2ljX3N0cmluZwBzdGQ6OmlzdHJlYW0Ac3RkOjpiYXNpY19pc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBiYXNpY19pc3RyZWFtAHN0ZDo6b3N0cmVhbQBzdGQ6OmJhc2ljX29zdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+AGJhc2ljX29zdHJlYW0Ac3RkOjppb3N0cmVhbQBzdGQ6OmJhc2ljX2lvc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBiYXNpY19pb3N0cmVhbQBkeW5hbWljX2Nhc3Q8ACkoAGNvbnN0X2Nhc3Q8AGFsaWdub2YgKABmcAB3Y2hhcl90AGZhbHNlAHRydWUAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AHUAbAB1bABsbAB1bGwAX19pbnQxMjgAdW5zaWduZWQgX19pbnQxMjgAJUxhTAAlYQAlYWYAZGVjbHR5cGUoAHN0ZDo6YWxsb2NhdG9yAHN0ZDo6YmFzaWNfc3RyaW5nADo6c3RyaW5nIGxpdGVyYWwAc3RkAF9HTE9CQUxfX04AKGFub255bW91cyBuYW1lc3BhY2UpACA+AFRfAGlkADo6KgAgJgAgJiYAIFtdAHZvaWQAYm9vbABpbnQAdW5zaWduZWQgaW50AGxvbmcAdW5zaWduZWQgbG9uZwBsb25nIGxvbmcAZmxvYXQAbG9uZyBkb3VibGUAX19mbG9hdDEyOAAuLi4AZGVjaW1hbDY0AGRlY2ltYWwxMjgAZGVjaW1hbDMyAGRlY2ltYWwxNgBjaGFyMzJfdABjaGFyMTZfdABhdXRvAHN0ZDo6bnVsbHB0cl90AGRvdWJsZQB1bnNpZ25lZCBsb25nIGxvbmcAX2Jsb2NrX2ludm9rZQBpbnZvY2F0aW9uIGZ1bmN0aW9uIGZvciBibG9jayBpbiAAdnRhYmxlIGZvciAAVlRUIGZvciAAdHlwZWluZm8gZm9yIAB0eXBlaW5mbyBuYW1lIGZvciAAY292YXJpYW50IHJldHVybiB0aHVuayB0byAAY29uc3RydWN0aW9uIHZ0YWJsZSBmb3IgAC1pbi0AdmlydHVhbCB0aHVuayB0byAAbm9uLXZpcnR1YWwgdGh1bmsgdG8gAGd1YXJkIHZhcmlhYmxlIGZvciAAcmVmZXJlbmNlIHRlbXBvcmFyeSBmb3Ig\";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___cxa_allocate_exception(size){return _malloc(size);}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception;}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function deAdjust(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var key in EXCEPTIONS.infos){var ptr=+key;var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr;}}return adjusted;},addRef:function addRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++;},decRef:function decRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module[\"dynCall_vi\"](info.destructor,ptr);}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr);}},clearRef:function clearRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0;}};function ___cxa_begin_catch(ptr){var info=EXCEPTIONS.infos[ptr];if(info&&!info.caught){info.caught=true;__ZSt18uncaught_exceptionv.uncaught_exception--;}if(info)info.rethrown=false;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr;}function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr;}throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\";}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0;}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0;}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module[\"___cxa_is_pointer_type\"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i<typeArray.length;i++){if(typeArray[i]&&Module[\"___cxa_can_catch\"](typeArray[i],throwntype,thrown)){thrown=HEAP32[thrown>>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0;}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0;}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};EXCEPTIONS.last=ptr;if(!(\"uncaught_exception\"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1;}else{__ZSt18uncaught_exceptionv.uncaught_exception++;}throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\";}function ___gxx_personality_v0(){}function ___lock(){}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var ERRNO_MESSAGES={0:\"Success\",1:\"Not super-user\",2:\"No such file or directory\",3:\"No such process\",4:\"Interrupted system call\",5:\"I/O error\",6:\"No such device or address\",7:\"Arg list too long\",8:\"Exec format error\",9:\"Bad file number\",10:\"No children\",11:\"No more processes\",12:\"Not enough core\",13:\"Permission denied\",14:\"Bad address\",15:\"Block device required\",16:\"Mount device busy\",17:\"File exists\",18:\"Cross-device link\",19:\"No such device\",20:\"Not a directory\",21:\"Is a directory\",22:\"Invalid argument\",23:\"Too many open files in system\",24:\"Too many open files\",25:\"Not a typewriter\",26:\"Text file busy\",27:\"File too large\",28:\"No space left on device\",29:\"Illegal seek\",30:\"Read only file system\",31:\"Too many links\",32:\"Broken pipe\",33:\"Math arg out of domain of func\",34:\"Math result not representable\",35:\"File locking deadlock error\",36:\"File or path name too long\",37:\"No record locks available\",38:\"Function not implemented\",39:\"Directory not empty\",40:\"Too many symbolic links\",42:\"No message of desired type\",43:\"Identifier removed\",44:\"Channel number out of range\",45:\"Level 2 not synchronized\",46:\"Level 3 halted\",47:\"Level 3 reset\",48:\"Link number out of range\",49:\"Protocol driver not attached\",50:\"No CSI structure available\",51:\"Level 2 halted\",52:\"Invalid exchange\",53:\"Invalid request descriptor\",54:\"Exchange full\",55:\"No anode\",56:\"Invalid request code\",57:\"Invalid slot\",59:\"Bad font file fmt\",60:\"Device not a stream\",61:\"No data (for no delay io)\",62:\"Timer expired\",63:\"Out of streams resources\",64:\"Machine is not on the network\",65:\"Package not installed\",66:\"The object is remote\",67:\"The link has been severed\",68:\"Advertise error\",69:\"Srmount error\",70:\"Communication error on send\",71:\"Protocol error\",72:\"Multihop attempted\",73:\"Cross mount point (not really error)\",74:\"Trying to read unreadable message\",75:\"Value too large for defined data type\",76:\"Given log. name not unique\",77:\"f.d. invalid for this operation\",78:\"Remote address changed\",79:\"Can   access a needed shared lib\",80:\"Accessing a corrupted shared lib\",81:\".lib section in a.out corrupted\",82:\"Attempting to link in too many libs\",83:\"Attempting to exec a shared library\",84:\"Illegal byte sequence\",86:\"Streams pipe error\",87:\"Too many users\",88:\"Socket operation on non-socket\",89:\"Destination address required\",90:\"Message too long\",91:\"Protocol wrong type for socket\",92:\"Protocol not available\",93:\"Unknown protocol\",94:\"Socket type not supported\",95:\"Not supported\",96:\"Protocol family not supported\",97:\"Address family not supported by protocol family\",98:\"Address already in use\",99:\"Address not available\",100:\"Network interface is not configured\",101:\"Network is unreachable\",102:\"Connection reset by network\",103:\"Connection aborted\",104:\"Connection reset by peer\",105:\"No buffer space available\",106:\"Socket is already connected\",107:\"Socket is not connected\",108:\"Can't send after socket shutdown\",109:\"Too many references\",110:\"Connection timed out\",111:\"Connection refused\",112:\"Host is down\",113:\"Host is unreachable\",114:\"Socket already connected\",115:\"Connection already in progress\",116:\"Stale file handle\",122:\"Quota exceeded\",123:\"No medium (in tape drive)\",125:\"Operation canceled\",130:\"Previous owner died\",131:\"State not recoverable\"};function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value;}var PATH={splitPath:function splitPath(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1);},normalizeArray:function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1);}else if(last===\"..\"){parts.splice(i,1);up++;}else if(up){parts.splice(i,1);up--;}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\");}}return parts;},normalize:function normalize(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p;}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\";}if(path&&trailingSlash){path+=\"/\";}return(isAbsolute?\"/\":\"\")+path;},dirname:function dirname(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\";}if(dir){dir=dir.substr(0,dir.length-1);}return root+dir;},basename:function basename(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1);},extname:function extname(path){return PATH.splitPath(path)[3];},join:function join(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"));},join2:function join2(l,r){return PATH.normalize(l+\"/\"+r);},resolve:function resolve(){var resolvedPath=\"\",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!==\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\");}else if(!path){return\"\";}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=path.charAt(0)===\"/\";}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter(function(p){return!!p;}),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\";},relative:function relative(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break;}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break;}if(start>end)return[];return arr.slice(start,end-start+1);}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break;}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\");}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\");}};var TTY={ttys:[],init:function init(){},shutdown:function shutdown(){},register:function register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops);},stream_ops:{open:function open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}stream.tty=tty;stream.seekable=false;},close:function close(stream){stream.tty.ops.flush(stream.tty);},flush:function flush(stream){stream.tty.ops.flush(stream.tty);},read:function read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO);}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result;}if(bytesRead){stream.node.timestamp=Date.now();}return bytesRead;},write:function write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO);}for(var i=0;i<length;i++){try{stream.tty.ops.put_char(stream.tty,buffer[offset+i]);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}}if(length){stream.node.timestamp=Date.now();}return i;}},default_tty_ops:{get_char:function get_char(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!=\"win32\";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync(\"/dev/stdin\",\"r\");usingDevice=true;}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null);}catch(e){if(e.toString().indexOf(\"EOF\")!=-1)bytesRead=0;else throw e;}if(usingDevice){fs.closeSync(fd);}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\");}else{result=null;}}else if(typeof window!=\"undefined\"&&typeof window.prompt==\"function\"){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\";}}else if(typeof readline==\"function\"){result=readline();if(result!==null){result+=\"\\n\";}}if(!result){return null;}tty.input=intArrayFromString(result,true);}return tty.input.shift();},put_char:function put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[];}else{if(val!=0)tty.output.push(val);}},flush:function flush(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[];}}},default_tty1_ops:{put_char:function put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[];}else{if(val!=0)tty.output.push(val);}},flush:function flush(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[];}}}};var MEMFS={ops_table:null,mount:function mount(_mount){return MEMFS.createNode(null,\"/\",16384|511,0);},createNode:function createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={};}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null;}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream;}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream;}node.timestamp=Date.now();if(parent){parent.contents[name]=node;}return node;},getFileDataAsRegularArray:function getFileDataAsRegularArray(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i<node.usedBytes;++i){arr.push(node.contents[i]);}return arr;}return node.contents;},getFileDataAsTypedArray:function getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array();if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents);},expandFileStorage:function expandFileStorage(node,newCapacity){if(node.contents&&node.contents.subarray&&newCapacity>node.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length;}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return;}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.length<newCapacity){node.contents.push(0);}},resizeFileStorage:function resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return;}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)));}node.usedBytes=newSize;return;}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length<newSize){node.contents.push(0);}node.usedBytes=newSize;},node_ops:{getattr:function getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096;}else if(FS.isFile(node.mode)){attr.size=node.usedBytes;}else if(FS.isLink(node.mode)){attr.size=node.link.length;}else{attr.size=0;}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr;},setattr:function setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode;}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp;}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size);}},lookup:function lookup(parent,name){throw FS.genericErrors[ERRNO_CODES.ENOENT];},mknod:function mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev);},rename:function rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir;},unlink:function unlink(parent,name){delete parent.contents[name];},rmdir:function rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}delete parent.contents[name];},readdir:function readdir(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node;},readlink:function readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return node.link;}},stream_ops:{read:function read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset);}else{for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i];}}return size;},write:function write(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length;}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length;}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length;}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i];}}node.usedBytes=Math.max(node.usedBytes,position+length);return length;},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes;}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;},allocate:function allocate(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset;}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length);}else{contents=Array.prototype.slice.call(contents,position,position+length);}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);}buffer.set(contents,ptr);}return{ptr:ptr,allocated:allocated};},msync:function msync(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}if(mmapFlags&2){return 0;}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0;}}};var IDBFS={dbs:{},indexedDB:function(_indexedDB){function indexedDB(){return _indexedDB.apply(this,arguments);}indexedDB.toString=function(){return _indexedDB.toString();};return indexedDB;}(function(){if(typeof indexedDB!==\"undefined\")return indexedDB;var ret=null;if((typeof window==='undefined'?'undefined':_typeof(window))===\"object\")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,\"IDBFS used, but indexedDB not supported\");return ret;}),DB_VERSION:21,DB_STORE_NAME:\"FILE_DATA\",mount:function mount(_mount2){return MEMFS.mount.apply(null,arguments);},syncfs:function syncfs(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback);});});},getDB:function getDB(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db);}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION);}catch(e){return callback(e);}if(!req){return callback(\"Unable to connect to IndexedDB\");}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME);}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME);}if(!fileStore.indexNames.contains(\"timestamp\")){fileStore.createIndex(\"timestamp\",\"timestamp\",{unique:false});}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db);};req.onerror=function(e){callback(this.error);e.preventDefault();};},getLocalSet:function getLocalSet(mount,callback){var entries={};function isRealDir(p){return p!==\".\"&&p!==\"..\";}function toAbsolute(root){return function(p){return PATH.join2(root,p);};}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path);}catch(e){return callback(e);}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));}entries[path]={timestamp:stat.mtime};}return callback(null,{type:\"local\",entries:entries});},getRemoteSet:function getRemoteSet(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readonly\");transaction.onerror=function(e){callback(this.error);e.preventDefault();};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index(\"timestamp\");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:\"remote\",db:db,entries:entries});}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue();};}catch(e){return callback(e);}});},loadLocalEntry:function loadLocalEntry(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path);}catch(e){return callback(e);}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode});}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents});}else{return callback(new Error(\"node type not supported\"));}},storeLocalEntry:function storeLocalEntry(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode);}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true});}else{return callback(new Error(\"node type not supported\"));}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp);}catch(e){return callback(e);}callback(null);},removeLocalEntry:function removeLocalEntry(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path);}else if(FS.isFile(stat.mode)){FS.unlink(path);}}catch(e){return callback(e);}callback(null);},loadRemoteEntry:function loadRemoteEntry(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result);};req.onerror=function(e){callback(this.error);e.preventDefault();};},storeRemoteEntry:function storeRemoteEntry(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null);};req.onerror=function(e){callback(this.error);e.preventDefault();};},removeRemoteEntry:function removeRemoteEntry(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null);};req.onerror=function(e){callback(this.error);e.preventDefault();};},reconcile:function reconcile(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++;}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++;}});if(!total){return callback(null);}var completed=0;var db=src.type===\"remote\"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readwrite\");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err);}return;}if(++completed>=total){return callback(null);}}transaction.onerror=function(e){done(this.error);e.preventDefault();};create.sort().forEach(function(path){if(dst.type===\"local\"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done);});}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done);});}});remove.sort().reverse().forEach(function(path){if(dst.type===\"local\"){IDBFS.removeLocalEntry(path,done);}else{IDBFS.removeRemoteEntry(store,path,done);}});}};var NODEFS={isWindows:false,staticInit:function staticInit(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process[\"binding\"](\"constants\");if(flags[\"fs\"]){flags=flags[\"fs\"];}NODEFS.flagsForNodeMap={\"1024\":flags[\"O_APPEND\"],\"64\":flags[\"O_CREAT\"],\"128\":flags[\"O_EXCL\"],\"0\":flags[\"O_RDONLY\"],\"2\":flags[\"O_RDWR\"],\"4096\":flags[\"O_SYNC\"],\"512\":flags[\"O_TRUNC\"],\"1\":flags[\"O_WRONLY\"]};},bufferFrom:function bufferFrom(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer);},mount:function mount(_mount3){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,\"/\",NODEFS.getMode(_mount3.opts.root),0);},createNode:function createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node;},getMode:function getMode(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2;}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}return stat.mode;},realPath:function realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent;}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts);},flagsForNode:function flagsForNode(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k;}}if(!flags){return newFlags;}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}},node_ops:{getattr:function getattr(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096;}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0;}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks};},setattr:function setattr(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode;}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date);}if(attr.size!==undefined){fs.truncateSync(path,attr.size);}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},lookup:function lookup(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode);},mknod:function mknod(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode);}else{fs.writeFileSync(path,\"\",{mode:node.mode});}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}return node;},rename:function rename(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},unlink:function unlink(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},rmdir:function rmdir(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},readdir:function readdir(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},symlink:function symlink(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},readlink:function readlink(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path;}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}}},stream_ops:{open:function open(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags));}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},close:function close(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd);}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},read:function read(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},write:function write(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size;}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function mount(_mount4){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync();var root=WORKERFS.createNode(null,\"/\",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split(\"/\");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join(\"/\");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0);}parent=createdParents[curr];}return parent;}function base(path){var parts=path.split(\"/\");return parts[parts.length-1];}Array.prototype.forEach.call(_mount4.opts[\"files\"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate);});(_mount4.opts[\"blobs\"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj[\"name\"]),base(obj[\"name\"]),WORKERFS.FILE_MODE,0,obj[\"data\"]);});(_mount4.opts[\"packages\"]||[]).forEach(function(pack){pack[\"metadata\"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack[\"blob\"].slice(file.start,file.end));});});return root;},createNode:function createNode(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date()).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents;}else{node.size=4096;node.contents={};}if(parent){parent.contents[name]=node;}return node;},node_ops:{getattr:function getattr(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)};},setattr:function setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode;}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp;}},lookup:function lookup(parent,name){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);},mknod:function mknod(parent,name,mode,dev){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},rename:function rename(oldNode,newDir,newName){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},unlink:function unlink(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},rmdir:function rmdir(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},readdir:function readdir(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newName,oldPath){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},readlink:function readlink(node){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}},stream_ops:{read:function read(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size;},write:function write(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO);},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size;}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;}}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function handleFSError(e){if(!(e instanceof FS.ErrnoError))throw e+\" : \"+stackTrace();return ___setErrNo(e.errno);},lookupPath:function lookupPath(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:\"\",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key];}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP);}var parts=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p;}),false);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break;}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root;}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP);}}}}return{path:current_path,node:current};},getPath:function getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?mount+\"/\"+path:mount+path;}path=path?node.name+\"/\"+path:node.name;node=node.parent;}},hashName:function hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0;}return(parentid+hash>>>0)%FS.nameTable.length;},hashAddNode:function hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node;},hashRemoveNode:function hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next;}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break;}current=current.name_next;}}},lookupNode:function lookupNode(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent);}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node;}}return FS.lookup(parent,name);},createNode:function createNode(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this;}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function get(){return(this.mode&readMode)===readMode;},set:function set(val){val?this.mode|=readMode:this.mode&=~readMode;}},write:{get:function get(){return(this.mode&writeMode)===writeMode;},set:function set(val){val?this.mode|=writeMode:this.mode&=~writeMode;}},isFolder:{get:function get(){return FS.isDir(this.mode);}},isDevice:{get:function get(){return FS.isChrdev(this.mode);}}});}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node;},destroyNode:function destroyNode(node){FS.hashRemoveNode(node);},isRoot:function isRoot(node){return node===node.parent;},isMountpoint:function isMountpoint(node){return!!node.mounted;},isFile:function isFile(mode){return(mode&61440)===32768;},isDir:function isDir(mode){return(mode&61440)===16384;},isLink:function isLink(mode){return(mode&61440)===40960;},isChrdev:function isChrdev(mode){return(mode&61440)===8192;},isBlkdev:function isBlkdev(mode){return(mode&61440)===24576;},isFIFO:function isFIFO(mode){return(mode&61440)===4096;},isSocket:function isSocket(mode){return(mode&49152)===49152;},flagModes:{\"r\":0,\"rs\":1052672,\"r+\":2,\"w\":577,\"wx\":705,\"xw\":705,\"w+\":578,\"wx+\":706,\"xw+\":706,\"a\":1089,\"ax\":1217,\"xa\":1217,\"a+\":1090,\"ax+\":1218,\"xa+\":1218},modeStringToFlags:function modeStringToFlags(str){var flags=FS.flagModes[str];if(typeof flags===\"undefined\"){throw new Error(\"Unknown file open mode: \"+str);}return flags;},flagsToPermissionString:function flagsToPermissionString(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\";}return perms;},nodePermissions:function nodePermissions(node,perms){if(FS.ignorePermissions){return 0;}if(perms.indexOf(\"r\")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES;}else if(perms.indexOf(\"w\")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES;}else if(perms.indexOf(\"x\")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES;}return 0;},mayLookup:function mayLookup(dir){var err=FS.nodePermissions(dir,\"x\");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0;},mayCreate:function mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST;}catch(e){}return FS.nodePermissions(dir,\"wx\");},mayDelete:function mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name);}catch(e){return e.errno;}var err=FS.nodePermissions(dir,\"wx\");if(err){return err;}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR;}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY;}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR;}}return 0;},mayOpen:function mayOpen(node,flags){if(!node){return ERRNO_CODES.ENOENT;}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP;}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!==\"r\"||flags&512){return ERRNO_CODES.EISDIR;}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags));},MAX_OPEN_FDS:4096,nextfd:function nextfd(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd;}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE);},getStream:function getStream(fd){return FS.streams[fd];},createStream:function createStream(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function get(){return this.node;},set:function set(val){this.node=val;}},isRead:{get:function get(){return(this.flags&2097155)!==1;}},isWrite:{get:function get(){return(this.flags&2097155)!==0;}},isAppend:{get:function get(){return this.flags&1024;}}});}var newStream=new FS.FSStream();for(var p in stream){newStream[p]=stream[p];}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream;},closeStream:function closeStream(fd){FS.streams[fd]=null;},chrdev_stream_ops:{open:function open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream);}},llseek:function llseek(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}},major:function major(dev){return dev>>8;},minor:function minor(dev){return dev&255;},makedev:function makedev(ma,mi){return ma<<8|mi;},registerDevice:function registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops};},getDevice:function getDevice(dev){return FS.devices[dev];},getMounts:function getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts);}return mounts;},syncfs:function syncfs(populate,callback){if(typeof populate===\"function\"){callback=populate;populate=false;}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log(\"warning: \"+FS.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err);}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err);}return;}if(++completed>=mounts.length){doCallback(null);}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null);}mount.type.syncfs(mount,populate,done);});},mount:function mount(type,opts,mountpoint){var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot;}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount);}}return mountRoot;},unmount:function unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current);}current=next;}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1);},lookup:function lookup(parent,name){return parent.node_ops.lookup(parent,name);},mknod:function mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name===\".\"||name===\"..\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return parent.node_ops.mknod(parent,name,mode,dev);},create:function create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0);},mkdir:function mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0);},mkdirTree:function mkdirTree(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+=\"/\"+dirs[i];try{FS.mkdir(d,mode);}catch(e){if(e.errno!=ERRNO_CODES.EEXIST)throw e;}}},mkdev:function mkdev(path,mode,dev){if(typeof dev===\"undefined\"){dev=mode;mode=438;}mode|=8192;return FS.mknod(path,mode,dev);},symlink:function symlink(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return parent.node_ops.symlink(parent,newname,oldpath);},rename:function rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV);}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(old_node===new_node){return;}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err);}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err);}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,\"w\");if(err){throw new FS.ErrnoError(err);}}try{if(FS.trackingDelegate[\"willMovePath\"]){FS.trackingDelegate[\"willMovePath\"](old_path,new_path);}}catch(e){console.log(\"FS.trackingDelegate['willMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message);}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);}catch(e){throw e;}finally{FS.hashAddNode(old_node);}try{if(FS.trackingDelegate[\"onMovePath\"])FS.trackingDelegate[\"onMovePath\"](old_path,new_path);}catch(e){console.log(\"FS.trackingDelegate['onMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message);}},rmdir:function rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path);}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message);}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path);}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message);}},readdir:function readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}return node.node_ops.readdir(node);},unlink:function unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path);}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message);}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path);}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message);}},readlink:function readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link));},stat:function stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return node.node_ops.getattr(node);},lstat:function lstat(path){return FS.stat(path,true);},chmod:function chmod(path,mode,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()});},lchmod:function lchmod(path,mode){FS.chmod(path,mode,true);},fchmod:function fchmod(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}FS.chmod(stream.node,mode);},chown:function chown(path,uid,gid,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}node.node_ops.setattr(node,{timestamp:Date.now()});},lchown:function lchown(path,uid,gid){FS.chown(path,uid,gid,true);},fchown:function fchown(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}FS.chown(stream.node,uid,gid);},truncate:function truncate(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var err=FS.nodePermissions(node,\"w\");if(err){throw new FS.ErrnoError(err);}node.node_ops.setattr(node,{size:len,timestamp:Date.now()});},ftruncate:function ftruncate(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}FS.truncate(stream.node,len);},utime:function utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)});},open:function open(path,flags,mode,fd_start,fd_end){if(path===\"\"){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}flags=typeof flags===\"string\"?FS.modeStringToFlags(flags):flags;mode=typeof mode===\"undefined\"?438:mode;if(flags&64){mode=mode&4095|32768;}else{mode=0;}var node;if((typeof path==='undefined'?'undefined':_typeof(path))===\"object\"){node=path;}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node;}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST);}}else{node=FS.mknod(path,mode,0);created=true;}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(FS.isChrdev(node.mode)){flags&=~512;}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err);}}if(flags&512){FS.truncate(node,0);}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream);}if(Module[\"logReadFiles\"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;err(\"read file: \"+path);}}try{if(FS.trackingDelegate[\"onOpenFile\"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ;}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE;}FS.trackingDelegate[\"onOpenFile\"](path,trackingFlags);}}catch(e){console.log(\"FS.trackingDelegate['onOpenFile']('\"+path+\"', flags) threw an exception: \"+e.message);}return stream;},close:function close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream);}}catch(e){throw e;}finally{FS.closeStream(stream.fd);}stream.fd=null;},isClosed:function isClosed(stream){return stream.fd===null;},llseek:function llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position;},read:function read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position;}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead;},write:function write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(stream.flags&1024){FS.llseek(stream,0,2);}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position;}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate[\"onWriteToFile\"])FS.trackingDelegate[\"onWriteToFile\"](stream.path);}catch(e){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+path+\"') threw an exception: \"+e.message);}return bytesWritten;},allocate:function allocate(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);}stream.stream_ops.allocate(stream,offset,length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES);}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags);},msync:function msync(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0;}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags);},munmap:function munmap(stream){return 0;},ioctl:function ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);}return stream.stream_ops.ioctl(stream,cmd,arg);},readFile:function readFile(path,opts){opts=opts||{};opts.flags=opts.flags||\"r\";opts.encoding=opts.encoding||\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){throw new Error('Invalid encoding type \"'+opts.encoding+'\"');}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){ret=UTF8ArrayToString(buf,0);}else if(opts.encoding===\"binary\"){ret=buf;}FS.close(stream);return ret;},writeFile:function writeFile(path,data,opts){opts=opts||{};opts.flags=opts.flags||\"w\";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data===\"string\"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn);}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);}else{throw new Error(\"Unsupported data type\");}FS.close(stream);},cwd:function cwd(){return FS.currentPath;},chdir:function chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}var err=FS.nodePermissions(lookup.node,\"x\");if(err){throw new FS.ErrnoError(err);}FS.currentPath=lookup.path;},createDefaultDirectories:function createDefaultDirectories(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\");},createDefaultDevices:function createDefaultDevices(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:function read(){return 0;},write:function write(stream,buffer,offset,length,pos){return length;}});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var random_device;if(typeof crypto!==\"undefined\"){var randomBuffer=new Uint8Array(1);random_device=function random_device(){crypto.getRandomValues(randomBuffer);return randomBuffer[0];};}else if(ENVIRONMENT_IS_NODE){random_device=function random_device(){return require(\"crypto\")[\"randomBytes\"](1)[0];};}else{random_device=function random_device(){return Math.random()*256|0;};}FS.createDevice(\"/dev\",\"random\",random_device);FS.createDevice(\"/dev\",\"urandom\",random_device);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\");},createSpecialDirectories:function createSpecialDirectories(){FS.mkdir(\"/proc\");FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount:function mount(){var node=FS.createNode(\"/proc/self\",\"fd\",16384|511,73);node.node_ops={lookup:function lookup(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function readlink(){return stream.path;}}};ret.parent=ret;return ret;}};return node;}},{},\"/proc/self/fd\");},createStandardStreams:function createStandardStreams(){if(Module[\"stdin\"]){FS.createDevice(\"/dev\",\"stdin\",Module[\"stdin\"]);}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\");}if(Module[\"stdout\"]){FS.createDevice(\"/dev\",\"stdout\",null,Module[\"stdout\"]);}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\");}if(Module[\"stderr\"]){FS.createDevice(\"/dev\",\"stderr\",null,Module[\"stderr\"]);}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\");}var stdin=FS.open(\"/dev/stdin\",\"r\");assert(stdin.fd===0,\"invalid handle for stdin (\"+stdin.fd+\")\");var stdout=FS.open(\"/dev/stdout\",\"w\");assert(stdout.fd===1,\"invalid handle for stdout (\"+stdout.fd+\")\");var stderr=FS.open(\"/dev/stderr\",\"w\");assert(stderr.fd===2,\"invalid handle for stderr (\"+stderr.fd+\")\");},ensureErrnoError:function ensureErrnoError(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break;}}};this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack)Object.defineProperty(this,\"stack\",{value:new Error().stack,writable:true});};FS.ErrnoError.prototype=new Error();FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=\"<generic error, no stack>\";});},staticInit:function staticInit(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={\"MEMFS\":MEMFS,\"IDBFS\":IDBFS,\"NODEFS\":NODEFS,\"WORKERFS\":WORKERFS};},init:function init(input,output,error){assert(!FS.init.initialized,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");FS.init.initialized=true;FS.ensureErrnoError();Module[\"stdin\"]=input||Module[\"stdin\"];Module[\"stdout\"]=output||Module[\"stdout\"];Module[\"stderr\"]=error||Module[\"stderr\"];FS.createStandardStreams();},quit:function quit(){FS.init.initialized=false;var fflush=Module[\"_fflush\"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue;}FS.close(stream);}},getMode:function getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode;},joinPath:function joinPath(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]==\"/\")path=path.substr(1);return path;},absolutePath:function absolutePath(relative,base){return PATH.resolve(base,relative);},standardizePath:function standardizePath(path){return PATH.normalize(path);},findObject:function findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object;}else{___setErrNo(ret.error);return null;}},analyzePath:function analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path;}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\";}catch(e){ret.error=e.errno;}return ret;},createFolder:function createFolder(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode);},createPath:function createPath(parent,path,canRead,canWrite){parent=typeof parent===\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current);}catch(e){}parent=current;}return current;},createFile:function createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode);},createDataFile:function createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data===\"string\"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i){arr[i]=data.charCodeAt(i);}data=arr;}FS.chmod(node,mode|146);var stream=FS.open(node,\"w\");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode);}return node;},createDevice:function createDevice(parent,name,input,output){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function open(stream){stream.seekable=false;},close:function close(stream){if(output&&output.buffer&&output.buffer.length){output(10);}},read:function read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input();}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result;}if(bytesRead){stream.node.timestamp=Date.now();}return bytesRead;},write:function write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i]);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}}if(length){stream.node.timestamp=Date.now();}return i;}});return FS.mkdev(path,mode,dev);},createLink:function createLink(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);return FS.symlink(target,path);},forceLoadFile:function forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!==\"undefined\"){throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");}else if(Module[\"read\"]){try{obj.contents=intArrayFromString(Module[\"read\"](obj.url),true);obj.usedBytes=obj.contents.length;}catch(e){success=false;}}else{throw new Error(\"Cannot load without read() or XMLHttpRequest.\");}if(!success)___setErrNo(ERRNO_CODES.EIO);return success;},createLazyFile:function createLazyFile(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[];}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined;}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset];};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter;};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest();xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function doXHR(from,to){if(from>to)throw new Error(\"invalid range (\"+from+\", \"+to+\") or no bytes requested!\");if(to>datalength-1)throw new Error(\"only \"+datalength+\" bytes available! programmer error!\");var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);if(typeof Uint8Array!=\"undefined\")xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[]);}else{return intArrayFromString(xhr.responseText||\"\",true);}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]===\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end);}if(typeof lazyArray.chunks[chunkNum]===\"undefined\")throw new Error(\"doXHR failed!\");return lazyArray.chunks[chunkNum];});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log(\"LazyFiles on gzip forces download of the whole file when length is accessed\");}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true;};if(typeof XMLHttpRequest!==\"undefined\"){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var lazyArray=new LazyUint8Array();Object.defineProperties(lazyArray,{length:{get:function get(){if(!this.lengthKnown){this.cacheLength();}return this._length;}},chunkSize:{get:function get(){if(!this.lengthKnown){this.cacheLength();}return this._chunkSize;}}});var properties={isDevice:false,contents:lazyArray};}else{var properties={isDevice:false,url:url};}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents;}else if(properties.url){node.contents=null;node.url=properties.url;}Object.defineProperties(node,{usedBytes:{get:function get(){return this.contents.length;}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO);}return fn.apply(null,arguments);};});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO);}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i];}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i);}}return size;};node.stream_ops=stream_ops;return node;},createPreloadedFile:function createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(\"cp \"+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn);}if(onload)onload();removeRunDependency(dep);}var handled=false;Module[\"preloadPlugins\"].forEach(function(plugin){if(handled)return;if(plugin[\"canHandle\"](fullname)){plugin[\"handle\"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep);});handled=true;}});if(!handled)finish(byteArray);}addRunDependency(dep);if(typeof url==\"string\"){Browser.asyncLoad(url,function(byteArray){processData(byteArray);},onerror);}else{processData(url);}},indexedDB:function indexedDB(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;},DB_NAME:function DB_NAME(){return\"EM_FS_\"+window.location.pathname;},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function saveFilesToDB(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION);}catch(e){return onerror(e);}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log(\"creating db\");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME);};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],\"readwrite\");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror();}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish();};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish();};});transaction.onerror=onerror;};openRequest.onerror=onerror;},loadFilesFromDB:function loadFilesFromDB(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION);}catch(e){return onerror(e);}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],\"readonly\");}catch(e){onerror(e);return;}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror();}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path);}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish();};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish();};});transaction.onerror=onerror;};openRequest.onerror=onerror;}};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function calculateAt(dirfd,path){if(path[0]!==\"/\"){var dir;if(dirfd===-100){dir=FS.cwd();}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path;}path=PATH.join2(dir,path);}return path;},doStat:function doStat(func,path,buf){try{var stat=func(path);}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR;}throw e;}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0;},doMsync:function doMsync(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags);},doMkdir:function doMkdir(path,mode){path=PATH.normalize(path);if(path[path.length-1]===\"/\")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0;},doMknod:function doMknod(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL;}FS.mknod(path,mode,dev);return 0;},doReadlink:function doReadlink(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len;},doAccess:function doAccess(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL;}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms=\"\";if(amode&4)perms+=\"r\";if(amode&2)perms+=\"w\";if(amode&1)perms+=\"x\";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES;}return 0;},doDup:function doDup(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd;},doReadv:function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break;}return ret;},doWritev:function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;}return ret;},varargs:0,get:function get(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret;},getStr:function getStr(){var ret=Pointer_stringify(SYSCALLS.get());return ret;},getStreamFromFD:function getStreamFromFD(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream;},getSocketFromFD:function getSocketFromFD(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket;},getSocketAddress:function getSocketAddress(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info;},get64:function get64(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low;},getZero:function getZero(){assert(SYSCALLS.get()===0);}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt);}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt);}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL;}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd;};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0;};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0;};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL;}}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0;};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL;};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp);};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};default:abort(\"bad ioctl syscall \"+op);}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+size);}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i);}embind_charCodes=codes;}var embind_charCodes=undefined;function readLatin1String(ptr){var ret=\"\";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]];}return ret;}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return\"_unknown\";}name=name.replace(/[^a-zA-Z0-9_]/g,\"$\");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return\"_\"+name;}else{return name;}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function(\"body\",\"return function \"+name+\"() {\\n\"+'    \"use strict\";'+\"    return body.apply(this, arguments);\\n\"+\"};\\n\")(body);}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+\"\\n\"+stack.replace(/^Error(:[^\\n]*)?\\n/,\"\");}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name;}else{return this.name+\": \"+this.message;}};return errorClass;}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message);}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message);}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes;});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError(\"Mismatched type converter count\");}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i]);}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach(function(dt,i){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt];}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[];}awaitingDependencies[dt].push(function(){typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters);}});}});if(0===unregisteredTypes.length){onComplete(typeConverters);}}function registerType(rawType,registeredInstance,options){options=options||{};if(!(\"argPackAdvance\"in registeredInstance)){throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");}var name=registeredInstance.name;if(!rawType){throwBindingError('type \"'+name+'\" must have a positive integer typeid pointer');}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return;}else{throwBindingError(\"Cannot register type '\"+name+\"' twice\");}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(function(cb){cb();});}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(wt){return!!wt;},\"toWireType\":function toWireType(destructors,o){return o?trueValue:falseValue;},\"argPackAdvance\":8,\"readValueFromPointer\":function readValueFromPointer(pointer){var heap;if(size===1){heap=HEAP8;}else if(size===2){heap=HEAP16;}else if(size===4){heap=HEAP32;}else{throw new TypeError(\"Unknown boolean type size: \"+name);}return this[\"fromWireType\"](heap[pointer>>shift]);},destructorFunction:null});}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false;}if(!(other instanceof ClassHandle)){return false;}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass;}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass;}return leftClass===rightClass&&left===right;}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType};}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name;}throwBindingError(getInstanceTypeName(obj)+\" instance already deleted\");}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this;}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone;}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr);}else{$$.ptrType.registeredClass.rawDestructor($$.ptr);}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\");}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this);}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined;}}function ClassHandle_isDeleted(){return!this.$$.ptr;}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj[\"delete\"]();}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\");}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes);}this.$$.deleteScheduled=true;return this;}function init_ClassHandle(){ClassHandle.prototype[\"isAliasOf\"]=ClassHandle_isAliasOf;ClassHandle.prototype[\"clone\"]=ClassHandle_clone;ClassHandle.prototype[\"delete\"]=ClassHandle_delete;ClassHandle.prototype[\"isDeleted\"]=ClassHandle_isDeleted;ClassHandle.prototype[\"deleteLater\"]=ClassHandle_deleteLater;}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError(\"Function '\"+humanName+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+proto[methodName].overloadTable+\")!\");}return proto[methodName].overloadTable[arguments.length].apply(this,arguments);};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc;}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(\"Cannot register public name '\"+name+\"' twice\");}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError(\"Cannot register multiple overloads of a function with the same number of arguments (\"+numArguments+\")!\");}Module[name].overloadTable[numArguments]=value;}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments;}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[];}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(\"Expected null or instance of \"+desiredClass.name+\", got an instance of \"+ptrClass.name);}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass;}return ptr;}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}return 0;}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr;}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr);}return ptr;}else{return 0;}}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError(\"Passing raw pointer to smart pointer is illegal\");}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr;}else{throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name);}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr;}else{var clonedHandle=handle[\"clone\"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle[\"delete\"]();}));if(destructors!==null){destructors.push(this.rawDestructor,ptr);}}break;default:throwBindingError(\"Unsupporting sharing policy\");}}return ptr;}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}return 0;}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}if(handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+handle.$$.ptrType.name+\" to parameter type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr;}function simpleReadValueFromPointer(pointer){return this[\"fromWireType\"](HEAPU32[pointer>>2]);}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr);}return ptr;}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr);}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle[\"delete\"]();}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr;}if(undefined===desiredClass.baseClass){return null;}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null;}return desiredClass.downcast(rv);}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length;}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k]);}}return rv;}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes);}}function init_embind(){Module[\"getInheritedInstanceCount\"]=getInheritedInstanceCount;Module[\"getLiveInheritedInstances\"]=getLiveInheritedInstances;Module[\"flushPendingDeletes\"]=flushPendingDeletes;Module[\"setDelayFunction\"]=setDelayFunction;}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError(\"ptr should not be undefined\");}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass;}return ptr;}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr];}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError(\"makeClassHandle requires ptr and ptrType\");}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError(\"Both smartPtrType and smartPtr must be specified\");}record.count={value:1};return Object.create(prototype,{$$:{value:record}});}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null;}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance[\"clone\"]();}else{var rv=registeredInstance[\"clone\"]();this.destructor(ptr);return rv;}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr});}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr});}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this);}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType;}else{toType=registeredPointerRecord.pointerType;}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this);}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr});}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp});}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype[\"argPackAdvance\"]=8;RegisteredPointer.prototype[\"readValueFromPointer\"]=simpleReadValueFromPointer;RegisteredPointer.prototype[\"deleteObject\"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype[\"fromWireType\"]=RegisteredPointer_fromWireType;}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this[\"toWireType\"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null;}else{this[\"toWireType\"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null;}}else{this[\"toWireType\"]=genericPointerToWireType;}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError(\"Replacing nonexistant public symbol\");}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value;}else{Module[name]=value;Module[name].argCount=numArguments;}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i<signature.length;++i){args.push(\"a\"+i);}var name=\"dynCall_\"+signature+\"_\"+rawFunction;var body=\"return function \"+name+\"(\"+args.join(\", \")+\") {\\n\";body+=\"    return dynCall(rawFunction\"+(args.length?\", \":\"\")+args.join(\", \")+\");\\n\";body+=\"};\\n\";return new Function(\"dynCall\",\"rawFunction\",body)(dynCall,rawFunction);}var fp;if(Module[\"FUNCTION_TABLE_\"+signature]!==undefined){fp=Module[\"FUNCTION_TABLE_\"+signature][rawFunction];}else if(typeof FUNCTION_TABLE!==\"undefined\"){fp=FUNCTION_TABLE[rawFunction];}else{var dc=Module[\"asm\"][\"dynCall_\"+signature];if(dc===undefined){dc=Module[\"asm\"][\"dynCall_\"+signature.replace(/f/g,\"d\")];if(dc===undefined){throwBindingError(\"No dynCall invoker for signature: \"+signature);}}fp=makeDynCaller(dc);}if(typeof fp!==\"function\"){throwBindingError(\"unknown function pointer with signature \"+signature+\": \"+rawFunction);}return fp;}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv;}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return;}if(registeredTypes[type]){return;}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return;}unboundTypes.push(type);seen[type]=true;}types.forEach(visit);throw new UnboundTypeError(message+\": \"+unboundTypes.map(getTypeName).join([\", \"]));}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast);}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast);}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(\"Cannot construct \"+name+\" due to unbound types\",[baseClassRawType]);});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype;}else{basePrototype=ClassHandle.prototype;}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(\"Use 'new' to construct \"+name);}if(undefined===registeredClass.constructor_body){throw new BindingError(name+\" has no accessible constructor\");}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError(\"Tried to invoke ctor of \"+name+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(registeredClass.constructor_body).toString()+\") parameters instead!\");}return body.apply(this,arguments);});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+\"*\",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+\" const*\",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter];});}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAP32[(firstElement>>2)+i]);}return array;}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr);}}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=\"constructor \"+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[];}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(\"Cannot register multiple constructors with identical number of parameters (\"+(argCount-1)+\") for class '\"+classType.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError(\"Cannot construct \"+classType.name+\" due to unbound types\",rawArgTypes);};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+\" called with \"+arguments.length+\" arguments, expected \"+(argCount-1));}var destructors=[];var args=new Array(argCount);args[0]=rawConstructor;for(var i=1;i<argCount;++i){args[i]=argTypes[i][\"toWireType\"](destructors,arguments[i-1]);}var ptr=invoker.apply(null,args);runDestructors(destructors);return argTypes[0][\"fromWireType\"](ptr);};return[];});return[];});}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError(\"new_ called with constructor type \"+(typeof constructor==='undefined'?'undefined':_typeof(constructor))+\" which is not a function\");}var dummy=createNamedFunction(constructor.name||\"unknownFunctionName\",function(){});dummy.prototype=constructor.prototype;var obj=new dummy();var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj;}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break;}}var returns=argTypes[0].name!==\"void\";var argsList=\"\";var argsListWired=\"\";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;argsListWired+=(i!==0?\", \":\"\")+\"arg\"+i+\"Wired\";}var invokerFnBody=\"return function \"+makeLegalFunctionName(humanName)+\"(\"+argsList+\") {\\n\"+\"if (arguments.length !== \"+(argCount-2)+\") {\\n\"+\"throwBindingError('function \"+humanName+\" called with ' + arguments.length + ' arguments, expected \"+(argCount-2)+\" args!');\\n\"+\"}\\n\";if(needsDestructorStack){invokerFnBody+=\"var destructors = [];\\n\";}var dtorStack=needsDestructorStack?\"destructors\":\"null\";var args1=[\"throwBindingError\",\"invoker\",\"fn\",\"runDestructors\",\"retType\",\"classParam\"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+=\"var thisWired = classParam.toWireType(\"+dtorStack+\", this);\\n\";}for(var i=0;i<argCount-2;++i){invokerFnBody+=\"var arg\"+i+\"Wired = argType\"+i+\".toWireType(\"+dtorStack+\", arg\"+i+\"); // \"+argTypes[i+2].name+\"\\n\";args1.push(\"argType\"+i);args2.push(argTypes[i+2]);}if(isClassMethodFunc){argsListWired=\"thisWired\"+(argsListWired.length>0?\", \":\"\")+argsListWired;}invokerFnBody+=(returns?\"var rv = \":\"\")+\"invoker(fn\"+(argsListWired.length>0?\", \":\"\")+argsListWired+\");\\n\";if(needsDestructorStack){invokerFnBody+=\"runDestructors(destructors);\\n\";}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?\"thisWired\":\"arg\"+(i-2)+\"Wired\";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+\"_dtor(\"+paramName+\"); // \"+argTypes[i].name+\"\\n\";args1.push(paramName+\"_dtor\");args2.push(argTypes[i].destructorFunction);}}}if(returns){invokerFnBody+=\"var ret = retType.fromWireType(rv);\\n\"+\"return ret;\\n\";}else{}invokerFnBody+=\"}\\n\";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction;}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+\".\"+methodName;if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName);}function unboundTypesHandler(){throwUnboundTypeError(\"Cannot call \"+humanName+\" due to unbound types\",rawArgTypes);}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler;}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler;}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction;}else{proto[methodName].overloadTable[argCount-2]=memberFunction;}return[];});return[];});}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle);}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count;}}return count;}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i];}}return null;}function init_emval(){Module[\"count_emval_handles\"]=count_emval_handles;Module[\"get_first_emval\"]=get_first_emval;}function __emval_register(value){switch(value){case undefined:{return 1;};case null:{return 2;};case true:{return 3;};case false:{return 4;};default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle;}}}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv;},\"toWireType\":function toWireType(destructors,value){return __emval_register(value);},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:null});}function _embind_repr(v){if(v===null){return\"null\";}var t=typeof v==='undefined'?'undefined':_typeof(v);if(t===\"object\"||t===\"array\"||t===\"function\"){return v.toString();}else{return\"\"+v;}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this[\"fromWireType\"](HEAPF32[pointer>>2]);};case 3:return function(pointer){return this[\"fromWireType\"](HEAPF64[pointer>>3]);};default:throw new TypeError(\"Unknown float type: \"+name);}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){return value;},\"toWireType\":function toWireType(destructors,value){if(typeof value!==\"number\"&&typeof value!==\"boolean\"){throw new TypeError('Cannot convert \"'+_embind_repr(value)+'\" to '+this.name);}return value;},\"argPackAdvance\":8,\"readValueFromPointer\":floatReadValueFromPointer(name,shift),destructorFunction:null});}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError(\"Cannot call \"+name+\" due to unbound types\",argTypes);},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[];});}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer];}:function readU8FromPointer(pointer){return HEAPU8[pointer];};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1];}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1];};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2];}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2];};default:throw new TypeError(\"Unknown integer type: \"+name);}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295;}var shift=getShiftFromSize(size);var fromWireType=function fromWireType(value){return value;};if(minRange===0){var bitshift=32-8*size;fromWireType=function fromWireType(value){return value<<bitshift>>>bitshift;};}var isUnsignedType=name.indexOf(\"unsigned\")!=-1;registerType(primitiveType,{name:name,\"fromWireType\":fromWireType,\"toWireType\":function toWireType(destructors,value){if(typeof value!==\"number\"&&typeof value!==\"boolean\"){throw new TypeError('Cannot convert \"'+_embind_repr(value)+'\" to '+this.name);}if(value<minRange||value>maxRange){throw new TypeError('Passing a number \"'+_embind_repr(value)+'\" from JS side to C/C++ side to an argument of type \"'+name+'\", which is outside the valid range ['+minRange+\", \"+maxRange+\"]!\");}return isUnsignedType?value>>>0:value|0;},\"argPackAdvance\":8,\"readValueFromPointer\":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null});}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap[\"buffer\"],data,size);}name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":decodeMemoryView,\"argPackAdvance\":8,\"readValueFromPointer\":decodeMemoryView},{ignoreDuplicateRegistrations:true});}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name===\"std::string\";registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var endChar=HEAPU8[value+4+length];var endCharSwap=0;if(endChar!=0){endCharSwap=endChar;HEAPU8[value+4+length]=0;}var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0){var stringSegment=UTF8ToString(decodeStartPtr);if(str===undefined)str=stringSegment;else{str+=String.fromCharCode(0);str+=stringSegment;}decodeStartPtr=currentBytePtr+1;}}if(endCharSwap!=0)HEAPU8[value+4+length]=endCharSwap;}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[value+4+i]);}str=a.join(\"\");}_free(value);return str;},\"toWireType\":function toWireType(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value);}var getLength;var valueIsOfTypeString=typeof value===\"string\";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError(\"Cannot pass non-string to std::string\");}if(stdStringIsUTF8&&valueIsOfTypeString){getLength=function getLength(){return lengthBytesUTF8(value);};}else{getLength=function getLength(){return value.length;};}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1);}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError(\"String has UTF-16 code units that do not fit in 8 bits\");}HEAPU8[ptr+4+i]=charCode;}}else{for(var i=0;i<length;++i){HEAPU8[ptr+4+i]=value[i];}}}if(destructors!==null){destructors.push(_free,ptr);}return ptr;},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function destructorFunction(ptr){_free(ptr);}});}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var getHeap,shift;if(charSize===2){getHeap=function getHeap(){return HEAPU16;};shift=1;}else if(charSize===4){getHeap=function getHeap(){return HEAPU32;};shift=2;}registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){var HEAP=getHeap();var length=HEAPU32[value>>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAP[start+i]);}_free(value);return a.join(\"\");},\"toWireType\":function toWireType(destructors,value){var HEAP=getHeap();var length=value.length;var ptr=_malloc(4+length*charSize);HEAPU32[ptr>>2]=length;var start=ptr+4>>shift;for(var i=0;i<length;++i){HEAP[start+i]=value.charCodeAt(i);}if(destructors!==null){destructors.push(_free,ptr);}return ptr;},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function destructorFunction(ptr){_free(ptr);}});}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,\"argPackAdvance\":0,\"fromWireType\":function fromWireType(){return undefined;},\"toWireType\":function toWireType(destructors,o){return undefined;}});}function requireHandle(handle){if(!handle){throwBindingError(\"Cannot use deleted val. handle = \"+handle);}return emval_handle_array[handle].value;}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+\" has unknown type \"+getTypeName(rawType));}return impl;}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,\"emval::as\");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType[\"toWireType\"](destructors,handle);}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAP32[(argTypes>>2)+i],\"parameter \"+i);}return a;}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i<argCount;++i){var type=types[i];args[i]=type[\"readValueFromPointer\"](argv);argv+=type[\"argPackAdvance\"];}var rv=handle.apply(undefined,args);return __emval_register(rv);}function __emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>2]=__emval_register(destructors);return destructors;}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address);}else{return symbol;}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args);}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id;}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+\"_$\"+types.slice(1).map(function(t){return t.name;}).join(\"_\")+\"$\";var params=[\"retType\"];var args=[retType];var argsList=\"\";for(var i=0;i<argCount-1;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;params.push(\"argType\"+i);args.push(types[1+i]);}var functionName=makeLegalFunctionName(\"methodCaller_\"+signatureName);var functionBody=\"return function \"+functionName+\"(handle, name, destructors, args) {\\n\";var offset=0;for(var i=0;i<argCount-1;++i){functionBody+=\"    var arg\"+i+\" = argType\"+i+\".readValueFromPointer(args\"+(offset?\"+\"+offset:\"\")+\");\\n\";offset+=types[i+1][\"argPackAdvance\"];}functionBody+=\"    var rv = handle[name](\"+argsList+\");\\n\";for(var i=0;i<argCount-1;++i){if(types[i+1][\"deleteObject\"]){functionBody+=\"    argType\"+i+\".deleteObject(arg\"+i+\");\\n\";}}if(!retType.isVoid){functionBody+=\"    return retType.toWireType(destructors, rv);\\n\";}functionBody+=\"};\\n\";params.push(functionBody);var invokerFunction=new_(Function,params).apply(null,args);return __emval_addMethodCaller(invokerFunction);}function __emval_get_module_property(name){name=getStringOrSymbol(name);return __emval_register(Module[name]);}function __emval_get_property(handle,key){handle=requireHandle(handle);key=requireHandle(key);return __emval_register(handle[key]);}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1;}}function craftEmvalAllocator(argCount){var argsList=\"\";for(var i=0;i<argCount;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;}var functionBody=\"return function emval_allocator_\"+argCount+\"(constructor, argTypes, args) {\\n\";for(var i=0;i<argCount;++i){functionBody+=\"var argType\"+i+\" = requireRegisteredType(HEAP32[(argTypes >> 2) + \"+i+'], \"parameter '+i+'\");\\n'+\"var arg\"+i+\" = argType\"+i+\".readValueFromPointer(args);\\n\"+\"args += argType\"+i+\"['argPackAdvance'];\\n\";}functionBody+=\"var obj = new constructor(\"+argsList+\");\\n\"+\"return __emval_register(obj);\\n\"+\"}\\n\";return new Function(\"requireRegisteredType\",\"HEAP32\",\"__emval_register\",functionBody)(requireRegisteredType,HEAP32,__emval_register);}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer;}return newer(handle,argTypes,args);}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v));}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle);}function __emval_take_value(type,argv){type=requireRegisteredType(type,\"_emval_take_value\");var v=type[\"readValueFromPointer\"](argv);return __emval_register(v);}function _abort(){Module[\"abort\"]();}function _llvm_cttz_i64(l,h){var ret=_llvm_cttz_i32(l);if(ret==32)ret+=_llvm_cttz_i32(h);return(setTempRet0(0),ret)|0;}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest;}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0;}var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL;}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0;}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module[\"dynCall_v\"](func);_pthread_once.seen[ptr]=1;}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL;}PTHREAD_SPECIFIC[key]=value;return 0;}FS.staticInit();__ATINIT__.unshift(function(){if(!Module[\"noFSInit\"]&&!FS.init.initialized)FS.init();});__ATMAIN__.push(function(){FS.ignorePermissions=false;});__ATEXIT__.push(function(){FS.quit();});__ATINIT__.unshift(function(){TTY.init();});__ATEXIT__.push(function(){TTY.shutdown();});if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var NODEJS_PATH=require(\"path\");NODEFS.staticInit();}embind_init_charCodes();BindingError=Module[\"BindingError\"]=extendError(Error,\"BindingError\");InternalError=Module[\"InternalError\"]=extendError(Error,\"InternalError\");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module[\"UnboundTypeError\"]=extendError(Error,\"UnboundTypeError\");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array;}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\")  at offset \"+i+\" not in 0x00-0xFF.\");}chr&=255;}ret.push(String.fromCharCode(chr));}return ret.join(\"\");}var decodeBase64=typeof atob===\"function\"?atob:function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2);}if(enc4!==64){output=output+String.fromCharCode(chr3);}}while(i<input.length);return output;};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE===\"boolean\"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,\"base64\");}catch(_){buf=new Buffer(s,\"base64\");}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength);}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i);}return bytes;}catch(_){throw new Error(\"Converting base64 string to bytes failed.\");}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return;}return intArrayFromBase64(filename.slice(dataURIPrefix.length));}function invoke_i(index){var sp=_stackSave();try{return Module[\"dynCall_i\"](index);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_ii(index,a1){var sp=_stackSave();try{return Module[\"dynCall_ii\"](index,a1);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iii(index,a1,a2){var sp=_stackSave();try{return Module[\"dynCall_iii\"](index,a1,a2);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiii(index,a1,a2,a3){var sp=_stackSave();try{return Module[\"dynCall_iiii\"](index,a1,a2,a3);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=_stackSave();try{return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=_stackSave();try{return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=_stackSave();try{return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_v(index){var sp=_stackSave();try{Module[\"dynCall_v\"](index);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_vi(index,a1){var sp=_stackSave();try{Module[\"dynCall_vi\"](index,a1);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_vii(index,a1,a2){var sp=_stackSave();try{Module[\"dynCall_vii\"](index,a1,a2);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viii(index,a1,a2,a3){var sp=_stackSave();try{Module[\"dynCall_viii\"](index,a1,a2,a3);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiii(index,a1,a2,a3,a4){var sp=_stackSave();try{Module[\"dynCall_viiii\"](index,a1,a2,a3,a4);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=_stackSave();try{Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=_stackSave();try{Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}Module.asmGlobalArg={\"Math\":Math,\"Int8Array\":Int8Array,\"Int16Array\":Int16Array,\"Int32Array\":Int32Array,\"Uint8Array\":Uint8Array,\"Uint16Array\":Uint16Array,\"Uint32Array\":Uint32Array,\"Float32Array\":Float32Array,\"Float64Array\":Float64Array,\"NaN\":NaN,\"Infinity\":Infinity};Module.asmLibraryArg={\"abort\":abort,\"assert\":assert,\"enlargeMemory\":enlargeMemory,\"getTotalMemory\":getTotalMemory,\"abortOnCannotGrowMemory\":abortOnCannotGrowMemory,\"invoke_i\":invoke_i,\"invoke_ii\":invoke_ii,\"invoke_iii\":invoke_iii,\"invoke_iiii\":invoke_iiii,\"invoke_iiiii\":invoke_iiiii,\"invoke_iiiiii\":invoke_iiiiii,\"invoke_iiiiiii\":invoke_iiiiiii,\"invoke_v\":invoke_v,\"invoke_vi\":invoke_vi,\"invoke_vii\":invoke_vii,\"invoke_viii\":invoke_viii,\"invoke_viiii\":invoke_viiii,\"invoke_viiiii\":invoke_viiiii,\"invoke_viiiiii\":invoke_viiiiii,\"ClassHandle\":ClassHandle,\"ClassHandle_clone\":ClassHandle_clone,\"ClassHandle_delete\":ClassHandle_delete,\"ClassHandle_deleteLater\":ClassHandle_deleteLater,\"ClassHandle_isAliasOf\":ClassHandle_isAliasOf,\"ClassHandle_isDeleted\":ClassHandle_isDeleted,\"RegisteredClass\":RegisteredClass,\"RegisteredPointer\":RegisteredPointer,\"RegisteredPointer_deleteObject\":RegisteredPointer_deleteObject,\"RegisteredPointer_destructor\":RegisteredPointer_destructor,\"RegisteredPointer_fromWireType\":RegisteredPointer_fromWireType,\"RegisteredPointer_getPointee\":RegisteredPointer_getPointee,\"__ZSt18uncaught_exceptionv\":__ZSt18uncaught_exceptionv,\"___cxa_allocate_exception\":___cxa_allocate_exception,\"___cxa_begin_catch\":___cxa_begin_catch,\"___cxa_find_matching_catch\":___cxa_find_matching_catch,\"___cxa_throw\":___cxa_throw,\"___gxx_personality_v0\":___gxx_personality_v0,\"___lock\":___lock,\"___resumeException\":___resumeException,\"___setErrNo\":___setErrNo,\"___syscall140\":___syscall140,\"___syscall145\":___syscall145,\"___syscall146\":___syscall146,\"___syscall221\":___syscall221,\"___syscall5\":___syscall5,\"___syscall54\":___syscall54,\"___syscall6\":___syscall6,\"___unlock\":___unlock,\"__embind_register_bool\":__embind_register_bool,\"__embind_register_class\":__embind_register_class,\"__embind_register_class_constructor\":__embind_register_class_constructor,\"__embind_register_class_function\":__embind_register_class_function,\"__embind_register_emval\":__embind_register_emval,\"__embind_register_float\":__embind_register_float,\"__embind_register_function\":__embind_register_function,\"__embind_register_integer\":__embind_register_integer,\"__embind_register_memory_view\":__embind_register_memory_view,\"__embind_register_std_string\":__embind_register_std_string,\"__embind_register_std_wstring\":__embind_register_std_wstring,\"__embind_register_void\":__embind_register_void,\"__emval_addMethodCaller\":__emval_addMethodCaller,\"__emval_allocateDestructors\":__emval_allocateDestructors,\"__emval_as\":__emval_as,\"__emval_call\":__emval_call,\"__emval_call_void_method\":__emval_call_void_method,\"__emval_decref\":__emval_decref,\"__emval_get_method_caller\":__emval_get_method_caller,\"__emval_get_module_property\":__emval_get_module_property,\"__emval_get_property\":__emval_get_property,\"__emval_incref\":__emval_incref,\"__emval_lookupTypes\":__emval_lookupTypes,\"__emval_new\":__emval_new,\"__emval_new_cstring\":__emval_new_cstring,\"__emval_register\":__emval_register,\"__emval_run_destructors\":__emval_run_destructors,\"__emval_take_value\":__emval_take_value,\"_abort\":_abort,\"_embind_repr\":_embind_repr,\"_emscripten_memcpy_big\":_emscripten_memcpy_big,\"_llvm_cttz_i64\":_llvm_cttz_i64,\"_pthread_getspecific\":_pthread_getspecific,\"_pthread_key_create\":_pthread_key_create,\"_pthread_once\":_pthread_once,\"_pthread_setspecific\":_pthread_setspecific,\"constNoSmartPtrRawPointerToWireType\":constNoSmartPtrRawPointerToWireType,\"count_emval_handles\":count_emval_handles,\"craftEmvalAllocator\":craftEmvalAllocator,\"craftInvokerFunction\":craftInvokerFunction,\"createNamedFunction\":createNamedFunction,\"downcastPointer\":downcastPointer,\"embind__requireFunction\":embind__requireFunction,\"embind_init_charCodes\":embind_init_charCodes,\"ensureOverloadTable\":ensureOverloadTable,\"exposePublicSymbol\":exposePublicSymbol,\"extendError\":extendError,\"floatReadValueFromPointer\":floatReadValueFromPointer,\"flushPendingDeletes\":flushPendingDeletes,\"genericPointerToWireType\":genericPointerToWireType,\"getBasestPointer\":getBasestPointer,\"getInheritedInstance\":getInheritedInstance,\"getInheritedInstanceCount\":getInheritedInstanceCount,\"getLiveInheritedInstances\":getLiveInheritedInstances,\"getShiftFromSize\":getShiftFromSize,\"getStringOrSymbol\":getStringOrSymbol,\"getTypeName\":getTypeName,\"get_first_emval\":get_first_emval,\"heap32VectorToArray\":heap32VectorToArray,\"init_ClassHandle\":init_ClassHandle,\"init_RegisteredPointer\":init_RegisteredPointer,\"init_embind\":init_embind,\"init_emval\":init_emval,\"integerReadValueFromPointer\":integerReadValueFromPointer,\"makeClassHandle\":makeClassHandle,\"makeLegalFunctionName\":makeLegalFunctionName,\"new_\":new_,\"nonConstNoSmartPtrRawPointerToWireType\":nonConstNoSmartPtrRawPointerToWireType,\"readLatin1String\":readLatin1String,\"registerType\":registerType,\"replacePublicSymbol\":replacePublicSymbol,\"requireHandle\":requireHandle,\"requireRegisteredType\":requireRegisteredType,\"runDestructor\":runDestructor,\"runDestructors\":runDestructors,\"setDelayFunction\":setDelayFunction,\"shallowCopyInternalPointer\":shallowCopyInternalPointer,\"simpleReadValueFromPointer\":simpleReadValueFromPointer,\"throwBindingError\":throwBindingError,\"throwInstanceAlreadyDeleted\":throwInstanceAlreadyDeleted,\"throwInternalError\":throwInternalError,\"throwUnboundTypeError\":throwUnboundTypeError,\"upcastPointer\":upcastPointer,\"whenDependentTypesAreResolved\":whenDependentTypesAreResolved,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR,\"tempDoublePtr\":tempDoublePtr,\"ABORT\":ABORT,\"STACKTOP\":STACKTOP,\"STACK_MAX\":STACK_MAX};// EMSCRIPTEN_START_ASM\nvar asm=/** @suppress {uselessCode} */function(global,env,buffer){\"use asm\";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0;var y=0;var z=global.Math.floor;var A=global.Math.abs;var B=global.Math.sqrt;var C=global.Math.pow;var D=global.Math.cos;var E=global.Math.sin;var F=global.Math.tan;var G=global.Math.acos;var H=global.Math.asin;var I=global.Math.atan;var J=global.Math.atan2;var K=global.Math.exp;var L=global.Math.log;var M=global.Math.ceil;var N=global.Math.imul;var O=global.Math.min;var P=global.Math.max;var Q=global.Math.clz32;var R=env.abort;var S=env.assert;var T=env.enlargeMemory;var U=env.getTotalMemory;var V=env.abortOnCannotGrowMemory;var W=env.invoke_i;var X=env.invoke_ii;var Y=env.invoke_iii;var Z=env.invoke_iiii;var _=env.invoke_iiiii;var $=env.invoke_iiiiii;var aa=env.invoke_iiiiiii;var ba=env.invoke_v;var ca=env.invoke_vi;var da=env.invoke_vii;var ea=env.invoke_viii;var fa=env.invoke_viiii;var ga=env.invoke_viiiii;var ha=env.invoke_viiiiii;var ia=env.ClassHandle;var ja=env.ClassHandle_clone;var ka=env.ClassHandle_delete;var la=env.ClassHandle_deleteLater;var ma=env.ClassHandle_isAliasOf;var na=env.ClassHandle_isDeleted;var oa=env.RegisteredClass;var pa=env.RegisteredPointer;var qa=env.RegisteredPointer_deleteObject;var ra=env.RegisteredPointer_destructor;var sa=env.RegisteredPointer_fromWireType;var ta=env.RegisteredPointer_getPointee;var ua=env.__ZSt18uncaught_exceptionv;var va=env.___cxa_allocate_exception;var wa=env.___cxa_begin_catch;var xa=env.___cxa_find_matching_catch;var ya=env.___cxa_throw;var za=env.___gxx_personality_v0;var Aa=env.___lock;var Ba=env.___resumeException;var Ca=env.___setErrNo;var Da=env.___syscall140;var Ea=env.___syscall145;var Fa=env.___syscall146;var Ga=env.___syscall221;var Ha=env.___syscall5;var Ia=env.___syscall54;var Ja=env.___syscall6;var Ka=env.___unlock;var La=env.__embind_register_bool;var Ma=env.__embind_register_class;var Na=env.__embind_register_class_constructor;var Oa=env.__embind_register_class_function;var Pa=env.__embind_register_emval;var Qa=env.__embind_register_float;var Ra=env.__embind_register_function;var Sa=env.__embind_register_integer;var Ta=env.__embind_register_memory_view;var Ua=env.__embind_register_std_string;var Va=env.__embind_register_std_wstring;var Wa=env.__embind_register_void;var Xa=env.__emval_addMethodCaller;var Ya=env.__emval_allocateDestructors;var Za=env.__emval_as;var _a=env.__emval_call;var $a=env.__emval_call_void_method;var ab=env.__emval_decref;var bb=env.__emval_get_method_caller;var cb=env.__emval_get_module_property;var db=env.__emval_get_property;var eb=env.__emval_incref;var fb=env.__emval_lookupTypes;var gb=env.__emval_new;var hb=env.__emval_new_cstring;var ib=env.__emval_register;var jb=env.__emval_run_destructors;var kb=env.__emval_take_value;var lb=env._abort;var mb=env._embind_repr;var nb=env._emscripten_memcpy_big;var ob=env._llvm_cttz_i64;var pb=env._pthread_getspecific;var qb=env._pthread_key_create;var rb=env._pthread_once;var sb=env._pthread_setspecific;var tb=env.constNoSmartPtrRawPointerToWireType;var ub=env.count_emval_handles;var vb=env.craftEmvalAllocator;var wb=env.craftInvokerFunction;var xb=env.createNamedFunction;var yb=env.downcastPointer;var zb=env.embind__requireFunction;var Ab=env.embind_init_charCodes;var Bb=env.ensureOverloadTable;var Cb=env.exposePublicSymbol;var Db=env.extendError;var Eb=env.floatReadValueFromPointer;var Fb=env.flushPendingDeletes;var Gb=env.genericPointerToWireType;var Hb=env.getBasestPointer;var Ib=env.getInheritedInstance;var Jb=env.getInheritedInstanceCount;var Kb=env.getLiveInheritedInstances;var Lb=env.getShiftFromSize;var Mb=env.getStringOrSymbol;var Nb=env.getTypeName;var Ob=env.get_first_emval;var Pb=env.heap32VectorToArray;var Qb=env.init_ClassHandle;var Rb=env.init_RegisteredPointer;var Sb=env.init_embind;var Tb=env.init_emval;var Ub=env.integerReadValueFromPointer;var Vb=env.makeClassHandle;var Wb=env.makeLegalFunctionName;var Xb=env.new_;var Yb=env.nonConstNoSmartPtrRawPointerToWireType;var Zb=env.readLatin1String;var _b=env.registerType;var $b=env.replacePublicSymbol;var ac=env.requireHandle;var bc=env.requireRegisteredType;var cc=env.runDestructor;var dc=env.runDestructors;var ec=env.setDelayFunction;var fc=env.shallowCopyInternalPointer;var gc=env.simpleReadValueFromPointer;var hc=env.throwBindingError;var ic=env.throwInstanceAlreadyDeleted;var jc=env.throwInternalError;var kc=env.throwUnboundTypeError;var lc=env.upcastPointer;var mc=env.whenDependentTypesAreResolved;var nc=0.0;// EMSCRIPTEN_START_FUNCS\nfunction Ds(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}f=(c[k>>2]|0)>>>0>=4;c[(c[i>>2]|0)+12>>2]=c[j>>2];do{if(f){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;e=Qs(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=e;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0)p=8-(Rs(d[m>>0]|0)|0)|0;else p=0;c[(c[i>>2]|0)+4>>2]=p;if(!(d[m>>0]|0)){c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);q=10;break;}case 6:{q=10;break;}case 5:{q=11;break;}case 4:{q=12;break;}case 3:{q=13;break;}case 2:{q=14;break;}default:{}}if((q|0)==10){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);q=11;}if((q|0)==11){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);q=12;}if((q|0)==12){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);q=13;}if((q|0)==13){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);q=14;}if((q|0)==14){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0)r=8-(Rs(d[n>>0]|0)|0)|0;else r=0;c[(c[i>>2]|0)+4>>2]=r;if(d[n>>0]|0|0){e=(c[i>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function Es(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[i>>2];c[k>>2]=c[j>>2];j=Ms(c[h>>2]|0,e[c[k>>2]>>1]|0)|0;c[c[g>>2]>>2]=j;Fs(c[h>>2]|0)|0;c[(c[g>>2]|0)+4>>2]=(c[i>>2]|0)+4;l=f;return;}function Fs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=((c[(c[e>>2]|0)+12>>2]|0)+4|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=Qs(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=Qs(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function Gs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=l;l=l+64|0;e=d+48|0;f=d+36|0;g=d+32|0;h=d+28|0;i=d+24|0;j=d+20|0;k=d+16|0;m=d+12|0;n=d+8|0;o=d+4|0;p=d;c[e>>2]=b;c[g>>2]=(Ls((c[e>>2]|0)+16|0)|0)&255;c[h>>2]=(Ls((c[e>>2]|0)+32|0)|0)&255;c[i>>2]=(Ls((c[e>>2]|0)+24|0)|0)&255;c[j>>2]=c[5696+(c[g>>2]<<2)>>2];c[k>>2]=c[5840+(c[h>>2]<<2)>>2];c[m>>2]=c[i>>2];c[n>>2]=(c[j>>2]|0)+(c[k>>2]|0)+(c[m>>2]|0);if(c[i>>2]|0){b=c[5088+(c[i>>2]<<2)>>2]|0;c[o>>2]=b+(Ms(c[e>>2]|0,c[m>>2]|0)|0);if(Dq()|0)Fs(c[e>>2]|0)|0;}else c[o>>2]=0;do{if((c[i>>2]|0)>>>0<=1){if((c[g>>2]|0)==0&(c[o>>2]|0)>>>0<=1|0)c[o>>2]=1-(c[o>>2]|0);m=(c[e>>2]|0)+40|0;if(!(c[o>>2]|0)){c[o>>2]=c[m>>2];break;}c[p>>2]=c[m+(c[o>>2]<<2)>>2];if((c[o>>2]|0)!=1)c[(c[e>>2]|0)+40+8>>2]=c[(c[e>>2]|0)+40+4>>2];c[(c[e>>2]|0)+40+4>>2]=c[(c[e>>2]|0)+40>>2];m=c[p>>2]|0;c[o>>2]=m;c[(c[e>>2]|0)+40>>2]=m;}else{c[(c[e>>2]|0)+40+8>>2]=c[(c[e>>2]|0)+40+4>>2];c[(c[e>>2]|0)+40+4>>2]=c[(c[e>>2]|0)+40>>2];c[(c[e>>2]|0)+40>>2]=c[o>>2];}}while(0);c[f+8>>2]=c[o>>2];o=c[5216+(c[h>>2]<<2)>>2]|0;if((c[h>>2]|0)>>>0>31)q=Ms(c[e>>2]|0,c[k>>2]|0)|0;else q=0;c[f+4>>2]=o+q;if(Dq()|0?((c[k>>2]|0)+(c[j>>2]|0)|0)>>>0>24:0)Fs(c[e>>2]|0)|0;k=c[6416+(c[g>>2]<<2)>>2]|0;if((c[g>>2]|0)>>>0>15)r=Ms(c[e>>2]|0,c[j>>2]|0)|0;else r=0;c[f>>2]=k+r;r=(Dq()|0)!=0;if(r|(c[n>>2]|0)>>>0>31)Fs(c[e>>2]|0)|0;Ns((c[e>>2]|0)+16|0,c[e>>2]|0);Ns((c[e>>2]|0)+32|0,c[e>>2]|0);if(!(Dq()|0)){s=c[e>>2]|0;t=s+24|0;u=c[e>>2]|0;Ns(t,u);c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];l=d;return;}Fs(c[e>>2]|0)|0;s=c[e>>2]|0;t=s+24|0;u=c[e>>2]|0;Ns(t,u);c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];l=d;return;}function Hs(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;k=l;l=l+64|0;m=k+60|0;n=k+56|0;o=k+52|0;p=k+48|0;q=k+44|0;r=k+40|0;s=k+36|0;t=k+32|0;u=k+28|0;v=k+24|0;w=k+20|0;x=k+16|0;y=k+12|0;z=k+8|0;A=k+4|0;B=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+4>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+8>>2]|0));if(((c[u>>2]|0)>>>0>(c[x>>2]|0)>>>0?1:(c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0)|0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}Is(c[n>>2]|0,c[c[p>>2]>>2]|0,c[e>>2]|0);c[n>>2]=c[u>>2];c[c[p>>2]>>2]=c[y>>2];do{if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+4>>2]|0)|0)>>>0<=(c[t>>2]|0)>>>0){nE(c[u>>2]|0,c[z>>2]|0,c[e+4>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);y=e+4|0;c[y>>2]=(c[y>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];if((c[n>>2]|0)>>>0<=(c[x>>2]|0)>>>0?(c[e+4>>2]|0)>>>0>=3:0)break;while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;y=c[z>>2]|0;c[z>>2]=y+1;p=a[y>>0]|0;y=c[n>>2]|0;c[n>>2]=y+1;a[y>>0]=p;}c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}}while(0);if((c[e+8>>2]|0)>>>0<8){c[B>>2]=c[6816+(c[e+8>>2]<<2)>>2];a[c[n>>2]>>0]=a[c[z>>2]>>0]|0;a[(c[n>>2]|0)+1>>0]=a[(c[z>>2]|0)+1>>0]|0;a[(c[n>>2]|0)+2>>0]=a[(c[z>>2]|0)+2>>0]|0;a[(c[n>>2]|0)+3>>0]=a[(c[z>>2]|0)+3>>0]|0;c[z>>2]=(c[z>>2]|0)+(c[6848+(c[e+8>>2]<<2)>>2]|0);Js((c[n>>2]|0)+4|0,c[z>>2]|0);c[z>>2]=(c[z>>2]|0)+(0-(c[B>>2]|0));}else Ks(c[n>>2]|0,c[z>>2]|0);c[n>>2]=(c[n>>2]|0)+8;c[z>>2]=(c[z>>2]|0)+8;B=c[n>>2]|0;a:do{if((c[w>>2]|0)>>>0>((c[o>>2]|0)+-13|0)>>>0){if(B>>>0<(c[x>>2]|0)>>>0){Is(c[n>>2]|0,c[z>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);c[z>>2]=(c[z>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;r=c[z>>2]|0;c[z>>2]=r+1;A=a[r>>0]|0;r=c[n>>2]|0;c[n>>2]=r+1;a[r>>0]=A;}}else Is(B,c[z>>2]|0,(c[e+4>>2]|0)-8|0);}while(0);c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}function Is(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Ks(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Js(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function Ks(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Ls(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=(c[(c[f>>2]|0)+4>>2]|0)+(c[c[f>>2]>>2]<<2)|0;b[g>>1]=b[d>>1]|0;b[g+2>>1]=b[d+2>>1]|0;l=e;return a[g+2>>0]|0;}function Ms(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Os(c[e>>2]|0,c[f>>2]|0)|0;Ps(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Ns(a,f){a=a|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+16|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=f;f=(c[(c[h>>2]|0)+4>>2]|0)+(c[c[h>>2]>>2]<<2)|0;b[j>>1]=b[f>>1]|0;b[j+2>>1]=b[f+2>>1]|0;c[k>>2]=d[j+3>>0];c[m>>2]=Ms(c[i>>2]|0,c[k>>2]|0)|0;c[c[h>>2]>>2]=(e[j>>1]|0)+(c[m>>2]|0);l=g;return;}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function Ps(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function Qs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Dq()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=Bq(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=Fq(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Rs(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Ss(b,e,f,g,h,i,j,k,m){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;n=l;l=l+160|0;o=n+152|0;p=n+148|0;q=n+144|0;r=n+140|0;s=n+136|0;t=n+132|0;u=n+128|0;v=n+124|0;w=n+120|0;x=n+116|0;y=n+112|0;z=n;A=n+108|0;c[p>>2]=b;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;c[v>>2]=j;c[w>>2]=k;c[x>>2]=m;a:do{switch(c[q>>2]|0){case 1:{if(!(c[u>>2]|0)){c[o>>2]=-72;break a;}if((d[c[t>>2]>>0]|0)>>>0>(c[r>>2]|0)>>>0){c[o>>2]=-20;break a;}else{Ts(c[p>>2]|0,a[c[t>>2]>>0]|0)|0;c[o>>2]=1;break a;}break;}case 0:{Us(c[p>>2]|0,c[v>>2]|0,c[r>>2]|0,c[w>>2]|0)|0;c[o>>2]=0;break;}case 2:{if(c[x>>2]|0){c[o>>2]=0;break a;}else{c[o>>2]=-20;break a;}break;}default:{c[A>>2]=Vs(z,r,y,c[t>>2]|0,c[u>>2]|0)|0;if(hr(c[A>>2]|0)|0){c[o>>2]=-20;break a;}if((c[y>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break a;}else{Us(c[p>>2]|0,z,c[r>>2]|0,c[y>>2]|0)|0;c[o>>2]=c[A>>2];break a;}}}}while(0);l=n;return c[o>>2]|0;}function Ts(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+20|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=d;a[h>>0]=e;c[i>>2]=c[g>>2];c[j>>2]=c[i>>2];c[k>>2]=(c[g>>2]|0)+4;c[m>>2]=c[k>>2];b[c[j>>2]>>1]=0;b[(c[j>>2]|0)+2>>1]=0;b[c[m>>2]>>1]=0;a[(c[m>>2]|0)+2>>0]=a[h>>0]|0;a[(c[m>>2]|0)+3>>0]=0;l=f;return 0;}function Us(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;j=l;l=l+592|0;k=j+576|0;m=j+572|0;n=j+568|0;o=j+564|0;p=j+560|0;q=j+556|0;r=j+552|0;s=j;t=j+548|0;u=j+544|0;v=j+540|0;w=j+584|0;x=j+582|0;y=j+536|0;z=j+532|0;A=j+528|0;B=j+524|0;C=j+520|0;D=j+516|0;E=j+512|0;F=j+588|0;G=j+580|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[q>>2]=(c[m>>2]|0)+4;c[r>>2]=c[q>>2];c[t>>2]=(c[o>>2]|0)+1;c[u>>2]=1<<c[p>>2];c[v>>2]=(c[u>>2]|0)-1;if((c[o>>2]|0)>>>0>255){c[k>>2]=-46;H=c[k>>2]|0;l=j;return H|0;}if((c[p>>2]|0)>>>0>12){c[k>>2]=-44;H=c[k>>2]|0;l=j;return H|0;}b[w>>1]=c[p>>2];b[w+2>>1]=1;b[x>>1]=1<<(c[p>>2]|0)-1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0)==-1){o=c[y>>2]&255;q=c[r>>2]|0;i=c[v>>2]|0;c[v>>2]=i+-1;a[q+(i<<2)+2>>0]=o;b[s+(c[y>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0)>=(b[x>>1]|0))b[w+2>>1]=0;b[s+(c[y>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0;}c[y>>2]=(c[y>>2]|0)+1;}y=c[m>>2]|0;b[y>>1]=b[w>>1]|0;b[y+2>>1]=b[w+2>>1]|0;c[z>>2]=(c[u>>2]|0)-1;c[A>>2]=((c[u>>2]|0)>>>1)+((c[u>>2]|0)>>>3)+3;c[C>>2]=0;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;c[D>>2]=0;while(1){I=c[B>>2]|0;if((c[D>>2]|0)>=(b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0))break;a[(c[r>>2]|0)+(c[C>>2]<<2)+2>>0]=I;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0)&c[z>>2];while(1){if((c[C>>2]|0)>>>0<=(c[v>>2]|0)>>>0)break;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0)&c[z>>2];}c[D>>2]=(c[D>>2]|0)+1;}c[B>>2]=I+1;}if(c[C>>2]|0){c[k>>2]=-1;H=c[k>>2]|0;l=j;return H|0;}c[E>>2]=0;while(1){if((c[E>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;a[F>>0]=a[(c[r>>2]|0)+(c[E>>2]<<2)+2>>0]|0;C=s+(d[F>>0]<<1)|0;I=b[C>>1]|0;b[C>>1]=I+1<<16>>16;b[G>>1]=I;I=c[p>>2]|0;C=I-(Rs(e[G>>1]|0)|0)&255;a[(c[r>>2]|0)+(c[E>>2]<<2)+3>>0]=C;b[(c[r>>2]|0)+(c[E>>2]<<2)>>1]=(e[G>>1]<<d[(c[r>>2]|0)+(c[E>>2]<<2)+3>>0])-(c[u>>2]|0);c[E>>2]=(c[E>>2]|0)+1;}c[k>>2]=0;H=c[k>>2]|0;l=j;return H|0;}function Vs(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;A=h+70|0;B=h+68|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=Bq(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if((c[t>>2]|0)<=1)break;if((c[x>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0)break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=Bq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=19;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[m+(n<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;n=Bq(c[r>>2]|0)|0;c[v>>2]=n>>>(c[w>>2]|0);}}while(0);b[A>>1]=(c[u>>2]<<1)-1-(c[t>>2]|0);n=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(b[A>>1]|0)>>>0){b[B>>1]=n&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{b[B>>1]=n&(m<<1)-1;if((b[B>>1]|0)>=(c[u>>2]|0))b[B>>1]=(b[B>>1]|0)-(b[A>>1]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}b[B>>1]=(b[B>>1]|0)+-1<<16>>16;m=(Ws(b[B>>1]|0)|0)<<16>>16;c[t>>2]=(c[t>>2]|0)-m;m=b[B>>1]|0;n=c[j>>2]|0;g=c[x>>2]|0;c[x>>2]=g+1;b[n+(g<<1)>>1]=m;c[y>>2]=((b[B>>1]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=Bq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==19){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-1;C=c[i>>2]|0;l=h;return C|0;}c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);if(((c[r>>2]|0)-(c[p>>2]|0)|0)>>>0>(c[o>>2]|0)>>>0){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}else{c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function Ws(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=a;a=b[d>>1]|0;l=c;return((b[d>>1]|0)<0?0-a|0:a)&65535|0;}function Xs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=kt(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(at(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[n>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=Bt(c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0,c[i>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Ys(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(!(c[k>>2]|0)){c[h>>2]=-70;p=c[h>>2]|0;l=g;return p|0;}if((c[n>>2]|0)>>>0<=1?1:(c[n>>2]|0)>>>0>=(c[k>>2]|0)>>>0){c[h>>2]=-20;p=c[h>>2]|0;l=g;return p|0;}c[o>>2]=ht(c[k>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;i=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;if(c[o>>2]|0)q=it(f,i,j,k,m)|0;else q=jt(f,i,j,k,m)|0;c[h>>2]=q;p=c[h>>2]|0;l=g;return p|0;}function Zs(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;p=h+24|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;_s(p,c[o>>2]|0);if((d[p+1>>0]|0|0)!=1){c[i>>2]=-1;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=$s(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function _s(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;a[b>>0]=a[g>>0]|0;a[b+1>>0]=a[g+1>>0]|0;a[b+2>>0]=a[g+2>>0]|0;a[b+3>>0]=a[g+3>>0]|0;l=e;return;}function $s(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;h=l;l=l+80|0;i=h+60|0;j=h+56|0;k=h+52|0;m=h+48|0;n=h+44|0;o=h+40|0;p=h+24|0;q=h+16|0;r=h+12|0;s=h+8|0;t=h+4|0;u=h;v=h+64|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[q>>2]=Ds(p,c[m>>2]|0,c[n>>2]|0)|0;if(at(c[q>>2]|0)|0){c[i>>2]=c[q>>2];w=c[i>>2]|0;l=h;return w|0;}c[r>>2]=c[j>>2];c[s>>2]=(c[r>>2]|0)+(c[k>>2]|0);c[t>>2]=(c[o>>2]|0)+4;c[u>>2]=c[t>>2];_s(v,c[o>>2]|0);bt(c[r>>2]|0,p,c[s>>2]|0,c[u>>2]|0,d[v+2>>0]|0)|0;if(ct(p)|0){c[i>>2]=c[k>>2];w=c[i>>2]|0;l=h;return w|0;}else{c[i>>2]=-20;w=c[i>>2]|0;l=h;return w|0;}return 0;}function at(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=hr(c[d>>2]|0)|0;l=b;return a|0;}function bt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[h>>2];while(1){if(Fs(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>=((c[j>>2]|0)+-7|0)>>>0)break;if(dt()|0){f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}dt()|0;f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;if(dt()|0){f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){if(Fs(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){o=c[h>>2]|0;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=et(o,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}if(o>>>0>=(c[j>>2]|0)>>>0){p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}j=ft(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+j;p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}function ct(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function dt(){return 0;}function et(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=gt(c[j>>2]|0,c[m>>2]|0)|0;m=c[i>>2]|0;i=(c[k>>2]|0)+(c[n>>2]<<2)|0;a[m>>0]=a[i>>0]|0;a[m+1>>0]=a[i+1>>0]|0;Ps(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0;}function ft(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=gt(c[j>>2]|0,c[m>>2]|0)|0;a[c[i>>2]>>0]=a[(c[k>>2]|0)+(c[n>>2]<<2)>>0]|0;i=c[j>>2]|0;if((d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0)==1){Ps(i,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return 1;}if((c[i+4>>2]|0)>>>0>=32){l=h;return 1;}Ps(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);if((c[(c[j>>2]|0)+4>>2]|0)>>>0<=32){l=h;return 1;}c[(c[j>>2]|0)+4>>2]=32;l=h;return 1;}function gt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function ht(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d+8|0;i=d+4|0;j=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(c[f>>2]<<4>>>0)/((c[e>>2]|0)>>>0)|0;c[h>>2]=(c[e>>2]|0)>>>8;c[i>>2]=(c[7008+((c[g>>2]|0)*24|0)>>2]|0)+(N(c[7008+((c[g>>2]|0)*24|0)+4>>2]|0,c[h>>2]|0)|0);c[j>>2]=(c[7008+((c[g>>2]|0)*24|0)+8>>2]|0)+(N(c[7008+((c[g>>2]|0)*24|0)+8+4>>2]|0,c[h>>2]|0)|0);c[j>>2]=(c[j>>2]|0)+((c[j>>2]|0)>>>3);l=d;return(c[j>>2]|0)>>>0<(c[i>>2]|0)>>>0|0;}function it(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=vt(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(at(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[n>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=wt(c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0,c[i>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function jt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=kt(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(at(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[n>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=lt(c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0,c[i>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function kt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;g=l;l=l+416|0;h=g+396|0;i=g+392|0;j=g+388|0;k=g+384|0;m=g+80|0;n=g;o=g+380|0;p=g+376|0;q=g+372|0;r=g+368|0;s=g+364|0;t=g+404|0;u=g+360|0;v=g+356|0;w=g+352|0;x=g+348|0;y=g+344|0;z=g+340|0;A=g+336|0;B=g+400|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[o>>2]=0;c[p>>2]=0;c[r>>2]=(c[i>>2]|0)+4;c[s>>2]=c[r>>2];c[q>>2]=ot(m,256,n,p,o,c[j>>2]|0,c[k>>2]|0)|0;if(at(c[q>>2]|0)|0){c[h>>2]=c[q>>2];C=c[h>>2]|0;l=g;return C|0;}_s(t,c[i>>2]|0);if((c[o>>2]|0)>>>0>((d[t>>0]|0)+1|0)>>>0){c[h>>2]=-44;C=c[h>>2]|0;l=g;return C|0;}a[t+1>>0]=0;a[t+2>>0]=c[o>>2];k=c[i>>2]|0;a[k>>0]=a[t>>0]|0;a[k+1>>0]=a[t+1>>0]|0;a[k+2>>0]=a[t+2>>0]|0;a[k+3>>0]=a[t+3>>0]|0;c[v>>2]=0;c[u>>2]=1;while(1){if((c[u>>2]|0)>>>0>=((c[o>>2]|0)+1|0)>>>0)break;c[w>>2]=c[v>>2];c[v>>2]=(c[v>>2]|0)+(c[n+(c[u>>2]<<2)>>2]<<(c[u>>2]|0)-1);c[n+(c[u>>2]<<2)>>2]=c[w>>2];c[u>>2]=(c[u>>2]|0)+1;}c[x>>2]=0;while(1){if((c[x>>2]|0)>>>0>=(c[p>>2]|0)>>>0)break;c[y>>2]=d[m+(c[x>>2]|0)>>0];c[z>>2]=1<<c[y>>2]>>1;a[B>>0]=c[x>>2];a[B+1>>0]=(c[o>>2]|0)+1-(c[y>>2]|0);c[A>>2]=c[n+(c[y>>2]<<2)>>2];while(1){if((c[A>>2]|0)>>>0>=((c[n+(c[y>>2]<<2)>>2]|0)+(c[z>>2]|0)|0)>>>0)break;u=(c[s>>2]|0)+(c[A>>2]<<1)|0;a[u>>0]=a[B>>0]|0;a[u+1>>0]=a[B+1>>0]|0;c[A>>2]=(c[A>>2]|0)+1;}u=n+(c[y>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[z>>2]|0);c[x>>2]=(c[x>>2]|0)+1;}c[h>>2]=c[q>>2];C=c[h>>2]|0;l=g;return C|0;}function lt(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;i=l;l=l+208|0;j=i+192|0;k=i+188|0;m=i+184|0;n=i+180|0;o=i+176|0;p=i+172|0;q=i+168|0;r=i+164|0;s=i+160|0;t=i+156|0;u=i+152|0;v=i+136|0;w=i+120|0;x=i+104|0;y=i+88|0;z=i+84|0;A=i+80|0;B=i+76|0;C=i+72|0;D=i+68|0;E=i+64|0;F=i+60|0;G=i+56|0;H=i+52|0;I=i+48|0;J=i+44|0;K=i+40|0;L=i+36|0;M=i+32|0;N=i+28|0;O=i+24|0;P=i+20|0;Q=i+196|0;R=i+16|0;S=i+12|0;T=i+8|0;U=i+4|0;V=i;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if((c[o>>2]|0)>>>0<10){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}c[q>>2]=c[n>>2];c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=(c[p>>2]|0)+4;c[u>>2]=c[t>>2];c[z>>2]=(Eq(c[q>>2]|0)|0)&65535;c[A>>2]=(Eq((c[q>>2]|0)+2|0)|0)&65535;c[B>>2]=(Eq((c[q>>2]|0)+4|0)|0)&65535;c[C>>2]=(c[o>>2]|0)-((c[z>>2]|0)+(c[A>>2]|0)+(c[B>>2]|0)+6);c[D>>2]=(c[q>>2]|0)+6;c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(((c[m>>2]|0)+3|0)>>>0)/4|0;c[I>>2]=(c[r>>2]|0)+(c[H>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[H>>2]|0);c[K>>2]=(c[J>>2]|0)+(c[H>>2]|0);c[L>>2]=c[r>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];c[O>>2]=c[K>>2];_s(Q,c[p>>2]|0);c[R>>2]=d[Q+2>>0];if((c[C>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}c[S>>2]=Ds(v,c[D>>2]|0,c[z>>2]|0)|0;if(at(c[S>>2]|0)|0){c[j>>2]=c[S>>2];W=c[j>>2]|0;l=i;return W|0;}c[T>>2]=Ds(w,c[E>>2]|0,c[A>>2]|0)|0;if(at(c[T>>2]|0)|0){c[j>>2]=c[T>>2];W=c[j>>2]|0;l=i;return W|0;}c[U>>2]=Ds(x,c[F>>2]|0,c[B>>2]|0)|0;if(at(c[U>>2]|0)|0){c[j>>2]=c[U>>2];W=c[j>>2]|0;l=i;return W|0;}c[V>>2]=Ds(y,c[G>>2]|0,c[C>>2]|0)|0;if(at(c[V>>2]|0)|0){c[j>>2]=c[V>>2];W=c[j>>2]|0;l=i;return W|0;}V=Fs(v)|0;C=V|(Fs(w)|0);V=C|(Fs(x)|0);c[P>>2]=V|(Fs(y)|0);while(1){if(c[P>>2]|0)break;if((c[O>>2]|0)>>>0>=((c[s>>2]|0)+-7|0)>>>0)break;if(dt()|0){V=mt(v,c[u>>2]|0,c[R>>2]|0)|0;C=c[L>>2]|0;c[L>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(w,c[u>>2]|0,c[R>>2]|0)|0;C=c[M>>2]|0;c[M>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(x,c[u>>2]|0,c[R>>2]|0)|0;C=c[N>>2]|0;c[N>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(y,c[u>>2]|0,c[R>>2]|0)|0;C=c[O>>2]|0;c[O>>2]=C+1;a[C>>0]=V;}dt()|0;V=mt(v,c[u>>2]|0,c[R>>2]|0)|0;C=c[L>>2]|0;c[L>>2]=C+1;a[C>>0]=V;dt()|0;V=mt(w,c[u>>2]|0,c[R>>2]|0)|0;C=c[M>>2]|0;c[M>>2]=C+1;a[C>>0]=V;dt()|0;V=mt(x,c[u>>2]|0,c[R>>2]|0)|0;C=c[N>>2]|0;c[N>>2]=C+1;a[C>>0]=V;dt()|0;V=mt(y,c[u>>2]|0,c[R>>2]|0)|0;C=c[O>>2]|0;c[O>>2]=C+1;a[C>>0]=V;if(dt()|0){V=mt(v,c[u>>2]|0,c[R>>2]|0)|0;C=c[L>>2]|0;c[L>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(w,c[u>>2]|0,c[R>>2]|0)|0;C=c[M>>2]|0;c[M>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(x,c[u>>2]|0,c[R>>2]|0)|0;C=c[N>>2]|0;c[N>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(y,c[u>>2]|0,c[R>>2]|0)|0;C=c[O>>2]|0;c[O>>2]=C+1;a[C>>0]=V;}V=mt(v,c[u>>2]|0,c[R>>2]|0)|0;C=c[L>>2]|0;c[L>>2]=C+1;a[C>>0]=V;V=mt(w,c[u>>2]|0,c[R>>2]|0)|0;C=c[M>>2]|0;c[M>>2]=C+1;a[C>>0]=V;V=mt(x,c[u>>2]|0,c[R>>2]|0)|0;C=c[N>>2]|0;c[N>>2]=C+1;a[C>>0]=V;V=mt(y,c[u>>2]|0,c[R>>2]|0)|0;C=c[O>>2]|0;c[O>>2]=C+1;a[C>>0]=V;V=Fs(v)|0;C=V|(Fs(w)|0);V=C|(Fs(x)|0);c[P>>2]=V|(Fs(y)|0);}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}nt(c[L>>2]|0,v,c[I>>2]|0,c[u>>2]|0,c[R>>2]|0)|0;nt(c[M>>2]|0,w,c[J>>2]|0,c[u>>2]|0,c[R>>2]|0)|0;nt(c[N>>2]|0,x,c[K>>2]|0,c[u>>2]|0,c[R>>2]|0)|0;nt(c[O>>2]|0,y,c[s>>2]|0,c[u>>2]|0,c[R>>2]|0)|0;R=ct(v)|0;v=R&(ct(w)|0);w=v&(ct(x)|0);c[P>>2]=w&(ct(y)|0);if(c[P>>2]|0){c[j>>2]=c[m>>2];W=c[j>>2]|0;l=i;return W|0;}else{c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}return 0;}function mt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+16|0;c[h>>2]=b;c[i>>2]=e;c[j>>2]=f;c[k>>2]=gt(c[h>>2]|0,c[j>>2]|0)|0;a[m>>0]=a[(c[i>>2]|0)+(c[k>>2]<<1)>>0]|0;Ps(c[h>>2]|0,d[(c[i>>2]|0)+(c[k>>2]<<1)+1>>0]|0);l=g;return a[m>>0]|0;}function nt(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[i>>2];while(1){if(Fs(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>((c[k>>2]|0)+-4|0)>>>0)break;if(dt()|0){g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}dt()|0;g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;if(dt()|0){g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if(Fs(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}l=h;return(c[k>>2]|0)-(c[o>>2]|0)|0;}function ot(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;k=l;l=l+80|0;m=k+72|0;n=k+68|0;o=k+64|0;p=k+60|0;q=k+56|0;r=k+52|0;s=k+48|0;t=k+44|0;u=k+40|0;v=k+36|0;w=k+32|0;x=k+28|0;y=k+24|0;z=k+20|0;A=k+16|0;B=k+12|0;C=k+8|0;D=k+4|0;E=k;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[v>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}c[w>>2]=d[c[v>>2]>>0];s=c[w>>2]|0;a:do{if((c[w>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}c[x>>2]=pt(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[v>>2]|0)+1|0,c[w>>2]|0)|0;if(qt(c[x>>2]|0)|0){c[m>>2]=c[x>>2];F=c[m>>2]|0;l=k;return F|0;}}else{j=c[w>>2]|0;if(s>>>0>=242){c[x>>2]=c[7392+(j-242<<2)>>2];oE(c[n>>2]|0,1,c[o>>2]|0)|0;c[w>>2]=0;break;}c[x>>2]=j-127;c[w>>2]=(((c[x>>2]|0)+1|0)>>>0)/2|0;if(((c[w>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}if((c[x>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[v>>2]=(c[v>>2]|0)+1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[y>>2]|0)+1)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)&15;c[y>>2]=(c[y>>2]|0)+2;}}}while(0);y=c[p>>2]|0;v=y+68|0;do{c[y>>2]=0;y=y+4|0;}while((y|0)<(v|0));c[u>>2]=0;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0|0)>=16){G=20;break;}y=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)<<2)|0;c[y>>2]=(c[y>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)>>1);c[z>>2]=(c[z>>2]|0)+1;}if((G|0)==20){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[A>>2]=(Rs(c[u>>2]|0)|0)+1;if((c[A>>2]|0)>>>0>16){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[c[r>>2]>>2]=c[A>>2];c[B>>2]=1<<c[A>>2];c[C>>2]=(c[B>>2]|0)-(c[u>>2]|0);c[D>>2]=1<<(Rs(c[C>>2]|0)|0);c[E>>2]=(Rs(c[C>>2]|0)|0)+1;if((c[D>>2]|0)!=(c[C>>2]|0)){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}a[(c[n>>2]|0)+(c[x>>2]|0)>>0]=c[E>>2];n=(c[p>>2]|0)+(c[E>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[x>>2]|0)+1;c[m>>2]=(c[w>>2]|0)+1;F=c[m>>2]|0;l=k;return F|0;}c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}function pt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+16960|0;g=f+16952|0;h=f+16948|0;i=f+16944|0;j=f+16940|0;k=f+16936|0;m=f+16932|0;n=f+16928|0;o=f+16400|0;p=f;q=f+16924|0;r=f+16920|0;s=f+16916|0;t=f+16912|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=c[m>>2];c[r>>2]=255;if((c[k>>2]|0)>>>0<2){c[g>>2]=-72;u=c[g>>2]|0;l=f;return u|0;}c[s>>2]=Vs(o,r,q,c[m>>2]|0,c[k>>2]|0)|0;m=(hr(c[s>>2]|0)|0)!=0;j=c[s>>2]|0;if(m){c[g>>2]=j;u=c[g>>2]|0;l=f;return u|0;}if(j>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;u=c[g>>2]|0;l=f;return u|0;}c[n>>2]=(c[n>>2]|0)+(c[s>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[s>>2]|0);c[t>>2]=Us(p,o,c[r>>2]|0,c[q>>2]|0)|0;if(hr(c[t>>2]|0)|0){c[g>>2]=c[t>>2];u=c[g>>2]|0;l=f;return u|0;}else{c[g>>2]=rt(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,p)|0;u=c[g>>2]|0;l=f;return u|0;}return 0;}function qt(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=hr(c[d>>2]|0)|0;l=b;return a|0;}function rt(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;i=l;l=l+208|0;j=i+192|0;k=i+188|0;m=i+184|0;n=i+180|0;o=i+176|0;p=i+172|0;q=i+168|0;r=i+164|0;s=i+160|0;t=i+156|0;u=i+152|0;v=i+136|0;w=i+128|0;x=i+120|0;y=i+116|0;z=i+112|0;A=i+108|0;B=i+104|0;C=i+100|0;D=i+96|0;E=i+92|0;F=i+88|0;G=i+84|0;H=i+80|0;I=i+76|0;J=i+72|0;K=i+56|0;L=i+48|0;M=i+40|0;N=i+36|0;O=i+32|0;P=i+28|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[P>>2]=b;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=c[T>>2];c[V>>2]=c[U>>2];c[W>>2]=e[(c[V>>2]|0)+2>>1];V=c[P>>2]|0;P=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;if(c[W>>2]|0){c[A>>2]=V;c[B>>2]=P;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=1;c[G>>2]=c[A>>2];c[H>>2]=c[G>>2];c[I>>2]=(c[H>>2]|0)+(c[B>>2]|0);c[J>>2]=(c[I>>2]|0)+-3;c[N>>2]=Ds(K,c[C>>2]|0,c[D>>2]|0)|0;do{if(hr(c[N>>2]|0)|0)c[z>>2]=c[N>>2];else{Es(L,K,c[E>>2]|0);Es(M,K,c[E>>2]|0);while(1){if(Fs(K)|0)break;if((c[H>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break;if(c[F>>2]|0)X=(st(L,K)|0)&255;else X=(tt(L,K)|0)&255;a[c[H>>2]>>0]=X;if(c[F>>2]|0)Y=(st(M,K)|0)&255;else Y=(tt(M,K)|0)&255;a[(c[H>>2]|0)+1>>0]=Y;if((Fs(K)|0)>>>0>0){Z=14;break;}if(c[F>>2]|0)_=(st(L,K)|0)&255;else _=(tt(L,K)|0)&255;a[(c[H>>2]|0)+2>>0]=_;if(c[F>>2]|0)$=(st(M,K)|0)&255;else $=(tt(M,K)|0)&255;a[(c[H>>2]|0)+3>>0]=$;c[H>>2]=(c[H>>2]|0)+4;}if((Z|0)==14)c[H>>2]=(c[H>>2]|0)+2;while(1){if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=24;break;}if(c[F>>2]|0)aa=(st(L,K)|0)&255;else aa=(tt(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=aa;if((Fs(K)|0)==3){Z=29;break;}if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=34;break;}if(c[F>>2]|0)ba=(st(M,K)|0)&255;else ba=(tt(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ba;if((Fs(K)|0)==3){Z=39;break;}}if((Z|0)==24){c[z>>2]=-70;break;}else if((Z|0)==29){if(c[F>>2]|0)ca=(st(M,K)|0)&255;else ca=(tt(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ca;}else if((Z|0)==34){c[z>>2]=-70;break;}else if((Z|0)==39){if(c[F>>2]|0)da=(st(L,K)|0)&255;else da=(tt(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=da;}c[z>>2]=(c[H>>2]|0)-(c[G>>2]|0);}}while(0);c[O>>2]=c[z>>2];ea=c[O>>2]|0;l=i;return ea|0;}else{c[k>>2]=V;c[m>>2]=P;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=0;c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[s>>2]|0)+(c[m>>2]|0);c[u>>2]=(c[t>>2]|0)+-3;c[y>>2]=Ds(v,c[n>>2]|0,c[o>>2]|0)|0;do{if(hr(c[y>>2]|0)|0)c[j>>2]=c[y>>2];else{Es(w,v,c[p>>2]|0);Es(x,v,c[p>>2]|0);while(1){if(Fs(v)|0)break;if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;if(c[q>>2]|0)fa=(st(w,v)|0)&255;else fa=(tt(w,v)|0)&255;a[c[s>>2]>>0]=fa;if(c[q>>2]|0)ga=(st(x,v)|0)&255;else ga=(tt(x,v)|0)&255;a[(c[s>>2]|0)+1>>0]=ga;if((Fs(v)|0)>>>0>0){Z=58;break;}if(c[q>>2]|0)ha=(st(w,v)|0)&255;else ha=(tt(w,v)|0)&255;a[(c[s>>2]|0)+2>>0]=ha;if(c[q>>2]|0)ia=(st(x,v)|0)&255;else ia=(tt(x,v)|0)&255;a[(c[s>>2]|0)+3>>0]=ia;c[s>>2]=(c[s>>2]|0)+4;}if((Z|0)==58)c[s>>2]=(c[s>>2]|0)+2;while(1){if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=68;break;}if(c[q>>2]|0)ja=(st(w,v)|0)&255;else ja=(tt(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ja;if((Fs(v)|0)==3){Z=73;break;}if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=78;break;}if(c[q>>2]|0)ka=(st(x,v)|0)&255;else ka=(tt(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ka;if((Fs(v)|0)==3){Z=83;break;}}if((Z|0)==68){c[j>>2]=-70;break;}else if((Z|0)==73){if(c[q>>2]|0)la=(st(x,v)|0)&255;else la=(tt(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=la;}else if((Z|0)==78){c[j>>2]=-70;break;}else if((Z|0)==83){if(c[q>>2]|0)ma=(st(w,v)|0)&255;else ma=(tt(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ma;}c[j>>2]=(c[s>>2]|0)-(c[r>>2]|0);}}while(0);c[O>>2]=c[j>>2];ea=c[O>>2]|0;l=i;return ea|0;}return 0;}function st(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=ut(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function tt(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=Ms(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=gt(c[e>>2]|0,c[f>>2]|0)|0;Ps(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function vt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;g=l;l=l+2144|0;h=g+2124|0;i=g+2120|0;j=g+2116|0;k=g+2112|0;m=g+1760|0;n=g+1248|0;o=g+1168|0;p=g+1088|0;q=g+2108|0;r=g;s=g+2104|0;t=g+2100|0;u=g+2096|0;v=g+2092|0;w=g+2128|0;x=g+2088|0;y=g+2084|0;z=g+2080|0;A=g+2076|0;B=g+2072|0;C=g+2068|0;D=g+2064|0;E=g+2060|0;F=g+2056|0;G=g+2052|0;H=g+2048|0;I=g+2044|0;J=g+2040|0;K=g+2036|0;L=g+2032|0;M=g+2028|0;N=g+2024|0;O=g+2020|0;P=g+2016|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;f=o;e=f+68|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));f=p;e=f+72|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));c[q>>2]=p+4;_s(w,c[i>>2]|0);c[x>>2]=d[w>>0];c[z>>2]=(c[i>>2]|0)+4;c[A>>2]=c[z>>2];if((c[x>>2]|0)>>>0>16){c[h>>2]=-44;Q=c[h>>2]|0;l=g;return Q|0;}c[y>>2]=ot(m,256,o,v,s,c[j>>2]|0,c[k>>2]|0)|0;if(at(c[y>>2]|0)|0){c[h>>2]=c[y>>2];Q=c[h>>2]|0;l=g;return Q|0;}if((c[s>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[h>>2]=-44;Q=c[h>>2]|0;l=g;return Q|0;}c[t>>2]=c[s>>2];while(1){if(c[o+(c[t>>2]<<2)>>2]|0)break;c[t>>2]=(c[t>>2]|0)+-1;}c[C>>2]=0;c[B>>2]=1;while(1){R=c[C>>2]|0;if((c[B>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[D>>2]=R;c[C>>2]=(c[C>>2]|0)+(c[o+(c[B>>2]<<2)>>2]|0);c[(c[q>>2]|0)+(c[B>>2]<<2)>>2]=c[D>>2];c[B>>2]=(c[B>>2]|0)+1;}c[c[q>>2]>>2]=R;c[u>>2]=c[C>>2];c[E>>2]=0;while(1){if((c[E>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[F>>2]=d[m+(c[E>>2]|0)>>0];C=(c[q>>2]|0)+(c[F>>2]<<2)|0;R=c[C>>2]|0;c[C>>2]=R+1;c[G>>2]=R;a[n+(c[G>>2]<<1)>>0]=c[E>>2];a[n+(c[G>>2]<<1)+1>>0]=c[F>>2];c[E>>2]=(c[E>>2]|0)+1;}c[c[q>>2]>>2]=0;c[H>>2]=r;c[I>>2]=(c[x>>2]|0)-(c[s>>2]|0)-1;c[J>>2]=0;c[K>>2]=1;while(1){if((c[K>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[L>>2]=c[J>>2];c[J>>2]=(c[J>>2]|0)+(c[o+(c[K>>2]<<2)>>2]<<(c[K>>2]|0)+(c[I>>2]|0));c[(c[H>>2]|0)+(c[K>>2]<<2)>>2]=c[L>>2];c[K>>2]=(c[K>>2]|0)+1;}c[M>>2]=(c[s>>2]|0)+1-(c[t>>2]|0);c[N>>2]=c[M>>2];while(1){if((c[N>>2]|0)>>>0>=((c[x>>2]|0)-(c[M>>2]|0)+1|0)>>>0)break;c[O>>2]=r+((c[N>>2]|0)*68|0);c[P>>2]=1;while(1){if((c[P>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[(c[O>>2]|0)+(c[P>>2]<<2)>>2]=(c[(c[H>>2]|0)+(c[P>>2]<<2)>>2]|0)>>>(c[N>>2]|0);c[P>>2]=(c[P>>2]|0)+1;}c[N>>2]=(c[N>>2]|0)+1;}xt(c[A>>2]|0,c[x>>2]|0,n,c[u>>2]|0,p,r,c[t>>2]|0,(c[s>>2]|0)+1|0);a[w+2>>0]=c[x>>2];a[w+1>>0]=1;x=c[i>>2]|0;a[x>>0]=a[w>>0]|0;a[x+1>>0]=a[w+1>>0]|0;a[x+2>>0]=a[w+2>>0]|0;a[x+3>>0]=a[w+3>>0]|0;c[h>>2]=c[y>>2];Q=c[h>>2]|0;l=g;return Q|0;}function wt(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;h=l;l=l+208|0;i=h+200|0;j=h+196|0;k=h+192|0;m=h+188|0;n=h+184|0;o=h+180|0;p=h+176|0;q=h+172|0;r=h+168|0;s=h+164|0;t=h+160|0;u=h+144|0;v=h+128|0;w=h+112|0;x=h+96|0;y=h+88|0;z=h+84|0;A=h+80|0;B=h+76|0;C=h+72|0;D=h+68|0;E=h+64|0;F=h+60|0;G=h+56|0;H=h+52|0;I=h+48|0;J=h+44|0;K=h+40|0;L=h+36|0;M=h+32|0;N=h+28|0;O=h+24|0;P=h+204|0;Q=h+20|0;R=h+16|0;S=h+12|0;T=h+8|0;U=h+4|0;V=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[n>>2]|0)>>>0<10){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}c[p>>2]=c[m>>2];c[q>>2]=c[j>>2];c[r>>2]=(c[q>>2]|0)+(c[k>>2]|0);c[s>>2]=(c[o>>2]|0)+4;c[t>>2]=c[s>>2];c[y>>2]=(Eq(c[p>>2]|0)|0)&65535;c[z>>2]=(Eq((c[p>>2]|0)+2|0)|0)&65535;c[A>>2]=(Eq((c[p>>2]|0)+4|0)|0)&65535;c[B>>2]=(c[n>>2]|0)-((c[y>>2]|0)+(c[z>>2]|0)+(c[A>>2]|0)+6);c[C>>2]=(c[p>>2]|0)+6;c[D>>2]=(c[C>>2]|0)+(c[y>>2]|0);c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(((c[k>>2]|0)+3|0)>>>0)/4|0;c[H>>2]=(c[q>>2]|0)+(c[G>>2]|0);c[I>>2]=(c[H>>2]|0)+(c[G>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[G>>2]|0);c[K>>2]=c[q>>2];c[L>>2]=c[H>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];_s(P,c[o>>2]|0);c[Q>>2]=d[P+2>>0];if((c[B>>2]|0)>>>0>(c[n>>2]|0)>>>0){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}c[R>>2]=Ds(u,c[C>>2]|0,c[y>>2]|0)|0;if(at(c[R>>2]|0)|0){c[i>>2]=c[R>>2];W=c[i>>2]|0;l=h;return W|0;}c[S>>2]=Ds(v,c[D>>2]|0,c[z>>2]|0)|0;if(at(c[S>>2]|0)|0){c[i>>2]=c[S>>2];W=c[i>>2]|0;l=h;return W|0;}c[T>>2]=Ds(w,c[E>>2]|0,c[A>>2]|0)|0;if(at(c[T>>2]|0)|0){c[i>>2]=c[T>>2];W=c[i>>2]|0;l=h;return W|0;}c[U>>2]=Ds(x,c[F>>2]|0,c[B>>2]|0)|0;if(at(c[U>>2]|0)|0){c[i>>2]=c[U>>2];W=c[i>>2]|0;l=h;return W|0;}U=Fs(u)|0;B=U|(Fs(v)|0);U=B|(Fs(w)|0);c[O>>2]=U|(Fs(x)|0);while(1){if(c[O>>2]|0)break;if((c[N>>2]|0)>>>0>=((c[r>>2]|0)+-7|0)>>>0)break;if(dt()|0){U=et(c[K>>2]|0,u,c[t>>2]|0,c[Q>>2]|0)|0;c[K>>2]=(c[K>>2]|0)+U;}if(dt()|0){U=et(c[L>>2]|0,v,c[t>>2]|0,c[Q>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+U;}if(dt()|0){U=et(c[M>>2]|0,w,c[t>>2]|0,c[Q>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+U;}if(dt()|0){U=et(c[N>>2]|0,x,c[t>>2]|0,c[Q>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+U;}dt()|0;U=et(c[K>>2]|0,u,c[t>>2]|0,c[Q>>2]|0)|0;c[K>>2]=(c[K>>2]|0)+U;dt()|0;U=et(c[L>>2]|0,v,c[t>>2]|0,c[Q>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+U;dt()|0;U=et(c[M>>2]|0,w,c[t>>2]|0,c[Q>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+U;dt()|0;U=et(c[N>>2]|0,x,c[t>>2]|0,c[Q>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+U;if(dt()|0){U=et(c[K>>2]|0,u,c[t>>2]|0,c[Q>>2]|0)|0;c[K>>2]=(c[K>>2]|0)+U;}if(dt()|0){U=et(c[L>>2]|0,v,c[t>>2]|0,c[Q>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+U;}if(dt()|0){U=et(c[M>>2]|0,w,c[t>>2]|0,c[Q>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+U;}if(dt()|0){U=et(c[N>>2]|0,x,c[t>>2]|0,c[Q>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+U;}U=et(c[K>>2]|0,u,c[t>>2]|0,c[Q>>2]|0)|0;c[K>>2]=(c[K>>2]|0)+U;U=et(c[L>>2]|0,v,c[t>>2]|0,c[Q>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+U;U=et(c[M>>2]|0,w,c[t>>2]|0,c[Q>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+U;U=et(c[N>>2]|0,x,c[t>>2]|0,c[Q>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+U;U=Fs(u)|0;B=U|(Fs(v)|0);U=B|(Fs(w)|0);c[O>>2]=U|(Fs(x)|0);}if((c[K>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}bt(c[K>>2]|0,u,c[H>>2]|0,c[t>>2]|0,c[Q>>2]|0)|0;bt(c[L>>2]|0,v,c[I>>2]|0,c[t>>2]|0,c[Q>>2]|0)|0;bt(c[M>>2]|0,w,c[J>>2]|0,c[t>>2]|0,c[Q>>2]|0)|0;bt(c[N>>2]|0,x,c[r>>2]|0,c[t>>2]|0,c[Q>>2]|0)|0;Q=ct(u)|0;u=Q&(ct(v)|0);v=u&(ct(w)|0);c[V>>2]=v&(ct(x)|0);if(c[V>>2]|0){c[i>>2]=c[k>>2];W=c[i>>2]|0;l=h;return W|0;}else{c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}return 0;}function xt(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+160|0;o=n+140|0;p=n+136|0;q=n+132|0;r=n+128|0;s=n+124|0;t=n+120|0;u=n+116|0;v=n+112|0;w=n;x=n+108|0;y=n+104|0;z=n+100|0;A=n+148|0;B=n+96|0;C=n+92|0;D=n+88|0;E=n+84|0;F=n+80|0;G=n+76|0;H=n+144|0;I=n+72|0;J=n+68|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+68|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];yt((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*68|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{zt(H,b[A>>1]|0);a[H+2>>0]=c[C>>2];a[H+3>>0]=1;c[J>>2]=(c[D>>2]|0)+(c[E>>2]|0);c[I>>2]=c[D>>2];while(1){if((c[I>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[I>>2]<<2)|0;b[m>>1]=b[H>>1]|0;b[m+2>>1]=b[H+2>>1]|0;c[I>>2]=(c[I>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function yt(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+160|0;q=p+136|0;r=p+132|0;s=p+128|0;t=p+124|0;u=p+120|0;v=p+116|0;w=p+112|0;x=p+108|0;y=p+144|0;z=p+140|0;A=p;B=p+104|0;C=p+100|0;D=p+96|0;E=p+92|0;F=p+88|0;G=p+84|0;H=p+80|0;I=p+76|0;J=p+72|0;K=p+68|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+68|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[C>>2]=c[A+(c[u>>2]<<2)>>2];zt(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[C>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[B>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[B>>2]=(c[B>>2]|0)+1;}}}while(0);c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);zt(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{B=c[q>>2]|0;C=c[J>>2]|0;c[J>>2]=C+1;u=B+(C<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}l=p;return;}function zt(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Gq()|0)!=0;d=c[h>>2]|0;if(f){At(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function At(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=c[g>>2]|0;a[e>>0]=a[h>>0]|0;a[e+1>>0]=a[h+1>>0]|0;l=f;return;}function Bt(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+80|0;i=h+60|0;j=h+56|0;k=h+52|0;m=h+48|0;n=h+44|0;o=h+40|0;p=h+36|0;q=h+32|0;r=h+28|0;s=h+24|0;t=h+8|0;u=h+64|0;v=h+4|0;w=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[j>>2];c[q>>2]=(c[p>>2]|0)+(c[k>>2]|0);c[r>>2]=(c[o>>2]|0)+4;c[s>>2]=c[r>>2];_s(u,c[o>>2]|0);c[v>>2]=d[u+2>>0];c[w>>2]=Ds(t,c[m>>2]|0,c[n>>2]|0)|0;if(at(c[w>>2]|0)|0){c[i>>2]=c[w>>2];x=c[i>>2]|0;l=h;return x|0;}nt(c[p>>2]|0,t,c[q>>2]|0,c[s>>2]|0,c[v>>2]|0)|0;if(ct(t)|0){c[i>>2]=c[k>>2];x=c[i>>2]|0;l=h;return x|0;}else{c[i>>2]=-20;x=c[i>>2]|0;l=h;return x|0;}return 0;}function Ct(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[(c[d>>2]|0)+21536>>2]=5;c[(c[d>>2]|0)+21580>>2]=0;c[(c[d>>2]|0)+21520>>2]=0;c[(c[d>>2]|0)+21524>>2]=0;c[(c[d>>2]|0)+21528>>2]=0;c[(c[d>>2]|0)+21532>>2]=0;c[(c[d>>2]|0)+5132>>2]=201326604;c[(c[d>>2]|0)+21588>>2]=0;c[(c[d>>2]|0)+21584>>2]=0;c[(c[d>>2]|0)+21684>>2]=0;c[e>>2]=0;while(1){if((c[e>>2]|0)>=3)break;c[(c[d>>2]|0)+21540+(c[e>>2]<<2)>>2]=c[11940+(c[e>>2]<<2)>>2];c[e>>2]=(c[e>>2]|0)+1;}l=b;return 0;}function Dt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)>>>0<8){c[f>>2]=Et(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}c[j>>2]=Bq(c[h>>2]|0)|0;if((c[j>>2]|0)!=-332356553){c[f>>2]=Et(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}j=Bq((c[h>>2]|0)+4|0)|0;c[(c[g>>2]|0)+21684>>2]=j;c[h>>2]=(c[h>>2]|0)+8;c[i>>2]=(c[i>>2]|0)-8;c[k>>2]=Ft(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;if(hr(c[k>>2]|0)|0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}else{c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);c[f>>2]=Et(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}return 0;}function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+21532>>2]=c[(c[f>>2]|0)+21520>>2];c[(c[f>>2]|0)+21528>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+21520>>2]|0)-(c[(c[f>>2]|0)+21524>>2]|0)));c[(c[f>>2]|0)+21524>>2]=c[g>>2];c[(c[f>>2]|0)+21520>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return 0;}function Ft(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;e=l;l=l+336|0;f=e+324|0;g=e+320|0;h=e+316|0;i=e+312|0;j=e+308|0;k=e+304|0;m=e+300|0;n=e+192|0;o=e+296|0;p=e+292|0;q=e+288|0;r=e+284|0;s=e+80|0;t=e+280|0;u=e+276|0;v=e+272|0;w=e+268|0;x=e;y=e+264|0;z=e+260|0;A=e+256|0;B=e+252|0;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[h>>2];c[k>>2]=(c[j>>2]|0)+(c[i>>2]|0);c[m>>2]=vt((c[g>>2]|0)+5132|0,c[h>>2]|0,c[i>>2]|0)|0;if(hr(c[m>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[m>>2]|0);c[o>>2]=28;c[q>>2]=Vs(n,o,p,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if(hr(c[q>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[p>>2]|0)>>>0>8){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[r>>2]=Us((c[g>>2]|0)+2052|0,n,c[o>>2]|0,c[p>>2]|0)|0;if(hr(c[r>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[q>>2]|0);c[t>>2]=52;c[v>>2]=Vs(s,t,u,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if(hr(c[v>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[u>>2]|0)>>>0>9){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[w>>2]=Us((c[g>>2]|0)+3080|0,s,c[t>>2]|0,c[u>>2]|0)|0;if(hr(c[w>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[v>>2]|0);c[y>>2]=35;c[A>>2]=Vs(x,y,z,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if(hr(c[A>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[z>>2]|0)>>>0>9){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[B>>2]=Us(c[g>>2]|0,x,c[y>>2]|0,c[z>>2]|0)|0;if(hr(c[B>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[A>>2]|0);if(((c[j>>2]|0)+12|0)>>>0>(c[k>>2]|0)>>>0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}k=Bq(c[j>>2]|0)|0;c[(c[g>>2]|0)+21540>>2]=k;if(c[(c[g>>2]|0)+21540>>2]|0?(c[(c[g>>2]|0)+21540>>2]|0)>>>0<(c[i>>2]|0)>>>0:0){k=Bq((c[j>>2]|0)+4|0)|0;c[(c[g>>2]|0)+21540+4>>2]=k;if(c[(c[g>>2]|0)+21540+4>>2]|0?(c[(c[g>>2]|0)+21540+4>>2]|0)>>>0<(c[i>>2]|0)>>>0:0){k=Bq((c[j>>2]|0)+8|0)|0;c[(c[g>>2]|0)+21540+8>>2]=k;if(c[(c[g>>2]|0)+21540+8>>2]|0?(c[(c[g>>2]|0)+21540+8>>2]|0)>>>0<(c[i>>2]|0)>>>0:0){c[j>>2]=(c[j>>2]|0)+12;c[(c[g>>2]|0)+21588>>2]=1;c[(c[g>>2]|0)+21584>>2]=1;c[f>>2]=(c[j>>2]|0)-(c[h>>2]|0);C=c[f>>2]|0;l=e;return C|0;}c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}function Gt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;if((c[a>>2]|0)==0?(c[a+4>>2]|0)==0:0){c[a>>2]=c[2988];c[a+4>>2]=c[2989];c[a+8>>2]=c[2990];}if(c[a>>2]|0?c[a+4>>2]|0:0){c[e>>2]=qc[c[a>>2]&63](c[a+8>>2]|0,152808)|0;if(c[e>>2]|0){f=(c[e>>2]|0)+21692|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];Ct(c[e>>2]|0)|0;c[d>>2]=c[e>>2];g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=0;g=c[d>>2]|0;l=b;return g|0;}}c[d>>2]=0;g=c[d>>2]|0;l=b;return g|0;}function Ht(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[d+8>>2]=a;c[e>>2]=b;c[f>>2]=Cy(c[e>>2]|0)|0;l=d;return c[f>>2]|0;}function It(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[d+4>>2]=a;c[e>>2]=b;Dy(c[e>>2]|0);l=d;return;}function Jt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=Ou(c[g>>2]|0)|0;if(jr(c[j>>2]|0)|0){c[f>>2]=c[j>>2];m=c[f>>2]|0;l=e;return m|0;}if((c[h>>2]|0)!=0&(c[i>>2]|0)!=0?(c[k>>2]=Pu(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0,jr(c[k>>2]|0)|0):0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+21520>>2]|0)){l=d;return;}c[(c[e>>2]|0)+21532>>2]=c[(c[e>>2]|0)+21520>>2];c[(c[e>>2]|0)+21528>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+21520>>2]|0)-(c[(c[e>>2]|0)+21524>>2]|0)));c[(c[e>>2]|0)+21524>>2]=c[f>>2];c[(c[e>>2]|0)+21520>>2]=c[f>>2];l=d;return;}function Lt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=l;l=l+80|0;h=g+68|0;i=g+64|0;j=g+60|0;k=g+56|0;m=g+52|0;n=g+48|0;o=g+44|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+16|0;v=g+8|0;w=g+4|0;x=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=(c[o>>2]|0)+(c[n>>2]|0);c[q>>2]=c[j>>2];c[r>>2]=c[q>>2];c[s>>2]=(c[q>>2]|0)+(c[k>>2]|0);c[t>>2]=c[n>>2];c[u>>2]=0;c[u+4>>2]=0;if((c[n>>2]|0)>>>0<8){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}c[v>>2]=Nq(c[m>>2]|0,5)|0;if(jr(c[v>>2]|0)|0){c[h>>2]=c[v>>2];y=c[h>>2]|0;l=g;return y|0;}if((c[n>>2]|0)>>>0<((c[v>>2]|0)+3|0)>>>0){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}if(Mt(c[i>>2]|0,c[m>>2]|0,c[v>>2]|0)|0){c[h>>2]=-20;y=c[h>>2]|0;l=g;return y|0;}c[o>>2]=(c[o>>2]|0)+(c[v>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[v>>2]|0);a:while(1){c[w>>2]=0;c[x>>2]=kr(c[o>>2]|0,(c[p>>2]|0)-(c[o>>2]|0)|0,u)|0;if(jr(c[x>>2]|0)|0){z=11;break;}c[o>>2]=(c[o>>2]|0)+3;c[t>>2]=(c[t>>2]|0)-3;if((c[x>>2]|0)>>>0>(c[t>>2]|0)>>>0){z=13;break;}switch(c[u>>2]|0){case 2:{z=17;break a;break;}case 0:{c[w>>2]=Nt(c[i>>2]|0,c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[x>>2]|0)|0;break;}case 1:{c[w>>2]=Ot(c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[x>>2]|0)|0;break;}case 3:{if(c[t>>2]|0){z=19;break a;}break;}default:{z=20;break a;}}if(!(c[x>>2]|0)){z=25;break;}v=(jr(c[w>>2]|0)|0)!=0;A=c[w>>2]|0;if(v){z=23;break;}c[r>>2]=(c[r>>2]|0)+A;c[o>>2]=(c[o>>2]|0)+(c[x>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[x>>2]|0);}if((z|0)==11){c[h>>2]=c[x>>2];y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==13){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==17){c[h>>2]=-1;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==19){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==20){c[h>>2]=-1;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==23){c[h>>2]=A;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==25){c[h>>2]=(c[r>>2]|0)-(c[q>>2]|0);y=c[h>>2]|0;l=g;return y|0;}return 0;}function Mt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=zq((c[g>>2]|0)+21544|0,c[h>>2]|0,c[i>>2]|0)|0;if(au()|0?(c[(c[g>>2]|0)+21544+8>>2]|0)>>>0>25:0){c[f>>2]=-14;k=c[f>>2]|0;l=e;return k|0;}c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}function Nt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];if((c[n>>2]|0)>>>0>=131072){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}c[p>>2]=Pt(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(jr(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+f;c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=Qt(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Ot(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function Pt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+40|0;p=g+36|0;q=g+32|0;r=g+28|0;s=g+24|0;t=g+20|0;u=g+16|0;v=g+12|0;w=g+8|0;x=g+4|0;y=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<3){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch((d[c[m>>2]>>0]|0)>>6|0){case 0:{c[p>>2]=0;c[q>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[k>>2]|0)>>>0<5){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch(c[q>>2]|0){case 3:{c[q>>2]=5;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<14)+((d[(c[m>>2]|0)+1>>0]|0)<<6)+((d[(c[m>>2]|0)+2>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&3)<<16)+((d[(c[m>>2]|0)+3>>0]|0)<<8)+(d[(c[m>>2]|0)+4>>0]|0);break;}case 2:{c[q>>2]=4;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<10)+((d[(c[m>>2]|0)+1>>0]|0)<<2)+((d[(c[m>>2]|0)+2>>0]|0)>>6);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&63)<<8)+(d[(c[m>>2]|0)+3>>0]|0);break;}default:{c[q>>2]=3;c[p>>2]=(d[c[m>>2]>>0]|0)&16;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);}}if((c[n>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(((c[o>>2]|0)+(c[q>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}j=(c[i>>2]|0)+21580|0;f=c[n>>2]|0;e=(c[m>>2]|0)+(c[q>>2]|0)|0;b=c[o>>2]|0;if(c[p>>2]|0)A=lu(j,f,e,b)|0;else A=mu(j,f,e,b)|0;if(jr(A)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+21572>>2]=(c[i>>2]|0)+21580;c[(c[i>>2]|0)+21576>>2]=c[n>>2];n=(c[i>>2]|0)+21580+(c[(c[i>>2]|0)+21576>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=(c[o>>2]|0)+(c[q>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 1:{c[t>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[t>>2]|0)!=1){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(!(c[(c[i>>2]|0)+21568>>2]|0)){c[h>>2]=-30;z=c[h>>2]|0;l=g;return z|0;}c[t>>2]=3;c[r>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[s>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if(((c[s>>2]|0)+(c[t>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}c[u>>2]=nu((c[i>>2]|0)+21580|0,c[r>>2]|0,(c[m>>2]|0)+(c[t>>2]|0)|0,c[s>>2]|0,(c[i>>2]|0)+5132|0)|0;if(jr(c[u>>2]|0)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+21572>>2]=(c[i>>2]|0)+21580;c[(c[i>>2]|0)+21576>>2]=c[r>>2];r=(c[i>>2]|0)+21580+(c[(c[i>>2]|0)+21576>>2]|0)|0;a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;a[r+6>>0]=0;a[r+7>>0]=0;c[h>>2]=(c[s>>2]|0)+(c[t>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[w>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[w>>2]|0){case 3:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);break;}case 2:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[w>>2]=1;c[v>>2]=(d[c[m>>2]>>0]|0)&31;}}if(((c[w>>2]|0)+(c[v>>2]|0)+8|0)>>>0<=(c[k>>2]|0)>>>0){c[(c[i>>2]|0)+21572>>2]=(c[m>>2]|0)+(c[w>>2]|0);c[(c[i>>2]|0)+21576>>2]=c[v>>2];c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}if(((c[v>>2]|0)+(c[w>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{mE((c[i>>2]|0)+21580|0,(c[m>>2]|0)+(c[w>>2]|0)|0,c[v>>2]|0)|0;c[(c[i>>2]|0)+21572>>2]=(c[i>>2]|0)+21580;c[(c[i>>2]|0)+21576>>2]=c[v>>2];t=(c[i>>2]|0)+21580+(c[(c[i>>2]|0)+21576>>2]|0)|0;a[t>>0]=0;a[t+1>>0]=0;a[t+2>>0]=0;a[t+3>>0]=0;a[t+4>>0]=0;a[t+5>>0]=0;a[t+6>>0]=0;a[t+7>>0]=0;c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 3:{c[y>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[y>>2]|0){case 3:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if((c[k>>2]|0)>>>0<4){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[y>>2]=1;c[x>>2]=(d[c[m>>2]>>0]|0)&31;}}if((c[x>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{oE((c[i>>2]|0)+21580|0,(d[(c[m>>2]|0)+(c[y>>2]|0)>>0]|0)&255|0,(c[x>>2]|0)+8|0)|0;c[(c[i>>2]|0)+21572>>2]=(c[i>>2]|0)+21580;c[(c[i>>2]|0)+21576>>2]=c[x>>2];c[h>>2]=(c[y>>2]|0)+1;z=c[h>>2]|0;l=g;return z|0;}break;}default:{}}return 0;}function Qt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;g=l;l=l+176|0;h=g+164|0;i=g+160|0;j=g+156|0;k=g+152|0;m=g+148|0;n=g+144|0;o=g+140|0;p=g+136|0;q=g+132|0;r=g+128|0;s=g+124|0;t=g+120|0;u=g+116|0;v=g+112|0;w=g+108|0;x=g+104|0;y=g+100|0;z=g+96|0;A=g+92|0;B=g+88|0;C=g+84|0;D=g+80|0;E=g+68|0;F=g+16|0;G=g+12|0;H=g+8|0;I=g+4|0;J=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=c[(c[j>>2]|0)+21572>>2];c[v>>2]=(c[u>>2]|0)+(c[(c[j>>2]|0)+21576>>2]|0);c[w>>2]=c[j>>2];c[x>>2]=(c[j>>2]|0)+3080;c[y>>2]=(c[j>>2]|0)+2052;c[z>>2]=c[(c[j>>2]|0)+21524>>2];c[A>>2]=c[(c[j>>2]|0)+21528>>2];c[B>>2]=c[(c[j>>2]|0)+21532>>2];c[D>>2]=Rt(C,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[(c[j>>2]|0)+21568>>2]|0,c[p>>2]|0,c[o>>2]|0)|0;o=(jr(c[D>>2]|0)|0)!=0;m=c[D>>2]|0;if(o){c[i>>2]=m;K=c[i>>2]|0;l=g;return K|0;}c[p>>2]=(c[p>>2]|0)+m;c[(c[j>>2]|0)+21568>>2]=0;if(c[C>>2]|0){c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+8>>2]=1;c[G>>2]=0;while(1){if((c[G>>2]|0)>>>0>=3)break;c[F+40+(c[G>>2]<<2)>>2]=1;c[G>>2]=(c[G>>2]|0)+1;}c[H>>2]=St(F,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;if(jr(c[H>>2]|0)|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}Tt(F+16|0,F,c[w>>2]|0);Tt(F+24|0,F,c[y>>2]|0);Tt(F+32|0,F,c[x>>2]|0);while(1){x=(Ut(F)|0)>>>0<=2;L=c[C>>2]|0;if(!(x?(c[C>>2]|0)!=0:0))break;c[C>>2]=L+-1;Vt(E,F);x=c[t>>2]|0;y=c[s>>2]|0;w=c[v>>2]|0;H=c[z>>2]|0;p=c[A>>2]|0;q=c[B>>2]|0;c[h>>2]=c[E>>2];c[h+4>>2]=c[E+4>>2];c[h+8>>2]=c[E+8>>2];c[I>>2]=Wt(x,y,h,u,w,H,p,q)|0;q=(jr(c[I>>2]|0)|0)!=0;M=c[I>>2]|0;if(q){N=12;break;}c[t>>2]=(c[t>>2]|0)+M;}if((N|0)==12){c[i>>2]=M;K=c[i>>2]|0;l=g;return K|0;}if(L|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}}c[J>>2]=(c[v>>2]|0)-(c[u>>2]|0);if((c[u>>2]|0)>>>0>(c[v>>2]|0)>>>0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}if(((c[t>>2]|0)+(c[J>>2]|0)|0)>>>0>(c[s>>2]|0)>>>0){c[i>>2]=-70;K=c[i>>2]|0;l=g;return K|0;}else{mE(c[t>>2]|0,c[u>>2]|0,c[J>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[J>>2]|0);c[i>>2]=(c[t>>2]|0)-(c[r>>2]|0);K=c[i>>2]|0;l=g;return K|0;}return 0;}function Rt(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;j=l;l=l+80|0;k=j+68|0;m=j+64|0;n=j+60|0;o=j+56|0;p=j+52|0;q=j+48|0;r=j+44|0;s=j+40|0;t=j+36|0;u=j+32|0;v=j+28|0;w=j+24|0;x=j+20|0;y=j+16|0;z=j+12|0;A=j+8|0;B=j+4|0;C=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=c[r>>2];c[u>>2]=(c[t>>2]|0)+(c[s>>2]|0);c[v>>2]=c[t>>2];if((c[s>>2]|0)>>>0<1){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}s=c[v>>2]|0;c[v>>2]=s+1;c[w>>2]=d[s>>0];if(!(c[w>>2]|0)){c[c[m>>2]>>2]=0;c[k>>2]=1;D=c[k>>2]|0;l=j;return D|0;}do{if((c[w>>2]|0)>127){s=c[v>>2]|0;if((c[w>>2]|0)==255){if((s+2|0)>>>0<=(c[u>>2]|0)>>>0){c[w>>2]=((Oq(c[v>>2]|0)|0)&65535)+32512;c[v>>2]=(c[v>>2]|0)+2;break;}c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else{if(s>>>0<(c[u>>2]|0)>>>0){s=(c[w>>2]|0)-128<<8;r=c[v>>2]|0;c[v>>2]=r+1;c[w>>2]=s+(d[r>>0]|0);break;}c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}}}while(0);c[c[m>>2]>>2]=c[w>>2];c[x>>2]=(d[c[v>>2]>>0]|0)>>6;c[y>>2]=(d[c[v>>2]>>0]|0)>>4&3;c[z>>2]=(d[c[v>>2]>>0]|0)>>2&3;c[v>>2]=(c[v>>2]|0)+1;if((c[v>>2]|0)>>>0>((c[u>>2]|0)+-3|0)>>>0){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}c[A>>2]=gu(c[n>>2]|0,c[x>>2]|0,35,9,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,6560,6,c[q>>2]|0)|0;if(jr(c[A>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}c[v>>2]=(c[v>>2]|0)+(c[A>>2]|0);c[B>>2]=gu(c[p>>2]|0,c[y>>2]|0,28,8,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,6640,5,c[q>>2]|0)|0;if(jr(c[B>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}c[v>>2]=(c[v>>2]|0)+(c[B>>2]|0);c[C>>2]=gu(c[o>>2]|0,c[z>>2]|0,52,9,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,6704,6,c[q>>2]|0)|0;if(jr(c[C>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}else{c[v>>2]=(c[v>>2]|0)+(c[C>>2]|0);c[k>>2]=(c[v>>2]|0)-(c[t>>2]|0);D=c[k>>2]|0;l=j;return D|0;}return 0;}function St(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}f=(c[k>>2]|0)>>>0>=4;c[(c[i>>2]|0)+12>>2]=c[j>>2];do{if(f){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;e=eu(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=e;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0){e=8-(fu(d[m>>0]|0)|0)|0;c[(c[i>>2]|0)+4>>2]=e;break;}c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);p=9;break;}case 6:{p=9;break;}case 5:{p=10;break;}case 4:{p=11;break;}case 3:{p=12;break;}case 2:{p=13;break;}default:{}}if((p|0)==9){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);p=10;}if((p|0)==10){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);p=11;}if((p|0)==11){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);p=12;}if((p|0)==12){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);p=13;}if((p|0)==13){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0){e=8-(fu(d[n>>0]|0)|0)|0;c[(c[i>>2]|0)+4>>2]=e;e=(c[i>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function Tt(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[i>>2];c[k>>2]=c[j>>2];j=$t(c[h>>2]|0,e[c[k>>2]>>1]|0)|0;c[c[g>>2]>>2]=j;Ut(c[h>>2]|0)|0;c[(c[g>>2]|0)+4>>2]=(c[i>>2]|0)+4;l=f;return;}function Ut(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=((c[(c[e>>2]|0)+12>>2]|0)+4|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=eu(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=eu(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function Vt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=l;l=l+48|0;e=d+40|0;f=d+36|0;g=d+32|0;h=d+28|0;i=d+24|0;j=d+20|0;k=d+16|0;m=d+12|0;n=d+8|0;o=d+4|0;p=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(_t((c[f>>2]|0)+16|0)|0)&255;c[h>>2]=(_t((c[f>>2]|0)+32|0)|0)&255;c[i>>2]=(_t((c[f>>2]|0)+24|0)|0)&255;c[j>>2]=c[5696+(c[g>>2]<<2)>>2];c[k>>2]=c[5840+(c[h>>2]<<2)>>2];c[m>>2]=c[i>>2];c[n>>2]=(c[j>>2]|0)+(c[k>>2]|0)+(c[m>>2]|0);if(c[i>>2]|0){b=c[6064+(c[i>>2]<<2)>>2]|0;c[o>>2]=b+($t(c[f>>2]|0,c[m>>2]|0)|0);if(au()|0)Ut(c[f>>2]|0)|0;}else c[o>>2]=0;do{if((c[o>>2]|0)>>>0<3){if((c[g>>2]|0)==0&(c[o>>2]|0)>>>0<=1)c[o>>2]=1-(c[o>>2]|0);m=(c[f>>2]|0)+40|0;if(!(c[o>>2]|0)){c[o>>2]=c[m>>2];break;}c[p>>2]=c[m+(c[o>>2]<<2)>>2];if((c[o>>2]|0)!=1)c[(c[f>>2]|0)+40+8>>2]=c[(c[f>>2]|0)+40+4>>2];c[(c[f>>2]|0)+40+4>>2]=c[(c[f>>2]|0)+40>>2];m=c[p>>2]|0;c[o>>2]=m;c[(c[f>>2]|0)+40>>2]=m;}else{c[o>>2]=(c[o>>2]|0)-2;c[(c[f>>2]|0)+40+8>>2]=c[(c[f>>2]|0)+40+4>>2];c[(c[f>>2]|0)+40+4>>2]=c[(c[f>>2]|0)+40>>2];c[(c[f>>2]|0)+40>>2]=c[o>>2];}}while(0);c[(c[e>>2]|0)+8>>2]=c[o>>2];o=(c[6192+(c[h>>2]<<2)>>2]|0)+3|0;if((c[h>>2]|0)>>>0>31)q=$t(c[f>>2]|0,c[k>>2]|0)|0;else q=0;c[(c[e>>2]|0)+4>>2]=o+q;if(au()|0?((c[k>>2]|0)+(c[j>>2]|0)|0)>>>0>24:0)Ut(c[f>>2]|0)|0;k=c[6416+(c[g>>2]<<2)>>2]|0;if((c[g>>2]|0)>>>0>15)r=$t(c[f>>2]|0,c[j>>2]|0)|0;else r=0;c[c[e>>2]>>2]=k+r;r=(au()|0)!=0;if(r|(c[n>>2]|0)>>>0>31)Ut(c[f>>2]|0)|0;bu((c[f>>2]|0)+16|0,c[f>>2]|0);bu((c[f>>2]|0)+32|0,c[f>>2]|0);if(!(au()|0)){s=c[f>>2]|0;t=s+24|0;u=c[f>>2]|0;bu(t,u);l=d;return;}Ut(c[f>>2]|0)|0;s=c[f>>2]|0;t=s+24|0;u=c[f>>2]|0;bu(t,u);l=d;return;}function Wt(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;k=l;l=l+64|0;m=k+60|0;n=k+56|0;o=k+52|0;p=k+48|0;q=k+44|0;r=k+40|0;s=k+36|0;t=k+32|0;u=k+28|0;v=k+24|0;w=k+20|0;x=k+16|0;y=k+12|0;z=k+8|0;A=k+4|0;B=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+4>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+8>>2]|0));if((c[u>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}Xt(c[n>>2]|0,c[c[p>>2]>>2]|0,c[e>>2]|0);c[n>>2]=c[u>>2];c[c[p>>2]>>2]=c[y>>2];do{if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+4>>2]|0)|0)>>>0<=(c[t>>2]|0)>>>0){nE(c[u>>2]|0,c[z>>2]|0,c[e+4>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);y=e+4|0;c[y>>2]=(c[y>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];if((c[n>>2]|0)>>>0<=(c[x>>2]|0)>>>0?(c[e+4>>2]|0)>>>0>=3:0)break;while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;y=c[z>>2]|0;c[z>>2]=y+1;p=a[y>>0]|0;y=c[n>>2]|0;c[n>>2]=y+1;a[y>>0]=p;}c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}}while(0);if((c[e+8>>2]|0)>>>0<8){c[B>>2]=c[6816+(c[e+8>>2]<<2)>>2];a[c[n>>2]>>0]=a[c[z>>2]>>0]|0;a[(c[n>>2]|0)+1>>0]=a[(c[z>>2]|0)+1>>0]|0;a[(c[n>>2]|0)+2>>0]=a[(c[z>>2]|0)+2>>0]|0;a[(c[n>>2]|0)+3>>0]=a[(c[z>>2]|0)+3>>0]|0;c[z>>2]=(c[z>>2]|0)+(c[6848+(c[e+8>>2]<<2)>>2]|0);Yt((c[n>>2]|0)+4|0,c[z>>2]|0);c[z>>2]=(c[z>>2]|0)+(0-(c[B>>2]|0));}else Zt(c[n>>2]|0,c[z>>2]|0);c[n>>2]=(c[n>>2]|0)+8;c[z>>2]=(c[z>>2]|0)+8;B=c[n>>2]|0;a:do{if((c[w>>2]|0)>>>0>((c[o>>2]|0)+-13|0)>>>0){if(B>>>0<(c[x>>2]|0)>>>0){Xt(c[n>>2]|0,c[z>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);c[z>>2]=(c[z>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;r=c[z>>2]|0;c[z>>2]=r+1;A=a[r>>0]|0;r=c[n>>2]|0;c[n>>2]=r+1;a[r>>0]=A;}}else Xt(B,c[z>>2]|0,(c[e+4>>2]|0)-8|0);}while(0);c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}function Xt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Zt(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Yt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function Zt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function _t(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=(c[(c[f>>2]|0)+4>>2]|0)+(c[c[f>>2]>>2]<<2)|0;b[g>>1]=b[d>>1]|0;b[g+2>>1]=b[d+2>>1]|0;l=e;return a[g+2>>0]|0;}function $t(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=cu(c[e>>2]|0,c[f>>2]|0)|0;du(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function au(){return 1;}function bu(a,f){a=a|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+16|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=f;f=(c[(c[h>>2]|0)+4>>2]|0)+(c[c[h>>2]>>2]<<2)|0;b[j>>1]=b[f>>1]|0;b[j+2>>1]=b[f+2>>1]|0;c[k>>2]=d[j+3>>0];c[m>>2]=$t(c[i>>2]|0,c[k>>2]|0)|0;c[c[h>>2]>>2]=(e[j>>1]|0)+(c[m>>2]|0);l=g;return;}function cu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function eu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(au()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=Mq(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=Pq(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function fu(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function gu(b,e,f,g,h,i,j,k,m){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;n=l;l=l+160|0;o=n+152|0;p=n+148|0;q=n+144|0;r=n+140|0;s=n+136|0;t=n+132|0;u=n+128|0;v=n+124|0;w=n+120|0;x=n+116|0;y=n+112|0;z=n;A=n+108|0;c[p>>2]=b;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;c[v>>2]=j;c[w>>2]=k;c[x>>2]=m;a:do{switch(c[q>>2]|0){case 1:{if(!(c[u>>2]|0)){c[o>>2]=-72;break a;}if((d[c[t>>2]>>0]|0)>>>0>(c[r>>2]|0)>>>0){c[o>>2]=-20;break a;}else{hu(c[p>>2]|0,a[c[t>>2]>>0]|0)|0;c[o>>2]=1;break a;}break;}case 0:{iu(c[p>>2]|0,c[v>>2]|0,c[r>>2]|0,c[w>>2]|0)|0;c[o>>2]=0;break;}case 2:{if(c[x>>2]|0){c[o>>2]=0;break a;}else{c[o>>2]=-20;break a;}break;}default:{c[A>>2]=ju(z,r,y,c[t>>2]|0,c[u>>2]|0)|0;if(jr(c[A>>2]|0)|0){c[o>>2]=-20;break a;}if((c[y>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break a;}else{iu(c[p>>2]|0,z,c[r>>2]|0,c[y>>2]|0)|0;c[o>>2]=c[A>>2];break a;}}}}while(0);l=n;return c[o>>2]|0;}function hu(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+20|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=d;a[h>>0]=e;c[i>>2]=c[g>>2];c[j>>2]=c[i>>2];c[k>>2]=(c[g>>2]|0)+4;c[m>>2]=c[k>>2];b[c[j>>2]>>1]=0;b[(c[j>>2]|0)+2>>1]=0;b[c[m>>2]>>1]=0;a[(c[m>>2]|0)+2>>0]=a[h>>0]|0;a[(c[m>>2]|0)+3>>0]=0;l=f;return 0;}function iu(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;j=l;l=l+592|0;k=j+576|0;m=j+572|0;n=j+568|0;o=j+564|0;p=j+560|0;q=j+556|0;r=j+552|0;s=j;t=j+548|0;u=j+544|0;v=j+540|0;w=j+584|0;x=j+582|0;y=j+536|0;z=j+532|0;A=j+528|0;B=j+524|0;C=j+520|0;D=j+516|0;E=j+512|0;F=j+588|0;G=j+580|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[q>>2]=(c[m>>2]|0)+4;c[r>>2]=c[q>>2];c[t>>2]=(c[o>>2]|0)+1;c[u>>2]=1<<c[p>>2];c[v>>2]=(c[u>>2]|0)-1;if((c[o>>2]|0)>>>0>255){c[k>>2]=-46;H=c[k>>2]|0;l=j;return H|0;}if((c[p>>2]|0)>>>0>12){c[k>>2]=-44;H=c[k>>2]|0;l=j;return H|0;}b[w>>1]=c[p>>2];b[w+2>>1]=1;b[x>>1]=1<<(c[p>>2]|0)-1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0)==-1){o=c[y>>2]&255;q=c[r>>2]|0;i=c[v>>2]|0;c[v>>2]=i+-1;a[q+(i<<2)+2>>0]=o;b[s+(c[y>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0)>=(b[x>>1]|0))b[w+2>>1]=0;b[s+(c[y>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0;}c[y>>2]=(c[y>>2]|0)+1;}y=c[m>>2]|0;b[y>>1]=b[w>>1]|0;b[y+2>>1]=b[w+2>>1]|0;c[z>>2]=(c[u>>2]|0)-1;c[A>>2]=((c[u>>2]|0)>>>1)+((c[u>>2]|0)>>>3)+3;c[C>>2]=0;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;c[D>>2]=0;while(1){I=c[B>>2]|0;if((c[D>>2]|0)>=(b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0))break;a[(c[r>>2]|0)+(c[C>>2]<<2)+2>>0]=I;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0)&c[z>>2];while(1){if((c[C>>2]|0)>>>0<=(c[v>>2]|0)>>>0)break;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0)&c[z>>2];}c[D>>2]=(c[D>>2]|0)+1;}c[B>>2]=I+1;}if(c[C>>2]|0){c[k>>2]=-1;H=c[k>>2]|0;l=j;return H|0;}c[E>>2]=0;while(1){if((c[E>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;a[F>>0]=a[(c[r>>2]|0)+(c[E>>2]<<2)+2>>0]|0;C=s+(d[F>>0]<<1)|0;I=b[C>>1]|0;b[C>>1]=I+1<<16>>16;b[G>>1]=I;I=c[p>>2]|0;C=I-(fu(e[G>>1]|0)|0)&255;a[(c[r>>2]|0)+(c[E>>2]<<2)+3>>0]=C;b[(c[r>>2]|0)+(c[E>>2]<<2)>>1]=(e[G>>1]<<d[(c[r>>2]|0)+(c[E>>2]<<2)+3>>0])-(c[u>>2]|0);c[E>>2]=(c[E>>2]|0)+1;}c[k>>2]=0;H=c[k>>2]|0;l=j;return H|0;}function ju(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;A=h+70|0;B=h+68|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=Mq(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if((c[t>>2]|0)<=1)break;if((c[x>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0)break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=Mq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=19;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[m+(n<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;n=Mq(c[r>>2]|0)|0;c[v>>2]=n>>>(c[w>>2]|0);}}while(0);b[A>>1]=(c[u>>2]<<1)-1-(c[t>>2]|0);n=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(b[A>>1]|0)>>>0){b[B>>1]=n&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{b[B>>1]=n&(m<<1)-1;if((b[B>>1]|0)>=(c[u>>2]|0))b[B>>1]=(b[B>>1]|0)-(b[A>>1]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}b[B>>1]=(b[B>>1]|0)+-1<<16>>16;m=(ku(b[B>>1]|0)|0)<<16>>16;c[t>>2]=(c[t>>2]|0)-m;m=b[B>>1]|0;n=c[j>>2]|0;g=c[x>>2]|0;c[x>>2]=g+1;b[n+(g<<1)>>1]=m;c[y>>2]=((b[B>>1]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=Mq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==19){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-1;C=c[i>>2]|0;l=h;return C|0;}c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);if(((c[r>>2]|0)-(c[p>>2]|0)|0)>>>0>(c[o>>2]|0)>>>0){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}else{c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function ku(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=a;a=b[d>>1]|0;l=c;return((b[d>>1]|0)<0?0-a|0:a)&65535|0;}function lu(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=Ju(n,c[k>>2]|0,c[m>>2]|0)|0;k=(ou(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=Nu(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function mu(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=l;l=l+48|0;h=g+44|0;i=g+40|0;j=g+36|0;k=g+32|0;m=g+28|0;n=g+16|0;o=g+12|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;if(!(c[j>>2]|0)){c[h>>2]=-70;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)>>>0>(c[j>>2]|0)>>>0){c[h>>2]=-20;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==(c[j>>2]|0)){mE(c[i>>2]|0,c[k>>2]|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==1){oE(c[i>>2]|0,(d[c[k>>2]>>0]|0)&255|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}c[o>>2]=(c[m>>2]<<4>>>0)/((c[j>>2]|0)>>>0)|0;c[p>>2]=(c[j>>2]|0)>>>8;c[q>>2]=0;while(1){if((c[q>>2]|0)>>>0>=3)break;f=(c[7008+((c[o>>2]|0)*24|0)+(c[q>>2]<<3)>>2]|0)+(N(c[7008+((c[o>>2]|0)*24|0)+(c[q>>2]<<3)+4>>2]|0,c[p>>2]|0)|0)|0;c[n+(c[q>>2]<<2)>>2]=f;c[q>>2]=(c[q>>2]|0)+1;}q=n+4|0;c[q>>2]=(c[q>>2]|0)+((c[n+4>>2]|0)>>>4);q=n+8|0;c[q>>2]=(c[q>>2]|0)+((c[n+8>>2]|0)>>>3);c[r>>2]=0;c[r>>2]=(c[n+4>>2]|0)>>>0<(c[n>>2]|0)>>>0?1:0;c[h>>2]=sc[c[11964+(c[r>>2]<<2)>>2]&15](c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;s=c[h>>2]|0;l=g;return s|0;}function nu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=l;l=l+80|0;h=g+68|0;i=g+64|0;j=g+60|0;k=g+56|0;m=g+52|0;n=g+48|0;o=g+44|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+8|0;v=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[c[n>>2]>>2];c[s>>2]=c[n>>2];c[t>>2]=(c[s>>2]|0)+4;c[v>>2]=St(u,c[o>>2]|0,c[m>>2]|0)|0;if(ou(c[v>>2]|0)|0){c[h>>2]=c[v>>2];w=c[h>>2]|0;l=g;return w|0;}pu(c[p>>2]|0,u,c[q>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;if(qu(u)|0){c[h>>2]=c[j>>2];w=c[h>>2]|0;l=g;return w|0;}else{c[h>>2]=-20;w=c[h>>2]|0;l=g;return w|0;}return 0;}function ou(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=jr(c[d>>2]|0)|0;l=b;return a|0;}function pu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[h>>2];while(1){if(Ut(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>=((c[j>>2]|0)+-7|0)>>>0)break;if(ru()|0){f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}ru()|0;f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;if(ru()|0){f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){if(Ut(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){o=c[h>>2]|0;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=su(o,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}if(o>>>0>=(c[j>>2]|0)>>>0){p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}j=tu(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+j;p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}function qu(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function ru(){return 0;}function su(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=uu(c[j>>2]|0,c[m>>2]|0)|0;m=c[i>>2]|0;i=(c[k>>2]|0)+(c[n>>2]<<2)|0;a[m>>0]=a[i>>0]|0;a[m+1>>0]=a[i+1>>0]|0;du(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0;}function tu(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=uu(c[j>>2]|0,c[m>>2]|0)|0;a[c[i>>2]>>0]=a[(c[k>>2]|0)+(c[n>>2]<<2)>>0]|0;i=c[j>>2]|0;if((d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0)==1){du(i,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return 1;}if((c[i+4>>2]|0)>>>0>=32){l=h;return 1;}du(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);if((c[(c[j>>2]|0)+4>>2]|0)>>>0<=32){l=h;return 1;}c[(c[j>>2]|0)+4>>2]=32;l=h;return 1;}function uu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function vu(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=Ju(n,c[k>>2]|0,c[m>>2]|0)|0;k=(ou(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=Ku(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function wu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+16416|0;g=f+16412|0;h=f+16408|0;i=f+16404|0;j=f+16400|0;k=f+16396|0;m=f;n=f+16392|0;o=f+16388|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;oE(m|0,0,16388)|0;c[m>>2]=12;c[n>>2]=c[j>>2];c[o>>2]=xu(m,c[j>>2]|0,c[k>>2]|0)|0;j=(ou(c[o>>2]|0)|0)!=0;e=c[o>>2]|0;if(j){c[g>>2]=e;p=c[g>>2]|0;l=f;return p|0;}if(e>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;p=c[g>>2]|0;l=f;return p|0;}else{c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[o>>2]|0);c[g>>2]=yu(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,m)|0;p=c[g>>2]|0;l=f;return p|0;}return 0;}function xu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+2128|0;h=g+2124|0;i=g+2120|0;j=g+2116|0;k=g+2112|0;m=g+1760|0;n=g+1248|0;o=g+1168|0;p=g+1088|0;q=g+2108|0;r=g;s=g+2104|0;t=g+2100|0;u=g+2096|0;v=g+2092|0;w=g+2088|0;x=g+2084|0;y=g+2080|0;z=g+2076|0;A=g+2072|0;B=g+2068|0;C=g+2064|0;D=g+2060|0;E=g+2056|0;F=g+2052|0;G=g+2048|0;H=g+2044|0;I=g+2040|0;J=g+2036|0;K=g+2032|0;L=g+2028|0;M=g+2024|0;N=g+2020|0;O=g+2016|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;f=o;e=f+68|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));f=p;e=f+72|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));c[q>>2]=p+4;c[w>>2]=c[c[i>>2]>>2];c[y>>2]=c[i>>2];c[z>>2]=(c[y>>2]|0)+4;if((c[w>>2]|0)>>>0>16){c[h>>2]=-44;P=c[h>>2]|0;l=g;return P|0;}c[x>>2]=zu(m,256,o,v,s,c[j>>2]|0,c[k>>2]|0)|0;if(ou(c[x>>2]|0)|0){c[h>>2]=c[x>>2];P=c[h>>2]|0;l=g;return P|0;}if((c[s>>2]|0)>>>0>(c[w>>2]|0)>>>0){c[h>>2]=-44;P=c[h>>2]|0;l=g;return P|0;}c[t>>2]=c[s>>2];while(1){if(c[o+(c[t>>2]<<2)>>2]|0)break;c[t>>2]=(c[t>>2]|0)+-1;}c[B>>2]=0;c[A>>2]=1;while(1){Q=c[B>>2]|0;if((c[A>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[C>>2]=Q;c[B>>2]=(c[B>>2]|0)+(c[o+(c[A>>2]<<2)>>2]|0);c[(c[q>>2]|0)+(c[A>>2]<<2)>>2]=c[C>>2];c[A>>2]=(c[A>>2]|0)+1;}c[c[q>>2]>>2]=Q;c[u>>2]=c[B>>2];c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[E>>2]=d[m+(c[D>>2]|0)>>0];B=(c[q>>2]|0)+(c[E>>2]<<2)|0;Q=c[B>>2]|0;c[B>>2]=Q+1;c[F>>2]=Q;a[n+(c[F>>2]<<1)>>0]=c[D>>2];a[n+(c[F>>2]<<1)+1>>0]=c[E>>2];c[D>>2]=(c[D>>2]|0)+1;}c[c[q>>2]>>2]=0;c[G>>2]=r;c[H>>2]=(c[w>>2]|0)-(c[s>>2]|0)-1;c[I>>2]=0;c[J>>2]=1;while(1){if((c[J>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[K>>2]=c[I>>2];c[I>>2]=(c[I>>2]|0)+(c[o+(c[J>>2]<<2)>>2]<<(c[J>>2]|0)+(c[H>>2]|0));c[(c[G>>2]|0)+(c[J>>2]<<2)>>2]=c[K>>2];c[J>>2]=(c[J>>2]|0)+1;}c[L>>2]=(c[s>>2]|0)+1-(c[t>>2]|0);c[M>>2]=c[L>>2];while(1){if((c[M>>2]|0)>>>0>=((c[w>>2]|0)-(c[L>>2]|0)+1|0)>>>0)break;c[N>>2]=r+((c[M>>2]|0)*68|0);c[O>>2]=1;while(1){if((c[O>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[(c[N>>2]|0)+(c[O>>2]<<2)>>2]=(c[(c[G>>2]|0)+(c[O>>2]<<2)>>2]|0)>>>(c[M>>2]|0);c[O>>2]=(c[O>>2]|0)+1;}c[M>>2]=(c[M>>2]|0)+1;}Au(c[z>>2]|0,c[w>>2]|0,n,c[u>>2]|0,p,r,c[t>>2]|0,(c[s>>2]|0)+1|0);c[h>>2]=c[x>>2];P=c[h>>2]|0;l=g;return P|0;}function yu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+192|0;h=g+184|0;i=g+180|0;j=g+176|0;k=g+172|0;m=g+168|0;n=g+164|0;o=g+160|0;p=g+156|0;q=g+152|0;r=g+148|0;s=g+144|0;t=g+140|0;u=g+136|0;v=g+120|0;w=g+104|0;x=g+88|0;y=g+72|0;z=g+64|0;A=g+60|0;B=g+56|0;C=g+52|0;D=g+48|0;E=g+44|0;F=g+40|0;G=g+36|0;H=g+32|0;I=g+28|0;J=g+24|0;K=g+20|0;L=g+16|0;M=g+12|0;N=g+8|0;O=g+4|0;P=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[m>>2]|0)>>>0<10){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+4;c[t>>2]=c[c[n>>2]>>2];c[z>>2]=(Oq(c[o>>2]|0)|0)&65535;c[A>>2]=(Oq((c[o>>2]|0)+2|0)|0)&65535;c[B>>2]=(Oq((c[o>>2]|0)+4|0)|0)&65535;c[D>>2]=(c[o>>2]|0)+6;c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(((c[j>>2]|0)+3|0)>>>0)/4|0;c[I>>2]=(c[p>>2]|0)+(c[H>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[H>>2]|0);c[K>>2]=(c[J>>2]|0)+(c[H>>2]|0);c[L>>2]=c[p>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];c[O>>2]=c[K>>2];c[C>>2]=(c[m>>2]|0)-((c[z>>2]|0)+(c[A>>2]|0)+(c[B>>2]|0)+6);if((c[C>>2]|0)>>>0>(c[m>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=St(v,c[D>>2]|0,c[z>>2]|0)|0;if(ou(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=St(w,c[E>>2]|0,c[A>>2]|0)|0;if(ou(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=St(x,c[F>>2]|0,c[B>>2]|0)|0;if(ou(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=St(y,c[G>>2]|0,c[C>>2]|0)|0;if(ou(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}u=Ut(v)|0;C=u|(Ut(w)|0);u=C|(Ut(x)|0);c[P>>2]=u|(Ut(y)|0);while(1){if(c[P>>2]|0)break;if((c[O>>2]|0)>>>0>=((c[q>>2]|0)+-7|0)>>>0)break;if(ru()|0){u=su(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if(ru()|0){u=su(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if(ru()|0){u=su(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if(ru()|0){u=su(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}ru()|0;u=su(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;ru()|0;u=su(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;ru()|0;u=su(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;ru()|0;u=su(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;if(ru()|0){u=su(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if(ru()|0){u=su(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if(ru()|0){u=su(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if(ru()|0){u=su(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}u=su(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;u=su(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;u=su(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;u=su(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;u=Ut(v)|0;C=u|(Ut(w)|0);u=C|(Ut(x)|0);c[P>>2]=u|(Ut(y)|0);}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}pu(c[L>>2]|0,v,c[I>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;pu(c[M>>2]|0,w,c[J>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;pu(c[N>>2]|0,x,c[K>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;pu(c[O>>2]|0,y,c[q>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;t=qu(v)|0;v=t&(qu(w)|0);w=v&(qu(x)|0);c[P>>2]=w&(qu(y)|0);if(c[P>>2]|0){c[h>>2]=c[j>>2];Q=c[h>>2]|0;l=g;return Q|0;}else{c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}return 0;}function zu(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;k=l;l=l+80|0;m=k+72|0;n=k+68|0;o=k+64|0;p=k+60|0;q=k+56|0;r=k+52|0;s=k+48|0;t=k+44|0;u=k+40|0;v=k+36|0;w=k+32|0;x=k+28|0;y=k+24|0;z=k+20|0;A=k+16|0;B=k+12|0;C=k+8|0;D=k+4|0;E=k;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[v>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}c[w>>2]=d[c[v>>2]>>0];s=c[w>>2]|0;a:do{if((c[w>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}c[x>>2]=Eu(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[v>>2]|0)+1|0,c[w>>2]|0)|0;if(jr(c[x>>2]|0)|0){c[m>>2]=c[x>>2];F=c[m>>2]|0;l=k;return F|0;}}else{j=c[w>>2]|0;if(s>>>0>=242){c[x>>2]=c[7392+(j-242<<2)>>2];oE(c[n>>2]|0,1,c[o>>2]|0)|0;c[w>>2]=0;break;}c[x>>2]=j-127;c[w>>2]=(((c[x>>2]|0)+1|0)>>>0)/2|0;if(((c[w>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}if((c[x>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[v>>2]=(c[v>>2]|0)+1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[y>>2]|0)+1)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)&15;c[y>>2]=(c[y>>2]|0)+2;}}}while(0);y=c[p>>2]|0;v=y+68|0;do{c[y>>2]=0;y=y+4|0;}while((y|0)<(v|0));c[u>>2]=0;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0|0)>=16){G=20;break;}y=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)<<2)|0;c[y>>2]=(c[y>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)>>1);c[z>>2]=(c[z>>2]|0)+1;}if((G|0)==20){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[A>>2]=(fu(c[u>>2]|0)|0)+1;if((c[A>>2]|0)>>>0>16){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[c[r>>2]>>2]=c[A>>2];c[B>>2]=1<<c[A>>2];c[C>>2]=(c[B>>2]|0)-(c[u>>2]|0);c[D>>2]=1<<(fu(c[C>>2]|0)|0);c[E>>2]=(fu(c[C>>2]|0)|0)+1;if((c[D>>2]|0)!=(c[C>>2]|0)){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}a[(c[n>>2]|0)+(c[x>>2]|0)>>0]=c[E>>2];n=(c[p>>2]|0)+(c[E>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[x>>2]|0)+1;c[m>>2]=(c[w>>2]|0)+1;F=c[m>>2]|0;l=k;return F|0;}c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}function Au(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+160|0;o=n+140|0;p=n+136|0;q=n+132|0;r=n+128|0;s=n+124|0;t=n+120|0;u=n+116|0;v=n+112|0;w=n;x=n+108|0;y=n+104|0;z=n+100|0;A=n+148|0;B=n+96|0;C=n+92|0;D=n+88|0;E=n+84|0;F=n+80|0;G=n+76|0;H=n+144|0;I=n+72|0;J=n+68|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+68|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];Bu((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*68|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{Cu(H,b[A>>1]|0);a[H+2>>0]=c[C>>2];a[H+3>>0]=1;c[J>>2]=(c[D>>2]|0)+(c[E>>2]|0);c[I>>2]=c[D>>2];while(1){if((c[I>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[I>>2]<<2)|0;b[m>>1]=b[H>>1]|0;b[m+2>>1]=b[H+2>>1]|0;c[I>>2]=(c[I>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function Bu(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+160|0;q=p+136|0;r=p+132|0;s=p+128|0;t=p+124|0;u=p+120|0;v=p+116|0;w=p+112|0;x=p+108|0;y=p+144|0;z=p+140|0;A=p;B=p+104|0;C=p+100|0;D=p+96|0;E=p+92|0;F=p+88|0;G=p+84|0;H=p+80|0;I=p+76|0;J=p+72|0;K=p+68|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+68|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[C>>2]=c[A+(c[u>>2]<<2)>>2];Cu(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[C>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[B>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[B>>2]=(c[B>>2]|0)+1;}}}while(0);c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);Cu(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{B=c[q>>2]|0;C=c[J>>2]|0;c[J>>2]=C+1;u=B+(C<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}l=p;return;}function Cu(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Qq()|0)!=0;d=c[h>>2]|0;if(f){Du(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function Du(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=c[g>>2]|0;a[e>>0]=a[h>>0]|0;a[e+1>>0]=a[h+1>>0]|0;l=f;return;}function Eu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+16960|0;g=f+16952|0;h=f+16948|0;i=f+16944|0;j=f+16940|0;k=f+16936|0;m=f+16932|0;n=f+16928|0;o=f+16400|0;p=f;q=f+16924|0;r=f+16920|0;s=f+16916|0;t=f+16912|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=c[m>>2];c[r>>2]=255;if((c[k>>2]|0)>>>0<2){c[g>>2]=-72;u=c[g>>2]|0;l=f;return u|0;}c[s>>2]=ju(o,r,q,c[m>>2]|0,c[k>>2]|0)|0;m=(jr(c[s>>2]|0)|0)!=0;j=c[s>>2]|0;if(m){c[g>>2]=j;u=c[g>>2]|0;l=f;return u|0;}if(j>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;u=c[g>>2]|0;l=f;return u|0;}c[n>>2]=(c[n>>2]|0)+(c[s>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[s>>2]|0);c[t>>2]=iu(p,o,c[r>>2]|0,c[q>>2]|0)|0;if(jr(c[t>>2]|0)|0){c[g>>2]=c[t>>2];u=c[g>>2]|0;l=f;return u|0;}else{c[g>>2]=Fu(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,p)|0;u=c[g>>2]|0;l=f;return u|0;}return 0;}function Fu(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;i=l;l=l+208|0;j=i+192|0;k=i+188|0;m=i+184|0;n=i+180|0;o=i+176|0;p=i+172|0;q=i+168|0;r=i+164|0;s=i+160|0;t=i+156|0;u=i+152|0;v=i+136|0;w=i+128|0;x=i+120|0;y=i+116|0;z=i+112|0;A=i+108|0;B=i+104|0;C=i+100|0;D=i+96|0;E=i+92|0;F=i+88|0;G=i+84|0;H=i+80|0;I=i+76|0;J=i+72|0;K=i+56|0;L=i+48|0;M=i+40|0;N=i+36|0;O=i+32|0;P=i+28|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[P>>2]=b;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=c[T>>2];c[V>>2]=c[U>>2];c[W>>2]=e[(c[V>>2]|0)+2>>1];V=c[P>>2]|0;P=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;if(c[W>>2]|0){c[A>>2]=V;c[B>>2]=P;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=1;c[G>>2]=c[A>>2];c[H>>2]=c[G>>2];c[I>>2]=(c[H>>2]|0)+(c[B>>2]|0);c[J>>2]=(c[I>>2]|0)+-3;c[N>>2]=St(K,c[C>>2]|0,c[D>>2]|0)|0;do{if(jr(c[N>>2]|0)|0)c[z>>2]=c[N>>2];else{Tt(L,K,c[E>>2]|0);Tt(M,K,c[E>>2]|0);while(1){if(Ut(K)|0)break;if((c[H>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break;if(c[F>>2]|0)X=(Gu(L,K)|0)&255;else X=(Hu(L,K)|0)&255;a[c[H>>2]>>0]=X;if(c[F>>2]|0)Y=(Gu(M,K)|0)&255;else Y=(Hu(M,K)|0)&255;a[(c[H>>2]|0)+1>>0]=Y;if((Ut(K)|0)>>>0>0){Z=14;break;}if(c[F>>2]|0)_=(Gu(L,K)|0)&255;else _=(Hu(L,K)|0)&255;a[(c[H>>2]|0)+2>>0]=_;if(c[F>>2]|0)$=(Gu(M,K)|0)&255;else $=(Hu(M,K)|0)&255;a[(c[H>>2]|0)+3>>0]=$;c[H>>2]=(c[H>>2]|0)+4;}if((Z|0)==14)c[H>>2]=(c[H>>2]|0)+2;while(1){if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=24;break;}if(c[F>>2]|0)aa=(Gu(L,K)|0)&255;else aa=(Hu(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=aa;if((Ut(K)|0)==3){Z=29;break;}if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=34;break;}if(c[F>>2]|0)ba=(Gu(M,K)|0)&255;else ba=(Hu(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ba;if((Ut(K)|0)==3){Z=39;break;}}if((Z|0)==24){c[z>>2]=-70;break;}else if((Z|0)==29){if(c[F>>2]|0)ca=(Gu(M,K)|0)&255;else ca=(Hu(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ca;}else if((Z|0)==34){c[z>>2]=-70;break;}else if((Z|0)==39){if(c[F>>2]|0)da=(Gu(L,K)|0)&255;else da=(Hu(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=da;}c[z>>2]=(c[H>>2]|0)-(c[G>>2]|0);}}while(0);c[O>>2]=c[z>>2];ea=c[O>>2]|0;l=i;return ea|0;}else{c[k>>2]=V;c[m>>2]=P;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=0;c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[s>>2]|0)+(c[m>>2]|0);c[u>>2]=(c[t>>2]|0)+-3;c[y>>2]=St(v,c[n>>2]|0,c[o>>2]|0)|0;do{if(jr(c[y>>2]|0)|0)c[j>>2]=c[y>>2];else{Tt(w,v,c[p>>2]|0);Tt(x,v,c[p>>2]|0);while(1){if(Ut(v)|0)break;if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;if(c[q>>2]|0)fa=(Gu(w,v)|0)&255;else fa=(Hu(w,v)|0)&255;a[c[s>>2]>>0]=fa;if(c[q>>2]|0)ga=(Gu(x,v)|0)&255;else ga=(Hu(x,v)|0)&255;a[(c[s>>2]|0)+1>>0]=ga;if((Ut(v)|0)>>>0>0){Z=58;break;}if(c[q>>2]|0)ha=(Gu(w,v)|0)&255;else ha=(Hu(w,v)|0)&255;a[(c[s>>2]|0)+2>>0]=ha;if(c[q>>2]|0)ia=(Gu(x,v)|0)&255;else ia=(Hu(x,v)|0)&255;a[(c[s>>2]|0)+3>>0]=ia;c[s>>2]=(c[s>>2]|0)+4;}if((Z|0)==58)c[s>>2]=(c[s>>2]|0)+2;while(1){if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=68;break;}if(c[q>>2]|0)ja=(Gu(w,v)|0)&255;else ja=(Hu(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ja;if((Ut(v)|0)==3){Z=73;break;}if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=78;break;}if(c[q>>2]|0)ka=(Gu(x,v)|0)&255;else ka=(Hu(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ka;if((Ut(v)|0)==3){Z=83;break;}}if((Z|0)==68){c[j>>2]=-70;break;}else if((Z|0)==73){if(c[q>>2]|0)la=(Gu(x,v)|0)&255;else la=(Hu(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=la;}else if((Z|0)==78){c[j>>2]=-70;break;}else if((Z|0)==83){if(c[q>>2]|0)ma=(Gu(w,v)|0)&255;else ma=(Hu(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ma;}c[j>>2]=(c[s>>2]|0)-(c[r>>2]|0);}}while(0);c[O>>2]=c[j>>2];ea=c[O>>2]|0;l=i;return ea|0;}return 0;}function Gu(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=Iu(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function Hu(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=$t(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function Iu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=uu(c[e>>2]|0,c[f>>2]|0)|0;du(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Ju(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;i=l;l=l+400|0;j=i+392|0;k=i+388|0;m=i+384|0;n=i+380|0;o=i+80|0;p=i;q=i+376|0;r=i+372|0;s=i+368|0;t=i+364|0;u=i+360|0;v=i+356|0;w=i+352|0;x=i+348|0;y=i+344|0;z=i+340|0;A=i+336|0;B=i+396|0;c[k>>2]=f;c[m>>2]=g;c[n>>2]=h;c[q>>2]=0;c[s>>2]=0;c[v>>2]=(c[k>>2]|0)+2;c[w>>2]=c[v>>2];c[r>>2]=zu(o,256,p,s,q,c[m>>2]|0,c[n>>2]|0)|0;if(ou(c[r>>2]|0)|0){c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}if((c[q>>2]|0)>>>0>(e[c[k>>2]>>1]|0)>>>0){c[j>>2]=-44;C=c[j>>2]|0;l=i;return C|0;}b[c[k>>2]>>1]=c[q>>2];c[u>>2]=0;c[t>>2]=1;while(1){if((c[t>>2]|0)>>>0>=((c[q>>2]|0)+1|0)>>>0)break;c[x>>2]=c[u>>2];c[u>>2]=(c[u>>2]|0)+(c[p+(c[t>>2]<<2)>>2]<<(c[t>>2]|0)-1);c[p+(c[t>>2]<<2)>>2]=c[x>>2];c[t>>2]=(c[t>>2]|0)+1;}c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[y>>2]=d[o+(c[t>>2]|0)>>0];c[z>>2]=1<<c[y>>2]>>1;a[B>>0]=c[t>>2];a[B+1>>0]=(c[q>>2]|0)+1-(c[y>>2]|0);c[A>>2]=c[p+(c[y>>2]<<2)>>2];while(1){if((c[A>>2]|0)>>>0>=((c[p+(c[y>>2]<<2)>>2]|0)+(c[z>>2]|0)|0)>>>0)break;x=(c[w>>2]|0)+(c[A>>2]<<1)|0;a[x>>0]=a[B>>0]|0;a[x+1>>0]=a[B+1>>0]|0;c[A>>2]=(c[A>>2]|0)+1;}x=p+(c[y>>2]<<2)|0;c[x>>2]=(c[x>>2]|0)+(c[z>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}function Ku(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;i=l;l=l+192|0;j=i+184|0;k=i+180|0;m=i+176|0;n=i+172|0;o=i+168|0;p=i+164|0;q=i+160|0;r=i+156|0;s=i+152|0;t=i+148|0;u=i+144|0;v=i+140|0;w=i+136|0;x=i+120|0;y=i+104|0;z=i+88|0;A=i+72|0;B=i+64|0;C=i+60|0;D=i+56|0;E=i+52|0;F=i+48|0;G=i+44|0;H=i+40|0;I=i+36|0;J=i+32|0;K=i+28|0;L=i+24|0;M=i+20|0;N=i+16|0;O=i+12|0;P=i+8|0;Q=i+4|0;R=i;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if((c[o>>2]|0)>>>0<10){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[q>>2]=c[n>>2];c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[p>>2];c[u>>2]=(c[t>>2]|0)+2;c[v>>2]=e[c[p>>2]>>1];c[B>>2]=(Oq(c[q>>2]|0)|0)&65535;c[C>>2]=(Oq((c[q>>2]|0)+2|0)|0)&65535;c[D>>2]=(Oq((c[q>>2]|0)+4|0)|0)&65535;c[F>>2]=(c[q>>2]|0)+6;c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(c[G>>2]|0)+(c[C>>2]|0);c[I>>2]=(c[H>>2]|0)+(c[D>>2]|0);c[J>>2]=(((c[m>>2]|0)+3|0)>>>0)/4|0;c[K>>2]=(c[r>>2]|0)+(c[J>>2]|0);c[L>>2]=(c[K>>2]|0)+(c[J>>2]|0);c[M>>2]=(c[L>>2]|0)+(c[J>>2]|0);c[N>>2]=c[r>>2];c[O>>2]=c[K>>2];c[P>>2]=c[L>>2];c[Q>>2]=c[M>>2];c[E>>2]=(c[o>>2]|0)-((c[B>>2]|0)+(c[C>>2]|0)+(c[D>>2]|0)+6);if((c[E>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=St(x,c[F>>2]|0,c[B>>2]|0)|0;if(ou(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=St(y,c[G>>2]|0,c[C>>2]|0)|0;if(ou(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=St(z,c[H>>2]|0,c[D>>2]|0)|0;if(ou(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=St(A,c[I>>2]|0,c[E>>2]|0)|0;if(ou(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}w=Ut(x)|0;E=w|(Ut(y)|0);w=E|(Ut(z)|0);c[R>>2]=w|(Ut(A)|0);while(1){if(c[R>>2]|0)break;if((c[Q>>2]|0)>>>0>=((c[s>>2]|0)+-7|0)>>>0)break;if(ru()|0){w=Lu(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}ru()|0;w=Lu(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;ru()|0;w=Lu(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;ru()|0;w=Lu(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;ru()|0;w=Lu(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;if(ru()|0){w=Lu(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}w=Lu(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;w=Lu(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;w=Lu(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;w=Lu(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;w=Ut(x)|0;E=w|(Ut(y)|0);w=E|(Ut(z)|0);c[R>>2]=w|(Ut(A)|0);}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[O>>2]|0)>>>0>(c[L>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[P>>2]|0)>>>0>(c[M>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}Mu(c[N>>2]|0,x,c[K>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;Mu(c[O>>2]|0,y,c[L>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;Mu(c[P>>2]|0,z,c[M>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;Mu(c[Q>>2]|0,A,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;v=qu(x)|0;x=v&(qu(y)|0);y=x&(qu(z)|0);c[R>>2]=y&(qu(A)|0);if(c[R>>2]|0){c[j>>2]=c[m>>2];S=c[j>>2]|0;l=i;return S|0;}else{c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}return 0;}function Lu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+16|0;c[h>>2]=b;c[i>>2]=e;c[j>>2]=f;c[k>>2]=uu(c[h>>2]|0,c[j>>2]|0)|0;a[m>>0]=a[(c[i>>2]|0)+(c[k>>2]<<1)>>0]|0;du(c[h>>2]|0,d[(c[i>>2]|0)+(c[k>>2]<<1)+1>>0]|0);l=g;return a[m>>0]|0;}function Mu(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[i>>2];while(1){if(Ut(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>((c[k>>2]|0)+-4|0)>>>0)break;if(ru()|0){g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}ru()|0;g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;if(ru()|0){g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if(Ut(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}l=h;return(c[k>>2]|0)-(c[o>>2]|0)|0;}function Nu(a,b,d,f,g){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+8|0;v=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[j>>2];c[q>>2]=(c[p>>2]|0)+(c[k>>2]|0);c[r>>2]=e[c[o>>2]>>1];c[s>>2]=c[o>>2];c[t>>2]=(c[s>>2]|0)+2;c[v>>2]=St(u,c[m>>2]|0,c[n>>2]|0)|0;if(ou(c[v>>2]|0)|0){c[i>>2]=c[v>>2];w=c[i>>2]|0;l=h;return w|0;}Mu(c[p>>2]|0,u,c[q>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;if(qu(u)|0){c[i>>2]=c[k>>2];w=c[i>>2]|0;l=h;return w|0;}else{c[i>>2]=-20;w=c[i>>2]|0;l=h;return w|0;}return 0;}function Ou(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+21536>>2]=5;c[(c[d>>2]|0)+21564>>2]=0;c[(c[d>>2]|0)+21520>>2]=0;c[(c[d>>2]|0)+21524>>2]=0;c[(c[d>>2]|0)+21528>>2]=0;c[(c[d>>2]|0)+21532>>2]=0;c[(c[d>>2]|0)+5132>>2]=12;c[(c[d>>2]|0)+21568>>2]=0;l=b;return 0;}function Pu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[k>>2]=Mq(c[h>>2]|0)|0;if((c[k>>2]|0)!=-332356554){Qu(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)-4;c[j>>2]=Ru(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[j>>2]|0)|0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}else{c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);Qu(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}return 0;}function Qu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+21532>>2]=c[(c[f>>2]|0)+21520>>2];c[(c[f>>2]|0)+21528>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+21520>>2]|0)-(c[(c[f>>2]|0)+21524>>2]|0)));c[(c[f>>2]|0)+21524>>2]=c[g>>2];c[(c[f>>2]|0)+21520>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Ru(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=l;l=l+320|0;f=e+316|0;g=e+312|0;h=e+308|0;i=e+304|0;j=e+300|0;k=e+296|0;m=e+292|0;n=e+288|0;o=e+192|0;p=e+284|0;q=e+280|0;r=e+276|0;s=e+80|0;t=e+272|0;u=e+268|0;v=e+264|0;w=e;x=e+260|0;y=e+256|0;z=e+252|0;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=xu((c[g>>2]|0)+5132|0,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[j>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);c[p>>2]=28;c[k>>2]=ju(o,p,q,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[k>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}if((c[q>>2]|0)>>>0>8){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[r>>2]=iu((c[g>>2]|0)+2052|0,o,c[p>>2]|0,c[q>>2]|0)|0;if(jr(c[r>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);c[t>>2]=52;c[m>>2]=ju(s,t,u,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[m>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}if((c[u>>2]|0)>>>0>9){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[v>>2]=iu((c[g>>2]|0)+3080|0,s,c[t>>2]|0,c[u>>2]|0)|0;if(jr(c[v>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[m>>2]|0);c[x>>2]=35;c[n>>2]=ju(w,x,y,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[n>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}if((c[y>>2]|0)>>>0>9){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[z>>2]=iu(c[g>>2]|0,w,c[x>>2]|0,c[y>>2]|0)|0;if(jr(c[z>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}else{c[(c[g>>2]|0)+21568>>2]=1;c[f>>2]=(c[j>>2]|0)+(c[k>>2]|0)+(c[m>>2]|0)+(c[n>>2]|0);A=c[f>>2]|0;l=e;return A|0;}return 0;}function Su(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=dw(c[g>>2]|0)|0;if(mr(c[j>>2]|0)|0){c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}if((c[h>>2]|0)!=0&(c[i>>2]|0)!=0?(c[j>>2]=ew(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0,mr(c[j>>2]|0)|0):0){c[f>>2]=-30;k=c[f>>2]|0;l=e;return k|0;}c[f>>2]=0;k=c[f>>2]|0;l=e;return k|0;}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+26640>>2]|0)){l=d;return;}c[(c[e>>2]|0)+26652>>2]=c[(c[e>>2]|0)+26640>>2];c[(c[e>>2]|0)+26648>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+26640>>2]|0)-(c[(c[e>>2]|0)+26644>>2]|0)));c[(c[e>>2]|0)+26644>>2]=c[f>>2];c[(c[e>>2]|0)+26640>>2]=c[f>>2];l=d;return;}function Uu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=l;l=l+80|0;h=g+68|0;i=g+64|0;j=g+60|0;k=g+56|0;m=g+52|0;n=g+48|0;o=g+44|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+16|0;v=g+8|0;w=g+4|0;x=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=(c[o>>2]|0)+(c[n>>2]|0);c[q>>2]=c[j>>2];c[r>>2]=c[q>>2];c[s>>2]=(c[q>>2]|0)+(c[k>>2]|0);c[t>>2]=c[n>>2];if((c[n>>2]|0)>>>0<8){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}c[v>>2]=Vu(c[i>>2]|0,c[m>>2]|0,5)|0;if(mr(c[v>>2]|0)|0){c[h>>2]=c[v>>2];y=c[h>>2]|0;l=g;return y|0;}if((c[n>>2]|0)>>>0<((c[v>>2]|0)+3|0)>>>0){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}c[o>>2]=(c[o>>2]|0)+(c[v>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[v>>2]|0);c[v>>2]=Wu(c[i>>2]|0,c[m>>2]|0,c[v>>2]|0)|0;if(mr(c[v>>2]|0)|0){c[h>>2]=c[v>>2];y=c[h>>2]|0;l=g;return y|0;}a:while(1){c[w>>2]=0;c[x>>2]=lr(c[o>>2]|0,(c[p>>2]|0)-(c[o>>2]|0)|0,u)|0;if(mr(c[x>>2]|0)|0){z=11;break;}c[o>>2]=(c[o>>2]|0)+3;c[t>>2]=(c[t>>2]|0)-3;if((c[x>>2]|0)>>>0>(c[t>>2]|0)>>>0){z=13;break;}switch(c[u>>2]|0){case 2:{z=17;break a;break;}case 0:{c[w>>2]=Xu(c[i>>2]|0,c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[x>>2]|0)|0;break;}case 1:{c[w>>2]=Yu(c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[x>>2]|0)|0;break;}case 3:{if(c[t>>2]|0){z=19;break a;}break;}default:{z=20;break a;}}if(!(c[x>>2]|0)){z=25;break;}v=(mr(c[w>>2]|0)|0)!=0;A=c[w>>2]|0;if(v){z=23;break;}c[r>>2]=(c[r>>2]|0)+A;c[o>>2]=(c[o>>2]|0)+(c[x>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[x>>2]|0);}if((z|0)==11){c[h>>2]=c[x>>2];y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==13){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==17){c[h>>2]=-1;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==19){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==20){c[h>>2]=-1;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==23){c[h>>2]=A;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==25){c[h>>2]=(c[r>>2]|0)-(c[q>>2]|0);y=c[h>>2]|0;l=g;return y|0;}return 0;}function Vu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)!=5){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}c[j>>2]=Wq(c[h>>2]|0)|0;if((c[j>>2]|0)!=-47205083){c[f>>2]=-10;k=c[f>>2]|0;l=e;return k|0;}else{c[(c[g>>2]|0)+26660>>2]=5;c[f>>2]=c[(c[g>>2]|0)+26660>>2];k=c[f>>2]|0;l=e;return k|0;}return 0;}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)!=(c[(c[g>>2]|0)+26660>>2]|0)){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}c[j>>2]=yq((c[g>>2]|0)+26664|0,c[h>>2]|0,c[i>>2]|0)|0;if(kv()|0?(c[(c[g>>2]|0)+26664+8>>2]|0)>>>0>25:0){c[f>>2]=-14;k=c[f>>2]|0;l=e;return k|0;}c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}function Xu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];if((c[n>>2]|0)>>>0>=131072){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}c[p>>2]=Zu(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(mr(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+f;c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=_u(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Yu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function Zu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+40|0;p=g+36|0;q=g+32|0;r=g+28|0;s=g+24|0;t=g+20|0;u=g+16|0;v=g+12|0;w=g+8|0;x=g+4|0;y=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<3){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch((d[c[m>>2]>>0]|0)>>6|0){case 0:{c[p>>2]=0;c[q>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[k>>2]|0)>>>0<5){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch(c[q>>2]|0){case 3:{c[q>>2]=5;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<14)+((d[(c[m>>2]|0)+1>>0]|0)<<6)+((d[(c[m>>2]|0)+2>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&3)<<16)+((d[(c[m>>2]|0)+3>>0]|0)<<8)+(d[(c[m>>2]|0)+4>>0]|0);break;}case 2:{c[q>>2]=4;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<10)+((d[(c[m>>2]|0)+1>>0]|0)<<2)+((d[(c[m>>2]|0)+2>>0]|0)>>6);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&63)<<8)+(d[(c[m>>2]|0)+3>>0]|0);break;}default:{c[q>>2]=3;c[p>>2]=(d[c[m>>2]>>0]|0)&16;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);}}if((c[n>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(((c[o>>2]|0)+(c[q>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}j=(c[i>>2]|0)+26724|0;f=c[n>>2]|0;e=(c[m>>2]|0)+(c[q>>2]|0)|0;b=c[o>>2]|0;if(c[p>>2]|0)A=Av(j,f,e,b)|0;else A=Bv(j,f,e,b)|0;if(Cv(A)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+26716>>2]=(c[i>>2]|0)+26724;c[(c[i>>2]|0)+26720>>2]=c[n>>2];n=(c[i>>2]|0)+26724+(c[(c[i>>2]|0)+26720>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=(c[o>>2]|0)+(c[q>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 1:{c[u>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[u>>2]|0)!=1){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(!(c[(c[i>>2]|0)+26712>>2]|0)){c[h>>2]=-30;z=c[h>>2]|0;l=g;return z|0;}c[u>>2]=3;c[s>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[t>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if(((c[t>>2]|0)+(c[u>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}c[r>>2]=Dv((c[i>>2]|0)+26724|0,c[s>>2]|0,(c[m>>2]|0)+(c[u>>2]|0)|0,c[t>>2]|0,(c[i>>2]|0)+10252|0)|0;if(Cv(c[r>>2]|0)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+26716>>2]=(c[i>>2]|0)+26724;c[(c[i>>2]|0)+26720>>2]=c[s>>2];s=(c[i>>2]|0)+26724+(c[(c[i>>2]|0)+26720>>2]|0)|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;a[s+4>>0]=0;a[s+5>>0]=0;a[s+6>>0]=0;a[s+7>>0]=0;c[h>>2]=(c[t>>2]|0)+(c[u>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[w>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[w>>2]|0){case 3:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);break;}case 2:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[w>>2]=1;c[v>>2]=(d[c[m>>2]>>0]|0)&31;}}if(((c[w>>2]|0)+(c[v>>2]|0)+8|0)>>>0<=(c[k>>2]|0)>>>0){c[(c[i>>2]|0)+26716>>2]=(c[m>>2]|0)+(c[w>>2]|0);c[(c[i>>2]|0)+26720>>2]=c[v>>2];c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}if(((c[v>>2]|0)+(c[w>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{mE((c[i>>2]|0)+26724|0,(c[m>>2]|0)+(c[w>>2]|0)|0,c[v>>2]|0)|0;c[(c[i>>2]|0)+26716>>2]=(c[i>>2]|0)+26724;c[(c[i>>2]|0)+26720>>2]=c[v>>2];u=(c[i>>2]|0)+26724+(c[(c[i>>2]|0)+26720>>2]|0)|0;a[u>>0]=0;a[u+1>>0]=0;a[u+2>>0]=0;a[u+3>>0]=0;a[u+4>>0]=0;a[u+5>>0]=0;a[u+6>>0]=0;a[u+7>>0]=0;c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 3:{c[y>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[y>>2]|0){case 3:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if((c[k>>2]|0)>>>0<4){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[y>>2]=1;c[x>>2]=(d[c[m>>2]>>0]|0)&31;}}if((c[x>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{oE((c[i>>2]|0)+26724|0,(d[(c[m>>2]|0)+(c[y>>2]|0)>>0]|0)&255|0,(c[x>>2]|0)+8|0)|0;c[(c[i>>2]|0)+26716>>2]=(c[i>>2]|0)+26724;c[(c[i>>2]|0)+26720>>2]=c[x>>2];c[h>>2]=(c[y>>2]|0)+1;z=c[h>>2]|0;l=g;return z|0;}break;}default:{}}return 0;}function _u(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;g=l;l=l+176|0;h=g+164|0;i=g+160|0;j=g+156|0;k=g+152|0;m=g+148|0;n=g+144|0;o=g+140|0;p=g+136|0;q=g+132|0;r=g+128|0;s=g+124|0;t=g+120|0;u=g+116|0;v=g+112|0;w=g+108|0;x=g+104|0;y=g+100|0;z=g+96|0;A=g+92|0;B=g+88|0;C=g+84|0;D=g+80|0;E=g+76|0;F=g+72|0;G=g+60|0;H=g+8|0;I=g+4|0;J=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[w>>2]=c[(c[j>>2]|0)+26716>>2];c[x>>2]=(c[w>>2]|0)+(c[(c[j>>2]|0)+26720>>2]|0);c[A>>2]=c[j>>2];c[B>>2]=(c[j>>2]|0)+6152;c[C>>2]=(c[j>>2]|0)+4100;c[D>>2]=c[(c[j>>2]|0)+26644>>2];c[E>>2]=c[(c[j>>2]|0)+26648>>2];c[F>>2]=c[(c[j>>2]|0)+26652>>2];c[u>>2]=$u(y,z,v,c[A>>2]|0,c[B>>2]|0,c[C>>2]|0,c[p>>2]|0,c[o>>2]|0,c[(c[j>>2]|0)+26712>>2]|0)|0;j=(mr(c[u>>2]|0)|0)!=0;o=c[u>>2]|0;if(j){c[i>>2]=o;K=c[i>>2]|0;l=g;return K|0;}c[p>>2]=(c[p>>2]|0)+o;if(c[y>>2]|0){c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+8>>2]=1;c[H+44>>2]=c[z>>2];c[H+48>>2]=(c[z>>2]|0)+(c[v>>2]|0);c[H+40>>2]=1;c[u>>2]=av(H,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;if(nr(c[u>>2]|0)|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}bv(H+16|0,H,c[A>>2]|0);bv(H+24|0,H,c[C>>2]|0);bv(H+32|0,H,c[B>>2]|0);while(1){B=(cv(H)|0)>>>0<=2;L=c[y>>2]|0;if(!(B?(c[y>>2]|0)!=0:0))break;c[y>>2]=L+-1;dv(G,H);B=c[s>>2]|0;C=c[t>>2]|0;A=c[x>>2]|0;u=c[D>>2]|0;p=c[E>>2]|0;q=c[F>>2]|0;c[h>>2]=c[G>>2];c[h+4>>2]=c[G+4>>2];c[h+8>>2]=c[G+8>>2];c[I>>2]=ev(B,C,h,w,A,u,p,q)|0;q=(mr(c[I>>2]|0)|0)!=0;M=c[I>>2]|0;if(q){N=9;break;}c[s>>2]=(c[s>>2]|0)+M;}if((N|0)==9){c[i>>2]=M;K=c[i>>2]|0;l=g;return K|0;}if(L|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}}c[J>>2]=(c[x>>2]|0)-(c[w>>2]|0);if((c[w>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}if(((c[s>>2]|0)+(c[J>>2]|0)|0)>>>0>(c[t>>2]|0)>>>0){c[i>>2]=-70;K=c[i>>2]|0;l=g;return K|0;}else{mE(c[s>>2]|0,c[w>>2]|0,c[J>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[J>>2]|0);c[i>>2]=(c[s>>2]|0)-(c[r>>2]|0);K=c[i>>2]|0;l=g;return K|0;}return 0;}function $u(b,e,f,g,h,i,j,k,m){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;n=l;l=l+352|0;o=n+348|0;p=n+344|0;q=n+340|0;r=n+336|0;s=n+332|0;t=n+328|0;u=n+324|0;v=n+320|0;w=n+316|0;x=n+312|0;y=n+308|0;z=n+304|0;A=n+300|0;B=n+296|0;C=n+292|0;D=n+288|0;E=n+284|0;F=n+280|0;G=n+276|0;H=n+272|0;I=n;J=n+268|0;K=n+264|0;L=n+260|0;M=n+256|0;c[p>>2]=b;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;c[v>>2]=j;c[w>>2]=k;c[x>>2]=m;c[y>>2]=c[v>>2];c[z>>2]=c[y>>2];c[A>>2]=(c[y>>2]|0)+(c[w>>2]|0);if((c[w>>2]|0)>>>0<1){c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}w=c[z>>2]|0;c[z>>2]=w+1;c[c[p>>2]>>2]=d[w>>0];if(!(c[c[p>>2]>>2]|0)){c[o>>2]=1;N=c[o>>2]|0;l=n;return N|0;}do{if((c[c[p>>2]>>2]|0)>=128){if((c[z>>2]|0)>>>0<(c[A>>2]|0)>>>0){w=(c[c[p>>2]>>2]|0)-128<<8;v=c[z>>2]|0;c[z>>2]=v+1;c[c[p>>2]>>2]=w+(d[v>>0]|0);break;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}}while(0);if((c[z>>2]|0)>>>0>=(c[A>>2]|0)>>>0){c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}c[B>>2]=(d[c[z>>2]>>0]|0)>>6;c[C>>2]=(d[c[z>>2]>>0]|0)>>4&3;c[D>>2]=(d[c[z>>2]>>0]|0)>>2&3;p=c[z>>2]|0;do{if((d[c[z>>2]>>0]|0)&2|0){if((p+3|0)>>>0<=(c[A>>2]|0)>>>0){c[H>>2]=d[(c[z>>2]|0)+2>>0];c[H>>2]=(c[H>>2]|0)+((d[(c[z>>2]|0)+1>>0]|0)<<8);c[z>>2]=(c[z>>2]|0)+3;break;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}else{if((p+2|0)>>>0<=(c[A>>2]|0)>>>0){c[H>>2]=d[(c[z>>2]|0)+1>>0];c[H>>2]=(c[H>>2]|0)+(((d[c[z>>2]>>0]|0)&1)<<8);c[z>>2]=(c[z>>2]|0)+2;break;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}}while(0);c[c[q>>2]>>2]=c[z>>2];c[z>>2]=(c[z>>2]|0)+(c[H>>2]|0);c[c[r>>2]>>2]=c[H>>2];if((c[z>>2]|0)>>>0>((c[A>>2]|0)+-3|0)>>>0){c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}a:do{switch(c[B>>2]|0){case 1:{c[E>>2]=0;H=c[s>>2]|0;r=c[z>>2]|0;c[z>>2]=r+1;tv(H,a[r>>0]|0)|0;break;}case 0:{c[E>>2]=6;uv(c[s>>2]|0,6)|0;break;}case 2:{if(!(c[x>>2]|0)){c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}break;}default:{c[K>>2]=63;c[J>>2]=vv(I,K,E,c[z>>2]|0,(c[A>>2]|0)-(c[z>>2]|0)|0)|0;if(wv(c[J>>2]|0)|0){c[o>>2]=-1;N=c[o>>2]|0;l=n;return N|0;}if((c[E>>2]|0)>>>0<=10){c[z>>2]=(c[z>>2]|0)+(c[J>>2]|0);xv(c[s>>2]|0,I,c[K>>2]|0,c[E>>2]|0)|0;break a;}c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}}}while(0);b:do{switch(c[C>>2]|0){case 1:{c[F>>2]=0;if((c[z>>2]|0)>>>0<=((c[A>>2]|0)+-2|0)>>>0){E=c[u>>2]|0;K=c[z>>2]|0;c[z>>2]=K+1;tv(E,(d[K>>0]|0)&31)|0;break b;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}case 0:{c[F>>2]=5;uv(c[u>>2]|0,5)|0;break;}case 2:{if(!(c[x>>2]|0)){c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}break;}default:{c[L>>2]=31;c[J>>2]=vv(I,L,F,c[z>>2]|0,(c[A>>2]|0)-(c[z>>2]|0)|0)|0;if(wv(c[J>>2]|0)|0){c[o>>2]=-1;N=c[o>>2]|0;l=n;return N|0;}if((c[F>>2]|0)>>>0<=9){c[z>>2]=(c[z>>2]|0)+(c[J>>2]|0);xv(c[u>>2]|0,I,c[L>>2]|0,c[F>>2]|0)|0;break b;}c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}}}while(0);c:do{switch(c[D>>2]|0){case 1:{c[G>>2]=0;if((c[z>>2]|0)>>>0<=((c[A>>2]|0)+-2|0)>>>0){F=c[t>>2]|0;L=c[z>>2]|0;c[z>>2]=L+1;tv(F,a[L>>0]|0)|0;break c;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}case 0:{c[G>>2]=7;uv(c[t>>2]|0,7)|0;break;}case 2:{if(!(c[x>>2]|0)){c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}break;}default:{c[M>>2]=127;c[J>>2]=vv(I,M,G,c[z>>2]|0,(c[A>>2]|0)-(c[z>>2]|0)|0)|0;if(wv(c[J>>2]|0)|0){c[o>>2]=-1;N=c[o>>2]|0;l=n;return N|0;}if((c[G>>2]|0)>>>0<=10){c[z>>2]=(c[z>>2]|0)+(c[J>>2]|0);xv(c[t>>2]|0,I,c[M>>2]|0,c[G>>2]|0)|0;break c;}c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}}}while(0);c[o>>2]=(c[z>>2]|0)-(c[y>>2]|0);N=c[o>>2]|0;l=n;return N|0;}function av(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;if((c[j>>2]|0)>>>0<1){e=c[h>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[g>>2]=-72;n=c[g>>2]|0;l=f;return n|0;}e=(c[j>>2]|0)>>>0>=4;c[(c[h>>2]|0)+12>>2]=c[i>>2];do{if(e){c[(c[h>>2]|0)+8>>2]=(c[i>>2]|0)+(c[j>>2]|0)+-4;b=ov(c[(c[h>>2]|0)+8>>2]|0)|0;c[c[h>>2]>>2]=b;c[k>>2]=d[(c[i>>2]|0)+((c[j>>2]|0)-1)>>0];if(c[k>>2]|0){b=8-(sv(c[k>>2]|0)|0)|0;c[(c[h>>2]|0)+4>>2]=b;break;}c[g>>2]=-1;n=c[g>>2]|0;l=f;return n|0;}else{c[(c[h>>2]|0)+8>>2]=c[(c[h>>2]|0)+12>>2];c[c[h>>2]>>2]=d[c[(c[h>>2]|0)+12>>2]>>0];switch(c[j>>2]|0){case 7:{b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+6>>0]|0)<<16);o=9;break;}case 6:{o=9;break;}case 5:{o=10;break;}case 4:{o=11;break;}case 3:{o=12;break;}case 2:{o=13;break;}default:{}}if((o|0)==9){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+5>>0]|0)<<8);o=10;}if((o|0)==10){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+4>>0]|0)<<0);o=11;}if((o|0)==11){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+3>>0]|0)<<24);o=12;}if((o|0)==12){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+2>>0]|0)<<16);o=13;}if((o|0)==13){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+1>>0]|0)<<8);}c[m>>2]=d[(c[i>>2]|0)+((c[j>>2]|0)-1)>>0];if(c[m>>2]|0){b=8-(sv(c[m>>2]|0)|0)|0;c[(c[h>>2]|0)+4>>2]=b;b=(c[h>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(4-(c[j>>2]|0)<<3);break;}c[g>>2]=-1;n=c[g>>2]|0;l=f;return n|0;}}while(0);c[g>>2]=c[j>>2];n=c[g>>2]|0;l=f;return n|0;}function bv(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[i>>2];c[k>>2]=c[j>>2];j=jv(c[h>>2]|0,e[c[k>>2]>>1]|0)|0;c[c[g>>2]>>2]=j;cv(c[h>>2]|0)|0;c[(c[g>>2]|0)+4>>2]=(c[i>>2]|0)+4;l=f;return;}function cv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=((c[(c[e>>2]|0)+12>>2]|0)+4|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=ov(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=ov(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function dv(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=l;l=l+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e+24|0;m=e+20|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;r=e;c[f>>2]=a;c[g>>2]=b;c[m>>2]=c[(c[g>>2]|0)+44>>2];c[n>>2]=c[(c[g>>2]|0)+48>>2];c[h>>2]=(iv((c[g>>2]|0)+16|0)|0)&255;if(c[h>>2]|0)s=c[(c[f>>2]|0)+8>>2]|0;else s=c[(c[g>>2]|0)+40>>2]|0;c[i>>2]=s;if((c[h>>2]|0)==63){s=c[m>>2]|0;c[m>>2]=s+1;c[o>>2]=d[s>>0];do{if((c[o>>2]|0)>>>0>=255){c[h>>2]=(Wq(c[m>>2]|0)|0)&16777215;s=c[h>>2]|0;if(c[h>>2]&1|0){c[h>>2]=s>>>1;c[m>>2]=(c[m>>2]|0)+3;break;}else{c[h>>2]=(s&65535)>>1;c[m>>2]=(c[m>>2]|0)+2;break;}}else c[h>>2]=(c[h>>2]|0)+(c[o>>2]|0);}while(0);if((c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0)c[h>>2]=318;if((c[m>>2]|0)>>>0>=(c[n>>2]|0)>>>0)c[m>>2]=(c[n>>2]|0)+-1;}c[p>>2]=(iv((c[g>>2]|0)+24|0)|0)&255;o=(c[p>>2]|0)-1|0;c[q>>2]=o;c[q>>2]=(c[p>>2]|0)==0?0:o;o=c[6880+(c[p>>2]<<2)>>2]|0;c[j>>2]=o+(jv(c[g>>2]|0,c[q>>2]|0)|0);if(kv()|0)cv(c[g>>2]|0)|0;if(!(c[p>>2]|0))c[j>>2]=c[i>>2];if(c[p>>2]|((c[h>>2]|0)!=0^1)&1|0)c[(c[g>>2]|0)+40>>2]=c[(c[f>>2]|0)+8>>2];lv((c[g>>2]|0)+24|0,c[g>>2]|0)|0;lv((c[g>>2]|0)+16|0,c[g>>2]|0)|0;if(kv()|0)cv(c[g>>2]|0)|0;c[k>>2]=(lv((c[g>>2]|0)+32|0,c[g>>2]|0)|0)&255;if((c[k>>2]|0)!=127){t=c[k>>2]|0;u=t+4|0;c[k>>2]=u;v=c[h>>2]|0;w=c[f>>2]|0;c[w>>2]=v;x=c[j>>2]|0;y=c[f>>2]|0;z=y+8|0;c[z>>2]=x;A=c[k>>2]|0;B=c[f>>2]|0;C=B+4|0;c[C>>2]=A;D=c[m>>2]|0;E=c[g>>2]|0;F=E+44|0;c[F>>2]=D;l=e;return;}p=c[m>>2]|0;c[m>>2]=p+1;c[r>>2]=d[p>>0];do{if((c[r>>2]|0)>>>0>=255){c[k>>2]=(Wq(c[m>>2]|0)|0)&16777215;p=c[k>>2]|0;if(c[k>>2]&1|0){c[k>>2]=p>>>1;c[m>>2]=(c[m>>2]|0)+3;break;}else{c[k>>2]=(p&65535)>>1;c[m>>2]=(c[m>>2]|0)+2;break;}}else c[k>>2]=(c[k>>2]|0)+(c[r>>2]|0);}while(0);if((c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0)c[k>>2]=382;if((c[m>>2]|0)>>>0<(c[n>>2]|0)>>>0){t=c[k>>2]|0;u=t+4|0;c[k>>2]=u;v=c[h>>2]|0;w=c[f>>2]|0;c[w>>2]=v;x=c[j>>2]|0;y=c[f>>2]|0;z=y+8|0;c[z>>2]=x;A=c[k>>2]|0;B=c[f>>2]|0;C=B+4|0;c[C>>2]=A;D=c[m>>2]|0;E=c[g>>2]|0;F=E+44|0;c[F>>2]=D;l=e;return;}c[m>>2]=(c[n>>2]|0)+-1;t=c[k>>2]|0;u=t+4|0;c[k>>2]=u;v=c[h>>2]|0;w=c[f>>2]|0;c[w>>2]=v;x=c[j>>2]|0;y=c[f>>2]|0;z=y+8|0;c[z>>2]=x;A=c[k>>2]|0;B=c[f>>2]|0;C=B+4|0;c[C>>2]=A;D=c[m>>2]|0;E=c[g>>2]|0;F=E+44|0;c[F>>2]=D;l=e;return;}function ev(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;k=l;l=l+64|0;m=k+60|0;n=k+56|0;o=k+52|0;p=k+48|0;q=k+44|0;r=k+40|0;s=k+36|0;t=k+32|0;u=k+28|0;v=k+24|0;w=k+20|0;x=k+16|0;y=k+12|0;z=k+8|0;A=k+4|0;B=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+4>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+8>>2]|0));if((c[u>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}fv(c[n>>2]|0,c[c[p>>2]>>2]|0,c[e>>2]|0);c[n>>2]=c[u>>2];c[c[p>>2]>>2]=c[y>>2];do{if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+4>>2]|0)|0)>>>0<=(c[t>>2]|0)>>>0){nE(c[u>>2]|0,c[z>>2]|0,c[e+4>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);y=e+4|0;c[y>>2]=(c[y>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];if((c[n>>2]|0)>>>0<=(c[x>>2]|0)>>>0?(c[e+4>>2]|0)>>>0>=4:0)break;while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;y=c[z>>2]|0;c[z>>2]=y+1;p=a[y>>0]|0;y=c[n>>2]|0;c[n>>2]=y+1;a[y>>0]=p;}c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}}while(0);if((c[e+8>>2]|0)>>>0<8){c[B>>2]=c[6816+(c[e+8>>2]<<2)>>2];a[c[n>>2]>>0]=a[c[z>>2]>>0]|0;a[(c[n>>2]|0)+1>>0]=a[(c[z>>2]|0)+1>>0]|0;a[(c[n>>2]|0)+2>>0]=a[(c[z>>2]|0)+2>>0]|0;a[(c[n>>2]|0)+3>>0]=a[(c[z>>2]|0)+3>>0]|0;c[z>>2]=(c[z>>2]|0)+(c[6848+(c[e+8>>2]<<2)>>2]|0);gv((c[n>>2]|0)+4|0,c[z>>2]|0);c[z>>2]=(c[z>>2]|0)+(0-(c[B>>2]|0));}else hv(c[n>>2]|0,c[z>>2]|0);c[n>>2]=(c[n>>2]|0)+8;c[z>>2]=(c[z>>2]|0)+8;B=c[n>>2]|0;a:do{if((c[w>>2]|0)>>>0>((c[o>>2]|0)+-12|0)>>>0){if(B>>>0<(c[x>>2]|0)>>>0){fv(c[n>>2]|0,c[z>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);c[z>>2]=(c[z>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;r=c[z>>2]|0;c[z>>2]=r+1;A=a[r>>0]|0;r=c[n>>2]|0;c[n>>2]=r+1;a[r>>0]=A;}}else fv(B,c[z>>2]|0,(c[e+4>>2]|0)-8|0);}while(0);c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}function fv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{hv(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function gv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function hv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function iv(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=(c[(c[f>>2]|0)+4>>2]|0)+(c[c[f>>2]>>2]<<2)|0;b[g>>1]=b[d>>1]|0;b[g+2>>1]=b[d+2>>1]|0;l=e;return a[g+2>>0]|0;}function jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=mv(c[e>>2]|0,c[f>>2]|0)|0;nv(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function kv(){return 1;}function lv(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=jv(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function mv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function nv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function ov(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(kv()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=Wq(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=pv(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function pv(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(Xq()|0)!=0;f=qv(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=rv(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function qv(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function rv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function sv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function tv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+20|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=d;a[h>>0]=e;c[i>>2]=c[g>>2];c[j>>2]=c[i>>2];c[k>>2]=(c[g>>2]|0)+4;c[m>>2]=c[k>>2];b[c[j>>2]>>1]=0;b[(c[j>>2]|0)+2>>1]=0;b[c[m>>2]>>1]=0;a[(c[m>>2]|0)+2>>0]=a[h>>0]|0;a[(c[m>>2]|0)+3>>0]=0;l=f;return 0;}function uv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+48|0;g=f+40|0;h=f+36|0;i=f+32|0;j=f+28|0;k=f+24|0;m=f+20|0;n=f+16|0;o=f+12|0;p=f+8|0;q=f+4|0;r=f;c[h>>2]=d;c[i>>2]=e;c[j>>2]=c[h>>2];c[k>>2]=c[j>>2];c[m>>2]=(c[h>>2]|0)+4;c[n>>2]=c[m>>2];c[o>>2]=1<<c[i>>2];c[p>>2]=(c[o>>2]|0)-1;c[q>>2]=c[p>>2];if((c[i>>2]|0)>>>0<1){c[g>>2]=-1;s=c[g>>2]|0;l=f;return s|0;}b[c[k>>2]>>1]=c[i>>2];b[(c[k>>2]|0)+2>>1]=1;c[r>>2]=0;while(1){if((c[r>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;b[(c[n>>2]|0)+(c[r>>2]<<2)>>1]=0;a[(c[n>>2]|0)+(c[r>>2]<<2)+2>>0]=c[r>>2];a[(c[n>>2]|0)+(c[r>>2]<<2)+3>>0]=c[i>>2];c[r>>2]=(c[r>>2]|0)+1;}c[g>>2]=0;s=c[g>>2]|0;l=f;return s|0;}function vv(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;A=h+70|0;B=h+68|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=Wq(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if((c[t>>2]|0)<=1)break;if((c[x>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0)break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=Wq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=19;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[m+(n<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;n=Wq(c[r>>2]|0)|0;c[v>>2]=n>>>(c[w>>2]|0);}}while(0);b[A>>1]=(c[u>>2]<<1)-1-(c[t>>2]|0);n=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(b[A>>1]|0)>>>0){b[B>>1]=n&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{b[B>>1]=n&(m<<1)-1;if((b[B>>1]|0)>=(c[u>>2]|0))b[B>>1]=(b[B>>1]|0)-(b[A>>1]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}b[B>>1]=(b[B>>1]|0)+-1<<16>>16;m=(zv(b[B>>1]|0)|0)<<16>>16;c[t>>2]=(c[t>>2]|0)-m;m=b[B>>1]|0;n=c[j>>2]|0;g=c[x>>2]|0;c[x>>2]=g+1;b[n+(g<<1)>>1]=m;c[y>>2]=((b[B>>1]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=Wq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==19){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-1;C=c[i>>2]|0;l=h;return C|0;}c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);if(((c[r>>2]|0)-(c[p>>2]|0)|0)>>>0>(c[o>>2]|0)>>>0){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}else{c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function wv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=nr(c[d>>2]|0)|0;l=b;return a|0;}function xv(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;j=l;l=l+592|0;k=j+572|0;m=j+568|0;n=j+564|0;o=j+560|0;p=j+556|0;q=j+580|0;r=j+552|0;s=j+548|0;t=j+544|0;u=j+540|0;v=j+536|0;w=j;x=j+532|0;y=j+528|0;z=j+578|0;A=j+524|0;B=j+520|0;C=j+516|0;D=j+512|0;E=j+584|0;F=j+576|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[r>>2]=(c[m>>2]|0)+4;c[s>>2]=c[r>>2];c[t>>2]=1<<c[p>>2];c[u>>2]=(c[t>>2]|0)-1;c[v>>2]=yv(c[t>>2]|0)|0;c[x>>2]=0;c[y>>2]=(c[t>>2]|0)-1;b[z>>1]=1<<(c[p>>2]|0)-1;c[A>>2]=1;if((c[o>>2]|0)>>>0>255){c[k>>2]=-46;G=c[k>>2]|0;l=j;return G|0;}if((c[p>>2]|0)>>>0>12){c[k>>2]=-44;G=c[k>>2]|0;l=j;return G|0;}b[q>>1]=c[p>>2];c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0)==-1){r=c[B>>2]&255;i=c[s>>2]|0;h=c[y>>2]|0;c[y>>2]=h+-1;a[i+(h<<2)+2>>0]=r;b[w+(c[B>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0)>=(b[z>>1]|0))c[A>>2]=0;b[w+(c[B>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0;}c[B>>2]=(c[B>>2]|0)+1;}c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;c[C>>2]=0;while(1){H=c[B>>2]|0;if((c[C>>2]|0)>=(b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0))break;a[(c[s>>2]|0)+(c[x>>2]<<2)+2>>0]=H;c[x>>2]=(c[x>>2]|0)+(c[v>>2]|0)&c[u>>2];while(1){if((c[x>>2]|0)>>>0<=(c[y>>2]|0)>>>0)break;c[x>>2]=(c[x>>2]|0)+(c[v>>2]|0)&c[u>>2];}c[C>>2]=(c[C>>2]|0)+1;}c[B>>2]=H+1;}if(c[x>>2]|0){c[k>>2]=-1;G=c[k>>2]|0;l=j;return G|0;}c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;a[E>>0]=a[(c[s>>2]|0)+(c[D>>2]<<2)+2>>0]|0;x=w+(d[E>>0]<<1)|0;H=b[x>>1]|0;b[x>>1]=H+1<<16>>16;b[F>>1]=H;H=c[p>>2]|0;x=H-(sv(e[F>>1]|0)|0)&255;a[(c[s>>2]|0)+(c[D>>2]<<2)+3>>0]=x;b[(c[s>>2]|0)+(c[D>>2]<<2)>>1]=(e[F>>1]<<d[(c[s>>2]|0)+(c[D>>2]<<2)+3>>0])-(c[t>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}b[q+2>>1]=c[A>>2];A=c[m>>2]|0;b[A>>1]=b[q>>1]|0;b[A+2>>1]=b[q+2>>1]|0;c[k>>2]=0;G=c[k>>2]|0;l=j;return G|0;}function yv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return((c[d>>2]|0)>>>1)+((c[d>>2]|0)>>>3)+3|0;}function zv(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=a;a=b[d>>1]|0;l=c;return((b[d>>1]|0)<0?0-a|0:a)&65535|0;}function Av(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=_v(n,c[k>>2]|0,c[m>>2]|0)|0;k=(Cv(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=cw(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Bv(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=l;l=l+48|0;h=g+44|0;i=g+40|0;j=g+36|0;k=g+32|0;m=g+28|0;n=g+24|0;o=g+20|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[o>>2]=(c[j>>2]|0)>>>8;c[q>>2]=0;if(!(c[j>>2]|0)){c[h>>2]=-70;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)>>>0>=(c[j>>2]|0)>>>0){c[h>>2]=-20;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==1){oE(c[i>>2]|0,(d[c[k>>2]>>0]|0)&255|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}c[n>>2]=(c[m>>2]<<4>>>0)/((c[j>>2]|0)>>>0)|0;c[r>>2]=0;while(1){if((c[r>>2]|0)>=3)break;f=(c[7008+((c[n>>2]|0)*24|0)+(c[r>>2]<<3)>>2]|0)+(N(c[7008+((c[n>>2]|0)*24|0)+(c[r>>2]<<3)+4>>2]|0,c[o>>2]|0)|0)|0;c[p+(c[r>>2]<<2)>>2]=f;c[r>>2]=(c[r>>2]|0)+1;}r=p+4|0;c[r>>2]=(c[r>>2]|0)+((c[p+4>>2]|0)>>>4);r=p+8|0;c[r>>2]=(c[r>>2]|0)+((c[p+8>>2]|0)>>>3);if((c[p+4>>2]|0)>>>0<(c[p>>2]|0)>>>0)c[q>>2]=1;c[h>>2]=sc[c[11976+(c[q>>2]<<2)>>2]&15](c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;s=c[h>>2]|0;l=g;return s|0;}function Cv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=nr(c[d>>2]|0)|0;l=b;return a|0;}function Dv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+40|0;p=g+36|0;q=g+32|0;r=g+28|0;s=g+24|0;t=g+20|0;u=g+16|0;v=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[c[n>>2]>>2];c[s>>2]=c[n>>2];c[t>>2]=(c[s>>2]|0)+4;c[u>>2]=av(v,c[o>>2]|0,c[m>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];w=c[h>>2]|0;l=g;return w|0;}Ev(c[p>>2]|0,v,c[q>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;if(Fv(v)|0){c[h>>2]=c[j>>2];w=c[h>>2]|0;l=g;return w|0;}else{c[h>>2]=-20;w=c[h>>2]|0;l=g;return w|0;}return 0;}function Ev(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[h>>2];while(1){if(cv(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>=((c[j>>2]|0)+-7|0)>>>0)break;if(Gv()|0){f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}Gv()|0;f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;if(Gv()|0){f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){if(cv(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){o=c[h>>2]|0;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=Hv(o,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}if(o>>>0>=(c[j>>2]|0)>>>0){p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}j=Iv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+j;p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}function Fv(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function Gv(){return 0;}function Hv(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=Jv(c[j>>2]|0,c[m>>2]|0)|0;m=c[i>>2]|0;i=(c[k>>2]|0)+(c[n>>2]<<2)|0;a[m>>0]=a[i>>0]|0;a[m+1>>0]=a[i+1>>0]|0;nv(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0;}function Iv(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=Jv(c[j>>2]|0,c[m>>2]|0)|0;a[c[i>>2]>>0]=a[(c[k>>2]|0)+(c[n>>2]<<2)>>0]|0;i=c[j>>2]|0;if((d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0)==1){nv(i,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return 1;}if((c[i+4>>2]|0)>>>0>=32){l=h;return 1;}nv(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);if((c[(c[j>>2]|0)+4>>2]|0)>>>0<=32){l=h;return 1;}c[(c[j>>2]|0)+4>>2]=32;l=h;return 1;}function Jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function Kv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=_v(n,c[k>>2]|0,c[m>>2]|0)|0;k=(Cv(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=$v(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Lv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+16416|0;g=f+16412|0;h=f+16408|0;i=f+16404|0;j=f+16400|0;k=f+16396|0;m=f;n=f+16392|0;o=f+16388|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;oE(m|0,0,16388)|0;c[m>>2]=12;c[n>>2]=c[j>>2];c[o>>2]=Mv(m,c[j>>2]|0,c[k>>2]|0)|0;j=(Cv(c[o>>2]|0)|0)!=0;e=c[o>>2]|0;if(j){c[g>>2]=e;p=c[g>>2]|0;l=f;return p|0;}if(e>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;p=c[g>>2]|0;l=f;return p|0;}else{c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[o>>2]|0);c[g>>2]=Nv(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,m)|0;p=c[g>>2]|0;l=f;return p|0;}return 0;}function Mv(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;g=l;l=l+2128|0;h=g+2120|0;i=g+2116|0;j=g+2112|0;k=g+2108|0;m=g+1760|0;n=g+1248|0;o=g+1168|0;p=g+1088|0;q=g+2104|0;r=g;s=g+2100|0;t=g+2096|0;u=g+2092|0;v=g+2088|0;w=g+2084|0;x=g+2080|0;y=g+2076|0;z=g+2072|0;A=g+2068|0;B=g+2064|0;C=g+2060|0;D=g+2056|0;E=g+2052|0;F=g+2048|0;G=g+2044|0;H=g+2040|0;I=g+2036|0;J=g+2032|0;K=g+2028|0;L=g+2024|0;M=g+2020|0;N=g+2016|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;f=o;e=f+68|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));f=p;e=f+72|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));c[q>>2]=p+4;c[w>>2]=c[c[i>>2]>>2];c[y>>2]=c[i>>2];c[z>>2]=(c[y>>2]|0)+4;if((c[w>>2]|0)>>>0>16){c[h>>2]=-44;O=c[h>>2]|0;l=g;return O|0;}c[x>>2]=Qv(m,256,o,v,s,c[j>>2]|0,c[k>>2]|0)|0;if(Cv(c[x>>2]|0)|0){c[h>>2]=c[x>>2];O=c[h>>2]|0;l=g;return O|0;}if((c[s>>2]|0)>>>0>(c[w>>2]|0)>>>0){c[h>>2]=-44;O=c[h>>2]|0;l=g;return O|0;}c[t>>2]=c[s>>2];while(1){if(c[o+(c[t>>2]<<2)>>2]|0)break;c[t>>2]=(c[t>>2]|0)+-1;}c[B>>2]=0;c[A>>2]=1;while(1){P=c[B>>2]|0;if((c[A>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[C>>2]=P;c[B>>2]=(c[B>>2]|0)+(c[o+(c[A>>2]<<2)>>2]|0);c[(c[q>>2]|0)+(c[A>>2]<<2)>>2]=c[C>>2];c[A>>2]=(c[A>>2]|0)+1;}c[c[q>>2]>>2]=P;c[u>>2]=c[B>>2];c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[E>>2]=d[m+(c[D>>2]|0)>>0];B=(c[q>>2]|0)+(c[E>>2]<<2)|0;P=c[B>>2]|0;c[B>>2]=P+1;c[F>>2]=P;a[n+(c[F>>2]<<1)>>0]=c[D>>2];a[n+(c[F>>2]<<1)+1>>0]=c[E>>2];c[D>>2]=(c[D>>2]|0)+1;}c[c[q>>2]>>2]=0;c[G>>2]=(c[s>>2]|0)+1-(c[t>>2]|0);c[H>>2]=0;c[K>>2]=(c[w>>2]|0)-(c[s>>2]|0)-1;c[L>>2]=r;c[I>>2]=1;while(1){if((c[I>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[M>>2]=c[H>>2];c[H>>2]=(c[H>>2]|0)+(c[o+(c[I>>2]<<2)>>2]<<(c[I>>2]|0)+(c[K>>2]|0));c[(c[L>>2]|0)+(c[I>>2]<<2)>>2]=c[M>>2];c[I>>2]=(c[I>>2]|0)+1;}c[J>>2]=c[G>>2];while(1){if((c[J>>2]|0)>>>0>((c[w>>2]|0)-(c[G>>2]|0)|0)>>>0)break;c[N>>2]=r+((c[J>>2]|0)*68|0);c[I>>2]=1;while(1){if((c[I>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[(c[N>>2]|0)+(c[I>>2]<<2)>>2]=(c[(c[L>>2]|0)+(c[I>>2]<<2)>>2]|0)>>>(c[J>>2]|0);c[I>>2]=(c[I>>2]|0)+1;}c[J>>2]=(c[J>>2]|0)+1;}Rv(c[z>>2]|0,c[w>>2]|0,n,c[u>>2]|0,p,r,c[t>>2]|0,(c[s>>2]|0)+1|0);c[h>>2]=c[x>>2];O=c[h>>2]|0;l=g;return O|0;}function Nv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+192|0;h=g+184|0;i=g+180|0;j=g+176|0;k=g+172|0;m=g+168|0;n=g+164|0;o=g+160|0;p=g+156|0;q=g+152|0;r=g+148|0;s=g+144|0;t=g+140|0;u=g+136|0;v=g+120|0;w=g+104|0;x=g+88|0;y=g+72|0;z=g+64|0;A=g+60|0;B=g+56|0;C=g+52|0;D=g+48|0;E=g+44|0;F=g+40|0;G=g+36|0;H=g+32|0;I=g+28|0;J=g+24|0;K=g+20|0;L=g+16|0;M=g+12|0;N=g+8|0;O=g+4|0;P=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[m>>2]|0)>>>0<10){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+4;c[t>>2]=c[c[n>>2]>>2];c[z>>2]=(Ov(c[o>>2]|0)|0)&65535;c[A>>2]=(Ov((c[o>>2]|0)+2|0)|0)&65535;c[B>>2]=(Ov((c[o>>2]|0)+4|0)|0)&65535;c[D>>2]=(c[o>>2]|0)+6;c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(((c[j>>2]|0)+3|0)>>>0)/4|0;c[I>>2]=(c[p>>2]|0)+(c[H>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[H>>2]|0);c[K>>2]=(c[J>>2]|0)+(c[H>>2]|0);c[L>>2]=c[p>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];c[O>>2]=c[K>>2];c[C>>2]=(c[m>>2]|0)-((c[z>>2]|0)+(c[A>>2]|0)+(c[B>>2]|0)+6);if((c[C>>2]|0)>>>0>(c[m>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=av(v,c[D>>2]|0,c[z>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=av(w,c[E>>2]|0,c[A>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=av(x,c[F>>2]|0,c[B>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=av(y,c[G>>2]|0,c[C>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}u=cv(v)|0;C=u|(cv(w)|0);u=C|(cv(x)|0);c[P>>2]=u|(cv(y)|0);while(1){if(c[P>>2]|0)break;if((c[O>>2]|0)>>>0>=((c[q>>2]|0)+-7|0)>>>0)break;if(Gv()|0){u=Hv(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if(Gv()|0){u=Hv(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if(Gv()|0){u=Hv(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if(Gv()|0){u=Hv(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}Gv()|0;u=Hv(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;Gv()|0;u=Hv(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;Gv()|0;u=Hv(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;Gv()|0;u=Hv(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;if(Gv()|0){u=Hv(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if(Gv()|0){u=Hv(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if(Gv()|0){u=Hv(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if(Gv()|0){u=Hv(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}u=Hv(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;u=Hv(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;u=Hv(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;u=Hv(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;u=cv(v)|0;C=u|(cv(w)|0);u=C|(cv(x)|0);c[P>>2]=u|(cv(y)|0);}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}Ev(c[L>>2]|0,v,c[I>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;Ev(c[M>>2]|0,w,c[J>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;Ev(c[N>>2]|0,x,c[K>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;Ev(c[O>>2]|0,y,c[q>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;t=Fv(v)|0;v=t&(Fv(w)|0);w=v&(Fv(x)|0);c[P>>2]=w&(Fv(y)|0);if(c[P>>2]|0){c[h>>2]=c[j>>2];Q=c[h>>2]|0;l=g;return Q|0;}else{c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}return 0;}function Ov(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(Xq()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=Pv(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function Pv(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Qv(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;k=l;l=l+80|0;m=k+68|0;n=k+64|0;o=k+60|0;p=k+56|0;q=k+52|0;r=k+48|0;s=k+44|0;t=k+40|0;u=k+36|0;v=k+32|0;w=k+28|0;x=k+24|0;y=k+20|0;z=k+16|0;A=k+12|0;B=k+8|0;C=k+4|0;D=k;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[w>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}c[x>>2]=d[c[w>>2]>>0];s=c[x>>2]|0;a:do{if((c[x>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}c[y>>2]=Vv(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[w>>2]|0)+1|0,c[x>>2]|0)|0;if(wv(c[y>>2]|0)|0){c[m>>2]=c[y>>2];E=c[m>>2]|0;l=k;return E|0;}}else{j=c[x>>2]|0;if(s>>>0>=242){c[y>>2]=c[7392+(j-242<<2)>>2];oE(c[n>>2]|0,1,c[o>>2]|0)|0;c[x>>2]=0;break;}c[y>>2]=j-127;c[x>>2]=(((c[y>>2]|0)+1|0)>>>0)/2|0;if(((c[x>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}if((c[y>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[w>>2]=(c[w>>2]|0)+1;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[z>>2]|0)>>0]=(d[(c[w>>2]|0)+(((c[z>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[z>>2]|0)+1)>>0]=(d[(c[w>>2]|0)+(((c[z>>2]|0)>>>0)/2|0)>>0]|0)&15;c[z>>2]=(c[z>>2]|0)+2;}}}while(0);w=c[p>>2]|0;o=w+68|0;do{c[w>>2]=0;w=w+4|0;}while((w|0)<(o|0));c[u>>2]=0;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0|0)>=16){F=20;break;}w=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)<<2)|0;c[w>>2]=(c[w>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)>>1);c[z>>2]=(c[z>>2]|0)+1;}if((F|0)==20){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[v>>2]=(sv(c[u>>2]|0)|0)+1;if((c[v>>2]|0)>>>0>16){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[A>>2]=1<<c[v>>2];c[B>>2]=(c[A>>2]|0)-(c[u>>2]|0);c[C>>2]=1<<(sv(c[B>>2]|0)|0);c[D>>2]=(sv(c[B>>2]|0)|0)+1;if((c[C>>2]|0)!=(c[B>>2]|0)){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=c[D>>2];n=(c[p>>2]|0)+(c[D>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[y>>2]|0)+1;c[c[r>>2]>>2]=c[v>>2];c[m>>2]=(c[x>>2]|0)+1;E=c[m>>2]|0;l=k;return E|0;}c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}function Rv(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+160|0;o=n+140|0;p=n+136|0;q=n+132|0;r=n+128|0;s=n+124|0;t=n+120|0;u=n+116|0;v=n+112|0;w=n;x=n+108|0;y=n+104|0;z=n+100|0;A=n+148|0;B=n+96|0;C=n+92|0;D=n+88|0;E=n+84|0;F=n+80|0;G=n+76|0;H=n+72|0;I=n+68|0;J=n+144|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+68|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];Sv((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*68|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{c[I>>2]=(c[D>>2]|0)+(c[E>>2]|0);Tv(J,b[A>>1]|0);a[J+2>>0]=c[C>>2];a[J+3>>0]=1;c[H>>2]=c[D>>2];while(1){if((c[H>>2]|0)>>>0>=(c[I>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[H>>2]<<2)|0;b[m>>1]=b[J>>1]|0;b[m+2>>1]=b[J+2>>1]|0;c[H>>2]=(c[H>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function Sv(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+160|0;q=p+136|0;r=p+132|0;s=p+128|0;t=p+124|0;u=p+120|0;v=p+116|0;w=p+112|0;x=p+108|0;y=p+144|0;z=p+140|0;A=p;B=p+104|0;C=p+100|0;D=p+96|0;E=p+92|0;F=p+88|0;G=p+84|0;H=p+80|0;I=p+76|0;J=p+72|0;K=p+68|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+68|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[D>>2]=c[A+(c[u>>2]<<2)>>2];Tv(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[C>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[C>>2]=(c[C>>2]|0)+1;}}}while(0);c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[B>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[B>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);Tv(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{C=c[q>>2]|0;D=c[J>>2]|0;c[J>>2]=D+1;u=C+(D<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[B>>2]=(c[B>>2]|0)+1;}l=p;return;}function Tv(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Xq()|0)!=0;d=c[h>>2]|0;if(f){Uv(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function Uv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=b[h>>1]|0;h=c[g>>2]|0;a[h>>0]=e;a[h+1>>0]=e>>8;l=f;return;}function Vv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+16960|0;g=f+16948|0;h=f+16944|0;i=f+16940|0;j=f+16936|0;k=f+16932|0;m=f+16928|0;n=f+16924|0;o=f+16400|0;p=f;q=f+16920|0;r=f+16916|0;s=f+16912|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=c[m>>2];c[r>>2]=255;if((c[k>>2]|0)>>>0<2){c[g>>2]=-72;t=c[g>>2]|0;l=f;return t|0;}c[s>>2]=vv(o,r,q,c[m>>2]|0,c[k>>2]|0)|0;m=(wv(c[s>>2]|0)|0)!=0;j=c[s>>2]|0;if(m){c[g>>2]=j;t=c[g>>2]|0;l=f;return t|0;}if(j>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;t=c[g>>2]|0;l=f;return t|0;}c[n>>2]=(c[n>>2]|0)+(c[s>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[s>>2]|0);c[s>>2]=xv(p,o,c[r>>2]|0,c[q>>2]|0)|0;if(wv(c[s>>2]|0)|0){c[g>>2]=c[s>>2];t=c[g>>2]|0;l=f;return t|0;}else{c[g>>2]=Wv(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,p)|0;t=c[g>>2]|0;l=f;return t|0;}return 0;}function Wv(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;i=l;l=l+208|0;j=i+192|0;k=i+188|0;m=i+184|0;n=i+180|0;o=i+176|0;p=i+172|0;q=i+168|0;r=i+164|0;s=i+160|0;t=i+156|0;u=i+152|0;v=i+136|0;w=i+128|0;x=i+120|0;y=i+116|0;z=i+112|0;A=i+108|0;B=i+104|0;C=i+100|0;D=i+96|0;E=i+92|0;F=i+88|0;G=i+84|0;H=i+80|0;I=i+76|0;J=i+72|0;K=i+56|0;L=i+48|0;M=i+40|0;N=i+36|0;O=i+32|0;P=i+28|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[P>>2]=b;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=c[T>>2];c[V>>2]=c[U>>2];c[W>>2]=e[(c[V>>2]|0)+2>>1];V=c[P>>2]|0;P=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;if(c[W>>2]|0){c[A>>2]=V;c[B>>2]=P;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=1;c[G>>2]=c[A>>2];c[H>>2]=c[G>>2];c[I>>2]=(c[H>>2]|0)+(c[B>>2]|0);c[J>>2]=(c[I>>2]|0)+-3;c[N>>2]=av(K,c[C>>2]|0,c[D>>2]|0)|0;do{if(!(wv(c[N>>2]|0)|0)){bv(L,K,c[E>>2]|0);bv(M,K,c[E>>2]|0);while(1){if(cv(K)|0)break;if((c[H>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break;if(c[F>>2]|0)X=(Xv(L,K)|0)&255;else X=(lv(L,K)|0)&255;a[c[H>>2]>>0]=X;if(c[F>>2]|0)Y=(Xv(M,K)|0)&255;else Y=(lv(M,K)|0)&255;a[(c[H>>2]|0)+1>>0]=Y;if((cv(K)|0)>>>0>0){Z=14;break;}if(c[F>>2]|0)_=(Xv(L,K)|0)&255;else _=(lv(L,K)|0)&255;a[(c[H>>2]|0)+2>>0]=_;if(c[F>>2]|0)$=(Xv(M,K)|0)&255;else $=(lv(M,K)|0)&255;a[(c[H>>2]|0)+3>>0]=$;c[H>>2]=(c[H>>2]|0)+4;}if((Z|0)==14)c[H>>2]=(c[H>>2]|0)+2;while(1){if((cv(K)|0)>>>0>2)break;if((c[H>>2]|0)==(c[I>>2]|0))break;if(Fv(K)|0){if(c[F>>2]|0)break;if(Yv(L)|0)break;}if(c[F>>2]|0)aa=(Xv(L,K)|0)&255;else aa=(lv(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=aa;if((cv(K)|0)>>>0>2)break;if((c[H>>2]|0)==(c[I>>2]|0))break;if(Fv(K)|0){if(c[F>>2]|0)break;if(Yv(M)|0)break;}if(c[F>>2]|0)ba=(Xv(M,K)|0)&255;else ba=(lv(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ba;}if((Fv(K)|0?Yv(L)|0:0)?Yv(M)|0:0){c[z>>2]=(c[H>>2]|0)-(c[G>>2]|0);break;}if((c[H>>2]|0)==(c[I>>2]|0)){c[z>>2]=-70;break;}else{c[z>>2]=-20;break;}}else c[z>>2]=c[N>>2];}while(0);c[O>>2]=c[z>>2];ca=c[O>>2]|0;l=i;return ca|0;}else{c[k>>2]=V;c[m>>2]=P;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=0;c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[s>>2]|0)+(c[m>>2]|0);c[u>>2]=(c[t>>2]|0)+-3;c[y>>2]=av(v,c[n>>2]|0,c[o>>2]|0)|0;do{if(!(wv(c[y>>2]|0)|0)){bv(w,v,c[p>>2]|0);bv(x,v,c[p>>2]|0);while(1){if(cv(v)|0)break;if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;if(c[q>>2]|0)da=(Xv(w,v)|0)&255;else da=(lv(w,v)|0)&255;a[c[s>>2]>>0]=da;if(c[q>>2]|0)ea=(Xv(x,v)|0)&255;else ea=(lv(x,v)|0)&255;a[(c[s>>2]|0)+1>>0]=ea;if((cv(v)|0)>>>0>0){Z=60;break;}if(c[q>>2]|0)fa=(Xv(w,v)|0)&255;else fa=(lv(w,v)|0)&255;a[(c[s>>2]|0)+2>>0]=fa;if(c[q>>2]|0)ga=(Xv(x,v)|0)&255;else ga=(lv(x,v)|0)&255;a[(c[s>>2]|0)+3>>0]=ga;c[s>>2]=(c[s>>2]|0)+4;}if((Z|0)==60)c[s>>2]=(c[s>>2]|0)+2;while(1){if((cv(v)|0)>>>0>2)break;if((c[s>>2]|0)==(c[t>>2]|0))break;if(Fv(v)|0){if(c[q>>2]|0)break;if(Yv(w)|0)break;}if(c[q>>2]|0)ha=(Xv(w,v)|0)&255;else ha=(lv(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ha;if((cv(v)|0)>>>0>2)break;if((c[s>>2]|0)==(c[t>>2]|0))break;if(Fv(v)|0){if(c[q>>2]|0)break;if(Yv(x)|0)break;}if(c[q>>2]|0)ia=(Xv(x,v)|0)&255;else ia=(lv(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ia;}if((Fv(v)|0?Yv(w)|0:0)?Yv(x)|0:0){c[j>>2]=(c[s>>2]|0)-(c[r>>2]|0);break;}if((c[s>>2]|0)==(c[t>>2]|0)){c[j>>2]=-70;break;}else{c[j>>2]=-20;break;}}else c[j>>2]=c[y>>2];}while(0);c[O>>2]=c[j>>2];ca=c[O>>2]|0;l=i;return ca|0;}return 0;}function Xv(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=Zv(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function Yv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[c[d>>2]>>2]|0)==0|0;}function Zv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Jv(c[e>>2]|0,c[f>>2]|0)|0;nv(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function _v(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;i=l;l=l+400|0;j=i+392|0;k=i+388|0;m=i+384|0;n=i+380|0;o=i+80|0;p=i;q=i+376|0;r=i+372|0;s=i+368|0;t=i+364|0;u=i+360|0;v=i+356|0;w=i+352|0;x=i+348|0;y=i+344|0;z=i+340|0;A=i+336|0;B=i+396|0;c[k>>2]=f;c[m>>2]=g;c[n>>2]=h;c[q>>2]=0;c[s>>2]=0;c[v>>2]=(c[k>>2]|0)+2;c[w>>2]=c[v>>2];c[r>>2]=Qv(o,256,p,s,q,c[m>>2]|0,c[n>>2]|0)|0;if(Cv(c[r>>2]|0)|0){c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}if((c[q>>2]|0)>>>0>(e[c[k>>2]>>1]|0)>>>0){c[j>>2]=-44;C=c[j>>2]|0;l=i;return C|0;}b[c[k>>2]>>1]=c[q>>2];c[u>>2]=0;c[t>>2]=1;while(1){if((c[t>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;c[x>>2]=c[u>>2];c[u>>2]=(c[u>>2]|0)+(c[p+(c[t>>2]<<2)>>2]<<(c[t>>2]|0)-1);c[p+(c[t>>2]<<2)>>2]=c[x>>2];c[t>>2]=(c[t>>2]|0)+1;}c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[y>>2]=d[o+(c[t>>2]|0)>>0];c[z>>2]=1<<c[y>>2]>>1;a[B>>0]=c[t>>2];a[B+1>>0]=(c[q>>2]|0)+1-(c[y>>2]|0);c[A>>2]=c[p+(c[y>>2]<<2)>>2];while(1){if((c[A>>2]|0)>>>0>=((c[p+(c[y>>2]<<2)>>2]|0)+(c[z>>2]|0)|0)>>>0)break;x=(c[w>>2]|0)+(c[A>>2]<<1)|0;a[x>>0]=a[B>>0]|0;a[x+1>>0]=a[B+1>>0]|0;c[A>>2]=(c[A>>2]|0)+1;}x=p+(c[y>>2]<<2)|0;c[x>>2]=(c[x>>2]|0)+(c[z>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}function $v(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;i=l;l=l+192|0;j=i+184|0;k=i+180|0;m=i+176|0;n=i+172|0;o=i+168|0;p=i+164|0;q=i+160|0;r=i+156|0;s=i+152|0;t=i+148|0;u=i+144|0;v=i+140|0;w=i+136|0;x=i+120|0;y=i+104|0;z=i+88|0;A=i+72|0;B=i+64|0;C=i+60|0;D=i+56|0;E=i+52|0;F=i+48|0;G=i+44|0;H=i+40|0;I=i+36|0;J=i+32|0;K=i+28|0;L=i+24|0;M=i+20|0;N=i+16|0;O=i+12|0;P=i+8|0;Q=i+4|0;R=i;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=c[n>>2];c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[p>>2];c[u>>2]=(c[t>>2]|0)+2;c[v>>2]=e[c[p>>2]>>1];c[B>>2]=(Ov(c[q>>2]|0)|0)&65535;c[C>>2]=(Ov((c[q>>2]|0)+2|0)|0)&65535;c[D>>2]=(Ov((c[q>>2]|0)+4|0)|0)&65535;c[F>>2]=(c[q>>2]|0)+6;c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(c[G>>2]|0)+(c[C>>2]|0);c[I>>2]=(c[H>>2]|0)+(c[D>>2]|0);c[J>>2]=(((c[m>>2]|0)+3|0)>>>0)/4|0;c[K>>2]=(c[r>>2]|0)+(c[J>>2]|0);c[L>>2]=(c[K>>2]|0)+(c[J>>2]|0);c[M>>2]=(c[L>>2]|0)+(c[J>>2]|0);c[N>>2]=c[r>>2];c[O>>2]=c[K>>2];c[P>>2]=c[L>>2];c[Q>>2]=c[M>>2];if((c[o>>2]|0)>>>0<10){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[E>>2]=(c[o>>2]|0)-((c[B>>2]|0)+(c[C>>2]|0)+(c[D>>2]|0)+6);if((c[E>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=av(x,c[F>>2]|0,c[B>>2]|0)|0;if(Cv(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=av(y,c[G>>2]|0,c[C>>2]|0)|0;if(Cv(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=av(z,c[H>>2]|0,c[D>>2]|0)|0;if(Cv(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=av(A,c[I>>2]|0,c[E>>2]|0)|0;if(Cv(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}w=cv(x)|0;E=w|(cv(y)|0);w=E|(cv(z)|0);c[R>>2]=w|(cv(A)|0);while(1){if(c[R>>2]|0)break;if((c[Q>>2]|0)>>>0>=((c[s>>2]|0)+-7|0)>>>0)break;if(Gv()|0){w=aw(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}Gv()|0;w=aw(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;Gv()|0;w=aw(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;Gv()|0;w=aw(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;Gv()|0;w=aw(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;if(Gv()|0){w=aw(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}w=aw(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;w=aw(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;w=aw(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;w=aw(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;w=cv(x)|0;E=w|(cv(y)|0);w=E|(cv(z)|0);c[R>>2]=w|(cv(A)|0);}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[O>>2]|0)>>>0>(c[L>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[P>>2]|0)>>>0>(c[M>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}bw(c[N>>2]|0,x,c[K>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;bw(c[O>>2]|0,y,c[L>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;bw(c[P>>2]|0,z,c[M>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;bw(c[Q>>2]|0,A,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;v=Fv(x)|0;x=v&(Fv(y)|0);y=x&(Fv(z)|0);c[R>>2]=y&(Fv(A)|0);if(c[R>>2]|0){c[j>>2]=c[m>>2];S=c[j>>2]|0;l=i;return S|0;}else{c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}return 0;}function aw(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+16|0;c[h>>2]=b;c[i>>2]=e;c[j>>2]=f;c[k>>2]=Jv(c[h>>2]|0,c[j>>2]|0)|0;a[m>>0]=a[(c[i>>2]|0)+(c[k>>2]<<1)>>0]|0;nv(c[h>>2]|0,d[(c[i>>2]|0)+(c[k>>2]<<1)+1>>0]|0);l=g;return a[m>>0]|0;}function bw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[i>>2];while(1){if(cv(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>((c[k>>2]|0)+-4|0)>>>0)break;if(Gv()|0){g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}Gv()|0;g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;if(Gv()|0){g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if(cv(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}l=h;return(c[k>>2]|0)-(c[o>>2]|0)|0;}function cw(a,b,d,f,g){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+8|0;v=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[j>>2];c[q>>2]=(c[p>>2]|0)+(c[k>>2]|0);c[r>>2]=e[c[o>>2]>>1];c[s>>2]=c[o>>2];c[t>>2]=(c[s>>2]|0)+2;if((c[k>>2]|0)>>>0<=(c[n>>2]|0)>>>0){c[i>>2]=-70;w=c[i>>2]|0;l=h;return w|0;}c[v>>2]=av(u,c[m>>2]|0,c[n>>2]|0)|0;if(Cv(c[v>>2]|0)|0){c[i>>2]=c[v>>2];w=c[i>>2]|0;l=h;return w|0;}bw(c[p>>2]|0,u,c[q>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;if(Fv(u)|0){c[i>>2]=c[k>>2];w=c[i>>2]|0;l=h;return w|0;}else{c[i>>2]=-20;w=c[i>>2]|0;l=h;return w|0;}return 0;}function dw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+26656>>2]=5;c[(c[d>>2]|0)+26708>>2]=0;c[(c[d>>2]|0)+26640>>2]=0;c[(c[d>>2]|0)+26644>>2]=0;c[(c[d>>2]|0)+26648>>2]=0;c[(c[d>>2]|0)+26652>>2]=0;c[(c[d>>2]|0)+10252>>2]=12;c[(c[d>>2]|0)+26712>>2]=0;l=b;return 0;}function ew(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[k>>2]=Wq(c[h>>2]|0)|0;if((c[k>>2]|0)!=-332356555){fw(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)-4;c[j>>2]=gw(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;if(mr(c[j>>2]|0)|0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}else{c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);fw(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}return 0;}function fw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+26652>>2]=c[(c[f>>2]|0)+26640>>2];c[(c[f>>2]|0)+26648>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+26640>>2]|0)-(c[(c[f>>2]|0)+26644>>2]|0)));c[(c[f>>2]|0)+26644>>2]=c[g>>2];c[(c[f>>2]|0)+26640>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function gw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;e=l;l=l+512|0;f=e+504|0;g=e+500|0;h=e+496|0;i=e+492|0;j=e+488|0;k=e+484|0;m=e+480|0;n=e+476|0;o=e+472|0;p=e+384|0;q=e+468|0;r=e+464|0;s=e+128|0;t=e+460|0;u=e+456|0;v=e;w=e+452|0;x=e+448|0;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[q>>2]=31;c[t>>2]=127;c[w>>2]=63;c[j>>2]=Mv((c[g>>2]|0)+10252|0,c[h>>2]|0,c[i>>2]|0)|0;if(Cv(c[j>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);c[k>>2]=vv(p,q,r,c[h>>2]|0,c[i>>2]|0)|0;if(wv(c[k>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}if((c[r>>2]|0)>>>0>9){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[n>>2]=xv((c[g>>2]|0)+4100|0,p,c[q>>2]|0,c[r>>2]|0)|0;if(wv(c[n>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);c[m>>2]=vv(s,t,u,c[h>>2]|0,c[i>>2]|0)|0;if(wv(c[m>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}if((c[u>>2]|0)>>>0>10){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[n>>2]=xv((c[g>>2]|0)+6152|0,s,c[t>>2]|0,c[u>>2]|0)|0;if(wv(c[n>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[m>>2]|0);c[o>>2]=vv(v,w,x,c[h>>2]|0,c[i>>2]|0)|0;if((c[x>>2]|0)>>>0>10){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}if(wv(c[o>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[n>>2]=xv(c[g>>2]|0,v,c[w>>2]|0,c[x>>2]|0)|0;if(wv(c[n>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}else{c[(c[g>>2]|0)+26712>>2]=1;c[f>>2]=(c[j>>2]|0)+(c[k>>2]|0)+(c[m>>2]|0)+(c[o>>2]|0);y=c[f>>2]|0;l=e;return y|0;}return 0;}function hw(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(141416)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{kw(c[d>>2]|0)|0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function iw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;f=jw(c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,0,0)|0;l=g;return f|0;}function jw(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;i=l;l=l+80|0;j=i+76|0;k=i+72|0;m=i+68|0;n=i+64|0;o=i+60|0;p=i+56|0;q=i+52|0;r=i+48|0;s=i+44|0;t=i+40|0;u=i+36|0;v=i+32|0;w=i+28|0;x=i+24|0;y=i+16|0;z=i+8|0;A=i+4|0;B=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=c[o>>2];c[t>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[u>>2]=c[m>>2];c[v>>2]=c[u>>2];c[w>>2]=(c[u>>2]|0)+(c[n>>2]|0);c[x>>2]=c[p>>2];kw(c[k>>2]|0)|0;if(c[q>>2]|0){lw(c[k>>2]|0,c[q>>2]|0,c[r>>2]|0);c[(c[k>>2]|0)+10264>>2]=c[(c[k>>2]|0)+10252>>2];c[(c[k>>2]|0)+10260>>2]=(c[m>>2]|0)+(0-((c[(c[k>>2]|0)+10252>>2]|0)-(c[(c[k>>2]|0)+10256>>2]|0)));c[(c[k>>2]|0)+10256>>2]=c[m>>2];}else{r=c[m>>2]|0;c[(c[k>>2]|0)+10264>>2]=r;c[(c[k>>2]|0)+10256>>2]=r;c[(c[k>>2]|0)+10260>>2]=r;}if((c[p>>2]|0)>>>0<8){c[j>>2]=-72;C=c[j>>2]|0;l=i;return C|0;}c[z>>2]=mw(c[k>>2]|0,c[o>>2]|0,5)|0;if(rr(c[z>>2]|0)|0){c[j>>2]=c[z>>2];C=c[j>>2]|0;l=i;return C|0;}if((c[p>>2]|0)>>>0<((c[z>>2]|0)+3|0)>>>0){c[j>>2]=-72;C=c[j>>2]|0;l=i;return C|0;}c[s>>2]=(c[s>>2]|0)+(c[z>>2]|0);c[x>>2]=(c[x>>2]|0)-(c[z>>2]|0);c[z>>2]=nw(c[k>>2]|0,c[o>>2]|0,c[z>>2]|0)|0;if(rr(c[z>>2]|0)|0){c[j>>2]=c[z>>2];C=c[j>>2]|0;l=i;return C|0;}a:while(1){c[A>>2]=0;c[B>>2]=qr(c[s>>2]|0,(c[t>>2]|0)-(c[s>>2]|0)|0,y)|0;if(rr(c[B>>2]|0)|0){D=14;break;}c[s>>2]=(c[s>>2]|0)+3;c[x>>2]=(c[x>>2]|0)-3;if((c[B>>2]|0)>>>0>(c[x>>2]|0)>>>0){D=16;break;}switch(c[y>>2]|0){case 2:{D=20;break a;break;}case 0:{c[A>>2]=ow(c[k>>2]|0,c[v>>2]|0,(c[w>>2]|0)-(c[v>>2]|0)|0,c[s>>2]|0,c[B>>2]|0)|0;break;}case 1:{c[A>>2]=pw(c[v>>2]|0,(c[w>>2]|0)-(c[v>>2]|0)|0,c[s>>2]|0,c[B>>2]|0)|0;break;}case 3:{if(c[x>>2]|0){D=22;break a;}break;}default:{D=23;break a;}}if(!(c[B>>2]|0)){D=28;break;}z=(rr(c[A>>2]|0)|0)!=0;E=c[A>>2]|0;if(z){D=26;break;}c[v>>2]=(c[v>>2]|0)+E;c[s>>2]=(c[s>>2]|0)+(c[B>>2]|0);c[x>>2]=(c[x>>2]|0)-(c[B>>2]|0);}if((D|0)==14){c[j>>2]=c[B>>2];C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==16){c[j>>2]=-72;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==20){c[j>>2]=-1;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==22){c[j>>2]=-72;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==23){c[j>>2]=-1;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==26){c[j>>2]=E;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==28){c[j>>2]=(c[v>>2]|0)-(c[u>>2]|0);C=c[j>>2]|0;l=i;return C|0;}return 0;}function kw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+10268>>2]=5;c[(c[d>>2]|0)+10316>>2]=0;c[(c[d>>2]|0)+10252>>2]=0;c[(c[d>>2]|0)+10256>>2]=0;c[(c[d>>2]|0)+10260>>2]=0;c[(c[d>>2]|0)+10264>>2]=0;l=b;return 0;}function lw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+10264>>2]=c[(c[f>>2]|0)+10252>>2];c[(c[f>>2]|0)+10260>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+10252>>2]|0)-(c[(c[f>>2]|0)+10256>>2]|0)));c[(c[f>>2]|0)+10256>>2]=c[g>>2];c[(c[f>>2]|0)+10252>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)!=5){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}c[j>>2]=pr(c[h>>2]|0)|0;if((c[j>>2]|0)!=-47205084){c[f>>2]=-10;k=c[f>>2]|0;l=e;return k|0;}else{c[(c[g>>2]|0)+10272>>2]=5;c[f>>2]=c[(c[g>>2]|0)+10272>>2];k=c[f>>2]|0;l=e;return k|0;}return 0;}function nw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)!=(c[(c[g>>2]|0)+10272>>2]|0)){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}c[j>>2]=sx((c[g>>2]|0)+10280|0,c[h>>2]|0,c[i>>2]|0)|0;if(Dw()|0?(c[(c[g>>2]|0)+10280+8>>2]|0)>>>0>25:0){c[f>>2]=-14;k=c[f>>2]|0;l=e;return k|0;}c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}function ow(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=qw(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(rr(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+f;c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=rw(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function pw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function qw(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+48|0;h=g+32|0;i=g+28|0;j=g+24|0;k=g+20|0;m=g+16|0;n=g+12|0;o=g+8|0;p=g+4|0;q=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<11){c[h>>2]=-20;r=c[h>>2]|0;l=g;return r|0;}switch((d[c[m>>2]>>0]|0)&3|0){case 0:{c[n>>2]=131072;c[o>>2]=Uw((c[i>>2]|0)+10328|0,n,c[j>>2]|0,c[k>>2]|0)|0;c[(c[i>>2]|0)+10320>>2]=(c[i>>2]|0)+10328;c[(c[i>>2]|0)+10324>>2]=c[n>>2];n=(c[i>>2]|0)+10328+(c[(c[i>>2]|0)+10324>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=c[o>>2];r=c[h>>2]|0;l=g;return r|0;}case 1:{c[p>>2]=((pr(c[m>>2]|0)|0)&16777215)>>>2;if((c[p>>2]|0)>>>0<=((c[k>>2]|0)-11|0)>>>0){c[(c[i>>2]|0)+10320>>2]=(c[m>>2]|0)+3;c[(c[i>>2]|0)+10324>>2]=c[p>>2];c[h>>2]=(c[p>>2]|0)+3;r=c[h>>2]|0;l=g;return r|0;}if((c[p>>2]|0)>>>0>((c[k>>2]|0)-3|0)>>>0){c[h>>2]=-20;r=c[h>>2]|0;l=g;return r|0;}else{mE((c[i>>2]|0)+10328|0,c[m>>2]|0,c[p>>2]|0)|0;c[(c[i>>2]|0)+10320>>2]=(c[i>>2]|0)+10328;c[(c[i>>2]|0)+10324>>2]=c[p>>2];k=(c[i>>2]|0)+10328+(c[(c[i>>2]|0)+10324>>2]|0)|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;a[k+4>>0]=0;a[k+5>>0]=0;a[k+6>>0]=0;a[k+7>>0]=0;c[h>>2]=(c[p>>2]|0)+3;r=c[h>>2]|0;l=g;return r|0;}break;}case 2:{c[q>>2]=((pr(c[m>>2]|0)|0)&16777215)>>>2;if((c[q>>2]|0)>>>0>131072){c[h>>2]=-20;r=c[h>>2]|0;l=g;return r|0;}else{oE((c[i>>2]|0)+10328|0,(d[(c[m>>2]|0)+3>>0]|0)&255|0,(c[q>>2]|0)+8|0)|0;c[(c[i>>2]|0)+10320>>2]=(c[i>>2]|0)+10328;c[(c[i>>2]|0)+10324>>2]=c[q>>2];c[h>>2]=4;r=c[h>>2]|0;l=g;return r|0;}break;}default:{c[h>>2]=-20;r=c[h>>2]|0;l=g;return r|0;}}return 0;}function rw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=l;l=l+176|0;h=g+164|0;i=g+160|0;j=g+156|0;k=g+152|0;m=g+148|0;n=g+144|0;o=g+140|0;p=g+136|0;q=g+132|0;r=g+128|0;s=g+124|0;t=g+120|0;u=g+116|0;v=g+112|0;w=g+108|0;x=g+104|0;y=g+100|0;z=g+96|0;A=g+92|0;B=g+88|0;C=g+84|0;D=g+80|0;E=g+76|0;F=g+72|0;G=g+60|0;H=g+8|0;I=g+4|0;J=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[w>>2]=c[(c[j>>2]|0)+10320>>2];c[x>>2]=(c[w>>2]|0)+(c[(c[j>>2]|0)+10324>>2]|0);c[A>>2]=c[j>>2];c[B>>2]=(c[j>>2]|0)+6152;c[C>>2]=(c[j>>2]|0)+4100;c[D>>2]=c[(c[j>>2]|0)+10256>>2];c[E>>2]=c[(c[j>>2]|0)+10260>>2];c[F>>2]=c[(c[j>>2]|0)+10264>>2];c[u>>2]=sw(y,z,v,c[A>>2]|0,c[B>>2]|0,c[C>>2]|0,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;j=(rr(c[u>>2]|0)|0)!=0;m=c[u>>2]|0;if(j){c[i>>2]=m;K=c[i>>2]|0;l=g;return K|0;}c[p>>2]=(c[p>>2]|0)+m;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+4>>2]=4;c[H+44>>2]=c[z>>2];c[H+48>>2]=(c[z>>2]|0)+(c[v>>2]|0);c[H+40>>2]=4;c[u>>2]=tw(H,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;if(sr(c[u>>2]|0)|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}uw(H+16|0,H,c[A>>2]|0);uw(H+24|0,H,c[C>>2]|0);uw(H+32|0,H,c[B>>2]|0);while(1){B=(vw(H)|0)>>>0<=2;if(!(B?(c[y>>2]|0)!=0:0))break;c[y>>2]=(c[y>>2]|0)+-1;ww(G,H);B=c[s>>2]|0;C=c[t>>2]|0;A=c[x>>2]|0;u=c[D>>2]|0;p=c[E>>2]|0;q=c[F>>2]|0;c[h>>2]=c[G>>2];c[h+4>>2]=c[G+4>>2];c[h+8>>2]=c[G+8>>2];c[I>>2]=xw(B,C,h,w,A,u,p,q)|0;q=(rr(c[I>>2]|0)|0)!=0;L=c[I>>2]|0;if(q){M=8;break;}c[s>>2]=(c[s>>2]|0)+L;}if((M|0)==8){c[i>>2]=L;K=c[i>>2]|0;l=g;return K|0;}if(!(yw(H)|0)){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}c[J>>2]=(c[x>>2]|0)-(c[w>>2]|0);if((c[w>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}if(((c[s>>2]|0)+(c[J>>2]|0)|0)>>>0>(c[t>>2]|0)>>>0){c[i>>2]=-70;K=c[i>>2]|0;l=g;return K|0;}if((c[s>>2]|0)!=(c[w>>2]|0))mE(c[s>>2]|0,c[w>>2]|0,c[J>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[J>>2]|0);c[i>>2]=(c[s>>2]|0)-(c[r>>2]|0);K=c[i>>2]|0;l=g;return K|0;}function sw(b,e,f,g,h,i,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;m=l;l=l+352|0;n=m+344|0;o=m+340|0;p=m+336|0;q=m+332|0;r=m+328|0;s=m+324|0;t=m+320|0;u=m+316|0;v=m+312|0;w=m+308|0;x=m+304|0;y=m+300|0;z=m+296|0;A=m+292|0;B=m+288|0;C=m+284|0;D=m+280|0;E=m+276|0;F=m+272|0;G=m;H=m+268|0;I=m+264|0;J=m+260|0;K=m+256|0;c[o>>2]=b;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=c[u>>2];c[x>>2]=c[w>>2];c[y>>2]=(c[w>>2]|0)+(c[v>>2]|0);if((c[v>>2]|0)>>>0<5){c[n>>2]=-72;L=c[n>>2]|0;l=m;return L|0;}v=(Lw(c[x>>2]|0)|0)&65535;c[c[o>>2]>>2]=v;c[x>>2]=(c[x>>2]|0)+2;c[z>>2]=(d[c[x>>2]>>0]|0)>>6;c[A>>2]=(d[c[x>>2]>>0]|0)>>4&3;c[B>>2]=(d[c[x>>2]>>0]|0)>>2&3;v=c[x>>2]|0;if((d[c[x>>2]>>0]|0)&2|0){c[F>>2]=d[v+2>>0];c[F>>2]=(c[F>>2]|0)+((d[(c[x>>2]|0)+1>>0]|0)<<8);c[x>>2]=(c[x>>2]|0)+3;}else{c[F>>2]=d[v+1>>0];c[F>>2]=(c[F>>2]|0)+(((d[c[x>>2]>>0]|0)&1)<<8);c[x>>2]=(c[x>>2]|0)+2;}c[c[p>>2]>>2]=c[x>>2];c[x>>2]=(c[x>>2]|0)+(c[F>>2]|0);c[c[q>>2]>>2]=c[F>>2];if((c[x>>2]|0)>>>0>((c[y>>2]|0)+-3|0)>>>0){c[n>>2]=-72;L=c[n>>2]|0;l=m;return L|0;}a:do{switch(c[z>>2]|0){case 2:{c[C>>2]=0;F=c[r>>2]|0;q=c[x>>2]|0;c[x>>2]=q+1;Mw(F,a[q>>0]|0)|0;break;}case 1:{c[C>>2]=6;Nw(c[r>>2]|0,6)|0;break;}default:{c[I>>2]=63;c[H>>2]=Ow(G,I,C,c[x>>2]|0,(c[y>>2]|0)-(c[x>>2]|0)|0)|0;if(Pw(c[H>>2]|0)|0){c[n>>2]=-1;L=c[n>>2]|0;l=m;return L|0;}if((c[C>>2]|0)>>>0<=10){c[x>>2]=(c[x>>2]|0)+(c[H>>2]|0);Qw(c[r>>2]|0,G,c[I>>2]|0,c[C>>2]|0)|0;break a;}c[n>>2]=-20;L=c[n>>2]|0;l=m;return L|0;}}}while(0);b:do{switch(c[A>>2]|0){case 2:{c[D>>2]=0;if((c[x>>2]|0)>>>0<=((c[y>>2]|0)+-2|0)>>>0){C=c[t>>2]|0;I=c[x>>2]|0;c[x>>2]=I+1;Mw(C,(d[I>>0]|0)&31)|0;break b;}c[n>>2]=-72;L=c[n>>2]|0;l=m;return L|0;}case 1:{c[D>>2]=5;Nw(c[t>>2]|0,5)|0;break;}default:{c[J>>2]=31;c[H>>2]=Ow(G,J,D,c[x>>2]|0,(c[y>>2]|0)-(c[x>>2]|0)|0)|0;if(Pw(c[H>>2]|0)|0){c[n>>2]=-1;L=c[n>>2]|0;l=m;return L|0;}if((c[D>>2]|0)>>>0<=9){c[x>>2]=(c[x>>2]|0)+(c[H>>2]|0);Qw(c[t>>2]|0,G,c[J>>2]|0,c[D>>2]|0)|0;break b;}c[n>>2]=-20;L=c[n>>2]|0;l=m;return L|0;}}}while(0);c:do{switch(c[B>>2]|0){case 2:{c[E>>2]=0;if((c[x>>2]|0)>>>0<=((c[y>>2]|0)+-2|0)>>>0){D=c[s>>2]|0;J=c[x>>2]|0;c[x>>2]=J+1;Mw(D,a[J>>0]|0)|0;break c;}c[n>>2]=-72;L=c[n>>2]|0;l=m;return L|0;}case 1:{c[E>>2]=7;Nw(c[s>>2]|0,7)|0;break;}default:{c[K>>2]=127;c[H>>2]=Ow(G,K,E,c[x>>2]|0,(c[y>>2]|0)-(c[x>>2]|0)|0)|0;if(Pw(c[H>>2]|0)|0){c[n>>2]=-1;L=c[n>>2]|0;l=m;return L|0;}if((c[E>>2]|0)>>>0<=10){c[x>>2]=(c[x>>2]|0)+(c[H>>2]|0);Qw(c[s>>2]|0,G,c[K>>2]|0,c[E>>2]|0)|0;break c;}c[n>>2]=-20;L=c[n>>2]|0;l=m;return L|0;}}}while(0);c[n>>2]=(c[x>>2]|0)-(c[w>>2]|0);L=c[n>>2]|0;l=m;return L|0;}function tw(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;if((c[j>>2]|0)>>>0<1){e=c[h>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[g>>2]=-72;n=c[g>>2]|0;l=f;return n|0;}e=(c[j>>2]|0)>>>0>=4;c[(c[h>>2]|0)+12>>2]=c[i>>2];do{if(e){c[(c[h>>2]|0)+8>>2]=(c[i>>2]|0)+(c[j>>2]|0)+-4;b=Hw(c[(c[h>>2]|0)+8>>2]|0)|0;c[c[h>>2]>>2]=b;c[k>>2]=d[(c[i>>2]|0)+((c[j>>2]|0)-1)>>0];if(c[k>>2]|0){b=8-(Kw(c[k>>2]|0)|0)|0;c[(c[h>>2]|0)+4>>2]=b;break;}c[g>>2]=-1;n=c[g>>2]|0;l=f;return n|0;}else{c[(c[h>>2]|0)+8>>2]=c[(c[h>>2]|0)+12>>2];c[c[h>>2]>>2]=d[c[(c[h>>2]|0)+12>>2]>>0];switch(c[j>>2]|0){case 7:{b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+6>>0]|0)<<16);o=9;break;}case 6:{o=9;break;}case 5:{o=10;break;}case 4:{o=11;break;}case 3:{o=12;break;}case 2:{o=13;break;}default:{}}if((o|0)==9){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+5>>0]|0)<<8);o=10;}if((o|0)==10){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+4>>0]|0)<<0);o=11;}if((o|0)==11){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+3>>0]|0)<<24);o=12;}if((o|0)==12){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+2>>0]|0)<<16);o=13;}if((o|0)==13){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+1>>0]|0)<<8);}c[m>>2]=d[(c[i>>2]|0)+((c[j>>2]|0)-1)>>0];if(c[m>>2]|0){b=8-(Kw(c[m>>2]|0)|0)|0;c[(c[h>>2]|0)+4>>2]=b;b=(c[h>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(4-(c[j>>2]|0)<<3);break;}c[g>>2]=-1;n=c[g>>2]|0;l=f;return n|0;}}while(0);c[g>>2]=c[j>>2];n=c[g>>2]|0;l=f;return n|0;}function uw(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+16|0;h=g+8|0;i=g+4|0;j=g;k=g+12|0;c[h>>2]=a;c[i>>2]=d;c[j>>2]=f;f=c[j>>2]|0;b[k>>1]=b[f>>1]|0;b[k+2>>1]=b[f+2>>1]|0;f=Ew(c[i>>2]|0,e[k>>1]|0)|0;c[c[h>>2]>>2]=f;vw(c[i>>2]|0)|0;c[(c[h>>2]|0)+4>>2]=(c[j>>2]|0)+4;l=g;return;}function vw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=((c[(c[e>>2]|0)+12>>2]|0)+4|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=Hw(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=Hw(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function ww(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=l;l=l+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e+24|0;m=e+20|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;r=e;c[f>>2]=a;c[g>>2]=b;c[m>>2]=c[(c[g>>2]|0)+44>>2];c[n>>2]=c[(c[g>>2]|0)+48>>2];c[h>>2]=(Cw((c[g>>2]|0)+16|0,c[g>>2]|0)|0)&255;if(c[h>>2]|0)s=c[(c[f>>2]|0)+4>>2]|0;else s=c[(c[g>>2]|0)+40>>2]|0;c[i>>2]=s;if((c[h>>2]|0)==63){s=c[m>>2]|0;c[m>>2]=s+1;c[o>>2]=d[s>>0];if((c[o>>2]|0)>>>0<255)c[h>>2]=(c[h>>2]|0)+(c[o>>2]|0);else{c[h>>2]=(d[c[m>>2]>>0]|0)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+((d[(c[m>>2]|0)+2>>0]|0)<<16);c[m>>2]=(c[m>>2]|0)+3;}if((c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0)c[h>>2]=318;if((c[m>>2]|0)>>>0>=(c[n>>2]|0)>>>0)c[m>>2]=(c[n>>2]|0)+-1;}c[p>>2]=(Cw((c[g>>2]|0)+24|0,c[g>>2]|0)|0)&255;if(Dw()|0)vw(c[g>>2]|0)|0;o=(c[p>>2]|0)-1|0;c[q>>2]=o;c[q>>2]=(c[p>>2]|0)==0?0:o;o=c[6880+(c[p>>2]<<2)>>2]|0;c[j>>2]=o+(Ew(c[g>>2]|0,c[q>>2]|0)|0);if(Dw()|0)vw(c[g>>2]|0)|0;if(!(c[p>>2]|0))c[j>>2]=c[i>>2];if(c[p>>2]|((c[h>>2]|0)!=0^1)&1|0)c[(c[g>>2]|0)+40>>2]=c[(c[f>>2]|0)+4>>2];c[k>>2]=(Cw((c[g>>2]|0)+32|0,c[g>>2]|0)|0)&255;if((c[k>>2]|0)==127){p=c[m>>2]|0;c[m>>2]=p+1;c[r>>2]=d[p>>0];if((c[r>>2]|0)>>>0<255)c[k>>2]=(c[k>>2]|0)+(c[r>>2]|0);else{c[k>>2]=(d[c[m>>2]>>0]|0)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+((d[(c[m>>2]|0)+2>>0]|0)<<16);c[m>>2]=(c[m>>2]|0)+3;}if((c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0)c[k>>2]=382;if((c[m>>2]|0)>>>0>=(c[n>>2]|0)>>>0)c[m>>2]=(c[n>>2]|0)+-1;}c[k>>2]=(c[k>>2]|0)+4;c[c[f>>2]>>2]=c[h>>2];c[(c[f>>2]|0)+4>>2]=c[j>>2];c[(c[f>>2]|0)+8>>2]=c[k>>2];c[(c[g>>2]|0)+44>>2]=c[m>>2];l=e;return;}function xw(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;k=l;l=l+64|0;m=k+60|0;n=k+56|0;o=k+52|0;p=k+48|0;q=k+44|0;r=k+40|0;s=k+36|0;t=k+32|0;u=k+28|0;v=k+24|0;w=k+20|0;x=k+16|0;y=k+12|0;z=k+8|0;A=k+4|0;B=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+8>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+4>>2]|0));if((c[u>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}zw(c[n>>2]|0,c[c[p>>2]>>2]|0,c[e>>2]|0);c[n>>2]=c[u>>2];c[c[p>>2]>>2]=c[y>>2];do{if((c[e+4>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+4>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+8>>2]|0)|0)>>>0<=(c[t>>2]|0)>>>0){nE(c[u>>2]|0,c[z>>2]|0,c[e+8>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);y=e+8|0;c[y>>2]=(c[y>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];if((c[n>>2]|0)>>>0<=(c[x>>2]|0)>>>0?(c[e+8>>2]|0)>>>0>=4:0)break;while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;y=c[z>>2]|0;c[z>>2]=y+1;p=a[y>>0]|0;y=c[n>>2]|0;c[n>>2]=y+1;a[y>>0]=p;}c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}}while(0);if((c[e+4>>2]|0)>>>0<8){c[B>>2]=c[6816+(c[e+4>>2]<<2)>>2];a[c[n>>2]>>0]=a[c[z>>2]>>0]|0;a[(c[n>>2]|0)+1>>0]=a[(c[z>>2]|0)+1>>0]|0;a[(c[n>>2]|0)+2>>0]=a[(c[z>>2]|0)+2>>0]|0;a[(c[n>>2]|0)+3>>0]=a[(c[z>>2]|0)+3>>0]|0;c[z>>2]=(c[z>>2]|0)+(c[6848+(c[e+4>>2]<<2)>>2]|0);Aw((c[n>>2]|0)+4|0,c[z>>2]|0);c[z>>2]=(c[z>>2]|0)+(0-(c[B>>2]|0));}else Bw(c[n>>2]|0,c[z>>2]|0);c[n>>2]=(c[n>>2]|0)+8;c[z>>2]=(c[z>>2]|0)+8;B=c[n>>2]|0;a:do{if((c[w>>2]|0)>>>0>((c[o>>2]|0)+-12|0)>>>0){if(B>>>0<(c[x>>2]|0)>>>0){zw(c[n>>2]|0,c[z>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);c[z>>2]=(c[z>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;r=c[z>>2]|0;c[z>>2]=r+1;A=a[r>>0]|0;r=c[n>>2]|0;c[n>>2]=r+1;a[r>>0]=A;}}else zw(B,c[z>>2]|0,(c[e+8>>2]|0)-8|0);}while(0);c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}function yw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function zw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Bw(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Aw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function Bw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Cw(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=Ew(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function Dw(){return 1;}function Ew(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Fw(c[e>>2]|0,c[f>>2]|0)|0;Gw(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Fw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function Gw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function Hw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Dw()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=pr(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=Iw(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Iw(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;b=l;l=l+16|0;e=b;f=b+12|0;g=b+8|0;c[f>>2]=a;a=(tr()|0)!=0;h=c[f>>2]|0;if(a){a=Jw(h)|0;f=e;c[f>>2]=a;c[f+4>>2]=y;i=e;j=i;k=c[j>>2]|0;m=i+4|0;n=m;o=c[n>>2]|0;y=o;l=b;return k|0;}else{c[g>>2]=h;h=d[c[g>>2]>>0]|0;f=jE(d[(c[g>>2]|0)+1>>0]|0|0,0,8)|0;a=dE(h|0,0,f|0,y|0)|0;f=y;h=jE(d[(c[g>>2]|0)+2>>0]|0|0,0,16)|0;p=dE(a|0,f|0,h|0,y|0)|0;h=y;f=jE(d[(c[g>>2]|0)+3>>0]|0|0,0,24)|0;a=dE(p|0,h|0,f|0,y|0)|0;f=dE(a|0,y|0,0,d[(c[g>>2]|0)+4>>0]|0|0)|0;a=y;h=jE(d[(c[g>>2]|0)+5>>0]|0|0,0,40)|0;p=dE(f|0,a|0,h|0,y|0)|0;h=y;a=jE(d[(c[g>>2]|0)+6>>0]|0|0,0,48)|0;f=dE(p|0,h|0,a|0,y|0)|0;a=y;h=jE(d[(c[g>>2]|0)+7>>0]|0|0,0,56)|0;g=dE(f|0,a|0,h|0,y|0)|0;h=e;c[h>>2]=g;c[h+4>>2]=y;i=e;j=i;k=c[j>>2]|0;m=i+4|0;n=m;o=c[n>>2]|0;y=o;l=b;return k|0;}return 0;}function Jw(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;a[f+4>>0]=a[b+4>>0]|0;a[f+5>>0]=a[b+5>>0]|0;a[f+6>>0]=a[b+6>>0]|0;a[f+7>>0]=a[b+7>>0]|0;b=f;y=c[b+4>>2]|0;l=d;return c[b>>2]|0;}function Kw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Lw(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(tr()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=Tw(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function Mw(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+20|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=d;a[h>>0]=e;c[i>>2]=c[g>>2];c[j>>2]=c[i>>2];c[k>>2]=(c[g>>2]|0)+4;c[m>>2]=c[k>>2];b[c[j>>2]>>1]=0;b[(c[j>>2]|0)+2>>1]=0;b[c[m>>2]>>1]=0;a[(c[m>>2]|0)+2>>0]=a[h>>0]|0;a[(c[m>>2]|0)+3>>0]=0;l=f;return 0;}function Nw(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+48|0;g=f+40|0;h=f+36|0;i=f+32|0;j=f+28|0;k=f+24|0;m=f+20|0;n=f+16|0;o=f+12|0;p=f+8|0;q=f+4|0;r=f;c[h>>2]=d;c[i>>2]=e;c[j>>2]=c[h>>2];c[k>>2]=c[j>>2];c[m>>2]=(c[h>>2]|0)+4;c[n>>2]=c[m>>2];c[o>>2]=1<<c[i>>2];c[p>>2]=(c[o>>2]|0)-1;c[q>>2]=c[p>>2];if((c[i>>2]|0)>>>0<1){c[g>>2]=-1;s=c[g>>2]|0;l=f;return s|0;}b[c[k>>2]>>1]=c[i>>2];b[(c[k>>2]|0)+2>>1]=1;c[r>>2]=0;while(1){if((c[r>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;b[(c[n>>2]|0)+(c[r>>2]<<2)>>1]=0;a[(c[n>>2]|0)+(c[r>>2]<<2)+2>>0]=c[r>>2];a[(c[n>>2]|0)+(c[r>>2]<<2)+3>>0]=c[i>>2];c[r>>2]=(c[r>>2]|0)+1;}c[g>>2]=0;s=c[g>>2]|0;l=f;return s|0;}function Ow(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;A=h+70|0;B=h+68|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=pr(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if((c[t>>2]|0)<=1)break;if((c[x>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0)break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=pr(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=19;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[m+(n<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;n=pr(c[r>>2]|0)|0;c[v>>2]=n>>>(c[w>>2]|0);}}while(0);b[A>>1]=(c[u>>2]<<1)-1-(c[t>>2]|0);n=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(b[A>>1]|0)>>>0){b[B>>1]=n&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{b[B>>1]=n&(m<<1)-1;if((b[B>>1]|0)>=(c[u>>2]|0))b[B>>1]=(b[B>>1]|0)-(b[A>>1]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}b[B>>1]=(b[B>>1]|0)+-1<<16>>16;m=(Sw(b[B>>1]|0)|0)<<16>>16;c[t>>2]=(c[t>>2]|0)-m;m=b[B>>1]|0;n=c[j>>2]|0;g=c[x>>2]|0;c[x>>2]=g+1;b[n+(g<<1)>>1]=m;c[y>>2]=((b[B>>1]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=pr(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==19){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-1;C=c[i>>2]|0;l=h;return C|0;}c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);if(((c[r>>2]|0)-(c[p>>2]|0)|0)>>>0>(c[o>>2]|0)>>>0){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}else{c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function Pw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=sr(c[d>>2]|0)|0;l=b;return a|0;}function Qw(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;j=l;l=l+592|0;k=j+572|0;m=j+568|0;n=j+564|0;o=j+560|0;p=j+556|0;q=j+580|0;r=j+552|0;s=j+548|0;t=j+544|0;u=j+540|0;v=j+536|0;w=j;x=j+532|0;y=j+528|0;z=j+578|0;A=j+524|0;B=j+520|0;C=j+516|0;D=j+512|0;E=j+584|0;F=j+576|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[r>>2]=(c[m>>2]|0)+4;c[s>>2]=c[r>>2];c[t>>2]=1<<c[p>>2];c[u>>2]=(c[t>>2]|0)-1;c[v>>2]=Rw(c[t>>2]|0)|0;c[x>>2]=0;c[y>>2]=(c[t>>2]|0)-1;b[z>>1]=1<<(c[p>>2]|0)-1;c[A>>2]=1;if((c[o>>2]|0)>>>0>255){c[k>>2]=-46;G=c[k>>2]|0;l=j;return G|0;}if((c[p>>2]|0)>>>0>12){c[k>>2]=-44;G=c[k>>2]|0;l=j;return G|0;}b[q>>1]=c[p>>2];c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0)==-1){r=c[B>>2]&255;i=c[s>>2]|0;h=c[y>>2]|0;c[y>>2]=h+-1;a[i+(h<<2)+2>>0]=r;b[w+(c[B>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0)>=(b[z>>1]|0))c[A>>2]=0;b[w+(c[B>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0;}c[B>>2]=(c[B>>2]|0)+1;}c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;c[C>>2]=0;while(1){H=c[B>>2]|0;if((c[C>>2]|0)>=(b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0))break;a[(c[s>>2]|0)+(c[x>>2]<<2)+2>>0]=H;c[x>>2]=(c[x>>2]|0)+(c[v>>2]|0)&c[u>>2];while(1){if((c[x>>2]|0)>>>0<=(c[y>>2]|0)>>>0)break;c[x>>2]=(c[x>>2]|0)+(c[v>>2]|0)&c[u>>2];}c[C>>2]=(c[C>>2]|0)+1;}c[B>>2]=H+1;}if(c[x>>2]|0){c[k>>2]=-1;G=c[k>>2]|0;l=j;return G|0;}c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;a[E>>0]=a[(c[s>>2]|0)+(c[D>>2]<<2)+2>>0]|0;x=w+(d[E>>0]<<1)|0;H=b[x>>1]|0;b[x>>1]=H+1<<16>>16;b[F>>1]=H;H=c[p>>2]|0;x=H-(Kw(e[F>>1]|0)|0)&255;a[(c[s>>2]|0)+(c[D>>2]<<2)+3>>0]=x;b[(c[s>>2]|0)+(c[D>>2]<<2)>>1]=(e[F>>1]<<d[(c[s>>2]|0)+(c[D>>2]<<2)+3>>0])-(c[t>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}b[q+2>>1]=c[A>>2];A=c[m>>2]|0;b[A>>1]=b[q>>1]|0;b[A+2>>1]=b[q+2>>1]|0;c[k>>2]=0;G=c[k>>2]|0;l=j;return G|0;}function Rw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return((c[d>>2]|0)>>>1)+((c[d>>2]|0)>>>3)+3|0;}function Sw(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=a;a=b[d>>1]|0;l=c;return((b[d>>1]|0)<0?0-a|0:a)&65535|0;}function Tw(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;l=e;return b[g>>1]|0;}function Uw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=((pr(c[j>>2]|0)|0)&2097151)>>>2;c[o>>2]=((pr((c[m>>2]|0)+2|0)|0)&16777215)>>>5;if((c[n>>2]|0)>>>0>(c[c[i>>2]>>2]|0)>>>0){c[g>>2]=-20;p=c[g>>2]|0;l=f;return p|0;}if(((c[o>>2]|0)+5|0)>>>0>(c[k>>2]|0)>>>0){c[g>>2]=-20;p=c[g>>2]|0;l=f;return p|0;}if(Ww(Vw(c[h>>2]|0,c[n>>2]|0,(c[m>>2]|0)+5|0,c[o>>2]|0)|0)|0){c[g>>2]=-20;p=c[g>>2]|0;l=f;return p|0;}else{c[c[i>>2]>>2]=c[n>>2];c[g>>2]=(c[o>>2]|0)+5;p=c[g>>2]|0;l=f;return p|0;}return 0;}function Vw(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=l;l=l+48|0;h=g+44|0;i=g+40|0;j=g+36|0;k=g+32|0;m=g+28|0;n=g+24|0;o=g+20|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[o>>2]=(c[j>>2]|0)>>>8;c[q>>2]=0;if(!(c[j>>2]|0)){c[h>>2]=-70;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)>>>0>(c[j>>2]|0)>>>0){c[h>>2]=-20;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==(c[j>>2]|0)){mE(c[i>>2]|0,c[k>>2]|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==1){oE(c[i>>2]|0,(d[c[k>>2]>>0]|0)&255|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}c[n>>2]=(c[m>>2]<<4>>>0)/((c[j>>2]|0)>>>0)|0;c[r>>2]=0;while(1){if((c[r>>2]|0)>=3)break;f=(c[7008+((c[n>>2]|0)*24|0)+(c[r>>2]<<3)>>2]|0)+(N(c[7008+((c[n>>2]|0)*24|0)+(c[r>>2]<<3)+4>>2]|0,c[o>>2]|0)|0)|0;c[p+(c[r>>2]<<2)>>2]=f;c[r>>2]=(c[r>>2]|0)+1;}r=p+4|0;c[r>>2]=(c[r>>2]|0)+((c[p+4>>2]|0)>>>4);r=p+8|0;c[r>>2]=(c[r>>2]|0)+((c[p+8>>2]|0)>>>3);if((c[p+4>>2]|0)>>>0<(c[p>>2]|0)>>>0)c[q>>2]=1;c[h>>2]=sc[c[11988+(c[q>>2]<<2)>>2]&15](c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;s=c[h>>2]|0;l=g;return s|0;}function Ww(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=sr(c[d>>2]|0)|0;l=b;return a|0;}function Xw(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=ox(n,c[k>>2]|0,c[m>>2]|0)|0;k=(Ww(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=px(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Yw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+16416|0;g=f+16412|0;h=f+16408|0;i=f+16404|0;j=f+16400|0;k=f+16396|0;m=f;n=f+16392|0;o=f+16388|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;oE(m|0,0,16388)|0;c[m>>2]=12;c[n>>2]=c[j>>2];c[o>>2]=Zw(m,c[j>>2]|0,c[k>>2]|0)|0;j=(Ww(c[o>>2]|0)|0)!=0;e=c[o>>2]|0;if(j){c[g>>2]=e;p=c[g>>2]|0;l=f;return p|0;}if(e>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;p=c[g>>2]|0;l=f;return p|0;}else{c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[o>>2]|0);c[g>>2]=_w(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,m)|0;p=c[g>>2]|0;l=f;return p|0;}return 0;}function Zw(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+2128|0;h=g+2120|0;i=g+2116|0;j=g+2112|0;k=g+2108|0;m=g+1760|0;n=g+1248|0;o=g+1168|0;p=g+1088|0;q=g+2104|0;r=g;s=g+2100|0;t=g+2096|0;u=g+2092|0;v=g+2088|0;w=g+2084|0;x=g+2080|0;y=g+2076|0;z=g+2072|0;A=g+2068|0;B=g+2064|0;C=g+2060|0;D=g+2056|0;E=g+2052|0;F=g+2048|0;G=g+2044|0;H=g+2040|0;I=g+2036|0;J=g+2032|0;K=g+2028|0;L=g+2024|0;M=g+2020|0;N=g+2016|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;f=o;e=f+68|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));f=p;e=f+72|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));c[q>>2]=p+4;c[w>>2]=c[c[i>>2]>>2];c[y>>2]=c[i>>2];c[z>>2]=(c[y>>2]|0)+4;if((c[w>>2]|0)>>>0>16){c[h>>2]=-44;O=c[h>>2]|0;l=g;return O|0;}c[x>>2]=ex(m,256,o,v,s,c[j>>2]|0,c[k>>2]|0)|0;if(Ww(c[x>>2]|0)|0){c[h>>2]=c[x>>2];O=c[h>>2]|0;l=g;return O|0;}if((c[s>>2]|0)>>>0>(c[w>>2]|0)>>>0){c[h>>2]=-44;O=c[h>>2]|0;l=g;return O|0;}c[t>>2]=c[s>>2];while(1){if(c[o+(c[t>>2]<<2)>>2]|0)break;if(!(c[t>>2]|0)){P=10;break;}c[t>>2]=(c[t>>2]|0)+-1;}if((P|0)==10){c[h>>2]=-1;O=c[h>>2]|0;l=g;return O|0;}c[B>>2]=0;c[A>>2]=1;while(1){Q=c[B>>2]|0;if((c[A>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[C>>2]=Q;c[B>>2]=(c[B>>2]|0)+(c[o+(c[A>>2]<<2)>>2]|0);c[(c[q>>2]|0)+(c[A>>2]<<2)>>2]=c[C>>2];c[A>>2]=(c[A>>2]|0)+1;}c[c[q>>2]>>2]=Q;c[u>>2]=c[B>>2];c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[E>>2]=d[m+(c[D>>2]|0)>>0];B=(c[q>>2]|0)+(c[E>>2]<<2)|0;Q=c[B>>2]|0;c[B>>2]=Q+1;c[F>>2]=Q;a[n+(c[F>>2]<<1)>>0]=c[D>>2];a[n+(c[F>>2]<<1)+1>>0]=c[E>>2];c[D>>2]=(c[D>>2]|0)+1;}c[c[q>>2]>>2]=0;c[G>>2]=(c[s>>2]|0)+1-(c[t>>2]|0);c[H>>2]=0;c[K>>2]=(c[w>>2]|0)-(c[s>>2]|0)-1;c[L>>2]=r;c[I>>2]=1;while(1){if((c[I>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[M>>2]=c[H>>2];c[H>>2]=(c[H>>2]|0)+(c[o+(c[I>>2]<<2)>>2]<<(c[I>>2]|0)+(c[K>>2]|0));c[(c[L>>2]|0)+(c[I>>2]<<2)>>2]=c[M>>2];c[I>>2]=(c[I>>2]|0)+1;}c[J>>2]=c[G>>2];while(1){if((c[J>>2]|0)>>>0>((c[w>>2]|0)-(c[G>>2]|0)|0)>>>0)break;c[N>>2]=r+((c[J>>2]|0)*68|0);c[I>>2]=1;while(1){if((c[I>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[(c[N>>2]|0)+(c[I>>2]<<2)>>2]=(c[(c[L>>2]|0)+(c[I>>2]<<2)>>2]|0)>>>(c[J>>2]|0);c[I>>2]=(c[I>>2]|0)+1;}c[J>>2]=(c[J>>2]|0)+1;}fx(c[z>>2]|0,c[w>>2]|0,n,c[u>>2]|0,p,r,c[t>>2]|0,(c[s>>2]|0)+1|0);c[h>>2]=c[x>>2];O=c[h>>2]|0;l=g;return O|0;}function _w(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+192|0;h=g+184|0;i=g+180|0;j=g+176|0;k=g+172|0;m=g+168|0;n=g+164|0;o=g+160|0;p=g+156|0;q=g+152|0;r=g+148|0;s=g+144|0;t=g+140|0;u=g+136|0;v=g+120|0;w=g+104|0;x=g+88|0;y=g+72|0;z=g+64|0;A=g+60|0;B=g+56|0;C=g+52|0;D=g+48|0;E=g+44|0;F=g+40|0;G=g+36|0;H=g+32|0;I=g+28|0;J=g+24|0;K=g+20|0;L=g+16|0;M=g+12|0;N=g+8|0;O=g+4|0;P=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[m>>2]|0)>>>0<10){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+4;c[t>>2]=c[c[n>>2]>>2];c[z>>2]=(Lw(c[o>>2]|0)|0)&65535;c[A>>2]=(Lw((c[o>>2]|0)+2|0)|0)&65535;c[B>>2]=(Lw((c[o>>2]|0)+4|0)|0)&65535;c[D>>2]=(c[o>>2]|0)+6;c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(((c[j>>2]|0)+3|0)>>>0)/4|0;c[I>>2]=(c[p>>2]|0)+(c[H>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[H>>2]|0);c[K>>2]=(c[J>>2]|0)+(c[H>>2]|0);c[L>>2]=c[p>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];c[O>>2]=c[K>>2];c[C>>2]=(c[m>>2]|0)-((c[z>>2]|0)+(c[A>>2]|0)+(c[B>>2]|0)+6);if((c[C>>2]|0)>>>0>(c[m>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=tw(v,c[D>>2]|0,c[z>>2]|0)|0;if(Ww(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=tw(w,c[E>>2]|0,c[A>>2]|0)|0;if(Ww(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=tw(x,c[F>>2]|0,c[B>>2]|0)|0;if(Ww(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=tw(y,c[G>>2]|0,c[C>>2]|0)|0;if(Ww(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}u=vw(v)|0;C=u|(vw(w)|0);u=C|(vw(x)|0);c[P>>2]=u|(vw(y)|0);while(1){if(c[P>>2]|0)break;if((c[O>>2]|0)>>>0>=((c[q>>2]|0)+-7|0)>>>0)break;if($w()|0){u=ax(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if($w()|0){u=ax(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if($w()|0){u=ax(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if($w()|0){u=ax(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}$w()|0;u=ax(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;$w()|0;u=ax(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;$w()|0;u=ax(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;$w()|0;u=ax(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;if($w()|0){u=ax(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if($w()|0){u=ax(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if($w()|0){u=ax(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if($w()|0){u=ax(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}u=ax(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;u=ax(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;u=ax(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;u=ax(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;u=vw(v)|0;C=u|(vw(w)|0);u=C|(vw(x)|0);c[P>>2]=u|(vw(y)|0);}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}bx(c[L>>2]|0,v,c[I>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;bx(c[M>>2]|0,w,c[J>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;bx(c[N>>2]|0,x,c[K>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;bx(c[O>>2]|0,y,c[q>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;t=yw(v)|0;v=t&(yw(w)|0);w=v&(yw(x)|0);c[P>>2]=w&(yw(y)|0);if(c[P>>2]|0){c[h>>2]=c[j>>2];Q=c[h>>2]|0;l=g;return Q|0;}else{c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}return 0;}function $w(){return 0;}function ax(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=dx(c[j>>2]|0,c[m>>2]|0)|0;m=c[i>>2]|0;i=(c[k>>2]|0)+(c[n>>2]<<2)|0;a[m>>0]=a[i>>0]|0;a[m+1>>0]=a[i+1>>0]|0;Gw(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0;}function bx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[h>>2];while(1){if(vw(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>=((c[j>>2]|0)+-7|0)>>>0)break;if($w()|0){f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}$w()|0;f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;if($w()|0){f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){if(vw(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){o=c[h>>2]|0;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=ax(o,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}if(o>>>0>=(c[j>>2]|0)>>>0){p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}j=cx(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+j;p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}function cx(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=dx(c[j>>2]|0,c[m>>2]|0)|0;a[c[i>>2]>>0]=a[(c[k>>2]|0)+(c[n>>2]<<2)>>0]|0;i=c[j>>2]|0;if((d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0)==1){Gw(i,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return 1;}if((c[i+4>>2]|0)>>>0>=32){l=h;return 1;}Gw(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);if((c[(c[j>>2]|0)+4>>2]|0)>>>0<=32){l=h;return 1;}c[(c[j>>2]|0)+4>>2]=32;l=h;return 1;}function dx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function ex(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;k=l;l=l+80|0;m=k+68|0;n=k+64|0;o=k+60|0;p=k+56|0;q=k+52|0;r=k+48|0;s=k+44|0;t=k+40|0;u=k+36|0;v=k+32|0;w=k+28|0;x=k+24|0;y=k+20|0;z=k+16|0;A=k+12|0;B=k+8|0;C=k+4|0;D=k;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[w>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}c[x>>2]=d[c[w>>2]>>0];s=c[x>>2]|0;a:do{if((c[x>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}c[y>>2]=jx(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[w>>2]|0)+1|0,c[x>>2]|0)|0;if(Pw(c[y>>2]|0)|0){c[m>>2]=c[y>>2];E=c[m>>2]|0;l=k;return E|0;}}else{j=c[x>>2]|0;if(s>>>0>=242){c[y>>2]=c[7392+(j-242<<2)>>2];oE(c[n>>2]|0,1,c[o>>2]|0)|0;c[x>>2]=0;break;}c[y>>2]=j-127;c[x>>2]=(((c[y>>2]|0)+1|0)>>>0)/2|0;if(((c[x>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}if((c[y>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[w>>2]=(c[w>>2]|0)+1;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[z>>2]|0)>>0]=(d[(c[w>>2]|0)+(((c[z>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[z>>2]|0)+1)>>0]=(d[(c[w>>2]|0)+(((c[z>>2]|0)>>>0)/2|0)>>0]|0)&15;c[z>>2]=(c[z>>2]|0)+2;}}}while(0);w=c[p>>2]|0;o=w+68|0;do{c[w>>2]=0;w=w+4|0;}while((w|0)<(o|0));c[u>>2]=0;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0|0)>=16){F=20;break;}w=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)<<2)|0;c[w>>2]=(c[w>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)>>1);c[z>>2]=(c[z>>2]|0)+1;}if((F|0)==20){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[v>>2]=(Kw(c[u>>2]|0)|0)+1;if((c[v>>2]|0)>>>0>16){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[A>>2]=1<<c[v>>2];c[B>>2]=(c[A>>2]|0)-(c[u>>2]|0);c[C>>2]=1<<(Kw(c[B>>2]|0)|0);c[D>>2]=(Kw(c[B>>2]|0)|0)+1;if((c[C>>2]|0)!=(c[B>>2]|0)){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=c[D>>2];n=(c[p>>2]|0)+(c[D>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[y>>2]|0)+1;c[c[r>>2]>>2]=c[v>>2];c[m>>2]=(c[x>>2]|0)+1;E=c[m>>2]|0;l=k;return E|0;}c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}function fx(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+160|0;o=n+140|0;p=n+136|0;q=n+132|0;r=n+128|0;s=n+124|0;t=n+120|0;u=n+116|0;v=n+112|0;w=n;x=n+108|0;y=n+104|0;z=n+100|0;A=n+148|0;B=n+96|0;C=n+92|0;D=n+88|0;E=n+84|0;F=n+80|0;G=n+76|0;H=n+72|0;I=n+68|0;J=n+144|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+68|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];gx((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*68|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{c[I>>2]=(c[D>>2]|0)+(c[E>>2]|0);hx(J,b[A>>1]|0);a[J+2>>0]=c[C>>2];a[J+3>>0]=1;c[H>>2]=c[D>>2];while(1){if((c[H>>2]|0)>>>0>=(c[I>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[H>>2]<<2)|0;b[m>>1]=b[J>>1]|0;b[m+2>>1]=b[J+2>>1]|0;c[H>>2]=(c[H>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function gx(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+160|0;q=p+136|0;r=p+132|0;s=p+128|0;t=p+124|0;u=p+120|0;v=p+116|0;w=p+112|0;x=p+108|0;y=p+144|0;z=p+140|0;A=p;B=p+104|0;C=p+100|0;D=p+96|0;E=p+92|0;F=p+88|0;G=p+84|0;H=p+80|0;I=p+76|0;J=p+72|0;K=p+68|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+68|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[D>>2]=c[A+(c[u>>2]<<2)>>2];hx(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[C>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[C>>2]=(c[C>>2]|0)+1;}}}while(0);c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[B>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[B>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);hx(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{C=c[q>>2]|0;D=c[J>>2]|0;c[J>>2]=D+1;u=C+(D<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[B>>2]=(c[B>>2]|0)+1;}l=p;return;}function hx(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(tr()|0)!=0;d=c[h>>2]|0;if(f){ix(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function ix(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=c[g>>2]|0;a[e>>0]=a[h>>0]|0;a[e+1>>0]=a[h+1>>0]|0;l=f;return;}function jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+16960|0;g=f+16948|0;h=f+16944|0;i=f+16940|0;j=f+16936|0;k=f+16932|0;m=f+16928|0;n=f+16924|0;o=f+16400|0;p=f;q=f+16920|0;r=f+16916|0;s=f+16912|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=c[m>>2];c[r>>2]=255;if((c[k>>2]|0)>>>0<2){c[g>>2]=-72;t=c[g>>2]|0;l=f;return t|0;}c[s>>2]=Ow(o,r,q,c[m>>2]|0,c[k>>2]|0)|0;m=(Pw(c[s>>2]|0)|0)!=0;j=c[s>>2]|0;if(m){c[g>>2]=j;t=c[g>>2]|0;l=f;return t|0;}if(j>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;t=c[g>>2]|0;l=f;return t|0;}c[n>>2]=(c[n>>2]|0)+(c[s>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[s>>2]|0);c[s>>2]=Qw(p,o,c[r>>2]|0,c[q>>2]|0)|0;if(Pw(c[s>>2]|0)|0){c[g>>2]=c[s>>2];t=c[g>>2]|0;l=f;return t|0;}else{c[g>>2]=kx(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,p)|0;t=c[g>>2]|0;l=f;return t|0;}return 0;}function kx(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;j=l;l=l+192|0;k=j+184|0;m=j+180|0;n=j+176|0;o=j+172|0;p=j+168|0;q=j+164|0;r=j+160|0;s=j+156|0;t=j+152|0;u=j+148|0;v=j+144|0;w=j+128|0;x=j+120|0;y=j+112|0;z=j+108|0;A=j+104|0;B=j+100|0;C=j+96|0;D=j+92|0;E=j+88|0;F=j+84|0;G=j+80|0;H=j+76|0;I=j+72|0;J=j+68|0;K=j+64|0;L=j+48|0;M=j+40|0;N=j+32|0;O=j+28|0;P=j+24|0;Q=j+20|0;R=j+16|0;S=j+12|0;T=j+8|0;U=j+4|0;V=j+188|0;W=j;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=i;i=c[U>>2]|0;b[V>>1]=b[i>>1]|0;b[V+2>>1]=b[i+2>>1]|0;c[W>>2]=e[V+2>>1];V=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;T=c[U>>2]|0;if(c[W>>2]|0){c[B>>2]=V;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=T;c[G>>2]=1;c[H>>2]=c[B>>2];c[I>>2]=c[H>>2];c[J>>2]=(c[I>>2]|0)+(c[C>>2]|0);c[K>>2]=(c[J>>2]|0)+-3;c[O>>2]=tw(L,c[D>>2]|0,c[E>>2]|0)|0;do{if(!(Pw(c[O>>2]|0)|0)){uw(M,L,c[F>>2]|0);uw(N,L,c[F>>2]|0);while(1){if(vw(L)|0)break;if((c[I>>2]|0)>>>0>=(c[K>>2]|0)>>>0)break;if(c[G>>2]|0)X=(lx(M,L)|0)&255;else X=(Cw(M,L)|0)&255;a[c[I>>2]>>0]=X;if(c[G>>2]|0)Y=(lx(N,L)|0)&255;else Y=(Cw(N,L)|0)&255;a[(c[I>>2]|0)+1>>0]=Y;if((vw(L)|0)>>>0>0){Z=14;break;}if(c[G>>2]|0)_=(lx(M,L)|0)&255;else _=(Cw(M,L)|0)&255;a[(c[I>>2]|0)+2>>0]=_;if(c[G>>2]|0)$=(lx(N,L)|0)&255;else $=(Cw(N,L)|0)&255;a[(c[I>>2]|0)+3>>0]=$;c[I>>2]=(c[I>>2]|0)+4;}if((Z|0)==14)c[I>>2]=(c[I>>2]|0)+2;while(1){if((vw(L)|0)>>>0>2)break;if((c[I>>2]|0)==(c[J>>2]|0))break;if(yw(L)|0){if(c[G>>2]|0)break;if(mx(M)|0)break;}if(c[G>>2]|0)aa=(lx(M,L)|0)&255;else aa=(Cw(M,L)|0)&255;E=c[I>>2]|0;c[I>>2]=E+1;a[E>>0]=aa;if((vw(L)|0)>>>0>2)break;if((c[I>>2]|0)==(c[J>>2]|0))break;if(yw(L)|0){if(c[G>>2]|0)break;if(mx(N)|0)break;}if(c[G>>2]|0)ba=(lx(N,L)|0)&255;else ba=(Cw(N,L)|0)&255;E=c[I>>2]|0;c[I>>2]=E+1;a[E>>0]=ba;}if((yw(L)|0?mx(M)|0:0)?mx(N)|0:0){c[A>>2]=(c[I>>2]|0)-(c[H>>2]|0);break;}if((c[I>>2]|0)==(c[J>>2]|0)){c[A>>2]=-70;break;}else{c[A>>2]=-20;break;}}else c[A>>2]=c[O>>2];}while(0);c[P>>2]=c[A>>2];ca=c[P>>2]|0;l=j;return ca|0;}else{c[m>>2]=V;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=T;c[r>>2]=0;c[s>>2]=c[m>>2];c[t>>2]=c[s>>2];c[u>>2]=(c[t>>2]|0)+(c[n>>2]|0);c[v>>2]=(c[u>>2]|0)+-3;c[z>>2]=tw(w,c[o>>2]|0,c[p>>2]|0)|0;do{if(!(Pw(c[z>>2]|0)|0)){uw(x,w,c[q>>2]|0);uw(y,w,c[q>>2]|0);while(1){if(vw(w)|0)break;if((c[t>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;if(c[r>>2]|0)da=(lx(x,w)|0)&255;else da=(Cw(x,w)|0)&255;a[c[t>>2]>>0]=da;if(c[r>>2]|0)ea=(lx(y,w)|0)&255;else ea=(Cw(y,w)|0)&255;a[(c[t>>2]|0)+1>>0]=ea;if((vw(w)|0)>>>0>0){Z=60;break;}if(c[r>>2]|0)fa=(lx(x,w)|0)&255;else fa=(Cw(x,w)|0)&255;a[(c[t>>2]|0)+2>>0]=fa;if(c[r>>2]|0)ga=(lx(y,w)|0)&255;else ga=(Cw(y,w)|0)&255;a[(c[t>>2]|0)+3>>0]=ga;c[t>>2]=(c[t>>2]|0)+4;}if((Z|0)==60)c[t>>2]=(c[t>>2]|0)+2;while(1){if((vw(w)|0)>>>0>2)break;if((c[t>>2]|0)==(c[u>>2]|0))break;if(yw(w)|0){if(c[r>>2]|0)break;if(mx(x)|0)break;}if(c[r>>2]|0)ha=(lx(x,w)|0)&255;else ha=(Cw(x,w)|0)&255;p=c[t>>2]|0;c[t>>2]=p+1;a[p>>0]=ha;if((vw(w)|0)>>>0>2)break;if((c[t>>2]|0)==(c[u>>2]|0))break;if(yw(w)|0){if(c[r>>2]|0)break;if(mx(y)|0)break;}if(c[r>>2]|0)ia=(lx(y,w)|0)&255;else ia=(Cw(y,w)|0)&255;p=c[t>>2]|0;c[t>>2]=p+1;a[p>>0]=ia;}if((yw(w)|0?mx(x)|0:0)?mx(y)|0:0){c[k>>2]=(c[t>>2]|0)-(c[s>>2]|0);break;}if((c[t>>2]|0)==(c[u>>2]|0)){c[k>>2]=-70;break;}else{c[k>>2]=-20;break;}}else c[k>>2]=c[z>>2];}while(0);c[P>>2]=c[k>>2];ca=c[P>>2]|0;l=j;return ca|0;}return 0;}function lx(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=nx(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function mx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[c[d>>2]>>2]|0)==0|0;}function nx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=dx(c[e>>2]|0,c[f>>2]|0)|0;Gw(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function ox(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;i=l;l=l+400|0;j=i+392|0;k=i+388|0;m=i+384|0;n=i+380|0;o=i+80|0;p=i;q=i+376|0;r=i+372|0;s=i+368|0;t=i+364|0;u=i+360|0;v=i+356|0;w=i+352|0;x=i+348|0;y=i+344|0;z=i+340|0;A=i+336|0;B=i+396|0;c[k>>2]=f;c[m>>2]=g;c[n>>2]=h;c[q>>2]=0;c[s>>2]=0;c[v>>2]=(c[k>>2]|0)+2;c[w>>2]=c[v>>2];c[r>>2]=ex(o,256,p,s,q,c[m>>2]|0,c[n>>2]|0)|0;if(Ww(c[r>>2]|0)|0){c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}if((c[q>>2]|0)>>>0>(e[c[k>>2]>>1]|0)>>>0){c[j>>2]=-44;C=c[j>>2]|0;l=i;return C|0;}b[c[k>>2]>>1]=c[q>>2];c[u>>2]=0;c[t>>2]=1;while(1){if((c[t>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;c[x>>2]=c[u>>2];c[u>>2]=(c[u>>2]|0)+(c[p+(c[t>>2]<<2)>>2]<<(c[t>>2]|0)-1);c[p+(c[t>>2]<<2)>>2]=c[x>>2];c[t>>2]=(c[t>>2]|0)+1;}c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[y>>2]=d[o+(c[t>>2]|0)>>0];c[z>>2]=1<<c[y>>2]>>1;a[B>>0]=c[t>>2];a[B+1>>0]=(c[q>>2]|0)+1-(c[y>>2]|0);c[A>>2]=c[p+(c[y>>2]<<2)>>2];while(1){if((c[A>>2]|0)>>>0>=((c[p+(c[y>>2]<<2)>>2]|0)+(c[z>>2]|0)|0)>>>0)break;x=(c[w>>2]|0)+(c[A>>2]<<1)|0;a[x>>0]=a[B>>0]|0;a[x+1>>0]=a[B+1>>0]|0;c[A>>2]=(c[A>>2]|0)+1;}x=p+(c[y>>2]<<2)|0;c[x>>2]=(c[x>>2]|0)+(c[z>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}function px(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;i=l;l=l+192|0;j=i+184|0;k=i+180|0;m=i+176|0;n=i+172|0;o=i+168|0;p=i+164|0;q=i+160|0;r=i+156|0;s=i+152|0;t=i+148|0;u=i+144|0;v=i+140|0;w=i+136|0;x=i+120|0;y=i+104|0;z=i+88|0;A=i+72|0;B=i+64|0;C=i+60|0;D=i+56|0;E=i+52|0;F=i+48|0;G=i+44|0;H=i+40|0;I=i+36|0;J=i+32|0;K=i+28|0;L=i+24|0;M=i+20|0;N=i+16|0;O=i+12|0;P=i+8|0;Q=i+4|0;R=i;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if((c[o>>2]|0)>>>0<10){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[q>>2]=c[n>>2];c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[p>>2];c[u>>2]=(c[t>>2]|0)+2;c[v>>2]=e[c[p>>2]>>1];c[B>>2]=(Lw(c[q>>2]|0)|0)&65535;c[C>>2]=(Lw((c[q>>2]|0)+2|0)|0)&65535;c[D>>2]=(Lw((c[q>>2]|0)+4|0)|0)&65535;c[F>>2]=(c[q>>2]|0)+6;c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(c[G>>2]|0)+(c[C>>2]|0);c[I>>2]=(c[H>>2]|0)+(c[D>>2]|0);c[J>>2]=(((c[m>>2]|0)+3|0)>>>0)/4|0;c[K>>2]=(c[r>>2]|0)+(c[J>>2]|0);c[L>>2]=(c[K>>2]|0)+(c[J>>2]|0);c[M>>2]=(c[L>>2]|0)+(c[J>>2]|0);c[N>>2]=c[r>>2];c[O>>2]=c[K>>2];c[P>>2]=c[L>>2];c[Q>>2]=c[M>>2];c[E>>2]=(c[o>>2]|0)-((c[B>>2]|0)+(c[C>>2]|0)+(c[D>>2]|0)+6);if((c[E>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=tw(x,c[F>>2]|0,c[B>>2]|0)|0;if(Ww(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=tw(y,c[G>>2]|0,c[C>>2]|0)|0;if(Ww(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=tw(z,c[H>>2]|0,c[D>>2]|0)|0;if(Ww(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=tw(A,c[I>>2]|0,c[E>>2]|0)|0;if(Ww(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}w=vw(x)|0;E=w|(vw(y)|0);w=E|(vw(z)|0);c[R>>2]=w|(vw(A)|0);while(1){if(c[R>>2]|0)break;if((c[Q>>2]|0)>>>0>=((c[s>>2]|0)+-7|0)>>>0)break;if($w()|0){w=qx(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}$w()|0;w=qx(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;$w()|0;w=qx(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;$w()|0;w=qx(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;$w()|0;w=qx(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;if($w()|0){w=qx(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}w=qx(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;w=qx(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;w=qx(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;w=qx(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;w=vw(x)|0;E=w|(vw(y)|0);w=E|(vw(z)|0);c[R>>2]=w|(vw(A)|0);}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[O>>2]|0)>>>0>(c[L>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[P>>2]|0)>>>0>(c[M>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}rx(c[N>>2]|0,x,c[K>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;rx(c[O>>2]|0,y,c[L>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;rx(c[P>>2]|0,z,c[M>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;rx(c[Q>>2]|0,A,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;v=yw(x)|0;x=v&(yw(y)|0);y=x&(yw(z)|0);c[R>>2]=y&(yw(A)|0);if(c[R>>2]|0){c[j>>2]=c[m>>2];S=c[j>>2]|0;l=i;return S|0;}else{c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}return 0;}function qx(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+16|0;c[h>>2]=b;c[i>>2]=e;c[j>>2]=f;c[k>>2]=dx(c[h>>2]|0,c[j>>2]|0)|0;a[m>>0]=a[(c[i>>2]|0)+(c[k>>2]<<1)>>0]|0;Gw(c[h>>2]|0,d[(c[i>>2]|0)+(c[k>>2]<<1)+1>>0]|0);l=g;return a[m>>0]|0;}function rx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[i>>2];while(1){if(vw(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>((c[k>>2]|0)+-4|0)>>>0)break;if($w()|0){g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}$w()|0;g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;if($w()|0){g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if(vw(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}l=h;return(c[k>>2]|0)-(c[o>>2]|0)|0;}function sx(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;if((c[j>>2]|0)>>>0<5){c[g>>2]=5;m=c[g>>2]|0;l=f;return m|0;}c[k>>2]=pr(c[i>>2]|0)|0;if((c[k>>2]|0)!=-47205084){c[g>>2]=-10;m=c[g>>2]|0;l=f;return m|0;}k=c[h>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;c[(c[h>>2]|0)+8>>2]=((d[(c[i>>2]|0)+4>>0]|0)&15)+11;if((d[(c[i>>2]|0)+4>>0]|0)>>4|0){c[g>>2]=-14;m=c[g>>2]|0;l=f;return m|0;}else{c[g>>2]=0;m=c[g>>2]|0;l=f;return m|0;}return 0;}function tx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;f=Zr(c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,0,0)|0;l=g;return f|0;}function ux(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[n>>2]=Wp()|0;if(!(c[n>>2]|0)){c[g>>2]=-64;o=c[g>>2]|0;l=f;return o|0;}else{c[m>>2]=tx(c[n>>2]|0,c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;Xp(c[n>>2]|0)|0;c[g>>2]=c[m>>2];o=c[g>>2]|0;l=f;return o|0;}return 0;}function vx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+28744>>2]|0;}function wx(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;switch(c[(c[e>>2]|0)+28804>>2]|0){case 6:case 7:{c[d>>2]=5;break;}case 2:{c[d>>2]=1;break;}case 3:{c[d>>2]=2;break;}case 4:{c[d>>2]=3;break;}case 5:{c[d>>2]=4;break;}default:c[d>>2]=0;}l=b;return c[d>>2]|0;}function xx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=l;l=l+64|0;h=g+52|0;i=g+48|0;j=g+44|0;k=g+40|0;m=g+36|0;n=g+32|0;o=g+28|0;p=g+16|0;q=g+12|0;r=g+8|0;s=g+4|0;t=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[n>>2]|0)!=(c[(c[i>>2]|0)+28744>>2]|0)){c[h>>2]=-72;u=c[h>>2]|0;l=g;return u|0;}if(c[k>>2]|0)Br(c[i>>2]|0,c[j>>2]|0);switch(c[(c[i>>2]|0)+28804>>2]|0){case 0:{if((c[(c[i>>2]|0)+28912>>2]|0)==0?((hq(c[m>>2]|0)|0)&-16|0)==407710288:0){mE((c[i>>2]|0)+160092|0,c[m>>2]|0,c[n>>2]|0)|0;c[(c[i>>2]|0)+28744>>2]=8-(c[n>>2]|0);c[(c[i>>2]|0)+28804>>2]=6;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}f=nq(c[m>>2]|0,c[n>>2]|0,c[(c[i>>2]|0)+28912>>2]|0)|0;c[(c[i>>2]|0)+28904>>2]=f;f=($q(c[(c[i>>2]|0)+28904>>2]|0)|0)!=0;e=c[i>>2]|0;if(f){c[h>>2]=c[e+28904>>2];u=c[h>>2]|0;l=g;return u|0;}else{mE(e+160092|0,c[m>>2]|0,c[n>>2]|0)|0;c[(c[i>>2]|0)+28744>>2]=(c[(c[i>>2]|0)+28904>>2]|0)-(c[n>>2]|0);c[(c[i>>2]|0)+28804>>2]=1;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}break;}case 1:{mE((c[i>>2]|0)+160092+((c[(c[i>>2]|0)+28904>>2]|0)-(c[n>>2]|0))|0,c[m>>2]|0,c[n>>2]|0)|0;c[o>>2]=fs(c[i>>2]|0,(c[i>>2]|0)+160092|0,c[(c[i>>2]|0)+28904>>2]|0)|0;if($q(c[o>>2]|0)|0){c[h>>2]=c[o>>2];u=c[h>>2]|0;l=g;return u|0;}else{c[(c[i>>2]|0)+28744>>2]=3;c[(c[i>>2]|0)+28804>>2]=2;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}break;}case 2:{c[q>>2]=br(c[m>>2]|0,3,p)|0;o=($q(c[q>>2]|0)|0)!=0;e=c[q>>2]|0;if(o){c[h>>2]=e;u=c[h>>2]|0;l=g;return u|0;}c[(c[i>>2]|0)+28744>>2]=e;c[(c[i>>2]|0)+28800>>2]=c[p>>2];c[(c[i>>2]|0)+28936>>2]=c[p+8>>2];e=(c[p+4>>2]|0)!=0;if(c[q>>2]|0){c[(c[i>>2]|0)+28804>>2]=e?4:3;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}q=c[i>>2]|0;do{if(e){p=(c[i>>2]|0)+28744|0;if(c[q+28752+32>>2]|0){c[p>>2]=4;c[(c[i>>2]|0)+28804>>2]=5;break;}else{c[p>>2]=0;c[(c[i>>2]|0)+28804>>2]=0;break;}}else{c[q+28744>>2]=3;c[(c[i>>2]|0)+28804>>2]=2;}}while(0);c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}case 3:case 4:{switch(c[(c[i>>2]|0)+28800>>2]|0){case 2:{c[r>>2]=Cr(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,1)|0;break;}case 0:{c[r>>2]=gs(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;break;}case 1:{c[r>>2]=yx(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[(c[i>>2]|0)+28936>>2]|0)|0;break;}default:{c[h>>2]=-20;u=c[h>>2]|0;l=g;return u|0;}}k=($q(c[r>>2]|0)|0)!=0;q=c[r>>2]|0;if(k){c[h>>2]=q;u=c[h>>2]|0;l=g;return u|0;}k=(c[i>>2]|0)+28792|0;e=k;p=k;c[p>>2]=dE(c[e>>2]|0,c[e+4>>2]|0,q|0,0)|0;c[p+4>>2]=y;if(c[(c[i>>2]|0)+28752+32>>2]|0)Nh((c[i>>2]|0)+28816|0,c[j>>2]|0,c[r>>2]|0)|0;p=c[i>>2]|0;do{if((c[(c[i>>2]|0)+28804>>2]|0)==4){q=p+28752|0;if(((c[q>>2]|0)!=-1?1:(c[q+4>>2]|0)!=-1)?(q=(c[i>>2]|0)+28792|0,e=(c[i>>2]|0)+28752|0,(c[q>>2]|0)!=(c[e>>2]|0)?1:(c[q+4>>2]|0)!=(c[e+4>>2]|0)):0){c[h>>2]=-20;u=c[h>>2]|0;l=g;return u|0;}e=(c[i>>2]|0)+28744|0;if(c[(c[i>>2]|0)+28752+32>>2]|0){c[e>>2]=4;c[(c[i>>2]|0)+28804>>2]=5;break;}else{c[e>>2]=0;c[(c[i>>2]|0)+28804>>2]=0;break;}}else{c[p+28804>>2]=2;c[(c[i>>2]|0)+28744>>2]=3;c[(c[i>>2]|0)+28728>>2]=(c[j>>2]|0)+(c[r>>2]|0);}}while(0);c[h>>2]=c[r>>2];u=c[h>>2]|0;l=g;return u|0;}case 5:{c[s>>2]=Oh((c[i>>2]|0)+28816|0)|0;c[t>>2]=hq(c[m>>2]|0)|0;if((c[t>>2]|0)!=(c[s>>2]|0)){c[h>>2]=-22;u=c[h>>2]|0;l=g;return u|0;}else{c[(c[i>>2]|0)+28744>>2]=0;c[(c[i>>2]|0)+28804>>2]=0;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}break;}case 6:{mE((c[i>>2]|0)+160092+(8-(c[n>>2]|0))|0,c[m>>2]|0,c[n>>2]|0)|0;n=hq((c[i>>2]|0)+160092+4|0)|0;c[(c[i>>2]|0)+28744>>2]=n;c[(c[i>>2]|0)+28804>>2]=7;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}case 7:{c[(c[i>>2]|0)+28744>>2]=0;c[(c[i>>2]|0)+28804>>2]=0;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}default:{c[h>>2]=-1;u=c[h>>2]|0;l=g;return u|0;}}return 0;}function yx(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[n>>2]|0)!=1){c[i>>2]=-72;p=c[i>>2]|0;l=h;return p|0;}if((c[o>>2]|0)>>>0>(c[k>>2]|0)>>>0){c[i>>2]=-70;p=c[i>>2]|0;l=h;return p|0;}else{oE(c[j>>2]|0,(d[c[m>>2]>>0]|0)&255|0,c[o>>2]|0)|0;c[i>>2]=c[o>>2];p=c[i>>2]|0;l=h;return p|0;}return 0;}function zx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+48|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;if(((c[f>>2]|0)!=0^1)&1^((c[f+4>>2]|0)!=0^1)&1|0){c[i>>2]=0;p=c[i>>2]|0;l=g;return p|0;};c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[o>>2]=Rh(28744,h)|0;if(!(c[o>>2]|0)){c[i>>2]=0;p=c[i>>2]|0;l=g;return p|0;}h=(c[o>>2]|0)+28732|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];f=($q(Ax(c[o>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0)|0)!=0;n=c[o>>2]|0;if(f){Yp(n)|0;c[i>>2]=0;p=c[i>>2]|0;l=g;return p|0;}else{c[i>>2]=n;p=c[i>>2]|0;l=g;return p|0;}return 0;}function Ax(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+48|0;h=g+32|0;i=g+28|0;j=g+24|0;k=g+20|0;m=g+16|0;n=g+12|0;o=g+8|0;p=g+4|0;q=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;do{if((c[n>>2]|0)!=1&(c[k>>2]|0)!=0&(c[m>>2]|0)!=0){f=c[m>>2]|0;e=(c[j>>2]|0)+28732|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[p>>2]=Rh(f,h)|0;c[c[j>>2]>>2]=c[p>>2];c[(c[j>>2]|0)+4>>2]=c[p>>2];if(c[p>>2]|0){mE(c[p>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;break;}c[i>>2]=-64;r=c[i>>2]|0;l=g;return r|0;}else{c[c[j>>2]>>2]=0;c[(c[j>>2]|0)+4>>2]=c[k>>2];}}while(0);c[(c[j>>2]|0)+8>>2]=c[m>>2];c[(c[j>>2]|0)+12+10264>>2]=201326604;c[q>>2]=Bx(c[j>>2]|0,c[o>>2]|0)|0;if($q(c[q>>2]|0)|0){c[i>>2]=c[q>>2];r=c[i>>2]|0;l=g;return r|0;}else{c[i>>2]=0;r=c[i>>2]|0;l=g;return r|0;}return 0;}function Bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[f>>2]=a;c[g>>2]=b;c[(c[f>>2]|0)+28724>>2]=0;c[(c[f>>2]|0)+28728>>2]=0;do{if((c[g>>2]|0)!=1){if((c[(c[f>>2]|0)+8>>2]|0)>>>0<8)if((c[g>>2]|0)==2){c[e>>2]=-30;break;}else{c[e>>2]=0;break;}c[h>>2]=hq(c[(c[f>>2]|0)+4>>2]|0)|0;if((c[h>>2]|0)!=-332356553){if((c[g>>2]|0)==2){c[e>>2]=-30;break;}else{c[e>>2]=0;break;}}else{b=hq((c[(c[f>>2]|0)+4>>2]|0)+4|0)|0;c[(c[f>>2]|0)+28724>>2]=b;c[i>>2]=ls((c[f>>2]|0)+12|0,c[(c[f>>2]|0)+4>>2]|0,c[(c[f>>2]|0)+8>>2]|0)|0;if($q(c[i>>2]|0)|0){c[e>>2]=-30;break;}else{c[(c[f>>2]|0)+28728>>2]=1;c[e>>2]=0;break;}}}else c[e>>2]=0;}while(0);l=d;return c[e>>2]|0;}function Cx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;c[g>>2]=b;b=c[f>>2]|0;f=c[g>>2]|0;c[e>>2]=c[5415];c[e+4>>2]=c[5416];c[e+8>>2]=c[5417];g=zx(b,f,0,0,e)|0;l=d;return g|0;}function Dx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;g=_r(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,0,0,c[o>>2]|0)|0;l=h;return g|0;}function Ex(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[5412];c[b+4>>2]=c[5413];c[b+8>>2]=c[5414];d=Fx(b)|0;l=a;return d|0;}function Fx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];a=Vp(d)|0;l=b;return a|0;}function Gx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Xp(c[d>>2]|0)|0;l=b;return a|0;}function Hx(){return 131075;}function Ix(){return 131072;}function Jx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+48|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;if(c[(c[j>>2]|0)+28956>>2]|0){c[i>>2]=-60;p=c[i>>2]|0;l=g;return p|0;}Yp(c[(c[j>>2]|0)+28948>>2]|0)|0;if((c[k>>2]|0)!=0&(c[m>>2]|0)>>>0>=8){f=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=(c[j>>2]|0)+28920|0;c[h>>2]=c[o>>2];c[h+4>>2]=c[o+4>>2];c[h+8>>2]=c[o+8>>2];o=zx(f,k,m,n,h)|0;c[(c[j>>2]|0)+28948>>2]=o;if(!(c[(c[j>>2]|0)+28948>>2]|0)){c[i>>2]=-64;p=c[i>>2]|0;l=g;return p|0;}}else c[(c[j>>2]|0)+28948>>2]=0;c[(c[j>>2]|0)+28952>>2]=c[(c[j>>2]|0)+28948>>2];c[i>>2]=0;p=c[i>>2]|0;l=g;return p|0;}function Kx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=Jx(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,0,0)|0;l=e;return d|0;}function Lx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[(c[g>>2]|0)+28956>>2]=0;c[j>>2]=Kx(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;if($q(c[j>>2]|0)|0){c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}else{c[f>>2]=5;k=c[f>>2]|0;l=e;return k|0;}return 0;}function Mx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Lx(c[d>>2]|0,0,0)|0;l=b;return a|0;}function Nx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Mx(c[e>>2]|0)|0;c[(c[e>>2]|0)+28952>>2]=c[f>>2];l=d;return c[g>>2]|0;}function Ox(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+28956>>2]=1;c[(c[d>>2]|0)+28988>>2]=0;c[(c[d>>2]|0)+28984>>2]=0;c[(c[d>>2]|0)+28968>>2]=0;c[(c[d>>2]|0)+28992>>2]=0;c[(c[d>>2]|0)+29004>>2]=0;c[(c[d>>2]|0)+29008>>2]=0;l=b;return 5;}function Px(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+48|0;g=f+40|0;h=f+24|0;i=f+16|0;j=f+36|0;k=f+8|0;m=f;n=f+32|0;o=h;c[o>>2]=a;c[o+4>>2]=b;b=i;c[b>>2]=d;c[b+4>>2]=e;e=h;b=c[e+4>>2]|0;d=b>>>0<0|(b|0)==0&(c[e>>2]|0)>>>0<131072;e=h;b=c[e+4>>2]|0;b=d?c[e>>2]|0:131072;c[j>>2]=b;b=h;h=dE(c[b>>2]|0,c[b+4>>2]|0,c[j>>2]|0,0)|0;j=dE(h|0,y|0,16,0)|0;h=k;c[h>>2]=j;c[h+4>>2]=y;h=i;j=c[h+4>>2]|0;b=k;e=c[b+4>>2]|0;d=j>>>0<e>>>0|((j|0)==(e|0)?(c[h>>2]|0)>>>0<(c[b>>2]|0)>>>0:0);b=i;i=k;k=d?c[b+4>>2]|0:c[i+4>>2]|0;h=m;c[h>>2]=d?c[b>>2]|0:c[i>>2]|0;c[h+4>>2]=k;c[n>>2]=c[m>>2];k=m;if(0!=(c[k+4>>2]|0)?1:(c[n>>2]|0)!=(c[k>>2]|0)){c[g>>2]=-16;p=c[g>>2]|0;l=f;return p|0;}else{c[g>>2]=c[n>>2];p=c[g>>2]|0;l=f;return p|0;}return 0;}function Qx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;e=l;l=l+176|0;f=e+152|0;g=e+148|0;h=e+144|0;i=e+140|0;j=e+136|0;k=e+132|0;m=e+128|0;n=e+124|0;o=e+120|0;p=e+116|0;q=e+112|0;r=e+108|0;s=e+104|0;t=e+100|0;u=e+96|0;v=e+92|0;w=e+88|0;x=e+84|0;y=e+80|0;z=e+76|0;A=e+72|0;B=e+68|0;C=e+64|0;D=e+60|0;E=e+56|0;F=e+52|0;G=e+48|0;H=e+44|0;I=e+40|0;J=e+36|0;K=e+32|0;L=e+28|0;M=e+24|0;N=e+20|0;O=e+16|0;P=e+12|0;Q=e+8|0;R=e+4|0;S=e;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[m>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0);c[n>>2]=c[k>>2];c[o>>2]=(c[c[i>>2]>>2]|0)+(c[(c[i>>2]|0)+8>>2]|0);c[p>>2]=(c[c[i>>2]>>2]|0)+(c[(c[i>>2]|0)+4>>2]|0);c[q>>2]=c[o>>2];c[r>>2]=1;if((c[(c[j>>2]|0)+8>>2]|0)>>>0>(c[(c[j>>2]|0)+4>>2]|0)>>>0){c[g>>2]=-72;T=c[g>>2]|0;l=e;return T|0;}if((c[(c[i>>2]|0)+8>>2]|0)>>>0>(c[(c[i>>2]|0)+4>>2]|0)>>>0){c[g>>2]=-70;T=c[g>>2]|0;l=e;return T|0;}a:while(1){if(!(c[r>>2]|0)){U=98;break;}switch(c[(c[h>>2]|0)+28956>>2]|0){case 0:{Ox(c[h>>2]|0)|0;U=9;break;}case 1:{U=9;break;}case 2:{U=64;break;}case 3:{U=76;break;}case 4:{U=91;break;}default:{U=96;break a;}}do{if((U|0)==9){U=0;V=c[h>>2]|0;if(c[(c[h>>2]|0)+29004>>2]|0){U=10;break a;}c[t>>2]=qq(V+28752|0,(c[h>>2]|0)+160092|0,c[(c[h>>2]|0)+28992>>2]|0,c[(c[h>>2]|0)+28912>>2]|0)|0;if($q(c[t>>2]|0)|0){U=16;break a;}if(c[t>>2]|0){c[z>>2]=(c[t>>2]|0)-(c[(c[h>>2]|0)+28992>>2]|0);c[A>>2]=(c[m>>2]|0)-(c[n>>2]|0);if((c[z>>2]|0)>>>0>(c[A>>2]|0)>>>0){U=31;break a;}mE((c[h>>2]|0)+160092+(c[(c[h>>2]|0)+28992>>2]|0)|0,c[n>>2]|0,c[z>>2]|0)|0;c[(c[h>>2]|0)+28992>>2]=c[t>>2];c[n>>2]=(c[n>>2]|0)+(c[z>>2]|0);break;}d=(c[h>>2]|0)+28752|0;if((((c[d>>2]|0)!=0|(c[d+4>>2]|0)!=0?(d=(c[h>>2]|0)+28752+8|0,(c[d>>2]|0)!=0|(c[d+4>>2]|0)!=0):0)?(d=(c[h>>2]|0)+28752|0,b=c[d+4>>2]|0,0>b>>>0|(0==(b|0)?((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0>=(c[d>>2]|0)>>>0:0)):0)?(c[B>>2]=_q(c[k>>2]|0,(c[m>>2]|0)-(c[k>>2]|0)|0)|0,(c[B>>2]|0)>>>0<=((c[m>>2]|0)-(c[k>>2]|0)|0)>>>0):0){c[C>>2]=Dx(c[h>>2]|0,c[q>>2]|0,(c[p>>2]|0)-(c[q>>2]|0)|0,c[k>>2]|0,c[B>>2]|0,c[(c[h>>2]|0)+28952>>2]|0)|0;if($q(c[C>>2]|0)|0){U=40;break a;}c[n>>2]=(c[k>>2]|0)+(c[B>>2]|0);c[q>>2]=(c[q>>2]|0)+(c[C>>2]|0);c[(c[h>>2]|0)+28744>>2]=0;c[(c[h>>2]|0)+28956>>2]=0;c[r>>2]=0;break;}c[D>>2]=cs(c[h>>2]|0,c[(c[h>>2]|0)+28952>>2]|0)|0;if($q(c[D>>2]|0)|0){U=43;break a;}d=((hq((c[h>>2]|0)+160092|0)|0)&-16|0)==407710288;b=c[h>>2]|0;if(d){d=hq(b+160092+4|0)|0;c[(c[h>>2]|0)+28744>>2]=d;c[(c[h>>2]|0)+28804>>2]=7;}else{c[E>>2]=fs(b,(c[h>>2]|0)+160092|0,c[(c[h>>2]|0)+28992>>2]|0)|0;if($q(c[E>>2]|0)|0){U=47;break a;}c[(c[h>>2]|0)+28744>>2]=3;c[(c[h>>2]|0)+28804>>2]=2;}b=(c[h>>2]|0)+28752+8|0;d=c[b+4>>2]|0;if(d>>>0>0|(d|0)==0&(c[b>>2]|0)>>>0>1024){b=(c[h>>2]|0)+28752+8|0;W=c[b>>2]|0;X=c[b+4>>2]|0;}else{W=1024;X=0;}b=(c[h>>2]|0)+28752+8|0;c[b>>2]=W;c[b+4>>2]=X;b=(c[h>>2]|0)+28752+8|0;d=c[b+4>>2]|0;if(d>>>0>0|((d|0)==0?(c[b>>2]|0)>>>0>(c[(c[h>>2]|0)+28972>>2]|0)>>>0:0)){U=52;break a;}if((c[(c[h>>2]|0)+28752+16>>2]|0)>>>0>4)Y=c[(c[h>>2]|0)+28752+16>>2]|0;else Y=4;c[F>>2]=Y;b=(c[h>>2]|0)+28752+8|0;d=(c[h>>2]|0)+28752|0;c[G>>2]=Px(c[b>>2]|0,c[b+4>>2]|0,c[d>>2]|0,c[d+4>>2]|0)|0;if(!((c[(c[h>>2]|0)+28964>>2]|0)>>>0>=(c[F>>2]|0)>>>0?(c[(c[h>>2]|0)+28980>>2]|0)>>>0>=(c[G>>2]|0)>>>0:0)){c[H>>2]=(c[F>>2]|0)+(c[G>>2]|0);if(c[(c[h>>2]|0)+28940>>2]|0){if((c[H>>2]|0)>>>0>((c[(c[h>>2]|0)+28940>>2]|0)-160112|0)>>>0){U=59;break a;}}else{d=c[(c[h>>2]|0)+28960>>2]|0;b=(c[h>>2]|0)+28920|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];Th(d,f);c[(c[h>>2]|0)+28964>>2]=0;c[(c[h>>2]|0)+28980>>2]=0;d=c[H>>2]|0;b=(c[h>>2]|0)+28920|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];b=Rh(d,f)|0;c[(c[h>>2]|0)+28960>>2]=b;if(!(c[(c[h>>2]|0)+28960>>2]|0)){U=61;break a;}}c[(c[h>>2]|0)+28964>>2]=c[F>>2];c[(c[h>>2]|0)+28976>>2]=(c[(c[h>>2]|0)+28960>>2]|0)+(c[(c[h>>2]|0)+28964>>2]|0);c[(c[h>>2]|0)+28980>>2]=c[G>>2];}c[(c[h>>2]|0)+28956>>2]=2;U=64;}}while(0);do{if((U|0)==64){U=0;c[I>>2]=vx(c[h>>2]|0)|0;if(!(c[I>>2]|0)){c[(c[h>>2]|0)+28956>>2]=0;c[r>>2]=0;break;}if(((c[m>>2]|0)-(c[n>>2]|0)|0)>>>0<(c[I>>2]|0)>>>0)if((c[n>>2]|0)==(c[m>>2]|0)){c[r>>2]=0;break;}else{c[(c[h>>2]|0)+28956>>2]=3;U=76;break;}c[J>>2]=Tx(c[h>>2]|0)|0;if(c[J>>2]|0)Z=0;else Z=(c[(c[h>>2]|0)+28980>>2]|0)-(c[(c[h>>2]|0)+28984>>2]|0)|0;c[K>>2]=xx(c[h>>2]|0,(c[(c[h>>2]|0)+28976>>2]|0)+(c[(c[h>>2]|0)+28984>>2]|0)|0,Z,c[n>>2]|0,c[I>>2]|0)|0;if($q(c[K>>2]|0)|0){U=70;break a;}c[n>>2]=(c[n>>2]|0)+(c[I>>2]|0);if((c[K>>2]|0)!=0|(c[J>>2]|0)!=0){c[(c[h>>2]|0)+28988>>2]=(c[(c[h>>2]|0)+28984>>2]|0)+(c[K>>2]|0);c[(c[h>>2]|0)+28956>>2]=4;}}}while(0);do{if((U|0)==76){U=0;c[L>>2]=vx(c[h>>2]|0)|0;c[M>>2]=(c[L>>2]|0)-(c[(c[h>>2]|0)+28968>>2]|0);c[N>>2]=Tx(c[h>>2]|0)|0;b=c[M>>2]|0;if(c[N>>2]|0){if(b>>>0<((c[m>>2]|0)-(c[n>>2]|0)|0)>>>0)_=c[M>>2]|0;else _=(c[m>>2]|0)-(c[n>>2]|0)|0;c[O>>2]=_;}else{if(b>>>0>((c[(c[h>>2]|0)+28964>>2]|0)-(c[(c[h>>2]|0)+28968>>2]|0)|0)>>>0){U=82;break a;}c[O>>2]=Ux((c[(c[h>>2]|0)+28960>>2]|0)+(c[(c[h>>2]|0)+28968>>2]|0)|0,c[M>>2]|0,c[n>>2]|0,(c[m>>2]|0)-(c[n>>2]|0)|0)|0;}c[n>>2]=(c[n>>2]|0)+(c[O>>2]|0);b=(c[h>>2]|0)+28968|0;c[b>>2]=(c[b>>2]|0)+(c[O>>2]|0);if((c[O>>2]|0)>>>0<(c[M>>2]|0)>>>0){c[r>>2]=0;break;}c[P>>2]=xx(c[h>>2]|0,(c[(c[h>>2]|0)+28976>>2]|0)+(c[(c[h>>2]|0)+28984>>2]|0)|0,(c[(c[h>>2]|0)+28980>>2]|0)-(c[(c[h>>2]|0)+28984>>2]|0)|0,c[(c[h>>2]|0)+28960>>2]|0,c[L>>2]|0)|0;if($q(c[P>>2]|0)|0){U=87;break a;}c[(c[h>>2]|0)+28968>>2]=0;b=c[h>>2]|0;if((c[P>>2]|0)!=0|(c[N>>2]|0)!=0){c[(c[h>>2]|0)+28988>>2]=(c[b+28984>>2]|0)+(c[P>>2]|0);c[(c[h>>2]|0)+28956>>2]=4;U=91;break;}else{c[b+28956>>2]=2;break;}}}while(0);do{if((U|0)==91){U=0;c[Q>>2]=(c[(c[h>>2]|0)+28988>>2]|0)-(c[(c[h>>2]|0)+28984>>2]|0);c[R>>2]=Ux(c[q>>2]|0,(c[p>>2]|0)-(c[q>>2]|0)|0,(c[(c[h>>2]|0)+28976>>2]|0)+(c[(c[h>>2]|0)+28984>>2]|0)|0,c[Q>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[R>>2]|0);b=(c[h>>2]|0)+28984|0;c[b>>2]=(c[b>>2]|0)+(c[R>>2]|0);if((c[R>>2]|0)!=(c[Q>>2]|0)){c[r>>2]=0;break;}c[(c[h>>2]|0)+28956>>2]=2;b=(c[h>>2]|0)+28752|0;d=c[b+4>>2]|0;if(0<d>>>0|(0==(d|0)?(c[(c[h>>2]|0)+28980>>2]|0)>>>0<(c[b>>2]|0)>>>0:0)?((c[(c[h>>2]|0)+28984>>2]|0)+(c[(c[h>>2]|0)+28752+16>>2]|0)|0)>>>0>(c[(c[h>>2]|0)+28980>>2]|0)>>>0:0){c[(c[h>>2]|0)+28988>>2]=0;c[(c[h>>2]|0)+28984>>2]=0;}}}while(0);}switch(U|0){case 10:{if(c[V+28940>>2]|0){c[g>>2]=-64;T=c[g>>2]|0;l=e;return T|0;}c[s>>2]=Rx(c[(c[h>>2]|0)+28996>>2]|0,c[(c[h>>2]|0)+29004>>2]|0,c[i>>2]|0,c[j>>2]|0)|0;if(!(c[s>>2]|0))c[(c[h>>2]|0)+28956>>2]=0;c[g>>2]=c[s>>2];T=c[g>>2]|0;l=e;return T|0;}case 16:{c[u>>2]=iq(c[k>>2]|0,(c[m>>2]|0)-(c[k>>2]|0)|0)|0;if(!(c[u>>2]|0)){c[g>>2]=c[t>>2];T=c[g>>2]|0;l=e;return T|0;}if(c[(c[h>>2]|0)+28952>>2]|0)$=c[(c[(c[h>>2]|0)+28952>>2]|0)+4>>2]|0;else $=0;c[v>>2]=$;if(c[(c[h>>2]|0)+28952>>2]|0)aa=c[(c[(c[h>>2]|0)+28952>>2]|0)+8>>2]|0;else aa=0;c[w>>2]=aa;if(c[(c[h>>2]|0)+28940>>2]|0){c[g>>2]=-64;T=c[g>>2]|0;l=e;return T|0;}c[x>>2]=Sx((c[h>>2]|0)+28996|0,c[(c[h>>2]|0)+29e3>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;if($q(c[x>>2]|0)|0){c[g>>2]=c[x>>2];T=c[g>>2]|0;l=e;return T|0;}x=c[u>>2]|0;c[(c[h>>2]|0)+29e3>>2]=x;c[(c[h>>2]|0)+29004>>2]=x;c[y>>2]=Rx(c[(c[h>>2]|0)+28996>>2]|0,c[u>>2]|0,c[i>>2]|0,c[j>>2]|0)|0;if(!(c[y>>2]|0))c[(c[h>>2]|0)+28956>>2]=0;c[g>>2]=c[y>>2];T=c[g>>2]|0;l=e;return T|0;}case 31:{if((c[A>>2]|0)>>>0>0){mE((c[h>>2]|0)+160092+(c[(c[h>>2]|0)+28992>>2]|0)|0,c[n>>2]|0,c[A>>2]|0)|0;y=(c[h>>2]|0)+28992|0;c[y>>2]=(c[y>>2]|0)+(c[A>>2]|0);}c[(c[j>>2]|0)+8>>2]=c[(c[j>>2]|0)+4>>2];c[g>>2]=(6>(c[t>>2]|0)>>>0?6:c[t>>2]|0)-(c[(c[h>>2]|0)+28992>>2]|0)+3;T=c[g>>2]|0;l=e;return T|0;}case 40:{c[g>>2]=c[C>>2];T=c[g>>2]|0;l=e;return T|0;}case 43:{c[g>>2]=c[D>>2];T=c[g>>2]|0;l=e;return T|0;}case 47:{c[g>>2]=c[E>>2];T=c[g>>2]|0;l=e;return T|0;}case 52:{c[g>>2]=-16;T=c[g>>2]|0;l=e;return T|0;}case 59:{c[g>>2]=-64;T=c[g>>2]|0;l=e;return T|0;}case 61:{c[g>>2]=-64;T=c[g>>2]|0;l=e;return T|0;}case 70:{c[g>>2]=c[K>>2];T=c[g>>2]|0;l=e;return T|0;}case 82:{c[g>>2]=-20;T=c[g>>2]|0;l=e;return T|0;}case 87:{c[g>>2]=c[P>>2];T=c[g>>2]|0;l=e;return T|0;}case 96:{c[g>>2]=-1;T=c[g>>2]|0;l=e;return T|0;}case 98:{P=(c[j>>2]|0)+8|0;c[P>>2]=(c[P>>2]|0)+((c[n>>2]|0)-(c[k>>2]|0));k=(c[i>>2]|0)+8|0;c[k>>2]=(c[k>>2]|0)+((c[q>>2]|0)-(c[o>>2]|0));c[S>>2]=vx(c[h>>2]|0)|0;o=c[h>>2]|0;if(c[S>>2]|0){q=((wx(o)|0)==2&1)*3|0;c[S>>2]=(c[S>>2]|0)+q;c[S>>2]=(c[S>>2]|0)-(c[(c[h>>2]|0)+28968>>2]|0);c[g>>2]=c[S>>2];T=c[g>>2]|0;l=e;return T|0;}S=(c[(c[h>>2]|0)+29008>>2]|0)!=0;if((c[o+28988>>2]|0)!=(c[(c[h>>2]|0)+28984>>2]|0)){if(!S){o=(c[j>>2]|0)+8|0;c[o>>2]=(c[o>>2]|0)+-1;c[(c[h>>2]|0)+29008>>2]=1;}c[g>>2]=1;T=c[g>>2]|0;l=e;return T|0;}do{if(S){if((c[(c[j>>2]|0)+8>>2]|0)>>>0<(c[(c[j>>2]|0)+4>>2]|0)>>>0){o=(c[j>>2]|0)+8|0;c[o>>2]=(c[o>>2]|0)+1;break;}c[(c[h>>2]|0)+28956>>2]=2;c[g>>2]=1;T=c[g>>2]|0;l=e;return T|0;}}while(0);c[g>>2]=0;T=c[g>>2]|0;l=e;return T|0;}}return 0;}function Rx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;f=l;l=l+128|0;g=f+112|0;h=f+108|0;i=f+104|0;j=f+100|0;k=f+96|0;m=f+92|0;n=f+88|0;o=f+84|0;p=f+80|0;q=f+76|0;r=f+72|0;s=f+68|0;t=f+64|0;u=f+60|0;v=f+56|0;w=f+52|0;x=f+48|0;y=f+44|0;z=f+40|0;A=f+36|0;B=f+32|0;C=f+28|0;D=f+24|0;E=f+20|0;F=f+16|0;G=f+12|0;H=f+8|0;I=f+4|0;J=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;switch(c[i>>2]|0){case 7:{c[E>>2]=c[h>>2];c[F>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0);c[G>>2]=(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[k>>2]|0)+8>>2]|0);c[H>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[I>>2]=(c[(c[j>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+8>>2]|0);c[J>>2]=jy(c[E>>2]|0,c[H>>2]|0,I,c[F>>2]|0,G)|0;F=(c[j>>2]|0)+8|0;c[F>>2]=(c[F>>2]|0)+(c[I>>2]|0);I=(c[k>>2]|0)+8|0;c[I>>2]=(c[I>>2]|0)+(c[G>>2]|0);c[g>>2]=c[J>>2];K=c[g>>2]|0;l=f;return K|0;}case 6:{c[y>>2]=c[h>>2];c[z>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0);c[A>>2]=(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[k>>2]|0)+8>>2]|0);c[B>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[C>>2]=(c[(c[j>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+8>>2]|0);c[D>>2]=iy(c[y>>2]|0,c[B>>2]|0,C,c[z>>2]|0,A)|0;z=(c[j>>2]|0)+8|0;c[z>>2]=(c[z>>2]|0)+(c[C>>2]|0);C=(c[k>>2]|0)+8|0;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0);c[g>>2]=c[D>>2];K=c[g>>2]|0;l=f;return K|0;}case 5:{c[s>>2]=c[h>>2];c[t>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0);c[u>>2]=(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[k>>2]|0)+8>>2]|0);c[v>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[w>>2]=(c[(c[j>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+8>>2]|0);c[x>>2]=hy(c[s>>2]|0,c[v>>2]|0,w,c[t>>2]|0,u)|0;t=(c[j>>2]|0)+8|0;c[t>>2]=(c[t>>2]|0)+(c[w>>2]|0);w=(c[k>>2]|0)+8|0;c[w>>2]=(c[w>>2]|0)+(c[u>>2]|0);c[g>>2]=c[x>>2];K=c[g>>2]|0;l=f;return K|0;}case 4:{c[m>>2]=c[h>>2];c[n>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0);c[o>>2]=(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[k>>2]|0)+8>>2]|0);c[p>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[q>>2]=(c[(c[j>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+8>>2]|0);c[r>>2]=gy(c[m>>2]|0,c[p>>2]|0,q,c[n>>2]|0,o)|0;n=(c[j>>2]|0)+8|0;c[n>>2]=(c[n>>2]|0)+(c[q>>2]|0);q=(c[k>>2]|0)+8|0;c[q>>2]=(c[q>>2]|0)+(c[o>>2]|0);c[g>>2]=c[r>>2];K=c[g>>2]|0;l=f;return K|0;}default:{c[g>>2]=-12;K=c[g>>2]|0;l=f;return K|0;}}return 0;}function Sx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=l;l=l+48|0;h=g+36|0;i=g+32|0;j=g+28|0;k=g+24|0;m=g+20|0;n=g+16|0;o=g+12|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[j>>2]|0)!=(c[k>>2]|0))Zp(c[c[i>>2]>>2]|0,c[j>>2]|0)|0;switch(c[k>>2]|0){case 7:{if((c[j>>2]|0)!=(c[k>>2]|0))s=ay()|0;else s=c[c[i>>2]>>2]|0;c[r>>2]=s;if(!(c[r>>2]|0)){c[h>>2]=-64;t=c[h>>2]|0;l=g;return t|0;}else{by(c[r>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;c[c[i>>2]>>2]=c[r>>2];c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}break;}case 6:{if((c[j>>2]|0)!=(c[k>>2]|0))u=_x()|0;else u=c[c[i>>2]>>2]|0;c[q>>2]=u;if(!(c[q>>2]|0)){c[h>>2]=-64;t=c[h>>2]|0;l=g;return t|0;}else{$x(c[q>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;c[c[i>>2]>>2]=c[q>>2];c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}break;}case 5:{if((c[j>>2]|0)!=(c[k>>2]|0))v=Yx()|0;else v=c[c[i>>2]>>2]|0;c[p>>2]=v;if(!(c[p>>2]|0)){c[h>>2]=-64;t=c[h>>2]|0;l=g;return t|0;}else{Zx(c[p>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;c[c[i>>2]>>2]=c[p>>2];c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}break;}case 4:{if((c[j>>2]|0)!=(c[k>>2]|0))w=Vx()|0;else w=c[c[i>>2]>>2]|0;c[o>>2]=w;if(!(c[o>>2]|0)){c[h>>2]=-64;t=c[h>>2]|0;l=g;return t|0;}else{Wx(c[o>>2]|0)|0;Xx(c[o>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;c[c[i>>2]>>2]=c[o>>2];c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}break;}default:{c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}}return 0;}function Tx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[(c[d>>2]|0)+28804>>2]|0)==7|0;}function Ux(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function Vx(){return fy()|0;}function Wx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=ey(c[d>>2]|0)|0;l=b;return a|0;}function Xx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=dy(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function Yx(){var a=0,b=0,d=0,e=0,f=0,g=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(96)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{f=c[d>>2]|0;g=f+96|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(g|0));f=ns()|0;c[c[d>>2]>>2]=f;c[(c[d>>2]|0)+80>>2]=0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function Zx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+80>>2]=1;c[(c[f>>2]|0)+72>>2]=0;c[(c[f>>2]|0)+68>>2]=0;c[(c[f>>2]|0)+56>>2]=0;c[(c[f>>2]|0)+76>>2]=0;d=Su(c[c[f>>2]>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function _x(){var a=0,b=0,d=0,e=0,f=0,g=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(80)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{f=c[d>>2]|0;g=f+80|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(g|0));f=ps()|0;c[c[d>>2]>>2]=f;c[(c[d>>2]|0)+24>>2]=0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function $x(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+24>>2]=1;c[(c[f>>2]|0)+52>>2]=0;c[(c[f>>2]|0)+48>>2]=0;c[(c[f>>2]|0)+36>>2]=0;c[(c[f>>2]|0)+76>>2]=0;d=Jt(c[c[f>>2]>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function ay(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[2988];c[b+4>>2]=c[2989];c[b+8>>2]=c[2990];d=cy(b)|0;l=a;return d|0;}function by(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+32>>2]=1;c[(c[f>>2]|0)+60>>2]=0;c[(c[f>>2]|0)+56>>2]=0;c[(c[f>>2]|0)+44>>2]=0;c[(c[f>>2]|0)+88>>2]=0;d=ts(c[c[f>>2]>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function cy(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+32|0;d=b+8|0;e=b+4|0;f=b;if((c[a>>2]|0)==0?(c[a+4>>2]|0)==0:0){c[a>>2]=c[2988];c[a+4>>2]=c[2989];c[a+8>>2]=c[2990];}if(c[a>>2]|0?c[a+4>>2]|0:0){c[f>>2]=qc[c[a>>2]&63](c[a+8>>2]|0,104)|0;if(!(c[f>>2]|0)){c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}h=c[f>>2]|0;i=h+104|0;do{c[h>>2]=0;h=h+4|0;}while((h|0)<(i|0));h=(c[f>>2]|0)+92|0;c[h>>2]=c[a>>2];c[h+4>>2]=c[a+4>>2];c[h+8>>2]=c[a+8>>2];c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];a=Gt(d)|0;c[c[f>>2]>>2]=a;a=c[f>>2]|0;if(!(c[c[f>>2]>>2]|0)){bq(a)|0;c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}else{c[a+32>>2]=0;c[e>>2]=c[f>>2];g=c[e>>2]|0;l=b;return g|0;}}c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+72>>2]=c[g>>2];c[(c[f>>2]|0)+76>>2]=c[h>>2];l=e;return 0;}function ey(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+80>>2]=1;c[(c[d>>2]|0)+76>>2]=0;c[(c[d>>2]|0)+64>>2]=0;c[(c[d>>2]|0)+60>>2]=0;c[(c[d>>2]|0)+48>>2]=0;c[(c[d>>2]|0)+68>>2]=0;a=kw(c[c[d>>2]>>2]|0)|0;l=b;return a|0;}function fy(){var a=0,b=0,d=0,e=0,f=0,g=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(96)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{f=c[d>>2]|0;g=f+96|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(g|0));f=hw()|0;c[c[d>>2]>>2]=f;c[(c[d>>2]|0)+80>>2]=0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function gy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;f=uy(c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;l=g;return f|0;}function Ko(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;i=l;l=l+48|0;j=i+32|0;k=i+28|0;m=i+24|0;n=i+20|0;o=i+16|0;p=i+12|0;q=i+8|0;r=i+4|0;s=i;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;g=c[m>>2]|0;f=c[r>>2]|0;r=c[q>>2]|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[s>>2]=Jo(g,f,j,r,0)|0;if(wj(c[s>>2]|0)|0){c[k>>2]=c[s>>2];t=c[k>>2]|0;l=i;return t|0;}else{c[k>>2]=Bo(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;t=c[k>>2]|0;l=i;return t|0;}return 0;}function Lo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;h=l;l=l+48|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;c[i>>2]=c[2981];c[i+4>>2]=c[2982];c[i+8>>2]=c[2983];p=Ko(g,j,k,m,n,o,i)|0;l=h;return p|0;}function Mo(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[5406];c[b+4>>2]=c[5407];c[b+8>>2]=c[5408];d=No(b)|0;l=a;return d|0;}function No(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];a=nj(d)|0;l=b;return a|0;}function Oo(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=qj(c[d>>2]|0)|0;l=b;return a|0;}function Po(){return 131072;}function Qo(){return(lj(131072)|0)+3+4|0;}function Ro(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+144|0;k=j+40|0;m=j+32|0;n=j+28|0;o=j+24|0;p=j+20|0;q=j+16|0;r=j+12|0;s=j;t=j+8|0;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;f=s;c[f>>2]=h;c[f+4>>2]=i;i=c[n>>2]|0;f=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;r=s;h=c[r>>2]|0;e=c[r+4>>2]|0;r=k;d=g;g=r+104|0;do{c[r>>2]=c[d>>2];r=r+4|0;d=d+4|0;}while((r|0)<(g|0));c[t>>2]=xo(i,f,o,p,q,k,h,e,1)|0;if(wj(c[t>>2]|0)|0){c[m>>2]=c[t>>2];u=c[m>>2]|0;l=j;return u|0;}else{c[(c[n>>2]|0)+600>>2]=0;c[(c[n>>2]|0)+604>>2]=0;t=s;c[(c[n>>2]|0)+608>>2]=(c[(c[n>>2]|0)+232>>2]|0)+((0==(c[t+4>>2]|0)?(c[(c[n>>2]|0)+232>>2]|0)==(c[t>>2]|0):0)&1);c[(c[n>>2]|0)+624>>2]=0;c[(c[n>>2]|0)+620>>2]=0;c[(c[n>>2]|0)+628>>2]=1;c[(c[n>>2]|0)+632>>2]=0;c[m>>2]=0;u=c[m>>2]|0;l=j;return u|0;}return 0;}function So(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;i=l;l=l+192|0;j=i+88|0;k=i+52|0;m=i+80|0;n=i+48|0;o=i+44|0;p=i+40|0;q=i+36|0;r=i;s=i+8|0;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;e=r;c[e>>2]=g;c[e+4>>2]=h;if((c[o>>2]|0)!=0&(c[p>>2]|0)>>>0>=8){if(c[(c[n>>2]|0)+364>>2]|0){c[m>>2]=-64;t=c[m>>2]|0;l=i;return t|0;}rj(c[(c[n>>2]|0)+636>>2]|0)|0;h=c[o>>2]|0;o=c[p>>2]|0;p=f+4|0;e=(c[n>>2]|0)+352|0;c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[k+12>>2]=c[p+12>>2];c[k+16>>2]=c[p+16>>2];c[k+20>>2]=c[p+20>>2];c[k+24>>2]=c[p+24>>2];c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];e=zj(h,o,0,0,k,j)|0;c[(c[n>>2]|0)+636>>2]=e;c[(c[n>>2]|0)+640>>2]=c[(c[n>>2]|0)+636>>2];if(!(c[(c[n>>2]|0)+636>>2]|0)){c[m>>2]=-64;t=c[m>>2]|0;l=i;return t|0;}}else{if(c[q>>2]|0){e=f+4|0;Io(s,c[q>>2]|0);c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];c[e+16>>2]=c[s+16>>2];c[e+20>>2]=c[s+20>>2];c[e+24>>2]=c[s+24>>2];}rj(c[(c[n>>2]|0)+636>>2]|0)|0;c[(c[n>>2]|0)+636>>2]=0;c[(c[n>>2]|0)+640>>2]=c[q>>2];}q=c[n>>2]|0;s=c[(c[n>>2]|0)+640>>2]|0;n=r;r=c[n>>2]|0;e=c[n+4>>2]|0;n=j;k=f;f=n+104|0;do{c[n>>2]=c[k>>2];n=n+4|0;k=k+4|0;}while((n|0)<(f|0));c[m>>2]=Ro(q,0,0,0,s,j,r,e)|0;t=c[m>>2]|0;l=i;return t|0;}function To(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+272|0;h=g+160|0;i=g+152|0;j=g+148|0;k=g+144|0;m=g;n=g+40|0;o=g+8|0;c[j>>2]=a;c[k>>2]=b;b=m;c[b>>2]=e;c[b+4>>2]=f;if(c[k>>2]|0){f=n;b=(c[j>>2]|0)+12|0;e=f+104|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0;}while((f|0)<(e|0));a=n+4|0;Io(o,c[k>>2]|0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];c[a+16>>2]=c[o+16>>2];c[a+20>>2]=c[o+20>>2];c[a+24>>2]=c[o+24>>2];o=n+32|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];d=c[j>>2]|0;j=c[k>>2]|0;k=m;m=c[k>>2]|0;o=c[k+4>>2]|0;f=h;b=n;e=f+104|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0;}while((f|0)<(e|0));c[i>>2]=So(d,0,0,j,h,m,o)|0;p=c[i>>2]|0;l=g;return p|0;}else{c[i>>2]=-32;p=c[i>>2]|0;l=g;return p|0;}return 0;}function Uo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;c[g>>2]=b;b=c[f>>2]|0;f=c[g>>2]|0;c[e>>2]=c[5409];c[e+4>>2]=c[5410];c[e+8>>2]=c[5411];g=To(b,f,e,-1,-1)|0;l=d;return g|0;}function Vo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+384|0;g=f+280|0;h=f+168|0;i=f+272|0;j=f+160|0;k=f+8|0;m=f;n=f+120|0;o=f+16|0;c[i>>2]=a;c[j>>2]=b;b=k;c[b>>2]=d;c[b+4>>2]=e;e=k;b=(c[e>>2]|0)==0&(c[e+4>>2]|0)==0;e=k;k=b?-1:c[e+4>>2]|0;d=m;c[d>>2]=b?-1:c[e>>2]|0;c[d+4>>2]=k;k=m;Ao(n,c[j>>2]|0,c[k>>2]|0,c[k+4>>2]|0,0);k=h;j=(c[i>>2]|0)+12|0;d=k+104|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0;}while((k|0)<(d|0));k=g;j=n;d=k+40|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0;}while((k|0)<(d|0));zo(o,h,g);h=c[i>>2]|0;i=m;m=c[i>>2]|0;n=c[i+4>>2]|0;k=g;j=o;d=k+104|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0;}while((k|0)<(d|0));j=So(h,0,0,0,g,m,n)|0;l=f;return j|0;}function Wo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Vo(c[e>>2]|0,c[f>>2]|0,-1,-1)|0;l=d;return b|0;}function Xo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=l;l=l+96|0;g=f+88|0;h=f+84|0;i=f+80|0;j=f+76|0;k=f+72|0;m=f+68|0;n=f+64|0;o=f+60|0;p=f+56|0;q=f+52|0;r=f+48|0;s=f+44|0;t=f+40|0;u=f+36|0;v=f+32|0;w=f+28|0;x=f+24|0;y=f+20|0;z=f+16|0;A=f+12|0;B=f+8|0;C=f+4|0;D=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[c[j>>2]>>2];c[n>>2]=(c[m>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0);c[o>>2]=(c[m>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[p>>2]=c[c[i>>2]>>2];c[q>>2]=(c[p>>2]|0)+(c[(c[i>>2]|0)+4>>2]|0);c[r>>2]=(c[p>>2]|0)+(c[(c[i>>2]|0)+8>>2]|0);c[s>>2]=1;a:while(1){if(!(c[s>>2]|0)){E=39;break;}b:do{switch(c[(c[h>>2]|0)+628>>2]|0){case 0:{E=4;break a;break;}case 1:{if(((c[k>>2]|0)==2?(e=(c[q>>2]|0)-(c[r>>2]|0)|0,e>>>0>=(lj((c[n>>2]|0)-(c[o>>2]|0)|0)|0)>>>0):0)?(c[(c[h>>2]|0)+604>>2]|0)==0:0){c[t>>2]=Bo(c[h>>2]|0,c[r>>2]|0,(c[q>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,(c[n>>2]|0)-(c[o>>2]|0)|0)|0;if(Ph(c[t>>2]|0)|0){E=9;break a;}c[o>>2]=c[n>>2];c[r>>2]=(c[r>>2]|0)+(c[t>>2]|0);c[(c[h>>2]|0)+632>>2]=1;jl(c[h>>2]|0);c[s>>2]=0;break b;}c[u>>2]=(c[(c[h>>2]|0)+608>>2]|0)-(c[(c[h>>2]|0)+604>>2]|0);c[v>>2]=Yo((c[(c[h>>2]|0)+592>>2]|0)+(c[(c[h>>2]|0)+604>>2]|0)|0,c[u>>2]|0,c[o>>2]|0,(c[n>>2]|0)-(c[o>>2]|0)|0)|0;e=(c[h>>2]|0)+604|0;c[e>>2]=(c[e>>2]|0)+(c[v>>2]|0);c[o>>2]=(c[o>>2]|0)+(c[v>>2]|0);if((c[k>>2]|0)==0?(c[(c[h>>2]|0)+604>>2]|0)>>>0<(c[(c[h>>2]|0)+608>>2]|0)>>>0:0){c[s>>2]=0;break b;}if((c[k>>2]|0)==1?(c[(c[h>>2]|0)+604>>2]|0)==(c[(c[h>>2]|0)+600>>2]|0):0){c[s>>2]=0;break b;}c[y>>2]=(c[(c[h>>2]|0)+604>>2]|0)-(c[(c[h>>2]|0)+600>>2]|0);c[z>>2]=(c[q>>2]|0)-(c[r>>2]|0);if((c[k>>2]|0)==2)F=(c[o>>2]|0)==(c[n>>2]|0);else F=0;c[A>>2]=F&1;if((c[z>>2]|0)>>>0>=(lj(c[y>>2]|0)|0)>>>0)c[w>>2]=c[r>>2];else{c[w>>2]=c[(c[h>>2]|0)+612>>2];c[z>>2]=c[(c[h>>2]|0)+616>>2];}e=c[h>>2]|0;d=c[w>>2]|0;b=c[z>>2]|0;a=(c[(c[h>>2]|0)+592>>2]|0)+(c[(c[h>>2]|0)+600>>2]|0)|0;G=c[y>>2]|0;if(c[A>>2]|0)H=Bo(e,d,b,a,G)|0;else H=vn(e,d,b,a,G)|0;c[x>>2]=H;if(Ph(c[x>>2]|0)|0){E=26;break a;}c[(c[h>>2]|0)+632>>2]=c[A>>2];c[(c[h>>2]|0)+608>>2]=(c[(c[h>>2]|0)+604>>2]|0)+(c[(c[h>>2]|0)+232>>2]|0);if((c[(c[h>>2]|0)+608>>2]|0)>>>0>(c[(c[h>>2]|0)+596>>2]|0)>>>0){c[(c[h>>2]|0)+604>>2]=0;c[(c[h>>2]|0)+608>>2]=c[(c[h>>2]|0)+232>>2];}c[(c[h>>2]|0)+600>>2]=c[(c[h>>2]|0)+604>>2];G=c[x>>2]|0;if((c[w>>2]|0)!=(c[r>>2]|0)){c[(c[h>>2]|0)+620>>2]=G;c[(c[h>>2]|0)+624>>2]=0;c[(c[h>>2]|0)+628>>2]=2;E=33;break b;}c[r>>2]=(c[r>>2]|0)+G;if(c[(c[h>>2]|0)+632>>2]|0){c[s>>2]=0;jl(c[h>>2]|0);}break;}case 2:{E=33;break;}default:{}}}while(0);do{if((E|0)==33){E=0;c[B>>2]=(c[(c[h>>2]|0)+620>>2]|0)-(c[(c[h>>2]|0)+624>>2]|0);c[C>>2]=Yo(c[r>>2]|0,(c[q>>2]|0)-(c[r>>2]|0)|0,(c[(c[h>>2]|0)+612>>2]|0)+(c[(c[h>>2]|0)+624>>2]|0)|0,c[B>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[C>>2]|0);G=(c[h>>2]|0)+624|0;c[G>>2]=(c[G>>2]|0)+(c[C>>2]|0);if((c[B>>2]|0)!=(c[C>>2]|0)){c[s>>2]=0;break;}c[(c[h>>2]|0)+624>>2]=0;c[(c[h>>2]|0)+620>>2]=0;if(c[(c[h>>2]|0)+632>>2]|0){c[s>>2]=0;jl(c[h>>2]|0);break;}else{c[(c[h>>2]|0)+628>>2]=1;break;}}}while(0);}if((E|0)==4){c[g>>2]=-62;I=c[g>>2]|0;l=f;return I|0;}else if((E|0)==9){c[g>>2]=c[t>>2];I=c[g>>2]|0;l=f;return I|0;}else if((E|0)==26){c[g>>2]=c[x>>2];I=c[g>>2]|0;l=f;return I|0;}else if((E|0)==39){c[(c[j>>2]|0)+8>>2]=(c[o>>2]|0)-(c[m>>2]|0);c[(c[i>>2]|0)+8>>2]=(c[r>>2]|0)-(c[p>>2]|0);if(c[(c[h>>2]|0)+632>>2]|0){c[g>>2]=0;I=c[g>>2]|0;l=f;return I|0;}c[D>>2]=(c[(c[h>>2]|0)+608>>2]|0)-(c[(c[h>>2]|0)+604>>2]|0);if(!(c[D>>2]|0))c[D>>2]=c[(c[h>>2]|0)+232>>2];c[g>>2]=c[D>>2];I=c[g>>2]|0;l=f;return I|0;}return 0;}function Yo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;if(!(c[k>>2]|0)){m=c[k>>2]|0;l=f;return m|0;}mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;m=c[k>>2]|0;l=f;return m|0;}function Zo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[(c[h>>2]|0)+8>>2]|0)>>>0>(c[(c[h>>2]|0)+4>>2]|0)>>>0){c[f>>2]=-1;j=c[f>>2]|0;l=e;return j|0;}if((c[(c[i>>2]|0)+8>>2]|0)>>>0>(c[(c[i>>2]|0)+4>>2]|0)>>>0){c[f>>2]=-1;j=c[f>>2]|0;l=e;return j|0;}else{c[f>>2]=Xo(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0,0)|0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function _o(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;d=l;l=l+48|0;e=d+36|0;f=d+32|0;g=d+28|0;h=d+16|0;i=d+12|0;j=d+8|0;k=d+4|0;m=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;if((c[(c[g>>2]|0)+8>>2]|0)>>>0>(c[(c[g>>2]|0)+4>>2]|0)>>>0){c[e>>2]=-1;n=c[e>>2]|0;l=d;return n|0;}c[i>>2]=Xo(c[f>>2]|0,c[g>>2]|0,h,2)|0;if(wj(c[i>>2]|0)|0){c[e>>2]=c[i>>2];n=c[e>>2]|0;l=d;return n|0;}c[j>>2]=c[(c[f>>2]|0)+632>>2]|0?0:3;if(c[(c[f>>2]|0)+632>>2]|0)o=0;else o=c[(c[f>>2]|0)+116+32+4>>2]<<2;c[k>>2]=o;c[m>>2]=(c[(c[f>>2]|0)+620>>2]|0)-(c[(c[f>>2]|0)+624>>2]|0)+(c[j>>2]|0)+(c[k>>2]|0);c[e>>2]=c[m>>2];n=c[e>>2]|0;l=d;return n|0;}function $o(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;i=l;l=l+96|0;j=i+80|0;k=i+76|0;m=i+72|0;n=i+68|0;o=i+64|0;p=i+60|0;q=i+56|0;r=i+52|0;s=i+48|0;t=i+44|0;u=i+40|0;v=i+36|0;w=i+32|0;x=i+28|0;y=i+88|0;z=i+24|0;A=i+20|0;B=i+16|0;C=i+12|0;D=i+8|0;E=i+4|0;F=i;G=i+84|0;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=0;c[r>>2]=0;c[t>>2]=(c[k>>2]|0)+4;c[u>>2]=c[t>>2];c[x>>2]=0;c[v>>2]=(c[o>>2]|0)+(c[x>>2]<<2);c[x>>2]=(c[x>>2]|0)+16;c[w>>2]=(c[o>>2]|0)+(c[x>>2]<<2);c[x>>2]=(c[x>>2]|0)+64;if(c[x>>2]<<2>>>0>(c[p>>2]|0)>>>0){c[j>>2]=-44;H=c[j>>2]|0;l=i;return H|0;}c[s>>2]=fh(c[w>>2]|0,256,c[v>>2]|0,r,q,c[m>>2]|0,c[n>>2]|0)|0;if(ap(c[s>>2]|0)|0){c[j>>2]=c[s>>2];H=c[j>>2]|0;l=i;return H|0;}bp(y,c[k>>2]|0);if((c[q>>2]|0)>>>0>((d[y>>0]|0)+1|0)>>>0){c[j>>2]=-44;H=c[j>>2]|0;l=i;return H|0;}a[y+1>>0]=0;a[y+2>>0]=c[q>>2];n=c[k>>2]|0;a[n>>0]=a[y>>0]|0;a[n+1>>0]=a[y+1>>0]|0;a[n+2>>0]=a[y+2>>0]|0;a[n+3>>0]=a[y+3>>0]|0;c[A>>2]=0;c[z>>2]=1;while(1){if((c[z>>2]|0)>>>0>=((c[q>>2]|0)+1|0)>>>0)break;c[B>>2]=c[A>>2];c[A>>2]=(c[A>>2]|0)+(c[(c[v>>2]|0)+(c[z>>2]<<2)>>2]<<(c[z>>2]|0)-1);c[(c[v>>2]|0)+(c[z>>2]<<2)>>2]=c[B>>2];c[z>>2]=(c[z>>2]|0)+1;}c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;c[D>>2]=d[(c[w>>2]|0)+(c[C>>2]|0)>>0];c[E>>2]=1<<c[D>>2]>>1;a[G>>0]=c[C>>2];a[G+1>>0]=(c[q>>2]|0)+1-(c[D>>2]|0);c[F>>2]=c[(c[v>>2]|0)+(c[D>>2]<<2)>>2];while(1){if((c[F>>2]|0)>>>0>=((c[(c[v>>2]|0)+(c[D>>2]<<2)>>2]|0)+(c[E>>2]|0)|0)>>>0)break;z=(c[u>>2]|0)+(c[F>>2]<<1)|0;a[z>>0]=a[G>>0]|0;a[z+1>>0]=a[G+1>>0]|0;c[F>>2]=(c[F>>2]|0)+1;}z=(c[v>>2]|0)+(c[D>>2]<<2)|0;c[z>>2]=(c[z>>2]|0)+(c[E>>2]|0);c[C>>2]=(c[C>>2]|0)+1;}c[j>>2]=c[s>>2];H=c[j>>2]|0;l=i;return H|0;}function ap(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function bp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;a[b>>0]=a[g>>0]|0;a[b+1>>0]=a[g+1>>0]|0;a[b+2>>0]=a[g+2>>0]|0;a[b+3>>0]=a[g+3>>0]|0;l=e;return;}function cp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=dp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=ep(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function dp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;i=l;l=l+224|0;j=i+204|0;k=i+200|0;m=i+196|0;n=i+192|0;o=i+217|0;p=i+188|0;q=i+184|0;r=i+180|0;s=i+176|0;t=i+216|0;u=i+172|0;v=i+168|0;w=i+164|0;x=i+160|0;y=i+215|0;z=i+156|0;A=i+152|0;B=i+148|0;C=i+144|0;D=i+214|0;E=i+140|0;F=i+136|0;G=i+132|0;H=i+128|0;I=i+213|0;J=i+124|0;K=i+120|0;L=i+116|0;M=i+112|0;N=i+212|0;O=i+108|0;P=i+104|0;Q=i+100|0;R=i+96|0;S=i+92|0;T=i+84|0;U=i+80|0;V=i+76|0;W=i+72|0;X=i+68|0;Y=i+64|0;Z=i+60|0;_=i+56|0;$=i+52|0;aa=i+48|0;ba=i+28|0;ca=i+208|0;da=i+24|0;ea=i+20|0;fa=i+16|0;ga=i+12|0;ha=i+8|0;ia=i+4|0;ja=i;c[fa>>2]=b;c[ga>>2]=e;c[ha>>2]=f;c[ia>>2]=g;c[ja>>2]=h;h=c[ga>>2]|0;ga=c[ha>>2]|0;ha=c[ia>>2]|0;ia=c[ja>>2]|0;c[U>>2]=c[fa>>2];c[V>>2]=h;c[W>>2]=ga;c[X>>2]=ha;c[Y>>2]=ia;c[Z>>2]=c[U>>2];c[_>>2]=(c[Z>>2]|0)+(c[V>>2]|0);c[$>>2]=(c[Y>>2]|0)+4;c[aa>>2]=c[$>>2];bp(ca,c[Y>>2]|0);c[da>>2]=d[ca+2>>0];c[ea>>2]=fp(ba,c[W>>2]|0,c[X>>2]|0)|0;if(ap(c[ea>>2]|0)|0){c[T>>2]=c[ea>>2];ka=c[T>>2]|0;l=i;return ka|0;}ea=c[_>>2]|0;_=c[aa>>2]|0;aa=c[da>>2]|0;c[O>>2]=c[Z>>2];c[P>>2]=ba;c[Q>>2]=ea;c[R>>2]=_;c[S>>2]=aa;c[i+88>>2]=c[O>>2];while(1){aa=(gp(c[P>>2]|0)|0)==0&1;if(!(aa&(c[O>>2]|0)>>>0<((c[Q>>2]|0)+-3|0)>>>0))break;if(hp()|0){aa=c[R>>2]|0;_=c[S>>2]|0;c[J>>2]=c[P>>2];c[K>>2]=aa;c[L>>2]=_;c[M>>2]=ip(c[J>>2]|0,c[L>>2]|0)|0;a[N>>0]=a[(c[K>>2]|0)+(c[M>>2]<<1)>>0]|0;jp(c[J>>2]|0,d[(c[K>>2]|0)+(c[M>>2]<<1)+1>>0]|0);_=a[N>>0]|0;aa=c[O>>2]|0;c[O>>2]=aa+1;a[aa>>0]=_;}hp()|0;_=c[R>>2]|0;aa=c[S>>2]|0;c[E>>2]=c[P>>2];c[F>>2]=_;c[G>>2]=aa;c[H>>2]=ip(c[E>>2]|0,c[G>>2]|0)|0;a[I>>0]=a[(c[F>>2]|0)+(c[H>>2]<<1)>>0]|0;jp(c[E>>2]|0,d[(c[F>>2]|0)+(c[H>>2]<<1)+1>>0]|0);aa=a[I>>0]|0;_=c[O>>2]|0;c[O>>2]=_+1;a[_>>0]=aa;if(hp()|0){aa=c[R>>2]|0;_=c[S>>2]|0;c[z>>2]=c[P>>2];c[A>>2]=aa;c[B>>2]=_;c[C>>2]=ip(c[z>>2]|0,c[B>>2]|0)|0;a[D>>0]=a[(c[A>>2]|0)+(c[C>>2]<<1)>>0]|0;jp(c[z>>2]|0,d[(c[A>>2]|0)+(c[C>>2]<<1)+1>>0]|0);_=a[D>>0]|0;aa=c[O>>2]|0;c[O>>2]=aa+1;a[aa>>0]=_;}_=c[R>>2]|0;aa=c[S>>2]|0;c[u>>2]=c[P>>2];c[v>>2]=_;c[w>>2]=aa;c[x>>2]=ip(c[u>>2]|0,c[w>>2]|0)|0;a[y>>0]=a[(c[v>>2]|0)+(c[x>>2]<<1)>>0]|0;jp(c[u>>2]|0,d[(c[v>>2]|0)+(c[x>>2]<<1)+1>>0]|0);aa=a[y>>0]|0;_=c[O>>2]|0;c[O>>2]=_+1;a[_>>0]=aa;}a:do{if(kp()|0)while(1){y=(gp(c[P>>2]|0)|0)==0&1;if(!(y&(c[O>>2]|0)>>>0<(c[Q>>2]|0)>>>0))break a;y=c[R>>2]|0;x=c[S>>2]|0;c[p>>2]=c[P>>2];c[q>>2]=y;c[r>>2]=x;c[s>>2]=ip(c[p>>2]|0,c[r>>2]|0)|0;a[t>>0]=a[(c[q>>2]|0)+(c[s>>2]<<1)>>0]|0;jp(c[p>>2]|0,d[(c[q>>2]|0)+(c[s>>2]<<1)+1>>0]|0);x=a[t>>0]|0;y=c[O>>2]|0;c[O>>2]=y+1;a[y>>0]=x;}}while(0);while(1){if((c[O>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break;t=c[R>>2]|0;s=c[S>>2]|0;c[j>>2]=c[P>>2];c[k>>2]=t;c[m>>2]=s;c[n>>2]=ip(c[j>>2]|0,c[m>>2]|0)|0;a[o>>0]=a[(c[k>>2]|0)+(c[n>>2]<<1)>>0]|0;jp(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<1)+1>>0]|0);s=a[o>>0]|0;t=c[O>>2]|0;c[O>>2]=t+1;a[t>>0]=s;}if(lp(ba)|0){c[T>>2]=c[V>>2];ka=c[T>>2]|0;l=i;return ka|0;}else{c[T>>2]=-20;ka=c[T>>2]|0;l=i;return ka|0;}return 0;}function ep(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;i=l;l=l+224|0;j=i+204|0;k=i+200|0;m=i+196|0;n=i+192|0;o=i+217|0;p=i+188|0;q=i+184|0;r=i+180|0;s=i+176|0;t=i+216|0;u=i+172|0;v=i+168|0;w=i+164|0;x=i+160|0;y=i+215|0;z=i+156|0;A=i+152|0;B=i+148|0;C=i+144|0;D=i+214|0;E=i+140|0;F=i+136|0;G=i+132|0;H=i+128|0;I=i+213|0;J=i+124|0;K=i+120|0;L=i+116|0;M=i+112|0;N=i+212|0;O=i+108|0;P=i+104|0;Q=i+100|0;R=i+96|0;S=i+92|0;T=i+84|0;U=i+80|0;V=i+76|0;W=i+72|0;X=i+68|0;Y=i+64|0;Z=i+60|0;_=i+56|0;$=i+52|0;aa=i+48|0;ba=i+28|0;ca=i+208|0;da=i+24|0;ea=i+20|0;fa=i+16|0;ga=i+12|0;ha=i+8|0;ia=i+4|0;ja=i;c[fa>>2]=b;c[ga>>2]=e;c[ha>>2]=f;c[ia>>2]=g;c[ja>>2]=h;h=c[ga>>2]|0;ga=c[ha>>2]|0;ha=c[ia>>2]|0;ia=c[ja>>2]|0;c[U>>2]=c[fa>>2];c[V>>2]=h;c[W>>2]=ga;c[X>>2]=ha;c[Y>>2]=ia;c[Z>>2]=c[U>>2];c[_>>2]=(c[Z>>2]|0)+(c[V>>2]|0);c[$>>2]=(c[Y>>2]|0)+4;c[aa>>2]=c[$>>2];bp(ca,c[Y>>2]|0);c[da>>2]=d[ca+2>>0];c[ea>>2]=fp(ba,c[W>>2]|0,c[X>>2]|0)|0;if(ap(c[ea>>2]|0)|0){c[T>>2]=c[ea>>2];ka=c[T>>2]|0;l=i;return ka|0;}ea=c[_>>2]|0;_=c[aa>>2]|0;aa=c[da>>2]|0;c[O>>2]=c[Z>>2];c[P>>2]=ba;c[Q>>2]=ea;c[R>>2]=_;c[S>>2]=aa;c[i+88>>2]=c[O>>2];while(1){aa=(gp(c[P>>2]|0)|0)==0&1;if(!(aa&(c[O>>2]|0)>>>0<((c[Q>>2]|0)+-3|0)>>>0))break;if(hp()|0){aa=c[R>>2]|0;_=c[S>>2]|0;c[J>>2]=c[P>>2];c[K>>2]=aa;c[L>>2]=_;c[M>>2]=ip(c[J>>2]|0,c[L>>2]|0)|0;a[N>>0]=a[(c[K>>2]|0)+(c[M>>2]<<1)>>0]|0;jp(c[J>>2]|0,d[(c[K>>2]|0)+(c[M>>2]<<1)+1>>0]|0);_=a[N>>0]|0;aa=c[O>>2]|0;c[O>>2]=aa+1;a[aa>>0]=_;}hp()|0;_=c[R>>2]|0;aa=c[S>>2]|0;c[E>>2]=c[P>>2];c[F>>2]=_;c[G>>2]=aa;c[H>>2]=ip(c[E>>2]|0,c[G>>2]|0)|0;a[I>>0]=a[(c[F>>2]|0)+(c[H>>2]<<1)>>0]|0;jp(c[E>>2]|0,d[(c[F>>2]|0)+(c[H>>2]<<1)+1>>0]|0);aa=a[I>>0]|0;_=c[O>>2]|0;c[O>>2]=_+1;a[_>>0]=aa;if(hp()|0){aa=c[R>>2]|0;_=c[S>>2]|0;c[z>>2]=c[P>>2];c[A>>2]=aa;c[B>>2]=_;c[C>>2]=ip(c[z>>2]|0,c[B>>2]|0)|0;a[D>>0]=a[(c[A>>2]|0)+(c[C>>2]<<1)>>0]|0;jp(c[z>>2]|0,d[(c[A>>2]|0)+(c[C>>2]<<1)+1>>0]|0);_=a[D>>0]|0;aa=c[O>>2]|0;c[O>>2]=aa+1;a[aa>>0]=_;}_=c[R>>2]|0;aa=c[S>>2]|0;c[u>>2]=c[P>>2];c[v>>2]=_;c[w>>2]=aa;c[x>>2]=ip(c[u>>2]|0,c[w>>2]|0)|0;a[y>>0]=a[(c[v>>2]|0)+(c[x>>2]<<1)>>0]|0;jp(c[u>>2]|0,d[(c[v>>2]|0)+(c[x>>2]<<1)+1>>0]|0);aa=a[y>>0]|0;_=c[O>>2]|0;c[O>>2]=_+1;a[_>>0]=aa;}a:do{if(kp()|0)while(1){y=(gp(c[P>>2]|0)|0)==0&1;if(!(y&(c[O>>2]|0)>>>0<(c[Q>>2]|0)>>>0))break a;y=c[R>>2]|0;x=c[S>>2]|0;c[p>>2]=c[P>>2];c[q>>2]=y;c[r>>2]=x;c[s>>2]=ip(c[p>>2]|0,c[r>>2]|0)|0;a[t>>0]=a[(c[q>>2]|0)+(c[s>>2]<<1)>>0]|0;jp(c[p>>2]|0,d[(c[q>>2]|0)+(c[s>>2]<<1)+1>>0]|0);x=a[t>>0]|0;y=c[O>>2]|0;c[O>>2]=y+1;a[y>>0]=x;}}while(0);while(1){if((c[O>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break;t=c[R>>2]|0;s=c[S>>2]|0;c[j>>2]=c[P>>2];c[k>>2]=t;c[m>>2]=s;c[n>>2]=ip(c[j>>2]|0,c[m>>2]|0)|0;a[o>>0]=a[(c[k>>2]|0)+(c[n>>2]<<1)>>0]|0;jp(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<1)+1>>0]|0);s=a[o>>0]|0;t=c[O>>2]|0;c[O>>2]=t+1;a[t>>0]=s;}if(lp(ba)|0){c[T>>2]=c[V>>2];ka=c[T>>2]|0;l=i;return ka|0;}else{c[T>>2]=-20;ka=c[T>>2]|0;l=i;return ka|0;}return 0;}function fp(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}c[(c[i>>2]|0)+12>>2]=c[j>>2];c[(c[i>>2]|0)+16>>2]=(c[(c[i>>2]|0)+12>>2]|0)+4;do{if((c[k>>2]|0)>>>0>=4){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;f=mp(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=f;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0)p=8-(up(d[m>>0]|0)|0)|0;else p=0;c[(c[i>>2]|0)+4>>2]=p;if(!(d[m>>0]|0)){c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);q=10;break;}case 6:{q=10;break;}case 5:{q=11;break;}case 4:{q=12;break;}case 3:{q=13;break;}case 2:{q=14;break;}default:{}}if((q|0)==10){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);q=11;}if((q|0)==11){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);q=12;}if((q|0)==12){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);q=13;}if((q|0)==13){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);q=14;}if((q|0)==14){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0)r=8-(up(d[n>>0]|0)|0)|0;else r=0;c[(c[i>>2]|0)+4>>2]=r;if(d[n>>0]|0|0){f=(c[i>>2]|0)+4|0;c[f>>2]=(c[f>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-20;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function gp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=mp(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=mp(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function hp(){return 0;}function ip(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function jp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function kp(){return 1;}function lp(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function mp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(kp()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=np(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=op(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function np(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(pp()|0)!=0;f=sp(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=tp(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function op(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(pp()|0)!=0;f=qp(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=rp(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function pp(){return d[11936]|0|0;}function qp(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function rp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function sp(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function tp(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function up(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function vp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=wp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=xp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function wp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0;i=l;l=l+1024|0;j=i+968|0;k=i+964|0;m=i+960|0;n=i+956|0;o=i+1015|0;p=i+952|0;q=i+948|0;r=i+944|0;s=i+940|0;t=i+1014|0;u=i+936|0;v=i+932|0;w=i+928|0;x=i+924|0;y=i+1013|0;z=i+920|0;A=i+916|0;B=i+912|0;C=i+908|0;D=i+1012|0;E=i+904|0;F=i+900|0;G=i+896|0;H=i+892|0;I=i+1011|0;J=i+888|0;K=i+884|0;L=i+880|0;M=i+876|0;N=i+1010|0;O=i+872|0;P=i+868|0;Q=i+864|0;R=i+860|0;S=i+856|0;T=i+852|0;U=i+848|0;V=i+844|0;W=i+840|0;X=i+836|0;Y=i+1009|0;Z=i+832|0;_=i+828|0;$=i+824|0;aa=i+820|0;ba=i+1008|0;ca=i+816|0;da=i+812|0;ea=i+808|0;fa=i+804|0;ga=i+1007|0;ha=i+800|0;ia=i+796|0;ja=i+792|0;ka=i+788|0;la=i+1006|0;ma=i+784|0;na=i+780|0;oa=i+776|0;pa=i+772|0;qa=i+1005|0;ra=i+768|0;sa=i+764|0;ta=i+760|0;ua=i+756|0;va=i+1004|0;wa=i+752|0;xa=i+748|0;ya=i+744|0;za=i+740|0;Aa=i+736|0;Ba=i+732|0;Ca=i+728|0;Da=i+724|0;Ea=i+720|0;Fa=i+716|0;Ga=i+1003|0;Ha=i+712|0;Ia=i+708|0;Ja=i+704|0;Ka=i+700|0;La=i+1002|0;Ma=i+696|0;Na=i+692|0;Oa=i+688|0;Pa=i+684|0;Qa=i+1001|0;Ra=i+680|0;Sa=i+676|0;Ta=i+672|0;Ua=i+668|0;Va=i+1e3|0;Wa=i+664|0;Xa=i+660|0;Ya=i+656|0;Za=i+652|0;_a=i+999|0;$a=i+648|0;ab=i+644|0;bb=i+640|0;cb=i+636|0;db=i+998|0;eb=i+632|0;fb=i+628|0;gb=i+624|0;hb=i+620|0;ib=i+616|0;jb=i+612|0;kb=i+608|0;lb=i+604|0;mb=i+600|0;nb=i+596|0;ob=i+997|0;pb=i+592|0;qb=i+588|0;rb=i+584|0;sb=i+580|0;tb=i+996|0;ub=i+576|0;vb=i+572|0;wb=i+568|0;xb=i+564|0;yb=i+995|0;zb=i+560|0;Ab=i+556|0;Bb=i+552|0;Cb=i+548|0;Db=i+994|0;Eb=i+544|0;Fb=i+540|0;Gb=i+536|0;Hb=i+532|0;Ib=i+993|0;Jb=i+528|0;Kb=i+524|0;Lb=i+520|0;Mb=i+516|0;Nb=i+992|0;Ob=i+512|0;Pb=i+508|0;Qb=i+504|0;Rb=i+500|0;Sb=i+496|0;Tb=i+492|0;Ub=i+488|0;Vb=i+484|0;Wb=i+480|0;Xb=i+476|0;Yb=i+991|0;Zb=i+472|0;_b=i+468|0;$b=i+464|0;ac=i+460|0;bc=i+990|0;cc=i+456|0;dc=i+452|0;ec=i+448|0;fc=i+444|0;gc=i+989|0;hc=i+440|0;ic=i+436|0;jc=i+432|0;kc=i+428|0;lc=i+988|0;mc=i+424|0;nc=i+420|0;oc=i+416|0;pc=i+412|0;qc=i+987|0;rc=i+408|0;sc=i+404|0;tc=i+400|0;uc=i+396|0;vc=i+986|0;wc=i+392|0;xc=i+388|0;yc=i+384|0;zc=i+380|0;Ac=i+985|0;Bc=i+376|0;Cc=i+372|0;Dc=i+368|0;Ec=i+364|0;Fc=i+984|0;Gc=i+360|0;Hc=i+356|0;Ic=i+352|0;Jc=i+348|0;Kc=i+983|0;Lc=i+344|0;Mc=i+340|0;Nc=i+336|0;Oc=i+332|0;Pc=i+982|0;Qc=i+328|0;Rc=i+324|0;Sc=i+320|0;Tc=i+316|0;Uc=i+981|0;Vc=i+312|0;Wc=i+308|0;Xc=i+304|0;Yc=i+300|0;Zc=i+980|0;_c=i+296|0;$c=i+292|0;ad=i+288|0;bd=i+284|0;cd=i+979|0;dd=i+280|0;ed=i+276|0;fd=i+272|0;gd=i+268|0;hd=i+978|0;id=i+264|0;jd=i+260|0;kd=i+256|0;ld=i+252|0;md=i+977|0;nd=i+248|0;od=i+244|0;pd=i+240|0;qd=i+236|0;rd=i+976|0;sd=i+232|0;td=i+228|0;ud=i+224|0;vd=i+220|0;wd=i+216|0;xd=i+212|0;yd=i+208|0;zd=i+204|0;Ad=i+200|0;Bd=i+196|0;Cd=i+192|0;Dd=i+172|0;Ed=i+152|0;Fd=i+132|0;Gd=i+112|0;Hd=i+108|0;Id=i+104|0;Jd=i+100|0;Kd=i+96|0;Ld=i+92|0;Md=i+88|0;Nd=i+84|0;Od=i+80|0;Pd=i+76|0;Qd=i+72|0;Rd=i+68|0;Sd=i+64|0;Td=i+60|0;Ud=i+56|0;Vd=i+52|0;Wd=i+48|0;Xd=i+44|0;Yd=i+972|0;Zd=i+40|0;_d=i+36|0;$d=i+32|0;ae=i+28|0;be=i+24|0;ce=i+20|0;de=i+16|0;ee=i+12|0;fe=i+8|0;ge=i+4|0;he=i;c[de>>2]=b;c[ee>>2]=e;c[fe>>2]=f;c[ge>>2]=g;c[he>>2]=h;h=c[ee>>2]|0;ee=c[fe>>2]|0;fe=c[ge>>2]|0;ge=c[he>>2]|0;c[td>>2]=c[de>>2];c[ud>>2]=h;c[vd>>2]=ee;c[wd>>2]=fe;c[xd>>2]=ge;if((c[wd>>2]|0)>>>0<10){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}c[yd>>2]=c[vd>>2];c[zd>>2]=c[td>>2];c[Ad>>2]=(c[zd>>2]|0)+(c[ud>>2]|0);c[Bd>>2]=(c[xd>>2]|0)+4;c[Cd>>2]=c[Bd>>2];c[Hd>>2]=(yp(c[yd>>2]|0)|0)&65535;c[Id>>2]=(yp((c[yd>>2]|0)+2|0)|0)&65535;c[Jd>>2]=(yp((c[yd>>2]|0)+4|0)|0)&65535;c[Kd>>2]=(c[wd>>2]|0)-((c[Hd>>2]|0)+(c[Id>>2]|0)+(c[Jd>>2]|0)+6);c[Ld>>2]=(c[yd>>2]|0)+6;c[Md>>2]=(c[Ld>>2]|0)+(c[Hd>>2]|0);c[Nd>>2]=(c[Md>>2]|0)+(c[Id>>2]|0);c[Od>>2]=(c[Nd>>2]|0)+(c[Jd>>2]|0);c[Pd>>2]=(((c[ud>>2]|0)+3|0)>>>0)/4|0;c[Qd>>2]=(c[zd>>2]|0)+(c[Pd>>2]|0);c[Rd>>2]=(c[Qd>>2]|0)+(c[Pd>>2]|0);c[Sd>>2]=(c[Rd>>2]|0)+(c[Pd>>2]|0);c[Td>>2]=c[zd>>2];c[Ud>>2]=c[Qd>>2];c[Vd>>2]=c[Rd>>2];c[Wd>>2]=c[Sd>>2];c[Xd>>2]=0;bp(Yd,c[xd>>2]|0);c[Zd>>2]=d[Yd+2>>0];if((c[Kd>>2]|0)>>>0>(c[wd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}c[_d>>2]=fp(Dd,c[Ld>>2]|0,c[Hd>>2]|0)|0;if(ap(c[_d>>2]|0)|0){c[sd>>2]=c[_d>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[$d>>2]=fp(Ed,c[Md>>2]|0,c[Id>>2]|0)|0;if(ap(c[$d>>2]|0)|0){c[sd>>2]=c[$d>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[ae>>2]=fp(Fd,c[Nd>>2]|0,c[Jd>>2]|0)|0;if(ap(c[ae>>2]|0)|0){c[sd>>2]=c[ae>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[be>>2]=fp(Gd,c[Od>>2]|0,c[Kd>>2]|0)|0;if(ap(c[be>>2]|0)|0){c[sd>>2]=c[be>>2];ie=c[sd>>2]|0;l=i;return ie|0;}be=gp(Dd)|0;Kd=be|(gp(Ed)|0);be=Kd|(gp(Fd)|0);c[Xd>>2]=be|(gp(Gd)|0);while(1){if(c[Xd>>2]|0)break;if((c[Wd>>2]|0)>>>0>=((c[Ad>>2]|0)+-3|0)>>>0)break;if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[nd>>2]=Dd;c[od>>2]=be;c[pd>>2]=Kd;c[qd>>2]=ip(c[nd>>2]|0,c[pd>>2]|0)|0;a[rd>>0]=a[(c[od>>2]|0)+(c[qd>>2]<<1)>>0]|0;jp(c[nd>>2]|0,d[(c[od>>2]|0)+(c[qd>>2]<<1)+1>>0]|0);Kd=a[rd>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[id>>2]=Ed;c[jd>>2]=Kd;c[kd>>2]=be;c[ld>>2]=ip(c[id>>2]|0,c[kd>>2]|0)|0;a[md>>0]=a[(c[jd>>2]|0)+(c[ld>>2]<<1)>>0]|0;jp(c[id>>2]|0,d[(c[jd>>2]|0)+(c[ld>>2]<<1)+1>>0]|0);be=a[md>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;}if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[dd>>2]=Fd;c[ed>>2]=be;c[fd>>2]=Kd;c[gd>>2]=ip(c[dd>>2]|0,c[fd>>2]|0)|0;a[hd>>0]=a[(c[ed>>2]|0)+(c[gd>>2]<<1)>>0]|0;jp(c[dd>>2]|0,d[(c[ed>>2]|0)+(c[gd>>2]<<1)+1>>0]|0);Kd=a[hd>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[_c>>2]=Gd;c[$c>>2]=Kd;c[ad>>2]=be;c[bd>>2]=ip(c[_c>>2]|0,c[ad>>2]|0)|0;a[cd>>0]=a[(c[$c>>2]|0)+(c[bd>>2]<<1)>>0]|0;jp(c[_c>>2]|0,d[(c[$c>>2]|0)+(c[bd>>2]<<1)+1>>0]|0);be=a[cd>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;}hp()|0;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Vc>>2]=Dd;c[Wc>>2]=be;c[Xc>>2]=Kd;c[Yc>>2]=ip(c[Vc>>2]|0,c[Xc>>2]|0)|0;a[Zc>>0]=a[(c[Wc>>2]|0)+(c[Yc>>2]<<1)>>0]|0;jp(c[Vc>>2]|0,d[(c[Wc>>2]|0)+(c[Yc>>2]<<1)+1>>0]|0);Kd=a[Zc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;hp()|0;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Qc>>2]=Ed;c[Rc>>2]=Kd;c[Sc>>2]=be;c[Tc>>2]=ip(c[Qc>>2]|0,c[Sc>>2]|0)|0;a[Uc>>0]=a[(c[Rc>>2]|0)+(c[Tc>>2]<<1)>>0]|0;jp(c[Qc>>2]|0,d[(c[Rc>>2]|0)+(c[Tc>>2]<<1)+1>>0]|0);be=a[Uc>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;hp()|0;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Lc>>2]=Fd;c[Mc>>2]=be;c[Nc>>2]=Kd;c[Oc>>2]=ip(c[Lc>>2]|0,c[Nc>>2]|0)|0;a[Pc>>0]=a[(c[Mc>>2]|0)+(c[Oc>>2]<<1)>>0]|0;jp(c[Lc>>2]|0,d[(c[Mc>>2]|0)+(c[Oc>>2]<<1)+1>>0]|0);Kd=a[Pc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;hp()|0;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Gc>>2]=Gd;c[Hc>>2]=Kd;c[Ic>>2]=be;c[Jc>>2]=ip(c[Gc>>2]|0,c[Ic>>2]|0)|0;a[Kc>>0]=a[(c[Hc>>2]|0)+(c[Jc>>2]<<1)>>0]|0;jp(c[Gc>>2]|0,d[(c[Hc>>2]|0)+(c[Jc>>2]<<1)+1>>0]|0);be=a[Kc>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Bc>>2]=Dd;c[Cc>>2]=be;c[Dc>>2]=Kd;c[Ec>>2]=ip(c[Bc>>2]|0,c[Dc>>2]|0)|0;a[Fc>>0]=a[(c[Cc>>2]|0)+(c[Ec>>2]<<1)>>0]|0;jp(c[Bc>>2]|0,d[(c[Cc>>2]|0)+(c[Ec>>2]<<1)+1>>0]|0);Kd=a[Fc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[wc>>2]=Ed;c[xc>>2]=Kd;c[yc>>2]=be;c[zc>>2]=ip(c[wc>>2]|0,c[yc>>2]|0)|0;a[Ac>>0]=a[(c[xc>>2]|0)+(c[zc>>2]<<1)>>0]|0;jp(c[wc>>2]|0,d[(c[xc>>2]|0)+(c[zc>>2]<<1)+1>>0]|0);be=a[Ac>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;}if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[rc>>2]=Fd;c[sc>>2]=be;c[tc>>2]=Kd;c[uc>>2]=ip(c[rc>>2]|0,c[tc>>2]|0)|0;a[vc>>0]=a[(c[sc>>2]|0)+(c[uc>>2]<<1)>>0]|0;jp(c[rc>>2]|0,d[(c[sc>>2]|0)+(c[uc>>2]<<1)+1>>0]|0);Kd=a[vc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[mc>>2]=Gd;c[nc>>2]=Kd;c[oc>>2]=be;c[pc>>2]=ip(c[mc>>2]|0,c[oc>>2]|0)|0;a[qc>>0]=a[(c[nc>>2]|0)+(c[pc>>2]<<1)>>0]|0;jp(c[mc>>2]|0,d[(c[nc>>2]|0)+(c[pc>>2]<<1)+1>>0]|0);be=a[qc>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;}be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[hc>>2]=Dd;c[ic>>2]=be;c[jc>>2]=Kd;c[kc>>2]=ip(c[hc>>2]|0,c[jc>>2]|0)|0;a[lc>>0]=a[(c[ic>>2]|0)+(c[kc>>2]<<1)>>0]|0;jp(c[hc>>2]|0,d[(c[ic>>2]|0)+(c[kc>>2]<<1)+1>>0]|0);Kd=a[lc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[cc>>2]=Ed;c[dc>>2]=Kd;c[ec>>2]=be;c[fc>>2]=ip(c[cc>>2]|0,c[ec>>2]|0)|0;a[gc>>0]=a[(c[dc>>2]|0)+(c[fc>>2]<<1)>>0]|0;jp(c[cc>>2]|0,d[(c[dc>>2]|0)+(c[fc>>2]<<1)+1>>0]|0);be=a[gc>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Zb>>2]=Fd;c[_b>>2]=be;c[$b>>2]=Kd;c[ac>>2]=ip(c[Zb>>2]|0,c[$b>>2]|0)|0;a[bc>>0]=a[(c[_b>>2]|0)+(c[ac>>2]<<1)>>0]|0;jp(c[Zb>>2]|0,d[(c[_b>>2]|0)+(c[ac>>2]<<1)+1>>0]|0);Kd=a[bc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Ub>>2]=Gd;c[Vb>>2]=Kd;c[Wb>>2]=be;c[Xb>>2]=ip(c[Ub>>2]|0,c[Wb>>2]|0)|0;a[Yb>>0]=a[(c[Vb>>2]|0)+(c[Xb>>2]<<1)>>0]|0;jp(c[Ub>>2]|0,d[(c[Vb>>2]|0)+(c[Xb>>2]<<1)+1>>0]|0);be=a[Yb>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;gp(Dd)|0;gp(Ed)|0;gp(Fd)|0;gp(Gd)|0;}if((c[Td>>2]|0)>>>0>(c[Qd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}if((c[Ud>>2]|0)>>>0>(c[Rd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}if((c[Vd>>2]|0)>>>0>(c[Sd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}Yb=c[Qd>>2]|0;Qd=c[Cd>>2]|0;Xb=c[Zd>>2]|0;c[Ob>>2]=c[Td>>2];c[Pb>>2]=Dd;c[Qb>>2]=Yb;c[Rb>>2]=Qd;c[Sb>>2]=Xb;c[Tb>>2]=c[Ob>>2];while(1){Tb=(gp(c[Pb>>2]|0)|0)==0&1;if(!(Tb&(c[Ob>>2]|0)>>>0<((c[Qb>>2]|0)+-3|0)>>>0))break;if(hp()|0){Tb=c[Rb>>2]|0;Xb=c[Sb>>2]|0;c[Jb>>2]=c[Pb>>2];c[Kb>>2]=Tb;c[Lb>>2]=Xb;c[Mb>>2]=ip(c[Jb>>2]|0,c[Lb>>2]|0)|0;a[Nb>>0]=a[(c[Kb>>2]|0)+(c[Mb>>2]<<1)>>0]|0;jp(c[Jb>>2]|0,d[(c[Kb>>2]|0)+(c[Mb>>2]<<1)+1>>0]|0);Xb=a[Nb>>0]|0;Tb=c[Ob>>2]|0;c[Ob>>2]=Tb+1;a[Tb>>0]=Xb;}hp()|0;Xb=c[Rb>>2]|0;Tb=c[Sb>>2]|0;c[Eb>>2]=c[Pb>>2];c[Fb>>2]=Xb;c[Gb>>2]=Tb;c[Hb>>2]=ip(c[Eb>>2]|0,c[Gb>>2]|0)|0;a[Ib>>0]=a[(c[Fb>>2]|0)+(c[Hb>>2]<<1)>>0]|0;jp(c[Eb>>2]|0,d[(c[Fb>>2]|0)+(c[Hb>>2]<<1)+1>>0]|0);Tb=a[Ib>>0]|0;Xb=c[Ob>>2]|0;c[Ob>>2]=Xb+1;a[Xb>>0]=Tb;if(hp()|0){Tb=c[Rb>>2]|0;Xb=c[Sb>>2]|0;c[zb>>2]=c[Pb>>2];c[Ab>>2]=Tb;c[Bb>>2]=Xb;c[Cb>>2]=ip(c[zb>>2]|0,c[Bb>>2]|0)|0;a[Db>>0]=a[(c[Ab>>2]|0)+(c[Cb>>2]<<1)>>0]|0;jp(c[zb>>2]|0,d[(c[Ab>>2]|0)+(c[Cb>>2]<<1)+1>>0]|0);Xb=a[Db>>0]|0;Tb=c[Ob>>2]|0;c[Ob>>2]=Tb+1;a[Tb>>0]=Xb;}Xb=c[Rb>>2]|0;Tb=c[Sb>>2]|0;c[ub>>2]=c[Pb>>2];c[vb>>2]=Xb;c[wb>>2]=Tb;c[xb>>2]=ip(c[ub>>2]|0,c[wb>>2]|0)|0;a[yb>>0]=a[(c[vb>>2]|0)+(c[xb>>2]<<1)>>0]|0;jp(c[ub>>2]|0,d[(c[vb>>2]|0)+(c[xb>>2]<<1)+1>>0]|0);Tb=a[yb>>0]|0;Xb=c[Ob>>2]|0;c[Ob>>2]=Xb+1;a[Xb>>0]=Tb;}a:do{if(kp()|0)while(1){yb=(gp(c[Pb>>2]|0)|0)==0&1;if(!(yb&(c[Ob>>2]|0)>>>0<(c[Qb>>2]|0)>>>0))break a;yb=c[Rb>>2]|0;xb=c[Sb>>2]|0;c[pb>>2]=c[Pb>>2];c[qb>>2]=yb;c[rb>>2]=xb;c[sb>>2]=ip(c[pb>>2]|0,c[rb>>2]|0)|0;a[tb>>0]=a[(c[qb>>2]|0)+(c[sb>>2]<<1)>>0]|0;jp(c[pb>>2]|0,d[(c[qb>>2]|0)+(c[sb>>2]<<1)+1>>0]|0);xb=a[tb>>0]|0;yb=c[Ob>>2]|0;c[Ob>>2]=yb+1;a[yb>>0]=xb;}}while(0);while(1){if((c[Ob>>2]|0)>>>0>=(c[Qb>>2]|0)>>>0)break;tb=c[Rb>>2]|0;sb=c[Sb>>2]|0;c[kb>>2]=c[Pb>>2];c[lb>>2]=tb;c[mb>>2]=sb;c[nb>>2]=ip(c[kb>>2]|0,c[mb>>2]|0)|0;a[ob>>0]=a[(c[lb>>2]|0)+(c[nb>>2]<<1)>>0]|0;jp(c[kb>>2]|0,d[(c[lb>>2]|0)+(c[nb>>2]<<1)+1>>0]|0);sb=a[ob>>0]|0;tb=c[Ob>>2]|0;c[Ob>>2]=tb+1;a[tb>>0]=sb;}Ob=c[Rd>>2]|0;Rd=c[Cd>>2]|0;ob=c[Zd>>2]|0;c[eb>>2]=c[Ud>>2];c[fb>>2]=Ed;c[gb>>2]=Ob;c[hb>>2]=Rd;c[ib>>2]=ob;c[jb>>2]=c[eb>>2];while(1){jb=(gp(c[fb>>2]|0)|0)==0&1;if(!(jb&(c[eb>>2]|0)>>>0<((c[gb>>2]|0)+-3|0)>>>0))break;if(hp()|0){jb=c[hb>>2]|0;ob=c[ib>>2]|0;c[$a>>2]=c[fb>>2];c[ab>>2]=jb;c[bb>>2]=ob;c[cb>>2]=ip(c[$a>>2]|0,c[bb>>2]|0)|0;a[db>>0]=a[(c[ab>>2]|0)+(c[cb>>2]<<1)>>0]|0;jp(c[$a>>2]|0,d[(c[ab>>2]|0)+(c[cb>>2]<<1)+1>>0]|0);ob=a[db>>0]|0;jb=c[eb>>2]|0;c[eb>>2]=jb+1;a[jb>>0]=ob;}hp()|0;ob=c[hb>>2]|0;jb=c[ib>>2]|0;c[Wa>>2]=c[fb>>2];c[Xa>>2]=ob;c[Ya>>2]=jb;c[Za>>2]=ip(c[Wa>>2]|0,c[Ya>>2]|0)|0;a[_a>>0]=a[(c[Xa>>2]|0)+(c[Za>>2]<<1)>>0]|0;jp(c[Wa>>2]|0,d[(c[Xa>>2]|0)+(c[Za>>2]<<1)+1>>0]|0);jb=a[_a>>0]|0;ob=c[eb>>2]|0;c[eb>>2]=ob+1;a[ob>>0]=jb;if(hp()|0){jb=c[hb>>2]|0;ob=c[ib>>2]|0;c[Ra>>2]=c[fb>>2];c[Sa>>2]=jb;c[Ta>>2]=ob;c[Ua>>2]=ip(c[Ra>>2]|0,c[Ta>>2]|0)|0;a[Va>>0]=a[(c[Sa>>2]|0)+(c[Ua>>2]<<1)>>0]|0;jp(c[Ra>>2]|0,d[(c[Sa>>2]|0)+(c[Ua>>2]<<1)+1>>0]|0);ob=a[Va>>0]|0;jb=c[eb>>2]|0;c[eb>>2]=jb+1;a[jb>>0]=ob;}ob=c[hb>>2]|0;jb=c[ib>>2]|0;c[Ma>>2]=c[fb>>2];c[Na>>2]=ob;c[Oa>>2]=jb;c[Pa>>2]=ip(c[Ma>>2]|0,c[Oa>>2]|0)|0;a[Qa>>0]=a[(c[Na>>2]|0)+(c[Pa>>2]<<1)>>0]|0;jp(c[Ma>>2]|0,d[(c[Na>>2]|0)+(c[Pa>>2]<<1)+1>>0]|0);jb=a[Qa>>0]|0;ob=c[eb>>2]|0;c[eb>>2]=ob+1;a[ob>>0]=jb;}b:do{if(kp()|0)while(1){Qa=(gp(c[fb>>2]|0)|0)==0&1;if(!(Qa&(c[eb>>2]|0)>>>0<(c[gb>>2]|0)>>>0))break b;Qa=c[hb>>2]|0;Pa=c[ib>>2]|0;c[Ha>>2]=c[fb>>2];c[Ia>>2]=Qa;c[Ja>>2]=Pa;c[Ka>>2]=ip(c[Ha>>2]|0,c[Ja>>2]|0)|0;a[La>>0]=a[(c[Ia>>2]|0)+(c[Ka>>2]<<1)>>0]|0;jp(c[Ha>>2]|0,d[(c[Ia>>2]|0)+(c[Ka>>2]<<1)+1>>0]|0);Pa=a[La>>0]|0;Qa=c[eb>>2]|0;c[eb>>2]=Qa+1;a[Qa>>0]=Pa;}}while(0);while(1){if((c[eb>>2]|0)>>>0>=(c[gb>>2]|0)>>>0)break;La=c[hb>>2]|0;Ka=c[ib>>2]|0;c[Ca>>2]=c[fb>>2];c[Da>>2]=La;c[Ea>>2]=Ka;c[Fa>>2]=ip(c[Ca>>2]|0,c[Ea>>2]|0)|0;a[Ga>>0]=a[(c[Da>>2]|0)+(c[Fa>>2]<<1)>>0]|0;jp(c[Ca>>2]|0,d[(c[Da>>2]|0)+(c[Fa>>2]<<1)+1>>0]|0);Ka=a[Ga>>0]|0;La=c[eb>>2]|0;c[eb>>2]=La+1;a[La>>0]=Ka;}eb=c[Sd>>2]|0;Sd=c[Cd>>2]|0;Ga=c[Zd>>2]|0;c[wa>>2]=c[Vd>>2];c[xa>>2]=Fd;c[ya>>2]=eb;c[za>>2]=Sd;c[Aa>>2]=Ga;c[Ba>>2]=c[wa>>2];while(1){Ba=(gp(c[xa>>2]|0)|0)==0&1;if(!(Ba&(c[wa>>2]|0)>>>0<((c[ya>>2]|0)+-3|0)>>>0))break;if(hp()|0){Ba=c[za>>2]|0;Ga=c[Aa>>2]|0;c[ra>>2]=c[xa>>2];c[sa>>2]=Ba;c[ta>>2]=Ga;c[ua>>2]=ip(c[ra>>2]|0,c[ta>>2]|0)|0;a[va>>0]=a[(c[sa>>2]|0)+(c[ua>>2]<<1)>>0]|0;jp(c[ra>>2]|0,d[(c[sa>>2]|0)+(c[ua>>2]<<1)+1>>0]|0);Ga=a[va>>0]|0;Ba=c[wa>>2]|0;c[wa>>2]=Ba+1;a[Ba>>0]=Ga;}hp()|0;Ga=c[za>>2]|0;Ba=c[Aa>>2]|0;c[ma>>2]=c[xa>>2];c[na>>2]=Ga;c[oa>>2]=Ba;c[pa>>2]=ip(c[ma>>2]|0,c[oa>>2]|0)|0;a[qa>>0]=a[(c[na>>2]|0)+(c[pa>>2]<<1)>>0]|0;jp(c[ma>>2]|0,d[(c[na>>2]|0)+(c[pa>>2]<<1)+1>>0]|0);Ba=a[qa>>0]|0;Ga=c[wa>>2]|0;c[wa>>2]=Ga+1;a[Ga>>0]=Ba;if(hp()|0){Ba=c[za>>2]|0;Ga=c[Aa>>2]|0;c[ha>>2]=c[xa>>2];c[ia>>2]=Ba;c[ja>>2]=Ga;c[ka>>2]=ip(c[ha>>2]|0,c[ja>>2]|0)|0;a[la>>0]=a[(c[ia>>2]|0)+(c[ka>>2]<<1)>>0]|0;jp(c[ha>>2]|0,d[(c[ia>>2]|0)+(c[ka>>2]<<1)+1>>0]|0);Ga=a[la>>0]|0;Ba=c[wa>>2]|0;c[wa>>2]=Ba+1;a[Ba>>0]=Ga;}Ga=c[za>>2]|0;Ba=c[Aa>>2]|0;c[ca>>2]=c[xa>>2];c[da>>2]=Ga;c[ea>>2]=Ba;c[fa>>2]=ip(c[ca>>2]|0,c[ea>>2]|0)|0;a[ga>>0]=a[(c[da>>2]|0)+(c[fa>>2]<<1)>>0]|0;jp(c[ca>>2]|0,d[(c[da>>2]|0)+(c[fa>>2]<<1)+1>>0]|0);Ba=a[ga>>0]|0;Ga=c[wa>>2]|0;c[wa>>2]=Ga+1;a[Ga>>0]=Ba;}c:do{if(kp()|0)while(1){ga=(gp(c[xa>>2]|0)|0)==0&1;if(!(ga&(c[wa>>2]|0)>>>0<(c[ya>>2]|0)>>>0))break c;ga=c[za>>2]|0;fa=c[Aa>>2]|0;c[Z>>2]=c[xa>>2];c[_>>2]=ga;c[$>>2]=fa;c[aa>>2]=ip(c[Z>>2]|0,c[$>>2]|0)|0;a[ba>>0]=a[(c[_>>2]|0)+(c[aa>>2]<<1)>>0]|0;jp(c[Z>>2]|0,d[(c[_>>2]|0)+(c[aa>>2]<<1)+1>>0]|0);fa=a[ba>>0]|0;ga=c[wa>>2]|0;c[wa>>2]=ga+1;a[ga>>0]=fa;}}while(0);while(1){if((c[wa>>2]|0)>>>0>=(c[ya>>2]|0)>>>0)break;ba=c[za>>2]|0;aa=c[Aa>>2]|0;c[U>>2]=c[xa>>2];c[V>>2]=ba;c[W>>2]=aa;c[X>>2]=ip(c[U>>2]|0,c[W>>2]|0)|0;a[Y>>0]=a[(c[V>>2]|0)+(c[X>>2]<<1)>>0]|0;jp(c[U>>2]|0,d[(c[V>>2]|0)+(c[X>>2]<<1)+1>>0]|0);aa=a[Y>>0]|0;ba=c[wa>>2]|0;c[wa>>2]=ba+1;a[ba>>0]=aa;}wa=c[Ad>>2]|0;Ad=c[Cd>>2]|0;Cd=c[Zd>>2]|0;c[O>>2]=c[Wd>>2];c[P>>2]=Gd;c[Q>>2]=wa;c[R>>2]=Ad;c[S>>2]=Cd;c[T>>2]=c[O>>2];while(1){T=(gp(c[P>>2]|0)|0)==0&1;if(!(T&(c[O>>2]|0)>>>0<((c[Q>>2]|0)+-3|0)>>>0))break;if(hp()|0){T=c[R>>2]|0;Cd=c[S>>2]|0;c[J>>2]=c[P>>2];c[K>>2]=T;c[L>>2]=Cd;c[M>>2]=ip(c[J>>2]|0,c[L>>2]|0)|0;a[N>>0]=a[(c[K>>2]|0)+(c[M>>2]<<1)>>0]|0;jp(c[J>>2]|0,d[(c[K>>2]|0)+(c[M>>2]<<1)+1>>0]|0);Cd=a[N>>0]|0;T=c[O>>2]|0;c[O>>2]=T+1;a[T>>0]=Cd;}hp()|0;Cd=c[R>>2]|0;T=c[S>>2]|0;c[E>>2]=c[P>>2];c[F>>2]=Cd;c[G>>2]=T;c[H>>2]=ip(c[E>>2]|0,c[G>>2]|0)|0;a[I>>0]=a[(c[F>>2]|0)+(c[H>>2]<<1)>>0]|0;jp(c[E>>2]|0,d[(c[F>>2]|0)+(c[H>>2]<<1)+1>>0]|0);T=a[I>>0]|0;Cd=c[O>>2]|0;c[O>>2]=Cd+1;a[Cd>>0]=T;if(hp()|0){T=c[R>>2]|0;Cd=c[S>>2]|0;c[z>>2]=c[P>>2];c[A>>2]=T;c[B>>2]=Cd;c[C>>2]=ip(c[z>>2]|0,c[B>>2]|0)|0;a[D>>0]=a[(c[A>>2]|0)+(c[C>>2]<<1)>>0]|0;jp(c[z>>2]|0,d[(c[A>>2]|0)+(c[C>>2]<<1)+1>>0]|0);Cd=a[D>>0]|0;T=c[O>>2]|0;c[O>>2]=T+1;a[T>>0]=Cd;}Cd=c[R>>2]|0;T=c[S>>2]|0;c[u>>2]=c[P>>2];c[v>>2]=Cd;c[w>>2]=T;c[x>>2]=ip(c[u>>2]|0,c[w>>2]|0)|0;a[y>>0]=a[(c[v>>2]|0)+(c[x>>2]<<1)>>0]|0;jp(c[u>>2]|0,d[(c[v>>2]|0)+(c[x>>2]<<1)+1>>0]|0);T=a[y>>0]|0;Cd=c[O>>2]|0;c[O>>2]=Cd+1;a[Cd>>0]=T;}d:do{if(kp()|0)while(1){y=(gp(c[P>>2]|0)|0)==0&1;if(!(y&(c[O>>2]|0)>>>0<(c[Q>>2]|0)>>>0))break d;y=c[R>>2]|0;x=c[S>>2]|0;c[p>>2]=c[P>>2];c[q>>2]=y;c[r>>2]=x;c[s>>2]=ip(c[p>>2]|0,c[r>>2]|0)|0;a[t>>0]=a[(c[q>>2]|0)+(c[s>>2]<<1)>>0]|0;jp(c[p>>2]|0,d[(c[q>>2]|0)+(c[s>>2]<<1)+1>>0]|0);x=a[t>>0]|0;y=c[O>>2]|0;c[O>>2]=y+1;a[y>>0]=x;}}while(0);while(1){if((c[O>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break;t=c[R>>2]|0;s=c[S>>2]|0;c[j>>2]=c[P>>2];c[k>>2]=t;c[m>>2]=s;c[n>>2]=ip(c[j>>2]|0,c[m>>2]|0)|0;a[o>>0]=a[(c[k>>2]|0)+(c[n>>2]<<1)>>0]|0;jp(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<1)+1>>0]|0);s=a[o>>0]|0;t=c[O>>2]|0;c[O>>2]=t+1;a[t>>0]=s;}O=lp(Dd)|0;Dd=O&(lp(Ed)|0);Ed=Dd&(lp(Fd)|0);c[ce>>2]=Ed&(lp(Gd)|0);if(c[ce>>2]|0){c[sd>>2]=c[ud>>2];ie=c[sd>>2]|0;l=i;return ie|0;}else{c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}return 0;}function xp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0;i=l;l=l+1024|0;j=i+968|0;k=i+964|0;m=i+960|0;n=i+956|0;o=i+1015|0;p=i+952|0;q=i+948|0;r=i+944|0;s=i+940|0;t=i+1014|0;u=i+936|0;v=i+932|0;w=i+928|0;x=i+924|0;y=i+1013|0;z=i+920|0;A=i+916|0;B=i+912|0;C=i+908|0;D=i+1012|0;E=i+904|0;F=i+900|0;G=i+896|0;H=i+892|0;I=i+1011|0;J=i+888|0;K=i+884|0;L=i+880|0;M=i+876|0;N=i+1010|0;O=i+872|0;P=i+868|0;Q=i+864|0;R=i+860|0;S=i+856|0;T=i+852|0;U=i+848|0;V=i+844|0;W=i+840|0;X=i+836|0;Y=i+1009|0;Z=i+832|0;_=i+828|0;$=i+824|0;aa=i+820|0;ba=i+1008|0;ca=i+816|0;da=i+812|0;ea=i+808|0;fa=i+804|0;ga=i+1007|0;ha=i+800|0;ia=i+796|0;ja=i+792|0;ka=i+788|0;la=i+1006|0;ma=i+784|0;na=i+780|0;oa=i+776|0;pa=i+772|0;qa=i+1005|0;ra=i+768|0;sa=i+764|0;ta=i+760|0;ua=i+756|0;va=i+1004|0;wa=i+752|0;xa=i+748|0;ya=i+744|0;za=i+740|0;Aa=i+736|0;Ba=i+732|0;Ca=i+728|0;Da=i+724|0;Ea=i+720|0;Fa=i+716|0;Ga=i+1003|0;Ha=i+712|0;Ia=i+708|0;Ja=i+704|0;Ka=i+700|0;La=i+1002|0;Ma=i+696|0;Na=i+692|0;Oa=i+688|0;Pa=i+684|0;Qa=i+1001|0;Ra=i+680|0;Sa=i+676|0;Ta=i+672|0;Ua=i+668|0;Va=i+1e3|0;Wa=i+664|0;Xa=i+660|0;Ya=i+656|0;Za=i+652|0;_a=i+999|0;$a=i+648|0;ab=i+644|0;bb=i+640|0;cb=i+636|0;db=i+998|0;eb=i+632|0;fb=i+628|0;gb=i+624|0;hb=i+620|0;ib=i+616|0;jb=i+612|0;kb=i+608|0;lb=i+604|0;mb=i+600|0;nb=i+596|0;ob=i+997|0;pb=i+592|0;qb=i+588|0;rb=i+584|0;sb=i+580|0;tb=i+996|0;ub=i+576|0;vb=i+572|0;wb=i+568|0;xb=i+564|0;yb=i+995|0;zb=i+560|0;Ab=i+556|0;Bb=i+552|0;Cb=i+548|0;Db=i+994|0;Eb=i+544|0;Fb=i+540|0;Gb=i+536|0;Hb=i+532|0;Ib=i+993|0;Jb=i+528|0;Kb=i+524|0;Lb=i+520|0;Mb=i+516|0;Nb=i+992|0;Ob=i+512|0;Pb=i+508|0;Qb=i+504|0;Rb=i+500|0;Sb=i+496|0;Tb=i+492|0;Ub=i+488|0;Vb=i+484|0;Wb=i+480|0;Xb=i+476|0;Yb=i+991|0;Zb=i+472|0;_b=i+468|0;$b=i+464|0;ac=i+460|0;bc=i+990|0;cc=i+456|0;dc=i+452|0;ec=i+448|0;fc=i+444|0;gc=i+989|0;hc=i+440|0;ic=i+436|0;jc=i+432|0;kc=i+428|0;lc=i+988|0;mc=i+424|0;nc=i+420|0;oc=i+416|0;pc=i+412|0;qc=i+987|0;rc=i+408|0;sc=i+404|0;tc=i+400|0;uc=i+396|0;vc=i+986|0;wc=i+392|0;xc=i+388|0;yc=i+384|0;zc=i+380|0;Ac=i+985|0;Bc=i+376|0;Cc=i+372|0;Dc=i+368|0;Ec=i+364|0;Fc=i+984|0;Gc=i+360|0;Hc=i+356|0;Ic=i+352|0;Jc=i+348|0;Kc=i+983|0;Lc=i+344|0;Mc=i+340|0;Nc=i+336|0;Oc=i+332|0;Pc=i+982|0;Qc=i+328|0;Rc=i+324|0;Sc=i+320|0;Tc=i+316|0;Uc=i+981|0;Vc=i+312|0;Wc=i+308|0;Xc=i+304|0;Yc=i+300|0;Zc=i+980|0;_c=i+296|0;$c=i+292|0;ad=i+288|0;bd=i+284|0;cd=i+979|0;dd=i+280|0;ed=i+276|0;fd=i+272|0;gd=i+268|0;hd=i+978|0;id=i+264|0;jd=i+260|0;kd=i+256|0;ld=i+252|0;md=i+977|0;nd=i+248|0;od=i+244|0;pd=i+240|0;qd=i+236|0;rd=i+976|0;sd=i+232|0;td=i+228|0;ud=i+224|0;vd=i+220|0;wd=i+216|0;xd=i+212|0;yd=i+208|0;zd=i+204|0;Ad=i+200|0;Bd=i+196|0;Cd=i+192|0;Dd=i+172|0;Ed=i+152|0;Fd=i+132|0;Gd=i+112|0;Hd=i+108|0;Id=i+104|0;Jd=i+100|0;Kd=i+96|0;Ld=i+92|0;Md=i+88|0;Nd=i+84|0;Od=i+80|0;Pd=i+76|0;Qd=i+72|0;Rd=i+68|0;Sd=i+64|0;Td=i+60|0;Ud=i+56|0;Vd=i+52|0;Wd=i+48|0;Xd=i+44|0;Yd=i+972|0;Zd=i+40|0;_d=i+36|0;$d=i+32|0;ae=i+28|0;be=i+24|0;ce=i+20|0;de=i+16|0;ee=i+12|0;fe=i+8|0;ge=i+4|0;he=i;c[de>>2]=b;c[ee>>2]=e;c[fe>>2]=f;c[ge>>2]=g;c[he>>2]=h;h=c[ee>>2]|0;ee=c[fe>>2]|0;fe=c[ge>>2]|0;ge=c[he>>2]|0;c[td>>2]=c[de>>2];c[ud>>2]=h;c[vd>>2]=ee;c[wd>>2]=fe;c[xd>>2]=ge;if((c[wd>>2]|0)>>>0<10){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}c[yd>>2]=c[vd>>2];c[zd>>2]=c[td>>2];c[Ad>>2]=(c[zd>>2]|0)+(c[ud>>2]|0);c[Bd>>2]=(c[xd>>2]|0)+4;c[Cd>>2]=c[Bd>>2];c[Hd>>2]=(yp(c[yd>>2]|0)|0)&65535;c[Id>>2]=(yp((c[yd>>2]|0)+2|0)|0)&65535;c[Jd>>2]=(yp((c[yd>>2]|0)+4|0)|0)&65535;c[Kd>>2]=(c[wd>>2]|0)-((c[Hd>>2]|0)+(c[Id>>2]|0)+(c[Jd>>2]|0)+6);c[Ld>>2]=(c[yd>>2]|0)+6;c[Md>>2]=(c[Ld>>2]|0)+(c[Hd>>2]|0);c[Nd>>2]=(c[Md>>2]|0)+(c[Id>>2]|0);c[Od>>2]=(c[Nd>>2]|0)+(c[Jd>>2]|0);c[Pd>>2]=(((c[ud>>2]|0)+3|0)>>>0)/4|0;c[Qd>>2]=(c[zd>>2]|0)+(c[Pd>>2]|0);c[Rd>>2]=(c[Qd>>2]|0)+(c[Pd>>2]|0);c[Sd>>2]=(c[Rd>>2]|0)+(c[Pd>>2]|0);c[Td>>2]=c[zd>>2];c[Ud>>2]=c[Qd>>2];c[Vd>>2]=c[Rd>>2];c[Wd>>2]=c[Sd>>2];c[Xd>>2]=0;bp(Yd,c[xd>>2]|0);c[Zd>>2]=d[Yd+2>>0];if((c[Kd>>2]|0)>>>0>(c[wd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}c[_d>>2]=fp(Dd,c[Ld>>2]|0,c[Hd>>2]|0)|0;if(ap(c[_d>>2]|0)|0){c[sd>>2]=c[_d>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[$d>>2]=fp(Ed,c[Md>>2]|0,c[Id>>2]|0)|0;if(ap(c[$d>>2]|0)|0){c[sd>>2]=c[$d>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[ae>>2]=fp(Fd,c[Nd>>2]|0,c[Jd>>2]|0)|0;if(ap(c[ae>>2]|0)|0){c[sd>>2]=c[ae>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[be>>2]=fp(Gd,c[Od>>2]|0,c[Kd>>2]|0)|0;if(ap(c[be>>2]|0)|0){c[sd>>2]=c[be>>2];ie=c[sd>>2]|0;l=i;return ie|0;}be=gp(Dd)|0;Kd=be|(gp(Ed)|0);be=Kd|(gp(Fd)|0);c[Xd>>2]=be|(gp(Gd)|0);while(1){if(c[Xd>>2]|0)break;if((c[Wd>>2]|0)>>>0>=((c[Ad>>2]|0)+-3|0)>>>0)break;if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[nd>>2]=Dd;c[od>>2]=be;c[pd>>2]=Kd;c[qd>>2]=ip(c[nd>>2]|0,c[pd>>2]|0)|0;a[rd>>0]=a[(c[od>>2]|0)+(c[qd>>2]<<1)>>0]|0;jp(c[nd>>2]|0,d[(c[od>>2]|0)+(c[qd>>2]<<1)+1>>0]|0);Kd=a[rd>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[id>>2]=Ed;c[jd>>2]=Kd;c[kd>>2]=be;c[ld>>2]=ip(c[id>>2]|0,c[kd>>2]|0)|0;a[md>>0]=a[(c[jd>>2]|0)+(c[ld>>2]<<1)>>0]|0;jp(c[id>>2]|0,d[(c[jd>>2]|0)+(c[ld>>2]<<1)+1>>0]|0);be=a[md>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;}if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[dd>>2]=Fd;c[ed>>2]=be;c[fd>>2]=Kd;c[gd>>2]=ip(c[dd>>2]|0,c[fd>>2]|0)|0;a[hd>>0]=a[(c[ed>>2]|0)+(c[gd>>2]<<1)>>0]|0;jp(c[dd>>2]|0,d[(c[ed>>2]|0)+(c[gd>>2]<<1)+1>>0]|0);Kd=a[hd>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[_c>>2]=Gd;c[$c>>2]=Kd;c[ad>>2]=be;c[bd>>2]=ip(c[_c>>2]|0,c[ad>>2]|0)|0;a[cd>>0]=a[(c[$c>>2]|0)+(c[bd>>2]<<1)>>0]|0;jp(c[_c>>2]|0,d[(c[$c>>2]|0)+(c[bd>>2]<<1)+1>>0]|0);be=a[cd>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;}hp()|0;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Vc>>2]=Dd;c[Wc>>2]=be;c[Xc>>2]=Kd;c[Yc>>2]=ip(c[Vc>>2]|0,c[Xc>>2]|0)|0;a[Zc>>0]=a[(c[Wc>>2]|0)+(c[Yc>>2]<<1)>>0]|0;jp(c[Vc>>2]|0,d[(c[Wc>>2]|0)+(c[Yc>>2]<<1)+1>>0]|0);Kd=a[Zc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;hp()|0;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Qc>>2]=Ed;c[Rc>>2]=Kd;c[Sc>>2]=be;c[Tc>>2]=ip(c[Qc>>2]|0,c[Sc>>2]|0)|0;a[Uc>>0]=a[(c[Rc>>2]|0)+(c[Tc>>2]<<1)>>0]|0;jp(c[Qc>>2]|0,d[(c[Rc>>2]|0)+(c[Tc>>2]<<1)+1>>0]|0);be=a[Uc>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;hp()|0;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Lc>>2]=Fd;c[Mc>>2]=be;c[Nc>>2]=Kd;c[Oc>>2]=ip(c[Lc>>2]|0,c[Nc>>2]|0)|0;a[Pc>>0]=a[(c[Mc>>2]|0)+(c[Oc>>2]<<1)>>0]|0;jp(c[Lc>>2]|0,d[(c[Mc>>2]|0)+(c[Oc>>2]<<1)+1>>0]|0);Kd=a[Pc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;hp()|0;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Gc>>2]=Gd;c[Hc>>2]=Kd;c[Ic>>2]=be;c[Jc>>2]=ip(c[Gc>>2]|0,c[Ic>>2]|0)|0;a[Kc>>0]=a[(c[Hc>>2]|0)+(c[Jc>>2]<<1)>>0]|0;jp(c[Gc>>2]|0,d[(c[Hc>>2]|0)+(c[Jc>>2]<<1)+1>>0]|0);be=a[Kc>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Bc>>2]=Dd;c[Cc>>2]=be;c[Dc>>2]=Kd;c[Ec>>2]=ip(c[Bc>>2]|0,c[Dc>>2]|0)|0;a[Fc>>0]=a[(c[Cc>>2]|0)+(c[Ec>>2]<<1)>>0]|0;jp(c[Bc>>2]|0,d[(c[Cc>>2]|0)+(c[Ec>>2]<<1)+1>>0]|0);Kd=a[Fc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[wc>>2]=Ed;c[xc>>2]=Kd;c[yc>>2]=be;c[zc>>2]=ip(c[wc>>2]|0,c[yc>>2]|0)|0;a[Ac>>0]=a[(c[xc>>2]|0)+(c[zc>>2]<<1)>>0]|0;jp(c[wc>>2]|0,d[(c[xc>>2]|0)+(c[zc>>2]<<1)+1>>0]|0);be=a[Ac>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;}if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[rc>>2]=Fd;c[sc>>2]=be;c[tc>>2]=Kd;c[uc>>2]=ip(c[rc>>2]|0,c[tc>>2]|0)|0;a[vc>>0]=a[(c[sc>>2]|0)+(c[uc>>2]<<1)>>0]|0;jp(c[rc>>2]|0,d[(c[sc>>2]|0)+(c[uc>>2]<<1)+1>>0]|0);Kd=a[vc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[mc>>2]=Gd;c[nc>>2]=Kd;c[oc>>2]=be;c[pc>>2]=ip(c[mc>>2]|0,c[oc>>2]|0)|0;a[qc>>0]=a[(c[nc>>2]|0)+(c[pc>>2]<<1)>>0]|0;jp(c[mc>>2]|0,d[(c[nc>>2]|0)+(c[pc>>2]<<1)+1>>0]|0);be=a[qc>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;}be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[hc>>2]=Dd;c[ic>>2]=be;c[jc>>2]=Kd;c[kc>>2]=ip(c[hc>>2]|0,c[jc>>2]|0)|0;a[lc>>0]=a[(c[ic>>2]|0)+(c[kc>>2]<<1)>>0]|0;jp(c[hc>>2]|0,d[(c[ic>>2]|0)+(c[kc>>2]<<1)+1>>0]|0);Kd=a[lc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[cc>>2]=Ed;c[dc>>2]=Kd;c[ec>>2]=be;c[fc>>2]=ip(c[cc>>2]|0,c[ec>>2]|0)|0;a[gc>>0]=a[(c[dc>>2]|0)+(c[fc>>2]<<1)>>0]|0;jp(c[cc>>2]|0,d[(c[dc>>2]|0)+(c[fc>>2]<<1)+1>>0]|0);be=a[gc>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Zb>>2]=Fd;c[_b>>2]=be;c[$b>>2]=Kd;c[ac>>2]=ip(c[Zb>>2]|0,c[$b>>2]|0)|0;a[bc>>0]=a[(c[_b>>2]|0)+(c[ac>>2]<<1)>>0]|0;jp(c[Zb>>2]|0,d[(c[_b>>2]|0)+(c[ac>>2]<<1)+1>>0]|0);Kd=a[bc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Ub>>2]=Gd;c[Vb>>2]=Kd;c[Wb>>2]=be;c[Xb>>2]=ip(c[Ub>>2]|0,c[Wb>>2]|0)|0;a[Yb>>0]=a[(c[Vb>>2]|0)+(c[Xb>>2]<<1)>>0]|0;jp(c[Ub>>2]|0,d[(c[Vb>>2]|0)+(c[Xb>>2]<<1)+1>>0]|0);be=a[Yb>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;gp(Dd)|0;gp(Ed)|0;gp(Fd)|0;gp(Gd)|0;}if((c[Td>>2]|0)>>>0>(c[Qd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}if((c[Ud>>2]|0)>>>0>(c[Rd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}if((c[Vd>>2]|0)>>>0>(c[Sd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}Yb=c[Qd>>2]|0;Qd=c[Cd>>2]|0;Xb=c[Zd>>2]|0;c[Ob>>2]=c[Td>>2];c[Pb>>2]=Dd;c[Qb>>2]=Yb;c[Rb>>2]=Qd;c[Sb>>2]=Xb;c[Tb>>2]=c[Ob>>2];while(1){Tb=(gp(c[Pb>>2]|0)|0)==0&1;if(!(Tb&(c[Ob>>2]|0)>>>0<((c[Qb>>2]|0)+-3|0)>>>0))break;if(hp()|0){Tb=c[Rb>>2]|0;Xb=c[Sb>>2]|0;c[Jb>>2]=c[Pb>>2];c[Kb>>2]=Tb;c[Lb>>2]=Xb;c[Mb>>2]=ip(c[Jb>>2]|0,c[Lb>>2]|0)|0;a[Nb>>0]=a[(c[Kb>>2]|0)+(c[Mb>>2]<<1)>>0]|0;jp(c[Jb>>2]|0,d[(c[Kb>>2]|0)+(c[Mb>>2]<<1)+1>>0]|0);Xb=a[Nb>>0]|0;Tb=c[Ob>>2]|0;c[Ob>>2]=Tb+1;a[Tb>>0]=Xb;}hp()|0;Xb=c[Rb>>2]|0;Tb=c[Sb>>2]|0;c[Eb>>2]=c[Pb>>2];c[Fb>>2]=Xb;c[Gb>>2]=Tb;c[Hb>>2]=ip(c[Eb>>2]|0,c[Gb>>2]|0)|0;a[Ib>>0]=a[(c[Fb>>2]|0)+(c[Hb>>2]<<1)>>0]|0;jp(c[Eb>>2]|0,d[(c[Fb>>2]|0)+(c[Hb>>2]<<1)+1>>0]|0);Tb=a[Ib>>0]|0;Xb=c[Ob>>2]|0;c[Ob>>2]=Xb+1;a[Xb>>0]=Tb;if(hp()|0){Tb=c[Rb>>2]|0;Xb=c[Sb>>2]|0;c[zb>>2]=c[Pb>>2];c[Ab>>2]=Tb;c[Bb>>2]=Xb;c[Cb>>2]=ip(c[zb>>2]|0,c[Bb>>2]|0)|0;a[Db>>0]=a[(c[Ab>>2]|0)+(c[Cb>>2]<<1)>>0]|0;jp(c[zb>>2]|0,d[(c[Ab>>2]|0)+(c[Cb>>2]<<1)+1>>0]|0);Xb=a[Db>>0]|0;Tb=c[Ob>>2]|0;c[Ob>>2]=Tb+1;a[Tb>>0]=Xb;}Xb=c[Rb>>2]|0;Tb=c[Sb>>2]|0;c[ub>>2]=c[Pb>>2];c[vb>>2]=Xb;c[wb>>2]=Tb;c[xb>>2]=ip(c[ub>>2]|0,c[wb>>2]|0)|0;a[yb>>0]=a[(c[vb>>2]|0)+(c[xb>>2]<<1)>>0]|0;jp(c[ub>>2]|0,d[(c[vb>>2]|0)+(c[xb>>2]<<1)+1>>0]|0);Tb=a[yb>>0]|0;Xb=c[Ob>>2]|0;c[Ob>>2]=Xb+1;a[Xb>>0]=Tb;}a:do{if(kp()|0)while(1){yb=(gp(c[Pb>>2]|0)|0)==0&1;if(!(yb&(c[Ob>>2]|0)>>>0<(c[Qb>>2]|0)>>>0))break a;yb=c[Rb>>2]|0;xb=c[Sb>>2]|0;c[pb>>2]=c[Pb>>2];c[qb>>2]=yb;c[rb>>2]=xb;c[sb>>2]=ip(c[pb>>2]|0,c[rb>>2]|0)|0;a[tb>>0]=a[(c[qb>>2]|0)+(c[sb>>2]<<1)>>0]|0;jp(c[pb>>2]|0,d[(c[qb>>2]|0)+(c[sb>>2]<<1)+1>>0]|0);xb=a[tb>>0]|0;yb=c[Ob>>2]|0;c[Ob>>2]=yb+1;a[yb>>0]=xb;}}while(0);while(1){if((c[Ob>>2]|0)>>>0>=(c[Qb>>2]|0)>>>0)break;tb=c[Rb>>2]|0;sb=c[Sb>>2]|0;c[kb>>2]=c[Pb>>2];c[lb>>2]=tb;c[mb>>2]=sb;c[nb>>2]=ip(c[kb>>2]|0,c[mb>>2]|0)|0;a[ob>>0]=a[(c[lb>>2]|0)+(c[nb>>2]<<1)>>0]|0;jp(c[kb>>2]|0,d[(c[lb>>2]|0)+(c[nb>>2]<<1)+1>>0]|0);sb=a[ob>>0]|0;tb=c[Ob>>2]|0;c[Ob>>2]=tb+1;a[tb>>0]=sb;}Ob=c[Rd>>2]|0;Rd=c[Cd>>2]|0;ob=c[Zd>>2]|0;c[eb>>2]=c[Ud>>2];c[fb>>2]=Ed;c[gb>>2]=Ob;c[hb>>2]=Rd;c[ib>>2]=ob;c[jb>>2]=c[eb>>2];while(1){jb=(gp(c[fb>>2]|0)|0)==0&1;if(!(jb&(c[eb>>2]|0)>>>0<((c[gb>>2]|0)+-3|0)>>>0))break;if(hp()|0){jb=c[hb>>2]|0;ob=c[ib>>2]|0;c[$a>>2]=c[fb>>2];c[ab>>2]=jb;c[bb>>2]=ob;c[cb>>2]=ip(c[$a>>2]|0,c[bb>>2]|0)|0;a[db>>0]=a[(c[ab>>2]|0)+(c[cb>>2]<<1)>>0]|0;jp(c[$a>>2]|0,d[(c[ab>>2]|0)+(c[cb>>2]<<1)+1>>0]|0);ob=a[db>>0]|0;jb=c[eb>>2]|0;c[eb>>2]=jb+1;a[jb>>0]=ob;}hp()|0;ob=c[hb>>2]|0;jb=c[ib>>2]|0;c[Wa>>2]=c[fb>>2];c[Xa>>2]=ob;c[Ya>>2]=jb;c[Za>>2]=ip(c[Wa>>2]|0,c[Ya>>2]|0)|0;a[_a>>0]=a[(c[Xa>>2]|0)+(c[Za>>2]<<1)>>0]|0;jp(c[Wa>>2]|0,d[(c[Xa>>2]|0)+(c[Za>>2]<<1)+1>>0]|0);jb=a[_a>>0]|0;ob=c[eb>>2]|0;c[eb>>2]=ob+1;a[ob>>0]=jb;if(hp()|0){jb=c[hb>>2]|0;ob=c[ib>>2]|0;c[Ra>>2]=c[fb>>2];c[Sa>>2]=jb;c[Ta>>2]=ob;c[Ua>>2]=ip(c[Ra>>2]|0,c[Ta>>2]|0)|0;a[Va>>0]=a[(c[Sa>>2]|0)+(c[Ua>>2]<<1)>>0]|0;jp(c[Ra>>2]|0,d[(c[Sa>>2]|0)+(c[Ua>>2]<<1)+1>>0]|0);ob=a[Va>>0]|0;jb=c[eb>>2]|0;c[eb>>2]=jb+1;a[jb>>0]=ob;}ob=c[hb>>2]|0;jb=c[ib>>2]|0;c[Ma>>2]=c[fb>>2];c[Na>>2]=ob;c[Oa>>2]=jb;c[Pa>>2]=ip(c[Ma>>2]|0,c[Oa>>2]|0)|0;a[Qa>>0]=a[(c[Na>>2]|0)+(c[Pa>>2]<<1)>>0]|0;jp(c[Ma>>2]|0,d[(c[Na>>2]|0)+(c[Pa>>2]<<1)+1>>0]|0);jb=a[Qa>>0]|0;ob=c[eb>>2]|0;c[eb>>2]=ob+1;a[ob>>0]=jb;}b:do{if(kp()|0)while(1){Qa=(gp(c[fb>>2]|0)|0)==0&1;if(!(Qa&(c[eb>>2]|0)>>>0<(c[gb>>2]|0)>>>0))break b;Qa=c[hb>>2]|0;Pa=c[ib>>2]|0;c[Ha>>2]=c[fb>>2];c[Ia>>2]=Qa;c[Ja>>2]=Pa;c[Ka>>2]=ip(c[Ha>>2]|0,c[Ja>>2]|0)|0;a[La>>0]=a[(c[Ia>>2]|0)+(c[Ka>>2]<<1)>>0]|0;jp(c[Ha>>2]|0,d[(c[Ia>>2]|0)+(c[Ka>>2]<<1)+1>>0]|0);Pa=a[La>>0]|0;Qa=c[eb>>2]|0;c[eb>>2]=Qa+1;a[Qa>>0]=Pa;}}while(0);while(1){if((c[eb>>2]|0)>>>0>=(c[gb>>2]|0)>>>0)break;La=c[hb>>2]|0;Ka=c[ib>>2]|0;c[Ca>>2]=c[fb>>2];c[Da>>2]=La;c[Ea>>2]=Ka;c[Fa>>2]=ip(c[Ca>>2]|0,c[Ea>>2]|0)|0;a[Ga>>0]=a[(c[Da>>2]|0)+(c[Fa>>2]<<1)>>0]|0;jp(c[Ca>>2]|0,d[(c[Da>>2]|0)+(c[Fa>>2]<<1)+1>>0]|0);Ka=a[Ga>>0]|0;La=c[eb>>2]|0;c[eb>>2]=La+1;a[La>>0]=Ka;}eb=c[Sd>>2]|0;Sd=c[Cd>>2]|0;Ga=c[Zd>>2]|0;c[wa>>2]=c[Vd>>2];c[xa>>2]=Fd;c[ya>>2]=eb;c[za>>2]=Sd;c[Aa>>2]=Ga;c[Ba>>2]=c[wa>>2];while(1){Ba=(gp(c[xa>>2]|0)|0)==0&1;if(!(Ba&(c[wa>>2]|0)>>>0<((c[ya>>2]|0)+-3|0)>>>0))break;if(hp()|0){Ba=c[za>>2]|0;Ga=c[Aa>>2]|0;c[ra>>2]=c[xa>>2];c[sa>>2]=Ba;c[ta>>2]=Ga;c[ua>>2]=ip(c[ra>>2]|0,c[ta>>2]|0)|0;a[va>>0]=a[(c[sa>>2]|0)+(c[ua>>2]<<1)>>0]|0;jp(c[ra>>2]|0,d[(c[sa>>2]|0)+(c[ua>>2]<<1)+1>>0]|0);Ga=a[va>>0]|0;Ba=c[wa>>2]|0;c[wa>>2]=Ba+1;a[Ba>>0]=Ga;}hp()|0;Ga=c[za>>2]|0;Ba=c[Aa>>2]|0;c[ma>>2]=c[xa>>2];c[na>>2]=Ga;c[oa>>2]=Ba;c[pa>>2]=ip(c[ma>>2]|0,c[oa>>2]|0)|0;a[qa>>0]=a[(c[na>>2]|0)+(c[pa>>2]<<1)>>0]|0;jp(c[ma>>2]|0,d[(c[na>>2]|0)+(c[pa>>2]<<1)+1>>0]|0);Ba=a[qa>>0]|0;Ga=c[wa>>2]|0;c[wa>>2]=Ga+1;a[Ga>>0]=Ba;if(hp()|0){Ba=c[za>>2]|0;Ga=c[Aa>>2]|0;c[ha>>2]=c[xa>>2];c[ia>>2]=Ba;c[ja>>2]=Ga;c[ka>>2]=ip(c[ha>>2]|0,c[ja>>2]|0)|0;a[la>>0]=a[(c[ia>>2]|0)+(c[ka>>2]<<1)>>0]|0;jp(c[ha>>2]|0,d[(c[ia>>2]|0)+(c[ka>>2]<<1)+1>>0]|0);Ga=a[la>>0]|0;Ba=c[wa>>2]|0;c[wa>>2]=Ba+1;a[Ba>>0]=Ga;}Ga=c[za>>2]|0;Ba=c[Aa>>2]|0;c[ca>>2]=c[xa>>2];c[da>>2]=Ga;c[ea>>2]=Ba;c[fa>>2]=ip(c[ca>>2]|0,c[ea>>2]|0)|0;a[ga>>0]=a[(c[da>>2]|0)+(c[fa>>2]<<1)>>0]|0;jp(c[ca>>2]|0,d[(c[da>>2]|0)+(c[fa>>2]<<1)+1>>0]|0);Ba=a[ga>>0]|0;Ga=c[wa>>2]|0;c[wa>>2]=Ga+1;a[Ga>>0]=Ba;}c:do{if(kp()|0)while(1){ga=(gp(c[xa>>2]|0)|0)==0&1;if(!(ga&(c[wa>>2]|0)>>>0<(c[ya>>2]|0)>>>0))break c;ga=c[za>>2]|0;fa=c[Aa>>2]|0;c[Z>>2]=c[xa>>2];c[_>>2]=ga;c[$>>2]=fa;c[aa>>2]=ip(c[Z>>2]|0,c[$>>2]|0)|0;a[ba>>0]=a[(c[_>>2]|0)+(c[aa>>2]<<1)>>0]|0;jp(c[Z>>2]|0,d[(c[_>>2]|0)+(c[aa>>2]<<1)+1>>0]|0);fa=a[ba>>0]|0;ga=c[wa>>2]|0;c[wa>>2]=ga+1;a[ga>>0]=fa;}}while(0);while(1){if((c[wa>>2]|0)>>>0>=(c[ya>>2]|0)>>>0)break;ba=c[za>>2]|0;aa=c[Aa>>2]|0;c[U>>2]=c[xa>>2];c[V>>2]=ba;c[W>>2]=aa;c[X>>2]=ip(c[U>>2]|0,c[W>>2]|0)|0;a[Y>>0]=a[(c[V>>2]|0)+(c[X>>2]<<1)>>0]|0;jp(c[U>>2]|0,d[(c[V>>2]|0)+(c[X>>2]<<1)+1>>0]|0);aa=a[Y>>0]|0;ba=c[wa>>2]|0;c[wa>>2]=ba+1;a[ba>>0]=aa;}wa=c[Ad>>2]|0;Ad=c[Cd>>2]|0;Cd=c[Zd>>2]|0;c[O>>2]=c[Wd>>2];c[P>>2]=Gd;c[Q>>2]=wa;c[R>>2]=Ad;c[S>>2]=Cd;c[T>>2]=c[O>>2];while(1){T=(gp(c[P>>2]|0)|0)==0&1;if(!(T&(c[O>>2]|0)>>>0<((c[Q>>2]|0)+-3|0)>>>0))break;if(hp()|0){T=c[R>>2]|0;Cd=c[S>>2]|0;c[J>>2]=c[P>>2];c[K>>2]=T;c[L>>2]=Cd;c[M>>2]=ip(c[J>>2]|0,c[L>>2]|0)|0;a[N>>0]=a[(c[K>>2]|0)+(c[M>>2]<<1)>>0]|0;jp(c[J>>2]|0,d[(c[K>>2]|0)+(c[M>>2]<<1)+1>>0]|0);Cd=a[N>>0]|0;T=c[O>>2]|0;c[O>>2]=T+1;a[T>>0]=Cd;}hp()|0;Cd=c[R>>2]|0;T=c[S>>2]|0;c[E>>2]=c[P>>2];c[F>>2]=Cd;c[G>>2]=T;c[H>>2]=ip(c[E>>2]|0,c[G>>2]|0)|0;a[I>>0]=a[(c[F>>2]|0)+(c[H>>2]<<1)>>0]|0;jp(c[E>>2]|0,d[(c[F>>2]|0)+(c[H>>2]<<1)+1>>0]|0);T=a[I>>0]|0;Cd=c[O>>2]|0;c[O>>2]=Cd+1;a[Cd>>0]=T;if(hp()|0){T=c[R>>2]|0;Cd=c[S>>2]|0;c[z>>2]=c[P>>2];c[A>>2]=T;c[B>>2]=Cd;c[C>>2]=ip(c[z>>2]|0,c[B>>2]|0)|0;a[D>>0]=a[(c[A>>2]|0)+(c[C>>2]<<1)>>0]|0;jp(c[z>>2]|0,d[(c[A>>2]|0)+(c[C>>2]<<1)+1>>0]|0);Cd=a[D>>0]|0;T=c[O>>2]|0;c[O>>2]=T+1;a[T>>0]=Cd;}Cd=c[R>>2]|0;T=c[S>>2]|0;c[u>>2]=c[P>>2];c[v>>2]=Cd;c[w>>2]=T;c[x>>2]=ip(c[u>>2]|0,c[w>>2]|0)|0;a[y>>0]=a[(c[v>>2]|0)+(c[x>>2]<<1)>>0]|0;jp(c[u>>2]|0,d[(c[v>>2]|0)+(c[x>>2]<<1)+1>>0]|0);T=a[y>>0]|0;Cd=c[O>>2]|0;c[O>>2]=Cd+1;a[Cd>>0]=T;}d:do{if(kp()|0)while(1){y=(gp(c[P>>2]|0)|0)==0&1;if(!(y&(c[O>>2]|0)>>>0<(c[Q>>2]|0)>>>0))break d;y=c[R>>2]|0;x=c[S>>2]|0;c[p>>2]=c[P>>2];c[q>>2]=y;c[r>>2]=x;c[s>>2]=ip(c[p>>2]|0,c[r>>2]|0)|0;a[t>>0]=a[(c[q>>2]|0)+(c[s>>2]<<1)>>0]|0;jp(c[p>>2]|0,d[(c[q>>2]|0)+(c[s>>2]<<1)+1>>0]|0);x=a[t>>0]|0;y=c[O>>2]|0;c[O>>2]=y+1;a[y>>0]=x;}}while(0);while(1){if((c[O>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break;t=c[R>>2]|0;s=c[S>>2]|0;c[j>>2]=c[P>>2];c[k>>2]=t;c[m>>2]=s;c[n>>2]=ip(c[j>>2]|0,c[m>>2]|0)|0;a[o>>0]=a[(c[k>>2]|0)+(c[n>>2]<<1)>>0]|0;jp(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<1)+1>>0]|0);s=a[o>>0]|0;t=c[O>>2]|0;c[O>>2]=t+1;a[t>>0]=s;}O=lp(Dd)|0;Dd=O&(lp(Ed)|0);Ed=Dd&(lp(Fd)|0);c[ce>>2]=Ed&(lp(Gd)|0);if(c[ce>>2]|0){c[sd>>2]=c[ud>>2];ie=c[sd>>2]|0;l=i;return ie|0;}else{c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}return 0;}function yp(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(pp()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=zp(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function zp(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Ap(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+40|0;m=j+36|0;n=j+32|0;o=j+28|0;p=j+24|0;q=j+20|0;r=j+16|0;s=j+12|0;t=j+8|0;u=j+4|0;v=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=c[p>>2];c[v>>2]=$o(c[m>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0;s=(ap(c[v>>2]|0)|0)!=0;r=c[v>>2]|0;if(s){c[k>>2]=r;w=c[k>>2]|0;l=j;return w|0;}if(r>>>0>=(c[q>>2]|0)>>>0){c[k>>2]=-72;w=c[k>>2]|0;l=j;return w|0;}else{c[u>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[v>>2]|0);c[k>>2]=vp(c[n>>2]|0,c[o>>2]|0,c[u>>2]|0,c[q>>2]|0,c[m>>2]|0,c[t>>2]|0)|0;w=c[k>>2]|0;l=j;return w|0;}return 0;}function Bp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;i=l;l=l+160|0;j=i+140|0;k=i+136|0;m=i+132|0;n=i+128|0;o=i+124|0;p=i+120|0;q=i+116|0;r=i+112|0;s=i+108|0;t=i+104|0;u=i+144|0;v=i+100|0;w=i+96|0;x=i+92|0;y=i+88|0;z=i+84|0;A=i+80|0;B=i+76|0;C=i+72|0;D=i+68|0;E=i+64|0;F=i+60|0;G=i+56|0;H=i+52|0;I=i+48|0;J=i+44|0;K=i+40|0;L=i+36|0;M=i+32|0;N=i+28|0;O=i+24|0;P=i+20|0;Q=i+16|0;R=i+12|0;S=i+8|0;T=i+4|0;U=i;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;bp(u,c[k>>2]|0);c[v>>2]=d[u>>0];c[x>>2]=(c[k>>2]|0)+4;c[y>>2]=c[x>>2];c[F>>2]=0;c[A>>2]=(c[o>>2]|0)+(c[F>>2]<<2);c[F>>2]=(c[F>>2]|0)+156;c[B>>2]=(c[o>>2]|0)+(c[F>>2]<<2);c[F>>2]=(c[F>>2]|0)+13;c[C>>2]=(c[o>>2]|0)+(c[F>>2]<<2);c[F>>2]=(c[F>>2]|0)+14;c[D>>2]=(c[o>>2]|0)+(((c[F>>2]<<2>>>0)/2|0)<<1);c[F>>2]=(c[F>>2]|0)+128;c[E>>2]=(c[o>>2]|0)+(c[F>>2]<<2);c[F>>2]=(c[F>>2]|0)+64;if(c[F>>2]<<2>>>0>(c[p>>2]|0)>>>0){c[j>>2]=-44;V=c[j>>2]|0;l=i;return V|0;}c[z>>2]=(c[C>>2]|0)+4;p=c[B>>2]|0;F=p+108|0;do{c[p>>2]=0;p=p+4|0;}while((p|0)<(F|0));if((c[v>>2]|0)>>>0>12){c[j>>2]=-44;V=c[j>>2]|0;l=i;return V|0;}c[w>>2]=fh(c[E>>2]|0,256,c[B>>2]|0,t,q,c[m>>2]|0,c[n>>2]|0)|0;if(ap(c[w>>2]|0)|0){c[j>>2]=c[w>>2];V=c[j>>2]|0;l=i;return V|0;}if((c[q>>2]|0)>>>0>(c[v>>2]|0)>>>0){c[j>>2]=-44;V=c[j>>2]|0;l=i;return V|0;}c[r>>2]=c[q>>2];while(1){if(c[(c[B>>2]|0)+(c[r>>2]<<2)>>2]|0)break;c[r>>2]=(c[r>>2]|0)+-1;}c[H>>2]=0;c[G>>2]=1;while(1){W=c[H>>2]|0;if((c[G>>2]|0)>>>0>=((c[r>>2]|0)+1|0)>>>0)break;c[I>>2]=W;c[H>>2]=(c[H>>2]|0)+(c[(c[B>>2]|0)+(c[G>>2]<<2)>>2]|0);c[(c[z>>2]|0)+(c[G>>2]<<2)>>2]=c[I>>2];c[G>>2]=(c[G>>2]|0)+1;}c[c[z>>2]>>2]=W;c[s>>2]=c[H>>2];c[J>>2]=0;while(1){if((c[J>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;c[K>>2]=d[(c[E>>2]|0)+(c[J>>2]|0)>>0];H=(c[z>>2]|0)+(c[K>>2]<<2)|0;W=c[H>>2]|0;c[H>>2]=W+1;c[L>>2]=W;a[(c[D>>2]|0)+(c[L>>2]<<1)>>0]=c[J>>2];a[(c[D>>2]|0)+(c[L>>2]<<1)+1>>0]=c[K>>2];c[J>>2]=(c[J>>2]|0)+1;}c[c[z>>2]>>2]=0;c[M>>2]=c[A>>2];c[N>>2]=(c[v>>2]|0)-(c[q>>2]|0)-1;c[O>>2]=0;c[P>>2]=1;while(1){if((c[P>>2]|0)>>>0>=((c[r>>2]|0)+1|0)>>>0)break;c[Q>>2]=c[O>>2];c[O>>2]=(c[O>>2]|0)+(c[(c[B>>2]|0)+(c[P>>2]<<2)>>2]<<(c[P>>2]|0)+(c[N>>2]|0));c[(c[M>>2]|0)+(c[P>>2]<<2)>>2]=c[Q>>2];c[P>>2]=(c[P>>2]|0)+1;}c[R>>2]=(c[q>>2]|0)+1-(c[r>>2]|0);c[S>>2]=c[R>>2];while(1){if((c[S>>2]|0)>>>0>=((c[v>>2]|0)-(c[R>>2]|0)+1|0)>>>0)break;c[T>>2]=(c[A>>2]|0)+((c[S>>2]|0)*52|0);c[U>>2]=1;while(1){if((c[U>>2]|0)>>>0>=((c[r>>2]|0)+1|0)>>>0)break;c[(c[T>>2]|0)+(c[U>>2]<<2)>>2]=(c[(c[M>>2]|0)+(c[U>>2]<<2)>>2]|0)>>>(c[S>>2]|0);c[U>>2]=(c[U>>2]|0)+1;}c[S>>2]=(c[S>>2]|0)+1;}Cp(c[y>>2]|0,c[v>>2]|0,c[D>>2]|0,c[s>>2]|0,c[C>>2]|0,c[A>>2]|0,c[r>>2]|0,(c[q>>2]|0)+1|0);a[u+2>>0]=c[v>>2];a[u+1>>0]=1;v=c[k>>2]|0;a[v>>0]=a[u>>0]|0;a[v+1>>0]=a[u+1>>0]|0;a[v+2>>0]=a[u+2>>0]|0;a[v+3>>0]=a[u+3>>0]|0;c[j>>2]=c[w>>2];V=c[j>>2]|0;l=i;return V|0;}function Cp(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+144|0;o=n+124|0;p=n+120|0;q=n+116|0;r=n+112|0;s=n+108|0;t=n+104|0;u=n+100|0;v=n+96|0;w=n;x=n+92|0;y=n+88|0;z=n+84|0;A=n+132|0;B=n+80|0;C=n+76|0;D=n+72|0;E=n+68|0;F=n+64|0;G=n+60|0;H=n+128|0;I=n+56|0;J=n+52|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+52|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];Dp((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*52|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{Ep(H,b[A>>1]|0);a[H+2>>0]=c[C>>2];a[H+3>>0]=1;c[I>>2]=(c[D>>2]|0)+(c[E>>2]|0);c[J>>2]=c[D>>2];while(1){if((c[J>>2]|0)>>>0>=(c[I>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[J>>2]<<2)|0;b[m>>1]=b[H>>1]|0;b[m+2>>1]=b[H+2>>1]|0;c[J>>2]=(c[J>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function Dp(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+144|0;q=p+120|0;r=p+116|0;s=p+112|0;t=p+108|0;u=p+104|0;v=p+100|0;w=p+96|0;x=p+92|0;y=p+128|0;z=p+124|0;A=p;B=p+88|0;C=p+84|0;D=p+80|0;E=p+76|0;F=p+72|0;G=p+68|0;H=p+64|0;I=p+60|0;J=p+56|0;K=p+52|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+52|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[C>>2]=c[A+(c[u>>2]<<2)>>2];Ep(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[C>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[B>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[B>>2]=(c[B>>2]|0)+1;}}}while(0);c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);Ep(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{B=c[q>>2]|0;C=c[J>>2]|0;c[J>>2]=C+1;u=B+(C<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}l=p;return;}function Ep(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(pp()|0)!=0;d=c[h>>2]|0;if(f){Fp(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function Fp(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=b[h>>1]|0;h=c[g>>2]|0;a[h>>0]=e;a[h+1>>0]=e>>8;l=f;return;}function Gp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=Hp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=Ip(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function Hp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;i=l;l=l+256|0;j=i+244|0;k=i+240|0;m=i+236|0;n=i+232|0;o=i+228|0;p=i+224|0;q=i+220|0;r=i+216|0;s=i+212|0;t=i+208|0;u=i+204|0;v=i+200|0;w=i+196|0;x=i+192|0;y=i+188|0;z=i+184|0;A=i+180|0;B=i+176|0;C=i+172|0;D=i+168|0;E=i+164|0;F=i+160|0;G=i+156|0;H=i+152|0;I=i+148|0;J=i+144|0;K=i+140|0;L=i+136|0;M=i+132|0;N=i+128|0;O=i+124|0;P=i+120|0;Q=i+116|0;R=i+112|0;S=i+108|0;T=i+104|0;U=i+100|0;V=i+96|0;W=i+92|0;X=i+88|0;Y=i+80|0;Z=i+76|0;_=i+72|0;$=i+68|0;aa=i+64|0;ba=i+60|0;ca=i+40|0;da=i+36|0;ea=i+32|0;fa=i+28|0;ga=i+24|0;ha=i+20|0;ia=i+248|0;ja=i+16|0;ka=i+12|0;la=i+8|0;ma=i+4|0;na=i;c[ja>>2]=b;c[ka>>2]=e;c[la>>2]=f;c[ma>>2]=g;c[na>>2]=h;h=c[ka>>2]|0;ka=c[la>>2]|0;la=c[ma>>2]|0;ma=c[na>>2]|0;c[Z>>2]=c[ja>>2];c[_>>2]=h;c[$>>2]=ka;c[aa>>2]=la;c[ba>>2]=ma;c[da>>2]=fp(ca,c[$>>2]|0,c[aa>>2]|0)|0;if(ap(c[da>>2]|0)|0){c[Y>>2]=c[da>>2];oa=c[Y>>2]|0;l=i;return oa|0;}c[ea>>2]=c[Z>>2];c[fa>>2]=(c[ea>>2]|0)+(c[_>>2]|0);c[ga>>2]=(c[ba>>2]|0)+4;c[ha>>2]=c[ga>>2];bp(ia,c[ba>>2]|0);ba=c[fa>>2]|0;fa=c[ha>>2]|0;ha=d[ia+2>>0]|0;c[T>>2]=c[ea>>2];c[U>>2]=ca;c[V>>2]=ba;c[W>>2]=fa;c[X>>2]=ha;c[i+84>>2]=c[T>>2];while(1){ha=(gp(c[U>>2]|0)|0)==0&1;if(!(ha&(c[T>>2]|0)>>>0<((c[V>>2]|0)+-3|0)>>>0))break;if(hp()|0){ha=c[U>>2]|0;fa=c[W>>2]|0;ba=c[X>>2]|0;c[O>>2]=c[T>>2];c[P>>2]=ha;c[Q>>2]=fa;c[R>>2]=ba;c[S>>2]=ip(c[P>>2]|0,c[R>>2]|0)|0;ba=c[O>>2]|0;fa=(c[Q>>2]|0)+(c[S>>2]<<2)|0;a[ba>>0]=a[fa>>0]|0;a[ba+1>>0]=a[fa+1>>0]|0;jp(c[P>>2]|0,d[(c[Q>>2]|0)+(c[S>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[Q>>2]|0)+(c[S>>2]<<2)+3>>0]|0);}hp()|0;fa=c[U>>2]|0;ba=c[W>>2]|0;ha=c[X>>2]|0;c[J>>2]=c[T>>2];c[K>>2]=fa;c[L>>2]=ba;c[M>>2]=ha;c[N>>2]=ip(c[K>>2]|0,c[M>>2]|0)|0;ha=c[J>>2]|0;ba=(c[L>>2]|0)+(c[N>>2]<<2)|0;a[ha>>0]=a[ba>>0]|0;a[ha+1>>0]=a[ba+1>>0]|0;jp(c[K>>2]|0,d[(c[L>>2]|0)+(c[N>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[L>>2]|0)+(c[N>>2]<<2)+3>>0]|0);if(hp()|0){ba=c[U>>2]|0;ha=c[W>>2]|0;fa=c[X>>2]|0;c[E>>2]=c[T>>2];c[F>>2]=ba;c[G>>2]=ha;c[H>>2]=fa;c[I>>2]=ip(c[F>>2]|0,c[H>>2]|0)|0;fa=c[E>>2]|0;ha=(c[G>>2]|0)+(c[I>>2]<<2)|0;a[fa>>0]=a[ha>>0]|0;a[fa+1>>0]=a[ha+1>>0]|0;jp(c[F>>2]|0,d[(c[G>>2]|0)+(c[I>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[G>>2]|0)+(c[I>>2]<<2)+3>>0]|0);}ha=c[U>>2]|0;fa=c[W>>2]|0;ba=c[X>>2]|0;c[z>>2]=c[T>>2];c[A>>2]=ha;c[B>>2]=fa;c[C>>2]=ba;c[D>>2]=ip(c[A>>2]|0,c[C>>2]|0)|0;ba=c[z>>2]|0;fa=(c[B>>2]|0)+(c[D>>2]<<2)|0;a[ba>>0]=a[fa>>0]|0;a[ba+1>>0]=a[fa+1>>0]|0;jp(c[A>>2]|0,d[(c[B>>2]|0)+(c[D>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[B>>2]|0)+(c[D>>2]<<2)+3>>0]|0);}while(1){D=(gp(c[U>>2]|0)|0)==0&1;if(!(D&(c[T>>2]|0)>>>0<=((c[V>>2]|0)+-2|0)>>>0))break;D=c[U>>2]|0;B=c[W>>2]|0;A=c[X>>2]|0;c[u>>2]=c[T>>2];c[v>>2]=D;c[w>>2]=B;c[x>>2]=A;c[y>>2]=ip(c[v>>2]|0,c[x>>2]|0)|0;A=c[u>>2]|0;B=(c[w>>2]|0)+(c[y>>2]<<2)|0;a[A>>0]=a[B>>0]|0;a[A+1>>0]=a[B+1>>0]|0;jp(c[v>>2]|0,d[(c[w>>2]|0)+(c[y>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[w>>2]|0)+(c[y>>2]<<2)+3>>0]|0);}while(1){pa=c[T>>2]|0;if((c[T>>2]|0)>>>0>((c[V>>2]|0)+-2|0)>>>0)break;y=c[U>>2]|0;w=c[W>>2]|0;v=c[X>>2]|0;c[p>>2]=pa;c[q>>2]=y;c[r>>2]=w;c[s>>2]=v;c[t>>2]=ip(c[q>>2]|0,c[s>>2]|0)|0;v=c[p>>2]|0;w=(c[r>>2]|0)+(c[t>>2]<<2)|0;a[v>>0]=a[w>>0]|0;a[v+1>>0]=a[w+1>>0]|0;jp(c[q>>2]|0,d[(c[r>>2]|0)+(c[t>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[r>>2]|0)+(c[t>>2]<<2)+3>>0]|0);}if(pa>>>0<(c[V>>2]|0)>>>0){V=c[U>>2]|0;U=c[W>>2]|0;W=c[X>>2]|0;c[j>>2]=c[T>>2];c[k>>2]=V;c[m>>2]=U;c[n>>2]=W;c[o>>2]=ip(c[k>>2]|0,c[n>>2]|0)|0;a[c[j>>2]>>0]=a[(c[m>>2]|0)+(c[o>>2]<<2)>>0]|0;j=c[k>>2]|0;if((d[(c[m>>2]|0)+(c[o>>2]<<2)+3>>0]|0|0)!=1){if((c[j+4>>2]|0)>>>0<32?(jp(c[k>>2]|0,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0),(c[(c[k>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[k>>2]|0)+4>>2]=32;}else jp(j,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+1;}if(lp(ca)|0){c[Y>>2]=c[_>>2];oa=c[Y>>2]|0;l=i;return oa|0;}else{c[Y>>2]=-20;oa=c[Y>>2]|0;l=i;return oa|0;}return 0;}function Ip(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;i=l;l=l+256|0;j=i+244|0;k=i+240|0;m=i+236|0;n=i+232|0;o=i+228|0;p=i+224|0;q=i+220|0;r=i+216|0;s=i+212|0;t=i+208|0;u=i+204|0;v=i+200|0;w=i+196|0;x=i+192|0;y=i+188|0;z=i+184|0;A=i+180|0;B=i+176|0;C=i+172|0;D=i+168|0;E=i+164|0;F=i+160|0;G=i+156|0;H=i+152|0;I=i+148|0;J=i+144|0;K=i+140|0;L=i+136|0;M=i+132|0;N=i+128|0;O=i+124|0;P=i+120|0;Q=i+116|0;R=i+112|0;S=i+108|0;T=i+104|0;U=i+100|0;V=i+96|0;W=i+92|0;X=i+88|0;Y=i+80|0;Z=i+76|0;_=i+72|0;$=i+68|0;aa=i+64|0;ba=i+60|0;ca=i+40|0;da=i+36|0;ea=i+32|0;fa=i+28|0;ga=i+24|0;ha=i+20|0;ia=i+248|0;ja=i+16|0;ka=i+12|0;la=i+8|0;ma=i+4|0;na=i;c[ja>>2]=b;c[ka>>2]=e;c[la>>2]=f;c[ma>>2]=g;c[na>>2]=h;h=c[ka>>2]|0;ka=c[la>>2]|0;la=c[ma>>2]|0;ma=c[na>>2]|0;c[Z>>2]=c[ja>>2];c[_>>2]=h;c[$>>2]=ka;c[aa>>2]=la;c[ba>>2]=ma;c[da>>2]=fp(ca,c[$>>2]|0,c[aa>>2]|0)|0;if(ap(c[da>>2]|0)|0){c[Y>>2]=c[da>>2];oa=c[Y>>2]|0;l=i;return oa|0;}c[ea>>2]=c[Z>>2];c[fa>>2]=(c[ea>>2]|0)+(c[_>>2]|0);c[ga>>2]=(c[ba>>2]|0)+4;c[ha>>2]=c[ga>>2];bp(ia,c[ba>>2]|0);ba=c[fa>>2]|0;fa=c[ha>>2]|0;ha=d[ia+2>>0]|0;c[T>>2]=c[ea>>2];c[U>>2]=ca;c[V>>2]=ba;c[W>>2]=fa;c[X>>2]=ha;c[i+84>>2]=c[T>>2];while(1){ha=(gp(c[U>>2]|0)|0)==0&1;if(!(ha&(c[T>>2]|0)>>>0<((c[V>>2]|0)+-3|0)>>>0))break;if(hp()|0){ha=c[U>>2]|0;fa=c[W>>2]|0;ba=c[X>>2]|0;c[O>>2]=c[T>>2];c[P>>2]=ha;c[Q>>2]=fa;c[R>>2]=ba;c[S>>2]=ip(c[P>>2]|0,c[R>>2]|0)|0;ba=c[O>>2]|0;fa=(c[Q>>2]|0)+(c[S>>2]<<2)|0;a[ba>>0]=a[fa>>0]|0;a[ba+1>>0]=a[fa+1>>0]|0;jp(c[P>>2]|0,d[(c[Q>>2]|0)+(c[S>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[Q>>2]|0)+(c[S>>2]<<2)+3>>0]|0);}hp()|0;fa=c[U>>2]|0;ba=c[W>>2]|0;ha=c[X>>2]|0;c[J>>2]=c[T>>2];c[K>>2]=fa;c[L>>2]=ba;c[M>>2]=ha;c[N>>2]=ip(c[K>>2]|0,c[M>>2]|0)|0;ha=c[J>>2]|0;ba=(c[L>>2]|0)+(c[N>>2]<<2)|0;a[ha>>0]=a[ba>>0]|0;a[ha+1>>0]=a[ba+1>>0]|0;jp(c[K>>2]|0,d[(c[L>>2]|0)+(c[N>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[L>>2]|0)+(c[N>>2]<<2)+3>>0]|0);if(hp()|0){ba=c[U>>2]|0;ha=c[W>>2]|0;fa=c[X>>2]|0;c[E>>2]=c[T>>2];c[F>>2]=ba;c[G>>2]=ha;c[H>>2]=fa;c[I>>2]=ip(c[F>>2]|0,c[H>>2]|0)|0;fa=c[E>>2]|0;ha=(c[G>>2]|0)+(c[I>>2]<<2)|0;a[fa>>0]=a[ha>>0]|0;a[fa+1>>0]=a[ha+1>>0]|0;jp(c[F>>2]|0,d[(c[G>>2]|0)+(c[I>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[G>>2]|0)+(c[I>>2]<<2)+3>>0]|0);}ha=c[U>>2]|0;fa=c[W>>2]|0;ba=c[X>>2]|0;c[z>>2]=c[T>>2];c[A>>2]=ha;c[B>>2]=fa;c[C>>2]=ba;c[D>>2]=ip(c[A>>2]|0,c[C>>2]|0)|0;ba=c[z>>2]|0;fa=(c[B>>2]|0)+(c[D>>2]<<2)|0;a[ba>>0]=a[fa>>0]|0;a[ba+1>>0]=a[fa+1>>0]|0;jp(c[A>>2]|0,d[(c[B>>2]|0)+(c[D>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[B>>2]|0)+(c[D>>2]<<2)+3>>0]|0);}while(1){D=(gp(c[U>>2]|0)|0)==0&1;if(!(D&(c[T>>2]|0)>>>0<=((c[V>>2]|0)+-2|0)>>>0))break;D=c[U>>2]|0;B=c[W>>2]|0;A=c[X>>2]|0;c[u>>2]=c[T>>2];c[v>>2]=D;c[w>>2]=B;c[x>>2]=A;c[y>>2]=ip(c[v>>2]|0,c[x>>2]|0)|0;A=c[u>>2]|0;B=(c[w>>2]|0)+(c[y>>2]<<2)|0;a[A>>0]=a[B>>0]|0;a[A+1>>0]=a[B+1>>0]|0;jp(c[v>>2]|0,d[(c[w>>2]|0)+(c[y>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[w>>2]|0)+(c[y>>2]<<2)+3>>0]|0);}while(1){pa=c[T>>2]|0;if((c[T>>2]|0)>>>0>((c[V>>2]|0)+-2|0)>>>0)break;y=c[U>>2]|0;w=c[W>>2]|0;v=c[X>>2]|0;c[p>>2]=pa;c[q>>2]=y;c[r>>2]=w;c[s>>2]=v;c[t>>2]=ip(c[q>>2]|0,c[s>>2]|0)|0;v=c[p>>2]|0;w=(c[r>>2]|0)+(c[t>>2]<<2)|0;a[v>>0]=a[w>>0]|0;a[v+1>>0]=a[w+1>>0]|0;jp(c[q>>2]|0,d[(c[r>>2]|0)+(c[t>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[r>>2]|0)+(c[t>>2]<<2)+3>>0]|0);}if(pa>>>0<(c[V>>2]|0)>>>0){V=c[U>>2]|0;U=c[W>>2]|0;W=c[X>>2]|0;c[j>>2]=c[T>>2];c[k>>2]=V;c[m>>2]=U;c[n>>2]=W;c[o>>2]=ip(c[k>>2]|0,c[n>>2]|0)|0;a[c[j>>2]>>0]=a[(c[m>>2]|0)+(c[o>>2]<<2)>>0]|0;j=c[k>>2]|0;if((d[(c[m>>2]|0)+(c[o>>2]<<2)+3>>0]|0|0)!=1){if((c[j+4>>2]|0)>>>0<32?(jp(c[k>>2]|0,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0),(c[(c[k>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[k>>2]|0)+4>>2]=32;}else jp(j,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+1;}if(lp(ca)|0){c[Y>>2]=c[_>>2];oa=c[Y>>2]|0;l=i;return oa|0;}else{c[Y>>2]=-20;oa=c[Y>>2]|0;l=i;return oa|0;}return 0;}function Jp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=Kp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=Lp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function Kp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0;i=l;l=l+1216|0;j=i+1208|0;k=i+1204|0;m=i+1200|0;n=i+1196|0;o=i+1192|0;p=i+1188|0;q=i+1184|0;r=i+1180|0;s=i+1176|0;t=i+1172|0;u=i+1168|0;v=i+1164|0;w=i+1160|0;x=i+1156|0;y=i+1152|0;z=i+1148|0;A=i+1144|0;B=i+1140|0;C=i+1136|0;D=i+1132|0;E=i+1128|0;F=i+1124|0;G=i+1120|0;H=i+1116|0;I=i+1112|0;J=i+1108|0;K=i+1104|0;L=i+1100|0;M=i+1096|0;N=i+1092|0;O=i+1088|0;P=i+1084|0;Q=i+1080|0;R=i+1076|0;S=i+1072|0;T=i+1068|0;U=i+1064|0;V=i+1060|0;W=i+1056|0;X=i+1052|0;Y=i+1048|0;Z=i+1044|0;_=i+1040|0;$=i+1036|0;aa=i+1032|0;ba=i+1028|0;ca=i+1024|0;da=i+1020|0;ea=i+1016|0;fa=i+1012|0;ga=i+1008|0;ha=i+1004|0;ia=i+1e3|0;ja=i+996|0;ka=i+992|0;la=i+988|0;ma=i+984|0;na=i+980|0;oa=i+976|0;pa=i+972|0;qa=i+968|0;ra=i+964|0;sa=i+960|0;ta=i+956|0;ua=i+952|0;va=i+948|0;wa=i+944|0;xa=i+940|0;ya=i+936|0;za=i+932|0;Aa=i+928|0;Ba=i+924|0;Ca=i+920|0;Da=i+916|0;Ea=i+912|0;Fa=i+908|0;Ga=i+904|0;Ha=i+900|0;Ia=i+896|0;Ja=i+892|0;Ka=i+888|0;La=i+884|0;Ma=i+880|0;Na=i+876|0;Oa=i+872|0;Pa=i+868|0;Qa=i+864|0;Ra=i+860|0;Sa=i+856|0;Ta=i+852|0;Ua=i+848|0;Va=i+844|0;Wa=i+840|0;Xa=i+836|0;Ya=i+832|0;Za=i+828|0;_a=i+824|0;$a=i+820|0;ab=i+816|0;bb=i+812|0;cb=i+808|0;db=i+804|0;eb=i+800|0;fb=i+796|0;gb=i+792|0;hb=i+788|0;ib=i+784|0;jb=i+780|0;kb=i+776|0;lb=i+772|0;mb=i+768|0;nb=i+764|0;ob=i+760|0;pb=i+756|0;qb=i+752|0;rb=i+748|0;sb=i+744|0;tb=i+740|0;ub=i+736|0;vb=i+732|0;wb=i+728|0;xb=i+724|0;yb=i+720|0;zb=i+716|0;Ab=i+712|0;Bb=i+708|0;Cb=i+704|0;Db=i+700|0;Eb=i+696|0;Fb=i+692|0;Gb=i+688|0;Hb=i+684|0;Ib=i+680|0;Jb=i+676|0;Kb=i+672|0;Lb=i+668|0;Mb=i+664|0;Nb=i+660|0;Ob=i+656|0;Pb=i+652|0;Qb=i+648|0;Rb=i+644|0;Sb=i+640|0;Tb=i+636|0;Ub=i+632|0;Vb=i+628|0;Wb=i+624|0;Xb=i+620|0;Yb=i+616|0;Zb=i+612|0;_b=i+608|0;$b=i+604|0;ac=i+600|0;bc=i+596|0;cc=i+592|0;dc=i+588|0;ec=i+584|0;fc=i+580|0;gc=i+576|0;hc=i+572|0;ic=i+568|0;jc=i+564|0;kc=i+560|0;lc=i+556|0;mc=i+552|0;nc=i+548|0;oc=i+544|0;pc=i+540|0;qc=i+536|0;rc=i+532|0;sc=i+528|0;tc=i+524|0;uc=i+520|0;vc=i+516|0;wc=i+512|0;xc=i+508|0;yc=i+504|0;zc=i+500|0;Ac=i+496|0;Bc=i+492|0;Cc=i+488|0;Dc=i+484|0;Ec=i+480|0;Fc=i+476|0;Gc=i+472|0;Hc=i+468|0;Ic=i+464|0;Jc=i+460|0;Kc=i+456|0;Lc=i+452|0;Mc=i+448|0;Nc=i+444|0;Oc=i+440|0;Pc=i+436|0;Qc=i+432|0;Rc=i+428|0;Sc=i+424|0;Tc=i+420|0;Uc=i+416|0;Vc=i+412|0;Wc=i+408|0;Xc=i+404|0;Yc=i+400|0;Zc=i+396|0;_c=i+392|0;$c=i+388|0;ad=i+384|0;bd=i+380|0;cd=i+376|0;dd=i+372|0;ed=i+368|0;fd=i+364|0;gd=i+360|0;hd=i+356|0;id=i+352|0;jd=i+348|0;kd=i+344|0;ld=i+340|0;md=i+336|0;nd=i+332|0;od=i+328|0;pd=i+324|0;qd=i+320|0;rd=i+316|0;sd=i+312|0;td=i+308|0;ud=i+304|0;vd=i+300|0;wd=i+296|0;xd=i+292|0;yd=i+288|0;zd=i+284|0;Ad=i+280|0;Bd=i+276|0;Cd=i+272|0;Dd=i+268|0;Ed=i+264|0;Fd=i+260|0;Gd=i+256|0;Hd=i+252|0;Id=i+248|0;Jd=i+244|0;Kd=i+240|0;Ld=i+236|0;Md=i+232|0;Nd=i+228|0;Od=i+224|0;Pd=i+220|0;Qd=i+216|0;Rd=i+212|0;Sd=i+208|0;Td=i+204|0;Ud=i+200|0;Vd=i+196|0;Wd=i+192|0;Xd=i+172|0;Yd=i+152|0;Zd=i+132|0;_d=i+112|0;$d=i+108|0;ae=i+104|0;be=i+100|0;ce=i+96|0;de=i+92|0;ee=i+88|0;fe=i+84|0;ge=i+80|0;he=i+76|0;ie=i+72|0;je=i+68|0;ke=i+64|0;le=i+60|0;me=i+56|0;ne=i+52|0;oe=i+48|0;pe=i+44|0;qe=i+1212|0;re=i+40|0;se=i+36|0;te=i+32|0;ue=i+28|0;ve=i+24|0;we=i+20|0;xe=i+16|0;ye=i+12|0;ze=i+8|0;Ae=i+4|0;Be=i;c[xe>>2]=b;c[ye>>2]=e;c[ze>>2]=f;c[Ae>>2]=g;c[Be>>2]=h;h=c[ye>>2]|0;ye=c[ze>>2]|0;ze=c[Ae>>2]|0;Ae=c[Be>>2]|0;c[Nd>>2]=c[xe>>2];c[Od>>2]=h;c[Pd>>2]=ye;c[Qd>>2]=ze;c[Rd>>2]=Ae;if((c[Qd>>2]|0)>>>0<10){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}c[Sd>>2]=c[Pd>>2];c[Td>>2]=c[Nd>>2];c[Ud>>2]=(c[Td>>2]|0)+(c[Od>>2]|0);c[Vd>>2]=(c[Rd>>2]|0)+4;c[Wd>>2]=c[Vd>>2];c[$d>>2]=(yp(c[Sd>>2]|0)|0)&65535;c[ae>>2]=(yp((c[Sd>>2]|0)+2|0)|0)&65535;c[be>>2]=(yp((c[Sd>>2]|0)+4|0)|0)&65535;c[ce>>2]=(c[Qd>>2]|0)-((c[$d>>2]|0)+(c[ae>>2]|0)+(c[be>>2]|0)+6);c[de>>2]=(c[Sd>>2]|0)+6;c[ee>>2]=(c[de>>2]|0)+(c[$d>>2]|0);c[fe>>2]=(c[ee>>2]|0)+(c[ae>>2]|0);c[ge>>2]=(c[fe>>2]|0)+(c[be>>2]|0);c[he>>2]=(((c[Od>>2]|0)+3|0)>>>0)/4|0;c[ie>>2]=(c[Td>>2]|0)+(c[he>>2]|0);c[je>>2]=(c[ie>>2]|0)+(c[he>>2]|0);c[ke>>2]=(c[je>>2]|0)+(c[he>>2]|0);c[le>>2]=c[Td>>2];c[me>>2]=c[ie>>2];c[ne>>2]=c[je>>2];c[oe>>2]=c[ke>>2];bp(qe,c[Rd>>2]|0);c[re>>2]=d[qe+2>>0];if((c[ce>>2]|0)>>>0>(c[Qd>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}c[se>>2]=fp(Xd,c[de>>2]|0,c[$d>>2]|0)|0;if(ap(c[se>>2]|0)|0){c[Md>>2]=c[se>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[te>>2]=fp(Yd,c[ee>>2]|0,c[ae>>2]|0)|0;if(ap(c[te>>2]|0)|0){c[Md>>2]=c[te>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[ue>>2]=fp(Zd,c[fe>>2]|0,c[be>>2]|0)|0;if(ap(c[ue>>2]|0)|0){c[Md>>2]=c[ue>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[ve>>2]=fp(_d,c[ge>>2]|0,c[ce>>2]|0)|0;if(ap(c[ve>>2]|0)|0){c[Md>>2]=c[ve>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}ve=gp(Xd)|0;ce=ve|(gp(Yd)|0);ve=ce|(gp(Zd)|0);c[pe>>2]=ve|(gp(_d)|0);while(1){if(!(((c[pe>>2]|0)==0?(c[oe>>2]|0)>>>0<((c[Ud>>2]|0)+-3|0)>>>0:0)|0))break;if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Hd>>2]=c[le>>2];c[Id>>2]=Xd;c[Jd>>2]=ve;c[Kd>>2]=ce;c[Ld>>2]=ip(c[Id>>2]|0,c[Kd>>2]|0)|0;ce=c[Hd>>2]|0;ve=(c[Jd>>2]|0)+(c[Ld>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Id>>2]|0,d[(c[Jd>>2]|0)+(c[Ld>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Jd>>2]|0)+(c[Ld>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Cd>>2]=c[me>>2];c[Dd>>2]=Yd;c[Ed>>2]=ve;c[Fd>>2]=ce;c[Gd>>2]=ip(c[Dd>>2]|0,c[Fd>>2]|0)|0;ce=c[Cd>>2]|0;ve=(c[Ed>>2]|0)+(c[Gd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Dd>>2]|0,d[(c[Ed>>2]|0)+(c[Gd>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[Ed>>2]|0)+(c[Gd>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[xd>>2]=c[ne>>2];c[yd>>2]=Zd;c[zd>>2]=ve;c[Ad>>2]=ce;c[Bd>>2]=ip(c[yd>>2]|0,c[Ad>>2]|0)|0;ce=c[xd>>2]|0;ve=(c[zd>>2]|0)+(c[Bd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[yd>>2]|0,d[(c[zd>>2]|0)+(c[Bd>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[zd>>2]|0)+(c[Bd>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[sd>>2]=c[oe>>2];c[td>>2]=_d;c[ud>>2]=ve;c[vd>>2]=ce;c[wd>>2]=ip(c[td>>2]|0,c[vd>>2]|0)|0;ce=c[sd>>2]|0;ve=(c[ud>>2]|0)+(c[wd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[td>>2]|0,d[(c[ud>>2]|0)+(c[wd>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[ud>>2]|0)+(c[wd>>2]<<2)+3>>0]|0);}hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[nd>>2]=c[le>>2];c[od>>2]=Xd;c[pd>>2]=ve;c[qd>>2]=ce;c[rd>>2]=ip(c[od>>2]|0,c[qd>>2]|0)|0;ce=c[nd>>2]|0;ve=(c[pd>>2]|0)+(c[rd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[od>>2]|0,d[(c[pd>>2]|0)+(c[rd>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[pd>>2]|0)+(c[rd>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[id>>2]=c[me>>2];c[jd>>2]=Yd;c[kd>>2]=ve;c[ld>>2]=ce;c[md>>2]=ip(c[jd>>2]|0,c[ld>>2]|0)|0;ce=c[id>>2]|0;ve=(c[kd>>2]|0)+(c[md>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[jd>>2]|0,d[(c[kd>>2]|0)+(c[md>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[kd>>2]|0)+(c[md>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[dd>>2]=c[ne>>2];c[ed>>2]=Zd;c[fd>>2]=ve;c[gd>>2]=ce;c[hd>>2]=ip(c[ed>>2]|0,c[gd>>2]|0)|0;ce=c[dd>>2]|0;ve=(c[fd>>2]|0)+(c[hd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[ed>>2]|0,d[(c[fd>>2]|0)+(c[hd>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[fd>>2]|0)+(c[hd>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[_c>>2]=c[oe>>2];c[$c>>2]=_d;c[ad>>2]=ve;c[bd>>2]=ce;c[cd>>2]=ip(c[$c>>2]|0,c[bd>>2]|0)|0;ce=c[_c>>2]|0;ve=(c[ad>>2]|0)+(c[cd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[$c>>2]|0,d[(c[ad>>2]|0)+(c[cd>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[ad>>2]|0)+(c[cd>>2]<<2)+3>>0]|0);if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Vc>>2]=c[le>>2];c[Wc>>2]=Xd;c[Xc>>2]=ve;c[Yc>>2]=ce;c[Zc>>2]=ip(c[Wc>>2]|0,c[Yc>>2]|0)|0;ce=c[Vc>>2]|0;ve=(c[Xc>>2]|0)+(c[Zc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Wc>>2]|0,d[(c[Xc>>2]|0)+(c[Zc>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Xc>>2]|0)+(c[Zc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Qc>>2]=c[me>>2];c[Rc>>2]=Yd;c[Sc>>2]=ve;c[Tc>>2]=ce;c[Uc>>2]=ip(c[Rc>>2]|0,c[Tc>>2]|0)|0;ce=c[Qc>>2]|0;ve=(c[Sc>>2]|0)+(c[Uc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Rc>>2]|0,d[(c[Sc>>2]|0)+(c[Uc>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[Sc>>2]|0)+(c[Uc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Lc>>2]=c[ne>>2];c[Mc>>2]=Zd;c[Nc>>2]=ve;c[Oc>>2]=ce;c[Pc>>2]=ip(c[Mc>>2]|0,c[Oc>>2]|0)|0;ce=c[Lc>>2]|0;ve=(c[Nc>>2]|0)+(c[Pc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Mc>>2]|0,d[(c[Nc>>2]|0)+(c[Pc>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[Nc>>2]|0)+(c[Pc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Gc>>2]=c[oe>>2];c[Hc>>2]=_d;c[Ic>>2]=ve;c[Jc>>2]=ce;c[Kc>>2]=ip(c[Hc>>2]|0,c[Jc>>2]|0)|0;ce=c[Gc>>2]|0;ve=(c[Ic>>2]|0)+(c[Kc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Hc>>2]|0,d[(c[Ic>>2]|0)+(c[Kc>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[Ic>>2]|0)+(c[Kc>>2]<<2)+3>>0]|0);}ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Bc>>2]=c[le>>2];c[Cc>>2]=Xd;c[Dc>>2]=ve;c[Ec>>2]=ce;c[Fc>>2]=ip(c[Cc>>2]|0,c[Ec>>2]|0)|0;ce=c[Bc>>2]|0;ve=(c[Dc>>2]|0)+(c[Fc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Cc>>2]|0,d[(c[Dc>>2]|0)+(c[Fc>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Dc>>2]|0)+(c[Fc>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[wc>>2]=c[me>>2];c[xc>>2]=Yd;c[yc>>2]=ve;c[zc>>2]=ce;c[Ac>>2]=ip(c[xc>>2]|0,c[zc>>2]|0)|0;ce=c[wc>>2]|0;ve=(c[yc>>2]|0)+(c[Ac>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[xc>>2]|0,d[(c[yc>>2]|0)+(c[Ac>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[yc>>2]|0)+(c[Ac>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[rc>>2]=c[ne>>2];c[sc>>2]=Zd;c[tc>>2]=ve;c[uc>>2]=ce;c[vc>>2]=ip(c[sc>>2]|0,c[uc>>2]|0)|0;ce=c[rc>>2]|0;ve=(c[tc>>2]|0)+(c[vc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[sc>>2]|0,d[(c[tc>>2]|0)+(c[vc>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[tc>>2]|0)+(c[vc>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[mc>>2]=c[oe>>2];c[nc>>2]=_d;c[oc>>2]=ve;c[pc>>2]=ce;c[qc>>2]=ip(c[nc>>2]|0,c[pc>>2]|0)|0;ce=c[mc>>2]|0;ve=(c[oc>>2]|0)+(c[qc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[nc>>2]|0,d[(c[oc>>2]|0)+(c[qc>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[oc>>2]|0)+(c[qc>>2]<<2)+3>>0]|0);ve=gp(Xd)|0;ce=ve|(gp(Yd)|0);ve=ce|(gp(Zd)|0);c[pe>>2]=ve|(gp(_d)|0);}if((c[le>>2]|0)>>>0>(c[ie>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}if((c[me>>2]|0)>>>0>(c[je>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}if((c[ne>>2]|0)>>>0>(c[ke>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}pe=c[ie>>2]|0;ie=c[Wd>>2]|0;qc=c[re>>2]|0;c[gc>>2]=c[le>>2];c[hc>>2]=Xd;c[ic>>2]=pe;c[jc>>2]=ie;c[kc>>2]=qc;c[lc>>2]=c[gc>>2];while(1){lc=(gp(c[hc>>2]|0)|0)==0&1;if(!(lc&(c[gc>>2]|0)>>>0<((c[ic>>2]|0)+-3|0)>>>0))break;if(hp()|0){lc=c[hc>>2]|0;qc=c[jc>>2]|0;ie=c[kc>>2]|0;c[bc>>2]=c[gc>>2];c[cc>>2]=lc;c[dc>>2]=qc;c[ec>>2]=ie;c[fc>>2]=ip(c[cc>>2]|0,c[ec>>2]|0)|0;ie=c[bc>>2]|0;qc=(c[dc>>2]|0)+(c[fc>>2]<<2)|0;a[ie>>0]=a[qc>>0]|0;a[ie+1>>0]=a[qc+1>>0]|0;jp(c[cc>>2]|0,d[(c[dc>>2]|0)+(c[fc>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[dc>>2]|0)+(c[fc>>2]<<2)+3>>0]|0);}hp()|0;qc=c[hc>>2]|0;ie=c[jc>>2]|0;lc=c[kc>>2]|0;c[Yb>>2]=c[gc>>2];c[Zb>>2]=qc;c[_b>>2]=ie;c[$b>>2]=lc;c[ac>>2]=ip(c[Zb>>2]|0,c[$b>>2]|0)|0;lc=c[Yb>>2]|0;ie=(c[_b>>2]|0)+(c[ac>>2]<<2)|0;a[lc>>0]=a[ie>>0]|0;a[lc+1>>0]=a[ie+1>>0]|0;jp(c[Zb>>2]|0,d[(c[_b>>2]|0)+(c[ac>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[_b>>2]|0)+(c[ac>>2]<<2)+3>>0]|0);if(hp()|0){ie=c[hc>>2]|0;lc=c[jc>>2]|0;qc=c[kc>>2]|0;c[Tb>>2]=c[gc>>2];c[Ub>>2]=ie;c[Vb>>2]=lc;c[Wb>>2]=qc;c[Xb>>2]=ip(c[Ub>>2]|0,c[Wb>>2]|0)|0;qc=c[Tb>>2]|0;lc=(c[Vb>>2]|0)+(c[Xb>>2]<<2)|0;a[qc>>0]=a[lc>>0]|0;a[qc+1>>0]=a[lc+1>>0]|0;jp(c[Ub>>2]|0,d[(c[Vb>>2]|0)+(c[Xb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Vb>>2]|0)+(c[Xb>>2]<<2)+3>>0]|0);}lc=c[hc>>2]|0;qc=c[jc>>2]|0;ie=c[kc>>2]|0;c[Ob>>2]=c[gc>>2];c[Pb>>2]=lc;c[Qb>>2]=qc;c[Rb>>2]=ie;c[Sb>>2]=ip(c[Pb>>2]|0,c[Rb>>2]|0)|0;ie=c[Ob>>2]|0;qc=(c[Qb>>2]|0)+(c[Sb>>2]<<2)|0;a[ie>>0]=a[qc>>0]|0;a[ie+1>>0]=a[qc+1>>0]|0;jp(c[Pb>>2]|0,d[(c[Qb>>2]|0)+(c[Sb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Qb>>2]|0)+(c[Sb>>2]<<2)+3>>0]|0);}while(1){Sb=(gp(c[hc>>2]|0)|0)==0&1;if(!(Sb&(c[gc>>2]|0)>>>0<=((c[ic>>2]|0)+-2|0)>>>0))break;Sb=c[hc>>2]|0;Qb=c[jc>>2]|0;Pb=c[kc>>2]|0;c[Jb>>2]=c[gc>>2];c[Kb>>2]=Sb;c[Lb>>2]=Qb;c[Mb>>2]=Pb;c[Nb>>2]=ip(c[Kb>>2]|0,c[Mb>>2]|0)|0;Pb=c[Jb>>2]|0;Qb=(c[Lb>>2]|0)+(c[Nb>>2]<<2)|0;a[Pb>>0]=a[Qb>>0]|0;a[Pb+1>>0]=a[Qb+1>>0]|0;jp(c[Kb>>2]|0,d[(c[Lb>>2]|0)+(c[Nb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Lb>>2]|0)+(c[Nb>>2]<<2)+3>>0]|0);}while(1){De=c[gc>>2]|0;if((c[gc>>2]|0)>>>0>((c[ic>>2]|0)+-2|0)>>>0)break;Nb=c[hc>>2]|0;Lb=c[jc>>2]|0;Kb=c[kc>>2]|0;c[Eb>>2]=De;c[Fb>>2]=Nb;c[Gb>>2]=Lb;c[Hb>>2]=Kb;c[Ib>>2]=ip(c[Fb>>2]|0,c[Hb>>2]|0)|0;Kb=c[Eb>>2]|0;Lb=(c[Gb>>2]|0)+(c[Ib>>2]<<2)|0;a[Kb>>0]=a[Lb>>0]|0;a[Kb+1>>0]=a[Lb+1>>0]|0;jp(c[Fb>>2]|0,d[(c[Gb>>2]|0)+(c[Ib>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Gb>>2]|0)+(c[Ib>>2]<<2)+3>>0]|0);}if(De>>>0<(c[ic>>2]|0)>>>0){ic=c[hc>>2]|0;hc=c[jc>>2]|0;jc=c[kc>>2]|0;c[zb>>2]=c[gc>>2];c[Ab>>2]=ic;c[Bb>>2]=hc;c[Cb>>2]=jc;c[Db>>2]=ip(c[Ab>>2]|0,c[Cb>>2]|0)|0;a[c[zb>>2]>>0]=a[(c[Bb>>2]|0)+(c[Db>>2]<<2)>>0]|0;zb=c[Ab>>2]|0;if((d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+3>>0]|0|0)!=1){if((c[zb+4>>2]|0)>>>0<32?(jp(c[Ab>>2]|0,d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+2>>0]|0),(c[(c[Ab>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[Ab>>2]|0)+4>>2]=32;}else jp(zb,d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+1;}gc=c[je>>2]|0;je=c[Wd>>2]|0;Db=c[re>>2]|0;c[tb>>2]=c[me>>2];c[ub>>2]=Yd;c[vb>>2]=gc;c[wb>>2]=je;c[xb>>2]=Db;c[yb>>2]=c[tb>>2];while(1){yb=(gp(c[ub>>2]|0)|0)==0&1;if(!(yb&(c[tb>>2]|0)>>>0<((c[vb>>2]|0)+-3|0)>>>0))break;if(hp()|0){yb=c[ub>>2]|0;Db=c[wb>>2]|0;je=c[xb>>2]|0;c[ob>>2]=c[tb>>2];c[pb>>2]=yb;c[qb>>2]=Db;c[rb>>2]=je;c[sb>>2]=ip(c[pb>>2]|0,c[rb>>2]|0)|0;je=c[ob>>2]|0;Db=(c[qb>>2]|0)+(c[sb>>2]<<2)|0;a[je>>0]=a[Db>>0]|0;a[je+1>>0]=a[Db+1>>0]|0;jp(c[pb>>2]|0,d[(c[qb>>2]|0)+(c[sb>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[qb>>2]|0)+(c[sb>>2]<<2)+3>>0]|0);}hp()|0;Db=c[ub>>2]|0;je=c[wb>>2]|0;yb=c[xb>>2]|0;c[jb>>2]=c[tb>>2];c[kb>>2]=Db;c[lb>>2]=je;c[mb>>2]=yb;c[nb>>2]=ip(c[kb>>2]|0,c[mb>>2]|0)|0;yb=c[jb>>2]|0;je=(c[lb>>2]|0)+(c[nb>>2]<<2)|0;a[yb>>0]=a[je>>0]|0;a[yb+1>>0]=a[je+1>>0]|0;jp(c[kb>>2]|0,d[(c[lb>>2]|0)+(c[nb>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[lb>>2]|0)+(c[nb>>2]<<2)+3>>0]|0);if(hp()|0){je=c[ub>>2]|0;yb=c[wb>>2]|0;Db=c[xb>>2]|0;c[eb>>2]=c[tb>>2];c[fb>>2]=je;c[gb>>2]=yb;c[hb>>2]=Db;c[ib>>2]=ip(c[fb>>2]|0,c[hb>>2]|0)|0;Db=c[eb>>2]|0;yb=(c[gb>>2]|0)+(c[ib>>2]<<2)|0;a[Db>>0]=a[yb>>0]|0;a[Db+1>>0]=a[yb+1>>0]|0;jp(c[fb>>2]|0,d[(c[gb>>2]|0)+(c[ib>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[gb>>2]|0)+(c[ib>>2]<<2)+3>>0]|0);}yb=c[ub>>2]|0;Db=c[wb>>2]|0;je=c[xb>>2]|0;c[$a>>2]=c[tb>>2];c[ab>>2]=yb;c[bb>>2]=Db;c[cb>>2]=je;c[db>>2]=ip(c[ab>>2]|0,c[cb>>2]|0)|0;je=c[$a>>2]|0;Db=(c[bb>>2]|0)+(c[db>>2]<<2)|0;a[je>>0]=a[Db>>0]|0;a[je+1>>0]=a[Db+1>>0]|0;jp(c[ab>>2]|0,d[(c[bb>>2]|0)+(c[db>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[bb>>2]|0)+(c[db>>2]<<2)+3>>0]|0);}while(1){db=(gp(c[ub>>2]|0)|0)==0&1;if(!(db&(c[tb>>2]|0)>>>0<=((c[vb>>2]|0)+-2|0)>>>0))break;db=c[ub>>2]|0;bb=c[wb>>2]|0;ab=c[xb>>2]|0;c[Wa>>2]=c[tb>>2];c[Xa>>2]=db;c[Ya>>2]=bb;c[Za>>2]=ab;c[_a>>2]=ip(c[Xa>>2]|0,c[Za>>2]|0)|0;ab=c[Wa>>2]|0;bb=(c[Ya>>2]|0)+(c[_a>>2]<<2)|0;a[ab>>0]=a[bb>>0]|0;a[ab+1>>0]=a[bb+1>>0]|0;jp(c[Xa>>2]|0,d[(c[Ya>>2]|0)+(c[_a>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[Ya>>2]|0)+(c[_a>>2]<<2)+3>>0]|0);}while(1){Ee=c[tb>>2]|0;if((c[tb>>2]|0)>>>0>((c[vb>>2]|0)+-2|0)>>>0)break;_a=c[ub>>2]|0;Ya=c[wb>>2]|0;Xa=c[xb>>2]|0;c[Ra>>2]=Ee;c[Sa>>2]=_a;c[Ta>>2]=Ya;c[Ua>>2]=Xa;c[Va>>2]=ip(c[Sa>>2]|0,c[Ua>>2]|0)|0;Xa=c[Ra>>2]|0;Ya=(c[Ta>>2]|0)+(c[Va>>2]<<2)|0;a[Xa>>0]=a[Ya>>0]|0;a[Xa+1>>0]=a[Ya+1>>0]|0;jp(c[Sa>>2]|0,d[(c[Ta>>2]|0)+(c[Va>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[Ta>>2]|0)+(c[Va>>2]<<2)+3>>0]|0);}if(Ee>>>0<(c[vb>>2]|0)>>>0){vb=c[ub>>2]|0;ub=c[wb>>2]|0;wb=c[xb>>2]|0;c[Ma>>2]=c[tb>>2];c[Na>>2]=vb;c[Oa>>2]=ub;c[Pa>>2]=wb;c[Qa>>2]=ip(c[Na>>2]|0,c[Pa>>2]|0)|0;a[c[Ma>>2]>>0]=a[(c[Oa>>2]|0)+(c[Qa>>2]<<2)>>0]|0;Ma=c[Na>>2]|0;if((d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+3>>0]|0|0)!=1){if((c[Ma+4>>2]|0)>>>0<32?(jp(c[Na>>2]|0,d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+2>>0]|0),(c[(c[Na>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[Na>>2]|0)+4>>2]=32;}else jp(Ma,d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+1;}tb=c[ke>>2]|0;ke=c[Wd>>2]|0;Qa=c[re>>2]|0;c[Ga>>2]=c[ne>>2];c[Ha>>2]=Zd;c[Ia>>2]=tb;c[Ja>>2]=ke;c[Ka>>2]=Qa;c[La>>2]=c[Ga>>2];while(1){La=(gp(c[Ha>>2]|0)|0)==0&1;if(!(La&(c[Ga>>2]|0)>>>0<((c[Ia>>2]|0)+-3|0)>>>0))break;if(hp()|0){La=c[Ha>>2]|0;Qa=c[Ja>>2]|0;ke=c[Ka>>2]|0;c[Ba>>2]=c[Ga>>2];c[Ca>>2]=La;c[Da>>2]=Qa;c[Ea>>2]=ke;c[Fa>>2]=ip(c[Ca>>2]|0,c[Ea>>2]|0)|0;ke=c[Ba>>2]|0;Qa=(c[Da>>2]|0)+(c[Fa>>2]<<2)|0;a[ke>>0]=a[Qa>>0]|0;a[ke+1>>0]=a[Qa+1>>0]|0;jp(c[Ca>>2]|0,d[(c[Da>>2]|0)+(c[Fa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[Da>>2]|0)+(c[Fa>>2]<<2)+3>>0]|0);}hp()|0;Qa=c[Ha>>2]|0;ke=c[Ja>>2]|0;La=c[Ka>>2]|0;c[wa>>2]=c[Ga>>2];c[xa>>2]=Qa;c[ya>>2]=ke;c[za>>2]=La;c[Aa>>2]=ip(c[xa>>2]|0,c[za>>2]|0)|0;La=c[wa>>2]|0;ke=(c[ya>>2]|0)+(c[Aa>>2]<<2)|0;a[La>>0]=a[ke>>0]|0;a[La+1>>0]=a[ke+1>>0]|0;jp(c[xa>>2]|0,d[(c[ya>>2]|0)+(c[Aa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ya>>2]|0)+(c[Aa>>2]<<2)+3>>0]|0);if(hp()|0){ke=c[Ha>>2]|0;La=c[Ja>>2]|0;Qa=c[Ka>>2]|0;c[ra>>2]=c[Ga>>2];c[sa>>2]=ke;c[ta>>2]=La;c[ua>>2]=Qa;c[va>>2]=ip(c[sa>>2]|0,c[ua>>2]|0)|0;Qa=c[ra>>2]|0;La=(c[ta>>2]|0)+(c[va>>2]<<2)|0;a[Qa>>0]=a[La>>0]|0;a[Qa+1>>0]=a[La+1>>0]|0;jp(c[sa>>2]|0,d[(c[ta>>2]|0)+(c[va>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ta>>2]|0)+(c[va>>2]<<2)+3>>0]|0);}La=c[Ha>>2]|0;Qa=c[Ja>>2]|0;ke=c[Ka>>2]|0;c[ma>>2]=c[Ga>>2];c[na>>2]=La;c[oa>>2]=Qa;c[pa>>2]=ke;c[qa>>2]=ip(c[na>>2]|0,c[pa>>2]|0)|0;ke=c[ma>>2]|0;Qa=(c[oa>>2]|0)+(c[qa>>2]<<2)|0;a[ke>>0]=a[Qa>>0]|0;a[ke+1>>0]=a[Qa+1>>0]|0;jp(c[na>>2]|0,d[(c[oa>>2]|0)+(c[qa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[oa>>2]|0)+(c[qa>>2]<<2)+3>>0]|0);}while(1){qa=(gp(c[Ha>>2]|0)|0)==0&1;if(!(qa&(c[Ga>>2]|0)>>>0<=((c[Ia>>2]|0)+-2|0)>>>0))break;qa=c[Ha>>2]|0;oa=c[Ja>>2]|0;na=c[Ka>>2]|0;c[ha>>2]=c[Ga>>2];c[ia>>2]=qa;c[ja>>2]=oa;c[ka>>2]=na;c[la>>2]=ip(c[ia>>2]|0,c[ka>>2]|0)|0;na=c[ha>>2]|0;oa=(c[ja>>2]|0)+(c[la>>2]<<2)|0;a[na>>0]=a[oa>>0]|0;a[na+1>>0]=a[oa+1>>0]|0;jp(c[ia>>2]|0,d[(c[ja>>2]|0)+(c[la>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ja>>2]|0)+(c[la>>2]<<2)+3>>0]|0);}while(1){Fe=c[Ga>>2]|0;if((c[Ga>>2]|0)>>>0>((c[Ia>>2]|0)+-2|0)>>>0)break;la=c[Ha>>2]|0;ja=c[Ja>>2]|0;ia=c[Ka>>2]|0;c[ca>>2]=Fe;c[da>>2]=la;c[ea>>2]=ja;c[fa>>2]=ia;c[ga>>2]=ip(c[da>>2]|0,c[fa>>2]|0)|0;ia=c[ca>>2]|0;ja=(c[ea>>2]|0)+(c[ga>>2]<<2)|0;a[ia>>0]=a[ja>>0]|0;a[ia+1>>0]=a[ja+1>>0]|0;jp(c[da>>2]|0,d[(c[ea>>2]|0)+(c[ga>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ea>>2]|0)+(c[ga>>2]<<2)+3>>0]|0);}if(Fe>>>0<(c[Ia>>2]|0)>>>0){Ia=c[Ha>>2]|0;Ha=c[Ja>>2]|0;Ja=c[Ka>>2]|0;c[Z>>2]=c[Ga>>2];c[_>>2]=Ia;c[$>>2]=Ha;c[aa>>2]=Ja;c[ba>>2]=ip(c[_>>2]|0,c[aa>>2]|0)|0;a[c[Z>>2]>>0]=a[(c[$>>2]|0)+(c[ba>>2]<<2)>>0]|0;Z=c[_>>2]|0;if((d[(c[$>>2]|0)+(c[ba>>2]<<2)+3>>0]|0|0)!=1){if((c[Z+4>>2]|0)>>>0<32?(jp(c[_>>2]|0,d[(c[$>>2]|0)+(c[ba>>2]<<2)+2>>0]|0),(c[(c[_>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[_>>2]|0)+4>>2]=32;}else jp(Z,d[(c[$>>2]|0)+(c[ba>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+1;}Ga=c[Ud>>2]|0;Ud=c[Wd>>2]|0;Wd=c[re>>2]|0;c[T>>2]=c[oe>>2];c[U>>2]=_d;c[V>>2]=Ga;c[W>>2]=Ud;c[X>>2]=Wd;c[Y>>2]=c[T>>2];while(1){Y=(gp(c[U>>2]|0)|0)==0&1;if(!(Y&(c[T>>2]|0)>>>0<((c[V>>2]|0)+-3|0)>>>0))break;if(hp()|0){Y=c[U>>2]|0;Wd=c[W>>2]|0;Ud=c[X>>2]|0;c[O>>2]=c[T>>2];c[P>>2]=Y;c[Q>>2]=Wd;c[R>>2]=Ud;c[S>>2]=ip(c[P>>2]|0,c[R>>2]|0)|0;Ud=c[O>>2]|0;Wd=(c[Q>>2]|0)+(c[S>>2]<<2)|0;a[Ud>>0]=a[Wd>>0]|0;a[Ud+1>>0]=a[Wd+1>>0]|0;jp(c[P>>2]|0,d[(c[Q>>2]|0)+(c[S>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[Q>>2]|0)+(c[S>>2]<<2)+3>>0]|0);}hp()|0;Wd=c[U>>2]|0;Ud=c[W>>2]|0;Y=c[X>>2]|0;c[J>>2]=c[T>>2];c[K>>2]=Wd;c[L>>2]=Ud;c[M>>2]=Y;c[N>>2]=ip(c[K>>2]|0,c[M>>2]|0)|0;Y=c[J>>2]|0;Ud=(c[L>>2]|0)+(c[N>>2]<<2)|0;a[Y>>0]=a[Ud>>0]|0;a[Y+1>>0]=a[Ud+1>>0]|0;jp(c[K>>2]|0,d[(c[L>>2]|0)+(c[N>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[L>>2]|0)+(c[N>>2]<<2)+3>>0]|0);if(hp()|0){Ud=c[U>>2]|0;Y=c[W>>2]|0;Wd=c[X>>2]|0;c[E>>2]=c[T>>2];c[F>>2]=Ud;c[G>>2]=Y;c[H>>2]=Wd;c[I>>2]=ip(c[F>>2]|0,c[H>>2]|0)|0;Wd=c[E>>2]|0;Y=(c[G>>2]|0)+(c[I>>2]<<2)|0;a[Wd>>0]=a[Y>>0]|0;a[Wd+1>>0]=a[Y+1>>0]|0;jp(c[F>>2]|0,d[(c[G>>2]|0)+(c[I>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[G>>2]|0)+(c[I>>2]<<2)+3>>0]|0);}Y=c[U>>2]|0;Wd=c[W>>2]|0;Ud=c[X>>2]|0;c[z>>2]=c[T>>2];c[A>>2]=Y;c[B>>2]=Wd;c[C>>2]=Ud;c[D>>2]=ip(c[A>>2]|0,c[C>>2]|0)|0;Ud=c[z>>2]|0;Wd=(c[B>>2]|0)+(c[D>>2]<<2)|0;a[Ud>>0]=a[Wd>>0]|0;a[Ud+1>>0]=a[Wd+1>>0]|0;jp(c[A>>2]|0,d[(c[B>>2]|0)+(c[D>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[B>>2]|0)+(c[D>>2]<<2)+3>>0]|0);}while(1){D=(gp(c[U>>2]|0)|0)==0&1;if(!(D&(c[T>>2]|0)>>>0<=((c[V>>2]|0)+-2|0)>>>0))break;D=c[U>>2]|0;B=c[W>>2]|0;A=c[X>>2]|0;c[u>>2]=c[T>>2];c[v>>2]=D;c[w>>2]=B;c[x>>2]=A;c[y>>2]=ip(c[v>>2]|0,c[x>>2]|0)|0;A=c[u>>2]|0;B=(c[w>>2]|0)+(c[y>>2]<<2)|0;a[A>>0]=a[B>>0]|0;a[A+1>>0]=a[B+1>>0]|0;jp(c[v>>2]|0,d[(c[w>>2]|0)+(c[y>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[w>>2]|0)+(c[y>>2]<<2)+3>>0]|0);}while(1){Ge=c[T>>2]|0;if((c[T>>2]|0)>>>0>((c[V>>2]|0)+-2|0)>>>0)break;y=c[U>>2]|0;w=c[W>>2]|0;v=c[X>>2]|0;c[p>>2]=Ge;c[q>>2]=y;c[r>>2]=w;c[s>>2]=v;c[t>>2]=ip(c[q>>2]|0,c[s>>2]|0)|0;v=c[p>>2]|0;w=(c[r>>2]|0)+(c[t>>2]<<2)|0;a[v>>0]=a[w>>0]|0;a[v+1>>0]=a[w+1>>0]|0;jp(c[q>>2]|0,d[(c[r>>2]|0)+(c[t>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[r>>2]|0)+(c[t>>2]<<2)+3>>0]|0);}if(Ge>>>0<(c[V>>2]|0)>>>0){V=c[U>>2]|0;U=c[W>>2]|0;W=c[X>>2]|0;c[j>>2]=c[T>>2];c[k>>2]=V;c[m>>2]=U;c[n>>2]=W;c[o>>2]=ip(c[k>>2]|0,c[n>>2]|0)|0;a[c[j>>2]>>0]=a[(c[m>>2]|0)+(c[o>>2]<<2)>>0]|0;j=c[k>>2]|0;if((d[(c[m>>2]|0)+(c[o>>2]<<2)+3>>0]|0|0)!=1){if((c[j+4>>2]|0)>>>0<32?(jp(c[k>>2]|0,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0),(c[(c[k>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[k>>2]|0)+4>>2]=32;}else jp(j,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+1;}T=lp(Xd)|0;Xd=T&(lp(Yd)|0);Yd=Xd&(lp(Zd)|0);c[we>>2]=Yd&(lp(_d)|0);if(c[we>>2]|0){c[Md>>2]=c[Od>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}else{c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}return 0;}function Lp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0;i=l;l=l+1216|0;j=i+1208|0;k=i+1204|0;m=i+1200|0;n=i+1196|0;o=i+1192|0;p=i+1188|0;q=i+1184|0;r=i+1180|0;s=i+1176|0;t=i+1172|0;u=i+1168|0;v=i+1164|0;w=i+1160|0;x=i+1156|0;y=i+1152|0;z=i+1148|0;A=i+1144|0;B=i+1140|0;C=i+1136|0;D=i+1132|0;E=i+1128|0;F=i+1124|0;G=i+1120|0;H=i+1116|0;I=i+1112|0;J=i+1108|0;K=i+1104|0;L=i+1100|0;M=i+1096|0;N=i+1092|0;O=i+1088|0;P=i+1084|0;Q=i+1080|0;R=i+1076|0;S=i+1072|0;T=i+1068|0;U=i+1064|0;V=i+1060|0;W=i+1056|0;X=i+1052|0;Y=i+1048|0;Z=i+1044|0;_=i+1040|0;$=i+1036|0;aa=i+1032|0;ba=i+1028|0;ca=i+1024|0;da=i+1020|0;ea=i+1016|0;fa=i+1012|0;ga=i+1008|0;ha=i+1004|0;ia=i+1e3|0;ja=i+996|0;ka=i+992|0;la=i+988|0;ma=i+984|0;na=i+980|0;oa=i+976|0;pa=i+972|0;qa=i+968|0;ra=i+964|0;sa=i+960|0;ta=i+956|0;ua=i+952|0;va=i+948|0;wa=i+944|0;xa=i+940|0;ya=i+936|0;za=i+932|0;Aa=i+928|0;Ba=i+924|0;Ca=i+920|0;Da=i+916|0;Ea=i+912|0;Fa=i+908|0;Ga=i+904|0;Ha=i+900|0;Ia=i+896|0;Ja=i+892|0;Ka=i+888|0;La=i+884|0;Ma=i+880|0;Na=i+876|0;Oa=i+872|0;Pa=i+868|0;Qa=i+864|0;Ra=i+860|0;Sa=i+856|0;Ta=i+852|0;Ua=i+848|0;Va=i+844|0;Wa=i+840|0;Xa=i+836|0;Ya=i+832|0;Za=i+828|0;_a=i+824|0;$a=i+820|0;ab=i+816|0;bb=i+812|0;cb=i+808|0;db=i+804|0;eb=i+800|0;fb=i+796|0;gb=i+792|0;hb=i+788|0;ib=i+784|0;jb=i+780|0;kb=i+776|0;lb=i+772|0;mb=i+768|0;nb=i+764|0;ob=i+760|0;pb=i+756|0;qb=i+752|0;rb=i+748|0;sb=i+744|0;tb=i+740|0;ub=i+736|0;vb=i+732|0;wb=i+728|0;xb=i+724|0;yb=i+720|0;zb=i+716|0;Ab=i+712|0;Bb=i+708|0;Cb=i+704|0;Db=i+700|0;Eb=i+696|0;Fb=i+692|0;Gb=i+688|0;Hb=i+684|0;Ib=i+680|0;Jb=i+676|0;Kb=i+672|0;Lb=i+668|0;Mb=i+664|0;Nb=i+660|0;Ob=i+656|0;Pb=i+652|0;Qb=i+648|0;Rb=i+644|0;Sb=i+640|0;Tb=i+636|0;Ub=i+632|0;Vb=i+628|0;Wb=i+624|0;Xb=i+620|0;Yb=i+616|0;Zb=i+612|0;_b=i+608|0;$b=i+604|0;ac=i+600|0;bc=i+596|0;cc=i+592|0;dc=i+588|0;ec=i+584|0;fc=i+580|0;gc=i+576|0;hc=i+572|0;ic=i+568|0;jc=i+564|0;kc=i+560|0;lc=i+556|0;mc=i+552|0;nc=i+548|0;oc=i+544|0;pc=i+540|0;qc=i+536|0;rc=i+532|0;sc=i+528|0;tc=i+524|0;uc=i+520|0;vc=i+516|0;wc=i+512|0;xc=i+508|0;yc=i+504|0;zc=i+500|0;Ac=i+496|0;Bc=i+492|0;Cc=i+488|0;Dc=i+484|0;Ec=i+480|0;Fc=i+476|0;Gc=i+472|0;Hc=i+468|0;Ic=i+464|0;Jc=i+460|0;Kc=i+456|0;Lc=i+452|0;Mc=i+448|0;Nc=i+444|0;Oc=i+440|0;Pc=i+436|0;Qc=i+432|0;Rc=i+428|0;Sc=i+424|0;Tc=i+420|0;Uc=i+416|0;Vc=i+412|0;Wc=i+408|0;Xc=i+404|0;Yc=i+400|0;Zc=i+396|0;_c=i+392|0;$c=i+388|0;ad=i+384|0;bd=i+380|0;cd=i+376|0;dd=i+372|0;ed=i+368|0;fd=i+364|0;gd=i+360|0;hd=i+356|0;id=i+352|0;jd=i+348|0;kd=i+344|0;ld=i+340|0;md=i+336|0;nd=i+332|0;od=i+328|0;pd=i+324|0;qd=i+320|0;rd=i+316|0;sd=i+312|0;td=i+308|0;ud=i+304|0;vd=i+300|0;wd=i+296|0;xd=i+292|0;yd=i+288|0;zd=i+284|0;Ad=i+280|0;Bd=i+276|0;Cd=i+272|0;Dd=i+268|0;Ed=i+264|0;Fd=i+260|0;Gd=i+256|0;Hd=i+252|0;Id=i+248|0;Jd=i+244|0;Kd=i+240|0;Ld=i+236|0;Md=i+232|0;Nd=i+228|0;Od=i+224|0;Pd=i+220|0;Qd=i+216|0;Rd=i+212|0;Sd=i+208|0;Td=i+204|0;Ud=i+200|0;Vd=i+196|0;Wd=i+192|0;Xd=i+172|0;Yd=i+152|0;Zd=i+132|0;_d=i+112|0;$d=i+108|0;ae=i+104|0;be=i+100|0;ce=i+96|0;de=i+92|0;ee=i+88|0;fe=i+84|0;ge=i+80|0;he=i+76|0;ie=i+72|0;je=i+68|0;ke=i+64|0;le=i+60|0;me=i+56|0;ne=i+52|0;oe=i+48|0;pe=i+44|0;qe=i+1212|0;re=i+40|0;se=i+36|0;te=i+32|0;ue=i+28|0;ve=i+24|0;we=i+20|0;xe=i+16|0;ye=i+12|0;ze=i+8|0;Ae=i+4|0;Be=i;c[xe>>2]=b;c[ye>>2]=e;c[ze>>2]=f;c[Ae>>2]=g;c[Be>>2]=h;h=c[ye>>2]|0;ye=c[ze>>2]|0;ze=c[Ae>>2]|0;Ae=c[Be>>2]|0;c[Nd>>2]=c[xe>>2];c[Od>>2]=h;c[Pd>>2]=ye;c[Qd>>2]=ze;c[Rd>>2]=Ae;if((c[Qd>>2]|0)>>>0<10){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}c[Sd>>2]=c[Pd>>2];c[Td>>2]=c[Nd>>2];c[Ud>>2]=(c[Td>>2]|0)+(c[Od>>2]|0);c[Vd>>2]=(c[Rd>>2]|0)+4;c[Wd>>2]=c[Vd>>2];c[$d>>2]=(yp(c[Sd>>2]|0)|0)&65535;c[ae>>2]=(yp((c[Sd>>2]|0)+2|0)|0)&65535;c[be>>2]=(yp((c[Sd>>2]|0)+4|0)|0)&65535;c[ce>>2]=(c[Qd>>2]|0)-((c[$d>>2]|0)+(c[ae>>2]|0)+(c[be>>2]|0)+6);c[de>>2]=(c[Sd>>2]|0)+6;c[ee>>2]=(c[de>>2]|0)+(c[$d>>2]|0);c[fe>>2]=(c[ee>>2]|0)+(c[ae>>2]|0);c[ge>>2]=(c[fe>>2]|0)+(c[be>>2]|0);c[he>>2]=(((c[Od>>2]|0)+3|0)>>>0)/4|0;c[ie>>2]=(c[Td>>2]|0)+(c[he>>2]|0);c[je>>2]=(c[ie>>2]|0)+(c[he>>2]|0);c[ke>>2]=(c[je>>2]|0)+(c[he>>2]|0);c[le>>2]=c[Td>>2];c[me>>2]=c[ie>>2];c[ne>>2]=c[je>>2];c[oe>>2]=c[ke>>2];bp(qe,c[Rd>>2]|0);c[re>>2]=d[qe+2>>0];if((c[ce>>2]|0)>>>0>(c[Qd>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}c[se>>2]=fp(Xd,c[de>>2]|0,c[$d>>2]|0)|0;if(ap(c[se>>2]|0)|0){c[Md>>2]=c[se>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[te>>2]=fp(Yd,c[ee>>2]|0,c[ae>>2]|0)|0;if(ap(c[te>>2]|0)|0){c[Md>>2]=c[te>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[ue>>2]=fp(Zd,c[fe>>2]|0,c[be>>2]|0)|0;if(ap(c[ue>>2]|0)|0){c[Md>>2]=c[ue>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[ve>>2]=fp(_d,c[ge>>2]|0,c[ce>>2]|0)|0;if(ap(c[ve>>2]|0)|0){c[Md>>2]=c[ve>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}ve=gp(Xd)|0;ce=ve|(gp(Yd)|0);ve=ce|(gp(Zd)|0);c[pe>>2]=ve|(gp(_d)|0);while(1){if(!(((c[pe>>2]|0)==0?(c[oe>>2]|0)>>>0<((c[Ud>>2]|0)+-3|0)>>>0:0)|0))break;if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Hd>>2]=c[le>>2];c[Id>>2]=Xd;c[Jd>>2]=ve;c[Kd>>2]=ce;c[Ld>>2]=ip(c[Id>>2]|0,c[Kd>>2]|0)|0;ce=c[Hd>>2]|0;ve=(c[Jd>>2]|0)+(c[Ld>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Id>>2]|0,d[(c[Jd>>2]|0)+(c[Ld>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Jd>>2]|0)+(c[Ld>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Cd>>2]=c[me>>2];c[Dd>>2]=Yd;c[Ed>>2]=ve;c[Fd>>2]=ce;c[Gd>>2]=ip(c[Dd>>2]|0,c[Fd>>2]|0)|0;ce=c[Cd>>2]|0;ve=(c[Ed>>2]|0)+(c[Gd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Dd>>2]|0,d[(c[Ed>>2]|0)+(c[Gd>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[Ed>>2]|0)+(c[Gd>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[xd>>2]=c[ne>>2];c[yd>>2]=Zd;c[zd>>2]=ve;c[Ad>>2]=ce;c[Bd>>2]=ip(c[yd>>2]|0,c[Ad>>2]|0)|0;ce=c[xd>>2]|0;ve=(c[zd>>2]|0)+(c[Bd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[yd>>2]|0,d[(c[zd>>2]|0)+(c[Bd>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[zd>>2]|0)+(c[Bd>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[sd>>2]=c[oe>>2];c[td>>2]=_d;c[ud>>2]=ve;c[vd>>2]=ce;c[wd>>2]=ip(c[td>>2]|0,c[vd>>2]|0)|0;ce=c[sd>>2]|0;ve=(c[ud>>2]|0)+(c[wd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[td>>2]|0,d[(c[ud>>2]|0)+(c[wd>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[ud>>2]|0)+(c[wd>>2]<<2)+3>>0]|0);}hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[nd>>2]=c[le>>2];c[od>>2]=Xd;c[pd>>2]=ve;c[qd>>2]=ce;c[rd>>2]=ip(c[od>>2]|0,c[qd>>2]|0)|0;ce=c[nd>>2]|0;ve=(c[pd>>2]|0)+(c[rd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[od>>2]|0,d[(c[pd>>2]|0)+(c[rd>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[pd>>2]|0)+(c[rd>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[id>>2]=c[me>>2];c[jd>>2]=Yd;c[kd>>2]=ve;c[ld>>2]=ce;c[md>>2]=ip(c[jd>>2]|0,c[ld>>2]|0)|0;ce=c[id>>2]|0;ve=(c[kd>>2]|0)+(c[md>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[jd>>2]|0,d[(c[kd>>2]|0)+(c[md>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[kd>>2]|0)+(c[md>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[dd>>2]=c[ne>>2];c[ed>>2]=Zd;c[fd>>2]=ve;c[gd>>2]=ce;c[hd>>2]=ip(c[ed>>2]|0,c[gd>>2]|0)|0;ce=c[dd>>2]|0;ve=(c[fd>>2]|0)+(c[hd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[ed>>2]|0,d[(c[fd>>2]|0)+(c[hd>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[fd>>2]|0)+(c[hd>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[_c>>2]=c[oe>>2];c[$c>>2]=_d;c[ad>>2]=ve;c[bd>>2]=ce;c[cd>>2]=ip(c[$c>>2]|0,c[bd>>2]|0)|0;ce=c[_c>>2]|0;ve=(c[ad>>2]|0)+(c[cd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[$c>>2]|0,d[(c[ad>>2]|0)+(c[cd>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[ad>>2]|0)+(c[cd>>2]<<2)+3>>0]|0);if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Vc>>2]=c[le>>2];c[Wc>>2]=Xd;c[Xc>>2]=ve;c[Yc>>2]=ce;c[Zc>>2]=ip(c[Wc>>2]|0,c[Yc>>2]|0)|0;ce=c[Vc>>2]|0;ve=(c[Xc>>2]|0)+(c[Zc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Wc>>2]|0,d[(c[Xc>>2]|0)+(c[Zc>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Xc>>2]|0)+(c[Zc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Qc>>2]=c[me>>2];c[Rc>>2]=Yd;c[Sc>>2]=ve;c[Tc>>2]=ce;c[Uc>>2]=ip(c[Rc>>2]|0,c[Tc>>2]|0)|0;ce=c[Qc>>2]|0;ve=(c[Sc>>2]|0)+(c[Uc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Rc>>2]|0,d[(c[Sc>>2]|0)+(c[Uc>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[Sc>>2]|0)+(c[Uc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Lc>>2]=c[ne>>2];c[Mc>>2]=Zd;c[Nc>>2]=ve;c[Oc>>2]=ce;c[Pc>>2]=ip(c[Mc>>2]|0,c[Oc>>2]|0)|0;ce=c[Lc>>2]|0;ve=(c[Nc>>2]|0)+(c[Pc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Mc>>2]|0,d[(c[Nc>>2]|0)+(c[Pc>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[Nc>>2]|0)+(c[Pc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Gc>>2]=c[oe>>2];c[Hc>>2]=_d;c[Ic>>2]=ve;c[Jc>>2]=ce;c[Kc>>2]=ip(c[Hc>>2]|0,c[Jc>>2]|0)|0;ce=c[Gc>>2]|0;ve=(c[Ic>>2]|0)+(c[Kc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Hc>>2]|0,d[(c[Ic>>2]|0)+(c[Kc>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[Ic>>2]|0)+(c[Kc>>2]<<2)+3>>0]|0);}ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Bc>>2]=c[le>>2];c[Cc>>2]=Xd;c[Dc>>2]=ve;c[Ec>>2]=ce;c[Fc>>2]=ip(c[Cc>>2]|0,c[Ec>>2]|0)|0;ce=c[Bc>>2]|0;ve=(c[Dc>>2]|0)+(c[Fc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Cc>>2]|0,d[(c[Dc>>2]|0)+(c[Fc>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Dc>>2]|0)+(c[Fc>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[wc>>2]=c[me>>2];c[xc>>2]=Yd;c[yc>>2]=ve;c[zc>>2]=ce;c[Ac>>2]=ip(c[xc>>2]|0,c[zc>>2]|0)|0;ce=c[wc>>2]|0;ve=(c[yc>>2]|0)+(c[Ac>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[xc>>2]|0,d[(c[yc>>2]|0)+(c[Ac>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[yc>>2]|0)+(c[Ac>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[rc>>2]=c[ne>>2];c[sc>>2]=Zd;c[tc>>2]=ve;c[uc>>2]=ce;c[vc>>2]=ip(c[sc>>2]|0,c[uc>>2]|0)|0;ce=c[rc>>2]|0;ve=(c[tc>>2]|0)+(c[vc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[sc>>2]|0,d[(c[tc>>2]|0)+(c[vc>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[tc>>2]|0)+(c[vc>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[mc>>2]=c[oe>>2];c[nc>>2]=_d;c[oc>>2]=ve;c[pc>>2]=ce;c[qc>>2]=ip(c[nc>>2]|0,c[pc>>2]|0)|0;ce=c[mc>>2]|0;ve=(c[oc>>2]|0)+(c[qc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[nc>>2]|0,d[(c[oc>>2]|0)+(c[qc>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[oc>>2]|0)+(c[qc>>2]<<2)+3>>0]|0);ve=gp(Xd)|0;ce=ve|(gp(Yd)|0);ve=ce|(gp(Zd)|0);c[pe>>2]=ve|(gp(_d)|0);}if((c[le>>2]|0)>>>0>(c[ie>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}if((c[me>>2]|0)>>>0>(c[je>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}if((c[ne>>2]|0)>>>0>(c[ke>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}pe=c[ie>>2]|0;ie=c[Wd>>2]|0;qc=c[re>>2]|0;c[gc>>2]=c[le>>2];c[hc>>2]=Xd;c[ic>>2]=pe;c[jc>>2]=ie;c[kc>>2]=qc;c[lc>>2]=c[gc>>2];while(1){lc=(gp(c[hc>>2]|0)|0)==0&1;if(!(lc&(c[gc>>2]|0)>>>0<((c[ic>>2]|0)+-3|0)>>>0))break;if(hp()|0){lc=c[hc>>2]|0;qc=c[jc>>2]|0;ie=c[kc>>2]|0;c[bc>>2]=c[gc>>2];c[cc>>2]=lc;c[dc>>2]=qc;c[ec>>2]=ie;c[fc>>2]=ip(c[cc>>2]|0,c[ec>>2]|0)|0;ie=c[bc>>2]|0;qc=(c[dc>>2]|0)+(c[fc>>2]<<2)|0;a[ie>>0]=a[qc>>0]|0;a[ie+1>>0]=a[qc+1>>0]|0;jp(c[cc>>2]|0,d[(c[dc>>2]|0)+(c[fc>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[dc>>2]|0)+(c[fc>>2]<<2)+3>>0]|0);}hp()|0;qc=c[hc>>2]|0;ie=c[jc>>2]|0;lc=c[kc>>2]|0;c[Yb>>2]=c[gc>>2];c[Zb>>2]=qc;c[_b>>2]=ie;c[$b>>2]=lc;c[ac>>2]=ip(c[Zb>>2]|0,c[$b>>2]|0)|0;lc=c[Yb>>2]|0;ie=(c[_b>>2]|0)+(c[ac>>2]<<2)|0;a[lc>>0]=a[ie>>0]|0;a[lc+1>>0]=a[ie+1>>0]|0;jp(c[Zb>>2]|0,d[(c[_b>>2]|0)+(c[ac>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[_b>>2]|0)+(c[ac>>2]<<2)+3>>0]|0);if(hp()|0){ie=c[hc>>2]|0;lc=c[jc>>2]|0;qc=c[kc>>2]|0;c[Tb>>2]=c[gc>>2];c[Ub>>2]=ie;c[Vb>>2]=lc;c[Wb>>2]=qc;c[Xb>>2]=ip(c[Ub>>2]|0,c[Wb>>2]|0)|0;qc=c[Tb>>2]|0;lc=(c[Vb>>2]|0)+(c[Xb>>2]<<2)|0;a[qc>>0]=a[lc>>0]|0;a[qc+1>>0]=a[lc+1>>0]|0;jp(c[Ub>>2]|0,d[(c[Vb>>2]|0)+(c[Xb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Vb>>2]|0)+(c[Xb>>2]<<2)+3>>0]|0);}lc=c[hc>>2]|0;qc=c[jc>>2]|0;ie=c[kc>>2]|0;c[Ob>>2]=c[gc>>2];c[Pb>>2]=lc;c[Qb>>2]=qc;c[Rb>>2]=ie;c[Sb>>2]=ip(c[Pb>>2]|0,c[Rb>>2]|0)|0;ie=c[Ob>>2]|0;qc=(c[Qb>>2]|0)+(c[Sb>>2]<<2)|0;a[ie>>0]=a[qc>>0]|0;a[ie+1>>0]=a[qc+1>>0]|0;jp(c[Pb>>2]|0,d[(c[Qb>>2]|0)+(c[Sb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Qb>>2]|0)+(c[Sb>>2]<<2)+3>>0]|0);}while(1){Sb=(gp(c[hc>>2]|0)|0)==0&1;if(!(Sb&(c[gc>>2]|0)>>>0<=((c[ic>>2]|0)+-2|0)>>>0))break;Sb=c[hc>>2]|0;Qb=c[jc>>2]|0;Pb=c[kc>>2]|0;c[Jb>>2]=c[gc>>2];c[Kb>>2]=Sb;c[Lb>>2]=Qb;c[Mb>>2]=Pb;c[Nb>>2]=ip(c[Kb>>2]|0,c[Mb>>2]|0)|0;Pb=c[Jb>>2]|0;Qb=(c[Lb>>2]|0)+(c[Nb>>2]<<2)|0;a[Pb>>0]=a[Qb>>0]|0;a[Pb+1>>0]=a[Qb+1>>0]|0;jp(c[Kb>>2]|0,d[(c[Lb>>2]|0)+(c[Nb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Lb>>2]|0)+(c[Nb>>2]<<2)+3>>0]|0);}while(1){De=c[gc>>2]|0;if((c[gc>>2]|0)>>>0>((c[ic>>2]|0)+-2|0)>>>0)break;Nb=c[hc>>2]|0;Lb=c[jc>>2]|0;Kb=c[kc>>2]|0;c[Eb>>2]=De;c[Fb>>2]=Nb;c[Gb>>2]=Lb;c[Hb>>2]=Kb;c[Ib>>2]=ip(c[Fb>>2]|0,c[Hb>>2]|0)|0;Kb=c[Eb>>2]|0;Lb=(c[Gb>>2]|0)+(c[Ib>>2]<<2)|0;a[Kb>>0]=a[Lb>>0]|0;a[Kb+1>>0]=a[Lb+1>>0]|0;jp(c[Fb>>2]|0,d[(c[Gb>>2]|0)+(c[Ib>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Gb>>2]|0)+(c[Ib>>2]<<2)+3>>0]|0);}if(De>>>0<(c[ic>>2]|0)>>>0){ic=c[hc>>2]|0;hc=c[jc>>2]|0;jc=c[kc>>2]|0;c[zb>>2]=c[gc>>2];c[Ab>>2]=ic;c[Bb>>2]=hc;c[Cb>>2]=jc;c[Db>>2]=ip(c[Ab>>2]|0,c[Cb>>2]|0)|0;a[c[zb>>2]>>0]=a[(c[Bb>>2]|0)+(c[Db>>2]<<2)>>0]|0;zb=c[Ab>>2]|0;if((d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+3>>0]|0|0)!=1){if((c[zb+4>>2]|0)>>>0<32?(jp(c[Ab>>2]|0,d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+2>>0]|0),(c[(c[Ab>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[Ab>>2]|0)+4>>2]=32;}else jp(zb,d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+1;}gc=c[je>>2]|0;je=c[Wd>>2]|0;Db=c[re>>2]|0;c[tb>>2]=c[me>>2];c[ub>>2]=Yd;c[vb>>2]=gc;c[wb>>2]=je;c[xb>>2]=Db;c[yb>>2]=c[tb>>2];while(1){yb=(gp(c[ub>>2]|0)|0)==0&1;if(!(yb&(c[tb>>2]|0)>>>0<((c[vb>>2]|0)+-3|0)>>>0))break;if(hp()|0){yb=c[ub>>2]|0;Db=c[wb>>2]|0;je=c[xb>>2]|0;c[ob>>2]=c[tb>>2];c[pb>>2]=yb;c[qb>>2]=Db;c[rb>>2]=je;c[sb>>2]=ip(c[pb>>2]|0,c[rb>>2]|0)|0;je=c[ob>>2]|0;Db=(c[qb>>2]|0)+(c[sb>>2]<<2)|0;a[je>>0]=a[Db>>0]|0;a[je+1>>0]=a[Db+1>>0]|0;jp(c[pb>>2]|0,d[(c[qb>>2]|0)+(c[sb>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[qb>>2]|0)+(c[sb>>2]<<2)+3>>0]|0);}hp()|0;Db=c[ub>>2]|0;je=c[wb>>2]|0;yb=c[xb>>2]|0;c[jb>>2]=c[tb>>2];c[kb>>2]=Db;c[lb>>2]=je;c[mb>>2]=yb;c[nb>>2]=ip(c[kb>>2]|0,c[mb>>2]|0)|0;yb=c[jb>>2]|0;je=(c[lb>>2]|0)+(c[nb>>2]<<2)|0;a[yb>>0]=a[je>>0]|0;a[yb+1>>0]=a[je+1>>0]|0;jp(c[kb>>2]|0,d[(c[lb>>2]|0)+(c[nb>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[lb>>2]|0)+(c[nb>>2]<<2)+3>>0]|0);if(hp()|0){je=c[ub>>2]|0;yb=c[wb>>2]|0;Db=c[xb>>2]|0;c[eb>>2]=c[tb>>2];c[fb>>2]=je;c[gb>>2]=yb;c[hb>>2]=Db;c[ib>>2]=ip(c[fb>>2]|0,c[hb>>2]|0)|0;Db=c[eb>>2]|0;yb=(c[gb>>2]|0)+(c[ib>>2]<<2)|0;a[Db>>0]=a[yb>>0]|0;a[Db+1>>0]=a[yb+1>>0]|0;jp(c[fb>>2]|0,d[(c[gb>>2]|0)+(c[ib>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[gb>>2]|0)+(c[ib>>2]<<2)+3>>0]|0);}yb=c[ub>>2]|0;Db=c[wb>>2]|0;je=c[xb>>2]|0;c[$a>>2]=c[tb>>2];c[ab>>2]=yb;c[bb>>2]=Db;c[cb>>2]=je;c[db>>2]=ip(c[ab>>2]|0,c[cb>>2]|0)|0;je=c[$a>>2]|0;Db=(c[bb>>2]|0)+(c[db>>2]<<2)|0;a[je>>0]=a[Db>>0]|0;a[je+1>>0]=a[Db+1>>0]|0;jp(c[ab>>2]|0,d[(c[bb>>2]|0)+(c[db>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[bb>>2]|0)+(c[db>>2]<<2)+3>>0]|0);}while(1){db=(gp(c[ub>>2]|0)|0)==0&1;if(!(db&(c[tb>>2]|0)>>>0<=((c[vb>>2]|0)+-2|0)>>>0))break;db=c[ub>>2]|0;bb=c[wb>>2]|0;ab=c[xb>>2]|0;c[Wa>>2]=c[tb>>2];c[Xa>>2]=db;c[Ya>>2]=bb;c[Za>>2]=ab;c[_a>>2]=ip(c[Xa>>2]|0,c[Za>>2]|0)|0;ab=c[Wa>>2]|0;bb=(c[Ya>>2]|0)+(c[_a>>2]<<2)|0;a[ab>>0]=a[bb>>0]|0;a[ab+1>>0]=a[bb+1>>0]|0;jp(c[Xa>>2]|0,d[(c[Ya>>2]|0)+(c[_a>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[Ya>>2]|0)+(c[_a>>2]<<2)+3>>0]|0);}while(1){Ee=c[tb>>2]|0;if((c[tb>>2]|0)>>>0>((c[vb>>2]|0)+-2|0)>>>0)break;_a=c[ub>>2]|0;Ya=c[wb>>2]|0;Xa=c[xb>>2]|0;c[Ra>>2]=Ee;c[Sa>>2]=_a;c[Ta>>2]=Ya;c[Ua>>2]=Xa;c[Va>>2]=ip(c[Sa>>2]|0,c[Ua>>2]|0)|0;Xa=c[Ra>>2]|0;Ya=(c[Ta>>2]|0)+(c[Va>>2]<<2)|0;a[Xa>>0]=a[Ya>>0]|0;a[Xa+1>>0]=a[Ya+1>>0]|0;jp(c[Sa>>2]|0,d[(c[Ta>>2]|0)+(c[Va>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[Ta>>2]|0)+(c[Va>>2]<<2)+3>>0]|0);}if(Ee>>>0<(c[vb>>2]|0)>>>0){vb=c[ub>>2]|0;ub=c[wb>>2]|0;wb=c[xb>>2]|0;c[Ma>>2]=c[tb>>2];c[Na>>2]=vb;c[Oa>>2]=ub;c[Pa>>2]=wb;c[Qa>>2]=ip(c[Na>>2]|0,c[Pa>>2]|0)|0;a[c[Ma>>2]>>0]=a[(c[Oa>>2]|0)+(c[Qa>>2]<<2)>>0]|0;Ma=c[Na>>2]|0;if((d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+3>>0]|0|0)!=1){if((c[Ma+4>>2]|0)>>>0<32?(jp(c[Na>>2]|0,d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+2>>0]|0),(c[(c[Na>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[Na>>2]|0)+4>>2]=32;}else jp(Ma,d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+1;}tb=c[ke>>2]|0;ke=c[Wd>>2]|0;Qa=c[re>>2]|0;c[Ga>>2]=c[ne>>2];c[Ha>>2]=Zd;c[Ia>>2]=tb;c[Ja>>2]=ke;c[Ka>>2]=Qa;c[La>>2]=c[Ga>>2];while(1){La=(gp(c[Ha>>2]|0)|0)==0&1;if(!(La&(c[Ga>>2]|0)>>>0<((c[Ia>>2]|0)+-3|0)>>>0))break;if(hp()|0){La=c[Ha>>2]|0;Qa=c[Ja>>2]|0;ke=c[Ka>>2]|0;c[Ba>>2]=c[Ga>>2];c[Ca>>2]=La;c[Da>>2]=Qa;c[Ea>>2]=ke;c[Fa>>2]=ip(c[Ca>>2]|0,c[Ea>>2]|0)|0;ke=c[Ba>>2]|0;Qa=(c[Da>>2]|0)+(c[Fa>>2]<<2)|0;a[ke>>0]=a[Qa>>0]|0;a[ke+1>>0]=a[Qa+1>>0]|0;jp(c[Ca>>2]|0,d[(c[Da>>2]|0)+(c[Fa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[Da>>2]|0)+(c[Fa>>2]<<2)+3>>0]|0);}hp()|0;Qa=c[Ha>>2]|0;ke=c[Ja>>2]|0;La=c[Ka>>2]|0;c[wa>>2]=c[Ga>>2];c[xa>>2]=Qa;c[ya>>2]=ke;c[za>>2]=La;c[Aa>>2]=ip(c[xa>>2]|0,c[za>>2]|0)|0;La=c[wa>>2]|0;ke=(c[ya>>2]|0)+(c[Aa>>2]<<2)|0;a[La>>0]=a[ke>>0]|0;a[La+1>>0]=a[ke+1>>0]|0;jp(c[xa>>2]|0,d[(c[ya>>2]|0)+(c[Aa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ya>>2]|0)+(c[Aa>>2]<<2)+3>>0]|0);if(hp()|0){ke=c[Ha>>2]|0;La=c[Ja>>2]|0;Qa=c[Ka>>2]|0;c[ra>>2]=c[Ga>>2];c[sa>>2]=ke;c[ta>>2]=La;c[ua>>2]=Qa;c[va>>2]=ip(c[sa>>2]|0,c[ua>>2]|0)|0;Qa=c[ra>>2]|0;La=(c[ta>>2]|0)+(c[va>>2]<<2)|0;a[Qa>>0]=a[La>>0]|0;a[Qa+1>>0]=a[La+1>>0]|0;jp(c[sa>>2]|0,d[(c[ta>>2]|0)+(c[va>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ta>>2]|0)+(c[va>>2]<<2)+3>>0]|0);}La=c[Ha>>2]|0;Qa=c[Ja>>2]|0;ke=c[Ka>>2]|0;c[ma>>2]=c[Ga>>2];c[na>>2]=La;c[oa>>2]=Qa;c[pa>>2]=ke;c[qa>>2]=ip(c[na>>2]|0,c[pa>>2]|0)|0;ke=c[ma>>2]|0;Qa=(c[oa>>2]|0)+(c[qa>>2]<<2)|0;a[ke>>0]=a[Qa>>0]|0;a[ke+1>>0]=a[Qa+1>>0]|0;jp(c[na>>2]|0,d[(c[oa>>2]|0)+(c[qa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[oa>>2]|0)+(c[qa>>2]<<2)+3>>0]|0);}while(1){qa=(gp(c[Ha>>2]|0)|0)==0&1;if(!(qa&(c[Ga>>2]|0)>>>0<=((c[Ia>>2]|0)+-2|0)>>>0))break;qa=c[Ha>>2]|0;oa=c[Ja>>2]|0;na=c[Ka>>2]|0;c[ha>>2]=c[Ga>>2];c[ia>>2]=qa;c[ja>>2]=oa;c[ka>>2]=na;c[la>>2]=ip(c[ia>>2]|0,c[ka>>2]|0)|0;na=c[ha>>2]|0;oa=(c[ja>>2]|0)+(c[la>>2]<<2)|0;a[na>>0]=a[oa>>0]|0;a[na+1>>0]=a[oa+1>>0]|0;jp(c[ia>>2]|0,d[(c[ja>>2]|0)+(c[la>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ja>>2]|0)+(c[la>>2]<<2)+3>>0]|0);}while(1){Fe=c[Ga>>2]|0;if((c[Ga>>2]|0)>>>0>((c[Ia>>2]|0)+-2|0)>>>0)break;la=c[Ha>>2]|0;ja=c[Ja>>2]|0;ia=c[Ka>>2]|0;c[ca>>2]=Fe;c[da>>2]=la;c[ea>>2]=ja;c[fa>>2]=ia;c[ga>>2]=ip(c[da>>2]|0,c[fa>>2]|0)|0;ia=c[ca>>2]|0;ja=(c[ea>>2]|0)+(c[ga>>2]<<2)|0;a[ia>>0]=a[ja>>0]|0;a[ia+1>>0]=a[ja+1>>0]|0;jp(c[da>>2]|0,d[(c[ea>>2]|0)+(c[ga>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ea>>2]|0)+(c[ga>>2]<<2)+3>>0]|0);}if(Fe>>>0<(c[Ia>>2]|0)>>>0){Ia=c[Ha>>2]|0;Ha=c[Ja>>2]|0;Ja=c[Ka>>2]|0;c[Z>>2]=c[Ga>>2];c[_>>2]=Ia;c[$>>2]=Ha;c[aa>>2]=Ja;c[ba>>2]=ip(c[_>>2]|0,c[aa>>2]|0)|0;a[c[Z>>2]>>0]=a[(c[$>>2]|0)+(c[ba>>2]<<2)>>0]|0;Z=c[_>>2]|0;if((d[(c[$>>2]|0)+(c[ba>>2]<<2)+3>>0]|0|0)!=1){if((c[Z+4>>2]|0)>>>0<32?(jp(c[_>>2]|0,d[(c[$>>2]|0)+(c[ba>>2]<<2)+2>>0]|0),(c[(c[_>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[_>>2]|0)+4>>2]=32;}else jp(Z,d[(c[$>>2]|0)+(c[ba>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+1;}Ga=c[Ud>>2]|0;Ud=c[Wd>>2]|0;Wd=c[re>>2]|0;c[T>>2]=c[oe>>2];c[U>>2]=_d;c[V>>2]=Ga;c[W>>2]=Ud;c[X>>2]=Wd;c[Y>>2]=c[T>>2];while(1){Y=(gp(c[U>>2]|0)|0)==0&1;if(!(Y&(c[T>>2]|0)>>>0<((c[V>>2]|0)+-3|0)>>>0))break;if(hp()|0){Y=c[U>>2]|0;Wd=c[W>>2]|0;Ud=c[X>>2]|0;c[O>>2]=c[T>>2];c[P>>2]=Y;c[Q>>2]=Wd;c[R>>2]=Ud;c[S>>2]=ip(c[P>>2]|0,c[R>>2]|0)|0;Ud=c[O>>2]|0;Wd=(c[Q>>2]|0)+(c[S>>2]<<2)|0;a[Ud>>0]=a[Wd>>0]|0;a[Ud+1>>0]=a[Wd+1>>0]|0;jp(c[P>>2]|0,d[(c[Q>>2]|0)+(c[S>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[Q>>2]|0)+(c[S>>2]<<2)+3>>0]|0);}hp()|0;Wd=c[U>>2]|0;Ud=c[W>>2]|0;Y=c[X>>2]|0;c[J>>2]=c[T>>2];c[K>>2]=Wd;c[L>>2]=Ud;c[M>>2]=Y;c[N>>2]=ip(c[K>>2]|0,c[M>>2]|0)|0;Y=c[J>>2]|0;Ud=(c[L>>2]|0)+(c[N>>2]<<2)|0;a[Y>>0]=a[Ud>>0]|0;a[Y+1>>0]=a[Ud+1>>0]|0;jp(c[K>>2]|0,d[(c[L>>2]|0)+(c[N>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[L>>2]|0)+(c[N>>2]<<2)+3>>0]|0);if(hp()|0){Ud=c[U>>2]|0;Y=c[W>>2]|0;Wd=c[X>>2]|0;c[E>>2]=c[T>>2];c[F>>2]=Ud;c[G>>2]=Y;c[H>>2]=Wd;c[I>>2]=ip(c[F>>2]|0,c[H>>2]|0)|0;Wd=c[E>>2]|0;Y=(c[G>>2]|0)+(c[I>>2]<<2)|0;a[Wd>>0]=a[Y>>0]|0;a[Wd+1>>0]=a[Y+1>>0]|0;jp(c[F>>2]|0,d[(c[G>>2]|0)+(c[I>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[G>>2]|0)+(c[I>>2]<<2)+3>>0]|0);}Y=c[U>>2]|0;Wd=c[W>>2]|0;Ud=c[X>>2]|0;c[z>>2]=c[T>>2];c[A>>2]=Y;c[B>>2]=Wd;c[C>>2]=Ud;c[D>>2]=ip(c[A>>2]|0,c[C>>2]|0)|0;Ud=c[z>>2]|0;Wd=(c[B>>2]|0)+(c[D>>2]<<2)|0;a[Ud>>0]=a[Wd>>0]|0;a[Ud+1>>0]=a[Wd+1>>0]|0;jp(c[A>>2]|0,d[(c[B>>2]|0)+(c[D>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[B>>2]|0)+(c[D>>2]<<2)+3>>0]|0);}while(1){D=(gp(c[U>>2]|0)|0)==0&1;if(!(D&(c[T>>2]|0)>>>0<=((c[V>>2]|0)+-2|0)>>>0))break;D=c[U>>2]|0;B=c[W>>2]|0;A=c[X>>2]|0;c[u>>2]=c[T>>2];c[v>>2]=D;c[w>>2]=B;c[x>>2]=A;c[y>>2]=ip(c[v>>2]|0,c[x>>2]|0)|0;A=c[u>>2]|0;B=(c[w>>2]|0)+(c[y>>2]<<2)|0;a[A>>0]=a[B>>0]|0;a[A+1>>0]=a[B+1>>0]|0;jp(c[v>>2]|0,d[(c[w>>2]|0)+(c[y>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[w>>2]|0)+(c[y>>2]<<2)+3>>0]|0);}while(1){Ge=c[T>>2]|0;if((c[T>>2]|0)>>>0>((c[V>>2]|0)+-2|0)>>>0)break;y=c[U>>2]|0;w=c[W>>2]|0;v=c[X>>2]|0;c[p>>2]=Ge;c[q>>2]=y;c[r>>2]=w;c[s>>2]=v;c[t>>2]=ip(c[q>>2]|0,c[s>>2]|0)|0;v=c[p>>2]|0;w=(c[r>>2]|0)+(c[t>>2]<<2)|0;a[v>>0]=a[w>>0]|0;a[v+1>>0]=a[w+1>>0]|0;jp(c[q>>2]|0,d[(c[r>>2]|0)+(c[t>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[r>>2]|0)+(c[t>>2]<<2)+3>>0]|0);}if(Ge>>>0<(c[V>>2]|0)>>>0){V=c[U>>2]|0;U=c[W>>2]|0;W=c[X>>2]|0;c[j>>2]=c[T>>2];c[k>>2]=V;c[m>>2]=U;c[n>>2]=W;c[o>>2]=ip(c[k>>2]|0,c[n>>2]|0)|0;a[c[j>>2]>>0]=a[(c[m>>2]|0)+(c[o>>2]<<2)>>0]|0;j=c[k>>2]|0;if((d[(c[m>>2]|0)+(c[o>>2]<<2)+3>>0]|0|0)!=1){if((c[j+4>>2]|0)>>>0<32?(jp(c[k>>2]|0,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0),(c[(c[k>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[k>>2]|0)+4>>2]=32;}else jp(j,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+1;}T=lp(Xd)|0;Xd=T&(lp(Yd)|0);Yd=Xd&(lp(Zd)|0);c[we>>2]=Yd&(lp(_d)|0);if(c[we>>2]|0){c[Md>>2]=c[Od>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}else{c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}return 0;}function Mp(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+40|0;m=j+36|0;n=j+32|0;o=j+28|0;p=j+24|0;q=j+20|0;r=j+16|0;s=j+12|0;t=j+8|0;u=j+4|0;v=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=c[p>>2];c[v>>2]=Bp(c[m>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0;s=(ap(c[v>>2]|0)|0)!=0;r=c[v>>2]|0;if(s){c[k>>2]=r;w=c[k>>2]|0;l=j;return w|0;}if(r>>>0>=(c[q>>2]|0)>>>0){c[k>>2]=-72;w=c[k>>2]|0;l=j;return w|0;}else{c[u>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[v>>2]|0);c[k>>2]=Jp(c[n>>2]|0,c[o>>2]|0,c[u>>2]|0,c[q>>2]|0,c[m>>2]|0,c[t>>2]|0)|0;w=c[k>>2]|0;l=j;return w|0;}return 0;}function Np(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d+8|0;i=d+4|0;j=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)>>>0>=(c[e>>2]|0)>>>0)k=15;else k=(c[f>>2]<<4>>>0)/((c[e>>2]|0)>>>0)|0;c[g>>2]=k;c[h>>2]=(c[e>>2]|0)>>>8;c[i>>2]=(c[7008+((c[g>>2]|0)*24|0)>>2]|0)+(N(c[7008+((c[g>>2]|0)*24|0)+4>>2]|0,c[h>>2]|0)|0);c[j>>2]=(c[7008+((c[g>>2]|0)*24|0)+8>>2]|0)+(N(c[7008+((c[g>>2]|0)*24|0)+8+4>>2]|0,c[h>>2]|0)|0);c[j>>2]=(c[j>>2]|0)+((c[j>>2]|0)>>>3);l=d;return(c[j>>2]|0)>>>0<(c[i>>2]|0)>>>0|0;}function Op(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;q=i+24|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;bp(q,c[o>>2]|0);h=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;if(d[q+1>>0]|0|0){r=Gp(h,j,k,m,n,o)|0;l=i;return r|0;}else{r=cp(h,j,k,m,n,o)|0;l=i;return r|0;}return 0;}function Pp(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+40|0;m=j+36|0;n=j+32|0;o=j+28|0;p=j+24|0;q=j+20|0;r=j+16|0;s=j+12|0;t=j+8|0;u=j+4|0;v=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=c[p>>2];c[v>>2]=$o(c[m>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0;s=(ap(c[v>>2]|0)|0)!=0;r=c[v>>2]|0;if(s){c[k>>2]=r;w=c[k>>2]|0;l=j;return w|0;}if(r>>>0>=(c[q>>2]|0)>>>0){c[k>>2]=-72;w=c[k>>2]|0;l=j;return w|0;}else{c[u>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[v>>2]|0);c[k>>2]=cp(c[n>>2]|0,c[o>>2]|0,c[u>>2]|0,c[q>>2]|0,c[m>>2]|0,c[t>>2]|0)|0;w=c[k>>2]|0;l=j;return w|0;}return 0;}function Qp(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;q=i+24|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;bp(q,c[o>>2]|0);h=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;if(d[q+1>>0]|0|0){r=Jp(h,j,k,m,n,o)|0;l=i;return r|0;}else{r=vp(h,j,k,m,n,o)|0;l=i;return r|0;}return 0;}function Rp(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+36|0;m=j+32|0;n=j+28|0;o=j+24|0;p=j+20|0;q=j+16|0;r=j+12|0;s=j+8|0;t=j+4|0;u=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;if(!(c[o>>2]|0)){c[k>>2]=-70;v=c[k>>2]|0;l=j;return v|0;}if(!(c[q>>2]|0)){c[k>>2]=-20;v=c[k>>2]|0;l=j;return v|0;}c[u>>2]=Np(c[o>>2]|0,c[q>>2]|0)|0;i=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;r=c[s>>2]|0;s=c[t>>2]|0;if(c[u>>2]|0)w=Mp(i,m,n,o,p,q,r,s)|0;else w=Ap(i,m,n,o,p,q,r,s)|0;c[k>>2]=w;v=c[k>>2]|0;l=j;return v|0;}function Sp(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+48|0;d=b+24|0;e=b+16|0;f=b;c[e>>2]=a;c[(c[e>>2]|0)+28912>>2]=0;c[(c[e>>2]|0)+28940>>2]=0;c[(c[e>>2]|0)+28972>>2]=134217729;c[(c[e>>2]|0)+28952>>2]=0;c[(c[e>>2]|0)+28948>>2]=0;c[(c[e>>2]|0)+28960>>2]=0;c[(c[e>>2]|0)+28964>>2]=0;c[(c[e>>2]|0)+28980>>2]=0;c[(c[e>>2]|0)+28956>>2]=0;Tp(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];f=Up(d)|0;c[(c[e>>2]|0)+28944>>2]=f;l=b;return;}function Tp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+28|0;e=b+24|0;f=b+20|0;g=b+16|0;h=b;c[d>>2]=0;c[e>>2]=0;c[f>>2]=0;c[g>>2]=0;c[h>>2]=c[d>>2];c[h+4>>2]=c[e>>2];c[h+8>>2]=c[f>>2];c[h+12>>2]=c[g>>2];c[a>>2]=c[h>>2];c[a+4>>2]=c[h+4>>2];c[a+8>>2]=c[h+8>>2];c[a+12>>2]=c[h+12>>2];l=b;return;}function Up(a){a=a|0;return(c[a+8>>2]&256|0)!=0|0;}function Vp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+32|0;d=b+8|0;e=b+4|0;f=b;if(((c[a>>2]|0)!=0^1)&1^((c[a+4>>2]|0)!=0^1)&1|0){c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;};c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[f>>2]=Rh(160112,d)|0;if(c[f>>2]|0){d=(c[f>>2]|0)+28920|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[(c[f>>2]|0)+28996>>2]=0;c[(c[f>>2]|0)+29e3>>2]=0;Sp(c[f>>2]|0);c[e>>2]=c[f>>2];g=c[e>>2]|0;l=b;return g|0;}else{c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}return 0;}function Wp(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[5412];c[b+4>>2]=c[5413];c[b+8>>2]=c[5414];d=Vp(b)|0;l=a;return d|0;}function Xp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+20|0;e=b+16|0;f=b+12|0;g=b;c[f>>2]=a;if(!(c[f>>2]|0)){c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}if(c[(c[f>>2]|0)+28940>>2]|0){c[e>>2]=-64;h=c[e>>2]|0;l=b;return h|0;}a=(c[f>>2]|0)+28920|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];Yp(c[(c[f>>2]|0)+28948>>2]|0)|0;c[(c[f>>2]|0)+28948>>2]=0;a=c[(c[f>>2]|0)+28960>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);c[(c[f>>2]|0)+28960>>2]=0;if(c[(c[f>>2]|0)+28996>>2]|0)Zp(c[(c[f>>2]|0)+28996>>2]|0,c[(c[f>>2]|0)+29e3>>2]|0)|0;a=c[f>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}function Yp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+20|0;e=b+16|0;f=b+12|0;g=b;c[f>>2]=a;if(!(c[f>>2]|0)){c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}else{a=(c[f>>2]|0)+28732|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];a=c[c[f>>2]>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);a=c[f>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}return 0;}function Zp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;c[g>>2]=b;switch(c[g>>2]|0){case 7:{c[e>>2]=bq(c[f>>2]|0)|0;break;}case 6:{c[e>>2]=aq(c[f>>2]|0)|0;break;}case 5:{c[e>>2]=$p(c[f>>2]|0)|0;break;}case 4:{c[e>>2]=_p(c[f>>2]|0)|0;break;}default:c[e>>2]=-12;}l=d;return c[e>>2]|0;}function _p(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=fq(c[d>>2]|0)|0;l=b;return a|0;}function $p(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{eq(c[c[e>>2]>>2]|0)|0;Dy(c[(c[e>>2]|0)+48>>2]|0);Dy(c[(c[e>>2]|0)+60>>2]|0);Dy(c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}return 0;}function aq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{dq(c[c[e>>2]>>2]|0)|0;Dy(c[(c[e>>2]|0)+28>>2]|0);Dy(c[(c[e>>2]|0)+40>>2]|0);Dy(c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}return 0;}function bq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}cq(c[c[e>>2]>>2]|0)|0;if(c[(c[e>>2]|0)+36>>2]|0)xc[c[(c[e>>2]|0)+92+4>>2]&31](c[(c[e>>2]|0)+92+8>>2]|0,c[(c[e>>2]|0)+36>>2]|0);if(c[(c[e>>2]|0)+48>>2]|0)xc[c[(c[e>>2]|0)+92+4>>2]&31](c[(c[e>>2]|0)+92+8>>2]|0,c[(c[e>>2]|0)+48>>2]|0);xc[c[(c[e>>2]|0)+92+4>>2]&31](c[(c[e>>2]|0)+92+8>>2]|0,c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}function cq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{xc[c[(c[e>>2]|0)+21692+4>>2]&31](c[(c[e>>2]|0)+21692+8>>2]|0,c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}return 0;}function dq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;Dy(c[d>>2]|0);l=b;return 0;}function eq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;Dy(c[d>>2]|0);l=b;return 0;}function fq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{gq(c[c[e>>2]>>2]|0)|0;Dy(c[(c[e>>2]|0)+40>>2]|0);Dy(c[(c[e>>2]|0)+52>>2]|0);Dy(c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}return 0;}function gq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;Dy(c[d>>2]|0);l=b;return 0;}function hq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(jq()|0)!=0;f=kq(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=lq(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;c[f>>2]=a;c[g>>2]=b;a:do{if((c[g>>2]|0)>>>0<4)c[e>>2]=0;else{c[h>>2]=hq(c[f>>2]|0)|0;switch(c[h>>2]|0){case-47205084:{c[e>>2]=4;break a;break;}case-47205083:{c[e>>2]=5;break a;break;}case-47205082:{c[e>>2]=6;break a;break;}case-47205081:{c[e>>2]=7;break a;break;}default:{c[e>>2]=0;break a;}}}}while(0);l=d;return c[e>>2]|0;}function jq(){return d[11936]|0|0;}function kq(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function lq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function mq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=nq(c[e>>2]|0,c[f>>2]|0,0)|0;l=d;return b|0;}function nq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=l;l=l+48|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+32|0;o=g+8|0;p=g+4|0;q=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=oq(c[k>>2]|0)|0;if((c[j>>2]|0)>>>0<(c[m>>2]|0)>>>0){c[h>>2]=-72;r=c[h>>2]|0;l=g;return r|0;}a[n>>0]=a[(c[i>>2]|0)+((c[m>>2]|0)-1)>>0]|0;c[o>>2]=(d[n>>0]|0)&3;c[p>>2]=(d[n>>0]|0)>>5&1;c[q>>2]=(d[n>>0]|0)>>6;if(c[p>>2]|0)s=(c[q>>2]|0)!=0^1;else s=0;c[h>>2]=(c[m>>2]|0)+(((c[p>>2]|0)!=0^1)&1)+(c[3456+(c[o>>2]<<2)>>2]|0)+(c[3472+(c[q>>2]<<2)>>2]|0)+(s&1);r=c[h>>2]|0;l=g;return r|0;}function oq(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[d>>2]|0)==1?1:5;l=b;return c[e>>2]|0;}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=qq(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,0)|0;l=e;return d|0;}function qq(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+72|0;j=h+68|0;k=h+64|0;m=h+60|0;n=h+56|0;o=h+52|0;p=h+48|0;q=h+44|0;r=h+77|0;s=h+40|0;t=h+36|0;u=h+32|0;v=h+28|0;w=h+24|0;x=h+8|0;z=h+20|0;A=h;B=h+76|0;C=h+16|0;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[k>>2];c[p>>2]=oq(c[n>>2]|0)|0;if((c[m>>2]|0)>>>0<(c[p>>2]|0)>>>0){c[i>>2]=c[p>>2];D=c[i>>2]|0;l=h;return D|0;}if((c[n>>2]|0)!=1?(hq(c[k>>2]|0)|0)!=-47205080:0){if(((hq(c[k>>2]|0)|0)&-16|0)!=407710288){c[i>>2]=-10;D=c[i>>2]|0;l=h;return D|0;}if((c[m>>2]|0)>>>0<8){c[i>>2]=8;D=c[i>>2]|0;l=h;return D|0;}else{g=c[j>>2]|0;f=g+40|0;do{c[g>>2]=0;g=g+4|0;}while((g|0)<(f|0));g=hq((c[k>>2]|0)+4|0)|0;f=c[j>>2]|0;c[f>>2]=g;c[f+4>>2]=0;c[(c[j>>2]|0)+20>>2]=1;c[i>>2]=0;D=c[i>>2]|0;l=h;return D|0;}}c[q>>2]=nq(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;n=c[q>>2]|0;if((c[m>>2]|0)>>>0<(c[q>>2]|0)>>>0){c[i>>2]=n;D=c[i>>2]|0;l=h;return D|0;}c[(c[j>>2]|0)+24>>2]=n;a[r>>0]=a[(c[o>>2]|0)+((c[p>>2]|0)-1)>>0]|0;c[s>>2]=c[p>>2];c[t>>2]=(d[r>>0]|0)&3;c[u>>2]=(d[r>>0]|0)>>2&1;c[v>>2]=(d[r>>0]|0)>>5&1;c[w>>2]=(d[r>>0]|0)>>6;p=x;c[p>>2]=0;c[p+4>>2]=0;c[z>>2]=0;p=A;c[p>>2]=-1;c[p+4>>2]=-1;if((d[r>>0]|0)&8|0){c[i>>2]=-14;D=c[i>>2]|0;l=h;return D|0;}do{if(!(c[v>>2]|0)){r=c[o>>2]|0;p=c[s>>2]|0;c[s>>2]=p+1;a[B>>0]=a[r+p>>0]|0;c[C>>2]=((d[B>>0]|0)>>3)+10;if((c[C>>2]|0)>>>0<=30){p=jE(1,0,c[C>>2]|0)|0;r=x;c[r>>2]=p;c[r+4>>2]=y;r=x;p=iE(c[r>>2]|0,c[r+4>>2]|0,3)|0;r=(d[B>>0]|0)&7;n=cE(p|0,y|0,r|0,((r|0)<0)<<31>>31|0)|0;r=x;p=dE(c[r>>2]|0,c[r+4>>2]|0,n|0,y|0)|0;n=x;c[n>>2]=p;c[n+4>>2]=y;break;}c[i>>2]=-16;D=c[i>>2]|0;l=h;return D|0;}}while(0);switch(c[t>>2]|0){case 3:{c[z>>2]=hq((c[o>>2]|0)+(c[s>>2]|0)|0)|0;c[s>>2]=(c[s>>2]|0)+4;break;}case 1:{c[z>>2]=d[(c[o>>2]|0)+(c[s>>2]|0)>>0];c[s>>2]=(c[s>>2]|0)+1;break;}case 2:{c[z>>2]=(rq((c[o>>2]|0)+(c[s>>2]|0)|0)|0)&65535;c[s>>2]=(c[s>>2]|0)+2;break;}default:{}}switch(c[w>>2]|0){case 3:{w=A;c[w>>2]=sq((c[o>>2]|0)+(c[s>>2]|0)|0)|0;c[w+4>>2]=y;break;}case 1:{w=((rq((c[o>>2]|0)+(c[s>>2]|0)|0)|0)&65535)+256|0;t=A;c[t>>2]=w;c[t+4>>2]=((w|0)<0)<<31>>31;break;}case 2:{w=A;c[w>>2]=hq((c[o>>2]|0)+(c[s>>2]|0)|0)|0;c[w+4>>2]=0;break;}default:if(c[v>>2]|0){w=A;c[w>>2]=d[(c[o>>2]|0)+(c[s>>2]|0)>>0];c[w+4>>2]=0;}}if(c[v>>2]|0){v=A;w=c[v+4>>2]|0;s=x;c[s>>2]=c[v>>2];c[s+4>>2]=w;}c[(c[j>>2]|0)+20>>2]=0;w=A;A=c[w+4>>2]|0;s=c[j>>2]|0;c[s>>2]=c[w>>2];c[s+4>>2]=A;A=x;s=c[A+4>>2]|0;w=(c[j>>2]|0)+8|0;c[w>>2]=c[A>>2];c[w+4>>2]=s;s=x;w=c[s+4>>2]|0;A=w>>>0<0|(w|0)==0&(c[s>>2]|0)>>>0<131072;s=x;x=c[s+4>>2]|0;x=A?c[s>>2]|0:131072;c[(c[j>>2]|0)+16>>2]=x;c[(c[j>>2]|0)+28>>2]=c[z>>2];c[(c[j>>2]|0)+32>>2]=c[u>>2];c[i>>2]=0;D=c[i>>2]|0;l=h;return D|0;}function rq(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(jq()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=vq(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function sq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(jq()|0)!=0;f=tq(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=uq(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function tq(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function uq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function vq(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function wq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+64|0;e=d+48|0;f=d+60|0;g=d+56|0;h=d+40|0;i=d;c[f>>2]=a;c[g>>2]=b;b=(iq(c[f>>2]|0,c[g>>2]|0)|0)!=0;a=c[f>>2]|0;f=c[g>>2]|0;do{if(!b){if(pq(i,a,f)|0){g=e;c[g>>2]=-2;c[g+4>>2]=-1;break;}if((c[i+20>>2]|0)==1){g=e;c[g>>2]=0;c[g+4>>2]=0;break;}else{g=i;j=c[g+4>>2]|0;k=e;c[k>>2]=c[g>>2];c[k+4>>2]=j;break;}}else{j=xq(a,f)|0;k=h;c[k>>2]=j;c[k+4>>2]=y;k=h;j=(c[k>>2]|0)==0&(c[k+4>>2]|0)==0;k=h;g=j?-1:c[k+4>>2]|0;m=e;c[m>>2]=j?-1:c[k>>2]|0;c[m+4>>2]=g;}}while(0);h=e;y=c[h+4>>2]|0;l=d;return c[h>>2]|0;}function xq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;d=l;l=l+112|0;e=d+80|0;f=d+108|0;g=d+104|0;h=d+100|0;i=d+40|0;j=d+96|0;k=d+24|0;m=d+92|0;n=d;o=d+88|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=iq(c[f>>2]|0,c[g>>2]|0)|0;do{if((c[h>>2]|0)>>>0>=5){if((c[h>>2]|0)==5){c[j>>2]=yq(i,c[f>>2]|0,c[g>>2]|0)|0;if(c[j>>2]|0){b=e;c[b>>2]=0;c[b+4>>2]=0;break;}else{b=i;a=c[b+4>>2]|0;p=e;c[p>>2]=c[b>>2];c[p+4>>2]=a;break;}}if((c[h>>2]|0)==6){c[m>>2]=zq(k,c[f>>2]|0,c[g>>2]|0)|0;if(c[m>>2]|0){a=e;c[a>>2]=0;c[a+4>>2]=0;break;}else{a=k;p=c[a+4>>2]|0;b=e;c[b>>2]=c[a>>2];c[b+4>>2]=p;break;}}if((c[h>>2]|0)!=7){p=e;c[p>>2]=0;c[p+4>>2]=0;break;}c[o>>2]=Aq(n,c[f>>2]|0,c[g>>2]|0)|0;if(c[o>>2]|0){p=e;c[p>>2]=0;c[p+4>>2]=0;break;}else{p=n;b=c[p+4>>2]|0;a=e;c[a>>2]=c[p>>2];c[a+4>>2]=b;break;}}else{b=e;c[b>>2]=0;c[b+4>>2]=0;}}while(0);n=e;y=c[n+4>>2]|0;l=d;return c[n>>2]|0;}function yq(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;if((c[j>>2]|0)>>>0<5){c[g>>2]=5;m=c[g>>2]|0;l=f;return m|0;}c[k>>2]=Wq(c[i>>2]|0)|0;if((c[k>>2]|0)!=-47205083){c[g>>2]=-10;m=c[g>>2]|0;l=f;return m|0;}k=c[h>>2]|0;j=k+40|0;do{c[k>>2]=0;k=k+4|0;}while((k|0)<(j|0));c[(c[h>>2]|0)+8>>2]=((d[(c[i>>2]|0)+4>>0]|0)&15)+11;if((d[(c[i>>2]|0)+4>>0]|0)>>4|0){c[g>>2]=-14;m=c[g>>2]|0;l=f;return m|0;}else{c[g>>2]=0;m=c[g>>2]|0;l=f;return m|0;}return 0;}function zq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;o=g+24|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<5){c[h>>2]=5;p=c[h>>2]|0;l=g;return p|0;}if((Mq(c[j>>2]|0)|0)!=-47205082){c[h>>2]=-10;p=c[h>>2]|0;l=g;return p|0;}c[n>>2]=Nq(c[j>>2]|0,c[k>>2]|0)|0;if((c[k>>2]|0)>>>0<(c[n>>2]|0)>>>0){c[h>>2]=c[n>>2];p=c[h>>2]|0;l=g;return p|0;}n=c[i>>2]|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;a[o>>0]=a[(c[m>>2]|0)+4>>0]|0;c[(c[i>>2]|0)+8>>2]=((d[o>>0]|0)&15)+12;if((d[o>>0]|0)&32|0){c[h>>2]=-14;p=c[h>>2]|0;l=g;return p|0;}switch((d[o>>0]|0)>>6|0){case 0:{o=c[i>>2]|0;c[o>>2]=0;c[o+4>>2]=0;break;}case 1:{o=c[i>>2]|0;c[o>>2]=d[(c[m>>2]|0)+5>>0];c[o+4>>2]=0;break;}case 2:{o=((Oq((c[m>>2]|0)+5|0)|0)&65535)+256|0;n=c[i>>2]|0;c[n>>2]=o;c[n+4>>2]=((o|0)<0)<<31>>31;break;}case 3:{o=Pq((c[m>>2]|0)+5|0)|0;m=c[i>>2]|0;c[m>>2]=o;c[m+4>>2]=y;break;}default:{}}c[h>>2]=0;p=c[h>>2]|0;l=g;return p|0;}function Aq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+69|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+20|0;v=g+16|0;w=g+12|0;x=g;z=g+68|0;A=g+8|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<5){c[h>>2]=5;B=c[h>>2]|0;l=g;return B|0;}f=(Bq(c[j>>2]|0)|0)!=-47205081;e=c[j>>2]|0;if(f){if(((Bq(e)|0)&-16|0)!=407710288){c[h>>2]=-10;B=c[h>>2]|0;l=g;return B|0;}if((c[k>>2]|0)>>>0<8){c[h>>2]=8;B=c[h>>2]|0;l=g;return B|0;}else{f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;f=Bq((c[j>>2]|0)+4|0)|0;j=c[i>>2]|0;c[j>>2]=f;c[j+4>>2]=0;c[(c[i>>2]|0)+8>>2]=0;c[h>>2]=0;B=c[h>>2]|0;l=g;return B|0;}}c[n>>2]=Cq(e,c[k>>2]|0)|0;if((c[k>>2]|0)>>>0<(c[n>>2]|0)>>>0){c[h>>2]=c[n>>2];B=c[h>>2]|0;l=g;return B|0;}a[o>>0]=a[(c[m>>2]|0)+4>>0]|0;c[p>>2]=5;c[q>>2]=(d[o>>0]|0)&3;c[r>>2]=(d[o>>0]|0)>>2&1;c[s>>2]=(d[o>>0]|0)>>5&1;c[t>>2]=(d[o>>0]|0)>>6;n=(Dq()|0)!=0;c[u>>2]=1<<(n?25:27);c[v>>2]=0;c[w>>2]=0;n=x;c[n>>2]=0;c[n+4>>2]=0;if((d[o>>0]|0)&8|0){c[h>>2]=-14;B=c[h>>2]|0;l=g;return B|0;}do{if(!(c[s>>2]|0)){o=c[m>>2]|0;n=c[p>>2]|0;c[p>>2]=n+1;a[z>>0]=a[o+n>>0]|0;c[A>>2]=((d[z>>0]|0)>>3)+10;n=c[A>>2]|0;o=(Dq()|0)!=0;if(n>>>0<=(o?25:27)>>>0){c[v>>2]=1<<c[A>>2];o=N((c[v>>2]|0)>>>3,(d[z>>0]|0)&7)|0;c[v>>2]=(c[v>>2]|0)+o;break;}c[h>>2]=-14;B=c[h>>2]|0;l=g;return B|0;}}while(0);switch(c[q>>2]|0){case 3:{c[w>>2]=Bq((c[m>>2]|0)+(c[p>>2]|0)|0)|0;c[p>>2]=(c[p>>2]|0)+4;break;}case 1:{c[w>>2]=d[(c[m>>2]|0)+(c[p>>2]|0)>>0];c[p>>2]=(c[p>>2]|0)+1;break;}case 2:{c[w>>2]=(Eq((c[m>>2]|0)+(c[p>>2]|0)|0)|0)&65535;c[p>>2]=(c[p>>2]|0)+2;break;}default:{}}switch(c[t>>2]|0){case 3:{t=x;c[t>>2]=Fq((c[m>>2]|0)+(c[p>>2]|0)|0)|0;c[t+4>>2]=y;break;}case 1:{t=((Eq((c[m>>2]|0)+(c[p>>2]|0)|0)|0)&65535)+256|0;q=x;c[q>>2]=t;c[q+4>>2]=((t|0)<0)<<31>>31;break;}case 2:{t=x;c[t>>2]=Bq((c[m>>2]|0)+(c[p>>2]|0)|0)|0;c[t+4>>2]=0;break;}default:if(c[s>>2]|0){s=x;c[s>>2]=d[(c[m>>2]|0)+(c[p>>2]|0)>>0];c[s+4>>2]=0;}}if(!(c[v>>2]|0))c[v>>2]=c[x>>2];if((c[v>>2]|0)>>>0>(c[u>>2]|0)>>>0){c[h>>2]=-14;B=c[h>>2]|0;l=g;return B|0;}else{u=x;x=c[u+4>>2]|0;s=c[i>>2]|0;c[s>>2]=c[u>>2];c[s+4>>2]=x;c[(c[i>>2]|0)+8>>2]=c[v>>2];c[(c[i>>2]|0)+12>>2]=c[w>>2];c[(c[i>>2]|0)+16>>2]=c[r>>2];c[h>>2]=0;B=c[h>>2]|0;l=g;return B|0;}return 0;}function Bq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Gq()|0)!=0;f=Kq(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Lq(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Cq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+24|0;k=f+8|0;m=f+4|0;n=f;c[h>>2]=b;c[i>>2]=e;if((c[i>>2]|0)>>>0<5){c[g>>2]=-72;o=c[g>>2]|0;l=f;return o|0;}a[j>>0]=a[(c[h>>2]|0)+4>>0]|0;c[k>>2]=(d[j>>0]|0)&3;c[m>>2]=(d[j>>0]|0)>>5&1;c[n>>2]=(d[j>>0]|0)>>6;if(c[m>>2]|0)p=(c[3472+(c[n>>2]<<2)>>2]|0)!=0^1;else p=0;c[g>>2]=5+(((c[m>>2]|0)!=0^1)&1)+(c[3456+(c[k>>2]<<2)>>2]|0)+(c[3472+(c[n>>2]<<2)>>2]|0)+(p&1);o=c[g>>2]|0;l=f;return o|0;}function Dq(){return 1;}function Eq(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(Gq()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=Jq(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function Fq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(Gq()|0)!=0;f=Hq(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=Iq(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function Gq(){return d[11936]|0|0;}function Hq(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;a[f+4>>0]=a[b+4>>0]|0;a[f+5>>0]=a[b+5>>0]|0;a[f+6>>0]=a[b+6>>0]|0;a[f+7>>0]=a[b+7>>0]|0;b=f;y=c[b+4>>2]|0;l=d;return c[b>>2]|0;}function Iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Jq(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;l=e;return b[g>>1]|0;}function Kq(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;l=d;return c[f>>2]|0;}function Lq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Mq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Qq()|0)!=0;f=Uq(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Vq(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Nq(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;if((c[h>>2]|0)>>>0<5){c[f>>2]=-72;j=c[f>>2]|0;l=e;return j|0;}else{c[i>>2]=(d[(c[g>>2]|0)+4>>0]|0)>>6;c[f>>2]=5+(c[3488+(c[i>>2]<<2)>>2]|0);j=c[f>>2]|0;l=e;return j|0;}return 0;}function Oq(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(Qq()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=Tq(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function Pq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(Qq()|0)!=0;f=Rq(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=Sq(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function Qq(){return d[11936]|0|0;}function Rq(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;a[f+4>>0]=a[b+4>>0]|0;a[f+5>>0]=a[b+5>>0]|0;a[f+6>>0]=a[b+6>>0]|0;a[f+7>>0]=a[b+7>>0]|0;b=f;y=c[b+4>>2]|0;l=d;return c[b>>2]|0;}function Sq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Tq(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;l=e;return b[g>>1]|0;}function Uq(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;l=d;return c[f>>2]|0;}function Vq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Wq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Xq()|0)!=0;f=Yq(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Zq(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Xq(){return d[11936]|0|0;}function Yq(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Zq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function _q(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;d=l;l=l+96|0;e=d+80|0;f=d+76|0;g=d+72|0;h=d+68|0;i=d+64|0;j=d+60|0;k=d;m=d+56|0;n=d+44|0;o=d+40|0;c[f>>2]=a;c[g>>2]=b;if(iq(c[f>>2]|0,c[g>>2]|0)|0){c[e>>2]=ar(c[f>>2]|0,c[g>>2]|0)|0;p=c[e>>2]|0;l=d;return p|0;}if((c[g>>2]|0)>>>0>=8?((hq(c[f>>2]|0)|0)&-16|0)==407710288:0){c[e>>2]=8+(hq((c[f>>2]|0)+4|0)|0);p=c[e>>2]|0;l=d;return p|0;}c[h>>2]=c[f>>2];c[i>>2]=c[h>>2];c[j>>2]=c[g>>2];c[m>>2]=pq(k,c[f>>2]|0,c[g>>2]|0)|0;g=($q(c[m>>2]|0)|0)!=0;f=c[m>>2]|0;if(g){c[e>>2]=f;p=c[e>>2]|0;l=d;return p|0;}if(f>>>0>0){c[e>>2]=-72;p=c[e>>2]|0;l=d;return p|0;}c[h>>2]=(c[h>>2]|0)+(c[k+24>>2]|0);c[j>>2]=(c[j>>2]|0)-(c[k+24>>2]|0);while(1){c[o>>2]=br(c[h>>2]|0,c[j>>2]|0,n)|0;f=($q(c[o>>2]|0)|0)!=0;q=c[o>>2]|0;if(f){r=12;break;}if((3+q|0)>>>0>(c[j>>2]|0)>>>0){r=14;break;}c[h>>2]=(c[h>>2]|0)+(3+(c[o>>2]|0));c[j>>2]=(c[j>>2]|0)-(3+(c[o>>2]|0));if(c[n+4>>2]|0){r=17;break;}}if((r|0)==12){c[e>>2]=q;p=c[e>>2]|0;l=d;return p|0;}else if((r|0)==14){c[e>>2]=-72;p=c[e>>2]|0;l=d;return p|0;}else if((r|0)==17){do{if(c[k+32>>2]|0){if((c[j>>2]|0)>>>0>=4){c[h>>2]=(c[h>>2]|0)+4;c[j>>2]=(c[j>>2]|0)-4;break;}c[e>>2]=-72;p=c[e>>2]|0;l=d;return p|0;}}while(0);c[e>>2]=(c[h>>2]|0)-(c[i>>2]|0);p=c[e>>2]|0;l=d;return p|0;}return 0;}function $q(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function ar(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=iq(c[f>>2]|0,c[g>>2]|0)|0;switch(c[h>>2]|0){case 4:{c[e>>2]=dr(c[f>>2]|0,c[g>>2]|0)|0;break;}case 5:{c[e>>2]=er(c[f>>2]|0,c[g>>2]|0)|0;break;}case 6:{c[e>>2]=fr(c[f>>2]|0,c[g>>2]|0)|0;break;}case 7:{c[e>>2]=gr(c[f>>2]|0,c[g>>2]|0)|0;break;}default:c[e>>2]=-10;}l=d;return c[e>>2]|0;}function br(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[h>>2]|0)>>>0<3){c[f>>2]=-72;m=c[f>>2]|0;l=e;return m|0;}c[j>>2]=cr(c[g>>2]|0)|0;c[k>>2]=(c[j>>2]|0)>>>3;c[(c[i>>2]|0)+4>>2]=c[j>>2]&1;c[c[i>>2]>>2]=(c[j>>2]|0)>>>1&3;c[(c[i>>2]|0)+8>>2]=c[k>>2];if((c[c[i>>2]>>2]|0)==1){c[f>>2]=1;m=c[f>>2]|0;l=e;return m|0;}if((c[c[i>>2]>>2]|0)==3){c[f>>2]=-20;m=c[f>>2]|0;l=e;return m|0;}else{c[f>>2]=c[k>>2];m=c[f>>2]|0;l=e;return m|0;}return 0;}function cr(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=(rq(c[e>>2]|0)|0)&65535;l=b;return a+((d[(c[e>>2]|0)+2>>0]|0)<<16)|0;}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=or(c[e>>2]|0,c[f>>2]|0)|0;l=d;return b|0;}function er(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;d=l;l=l+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;i=d+16|0;j=d+8|0;k=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[f>>2];c[i>>2]=c[g>>2];if((c[g>>2]|0)>>>0<5){c[e>>2]=-72;m=c[e>>2]|0;l=d;return m|0;}if((Wq(c[f>>2]|0)|0)!=-47205083){c[e>>2]=-10;m=c[e>>2]|0;l=d;return m|0;}c[h>>2]=(c[h>>2]|0)+5;c[i>>2]=(c[i>>2]|0)-5;while(1){c[k>>2]=lr(c[h>>2]|0,c[i>>2]|0,j)|0;if(mr(c[k>>2]|0)|0){n=7;break;}c[h>>2]=(c[h>>2]|0)+3;c[i>>2]=(c[i>>2]|0)-3;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){n=9;break;}if(!(c[k>>2]|0)){n=12;break;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);}if((n|0)==7){c[e>>2]=c[k>>2];m=c[e>>2]|0;l=d;return m|0;}else if((n|0)==9){c[e>>2]=-72;m=c[e>>2]|0;l=d;return m|0;}else if((n|0)==12){c[e>>2]=(c[h>>2]|0)-(c[f>>2]|0);m=c[e>>2]|0;l=d;return m|0;}return 0;}function fr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;d=l;l=l+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;i=d+16|0;j=d+8|0;k=d+4|0;m=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[f>>2];c[i>>2]=c[g>>2];c[j>>2]=0;c[j+4>>2]=0;c[k>>2]=Nq(c[f>>2]|0,5)|0;if(jr(c[k>>2]|0)|0){c[e>>2]=c[k>>2];n=c[e>>2]|0;l=d;return n|0;}if((Mq(c[f>>2]|0)|0)!=-47205082){c[e>>2]=-10;n=c[e>>2]|0;l=d;return n|0;}if((c[g>>2]|0)>>>0<((c[k>>2]|0)+3|0)>>>0){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);while(1){c[m>>2]=kr(c[h>>2]|0,c[i>>2]|0,j)|0;if(jr(c[m>>2]|0)|0){o=9;break;}c[h>>2]=(c[h>>2]|0)+3;c[i>>2]=(c[i>>2]|0)-3;if((c[m>>2]|0)>>>0>(c[i>>2]|0)>>>0){o=11;break;}if(!(c[m>>2]|0)){o=14;break;}c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[m>>2]|0);}if((o|0)==9){c[e>>2]=c[m>>2];n=c[e>>2]|0;l=d;return n|0;}else if((o|0)==11){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}else if((o|0)==14){c[e>>2]=(c[h>>2]|0)-(c[f>>2]|0);n=c[e>>2]|0;l=d;return n|0;}return 0;}function gr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;d=l;l=l+48|0;e=d+36|0;f=d+32|0;g=d+28|0;h=d+24|0;i=d+20|0;j=d+16|0;k=d+8|0;m=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[f>>2];c[i>>2]=c[g>>2];if((c[g>>2]|0)>>>0<8){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}c[j>>2]=Cq(c[f>>2]|0,5)|0;if(hr(c[j>>2]|0)|0){c[e>>2]=c[j>>2];n=c[e>>2]|0;l=d;return n|0;}if((Bq(c[f>>2]|0)|0)!=-47205081){c[e>>2]=-10;n=c[e>>2]|0;l=d;return n|0;}if((c[g>>2]|0)>>>0<((c[j>>2]|0)+3|0)>>>0){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);while(1){c[m>>2]=ir(c[h>>2]|0,c[i>>2]|0,k)|0;if(hr(c[m>>2]|0)|0){o=11;break;}c[h>>2]=(c[h>>2]|0)+3;c[i>>2]=(c[i>>2]|0)-3;if((c[k>>2]|0)==3){o=16;break;}if((c[m>>2]|0)>>>0>(c[i>>2]|0)>>>0){o=14;break;}c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[m>>2]|0);}if((o|0)==11){c[e>>2]=c[m>>2];n=c[e>>2]|0;l=d;return n|0;}else if((o|0)==14){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}else if((o|0)==16){c[e>>2]=(c[h>>2]|0)-(c[f>>2]|0);n=c[e>>2]|0;l=d;return n|0;}return 0;}function hr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function ir(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];if((c[i>>2]|0)>>>0<3){c[g>>2]=-72;n=c[g>>2]|0;l=f;return n|0;}c[c[j>>2]>>2]=(d[c[k>>2]>>0]|0)>>6;c[m>>2]=(d[(c[k>>2]|0)+2>>0]|0)+((d[(c[k>>2]|0)+1>>0]|0)<<8)+(((d[c[k>>2]>>0]|0)&7)<<16);c[(c[j>>2]|0)+4>>2]=(c[c[j>>2]>>2]|0)==2?c[m>>2]|0:0;if((c[c[j>>2]>>2]|0)==3){c[g>>2]=0;n=c[g>>2]|0;l=f;return n|0;}if((c[c[j>>2]>>2]|0)==2){c[g>>2]=1;n=c[g>>2]|0;l=f;return n|0;}else{c[g>>2]=c[m>>2];n=c[g>>2]|0;l=f;return n|0;}return 0;}function jr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function kr(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];if((c[i>>2]|0)>>>0<3){c[g>>2]=-72;n=c[g>>2]|0;l=f;return n|0;}c[c[j>>2]>>2]=(d[c[k>>2]>>0]|0)>>6;c[m>>2]=(d[(c[k>>2]|0)+2>>0]|0)+((d[(c[k>>2]|0)+1>>0]|0)<<8)+(((d[c[k>>2]>>0]|0)&7)<<16);c[(c[j>>2]|0)+4>>2]=(c[c[j>>2]>>2]|0)==2?c[m>>2]|0:0;if((c[c[j>>2]>>2]|0)==3){c[g>>2]=0;n=c[g>>2]|0;l=f;return n|0;}if((c[c[j>>2]>>2]|0)==2){c[g>>2]=1;n=c[g>>2]|0;l=f;return n|0;}else{c[g>>2]=c[m>>2];n=c[g>>2]|0;l=f;return n|0;}return 0;}function lr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g+24|0;o=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[i>>2];if((c[j>>2]|0)>>>0<3){c[h>>2]=-72;p=c[h>>2]|0;l=g;return p|0;}a[n>>0]=a[c[m>>2]>>0]|0;c[o>>2]=(d[(c[m>>2]|0)+2>>0]|0)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(((d[c[m>>2]>>0]|0)&7)<<16);c[c[k>>2]>>2]=(d[n>>0]|0)>>6;c[(c[k>>2]|0)+4>>2]=(c[c[k>>2]>>2]|0)==2?c[o>>2]|0:0;if((c[c[k>>2]>>2]|0)==3){c[h>>2]=0;p=c[h>>2]|0;l=g;return p|0;}if((c[c[k>>2]>>2]|0)==2){c[h>>2]=1;p=c[h>>2]|0;l=g;return p|0;}else{c[h>>2]=c[o>>2];p=c[h>>2]|0;l=g;return p|0;}return 0;}function mr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=nr(c[d>>2]|0)|0;l=b;return a|0;}function nr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function or(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;d=l;l=l+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;i=d+16|0;j=d+8|0;k=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[f>>2];c[i>>2]=c[g>>2];if((c[g>>2]|0)>>>0<5){c[e>>2]=-72;m=c[e>>2]|0;l=d;return m|0;}if((pr(c[f>>2]|0)|0)!=-47205084){c[e>>2]=-10;m=c[e>>2]|0;l=d;return m|0;}c[h>>2]=(c[h>>2]|0)+5;c[i>>2]=(c[i>>2]|0)-5;while(1){c[k>>2]=qr(c[h>>2]|0,c[i>>2]|0,j)|0;if(rr(c[k>>2]|0)|0){n=7;break;}c[h>>2]=(c[h>>2]|0)+3;c[i>>2]=(c[i>>2]|0)-3;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){n=9;break;}if(!(c[k>>2]|0)){n=12;break;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);}if((n|0)==7){c[e>>2]=c[k>>2];m=c[e>>2]|0;l=d;return m|0;}else if((n|0)==9){c[e>>2]=-72;m=c[e>>2]|0;l=d;return m|0;}else if((n|0)==12){c[e>>2]=(c[h>>2]|0)-(c[f>>2]|0);m=c[e>>2]|0;l=d;return m|0;}return 0;}function pr(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;e=b+8|0;f=b+4|0;g=b;c[f>>2]=a;a=(tr()|0)!=0;h=c[f>>2]|0;if(a){c[e>>2]=ur(h)|0;i=c[e>>2]|0;l=b;return i|0;}else{c[g>>2]=h;c[e>>2]=(d[c[g>>2]>>0]|0)+((d[(c[g>>2]|0)+1>>0]|0)<<8)+((d[(c[g>>2]|0)+2>>0]|0)<<16)+((d[(c[g>>2]|0)+3>>0]|0)<<24);i=c[e>>2]|0;l=b;return i|0;}return 0;}function qr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g+24|0;o=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[i>>2];if((c[j>>2]|0)>>>0<3){c[h>>2]=-72;p=c[h>>2]|0;l=g;return p|0;}a[n>>0]=a[c[m>>2]>>0]|0;c[o>>2]=(d[(c[m>>2]|0)+2>>0]|0)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(((d[c[m>>2]>>0]|0)&7)<<16);c[c[k>>2]>>2]=(d[n>>0]|0)>>6;c[(c[k>>2]|0)+4>>2]=(c[c[k>>2]>>2]|0)==2?c[o>>2]|0:0;if((c[c[k>>2]>>2]|0)==3){c[h>>2]=0;p=c[h>>2]|0;l=g;return p|0;}if((c[c[k>>2]>>2]|0)==2){c[h>>2]=1;p=c[h>>2]|0;l=g;return p|0;}else{c[h>>2]=c[o>>2];p=c[h>>2]|0;l=g;return p|0;}return 0;}function rr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=sr(c[d>>2]|0)|0;l=b;return a|0;}function sr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function tr(){return d[11936]|0|0;}function ur(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;l=d;return c[f>>2]|0;}function vr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=l;l=l+80|0;h=g+68|0;i=g+64|0;j=g+60|0;k=g+56|0;m=g+52|0;n=g+48|0;o=g+44|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+20|0;v=g+16|0;w=g+12|0;x=g+8|0;y=g+4|0;z=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<3){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}c[m>>2]=c[j>>2];c[n>>2]=(d[c[m>>2]>>0]|0)&3;switch(c[n>>2]|0){case 3:{if(!(c[(c[i>>2]|0)+28808>>2]|0)){c[h>>2]=-30;A=c[h>>2]|0;l=g;return A|0;}break;}case 2:break;case 0:{c[w>>2]=(d[c[m>>2]>>0]|0)>>2&3;switch(c[w>>2]|0){case 3:{c[v>>2]=3;c[u>>2]=(cr(c[m>>2]|0)|0)>>>4;break;}case 1:{c[v>>2]=2;c[u>>2]=((rq(c[m>>2]|0)|0)&65535)>>4;break;}default:{c[v>>2]=1;c[u>>2]=(d[c[m>>2]>>0]|0)>>3;}}if(((c[v>>2]|0)+(c[u>>2]|0)+8|0)>>>0<=(c[k>>2]|0)>>>0){c[(c[i>>2]|0)+28916>>2]=(c[m>>2]|0)+(c[v>>2]|0);c[(c[i>>2]|0)+28932>>2]=c[u>>2];c[h>>2]=(c[v>>2]|0)+(c[u>>2]|0);A=c[h>>2]|0;l=g;return A|0;}if(((c[u>>2]|0)+(c[v>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}else{mE((c[i>>2]|0)+29012|0,(c[m>>2]|0)+(c[v>>2]|0)|0,c[u>>2]|0)|0;c[(c[i>>2]|0)+28916>>2]=(c[i>>2]|0)+29012;c[(c[i>>2]|0)+28932>>2]=c[u>>2];w=(c[i>>2]|0)+29012+(c[(c[i>>2]|0)+28932>>2]|0)|0;a[w>>0]=0;a[w+1>>0]=0;a[w+2>>0]=0;a[w+3>>0]=0;a[w+4>>0]=0;a[w+5>>0]=0;a[w+6>>0]=0;a[w+7>>0]=0;c[h>>2]=(c[v>>2]|0)+(c[u>>2]|0);A=c[h>>2]|0;l=g;return A|0;}break;}case 1:{c[x>>2]=(d[c[m>>2]>>0]|0)>>2&3;switch(c[x>>2]|0){case 3:{c[z>>2]=3;c[y>>2]=(cr(c[m>>2]|0)|0)>>>4;if((c[k>>2]|0)>>>0<4){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}break;}case 1:{c[z>>2]=2;c[y>>2]=((rq(c[m>>2]|0)|0)&65535)>>4;break;}default:{c[z>>2]=1;c[y>>2]=(d[c[m>>2]>>0]|0)>>3;}}if((c[y>>2]|0)>>>0>131072){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}else{oE((c[i>>2]|0)+29012|0,(d[(c[m>>2]|0)+(c[z>>2]|0)>>0]|0)&255|0,(c[y>>2]|0)+8|0)|0;c[(c[i>>2]|0)+28916>>2]=(c[i>>2]|0)+29012;c[(c[i>>2]|0)+28932>>2]=c[y>>2];c[h>>2]=(c[z>>2]|0)+1;A=c[h>>2]|0;l=g;return A|0;}break;}default:{c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}}if((c[k>>2]|0)>>>0<5){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}c[r>>2]=0;c[s>>2]=(d[c[m>>2]>>0]|0)>>2&3;c[t>>2]=hq(c[m>>2]|0)|0;switch(c[s>>2]|0){case 3:{c[o>>2]=5;c[p>>2]=(c[t>>2]|0)>>>4&262143;c[q>>2]=((c[t>>2]|0)>>>22)+((d[(c[m>>2]|0)+4>>0]|0)<<10);break;}case 2:{c[o>>2]=4;c[p>>2]=(c[t>>2]|0)>>>4&16383;c[q>>2]=(c[t>>2]|0)>>>18;break;}default:{c[r>>2]=((c[s>>2]|0)!=0^1)&1;c[o>>2]=3;c[p>>2]=(c[t>>2]|0)>>>4&1023;c[q>>2]=(c[t>>2]|0)>>>14&1023;}}if((c[p>>2]|0)>>>0>131072){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}if(((c[q>>2]|0)+(c[o>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}k=(c[r>>2]|0)!=0;r=c[i>>2]|0;do{if((c[n>>2]|0)==3){t=r+29012|0;s=c[p>>2]|0;z=(c[m>>2]|0)+(c[o>>2]|0)|0;y=c[q>>2]|0;x=c[(c[i>>2]|0)+12>>2]|0;u=c[(c[i>>2]|0)+28944>>2]|0;if(k){B=Op(t,s,z,y,x,u)|0;break;}else{B=Qp(t,s,z,y,x,u)|0;break;}}else{u=r+16+10264|0;x=(c[i>>2]|0)+29012|0;y=c[p>>2]|0;z=(c[m>>2]|0)+(c[o>>2]|0)|0;s=c[q>>2]|0;t=(c[i>>2]|0)+16+26652|0;v=c[(c[i>>2]|0)+28944>>2]|0;if(k){B=Pp(u,x,y,z,s,t,2048,v)|0;break;}else{B=Rp(u,x,y,z,s,t,2048,v)|0;break;}}}while(0);if($q(B)|0){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}c[(c[i>>2]|0)+28916>>2]=(c[i>>2]|0)+29012;c[(c[i>>2]|0)+28932>>2]=c[p>>2];c[(c[i>>2]|0)+28808>>2]=1;if((c[n>>2]|0)==2)c[(c[i>>2]|0)+12>>2]=(c[i>>2]|0)+16+10264;n=(c[i>>2]|0)+29012+(c[(c[i>>2]|0)+28932>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=(c[q>>2]|0)+(c[o>>2]|0);A=c[h>>2]|0;l=g;return A|0;}function wr(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;g=l;l=l+64|0;h=g+56|0;i=g+52|0;j=g+48|0;k=g+44|0;m=g+40|0;n=g+36|0;o=g+32|0;p=g+28|0;q=g+24|0;r=g+20|0;s=g+16|0;t=g+12|0;u=g+8|0;v=g+4|0;w=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[k>>2];c[o>>2]=(c[n>>2]|0)+(c[m>>2]|0);c[p>>2]=c[n>>2];if((c[m>>2]|0)>>>0<1){c[h>>2]=-72;x=c[h>>2]|0;l=g;return x|0;}m=c[p>>2]|0;c[p>>2]=m+1;c[q>>2]=d[m>>0];if(!(c[q>>2]|0)){c[c[j>>2]>>2]=0;c[h>>2]=1;x=c[h>>2]|0;l=g;return x|0;}do{if((c[q>>2]|0)>127){m=c[p>>2]|0;if((c[q>>2]|0)==255){if((m+2|0)>>>0<=(c[o>>2]|0)>>>0){c[q>>2]=((rq(c[p>>2]|0)|0)&65535)+32512;c[p>>2]=(c[p>>2]|0)+2;break;}c[h>>2]=-72;x=c[h>>2]|0;l=g;return x|0;}else{if(m>>>0<(c[o>>2]|0)>>>0){m=(c[q>>2]|0)-128<<8;k=c[p>>2]|0;c[p>>2]=k+1;c[q>>2]=m+(d[k>>0]|0);break;}c[h>>2]=-72;x=c[h>>2]|0;l=g;return x|0;}}}while(0);c[c[j>>2]>>2]=c[q>>2];if(((c[p>>2]|0)+4|0)>>>0>(c[o>>2]|0)>>>0){c[h>>2]=-72;x=c[h>>2]|0;l=g;return x|0;}c[r>>2]=(d[c[p>>2]>>0]|0)>>6;c[s>>2]=(d[c[p>>2]>>0]|0)>>4&3;c[t>>2]=(d[c[p>>2]>>0]|0)>>2&3;c[p>>2]=(c[p>>2]|0)+1;c[u>>2]=xr((c[i>>2]|0)+16|0,c[i>>2]|0,c[r>>2]|0,35,9,c[p>>2]|0,(c[o>>2]|0)-(c[p>>2]|0)|0,6416,5696,3504,c[(c[i>>2]|0)+28812>>2]|0)|0;if($q(c[u>>2]|0)|0){c[h>>2]=-20;x=c[h>>2]|0;l=g;return x|0;}c[p>>2]=(c[p>>2]|0)+(c[u>>2]|0);c[v>>2]=xr((c[i>>2]|0)+16+4104|0,(c[i>>2]|0)+8|0,c[s>>2]|0,31,8,c[p>>2]|0,(c[o>>2]|0)-(c[p>>2]|0)|0,4032,4160,4288,c[(c[i>>2]|0)+28812>>2]|0)|0;if($q(c[v>>2]|0)|0){c[h>>2]=-20;x=c[h>>2]|0;l=g;return x|0;}c[p>>2]=(c[p>>2]|0)+(c[v>>2]|0);c[w>>2]=xr((c[i>>2]|0)+16+6160|0,(c[i>>2]|0)+4|0,c[t>>2]|0,52,9,c[p>>2]|0,(c[o>>2]|0)-(c[p>>2]|0)|0,5216,5840,4560,c[(c[i>>2]|0)+28812>>2]|0)|0;if($q(c[w>>2]|0)|0){c[h>>2]=-20;x=c[h>>2]|0;l=g;return x|0;}else{c[p>>2]=(c[p>>2]|0)+(c[w>>2]|0);c[h>>2]=(c[p>>2]|0)-(c[n>>2]|0);x=c[h>>2]|0;l=g;return x|0;}return 0;}function xr(a,b,e,f,g,h,i,j,k,m,n){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;o=l;l=l+176|0;p=o+172|0;q=o+168|0;r=o+164|0;s=o+160|0;t=o+156|0;u=o+152|0;v=o+148|0;w=o+144|0;x=o+140|0;y=o+136|0;z=o+132|0;A=o+128|0;B=o+124|0;C=o+120|0;D=o+116|0;E=o+112|0;F=o;G=o+108|0;c[q>>2]=a;c[r>>2]=b;c[s>>2]=e;c[t>>2]=f;c[u>>2]=g;c[v>>2]=h;c[w>>2]=i;c[x>>2]=j;c[y>>2]=k;c[z>>2]=m;c[A>>2]=n;a:do{switch(c[s>>2]|0){case 1:{if(!(c[w>>2]|0)){c[p>>2]=-72;break a;}if((d[c[v>>2]>>0]|0)>>>0>(c[t>>2]|0)>>>0){c[p>>2]=-20;break a;}else{c[B>>2]=d[c[v>>2]>>0];c[C>>2]=c[(c[x>>2]|0)+(c[B>>2]<<2)>>2];c[D>>2]=c[(c[y>>2]|0)+(c[B>>2]<<2)>>2];yr(c[q>>2]|0,c[C>>2]|0,c[D>>2]|0);c[c[r>>2]>>2]=c[q>>2];c[p>>2]=1;break a;}break;}case 0:{c[c[r>>2]>>2]=c[z>>2];c[p>>2]=0;break;}case 3:{if(c[A>>2]|0){c[p>>2]=0;break a;}else{c[p>>2]=-20;break a;}break;}case 2:{c[G>>2]=ah(F,t,E,c[v>>2]|0,c[w>>2]|0)|0;if($q(c[G>>2]|0)|0){c[p>>2]=-20;break a;}if((c[E>>2]|0)>>>0>(c[u>>2]|0)>>>0){c[p>>2]=-20;break a;}else{zr(c[q>>2]|0,F,c[t>>2]|0,c[x>>2]|0,c[y>>2]|0,c[E>>2]|0);c[c[r>>2]>>2]=c[q>>2];c[p>>2]=c[G>>2];break a;}break;}default:c[p>>2]=-1;}}while(0);l=o;return c[p>>2]|0;}function yr(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=d;c[i>>2]=e;c[j>>2]=f;c[k>>2]=c[h>>2];c[m>>2]=c[k>>2];c[n>>2]=(c[h>>2]|0)+8;c[(c[m>>2]|0)+4>>2]=0;c[c[m>>2]>>2]=0;a[(c[n>>2]|0)+3>>0]=0;b[c[n>>2]>>1]=0;a[(c[n>>2]|0)+2>>0]=c[j>>2];c[(c[n>>2]|0)+4>>2]=c[i>>2];l=g;return;}function zr(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;k=l;l=l+208|0;m=k+188|0;n=k+184|0;o=k+180|0;p=k+176|0;q=k+172|0;r=k+168|0;s=k+164|0;t=k;u=k+160|0;v=k+156|0;w=k+152|0;x=k+144|0;y=k+192|0;z=k+140|0;A=k+136|0;B=k+132|0;C=k+128|0;D=k+124|0;E=k+120|0;F=k+116|0;G=k+112|0;H=k+108|0;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=i;c[r>>2]=j;c[s>>2]=(c[m>>2]|0)+8;c[u>>2]=(c[o>>2]|0)+1;c[v>>2]=1<<c[r>>2];c[w>>2]=(c[v>>2]|0)-1;c[x+4>>2]=c[r>>2];c[x>>2]=1;b[y>>1]=1<<(c[r>>2]|0)-1;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[z>>2]<<1)>>1]|0)==-1){o=c[z>>2]|0;j=c[s>>2]|0;i=c[w>>2]|0;c[w>>2]=i+-1;c[j+(i<<3)+4>>2]=o;b[t+(c[z>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[z>>2]<<1)>>1]|0)>=(b[y>>1]|0))c[x>>2]=0;b[t+(c[z>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[z>>2]<<1)>>1]|0;}c[z>>2]=(c[z>>2]|0)+1;}z=c[m>>2]|0;c[z>>2]=c[x>>2];c[z+4>>2]=c[x+4>>2];c[A>>2]=(c[v>>2]|0)-1;c[B>>2]=((c[v>>2]|0)>>>1)+((c[v>>2]|0)>>>3)+3;c[D>>2]=0;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;c[E>>2]=0;while(1){I=c[C>>2]|0;if((c[E>>2]|0)>=(b[(c[n>>2]|0)+(c[C>>2]<<1)>>1]|0))break;c[(c[s>>2]|0)+(c[D>>2]<<3)+4>>2]=I;c[D>>2]=(c[D>>2]|0)+(c[B>>2]|0)&c[A>>2];while(1){if((c[D>>2]|0)>>>0<=(c[w>>2]|0)>>>0)break;c[D>>2]=(c[D>>2]|0)+(c[B>>2]|0)&c[A>>2];}c[E>>2]=(c[E>>2]|0)+1;}c[C>>2]=I+1;}c[F>>2]=0;while(1){if((c[F>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[G>>2]=c[(c[s>>2]|0)+(c[F>>2]<<3)+4>>2];I=t+(c[G>>2]<<1)|0;C=b[I>>1]|0;b[I>>1]=C+1<<16>>16;c[H>>2]=C&65535;C=c[r>>2]|0;I=C-(Ar(c[H>>2]|0)|0)&255;a[(c[s>>2]|0)+(c[F>>2]<<3)+3>>0]=I;b[(c[s>>2]|0)+(c[F>>2]<<3)>>1]=(c[H>>2]<<d[(c[s>>2]|0)+(c[F>>2]<<3)+3>>0])-(c[v>>2]|0);a[(c[s>>2]|0)+(c[F>>2]<<3)+2>>0]=c[(c[q>>2]|0)+(c[G>>2]<<2)>>2];c[(c[s>>2]|0)+(c[F>>2]<<3)+4>>2]=c[(c[p>>2]|0)+(c[G>>2]<<2)>>2];c[F>>2]=(c[F>>2]|0)+1;}l=k;return;}function Ar(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Br(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+28728>>2]|0)){l=d;return;}c[(c[e>>2]|0)+28740>>2]=c[(c[e>>2]|0)+28728>>2];c[(c[e>>2]|0)+28736>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+28728>>2]|0)-(c[(c[e>>2]|0)+28732>>2]|0)));c[(c[e>>2]|0)+28732>>2]=c[f>>2];c[(c[e>>2]|0)+28728>>2]=c[f>>2];l=d;return;}function Cr(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0;h=l;l=l+64|0;i=h+52|0;j=h+48|0;k=h+44|0;m=h+40|0;n=h+36|0;o=h+32|0;p=h+28|0;q=h+24|0;r=h+20|0;s=h+16|0;t=h+12|0;u=h+8|0;v=h+4|0;w=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[n>>2];if(Dr()|0){if(c[p>>2]|0){g=(c[j>>2]|0)+28752+8|0;f=c[g>>2]|0;e=c[g+4>>2]|0;g=(Dr()|0)!=0;d=jE(1,0,(g?25:57)|0)|0;g=y;x=e>>>0>g>>>0|(e|0)==(g|0)&f>>>0>d>>>0;}else x=1;}else x=0;c[r>>2]=x&1;if((c[o>>2]|0)>>>0>=131072){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}c[s>>2]=vr(c[j>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;n=($q(c[s>>2]|0)|0)!=0;x=c[s>>2]|0;if(n){c[i>>2]=x;z=c[i>>2]|0;l=h;return z|0;}c[q>>2]=(c[q>>2]|0)+x;c[o>>2]=(c[o>>2]|0)-(c[s>>2]|0);c[u>>2]=wr(c[j>>2]|0,t,c[q>>2]|0,c[o>>2]|0)|0;s=($q(c[u>>2]|0)|0)!=0;x=c[u>>2]|0;if(s){c[i>>2]=x;z=c[i>>2]|0;l=h;return z|0;}c[q>>2]=(c[q>>2]|0)+x;c[o>>2]=(c[o>>2]|0)-(c[u>>2]|0);if(c[p>>2]|0){p=(c[j>>2]|0)+28752+8|0;u=c[p+4>>2]|0;if((u>>>0>0|(u|0)==0&(c[p>>2]|0)>>>0>16777216)&(c[t>>2]|0)>0)A=13;}else if((c[t>>2]|0)>0)A=13;if((A|0)==13?(c[v>>2]=Er(c[(c[j>>2]|0)+8>>2]|0)|0,A=(Fr()|0)!=0,c[w>>2]=A?7:20,(c[v>>2]|0)>>>0>=(c[w>>2]|0)>>>0):0){c[i>>2]=Gr(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[q>>2]|0,c[o>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;z=c[i>>2]|0;l=h;return z|0;}c[i>>2]=Hr(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[q>>2]|0,c[o>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;z=c[i>>2]|0;l=h;return z|0;}function Dr(){return 1;}function Er(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=l;l=l+32|0;e=b+24|0;f=b+20|0;g=b+16|0;h=b+12|0;i=b+8|0;j=b+4|0;k=b;c[e>>2]=a;c[f>>2]=c[e>>2];c[g>>2]=c[(c[f>>2]|0)+4>>2];c[h>>2]=(c[e>>2]|0)+8;c[i>>2]=1<<c[g>>2];c[k>>2]=0;c[j>>2]=0;while(1){if((c[j>>2]|0)>>>0>=(c[i>>2]|0)>>>0)break;if((d[(c[h>>2]|0)+(c[j>>2]<<3)+2>>0]|0|0)>22)c[k>>2]=(c[k>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1;}c[k>>2]=c[k>>2]<<8-(c[g>>2]|0);l=b;return c[k>>2]|0;}function Fr(){return 0;}function Gr(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+32|0;j=i+28|0;k=i+24|0;m=i+20|0;n=i+16|0;o=i+12|0;p=i+8|0;q=i+4|0;r=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;h=c[k>>2]|0;g=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;if(c[(c[k>>2]|0)+28944>>2]|0){c[j>>2]=Xr(h,g,m,n,o,p,q)|0;s=c[j>>2]|0;l=i;return s|0;}else{c[j>>2]=Yr(h,g,m,n,o,p,q)|0;s=c[j>>2]|0;l=i;return s|0;}return 0;}function Hr(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+32|0;j=i+28|0;k=i+24|0;m=i+20|0;n=i+16|0;o=i+12|0;p=i+8|0;q=i+4|0;r=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;h=c[k>>2]|0;g=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;if(c[(c[k>>2]|0)+28944>>2]|0){c[j>>2]=Ir(h,g,m,n,o,p,q)|0;s=c[j>>2]|0;l=i;return s|0;}else{c[j>>2]=Jr(h,g,m,n,o,p,q)|0;s=c[j>>2]|0;l=i;return s|0;}return 0;}function Ir(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;m=l;l=l+448|0;n=m+432|0;o=m+424|0;p=m+420|0;q=m+416|0;r=m+412|0;s=m+408|0;t=m+404|0;u=m+400|0;v=m+396|0;w=m+392|0;x=m+388|0;y=m+384|0;z=m+380|0;A=m+376|0;B=m+372|0;C=m+368|0;D=m+364|0;E=m+360|0;F=m;G=m+356|0;H=m+352|0;I=m+344|0;J=m+340|0;K=m+336|0;L=m+332|0;M=m+328|0;N=m+320|0;O=m+316|0;P=m+312|0;Q=m+308|0;R=m+304|0;S=m+296|0;T=m+292|0;U=m+288|0;V=m+284|0;W=m+280|0;X=m+264|0;Y=m+256|0;Z=m+252|0;_=m+248|0;$=m+244|0;aa=m+240|0;ba=m+236|0;ca=m+232|0;da=m+228|0;ea=m+224|0;fa=m+220|0;ga=m+216|0;ha=m+212|0;ia=m+208|0;ja=m+204|0;ka=m+200|0;la=m+196|0;ma=m+192|0;na=m+188|0;oa=m+184|0;pa=m+180|0;qa=m+176|0;ra=m+172|0;sa=m+168|0;ta=m+164|0;ua=m+160|0;va=m+156|0;wa=m+152|0;xa=m+148|0;ya=m+80|0;za=m+76|0;Aa=m+72|0;Ba=m+56|0;Ca=m+52|0;Da=m+48|0;Ea=m+44|0;Fa=m+40|0;Ga=m+36|0;Ha=m+32|0;Ia=m+28|0;Ja=m+24|0;Ka=m+20|0;La=m+16|0;c[Fa>>2]=b;c[Ga>>2]=f;c[Ha>>2]=g;c[Ia>>2]=h;c[Ja>>2]=i;c[Ka>>2]=j;c[La>>2]=k;k=c[Ga>>2]|0;Ga=c[Ha>>2]|0;Ha=c[Ia>>2]|0;Ia=c[Ja>>2]|0;Ja=c[Ka>>2]|0;Ka=c[La>>2]|0;c[ha>>2]=c[Fa>>2];c[ia>>2]=k;c[ja>>2]=Ga;c[ka>>2]=Ha;c[la>>2]=Ia;c[ma>>2]=Ja;c[na>>2]=Ka;c[oa>>2]=c[ka>>2];c[pa>>2]=(c[oa>>2]|0)+(c[la>>2]|0);c[qa>>2]=c[ia>>2];c[ra>>2]=(c[qa>>2]|0)+(c[ja>>2]|0);c[sa>>2]=c[qa>>2];c[ta>>2]=c[(c[ha>>2]|0)+28916>>2];c[ua>>2]=(c[ta>>2]|0)+(c[(c[ha>>2]|0)+28932>>2]|0);c[va>>2]=c[(c[ha>>2]|0)+28732>>2];c[wa>>2]=c[(c[ha>>2]|0)+28736>>2];c[xa>>2]=c[(c[ha>>2]|0)+28740>>2];a:do{if(c[ma>>2]|0){c[(c[ha>>2]|0)+28812>>2]=1;c[za>>2]=0;while(1){if((c[za>>2]|0)>>>0>=3)break;c[ya+44+(c[za>>2]<<2)>>2]=c[(c[ha>>2]|0)+16+28700+(c[za>>2]<<2)>>2];c[za>>2]=(c[za>>2]|0)+1;}c[Aa>>2]=Kr(ya,c[oa>>2]|0,(c[pa>>2]|0)-(c[oa>>2]|0)|0)|0;if($q(c[Aa>>2]|0)|0){c[ga>>2]=-20;Ma=c[ga>>2]|0;l=m;return Ma|0;}Lr(ya+20|0,ya,c[c[ha>>2]>>2]|0);Lr(ya+28|0,ya,c[(c[ha>>2]|0)+8>>2]|0);Lr(ya+36|0,ya,c[(c[ha>>2]|0)+4>>2]|0);while(1){ja=(Mr(ya)|0)>>>0<=2;Na=c[ma>>2]|0;if(!(ja?(c[ma>>2]|0)!=0:0))break;c[ma>>2]=Na+-1;ja=c[na>>2]|0;c[V>>2]=ya;c[W>>2]=ja;c[Y>>2]=d[(c[(c[V>>2]|0)+20+4>>2]|0)+(c[(c[V>>2]|0)+20>>2]<<3)+2>>0];c[Z>>2]=d[(c[(c[V>>2]|0)+36+4>>2]|0)+(c[(c[V>>2]|0)+36>>2]<<3)+2>>0];c[_>>2]=d[(c[(c[V>>2]|0)+28+4>>2]|0)+(c[(c[V>>2]|0)+28>>2]<<3)+2>>0];c[$>>2]=(c[Y>>2]|0)+(c[Z>>2]|0)+(c[_>>2]|0);c[aa>>2]=c[(c[(c[V>>2]|0)+20+4>>2]|0)+(c[(c[V>>2]|0)+20>>2]<<3)+4>>2];c[ba>>2]=c[(c[(c[V>>2]|0)+36+4>>2]|0)+(c[(c[V>>2]|0)+36>>2]<<3)+4>>2];c[ca>>2]=c[(c[(c[V>>2]|0)+28+4>>2]|0)+(c[(c[V>>2]|0)+28>>2]<<3)+4>>2];do{if(c[_>>2]|0){ja=(Dr()|0)!=0;if(!(ja&(c[W>>2]|0)!=0&(c[_>>2]|0)>>>0>=25)){ja=c[ca>>2]|0;c[da>>2]=ja+(Nr(c[V>>2]|0,c[_>>2]|0)|0);if(!(Dr()|0))break;Mr(c[V>>2]|0)|0;break;}if((c[_>>2]|0)>>>0<(32-(c[(c[V>>2]|0)+4>>2]|0)|0)>>>0)Oa=c[_>>2]|0;else Oa=32-(c[(c[V>>2]|0)+4>>2]|0)|0;c[ea>>2]=(c[_>>2]|0)-Oa;ja=c[ca>>2]|0;ia=Nr(c[V>>2]|0,(c[_>>2]|0)-(c[ea>>2]|0)|0)|0;c[da>>2]=ja+(ia<<c[ea>>2]);Mr(c[V>>2]|0)|0;if(c[ea>>2]|0){ia=Nr(c[V>>2]|0,c[ea>>2]|0)|0;c[da>>2]=(c[da>>2]|0)+ia;}}else c[da>>2]=0;}while(0);do{if((c[_>>2]|0)>>>0<=1){c[da>>2]=(c[da>>2]|0)+((c[aa>>2]|0)==0&1);if(!(c[da>>2]|0)){c[da>>2]=c[(c[V>>2]|0)+44>>2];break;}ia=(c[V>>2]|0)+44|0;if((c[da>>2]|0)==3)Pa=(c[ia>>2]|0)-1|0;else Pa=c[ia+(c[da>>2]<<2)>>2]|0;c[fa>>2]=Pa;c[fa>>2]=(c[fa>>2]|0)+(((c[fa>>2]|0)!=0^1)&1);if((c[da>>2]|0)!=1)c[(c[V>>2]|0)+44+8>>2]=c[(c[V>>2]|0)+44+4>>2];c[(c[V>>2]|0)+44+4>>2]=c[(c[V>>2]|0)+44>>2];ia=c[fa>>2]|0;c[da>>2]=ia;c[(c[V>>2]|0)+44>>2]=ia;}else{c[(c[V>>2]|0)+44+8>>2]=c[(c[V>>2]|0)+44+4>>2];c[(c[V>>2]|0)+44+4>>2]=c[(c[V>>2]|0)+44>>2];c[(c[V>>2]|0)+44>>2]=c[da>>2];}}while(0);c[X+8>>2]=c[da>>2];ia=c[ba>>2]|0;if((c[Z>>2]|0)>>>0>0)Qa=Nr(c[V>>2]|0,c[Z>>2]|0)|0;else Qa=0;c[X+4>>2]=ia+Qa;if(Dr()|0?((c[Z>>2]|0)+(c[Y>>2]|0)|0)>>>0>=20:0)Mr(c[V>>2]|0)|0;ia=(Fr()|0)!=0;if(ia&(c[$>>2]|0)>>>0>=31)Mr(c[V>>2]|0)|0;ia=c[aa>>2]|0;if((c[Y>>2]|0)>>>0>0)Ra=Nr(c[V>>2]|0,c[Y>>2]|0)|0;else Ra=0;c[X>>2]=ia+Ra;if(Dr()|0)Mr(c[V>>2]|0)|0;ia=c[V>>2]|0;c[Q>>2]=(c[V>>2]|0)+20;c[R>>2]=ia;ia=(c[(c[Q>>2]|0)+4>>2]|0)+(c[c[Q>>2]>>2]<<3)|0;c[S>>2]=c[ia>>2];c[S+4>>2]=c[ia+4>>2];c[T>>2]=d[S+3>>0];c[U>>2]=Or(c[R>>2]|0,c[T>>2]|0)|0;c[c[Q>>2]>>2]=(e[S>>1]|0)+(c[U>>2]|0);ia=c[V>>2]|0;c[L>>2]=(c[V>>2]|0)+36;c[M>>2]=ia;ia=(c[(c[L>>2]|0)+4>>2]|0)+(c[c[L>>2]>>2]<<3)|0;c[N>>2]=c[ia>>2];c[N+4>>2]=c[ia+4>>2];c[O>>2]=d[N+3>>0];c[P>>2]=Or(c[M>>2]|0,c[O>>2]|0)|0;c[c[L>>2]>>2]=(e[N>>1]|0)+(c[P>>2]|0);if(Dr()|0)Mr(c[V>>2]|0)|0;ia=c[V>>2]|0;c[G>>2]=(c[V>>2]|0)+28;c[H>>2]=ia;ia=(c[(c[G>>2]|0)+4>>2]|0)+(c[c[G>>2]>>2]<<3)|0;c[I>>2]=c[ia>>2];c[I+4>>2]=c[ia+4>>2];c[J>>2]=d[I+3>>0];c[K>>2]=Or(c[H>>2]|0,c[J>>2]|0)|0;c[c[G>>2]>>2]=(e[I>>1]|0)+(c[K>>2]|0);c[Ba>>2]=c[X>>2];c[Ba+4>>2]=c[X+4>>2];c[Ba+8>>2]=c[X+8>>2];c[Ba+12>>2]=c[X+12>>2];ia=c[sa>>2]|0;ja=c[ra>>2]|0;la=c[ua>>2]|0;ka=c[va>>2]|0;Ka=c[wa>>2]|0;Ja=c[xa>>2]|0;Ia=F;Ha=Ba;Ga=Ia+16|0;do{a[Ia>>0]=a[Ha>>0]|0;Ia=Ia+1|0;Ha=Ha+1|0;}while((Ia|0)<(Ga|0));c[p>>2]=ia;c[q>>2]=ja;c[r>>2]=ta;c[s>>2]=la;c[t>>2]=ka;c[u>>2]=Ka;c[v>>2]=Ja;c[w>>2]=(c[p>>2]|0)+(c[F>>2]|0);c[x>>2]=(c[F>>2]|0)+(c[F+4>>2]|0);c[y>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[q>>2]|0)+-8;c[A>>2]=(c[c[r>>2]>>2]|0)+(c[F>>2]|0);c[B>>2]=(c[w>>2]|0)+(0-(c[F+8>>2]|0));b:do{if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[o>>2]=-70;else{if((c[A>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break;}Ha=c[p>>2]|0;if((c[w>>2]|0)>>>0>(c[z>>2]|0)>>>0){Ia=c[q>>2]|0;Ga=c[r>>2]|0;k=c[s>>2]|0;Fa=c[t>>2]|0;La=c[u>>2]|0;j=c[v>>2]|0;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];c[n+8>>2]=c[F+8>>2];c[n+12>>2]=c[F+12>>2];c[o>>2]=Pr(Ha,Ia,n,Ga,k,Fa,La,j)|0;break;}Qr(Ha,c[c[r>>2]>>2]|0);if((c[F>>2]|0)>>>0>8)Rr((c[p>>2]|0)+8|0,(c[c[r>>2]>>2]|0)+8|0,(c[F>>2]|0)-8|0);c[p>>2]=c[w>>2];c[c[r>>2]>>2]=c[A>>2];do{if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[t>>2]|0)|0)>>>0){if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[u>>2]|0)|0)>>>0){c[o>>2]=-20;break b;}c[B>>2]=(c[v>>2]|0)+((c[B>>2]|0)-(c[t>>2]|0));if(((c[B>>2]|0)+(c[F+4>>2]|0)|0)>>>0<=(c[v>>2]|0)>>>0){nE(c[w>>2]|0,c[B>>2]|0,c[F+4>>2]|0)|0;c[o>>2]=c[x>>2];break b;}c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);nE(c[w>>2]|0,c[B>>2]|0,c[C>>2]|0)|0;c[p>>2]=(c[w>>2]|0)+(c[C>>2]|0);Ha=F+4|0;c[Ha>>2]=(c[Ha>>2]|0)-(c[C>>2]|0);c[B>>2]=c[t>>2];if((c[p>>2]|0)>>>0<=(c[z>>2]|0)>>>0?(c[F+4>>2]|0)>>>0>=3:0)break;c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[F+4>>2]|0)>>>0)break;a[(c[p>>2]|0)+(c[D>>2]|0)>>0]=a[(c[B>>2]|0)+(c[D>>2]|0)>>0]|0;c[D>>2]=(c[D>>2]|0)+1;}c[o>>2]=c[x>>2];break b;}}while(0);if((c[F+8>>2]|0)>>>0<8){c[E>>2]=c[6816+(c[F+8>>2]<<2)>>2];a[c[p>>2]>>0]=a[c[B>>2]>>0]|0;a[(c[p>>2]|0)+1>>0]=a[(c[B>>2]|0)+1>>0]|0;a[(c[p>>2]|0)+2>>0]=a[(c[B>>2]|0)+2>>0]|0;a[(c[p>>2]|0)+3>>0]=a[(c[B>>2]|0)+3>>0]|0;c[B>>2]=(c[B>>2]|0)+(c[6848+(c[F+8>>2]<<2)>>2]|0);Sr((c[p>>2]|0)+4|0,c[B>>2]|0);c[B>>2]=(c[B>>2]|0)+(0-(c[E>>2]|0));}else Qr(c[p>>2]|0,c[B>>2]|0);c[p>>2]=(c[p>>2]|0)+8;c[B>>2]=(c[B>>2]|0)+8;Ha=c[p>>2]|0;c:do{if((c[y>>2]|0)>>>0>((c[q>>2]|0)+-13|0)>>>0){if(Ha>>>0<(c[z>>2]|0)>>>0){Rr(c[p>>2]|0,c[B>>2]|0,(c[z>>2]|0)-(c[p>>2]|0)|0);c[B>>2]=(c[B>>2]|0)+((c[z>>2]|0)-(c[p>>2]|0));c[p>>2]=c[z>>2];}while(1){if((c[p>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break c;j=c[B>>2]|0;c[B>>2]=j+1;La=a[j>>0]|0;j=c[p>>2]|0;c[p>>2]=j+1;a[j>>0]=La;}}else Rr(Ha,c[B>>2]|0,(c[F+4>>2]|0)-8|0);}while(0);c[o>>2]=c[x>>2];}}while(0);c[Ca>>2]=c[o>>2];Ja=($q(c[Ca>>2]|0)|0)!=0;Sa=c[Ca>>2]|0;if(Ja){Ta=73;break;}c[sa>>2]=(c[sa>>2]|0)+Sa;}if((Ta|0)==73){c[ga>>2]=Sa;Ma=c[ga>>2]|0;l=m;return Ma|0;}if(Na|0){c[ga>>2]=-20;Ma=c[ga>>2]|0;l=m;return Ma|0;}c[Da>>2]=0;while(1){if((c[Da>>2]|0)>>>0>=3)break a;c[(c[ha>>2]|0)+16+28700+(c[Da>>2]<<2)>>2]=c[ya+44+(c[Da>>2]<<2)>>2];c[Da>>2]=(c[Da>>2]|0)+1;}}}while(0);c[Ea>>2]=(c[ua>>2]|0)-(c[ta>>2]|0);if((c[Ea>>2]|0)>>>0>((c[ra>>2]|0)-(c[sa>>2]|0)|0)>>>0){c[ga>>2]=-70;Ma=c[ga>>2]|0;l=m;return Ma|0;}else{mE(c[sa>>2]|0,c[ta>>2]|0,c[Ea>>2]|0)|0;c[sa>>2]=(c[sa>>2]|0)+(c[Ea>>2]|0);c[ga>>2]=(c[sa>>2]|0)-(c[qa>>2]|0);Ma=c[ga>>2]|0;l=m;return Ma|0;}return 0;}function Jr(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;m=l;l=l+448|0;n=m+432|0;o=m+424|0;p=m+420|0;q=m+416|0;r=m+412|0;s=m+408|0;t=m+404|0;u=m+400|0;v=m+396|0;w=m+392|0;x=m+388|0;y=m+384|0;z=m+380|0;A=m+376|0;B=m+372|0;C=m+368|0;D=m+364|0;E=m+360|0;F=m;G=m+356|0;H=m+352|0;I=m+344|0;J=m+340|0;K=m+336|0;L=m+332|0;M=m+328|0;N=m+320|0;O=m+316|0;P=m+312|0;Q=m+308|0;R=m+304|0;S=m+296|0;T=m+292|0;U=m+288|0;V=m+284|0;W=m+280|0;X=m+264|0;Y=m+256|0;Z=m+252|0;_=m+248|0;$=m+244|0;aa=m+240|0;ba=m+236|0;ca=m+232|0;da=m+228|0;ea=m+224|0;fa=m+220|0;ga=m+216|0;ha=m+212|0;ia=m+208|0;ja=m+204|0;ka=m+200|0;la=m+196|0;ma=m+192|0;na=m+188|0;oa=m+184|0;pa=m+180|0;qa=m+176|0;ra=m+172|0;sa=m+168|0;ta=m+164|0;ua=m+160|0;va=m+156|0;wa=m+152|0;xa=m+148|0;ya=m+80|0;za=m+76|0;Aa=m+72|0;Ba=m+56|0;Ca=m+52|0;Da=m+48|0;Ea=m+44|0;Fa=m+40|0;Ga=m+36|0;Ha=m+32|0;Ia=m+28|0;Ja=m+24|0;Ka=m+20|0;La=m+16|0;c[Fa>>2]=b;c[Ga>>2]=f;c[Ha>>2]=g;c[Ia>>2]=h;c[Ja>>2]=i;c[Ka>>2]=j;c[La>>2]=k;k=c[Ga>>2]|0;Ga=c[Ha>>2]|0;Ha=c[Ia>>2]|0;Ia=c[Ja>>2]|0;Ja=c[Ka>>2]|0;Ka=c[La>>2]|0;c[ha>>2]=c[Fa>>2];c[ia>>2]=k;c[ja>>2]=Ga;c[ka>>2]=Ha;c[la>>2]=Ia;c[ma>>2]=Ja;c[na>>2]=Ka;c[oa>>2]=c[ka>>2];c[pa>>2]=(c[oa>>2]|0)+(c[la>>2]|0);c[qa>>2]=c[ia>>2];c[ra>>2]=(c[qa>>2]|0)+(c[ja>>2]|0);c[sa>>2]=c[qa>>2];c[ta>>2]=c[(c[ha>>2]|0)+28916>>2];c[ua>>2]=(c[ta>>2]|0)+(c[(c[ha>>2]|0)+28932>>2]|0);c[va>>2]=c[(c[ha>>2]|0)+28732>>2];c[wa>>2]=c[(c[ha>>2]|0)+28736>>2];c[xa>>2]=c[(c[ha>>2]|0)+28740>>2];a:do{if(c[ma>>2]|0){c[(c[ha>>2]|0)+28812>>2]=1;c[za>>2]=0;while(1){if((c[za>>2]|0)>>>0>=3)break;c[ya+44+(c[za>>2]<<2)>>2]=c[(c[ha>>2]|0)+16+28700+(c[za>>2]<<2)>>2];c[za>>2]=(c[za>>2]|0)+1;}c[Aa>>2]=Kr(ya,c[oa>>2]|0,(c[pa>>2]|0)-(c[oa>>2]|0)|0)|0;if($q(c[Aa>>2]|0)|0){c[ga>>2]=-20;Ma=c[ga>>2]|0;l=m;return Ma|0;}Lr(ya+20|0,ya,c[c[ha>>2]>>2]|0);Lr(ya+28|0,ya,c[(c[ha>>2]|0)+8>>2]|0);Lr(ya+36|0,ya,c[(c[ha>>2]|0)+4>>2]|0);while(1){ja=(Mr(ya)|0)>>>0<=2;Na=c[ma>>2]|0;if(!(ja?(c[ma>>2]|0)!=0:0))break;c[ma>>2]=Na+-1;ja=c[na>>2]|0;c[V>>2]=ya;c[W>>2]=ja;c[Y>>2]=d[(c[(c[V>>2]|0)+20+4>>2]|0)+(c[(c[V>>2]|0)+20>>2]<<3)+2>>0];c[Z>>2]=d[(c[(c[V>>2]|0)+36+4>>2]|0)+(c[(c[V>>2]|0)+36>>2]<<3)+2>>0];c[_>>2]=d[(c[(c[V>>2]|0)+28+4>>2]|0)+(c[(c[V>>2]|0)+28>>2]<<3)+2>>0];c[$>>2]=(c[Y>>2]|0)+(c[Z>>2]|0)+(c[_>>2]|0);c[aa>>2]=c[(c[(c[V>>2]|0)+20+4>>2]|0)+(c[(c[V>>2]|0)+20>>2]<<3)+4>>2];c[ba>>2]=c[(c[(c[V>>2]|0)+36+4>>2]|0)+(c[(c[V>>2]|0)+36>>2]<<3)+4>>2];c[ca>>2]=c[(c[(c[V>>2]|0)+28+4>>2]|0)+(c[(c[V>>2]|0)+28>>2]<<3)+4>>2];do{if(c[_>>2]|0){ja=(Dr()|0)!=0;if(!(ja&(c[W>>2]|0)!=0&(c[_>>2]|0)>>>0>=25)){ja=c[ca>>2]|0;c[da>>2]=ja+(Nr(c[V>>2]|0,c[_>>2]|0)|0);if(!(Dr()|0))break;Mr(c[V>>2]|0)|0;break;}if((c[_>>2]|0)>>>0<(32-(c[(c[V>>2]|0)+4>>2]|0)|0)>>>0)Oa=c[_>>2]|0;else Oa=32-(c[(c[V>>2]|0)+4>>2]|0)|0;c[ea>>2]=(c[_>>2]|0)-Oa;ja=c[ca>>2]|0;ia=Nr(c[V>>2]|0,(c[_>>2]|0)-(c[ea>>2]|0)|0)|0;c[da>>2]=ja+(ia<<c[ea>>2]);Mr(c[V>>2]|0)|0;if(c[ea>>2]|0){ia=Nr(c[V>>2]|0,c[ea>>2]|0)|0;c[da>>2]=(c[da>>2]|0)+ia;}}else c[da>>2]=0;}while(0);do{if((c[_>>2]|0)>>>0<=1){c[da>>2]=(c[da>>2]|0)+((c[aa>>2]|0)==0&1);if(!(c[da>>2]|0)){c[da>>2]=c[(c[V>>2]|0)+44>>2];break;}ia=(c[V>>2]|0)+44|0;if((c[da>>2]|0)==3)Pa=(c[ia>>2]|0)-1|0;else Pa=c[ia+(c[da>>2]<<2)>>2]|0;c[fa>>2]=Pa;c[fa>>2]=(c[fa>>2]|0)+(((c[fa>>2]|0)!=0^1)&1);if((c[da>>2]|0)!=1)c[(c[V>>2]|0)+44+8>>2]=c[(c[V>>2]|0)+44+4>>2];c[(c[V>>2]|0)+44+4>>2]=c[(c[V>>2]|0)+44>>2];ia=c[fa>>2]|0;c[da>>2]=ia;c[(c[V>>2]|0)+44>>2]=ia;}else{c[(c[V>>2]|0)+44+8>>2]=c[(c[V>>2]|0)+44+4>>2];c[(c[V>>2]|0)+44+4>>2]=c[(c[V>>2]|0)+44>>2];c[(c[V>>2]|0)+44>>2]=c[da>>2];}}while(0);c[X+8>>2]=c[da>>2];ia=c[ba>>2]|0;if((c[Z>>2]|0)>>>0>0)Qa=Nr(c[V>>2]|0,c[Z>>2]|0)|0;else Qa=0;c[X+4>>2]=ia+Qa;if(Dr()|0?((c[Z>>2]|0)+(c[Y>>2]|0)|0)>>>0>=20:0)Mr(c[V>>2]|0)|0;ia=(Fr()|0)!=0;if(ia&(c[$>>2]|0)>>>0>=31)Mr(c[V>>2]|0)|0;ia=c[aa>>2]|0;if((c[Y>>2]|0)>>>0>0)Ra=Nr(c[V>>2]|0,c[Y>>2]|0)|0;else Ra=0;c[X>>2]=ia+Ra;if(Dr()|0)Mr(c[V>>2]|0)|0;ia=c[V>>2]|0;c[Q>>2]=(c[V>>2]|0)+20;c[R>>2]=ia;ia=(c[(c[Q>>2]|0)+4>>2]|0)+(c[c[Q>>2]>>2]<<3)|0;c[S>>2]=c[ia>>2];c[S+4>>2]=c[ia+4>>2];c[T>>2]=d[S+3>>0];c[U>>2]=Or(c[R>>2]|0,c[T>>2]|0)|0;c[c[Q>>2]>>2]=(e[S>>1]|0)+(c[U>>2]|0);ia=c[V>>2]|0;c[L>>2]=(c[V>>2]|0)+36;c[M>>2]=ia;ia=(c[(c[L>>2]|0)+4>>2]|0)+(c[c[L>>2]>>2]<<3)|0;c[N>>2]=c[ia>>2];c[N+4>>2]=c[ia+4>>2];c[O>>2]=d[N+3>>0];c[P>>2]=Or(c[M>>2]|0,c[O>>2]|0)|0;c[c[L>>2]>>2]=(e[N>>1]|0)+(c[P>>2]|0);if(Dr()|0)Mr(c[V>>2]|0)|0;ia=c[V>>2]|0;c[G>>2]=(c[V>>2]|0)+28;c[H>>2]=ia;ia=(c[(c[G>>2]|0)+4>>2]|0)+(c[c[G>>2]>>2]<<3)|0;c[I>>2]=c[ia>>2];c[I+4>>2]=c[ia+4>>2];c[J>>2]=d[I+3>>0];c[K>>2]=Or(c[H>>2]|0,c[J>>2]|0)|0;c[c[G>>2]>>2]=(e[I>>1]|0)+(c[K>>2]|0);c[Ba>>2]=c[X>>2];c[Ba+4>>2]=c[X+4>>2];c[Ba+8>>2]=c[X+8>>2];c[Ba+12>>2]=c[X+12>>2];ia=c[sa>>2]|0;ja=c[ra>>2]|0;la=c[ua>>2]|0;ka=c[va>>2]|0;Ka=c[wa>>2]|0;Ja=c[xa>>2]|0;Ia=F;Ha=Ba;Ga=Ia+16|0;do{a[Ia>>0]=a[Ha>>0]|0;Ia=Ia+1|0;Ha=Ha+1|0;}while((Ia|0)<(Ga|0));c[p>>2]=ia;c[q>>2]=ja;c[r>>2]=ta;c[s>>2]=la;c[t>>2]=ka;c[u>>2]=Ka;c[v>>2]=Ja;c[w>>2]=(c[p>>2]|0)+(c[F>>2]|0);c[x>>2]=(c[F>>2]|0)+(c[F+4>>2]|0);c[y>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[q>>2]|0)+-8;c[A>>2]=(c[c[r>>2]>>2]|0)+(c[F>>2]|0);c[B>>2]=(c[w>>2]|0)+(0-(c[F+8>>2]|0));b:do{if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[o>>2]=-70;else{if((c[A>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break;}Ha=c[p>>2]|0;if((c[w>>2]|0)>>>0>(c[z>>2]|0)>>>0){Ia=c[q>>2]|0;Ga=c[r>>2]|0;k=c[s>>2]|0;Fa=c[t>>2]|0;La=c[u>>2]|0;j=c[v>>2]|0;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];c[n+8>>2]=c[F+8>>2];c[n+12>>2]=c[F+12>>2];c[o>>2]=Pr(Ha,Ia,n,Ga,k,Fa,La,j)|0;break;}Qr(Ha,c[c[r>>2]>>2]|0);if((c[F>>2]|0)>>>0>8)Rr((c[p>>2]|0)+8|0,(c[c[r>>2]>>2]|0)+8|0,(c[F>>2]|0)-8|0);c[p>>2]=c[w>>2];c[c[r>>2]>>2]=c[A>>2];do{if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[t>>2]|0)|0)>>>0){if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[u>>2]|0)|0)>>>0){c[o>>2]=-20;break b;}c[B>>2]=(c[v>>2]|0)+((c[B>>2]|0)-(c[t>>2]|0));if(((c[B>>2]|0)+(c[F+4>>2]|0)|0)>>>0<=(c[v>>2]|0)>>>0){nE(c[w>>2]|0,c[B>>2]|0,c[F+4>>2]|0)|0;c[o>>2]=c[x>>2];break b;}c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);nE(c[w>>2]|0,c[B>>2]|0,c[C>>2]|0)|0;c[p>>2]=(c[w>>2]|0)+(c[C>>2]|0);Ha=F+4|0;c[Ha>>2]=(c[Ha>>2]|0)-(c[C>>2]|0);c[B>>2]=c[t>>2];if((c[p>>2]|0)>>>0<=(c[z>>2]|0)>>>0?(c[F+4>>2]|0)>>>0>=3:0)break;c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[F+4>>2]|0)>>>0)break;a[(c[p>>2]|0)+(c[D>>2]|0)>>0]=a[(c[B>>2]|0)+(c[D>>2]|0)>>0]|0;c[D>>2]=(c[D>>2]|0)+1;}c[o>>2]=c[x>>2];break b;}}while(0);if((c[F+8>>2]|0)>>>0<8){c[E>>2]=c[6816+(c[F+8>>2]<<2)>>2];a[c[p>>2]>>0]=a[c[B>>2]>>0]|0;a[(c[p>>2]|0)+1>>0]=a[(c[B>>2]|0)+1>>0]|0;a[(c[p>>2]|0)+2>>0]=a[(c[B>>2]|0)+2>>0]|0;a[(c[p>>2]|0)+3>>0]=a[(c[B>>2]|0)+3>>0]|0;c[B>>2]=(c[B>>2]|0)+(c[6848+(c[F+8>>2]<<2)>>2]|0);Sr((c[p>>2]|0)+4|0,c[B>>2]|0);c[B>>2]=(c[B>>2]|0)+(0-(c[E>>2]|0));}else Qr(c[p>>2]|0,c[B>>2]|0);c[p>>2]=(c[p>>2]|0)+8;c[B>>2]=(c[B>>2]|0)+8;Ha=c[p>>2]|0;c:do{if((c[y>>2]|0)>>>0>((c[q>>2]|0)+-13|0)>>>0){if(Ha>>>0<(c[z>>2]|0)>>>0){Rr(c[p>>2]|0,c[B>>2]|0,(c[z>>2]|0)-(c[p>>2]|0)|0);c[B>>2]=(c[B>>2]|0)+((c[z>>2]|0)-(c[p>>2]|0));c[p>>2]=c[z>>2];}while(1){if((c[p>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break c;j=c[B>>2]|0;c[B>>2]=j+1;La=a[j>>0]|0;j=c[p>>2]|0;c[p>>2]=j+1;a[j>>0]=La;}}else Rr(Ha,c[B>>2]|0,(c[F+4>>2]|0)-8|0);}while(0);c[o>>2]=c[x>>2];}}while(0);c[Ca>>2]=c[o>>2];Ja=($q(c[Ca>>2]|0)|0)!=0;Sa=c[Ca>>2]|0;if(Ja){Ta=73;break;}c[sa>>2]=(c[sa>>2]|0)+Sa;}if((Ta|0)==73){c[ga>>2]=Sa;Ma=c[ga>>2]|0;l=m;return Ma|0;}if(Na|0){c[ga>>2]=-20;Ma=c[ga>>2]|0;l=m;return Ma|0;}c[Da>>2]=0;while(1){if((c[Da>>2]|0)>>>0>=3)break a;c[(c[ha>>2]|0)+16+28700+(c[Da>>2]<<2)>>2]=c[ya+44+(c[Da>>2]<<2)>>2];c[Da>>2]=(c[Da>>2]|0)+1;}}}while(0);c[Ea>>2]=(c[ua>>2]|0)-(c[ta>>2]|0);if((c[Ea>>2]|0)>>>0>((c[ra>>2]|0)-(c[sa>>2]|0)|0)>>>0){c[ga>>2]=-70;Ma=c[ga>>2]|0;l=m;return Ma|0;}else{mE(c[sa>>2]|0,c[ta>>2]|0,c[Ea>>2]|0)|0;c[sa>>2]=(c[sa>>2]|0)+(c[Ea>>2]|0);c[ga>>2]=(c[sa>>2]|0)-(c[qa>>2]|0);Ma=c[ga>>2]|0;l=m;return Ma|0;}return 0;}function Kr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}c[(c[i>>2]|0)+12>>2]=c[j>>2];c[(c[i>>2]|0)+16>>2]=(c[(c[i>>2]|0)+12>>2]|0)+4;do{if((c[k>>2]|0)>>>0>=4){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;f=Wr(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=f;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0)p=8-(Ar(d[m>>0]|0)|0)|0;else p=0;c[(c[i>>2]|0)+4>>2]=p;if(!(d[m>>0]|0)){c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);q=10;break;}case 6:{q=10;break;}case 5:{q=11;break;}case 4:{q=12;break;}case 3:{q=13;break;}case 2:{q=14;break;}default:{}}if((q|0)==10){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);q=11;}if((q|0)==11){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);q=12;}if((q|0)==12){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);q=13;}if((q|0)==13){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);q=14;}if((q|0)==14){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0)r=8-(Ar(d[n>>0]|0)|0)|0;else r=0;c[(c[i>>2]|0)+4>>2]=r;if(d[n>>0]|0|0){f=(c[i>>2]|0)+4|0;c[f>>2]=(c[f>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-20;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function Lr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[h>>2];c[j>>2]=c[i>>2];i=Or(c[g>>2]|0,c[(c[j>>2]|0)+4>>2]|0)|0;c[c[f>>2]>>2]=i;Mr(c[g>>2]|0)|0;c[(c[f>>2]|0)+4>>2]=(c[h>>2]|0)+8;l=e;return;}function Mr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=Wr(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=Wr(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function Nr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Vr(c[e>>2]|0,c[f>>2]|0)|0;Ur(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Or(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Tr(c[e>>2]|0,c[f>>2]|0)|0;Ur(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Pr(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;k=l;l=l+64|0;m=k+56|0;n=k+52|0;o=k+48|0;p=k+44|0;q=k+40|0;r=k+36|0;s=k+32|0;t=k+28|0;u=k+24|0;v=k+20|0;w=k+16|0;x=k+12|0;y=k+8|0;z=k+4|0;A=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+4>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+8>>2]|0));if((c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[m>>2]=-70;B=c[m>>2]|0;l=k;return B|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;B=c[m>>2]|0;l=k;return B|0;}if((c[u>>2]|0)>>>0<=(c[x>>2]|0)>>>0){c[m>>2]=-1;B=c[m>>2]|0;l=k;return B|0;}if((c[n>>2]|0)>>>0<(c[x>>2]|0)>>>0){Rr(c[n>>2]|0,c[c[p>>2]>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);q=c[p>>2]|0;c[q>>2]=(c[q>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;x=c[p>>2]|0;q=c[x>>2]|0;c[x>>2]=q+1;x=a[q>>0]|0;q=c[n>>2]|0;c[n>>2]=q+1;a[q>>0]=x;}do{if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;B=c[m>>2]|0;l=k;return B|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+4>>2]|0)|0)>>>0>(c[t>>2]|0)>>>0){c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);p=e+4|0;c[p>>2]=(c[p>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];break;}nE(c[u>>2]|0,c[z>>2]|0,c[e+4>>2]|0)|0;c[m>>2]=c[v>>2];B=c[m>>2]|0;l=k;return B|0;}}while(0);while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;e=c[z>>2]|0;c[z>>2]=e+1;u=a[e>>0]|0;e=c[n>>2]|0;c[n>>2]=e+1;a[e>>0]=u;}c[m>>2]=c[v>>2];B=c[m>>2]|0;l=k;return B|0;}function Qr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Rr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Qr(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Sr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function Tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function Ur(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function Vr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function Wr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Dr()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=hq(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=sq(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Xr(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0;m=l;l=l+784|0;n=m+760|0;o=m+756|0;p=m+752|0;q=m+748|0;r=m+744|0;s=m+740|0;t=m+736|0;u=m+732|0;v=m+728|0;w=m+724|0;x=m+720|0;y=m+716|0;z=m+712|0;A=m+708|0;B=m+704|0;C=m+700|0;D=m+696|0;E=m+692|0;F=m+80|0;G=m+688|0;H=m+684|0;I=m+680|0;J=m+676|0;K=m+672|0;L=m+668|0;M=m+664|0;N=m+660|0;O=m+656|0;P=m+652|0;Q=m+648|0;R=m+644|0;S=m+640|0;T=m+636|0;U=m+632|0;V=m+628|0;W=m+624|0;X=m+64|0;Y=m+620|0;Z=m+616|0;_=m+608|0;$=m+604|0;aa=m+600|0;ba=m+596|0;ca=m+592|0;da=m+584|0;ea=m+580|0;fa=m+576|0;ga=m+572|0;ha=m+568|0;ia=m+560|0;ja=m+556|0;ka=m+552|0;la=m+548|0;ma=m+544|0;na=m+528|0;oa=m+524|0;pa=m+520|0;qa=m+516|0;ra=m+512|0;sa=m+508|0;ta=m+504|0;ua=m+500|0;va=m+496|0;wa=m+492|0;xa=m+488|0;ya=m+484|0;za=m+480|0;Aa=m+476|0;Ba=m+472|0;Ca=m+464|0;Da=m+460|0;Ea=m+456|0;Fa=m+452|0;Ga=m+448|0;Ha=m+440|0;Ia=m+436|0;Ja=m+432|0;Ka=m+428|0;La=m+424|0;Ma=m+416|0;Na=m+412|0;Oa=m+408|0;Pa=m+404|0;Qa=m+400|0;Ra=m+384|0;Sa=m+376|0;Ta=m+372|0;Ua=m+368|0;Va=m+364|0;Wa=m+360|0;Xa=m+356|0;Ya=m+352|0;Za=m+348|0;_a=m+344|0;$a=m+340|0;ab=m+336|0;bb=m+332|0;cb=m+328|0;db=m+324|0;eb=m+320|0;fb=m+316|0;gb=m+312|0;hb=m+308|0;ib=m+304|0;jb=m+300|0;kb=m+296|0;lb=m+292|0;mb=m+288|0;nb=m+284|0;ob=m+280|0;pb=m+276|0;qb=m+272|0;rb=m+268|0;sb=m+264|0;tb=m+260|0;ub=m;vb=m+256|0;wb=m+188|0;xb=m+184|0;yb=m+180|0;zb=m+176|0;Ab=m+160|0;Bb=m+144|0;Cb=m+136|0;Db=m+132|0;Eb=m+128|0;Fb=m+124|0;Gb=m+120|0;Hb=m+116|0;Ib=m+112|0;Jb=m+108|0;Kb=m+104|0;Lb=m+100|0;Mb=m+96|0;c[Gb>>2]=b;c[Hb>>2]=f;c[Ib>>2]=g;c[Jb>>2]=h;c[Kb>>2]=i;c[Lb>>2]=j;c[Mb>>2]=k;k=c[Hb>>2]|0;Hb=c[Ib>>2]|0;Ib=c[Jb>>2]|0;Jb=c[Kb>>2]|0;Kb=c[Lb>>2]|0;Lb=c[Mb>>2]|0;c[db>>2]=c[Gb>>2];c[eb>>2]=k;c[fb>>2]=Hb;c[gb>>2]=Ib;c[hb>>2]=Jb;c[ib>>2]=Kb;c[jb>>2]=Lb;c[kb>>2]=c[gb>>2];c[lb>>2]=(c[kb>>2]|0)+(c[hb>>2]|0);c[mb>>2]=c[eb>>2];c[nb>>2]=(c[mb>>2]|0)+(c[fb>>2]|0);c[ob>>2]=c[mb>>2];c[pb>>2]=c[(c[db>>2]|0)+28916>>2];c[qb>>2]=(c[pb>>2]|0)+(c[(c[db>>2]|0)+28932>>2]|0);c[rb>>2]=c[(c[db>>2]|0)+28732>>2];c[sb>>2]=c[(c[db>>2]|0)+28736>>2];c[tb>>2]=c[(c[db>>2]|0)+28740>>2];a:do{if(c[ib>>2]|0){c[vb>>2]=(c[ib>>2]|0)<4?c[ib>>2]|0:4;c[(c[db>>2]|0)+28812>>2]=1;c[yb>>2]=0;while(1){if((c[yb>>2]|0)>>>0>=3)break;c[wb+44+(c[yb>>2]<<2)>>2]=c[(c[db>>2]|0)+16+28700+(c[yb>>2]<<2)>>2];c[yb>>2]=(c[yb>>2]|0)+1;}c[wb+56>>2]=c[rb>>2];c[wb+64>>2]=(c[ob>>2]|0)-(c[rb>>2]|0);c[wb+60>>2]=c[tb>>2];c[zb>>2]=Kr(wb,c[kb>>2]|0,(c[lb>>2]|0)-(c[kb>>2]|0)|0)|0;if($q(c[zb>>2]|0)|0){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}Lr(wb+20|0,wb,c[c[db>>2]>>2]|0);Lr(wb+28|0,wb,c[(c[db>>2]|0)+8>>2]|0);Lr(wb+36|0,wb,c[(c[db>>2]|0)+4>>2]|0);c[xb>>2]=0;while(1){if((Mr(wb)|0)>>>0<=2)Ob=(c[xb>>2]|0)<(c[vb>>2]|0);else Ob=0;Pb=c[xb>>2]|0;if(!Ob)break;fb=ub+(Pb<<4)|0;eb=c[jb>>2]|0;c[Pa>>2]=wb;c[Qa>>2]=eb;c[Sa>>2]=d[(c[(c[Pa>>2]|0)+20+4>>2]|0)+(c[(c[Pa>>2]|0)+20>>2]<<3)+2>>0];c[Ta>>2]=d[(c[(c[Pa>>2]|0)+36+4>>2]|0)+(c[(c[Pa>>2]|0)+36>>2]<<3)+2>>0];c[Ua>>2]=d[(c[(c[Pa>>2]|0)+28+4>>2]|0)+(c[(c[Pa>>2]|0)+28>>2]<<3)+2>>0];c[Va>>2]=(c[Sa>>2]|0)+(c[Ta>>2]|0)+(c[Ua>>2]|0);c[Wa>>2]=c[(c[(c[Pa>>2]|0)+20+4>>2]|0)+(c[(c[Pa>>2]|0)+20>>2]<<3)+4>>2];c[Xa>>2]=c[(c[(c[Pa>>2]|0)+36+4>>2]|0)+(c[(c[Pa>>2]|0)+36>>2]<<3)+4>>2];c[Ya>>2]=c[(c[(c[Pa>>2]|0)+28+4>>2]|0)+(c[(c[Pa>>2]|0)+28>>2]<<3)+4>>2];do{if(c[Ua>>2]|0){eb=(Dr()|0)!=0;if(!(eb&(c[Qa>>2]|0)!=0)){eb=c[Ya>>2]|0;c[Za>>2]=eb+(Nr(c[Pa>>2]|0,c[Ua>>2]|0)|0);if(!(Dr()|0))break;Mr(c[Pa>>2]|0)|0;break;}c[_a>>2]=(c[Ua>>2]|0)-((c[Ua>>2]|0)>>>0<24?c[Ua>>2]|0:24);eb=c[Ya>>2]|0;hb=Nr(c[Pa>>2]|0,(c[Ua>>2]|0)-(c[_a>>2]|0)|0)|0;c[Za>>2]=eb+(hb<<c[_a>>2]);hb=(Dr()|0)!=0;if(hb|(c[_a>>2]|0)!=0)Mr(c[Pa>>2]|0)|0;if(c[_a>>2]|0){hb=Nr(c[Pa>>2]|0,c[_a>>2]|0)|0;c[Za>>2]=(c[Za>>2]|0)+hb;}}else c[Za>>2]=0;}while(0);do{if((c[Ua>>2]|0)>>>0<=1){c[Za>>2]=(c[Za>>2]|0)+((c[Wa>>2]|0)==0&1);if(!(c[Za>>2]|0)){c[Za>>2]=c[(c[Pa>>2]|0)+44>>2];break;}hb=(c[Pa>>2]|0)+44|0;if((c[Za>>2]|0)==3)Qb=(c[hb>>2]|0)-1|0;else Qb=c[hb+(c[Za>>2]<<2)>>2]|0;c[$a>>2]=Qb;c[$a>>2]=(c[$a>>2]|0)+(((c[$a>>2]|0)!=0^1)&1);if((c[Za>>2]|0)!=1)c[(c[Pa>>2]|0)+44+8>>2]=c[(c[Pa>>2]|0)+44+4>>2];c[(c[Pa>>2]|0)+44+4>>2]=c[(c[Pa>>2]|0)+44>>2];hb=c[$a>>2]|0;c[Za>>2]=hb;c[(c[Pa>>2]|0)+44>>2]=hb;}else{c[(c[Pa>>2]|0)+44+8>>2]=c[(c[Pa>>2]|0)+44+4>>2];c[(c[Pa>>2]|0)+44+4>>2]=c[(c[Pa>>2]|0)+44>>2];c[(c[Pa>>2]|0)+44>>2]=c[Za>>2];}}while(0);c[Ra+8>>2]=c[Za>>2];hb=c[Xa>>2]|0;if((c[Ta>>2]|0)>>>0>0)Rb=Nr(c[Pa>>2]|0,c[Ta>>2]|0)|0;else Rb=0;c[Ra+4>>2]=hb+Rb;if(Dr()|0?((c[Ta>>2]|0)+(c[Sa>>2]|0)|0)>>>0>=20:0)Mr(c[Pa>>2]|0)|0;hb=(Fr()|0)!=0;if(hb&(c[Va>>2]|0)>>>0>=31)Mr(c[Pa>>2]|0)|0;hb=c[Wa>>2]|0;if((c[Sa>>2]|0)>>>0>0)Sb=Nr(c[Pa>>2]|0,c[Sa>>2]|0)|0;else Sb=0;c[Ra>>2]=hb+Sb;if(Dr()|0)Mr(c[Pa>>2]|0)|0;c[ab>>2]=(c[(c[Pa>>2]|0)+64>>2]|0)+(c[Ra>>2]|0);hb=c[Pa>>2]|0;if((c[Ra+8>>2]|0)>>>0>(c[ab>>2]|0)>>>0)Tb=c[hb+60>>2]|0;else Tb=c[hb+56>>2]|0;c[bb>>2]=Tb;c[Ra+12>>2]=(c[bb>>2]|0)+(c[ab>>2]|0)+(0-(c[Ra+8>>2]|0));c[(c[Pa>>2]|0)+64>>2]=(c[ab>>2]|0)+(c[Ra+4>>2]|0);hb=c[Pa>>2]|0;c[Ka>>2]=(c[Pa>>2]|0)+20;c[La>>2]=hb;hb=(c[(c[Ka>>2]|0)+4>>2]|0)+(c[c[Ka>>2]>>2]<<3)|0;c[Ma>>2]=c[hb>>2];c[Ma+4>>2]=c[hb+4>>2];c[Na>>2]=d[Ma+3>>0];c[Oa>>2]=Or(c[La>>2]|0,c[Na>>2]|0)|0;c[c[Ka>>2]>>2]=(e[Ma>>1]|0)+(c[Oa>>2]|0);hb=c[Pa>>2]|0;c[Fa>>2]=(c[Pa>>2]|0)+36;c[Ga>>2]=hb;hb=(c[(c[Fa>>2]|0)+4>>2]|0)+(c[c[Fa>>2]>>2]<<3)|0;c[Ha>>2]=c[hb>>2];c[Ha+4>>2]=c[hb+4>>2];c[Ia>>2]=d[Ha+3>>0];c[Ja>>2]=Or(c[Ga>>2]|0,c[Ia>>2]|0)|0;c[c[Fa>>2]>>2]=(e[Ha>>1]|0)+(c[Ja>>2]|0);if(Dr()|0)Mr(c[Pa>>2]|0)|0;hb=c[Pa>>2]|0;c[Aa>>2]=(c[Pa>>2]|0)+28;c[Ba>>2]=hb;hb=(c[(c[Aa>>2]|0)+4>>2]|0)+(c[c[Aa>>2]>>2]<<3)|0;c[Ca>>2]=c[hb>>2];c[Ca+4>>2]=c[hb+4>>2];c[Da>>2]=d[Ca+3>>0];c[Ea>>2]=Or(c[Ba>>2]|0,c[Da>>2]|0)|0;c[c[Aa>>2]>>2]=(e[Ca>>1]|0)+(c[Ea>>2]|0);c[Ab>>2]=c[Ra>>2];c[Ab+4>>2]=c[Ra+4>>2];c[Ab+8>>2]=c[Ra+8>>2];c[Ab+12>>2]=c[Ra+12>>2];c[fb>>2]=c[Ab>>2];c[fb+4>>2]=c[Ab+4>>2];c[fb+8>>2]=c[Ab+8>>2];c[fb+12>>2]=c[Ab+12>>2];c[xb>>2]=(c[xb>>2]|0)+1;}if((Pb|0)<(c[vb>>2]|0)){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}while(1){if((Mr(wb)|0)>>>0>2)break;if((c[xb>>2]|0)>=(c[ib>>2]|0))break;hb=c[jb>>2]|0;c[la>>2]=wb;c[ma>>2]=hb;c[oa>>2]=d[(c[(c[la>>2]|0)+20+4>>2]|0)+(c[(c[la>>2]|0)+20>>2]<<3)+2>>0];c[pa>>2]=d[(c[(c[la>>2]|0)+36+4>>2]|0)+(c[(c[la>>2]|0)+36>>2]<<3)+2>>0];c[qa>>2]=d[(c[(c[la>>2]|0)+28+4>>2]|0)+(c[(c[la>>2]|0)+28>>2]<<3)+2>>0];c[ra>>2]=(c[oa>>2]|0)+(c[pa>>2]|0)+(c[qa>>2]|0);c[sa>>2]=c[(c[(c[la>>2]|0)+20+4>>2]|0)+(c[(c[la>>2]|0)+20>>2]<<3)+4>>2];c[ta>>2]=c[(c[(c[la>>2]|0)+36+4>>2]|0)+(c[(c[la>>2]|0)+36>>2]<<3)+4>>2];c[ua>>2]=c[(c[(c[la>>2]|0)+28+4>>2]|0)+(c[(c[la>>2]|0)+28>>2]<<3)+4>>2];do{if(c[qa>>2]|0){hb=(Dr()|0)!=0;if(!(hb&(c[ma>>2]|0)!=0)){hb=c[ua>>2]|0;c[va>>2]=hb+(Nr(c[la>>2]|0,c[qa>>2]|0)|0);if(!(Dr()|0))break;Mr(c[la>>2]|0)|0;break;}c[wa>>2]=(c[qa>>2]|0)-((c[qa>>2]|0)>>>0<24?c[qa>>2]|0:24);hb=c[ua>>2]|0;eb=Nr(c[la>>2]|0,(c[qa>>2]|0)-(c[wa>>2]|0)|0)|0;c[va>>2]=hb+(eb<<c[wa>>2]);eb=(Dr()|0)!=0;if(eb|(c[wa>>2]|0)!=0)Mr(c[la>>2]|0)|0;if(c[wa>>2]|0){eb=Nr(c[la>>2]|0,c[wa>>2]|0)|0;c[va>>2]=(c[va>>2]|0)+eb;}}else c[va>>2]=0;}while(0);do{if((c[qa>>2]|0)>>>0<=1){c[va>>2]=(c[va>>2]|0)+((c[sa>>2]|0)==0&1);if(!(c[va>>2]|0)){c[va>>2]=c[(c[la>>2]|0)+44>>2];break;}fb=(c[la>>2]|0)+44|0;if((c[va>>2]|0)==3)Ub=(c[fb>>2]|0)-1|0;else Ub=c[fb+(c[va>>2]<<2)>>2]|0;c[xa>>2]=Ub;c[xa>>2]=(c[xa>>2]|0)+(((c[xa>>2]|0)!=0^1)&1);if((c[va>>2]|0)!=1)c[(c[la>>2]|0)+44+8>>2]=c[(c[la>>2]|0)+44+4>>2];c[(c[la>>2]|0)+44+4>>2]=c[(c[la>>2]|0)+44>>2];fb=c[xa>>2]|0;c[va>>2]=fb;c[(c[la>>2]|0)+44>>2]=fb;}else{c[(c[la>>2]|0)+44+8>>2]=c[(c[la>>2]|0)+44+4>>2];c[(c[la>>2]|0)+44+4>>2]=c[(c[la>>2]|0)+44>>2];c[(c[la>>2]|0)+44>>2]=c[va>>2];}}while(0);c[na+8>>2]=c[va>>2];fb=c[ta>>2]|0;if((c[pa>>2]|0)>>>0>0)Vb=Nr(c[la>>2]|0,c[pa>>2]|0)|0;else Vb=0;c[na+4>>2]=fb+Vb;if(Dr()|0?((c[pa>>2]|0)+(c[oa>>2]|0)|0)>>>0>=20:0)Mr(c[la>>2]|0)|0;fb=(Fr()|0)!=0;if(fb&(c[ra>>2]|0)>>>0>=31)Mr(c[la>>2]|0)|0;fb=c[sa>>2]|0;if((c[oa>>2]|0)>>>0>0)Wb=Nr(c[la>>2]|0,c[oa>>2]|0)|0;else Wb=0;c[na>>2]=fb+Wb;if(Dr()|0)Mr(c[la>>2]|0)|0;c[ya>>2]=(c[(c[la>>2]|0)+64>>2]|0)+(c[na>>2]|0);fb=c[la>>2]|0;if((c[na+8>>2]|0)>>>0>(c[ya>>2]|0)>>>0)Xb=c[fb+60>>2]|0;else Xb=c[fb+56>>2]|0;c[za>>2]=Xb;c[na+12>>2]=(c[za>>2]|0)+(c[ya>>2]|0)+(0-(c[na+8>>2]|0));c[(c[la>>2]|0)+64>>2]=(c[ya>>2]|0)+(c[na+4>>2]|0);fb=c[la>>2]|0;c[ga>>2]=(c[la>>2]|0)+20;c[ha>>2]=fb;fb=(c[(c[ga>>2]|0)+4>>2]|0)+(c[c[ga>>2]>>2]<<3)|0;c[ia>>2]=c[fb>>2];c[ia+4>>2]=c[fb+4>>2];c[ja>>2]=d[ia+3>>0];c[ka>>2]=Or(c[ha>>2]|0,c[ja>>2]|0)|0;c[c[ga>>2]>>2]=(e[ia>>1]|0)+(c[ka>>2]|0);fb=c[la>>2]|0;c[ba>>2]=(c[la>>2]|0)+36;c[ca>>2]=fb;fb=(c[(c[ba>>2]|0)+4>>2]|0)+(c[c[ba>>2]>>2]<<3)|0;c[da>>2]=c[fb>>2];c[da+4>>2]=c[fb+4>>2];c[ea>>2]=d[da+3>>0];c[fa>>2]=Or(c[ca>>2]|0,c[ea>>2]|0)|0;c[c[ba>>2]>>2]=(e[da>>1]|0)+(c[fa>>2]|0);if(Dr()|0)Mr(c[la>>2]|0)|0;fb=c[la>>2]|0;c[Y>>2]=(c[la>>2]|0)+28;c[Z>>2]=fb;fb=(c[(c[Y>>2]|0)+4>>2]|0)+(c[c[Y>>2]>>2]<<3)|0;c[_>>2]=c[fb>>2];c[_+4>>2]=c[fb+4>>2];c[$>>2]=d[_+3>>0];c[aa>>2]=Or(c[Z>>2]|0,c[$>>2]|0)|0;c[c[Y>>2]>>2]=(e[_>>1]|0)+(c[aa>>2]|0);c[Bb>>2]=c[na>>2];c[Bb+4>>2]=c[na+4>>2];c[Bb+8>>2]=c[na+8>>2];c[Bb+12>>2]=c[na+12>>2];fb=c[ob>>2]|0;eb=c[nb>>2]|0;hb=c[qb>>2]|0;gb=c[rb>>2]|0;Lb=c[sb>>2]|0;Kb=c[tb>>2]|0;Yb=X;Zb=ub+(((c[xb>>2]|0)-4&3)<<4)|0;_b=Yb+16|0;do{a[Yb>>0]=a[Zb>>0]|0;Yb=Yb+1|0;Zb=Zb+1|0;}while((Yb|0)<(_b|0));c[H>>2]=fb;c[I>>2]=eb;c[J>>2]=pb;c[K>>2]=hb;c[L>>2]=gb;c[M>>2]=Lb;c[N>>2]=Kb;c[O>>2]=(c[H>>2]|0)+(c[X>>2]|0);c[P>>2]=(c[X>>2]|0)+(c[X+4>>2]|0);c[Q>>2]=(c[H>>2]|0)+(c[P>>2]|0);c[R>>2]=(c[I>>2]|0)+-8;c[S>>2]=(c[c[J>>2]>>2]|0)+(c[X>>2]|0);c[T>>2]=c[X+12>>2];b:do{if((c[Q>>2]|0)>>>0>(c[I>>2]|0)>>>0)c[G>>2]=-70;else{if((c[S>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[G>>2]=-20;break;}Jb=c[H>>2]|0;if((c[O>>2]|0)>>>0>(c[R>>2]|0)>>>0){Ib=c[I>>2]|0;Hb=c[J>>2]|0;k=c[K>>2]|0;Gb=c[L>>2]|0;Mb=c[M>>2]|0;j=c[N>>2]|0;c[n>>2]=c[X>>2];c[n+4>>2]=c[X+4>>2];c[n+8>>2]=c[X+8>>2];c[n+12>>2]=c[X+12>>2];c[G>>2]=Pr(Jb,Ib,n,Hb,k,Gb,Mb,j)|0;break;}Qr(Jb,c[c[J>>2]>>2]|0);if((c[X>>2]|0)>>>0>8)Rr((c[H>>2]|0)+8|0,(c[c[J>>2]>>2]|0)+8|0,(c[X>>2]|0)-8|0);c[H>>2]=c[O>>2];c[c[J>>2]>>2]=c[S>>2];do{if((c[X+8>>2]|0)>>>0>((c[O>>2]|0)-(c[L>>2]|0)|0)>>>0){if((c[X+8>>2]|0)>>>0>((c[O>>2]|0)-(c[M>>2]|0)|0)>>>0){c[G>>2]=-20;break b;}if(((c[T>>2]|0)+(c[X+4>>2]|0)|0)>>>0<=(c[N>>2]|0)>>>0){nE(c[O>>2]|0,c[T>>2]|0,c[X+4>>2]|0)|0;c[G>>2]=c[P>>2];break b;}c[U>>2]=(c[N>>2]|0)-(c[T>>2]|0);nE(c[O>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[H>>2]=(c[O>>2]|0)+(c[U>>2]|0);Jb=X+4|0;c[Jb>>2]=(c[Jb>>2]|0)-(c[U>>2]|0);c[T>>2]=c[L>>2];if((c[H>>2]|0)>>>0<=(c[R>>2]|0)>>>0?(c[X+4>>2]|0)>>>0>=3:0)break;c[V>>2]=0;while(1){if((c[V>>2]|0)>>>0>=(c[X+4>>2]|0)>>>0)break;a[(c[H>>2]|0)+(c[V>>2]|0)>>0]=a[(c[T>>2]|0)+(c[V>>2]|0)>>0]|0;c[V>>2]=(c[V>>2]|0)+1;}c[G>>2]=c[P>>2];break b;}}while(0);if((c[X+8>>2]|0)>>>0<8){c[W>>2]=c[6816+(c[X+8>>2]<<2)>>2];a[c[H>>2]>>0]=a[c[T>>2]>>0]|0;a[(c[H>>2]|0)+1>>0]=a[(c[T>>2]|0)+1>>0]|0;a[(c[H>>2]|0)+2>>0]=a[(c[T>>2]|0)+2>>0]|0;a[(c[H>>2]|0)+3>>0]=a[(c[T>>2]|0)+3>>0]|0;c[T>>2]=(c[T>>2]|0)+(c[6848+(c[X+8>>2]<<2)>>2]|0);Sr((c[H>>2]|0)+4|0,c[T>>2]|0);c[T>>2]=(c[T>>2]|0)+(0-(c[W>>2]|0));}else Qr(c[H>>2]|0,c[T>>2]|0);c[H>>2]=(c[H>>2]|0)+8;c[T>>2]=(c[T>>2]|0)+8;Jb=c[H>>2]|0;c:do{if((c[Q>>2]|0)>>>0>((c[I>>2]|0)+-13|0)>>>0){if(Jb>>>0<(c[R>>2]|0)>>>0){Rr(c[H>>2]|0,c[T>>2]|0,(c[R>>2]|0)-(c[H>>2]|0)|0);c[T>>2]=(c[T>>2]|0)+((c[R>>2]|0)-(c[H>>2]|0));c[H>>2]=c[R>>2];}while(1){if((c[H>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break c;j=c[T>>2]|0;c[T>>2]=j+1;Mb=a[j>>0]|0;j=c[H>>2]|0;c[H>>2]=j+1;a[j>>0]=Mb;}}else Rr(Jb,c[T>>2]|0,(c[X+4>>2]|0)-8|0);}while(0);c[G>>2]=c[P>>2];}}while(0);c[Cb>>2]=c[G>>2];if($q(c[Cb>>2]|0)|0){$b=118;break;}Kb=ub+((c[xb>>2]&3)<<4)|0;c[Kb>>2]=c[Bb>>2];c[Kb+4>>2]=c[Bb+4>>2];c[Kb+8>>2]=c[Bb+8>>2];c[Kb+12>>2]=c[Bb+12>>2];c[ob>>2]=(c[ob>>2]|0)+(c[Cb>>2]|0);c[xb>>2]=(c[xb>>2]|0)+1;}if(($b|0)==118){c[cb>>2]=c[Cb>>2];Nb=c[cb>>2]|0;l=m;return Nb|0;}if((c[xb>>2]|0)<(c[ib>>2]|0)){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}c[xb>>2]=(c[xb>>2]|0)-(c[vb>>2]|0);while(1){if((c[xb>>2]|0)>=(c[ib>>2]|0))break;Kb=c[ob>>2]|0;Lb=c[nb>>2]|0;gb=c[qb>>2]|0;hb=c[rb>>2]|0;eb=c[sb>>2]|0;fb=c[tb>>2]|0;Yb=F;Zb=ub+((c[xb>>2]&3)<<4)|0;_b=Yb+16|0;do{a[Yb>>0]=a[Zb>>0]|0;Yb=Yb+1|0;Zb=Zb+1|0;}while((Yb|0)<(_b|0));c[p>>2]=Kb;c[q>>2]=Lb;c[r>>2]=pb;c[s>>2]=gb;c[t>>2]=hb;c[u>>2]=eb;c[v>>2]=fb;c[w>>2]=(c[p>>2]|0)+(c[F>>2]|0);c[x>>2]=(c[F>>2]|0)+(c[F+4>>2]|0);c[y>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[q>>2]|0)+-8;c[A>>2]=(c[c[r>>2]>>2]|0)+(c[F>>2]|0);c[B>>2]=c[F+12>>2];d:do{if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[o>>2]=-70;else{if((c[A>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break;}Jb=c[p>>2]|0;if((c[w>>2]|0)>>>0>(c[z>>2]|0)>>>0){Mb=c[q>>2]|0;j=c[r>>2]|0;Gb=c[s>>2]|0;k=c[t>>2]|0;Hb=c[u>>2]|0;Ib=c[v>>2]|0;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];c[n+8>>2]=c[F+8>>2];c[n+12>>2]=c[F+12>>2];c[o>>2]=Pr(Jb,Mb,n,j,Gb,k,Hb,Ib)|0;break;}Qr(Jb,c[c[r>>2]>>2]|0);if((c[F>>2]|0)>>>0>8)Rr((c[p>>2]|0)+8|0,(c[c[r>>2]>>2]|0)+8|0,(c[F>>2]|0)-8|0);c[p>>2]=c[w>>2];c[c[r>>2]>>2]=c[A>>2];do{if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[t>>2]|0)|0)>>>0){if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[u>>2]|0)|0)>>>0){c[o>>2]=-20;break d;}if(((c[B>>2]|0)+(c[F+4>>2]|0)|0)>>>0<=(c[v>>2]|0)>>>0){nE(c[w>>2]|0,c[B>>2]|0,c[F+4>>2]|0)|0;c[o>>2]=c[x>>2];break d;}c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);nE(c[w>>2]|0,c[B>>2]|0,c[C>>2]|0)|0;c[p>>2]=(c[w>>2]|0)+(c[C>>2]|0);Jb=F+4|0;c[Jb>>2]=(c[Jb>>2]|0)-(c[C>>2]|0);c[B>>2]=c[t>>2];if((c[p>>2]|0)>>>0<=(c[z>>2]|0)>>>0?(c[F+4>>2]|0)>>>0>=3:0)break;c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[F+4>>2]|0)>>>0)break;a[(c[p>>2]|0)+(c[D>>2]|0)>>0]=a[(c[B>>2]|0)+(c[D>>2]|0)>>0]|0;c[D>>2]=(c[D>>2]|0)+1;}c[o>>2]=c[x>>2];break d;}}while(0);if((c[F+8>>2]|0)>>>0<8){c[E>>2]=c[6816+(c[F+8>>2]<<2)>>2];a[c[p>>2]>>0]=a[c[B>>2]>>0]|0;a[(c[p>>2]|0)+1>>0]=a[(c[B>>2]|0)+1>>0]|0;a[(c[p>>2]|0)+2>>0]=a[(c[B>>2]|0)+2>>0]|0;a[(c[p>>2]|0)+3>>0]=a[(c[B>>2]|0)+3>>0]|0;c[B>>2]=(c[B>>2]|0)+(c[6848+(c[F+8>>2]<<2)>>2]|0);Sr((c[p>>2]|0)+4|0,c[B>>2]|0);c[B>>2]=(c[B>>2]|0)+(0-(c[E>>2]|0));}else Qr(c[p>>2]|0,c[B>>2]|0);c[p>>2]=(c[p>>2]|0)+8;c[B>>2]=(c[B>>2]|0)+8;Jb=c[p>>2]|0;e:do{if((c[y>>2]|0)>>>0>((c[q>>2]|0)+-13|0)>>>0){if(Jb>>>0<(c[z>>2]|0)>>>0){Rr(c[p>>2]|0,c[B>>2]|0,(c[z>>2]|0)-(c[p>>2]|0)|0);c[B>>2]=(c[B>>2]|0)+((c[z>>2]|0)-(c[p>>2]|0));c[p>>2]=c[z>>2];}while(1){if((c[p>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break e;Ib=c[B>>2]|0;c[B>>2]=Ib+1;Hb=a[Ib>>0]|0;Ib=c[p>>2]|0;c[p>>2]=Ib+1;a[Ib>>0]=Hb;}}else Rr(Jb,c[B>>2]|0,(c[F+4>>2]|0)-8|0);}while(0);c[o>>2]=c[x>>2];}}while(0);c[Db>>2]=c[o>>2];fb=($q(c[Db>>2]|0)|0)!=0;ac=c[Db>>2]|0;if(fb){$b=155;break;}c[ob>>2]=(c[ob>>2]|0)+ac;c[xb>>2]=(c[xb>>2]|0)+1;}if(($b|0)==155){c[cb>>2]=ac;Nb=c[cb>>2]|0;l=m;return Nb|0;}c[Eb>>2]=0;while(1){if((c[Eb>>2]|0)>>>0>=3)break a;c[(c[db>>2]|0)+16+28700+(c[Eb>>2]<<2)>>2]=c[wb+44+(c[Eb>>2]<<2)>>2];c[Eb>>2]=(c[Eb>>2]|0)+1;}}}while(0);c[Fb>>2]=(c[qb>>2]|0)-(c[pb>>2]|0);if((c[Fb>>2]|0)>>>0>((c[nb>>2]|0)-(c[ob>>2]|0)|0)>>>0){c[cb>>2]=-70;Nb=c[cb>>2]|0;l=m;return Nb|0;}else{mE(c[ob>>2]|0,c[pb>>2]|0,c[Fb>>2]|0)|0;c[ob>>2]=(c[ob>>2]|0)+(c[Fb>>2]|0);c[cb>>2]=(c[ob>>2]|0)-(c[mb>>2]|0);Nb=c[cb>>2]|0;l=m;return Nb|0;}return 0;}function Yr(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0;m=l;l=l+784|0;n=m+760|0;o=m+756|0;p=m+752|0;q=m+748|0;r=m+744|0;s=m+740|0;t=m+736|0;u=m+732|0;v=m+728|0;w=m+724|0;x=m+720|0;y=m+716|0;z=m+712|0;A=m+708|0;B=m+704|0;C=m+700|0;D=m+696|0;E=m+692|0;F=m+80|0;G=m+688|0;H=m+684|0;I=m+680|0;J=m+676|0;K=m+672|0;L=m+668|0;M=m+664|0;N=m+660|0;O=m+656|0;P=m+652|0;Q=m+648|0;R=m+644|0;S=m+640|0;T=m+636|0;U=m+632|0;V=m+628|0;W=m+624|0;X=m+64|0;Y=m+620|0;Z=m+616|0;_=m+608|0;$=m+604|0;aa=m+600|0;ba=m+596|0;ca=m+592|0;da=m+584|0;ea=m+580|0;fa=m+576|0;ga=m+572|0;ha=m+568|0;ia=m+560|0;ja=m+556|0;ka=m+552|0;la=m+548|0;ma=m+544|0;na=m+528|0;oa=m+524|0;pa=m+520|0;qa=m+516|0;ra=m+512|0;sa=m+508|0;ta=m+504|0;ua=m+500|0;va=m+496|0;wa=m+492|0;xa=m+488|0;ya=m+484|0;za=m+480|0;Aa=m+476|0;Ba=m+472|0;Ca=m+464|0;Da=m+460|0;Ea=m+456|0;Fa=m+452|0;Ga=m+448|0;Ha=m+440|0;Ia=m+436|0;Ja=m+432|0;Ka=m+428|0;La=m+424|0;Ma=m+416|0;Na=m+412|0;Oa=m+408|0;Pa=m+404|0;Qa=m+400|0;Ra=m+384|0;Sa=m+376|0;Ta=m+372|0;Ua=m+368|0;Va=m+364|0;Wa=m+360|0;Xa=m+356|0;Ya=m+352|0;Za=m+348|0;_a=m+344|0;$a=m+340|0;ab=m+336|0;bb=m+332|0;cb=m+328|0;db=m+324|0;eb=m+320|0;fb=m+316|0;gb=m+312|0;hb=m+308|0;ib=m+304|0;jb=m+300|0;kb=m+296|0;lb=m+292|0;mb=m+288|0;nb=m+284|0;ob=m+280|0;pb=m+276|0;qb=m+272|0;rb=m+268|0;sb=m+264|0;tb=m+260|0;ub=m;vb=m+256|0;wb=m+188|0;xb=m+184|0;yb=m+180|0;zb=m+176|0;Ab=m+160|0;Bb=m+144|0;Cb=m+136|0;Db=m+132|0;Eb=m+128|0;Fb=m+124|0;Gb=m+120|0;Hb=m+116|0;Ib=m+112|0;Jb=m+108|0;Kb=m+104|0;Lb=m+100|0;Mb=m+96|0;c[Gb>>2]=b;c[Hb>>2]=f;c[Ib>>2]=g;c[Jb>>2]=h;c[Kb>>2]=i;c[Lb>>2]=j;c[Mb>>2]=k;k=c[Hb>>2]|0;Hb=c[Ib>>2]|0;Ib=c[Jb>>2]|0;Jb=c[Kb>>2]|0;Kb=c[Lb>>2]|0;Lb=c[Mb>>2]|0;c[db>>2]=c[Gb>>2];c[eb>>2]=k;c[fb>>2]=Hb;c[gb>>2]=Ib;c[hb>>2]=Jb;c[ib>>2]=Kb;c[jb>>2]=Lb;c[kb>>2]=c[gb>>2];c[lb>>2]=(c[kb>>2]|0)+(c[hb>>2]|0);c[mb>>2]=c[eb>>2];c[nb>>2]=(c[mb>>2]|0)+(c[fb>>2]|0);c[ob>>2]=c[mb>>2];c[pb>>2]=c[(c[db>>2]|0)+28916>>2];c[qb>>2]=(c[pb>>2]|0)+(c[(c[db>>2]|0)+28932>>2]|0);c[rb>>2]=c[(c[db>>2]|0)+28732>>2];c[sb>>2]=c[(c[db>>2]|0)+28736>>2];c[tb>>2]=c[(c[db>>2]|0)+28740>>2];a:do{if(c[ib>>2]|0){c[vb>>2]=(c[ib>>2]|0)<4?c[ib>>2]|0:4;c[(c[db>>2]|0)+28812>>2]=1;c[yb>>2]=0;while(1){if((c[yb>>2]|0)>>>0>=3)break;c[wb+44+(c[yb>>2]<<2)>>2]=c[(c[db>>2]|0)+16+28700+(c[yb>>2]<<2)>>2];c[yb>>2]=(c[yb>>2]|0)+1;}c[wb+56>>2]=c[rb>>2];c[wb+64>>2]=(c[ob>>2]|0)-(c[rb>>2]|0);c[wb+60>>2]=c[tb>>2];c[zb>>2]=Kr(wb,c[kb>>2]|0,(c[lb>>2]|0)-(c[kb>>2]|0)|0)|0;if($q(c[zb>>2]|0)|0){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}Lr(wb+20|0,wb,c[c[db>>2]>>2]|0);Lr(wb+28|0,wb,c[(c[db>>2]|0)+8>>2]|0);Lr(wb+36|0,wb,c[(c[db>>2]|0)+4>>2]|0);c[xb>>2]=0;while(1){if((Mr(wb)|0)>>>0<=2)Ob=(c[xb>>2]|0)<(c[vb>>2]|0);else Ob=0;Pb=c[xb>>2]|0;if(!Ob)break;fb=ub+(Pb<<4)|0;eb=c[jb>>2]|0;c[Pa>>2]=wb;c[Qa>>2]=eb;c[Sa>>2]=d[(c[(c[Pa>>2]|0)+20+4>>2]|0)+(c[(c[Pa>>2]|0)+20>>2]<<3)+2>>0];c[Ta>>2]=d[(c[(c[Pa>>2]|0)+36+4>>2]|0)+(c[(c[Pa>>2]|0)+36>>2]<<3)+2>>0];c[Ua>>2]=d[(c[(c[Pa>>2]|0)+28+4>>2]|0)+(c[(c[Pa>>2]|0)+28>>2]<<3)+2>>0];c[Va>>2]=(c[Sa>>2]|0)+(c[Ta>>2]|0)+(c[Ua>>2]|0);c[Wa>>2]=c[(c[(c[Pa>>2]|0)+20+4>>2]|0)+(c[(c[Pa>>2]|0)+20>>2]<<3)+4>>2];c[Xa>>2]=c[(c[(c[Pa>>2]|0)+36+4>>2]|0)+(c[(c[Pa>>2]|0)+36>>2]<<3)+4>>2];c[Ya>>2]=c[(c[(c[Pa>>2]|0)+28+4>>2]|0)+(c[(c[Pa>>2]|0)+28>>2]<<3)+4>>2];do{if(c[Ua>>2]|0){eb=(Dr()|0)!=0;if(!(eb&(c[Qa>>2]|0)!=0)){eb=c[Ya>>2]|0;c[Za>>2]=eb+(Nr(c[Pa>>2]|0,c[Ua>>2]|0)|0);if(!(Dr()|0))break;Mr(c[Pa>>2]|0)|0;break;}c[_a>>2]=(c[Ua>>2]|0)-((c[Ua>>2]|0)>>>0<24?c[Ua>>2]|0:24);eb=c[Ya>>2]|0;hb=Nr(c[Pa>>2]|0,(c[Ua>>2]|0)-(c[_a>>2]|0)|0)|0;c[Za>>2]=eb+(hb<<c[_a>>2]);hb=(Dr()|0)!=0;if(hb|(c[_a>>2]|0)!=0)Mr(c[Pa>>2]|0)|0;if(c[_a>>2]|0){hb=Nr(c[Pa>>2]|0,c[_a>>2]|0)|0;c[Za>>2]=(c[Za>>2]|0)+hb;}}else c[Za>>2]=0;}while(0);do{if((c[Ua>>2]|0)>>>0<=1){c[Za>>2]=(c[Za>>2]|0)+((c[Wa>>2]|0)==0&1);if(!(c[Za>>2]|0)){c[Za>>2]=c[(c[Pa>>2]|0)+44>>2];break;}hb=(c[Pa>>2]|0)+44|0;if((c[Za>>2]|0)==3)Qb=(c[hb>>2]|0)-1|0;else Qb=c[hb+(c[Za>>2]<<2)>>2]|0;c[$a>>2]=Qb;c[$a>>2]=(c[$a>>2]|0)+(((c[$a>>2]|0)!=0^1)&1);if((c[Za>>2]|0)!=1)c[(c[Pa>>2]|0)+44+8>>2]=c[(c[Pa>>2]|0)+44+4>>2];c[(c[Pa>>2]|0)+44+4>>2]=c[(c[Pa>>2]|0)+44>>2];hb=c[$a>>2]|0;c[Za>>2]=hb;c[(c[Pa>>2]|0)+44>>2]=hb;}else{c[(c[Pa>>2]|0)+44+8>>2]=c[(c[Pa>>2]|0)+44+4>>2];c[(c[Pa>>2]|0)+44+4>>2]=c[(c[Pa>>2]|0)+44>>2];c[(c[Pa>>2]|0)+44>>2]=c[Za>>2];}}while(0);c[Ra+8>>2]=c[Za>>2];hb=c[Xa>>2]|0;if((c[Ta>>2]|0)>>>0>0)Rb=Nr(c[Pa>>2]|0,c[Ta>>2]|0)|0;else Rb=0;c[Ra+4>>2]=hb+Rb;if(Dr()|0?((c[Ta>>2]|0)+(c[Sa>>2]|0)|0)>>>0>=20:0)Mr(c[Pa>>2]|0)|0;hb=(Fr()|0)!=0;if(hb&(c[Va>>2]|0)>>>0>=31)Mr(c[Pa>>2]|0)|0;hb=c[Wa>>2]|0;if((c[Sa>>2]|0)>>>0>0)Sb=Nr(c[Pa>>2]|0,c[Sa>>2]|0)|0;else Sb=0;c[Ra>>2]=hb+Sb;if(Dr()|0)Mr(c[Pa>>2]|0)|0;c[ab>>2]=(c[(c[Pa>>2]|0)+64>>2]|0)+(c[Ra>>2]|0);hb=c[Pa>>2]|0;if((c[Ra+8>>2]|0)>>>0>(c[ab>>2]|0)>>>0)Tb=c[hb+60>>2]|0;else Tb=c[hb+56>>2]|0;c[bb>>2]=Tb;c[Ra+12>>2]=(c[bb>>2]|0)+(c[ab>>2]|0)+(0-(c[Ra+8>>2]|0));c[(c[Pa>>2]|0)+64>>2]=(c[ab>>2]|0)+(c[Ra+4>>2]|0);hb=c[Pa>>2]|0;c[Ka>>2]=(c[Pa>>2]|0)+20;c[La>>2]=hb;hb=(c[(c[Ka>>2]|0)+4>>2]|0)+(c[c[Ka>>2]>>2]<<3)|0;c[Ma>>2]=c[hb>>2];c[Ma+4>>2]=c[hb+4>>2];c[Na>>2]=d[Ma+3>>0];c[Oa>>2]=Or(c[La>>2]|0,c[Na>>2]|0)|0;c[c[Ka>>2]>>2]=(e[Ma>>1]|0)+(c[Oa>>2]|0);hb=c[Pa>>2]|0;c[Fa>>2]=(c[Pa>>2]|0)+36;c[Ga>>2]=hb;hb=(c[(c[Fa>>2]|0)+4>>2]|0)+(c[c[Fa>>2]>>2]<<3)|0;c[Ha>>2]=c[hb>>2];c[Ha+4>>2]=c[hb+4>>2];c[Ia>>2]=d[Ha+3>>0];c[Ja>>2]=Or(c[Ga>>2]|0,c[Ia>>2]|0)|0;c[c[Fa>>2]>>2]=(e[Ha>>1]|0)+(c[Ja>>2]|0);if(Dr()|0)Mr(c[Pa>>2]|0)|0;hb=c[Pa>>2]|0;c[Aa>>2]=(c[Pa>>2]|0)+28;c[Ba>>2]=hb;hb=(c[(c[Aa>>2]|0)+4>>2]|0)+(c[c[Aa>>2]>>2]<<3)|0;c[Ca>>2]=c[hb>>2];c[Ca+4>>2]=c[hb+4>>2];c[Da>>2]=d[Ca+3>>0];c[Ea>>2]=Or(c[Ba>>2]|0,c[Da>>2]|0)|0;c[c[Aa>>2]>>2]=(e[Ca>>1]|0)+(c[Ea>>2]|0);c[Ab>>2]=c[Ra>>2];c[Ab+4>>2]=c[Ra+4>>2];c[Ab+8>>2]=c[Ra+8>>2];c[Ab+12>>2]=c[Ra+12>>2];c[fb>>2]=c[Ab>>2];c[fb+4>>2]=c[Ab+4>>2];c[fb+8>>2]=c[Ab+8>>2];c[fb+12>>2]=c[Ab+12>>2];c[xb>>2]=(c[xb>>2]|0)+1;}if((Pb|0)<(c[vb>>2]|0)){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}while(1){if((Mr(wb)|0)>>>0>2)break;if((c[xb>>2]|0)>=(c[ib>>2]|0))break;hb=c[jb>>2]|0;c[la>>2]=wb;c[ma>>2]=hb;c[oa>>2]=d[(c[(c[la>>2]|0)+20+4>>2]|0)+(c[(c[la>>2]|0)+20>>2]<<3)+2>>0];c[pa>>2]=d[(c[(c[la>>2]|0)+36+4>>2]|0)+(c[(c[la>>2]|0)+36>>2]<<3)+2>>0];c[qa>>2]=d[(c[(c[la>>2]|0)+28+4>>2]|0)+(c[(c[la>>2]|0)+28>>2]<<3)+2>>0];c[ra>>2]=(c[oa>>2]|0)+(c[pa>>2]|0)+(c[qa>>2]|0);c[sa>>2]=c[(c[(c[la>>2]|0)+20+4>>2]|0)+(c[(c[la>>2]|0)+20>>2]<<3)+4>>2];c[ta>>2]=c[(c[(c[la>>2]|0)+36+4>>2]|0)+(c[(c[la>>2]|0)+36>>2]<<3)+4>>2];c[ua>>2]=c[(c[(c[la>>2]|0)+28+4>>2]|0)+(c[(c[la>>2]|0)+28>>2]<<3)+4>>2];do{if(c[qa>>2]|0){hb=(Dr()|0)!=0;if(!(hb&(c[ma>>2]|0)!=0)){hb=c[ua>>2]|0;c[va>>2]=hb+(Nr(c[la>>2]|0,c[qa>>2]|0)|0);if(!(Dr()|0))break;Mr(c[la>>2]|0)|0;break;}c[wa>>2]=(c[qa>>2]|0)-((c[qa>>2]|0)>>>0<24?c[qa>>2]|0:24);hb=c[ua>>2]|0;eb=Nr(c[la>>2]|0,(c[qa>>2]|0)-(c[wa>>2]|0)|0)|0;c[va>>2]=hb+(eb<<c[wa>>2]);eb=(Dr()|0)!=0;if(eb|(c[wa>>2]|0)!=0)Mr(c[la>>2]|0)|0;if(c[wa>>2]|0){eb=Nr(c[la>>2]|0,c[wa>>2]|0)|0;c[va>>2]=(c[va>>2]|0)+eb;}}else c[va>>2]=0;}while(0);do{if((c[qa>>2]|0)>>>0<=1){c[va>>2]=(c[va>>2]|0)+((c[sa>>2]|0)==0&1);if(!(c[va>>2]|0)){c[va>>2]=c[(c[la>>2]|0)+44>>2];break;}fb=(c[la>>2]|0)+44|0;if((c[va>>2]|0)==3)Ub=(c[fb>>2]|0)-1|0;else Ub=c[fb+(c[va>>2]<<2)>>2]|0;c[xa>>2]=Ub;c[xa>>2]=(c[xa>>2]|0)+(((c[xa>>2]|0)!=0^1)&1);if((c[va>>2]|0)!=1)c[(c[la>>2]|0)+44+8>>2]=c[(c[la>>2]|0)+44+4>>2];c[(c[la>>2]|0)+44+4>>2]=c[(c[la>>2]|0)+44>>2];fb=c[xa>>2]|0;c[va>>2]=fb;c[(c[la>>2]|0)+44>>2]=fb;}else{c[(c[la>>2]|0)+44+8>>2]=c[(c[la>>2]|0)+44+4>>2];c[(c[la>>2]|0)+44+4>>2]=c[(c[la>>2]|0)+44>>2];c[(c[la>>2]|0)+44>>2]=c[va>>2];}}while(0);c[na+8>>2]=c[va>>2];fb=c[ta>>2]|0;if((c[pa>>2]|0)>>>0>0)Vb=Nr(c[la>>2]|0,c[pa>>2]|0)|0;else Vb=0;c[na+4>>2]=fb+Vb;if(Dr()|0?((c[pa>>2]|0)+(c[oa>>2]|0)|0)>>>0>=20:0)Mr(c[la>>2]|0)|0;fb=(Fr()|0)!=0;if(fb&(c[ra>>2]|0)>>>0>=31)Mr(c[la>>2]|0)|0;fb=c[sa>>2]|0;if((c[oa>>2]|0)>>>0>0)Wb=Nr(c[la>>2]|0,c[oa>>2]|0)|0;else Wb=0;c[na>>2]=fb+Wb;if(Dr()|0)Mr(c[la>>2]|0)|0;c[ya>>2]=(c[(c[la>>2]|0)+64>>2]|0)+(c[na>>2]|0);fb=c[la>>2]|0;if((c[na+8>>2]|0)>>>0>(c[ya>>2]|0)>>>0)Xb=c[fb+60>>2]|0;else Xb=c[fb+56>>2]|0;c[za>>2]=Xb;c[na+12>>2]=(c[za>>2]|0)+(c[ya>>2]|0)+(0-(c[na+8>>2]|0));c[(c[la>>2]|0)+64>>2]=(c[ya>>2]|0)+(c[na+4>>2]|0);fb=c[la>>2]|0;c[ga>>2]=(c[la>>2]|0)+20;c[ha>>2]=fb;fb=(c[(c[ga>>2]|0)+4>>2]|0)+(c[c[ga>>2]>>2]<<3)|0;c[ia>>2]=c[fb>>2];c[ia+4>>2]=c[fb+4>>2];c[ja>>2]=d[ia+3>>0];c[ka>>2]=Or(c[ha>>2]|0,c[ja>>2]|0)|0;c[c[ga>>2]>>2]=(e[ia>>1]|0)+(c[ka>>2]|0);fb=c[la>>2]|0;c[ba>>2]=(c[la>>2]|0)+36;c[ca>>2]=fb;fb=(c[(c[ba>>2]|0)+4>>2]|0)+(c[c[ba>>2]>>2]<<3)|0;c[da>>2]=c[fb>>2];c[da+4>>2]=c[fb+4>>2];c[ea>>2]=d[da+3>>0];c[fa>>2]=Or(c[ca>>2]|0,c[ea>>2]|0)|0;c[c[ba>>2]>>2]=(e[da>>1]|0)+(c[fa>>2]|0);if(Dr()|0)Mr(c[la>>2]|0)|0;fb=c[la>>2]|0;c[Y>>2]=(c[la>>2]|0)+28;c[Z>>2]=fb;fb=(c[(c[Y>>2]|0)+4>>2]|0)+(c[c[Y>>2]>>2]<<3)|0;c[_>>2]=c[fb>>2];c[_+4>>2]=c[fb+4>>2];c[$>>2]=d[_+3>>0];c[aa>>2]=Or(c[Z>>2]|0,c[$>>2]|0)|0;c[c[Y>>2]>>2]=(e[_>>1]|0)+(c[aa>>2]|0);c[Bb>>2]=c[na>>2];c[Bb+4>>2]=c[na+4>>2];c[Bb+8>>2]=c[na+8>>2];c[Bb+12>>2]=c[na+12>>2];fb=c[ob>>2]|0;eb=c[nb>>2]|0;hb=c[qb>>2]|0;gb=c[rb>>2]|0;Lb=c[sb>>2]|0;Kb=c[tb>>2]|0;Yb=X;Zb=ub+(((c[xb>>2]|0)-4&3)<<4)|0;_b=Yb+16|0;do{a[Yb>>0]=a[Zb>>0]|0;Yb=Yb+1|0;Zb=Zb+1|0;}while((Yb|0)<(_b|0));c[H>>2]=fb;c[I>>2]=eb;c[J>>2]=pb;c[K>>2]=hb;c[L>>2]=gb;c[M>>2]=Lb;c[N>>2]=Kb;c[O>>2]=(c[H>>2]|0)+(c[X>>2]|0);c[P>>2]=(c[X>>2]|0)+(c[X+4>>2]|0);c[Q>>2]=(c[H>>2]|0)+(c[P>>2]|0);c[R>>2]=(c[I>>2]|0)+-8;c[S>>2]=(c[c[J>>2]>>2]|0)+(c[X>>2]|0);c[T>>2]=c[X+12>>2];b:do{if((c[Q>>2]|0)>>>0>(c[I>>2]|0)>>>0)c[G>>2]=-70;else{if((c[S>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[G>>2]=-20;break;}Jb=c[H>>2]|0;if((c[O>>2]|0)>>>0>(c[R>>2]|0)>>>0){Ib=c[I>>2]|0;Hb=c[J>>2]|0;k=c[K>>2]|0;Gb=c[L>>2]|0;Mb=c[M>>2]|0;j=c[N>>2]|0;c[n>>2]=c[X>>2];c[n+4>>2]=c[X+4>>2];c[n+8>>2]=c[X+8>>2];c[n+12>>2]=c[X+12>>2];c[G>>2]=Pr(Jb,Ib,n,Hb,k,Gb,Mb,j)|0;break;}Qr(Jb,c[c[J>>2]>>2]|0);if((c[X>>2]|0)>>>0>8)Rr((c[H>>2]|0)+8|0,(c[c[J>>2]>>2]|0)+8|0,(c[X>>2]|0)-8|0);c[H>>2]=c[O>>2];c[c[J>>2]>>2]=c[S>>2];do{if((c[X+8>>2]|0)>>>0>((c[O>>2]|0)-(c[L>>2]|0)|0)>>>0){if((c[X+8>>2]|0)>>>0>((c[O>>2]|0)-(c[M>>2]|0)|0)>>>0){c[G>>2]=-20;break b;}if(((c[T>>2]|0)+(c[X+4>>2]|0)|0)>>>0<=(c[N>>2]|0)>>>0){nE(c[O>>2]|0,c[T>>2]|0,c[X+4>>2]|0)|0;c[G>>2]=c[P>>2];break b;}c[U>>2]=(c[N>>2]|0)-(c[T>>2]|0);nE(c[O>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[H>>2]=(c[O>>2]|0)+(c[U>>2]|0);Jb=X+4|0;c[Jb>>2]=(c[Jb>>2]|0)-(c[U>>2]|0);c[T>>2]=c[L>>2];if((c[H>>2]|0)>>>0<=(c[R>>2]|0)>>>0?(c[X+4>>2]|0)>>>0>=3:0)break;c[V>>2]=0;while(1){if((c[V>>2]|0)>>>0>=(c[X+4>>2]|0)>>>0)break;a[(c[H>>2]|0)+(c[V>>2]|0)>>0]=a[(c[T>>2]|0)+(c[V>>2]|0)>>0]|0;c[V>>2]=(c[V>>2]|0)+1;}c[G>>2]=c[P>>2];break b;}}while(0);if((c[X+8>>2]|0)>>>0<8){c[W>>2]=c[6816+(c[X+8>>2]<<2)>>2];a[c[H>>2]>>0]=a[c[T>>2]>>0]|0;a[(c[H>>2]|0)+1>>0]=a[(c[T>>2]|0)+1>>0]|0;a[(c[H>>2]|0)+2>>0]=a[(c[T>>2]|0)+2>>0]|0;a[(c[H>>2]|0)+3>>0]=a[(c[T>>2]|0)+3>>0]|0;c[T>>2]=(c[T>>2]|0)+(c[6848+(c[X+8>>2]<<2)>>2]|0);Sr((c[H>>2]|0)+4|0,c[T>>2]|0);c[T>>2]=(c[T>>2]|0)+(0-(c[W>>2]|0));}else Qr(c[H>>2]|0,c[T>>2]|0);c[H>>2]=(c[H>>2]|0)+8;c[T>>2]=(c[T>>2]|0)+8;Jb=c[H>>2]|0;c:do{if((c[Q>>2]|0)>>>0>((c[I>>2]|0)+-13|0)>>>0){if(Jb>>>0<(c[R>>2]|0)>>>0){Rr(c[H>>2]|0,c[T>>2]|0,(c[R>>2]|0)-(c[H>>2]|0)|0);c[T>>2]=(c[T>>2]|0)+((c[R>>2]|0)-(c[H>>2]|0));c[H>>2]=c[R>>2];}while(1){if((c[H>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break c;j=c[T>>2]|0;c[T>>2]=j+1;Mb=a[j>>0]|0;j=c[H>>2]|0;c[H>>2]=j+1;a[j>>0]=Mb;}}else Rr(Jb,c[T>>2]|0,(c[X+4>>2]|0)-8|0);}while(0);c[G>>2]=c[P>>2];}}while(0);c[Cb>>2]=c[G>>2];if($q(c[Cb>>2]|0)|0){$b=118;break;}Kb=ub+((c[xb>>2]&3)<<4)|0;c[Kb>>2]=c[Bb>>2];c[Kb+4>>2]=c[Bb+4>>2];c[Kb+8>>2]=c[Bb+8>>2];c[Kb+12>>2]=c[Bb+12>>2];c[ob>>2]=(c[ob>>2]|0)+(c[Cb>>2]|0);c[xb>>2]=(c[xb>>2]|0)+1;}if(($b|0)==118){c[cb>>2]=c[Cb>>2];Nb=c[cb>>2]|0;l=m;return Nb|0;}if((c[xb>>2]|0)<(c[ib>>2]|0)){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}c[xb>>2]=(c[xb>>2]|0)-(c[vb>>2]|0);while(1){if((c[xb>>2]|0)>=(c[ib>>2]|0))break;Kb=c[ob>>2]|0;Lb=c[nb>>2]|0;gb=c[qb>>2]|0;hb=c[rb>>2]|0;eb=c[sb>>2]|0;fb=c[tb>>2]|0;Yb=F;Zb=ub+((c[xb>>2]&3)<<4)|0;_b=Yb+16|0;do{a[Yb>>0]=a[Zb>>0]|0;Yb=Yb+1|0;Zb=Zb+1|0;}while((Yb|0)<(_b|0));c[p>>2]=Kb;c[q>>2]=Lb;c[r>>2]=pb;c[s>>2]=gb;c[t>>2]=hb;c[u>>2]=eb;c[v>>2]=fb;c[w>>2]=(c[p>>2]|0)+(c[F>>2]|0);c[x>>2]=(c[F>>2]|0)+(c[F+4>>2]|0);c[y>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[q>>2]|0)+-8;c[A>>2]=(c[c[r>>2]>>2]|0)+(c[F>>2]|0);c[B>>2]=c[F+12>>2];d:do{if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[o>>2]=-70;else{if((c[A>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break;}Jb=c[p>>2]|0;if((c[w>>2]|0)>>>0>(c[z>>2]|0)>>>0){Mb=c[q>>2]|0;j=c[r>>2]|0;Gb=c[s>>2]|0;k=c[t>>2]|0;Hb=c[u>>2]|0;Ib=c[v>>2]|0;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];c[n+8>>2]=c[F+8>>2];c[n+12>>2]=c[F+12>>2];c[o>>2]=Pr(Jb,Mb,n,j,Gb,k,Hb,Ib)|0;break;}Qr(Jb,c[c[r>>2]>>2]|0);if((c[F>>2]|0)>>>0>8)Rr((c[p>>2]|0)+8|0,(c[c[r>>2]>>2]|0)+8|0,(c[F>>2]|0)-8|0);c[p>>2]=c[w>>2];c[c[r>>2]>>2]=c[A>>2];do{if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[t>>2]|0)|0)>>>0){if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[u>>2]|0)|0)>>>0){c[o>>2]=-20;break d;}if(((c[B>>2]|0)+(c[F+4>>2]|0)|0)>>>0<=(c[v>>2]|0)>>>0){nE(c[w>>2]|0,c[B>>2]|0,c[F+4>>2]|0)|0;c[o>>2]=c[x>>2];break d;}c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);nE(c[w>>2]|0,c[B>>2]|0,c[C>>2]|0)|0;c[p>>2]=(c[w>>2]|0)+(c[C>>2]|0);Jb=F+4|0;c[Jb>>2]=(c[Jb>>2]|0)-(c[C>>2]|0);c[B>>2]=c[t>>2];if((c[p>>2]|0)>>>0<=(c[z>>2]|0)>>>0?(c[F+4>>2]|0)>>>0>=3:0)break;c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[F+4>>2]|0)>>>0)break;a[(c[p>>2]|0)+(c[D>>2]|0)>>0]=a[(c[B>>2]|0)+(c[D>>2]|0)>>0]|0;c[D>>2]=(c[D>>2]|0)+1;}c[o>>2]=c[x>>2];break d;}}while(0);if((c[F+8>>2]|0)>>>0<8){c[E>>2]=c[6816+(c[F+8>>2]<<2)>>2];a[c[p>>2]>>0]=a[c[B>>2]>>0]|0;a[(c[p>>2]|0)+1>>0]=a[(c[B>>2]|0)+1>>0]|0;a[(c[p>>2]|0)+2>>0]=a[(c[B>>2]|0)+2>>0]|0;a[(c[p>>2]|0)+3>>0]=a[(c[B>>2]|0)+3>>0]|0;c[B>>2]=(c[B>>2]|0)+(c[6848+(c[F+8>>2]<<2)>>2]|0);Sr((c[p>>2]|0)+4|0,c[B>>2]|0);c[B>>2]=(c[B>>2]|0)+(0-(c[E>>2]|0));}else Qr(c[p>>2]|0,c[B>>2]|0);c[p>>2]=(c[p>>2]|0)+8;c[B>>2]=(c[B>>2]|0)+8;Jb=c[p>>2]|0;e:do{if((c[y>>2]|0)>>>0>((c[q>>2]|0)+-13|0)>>>0){if(Jb>>>0<(c[z>>2]|0)>>>0){Rr(c[p>>2]|0,c[B>>2]|0,(c[z>>2]|0)-(c[p>>2]|0)|0);c[B>>2]=(c[B>>2]|0)+((c[z>>2]|0)-(c[p>>2]|0));c[p>>2]=c[z>>2];}while(1){if((c[p>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break e;Ib=c[B>>2]|0;c[B>>2]=Ib+1;Hb=a[Ib>>0]|0;Ib=c[p>>2]|0;c[p>>2]=Ib+1;a[Ib>>0]=Hb;}}else Rr(Jb,c[B>>2]|0,(c[F+4>>2]|0)-8|0);}while(0);c[o>>2]=c[x>>2];}}while(0);c[Db>>2]=c[o>>2];fb=($q(c[Db>>2]|0)|0)!=0;ac=c[Db>>2]|0;if(fb){$b=155;break;}c[ob>>2]=(c[ob>>2]|0)+ac;c[xb>>2]=(c[xb>>2]|0)+1;}if(($b|0)==155){c[cb>>2]=ac;Nb=c[cb>>2]|0;l=m;return Nb|0;}c[Eb>>2]=0;while(1){if((c[Eb>>2]|0)>>>0>=3)break a;c[(c[db>>2]|0)+16+28700+(c[Eb>>2]<<2)>>2]=c[wb+44+(c[Eb>>2]<<2)>>2];c[Eb>>2]=(c[Eb>>2]|0)+1;}}}while(0);c[Fb>>2]=(c[qb>>2]|0)-(c[pb>>2]|0);if((c[Fb>>2]|0)>>>0>((c[nb>>2]|0)-(c[ob>>2]|0)|0)>>>0){c[cb>>2]=-70;Nb=c[cb>>2]|0;l=m;return Nb|0;}else{mE(c[ob>>2]|0,c[pb>>2]|0,c[Fb>>2]|0)|0;c[ob>>2]=(c[ob>>2]|0)+(c[Fb>>2]|0);c[cb>>2]=(c[ob>>2]|0)-(c[mb>>2]|0);Nb=c[cb>>2]|0;l=m;return Nb|0;}return 0;}function Zr(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;i=l;l=l+32|0;j=i+24|0;k=i+20|0;m=i+16|0;n=i+12|0;o=i+8|0;p=i+4|0;q=i;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;h=_r(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,0)|0;l=i;return h|0;}function _r(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;j=l;l=l+80|0;k=j+64|0;m=j+60|0;n=j+56|0;o=j+52|0;p=j+48|0;q=j+44|0;r=j+40|0;s=j+36|0;t=j+32|0;u=j+28|0;v=j+24|0;w=j+20|0;x=j+16|0;y=j+12|0;z=j+8|0;A=j+4|0;B=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=c[n>>2];if(c[t>>2]|0){c[r>>2]=$r(c[t>>2]|0)|0;c[s>>2]=as(c[t>>2]|0)|0;}while(1){if((c[q>>2]|0)>>>0<5){C=27;break;}i=(iq(c[p>>2]|0,c[q>>2]|0)|0)!=0;h=c[p>>2]|0;if(i){c[x>>2]=ar(h,c[q>>2]|0)|0;if($q(c[x>>2]|0)|0){C=7;break;}if(c[(c[m>>2]|0)+28940>>2]|0){C=9;break;}c[w>>2]=bs(c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[x>>2]|0,c[r>>2]|0,c[s>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+(c[w>>2]|0);c[o>>2]=(c[o>>2]|0)-(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[x>>2]|0);continue;}c[v>>2]=hq(h)|0;if((c[v>>2]|0)!=-47205080){if((c[v>>2]&-16|0)!=407710288){C=18;break;}if((c[q>>2]|0)>>>0<8){C=14;break;}c[y>>2]=(hq((c[p>>2]|0)+4|0)|0)+8;if((c[q>>2]|0)>>>0<(c[y>>2]|0)>>>0){C=16;break;}c[p>>2]=(c[p>>2]|0)+(c[y>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[y>>2]|0);continue;}h=c[m>>2]|0;if(c[t>>2]|0){c[z>>2]=cs(h,c[t>>2]|0)|0;if($q(c[z>>2]|0)|0){C=21;break;}}else{c[A>>2]=ds(h,c[r>>2]|0,c[s>>2]|0)|0;if($q(c[A>>2]|0)|0){C=23;break;}}Br(c[m>>2]|0,c[n>>2]|0);c[B>>2]=es(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,p,q)|0;if($q(c[B>>2]|0)|0){C=25;break;}c[n>>2]=(c[n>>2]|0)+(c[B>>2]|0);c[o>>2]=(c[o>>2]|0)-(c[B>>2]|0);}if((C|0)==7){c[k>>2]=c[x>>2];D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==9){c[k>>2]=-64;D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==14){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==16){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==18){c[k>>2]=-10;D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==21){c[k>>2]=c[z>>2];D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==23){c[k>>2]=c[A>>2];D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==25){c[k>>2]=c[B>>2];D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==27)if(c[q>>2]|0){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else{c[k>>2]=(c[n>>2]|0)-(c[u>>2]|0);D=c[k>>2]|0;l=j;return D|0;}return 0;}function $r(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+4>>2]|0;}function as(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+8>>2]|0;}function bs(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+64|0;i=h+52|0;j=h+48|0;k=h+44|0;m=h+40|0;n=h+36|0;o=h+32|0;p=h+28|0;q=h+24|0;r=h+20|0;s=h+16|0;t=h+12|0;u=h+8|0;v=h+4|0;w=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=iq(c[m>>2]|0,c[n>>2]|0)|0;switch(c[q>>2]|0){case 4:{c[i>>2]=ms(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;x=c[i>>2]|0;l=h;return x|0;}case 5:{c[s>>2]=ns()|0;if(!(c[s>>2]|0)){c[i>>2]=-64;x=c[i>>2]|0;l=h;return x|0;}else{c[r>>2]=os(c[s>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;eq(c[s>>2]|0)|0;c[i>>2]=c[r>>2];x=c[i>>2]|0;l=h;return x|0;}break;}case 6:{c[u>>2]=ps()|0;if(!(c[u>>2]|0)){c[i>>2]=-64;x=c[i>>2]|0;l=h;return x|0;}else{c[t>>2]=qs(c[u>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;dq(c[u>>2]|0)|0;c[i>>2]=c[t>>2];x=c[i>>2]|0;l=h;return x|0;}break;}case 7:{c[w>>2]=rs()|0;if(!(c[w>>2]|0)){c[i>>2]=-64;x=c[i>>2]|0;l=h;return x|0;}else{c[v>>2]=ss(c[w>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;cq(c[w>>2]|0)|0;c[i>>2]=c[v>>2];x=c[i>>2]|0;l=h;return x|0;}break;}default:{c[i>>2]=-10;x=c[i>>2]|0;l=h;return x|0;}}return 0;}function cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=l;l=l+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=is(c[f>>2]|0)|0;if($q(c[h>>2]|0)|0){c[e>>2]=c[h>>2];i=c[e>>2]|0;l=d;return i|0;}do{if(c[g>>2]|0){c[(c[f>>2]|0)+28908>>2]=c[(c[g>>2]|0)+28724>>2];c[(c[f>>2]|0)+28732>>2]=c[(c[g>>2]|0)+4>>2];c[(c[f>>2]|0)+28736>>2]=c[(c[g>>2]|0)+4>>2];c[(c[f>>2]|0)+28740>>2]=(c[(c[g>>2]|0)+4>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0);c[(c[f>>2]|0)+28728>>2]=c[(c[f>>2]|0)+28740>>2];h=(c[f>>2]|0)+28808|0;if(c[(c[g>>2]|0)+28728>>2]|0){c[h>>2]=1;c[(c[f>>2]|0)+28812>>2]=1;c[c[f>>2]>>2]=(c[g>>2]|0)+12;c[(c[f>>2]|0)+4>>2]=(c[g>>2]|0)+12+6160;c[(c[f>>2]|0)+8>>2]=(c[g>>2]|0)+12+4104;c[(c[f>>2]|0)+12>>2]=(c[g>>2]|0)+12+10264;c[(c[f>>2]|0)+16+28700>>2]=c[(c[g>>2]|0)+12+28700>>2];c[(c[f>>2]|0)+16+28700+4>>2]=c[(c[g>>2]|0)+12+28700+4>>2];c[(c[f>>2]|0)+16+28700+8>>2]=c[(c[g>>2]|0)+12+28700+8>>2];break;}else{c[h>>2]=0;c[(c[f>>2]|0)+28812>>2]=0;break;}}}while(0);c[e>>2]=0;i=c[e>>2]|0;l=d;return i|0;}function ds(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=is(c[g>>2]|0)|0;if($q(c[j>>2]|0)|0){c[f>>2]=c[j>>2];m=c[f>>2]|0;l=e;return m|0;}if((c[h>>2]|0)!=0&(c[i>>2]|0)!=0?(c[k>>2]=js(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0,$q(c[k>>2]|0)|0):0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}function es(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;h=l;l=l+80|0;i=h+76|0;j=h+72|0;k=h+68|0;m=h+64|0;n=h+60|0;o=h+56|0;p=h+52|0;q=h+48|0;r=h+44|0;s=h+40|0;t=h+36|0;u=h+32|0;v=h+28|0;w=h+24|0;x=h+12|0;y=h+8|0;z=h+4|0;A=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[c[n>>2]>>2];c[q>>2]=c[k>>2];c[r>>2]=(c[q>>2]|0)+(c[m>>2]|0);c[s>>2]=c[q>>2];c[t>>2]=c[c[o>>2]>>2];if((c[t>>2]|0)>>>0<9){c[i>>2]=-72;B=c[i>>2]|0;l=h;return B|0;}c[u>>2]=mq(c[p>>2]|0,5)|0;if($q(c[u>>2]|0)|0){c[i>>2]=c[u>>2];B=c[i>>2]|0;l=h;return B|0;}if((c[t>>2]|0)>>>0<((c[u>>2]|0)+3|0)>>>0){c[i>>2]=-72;B=c[i>>2]|0;l=h;return B|0;}c[v>>2]=fs(c[j>>2]|0,c[p>>2]|0,c[u>>2]|0)|0;if($q(c[v>>2]|0)|0){c[i>>2]=c[v>>2];B=c[i>>2]|0;l=h;return B|0;}c[p>>2]=(c[p>>2]|0)+(c[u>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[u>>2]|0);a:while(1){c[y>>2]=br(c[p>>2]|0,c[t>>2]|0,x)|0;if($q(c[y>>2]|0)|0){C=11;break;}c[p>>2]=(c[p>>2]|0)+3;c[t>>2]=(c[t>>2]|0)-3;if((c[y>>2]|0)>>>0>(c[t>>2]|0)>>>0){C=13;break;}switch(c[x>>2]|0){case 2:{c[w>>2]=Cr(c[j>>2]|0,c[s>>2]|0,(c[r>>2]|0)-(c[s>>2]|0)|0,c[p>>2]|0,c[y>>2]|0,1)|0;break;}case 0:{c[w>>2]=gs(c[s>>2]|0,(c[r>>2]|0)-(c[s>>2]|0)|0,c[p>>2]|0,c[y>>2]|0)|0;break;}case 1:{c[w>>2]=hs(c[s>>2]|0,(c[r>>2]|0)-(c[s>>2]|0)|0,a[c[p>>2]>>0]|0,c[x+8>>2]|0)|0;break;}default:{C=18;break a;}}if($q(c[w>>2]|0)|0){C=20;break;}if(c[(c[j>>2]|0)+28752+32>>2]|0)Nh((c[j>>2]|0)+28816|0,c[s>>2]|0,c[w>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[y>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[y>>2]|0);if(c[x+4>>2]|0){C=25;break;}}if((C|0)==11){c[i>>2]=c[y>>2];B=c[i>>2]|0;l=h;return B|0;}else if((C|0)==13){c[i>>2]=-72;B=c[i>>2]|0;l=h;return B|0;}else if((C|0)==18){c[i>>2]=-20;B=c[i>>2]|0;l=h;return B|0;}else if((C|0)==20){c[i>>2]=c[w>>2];B=c[i>>2]|0;l=h;return B|0;}else if((C|0)==25){C=(c[j>>2]|0)+28752|0;if(((c[C>>2]|0)!=-1?1:(c[C+4>>2]|0)!=-1)?(C=(c[s>>2]|0)-(c[q>>2]|0)|0,w=(c[j>>2]|0)+28752|0,(C|0)!=(c[w>>2]|0)?1:(((C|0)<0)<<31>>31|0)!=(c[w+4>>2]|0)):0){c[i>>2]=-20;B=c[i>>2]|0;l=h;return B|0;}do{if(c[(c[j>>2]|0)+28752+32>>2]|0){w=Oh((c[j>>2]|0)+28816|0)|0;c[z>>2]=w;if((c[t>>2]|0)>>>0<4){c[i>>2]=-22;B=c[i>>2]|0;l=h;return B|0;}c[A>>2]=hq(c[p>>2]|0)|0;if((c[A>>2]|0)==(c[z>>2]|0)){c[p>>2]=(c[p>>2]|0)+4;c[t>>2]=(c[t>>2]|0)-4;break;}c[i>>2]=-22;B=c[i>>2]|0;l=h;return B|0;}}while(0);c[c[n>>2]>>2]=c[p>>2];c[c[o>>2]>>2]=c[t>>2];c[i>>2]=(c[s>>2]|0)-(c[q>>2]|0);B=c[i>>2]|0;l=h;return B|0;}return 0;}function fs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=qq((c[g>>2]|0)+28752|0,c[h>>2]|0,c[i>>2]|0,c[(c[g>>2]|0)+28912>>2]|0)|0;i=($q(c[j>>2]|0)|0)!=0;h=c[j>>2]|0;if(i){c[f>>2]=h;k=c[f>>2]|0;l=e;return k|0;}if(h>>>0>0){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}if(c[(c[g>>2]|0)+28752+28>>2]|0?(c[(c[g>>2]|0)+28908>>2]|0)!=(c[(c[g>>2]|0)+28752+28>>2]|0):0){c[f>>2]=-32;k=c[f>>2]|0;l=e;return k|0;}if(c[(c[g>>2]|0)+28752+32>>2]|0)Lh((c[g>>2]|0)+28816|0,0,0)|0;c[f>>2]=0;k=c[f>>2]|0;l=e;return k|0;}function gs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function hs(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h+16|0;n=h;c[j>>2]=b;c[k>>2]=e;a[m>>0]=f;c[n>>2]=g;if((c[n>>2]|0)>>>0>(c[k>>2]|0)>>>0){c[i>>2]=-70;o=c[i>>2]|0;l=h;return o|0;}else{oE(c[j>>2]|0,(d[m>>0]|0)&255|0,c[n>>2]|0)|0;c[i>>2]=c[n>>2];o=c[i>>2]|0;l=h;return o|0;}return 0;}function is(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=oq(c[(c[d>>2]|0)+28912>>2]|0)|0;c[(c[d>>2]|0)+28744>>2]=a;c[(c[d>>2]|0)+28804>>2]=0;a=(c[d>>2]|0)+28792|0;c[a>>2]=0;c[a+4>>2]=0;c[(c[d>>2]|0)+28728>>2]=0;c[(c[d>>2]|0)+28732>>2]=0;c[(c[d>>2]|0)+28736>>2]=0;c[(c[d>>2]|0)+28740>>2]=0;c[(c[d>>2]|0)+16+10264>>2]=201326604;c[(c[d>>2]|0)+28812>>2]=0;c[(c[d>>2]|0)+28808>>2]=0;c[(c[d>>2]|0)+28908>>2]=0;a=(c[d>>2]|0)+16+28700|0;c[a>>2]=c[2985];c[a+4>>2]=c[2986];c[a+8>>2]=c[2987];c[c[d>>2]>>2]=(c[d>>2]|0)+16;c[(c[d>>2]|0)+4>>2]=(c[d>>2]|0)+16+6160;c[(c[d>>2]|0)+8>>2]=(c[d>>2]|0)+16+4104;c[(c[d>>2]|0)+12>>2]=(c[d>>2]|0)+16+10264;l=b;return 0;}function js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)>>>0<8){c[f>>2]=ks(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}c[j>>2]=hq(c[h>>2]|0)|0;if((c[j>>2]|0)!=-332356553){c[f>>2]=ks(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}j=hq((c[h>>2]|0)+4|0)|0;c[(c[g>>2]|0)+28908>>2]=j;c[k>>2]=ls((c[g>>2]|0)+16|0,c[h>>2]|0,c[i>>2]|0)|0;if($q(c[k>>2]|0)|0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}else{c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);c[(c[g>>2]|0)+28812>>2]=1;c[(c[g>>2]|0)+28808>>2]=1;c[f>>2]=ks(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}return 0;}function ks(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+28740>>2]=c[(c[f>>2]|0)+28728>>2];c[(c[f>>2]|0)+28736>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+28728>>2]|0)-(c[(c[f>>2]|0)+28732>>2]|0)));c[(c[f>>2]|0)+28732>>2]=c[g>>2];c[(c[f>>2]|0)+28728>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return 0;}function ls(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=l;l=l+336|0;f=e+328|0;g=e+324|0;h=e+320|0;i=e+316|0;j=e+312|0;k=e+308|0;m=e+304|0;n=e+192|0;o=e+300|0;p=e+296|0;q=e+292|0;r=e+80|0;s=e+288|0;t=e+284|0;u=e+280|0;v=e;w=e+276|0;x=e+272|0;y=e+268|0;z=e+264|0;A=e+260|0;B=e+256|0;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[h>>2];c[k>>2]=(c[j>>2]|0)+(c[i>>2]|0);if((c[i>>2]|0)>>>0<=8){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+8;c[m>>2]=Bp((c[g>>2]|0)+10264|0,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0,(c[g>>2]|0)+26652|0,2048)|0;if($q(c[m>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[m>>2]|0);c[o>>2]=31;c[q>>2]=ah(n,o,p,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if($q(c[q>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[o>>2]|0)>>>0>31){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[p>>2]|0)>>>0>8){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}zr((c[g>>2]|0)+4104|0,n,c[o>>2]|0,4032,4160,c[p>>2]|0);c[j>>2]=(c[j>>2]|0)+(c[q>>2]|0);c[s>>2]=52;c[u>>2]=ah(r,s,t,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if($q(c[u>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[s>>2]|0)>>>0>52){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[t>>2]|0)>>>0>9){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}zr((c[g>>2]|0)+6160|0,r,c[s>>2]|0,5216,5840,c[t>>2]|0);c[j>>2]=(c[j>>2]|0)+(c[u>>2]|0);c[w>>2]=35;c[y>>2]=ah(v,w,x,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if($q(c[y>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[w>>2]|0)>>>0>35){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[x>>2]|0)>>>0>9){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}zr(c[g>>2]|0,v,c[w>>2]|0,6416,5696,c[x>>2]|0);c[j>>2]=(c[j>>2]|0)+(c[y>>2]|0);if(((c[j>>2]|0)+12|0)>>>0>(c[k>>2]|0)>>>0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[A>>2]=(c[k>>2]|0)-((c[j>>2]|0)+12);c[z>>2]=0;while(1){D=c[j>>2]|0;if((c[z>>2]|0)>=3){E=31;break;}c[B>>2]=hq(D)|0;c[j>>2]=(c[j>>2]|0)+4;if(!(c[B>>2]|0)){E=29;break;}if((c[B>>2]|0)>>>0>=(c[A>>2]|0)>>>0){E=29;break;}c[(c[g>>2]|0)+28700+(c[z>>2]<<2)>>2]=c[B>>2];c[z>>2]=(c[z>>2]|0)+1;}if((E|0)==29){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}else if((E|0)==31){c[f>>2]=D-(c[h>>2]|0);C=c[f>>2]|0;l=e;return C|0;}return 0;}function ms(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[n>>2]=hw()|0;if(!(c[n>>2]|0)){c[g>>2]=-64;o=c[g>>2]|0;l=f;return o|0;}else{c[m>>2]=iw(c[n>>2]|0,c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;gq(c[n>>2]|0)|0;c[g>>2]=c[m>>2];o=c[g>>2]|0;l=f;return o|0;}return 0;}function ns(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(157816)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{dw(c[d>>2]|0)|0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function os(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;i=l;l=l+32|0;j=i+24|0;k=i+20|0;m=i+16|0;n=i+12|0;o=i+8|0;p=i+4|0;q=i;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;Su(c[j>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;Tu(c[j>>2]|0,c[k>>2]|0);q=Uu(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;l=i;return q|0;}function ps(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(152680)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{Ou(c[d>>2]|0)|0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function qs(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;i=l;l=l+32|0;j=i+24|0;k=i+20|0;m=i+16|0;n=i+12|0;o=i+8|0;p=i+4|0;q=i;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;Jt(c[j>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;Kt(c[j>>2]|0,c[k>>2]|0);q=Lt(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;l=i;return q|0;}function rs(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[2988];c[b+4>>2]=c[2989];c[b+8>>2]=c[2990];d=Gt(b)|0;l=a;return d|0;}function ss(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;i=l;l=l+32|0;j=i+24|0;k=i+20|0;m=i+16|0;n=i+12|0;o=i+8|0;p=i+4|0;q=i;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;ts(c[j>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;us(c[j>>2]|0,c[k>>2]|0);q=vs(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;l=i;return q|0;}function ts(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=Ct(c[g>>2]|0)|0;if(hr(c[j>>2]|0)|0){c[f>>2]=c[j>>2];m=c[f>>2]|0;l=e;return m|0;}if((c[h>>2]|0)!=0&(c[i>>2]|0)!=0?(c[k>>2]=Dt(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0,hr(c[k>>2]|0)|0):0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}function us(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+21520>>2]|0)){l=d;return;}c[(c[e>>2]|0)+21532>>2]=c[(c[e>>2]|0)+21520>>2];c[(c[e>>2]|0)+21528>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+21520>>2]|0)-(c[(c[e>>2]|0)+21524>>2]|0)));c[(c[e>>2]|0)+21524>>2]=c[f>>2];c[(c[e>>2]|0)+21520>>2]=c[f>>2];l=d;return;}function vs(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;h=l;l=l+80|0;i=h+68|0;j=h+64|0;k=h+60|0;m=h+56|0;n=h+52|0;o=h+48|0;p=h+44|0;q=h+40|0;r=h+36|0;s=h+32|0;t=h+28|0;u=h+24|0;v=h+20|0;w=h+16|0;x=h+8|0;y=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=c[o>>2];if((c[o>>2]|0)>>>0<8){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}c[v>>2]=Cq(c[n>>2]|0,5)|0;if(hr(c[v>>2]|0)|0){c[i>>2]=c[v>>2];z=c[i>>2]|0;l=h;return z|0;}if((c[o>>2]|0)>>>0<((c[v>>2]|0)+3|0)>>>0){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}if(ws(c[j>>2]|0,c[n>>2]|0,c[v>>2]|0)|0){c[i>>2]=-20;z=c[i>>2]|0;l=h;return z|0;}c[p>>2]=(c[p>>2]|0)+(c[v>>2]|0);c[u>>2]=(c[u>>2]|0)-(c[v>>2]|0);a:while(1){c[y>>2]=ir(c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0,x)|0;if(hr(c[y>>2]|0)|0){A=11;break;}c[p>>2]=(c[p>>2]|0)+3;c[u>>2]=(c[u>>2]|0)-3;if((c[y>>2]|0)>>>0>(c[u>>2]|0)>>>0){A=13;break;}switch(c[x>>2]|0){case 0:{c[w>>2]=xs(c[j>>2]|0,c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,c[p>>2]|0,c[y>>2]|0)|0;break;}case 1:{c[w>>2]=ys(c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,c[p>>2]|0,c[y>>2]|0)|0;break;}case 2:{c[w>>2]=zs(c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,a[c[p>>2]>>0]|0,c[x+4>>2]|0)|0;break;}case 3:{if(c[u>>2]|0){A=19;break a;}c[w>>2]=0;break;}default:{A=21;break a;}}if((c[x>>2]|0)==3){A=28;break;}if(hr(c[w>>2]|0)|0){A=24;break;}if(c[(c[j>>2]|0)+21552+16>>2]|0)Nh((c[j>>2]|0)+21592|0,c[t>>2]|0,c[w>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[y>>2]|0);c[u>>2]=(c[u>>2]|0)-(c[y>>2]|0);}if((A|0)==11){c[i>>2]=c[y>>2];z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==13){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==19){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==21){c[i>>2]=-1;z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==24){c[i>>2]=c[w>>2];z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==28){c[i>>2]=(c[t>>2]|0)-(c[r>>2]|0);z=c[i>>2]|0;l=h;return z|0;}return 0;}function ws(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=Aq((c[g>>2]|0)+21552|0,c[h>>2]|0,c[i>>2]|0)|0;if(c[(c[g>>2]|0)+21552+12>>2]|0?(c[(c[g>>2]|0)+21684>>2]|0)!=(c[(c[g>>2]|0)+21552+12>>2]|0):0){c[f>>2]=-32;k=c[f>>2]|0;l=e;return k|0;}if(c[(c[g>>2]|0)+21552+16>>2]|0)Lh((c[g>>2]|0)+21592|0,0,0)|0;c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}function xs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];if((c[n>>2]|0)>>>0>=131072){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}c[p>>2]=As(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(hr(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+f;c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=Bs(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function ys(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function zs(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h+16|0;n=h;c[j>>2]=b;c[k>>2]=e;a[m>>0]=f;c[n>>2]=g;if((c[n>>2]|0)>>>0>(c[k>>2]|0)>>>0){c[i>>2]=-70;o=c[i>>2]|0;l=h;return o|0;}else{oE(c[j>>2]|0,(d[m>>0]|0)&255|0,c[n>>2]|0)|0;c[i>>2]=c[n>>2];o=c[i>>2]|0;l=h;return o|0;}return 0;}function As(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+40|0;p=g+36|0;q=g+32|0;r=g+28|0;s=g+24|0;t=g+20|0;u=g+16|0;v=g+12|0;w=g+8|0;x=g+4|0;y=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<3){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch((d[c[m>>2]>>0]|0)>>6|0){case 0:{c[p>>2]=0;c[q>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[k>>2]|0)>>>0<5){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch(c[q>>2]|0){case 3:{c[q>>2]=5;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<14)+((d[(c[m>>2]|0)+1>>0]|0)<<6)+((d[(c[m>>2]|0)+2>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&3)<<16)+((d[(c[m>>2]|0)+3>>0]|0)<<8)+(d[(c[m>>2]|0)+4>>0]|0);break;}case 2:{c[q>>2]=4;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<10)+((d[(c[m>>2]|0)+1>>0]|0)<<2)+((d[(c[m>>2]|0)+2>>0]|0)>>6);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&63)<<8)+(d[(c[m>>2]|0)+3>>0]|0);break;}default:{c[q>>2]=3;c[p>>2]=(d[c[m>>2]>>0]|0)&16;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);}}if((c[n>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(((c[o>>2]|0)+(c[q>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}j=(c[i>>2]|0)+5132|0;f=(c[i>>2]|0)+21708|0;e=c[n>>2]|0;b=(c[m>>2]|0)+(c[q>>2]|0)|0;A=c[o>>2]|0;if(c[p>>2]|0)B=Xs(j,f,e,b,A)|0;else B=Ys(j,f,e,b,A)|0;if(hr(B)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+21688>>2]=(c[i>>2]|0)+21708;c[(c[i>>2]|0)+21704>>2]=c[n>>2];c[(c[i>>2]|0)+21584>>2]=1;n=(c[i>>2]|0)+21708+(c[(c[i>>2]|0)+21704>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=(c[o>>2]|0)+(c[q>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 1:{c[t>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[t>>2]|0)!=1){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(!(c[(c[i>>2]|0)+21584>>2]|0)){c[h>>2]=-30;z=c[h>>2]|0;l=g;return z|0;}c[t>>2]=3;c[r>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[s>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if(((c[s>>2]|0)+(c[t>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}c[u>>2]=Zs((c[i>>2]|0)+21708|0,c[r>>2]|0,(c[m>>2]|0)+(c[t>>2]|0)|0,c[s>>2]|0,(c[i>>2]|0)+5132|0)|0;if(hr(c[u>>2]|0)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+21688>>2]=(c[i>>2]|0)+21708;c[(c[i>>2]|0)+21704>>2]=c[r>>2];r=(c[i>>2]|0)+21708+(c[(c[i>>2]|0)+21704>>2]|0)|0;a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;a[r+6>>0]=0;a[r+7>>0]=0;c[h>>2]=(c[s>>2]|0)+(c[t>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[w>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[w>>2]|0){case 3:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);break;}case 2:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[w>>2]=1;c[v>>2]=(d[c[m>>2]>>0]|0)&31;}}if(((c[w>>2]|0)+(c[v>>2]|0)+8|0)>>>0<=(c[k>>2]|0)>>>0){c[(c[i>>2]|0)+21688>>2]=(c[m>>2]|0)+(c[w>>2]|0);c[(c[i>>2]|0)+21704>>2]=c[v>>2];c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}if(((c[v>>2]|0)+(c[w>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{mE((c[i>>2]|0)+21708|0,(c[m>>2]|0)+(c[w>>2]|0)|0,c[v>>2]|0)|0;c[(c[i>>2]|0)+21688>>2]=(c[i>>2]|0)+21708;c[(c[i>>2]|0)+21704>>2]=c[v>>2];t=(c[i>>2]|0)+21708+(c[(c[i>>2]|0)+21704>>2]|0)|0;a[t>>0]=0;a[t+1>>0]=0;a[t+2>>0]=0;a[t+3>>0]=0;a[t+4>>0]=0;a[t+5>>0]=0;a[t+6>>0]=0;a[t+7>>0]=0;c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 3:{c[y>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[y>>2]|0){case 3:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if((c[k>>2]|0)>>>0<4){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[y>>2]=1;c[x>>2]=(d[c[m>>2]>>0]|0)&31;}}if((c[x>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{oE((c[i>>2]|0)+21708|0,(d[(c[m>>2]|0)+(c[y>>2]|0)>>0]|0)&255|0,(c[x>>2]|0)+8|0)|0;c[(c[i>>2]|0)+21688>>2]=(c[i>>2]|0)+21708;c[(c[i>>2]|0)+21704>>2]=c[x>>2];c[h>>2]=(c[y>>2]|0)+1;z=c[h>>2]|0;l=g;return z|0;}break;}default:{}}return 0;}function Bs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;g=l;l=l+192|0;h=g+168|0;i=g+164|0;j=g+160|0;k=g+156|0;m=g+152|0;n=g+148|0;o=g+144|0;p=g+140|0;q=g+136|0;r=g+132|0;s=g+128|0;t=g+124|0;u=g+120|0;v=g+116|0;w=g+112|0;x=g+108|0;y=g+104|0;z=g+100|0;A=g+96|0;B=g+92|0;C=g+88|0;D=g+84|0;E=g+32|0;F=g+28|0;G=g+24|0;H=g+12|0;I=g+8|0;J=g+4|0;K=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=c[(c[j>>2]|0)+21688>>2];c[v>>2]=(c[u>>2]|0)+(c[(c[j>>2]|0)+21704>>2]|0);c[w>>2]=c[j>>2];c[x>>2]=(c[j>>2]|0)+3080;c[y>>2]=(c[j>>2]|0)+2052;c[z>>2]=c[(c[j>>2]|0)+21524>>2];c[A>>2]=c[(c[j>>2]|0)+21528>>2];c[B>>2]=c[(c[j>>2]|0)+21532>>2];c[D>>2]=Cs(C,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[(c[j>>2]|0)+21588>>2]|0,c[p>>2]|0,c[o>>2]|0)|0;o=(hr(c[D>>2]|0)|0)!=0;m=c[D>>2]|0;if(o){c[i>>2]=m;L=c[i>>2]|0;l=g;return L|0;}c[p>>2]=(c[p>>2]|0)+m;a:do{if(c[C>>2]|0){c[(c[j>>2]|0)+21588>>2]=1;c[F>>2]=0;while(1){if((c[F>>2]|0)>>>0>=3)break;c[E+40+(c[F>>2]<<2)>>2]=c[(c[j>>2]|0)+21540+(c[F>>2]<<2)>>2];c[F>>2]=(c[F>>2]|0)+1;}c[G>>2]=Ds(E,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;if(hr(c[G>>2]|0)|0){c[i>>2]=-20;L=c[i>>2]|0;l=g;return L|0;}Es(E+16|0,E,c[w>>2]|0);Es(E+24|0,E,c[y>>2]|0);Es(E+32|0,E,c[x>>2]|0);while(1){m=(Fs(E)|0)>>>0<=2;M=c[C>>2]|0;if(!(m?(c[C>>2]|0)!=0:0))break;c[C>>2]=M+-1;Gs(H,E);m=c[t>>2]|0;o=c[s>>2]|0;D=c[v>>2]|0;k=c[z>>2]|0;n=c[A>>2]|0;f=c[B>>2]|0;c[h>>2]=c[H>>2];c[h+4>>2]=c[H+4>>2];c[h+8>>2]=c[H+8>>2];c[I>>2]=Hs(m,o,h,u,D,k,n,f)|0;f=(hr(c[I>>2]|0)|0)!=0;N=c[I>>2]|0;if(f){O=12;break;}c[t>>2]=(c[t>>2]|0)+N;}if((O|0)==12){c[i>>2]=N;L=c[i>>2]|0;l=g;return L|0;}if(M|0){c[i>>2]=-20;L=c[i>>2]|0;l=g;return L|0;}c[J>>2]=0;while(1){if((c[J>>2]|0)>>>0>=3)break a;c[(c[j>>2]|0)+21540+(c[J>>2]<<2)>>2]=c[E+40+(c[J>>2]<<2)>>2];c[J>>2]=(c[J>>2]|0)+1;}}}while(0);c[K>>2]=(c[v>>2]|0)-(c[u>>2]|0);if((c[K>>2]|0)>>>0>((c[s>>2]|0)-(c[t>>2]|0)|0)>>>0){c[i>>2]=-70;L=c[i>>2]|0;l=g;return L|0;}else{mE(c[t>>2]|0,c[u>>2]|0,c[K>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[K>>2]|0);c[i>>2]=(c[t>>2]|0)-(c[r>>2]|0);L=c[i>>2]|0;l=g;return L|0;}return 0;}function Cs(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;j=l;l=l+80|0;k=j+68|0;m=j+64|0;n=j+60|0;o=j+56|0;p=j+52|0;q=j+48|0;r=j+44|0;s=j+40|0;t=j+36|0;u=j+32|0;v=j+28|0;w=j+24|0;x=j+20|0;y=j+16|0;z=j+12|0;A=j+8|0;B=j+4|0;C=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=c[r>>2];c[u>>2]=(c[t>>2]|0)+(c[s>>2]|0);c[v>>2]=c[t>>2];if((c[s>>2]|0)>>>0<1){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}s=c[v>>2]|0;c[v>>2]=s+1;c[w>>2]=d[s>>0];if(!(c[w>>2]|0)){c[c[m>>2]>>2]=0;c[k>>2]=1;D=c[k>>2]|0;l=j;return D|0;}do{if((c[w>>2]|0)>127){s=c[v>>2]|0;if((c[w>>2]|0)==255){if((s+2|0)>>>0<=(c[u>>2]|0)>>>0){c[w>>2]=((Eq(c[v>>2]|0)|0)&65535)+32512;c[v>>2]=(c[v>>2]|0)+2;break;}c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else{if(s>>>0<(c[u>>2]|0)>>>0){s=(c[w>>2]|0)-128<<8;r=c[v>>2]|0;c[v>>2]=r+1;c[w>>2]=s+(d[r>>0]|0);break;}c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}}}while(0);c[c[m>>2]>>2]=c[w>>2];c[x>>2]=(d[c[v>>2]>>0]|0)>>6;c[y>>2]=(d[c[v>>2]>>0]|0)>>4&3;c[z>>2]=(d[c[v>>2]>>0]|0)>>2&3;c[v>>2]=(c[v>>2]|0)+1;if((c[v>>2]|0)>>>0>((c[u>>2]|0)+-3|0)>>>0){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}c[A>>2]=Ss(c[n>>2]|0,c[x>>2]|0,35,9,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,5440,6,c[q>>2]|0)|0;if(hr(c[A>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}c[v>>2]=(c[v>>2]|0)+(c[A>>2]|0);c[B>>2]=Ss(c[p>>2]|0,c[y>>2]|0,28,8,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,5520,5,c[q>>2]|0)|0;if(hr(c[B>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}c[v>>2]=(c[v>>2]|0)+(c[B>>2]|0);c[C>>2]=Ss(c[o>>2]|0,c[z>>2]|0,52,9,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,5584,6,c[q>>2]|0)|0;if(hr(c[C>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}else{c[v>>2]=(c[v>>2]|0)+(c[C>>2]|0);c[k>>2]=(c[v>>2]|0)-(c[t>>2]|0);D=c[k>>2]|0;l=j;return D|0;}return 0;}function Cc(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0;}function Dc(){return l|0;}function Ec(a){a=a|0;l=a;}function Fc(a,b){a=a|0;b=b|0;l=a;m=b;}function Gc(a,b){a=a|0;b=b|0;if(!n){n=a;o=b;}}function Hc(a){a=a|0;y=a;}function Ic(){return y|0;}function Jc(){var a=0;a=l;l=l+16|0;Kz(Cz(12856,12862)|0)|0;Az(12856,a)|0;l=a;return;}function Kc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+32|0;f=e;g=c[d>>2]|0;h=hb(12865)|0;i=db(g|0,h|0)|0;ab(h|0);j=+Za(i|0,11e3,f|0);jb(c[f>>2]|0);h=~~j>>>0;ab(i|0);i=b+4|0;g=c[i>>2]|0;k=c[b>>2]|0;m=g-k|0;n=k;a:do{if(m>>>0<h>>>0){o=h-m|0;p=b+8|0;q=c[p>>2]|0;if((q-g|0)>>>0>=o>>>0){r=o;s=g;while(1){a[s>>0]=0;s=(c[i>>2]|0)+1|0;c[i>>2]=s;r=r+-1|0;if(!r)break a;}}if((h|0)<0)Wz(b);r=q-k|0;s=r<<1;t=r>>>0<1073741823?s>>>0<h>>>0?h:s:2147483647;if(!t)u=0;else u=Uz(t)|0;oE(u+m|0,0,o|0)|0;if((m|0)>0)mE(u|0,n|0,m|0)|0;c[b>>2]=u;c[i>>2]=u+h;c[p>>2]=u+t;if(k|0)Vz(n);}else if(m>>>0>h>>>0)c[i>>2]=n+h;}while(0);n=cb(12872)|0;i=c[d>>2]|0;m=hb(12879)|0;k=db(i|0,m|0)|0;ab(m|0);m=c[b>>2]|0;eb(n|0);c[f>>2]=n;c[f+8>>2]=m;c[f+16>>2]=h;h=gb(k|0,3,11072,f|0)|0;ab(k|0);cd(h,12891,d);ab(h|0);ab(n|0);l=e;return;}function Lc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;e=l;l=l+32|0;f=e;g=cb(12895)|0;h=cb(12872)|0;i=hb(12879)|0;j=db(g|0,i|0)|0;ab(i|0);i=c[d>>2]|0;k=d+4|0;m=c[k>>2]|0;eb(h|0);c[f>>2]=h;c[f+8>>2]=i;c[f+16>>2]=m-i;i=gb(j|0,3,11092,f|0)|0;m=i;ab(j|0);j=hb(12879)|0;n=db(h|0,j|0)|0;ab(j|0);c[f>>2]=(c[k>>2]|0)-(c[d>>2]|0);d=gb(n|0,1,11104,f|0)|0;ab(n|0);n=hb(12879)|0;k=db(g|0,n|0)|0;ab(n|0);eb(d|0);c[f>>2]=d;n=gb(k|0,1,11108,f|0)|0;c[b>>2]=n;ab(k|0);if((a[21600]|0)==0?WD(21600)|0:0)c[5404]=bb(2,11084)|0;k=c[5404]|0;eb(i|0);c[f>>2]=m;$a(k|0,n|0,12891,f|0);ab(d|0);ab(i|0);ab(h|0);ab(g|0);l=e;return;}function Mc(a){a=a|0;return(c[a+4>>2]|0)-(c[a>>2]|0)|0;}function Nc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d;f=cb(12872)|0;g=cb(12895)|0;h=hb(12879)|0;i=db(g|0,h|0)|0;ab(h|0);h=c[b>>2]|0;j=c[b+4>>2]|0;eb(f|0);c[e>>2]=f;c[e+8>>2]=h;c[e+16>>2]=j-h;c[a>>2]=gb(i|0,3,11092,e|0)|0;ab(i|0);ab(g|0);ab(f|0);l=d;return;}function Oc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=Uz(32)|0;Pc(e,a);Ef(f,e,b);b=c[e>>2]|0;if(!b){l=d;return f|0;}c[e+4>>2]=b;Vz(b);l=d;return f|0;}function Pc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0;d=l;l=l+48|0;e=d;f=d+24|0;c[f>>2]=0;g=f+4|0;c[g>>2]=0;h=f+8|0;c[h>>2]=0;i=c[b>>2]|0;j=hb(12865)|0;k=db(i|0,j|0)|0;ab(j|0);m=+Za(k|0,11016,e|0);jb(c[e>>2]|0);j=~~m>>>0;do{if(j|0)if((j|0)<0)Wz(f);else{i=Uz(j)|0;oE(i|0,0,j|0)|0;n=i+j|0;c[f>>2]=i;c[g>>2]=n;c[h>>2]=n;break;}}while(0);ab(k|0);k=c[b>>2]|0;j=hb(12865)|0;n=db(k|0,j|0)|0;ab(j|0);m=+Za(n|0,11e3,e|0);jb(c[e>>2]|0);j=~~m>>>0;ab(n|0);n=cb(12872)|0;k=c[b>>2]|0;i=hb(12879)|0;o=db(k|0,i|0)|0;ab(i|0);i=c[f>>2]|0;eb(n|0);c[e>>2]=n;c[e+8>>2]=i;c[e+16>>2]=j;i=gb(o|0,3,11072,e|0)|0;ab(o|0);o=c[f>>2]|0;e=o;if(((c[h>>2]|0)-o|0)>>>0<j>>>0){k=(c[g>>2]|0)-o|0;p=Uz(j)|0;if((k|0)>0)mE(p|0,e|0,k|0)|0;c[f>>2]=p;c[g>>2]=p+k;c[h>>2]=p+j;if(o|0)Vz(e);}dd(i,12891,b);ab(i|0);ab(n|0);c[a>>2]=c[f>>2];c[a+4>>2]=c[g>>2];c[a+8>>2]=c[h>>2];l=d;return;}function Qc(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Uz(32)|0;Pc(d,a);Pf(e,d);a=c[d>>2]|0;if(!a){l=b;return e|0;}c[d+4>>2]=a;Vz(a);l=b;return e|0;}function Rc(a,b){a=a|0;b=b|0;return ag(a,b)|0;}function Sc(a,b){a=a|0;b=b|0;return mg(a,b)|0;}function Tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+48|0;f=e+28|0;g=e+24|0;h=e;c[f>>2]=0;i=f+4|0;c[i>>2]=0;c[f+8>>2]=0;j=c[b>>2]|0;c[g>>2]=j;eb(j|0);Kc(f,g);ab(c[g>>2]|0);g=h+16|0;c[h>>2]=11128;c[h+4>>2]=d;c[g>>2]=h;d=vg(a,f,h)|0;a=c[g>>2]|0;if((h|0)!=(a|0)){if(a|0)wc[c[(c[a>>2]|0)+20>>2]&127](a);}else wc[c[(c[a>>2]|0)+16>>2]&127](a);a=c[f>>2]|0;if(!a){l=e;return d|0;}c[i>>2]=a;Vz(a);l=e;return d|0;}function Uc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11172;c[e+4>>2]=b;c[f>>2]=e;b=xg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function Vc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11216;c[e+4>>2]=b;c[f>>2]=e;b=yg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function Wc(a){a=a|0;return Bg(a)|0;}function Xc(a,b){a=a|0;b=b|0;return Mg(a,b)|0;}function Yc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+48|0;f=e+28|0;g=e+24|0;h=e;c[f>>2]=0;i=f+4|0;c[i>>2]=0;c[f+8>>2]=0;j=c[b>>2]|0;c[g>>2]=j;eb(j|0);Kc(f,g);ab(c[g>>2]|0);g=h+16|0;c[h>>2]=11260;c[h+4>>2]=d;c[g>>2]=h;d=Vg(a,f,h)|0;a=c[g>>2]|0;if((h|0)!=(a|0)){if(a|0)wc[c[(c[a>>2]|0)+20>>2]&127](a);}else wc[c[(c[a>>2]|0)+16>>2]&127](a);a=c[f>>2]|0;if(!a){l=e;return d|0;}c[i>>2]=a;Vz(a);l=e;return d|0;}function Zc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11304;c[e+4>>2]=b;c[f>>2]=e;b=Xg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function _c(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11348;c[e+4>>2]=b;c[f>>2]=e;b=Yg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function $c(a){a=a|0;ad(12902);Ra(12856,1,11420,14747,61,2);Ra(12911,3,11424,14750,1,26);Ra(12925,2,11436,14761,20,27);Ra(12943,2,11436,14761,20,28);Ma(10096,10112,10128,0,14742,31,14745,0,14745,0,12960,14747,62);Ra(12980,3,11444,14765,9,21);Ma(10152,10168,10184,0,14742,32,14745,0,14745,0,13002,14747,63);Ra(13024,2,11456,14761,22,33);Ma(10200,10208,10224,0,14742,34,14745,0,14745,0,13048,14747,64);Na(10200,1,11464,14742,35,1);a=Uz(8)|0;c[a>>2]=23;c[a+4>>2]=0;Oa(10200,13058,3,11468,14765,10,a|0,0);a=Uz(8)|0;c[a>>2]=24;c[a+4>>2]=0;Oa(10200,13072,3,11480,14765,11,a|0,0);a=Uz(8)|0;c[a>>2]=7;c[a+4>>2]=0;Oa(10200,13084,5,48,15008,1,a|0,0);a=Uz(8)|0;c[a>>2]=12;c[a+4>>2]=0;Oa(10200,13093,4,80,14770,8,a|0,0);a=Uz(8)|0;c[a>>2]=9;c[a+4>>2]=0;Oa(10200,13104,5,96,15008,2,a|0,0);a=Uz(8)|0;c[a>>2]=10;c[a+4>>2]=0;Oa(10200,13122,5,128,15008,3,a|0,0);Ma(10240,10248,10264,0,14742,36,14745,0,14745,0,13142,14747,65);Na(10240,1,11492,14742,37,2);a=Uz(8)|0;c[a>>2]=25;c[a+4>>2]=0;Oa(10240,13168,3,11496,14765,13,a|0,0);a=Uz(8)|0;c[a>>2]=26;c[a+4>>2]=0;Oa(10240,13174,3,11508,14765,14,a|0,0);a=Uz(8)|0;c[a>>2]=15;c[a+4>>2]=0;Oa(10240,13189,4,160,14770,11,a|0,0);a=Uz(8)|0;c[a>>2]=27;c[a+4>>2]=0;Oa(10240,13199,3,11520,14765,16,a|0,0);a=Uz(8)|0;c[a>>2]=28;c[a+4>>2]=0;Oa(10240,13205,3,11520,14765,16,a|0,0);Ma(10280,10288,10304,0,14742,38,14745,0,14745,0,13209,14747,66);Na(10280,1,11532,14742,39,3);a=Uz(8)|0;c[a>>2]=40;c[a+4>>2]=0;Oa(10280,13168,2,11536,14761,29,a|0,0);a=Uz(8)|0;c[a>>2]=30;c[a+4>>2]=0;Oa(10280,13174,3,11544,14765,17,a|0,0);a=Uz(8)|0;c[a>>2]=18;c[a+4>>2]=0;Oa(10280,13189,4,176,14770,12,a|0,0);a=Uz(8)|0;c[a>>2]=31;c[a+4>>2]=0;Oa(10280,13199,3,11556,14765,19,a|0,0);a=Uz(8)|0;c[a>>2]=32;c[a+4>>2]=0;Oa(10280,13205,3,11556,14765,19,a|0,0);return;}function ad(a){a=a|0;Ma(10032,10056,10072,0,14742,41,14745,0,14745,0,a|0,14747,67);Na(10032,1,11384,14742,42,4);a=Uz(8)|0;c[a>>2]=29;c[a+4>>2]=0;Oa(10032,14524,3,11388,14750,2,a|0,0);a=Uz(8)|0;c[a>>2]=3;c[a+4>>2]=0;Oa(10032,14534,4,16,14755,4,a|0,0);a=Uz(8)|0;c[a>>2]=43;c[a+4>>2]=0;Oa(10032,14541,2,11400,14761,33,a|0,0);a=Uz(4)|0;c[a>>2]=4;Oa(10032,14546,3,11408,14765,20,a|0,0);a=Uz(4)|0;c[a>>2]=21;Oa(10032,12891,4,32,14770,13,a|0,0);return;}function bd(a){a=a|0;wa(a|0)|0;sA();}function cd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;if((a[21600]|0)==0?WD(21600)|0:0)c[5404]=bb(2,11084)|0;h=c[5404]|0;eb(c[e>>2]|0);c[g>>2]=c[e>>2];$a(h|0,b|0,d|0,g|0);l=f;return;}function dd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;if((a[21608]|0)==0?WD(21608)|0:0)c[5405]=bb(2,11112)|0;h=c[5405]|0;eb(c[e>>2]|0);c[g>>2]=c[e>>2];$a(h|0,b|0,d|0,g|0);l=f;return;}function ed(a){a=a|0;Vz(a);return;}function fd(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11128;c[b+4>>2]=c[a+4>>2];return b|0;}function gd(a,b){a=a|0;b=b|0;c[b>>2]=11128;c[b+4>>2]=c[a+4>>2];return;}function hd(a){a=a|0;return;}function id(a){a=a|0;Vz(a);return;}function jd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function kd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==13464?a+4|0:0)|0;}function ld(a){a=a|0;return 9872;}function md(a){a=a|0;Vz(a);return;}function nd(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11172;c[b+4>>2]=c[a+4>>2];return b|0;}function od(a,b){a=a|0;b=b|0;c[b>>2]=11172;c[b+4>>2]=c[a+4>>2];return;}function pd(a){a=a|0;return;}function qd(a){a=a|0;Vz(a);return;}function rd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function sd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==13666?a+4|0:0)|0;}function td(a){a=a|0;return 9896;}function ud(a){a=a|0;Vz(a);return;}function vd(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11216;c[b+4>>2]=c[a+4>>2];return b|0;}function wd(a,b){a=a|0;b=b|0;c[b>>2]=11216;c[b+4>>2]=c[a+4>>2];return;}function xd(a){a=a|0;return;}function yd(a){a=a|0;Vz(a);return;}function zd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function Ad(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==13859?a+4|0:0)|0;}function Bd(a){a=a|0;return 9920;}function Cd(a){a=a|0;return;}function Dd(a){a=a|0;Vz(a);return;}function Ed(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11260;c[b+4>>2]=c[a+4>>2];return b|0;}function Fd(a,b){a=a|0;b=b|0;c[b>>2]=11260;c[b+4>>2]=c[a+4>>2];return;}function Gd(a){a=a|0;return;}function Hd(a){a=a|0;Vz(a);return;}function Id(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function Jd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==14061?a+4|0:0)|0;}function Kd(a){a=a|0;return 9944;}function Ld(a){a=a|0;Vz(a);return;}function Md(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11304;c[b+4>>2]=c[a+4>>2];return b|0;}function Nd(a,b){a=a|0;b=b|0;c[b>>2]=11304;c[b+4>>2]=c[a+4>>2];return;}function Od(a){a=a|0;return;}function Pd(a){a=a|0;Vz(a);return;}function Qd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function Rd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==14267?a+4|0:0)|0;}function Sd(a){a=a|0;return 9968;}function Td(a){a=a|0;Vz(a);return;}function Ud(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11348;c[b+4>>2]=c[a+4>>2];return b|0;}function Vd(a,b){a=a|0;b=b|0;c[b>>2]=11348;c[b+4>>2]=c[a+4>>2];return;}function Wd(a){a=a|0;return;}function Xd(a){a=a|0;Vz(a);return;}function Yd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function Zd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==14464?a+4|0:0)|0;}function _d(a){a=a|0;return 9992;}function $d(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=b+4|0;f=c[e>>2]|0;g=b+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){a[f>>0]=a[d>>0]|0;c[e>>2]=(c[e>>2]|0)+1;return;}i=c[b>>2]|0;j=f-i|0;f=j+1|0;k=i;if((f|0)<0)Wz(b);l=h-i|0;h=l<<1;m=l>>>0<1073741823?h>>>0<f>>>0?f:h:2147483647;if(!m)n=0;else n=Uz(m)|0;h=n+j|0;a[h>>0]=a[d>>0]|0;if((j|0)>0)mE(n|0,k|0,j|0)|0;c[b>>2]=n;c[e>>2]=h+1;c[g>>2]=n+m;if(!i)return;Vz(k);return;}function ae(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+4|0;f=c[a>>2]|0;g=(c[e>>2]|0)-f|0;if(g>>>0<b>>>0){de(a,b-g|0,d);return;}if(g>>>0<=b>>>0)return;c[e>>2]=f+b;return;}function be(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;g=f;h=c[b>>2]|0;if(((c[b+4>>2]|0)-h|0)>>>0<=e>>>0){i=1;c[a>>2]=i;l=f;return;}c[g>>2]=d[h+e>>0];i=kb(10960,g|0)|0;c[a>>2]=i;l=f;return;}function ce(b,d,e){b=b|0;d=d|0;e=e|0;a[(c[b>>2]|0)+d>>0]=a[e>>0]|0;return 1;}function de(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=b+8|0;g=c[f>>2]|0;h=b+4|0;i=c[h>>2]|0;if((g-i|0)>>>0>=d>>>0){j=d;k=i;do{a[k>>0]=a[e>>0]|0;k=(c[h>>2]|0)+1|0;c[h>>2]=k;j=j+-1|0;}while((j|0)!=0);return;}j=c[b>>2]|0;k=i-j|0;l=k+d|0;if((l|0)<0)Wz(b);m=g-j|0;g=m<<1;n=m>>>0<1073741823?g>>>0<l>>>0?l:g:2147483647;if(!n)o=0;else o=Uz(n)|0;g=o+k|0;k=o+n|0;n=i+d-j|0;j=d;d=g;while(1){a[d>>0]=a[e>>0]|0;j=j+-1|0;if(!j)break;else d=d+1|0;}d=c[b>>2]|0;j=(c[h>>2]|0)-d|0;e=g+(0-j)|0;if((j|0)>0)mE(e|0,d|0,j|0)|0;c[b>>2]=e;c[h>>2]=o+n;c[f>>2]=k;if(!d)return;Vz(d);return;}function ee(a){a=a|0;return 10032;}function fe(a){a=a|0;var b=0;if(!a)return;b=c[a>>2]|0;if(b|0){c[a+4>>2]=b;Vz(b);}Vz(a);return;}function ge(){var a=0;a=Uz(12)|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return a|0;}function he(a){a=a|0;return oc[a&7]()|0;}function ie(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f;h=c[b>>2]|0;i=c[b+4>>2]|0;b=d+(i>>1)|0;if(!(i&1))j=h;else j=c[(c[b>>2]|0)+h>>2]|0;a[g>>0]=e;xc[j&31](b,g);l=f;return;}function je(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+16|0;h=g;i=c[b>>2]|0;j=c[b+4>>2]|0;b=d+(j>>1)|0;if(!(j&1))k=i;else k=c[(c[b>>2]|0)+i>>2]|0;a[h>>0]=f;yc[k&7](b,e,h);l=g;return;}function ke(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;e=c[a+4>>2]|0;a=b+(e>>1)|0;if(!(e&1))f=d;else f=c[(c[a>>2]|0)+d>>2]|0;return pc[f&63](a)|0;}function le(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;yc[c[a>>2]&7](f,b,d);eb(c[f>>2]|0);d=c[f>>2]|0;ab(d|0);l=e;return d|0;}function me(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g;i=c[b>>2]|0;a[h>>0]=f;f=rc[i&31](d,e,h)|0;l=g;return f|0;}function ne(a){a=a|0;vc[a&3]();return;}function oe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xc[a&31](b,f);ab(c[f>>2]|0);l=e;return;}function pe(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;xc[a&31](e,b);eb(c[e>>2]|0);b=c[e>>2]|0;ab(b|0);l=d;return b|0;}function qe(a){a=a|0;return 10096;}function re(a){a=a|0;if(!a)return;se(a);Vz(a);return;}function se(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b;e=c[a>>2]|0;do{if(e){c[d>>2]=e;f=a+24|0;g=c[f>>2]|0;if(!g){h=va(4)|0;c[h>>2]=12636;ya(h|0,10800,50);}else{xc[c[(c[g>>2]|0)+24>>2]&31](g,d);c[a>>2]=0;i=f;break;}}else i=a+24|0;}while(0);d=c[i>>2]|0;if((a+8|0)==(d|0)){wc[c[(c[d>>2]|0)+16>>2]&127](d);l=b;return;}if(!d){l=b;return;}wc[c[(c[d>>2]|0)+20>>2]&127](d);l=b;return;}function te(a){a=a|0;var b=0;b=c[a+16>>2]|0;if((a|0)==(b|0)){wc[c[(c[b>>2]|0)+16>>2]&127](b);return;}if(!b)return;wc[c[(c[b>>2]|0)+20>>2]&127](b);return;}function ue(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;b=qc[a&63](f,d)|0;ab(c[f>>2]|0);l=e;return b|0;}function ve(a){a=a|0;return 10152;}function we(a){a=a|0;if(!a)return;xe(a);Vz(a);return;}function xe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b;e=c[a>>2]|0;do{if(e){c[d>>2]=e;f=a+24|0;g=c[f>>2]|0;if(!g){h=va(4)|0;c[h>>2]=12636;ya(h|0,10800,50);}else{xc[c[(c[g>>2]|0)+24>>2]&31](g,d);c[a>>2]=0;i=f;break;}}else i=a+24|0;}while(0);d=c[i>>2]|0;if((a+8|0)==(d|0)){wc[c[(c[d>>2]|0)+16>>2]&127](d);l=b;return;}if(!d){l=b;return;}wc[c[(c[d>>2]|0)+20>>2]&127](d);l=b;return;}function ye(a){a=a|0;var b=0;b=c[a+16>>2]|0;if((a|0)==(b|0)){wc[c[(c[b>>2]|0)+16>>2]&127](b);return;}if(!b)return;wc[c[(c[b>>2]|0)+20>>2]&127](b);return;}function ze(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=pc[a&63](e)|0;ab(c[e>>2]|0);l=d;return b|0;}function Ae(a){a=a|0;return 10200;}function Be(a){a=a|0;if(!a)return;Vz(a);return;}function Ce(){return Uz(1)|0;}function De(a){a=a|0;return oc[a&7]()|0;}function Ee(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Fe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Ge(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;return sc[i&15](a,d,e,f)|0;}function He(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=c[a>>2]|0;g=c[a+4>>2]|0;a=b+(g>>1)|0;if(!(g&1))h=f;else h=c[(c[a>>2]|0)+f>>2]|0;return rc[h&31](a,d,e)|0;}function Ie(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;return sc[i&15](a,d,e,f)|0;}function Je(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;return sc[i&15](a,d,e,f)|0;}function Ke(a){a=a|0;return 10240;}function Le(a){a=a|0;if(!a)return;$f(a);Vz(a);return;}function Me(){var a=0;a=Uz(36)|0;_f(a);return a|0;}function Ne(a){a=a|0;return oc[a&7]()|0;}function Oe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Pe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Qe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;g=f+4|0;h=f;i=c[a>>2]|0;j=c[a+4>>2]|0;a=b+(j>>1)|0;if(!(j&1))k=i;else k=c[(c[a>>2]|0)+i>>2]|0;c[g>>2]=d;c[h>>2]=e;e=rc[k&31](a,g,h)|0;ab(c[h>>2]|0);ab(c[g>>2]|0);l=f;return e|0;}function Re(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;c[f>>2]=d;d=qc[i&63](a,f)|0;ab(c[f>>2]|0);l=e;return d|0;}function Se(a){a=a|0;return 10280;}function Te(a){a=a|0;if(!a)return;Ag(a);Vz(a);return;}function Ue(){var a=0;a=Uz(36)|0;zg(a);return a|0;}function Ve(a){a=a|0;return oc[a&7]()|0;}function We(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;e=c[a+4>>2]|0;a=b+(e>>1)|0;if(!(e&1))f=d;else f=c[(c[a>>2]|0)+d>>2]|0;return pc[f&63](a)|0;}function Xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Ye(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;g=f+4|0;h=f;i=c[a>>2]|0;j=c[a+4>>2]|0;a=b+(j>>1)|0;if(!(j&1))k=i;else k=c[(c[a>>2]|0)+i>>2]|0;c[g>>2]=d;c[h>>2]=e;e=rc[k&31](a,g,h)|0;ab(c[h>>2]|0);ab(c[g>>2]|0);l=f;return e|0;}function Ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;c[f>>2]=d;d=qc[i&63](a,f)|0;ab(c[f>>2]|0);l=e;return d|0;}function _e(){$c(0);return;}function $e(a,b){a=a|0;b=b|0;a=lj(b)|0;b=(Ph(a)|0)==0;return(b?a>>>0>2147483646?-2:a:-1)|0;}function af(a,b){a=a|0;b=b|0;var d=0;a=c[b>>2]|0;d=wq(a,(c[b+4>>2]|0)-a|0)|0;a=(Ph(d)|0)==0;return(a?d>>>0>2147483646?-2:d:-1)|0;}function bf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;a=c[b>>2]|0;f=c[d>>2]|0;g=Go(a,(c[b+4>>2]|0)-a|0,f,(c[d+4>>2]|0)-f|0,e)|0;e=(Ph(g)|0)==0;return(e?g>>>0>2147483646?-2:g:-1)|0;}function cf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;a=c[b>>2]|0;e=c[d>>2]|0;f=ux(a,(c[b+4>>2]|0)-a|0,e,(c[d+4>>2]|0)-e|0)|0;e=(Ph(f)|0)==0;return(e?f>>>0>2147483646?-2:f:-1)|0;}function df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a=l;l=l+32|0;f=a;g=mj()|0;c[f>>2]=g;h=f+8|0;c[f+24>>2]=h;c[h>>2]=11576;c[f+12>>2]=68;if(!g){i=-3;ff(f);l=a;return i|0;}h=c[b>>2]|0;j=c[d>>2]|0;k=Lo(g,h,(c[b+4>>2]|0)-h|0,j,(c[d+4>>2]|0)-j|0,c[e>>2]|0)|0;e=(Ph(k)|0)==0;i=e?k>>>0>2147483646?-2:k:-1;ff(f);l=a;return i|0;}function ef(a){a=a|0;qj(a)|0;return;}function ff(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b;e=c[a>>2]|0;do{if(e){c[d>>2]=e;f=a+24|0;g=c[f>>2]|0;if(!g){h=va(4)|0;c[h>>2]=12636;ya(h|0,10800,50);}else{xc[c[(c[g>>2]|0)+24>>2]&31](g,d);c[a>>2]=0;i=f;break;}}else i=a+24|0;}while(0);d=c[i>>2]|0;if((a+8|0)==(d|0)){wc[c[(c[d>>2]|0)+16>>2]&127](d);l=b;return;}if(!d){l=b;return;}wc[c[(c[d>>2]|0)+20>>2]&127](d);l=b;return;}function gf(a){a=a|0;var b=0;b=c[a+16>>2]|0;if((a|0)==(b|0)){wc[c[(c[b>>2]|0)+16>>2]&127](b);return;}if(!b)return;wc[c[(c[b>>2]|0)+20>>2]&127](b);return;}function hf(a){a=a|0;return;}function jf(a){a=a|0;Vz(a);return;}function kf(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11576;c[b+4>>2]=c[a+4>>2];return b|0;}function lf(a,b){a=a|0;b=b|0;c[b>>2]=11576;c[b+4>>2]=c[a+4>>2];return;}function mf(a){a=a|0;return;}function nf(a){a=a|0;Vz(a);return;}function of(a,b){a=a|0;b=b|0;wc[c[a+4>>2]&127](c[b>>2]|0);return;}function pf(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15195?a+4|0:0)|0;}function qf(a){a=a|0;return 10336;}function rf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a=l;l=l+32|0;f=a;g=Wp()|0;c[f>>2]=g;h=f+8|0;c[f+24>>2]=h;c[h>>2]=11620;c[f+12>>2]=69;if(!g){i=-4;tf(f);l=a;return i|0;}h=c[b>>2]|0;j=c[d>>2]|0;k=Dx(g,h,(c[b+4>>2]|0)-h|0,j,(c[d+4>>2]|0)-j|0,c[e>>2]|0)|0;e=(Ph(k)|0)==0;i=e?k>>>0>2147483646?-2:k:-1;tf(f);l=a;return i|0;}function sf(a){a=a|0;Xp(a)|0;return;}function tf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b;e=c[a>>2]|0;do{if(e){c[d>>2]=e;f=a+24|0;g=c[f>>2]|0;if(!g){h=va(4)|0;c[h>>2]=12636;ya(h|0,10800,50);}else{xc[c[(c[g>>2]|0)+24>>2]&31](g,d);c[a>>2]=0;i=f;break;}}else i=a+24|0;}while(0);d=c[i>>2]|0;if((a+8|0)==(d|0)){wc[c[(c[d>>2]|0)+16>>2]&127](d);l=b;return;}if(!d){l=b;return;}wc[c[(c[d>>2]|0)+20>>2]&127](d);l=b;return;}function uf(a){a=a|0;var b=0;b=c[a+16>>2]|0;if((a|0)==(b|0)){wc[c[(c[b>>2]|0)+16>>2]&127](b);return;}if(!b)return;wc[c[(c[b>>2]|0)+20>>2]&127](b);return;}function vf(a){a=a|0;return;}function wf(a){a=a|0;Vz(a);return;}function xf(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11620;c[b+4>>2]=c[a+4>>2];return b|0;}function yf(a,b){a=a|0;b=b|0;c[b>>2]=11620;c[b+4>>2]=c[a+4>>2];return;}function zf(a){a=a|0;return;}function Af(a){a=a|0;Vz(a);return;}function Bf(a,b){a=a|0;b=b|0;wc[c[a+4>>2]&127](c[b>>2]|0);return;}function Cf(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15349?a+4|0:0)|0;}function Df(a){a=a|0;return 10384;}function Ef(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b>>2]|0;c[a>>2]=Ho(e,(c[b+4>>2]|0)-e|0,d)|0;d=a+8|0;c[a+24>>2]=d;c[d>>2]=11664;c[a+12>>2]=70;return;}function Ff(a){a=a|0;rj(a)|0;return;}function Gf(a){a=a|0;return;}function Hf(a){a=a|0;Vz(a);return;}function If(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11664;c[b+4>>2]=c[a+4>>2];return b|0;}function Jf(a,b){a=a|0;b=b|0;c[b>>2]=11664;c[b+4>>2]=c[a+4>>2];return;}function Kf(a){a=a|0;return;}function Lf(a){a=a|0;Vz(a);return;}function Mf(a,b){a=a|0;b=b|0;wc[c[a+4>>2]&127](c[b>>2]|0);return;}function Nf(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15503?a+4|0:0)|0;}function Of(a){a=a|0;return 10432;}function Pf(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=Cx(d,(c[b+4>>2]|0)-d|0)|0;d=a+8|0;c[a+24>>2]=d;c[d>>2]=11708;c[a+12>>2]=71;return;}function Qf(a){a=a|0;Yp(a)|0;return;}function Rf(a){a=a|0;return;}function Sf(a){a=a|0;Vz(a);return;}function Tf(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11708;c[b+4>>2]=c[a+4>>2];return b|0;}function Uf(a,b){a=a|0;b=b|0;c[b>>2]=11708;c[b+4>>2]=c[a+4>>2];return;}function Vf(a){a=a|0;return;}function Wf(a){a=a|0;Vz(a);return;}function Xf(a,b){a=a|0;b=b|0;wc[c[a+4>>2]&127](c[b>>2]|0);return;}function Yf(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15661?a+4|0:0)|0;}function Zf(a){a=a|0;return 10480;}function _f(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=44;b=a+8|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;return;}function $f(a){a=a|0;var b=0;b=c[a+24>>2]|0;if(b|0){c[a+28>>2]=b;Vz(b);}b=c[a+12>>2]|0;if(b|0){c[a+16>>2]=b;Vz(b);}b=c[a>>2]|0;c[a>>2]=0;if(!b)return;pc[c[a+4>>2]&63](b)|0;return;}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11752;c[e+4>>2]=b;c[f>>2]=e;b=bg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function bg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+16|0;e=d;if(c[a>>2]|0){f=1;l=d;return f|0;}g=Mo()|0;if(!g){f=0;l=d;return f|0;}c[e>>2]=g;h=c[b+16>>2]|0;if(!h){b=va(4)|0;c[b>>2]=12636;ya(b|0,10800,50);}if(Ph(qc[c[(c[h>>2]|0)+24>>2]&63](h,e)|0)|0){Oo(g)|0;f=0;l=d;return f|0;}e=c[a>>2]|0;c[a>>2]=g;g=a+4|0;if(e|0)pc[c[g>>2]&63](e)|0;c[g>>2]=44;g=Po()|0;e=a+12|0;h=a+20|0;b=c[e>>2]|0;i=b;if(((c[h>>2]|0)-b|0)>>>0<g>>>0){j=a+16|0;k=(c[j>>2]|0)-b|0;m=Uz(g)|0;if((k|0)>0)mE(m|0,i|0,k|0)|0;c[e>>2]=m;c[j>>2]=m+k;c[h>>2]=m+g;if(b|0)Vz(i);}cg(a+24|0,Qo()|0);c[a+8>>2]=(c[h>>2]|0)-(c[e>>2]|0);f=1;l=d;return f|0;}function cg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=b+4|0;f=c[e>>2]|0;g=c[b>>2]|0;h=f-g|0;i=g;if(h>>>0>=d>>>0){if(h>>>0<=d>>>0)return;c[e>>2]=i+d;return;}j=d-h|0;k=b+8|0;l=c[k>>2]|0;if((l-f|0)>>>0>=j>>>0){m=j;n=f;do{a[n>>0]=0;n=(c[e>>2]|0)+1|0;c[e>>2]=n;m=m+-1|0;}while((m|0)!=0);return;}if((d|0)<0)Wz(b);m=l-g|0;l=m<<1;n=m>>>0<1073741823?l>>>0<d>>>0?d:l:2147483647;if(!n)o=0;else o=Uz(n)|0;oE(o+h|0,0,j|0)|0;if((h|0)>0)mE(o|0,i|0,h|0)|0;c[b>>2]=o;c[e>>2]=o+d;c[k>>2]=o+n;if(!g)return;Vz(i);return;}function dg(a){a=a|0;return;}function eg(a){a=a|0;Vz(a);return;}function fg(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11752;c[b+4>>2]=c[a+4>>2];return b|0;}function gg(a,b){a=a|0;b=b|0;c[b>>2]=11752;c[b+4>>2]=c[a+4>>2];return;}function hg(a){a=a|0;return;}function ig(a){a=a|0;Vz(a);return;}function jg(a,b){a=a|0;b=b|0;return Wo(c[b>>2]|0,c[a+4>>2]|0)|0;}function kg(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15819?a+4|0:0)|0;}function lg(a){a=a|0;return 10528;}function mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11796;c[e+4>>2]=b;c[f>>2]=e;b=bg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function ng(a){a=a|0;Vz(a);return;}function og(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11796;c[b+4>>2]=c[a+4>>2];return b|0;}function pg(a,b){a=a|0;b=b|0;c[b>>2]=11796;c[b+4>>2]=c[a+4>>2];return;}function qg(a){a=a|0;return;}function rg(a){a=a|0;Vz(a);return;}function sg(a,b){a=a|0;b=b|0;return Uo(c[b>>2]|0,c[c[a+4>>2]>>2]|0)|0;}function tg(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==16003?a+4|0:0)|0;}function ug(a){a=a|0;return 10560;}function vg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!(c[b>>2]|0)){f=0;return f|0;}g=d+4|0;h=c[d>>2]|0;i=(c[g>>2]|0)-h|0;if(!i){f=1;return f|0;}j=b+12|0;k=b+20|0;l=b+16|0;m=b+8|0;n=0;o=h;h=i;a:while(1){i=c[k>>2]|0;p=c[j>>2]|0;q=c[l>>2]|0;r=p-q+(i-p)|0;s=h-n|0;t=s>>>0<r>>>0?s:r;s=o+n|0;u=s+t|0;n=t+n|0;if(!t){v=p;w=q;}else{p=q;q=i;i=s;while(1){if((p|0)==(q|0)){s=c[j>>2]|0;t=q-s|0;x=t+1|0;y=s;if((x|0)<0){z=9;break a;}A=t<<1;B=t>>>0<1073741823?A>>>0<x>>>0?x:A:2147483647;if(!B)C=0;else C=Uz(B)|0;A=C+t|0;a[A>>0]=a[i>>0]|0;if((t|0)>0)mE(C|0,y|0,t|0)|0;c[j>>2]=C;c[l>>2]=A+1;c[k>>2]=C+B;if(s|0)Vz(y);}else{a[p>>0]=a[i>>0]|0;c[l>>2]=(c[l>>2]|0)+1;}y=i+1|0;if((y|0)==(u|0))break;p=c[l>>2]|0;q=c[k>>2]|0;i=y;}v=c[j>>2]|0;w=c[l>>2]|0;}if(((r|0)==0?1:(w-v|0)>>>0>=(c[m>>2]|0)>>>0)?!(wg(b,e)|0):0){f=0;z=22;break;}o=c[d>>2]|0;h=(c[g>>2]|0)-o|0;if(h>>>0<=n>>>0){f=1;z=22;break;}}if((z|0)==9)Wz(j);else if((z|0)==22)return f|0;return 0;}function wg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=l;l=l+32|0;e=d+12|0;f=d;g=a+12|0;h=c[g>>2]|0;i=a+16|0;j=c[i>>2]|0;k=h;if((h|0)==(j|0)){m=1;l=d;return m|0;}c[e>>2]=h;h=e+4|0;n=j-k|0;c[h>>2]=n;j=e+8|0;c[j>>2]=0;do{if(n){o=a+24|0;p=a+32|0;q=f+4|0;r=a+28|0;s=f+8|0;t=a+8|0;u=b+16|0;while(1){cg(o,(c[p>>2]|0)-(c[o>>2]|0)|0);v=c[o>>2]|0;c[f>>2]=v;c[q>>2]=(c[r>>2]|0)-v;c[s>>2]=0;v=Zo(c[a>>2]|0,f,e)|0;c[t>>2]=v;if(Ph(v)|0){w=8;break;}cg(o,c[s>>2]|0);v=c[u>>2]|0;if(!v){w=6;break;}xc[c[(c[v>>2]|0)+24>>2]&31](v,o);if((c[j>>2]|0)>>>0>=(c[h>>2]|0)>>>0){w=9;break;}}if((w|0)==6){o=va(4)|0;c[o>>2]=12636;ya(o|0,10800,50);}else if((w|0)==8){x=0;break;}else if((w|0)==9){y=c[g>>2]|0;w=10;break;}}else{y=k;w=10;}}while(0);if((w|0)==10){c[i>>2]=y;x=1;}m=x;l=d;return m|0;}function xg(a,b){a=a|0;b=b|0;return wg(a,b)|0;}function yg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+16|0;e=d;if(!(c[a>>2]|0)){f=1;l=d;return f|0;}if((c[a+12>>2]|0)!=(c[a+16>>2]|0)?!(wg(a,b)|0):0)g=0;else h=4;do{if((h|0)==4){i=a+24|0;cg(i,(c[a+32>>2]|0)-(c[i>>2]|0)|0);j=c[i>>2]|0;c[e>>2]=j;c[e+4>>2]=(c[a+28>>2]|0)-j;j=e+8|0;c[j>>2]=0;if(_o(c[a>>2]|0,e)|0){f=0;l=d;return f|0;}cg(i,c[j>>2]|0);j=c[b+16>>2]|0;if(!j){k=va(4)|0;c[k>>2]=12636;ya(k|0,10800,50);}else{xc[c[(c[j>>2]|0)+24>>2]&31](j,i);g=1;break;}}}while(0);b=c[a>>2]|0;c[a>>2]=0;if(!b){f=g;l=d;return f|0;}pc[c[a+4>>2]&63](b)|0;f=g;l=d;return f|0;}function zg(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=45;b=a+8|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;return;}function Ag(a){a=a|0;var b=0;b=c[a+24>>2]|0;if(b|0){c[a+28>>2]=b;Vz(b);}b=c[a+12>>2]|0;if(b|0){c[a+16>>2]=b;Vz(b);}b=c[a>>2]|0;c[a>>2]=0;if(!b)return;pc[c[a+4>>2]&63](b)|0;return;}function Bg(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+32|0;d=b;e=d+16|0;c[d>>2]=11840;c[e>>2]=d;f=Cg(a,d)|0;a=c[e>>2]|0;if((d|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=b;return f|0;}if(!a){l=b;return f|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=b;return f|0;}function Cg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;d=l;l=l+16|0;e=d;if(c[a>>2]|0){f=1;l=d;return f|0;}g=Ex()|0;if(!g){f=0;l=d;return f|0;}c[e>>2]=g;h=c[b+16>>2]|0;if(!h){b=va(4)|0;c[b>>2]=12636;ya(b|0,10800,50);}b=qc[c[(c[h>>2]|0)+24>>2]&63](h,e)|0;if(Ph(b)|0){Gx(g)|0;f=0;l=d;return f|0;}e=c[a>>2]|0;c[a>>2]=g;g=a+4|0;if(e|0)pc[c[g>>2]&63](e)|0;c[g>>2]=45;g=Hx()|0;e=a+12|0;h=a+20|0;i=c[e>>2]|0;j=i;if(((c[h>>2]|0)-i|0)>>>0<g>>>0){k=a+16|0;m=(c[k>>2]|0)-i|0;n=Uz(g)|0;if((m|0)>0)mE(n|0,j|0,m|0)|0;c[e>>2]=n;c[k>>2]=n+m;c[h>>2]=n+g;if(i|0)Vz(j);}cg(a+24|0,Ix()|0);c[a+8>>2]=b;f=1;l=d;return f|0;}function Dg(a){a=a|0;return;}function Eg(a){a=a|0;Vz(a);return;}function Fg(a){a=a|0;a=Uz(8)|0;c[a>>2]=11840;return a|0;}function Gg(a,b){a=a|0;b=b|0;c[b>>2]=11840;return;}function Hg(a){a=a|0;return;}function Ig(a){a=a|0;Vz(a);return;}function Jg(a,b){a=a|0;b=b|0;return Mx(c[b>>2]|0)|0;}function Kg(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==16184?a+4|0:0)|0;}function Lg(a){a=a|0;return 10584;}function Mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11884;c[e+4>>2]=b;c[f>>2]=e;b=Cg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function Ng(a){a=a|0;Vz(a);return;}function Og(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11884;c[b+4>>2]=c[a+4>>2];return b|0;}function Pg(a,b){a=a|0;b=b|0;c[b>>2]=11884;c[b+4>>2]=c[a+4>>2];return;}function Qg(a){a=a|0;return;}function Rg(a){a=a|0;Vz(a);return;}function Sg(a,b){a=a|0;b=b|0;return Nx(c[b>>2]|0,c[c[a+4>>2]>>2]|0)|0;}function Tg(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==16372?a+4|0:0)|0;}function Ug(a){a=a|0;return 10616;}function Vg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!(c[b>>2]|0)){f=0;return f|0;}g=d+4|0;h=c[d>>2]|0;i=(c[g>>2]|0)-h|0;if(!i){f=1;return f|0;}j=b+12|0;k=b+20|0;l=b+16|0;m=b+8|0;n=0;o=h;h=i;a:while(1){i=c[k>>2]|0;p=c[j>>2]|0;q=c[l>>2]|0;r=p-q+(i-p)|0;s=h-n|0;t=s>>>0<r>>>0?s:r;s=o+n|0;u=s+t|0;n=t+n|0;if(!t){v=p;w=q;}else{p=q;q=i;i=s;while(1){if((p|0)==(q|0)){s=c[j>>2]|0;t=q-s|0;x=t+1|0;y=s;if((x|0)<0){z=9;break a;}A=t<<1;B=t>>>0<1073741823?A>>>0<x>>>0?x:A:2147483647;if(!B)C=0;else C=Uz(B)|0;A=C+t|0;a[A>>0]=a[i>>0]|0;if((t|0)>0)mE(C|0,y|0,t|0)|0;c[j>>2]=C;c[l>>2]=A+1;c[k>>2]=C+B;if(s|0)Vz(y);}else{a[p>>0]=a[i>>0]|0;c[l>>2]=(c[l>>2]|0)+1;}y=i+1|0;if((y|0)==(u|0))break;p=c[l>>2]|0;q=c[k>>2]|0;i=y;}v=c[j>>2]|0;w=c[l>>2]|0;}if(((r|0)==0?1:(w-v|0)>>>0>=(c[m>>2]|0)>>>0)?!(Wg(b,e)|0):0){f=0;z=22;break;}o=c[d>>2]|0;h=(c[g>>2]|0)-o|0;if(h>>>0<=n>>>0){f=1;z=22;break;}}if((z|0)==9)Wz(j);else if((z|0)==22)return f|0;return 0;}function Wg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=l;l=l+32|0;e=d+12|0;f=d;g=a+12|0;h=c[g>>2]|0;i=a+16|0;j=c[i>>2]|0;k=h;if((h|0)==(j|0)){m=1;l=d;return m|0;}c[e>>2]=h;h=e+4|0;n=j-k|0;c[h>>2]=n;j=e+8|0;c[j>>2]=0;do{if(n){o=a+24|0;p=a+32|0;q=f+4|0;r=a+28|0;s=f+8|0;t=a+8|0;u=b+16|0;while(1){cg(o,(c[p>>2]|0)-(c[o>>2]|0)|0);v=c[o>>2]|0;c[f>>2]=v;c[q>>2]=(c[r>>2]|0)-v;c[s>>2]=0;v=Qx(c[a>>2]|0,f,e)|0;c[t>>2]=v;if(Ph(v)|0){w=8;break;}cg(o,c[s>>2]|0);v=c[u>>2]|0;if(!v){w=6;break;}xc[c[(c[v>>2]|0)+24>>2]&31](v,o);if((c[j>>2]|0)>>>0>=(c[h>>2]|0)>>>0){w=9;break;}}if((w|0)==6){o=va(4)|0;c[o>>2]=12636;ya(o|0,10800,50);}else if((w|0)==8){x=0;break;}else if((w|0)==9){y=c[g>>2]|0;w=10;break;}}else{y=k;w=10;}}while(0);if((w|0)==10){c[i>>2]=y;x=1;}m=x;l=d;return m|0;}function Xg(a,b){a=a|0;b=b|0;return Wg(a,b)|0;}function Yg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a>>2]|0;if(!d){e=1;return e|0;}if((c[a+12>>2]|0)!=(c[a+16>>2]|0)){f=Wg(a,b)|0;b=c[a>>2]|0;c[a>>2]=0;if(!b){e=f;return e|0;}else{g=f;h=b;}}else{c[a>>2]=0;g=1;h=d;}pc[c[a+4>>2]&63](h)|0;e=g;return e|0;}function Zg(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=_g(c[d>>2]|0)|0;l=b;return a|0;}function _g(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function $g(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=_g(c[d>>2]|0)|0;l=b;return a|0;}function ah(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+72|0;j=h+68|0;k=h+64|0;m=h+60|0;n=h+56|0;o=h+52|0;p=h+48|0;q=h+44|0;r=h+40|0;s=h+36|0;t=h+32|0;u=h+28|0;v=h+24|0;w=h+20|0;x=h+16|0;y=h+12|0;z=h+8|0;A=h+4|0;B=h;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=bh(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if(!(((c[t>>2]|0)>1?(c[x>>2]|0)>>>0<=(c[c[k>>2]>>2]|0)>>>0:0)|0))break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=bh(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=18;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;o=c[x>>2]|0;c[x>>2]=o+1;b[m+(o<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;o=bh(c[r>>2]|0)|0;c[v>>2]=o>>>(c[w>>2]|0);}}while(0);c[A>>2]=(c[u>>2]<<1)-1-(c[t>>2]|0);o=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(c[A>>2]|0)>>>0){c[B>>2]=o&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{c[B>>2]=o&(m<<1)-1;if((c[B>>2]|0)>=(c[u>>2]|0))c[B>>2]=(c[B>>2]|0)-(c[A>>2]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}c[B>>2]=(c[B>>2]|0)+-1;m=c[B>>2]|0;c[t>>2]=(c[t>>2]|0)-((c[B>>2]|0)<0?0-m|0:m);m=c[B>>2]&65535;o=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[o+(n<<1)>>1]=m;c[y>>2]=((c[B>>2]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=bh(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==18){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-20;C=c[i>>2]|0;l=h;return C|0;}if((c[w>>2]|0)>32){c[i>>2]=-20;C=c[i>>2]|0;l=h;return C|0;}else{c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function bh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(ch()|0)!=0;f=dh(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=eh(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function ch(){return d[11936]|0|0;}function dh(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function eh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function fh(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;k=l;l=l+336|0;m=k+332|0;n=k+328|0;o=k+324|0;p=k+320|0;q=k+316|0;r=k+312|0;s=k+308|0;t=k+304|0;u=k+300|0;v=k+296|0;w=k+292|0;x=k+288|0;y=k+284|0;z=k;A=k+280|0;B=k+276|0;C=k+272|0;D=k+268|0;E=k+264|0;F=k+260|0;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[v>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;G=c[m>>2]|0;l=k;return G|0;}c[w>>2]=d[c[v>>2]>>0];s=c[w>>2]|0;a:do{if((c[w>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;G=c[m>>2]|0;l=k;return G|0;}c[x>>2]=gh(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[v>>2]|0)+1|0,c[w>>2]|0,z,6)|0;if(Zg(c[x>>2]|0)|0){c[m>>2]=c[x>>2];G=c[m>>2]|0;l=k;return G|0;}}else{c[x>>2]=s-127;c[w>>2]=(((c[x>>2]|0)+1|0)>>>0)/2|0;if(((c[w>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;G=c[m>>2]|0;l=k;return G|0;}if((c[x>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}c[v>>2]=(c[v>>2]|0)+1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[y>>2]|0)+1)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)&15;c[y>>2]=(c[y>>2]|0)+2;}}}while(0);y=c[p>>2]|0;v=y+52|0;do{c[y>>2]=0;y=y+4|0;}while((y|0)<(v|0));c[u>>2]=0;c[A>>2]=0;while(1){if((c[A>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[A>>2]|0)>>0]|0|0)>=12){H=18;break;}y=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[A>>2]|0)>>0]|0)<<2)|0;c[y>>2]=(c[y>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[A>>2]|0)>>0]|0)>>1);c[A>>2]=(c[A>>2]|0)+1;}if((H|0)==18){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}c[B>>2]=(hh(c[u>>2]|0)|0)+1;if((c[B>>2]|0)>>>0>12){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}c[c[r>>2]>>2]=c[B>>2];c[C>>2]=1<<c[B>>2];c[D>>2]=(c[C>>2]|0)-(c[u>>2]|0);c[E>>2]=1<<(hh(c[D>>2]|0)|0);c[F>>2]=(hh(c[D>>2]|0)|0)+1;if((c[E>>2]|0)!=(c[D>>2]|0)){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}a[(c[n>>2]|0)+(c[x>>2]|0)>>0]=c[F>>2];n=(c[p>>2]|0)+(c[F>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[x>>2]|0)+1;c[m>>2]=(c[w>>2]|0)+1;G=c[m>>2]|0;l=k;return G|0;}c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}function gh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+576|0;i=h+560|0;j=h+556|0;k=h+552|0;m=h+548|0;n=h+544|0;o=h+540|0;p=h+536|0;q=h+532|0;r=h+528|0;s=h;t=h+524|0;u=h+520|0;v=h+516|0;w=h+512|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[m>>2];c[r>>2]=c[q>>2];c[u>>2]=255;c[v>>2]=ah(s,u,t,c[q>>2]|0,c[n>>2]|0)|0;if(ih(c[v>>2]|0)|0){c[i>>2]=c[v>>2];x=c[i>>2]|0;l=h;return x|0;}if((c[t>>2]|0)>>>0>(c[p>>2]|0)>>>0){c[i>>2]=-44;x=c[i>>2]|0;l=h;return x|0;}c[r>>2]=(c[r>>2]|0)+(c[v>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[v>>2]|0);c[w>>2]=jh(c[o>>2]|0,s,c[u>>2]|0,c[t>>2]|0)|0;if(ih(c[w>>2]|0)|0){c[i>>2]=c[w>>2];x=c[i>>2]|0;l=h;return x|0;}else{c[i>>2]=kh(c[j>>2]|0,c[k>>2]|0,c[r>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;x=c[i>>2]|0;l=h;return x|0;}return 0;}function hh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function ih(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function jh(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;i=l;l=l+608|0;j=i+580|0;k=i+576|0;m=i+572|0;n=i+568|0;o=i+564|0;p=i+560|0;q=i+556|0;r=i;s=i+552|0;t=i+548|0;u=i+544|0;v=i+588|0;w=i+584|0;x=i+540|0;y=i+536|0;z=i+532|0;A=i+528|0;B=i+524|0;C=i+520|0;D=i+516|0;E=i+592|0;F=i+512|0;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=(c[k>>2]|0)+4;c[q>>2]=c[p>>2];c[s>>2]=(c[n>>2]|0)+1;c[t>>2]=1<<c[o>>2];c[u>>2]=(c[t>>2]|0)-1;if((c[n>>2]|0)>>>0>255){c[j>>2]=-46;G=c[j>>2]|0;l=i;return G|0;}if((c[o>>2]|0)>>>0>12){c[j>>2]=-44;G=c[j>>2]|0;l=i;return G|0;}b[v>>1]=c[o>>2];b[v+2>>1]=1;b[w>>1]=1<<(c[o>>2]|0)-1;c[x>>2]=0;while(1){if((c[x>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;if((b[(c[m>>2]|0)+(c[x>>2]<<1)>>1]|0)==-1){n=c[x>>2]&255;p=c[q>>2]|0;h=c[u>>2]|0;c[u>>2]=h+-1;a[p+(h<<2)+2>>0]=n;b[r+(c[x>>2]<<1)>>1]=1;}else{if((b[(c[m>>2]|0)+(c[x>>2]<<1)>>1]|0)>=(b[w>>1]|0))b[v+2>>1]=0;b[r+(c[x>>2]<<1)>>1]=b[(c[m>>2]|0)+(c[x>>2]<<1)>>1]|0;}c[x>>2]=(c[x>>2]|0)+1;}x=c[k>>2]|0;b[x>>1]=b[v>>1]|0;b[x+2>>1]=b[v+2>>1]|0;c[y>>2]=(c[t>>2]|0)-1;c[z>>2]=((c[t>>2]|0)>>>1)+((c[t>>2]|0)>>>3)+3;c[B>>2]=0;c[A>>2]=0;while(1){if((c[A>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[C>>2]=0;while(1){H=c[A>>2]|0;if((c[C>>2]|0)>=(b[(c[m>>2]|0)+(c[A>>2]<<1)>>1]|0))break;a[(c[q>>2]|0)+(c[B>>2]<<2)+2>>0]=H;c[B>>2]=(c[B>>2]|0)+(c[z>>2]|0)&c[y>>2];while(1){if((c[B>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;c[B>>2]=(c[B>>2]|0)+(c[z>>2]|0)&c[y>>2];}c[C>>2]=(c[C>>2]|0)+1;}c[A>>2]=H+1;}if(c[B>>2]|0){c[j>>2]=-1;G=c[j>>2]|0;l=i;return G|0;}c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;a[E>>0]=a[(c[q>>2]|0)+(c[D>>2]<<2)+2>>0]|0;B=r+(d[E>>0]<<1)|0;H=b[B>>1]|0;b[B>>1]=H+1<<16>>16;c[F>>2]=H&65535;H=c[o>>2]|0;B=H-(Eh(c[F>>2]|0)|0)&255;a[(c[q>>2]|0)+(c[D>>2]<<2)+3>>0]=B;b[(c[q>>2]|0)+(c[D>>2]<<2)>>1]=(c[F>>2]<<d[(c[q>>2]|0)+(c[D>>2]<<2)+3>>0])-(c[t>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}c[j>>2]=0;G=c[j>>2]|0;l=i;return G|0;}function kh(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;i=l;l=l+208|0;j=i+204|0;k=i+200|0;m=i+196|0;n=i+192|0;o=i+188|0;p=i+184|0;q=i+180|0;r=i+176|0;s=i+172|0;t=i+168|0;u=i+164|0;v=i+144|0;w=i+136|0;x=i+128|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+56|0;L=i+48|0;M=i+40|0;N=i+36|0;O=i+32|0;P=i+28|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[P>>2]=b;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=c[T>>2];c[V>>2]=c[U>>2];c[W>>2]=e[(c[V>>2]|0)+2>>1];V=c[P>>2]|0;P=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;if(c[W>>2]|0){c[A>>2]=V;c[B>>2]=P;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=1;c[G>>2]=c[A>>2];c[H>>2]=c[G>>2];c[I>>2]=(c[H>>2]|0)+(c[B>>2]|0);c[J>>2]=(c[I>>2]|0)+-3;c[N>>2]=lh(K,c[C>>2]|0,c[D>>2]|0)|0;do{if(ih(c[N>>2]|0)|0)c[z>>2]=c[N>>2];else{mh(L,K,c[E>>2]|0);mh(M,K,c[E>>2]|0);while(1){D=(nh(K)|0)==0&1;if(!(D&(c[H>>2]|0)>>>0<(c[J>>2]|0)>>>0))break;if(c[F>>2]|0)X=(oh(L,K)|0)&255;else X=(ph(L,K)|0)&255;a[c[H>>2]>>0]=X;if(c[F>>2]|0)Y=(oh(M,K)|0)&255;else Y=(ph(M,K)|0)&255;a[(c[H>>2]|0)+1>>0]=Y;if((nh(K)|0)>>>0>0){Z=13;break;}if(c[F>>2]|0)_=(oh(L,K)|0)&255;else _=(ph(L,K)|0)&255;a[(c[H>>2]|0)+2>>0]=_;if(c[F>>2]|0)$=(oh(M,K)|0)&255;else $=(ph(M,K)|0)&255;a[(c[H>>2]|0)+3>>0]=$;c[H>>2]=(c[H>>2]|0)+4;}if((Z|0)==13)c[H>>2]=(c[H>>2]|0)+2;while(1){if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=23;break;}if(c[F>>2]|0)aa=(oh(L,K)|0)&255;else aa=(ph(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=aa;if((nh(K)|0)==3){Z=28;break;}if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=33;break;}if(c[F>>2]|0)ba=(oh(M,K)|0)&255;else ba=(ph(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ba;if((nh(K)|0)==3){Z=38;break;}}if((Z|0)==23){c[z>>2]=-70;break;}else if((Z|0)==28){if(c[F>>2]|0)ca=(oh(M,K)|0)&255;else ca=(ph(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ca;}else if((Z|0)==33){c[z>>2]=-70;break;}else if((Z|0)==38){if(c[F>>2]|0)da=(oh(L,K)|0)&255;else da=(ph(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=da;}c[z>>2]=(c[H>>2]|0)-(c[G>>2]|0);}}while(0);c[O>>2]=c[z>>2];ea=c[O>>2]|0;l=i;return ea|0;}else{c[k>>2]=V;c[m>>2]=P;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=0;c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[s>>2]|0)+(c[m>>2]|0);c[u>>2]=(c[t>>2]|0)+-3;c[y>>2]=lh(v,c[n>>2]|0,c[o>>2]|0)|0;do{if(ih(c[y>>2]|0)|0)c[j>>2]=c[y>>2];else{mh(w,v,c[p>>2]|0);mh(x,v,c[p>>2]|0);while(1){o=(nh(v)|0)==0&1;if(!(o&(c[s>>2]|0)>>>0<(c[u>>2]|0)>>>0))break;if(c[q>>2]|0)fa=(oh(w,v)|0)&255;else fa=(ph(w,v)|0)&255;a[c[s>>2]>>0]=fa;if(c[q>>2]|0)ga=(oh(x,v)|0)&255;else ga=(ph(x,v)|0)&255;a[(c[s>>2]|0)+1>>0]=ga;if((nh(v)|0)>>>0>0){Z=56;break;}if(c[q>>2]|0)ha=(oh(w,v)|0)&255;else ha=(ph(w,v)|0)&255;a[(c[s>>2]|0)+2>>0]=ha;if(c[q>>2]|0)ia=(oh(x,v)|0)&255;else ia=(ph(x,v)|0)&255;a[(c[s>>2]|0)+3>>0]=ia;c[s>>2]=(c[s>>2]|0)+4;}if((Z|0)==56)c[s>>2]=(c[s>>2]|0)+2;while(1){if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=66;break;}if(c[q>>2]|0)ja=(oh(w,v)|0)&255;else ja=(ph(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ja;if((nh(v)|0)==3){Z=71;break;}if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=76;break;}if(c[q>>2]|0)ka=(oh(x,v)|0)&255;else ka=(ph(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ka;if((nh(v)|0)==3){Z=81;break;}}if((Z|0)==66){c[j>>2]=-70;break;}else if((Z|0)==71){if(c[q>>2]|0)la=(oh(x,v)|0)&255;else la=(ph(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=la;}else if((Z|0)==76){c[j>>2]=-70;break;}else if((Z|0)==81){if(c[q>>2]|0)ma=(oh(w,v)|0)&255;else ma=(ph(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ma;}c[j>>2]=(c[s>>2]|0)-(c[r>>2]|0);}}while(0);c[O>>2]=c[j>>2];ea=c[O>>2]|0;l=i;return ea|0;}return 0;}function lh(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}c[(c[i>>2]|0)+12>>2]=c[j>>2];c[(c[i>>2]|0)+16>>2]=(c[(c[i>>2]|0)+12>>2]|0)+4;do{if((c[k>>2]|0)>>>0>=4){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;f=vh(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=f;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0)p=8-(Eh(d[m>>0]|0)|0)|0;else p=0;c[(c[i>>2]|0)+4>>2]=p;if(!(d[m>>0]|0)){c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);q=10;break;}case 6:{q=10;break;}case 5:{q=11;break;}case 4:{q=12;break;}case 3:{q=13;break;}case 2:{q=14;break;}default:{}}if((q|0)==10){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);q=11;}if((q|0)==11){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);q=12;}if((q|0)==12){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);q=13;}if((q|0)==13){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);q=14;}if((q|0)==14){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0)r=8-(Eh(d[n>>0]|0)|0)|0;else r=0;c[(c[i>>2]|0)+4>>2]=r;if(d[n>>0]|0|0){f=(c[i>>2]|0)+4|0;c[f>>2]=(c[f>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-20;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function mh(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[i>>2];c[k>>2]=c[j>>2];j=qh(c[h>>2]|0,e[c[k>>2]>>1]|0)|0;c[c[g>>2]>>2]=j;nh(c[h>>2]|0)|0;c[(c[g>>2]|0)+4>>2]=(c[i>>2]|0)+4;l=f;return;}function nh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=vh(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=vh(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function oh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=th(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function ph(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=qh(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function qh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=rh(c[e>>2]|0,c[f>>2]|0)|0;sh(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function rh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function sh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function th(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=uh(c[e>>2]|0,c[f>>2]|0)|0;sh(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function uh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function vh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(wh()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=xh(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=yh(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function wh(){return 1;}function xh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(zh()|0)!=0;f=Ch(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Dh(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function yh(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(zh()|0)!=0;f=Ah(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=Bh(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function zh(){return d[11936]|0|0;}function Ah(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function Bh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Ch(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Dh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Eh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Fh(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;l=d;return c[f>>2]|0;}function Gh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Hh(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;a[f+4>>0]=a[b+4>>0]|0;a[f+5>>0]=a[b+5>>0]|0;a[f+6>>0]=a[b+6>>0]|0;a[f+7>>0]=a[b+7>>0]|0;b=f;y=c[b+4>>2]|0;l=d;return c[b>>2]|0;}function Ih(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Jh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;g=f+8|0;h=f;i=g;c[i>>2]=a;c[i+4>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;h=cE(c[e>>2]|0,c[e+4>>2]|0,668265295,-1028477379)|0;e=g;b=dE(c[e>>2]|0,c[e+4>>2]|0,h|0,y|0)|0;h=g;c[h>>2]=b;c[h+4>>2]=y;h=g;b=jE(c[h>>2]|0,c[h+4>>2]|0,31)|0;h=y;e=g;d=iE(c[e>>2]|0,c[e+4>>2]|0,33)|0;e=g;c[e>>2]=b|d;c[e+4>>2]=h|y;h=g;e=cE(c[h>>2]|0,c[h+4>>2]|0,-2048144761,-1640531535)|0;h=g;c[h>>2]=e;c[h+4>>2]=y;h=g;y=c[h+4>>2]|0;l=f;return c[h>>2]|0;}function Kh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;g=f+8|0;h=f;i=g;c[i>>2]=a;c[i+4>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;b=Jh(0,0,c[e>>2]|0,c[e+4>>2]|0)|0;e=h;c[e>>2]=b;c[e+4>>2]=y;e=h;h=g;b=c[h+4>>2]^c[e+4>>2];d=g;c[d>>2]=c[h>>2]^c[e>>2];c[d+4>>2]=b;b=g;d=cE(c[b>>2]|0,c[b+4>>2]|0,-2048144761,-1640531535)|0;b=dE(d|0,y|0,-1028477341,-2048144777)|0;d=g;c[d>>2]=b;c[d+4>>2]=y;d=g;y=c[d+4>>2]|0;l=f;return c[d>>2]|0;}function Lh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+112|0;f=e+96|0;g=e+88|0;h=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=h;a=d+80|0;do{c[d>>2]=0;d=d+4|0;}while((d|0)<(a|0));b=g;i=dE(c[b>>2]|0,c[b+4>>2]|0,-2048144761,-1640531535)|0;b=dE(i|0,y|0,668265295,-1028477379)|0;i=h+8|0;c[i>>2]=b;c[i+4>>2]=y;i=g;b=dE(c[i>>2]|0,c[i+4>>2]|0,668265295,-1028477379)|0;i=h+16|0;c[i>>2]=b;c[i+4>>2]=y;i=g;b=dE(c[i>>2]|0,c[i+4>>2]|0,0,0)|0;i=h+24|0;c[i>>2]=b;c[i+4>>2]=y;i=g;g=eE(c[i>>2]|0,c[i+4>>2]|0,-2048144761,-1640531535)|0;i=h+32|0;c[i>>2]=g;c[i+4>>2]=y;d=c[f>>2]|0;f=h;a=d+88|0;do{c[d>>2]=c[f>>2];d=d+4|0;f=f+4|0;}while((d|0)<(a|0));l=e;return 0;}function Mh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;mE(d|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function Nh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0;f=l;l=l+608|0;g=f+184|0;h=f+592|0;i=f+588|0;j=f+584|0;k=f+580|0;m=f+576|0;n=f+176|0;o=f+572|0;p=f+568|0;q=f+564|0;r=f+560|0;s=f+556|0;t=f+168|0;u=f+552|0;v=f+548|0;w=f+544|0;x=f+540|0;z=f+536|0;A=f+160|0;B=f+532|0;C=f+528|0;D=f+524|0;E=f+520|0;F=f+516|0;G=f+152|0;H=f+512|0;I=f+508|0;J=f+504|0;K=f+500|0;L=f+496|0;M=f+144|0;N=f+492|0;O=f+488|0;P=f+484|0;Q=f+480|0;R=f+476|0;S=f+136|0;T=f+472|0;U=f+468|0;V=f+464|0;W=f+460|0;X=f+456|0;Y=f+128|0;Z=f+452|0;_=f+448|0;$=f+444|0;aa=f+440|0;ba=f+436|0;ca=f+432|0;da=f+428|0;ea=f+424|0;fa=f+420|0;ga=f+416|0;ha=f+412|0;ia=f+408|0;ja=f+404|0;ka=f+120|0;la=f+112|0;ma=f+104|0;na=f+96|0;oa=f+88|0;pa=f+400|0;qa=f+396|0;ra=f+392|0;sa=f+388|0;ta=f+384|0;ua=f+80|0;va=f+380|0;wa=f+376|0;xa=f+372|0;ya=f+368|0;za=f+364|0;Aa=f+72|0;Ba=f+360|0;Ca=f+356|0;Da=f+352|0;Ea=f+348|0;Fa=f+344|0;Ga=f+64|0;Ha=f+340|0;Ia=f+336|0;Ja=f+332|0;Ka=f+328|0;La=f+324|0;Ma=f+56|0;Na=f+320|0;Oa=f+316|0;Pa=f+312|0;Qa=f+308|0;Ra=f+304|0;Sa=f+48|0;Ta=f+300|0;Ua=f+296|0;Va=f+292|0;Wa=f+288|0;Xa=f+284|0;Ya=f+40|0;Za=f+280|0;_a=f+276|0;$a=f+272|0;ab=f+268|0;bb=f+264|0;cb=f+32|0;db=f+260|0;eb=f+256|0;fb=f+252|0;gb=f+248|0;hb=f+244|0;ib=f+240|0;jb=f+236|0;kb=f+232|0;lb=f+228|0;mb=f+224|0;nb=f+220|0;ob=f+216|0;pb=f+212|0;qb=f+24|0;rb=f+16|0;sb=f+8|0;tb=f;ub=f+208|0;vb=f+204|0;wb=f+200|0;xb=f+196|0;yb=f+192|0;c[vb>>2]=b;c[wb>>2]=d;c[xb>>2]=e;c[yb>>2]=a[11920];e=c[vb>>2]|0;vb=c[wb>>2]|0;wb=c[xb>>2]|0;if((c[yb>>2]|0)==1){c[jb>>2]=e;c[kb>>2]=vb;c[lb>>2]=wb;c[mb>>2]=1;c[nb>>2]=c[kb>>2];c[ob>>2]=(c[nb>>2]|0)+(c[lb>>2]|0);yb=c[jb>>2]|0;xb=yb;d=dE(c[xb>>2]|0,c[xb+4>>2]|0,c[lb>>2]|0,0)|0;xb=yb;c[xb>>2]=d;c[xb+4>>2]=y;xb=c[jb>>2]|0;if(((c[(c[jb>>2]|0)+72>>2]|0)+(c[lb>>2]|0)|0)>>>0<32){Mh(xb+40+(c[(c[jb>>2]|0)+72>>2]|0)|0,c[kb>>2]|0,c[lb>>2]|0)|0;d=(c[jb>>2]|0)+72|0;c[d>>2]=(c[d>>2]|0)+(c[lb>>2]|0);c[ib>>2]=0;}else{if(c[xb+72>>2]|0){Mh((c[jb>>2]|0)+40+(c[(c[jb>>2]|0)+72>>2]|0)|0,c[kb>>2]|0,32-(c[(c[jb>>2]|0)+72>>2]|0)|0)|0;kb=(c[jb>>2]|0)+8|0;xb=c[kb>>2]|0;lb=c[kb+4>>2]|0;kb=c[mb>>2]|0;c[gb>>2]=(c[jb>>2]|0)+40;c[hb>>2]=kb;kb=c[hb>>2]|0;c[db>>2]=c[gb>>2];c[eb>>2]=kb;c[fb>>2]=1;kb=(c[eb>>2]|0)==1;eb=c[db>>2]|0;if((c[fb>>2]|0)==1){fb=Hh(eb)|0;db=y;if(kb){zb=fb;Ab=db;}else{gb=Ih(fb,db)|0;zb=gb;Ab=y;}gb=cb;c[gb>>2]=zb;c[gb+4>>2]=Ab;}else{Ab=eb;eb=c[Ab>>2]|0;gb=c[Ab+4>>2]|0;if(kb){Bb=eb;Cb=gb;}else{kb=Ih(eb,gb)|0;Bb=kb;Cb=y;}kb=cb;c[kb>>2]=Bb;c[kb+4>>2]=Cb;}Cb=cb;cb=Jh(xb,lb,c[Cb>>2]|0,c[Cb+4>>2]|0)|0;Cb=(c[jb>>2]|0)+8|0;c[Cb>>2]=cb;c[Cb+4>>2]=y;Cb=(c[jb>>2]|0)+16|0;cb=c[Cb>>2]|0;lb=c[Cb+4>>2]|0;Cb=c[mb>>2]|0;c[ab>>2]=(c[jb>>2]|0)+40+8;c[bb>>2]=Cb;Cb=c[bb>>2]|0;c[Za>>2]=c[ab>>2];c[_a>>2]=Cb;c[$a>>2]=1;Cb=(c[_a>>2]|0)==1;_a=c[Za>>2]|0;if((c[$a>>2]|0)==1){$a=Hh(_a)|0;Za=y;if(Cb){Db=$a;Eb=Za;}else{ab=Ih($a,Za)|0;Db=ab;Eb=y;}ab=Ya;c[ab>>2]=Db;c[ab+4>>2]=Eb;}else{Eb=_a;_a=c[Eb>>2]|0;ab=c[Eb+4>>2]|0;if(Cb){Fb=_a;Gb=ab;}else{Cb=Ih(_a,ab)|0;Fb=Cb;Gb=y;}Cb=Ya;c[Cb>>2]=Fb;c[Cb+4>>2]=Gb;}Gb=Ya;Ya=Jh(cb,lb,c[Gb>>2]|0,c[Gb+4>>2]|0)|0;Gb=(c[jb>>2]|0)+16|0;c[Gb>>2]=Ya;c[Gb+4>>2]=y;Gb=(c[jb>>2]|0)+24|0;Ya=c[Gb>>2]|0;lb=c[Gb+4>>2]|0;Gb=c[mb>>2]|0;c[Wa>>2]=(c[jb>>2]|0)+40+16;c[Xa>>2]=Gb;Gb=c[Xa>>2]|0;c[Ta>>2]=c[Wa>>2];c[Ua>>2]=Gb;c[Va>>2]=1;Gb=(c[Ua>>2]|0)==1;Ua=c[Ta>>2]|0;if((c[Va>>2]|0)==1){Va=Hh(Ua)|0;Ta=y;if(Gb){Hb=Va;Ib=Ta;}else{Wa=Ih(Va,Ta)|0;Hb=Wa;Ib=y;}Wa=Sa;c[Wa>>2]=Hb;c[Wa+4>>2]=Ib;}else{Ib=Ua;Ua=c[Ib>>2]|0;Wa=c[Ib+4>>2]|0;if(Gb){Jb=Ua;Kb=Wa;}else{Gb=Ih(Ua,Wa)|0;Jb=Gb;Kb=y;}Gb=Sa;c[Gb>>2]=Jb;c[Gb+4>>2]=Kb;}Kb=Sa;Sa=Jh(Ya,lb,c[Kb>>2]|0,c[Kb+4>>2]|0)|0;Kb=(c[jb>>2]|0)+24|0;c[Kb>>2]=Sa;c[Kb+4>>2]=y;Kb=(c[jb>>2]|0)+32|0;Sa=c[Kb>>2]|0;lb=c[Kb+4>>2]|0;Kb=c[mb>>2]|0;c[Qa>>2]=(c[jb>>2]|0)+40+24;c[Ra>>2]=Kb;Kb=c[Ra>>2]|0;c[Na>>2]=c[Qa>>2];c[Oa>>2]=Kb;c[Pa>>2]=1;Kb=(c[Oa>>2]|0)==1;Oa=c[Na>>2]|0;if((c[Pa>>2]|0)==1){Pa=Hh(Oa)|0;Na=y;if(Kb){Lb=Pa;Mb=Na;}else{Qa=Ih(Pa,Na)|0;Lb=Qa;Mb=y;}Qa=Ma;c[Qa>>2]=Lb;c[Qa+4>>2]=Mb;}else{Mb=Oa;Oa=c[Mb>>2]|0;Qa=c[Mb+4>>2]|0;if(Kb){Nb=Oa;Ob=Qa;}else{Kb=Ih(Oa,Qa)|0;Nb=Kb;Ob=y;}Kb=Ma;c[Kb>>2]=Nb;c[Kb+4>>2]=Ob;}Ob=Ma;Ma=Jh(Sa,lb,c[Ob>>2]|0,c[Ob+4>>2]|0)|0;Ob=(c[jb>>2]|0)+32|0;c[Ob>>2]=Ma;c[Ob+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+(32-(c[(c[jb>>2]|0)+72>>2]|0));c[(c[jb>>2]|0)+72>>2]=0;}if(((c[nb>>2]|0)+32|0)>>>0<=(c[ob>>2]|0)>>>0){c[pb>>2]=(c[ob>>2]|0)+-32;Ob=(c[jb>>2]|0)+8|0;Ma=c[Ob+4>>2]|0;lb=qb;c[lb>>2]=c[Ob>>2];c[lb+4>>2]=Ma;Ma=(c[jb>>2]|0)+16|0;lb=c[Ma+4>>2]|0;Ob=rb;c[Ob>>2]=c[Ma>>2];c[Ob+4>>2]=lb;lb=(c[jb>>2]|0)+24|0;Ob=c[lb+4>>2]|0;Ma=sb;c[Ma>>2]=c[lb>>2];c[Ma+4>>2]=Ob;Ob=(c[jb>>2]|0)+32|0;Ma=c[Ob+4>>2]|0;lb=tb;c[lb>>2]=c[Ob>>2];c[lb+4>>2]=Ma;do{Ma=qb;lb=c[Ma>>2]|0;Ob=c[Ma+4>>2]|0;Ma=c[mb>>2]|0;c[Ka>>2]=c[nb>>2];c[La>>2]=Ma;Ma=c[La>>2]|0;c[Ha>>2]=c[Ka>>2];c[Ia>>2]=Ma;c[Ja>>2]=1;Ma=(c[Ia>>2]|0)==1;Sa=c[Ha>>2]|0;if((c[Ja>>2]|0)==1){Kb=Hh(Sa)|0;Nb=y;if(Ma){Pb=Kb;Qb=Nb;}else{Qa=Ih(Kb,Nb)|0;Pb=Qa;Qb=y;}Qa=Ga;c[Qa>>2]=Pb;c[Qa+4>>2]=Qb;}else{Qa=Sa;Sa=c[Qa>>2]|0;Nb=c[Qa+4>>2]|0;if(Ma){Rb=Sa;Sb=Nb;}else{Ma=Ih(Sa,Nb)|0;Rb=Ma;Sb=y;}Ma=Ga;c[Ma>>2]=Rb;c[Ma+4>>2]=Sb;}Ma=Ga;Nb=Jh(lb,Ob,c[Ma>>2]|0,c[Ma+4>>2]|0)|0;Ma=qb;c[Ma>>2]=Nb;c[Ma+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+8;Ma=rb;Nb=c[Ma>>2]|0;Ob=c[Ma+4>>2]|0;Ma=c[mb>>2]|0;c[Ea>>2]=c[nb>>2];c[Fa>>2]=Ma;Ma=c[Fa>>2]|0;c[Ba>>2]=c[Ea>>2];c[Ca>>2]=Ma;c[Da>>2]=1;Ma=(c[Ca>>2]|0)==1;lb=c[Ba>>2]|0;if((c[Da>>2]|0)==1){Sa=Hh(lb)|0;Qa=y;if(Ma){Tb=Sa;Ub=Qa;}else{Kb=Ih(Sa,Qa)|0;Tb=Kb;Ub=y;}Kb=Aa;c[Kb>>2]=Tb;c[Kb+4>>2]=Ub;}else{Kb=lb;lb=c[Kb>>2]|0;Qa=c[Kb+4>>2]|0;if(Ma){Vb=lb;Wb=Qa;}else{Ma=Ih(lb,Qa)|0;Vb=Ma;Wb=y;}Ma=Aa;c[Ma>>2]=Vb;c[Ma+4>>2]=Wb;}Ma=Aa;Qa=Jh(Nb,Ob,c[Ma>>2]|0,c[Ma+4>>2]|0)|0;Ma=rb;c[Ma>>2]=Qa;c[Ma+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+8;Ma=sb;Qa=c[Ma>>2]|0;Ob=c[Ma+4>>2]|0;Ma=c[mb>>2]|0;c[ya>>2]=c[nb>>2];c[za>>2]=Ma;Ma=c[za>>2]|0;c[va>>2]=c[ya>>2];c[wa>>2]=Ma;c[xa>>2]=1;Ma=(c[wa>>2]|0)==1;Nb=c[va>>2]|0;if((c[xa>>2]|0)==1){lb=Hh(Nb)|0;Kb=y;if(Ma){Xb=lb;Yb=Kb;}else{Sa=Ih(lb,Kb)|0;Xb=Sa;Yb=y;}Sa=ua;c[Sa>>2]=Xb;c[Sa+4>>2]=Yb;}else{Sa=Nb;Nb=c[Sa>>2]|0;Kb=c[Sa+4>>2]|0;if(Ma){Zb=Nb;_b=Kb;}else{Ma=Ih(Nb,Kb)|0;Zb=Ma;_b=y;}Ma=ua;c[Ma>>2]=Zb;c[Ma+4>>2]=_b;}Ma=ua;Kb=Jh(Qa,Ob,c[Ma>>2]|0,c[Ma+4>>2]|0)|0;Ma=sb;c[Ma>>2]=Kb;c[Ma+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+8;Ma=tb;Kb=c[Ma>>2]|0;Ob=c[Ma+4>>2]|0;Ma=c[mb>>2]|0;c[sa>>2]=c[nb>>2];c[ta>>2]=Ma;Ma=c[ta>>2]|0;c[pa>>2]=c[sa>>2];c[qa>>2]=Ma;c[ra>>2]=1;Ma=(c[qa>>2]|0)==1;Qa=c[pa>>2]|0;if((c[ra>>2]|0)==1){Nb=Hh(Qa)|0;Sa=y;if(Ma){$b=Nb;ac=Sa;}else{lb=Ih(Nb,Sa)|0;$b=lb;ac=y;}lb=oa;c[lb>>2]=$b;c[lb+4>>2]=ac;}else{lb=Qa;Qa=c[lb>>2]|0;Sa=c[lb+4>>2]|0;if(Ma){bc=Qa;cc=Sa;}else{Ma=Ih(Qa,Sa)|0;bc=Ma;cc=y;}Ma=oa;c[Ma>>2]=bc;c[Ma+4>>2]=cc;}Ma=oa;Sa=Jh(Kb,Ob,c[Ma>>2]|0,c[Ma+4>>2]|0)|0;Ma=tb;c[Ma>>2]=Sa;c[Ma+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+8;}while((c[nb>>2]|0)>>>0<=(c[pb>>2]|0)>>>0);pb=qb;qb=c[pb+4>>2]|0;oa=(c[jb>>2]|0)+8|0;c[oa>>2]=c[pb>>2];c[oa+4>>2]=qb;qb=rb;rb=c[qb+4>>2]|0;oa=(c[jb>>2]|0)+16|0;c[oa>>2]=c[qb>>2];c[oa+4>>2]=rb;rb=sb;sb=c[rb+4>>2]|0;oa=(c[jb>>2]|0)+24|0;c[oa>>2]=c[rb>>2];c[oa+4>>2]=sb;sb=tb;tb=c[sb+4>>2]|0;oa=(c[jb>>2]|0)+32|0;c[oa>>2]=c[sb>>2];c[oa+4>>2]=tb;}if((c[nb>>2]|0)>>>0<(c[ob>>2]|0)>>>0){Mh((c[jb>>2]|0)+40|0,c[nb>>2]|0,(c[ob>>2]|0)-(c[nb>>2]|0)|0)|0;c[(c[jb>>2]|0)+72>>2]=(c[ob>>2]|0)-(c[nb>>2]|0);}c[ib>>2]=0;}c[ub>>2]=c[ib>>2];dc=c[ub>>2]|0;l=f;return dc|0;}else{c[da>>2]=e;c[ea>>2]=vb;c[fa>>2]=wb;c[ga>>2]=0;c[ha>>2]=c[ea>>2];c[ia>>2]=(c[ha>>2]|0)+(c[fa>>2]|0);wb=c[da>>2]|0;vb=wb;e=dE(c[vb>>2]|0,c[vb+4>>2]|0,c[fa>>2]|0,0)|0;vb=wb;c[vb>>2]=e;c[vb+4>>2]=y;vb=c[da>>2]|0;if(((c[(c[da>>2]|0)+72>>2]|0)+(c[fa>>2]|0)|0)>>>0<32){Mh(vb+40+(c[(c[da>>2]|0)+72>>2]|0)|0,c[ea>>2]|0,c[fa>>2]|0)|0;e=(c[da>>2]|0)+72|0;c[e>>2]=(c[e>>2]|0)+(c[fa>>2]|0);c[ca>>2]=0;}else{if(c[vb+72>>2]|0){Mh((c[da>>2]|0)+40+(c[(c[da>>2]|0)+72>>2]|0)|0,c[ea>>2]|0,32-(c[(c[da>>2]|0)+72>>2]|0)|0)|0;ea=(c[da>>2]|0)+8|0;vb=c[ea>>2]|0;fa=c[ea+4>>2]|0;ea=c[ga>>2]|0;c[aa>>2]=(c[da>>2]|0)+40;c[ba>>2]=ea;ea=c[ba>>2]|0;c[Z>>2]=c[aa>>2];c[_>>2]=ea;c[$>>2]=1;ea=(c[_>>2]|0)==1;_=c[Z>>2]|0;if((c[$>>2]|0)==1){$=Hh(_)|0;Z=y;if(ea){ec=$;fc=Z;}else{aa=Ih($,Z)|0;ec=aa;fc=y;}aa=Y;c[aa>>2]=ec;c[aa+4>>2]=fc;}else{fc=_;_=c[fc>>2]|0;aa=c[fc+4>>2]|0;if(ea){gc=_;hc=aa;}else{ea=Ih(_,aa)|0;gc=ea;hc=y;}ea=Y;c[ea>>2]=gc;c[ea+4>>2]=hc;}hc=Y;Y=Jh(vb,fa,c[hc>>2]|0,c[hc+4>>2]|0)|0;hc=(c[da>>2]|0)+8|0;c[hc>>2]=Y;c[hc+4>>2]=y;hc=(c[da>>2]|0)+16|0;Y=c[hc>>2]|0;fa=c[hc+4>>2]|0;hc=c[ga>>2]|0;c[W>>2]=(c[da>>2]|0)+40+8;c[X>>2]=hc;hc=c[X>>2]|0;c[T>>2]=c[W>>2];c[U>>2]=hc;c[V>>2]=1;hc=(c[U>>2]|0)==1;U=c[T>>2]|0;if((c[V>>2]|0)==1){V=Hh(U)|0;T=y;if(hc){ic=V;jc=T;}else{W=Ih(V,T)|0;ic=W;jc=y;}W=S;c[W>>2]=ic;c[W+4>>2]=jc;}else{jc=U;U=c[jc>>2]|0;W=c[jc+4>>2]|0;if(hc){kc=U;lc=W;}else{hc=Ih(U,W)|0;kc=hc;lc=y;}hc=S;c[hc>>2]=kc;c[hc+4>>2]=lc;}lc=S;S=Jh(Y,fa,c[lc>>2]|0,c[lc+4>>2]|0)|0;lc=(c[da>>2]|0)+16|0;c[lc>>2]=S;c[lc+4>>2]=y;lc=(c[da>>2]|0)+24|0;S=c[lc>>2]|0;fa=c[lc+4>>2]|0;lc=c[ga>>2]|0;c[Q>>2]=(c[da>>2]|0)+40+16;c[R>>2]=lc;lc=c[R>>2]|0;c[N>>2]=c[Q>>2];c[O>>2]=lc;c[P>>2]=1;lc=(c[O>>2]|0)==1;O=c[N>>2]|0;if((c[P>>2]|0)==1){P=Hh(O)|0;N=y;if(lc){mc=P;nc=N;}else{Q=Ih(P,N)|0;mc=Q;nc=y;}Q=M;c[Q>>2]=mc;c[Q+4>>2]=nc;}else{nc=O;O=c[nc>>2]|0;Q=c[nc+4>>2]|0;if(lc){oc=O;pc=Q;}else{lc=Ih(O,Q)|0;oc=lc;pc=y;}lc=M;c[lc>>2]=oc;c[lc+4>>2]=pc;}pc=M;M=Jh(S,fa,c[pc>>2]|0,c[pc+4>>2]|0)|0;pc=(c[da>>2]|0)+24|0;c[pc>>2]=M;c[pc+4>>2]=y;pc=(c[da>>2]|0)+32|0;M=c[pc>>2]|0;fa=c[pc+4>>2]|0;pc=c[ga>>2]|0;c[K>>2]=(c[da>>2]|0)+40+24;c[L>>2]=pc;pc=c[L>>2]|0;c[H>>2]=c[K>>2];c[I>>2]=pc;c[J>>2]=1;pc=(c[I>>2]|0)==1;I=c[H>>2]|0;if((c[J>>2]|0)==1){J=Hh(I)|0;H=y;if(pc){qc=J;rc=H;}else{K=Ih(J,H)|0;qc=K;rc=y;}K=G;c[K>>2]=qc;c[K+4>>2]=rc;}else{rc=I;I=c[rc>>2]|0;K=c[rc+4>>2]|0;if(pc){sc=I;tc=K;}else{pc=Ih(I,K)|0;sc=pc;tc=y;}pc=G;c[pc>>2]=sc;c[pc+4>>2]=tc;}tc=G;G=Jh(M,fa,c[tc>>2]|0,c[tc+4>>2]|0)|0;tc=(c[da>>2]|0)+32|0;c[tc>>2]=G;c[tc+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+(32-(c[(c[da>>2]|0)+72>>2]|0));c[(c[da>>2]|0)+72>>2]=0;}if(((c[ha>>2]|0)+32|0)>>>0<=(c[ia>>2]|0)>>>0){c[ja>>2]=(c[ia>>2]|0)+-32;tc=(c[da>>2]|0)+8|0;G=c[tc+4>>2]|0;fa=ka;c[fa>>2]=c[tc>>2];c[fa+4>>2]=G;G=(c[da>>2]|0)+16|0;fa=c[G+4>>2]|0;tc=la;c[tc>>2]=c[G>>2];c[tc+4>>2]=fa;fa=(c[da>>2]|0)+24|0;tc=c[fa+4>>2]|0;G=ma;c[G>>2]=c[fa>>2];c[G+4>>2]=tc;tc=(c[da>>2]|0)+32|0;G=c[tc+4>>2]|0;fa=na;c[fa>>2]=c[tc>>2];c[fa+4>>2]=G;do{G=ka;fa=c[G>>2]|0;tc=c[G+4>>2]|0;G=c[ga>>2]|0;c[E>>2]=c[ha>>2];c[F>>2]=G;G=c[F>>2]|0;c[B>>2]=c[E>>2];c[C>>2]=G;c[D>>2]=1;G=(c[C>>2]|0)==1;M=c[B>>2]|0;if((c[D>>2]|0)==1){pc=Hh(M)|0;sc=y;if(G){uc=pc;vc=sc;}else{K=Ih(pc,sc)|0;uc=K;vc=y;}K=A;c[K>>2]=uc;c[K+4>>2]=vc;}else{K=M;M=c[K>>2]|0;sc=c[K+4>>2]|0;if(G){wc=M;xc=sc;}else{G=Ih(M,sc)|0;wc=G;xc=y;}G=A;c[G>>2]=wc;c[G+4>>2]=xc;}G=A;sc=Jh(fa,tc,c[G>>2]|0,c[G+4>>2]|0)|0;G=ka;c[G>>2]=sc;c[G+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+8;G=la;sc=c[G>>2]|0;tc=c[G+4>>2]|0;G=c[ga>>2]|0;c[x>>2]=c[ha>>2];c[z>>2]=G;G=c[z>>2]|0;c[u>>2]=c[x>>2];c[v>>2]=G;c[w>>2]=1;G=(c[v>>2]|0)==1;fa=c[u>>2]|0;if((c[w>>2]|0)==1){M=Hh(fa)|0;K=y;if(G){yc=M;zc=K;}else{pc=Ih(M,K)|0;yc=pc;zc=y;}pc=t;c[pc>>2]=yc;c[pc+4>>2]=zc;}else{pc=fa;fa=c[pc>>2]|0;K=c[pc+4>>2]|0;if(G){Ac=fa;Bc=K;}else{G=Ih(fa,K)|0;Ac=G;Bc=y;}G=t;c[G>>2]=Ac;c[G+4>>2]=Bc;}G=t;K=Jh(sc,tc,c[G>>2]|0,c[G+4>>2]|0)|0;G=la;c[G>>2]=K;c[G+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+8;G=ma;K=c[G>>2]|0;tc=c[G+4>>2]|0;G=c[ga>>2]|0;c[r>>2]=c[ha>>2];c[s>>2]=G;G=c[s>>2]|0;c[o>>2]=c[r>>2];c[p>>2]=G;c[q>>2]=1;G=(c[p>>2]|0)==1;sc=c[o>>2]|0;if((c[q>>2]|0)==1){fa=Hh(sc)|0;pc=y;if(G){Cc=fa;Dc=pc;}else{M=Ih(fa,pc)|0;Cc=M;Dc=y;}M=n;c[M>>2]=Cc;c[M+4>>2]=Dc;}else{M=sc;sc=c[M>>2]|0;pc=c[M+4>>2]|0;if(G){Ec=sc;Fc=pc;}else{G=Ih(sc,pc)|0;Ec=G;Fc=y;}G=n;c[G>>2]=Ec;c[G+4>>2]=Fc;}G=n;pc=Jh(K,tc,c[G>>2]|0,c[G+4>>2]|0)|0;G=ma;c[G>>2]=pc;c[G+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+8;G=na;pc=c[G>>2]|0;tc=c[G+4>>2]|0;G=c[ga>>2]|0;c[k>>2]=c[ha>>2];c[m>>2]=G;G=c[m>>2]|0;c[h>>2]=c[k>>2];c[i>>2]=G;c[j>>2]=1;G=(c[i>>2]|0)==1;K=c[h>>2]|0;if((c[j>>2]|0)==1){sc=Hh(K)|0;M=y;if(G){Gc=sc;Hc=M;}else{fa=Ih(sc,M)|0;Gc=fa;Hc=y;}fa=g;c[fa>>2]=Gc;c[fa+4>>2]=Hc;}else{fa=K;K=c[fa>>2]|0;M=c[fa+4>>2]|0;if(G){Ic=K;Jc=M;}else{G=Ih(K,M)|0;Ic=G;Jc=y;}G=g;c[G>>2]=Ic;c[G+4>>2]=Jc;}G=g;M=Jh(pc,tc,c[G>>2]|0,c[G+4>>2]|0)|0;G=na;c[G>>2]=M;c[G+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+8;}while((c[ha>>2]|0)>>>0<=(c[ja>>2]|0)>>>0);ja=ka;ka=c[ja+4>>2]|0;g=(c[da>>2]|0)+8|0;c[g>>2]=c[ja>>2];c[g+4>>2]=ka;ka=la;la=c[ka+4>>2]|0;g=(c[da>>2]|0)+16|0;c[g>>2]=c[ka>>2];c[g+4>>2]=la;la=ma;ma=c[la+4>>2]|0;g=(c[da>>2]|0)+24|0;c[g>>2]=c[la>>2];c[g+4>>2]=ma;ma=na;na=c[ma+4>>2]|0;g=(c[da>>2]|0)+32|0;c[g>>2]=c[ma>>2];c[g+4>>2]=na;}if((c[ha>>2]|0)>>>0<(c[ia>>2]|0)>>>0){Mh((c[da>>2]|0)+40|0,c[ha>>2]|0,(c[ia>>2]|0)-(c[ha>>2]|0)|0)|0;c[(c[da>>2]|0)+72>>2]=(c[ia>>2]|0)-(c[ha>>2]|0);}c[ca>>2]=0;}c[ub>>2]=c[ca>>2];dc=c[ub>>2]|0;l=f;return dc|0;}return 0;}function Oh(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;e=l;l=l+256|0;f=e+244|0;g=e+240|0;h=e+236|0;i=e+232|0;j=e+228|0;k=e+224|0;m=e+112|0;n=e+220|0;o=e+216|0;p=e+212|0;q=e+208|0;r=e+204|0;s=e+200|0;t=e+196|0;u=e+192|0;v=e+188|0;w=e+104|0;x=e+96|0;z=e+88|0;A=e+80|0;B=e+72|0;C=e+64|0;D=e+184|0;E=e+180|0;F=e+176|0;G=e+172|0;H=e+168|0;I=e+164|0;J=e+56|0;K=e+160|0;L=e+156|0;M=e+152|0;N=e+148|0;O=e+144|0;P=e+140|0;Q=e+136|0;R=e+132|0;S=e+128|0;T=e+48|0;U=e+40|0;V=e+32|0;W=e+24|0;X=e+16|0;Y=e+8|0;Z=e;_=e+124|0;$=e+120|0;c[_>>2]=b;c[$>>2]=a[11920];b=c[_>>2]|0;if((c[$>>2]|0)==1){c[P>>2]=b;c[Q>>2]=1;c[R>>2]=(c[P>>2]|0)+40;c[S>>2]=(c[P>>2]|0)+40+(c[(c[P>>2]|0)+72>>2]|0);$=c[P>>2]|0;_=c[$+4>>2]|0;aa=c[P>>2]|0;if(_>>>0>0|(_|0)==0&(c[$>>2]|0)>>>0>=32){$=aa+8|0;_=c[$+4>>2]|0;ba=U;c[ba>>2]=c[$>>2];c[ba+4>>2]=_;_=(c[P>>2]|0)+16|0;ba=c[_+4>>2]|0;$=V;c[$>>2]=c[_>>2];c[$+4>>2]=ba;ba=(c[P>>2]|0)+24|0;$=c[ba+4>>2]|0;_=W;c[_>>2]=c[ba>>2];c[_+4>>2]=$;$=(c[P>>2]|0)+32|0;_=c[$+4>>2]|0;ba=X;c[ba>>2]=c[$>>2];c[ba+4>>2]=_;_=U;ba=jE(c[_>>2]|0,c[_+4>>2]|0,1)|0;_=y;$=U;ca=iE(c[$>>2]|0,c[$+4>>2]|0,63)|0;$=_|y;_=V;da=jE(c[_>>2]|0,c[_+4>>2]|0,7)|0;_=y;ea=V;fa=iE(c[ea>>2]|0,c[ea+4>>2]|0,57)|0;ea=dE(ba|ca|0,$|0,da|fa|0,_|y|0)|0;_=y;fa=W;da=jE(c[fa>>2]|0,c[fa+4>>2]|0,12)|0;fa=y;$=W;ca=iE(c[$>>2]|0,c[$+4>>2]|0,52)|0;$=dE(ea|0,_|0,da|ca|0,fa|y|0)|0;fa=y;ca=X;da=jE(c[ca>>2]|0,c[ca+4>>2]|0,18)|0;ca=y;_=X;ea=iE(c[_>>2]|0,c[_+4>>2]|0,46)|0;_=dE($|0,fa|0,da|ea|0,ca|y|0)|0;ca=T;c[ca>>2]=_;c[ca+4>>2]=y;ca=T;_=U;U=Kh(c[ca>>2]|0,c[ca+4>>2]|0,c[_>>2]|0,c[_+4>>2]|0)|0;_=T;c[_>>2]=U;c[_+4>>2]=y;_=T;U=V;V=Kh(c[_>>2]|0,c[_+4>>2]|0,c[U>>2]|0,c[U+4>>2]|0)|0;U=T;c[U>>2]=V;c[U+4>>2]=y;U=T;V=W;W=Kh(c[U>>2]|0,c[U+4>>2]|0,c[V>>2]|0,c[V+4>>2]|0)|0;V=T;c[V>>2]=W;c[V+4>>2]=y;V=T;W=X;X=Kh(c[V>>2]|0,c[V+4>>2]|0,c[W>>2]|0,c[W+4>>2]|0)|0;W=T;c[W>>2]=X;c[W+4>>2]=y;}else{W=aa+24|0;aa=dE(c[W>>2]|0,c[W+4>>2]|0,374761413,668265263)|0;W=T;c[W>>2]=aa;c[W+4>>2]=y;}W=c[P>>2]|0;P=T;aa=dE(c[P>>2]|0,c[P+4>>2]|0,c[W>>2]|0,c[W+4>>2]|0)|0;W=T;c[W>>2]=aa;c[W+4>>2]=y;while(1){ga=c[R>>2]|0;if(((c[R>>2]|0)+8|0)>>>0>(c[S>>2]|0)>>>0)break;W=c[Q>>2]|0;c[N>>2]=ga;c[O>>2]=W;W=c[O>>2]|0;c[K>>2]=c[N>>2];c[L>>2]=W;c[M>>2]=1;W=(c[L>>2]|0)==1;aa=c[K>>2]|0;if((c[M>>2]|0)==1){P=Hh(aa)|0;X=y;if(W){ha=P;ia=X;}else{V=Ih(P,X)|0;ha=V;ia=y;}V=J;c[V>>2]=ha;c[V+4>>2]=ia;}else{V=aa;aa=c[V>>2]|0;X=c[V+4>>2]|0;if(W){ja=aa;ka=X;}else{W=Ih(aa,X)|0;ja=W;ka=y;}W=J;c[W>>2]=ja;c[W+4>>2]=ka;}W=J;X=Jh(0,0,c[W>>2]|0,c[W+4>>2]|0)|0;W=Y;c[W>>2]=X;c[W+4>>2]=y;W=Y;X=T;aa=c[X+4>>2]^c[W+4>>2];V=T;c[V>>2]=c[X>>2]^c[W>>2];c[V+4>>2]=aa;aa=T;V=jE(c[aa>>2]|0,c[aa+4>>2]|0,27)|0;aa=y;W=T;X=iE(c[W>>2]|0,c[W+4>>2]|0,37)|0;W=cE(V|X|0,aa|y|0,-2048144761,-1640531535)|0;aa=dE(W|0,y|0,-1028477341,-2048144777)|0;W=T;c[W>>2]=aa;c[W+4>>2]=y;c[R>>2]=(c[R>>2]|0)+8;}if((ga+4|0)>>>0<=(c[S>>2]|0)>>>0){ga=c[Q>>2]|0;c[H>>2]=c[R>>2];c[I>>2]=ga;ga=c[I>>2]|0;c[E>>2]=c[H>>2];c[F>>2]=ga;c[G>>2]=1;ga=(c[F>>2]|0)==1;F=c[E>>2]|0;if((c[G>>2]|0)==1){G=Fh(F)|0;if(ga)la=G;else la=Gh(G)|0;c[D>>2]=la;}else{la=c[F>>2]|0;if(ga)ma=la;else ma=Gh(la)|0;c[D>>2]=ma;}ma=cE(c[D>>2]|0,0,-2048144761,-1640531535)|0;D=T;la=c[D+4>>2]^y;ga=T;c[ga>>2]=c[D>>2]^ma;c[ga+4>>2]=la;la=T;ga=jE(c[la>>2]|0,c[la+4>>2]|0,23)|0;la=y;ma=T;D=iE(c[ma>>2]|0,c[ma+4>>2]|0,41)|0;ma=cE(ga|D|0,la|y|0,668265295,-1028477379)|0;la=dE(ma|0,y|0,-1640531463,374761393)|0;ma=T;c[ma>>2]=la;c[ma+4>>2]=y;c[R>>2]=(c[R>>2]|0)+4;}while(1){if((c[R>>2]|0)>>>0>=(c[S>>2]|0)>>>0)break;ma=cE(d[c[R>>2]>>0]|0,0,374761413,668265263)|0;la=T;D=c[la+4>>2]^y;ga=T;c[ga>>2]=c[la>>2]^ma;c[ga+4>>2]=D;D=T;ga=jE(c[D>>2]|0,c[D+4>>2]|0,11)|0;D=y;ma=T;la=iE(c[ma>>2]|0,c[ma+4>>2]|0,53)|0;ma=cE(ga|la|0,D|y|0,-2048144761,-1640531535)|0;D=T;c[D>>2]=ma;c[D+4>>2]=y;c[R>>2]=(c[R>>2]|0)+1;}R=T;S=iE(c[R>>2]|0,c[R+4>>2]|0,33)|0;R=T;D=c[R+4>>2]^y;ma=T;c[ma>>2]=c[R>>2]^S;c[ma+4>>2]=D;D=T;ma=cE(c[D>>2]|0,c[D+4>>2]|0,668265295,-1028477379)|0;D=T;c[D>>2]=ma;c[D+4>>2]=y;D=T;ma=iE(c[D>>2]|0,c[D+4>>2]|0,29)|0;D=T;S=c[D+4>>2]^y;R=T;c[R>>2]=c[D>>2]^ma;c[R+4>>2]=S;S=T;R=cE(c[S>>2]|0,c[S+4>>2]|0,-1640531463,374761393)|0;S=T;c[S>>2]=R;c[S+4>>2]=y;S=T;R=c[S+4>>2]|0;ma=T;c[ma>>2]=c[S>>2]^c[T+4>>2];c[ma+4>>2]=R;R=T;T=c[R+4>>2]|0;ma=Z;c[ma>>2]=c[R>>2];c[ma+4>>2]=T;na=Z;oa=na;pa=c[oa>>2]|0;qa=na+4|0;ra=qa;sa=c[ra>>2]|0;y=sa;l=e;return pa|0;}else{c[s>>2]=b;c[t>>2]=0;c[u>>2]=(c[s>>2]|0)+40;c[v>>2]=(c[s>>2]|0)+40+(c[(c[s>>2]|0)+72>>2]|0);b=c[s>>2]|0;T=c[b+4>>2]|0;ma=c[s>>2]|0;if(T>>>0>0|(T|0)==0&(c[b>>2]|0)>>>0>=32){b=ma+8|0;T=c[b+4>>2]|0;R=x;c[R>>2]=c[b>>2];c[R+4>>2]=T;T=(c[s>>2]|0)+16|0;R=c[T+4>>2]|0;b=z;c[b>>2]=c[T>>2];c[b+4>>2]=R;R=(c[s>>2]|0)+24|0;b=c[R+4>>2]|0;T=A;c[T>>2]=c[R>>2];c[T+4>>2]=b;b=(c[s>>2]|0)+32|0;T=c[b+4>>2]|0;R=B;c[R>>2]=c[b>>2];c[R+4>>2]=T;T=x;R=jE(c[T>>2]|0,c[T+4>>2]|0,1)|0;T=y;b=x;S=iE(c[b>>2]|0,c[b+4>>2]|0,63)|0;b=T|y;T=z;D=jE(c[T>>2]|0,c[T+4>>2]|0,7)|0;T=y;la=z;ga=iE(c[la>>2]|0,c[la+4>>2]|0,57)|0;la=dE(R|S|0,b|0,D|ga|0,T|y|0)|0;T=y;ga=A;D=jE(c[ga>>2]|0,c[ga+4>>2]|0,12)|0;ga=y;b=A;S=iE(c[b>>2]|0,c[b+4>>2]|0,52)|0;b=dE(la|0,T|0,D|S|0,ga|y|0)|0;ga=y;S=B;D=jE(c[S>>2]|0,c[S+4>>2]|0,18)|0;S=y;T=B;la=iE(c[T>>2]|0,c[T+4>>2]|0,46)|0;T=dE(b|0,ga|0,D|la|0,S|y|0)|0;S=w;c[S>>2]=T;c[S+4>>2]=y;S=w;T=x;x=Kh(c[S>>2]|0,c[S+4>>2]|0,c[T>>2]|0,c[T+4>>2]|0)|0;T=w;c[T>>2]=x;c[T+4>>2]=y;T=w;x=z;z=Kh(c[T>>2]|0,c[T+4>>2]|0,c[x>>2]|0,c[x+4>>2]|0)|0;x=w;c[x>>2]=z;c[x+4>>2]=y;x=w;z=A;A=Kh(c[x>>2]|0,c[x+4>>2]|0,c[z>>2]|0,c[z+4>>2]|0)|0;z=w;c[z>>2]=A;c[z+4>>2]=y;z=w;A=B;B=Kh(c[z>>2]|0,c[z+4>>2]|0,c[A>>2]|0,c[A+4>>2]|0)|0;A=w;c[A>>2]=B;c[A+4>>2]=y;}else{A=ma+24|0;ma=dE(c[A>>2]|0,c[A+4>>2]|0,374761413,668265263)|0;A=w;c[A>>2]=ma;c[A+4>>2]=y;}A=c[s>>2]|0;s=w;ma=dE(c[s>>2]|0,c[s+4>>2]|0,c[A>>2]|0,c[A+4>>2]|0)|0;A=w;c[A>>2]=ma;c[A+4>>2]=y;while(1){ta=c[u>>2]|0;if(((c[u>>2]|0)+8|0)>>>0>(c[v>>2]|0)>>>0)break;A=c[t>>2]|0;c[q>>2]=ta;c[r>>2]=A;A=c[r>>2]|0;c[n>>2]=c[q>>2];c[o>>2]=A;c[p>>2]=1;A=(c[o>>2]|0)==1;ma=c[n>>2]|0;if((c[p>>2]|0)==1){s=Hh(ma)|0;B=y;if(A){ua=s;va=B;}else{z=Ih(s,B)|0;ua=z;va=y;}z=m;c[z>>2]=ua;c[z+4>>2]=va;}else{z=ma;ma=c[z>>2]|0;B=c[z+4>>2]|0;if(A){wa=ma;xa=B;}else{A=Ih(ma,B)|0;wa=A;xa=y;}A=m;c[A>>2]=wa;c[A+4>>2]=xa;}A=m;B=Jh(0,0,c[A>>2]|0,c[A+4>>2]|0)|0;A=C;c[A>>2]=B;c[A+4>>2]=y;A=C;B=w;ma=c[B+4>>2]^c[A+4>>2];z=w;c[z>>2]=c[B>>2]^c[A>>2];c[z+4>>2]=ma;ma=w;z=jE(c[ma>>2]|0,c[ma+4>>2]|0,27)|0;ma=y;A=w;B=iE(c[A>>2]|0,c[A+4>>2]|0,37)|0;A=cE(z|B|0,ma|y|0,-2048144761,-1640531535)|0;ma=dE(A|0,y|0,-1028477341,-2048144777)|0;A=w;c[A>>2]=ma;c[A+4>>2]=y;c[u>>2]=(c[u>>2]|0)+8;}if((ta+4|0)>>>0<=(c[v>>2]|0)>>>0){ta=c[t>>2]|0;c[j>>2]=c[u>>2];c[k>>2]=ta;ta=c[k>>2]|0;c[g>>2]=c[j>>2];c[h>>2]=ta;c[i>>2]=1;ta=(c[h>>2]|0)==1;h=c[g>>2]|0;if((c[i>>2]|0)==1){i=Fh(h)|0;if(ta)ya=i;else ya=Gh(i)|0;c[f>>2]=ya;}else{ya=c[h>>2]|0;if(ta)za=ya;else za=Gh(ya)|0;c[f>>2]=za;}za=cE(c[f>>2]|0,0,-2048144761,-1640531535)|0;f=w;ya=c[f+4>>2]^y;ta=w;c[ta>>2]=c[f>>2]^za;c[ta+4>>2]=ya;ya=w;ta=jE(c[ya>>2]|0,c[ya+4>>2]|0,23)|0;ya=y;za=w;f=iE(c[za>>2]|0,c[za+4>>2]|0,41)|0;za=cE(ta|f|0,ya|y|0,668265295,-1028477379)|0;ya=dE(za|0,y|0,-1640531463,374761393)|0;za=w;c[za>>2]=ya;c[za+4>>2]=y;c[u>>2]=(c[u>>2]|0)+4;}while(1){if((c[u>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;za=cE(d[c[u>>2]>>0]|0,0,374761413,668265263)|0;ya=w;f=c[ya+4>>2]^y;ta=w;c[ta>>2]=c[ya>>2]^za;c[ta+4>>2]=f;f=w;ta=jE(c[f>>2]|0,c[f+4>>2]|0,11)|0;f=y;za=w;ya=iE(c[za>>2]|0,c[za+4>>2]|0,53)|0;za=cE(ta|ya|0,f|y|0,-2048144761,-1640531535)|0;f=w;c[f>>2]=za;c[f+4>>2]=y;c[u>>2]=(c[u>>2]|0)+1;}u=w;v=iE(c[u>>2]|0,c[u+4>>2]|0,33)|0;u=w;f=c[u+4>>2]^y;za=w;c[za>>2]=c[u>>2]^v;c[za+4>>2]=f;f=w;za=cE(c[f>>2]|0,c[f+4>>2]|0,668265295,-1028477379)|0;f=w;c[f>>2]=za;c[f+4>>2]=y;f=w;za=iE(c[f>>2]|0,c[f+4>>2]|0,29)|0;f=w;v=c[f+4>>2]^y;u=w;c[u>>2]=c[f>>2]^za;c[u+4>>2]=v;v=w;u=cE(c[v>>2]|0,c[v+4>>2]|0,-1640531463,374761393)|0;v=w;c[v>>2]=u;c[v+4>>2]=y;v=w;u=c[v+4>>2]|0;za=w;c[za>>2]=c[v>>2]^c[w+4>>2];c[za+4>>2]=u;u=w;w=c[u+4>>2]|0;za=Z;c[za>>2]=c[u>>2];c[za+4>>2]=w;na=Z;oa=na;pa=c[oa>>2]|0;qa=na+4|0;ra=qa;sa=c[ra>>2]|0;y=sa;l=e;return pa|0;}return 0;}function Ph(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Qh(c[d>>2]|0)|0;l=b;return a|0;}function Qh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function Rh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=a;if(c[b>>2]|0){c[e>>2]=qc[c[b>>2]&63](c[b+8>>2]|0,c[f>>2]|0)|0;g=c[e>>2]|0;l=d;return g|0;}else{c[e>>2]=Cy(c[f>>2]|0)|0;g=c[e>>2]|0;l=d;return g|0;}return 0;}function Sh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;if(c[b>>2]|0){c[g>>2]=qc[c[b>>2]&63](c[b+8>>2]|0,c[f>>2]|0)|0;oE(c[g>>2]|0,0,c[f>>2]|0)|0;c[e>>2]=c[g>>2];h=c[e>>2]|0;l=d;return h|0;}else{c[e>>2]=Ey(1,c[f>>2]|0)|0;h=c[e>>2]|0;l=d;return h|0;}return 0;}function Th(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;if(!(c[e>>2]|0)){l=d;return;}if(c[b+4>>2]|0){xc[c[b+4>>2]&31](c[b+8>>2]|0,c[e>>2]|0);l=d;return;}else{Dy(c[e>>2]|0);l=d;return;}}function Uh(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;k=l;l=l+1136|0;m=k+1124|0;n=k+1120|0;o=k+1116|0;p=k+1112|0;q=k+1108|0;r=k+1104|0;s=k+1100|0;t=k+1096|0;u=k+1092|0;v=k+1088|0;w=k+1084|0;x=k+1080|0;y=k+1076|0;z=k+1072|0;A=k;B=k+1068|0;C=k+1064|0;D=k+1060|0;E=k+1056|0;F=k+1052|0;G=k+1048|0;H=k+1044|0;I=k+1128|0;J=k+1040|0;K=k+1036|0;L=k+1032|0;M=k+1028|0;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=j;c[t>>2]=1<<c[q>>2];c[u>>2]=(c[t>>2]|0)-1;c[v>>2]=c[n>>2];c[w>>2]=(c[v>>2]|0)+4;c[x>>2]=(c[v>>2]|0)+4+((c[q>>2]|0?(c[t>>2]|0)>>>1:1)<<2);c[y>>2]=c[x>>2];c[z>>2]=((c[t>>2]|0)>>>1)+((c[t>>2]|0)>>>3)+3;c[B>>2]=c[r>>2];c[C>>2]=(c[t>>2]|0)-1;if(1<<c[q>>2]>>>0>(c[s>>2]|0)>>>0){c[m>>2]=-44;N=c[m>>2]|0;l=k;return N|0;}b[(c[w>>2]|0)+-4>>1]=c[q>>2];b[(c[w>>2]|0)+-2>>1]=c[p>>2];c[A>>2]=0;c[D>>2]=1;while(1){if((c[D>>2]|0)>>>0>((c[p>>2]|0)+1|0)>>>0)break;s=c[A+((c[D>>2]|0)-1<<2)>>2]|0;if((b[(c[o>>2]|0)+((c[D>>2]|0)-1<<1)>>1]|0)==-1){c[A+(c[D>>2]<<2)>>2]=s+1;r=(c[D>>2]|0)-1&255;x=c[B>>2]|0;v=c[C>>2]|0;c[C>>2]=v+-1;a[x+v>>0]=r;}else c[A+(c[D>>2]<<2)>>2]=s+(b[(c[o>>2]|0)+((c[D>>2]|0)-1<<1)>>1]|0);c[D>>2]=(c[D>>2]|0)+1;}c[A+((c[p>>2]|0)+1<<2)>>2]=(c[t>>2]|0)+1;c[E>>2]=0;c[F>>2]=0;while(1){if((c[F>>2]|0)>>>0>(c[p>>2]|0)>>>0)break;c[G>>2]=0;while(1){O=c[F>>2]|0;if((c[G>>2]|0)>=(b[(c[o>>2]|0)+(c[F>>2]<<1)>>1]|0))break;a[(c[B>>2]|0)+(c[E>>2]|0)>>0]=O;c[E>>2]=(c[E>>2]|0)+(c[z>>2]|0)&c[u>>2];while(1){if((c[E>>2]|0)>>>0<=(c[C>>2]|0)>>>0)break;c[E>>2]=(c[E>>2]|0)+(c[z>>2]|0)&c[u>>2];}c[G>>2]=(c[G>>2]|0)+1;}c[F>>2]=O+1;}if(c[E>>2]|0){c[m>>2]=-1;N=c[m>>2]|0;l=k;return N|0;}c[H>>2]=0;while(1){if((c[H>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;a[I>>0]=a[(c[B>>2]|0)+(c[H>>2]|0)>>0]|0;E=(c[t>>2]|0)+(c[H>>2]|0)&65535;O=c[w>>2]|0;F=A+(d[I>>0]<<2)|0;G=c[F>>2]|0;c[F>>2]=G+1;b[O+(G<<1)>>1]=E;c[H>>2]=(c[H>>2]|0)+1;}c[J>>2]=0;c[K>>2]=0;while(1){if((c[K>>2]|0)>>>0>(c[p>>2]|0)>>>0)break;switch(b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]|0){case 0:break;case 1:case-1:{c[(c[y>>2]|0)+(c[K>>2]<<3)+4>>2]=(c[q>>2]<<16)-(1<<c[q>>2]);c[(c[y>>2]|0)+(c[K>>2]<<3)>>2]=(c[J>>2]|0)-1;c[J>>2]=(c[J>>2]|0)+1;break;}default:{c[L>>2]=(c[q>>2]|0)-(Vh((b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]|0)-1|0)|0);c[M>>2]=b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]<<c[L>>2];c[(c[y>>2]|0)+(c[K>>2]<<3)+4>>2]=(c[L>>2]<<16)-(c[M>>2]|0);c[(c[y>>2]|0)+(c[K>>2]<<3)>>2]=(c[J>>2]|0)-(b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]|0);c[J>>2]=(c[J>>2]|0)+(b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]|0);}}c[K>>2]=(c[K>>2]|0)+1;}c[m>>2]=0;N=c[m>>2]|0;l=k;return N|0;}function Vh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Wh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=((N((c[e>>2]|0)+1|0,c[f>>2]|0)|0)>>>3)+3;l=d;return(c[e>>2]|0?c[g>>2]|0:512)|0;}function Xh(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;do{if((c[n>>2]|0)>>>0<=12){if((c[n>>2]|0)>>>0<5){c[h>>2]=-1;break;}f=c[j>>2]|0;e=f>>>0<(Wh(c[m>>2]|0,c[n>>2]|0)|0)>>>0;f=c[i>>2]|0;d=c[j>>2]|0;b=c[k>>2]|0;a=c[m>>2]|0;o=c[n>>2]|0;if(e){c[h>>2]=Yh(f,d,b,a,o,0)|0;break;}else{c[h>>2]=Yh(f,d,b,a,o,1)|0;break;}}else c[h>>2]=-44;}while(0);l=g;return c[h>>2]|0;}function Yh(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;j=l;l=l+96|0;k=j+80|0;m=j+76|0;n=j+72|0;o=j+68|0;p=j+64|0;q=j+60|0;r=j+56|0;s=j+52|0;t=j+48|0;u=j+44|0;v=j+40|0;w=j+36|0;x=j+32|0;y=j+28|0;z=j+24|0;A=j+20|0;B=j+16|0;C=j+12|0;D=j+8|0;E=j+4|0;F=j;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=c[m>>2];c[t>>2]=c[s>>2];c[u>>2]=(c[s>>2]|0)+(c[n>>2]|0);c[w>>2]=1<<c[q>>2];c[B>>2]=0;c[C>>2]=0;c[z>>2]=0;c[A>>2]=0;c[z>>2]=(c[z>>2]|0)+((c[q>>2]|0)-5<<c[A>>2]);c[A>>2]=(c[A>>2]|0)+4;c[x>>2]=(c[w>>2]|0)+1;c[y>>2]=c[w>>2];c[v>>2]=(c[q>>2]|0)+1;a:while(1){if((c[x>>2]|0)<=1){G=34;break;}if(c[C>>2]|0){c[D>>2]=c[B>>2];while(1){if(!((b[(c[o>>2]|0)+(c[B>>2]<<1)>>1]|0)!=0^1))break;c[B>>2]=(c[B>>2]|0)+1;}while(1){if((c[B>>2]|0)>>>0<((c[D>>2]|0)+24|0)>>>0)break;c[D>>2]=(c[D>>2]|0)+24;c[z>>2]=(c[z>>2]|0)+(65535<<c[A>>2]);if((c[r>>2]|0)==0?(c[t>>2]|0)>>>0>((c[u>>2]|0)+-2|0)>>>0:0){G=11;break a;}a[c[t>>2]>>0]=c[z>>2];a[(c[t>>2]|0)+1>>0]=(c[z>>2]|0)>>>8;c[t>>2]=(c[t>>2]|0)+2;c[z>>2]=(c[z>>2]|0)>>>16;}while(1){if((c[B>>2]|0)>>>0<((c[D>>2]|0)+3|0)>>>0)break;c[D>>2]=(c[D>>2]|0)+3;c[z>>2]=(c[z>>2]|0)+(3<<c[A>>2]);c[A>>2]=(c[A>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+((c[B>>2]|0)-(c[D>>2]|0)<<c[A>>2]);c[A>>2]=(c[A>>2]|0)+2;if((c[A>>2]|0)>16){if((c[r>>2]|0)==0?(c[t>>2]|0)>>>0>((c[u>>2]|0)+-2|0)>>>0:0){G=19;break;}a[c[t>>2]>>0]=c[z>>2];a[(c[t>>2]|0)+1>>0]=(c[z>>2]|0)>>>8;c[t>>2]=(c[t>>2]|0)+2;c[z>>2]=(c[z>>2]|0)>>>16;c[A>>2]=(c[A>>2]|0)-16;}}q=c[o>>2]|0;w=c[B>>2]|0;c[B>>2]=w+1;c[E>>2]=b[q+(w<<1)>>1];c[F>>2]=(c[y>>2]<<1)-1-(c[x>>2]|0);w=c[E>>2]|0;c[x>>2]=(c[x>>2]|0)-((c[E>>2]|0)<0?0-w|0:w);c[E>>2]=(c[E>>2]|0)+1;if((c[E>>2]|0)>=(c[y>>2]|0))c[E>>2]=(c[E>>2]|0)+(c[F>>2]|0);c[z>>2]=(c[z>>2]|0)+(c[E>>2]<<c[A>>2]);c[A>>2]=(c[A>>2]|0)+(c[v>>2]|0);c[A>>2]=(c[A>>2]|0)-((c[E>>2]|0)<(c[F>>2]|0)&1);c[C>>2]=(c[E>>2]|0)==1&1;if((c[x>>2]|0)<1){G=24;break;}while(1){if((c[x>>2]|0)>=(c[y>>2]|0))break;c[v>>2]=(c[v>>2]|0)+-1;c[y>>2]=c[y>>2]>>1;}if((c[A>>2]|0)>16){if((c[r>>2]|0)==0?(c[t>>2]|0)>>>0>((c[u>>2]|0)+-2|0)>>>0:0){G=31;break;}a[c[t>>2]>>0]=c[z>>2];a[(c[t>>2]|0)+1>>0]=(c[z>>2]|0)>>>8;c[t>>2]=(c[t>>2]|0)+2;c[z>>2]=(c[z>>2]|0)>>>16;c[A>>2]=(c[A>>2]|0)-16;}}if((G|0)==11){c[k>>2]=-70;H=c[k>>2]|0;l=j;return H|0;}else if((G|0)==19){c[k>>2]=-70;H=c[k>>2]|0;l=j;return H|0;}else if((G|0)==24){c[k>>2]=-1;H=c[k>>2]|0;l=j;return H|0;}else if((G|0)==31){c[k>>2]=-70;H=c[k>>2]|0;l=j;return H|0;}else if((G|0)==34){if((c[r>>2]|0)==0?(c[t>>2]|0)>>>0>((c[u>>2]|0)+-2|0)>>>0:0){c[k>>2]=-70;H=c[k>>2]|0;l=j;return H|0;}a[c[t>>2]>>0]=c[z>>2];a[(c[t>>2]|0)+1>>0]=(c[z>>2]|0)>>>8;c[t>>2]=(c[t>>2]|0)+(((c[A>>2]|0)+7|0)/8|0);if((c[B>>2]|0)>>>0>((c[p>>2]|0)+1|0)>>>0){c[k>>2]=-1;H=c[k>>2]|0;l=j;return H|0;}else{c[k>>2]=(c[t>>2]|0)-(c[s>>2]|0);H=c[k>>2]|0;l=j;return H|0;}}return 0;}function Zh(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+48|0;h=g+36|0;i=g+32|0;j=g+28|0;k=g+24|0;m=g+20|0;n=g+16|0;o=g+12|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[k>>2];c[o>>2]=(c[n>>2]|0)+(c[m>>2]|0);c[p>>2]=c[c[j>>2]>>2];c[q>>2]=0;oE(c[i>>2]|0,0,(c[p>>2]|0)+1<<2|0)|0;if(!(c[m>>2]|0)){c[c[j>>2]>>2]=0;c[h>>2]=0;s=c[h>>2]|0;l=g;return s|0;}while(1){if((c[n>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;m=c[i>>2]|0;k=c[n>>2]|0;c[n>>2]=k+1;f=m+((d[k>>0]|0)<<2)|0;c[f>>2]=(c[f>>2]|0)+1;}while(1){t=c[p>>2]|0;if(!((c[(c[i>>2]|0)+(c[p>>2]<<2)>>2]|0)!=0^1))break;c[p>>2]=t+-1;}c[c[j>>2]>>2]=t;c[r>>2]=0;while(1){if((c[r>>2]|0)>>>0>(c[p>>2]|0)>>>0)break;if((c[(c[i>>2]|0)+(c[r>>2]<<2)>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[q>>2]=c[(c[i>>2]|0)+(c[r>>2]<<2)>>2];c[r>>2]=(c[r>>2]|0)+1;}c[h>>2]=c[q>>2];s=c[h>>2]|0;l=g;return s|0;}function _h(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;f=c[i>>2]|0;i=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;if((c[m>>2]|0)>>>0<1500){c[h>>2]=Zh(f,i,j,k)|0;o=c[h>>2]|0;l=g;return o|0;}else{c[h>>2]=$h(f,i,j,k,0,c[n>>2]|0)|0;o=c[h>>2]|0;l=g;return o|0;}return 0;}function $h(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;i=l;l=l+80|0;j=i+72|0;k=i+68|0;m=i+64|0;n=i+60|0;o=i+56|0;p=i+52|0;q=i+48|0;r=i+44|0;s=i+40|0;t=i+36|0;u=i+32|0;v=i+28|0;w=i+24|0;x=i+20|0;y=i+16|0;z=i+12|0;A=i+8|0;B=i+4|0;C=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+(c[o>>2]|0);c[t>>2]=c[c[m>>2]>>2];c[u>>2]=0;c[v>>2]=c[q>>2];c[w>>2]=(c[v>>2]|0)+1024;c[x>>2]=(c[w>>2]|0)+1024;c[y>>2]=(c[x>>2]|0)+1024;oE(c[q>>2]|0,0,4096)|0;if(!(c[o>>2]|0)){oE(c[k>>2]|0,0,(c[t>>2]|0)+1|0)|0;c[c[m>>2]>>2]=0;c[j>>2]=0;D=c[j>>2]|0;l=i;return D|0;}if(!(c[t>>2]|0))c[t>>2]=255;c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;while(1){if((c[r>>2]|0)>>>0>=((c[s>>2]|0)+-15|0)>>>0)break;c[A>>2]=c[z>>2];c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;o=(c[v>>2]|0)+((c[A>>2]&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[w>>2]|0)+(((c[A>>2]|0)>>>8&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[x>>2]|0)+(((c[A>>2]|0)>>>16&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[y>>2]|0)+((c[A>>2]|0)>>>24<<2)|0;c[o>>2]=(c[o>>2]|0)+1;c[A>>2]=c[z>>2];c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;o=(c[v>>2]|0)+((c[A>>2]&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[w>>2]|0)+(((c[A>>2]|0)>>>8&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[x>>2]|0)+(((c[A>>2]|0)>>>16&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[y>>2]|0)+((c[A>>2]|0)>>>24<<2)|0;c[o>>2]=(c[o>>2]|0)+1;c[A>>2]=c[z>>2];c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;o=(c[v>>2]|0)+((c[A>>2]&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[w>>2]|0)+(((c[A>>2]|0)>>>8&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[x>>2]|0)+(((c[A>>2]|0)>>>16&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[y>>2]|0)+((c[A>>2]|0)>>>24<<2)|0;c[o>>2]=(c[o>>2]|0)+1;c[A>>2]=c[z>>2];c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;o=(c[v>>2]|0)+((c[A>>2]&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[w>>2]|0)+(((c[A>>2]|0)>>>8&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[x>>2]|0)+(((c[A>>2]|0)>>>16&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[y>>2]|0)+((c[A>>2]|0)>>>24<<2)|0;c[o>>2]=(c[o>>2]|0)+1;}c[r>>2]=(c[r>>2]|0)+-4;while(1){if((c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;A=c[v>>2]|0;z=c[r>>2]|0;c[r>>2]=z+1;o=A+((d[z>>0]|0)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;}a:do{if(c[p>>2]|0){c[B>>2]=255;while(1){if((c[B>>2]|0)>>>0<=(c[t>>2]|0)>>>0)break a;r=(c[v>>2]|0)+(c[B>>2]<<2)|0;c[r>>2]=(c[r>>2]|0)+((c[(c[w>>2]|0)+(c[B>>2]<<2)>>2]|0)+(c[(c[x>>2]|0)+(c[B>>2]<<2)>>2]|0)+(c[(c[y>>2]|0)+(c[B>>2]<<2)>>2]|0));if(c[(c[v>>2]|0)+(c[B>>2]<<2)>>2]|0)break;c[B>>2]=(c[B>>2]|0)+-1;}c[j>>2]=-48;D=c[j>>2]|0;l=i;return D|0;}}while(0);if((c[t>>2]|0)>>>0>255)c[t>>2]=255;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[(c[k>>2]|0)+(c[C>>2]<<2)>>2]=(c[(c[v>>2]|0)+(c[C>>2]<<2)>>2]|0)+(c[(c[w>>2]|0)+(c[C>>2]<<2)>>2]|0)+(c[(c[x>>2]|0)+(c[C>>2]<<2)>>2]|0)+(c[(c[y>>2]|0)+(c[C>>2]<<2)>>2]|0);if((c[(c[k>>2]|0)+(c[C>>2]<<2)>>2]|0)>>>0>(c[u>>2]|0)>>>0)c[u>>2]=c[(c[k>>2]|0)+(c[C>>2]<<2)>>2];c[C>>2]=(c[C>>2]|0)+1;}while(1){E=c[t>>2]|0;if(!((c[(c[k>>2]|0)+(c[t>>2]<<2)>>2]|0)!=0^1))break;c[t>>2]=E+-1;}c[c[m>>2]>>2]=E;c[j>>2]=c[u>>2];D=c[j>>2]|0;l=i;return D|0;}function ai(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function bi(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[c[j>>2]>>2]|0)>>>0<255){c[h>>2]=$h(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,1,c[n>>2]|0)|0;o=c[h>>2]|0;l=g;return o|0;}else{c[c[j>>2]>>2]=255;c[h>>2]=_h(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;o=c[h>>2]|0;l=g;return o|0;}return 0;}function ci(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;e=Vh((c[h>>2]|0)-1|0)|0;c[k>>2]=e-(c[j>>2]|0);c[m>>2]=c[g>>2];c[n>>2]=di(c[h>>2]|0,c[i>>2]|0)|0;if(!(c[m>>2]|0))c[m>>2]=11;if((c[k>>2]|0)>>>0<(c[m>>2]|0)>>>0)c[m>>2]=c[k>>2];if((c[n>>2]|0)>>>0>(c[m>>2]|0)>>>0)c[m>>2]=c[n>>2];if((c[m>>2]|0)>>>0<5)c[m>>2]=5;if((c[m>>2]|0)>>>0<=12){o=c[m>>2]|0;l=f;return o|0;}c[m>>2]=12;o=c[m>>2]|0;l=f;return o|0;}function di(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(Vh((c[e>>2]|0)-1|0)|0)+1;c[h>>2]=(Vh(c[f>>2]|0)|0)+2;c[i>>2]=(c[g>>2]|0)>>>0<(c[h>>2]|0)>>>0?c[g>>2]|0:c[h>>2]|0;l=d;return c[i>>2]|0;}function ei(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=ci(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,2)|0;l=e;return d|0;}function fi(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0;h=l;l=l+80|0;i=h+72|0;j=h+68|0;k=h+64|0;m=h+60|0;n=h+56|0;o=h+52|0;p=h+24|0;q=h+16|0;r=h+8|0;s=h+48|0;t=h+44|0;u=h+40|0;v=h+78|0;w=h+36|0;x=h+76|0;z=h;A=h+32|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if(!(c[k>>2]|0))c[k>>2]=11;if((c[k>>2]|0)>>>0<5){c[i>>2]=-1;B=c[i>>2]|0;l=h;return B|0;}if((c[k>>2]|0)>>>0>12){c[i>>2]=-44;B=c[i>>2]|0;l=h;return B|0;}g=c[k>>2]|0;if(g>>>0<(di(c[n>>2]|0,c[o>>2]|0)|0)>>>0){c[i>>2]=-1;B=c[i>>2]|0;l=h;return B|0;}g=p;c[g>>2]=62-(c[k>>2]|0);c[g+4>>2]=0;g=hE(0,1073741824,c[n>>2]|0,0)|0;f=q;c[f>>2]=g;c[f+4>>2]=y;f=p;g=eE(c[f>>2]|0,c[f+4>>2]|0,20,0)|0;f=jE(1,0,g|0)|0;g=r;c[g>>2]=f;c[g+4>>2]=y;c[s>>2]=1<<c[k>>2];c[u>>2]=0;b[v>>1]=0;c[w>>2]=(c[n>>2]|0)>>>(c[k>>2]|0);c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0)==(c[n>>2]|0)){C=12;break;}do{if(!(c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0))b[(c[j>>2]|0)+(c[t>>2]<<1)>>1]=0;else{if((c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0)>>>0<=(c[w>>2]|0)>>>0){b[(c[j>>2]|0)+(c[t>>2]<<1)>>1]=-1;c[s>>2]=(c[s>>2]|0)+-1;break;}g=q;f=cE(c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0,0,c[g>>2]|0,c[g+4>>2]|0)|0;g=iE(f|0,y|0,c[p>>2]|0)|0;b[x>>1]=g;if((b[x>>1]|0)<8){g=r;f=cE(c[g>>2]|0,c[g+4>>2]|0,c[192+(b[x>>1]<<2)>>2]|0,0)|0;g=z;c[g>>2]=f;c[g+4>>2]=y;g=q;f=cE(c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0,0,c[g>>2]|0,c[g+4>>2]|0)|0;g=y;e=b[x>>1]|0;d=jE(e|0,((e|0)<0)<<31>>31|0,c[p>>2]|0)|0;e=eE(f|0,g|0,d|0,y|0)|0;d=y;g=z;f=c[g+4>>2]|0;b[x>>1]=(b[x>>1]|0)+((d>>>0>f>>>0|((d|0)==(f|0)?e>>>0>(c[g>>2]|0)>>>0:0))&1);}if((b[x>>1]|0)>(b[v>>1]|0)){b[v>>1]=b[x>>1]|0;c[u>>2]=c[t>>2];}b[(c[j>>2]|0)+(c[t>>2]<<1)>>1]=b[x>>1]|0;c[s>>2]=(c[s>>2]|0)-(b[x>>1]|0);}}while(0);c[t>>2]=(c[t>>2]|0)+1;}if((C|0)==12){c[i>>2]=0;B=c[i>>2]|0;l=h;return B|0;}if((0-(c[s>>2]|0)|0)>=(b[(c[j>>2]|0)+(c[u>>2]<<1)>>1]>>1|0)){c[A>>2]=gi(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;if(hi(c[A>>2]|0)|0){c[i>>2]=c[A>>2];B=c[i>>2]|0;l=h;return B|0;}}else{A=(c[j>>2]|0)+(c[u>>2]<<1)|0;b[A>>1]=(b[A>>1]|0)+((c[s>>2]&65535)<<16>>16);}c[i>>2]=c[k>>2];B=c[i>>2]|0;l=h;return B|0;}function gi(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=l;l=l+112|0;i=h+100|0;j=h+96|0;k=h+92|0;m=h+88|0;n=h+84|0;o=h+80|0;p=h+76|0;q=h+72|0;r=h+68|0;s=h+64|0;t=h+60|0;u=h+56|0;v=h+52|0;w=h+32|0;x=h+24|0;z=h+16|0;A=h+8|0;B=h;C=h+48|0;D=h+44|0;E=h+40|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;b[h+104>>1]=-2;c[q>>2]=0;c[s>>2]=(c[n>>2]|0)>>>(c[k>>2]|0);c[t>>2]=((c[n>>2]|0)*3|0)>>>((c[k>>2]|0)+1|0);c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;do{if(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0){if((c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)>>>0<=(c[s>>2]|0)>>>0){b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=-1;c[q>>2]=(c[q>>2]|0)+1;c[n>>2]=(c[n>>2]|0)-(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0);break;}g=(c[j>>2]|0)+(c[p>>2]<<1)|0;if((c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)>>>0<=(c[t>>2]|0)>>>0){b[g>>1]=1;c[q>>2]=(c[q>>2]|0)+1;c[n>>2]=(c[n>>2]|0)-(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0);break;}else{b[g>>1]=-2;break;}}else b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=0;}while(0);c[p>>2]=(c[p>>2]|0)+1;}c[r>>2]=(1<<c[k>>2])-(c[q>>2]|0);if((((c[n>>2]|0)>>>0)/((c[r>>2]|0)>>>0)|0)>>>0>(c[t>>2]|0)>>>0){c[t>>2]=(((c[n>>2]|0)*3|0)>>>0)/(c[r>>2]<<1>>>0)|0;c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]|0)==-2?(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)>>>0<=(c[t>>2]|0)>>>0:0){b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=1;c[q>>2]=(c[q>>2]|0)+1;c[n>>2]=(c[n>>2]|0)-(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0);}c[p>>2]=(c[p>>2]|0)+1;}c[r>>2]=(1<<c[k>>2])-(c[q>>2]|0);}if((c[q>>2]|0)==((c[o>>2]|0)+1|0)){c[u>>2]=0;c[v>>2]=0;c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)>>>0>(c[v>>2]|0)>>>0){c[u>>2]=c[p>>2];c[v>>2]=c[(c[m>>2]|0)+(c[p>>2]<<2)>>2];}c[p>>2]=(c[p>>2]|0)+1;}v=(c[j>>2]|0)+(c[u>>2]<<1)|0;b[v>>1]=(b[v>>1]|0)+((c[r>>2]&65535)<<16>>16);c[i>>2]=0;F=c[i>>2]|0;l=h;return F|0;}if(!(c[n>>2]|0)){c[p>>2]=0;while(1){if((c[r>>2]|0)>>>0<=0)break;if((b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]|0)>0){c[r>>2]=(c[r>>2]|0)+-1;v=(c[j>>2]|0)+(c[p>>2]<<1)|0;b[v>>1]=(b[v>>1]|0)+1<<16>>16;}c[p>>2]=(((c[p>>2]|0)+1|0)>>>0)%(((c[o>>2]|0)+1|0)>>>0)|0;}c[i>>2]=0;F=c[i>>2]|0;l=h;return F|0;}v=w;c[v>>2]=62-(c[k>>2]|0);c[v+4>>2]=0;v=w;k=eE(c[v>>2]|0,c[v+4>>2]|0,1,0)|0;v=jE(1,0,k|0)|0;k=eE(v|0,y|0,1,0)|0;v=x;c[v>>2]=k;c[v+4>>2]=y;v=jE(1,0,c[w>>2]|0)|0;k=cE(v|0,y|0,c[r>>2]|0,0)|0;r=x;v=dE(k|0,y|0,c[r>>2]|0,c[r+4>>2]|0)|0;r=hE(v|0,y|0,c[n>>2]|0,0)|0;n=z;c[n>>2]=r;c[n+4>>2]=y;n=x;x=c[n+4>>2]|0;r=A;c[r>>2]=c[n>>2];c[r+4>>2]=x;c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>(c[o>>2]|0)>>>0){G=40;break;}if((b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]|0)==-2){x=A;r=c[x>>2]|0;n=c[x+4>>2]|0;x=z;v=cE(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0,0,c[x>>2]|0,c[x+4>>2]|0)|0;x=dE(r|0,n|0,v|0,y|0)|0;v=B;c[v>>2]=x;c[v+4>>2]=y;v=A;x=iE(c[v>>2]|0,c[v+4>>2]|0,c[w>>2]|0)|0;c[C>>2]=x;x=B;v=iE(c[x>>2]|0,c[x+4>>2]|0,c[w>>2]|0)|0;c[D>>2]=v;c[E>>2]=(c[D>>2]|0)-(c[C>>2]|0);if((c[E>>2]|0)>>>0<1){G=37;break;}b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=c[E>>2];v=B;x=c[v+4>>2]|0;n=A;c[n>>2]=c[v>>2];c[n+4>>2]=x;}c[p>>2]=(c[p>>2]|0)+1;}if((G|0)==37){c[i>>2]=-1;F=c[i>>2]|0;l=h;return F|0;}else if((G|0)==40){c[i>>2]=0;F=c[i>>2]|0;l=h;return F|0;}return 0;}function hi(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function ii(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+32|0;h=g+16|0;i=g+20|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=e;a[i>>0]=f;c[j>>2]=c[h>>2];c[k>>2]=(c[j>>2]|0)+4;c[m>>2]=(c[j>>2]|0)+8;c[n>>2]=c[m>>2];b[(c[k>>2]|0)+-4>>1]=0;b[(c[k>>2]|0)+-2>>1]=d[i>>0]|0;b[c[k>>2]>>1]=0;b[(c[k>>2]|0)+2>>1]=0;c[(c[n>>2]|0)+((d[i>>0]|0)<<3)+4>>2]=0;c[(c[n>>2]|0)+((d[i>>0]|0)<<3)>>2]=0;l=g;return 0;}function ji(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=(c[j>>2]|0)>>>0>=((c[m>>2]|0)+((c[m>>2]|0)>>>7)|0)>>>0&1;f=c[i>>2]|0;i=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;if(c[o>>2]|0){c[h>>2]=ki(f,i,j,k,m,1)|0;p=c[h>>2]|0;l=g;return p|0;}else{c[h>>2]=ki(f,i,j,k,m,0)|0;p=c[h>>2]|0;l=g;return p|0;}return 0;}function ki(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;i=l;l=l+112|0;j=i+96|0;k=i+92|0;m=i+88|0;n=i+84|0;o=i+80|0;p=i+76|0;q=i+72|0;r=i+68|0;s=i+64|0;t=i+60|0;u=i+40|0;v=i+24|0;w=i+8|0;x=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+(c[o>>2]|0);c[t>>2]=c[s>>2];if((c[o>>2]|0)>>>0<=2){c[j>>2]=0;y=c[j>>2]|0;l=i;return y|0;}c[x>>2]=li(u,c[k>>2]|0,c[m>>2]|0)|0;if(hi(c[x>>2]|0)|0){c[j>>2]=0;y=c[j>>2]|0;l=i;return y|0;}x=(c[o>>2]&1|0)!=0;m=c[p>>2]|0;k=(c[t>>2]|0)+-1|0;c[t>>2]=k;s=d[k>>0]|0;do{if(x){mi(v,m,s);k=c[p>>2]|0;n=(c[t>>2]|0)+-1|0;c[t>>2]=n;mi(w,k,d[n>>0]|0);n=(c[t>>2]|0)+-1|0;c[t>>2]=n;ni(u,v,d[n>>0]|0);if(c[q>>2]|0){oi(u);break;}else{pi(u);break;}}else{mi(w,m,s);n=c[p>>2]|0;k=(c[t>>2]|0)+-1|0;c[t>>2]=k;mi(v,n,d[k>>0]|0);}}while(0);c[o>>2]=(c[o>>2]|0)-2;while(1){if((c[t>>2]|0)>>>0<=(c[r>>2]|0)>>>0)break;o=(c[t>>2]|0)+-1|0;c[t>>2]=o;ni(u,w,d[o>>0]|0);o=(c[t>>2]|0)+-1|0;c[t>>2]=o;ni(u,v,d[o>>0]|0);if(c[q>>2]|0)oi(u);else pi(u);}qi(u,w);qi(u,v);c[j>>2]=ri(u)|0;y=c[j>>2]|0;l=i;return y|0;}function li(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[c[g>>2]>>2]=0;c[(c[g>>2]|0)+4>>2]=0;c[(c[g>>2]|0)+8>>2]=c[h>>2];c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+8>>2];c[(c[g>>2]|0)+16>>2]=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]|0)+-4;if((c[i>>2]|0)>>>0<=4){c[f>>2]=-70;j=c[f>>2]|0;l=e;return j|0;}else{c[f>>2]=0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function mi(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;Di(c[g>>2]|0,c[h>>2]|0);h=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]<<3)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[k>>2]=c[(c[g>>2]|0)+4>>2];c[m>>2]=((c[j+4>>2]|0)+32768|0)>>>16;c[c[g>>2]>>2]=(c[m>>2]<<16)-(c[j+4>>2]|0);c[c[g>>2]>>2]=e[(c[k>>2]|0)+((c[c[g>>2]>>2]>>c[m>>2])+(c[j>>2]|0)<<1)>>1];l=f;return;}function ni(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;d=(c[(c[h>>2]|0)+8>>2]|0)+(c[i>>2]<<3)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[k>>2]=c[(c[h>>2]|0)+4>>2];c[m>>2]=((c[c[h>>2]>>2]|0)+(c[j+4>>2]|0)|0)>>>16;ti(c[g>>2]|0,c[c[h>>2]>>2]|0,c[m>>2]|0);c[c[h>>2]>>2]=e[(c[k>>2]|0)+((c[c[h>>2]>>2]>>c[m>>2])+(c[j>>2]|0)<<1)>>1];l=f;return;}function oi(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[(c[d>>2]|0)+4>>2]|0)>>>3;ui(c[(c[d>>2]|0)+12>>2]|0,c[c[d>>2]>>2]|0);a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);a=(c[d>>2]|0)+4|0;c[a>>2]=c[a>>2]&7;a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)>>>(c[e>>2]<<3);l=b;return;}function pi(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[(c[d>>2]|0)+4>>2]|0)>>>3;ui(c[(c[d>>2]|0)+12>>2]|0,c[c[d>>2]>>2]|0);a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);if((c[(c[d>>2]|0)+12>>2]|0)>>>0>(c[(c[d>>2]|0)+16>>2]|0)>>>0)c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+16>>2];a=(c[d>>2]|0)+4|0;c[a>>2]=c[a>>2]&7;a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)>>>(c[e>>2]<<3);l=b;return;}function qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;ti(c[e>>2]|0,c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+12>>2]|0);pi(c[e>>2]|0);l=d;return;}function ri(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;si(c[e>>2]|0,1,1);pi(c[e>>2]|0);if((c[(c[e>>2]|0)+12>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{c[d>>2]=(c[(c[e>>2]|0)+12>>2]|0)-(c[(c[e>>2]|0)+8>>2]|0)+((c[(c[e>>2]|0)+4>>2]|0)>>>0>0&1);f=c[d>>2]|0;l=b;return f|0;}return 0;}function si(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|c[g>>2]<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function ti(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|(c[g>>2]&c[2800+(c[h>>2]<<2)>>2])<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function ui(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(vi()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){wi(a,e);l=d;return;}else{xi(a,e,0);l=d;return;}}function vi(){return 1;}function wi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(yi()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){Bi(a,e);l=d;return;}else{Bi(a,Ci(e)|0);l=d;return;}}function xi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=(yi()|0)!=0;a=c[f>>2]|0;f=g;g=c[f>>2]|0;b=c[f+4>>2]|0;if(d){zi(a,g,b);l=e;return;}else{d=Ai(g,b)|0;zi(a,d,y);l=e;return;}}function yi(){return d[11936]|0|0;}function zi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+8|0;h=f;c[g>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;h=c[e>>2]|0;b=c[e+4>>2]|0;e=c[g>>2]|0;g=e;a[g>>0]=h;a[g+1>>0]=h>>8;a[g+2>>0]=h>>16;a[g+3>>0]=h>>24;h=e+4|0;a[h>>0]=b;a[h+1>>0]=b>>8;a[h+2>>0]=b>>16;a[h+3>>0]=b>>24;l=f;return;}function Ai(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Bi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[g>>2]|0;g=c[f>>2]|0;a[g>>0]=d;a[g+1>>0]=d>>8;a[g+2>>0]=d>>16;a[g+3>>0]=d>>24;l=e;return;}function Ci(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Di(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[f>>2];c[h>>2]=c[g>>2];c[i>>2]=(Ei(c[g>>2]|0)|0)&65535;c[c[e>>2]>>2]=1<<c[i>>2];c[(c[e>>2]|0)+4>>2]=(c[h>>2]|0)+4;if(c[i>>2]|0)j=1<<(c[i>>2]|0)-1;else j=1;c[(c[e>>2]|0)+8>>2]=(c[f>>2]|0)+4+(j<<2);c[(c[e>>2]|0)+12>>2]=c[i>>2];l=d;return;}function Ei(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Fi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=ci(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,1)|0;l=e;return d|0;}function Gi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=l;l=l+464|0;g=f+452|0;h=f+448|0;i=f+444|0;j=f+440|0;k=f+436|0;m=f+432|0;n=f+428|0;o=f+424|0;p=f+420|0;q=f+416|0;r=f+160|0;s=f+32|0;t=f;u=f+412|0;v=f+408|0;w=f+404|0;x=f+400|0;y=f+396|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[h>>2];c[n>>2]=c[m>>2];c[o>>2]=(c[m>>2]|0)+(c[i>>2]|0);c[p>>2]=12;c[q>>2]=6;if((c[k>>2]|0)>>>0<=1){c[g>>2]=0;z=c[g>>2]|0;l=f;return z|0;}c[u>>2]=Zh(s,p,c[j>>2]|0,c[k>>2]|0)|0;i=(Hi(c[u>>2]|0)|0)!=0;h=c[u>>2]|0;if(i){c[g>>2]=h;z=c[g>>2]|0;l=f;return z|0;}if((h|0)==(c[k>>2]|0)){c[g>>2]=1;z=c[g>>2]|0;l=f;return z|0;}if((c[u>>2]|0)==1){c[g>>2]=0;z=c[g>>2]|0;l=f;return z|0;}c[q>>2]=ei(c[q>>2]|0,c[k>>2]|0,c[p>>2]|0)|0;c[v>>2]=fi(t,c[q>>2]|0,s,c[k>>2]|0,c[p>>2]|0)|0;if(Hi(c[v>>2]|0)|0){c[g>>2]=c[v>>2];z=c[g>>2]|0;l=f;return z|0;}c[w>>2]=Xh(c[n>>2]|0,(c[o>>2]|0)-(c[n>>2]|0)|0,t,c[p>>2]|0,c[q>>2]|0)|0;v=(Hi(c[w>>2]|0)|0)!=0;s=c[w>>2]|0;if(v){c[g>>2]=s;z=c[g>>2]|0;l=f;return z|0;}c[n>>2]=(c[n>>2]|0)+s;c[x>>2]=Uh(r,t,c[p>>2]|0,c[q>>2]|0,f+96|0,64)|0;if(Hi(c[x>>2]|0)|0){c[g>>2]=c[x>>2];z=c[g>>2]|0;l=f;return z|0;}c[y>>2]=ji(c[n>>2]|0,(c[o>>2]|0)-(c[n>>2]|0)|0,c[j>>2]|0,c[k>>2]|0,r)|0;r=(Hi(c[y>>2]|0)|0)!=0;k=c[y>>2]|0;if(r){c[g>>2]=k;z=c[g>>2]|0;l=f;return z|0;}if(!k){c[g>>2]=0;z=c[g>>2]|0;l=f;return z|0;}else{c[n>>2]=(c[n>>2]|0)+(c[y>>2]|0);c[g>>2]=(c[n>>2]|0)-(c[m>>2]|0);z=c[g>>2]|0;l=f;return z|0;}return 0;}function Hi(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function Ii(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;i=l;l=l+320|0;j=i+288|0;k=i+284|0;m=i+280|0;n=i+276|0;o=i+272|0;p=i+268|0;q=i+292|0;r=i;s=i+264|0;t=i+260|0;u=i+256|0;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[s>>2]=c[k>>2];if((c[o>>2]|0)>>>0>255){c[j>>2]=-46;v=c[j>>2]|0;l=i;return v|0;}a[q>>0]=0;c[t>>2]=1;while(1){if((c[t>>2]|0)>>>0>=((c[p>>2]|0)+1|0)>>>0)break;a[q+(c[t>>2]|0)>>0]=(c[p>>2]|0)+1-(c[t>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;a[r+(c[t>>2]|0)>>0]=a[q+(d[(c[n>>2]|0)+(c[t>>2]<<2)+2>>0]|0)>>0]|0;c[t>>2]=(c[t>>2]|0)+1;}c[u>>2]=Gi((c[s>>2]|0)+1|0,(c[m>>2]|0)-1|0,r,c[o>>2]|0)|0;n=(Hi(c[u>>2]|0)|0)!=0;q=c[u>>2]|0;if(n){c[j>>2]=q;v=c[j>>2]|0;l=i;return v|0;}if((q>>>0>1?(c[u>>2]|0)>>>0<(((c[o>>2]|0)>>>0)/2|0)>>>0:0)|0){a[c[s>>2]>>0]=c[u>>2];c[j>>2]=(c[u>>2]|0)+1;v=c[j>>2]|0;l=i;return v|0;}if((c[o>>2]|0)>>>0>128){c[j>>2]=-1;v=c[j>>2]|0;l=i;return v|0;}if((((((c[o>>2]|0)+1|0)>>>0)/2|0)+1|0)>>>0>(c[m>>2]|0)>>>0){c[j>>2]=-70;v=c[j>>2]|0;l=i;return v|0;}a[c[s>>2]>>0]=128+((c[o>>2]|0)-1);a[r+(c[o>>2]|0)>>0]=0;c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;a[(c[s>>2]|0)+((((c[t>>2]|0)>>>0)/2|0)+1)>>0]=((d[r+(c[t>>2]|0)>>0]|0)<<4)+(d[r+((c[t>>2]|0)+1)>>0]|0);c[t>>2]=(c[t>>2]|0)+2;}c[j>>2]=((((c[o>>2]|0)+1|0)>>>0)/2|0)+1;v=c[j>>2]|0;l=i;return v|0;}function Ji(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;j=l;l=l+464|0;k=j+444|0;m=j+440|0;n=j+436|0;o=j+432|0;p=j+428|0;q=j+128|0;r=j+64|0;s=j+424|0;t=j+420|0;u=j+416|0;v=j+412|0;w=j+408|0;x=j+404|0;y=j+400|0;z=j+396|0;A=j+32|0;B=j;C=j+392|0;D=j+448|0;E=j+388|0;F=j+384|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[s>>2]=0;c[t>>2]=0;c[u>>2]=fh(q,256,r,t,s,c[o>>2]|0,c[p>>2]|0)|0;if(Hi(c[u>>2]|0)|0){c[k>>2]=c[u>>2];G=c[k>>2]|0;l=j;return G|0;}if((c[s>>2]|0)>>>0>12){c[k>>2]=-44;G=c[k>>2]|0;l=j;return G|0;}if((c[t>>2]|0)>>>0>((c[c[n>>2]>>2]|0)+1|0)>>>0){c[k>>2]=-48;G=c[k>>2]|0;l=j;return G|0;}c[w>>2]=0;c[v>>2]=1;while(1){if((c[v>>2]|0)>>>0>(c[s>>2]|0)>>>0)break;c[x>>2]=c[w>>2];c[w>>2]=(c[w>>2]|0)+(c[r+(c[v>>2]<<2)>>2]<<(c[v>>2]|0)-1);c[r+(c[v>>2]<<2)>>2]=c[x>>2];c[v>>2]=(c[v>>2]|0)+1;}c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;c[z>>2]=d[q+(c[y>>2]|0)>>0];a[(c[m>>2]|0)+(c[y>>2]<<2)+2>>0]=(c[s>>2]|0)+1-(c[z>>2]|0);c[y>>2]=(c[y>>2]|0)+1;}c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;c[A+16>>2]=0;c[A+20>>2]=0;c[A+24>>2]=0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[B+24>>2]=0;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;y=A+((d[(c[m>>2]|0)+(c[C>>2]<<2)+2>>0]|0)<<1)|0;b[y>>1]=(b[y>>1]|0)+1<<16>>16;c[C>>2]=(c[C>>2]|0)+1;}b[B+((c[s>>2]|0)+1<<1)>>1]=0;b[D>>1]=0;c[E>>2]=c[s>>2];while(1){if((c[E>>2]|0)>>>0<=0)break;b[B+(c[E>>2]<<1)>>1]=b[D>>1]|0;b[D>>1]=(e[D>>1]|0)+(e[A+(c[E>>2]<<1)>>1]|0);b[D>>1]=(e[D>>1]|0)>>1;c[E>>2]=(c[E>>2]|0)+-1;}c[F>>2]=0;while(1){if((c[F>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;E=B+((d[(c[m>>2]|0)+(c[F>>2]<<2)+2>>0]|0)<<1)|0;D=b[E>>1]|0;b[E>>1]=D+1<<16>>16;b[(c[m>>2]|0)+(c[F>>2]<<2)>>1]=D;c[F>>2]=(c[F>>2]|0)+1;}c[c[n>>2]>>2]=(c[t>>2]|0)-1;c[k>>2]=c[u>>2];G=c[k>>2]|0;l=j;return G|0;}function Ki(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;m=l;l=l+128|0;n=m+120|0;o=m+116|0;p=m+112|0;q=m+108|0;r=m+104|0;s=m+100|0;t=m+96|0;u=m+92|0;v=m+88|0;w=m+84|0;x=m+80|0;y=m+76|0;z=m+72|0;A=m+126|0;B=m+68|0;C=m+64|0;D=m+60|0;E=m+32|0;F=m;G=m+124|0;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=j;c[t>>2]=k;c[u>>2]=c[s>>2];c[v>>2]=(c[u>>2]|0)+8;b[A>>1]=256;if(c[s>>2]&3|0){c[n>>2]=-1;H=c[n>>2]|0;l=m;return H|0;}if((c[t>>2]|0)>>>0<4096){c[n>>2]=-66;H=c[n>>2]|0;l=m;return H|0;}if(!(c[r>>2]|0))c[r>>2]=11;if((c[q>>2]|0)>>>0>255){c[n>>2]=-46;H=c[n>>2]|0;l=m;return H|0;}oE(c[u>>2]|0,0,4096)|0;Li(c[v>>2]|0,c[p>>2]|0,c[q>>2]|0);c[x>>2]=c[q>>2];while(1){I=c[x>>2]|0;if(c[(c[v>>2]|0)+(c[x>>2]<<3)>>2]|0)break;c[x>>2]=I+-1;}c[y>>2]=I;c[B>>2]=(e[A>>1]|0)+(c[y>>2]|0)-1;c[z>>2]=e[A>>1];c[(c[v>>2]|0)+((e[A>>1]|0)<<3)>>2]=(c[(c[v>>2]|0)+(c[y>>2]<<3)>>2]|0)+(c[(c[v>>2]|0)+((c[y>>2]|0)-1<<3)>>2]|0);I=b[A>>1]|0;b[(c[v>>2]|0)+((c[y>>2]|0)-1<<3)+4>>1]=I;b[(c[v>>2]|0)+(c[y>>2]<<3)+4>>1]=I;b[A>>1]=(b[A>>1]|0)+1<<16>>16;c[y>>2]=(c[y>>2]|0)-2;c[w>>2]=e[A>>1];while(1){if((c[w>>2]|0)>>>0>(c[B>>2]|0)>>>0)break;c[(c[v>>2]|0)+(c[w>>2]<<3)>>2]=1073741824;c[w>>2]=(c[w>>2]|0)+1;}c[c[u>>2]>>2]=-2147483648;while(1){J=c[v>>2]|0;if((e[A>>1]|0)>>>0>(c[B>>2]|0)>>>0)break;if((c[J+(c[y>>2]<<3)>>2]|0)>>>0<(c[(c[v>>2]|0)+(c[z>>2]<<3)>>2]|0)>>>0){u=c[y>>2]|0;c[y>>2]=u+-1;K=u;}else{u=c[z>>2]|0;c[z>>2]=u+1;K=u;}c[C>>2]=K;if((c[(c[v>>2]|0)+(c[y>>2]<<3)>>2]|0)>>>0<(c[(c[v>>2]|0)+(c[z>>2]<<3)>>2]|0)>>>0){u=c[y>>2]|0;c[y>>2]=u+-1;L=u;}else{u=c[z>>2]|0;c[z>>2]=u+1;L=u;}c[D>>2]=L;c[(c[v>>2]|0)+((e[A>>1]|0)<<3)>>2]=(c[(c[v>>2]|0)+(c[C>>2]<<3)>>2]|0)+(c[(c[v>>2]|0)+(c[D>>2]<<3)>>2]|0);u=b[A>>1]|0;b[(c[v>>2]|0)+(c[D>>2]<<3)+4>>1]=u;b[(c[v>>2]|0)+(c[C>>2]<<3)+4>>1]=u;b[A>>1]=(b[A>>1]|0)+1<<16>>16;}a[J+(c[B>>2]<<3)+7>>0]=0;c[w>>2]=(c[B>>2]|0)-1;while(1){if((c[w>>2]|0)>>>0<256)break;a[(c[v>>2]|0)+(c[w>>2]<<3)+7>>0]=(d[(c[v>>2]|0)+((e[(c[v>>2]|0)+(c[w>>2]<<3)+4>>1]|0)<<3)+7>>0]|0)+1;c[w>>2]=(c[w>>2]|0)+-1;}c[w>>2]=0;while(1){M=c[v>>2]|0;if((c[w>>2]|0)>>>0>(c[x>>2]|0)>>>0)break;a[(c[v>>2]|0)+(c[w>>2]<<3)+7>>0]=(d[M+((e[(c[v>>2]|0)+(c[w>>2]<<3)+4>>1]|0)<<3)+7>>0]|0)+1;c[w>>2]=(c[w>>2]|0)+1;}c[r>>2]=Mi(M,c[x>>2]|0,c[r>>2]|0)|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;c[E+16>>2]=0;c[E+20>>2]=0;b[E+24>>1]=0;c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;c[F+16>>2]=0;c[F+20>>2]=0;b[F+24>>1]=0;if((c[r>>2]|0)>>>0>12){c[n>>2]=-1;H=c[n>>2]|0;l=m;return H|0;}c[w>>2]=0;while(1){if((c[w>>2]|0)>>>0>(c[x>>2]|0)>>>0)break;M=E+((d[(c[v>>2]|0)+(c[w>>2]<<3)+7>>0]|0)<<1)|0;b[M>>1]=(b[M>>1]|0)+1<<16>>16;c[w>>2]=(c[w>>2]|0)+1;}b[G>>1]=0;c[w>>2]=c[r>>2];while(1){if((c[w>>2]|0)>>>0<=0)break;b[F+(c[w>>2]<<1)>>1]=b[G>>1]|0;b[G>>1]=(e[G>>1]|0)+(e[E+(c[w>>2]<<1)>>1]|0);b[G>>1]=(e[G>>1]|0)>>1;c[w>>2]=(c[w>>2]|0)+-1;}c[w>>2]=0;while(1){if((c[w>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;a[(c[o>>2]|0)+((d[(c[v>>2]|0)+(c[w>>2]<<3)+6>>0]|0)<<2)+2>>0]=a[(c[v>>2]|0)+(c[w>>2]<<3)+7>>0]|0;c[w>>2]=(c[w>>2]|0)+1;}c[w>>2]=0;while(1){if((c[w>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;v=F+((d[(c[o>>2]|0)+(c[w>>2]<<2)+2>>0]|0)<<1)|0;G=b[v>>1]|0;b[v>>1]=G+1<<16>>16;b[(c[o>>2]|0)+(c[w>>2]<<2)>>1]=G;c[w>>2]=(c[w>>2]|0)+1;}c[n>>2]=c[r>>2];H=c[n>>2]|0;l=m;return H|0;}function Li(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+288|0;g=f+284|0;h=f+280|0;i=f+276|0;j=f;k=f+272|0;m=f+268|0;n=f+264|0;o=f+260|0;p=f+256|0;c[g>>2]=b;c[h>>2]=d;c[i>>2]=e;oE(j|0,0,256)|0;c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0)break;c[m>>2]=Ni((c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)+1|0)|0;e=j+(c[m>>2]<<3)|0;c[e>>2]=(c[e>>2]|0)+1;c[k>>2]=(c[k>>2]|0)+1;}c[k>>2]=30;while(1){if((c[k>>2]|0)>>>0<=0)break;m=j+((c[k>>2]|0)-1<<3)|0;c[m>>2]=(c[m>>2]|0)+(c[j+(c[k>>2]<<3)>>2]|0);c[k>>2]=(c[k>>2]|0)+-1;}c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>=32)break;c[j+(c[k>>2]<<3)+4>>2]=c[j+(c[k>>2]<<3)>>2];c[k>>2]=(c[k>>2]|0)+1;}c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0)break;c[n>>2]=c[(c[h>>2]|0)+(c[k>>2]<<2)>>2];c[o>>2]=(Ni((c[n>>2]|0)+1|0)|0)+1;m=j+(c[o>>2]<<3)+4|0;e=c[m>>2]|0;c[m>>2]=e+1;c[p>>2]=e;while(1){if((c[p>>2]|0)>>>0<=(c[j+(c[o>>2]<<3)>>2]|0)>>>0)break;if((c[n>>2]|0)>>>0<=(c[(c[g>>2]|0)+((c[p>>2]|0)-1<<3)>>2]|0)>>>0)break;e=(c[g>>2]|0)+(c[p>>2]<<3)|0;m=(c[g>>2]|0)+((c[p>>2]|0)-1<<3)|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[p>>2]=(c[p>>2]|0)+-1;}c[(c[g>>2]|0)+(c[p>>2]<<3)>>2]=c[n>>2];a[(c[g>>2]|0)+(c[p>>2]<<3)+6>>0]=c[k>>2];c[k>>2]=(c[k>>2]|0)+1;}l=f;return;}function Mi(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=l;l=l+128|0;h=g+116|0;i=g+112|0;j=g+108|0;k=g+104|0;m=g+100|0;n=g+96|0;o=g+92|0;p=g+88|0;q=g+84|0;r=g;s=g+80|0;t=g+76|0;u=g+72|0;v=g+68|0;w=g+64|0;x=g+60|0;y=g+56|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=d[(c[i>>2]|0)+(c[j>>2]<<3)+7>>0];if((c[m>>2]|0)>>>0<=(c[k>>2]|0)>>>0){c[h>>2]=c[m>>2];z=c[h>>2]|0;l=g;return z|0;}c[n>>2]=0;c[o>>2]=1<<(c[m>>2]|0)-(c[k>>2]|0);c[p>>2]=c[j>>2];while(1){if((d[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]|0)>>>0<=(c[k>>2]|0)>>>0)break;c[n>>2]=(c[n>>2]|0)+((c[o>>2]|0)-(1<<(c[m>>2]|0)-(d[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]|0)));a[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]=c[k>>2];c[p>>2]=(c[p>>2]|0)+-1;}while(1){if((d[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]|0|0)!=(c[k>>2]|0))break;c[p>>2]=(c[p>>2]|0)+-1;}c[n>>2]=c[n>>2]>>(c[m>>2]|0)-(c[k>>2]|0);c[q>>2]=-252645136;q=r;m=q+56|0;do{c[q>>2]=-252645136;q=q+4|0;}while((q|0)<(m|0));c[t>>2]=c[k>>2];c[s>>2]=c[p>>2];while(1){if((c[s>>2]|0)<0)break;if((d[(c[i>>2]|0)+(c[s>>2]<<3)+7>>0]|0)>>>0<(c[t>>2]|0)>>>0){c[t>>2]=d[(c[i>>2]|0)+(c[s>>2]<<3)+7>>0];c[r+((c[k>>2]|0)-(c[t>>2]|0)<<2)>>2]=c[s>>2];}c[s>>2]=(c[s>>2]|0)+-1;}while(1){if((c[n>>2]|0)<=0)break;c[u>>2]=(Ni(c[n>>2]|0)|0)+1;while(1){if((c[u>>2]|0)>>>0<=1)break;c[v>>2]=c[r+(c[u>>2]<<2)>>2];c[w>>2]=c[r+((c[u>>2]|0)-1<<2)>>2];if((c[v>>2]|0)!=-252645136){if((c[w>>2]|0)==-252645136)break;c[x>>2]=c[(c[i>>2]|0)+(c[v>>2]<<3)>>2];c[y>>2]=c[(c[i>>2]|0)+(c[w>>2]<<3)>>2]<<1;if((c[x>>2]|0)>>>0<=(c[y>>2]|0)>>>0)break;}c[u>>2]=(c[u>>2]|0)+-1;}while(1){if((c[u>>2]|0)>>>0<=12)A=(c[r+(c[u>>2]<<2)>>2]|0)==-252645136;else A=0;B=c[u>>2]|0;if(!A)break;c[u>>2]=B+1;}c[n>>2]=(c[n>>2]|0)-(1<<B-1);if((c[r+((c[u>>2]|0)-1<<2)>>2]|0)==-252645136)c[r+((c[u>>2]|0)-1<<2)>>2]=c[r+(c[u>>2]<<2)>>2];s=(c[i>>2]|0)+(c[r+(c[u>>2]<<2)>>2]<<3)+7|0;a[s>>0]=(a[s>>0]|0)+1<<24>>24;s=r+(c[u>>2]<<2)|0;if(c[r+(c[u>>2]<<2)>>2]|0){c[s>>2]=(c[s>>2]|0)+-1;if((d[(c[i>>2]|0)+(c[r+(c[u>>2]<<2)>>2]<<3)+7>>0]|0|0)!=((c[k>>2]|0)-(c[u>>2]|0)|0))c[r+(c[u>>2]<<2)>>2]=-252645136;}else c[s>>2]=-252645136;}while(1){if((c[n>>2]|0)>=0)break;if((c[r+4>>2]|0)!=-252645136){u=(c[i>>2]|0)+((c[r+4>>2]|0)+1<<3)+7|0;a[u>>0]=(a[u>>0]|0)+-1<<24>>24;u=r+4|0;c[u>>2]=(c[u>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1;continue;}while(1){if((d[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]|0|0)!=(c[k>>2]|0))break;c[p>>2]=(c[p>>2]|0)+-1;}u=(c[i>>2]|0)+((c[p>>2]|0)+1<<3)+7|0;a[u>>0]=(a[u>>0]|0)+-1<<24>>24;c[r+4>>2]=(c[p>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1;}c[h>>2]=c[k>>2];z=c[h>>2]|0;l=g;return z|0;}function Ni(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Oi(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=Pi(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=Qi(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function Pi(a,b,f,g,h){a=a|0;b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;i=l;l=l+176|0;j=i+168|0;k=i+164|0;m=i+160|0;n=i+156|0;o=i+152|0;p=i+148|0;q=i+144|0;r=i+140|0;s=i+136|0;t=i+132|0;u=i+128|0;v=i+124|0;w=i+120|0;x=i+116|0;y=i+112|0;z=i+108|0;A=i+104|0;B=i+100|0;C=i+96|0;D=i+92|0;E=i+88|0;F=i+84|0;G=i+80|0;H=i+76|0;I=i+72|0;J=i+68|0;K=i+64|0;L=i+60|0;M=i+56|0;N=i+52|0;O=i+48|0;P=i+44|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[S>>2]=a;c[T>>2]=b;c[U>>2]=f;c[V>>2]=g;c[W>>2]=h;h=c[T>>2]|0;T=c[U>>2]|0;U=c[V>>2]|0;V=c[W>>2]|0;c[G>>2]=c[S>>2];c[H>>2]=h;c[I>>2]=T;c[J>>2]=U;c[K>>2]=V;c[L>>2]=c[I>>2];c[M>>2]=c[G>>2];c[N>>2]=(c[M>>2]|0)+(c[H>>2]|0);c[O>>2]=c[M>>2];if((c[H>>2]|0)>>>0<8){c[F>>2]=0;X=c[F>>2]|0;l=i;return X|0;}c[R>>2]=Ri(Q,c[O>>2]|0,(c[N>>2]|0)-(c[O>>2]|0)|0)|0;if(Hi(c[R>>2]|0)|0){c[F>>2]=0;X=c[F>>2]|0;l=i;return X|0;}c[P>>2]=c[J>>2]&-4;switch(c[J>>2]&3|0){case 3:{J=d[(c[L>>2]|0)+((c[P>>2]|0)+2)>>0]|0;R=c[K>>2]|0;c[C>>2]=Q;c[D>>2]=J;c[E>>2]=R;Si(c[C>>2]|0,e[(c[E>>2]|0)+(c[D>>2]<<2)>>1]|0,d[(c[E>>2]|0)+(c[D>>2]<<2)+2>>0]|0);Ti(Q);Y=7;break;}case 2:{Y=7;break;}case 1:{Y=8;break;}case 0:break;default:{}}if((Y|0)==7){D=d[(c[L>>2]|0)+((c[P>>2]|0)+1)>>0]|0;E=c[K>>2]|0;c[z>>2]=Q;c[A>>2]=D;c[B>>2]=E;Si(c[z>>2]|0,e[(c[B>>2]|0)+(c[A>>2]<<2)>>1]|0,d[(c[B>>2]|0)+(c[A>>2]<<2)+2>>0]|0);Y=8;}if((Y|0)==8){Y=d[(c[L>>2]|0)+(c[P>>2]|0)>>0]|0;A=c[K>>2]|0;c[w>>2]=Q;c[x>>2]=Y;c[y>>2]=A;Si(c[w>>2]|0,e[(c[y>>2]|0)+(c[x>>2]<<2)>>1]|0,d[(c[y>>2]|0)+(c[x>>2]<<2)+2>>0]|0);Ti(Q);}while(1){if((c[P>>2]|0)>>>0<=0)break;x=d[(c[L>>2]|0)+((c[P>>2]|0)-1)>>0]|0;y=c[K>>2]|0;c[t>>2]=Q;c[u>>2]=x;c[v>>2]=y;Si(c[t>>2]|0,e[(c[v>>2]|0)+(c[u>>2]<<2)>>1]|0,d[(c[v>>2]|0)+(c[u>>2]<<2)+2>>0]|0);y=d[(c[L>>2]|0)+((c[P>>2]|0)-2)>>0]|0;x=c[K>>2]|0;c[q>>2]=Q;c[r>>2]=y;c[s>>2]=x;Si(c[q>>2]|0,e[(c[s>>2]|0)+(c[r>>2]<<2)>>1]|0,d[(c[s>>2]|0)+(c[r>>2]<<2)+2>>0]|0);Ti(Q);x=d[(c[L>>2]|0)+((c[P>>2]|0)-3)>>0]|0;y=c[K>>2]|0;c[n>>2]=Q;c[o>>2]=x;c[p>>2]=y;Si(c[n>>2]|0,e[(c[p>>2]|0)+(c[o>>2]<<2)>>1]|0,d[(c[p>>2]|0)+(c[o>>2]<<2)+2>>0]|0);y=d[(c[L>>2]|0)+((c[P>>2]|0)-4)>>0]|0;x=c[K>>2]|0;c[j>>2]=Q;c[k>>2]=y;c[m>>2]=x;Si(c[j>>2]|0,e[(c[m>>2]|0)+(c[k>>2]<<2)>>1]|0,d[(c[m>>2]|0)+(c[k>>2]<<2)+2>>0]|0);Ti(Q);c[P>>2]=(c[P>>2]|0)-4;}c[F>>2]=Ui(Q)|0;X=c[F>>2]|0;l=i;return X|0;}function Qi(a,b,f,g,h){a=a|0;b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;i=l;l=l+176|0;j=i+168|0;k=i+164|0;m=i+160|0;n=i+156|0;o=i+152|0;p=i+148|0;q=i+144|0;r=i+140|0;s=i+136|0;t=i+132|0;u=i+128|0;v=i+124|0;w=i+120|0;x=i+116|0;y=i+112|0;z=i+108|0;A=i+104|0;B=i+100|0;C=i+96|0;D=i+92|0;E=i+88|0;F=i+84|0;G=i+80|0;H=i+76|0;I=i+72|0;J=i+68|0;K=i+64|0;L=i+60|0;M=i+56|0;N=i+52|0;O=i+48|0;P=i+44|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[S>>2]=a;c[T>>2]=b;c[U>>2]=f;c[V>>2]=g;c[W>>2]=h;h=c[T>>2]|0;T=c[U>>2]|0;U=c[V>>2]|0;V=c[W>>2]|0;c[G>>2]=c[S>>2];c[H>>2]=h;c[I>>2]=T;c[J>>2]=U;c[K>>2]=V;c[L>>2]=c[I>>2];c[M>>2]=c[G>>2];c[N>>2]=(c[M>>2]|0)+(c[H>>2]|0);c[O>>2]=c[M>>2];if((c[H>>2]|0)>>>0<8){c[F>>2]=0;X=c[F>>2]|0;l=i;return X|0;}c[R>>2]=Ri(Q,c[O>>2]|0,(c[N>>2]|0)-(c[O>>2]|0)|0)|0;if(Hi(c[R>>2]|0)|0){c[F>>2]=0;X=c[F>>2]|0;l=i;return X|0;}c[P>>2]=c[J>>2]&-4;switch(c[J>>2]&3|0){case 3:{J=d[(c[L>>2]|0)+((c[P>>2]|0)+2)>>0]|0;R=c[K>>2]|0;c[C>>2]=Q;c[D>>2]=J;c[E>>2]=R;Si(c[C>>2]|0,e[(c[E>>2]|0)+(c[D>>2]<<2)>>1]|0,d[(c[E>>2]|0)+(c[D>>2]<<2)+2>>0]|0);Ti(Q);Y=7;break;}case 2:{Y=7;break;}case 1:{Y=8;break;}case 0:break;default:{}}if((Y|0)==7){D=d[(c[L>>2]|0)+((c[P>>2]|0)+1)>>0]|0;E=c[K>>2]|0;c[z>>2]=Q;c[A>>2]=D;c[B>>2]=E;Si(c[z>>2]|0,e[(c[B>>2]|0)+(c[A>>2]<<2)>>1]|0,d[(c[B>>2]|0)+(c[A>>2]<<2)+2>>0]|0);Y=8;}if((Y|0)==8){Y=d[(c[L>>2]|0)+(c[P>>2]|0)>>0]|0;A=c[K>>2]|0;c[w>>2]=Q;c[x>>2]=Y;c[y>>2]=A;Si(c[w>>2]|0,e[(c[y>>2]|0)+(c[x>>2]<<2)>>1]|0,d[(c[y>>2]|0)+(c[x>>2]<<2)+2>>0]|0);Ti(Q);}while(1){if((c[P>>2]|0)>>>0<=0)break;x=d[(c[L>>2]|0)+((c[P>>2]|0)-1)>>0]|0;y=c[K>>2]|0;c[t>>2]=Q;c[u>>2]=x;c[v>>2]=y;Si(c[t>>2]|0,e[(c[v>>2]|0)+(c[u>>2]<<2)>>1]|0,d[(c[v>>2]|0)+(c[u>>2]<<2)+2>>0]|0);y=d[(c[L>>2]|0)+((c[P>>2]|0)-2)>>0]|0;x=c[K>>2]|0;c[q>>2]=Q;c[r>>2]=y;c[s>>2]=x;Si(c[q>>2]|0,e[(c[s>>2]|0)+(c[r>>2]<<2)>>1]|0,d[(c[s>>2]|0)+(c[r>>2]<<2)+2>>0]|0);Ti(Q);x=d[(c[L>>2]|0)+((c[P>>2]|0)-3)>>0]|0;y=c[K>>2]|0;c[n>>2]=Q;c[o>>2]=x;c[p>>2]=y;Si(c[n>>2]|0,e[(c[p>>2]|0)+(c[o>>2]<<2)>>1]|0,d[(c[p>>2]|0)+(c[o>>2]<<2)+2>>0]|0);y=d[(c[L>>2]|0)+((c[P>>2]|0)-4)>>0]|0;x=c[K>>2]|0;c[j>>2]=Q;c[k>>2]=y;c[m>>2]=x;Si(c[j>>2]|0,e[(c[m>>2]|0)+(c[k>>2]<<2)>>1]|0,d[(c[m>>2]|0)+(c[k>>2]<<2)+2>>0]|0);Ti(Q);c[P>>2]=(c[P>>2]|0)-4;}c[F>>2]=Ui(Q)|0;X=c[F>>2]|0;l=i;return X|0;}function Ri(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[c[g>>2]>>2]=0;c[(c[g>>2]|0)+4>>2]=0;c[(c[g>>2]|0)+8>>2]=c[h>>2];c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+8>>2];c[(c[g>>2]|0)+16>>2]=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]|0)+-4;if((c[i>>2]|0)>>>0<=4){c[f>>2]=-70;j=c[f>>2]|0;l=e;return j|0;}else{c[f>>2]=0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function Si(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|c[g>>2]<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Ti(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[(c[d>>2]|0)+4>>2]|0)>>>3;Vi(c[(c[d>>2]|0)+12>>2]|0,c[c[d>>2]>>2]|0);a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);if((c[(c[d>>2]|0)+12>>2]|0)>>>0>(c[(c[d>>2]|0)+16>>2]|0)>>>0)c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+16>>2];a=(c[d>>2]|0)+4|0;c[a>>2]=c[a>>2]&7;a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)>>>(c[e>>2]<<3);l=b;return;}function Ui(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;Si(c[e>>2]|0,1,1);Ti(c[e>>2]|0);if((c[(c[e>>2]|0)+12>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{c[d>>2]=(c[(c[e>>2]|0)+12>>2]|0)-(c[(c[e>>2]|0)+8>>2]|0)+((c[(c[e>>2]|0)+4>>2]|0)>>>0>0&1);f=c[d>>2]|0;l=b;return f|0;}return 0;}function Vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(Wi()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){Xi(a,e);l=d;return;}else{Yi(a,e,0);l=d;return;}}function Wi(){return 1;}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(Zi()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){aj(a,e);l=d;return;}else{aj(a,bj(e)|0);l=d;return;}}function Yi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=(Zi()|0)!=0;a=c[f>>2]|0;f=g;g=c[f>>2]|0;b=c[f+4>>2]|0;if(d){_i(a,g,b);l=e;return;}else{d=$i(g,b)|0;_i(a,d,y);l=e;return;}}function Zi(){return d[11936]|0|0;}function _i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+8|0;h=f;c[g>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;h=c[e>>2]|0;b=c[e+4>>2]|0;e=c[g>>2]|0;g=e;a[g>>0]=h;a[g+1>>0]=h>>8;a[g+2>>0]=h>>16;a[g+3>>0]=h>>24;h=e+4|0;a[h>>0]=b;a[h+1>>0]=b>>8;a[h+2>>0]=b>>16;a[h+3>>0]=b>>24;l=f;return;}function $i(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function aj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[g>>2]|0;g=c[f>>2]|0;a[g>>0]=d;a[g+1>>0]=d>>8;a[g+2>>0]=d>>16;a[g+3>>0]=d>>24;l=e;return;}function bj(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function cj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=(((c[n>>2]|0)+3|0)>>>0)/4|0;c[r>>2]=c[m>>2];c[s>>2]=(c[r>>2]|0)+(c[n>>2]|0);c[t>>2]=c[j>>2];c[u>>2]=(c[t>>2]|0)+(c[k>>2]|0);c[v>>2]=c[t>>2];if((c[k>>2]|0)>>>0<17){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}if((c[n>>2]|0)>>>0<12){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}c[v>>2]=(c[v>>2]|0)+6;c[w>>2]=Oi(c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,c[r>>2]|0,c[q>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;n=(Hi(c[w>>2]|0)|0)!=0;k=c[w>>2]|0;if(n){c[i>>2]=k;A=c[i>>2]|0;l=h;return A|0;}if(!k){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}dj(c[t>>2]|0,c[w>>2]&65535);c[v>>2]=(c[v>>2]|0)+(c[w>>2]|0);c[r>>2]=(c[r>>2]|0)+(c[q>>2]|0);c[x>>2]=Oi(c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,c[r>>2]|0,c[q>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;w=(Hi(c[x>>2]|0)|0)!=0;k=c[x>>2]|0;if(w){c[i>>2]=k;A=c[i>>2]|0;l=h;return A|0;}if(!k){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}dj((c[t>>2]|0)+2|0,c[x>>2]&65535);c[v>>2]=(c[v>>2]|0)+(c[x>>2]|0);c[r>>2]=(c[r>>2]|0)+(c[q>>2]|0);c[y>>2]=Oi(c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,c[r>>2]|0,c[q>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;x=(Hi(c[y>>2]|0)|0)!=0;k=c[y>>2]|0;if(x){c[i>>2]=k;A=c[i>>2]|0;l=h;return A|0;}if(!k){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}dj((c[t>>2]|0)+4|0,c[y>>2]&65535);c[v>>2]=(c[v>>2]|0)+(c[y>>2]|0);c[r>>2]=(c[r>>2]|0)+(c[q>>2]|0);c[z>>2]=Oi(c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[p>>2]|0)|0;p=(Hi(c[z>>2]|0)|0)!=0;o=c[z>>2]|0;if(p){c[i>>2]=o;A=c[i>>2]|0;l=h;return A|0;}if(!o){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}else{c[v>>2]=(c[v>>2]|0)+(c[z>>2]|0);c[i>>2]=(c[v>>2]|0)-(c[t>>2]|0);A=c[i>>2]|0;l=h;return A|0;}return 0;}function dj(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Zi()|0)!=0;d=c[h>>2]|0;if(f){ej(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function ej(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=b[h>>1]|0;h=c[g>>2]|0;a[h>>0]=e;a[h+1>>0]=e>>8;l=f;return;}function fj(b,d,e,f,g,h,i,j,k,m,n,o,p){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;q=l;l=l+96|0;r=q+88|0;s=q+84|0;t=q+80|0;u=q+76|0;v=q+72|0;w=q+68|0;x=q+64|0;y=q+60|0;z=q+56|0;A=q+52|0;B=q+48|0;C=q+44|0;D=q+40|0;E=q+36|0;F=q+32|0;G=q+28|0;H=q+24|0;I=q+20|0;J=q+16|0;K=q+12|0;L=q+8|0;M=q+4|0;N=q;c[s>>2]=b;c[t>>2]=d;c[u>>2]=e;c[v>>2]=f;c[w>>2]=g;c[x>>2]=h;c[y>>2]=i;c[z>>2]=j;c[A>>2]=k;c[B>>2]=m;c[C>>2]=n;c[D>>2]=o;c[E>>2]=p;c[F>>2]=c[z>>2];c[G>>2]=c[s>>2];c[H>>2]=(c[G>>2]|0)+(c[t>>2]|0);c[I>>2]=c[G>>2];if(c[z>>2]&3|0){c[r>>2]=-1;O=c[r>>2]|0;l=q;return O|0;}if((c[A>>2]|0)>>>0<6144){c[r>>2]=-66;O=c[r>>2]|0;l=q;return O|0;}if(!(c[v>>2]|0)){c[r>>2]=0;O=c[r>>2]|0;l=q;return O|0;}if(!(c[t>>2]|0)){c[r>>2]=0;O=c[r>>2]|0;l=q;return O|0;}if((c[v>>2]|0)>>>0>131072){c[r>>2]=-72;O=c[r>>2]|0;l=q;return O|0;}if((c[x>>2]|0)>>>0>12){c[r>>2]=-44;O=c[r>>2]|0;l=q;return O|0;}if((c[w>>2]|0)>>>0>255){c[r>>2]=-46;O=c[r>>2]|0;l=q;return O|0;}if(!(c[w>>2]|0))c[w>>2]=255;if(!(c[x>>2]|0))c[x>>2]=11;if((c[D>>2]|0)!=0&(c[C>>2]|0)!=0?(c[c[C>>2]>>2]|0)==2:0){c[r>>2]=gj(c[G>>2]|0,c[I>>2]|0,c[H>>2]|0,c[u>>2]|0,c[v>>2]|0,c[y>>2]|0,c[B>>2]|0,c[E>>2]|0)|0;O=c[r>>2]|0;l=q;return O|0;}c[J>>2]=bi(c[F>>2]|0,w,c[u>>2]|0,c[v>>2]|0,c[F>>2]|0)|0;A=(Hi(c[J>>2]|0)|0)!=0;z=c[J>>2]|0;if(A){c[r>>2]=z;O=c[r>>2]|0;l=q;return O|0;}if((z|0)==(c[v>>2]|0)){a[c[G>>2]>>0]=a[c[u>>2]>>0]|0;c[r>>2]=1;O=c[r>>2]|0;l=q;return O|0;}if((c[J>>2]|0)>>>0<=(((c[v>>2]|0)>>>7)+1|0)>>>0){c[r>>2]=0;O=c[r>>2]|0;l=q;return O|0;}if((c[C>>2]|0?(c[c[C>>2]>>2]|0)==1:0)?(hj(c[B>>2]|0,c[F>>2]|0,c[w>>2]|0)|0)==0:0)c[c[C>>2]>>2]=0;if((c[D>>2]|0)!=0&(c[C>>2]|0)!=0?c[c[C>>2]>>2]|0:0){c[r>>2]=gj(c[G>>2]|0,c[I>>2]|0,c[H>>2]|0,c[u>>2]|0,c[v>>2]|0,c[y>>2]|0,c[B>>2]|0,c[E>>2]|0)|0;O=c[r>>2]|0;l=q;return O|0;}c[x>>2]=Fi(c[x>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;c[K>>2]=Ki((c[F>>2]|0)+1024|0,c[F>>2]|0,c[w>>2]|0,c[x>>2]|0,(c[F>>2]|0)+2048|0,4096)|0;D=(Hi(c[K>>2]|0)|0)!=0;J=c[K>>2]|0;if(D){c[r>>2]=J;O=c[r>>2]|0;l=q;return O|0;}c[x>>2]=J;oE((c[F>>2]|0)+1024+((c[w>>2]|0)+1<<2)|0,0,1024-((c[w>>2]|0)+1<<2)|0)|0;c[L>>2]=Ii(c[I>>2]|0,c[t>>2]|0,(c[F>>2]|0)+1024|0,c[w>>2]|0,c[x>>2]|0)|0;if(Hi(c[L>>2]|0)|0){c[r>>2]=c[L>>2];O=c[r>>2]|0;l=q;return O|0;}do{if(c[C>>2]|0?c[c[C>>2]>>2]|0:0){c[M>>2]=ij(c[B>>2]|0,c[F>>2]|0,c[w>>2]|0)|0;c[N>>2]=ij((c[F>>2]|0)+1024|0,c[F>>2]|0,c[w>>2]|0)|0;if((c[M>>2]|0)>>>0>((c[L>>2]|0)+(c[N>>2]|0)|0)>>>0?((c[L>>2]|0)+12|0)>>>0<(c[v>>2]|0)>>>0:0)break;c[r>>2]=gj(c[G>>2]|0,c[I>>2]|0,c[H>>2]|0,c[u>>2]|0,c[v>>2]|0,c[y>>2]|0,c[B>>2]|0,c[E>>2]|0)|0;O=c[r>>2]|0;l=q;return O|0;}}while(0);if(((c[L>>2]|0)+12|0)>>>0>=(c[v>>2]|0)>>>0){c[r>>2]=0;O=c[r>>2]|0;l=q;return O|0;}c[I>>2]=(c[I>>2]|0)+(c[L>>2]|0);if(c[C>>2]|0)c[c[C>>2]>>2]=0;if(c[B>>2]|0)mE(c[B>>2]|0,(c[F>>2]|0)+1024|0,1024)|0;c[r>>2]=gj(c[G>>2]|0,c[I>>2]|0,c[H>>2]|0,c[u>>2]|0,c[v>>2]|0,c[y>>2]|0,(c[F>>2]|0)+1024|0,c[E>>2]|0)|0;O=c[r>>2]|0;l=q;return O|0;}function gj(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+36|0;m=j+32|0;n=j+28|0;o=j+24|0;p=j+20|0;q=j+16|0;r=j+12|0;s=j+8|0;t=j+4|0;u=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;i=c[n>>2]|0;h=(c[o>>2]|0)-(c[n>>2]|0)|0;o=c[p>>2]|0;p=c[q>>2]|0;g=c[s>>2]|0;s=c[t>>2]|0;if(c[r>>2]|0)v=Oi(i,h,o,p,g,s)|0;else v=cj(i,h,o,p,g,s)|0;c[u>>2]=v;v=(Hi(c[u>>2]|0)|0)!=0;s=c[u>>2]|0;if(v){c[k>>2]=s;w=c[k>>2]|0;l=j;return w|0;}if(!s){c[k>>2]=0;w=c[k>>2]|0;l=j;return w|0;}c[n>>2]=(c[n>>2]|0)+(c[u>>2]|0);if(((c[n>>2]|0)-(c[m>>2]|0)|0)>>>0>=((c[q>>2]|0)-1|0)>>>0){c[k>>2]=0;w=c[k>>2]|0;l=j;return w|0;}else{c[k>>2]=(c[n>>2]|0)-(c[m>>2]|0);w=c[k>>2]|0;l=j;return w|0;}return 0;}function hj(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=e;c[j>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>(c[i>>2]|0))break;c[j>>2]=c[j>>2]|(c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0?(d[(c[g>>2]|0)+(c[k>>2]<<2)+2>>0]|0|0)==0:0);c[k>>2]=(c[k>>2]|0)+1;}l=f;return((c[j>>2]|0)!=0^1)&1|0;}function ij(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=e;c[j>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>(c[i>>2]|0))break;e=N(d[(c[g>>2]|0)+(c[k>>2]<<2)+2>>0]|0,c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+e;c[k>>2]=(c[k>>2]|0)+1;}l=f;return(c[j>>2]|0)>>>3|0;}function jj(a,b,d,e,f,g,h,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;o=l;l=l+48|0;p=o+44|0;q=o+40|0;r=o+36|0;s=o+32|0;t=o+28|0;u=o+24|0;v=o+20|0;w=o+16|0;x=o+12|0;y=o+8|0;z=o+4|0;A=o;c[p>>2]=a;c[q>>2]=b;c[r>>2]=d;c[s>>2]=e;c[t>>2]=f;c[u>>2]=g;c[v>>2]=h;c[w>>2]=i;c[x>>2]=j;c[y>>2]=k;c[z>>2]=m;c[A>>2]=n;n=fj(c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,1,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;l=o;return n|0;}function kj(a,b,d,e,f,g,h,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;o=l;l=l+48|0;p=o+44|0;q=o+40|0;r=o+36|0;s=o+32|0;t=o+28|0;u=o+24|0;v=o+20|0;w=o+16|0;x=o+12|0;y=o+8|0;z=o+4|0;A=o;c[p>>2]=a;c[q>>2]=b;c[r>>2]=d;c[s>>2]=e;c[t>>2]=f;c[u>>2]=g;c[v>>2]=h;c[w>>2]=i;c[x>>2]=j;c[y>>2]=k;c[z>>2]=m;c[A>>2]=n;n=fj(c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,0,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;l=o;return n|0;}function lj(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=(c[d>>2]|0)+((c[d>>2]|0)>>>8)|0;if((c[d>>2]|0)>>>0>=131072){e=0;f=a+e|0;l=b;return f|0;}e=(131072-(c[d>>2]|0)|0)>>>11;f=a+e|0;l=b;return f|0;}function mj(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[5406];c[b+4>>2]=c[5407];c[b+8>>2]=c[5408];d=nj(b)|0;l=a;return d|0;}function nj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+48|0;d=b+24|0;e=b+20|0;f=b+16|0;g=b;if(((c[a>>2]|0)!=0^1)&1^((c[a+4>>2]|0)!=0^1)&1|0){c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;};c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[f>>2]=Sh(656,d)|0;if(c[f>>2]|0){i=(c[f>>2]|0)+352|0;c[i>>2]=c[a>>2];c[i+4>>2]=c[a+4>>2];c[i+8>>2]=c[a+8>>2];c[(c[f>>2]|0)+12+44>>2]=3;c[(c[f>>2]|0)+12+32>>2]=1;oj(g);c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];g=pj(d)|0;c[(c[f>>2]|0)+8>>2]=g;c[e>>2]=c[f>>2];h=c[e>>2]|0;l=b;return h|0;}else{c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}return 0;}function oj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+28|0;e=b+24|0;f=b+20|0;g=b+16|0;h=b;c[d>>2]=0;c[e>>2]=0;c[f>>2]=0;c[g>>2]=0;c[h>>2]=c[d>>2];c[h+4>>2]=c[e>>2];c[h+8>>2]=c[f>>2];c[h+12>>2]=c[g>>2];c[a>>2]=c[h>>2];c[a+4>>2]=c[h+4>>2];c[a+8>>2]=c[h+8>>2];c[a+12>>2]=c[h+12>>2];l=b;return;}function pj(a){a=a|0;return(c[a+8>>2]&256|0)!=0|0;}function qj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+8|0;e=b+4|0;f=b;c[f>>2]=a;if(!(c[f>>2]|0)){c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}if(c[(c[f>>2]|0)+364>>2]|0){c[e>>2]=-64;g=c[e>>2]|0;l=b;return g|0;}else{a=c[(c[f>>2]|0)+224>>2]|0;h=(c[f>>2]|0)+352|0;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];Th(a,d);c[(c[f>>2]|0)+224>>2]=0;rj(c[(c[f>>2]|0)+636>>2]|0)|0;c[(c[f>>2]|0)+636>>2]=0;a=c[f>>2]|0;h=(c[f>>2]|0)+352|0;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];Th(a,d);c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}return 0;}function rj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+20|0;e=b+16|0;f=b+12|0;g=b;c[f>>2]=a;if(!(c[f>>2]|0)){c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}else{a=(c[f>>2]|0)+4748|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];a=c[(c[f>>2]|0)+12>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);a=c[c[f>>2]>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);a=c[f>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}return 0;}function sj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0;g=l;l=l+96|0;h=g+64|0;i=g+60|0;j=g+8|0;k=g+56|0;m=g+52|0;n=g;o=g+48|0;p=g+44|0;q=g+16|0;c[i>>2]=b;b=j;c[b>>2]=d;c[b+4>>2]=e;c[k>>2]=f;f=j;c[m>>2]=(c[f>>2]|0)!=0|(c[f+4>>2]|0)!=0?0:500;f=j;e=dE(c[f>>2]|0,c[f+4>>2]|0,c[k>>2]|0,0)|0;if((e|0)!=0|(y|0)!=0){e=j;f=dE(c[e>>2]|0,c[e+4>>2]|0,c[k>>2]|0,0)|0;e=dE(f|0,y|0,c[m>>2]|0,0)|0;r=e;s=y;}else{r=-1;s=-1;}e=n;c[e>>2]=r;c[e+4>>2]=s;s=n;e=c[s+4>>2]|0;r=n;m=c[r+4>>2]|0;f=n;n=c[f+4>>2]|0;c[o>>2]=((e>>>0<0|(e|0)==0&(c[s>>2]|0)>>>0<=262144)&1)+((m>>>0<0|(m|0)==0&(c[r>>2]|0)>>>0<=131072)&1)+((n>>>0<0|(n|0)==0&(c[f>>2]|0)>>>0<=16384)&1);f=c[i>>2]|0;c[p>>2]=f;n=(c[i>>2]|0)==0?3:f;c[p>>2]=n;f=(c[i>>2]|0)<0?0:n;c[p>>2]=f;c[p>>2]=(c[i>>2]|0)>22?22:f;f=224+((c[o>>2]|0)*644|0)+((c[p>>2]|0)*28|0)|0;c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[q+8>>2]=c[f+8>>2];c[q+12>>2]=c[f+12>>2];c[q+16>>2]=c[f+16>>2];c[q+20>>2]=c[f+20>>2];c[q+24>>2]=c[f+24>>2];if((c[i>>2]|0)>=0){t=j;u=t;v=c[u>>2]|0;w=t+4|0;x=w;z=c[x>>2]|0;A=c[k>>2]|0;c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[h+16>>2]=c[q+16>>2];c[h+20>>2]=c[q+20>>2];c[h+24>>2]=c[q+24>>2];tj(a,h,v,z,A);l=g;return;}c[q+20>>2]=0-(c[i>>2]|0);t=j;u=t;v=c[u>>2]|0;w=t+4|0;x=w;z=c[x>>2]|0;A=c[k>>2]|0;c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[h+16>>2]=c[q+16>>2];c[h+20>>2]=c[q+20>>2];c[h+24>>2]=c[q+24>>2];tj(a,h,v,z,A);l=g;return;}function tj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=h;c[n>>2]=d;c[n+4>>2]=e;c[i>>2]=f;if(c[i>>2]|0?(f=h,e=dE(c[f>>2]|0,c[f+4>>2]|0,1,0)|0,f=y,f>>>0<0|(f|0)==0&e>>>0<2):0){e=h;c[e>>2]=513;c[e+4>>2]=0;}else o=4;if((o|0)==4?(o=h,(c[o>>2]|0)==0&(c[o+4>>2]|0)==0):0){o=h;c[o>>2]=-1;c[o+4>>2]=-1;}o=h;e=c[o+4>>2]|0;if(e>>>0<0|(e|0)==0&(c[o>>2]|0)>>>0<536870912?0<0|0==0&(c[i>>2]|0)>>>0<536870912:0){o=h;h=dE(c[o>>2]|0,c[o+4>>2]|0,c[i>>2]|0,0)|0;c[j>>2]=h;if((c[j>>2]|0)>>>0<64)p=6;else p=(uj((c[j>>2]|0)-1|0)|0)+1|0;c[k>>2]=p;if((c[b>>2]|0)>>>0>(c[k>>2]|0)>>>0)c[b>>2]=c[k>>2];}if((c[b+8>>2]|0)>>>0>(c[b>>2]|0)>>>0)c[b+8>>2]=c[b>>2];c[m>>2]=vj(c[b+4>>2]|0,c[b+24>>2]|0)|0;if((c[m>>2]|0)>>>0>(c[b>>2]|0)>>>0){k=b+4|0;c[k>>2]=(c[k>>2]|0)-((c[m>>2]|0)-(c[b>>2]|0));}if((c[b>>2]|0)>>>0>=10){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];l=g;return;}c[b>>2]=10;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];l=g;return;}function uj(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function vj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(c[f>>2]|0)>>>0>=6&1;l=d;return(c[e>>2]|0)-(c[g>>2]|0)|0;}function wj(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function xj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;a:do{switch(c[h>>2]|0){case 10:{if((c[i>>2]|0)>>>0>1){c[f>>2]=-40;break a;}else{c[c[g>>2]>>2]=c[i>>2];c[f>>2]=c[c[g>>2]>>2];break a;}break;}case 100:{c[j>>2]=c[i>>2];if((c[j>>2]|0)>(yj()|0))c[j>>2]=yj()|0;if(c[j>>2]|0){c[(c[g>>2]|0)+48>>2]=(c[j>>2]|0)<0&1;c[(c[g>>2]|0)+44>>2]=c[j>>2];}if((c[(c[g>>2]|0)+44>>2]|0)>=0){c[f>>2]=c[(c[g>>2]|0)+44>>2];break a;}else{c[f>>2]=0;break a;}break;}case 101:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<10|(c[i>>2]|0)>>>0>30|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4>>2];break;}case 102:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<6|(c[i>>2]|0)>>>0>30|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+8>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+8>>2];break;}case 103:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<6|(c[i>>2]|0)>>>0>29|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+4>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+4>>2];break;}case 104:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<1|(c[i>>2]|0)>>>0>29|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+12>>2]=c[i>>2];c[f>>2]=c[i>>2];break;}case 105:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<3|(c[i>>2]|0)>>>0>7|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+16>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+16>>2];break;}case 106:{c[(c[g>>2]|0)+4+20>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+20>>2];break;}case 107:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<1|(c[i>>2]|0)>>>0>8|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+24>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+24>>2];break;}case 1e3:{c[(c[g>>2]|0)+48>>2]=((c[i>>2]|0)!=0^1)&1;c[f>>2]=((c[(c[g>>2]|0)+48>>2]|0)!=0^1)&1;break;}case 200:{c[(c[g>>2]|0)+32>>2]=(c[i>>2]|0)>>>0>0&1;c[f>>2]=c[(c[g>>2]|0)+32>>2];break;}case 201:{c[(c[g>>2]|0)+32+4>>2]=(c[i>>2]|0)>>>0>0&1;c[f>>2]=c[(c[g>>2]|0)+32+4>>2];break;}case 202:{c[(c[g>>2]|0)+32+8>>2]=((c[i>>2]|0)!=0^1)&1;c[f>>2]=((c[(c[g>>2]|0)+32+8>>2]|0)!=0^1)&1;break;}case 1100:{c[(c[g>>2]|0)+52>>2]=(c[i>>2]|0)>>>0>0&1;c[f>>2]=c[(c[g>>2]|0)+52>>2];break;}case 400:{if((c[i>>2]|0)>>>0>0){c[f>>2]=-40;break a;}else{c[f>>2]=0;break a;}break;}case 401:{c[f>>2]=-40;break;}case 402:{c[f>>2]=-40;break;}case 160:{c[(c[g>>2]|0)+68>>2]=(c[i>>2]|0)>>>0>0&1;c[f>>2]=c[(c[g>>2]|0)+68>>2];break;}case 161:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<6|(c[i>>2]|0)>>>0>30|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+68+4>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+68+4>>2];break;}case 162:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<4|(c[i>>2]|0)>>>0>4096|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+68+12>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+68+12>>2];break;}case 163:{if((c[i>>2]|0)>>>0>8){c[f>>2]=-42;break a;}else{c[(c[g>>2]|0)+68+8>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+68+8>>2];break a;}break;}case 164:{if((c[i>>2]|0)>>>0>24){c[f>>2]=-42;break a;}else{c[(c[g>>2]|0)+68+16>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+68+16>>2];break a;}break;}default:c[f>>2]=-40;}}while(0);l=e;return c[f>>2]|0;}function yj(){return 22;}function zj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+64|0;i=h+32|0;j=h+28|0;k=h+24|0;m=h+20|0;n=h+16|0;o=h+12|0;p=h+8|0;q=h+4|0;r=h;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;if(((c[g>>2]|0)!=0^1)&1^((c[g+4>>2]|0)!=0^1)&1|0){c[j>>2]=0;s=c[j>>2]|0;l=h;return s|0;};c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[p>>2]=Rh(4764,i)|0;c[q>>2]=6144+(Aj(f,0)|0);e=c[q>>2]|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[r>>2]=Rh(e,i)|0;e=c[p>>2]|0;if(!((c[p>>2]|0)!=0&(c[r>>2]|0)!=0)){c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];Th(e,i);d=c[r>>2]|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];Th(d,i);c[j>>2]=0;s=c[j>>2]|0;l=h;return s|0;}d=e+4748|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[(c[p>>2]|0)+12>>2]=c[r>>2];c[(c[p>>2]|0)+16>>2]=c[q>>2];q=c[p>>2]|0;r=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];f=(Ph(Bj(q,r,k,m,n,i)|0)|0)!=0;i=c[p>>2]|0;if(f){rj(i)|0;c[j>>2]=0;s=c[j>>2]|0;l=h;return s|0;}else{c[j>>2]=i;s=c[j>>2]|0;l=h;return s|0;}return 0;}function Aj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;d=l;l=l+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;i=d+16|0;j=d+12|0;k=d+8|0;m=d+4|0;n=d;c[e>>2]=a;c[f>>2]=b;if((c[(c[e>>2]|0)+24>>2]|0)==1)o=0;else o=1<<c[(c[e>>2]|0)+4>>2];c[g>>2]=o;c[h>>2]=1<<c[(c[e>>2]|0)+8>>2];if(c[f>>2]|0?(c[(c[e>>2]|0)+16>>2]|0)==3:0){if(17<(c[c[e>>2]>>2]|0)>>>0)p=17;else p=c[c[e>>2]>>2]|0;}else p=0;c[i>>2]=p;c[j>>2]=1<<c[i>>2];c[k>>2]=(c[g>>2]|0)+(c[h>>2]|0)+(c[j>>2]|0)<<2;c[m>>2]=149e3;if(c[f>>2]|0){if((c[(c[e>>2]|0)+24>>2]|0)==7)q=1;else q=(c[(c[e>>2]|0)+24>>2]|0)==8;}else q=0;c[n>>2]=q?149e3:0;l=d;return(c[k>>2]|0)+(c[n>>2]|0)|0;}function Bj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;h=l;l=l+160|0;i=h+144|0;j=h+140|0;k=h+136|0;m=h+132|0;n=h+128|0;o=h+124|0;p=h+120|0;q=h+116|0;r=h+112|0;s=h+8|0;t=h;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;f=(c[k>>2]|0)+4720|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];c[f+16>>2]=c[g+16>>2];c[f+20>>2]=c[g+20>>2];c[f+24>>2]=c[g+24>>2];do{if((c[o>>2]|0)!=1&(c[m>>2]|0)!=0&(c[n>>2]|0)!=0){f=c[n>>2]|0;e=(c[k>>2]|0)+4748|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[q>>2]=Rh(f,i)|0;c[c[k>>2]>>2]=c[q>>2];c[(c[k>>2]|0)+4>>2]=c[q>>2];if(c[q>>2]|0){mE(c[q>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;break;}c[j>>2]=-64;u=c[j>>2]|0;l=h;return u|0;}else{c[c[k>>2]>>2]=0;c[(c[k>>2]|0)+4>>2]=c[m>>2];}}while(0);c[(c[k>>2]|0)+8>>2]=c[n>>2];Cj((c[k>>2]|0)+128|0);c[r>>2]=Dj((c[k>>2]|0)+20|0,(c[(c[k>>2]|0)+12>>2]|0)+6144|0,g,0,0)|0;r=s;n=r+104|0;do{c[r>>2]=0;r=r+4|0;}while((r|0)<(n|0));c[s+44>>2]=3;c[s+32>>2]=1;r=s+4|0;c[r>>2]=c[g>>2];c[r+4>>2]=c[g+4>>2];c[r+8>>2]=c[g+8>>2];c[r+12>>2]=c[g+12>>2];c[r+16>>2]=c[g+16>>2];c[r+20>>2]=c[g+20>>2];c[r+24>>2]=c[g+24>>2];c[t>>2]=Ej((c[k>>2]|0)+128|0,(c[k>>2]|0)+20|0,s,c[(c[k>>2]|0)+4>>2]|0,c[(c[k>>2]|0)+8>>2]|0,c[p>>2]|0,c[(c[k>>2]|0)+12>>2]|0)|0;p=(Ph(c[t>>2]|0)|0)!=0;s=c[t>>2]|0;if(p){c[j>>2]=s;u=c[j>>2]|0;l=h;return u|0;}else{c[(c[k>>2]|0)+4760>>2]=s;c[j>>2]=0;u=c[j>>2]|0;l=h;return u|0;}return 0;}function Cj(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=0;while(1){if((c[e>>2]|0)>=3)break;c[(c[d>>2]|0)+4580+(c[e>>2]<<2)>>2]=c[11940+(c[e>>2]<<2)>>2];c[e>>2]=(c[e>>2]|0)+1;}c[(c[d>>2]|0)+4564>>2]=0;c[(c[d>>2]|0)+4568>>2]=0;c[(c[d>>2]|0)+4572>>2]=0;c[(c[d>>2]|0)+4576>>2]=0;l=b;return;}function Dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+48|0;h=g+36|0;i=g+32|0;j=g+28|0;k=g+24|0;m=g+20|0;n=g+16|0;o=g+12|0;p=g+8|0;q=g+4|0;r=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;if((c[(c[j>>2]|0)+24>>2]|0)==1)s=0;else s=1<<c[(c[j>>2]|0)+4>>2];c[n>>2]=s;c[o>>2]=1<<c[(c[j>>2]|0)+8>>2];if(c[m>>2]|0?(c[(c[j>>2]|0)+16>>2]|0)==3:0){if(17<(c[c[j>>2]>>2]|0)>>>0)t=17;else t=c[c[j>>2]>>2]|0;}else t=0;c[p>>2]=t;c[q>>2]=1<<c[p>>2];c[r>>2]=(c[n>>2]|0)+(c[o>>2]|0)+(c[q>>2]|0)<<2;c[(c[h>>2]|0)+32>>2]=c[p>>2];p=c[h>>2]|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;hl(c[h>>2]|0);if(c[m>>2]|0?((c[(c[j>>2]|0)+24>>2]|0)==7?1:(c[(c[j>>2]|0)+24>>2]|0)==8)|0:0){c[(c[h>>2]|0)+48>>2]=c[i>>2];c[(c[h>>2]|0)+48+4>>2]=(c[(c[h>>2]|0)+48>>2]|0)+1024;c[(c[h>>2]|0)+48+8>>2]=(c[(c[h>>2]|0)+48+4>>2]|0)+144;c[(c[h>>2]|0)+48+12>>2]=(c[(c[h>>2]|0)+48+8>>2]|0)+212;c[i>>2]=(c[(c[h>>2]|0)+48+12>>2]|0)+128;c[(c[h>>2]|0)+48+16>>2]=c[i>>2];c[i>>2]=(c[(c[h>>2]|0)+48+16>>2]|0)+32768+8;c[(c[h>>2]|0)+48+20>>2]=c[i>>2];c[i>>2]=(c[(c[h>>2]|0)+48+20>>2]|0)+114688+28;}if((c[k>>2]|0)==1){u=c[i>>2]|0;v=c[h>>2]|0;w=v+36|0;c[w>>2]=u;x=c[h>>2]|0;y=x+36|0;z=c[y>>2]|0;A=c[o>>2]|0;B=z+(A<<2)|0;C=c[h>>2]|0;D=C+44|0;c[D>>2]=B;E=c[h>>2]|0;F=E+44|0;G=c[F>>2]|0;H=c[n>>2]|0;I=G+(H<<2)|0;J=c[h>>2]|0;K=J+40|0;c[K>>2]=I;L=c[h>>2]|0;M=L+40|0;N=c[M>>2]|0;O=c[q>>2]|0;P=N+(O<<2)|0;c[i>>2]=P;Q=c[i>>2]|0;l=g;return Q|0;}oE(c[i>>2]|0,0,c[r>>2]|0)|0;u=c[i>>2]|0;v=c[h>>2]|0;w=v+36|0;c[w>>2]=u;x=c[h>>2]|0;y=x+36|0;z=c[y>>2]|0;A=c[o>>2]|0;B=z+(A<<2)|0;C=c[h>>2]|0;D=C+44|0;c[D>>2]=B;E=c[h>>2]|0;F=E+44|0;G=c[F>>2]|0;H=c[n>>2]|0;I=G+(H<<2)|0;J=c[h>>2]|0;K=J+40|0;c[K>>2]=I;L=c[h>>2]|0;M=L+40|0;N=c[M>>2]|0;O=c[q>>2]|0;P=N+(O<<2)|0;c[i>>2]=P;Q=c[i>>2]|0;l=g;return Q|0;}function Ej(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+32|0;j=i+28|0;k=i+24|0;m=i+20|0;n=i+16|0;o=i+12|0;p=i+8|0;q=i+4|0;r=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;if((c[o>>2]|0)==0|(c[p>>2]|0)>>>0<=8){c[j>>2]=0;s=c[j>>2]|0;l=i;return s|0;}Cj(c[k>>2]|0);if((c[q>>2]|0)==1){c[j>>2]=Fj(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;s=c[j>>2]|0;l=i;return s|0;}if((Gj(c[o>>2]|0)|0)!=-332356553){if(!(c[q>>2]|0)){c[j>>2]=Fj(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;s=c[j>>2]|0;l=i;return s|0;}if((c[q>>2]|0)==2){c[j>>2]=-32;s=c[j>>2]|0;l=i;return s|0;}}c[j>>2]=Hj(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[r>>2]|0)|0;s=c[j>>2]|0;l=i;return s|0;}function Fj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=(c[m>>2]|0)+(c[k>>2]|0);c[o>>2]=(c[i>>2]|0)+4;Mj(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;if(c[(c[i>>2]|0)+52>>2]|0)p=0;else p=(c[n>>2]|0)-(c[(c[h>>2]|0)+4>>2]|0)|0;c[(c[h>>2]|0)+20>>2]=p;if((c[k>>2]|0)>>>0<=8){c[g>>2]=0;q=c[g>>2]|0;l=f;return q|0;}switch(c[(c[i>>2]|0)+4+24>>2]|0){case 1:{Nj(c[h>>2]|0,c[o>>2]|0,c[n>>2]|0);break;}case 2:{Oj(c[h>>2]|0,c[o>>2]|0,c[n>>2]|0);break;}case 5:case 4:case 3:{if((c[k>>2]|0)>>>0>=8)Pj(c[h>>2]|0,c[o>>2]|0,(c[n>>2]|0)+-8|0)|0;break;}case 8:case 7:case 6:{if((c[k>>2]|0)>>>0>=8)Qj(c[h>>2]|0,c[o>>2]|0,(c[n>>2]|0)+-8|0,c[n>>2]|0);break;}default:{}}c[(c[h>>2]|0)+24>>2]=(c[n>>2]|0)-(c[(c[h>>2]|0)+4>>2]|0);c[g>>2]=0;q=c[g>>2]|0;l=f;return q|0;}function Gj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Jj()|0)!=0;f=Kj(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Lj(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Hj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;h=l;l=l+384|0;i=h+380|0;j=h+376|0;k=h+372|0;m=h+368|0;n=h+364|0;o=h+360|0;p=h+356|0;q=h+352|0;r=h+348|0;s=h+192|0;t=h+344|0;u=h+340|0;v=h+336|0;w=h+332|0;x=h+328|0;y=h+324|0;z=h+320|0;A=h+80|0;B=h+316|0;C=h+312|0;D=h+308|0;E=h+304|0;F=h+300|0;G=h;H=h+296|0;I=h+292|0;J=h+288|0;K=h+284|0;L=h+280|0;M=h+276|0;N=h+272|0;O=h+268|0;P=h+264|0;Q=h+260|0;R=h+256|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[n>>2];c[r>>2]=(c[q>>2]|0)+(c[o>>2]|0);c[t>>2]=31;c[q>>2]=(c[q>>2]|0)+4;if(c[(c[m>>2]|0)+32+8>>2]|0)S=0;else S=Gj(c[q>>2]|0)|0;c[u>>2]=S;c[q>>2]=(c[q>>2]|0)+4;c[v>>2]=255;c[w>>2]=Ji(c[j>>2]|0,v,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0)|0;if($g(c[w>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}if((c[v>>2]|0)>>>0<255){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);c[y>>2]=ah(s,t,x,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0)|0;if(Zg(c[y>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}if((c[x>>2]|0)>>>0>8){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[z>>2]=Uh((c[j>>2]|0)+1024|0,s,c[t>>2]|0,c[x>>2]|0,c[p>>2]|0,6144)|0;if(wj(c[z>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[q>>2]=(c[q>>2]|0)+(c[y>>2]|0);c[B>>2]=52;c[D>>2]=ah(A,B,C,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0)|0;if(Zg(c[D>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}if((c[C>>2]|0)>>>0>9){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[E>>2]=Ij(A,c[B>>2]|0,52)|0;if(wj(c[E>>2]|0)|0){c[i>>2]=c[E>>2];T=c[i>>2]|0;l=h;return T|0;}c[F>>2]=Uh((c[j>>2]|0)+1796|0,A,c[B>>2]|0,c[C>>2]|0,c[p>>2]|0,6144)|0;if(wj(c[F>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[q>>2]=(c[q>>2]|0)+(c[D>>2]|0);c[H>>2]=35;c[J>>2]=ah(G,H,I,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0)|0;if(Zg(c[J>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}if((c[I>>2]|0)>>>0>9){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[K>>2]=Ij(G,c[H>>2]|0,35)|0;if(wj(c[K>>2]|0)|0){c[i>>2]=c[K>>2];T=c[i>>2]|0;l=h;return T|0;}c[L>>2]=Uh((c[j>>2]|0)+3248|0,G,c[H>>2]|0,c[I>>2]|0,c[p>>2]|0,6144)|0;if(wj(c[L>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[q>>2]=(c[q>>2]|0)+(c[J>>2]|0);if(((c[q>>2]|0)+12|0)>>>0>(c[r>>2]|0)>>>0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}J=Gj(c[q>>2]|0)|0;c[(c[j>>2]|0)+4580>>2]=J;J=Gj((c[q>>2]|0)+4|0)|0;c[(c[j>>2]|0)+4580+4>>2]=J;J=Gj((c[q>>2]|0)+8|0)|0;c[(c[j>>2]|0)+4580+8>>2]=J;c[q>>2]=(c[q>>2]|0)+12;c[M>>2]=(c[r>>2]|0)-(c[q>>2]|0);c[N>>2]=31;if((c[M>>2]|0)>>>0<=4294836223){c[O>>2]=(c[M>>2]|0)+131072;c[N>>2]=uj(c[O>>2]|0)|0;}c[P>>2]=Ij(s,c[t>>2]|0,(c[N>>2]|0)>>>0<31?c[N>>2]|0:31)|0;if(wj(c[P>>2]|0)|0){c[i>>2]=c[P>>2];T=c[i>>2]|0;l=h;return T|0;}c[Q>>2]=0;while(1){U=c[j>>2]|0;if((c[Q>>2]|0)>>>0>=3){V=42;break;}if(!(c[U+4580+(c[Q>>2]<<2)>>2]|0)){V=38;break;}if((c[(c[j>>2]|0)+4580+(c[Q>>2]<<2)>>2]|0)>>>0>(c[M>>2]|0)>>>0){V=40;break;}c[Q>>2]=(c[Q>>2]|0)+1;}if((V|0)==38){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}else if((V|0)==40){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}else if((V|0)==42){c[U+4564>>2]=2;c[(c[j>>2]|0)+4568>>2]=2;c[(c[j>>2]|0)+4572>>2]=2;c[(c[j>>2]|0)+4576>>2]=2;c[R>>2]=Fj(c[k>>2]|0,c[m>>2]|0,c[q>>2]|0,c[M>>2]|0)|0;if(wj(c[R>>2]|0)|0){c[i>>2]=c[R>>2];T=c[i>>2]|0;l=h;return T|0;}else{c[i>>2]=c[u>>2];T=c[i>>2]|0;l=h;return T|0;}}return 0;}function Ij(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=d;c[j>>2]=e;if((c[i>>2]|0)>>>0<(c[j>>2]|0)>>>0){c[g>>2]=-30;m=c[g>>2]|0;l=f;return m|0;}c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>(c[j>>2]|0)>>>0){n=8;break;}if(!(b[(c[h>>2]|0)+(c[k>>2]<<1)>>1]|0)){n=6;break;}c[k>>2]=(c[k>>2]|0)+1;}if((n|0)==6){c[g>>2]=-30;m=c[g>>2]|0;l=f;return m|0;}else if((n|0)==8){c[g>>2]=0;m=c[g>>2]|0;l=f;return m|0;}return 0;}function Jj(){return d[11936]|0|0;}function Kj(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Lj(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Mj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;e=l;l=l+32|0;f=e+28|0;g=e+24|0;h=e+20|0;i=e+16|0;j=e+12|0;k=e+8|0;m=e+4|0;n=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=1;if((c[g>>2]|0)!=(c[c[f>>2]>>2]|0)){c[k>>2]=(c[c[f>>2]>>2]|0)-(c[(c[f>>2]|0)+4>>2]|0);c[(c[f>>2]|0)+16>>2]=c[(c[f>>2]|0)+12>>2];c[(c[f>>2]|0)+12>>2]=c[k>>2];c[(c[f>>2]|0)+8>>2]=c[(c[f>>2]|0)+4>>2];c[(c[f>>2]|0)+4>>2]=(c[i>>2]|0)+(0-(c[k>>2]|0));if(((c[(c[f>>2]|0)+12>>2]|0)-(c[(c[f>>2]|0)+16>>2]|0)|0)>>>0<8)c[(c[f>>2]|0)+16>>2]=c[(c[f>>2]|0)+12>>2];c[j>>2]=0;}c[c[f>>2]>>2]=(c[i>>2]|0)+(c[h>>2]|0);if(!(((c[i>>2]|0)>>>0<((c[(c[f>>2]|0)+8>>2]|0)+(c[(c[f>>2]|0)+12>>2]|0)|0)>>>0?((c[i>>2]|0)+(c[h>>2]|0)|0)>>>0>((c[(c[f>>2]|0)+8>>2]|0)+(c[(c[f>>2]|0)+16>>2]|0)|0)>>>0:0)|0)){o=c[j>>2]|0;l=e;return o|0;}c[m>>2]=(c[i>>2]|0)+(c[h>>2]|0)-(c[(c[f>>2]|0)+8>>2]|0);if((c[m>>2]|0)>(c[(c[f>>2]|0)+12>>2]|0))p=c[(c[f>>2]|0)+12>>2]|0;else p=c[m>>2]|0;c[n>>2]=p;c[(c[f>>2]|0)+16>>2]=c[n>>2];o=c[j>>2]|0;l=e;return o|0;}function Nj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=l;l=l+64|0;f=e+48|0;g=e+44|0;h=e+40|0;i=e+36|0;j=e+32|0;k=e+28|0;m=e+24|0;n=e+20|0;o=e+16|0;p=e+8|0;q=e+4|0;r=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[(c[f>>2]|0)+36>>2];c[j>>2]=c[(c[g>>2]|0)+8>>2];c[k>>2]=c[(c[g>>2]|0)+16>>2];c[m>>2]=c[(c[f>>2]|0)+4>>2];c[n>>2]=(c[m>>2]|0)+(c[(c[f>>2]|0)+24>>2]|0);c[o>>2]=(c[h>>2]|0)+-8;c[e+12>>2]=3;while(1){if(((c[n>>2]|0)+3+-1|0)>>>0>(c[o>>2]|0)>>>0)break;c[p>>2]=(c[n>>2]|0)-(c[m>>2]|0);c[q>>2]=0;while(1){s=c[n>>2]|0;if((c[q>>2]|0)>>>0>=3)break;c[r>>2]=Tk(s+(c[q>>2]|0)|0,c[j>>2]|0,c[k>>2]|0)|0;if(!((c[q>>2]|0)!=0?(c[(c[i>>2]|0)+(c[r>>2]<<2)>>2]|0)!=0:0))c[(c[i>>2]|0)+(c[r>>2]<<2)>>2]=(c[p>>2]|0)+(c[q>>2]|0);c[q>>2]=(c[q>>2]|0)+1;}c[n>>2]=s+3;}l=e;return;}function Oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=l;l=l+64|0;f=e+60|0;g=e+56|0;h=e+52|0;i=e+48|0;j=e+44|0;k=e+40|0;m=e+36|0;n=e+32|0;o=e+28|0;p=e+24|0;q=e+20|0;r=e+12|0;s=e+8|0;t=e+4|0;u=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[(c[f>>2]|0)+36>>2];c[j>>2]=c[(c[g>>2]|0)+8>>2];c[k>>2]=c[(c[g>>2]|0)+16>>2];c[m>>2]=c[(c[f>>2]|0)+44>>2];c[n>>2]=c[(c[g>>2]|0)+4>>2];c[o>>2]=c[(c[f>>2]|0)+4>>2];c[p>>2]=(c[o>>2]|0)+(c[(c[f>>2]|0)+24>>2]|0);c[q>>2]=(c[h>>2]|0)+-8;c[e+16>>2]=3;while(1){if(((c[p>>2]|0)+3+-1|0)>>>0>(c[q>>2]|0)>>>0)break;c[r>>2]=(c[p>>2]|0)-(c[o>>2]|0);c[s>>2]=0;while(1){v=c[p>>2]|0;if((c[s>>2]|0)>>>0>=3)break;c[t>>2]=Dk(v+(c[s>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0;c[u>>2]=Dk((c[p>>2]|0)+(c[s>>2]|0)|0,c[j>>2]|0,8)|0;if(!(c[s>>2]|0))c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]=(c[r>>2]|0)+(c[s>>2]|0);if(!((c[s>>2]|0)!=0?(c[(c[i>>2]|0)+(c[u>>2]<<2)>>2]|0)!=0:0))c[(c[i>>2]|0)+(c[u>>2]<<2)>>2]=(c[r>>2]|0)+(c[s>>2]|0);c[s>>2]=(c[s>>2]|0)+1;}c[p>>2]=v+3;}l=e;return;}function Pj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=mk(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,c[(c[g>>2]|0)+16>>2]|0)|0;l=e;return d|0;}function Qj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+64|0;g=f+48|0;h=f+44|0;i=f+40|0;j=f+36|0;k=f+32|0;m=f+28|0;n=f+24|0;o=f+20|0;p=f+16|0;q=f+12|0;r=f+8|0;s=f+4|0;t=f;c[q>>2]=a;c[r>>2]=b;c[s>>2]=d;c[t>>2]=e;e=c[r>>2]|0;d=c[s>>2]|0;s=c[t>>2]|0;t=c[(c[r>>2]|0)+16>>2]|0;c[g>>2]=c[q>>2];c[h>>2]=e;c[i>>2]=d;c[j>>2]=s;c[k>>2]=t;c[m>>2]=0;c[n>>2]=c[(c[g>>2]|0)+4>>2];c[o>>2]=(c[i>>2]|0)-(c[n>>2]|0);c[p>>2]=c[(c[g>>2]|0)+24>>2];while(1){if((c[p>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;i=Rj(c[g>>2]|0,c[h>>2]|0,(c[n>>2]|0)+(c[p>>2]|0)|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[p>>2]=(c[p>>2]|0)+i;}c[(c[g>>2]|0)+24>>2]=c[o>>2];l=f;return;}function Rj(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;i=l;l=l+144|0;j=i+128|0;k=i+124|0;m=i+120|0;n=i+116|0;o=i+112|0;p=i+108|0;q=i+104|0;r=i+100|0;s=i+96|0;t=i+92|0;u=i+88|0;v=i+84|0;w=i+80|0;x=i+76|0;y=i+72|0;z=i+68|0;A=i+64|0;B=i+60|0;C=i+56|0;D=i+52|0;E=i+48|0;F=i+44|0;G=i+40|0;H=i+36|0;I=i+32|0;J=i+28|0;K=i+24|0;L=i+20|0;M=i+16|0;N=i+12|0;O=i+8|0;P=i+4|0;Q=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=c[(c[k>>2]|0)+36>>2];c[s>>2]=c[(c[m>>2]|0)+8>>2];c[t>>2]=Sj(c[n>>2]|0,c[s>>2]|0,c[p>>2]|0)|0;c[u>>2]=c[(c[k>>2]|0)+44>>2];c[v>>2]=(c[(c[m>>2]|0)+4>>2]|0)-1;c[w>>2]=(1<<c[v>>2])-1;c[x>>2]=c[(c[r>>2]|0)+(c[t>>2]<<2)>>2];c[y>>2]=0;c[z>>2]=0;c[A>>2]=c[(c[k>>2]|0)+4>>2];c[B>>2]=c[(c[k>>2]|0)+8>>2];c[C>>2]=c[(c[k>>2]|0)+12>>2];c[D>>2]=(c[B>>2]|0)+(c[C>>2]|0);c[E>>2]=(c[A>>2]|0)+(c[C>>2]|0);c[G>>2]=(c[n>>2]|0)-(c[A>>2]|0);if((c[w>>2]|0)>>>0>=(c[G>>2]|0)>>>0)R=0;else R=(c[G>>2]|0)-(c[w>>2]|0)|0;c[H>>2]=R;c[I>>2]=(c[u>>2]|0)+((c[G>>2]&c[w>>2])<<1<<2);c[J>>2]=(c[I>>2]|0)+4;c[L>>2]=c[(c[k>>2]|0)+16>>2];c[M>>2]=(c[G>>2]|0)+8+1;c[N>>2]=8;c[O>>2]=1<<c[(c[m>>2]|0)+12>>2];c[(c[r>>2]|0)+(c[t>>2]<<2)>>2]=c[G>>2];while(1){t=c[O>>2]|0;c[O>>2]=t+-1;if(!t)break;if((c[x>>2]|0)>>>0<=(c[L>>2]|0)>>>0)break;c[P>>2]=(c[u>>2]|0)+((c[x>>2]&c[w>>2])<<1<<2);c[Q>>2]=(c[y>>2]|0)>>>0<(c[z>>2]|0)>>>0?c[y>>2]|0:c[z>>2]|0;if(c[q>>2]|0?((c[x>>2]|0)+(c[Q>>2]|0)|0)>>>0<(c[C>>2]|0)>>>0:0){c[F>>2]=(c[B>>2]|0)+(c[x>>2]|0);t=Uj((c[n>>2]|0)+(c[Q>>2]|0)|0,(c[F>>2]|0)+(c[Q>>2]|0)|0,c[o>>2]|0,c[D>>2]|0,c[E>>2]|0)|0;c[Q>>2]=(c[Q>>2]|0)+t;if(((c[x>>2]|0)+(c[Q>>2]|0)|0)>>>0>=(c[C>>2]|0)>>>0)c[F>>2]=(c[A>>2]|0)+(c[x>>2]|0);}else{c[F>>2]=(c[A>>2]|0)+(c[x>>2]|0);t=Tj((c[n>>2]|0)+(c[Q>>2]|0)|0,(c[F>>2]|0)+(c[Q>>2]|0)|0,c[o>>2]|0)|0;c[Q>>2]=(c[Q>>2]|0)+t;}if((c[Q>>2]|0)>>>0>(c[N>>2]|0)>>>0?(c[N>>2]=c[Q>>2],(c[Q>>2]|0)>>>0>((c[M>>2]|0)-(c[x>>2]|0)|0)>>>0):0)c[M>>2]=(c[x>>2]|0)+(c[Q>>2]|0);if(((c[n>>2]|0)+(c[Q>>2]|0)|0)==(c[o>>2]|0))break;t=c[x>>2]|0;if((d[(c[F>>2]|0)+(c[Q>>2]|0)>>0]|0|0)<(d[(c[n>>2]|0)+(c[Q>>2]|0)>>0]|0|0)){c[c[I>>2]>>2]=t;c[y>>2]=c[Q>>2];if((c[x>>2]|0)>>>0<=(c[H>>2]|0)>>>0){S=17;break;}c[I>>2]=(c[P>>2]|0)+4;c[x>>2]=c[(c[P>>2]|0)+4>>2];}else{c[c[J>>2]>>2]=t;c[z>>2]=c[Q>>2];if((c[x>>2]|0)>>>0<=(c[H>>2]|0)>>>0){S=20;break;}c[J>>2]=c[P>>2];c[x>>2]=c[c[P>>2]>>2];}}if((S|0)==17)c[I>>2]=K;else if((S|0)==20)c[J>>2]=K;c[c[J>>2]>>2]=0;c[c[I>>2]>>2]=0;if((c[N>>2]|0)>>>0>384){c[j>>2]=192<((c[N>>2]|0)-384|0)>>>0?192:(c[N>>2]|0)-384|0;T=c[j>>2]|0;l=i;return T|0;}else{c[j>>2]=(c[M>>2]|0)-((c[G>>2]|0)+8);T=c[j>>2]|0;l=i;return T|0;}return 0;}function Sj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;switch(c[i>>2]|0){case 8:{c[f>>2]=dk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 5:{c[f>>2]=ak(c[g>>2]|0,c[h>>2]|0)|0;break;}case 6:{c[f>>2]=bk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 7:{c[f>>2]=ck(c[g>>2]|0,c[h>>2]|0)|0;break;}default:c[f>>2]=$j(c[g>>2]|0,c[h>>2]|0)|0;}l=e;return c[f>>2]|0;}function Tj(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=Vj(c[i>>2]|0)|0;c[n>>2]=e^(Vj(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=Wj(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=Vj(c[i>>2]|0)|0;c[o>>2]=e^(Vj(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=Wj(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((Xj()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=Yj(c[i>>2]|0)|0,(o|0)==(Yj(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(Zj(c[i>>2]|0)|0)&65535,(o|0)==((Zj(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function Uj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=Tj(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(Tj((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function Vj(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Wj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(_j()|0)!=0;f=(Xj()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function Xj(){return 0;}function Yj(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Zj(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function _j(){return d[11936]|0|0;}function $j(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Yj(c[e>>2]|0)|0;e=lk(b,c[f>>2]|0)|0;l=d;return e|0;}function ak(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=ek(c[e>>2]|0)|0;e=kk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=ek(c[e>>2]|0)|0;e=jk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function ck(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=ek(c[e>>2]|0)|0;e=ik(b,y,c[f>>2]|0)|0;l=d;return e|0;}function dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=ek(c[e>>2]|0)|0;e=fk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function ek(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(_j()|0)!=0;f=gk(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=hk(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function fk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=cE(c[d>>2]|0,c[d+4>>2]|0,-1213897629,-820265764)|0;d=iE(f|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return d|0;}function gk(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function hk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function ik(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,8)|0;d=cE(f|0,y|0,-591420061,13573052)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,16)|0;d=cE(f|0,y|0,-1126383717,53019)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function kk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,24)|0;d=cE(f|0,y|0,465362107,207)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function lk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]|0,-1640531535)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function mk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+48|0;g=f+44|0;h=f+40|0;i=f+36|0;j=f+32|0;k=f+28|0;m=f+24|0;n=f+20|0;o=f+16|0;p=f+12|0;q=f+8|0;r=f+4|0;s=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=c[(c[g>>2]|0)+36>>2];c[m>>2]=c[(c[h>>2]|0)+8>>2];c[n>>2]=c[(c[g>>2]|0)+44>>2];c[o>>2]=(1<<c[(c[h>>2]|0)+4>>2])-1;c[p>>2]=c[(c[g>>2]|0)+4>>2];c[q>>2]=(c[i>>2]|0)-(c[p>>2]|0);c[r>>2]=c[(c[g>>2]|0)+24>>2];while(1){if((c[r>>2]|0)>>>0>=(c[q>>2]|0)>>>0)break;c[s>>2]=nk((c[p>>2]|0)+(c[r>>2]|0)|0,c[m>>2]|0,c[j>>2]|0)|0;c[(c[n>>2]|0)+((c[r>>2]&c[o>>2])<<2)>>2]=c[(c[k>>2]|0)+(c[s>>2]<<2)>>2];c[(c[k>>2]|0)+(c[s>>2]<<2)>>2]=c[r>>2];c[r>>2]=(c[r>>2]|0)+1;}c[(c[g>>2]|0)+24>>2]=c[q>>2];q=c[k>>2]|0;k=c[q+((nk(c[i>>2]|0,c[m>>2]|0,c[j>>2]|0)|0)<<2)>>2]|0;l=f;return k|0;}function nk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;switch(c[i>>2]|0){case 8:{c[f>>2]=sk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 5:{c[f>>2]=pk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 6:{c[f>>2]=qk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 7:{c[f>>2]=rk(c[g>>2]|0,c[h>>2]|0)|0;break;}default:c[f>>2]=ok(c[g>>2]|0,c[h>>2]|0)|0;}l=e;return c[f>>2]|0;}function ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Bk(c[e>>2]|0)|0;e=Ck(b,c[f>>2]|0)|0;l=d;return e|0;}function pk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=tk(c[e>>2]|0)|0;e=Ak(b,y,c[f>>2]|0)|0;l=d;return e|0;}function qk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=tk(c[e>>2]|0)|0;e=zk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=tk(c[e>>2]|0)|0;e=yk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function sk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=tk(c[e>>2]|0)|0;e=uk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function tk(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(vk()|0)!=0;f=wk(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=xk(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function uk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=cE(c[d>>2]|0,c[d+4>>2]|0,-1213897629,-820265764)|0;d=iE(f|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return d|0;}function vk(){return d[11936]|0|0;}function wk(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function xk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function yk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,8)|0;d=cE(f|0,y|0,-591420061,13573052)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function zk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,16)|0;d=cE(f|0,y|0,-1126383717,53019)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,24)|0;d=cE(f|0,y|0,465362107,207)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Bk(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Ck(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]|0,-1640531535)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function Dk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;switch(c[i>>2]|0){case 8:{c[f>>2]=Ik(c[g>>2]|0,c[h>>2]|0)|0;break;}case 5:{c[f>>2]=Fk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 6:{c[f>>2]=Gk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 7:{c[f>>2]=Hk(c[g>>2]|0,c[h>>2]|0)|0;break;}default:c[f>>2]=Ek(c[g>>2]|0,c[h>>2]|0)|0;}l=e;return c[f>>2]|0;}function Ek(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Rk(c[e>>2]|0)|0;e=Sk(b,c[f>>2]|0)|0;l=d;return e|0;}function Fk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Jk(c[e>>2]|0)|0;e=Qk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Gk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Jk(c[e>>2]|0)|0;e=Pk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Hk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Jk(c[e>>2]|0)|0;e=Ok(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Ik(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Jk(c[e>>2]|0)|0;e=Kk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Jk(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(Lk()|0)!=0;f=Mk(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=Nk(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function Kk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=cE(c[d>>2]|0,c[d+4>>2]|0,-1213897629,-820265764)|0;d=iE(f|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return d|0;}function Lk(){return d[11936]|0|0;}function Mk(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function Nk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Ok(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,8)|0;d=cE(f|0,y|0,-591420061,13573052)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,16)|0;d=cE(f|0,y|0,-1126383717,53019)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Qk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,24)|0;d=cE(f|0,y|0,465362107,207)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Rk(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Sk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]|0,-1640531535)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function Tk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;switch(c[i>>2]|0){case 8:{c[f>>2]=Yk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 5:{c[f>>2]=Vk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 6:{c[f>>2]=Wk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 7:{c[f>>2]=Xk(c[g>>2]|0,c[h>>2]|0)|0;break;}default:c[f>>2]=Uk(c[g>>2]|0,c[h>>2]|0)|0;}l=e;return c[f>>2]|0;}function Uk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=fl(c[e>>2]|0)|0;e=gl(b,c[f>>2]|0)|0;l=d;return e|0;}function Vk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Zk(c[e>>2]|0)|0;e=el(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Wk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Zk(c[e>>2]|0)|0;e=dl(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Xk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Zk(c[e>>2]|0)|0;e=cl(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Yk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Zk(c[e>>2]|0)|0;e=_k(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Zk(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=($k()|0)!=0;f=al(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=bl(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function _k(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=cE(c[d>>2]|0,c[d+4>>2]|0,-1213897629,-820265764)|0;d=iE(f|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return d|0;}function $k(){return d[11936]|0|0;}function al(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function bl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function cl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,8)|0;d=cE(f|0,y|0,-591420061,13573052)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function dl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,16)|0;d=cE(f|0,y|0,-1126383717,53019)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function el(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,24)|0;d=cE(f|0,y|0,465362107,207)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function fl(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]|0,-1640531535)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function hl(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;il(c[d>>2]|0);c[(c[d>>2]|0)+24>>2]=(c[(c[d>>2]|0)+12>>2]|0)+1;c[(c[d>>2]|0)+20>>2]=0;c[(c[d>>2]|0)+48+28>>2]=0;l=b;return;}function il(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+8|0;e=b+4|0;f=b;c[d>>2]=a;c[e>>2]=(c[c[d>>2]>>2]|0)-(c[(c[d>>2]|0)+4>>2]|0);c[f>>2]=c[e>>2];c[(c[d>>2]|0)+16>>2]=c[f>>2];c[(c[d>>2]|0)+12>>2]=c[f>>2];l=b;return;}function jl(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+628>>2]=0;a=(c[d>>2]|0)+240|0;c[a>>2]=0;c[a+4>>2]=0;l=b;return;}function kl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[d>>2]=1<<c[a+4>>2];c[e>>2]=(c[a+8>>2]|0)>>>0<(c[a+4>>2]|0)>>>0?c[a+8>>2]|0:c[a+4>>2]|0;c[f>>2]=1<<(c[a+4>>2]|0)-(c[e>>2]|0);c[g>>2]=(c[f>>2]|0)+(c[d>>2]<<3);l=b;return(c[a>>2]|0?c[g>>2]|0:0)|0;}function ll(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[e>>2]=b;if(!(c[a>>2]|0)){f=0;l=d;return f|0;}f=((c[e>>2]|0)>>>0)/((c[a+12>>2]|0)>>>0)|0;l=d;return f|0;}function ml(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;h=l;l=l+304|0;i=h+200|0;j=h+80|0;k=h+196|0;m=h+192|0;n=h;o=h+188|0;p=h+184|0;q=h+76|0;r=h+72|0;s=h+68|0;t=h+64|0;u=h+60|0;v=h+56|0;w=h+52|0;x=h+48|0;z=h+44|0;A=h+40|0;B=h+36|0;C=h+32|0;D=h+28|0;E=h+24|0;F=h+20|0;G=h+16|0;H=h+12|0;I=h+8|0;c[m>>2]=a;a=n;c[a>>2]=d;c[a+4>>2]=e;c[o>>2]=f;c[p>>2]=g;if(!(c[o>>2]|0)){g=c[(c[m>>2]|0)+596>>2]|0;f=c[(c[m>>2]|0)+232>>2]|0;e=c[p>>2]|0;a=n;d=c[a>>2]|0;J=c[a+4>>2]|0;K=j;L=(c[m>>2]|0)+116|0;M=K+104|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0;}while((K|0)<(M|0));K=i;L=b;M=K+104|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0;}while((K|0)<(M|0));if(nl(j,i,g,f,e,d,J)|0){J=c[m>>2]|0;d=n;e=c[d>>2]|0;f=c[d+4>>2]|0;K=i;L=b;M=K+104|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0;}while((K|0)<(M|0));c[k>>2]=ol(J,i,e,f)|0;N=c[k>>2]|0;l=h;return N|0;}}if(c[b+68>>2]|0){c[b+68+20>>2]=c[b+4>>2];pl(b+68|0,b+4|0);f=ql(c[b+68+12>>2]|0)|0;e=(c[m>>2]|0)+408+32|0;c[e>>2]=f;c[e+4>>2]=y;}e=jE(1,0,c[b+4>>2]|0)|0;f=y;J=n;d=c[J+4>>2]|0;if(f>>>0<d>>>0|((f|0)==(d|0)?e>>>0<(c[J>>2]|0)>>>0:0)){J=jE(1,0,c[b+4>>2]|0)|0;O=J;P=y;}else{J=n;O=c[J>>2]|0;P=c[J+4>>2]|0;}if(1>O>>>0)Q=1;else{O=jE(1,0,c[b+4>>2]|0)|0;J=y;P=n;e=c[P+4>>2]|0;if(J>>>0<e>>>0|((J|0)==(e|0)?O>>>0<(c[P>>2]|0)>>>0:0)){P=jE(1,0,c[b+4>>2]|0)|0;R=P;S=y;}else{P=n;R=c[P>>2]|0;S=c[P+4>>2]|0;}Q=R;}c[q>>2]=Q;c[r>>2]=131072<(c[q>>2]|0)>>>0?131072:c[q>>2]|0;c[s>>2]=(c[b+4+16>>2]|0)==3?3:4;c[t>>2]=((c[r>>2]|0)>>>0)/((c[s>>2]|0)>>>0)|0;c[u>>2]=(c[r>>2]|0)+((c[t>>2]|0)*11|0);if((c[p>>2]|0)==1)T=(lj(c[r>>2]|0)|0)+1|0;else T=0;c[v>>2]=T;if((c[p>>2]|0)==1)U=(c[q>>2]|0)+(c[r>>2]|0)|0;else U=0;c[w>>2]=U;c[x>>2]=Aj(b+4|0,1)|0;U=b+68|0;q=c[r>>2]|0;c[i>>2]=c[U>>2];c[i+4>>2]=c[U+4>>2];c[i+8>>2]=c[U+8>>2];c[i+12>>2]=c[U+12>>2];c[i+16>>2]=c[U+16>>2];c[i+20>>2]=c[U+20>>2];c[z>>2]=ll(i,q)|0;c[B>>2]=6144;c[C>>2]=9184;c[D>>2]=(c[w>>2]|0)+(c[v>>2]|0);C=b+68|0;c[i>>2]=c[C>>2];c[i+4>>2]=c[C+4>>2];c[i+8>>2]=c[C+8>>2];c[i+12>>2]=c[C+12>>2];c[i+16>>2]=c[C+16>>2];c[i+20>>2]=c[C+20>>2];c[E>>2]=kl(i)|0;c[F>>2]=(c[z>>2]|0)*12;c[G>>2]=15328+(c[E>>2]|0)+(c[F>>2]|0)+(c[x>>2]|0)+(c[u>>2]|0)+(c[D>>2]|0);do{if((c[(c[m>>2]|0)+228>>2]|0)>>>0<(c[G>>2]|0)>>>0){if(c[(c[m>>2]|0)+364>>2]|0){c[k>>2]=-64;N=c[k>>2]|0;l=h;return N|0;}c[(c[m>>2]|0)+228>>2]=0;D=c[(c[m>>2]|0)+224>>2]|0;u=(c[m>>2]|0)+352|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];Th(D,i);D=c[G>>2]|0;u=(c[m>>2]|0)+352|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];u=Rh(D,i)|0;c[(c[m>>2]|0)+224>>2]=u;if(c[(c[m>>2]|0)+224>>2]|0){c[(c[m>>2]|0)+228>>2]=c[G>>2];c[A>>2]=c[(c[m>>2]|0)+224>>2];c[(c[m>>2]|0)+472>>2]=c[(c[m>>2]|0)+224>>2];c[(c[m>>2]|0)+472+4>>2]=(c[(c[m>>2]|0)+472>>2]|0)+4592;c[A>>2]=(c[(c[m>>2]|0)+472+4>>2]|0)+4592;c[(c[m>>2]|0)+588>>2]=c[A>>2];break;}c[k>>2]=-64;N=c[k>>2]|0;l=h;return N|0;}}while(0);K=(c[m>>2]|0)+116|0;L=b;M=K+104|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0;}while((K|0)<(M|0));L=n;K=dE(c[L>>2]|0,c[L+4>>2]|0,1,0)|0;L=(c[m>>2]|0)+240|0;c[L>>2]=K;c[L+4>>2]=y;L=(c[m>>2]|0)+248|0;c[L>>2]=0;c[L+4>>2]=0;L=(c[m>>2]|0)+256|0;c[L>>2]=0;c[L+4>>2]=0;L=n;if((c[L>>2]|0)==-1?(c[L+4>>2]|0)==-1:0)c[(c[m>>2]|0)+116+32>>2]=0;c[(c[m>>2]|0)+232>>2]=c[r>>2];Lh((c[m>>2]|0)+264|0,0,0)|0;c[c[m>>2]>>2]=1;c[(c[m>>2]|0)+220>>2]=0;Cj(c[(c[m>>2]|0)+472>>2]|0);c[A>>2]=(c[(c[m>>2]|0)+588>>2]|0)+6144;if(c[b+68>>2]|0){c[H>>2]=1<<c[b+68+4>>2];oE(c[A>>2]|0,0,c[H>>2]<<3|0)|0;c[(c[m>>2]|0)+408+20>>2]=c[A>>2];c[A>>2]=(c[(c[m>>2]|0)+408+20>>2]|0)+(c[H>>2]<<3);c[(c[m>>2]|0)+448>>2]=c[A>>2];c[A>>2]=(c[(c[m>>2]|0)+448>>2]|0)+((c[z>>2]|0)*12|0);c[(c[m>>2]|0)+452>>2]=c[z>>2];z=(c[m>>2]|0)+408|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;}c[A>>2]=Dj((c[m>>2]|0)+472+8|0,c[A>>2]|0,b+4|0,c[o>>2]|0,1)|0;c[(c[m>>2]|0)+368>>2]=c[A>>2];c[A>>2]=(c[(c[m>>2]|0)+368>>2]|0)+(c[t>>2]<<3);c[(c[m>>2]|0)+368+16>>2]=c[A>>2];c[(c[m>>2]|0)+368+20>>2]=(c[(c[m>>2]|0)+368+16>>2]|0)+(c[t>>2]|0);c[(c[m>>2]|0)+368+24>>2]=(c[(c[m>>2]|0)+368+20>>2]|0)+(c[t>>2]|0);c[(c[m>>2]|0)+368+8>>2]=(c[(c[m>>2]|0)+368+24>>2]|0)+(c[t>>2]|0);c[A>>2]=(c[(c[m>>2]|0)+368+8>>2]|0)+(c[r>>2]|0);if(c[b+68>>2]|0){c[I>>2]=1<<(c[b+68+4>>2]|0)-(c[b+68+8>>2]|0);oE(c[A>>2]|0,0,c[I>>2]|0)|0;c[(c[m>>2]|0)+408+24>>2]=c[A>>2];c[A>>2]=(c[(c[m>>2]|0)+408+24>>2]|0)+(c[I>>2]|0);il((c[m>>2]|0)+408|0);}rl(c[m>>2]|0,0,0)|0;c[(c[m>>2]|0)+596>>2]=c[w>>2];c[(c[m>>2]|0)+592>>2]=c[A>>2];c[(c[m>>2]|0)+616>>2]=c[v>>2];c[(c[m>>2]|0)+612>>2]=(c[(c[m>>2]|0)+592>>2]|0)+(c[w>>2]|0);c[k>>2]=0;N=c[k>>2]|0;l=h;return N|0;}function nl(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;i=l;l=l+80|0;j=i+48|0;k=i+16|0;m=i+44|0;n=i+12|0;o=i+8|0;p=i;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;f=p;c[f>>2]=g;c[f+4>>2]=h;h=a+4|0;f=b+4|0;c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];c[k+16>>2]=c[h+16>>2];c[k+20>>2]=c[h+20>>2];c[k+24>>2]=c[h+24>>2];c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];c[j+16>>2]=c[f+16>>2];c[j+20>>2]=c[f+20>>2];c[j+24>>2]=c[f+24>>2];if(!(tl(k,j)|0)){q=0;r=q&1;l=i;return r|0;}f=a+68|0;a=b+68|0;c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];c[k+8>>2]=c[f+8>>2];c[k+12>>2]=c[f+12>>2];c[k+16>>2]=c[f+16>>2];c[k+20>>2]=c[f+20>>2];c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[j+16>>2]=c[a+16>>2];c[j+20>>2]=c[a+20>>2];if(!(ul(k,j)|0)){q=0;r=q&1;l=i;return r|0;}k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=b+4|0;b=p;p=c[b>>2]|0;a=c[b+4>>2]|0;c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];c[j+16>>2]=c[o+16>>2];c[j+20>>2]=c[o+20>>2];c[j+24>>2]=c[o+24>>2];q=(vl(k,m,n,j,p,a)|0)!=0;r=q&1;l=i;return r|0;}function ol(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0;f=l;l=l+32|0;g=f+16|0;h=f;i=f+12|0;j=f+8|0;c[g>>2]=a;a=h;c[a>>2]=d;c[a+4>>2]=e;e=jE(1,0,c[b+4>>2]|0)|0;a=y;d=h;k=c[d+4>>2]|0;if(a>>>0<k>>>0|((a|0)==(k|0)?e>>>0<(c[d>>2]|0)>>>0:0)){d=jE(1,0,c[b+4>>2]|0)|0;m=y;n=d;}else{d=h;m=c[d+4>>2]|0;n=c[d>>2]|0;}if(1>n>>>0)o=1;else{n=jE(1,0,c[b+4>>2]|0)|0;d=y;m=h;e=c[m+4>>2]|0;if(d>>>0<e>>>0|((d|0)==(e|0)?n>>>0<(c[m>>2]|0)>>>0:0)){m=jE(1,0,c[b+4>>2]|0)|0;p=m;q=y;}else{m=h;p=c[m>>2]|0;q=c[m+4>>2]|0;}o=p;}c[i>>2]=o;c[j>>2]=131072<(c[i>>2]|0)>>>0?131072:c[i>>2]|0;c[(c[g>>2]|0)+232>>2]=c[j>>2];j=(c[g>>2]|0)+116|0;i=b;o=j+104|0;do{c[j>>2]=c[i>>2];j=j+4|0;i=i+4|0;}while((j|0)<(o|0));i=h;j=dE(c[i>>2]|0,c[i+4>>2]|0,1,0)|0;i=(c[g>>2]|0)+240|0;c[i>>2]=j;c[i+4>>2]=y;i=(c[g>>2]|0)+248|0;c[i>>2]=0;c[i+4>>2]=0;i=(c[g>>2]|0)+256|0;c[i>>2]=0;c[i+4>>2]=0;i=h;if((c[i>>2]|0)==-1?(c[i+4>>2]|0)==-1:0)c[(c[g>>2]|0)+116+32>>2]=0;c[c[g>>2]>>2]=1;c[(c[g>>2]|0)+220>>2]=0;if(!(c[b+68>>2]|0)){r=c[g>>2]|0;rl(r,0,0)|0;s=c[g>>2]|0;t=s+472|0;u=t+8|0;hl(u);v=c[g>>2]|0;w=v+472|0;x=c[w>>2]|0;Cj(x);z=c[g>>2]|0;A=z+264|0;Lh(A,0,0)|0;l=f;return 0;}il((c[g>>2]|0)+408|0);r=c[g>>2]|0;rl(r,0,0)|0;s=c[g>>2]|0;t=s+472|0;u=t+8|0;hl(u);v=c[g>>2]|0;w=v+472|0;x=c[w>>2]|0;Cj(x);z=c[g>>2]|0;A=z+264|0;Lh(A,0,0)|0;l=f;return 0;}function pl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;d=l;l=l+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[c[f>>2]>>2];if(!(c[(c[e>>2]|0)+8>>2]|0))c[(c[e>>2]|0)+8>>2]=3;if(!(c[(c[e>>2]|0)+12>>2]|0))c[(c[e>>2]|0)+12>>2]=64;if((c[(c[f>>2]|0)+24>>2]|0)>>>0>=7){if((c[(c[f>>2]|0)+20>>2]|0)>>>0>(c[(c[e>>2]|0)+12>>2]|0)>>>0)i=c[(c[f>>2]|0)+20>>2]|0;else i=c[(c[e>>2]|0)+12>>2]|0;c[h>>2]=i;c[(c[e>>2]|0)+12>>2]=c[h>>2];}if(!(c[(c[e>>2]|0)+4>>2]|0))c[(c[e>>2]|0)+4>>2]=6>((c[g>>2]|0)-7|0)>>>0?6:(c[g>>2]|0)-7|0;if(!(c[(c[e>>2]|0)+16>>2]|0)){if((c[g>>2]|0)>>>0<(c[(c[e>>2]|0)+4>>2]|0)>>>0)j=0;else j=(c[g>>2]|0)-(c[(c[e>>2]|0)+4>>2]|0)|0;c[(c[e>>2]|0)+16>>2]=j;}j=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0<(c[(c[e>>2]|0)+4>>2]|0)>>>0){k=c[j+8>>2]|0;m=c[e>>2]|0;n=m+8|0;c[n>>2]=k;l=d;return;}else{k=c[j+4>>2]|0;m=c[e>>2]|0;n=m+8|0;c[n>>2]=k;l=d;return;}}function ql(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=sl(-1213897629,-820265764,(c[d>>2]|0)-1|0,0)|0;l=b;return a|0;}function rl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[c[g>>2]>>2]|0)!=1){c[f>>2]=-60;j=c[f>>2]|0;l=e;return j|0;}if(c[(c[g>>2]|0)+116+68>>2]|0){c[f>>2]=-40;j=c[f>>2]|0;l=e;return j|0;}else{c[(c[g>>2]|0)+456>>2]=c[h>>2];c[(c[g>>2]|0)+456+8>>2]=c[i>>2];c[(c[g>>2]|0)+456+12>>2]=c[i>>2];c[(c[g>>2]|0)+456+4>>2]=0;c[f>>2]=0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function sl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+16|0;h=f+8|0;i=f;j=g;c[j>>2]=a;c[j+4>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=i;c[e>>2]=1;c[e+4>>2]=0;while(1){e=h;if(!((c[e>>2]|0)!=0|(c[e+4>>2]|0)!=0))break;if((c[h>>2]&1|0)!=0|0!=0){e=g;b=i;d=cE(c[b>>2]|0,c[b+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;e=i;c[e>>2]=d;c[e+4>>2]=y;}e=h;d=iE(c[e>>2]|0,c[e+4>>2]|0,1)|0;e=h;c[e>>2]=d;c[e+4>>2]=y;e=g;d=g;b=cE(c[d>>2]|0,c[d+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;e=g;c[e>>2]=b;c[e+4>>2]=y;}g=i;y=c[g+4>>2]|0;l=f;return c[g>>2]|0;}function tl(a,b){a=a|0;b=b|0;return((c[a+8>>2]|0)==(c[b+8>>2]|0)?(c[a+4>>2]|0)==(c[b+4>>2]|0):0)&(c[a+24>>2]|0)==(c[b+24>>2]|0)&((c[a+16>>2]|0)==3|0)==((c[b+16>>2]|0)==3|0)|0;}function ul(a,b){a=a|0;b=b|0;var d=0;if(!(c[a>>2]|0)?!(c[b>>2]|0):0)d=1;else if((((c[a>>2]|0)==(c[b>>2]|0)?(c[a+4>>2]|0)==(c[b+4>>2]|0):0)?(c[a+8>>2]|0)==(c[b+8>>2]|0):0)?(c[a+12>>2]|0)==(c[b+12>>2]|0):0)d=(c[a+16>>2]|0)==(c[b+16>>2]|0);else d=0;return d&1|0;}function vl(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;h=l;l=l+32|0;i=h+28|0;j=h+24|0;k=h+20|0;m=h;n=h+16|0;o=h+12|0;p=h+8|0;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;d=m;c[d>>2]=f;c[d+4>>2]=g;g=jE(1,0,c[e>>2]|0)|0;d=y;f=m;b=c[f+4>>2]|0;if(d>>>0<b>>>0|((d|0)==(b|0)?g>>>0<(c[f>>2]|0)>>>0:0)){f=jE(1,0,c[e>>2]|0)|0;q=f;r=y;}else{f=m;q=c[f>>2]|0;r=c[f+4>>2]|0;}if(1>q>>>0)s=1;else{q=jE(1,0,c[e>>2]|0)|0;f=y;r=m;g=c[r+4>>2]|0;if(f>>>0<g>>>0|((f|0)==(g|0)?q>>>0<(c[r>>2]|0)>>>0:0)){r=jE(1,0,c[e>>2]|0)|0;t=r;u=y;}else{r=m;t=c[r>>2]|0;u=c[r+4>>2]|0;}s=t;}c[n>>2]=s;c[o>>2]=131072<(c[n>>2]|0)>>>0?131072:c[n>>2]|0;if((c[k>>2]|0)!=1){v=0;c[p>>2]=v;w=c[o>>2]|0;x=c[j>>2]|0;z=w>>>0<=x>>>0;A=z&1;B=c[p>>2]|0;C=c[i>>2]|0;D=B>>>0<=C>>>0;E=D&1;F=A&E;l=h;return F|0;}v=(c[n>>2]|0)+(c[o>>2]|0)|0;c[p>>2]=v;w=c[o>>2]|0;x=c[j>>2]|0;z=w>>>0<=x>>>0;A=z&1;B=c[p>>2]|0;C=c[i>>2]|0;D=B>>>0<=C>>>0;E=D&1;F=A&E;l=h;return F|0;}function wl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;xl(c[f>>2]|0,c[g>>2]&65535);a[(c[f>>2]|0)+2>>0]=(c[g>>2]|0)>>>16;l=e;return;}function xl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Jj()|0)!=0;d=c[h>>2]|0;if(f){yl(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function yl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=b[h>>1]|0;h=c[g>>2]|0;a[h>>0]=e;a[h+1>>0]=e>>8;l=f;return;}function zl(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;d=l;l=l+48|0;f=d+32|0;g=d+28|0;h=d+24|0;i=d+20|0;j=d+16|0;k=d+12|0;m=d+8|0;n=d+4|0;o=d;c[f>>2]=b;c[g>>2]=c[c[f>>2]>>2];c[h>>2]=c[(c[f>>2]|0)+16>>2];c[i>>2]=c[(c[f>>2]|0)+24>>2];c[j>>2]=c[(c[f>>2]|0)+20>>2];c[k>>2]=((c[(c[f>>2]|0)+4>>2]|0)-(c[c[f>>2]>>2]|0)|0)/8|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;c[n>>2]=e[(c[g>>2]|0)+(c[m>>2]<<3)+4>>1];c[o>>2]=e[(c[g>>2]|0)+(c[m>>2]<<3)+6>>1];b=(Al(c[n>>2]|0)|0)&255;a[(c[h>>2]|0)+(c[m>>2]|0)>>0]=b;b=(uj(c[(c[g>>2]|0)+(c[m>>2]<<3)>>2]|0)|0)&255;a[(c[i>>2]|0)+(c[m>>2]|0)>>0]=b;b=(Bl(c[o>>2]|0)|0)&255;a[(c[j>>2]|0)+(c[m>>2]|0)>>0]=b;c[m>>2]=(c[m>>2]|0)+1;}if((c[(c[f>>2]|0)+28>>2]|0)==1)a[(c[h>>2]|0)+(c[(c[f>>2]|0)+32>>2]|0)>>0]=35;if((c[(c[f>>2]|0)+28>>2]|0)!=2){l=d;return;}a[(c[j>>2]|0)+(c[(c[f>>2]|0)+32>>2]|0)>>0]=52;l=d;return;}function Al(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;if((c[e>>2]|0)>>>0>63){f=(uj(a)|0)+19|0;l=b;return f|0;}else{f=d[3008+a>>0]|0;l=b;return f|0;}return 0;}function Bl(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;if((c[e>>2]|0)>>>0>127){f=(uj(a)|0)+36|0;l=b;return f|0;}else{f=d[3072+a>>0]|0;l=b;return f|0;}return 0;}function Cl(a,b,d,e,f,g,h,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;o=l;l=l+64|0;p=o+48|0;q=o+44|0;r=o+40|0;s=o+36|0;t=o+32|0;u=o+28|0;v=o+24|0;w=o+20|0;x=o+16|0;y=o+12|0;z=o+8|0;A=o+4|0;B=o;c[q>>2]=a;c[r>>2]=b;c[s>>2]=d;c[t>>2]=e;c[u>>2]=f;c[v>>2]=g;c[w>>2]=h;c[x>>2]=i;c[y>>2]=j;c[z>>2]=k;c[A>>2]=m;c[B>>2]=n;if(c[B>>2]|0){c[p>>2]=Dl(c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;C=c[p>>2]|0;l=o;return C|0;}else{c[p>>2]=El(c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;C=c[p>>2]|0;l=o;return C|0;}return 0;}function Dl(b,f,g,h,i,j,k,m,n,o,p){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;q=l;l=l+208|0;r=q+192|0;s=q+188|0;t=q+184|0;u=q+180|0;v=q+176|0;w=q+172|0;x=q+168|0;y=q+164|0;z=q+160|0;A=q+156|0;B=q+152|0;C=q+148|0;D=q+128|0;E=q+112|0;F=q+96|0;G=q+80|0;H=q+76|0;I=q+72|0;J=q+68|0;K=q+64|0;L=q+198|0;M=q+197|0;N=q+196|0;O=q+60|0;P=q+56|0;Q=q+52|0;R=q+48|0;S=q+44|0;T=q+40|0;U=q+36|0;V=q+32|0;W=q+28|0;X=q+24|0;Y=q+20|0;Z=q+16|0;_=q+12|0;$=q+8|0;aa=q+4|0;ba=q;c[T>>2]=b;c[U>>2]=f;c[V>>2]=g;c[W>>2]=h;c[X>>2]=i;c[Y>>2]=j;c[Z>>2]=k;c[_>>2]=m;c[$>>2]=n;c[aa>>2]=o;c[ba>>2]=p;p=c[U>>2]|0;U=c[V>>2]|0;V=c[W>>2]|0;W=c[X>>2]|0;X=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;aa=c[ba>>2]|0;c[s>>2]=c[T>>2];c[t>>2]=p;c[u>>2]=U;c[v>>2]=V;c[w>>2]=W;c[x>>2]=X;c[y>>2]=Y;c[z>>2]=Z;c[A>>2]=_;c[B>>2]=$;c[C>>2]=aa;c[H>>2]=Fl(D,c[s>>2]|0,c[t>>2]|0)|0;if(wj(c[H>>2]|0)|0){c[r>>2]=-70;ca=c[r>>2]|0;l=q;return ca|0;}Gl(E,c[u>>2]|0,d[(c[v>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Gl(F,c[w>>2]|0,d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Gl(G,c[y>>2]|0,d[(c[z>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Hl(D,e[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)+4>>1]|0,c[5696+((d[(c[z>>2]|0)+((c[B>>2]|0)-1)>>0]|0)<<2)>>2]|0);if(Il()|0)Jl(D);Hl(D,e[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)+6>>1]|0,c[5840+((d[(c[v>>2]|0)+((c[B>>2]|0)-1)>>0]|0)<<2)>>2]|0);if(Il()|0)Jl(D);if(c[C>>2]|0){c[I>>2]=d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0];y=c[I>>2]|0;w=c[I>>2]|0;u=(Il()|0)!=0;if(w>>>0<((u?25:57)-1|0)>>>0)da=c[I>>2]|0;else{u=(Il()|0)!=0;da=(u?25:57)-1|0;}c[J>>2]=y-da;if(c[J>>2]|0){Hl(D,c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0,c[J>>2]|0);Jl(D);}Hl(D,(c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0)>>>(c[J>>2]|0),(c[I>>2]|0)-(c[J>>2]|0)|0);}else Hl(D,c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0,d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Jl(D);c[K>>2]=(c[B>>2]|0)-2;while(1){if((c[K>>2]|0)>>>0>=(c[B>>2]|0)>>>0)break;a[L>>0]=a[(c[z>>2]|0)+(c[K>>2]|0)>>0]|0;a[M>>0]=a[(c[x>>2]|0)+(c[K>>2]|0)>>0]|0;a[N>>0]=a[(c[v>>2]|0)+(c[K>>2]|0)>>0]|0;c[O>>2]=c[5696+((d[L>>0]|0)<<2)>>2];c[P>>2]=d[M>>0];c[Q>>2]=c[5840+((d[N>>0]|0)<<2)>>2];Kl(D,F,d[M>>0]|0);Kl(D,E,d[N>>0]|0);if(Il()|0)Jl(D);Kl(D,G,d[L>>0]|0);if(!(!(Il()|0)?((c[P>>2]|0)+(c[Q>>2]|0)+(c[O>>2]|0)|0)>>>0<31:0))Jl(D);Hl(D,e[(c[A>>2]|0)+(c[K>>2]<<3)+4>>1]|0,c[O>>2]|0);if(Il()|0?((c[O>>2]|0)+(c[Q>>2]|0)|0)>>>0>24:0)Jl(D);Hl(D,e[(c[A>>2]|0)+(c[K>>2]<<3)+6>>1]|0,c[Q>>2]|0);if(!(!(Il()|0)?((c[P>>2]|0)+(c[Q>>2]|0)+(c[O>>2]|0)|0)>>>0<=56:0))Jl(D);if(c[C>>2]|0){J=c[P>>2]|0;I=c[P>>2]|0;da=(Il()|0)!=0;if(I>>>0<((da?25:57)-1|0)>>>0)ea=c[P>>2]|0;else{da=(Il()|0)!=0;ea=(da?25:57)-1|0;}c[R>>2]=J-ea;if(c[R>>2]|0){Hl(D,c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0,c[R>>2]|0);Jl(D);}Hl(D,(c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0)>>>(c[R>>2]|0),(c[P>>2]|0)-(c[R>>2]|0)|0);}else Hl(D,c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0,c[P>>2]|0);Jl(D);c[K>>2]=(c[K>>2]|0)+-1;}Ll(D,E);Ll(D,F);Ll(D,G);c[S>>2]=Ml(D)|0;if(!(c[S>>2]|0)){c[r>>2]=-70;ca=c[r>>2]|0;l=q;return ca|0;}else{c[r>>2]=c[S>>2];ca=c[r>>2]|0;l=q;return ca|0;}return 0;}function El(b,f,g,h,i,j,k,m,n,o,p){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;q=l;l=l+208|0;r=q+192|0;s=q+188|0;t=q+184|0;u=q+180|0;v=q+176|0;w=q+172|0;x=q+168|0;y=q+164|0;z=q+160|0;A=q+156|0;B=q+152|0;C=q+148|0;D=q+128|0;E=q+112|0;F=q+96|0;G=q+80|0;H=q+76|0;I=q+72|0;J=q+68|0;K=q+64|0;L=q+198|0;M=q+197|0;N=q+196|0;O=q+60|0;P=q+56|0;Q=q+52|0;R=q+48|0;S=q+44|0;T=q+40|0;U=q+36|0;V=q+32|0;W=q+28|0;X=q+24|0;Y=q+20|0;Z=q+16|0;_=q+12|0;$=q+8|0;aa=q+4|0;ba=q;c[T>>2]=b;c[U>>2]=f;c[V>>2]=g;c[W>>2]=h;c[X>>2]=i;c[Y>>2]=j;c[Z>>2]=k;c[_>>2]=m;c[$>>2]=n;c[aa>>2]=o;c[ba>>2]=p;p=c[U>>2]|0;U=c[V>>2]|0;V=c[W>>2]|0;W=c[X>>2]|0;X=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;aa=c[ba>>2]|0;c[s>>2]=c[T>>2];c[t>>2]=p;c[u>>2]=U;c[v>>2]=V;c[w>>2]=W;c[x>>2]=X;c[y>>2]=Y;c[z>>2]=Z;c[A>>2]=_;c[B>>2]=$;c[C>>2]=aa;c[H>>2]=Fl(D,c[s>>2]|0,c[t>>2]|0)|0;if(wj(c[H>>2]|0)|0){c[r>>2]=-70;ca=c[r>>2]|0;l=q;return ca|0;}Gl(E,c[u>>2]|0,d[(c[v>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Gl(F,c[w>>2]|0,d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Gl(G,c[y>>2]|0,d[(c[z>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Hl(D,e[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)+4>>1]|0,c[5696+((d[(c[z>>2]|0)+((c[B>>2]|0)-1)>>0]|0)<<2)>>2]|0);if(Il()|0)Jl(D);Hl(D,e[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)+6>>1]|0,c[5840+((d[(c[v>>2]|0)+((c[B>>2]|0)-1)>>0]|0)<<2)>>2]|0);if(Il()|0)Jl(D);if(c[C>>2]|0){c[I>>2]=d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0];y=c[I>>2]|0;w=c[I>>2]|0;u=(Il()|0)!=0;if(w>>>0<((u?25:57)-1|0)>>>0)da=c[I>>2]|0;else{u=(Il()|0)!=0;da=(u?25:57)-1|0;}c[J>>2]=y-da;if(c[J>>2]|0){Hl(D,c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0,c[J>>2]|0);Jl(D);}Hl(D,(c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0)>>>(c[J>>2]|0),(c[I>>2]|0)-(c[J>>2]|0)|0);}else Hl(D,c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0,d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Jl(D);c[K>>2]=(c[B>>2]|0)-2;while(1){if((c[K>>2]|0)>>>0>=(c[B>>2]|0)>>>0)break;a[L>>0]=a[(c[z>>2]|0)+(c[K>>2]|0)>>0]|0;a[M>>0]=a[(c[x>>2]|0)+(c[K>>2]|0)>>0]|0;a[N>>0]=a[(c[v>>2]|0)+(c[K>>2]|0)>>0]|0;c[O>>2]=c[5696+((d[L>>0]|0)<<2)>>2];c[P>>2]=d[M>>0];c[Q>>2]=c[5840+((d[N>>0]|0)<<2)>>2];Kl(D,F,d[M>>0]|0);Kl(D,E,d[N>>0]|0);if(Il()|0)Jl(D);Kl(D,G,d[L>>0]|0);if(!(!(Il()|0)?((c[P>>2]|0)+(c[Q>>2]|0)+(c[O>>2]|0)|0)>>>0<31:0))Jl(D);Hl(D,e[(c[A>>2]|0)+(c[K>>2]<<3)+4>>1]|0,c[O>>2]|0);if(Il()|0?((c[O>>2]|0)+(c[Q>>2]|0)|0)>>>0>24:0)Jl(D);Hl(D,e[(c[A>>2]|0)+(c[K>>2]<<3)+6>>1]|0,c[Q>>2]|0);if(!(!(Il()|0)?((c[P>>2]|0)+(c[Q>>2]|0)+(c[O>>2]|0)|0)>>>0<=56:0))Jl(D);if(c[C>>2]|0){J=c[P>>2]|0;I=c[P>>2]|0;da=(Il()|0)!=0;if(I>>>0<((da?25:57)-1|0)>>>0)ea=c[P>>2]|0;else{da=(Il()|0)!=0;ea=(da?25:57)-1|0;}c[R>>2]=J-ea;if(c[R>>2]|0){Hl(D,c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0,c[R>>2]|0);Jl(D);}Hl(D,(c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0)>>>(c[R>>2]|0),(c[P>>2]|0)-(c[R>>2]|0)|0);}else Hl(D,c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0,c[P>>2]|0);Jl(D);c[K>>2]=(c[K>>2]|0)+-1;}Ll(D,E);Ll(D,F);Ll(D,G);c[S>>2]=Ml(D)|0;if(!(c[S>>2]|0)){c[r>>2]=-70;ca=c[r>>2]|0;l=q;return ca|0;}else{c[r>>2]=c[S>>2];ca=c[r>>2]|0;l=q;return ca|0;}return 0;}function Fl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[c[g>>2]>>2]=0;c[(c[g>>2]|0)+4>>2]=0;c[(c[g>>2]|0)+8>>2]=c[h>>2];c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+8>>2];c[(c[g>>2]|0)+16>>2]=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]|0)+-4;if((c[i>>2]|0)>>>0<=4){c[f>>2]=-70;j=c[f>>2]|0;l=e;return j|0;}else{c[f>>2]=0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function Gl(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;Ul(c[g>>2]|0,c[h>>2]|0);h=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]<<3)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[k>>2]=c[(c[g>>2]|0)+4>>2];c[m>>2]=((c[j+4>>2]|0)+32768|0)>>>16;c[c[g>>2]>>2]=(c[m>>2]<<16)-(c[j+4>>2]|0);c[c[g>>2]>>2]=e[(c[k>>2]|0)+((c[c[g>>2]>>2]>>c[m>>2])+(c[j>>2]|0)<<1)>>1];l=f;return;}function Hl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|(c[g>>2]&c[2800+(c[h>>2]<<2)>>2])<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Il(){return 1;}function Jl(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[(c[d>>2]|0)+4>>2]|0)>>>3;Ol(c[(c[d>>2]|0)+12>>2]|0,c[c[d>>2]>>2]|0);a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);if((c[(c[d>>2]|0)+12>>2]|0)>>>0>(c[(c[d>>2]|0)+16>>2]|0)>>>0)c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+16>>2];a=(c[d>>2]|0)+4|0;c[a>>2]=c[a>>2]&7;a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)>>>(c[e>>2]<<3);l=b;return;}function Kl(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;d=(c[(c[h>>2]|0)+8>>2]|0)+(c[i>>2]<<3)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[k>>2]=c[(c[h>>2]|0)+4>>2];c[m>>2]=((c[c[h>>2]>>2]|0)+(c[j+4>>2]|0)|0)>>>16;Hl(c[g>>2]|0,c[c[h>>2]>>2]|0,c[m>>2]|0);c[c[h>>2]>>2]=e[(c[k>>2]|0)+((c[c[h>>2]>>2]>>c[m>>2])+(c[j>>2]|0)<<1)>>1];l=f;return;}function Ll(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;Hl(c[e>>2]|0,c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+12>>2]|0);Jl(c[e>>2]|0);l=d;return;}function Ml(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;Nl(c[e>>2]|0,1,1);Jl(c[e>>2]|0);if((c[(c[e>>2]|0)+12>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{c[d>>2]=(c[(c[e>>2]|0)+12>>2]|0)-(c[(c[e>>2]|0)+8>>2]|0)+((c[(c[e>>2]|0)+4>>2]|0)>>>0>0&1);f=c[d>>2]|0;l=b;return f|0;}return 0;}function Nl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|c[g>>2]<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Ol(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(Il()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){Pl(a,e);l=d;return;}else{Ql(a,e,0);l=d;return;}}function Pl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(Jj()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){Tl(a,e);l=d;return;}else{Tl(a,Lj(e)|0);l=d;return;}}function Ql(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=(Jj()|0)!=0;a=c[f>>2]|0;f=g;g=c[f>>2]|0;b=c[f+4>>2]|0;if(d){Rl(a,g,b);l=e;return;}else{d=Sl(g,b)|0;Rl(a,d,y);l=e;return;}}function Rl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+8|0;h=f;c[g>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;h=c[e>>2]|0;b=c[e+4>>2]|0;e=c[g>>2]|0;g=e;a[g>>0]=h;a[g+1>>0]=h>>8;a[g+2>>0]=h>>16;a[g+3>>0]=h>>24;h=e+4|0;a[h>>0]=b;a[h+1>>0]=b>>8;a[h+2>>0]=b>>16;a[h+3>>0]=b>>24;l=f;return;}function Sl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Tl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[g>>2]|0;g=c[f>>2]|0;a[g>>0]=d;a[g+1>>0]=d>>8;a[g+2>>0]=d>>16;a[g+3>>0]=d>>24;l=e;return;}function Ul(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[f>>2];c[h>>2]=c[g>>2];c[i>>2]=(Vl(c[g>>2]|0)|0)&65535;c[c[e>>2]>>2]=1<<c[i>>2];c[(c[e>>2]|0)+4>>2]=(c[h>>2]|0)+4;if(c[i>>2]|0)j=1<<(c[i>>2]|0)-1;else j=1;c[(c[e>>2]|0)+8>>2]=(c[f>>2]|0)+4+(j<<2);c[(c[e>>2]|0)+12>>2]=c[i>>2];l=d;return;}function Vl(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Wl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;l=d;return c[2928+(((c[f>>2]|0)!=0&1)*36|0)+(c[e>>2]<<2)>>2]|0;}function Xl(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0;i=l;l=l+512|0;j=i+500|0;k=i+496|0;m=i+492|0;n=i+488|0;o=i+484|0;p=i+480|0;q=i+476|0;r=i+472|0;s=i+468|0;t=i+464|0;u=i+460|0;v=i+456|0;w=i+452|0;x=i+448|0;y=i+444|0;z=i+440|0;A=i+436|0;B=i+432|0;C=i+428|0;D=i+424|0;E=i+420|0;F=i+416|0;G=i+412|0;H=i+408|0;I=i+404|0;J=i+400|0;K=i+396|0;L=i+392|0;M=i+388|0;N=i+384|0;O=i+380|0;P=i+376|0;Q=i+372|0;R=i+368|0;S=i+364|0;T=i+360|0;U=i+356|0;V=i+352|0;W=i+348|0;X=i+344|0;Y=i+340|0;Z=i+336|0;_=i+332|0;$=i+328|0;aa=i+324|0;ba=i+320|0;ca=i+316|0;da=i+312|0;ea=i+308|0;fa=i+304|0;ga=i+300|0;ha=i+296|0;ia=i+292|0;ja=i+288|0;ka=i+284|0;la=i+280|0;ma=i+276|0;na=i+272|0;oa=i+268|0;pa=i+264|0;qa=i+260|0;ra=i+256|0;sa=i+252|0;ta=i+248|0;ua=i+244|0;va=i+240|0;wa=i+236|0;xa=i+232|0;ya=i+228|0;za=i+224|0;Aa=i+220|0;Ba=i+216|0;Ca=i+212|0;Da=i+208|0;Ea=i+204|0;Fa=i+200|0;Ga=i+196|0;Ha=i+192|0;Ia=i+188|0;Ja=i+184|0;Ka=i+180|0;La=i+176|0;Ma=i+172|0;Na=i+168|0;Oa=i+164|0;Pa=i+160|0;Qa=i+156|0;Ra=i+152|0;Sa=i+148|0;Ta=i+144|0;Ua=i+140|0;Va=i+136|0;Wa=i+132|0;Xa=i+128|0;Ya=i+124|0;Za=i+120|0;_a=i+116|0;$a=i+112|0;ab=i+108|0;bb=i+104|0;cb=i+100|0;db=i+96|0;eb=i+92|0;fb=i+88|0;gb=i+84|0;hb=i+80|0;ib=i+76|0;jb=i+72|0;kb=i+68|0;lb=i+64|0;mb=i+60|0;nb=i+56|0;ob=i+52|0;pb=i+48|0;qb=i+44|0;rb=i+40|0;sb=i+36|0;tb=i+32|0;ub=i+28|0;vb=i+24|0;wb=i+20|0;xb=i+16|0;yb=i+12|0;zb=i+8|0;Ab=i+4|0;Bb=i;c[tb>>2]=a;c[ub>>2]=b;c[vb>>2]=e;c[wb>>2]=f;c[xb>>2]=g;c[yb>>2]=h;c[zb>>2]=c[(c[wb>>2]|0)+8>>2];c[Ab>>2]=c[(c[wb>>2]|0)+16>>2];c[Bb>>2]=c[(c[wb>>2]|0)+20>>2];switch(c[Ab>>2]|0){case 7:{Ab=c[ub>>2]|0;wb=c[vb>>2]|0;h=c[xb>>2]|0;g=c[yb>>2]|0;f=c[zb>>2]|0;e=c[Bb>>2]|0;c[j>>2]=c[tb>>2];c[k>>2]=Ab;c[m>>2]=wb;c[n>>2]=h;c[o>>2]=g;c[p>>2]=f;c[q>>2]=e;c[r>>2]=7;c[s>>2]=c[(c[j>>2]|0)+36>>2];c[t>>2]=c[(c[j>>2]|0)+4>>2];c[u>>2]=c[n>>2];c[v>>2]=c[u>>2];c[w>>2]=c[u>>2];c[x>>2]=c[(c[j>>2]|0)+12>>2];c[y>>2]=(c[t>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[u>>2]|0)+(c[o>>2]|0);c[A>>2]=(c[z>>2]|0)+-8;c[B>>2]=c[c[m>>2]>>2];c[C>>2]=c[(c[m>>2]|0)+4>>2];c[D>>2]=0;c[v>>2]=(c[v>>2]|0)+((c[v>>2]|0)==(c[y>>2]|0)&1);c[E>>2]=(c[v>>2]|0)-(c[y>>2]|0);if((c[C>>2]|0)>>>0>(c[E>>2]|0)>>>0){c[D>>2]=c[C>>2];c[C>>2]=0;}if((c[B>>2]|0)>>>0>(c[E>>2]|0)>>>0){c[D>>2]=c[B>>2];c[B>>2]=0;}a:while(1){if((c[v>>2]|0)>>>0>=(c[A>>2]|0)>>>0)break;c[G>>2]=Tk(c[v>>2]|0,c[p>>2]|0,c[r>>2]|0)|0;c[H>>2]=(c[v>>2]|0)-(c[t>>2]|0);c[I>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];c[J>>2]=(c[t>>2]|0)+(c[I>>2]|0);c[(c[s>>2]|0)+(c[G>>2]<<2)>>2]=c[H>>2];E=(c[B>>2]|0)>>>0>0&1;o=fl((c[v>>2]|0)+1+(0-(c[B>>2]|0))|0)|0;do{if(E&(o|0)==(fl((c[v>>2]|0)+1|0)|0)|0){c[F>>2]=(nn((c[v>>2]|0)+1+4|0,(c[v>>2]|0)+1+4+(0-(c[B>>2]|0))|0,c[z>>2]|0)|0)+4;c[v>>2]=(c[v>>2]|0)+1;kn(c[k>>2]|0,(c[v>>2]|0)-(c[w>>2]|0)|0,c[w>>2]|0,0,(c[F>>2]|0)-3|0);}else{if((c[I>>2]|0)>>>0>(c[x>>2]|0)>>>0?(u=fl(c[J>>2]|0)|0,(u|0)==(fl(c[v>>2]|0)|0)):0){c[F>>2]=(nn((c[v>>2]|0)+4|0,(c[J>>2]|0)+4|0,c[z>>2]|0)|0)+4;c[K>>2]=(c[v>>2]|0)-(c[J>>2]|0);while(1){if(!(((c[v>>2]|0)>>>0>(c[w>>2]|0)>>>0?(c[J>>2]|0)>>>0>(c[y>>2]|0)>>>0:0)|0))break;if((d[(c[v>>2]|0)+-1>>0]|0|0)!=(d[(c[J>>2]|0)+-1>>0]|0|0))break;c[v>>2]=(c[v>>2]|0)+-1;c[J>>2]=(c[J>>2]|0)+-1;c[F>>2]=(c[F>>2]|0)+1;}c[C>>2]=c[B>>2];c[B>>2]=c[K>>2];kn(c[k>>2]|0,(c[v>>2]|0)-(c[w>>2]|0)|0,c[w>>2]|0,(c[K>>2]|0)+2|0,(c[F>>2]|0)-3|0);break;}c[v>>2]=(c[v>>2]|0)+(((c[v>>2]|0)-(c[w>>2]|0)>>8)+(c[q>>2]|0));continue a;}}while(0);c[v>>2]=(c[v>>2]|0)+(c[F>>2]|0);c[w>>2]=c[v>>2];b:do{if((c[v>>2]|0)>>>0<=(c[A>>2]|0)>>>0){o=(c[H>>2]|0)+2|0;E=c[s>>2]|0;c[E+((Tk((c[t>>2]|0)+(c[H>>2]|0)+2|0,c[p>>2]|0,c[r>>2]|0)|0)<<2)>>2]=o;o=(c[v>>2]|0)+-2-(c[t>>2]|0)|0;E=c[s>>2]|0;c[E+((Tk((c[v>>2]|0)+-2|0,c[p>>2]|0,c[r>>2]|0)|0)<<2)>>2]=o;while(1){if((c[v>>2]|0)>>>0>(c[A>>2]|0)>>>0)break b;o=(c[C>>2]|0)>>>0>0&1;E=fl(c[v>>2]|0)|0;if(!(o&(E|0)==(fl((c[v>>2]|0)+(0-(c[C>>2]|0))|0)|0)))break b;c[L>>2]=(nn((c[v>>2]|0)+4|0,(c[v>>2]|0)+4+(0-(c[C>>2]|0))|0,c[z>>2]|0)|0)+4;c[M>>2]=c[C>>2];c[C>>2]=c[B>>2];c[B>>2]=c[M>>2];E=(c[v>>2]|0)-(c[t>>2]|0)|0;o=c[s>>2]|0;c[o+((Tk(c[v>>2]|0,c[p>>2]|0,c[r>>2]|0)|0)<<2)>>2]=E;kn(c[k>>2]|0,0,c[w>>2]|0,0,(c[L>>2]|0)-3|0);c[v>>2]=(c[v>>2]|0)+(c[L>>2]|0);c[w>>2]=c[v>>2];}}}while(0);}c[c[m>>2]>>2]=c[B>>2]|0?c[B>>2]|0:c[D>>2]|0;c[(c[m>>2]|0)+4>>2]=c[C>>2]|0?c[C>>2]|0:c[D>>2]|0;c[sb>>2]=(c[z>>2]|0)-(c[w>>2]|0);Cb=c[sb>>2]|0;l=i;return Cb|0;}case 5:{w=c[ub>>2]|0;z=c[vb>>2]|0;D=c[xb>>2]|0;C=c[yb>>2]|0;m=c[zb>>2]|0;B=c[Bb>>2]|0;c[oa>>2]=c[tb>>2];c[pa>>2]=w;c[qa>>2]=z;c[ra>>2]=D;c[sa>>2]=C;c[ta>>2]=m;c[ua>>2]=B;c[va>>2]=5;c[wa>>2]=c[(c[oa>>2]|0)+36>>2];c[xa>>2]=c[(c[oa>>2]|0)+4>>2];c[ya>>2]=c[ra>>2];c[za>>2]=c[ya>>2];c[Aa>>2]=c[ya>>2];c[Ba>>2]=c[(c[oa>>2]|0)+12>>2];c[Ca>>2]=(c[xa>>2]|0)+(c[Ba>>2]|0);c[Da>>2]=(c[ya>>2]|0)+(c[sa>>2]|0);c[Ea>>2]=(c[Da>>2]|0)+-8;c[Fa>>2]=c[c[qa>>2]>>2];c[Ga>>2]=c[(c[qa>>2]|0)+4>>2];c[Ha>>2]=0;c[za>>2]=(c[za>>2]|0)+((c[za>>2]|0)==(c[Ca>>2]|0)&1);c[Ia>>2]=(c[za>>2]|0)-(c[Ca>>2]|0);if((c[Ga>>2]|0)>>>0>(c[Ia>>2]|0)>>>0){c[Ha>>2]=c[Ga>>2];c[Ga>>2]=0;}if((c[Fa>>2]|0)>>>0>(c[Ia>>2]|0)>>>0){c[Ha>>2]=c[Fa>>2];c[Fa>>2]=0;}c:while(1){if((c[za>>2]|0)>>>0>=(c[Ea>>2]|0)>>>0)break;c[Ka>>2]=Tk(c[za>>2]|0,c[ta>>2]|0,c[va>>2]|0)|0;c[La>>2]=(c[za>>2]|0)-(c[xa>>2]|0);c[Ma>>2]=c[(c[wa>>2]|0)+(c[Ka>>2]<<2)>>2];c[Na>>2]=(c[xa>>2]|0)+(c[Ma>>2]|0);c[(c[wa>>2]|0)+(c[Ka>>2]<<2)>>2]=c[La>>2];Ia=(c[Fa>>2]|0)>>>0>0&1;sa=fl((c[za>>2]|0)+1+(0-(c[Fa>>2]|0))|0)|0;do{if(Ia&(sa|0)==(fl((c[za>>2]|0)+1|0)|0)|0){c[Ja>>2]=(nn((c[za>>2]|0)+1+4|0,(c[za>>2]|0)+1+4+(0-(c[Fa>>2]|0))|0,c[Da>>2]|0)|0)+4;c[za>>2]=(c[za>>2]|0)+1;kn(c[pa>>2]|0,(c[za>>2]|0)-(c[Aa>>2]|0)|0,c[Aa>>2]|0,0,(c[Ja>>2]|0)-3|0);}else{if((c[Ma>>2]|0)>>>0>(c[Ba>>2]|0)>>>0?(ya=fl(c[Na>>2]|0)|0,(ya|0)==(fl(c[za>>2]|0)|0)):0){c[Ja>>2]=(nn((c[za>>2]|0)+4|0,(c[Na>>2]|0)+4|0,c[Da>>2]|0)|0)+4;c[Oa>>2]=(c[za>>2]|0)-(c[Na>>2]|0);while(1){if(!(((c[za>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?(c[Na>>2]|0)>>>0>(c[Ca>>2]|0)>>>0:0)|0))break;if((d[(c[za>>2]|0)+-1>>0]|0|0)!=(d[(c[Na>>2]|0)+-1>>0]|0|0))break;c[za>>2]=(c[za>>2]|0)+-1;c[Na>>2]=(c[Na>>2]|0)+-1;c[Ja>>2]=(c[Ja>>2]|0)+1;}c[Ga>>2]=c[Fa>>2];c[Fa>>2]=c[Oa>>2];kn(c[pa>>2]|0,(c[za>>2]|0)-(c[Aa>>2]|0)|0,c[Aa>>2]|0,(c[Oa>>2]|0)+2|0,(c[Ja>>2]|0)-3|0);break;}c[za>>2]=(c[za>>2]|0)+(((c[za>>2]|0)-(c[Aa>>2]|0)>>8)+(c[ua>>2]|0));continue c;}}while(0);c[za>>2]=(c[za>>2]|0)+(c[Ja>>2]|0);c[Aa>>2]=c[za>>2];d:do{if((c[za>>2]|0)>>>0<=(c[Ea>>2]|0)>>>0){sa=(c[La>>2]|0)+2|0;Ia=c[wa>>2]|0;c[Ia+((Tk((c[xa>>2]|0)+(c[La>>2]|0)+2|0,c[ta>>2]|0,c[va>>2]|0)|0)<<2)>>2]=sa;sa=(c[za>>2]|0)+-2-(c[xa>>2]|0)|0;Ia=c[wa>>2]|0;c[Ia+((Tk((c[za>>2]|0)+-2|0,c[ta>>2]|0,c[va>>2]|0)|0)<<2)>>2]=sa;while(1){if((c[za>>2]|0)>>>0>(c[Ea>>2]|0)>>>0)break d;sa=(c[Ga>>2]|0)>>>0>0&1;Ia=fl(c[za>>2]|0)|0;if(!(sa&(Ia|0)==(fl((c[za>>2]|0)+(0-(c[Ga>>2]|0))|0)|0)))break d;c[Pa>>2]=(nn((c[za>>2]|0)+4|0,(c[za>>2]|0)+4+(0-(c[Ga>>2]|0))|0,c[Da>>2]|0)|0)+4;c[Qa>>2]=c[Ga>>2];c[Ga>>2]=c[Fa>>2];c[Fa>>2]=c[Qa>>2];Ia=(c[za>>2]|0)-(c[xa>>2]|0)|0;sa=c[wa>>2]|0;c[sa+((Tk(c[za>>2]|0,c[ta>>2]|0,c[va>>2]|0)|0)<<2)>>2]=Ia;kn(c[pa>>2]|0,0,c[Aa>>2]|0,0,(c[Pa>>2]|0)-3|0);c[za>>2]=(c[za>>2]|0)+(c[Pa>>2]|0);c[Aa>>2]=c[za>>2];}}}while(0);}c[c[qa>>2]>>2]=c[Fa>>2]|0?c[Fa>>2]|0:c[Ha>>2]|0;c[(c[qa>>2]|0)+4>>2]=c[Ga>>2]|0?c[Ga>>2]|0:c[Ha>>2]|0;c[sb>>2]=(c[Da>>2]|0)-(c[Aa>>2]|0);Cb=c[sb>>2]|0;l=i;return Cb|0;}case 6:{Aa=c[ub>>2]|0;Da=c[vb>>2]|0;Ha=c[xb>>2]|0;Ga=c[yb>>2]|0;qa=c[zb>>2]|0;Fa=c[Bb>>2]|0;c[N>>2]=c[tb>>2];c[O>>2]=Aa;c[P>>2]=Da;c[Q>>2]=Ha;c[R>>2]=Ga;c[S>>2]=qa;c[T>>2]=Fa;c[U>>2]=6;c[V>>2]=c[(c[N>>2]|0)+36>>2];c[W>>2]=c[(c[N>>2]|0)+4>>2];c[X>>2]=c[Q>>2];c[Y>>2]=c[X>>2];c[Z>>2]=c[X>>2];c[_>>2]=c[(c[N>>2]|0)+12>>2];c[$>>2]=(c[W>>2]|0)+(c[_>>2]|0);c[aa>>2]=(c[X>>2]|0)+(c[R>>2]|0);c[ba>>2]=(c[aa>>2]|0)+-8;c[ca>>2]=c[c[P>>2]>>2];c[da>>2]=c[(c[P>>2]|0)+4>>2];c[ea>>2]=0;c[Y>>2]=(c[Y>>2]|0)+((c[Y>>2]|0)==(c[$>>2]|0)&1);c[fa>>2]=(c[Y>>2]|0)-(c[$>>2]|0);if((c[da>>2]|0)>>>0>(c[fa>>2]|0)>>>0){c[ea>>2]=c[da>>2];c[da>>2]=0;}if((c[ca>>2]|0)>>>0>(c[fa>>2]|0)>>>0){c[ea>>2]=c[ca>>2];c[ca>>2]=0;}e:while(1){if((c[Y>>2]|0)>>>0>=(c[ba>>2]|0)>>>0)break;c[ha>>2]=Tk(c[Y>>2]|0,c[S>>2]|0,c[U>>2]|0)|0;c[ia>>2]=(c[Y>>2]|0)-(c[W>>2]|0);c[ja>>2]=c[(c[V>>2]|0)+(c[ha>>2]<<2)>>2];c[ka>>2]=(c[W>>2]|0)+(c[ja>>2]|0);c[(c[V>>2]|0)+(c[ha>>2]<<2)>>2]=c[ia>>2];fa=(c[ca>>2]|0)>>>0>0&1;R=fl((c[Y>>2]|0)+1+(0-(c[ca>>2]|0))|0)|0;do{if(fa&(R|0)==(fl((c[Y>>2]|0)+1|0)|0)|0){c[ga>>2]=(nn((c[Y>>2]|0)+1+4|0,(c[Y>>2]|0)+1+4+(0-(c[ca>>2]|0))|0,c[aa>>2]|0)|0)+4;c[Y>>2]=(c[Y>>2]|0)+1;kn(c[O>>2]|0,(c[Y>>2]|0)-(c[Z>>2]|0)|0,c[Z>>2]|0,0,(c[ga>>2]|0)-3|0);}else{if((c[ja>>2]|0)>>>0>(c[_>>2]|0)>>>0?(X=fl(c[ka>>2]|0)|0,(X|0)==(fl(c[Y>>2]|0)|0)):0){c[ga>>2]=(nn((c[Y>>2]|0)+4|0,(c[ka>>2]|0)+4|0,c[aa>>2]|0)|0)+4;c[la>>2]=(c[Y>>2]|0)-(c[ka>>2]|0);while(1){if(!(((c[Y>>2]|0)>>>0>(c[Z>>2]|0)>>>0?(c[ka>>2]|0)>>>0>(c[$>>2]|0)>>>0:0)|0))break;if((d[(c[Y>>2]|0)+-1>>0]|0|0)!=(d[(c[ka>>2]|0)+-1>>0]|0|0))break;c[Y>>2]=(c[Y>>2]|0)+-1;c[ka>>2]=(c[ka>>2]|0)+-1;c[ga>>2]=(c[ga>>2]|0)+1;}c[da>>2]=c[ca>>2];c[ca>>2]=c[la>>2];kn(c[O>>2]|0,(c[Y>>2]|0)-(c[Z>>2]|0)|0,c[Z>>2]|0,(c[la>>2]|0)+2|0,(c[ga>>2]|0)-3|0);break;}c[Y>>2]=(c[Y>>2]|0)+(((c[Y>>2]|0)-(c[Z>>2]|0)>>8)+(c[T>>2]|0));continue e;}}while(0);c[Y>>2]=(c[Y>>2]|0)+(c[ga>>2]|0);c[Z>>2]=c[Y>>2];f:do{if((c[Y>>2]|0)>>>0<=(c[ba>>2]|0)>>>0){R=(c[ia>>2]|0)+2|0;fa=c[V>>2]|0;c[fa+((Tk((c[W>>2]|0)+(c[ia>>2]|0)+2|0,c[S>>2]|0,c[U>>2]|0)|0)<<2)>>2]=R;R=(c[Y>>2]|0)+-2-(c[W>>2]|0)|0;fa=c[V>>2]|0;c[fa+((Tk((c[Y>>2]|0)+-2|0,c[S>>2]|0,c[U>>2]|0)|0)<<2)>>2]=R;while(1){if((c[Y>>2]|0)>>>0>(c[ba>>2]|0)>>>0)break f;R=(c[da>>2]|0)>>>0>0&1;fa=fl(c[Y>>2]|0)|0;if(!(R&(fa|0)==(fl((c[Y>>2]|0)+(0-(c[da>>2]|0))|0)|0)))break f;c[ma>>2]=(nn((c[Y>>2]|0)+4|0,(c[Y>>2]|0)+4+(0-(c[da>>2]|0))|0,c[aa>>2]|0)|0)+4;c[na>>2]=c[da>>2];c[da>>2]=c[ca>>2];c[ca>>2]=c[na>>2];fa=(c[Y>>2]|0)-(c[W>>2]|0)|0;R=c[V>>2]|0;c[R+((Tk(c[Y>>2]|0,c[S>>2]|0,c[U>>2]|0)|0)<<2)>>2]=fa;kn(c[O>>2]|0,0,c[Z>>2]|0,0,(c[ma>>2]|0)-3|0);c[Y>>2]=(c[Y>>2]|0)+(c[ma>>2]|0);c[Z>>2]=c[Y>>2];}}}while(0);}c[c[P>>2]>>2]=c[ca>>2]|0?c[ca>>2]|0:c[ea>>2]|0;c[(c[P>>2]|0)+4>>2]=c[da>>2]|0?c[da>>2]|0:c[ea>>2]|0;c[sb>>2]=(c[aa>>2]|0)-(c[Z>>2]|0);Cb=c[sb>>2]|0;l=i;return Cb|0;}default:{Z=c[ub>>2]|0;ub=c[vb>>2]|0;vb=c[xb>>2]|0;xb=c[yb>>2]|0;yb=c[zb>>2]|0;zb=c[Bb>>2]|0;c[Ra>>2]=c[tb>>2];c[Sa>>2]=Z;c[Ta>>2]=ub;c[Ua>>2]=vb;c[Va>>2]=xb;c[Wa>>2]=yb;c[Xa>>2]=zb;c[Ya>>2]=4;c[Za>>2]=c[(c[Ra>>2]|0)+36>>2];c[_a>>2]=c[(c[Ra>>2]|0)+4>>2];c[$a>>2]=c[Ua>>2];c[ab>>2]=c[$a>>2];c[bb>>2]=c[$a>>2];c[cb>>2]=c[(c[Ra>>2]|0)+12>>2];c[db>>2]=(c[_a>>2]|0)+(c[cb>>2]|0);c[eb>>2]=(c[$a>>2]|0)+(c[Va>>2]|0);c[fb>>2]=(c[eb>>2]|0)+-8;c[gb>>2]=c[c[Ta>>2]>>2];c[hb>>2]=c[(c[Ta>>2]|0)+4>>2];c[ib>>2]=0;c[ab>>2]=(c[ab>>2]|0)+((c[ab>>2]|0)==(c[db>>2]|0)&1);c[jb>>2]=(c[ab>>2]|0)-(c[db>>2]|0);if((c[hb>>2]|0)>>>0>(c[jb>>2]|0)>>>0){c[ib>>2]=c[hb>>2];c[hb>>2]=0;}if((c[gb>>2]|0)>>>0>(c[jb>>2]|0)>>>0){c[ib>>2]=c[gb>>2];c[gb>>2]=0;}g:while(1){if((c[ab>>2]|0)>>>0>=(c[fb>>2]|0)>>>0)break;c[lb>>2]=Tk(c[ab>>2]|0,c[Wa>>2]|0,c[Ya>>2]|0)|0;c[mb>>2]=(c[ab>>2]|0)-(c[_a>>2]|0);c[nb>>2]=c[(c[Za>>2]|0)+(c[lb>>2]<<2)>>2];c[ob>>2]=(c[_a>>2]|0)+(c[nb>>2]|0);c[(c[Za>>2]|0)+(c[lb>>2]<<2)>>2]=c[mb>>2];jb=(c[gb>>2]|0)>>>0>0&1;Va=fl((c[ab>>2]|0)+1+(0-(c[gb>>2]|0))|0)|0;do{if(jb&(Va|0)==(fl((c[ab>>2]|0)+1|0)|0)|0){c[kb>>2]=(nn((c[ab>>2]|0)+1+4|0,(c[ab>>2]|0)+1+4+(0-(c[gb>>2]|0))|0,c[eb>>2]|0)|0)+4;c[ab>>2]=(c[ab>>2]|0)+1;kn(c[Sa>>2]|0,(c[ab>>2]|0)-(c[bb>>2]|0)|0,c[bb>>2]|0,0,(c[kb>>2]|0)-3|0);}else{if((c[nb>>2]|0)>>>0>(c[cb>>2]|0)>>>0?($a=fl(c[ob>>2]|0)|0,($a|0)==(fl(c[ab>>2]|0)|0)):0){c[kb>>2]=(nn((c[ab>>2]|0)+4|0,(c[ob>>2]|0)+4|0,c[eb>>2]|0)|0)+4;c[pb>>2]=(c[ab>>2]|0)-(c[ob>>2]|0);while(1){if(!(((c[ab>>2]|0)>>>0>(c[bb>>2]|0)>>>0?(c[ob>>2]|0)>>>0>(c[db>>2]|0)>>>0:0)|0))break;if((d[(c[ab>>2]|0)+-1>>0]|0|0)!=(d[(c[ob>>2]|0)+-1>>0]|0|0))break;c[ab>>2]=(c[ab>>2]|0)+-1;c[ob>>2]=(c[ob>>2]|0)+-1;c[kb>>2]=(c[kb>>2]|0)+1;}c[hb>>2]=c[gb>>2];c[gb>>2]=c[pb>>2];kn(c[Sa>>2]|0,(c[ab>>2]|0)-(c[bb>>2]|0)|0,c[bb>>2]|0,(c[pb>>2]|0)+2|0,(c[kb>>2]|0)-3|0);break;}c[ab>>2]=(c[ab>>2]|0)+(((c[ab>>2]|0)-(c[bb>>2]|0)>>8)+(c[Xa>>2]|0));continue g;}}while(0);c[ab>>2]=(c[ab>>2]|0)+(c[kb>>2]|0);c[bb>>2]=c[ab>>2];h:do{if((c[ab>>2]|0)>>>0<=(c[fb>>2]|0)>>>0){Va=(c[mb>>2]|0)+2|0;jb=c[Za>>2]|0;c[jb+((Tk((c[_a>>2]|0)+(c[mb>>2]|0)+2|0,c[Wa>>2]|0,c[Ya>>2]|0)|0)<<2)>>2]=Va;Va=(c[ab>>2]|0)+-2-(c[_a>>2]|0)|0;jb=c[Za>>2]|0;c[jb+((Tk((c[ab>>2]|0)+-2|0,c[Wa>>2]|0,c[Ya>>2]|0)|0)<<2)>>2]=Va;while(1){if((c[ab>>2]|0)>>>0>(c[fb>>2]|0)>>>0)break h;Va=(c[hb>>2]|0)>>>0>0&1;jb=fl(c[ab>>2]|0)|0;if(!(Va&(jb|0)==(fl((c[ab>>2]|0)+(0-(c[hb>>2]|0))|0)|0)))break h;c[qb>>2]=(nn((c[ab>>2]|0)+4|0,(c[ab>>2]|0)+4+(0-(c[hb>>2]|0))|0,c[eb>>2]|0)|0)+4;c[rb>>2]=c[hb>>2];c[hb>>2]=c[gb>>2];c[gb>>2]=c[rb>>2];jb=(c[ab>>2]|0)-(c[_a>>2]|0)|0;Va=c[Za>>2]|0;c[Va+((Tk(c[ab>>2]|0,c[Wa>>2]|0,c[Ya>>2]|0)|0)<<2)>>2]=jb;kn(c[Sa>>2]|0,0,c[bb>>2]|0,0,(c[qb>>2]|0)-3|0);c[ab>>2]=(c[ab>>2]|0)+(c[qb>>2]|0);c[bb>>2]=c[ab>>2];}}}while(0);}c[c[Ta>>2]>>2]=c[gb>>2]|0?c[gb>>2]|0:c[ib>>2]|0;c[(c[Ta>>2]|0)+4>>2]=c[hb>>2]|0?c[hb>>2]|0:c[ib>>2]|0;c[sb>>2]=(c[eb>>2]|0)-(c[bb>>2]|0);Cb=c[sb>>2]|0;l=i;return Cb|0;}}return 0;}function Yl(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0;i=l;l=l+624|0;j=i+620|0;k=i+616|0;m=i+612|0;n=i+608|0;o=i+604|0;p=i+600|0;q=i+596|0;r=i+592|0;s=i+588|0;t=i+584|0;u=i+580|0;v=i+576|0;w=i+572|0;x=i+568|0;z=i+564|0;A=i+560|0;B=i+556|0;C=i+552|0;D=i+548|0;E=i+544|0;F=i+540|0;G=i+536|0;H=i+532|0;I=i+528|0;J=i+524|0;K=i+520|0;L=i+516|0;M=i+512|0;N=i+508|0;O=i+504|0;P=i+500|0;Q=i+496|0;R=i+492|0;S=i+488|0;T=i+484|0;U=i+480|0;V=i+476|0;W=i+472|0;X=i+468|0;Y=i+464|0;Z=i+460|0;_=i+456|0;$=i+452|0;aa=i+448|0;ba=i+444|0;ca=i+440|0;da=i+436|0;ea=i+432|0;fa=i+428|0;ga=i+424|0;ha=i+420|0;ia=i+416|0;ja=i+412|0;ka=i+408|0;la=i+404|0;ma=i+400|0;na=i+396|0;oa=i+392|0;pa=i+388|0;qa=i+384|0;ra=i+380|0;sa=i+376|0;ta=i+372|0;ua=i+368|0;va=i+364|0;wa=i+360|0;xa=i+356|0;ya=i+352|0;za=i+348|0;Aa=i+344|0;Ba=i+340|0;Ca=i+336|0;Da=i+332|0;Ea=i+328|0;Fa=i+324|0;Ga=i+320|0;Ha=i+316|0;Ia=i+312|0;Ja=i+308|0;Ka=i+304|0;La=i+300|0;Ma=i+296|0;Na=i+292|0;Oa=i+288|0;Pa=i+284|0;Qa=i+280|0;Ra=i+276|0;Sa=i+272|0;Ta=i+268|0;Ua=i+264|0;Va=i+260|0;Wa=i+256|0;Xa=i+252|0;Ya=i+248|0;Za=i+244|0;_a=i+240|0;$a=i+236|0;ab=i+232|0;bb=i+228|0;cb=i+224|0;db=i+220|0;eb=i+216|0;fb=i+212|0;gb=i+208|0;hb=i+204|0;ib=i+200|0;jb=i+196|0;kb=i+192|0;lb=i+188|0;mb=i+184|0;nb=i+180|0;ob=i+176|0;pb=i+172|0;qb=i+168|0;rb=i+164|0;sb=i+160|0;tb=i+156|0;ub=i+152|0;vb=i+148|0;wb=i+144|0;xb=i+140|0;yb=i+136|0;zb=i+132|0;Ab=i+128|0;Bb=i+124|0;Cb=i+120|0;Db=i+116|0;Eb=i+112|0;Fb=i+108|0;Gb=i+104|0;Hb=i+100|0;Ib=i+96|0;Jb=i+92|0;Kb=i+88|0;Lb=i+84|0;Mb=i+80|0;Nb=i+76|0;Ob=i+72|0;Pb=i+68|0;Qb=i+64|0;Rb=i+60|0;Sb=i+56|0;Tb=i+52|0;Ub=i+48|0;Vb=i+44|0;Wb=i+40|0;Xb=i+36|0;Yb=i+32|0;Zb=i+28|0;_b=i+24|0;$b=i+20|0;ac=i+16|0;bc=i+12|0;cc=i+8|0;dc=i+4|0;ec=i;c[_b>>2]=a;c[$b>>2]=b;c[ac>>2]=e;c[bc>>2]=f;c[cc>>2]=g;c[dc>>2]=h;c[ec>>2]=c[(c[bc>>2]|0)+16>>2];switch(c[ec>>2]|0){case 7:{ec=c[$b>>2]|0;h=c[ac>>2]|0;g=c[bc>>2]|0;f=c[cc>>2]|0;e=c[dc>>2]|0;c[j>>2]=c[_b>>2];c[k>>2]=ec;c[m>>2]=h;c[n>>2]=g;c[o>>2]=f;c[p>>2]=e;c[q>>2]=7;c[r>>2]=c[(c[j>>2]|0)+36>>2];c[s>>2]=c[(c[n>>2]|0)+8>>2];c[t>>2]=c[(c[j>>2]|0)+44>>2];c[u>>2]=c[(c[n>>2]|0)+4>>2];c[v>>2]=c[(c[j>>2]|0)+4>>2];c[w>>2]=c[o>>2];c[x>>2]=c[w>>2];c[z>>2]=c[w>>2];c[A>>2]=c[(c[j>>2]|0)+12>>2];c[B>>2]=(c[v>>2]|0)+(c[A>>2]|0);c[C>>2]=(c[w>>2]|0)+(c[p>>2]|0);c[D>>2]=(c[C>>2]|0)+-8;c[E>>2]=c[c[m>>2]>>2];c[F>>2]=c[(c[m>>2]|0)+4>>2];c[G>>2]=0;c[x>>2]=(c[x>>2]|0)+((c[x>>2]|0)==(c[B>>2]|0)&1);c[H>>2]=(c[x>>2]|0)-(c[B>>2]|0);if((c[F>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[G>>2]=c[F>>2];c[F>>2]=0;}if((c[E>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[G>>2]=c[E>>2];c[E>>2]=0;}a:while(1){if((c[x>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[J>>2]=Dk(c[x>>2]|0,c[s>>2]|0,8)|0;c[K>>2]=Dk(c[x>>2]|0,c[u>>2]|0,c[q>>2]|0)|0;c[L>>2]=(c[x>>2]|0)-(c[v>>2]|0);c[M>>2]=c[(c[r>>2]|0)+(c[J>>2]<<2)>>2];c[N>>2]=c[(c[t>>2]|0)+(c[K>>2]<<2)>>2];c[O>>2]=(c[v>>2]|0)+(c[M>>2]|0);c[P>>2]=(c[v>>2]|0)+(c[N>>2]|0);H=c[L>>2]|0;c[(c[t>>2]|0)+(c[K>>2]<<2)>>2]=H;c[(c[r>>2]|0)+(c[J>>2]<<2)>>2]=H;H=(c[E>>2]|0)>>>0>0&1;p=Rk((c[x>>2]|0)+1+(0-(c[E>>2]|0))|0)|0;if(H&(p|0)==(Rk((c[x>>2]|0)+1|0)|0)|0){c[I>>2]=(cn((c[x>>2]|0)+1+4|0,(c[x>>2]|0)+1+4+(0-(c[E>>2]|0))|0,c[C>>2]|0)|0)+4;c[x>>2]=(c[x>>2]|0)+1;$m(c[k>>2]|0,(c[x>>2]|0)-(c[z>>2]|0)|0,c[z>>2]|0,0,(c[I>>2]|0)-3|0);}else{b:do{if((c[M>>2]|0)>>>0>(c[A>>2]|0)>>>0?(p=Mk(c[O>>2]|0)|0,H=y,w=Mk(c[x>>2]|0)|0,(p|0)==(w|0)&(H|0)==(y|0)):0){c[I>>2]=(cn((c[x>>2]|0)+8|0,(c[O>>2]|0)+8|0,c[C>>2]|0)|0)+8;c[Q>>2]=(c[x>>2]|0)-(c[O>>2]|0);while(1){if(!(((c[x>>2]|0)>>>0>(c[z>>2]|0)>>>0?(c[O>>2]|0)>>>0>(c[B>>2]|0)>>>0:0)|0))break b;if((d[(c[x>>2]|0)+-1>>0]|0|0)!=(d[(c[O>>2]|0)+-1>>0]|0|0))break b;c[x>>2]=(c[x>>2]|0)+-1;c[O>>2]=(c[O>>2]|0)+-1;c[I>>2]=(c[I>>2]|0)+1;}}else fc=121;}while(0);c:do{if((fc|0)==121){fc=0;if((c[N>>2]|0)>>>0>(c[A>>2]|0)>>>0?(H=Rk(c[P>>2]|0)|0,(H|0)==(Rk(c[x>>2]|0)|0)):0){c[R>>2]=Dk((c[x>>2]|0)+1|0,c[s>>2]|0,8)|0;c[S>>2]=c[(c[r>>2]|0)+(c[R>>2]<<2)>>2];c[T>>2]=(c[v>>2]|0)+(c[S>>2]|0);c[(c[r>>2]|0)+(c[R>>2]<<2)>>2]=(c[L>>2]|0)+1;if((c[S>>2]|0)>>>0>(c[A>>2]|0)>>>0?(H=Mk(c[T>>2]|0)|0,w=y,p=Mk((c[x>>2]|0)+1|0)|0,(H|0)==(p|0)&(w|0)==(y|0)):0){c[I>>2]=(cn((c[x>>2]|0)+9|0,(c[T>>2]|0)+8|0,c[C>>2]|0)|0)+8;c[x>>2]=(c[x>>2]|0)+1;c[Q>>2]=(c[x>>2]|0)-(c[T>>2]|0);while(1){if(!(((c[x>>2]|0)>>>0>(c[z>>2]|0)>>>0?(c[T>>2]|0)>>>0>(c[B>>2]|0)>>>0:0)|0))break c;if((d[(c[x>>2]|0)+-1>>0]|0|0)!=(d[(c[T>>2]|0)+-1>>0]|0|0))break c;c[x>>2]=(c[x>>2]|0)+-1;c[T>>2]=(c[T>>2]|0)+-1;c[I>>2]=(c[I>>2]|0)+1;}}c[I>>2]=(cn((c[x>>2]|0)+4|0,(c[P>>2]|0)+4|0,c[C>>2]|0)|0)+4;c[Q>>2]=(c[x>>2]|0)-(c[P>>2]|0);while(1){if(!(((c[x>>2]|0)>>>0>(c[z>>2]|0)>>>0?(c[P>>2]|0)>>>0>(c[B>>2]|0)>>>0:0)|0))break c;if((d[(c[x>>2]|0)+-1>>0]|0|0)!=(d[(c[P>>2]|0)+-1>>0]|0|0))break c;c[x>>2]=(c[x>>2]|0)+-1;c[P>>2]=(c[P>>2]|0)+-1;c[I>>2]=(c[I>>2]|0)+1;}}c[x>>2]=(c[x>>2]|0)+(((c[x>>2]|0)-(c[z>>2]|0)>>8)+1);continue a;}}while(0);c[F>>2]=c[E>>2];c[E>>2]=c[Q>>2];$m(c[k>>2]|0,(c[x>>2]|0)-(c[z>>2]|0)|0,c[z>>2]|0,(c[Q>>2]|0)+2|0,(c[I>>2]|0)-3|0);}c[x>>2]=(c[x>>2]|0)+(c[I>>2]|0);c[z>>2]=c[x>>2];d:do{if((c[x>>2]|0)>>>0<=(c[D>>2]|0)>>>0){w=(c[L>>2]|0)+2|0;p=c[t>>2]|0;c[p+((Dk((c[v>>2]|0)+(c[L>>2]|0)+2|0,c[u>>2]|0,c[q>>2]|0)|0)<<2)>>2]=w;p=c[r>>2]|0;c[p+((Dk((c[v>>2]|0)+(c[L>>2]|0)+2|0,c[s>>2]|0,8)|0)<<2)>>2]=w;w=(c[x>>2]|0)+-2-(c[v>>2]|0)|0;p=c[t>>2]|0;c[p+((Dk((c[x>>2]|0)+-2|0,c[u>>2]|0,c[q>>2]|0)|0)<<2)>>2]=w;p=c[r>>2]|0;c[p+((Dk((c[x>>2]|0)+-2|0,c[s>>2]|0,8)|0)<<2)>>2]=w;while(1){if((c[x>>2]|0)>>>0>(c[D>>2]|0)>>>0)break d;w=(c[F>>2]|0)>>>0>0&1;p=Rk(c[x>>2]|0)|0;if(!(w&(p|0)==(Rk((c[x>>2]|0)+(0-(c[F>>2]|0))|0)|0)))break d;c[U>>2]=(cn((c[x>>2]|0)+4|0,(c[x>>2]|0)+4+(0-(c[F>>2]|0))|0,c[C>>2]|0)|0)+4;c[V>>2]=c[F>>2];c[F>>2]=c[E>>2];c[E>>2]=c[V>>2];p=(c[x>>2]|0)-(c[v>>2]|0)|0;w=c[t>>2]|0;c[w+((Dk(c[x>>2]|0,c[u>>2]|0,c[q>>2]|0)|0)<<2)>>2]=p;p=(c[x>>2]|0)-(c[v>>2]|0)|0;w=c[r>>2]|0;c[w+((Dk(c[x>>2]|0,c[s>>2]|0,8)|0)<<2)>>2]=p;$m(c[k>>2]|0,0,c[z>>2]|0,0,(c[U>>2]|0)-3|0);c[x>>2]=(c[x>>2]|0)+(c[U>>2]|0);c[z>>2]=c[x>>2];}}}while(0);}c[c[m>>2]>>2]=c[E>>2]|0?c[E>>2]|0:c[G>>2]|0;c[(c[m>>2]|0)+4>>2]=c[F>>2]|0?c[F>>2]|0:c[G>>2]|0;c[Zb>>2]=(c[C>>2]|0)-(c[z>>2]|0);gc=c[Zb>>2]|0;l=i;return gc|0;}case 5:{z=c[$b>>2]|0;C=c[ac>>2]|0;G=c[bc>>2]|0;F=c[cc>>2]|0;m=c[dc>>2]|0;c[Fa>>2]=c[_b>>2];c[Ga>>2]=z;c[Ha>>2]=C;c[Ia>>2]=G;c[Ja>>2]=F;c[Ka>>2]=m;c[La>>2]=5;c[Ma>>2]=c[(c[Fa>>2]|0)+36>>2];c[Na>>2]=c[(c[Ia>>2]|0)+8>>2];c[Oa>>2]=c[(c[Fa>>2]|0)+44>>2];c[Pa>>2]=c[(c[Ia>>2]|0)+4>>2];c[Qa>>2]=c[(c[Fa>>2]|0)+4>>2];c[Ra>>2]=c[Ja>>2];c[Sa>>2]=c[Ra>>2];c[Ta>>2]=c[Ra>>2];c[Ua>>2]=c[(c[Fa>>2]|0)+12>>2];c[Va>>2]=(c[Qa>>2]|0)+(c[Ua>>2]|0);c[Wa>>2]=(c[Ra>>2]|0)+(c[Ka>>2]|0);c[Xa>>2]=(c[Wa>>2]|0)+-8;c[Ya>>2]=c[c[Ha>>2]>>2];c[Za>>2]=c[(c[Ha>>2]|0)+4>>2];c[_a>>2]=0;c[Sa>>2]=(c[Sa>>2]|0)+((c[Sa>>2]|0)==(c[Va>>2]|0)&1);c[$a>>2]=(c[Sa>>2]|0)-(c[Va>>2]|0);if((c[Za>>2]|0)>>>0>(c[$a>>2]|0)>>>0){c[_a>>2]=c[Za>>2];c[Za>>2]=0;}if((c[Ya>>2]|0)>>>0>(c[$a>>2]|0)>>>0){c[_a>>2]=c[Ya>>2];c[Ya>>2]=0;}e:while(1){if((c[Sa>>2]|0)>>>0>=(c[Xa>>2]|0)>>>0)break;c[bb>>2]=Dk(c[Sa>>2]|0,c[Na>>2]|0,8)|0;c[cb>>2]=Dk(c[Sa>>2]|0,c[Pa>>2]|0,c[La>>2]|0)|0;c[db>>2]=(c[Sa>>2]|0)-(c[Qa>>2]|0);c[eb>>2]=c[(c[Ma>>2]|0)+(c[bb>>2]<<2)>>2];c[fb>>2]=c[(c[Oa>>2]|0)+(c[cb>>2]<<2)>>2];c[gb>>2]=(c[Qa>>2]|0)+(c[eb>>2]|0);c[hb>>2]=(c[Qa>>2]|0)+(c[fb>>2]|0);$a=c[db>>2]|0;c[(c[Oa>>2]|0)+(c[cb>>2]<<2)>>2]=$a;c[(c[Ma>>2]|0)+(c[bb>>2]<<2)>>2]=$a;$a=(c[Ya>>2]|0)>>>0>0&1;Ka=Rk((c[Sa>>2]|0)+1+(0-(c[Ya>>2]|0))|0)|0;if($a&(Ka|0)==(Rk((c[Sa>>2]|0)+1|0)|0)|0){c[ab>>2]=(cn((c[Sa>>2]|0)+1+4|0,(c[Sa>>2]|0)+1+4+(0-(c[Ya>>2]|0))|0,c[Wa>>2]|0)|0)+4;c[Sa>>2]=(c[Sa>>2]|0)+1;$m(c[Ga>>2]|0,(c[Sa>>2]|0)-(c[Ta>>2]|0)|0,c[Ta>>2]|0,0,(c[ab>>2]|0)-3|0);}else{f:do{if((c[eb>>2]|0)>>>0>(c[Ua>>2]|0)>>>0?(Ka=Mk(c[gb>>2]|0)|0,$a=y,Ra=Mk(c[Sa>>2]|0)|0,(Ka|0)==(Ra|0)&($a|0)==(y|0)):0){c[ab>>2]=(cn((c[Sa>>2]|0)+8|0,(c[gb>>2]|0)+8|0,c[Wa>>2]|0)|0)+8;c[ib>>2]=(c[Sa>>2]|0)-(c[gb>>2]|0);while(1){if(!(((c[Sa>>2]|0)>>>0>(c[Ta>>2]|0)>>>0?(c[gb>>2]|0)>>>0>(c[Va>>2]|0)>>>0:0)|0))break f;if((d[(c[Sa>>2]|0)+-1>>0]|0|0)!=(d[(c[gb>>2]|0)+-1>>0]|0|0))break f;c[Sa>>2]=(c[Sa>>2]|0)+-1;c[gb>>2]=(c[gb>>2]|0)+-1;c[ab>>2]=(c[ab>>2]|0)+1;}}else fc=51;}while(0);g:do{if((fc|0)==51){fc=0;if((c[fb>>2]|0)>>>0>(c[Ua>>2]|0)>>>0?($a=Rk(c[hb>>2]|0)|0,($a|0)==(Rk(c[Sa>>2]|0)|0)):0){c[jb>>2]=Dk((c[Sa>>2]|0)+1|0,c[Na>>2]|0,8)|0;c[kb>>2]=c[(c[Ma>>2]|0)+(c[jb>>2]<<2)>>2];c[lb>>2]=(c[Qa>>2]|0)+(c[kb>>2]|0);c[(c[Ma>>2]|0)+(c[jb>>2]<<2)>>2]=(c[db>>2]|0)+1;if((c[kb>>2]|0)>>>0>(c[Ua>>2]|0)>>>0?($a=Mk(c[lb>>2]|0)|0,Ra=y,Ka=Mk((c[Sa>>2]|0)+1|0)|0,($a|0)==(Ka|0)&(Ra|0)==(y|0)):0){c[ab>>2]=(cn((c[Sa>>2]|0)+9|0,(c[lb>>2]|0)+8|0,c[Wa>>2]|0)|0)+8;c[Sa>>2]=(c[Sa>>2]|0)+1;c[ib>>2]=(c[Sa>>2]|0)-(c[lb>>2]|0);while(1){if(!(((c[Sa>>2]|0)>>>0>(c[Ta>>2]|0)>>>0?(c[lb>>2]|0)>>>0>(c[Va>>2]|0)>>>0:0)|0))break g;if((d[(c[Sa>>2]|0)+-1>>0]|0|0)!=(d[(c[lb>>2]|0)+-1>>0]|0|0))break g;c[Sa>>2]=(c[Sa>>2]|0)+-1;c[lb>>2]=(c[lb>>2]|0)+-1;c[ab>>2]=(c[ab>>2]|0)+1;}}c[ab>>2]=(cn((c[Sa>>2]|0)+4|0,(c[hb>>2]|0)+4|0,c[Wa>>2]|0)|0)+4;c[ib>>2]=(c[Sa>>2]|0)-(c[hb>>2]|0);while(1){if(!(((c[Sa>>2]|0)>>>0>(c[Ta>>2]|0)>>>0?(c[hb>>2]|0)>>>0>(c[Va>>2]|0)>>>0:0)|0))break g;if((d[(c[Sa>>2]|0)+-1>>0]|0|0)!=(d[(c[hb>>2]|0)+-1>>0]|0|0))break g;c[Sa>>2]=(c[Sa>>2]|0)+-1;c[hb>>2]=(c[hb>>2]|0)+-1;c[ab>>2]=(c[ab>>2]|0)+1;}}c[Sa>>2]=(c[Sa>>2]|0)+(((c[Sa>>2]|0)-(c[Ta>>2]|0)>>8)+1);continue e;}}while(0);c[Za>>2]=c[Ya>>2];c[Ya>>2]=c[ib>>2];$m(c[Ga>>2]|0,(c[Sa>>2]|0)-(c[Ta>>2]|0)|0,c[Ta>>2]|0,(c[ib>>2]|0)+2|0,(c[ab>>2]|0)-3|0);}c[Sa>>2]=(c[Sa>>2]|0)+(c[ab>>2]|0);c[Ta>>2]=c[Sa>>2];h:do{if((c[Sa>>2]|0)>>>0<=(c[Xa>>2]|0)>>>0){Ra=(c[db>>2]|0)+2|0;Ka=c[Oa>>2]|0;c[Ka+((Dk((c[Qa>>2]|0)+(c[db>>2]|0)+2|0,c[Pa>>2]|0,c[La>>2]|0)|0)<<2)>>2]=Ra;Ka=c[Ma>>2]|0;c[Ka+((Dk((c[Qa>>2]|0)+(c[db>>2]|0)+2|0,c[Na>>2]|0,8)|0)<<2)>>2]=Ra;Ra=(c[Sa>>2]|0)+-2-(c[Qa>>2]|0)|0;Ka=c[Oa>>2]|0;c[Ka+((Dk((c[Sa>>2]|0)+-2|0,c[Pa>>2]|0,c[La>>2]|0)|0)<<2)>>2]=Ra;Ka=c[Ma>>2]|0;c[Ka+((Dk((c[Sa>>2]|0)+-2|0,c[Na>>2]|0,8)|0)<<2)>>2]=Ra;while(1){if((c[Sa>>2]|0)>>>0>(c[Xa>>2]|0)>>>0)break h;Ra=(c[Za>>2]|0)>>>0>0&1;Ka=Rk(c[Sa>>2]|0)|0;if(!(Ra&(Ka|0)==(Rk((c[Sa>>2]|0)+(0-(c[Za>>2]|0))|0)|0)))break h;c[mb>>2]=(cn((c[Sa>>2]|0)+4|0,(c[Sa>>2]|0)+4+(0-(c[Za>>2]|0))|0,c[Wa>>2]|0)|0)+4;c[nb>>2]=c[Za>>2];c[Za>>2]=c[Ya>>2];c[Ya>>2]=c[nb>>2];Ka=(c[Sa>>2]|0)-(c[Qa>>2]|0)|0;Ra=c[Oa>>2]|0;c[Ra+((Dk(c[Sa>>2]|0,c[Pa>>2]|0,c[La>>2]|0)|0)<<2)>>2]=Ka;Ka=(c[Sa>>2]|0)-(c[Qa>>2]|0)|0;Ra=c[Ma>>2]|0;c[Ra+((Dk(c[Sa>>2]|0,c[Na>>2]|0,8)|0)<<2)>>2]=Ka;$m(c[Ga>>2]|0,0,c[Ta>>2]|0,0,(c[mb>>2]|0)-3|0);c[Sa>>2]=(c[Sa>>2]|0)+(c[mb>>2]|0);c[Ta>>2]=c[Sa>>2];}}}while(0);}c[c[Ha>>2]>>2]=c[Ya>>2]|0?c[Ya>>2]|0:c[_a>>2]|0;c[(c[Ha>>2]|0)+4>>2]=c[Za>>2]|0?c[Za>>2]|0:c[_a>>2]|0;c[Zb>>2]=(c[Wa>>2]|0)-(c[Ta>>2]|0);gc=c[Zb>>2]|0;l=i;return gc|0;}case 6:{Ta=c[$b>>2]|0;Wa=c[ac>>2]|0;_a=c[bc>>2]|0;Za=c[cc>>2]|0;Ha=c[dc>>2]|0;c[W>>2]=c[_b>>2];c[X>>2]=Ta;c[Y>>2]=Wa;c[Z>>2]=_a;c[_>>2]=Za;c[$>>2]=Ha;c[aa>>2]=6;c[ba>>2]=c[(c[W>>2]|0)+36>>2];c[ca>>2]=c[(c[Z>>2]|0)+8>>2];c[da>>2]=c[(c[W>>2]|0)+44>>2];c[ea>>2]=c[(c[Z>>2]|0)+4>>2];c[fa>>2]=c[(c[W>>2]|0)+4>>2];c[ga>>2]=c[_>>2];c[ha>>2]=c[ga>>2];c[ia>>2]=c[ga>>2];c[ja>>2]=c[(c[W>>2]|0)+12>>2];c[ka>>2]=(c[fa>>2]|0)+(c[ja>>2]|0);c[la>>2]=(c[ga>>2]|0)+(c[$>>2]|0);c[ma>>2]=(c[la>>2]|0)+-8;c[na>>2]=c[c[Y>>2]>>2];c[oa>>2]=c[(c[Y>>2]|0)+4>>2];c[pa>>2]=0;c[ha>>2]=(c[ha>>2]|0)+((c[ha>>2]|0)==(c[ka>>2]|0)&1);c[qa>>2]=(c[ha>>2]|0)-(c[ka>>2]|0);if((c[oa>>2]|0)>>>0>(c[qa>>2]|0)>>>0){c[pa>>2]=c[oa>>2];c[oa>>2]=0;}if((c[na>>2]|0)>>>0>(c[qa>>2]|0)>>>0){c[pa>>2]=c[na>>2];c[na>>2]=0;}i:while(1){if((c[ha>>2]|0)>>>0>=(c[ma>>2]|0)>>>0)break;c[sa>>2]=Dk(c[ha>>2]|0,c[ca>>2]|0,8)|0;c[ta>>2]=Dk(c[ha>>2]|0,c[ea>>2]|0,c[aa>>2]|0)|0;c[ua>>2]=(c[ha>>2]|0)-(c[fa>>2]|0);c[va>>2]=c[(c[ba>>2]|0)+(c[sa>>2]<<2)>>2];c[wa>>2]=c[(c[da>>2]|0)+(c[ta>>2]<<2)>>2];c[xa>>2]=(c[fa>>2]|0)+(c[va>>2]|0);c[ya>>2]=(c[fa>>2]|0)+(c[wa>>2]|0);qa=c[ua>>2]|0;c[(c[da>>2]|0)+(c[ta>>2]<<2)>>2]=qa;c[(c[ba>>2]|0)+(c[sa>>2]<<2)>>2]=qa;qa=(c[na>>2]|0)>>>0>0&1;$=Rk((c[ha>>2]|0)+1+(0-(c[na>>2]|0))|0)|0;if(qa&($|0)==(Rk((c[ha>>2]|0)+1|0)|0)|0){c[ra>>2]=(cn((c[ha>>2]|0)+1+4|0,(c[ha>>2]|0)+1+4+(0-(c[na>>2]|0))|0,c[la>>2]|0)|0)+4;c[ha>>2]=(c[ha>>2]|0)+1;$m(c[X>>2]|0,(c[ha>>2]|0)-(c[ia>>2]|0)|0,c[ia>>2]|0,0,(c[ra>>2]|0)-3|0);}else{j:do{if((c[va>>2]|0)>>>0>(c[ja>>2]|0)>>>0?($=Mk(c[xa>>2]|0)|0,qa=y,ga=Mk(c[ha>>2]|0)|0,($|0)==(ga|0)&(qa|0)==(y|0)):0){c[ra>>2]=(cn((c[ha>>2]|0)+8|0,(c[xa>>2]|0)+8|0,c[la>>2]|0)|0)+8;c[za>>2]=(c[ha>>2]|0)-(c[xa>>2]|0);while(1){if(!(((c[ha>>2]|0)>>>0>(c[ia>>2]|0)>>>0?(c[xa>>2]|0)>>>0>(c[ka>>2]|0)>>>0:0)|0))break j;if((d[(c[ha>>2]|0)+-1>>0]|0|0)!=(d[(c[xa>>2]|0)+-1>>0]|0|0))break j;c[ha>>2]=(c[ha>>2]|0)+-1;c[xa>>2]=(c[xa>>2]|0)+-1;c[ra>>2]=(c[ra>>2]|0)+1;}}else fc=86;}while(0);k:do{if((fc|0)==86){fc=0;if((c[wa>>2]|0)>>>0>(c[ja>>2]|0)>>>0?(qa=Rk(c[ya>>2]|0)|0,(qa|0)==(Rk(c[ha>>2]|0)|0)):0){c[Aa>>2]=Dk((c[ha>>2]|0)+1|0,c[ca>>2]|0,8)|0;c[Ba>>2]=c[(c[ba>>2]|0)+(c[Aa>>2]<<2)>>2];c[Ca>>2]=(c[fa>>2]|0)+(c[Ba>>2]|0);c[(c[ba>>2]|0)+(c[Aa>>2]<<2)>>2]=(c[ua>>2]|0)+1;if((c[Ba>>2]|0)>>>0>(c[ja>>2]|0)>>>0?(qa=Mk(c[Ca>>2]|0)|0,ga=y,$=Mk((c[ha>>2]|0)+1|0)|0,(qa|0)==($|0)&(ga|0)==(y|0)):0){c[ra>>2]=(cn((c[ha>>2]|0)+9|0,(c[Ca>>2]|0)+8|0,c[la>>2]|0)|0)+8;c[ha>>2]=(c[ha>>2]|0)+1;c[za>>2]=(c[ha>>2]|0)-(c[Ca>>2]|0);while(1){if(!(((c[ha>>2]|0)>>>0>(c[ia>>2]|0)>>>0?(c[Ca>>2]|0)>>>0>(c[ka>>2]|0)>>>0:0)|0))break k;if((d[(c[ha>>2]|0)+-1>>0]|0|0)!=(d[(c[Ca>>2]|0)+-1>>0]|0|0))break k;c[ha>>2]=(c[ha>>2]|0)+-1;c[Ca>>2]=(c[Ca>>2]|0)+-1;c[ra>>2]=(c[ra>>2]|0)+1;}}c[ra>>2]=(cn((c[ha>>2]|0)+4|0,(c[ya>>2]|0)+4|0,c[la>>2]|0)|0)+4;c[za>>2]=(c[ha>>2]|0)-(c[ya>>2]|0);while(1){if(!(((c[ha>>2]|0)>>>0>(c[ia>>2]|0)>>>0?(c[ya>>2]|0)>>>0>(c[ka>>2]|0)>>>0:0)|0))break k;if((d[(c[ha>>2]|0)+-1>>0]|0|0)!=(d[(c[ya>>2]|0)+-1>>0]|0|0))break k;c[ha>>2]=(c[ha>>2]|0)+-1;c[ya>>2]=(c[ya>>2]|0)+-1;c[ra>>2]=(c[ra>>2]|0)+1;}}c[ha>>2]=(c[ha>>2]|0)+(((c[ha>>2]|0)-(c[ia>>2]|0)>>8)+1);continue i;}}while(0);c[oa>>2]=c[na>>2];c[na>>2]=c[za>>2];$m(c[X>>2]|0,(c[ha>>2]|0)-(c[ia>>2]|0)|0,c[ia>>2]|0,(c[za>>2]|0)+2|0,(c[ra>>2]|0)-3|0);}c[ha>>2]=(c[ha>>2]|0)+(c[ra>>2]|0);c[ia>>2]=c[ha>>2];l:do{if((c[ha>>2]|0)>>>0<=(c[ma>>2]|0)>>>0){ga=(c[ua>>2]|0)+2|0;$=c[da>>2]|0;c[$+((Dk((c[fa>>2]|0)+(c[ua>>2]|0)+2|0,c[ea>>2]|0,c[aa>>2]|0)|0)<<2)>>2]=ga;$=c[ba>>2]|0;c[$+((Dk((c[fa>>2]|0)+(c[ua>>2]|0)+2|0,c[ca>>2]|0,8)|0)<<2)>>2]=ga;ga=(c[ha>>2]|0)+-2-(c[fa>>2]|0)|0;$=c[da>>2]|0;c[$+((Dk((c[ha>>2]|0)+-2|0,c[ea>>2]|0,c[aa>>2]|0)|0)<<2)>>2]=ga;$=c[ba>>2]|0;c[$+((Dk((c[ha>>2]|0)+-2|0,c[ca>>2]|0,8)|0)<<2)>>2]=ga;while(1){if((c[ha>>2]|0)>>>0>(c[ma>>2]|0)>>>0)break l;ga=(c[oa>>2]|0)>>>0>0&1;$=Rk(c[ha>>2]|0)|0;if(!(ga&($|0)==(Rk((c[ha>>2]|0)+(0-(c[oa>>2]|0))|0)|0)))break l;c[Da>>2]=(cn((c[ha>>2]|0)+4|0,(c[ha>>2]|0)+4+(0-(c[oa>>2]|0))|0,c[la>>2]|0)|0)+4;c[Ea>>2]=c[oa>>2];c[oa>>2]=c[na>>2];c[na>>2]=c[Ea>>2];$=(c[ha>>2]|0)-(c[fa>>2]|0)|0;ga=c[da>>2]|0;c[ga+((Dk(c[ha>>2]|0,c[ea>>2]|0,c[aa>>2]|0)|0)<<2)>>2]=$;$=(c[ha>>2]|0)-(c[fa>>2]|0)|0;ga=c[ba>>2]|0;c[ga+((Dk(c[ha>>2]|0,c[ca>>2]|0,8)|0)<<2)>>2]=$;$m(c[X>>2]|0,0,c[ia>>2]|0,0,(c[Da>>2]|0)-3|0);c[ha>>2]=(c[ha>>2]|0)+(c[Da>>2]|0);c[ia>>2]=c[ha>>2];}}}while(0);}c[c[Y>>2]>>2]=c[na>>2]|0?c[na>>2]|0:c[pa>>2]|0;c[(c[Y>>2]|0)+4>>2]=c[oa>>2]|0?c[oa>>2]|0:c[pa>>2]|0;c[Zb>>2]=(c[la>>2]|0)-(c[ia>>2]|0);gc=c[Zb>>2]|0;l=i;return gc|0;}default:{ia=c[$b>>2]|0;$b=c[ac>>2]|0;ac=c[bc>>2]|0;bc=c[cc>>2]|0;cc=c[dc>>2]|0;c[ob>>2]=c[_b>>2];c[pb>>2]=ia;c[qb>>2]=$b;c[rb>>2]=ac;c[sb>>2]=bc;c[tb>>2]=cc;c[ub>>2]=4;c[vb>>2]=c[(c[ob>>2]|0)+36>>2];c[wb>>2]=c[(c[rb>>2]|0)+8>>2];c[xb>>2]=c[(c[ob>>2]|0)+44>>2];c[yb>>2]=c[(c[rb>>2]|0)+4>>2];c[zb>>2]=c[(c[ob>>2]|0)+4>>2];c[Ab>>2]=c[sb>>2];c[Bb>>2]=c[Ab>>2];c[Cb>>2]=c[Ab>>2];c[Db>>2]=c[(c[ob>>2]|0)+12>>2];c[Eb>>2]=(c[zb>>2]|0)+(c[Db>>2]|0);c[Fb>>2]=(c[Ab>>2]|0)+(c[tb>>2]|0);c[Gb>>2]=(c[Fb>>2]|0)+-8;c[Hb>>2]=c[c[qb>>2]>>2];c[Ib>>2]=c[(c[qb>>2]|0)+4>>2];c[Jb>>2]=0;c[Bb>>2]=(c[Bb>>2]|0)+((c[Bb>>2]|0)==(c[Eb>>2]|0)&1);c[Kb>>2]=(c[Bb>>2]|0)-(c[Eb>>2]|0);if((c[Ib>>2]|0)>>>0>(c[Kb>>2]|0)>>>0){c[Jb>>2]=c[Ib>>2];c[Ib>>2]=0;}if((c[Hb>>2]|0)>>>0>(c[Kb>>2]|0)>>>0){c[Jb>>2]=c[Hb>>2];c[Hb>>2]=0;}m:while(1){if((c[Bb>>2]|0)>>>0>=(c[Gb>>2]|0)>>>0)break;c[Mb>>2]=Dk(c[Bb>>2]|0,c[wb>>2]|0,8)|0;c[Nb>>2]=Dk(c[Bb>>2]|0,c[yb>>2]|0,c[ub>>2]|0)|0;c[Ob>>2]=(c[Bb>>2]|0)-(c[zb>>2]|0);c[Pb>>2]=c[(c[vb>>2]|0)+(c[Mb>>2]<<2)>>2];c[Qb>>2]=c[(c[xb>>2]|0)+(c[Nb>>2]<<2)>>2];c[Rb>>2]=(c[zb>>2]|0)+(c[Pb>>2]|0);c[Sb>>2]=(c[zb>>2]|0)+(c[Qb>>2]|0);Kb=c[Ob>>2]|0;c[(c[xb>>2]|0)+(c[Nb>>2]<<2)>>2]=Kb;c[(c[vb>>2]|0)+(c[Mb>>2]<<2)>>2]=Kb;Kb=(c[Hb>>2]|0)>>>0>0&1;tb=Rk((c[Bb>>2]|0)+1+(0-(c[Hb>>2]|0))|0)|0;if(Kb&(tb|0)==(Rk((c[Bb>>2]|0)+1|0)|0)|0){c[Lb>>2]=(cn((c[Bb>>2]|0)+1+4|0,(c[Bb>>2]|0)+1+4+(0-(c[Hb>>2]|0))|0,c[Fb>>2]|0)|0)+4;c[Bb>>2]=(c[Bb>>2]|0)+1;$m(c[pb>>2]|0,(c[Bb>>2]|0)-(c[Cb>>2]|0)|0,c[Cb>>2]|0,0,(c[Lb>>2]|0)-3|0);}else{n:do{if((c[Pb>>2]|0)>>>0>(c[Db>>2]|0)>>>0?(tb=Mk(c[Rb>>2]|0)|0,Kb=y,Ab=Mk(c[Bb>>2]|0)|0,(tb|0)==(Ab|0)&(Kb|0)==(y|0)):0){c[Lb>>2]=(cn((c[Bb>>2]|0)+8|0,(c[Rb>>2]|0)+8|0,c[Fb>>2]|0)|0)+8;c[Tb>>2]=(c[Bb>>2]|0)-(c[Rb>>2]|0);while(1){if(!(((c[Bb>>2]|0)>>>0>(c[Cb>>2]|0)>>>0?(c[Rb>>2]|0)>>>0>(c[Eb>>2]|0)>>>0:0)|0))break n;if((d[(c[Bb>>2]|0)+-1>>0]|0|0)!=(d[(c[Rb>>2]|0)+-1>>0]|0|0))break n;c[Bb>>2]=(c[Bb>>2]|0)+-1;c[Rb>>2]=(c[Rb>>2]|0)+-1;c[Lb>>2]=(c[Lb>>2]|0)+1;}}else fc=16;}while(0);o:do{if((fc|0)==16){fc=0;if((c[Qb>>2]|0)>>>0>(c[Db>>2]|0)>>>0?(Kb=Rk(c[Sb>>2]|0)|0,(Kb|0)==(Rk(c[Bb>>2]|0)|0)):0){c[Ub>>2]=Dk((c[Bb>>2]|0)+1|0,c[wb>>2]|0,8)|0;c[Vb>>2]=c[(c[vb>>2]|0)+(c[Ub>>2]<<2)>>2];c[Wb>>2]=(c[zb>>2]|0)+(c[Vb>>2]|0);c[(c[vb>>2]|0)+(c[Ub>>2]<<2)>>2]=(c[Ob>>2]|0)+1;if((c[Vb>>2]|0)>>>0>(c[Db>>2]|0)>>>0?(Kb=Mk(c[Wb>>2]|0)|0,Ab=y,tb=Mk((c[Bb>>2]|0)+1|0)|0,(Kb|0)==(tb|0)&(Ab|0)==(y|0)):0){c[Lb>>2]=(cn((c[Bb>>2]|0)+9|0,(c[Wb>>2]|0)+8|0,c[Fb>>2]|0)|0)+8;c[Bb>>2]=(c[Bb>>2]|0)+1;c[Tb>>2]=(c[Bb>>2]|0)-(c[Wb>>2]|0);while(1){if(!(((c[Bb>>2]|0)>>>0>(c[Cb>>2]|0)>>>0?(c[Wb>>2]|0)>>>0>(c[Eb>>2]|0)>>>0:0)|0))break o;if((d[(c[Bb>>2]|0)+-1>>0]|0|0)!=(d[(c[Wb>>2]|0)+-1>>0]|0|0))break o;c[Bb>>2]=(c[Bb>>2]|0)+-1;c[Wb>>2]=(c[Wb>>2]|0)+-1;c[Lb>>2]=(c[Lb>>2]|0)+1;}}c[Lb>>2]=(cn((c[Bb>>2]|0)+4|0,(c[Sb>>2]|0)+4|0,c[Fb>>2]|0)|0)+4;c[Tb>>2]=(c[Bb>>2]|0)-(c[Sb>>2]|0);while(1){if(!(((c[Bb>>2]|0)>>>0>(c[Cb>>2]|0)>>>0?(c[Sb>>2]|0)>>>0>(c[Eb>>2]|0)>>>0:0)|0))break o;if((d[(c[Bb>>2]|0)+-1>>0]|0|0)!=(d[(c[Sb>>2]|0)+-1>>0]|0|0))break o;c[Bb>>2]=(c[Bb>>2]|0)+-1;c[Sb>>2]=(c[Sb>>2]|0)+-1;c[Lb>>2]=(c[Lb>>2]|0)+1;}}c[Bb>>2]=(c[Bb>>2]|0)+(((c[Bb>>2]|0)-(c[Cb>>2]|0)>>8)+1);continue m;}}while(0);c[Ib>>2]=c[Hb>>2];c[Hb>>2]=c[Tb>>2];$m(c[pb>>2]|0,(c[Bb>>2]|0)-(c[Cb>>2]|0)|0,c[Cb>>2]|0,(c[Tb>>2]|0)+2|0,(c[Lb>>2]|0)-3|0);}c[Bb>>2]=(c[Bb>>2]|0)+(c[Lb>>2]|0);c[Cb>>2]=c[Bb>>2];p:do{if((c[Bb>>2]|0)>>>0<=(c[Gb>>2]|0)>>>0){Ab=(c[Ob>>2]|0)+2|0;tb=c[xb>>2]|0;c[tb+((Dk((c[zb>>2]|0)+(c[Ob>>2]|0)+2|0,c[yb>>2]|0,c[ub>>2]|0)|0)<<2)>>2]=Ab;tb=c[vb>>2]|0;c[tb+((Dk((c[zb>>2]|0)+(c[Ob>>2]|0)+2|0,c[wb>>2]|0,8)|0)<<2)>>2]=Ab;Ab=(c[Bb>>2]|0)+-2-(c[zb>>2]|0)|0;tb=c[xb>>2]|0;c[tb+((Dk((c[Bb>>2]|0)+-2|0,c[yb>>2]|0,c[ub>>2]|0)|0)<<2)>>2]=Ab;tb=c[vb>>2]|0;c[tb+((Dk((c[Bb>>2]|0)+-2|0,c[wb>>2]|0,8)|0)<<2)>>2]=Ab;while(1){if((c[Bb>>2]|0)>>>0>(c[Gb>>2]|0)>>>0)break p;Ab=(c[Ib>>2]|0)>>>0>0&1;tb=Rk(c[Bb>>2]|0)|0;if(!(Ab&(tb|0)==(Rk((c[Bb>>2]|0)+(0-(c[Ib>>2]|0))|0)|0)))break p;c[Xb>>2]=(cn((c[Bb>>2]|0)+4|0,(c[Bb>>2]|0)+4+(0-(c[Ib>>2]|0))|0,c[Fb>>2]|0)|0)+4;c[Yb>>2]=c[Ib>>2];c[Ib>>2]=c[Hb>>2];c[Hb>>2]=c[Yb>>2];tb=(c[Bb>>2]|0)-(c[zb>>2]|0)|0;Ab=c[xb>>2]|0;c[Ab+((Dk(c[Bb>>2]|0,c[yb>>2]|0,c[ub>>2]|0)|0)<<2)>>2]=tb;tb=(c[Bb>>2]|0)-(c[zb>>2]|0)|0;Ab=c[vb>>2]|0;c[Ab+((Dk(c[Bb>>2]|0,c[wb>>2]|0,8)|0)<<2)>>2]=tb;$m(c[pb>>2]|0,0,c[Cb>>2]|0,0,(c[Xb>>2]|0)-3|0);c[Bb>>2]=(c[Bb>>2]|0)+(c[Xb>>2]|0);c[Cb>>2]=c[Bb>>2];}}}while(0);}c[c[qb>>2]>>2]=c[Hb>>2]|0?c[Hb>>2]|0:c[Jb>>2]|0;c[(c[qb>>2]|0)+4>>2]=c[Ib>>2]|0?c[Ib>>2]|0:c[Jb>>2]|0;c[Zb>>2]=(c[Fb>>2]|0)-(c[Cb>>2]|0);gc=c[Zb>>2]|0;l=i;return gc|0;}}return 0;}function jm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0;i=l;l=l+2144|0;j=i+2136|0;k=i+2132|0;m=i+2128|0;n=i+2124|0;o=i+2120|0;p=i+2116|0;q=i+2112|0;r=i+2108|0;s=i+2104|0;t=i+2100|0;u=i+2096|0;v=i+2092|0;w=i+2088|0;x=i+2084|0;y=i+2080|0;z=i+2076|0;A=i+2072|0;B=i+2068|0;C=i+2064|0;D=i+2060|0;E=i+2056|0;F=i+2052|0;G=i+2048|0;H=i+2044|0;I=i+2040|0;J=i+2036|0;K=i+2032|0;L=i+2028|0;M=i+2024|0;N=i+2020|0;O=i+2016|0;P=i+2012|0;Q=i+2008|0;R=i+2004|0;S=i+2e3|0;T=i+1996|0;U=i+1992|0;V=i+1988|0;W=i+1984|0;X=i+1980|0;Y=i+1976|0;Z=i+1972|0;_=i+1968|0;$=i+1964|0;aa=i+1960|0;ba=i+1956|0;ca=i+1952|0;da=i+1948|0;ea=i+1944|0;fa=i+1940|0;ga=i+1936|0;ha=i+1932|0;ia=i+1928|0;ja=i+1924|0;ka=i+1920|0;la=i+1916|0;ma=i+1912|0;na=i+1908|0;oa=i+1904|0;pa=i+1900|0;qa=i+1896|0;ra=i+1892|0;sa=i+1888|0;ta=i+1884|0;ua=i+1880|0;va=i+1876|0;wa=i+1872|0;xa=i+1868|0;ya=i+1864|0;za=i+1860|0;Aa=i+1856|0;Ba=i+1852|0;Ca=i+1848|0;Da=i+1844|0;Ea=i+1840|0;Fa=i+1836|0;Ga=i+1832|0;Ha=i+1828|0;Ia=i+1824|0;Ja=i+1820|0;Ka=i+1816|0;La=i+1812|0;Ma=i+1808|0;Na=i+1804|0;Oa=i+1800|0;Pa=i+1796|0;Qa=i+1792|0;Ra=i+1788|0;Sa=i+1784|0;Ta=i+1780|0;Ua=i+1776|0;Va=i+1772|0;Wa=i+1768|0;Xa=i+1764|0;Ya=i+1760|0;Za=i+1756|0;_a=i+1752|0;$a=i+1748|0;ab=i+1744|0;bb=i+1740|0;cb=i+1736|0;db=i+1732|0;eb=i+1728|0;fb=i+1724|0;gb=i+1720|0;hb=i+1716|0;ib=i+1712|0;jb=i+1708|0;kb=i+1704|0;lb=i+1700|0;mb=i+1696|0;nb=i+1692|0;ob=i+1688|0;pb=i+1684|0;qb=i+1680|0;rb=i+1676|0;sb=i+1672|0;tb=i+1668|0;ub=i+1664|0;vb=i+1660|0;wb=i+1656|0;xb=i+1652|0;yb=i+1648|0;zb=i+1644|0;Ab=i+1640|0;Bb=i+1636|0;Cb=i+1632|0;Db=i+1628|0;Eb=i+1624|0;Fb=i+1620|0;Gb=i+1616|0;Hb=i+1612|0;Ib=i+1608|0;Jb=i+1604|0;Kb=i+1600|0;Lb=i+1596|0;Mb=i+1592|0;Nb=i+1588|0;Ob=i+1584|0;Pb=i+1580|0;Qb=i+1576|0;Rb=i+1572|0;Sb=i+1568|0;Tb=i+1564|0;Ub=i+1560|0;Vb=i+1556|0;Wb=i+1552|0;Xb=i+1548|0;Yb=i+1544|0;Zb=i+1540|0;_b=i+1536|0;$b=i+1532|0;ac=i+1528|0;bc=i+1524|0;cc=i+1520|0;dc=i+1516|0;ec=i+1512|0;fc=i+1508|0;gc=i+1504|0;hc=i+1500|0;ic=i+1496|0;jc=i+1492|0;kc=i+1488|0;lc=i+1484|0;mc=i+1480|0;nc=i+1476|0;oc=i+1472|0;pc=i+1468|0;qc=i+1464|0;rc=i+1460|0;sc=i+1456|0;tc=i+1452|0;uc=i+1448|0;vc=i+1444|0;wc=i+1440|0;xc=i+1436|0;yc=i+1432|0;zc=i+1428|0;Ac=i+1424|0;Bc=i+1420|0;Cc=i+1416|0;Dc=i+1412|0;Ec=i+1408|0;Fc=i+1404|0;Gc=i+1400|0;Hc=i+1396|0;Ic=i+1392|0;Jc=i+1388|0;Kc=i+1384|0;Lc=i+1380|0;Mc=i+1376|0;Nc=i+1372|0;Oc=i+1368|0;Pc=i+1364|0;Qc=i+1360|0;Rc=i+1356|0;Sc=i+1352|0;Tc=i+1348|0;Uc=i+1344|0;Vc=i+1340|0;Wc=i+1336|0;Xc=i+1332|0;Yc=i+1328|0;Zc=i+1324|0;_c=i+1320|0;$c=i+1316|0;ad=i+1312|0;bd=i+1308|0;cd=i+1304|0;dd=i+1300|0;ed=i+1296|0;fd=i+1292|0;gd=i+1288|0;hd=i+1284|0;id=i+1280|0;jd=i+1276|0;kd=i+1272|0;ld=i+1268|0;md=i+1264|0;nd=i+1260|0;od=i+1256|0;pd=i+1252|0;qd=i+1248|0;rd=i+1244|0;sd=i+1240|0;td=i+1236|0;ud=i+1232|0;vd=i+1228|0;wd=i+1224|0;xd=i+1220|0;yd=i+1216|0;zd=i+1212|0;Ad=i+1208|0;Bd=i+1204|0;Cd=i+1200|0;Dd=i+1196|0;Ed=i+1192|0;Fd=i+1188|0;Gd=i+1184|0;Hd=i+1180|0;Id=i+1176|0;Jd=i+1172|0;Kd=i+1168|0;Ld=i+1164|0;Md=i+1160|0;Nd=i+1156|0;Od=i+1152|0;Pd=i+1148|0;Qd=i+1144|0;Rd=i+1140|0;Sd=i+1136|0;Td=i+1132|0;Ud=i+1128|0;Vd=i+1124|0;Wd=i+1120|0;Xd=i+1116|0;Yd=i+1112|0;Zd=i+1108|0;_d=i+1104|0;$d=i+1100|0;ae=i+1096|0;be=i+1092|0;ce=i+1088|0;de=i+1084|0;ee=i+1080|0;fe=i+1076|0;ge=i+1072|0;he=i+1068|0;ie=i+1064|0;je=i+1060|0;ke=i+1056|0;le=i+1052|0;me=i+1048|0;ne=i+1044|0;oe=i+1040|0;pe=i+1036|0;qe=i+1032|0;re=i+1028|0;se=i+1024|0;te=i+1020|0;ue=i+1016|0;ve=i+1012|0;we=i+1008|0;xe=i+1004|0;ye=i+1e3|0;ze=i+996|0;Ae=i+992|0;Be=i+988|0;Ce=i+984|0;De=i+980|0;Ee=i+976|0;Fe=i+972|0;Ge=i+968|0;He=i+964|0;Ie=i+960|0;Je=i+956|0;Ke=i+952|0;Le=i+948|0;Me=i+944|0;Ne=i+940|0;Oe=i+936|0;Pe=i+932|0;Qe=i+928|0;Re=i+924|0;Se=i+920|0;Te=i+916|0;Ue=i+912|0;Ve=i+908|0;We=i+904|0;Xe=i+900|0;Ye=i+896|0;Ze=i+892|0;_e=i+888|0;$e=i+884|0;af=i+880|0;bf=i+876|0;cf=i+872|0;df=i+868|0;ef=i+864|0;ff=i+860|0;gf=i+856|0;hf=i+852|0;jf=i+848|0;kf=i+844|0;lf=i+840|0;mf=i+836|0;nf=i+832|0;of=i+828|0;pf=i+824|0;qf=i+820|0;rf=i+816|0;sf=i+812|0;tf=i+808|0;uf=i+804|0;vf=i+800|0;wf=i+796|0;xf=i+792|0;yf=i+788|0;zf=i+784|0;Af=i+780|0;Bf=i+776|0;Cf=i+772|0;Df=i+768|0;Ef=i+764|0;Ff=i+760|0;Gf=i+756|0;Hf=i+752|0;If=i+748|0;Jf=i+744|0;Kf=i+740|0;Lf=i+736|0;Mf=i+732|0;Nf=i+728|0;Of=i+724|0;Pf=i+720|0;Qf=i+716|0;Rf=i+712|0;Sf=i+708|0;Tf=i+704|0;Uf=i+700|0;Vf=i+696|0;Wf=i+692|0;Xf=i+688|0;Yf=i+684|0;Zf=i+680|0;_f=i+676|0;$f=i+672|0;ag=i+668|0;bg=i+664|0;cg=i+660|0;dg=i+656|0;eg=i+652|0;fg=i+648|0;gg=i+644|0;hg=i+640|0;ig=i+636|0;jg=i+632|0;kg=i+628|0;lg=i+624|0;mg=i+620|0;ng=i+616|0;og=i+612|0;pg=i+608|0;qg=i+604|0;rg=i+600|0;sg=i+596|0;tg=i+592|0;ug=i+588|0;vg=i+584|0;wg=i+580|0;xg=i+576|0;yg=i+572|0;zg=i+568|0;Ag=i+564|0;Bg=i+560|0;Cg=i+556|0;Dg=i+552|0;Eg=i+548|0;Fg=i+544|0;Gg=i+540|0;Hg=i+536|0;Ig=i+532|0;Jg=i+528|0;Kg=i+524|0;Lg=i+520|0;Mg=i+516|0;Ng=i+512|0;Og=i+508|0;Pg=i+504|0;Qg=i+500|0;Rg=i+496|0;Sg=i+492|0;Tg=i+488|0;Ug=i+484|0;Vg=i+480|0;Wg=i+476|0;Xg=i+472|0;Yg=i+468|0;Zg=i+464|0;_g=i+460|0;$g=i+456|0;ah=i+452|0;bh=i+448|0;ch=i+444|0;dh=i+440|0;eh=i+436|0;fh=i+432|0;gh=i+428|0;hh=i+424|0;ih=i+420|0;jh=i+416|0;kh=i+412|0;lh=i+408|0;mh=i+404|0;nh=i+400|0;oh=i+396|0;ph=i+392|0;qh=i+388|0;rh=i+384|0;sh=i+380|0;th=i+376|0;uh=i+372|0;vh=i+368|0;wh=i+364|0;xh=i+360|0;yh=i+356|0;zh=i+352|0;Ah=i+348|0;Bh=i+344|0;Ch=i+340|0;Dh=i+336|0;Eh=i+332|0;Fh=i+328|0;Gh=i+324|0;Hh=i+320|0;Ih=i+316|0;Jh=i+312|0;Kh=i+308|0;Lh=i+304|0;Mh=i+300|0;Nh=i+296|0;Oh=i+292|0;Ph=i+288|0;Qh=i+284|0;Rh=i+280|0;Sh=i+276|0;Th=i+272|0;Uh=i+268|0;Vh=i+264|0;Wh=i+260|0;Xh=i+256|0;Yh=i+252|0;Zh=i+248|0;_h=i+244|0;$h=i+240|0;ai=i+236|0;bi=i+232|0;ci=i+228|0;di=i+216|0;ei=i+212|0;fi=i+208|0;gi=i+204|0;hi=i+200|0;ii=i+196|0;ji=i+192|0;ki=i+188|0;li=i+184|0;mi=i+180|0;ni=i+176|0;oi=i+172|0;pi=i+168|0;qi=i+164|0;ri=i+160|0;si=i+148|0;ti=i+144|0;ui=i+140|0;vi=i+136|0;wi=i+132|0;xi=i+128|0;yi=i+124|0;zi=i+120|0;Ai=i+116|0;Bi=i+112|0;Ci=i+108|0;Di=i+104|0;Ei=i+100|0;Fi=i+88|0;Gi=i+84|0;Hi=i+80|0;Ii=i+76|0;Ji=i+72|0;Ki=i+68|0;Li=i+64|0;Mi=i+60|0;Ni=i+56|0;Oi=i+52|0;Pi=i+48|0;Qi=i+44|0;Ri=i+40|0;Si=i+36|0;Ti=i+32|0;Ui=i+28|0;Vi=i+24|0;Wi=i+20|0;Xi=i+16|0;Yi=i+12|0;Zi=i+8|0;_i=i+4|0;$i=i;c[Wi>>2]=a;c[Xi>>2]=b;c[Yi>>2]=e;c[Zi>>2]=f;c[_i>>2]=g;c[$i>>2]=h;h=c[Xi>>2]|0;Xi=c[Yi>>2]|0;Yi=c[Zi>>2]|0;Zi=c[_i>>2]|0;_i=c[$i>>2]|0;c[Lh>>2]=c[Wi>>2];c[Mh>>2]=h;c[Nh>>2]=Xi;c[Oh>>2]=Yi;c[Ph>>2]=Zi;c[Qh>>2]=_i;c[Rh>>2]=0;c[Sh>>2]=1;c[Th>>2]=(c[Lh>>2]|0)+48;c[Uh>>2]=c[Ph>>2];c[Vh>>2]=c[Uh>>2];c[Wh>>2]=c[Uh>>2];c[Xh>>2]=(c[Uh>>2]|0)+(c[Qh>>2]|0);c[Yh>>2]=(c[Xh>>2]|0)+-8;c[Zh>>2]=c[(c[Lh>>2]|0)+4>>2];c[_h>>2]=(c[Zh>>2]|0)+(c[(c[Lh>>2]|0)+12>>2]|0);if((c[(c[Oh>>2]|0)+20>>2]|0)>>>0<4095)aj=c[(c[Oh>>2]|0)+20>>2]|0;else aj=4095;c[$h>>2]=aj;c[ai>>2]=(c[(c[Oh>>2]|0)+16>>2]|0)==3?3:4;c[bi>>2]=c[(c[Th>>2]|0)+20>>2];c[ci>>2]=c[(c[Th>>2]|0)+16>>2];c[(c[Lh>>2]|0)+28>>2]=c[(c[Lh>>2]|0)+24>>2];lm(c[Th>>2]|0,c[Ph>>2]|0,c[Qh>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+((c[Vh>>2]|0)==(c[_h>>2]|0)&1);c[di>>2]=0;c[di+4>>2]=0;c[di+8>>2]=0;while(1){if((c[Vh>>2]|0)>>>0>=(c[Yh>>2]|0)>>>0)break;c[fi>>2]=0;c[ii>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[ji>>2]=((c[ii>>2]|0)!=0^1)&1;_h=c[Oh>>2]|0;Qh=c[Vh>>2]|0;Ph=c[Xh>>2]|0;aj=c[Sh>>2]|0;Zh=c[Nh>>2]|0;Uh=c[ji>>2]|0;_i=c[ci>>2]|0;Zi=c[ai>>2]|0;c[Bh>>2]=c[Lh>>2];c[Ch>>2]=_h;c[Dh>>2]=Qh;c[Eh>>2]=Ph;c[Fh>>2]=aj;c[Gh>>2]=Zh;c[Hh>>2]=Uh;c[Ih>>2]=_i;c[Jh>>2]=Zi;c[Kh>>2]=c[(c[Ch>>2]|0)+16>>2];a:do{if((c[Dh>>2]|0)>>>0<((c[(c[Bh>>2]|0)+4>>2]|0)+(c[(c[Bh>>2]|0)+24>>2]|0)|0)>>>0)c[Ah>>2]=0;else{Zi=c[Ch>>2]|0;_i=c[Dh>>2]|0;Uh=c[Eh>>2]|0;Zh=c[Kh>>2]|0;aj=c[Fh>>2]|0;c[rh>>2]=c[Bh>>2];c[sh>>2]=Zi;c[th>>2]=_i;c[uh>>2]=Uh;c[vh>>2]=Zh;c[wh>>2]=aj;c[xh>>2]=c[(c[rh>>2]|0)+4>>2];c[yh>>2]=(c[th>>2]|0)-(c[xh>>2]|0);c[zh>>2]=c[(c[rh>>2]|0)+24>>2];while(1){if((c[zh>>2]|0)>>>0>=(c[yh>>2]|0)>>>0)break;aj=Rj(c[rh>>2]|0,c[sh>>2]|0,(c[xh>>2]|0)+(c[zh>>2]|0)|0,c[uh>>2]|0,c[vh>>2]|0,c[wh>>2]|0)|0;c[zh>>2]=(c[zh>>2]|0)+aj;}c[(c[rh>>2]|0)+24>>2]=c[yh>>2];switch(c[Kh>>2]|0){case 3:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[wg>>2]=c[Bh>>2];c[xg>>2]=aj;c[yg>>2]=Zh;c[zg>>2]=Uh;c[Ag>>2]=_i;c[Bg>>2]=Zi;c[Cg>>2]=Ph;c[Dg>>2]=Qh;c[Eg>>2]=_h;c[Fg>>2]=3;if((c[(c[xg>>2]|0)+20>>2]|0)>>>0<4095)bj=c[(c[xg>>2]|0)+20>>2]|0;else bj=4095;c[Gg>>2]=bj;c[Hg>>2]=c[(c[wg>>2]|0)+4>>2];c[Ig>>2]=(c[yg>>2]|0)-(c[Hg>>2]|0);c[Jg>>2]=c[(c[xg>>2]|0)+8>>2];c[Kg>>2]=(c[Fg>>2]|0)==3?3:4;c[Lg>>2]=c[(c[wg>>2]|0)+36>>2];c[Mg>>2]=Sj(c[yg>>2]|0,c[Jg>>2]|0,c[Fg>>2]|0)|0;c[Ng>>2]=c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2];c[Og>>2]=c[(c[wg>>2]|0)+44>>2];c[Pg>>2]=(c[(c[xg>>2]|0)+4>>2]|0)-1;c[Qg>>2]=(1<<c[Pg>>2])-1;c[Rg>>2]=0;c[Sg>>2]=0;c[Tg>>2]=c[(c[wg>>2]|0)+8>>2];c[Ug>>2]=c[(c[wg>>2]|0)+12>>2];c[Vg>>2]=(c[Tg>>2]|0)+(c[Ug>>2]|0);c[Wg>>2]=(c[Hg>>2]|0)+(c[Ug>>2]|0);if((c[Qg>>2]|0)>>>0>=(c[Ig>>2]|0)>>>0)cj=0;else cj=(c[Ig>>2]|0)-(c[Qg>>2]|0)|0;c[Xg>>2]=cj;c[Yg>>2]=c[(c[wg>>2]|0)+16>>2];c[Zg>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2);c[_g>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2)+4;c[$g>>2]=(c[Ig>>2]|0)+8+1;c[bh>>2]=0;c[ch>>2]=1<<c[(c[xg>>2]|0)+12>>2];c[dh>>2]=(c[Eg>>2]|0)-1;c[eh>>2]=3+(c[Cg>>2]|0);c[fh>>2]=c[Cg>>2];while(1){if((c[fh>>2]|0)>>>0>=(c[eh>>2]|0)>>>0){dj=31;break;}_h=c[Bg>>2]|0;if((c[fh>>2]|0)==3)ej=(c[_h>>2]|0)-1|0;else ej=c[_h+(c[fh>>2]<<2)>>2]|0;c[gh>>2]=ej;c[hh>>2]=(c[Ig>>2]|0)-(c[gh>>2]|0);c[ih>>2]=0;if(((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Ug>>2]|0)|0)>>>0){_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0;if((_h|0)==(mm((c[yg>>2]|0)+(0-(c[gh>>2]|0))|0,c[Kg>>2]|0)|0)){_h=Tj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[yg>>2]|0)+(c[Kg>>2]|0)+(0-(c[gh>>2]|0))|0,c[zg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}else{c[jh>>2]=(c[Tg>>2]|0)+(c[hh>>2]|0);if((c[Ag>>2]|0?(((c[Ug>>2]|0)-1-(c[hh>>2]|0)|0)>>>0>=3?((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Yg>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0,(_h|0)==(mm(c[jh>>2]|0,c[Kg>>2]|0)|0)):0){_h=Uj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[jh>>2]|0)+(c[Kg>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}if((c[ih>>2]|0)>>>0>(c[dh>>2]|0)>>>0?(c[dh>>2]=c[ih>>2],c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[fh>>2]|0)-(c[Cg>>2]|0),c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ih>>2],c[bh>>2]=(c[bh>>2]|0)+1,((c[ih>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[ih>>2]|0)|0)==(c[zg>>2]|0))|0):0){dj=29;break;}c[fh>>2]=(c[fh>>2]|0)+1;}do{if((dj|0)==29){dj=0;c[vg>>2]=c[bh>>2];}else if((dj|0)==31){dj=0;if(((c[Fg>>2]|0)==3?(c[dh>>2]|0)>>>0<(c[Fg>>2]|0)>>>0:0)?(c[kh>>2]=nm(c[wg>>2]|0,c[yg>>2]|0)|0,((c[kh>>2]|0)>>>0>(c[Yg>>2]|0)>>>0?((c[Ig>>2]|0)-(c[kh>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ag>>2]|0?(c[kh>>2]|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[nh>>2]=(c[Tg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Uj(c[yg>>2]|0,c[nh>>2]|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;}else{c[mh>>2]=(c[Hg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Tj(c[yg>>2]|0,c[mh>>2]|0,c[zg>>2]|0)|0;}if((c[lh>>2]|0)>>>0>=(c[Fg>>2]|0)>>>0?(c[dh>>2]=c[lh>>2],c[c[Dg>>2]>>2]=(c[Ig>>2]|0)-(c[kh>>2]|0)+2,c[(c[Dg>>2]|0)+4>>2]=c[lh>>2],c[bh>>2]=1,((c[lh>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[lh>>2]|0)|0)==(c[zg>>2]|0))|0):0){c[(c[wg>>2]|0)+24>>2]=(c[Ig>>2]|0)+1;c[vg>>2]=1;break;}}c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2]=c[Ig>>2];while(1){_h=c[ch>>2]|0;c[ch>>2]=_h+-1;if(!_h)break;if((c[Ng>>2]|0)>>>0<=(c[Yg>>2]|0)>>>0)break;c[oh>>2]=(c[Og>>2]|0)+((c[Ng>>2]&c[Qg>>2])<<1<<2);c[ph>>2]=(c[Rg>>2]|0)>>>0<(c[Sg>>2]|0)>>>0?c[Rg>>2]|0:c[Sg>>2]|0;if(c[Ag>>2]|0?((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[qh>>2]=(c[Tg>>2]|0)+(c[Ng>>2]|0);_h=Uj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;if(((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0>=(c[Ug>>2]|0)>>>0)c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);}else{c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);_h=Tj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;}if((c[ph>>2]|0)>>>0>(c[dh>>2]|0)>>>0){if((c[ph>>2]|0)>>>0>((c[$g>>2]|0)-(c[Ng>>2]|0)|0)>>>0)c[$g>>2]=(c[Ng>>2]|0)+(c[ph>>2]|0);c[dh>>2]=c[ph>>2];c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[Ig>>2]|0)-(c[Ng>>2]|0)+2;c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ph>>2];c[bh>>2]=(c[bh>>2]|0)+1;if((c[ph>>2]|0)>>>0>4096)break;if(((c[yg>>2]|0)+(c[ph>>2]|0)|0)==(c[zg>>2]|0))break;}_h=c[Ng>>2]|0;if((d[(c[qh>>2]|0)+(c[ph>>2]|0)>>0]|0|0)<(d[(c[yg>>2]|0)+(c[ph>>2]|0)>>0]|0|0)){c[c[Zg>>2]>>2]=_h;c[Rg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=56;break;}c[Zg>>2]=(c[oh>>2]|0)+4;c[Ng>>2]=c[(c[oh>>2]|0)+4>>2];}else{c[c[_g>>2]>>2]=_h;c[Sg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=59;break;}c[_g>>2]=c[oh>>2];c[Ng>>2]=c[c[oh>>2]>>2];}}if((dj|0)==56){dj=0;c[Zg>>2]=ah;}else if((dj|0)==59){dj=0;c[_g>>2]=ah;}c[c[_g>>2]>>2]=0;c[c[Zg>>2]>>2]=0;c[(c[wg>>2]|0)+24>>2]=(c[$g>>2]|0)-8;c[vg>>2]=c[bh>>2];}}while(0);c[Ah>>2]=c[vg>>2];break a;break;}case 7:case 6:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Hd>>2]=c[Bh>>2];c[Id>>2]=_h;c[Jd>>2]=Qh;c[Kd>>2]=Ph;c[Ld>>2]=Zi;c[Md>>2]=_i;c[Nd>>2]=Uh;c[Od>>2]=Zh;c[Pd>>2]=aj;c[Qd>>2]=6;if((c[(c[Id>>2]|0)+20>>2]|0)>>>0<4095)fj=c[(c[Id>>2]|0)+20>>2]|0;else fj=4095;c[Rd>>2]=fj;c[Sd>>2]=c[(c[Hd>>2]|0)+4>>2];c[Td>>2]=(c[Jd>>2]|0)-(c[Sd>>2]|0);c[Ud>>2]=c[(c[Id>>2]|0)+8>>2];c[Vd>>2]=(c[Qd>>2]|0)==3?3:4;c[Wd>>2]=c[(c[Hd>>2]|0)+36>>2];c[Xd>>2]=Sj(c[Jd>>2]|0,c[Ud>>2]|0,c[Qd>>2]|0)|0;c[Yd>>2]=c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2];c[Zd>>2]=c[(c[Hd>>2]|0)+44>>2];c[_d>>2]=(c[(c[Id>>2]|0)+4>>2]|0)-1;c[$d>>2]=(1<<c[_d>>2])-1;c[ae>>2]=0;c[be>>2]=0;c[ce>>2]=c[(c[Hd>>2]|0)+8>>2];c[de>>2]=c[(c[Hd>>2]|0)+12>>2];c[ee>>2]=(c[ce>>2]|0)+(c[de>>2]|0);c[fe>>2]=(c[Sd>>2]|0)+(c[de>>2]|0);if((c[$d>>2]|0)>>>0>=(c[Td>>2]|0)>>>0)gj=0;else gj=(c[Td>>2]|0)-(c[$d>>2]|0)|0;c[ge>>2]=gj;c[he>>2]=c[(c[Hd>>2]|0)+16>>2];c[ie>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2);c[je>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2)+4;c[ke>>2]=(c[Td>>2]|0)+8+1;c[me>>2]=0;c[ne>>2]=1<<c[(c[Id>>2]|0)+12>>2];c[oe>>2]=(c[Pd>>2]|0)-1;c[pe>>2]=3+(c[Nd>>2]|0);c[qe>>2]=c[Nd>>2];while(1){if((c[qe>>2]|0)>>>0>=(c[pe>>2]|0)>>>0){dj=190;break;}aj=c[Md>>2]|0;if((c[qe>>2]|0)==3)hj=(c[aj>>2]|0)-1|0;else hj=c[aj+(c[qe>>2]<<2)>>2]|0;c[re>>2]=hj;c[se>>2]=(c[Td>>2]|0)-(c[re>>2]|0);c[te>>2]=0;if(((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[de>>2]|0)|0)>>>0){aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0;if((aj|0)==(mm((c[Jd>>2]|0)+(0-(c[re>>2]|0))|0,c[Vd>>2]|0)|0)){aj=Tj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[Jd>>2]|0)+(c[Vd>>2]|0)+(0-(c[re>>2]|0))|0,c[Kd>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}else{c[ue>>2]=(c[ce>>2]|0)+(c[se>>2]|0);if((c[Ld>>2]|0?(((c[de>>2]|0)-1-(c[se>>2]|0)|0)>>>0>=3?((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[he>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0,(aj|0)==(mm(c[ue>>2]|0,c[Vd>>2]|0)|0)):0){aj=Uj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[ue>>2]|0)+(c[Vd>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}if((c[te>>2]|0)>>>0>(c[oe>>2]|0)>>>0?(c[oe>>2]=c[te>>2],c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[qe>>2]|0)-(c[Nd>>2]|0),c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[te>>2],c[me>>2]=(c[me>>2]|0)+1,((c[te>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[te>>2]|0)|0)==(c[Kd>>2]|0))|0):0){dj=188;break;}c[qe>>2]=(c[qe>>2]|0)+1;}do{if((dj|0)==188){dj=0;c[Gd>>2]=c[me>>2];}else if((dj|0)==190){dj=0;if(((c[Qd>>2]|0)==3?(c[oe>>2]|0)>>>0<(c[Qd>>2]|0)>>>0:0)?(c[ve>>2]=nm(c[Hd>>2]|0,c[Jd>>2]|0)|0,((c[ve>>2]|0)>>>0>(c[he>>2]|0)>>>0?((c[Td>>2]|0)-(c[ve>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ld>>2]|0?(c[ve>>2]|0)>>>0<(c[de>>2]|0)>>>0:0){c[ye>>2]=(c[ce>>2]|0)+(c[ve>>2]|0);c[we>>2]=Uj(c[Jd>>2]|0,c[ye>>2]|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;}else{c[xe>>2]=(c[Sd>>2]|0)+(c[ve>>2]|0);c[we>>2]=Tj(c[Jd>>2]|0,c[xe>>2]|0,c[Kd>>2]|0)|0;}if((c[we>>2]|0)>>>0>=(c[Qd>>2]|0)>>>0?(c[oe>>2]=c[we>>2],c[c[Od>>2]>>2]=(c[Td>>2]|0)-(c[ve>>2]|0)+2,c[(c[Od>>2]|0)+4>>2]=c[we>>2],c[me>>2]=1,((c[we>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[we>>2]|0)|0)==(c[Kd>>2]|0))|0):0){c[(c[Hd>>2]|0)+24>>2]=(c[Td>>2]|0)+1;c[Gd>>2]=1;break;}}c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2]=c[Td>>2];while(1){aj=c[ne>>2]|0;c[ne>>2]=aj+-1;if(!aj)break;if((c[Yd>>2]|0)>>>0<=(c[he>>2]|0)>>>0)break;c[ze>>2]=(c[Zd>>2]|0)+((c[Yd>>2]&c[$d>>2])<<1<<2);c[Ae>>2]=(c[ae>>2]|0)>>>0<(c[be>>2]|0)>>>0?c[ae>>2]|0:c[be>>2]|0;if(c[Ld>>2]|0?((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0<(c[de>>2]|0)>>>0:0){c[Be>>2]=(c[ce>>2]|0)+(c[Yd>>2]|0);aj=Uj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;if(((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0>=(c[de>>2]|0)>>>0)c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);}else{c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);aj=Tj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;}if((c[Ae>>2]|0)>>>0>(c[oe>>2]|0)>>>0){if((c[Ae>>2]|0)>>>0>((c[ke>>2]|0)-(c[Yd>>2]|0)|0)>>>0)c[ke>>2]=(c[Yd>>2]|0)+(c[Ae>>2]|0);c[oe>>2]=c[Ae>>2];c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[Td>>2]|0)-(c[Yd>>2]|0)+2;c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[Ae>>2];c[me>>2]=(c[me>>2]|0)+1;if((c[Ae>>2]|0)>>>0>4096)break;if(((c[Jd>>2]|0)+(c[Ae>>2]|0)|0)==(c[Kd>>2]|0))break;}aj=c[Yd>>2]|0;if((d[(c[Be>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)<(d[(c[Jd>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)){c[c[ie>>2]>>2]=aj;c[ae>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=215;break;}c[ie>>2]=(c[ze>>2]|0)+4;c[Yd>>2]=c[(c[ze>>2]|0)+4>>2];}else{c[c[je>>2]>>2]=aj;c[be>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=218;break;}c[je>>2]=c[ze>>2];c[Yd>>2]=c[c[ze>>2]>>2];}}if((dj|0)==215){dj=0;c[ie>>2]=le;}else if((dj|0)==218){dj=0;c[je>>2]=le;}c[c[je>>2]>>2]=0;c[c[ie>>2]>>2]=0;c[(c[Hd>>2]|0)+24>>2]=(c[ke>>2]|0)-8;c[Gd>>2]=c[me>>2];}}while(0);c[Ah>>2]=c[Gd>>2];break a;break;}case 5:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[De>>2]=c[Bh>>2];c[Ee>>2]=aj;c[Fe>>2]=Zh;c[Ge>>2]=Uh;c[He>>2]=_i;c[Ie>>2]=Zi;c[Je>>2]=Ph;c[Ke>>2]=Qh;c[Le>>2]=_h;c[Me>>2]=5;if((c[(c[Ee>>2]|0)+20>>2]|0)>>>0<4095)ij=c[(c[Ee>>2]|0)+20>>2]|0;else ij=4095;c[Ne>>2]=ij;c[Oe>>2]=c[(c[De>>2]|0)+4>>2];c[Pe>>2]=(c[Fe>>2]|0)-(c[Oe>>2]|0);c[Qe>>2]=c[(c[Ee>>2]|0)+8>>2];c[Re>>2]=(c[Me>>2]|0)==3?3:4;c[Se>>2]=c[(c[De>>2]|0)+36>>2];c[Te>>2]=Sj(c[Fe>>2]|0,c[Qe>>2]|0,c[Me>>2]|0)|0;c[Ue>>2]=c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2];c[Ve>>2]=c[(c[De>>2]|0)+44>>2];c[We>>2]=(c[(c[Ee>>2]|0)+4>>2]|0)-1;c[Xe>>2]=(1<<c[We>>2])-1;c[Ye>>2]=0;c[Ze>>2]=0;c[_e>>2]=c[(c[De>>2]|0)+8>>2];c[$e>>2]=c[(c[De>>2]|0)+12>>2];c[af>>2]=(c[_e>>2]|0)+(c[$e>>2]|0);c[bf>>2]=(c[Oe>>2]|0)+(c[$e>>2]|0);if((c[Xe>>2]|0)>>>0>=(c[Pe>>2]|0)>>>0)jj=0;else jj=(c[Pe>>2]|0)-(c[Xe>>2]|0)|0;c[cf>>2]=jj;c[df>>2]=c[(c[De>>2]|0)+16>>2];c[ef>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2);c[ff>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2)+4;c[gf>>2]=(c[Pe>>2]|0)+8+1;c[jf>>2]=0;c[kf>>2]=1<<c[(c[Ee>>2]|0)+12>>2];c[lf>>2]=(c[Le>>2]|0)-1;c[mf>>2]=3+(c[Je>>2]|0);c[nf>>2]=c[Je>>2];while(1){if((c[nf>>2]|0)>>>0>=(c[mf>>2]|0)>>>0){dj=137;break;}_h=c[Ie>>2]|0;if((c[nf>>2]|0)==3)kj=(c[_h>>2]|0)-1|0;else kj=c[_h+(c[nf>>2]<<2)>>2]|0;c[of>>2]=kj;c[pf>>2]=(c[Pe>>2]|0)-(c[of>>2]|0);c[qf>>2]=0;if(((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[$e>>2]|0)|0)>>>0){_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0;if((_h|0)==(mm((c[Fe>>2]|0)+(0-(c[of>>2]|0))|0,c[Re>>2]|0)|0)){_h=Tj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[Fe>>2]|0)+(c[Re>>2]|0)+(0-(c[of>>2]|0))|0,c[Ge>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}else{c[rf>>2]=(c[_e>>2]|0)+(c[pf>>2]|0);if((c[He>>2]|0?(((c[$e>>2]|0)-1-(c[pf>>2]|0)|0)>>>0>=3?((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[df>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0,(_h|0)==(mm(c[rf>>2]|0,c[Re>>2]|0)|0)):0){_h=Uj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[rf>>2]|0)+(c[Re>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}if((c[qf>>2]|0)>>>0>(c[lf>>2]|0)>>>0?(c[lf>>2]=c[qf>>2],c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[nf>>2]|0)-(c[Je>>2]|0),c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[qf>>2],c[jf>>2]=(c[jf>>2]|0)+1,((c[qf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[qf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){dj=135;break;}c[nf>>2]=(c[nf>>2]|0)+1;}do{if((dj|0)==135){dj=0;c[Ce>>2]=c[jf>>2];}else if((dj|0)==137){dj=0;if(((c[Me>>2]|0)==3?(c[lf>>2]|0)>>>0<(c[Me>>2]|0)>>>0:0)?(c[sf>>2]=nm(c[De>>2]|0,c[Fe>>2]|0)|0,((c[sf>>2]|0)>>>0>(c[df>>2]|0)>>>0?((c[Pe>>2]|0)-(c[sf>>2]|0)|0)>>>0<262144:0)|0):0){if(c[He>>2]|0?(c[sf>>2]|0)>>>0<(c[$e>>2]|0)>>>0:0){c[vf>>2]=(c[_e>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Uj(c[Fe>>2]|0,c[vf>>2]|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;}else{c[uf>>2]=(c[Oe>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Tj(c[Fe>>2]|0,c[uf>>2]|0,c[Ge>>2]|0)|0;}if((c[tf>>2]|0)>>>0>=(c[Me>>2]|0)>>>0?(c[lf>>2]=c[tf>>2],c[c[Ke>>2]>>2]=(c[Pe>>2]|0)-(c[sf>>2]|0)+2,c[(c[Ke>>2]|0)+4>>2]=c[tf>>2],c[jf>>2]=1,((c[tf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[tf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){c[(c[De>>2]|0)+24>>2]=(c[Pe>>2]|0)+1;c[Ce>>2]=1;break;}}c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2]=c[Pe>>2];while(1){_h=c[kf>>2]|0;c[kf>>2]=_h+-1;if(!_h)break;if((c[Ue>>2]|0)>>>0<=(c[df>>2]|0)>>>0)break;c[wf>>2]=(c[Ve>>2]|0)+((c[Ue>>2]&c[Xe>>2])<<1<<2);c[xf>>2]=(c[Ye>>2]|0)>>>0<(c[Ze>>2]|0)>>>0?c[Ye>>2]|0:c[Ze>>2]|0;if(c[He>>2]|0?((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0<(c[$e>>2]|0)>>>0:0){c[yf>>2]=(c[_e>>2]|0)+(c[Ue>>2]|0);_h=Uj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;if(((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0>=(c[$e>>2]|0)>>>0)c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);}else{c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);_h=Tj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;}if((c[xf>>2]|0)>>>0>(c[lf>>2]|0)>>>0){if((c[xf>>2]|0)>>>0>((c[gf>>2]|0)-(c[Ue>>2]|0)|0)>>>0)c[gf>>2]=(c[Ue>>2]|0)+(c[xf>>2]|0);c[lf>>2]=c[xf>>2];c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[Pe>>2]|0)-(c[Ue>>2]|0)+2;c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[xf>>2];c[jf>>2]=(c[jf>>2]|0)+1;if((c[xf>>2]|0)>>>0>4096)break;if(((c[Fe>>2]|0)+(c[xf>>2]|0)|0)==(c[Ge>>2]|0))break;}_h=c[Ue>>2]|0;if((d[(c[yf>>2]|0)+(c[xf>>2]|0)>>0]|0|0)<(d[(c[Fe>>2]|0)+(c[xf>>2]|0)>>0]|0|0)){c[c[ef>>2]>>2]=_h;c[Ye>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=162;break;}c[ef>>2]=(c[wf>>2]|0)+4;c[Ue>>2]=c[(c[wf>>2]|0)+4>>2];}else{c[c[ff>>2]>>2]=_h;c[Ze>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=165;break;}c[ff>>2]=c[wf>>2];c[Ue>>2]=c[c[wf>>2]>>2];}}if((dj|0)==162){dj=0;c[ef>>2]=hf;}else if((dj|0)==165){dj=0;c[ff>>2]=hf;}c[c[ff>>2]>>2]=0;c[c[ef>>2]>>2]=0;c[(c[De>>2]|0)+24>>2]=(c[gf>>2]|0)-8;c[Ce>>2]=c[jf>>2];}}while(0);c[Ah>>2]=c[Ce>>2];break a;break;}default:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Af>>2]=c[Bh>>2];c[Bf>>2]=_h;c[Cf>>2]=Qh;c[Df>>2]=Ph;c[Ef>>2]=Zi;c[Ff>>2]=_i;c[Gf>>2]=Uh;c[Hf>>2]=Zh;c[If>>2]=aj;c[Jf>>2]=4;if((c[(c[Bf>>2]|0)+20>>2]|0)>>>0<4095)lj=c[(c[Bf>>2]|0)+20>>2]|0;else lj=4095;c[Kf>>2]=lj;c[Lf>>2]=c[(c[Af>>2]|0)+4>>2];c[Mf>>2]=(c[Cf>>2]|0)-(c[Lf>>2]|0);c[Nf>>2]=c[(c[Bf>>2]|0)+8>>2];c[Of>>2]=(c[Jf>>2]|0)==3?3:4;c[Pf>>2]=c[(c[Af>>2]|0)+36>>2];c[Qf>>2]=Sj(c[Cf>>2]|0,c[Nf>>2]|0,c[Jf>>2]|0)|0;c[Rf>>2]=c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2];c[Sf>>2]=c[(c[Af>>2]|0)+44>>2];c[Tf>>2]=(c[(c[Bf>>2]|0)+4>>2]|0)-1;c[Uf>>2]=(1<<c[Tf>>2])-1;c[Vf>>2]=0;c[Wf>>2]=0;c[Xf>>2]=c[(c[Af>>2]|0)+8>>2];c[Yf>>2]=c[(c[Af>>2]|0)+12>>2];c[Zf>>2]=(c[Xf>>2]|0)+(c[Yf>>2]|0);c[_f>>2]=(c[Lf>>2]|0)+(c[Yf>>2]|0);if((c[Uf>>2]|0)>>>0>=(c[Mf>>2]|0)>>>0)mj=0;else mj=(c[Mf>>2]|0)-(c[Uf>>2]|0)|0;c[$f>>2]=mj;c[ag>>2]=c[(c[Af>>2]|0)+16>>2];c[bg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2);c[cg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2)+4;c[dg>>2]=(c[Mf>>2]|0)+8+1;c[fg>>2]=0;c[gg>>2]=1<<c[(c[Bf>>2]|0)+12>>2];c[hg>>2]=(c[If>>2]|0)-1;c[ig>>2]=3+(c[Gf>>2]|0);c[jg>>2]=c[Gf>>2];while(1){if((c[jg>>2]|0)>>>0>=(c[ig>>2]|0)>>>0){dj=84;break;}aj=c[Ff>>2]|0;if((c[jg>>2]|0)==3)nj=(c[aj>>2]|0)-1|0;else nj=c[aj+(c[jg>>2]<<2)>>2]|0;c[kg>>2]=nj;c[lg>>2]=(c[Mf>>2]|0)-(c[kg>>2]|0);c[mg>>2]=0;if(((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[Yf>>2]|0)|0)>>>0){aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0;if((aj|0)==(mm((c[Cf>>2]|0)+(0-(c[kg>>2]|0))|0,c[Of>>2]|0)|0)){aj=Tj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[Cf>>2]|0)+(c[Of>>2]|0)+(0-(c[kg>>2]|0))|0,c[Df>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}else{c[ng>>2]=(c[Xf>>2]|0)+(c[lg>>2]|0);if((c[Ef>>2]|0?(((c[Yf>>2]|0)-1-(c[lg>>2]|0)|0)>>>0>=3?((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[ag>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0,(aj|0)==(mm(c[ng>>2]|0,c[Of>>2]|0)|0)):0){aj=Uj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[ng>>2]|0)+(c[Of>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}if((c[mg>>2]|0)>>>0>(c[hg>>2]|0)>>>0?(c[hg>>2]=c[mg>>2],c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[jg>>2]|0)-(c[Gf>>2]|0),c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[mg>>2],c[fg>>2]=(c[fg>>2]|0)+1,((c[mg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[mg>>2]|0)|0)==(c[Df>>2]|0))|0):0){dj=82;break;}c[jg>>2]=(c[jg>>2]|0)+1;}do{if((dj|0)==82){dj=0;c[zf>>2]=c[fg>>2];}else if((dj|0)==84){dj=0;if(((c[Jf>>2]|0)==3?(c[hg>>2]|0)>>>0<(c[Jf>>2]|0)>>>0:0)?(c[og>>2]=nm(c[Af>>2]|0,c[Cf>>2]|0)|0,((c[og>>2]|0)>>>0>(c[ag>>2]|0)>>>0?((c[Mf>>2]|0)-(c[og>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ef>>2]|0?(c[og>>2]|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[rg>>2]=(c[Xf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Uj(c[Cf>>2]|0,c[rg>>2]|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;}else{c[qg>>2]=(c[Lf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Tj(c[Cf>>2]|0,c[qg>>2]|0,c[Df>>2]|0)|0;}if((c[pg>>2]|0)>>>0>=(c[Jf>>2]|0)>>>0?(c[hg>>2]=c[pg>>2],c[c[Hf>>2]>>2]=(c[Mf>>2]|0)-(c[og>>2]|0)+2,c[(c[Hf>>2]|0)+4>>2]=c[pg>>2],c[fg>>2]=1,((c[pg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[pg>>2]|0)|0)==(c[Df>>2]|0))|0):0){c[(c[Af>>2]|0)+24>>2]=(c[Mf>>2]|0)+1;c[zf>>2]=1;break;}}c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2]=c[Mf>>2];while(1){aj=c[gg>>2]|0;c[gg>>2]=aj+-1;if(!aj)break;if((c[Rf>>2]|0)>>>0<=(c[ag>>2]|0)>>>0)break;c[sg>>2]=(c[Sf>>2]|0)+((c[Rf>>2]&c[Uf>>2])<<1<<2);c[tg>>2]=(c[Vf>>2]|0)>>>0<(c[Wf>>2]|0)>>>0?c[Vf>>2]|0:c[Wf>>2]|0;if(c[Ef>>2]|0?((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[ug>>2]=(c[Xf>>2]|0)+(c[Rf>>2]|0);aj=Uj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;if(((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0>=(c[Yf>>2]|0)>>>0)c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);}else{c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);aj=Tj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;}if((c[tg>>2]|0)>>>0>(c[hg>>2]|0)>>>0){if((c[tg>>2]|0)>>>0>((c[dg>>2]|0)-(c[Rf>>2]|0)|0)>>>0)c[dg>>2]=(c[Rf>>2]|0)+(c[tg>>2]|0);c[hg>>2]=c[tg>>2];c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[Mf>>2]|0)-(c[Rf>>2]|0)+2;c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[tg>>2];c[fg>>2]=(c[fg>>2]|0)+1;if((c[tg>>2]|0)>>>0>4096)break;if(((c[Cf>>2]|0)+(c[tg>>2]|0)|0)==(c[Df>>2]|0))break;}aj=c[Rf>>2]|0;if((d[(c[ug>>2]|0)+(c[tg>>2]|0)>>0]|0|0)<(d[(c[Cf>>2]|0)+(c[tg>>2]|0)>>0]|0|0)){c[c[bg>>2]>>2]=aj;c[Vf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=109;break;}c[bg>>2]=(c[sg>>2]|0)+4;c[Rf>>2]=c[(c[sg>>2]|0)+4>>2];}else{c[c[cg>>2]>>2]=aj;c[Wf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=112;break;}c[cg>>2]=c[sg>>2];c[Rf>>2]=c[c[sg>>2]>>2];}}if((dj|0)==109){dj=0;c[bg>>2]=eg;}else if((dj|0)==112){dj=0;c[cg>>2]=eg;}c[c[cg>>2]>>2]=0;c[c[bg>>2]>>2]=0;c[(c[Af>>2]|0)+24>>2]=(c[dg>>2]|0)-8;c[zf>>2]=c[fg>>2];}}while(0);c[Ah>>2]=c[zf>>2];break a;}}}}while(0);c[ki>>2]=c[Ah>>2];if(!(c[ki>>2]|0)){c[Vh>>2]=(c[Vh>>2]|0)+1;continue;}c[li>>2]=0;while(1){if((c[li>>2]|0)>>>0>=3)break;c[(c[bi>>2]|0)+16+(c[li>>2]<<2)>>2]=c[(c[Nh>>2]|0)+(c[li>>2]<<2)>>2];c[li>>2]=(c[li>>2]|0)+1;}c[(c[bi>>2]|0)+8>>2]=1;c[(c[bi>>2]|0)+12>>2]=c[ii>>2];c[mi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)+4>>2];do{if((c[mi>>2]|0)>>>0<=(c[$h>>2]|0)>>>0){c[ni>>2]=om(di,c[Wh>>2]|0,c[ii>>2]|0,c[Th>>2]|0)|0;c[oi>>2]=0;while(1){if((c[oi>>2]|0)>>>0>=(c[ai>>2]|0)>>>0)break;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=1073741824;c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=0;while(1){if((c[pi>>2]|0)>>>0>=(c[ki>>2]|0)>>>0)break;c[qi>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)>>2];c[ri>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)+4>>2];pm(si,c[Nh>>2]|0,c[qi>>2]|0,c[ji>>2]|0);while(1){if((c[oi>>2]|0)>>>0>(c[ri>>2]|0)>>>0)break;aj=c[ni>>2]|0;Zh=c[oi>>2]|0;Uh=c[Th>>2]|0;_i=c[Rh>>2]|0;c[yd>>2]=c[qi>>2];c[zd>>2]=Zh;c[Ad>>2]=Uh;c[Bd>>2]=_i;c[Dd>>2]=qm((c[yd>>2]|0)+1|0)|0;c[Ed>>2]=(c[zd>>2]|0)-3;if(c[(c[Ad>>2]|0)+56>>2]|0){_i=(qm((c[Ed>>2]|0)+1|0)|0)+16|0;c[xd>>2]=_i+(c[Dd>>2]|0);}else{_i=(c[Dd>>2]|0)+(c[(c[Ad>>2]|0)+52>>2]|0)|0;c[Cd>>2]=_i-(qm((c[(c[(c[Ad>>2]|0)+12>>2]|0)+(c[Dd>>2]<<2)>>2]|0)+1|0)|0);if((c[Bd>>2]|0)<2&(c[Dd>>2]|0)>>>0>=20)c[Cd>>2]=(c[Cd>>2]|0)+((c[Dd>>2]|0)-19<<1);c[Fd>>2]=rm(c[Ed>>2]|0)|0;_i=(c[5840+(c[Fd>>2]<<2)>>2]|0)+(c[(c[Ad>>2]|0)+48>>2]|0)|0;Uh=_i-(qm((c[(c[(c[Ad>>2]|0)+8>>2]|0)+(c[Fd>>2]<<2)>>2]|0)+1|0)|0)|0;c[Cd>>2]=(c[Cd>>2]|0)+Uh;c[xd>>2]=c[Cd>>2];}c[ti>>2]=aj+(c[xd>>2]|0);c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=c[oi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+4>>2]=c[qi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+12>>2]=c[ii>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=c[ti>>2];aj=(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+16|0;c[aj>>2]=c[si>>2];c[aj+4>>2]=c[si+4>>2];c[aj+8>>2]=c[si+8>>2];c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=(c[pi>>2]|0)+1;}c[fi>>2]=(c[oi>>2]|0)-1;c[ei>>2]=1;b:while(1){if((c[ei>>2]|0)>>>0>(c[fi>>2]|0)>>>0){dj=504;break;}c[ui>>2]=(c[Vh>>2]|0)+(c[ei>>2]|0);if((c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+8>>2]|0)==1)oj=(c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+12>>2]|0)+1|0;else oj=1;c[vi>>2]=oj;if((c[ei>>2]|0)>>>0>(c[vi>>2]|0)>>>0){aj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[vi>>2]|0)|0)*28|0)>>2]|0;c[wi>>2]=aj+(sm((c[ui>>2]|0)+(0-(c[vi>>2]|0))|0,c[vi>>2]|0,c[Th>>2]|0)|0);}else c[wi>>2]=tm(di,c[Wh>>2]|0,c[vi>>2]|0,c[Th>>2]|0)|0;if((c[wi>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0)){c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+4>>2]=0;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]=c[vi>>2];c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]=c[wi>>2];aj=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Uh=(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+16|0;c[aj>>2]=c[Uh>>2];c[aj+4>>2]=c[Uh+4>>2];c[aj+8>>2]=c[Uh+8>>2];}c:do{if((c[ui>>2]|0)>>>0<=(c[Yh>>2]|0)>>>0){if((c[ei>>2]|0)==(c[fi>>2]|0)){dj=504;break b;}if((c[Rh>>2]|0)==0?(c[(c[bi>>2]|0)+(((c[ei>>2]|0)+1|0)*28|0)>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0):0)break;c[xi>>2]=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)!=1&1;if((c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)==1)pj=c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]|0;else pj=0;c[yi>>2]=pj;if((c[ei>>2]|0)>>>0>(c[yi>>2]|0)>>>0)qj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[yi>>2]|0)|0)*28|0)>>2]|0;else qj=0;c[zi>>2]=qj;Uh=c[zi>>2]|0;c[Ai>>2]=Uh+(um((c[ui>>2]|0)+(0-(c[yi>>2]|0))|0,c[yi>>2]|0,c[Th>>2]|0)|0);Uh=c[Oh>>2]|0;aj=c[ui>>2]|0;_i=c[Xh>>2]|0;Zh=c[Sh>>2]|0;Zi=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Ph=c[xi>>2]|0;Qh=c[ci>>2]|0;_h=c[ai>>2]|0;c[nd>>2]=c[Lh>>2];c[od>>2]=Uh;c[pd>>2]=aj;c[qd>>2]=_i;c[rd>>2]=Zh;c[sd>>2]=Zi;c[td>>2]=Ph;c[ud>>2]=Qh;c[vd>>2]=_h;c[wd>>2]=c[(c[od>>2]|0)+16>>2];d:do{if((c[pd>>2]|0)>>>0<((c[(c[nd>>2]|0)+4>>2]|0)+(c[(c[nd>>2]|0)+24>>2]|0)|0)>>>0)c[md>>2]=0;else{_h=c[od>>2]|0;Qh=c[pd>>2]|0;Ph=c[qd>>2]|0;Zi=c[wd>>2]|0;Zh=c[rd>>2]|0;c[dd>>2]=c[nd>>2];c[ed>>2]=_h;c[fd>>2]=Qh;c[gd>>2]=Ph;c[hd>>2]=Zi;c[id>>2]=Zh;c[jd>>2]=c[(c[dd>>2]|0)+4>>2];c[kd>>2]=(c[fd>>2]|0)-(c[jd>>2]|0);c[ld>>2]=c[(c[dd>>2]|0)+24>>2];while(1){if((c[ld>>2]|0)>>>0>=(c[kd>>2]|0)>>>0)break;Zh=Rj(c[dd>>2]|0,c[ed>>2]|0,(c[jd>>2]|0)+(c[ld>>2]|0)|0,c[gd>>2]|0,c[hd>>2]|0,c[id>>2]|0)|0;c[ld>>2]=(c[ld>>2]|0)+Zh;}c[(c[dd>>2]|0)+24>>2]=c[kd>>2];switch(c[wd>>2]|0){case 3:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[ic>>2]=c[nd>>2];c[jc>>2]=Zh;c[kc>>2]=Zi;c[lc>>2]=Ph;c[mc>>2]=Qh;c[nc>>2]=_h;c[oc>>2]=_i;c[pc>>2]=aj;c[qc>>2]=Uh;c[rc>>2]=3;if((c[(c[jc>>2]|0)+20>>2]|0)>>>0<4095)rj=c[(c[jc>>2]|0)+20>>2]|0;else rj=4095;c[sc>>2]=rj;c[tc>>2]=c[(c[ic>>2]|0)+4>>2];c[uc>>2]=(c[kc>>2]|0)-(c[tc>>2]|0);c[vc>>2]=c[(c[jc>>2]|0)+8>>2];c[wc>>2]=(c[rc>>2]|0)==3?3:4;c[xc>>2]=c[(c[ic>>2]|0)+36>>2];c[yc>>2]=Sj(c[kc>>2]|0,c[vc>>2]|0,c[rc>>2]|0)|0;c[zc>>2]=c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2];c[Ac>>2]=c[(c[ic>>2]|0)+44>>2];c[Bc>>2]=(c[(c[jc>>2]|0)+4>>2]|0)-1;c[Cc>>2]=(1<<c[Bc>>2])-1;c[Dc>>2]=0;c[Ec>>2]=0;c[Fc>>2]=c[(c[ic>>2]|0)+8>>2];c[Gc>>2]=c[(c[ic>>2]|0)+12>>2];c[Hc>>2]=(c[Fc>>2]|0)+(c[Gc>>2]|0);c[Ic>>2]=(c[tc>>2]|0)+(c[Gc>>2]|0);if((c[Cc>>2]|0)>>>0>=(c[uc>>2]|0)>>>0)sj=0;else sj=(c[uc>>2]|0)-(c[Cc>>2]|0)|0;c[Jc>>2]=sj;c[Kc>>2]=c[(c[ic>>2]|0)+16>>2];c[Lc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2);c[Mc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2)+4;c[Nc>>2]=(c[uc>>2]|0)+8+1;c[Pc>>2]=0;c[Qc>>2]=1<<c[(c[jc>>2]|0)+12>>2];c[Rc>>2]=(c[qc>>2]|0)-1;c[Sc>>2]=3+(c[oc>>2]|0);c[Tc>>2]=c[oc>>2];while(1){if((c[Tc>>2]|0)>>>0>=(c[Sc>>2]|0)>>>0){dj=287;break;}Uh=c[nc>>2]|0;if((c[Tc>>2]|0)==3)tj=(c[Uh>>2]|0)-1|0;else tj=c[Uh+(c[Tc>>2]<<2)>>2]|0;c[Uc>>2]=tj;c[Vc>>2]=(c[uc>>2]|0)-(c[Uc>>2]|0);c[Wc>>2]=0;do{if(((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Gc>>2]|0)|0)>>>0){Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm((c[kc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[wc>>2]|0)|0))break;Uh=Tj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[kc>>2]|0)+(c[wc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[lc>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}else{c[Xc>>2]=(c[Fc>>2]|0)+(c[Vc>>2]|0);if(!(c[mc>>2]|0))break;if(!((((c[Gc>>2]|0)-1-(c[Vc>>2]|0)|0)>>>0>=3?((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Kc>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm(c[Xc>>2]|0,c[wc>>2]|0)|0))break;Uh=Uj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[Xc>>2]|0)+(c[wc>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}}while(0);if((c[Wc>>2]|0)>>>0>(c[Rc>>2]|0)>>>0?(c[Rc>>2]=c[Wc>>2],c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[Tc>>2]|0)-(c[oc>>2]|0),c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[Wc>>2],c[Pc>>2]=(c[Pc>>2]|0)+1,((c[Wc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Wc>>2]|0)|0)==(c[lc>>2]|0))|0):0){dj=285;break;}c[Tc>>2]=(c[Tc>>2]|0)+1;}e:do{if((dj|0)==285){dj=0;c[hc>>2]=c[Pc>>2];}else if((dj|0)==287){dj=0;do{if((c[rc>>2]|0)==3){if((c[Rc>>2]|0)>>>0>=(c[rc>>2]|0)>>>0)break;c[Yc>>2]=nm(c[ic>>2]|0,c[kc>>2]|0)|0;if(!(((c[Yc>>2]|0)>>>0>(c[Kc>>2]|0)>>>0?((c[uc>>2]|0)-(c[Yc>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[mc>>2]|0){if((c[Yc>>2]|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=292;break;}c[$c>>2]=(c[Fc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Uj(c[kc>>2]|0,c[$c>>2]|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;}else dj=292;}while(0);if((dj|0)==292){dj=0;c[_c>>2]=(c[tc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Tj(c[kc>>2]|0,c[_c>>2]|0,c[lc>>2]|0)|0;}if((c[Zc>>2]|0)>>>0<(c[rc>>2]|0)>>>0)break;c[Rc>>2]=c[Zc>>2];c[c[pc>>2]>>2]=(c[uc>>2]|0)-(c[Yc>>2]|0)+2;c[(c[pc>>2]|0)+4>>2]=c[Zc>>2];c[Pc>>2]=1;if(!(((c[Zc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Zc>>2]|0)|0)==(c[lc>>2]|0))|0))break;c[(c[ic>>2]|0)+24>>2]=(c[uc>>2]|0)+1;c[hc>>2]=1;break e;}}while(0);c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2]=c[uc>>2];while(1){Uh=c[Qc>>2]|0;c[Qc>>2]=Uh+-1;if(!Uh)break;if((c[zc>>2]|0)>>>0<=(c[Kc>>2]|0)>>>0)break;c[ad>>2]=(c[Ac>>2]|0)+((c[zc>>2]&c[Cc>>2])<<1<<2);c[bd>>2]=(c[Dc>>2]|0)>>>0<(c[Ec>>2]|0)>>>0?c[Dc>>2]|0:c[Ec>>2]|0;do{if(c[mc>>2]|0){if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=302;break;}c[cd>>2]=(c[Fc>>2]|0)+(c[zc>>2]|0);Uh=Uj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0<(c[Gc>>2]|0)>>>0)break;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);}else dj=302;}while(0);if((dj|0)==302){dj=0;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);Uh=Tj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;}if((c[bd>>2]|0)>>>0>(c[Rc>>2]|0)>>>0){if((c[bd>>2]|0)>>>0>((c[Nc>>2]|0)-(c[zc>>2]|0)|0)>>>0)c[Nc>>2]=(c[zc>>2]|0)+(c[bd>>2]|0);c[Rc>>2]=c[bd>>2];c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[uc>>2]|0)-(c[zc>>2]|0)+2;c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[bd>>2];c[Pc>>2]=(c[Pc>>2]|0)+1;if((c[bd>>2]|0)>>>0>4096)break;if(((c[kc>>2]|0)+(c[bd>>2]|0)|0)==(c[lc>>2]|0))break;}Uh=c[zc>>2]|0;if((d[(c[cd>>2]|0)+(c[bd>>2]|0)>>0]|0|0)<(d[(c[kc>>2]|0)+(c[bd>>2]|0)>>0]|0|0)){c[c[Lc>>2]>>2]=Uh;c[Dc>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=312;break;}c[Lc>>2]=(c[ad>>2]|0)+4;c[zc>>2]=c[(c[ad>>2]|0)+4>>2];}else{c[c[Mc>>2]>>2]=Uh;c[Ec>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=315;break;}c[Mc>>2]=c[ad>>2];c[zc>>2]=c[c[ad>>2]>>2];}}if((dj|0)==312){dj=0;c[Lc>>2]=Oc;}else if((dj|0)==315){dj=0;c[Mc>>2]=Oc;}c[c[Mc>>2]>>2]=0;c[c[Lc>>2]>>2]=0;c[(c[ic>>2]|0)+24>>2]=(c[Nc>>2]|0)-8;c[hc>>2]=c[Pc>>2];}}while(0);c[md>>2]=c[hc>>2];break d;break;}case 7:case 6:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[u>>2]=c[nd>>2];c[v>>2]=Uh;c[w>>2]=aj;c[x>>2]=_i;c[y>>2]=_h;c[z>>2]=Qh;c[A>>2]=Ph;c[B>>2]=Zi;c[C>>2]=Zh;c[D>>2]=6;if((c[(c[v>>2]|0)+20>>2]|0)>>>0<4095)uj=c[(c[v>>2]|0)+20>>2]|0;else uj=4095;c[E>>2]=uj;c[F>>2]=c[(c[u>>2]|0)+4>>2];c[G>>2]=(c[w>>2]|0)-(c[F>>2]|0);c[H>>2]=c[(c[v>>2]|0)+8>>2];c[I>>2]=(c[D>>2]|0)==3?3:4;c[J>>2]=c[(c[u>>2]|0)+36>>2];c[K>>2]=Sj(c[w>>2]|0,c[H>>2]|0,c[D>>2]|0)|0;c[L>>2]=c[(c[J>>2]|0)+(c[K>>2]<<2)>>2];c[M>>2]=c[(c[u>>2]|0)+44>>2];c[N>>2]=(c[(c[v>>2]|0)+4>>2]|0)-1;c[O>>2]=(1<<c[N>>2])-1;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=c[(c[u>>2]|0)+8>>2];c[S>>2]=c[(c[u>>2]|0)+12>>2];c[T>>2]=(c[R>>2]|0)+(c[S>>2]|0);c[U>>2]=(c[F>>2]|0)+(c[S>>2]|0);if((c[O>>2]|0)>>>0>=(c[G>>2]|0)>>>0)vj=0;else vj=(c[G>>2]|0)-(c[O>>2]|0)|0;c[V>>2]=vj;c[W>>2]=c[(c[u>>2]|0)+16>>2];c[X>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2);c[Y>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2)+4;c[Z>>2]=(c[G>>2]|0)+8+1;c[$>>2]=0;c[aa>>2]=1<<c[(c[v>>2]|0)+12>>2];c[ba>>2]=(c[C>>2]|0)-1;c[ca>>2]=3+(c[A>>2]|0);c[da>>2]=c[A>>2];while(1){if((c[da>>2]|0)>>>0>=(c[ca>>2]|0)>>>0){dj=446;break;}Zh=c[z>>2]|0;if((c[da>>2]|0)==3)wj=(c[Zh>>2]|0)-1|0;else wj=c[Zh+(c[da>>2]<<2)>>2]|0;c[ea>>2]=wj;c[fa>>2]=(c[G>>2]|0)-(c[ea>>2]|0);c[ga>>2]=0;do{if(((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[S>>2]|0)|0)>>>0){Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm((c[w>>2]|0)+(0-(c[ea>>2]|0))|0,c[I>>2]|0)|0))break;Zh=Tj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[w>>2]|0)+(c[I>>2]|0)+(0-(c[ea>>2]|0))|0,c[x>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}else{c[ha>>2]=(c[R>>2]|0)+(c[fa>>2]|0);if(!(c[y>>2]|0))break;if(!((((c[S>>2]|0)-1-(c[fa>>2]|0)|0)>>>0>=3?((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[W>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm(c[ha>>2]|0,c[I>>2]|0)|0))break;Zh=Uj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[ha>>2]|0)+(c[I>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}}while(0);if((c[ga>>2]|0)>>>0>(c[ba>>2]|0)>>>0?(c[ba>>2]=c[ga>>2],c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[da>>2]|0)-(c[A>>2]|0),c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[ga>>2],c[$>>2]=(c[$>>2]|0)+1,((c[ga>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ga>>2]|0)|0)==(c[x>>2]|0))|0):0){dj=444;break;}c[da>>2]=(c[da>>2]|0)+1;}f:do{if((dj|0)==444){dj=0;c[t>>2]=c[$>>2];}else if((dj|0)==446){dj=0;do{if((c[D>>2]|0)==3){if((c[ba>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[ia>>2]=nm(c[u>>2]|0,c[w>>2]|0)|0;if(!(((c[ia>>2]|0)>>>0>(c[W>>2]|0)>>>0?((c[G>>2]|0)-(c[ia>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[y>>2]|0){if((c[ia>>2]|0)>>>0>=(c[S>>2]|0)>>>0){dj=451;break;}c[la>>2]=(c[R>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Uj(c[w>>2]|0,c[la>>2]|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;}else dj=451;}while(0);if((dj|0)==451){dj=0;c[ka>>2]=(c[F>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Tj(c[w>>2]|0,c[ka>>2]|0,c[x>>2]|0)|0;}if((c[ja>>2]|0)>>>0<(c[D>>2]|0)>>>0)break;c[ba>>2]=c[ja>>2];c[c[B>>2]>>2]=(c[G>>2]|0)-(c[ia>>2]|0)+2;c[(c[B>>2]|0)+4>>2]=c[ja>>2];c[$>>2]=1;if(!(((c[ja>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ja>>2]|0)|0)==(c[x>>2]|0))|0))break;c[(c[u>>2]|0)+24>>2]=(c[G>>2]|0)+1;c[t>>2]=1;break f;}}while(0);c[(c[J>>2]|0)+(c[K>>2]<<2)>>2]=c[G>>2];while(1){Zh=c[aa>>2]|0;c[aa>>2]=Zh+-1;if(!Zh)break;if((c[L>>2]|0)>>>0<=(c[W>>2]|0)>>>0)break;c[ma>>2]=(c[M>>2]|0)+((c[L>>2]&c[O>>2])<<1<<2);c[na>>2]=(c[P>>2]|0)>>>0<(c[Q>>2]|0)>>>0?c[P>>2]|0:c[Q>>2]|0;do{if(c[y>>2]|0){if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0>=(c[S>>2]|0)>>>0){dj=461;break;}c[oa>>2]=(c[R>>2]|0)+(c[L>>2]|0);Zh=Uj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0<(c[S>>2]|0)>>>0)break;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);}else dj=461;}while(0);if((dj|0)==461){dj=0;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);Zh=Tj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;}if((c[na>>2]|0)>>>0>(c[ba>>2]|0)>>>0){if((c[na>>2]|0)>>>0>((c[Z>>2]|0)-(c[L>>2]|0)|0)>>>0)c[Z>>2]=(c[L>>2]|0)+(c[na>>2]|0);c[ba>>2]=c[na>>2];c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[G>>2]|0)-(c[L>>2]|0)+2;c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[na>>2];c[$>>2]=(c[$>>2]|0)+1;if((c[na>>2]|0)>>>0>4096)break;if(((c[w>>2]|0)+(c[na>>2]|0)|0)==(c[x>>2]|0))break;}Zh=c[L>>2]|0;if((d[(c[oa>>2]|0)+(c[na>>2]|0)>>0]|0|0)<(d[(c[w>>2]|0)+(c[na>>2]|0)>>0]|0|0)){c[c[X>>2]>>2]=Zh;c[P>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=471;break;}c[X>>2]=(c[ma>>2]|0)+4;c[L>>2]=c[(c[ma>>2]|0)+4>>2];}else{c[c[Y>>2]>>2]=Zh;c[Q>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=474;break;}c[Y>>2]=c[ma>>2];c[L>>2]=c[c[ma>>2]>>2];}}if((dj|0)==471){dj=0;c[X>>2]=_;}else if((dj|0)==474){dj=0;c[Y>>2]=_;}c[c[Y>>2]>>2]=0;c[c[X>>2]>>2]=0;c[(c[u>>2]|0)+24>>2]=(c[Z>>2]|0)-8;c[t>>2]=c[$>>2];}}while(0);c[md>>2]=c[t>>2];break d;break;}case 5:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[qa>>2]=c[nd>>2];c[ra>>2]=Zh;c[sa>>2]=Zi;c[ta>>2]=Ph;c[ua>>2]=Qh;c[va>>2]=_h;c[wa>>2]=_i;c[xa>>2]=aj;c[ya>>2]=Uh;c[za>>2]=5;if((c[(c[ra>>2]|0)+20>>2]|0)>>>0<4095)xj=c[(c[ra>>2]|0)+20>>2]|0;else xj=4095;c[Aa>>2]=xj;c[Ba>>2]=c[(c[qa>>2]|0)+4>>2];c[Ca>>2]=(c[sa>>2]|0)-(c[Ba>>2]|0);c[Da>>2]=c[(c[ra>>2]|0)+8>>2];c[Ea>>2]=(c[za>>2]|0)==3?3:4;c[Fa>>2]=c[(c[qa>>2]|0)+36>>2];c[Ga>>2]=Sj(c[sa>>2]|0,c[Da>>2]|0,c[za>>2]|0)|0;c[Ha>>2]=c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2];c[Ia>>2]=c[(c[qa>>2]|0)+44>>2];c[Ja>>2]=(c[(c[ra>>2]|0)+4>>2]|0)-1;c[Ka>>2]=(1<<c[Ja>>2])-1;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=c[(c[qa>>2]|0)+8>>2];c[Oa>>2]=c[(c[qa>>2]|0)+12>>2];c[Pa>>2]=(c[Na>>2]|0)+(c[Oa>>2]|0);c[Qa>>2]=(c[Ba>>2]|0)+(c[Oa>>2]|0);if((c[Ka>>2]|0)>>>0>=(c[Ca>>2]|0)>>>0)yj=0;else yj=(c[Ca>>2]|0)-(c[Ka>>2]|0)|0;c[Ra>>2]=yj;c[Sa>>2]=c[(c[qa>>2]|0)+16>>2];c[Ta>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2);c[Ua>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2)+4;c[Va>>2]=(c[Ca>>2]|0)+8+1;c[Xa>>2]=0;c[Ya>>2]=1<<c[(c[ra>>2]|0)+12>>2];c[Za>>2]=(c[ya>>2]|0)-1;c[_a>>2]=3+(c[wa>>2]|0);c[$a>>2]=c[wa>>2];while(1){if((c[$a>>2]|0)>>>0>=(c[_a>>2]|0)>>>0){dj=393;break;}Uh=c[va>>2]|0;if((c[$a>>2]|0)==3)zj=(c[Uh>>2]|0)-1|0;else zj=c[Uh+(c[$a>>2]<<2)>>2]|0;c[ab>>2]=zj;c[bb>>2]=(c[Ca>>2]|0)-(c[ab>>2]|0);c[cb>>2]=0;do{if(((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Oa>>2]|0)|0)>>>0){Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm((c[sa>>2]|0)+(0-(c[ab>>2]|0))|0,c[Ea>>2]|0)|0))break;Uh=Tj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[sa>>2]|0)+(c[Ea>>2]|0)+(0-(c[ab>>2]|0))|0,c[ta>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}else{c[db>>2]=(c[Na>>2]|0)+(c[bb>>2]|0);if(!(c[ua>>2]|0))break;if(!((((c[Oa>>2]|0)-1-(c[bb>>2]|0)|0)>>>0>=3?((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Sa>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm(c[db>>2]|0,c[Ea>>2]|0)|0))break;Uh=Uj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[db>>2]|0)+(c[Ea>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}}while(0);if((c[cb>>2]|0)>>>0>(c[Za>>2]|0)>>>0?(c[Za>>2]=c[cb>>2],c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[$a>>2]|0)-(c[wa>>2]|0),c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[cb>>2],c[Xa>>2]=(c[Xa>>2]|0)+1,((c[cb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[cb>>2]|0)|0)==(c[ta>>2]|0))|0):0){dj=391;break;}c[$a>>2]=(c[$a>>2]|0)+1;}g:do{if((dj|0)==391){dj=0;c[pa>>2]=c[Xa>>2];}else if((dj|0)==393){dj=0;do{if((c[za>>2]|0)==3){if((c[Za>>2]|0)>>>0>=(c[za>>2]|0)>>>0)break;c[eb>>2]=nm(c[qa>>2]|0,c[sa>>2]|0)|0;if(!(((c[eb>>2]|0)>>>0>(c[Sa>>2]|0)>>>0?((c[Ca>>2]|0)-(c[eb>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[ua>>2]|0){if((c[eb>>2]|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=398;break;}c[hb>>2]=(c[Na>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Uj(c[sa>>2]|0,c[hb>>2]|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;}else dj=398;}while(0);if((dj|0)==398){dj=0;c[gb>>2]=(c[Ba>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Tj(c[sa>>2]|0,c[gb>>2]|0,c[ta>>2]|0)|0;}if((c[fb>>2]|0)>>>0<(c[za>>2]|0)>>>0)break;c[Za>>2]=c[fb>>2];c[c[xa>>2]>>2]=(c[Ca>>2]|0)-(c[eb>>2]|0)+2;c[(c[xa>>2]|0)+4>>2]=c[fb>>2];c[Xa>>2]=1;if(!(((c[fb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[fb>>2]|0)|0)==(c[ta>>2]|0))|0))break;c[(c[qa>>2]|0)+24>>2]=(c[Ca>>2]|0)+1;c[pa>>2]=1;break g;}}while(0);c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2]=c[Ca>>2];while(1){Uh=c[Ya>>2]|0;c[Ya>>2]=Uh+-1;if(!Uh)break;if((c[Ha>>2]|0)>>>0<=(c[Sa>>2]|0)>>>0)break;c[ib>>2]=(c[Ia>>2]|0)+((c[Ha>>2]&c[Ka>>2])<<1<<2);c[jb>>2]=(c[La>>2]|0)>>>0<(c[Ma>>2]|0)>>>0?c[La>>2]|0:c[Ma>>2]|0;do{if(c[ua>>2]|0){if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=408;break;}c[kb>>2]=(c[Na>>2]|0)+(c[Ha>>2]|0);Uh=Uj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0<(c[Oa>>2]|0)>>>0)break;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);}else dj=408;}while(0);if((dj|0)==408){dj=0;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);Uh=Tj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;}if((c[jb>>2]|0)>>>0>(c[Za>>2]|0)>>>0){if((c[jb>>2]|0)>>>0>((c[Va>>2]|0)-(c[Ha>>2]|0)|0)>>>0)c[Va>>2]=(c[Ha>>2]|0)+(c[jb>>2]|0);c[Za>>2]=c[jb>>2];c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[Ca>>2]|0)-(c[Ha>>2]|0)+2;c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[jb>>2];c[Xa>>2]=(c[Xa>>2]|0)+1;if((c[jb>>2]|0)>>>0>4096)break;if(((c[sa>>2]|0)+(c[jb>>2]|0)|0)==(c[ta>>2]|0))break;}Uh=c[Ha>>2]|0;if((d[(c[kb>>2]|0)+(c[jb>>2]|0)>>0]|0|0)<(d[(c[sa>>2]|0)+(c[jb>>2]|0)>>0]|0|0)){c[c[Ta>>2]>>2]=Uh;c[La>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=418;break;}c[Ta>>2]=(c[ib>>2]|0)+4;c[Ha>>2]=c[(c[ib>>2]|0)+4>>2];}else{c[c[Ua>>2]>>2]=Uh;c[Ma>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=421;break;}c[Ua>>2]=c[ib>>2];c[Ha>>2]=c[c[ib>>2]>>2];}}if((dj|0)==418){dj=0;c[Ta>>2]=Wa;}else if((dj|0)==421){dj=0;c[Ua>>2]=Wa;}c[c[Ua>>2]>>2]=0;c[c[Ta>>2]>>2]=0;c[(c[qa>>2]|0)+24>>2]=(c[Va>>2]|0)-8;c[pa>>2]=c[Xa>>2];}}while(0);c[md>>2]=c[pa>>2];break d;break;}default:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[mb>>2]=c[nd>>2];c[nb>>2]=Uh;c[ob>>2]=aj;c[pb>>2]=_i;c[qb>>2]=_h;c[rb>>2]=Qh;c[sb>>2]=Ph;c[tb>>2]=Zi;c[ub>>2]=Zh;c[vb>>2]=4;if((c[(c[nb>>2]|0)+20>>2]|0)>>>0<4095)Aj=c[(c[nb>>2]|0)+20>>2]|0;else Aj=4095;c[wb>>2]=Aj;c[xb>>2]=c[(c[mb>>2]|0)+4>>2];c[yb>>2]=(c[ob>>2]|0)-(c[xb>>2]|0);c[zb>>2]=c[(c[nb>>2]|0)+8>>2];c[Ab>>2]=(c[vb>>2]|0)==3?3:4;c[Bb>>2]=c[(c[mb>>2]|0)+36>>2];c[Cb>>2]=Sj(c[ob>>2]|0,c[zb>>2]|0,c[vb>>2]|0)|0;c[Db>>2]=c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2];c[Eb>>2]=c[(c[mb>>2]|0)+44>>2];c[Fb>>2]=(c[(c[nb>>2]|0)+4>>2]|0)-1;c[Gb>>2]=(1<<c[Fb>>2])-1;c[Hb>>2]=0;c[Ib>>2]=0;c[Jb>>2]=c[(c[mb>>2]|0)+8>>2];c[Kb>>2]=c[(c[mb>>2]|0)+12>>2];c[Lb>>2]=(c[Jb>>2]|0)+(c[Kb>>2]|0);c[Mb>>2]=(c[xb>>2]|0)+(c[Kb>>2]|0);if((c[Gb>>2]|0)>>>0>=(c[yb>>2]|0)>>>0)Bj=0;else Bj=(c[yb>>2]|0)-(c[Gb>>2]|0)|0;c[Nb>>2]=Bj;c[Ob>>2]=c[(c[mb>>2]|0)+16>>2];c[Pb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2);c[Qb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2)+4;c[Rb>>2]=(c[yb>>2]|0)+8+1;c[Tb>>2]=0;c[Ub>>2]=1<<c[(c[nb>>2]|0)+12>>2];c[Vb>>2]=(c[ub>>2]|0)-1;c[Wb>>2]=3+(c[sb>>2]|0);c[Xb>>2]=c[sb>>2];while(1){if((c[Xb>>2]|0)>>>0>=(c[Wb>>2]|0)>>>0){dj=340;break;}Zh=c[rb>>2]|0;if((c[Xb>>2]|0)==3)Cj=(c[Zh>>2]|0)-1|0;else Cj=c[Zh+(c[Xb>>2]<<2)>>2]|0;c[Yb>>2]=Cj;c[Zb>>2]=(c[yb>>2]|0)-(c[Yb>>2]|0);c[_b>>2]=0;do{if(((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Kb>>2]|0)|0)>>>0){Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm((c[ob>>2]|0)+(0-(c[Yb>>2]|0))|0,c[Ab>>2]|0)|0))break;Zh=Tj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[ob>>2]|0)+(c[Ab>>2]|0)+(0-(c[Yb>>2]|0))|0,c[pb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}else{c[$b>>2]=(c[Jb>>2]|0)+(c[Zb>>2]|0);if(!(c[qb>>2]|0))break;if(!((((c[Kb>>2]|0)-1-(c[Zb>>2]|0)|0)>>>0>=3?((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Ob>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm(c[$b>>2]|0,c[Ab>>2]|0)|0))break;Zh=Uj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[$b>>2]|0)+(c[Ab>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}}while(0);if((c[_b>>2]|0)>>>0>(c[Vb>>2]|0)>>>0?(c[Vb>>2]=c[_b>>2],c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[Xb>>2]|0)-(c[sb>>2]|0),c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[_b>>2],c[Tb>>2]=(c[Tb>>2]|0)+1,((c[_b>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[_b>>2]|0)|0)==(c[pb>>2]|0))|0):0){dj=338;break;}c[Xb>>2]=(c[Xb>>2]|0)+1;}h:do{if((dj|0)==338){dj=0;c[lb>>2]=c[Tb>>2];}else if((dj|0)==340){dj=0;do{if((c[vb>>2]|0)==3){if((c[Vb>>2]|0)>>>0>=(c[vb>>2]|0)>>>0)break;c[ac>>2]=nm(c[mb>>2]|0,c[ob>>2]|0)|0;if(!(((c[ac>>2]|0)>>>0>(c[Ob>>2]|0)>>>0?((c[yb>>2]|0)-(c[ac>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[qb>>2]|0){if((c[ac>>2]|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=345;break;}c[dc>>2]=(c[Jb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Uj(c[ob>>2]|0,c[dc>>2]|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;}else dj=345;}while(0);if((dj|0)==345){dj=0;c[cc>>2]=(c[xb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Tj(c[ob>>2]|0,c[cc>>2]|0,c[pb>>2]|0)|0;}if((c[bc>>2]|0)>>>0<(c[vb>>2]|0)>>>0)break;c[Vb>>2]=c[bc>>2];c[c[tb>>2]>>2]=(c[yb>>2]|0)-(c[ac>>2]|0)+2;c[(c[tb>>2]|0)+4>>2]=c[bc>>2];c[Tb>>2]=1;if(!(((c[bc>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[bc>>2]|0)|0)==(c[pb>>2]|0))|0))break;c[(c[mb>>2]|0)+24>>2]=(c[yb>>2]|0)+1;c[lb>>2]=1;break h;}}while(0);c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2]=c[yb>>2];while(1){Zh=c[Ub>>2]|0;c[Ub>>2]=Zh+-1;if(!Zh)break;if((c[Db>>2]|0)>>>0<=(c[Ob>>2]|0)>>>0)break;c[ec>>2]=(c[Eb>>2]|0)+((c[Db>>2]&c[Gb>>2])<<1<<2);c[fc>>2]=(c[Hb>>2]|0)>>>0<(c[Ib>>2]|0)>>>0?c[Hb>>2]|0:c[Ib>>2]|0;do{if(c[qb>>2]|0){if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=355;break;}c[gc>>2]=(c[Jb>>2]|0)+(c[Db>>2]|0);Zh=Uj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0<(c[Kb>>2]|0)>>>0)break;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);}else dj=355;}while(0);if((dj|0)==355){dj=0;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);Zh=Tj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;}if((c[fc>>2]|0)>>>0>(c[Vb>>2]|0)>>>0){if((c[fc>>2]|0)>>>0>((c[Rb>>2]|0)-(c[Db>>2]|0)|0)>>>0)c[Rb>>2]=(c[Db>>2]|0)+(c[fc>>2]|0);c[Vb>>2]=c[fc>>2];c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[yb>>2]|0)-(c[Db>>2]|0)+2;c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[fc>>2];c[Tb>>2]=(c[Tb>>2]|0)+1;if((c[fc>>2]|0)>>>0>4096)break;if(((c[ob>>2]|0)+(c[fc>>2]|0)|0)==(c[pb>>2]|0))break;}Zh=c[Db>>2]|0;if((d[(c[gc>>2]|0)+(c[fc>>2]|0)>>0]|0|0)<(d[(c[ob>>2]|0)+(c[fc>>2]|0)>>0]|0|0)){c[c[Pb>>2]>>2]=Zh;c[Hb>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=365;break;}c[Pb>>2]=(c[ec>>2]|0)+4;c[Db>>2]=c[(c[ec>>2]|0)+4>>2];}else{c[c[Qb>>2]>>2]=Zh;c[Ib>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=368;break;}c[Qb>>2]=c[ec>>2];c[Db>>2]=c[c[ec>>2]>>2];}}if((dj|0)==365){dj=0;c[Pb>>2]=Sb;}else if((dj|0)==368){dj=0;c[Qb>>2]=Sb;}c[c[Qb>>2]>>2]=0;c[c[Pb>>2]>>2]=0;c[(c[mb>>2]|0)+24>>2]=(c[Rb>>2]|0)-8;c[lb>>2]=c[Tb>>2];}}while(0);c[md>>2]=c[lb>>2];break d;}}}}while(0);c[Bi>>2]=c[md>>2];if(c[Bi>>2]|0){c[Di>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)+4>>2];if(((c[Di>>2]|0)>>>0>(c[$h>>2]|0)>>>0?1:((c[ei>>2]|0)+(c[Di>>2]|0)|0)>>>0>=4096)|0){dj=481;break b;}c[Ci>>2]=0;while(1){if((c[Ci>>2]|0)>>>0>=(c[Bi>>2]|0)>>>0)break c;c[Ei>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)>>2];pm(Fi,(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0,c[Ei>>2]|0,c[xi>>2]|0);c[Gi>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)+4>>2];if((c[Ci>>2]|0)>>>0>0)Dj=(c[(c[ci>>2]|0)+((c[Ci>>2]|0)-1<<3)+4>>2]|0)+1|0;else Dj=c[ai>>2]|0;c[Hi>>2]=Dj;c[Ii>>2]=c[Gi>>2];i:while(1){if((c[Ii>>2]|0)>>>0<(c[Hi>>2]|0)>>>0)break;c[Ji>>2]=(c[ei>>2]|0)+(c[Ii>>2]|0);Zh=c[Ai>>2]|0;Zi=c[Ii>>2]|0;Ph=c[Th>>2]|0;Qh=c[Rh>>2]|0;c[k>>2]=c[Ei>>2];c[m>>2]=Zi;c[n>>2]=Ph;c[o>>2]=Qh;c[q>>2]=qm((c[k>>2]|0)+1|0)|0;c[r>>2]=(c[m>>2]|0)-3;if(c[(c[n>>2]|0)+56>>2]|0){Qh=(qm((c[r>>2]|0)+1|0)|0)+16|0;c[j>>2]=Qh+(c[q>>2]|0);}else{Qh=(c[q>>2]|0)+(c[(c[n>>2]|0)+52>>2]|0)|0;c[p>>2]=Qh-(qm((c[(c[(c[n>>2]|0)+12>>2]|0)+(c[q>>2]<<2)>>2]|0)+1|0)|0);if((c[o>>2]|0)<2&(c[q>>2]|0)>>>0>=20)c[p>>2]=(c[p>>2]|0)+((c[q>>2]|0)-19<<1);c[s>>2]=rm(c[r>>2]|0)|0;Qh=(c[5840+(c[s>>2]<<2)>>2]|0)+(c[(c[n>>2]|0)+48>>2]|0)|0;Ph=Qh-(qm((c[(c[(c[n>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0)+1|0)|0)|0;c[p>>2]=(c[p>>2]|0)+Ph;c[j>>2]=c[p>>2];}c[Ki>>2]=Zh+(c[j>>2]|0);do{if((c[Ji>>2]|0)>>>0<=(c[fi>>2]|0)>>>0){if((c[Ki>>2]|0)<(c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]|0)){dj=496;break;}if(!(c[Rh>>2]|0))break i;}else dj=496;}while(0);if((dj|0)==496){dj=0;while(1){if((c[fi>>2]|0)>>>0>=(c[Ji>>2]|0)>>>0)break;c[(c[bi>>2]|0)+(((c[fi>>2]|0)+1|0)*28|0)>>2]=1073741824;c[fi>>2]=(c[fi>>2]|0)+1;}c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+8>>2]=c[Ii>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+4>>2]=c[Ei>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+12>>2]=c[yi>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]=c[Ki>>2];Zh=(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+16|0;c[Zh>>2]=c[Fi>>2];c[Zh+4>>2]=c[Fi+4>>2];c[Zh+8>>2]=c[Fi+8>>2];}c[Ii>>2]=(c[Ii>>2]|0)+-1;}c[Ci>>2]=(c[Ci>>2]|0)+1;}}}}while(0);c[ei>>2]=(c[ei>>2]|0)+1;}if((dj|0)==481){dj=0;c[gi>>2]=c[Di>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)>>2];c[fi>>2]=(c[ei>>2]|0)+1;break;}else if((dj|0)==504){dj=0;c[gi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+8>>2];c[hi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+4>>2];c[ei>>2]=(c[fi>>2]|0)-(c[gi>>2]|0);break;}}else{c[gi>>2]=c[mi>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)>>2];c[ei>>2]=0;c[fi>>2]=1;}}while(0);c[Li>>2]=c[gi>>2];c[Mi>>2]=c[hi>>2];c[Ni>>2]=c[ei>>2];while(1){c[Oi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2];c[Pi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2]=c[Li>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2]=c[Mi>>2];c[Li>>2]=c[Oi>>2];c[Mi>>2]=c[Pi>>2];if((c[Oi>>2]|0)>>>0>(c[Ni>>2]|0)>>>0)break;c[Ni>>2]=(c[Ni>>2]|0)-(c[Oi>>2]|0);}c[Qi>>2]=0;while(1){if((c[Qi>>2]|0)>>>0>=(c[fi>>2]|0)>>>0)break;c[Ri>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[Si>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+8>>2];c[Ti>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+4>>2];if((c[Si>>2]|0)==1){c[Vh>>2]=(c[Vh>>2]|0)+1;c[Qi>>2]=(c[Qi>>2]|0)+1;continue;}c[Qi>>2]=(c[Qi>>2]|0)+(c[Si>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+(c[Si>>2]|0);if((c[Ti>>2]|0)>>>0<3){c[Ui>>2]=(c[Ti>>2]|0)+((c[Ri>>2]|0)==0&1);if(c[Ui>>2]|0){Zh=c[Nh>>2]|0;if((c[Ui>>2]|0)==3)Ej=(c[Zh>>2]|0)-1|0;else Ej=c[Zh+(c[Ui>>2]<<2)>>2]|0;c[Vi>>2]=Ej;if((c[Ui>>2]|0)>>>0>=2)c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=c[Vi>>2];}}else{c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=(c[Ti>>2]|0)-2;}vm(c[Th>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,c[Si>>2]|0);wm(c[Mh>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,(c[Si>>2]|0)-3|0);c[Wh>>2]=c[Vh>>2];}xm(c[Th>>2]|0);}l=i;return(c[Xh>>2]|0)-(c[Wh>>2]|0)|0;}function km(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0;i=l;l=l+2144|0;j=i+2136|0;k=i+2132|0;m=i+2128|0;n=i+2124|0;o=i+2120|0;p=i+2116|0;q=i+2112|0;r=i+2108|0;s=i+2104|0;t=i+2100|0;u=i+2096|0;v=i+2092|0;w=i+2088|0;x=i+2084|0;y=i+2080|0;z=i+2076|0;A=i+2072|0;B=i+2068|0;C=i+2064|0;D=i+2060|0;E=i+2056|0;F=i+2052|0;G=i+2048|0;H=i+2044|0;I=i+2040|0;J=i+2036|0;K=i+2032|0;L=i+2028|0;M=i+2024|0;N=i+2020|0;O=i+2016|0;P=i+2012|0;Q=i+2008|0;R=i+2004|0;S=i+2e3|0;T=i+1996|0;U=i+1992|0;V=i+1988|0;W=i+1984|0;X=i+1980|0;Y=i+1976|0;Z=i+1972|0;_=i+1968|0;$=i+1964|0;aa=i+1960|0;ba=i+1956|0;ca=i+1952|0;da=i+1948|0;ea=i+1944|0;fa=i+1940|0;ga=i+1936|0;ha=i+1932|0;ia=i+1928|0;ja=i+1924|0;ka=i+1920|0;la=i+1916|0;ma=i+1912|0;na=i+1908|0;oa=i+1904|0;pa=i+1900|0;qa=i+1896|0;ra=i+1892|0;sa=i+1888|0;ta=i+1884|0;ua=i+1880|0;va=i+1876|0;wa=i+1872|0;xa=i+1868|0;ya=i+1864|0;za=i+1860|0;Aa=i+1856|0;Ba=i+1852|0;Ca=i+1848|0;Da=i+1844|0;Ea=i+1840|0;Fa=i+1836|0;Ga=i+1832|0;Ha=i+1828|0;Ia=i+1824|0;Ja=i+1820|0;Ka=i+1816|0;La=i+1812|0;Ma=i+1808|0;Na=i+1804|0;Oa=i+1800|0;Pa=i+1796|0;Qa=i+1792|0;Ra=i+1788|0;Sa=i+1784|0;Ta=i+1780|0;Ua=i+1776|0;Va=i+1772|0;Wa=i+1768|0;Xa=i+1764|0;Ya=i+1760|0;Za=i+1756|0;_a=i+1752|0;$a=i+1748|0;ab=i+1744|0;bb=i+1740|0;cb=i+1736|0;db=i+1732|0;eb=i+1728|0;fb=i+1724|0;gb=i+1720|0;hb=i+1716|0;ib=i+1712|0;jb=i+1708|0;kb=i+1704|0;lb=i+1700|0;mb=i+1696|0;nb=i+1692|0;ob=i+1688|0;pb=i+1684|0;qb=i+1680|0;rb=i+1676|0;sb=i+1672|0;tb=i+1668|0;ub=i+1664|0;vb=i+1660|0;wb=i+1656|0;xb=i+1652|0;yb=i+1648|0;zb=i+1644|0;Ab=i+1640|0;Bb=i+1636|0;Cb=i+1632|0;Db=i+1628|0;Eb=i+1624|0;Fb=i+1620|0;Gb=i+1616|0;Hb=i+1612|0;Ib=i+1608|0;Jb=i+1604|0;Kb=i+1600|0;Lb=i+1596|0;Mb=i+1592|0;Nb=i+1588|0;Ob=i+1584|0;Pb=i+1580|0;Qb=i+1576|0;Rb=i+1572|0;Sb=i+1568|0;Tb=i+1564|0;Ub=i+1560|0;Vb=i+1556|0;Wb=i+1552|0;Xb=i+1548|0;Yb=i+1544|0;Zb=i+1540|0;_b=i+1536|0;$b=i+1532|0;ac=i+1528|0;bc=i+1524|0;cc=i+1520|0;dc=i+1516|0;ec=i+1512|0;fc=i+1508|0;gc=i+1504|0;hc=i+1500|0;ic=i+1496|0;jc=i+1492|0;kc=i+1488|0;lc=i+1484|0;mc=i+1480|0;nc=i+1476|0;oc=i+1472|0;pc=i+1468|0;qc=i+1464|0;rc=i+1460|0;sc=i+1456|0;tc=i+1452|0;uc=i+1448|0;vc=i+1444|0;wc=i+1440|0;xc=i+1436|0;yc=i+1432|0;zc=i+1428|0;Ac=i+1424|0;Bc=i+1420|0;Cc=i+1416|0;Dc=i+1412|0;Ec=i+1408|0;Fc=i+1404|0;Gc=i+1400|0;Hc=i+1396|0;Ic=i+1392|0;Jc=i+1388|0;Kc=i+1384|0;Lc=i+1380|0;Mc=i+1376|0;Nc=i+1372|0;Oc=i+1368|0;Pc=i+1364|0;Qc=i+1360|0;Rc=i+1356|0;Sc=i+1352|0;Tc=i+1348|0;Uc=i+1344|0;Vc=i+1340|0;Wc=i+1336|0;Xc=i+1332|0;Yc=i+1328|0;Zc=i+1324|0;_c=i+1320|0;$c=i+1316|0;ad=i+1312|0;bd=i+1308|0;cd=i+1304|0;dd=i+1300|0;ed=i+1296|0;fd=i+1292|0;gd=i+1288|0;hd=i+1284|0;id=i+1280|0;jd=i+1276|0;kd=i+1272|0;ld=i+1268|0;md=i+1264|0;nd=i+1260|0;od=i+1256|0;pd=i+1252|0;qd=i+1248|0;rd=i+1244|0;sd=i+1240|0;td=i+1236|0;ud=i+1232|0;vd=i+1228|0;wd=i+1224|0;xd=i+1220|0;yd=i+1216|0;zd=i+1212|0;Ad=i+1208|0;Bd=i+1204|0;Cd=i+1200|0;Dd=i+1196|0;Ed=i+1192|0;Fd=i+1188|0;Gd=i+1184|0;Hd=i+1180|0;Id=i+1176|0;Jd=i+1172|0;Kd=i+1168|0;Ld=i+1164|0;Md=i+1160|0;Nd=i+1156|0;Od=i+1152|0;Pd=i+1148|0;Qd=i+1144|0;Rd=i+1140|0;Sd=i+1136|0;Td=i+1132|0;Ud=i+1128|0;Vd=i+1124|0;Wd=i+1120|0;Xd=i+1116|0;Yd=i+1112|0;Zd=i+1108|0;_d=i+1104|0;$d=i+1100|0;ae=i+1096|0;be=i+1092|0;ce=i+1088|0;de=i+1084|0;ee=i+1080|0;fe=i+1076|0;ge=i+1072|0;he=i+1068|0;ie=i+1064|0;je=i+1060|0;ke=i+1056|0;le=i+1052|0;me=i+1048|0;ne=i+1044|0;oe=i+1040|0;pe=i+1036|0;qe=i+1032|0;re=i+1028|0;se=i+1024|0;te=i+1020|0;ue=i+1016|0;ve=i+1012|0;we=i+1008|0;xe=i+1004|0;ye=i+1e3|0;ze=i+996|0;Ae=i+992|0;Be=i+988|0;Ce=i+984|0;De=i+980|0;Ee=i+976|0;Fe=i+972|0;Ge=i+968|0;He=i+964|0;Ie=i+960|0;Je=i+956|0;Ke=i+952|0;Le=i+948|0;Me=i+944|0;Ne=i+940|0;Oe=i+936|0;Pe=i+932|0;Qe=i+928|0;Re=i+924|0;Se=i+920|0;Te=i+916|0;Ue=i+912|0;Ve=i+908|0;We=i+904|0;Xe=i+900|0;Ye=i+896|0;Ze=i+892|0;_e=i+888|0;$e=i+884|0;af=i+880|0;bf=i+876|0;cf=i+872|0;df=i+868|0;ef=i+864|0;ff=i+860|0;gf=i+856|0;hf=i+852|0;jf=i+848|0;kf=i+844|0;lf=i+840|0;mf=i+836|0;nf=i+832|0;of=i+828|0;pf=i+824|0;qf=i+820|0;rf=i+816|0;sf=i+812|0;tf=i+808|0;uf=i+804|0;vf=i+800|0;wf=i+796|0;xf=i+792|0;yf=i+788|0;zf=i+784|0;Af=i+780|0;Bf=i+776|0;Cf=i+772|0;Df=i+768|0;Ef=i+764|0;Ff=i+760|0;Gf=i+756|0;Hf=i+752|0;If=i+748|0;Jf=i+744|0;Kf=i+740|0;Lf=i+736|0;Mf=i+732|0;Nf=i+728|0;Of=i+724|0;Pf=i+720|0;Qf=i+716|0;Rf=i+712|0;Sf=i+708|0;Tf=i+704|0;Uf=i+700|0;Vf=i+696|0;Wf=i+692|0;Xf=i+688|0;Yf=i+684|0;Zf=i+680|0;_f=i+676|0;$f=i+672|0;ag=i+668|0;bg=i+664|0;cg=i+660|0;dg=i+656|0;eg=i+652|0;fg=i+648|0;gg=i+644|0;hg=i+640|0;ig=i+636|0;jg=i+632|0;kg=i+628|0;lg=i+624|0;mg=i+620|0;ng=i+616|0;og=i+612|0;pg=i+608|0;qg=i+604|0;rg=i+600|0;sg=i+596|0;tg=i+592|0;ug=i+588|0;vg=i+584|0;wg=i+580|0;xg=i+576|0;yg=i+572|0;zg=i+568|0;Ag=i+564|0;Bg=i+560|0;Cg=i+556|0;Dg=i+552|0;Eg=i+548|0;Fg=i+544|0;Gg=i+540|0;Hg=i+536|0;Ig=i+532|0;Jg=i+528|0;Kg=i+524|0;Lg=i+520|0;Mg=i+516|0;Ng=i+512|0;Og=i+508|0;Pg=i+504|0;Qg=i+500|0;Rg=i+496|0;Sg=i+492|0;Tg=i+488|0;Ug=i+484|0;Vg=i+480|0;Wg=i+476|0;Xg=i+472|0;Yg=i+468|0;Zg=i+464|0;_g=i+460|0;$g=i+456|0;ah=i+452|0;bh=i+448|0;ch=i+444|0;dh=i+440|0;eh=i+436|0;fh=i+432|0;gh=i+428|0;hh=i+424|0;ih=i+420|0;jh=i+416|0;kh=i+412|0;lh=i+408|0;mh=i+404|0;nh=i+400|0;oh=i+396|0;ph=i+392|0;qh=i+388|0;rh=i+384|0;sh=i+380|0;th=i+376|0;uh=i+372|0;vh=i+368|0;wh=i+364|0;xh=i+360|0;yh=i+356|0;zh=i+352|0;Ah=i+348|0;Bh=i+344|0;Ch=i+340|0;Dh=i+336|0;Eh=i+332|0;Fh=i+328|0;Gh=i+324|0;Hh=i+320|0;Ih=i+316|0;Jh=i+312|0;Kh=i+308|0;Lh=i+304|0;Mh=i+300|0;Nh=i+296|0;Oh=i+292|0;Ph=i+288|0;Qh=i+284|0;Rh=i+280|0;Sh=i+276|0;Th=i+272|0;Uh=i+268|0;Vh=i+264|0;Wh=i+260|0;Xh=i+256|0;Yh=i+252|0;Zh=i+248|0;_h=i+244|0;$h=i+240|0;ai=i+236|0;bi=i+232|0;ci=i+228|0;di=i+216|0;ei=i+212|0;fi=i+208|0;gi=i+204|0;hi=i+200|0;ii=i+196|0;ji=i+192|0;ki=i+188|0;li=i+184|0;mi=i+180|0;ni=i+176|0;oi=i+172|0;pi=i+168|0;qi=i+164|0;ri=i+160|0;si=i+148|0;ti=i+144|0;ui=i+140|0;vi=i+136|0;wi=i+132|0;xi=i+128|0;yi=i+124|0;zi=i+120|0;Ai=i+116|0;Bi=i+112|0;Ci=i+108|0;Di=i+104|0;Ei=i+100|0;Fi=i+88|0;Gi=i+84|0;Hi=i+80|0;Ii=i+76|0;Ji=i+72|0;Ki=i+68|0;Li=i+64|0;Mi=i+60|0;Ni=i+56|0;Oi=i+52|0;Pi=i+48|0;Qi=i+44|0;Ri=i+40|0;Si=i+36|0;Ti=i+32|0;Ui=i+28|0;Vi=i+24|0;Wi=i+20|0;Xi=i+16|0;Yi=i+12|0;Zi=i+8|0;_i=i+4|0;$i=i;c[Wi>>2]=a;c[Xi>>2]=b;c[Yi>>2]=e;c[Zi>>2]=f;c[_i>>2]=g;c[$i>>2]=h;h=c[Xi>>2]|0;Xi=c[Yi>>2]|0;Yi=c[Zi>>2]|0;Zi=c[_i>>2]|0;_i=c[$i>>2]|0;c[Lh>>2]=c[Wi>>2];c[Mh>>2]=h;c[Nh>>2]=Xi;c[Oh>>2]=Yi;c[Ph>>2]=Zi;c[Qh>>2]=_i;c[Rh>>2]=2;c[Sh>>2]=1;c[Th>>2]=(c[Lh>>2]|0)+48;c[Uh>>2]=c[Ph>>2];c[Vh>>2]=c[Uh>>2];c[Wh>>2]=c[Uh>>2];c[Xh>>2]=(c[Uh>>2]|0)+(c[Qh>>2]|0);c[Yh>>2]=(c[Xh>>2]|0)+-8;c[Zh>>2]=c[(c[Lh>>2]|0)+4>>2];c[_h>>2]=(c[Zh>>2]|0)+(c[(c[Lh>>2]|0)+12>>2]|0);if((c[(c[Oh>>2]|0)+20>>2]|0)>>>0<4095)aj=c[(c[Oh>>2]|0)+20>>2]|0;else aj=4095;c[$h>>2]=aj;c[ai>>2]=(c[(c[Oh>>2]|0)+16>>2]|0)==3?3:4;c[bi>>2]=c[(c[Th>>2]|0)+20>>2];c[ci>>2]=c[(c[Th>>2]|0)+16>>2];c[(c[Lh>>2]|0)+28>>2]=c[(c[Lh>>2]|0)+24>>2];lm(c[Th>>2]|0,c[Ph>>2]|0,c[Qh>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+((c[Vh>>2]|0)==(c[_h>>2]|0)&1);c[di>>2]=0;c[di+4>>2]=0;c[di+8>>2]=0;while(1){if((c[Vh>>2]|0)>>>0>=(c[Yh>>2]|0)>>>0)break;c[fi>>2]=0;c[ii>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[ji>>2]=((c[ii>>2]|0)!=0^1)&1;_h=c[Oh>>2]|0;Qh=c[Vh>>2]|0;Ph=c[Xh>>2]|0;aj=c[Sh>>2]|0;Zh=c[Nh>>2]|0;Uh=c[ji>>2]|0;_i=c[ci>>2]|0;Zi=c[ai>>2]|0;c[Bh>>2]=c[Lh>>2];c[Ch>>2]=_h;c[Dh>>2]=Qh;c[Eh>>2]=Ph;c[Fh>>2]=aj;c[Gh>>2]=Zh;c[Hh>>2]=Uh;c[Ih>>2]=_i;c[Jh>>2]=Zi;c[Kh>>2]=c[(c[Ch>>2]|0)+16>>2];a:do{if((c[Dh>>2]|0)>>>0<((c[(c[Bh>>2]|0)+4>>2]|0)+(c[(c[Bh>>2]|0)+24>>2]|0)|0)>>>0)c[Ah>>2]=0;else{Zi=c[Ch>>2]|0;_i=c[Dh>>2]|0;Uh=c[Eh>>2]|0;Zh=c[Kh>>2]|0;aj=c[Fh>>2]|0;c[rh>>2]=c[Bh>>2];c[sh>>2]=Zi;c[th>>2]=_i;c[uh>>2]=Uh;c[vh>>2]=Zh;c[wh>>2]=aj;c[xh>>2]=c[(c[rh>>2]|0)+4>>2];c[yh>>2]=(c[th>>2]|0)-(c[xh>>2]|0);c[zh>>2]=c[(c[rh>>2]|0)+24>>2];while(1){if((c[zh>>2]|0)>>>0>=(c[yh>>2]|0)>>>0)break;aj=Rj(c[rh>>2]|0,c[sh>>2]|0,(c[xh>>2]|0)+(c[zh>>2]|0)|0,c[uh>>2]|0,c[vh>>2]|0,c[wh>>2]|0)|0;c[zh>>2]=(c[zh>>2]|0)+aj;}c[(c[rh>>2]|0)+24>>2]=c[yh>>2];switch(c[Kh>>2]|0){case 3:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[wg>>2]=c[Bh>>2];c[xg>>2]=aj;c[yg>>2]=Zh;c[zg>>2]=Uh;c[Ag>>2]=_i;c[Bg>>2]=Zi;c[Cg>>2]=Ph;c[Dg>>2]=Qh;c[Eg>>2]=_h;c[Fg>>2]=3;if((c[(c[xg>>2]|0)+20>>2]|0)>>>0<4095)bj=c[(c[xg>>2]|0)+20>>2]|0;else bj=4095;c[Gg>>2]=bj;c[Hg>>2]=c[(c[wg>>2]|0)+4>>2];c[Ig>>2]=(c[yg>>2]|0)-(c[Hg>>2]|0);c[Jg>>2]=c[(c[xg>>2]|0)+8>>2];c[Kg>>2]=(c[Fg>>2]|0)==3?3:4;c[Lg>>2]=c[(c[wg>>2]|0)+36>>2];c[Mg>>2]=Sj(c[yg>>2]|0,c[Jg>>2]|0,c[Fg>>2]|0)|0;c[Ng>>2]=c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2];c[Og>>2]=c[(c[wg>>2]|0)+44>>2];c[Pg>>2]=(c[(c[xg>>2]|0)+4>>2]|0)-1;c[Qg>>2]=(1<<c[Pg>>2])-1;c[Rg>>2]=0;c[Sg>>2]=0;c[Tg>>2]=c[(c[wg>>2]|0)+8>>2];c[Ug>>2]=c[(c[wg>>2]|0)+12>>2];c[Vg>>2]=(c[Tg>>2]|0)+(c[Ug>>2]|0);c[Wg>>2]=(c[Hg>>2]|0)+(c[Ug>>2]|0);if((c[Qg>>2]|0)>>>0>=(c[Ig>>2]|0)>>>0)cj=0;else cj=(c[Ig>>2]|0)-(c[Qg>>2]|0)|0;c[Xg>>2]=cj;c[Yg>>2]=c[(c[wg>>2]|0)+16>>2];c[Zg>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2);c[_g>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2)+4;c[$g>>2]=(c[Ig>>2]|0)+8+1;c[bh>>2]=0;c[ch>>2]=1<<c[(c[xg>>2]|0)+12>>2];c[dh>>2]=(c[Eg>>2]|0)-1;c[eh>>2]=3+(c[Cg>>2]|0);c[fh>>2]=c[Cg>>2];while(1){if((c[fh>>2]|0)>>>0>=(c[eh>>2]|0)>>>0){dj=31;break;}_h=c[Bg>>2]|0;if((c[fh>>2]|0)==3)ej=(c[_h>>2]|0)-1|0;else ej=c[_h+(c[fh>>2]<<2)>>2]|0;c[gh>>2]=ej;c[hh>>2]=(c[Ig>>2]|0)-(c[gh>>2]|0);c[ih>>2]=0;if(((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Ug>>2]|0)|0)>>>0){_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0;if((_h|0)==(mm((c[yg>>2]|0)+(0-(c[gh>>2]|0))|0,c[Kg>>2]|0)|0)){_h=Tj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[yg>>2]|0)+(c[Kg>>2]|0)+(0-(c[gh>>2]|0))|0,c[zg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}else{c[jh>>2]=(c[Tg>>2]|0)+(c[hh>>2]|0);if((c[Ag>>2]|0?(((c[Ug>>2]|0)-1-(c[hh>>2]|0)|0)>>>0>=3?((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Yg>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0,(_h|0)==(mm(c[jh>>2]|0,c[Kg>>2]|0)|0)):0){_h=Uj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[jh>>2]|0)+(c[Kg>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}if((c[ih>>2]|0)>>>0>(c[dh>>2]|0)>>>0?(c[dh>>2]=c[ih>>2],c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[fh>>2]|0)-(c[Cg>>2]|0),c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ih>>2],c[bh>>2]=(c[bh>>2]|0)+1,((c[ih>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[ih>>2]|0)|0)==(c[zg>>2]|0))|0):0){dj=29;break;}c[fh>>2]=(c[fh>>2]|0)+1;}do{if((dj|0)==29){dj=0;c[vg>>2]=c[bh>>2];}else if((dj|0)==31){dj=0;if(((c[Fg>>2]|0)==3?(c[dh>>2]|0)>>>0<(c[Fg>>2]|0)>>>0:0)?(c[kh>>2]=nm(c[wg>>2]|0,c[yg>>2]|0)|0,((c[kh>>2]|0)>>>0>(c[Yg>>2]|0)>>>0?((c[Ig>>2]|0)-(c[kh>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ag>>2]|0?(c[kh>>2]|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[nh>>2]=(c[Tg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Uj(c[yg>>2]|0,c[nh>>2]|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;}else{c[mh>>2]=(c[Hg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Tj(c[yg>>2]|0,c[mh>>2]|0,c[zg>>2]|0)|0;}if((c[lh>>2]|0)>>>0>=(c[Fg>>2]|0)>>>0?(c[dh>>2]=c[lh>>2],c[c[Dg>>2]>>2]=(c[Ig>>2]|0)-(c[kh>>2]|0)+2,c[(c[Dg>>2]|0)+4>>2]=c[lh>>2],c[bh>>2]=1,((c[lh>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[lh>>2]|0)|0)==(c[zg>>2]|0))|0):0){c[(c[wg>>2]|0)+24>>2]=(c[Ig>>2]|0)+1;c[vg>>2]=1;break;}}c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2]=c[Ig>>2];while(1){_h=c[ch>>2]|0;c[ch>>2]=_h+-1;if(!_h)break;if((c[Ng>>2]|0)>>>0<=(c[Yg>>2]|0)>>>0)break;c[oh>>2]=(c[Og>>2]|0)+((c[Ng>>2]&c[Qg>>2])<<1<<2);c[ph>>2]=(c[Rg>>2]|0)>>>0<(c[Sg>>2]|0)>>>0?c[Rg>>2]|0:c[Sg>>2]|0;if(c[Ag>>2]|0?((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[qh>>2]=(c[Tg>>2]|0)+(c[Ng>>2]|0);_h=Uj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;if(((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0>=(c[Ug>>2]|0)>>>0)c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);}else{c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);_h=Tj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;}if((c[ph>>2]|0)>>>0>(c[dh>>2]|0)>>>0){if((c[ph>>2]|0)>>>0>((c[$g>>2]|0)-(c[Ng>>2]|0)|0)>>>0)c[$g>>2]=(c[Ng>>2]|0)+(c[ph>>2]|0);c[dh>>2]=c[ph>>2];c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[Ig>>2]|0)-(c[Ng>>2]|0)+2;c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ph>>2];c[bh>>2]=(c[bh>>2]|0)+1;if((c[ph>>2]|0)>>>0>4096)break;if(((c[yg>>2]|0)+(c[ph>>2]|0)|0)==(c[zg>>2]|0))break;}_h=c[Ng>>2]|0;if((d[(c[qh>>2]|0)+(c[ph>>2]|0)>>0]|0|0)<(d[(c[yg>>2]|0)+(c[ph>>2]|0)>>0]|0|0)){c[c[Zg>>2]>>2]=_h;c[Rg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=56;break;}c[Zg>>2]=(c[oh>>2]|0)+4;c[Ng>>2]=c[(c[oh>>2]|0)+4>>2];}else{c[c[_g>>2]>>2]=_h;c[Sg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=59;break;}c[_g>>2]=c[oh>>2];c[Ng>>2]=c[c[oh>>2]>>2];}}if((dj|0)==56){dj=0;c[Zg>>2]=ah;}else if((dj|0)==59){dj=0;c[_g>>2]=ah;}c[c[_g>>2]>>2]=0;c[c[Zg>>2]>>2]=0;c[(c[wg>>2]|0)+24>>2]=(c[$g>>2]|0)-8;c[vg>>2]=c[bh>>2];}}while(0);c[Ah>>2]=c[vg>>2];break a;break;}case 7:case 6:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Hd>>2]=c[Bh>>2];c[Id>>2]=_h;c[Jd>>2]=Qh;c[Kd>>2]=Ph;c[Ld>>2]=Zi;c[Md>>2]=_i;c[Nd>>2]=Uh;c[Od>>2]=Zh;c[Pd>>2]=aj;c[Qd>>2]=6;if((c[(c[Id>>2]|0)+20>>2]|0)>>>0<4095)fj=c[(c[Id>>2]|0)+20>>2]|0;else fj=4095;c[Rd>>2]=fj;c[Sd>>2]=c[(c[Hd>>2]|0)+4>>2];c[Td>>2]=(c[Jd>>2]|0)-(c[Sd>>2]|0);c[Ud>>2]=c[(c[Id>>2]|0)+8>>2];c[Vd>>2]=(c[Qd>>2]|0)==3?3:4;c[Wd>>2]=c[(c[Hd>>2]|0)+36>>2];c[Xd>>2]=Sj(c[Jd>>2]|0,c[Ud>>2]|0,c[Qd>>2]|0)|0;c[Yd>>2]=c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2];c[Zd>>2]=c[(c[Hd>>2]|0)+44>>2];c[_d>>2]=(c[(c[Id>>2]|0)+4>>2]|0)-1;c[$d>>2]=(1<<c[_d>>2])-1;c[ae>>2]=0;c[be>>2]=0;c[ce>>2]=c[(c[Hd>>2]|0)+8>>2];c[de>>2]=c[(c[Hd>>2]|0)+12>>2];c[ee>>2]=(c[ce>>2]|0)+(c[de>>2]|0);c[fe>>2]=(c[Sd>>2]|0)+(c[de>>2]|0);if((c[$d>>2]|0)>>>0>=(c[Td>>2]|0)>>>0)gj=0;else gj=(c[Td>>2]|0)-(c[$d>>2]|0)|0;c[ge>>2]=gj;c[he>>2]=c[(c[Hd>>2]|0)+16>>2];c[ie>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2);c[je>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2)+4;c[ke>>2]=(c[Td>>2]|0)+8+1;c[me>>2]=0;c[ne>>2]=1<<c[(c[Id>>2]|0)+12>>2];c[oe>>2]=(c[Pd>>2]|0)-1;c[pe>>2]=3+(c[Nd>>2]|0);c[qe>>2]=c[Nd>>2];while(1){if((c[qe>>2]|0)>>>0>=(c[pe>>2]|0)>>>0){dj=190;break;}aj=c[Md>>2]|0;if((c[qe>>2]|0)==3)hj=(c[aj>>2]|0)-1|0;else hj=c[aj+(c[qe>>2]<<2)>>2]|0;c[re>>2]=hj;c[se>>2]=(c[Td>>2]|0)-(c[re>>2]|0);c[te>>2]=0;if(((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[de>>2]|0)|0)>>>0){aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0;if((aj|0)==(mm((c[Jd>>2]|0)+(0-(c[re>>2]|0))|0,c[Vd>>2]|0)|0)){aj=Tj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[Jd>>2]|0)+(c[Vd>>2]|0)+(0-(c[re>>2]|0))|0,c[Kd>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}else{c[ue>>2]=(c[ce>>2]|0)+(c[se>>2]|0);if((c[Ld>>2]|0?(((c[de>>2]|0)-1-(c[se>>2]|0)|0)>>>0>=3?((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[he>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0,(aj|0)==(mm(c[ue>>2]|0,c[Vd>>2]|0)|0)):0){aj=Uj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[ue>>2]|0)+(c[Vd>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}if((c[te>>2]|0)>>>0>(c[oe>>2]|0)>>>0?(c[oe>>2]=c[te>>2],c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[qe>>2]|0)-(c[Nd>>2]|0),c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[te>>2],c[me>>2]=(c[me>>2]|0)+1,((c[te>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[te>>2]|0)|0)==(c[Kd>>2]|0))|0):0){dj=188;break;}c[qe>>2]=(c[qe>>2]|0)+1;}do{if((dj|0)==188){dj=0;c[Gd>>2]=c[me>>2];}else if((dj|0)==190){dj=0;if(((c[Qd>>2]|0)==3?(c[oe>>2]|0)>>>0<(c[Qd>>2]|0)>>>0:0)?(c[ve>>2]=nm(c[Hd>>2]|0,c[Jd>>2]|0)|0,((c[ve>>2]|0)>>>0>(c[he>>2]|0)>>>0?((c[Td>>2]|0)-(c[ve>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ld>>2]|0?(c[ve>>2]|0)>>>0<(c[de>>2]|0)>>>0:0){c[ye>>2]=(c[ce>>2]|0)+(c[ve>>2]|0);c[we>>2]=Uj(c[Jd>>2]|0,c[ye>>2]|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;}else{c[xe>>2]=(c[Sd>>2]|0)+(c[ve>>2]|0);c[we>>2]=Tj(c[Jd>>2]|0,c[xe>>2]|0,c[Kd>>2]|0)|0;}if((c[we>>2]|0)>>>0>=(c[Qd>>2]|0)>>>0?(c[oe>>2]=c[we>>2],c[c[Od>>2]>>2]=(c[Td>>2]|0)-(c[ve>>2]|0)+2,c[(c[Od>>2]|0)+4>>2]=c[we>>2],c[me>>2]=1,((c[we>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[we>>2]|0)|0)==(c[Kd>>2]|0))|0):0){c[(c[Hd>>2]|0)+24>>2]=(c[Td>>2]|0)+1;c[Gd>>2]=1;break;}}c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2]=c[Td>>2];while(1){aj=c[ne>>2]|0;c[ne>>2]=aj+-1;if(!aj)break;if((c[Yd>>2]|0)>>>0<=(c[he>>2]|0)>>>0)break;c[ze>>2]=(c[Zd>>2]|0)+((c[Yd>>2]&c[$d>>2])<<1<<2);c[Ae>>2]=(c[ae>>2]|0)>>>0<(c[be>>2]|0)>>>0?c[ae>>2]|0:c[be>>2]|0;if(c[Ld>>2]|0?((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0<(c[de>>2]|0)>>>0:0){c[Be>>2]=(c[ce>>2]|0)+(c[Yd>>2]|0);aj=Uj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;if(((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0>=(c[de>>2]|0)>>>0)c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);}else{c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);aj=Tj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;}if((c[Ae>>2]|0)>>>0>(c[oe>>2]|0)>>>0){if((c[Ae>>2]|0)>>>0>((c[ke>>2]|0)-(c[Yd>>2]|0)|0)>>>0)c[ke>>2]=(c[Yd>>2]|0)+(c[Ae>>2]|0);c[oe>>2]=c[Ae>>2];c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[Td>>2]|0)-(c[Yd>>2]|0)+2;c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[Ae>>2];c[me>>2]=(c[me>>2]|0)+1;if((c[Ae>>2]|0)>>>0>4096)break;if(((c[Jd>>2]|0)+(c[Ae>>2]|0)|0)==(c[Kd>>2]|0))break;}aj=c[Yd>>2]|0;if((d[(c[Be>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)<(d[(c[Jd>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)){c[c[ie>>2]>>2]=aj;c[ae>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=215;break;}c[ie>>2]=(c[ze>>2]|0)+4;c[Yd>>2]=c[(c[ze>>2]|0)+4>>2];}else{c[c[je>>2]>>2]=aj;c[be>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=218;break;}c[je>>2]=c[ze>>2];c[Yd>>2]=c[c[ze>>2]>>2];}}if((dj|0)==215){dj=0;c[ie>>2]=le;}else if((dj|0)==218){dj=0;c[je>>2]=le;}c[c[je>>2]>>2]=0;c[c[ie>>2]>>2]=0;c[(c[Hd>>2]|0)+24>>2]=(c[ke>>2]|0)-8;c[Gd>>2]=c[me>>2];}}while(0);c[Ah>>2]=c[Gd>>2];break a;break;}case 5:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[De>>2]=c[Bh>>2];c[Ee>>2]=aj;c[Fe>>2]=Zh;c[Ge>>2]=Uh;c[He>>2]=_i;c[Ie>>2]=Zi;c[Je>>2]=Ph;c[Ke>>2]=Qh;c[Le>>2]=_h;c[Me>>2]=5;if((c[(c[Ee>>2]|0)+20>>2]|0)>>>0<4095)ij=c[(c[Ee>>2]|0)+20>>2]|0;else ij=4095;c[Ne>>2]=ij;c[Oe>>2]=c[(c[De>>2]|0)+4>>2];c[Pe>>2]=(c[Fe>>2]|0)-(c[Oe>>2]|0);c[Qe>>2]=c[(c[Ee>>2]|0)+8>>2];c[Re>>2]=(c[Me>>2]|0)==3?3:4;c[Se>>2]=c[(c[De>>2]|0)+36>>2];c[Te>>2]=Sj(c[Fe>>2]|0,c[Qe>>2]|0,c[Me>>2]|0)|0;c[Ue>>2]=c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2];c[Ve>>2]=c[(c[De>>2]|0)+44>>2];c[We>>2]=(c[(c[Ee>>2]|0)+4>>2]|0)-1;c[Xe>>2]=(1<<c[We>>2])-1;c[Ye>>2]=0;c[Ze>>2]=0;c[_e>>2]=c[(c[De>>2]|0)+8>>2];c[$e>>2]=c[(c[De>>2]|0)+12>>2];c[af>>2]=(c[_e>>2]|0)+(c[$e>>2]|0);c[bf>>2]=(c[Oe>>2]|0)+(c[$e>>2]|0);if((c[Xe>>2]|0)>>>0>=(c[Pe>>2]|0)>>>0)jj=0;else jj=(c[Pe>>2]|0)-(c[Xe>>2]|0)|0;c[cf>>2]=jj;c[df>>2]=c[(c[De>>2]|0)+16>>2];c[ef>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2);c[ff>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2)+4;c[gf>>2]=(c[Pe>>2]|0)+8+1;c[jf>>2]=0;c[kf>>2]=1<<c[(c[Ee>>2]|0)+12>>2];c[lf>>2]=(c[Le>>2]|0)-1;c[mf>>2]=3+(c[Je>>2]|0);c[nf>>2]=c[Je>>2];while(1){if((c[nf>>2]|0)>>>0>=(c[mf>>2]|0)>>>0){dj=137;break;}_h=c[Ie>>2]|0;if((c[nf>>2]|0)==3)kj=(c[_h>>2]|0)-1|0;else kj=c[_h+(c[nf>>2]<<2)>>2]|0;c[of>>2]=kj;c[pf>>2]=(c[Pe>>2]|0)-(c[of>>2]|0);c[qf>>2]=0;if(((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[$e>>2]|0)|0)>>>0){_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0;if((_h|0)==(mm((c[Fe>>2]|0)+(0-(c[of>>2]|0))|0,c[Re>>2]|0)|0)){_h=Tj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[Fe>>2]|0)+(c[Re>>2]|0)+(0-(c[of>>2]|0))|0,c[Ge>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}else{c[rf>>2]=(c[_e>>2]|0)+(c[pf>>2]|0);if((c[He>>2]|0?(((c[$e>>2]|0)-1-(c[pf>>2]|0)|0)>>>0>=3?((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[df>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0,(_h|0)==(mm(c[rf>>2]|0,c[Re>>2]|0)|0)):0){_h=Uj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[rf>>2]|0)+(c[Re>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}if((c[qf>>2]|0)>>>0>(c[lf>>2]|0)>>>0?(c[lf>>2]=c[qf>>2],c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[nf>>2]|0)-(c[Je>>2]|0),c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[qf>>2],c[jf>>2]=(c[jf>>2]|0)+1,((c[qf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[qf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){dj=135;break;}c[nf>>2]=(c[nf>>2]|0)+1;}do{if((dj|0)==135){dj=0;c[Ce>>2]=c[jf>>2];}else if((dj|0)==137){dj=0;if(((c[Me>>2]|0)==3?(c[lf>>2]|0)>>>0<(c[Me>>2]|0)>>>0:0)?(c[sf>>2]=nm(c[De>>2]|0,c[Fe>>2]|0)|0,((c[sf>>2]|0)>>>0>(c[df>>2]|0)>>>0?((c[Pe>>2]|0)-(c[sf>>2]|0)|0)>>>0<262144:0)|0):0){if(c[He>>2]|0?(c[sf>>2]|0)>>>0<(c[$e>>2]|0)>>>0:0){c[vf>>2]=(c[_e>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Uj(c[Fe>>2]|0,c[vf>>2]|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;}else{c[uf>>2]=(c[Oe>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Tj(c[Fe>>2]|0,c[uf>>2]|0,c[Ge>>2]|0)|0;}if((c[tf>>2]|0)>>>0>=(c[Me>>2]|0)>>>0?(c[lf>>2]=c[tf>>2],c[c[Ke>>2]>>2]=(c[Pe>>2]|0)-(c[sf>>2]|0)+2,c[(c[Ke>>2]|0)+4>>2]=c[tf>>2],c[jf>>2]=1,((c[tf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[tf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){c[(c[De>>2]|0)+24>>2]=(c[Pe>>2]|0)+1;c[Ce>>2]=1;break;}}c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2]=c[Pe>>2];while(1){_h=c[kf>>2]|0;c[kf>>2]=_h+-1;if(!_h)break;if((c[Ue>>2]|0)>>>0<=(c[df>>2]|0)>>>0)break;c[wf>>2]=(c[Ve>>2]|0)+((c[Ue>>2]&c[Xe>>2])<<1<<2);c[xf>>2]=(c[Ye>>2]|0)>>>0<(c[Ze>>2]|0)>>>0?c[Ye>>2]|0:c[Ze>>2]|0;if(c[He>>2]|0?((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0<(c[$e>>2]|0)>>>0:0){c[yf>>2]=(c[_e>>2]|0)+(c[Ue>>2]|0);_h=Uj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;if(((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0>=(c[$e>>2]|0)>>>0)c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);}else{c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);_h=Tj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;}if((c[xf>>2]|0)>>>0>(c[lf>>2]|0)>>>0){if((c[xf>>2]|0)>>>0>((c[gf>>2]|0)-(c[Ue>>2]|0)|0)>>>0)c[gf>>2]=(c[Ue>>2]|0)+(c[xf>>2]|0);c[lf>>2]=c[xf>>2];c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[Pe>>2]|0)-(c[Ue>>2]|0)+2;c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[xf>>2];c[jf>>2]=(c[jf>>2]|0)+1;if((c[xf>>2]|0)>>>0>4096)break;if(((c[Fe>>2]|0)+(c[xf>>2]|0)|0)==(c[Ge>>2]|0))break;}_h=c[Ue>>2]|0;if((d[(c[yf>>2]|0)+(c[xf>>2]|0)>>0]|0|0)<(d[(c[Fe>>2]|0)+(c[xf>>2]|0)>>0]|0|0)){c[c[ef>>2]>>2]=_h;c[Ye>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=162;break;}c[ef>>2]=(c[wf>>2]|0)+4;c[Ue>>2]=c[(c[wf>>2]|0)+4>>2];}else{c[c[ff>>2]>>2]=_h;c[Ze>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=165;break;}c[ff>>2]=c[wf>>2];c[Ue>>2]=c[c[wf>>2]>>2];}}if((dj|0)==162){dj=0;c[ef>>2]=hf;}else if((dj|0)==165){dj=0;c[ff>>2]=hf;}c[c[ff>>2]>>2]=0;c[c[ef>>2]>>2]=0;c[(c[De>>2]|0)+24>>2]=(c[gf>>2]|0)-8;c[Ce>>2]=c[jf>>2];}}while(0);c[Ah>>2]=c[Ce>>2];break a;break;}default:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Af>>2]=c[Bh>>2];c[Bf>>2]=_h;c[Cf>>2]=Qh;c[Df>>2]=Ph;c[Ef>>2]=Zi;c[Ff>>2]=_i;c[Gf>>2]=Uh;c[Hf>>2]=Zh;c[If>>2]=aj;c[Jf>>2]=4;if((c[(c[Bf>>2]|0)+20>>2]|0)>>>0<4095)lj=c[(c[Bf>>2]|0)+20>>2]|0;else lj=4095;c[Kf>>2]=lj;c[Lf>>2]=c[(c[Af>>2]|0)+4>>2];c[Mf>>2]=(c[Cf>>2]|0)-(c[Lf>>2]|0);c[Nf>>2]=c[(c[Bf>>2]|0)+8>>2];c[Of>>2]=(c[Jf>>2]|0)==3?3:4;c[Pf>>2]=c[(c[Af>>2]|0)+36>>2];c[Qf>>2]=Sj(c[Cf>>2]|0,c[Nf>>2]|0,c[Jf>>2]|0)|0;c[Rf>>2]=c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2];c[Sf>>2]=c[(c[Af>>2]|0)+44>>2];c[Tf>>2]=(c[(c[Bf>>2]|0)+4>>2]|0)-1;c[Uf>>2]=(1<<c[Tf>>2])-1;c[Vf>>2]=0;c[Wf>>2]=0;c[Xf>>2]=c[(c[Af>>2]|0)+8>>2];c[Yf>>2]=c[(c[Af>>2]|0)+12>>2];c[Zf>>2]=(c[Xf>>2]|0)+(c[Yf>>2]|0);c[_f>>2]=(c[Lf>>2]|0)+(c[Yf>>2]|0);if((c[Uf>>2]|0)>>>0>=(c[Mf>>2]|0)>>>0)mj=0;else mj=(c[Mf>>2]|0)-(c[Uf>>2]|0)|0;c[$f>>2]=mj;c[ag>>2]=c[(c[Af>>2]|0)+16>>2];c[bg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2);c[cg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2)+4;c[dg>>2]=(c[Mf>>2]|0)+8+1;c[fg>>2]=0;c[gg>>2]=1<<c[(c[Bf>>2]|0)+12>>2];c[hg>>2]=(c[If>>2]|0)-1;c[ig>>2]=3+(c[Gf>>2]|0);c[jg>>2]=c[Gf>>2];while(1){if((c[jg>>2]|0)>>>0>=(c[ig>>2]|0)>>>0){dj=84;break;}aj=c[Ff>>2]|0;if((c[jg>>2]|0)==3)nj=(c[aj>>2]|0)-1|0;else nj=c[aj+(c[jg>>2]<<2)>>2]|0;c[kg>>2]=nj;c[lg>>2]=(c[Mf>>2]|0)-(c[kg>>2]|0);c[mg>>2]=0;if(((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[Yf>>2]|0)|0)>>>0){aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0;if((aj|0)==(mm((c[Cf>>2]|0)+(0-(c[kg>>2]|0))|0,c[Of>>2]|0)|0)){aj=Tj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[Cf>>2]|0)+(c[Of>>2]|0)+(0-(c[kg>>2]|0))|0,c[Df>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}else{c[ng>>2]=(c[Xf>>2]|0)+(c[lg>>2]|0);if((c[Ef>>2]|0?(((c[Yf>>2]|0)-1-(c[lg>>2]|0)|0)>>>0>=3?((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[ag>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0,(aj|0)==(mm(c[ng>>2]|0,c[Of>>2]|0)|0)):0){aj=Uj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[ng>>2]|0)+(c[Of>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}if((c[mg>>2]|0)>>>0>(c[hg>>2]|0)>>>0?(c[hg>>2]=c[mg>>2],c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[jg>>2]|0)-(c[Gf>>2]|0),c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[mg>>2],c[fg>>2]=(c[fg>>2]|0)+1,((c[mg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[mg>>2]|0)|0)==(c[Df>>2]|0))|0):0){dj=82;break;}c[jg>>2]=(c[jg>>2]|0)+1;}do{if((dj|0)==82){dj=0;c[zf>>2]=c[fg>>2];}else if((dj|0)==84){dj=0;if(((c[Jf>>2]|0)==3?(c[hg>>2]|0)>>>0<(c[Jf>>2]|0)>>>0:0)?(c[og>>2]=nm(c[Af>>2]|0,c[Cf>>2]|0)|0,((c[og>>2]|0)>>>0>(c[ag>>2]|0)>>>0?((c[Mf>>2]|0)-(c[og>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ef>>2]|0?(c[og>>2]|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[rg>>2]=(c[Xf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Uj(c[Cf>>2]|0,c[rg>>2]|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;}else{c[qg>>2]=(c[Lf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Tj(c[Cf>>2]|0,c[qg>>2]|0,c[Df>>2]|0)|0;}if((c[pg>>2]|0)>>>0>=(c[Jf>>2]|0)>>>0?(c[hg>>2]=c[pg>>2],c[c[Hf>>2]>>2]=(c[Mf>>2]|0)-(c[og>>2]|0)+2,c[(c[Hf>>2]|0)+4>>2]=c[pg>>2],c[fg>>2]=1,((c[pg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[pg>>2]|0)|0)==(c[Df>>2]|0))|0):0){c[(c[Af>>2]|0)+24>>2]=(c[Mf>>2]|0)+1;c[zf>>2]=1;break;}}c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2]=c[Mf>>2];while(1){aj=c[gg>>2]|0;c[gg>>2]=aj+-1;if(!aj)break;if((c[Rf>>2]|0)>>>0<=(c[ag>>2]|0)>>>0)break;c[sg>>2]=(c[Sf>>2]|0)+((c[Rf>>2]&c[Uf>>2])<<1<<2);c[tg>>2]=(c[Vf>>2]|0)>>>0<(c[Wf>>2]|0)>>>0?c[Vf>>2]|0:c[Wf>>2]|0;if(c[Ef>>2]|0?((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[ug>>2]=(c[Xf>>2]|0)+(c[Rf>>2]|0);aj=Uj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;if(((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0>=(c[Yf>>2]|0)>>>0)c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);}else{c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);aj=Tj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;}if((c[tg>>2]|0)>>>0>(c[hg>>2]|0)>>>0){if((c[tg>>2]|0)>>>0>((c[dg>>2]|0)-(c[Rf>>2]|0)|0)>>>0)c[dg>>2]=(c[Rf>>2]|0)+(c[tg>>2]|0);c[hg>>2]=c[tg>>2];c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[Mf>>2]|0)-(c[Rf>>2]|0)+2;c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[tg>>2];c[fg>>2]=(c[fg>>2]|0)+1;if((c[tg>>2]|0)>>>0>4096)break;if(((c[Cf>>2]|0)+(c[tg>>2]|0)|0)==(c[Df>>2]|0))break;}aj=c[Rf>>2]|0;if((d[(c[ug>>2]|0)+(c[tg>>2]|0)>>0]|0|0)<(d[(c[Cf>>2]|0)+(c[tg>>2]|0)>>0]|0|0)){c[c[bg>>2]>>2]=aj;c[Vf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=109;break;}c[bg>>2]=(c[sg>>2]|0)+4;c[Rf>>2]=c[(c[sg>>2]|0)+4>>2];}else{c[c[cg>>2]>>2]=aj;c[Wf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=112;break;}c[cg>>2]=c[sg>>2];c[Rf>>2]=c[c[sg>>2]>>2];}}if((dj|0)==109){dj=0;c[bg>>2]=eg;}else if((dj|0)==112){dj=0;c[cg>>2]=eg;}c[c[cg>>2]>>2]=0;c[c[bg>>2]>>2]=0;c[(c[Af>>2]|0)+24>>2]=(c[dg>>2]|0)-8;c[zf>>2]=c[fg>>2];}}while(0);c[Ah>>2]=c[zf>>2];break a;}}}}while(0);c[ki>>2]=c[Ah>>2];if(!(c[ki>>2]|0)){c[Vh>>2]=(c[Vh>>2]|0)+1;continue;}c[li>>2]=0;while(1){if((c[li>>2]|0)>>>0>=3)break;c[(c[bi>>2]|0)+16+(c[li>>2]<<2)>>2]=c[(c[Nh>>2]|0)+(c[li>>2]<<2)>>2];c[li>>2]=(c[li>>2]|0)+1;}c[(c[bi>>2]|0)+8>>2]=1;c[(c[bi>>2]|0)+12>>2]=c[ii>>2];c[mi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)+4>>2];do{if((c[mi>>2]|0)>>>0<=(c[$h>>2]|0)>>>0){c[ni>>2]=om(di,c[Wh>>2]|0,c[ii>>2]|0,c[Th>>2]|0)|0;c[oi>>2]=0;while(1){if((c[oi>>2]|0)>>>0>=(c[ai>>2]|0)>>>0)break;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=1073741824;c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=0;while(1){if((c[pi>>2]|0)>>>0>=(c[ki>>2]|0)>>>0)break;c[qi>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)>>2];c[ri>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)+4>>2];pm(si,c[Nh>>2]|0,c[qi>>2]|0,c[ji>>2]|0);while(1){if((c[oi>>2]|0)>>>0>(c[ri>>2]|0)>>>0)break;aj=c[ni>>2]|0;Zh=c[oi>>2]|0;Uh=c[Th>>2]|0;_i=c[Rh>>2]|0;c[yd>>2]=c[qi>>2];c[zd>>2]=Zh;c[Ad>>2]=Uh;c[Bd>>2]=_i;c[Dd>>2]=qm((c[yd>>2]|0)+1|0)|0;c[Ed>>2]=(c[zd>>2]|0)-3;if(c[(c[Ad>>2]|0)+56>>2]|0){_i=(qm((c[Ed>>2]|0)+1|0)|0)+16|0;c[xd>>2]=_i+(c[Dd>>2]|0);}else{_i=(c[Dd>>2]|0)+(c[(c[Ad>>2]|0)+52>>2]|0)|0;c[Cd>>2]=_i-(qm((c[(c[(c[Ad>>2]|0)+12>>2]|0)+(c[Dd>>2]<<2)>>2]|0)+1|0)|0);if((c[Bd>>2]|0)<2&(c[Dd>>2]|0)>>>0>=20)c[Cd>>2]=(c[Cd>>2]|0)+((c[Dd>>2]|0)-19<<1);c[Fd>>2]=rm(c[Ed>>2]|0)|0;_i=(c[5840+(c[Fd>>2]<<2)>>2]|0)+(c[(c[Ad>>2]|0)+48>>2]|0)|0;Uh=_i-(qm((c[(c[(c[Ad>>2]|0)+8>>2]|0)+(c[Fd>>2]<<2)>>2]|0)+1|0)|0)|0;c[Cd>>2]=(c[Cd>>2]|0)+Uh;c[xd>>2]=c[Cd>>2];}c[ti>>2]=aj+(c[xd>>2]|0);c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=c[oi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+4>>2]=c[qi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+12>>2]=c[ii>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=c[ti>>2];aj=(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+16|0;c[aj>>2]=c[si>>2];c[aj+4>>2]=c[si+4>>2];c[aj+8>>2]=c[si+8>>2];c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=(c[pi>>2]|0)+1;}c[fi>>2]=(c[oi>>2]|0)-1;c[ei>>2]=1;b:while(1){if((c[ei>>2]|0)>>>0>(c[fi>>2]|0)>>>0){dj=504;break;}c[ui>>2]=(c[Vh>>2]|0)+(c[ei>>2]|0);if((c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+8>>2]|0)==1)oj=(c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+12>>2]|0)+1|0;else oj=1;c[vi>>2]=oj;if((c[ei>>2]|0)>>>0>(c[vi>>2]|0)>>>0){aj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[vi>>2]|0)|0)*28|0)>>2]|0;c[wi>>2]=aj+(sm((c[ui>>2]|0)+(0-(c[vi>>2]|0))|0,c[vi>>2]|0,c[Th>>2]|0)|0);}else c[wi>>2]=tm(di,c[Wh>>2]|0,c[vi>>2]|0,c[Th>>2]|0)|0;if((c[wi>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0)){c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+4>>2]=0;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]=c[vi>>2];c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]=c[wi>>2];aj=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Uh=(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+16|0;c[aj>>2]=c[Uh>>2];c[aj+4>>2]=c[Uh+4>>2];c[aj+8>>2]=c[Uh+8>>2];}c:do{if((c[ui>>2]|0)>>>0<=(c[Yh>>2]|0)>>>0){if((c[ei>>2]|0)==(c[fi>>2]|0)){dj=504;break b;}if((c[Rh>>2]|0)==0?(c[(c[bi>>2]|0)+(((c[ei>>2]|0)+1|0)*28|0)>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0):0)break;c[xi>>2]=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)!=1&1;if((c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)==1)pj=c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]|0;else pj=0;c[yi>>2]=pj;if((c[ei>>2]|0)>>>0>(c[yi>>2]|0)>>>0)qj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[yi>>2]|0)|0)*28|0)>>2]|0;else qj=0;c[zi>>2]=qj;Uh=c[zi>>2]|0;c[Ai>>2]=Uh+(um((c[ui>>2]|0)+(0-(c[yi>>2]|0))|0,c[yi>>2]|0,c[Th>>2]|0)|0);Uh=c[Oh>>2]|0;aj=c[ui>>2]|0;_i=c[Xh>>2]|0;Zh=c[Sh>>2]|0;Zi=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Ph=c[xi>>2]|0;Qh=c[ci>>2]|0;_h=c[ai>>2]|0;c[nd>>2]=c[Lh>>2];c[od>>2]=Uh;c[pd>>2]=aj;c[qd>>2]=_i;c[rd>>2]=Zh;c[sd>>2]=Zi;c[td>>2]=Ph;c[ud>>2]=Qh;c[vd>>2]=_h;c[wd>>2]=c[(c[od>>2]|0)+16>>2];d:do{if((c[pd>>2]|0)>>>0<((c[(c[nd>>2]|0)+4>>2]|0)+(c[(c[nd>>2]|0)+24>>2]|0)|0)>>>0)c[md>>2]=0;else{_h=c[od>>2]|0;Qh=c[pd>>2]|0;Ph=c[qd>>2]|0;Zi=c[wd>>2]|0;Zh=c[rd>>2]|0;c[dd>>2]=c[nd>>2];c[ed>>2]=_h;c[fd>>2]=Qh;c[gd>>2]=Ph;c[hd>>2]=Zi;c[id>>2]=Zh;c[jd>>2]=c[(c[dd>>2]|0)+4>>2];c[kd>>2]=(c[fd>>2]|0)-(c[jd>>2]|0);c[ld>>2]=c[(c[dd>>2]|0)+24>>2];while(1){if((c[ld>>2]|0)>>>0>=(c[kd>>2]|0)>>>0)break;Zh=Rj(c[dd>>2]|0,c[ed>>2]|0,(c[jd>>2]|0)+(c[ld>>2]|0)|0,c[gd>>2]|0,c[hd>>2]|0,c[id>>2]|0)|0;c[ld>>2]=(c[ld>>2]|0)+Zh;}c[(c[dd>>2]|0)+24>>2]=c[kd>>2];switch(c[wd>>2]|0){case 3:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[ic>>2]=c[nd>>2];c[jc>>2]=Zh;c[kc>>2]=Zi;c[lc>>2]=Ph;c[mc>>2]=Qh;c[nc>>2]=_h;c[oc>>2]=_i;c[pc>>2]=aj;c[qc>>2]=Uh;c[rc>>2]=3;if((c[(c[jc>>2]|0)+20>>2]|0)>>>0<4095)rj=c[(c[jc>>2]|0)+20>>2]|0;else rj=4095;c[sc>>2]=rj;c[tc>>2]=c[(c[ic>>2]|0)+4>>2];c[uc>>2]=(c[kc>>2]|0)-(c[tc>>2]|0);c[vc>>2]=c[(c[jc>>2]|0)+8>>2];c[wc>>2]=(c[rc>>2]|0)==3?3:4;c[xc>>2]=c[(c[ic>>2]|0)+36>>2];c[yc>>2]=Sj(c[kc>>2]|0,c[vc>>2]|0,c[rc>>2]|0)|0;c[zc>>2]=c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2];c[Ac>>2]=c[(c[ic>>2]|0)+44>>2];c[Bc>>2]=(c[(c[jc>>2]|0)+4>>2]|0)-1;c[Cc>>2]=(1<<c[Bc>>2])-1;c[Dc>>2]=0;c[Ec>>2]=0;c[Fc>>2]=c[(c[ic>>2]|0)+8>>2];c[Gc>>2]=c[(c[ic>>2]|0)+12>>2];c[Hc>>2]=(c[Fc>>2]|0)+(c[Gc>>2]|0);c[Ic>>2]=(c[tc>>2]|0)+(c[Gc>>2]|0);if((c[Cc>>2]|0)>>>0>=(c[uc>>2]|0)>>>0)sj=0;else sj=(c[uc>>2]|0)-(c[Cc>>2]|0)|0;c[Jc>>2]=sj;c[Kc>>2]=c[(c[ic>>2]|0)+16>>2];c[Lc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2);c[Mc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2)+4;c[Nc>>2]=(c[uc>>2]|0)+8+1;c[Pc>>2]=0;c[Qc>>2]=1<<c[(c[jc>>2]|0)+12>>2];c[Rc>>2]=(c[qc>>2]|0)-1;c[Sc>>2]=3+(c[oc>>2]|0);c[Tc>>2]=c[oc>>2];while(1){if((c[Tc>>2]|0)>>>0>=(c[Sc>>2]|0)>>>0){dj=287;break;}Uh=c[nc>>2]|0;if((c[Tc>>2]|0)==3)tj=(c[Uh>>2]|0)-1|0;else tj=c[Uh+(c[Tc>>2]<<2)>>2]|0;c[Uc>>2]=tj;c[Vc>>2]=(c[uc>>2]|0)-(c[Uc>>2]|0);c[Wc>>2]=0;do{if(((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Gc>>2]|0)|0)>>>0){Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm((c[kc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[wc>>2]|0)|0))break;Uh=Tj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[kc>>2]|0)+(c[wc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[lc>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}else{c[Xc>>2]=(c[Fc>>2]|0)+(c[Vc>>2]|0);if(!(c[mc>>2]|0))break;if(!((((c[Gc>>2]|0)-1-(c[Vc>>2]|0)|0)>>>0>=3?((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Kc>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm(c[Xc>>2]|0,c[wc>>2]|0)|0))break;Uh=Uj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[Xc>>2]|0)+(c[wc>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}}while(0);if((c[Wc>>2]|0)>>>0>(c[Rc>>2]|0)>>>0?(c[Rc>>2]=c[Wc>>2],c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[Tc>>2]|0)-(c[oc>>2]|0),c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[Wc>>2],c[Pc>>2]=(c[Pc>>2]|0)+1,((c[Wc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Wc>>2]|0)|0)==(c[lc>>2]|0))|0):0){dj=285;break;}c[Tc>>2]=(c[Tc>>2]|0)+1;}e:do{if((dj|0)==285){dj=0;c[hc>>2]=c[Pc>>2];}else if((dj|0)==287){dj=0;do{if((c[rc>>2]|0)==3){if((c[Rc>>2]|0)>>>0>=(c[rc>>2]|0)>>>0)break;c[Yc>>2]=nm(c[ic>>2]|0,c[kc>>2]|0)|0;if(!(((c[Yc>>2]|0)>>>0>(c[Kc>>2]|0)>>>0?((c[uc>>2]|0)-(c[Yc>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[mc>>2]|0){if((c[Yc>>2]|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=292;break;}c[$c>>2]=(c[Fc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Uj(c[kc>>2]|0,c[$c>>2]|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;}else dj=292;}while(0);if((dj|0)==292){dj=0;c[_c>>2]=(c[tc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Tj(c[kc>>2]|0,c[_c>>2]|0,c[lc>>2]|0)|0;}if((c[Zc>>2]|0)>>>0<(c[rc>>2]|0)>>>0)break;c[Rc>>2]=c[Zc>>2];c[c[pc>>2]>>2]=(c[uc>>2]|0)-(c[Yc>>2]|0)+2;c[(c[pc>>2]|0)+4>>2]=c[Zc>>2];c[Pc>>2]=1;if(!(((c[Zc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Zc>>2]|0)|0)==(c[lc>>2]|0))|0))break;c[(c[ic>>2]|0)+24>>2]=(c[uc>>2]|0)+1;c[hc>>2]=1;break e;}}while(0);c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2]=c[uc>>2];while(1){Uh=c[Qc>>2]|0;c[Qc>>2]=Uh+-1;if(!Uh)break;if((c[zc>>2]|0)>>>0<=(c[Kc>>2]|0)>>>0)break;c[ad>>2]=(c[Ac>>2]|0)+((c[zc>>2]&c[Cc>>2])<<1<<2);c[bd>>2]=(c[Dc>>2]|0)>>>0<(c[Ec>>2]|0)>>>0?c[Dc>>2]|0:c[Ec>>2]|0;do{if(c[mc>>2]|0){if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=302;break;}c[cd>>2]=(c[Fc>>2]|0)+(c[zc>>2]|0);Uh=Uj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0<(c[Gc>>2]|0)>>>0)break;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);}else dj=302;}while(0);if((dj|0)==302){dj=0;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);Uh=Tj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;}if((c[bd>>2]|0)>>>0>(c[Rc>>2]|0)>>>0){if((c[bd>>2]|0)>>>0>((c[Nc>>2]|0)-(c[zc>>2]|0)|0)>>>0)c[Nc>>2]=(c[zc>>2]|0)+(c[bd>>2]|0);c[Rc>>2]=c[bd>>2];c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[uc>>2]|0)-(c[zc>>2]|0)+2;c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[bd>>2];c[Pc>>2]=(c[Pc>>2]|0)+1;if((c[bd>>2]|0)>>>0>4096)break;if(((c[kc>>2]|0)+(c[bd>>2]|0)|0)==(c[lc>>2]|0))break;}Uh=c[zc>>2]|0;if((d[(c[cd>>2]|0)+(c[bd>>2]|0)>>0]|0|0)<(d[(c[kc>>2]|0)+(c[bd>>2]|0)>>0]|0|0)){c[c[Lc>>2]>>2]=Uh;c[Dc>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=312;break;}c[Lc>>2]=(c[ad>>2]|0)+4;c[zc>>2]=c[(c[ad>>2]|0)+4>>2];}else{c[c[Mc>>2]>>2]=Uh;c[Ec>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=315;break;}c[Mc>>2]=c[ad>>2];c[zc>>2]=c[c[ad>>2]>>2];}}if((dj|0)==312){dj=0;c[Lc>>2]=Oc;}else if((dj|0)==315){dj=0;c[Mc>>2]=Oc;}c[c[Mc>>2]>>2]=0;c[c[Lc>>2]>>2]=0;c[(c[ic>>2]|0)+24>>2]=(c[Nc>>2]|0)-8;c[hc>>2]=c[Pc>>2];}}while(0);c[md>>2]=c[hc>>2];break d;break;}case 7:case 6:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[u>>2]=c[nd>>2];c[v>>2]=Uh;c[w>>2]=aj;c[x>>2]=_i;c[y>>2]=_h;c[z>>2]=Qh;c[A>>2]=Ph;c[B>>2]=Zi;c[C>>2]=Zh;c[D>>2]=6;if((c[(c[v>>2]|0)+20>>2]|0)>>>0<4095)uj=c[(c[v>>2]|0)+20>>2]|0;else uj=4095;c[E>>2]=uj;c[F>>2]=c[(c[u>>2]|0)+4>>2];c[G>>2]=(c[w>>2]|0)-(c[F>>2]|0);c[H>>2]=c[(c[v>>2]|0)+8>>2];c[I>>2]=(c[D>>2]|0)==3?3:4;c[J>>2]=c[(c[u>>2]|0)+36>>2];c[K>>2]=Sj(c[w>>2]|0,c[H>>2]|0,c[D>>2]|0)|0;c[L>>2]=c[(c[J>>2]|0)+(c[K>>2]<<2)>>2];c[M>>2]=c[(c[u>>2]|0)+44>>2];c[N>>2]=(c[(c[v>>2]|0)+4>>2]|0)-1;c[O>>2]=(1<<c[N>>2])-1;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=c[(c[u>>2]|0)+8>>2];c[S>>2]=c[(c[u>>2]|0)+12>>2];c[T>>2]=(c[R>>2]|0)+(c[S>>2]|0);c[U>>2]=(c[F>>2]|0)+(c[S>>2]|0);if((c[O>>2]|0)>>>0>=(c[G>>2]|0)>>>0)vj=0;else vj=(c[G>>2]|0)-(c[O>>2]|0)|0;c[V>>2]=vj;c[W>>2]=c[(c[u>>2]|0)+16>>2];c[X>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2);c[Y>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2)+4;c[Z>>2]=(c[G>>2]|0)+8+1;c[$>>2]=0;c[aa>>2]=1<<c[(c[v>>2]|0)+12>>2];c[ba>>2]=(c[C>>2]|0)-1;c[ca>>2]=3+(c[A>>2]|0);c[da>>2]=c[A>>2];while(1){if((c[da>>2]|0)>>>0>=(c[ca>>2]|0)>>>0){dj=446;break;}Zh=c[z>>2]|0;if((c[da>>2]|0)==3)wj=(c[Zh>>2]|0)-1|0;else wj=c[Zh+(c[da>>2]<<2)>>2]|0;c[ea>>2]=wj;c[fa>>2]=(c[G>>2]|0)-(c[ea>>2]|0);c[ga>>2]=0;do{if(((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[S>>2]|0)|0)>>>0){Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm((c[w>>2]|0)+(0-(c[ea>>2]|0))|0,c[I>>2]|0)|0))break;Zh=Tj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[w>>2]|0)+(c[I>>2]|0)+(0-(c[ea>>2]|0))|0,c[x>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}else{c[ha>>2]=(c[R>>2]|0)+(c[fa>>2]|0);if(!(c[y>>2]|0))break;if(!((((c[S>>2]|0)-1-(c[fa>>2]|0)|0)>>>0>=3?((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[W>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm(c[ha>>2]|0,c[I>>2]|0)|0))break;Zh=Uj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[ha>>2]|0)+(c[I>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}}while(0);if((c[ga>>2]|0)>>>0>(c[ba>>2]|0)>>>0?(c[ba>>2]=c[ga>>2],c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[da>>2]|0)-(c[A>>2]|0),c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[ga>>2],c[$>>2]=(c[$>>2]|0)+1,((c[ga>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ga>>2]|0)|0)==(c[x>>2]|0))|0):0){dj=444;break;}c[da>>2]=(c[da>>2]|0)+1;}f:do{if((dj|0)==444){dj=0;c[t>>2]=c[$>>2];}else if((dj|0)==446){dj=0;do{if((c[D>>2]|0)==3){if((c[ba>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[ia>>2]=nm(c[u>>2]|0,c[w>>2]|0)|0;if(!(((c[ia>>2]|0)>>>0>(c[W>>2]|0)>>>0?((c[G>>2]|0)-(c[ia>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[y>>2]|0){if((c[ia>>2]|0)>>>0>=(c[S>>2]|0)>>>0){dj=451;break;}c[la>>2]=(c[R>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Uj(c[w>>2]|0,c[la>>2]|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;}else dj=451;}while(0);if((dj|0)==451){dj=0;c[ka>>2]=(c[F>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Tj(c[w>>2]|0,c[ka>>2]|0,c[x>>2]|0)|0;}if((c[ja>>2]|0)>>>0<(c[D>>2]|0)>>>0)break;c[ba>>2]=c[ja>>2];c[c[B>>2]>>2]=(c[G>>2]|0)-(c[ia>>2]|0)+2;c[(c[B>>2]|0)+4>>2]=c[ja>>2];c[$>>2]=1;if(!(((c[ja>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ja>>2]|0)|0)==(c[x>>2]|0))|0))break;c[(c[u>>2]|0)+24>>2]=(c[G>>2]|0)+1;c[t>>2]=1;break f;}}while(0);c[(c[J>>2]|0)+(c[K>>2]<<2)>>2]=c[G>>2];while(1){Zh=c[aa>>2]|0;c[aa>>2]=Zh+-1;if(!Zh)break;if((c[L>>2]|0)>>>0<=(c[W>>2]|0)>>>0)break;c[ma>>2]=(c[M>>2]|0)+((c[L>>2]&c[O>>2])<<1<<2);c[na>>2]=(c[P>>2]|0)>>>0<(c[Q>>2]|0)>>>0?c[P>>2]|0:c[Q>>2]|0;do{if(c[y>>2]|0){if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0>=(c[S>>2]|0)>>>0){dj=461;break;}c[oa>>2]=(c[R>>2]|0)+(c[L>>2]|0);Zh=Uj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0<(c[S>>2]|0)>>>0)break;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);}else dj=461;}while(0);if((dj|0)==461){dj=0;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);Zh=Tj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;}if((c[na>>2]|0)>>>0>(c[ba>>2]|0)>>>0){if((c[na>>2]|0)>>>0>((c[Z>>2]|0)-(c[L>>2]|0)|0)>>>0)c[Z>>2]=(c[L>>2]|0)+(c[na>>2]|0);c[ba>>2]=c[na>>2];c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[G>>2]|0)-(c[L>>2]|0)+2;c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[na>>2];c[$>>2]=(c[$>>2]|0)+1;if((c[na>>2]|0)>>>0>4096)break;if(((c[w>>2]|0)+(c[na>>2]|0)|0)==(c[x>>2]|0))break;}Zh=c[L>>2]|0;if((d[(c[oa>>2]|0)+(c[na>>2]|0)>>0]|0|0)<(d[(c[w>>2]|0)+(c[na>>2]|0)>>0]|0|0)){c[c[X>>2]>>2]=Zh;c[P>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=471;break;}c[X>>2]=(c[ma>>2]|0)+4;c[L>>2]=c[(c[ma>>2]|0)+4>>2];}else{c[c[Y>>2]>>2]=Zh;c[Q>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=474;break;}c[Y>>2]=c[ma>>2];c[L>>2]=c[c[ma>>2]>>2];}}if((dj|0)==471){dj=0;c[X>>2]=_;}else if((dj|0)==474){dj=0;c[Y>>2]=_;}c[c[Y>>2]>>2]=0;c[c[X>>2]>>2]=0;c[(c[u>>2]|0)+24>>2]=(c[Z>>2]|0)-8;c[t>>2]=c[$>>2];}}while(0);c[md>>2]=c[t>>2];break d;break;}case 5:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[qa>>2]=c[nd>>2];c[ra>>2]=Zh;c[sa>>2]=Zi;c[ta>>2]=Ph;c[ua>>2]=Qh;c[va>>2]=_h;c[wa>>2]=_i;c[xa>>2]=aj;c[ya>>2]=Uh;c[za>>2]=5;if((c[(c[ra>>2]|0)+20>>2]|0)>>>0<4095)xj=c[(c[ra>>2]|0)+20>>2]|0;else xj=4095;c[Aa>>2]=xj;c[Ba>>2]=c[(c[qa>>2]|0)+4>>2];c[Ca>>2]=(c[sa>>2]|0)-(c[Ba>>2]|0);c[Da>>2]=c[(c[ra>>2]|0)+8>>2];c[Ea>>2]=(c[za>>2]|0)==3?3:4;c[Fa>>2]=c[(c[qa>>2]|0)+36>>2];c[Ga>>2]=Sj(c[sa>>2]|0,c[Da>>2]|0,c[za>>2]|0)|0;c[Ha>>2]=c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2];c[Ia>>2]=c[(c[qa>>2]|0)+44>>2];c[Ja>>2]=(c[(c[ra>>2]|0)+4>>2]|0)-1;c[Ka>>2]=(1<<c[Ja>>2])-1;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=c[(c[qa>>2]|0)+8>>2];c[Oa>>2]=c[(c[qa>>2]|0)+12>>2];c[Pa>>2]=(c[Na>>2]|0)+(c[Oa>>2]|0);c[Qa>>2]=(c[Ba>>2]|0)+(c[Oa>>2]|0);if((c[Ka>>2]|0)>>>0>=(c[Ca>>2]|0)>>>0)yj=0;else yj=(c[Ca>>2]|0)-(c[Ka>>2]|0)|0;c[Ra>>2]=yj;c[Sa>>2]=c[(c[qa>>2]|0)+16>>2];c[Ta>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2);c[Ua>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2)+4;c[Va>>2]=(c[Ca>>2]|0)+8+1;c[Xa>>2]=0;c[Ya>>2]=1<<c[(c[ra>>2]|0)+12>>2];c[Za>>2]=(c[ya>>2]|0)-1;c[_a>>2]=3+(c[wa>>2]|0);c[$a>>2]=c[wa>>2];while(1){if((c[$a>>2]|0)>>>0>=(c[_a>>2]|0)>>>0){dj=393;break;}Uh=c[va>>2]|0;if((c[$a>>2]|0)==3)zj=(c[Uh>>2]|0)-1|0;else zj=c[Uh+(c[$a>>2]<<2)>>2]|0;c[ab>>2]=zj;c[bb>>2]=(c[Ca>>2]|0)-(c[ab>>2]|0);c[cb>>2]=0;do{if(((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Oa>>2]|0)|0)>>>0){Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm((c[sa>>2]|0)+(0-(c[ab>>2]|0))|0,c[Ea>>2]|0)|0))break;Uh=Tj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[sa>>2]|0)+(c[Ea>>2]|0)+(0-(c[ab>>2]|0))|0,c[ta>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}else{c[db>>2]=(c[Na>>2]|0)+(c[bb>>2]|0);if(!(c[ua>>2]|0))break;if(!((((c[Oa>>2]|0)-1-(c[bb>>2]|0)|0)>>>0>=3?((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Sa>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm(c[db>>2]|0,c[Ea>>2]|0)|0))break;Uh=Uj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[db>>2]|0)+(c[Ea>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}}while(0);if((c[cb>>2]|0)>>>0>(c[Za>>2]|0)>>>0?(c[Za>>2]=c[cb>>2],c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[$a>>2]|0)-(c[wa>>2]|0),c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[cb>>2],c[Xa>>2]=(c[Xa>>2]|0)+1,((c[cb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[cb>>2]|0)|0)==(c[ta>>2]|0))|0):0){dj=391;break;}c[$a>>2]=(c[$a>>2]|0)+1;}g:do{if((dj|0)==391){dj=0;c[pa>>2]=c[Xa>>2];}else if((dj|0)==393){dj=0;do{if((c[za>>2]|0)==3){if((c[Za>>2]|0)>>>0>=(c[za>>2]|0)>>>0)break;c[eb>>2]=nm(c[qa>>2]|0,c[sa>>2]|0)|0;if(!(((c[eb>>2]|0)>>>0>(c[Sa>>2]|0)>>>0?((c[Ca>>2]|0)-(c[eb>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[ua>>2]|0){if((c[eb>>2]|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=398;break;}c[hb>>2]=(c[Na>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Uj(c[sa>>2]|0,c[hb>>2]|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;}else dj=398;}while(0);if((dj|0)==398){dj=0;c[gb>>2]=(c[Ba>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Tj(c[sa>>2]|0,c[gb>>2]|0,c[ta>>2]|0)|0;}if((c[fb>>2]|0)>>>0<(c[za>>2]|0)>>>0)break;c[Za>>2]=c[fb>>2];c[c[xa>>2]>>2]=(c[Ca>>2]|0)-(c[eb>>2]|0)+2;c[(c[xa>>2]|0)+4>>2]=c[fb>>2];c[Xa>>2]=1;if(!(((c[fb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[fb>>2]|0)|0)==(c[ta>>2]|0))|0))break;c[(c[qa>>2]|0)+24>>2]=(c[Ca>>2]|0)+1;c[pa>>2]=1;break g;}}while(0);c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2]=c[Ca>>2];while(1){Uh=c[Ya>>2]|0;c[Ya>>2]=Uh+-1;if(!Uh)break;if((c[Ha>>2]|0)>>>0<=(c[Sa>>2]|0)>>>0)break;c[ib>>2]=(c[Ia>>2]|0)+((c[Ha>>2]&c[Ka>>2])<<1<<2);c[jb>>2]=(c[La>>2]|0)>>>0<(c[Ma>>2]|0)>>>0?c[La>>2]|0:c[Ma>>2]|0;do{if(c[ua>>2]|0){if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=408;break;}c[kb>>2]=(c[Na>>2]|0)+(c[Ha>>2]|0);Uh=Uj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0<(c[Oa>>2]|0)>>>0)break;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);}else dj=408;}while(0);if((dj|0)==408){dj=0;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);Uh=Tj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;}if((c[jb>>2]|0)>>>0>(c[Za>>2]|0)>>>0){if((c[jb>>2]|0)>>>0>((c[Va>>2]|0)-(c[Ha>>2]|0)|0)>>>0)c[Va>>2]=(c[Ha>>2]|0)+(c[jb>>2]|0);c[Za>>2]=c[jb>>2];c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[Ca>>2]|0)-(c[Ha>>2]|0)+2;c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[jb>>2];c[Xa>>2]=(c[Xa>>2]|0)+1;if((c[jb>>2]|0)>>>0>4096)break;if(((c[sa>>2]|0)+(c[jb>>2]|0)|0)==(c[ta>>2]|0))break;}Uh=c[Ha>>2]|0;if((d[(c[kb>>2]|0)+(c[jb>>2]|0)>>0]|0|0)<(d[(c[sa>>2]|0)+(c[jb>>2]|0)>>0]|0|0)){c[c[Ta>>2]>>2]=Uh;c[La>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=418;break;}c[Ta>>2]=(c[ib>>2]|0)+4;c[Ha>>2]=c[(c[ib>>2]|0)+4>>2];}else{c[c[Ua>>2]>>2]=Uh;c[Ma>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=421;break;}c[Ua>>2]=c[ib>>2];c[Ha>>2]=c[c[ib>>2]>>2];}}if((dj|0)==418){dj=0;c[Ta>>2]=Wa;}else if((dj|0)==421){dj=0;c[Ua>>2]=Wa;}c[c[Ua>>2]>>2]=0;c[c[Ta>>2]>>2]=0;c[(c[qa>>2]|0)+24>>2]=(c[Va>>2]|0)-8;c[pa>>2]=c[Xa>>2];}}while(0);c[md>>2]=c[pa>>2];break d;break;}default:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[mb>>2]=c[nd>>2];c[nb>>2]=Uh;c[ob>>2]=aj;c[pb>>2]=_i;c[qb>>2]=_h;c[rb>>2]=Qh;c[sb>>2]=Ph;c[tb>>2]=Zi;c[ub>>2]=Zh;c[vb>>2]=4;if((c[(c[nb>>2]|0)+20>>2]|0)>>>0<4095)Aj=c[(c[nb>>2]|0)+20>>2]|0;else Aj=4095;c[wb>>2]=Aj;c[xb>>2]=c[(c[mb>>2]|0)+4>>2];c[yb>>2]=(c[ob>>2]|0)-(c[xb>>2]|0);c[zb>>2]=c[(c[nb>>2]|0)+8>>2];c[Ab>>2]=(c[vb>>2]|0)==3?3:4;c[Bb>>2]=c[(c[mb>>2]|0)+36>>2];c[Cb>>2]=Sj(c[ob>>2]|0,c[zb>>2]|0,c[vb>>2]|0)|0;c[Db>>2]=c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2];c[Eb>>2]=c[(c[mb>>2]|0)+44>>2];c[Fb>>2]=(c[(c[nb>>2]|0)+4>>2]|0)-1;c[Gb>>2]=(1<<c[Fb>>2])-1;c[Hb>>2]=0;c[Ib>>2]=0;c[Jb>>2]=c[(c[mb>>2]|0)+8>>2];c[Kb>>2]=c[(c[mb>>2]|0)+12>>2];c[Lb>>2]=(c[Jb>>2]|0)+(c[Kb>>2]|0);c[Mb>>2]=(c[xb>>2]|0)+(c[Kb>>2]|0);if((c[Gb>>2]|0)>>>0>=(c[yb>>2]|0)>>>0)Bj=0;else Bj=(c[yb>>2]|0)-(c[Gb>>2]|0)|0;c[Nb>>2]=Bj;c[Ob>>2]=c[(c[mb>>2]|0)+16>>2];c[Pb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2);c[Qb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2)+4;c[Rb>>2]=(c[yb>>2]|0)+8+1;c[Tb>>2]=0;c[Ub>>2]=1<<c[(c[nb>>2]|0)+12>>2];c[Vb>>2]=(c[ub>>2]|0)-1;c[Wb>>2]=3+(c[sb>>2]|0);c[Xb>>2]=c[sb>>2];while(1){if((c[Xb>>2]|0)>>>0>=(c[Wb>>2]|0)>>>0){dj=340;break;}Zh=c[rb>>2]|0;if((c[Xb>>2]|0)==3)Cj=(c[Zh>>2]|0)-1|0;else Cj=c[Zh+(c[Xb>>2]<<2)>>2]|0;c[Yb>>2]=Cj;c[Zb>>2]=(c[yb>>2]|0)-(c[Yb>>2]|0);c[_b>>2]=0;do{if(((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Kb>>2]|0)|0)>>>0){Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm((c[ob>>2]|0)+(0-(c[Yb>>2]|0))|0,c[Ab>>2]|0)|0))break;Zh=Tj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[ob>>2]|0)+(c[Ab>>2]|0)+(0-(c[Yb>>2]|0))|0,c[pb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}else{c[$b>>2]=(c[Jb>>2]|0)+(c[Zb>>2]|0);if(!(c[qb>>2]|0))break;if(!((((c[Kb>>2]|0)-1-(c[Zb>>2]|0)|0)>>>0>=3?((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Ob>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm(c[$b>>2]|0,c[Ab>>2]|0)|0))break;Zh=Uj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[$b>>2]|0)+(c[Ab>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}}while(0);if((c[_b>>2]|0)>>>0>(c[Vb>>2]|0)>>>0?(c[Vb>>2]=c[_b>>2],c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[Xb>>2]|0)-(c[sb>>2]|0),c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[_b>>2],c[Tb>>2]=(c[Tb>>2]|0)+1,((c[_b>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[_b>>2]|0)|0)==(c[pb>>2]|0))|0):0){dj=338;break;}c[Xb>>2]=(c[Xb>>2]|0)+1;}h:do{if((dj|0)==338){dj=0;c[lb>>2]=c[Tb>>2];}else if((dj|0)==340){dj=0;do{if((c[vb>>2]|0)==3){if((c[Vb>>2]|0)>>>0>=(c[vb>>2]|0)>>>0)break;c[ac>>2]=nm(c[mb>>2]|0,c[ob>>2]|0)|0;if(!(((c[ac>>2]|0)>>>0>(c[Ob>>2]|0)>>>0?((c[yb>>2]|0)-(c[ac>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[qb>>2]|0){if((c[ac>>2]|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=345;break;}c[dc>>2]=(c[Jb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Uj(c[ob>>2]|0,c[dc>>2]|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;}else dj=345;}while(0);if((dj|0)==345){dj=0;c[cc>>2]=(c[xb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Tj(c[ob>>2]|0,c[cc>>2]|0,c[pb>>2]|0)|0;}if((c[bc>>2]|0)>>>0<(c[vb>>2]|0)>>>0)break;c[Vb>>2]=c[bc>>2];c[c[tb>>2]>>2]=(c[yb>>2]|0)-(c[ac>>2]|0)+2;c[(c[tb>>2]|0)+4>>2]=c[bc>>2];c[Tb>>2]=1;if(!(((c[bc>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[bc>>2]|0)|0)==(c[pb>>2]|0))|0))break;c[(c[mb>>2]|0)+24>>2]=(c[yb>>2]|0)+1;c[lb>>2]=1;break h;}}while(0);c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2]=c[yb>>2];while(1){Zh=c[Ub>>2]|0;c[Ub>>2]=Zh+-1;if(!Zh)break;if((c[Db>>2]|0)>>>0<=(c[Ob>>2]|0)>>>0)break;c[ec>>2]=(c[Eb>>2]|0)+((c[Db>>2]&c[Gb>>2])<<1<<2);c[fc>>2]=(c[Hb>>2]|0)>>>0<(c[Ib>>2]|0)>>>0?c[Hb>>2]|0:c[Ib>>2]|0;do{if(c[qb>>2]|0){if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=355;break;}c[gc>>2]=(c[Jb>>2]|0)+(c[Db>>2]|0);Zh=Uj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0<(c[Kb>>2]|0)>>>0)break;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);}else dj=355;}while(0);if((dj|0)==355){dj=0;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);Zh=Tj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;}if((c[fc>>2]|0)>>>0>(c[Vb>>2]|0)>>>0){if((c[fc>>2]|0)>>>0>((c[Rb>>2]|0)-(c[Db>>2]|0)|0)>>>0)c[Rb>>2]=(c[Db>>2]|0)+(c[fc>>2]|0);c[Vb>>2]=c[fc>>2];c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[yb>>2]|0)-(c[Db>>2]|0)+2;c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[fc>>2];c[Tb>>2]=(c[Tb>>2]|0)+1;if((c[fc>>2]|0)>>>0>4096)break;if(((c[ob>>2]|0)+(c[fc>>2]|0)|0)==(c[pb>>2]|0))break;}Zh=c[Db>>2]|0;if((d[(c[gc>>2]|0)+(c[fc>>2]|0)>>0]|0|0)<(d[(c[ob>>2]|0)+(c[fc>>2]|0)>>0]|0|0)){c[c[Pb>>2]>>2]=Zh;c[Hb>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=365;break;}c[Pb>>2]=(c[ec>>2]|0)+4;c[Db>>2]=c[(c[ec>>2]|0)+4>>2];}else{c[c[Qb>>2]>>2]=Zh;c[Ib>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=368;break;}c[Qb>>2]=c[ec>>2];c[Db>>2]=c[c[ec>>2]>>2];}}if((dj|0)==365){dj=0;c[Pb>>2]=Sb;}else if((dj|0)==368){dj=0;c[Qb>>2]=Sb;}c[c[Qb>>2]>>2]=0;c[c[Pb>>2]>>2]=0;c[(c[mb>>2]|0)+24>>2]=(c[Rb>>2]|0)-8;c[lb>>2]=c[Tb>>2];}}while(0);c[md>>2]=c[lb>>2];break d;}}}}while(0);c[Bi>>2]=c[md>>2];if(c[Bi>>2]|0){c[Di>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)+4>>2];if(((c[Di>>2]|0)>>>0>(c[$h>>2]|0)>>>0?1:((c[ei>>2]|0)+(c[Di>>2]|0)|0)>>>0>=4096)|0){dj=481;break b;}c[Ci>>2]=0;while(1){if((c[Ci>>2]|0)>>>0>=(c[Bi>>2]|0)>>>0)break c;c[Ei>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)>>2];pm(Fi,(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0,c[Ei>>2]|0,c[xi>>2]|0);c[Gi>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)+4>>2];if((c[Ci>>2]|0)>>>0>0)Dj=(c[(c[ci>>2]|0)+((c[Ci>>2]|0)-1<<3)+4>>2]|0)+1|0;else Dj=c[ai>>2]|0;c[Hi>>2]=Dj;c[Ii>>2]=c[Gi>>2];i:while(1){if((c[Ii>>2]|0)>>>0<(c[Hi>>2]|0)>>>0)break;c[Ji>>2]=(c[ei>>2]|0)+(c[Ii>>2]|0);Zh=c[Ai>>2]|0;Zi=c[Ii>>2]|0;Ph=c[Th>>2]|0;Qh=c[Rh>>2]|0;c[k>>2]=c[Ei>>2];c[m>>2]=Zi;c[n>>2]=Ph;c[o>>2]=Qh;c[q>>2]=qm((c[k>>2]|0)+1|0)|0;c[r>>2]=(c[m>>2]|0)-3;if(c[(c[n>>2]|0)+56>>2]|0){Qh=(qm((c[r>>2]|0)+1|0)|0)+16|0;c[j>>2]=Qh+(c[q>>2]|0);}else{Qh=(c[q>>2]|0)+(c[(c[n>>2]|0)+52>>2]|0)|0;c[p>>2]=Qh-(qm((c[(c[(c[n>>2]|0)+12>>2]|0)+(c[q>>2]<<2)>>2]|0)+1|0)|0);if((c[o>>2]|0)<2&(c[q>>2]|0)>>>0>=20)c[p>>2]=(c[p>>2]|0)+((c[q>>2]|0)-19<<1);c[s>>2]=rm(c[r>>2]|0)|0;Qh=(c[5840+(c[s>>2]<<2)>>2]|0)+(c[(c[n>>2]|0)+48>>2]|0)|0;Ph=Qh-(qm((c[(c[(c[n>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0)+1|0)|0)|0;c[p>>2]=(c[p>>2]|0)+Ph;c[j>>2]=c[p>>2];}c[Ki>>2]=Zh+(c[j>>2]|0);do{if((c[Ji>>2]|0)>>>0<=(c[fi>>2]|0)>>>0){if((c[Ki>>2]|0)<(c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]|0)){dj=496;break;}if(!(c[Rh>>2]|0))break i;}else dj=496;}while(0);if((dj|0)==496){dj=0;while(1){if((c[fi>>2]|0)>>>0>=(c[Ji>>2]|0)>>>0)break;c[(c[bi>>2]|0)+(((c[fi>>2]|0)+1|0)*28|0)>>2]=1073741824;c[fi>>2]=(c[fi>>2]|0)+1;}c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+8>>2]=c[Ii>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+4>>2]=c[Ei>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+12>>2]=c[yi>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]=c[Ki>>2];Zh=(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+16|0;c[Zh>>2]=c[Fi>>2];c[Zh+4>>2]=c[Fi+4>>2];c[Zh+8>>2]=c[Fi+8>>2];}c[Ii>>2]=(c[Ii>>2]|0)+-1;}c[Ci>>2]=(c[Ci>>2]|0)+1;}}}}while(0);c[ei>>2]=(c[ei>>2]|0)+1;}if((dj|0)==481){dj=0;c[gi>>2]=c[Di>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)>>2];c[fi>>2]=(c[ei>>2]|0)+1;break;}else if((dj|0)==504){dj=0;c[gi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+8>>2];c[hi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+4>>2];c[ei>>2]=(c[fi>>2]|0)-(c[gi>>2]|0);break;}}else{c[gi>>2]=c[mi>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)>>2];c[ei>>2]=0;c[fi>>2]=1;}}while(0);c[Li>>2]=c[gi>>2];c[Mi>>2]=c[hi>>2];c[Ni>>2]=c[ei>>2];while(1){c[Oi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2];c[Pi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2]=c[Li>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2]=c[Mi>>2];c[Li>>2]=c[Oi>>2];c[Mi>>2]=c[Pi>>2];if((c[Oi>>2]|0)>>>0>(c[Ni>>2]|0)>>>0)break;c[Ni>>2]=(c[Ni>>2]|0)-(c[Oi>>2]|0);}c[Qi>>2]=0;while(1){if((c[Qi>>2]|0)>>>0>=(c[fi>>2]|0)>>>0)break;c[Ri>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[Si>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+8>>2];c[Ti>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+4>>2];if((c[Si>>2]|0)==1){c[Vh>>2]=(c[Vh>>2]|0)+1;c[Qi>>2]=(c[Qi>>2]|0)+1;continue;}c[Qi>>2]=(c[Qi>>2]|0)+(c[Si>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+(c[Si>>2]|0);if((c[Ti>>2]|0)>>>0<3){c[Ui>>2]=(c[Ti>>2]|0)+((c[Ri>>2]|0)==0&1);if(c[Ui>>2]|0){Zh=c[Nh>>2]|0;if((c[Ui>>2]|0)==3)Ej=(c[Zh>>2]|0)-1|0;else Ej=c[Zh+(c[Ui>>2]<<2)>>2]|0;c[Vi>>2]=Ej;if((c[Ui>>2]|0)>>>0>=2)c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=c[Vi>>2];}}else{c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=(c[Ti>>2]|0)-2;}vm(c[Th>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,c[Si>>2]|0);wm(c[Mh>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,(c[Si>>2]|0)-3|0);c[Wh>>2]=c[Vh>>2];}xm(c[Th>>2]|0);}l=i;return(c[Xh>>2]|0)-(c[Wh>>2]|0)|0;}function lm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=e;c[(c[g>>2]|0)+56>>2]=0;if(c[(c[g>>2]|0)+28>>2]|0){c[(c[g>>2]|0)+24>>2]=0;c[k>>2]=0;while(1){m=c[g>>2]|0;if((c[k>>2]|0)>>>0>255)break;c[(c[c[g>>2]>>2]|0)+(c[k>>2]<<2)>>2]=1+((c[(c[m>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>5);e=(c[g>>2]|0)+24|0;c[e>>2]=(c[e>>2]|0)+(c[(c[c[g>>2]>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1;}c[m+28>>2]=0;c[k>>2]=0;while(1){n=c[g>>2]|0;if((c[k>>2]|0)>>>0>35)break;c[(c[(c[g>>2]|0)+4>>2]|0)+(c[k>>2]<<2)>>2]=1+((c[(c[n+4>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>5);m=(c[g>>2]|0)+28|0;c[m>>2]=(c[m>>2]|0)+(c[(c[(c[g>>2]|0)+4>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1;}c[n+32>>2]=0;c[k>>2]=0;while(1){o=c[g>>2]|0;if((c[k>>2]|0)>>>0>52)break;c[(c[(c[g>>2]|0)+8>>2]|0)+(c[k>>2]<<2)>>2]=1+((c[(c[o+8>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>4);n=(c[g>>2]|0)+32|0;c[n>>2]=(c[n>>2]|0)+(c[(c[(c[g>>2]|0)+8>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1;}c[o+36>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>31)break;c[(c[(c[g>>2]|0)+12>>2]|0)+(c[k>>2]<<2)>>2]=1+((c[(c[(c[g>>2]|0)+12>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>4);o=(c[g>>2]|0)+36|0;c[o>>2]=(c[o>>2]|0)+(c[(c[(c[g>>2]|0)+12>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1;}p=c[g>>2]|0;xm(p);l=f;return;}if((c[i>>2]|0)>>>0<=1024)c[(c[g>>2]|0)+56>>2]=1;c[j>>2]=0;while(1){if((c[j>>2]|0)>>>0>255)break;c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<2)>>2]=0;c[j>>2]=(c[j>>2]|0)+1;}c[j>>2]=0;while(1){q=c[g>>2]|0;if((c[j>>2]|0)>>>0>=(c[i>>2]|0)>>>0)break;k=(c[q>>2]|0)+((d[(c[h>>2]|0)+(c[j>>2]|0)>>0]|0)<<2)|0;c[k>>2]=(c[k>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1;}c[q+24>>2]=0;c[j>>2]=0;while(1){if((c[j>>2]|0)>>>0>255)break;c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<2)>>2]=1+((c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<2)>>2]|0)>>>4);q=(c[g>>2]|0)+24|0;c[q>>2]=(c[q>>2]|0)+(c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<2)>>2]|0);c[j>>2]=(c[j>>2]|0)+1;}c[j>>2]=0;while(1){r=c[g>>2]|0;if((c[j>>2]|0)>>>0>35)break;c[(c[r+4>>2]|0)+(c[j>>2]<<2)>>2]=1;c[j>>2]=(c[j>>2]|0)+1;}c[r+28>>2]=36;c[j>>2]=0;while(1){s=c[g>>2]|0;if((c[j>>2]|0)>>>0>52)break;c[(c[s+8>>2]|0)+(c[j>>2]<<2)>>2]=1;c[j>>2]=(c[j>>2]|0)+1;}c[s+32>>2]=53;c[j>>2]=0;while(1){t=c[g>>2]|0;if((c[j>>2]|0)>>>0>31)break;c[(c[t+12>>2]|0)+(c[j>>2]<<2)>>2]=1;c[j>>2]=(c[j>>2]|0)+1;}c[t+36>>2]=32;p=c[g>>2]|0;xm(p);l=f;return;}function mm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;c[g>>2]=b;do{if((c[g>>2]|0)==3){b=(_j()|0)!=0;a=Yj(c[f>>2]|0)|0;if(b){c[e>>2]=a<<8;break;}else{c[e>>2]=a>>>8;break;}}else c[e>>2]=Yj(c[f>>2]|0)|0;}while(0);l=d;return c[e>>2]|0;}function nm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+32|0;e=d+28|0;f=d+24|0;g=d+20|0;h=d+16|0;i=d+12|0;j=d+8|0;k=d+4|0;m=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[(c[e>>2]|0)+40>>2];c[h>>2]=c[(c[e>>2]|0)+32>>2];c[i>>2]=c[(c[e>>2]|0)+4>>2];c[j>>2]=c[(c[e>>2]|0)+28>>2];b=(c[f>>2]|0)-(c[i>>2]|0)|0;c[(c[e>>2]|0)+28>>2]=b;c[k>>2]=b;c[m>>2]=Fm(c[f>>2]|0,c[h>>2]|0)|0;while(1){if((c[j>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;f=c[j>>2]|0;b=c[g>>2]|0;c[b+((Fm((c[i>>2]|0)+(c[j>>2]|0)|0,c[h>>2]|0)|0)<<2)>>2]=f;c[j>>2]=(c[j>>2]|0)+1;}l=d;return c[(c[g>>2]|0)+(c[m>>2]<<2)>>2]|0;}function om(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;e=Dm(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0,c[j>>2]|0)|0;h=e+(Cm(c[i>>2]|0,c[j>>2]|0)|0)|0;l=f;return h|0;}function pm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=b;c[h>>2]=d;c[i>>2]=e;if((c[h>>2]|0)>>>0>=3){c[j+8>>2]=c[(c[g>>2]|0)+4>>2];c[j+4>>2]=c[c[g>>2]>>2];c[j>>2]=(c[h>>2]|0)-2;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}c[k>>2]=(c[h>>2]|0)+(c[i>>2]|0);if((c[k>>2]|0)>>>0<=0){i=c[g>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}i=c[g>>2]|0;if((c[k>>2]|0)==3)n=(c[i>>2]|0)-1|0;else n=c[i+(c[k>>2]<<2)>>2]|0;c[m>>2]=n;n=c[g>>2]|0;if((c[k>>2]|0)>>>0>=2)o=c[n+4>>2]|0;else o=c[n+8>>2]|0;c[j+8>>2]=o;c[j+4>>2]=c[c[g>>2]>>2];c[j>>2]=c[m>>2];c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}function qm(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function rm(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;if((c[e>>2]|0)>>>0>127){f=(qm(a)|0)+36|0;l=b;return f|0;}else{f=d[3072+a>>0]|0;l=b;return f|0;}return 0;}function sm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=Bm(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;c[i>>2]=d+(Em(c[g>>2]|0,c[h>>2]|0)|0);l=e;return c[i>>2]|0;}function tm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;e=Dm(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0,c[j>>2]|0)|0;c[k>>2]=e+(Em(c[i>>2]|0,c[j>>2]|0)|0);l=f;return c[k>>2]|0;}function um(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=Bm(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;f=d+(Cm(c[g>>2]|0,c[h>>2]|0)|0)|0;l=e;return f|0;}function vm(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+48|0;i=h+36|0;j=h+32|0;k=h+28|0;m=h+24|0;n=h+20|0;o=h+16|0;p=h+12|0;q=h+8|0;r=h+4|0;s=h;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=0;while(1){if((c[o>>2]|0)>>>0>=(c[j>>2]|0)>>>0)break;g=(c[c[i>>2]>>2]|0)+((d[(c[k>>2]|0)+(c[o>>2]|0)>>0]|0)<<2)|0;c[g>>2]=(c[g>>2]|0)+2;c[o>>2]=(c[o>>2]|0)+1;}o=(c[i>>2]|0)+24|0;c[o>>2]=(c[o>>2]|0)+(c[j>>2]<<1);c[p>>2]=Am(c[j>>2]|0)|0;j=(c[(c[i>>2]|0)+4>>2]|0)+(c[p>>2]<<2)|0;c[j>>2]=(c[j>>2]|0)+1;j=(c[i>>2]|0)+28|0;c[j>>2]=(c[j>>2]|0)+1;c[q>>2]=qm((c[m>>2]|0)+1|0)|0;m=(c[(c[i>>2]|0)+12>>2]|0)+(c[q>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+1;m=(c[i>>2]|0)+36|0;c[m>>2]=(c[m>>2]|0)+1;c[r>>2]=(c[n>>2]|0)-3;c[s>>2]=rm(c[r>>2]|0)|0;r=(c[(c[i>>2]|0)+8>>2]|0)+(c[s>>2]<<2)|0;c[r>>2]=(c[r>>2]|0)+1;r=(c[i>>2]|0)+32|0;c[r>>2]=(c[r>>2]|0)+1;l=h;return;}function wm(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;ym(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function xm(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=qm((c[(c[d>>2]|0)+24>>2]|0)+1|0)|0;c[(c[d>>2]|0)+40>>2]=a;a=qm((c[(c[d>>2]|0)+28>>2]|0)+1|0)|0;c[(c[d>>2]|0)+44>>2]=a;a=qm((c[(c[d>>2]|0)+32>>2]|0)+1|0)|0;c[(c[d>>2]|0)+48>>2]=a;a=qm((c[(c[d>>2]|0)+36>>2]|0)+1|0)|0;c[(c[d>>2]|0)+52>>2]=a;l=b;return;}function ym(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{zm(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function zm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Am(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;if((c[e>>2]|0)>>>0>63){f=(qm(a)|0)+19|0;l=b;return f|0;}else{f=d[3008+a>>0]|0;l=b;return f|0;}return 0;}function Bm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;e=c[i>>2]|0;if(c[(c[j>>2]|0)+56>>2]|0){c[g>>2]=e*6;n=c[g>>2]|0;l=f;return n|0;}if(!e){c[g>>2]=0;n=c[g>>2]|0;l=f;return n|0;}c[m>>2]=N(c[i>>2]|0,c[(c[j>>2]|0)+40>>2]|0)|0;c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>=(c[i>>2]|0)>>>0)break;e=qm((c[(c[c[j>>2]>>2]|0)+((d[(c[h>>2]|0)+(c[k>>2]|0)>>0]|0)<<2)>>2]|0)+1|0)|0;c[m>>2]=(c[m>>2]|0)-e;c[k>>2]=(c[k>>2]|0)+1;}c[g>>2]=c[m>>2];n=c[g>>2]|0;l=f;return n|0;}function Cm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[f>>2]=a;c[g>>2]=b;b=c[f>>2]|0;if(c[(c[g>>2]|0)+56>>2]|0){c[e>>2]=qm(b+1|0)|0;j=c[e>>2]|0;l=d;return j|0;}else{c[h>>2]=Am(b)|0;b=(c[5696+(c[h>>2]<<2)>>2]|0)+(c[(c[g>>2]|0)+44>>2]|0)|0;c[i>>2]=b-(qm((c[(c[(c[g>>2]|0)+4>>2]|0)+(c[h>>2]<<2)>>2]|0)+1|0)|0);c[e>>2]=c[i>>2];j=c[e>>2]|0;l=d;return j|0;}return 0;}function Dm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;if((c[h>>2]|0)==(c[c[g>>2]>>2]|0)){c[k>>2]=c[(c[g>>2]|0)+8>>2];c[n>>2]=(c[h>>2]|0)+(c[(c[g>>2]|0)+4>>2]|0);c[m>>2]=(c[i>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);}else{c[k>>2]=0;c[n>>2]=c[h>>2];c[m>>2]=c[i>>2];}e=c[k>>2]|0;c[o>>2]=e+(Bm(c[n>>2]|0,c[m>>2]|0,c[j>>2]|0)|0);c[c[g>>2]>>2]=c[h>>2];c[(c[g>>2]|0)+4>>2]=c[i>>2];c[(c[g>>2]|0)+8>>2]=c[o>>2];l=f;return c[o>>2]|0;}function Em(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[f>>2]=a;c[g>>2]=b;b=c[f>>2]|0;if(c[(c[g>>2]|0)+56>>2]|0){c[e>>2]=qm(b+1|0)|0;j=c[e>>2]|0;l=d;return j|0;}else{c[h>>2]=Am(b)|0;b=c[5696+(c[h>>2]<<2)>>2]|0;f=b+(qm((c[c[(c[g>>2]|0)+4>>2]>>2]|0)+1|0)|0)|0;c[i>>2]=f-(qm((c[(c[(c[g>>2]|0)+4>>2]|0)+(c[h>>2]<<2)>>2]|0)+1|0)|0);c[e>>2]=c[i>>2];j=c[e>>2]|0;l=d;return j|0;}return 0;}function Fm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Gm(c[e>>2]|0)|0;e=Hm(b,c[f>>2]|0)|0;l=d;return e|0;}function Gm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(_j()|0)!=0;f=Yj(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Im(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Hm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]<<8,506832829)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function Im(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Jm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;switch(c[(c[j>>2]|0)+16>>2]|0){case 7:case 6:{c[h>>2]=Vm(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,6)|0;o=c[h>>2]|0;l=g;return o|0;}case 5:{c[h>>2]=Vm(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,5)|0;o=c[h>>2]|0;l=g;return o|0;}default:{c[h>>2]=Vm(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,4)|0;o=c[h>>2]|0;l=g;return o|0;}}return 0;}function Km(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0;h=l;l=l+320|0;i=h+308|0;j=h+304|0;k=h+300|0;m=h+296|0;n=h+292|0;o=h+288|0;p=h+284|0;q=h+280|0;r=h+276|0;s=h+272|0;t=h+268|0;u=h+264|0;v=h+260|0;w=h+256|0;x=h+252|0;y=h+248|0;z=h+244|0;A=h+240|0;B=h+236|0;C=h+232|0;D=h+228|0;E=h+224|0;F=h+220|0;G=h+216|0;H=h+212|0;I=h+208|0;J=h+204|0;K=h+200|0;L=h+196|0;M=h+192|0;N=h+188|0;O=h+184|0;P=h+180|0;Q=h+176|0;R=h+172|0;S=h+168|0;T=h+164|0;U=h+160|0;V=h+156|0;W=h+152|0;X=h+148|0;Y=h+144|0;Z=h+140|0;_=h+136|0;$=h+132|0;aa=h+128|0;ba=h+124|0;ca=h+120|0;da=h+116|0;ea=h+112|0;fa=h+108|0;ga=h+104|0;ha=h+100|0;ia=h+96|0;ja=h+92|0;ka=h+88|0;la=h+84|0;ma=h+80|0;na=h+76|0;oa=h+72|0;pa=h+68|0;qa=h+64|0;ra=h+60|0;sa=h+56|0;ta=h+52|0;ua=h+48|0;va=h+44|0;wa=h+40|0;xa=h+36|0;ya=h+32|0;za=h+28|0;Aa=h+24|0;Ba=h+20|0;Ca=h+16|0;Da=h+12|0;Ea=h+8|0;Fa=h+4|0;Ga=h;c[Ca>>2]=a;c[Da>>2]=b;c[Ea>>2]=e;c[Fa>>2]=f;c[Ga>>2]=g;switch(c[(c[Da>>2]|0)+16>>2]|0){case 7:case 6:{g=c[Da>>2]|0;f=c[Ea>>2]|0;e=c[Fa>>2]|0;b=c[Ga>>2]|0;c[i>>2]=c[Ca>>2];c[j>>2]=g;c[k>>2]=f;c[m>>2]=e;c[n>>2]=b;c[o>>2]=6;c[p>>2]=1;c[q>>2]=c[(c[i>>2]|0)+44>>2];c[r>>2]=1<<c[(c[j>>2]|0)+4>>2];c[s>>2]=(c[r>>2]|0)-1;c[t>>2]=c[(c[i>>2]|0)+4>>2];c[u>>2]=c[(c[i>>2]|0)+8>>2];c[v>>2]=c[(c[i>>2]|0)+12>>2];c[w>>2]=(c[t>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[y>>2]=c[(c[i>>2]|0)+16>>2];c[z>>2]=(c[k>>2]|0)-(c[t>>2]|0);if((c[z>>2]|0)>>>0>(c[r>>2]|0)>>>0)Ha=(c[z>>2]|0)-(c[r>>2]|0)|0;else Ha=0;c[A>>2]=Ha;c[B>>2]=1<<c[(c[j>>2]|0)+12>>2];c[C>>2]=3;c[D>>2]=mk(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0)|0;while(1){if(!(((c[B>>2]|0)>>>0>0?(c[D>>2]|0)>>>0>(c[y>>2]|0)>>>0:0)|0))break;c[E>>2]=0;if(c[p>>2]|0?(c[D>>2]|0)>>>0<(c[v>>2]|0)>>>0:0){c[G>>2]=(c[u>>2]|0)+(c[D>>2]|0);o=Bk(c[G>>2]|0)|0;if((o|0)==(Bk(c[k>>2]|0)|0))c[E>>2]=(Lm((c[k>>2]|0)+4|0,(c[G>>2]|0)+4|0,c[m>>2]|0,c[x>>2]|0,c[w>>2]|0)|0)+4;}else Ia=38;if((Ia|0)==38?(Ia=0,c[F>>2]=(c[t>>2]|0)+(c[D>>2]|0),(d[(c[F>>2]|0)+(c[C>>2]|0)>>0]|0|0)==(d[(c[k>>2]|0)+(c[C>>2]|0)>>0]|0|0)):0)c[E>>2]=Qm(c[k>>2]|0,c[F>>2]|0,c[m>>2]|0)|0;if((c[E>>2]|0)>>>0>(c[C>>2]|0)>>>0?(c[C>>2]=c[E>>2],c[c[n>>2]>>2]=(c[z>>2]|0)-(c[D>>2]|0)+2,((c[k>>2]|0)+(c[E>>2]|0)|0)==(c[m>>2]|0)):0)break;if((c[D>>2]|0)>>>0<=(c[A>>2]|0)>>>0)break;c[D>>2]=c[(c[q>>2]|0)+((c[D>>2]&c[s>>2])<<2)>>2];c[B>>2]=(c[B>>2]|0)+-1;}c[Ba>>2]=c[C>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}case 5:{C=c[Da>>2]|0;B=c[Ea>>2]|0;s=c[Fa>>2]|0;D=c[Ga>>2]|0;c[H>>2]=c[Ca>>2];c[I>>2]=C;c[J>>2]=B;c[K>>2]=s;c[L>>2]=D;c[M>>2]=5;c[N>>2]=1;c[O>>2]=c[(c[H>>2]|0)+44>>2];c[P>>2]=1<<c[(c[I>>2]|0)+4>>2];c[Q>>2]=(c[P>>2]|0)-1;c[R>>2]=c[(c[H>>2]|0)+4>>2];c[S>>2]=c[(c[H>>2]|0)+8>>2];c[T>>2]=c[(c[H>>2]|0)+12>>2];c[U>>2]=(c[R>>2]|0)+(c[T>>2]|0);c[V>>2]=(c[S>>2]|0)+(c[T>>2]|0);c[W>>2]=c[(c[H>>2]|0)+16>>2];c[X>>2]=(c[J>>2]|0)-(c[R>>2]|0);if((c[X>>2]|0)>>>0>(c[P>>2]|0)>>>0)Ka=(c[X>>2]|0)-(c[P>>2]|0)|0;else Ka=0;c[Y>>2]=Ka;c[Z>>2]=1<<c[(c[I>>2]|0)+12>>2];c[_>>2]=3;c[$>>2]=mk(c[H>>2]|0,c[I>>2]|0,c[J>>2]|0,c[M>>2]|0)|0;while(1){if(!(((c[Z>>2]|0)>>>0>0?(c[$>>2]|0)>>>0>(c[W>>2]|0)>>>0:0)|0))break;c[aa>>2]=0;if(c[N>>2]|0?(c[$>>2]|0)>>>0<(c[T>>2]|0)>>>0:0){c[ca>>2]=(c[S>>2]|0)+(c[$>>2]|0);M=Bk(c[ca>>2]|0)|0;if((M|0)==(Bk(c[J>>2]|0)|0))c[aa>>2]=(Lm((c[J>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[K>>2]|0,c[V>>2]|0,c[U>>2]|0)|0)+4;}else Ia=23;if((Ia|0)==23?(Ia=0,c[ba>>2]=(c[R>>2]|0)+(c[$>>2]|0),(d[(c[ba>>2]|0)+(c[_>>2]|0)>>0]|0|0)==(d[(c[J>>2]|0)+(c[_>>2]|0)>>0]|0|0)):0)c[aa>>2]=Qm(c[J>>2]|0,c[ba>>2]|0,c[K>>2]|0)|0;if((c[aa>>2]|0)>>>0>(c[_>>2]|0)>>>0?(c[_>>2]=c[aa>>2],c[c[L>>2]>>2]=(c[X>>2]|0)-(c[$>>2]|0)+2,((c[J>>2]|0)+(c[aa>>2]|0)|0)==(c[K>>2]|0)):0)break;if((c[$>>2]|0)>>>0<=(c[Y>>2]|0)>>>0)break;c[$>>2]=c[(c[O>>2]|0)+((c[$>>2]&c[Q>>2])<<2)>>2];c[Z>>2]=(c[Z>>2]|0)+-1;}c[Ba>>2]=c[_>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}default:{_=c[Da>>2]|0;Da=c[Ea>>2]|0;Ea=c[Fa>>2]|0;Fa=c[Ga>>2]|0;c[da>>2]=c[Ca>>2];c[ea>>2]=_;c[fa>>2]=Da;c[ga>>2]=Ea;c[ha>>2]=Fa;c[ia>>2]=4;c[ja>>2]=1;c[ka>>2]=c[(c[da>>2]|0)+44>>2];c[la>>2]=1<<c[(c[ea>>2]|0)+4>>2];c[ma>>2]=(c[la>>2]|0)-1;c[na>>2]=c[(c[da>>2]|0)+4>>2];c[oa>>2]=c[(c[da>>2]|0)+8>>2];c[pa>>2]=c[(c[da>>2]|0)+12>>2];c[qa>>2]=(c[na>>2]|0)+(c[pa>>2]|0);c[ra>>2]=(c[oa>>2]|0)+(c[pa>>2]|0);c[sa>>2]=c[(c[da>>2]|0)+16>>2];c[ta>>2]=(c[fa>>2]|0)-(c[na>>2]|0);if((c[ta>>2]|0)>>>0>(c[la>>2]|0)>>>0)La=(c[ta>>2]|0)-(c[la>>2]|0)|0;else La=0;c[ua>>2]=La;c[va>>2]=1<<c[(c[ea>>2]|0)+12>>2];c[wa>>2]=3;c[xa>>2]=mk(c[da>>2]|0,c[ea>>2]|0,c[fa>>2]|0,c[ia>>2]|0)|0;while(1){if(!(((c[va>>2]|0)>>>0>0?(c[xa>>2]|0)>>>0>(c[sa>>2]|0)>>>0:0)|0))break;c[ya>>2]=0;if(c[ja>>2]|0?(c[xa>>2]|0)>>>0<(c[pa>>2]|0)>>>0:0){c[Aa>>2]=(c[oa>>2]|0)+(c[xa>>2]|0);ia=Bk(c[Aa>>2]|0)|0;if((ia|0)==(Bk(c[fa>>2]|0)|0))c[ya>>2]=(Lm((c[fa>>2]|0)+4|0,(c[Aa>>2]|0)+4|0,c[ga>>2]|0,c[ra>>2]|0,c[qa>>2]|0)|0)+4;}else Ia=8;if((Ia|0)==8?(Ia=0,c[za>>2]=(c[na>>2]|0)+(c[xa>>2]|0),(d[(c[za>>2]|0)+(c[wa>>2]|0)>>0]|0|0)==(d[(c[fa>>2]|0)+(c[wa>>2]|0)>>0]|0|0)):0)c[ya>>2]=Qm(c[fa>>2]|0,c[za>>2]|0,c[ga>>2]|0)|0;if((c[ya>>2]|0)>>>0>(c[wa>>2]|0)>>>0?(c[wa>>2]=c[ya>>2],c[c[ha>>2]>>2]=(c[ta>>2]|0)-(c[xa>>2]|0)+2,((c[fa>>2]|0)+(c[ya>>2]|0)|0)==(c[ga>>2]|0)):0)break;if((c[xa>>2]|0)>>>0<=(c[ua>>2]|0)>>>0)break;c[xa>>2]=c[(c[ka>>2]|0)+((c[xa>>2]&c[ma>>2])<<2)>>2];c[va>>2]=(c[va>>2]|0)+-1;}c[Ba>>2]=c[wa>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}}return 0;}function Lm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=Qm(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(Qm((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function Mm(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Nm(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;Om(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function Om(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Pm(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Pm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Qm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=Rm(c[i>>2]|0)|0;c[n>>2]=e^(Rm(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=Sm(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=Rm(c[i>>2]|0)|0;c[o>>2]=e^(Rm(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=Sm(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((Tm()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=Bk(c[i>>2]|0)|0,(o|0)==(Bk(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(Um(c[i>>2]|0)|0)&65535,(o|0)==((Um(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function Rm(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Sm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(vk()|0)!=0;f=(Tm()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function Tm(){return 0;}function Um(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Vm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;if((c[m>>2]|0)>>>0<((c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+24>>2]|0)|0)>>>0){c[i>>2]=0;q=c[i>>2]|0;l=h;return q|0;}else{Wm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[p>>2]|0);c[i>>2]=Xm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,1)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function Wm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+48|0;m=g+44|0;n=g+40|0;o=g+36|0;p=g+32|0;q=g+28|0;r=g+24|0;s=g+20|0;t=g+16|0;u=g+12|0;v=g+8|0;w=g+4|0;x=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[g+52>>2]=e;c[k>>2]=f;c[m>>2]=c[(c[h>>2]|0)+36>>2];c[n>>2]=c[(c[i>>2]|0)+8>>2];c[o>>2]=c[(c[h>>2]|0)+44>>2];c[p>>2]=(c[(c[i>>2]|0)+4>>2]|0)-1;c[q>>2]=(1<<c[p>>2])-1;c[r>>2]=c[(c[h>>2]|0)+4>>2];c[s>>2]=(c[j>>2]|0)-(c[r>>2]|0);c[t>>2]=c[(c[h>>2]|0)+24>>2];while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[u>>2]=nk((c[r>>2]|0)+(c[t>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0;c[v>>2]=c[(c[m>>2]|0)+(c[u>>2]<<2)>>2];c[w>>2]=(c[o>>2]|0)+((c[t>>2]&c[q>>2])<<1<<2);c[x>>2]=(c[w>>2]|0)+4;c[(c[m>>2]|0)+(c[u>>2]<<2)>>2]=c[t>>2];c[c[w>>2]>>2]=c[v>>2];c[c[x>>2]>>2]=1;c[t>>2]=(c[t>>2]|0)+1;}c[(c[h>>2]|0)+24>>2]=c[s>>2];l=g;return;}function Xm(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;j=l;l=l+176|0;k=j+160|0;m=j+156|0;n=j+152|0;o=j+148|0;p=j+144|0;q=j+140|0;r=j+136|0;s=j+132|0;t=j+128|0;u=j+124|0;v=j+120|0;w=j+116|0;x=j+112|0;y=j+108|0;z=j+104|0;A=j+100|0;B=j+96|0;C=j+92|0;D=j+88|0;E=j+84|0;F=j+80|0;G=j+76|0;H=j+72|0;I=j+68|0;J=j+64|0;K=j+60|0;L=j+56|0;M=j+52|0;N=j+48|0;O=j+44|0;P=j+40|0;Q=j+36|0;R=j+32|0;S=j+28|0;T=j+24|0;U=j+20|0;V=j+16|0;W=j+12|0;X=j+8|0;Y=j+4|0;Z=j;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=c[(c[k>>2]|0)+36>>2];c[t>>2]=c[(c[m>>2]|0)+8>>2];c[u>>2]=nk(c[n>>2]|0,c[t>>2]|0,c[q>>2]|0)|0;c[v>>2]=c[(c[s>>2]|0)+(c[u>>2]<<2)>>2];c[w>>2]=c[(c[k>>2]|0)+4>>2];c[x>>2]=(c[n>>2]|0)-(c[w>>2]|0);c[y>>2]=c[(c[k>>2]|0)+16>>2];c[z>>2]=c[(c[k>>2]|0)+44>>2];c[A>>2]=(c[(c[m>>2]|0)+4>>2]|0)-1;c[B>>2]=(1<<c[A>>2])-1;if((c[B>>2]|0)>>>0>=(c[x>>2]|0)>>>0)_=0;else _=(c[x>>2]|0)-(c[B>>2]|0)|0;c[C>>2]=_;c[D>>2]=(c[C>>2]|0)>>>0>(c[y>>2]|0)>>>0?c[C>>2]|0:c[y>>2]|0;c[E>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2);c[F>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2)+4;c[G>>2]=1<<c[(c[m>>2]|0)+12>>2];c[H>>2]=c[G>>2];c[I>>2]=0;while(1){if((c[v>>2]|0)>>>0<=(c[D>>2]|0)>>>0)break;if(!((c[H>>2]|0)>>>0>1?(c[c[F>>2]>>2]|0)==1:0))break;c[c[F>>2]>>2]=c[I>>2];c[I>>2]=c[v>>2];c[v>>2]=c[c[E>>2]>>2];c[E>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2);c[F>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2)+4;c[H>>2]=(c[H>>2]|0)+-1;}if((c[v>>2]|0)>>>0>(c[D>>2]|0)>>>0?(c[c[F>>2]>>2]|0)==1:0){c[c[F>>2]>>2]=0;c[c[E>>2]>>2]=0;}c[v>>2]=c[I>>2];while(1){if(!(c[v>>2]|0))break;c[J>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2)+4;c[K>>2]=c[c[J>>2]>>2];Ym(c[k>>2]|0,c[m>>2]|0,c[v>>2]|0,c[o>>2]|0,c[H>>2]|0,c[D>>2]|0,c[r>>2]|0);c[v>>2]=c[K>>2];c[H>>2]=(c[H>>2]|0)+1;}c[L>>2]=0;c[M>>2]=0;c[N>>2]=c[(c[k>>2]|0)+8>>2];c[O>>2]=c[(c[k>>2]|0)+12>>2];c[P>>2]=(c[N>>2]|0)+(c[O>>2]|0);c[Q>>2]=(c[w>>2]|0)+(c[O>>2]|0);c[R>>2]=(c[z>>2]|0)+((c[x>>2]&c[B>>2])<<1<<2);c[S>>2]=(c[z>>2]|0)+((c[x>>2]&c[B>>2])<<1<<2)+4;c[T>>2]=(c[x>>2]|0)+8+1;c[V>>2]=0;c[v>>2]=c[(c[s>>2]|0)+(c[u>>2]<<2)>>2];c[(c[s>>2]|0)+(c[u>>2]<<2)>>2]=c[x>>2];while(1){u=c[G>>2]|0;c[G>>2]=u+-1;if(!u)break;if((c[v>>2]|0)>>>0<=(c[y>>2]|0)>>>0)break;c[W>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2);c[X>>2]=(c[L>>2]|0)>>>0<(c[M>>2]|0)>>>0?c[L>>2]|0:c[M>>2]|0;if(c[r>>2]|0?((c[v>>2]|0)+(c[X>>2]|0)|0)>>>0<(c[O>>2]|0)>>>0:0){c[Y>>2]=(c[N>>2]|0)+(c[v>>2]|0);u=Lm((c[n>>2]|0)+(c[X>>2]|0)|0,(c[Y>>2]|0)+(c[X>>2]|0)|0,c[o>>2]|0,c[P>>2]|0,c[Q>>2]|0)|0;c[X>>2]=(c[X>>2]|0)+u;if(((c[v>>2]|0)+(c[X>>2]|0)|0)>>>0>=(c[O>>2]|0)>>>0)c[Y>>2]=(c[w>>2]|0)+(c[v>>2]|0);}else{c[Y>>2]=(c[w>>2]|0)+(c[v>>2]|0);u=Qm((c[n>>2]|0)+(c[X>>2]|0)|0,(c[Y>>2]|0)+(c[X>>2]|0)|0,c[o>>2]|0)|0;c[X>>2]=(c[X>>2]|0)+u;}if((c[X>>2]|0)>>>0>(c[V>>2]|0)>>>0){if((c[X>>2]|0)>>>0>((c[T>>2]|0)-(c[v>>2]|0)|0)>>>0)c[T>>2]=(c[v>>2]|0)+(c[X>>2]|0);u=(c[X>>2]|0)-(c[V>>2]|0)<<2;s=Mm((c[x>>2]|0)-(c[v>>2]|0)+1|0)|0;if((u|0)>(s-(Mm((c[c[p>>2]>>2]|0)+1|0)|0)|0)){c[V>>2]=c[X>>2];c[c[p>>2]>>2]=2+(c[x>>2]|0)-(c[v>>2]|0);}if(((c[n>>2]|0)+(c[X>>2]|0)|0)==(c[o>>2]|0))break;}s=c[v>>2]|0;if((d[(c[Y>>2]|0)+(c[X>>2]|0)>>0]|0|0)<(d[(c[n>>2]|0)+(c[X>>2]|0)>>0]|0|0)){c[c[R>>2]>>2]=s;c[L>>2]=c[X>>2];if((c[v>>2]|0)>>>0<=(c[C>>2]|0)>>>0){$=29;break;}c[R>>2]=(c[W>>2]|0)+4;c[v>>2]=c[(c[W>>2]|0)+4>>2];}else{c[c[S>>2]>>2]=s;c[M>>2]=c[X>>2];if((c[v>>2]|0)>>>0<=(c[C>>2]|0)>>>0){$=32;break;}c[S>>2]=c[W>>2];c[v>>2]=c[c[W>>2]>>2];}}if(($|0)==29)c[R>>2]=U;else if(($|0)==32)c[S>>2]=U;c[c[S>>2]>>2]=0;c[c[R>>2]>>2]=0;c[(c[k>>2]|0)+24>>2]=(c[T>>2]|0)-8;if((c[V>>2]|0)>>>0<3){aa=c[V>>2]|0;l=j;return aa|0;}c[Z>>2]=(c[x>>2]|0)-((c[c[p>>2]>>2]|0)-2);aa=c[V>>2]|0;l=j;return aa|0;}function Ym(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;j=l;l=l+112|0;k=j+108|0;m=j+104|0;n=j+100|0;o=j+96|0;p=j+92|0;q=j+88|0;r=j+84|0;s=j+80|0;t=j+76|0;u=j+72|0;v=j+68|0;w=j+64|0;x=j+60|0;y=j+56|0;z=j+52|0;A=j+48|0;B=j+44|0;C=j+40|0;D=j+36|0;E=j+32|0;F=j+28|0;G=j+24|0;H=j+20|0;I=j+16|0;J=j+12|0;K=j+8|0;L=j+4|0;M=j;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=c[(c[k>>2]|0)+44>>2];c[t>>2]=(c[(c[m>>2]|0)+4>>2]|0)-1;c[u>>2]=(1<<c[t>>2])-1;c[v>>2]=0;c[w>>2]=0;c[x>>2]=c[(c[k>>2]|0)+4>>2];c[y>>2]=c[(c[k>>2]|0)+8>>2];c[z>>2]=c[(c[k>>2]|0)+12>>2];c[A>>2]=(c[n>>2]|0)>>>0>=(c[z>>2]|0)>>>0?(c[x>>2]|0)+(c[n>>2]|0)|0:(c[y>>2]|0)+(c[n>>2]|0)|0;c[B>>2]=(c[n>>2]|0)>>>0>=(c[z>>2]|0)>>>0?c[o>>2]|0:(c[y>>2]|0)+(c[z>>2]|0)|0;c[C>>2]=(c[y>>2]|0)+(c[z>>2]|0);c[D>>2]=(c[x>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[s>>2]|0)+((c[n>>2]&c[u>>2])<<1<<2);c[G>>2]=(c[F>>2]|0)+4;c[H>>2]=c[c[F>>2]>>2];c[J>>2]=c[(c[k>>2]|0)+16>>2];while(1){k=c[p>>2]|0;c[p>>2]=k+-1;if(!k){N=23;break;}if((c[H>>2]|0)>>>0<=(c[J>>2]|0)>>>0){N=23;break;}c[K>>2]=(c[s>>2]|0)+((c[H>>2]&c[u>>2])<<1<<2);c[L>>2]=(c[v>>2]|0)>>>0<(c[w>>2]|0)>>>0?c[v>>2]|0:c[w>>2]|0;if((c[r>>2]|0?((c[H>>2]|0)+(c[L>>2]|0)|0)>>>0<(c[z>>2]|0)>>>0:0)?(c[n>>2]|0)>>>0>=(c[z>>2]|0)>>>0:0){c[E>>2]=(c[y>>2]|0)+(c[H>>2]|0);k=Lm((c[A>>2]|0)+(c[L>>2]|0)|0,(c[E>>2]|0)+(c[L>>2]|0)|0,c[B>>2]|0,c[C>>2]|0,c[D>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+k;if(((c[H>>2]|0)+(c[L>>2]|0)|0)>>>0>=(c[z>>2]|0)>>>0)c[E>>2]=(c[x>>2]|0)+(c[H>>2]|0);}else{if(c[r>>2]|0?((c[H>>2]|0)+(c[L>>2]|0)|0)>>>0<(c[z>>2]|0)>>>0:0)O=c[y>>2]|0;else O=c[x>>2]|0;c[M>>2]=O;c[E>>2]=(c[M>>2]|0)+(c[H>>2]|0);k=Qm((c[A>>2]|0)+(c[L>>2]|0)|0,(c[E>>2]|0)+(c[L>>2]|0)|0,c[B>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+k;}if(((c[A>>2]|0)+(c[L>>2]|0)|0)==(c[B>>2]|0)){N=23;break;}k=c[H>>2]|0;if((d[(c[E>>2]|0)+(c[L>>2]|0)>>0]|0|0)<(d[(c[A>>2]|0)+(c[L>>2]|0)>>0]|0|0)){c[c[F>>2]>>2]=k;c[v>>2]=c[L>>2];if((c[H>>2]|0)>>>0<=(c[q>>2]|0)>>>0){N=17;break;}c[F>>2]=(c[K>>2]|0)+4;c[H>>2]=c[(c[K>>2]|0)+4>>2];}else{c[c[G>>2]>>2]=k;c[w>>2]=c[L>>2];if((c[H>>2]|0)>>>0<=(c[q>>2]|0)>>>0){N=20;break;}c[G>>2]=c[K>>2];c[H>>2]=c[c[K>>2]>>2];}}if((N|0)==17){c[F>>2]=I;P=c[G>>2]|0;c[P>>2]=0;Q=c[F>>2]|0;c[Q>>2]=0;l=j;return;}else if((N|0)==20){c[G>>2]=I;P=c[G>>2]|0;c[P>>2]=0;Q=c[F>>2]|0;c[Q>>2]=0;l=j;return;}else if((N|0)==23){P=c[G>>2]|0;c[P>>2]=0;Q=c[F>>2]|0;c[Q>>2]=0;l=j;return;}}function Zm(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;j=l;l=l+240|0;k=j+224|0;m=j+220|0;n=j+216|0;o=j+212|0;p=j+208|0;q=j+204|0;r=j+200|0;s=j+196|0;t=j+192|0;u=j+188|0;v=j+184|0;w=j+180|0;x=j+176|0;z=j+172|0;A=j+168|0;B=j+164|0;C=j+160|0;D=j+156|0;E=j+152|0;F=j+148|0;G=j+144|0;H=j+140|0;I=j+136|0;J=j+132|0;K=j+128|0;L=j+124|0;M=j+120|0;N=j+116|0;O=j+112|0;P=j+108|0;Q=j+104|0;R=j+100|0;S=j+96|0;T=j+92|0;U=j+88|0;V=j+84|0;W=j+80|0;X=j+76|0;Y=j+72|0;Z=j+68|0;_=j+64|0;$=j+60|0;aa=j+56|0;ba=j+52|0;ca=j+48|0;da=j+44|0;ea=j+40|0;fa=j+36|0;ga=j+32|0;ha=j+28|0;ia=j+24|0;ja=j+20|0;ka=j+16|0;la=j+12|0;ma=j+8|0;na=j+4|0;oa=j;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=c[(c[k>>2]|0)+36>>2];c[t>>2]=c[(c[o>>2]|0)+8>>2];c[u>>2]=c[(c[k>>2]|0)+44>>2];c[v>>2]=c[(c[o>>2]|0)+4>>2];c[w>>2]=c[(c[k>>2]|0)+4>>2];c[x>>2]=c[(c[k>>2]|0)+8>>2];c[z>>2]=c[p>>2];c[A>>2]=c[z>>2];c[B>>2]=c[z>>2];c[C>>2]=c[(c[k>>2]|0)+16>>2];c[D>>2]=(c[x>>2]|0)+(c[C>>2]|0);c[E>>2]=c[(c[k>>2]|0)+12>>2];c[F>>2]=(c[w>>2]|0)+(c[E>>2]|0);c[G>>2]=(c[x>>2]|0)+(c[E>>2]|0);c[H>>2]=(c[z>>2]|0)+(c[q>>2]|0);c[I>>2]=(c[H>>2]|0)+-8;c[J>>2]=c[c[n>>2]>>2];c[K>>2]=c[(c[n>>2]|0)+4>>2];a:while(1){if((c[A>>2]|0)>>>0>=(c[I>>2]|0)>>>0)break;c[L>>2]=Dk(c[A>>2]|0,c[v>>2]|0,c[r>>2]|0)|0;c[M>>2]=c[(c[u>>2]|0)+(c[L>>2]<<2)>>2];c[N>>2]=(c[M>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[x>>2]|0:c[w>>2]|0;c[O>>2]=(c[N>>2]|0)+(c[M>>2]|0);c[P>>2]=Dk(c[A>>2]|0,c[t>>2]|0,8)|0;c[Q>>2]=c[(c[s>>2]|0)+(c[P>>2]<<2)>>2];c[R>>2]=(c[Q>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[x>>2]|0:c[w>>2]|0;c[S>>2]=(c[R>>2]|0)+(c[Q>>2]|0);c[T>>2]=(c[A>>2]|0)-(c[w>>2]|0);c[U>>2]=(c[T>>2]|0)+1-(c[J>>2]|0);c[V>>2]=(c[U>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[x>>2]|0:c[w>>2]|0;c[W>>2]=(c[V>>2]|0)+(c[U>>2]|0);q=c[T>>2]|0;c[(c[s>>2]|0)+(c[P>>2]<<2)>>2]=q;c[(c[u>>2]|0)+(c[L>>2]<<2)>>2]=q;if(((c[U>>2]|0)>>>0>(c[C>>2]|0)>>>0?((c[E>>2]|0)-1-(c[U>>2]|0)|0)>>>0>=3:0)|0?(q=Rk(c[W>>2]|0)|0,(q|0)==(Rk((c[A>>2]|0)+1|0)|0)):0){c[Y>>2]=(c[U>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[X>>2]=(_m((c[A>>2]|0)+1+4|0,(c[W>>2]|0)+4|0,c[H>>2]|0,c[Y>>2]|0,c[F>>2]|0)|0)+4;c[A>>2]=(c[A>>2]|0)+1;$m(c[m>>2]|0,(c[A>>2]|0)-(c[B>>2]|0)|0,c[B>>2]|0,0,(c[X>>2]|0)-3|0);}else pa=6;do{if((pa|0)==6){pa=0;if((c[Q>>2]|0)>>>0>(c[C>>2]|0)>>>0?(q=Mk(c[S>>2]|0)|0,z=y,k=Mk(c[A>>2]|0)|0,(q|0)==(k|0)&(z|0)==(y|0)):0){c[Z>>2]=(c[Q>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[_>>2]=(c[Q>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[D>>2]|0:c[F>>2]|0;c[X>>2]=(_m((c[A>>2]|0)+8|0,(c[S>>2]|0)+8|0,c[H>>2]|0,c[Z>>2]|0,c[F>>2]|0)|0)+8;c[$>>2]=(c[T>>2]|0)-(c[Q>>2]|0);while(1){if(!(((c[A>>2]|0)>>>0>(c[B>>2]|0)>>>0?(c[S>>2]|0)>>>0>(c[_>>2]|0)>>>0:0)|0))break;if((d[(c[A>>2]|0)+-1>>0]|0|0)!=(d[(c[S>>2]|0)+-1>>0]|0|0))break;c[A>>2]=(c[A>>2]|0)+-1;c[S>>2]=(c[S>>2]|0)+-1;c[X>>2]=(c[X>>2]|0)+1;}c[K>>2]=c[J>>2];c[J>>2]=c[$>>2];$m(c[m>>2]|0,(c[A>>2]|0)-(c[B>>2]|0)|0,c[B>>2]|0,(c[$>>2]|0)+2|0,(c[X>>2]|0)-3|0);break;}if((c[M>>2]|0)>>>0>(c[C>>2]|0)>>>0?(z=Rk(c[O>>2]|0)|0,(z|0)==(Rk(c[A>>2]|0)|0)):0){c[aa>>2]=Dk((c[A>>2]|0)+1|0,c[t>>2]|0,8)|0;c[ba>>2]=c[(c[s>>2]|0)+(c[aa>>2]<<2)>>2];c[ca>>2]=(c[ba>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[x>>2]|0:c[w>>2]|0;c[da>>2]=(c[ca>>2]|0)+(c[ba>>2]|0);c[(c[s>>2]|0)+(c[aa>>2]<<2)>>2]=(c[T>>2]|0)+1;b:do{if((c[ba>>2]|0)>>>0>(c[C>>2]|0)>>>0?(z=Mk(c[da>>2]|0)|0,k=y,q=Mk((c[A>>2]|0)+1|0)|0,(z|0)==(q|0)&(k|0)==(y|0)):0){c[fa>>2]=(c[ba>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[ga>>2]=(c[ba>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[D>>2]|0:c[F>>2]|0;c[X>>2]=(_m((c[A>>2]|0)+9|0,(c[da>>2]|0)+8|0,c[H>>2]|0,c[fa>>2]|0,c[F>>2]|0)|0)+8;c[A>>2]=(c[A>>2]|0)+1;c[ea>>2]=(c[T>>2]|0)+1-(c[ba>>2]|0);while(1){if(!(((c[A>>2]|0)>>>0>(c[B>>2]|0)>>>0?(c[da>>2]|0)>>>0>(c[ga>>2]|0)>>>0:0)|0))break b;if((d[(c[A>>2]|0)+-1>>0]|0|0)!=(d[(c[da>>2]|0)+-1>>0]|0|0))break b;c[A>>2]=(c[A>>2]|0)+-1;c[da>>2]=(c[da>>2]|0)+-1;c[X>>2]=(c[X>>2]|0)+1;}}else pa=21;}while(0);c:do{if((pa|0)==21){pa=0;c[ha>>2]=(c[M>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[ia>>2]=(c[M>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[D>>2]|0:c[F>>2]|0;c[X>>2]=(_m((c[A>>2]|0)+4|0,(c[O>>2]|0)+4|0,c[H>>2]|0,c[ha>>2]|0,c[F>>2]|0)|0)+4;c[ea>>2]=(c[T>>2]|0)-(c[M>>2]|0);while(1){if(!(((c[A>>2]|0)>>>0>(c[B>>2]|0)>>>0?(c[O>>2]|0)>>>0>(c[ia>>2]|0)>>>0:0)|0))break c;if((d[(c[A>>2]|0)+-1>>0]|0|0)!=(d[(c[O>>2]|0)+-1>>0]|0|0))break c;c[A>>2]=(c[A>>2]|0)+-1;c[O>>2]=(c[O>>2]|0)+-1;c[X>>2]=(c[X>>2]|0)+1;}}}while(0);c[K>>2]=c[J>>2];c[J>>2]=c[ea>>2];$m(c[m>>2]|0,(c[A>>2]|0)-(c[B>>2]|0)|0,c[B>>2]|0,(c[ea>>2]|0)+2|0,(c[X>>2]|0)-3|0);break;}c[A>>2]=(c[A>>2]|0)+(((c[A>>2]|0)-(c[B>>2]|0)>>8)+1);continue a;}}while(0);c[A>>2]=(c[A>>2]|0)+(c[X>>2]|0);c[B>>2]=c[A>>2];d:do{if((c[A>>2]|0)>>>0<=(c[I>>2]|0)>>>0){k=(c[T>>2]|0)+2|0;q=c[u>>2]|0;c[q+((Dk((c[w>>2]|0)+(c[T>>2]|0)+2|0,c[v>>2]|0,c[r>>2]|0)|0)<<2)>>2]=k;k=(c[T>>2]|0)+2|0;q=c[s>>2]|0;c[q+((Dk((c[w>>2]|0)+(c[T>>2]|0)+2|0,c[t>>2]|0,8)|0)<<2)>>2]=k;k=(c[A>>2]|0)+-2-(c[w>>2]|0)|0;q=c[u>>2]|0;c[q+((Dk((c[A>>2]|0)+-2|0,c[v>>2]|0,c[r>>2]|0)|0)<<2)>>2]=k;k=(c[A>>2]|0)+-2-(c[w>>2]|0)|0;q=c[s>>2]|0;c[q+((Dk((c[A>>2]|0)+-2|0,c[t>>2]|0,8)|0)<<2)>>2]=k;while(1){if((c[A>>2]|0)>>>0>(c[I>>2]|0)>>>0)break d;c[ja>>2]=(c[A>>2]|0)-(c[w>>2]|0);c[ka>>2]=(c[ja>>2]|0)-(c[K>>2]|0);c[la>>2]=(c[ka>>2]|0)>>>0<(c[E>>2]|0)>>>0?(c[x>>2]|0)+(c[ka>>2]|0)|0:(c[w>>2]|0)+(c[ka>>2]|0)|0;if(!(((c[ka>>2]|0)>>>0>(c[C>>2]|0)>>>0?((c[E>>2]|0)-1-(c[ka>>2]|0)|0)>>>0>=3:0)|0))break d;k=Rk(c[la>>2]|0)|0;if((k|0)!=(Rk(c[A>>2]|0)|0))break d;c[ma>>2]=(c[ka>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[na>>2]=(_m((c[A>>2]|0)+4|0,(c[la>>2]|0)+4|0,c[H>>2]|0,c[ma>>2]|0,c[F>>2]|0)|0)+4;c[oa>>2]=c[K>>2];c[K>>2]=c[J>>2];c[J>>2]=c[oa>>2];$m(c[m>>2]|0,0,c[B>>2]|0,0,(c[na>>2]|0)-3|0);k=c[ja>>2]|0;q=c[u>>2]|0;c[q+((Dk(c[A>>2]|0,c[v>>2]|0,c[r>>2]|0)|0)<<2)>>2]=k;k=c[ja>>2]|0;q=c[s>>2]|0;c[q+((Dk(c[A>>2]|0,c[t>>2]|0,8)|0)<<2)>>2]=k;c[A>>2]=(c[A>>2]|0)+(c[na>>2]|0);c[B>>2]=c[A>>2];}}}while(0);}c[c[n>>2]>>2]=c[J>>2];c[(c[n>>2]|0)+4>>2]=c[K>>2];l=j;return(c[H>>2]|0)-(c[B>>2]|0)|0;}function _m(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=cn(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(cn((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function $m(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;an(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function an(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{bn(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function bn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function cn(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=dn(c[i>>2]|0)|0;c[n>>2]=e^(dn(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=en(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=dn(c[i>>2]|0)|0;c[o>>2]=e^(dn(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=en(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((fn()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=Rk(c[i>>2]|0)|0,(o|0)==(Rk(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(gn(c[i>>2]|0)|0)&65535,(o|0)==((gn(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function dn(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function en(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Lk()|0)!=0;f=(fn()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function fn(){return 0;}function gn(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function hn(a,b,e,f,g,h,i,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;k=l;l=l+176|0;m=k+164|0;n=k+160|0;o=k+156|0;p=k+152|0;q=k+148|0;r=k+144|0;s=k+140|0;t=k+136|0;u=k+132|0;v=k+128|0;w=k+124|0;x=k+120|0;y=k+116|0;z=k+112|0;A=k+108|0;B=k+104|0;C=k+100|0;D=k+96|0;E=k+92|0;F=k+88|0;G=k+84|0;H=k+80|0;I=k+76|0;J=k+72|0;K=k+68|0;L=k+64|0;M=k+60|0;N=k+56|0;O=k+52|0;P=k+48|0;Q=k+44|0;R=k+40|0;S=k+36|0;T=k+32|0;U=k+28|0;V=k+24|0;W=k+20|0;X=k+16|0;Y=k+12|0;Z=k+8|0;_=k+4|0;$=k;c[m>>2]=a;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=c[(c[m>>2]|0)+36>>2];c[v>>2]=c[(c[m>>2]|0)+4>>2];c[w>>2]=c[(c[m>>2]|0)+8>>2];c[x>>2]=c[p>>2];c[y>>2]=c[x>>2];c[z>>2]=c[x>>2];c[A>>2]=c[(c[m>>2]|0)+16>>2];c[B>>2]=(c[w>>2]|0)+(c[A>>2]|0);c[C>>2]=c[(c[m>>2]|0)+12>>2];c[D>>2]=(c[v>>2]|0)+(c[C>>2]|0);c[E>>2]=(c[w>>2]|0)+(c[C>>2]|0);c[F>>2]=(c[x>>2]|0)+(c[q>>2]|0);c[G>>2]=(c[F>>2]|0)+-8;c[H>>2]=c[c[o>>2]>>2];c[I>>2]=c[(c[o>>2]|0)+4>>2];a:while(1){if((c[y>>2]|0)>>>0>=(c[G>>2]|0)>>>0)break;c[J>>2]=Tk(c[y>>2]|0,c[r>>2]|0,c[t>>2]|0)|0;c[K>>2]=c[(c[u>>2]|0)+(c[J>>2]<<2)>>2];c[L>>2]=(c[K>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[w>>2]|0:c[v>>2]|0;c[M>>2]=(c[L>>2]|0)+(c[K>>2]|0);c[N>>2]=(c[y>>2]|0)-(c[v>>2]|0);c[O>>2]=(c[N>>2]|0)+1-(c[H>>2]|0);c[P>>2]=(c[O>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[w>>2]|0:c[v>>2]|0;c[Q>>2]=(c[P>>2]|0)+(c[O>>2]|0);c[(c[u>>2]|0)+(c[J>>2]<<2)>>2]=c[N>>2];if(((c[O>>2]|0)>>>0>(c[A>>2]|0)>>>0?((c[C>>2]|0)-1-(c[O>>2]|0)|0)>>>0>=3:0)|0?(q=fl(c[Q>>2]|0)|0,(q|0)==(fl((c[y>>2]|0)+1|0)|0)):0){c[S>>2]=(c[O>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[E>>2]|0:c[F>>2]|0;c[R>>2]=(jn((c[y>>2]|0)+1+4|0,(c[Q>>2]|0)+4|0,c[F>>2]|0,c[S>>2]|0,c[D>>2]|0)|0)+4;c[y>>2]=(c[y>>2]|0)+1;kn(c[n>>2]|0,(c[y>>2]|0)-(c[z>>2]|0)|0,c[z>>2]|0,0,(c[R>>2]|0)-3|0);}else aa=6;do{if((aa|0)==6){aa=0;if((c[K>>2]|0)>>>0>=(c[A>>2]|0)>>>0?(q=fl(c[M>>2]|0)|0,(q|0)==(fl(c[y>>2]|0)|0)):0){c[T>>2]=(c[K>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[E>>2]|0:c[F>>2]|0;c[U>>2]=(c[K>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[B>>2]|0:c[D>>2]|0;c[R>>2]=(jn((c[y>>2]|0)+4|0,(c[M>>2]|0)+4|0,c[F>>2]|0,c[T>>2]|0,c[D>>2]|0)|0)+4;while(1){if(!(((c[y>>2]|0)>>>0>(c[z>>2]|0)>>>0?(c[M>>2]|0)>>>0>(c[U>>2]|0)>>>0:0)|0))break;if((d[(c[y>>2]|0)+-1>>0]|0|0)!=(d[(c[M>>2]|0)+-1>>0]|0|0))break;c[y>>2]=(c[y>>2]|0)+-1;c[M>>2]=(c[M>>2]|0)+-1;c[R>>2]=(c[R>>2]|0)+1;}c[V>>2]=(c[N>>2]|0)-(c[K>>2]|0);c[I>>2]=c[H>>2];c[H>>2]=c[V>>2];kn(c[n>>2]|0,(c[y>>2]|0)-(c[z>>2]|0)|0,c[z>>2]|0,(c[V>>2]|0)+2|0,(c[R>>2]|0)-3|0);break;}c[y>>2]=(c[y>>2]|0)+(((c[y>>2]|0)-(c[z>>2]|0)>>8)+(c[s>>2]|0));continue a;}}while(0);c[y>>2]=(c[y>>2]|0)+(c[R>>2]|0);c[z>>2]=c[y>>2];b:do{if((c[y>>2]|0)>>>0<=(c[G>>2]|0)>>>0){q=(c[N>>2]|0)+2|0;x=c[u>>2]|0;c[x+((Tk((c[v>>2]|0)+(c[N>>2]|0)+2|0,c[r>>2]|0,c[t>>2]|0)|0)<<2)>>2]=q;q=(c[y>>2]|0)+-2-(c[v>>2]|0)|0;x=c[u>>2]|0;c[x+((Tk((c[y>>2]|0)+-2|0,c[r>>2]|0,c[t>>2]|0)|0)<<2)>>2]=q;while(1){if((c[y>>2]|0)>>>0>(c[G>>2]|0)>>>0)break b;c[W>>2]=(c[y>>2]|0)-(c[v>>2]|0);c[X>>2]=(c[W>>2]|0)-(c[I>>2]|0);c[Y>>2]=(c[X>>2]|0)>>>0<(c[C>>2]|0)>>>0?(c[w>>2]|0)+(c[X>>2]|0)|0:(c[v>>2]|0)+(c[X>>2]|0)|0;if(!(((c[X>>2]|0)>>>0>(c[A>>2]|0)>>>0?((c[C>>2]|0)-1-(c[X>>2]|0)|0)>>>0>=3:0)|0))break b;q=fl(c[Y>>2]|0)|0;if((q|0)!=(fl(c[y>>2]|0)|0))break b;c[Z>>2]=(c[X>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[E>>2]|0:c[F>>2]|0;c[_>>2]=(jn((c[y>>2]|0)+4|0,(c[Y>>2]|0)+4|0,c[F>>2]|0,c[Z>>2]|0,c[D>>2]|0)|0)+4;c[$>>2]=c[I>>2];c[I>>2]=c[H>>2];c[H>>2]=c[$>>2];kn(c[n>>2]|0,0,c[z>>2]|0,0,(c[_>>2]|0)-3|0);q=c[W>>2]|0;x=c[u>>2]|0;c[x+((Tk(c[y>>2]|0,c[r>>2]|0,c[t>>2]|0)|0)<<2)>>2]=q;c[y>>2]=(c[y>>2]|0)+(c[_>>2]|0);c[z>>2]=c[y>>2];}}}while(0);}c[c[o>>2]>>2]=c[H>>2];c[(c[o>>2]|0)+4>>2]=c[I>>2];l=k;return(c[F>>2]|0)-(c[z>>2]|0)|0;}function jn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=nn(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(nn((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function kn(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;ln(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function ln(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{mn(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function mn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function nn(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=on(c[i>>2]|0)|0;c[n>>2]=e^(on(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=pn(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=on(c[i>>2]|0)|0;c[o>>2]=e^(on(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=pn(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((qn()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=fl(c[i>>2]|0)|0,(o|0)==(fl(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(rn(c[i>>2]|0)|0)&65535,(o|0)==((rn(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function on(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function pn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=($k()|0)!=0;f=(qn()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function qn(){return 0;}function rn(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function sn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;switch(c[(c[j>>2]|0)+16>>2]|0){case 7:case 6:{c[h>>2]=un(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,6)|0;o=c[h>>2]|0;l=g;return o|0;}case 5:{c[h>>2]=un(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,5)|0;o=c[h>>2]|0;l=g;return o|0;}default:{c[h>>2]=un(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,4)|0;o=c[h>>2]|0;l=g;return o|0;}}return 0;}function tn(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0;h=l;l=l+320|0;i=h+308|0;j=h+304|0;k=h+300|0;m=h+296|0;n=h+292|0;o=h+288|0;p=h+284|0;q=h+280|0;r=h+276|0;s=h+272|0;t=h+268|0;u=h+264|0;v=h+260|0;w=h+256|0;x=h+252|0;y=h+248|0;z=h+244|0;A=h+240|0;B=h+236|0;C=h+232|0;D=h+228|0;E=h+224|0;F=h+220|0;G=h+216|0;H=h+212|0;I=h+208|0;J=h+204|0;K=h+200|0;L=h+196|0;M=h+192|0;N=h+188|0;O=h+184|0;P=h+180|0;Q=h+176|0;R=h+172|0;S=h+168|0;T=h+164|0;U=h+160|0;V=h+156|0;W=h+152|0;X=h+148|0;Y=h+144|0;Z=h+140|0;_=h+136|0;$=h+132|0;aa=h+128|0;ba=h+124|0;ca=h+120|0;da=h+116|0;ea=h+112|0;fa=h+108|0;ga=h+104|0;ha=h+100|0;ia=h+96|0;ja=h+92|0;ka=h+88|0;la=h+84|0;ma=h+80|0;na=h+76|0;oa=h+72|0;pa=h+68|0;qa=h+64|0;ra=h+60|0;sa=h+56|0;ta=h+52|0;ua=h+48|0;va=h+44|0;wa=h+40|0;xa=h+36|0;ya=h+32|0;za=h+28|0;Aa=h+24|0;Ba=h+20|0;Ca=h+16|0;Da=h+12|0;Ea=h+8|0;Fa=h+4|0;Ga=h;c[Ca>>2]=a;c[Da>>2]=b;c[Ea>>2]=e;c[Fa>>2]=f;c[Ga>>2]=g;switch(c[(c[Da>>2]|0)+16>>2]|0){case 7:case 6:{g=c[Da>>2]|0;f=c[Ea>>2]|0;e=c[Fa>>2]|0;b=c[Ga>>2]|0;c[i>>2]=c[Ca>>2];c[j>>2]=g;c[k>>2]=f;c[m>>2]=e;c[n>>2]=b;c[o>>2]=6;c[p>>2]=0;c[q>>2]=c[(c[i>>2]|0)+44>>2];c[r>>2]=1<<c[(c[j>>2]|0)+4>>2];c[s>>2]=(c[r>>2]|0)-1;c[t>>2]=c[(c[i>>2]|0)+4>>2];c[u>>2]=c[(c[i>>2]|0)+8>>2];c[v>>2]=c[(c[i>>2]|0)+12>>2];c[w>>2]=(c[t>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[y>>2]=c[(c[i>>2]|0)+16>>2];c[z>>2]=(c[k>>2]|0)-(c[t>>2]|0);if((c[z>>2]|0)>>>0>(c[r>>2]|0)>>>0)Ha=(c[z>>2]|0)-(c[r>>2]|0)|0;else Ha=0;c[A>>2]=Ha;c[B>>2]=1<<c[(c[j>>2]|0)+12>>2];c[C>>2]=3;c[D>>2]=mk(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0)|0;while(1){if(!(((c[B>>2]|0)>>>0>0?(c[D>>2]|0)>>>0>(c[y>>2]|0)>>>0:0)|0))break;c[E>>2]=0;if(c[p>>2]|0?(c[D>>2]|0)>>>0<(c[v>>2]|0)>>>0:0){c[G>>2]=(c[u>>2]|0)+(c[D>>2]|0);o=Bk(c[G>>2]|0)|0;if((o|0)==(Bk(c[k>>2]|0)|0))c[E>>2]=(Lm((c[k>>2]|0)+4|0,(c[G>>2]|0)+4|0,c[m>>2]|0,c[x>>2]|0,c[w>>2]|0)|0)+4;}else Ia=38;if((Ia|0)==38?(Ia=0,c[F>>2]=(c[t>>2]|0)+(c[D>>2]|0),(d[(c[F>>2]|0)+(c[C>>2]|0)>>0]|0|0)==(d[(c[k>>2]|0)+(c[C>>2]|0)>>0]|0|0)):0)c[E>>2]=Qm(c[k>>2]|0,c[F>>2]|0,c[m>>2]|0)|0;if((c[E>>2]|0)>>>0>(c[C>>2]|0)>>>0?(c[C>>2]=c[E>>2],c[c[n>>2]>>2]=(c[z>>2]|0)-(c[D>>2]|0)+2,((c[k>>2]|0)+(c[E>>2]|0)|0)==(c[m>>2]|0)):0)break;if((c[D>>2]|0)>>>0<=(c[A>>2]|0)>>>0)break;c[D>>2]=c[(c[q>>2]|0)+((c[D>>2]&c[s>>2])<<2)>>2];c[B>>2]=(c[B>>2]|0)+-1;}c[Ba>>2]=c[C>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}case 5:{C=c[Da>>2]|0;B=c[Ea>>2]|0;s=c[Fa>>2]|0;D=c[Ga>>2]|0;c[H>>2]=c[Ca>>2];c[I>>2]=C;c[J>>2]=B;c[K>>2]=s;c[L>>2]=D;c[M>>2]=5;c[N>>2]=0;c[O>>2]=c[(c[H>>2]|0)+44>>2];c[P>>2]=1<<c[(c[I>>2]|0)+4>>2];c[Q>>2]=(c[P>>2]|0)-1;c[R>>2]=c[(c[H>>2]|0)+4>>2];c[S>>2]=c[(c[H>>2]|0)+8>>2];c[T>>2]=c[(c[H>>2]|0)+12>>2];c[U>>2]=(c[R>>2]|0)+(c[T>>2]|0);c[V>>2]=(c[S>>2]|0)+(c[T>>2]|0);c[W>>2]=c[(c[H>>2]|0)+16>>2];c[X>>2]=(c[J>>2]|0)-(c[R>>2]|0);if((c[X>>2]|0)>>>0>(c[P>>2]|0)>>>0)Ka=(c[X>>2]|0)-(c[P>>2]|0)|0;else Ka=0;c[Y>>2]=Ka;c[Z>>2]=1<<c[(c[I>>2]|0)+12>>2];c[_>>2]=3;c[$>>2]=mk(c[H>>2]|0,c[I>>2]|0,c[J>>2]|0,c[M>>2]|0)|0;while(1){if(!(((c[Z>>2]|0)>>>0>0?(c[$>>2]|0)>>>0>(c[W>>2]|0)>>>0:0)|0))break;c[aa>>2]=0;if(c[N>>2]|0?(c[$>>2]|0)>>>0<(c[T>>2]|0)>>>0:0){c[ca>>2]=(c[S>>2]|0)+(c[$>>2]|0);M=Bk(c[ca>>2]|0)|0;if((M|0)==(Bk(c[J>>2]|0)|0))c[aa>>2]=(Lm((c[J>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[K>>2]|0,c[V>>2]|0,c[U>>2]|0)|0)+4;}else Ia=23;if((Ia|0)==23?(Ia=0,c[ba>>2]=(c[R>>2]|0)+(c[$>>2]|0),(d[(c[ba>>2]|0)+(c[_>>2]|0)>>0]|0|0)==(d[(c[J>>2]|0)+(c[_>>2]|0)>>0]|0|0)):0)c[aa>>2]=Qm(c[J>>2]|0,c[ba>>2]|0,c[K>>2]|0)|0;if((c[aa>>2]|0)>>>0>(c[_>>2]|0)>>>0?(c[_>>2]=c[aa>>2],c[c[L>>2]>>2]=(c[X>>2]|0)-(c[$>>2]|0)+2,((c[J>>2]|0)+(c[aa>>2]|0)|0)==(c[K>>2]|0)):0)break;if((c[$>>2]|0)>>>0<=(c[Y>>2]|0)>>>0)break;c[$>>2]=c[(c[O>>2]|0)+((c[$>>2]&c[Q>>2])<<2)>>2];c[Z>>2]=(c[Z>>2]|0)+-1;}c[Ba>>2]=c[_>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}default:{_=c[Da>>2]|0;Da=c[Ea>>2]|0;Ea=c[Fa>>2]|0;Fa=c[Ga>>2]|0;c[da>>2]=c[Ca>>2];c[ea>>2]=_;c[fa>>2]=Da;c[ga>>2]=Ea;c[ha>>2]=Fa;c[ia>>2]=4;c[ja>>2]=0;c[ka>>2]=c[(c[da>>2]|0)+44>>2];c[la>>2]=1<<c[(c[ea>>2]|0)+4>>2];c[ma>>2]=(c[la>>2]|0)-1;c[na>>2]=c[(c[da>>2]|0)+4>>2];c[oa>>2]=c[(c[da>>2]|0)+8>>2];c[pa>>2]=c[(c[da>>2]|0)+12>>2];c[qa>>2]=(c[na>>2]|0)+(c[pa>>2]|0);c[ra>>2]=(c[oa>>2]|0)+(c[pa>>2]|0);c[sa>>2]=c[(c[da>>2]|0)+16>>2];c[ta>>2]=(c[fa>>2]|0)-(c[na>>2]|0);if((c[ta>>2]|0)>>>0>(c[la>>2]|0)>>>0)La=(c[ta>>2]|0)-(c[la>>2]|0)|0;else La=0;c[ua>>2]=La;c[va>>2]=1<<c[(c[ea>>2]|0)+12>>2];c[wa>>2]=3;c[xa>>2]=mk(c[da>>2]|0,c[ea>>2]|0,c[fa>>2]|0,c[ia>>2]|0)|0;while(1){if(!(((c[va>>2]|0)>>>0>0?(c[xa>>2]|0)>>>0>(c[sa>>2]|0)>>>0:0)|0))break;c[ya>>2]=0;if(c[ja>>2]|0?(c[xa>>2]|0)>>>0<(c[pa>>2]|0)>>>0:0){c[Aa>>2]=(c[oa>>2]|0)+(c[xa>>2]|0);ia=Bk(c[Aa>>2]|0)|0;if((ia|0)==(Bk(c[fa>>2]|0)|0))c[ya>>2]=(Lm((c[fa>>2]|0)+4|0,(c[Aa>>2]|0)+4|0,c[ga>>2]|0,c[ra>>2]|0,c[qa>>2]|0)|0)+4;}else Ia=8;if((Ia|0)==8?(Ia=0,c[za>>2]=(c[na>>2]|0)+(c[xa>>2]|0),(d[(c[za>>2]|0)+(c[wa>>2]|0)>>0]|0|0)==(d[(c[fa>>2]|0)+(c[wa>>2]|0)>>0]|0|0)):0)c[ya>>2]=Qm(c[fa>>2]|0,c[za>>2]|0,c[ga>>2]|0)|0;if((c[ya>>2]|0)>>>0>(c[wa>>2]|0)>>>0?(c[wa>>2]=c[ya>>2],c[c[ha>>2]>>2]=(c[ta>>2]|0)-(c[xa>>2]|0)+2,((c[fa>>2]|0)+(c[ya>>2]|0)|0)==(c[ga>>2]|0)):0)break;if((c[xa>>2]|0)>>>0<=(c[ua>>2]|0)>>>0)break;c[xa>>2]=c[(c[ka>>2]|0)+((c[xa>>2]&c[ma>>2])<<2)>>2];c[va>>2]=(c[va>>2]|0)+-1;}c[Ba>>2]=c[wa>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}}return 0;}function un(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;if((c[m>>2]|0)>>>0<((c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+24>>2]|0)|0)>>>0){c[i>>2]=0;q=c[i>>2]|0;l=h;return q|0;}else{Wm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[p>>2]|0);c[i>>2]=Xm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,0)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function vn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;f=wn(c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,1,0)|0;l=g;return f|0;}function wn(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;i=l;l=l+160|0;j=i+48|0;k=i+40|0;m=i+36|0;n=i+32|0;o=i+28|0;p=i+24|0;q=i+20|0;r=i+16|0;s=i+12|0;t=i+8|0;u=i+4|0;v=i;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=(c[m>>2]|0)+472+8;c[u>>2]=0;if(!(c[c[m>>2]>>2]|0)){c[k>>2]=-60;w=c[k>>2]|0;l=i;return w|0;}do{if(c[r>>2]|0?(c[c[m>>2]>>2]|0)==1:0){h=c[n>>2]|0;g=c[o>>2]|0;f=(c[m>>2]|0)+116|0;e=(c[m>>2]|0)+240|0;d=eE(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;e=y;b=c[(c[m>>2]|0)+220>>2]|0;a=j;x=f;f=a+104|0;do{c[a>>2]=c[x>>2];a=a+4|0;x=x+4|0;}while((a|0)<(f|0));c[u>>2]=xn(h,g,j,d,e,b)|0;x=(Ph(c[u>>2]|0)|0)!=0;a=c[u>>2]|0;if(!x){c[o>>2]=(c[o>>2]|0)-a;c[n>>2]=(c[n>>2]|0)+(c[u>>2]|0);c[c[m>>2]>>2]=2;break;}c[k>>2]=a;w=c[k>>2]|0;l=i;return w|0;}}while(0);if(!(c[q>>2]|0)){c[k>>2]=c[u>>2];w=c[k>>2]|0;l=i;return w|0;}if(!(Mj(c[t>>2]|0,c[p>>2]|0,c[q>>2]|0)|0))c[(c[t>>2]|0)+24>>2]=c[(c[t>>2]|0)+12>>2];if(c[(c[m>>2]|0)+116+68>>2]|0)Mj((c[m>>2]|0)+408|0,c[p>>2]|0,c[q>>2]|0)|0;t=c[m>>2]|0;j=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;if(c[r>>2]|0)z=yn(t,j,n,o,p,c[s>>2]|0)|0;else z=zn(t,j,n,o,p)|0;c[v>>2]=z;if(Ph(c[v>>2]|0)|0){c[k>>2]=c[v>>2];w=c[k>>2]|0;l=i;return w|0;}z=(c[m>>2]|0)+248|0;p=z;o=dE(c[p>>2]|0,c[p+4>>2]|0,c[q>>2]|0,0)|0;q=z;c[q>>2]=o;c[q+4>>2]=y;q=(c[m>>2]|0)+256|0;o=q;z=dE(c[o>>2]|0,c[o+4>>2]|0,(c[v>>2]|0)+(c[u>>2]|0)|0,0)|0;o=q;c[o>>2]=z;c[o+4>>2]=y;if(c[(c[m>>2]|0)+116+32>>2]|0?(o=(c[m>>2]|0)+248|0,z=dE(c[o>>2]|0,c[o+4>>2]|0,1,0)|0,o=y,q=(c[m>>2]|0)+240|0,m=c[q+4>>2]|0,o>>>0>m>>>0|((o|0)==(m|0)?z>>>0>(c[q>>2]|0)>>>0:0)):0){c[k>>2]=-72;w=c[k>>2]|0;l=i;return w|0;}c[k>>2]=(c[v>>2]|0)+(c[u>>2]|0);w=c[k>>2]|0;l=i;return w|0;}function xn(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;i=l;l=l+64|0;j=i+52|0;k=i+48|0;m=i+44|0;n=i;o=i+40|0;p=i+36|0;q=i+32|0;r=i+28|0;s=i+24|0;t=i+20|0;u=i+16|0;v=i+57|0;w=i+12|0;x=i+56|0;y=i+8|0;c[k>>2]=b;c[m>>2]=d;d=n;c[d>>2]=f;c[d+4>>2]=g;c[o>>2]=h;c[p>>2]=c[k>>2];c[q>>2]=((c[o>>2]|0)>>>0>0&1)+((c[o>>2]|0)>>>0>=256&1)+((c[o>>2]|0)>>>0>=65536&1);c[r>>2]=c[e+32+8>>2]|0?0:c[q>>2]|0;c[s>>2]=(c[e+32+4>>2]|0)>>>0>0&1;c[t>>2]=1<<c[e+4>>2];if(c[e+32>>2]|0){q=n;h=c[q+4>>2]|0;z=0>h>>>0|(0==(h|0)?(c[t>>2]|0)>>>0>=(c[q>>2]|0)>>>0:0);}else z=0;c[u>>2]=z&1;a[v>>0]=(c[e+4>>2]|0)-10<<3;if(c[e+32>>2]|0){z=n;q=c[z+4>>2]|0;t=n;h=c[t+4>>2]|0;g=n;d=c[g+4>>2]|0;A=((q>>>0>0|(q|0)==0&(c[z>>2]|0)>>>0>=256)&1)+((h>>>0>0|(h|0)==0&(c[t>>2]|0)>>>0>=65792)&1)+((d>>>0>0|(d|0)==0&(c[g>>2]|0)>>>0>=4294967295)&1)|0;}else A=0;c[w>>2]=A;a[x>>0]=(c[r>>2]|0)+(c[s>>2]<<2)+(c[u>>2]<<5)+(c[w>>2]<<6);c[y>>2]=0;if((c[m>>2]|0)>>>0<18){c[j>>2]=-70;B=c[j>>2]|0;l=i;return B|0;}if(!(c[e>>2]|0)){Pl(c[k>>2]|0,-47205080);c[y>>2]=4;}k=a[x>>0]|0;x=c[p>>2]|0;e=c[y>>2]|0;c[y>>2]=e+1;a[x+e>>0]=k;if(!(c[u>>2]|0)){k=a[v>>0]|0;v=c[p>>2]|0;e=c[y>>2]|0;c[y>>2]=e+1;a[v+e>>0]=k;}switch(c[r>>2]|0){case 3:{Pl((c[p>>2]|0)+(c[y>>2]|0)|0,c[o>>2]|0);c[y>>2]=(c[y>>2]|0)+4;break;}case 1:{a[(c[p>>2]|0)+(c[y>>2]|0)>>0]=c[o>>2];c[y>>2]=(c[y>>2]|0)+1;break;}case 2:{xl((c[p>>2]|0)+(c[y>>2]|0)|0,c[o>>2]&65535);c[y>>2]=(c[y>>2]|0)+2;break;}default:{}}switch(c[w>>2]|0){case 3:{w=n;Ql((c[p>>2]|0)+(c[y>>2]|0)|0,c[w>>2]|0,c[w+4>>2]|0);c[y>>2]=(c[y>>2]|0)+8;break;}case 1:{w=(c[p>>2]|0)+(c[y>>2]|0)|0;o=n;xl(w,(eE(c[o>>2]|0,c[o+4>>2]|0,256,0)|0)&65535);c[y>>2]=(c[y>>2]|0)+2;break;}case 2:{Pl((c[p>>2]|0)+(c[y>>2]|0)|0,c[n>>2]|0);c[y>>2]=(c[y>>2]|0)+4;break;}default:if(c[u>>2]|0){u=c[n>>2]&255;n=c[p>>2]|0;p=c[y>>2]|0;c[y>>2]=p+1;a[n+p>>0]=u;}}c[j>>2]=c[y>>2];B=c[j>>2]|0;l=i;return B|0;}function yn(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=l;l=l+112|0;i=h+80|0;j=h+76|0;k=h+72|0;m=h+68|0;n=h+64|0;o=h+60|0;p=h+56|0;q=h+52|0;r=h+48|0;s=h+44|0;t=h+40|0;u=h+36|0;v=h+32|0;w=h+28|0;x=h+24|0;y=h+20|0;z=h+16|0;A=h+12|0;B=h+8|0;C=h+4|0;D=h;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=c[(c[k>>2]|0)+232>>2];c[s>>2]=c[p>>2];c[t>>2]=c[o>>2];c[u>>2]=c[m>>2];c[v>>2]=c[u>>2];c[w>>2]=1<<c[(c[k>>2]|0)+116+4>>2];if(c[p>>2]|0?(c[(c[k>>2]|0)+116+32+4>>2]|0)!=0:0)Nh((c[k>>2]|0)+264|0,c[o>>2]|0,c[p>>2]|0)|0;while(1){if(!(c[s>>2]|0)){E=24;break;}c[x>>2]=(c[k>>2]|0)+472+8;c[y>>2]=c[q>>2]&(c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0;if((c[n>>2]|0)>>>0<6){E=6;break;}if((c[s>>2]|0)>>>0<(c[r>>2]|0)>>>0)c[r>>2]=c[s>>2];p=c[x>>2]|0;o=(c[t>>2]|0)+(c[r>>2]|0)|0;c[i>>2]=c[p>>2];c[i+4>>2]=c[p+4>>2];c[i+8>>2]=c[p+8>>2];c[i+12>>2]=c[p+12>>2];c[i+16>>2]=c[p+16>>2];if(ro(i,o)|0){c[z>>2]=vj(c[(c[k>>2]|0)+116+4+4>>2]|0,c[(c[k>>2]|0)+116+4+24>>2]|0)|0;c[A>>2]=so(c[x>>2]|0,c[z>>2]|0,c[w>>2]|0,c[t>>2]|0)|0;to(c[k>>2]|0,c[A>>2]|0);if((c[(c[x>>2]|0)+24>>2]|0)>>>0<(c[A>>2]|0)>>>0)c[(c[x>>2]|0)+24>>2]=0;else{o=(c[x>>2]|0)+24|0;c[o>>2]=(c[o>>2]|0)-(c[A>>2]|0);}c[(c[x>>2]|0)+20>>2]=0;}uo(c[x>>2]|0,(c[t>>2]|0)+(c[r>>2]|0)|0,c[w>>2]|0,(c[x>>2]|0)+20|0);if((c[(c[x>>2]|0)+24>>2]|0)>>>0<(c[(c[x>>2]|0)+16>>2]|0)>>>0)c[(c[x>>2]|0)+24>>2]=c[(c[x>>2]|0)+16>>2];c[B>>2]=zn(c[k>>2]|0,(c[v>>2]|0)+3|0,(c[n>>2]|0)-3|0,c[t>>2]|0,c[r>>2]|0)|0;o=(Ph(c[B>>2]|0)|0)!=0;F=c[B>>2]|0;if(o){E=17;break;}o=c[y>>2]|0;if(!F){c[C>>2]=o+0+(c[r>>2]<<3);if(((c[r>>2]|0)+3|0)>>>0>(c[n>>2]|0)>>>0){E=20;break;}Pl(c[v>>2]|0,c[C>>2]|0);mE((c[v>>2]|0)+3|0,c[t>>2]|0,c[r>>2]|0)|0;c[B>>2]=3+(c[r>>2]|0);}else{c[D>>2]=o+4+(c[B>>2]<<3);wl(c[v>>2]|0,c[D>>2]|0);c[B>>2]=(c[B>>2]|0)+3;}c[t>>2]=(c[t>>2]|0)+(c[r>>2]|0);c[s>>2]=(c[s>>2]|0)-(c[r>>2]|0);c[v>>2]=(c[v>>2]|0)+(c[B>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[B>>2]|0);}if((E|0)==6){c[j>>2]=-70;G=c[j>>2]|0;l=h;return G|0;}else if((E|0)==17){c[j>>2]=F;G=c[j>>2]|0;l=h;return G|0;}else if((E|0)==20){c[j>>2]=-70;G=c[j>>2]|0;l=h;return G|0;}else if((E|0)==24){if(c[q>>2]|0?(c[v>>2]|0)>>>0>(c[u>>2]|0)>>>0:0)c[c[k>>2]>>2]=3;c[j>>2]=(c[v>>2]|0)-(c[u>>2]|0);G=c[j>>2]|0;l=h;return G|0;}return 0;}function zn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=l;l=l+112|0;h=g+92|0;i=g+88|0;j=g+84|0;k=g+80|0;m=g+76|0;n=g+72|0;o=g+68|0;p=g+64|0;q=g+60|0;r=g+56|0;s=g+52|0;t=g+48|0;u=g+44|0;v=g+40|0;w=g+24|0;x=g+16|0;y=g+12|0;z=g+8|0;A=g+4|0;B=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=(c[j>>2]|0)+472+8;f=c[j>>2]|0;if((c[o>>2]|0)>>>0<7){An(f+456|0,c[o>>2]|0,c[(c[j>>2]|0)+116+4+16>>2]|0);c[i>>2]=0;C=c[i>>2]|0;l=g;return C|0;}Bn(f+368|0);c[q>>2]=c[(c[p>>2]|0)+4>>2];c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)-(c[q>>2]|0);if((c[s>>2]|0)>>>0>((c[(c[p>>2]|0)+24>>2]|0)+384|0)>>>0){if(192<((c[s>>2]|0)-(c[(c[p>>2]|0)+24>>2]|0)-384|0)>>>0)D=192;else D=(c[s>>2]|0)-(c[(c[p>>2]|0)+24>>2]|0)-384|0;c[(c[p>>2]|0)+24>>2]=(c[s>>2]|0)-D;}D=c[p>>2]|0;c[h>>2]=c[D>>2];c[h+4>>2]=c[D+4>>2];c[h+8>>2]=c[D+8>>2];c[h+12>>2]=c[D+12>>2];c[h+16>>2]=c[D+16>>2];c[t>>2]=Cn(h)|0;c[v>>2]=0;while(1){E=c[j>>2]|0;if((c[v>>2]|0)>=3)break;c[(c[(c[j>>2]|0)+472+4>>2]|0)+4580+(c[v>>2]<<2)>>2]=c[(c[E+472>>2]|0)+4580+(c[v>>2]<<2)>>2];c[v>>2]=(c[v>>2]|0)+1;}v=c[j>>2]|0;do{if((c[E+456+4>>2]|0)>>>0<(c[(c[j>>2]|0)+456+8>>2]|0)>>>0)c[u>>2]=Dn(v+456|0,c[p>>2]|0,(c[j>>2]|0)+368|0,(c[(c[j>>2]|0)+472+4>>2]|0)+4580|0,(c[j>>2]|0)+116+4|0,c[n>>2]|0,c[o>>2]|0,c[t>>2]|0)|0;else{if(!(c[v+116+68>>2]|0)){c[y>>2]=Wl(c[(c[j>>2]|0)+116+4+24>>2]|0,c[t>>2]|0)|0;c[u>>2]=uc[c[y>>2]&31](c[p>>2]|0,(c[j>>2]|0)+368|0,(c[(c[j>>2]|0)+472+4>>2]|0)+4580|0,(c[j>>2]|0)+116+4|0,c[n>>2]|0,c[o>>2]|0)|0;break;};c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;c[w+12>>2]=0;c[w>>2]=c[(c[j>>2]|0)+448>>2];c[w+12>>2]=c[(c[j>>2]|0)+452>>2];c[x>>2]=En((c[j>>2]|0)+408|0,w,(c[j>>2]|0)+116+68|0,c[n>>2]|0,c[o>>2]|0)|0;if(!(wj(c[x>>2]|0)|0)){c[u>>2]=Dn(w,c[p>>2]|0,(c[j>>2]|0)+368|0,(c[(c[j>>2]|0)+472+4>>2]|0)+4580|0,(c[j>>2]|0)+116+4|0,c[n>>2]|0,c[o>>2]|0,c[t>>2]|0)|0;break;}c[i>>2]=c[x>>2];C=c[i>>2]|0;l=g;return C|0;}}while(0);c[z>>2]=(c[n>>2]|0)+(c[o>>2]|0)+(0-(c[u>>2]|0));Fn((c[j>>2]|0)+368|0,c[z>>2]|0,c[u>>2]|0);c[A>>2]=Gn((c[j>>2]|0)+368|0,c[(c[j>>2]|0)+472>>2]|0,c[(c[j>>2]|0)+472+4>>2]|0,(c[j>>2]|0)+116|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[(c[j>>2]|0)+588>>2]|0,c[(c[j>>2]|0)+8>>2]|0)|0;o=(Ph(c[A>>2]|0)|0)!=0;if(o|(c[A>>2]|0)==0){c[i>>2]=c[A>>2];C=c[i>>2]|0;l=g;return C|0;}else{c[B>>2]=c[(c[j>>2]|0)+472>>2];c[(c[j>>2]|0)+472>>2]=c[(c[j>>2]|0)+472+4>>2];c[(c[j>>2]|0)+472+4>>2]=c[B>>2];c[i>>2]=c[A>>2];C=c[i>>2]|0;l=g;return C|0;}return 0;}function An(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;while(1){if((c[g>>2]|0)>>>0<=0){j=12;break;}if((c[(c[f>>2]|0)+4>>2]|0)>>>0>=(c[(c[f>>2]|0)+8>>2]|0)>>>0){j=12;break;}c[i>>2]=(c[c[f>>2]>>2]|0)+((c[(c[f>>2]|0)+4>>2]|0)*12|0);if((c[g>>2]|0)>>>0<=(c[(c[i>>2]|0)+4>>2]|0)>>>0){j=5;break;}c[g>>2]=(c[g>>2]|0)-(c[(c[i>>2]|0)+4>>2]|0);c[(c[i>>2]|0)+4>>2]=0;if((c[g>>2]|0)>>>0<(c[(c[i>>2]|0)+8>>2]|0)>>>0){j=7;break;}c[g>>2]=(c[g>>2]|0)-(c[(c[i>>2]|0)+8>>2]|0);c[(c[i>>2]|0)+8>>2]=0;d=(c[f>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)+1;}if((j|0)==5){d=(c[i>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)-(c[g>>2]|0);l=e;return;}else if((j|0)==7){d=(c[i>>2]|0)+8|0;c[d>>2]=(c[d>>2]|0)-(c[g>>2]|0);if((c[(c[i>>2]|0)+8>>2]|0)>>>0>=(c[h>>2]|0)>>>0){l=e;return;}if(((c[(c[f>>2]|0)+4>>2]|0)+1|0)>>>0<(c[(c[f>>2]|0)+8>>2]|0)>>>0){h=(c[i>>2]|0)+12+4|0;c[h>>2]=(c[h>>2]|0)+(c[(c[i>>2]|0)+8>>2]|0);}i=(c[f>>2]|0)+4|0;c[i>>2]=(c[i>>2]|0)+1;l=e;return;}else if((j|0)==12){l=e;return;}}function Bn(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+8>>2];c[(c[d>>2]|0)+4>>2]=c[c[d>>2]>>2];c[(c[d>>2]|0)+28>>2]=0;l=b;return;}function Cn(a){a=a|0;return(c[a+16>>2]|0)>>>0<(c[a+12>>2]|0)>>>0|0;}function Dn(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;j=l;l=l+80|0;k=j+76|0;m=j+72|0;n=j+68|0;o=j+64|0;p=j+60|0;q=j+56|0;r=j+52|0;s=j+48|0;t=j+44|0;u=j+40|0;v=j+36|0;w=j+32|0;x=j+28|0;y=j+24|0;z=j+12|0;A=j+8|0;B=j+4|0;C=j;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=c[(c[p>>2]|0)+16>>2];c[u>>2]=Wl(c[(c[p>>2]|0)+24>>2]|0,c[s>>2]|0)|0;c[v>>2]=c[(c[m>>2]|0)+4>>2];c[w>>2]=c[q>>2];c[x>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[y>>2]=c[w>>2];while(1){if((c[(c[k>>2]|0)+4>>2]|0)>>>0>=(c[(c[k>>2]|0)+8>>2]|0)>>>0)break;if((c[y>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;lo(z,c[k>>2]|0,(c[x>>2]|0)-(c[y>>2]|0)|0,c[t>>2]|0);if(!(c[z>>2]|0))break;mo(c[m>>2]|0,c[y>>2]|0);no(c[m>>2]|0,c[p>>2]|0,c[y>>2]|0)|0;c[B>>2]=uc[c[u>>2]&31](c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[y>>2]|0,c[z+4>>2]|0)|0;c[y>>2]=(c[y>>2]|0)+(c[z+4>>2]|0);c[(c[m>>2]|0)+24>>2]=(c[y>>2]|0)-(c[v>>2]|0);c[A>>2]=2;while(1){if((c[A>>2]|0)<=0)break;c[(c[o>>2]|0)+(c[A>>2]<<2)>>2]=c[(c[o>>2]|0)+((c[A>>2]|0)-1<<2)>>2];c[A>>2]=(c[A>>2]|0)+-1;}c[c[o>>2]>>2]=c[z>>2];oo(c[n>>2]|0,c[B>>2]|0,(c[y>>2]|0)+(0-(c[B>>2]|0))|0,(c[z>>2]|0)+2|0,(c[z+8>>2]|0)-3|0);c[y>>2]=(c[y>>2]|0)+(c[z+8>>2]|0);}mo(c[m>>2]|0,c[y>>2]|0);no(c[m>>2]|0,c[p>>2]|0,c[y>>2]|0)|0;c[C>>2]=uc[c[u>>2]&31](c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[y>>2]|0,(c[x>>2]|0)-(c[y>>2]|0)|0)|0;c[(c[m>>2]|0)+24>>2]=(c[x>>2]|0)-(c[v>>2]|0);l=j;return c[C>>2]|0;}function En(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=l;l=l+112|0;h=g+84|0;i=g+80|0;j=g+76|0;k=g+72|0;m=g+68|0;n=g+64|0;o=g+60|0;p=g+56|0;q=g+52|0;r=g+48|0;s=g+40|0;t=g+36|0;u=g+32|0;v=g+28|0;w=g+24|0;x=g+20|0;y=g+16|0;z=g+12|0;A=g+8|0;B=g+4|0;C=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=1<<c[(c[m>>2]|0)+20>>2];c[q>>2]=c[n>>2];c[r>>2]=(c[q>>2]|0)+(c[o>>2]|0);c[g+44>>2]=1048576;c[s>>2]=(((c[o>>2]|0)>>>0)/1048576|0)+((((c[o>>2]|0)>>>0)%1048576|0|0)!=0&1);c[u>>2]=0;c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0){D=12;break;}if((c[(c[k>>2]|0)+8>>2]|0)>>>0>=(c[(c[k>>2]|0)+12>>2]|0)>>>0){D=12;break;}c[v>>2]=(c[q>>2]|0)+(c[t>>2]<<20);c[w>>2]=(c[r>>2]|0)-(c[v>>2]|0);c[x>>2]=(c[w>>2]|0)>>>0<1048576?c[r>>2]|0:(c[v>>2]|0)+1048576|0;c[y>>2]=(c[x>>2]|0)-(c[v>>2]|0);c[A>>2]=c[(c[k>>2]|0)+8>>2];o=c[j>>2]|0;f=c[x>>2]|0;c[h>>2]=c[o>>2];c[h+4>>2]=c[o+4>>2];c[h+8>>2]=c[o+8>>2];c[h+12>>2]=c[o+12>>2];c[h+16>>2]=c[o+16>>2];if(On(h,f)|0){c[B>>2]=1<<c[(c[m>>2]|0)+4>>2];c[C>>2]=Pn(c[j>>2]|0,0,c[p>>2]|0,c[n>>2]|0)|0;Qn(c[(c[j>>2]|0)+20>>2]|0,c[B>>2]|0,c[C>>2]|0);}Rn(c[j>>2]|0,c[x>>2]|0,c[p>>2]|0,0);c[z>>2]=Sn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[v>>2]|0,c[y>>2]|0)|0;if(Ph(c[z>>2]|0)|0){D=7;break;}if((c[A>>2]|0)>>>0<(c[(c[k>>2]|0)+8>>2]|0)>>>0){f=(c[c[k>>2]>>2]|0)+((c[A>>2]|0)*12|0)+4|0;c[f>>2]=(c[f>>2]|0)+(c[u>>2]|0);c[u>>2]=c[z>>2];}else c[u>>2]=(c[u>>2]|0)+(c[y>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}if((D|0)==7){c[i>>2]=c[z>>2];E=c[i>>2]|0;l=g;return E|0;}else if((D|0)==12){c[i>>2]=0;E=c[i>>2]|0;l=g;return E|0;}return 0;}function Fn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;mE(c[(c[f>>2]|0)+12>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;g=(c[f>>2]|0)+12|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Gn(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;k=l;l=l+48|0;m=k+44|0;n=k+40|0;o=k+36|0;p=k+32|0;q=k+28|0;r=k+24|0;s=k+20|0;t=k+16|0;u=k+12|0;v=k+8|0;w=k+4|0;x=k;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;c[v>>2]=j;c[w>>2]=Hn(c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;if(((c[w>>2]|0)==-70?(c[t>>2]|0)>>>0<=(c[s>>2]|0)>>>0:0)|0){c[m>>2]=0;y=c[m>>2]|0;l=k;return y|0;}if(Ph(c[w>>2]|0)|0){c[m>>2]=c[w>>2];y=c[m>>2]|0;l=k;return y|0;}s=c[t>>2]|0;c[x>>2]=s-(In(c[t>>2]|0)|0);if((c[w>>2]|0)>>>0>=(c[x>>2]|0)>>>0){c[m>>2]=0;y=c[m>>2]|0;l=k;return y|0;}if((c[(c[p>>2]|0)+4568>>2]|0)==2)c[(c[p>>2]|0)+4568>>2]=1;c[m>>2]=c[w>>2];y=c[m>>2]|0;l=k;return y|0;}function Hn(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;k=l;l=l+368|0;m=k+364|0;n=k+360|0;o=k+356|0;p=k+352|0;q=k+348|0;r=k+344|0;s=k+340|0;t=k+336|0;u=k+332|0;v=k+328|0;w=k;x=k+324|0;y=k+320|0;z=k+316|0;A=k+312|0;B=k+308|0;C=k+304|0;D=k+300|0;E=k+296|0;F=k+292|0;G=k+288|0;H=k+284|0;I=k+280|0;J=k+276|0;K=k+272|0;L=k+268|0;M=k+264|0;N=k+260|0;O=k+256|0;P=k+252|0;Q=k+248|0;R=k+244|0;S=k+240|0;T=k+236|0;U=k+232|0;V=k+228|0;W=k+224|0;X=k+220|0;Y=k+216|0;Z=k+212|0;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;j=c[(c[q>>2]|0)+4>>2]|0;i=(Il()|0)!=0;c[v>>2]=j>>>0>(i?25:57)>>>0&1;c[x>>2]=(c[p>>2]|0)+3248;c[y>>2]=(c[p>>2]|0)+1024;c[z>>2]=(c[p>>2]|0)+1796;c[D>>2]=c[c[n>>2]>>2];c[E>>2]=c[(c[n>>2]|0)+24>>2];c[F>>2]=c[(c[n>>2]|0)+16>>2];c[G>>2]=c[(c[n>>2]|0)+20>>2];c[H>>2]=c[r>>2];c[I>>2]=(c[H>>2]|0)+(c[s>>2]|0);c[J>>2]=c[H>>2];c[K>>2]=((c[(c[n>>2]|0)+4>>2]|0)-(c[c[n>>2]>>2]|0)|0)/8|0;c[M>>2]=c[(c[n>>2]|0)+8>>2];c[N>>2]=(c[(c[n>>2]|0)+12>>2]|0)-(c[M>>2]|0);c[O>>2]=Jn(c[o>>2]|0,c[p>>2]|0,c[(c[q>>2]|0)+4+24>>2]|0,c[(c[q>>2]|0)+48>>2]|0,c[J>>2]|0,c[s>>2]|0,c[M>>2]|0,c[N>>2]|0,c[t>>2]|0,c[u>>2]|0)|0;N=(Ph(c[O>>2]|0)|0)!=0;M=c[O>>2]|0;if(N){c[m>>2]=M;_=c[m>>2]|0;l=k;return _|0;}c[J>>2]=(c[J>>2]|0)+M;if(((c[I>>2]|0)-(c[J>>2]|0)|0)<4){c[m>>2]=-70;_=c[m>>2]|0;l=k;return _|0;}M=c[K>>2]|0;do{if((c[K>>2]|0)>>>0>=127){if(M>>>0<32512){a[c[J>>2]>>0]=((c[K>>2]|0)>>>8)+128;a[(c[J>>2]|0)+1>>0]=c[K>>2];c[J>>2]=(c[J>>2]|0)+2;break;}else{a[c[J>>2]>>0]=-1;xl((c[J>>2]|0)+1|0,(c[K>>2]|0)-32512&65535);c[J>>2]=(c[J>>2]|0)+3;break;}}else{N=c[J>>2]|0;c[J>>2]=N+1;a[N>>0]=M;}}while(0);if(!(c[K>>2]|0)){mE((c[p>>2]|0)+3248|0,(c[o>>2]|0)+3248|0,1316)|0;c[(c[p>>2]|0)+4576>>2]=c[(c[o>>2]|0)+4576>>2];mE((c[p>>2]|0)+1024|0,(c[o>>2]|0)+1024|0,772)|0;c[(c[p>>2]|0)+4568>>2]=c[(c[o>>2]|0)+4568>>2];mE((c[p>>2]|0)+1796|0,(c[o>>2]|0)+1796|0,1452)|0;c[(c[p>>2]|0)+4572>>2]=c[(c[o>>2]|0)+4572>>2];c[m>>2]=(c[J>>2]|0)-(c[H>>2]|0);_=c[m>>2]|0;l=k;return _|0;}M=c[J>>2]|0;c[J>>2]=M+1;c[L>>2]=M;zl(c[n>>2]|0);c[P>>2]=35;c[Q>>2]=_h(w,P,c[F>>2]|0,c[K>>2]|0,c[t>>2]|0)|0;c[(c[p>>2]|0)+4576>>2]=c[(c[o>>2]|0)+4576>>2];c[A>>2]=Kn((c[p>>2]|0)+4576|0,c[Q>>2]|0,c[K>>2]|0,6,1)|0;c[R>>2]=Ln(c[J>>2]|0,(c[I>>2]|0)-(c[J>>2]|0)|0,c[x>>2]|0,9,c[A>>2]|0,w,c[P>>2]|0,c[F>>2]|0,c[K>>2]|0,3200,6,35,(c[o>>2]|0)+3248|0,1316,c[t>>2]|0,6144)|0;P=(Ph(c[R>>2]|0)|0)!=0;Q=c[R>>2]|0;if(P){c[m>>2]=Q;_=c[m>>2]|0;l=k;return _|0;}c[J>>2]=(c[J>>2]|0)+Q;c[S>>2]=31;c[T>>2]=_h(w,S,c[E>>2]|0,c[K>>2]|0,c[t>>2]|0)|0;c[U>>2]=(c[S>>2]|0)>>>0<=28?1:0;c[(c[p>>2]|0)+4568>>2]=c[(c[o>>2]|0)+4568>>2];c[B>>2]=Kn((c[p>>2]|0)+4568|0,c[T>>2]|0,c[K>>2]|0,5,c[U>>2]|0)|0;c[V>>2]=Ln(c[J>>2]|0,(c[I>>2]|0)-(c[J>>2]|0)|0,c[y>>2]|0,8,c[B>>2]|0,w,c[S>>2]|0,c[E>>2]|0,c[K>>2]|0,3280,5,28,(c[o>>2]|0)+1024|0,772,c[t>>2]|0,6144)|0;S=(Ph(c[V>>2]|0)|0)!=0;U=c[V>>2]|0;if(S){c[m>>2]=U;_=c[m>>2]|0;l=k;return _|0;}c[J>>2]=(c[J>>2]|0)+U;c[W>>2]=52;c[X>>2]=_h(w,W,c[G>>2]|0,c[K>>2]|0,c[t>>2]|0)|0;c[(c[p>>2]|0)+4572>>2]=c[(c[o>>2]|0)+4572>>2];c[C>>2]=Kn((c[p>>2]|0)+4572|0,c[X>>2]|0,c[K>>2]|0,6,1)|0;c[Y>>2]=Ln(c[J>>2]|0,(c[I>>2]|0)-(c[J>>2]|0)|0,c[z>>2]|0,9,c[C>>2]|0,w,c[W>>2]|0,c[G>>2]|0,c[K>>2]|0,3344,6,52,(c[o>>2]|0)+1796|0,1452,c[t>>2]|0,6144)|0;t=(Ph(c[Y>>2]|0)|0)!=0;o=c[Y>>2]|0;if(t){c[m>>2]=o;_=c[m>>2]|0;l=k;return _|0;}c[J>>2]=(c[J>>2]|0)+o;a[c[L>>2]>>0]=(c[A>>2]<<6)+(c[B>>2]<<4)+(c[C>>2]<<2);c[Z>>2]=Cl(c[J>>2]|0,(c[I>>2]|0)-(c[J>>2]|0)|0,c[z>>2]|0,c[G>>2]|0,c[y>>2]|0,c[E>>2]|0,c[x>>2]|0,c[F>>2]|0,c[D>>2]|0,c[K>>2]|0,c[v>>2]|0,c[u>>2]|0)|0;u=(Ph(c[Z>>2]|0)|0)!=0;v=c[Z>>2]|0;if(u){c[m>>2]=v;_=c[m>>2]|0;l=k;return _|0;}else{c[J>>2]=(c[J>>2]|0)+v;c[m>>2]=(c[J>>2]|0)-(c[H>>2]|0);_=c[m>>2]|0;l=k;return _|0;}return 0;}function In(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return((c[d>>2]|0)>>>6)+2|0;}function Jn(b,d,e,f,g,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;n=l;l=l+96|0;o=n+88|0;p=n+84|0;q=n+80|0;r=n+76|0;s=n+72|0;t=n+68|0;u=n+64|0;v=n+60|0;w=n+56|0;x=n+52|0;y=n+48|0;z=n+44|0;A=n+40|0;B=n+36|0;C=n+32|0;D=n+28|0;E=n+24|0;F=n+20|0;G=n+16|0;H=n+12|0;I=n+8|0;J=n+4|0;K=n;c[p>>2]=b;c[q>>2]=d;c[r>>2]=e;c[s>>2]=f;c[t>>2]=g;c[u>>2]=h;c[v>>2]=i;c[w>>2]=j;c[x>>2]=k;c[y>>2]=m;c[z>>2]=In(c[w>>2]|0)|0;c[A>>2]=3+((c[w>>2]|0)>>>0>=1024&1)+((c[w>>2]|0)>>>0>=16384&1);c[B>>2]=c[t>>2];c[C>>2]=(c[w>>2]|0)>>>0<256&1;c[D>>2]=2;c[(c[q>>2]|0)+4564>>2]=c[(c[p>>2]|0)+4564>>2];mE(c[q>>2]|0,c[p>>2]|0,1024)|0;if(c[s>>2]|0){c[o>>2]=Mn(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;L=c[o>>2]|0;l=n;return L|0;}c[F>>2]=(c[(c[p>>2]|0)+4564>>2]|0)==2?6:63;if((c[w>>2]|0)>>>0<=(c[F>>2]|0)>>>0){c[o>>2]=Mn(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;L=c[o>>2]|0;l=n;return L|0;}if((c[u>>2]|0)>>>0<((c[A>>2]|0)+1|0)>>>0){c[o>>2]=-70;L=c[o>>2]|0;l=n;return L|0;}c[G>>2]=c[(c[p>>2]|0)+4564>>2];c[H>>2]=(c[r>>2]|0)>>>0<4?(c[w>>2]|0)>>>0<=1024&1:0;if((c[G>>2]|0)==2&(c[A>>2]|0)==3)c[C>>2]=1;r=(c[B>>2]|0)+(c[A>>2]|0)|0;F=(c[u>>2]|0)-(c[A>>2]|0)|0;s=c[v>>2]|0;m=c[w>>2]|0;k=c[x>>2]|0;x=c[q>>2]|0;j=c[H>>2]|0;H=c[y>>2]|0;if(c[C>>2]|0)M=jj(r,F,s,m,255,11,k,6144,x,G,j,H)|0;else M=kj(r,F,s,m,255,11,k,6144,x,G,j,H)|0;c[E>>2]=M;if(c[G>>2]|0)c[D>>2]=3;G=(c[E>>2]|0)==0?1:(c[E>>2]|0)>>>0>=((c[w>>2]|0)-(c[z>>2]|0)|0)>>>0;if(G|(wj(c[E>>2]|0)|0)|0){mE(c[q>>2]|0,c[p>>2]|0,1024)|0;c[o>>2]=Mn(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;L=c[o>>2]|0;l=n;return L|0;}if((c[E>>2]|0)==1){mE(c[q>>2]|0,c[p>>2]|0,1024)|0;c[o>>2]=Nn(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;L=c[o>>2]|0;l=n;return L|0;}if((c[D>>2]|0)==2)c[(c[q>>2]|0)+4564>>2]=1;switch(c[A>>2]|0){case 3:{c[I>>2]=(c[D>>2]|0)+((((c[C>>2]|0)!=0^1)&1)<<2)+(c[w>>2]<<4)+(c[E>>2]<<14);wl(c[B>>2]|0,c[I>>2]|0);break;}case 4:{c[J>>2]=(c[D>>2]|0)+8+(c[w>>2]<<4)+(c[E>>2]<<18);Pl(c[B>>2]|0,c[J>>2]|0);break;}case 5:{c[K>>2]=(c[D>>2]|0)+12+(c[w>>2]<<4)+(c[E>>2]<<22);Pl(c[B>>2]|0,c[K>>2]|0);a[(c[B>>2]|0)+4>>0]=(c[E>>2]|0)>>>10;break;}default:{}}c[o>>2]=(c[A>>2]|0)+(c[E>>2]|0);L=c[o>>2]|0;l=n;return L|0;}function Kn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[j>>2]|0)==(c[k>>2]|0)?(c[n>>2]|0)==0|(c[k>>2]|0)>>>0>2:0){c[c[i>>2]>>2]=1;c[h>>2]=1;o=c[h>>2]|0;l=g;return o|0;}if(c[n>>2]|0?(c[k>>2]|0)>>>0<1e3?(c[c[i>>2]>>2]|0)==2:0:0){c[h>>2]=3;o=c[h>>2]|0;l=g;return o|0;}do{if(c[n>>2]|0){if((c[k>>2]|0)>>>0>=64?(c[j>>2]|0)>>>0>=(c[k>>2]|0)>>>((c[m>>2]|0)-1|0)>>>0:0)break;c[c[i>>2]>>2]=0;c[h>>2]=0;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[c[i>>2]>>2]=1;c[h>>2]=2;o=c[h>>2]|0;l=g;return o|0;}function Ln(b,e,f,g,h,i,j,k,m,n,o,p,q,r,s,t){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;var u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;u=l;l=l+224|0;v=u+208|0;w=u+204|0;x=u+200|0;y=u+196|0;z=u+192|0;A=u+188|0;B=u+184|0;C=u+180|0;D=u+176|0;E=u+172|0;F=u+168|0;G=u+164|0;H=u+160|0;I=u+156|0;J=u+152|0;K=u+148|0;L=u+144|0;M=u+140|0;N=u+136|0;O=u+132|0;P=u+128|0;Q=u;R=u+124|0;S=u+120|0;T=u+116|0;U=u+112|0;V=u+108|0;c[w>>2]=b;c[x>>2]=e;c[y>>2]=f;c[z>>2]=g;c[A>>2]=h;c[B>>2]=i;c[C>>2]=j;c[D>>2]=k;c[E>>2]=m;c[F>>2]=n;c[G>>2]=o;c[H>>2]=p;c[I>>2]=q;c[J>>2]=r;c[K>>2]=s;c[L>>2]=t;c[M>>2]=c[w>>2];c[N>>2]=(c[M>>2]|0)+(c[x>>2]|0);switch(c[A>>2]|0){case 1:{a[c[M>>2]>>0]=a[c[D>>2]>>0]|0;c[O>>2]=ii(c[y>>2]|0,c[C>>2]&255)|0;if(wj(c[O>>2]|0)|0){c[v>>2]=c[O>>2];W=c[v>>2]|0;l=u;return W|0;}else{c[v>>2]=1;W=c[v>>2]|0;l=u;return W|0;}break;}case 3:{mE(c[y>>2]|0,c[I>>2]|0,c[J>>2]|0)|0;c[v>>2]=0;W=c[v>>2]|0;l=u;return W|0;}case 0:{c[P>>2]=Uh(c[y>>2]|0,c[F>>2]|0,c[H>>2]|0,c[G>>2]|0,c[K>>2]|0,c[L>>2]|0)|0;if(wj(c[P>>2]|0)|0){c[v>>2]=c[P>>2];W=c[v>>2]|0;l=u;return W|0;}else{c[v>>2]=0;W=c[v>>2]|0;l=u;return W|0;}break;}case 2:{c[R>>2]=c[E>>2];c[S>>2]=ei(c[z>>2]|0,c[E>>2]|0,c[C>>2]|0)|0;if((c[(c[B>>2]|0)+((d[(c[D>>2]|0)+((c[E>>2]|0)-1)>>0]|0)<<2)>>2]|0)>>>0>1){z=(c[B>>2]|0)+((d[(c[D>>2]|0)+((c[E>>2]|0)-1)>>0]|0)<<2)|0;c[z>>2]=(c[z>>2]|0)+-1;c[R>>2]=(c[R>>2]|0)+-1;}c[T>>2]=fi(Q,c[S>>2]|0,c[B>>2]|0,c[R>>2]|0,c[C>>2]|0)|0;if(wj(c[T>>2]|0)|0){c[v>>2]=c[T>>2];W=c[v>>2]|0;l=u;return W|0;}c[U>>2]=Xh(c[M>>2]|0,(c[N>>2]|0)-(c[M>>2]|0)|0,Q,c[C>>2]|0,c[S>>2]|0)|0;if(Zg(c[U>>2]|0)|0){c[v>>2]=c[U>>2];W=c[v>>2]|0;l=u;return W|0;}c[V>>2]=Uh(c[y>>2]|0,Q,c[C>>2]|0,c[S>>2]|0,c[K>>2]|0,c[L>>2]|0)|0;if(wj(c[V>>2]|0)|0){c[v>>2]=c[V>>2];W=c[v>>2]|0;l=u;return W|0;}else{c[v>>2]=c[U>>2];W=c[v>>2]|0;l=u;return W|0;}break;}default:{c[v>>2]=-1;W=c[v>>2]|0;l=u;return W|0;}}return 0;}function Mn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[i>>2];c[o>>2]=1+((c[m>>2]|0)>>>0>31&1)+((c[m>>2]|0)>>>0>4095&1);if(((c[m>>2]|0)+(c[o>>2]|0)|0)>>>0>(c[j>>2]|0)>>>0){c[h>>2]=-70;p=c[h>>2]|0;l=g;return p|0;}switch(c[o>>2]|0){case 1:{a[c[n>>2]>>0]=0+(c[m>>2]<<3);break;}case 2:{xl(c[n>>2]|0,4+(c[m>>2]<<4)&65535);break;}case 3:{Pl(c[n>>2]|0,12+(c[m>>2]<<4)|0);break;}default:{}}mE((c[n>>2]|0)+(c[o>>2]|0)|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[m>>2]|0)+(c[o>>2]|0);p=c[h>>2]|0;l=g;return p|0;}function Nn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+20|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=b;c[g+16>>2]=d;c[i>>2]=e;c[j>>2]=f;c[k>>2]=c[h>>2];c[m>>2]=1+((c[j>>2]|0)>>>0>31&1)+((c[j>>2]|0)>>>0>4095&1);switch(c[m>>2]|0){case 1:{a[c[k>>2]>>0]=1+(c[j>>2]<<3);break;}case 2:{xl(c[k>>2]|0,5+(c[j>>2]<<4)&65535);break;}case 3:{Pl(c[k>>2]|0,13+(c[j>>2]<<4)|0);break;}default:{}}a[(c[k>>2]|0)+(c[m>>2]|0)>>0]=a[c[i>>2]>>0]|0;l=g;return(c[m>>2]|0)+1|0;}function On(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;c[f>>2]=(c[e>>2]|0)-(c[a+4>>2]|0);l=d;return(c[f>>2]|0)>>>0>2684354560|0;}function Pn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(1<<c[h>>2])-1;c[m>>2]=(c[j>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);c[n>>2]=(c[m>>2]&c[k>>2])+(c[i>>2]|0);c[o>>2]=(c[m>>2]|0)-(c[n>>2]|0);n=(c[g>>2]|0)+4|0;c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);n=(c[g>>2]|0)+8|0;c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);n=(c[g>>2]|0)+16|0;c[n>>2]=(c[n>>2]|0)-(c[o>>2]|0);n=(c[g>>2]|0)+12|0;c[n>>2]=(c[n>>2]|0)-(c[o>>2]|0);l=f;return c[o>>2]|0;}function Qn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=0;while(1){if((c[i>>2]|0)>>>0>=(c[g>>2]|0)>>>0)break;if((c[(c[f>>2]|0)+(c[i>>2]<<3)>>2]|0)>>>0<(c[h>>2]|0)>>>0)c[(c[f>>2]|0)+(c[i>>2]<<3)>>2]=0;else{d=(c[f>>2]|0)+(c[i>>2]<<3)|0;c[d>>2]=(c[d>>2]|0)-(c[h>>2]|0);}c[i>>2]=(c[i>>2]|0)+1;}l=e;return;}function Rn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);if(c[j>>2]|0)o=c[c[j>>2]>>2]|0;else o=0;c[m>>2]=o;if((c[k>>2]|0)>>>0<=((c[i>>2]|0)+(c[m>>2]|0)|0)>>>0){l=f;return;}c[n>>2]=(c[k>>2]|0)-(c[i>>2]|0);if((c[(c[g>>2]|0)+16>>2]|0)>>>0<(c[n>>2]|0)>>>0)c[(c[g>>2]|0)+16>>2]=c[n>>2];if((c[(c[g>>2]|0)+12>>2]|0)>>>0<(c[(c[g>>2]|0)+16>>2]|0)>>>0)c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+16>>2];if(!(c[j>>2]|0)){l=f;return;}c[c[j>>2]>>2]=0;l=f;return;}function Sn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;h=l;l=l+224|0;i=h+200|0;j=h+192|0;k=h+188|0;m=h+184|0;n=h+180|0;o=h+176|0;p=h+172|0;q=h+168|0;r=h+164|0;s=h+8|0;t=h+160|0;u=h+156|0;v=h+152|0;w=h+148|0;x=h+144|0;z=h+140|0;A=h+136|0;B=h+132|0;C=h+128|0;D=h+124|0;E=h+120|0;F=h+116|0;G=h+112|0;H=h+108|0;I=h+104|0;J=h+100|0;K=h+96|0;L=h;M=h+92|0;N=h+88|0;O=h+84|0;P=h+80|0;Q=h+76|0;R=h+72|0;S=h+68|0;T=h+64|0;U=h+60|0;V=h+56|0;W=h+52|0;X=h+48|0;Y=h+44|0;Z=h+40|0;_=h+36|0;$=h+32|0;aa=h+28|0;ba=h+24|0;ca=h+20|0;da=h+16|0;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[k>>2]|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];c[q>>2]=Tn(i)|0;c[r>>2]=c[(c[n>>2]|0)+12>>2];g=(c[k>>2]|0)+32|0;f=c[g+4>>2]|0;e=s;c[e>>2]=c[g>>2];c[e+4>>2]=f;c[t>>2]=(c[(c[n>>2]|0)+4>>2]|0)-(c[(c[n>>2]|0)+8>>2]|0);c[u>>2]=1<<c[(c[n>>2]|0)+8>>2];c[v>>2]=c[(c[n>>2]|0)+16>>2];c[w>>2]=(1<<c[(c[n>>2]|0)+16>>2])-1;c[x>>2]=c[(c[k>>2]|0)+12>>2];if(c[q>>2]|0)ea=c[(c[k>>2]|0)+16>>2]|0;else ea=c[x>>2]|0;c[z>>2]=ea;c[A>>2]=c[(c[k>>2]|0)+4>>2];if(c[q>>2]|0)fa=c[(c[k>>2]|0)+8>>2]|0;else fa=0;c[B>>2]=fa;c[C>>2]=c[q>>2]|0?(c[B>>2]|0)+(c[z>>2]|0)|0:0;c[D>>2]=c[q>>2]|0?(c[B>>2]|0)+(c[x>>2]|0)|0:0;c[E>>2]=(c[A>>2]|0)+(c[x>>2]|0);c[F>>2]=c[o>>2];c[G>>2]=(c[F>>2]|0)+(c[p>>2]|0);c[H>>2]=(c[G>>2]|0)+(0-((c[r>>2]|0)>>>0>8?c[r>>2]|0:8));c[I>>2]=c[F>>2];c[J>>2]=c[F>>2];c[K>>2]=0;p=L;c[p>>2]=0;c[p+4>>2]=0;while(1){if((c[J>>2]|0)>>>0>(c[H>>2]|0)>>>0){ga=32;break;}c[N>>2]=(c[J>>2]|0)-(c[A>>2]|0);c[O>>2]=0;c[P>>2]=0;c[Q>>2]=0;if((c[J>>2]|0)!=(c[F>>2]|0)){p=L;o=s;fa=Un(c[p>>2]|0,c[p+4>>2]|0,a[c[K>>2]>>0]|0,a[(c[K>>2]|0)+(c[r>>2]|0)>>0]|0,c[o>>2]|0,c[o+4>>2]|0)|0;o=L;c[o>>2]=fa;c[o+4>>2]=y;}else{o=Vn(c[J>>2]|0,c[r>>2]|0)|0;fa=L;c[fa>>2]=o;c[fa+4>>2]=y;}c[K>>2]=c[J>>2];fa=L;o=Wn(c[fa>>2]|0,c[fa+4>>2]|0,c[t>>2]|0,c[v>>2]|0)|0;if((o|0)!=(c[w>>2]|0)){c[J>>2]=(c[J>>2]|0)+1;continue;}o=c[k>>2]|0;fa=L;p=Xn(c[fa>>2]|0,c[fa+4>>2]|0,c[t>>2]|0)|0;fa=c[n>>2]|0;c[i>>2]=c[fa>>2];c[i+4>>2]=c[fa+4>>2];c[i+8>>2]=c[fa+8>>2];c[i+12>>2]=c[fa+12>>2];c[i+16>>2]=c[fa+16>>2];c[i+20>>2]=c[fa+20>>2];c[R>>2]=Yn(o,p,i)|0;c[T>>2]=0;p=L;c[U>>2]=Zn(c[p>>2]|0,c[p+4>>2]|0,c[t>>2]|0)|0;c[S>>2]=c[R>>2];while(1){if((c[S>>2]|0)>>>0>=((c[R>>2]|0)+(c[u>>2]<<3)|0)>>>0)break;do{if((c[(c[S>>2]|0)+4>>2]|0)==(c[U>>2]|0)?(c[c[S>>2]>>2]|0)>>>0>(c[z>>2]|0)>>>0:0){if(c[q>>2]|0){c[Y>>2]=(c[c[S>>2]>>2]|0)>>>0<(c[x>>2]|0)>>>0?c[B>>2]|0:c[A>>2]|0;c[Z>>2]=(c[Y>>2]|0)+(c[c[S>>2]>>2]|0);c[_>>2]=(c[c[S>>2]>>2]|0)>>>0<(c[x>>2]|0)>>>0?c[D>>2]|0:c[G>>2]|0;c[$>>2]=(c[c[S>>2]>>2]|0)>>>0<(c[x>>2]|0)>>>0?c[C>>2]|0:c[E>>2]|0;c[V>>2]=_n(c[J>>2]|0,c[Z>>2]|0,c[G>>2]|0,c[_>>2]|0,c[E>>2]|0)|0;if((c[V>>2]|0)>>>0<(c[r>>2]|0)>>>0)break;c[W>>2]=$n(c[J>>2]|0,c[I>>2]|0,c[Z>>2]|0,c[$>>2]|0)|0;c[X>>2]=(c[V>>2]|0)+(c[W>>2]|0);}else{c[aa>>2]=(c[A>>2]|0)+(c[c[S>>2]>>2]|0);c[V>>2]=ao(c[J>>2]|0,c[aa>>2]|0,c[G>>2]|0)|0;if((c[V>>2]|0)>>>0<(c[r>>2]|0)>>>0)break;c[W>>2]=$n(c[J>>2]|0,c[I>>2]|0,c[aa>>2]|0,c[E>>2]|0)|0;c[X>>2]=(c[V>>2]|0)+(c[W>>2]|0);}if((c[X>>2]|0)>>>0>(c[T>>2]|0)>>>0){c[T>>2]=c[X>>2];c[O>>2]=c[V>>2];c[P>>2]=c[W>>2];c[Q>>2]=c[S>>2];}}}while(0);c[S>>2]=(c[S>>2]|0)+8;}if(!(c[Q>>2]|0)){p=c[k>>2]|0;o=L;fa=c[o>>2]|0;ea=c[o+4>>2]|0;o=c[t>>2]|0;f=c[N>>2]|0;e=c[n>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];c[i+20>>2]=c[e+20>>2];bo(p,fa,ea,o,f,i);c[J>>2]=(c[J>>2]|0)+1;continue;}c[M>>2]=(c[O>>2]|0)+(c[P>>2]|0);c[J>>2]=(c[J>>2]|0)+(0-(c[P>>2]|0));c[ba>>2]=c[c[Q>>2]>>2];c[ca>>2]=(c[N>>2]|0)-(c[ba>>2]|0);c[da>>2]=(c[c[m>>2]>>2]|0)+((c[(c[m>>2]|0)+8>>2]|0)*12|0);if((c[(c[m>>2]|0)+8>>2]|0)==(c[(c[m>>2]|0)+12>>2]|0)){ga=28;break;}c[(c[da>>2]|0)+4>>2]=(c[J>>2]|0)-(c[I>>2]|0);c[(c[da>>2]|0)+8>>2]=c[M>>2];c[c[da>>2]>>2]=c[ca>>2];f=(c[m>>2]|0)+8|0;c[f>>2]=(c[f>>2]|0)+1;f=c[k>>2]|0;o=L;ea=c[o>>2]|0;fa=c[o+4>>2]|0;o=c[t>>2]|0;p=(c[K>>2]|0)-(c[A>>2]|0)|0;e=c[n>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];c[i+20>>2]=c[e+20>>2];bo(f,ea,fa,o,p,i);if(((c[J>>2]|0)+(c[M>>2]|0)|0)>>>0<=(c[H>>2]|0)>>>0){p=c[k>>2]|0;o=L;fa=c[o>>2]|0;ea=c[o+4>>2]|0;o=c[K>>2]|0;f=(c[J>>2]|0)+(c[M>>2]|0)|0;e=c[A>>2]|0;g=c[t>>2]|0;d=c[n>>2]|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];d=co(p,fa,ea,o,f,e,g,i)|0;g=L;c[g>>2]=d;c[g+4>>2]=y;c[K>>2]=(c[J>>2]|0)+(c[M>>2]|0)+-1;}c[J>>2]=(c[J>>2]|0)+(c[M>>2]|0);c[I>>2]=c[J>>2];}if((ga|0)==28){c[j>>2]=-70;ha=c[j>>2]|0;l=h;return ha|0;}else if((ga|0)==32){c[j>>2]=(c[G>>2]|0)-(c[I>>2]|0);ha=c[j>>2]|0;l=h;return ha|0;}return 0;}function Tn(a){a=a|0;return(c[a+16>>2]|0)>>>0<(c[a+12>>2]|0)>>>0|0;}function Un(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+32|0;k=j+8|0;m=j+17|0;n=j+16|0;o=j;p=k;c[p>>2]=b;c[p+4>>2]=e;a[m>>0]=f;a[n>>0]=g;g=o;c[g>>2]=h;c[g+4>>2]=i;i=(d[m>>0]|0)+10|0;m=o;o=cE(i|0,((i|0)<0)<<31>>31|0,c[m>>2]|0,c[m+4>>2]|0)|0;m=k;i=eE(c[m>>2]|0,c[m+4>>2]|0,o|0,y|0)|0;o=k;c[o>>2]=i;c[o+4>>2]=y;o=k;i=cE(c[o>>2]|0,c[o+4>>2]|0,-1213897629,-820265764)|0;o=k;c[o>>2]=i;c[o+4>>2]=y;o=(d[n>>0]|0)+10|0;n=k;i=dE(c[n>>2]|0,c[n+4>>2]|0,o|0,((o|0)<0)<<31>>31|0)|0;o=k;c[o>>2]=i;c[o+4>>2]=y;o=k;y=c[o+4>>2]|0;l=j;return c[o>>2]|0;}function Vn(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e;i=e+8|0;c[f>>2]=a;c[g>>2]=b;b=h;c[b>>2]=0;c[b+4>>2]=0;c[i>>2]=0;while(1){b=h;j=c[b>>2]|0;k=c[b+4>>2]|0;if((c[i>>2]|0)>>>0>=(c[g>>2]|0)>>>0)break;b=cE(j|0,k|0,-1213897629,-820265764)|0;a=h;c[a>>2]=b;c[a+4>>2]=y;a=(d[(c[f>>2]|0)+(c[i>>2]|0)>>0]|0)+10|0;b=h;m=dE(c[b>>2]|0,c[b+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;a=h;c[a>>2]=m;c[a+4>>2]=y;c[i>>2]=(c[i>>2]|0)+1;}y=k;l=e;return j|0;}function Wn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f;i=f+12|0;j=f+8|0;k=h;c[k>>2]=a;c[k+4>>2]=b;c[i>>2]=d;c[j>>2]=e;e=h;h=c[e>>2]|0;d=c[e+4>>2]|0;if((32-(c[i>>2]|0)|0)>>>0<(c[j>>2]|0)>>>0){c[g>>2]=h&(1<<c[j>>2])-1;m=c[g>>2]|0;l=f;return m|0;}else{e=iE(h|0,d|0,32-(c[i>>2]|0)-(c[j>>2]|0)|0)|0;c[g>>2]=e&(1<<c[j>>2])-1;m=c[g>>2]|0;l=f;return m|0;}return 0;}function Xn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;if(!(c[g>>2]|0)){i=0;l=e;return i|0;}d=f;f=iE(c[d>>2]|0,c[d+4>>2]|0,64-(c[g>>2]|0)|0)|0;i=f;l=e;return i|0;}function Yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=a;c[g>>2]=b;l=e;return(c[(c[f>>2]|0)+20>>2]|0)+(c[g>>2]<<c[d+8>>2]<<3)|0;}function Zn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=iE(c[d>>2]|0,c[d+4>>2]|0,32-(c[g>>2]|0)|0)|0;l=e;return f|0;}function _n(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=ao(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(ao((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function $n(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=0;while(1){if((c[h>>2]|0)>>>0<=(c[i>>2]|0)>>>0){n=6;break;}if((c[j>>2]|0)>>>0<=(c[k>>2]|0)>>>0){n=6;break;}if((d[(c[h>>2]|0)+-1>>0]|0|0)!=(d[(c[j>>2]|0)+-1>>0]|0|0)){n=6;break;}c[h>>2]=(c[h>>2]|0)+-1;c[j>>2]=(c[j>>2]|0)+-1;c[m>>2]=(c[m>>2]|0)+1;}if((n|0)==6){l=g;return c[m>>2]|0;}return 0;}function ao(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=fo(c[i>>2]|0)|0;c[n>>2]=e^(fo(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=go(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=fo(c[i>>2]|0)|0;c[o>>2]=e^(fo(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=go(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((ho()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=io(c[i>>2]|0)|0,(o|0)==(io(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(jo(c[i>>2]|0)|0)&65535,(o|0)==((jo(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function bo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+80|0;i=h+56|0;j=h+48|0;k=h+40|0;m=h;n=h+36|0;o=h+32|0;p=h+28|0;q=h+24|0;r=h+20|0;s=h+16|0;t=h+8|0;c[k>>2]=a;a=m;c[a>>2]=b;c[a+4>>2]=d;c[n>>2]=e;c[o>>2]=f;f=m;c[p>>2]=Wn(c[f>>2]|0,c[f+4>>2]|0,c[n>>2]|0,c[g+16>>2]|0)|0;c[q>>2]=(1<<c[g+16>>2])-1;if((c[p>>2]|0)!=(c[q>>2]|0)){l=h;return;}q=m;c[r>>2]=Xn(c[q>>2]|0,c[q+4>>2]|0,c[n>>2]|0)|0;q=m;c[s>>2]=Zn(c[q>>2]|0,c[q+4>>2]|0,c[n>>2]|0)|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[s>>2];s=c[k>>2]|0;k=c[r>>2]|0;c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];c[i+20>>2]=c[g+20>>2];eo(s,k,j,i);l=h;return;}function co(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;k=l;l=l+64|0;m=k+40|0;n=k+36|0;o=k+8|0;p=k+32|0;q=k+28|0;r=k+24|0;s=k+20|0;t=k;u=k+16|0;c[n>>2]=b;b=o;c[b>>2]=d;c[b+4>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;i=o;o=c[i+4>>2]|0;h=t;c[h>>2]=c[i>>2];c[h+4>>2]=o;c[u>>2]=(c[p>>2]|0)+1;while(1){p=t;v=c[p>>2]|0;w=c[p+4>>2]|0;if((c[u>>2]|0)>>>0>=(c[q>>2]|0)>>>0)break;p=(c[n>>2]|0)+32|0;o=Un(v,w,a[(c[u>>2]|0)+-1>>0]|0,a[(c[u>>2]|0)+((c[j+12>>2]|0)-1)>>0]|0,c[p>>2]|0,c[p+4>>2]|0)|0;p=t;c[p>>2]=o;c[p+4>>2]=y;p=c[n>>2]|0;o=t;h=c[o>>2]|0;i=c[o+4>>2]|0;o=c[s>>2]|0;g=(c[u>>2]|0)-(c[r>>2]|0)|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];c[m+16>>2]=c[j+16>>2];c[m+20>>2]=c[j+20>>2];bo(p,h,i,o,g,m);c[u>>2]=(c[u>>2]|0)+1;}y=w;l=k;return v|0;}function eo(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+48|0;i=h+16|0;j=h+8|0;k=h+4|0;m=h;c[j>>2]=b;c[k>>2]=e;c[m>>2]=c[(c[j>>2]|0)+24>>2];e=c[j>>2]|0;j=c[k>>2]|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];c[i+20>>2]=c[g+20>>2];b=Yn(e,j,i)|0;i=b+((d[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0)<<3)|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];f=(c[m>>2]|0)+(c[k>>2]|0)|0;a[f>>0]=(a[f>>0]|0)+1<<24>>24;f=(c[m>>2]|0)+(c[k>>2]|0)|0;a[f>>0]=(d[f>>0]|0)&(1<<c[g+8>>2])-1;l=h;return;}function fo(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function go(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(ko()|0)!=0;f=(ho()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function ho(){return 0;}function io(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function jo(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function ko(){return d[11936]|0|0;}function lo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f;c[g>>2]=b;c[h>>2]=d;c[i>>2]=e;e=(c[c[g>>2]>>2]|0)+((c[(c[g>>2]|0)+4>>2]|0)*12|0)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];if((c[h>>2]|0)>>>0>=((c[j+4>>2]|0)+(c[j+8>>2]|0)|0)>>>0){e=(c[g>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+1;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}if((c[h>>2]|0)>>>0>(c[j+4>>2]|0)>>>0){if((c[h>>2]|0)>>>0<((c[j+4>>2]|0)+(c[j+8>>2]|0)|0)>>>0?(c[j+8>>2]=(c[h>>2]|0)-(c[j+4>>2]|0),(c[j+8>>2]|0)>>>0<(c[i>>2]|0)>>>0):0)c[j>>2]=0;}else c[j>>2]=0;An(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}function mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(c[f>>2]|0)-(c[(c[e>>2]|0)+4>>2]|0);if((c[g>>2]|0)>>>0<=((c[(c[e>>2]|0)+24>>2]|0)+1024|0)>>>0){l=d;return;}if(512<((c[g>>2]|0)-(c[(c[e>>2]|0)+24>>2]|0)-1024|0)>>>0)h=512;else h=(c[g>>2]|0)-(c[(c[e>>2]|0)+24>>2]|0)-1024|0;c[(c[e>>2]|0)+24>>2]=(c[g>>2]|0)-h;l=d;return;}function no(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[h>>2];switch(c[(c[g>>2]|0)+24>>2]|0){case 1:{Nj(c[f>>2]|0,c[g>>2]|0,c[i>>2]|0);c[(c[f>>2]|0)+24>>2]=(c[i>>2]|0)-(c[(c[f>>2]|0)+4>>2]|0);l=e;return 0;}case 2:{Oj(c[f>>2]|0,c[g>>2]|0,c[i>>2]|0);c[(c[f>>2]|0)+24>>2]=(c[i>>2]|0)-(c[(c[f>>2]|0)+4>>2]|0);l=e;return 0;}default:{l=e;return 0;}}return 0;}function oo(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;po(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function po(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{qo(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function qo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;c[f>>2]=(c[e>>2]|0)-(c[a+4>>2]|0);l=d;return(c[f>>2]|0)>>>0>2684354560|0;}function so(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(1<<c[h>>2])-1;c[m>>2]=(c[j>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);c[n>>2]=(c[m>>2]&c[k>>2])+(c[i>>2]|0);c[o>>2]=(c[m>>2]|0)-(c[n>>2]|0);n=(c[g>>2]|0)+4|0;c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);n=(c[g>>2]|0)+8|0;c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);n=(c[g>>2]|0)+16|0;c[n>>2]=(c[n>>2]|0)-(c[o>>2]|0);n=(c[g>>2]|0)+12|0;c[n>>2]=(c[n>>2]|0)-(c[o>>2]|0);l=f;return c[o>>2]|0;}function to(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d+8|0;i=d+4|0;j=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(c[e>>2]|0)+472+8;c[h>>2]=1<<c[(c[e>>2]|0)+116+4+8>>2];vo(c[(c[g>>2]|0)+36>>2]|0,c[h>>2]|0,c[f>>2]|0);do{if((c[(c[e>>2]|0)+116+4+24>>2]|0)!=1){c[i>>2]=1<<c[(c[e>>2]|0)+116+4+4>>2];h=c[(c[g>>2]|0)+44>>2]|0;b=c[i>>2]|0;a=c[f>>2]|0;if((c[(c[e>>2]|0)+116+4+24>>2]|0)==6){wo(h,b,a);break;}else{vo(h,b,a);break;}}}while(0);if(!(c[(c[g>>2]|0)+32>>2]|0)){l=d;return;}c[j>>2]=1<<c[(c[g>>2]|0)+32>>2];vo(c[(c[g>>2]|0)+40>>2]|0,c[j>>2]|0,c[f>>2]|0);l=d;return;}function uo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);if(c[j>>2]|0)o=c[c[j>>2]>>2]|0;else o=0;c[m>>2]=o;if((c[k>>2]|0)>>>0<=((c[i>>2]|0)+(c[m>>2]|0)|0)>>>0){l=f;return;}c[n>>2]=(c[k>>2]|0)-(c[i>>2]|0);if((c[(c[g>>2]|0)+16>>2]|0)>>>0<(c[n>>2]|0)>>>0)c[(c[g>>2]|0)+16>>2]=c[n>>2];if((c[(c[g>>2]|0)+12>>2]|0)>>>0<(c[(c[g>>2]|0)+16>>2]|0)>>>0)c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+16>>2];if(!(c[j>>2]|0)){l=f;return;}c[c[j>>2]>>2]=0;l=f;return;}function vo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;e=l;l=l+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e+24|0;m=e+20|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;r=e;c[p>>2]=a;c[q>>2]=b;c[r>>2]=d;d=c[q>>2]|0;q=c[r>>2]|0;c[f>>2]=c[p>>2];c[g>>2]=d;c[h>>2]=q;c[i>>2]=0;c[j>>2]=(c[g>>2]|0)/16|0;c[k>>2]=0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[j>>2]|0))break;c[n>>2]=0;while(1){if((c[n>>2]|0)>=16)break;if(c[i>>2]|0){c[o>>2]=(c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]|0)==1?c[h>>2]|0:0;g=(c[f>>2]|0)+(c[k>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)+(c[o>>2]|0);}if((c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>0<(c[h>>2]|0)>>>0)c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]=0;else{g=(c[f>>2]|0)+(c[k>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)-(c[h>>2]|0);}c[k>>2]=(c[k>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1;}c[m>>2]=(c[m>>2]|0)+1;}l=e;return;}function wo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;e=l;l=l+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e+24|0;m=e+20|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;r=e;c[p>>2]=a;c[q>>2]=b;c[r>>2]=d;d=c[q>>2]|0;q=c[r>>2]|0;c[f>>2]=c[p>>2];c[g>>2]=d;c[h>>2]=q;c[i>>2]=1;c[j>>2]=(c[g>>2]|0)/16|0;c[k>>2]=0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[j>>2]|0))break;c[n>>2]=0;while(1){if((c[n>>2]|0)>=16)break;if(c[i>>2]|0){c[o>>2]=(c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]|0)==1?c[h>>2]|0:0;g=(c[f>>2]|0)+(c[k>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)+(c[o>>2]|0);}if((c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>0<(c[h>>2]|0)>>>0)c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]=0;else{g=(c[f>>2]|0)+(c[k>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)-(c[h>>2]|0);}c[k>>2]=(c[k>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1;}c[m>>2]=(c[m>>2]|0)+1;}l=e;return;}function xo(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;k=l;l=l+160|0;m=k+48|0;n=k+40|0;o=k+36|0;p=k+32|0;q=k+28|0;r=k+24|0;s=k+20|0;t=k;u=k+16|0;v=k+12|0;w=k+8|0;c[o>>2]=a;c[p>>2]=b;c[q>>2]=d;c[r>>2]=e;c[s>>2]=f;f=t;c[f>>2]=h;c[f+4>>2]=i;c[u>>2]=j;if(c[s>>2]|0?(c[(c[s>>2]|0)+8>>2]|0)>>>0>0:0){x=(c[o>>2]|0)+12|0;y=g;z=x+104|0;do{c[x>>2]=c[y>>2];x=x+4|0;y=y+4|0;}while((x|0)<(z|0));j=c[o>>2]|0;i=c[s>>2]|0;s=c[g+4>>2]|0;f=g+32|0;h=t;e=c[h>>2]|0;d=c[h+4>>2]|0;h=c[u>>2]|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[n>>2]=yo(j,i,s,m,e,d,h)|0;A=c[n>>2]|0;l=k;return A|0;}h=c[o>>2]|0;d=t;t=c[d>>2]|0;e=c[d+4>>2]|0;d=c[u>>2]|0;x=m;y=g;z=x+104|0;do{c[x>>2]=c[y>>2];x=x+4|0;y=y+4|0;}while((x|0)<(z|0));c[v>>2]=ml(h,m,t,e,0,d)|0;if(wj(c[v>>2]|0)|0){c[n>>2]=c[v>>2];A=c[n>>2]|0;l=k;return A|0;}c[w>>2]=Ej(c[(c[o>>2]|0)+472>>2]|0,(c[o>>2]|0)+472+8|0,g,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[(c[o>>2]|0)+588>>2]|0)|0;r=(Ph(c[w>>2]|0)|0)!=0;q=c[w>>2]|0;if(r){c[n>>2]=q;A=c[n>>2]|0;l=k;return A|0;}else{c[(c[o>>2]|0)+220>>2]=q;c[n>>2]=0;A=c[n>>2]|0;l=k;return A|0;}return 0;}function yo(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;i=l;l=l+256|0;j=i+152|0;k=i+148|0;m=i+144|0;n=i+140|0;o=i;p=i+136|0;q=i+32|0;r=i+28|0;s=i+24|0;t=i+20|0;u=i+16|0;v=i+12|0;w=i+8|0;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;d=o;c[d>>2]=f;c[d+4>>2]=g;c[p>>2]=h;h=q;g=(c[k>>2]|0)+12|0;d=h+104|0;do{c[h>>2]=c[g>>2];h=h+4|0;g=g+4|0;}while((h|0)<(d|0));f=q+4|0;b=(c[m>>2]|0)+4720|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];if(c[n>>2]|0)c[q+4>>2]=c[n>>2];n=q+32|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];e=c[k>>2]|0;n=o;o=c[n>>2]|0;b=c[n+4>>2]|0;n=c[p>>2]|0;h=j;g=q;d=h+104|0;do{c[h>>2]=c[g>>2];h=h+4|0;g=g+4|0;}while((h|0)<(d|0));ml(e,j,o,b,1,n)|0;if((c[(c[m>>2]|0)+4720+24>>2]|0)==1)x=0;else x=1<<c[(c[m>>2]|0)+4720+4>>2];c[r>>2]=x;c[s>>2]=1<<c[(c[m>>2]|0)+4720+8>>2];c[t>>2]=(c[r>>2]|0)+(c[s>>2]|0)<<2;mE(c[(c[k>>2]|0)+472+8+36>>2]|0,c[(c[m>>2]|0)+20+36>>2]|0,c[t>>2]|0)|0;c[u>>2]=1<<c[(c[k>>2]|0)+472+8+32>>2];oE(c[(c[k>>2]|0)+472+8+40>>2]|0,0,c[u>>2]<<2|0)|0;c[v>>2]=(c[m>>2]|0)+20;c[w>>2]=(c[k>>2]|0)+472+8;u=c[w>>2]|0;t=c[v>>2]|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[(c[w>>2]|0)+24>>2]=c[(c[v>>2]|0)+24>>2];c[(c[w>>2]|0)+28>>2]=c[(c[v>>2]|0)+28>>2];c[(c[w>>2]|0)+20>>2]=c[(c[v>>2]|0)+20>>2];c[(c[k>>2]|0)+220>>2]=c[(c[m>>2]|0)+4760>>2];mE(c[(c[k>>2]|0)+472>>2]|0,(c[m>>2]|0)+128|0,4592)|0;l=i;return 0;}function zo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+112|0;f=e;g=f;h=b;b=g+104|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0;}while((g|0)<(b|0));i=f+4|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];c[i+24>>2]=c[d+24>>2];i=f+32|0;j=d+28|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[f+44>>2]=3;g=a;h=f;b=g+104|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0;}while((g|0)<(b|0));l=e;return;}function Ao(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+96|0;h=g+84|0;i=g;j=g+80|0;k=g+40|0;m=g+8|0;c[h>>2]=b;b=i;c[b>>2]=d;c[b+4>>2]=e;c[j>>2]=f;f=i;sj(m,c[h>>2]|0,c[f>>2]|0,c[f+4>>2]|0,c[j>>2]|0);j=k;f=j+40|0;do{c[j>>2]=0;j=j+4|0;}while((j|0)<(f|0));c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=1;j=a;a=k;f=j+40|0;do{c[j>>2]=c[a>>2];j=j+4|0;a=a+4|0;}while((j|0)<(f|0));l=g;return;}function Bo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[p>>2]=wn(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,1,1)|0;if(Ph(c[p>>2]|0)|0){c[h>>2]=c[p>>2];q=c[h>>2]|0;l=g;return q|0;}c[o>>2]=Co(c[i>>2]|0,(c[j>>2]|0)+(c[p>>2]|0)|0,(c[k>>2]|0)-(c[p>>2]|0)|0)|0;if(Ph(c[o>>2]|0)|0){c[h>>2]=c[o>>2];q=c[h>>2]|0;l=g;return q|0;}if(c[(c[i>>2]|0)+116+32>>2]|0?(k=(c[i>>2]|0)+240|0,j=c[k>>2]|0,n=c[k+4>>2]|0,k=(c[i>>2]|0)+248|0,i=dE(c[k>>2]|0,c[k+4>>2]|0,1,0)|0,(j|0)!=(i|0)|(n|0)!=(y|0)):0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}c[h>>2]=(c[p>>2]|0)+(c[o>>2]|0);q=c[h>>2]|0;l=g;return q|0;}function Co(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=l;l=l+144|0;f=e+40|0;g=e+32|0;h=e+28|0;i=e+24|0;j=e+20|0;k=e+16|0;m=e+12|0;n=e+8|0;o=e+4|0;p=e;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=c[i>>2];c[m>>2]=c[k>>2];c[n>>2]=0;if(!(c[c[h>>2]>>2]|0)){c[g>>2]=-60;q=c[g>>2]|0;l=e;return q|0;}do{if((c[c[h>>2]>>2]|0)==1){d=c[i>>2]|0;b=c[j>>2]|0;a=f;r=(c[h>>2]|0)+116|0;s=a+104|0;do{c[a>>2]=c[r>>2];a=a+4|0;r=r+4|0;}while((a|0)<(s|0));c[n>>2]=xn(d,b,f,0,0,0)|0;r=(Ph(c[n>>2]|0)|0)!=0;a=c[n>>2]|0;if(!r){c[j>>2]=(c[j>>2]|0)-a;c[m>>2]=(c[m>>2]|0)+(c[n>>2]|0);c[c[h>>2]>>2]=2;break;}c[g>>2]=a;q=c[g>>2]|0;l=e;return q|0;}}while(0);do{if((c[c[h>>2]>>2]|0)!=3){c[o>>2]=1;if((c[j>>2]|0)>>>0>=4){Pl(c[m>>2]|0,1);c[m>>2]=(c[m>>2]|0)+3;c[j>>2]=(c[j>>2]|0)-3;break;}c[g>>2]=-70;q=c[g>>2]|0;l=e;return q|0;}}while(0);do{if(c[(c[h>>2]|0)+116+32+4>>2]|0){o=Oh((c[h>>2]|0)+264|0)|0;c[p>>2]=o;if((c[j>>2]|0)>>>0>=4){Pl(c[m>>2]|0,c[p>>2]|0);c[m>>2]=(c[m>>2]|0)+4;break;}c[g>>2]=-70;q=c[g>>2]|0;l=e;return q|0;}}while(0);c[c[h>>2]>>2]=0;c[g>>2]=(c[m>>2]|0)-(c[k>>2]|0);q=c[g>>2]|0;l=e;return q|0;}function Do(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;j=l;l=l+144|0;k=j+40|0;m=j+32|0;n=j+28|0;o=j+24|0;p=j+20|0;q=j+16|0;r=j+12|0;s=j+8|0;t=j+4|0;u=j;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;h=c[n>>2]|0;g=c[s>>2]|0;s=c[t>>2]|0;t=c[r>>2]|0;f=k;e=i;i=f+104|0;do{c[f>>2]=c[e>>2];f=f+4|0;e=e+4|0;}while((f|0)<(i|0));c[u>>2]=xo(h,g,s,0,0,k,t,0,0)|0;if(wj(c[u>>2]|0)|0){c[m>>2]=c[u>>2];v=c[m>>2]|0;l=j;return v|0;}else{c[m>>2]=Bo(c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)|0;v=c[m>>2]|0;l=j;return v|0;}return 0;}function Eo(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+400|0;k=j+288|0;m=j+176|0;n=j+280|0;o=j+168|0;p=j+164|0;q=j+160|0;r=j+156|0;s=j+152|0;t=j+148|0;u=j+144|0;v=j+104|0;w=j;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;Ao(v,c[u>>2]|0,c[r>>2]|0?c[r>>2]|0:1,0,c[s>>2]|0?c[t>>2]|0:0);i=m;h=(c[n>>2]|0)+12|0;g=i+104|0;do{c[i>>2]=c[h>>2];i=i+4|0;h=h+4|0;}while((i|0)<(g|0));i=k;h=v;g=i+40|0;do{c[i>>2]=c[h>>2];i=i+4|0;h=h+4|0;}while((i|0)<(g|0));zo(w,m,k);xj(w,1e3,(c[u>>2]|0)>=0&1)|0;u=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;r=c[s>>2]|0;s=c[t>>2]|0;i=k;h=w;g=i+104|0;do{c[i>>2]=c[h>>2];i=i+4|0;h=h+4|0;}while((i|0)<(g|0));h=Do(u,n,o,p,q,r,s,k)|0;l=j;return h|0;}function Fo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;g=Eo(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,0,0,c[o>>2]|0)|0;l=h;return g|0;}function Go(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+704|0;h=g+680|0;i=g+676|0;j=g+672|0;k=g+668|0;m=g+664|0;n=g+660|0;o=g+656|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;oE(p|0,0,656)|0;f=p+352|0;c[f>>2]=c[5406];c[f+4>>2]=c[5407];c[f+8>>2]=c[5408];c[o>>2]=Fo(p,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;n=c[p+224>>2]|0;c[h>>2]=c[5406];c[h+4>>2]=c[5407];c[h+8>>2]=c[5408];Th(n,h);l=g;return c[o>>2]|0;}function Ho(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+80|0;f=e+68|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;sj(k,c[j>>2]|0,0,0,c[i>>2]|0);j=c[h>>2]|0;h=c[i>>2]|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=c[k+20>>2];c[g+24>>2]=c[k+24>>2];c[f>>2]=c[5406];c[f+4>>2]=c[5407];c[f+8>>2]=c[5408];k=zj(j,h,0,0,g,f)|0;l=e;return k|0;}function Io(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=(c[e>>2]|0)+4720|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];l=d;return;}function Jo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+272|0;h=g+168|0;i=g+160|0;j=g+156|0;k=g+152|0;m=g;n=g+48|0;o=g+16|0;p=g+12|0;q=g+8|0;c[j>>2]=a;c[k>>2]=b;b=m;c[b>>2]=e;c[b+4>>2]=f;if(!(c[k>>2]|0)){c[i>>2]=-32;r=c[i>>2]|0;l=g;return r|0;}f=n;b=(c[j>>2]|0)+12|0;e=f+104|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0;}while((f|0)<(e|0));a=n+4|0;Io(o,c[k>>2]|0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];c[a+16>>2]=c[o+16>>2];c[a+20>>2]=c[o+20>>2];c[a+24>>2]=c[o+24>>2];o=m;if((c[o>>2]|0)!=-1?1:(c[o+4>>2]|0)!=-1){o=m;a=c[o+4>>2]|0;s=a>>>0<0|(a|0)==0&(c[o>>2]|0)>>>0<524288;o=m;a=c[o+4>>2]|0;a=s?c[o>>2]|0:524288;c[p>>2]=a;if((c[p>>2]|0)>>>0>1)t=(uj((c[p>>2]|0)-1|0)|0)+1|0;else t=1;c[q>>2]=t;c[n+4>>2]=(c[n+4>>2]|0)>>>0>(c[q>>2]|0)>>>0?c[n+4>>2]|0:c[q>>2]|0;}q=n+32|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];d=c[j>>2]|0;j=c[k>>2]|0;k=m;m=c[k>>2]|0;q=c[k+4>>2]|0;f=h;b=n;e=f+104|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0;}while((f|0)<(e|0));c[i>>2]=xo(d,0,0,0,j,h,m,q,0)|0;r=c[i>>2]|0;l=g;return r|0;}function hy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=l;l=l+112|0;h=g+100|0;i=g+96|0;j=g+92|0;k=g+88|0;m=g+84|0;n=g+80|0;o=g+76|0;p=g+72|0;q=g+68|0;r=g+64|0;s=g+60|0;t=g+56|0;u=g+52|0;v=g+48|0;w=g+44|0;x=g+40|0;y=g+36|0;z=g+32|0;A=g+28|0;B=g+24|0;C=g+20|0;D=g+16|0;E=g+12|0;F=g+8|0;G=g+4|0;H=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=c[o>>2];c[q>>2]=(c[o>>2]|0)+(c[c[n>>2]>>2]|0);c[r>>2]=c[j>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[r>>2]|0)+(c[c[k>>2]>>2]|0);c[u>>2]=1;a:while(1){if(!(c[u>>2]|0)){I=48;break;}switch(c[(c[i>>2]|0)+80>>2]|0){case 0:{I=4;break a;break;}case 1:{c[v>>2]=yq((c[i>>2]|0)+8|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;j=(mr(c[v>>2]|0)|0)!=0;J=c[v>>2]|0;if(j){I=6;break a;}K=c[i>>2]|0;if(J|0){I=8;break a;}c[K+80>>2]=3;break;}case 2:{c[w>>2]=ry((c[i>>2]|0)+84+(c[(c[i>>2]|0)+76>>2]|0)|0,5-(c[(c[i>>2]|0)+76>>2]|0)|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;j=(c[i>>2]|0)+76|0;c[j>>2]=(c[j>>2]|0)+(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[w>>2]|0);c[w>>2]=yq((c[i>>2]|0)+8|0,(c[i>>2]|0)+84|0,c[(c[i>>2]|0)+76>>2]|0)|0;j=(mr(c[w>>2]|0)|0)!=0;L=c[w>>2]|0;if(j){I=11;break a;}if(L|0){I=13;break a;}else I=14;break;}case 3:{I=14;break;}case 4:{I=23;break;}case 5:{I=33;break;}case 6:{I=42;break;}default:{I=46;break a;}}do{if((I|0)==14){I=0;c[x>>2]=1<<c[(c[i>>2]|0)+8+8>>2];c[y>>2]=131072;if((c[(c[i>>2]|0)+52>>2]|0)>>>0<(c[y>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+48>>2]|0),c[(c[i>>2]|0)+52>>2]=c[y>>2],j=Cy(c[y>>2]|0)|0,c[(c[i>>2]|0)+48>>2]=j,(c[(c[i>>2]|0)+48>>2]|0)==0):0){I=16;break a;}if((c[(c[i>>2]|0)+64>>2]|0)>>>0<(c[x>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+60>>2]|0),c[(c[i>>2]|0)+64>>2]=c[x>>2],j=Cy(c[x>>2]|0)|0,c[(c[i>>2]|0)+60>>2]=j,(c[(c[i>>2]|0)+60>>2]|0)==0):0){I=19;break a;}j=c[i>>2]|0;if(c[(c[i>>2]|0)+76>>2]|0){mE(c[j+48>>2]|0,(c[i>>2]|0)+84|0,c[(c[i>>2]|0)+76>>2]|0)|0;c[(c[i>>2]|0)+56>>2]=c[(c[i>>2]|0)+76>>2];c[(c[i>>2]|0)+76>>2]=0;c[(c[i>>2]|0)+80>>2]=5;break;}else{c[j+80>>2]=4;I=23;break;}}}while(0);do{if((I|0)==23){I=0;c[z>>2]=sy(c[c[i>>2]>>2]|0)|0;if(!(c[z>>2]|0)){c[(c[i>>2]|0)+80>>2]=0;c[u>>2]=0;break;}if(((c[q>>2]|0)-(c[p>>2]|0)|0)>>>0<(c[z>>2]|0)>>>0){if((c[p>>2]|0)==(c[q>>2]|0)){c[u>>2]=0;break;}else{c[(c[i>>2]|0)+80>>2]=5;I=33;break;}}else{c[A>>2]=ty(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+60>>2]|0)+(c[(c[i>>2]|0)+68>>2]|0)|0,(c[(c[i>>2]|0)+64>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0)|0,c[p>>2]|0,c[z>>2]|0)|0;if(mr(c[A>>2]|0)|0){I=27;break a;}c[p>>2]=(c[p>>2]|0)+(c[z>>2]|0);if(!(c[A>>2]|0))break;c[(c[i>>2]|0)+72>>2]=(c[(c[i>>2]|0)+68>>2]|0)+(c[A>>2]|0);c[(c[i>>2]|0)+80>>2]=6;break;}}}while(0);do{if((I|0)==33){I=0;c[B>>2]=sy(c[c[i>>2]>>2]|0)|0;c[C>>2]=(c[B>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0);if((c[C>>2]|0)>>>0>((c[(c[i>>2]|0)+52>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0)|0)>>>0){I=34;break a;}c[D>>2]=ry((c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0,c[C>>2]|0,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;c[p>>2]=(c[p>>2]|0)+(c[D>>2]|0);j=(c[i>>2]|0)+56|0;c[j>>2]=(c[j>>2]|0)+(c[D>>2]|0);if((c[D>>2]|0)>>>0<(c[C>>2]|0)>>>0){c[u>>2]=0;break;}c[E>>2]=ty(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+60>>2]|0)+(c[(c[i>>2]|0)+68>>2]|0)|0,(c[(c[i>>2]|0)+64>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0)|0,c[(c[i>>2]|0)+48>>2]|0,c[B>>2]|0)|0;if(mr(c[E>>2]|0)|0){I=38;break a;}c[(c[i>>2]|0)+56>>2]=0;j=c[i>>2]|0;if(c[E>>2]|0){c[(c[i>>2]|0)+72>>2]=(c[j+68>>2]|0)+(c[E>>2]|0);c[(c[i>>2]|0)+80>>2]=6;I=42;break;}else{c[j+80>>2]=4;break;}}}while(0);do{if((I|0)==42){I=0;c[F>>2]=(c[(c[i>>2]|0)+72>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0);c[G>>2]=ry(c[s>>2]|0,(c[t>>2]|0)-(c[s>>2]|0)|0,(c[(c[i>>2]|0)+60>>2]|0)+(c[(c[i>>2]|0)+68>>2]|0)|0,c[F>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[G>>2]|0);j=(c[i>>2]|0)+68|0;c[j>>2]=(c[j>>2]|0)+(c[G>>2]|0);if((c[G>>2]|0)!=(c[F>>2]|0)){c[u>>2]=0;break;}c[(c[i>>2]|0)+80>>2]=4;if(((c[(c[i>>2]|0)+68>>2]|0)+131072|0)>>>0>(c[(c[i>>2]|0)+64>>2]|0)>>>0){c[(c[i>>2]|0)+72>>2]=0;c[(c[i>>2]|0)+68>>2]=0;}}}while(0);}switch(I|0){case 4:{c[h>>2]=-62;M=c[h>>2]|0;l=g;return M|0;}case 6:{c[h>>2]=J;M=c[h>>2]|0;l=g;return M|0;}case 8:{mE(K+84+(c[(c[i>>2]|0)+76>>2]|0)|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;m=(c[i>>2]|0)+76|0;c[m>>2]=(c[m>>2]|0)+(c[c[n>>2]>>2]|0);c[c[k>>2]>>2]=0;c[(c[i>>2]|0)+80>>2]=2;c[h>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+76>>2]|0);M=c[h>>2]|0;l=g;return M|0;}case 11:{c[h>>2]=L;M=c[h>>2]|0;l=g;return M|0;}case 13:{c[c[k>>2]>>2]=0;c[h>>2]=(c[w>>2]|0)-(c[(c[i>>2]|0)+76>>2]|0);M=c[h>>2]|0;l=g;return M|0;}case 16:{c[h>>2]=-64;M=c[h>>2]|0;l=g;return M|0;}case 19:{c[h>>2]=-64;M=c[h>>2]|0;l=g;return M|0;}case 27:{c[h>>2]=c[A>>2];M=c[h>>2]|0;l=g;return M|0;}case 34:{c[h>>2]=-20;M=c[h>>2]|0;l=g;return M|0;}case 38:{c[h>>2]=c[E>>2];M=c[h>>2]|0;l=g;return M|0;}case 46:{c[h>>2]=-1;M=c[h>>2]|0;l=g;return M|0;}case 48:{c[c[n>>2]>>2]=(c[p>>2]|0)-(c[o>>2]|0);c[c[k>>2]>>2]=(c[s>>2]|0)-(c[r>>2]|0);c[H>>2]=sy(c[c[i>>2]>>2]|0)|0;if((c[H>>2]|0)>>>0>3)c[H>>2]=(c[H>>2]|0)+3;c[H>>2]=(c[H>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0);c[h>>2]=c[H>>2];M=c[h>>2]|0;l=g;return M|0;}}return 0;}function iy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+128|0;h=g+116|0;i=g+112|0;j=g+108|0;k=g+104|0;m=g+100|0;n=g+96|0;o=g+92|0;p=g+88|0;q=g+84|0;r=g+80|0;s=g+76|0;t=g+72|0;u=g+68|0;v=g+64|0;w=g+60|0;x=g+56|0;y=g+52|0;z=g+48|0;A=g+44|0;B=g+40|0;C=g+36|0;D=g+32|0;E=g+28|0;F=g+24|0;G=g+20|0;H=g+16|0;I=g+12|0;J=g+8|0;K=g+4|0;L=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=(c[o>>2]|0)+(c[c[n>>2]>>2]|0);c[q>>2]=c[o>>2];c[r>>2]=c[j>>2];c[s>>2]=(c[r>>2]|0)+(c[c[k>>2]>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=1;a:while(1){if(!(c[u>>2]|0)){M=50;break;}b:do{switch(c[(c[i>>2]|0)+24>>2]|0){case 0:{M=4;break a;break;}case 1:{c[v>>2]=zq((c[i>>2]|0)+8|0,(c[i>>2]|0)+60|0,c[(c[i>>2]|0)+76>>2]|0)|0;if(c[v>>2]|0){c[w>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+76>>2]|0);if(jr(c[v>>2]|0)|0){M=7;break a;}N=(c[i>>2]|0)+60+(c[(c[i>>2]|0)+76>>2]|0)|0;O=c[q>>2]|0;if((c[w>>2]|0)>>>0>((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0){M=9;break a;}mE(N|0,O|0,c[w>>2]|0)|0;c[(c[i>>2]|0)+76>>2]=c[v>>2];c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);break b;}c[x>>2]=oy(c[c[i>>2]>>2]|0)|0;c[y>>2]=py(c[c[i>>2]>>2]|0,0,0,(c[i>>2]|0)+60|0,c[x>>2]|0)|0;if(jr(c[y>>2]|0)|0){M=12;break a;}if((c[x>>2]|0)>>>0<(c[(c[i>>2]|0)+76>>2]|0)>>>0?(c[z>>2]=oy(c[c[i>>2]>>2]|0)|0,c[A>>2]=py(c[c[i>>2]>>2]|0,0,0,(c[i>>2]|0)+60+(c[x>>2]|0)|0,c[z>>2]|0)|0,jr(c[A>>2]|0)|0):0){M=15;break a;}if((1<<c[(c[i>>2]|0)+8+8>>2]|0)<131072)P=1<<c[(c[i>>2]|0)+8+8>>2];else P=131072;c[B>>2]=P;c[(c[i>>2]|0)+56>>2]=c[B>>2];if((c[(c[i>>2]|0)+32>>2]|0)>>>0<(c[B>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+28>>2]|0),c[(c[i>>2]|0)+32>>2]=c[B>>2],j=Cy(c[B>>2]|0)|0,c[(c[i>>2]|0)+28>>2]=j,(c[(c[i>>2]|0)+28>>2]|0)==0):0){M=20;break a;}c[C>>2]=(1<<c[(c[i>>2]|0)+8+8>>2])+(c[B>>2]|0)+16;if((c[(c[i>>2]|0)+44>>2]|0)>>>0<(c[C>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+40>>2]|0),c[(c[i>>2]|0)+44>>2]=c[C>>2],j=Cy(c[C>>2]|0)|0,c[(c[i>>2]|0)+40>>2]=j,(c[(c[i>>2]|0)+40>>2]|0)==0):0){M=23;break a;}c[(c[i>>2]|0)+24>>2]=2;M=25;break;}case 2:{M=25;break;}case 3:{M=35;break;}case 4:{M=44;break;}default:{M=48;break a;}}}while(0);do{if((M|0)==25){M=0;c[D>>2]=oy(c[c[i>>2]>>2]|0)|0;if(!(c[D>>2]|0)){c[(c[i>>2]|0)+24>>2]=0;c[u>>2]=0;break;}if(((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0<(c[D>>2]|0)>>>0){if((c[q>>2]|0)==(c[p>>2]|0)){c[u>>2]=0;break;}else{c[(c[i>>2]|0)+24>>2]=3;M=35;break;}}else{c[E>>2]=py(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+40>>2]|0)+(c[(c[i>>2]|0)+48>>2]|0)|0,(c[(c[i>>2]|0)+44>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0)|0,c[q>>2]|0,c[D>>2]|0)|0;if(jr(c[E>>2]|0)|0){M=29;break a;}c[q>>2]=(c[q>>2]|0)+(c[D>>2]|0);if(!(c[E>>2]|0))break;c[(c[i>>2]|0)+52>>2]=(c[(c[i>>2]|0)+48>>2]|0)+(c[E>>2]|0);c[(c[i>>2]|0)+24>>2]=4;break;}}}while(0);do{if((M|0)==35){M=0;c[F>>2]=oy(c[c[i>>2]>>2]|0)|0;c[G>>2]=(c[F>>2]|0)-(c[(c[i>>2]|0)+36>>2]|0);if((c[G>>2]|0)>>>0>((c[(c[i>>2]|0)+32>>2]|0)-(c[(c[i>>2]|0)+36>>2]|0)|0)>>>0){M=36;break a;}c[H>>2]=qy((c[(c[i>>2]|0)+28>>2]|0)+(c[(c[i>>2]|0)+36>>2]|0)|0,c[G>>2]|0,c[q>>2]|0,(c[p>>2]|0)-(c[q>>2]|0)|0)|0;c[q>>2]=(c[q>>2]|0)+(c[H>>2]|0);j=(c[i>>2]|0)+36|0;c[j>>2]=(c[j>>2]|0)+(c[H>>2]|0);if((c[H>>2]|0)>>>0<(c[G>>2]|0)>>>0){c[u>>2]=0;break;}c[I>>2]=py(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+40>>2]|0)+(c[(c[i>>2]|0)+48>>2]|0)|0,(c[(c[i>>2]|0)+44>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0)|0,c[(c[i>>2]|0)+28>>2]|0,c[F>>2]|0)|0;if(jr(c[I>>2]|0)|0){M=40;break a;}c[(c[i>>2]|0)+36>>2]=0;j=c[i>>2]|0;if(c[I>>2]|0){c[(c[i>>2]|0)+52>>2]=(c[j+48>>2]|0)+(c[I>>2]|0);c[(c[i>>2]|0)+24>>2]=4;M=44;break;}else{c[j+24>>2]=2;break;}}}while(0);do{if((M|0)==44){M=0;c[J>>2]=(c[(c[i>>2]|0)+52>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0);c[K>>2]=qy(c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,(c[(c[i>>2]|0)+40>>2]|0)+(c[(c[i>>2]|0)+48>>2]|0)|0,c[J>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[K>>2]|0);j=(c[i>>2]|0)+48|0;c[j>>2]=(c[j>>2]|0)+(c[K>>2]|0);if((c[K>>2]|0)!=(c[J>>2]|0)){c[u>>2]=0;break;}c[(c[i>>2]|0)+24>>2]=2;if(((c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0)>>>0>(c[(c[i>>2]|0)+44>>2]|0)>>>0){c[(c[i>>2]|0)+52>>2]=0;c[(c[i>>2]|0)+48>>2]=0;}}}while(0);}switch(M|0){case 4:{c[h>>2]=-62;Q=c[h>>2]|0;l=g;return Q|0;}case 7:{c[h>>2]=c[v>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 9:{mE(N|0,O|0,(c[p>>2]|0)-(c[q>>2]|0)|0)|0;O=(c[i>>2]|0)+76|0;c[O>>2]=(c[O>>2]|0)+((c[p>>2]|0)-(c[q>>2]|0));c[q>>2]=c[p>>2];c[u>>2]=0;c[c[k>>2]>>2]=0;c[h>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+76>>2]|0)+3;Q=c[h>>2]|0;l=g;return Q|0;}case 12:{c[h>>2]=c[y>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 15:{c[h>>2]=c[A>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 20:{c[h>>2]=-64;Q=c[h>>2]|0;l=g;return Q|0;}case 23:{c[h>>2]=-64;Q=c[h>>2]|0;l=g;return Q|0;}case 29:{c[h>>2]=c[E>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 36:{c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}case 40:{c[h>>2]=c[I>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 48:{c[h>>2]=-1;Q=c[h>>2]|0;l=g;return Q|0;}case 50:{c[c[n>>2]>>2]=(c[q>>2]|0)-(c[o>>2]|0);c[c[k>>2]>>2]=(c[t>>2]|0)-(c[r>>2]|0);c[L>>2]=oy(c[c[i>>2]>>2]|0)|0;if((c[L>>2]|0)>>>0>3)c[L>>2]=(c[L>>2]|0)+3;c[L>>2]=(c[L>>2]|0)-(c[(c[i>>2]|0)+36>>2]|0);c[h>>2]=c[L>>2];Q=c[h>>2]|0;l=g;return Q|0;}}return 0;}function jy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;g=l;l=l+128|0;h=g+124|0;i=g+120|0;j=g+116|0;k=g+112|0;m=g+108|0;n=g+104|0;o=g+100|0;p=g+96|0;q=g+92|0;r=g+88|0;s=g+84|0;t=g+80|0;u=g+76|0;v=g+72|0;w=g+68|0;x=g+64|0;y=g+60|0;z=g+56|0;A=g+52|0;B=g+48|0;C=g+44|0;D=g+40|0;E=g+36|0;F=g+32|0;G=g+28|0;H=g+24|0;I=g+20|0;J=g+16|0;K=g+12|0;L=g+8|0;M=g+4|0;N=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=(c[o>>2]|0)+(c[c[n>>2]>>2]|0);c[q>>2]=c[o>>2];c[r>>2]=c[j>>2];c[s>>2]=(c[r>>2]|0)+(c[c[k>>2]>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=1;a:while(1){if(!(c[u>>2]|0)){O=54;break;}b:do{switch(c[(c[i>>2]|0)+32>>2]|0){case 0:{O=4;break a;break;}case 1:{c[v>>2]=Aq((c[i>>2]|0)+8|0,(c[i>>2]|0)+68|0,c[(c[i>>2]|0)+88>>2]|0)|0;j=(hr(c[v>>2]|0)|0)!=0;P=c[v>>2]|0;if(j){O=6;break a;}if(P|0){c[w>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+88>>2]|0);Q=(c[i>>2]|0)+68+(c[(c[i>>2]|0)+88>>2]|0)|0;R=c[q>>2]|0;if((c[w>>2]|0)>>>0>((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0){O=9;break a;}mE(Q|0,R|0,c[w>>2]|0)|0;c[(c[i>>2]|0)+88>>2]=c[v>>2];c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);break b;}c[x>>2]=ky(c[c[i>>2]>>2]|0)|0;c[y>>2]=ly(c[c[i>>2]>>2]|0,0,0,(c[i>>2]|0)+68|0,c[x>>2]|0)|0;if(hr(c[y>>2]|0)|0){O=12;break a;}if((c[x>>2]|0)>>>0<(c[(c[i>>2]|0)+88>>2]|0)>>>0?(c[z>>2]=ky(c[c[i>>2]>>2]|0)|0,c[A>>2]=ly(c[c[i>>2]>>2]|0,0,0,(c[i>>2]|0)+68+(c[x>>2]|0)|0,c[z>>2]|0)|0,hr(c[A>>2]|0)|0):0){O=15;break a;}if((c[(c[i>>2]|0)+8+8>>2]|0)>>>0>1024)S=c[(c[i>>2]|0)+8+8>>2]|0;else S=1024;c[(c[i>>2]|0)+8+8>>2]=S;if((c[(c[i>>2]|0)+8+8>>2]|0)>>>0<131072)T=c[(c[i>>2]|0)+8+8>>2]|0;else T=131072;c[B>>2]=T;c[(c[i>>2]|0)+64>>2]=c[B>>2];if((c[(c[i>>2]|0)+40>>2]|0)>>>0<(c[B>>2]|0)>>>0?(xc[c[(c[i>>2]|0)+92+4>>2]&31](c[(c[i>>2]|0)+92+8>>2]|0,c[(c[i>>2]|0)+36>>2]|0),c[(c[i>>2]|0)+40>>2]=c[B>>2],j=qc[c[(c[i>>2]|0)+92>>2]&63](c[(c[i>>2]|0)+92+8>>2]|0,c[B>>2]|0)|0,c[(c[i>>2]|0)+36>>2]=j,(c[(c[i>>2]|0)+36>>2]|0)==0):0){O=22;break a;}c[C>>2]=(c[(c[i>>2]|0)+8+8>>2]|0)+(c[B>>2]|0)+16;if((c[(c[i>>2]|0)+52>>2]|0)>>>0<(c[C>>2]|0)>>>0?(xc[c[(c[i>>2]|0)+92+4>>2]&31](c[(c[i>>2]|0)+92+8>>2]|0,c[(c[i>>2]|0)+48>>2]|0),c[(c[i>>2]|0)+52>>2]=c[C>>2],j=qc[c[(c[i>>2]|0)+92>>2]&63](c[(c[i>>2]|0)+92+8>>2]|0,c[C>>2]|0)|0,c[(c[i>>2]|0)+48>>2]=j,(c[(c[i>>2]|0)+48>>2]|0)==0):0){O=25;break a;}c[(c[i>>2]|0)+32>>2]=2;O=27;break;}case 2:{O=27;break;}case 3:{O=39;break;}case 4:{O=48;break;}default:{O=52;break a;}}}while(0);do{if((O|0)==27){O=0;c[D>>2]=ky(c[c[i>>2]>>2]|0)|0;if(!(c[D>>2]|0)){c[(c[i>>2]|0)+32>>2]=0;c[u>>2]=0;break;}if(((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0<(c[D>>2]|0)>>>0)if((c[q>>2]|0)==(c[p>>2]|0)){c[u>>2]=0;break;}else{c[(c[i>>2]|0)+32>>2]=3;O=39;break;}c[E>>2]=my(c[c[i>>2]>>2]|0)|0;if(c[E>>2]|0)U=0;else U=(c[(c[i>>2]|0)+52>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0)|0;c[F>>2]=ly(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0,U,c[q>>2]|0,c[D>>2]|0)|0;if(hr(c[F>>2]|0)|0){O=33;break a;}c[q>>2]=(c[q>>2]|0)+(c[D>>2]|0);if((c[F>>2]|0)!=0|(c[E>>2]|0)!=0){c[(c[i>>2]|0)+60>>2]=(c[(c[i>>2]|0)+56>>2]|0)+(c[F>>2]|0);c[(c[i>>2]|0)+32>>2]=4;}}}while(0);do{if((O|0)==39){O=0;c[G>>2]=ky(c[c[i>>2]>>2]|0)|0;c[H>>2]=(c[G>>2]|0)-(c[(c[i>>2]|0)+44>>2]|0);if((c[H>>2]|0)>>>0>((c[(c[i>>2]|0)+40>>2]|0)-(c[(c[i>>2]|0)+44>>2]|0)|0)>>>0){O=40;break a;}c[I>>2]=ny((c[(c[i>>2]|0)+36>>2]|0)+(c[(c[i>>2]|0)+44>>2]|0)|0,c[H>>2]|0,c[q>>2]|0,(c[p>>2]|0)-(c[q>>2]|0)|0)|0;c[q>>2]=(c[q>>2]|0)+(c[I>>2]|0);j=(c[i>>2]|0)+44|0;c[j>>2]=(c[j>>2]|0)+(c[I>>2]|0);if((c[I>>2]|0)>>>0<(c[H>>2]|0)>>>0){c[u>>2]=0;break;}c[J>>2]=my(c[c[i>>2]>>2]|0)|0;c[K>>2]=ly(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0,(c[(c[i>>2]|0)+52>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0)|0,c[(c[i>>2]|0)+36>>2]|0,c[G>>2]|0)|0;if(hr(c[K>>2]|0)|0){O=44;break a;}c[(c[i>>2]|0)+44>>2]=0;j=c[i>>2]|0;if((c[K>>2]|0)!=0|(c[J>>2]|0)!=0){c[(c[i>>2]|0)+60>>2]=(c[j+56>>2]|0)+(c[K>>2]|0);c[(c[i>>2]|0)+32>>2]=4;O=48;break;}else{c[j+32>>2]=2;break;}}}while(0);do{if((O|0)==48){O=0;c[L>>2]=(c[(c[i>>2]|0)+60>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0);c[M>>2]=ny(c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,(c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0,c[L>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[M>>2]|0);j=(c[i>>2]|0)+56|0;c[j>>2]=(c[j>>2]|0)+(c[M>>2]|0);if((c[M>>2]|0)!=(c[L>>2]|0)){c[u>>2]=0;break;}c[(c[i>>2]|0)+32>>2]=2;if(((c[(c[i>>2]|0)+56>>2]|0)+(c[(c[i>>2]|0)+64>>2]|0)|0)>>>0>(c[(c[i>>2]|0)+52>>2]|0)>>>0){c[(c[i>>2]|0)+60>>2]=0;c[(c[i>>2]|0)+56>>2]=0;}}}while(0);}switch(O|0){case 4:{c[h>>2]=-62;V=c[h>>2]|0;l=g;return V|0;}case 6:{c[h>>2]=P;V=c[h>>2]|0;l=g;return V|0;}case 9:{mE(Q|0,R|0,(c[p>>2]|0)-(c[q>>2]|0)|0)|0;R=(c[i>>2]|0)+88|0;c[R>>2]=(c[R>>2]|0)+((c[p>>2]|0)-(c[q>>2]|0));c[c[k>>2]>>2]=0;c[h>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+88>>2]|0)+3;V=c[h>>2]|0;l=g;return V|0;}case 12:{c[h>>2]=c[y>>2];V=c[h>>2]|0;l=g;return V|0;}case 15:{c[h>>2]=c[A>>2];V=c[h>>2]|0;l=g;return V|0;}case 22:{c[h>>2]=-64;V=c[h>>2]|0;l=g;return V|0;}case 25:{c[h>>2]=-64;V=c[h>>2]|0;l=g;return V|0;}case 33:{c[h>>2]=c[F>>2];V=c[h>>2]|0;l=g;return V|0;}case 40:{c[h>>2]=-20;V=c[h>>2]|0;l=g;return V|0;}case 44:{c[h>>2]=c[K>>2];V=c[h>>2]|0;l=g;return V|0;}case 52:{c[h>>2]=-1;V=c[h>>2]|0;l=g;return V|0;}case 54:{c[c[n>>2]>>2]=(c[q>>2]|0)-(c[o>>2]|0);c[c[k>>2]>>2]=(c[t>>2]|0)-(c[r>>2]|0);c[N>>2]=ky(c[c[i>>2]>>2]|0)|0;c[N>>2]=(c[N>>2]|0)-(c[(c[i>>2]|0)+44>>2]|0);c[h>>2]=c[N>>2];V=c[h>>2]|0;l=g;return V|0;}}return 0;}function ky(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+21536>>2]|0;}function ly(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;i=l;l=l+80|0;j=i+64|0;k=i+60|0;m=i+56|0;n=i+52|0;o=i+48|0;p=i+44|0;q=i+40|0;r=i+32|0;s=i+24|0;t=i;u=i+20|0;v=i+16|0;w=i+12|0;x=i+8|0;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if((c[p>>2]|0)!=(c[(c[k>>2]|0)+21536>>2]|0)){c[j>>2]=-72;z=c[j>>2]|0;l=i;return z|0;}if(c[n>>2]|0)us(c[k>>2]|0,c[m>>2]|0);a:do{switch(c[(c[k>>2]|0)+21580>>2]|0){case 0:{if((c[p>>2]|0)!=5){c[j>>2]=-72;z=c[j>>2]|0;l=i;return z|0;}if(((Bq(c[o>>2]|0)|0)&-16|0)==407710288){h=(c[k>>2]|0)+152788|0;g=c[o>>2]|0;a[h>>0]=a[g>>0]|0;a[h+1>>0]=a[g+1>>0]|0;a[h+2>>0]=a[g+2>>0]|0;a[h+3>>0]=a[g+3>>0]|0;a[h+4>>0]=a[g+4>>0]|0;c[(c[k>>2]|0)+21536>>2]=3;c[(c[k>>2]|0)+21580>>2]=4;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}g=Cq(c[o>>2]|0,5)|0;c[(c[k>>2]|0)+21680>>2]=g;g=(hr(c[(c[k>>2]|0)+21680>>2]|0)|0)!=0;h=c[k>>2]|0;if(g){c[j>>2]=c[h+21680>>2];z=c[j>>2]|0;l=i;return z|0;}g=h+152788|0;h=c[o>>2]|0;a[g>>0]=a[h>>0]|0;a[g+1>>0]=a[h+1>>0]|0;a[g+2>>0]=a[h+2>>0]|0;a[g+3>>0]=a[h+3>>0]|0;a[g+4>>0]=a[h+4>>0]|0;h=c[k>>2]|0;if((c[(c[k>>2]|0)+21680>>2]|0)>>>0<=5){c[h+21536>>2]=0;break a;}c[(c[k>>2]|0)+21536>>2]=(c[h+21680>>2]|0)-5;c[(c[k>>2]|0)+21580>>2]=1;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}case 1:break;case 2:{c[s>>2]=ir(c[o>>2]|0,3,r)|0;if(hr(c[s>>2]|0)|0){c[j>>2]=c[s>>2];z=c[j>>2]|0;l=i;return z|0;}if((c[r>>2]|0)==3){if(c[(c[k>>2]|0)+21552+16>>2]|0?(h=Oh((c[k>>2]|0)+21592|0)|0,g=t,c[g>>2]=h,c[g+4>>2]=y,g=t,h=iE(c[g>>2]|0,c[g+4>>2]|0,11)|0,c[u>>2]=h&4194303,c[v>>2]=c[o>>2],c[w>>2]=(d[(c[v>>2]|0)+2>>0]|0)+((d[(c[v>>2]|0)+1>>0]|0)<<8)+(((d[c[v>>2]>>0]|0)&63)<<16),(c[w>>2]|0)!=(c[u>>2]|0)):0){c[j>>2]=-22;z=c[j>>2]|0;l=i;return z|0;}c[(c[k>>2]|0)+21536>>2]=0;c[(c[k>>2]|0)+21580>>2]=0;}else{c[(c[k>>2]|0)+21536>>2]=c[s>>2];c[(c[k>>2]|0)+21576>>2]=c[r>>2];c[(c[k>>2]|0)+21580>>2]=3;}c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}case 3:{switch(c[(c[k>>2]|0)+21576>>2]|0){case 0:{c[x>>2]=xs(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;break;}case 1:{c[x>>2]=ys(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;break;}case 2:{c[j>>2]=-1;z=c[j>>2]|0;l=i;return z|0;}case 3:{c[x>>2]=0;break;}default:{c[j>>2]=-1;z=c[j>>2]|0;l=i;return z|0;}}c[(c[k>>2]|0)+21580>>2]=2;c[(c[k>>2]|0)+21536>>2]=3;c[(c[k>>2]|0)+21520>>2]=(c[m>>2]|0)+(c[x>>2]|0);if(hr(c[x>>2]|0)|0){c[j>>2]=c[x>>2];z=c[j>>2]|0;l=i;return z|0;}if(c[(c[k>>2]|0)+21552+16>>2]|0)Nh((c[k>>2]|0)+21592|0,c[m>>2]|0,c[x>>2]|0)|0;c[j>>2]=c[x>>2];z=c[j>>2]|0;l=i;return z|0;}case 4:{mE((c[k>>2]|0)+152788+5|0,c[o>>2]|0,c[(c[k>>2]|0)+21536>>2]|0)|0;h=Bq((c[k>>2]|0)+152788+4|0)|0;c[(c[k>>2]|0)+21536>>2]=h;c[(c[k>>2]|0)+21580>>2]=5;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}case 5:{c[(c[k>>2]|0)+21536>>2]=0;c[(c[k>>2]|0)+21580>>2]=0;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}default:{c[j>>2]=-1;z=c[j>>2]|0;l=i;return z|0;}}}while(0);mE((c[k>>2]|0)+152788+5|0,c[o>>2]|0,c[(c[k>>2]|0)+21536>>2]|0)|0;c[q>>2]=ws(c[k>>2]|0,(c[k>>2]|0)+152788|0,c[(c[k>>2]|0)+21680>>2]|0)|0;if(hr(c[q>>2]|0)|0){c[j>>2]=c[q>>2];z=c[j>>2]|0;l=i;return z|0;}else{c[(c[k>>2]|0)+21536>>2]=3;c[(c[k>>2]|0)+21580>>2]=2;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}return 0;}function my(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[(c[d>>2]|0)+21580>>2]|0)==5|0;}function ny(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function oy(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+21536>>2]|0;}function py(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+48|0;i=h+40|0;j=h+36|0;k=h+32|0;m=h+28|0;n=h+24|0;o=h+20|0;p=h+16|0;q=h+8|0;r=h+4|0;s=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[o>>2]|0)!=(c[(c[j>>2]|0)+21536>>2]|0)){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}if(c[m>>2]|0)Kt(c[j>>2]|0,c[k>>2]|0);a:do{switch(c[(c[j>>2]|0)+21564>>2]|0){case 0:{if((c[o>>2]|0)!=5){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}g=Nq(c[n>>2]|0,5)|0;c[(c[j>>2]|0)+21540>>2]=g;g=(jr(c[(c[j>>2]|0)+21540>>2]|0)|0)!=0;f=c[j>>2]|0;if(g){c[i>>2]=c[f+21540>>2];t=c[i>>2]|0;l=h;return t|0;}g=f+152660|0;f=c[n>>2]|0;a[g>>0]=a[f>>0]|0;a[g+1>>0]=a[f+1>>0]|0;a[g+2>>0]=a[f+2>>0]|0;a[g+3>>0]=a[f+3>>0]|0;a[g+4>>0]=a[f+4>>0]|0;f=c[j>>2]|0;if((c[(c[j>>2]|0)+21540>>2]|0)>>>0<=5){c[f+21536>>2]=0;break a;}c[(c[j>>2]|0)+21536>>2]=(c[f+21540>>2]|0)-5;c[(c[j>>2]|0)+21564>>2]=1;c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}case 1:break;case 2:{c[r>>2]=kr(c[n>>2]|0,3,q)|0;if(jr(c[r>>2]|0)|0){c[i>>2]=c[r>>2];t=c[i>>2]|0;l=h;return t|0;}if((c[q>>2]|0)==3){c[(c[j>>2]|0)+21536>>2]=0;c[(c[j>>2]|0)+21564>>2]=0;}else{c[(c[j>>2]|0)+21536>>2]=c[r>>2];c[(c[j>>2]|0)+21560>>2]=c[q>>2];c[(c[j>>2]|0)+21564>>2]=3;}c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}case 3:{switch(c[(c[j>>2]|0)+21560>>2]|0){case 0:{c[s>>2]=Nt(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 1:{c[s>>2]=Ot(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 2:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 3:{c[s>>2]=0;break;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}c[(c[j>>2]|0)+21564>>2]=2;c[(c[j>>2]|0)+21536>>2]=3;c[(c[j>>2]|0)+21520>>2]=(c[k>>2]|0)+(c[s>>2]|0);c[i>>2]=c[s>>2];t=c[i>>2]|0;l=h;return t|0;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}}while(0);mE((c[j>>2]|0)+152660+5|0,c[n>>2]|0,c[(c[j>>2]|0)+21536>>2]|0)|0;c[p>>2]=Mt(c[j>>2]|0,(c[j>>2]|0)+152660|0,c[(c[j>>2]|0)+21540>>2]|0)|0;if(jr(c[p>>2]|0)|0){c[i>>2]=c[p>>2];t=c[i>>2]|0;l=h;return t|0;}else{c[(c[j>>2]|0)+21536>>2]=3;c[(c[j>>2]|0)+21564>>2]=2;c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}return 0;}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function ry(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function sy(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+26656>>2]|0;}function ty(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+48|0;i=h+40|0;j=h+36|0;k=h+32|0;m=h+28|0;n=h+24|0;o=h+20|0;p=h+16|0;q=h+8|0;r=h+4|0;s=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[o>>2]|0)!=(c[(c[j>>2]|0)+26656>>2]|0)){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}Tu(c[j>>2]|0,c[k>>2]|0);a:do{switch(c[(c[j>>2]|0)+26708>>2]|0){case 0:{if((c[o>>2]|0)!=5){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}g=Vu(c[j>>2]|0,c[n>>2]|0,5)|0;c[(c[j>>2]|0)+26660>>2]=g;g=(mr(c[(c[j>>2]|0)+26660>>2]|0)|0)!=0;f=c[j>>2]|0;if(g){c[i>>2]=c[f+26660>>2];t=c[i>>2]|0;l=h;return t|0;}g=f+157804|0;f=c[n>>2]|0;a[g>>0]=a[f>>0]|0;a[g+1>>0]=a[f+1>>0]|0;a[g+2>>0]=a[f+2>>0]|0;a[g+3>>0]=a[f+3>>0]|0;a[g+4>>0]=a[f+4>>0]|0;if((c[(c[j>>2]|0)+26660>>2]|0)>>>0<=5){c[(c[j>>2]|0)+26656>>2]=0;break a;}c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 1:break;case 2:{c[r>>2]=lr(c[n>>2]|0,3,q)|0;if(mr(c[r>>2]|0)|0){c[i>>2]=c[r>>2];t=c[i>>2]|0;l=h;return t|0;}if((c[q>>2]|0)==3){c[(c[j>>2]|0)+26656>>2]=0;c[(c[j>>2]|0)+26708>>2]=0;}else{c[(c[j>>2]|0)+26656>>2]=c[r>>2];c[(c[j>>2]|0)+26704>>2]=c[q>>2];c[(c[j>>2]|0)+26708>>2]=3;}c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}case 3:{switch(c[(c[j>>2]|0)+26704>>2]|0){case 0:{c[s>>2]=Xu(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 1:{c[s>>2]=Yu(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 2:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 3:{c[s>>2]=0;break;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}c[(c[j>>2]|0)+26708>>2]=2;c[(c[j>>2]|0)+26656>>2]=3;c[(c[j>>2]|0)+26640>>2]=(c[k>>2]|0)+(c[s>>2]|0);c[i>>2]=c[s>>2];t=c[i>>2]|0;l=h;return t|0;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}}while(0);c[p>>2]=Wu(c[j>>2]|0,(c[j>>2]|0)+157804|0,c[(c[j>>2]|0)+26660>>2]|0)|0;if(mr(c[p>>2]|0)|0){c[i>>2]=c[p>>2];t=c[i>>2]|0;l=h;return t|0;}else{c[(c[j>>2]|0)+26656>>2]=3;c[(c[j>>2]|0)+26708>>2]=2;c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}return 0;}function uy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=l;l=l+112|0;h=g+100|0;i=g+96|0;j=g+92|0;k=g+88|0;m=g+84|0;n=g+80|0;o=g+76|0;p=g+72|0;q=g+68|0;r=g+64|0;s=g+60|0;t=g+56|0;u=g+52|0;v=g+48|0;w=g+44|0;x=g+40|0;y=g+36|0;z=g+32|0;A=g+28|0;B=g+24|0;C=g+20|0;D=g+16|0;E=g+12|0;F=g+8|0;G=g+4|0;H=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=c[o>>2];c[q>>2]=(c[o>>2]|0)+(c[c[n>>2]>>2]|0);c[r>>2]=c[j>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[r>>2]|0)+(c[c[k>>2]>>2]|0);c[u>>2]=1;a:while(1){if(!(c[u>>2]|0)){I=50;break;}switch(c[(c[i>>2]|0)+80>>2]|0){case 0:{I=4;break a;break;}case 1:{c[v>>2]=sx((c[i>>2]|0)+8|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;j=(rr(c[v>>2]|0)|0)!=0;J=c[v>>2]|0;if(j){I=6;break a;}K=c[i>>2]|0;if(J|0){I=8;break a;}c[K+80>>2]=3;break;}case 2:{c[w>>2]=vy((c[i>>2]|0)+84+(c[(c[i>>2]|0)+68>>2]|0)|0,5-(c[(c[i>>2]|0)+68>>2]|0)|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;j=(c[i>>2]|0)+68|0;c[j>>2]=(c[j>>2]|0)+(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[w>>2]|0);c[w>>2]=sx((c[i>>2]|0)+8|0,(c[i>>2]|0)+84|0,c[(c[i>>2]|0)+68>>2]|0)|0;j=(rr(c[w>>2]|0)|0)!=0;L=c[w>>2]|0;if(j){I=11;break a;}if(L|0){I=13;break a;}else I=14;break;}case 3:{I=14;break;}case 4:{I=25;break;}case 5:{I=35;break;}case 6:{I=44;break;}default:{I=48;break a;}}do{if((I|0)==14){I=0;c[x>>2]=1<<c[(c[i>>2]|0)+8+8>>2];c[y>>2]=131072;if((c[(c[i>>2]|0)+44>>2]|0)>>>0<131072?(Dy(c[(c[i>>2]|0)+40>>2]|0),c[(c[i>>2]|0)+44>>2]=131072,j=Cy(131072)|0,c[(c[i>>2]|0)+40>>2]=j,(c[(c[i>>2]|0)+40>>2]|0)==0):0){I=16;break a;}if((c[(c[i>>2]|0)+56>>2]|0)>>>0<(c[x>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+52>>2]|0),c[(c[i>>2]|0)+56>>2]=c[x>>2],j=Cy(c[x>>2]|0)|0,c[(c[i>>2]|0)+52>>2]=j,(c[(c[i>>2]|0)+52>>2]|0)==0):0){I=19;break a;}if(c[(c[i>>2]|0)+76>>2]|0)lw(c[c[i>>2]>>2]|0,c[(c[i>>2]|0)+72>>2]|0,c[(c[i>>2]|0)+76>>2]|0);j=c[i>>2]|0;if(c[(c[i>>2]|0)+68>>2]|0){mE(c[j+40>>2]|0,(c[i>>2]|0)+84|0,c[(c[i>>2]|0)+68>>2]|0)|0;c[(c[i>>2]|0)+48>>2]=c[(c[i>>2]|0)+68>>2];c[(c[i>>2]|0)+68>>2]=0;c[(c[i>>2]|0)+80>>2]=5;break;}else{c[j+80>>2]=4;I=25;break;}}}while(0);do{if((I|0)==25){I=0;c[z>>2]=wy(c[c[i>>2]>>2]|0)|0;if(!(c[z>>2]|0)){c[(c[i>>2]|0)+80>>2]=0;c[u>>2]=0;break;}if(((c[q>>2]|0)-(c[p>>2]|0)|0)>>>0<(c[z>>2]|0)>>>0){if((c[p>>2]|0)==(c[q>>2]|0)){c[u>>2]=0;break;}else{c[(c[i>>2]|0)+80>>2]=5;I=35;break;}}else{c[A>>2]=xy(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+52>>2]|0)+(c[(c[i>>2]|0)+60>>2]|0)|0,(c[(c[i>>2]|0)+56>>2]|0)-(c[(c[i>>2]|0)+60>>2]|0)|0,c[p>>2]|0,c[z>>2]|0)|0;if(rr(c[A>>2]|0)|0){I=29;break a;}c[p>>2]=(c[p>>2]|0)+(c[z>>2]|0);if(!(c[A>>2]|0))break;c[(c[i>>2]|0)+64>>2]=(c[(c[i>>2]|0)+60>>2]|0)+(c[A>>2]|0);c[(c[i>>2]|0)+80>>2]=6;break;}}}while(0);do{if((I|0)==35){I=0;c[B>>2]=wy(c[c[i>>2]>>2]|0)|0;c[C>>2]=(c[B>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0);if((c[C>>2]|0)>>>0>((c[(c[i>>2]|0)+44>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0)|0)>>>0){I=36;break a;}c[D>>2]=vy((c[(c[i>>2]|0)+40>>2]|0)+(c[(c[i>>2]|0)+48>>2]|0)|0,c[C>>2]|0,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;c[p>>2]=(c[p>>2]|0)+(c[D>>2]|0);j=(c[i>>2]|0)+48|0;c[j>>2]=(c[j>>2]|0)+(c[D>>2]|0);if((c[D>>2]|0)>>>0<(c[C>>2]|0)>>>0){c[u>>2]=0;break;}c[E>>2]=xy(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+52>>2]|0)+(c[(c[i>>2]|0)+60>>2]|0)|0,(c[(c[i>>2]|0)+56>>2]|0)-(c[(c[i>>2]|0)+60>>2]|0)|0,c[(c[i>>2]|0)+40>>2]|0,c[B>>2]|0)|0;if(rr(c[E>>2]|0)|0){I=40;break a;}c[(c[i>>2]|0)+48>>2]=0;j=c[i>>2]|0;if(c[E>>2]|0){c[(c[i>>2]|0)+64>>2]=(c[j+60>>2]|0)+(c[E>>2]|0);c[(c[i>>2]|0)+80>>2]=6;I=44;break;}else{c[j+80>>2]=4;break;}}}while(0);do{if((I|0)==44){I=0;c[F>>2]=(c[(c[i>>2]|0)+64>>2]|0)-(c[(c[i>>2]|0)+60>>2]|0);c[G>>2]=vy(c[s>>2]|0,(c[t>>2]|0)-(c[s>>2]|0)|0,(c[(c[i>>2]|0)+52>>2]|0)+(c[(c[i>>2]|0)+60>>2]|0)|0,c[F>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[G>>2]|0);j=(c[i>>2]|0)+60|0;c[j>>2]=(c[j>>2]|0)+(c[G>>2]|0);if((c[G>>2]|0)!=(c[F>>2]|0)){c[u>>2]=0;break;}c[(c[i>>2]|0)+80>>2]=4;if(((c[(c[i>>2]|0)+60>>2]|0)+131072|0)>>>0>(c[(c[i>>2]|0)+56>>2]|0)>>>0){c[(c[i>>2]|0)+64>>2]=0;c[(c[i>>2]|0)+60>>2]=0;}}}while(0);}switch(I|0){case 4:{c[h>>2]=-62;M=c[h>>2]|0;l=g;return M|0;}case 6:{c[h>>2]=J;M=c[h>>2]|0;l=g;return M|0;}case 8:{mE(K+84+(c[(c[i>>2]|0)+68>>2]|0)|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;m=(c[i>>2]|0)+68|0;c[m>>2]=(c[m>>2]|0)+(c[c[n>>2]>>2]|0);c[c[k>>2]>>2]=0;c[(c[i>>2]|0)+80>>2]=2;c[h>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0);M=c[h>>2]|0;l=g;return M|0;}case 11:{c[h>>2]=L;M=c[h>>2]|0;l=g;return M|0;}case 13:{c[c[k>>2]>>2]=0;c[h>>2]=(c[w>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0);M=c[h>>2]|0;l=g;return M|0;}case 16:{c[h>>2]=-64;M=c[h>>2]|0;l=g;return M|0;}case 19:{c[h>>2]=-64;M=c[h>>2]|0;l=g;return M|0;}case 29:{c[h>>2]=c[A>>2];M=c[h>>2]|0;l=g;return M|0;}case 36:{c[h>>2]=-20;M=c[h>>2]|0;l=g;return M|0;}case 40:{c[h>>2]=c[E>>2];M=c[h>>2]|0;l=g;return M|0;}case 48:{c[h>>2]=-1;M=c[h>>2]|0;l=g;return M|0;}case 50:{c[c[n>>2]>>2]=(c[p>>2]|0)-(c[o>>2]|0);c[c[k>>2]>>2]=(c[s>>2]|0)-(c[r>>2]|0);c[H>>2]=wy(c[c[i>>2]>>2]|0)|0;if((c[H>>2]|0)>>>0>3)c[H>>2]=(c[H>>2]|0)+3;c[H>>2]=(c[H>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0);c[h>>2]=c[H>>2];M=c[h>>2]|0;l=g;return M|0;}}return 0;}function vy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function wy(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+10268>>2]|0;}function xy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+48|0;i=h+40|0;j=h+36|0;k=h+32|0;m=h+28|0;n=h+24|0;o=h+20|0;p=h+16|0;q=h+8|0;r=h+4|0;s=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[o>>2]|0)!=(c[(c[j>>2]|0)+10268>>2]|0)){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}yy(c[j>>2]|0,c[k>>2]|0);a:do{switch(c[(c[j>>2]|0)+10316>>2]|0){case 0:{if((c[o>>2]|0)!=5){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}g=mw(c[j>>2]|0,c[n>>2]|0,5)|0;c[(c[j>>2]|0)+10272>>2]=g;g=(rr(c[(c[j>>2]|0)+10272>>2]|0)|0)!=0;f=c[j>>2]|0;if(g){c[i>>2]=c[f+10272>>2];t=c[i>>2]|0;l=h;return t|0;}g=f+141408|0;f=c[n>>2]|0;a[g>>0]=a[f>>0]|0;a[g+1>>0]=a[f+1>>0]|0;a[g+2>>0]=a[f+2>>0]|0;a[g+3>>0]=a[f+3>>0]|0;a[g+4>>0]=a[f+4>>0]|0;if((c[(c[j>>2]|0)+10272>>2]|0)>>>0<=5){c[(c[j>>2]|0)+10268>>2]=0;break a;}c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 1:break;case 2:{c[r>>2]=qr(c[n>>2]|0,3,q)|0;if(rr(c[r>>2]|0)|0){c[i>>2]=c[r>>2];t=c[i>>2]|0;l=h;return t|0;}if((c[q>>2]|0)==3){c[(c[j>>2]|0)+10268>>2]=0;c[(c[j>>2]|0)+10316>>2]=0;}else{c[(c[j>>2]|0)+10268>>2]=c[r>>2];c[(c[j>>2]|0)+10312>>2]=c[q>>2];c[(c[j>>2]|0)+10316>>2]=3;}c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}case 3:{switch(c[(c[j>>2]|0)+10312>>2]|0){case 0:{c[s>>2]=ow(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 1:{c[s>>2]=pw(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 2:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 3:{c[s>>2]=0;break;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}c[(c[j>>2]|0)+10316>>2]=2;c[(c[j>>2]|0)+10268>>2]=3;c[(c[j>>2]|0)+10252>>2]=(c[k>>2]|0)+(c[s>>2]|0);c[i>>2]=c[s>>2];t=c[i>>2]|0;l=h;return t|0;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}}while(0);c[p>>2]=nw(c[j>>2]|0,(c[j>>2]|0)+141408|0,c[(c[j>>2]|0)+10272>>2]|0)|0;if(rr(c[p>>2]|0)|0){c[i>>2]=c[p>>2];t=c[i>>2]|0;l=h;return t|0;}else{c[(c[j>>2]|0)+10268>>2]=3;c[(c[j>>2]|0)+10316>>2]=2;c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}return 0;}function yy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+10252>>2]|0)){l=d;return;}c[(c[e>>2]|0)+10264>>2]=c[(c[e>>2]|0)+10252>>2];c[(c[e>>2]|0)+10260>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+10252>>2]|0)-(c[(c[e>>2]|0)+10256>>2]|0)));c[(c[e>>2]|0)+10256>>2]=c[f>>2];c[(c[e>>2]|0)+10252>>2]=c[f>>2];l=d;return;}function zy(){Ay(0);return;}function Ay(a){a=a|0;Wa(10928,20112);La(10944,20117,1,1,0);Sa(10952,19886,1,-128,127);Sa(10968,19891,1,-128,127);Sa(10960,19903,1,0,255);Sa(10976,19917,2,-32768,32767);Sa(10984,19923,2,0,65535);Sa(10992,20122,4,-2147483648,2147483647);Sa(11e3,20126,4,0,-1);Sa(11008,20139,4,-2147483648,2147483647);Sa(11016,20144,4,0,-1);Qa(11024,20168,4);Qa(11032,20280,8);Ua(10624,19495);Ua(10648,16561);Va(10672,4,16594);Pa(9840,16607);Ta(10696,0,16623);Ta(10704,0,16653);Ta(10712,1,16690);Ta(10720,2,16729);Ta(10728,3,16760);Ta(10736,4,16800);Ta(10744,5,16829);Ta(10752,4,16867);Ta(10760,5,16897);Ta(10704,0,16936);Ta(10712,1,16968);Ta(10720,2,17001);Ta(10728,3,17034);Ta(10736,4,17068);Ta(10744,5,17101);Ta(10768,6,17135);Ta(10776,7,17166);Ta(10784,7,17198);return;}function By(a){a=a|0;return Oz(c[a+4>>2]|0)|0;}function Cy(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;b=l;l=l+16|0;d=b;do{if(a>>>0<245){e=a>>>0<11?16:a+11&-8;f=e>>>3;g=c[5418]|0;h=g>>>f;if(h&3|0){i=(h&1^1)+f|0;j=21712+(i<<1<<2)|0;k=j+8|0;m=c[k>>2]|0;n=m+8|0;o=c[n>>2]|0;if((o|0)==(j|0))c[5418]=g&~(1<<i);else{c[o+12>>2]=j;c[k>>2]=o;}o=i<<3;c[m+4>>2]=o|3;i=m+o+4|0;c[i>>2]=c[i>>2]|1;p=n;l=b;return p|0;}n=c[5420]|0;if(e>>>0>n>>>0){if(h|0){i=2<<f;o=h<<f&(i|0-i);i=(o&0-o)+-1|0;o=i>>>12&16;f=i>>>o;i=f>>>5&8;h=f>>>i;f=h>>>2&4;m=h>>>f;h=m>>>1&2;k=m>>>h;m=k>>>1&1;j=(i|o|f|h|m)+(k>>>m)|0;m=21712+(j<<1<<2)|0;k=m+8|0;h=c[k>>2]|0;f=h+8|0;o=c[f>>2]|0;if((o|0)==(m|0)){i=g&~(1<<j);c[5418]=i;q=i;}else{c[o+12>>2]=m;c[k>>2]=o;q=g;}o=j<<3;j=o-e|0;c[h+4>>2]=e|3;k=h+e|0;c[k+4>>2]=j|1;c[h+o>>2]=j;if(n|0){o=c[5423]|0;h=n>>>3;m=21712+(h<<1<<2)|0;i=1<<h;if(!(q&i)){c[5418]=q|i;r=m;s=m+8|0;}else{i=m+8|0;r=c[i>>2]|0;s=i;}c[s>>2]=o;c[r+12>>2]=o;c[o+8>>2]=r;c[o+12>>2]=m;}c[5420]=j;c[5423]=k;p=f;l=b;return p|0;}f=c[5419]|0;if(f){k=(f&0-f)+-1|0;j=k>>>12&16;m=k>>>j;k=m>>>5&8;o=m>>>k;m=o>>>2&4;i=o>>>m;o=i>>>1&2;h=i>>>o;i=h>>>1&1;t=c[21976+((k|j|m|o|i)+(h>>>i)<<2)>>2]|0;i=t;h=t;o=(c[t+4>>2]&-8)-e|0;while(1){t=c[i+16>>2]|0;if(!t){m=c[i+20>>2]|0;if(!m)break;else u=m;}else u=t;t=(c[u+4>>2]&-8)-e|0;m=t>>>0<o>>>0;i=u;h=m?u:h;o=m?t:o;}i=h+e|0;if(i>>>0>h>>>0){t=c[h+24>>2]|0;m=c[h+12>>2]|0;do{if((m|0)==(h|0)){j=h+20|0;k=c[j>>2]|0;if(!k){v=h+16|0;w=c[v>>2]|0;if(!w){x=0;break;}else{y=w;z=v;}}else{y=k;z=j;}j=y;k=z;while(1){v=j+20|0;w=c[v>>2]|0;if(!w){A=j+16|0;B=c[A>>2]|0;if(!B)break;else{C=B;D=A;}}else{C=w;D=v;}j=C;k=D;}c[k>>2]=0;x=j;}else{v=c[h+8>>2]|0;c[v+12>>2]=m;c[m+8>>2]=v;x=m;}}while(0);do{if(t|0){m=c[h+28>>2]|0;v=21976+(m<<2)|0;if((h|0)==(c[v>>2]|0)){c[v>>2]=x;if(!x){c[5419]=f&~(1<<m);break;}}else{m=t+16|0;c[((c[m>>2]|0)==(h|0)?m:t+20|0)>>2]=x;if(!x)break;}c[x+24>>2]=t;m=c[h+16>>2]|0;if(m|0){c[x+16>>2]=m;c[m+24>>2]=x;}m=c[h+20>>2]|0;if(m|0){c[x+20>>2]=m;c[m+24>>2]=x;}}}while(0);if(o>>>0<16){t=o+e|0;c[h+4>>2]=t|3;f=h+t+4|0;c[f>>2]=c[f>>2]|1;}else{c[h+4>>2]=e|3;c[i+4>>2]=o|1;c[i+o>>2]=o;if(n|0){f=c[5423]|0;t=n>>>3;m=21712+(t<<1<<2)|0;v=1<<t;if(!(v&g)){c[5418]=v|g;E=m;F=m+8|0;}else{v=m+8|0;E=c[v>>2]|0;F=v;}c[F>>2]=f;c[E+12>>2]=f;c[f+8>>2]=E;c[f+12>>2]=m;}c[5420]=o;c[5423]=i;}p=h+8|0;l=b;return p|0;}else G=e;}else G=e;}else G=e;}else if(a>>>0<=4294967231){m=a+11|0;f=m&-8;v=c[5419]|0;if(v){t=0-f|0;w=m>>>8;if(w){if(f>>>0>16777215)H=31;else{m=(w+1048320|0)>>>16&8;A=w<<m;w=(A+520192|0)>>>16&4;B=A<<w;A=(B+245760|0)>>>16&2;I=14-(w|m|A)+(B<<A>>>15)|0;H=f>>>(I+7|0)&1|I<<1;}}else H=0;I=c[21976+(H<<2)>>2]|0;a:do{if(!I){J=0;K=0;L=t;M=61;}else{A=0;B=t;m=I;w=f<<((H|0)==31?0:25-(H>>>1)|0);N=0;while(1){O=(c[m+4>>2]&-8)-f|0;if(O>>>0<B>>>0){if(!O){P=m;Q=0;R=m;M=65;break a;}else{S=m;T=O;}}else{S=A;T=B;}O=c[m+20>>2]|0;m=c[m+16+(w>>>31<<2)>>2]|0;U=(O|0)==0|(O|0)==(m|0)?N:O;if(!m){J=U;K=S;L=T;M=61;break;}else{A=S;B=T;w=w<<1;N=U;}}}}while(0);if((M|0)==61){if((J|0)==0&(K|0)==0){I=2<<H;t=(I|0-I)&v;if(!t){G=f;break;}I=(t&0-t)+-1|0;t=I>>>12&16;e=I>>>t;I=e>>>5&8;h=e>>>I;e=h>>>2&4;i=h>>>e;h=i>>>1&2;o=i>>>h;i=o>>>1&1;V=0;W=c[21976+((I|t|e|h|i)+(o>>>i)<<2)>>2]|0;}else{V=K;W=J;}if(!W){X=V;Y=L;}else{P=V;Q=L;R=W;M=65;}}if((M|0)==65){i=P;o=Q;h=R;while(1){e=(c[h+4>>2]&-8)-f|0;t=e>>>0<o>>>0;I=t?e:o;e=t?h:i;t=c[h+16>>2]|0;if(!t)Z=c[h+20>>2]|0;else Z=t;if(!Z){X=e;Y=I;break;}else{i=e;o=I;h=Z;}}}if(((X|0)!=0?Y>>>0<((c[5420]|0)-f|0)>>>0:0)?(h=X+f|0,h>>>0>X>>>0):0){o=c[X+24>>2]|0;i=c[X+12>>2]|0;do{if((i|0)==(X|0)){I=X+20|0;e=c[I>>2]|0;if(!e){t=X+16|0;g=c[t>>2]|0;if(!g){_=0;break;}else{$=g;aa=t;}}else{$=e;aa=I;}I=$;e=aa;while(1){t=I+20|0;g=c[t>>2]|0;if(!g){n=I+16|0;N=c[n>>2]|0;if(!N)break;else{ba=N;ca=n;}}else{ba=g;ca=t;}I=ba;e=ca;}c[e>>2]=0;_=I;}else{t=c[X+8>>2]|0;c[t+12>>2]=i;c[i+8>>2]=t;_=i;}}while(0);do{if(o){i=c[X+28>>2]|0;t=21976+(i<<2)|0;if((X|0)==(c[t>>2]|0)){c[t>>2]=_;if(!_){t=v&~(1<<i);c[5419]=t;da=t;break;}}else{t=o+16|0;c[((c[t>>2]|0)==(X|0)?t:o+20|0)>>2]=_;if(!_){da=v;break;}}c[_+24>>2]=o;t=c[X+16>>2]|0;if(t|0){c[_+16>>2]=t;c[t+24>>2]=_;}t=c[X+20>>2]|0;if(t){c[_+20>>2]=t;c[t+24>>2]=_;da=v;}else da=v;}else da=v;}while(0);b:do{if(Y>>>0<16){v=Y+f|0;c[X+4>>2]=v|3;o=X+v+4|0;c[o>>2]=c[o>>2]|1;}else{c[X+4>>2]=f|3;c[h+4>>2]=Y|1;c[h+Y>>2]=Y;o=Y>>>3;if(Y>>>0<256){v=21712+(o<<1<<2)|0;t=c[5418]|0;i=1<<o;if(!(t&i)){c[5418]=t|i;ea=v;fa=v+8|0;}else{i=v+8|0;ea=c[i>>2]|0;fa=i;}c[fa>>2]=h;c[ea+12>>2]=h;c[h+8>>2]=ea;c[h+12>>2]=v;break;}v=Y>>>8;if(v){if(Y>>>0>16777215)ga=31;else{i=(v+1048320|0)>>>16&8;t=v<<i;v=(t+520192|0)>>>16&4;o=t<<v;t=(o+245760|0)>>>16&2;g=14-(v|i|t)+(o<<t>>>15)|0;ga=Y>>>(g+7|0)&1|g<<1;}}else ga=0;g=21976+(ga<<2)|0;c[h+28>>2]=ga;t=h+16|0;c[t+4>>2]=0;c[t>>2]=0;t=1<<ga;if(!(da&t)){c[5419]=da|t;c[g>>2]=h;c[h+24>>2]=g;c[h+12>>2]=h;c[h+8>>2]=h;break;}t=c[g>>2]|0;c:do{if((c[t+4>>2]&-8|0)==(Y|0))ha=t;else{g=Y<<((ga|0)==31?0:25-(ga>>>1)|0);o=t;while(1){ia=o+16+(g>>>31<<2)|0;i=c[ia>>2]|0;if(!i)break;if((c[i+4>>2]&-8|0)==(Y|0)){ha=i;break c;}else{g=g<<1;o=i;}}c[ia>>2]=h;c[h+24>>2]=o;c[h+12>>2]=h;c[h+8>>2]=h;break b;}}while(0);t=ha+8|0;I=c[t>>2]|0;c[I+12>>2]=h;c[t>>2]=h;c[h+8>>2]=I;c[h+12>>2]=ha;c[h+24>>2]=0;}}while(0);p=X+8|0;l=b;return p|0;}else G=f;}else G=f;}else G=-1;}while(0);X=c[5420]|0;if(X>>>0>=G>>>0){ha=X-G|0;ia=c[5423]|0;if(ha>>>0>15){Y=ia+G|0;c[5423]=Y;c[5420]=ha;c[Y+4>>2]=ha|1;c[ia+X>>2]=ha;c[ia+4>>2]=G|3;}else{c[5420]=0;c[5423]=0;c[ia+4>>2]=X|3;ha=ia+X+4|0;c[ha>>2]=c[ha>>2]|1;}p=ia+8|0;l=b;return p|0;}ia=c[5421]|0;if(ia>>>0>G>>>0){ha=ia-G|0;c[5421]=ha;X=c[5424]|0;Y=X+G|0;c[5424]=Y;c[Y+4>>2]=ha|1;c[X+4>>2]=G|3;p=X+8|0;l=b;return p|0;}if(!(c[5536]|0)){c[5538]=4096;c[5537]=4096;c[5539]=-1;c[5540]=-1;c[5541]=0;c[5529]=0;c[5536]=d&-16^1431655768;ja=4096;}else ja=c[5538]|0;d=G+48|0;X=G+47|0;ha=ja+X|0;Y=0-ja|0;ja=ha&Y;if(ja>>>0<=G>>>0){p=0;l=b;return p|0;}ga=c[5528]|0;if(ga|0?(da=c[5526]|0,ea=da+ja|0,ea>>>0<=da>>>0|ea>>>0>ga>>>0):0){p=0;l=b;return p|0;}d:do{if(!(c[5529]&4)){ga=c[5424]|0;e:do{if(ga){ea=22120;while(1){da=c[ea>>2]|0;if(da>>>0<=ga>>>0?(da+(c[ea+4>>2]|0)|0)>>>0>ga>>>0:0)break;da=c[ea+8>>2]|0;if(!da){M=128;break e;}else ea=da;}da=ha-ia&Y;if(da>>>0<2147483647){fa=pE(da|0)|0;if((fa|0)==((c[ea>>2]|0)+(c[ea+4>>2]|0)|0)){if((fa|0)==(-1|0))ka=da;else{la=da;ma=fa;M=145;break d;}}else{na=fa;oa=da;M=136;}}else ka=0;}else M=128;}while(0);do{if((M|0)==128){ga=pE(0)|0;if((ga|0)!=(-1|0)?(f=ga,da=c[5537]|0,fa=da+-1|0,_=((fa&f|0)==0?0:(fa+f&0-da)-f|0)+ja|0,f=c[5526]|0,da=_+f|0,_>>>0>G>>>0&_>>>0<2147483647):0){fa=c[5528]|0;if(fa|0?da>>>0<=f>>>0|da>>>0>fa>>>0:0){ka=0;break;}fa=pE(_|0)|0;if((fa|0)==(ga|0)){la=_;ma=ga;M=145;break d;}else{na=fa;oa=_;M=136;}}else ka=0;}}while(0);do{if((M|0)==136){_=0-oa|0;if(!(d>>>0>oa>>>0&(oa>>>0<2147483647&(na|0)!=(-1|0))))if((na|0)==(-1|0)){ka=0;break;}else{la=oa;ma=na;M=145;break d;}fa=c[5538]|0;ga=X-oa+fa&0-fa;if(ga>>>0>=2147483647){la=oa;ma=na;M=145;break d;}if((pE(ga|0)|0)==(-1|0)){pE(_|0)|0;ka=0;break;}else{la=ga+oa|0;ma=na;M=145;break d;}}}while(0);c[5529]=c[5529]|4;pa=ka;M=143;}else{pa=0;M=143;}}while(0);if(((M|0)==143?ja>>>0<2147483647:0)?(ka=pE(ja|0)|0,ja=pE(0)|0,na=ja-ka|0,oa=na>>>0>(G+40|0)>>>0,!((ka|0)==(-1|0)|oa^1|ka>>>0<ja>>>0&((ka|0)!=(-1|0)&(ja|0)!=(-1|0))^1)):0){la=oa?na:pa;ma=ka;M=145;}if((M|0)==145){ka=(c[5526]|0)+la|0;c[5526]=ka;if(ka>>>0>(c[5527]|0)>>>0)c[5527]=ka;ka=c[5424]|0;f:do{if(ka){pa=22120;while(1){qa=c[pa>>2]|0;ra=c[pa+4>>2]|0;if((ma|0)==(qa+ra|0)){M=154;break;}na=c[pa+8>>2]|0;if(!na)break;else pa=na;}if(((M|0)==154?(na=pa+4|0,(c[pa+12>>2]&8|0)==0):0)?ma>>>0>ka>>>0&qa>>>0<=ka>>>0:0){c[na>>2]=ra+la;na=(c[5421]|0)+la|0;oa=ka+8|0;ja=(oa&7|0)==0?0:0-oa&7;oa=ka+ja|0;X=na-ja|0;c[5424]=oa;c[5421]=X;c[oa+4>>2]=X|1;c[ka+na+4>>2]=40;c[5425]=c[5540];break;}if(ma>>>0<(c[5422]|0)>>>0)c[5422]=ma;na=ma+la|0;X=22120;while(1){if((c[X>>2]|0)==(na|0)){M=162;break;}oa=c[X+8>>2]|0;if(!oa)break;else X=oa;}if((M|0)==162?(c[X+12>>2]&8|0)==0:0){c[X>>2]=ma;pa=X+4|0;c[pa>>2]=(c[pa>>2]|0)+la;pa=ma+8|0;oa=ma+((pa&7|0)==0?0:0-pa&7)|0;pa=na+8|0;ja=na+((pa&7|0)==0?0:0-pa&7)|0;pa=oa+G|0;d=ja-oa-G|0;c[oa+4>>2]=G|3;g:do{if((ka|0)==(ja|0)){Y=(c[5421]|0)+d|0;c[5421]=Y;c[5424]=pa;c[pa+4>>2]=Y|1;}else{if((c[5423]|0)==(ja|0)){Y=(c[5420]|0)+d|0;c[5420]=Y;c[5423]=pa;c[pa+4>>2]=Y|1;c[pa+Y>>2]=Y;break;}Y=c[ja+4>>2]|0;if((Y&3|0)==1){ia=Y&-8;ha=Y>>>3;h:do{if(Y>>>0<256){ga=c[ja+8>>2]|0;_=c[ja+12>>2]|0;if((_|0)==(ga|0)){c[5418]=c[5418]&~(1<<ha);break;}else{c[ga+12>>2]=_;c[_+8>>2]=ga;break;}}else{ga=c[ja+24>>2]|0;_=c[ja+12>>2]|0;do{if((_|0)==(ja|0)){fa=ja+16|0;da=fa+4|0;f=c[da>>2]|0;if(!f){ca=c[fa>>2]|0;if(!ca){sa=0;break;}else{ta=ca;ua=fa;}}else{ta=f;ua=da;}da=ta;f=ua;while(1){fa=da+20|0;ca=c[fa>>2]|0;if(!ca){ba=da+16|0;aa=c[ba>>2]|0;if(!aa)break;else{va=aa;wa=ba;}}else{va=ca;wa=fa;}da=va;f=wa;}c[f>>2]=0;sa=da;}else{fa=c[ja+8>>2]|0;c[fa+12>>2]=_;c[_+8>>2]=fa;sa=_;}}while(0);if(!ga)break;_=c[ja+28>>2]|0;o=21976+(_<<2)|0;do{if((c[o>>2]|0)!=(ja|0)){fa=ga+16|0;c[((c[fa>>2]|0)==(ja|0)?fa:ga+20|0)>>2]=sa;if(!sa)break h;}else{c[o>>2]=sa;if(sa|0)break;c[5419]=c[5419]&~(1<<_);break h;}}while(0);c[sa+24>>2]=ga;_=ja+16|0;o=c[_>>2]|0;if(o|0){c[sa+16>>2]=o;c[o+24>>2]=sa;}o=c[_+4>>2]|0;if(!o)break;c[sa+20>>2]=o;c[o+24>>2]=sa;}}while(0);xa=ja+ia|0;ya=ia+d|0;}else{xa=ja;ya=d;}ha=xa+4|0;c[ha>>2]=c[ha>>2]&-2;c[pa+4>>2]=ya|1;c[pa+ya>>2]=ya;ha=ya>>>3;if(ya>>>0<256){Y=21712+(ha<<1<<2)|0;ea=c[5418]|0;o=1<<ha;if(!(ea&o)){c[5418]=ea|o;za=Y;Aa=Y+8|0;}else{o=Y+8|0;za=c[o>>2]|0;Aa=o;}c[Aa>>2]=pa;c[za+12>>2]=pa;c[pa+8>>2]=za;c[pa+12>>2]=Y;break;}Y=ya>>>8;do{if(!Y)Ba=0;else{if(ya>>>0>16777215){Ba=31;break;}o=(Y+1048320|0)>>>16&8;ea=Y<<o;ha=(ea+520192|0)>>>16&4;_=ea<<ha;ea=(_+245760|0)>>>16&2;fa=14-(ha|o|ea)+(_<<ea>>>15)|0;Ba=ya>>>(fa+7|0)&1|fa<<1;}}while(0);Y=21976+(Ba<<2)|0;c[pa+28>>2]=Ba;ia=pa+16|0;c[ia+4>>2]=0;c[ia>>2]=0;ia=c[5419]|0;fa=1<<Ba;if(!(ia&fa)){c[5419]=ia|fa;c[Y>>2]=pa;c[pa+24>>2]=Y;c[pa+12>>2]=pa;c[pa+8>>2]=pa;break;}fa=c[Y>>2]|0;i:do{if((c[fa+4>>2]&-8|0)==(ya|0))Ca=fa;else{Y=ya<<((Ba|0)==31?0:25-(Ba>>>1)|0);ia=fa;while(1){Da=ia+16+(Y>>>31<<2)|0;ea=c[Da>>2]|0;if(!ea)break;if((c[ea+4>>2]&-8|0)==(ya|0)){Ca=ea;break i;}else{Y=Y<<1;ia=ea;}}c[Da>>2]=pa;c[pa+24>>2]=ia;c[pa+12>>2]=pa;c[pa+8>>2]=pa;break g;}}while(0);fa=Ca+8|0;Y=c[fa>>2]|0;c[Y+12>>2]=pa;c[fa>>2]=pa;c[pa+8>>2]=Y;c[pa+12>>2]=Ca;c[pa+24>>2]=0;}}while(0);p=oa+8|0;l=b;return p|0;}pa=22120;while(1){d=c[pa>>2]|0;if(d>>>0<=ka>>>0?(Ea=d+(c[pa+4>>2]|0)|0,Ea>>>0>ka>>>0):0)break;pa=c[pa+8>>2]|0;}pa=Ea+-47|0;oa=pa+8|0;d=pa+((oa&7|0)==0?0:0-oa&7)|0;oa=ka+16|0;pa=d>>>0<oa>>>0?ka:d;d=pa+8|0;ja=la+-40|0;na=ma+8|0;X=(na&7|0)==0?0:0-na&7;na=ma+X|0;Y=ja-X|0;c[5424]=na;c[5421]=Y;c[na+4>>2]=Y|1;c[ma+ja+4>>2]=40;c[5425]=c[5540];ja=pa+4|0;c[ja>>2]=27;c[d>>2]=c[5530];c[d+4>>2]=c[5531];c[d+8>>2]=c[5532];c[d+12>>2]=c[5533];c[5530]=ma;c[5531]=la;c[5533]=0;c[5532]=d;d=pa+24|0;do{Y=d;d=d+4|0;c[d>>2]=7;}while((Y+8|0)>>>0<Ea>>>0);if((pa|0)!=(ka|0)){d=pa-ka|0;c[ja>>2]=c[ja>>2]&-2;c[ka+4>>2]=d|1;c[pa>>2]=d;Y=d>>>3;if(d>>>0<256){na=21712+(Y<<1<<2)|0;X=c[5418]|0;fa=1<<Y;if(!(X&fa)){c[5418]=X|fa;Fa=na;Ga=na+8|0;}else{fa=na+8|0;Fa=c[fa>>2]|0;Ga=fa;}c[Ga>>2]=ka;c[Fa+12>>2]=ka;c[ka+8>>2]=Fa;c[ka+12>>2]=na;break;}na=d>>>8;if(na){if(d>>>0>16777215)Ha=31;else{fa=(na+1048320|0)>>>16&8;X=na<<fa;na=(X+520192|0)>>>16&4;Y=X<<na;X=(Y+245760|0)>>>16&2;ga=14-(na|fa|X)+(Y<<X>>>15)|0;Ha=d>>>(ga+7|0)&1|ga<<1;}}else Ha=0;ga=21976+(Ha<<2)|0;c[ka+28>>2]=Ha;c[ka+20>>2]=0;c[oa>>2]=0;X=c[5419]|0;Y=1<<Ha;if(!(X&Y)){c[5419]=X|Y;c[ga>>2]=ka;c[ka+24>>2]=ga;c[ka+12>>2]=ka;c[ka+8>>2]=ka;break;}Y=c[ga>>2]|0;j:do{if((c[Y+4>>2]&-8|0)==(d|0))Ia=Y;else{ga=d<<((Ha|0)==31?0:25-(Ha>>>1)|0);X=Y;while(1){Ja=X+16+(ga>>>31<<2)|0;fa=c[Ja>>2]|0;if(!fa)break;if((c[fa+4>>2]&-8|0)==(d|0)){Ia=fa;break j;}else{ga=ga<<1;X=fa;}}c[Ja>>2]=ka;c[ka+24>>2]=X;c[ka+12>>2]=ka;c[ka+8>>2]=ka;break f;}}while(0);d=Ia+8|0;Y=c[d>>2]|0;c[Y+12>>2]=ka;c[d>>2]=ka;c[ka+8>>2]=Y;c[ka+12>>2]=Ia;c[ka+24>>2]=0;}}else{Y=c[5422]|0;if((Y|0)==0|ma>>>0<Y>>>0)c[5422]=ma;c[5530]=ma;c[5531]=la;c[5533]=0;c[5427]=c[5536];c[5426]=-1;c[5431]=21712;c[5430]=21712;c[5433]=21720;c[5432]=21720;c[5435]=21728;c[5434]=21728;c[5437]=21736;c[5436]=21736;c[5439]=21744;c[5438]=21744;c[5441]=21752;c[5440]=21752;c[5443]=21760;c[5442]=21760;c[5445]=21768;c[5444]=21768;c[5447]=21776;c[5446]=21776;c[5449]=21784;c[5448]=21784;c[5451]=21792;c[5450]=21792;c[5453]=21800;c[5452]=21800;c[5455]=21808;c[5454]=21808;c[5457]=21816;c[5456]=21816;c[5459]=21824;c[5458]=21824;c[5461]=21832;c[5460]=21832;c[5463]=21840;c[5462]=21840;c[5465]=21848;c[5464]=21848;c[5467]=21856;c[5466]=21856;c[5469]=21864;c[5468]=21864;c[5471]=21872;c[5470]=21872;c[5473]=21880;c[5472]=21880;c[5475]=21888;c[5474]=21888;c[5477]=21896;c[5476]=21896;c[5479]=21904;c[5478]=21904;c[5481]=21912;c[5480]=21912;c[5483]=21920;c[5482]=21920;c[5485]=21928;c[5484]=21928;c[5487]=21936;c[5486]=21936;c[5489]=21944;c[5488]=21944;c[5491]=21952;c[5490]=21952;c[5493]=21960;c[5492]=21960;Y=la+-40|0;d=ma+8|0;oa=(d&7|0)==0?0:0-d&7;d=ma+oa|0;pa=Y-oa|0;c[5424]=d;c[5421]=pa;c[d+4>>2]=pa|1;c[ma+Y+4>>2]=40;c[5425]=c[5540];}}while(0);ma=c[5421]|0;if(ma>>>0>G>>>0){la=ma-G|0;c[5421]=la;ma=c[5424]|0;ka=ma+G|0;c[5424]=ka;c[ka+4>>2]=la|1;c[ma+4>>2]=G|3;p=ma+8|0;l=b;return p|0;}}c[(My()|0)>>2]=12;p=0;l=b;return p|0;}function Dy(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;if(!a)return;b=a+-8|0;d=c[5422]|0;e=c[a+-4>>2]|0;a=e&-8;f=b+a|0;do{if(!(e&1)){g=c[b>>2]|0;if(!(e&3))return;h=b+(0-g)|0;i=g+a|0;if(h>>>0<d>>>0)return;if((c[5423]|0)==(h|0)){j=f+4|0;k=c[j>>2]|0;if((k&3|0)!=3){l=h;m=i;n=h;break;}c[5420]=i;c[j>>2]=k&-2;c[h+4>>2]=i|1;c[h+i>>2]=i;return;}k=g>>>3;if(g>>>0<256){g=c[h+8>>2]|0;j=c[h+12>>2]|0;if((j|0)==(g|0)){c[5418]=c[5418]&~(1<<k);l=h;m=i;n=h;break;}else{c[g+12>>2]=j;c[j+8>>2]=g;l=h;m=i;n=h;break;}}g=c[h+24>>2]|0;j=c[h+12>>2]|0;do{if((j|0)==(h|0)){k=h+16|0;o=k+4|0;p=c[o>>2]|0;if(!p){q=c[k>>2]|0;if(!q){r=0;break;}else{s=q;t=k;}}else{s=p;t=o;}o=s;p=t;while(1){k=o+20|0;q=c[k>>2]|0;if(!q){u=o+16|0;v=c[u>>2]|0;if(!v)break;else{w=v;x=u;}}else{w=q;x=k;}o=w;p=x;}c[p>>2]=0;r=o;}else{k=c[h+8>>2]|0;c[k+12>>2]=j;c[j+8>>2]=k;r=j;}}while(0);if(g){j=c[h+28>>2]|0;k=21976+(j<<2)|0;if((c[k>>2]|0)==(h|0)){c[k>>2]=r;if(!r){c[5419]=c[5419]&~(1<<j);l=h;m=i;n=h;break;}}else{j=g+16|0;c[((c[j>>2]|0)==(h|0)?j:g+20|0)>>2]=r;if(!r){l=h;m=i;n=h;break;}}c[r+24>>2]=g;j=h+16|0;k=c[j>>2]|0;if(k|0){c[r+16>>2]=k;c[k+24>>2]=r;}k=c[j+4>>2]|0;if(k){c[r+20>>2]=k;c[k+24>>2]=r;l=h;m=i;n=h;}else{l=h;m=i;n=h;}}else{l=h;m=i;n=h;}}else{l=b;m=a;n=b;}}while(0);if(n>>>0>=f>>>0)return;b=f+4|0;a=c[b>>2]|0;if(!(a&1))return;if(!(a&2)){if((c[5424]|0)==(f|0)){r=(c[5421]|0)+m|0;c[5421]=r;c[5424]=l;c[l+4>>2]=r|1;if((l|0)!=(c[5423]|0))return;c[5423]=0;c[5420]=0;return;}if((c[5423]|0)==(f|0)){r=(c[5420]|0)+m|0;c[5420]=r;c[5423]=n;c[l+4>>2]=r|1;c[n+r>>2]=r;return;}r=(a&-8)+m|0;x=a>>>3;do{if(a>>>0<256){w=c[f+8>>2]|0;t=c[f+12>>2]|0;if((t|0)==(w|0)){c[5418]=c[5418]&~(1<<x);break;}else{c[w+12>>2]=t;c[t+8>>2]=w;break;}}else{w=c[f+24>>2]|0;t=c[f+12>>2]|0;do{if((t|0)==(f|0)){s=f+16|0;d=s+4|0;e=c[d>>2]|0;if(!e){k=c[s>>2]|0;if(!k){y=0;break;}else{z=k;A=s;}}else{z=e;A=d;}d=z;e=A;while(1){s=d+20|0;k=c[s>>2]|0;if(!k){j=d+16|0;q=c[j>>2]|0;if(!q)break;else{B=q;C=j;}}else{B=k;C=s;}d=B;e=C;}c[e>>2]=0;y=d;}else{o=c[f+8>>2]|0;c[o+12>>2]=t;c[t+8>>2]=o;y=t;}}while(0);if(w|0){t=c[f+28>>2]|0;h=21976+(t<<2)|0;if((c[h>>2]|0)==(f|0)){c[h>>2]=y;if(!y){c[5419]=c[5419]&~(1<<t);break;}}else{t=w+16|0;c[((c[t>>2]|0)==(f|0)?t:w+20|0)>>2]=y;if(!y)break;}c[y+24>>2]=w;t=f+16|0;h=c[t>>2]|0;if(h|0){c[y+16>>2]=h;c[h+24>>2]=y;}h=c[t+4>>2]|0;if(h|0){c[y+20>>2]=h;c[h+24>>2]=y;}}}}while(0);c[l+4>>2]=r|1;c[n+r>>2]=r;if((l|0)==(c[5423]|0)){c[5420]=r;return;}else D=r;}else{c[b>>2]=a&-2;c[l+4>>2]=m|1;c[n+m>>2]=m;D=m;}m=D>>>3;if(D>>>0<256){n=21712+(m<<1<<2)|0;a=c[5418]|0;b=1<<m;if(!(a&b)){c[5418]=a|b;E=n;F=n+8|0;}else{b=n+8|0;E=c[b>>2]|0;F=b;}c[F>>2]=l;c[E+12>>2]=l;c[l+8>>2]=E;c[l+12>>2]=n;return;}n=D>>>8;if(n){if(D>>>0>16777215)G=31;else{E=(n+1048320|0)>>>16&8;F=n<<E;n=(F+520192|0)>>>16&4;b=F<<n;F=(b+245760|0)>>>16&2;a=14-(n|E|F)+(b<<F>>>15)|0;G=D>>>(a+7|0)&1|a<<1;}}else G=0;a=21976+(G<<2)|0;c[l+28>>2]=G;c[l+20>>2]=0;c[l+16>>2]=0;F=c[5419]|0;b=1<<G;a:do{if(!(F&b)){c[5419]=F|b;c[a>>2]=l;c[l+24>>2]=a;c[l+12>>2]=l;c[l+8>>2]=l;}else{E=c[a>>2]|0;b:do{if((c[E+4>>2]&-8|0)==(D|0))H=E;else{n=D<<((G|0)==31?0:25-(G>>>1)|0);m=E;while(1){I=m+16+(n>>>31<<2)|0;r=c[I>>2]|0;if(!r)break;if((c[r+4>>2]&-8|0)==(D|0)){H=r;break b;}else{n=n<<1;m=r;}}c[I>>2]=l;c[l+24>>2]=m;c[l+12>>2]=l;c[l+8>>2]=l;break a;}}while(0);E=H+8|0;w=c[E>>2]|0;c[w+12>>2]=l;c[E>>2]=l;c[l+8>>2]=w;c[l+12>>2]=H;c[l+24>>2]=0;}}while(0);l=(c[5426]|0)+-1|0;c[5426]=l;if(l|0)return;l=22128;while(1){H=c[l>>2]|0;if(!H)break;else l=H+8|0;}c[5426]=-1;return;}function Ey(a,b){a=a|0;b=b|0;var d=0,e=0;if(a){d=N(b,a)|0;if((b|a)>>>0>65535)e=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1;else e=d;}else e=0;d=Cy(e)|0;if(!d)return d|0;if(!(c[d+-4>>2]&3))return d|0;oE(d|0,0,e|0)|0;return d|0;}function Fy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a){d=Cy(b)|0;return d|0;}if(b>>>0>4294967231){c[(My()|0)>>2]=12;d=0;return d|0;}e=Gy(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(e|0){d=e+8|0;return d|0;}e=Cy(b)|0;if(!e){d=0;return d|0;}f=c[a+-4>>2]|0;g=(f&-8)-((f&3|0)==0?8:4)|0;mE(e|0,a|0,(g>>>0<b>>>0?g:b)|0)|0;Dy(a);d=e;return d|0;}function Gy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;d=a+4|0;e=c[d>>2]|0;f=e&-8;g=a+f|0;if(!(e&3)){if(b>>>0<256){h=0;return h|0;}if(f>>>0>=(b+4|0)>>>0?(f-b|0)>>>0<=c[5538]<<1>>>0:0){h=a;return h|0;}h=0;return h|0;}if(f>>>0>=b>>>0){i=f-b|0;if(i>>>0<=15){h=a;return h|0;}j=a+b|0;c[d>>2]=e&1|b|2;c[j+4>>2]=i|3;k=g+4|0;c[k>>2]=c[k>>2]|1;Hy(j,i);h=a;return h|0;}if((c[5424]|0)==(g|0)){i=(c[5421]|0)+f|0;j=i-b|0;k=a+b|0;if(i>>>0<=b>>>0){h=0;return h|0;}c[d>>2]=e&1|b|2;c[k+4>>2]=j|1;c[5424]=k;c[5421]=j;h=a;return h|0;}if((c[5423]|0)==(g|0)){j=(c[5420]|0)+f|0;if(j>>>0<b>>>0){h=0;return h|0;}k=j-b|0;if(k>>>0>15){i=a+b|0;l=a+j|0;c[d>>2]=e&1|b|2;c[i+4>>2]=k|1;c[l>>2]=k;m=l+4|0;c[m>>2]=c[m>>2]&-2;n=i;o=k;}else{c[d>>2]=e&1|j|2;k=a+j+4|0;c[k>>2]=c[k>>2]|1;n=0;o=0;}c[5420]=o;c[5423]=n;h=a;return h|0;}n=c[g+4>>2]|0;if(n&2|0){h=0;return h|0;}o=(n&-8)+f|0;if(o>>>0<b>>>0){h=0;return h|0;}f=o-b|0;k=n>>>3;do{if(n>>>0<256){j=c[g+8>>2]|0;i=c[g+12>>2]|0;if((i|0)==(j|0)){c[5418]=c[5418]&~(1<<k);break;}else{c[j+12>>2]=i;c[i+8>>2]=j;break;}}else{j=c[g+24>>2]|0;i=c[g+12>>2]|0;do{if((i|0)==(g|0)){m=g+16|0;l=m+4|0;p=c[l>>2]|0;if(!p){q=c[m>>2]|0;if(!q){r=0;break;}else{s=q;t=m;}}else{s=p;t=l;}l=s;p=t;while(1){m=l+20|0;q=c[m>>2]|0;if(!q){u=l+16|0;v=c[u>>2]|0;if(!v)break;else{w=v;x=u;}}else{w=q;x=m;}l=w;p=x;}c[p>>2]=0;r=l;}else{m=c[g+8>>2]|0;c[m+12>>2]=i;c[i+8>>2]=m;r=i;}}while(0);if(j|0){i=c[g+28>>2]|0;m=21976+(i<<2)|0;if((c[m>>2]|0)==(g|0)){c[m>>2]=r;if(!r){c[5419]=c[5419]&~(1<<i);break;}}else{i=j+16|0;c[((c[i>>2]|0)==(g|0)?i:j+20|0)>>2]=r;if(!r)break;}c[r+24>>2]=j;i=g+16|0;m=c[i>>2]|0;if(m|0){c[r+16>>2]=m;c[m+24>>2]=r;}m=c[i+4>>2]|0;if(m|0){c[r+20>>2]=m;c[m+24>>2]=r;}}}}while(0);if(f>>>0<16){c[d>>2]=e&1|o|2;r=a+o+4|0;c[r>>2]=c[r>>2]|1;h=a;return h|0;}else{r=a+b|0;c[d>>2]=e&1|b|2;c[r+4>>2]=f|3;b=a+o+4|0;c[b>>2]=c[b>>2]|1;Hy(r,f);h=a;return h|0;}return 0;}function Hy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=a+b|0;e=c[a+4>>2]|0;do{if(!(e&1)){f=c[a>>2]|0;if(!(e&3))return;g=a+(0-f)|0;h=f+b|0;if((c[5423]|0)==(g|0)){i=d+4|0;j=c[i>>2]|0;if((j&3|0)!=3){k=g;l=h;break;}c[5420]=h;c[i>>2]=j&-2;c[g+4>>2]=h|1;c[d>>2]=h;return;}j=f>>>3;if(f>>>0<256){f=c[g+8>>2]|0;i=c[g+12>>2]|0;if((i|0)==(f|0)){c[5418]=c[5418]&~(1<<j);k=g;l=h;break;}else{c[f+12>>2]=i;c[i+8>>2]=f;k=g;l=h;break;}}f=c[g+24>>2]|0;i=c[g+12>>2]|0;do{if((i|0)==(g|0)){j=g+16|0;m=j+4|0;n=c[m>>2]|0;if(!n){o=c[j>>2]|0;if(!o){p=0;break;}else{q=o;r=j;}}else{q=n;r=m;}m=q;n=r;while(1){j=m+20|0;o=c[j>>2]|0;if(!o){s=m+16|0;t=c[s>>2]|0;if(!t)break;else{u=t;v=s;}}else{u=o;v=j;}m=u;n=v;}c[n>>2]=0;p=m;}else{j=c[g+8>>2]|0;c[j+12>>2]=i;c[i+8>>2]=j;p=i;}}while(0);if(f){i=c[g+28>>2]|0;j=21976+(i<<2)|0;if((c[j>>2]|0)==(g|0)){c[j>>2]=p;if(!p){c[5419]=c[5419]&~(1<<i);k=g;l=h;break;}}else{i=f+16|0;c[((c[i>>2]|0)==(g|0)?i:f+20|0)>>2]=p;if(!p){k=g;l=h;break;}}c[p+24>>2]=f;i=g+16|0;j=c[i>>2]|0;if(j|0){c[p+16>>2]=j;c[j+24>>2]=p;}j=c[i+4>>2]|0;if(j){c[p+20>>2]=j;c[j+24>>2]=p;k=g;l=h;}else{k=g;l=h;}}else{k=g;l=h;}}else{k=a;l=b;}}while(0);b=d+4|0;a=c[b>>2]|0;if(!(a&2)){if((c[5424]|0)==(d|0)){p=(c[5421]|0)+l|0;c[5421]=p;c[5424]=k;c[k+4>>2]=p|1;if((k|0)!=(c[5423]|0))return;c[5423]=0;c[5420]=0;return;}if((c[5423]|0)==(d|0)){p=(c[5420]|0)+l|0;c[5420]=p;c[5423]=k;c[k+4>>2]=p|1;c[k+p>>2]=p;return;}p=(a&-8)+l|0;v=a>>>3;do{if(a>>>0<256){u=c[d+8>>2]|0;r=c[d+12>>2]|0;if((r|0)==(u|0)){c[5418]=c[5418]&~(1<<v);break;}else{c[u+12>>2]=r;c[r+8>>2]=u;break;}}else{u=c[d+24>>2]|0;r=c[d+12>>2]|0;do{if((r|0)==(d|0)){q=d+16|0;e=q+4|0;j=c[e>>2]|0;if(!j){i=c[q>>2]|0;if(!i){w=0;break;}else{x=i;y=q;}}else{x=j;y=e;}e=x;j=y;while(1){q=e+20|0;i=c[q>>2]|0;if(!i){o=e+16|0;s=c[o>>2]|0;if(!s)break;else{z=s;A=o;}}else{z=i;A=q;}e=z;j=A;}c[j>>2]=0;w=e;}else{m=c[d+8>>2]|0;c[m+12>>2]=r;c[r+8>>2]=m;w=r;}}while(0);if(u|0){r=c[d+28>>2]|0;h=21976+(r<<2)|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=w;if(!w){c[5419]=c[5419]&~(1<<r);break;}}else{r=u+16|0;c[((c[r>>2]|0)==(d|0)?r:u+20|0)>>2]=w;if(!w)break;}c[w+24>>2]=u;r=d+16|0;h=c[r>>2]|0;if(h|0){c[w+16>>2]=h;c[h+24>>2]=w;}h=c[r+4>>2]|0;if(h|0){c[w+20>>2]=h;c[h+24>>2]=w;}}}}while(0);c[k+4>>2]=p|1;c[k+p>>2]=p;if((k|0)==(c[5423]|0)){c[5420]=p;return;}else B=p;}else{c[b>>2]=a&-2;c[k+4>>2]=l|1;c[k+l>>2]=l;B=l;}l=B>>>3;if(B>>>0<256){a=21712+(l<<1<<2)|0;b=c[5418]|0;p=1<<l;if(!(b&p)){c[5418]=b|p;C=a;D=a+8|0;}else{p=a+8|0;C=c[p>>2]|0;D=p;}c[D>>2]=k;c[C+12>>2]=k;c[k+8>>2]=C;c[k+12>>2]=a;return;}a=B>>>8;if(a){if(B>>>0>16777215)E=31;else{C=(a+1048320|0)>>>16&8;D=a<<C;a=(D+520192|0)>>>16&4;p=D<<a;D=(p+245760|0)>>>16&2;b=14-(a|C|D)+(p<<D>>>15)|0;E=B>>>(b+7|0)&1|b<<1;}}else E=0;b=21976+(E<<2)|0;c[k+28>>2]=E;c[k+20>>2]=0;c[k+16>>2]=0;D=c[5419]|0;p=1<<E;if(!(D&p)){c[5419]=D|p;c[b>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;return;}p=c[b>>2]|0;a:do{if((c[p+4>>2]&-8|0)==(B|0))F=p;else{b=B<<((E|0)==31?0:25-(E>>>1)|0);D=p;while(1){G=D+16+(b>>>31<<2)|0;C=c[G>>2]|0;if(!C)break;if((c[C+4>>2]&-8|0)==(B|0)){F=C;break a;}else{b=b<<1;D=C;}}c[G>>2]=k;c[k+24>>2]=D;c[k+12>>2]=k;c[k+8>>2]=k;return;}}while(0);G=F+8|0;B=c[G>>2]|0;c[B+12>>2]=k;c[G>>2]=k;c[k+8>>2]=B;c[k+12>>2]=F;c[k+24>>2]=0;return;}function Iy(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Oy(c[a+60>>2]|0)|0;a=Ly(Ja(6,d|0)|0)|0;l=b;return a|0;}function Jy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+32|0;g=f;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[g>>2]=c[b+60>>2],c[g+4>>2]=21523,c[g+8>>2]=f+16,Ia(54,g|0)|0):0)a[b+75>>0]=-1;g=Ny(b,d,e)|0;l=f;return g|0;}function Ky(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+32|0;f=e;g=e+20|0;c[f>>2]=c[a+60>>2];c[f+4>>2]=0;c[f+8>>2]=b;c[f+12>>2]=g;c[f+16>>2]=d;if((Ly(Da(140,f|0)|0)|0)<0){c[g>>2]=-1;h=-1;}else h=c[g>>2]|0;l=e;return h|0;}function Ly(a){a=a|0;var b=0;if(a>>>0>4294963200){c[(My()|0)>>2]=0-a;b=-1;}else b=a;return b|0;}function My(){return 22232;}function Ny(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=l;l=l+48|0;f=e+32|0;g=e+16|0;h=e;i=a+28|0;j=c[i>>2]|0;c[h>>2]=j;k=a+20|0;m=(c[k>>2]|0)-j|0;c[h+4>>2]=m;c[h+8>>2]=b;c[h+12>>2]=d;b=m+d|0;m=a+60|0;c[g>>2]=c[m>>2];c[g+4>>2]=h;c[g+8>>2]=2;j=Ly(Fa(146,g|0)|0)|0;a:do{if((b|0)!=(j|0)){g=2;n=b;o=h;p=j;while(1){if((p|0)<0)break;n=n-p|0;q=c[o+4>>2]|0;r=p>>>0>q>>>0;s=r?o+8|0:o;t=g+(r<<31>>31)|0;u=p-(r?q:0)|0;c[s>>2]=(c[s>>2]|0)+u;q=s+4|0;c[q>>2]=(c[q>>2]|0)-u;c[f>>2]=c[m>>2];c[f+4>>2]=s;c[f+8>>2]=t;p=Ly(Fa(146,f|0)|0)|0;if((n|0)==(p|0)){v=3;break a;}else{g=t;o=s;}}c[a+16>>2]=0;c[i>>2]=0;c[k>>2]=0;c[a>>2]=c[a>>2]|32;if((g|0)==2)w=0;else w=d-(c[o+4>>2]|0)|0;}else v=3;}while(0);if((v|0)==3){v=c[a+44>>2]|0;c[a+16>>2]=v+(c[a+48>>2]|0);a=v;c[i>>2]=a;c[k>>2]=a;w=d;}l=e;return w|0;}function Oy(a){a=a|0;return a|0;}function Py(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+16|0;h=f;c[h>>2]=d;i=h+4|0;j=b+48|0;k=c[j>>2]|0;c[i>>2]=e-((k|0)!=0&1);m=b+44|0;c[h+8>>2]=c[m>>2];c[h+12>>2]=k;c[g>>2]=c[b+60>>2];c[g+4>>2]=h;c[g+8>>2]=2;h=Ly(Ea(145,g|0)|0)|0;if((h|0)>=1){g=c[i>>2]|0;if(h>>>0>g>>>0){i=c[m>>2]|0;m=b+4|0;c[m>>2]=i;k=i;c[b+8>>2]=k+(h-g);if(!(c[j>>2]|0))n=e;else{c[m>>2]=k+1;a[d+(e+-1)>>0]=a[k>>0]|0;n=e;}}else n=h;}else{c[b>>2]=c[b>>2]|h&48^16;n=h;}l=f;return n|0;}function Qy(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;a:do{if(!d)e=0;else{f=b;g=d;h=c;while(1){i=a[f>>0]|0;j=a[h>>0]|0;if(i<<24>>24!=j<<24>>24)break;g=g+-1|0;if(!g){e=0;break a;}else{f=f+1|0;h=h+1|0;}}e=(i&255)-(j&255)|0;}}while(0);return e|0;}function Ry(b,c){b=b|0;c=c|0;var d=0;d=Xy(b,c)|0;return((a[d>>0]|0)==(c&255)<<24>>24?d:0)|0;}function Sy(a){a=a|0;return(a+-48|0)>>>0<10|0;}function Ty(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=b;a:do{if(!(d&3)){e=b;f=5;}else{g=b;h=d;while(1){if(!(a[g>>0]|0)){i=h;break a;}j=g+1|0;h=j;if(!(h&3)){e=j;f=5;break;}else g=j;}}}while(0);if((f|0)==5){f=e;while(1){k=c[f>>2]|0;if(!((k&-2139062144^-2139062144)&k+-16843009))f=f+4|0;else break;}if(!((k&255)<<24>>24))l=f;else{k=f;while(1){f=k+1|0;if(!(a[f>>0]|0)){l=f;break;}else k=f;}}i=l;}return i-d|0;}function Uy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;f=d&255;g=(e|0)!=0;a:do{if(g&(b&3|0)!=0){h=d&255;i=b;j=e;while(1){if((a[i>>0]|0)==h<<24>>24){k=i;l=j;m=6;break a;}n=i+1|0;o=j+-1|0;p=(o|0)!=0;if(p&(n&3|0)!=0){i=n;j=o;}else{q=n;r=o;s=p;m=5;break;}}}else{q=b;r=e;s=g;m=5;}}while(0);if((m|0)==5)if(s){k=q;l=r;m=6;}else m=16;b:do{if((m|0)==6){r=d&255;if((a[k>>0]|0)==r<<24>>24)if(!l){m=16;break;}else{t=k;break;}q=N(f,16843009)|0;c:do{if(l>>>0>3){s=k;g=l;while(1){e=c[s>>2]^q;if((e&-2139062144^-2139062144)&e+-16843009|0){u=g;v=s;break c;}e=s+4|0;b=g+-4|0;if(b>>>0>3){s=e;g=b;}else{w=e;x=b;m=11;break;}}}else{w=k;x=l;m=11;}}while(0);if((m|0)==11)if(!x){m=16;break;}else{u=x;v=w;}q=v;g=u;while(1){if((a[q>>0]|0)==r<<24>>24){t=q;break b;}g=g+-1|0;if(!g){m=16;break;}else q=q+1|0;}}}while(0);if((m|0)==16)t=0;return t|0;}function Vy(a){a=a|0;return 0;}function Wy(a){a=a|0;return;}function Xy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=d&255;a:do{if(!e)f=b+(Ty(b)|0)|0;else{if(!(b&3))g=b;else{h=d&255;i=b;while(1){j=a[i>>0]|0;if(j<<24>>24==0?1:j<<24>>24==h<<24>>24){f=i;break a;}j=i+1|0;if(!(j&3)){g=j;break;}else i=j;}}i=N(e,16843009)|0;h=c[g>>2]|0;b:do{if(!((h&-2139062144^-2139062144)&h+-16843009)){j=g;k=h;while(1){l=k^i;if((l&-2139062144^-2139062144)&l+-16843009|0){m=j;break b;}l=j+4|0;k=c[l>>2]|0;if((k&-2139062144^-2139062144)&k+-16843009|0){m=l;break;}else j=l;}}else m=g;}while(0);i=d&255;h=m;while(1){j=a[h>>0]|0;if(j<<24>>24==0?1:j<<24>>24==i<<24>>24){f=h;break;}else h=h+1|0;}}}while(0);return f|0;}function Yy(a,b){a=a|0;b=b|0;var d=0;if(!b)d=0;else d=Zy(c[b>>2]|0,c[b+4>>2]|0,a)|0;return((d|0)==0?a:d)|0;}function Zy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=(c[b>>2]|0)+1794895138|0;g=_y(c[b+8>>2]|0,f)|0;h=_y(c[b+12>>2]|0,f)|0;i=_y(c[b+16>>2]|0,f)|0;a:do{if((g>>>0<d>>>2>>>0?(j=d-(g<<2)|0,h>>>0<j>>>0&i>>>0<j>>>0):0)?((i|h)&3|0)==0:0){j=h>>>2;k=i>>>2;l=0;m=g;while(1){n=m>>>1;o=l+n|0;p=o<<1;q=p+j|0;r=_y(c[b+(q<<2)>>2]|0,f)|0;s=_y(c[b+(q+1<<2)>>2]|0,f)|0;if(!(s>>>0<d>>>0&r>>>0<(d-s|0)>>>0)){t=0;break a;}if(a[b+(s+r)>>0]|0){t=0;break a;}r=$y(e,b+s|0)|0;if(!r)break;s=(r|0)<0;if((m|0)==1){t=0;break a;}l=s?l:o;m=s?n:m-n|0;}m=p+k|0;l=_y(c[b+(m<<2)>>2]|0,f)|0;j=_y(c[b+(m+1<<2)>>2]|0,f)|0;if(j>>>0<d>>>0&l>>>0<(d-j|0)>>>0)t=(a[b+(j+l)>>0]|0)==0?b+j|0:0;else t=0;}else t=0;}while(0);return t|0;}function _y(a,b){a=a|0;b=b|0;var c=0;c=kE(a|0)|0;return((b|0)==0?a:c)|0;}function $y(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24){f=e;g=d;}else{d=c;c=b;do{c=c+1|0;d=d+1|0;b=a[c>>0]|0;e=a[d>>0]|0;}while(!(b<<24>>24==0?1:b<<24>>24!=e<<24>>24));f=e;g=b;}return(g&255)-(f&255)|0;}function az(){return 12260;}function bz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=cz(a,b,d,g)|0;l=f;return e|0;}function cz(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+128|0;h=g+124|0;i=g;j=i;k=12504;m=j+124|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0;}while((j|0)<(m|0));if((d+-1|0)>>>0>2147483646){if(!d){n=h;o=1;p=4;}else{c[(My()|0)>>2]=75;q=-1;}}else{n=b;o=d;p=4;}if((p|0)==4){p=-2-n|0;d=o>>>0>p>>>0?p:o;c[i+48>>2]=d;o=i+20|0;c[o>>2]=n;c[i+44>>2]=n;p=n+d|0;n=i+16|0;c[n>>2]=p;c[i+28>>2]=p;p=dz(i,e,f)|0;if(!d)q=p;else{d=c[o>>2]|0;a[d+(((d|0)==(c[n>>2]|0))<<31>>31)>>0]=0;q=p;}}l=g;return q|0;}function dz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+224|0;g=f+208|0;h=f+160|0;i=f+80|0;j=f;k=h;m=k+40|0;do{c[k>>2]=0;k=k+4|0;}while((k|0)<(m|0));c[g>>2]=c[e>>2];if((ez(0,d,g,i,h)|0)<0)n=-1;else{if((c[b+76>>2]|0)>-1)o=Vy(b)|0;else o=0;e=c[b>>2]|0;k=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){m=b+44|0;p=c[m>>2]|0;c[m>>2]=j;q=b+28|0;c[q>>2]=j;r=b+20|0;c[r>>2]=j;c[e>>2]=80;s=b+16|0;c[s>>2]=j+80;j=ez(b,d,g,i,h)|0;if(!p)t=j;else{rc[c[b+36>>2]&31](b,0,0)|0;u=(c[r>>2]|0)==0?-1:j;c[m>>2]=p;c[e>>2]=0;c[s>>2]=0;c[q>>2]=0;c[r>>2]=0;t=u;}}else t=ez(b,d,g,i,h)|0;h=c[b>>2]|0;c[b>>2]=h|k;if(o|0)Wy(b);n=(h&32|0)==0?t:-1;}l=f;return n|0;}function ez(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;j=l;l=l+64|0;k=j+56|0;m=j+40|0;n=j;o=j+48|0;p=j+60|0;c[k>>2]=e;e=(d|0)!=0;q=n+40|0;r=q;s=n+39|0;n=o+4|0;t=0;u=0;v=0;a:while(1){w=t;x=u;while(1){do{if((x|0)>-1){if((w|0)>(2147483647-x|0)){c[(My()|0)>>2]=75;z=-1;break;}else{z=w+x|0;break;}}else z=x;}while(0);A=c[k>>2]|0;B=a[A>>0]|0;if(!(B<<24>>24)){C=94;break a;}D=B;B=A;b:while(1){switch(D<<24>>24){case 37:{C=10;break b;break;}case 0:{E=B;break b;break;}default:{}}F=B+1|0;c[k>>2]=F;D=a[F>>0]|0;B=F;}c:do{if((C|0)==10){C=0;D=B;F=B;while(1){if((a[F+1>>0]|0)!=37){E=D;break c;}G=D+1|0;F=F+2|0;c[k>>2]=F;if((a[F>>0]|0)!=37){E=G;break;}else D=G;}}}while(0);w=E-A|0;if(e)fz(d,A,w);if(!w)break;else x=z;}x=(Sy(a[(c[k>>2]|0)+1>>0]|0)|0)==0;w=c[k>>2]|0;if(!x?(a[w+2>>0]|0)==36:0){H=(a[w+1>>0]|0)+-48|0;I=1;J=3;}else{H=-1;I=v;J=1;}x=w+J|0;c[k>>2]=x;w=a[x>>0]|0;B=(w<<24>>24)+-32|0;if(B>>>0>31|(1<<B&75913|0)==0){K=0;L=w;M=x;}else{w=0;D=B;B=x;while(1){x=1<<D|w;F=B+1|0;c[k>>2]=F;G=a[F>>0]|0;D=(G<<24>>24)+-32|0;if(D>>>0>31|(1<<D&75913|0)==0){K=x;L=G;M=F;break;}else{w=x;B=F;}}}if(L<<24>>24==42){if((Sy(a[M+1>>0]|0)|0)!=0?(B=c[k>>2]|0,(a[B+2>>0]|0)==36):0){w=B+1|0;c[i+((a[w>>0]|0)+-48<<2)>>2]=10;N=c[g+((a[w>>0]|0)+-48<<3)>>2]|0;O=1;P=B+3|0;}else{if(I|0){Q=-1;break;}if(e){B=(c[f>>2]|0)+(4-1)&~(4-1);w=c[B>>2]|0;c[f>>2]=B+4;R=w;}else R=0;N=R;O=0;P=(c[k>>2]|0)+1|0;}c[k>>2]=P;w=(N|0)<0;S=w?0-N|0:N;T=w?K|8192:K;U=O;V=P;}else{w=gz(k)|0;if((w|0)<0){Q=-1;break;}S=w;T=K;U=I;V=c[k>>2]|0;}do{if((a[V>>0]|0)==46){w=V+1|0;if((a[w>>0]|0)!=42){c[k>>2]=w;w=gz(k)|0;W=w;X=c[k>>2]|0;break;}if(Sy(a[V+2>>0]|0)|0?(w=c[k>>2]|0,(a[w+3>>0]|0)==36):0){B=w+2|0;c[i+((a[B>>0]|0)+-48<<2)>>2]=10;D=c[g+((a[B>>0]|0)+-48<<3)>>2]|0;B=w+4|0;c[k>>2]=B;W=D;X=B;break;}if(U|0){Q=-1;break a;}if(e){B=(c[f>>2]|0)+(4-1)&~(4-1);D=c[B>>2]|0;c[f>>2]=B+4;Y=D;}else Y=0;D=(c[k>>2]|0)+2|0;c[k>>2]=D;W=Y;X=D;}else{W=-1;X=V;}}while(0);D=0;B=X;while(1){if(((a[B>>0]|0)+-65|0)>>>0>57){Q=-1;break a;}w=B;B=B+1|0;c[k>>2]=B;Z=a[(a[w>>0]|0)+-65+(7456+(D*58|0))>>0]|0;_=Z&255;if((_+-1|0)>>>0>=8)break;else D=_;}if(!(Z<<24>>24)){Q=-1;break;}w=(H|0)>-1;do{if(Z<<24>>24==19){if(w){Q=-1;break a;}else C=54;}else{if(w){c[i+(H<<2)>>2]=_;F=g+(H<<3)|0;x=c[F+4>>2]|0;G=m;c[G>>2]=c[F>>2];c[G+4>>2]=x;C=54;break;}if(!e){Q=0;break a;}hz(m,_,f);$=c[k>>2]|0;C=55;}}while(0);if((C|0)==54){C=0;if(e){$=B;C=55;}else aa=0;}d:do{if((C|0)==55){C=0;w=a[$+-1>>0]|0;x=(D|0)!=0&(w&15|0)==3?w&-33:w;w=T&-65537;G=(T&8192|0)==0?T:w;e:do{switch(x|0){case 110:{switch((D&255)<<24>>24){case 0:{c[c[m>>2]>>2]=z;aa=0;break d;break;}case 1:{c[c[m>>2]>>2]=z;aa=0;break d;break;}case 2:{F=c[m>>2]|0;c[F>>2]=z;c[F+4>>2]=((z|0)<0)<<31>>31;aa=0;break d;break;}case 3:{b[c[m>>2]>>1]=z;aa=0;break d;break;}case 4:{a[c[m>>2]>>0]=z;aa=0;break d;break;}case 6:{c[c[m>>2]>>2]=z;aa=0;break d;break;}case 7:{F=c[m>>2]|0;c[F>>2]=z;c[F+4>>2]=((z|0)<0)<<31>>31;aa=0;break d;break;}default:{aa=0;break d;}}break;}case 112:{ba=120;ca=W>>>0>8?W:8;da=G|8;C=67;break;}case 88:case 120:{ba=x;ca=W;da=G;C=67;break;}case 111:{F=m;ea=c[F>>2]|0;fa=c[F+4>>2]|0;F=jz(ea,fa,q)|0;ga=r-F|0;ha=F;ia=0;ja=17834;ka=(G&8|0)==0|(W|0)>(ga|0)?W:ga+1|0;la=G;ma=ea;na=fa;C=73;break;}case 105:case 100:{fa=m;ea=c[fa>>2]|0;ga=c[fa+4>>2]|0;if((ga|0)<0){fa=eE(0,0,ea|0,ga|0)|0;F=y;oa=m;c[oa>>2]=fa;c[oa+4>>2]=F;pa=1;qa=17834;ra=fa;sa=F;C=72;break e;}else{pa=(G&2049|0)!=0&1;qa=(G&2048|0)==0?(G&1|0)==0?17834:17836:17835;ra=ea;sa=ga;C=72;break e;}break;}case 117:{ga=m;pa=0;qa=17834;ra=c[ga>>2]|0;sa=c[ga+4>>2]|0;C=72;break;}case 99:{a[s>>0]=c[m>>2];ta=s;ua=0;va=17834;wa=1;xa=w;ya=r;break;}case 109:{za=lz(c[(My()|0)>>2]|0)|0;C=77;break;}case 115:{ga=c[m>>2]|0;za=(ga|0)==0?17844:ga;C=77;break;}case 67:{c[o>>2]=c[m>>2];c[n>>2]=0;c[m>>2]=o;Aa=-1;C=81;break;}case 83:{if(!W){mz(d,32,S,0,G);Ba=0;C=91;}else{Aa=W;C=81;}break;}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{aa=oz(d,+h[m>>3],S,W,G,x)|0;break d;break;}default:{ta=A;ua=0;va=17834;wa=W;xa=G;ya=r;}}}while(0);f:do{if((C|0)==67){C=0;x=m;ga=c[x>>2]|0;ea=c[x+4>>2]|0;x=iz(ga,ea,q,ba&32)|0;F=(da&8|0)==0|(ga|0)==0&(ea|0)==0;ha=x;ia=F?0:2;ja=F?17834:17834+(ba>>>4)|0;ka=ca;la=da;ma=ga;na=ea;C=73;}else if((C|0)==72){C=0;ha=kz(ra,sa,q)|0;ia=pa;ja=qa;ka=W;la=G;ma=ra;na=sa;C=73;}else if((C|0)==77){C=0;ea=Uy(za,0,W)|0;ga=(ea|0)==0;ta=za;ua=0;va=17834;wa=ga?W:ea-za|0;xa=w;ya=ga?za+W|0:ea;}else if((C|0)==81){C=0;ea=c[m>>2]|0;ga=0;while(1){F=c[ea>>2]|0;if(!F){Ca=ga;break;}x=nz(p,F)|0;Da=(x|0)<0;if(Da|x>>>0>(Aa-ga|0)>>>0){C=85;break;}F=x+ga|0;if(Aa>>>0>F>>>0){ea=ea+4|0;ga=F;}else{Ca=F;break;}}if((C|0)==85){C=0;if(Da){Q=-1;break a;}else Ca=ga;}mz(d,32,S,Ca,G);if(!Ca){Ba=0;C=91;}else{ea=c[m>>2]|0;F=0;while(1){x=c[ea>>2]|0;if(!x){Ba=Ca;C=91;break f;}fa=nz(p,x)|0;F=fa+F|0;if((F|0)>(Ca|0)){Ba=Ca;C=91;break f;}fz(d,p,fa);if(F>>>0>=Ca>>>0){Ba=Ca;C=91;break;}else ea=ea+4|0;}}}}while(0);if((C|0)==73){C=0;w=(ma|0)!=0|(na|0)!=0;ea=(ka|0)!=0|w;F=r-ha+((w^1)&1)|0;ta=ea?ha:q;ua=ia;va=ja;wa=ea?(ka|0)>(F|0)?ka:F:0;xa=(ka|0)>-1?la&-65537:la;ya=r;}else if((C|0)==91){C=0;mz(d,32,S,Ba,G^8192);aa=(S|0)>(Ba|0)?S:Ba;break;}F=ya-ta|0;ea=(wa|0)<(F|0)?F:wa;w=ea+ua|0;ga=(S|0)<(w|0)?w:S;mz(d,32,ga,w,xa);fz(d,va,ua);mz(d,48,ga,w,xa^65536);mz(d,48,ea,F,0);fz(d,ta,F);mz(d,32,ga,w,xa^8192);aa=ga;}}while(0);t=aa;u=z;v=U;}g:do{if((C|0)==94)if(!d){if(!v)Q=0;else{U=1;while(1){u=c[i+(U<<2)>>2]|0;if(!u)break;hz(g+(U<<3)|0,u,f);u=U+1|0;if(u>>>0<10)U=u;else{Q=1;break g;}}u=U;while(1){if(c[i+(u<<2)>>2]|0){Q=-1;break g;}u=u+1|0;if(u>>>0>=10){Q=1;break;}}}}else Q=z;}while(0);l=j;return Q|0;}function fz(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))xz(b,d,a)|0;return;}function gz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;if(!(Sy(a[c[b>>2]>>0]|0)|0))d=0;else{e=0;while(1){f=c[b>>2]|0;g=(e*10|0)+-48+(a[f>>0]|0)|0;h=f+1|0;c[b>>2]=h;if(!(Sy(a[h>>0]|0)|0)){d=g;break;}else e=g;}}return d|0;}function hz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0;a:do{if(b>>>0<=20)do{switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=f;break a;break;}case 10:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a;break;}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=f;c[e+4>>2]=0;break a;break;}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);f=e;g=c[f>>2]|0;i=c[f+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=g;c[e+4>>2]=i;break a;break;}case 13:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=(e&65535)<<16>>16;e=a;c[e>>2]=i;c[e+4>>2]=((i|0)<0)<<31>>31;break a;break;}case 14:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=a;c[i>>2]=e&65535;c[i+4>>2]=0;break a;break;}case 15:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=(e&255)<<24>>24;e=a;c[e>>2]=i;c[e+4>>2]=((i|0)<0)<<31>>31;break a;break;}case 16:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=a;c[i>>2]=e&255;c[i+4>>2]=0;break a;break;}case 17:{i=(c[d>>2]|0)+(8-1)&~(8-1);j=+h[i>>3];c[d>>2]=i+8;h[a>>3]=j;break a;break;}case 18:{i=(c[d>>2]|0)+(8-1)&~(8-1);j=+h[i>>3];c[d>>2]=i+8;h[a>>3]=j;break a;break;}default:break a;}}while(0);}while(0);return;}function iz(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0;if((b|0)==0&(c|0)==0)g=e;else{h=e;e=c;c=b;while(1){b=h+-1|0;a[b>>0]=d[7920+(c&15)>>0]|0|f;c=iE(c|0,e|0,4)|0;e=y;if((c|0)==0&(e|0)==0){g=b;break;}else h=b;}}return g|0;}function jz(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;if((b|0)==0&(c|0)==0)e=d;else{f=d;d=c;c=b;while(1){b=f+-1|0;a[b>>0]=c&7|48;c=iE(c|0,d|0,3)|0;d=y;if((c|0)==0&(d|0)==0){e=b;break;}else f=b;}}return e|0;}function kz(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){e=d;f=b;g=c;do{c=f;f=hE(f|0,g|0,10,0)|0;h=g;g=y;i=cE(f|0,g|0,10,0)|0;j=eE(c|0,h|0,i|0,y|0)|0;e=e+-1|0;a[e>>0]=j&255|48;}while(h>>>0>9|(h|0)==9&c>>>0>4294967295);k=f;l=e;}else{k=b;l=d;}if(!k)m=l;else{d=k;k=l;while(1){l=d;d=(d>>>0)/10|0;b=k+-1|0;a[b>>0]=l-(d*10|0)|48;if(l>>>0<10){m=b;break;}else k=b;}}return m|0;}function lz(a){a=a|0;return vz(a,c[(uz()|0)+188>>2]|0)|0;}function mz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+256|0;g=f;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;oE(g|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;d=e;do{fz(a,g,256);d=d+-256|0;}while(d>>>0>255);h=b&255;}else h=e;fz(a,g,h);}l=f;return;}function nz(a,b){a=a|0;b=b|0;var c=0;if(!a)c=0;else c=sz(a,b,0)|0;return c|0;}function oz(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0.0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0.0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;j=l;l=l+560|0;k=j+32|0;m=j+536|0;n=j;o=n;p=j+540|0;c[m>>2]=0;q=p+12|0;r=pz(e)|0;s=y;if((s|0)<0){t=-e;u=pz(t)|0;v=t;w=1;x=17851;z=y;A=u;}else{v=e;w=(h&2049|0)!=0&1;x=(h&2048|0)==0?(h&1|0)==0?17852:17857:17854;z=s;A=r;}do{if(0==0&(z&2146435072|0)==2146435072){r=(i&32|0)!=0;A=w+3|0;mz(b,32,f,A,h&-65537);fz(b,x,w);fz(b,v!=v|0.0!=0.0?r?17878:17882:r?17870:17874,3);mz(b,32,f,A,h^8192);B=A;}else{e=+qz(v,m)*2.0;A=e!=0.0;if(A)c[m>>2]=(c[m>>2]|0)+-1;r=i|32;if((r|0)==97){s=i&32;u=(s|0)==0?x:x+9|0;C=w|2;D=12-g|0;do{if(!(g>>>0>11|(D|0)==0)){t=8.0;E=D;do{E=E+-1|0;t=t*16.0;}while((E|0)!=0);if((a[u>>0]|0)==45){F=-(t+(-e-t));break;}else{F=e+t-t;break;}}else F=e;}while(0);D=c[m>>2]|0;E=(D|0)<0?0-D|0:D;G=kz(E,((E|0)<0)<<31>>31,q)|0;if((G|0)==(q|0)){E=p+11|0;a[E>>0]=48;H=E;}else H=G;a[H+-1>>0]=(D>>31&2)+43;D=H+-2|0;a[D>>0]=i+15;G=(g|0)<1;E=(h&8|0)==0;I=n;J=F;while(1){K=~~J;L=I+1|0;a[I>>0]=s|d[7920+K>>0];J=(J-+(K|0))*16.0;if((L-o|0)==1?!(E&(G&J==0.0)):0){a[L>>0]=46;M=I+2|0;}else M=L;if(!(J!=0.0))break;else I=M;}I=M;if((g|0)!=0?(-2-o+I|0)<(g|0):0){G=q;E=D;O=g+2+G-E|0;P=G;Q=E;}else{E=q;G=D;O=E-o-G+I|0;P=E;Q=G;}G=O+C|0;mz(b,32,f,G,h);fz(b,u,C);mz(b,48,f,G,h^65536);E=I-o|0;fz(b,n,E);I=P-Q|0;mz(b,48,O-(E+I)|0,0,0);fz(b,D,I);mz(b,32,f,G,h^8192);B=G;break;}G=(g|0)<0?6:g;if(A){I=(c[m>>2]|0)+-28|0;c[m>>2]=I;R=e*268435456.0;S=I;}else{R=e;S=c[m>>2]|0;}I=(S|0)<0?k:k+288|0;E=I;J=R;do{s=~~J>>>0;c[E>>2]=s;E=E+4|0;J=(J-+(s>>>0))*1.0e9;}while(J!=0.0);A=I;if((S|0)>0){D=I;C=E;u=S;while(1){s=(u|0)<29?u:29;L=C+-4|0;if(L>>>0>=D>>>0){K=L;L=0;do{T=jE(c[K>>2]|0,0,s|0)|0;U=dE(T|0,y|0,L|0,0)|0;T=y;L=hE(U|0,T|0,1e9,0)|0;V=cE(L|0,y|0,1e9,0)|0;W=eE(U|0,T|0,V|0,y|0)|0;c[K>>2]=W;K=K+-4|0;}while(K>>>0>=D>>>0);if(L){K=D+-4|0;c[K>>2]=L;X=K;}else X=D;}else X=D;a:do{if(C>>>0>X>>>0){K=C;while(1){W=K+-4|0;if(c[W>>2]|0){Y=K;break a;}if(W>>>0>X>>>0)K=W;else{Y=W;break;}}}else Y=C;}while(0);L=(c[m>>2]|0)-s|0;c[m>>2]=L;if((L|0)>0){D=X;C=Y;u=L;}else{Z=X;_=Y;$=L;break;}}}else{Z=I;_=E;$=S;}if(($|0)<0){u=((G+25|0)/9|0)+1|0;C=(r|0)==102;D=Z;L=_;K=$;while(1){W=0-K|0;V=(W|0)<9?W:9;if(D>>>0<L>>>0){W=(1<<V)+-1|0;T=1e9>>>V;U=0;aa=D;do{ba=c[aa>>2]|0;c[aa>>2]=(ba>>>V)+U;U=N(ba&W,T)|0;aa=aa+4|0;}while(aa>>>0<L>>>0);aa=(c[D>>2]|0)==0?D+4|0:D;if(!U){ca=L;da=aa;}else{c[L>>2]=U;ca=L+4|0;da=aa;}}else{ca=L;da=(c[D>>2]|0)==0?D+4|0:D;}aa=C?I:da;T=(ca-aa>>2|0)>(u|0)?aa+(u<<2)|0:ca;K=(c[m>>2]|0)+V|0;c[m>>2]=K;if((K|0)>=0){ea=da;fa=T;break;}else{D=da;L=T;}}}else{ea=Z;fa=_;}if(ea>>>0<fa>>>0){L=(A-ea>>2)*9|0;D=c[ea>>2]|0;if(D>>>0<10)ga=L;else{K=L;L=10;while(1){L=L*10|0;u=K+1|0;if(D>>>0<L>>>0){ga=u;break;}else K=u;}}}else ga=0;K=(r|0)==103;L=(G|0)!=0;D=G-((r|0)==102?0:ga)+((L&K)<<31>>31)|0;if((D|0)<(((fa-A>>2)*9|0)+-9|0)){u=D+9216|0;D=(u|0)/9|0;C=I+4+(D+-1024<<2)|0;E=u-(D*9|0)|0;if((E|0)<8){D=E;E=10;while(1){u=E*10|0;if((D|0)<7){D=D+1|0;E=u;}else{ha=u;break;}}}else ha=10;E=c[C>>2]|0;D=(E>>>0)/(ha>>>0)|0;r=E-(N(D,ha)|0)|0;u=(C+4|0)==(fa|0);if(!(u&(r|0)==0)){t=(D&1|0)==0?9007199254740992.0:9007199254740994.0;D=ha>>>1;J=r>>>0<D>>>0?.5:u&(r|0)==(D|0)?1.0:1.5;if(!w){ia=J;ja=t;}else{D=(a[x>>0]|0)==45;ia=D?-J:J;ja=D?-t:t;}D=E-r|0;c[C>>2]=D;if(ja+ia!=ja){r=D+ha|0;c[C>>2]=r;if(r>>>0>999999999){r=C;D=ea;while(1){E=r+-4|0;c[r>>2]=0;if(E>>>0<D>>>0){u=D+-4|0;c[u>>2]=0;ka=u;}else ka=D;u=(c[E>>2]|0)+1|0;c[E>>2]=u;if(u>>>0>999999999){r=E;D=ka;}else{la=E;ma=ka;break;}}}else{la=C;ma=ea;}D=(A-ma>>2)*9|0;r=c[ma>>2]|0;if(r>>>0<10){na=la;oa=D;pa=ma;}else{E=D;D=10;while(1){D=D*10|0;u=E+1|0;if(r>>>0<D>>>0){na=la;oa=u;pa=ma;break;}else E=u;}}}else{na=C;oa=ga;pa=ea;}}else{na=C;oa=ga;pa=ea;}E=na+4|0;qa=oa;ra=fa>>>0>E>>>0?E:fa;sa=pa;}else{qa=ga;ra=fa;sa=ea;}E=0-qa|0;b:do{if(ra>>>0>sa>>>0){D=ra;while(1){r=D+-4|0;if(c[r>>2]|0){ta=D;ua=1;break b;}if(r>>>0>sa>>>0)D=r;else{ta=r;ua=0;break;}}}else{ta=ra;ua=0;}}while(0);do{if(K){C=G+((L^1)&1)|0;if((C|0)>(qa|0)&(qa|0)>-5){va=i+-1|0;wa=C+-1-qa|0;}else{va=i+-2|0;wa=C+-1|0;}if(!(h&8)){if(ua?(C=c[ta+-4>>2]|0,(C|0)!=0):0){if(!((C>>>0)%10|0)){D=0;V=10;while(1){V=V*10|0;U=D+1|0;if((C>>>0)%(V>>>0)|0|0){xa=U;break;}else D=U;}}else xa=0;}else xa=9;D=((ta-A>>2)*9|0)+-9|0;if((va|32|0)==102){V=D-xa|0;C=(V|0)>0?V:0;ya=va;za=(wa|0)<(C|0)?wa:C;break;}else{C=D+qa-xa|0;D=(C|0)>0?C:0;ya=va;za=(wa|0)<(D|0)?wa:D;break;}}else{ya=va;za=wa;}}else{ya=i;za=G;}}while(0);G=(za|0)!=0;A=G?1:h>>>3&1;L=(ya|32|0)==102;if(L){Aa=0;Ba=(qa|0)>0?qa:0;}else{K=(qa|0)<0?E:qa;D=kz(K,((K|0)<0)<<31>>31,q)|0;K=q;if((K-D|0)<2){C=D;while(1){V=C+-1|0;a[V>>0]=48;if((K-V|0)<2)C=V;else{Ca=V;break;}}}else Ca=D;a[Ca+-1>>0]=(qa>>31&2)+43;C=Ca+-2|0;a[C>>0]=ya;Aa=C;Ba=K-C|0;}C=w+1+za+A+Ba|0;mz(b,32,f,C,h);fz(b,x,w);mz(b,48,f,C,h^65536);if(L){E=sa>>>0>I>>>0?I:sa;V=n+9|0;U=V;r=n+8|0;u=E;do{T=kz(c[u>>2]|0,0,V)|0;if((u|0)==(E|0)){if((T|0)==(V|0)){a[r>>0]=48;Da=r;}else Da=T;}else if(T>>>0>n>>>0){oE(n|0,48,T-o|0)|0;aa=T;while(1){W=aa+-1|0;if(W>>>0>n>>>0)aa=W;else{Da=W;break;}}}else Da=T;fz(b,Da,U-Da|0);u=u+4|0;}while(u>>>0<=I>>>0);if(!((h&8|0)==0&(G^1)))fz(b,18964,1);if(u>>>0<ta>>>0&(za|0)>0){I=za;U=u;while(1){r=kz(c[U>>2]|0,0,V)|0;if(r>>>0>n>>>0){oE(n|0,48,r-o|0)|0;E=r;while(1){L=E+-1|0;if(L>>>0>n>>>0)E=L;else{Ea=L;break;}}}else Ea=r;fz(b,Ea,(I|0)<9?I:9);U=U+4|0;E=I+-9|0;if(!(U>>>0<ta>>>0&(I|0)>9)){Fa=E;break;}else I=E;}}else Fa=za;mz(b,48,Fa+9|0,9,0);}else{I=ua?ta:sa+4|0;if(sa>>>0<I>>>0&(za|0)>-1){U=n+9|0;V=(h&8|0)==0;u=U;G=0-o|0;E=n+8|0;T=za;L=sa;while(1){A=kz(c[L>>2]|0,0,U)|0;if((A|0)==(U|0)){a[E>>0]=48;Ga=E;}else Ga=A;do{if((L|0)==(sa|0)){A=Ga+1|0;fz(b,Ga,1);if(V&(T|0)<1){Ha=A;break;}fz(b,18964,1);Ha=A;}else{if(Ga>>>0<=n>>>0){Ha=Ga;break;}oE(n|0,48,Ga+G|0)|0;A=Ga;while(1){K=A+-1|0;if(K>>>0>n>>>0)A=K;else{Ha=K;break;}}}}while(0);r=u-Ha|0;fz(b,Ha,(T|0)>(r|0)?r:T);A=T-r|0;L=L+4|0;if(!(L>>>0<I>>>0&(A|0)>-1)){Ia=A;break;}else T=A;}}else Ia=za;mz(b,48,Ia+18|0,18,0);fz(b,Aa,q-Aa|0);}mz(b,32,f,C,h^8192);B=C;}}while(0);l=j;return((B|0)<(f|0)?f:B)|0;}function pz(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;y=c[j+4>>2]|0;return b|0;}function qz(a,b){a=+a;b=b|0;return+ +rz(a,b);}function rz(a,b){a=+a;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,k=0,l=0.0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=iE(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){g=+rz(a*18446744073709551616.0,b);i=g;k=(c[b>>2]|0)+-64|0;}else{i=a;k=0;}c[b>>2]=k;l=i;break;}case 2047:{l=a;break;}default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;l=+h[j>>3];}}return+l;}function sz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;do{if(b){if(d>>>0<128){a[b>>0]=d;f=1;break;}if(!(c[c[(tz()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;f=1;break;}else{c[(My()|0)>>2]=84;f=-1;break;}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;f=2;break;}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;f=3;break;}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;f=4;break;}else{c[(My()|0)>>2]=84;f=-1;break;}}else f=1;}while(0);return f|0;}function tz(){return az()|0;}function uz(){return az()|0;}function vz(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=0;while(1){if((d[7936+f>>0]|0)==(b|0)){g=4;break;}h=f+1|0;if((h|0)==87){i=87;g=5;break;}else f=h;}if((g|0)==4)if(!f)j=8032;else{i=f;g=5;}if((g|0)==5){g=8032;f=i;while(1){i=g;do{b=i;i=i+1|0;}while((a[b>>0]|0)!=0);f=f+-1|0;if(!f){j=i;break;}else g=i;}}return wz(j,c[e+20>>2]|0)|0;}function wz(a,b){a=a|0;b=b|0;return Yy(a,b)|0;}function xz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=e+16|0;g=c[f>>2]|0;if(!g){if(!(yz(e)|0)){h=c[f>>2]|0;i=5;}else j=0;}else{h=g;i=5;}a:do{if((i|0)==5){g=e+20|0;f=c[g>>2]|0;k=f;if((h-f|0)>>>0<d>>>0){j=rc[c[e+36>>2]&31](e,b,d)|0;break;}b:do{if((a[e+75>>0]|0)<0|(d|0)==0){l=0;m=b;n=d;o=k;}else{f=d;while(1){p=f+-1|0;if((a[b+p>>0]|0)==10)break;if(!p){l=0;m=b;n=d;o=k;break b;}else f=p;}p=rc[c[e+36>>2]&31](e,b,f)|0;if(p>>>0<f>>>0){j=p;break a;}l=f;m=b+f|0;n=d-f|0;o=c[g>>2]|0;}}while(0);mE(o|0,m|0,n|0)|0;c[g>>2]=(c[g>>2]|0)+n;j=l+n|0;}}while(0);return j|0;}function yz(b){b=b|0;var d=0,e=0,f=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;e=c[b>>2]|0;if(!(e&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);f=0;}else{c[b>>2]=e|32;f=-1;}return f|0;}function zz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+20|0;f=c[e>>2]|0;g=(c[a+16>>2]|0)-f|0;a=g>>>0>d>>>0?d:g;mE(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0;}function Az(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=dz(c[3e3]|0,a,e)|0;l=d;return b|0;}function Bz(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+16|0;g=f;h=e&255;a[g>>0]=h;i=b+16|0;j=c[i>>2]|0;if(!j){if(!(yz(b)|0)){k=c[i>>2]|0;m=4;}else n=-1;}else{k=j;m=4;}do{if((m|0)==4){j=b+20|0;i=c[j>>2]|0;if(i>>>0<k>>>0?(o=e&255,(o|0)!=(a[b+75>>0]|0)):0){c[j>>2]=i+1;a[i>>0]=h;n=o;break;}if((rc[c[b+36>>2]&31](b,g,1)|0)==1)n=d[g>>0]|0;else n=-1;}}while(0);l=f;return n|0;}function Cz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+48|0;f=e+32|0;g=e+16|0;h=e;if(Ry(17886,a[d>>0]|0)|0){i=Dz(d)|0;c[h>>2]=b;c[h+4>>2]=i|32768;c[h+8>>2]=438;b=Ly(Ha(5,h|0)|0)|0;if((b|0)>=0){if(i&524288|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Ga(221,g|0)|0;}g=Ez(b,d)|0;if(!g){c[f>>2]=b;Ja(6,f|0)|0;j=0;}else j=g;}else j=0;}else{c[(My()|0)>>2]=22;j=0;}l=e;return j|0;}function Dz(b){b=b|0;var c=0,d=0,e=0,f=0;c=(Ry(b,43)|0)==0;d=a[b>>0]|0;e=c?d<<24>>24!=114&1:2;c=(Ry(b,120)|0)==0;f=c?e:e|128;e=(Ry(b,101)|0)==0;b=e?f:f|524288;f=d<<24>>24==114?b:b|64;b=d<<24>>24==119?f|512:f;return(d<<24>>24==97?b|1024:b)|0;}function Ez(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;e=l;l=l+64|0;f=e+40|0;g=e+24|0;h=e+16|0;i=e;j=e+56|0;if(Ry(17886,a[d>>0]|0)|0){k=Cy(1156)|0;if(!k)m=0;else{oE(k|0,0,124)|0;if(!(Ry(d,43)|0))c[k>>2]=(a[d>>0]|0)==114?8:4;if(Ry(d,101)|0){c[i>>2]=b;c[i+4>>2]=2;c[i+8>>2]=1;Ga(221,i|0)|0;}if((a[d>>0]|0)==97){c[h>>2]=b;c[h+4>>2]=3;d=Ga(221,h|0)|0;if(!(d&1024)){c[g>>2]=b;c[g+4>>2]=4;c[g+8>>2]=d|1024;Ga(221,g|0)|0;}g=c[k>>2]|128;c[k>>2]=g;n=g;}else n=c[k>>2]|0;c[k+60>>2]=b;c[k+44>>2]=k+132;c[k+48>>2]=1024;g=k+75|0;a[g>>0]=-1;if((n&8|0)==0?(c[f>>2]=b,c[f+4>>2]=21523,c[f+8>>2]=j,(Ia(54,f|0)|0)==0):0)a[g>>0]=10;c[k+32>>2]=22;c[k+36>>2]=3;c[k+40>>2]=2;c[k+12>>2]=29;if(!(c[5543]|0))c[k+76>>2]=-1;Fz(k)|0;m=k;}}else{c[(My()|0)>>2]=22;m=0;}l=e;return m|0;}function Fz(a){a=a|0;var b=0,d=0;b=Gz()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;Hz();return a|0;}function Gz(){Aa(22236);return 22244;}function Hz(){Ka(22236);return;}function Iz(){return az()|0;}function Jz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;do{if(a){if((c[a+76>>2]|0)<=-1){b=Mz(a)|0;break;}d=(Vy(a)|0)==0;e=Mz(a)|0;if(d)b=e;else{Wy(a);b=e;}}else{if(!(c[3032]|0))f=0;else f=Jz(c[3032]|0)|0;e=c[(Gz()|0)>>2]|0;if(!e)g=f;else{d=e;e=f;while(1){if((c[d+76>>2]|0)>-1)h=Vy(d)|0;else h=0;if((c[d+20>>2]|0)>>>0>(c[d+28>>2]|0)>>>0)i=Mz(d)|0|e;else i=e;if(h|0)Wy(d);d=c[d+56>>2]|0;if(!d){g=i;break;}else e=i;}}Hz();b=g;}}while(0);return b|0;}function Kz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if((c[a+76>>2]|0)>-1)b=Vy(a)|0;else b=0;Lz(a);d=(c[a>>2]&1|0)!=0;if(!d){e=Gz()|0;f=c[a+52>>2]|0;g=a+56|0;if(f|0)c[f+56>>2]=c[g>>2];h=c[g>>2]|0;if(h|0)c[h+52>>2]=f;if((c[e>>2]|0)==(a|0))c[e>>2]=h;Hz();}h=Jz(a)|0;e=pc[c[a+12>>2]&63](a)|0|h;h=c[a+92>>2]|0;if(h|0)Dy(h);if(d){if(b|0)Wy(a);}else Dy(a);return e|0;}function Lz(a){a=a|0;var b=0,d=0,e=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;d=a+112|0;if(b|0)c[b+112>>2]=c[d>>2];a=c[d>>2]|0;if(!a)e=(Iz()|0)+232|0;else e=a+116|0;c[e>>2]=b;}return;}function Mz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+20|0;d=a+28|0;if((c[b>>2]|0)>>>0>(c[d>>2]|0)>>>0?(rc[c[a+36>>2]&31](a,0,0)|0,(c[b>>2]|0)==0):0)e=-1;else{f=a+4|0;g=c[f>>2]|0;h=a+8|0;i=c[h>>2]|0;if(g>>>0<i>>>0)rc[c[a+40>>2]&31](a,g-i|0,1)|0;c[a+16>>2]=0;c[d>>2]=0;c[b>>2]=0;c[h>>2]=0;c[f>>2]=0;e=0;}return e|0;}function Nz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(Vy(d)|0)!=0:0){e=b&255;f=b&255;if((f|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=e;i=f;}else i=Bz(d,b)|0;Wy(d);j=i;}else k=3;do{if((k|0)==3){i=b&255;f=b&255;if((f|0)!=(a[d+75>>0]|0)?(e=d+20|0,h=c[e>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[e>>2]=h+1;a[h>>0]=i;j=f;break;}j=Bz(d,b)|0;}}while(0);return j|0;}function Oz(a){a=a|0;var b=0,c=0,d=0;b=(Ty(a)|0)+1|0;c=Cy(b)|0;if(!c)d=0;else d=mE(c|0,a|0,b|0)|0;return d|0;}function Pz(a){a=a|0;return(a+-65|0)>>>0<26|0;}function Qz(a){a=a|0;return(((a|32)+-97|0)>>>0<6|(Sy(a)|0)!=0)&1|0;}function Rz(a){a=a|0;return;}function Sz(a){a=a|0;Rz(a);Vz(a);return;}function Tz(a){a=a|0;return 17890;}function Uz(a){a=a|0;var b=0,c=0;b=(a|0)==0?1:a;while(1){a=Cy(b)|0;if(a|0){c=a;break;}a=ZD()|0;if(!a){c=0;break;}vc[a&3]();}return c|0;}function Vz(a){a=a|0;Dy(a);return;}function Wz(a){a=a|0;lb();}function Xz(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a=l;l=l+48|0;b=a+32|0;d=a+24|0;e=a+16|0;f=a;g=a+36|0;a=Yz()|0;if(a|0?(h=c[a>>2]|0,h|0):0){a=h+48|0;i=c[a>>2]|0;j=c[a+4>>2]|0;if(!((i&-256|0)==1126902528&(j|0)==1129074247)){c[d>>2]=18077;Zz(18027,d);}if((i|0)==1126902529&(j|0)==1129074247)k=c[h+44>>2]|0;else k=h+80|0;c[g>>2]=k;k=c[h>>2]|0;h=c[k+4>>2]|0;if(rc[c[(c[2704]|0)+16>>2]&31](10816,k,g)|0){k=c[g>>2]|0;g=pc[c[(c[k>>2]|0)+8>>2]&63](k)|0;c[f>>2]=18077;c[f+4>>2]=h;c[f+8>>2]=g;Zz(17941,f);}else{c[e>>2]=18077;c[e+4>>2]=h;Zz(17986,e);}}Zz(18065,b);}function Yz(){var a=0,b=0;a=l;l=l+16|0;if(!(rb(22248,3)|0)){b=pb(c[5563]|0)|0;l=a;return b|0;}else Zz(18216,a);return 0;}function Zz(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=c[3033]|0;dz(b,a,e)|0;Nz(10,b)|0;lb();}function _z(a){a=a|0;return;}function $z(a){a=a|0;_z(a);Vz(a);return;}function aA(a){a=a|0;return;}function bA(a){a=a|0;return;}function cA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+64|0;f=e;if(!(gA(a,b,0)|0)){if((b|0)!=0?(g=kA(b,10840,10824,0)|0,(g|0)!=0):0){b=f+4|0;h=b+52|0;do{c[b>>2]=0;b=b+4|0;}while((b|0)<(h|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;zc[c[(c[g>>2]|0)+28>>2]&7](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];i=1;}else i=0;j=i;}else j=0;}else j=1;l=e;return j|0;}function dA(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gA(a,c[b+8>>2]|0,g)|0)jA(0,b,d,e,f);return;}function eA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do{if(!(gA(b,c[d+8>>2]|0,g)|0)){if(gA(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;h=d+40|0;c[h>>2]=(c[h>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break;}if((f|0)==1)c[d+32>>2]=1;}}else iA(0,d,e,f);}while(0);return;}function fA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gA(a,c[b+8>>2]|0,0)|0)hA(0,b,d,e);return;}function gA(a,b,c){a=a|0;b=b|0;c=c|0;return(a|0)==(b|0)|0;}function hA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;b=d+16|0;g=c[b>>2]|0;do{if(g){if((g|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break;}h=d+24|0;if((c[h>>2]|0)==2)c[h>>2]=f;}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1;}}while(0);return;}function iA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((c[b+4>>2]|0)==(d|0)?(d=b+28|0,(c[d>>2]|0)!=1):0)c[d>>2]=e;return;}function jA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;a[d+53>>0]=1;do{if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;h=c[b>>2]|0;if(!h){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break;}if((h|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;a[d+54>>0]=1;break;}h=d+24|0;b=c[h>>2]|0;if((b|0)==2){c[h>>2]=g;i=g;}else i=b;if((i|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1;}}while(0);return;}function kA(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;h=l;l=l+64|0;i=h;j=c[d>>2]|0;k=d+(c[j+-8>>2]|0)|0;m=c[j+-4>>2]|0;c[i>>2]=f;c[i+4>>2]=d;c[i+8>>2]=e;c[i+12>>2]=g;g=i+16|0;e=i+20|0;d=i+24|0;j=i+28|0;n=i+32|0;o=i+40|0;p=g;q=p+36|0;do{c[p>>2]=0;p=p+4|0;}while((p|0)<(q|0));b[g+36>>1]=0;a[g+38>>0]=0;a:do{if(gA(m,f,0)|0){c[i+48>>2]=1;Bc[c[(c[m>>2]|0)+20>>2]&3](m,i,k,k,1,0);r=(c[d>>2]|0)==1?k:0;}else{Ac[c[(c[m>>2]|0)+24>>2]&3](m,i,k,1,0);switch(c[i+36>>2]|0){case 0:{r=(c[o>>2]|0)==1&(c[j>>2]|0)==1&(c[n>>2]|0)==1?c[e>>2]|0:0;break a;break;}case 1:break;default:{r=0;break a;}}if((c[d>>2]|0)!=1?!((c[o>>2]|0)==0&(c[j>>2]|0)==1&(c[n>>2]|0)==1):0){r=0;break;}r=c[g>>2]|0;}}while(0);l=h;return r|0;}function lA(a){a=a|0;_z(a);Vz(a);return;}function mA(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;if(gA(a,c[b+8>>2]|0,g)|0)jA(0,b,d,e,f);else{h=c[a+8>>2]|0;Bc[c[(c[h>>2]|0)+20>>2]&3](h,b,d,e,f,g);}return;}function nA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;do{if(!(gA(b,c[d+8>>2]|0,g)|0)){if(!(gA(b,c[d>>2]|0,g)|0)){h=c[b+8>>2]|0;Ac[c[(c[h>>2]|0)+24>>2]&3](h,d,e,f,g);break;}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;j=d+52|0;a[j>>0]=0;k=d+53|0;a[k>>0]=0;l=c[b+8>>2]|0;Bc[c[(c[l>>2]|0)+20>>2]&3](l,d,e,e,1,g);if(a[k>>0]|0){if(!(a[j>>0]|0)){m=1;n=11;}else n=15;}else{m=0;n=11;}do{if((n|0)==11){c[h>>2]=e;j=d+40|0;c[j>>2]=(c[j>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(m){n=15;break;}else{o=4;break;}}if(m)n=15;else o=4;}}while(0);if((n|0)==15)o=3;c[i>>2]=o;break;}if((f|0)==1)c[d+32>>2]=1;}else iA(0,d,e,f);}while(0);return;}function oA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if(gA(a,c[b+8>>2]|0,0)|0)hA(0,b,d,e);else{f=c[a+8>>2]|0;zc[c[(c[f>>2]|0)+28>>2]&7](f,b,d,e);}return;}function pA(a){a=a|0;return;}function qA(){var a=0;a=l;l=l+16|0;if(!(qb(22252,72)|0)){l=a;return;}else Zz(18265,a);}function rA(a){a=a|0;var b=0;b=l;l=l+16|0;Dy(a);if(!(sb(c[5563]|0,0)|0)){l=b;return;}else Zz(18315,b);}function sA(){var a=0,b=0;a=Yz()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)tA(c[b+12>>2]|0);tA(uA()|0);}function tA(a){a=a|0;var b=0;b=l;l=l+16|0;vc[a&3]();Zz(18368,b);}function uA(){var a=0;a=c[3162]|0;c[3162]=a+0;return a|0;}function vA(a){a=a|0;return;}function wA(a){a=a|0;_z(a);Vz(a);return;}function xA(a,b,c){a=a|0;b=b|0;c=c|0;return gA(a,b,0)|0;}function yA(a){a=a|0;_z(a);Vz(a);return;}function zA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+64|0;f=e;c[d>>2]=c[c[d>>2]>>2];if(!(AA(a,b,0)|0)){if(((b|0)!=0?(g=kA(b,10840,10896,0)|0,(g|0)!=0):0)?(c[g+8>>2]&~c[a+8>>2]|0)==0:0){b=a+12|0;a=g+12|0;if(!(gA(c[b>>2]|0,c[a>>2]|0,0)|0)?!(gA(c[b>>2]|0,10928,0)|0):0){g=c[b>>2]|0;if((((g|0)!=0?(b=kA(g,10840,10824,0)|0,(b|0)!=0):0)?(g=c[a>>2]|0,(g|0)!=0):0)?(a=kA(g,10840,10824,0)|0,(a|0)!=0):0){g=f+4|0;h=g+52|0;do{c[g>>2]=0;g=g+4|0;}while((g|0)<(h|0));c[f>>2]=a;c[f+8>>2]=b;c[f+12>>2]=-1;c[f+48>>2]=1;zc[c[(c[a>>2]|0)+28>>2]&7](a,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];i=1;}else i=0;j=i;}else j=0;}else j=1;}else j=0;}else j=1;l=e;return j|0;}function AA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(gA(a,b,0)|0)d=1;else d=gA(b,10936,0)|0;return d|0;}function BA(a){a=a|0;_z(a);Vz(a);return;}function CA(a,b,c){a=a|0;b=b|0;c=c|0;return 0;}function DA(a){a=a|0;_z(a);Vz(a);return;}function EA(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(gA(b,c[d+8>>2]|0,h)|0)jA(0,d,e,f,g);else{i=d+52|0;j=a[i>>0]|0;k=d+53|0;l=a[k>>0]|0;m=c[b+12>>2]|0;n=b+16+(m<<3)|0;a[i>>0]=0;a[k>>0]=0;IA(b+16|0,d,e,f,g,h);a:do{if((m|0)>1){o=d+24|0;p=b+8|0;q=d+54|0;r=b+24|0;do{if(a[q>>0]|0)break a;if(!(a[i>>0]|0)){if(a[k>>0]|0?(c[p>>2]&1|0)==0:0)break a;}else{if((c[o>>2]|0)==1)break a;if(!(c[p>>2]&2))break a;}a[i>>0]=0;a[k>>0]=0;IA(r,d,e,f,g,h);r=r+8|0;}while(r>>>0<n>>>0);}}while(0);a[i>>0]=j;a[k>>0]=l;}return;}function FA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;a:do{if(!(gA(b,c[d+8>>2]|0,g)|0)){if(!(gA(b,c[d>>2]|0,g)|0)){h=c[b+12>>2]|0;i=b+16+(h<<3)|0;JA(b+16|0,d,e,f,g);j=b+24|0;if((h|0)<=1)break;h=c[b+8>>2]|0;if((h&2|0)==0?(k=d+36|0,(c[k>>2]|0)!=1):0){if(!(h&1)){h=d+54|0;l=j;while(1){if(a[h>>0]|0)break a;if((c[k>>2]|0)==1)break a;JA(l,d,e,f,g);l=l+8|0;if(l>>>0>=i>>>0)break a;}}l=d+24|0;h=d+54|0;m=j;while(1){if(a[h>>0]|0)break a;if((c[k>>2]|0)==1?(c[l>>2]|0)==1:0)break a;JA(m,d,e,f,g);m=m+8|0;if(m>>>0>=i>>>0)break a;}}m=d+54|0;l=j;while(1){if(a[m>>0]|0)break a;JA(l,d,e,f,g);l=l+8|0;if(l>>>0>=i>>>0)break a;}}if((c[d+16>>2]|0)!=(e|0)?(i=d+20|0,(c[i>>2]|0)!=(e|0)):0){c[d+32>>2]=f;l=d+44|0;if((c[l>>2]|0)==4)break;m=b+16+(c[b+12>>2]<<3)|0;j=d+52|0;k=d+53|0;h=d+54|0;n=b+8|0;o=d+24|0;p=0;q=b+16|0;r=0;b:while(1){if(q>>>0>=m>>>0){s=p;t=18;break;}a[j>>0]=0;a[k>>0]=0;IA(q,d,e,e,1,g);if(a[h>>0]|0){s=p;t=18;break;}do{if(a[k>>0]|0){if(!(a[j>>0]|0))if(!(c[n>>2]&1)){s=1;t=18;break b;}else{u=1;v=r;break;}if((c[o>>2]|0)==1){t=23;break b;}if(!(c[n>>2]&2)){t=23;break b;}else{u=1;v=1;}}else{u=p;v=r;}}while(0);p=u;q=q+8|0;r=v;}do{if((t|0)==18){if((!r?(c[i>>2]=e,q=d+40|0,c[q>>2]=(c[q>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[h>>0]=1;if(s){t=23;break;}else{w=4;break;}}if(s)t=23;else w=4;}}while(0);if((t|0)==23)w=3;c[l>>2]=w;break;}if((f|0)==1)c[d+32>>2]=1;}else iA(0,d,e,f);}while(0);return;}function GA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do{if(!(gA(b,c[d+8>>2]|0,0)|0)){g=c[b+12>>2]|0;h=b+16+(g<<3)|0;HA(b+16|0,d,e,f);if((g|0)>1){g=d+54|0;i=b+24|0;do{HA(i,d,e,f);if(a[g>>0]|0)break a;i=i+8|0;}while(i>>>0<h>>>0);}}else hA(0,d,e,f);}while(0);return;}function HA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=c[a+4>>2]|0;g=f>>8;if(!(f&1))h=g;else h=c[(c[d>>2]|0)+g>>2]|0;g=c[a>>2]|0;zc[c[(c[g>>2]|0)+28>>2]&7](g,b,d+h|0,(f&2|0)==0?2:e);return;}function IA(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=c[a+4>>2]|0;i=h>>8;if(!(h&1))j=i;else j=c[(c[e>>2]|0)+i>>2]|0;i=c[a>>2]|0;Bc[c[(c[i>>2]|0)+20>>2]&3](i,b,d,e+j|0,(h&2|0)==0?2:f,g);return;}function JA(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[a+4>>2]|0;h=g>>8;if(!(g&1))i=h;else i=c[(c[d>>2]|0)+h>>2]|0;h=c[a>>2]|0;Ac[c[(c[h>>2]|0)+24>>2]&3](h,b,d+i|0,(g&2|0)==0?2:e,f);return;}function KA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;g=l;l=l+4192|0;h=g+4176|0;i=g;j=g+4112|0;if((b|0)!=0?(k=(d|0)!=0,m=(e|0)==0,!(k&m)):0){if(k)n=c[e>>2]|0;else n=0;LA(i);MA(j,i);k=j+48|0;o=j+61|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;a[k+12>>0]=0;a[o>>0]=1;k=j+32|0;p=j+36|0;q=c[p>>2]|0;if(q>>>0<(c[j+40>>2]|0)>>>0){NA(h,i);c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=c[h>>2];c[p>>2]=(c[p>>2]|0)+16;}else OA(k,i);q=j+62|0;a[q>>0]=0;a[j+63>>0]=1;c[h>>2]=0;r=b+(Ty(b)|0)|0;PA(b,r,j,h);s=c[h>>2]|0;do{if(!((s|0)!=0|(a[q>>0]|0)==0)){t=c[k>>2]|0;if((t|0)!=(c[p>>2]|0)?(c[t>>2]|0)!=(c[t+4>>2]|0):0){a[q>>0]=0;a[o>>0]=0;t=c[j>>2]|0;u=j+4|0;v=c[u>>2]|0;while(1){if((v|0)==(t|0))break;w=v+-24|0;QA(w);v=w;}c[u>>2]=t;v=c[j+16>>2]|0;w=j+20|0;x=c[w>>2]|0;while(1){if((x|0)==(v|0))break;y=x+-16|0;RA(y);x=y;}c[w>>2]=v;PA(b,r,j,h);if(!(a[q>>0]|0)){z=c[h>>2]|0;A=22;break;}else{c[h>>2]=-2;B=0;C=-2;break;}}else A=23;}else{z=s;A=22;}}while(0);if((A|0)==22)if(!z)A=23;else{B=0;C=z;}do{if((A|0)==23){z=j+4|0;s=SA((c[z>>2]|0)+-24|0)|0;q=s+1|0;if(q>>>0>n>>>0){r=Fy(d,q)|0;if(!r){c[h>>2]=-1;B=0;C=-1;break;}if(m)D=r;else{c[e>>2]=q;D=r;}}else if(!d){B=0;C=0;break;}else D=d;r=c[z>>2]|0;q=r+-12|0;b=a[q+11>>0]|0;o=b<<24>>24<0;TA(r+-24|0,o?c[q>>2]|0:q,o?c[r+-8>>2]|0:b&255)|0;b=(c[z>>2]|0)+-24|0;if((a[b+11>>0]|0)<0)E=c[b>>2]|0;else E=b;mE(D|0,E|0,s|0)|0;a[D+s>>0]=0;B=D;C=0;}}while(0);if(f|0)c[f>>2]=C;UA(j);VA(i);F=B;}else if(!f)F=0;else{c[f>>2]=-3;F=0;}l=g;return F|0;}function LA(a){a=a|0;c[a+4096>>2]=a;return;}function MA(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;SD(e,b);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=c[e>>2];NA(e,b);TD(a+16|0,e);UD(e,b);VD(a+32|0,e);l=d;return;}function NA(a,b){a=a|0;b=b|0;c[a>>2]=b;return;}function OA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+32|0;e=d+20|0;f=d;g=a+4|0;h=((c[g>>2]|0)-(c[a>>2]|0)>>4)+1|0;i=qD(a)|0;if(i>>>0<h>>>0)Wz(a);else{j=c[a>>2]|0;k=(c[a+8>>2]|0)-j|0;m=k>>3;rD(f,k>>4>>>0<i>>>1>>>0?m>>>0<h>>>0?h:m:i,(c[g>>2]|0)-j>>4,a+12|0);j=f+8|0;g=c[j>>2]|0;NA(e,b);c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=c[e>>2];c[j>>2]=g+16;sD(a,f);tD(f);l=d;return;}}function PA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a:do{if(b>>>0<d>>>0){b:do{if((a[b>>0]|0)!=95){if((mB(b,d,e)|0)!=(d|0)){c[f>>2]=-2;break a;}}else{if((d-b|0)<=3){c[f>>2]=-2;break a;}switch(a[b+1>>0]|0){case 90:{g=b+2|0;h=jB(g,d,e)|0;if(!((h|0)==(g|0)|(h|0)==(d|0))?(a[h>>0]|0)==46:0)i=kB(h,d,e)|0;else i=h;if((i|0)==(d|0))break b;c[f>>2]=-2;break a;break;}case 95:{j=11;break;}default:{}}if(((j|0)==11?(a[b+2>>0]|0)==95:0)?(a[b+3>>0]|0)==90:0){h=b+4|0;g=jB(h,d,e)|0;if((g|0)==(h|0)|(g|0)==(d|0)){c[f>>2]=-2;break a;}if((lB(g,d,e)|0)==(d|0))break;c[f>>2]=-2;break a;}c[f>>2]=-2;break a;}}while(0);if((c[f>>2]|0)==0?(c[e>>2]|0)==(c[e+4>>2]|0):0)c[f>>2]=-2;}else c[f>>2]=-2;}while(0);return;}function QA(a){a=a|0;iB(a+12|0);iB(a);return;}function RA(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(b|0){d=a+4|0;e=c[d>>2]|0;while(1){if((e|0)==(b|0))break;f=e+-24|0;QA(f);e=f;}c[d>>2]=b;b=c[a>>2]|0;hB(a+12|0,b,((c[a+8>>2]|0)-b|0)/24|0);}return;}function SA(b){b=b|0;var d=0,e=0,f=0;d=a[b+11>>0]|0;if(d<<24>>24<0)e=c[b+4>>2]|0;else e=d&255;d=a[b+12+11>>0]|0;if(d<<24>>24<0)f=c[b+16>>2]|0;else f=d&255;return f+e|0;}function TA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+16|0;g=f;h=b+11|0;i=a[h>>0]|0;j=i<<24>>24<0;if(j){k=c[b+4>>2]|0;m=(c[b+8>>2]&2147483647)+-1|0;}else{k=i&255;m=10;}if((m-k|0)>>>0>=e>>>0){if(e|0){if(j)n=c[b>>2]|0;else n=b;bB(n+k|0,d,e)|0;j=k+e|0;if((a[h>>0]|0)<0)c[b+4>>2]=j;else a[h>>0]=j;a[g>>0]=0;cB(n+j|0,g);}}else dB(b,m,k+e-m|0,k,k,0,e,d);l=f;return b|0;}function UA(a){a=a|0;WA(a+32|0);XA(a+16|0);RA(a);return;}function VA(a){a=a|0;c[a+4096>>2]=0;return;}function WA(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(b|0){d=a+4|0;e=c[d>>2]|0;while(1){if((e|0)==(b|0))break;f=e+-16|0;XA(f);e=f;}c[d>>2]=b;b=c[a>>2]|0;aB(a+12|0,b,(c[a+8>>2]|0)-b>>4);}return;}function XA(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(b|0){d=a+4|0;e=c[d>>2]|0;while(1){if((e|0)==(b|0))break;f=e+-16|0;RA(f);e=f;}c[d>>2]=b;b=c[a>>2]|0;YA(a+12|0,b,(c[a+8>>2]|0)-b>>4);}return;}function YA(a,b,d){a=a|0;b=b|0;d=d|0;ZA(c[a>>2]|0,b,d<<4);return;}function ZA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(_A(a,b)|0){e=b+($A(d)|0)|0;d=a+4096|0;if((e|0)==(c[d>>2]|0))c[d>>2]=b;}else Dy(b);return;}function _A(a,b){a=a|0;b=b|0;return(a+4096|0)>>>0>=b>>>0&a>>>0<=b>>>0|0;}function $A(a){a=a|0;return a+15&-16|0;}function aB(a,b,d){a=a|0;b=b|0;d=d|0;ZA(c[a>>2]|0,b,d<<4);return;}function bB(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)mE(a|0,b|0,c|0)|0;return a|0;}function cB(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return;}function dB(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+16|0;m=k;if((-18-d|0)>>>0<e>>>0)eB(b);if((a[b+11>>0]|0)<0)n=c[b>>2]|0;else n=b;if(d>>>0<2147483623){o=e+d|0;e=d<<1;p=o>>>0<e>>>0?e:o;q=p>>>0<11?11:p+16&-16;}else q=-17;p=fB(q)|0;if(g|0)bB(p,n,g)|0;if(i|0)bB(p+g|0,j,i)|0;j=f-h|0;f=j-g|0;if(f|0)bB(p+g+i|0,n+g+h|0,f)|0;if((d|0)!=10)gB(n);c[b>>2]=p;c[b+8>>2]=q|-2147483648;q=j+i|0;c[b+4>>2]=q;a[m>>0]=0;cB(p+q|0,m);l=k;return;}function eB(a){a=a|0;lb();}function fB(a){a=a|0;return Cy(a)|0;}function gB(a){a=a|0;Dy(a);return;}function hB(a,b,d){a=a|0;b=b|0;d=d|0;ZA(c[a>>2]|0,b,d*24|0);return;}function iB(b){b=b|0;if((a[b+11>>0]|0)<0)gB(c[b>>2]|0);return;}function jB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;f=l;l=l+64|0;g=f+48|0;h=f+40|0;i=f+32|0;j=f+24|0;k=f+12|0;m=f;if((b|0)!=(d|0)){n=e+56|0;MD(h,n);c[n>>2]=(c[n>>2]|0)+1;o=e+61|0;ND(i,o);if((c[n>>2]|0)>>>0>1)a[o>>0]=1;a:do{switch(a[b>>0]|0){case 84:case 71:{p=OD(b,d,e)|0;q=1;break;}default:{n=MB(b,d,e)|0;r=c[e+48>>2]|0;s=c[e+52>>2]|0;b:do{if((n|0)!=(b|0)){if((n|0)!=(d|0)){switch(a[n>>0]|0){case 46:case 69:{t=n;break b;break;}default:{}}ND(j,o);a[o>>0]=0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;u=0;while(1){if((u|0)==3)break;c[k+(u<<2)>>2]=0;u=u+1|0;}u=e+4|0;v=c[u>>2]|0;c:do{if((c[e>>2]|0)!=(v|0)){w=v+-24|0;x=a[w+11>>0]|0;y=x<<24>>24<0;if(y)z=c[v+-20>>2]|0;else z=x&255;if(z){if(!(a[e+60>>0]|0)){if(y){A=c[w>>2]|0;B=c[v+-20>>2]|0;}else{A=w;B=x&255;}if((a[A+B+-1>>0]|0)==62){if(y){C=c[v+-20>>2]|0;D=c[w>>2]|0;}else{C=x&255;D=w;}if((a[D+(C+-2)>>0]|0)!=45){if(y){E=c[v+-20>>2]|0;F=c[w>>2]|0;}else{E=x&255;F=w;}if((a[F+(E+-2)>>0]|0)!=62){x=mB(n,d,e)|0;if((x|0)==(n|0)){G=b;H=0;break;}y=c[u>>2]|0;I=y;if(((y-(c[e>>2]|0)|0)/24|0)>>>0<2){G=b;H=0;break;}y=I+-24|0;c[m>>2]=c[y>>2];c[m+4>>2]=c[y+4>>2];c[m+8>>2]=c[y+8>>2];J=0;while(1){if((J|0)==3)break;c[y+(J<<2)>>2]=0;J=J+1|0;}J=I+-12|0;y=k+11|0;if((a[y>>0]|0)<0){K=c[k>>2]|0;a[g>>0]=0;cB(K,g);c[k+4>>2]=0;}else{a[g>>0]=0;cB(k,g);a[y>>0]=0;}TB(k);c[k>>2]=c[J>>2];c[k+4>>2]=c[J+4>>2];c[k+8>>2]=c[J+8>>2];K=0;while(1){if((K|0)==3)break;c[J+(K<<2)>>2]=0;K=K+1|0;}K=a[y>>0]|0;if(!((K<<24>>24<0?c[k+4>>2]|0:K&255)|0))NC(m,32);K=c[u>>2]|0;J=0;while(1){if((J|0)==-1)break;I=J+-1|0;QA(K+(I*24|0)|0);J=I;}c[u>>2]=K+-24;J=a[m+11>>0]|0;y=J<<24>>24<0;zD(K+-48|0,0,y?c[m>>2]|0:m,y?c[m+4>>2]|0:J&255)|0;iB(m);L=x;M=(c[u>>2]|0)+-24|0;}else{L=n;M=w;}}else{L=n;M=w;}}else{L=n;M=w;}}else{L=n;M=w;}NC(M,40);if((L|0)!=(d|0)?(a[L>>0]|0)==118:0){N=L+1|0;O=c[e>>2]|0;P=c[u>>2]|0;}else Q=50;do{if((Q|0)==50){J=g+11|0;y=g+4|0;I=m+11|0;R=m+4|0;S=1;T=L;d:while(1){U=T;while(1){V=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;W=mB(U,d,e)|0;X=c[u>>2]|0;Y=c[e>>2]|0;Z=(X-Y|0)/24|0;if((W|0)==(U|0)){Q=74;break d;}if(Z>>>0>V>>>0)break;else U=W;}c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;_=0;while(1){if((_|0)==3)break;c[g+(_<<2)>>2]=0;_=_+1|0;}_=V;while(1){if(_>>>0>=Z>>>0)break;$=a[J>>0]|0;if(($<<24>>24<0?c[y>>2]|0:$&255)|0)qB(g,18897)|0;FB(m,(c[e>>2]|0)+(_*24|0)|0);$=a[I>>0]|0;aa=$<<24>>24<0;TA(g,aa?c[m>>2]|0:m,aa?c[R>>2]|0:$&255)|0;iB(m);_=_+1|0;}_=V;while(1){if(_>>>0>=Z>>>0)break;$=c[u>>2]|0;aa=0;while(1){if((aa|0)==-1)break;ba=aa+-1|0;QA($+(ba*24|0)|0);aa=ba;}c[u>>2]=$+-24;_=_+1|0;}_=a[J>>0]|0;aa=c[y>>2]|0;ba=_&255;if(!((_<<24>>24<0?aa:ba)|0))ca=S;else{da=c[u>>2]|0;if((c[e>>2]|0)==(da|0)){Q=86;break;}if(S){ea=ba;fa=da;ga=_;ha=aa;}else{qB(da+-24|0,18897)|0;da=a[J>>0]|0;ea=da&255;fa=c[u>>2]|0;ga=da;ha=c[y>>2]|0;}da=ga<<24>>24<0;TA(fa+-24|0,da?c[g>>2]|0:g,da?ha:ea)|0;ca=0;}iB(g);S=ca;T=W;}if((Q|0)==74){N=U;O=Y;P=X;break;}else if((Q|0)==86){iB(g);G=b;H=0;break c;}}}while(0);if((O|0)!=(P|0)){NC(P+-24|0,41);if(r&1|0)qB((c[u>>2]|0)+-24|0,18620)|0;if(r&2|0)qB((c[u>>2]|0)+-24|0,18627)|0;if(r&4|0)qB((c[u>>2]|0)+-24|0,18637)|0;switch(s|0){case 1:{qB((c[u>>2]|0)+-24|0,20101)|0;break;}case 2:{qB((c[u>>2]|0)+-24|0,20104)|0;break;}default:{}}w=a[k+11>>0]|0;x=w<<24>>24<0;TA((c[u>>2]|0)+-24|0,x?c[k>>2]|0:k,x?c[k+4>>2]|0:w&255)|0;G=N;H=1;}else{G=b;H=0;}}else{G=b;H=0;}}else{G=b;H=0;}}while(0);iB(k);PD(j);if(H)t=G;else{p=G;q=0;break a;}}else t=d;}else t=b;}while(0);p=t;q=1;}}}while(0);PD(i);QD(h);if(q){ia=p;Q=90;}else ja=b;}else{ia=b;Q=90;}if((Q|0)==90)ja=ia;l=f;return ja|0;}function kB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+48|0;g=f+24|0;h=f+12|0;i=f;if(((b|0)!=(d|0)?(a[b>>0]|0)==46:0)?(j=e+4|0,(c[e>>2]|0)!=(c[j>>2]|0)):0){c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;QC(i,b,d);pB(i,0,18670)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];e=0;while(1){if((e|0)==3)break;c[i+(e<<2)>>2]=0;e=e+1|0;}qB(h,18673)|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];e=0;while(1){if((e|0)==3)break;c[h+(e<<2)>>2]=0;e=e+1|0;}e=a[g+11>>0]|0;k=e<<24>>24<0;TA((c[j>>2]|0)+-24|0,k?c[g>>2]|0:g,k?c[g+4>>2]|0:e&255)|0;iB(g);iB(h);iB(i);m=d;}else m=b;l=f;return m|0;}function lB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;a:do{if((d-b|0)>12){f=0;g=b;while(1){if(f>>>0>=13)break;if((a[g>>0]|0)!=(a[20306+f>>0]|0)){h=b;break a;}f=f+1|0;g=g+1|0;}b:do{if((g|0)==(d|0))i=d;else{if((a[g>>0]|0)==95){f=g+1|0;if((f|0)==(d|0)){h=b;break a;}if(((a[f>>0]|0)+-48|0)>>>0>=10){h=b;break a;}j=g+2|0;}else j=g;f=j;while(1){if((f|0)==(d|0)){i=d;break b;}if(((a[f>>0]|0)+-48|0)>>>0>=10){i=f;break b;}f=f+1|0;}}}while(0);g=c[e+4>>2]|0;if((c[e>>2]|0)!=(g|0)){pB(g+-24|0,0,20320)|0;h=i;}else h=b;}else h=b;}while(0);return h|0;}function mB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;f=l;l=l+144|0;g=f+128|0;h=f+104|0;i=f+40|0;j=f+88|0;k=f+24|0;m=f+76|0;n=f+12|0;o=f;p=f+64|0;a:do{if((b|0)!=(d|0)){switch(a[b>>0]|0){case 75:case 86:case 114:{c[g>>2]=0;q=nB(b,d,g)|0;b:do{if((q|0)!=(b|0)?(r=(a[q>>0]|0)==70,s=e+4|0,t=((c[s>>2]|0)-(c[e>>2]|0)|0)/24|0,u=mB(q,d,e)|0,v=((c[s>>2]|0)-(c[e>>2]|0)|0)/24|0,(u|0)!=(q|0)):0){s=e+20|0;w=c[s>>2]|0;if(r){x=0;while(1){if((x|0)==-1)break;y=x+-1|0;RA(w+(y<<4)|0);x=y;}x=w+-16|0;c[s>>2]=x;z=x;}else z=w;x=c[e+12>>2]|0;c[h>>2]=x;if(z>>>0<(c[e+24>>2]|0)>>>0){c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=x;c[s>>2]=(c[s>>2]|0)+16;}else oB(e+16|0,h);x=c[g>>2]|0;y=(x&1|0)==0;A=(x&2|0)==0;B=(x&4|0)==0;x=t;while(1){if(x>>>0>=v>>>0){C=u;break b;}if(r){D=c[e>>2]|0;E=D+(x*24|0)+12|0;F=a[E+11>>0]|0;G=F<<24>>24<0;if(G){H=c[D+(x*24|0)+16>>2]|0;I=c[E>>2]|0;}else{H=F&255;I=E;}J=H+-2|0;if((a[I+J>>0]|0)==38)K=H+-3|0;else{if(G){L=c[E>>2]|0;M=c[D+(x*24|0)+16>>2]|0;}else{L=E;M=F&255;}K=(a[L+M+-1>>0]|0)==38?J:H;}if(y)N=K;else{pB(E,K,18620)|0;N=K+6|0;}if(A)O=N;else{pB((c[e>>2]|0)+(x*24|0)+12|0,N,18627)|0;O=N+9|0;}if(!B)pB((c[e>>2]|0)+(x*24|0)+12|0,O,18637)|0;}else{if(!y)qB((c[e>>2]|0)+(x*24|0)|0,18620)|0;if(!A)qB((c[e>>2]|0)+(x*24|0)|0,18627)|0;if(!B)qB((c[e>>2]|0)+(x*24|0)|0,18637)|0;}E=c[s>>2]|0;J=(c[e>>2]|0)+(x*24|0)|0;F=E+-12|0;D=c[F>>2]|0;if((D|0)==(c[E+-8>>2]|0))sB(E+-16|0,J);else{rB(D,J);c[F>>2]=(c[F>>2]|0)+24;}x=x+1|0;}}else C=b;}while(0);P=C;break a;break;}default:{}}q=tB(b,d,e)|0;if((q|0)==(b|0)){c:do{switch(a[b>>0]|0){case 65:{x=uB(b,d,e)|0;if((x|0)==(b|0)){P=b;break a;}s=c[e+4>>2]|0;if((c[e>>2]|0)==(s|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,s+-24|0,h);s=e+20|0;B=c[s>>2]|0;if(B>>>0<(c[e+24>>2]|0)>>>0){c[B>>2]=0;A=B+4|0;c[A>>2]=0;y=B+8|0;c[y>>2]=0;c[B+12>>2]=c[g+12>>2];c[B>>2]=c[g>>2];B=g+4|0;c[A>>2]=c[B>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[B>>2]=0;c[g>>2]=0;c[s>>2]=(c[s>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=x;break a;break;}case 67:{x=b+1|0;s=mB(x,d,e)|0;if((s|0)==(x|0)){P=b;break a;}x=e+4|0;B=c[x>>2]|0;if((c[e>>2]|0)==(B|0)){P=b;break a;}qB(B+-24|0,18647)|0;B=(c[x>>2]|0)+-24|0;c[h>>2]=c[e+12>>2];vB(g,B,h);B=e+20|0;x=c[B>>2]|0;if(x>>>0<(c[e+24>>2]|0)>>>0){c[x>>2]=0;A=x+4|0;c[A>>2]=0;y=x+8|0;c[y>>2]=0;c[x+12>>2]=c[g+12>>2];c[x>>2]=c[g>>2];x=g+4|0;c[A>>2]=c[x>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[x>>2]=0;c[g>>2]=0;c[B>>2]=(c[B>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=s;break a;break;}case 70:{s=xB(b,d,e)|0;if((s|0)==(b|0)){P=b;break a;}B=c[e+4>>2]|0;if((c[e>>2]|0)==(B|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,B+-24|0,h);B=e+20|0;x=c[B>>2]|0;if(x>>>0<(c[e+24>>2]|0)>>>0){c[x>>2]=0;A=x+4|0;c[A>>2]=0;y=x+8|0;c[y>>2]=0;c[x+12>>2]=c[g+12>>2];c[x>>2]=c[g>>2];x=g+4|0;c[A>>2]=c[x>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[x>>2]=0;c[g>>2]=0;c[B>>2]=(c[B>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=s;break a;break;}case 71:{s=b+1|0;B=mB(s,d,e)|0;if((B|0)==(s|0)){P=b;break a;}s=e+4|0;x=c[s>>2]|0;if((c[e>>2]|0)==(x|0)){P=b;break a;}qB(x+-24|0,18656)|0;x=(c[s>>2]|0)+-24|0;c[h>>2]=c[e+12>>2];vB(g,x,h);x=e+20|0;s=c[x>>2]|0;if(s>>>0<(c[e+24>>2]|0)>>>0){c[s>>2]=0;A=s+4|0;c[A>>2]=0;y=s+8|0;c[y>>2]=0;c[s+12>>2]=c[g+12>>2];c[s>>2]=c[g>>2];s=g+4|0;c[A>>2]=c[s>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[s>>2]=0;c[g>>2]=0;c[x>>2]=(c[x>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=B;break a;break;}case 77:{B=yB(b,d,e)|0;if((B|0)==(b|0)){P=b;break a;}x=c[e+4>>2]|0;if((c[e>>2]|0)==(x|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,x+-24|0,h);x=e+20|0;s=c[x>>2]|0;if(s>>>0<(c[e+24>>2]|0)>>>0){c[s>>2]=0;A=s+4|0;c[A>>2]=0;y=s+8|0;c[y>>2]=0;c[s+12>>2]=c[g+12>>2];c[s>>2]=c[g>>2];s=g+4|0;c[A>>2]=c[s>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[s>>2]=0;c[g>>2]=0;c[x>>2]=(c[x>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=B;break a;break;}case 79:{B=e+4|0;x=((c[B>>2]|0)-(c[e>>2]|0)|0)/24|0;s=b+1|0;A=mB(s,d,e)|0;y=((c[B>>2]|0)-(c[e>>2]|0)|0)/24|0;if((A|0)==(s|0)){P=b;break a;}s=c[e+12>>2]|0;c[g>>2]=s;B=e+20|0;r=c[B>>2]|0;if(r>>>0<(c[e+24>>2]|0)>>>0){c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=s;c[B>>2]=(c[B>>2]|0)+16;}else oB(e+16|0,g);s=g+11|0;r=g+4|0;u=x;while(1){if(u>>>0>=y>>>0){P=A;break a;}zB(g,(c[e>>2]|0)+(u*24|0)+12|0,2);x=AB(18667)|0;v=a[s>>0]|0;if((x|0)==((v<<24>>24<0?c[r>>2]|0:v&255)|0))Q=(BB(g,18667,x)|0)==0;else Q=0;iB(g);x=c[e>>2]|0;v=x+(u*24|0)|0;if(!Q){t=x+(u*24|0)+12|0;if((a[t+11>>0]|0)<0)R=c[t>>2]|0;else R=t;if((a[R>>0]|0)==40){qB(v,18675)|0;pB((c[e>>2]|0)+(u*24|0)+12|0,0,18673)|0;}}else{qB(v,18670)|0;pB((c[e>>2]|0)+(u*24|0)+12|0,0,18673)|0;}qB((c[e>>2]|0)+(u*24|0)|0,18677)|0;v=c[B>>2]|0;t=(c[e>>2]|0)+(u*24|0)|0;x=v+-12|0;w=c[x>>2]|0;if((w|0)==(c[v+-8>>2]|0))sB(v+-16|0,t);else{rB(w,t);c[x>>2]=(c[x>>2]|0)+24;}u=u+1|0;}break;}case 80:{u=e+4|0;B=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;r=b+1|0;s=mB(r,d,e)|0;A=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;if((s|0)==(r|0)){P=b;break a;}u=c[e+12>>2]|0;c[g>>2]=u;y=e+20|0;x=c[y>>2]|0;if(x>>>0<(c[e+24>>2]|0)>>>0){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=u;c[y>>2]=(c[y>>2]|0)+16;}else oB(e+16|0,g);u=g+11|0;x=g+4|0;t=g+11|0;w=g+4|0;v=B;while(1){if(v>>>0>=A>>>0){P=s;break a;}zB(g,(c[e>>2]|0)+(v*24|0)+12|0,2);B=AB(18667)|0;F=a[u>>0]|0;if((B|0)==((F<<24>>24<0?c[x>>2]|0:F&255)|0))S=(BB(g,18667,B)|0)==0;else S=0;iB(g);B=c[e>>2]|0;F=B+(v*24|0)|0;if(!S){J=B+(v*24|0)+12|0;if((a[J+11>>0]|0)<0)T=c[J>>2]|0;else T=J;if((a[T>>0]|0)==40){qB(F,18675)|0;pB((c[e>>2]|0)+(v*24|0)+12|0,0,18673)|0;}}else{qB(F,18670)|0;pB((c[e>>2]|0)+(v*24|0)+12|0,0,18673)|0;}if((a[r>>0]|0)==85){zB(g,(c[e>>2]|0)+(v*24|0)|0,12);F=AB(18680)|0;J=a[t>>0]|0;if((F|0)==((J<<24>>24<0?c[w>>2]|0:J&255)|0))U=(BB(g,18680,F)|0)!=0;else U=1;iB(g);F=(c[e>>2]|0)+(v*24|0)|0;if(U){V=F;W=113;}else CB(F);}else{V=(c[e>>2]|0)+(v*24|0)|0;W=113;}if((W|0)==113){W=0;qB(V,18693)|0;}F=c[y>>2]|0;J=(c[e>>2]|0)+(v*24|0)|0;B=F+-12|0;D=c[B>>2]|0;if((D|0)==(c[F+-8>>2]|0))sB(F+-16|0,J);else{rB(D,J);c[B>>2]=(c[B>>2]|0)+24;}v=v+1|0;}break;}case 82:{v=e+4|0;y=((c[v>>2]|0)-(c[e>>2]|0)|0)/24|0;w=b+1|0;t=mB(w,d,e)|0;r=((c[v>>2]|0)-(c[e>>2]|0)|0)/24|0;if((t|0)==(w|0)){P=b;break a;}w=c[e+12>>2]|0;c[g>>2]=w;v=e+20|0;x=c[v>>2]|0;if(x>>>0<(c[e+24>>2]|0)>>>0){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=w;c[v>>2]=(c[v>>2]|0)+16;}else oB(e+16|0,g);w=g+11|0;x=g+4|0;u=y;while(1){if(u>>>0>=r>>>0){P=t;break a;}zB(g,(c[e>>2]|0)+(u*24|0)+12|0,2);y=AB(18667)|0;s=a[w>>0]|0;if((y|0)==((s<<24>>24<0?c[x>>2]|0:s&255)|0))X=(BB(g,18667,y)|0)==0;else X=0;iB(g);y=c[e>>2]|0;s=y+(u*24|0)|0;if(!X){A=y+(u*24|0)+12|0;if((a[A+11>>0]|0)<0)Y=c[A>>2]|0;else Y=A;if((a[Y>>0]|0)==40){qB(s,18675)|0;pB((c[e>>2]|0)+(u*24|0)+12|0,0,18673)|0;}}else{qB(s,18670)|0;pB((c[e>>2]|0)+(u*24|0)+12|0,0,18673)|0;}qB((c[e>>2]|0)+(u*24|0)|0,18695)|0;s=c[v>>2]|0;A=(c[e>>2]|0)+(u*24|0)|0;y=s+-12|0;B=c[y>>2]|0;if((B|0)==(c[s+-8>>2]|0))sB(s+-16|0,A);else{rB(B,A);c[y>>2]=(c[y>>2]|0)+24;}u=u+1|0;}break;}case 84:{u=e+4|0;v=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;x=DB(b,d,e)|0;w=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;if((x|0)==(b|0)){P=b;break a;}t=e+16|0;r=e+12|0;y=c[r>>2]|0;c[g>>2]=y;A=e+20|0;B=c[A>>2]|0;s=e+24|0;if(B>>>0<(c[s>>2]|0)>>>0){c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=y;c[A>>2]=(c[A>>2]|0)+16;}else oB(t,g);y=v;while(1){if(y>>>0>=w>>>0)break;B=c[A>>2]|0;J=(c[e>>2]|0)+(y*24|0)|0;D=B+-12|0;F=c[D>>2]|0;if((F|0)==(c[B+-8>>2]|0))sB(B+-16|0,J);else{rB(F,J);c[D>>2]=(c[D>>2]|0)+24;}y=y+1|0;}if(!((w|0)==(v+1|0)&(a[e+63>>0]|0)!=0)){P=x;break a;}y=EB(x,d,e)|0;if((y|0)==(x|0)){P=x;break a;}FB(g,(c[u>>2]|0)+-24|0);D=c[u>>2]|0;J=0;while(1){if((J|0)==-1)break;F=J+-1|0;QA(D+(F*24|0)|0);J=F;}c[u>>2]=D+-24;J=a[g+11>>0]|0;x=J<<24>>24<0;TA(D+-48|0,x?c[g>>2]|0:g,x?c[g+4>>2]|0:J&255)|0;J=(c[u>>2]|0)+-24|0;c[i>>2]=c[r>>2];vB(h,J,i);J=c[A>>2]|0;if(J>>>0<(c[s>>2]|0)>>>0){c[J>>2]=0;x=J+4|0;c[x>>2]=0;v=J+8|0;c[v>>2]=0;c[J+12>>2]=c[h+12>>2];c[J>>2]=c[h>>2];J=h+4|0;c[x>>2]=c[J>>2];x=h+8|0;c[v>>2]=c[x>>2];c[x>>2]=0;c[J>>2]=0;c[h>>2]=0;c[A>>2]=(c[A>>2]|0)+16;}else wB(t,h);RA(h);iB(g);P=y;break a;break;}case 85:{J=b+1|0;if((J|0)==(d|0)){P=b;break a;}x=GB(J,d,e)|0;if((x|0)==(J|0)){P=b;break a;}J=mB(x,d,e)|0;if((J|0)==(x|0)){P=b;break a;}x=e+4|0;v=c[x>>2]|0;if(((v-(c[e>>2]|0)|0)/24|0)>>>0<2){P=b;break a;}FB(g,v+-24|0);v=c[x>>2]|0;w=0;while(1){if((w|0)==-1)break;F=w+-1|0;QA(v+(F*24|0)|0);w=F;}c[x>>2]=v+-24;zB(h,v+-48|0,9);w=AB(18697)|0;y=a[h+11>>0]|0;if((w|0)==((y<<24>>24<0?c[h+4>>2]|0:y&255)|0)){y=(BB(h,18697,w)|0)==0;iB(h);if(y){FB(h,(c[x>>2]|0)+-24|0);y=c[x>>2]|0;w=0;while(1){if((w|0)==-1)break;t=w+-1|0;QA(y+(t*24|0)|0);w=t;}c[x>>2]=y+-24;w=h+11|0;v=a[w>>0]|0;t=v<<24>>24<0;A=h+4|0;s=t?c[h>>2]|0:h;r=GB(s+9|0,s+(t?c[A>>2]|0:v&255)|0,e)|0;if((r|0)==(((a[w>>0]|0)<0?c[h>>2]|0:h)+9|0)){HB(k,g,18707);r=a[w>>0]|0;w=r<<24>>24<0;TA(k,w?c[h>>2]|0:h,w?c[A>>2]|0:r&255)|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];r=0;while(1){if((r|0)==3)break;c[k+(r<<2)>>2]=0;r=r+1|0;}IB(i,p);r=c[x>>2]|0;if(r>>>0<(c[e+8>>2]|0)>>>0){KB(r,i);c[x>>2]=(c[x>>2]|0)+24;}else LB(e,i);QA(i);iB(p);iB(k);}else{HB(n,g,18709);FB(o,(c[x>>2]|0)+-24|0);r=a[o+11>>0]|0;y=r<<24>>24<0;TA(n,y?c[o>>2]|0:o,y?c[o+4>>2]|0:r&255)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];r=0;while(1){if((r|0)==3)break;c[n+(r<<2)>>2]=0;r=r+1|0;}qB(k,18711)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];r=0;while(1){if((r|0)==3)break;c[k+(r<<2)>>2]=0;r=r+1|0;}IB(i,m);JB((c[x>>2]|0)+-24|0,i);QA(i);iB(m);iB(k);iB(o);iB(n);}iB(h);}else W=167;}else{iB(h);W=167;}if((W|0)==167){HB(i,g,18707);FB(k,(c[x>>2]|0)+-24|0);r=a[k+11>>0]|0;y=r<<24>>24<0;TA(i,y?c[k>>2]|0:k,y?c[k+4>>2]|0:r&255)|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];r=0;while(1){if((r|0)==3)break;c[i+(r<<2)>>2]=0;r=r+1|0;}IB(h,j);JB((c[x>>2]|0)+-24|0,h);QA(h);iB(j);iB(k);iB(i);}r=(c[x>>2]|0)+-24|0;c[i>>2]=c[e+12>>2];vB(h,r,i);r=e+20|0;y=c[r>>2]|0;if(y>>>0<(c[e+24>>2]|0)>>>0){c[y>>2]=0;A=y+4|0;c[A>>2]=0;w=y+8|0;c[w>>2]=0;c[y+12>>2]=c[h+12>>2];c[y>>2]=c[h>>2];y=h+4|0;c[A>>2]=c[y>>2];A=h+8|0;c[w>>2]=c[A>>2];c[A>>2]=0;c[y>>2]=0;c[h>>2]=0;c[r>>2]=(c[r>>2]|0)+16;}else wB(e+16|0,h);RA(h);iB(g);P=J;break a;break;}case 83:{r=b+1|0;if((r|0)!=(d|0)?(a[r>>0]|0)==116:0){r=MB(b,d,e)|0;if((r|0)==(b|0)){P=b;break a;}y=c[e+4>>2]|0;if((c[e>>2]|0)==(y|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,y+-24|0,h);y=e+20|0;A=c[y>>2]|0;if(A>>>0<(c[e+24>>2]|0)>>>0){c[A>>2]=0;w=A+4|0;c[w>>2]=0;v=A+8|0;c[v>>2]=0;c[A+12>>2]=c[g+12>>2];c[A>>2]=c[g>>2];A=g+4|0;c[w>>2]=c[A>>2];w=g+8|0;c[v>>2]=c[w>>2];c[w>>2]=0;c[A>>2]=0;c[g>>2]=0;c[y>>2]=(c[y>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=r;break a;}r=NB(b,d,e)|0;if((r|0)==(b|0)){P=b;break a;}y=EB(r,d,e)|0;if((y|0)==(r|0)){P=r;break a;}A=e+4|0;w=c[A>>2]|0;if(((w-(c[e>>2]|0)|0)/24|0)>>>0<2){P=r;break a;}FB(g,w+-24|0);w=c[A>>2]|0;r=0;while(1){if((r|0)==-1)break;v=r+-1|0;QA(w+(v*24|0)|0);r=v;}c[A>>2]=w+-24;r=a[g+11>>0]|0;J=r<<24>>24<0;TA(w+-48|0,J?c[g>>2]|0:g,J?c[g+4>>2]|0:r&255)|0;r=(c[A>>2]|0)+-24|0;c[i>>2]=c[e+12>>2];vB(h,r,i);r=e+20|0;J=c[r>>2]|0;if(J>>>0<(c[e+24>>2]|0)>>>0){c[J>>2]=0;x=J+4|0;c[x>>2]=0;v=J+8|0;c[v>>2]=0;c[J+12>>2]=c[h+12>>2];c[J>>2]=c[h>>2];J=h+4|0;c[x>>2]=c[J>>2];x=h+8|0;c[v>>2]=c[x>>2];c[x>>2]=0;c[J>>2]=0;c[h>>2]=0;c[r>>2]=(c[r>>2]|0)+16;}else wB(e+16|0,h);RA(h);iB(g);P=y;break a;break;}case 68:{r=b+1|0;if((r|0)!=(d|0))switch(a[r>>0]|0){case 112:{r=e+4|0;J=((c[r>>2]|0)-(c[e>>2]|0)|0)/24|0;x=b+2|0;v=mB(x,d,e)|0;t=((c[r>>2]|0)-(c[e>>2]|0)|0)/24|0;if((v|0)==(x|0))break c;x=c[e+12>>2]|0;c[g>>2]=x;r=e+20|0;s=c[r>>2]|0;if(s>>>0<(c[e+24>>2]|0)>>>0){c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=x;c[r>>2]=(c[r>>2]|0)+16;}else oB(e+16|0,g);x=J;while(1){if(x>>>0>=t>>>0){P=v;break a;}J=c[r>>2]|0;s=(c[e>>2]|0)+(x*24|0)|0;u=J+-12|0;D=c[u>>2]|0;if((D|0)==(c[J+-8>>2]|0))sB(J+-16|0,s);else{rB(D,s);c[u>>2]=(c[u>>2]|0)+24;}x=x+1|0;}break;}case 84:case 116:{x=OB(b,d,e)|0;if((x|0)==(b|0))break c;r=c[e+4>>2]|0;if((c[e>>2]|0)==(r|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,r+-24|0,h);r=e+20|0;v=c[r>>2]|0;if(v>>>0<(c[e+24>>2]|0)>>>0){c[v>>2]=0;t=v+4|0;c[t>>2]=0;y=v+8|0;c[y>>2]=0;c[v+12>>2]=c[g+12>>2];c[v>>2]=c[g>>2];v=g+4|0;c[t>>2]=c[v>>2];t=g+8|0;c[y>>2]=c[t>>2];c[t>>2]=0;c[v>>2]=0;c[g>>2]=0;c[r>>2]=(c[r>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=x;break a;break;}case 118:{x=PB(b,d,e)|0;if((x|0)==(b|0))break c;r=c[e+4>>2]|0;if((c[e>>2]|0)==(r|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,r+-24|0,h);r=e+20|0;v=c[r>>2]|0;if(v>>>0<(c[e+24>>2]|0)>>>0){c[v>>2]=0;t=v+4|0;c[t>>2]=0;y=v+8|0;c[y>>2]=0;c[v+12>>2]=c[g+12>>2];c[v>>2]=c[g>>2];v=g+4|0;c[t>>2]=c[v>>2];t=g+8|0;c[y>>2]=c[t>>2];c[t>>2]=0;c[v>>2]=0;c[g>>2]=0;c[r>>2]=(c[r>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=x;break a;break;}default:break c;}break;}default:{}}}while(0);x=tB(b,d,e)|0;if((x|0)==(b|0)){r=MB(b,d,e)|0;if((r|0)!=(b|0)?(v=c[e+4>>2]|0,(c[e>>2]|0)!=(v|0)):0){c[h>>2]=c[e+12>>2];vB(g,v+-24|0,h);v=e+20|0;t=c[v>>2]|0;if(t>>>0<(c[e+24>>2]|0)>>>0){c[t>>2]=0;y=t+4|0;c[y>>2]=0;A=t+8|0;c[A>>2]=0;c[t+12>>2]=c[g+12>>2];c[t>>2]=c[g>>2];t=g+4|0;c[y>>2]=c[t>>2];y=g+8|0;c[A>>2]=c[y>>2];c[y>>2]=0;c[t>>2]=0;c[g>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=r;}else P=b;}else P=x;}else P=q;}else P=b;}while(0);l=f;return P|0;}function nB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c[e>>2]=0;if((b|0)!=(d|0)){d=a[b>>0]|0;if(d<<24>>24==114){c[e>>2]=4;f=b+1|0;g=f;h=4;i=a[f>>0]|0;}else{g=b;h=0;i=d;}if(i<<24>>24==86){d=h|2;c[e>>2]=d;f=g+1|0;j=f;k=a[f>>0]|0;l=d;}else{j=g;k=i;l=h;}if(k<<24>>24==75){c[e>>2]=l|1;m=j+1|0;}else m=j;}else m=b;return m|0;}function oB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=((c[f>>2]|0)-(c[a>>2]|0)>>4)+1|0;h=AD(a)|0;if(h>>>0<g>>>0)Wz(a);else{i=c[a>>2]|0;j=(c[a+8>>2]|0)-i|0;k=j>>3;BD(e,j>>4>>>0<h>>>1>>>0?k>>>0<g>>>0?g:k:h,(c[f>>2]|0)-i>>4,a+12|0);i=e+8|0;f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=c[b>>2];c[i>>2]=f+16;CD(a,e);DD(e);l=d;return;}}function pB(a,b,c){a=a|0;b=b|0;c=c|0;return zD(a,b,c,AB(c)|0)|0;}function qB(a,b){a=a|0;b=b|0;return TA(a,b,AB(b)|0)|0;}function rB(a,b){a=a|0;b=b|0;TC(a,b);TC(a+12|0,b+12|0);return;}function sB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=(((c[f>>2]|0)-(c[a>>2]|0)|0)/24|0)+1|0;h=XC(a)|0;if(h>>>0<g>>>0)Wz(a);else{i=c[a>>2]|0;j=((c[a+8>>2]|0)-i|0)/24|0;k=j<<1;YC(e,j>>>0<h>>>1>>>0?k>>>0<g>>>0?g:k:h,((c[f>>2]|0)-i|0)/24|0,a+12|0);i=e+8|0;f=c[i>>2]|0;rB(f,b);c[i>>2]=f+24;ZC(a,e);_C(e);l=d;return;}}function tB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f;a:do{if((b|0)==(d|0))h=b;else do{switch(a[b>>0]|0){case 118:{cD(g,20112);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 119:{HD(g);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 98:{cD(g,20117);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 99:{cD(g,19886);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 97:{JC(g,19891);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 104:{gD(g,19903);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 115:{sC(g,19917);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 116:{KC(g,19923);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 105:{ID(g,20122);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 106:{LC(g,20126);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 108:{cD(g,20139);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 109:{gD(g,20144);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 120:{GC(g,20158);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 121:{JD(g);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 110:{KD(g,19952);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 111:{HC(g,19961);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 102:{sC(g,20168);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 100:{LD(g);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 101:{JC(g,20174);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 103:{FC(g,20186);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 122:{ID(g,20197);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 117:{i=b+1|0;j=GB(i,d,e)|0;h=(j|0)==(i|0)?b:j;break a;break;}case 68:{j=b+1|0;if((j|0)==(d|0)){h=b;break a;}switch(a[j>>0]|0){case 100:{GC(g,20201);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 101:{FC(g,20211);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 102:{GC(g,20222);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 104:{GC(g,20232);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 105:{KD(g,20242);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 115:{KD(g,20251);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 97:{cD(g,20260);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 110:{KC(g,20265);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}default:{h=b;break a;}}break;}default:{h=b;break a;}}}while(0);}while(0);l=f;return h|0;}function uB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;f=l;l=l+112|0;g=f+96|0;h=f+72|0;i=f+48|0;j=f+36|0;k=f+24|0;m=f+12|0;n=f;do{if(((b|0)!=(d|0)?(a[b>>0]|0)==65:0)?(o=b+1|0,(o|0)!=(d|0)):0){p=a[o>>0]|0;if(p<<24>>24==95){q=b+2|0;r=mB(q,d,e)|0;if((r|0)==(q|0)){s=b;break;}q=e+4|0;t=c[q>>2]|0;if((c[e>>2]|0)==(t|0)){s=b;break;}zB(g,t+-12|0,2);t=AB(18667)|0;u=a[g+11>>0]|0;if((t|0)==((u<<24>>24<0?c[g+4>>2]|0:u&255)|0)){u=(BB(g,18667,t)|0)==0;iB(g);if(u)GD((c[q>>2]|0)+-12|0);}else iB(g);pB((c[q>>2]|0)+-12|0,0,20108)|0;s=r;break;}if((p+-49&255)<9){p=QB(o,d)|0;if((p|0)==(d|0)){s=b;break;}if((a[p>>0]|0)!=95){s=b;break;}r=p+1|0;q=mB(r,d,e)|0;if((q|0)==(r|0)){s=b;break;}r=e+4|0;u=c[r>>2]|0;if((c[e>>2]|0)==(u|0)){s=b;break;}zB(g,u+-12|0,2);u=AB(18667)|0;t=a[g+11>>0]|0;if((u|0)==((t<<24>>24<0?c[g+4>>2]|0:t&255)|0)){t=(BB(g,18667,u)|0)==0;iB(g);if(t)GD((c[r>>2]|0)+-12|0);}else iB(g);t=(c[r>>2]|0)+-12|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;QC(i,o,p);pB(i,0,18667)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];p=0;while(1){if((p|0)==3)break;c[i+(p<<2)>>2]=0;p=p+1|0;}qB(h,18722)|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];p=0;while(1){if((p|0)==3)break;c[h+(p<<2)>>2]=0;p=p+1|0;}p=a[g+11>>0]|0;r=p<<24>>24<0;zD(t,0,r?c[g>>2]|0:g,r?c[g+4>>2]|0:p&255)|0;iB(g);iB(h);iB(i);s=q;break;}p=SB(o,d,e)|0;if(((!((p|0)==(o|0)|(p|0)==(d|0))?(a[p>>0]|0)==95:0)?(r=p+1|0,p=mB(r,d,e)|0,(p|0)!=(r|0)):0)?(r=e+4|0,u=c[r>>2]|0,((u-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){KB(h,u+-24|0);u=c[r>>2]|0;v=0;while(1){if((v|0)==-1)break;w=v+-1|0;QA(u+(w*24|0)|0);v=w;}c[r>>2]=u+-24;KB(i,u+-48|0);v=c[r>>2]|0;o=v+-24|0;q=o+11|0;if((a[q>>0]|0)<0){t=c[o>>2]|0;a[g>>0]=0;cB(t,g);c[v+-20>>2]=0;}else{a[g>>0]=0;cB(o,g);a[q>>0]=0;}TB(o);c[o>>2]=c[h>>2];c[o+4>>2]=c[h+4>>2];c[o+8>>2]=c[h+8>>2];o=0;while(1){if((o|0)==3)break;c[h+(o<<2)>>2]=0;o=o+1|0;}o=h+12|0;zB(g,o,2);u=AB(18667)|0;q=a[g+11>>0]|0;if((u|0)==((q<<24>>24<0?c[g+4>>2]|0:q&255)|0)){q=(BB(g,18667,u)|0)==0;iB(g);if(q)GD(o);}else iB(g);FB(n,i);pB(n,0,18667)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];q=0;while(1){if((q|0)==3)break;c[n+(q<<2)>>2]=0;q=q+1|0;}qB(m,18722)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];q=0;while(1){if((q|0)==3)break;c[m+(q<<2)>>2]=0;q=q+1|0;}q=a[o+11>>0]|0;u=q<<24>>24<0;TA(k,u?c[o>>2]|0:o,u?c[h+16>>2]|0:q&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];q=0;while(1){if((q|0)==3)break;c[k+(q<<2)>>2]=0;q=q+1|0;}q=c[r>>2]|0;o=q+-12|0;u=o+11|0;if((a[u>>0]|0)<0){v=c[o>>2]|0;a[g>>0]=0;cB(v,g);c[q+-8>>2]=0;}else{a[g>>0]=0;cB(o,g);a[u>>0]=0;}TB(o);c[o>>2]=c[j>>2];c[o+4>>2]=c[j+4>>2];c[o+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}iB(j);iB(k);iB(m);iB(n);QA(i);QA(h);s=p;}else s=b;}else s=b;}while(0);l=f;return s|0;}function vB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[a>>2]=0;e=a+4|0;c[e>>2]=0;c[a+8>>2]=0;c[a+12>>2]=c[d>>2];FD(a);rB(c[e>>2]|0,b);c[e>>2]=(c[e>>2]|0)+24;return;}function wB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=((c[f>>2]|0)-(c[a>>2]|0)>>4)+1|0;h=AD(a)|0;if(h>>>0<g>>>0)Wz(a);else{i=c[a>>2]|0;j=(c[a+8>>2]|0)-i|0;k=j>>3;BD(e,j>>4>>>0<h>>>1>>>0?k>>>0<g>>>0?g:k:h,(c[f>>2]|0)-i>>4,a+12|0);i=e+8|0;f=c[i>>2]|0;c[f>>2]=0;h=f+4|0;c[h>>2]=0;k=f+8|0;c[k>>2]=0;c[f+12>>2]=c[b+12>>2];c[f>>2]=c[b>>2];g=b+4|0;c[h>>2]=c[g>>2];h=b+8|0;c[k>>2]=c[h>>2];c[h>>2]=0;c[g>>2]=0;c[b>>2]=0;c[i>>2]=f+16;CD(a,e);DD(e);l=d;return;}}function xB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;f=l;l=l+32|0;g=f+12|0;h=f;do{if(((b|0)!=(d|0)?(a[b>>0]|0)==70:0)?(i=b+1|0,(i|0)!=(d|0)):0){if((a[i>>0]|0)==89){j=b+2|0;if((j|0)==(d|0)){k=b;break;}else m=j;}else m=i;i=mB(m,d,e)|0;if((i|0)!=(m|0)){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18675,AB(18675)|0);j=e+4|0;n=g+11|0;o=g+4|0;p=h+11|0;q=h+4|0;r=0;s=i;a:while(1){t=s;b:while(1){if((t|0)==(d|0)){u=11;break a;}switch(a[t>>0]|0){case 69:{u=16;break a;break;}case 118:{v=t+1|0;break;}case 82:{i=t+1|0;if((i|0)!=(d|0)?(a[i>>0]|0)==69:0){w=1;x=i;break b;}else u=23;break;}case 79:{i=t+1|0;if((i|0)!=(d|0)?(a[i>>0]|0)==69:0){w=2;x=i;break b;}else u=23;break;}default:u=23;}c:do{if((u|0)==23){u=0;i=((c[j>>2]|0)-(c[e>>2]|0)|0)/24|0;y=mB(t,d,e)|0;z=((c[j>>2]|0)-(c[e>>2]|0)|0)/24|0;if((y|0)==(t|0)|(y|0)==(d|0))break a;A=i;while(1){if(A>>>0>=z>>>0)break;B=a[n>>0]|0;if((B<<24>>24<0?c[o>>2]|0:B&255)>>>0>1)qB(g,18897)|0;FB(h,(c[e>>2]|0)+(A*24|0)|0);B=a[p>>0]|0;C=B<<24>>24<0;TA(g,C?c[h>>2]|0:h,C?c[q>>2]|0:B&255)|0;iB(h);A=A+1|0;}A=i;while(1){if(A>>>0>=z>>>0){v=y;break c;}B=c[j>>2]|0;C=0;while(1){if((C|0)==-1)break;D=C+-1|0;QA(B+(D*24|0)|0);C=D;}c[j>>2]=B+-24;A=A+1|0;}}}while(0);t=v;}r=w;s=x;}if((u|0)==11){s=c[j>>2]|0;q=0;while(1){if((q|0)==-1)break;p=q+-1|0;QA(s+(p*24|0)|0);q=p;}c[j>>2]=s+-24;}else if((u|0)==16){q=t+1|0;qB(g,18673)|0;switch(r&3){case 1:{qB(g,20101)|0;break;}case 2:{qB(g,20104)|0;break;}default:{}}p=c[j>>2]|0;if((c[e>>2]|0)!=(p|0)){qB(p+-24|0,18707)|0;p=a[n>>0]|0;A=p<<24>>24<0;zD((c[j>>2]|0)+-12|0,0,A?c[g>>2]|0:g,A?c[o>>2]|0:p&255)|0;iB(g);k=q;break;}}iB(g);k=b;}else k=b;}else k=b;}while(0);l=f;return k|0;}function yB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+112|0;g=f+96|0;h=f+72|0;i=f+48|0;j=f+36|0;k=f+24|0;m=f+12|0;n=f;if(((((b|0)!=(d|0)?(a[b>>0]|0)==77:0)?(o=b+1|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=mB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){KB(h,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;KB(i,d+-48|0);d=h+12|0;a:do{if((a[((a[d+11>>0]|0)<0?c[d>>2]|0:d)>>0]|0)==40){qB(h,18675)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];e=0;while(1){if((e|0)==3)break;c[h+(e<<2)>>2]=0;e=e+1|0;}FB(n,i);e=a[n+11>>0]|0;q=e<<24>>24<0;TA(m,q?c[n>>2]|0:n,q?c[n+4>>2]|0:e&255)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];e=0;while(1){if((e|0)==3)break;c[m+(e<<2)>>2]=0;e=e+1|0;}qB(k,20097)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];e=0;while(1){if((e|0)==3)break;c[k+(e<<2)>>2]=0;e=e+1|0;}e=c[p>>2]|0;q=e+-24|0;r=q+11|0;if((a[r>>0]|0)<0){s=c[q>>2]|0;a[g>>0]=0;cB(s,g);c[e+-20>>2]=0;}else{a[g>>0]=0;cB(q,g);a[r>>0]=0;}TB(q);c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];q=0;while(1){if((q|0)==3)break;c[j+(q<<2)>>2]=0;q=q+1|0;}iB(j);iB(k);iB(n);iB(m);pB(d,0,18673)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];q=0;while(1){if((q|0)==3)break;c[d+(q<<2)>>2]=0;q=q+1|0;}q=c[p>>2]|0;r=q+-12|0;e=r+11|0;if((a[e>>0]|0)<0){s=c[r>>2]|0;a[g>>0]=0;cB(s,g);c[q+-8>>2]=0;}else{a[g>>0]=0;cB(r,g);a[e>>0]=0;}TB(r);c[r>>2]=c[j>>2];c[r+4>>2]=c[j+4>>2];c[r+8>>2]=c[j+8>>2];r=0;while(1){if((r|0)==3)break;c[j+(r<<2)>>2]=0;r=r+1|0;}iB(j);}else{qB(h,18707)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];r=0;while(1){if((r|0)==3)break;c[h+(r<<2)>>2]=0;r=r+1|0;}FB(n,i);r=a[n+11>>0]|0;e=r<<24>>24<0;TA(m,e?c[n>>2]|0:n,e?c[n+4>>2]|0:r&255)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];r=0;while(1){if((r|0)==3)break;c[m+(r<<2)>>2]=0;r=r+1|0;}qB(k,20097)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];r=0;while(1){if((r|0)==3)break;c[k+(r<<2)>>2]=0;r=r+1|0;}r=c[p>>2]|0;e=r+-24|0;q=e+11|0;if((a[q>>0]|0)<0){s=c[e>>2]|0;a[g>>0]=0;cB(s,g);c[r+-20>>2]=0;}else{a[g>>0]=0;cB(e,g);a[q>>0]=0;}TB(e);c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];e=0;while(1){if((e|0)==3)break;c[j+(e<<2)>>2]=0;e=e+1|0;}iB(j);iB(k);iB(n);iB(m);e=c[p>>2]|0;q=e+-12|0;r=q+11|0;if((a[r>>0]|0)<0){s=c[q>>2]|0;a[g>>0]=0;cB(s,g);c[e+-8>>2]=0;}else{a[g>>0]=0;cB(q,g);a[r>>0]=0;}TB(q);c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];q=0;while(1){if((q|0)==3)break a;c[d+(q<<2)>>2]=0;q=q+1|0;}}}while(0);QA(i);QA(h);t=o;}else t=b;l=f;return t|0;}function zB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=a[d+11>>0]|0;g=f<<24>>24<0;h=g?c[d+4>>2]|0:f&255;RB(b,g?c[d>>2]|0:d,h>>>0<e>>>0?h:e);return;}function AB(a){a=a|0;return Ty(a)|0;}function BB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=a[b+11>>0]|0;g=f<<24>>24<0;if(g)h=c[b+4>>2]|0;else h=f&255;if((e|0)==-1)xD(b);if(g)i=c[b>>2]|0;else i=b;b=h>>>0>e>>>0;g=yD(i,d,b?e:h)|0;if(!g)return(h>>>0<e>>>0?-1:b&1)|0;else return g|0;return 0;}function CB(a){a=a|0;wD(a,AB(20094)|0);return;}function DB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+48|0;g=f+16|0;h=f;a:do{if((d-b|0)>1?(a[b>>0]|0)==84:0){i=a[b+1>>0]|0;if(i<<24>>24==95){j=c[e+36>>2]|0;if((c[e+32>>2]|0)==(j|0)){k=b;break;}m=c[j+-16>>2]|0;if((m|0)==(c[j+-12>>2]|0)){vD(g);j=e+4|0;n=c[j>>2]|0;if(n>>>0<(c[e+8>>2]|0)>>>0){KB(n,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);a[e+62>>0]=1;k=b+2|0;break;}j=c[m+4>>2]|0;n=e+4|0;o=e+8|0;p=c[m>>2]|0;while(1){if((p|0)==(j|0))break;m=c[n>>2]|0;if((m|0)==(c[o>>2]|0))sB(e,p);else{rB(m,p);c[n>>2]=(c[n>>2]|0)+24;}p=p+24|0;}k=b+2|0;break;}p=(i<<24>>24)+-48|0;if(p>>>0<10){n=p;p=b+2|0;while(1){if((p|0)==(d|0)){k=b;break a;}q=a[p>>0]|0;o=(q<<24>>24)+-48|0;if(o>>>0>=10)break;n=o+(n*10|0)|0;p=p+1|0;}if(q<<24>>24==95?(i=c[e+36>>2]|0,(c[e+32>>2]|0)!=(i|0)):0){o=n+1|0;j=c[i+-16>>2]|0;m=j;if(o>>>0>=(c[i+-12>>2]|0)-j>>4>>>0){j=p+1|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;QC(h,b,j);IB(g,h);i=e+4|0;r=c[i>>2]|0;if(r>>>0<(c[e+8>>2]|0)>>>0){KB(r,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);iB(h);a[e+62>>0]=1;k=j;break;}j=c[m+(o<<4)+4>>2]|0;i=e+4|0;r=e+8|0;s=c[m+(o<<4)>>2]|0;while(1){if((s|0)==(j|0))break;o=c[i>>2]|0;if((o|0)==(c[r>>2]|0))sB(e,s);else{rB(o,s);c[i>>2]=(c[i>>2]|0)+24;}s=s+24|0;}k=p+1|0;}else k=b;}else k=b;}else k=b;}while(0);l=f;return k|0;}function EB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=l;l=l+64|0;g=f+32|0;h=f+16|0;i=f+12|0;j=f;do{if((d-b|0)>1?(a[b>>0]|0)==73:0){k=e+61|0;m=e+36|0;if(a[k>>0]|0){n=c[m>>2]|0;o=c[n+-16>>2]|0;p=n+-12|0;n=c[p>>2]|0;while(1){if((n|0)==(o|0))break;q=n+-16|0;RA(q);n=q;}c[p>>2]=o;}c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;RB(h,18709,AB(18709)|0);n=e+4|0;q=e+12|0;r=e+40|0;s=e+32|0;t=h+11|0;u=h+4|0;v=g+11|0;w=g+4|0;x=b+1|0;while(1){if((a[x>>0]|0)==69)break;if(a[k>>0]|0){c[i>>2]=c[q>>2];y=c[m>>2]|0;if(y>>>0<(c[r>>2]|0)>>>0){nD(g,i);c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[y+12>>2]=c[g>>2];c[m>>2]=(c[m>>2]|0)+16;}else oD(s,i);}y=((c[n>>2]|0)-(c[e>>2]|0)|0)/24|0;z=pD(x,d,e)|0;A=((c[n>>2]|0)-(c[e>>2]|0)|0)/24|0;if(a[k>>0]|0){B=c[m>>2]|0;C=0;while(1){if((C|0)==-1)break;D=C+-1|0;XA(B+(D<<4)|0);C=D;}c[m>>2]=B+-16;}if((z|0)==(x|0)|(z|0)==(d|0)){E=53;break;}a:do{if(a[k>>0]|0){C=c[m>>2]|0;D=c[q>>2]|0;c[g>>2]=D;F=C+-12|0;G=c[F>>2]|0;if(G>>>0<(c[C+-8>>2]|0)>>>0){c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=D;c[F>>2]=(c[F>>2]|0)+16;}else oB(C+-16|0,g);C=y;while(1){if(C>>>0>=A>>>0)break a;F=c[(c[m>>2]|0)+-12>>2]|0;D=(c[e>>2]|0)+(C*24|0)|0;G=F+-12|0;H=c[G>>2]|0;if((H|0)==(c[F+-8>>2]|0))sB(F+-16|0,D);else{rB(H,D);c[G>>2]=(c[G>>2]|0)+24;}C=C+1|0;}}}while(0);B=y;while(1){if(B>>>0>=A>>>0)break;C=a[t>>0]|0;if((C<<24>>24<0?c[u>>2]|0:C&255)>>>0>1)qB(h,18897)|0;FB(g,(c[e>>2]|0)+(B*24|0)|0);C=a[v>>0]|0;G=C<<24>>24<0;TA(h,G?c[g>>2]|0:g,G?c[w>>2]|0:C&255)|0;iB(g);B=B+1|0;}B=A;while(1){if((B|0)==(y|0))break;C=c[n>>2]|0;G=0;while(1){if((G|0)==-1)break;D=G+-1|0;QA(C+(D*24|0)|0);G=D;}c[n>>2]=C+-24;B=B+-1|0;}x=z;}if((E|0)==53){iB(h);I=b;break;}w=x+1|0;v=a[t>>0]|0;m=v<<24>>24<0;if((a[(m?c[h>>2]|0:h)+(m?c[u>>2]|0:v&255)+-1>>0]|0)==62)qB(h,20088)|0;else qB(h,18711)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];v=0;while(1){if((v|0)==3)break;c[h+(v<<2)>>2]=0;v=v+1|0;}IB(g,j);v=c[n>>2]|0;if(v>>>0<(c[e+8>>2]|0)>>>0){KB(v,g);c[n>>2]=(c[n>>2]|0)+24;}else LB(e,g);QA(g);iB(j);iB(h);I=w;}else I=b;}while(0);l=f;return I|0;}function FB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=d+12|0;f=a[e+11>>0]|0;g=f<<24>>24<0;TA(d,g?c[e>>2]|0:e,g?c[d+16>>2]|0:f&255)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];b=0;while(1){if((b|0)==3)break;c[d+(b<<2)>>2]=0;b=b+1|0;}return;}function GB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+64|0;g=f+40|0;h=f+16|0;i=f;a:do{if(((b|0)!=(d|0)?(j=(a[b>>0]|0)+-48|0,j>>>0<10):0)?(k=b+1|0,(k|0)!=(d|0)):0){m=j;j=k;while(1){k=(a[j>>0]|0)+-48|0;if(k>>>0>=10)break;n=j+1|0;if((n|0)==(d|0)){o=b;break a;}m=k+(m*10|0)|0;j=n;}if((d-j|0)>>>0>=m>>>0){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,j,m);zB(h,g,10);n=AB(20055)|0;k=a[h+11>>0]|0;if((n|0)==((k<<24>>24<0?c[h+4>>2]|0:k&255)|0))p=(BB(h,20055,n)|0)==0;else p=0;iB(h);if(p){mD(h);n=e+4|0;k=c[n>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,h);c[n>>2]=(c[n>>2]|0)+24;}else LB(e,h);QA(h);}else{c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];n=0;while(1){if((n|0)==3)break;c[g+(n<<2)>>2]=0;n=n+1|0;}IB(h,i);n=e+4|0;k=c[n>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,h);c[n>>2]=(c[n>>2]|0)+24;}else LB(e,h);QA(h);iB(i);}iB(g);o=j+m|0;}else o=b;}else o=b;}while(0);l=f;return o|0;}function HB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=0;while(1){if((f|0)==3)break;c[b+(f<<2)>>2]=0;f=f+1|0;}f=d+11|0;g=a[f>>0]|0;h=g<<24>>24<0?c[d+4>>2]|0:g&255;g=AB(e)|0;VB(b,(a[f>>0]|0)<0?c[d>>2]|0:d,h,h+g|0);TA(b,e,g)|0;return;}function IB(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0;}d=a+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[d+(a<<2)>>2]=0;a=a+1|0;}return;}function JB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=b+11|0;if((a[g>>0]|0)<0){h=c[b>>2]|0;a[f>>0]=0;cB(h,f);c[b+4>>2]=0;}else{a[f>>0]=0;cB(b,f);a[g>>0]=0;}TB(b);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];g=0;while(1){if((g|0)==3)break;c[d+(g<<2)>>2]=0;g=g+1|0;}g=b+12|0;h=d+12|0;d=g+11|0;if((a[d>>0]|0)<0){i=c[g>>2]|0;a[f>>0]=0;cB(i,f);c[b+16>>2]=0;}else{a[f>>0]=0;cB(g,f);a[d>>0]=0;}TB(g);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];g=0;while(1){if((g|0)==3)break;c[h+(g<<2)>>2]=0;g=g+1|0;}l=e;return;}function KB(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0;}d=a+12|0;a=b+12|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];d=0;while(1){if((d|0)==3)break;c[a+(d<<2)>>2]=0;d=d+1|0;}return;}function LB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=(((c[f>>2]|0)-(c[a>>2]|0)|0)/24|0)+1|0;h=XC(a)|0;if(h>>>0<g>>>0)Wz(a);else{i=c[a>>2]|0;j=((c[a+8>>2]|0)-i|0)/24|0;k=j<<1;YC(e,j>>>0<h>>>1>>>0?k>>>0<g>>>0?g:k:h,((c[f>>2]|0)-i|0)/24|0,a+12|0);i=e+8|0;f=c[i>>2]|0;KB(f,b);c[i>>2]=f+24;ZC(a,e);_C(e);l=d;return;}}function MB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+32|0;g=f+8|0;h=f;a:do{if((d-b|0)>1){i=(a[b>>0]|0)==76?b+1|0:b;switch(a[i>>0]|0){case 78:{j=hD(i,d,e)|0;k=(j|0)==(i|0)?b:j;break a;break;}case 90:{j=iD(i,d,e)|0;k=(j|0)==(i|0)?b:j;break a;break;}default:{j=jD(i,d,e)|0;if((j|0)==(i|0)){m=NB(i,d,e)|0;if((m|0)==(i|0)|(m|0)==(d|0)){k=b;break a;}if((a[m>>0]|0)!=73){k=b;break a;}i=EB(m,d,e)|0;if((i|0)==(m|0)){k=b;break a;}m=e+4|0;n=c[m>>2]|0;if(((n-(c[e>>2]|0)|0)/24|0)>>>0<2){k=b;break a;}FB(g,n+-24|0);n=c[m>>2]|0;o=0;while(1){if((o|0)==-1)break;p=o+-1|0;QA(n+(p*24|0)|0);o=p;}c[m>>2]=n+-24;o=a[g+11>>0]|0;p=o<<24>>24<0;TA(n+-48|0,p?c[g>>2]|0:g,p?c[g+4>>2]|0:o&255)|0;iB(g);k=i;break a;}if((j|0)==(d|0)){k=d;break a;}if((a[j>>0]|0)!=73){k=j;break a;}o=e+4|0;p=c[o>>2]|0;if((c[e>>2]|0)==(p|0)){k=b;break a;}c[h>>2]=c[e+12>>2];vB(g,p+-24|0,h);p=e+20|0;q=c[p>>2]|0;if(q>>>0<(c[e+24>>2]|0)>>>0){c[q>>2]=0;r=q+4|0;c[r>>2]=0;s=q+8|0;c[s>>2]=0;c[q+12>>2]=c[g+12>>2];c[q>>2]=c[g>>2];q=g+4|0;c[r>>2]=c[q>>2];r=g+8|0;c[s>>2]=c[r>>2];c[r>>2]=0;c[q>>2]=0;c[g>>2]=0;c[p>>2]=(c[p>>2]|0)+16;}else wB(e+16|0,g);RA(g);p=EB(j,d,e)|0;if((p|0)==(j|0)){k=b;break a;}q=c[o>>2]|0;if(((q-(c[e>>2]|0)|0)/24|0)>>>0<2){k=b;break a;}FB(g,q+-24|0);q=c[o>>2]|0;r=0;while(1){if((r|0)==-1)break;s=r+-1|0;QA(q+(s*24|0)|0);r=s;}c[o>>2]=q+-24;r=a[g+11>>0]|0;j=r<<24>>24<0;TA(q+-48|0,j?c[g>>2]|0:g,j?c[g+4>>2]|0:r&255)|0;iB(g);k=p;break a;}}}else k=b;}while(0);l=f;return k|0;}function NB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+32|0;g=f;a:do{if((d-b|0)>1?(a[b>>0]|0)==83:0){h=a[b+1>>0]|0;switch(h|0){case 97:{KC(g,20001);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 98:{HC(g,20016);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 115:{JC(g,19495);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 105:{LC(g,19591);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 111:{LC(g,19668);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 100:{gD(g,19745);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 95:{i=c[e+16>>2]|0;if((i|0)==(c[e+20>>2]|0)){k=b;break a;}j=c[i+4>>2]|0;m=e+4|0;n=e+8|0;o=c[i>>2]|0;while(1){if((o|0)==(j|0))break;i=c[m>>2]|0;if((i|0)==(c[n>>2]|0))sB(e,o);else{rB(i,o);c[m>>2]=(c[m>>2]|0)+24;}o=o+24|0;}k=b+2|0;break a;break;}default:{o=h+-48|0;m=o>>>0<10;if(!m?(Pz(h)|0)==0:0){k=b;break a;}n=b+2|0;j=m?o:h+-55|0;while(1){if((n|0)==(d|0)){k=b;break a;}p=a[n>>0]|0;o=p<<24>>24;m=o+-48|0;i=m>>>0<10;if(!i?(Pz(o)|0)==0:0)break;n=n+1|0;j=(i?m:o+-55|0)+(j*36|0)|0;}if(p<<24>>24!=95){k=b;break a;}h=j+1|0;o=c[e+16>>2]|0;m=o;if(h>>>0>=(c[e+20>>2]|0)-o>>4>>>0){k=b;break a;}o=c[m+(h<<4)+4>>2]|0;i=e+4|0;q=e+8|0;r=c[m+(h<<4)>>2]|0;while(1){if((r|0)==(o|0))break;h=c[i>>2]|0;if((h|0)==(c[q>>2]|0))sB(e,r);else{rB(h,r);c[i>>2]=(c[i>>2]|0)+24;}r=r+24|0;}k=n+1|0;break a;}}}else k=b;}while(0);l=f;return k|0;}function OB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;a:do{if((d-b|0)>3?(a[b>>0]|0)==68:0){switch(a[b+1>>0]|0){case 84:case 116:break;default:{k=b;break a;}}m=b+2|0;n=SB(m,d,e)|0;if((!((n|0)==(m|0)|(n|0)==(d|0))?(a[n>>0]|0)==69:0)?(m=e+4|0,o=c[m>>2]|0,(c[e>>2]|0)!=(o|0)):0){FB(j,o+-24|0);pB(j,0,19991)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];o=0;while(1){if((o|0)==3)break;c[i+(o<<2)>>2]=0;o=o+1|0;}IB(g,h);JB((c[m>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);k=n+1|0;}else k=b;}else k=b;}while(0);l=f;return k|0;}function PB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f;j=f+24|0;a:do{if(((d-b|0)>3?(a[b>>0]|0)==68:0)?(a[b+1>>0]|0)==118:0){k=b+2|0;m=a[k>>0]|0;if((m+-49&255)<9){n=QB(k,d)|0;if((n|0)==(d|0)){o=b;break;}if((a[n>>0]|0)!=95){o=b;break;}p=n-k|0;q=n+1|0;if((q|0)==(d|0)){o=b;break;}if((a[q>>0]|0)!=112){r=mB(q,d,e)|0;if((r|0)==(q|0)){o=b;break;}q=e+4|0;if((c[e>>2]|0)==(c[q>>2]|0)){o=b;break;};c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;RB(i,k,p);pB(i,0,18713)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];s=0;while(1){if((s|0)==3)break;c[i+(s<<2)>>2]=0;s=s+1|0;}qB(h,18722)|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];s=0;while(1){if((s|0)==3)break;c[h+(s<<2)>>2]=0;s=s+1|0;}s=a[g+11>>0]|0;t=s<<24>>24<0;TA((c[q>>2]|0)+-24|0,t?c[g>>2]|0:g,t?c[g+4>>2]|0:s&255)|0;iB(g);iB(h);iB(i);o=r;break;}s=n+2|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;RB(i,k,p);pB(i,0,18724)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];t=0;while(1){if((t|0)==3)break;c[i+(t<<2)>>2]=0;t=t+1|0;}qB(h,18722)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];t=0;while(1){if((t|0)==3)break;c[h+(t<<2)>>2]=0;t=t+1|0;}IB(g,j);t=e+4|0;p=c[t>>2]|0;if(p>>>0<(c[e+8>>2]|0)>>>0){KB(p,g);c[t>>2]=(c[t>>2]|0)+24;}else LB(e,g);QA(g);iB(j);iB(h);iB(i);o=s;break;};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;t=0;while(1){if((t|0)==3)break;c[h+(t<<2)>>2]=0;t=t+1|0;}if(m<<24>>24!=95?(t=SB(k,d,e)|0,(t|0)!=(k|0)):0){s=e+4|0;p=c[s>>2]|0;if((c[e>>2]|0)!=(p|0)){FB(i,p+-24|0);p=h+11|0;if((a[p>>0]|0)<0){n=c[h>>2]|0;a[g>>0]=0;cB(n,g);c[h+4>>2]=0;}else{a[g>>0]=0;cB(h,g);a[p>>0]=0;}TB(h);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];p=0;while(1){if((p|0)==3)break;c[i+(p<<2)>>2]=0;p=p+1|0;}iB(i);p=c[s>>2]|0;m=0;while(1){if((m|0)==-1)break;n=m+-1|0;QA(p+(n*24|0)|0);m=n;}c[s>>2]=p+-24;u=t;v=44;}}else{u=k;v=44;}do{if((v|0)==44){if((((u|0)!=(d|0)?(a[u>>0]|0)==95:0)?(m=u+1|0,(m|0)!=(d|0)):0)?(n=mB(m,d,e)|0,(n|0)!=(m|0)):0){m=e+4|0;if((c[e>>2]|0)==(c[m>>2]|0))break;UB(i,18713,h);qB(i,18722)|0;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];r=0;while(1){if((r|0)==3)break;c[i+(r<<2)>>2]=0;r=r+1|0;}r=a[g+11>>0]|0;q=r<<24>>24<0;TA((c[m>>2]|0)+-24|0,q?c[g>>2]|0:g,q?c[g+4>>2]|0:r&255)|0;iB(g);iB(i);w=n;}else w=b;iB(h);o=w;break a;}}while(0);iB(h);o=b;}else o=b;}while(0);l=f;return o|0;}function QB(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a:do{if((b|0)!=(c|0)?(d=(a[b>>0]|0)==110?b+1|0:b,(d|0)!=(c|0)):0){e=a[d>>0]|0;if(e<<24>>24==48){f=d+1|0;break;}if((e+-49&255)<9){e=d;while(1){d=e+1|0;if((d|0)==(c|0)){f=c;break a;}if(((a[d>>0]|0)+-48|0)>>>0<10)e=d;else{f=d;break;}}}else f=b;}else f=b;}while(0);return f|0;}function RB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f;if(e>>>0>4294967279)eB(b);if(e>>>0<11){a[b+11>>0]=e;h=b;}else{i=e+16&-16;j=fB(i)|0;c[b>>2]=j;c[b+8>>2]=i|-2147483648;c[b+4>>2]=e;h=j;}bB(h,d,e)|0;a[g>>0]=0;cB(h+e|0,g);l=f;return;}function SB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=l;l=l+208|0;g=f+176|0;h=f+112|0;i=f+88|0;j=f+64|0;k=f+48|0;m=f+160|0;n=f+36|0;o=f+148|0;p=f+136|0;q=f+124|0;r=f+24|0;s=f+12|0;t=f;u=d;v=u-b|0;a:do{if((v|0)>1){if((v|0)>3?(a[b>>0]|0)==103:0){w=(a[b+1>>0]|0)==115;x=w?b+2|0:b;y=w;}else{x=b;y=0;}do{switch(a[x>>0]|0){case 76:{z=WB(b,d,e)|0;break a;break;}case 84:{z=DB(b,d,e)|0;break a;break;}case 102:{z=XB(b,d,e)|0;break a;break;}case 97:{switch(a[x+1>>0]|0){case 97:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18677,AB(18677)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 100:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18695,AB(18695)|0);w=ZB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 110:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18695,AB(18695)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 78:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18738,AB(18738)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 83:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18741,AB(18741)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 116:{z=_B(b,d,e)|0;break a;break;}case 122:{z=$B(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}case 99:{switch(a[x+1>>0]|0){case 99:{z=aC(b,d,e)|0;break a;break;}case 108:{z=bC(b,d,e)|0;break a;break;}case 109:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18743,AB(18743)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 111:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18745,AB(18745)|0);A=ZB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 118:{z=cC(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}case 100:{switch(a[x+1>>0]|0){case 97:{A=x+2|0;w=SB(A,d,e)|0;if((w|0)==(A|0)){z=b;break a;}A=e+4|0;if((c[e>>2]|0)==(c[A>>2]|0)){z=b;break a;};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;b:do{if(y)RB(j,18747,AB(18747)|0);else{B=0;while(1){if((B|0)==3)break b;c[j+(B<<2)>>2]=0;B=B+1|0;}}}while(0);qB(j,18750)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];B=0;while(1){if((B|0)==3)break;c[j+(B<<2)>>2]=0;B=B+1|0;}FB(k,(c[A>>2]|0)+-24|0);B=a[k+11>>0]|0;C=B<<24>>24<0;TA(i,C?c[k>>2]|0:k,C?c[k+4>>2]|0:B&255)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];B=0;while(1){if((B|0)==3)break;c[i+(B<<2)>>2]=0;B=B+1|0;}B=c[A>>2]|0;C=B+-24|0;D=C+11|0;if((a[D>>0]|0)<0){E=c[C>>2]|0;a[g>>0]=0;cB(E,g);c[B+-20>>2]=0;}else{a[g>>0]=0;cB(C,g);a[D>>0]=0;}TB(C);c[C>>2]=c[h>>2];c[C+4>>2]=c[h+4>>2];c[C+8>>2]=c[h+8>>2];C=0;while(1){if((C|0)==3)break;c[h+(C<<2)>>2]=0;C=C+1|0;}iB(h);iB(k);iB(i);iB(j);z=w;break a;break;}case 99:{z=dC(b,d,e)|0;break a;break;}case 101:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18693,AB(18693)|0);A=ZB(C,d,g,e)|0;iB(g);z=(A|0)==(C|0)?b:A;break a;break;}case 108:{A=x+2|0;C=SB(A,d,e)|0;if((C|0)==(A|0)){z=b;break a;}A=e+4|0;if((c[e>>2]|0)==(c[A>>2]|0)){z=b;break a;};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c:do{if(y)RB(j,18747,AB(18747)|0);else{D=0;while(1){if((D|0)==3)break c;c[j+(D<<2)>>2]=0;D=D+1|0;}}}while(0);qB(j,18760)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];w=0;while(1){if((w|0)==3)break;c[j+(w<<2)>>2]=0;w=w+1|0;}FB(k,(c[A>>2]|0)+-24|0);w=a[k+11>>0]|0;D=w<<24>>24<0;TA(i,D?c[k>>2]|0:k,D?c[k+4>>2]|0:w&255)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];w=0;while(1){if((w|0)==3)break;c[i+(w<<2)>>2]=0;w=w+1|0;}w=c[A>>2]|0;D=w+-24|0;B=D+11|0;if((a[B>>0]|0)<0){E=c[D>>2]|0;a[g>>0]=0;cB(E,g);c[w+-20>>2]=0;}else{a[g>>0]=0;cB(D,g);a[B>>0]=0;}TB(D);c[D>>2]=c[h>>2];c[D+4>>2]=c[h+4>>2];c[D+8>>2]=c[h+8>>2];D=0;while(1){if((D|0)==3)break;c[h+(D<<2)>>2]=0;D=D+1|0;}iB(h);iB(k);iB(i);iB(j);z=C;break a;break;}case 110:{z=eC(b,d,e)|0;break a;break;}case 115:{z=fC(b,d,e)|0;break a;break;}case 116:{z=gC(b,d,e)|0;break a;break;}case 118:{D=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18768,AB(18768)|0);A=YB(D,d,g,e)|0;iB(g);z=(A|0)==(D|0)?b:A;break a;break;}case 86:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18770,AB(18770)|0);D=YB(A,d,g,e)|0;iB(g);z=(D|0)==(A|0)?b:D;break a;break;}default:{z=b;break a;}}break;}case 101:{switch(a[x+1>>0]|0){case 111:{D=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18773,AB(18773)|0);A=YB(D,d,g,e)|0;iB(g);z=(A|0)==(D|0)?b:A;break a;break;}case 79:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18775,AB(18775)|0);D=YB(A,d,g,e)|0;iB(g);z=(D|0)==(A|0)?b:D;break a;break;}case 113:{D=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18778,AB(18778)|0);A=YB(D,d,g,e)|0;iB(g);z=(A|0)==(D|0)?b:A;break a;break;}default:{z=b;break a;}}break;}case 103:{switch(a[x+1>>0]|0){case 101:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18781,AB(18781)|0);D=YB(A,d,g,e)|0;iB(g);z=(D|0)==(A|0)?b:D;break a;break;}case 116:{D=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18711,AB(18711)|0);A=YB(D,d,g,e)|0;iB(g);z=(A|0)==(D|0)?b:A;break a;break;}default:{z=b;break a;}}break;}case 105:{if((a[x+1>>0]|0)!=120){z=b;break a;}A=b+2|0;D=SB(A,d,e)|0;if((D|0)==(A|0)){z=b;break a;}A=SB(D,d,e)|0;B=e+4|0;if((A|0)==(D|0)){D=c[B>>2]|0;w=0;while(1){if((w|0)==-1)break;E=w+-1|0;QA(D+(E*24|0)|0);w=E;}c[B>>2]=D+-24;z=b;break a;}w=c[B>>2]|0;if(((w-(c[e>>2]|0)|0)/24|0)>>>0<2){z=b;break a;}FB(g,w+-24|0);w=c[B>>2]|0;C=0;while(1){if((C|0)==-1)break;E=C+-1|0;QA(w+(E*24|0)|0);C=E;}c[B>>2]=w+-24;FB(h,w+-48|0);UB(n,18675,h);qB(n,18784)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];C=0;while(1){if((C|0)==3)break;c[n+(C<<2)>>2]=0;C=C+1|0;}C=a[g+11>>0]|0;w=C<<24>>24<0;TA(k,w?c[g>>2]|0:g,w?c[g+4>>2]|0:C&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];C=0;while(1){if((C|0)==3)break;c[k+(C<<2)>>2]=0;C=C+1|0;}qB(j,18722)|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];C=0;while(1){if((C|0)==3)break;c[j+(C<<2)>>2]=0;C=C+1|0;}IB(i,m);JB((c[B>>2]|0)+-24|0,i);QA(i);iB(m);iB(j);iB(k);iB(n);iB(h);iB(g);z=A;break a;break;}case 108:{switch(a[x+1>>0]|0){case 101:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18787,AB(18787)|0);w=YB(C,d,g,e)|0;iB(g);z=(w|0)==(C|0)?b:w;break a;break;}case 115:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18790,AB(18790)|0);C=YB(w,d,g,e)|0;iB(g);z=(C|0)==(w|0)?b:C;break a;break;}case 83:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18793,AB(18793)|0);w=YB(C,d,g,e)|0;iB(g);z=(w|0)==(C|0)?b:w;break a;break;}case 116:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18709,AB(18709)|0);C=YB(w,d,g,e)|0;iB(g);z=(C|0)==(w|0)?b:C;break a;break;}default:{z=b;break a;}}break;}case 109:{switch(a[x+1>>0]|0){case 105:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18797,AB(18797)|0);w=YB(C,d,g,e)|0;iB(g);z=(w|0)==(C|0)?b:w;break a;break;}case 73:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18799,AB(18799)|0);C=YB(w,d,g,e)|0;iB(g);z=(C|0)==(w|0)?b:C;break a;break;}case 108:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18693,AB(18693)|0);w=YB(C,d,g,e)|0;iB(g);z=(w|0)==(C|0)?b:w;break a;break;}case 76:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18802,AB(18802)|0);C=YB(w,d,g,e)|0;iB(g);z=(C|0)==(w|0)?b:C;break a;break;}case 109:{C=b+2|0;if((C|0)!=(d|0)?(a[C>>0]|0)==95:0){w=b+3|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18805,AB(18805)|0);D=ZB(w,d,g,e)|0;iB(g);z=(D|0)==(w|0)?b:D;break a;}D=SB(C,d,e)|0;if((D|0)==(C|0)){z=b;break a;}C=e+4|0;w=c[C>>2]|0;if((c[e>>2]|0)==(w|0)){z=b;break a;}FB(i,w+-24|0);pB(i,0,18675)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];w=0;while(1){if((w|0)==3)break;c[i+(w<<2)>>2]=0;w=w+1|0;}qB(h,18808)|0;c[o>>2]=c[h>>2];c[o+4>>2]=c[h+4>>2];c[o+8>>2]=c[h+8>>2];w=0;while(1){if((w|0)==3)break;c[h+(w<<2)>>2]=0;w=w+1|0;}IB(g,o);JB((c[C>>2]|0)+-24|0,g);QA(g);iB(o);iB(h);iB(i);z=D;break a;break;}default:{z=b;break a;}}break;}case 110:{switch(a[x+1>>0]|0){case 119:case 97:{z=hC(b,d,e)|0;break a;break;}case 101:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18812,AB(18812)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 103:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18797,AB(18797)|0);w=ZB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 116:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18815,AB(18815)|0);A=ZB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 120:{A=b+2|0;w=iC(A,d,e)|0;z=(w|0)==(A|0)?b:w;break a;break;}default:{z=b;break a;}}break;}case 111:{switch(a[x+1>>0]|0){case 110:{z=eC(b,d,e)|0;break a;break;}case 111:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18817,AB(18817)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 114:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18820,AB(18820)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 82:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18822,AB(18822)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}default:{z=b;break a;}}break;}case 112:{switch(a[x+1>>0]|0){case 109:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18825,AB(18825)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 108:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18829,AB(18829)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 76:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18831,AB(18831)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 112:{w=b+2|0;if((w|0)!=(d|0)?(a[w>>0]|0)==95:0){A=b+3|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18834,AB(18834)|0);B=ZB(A,d,g,e)|0;iB(g);z=(B|0)==(A|0)?b:B;break a;}B=SB(w,d,e)|0;if((B|0)==(w|0)){z=b;break a;}w=e+4|0;A=c[w>>2]|0;if((c[e>>2]|0)==(A|0)){z=b;break a;}FB(i,A+-24|0);pB(i,0,18675)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];A=0;while(1){if((A|0)==3)break;c[i+(A<<2)>>2]=0;A=A+1|0;}qB(h,18837)|0;c[p>>2]=c[h>>2];c[p+4>>2]=c[h+4>>2];c[p+8>>2]=c[h+8>>2];A=0;while(1){if((A|0)==3)break;c[h+(A<<2)>>2]=0;A=A+1|0;}IB(g,p);JB((c[w>>2]|0)+-24|0,g);QA(g);iB(p);iB(h);iB(i);z=B;break a;break;}case 115:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18829,AB(18829)|0);D=ZB(A,d,g,e)|0;iB(g);z=(D|0)==(A|0)?b:D;break a;break;}case 116:{z=jC(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}case 113:{if((a[x+1>>0]|0)!=117){z=b;break a;}D=b+2|0;A=SB(D,d,e)|0;if((A|0)==(D|0)){z=b;break a;}D=SB(A,d,e)|0;if((D|0)==(A|0)){A=e+4|0;C=c[A>>2]|0;E=0;while(1){if((E|0)==-1)break;F=E+-1|0;QA(C+(F*24|0)|0);E=F;}c[A>>2]=C+-24;z=b;break a;}E=SB(D,d,e)|0;B=e+4|0;if((E|0)==(D|0)){w=c[B>>2]|0;F=0;while(1){if((F|0)==-1)break;G=F+-1|0;QA(w+(G*24|0)|0);F=G;}F=w+-24|0;c[B>>2]=F;D=0;while(1){if((D|0)==-1)break;C=D+-1|0;QA(F+(C*24|0)|0);D=C;}c[B>>2]=w+-48;z=b;break a;}D=c[B>>2]|0;if(((D-(c[e>>2]|0)|0)/24|0)>>>0<3){z=b;break a;}FB(g,D+-24|0);D=c[B>>2]|0;F=0;while(1){if((F|0)==-1)break;C=F+-1|0;QA(D+(C*24|0)|0);F=C;}c[B>>2]=D+-24;FB(h,D+-48|0);F=c[B>>2]|0;w=0;while(1){if((w|0)==-1)break;C=w+-1|0;QA(F+(C*24|0)|0);w=C;}c[B>>2]=F+-24;FB(i,F+-48|0);UB(t,18675,i);qB(t,18841)|0;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];w=0;while(1){if((w|0)==3)break;c[t+(w<<2)>>2]=0;w=w+1|0;}w=a[h+11>>0]|0;F=w<<24>>24<0;TA(s,F?c[h>>2]|0:h,F?c[h+4>>2]|0:w&255)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];w=0;while(1){if((w|0)==3)break;c[s+(w<<2)>>2]=0;w=w+1|0;}qB(r,18847)|0;c[n>>2]=c[r>>2];c[n+4>>2]=c[r+4>>2];c[n+8>>2]=c[r+8>>2];w=0;while(1){if((w|0)==3)break;c[r+(w<<2)>>2]=0;w=w+1|0;}w=a[g+11>>0]|0;F=w<<24>>24<0;TA(n,F?c[g>>2]|0:g,F?c[g+4>>2]|0:w&255)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];w=0;while(1){if((w|0)==3)break;c[n+(w<<2)>>2]=0;w=w+1|0;}qB(k,18673)|0;c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];w=0;while(1){if((w|0)==3)break;c[k+(w<<2)>>2]=0;w=w+1|0;}IB(j,q);JB((c[B>>2]|0)+-24|0,j);QA(j);iB(q);iB(k);iB(n);iB(r);iB(s);iB(t);iB(i);iB(h);iB(g);z=E;break a;break;}case 114:{switch(a[x+1>>0]|0){case 99:{z=kC(b,d,e)|0;break a;break;}case 109:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18853,AB(18853)|0);F=YB(w,d,g,e)|0;iB(g);z=(F|0)==(w|0)?b:F;break a;break;}case 77:{F=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18855,AB(18855)|0);w=YB(F,d,g,e)|0;iB(g);z=(w|0)==(F|0)?b:w;break a;break;}case 115:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18858,AB(18858)|0);F=YB(w,d,g,e)|0;iB(g);z=(F|0)==(w|0)?b:F;break a;break;}case 83:{F=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18861,AB(18861)|0);w=YB(F,d,g,e)|0;iB(g);z=(w|0)==(F|0)?b:w;break a;break;}default:{z=b;break a;}}break;}case 115:{switch(a[x+1>>0]|0){case 99:{z=lC(b,d,e)|0;break a;break;}case 112:{z=mC(b,d,e)|0;break a;break;}case 114:{z=eC(b,d,e)|0;break a;break;}case 116:{z=nC(b,d,e)|0;break a;break;}case 122:{z=oC(b,d,e)|0;break a;break;}case 90:{if((u-x|0)<=2){z=b;break a;}switch(a[x+2>>0]|0){case 84:{z=pC(b,d,e)|0;break a;break;}case 102:{z=qC(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}default:{z=b;break a;}}break;}case 116:{switch(a[x+1>>0]|0){case 105:case 101:{z=rC(b,d,e)|0;break a;break;}case 114:{sC(g,18865);w=e+4|0;F=c[w>>2]|0;if(F>>>0<(c[e+8>>2]|0)>>>0){KB(F,g);c[w>>2]=(c[w>>2]|0)+24;}else LB(e,g);QA(g);z=b+2|0;break a;break;}case 119:{z=tC(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{z=eC(b,d,e)|0;break a;break;}default:{z=b;break a;}}}while(0);}else z=b;}while(0);l=f;return z|0;}function TB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=b+11|0;e=a[d>>0]|0;f=e<<24>>24<0;if(f){g=c[b+4>>2]|0;h=(c[b+8>>2]&2147483647)+-1|0;}else{g=e&255;h=10;}i=g>>>0<11;j=i?10:(g+16&-16)+-1|0;a:do{if((j|0)!=(h|0)){do{if(i){k=c[b>>2]|0;if(f){l=0;m=k;n=b;o=12;}else{bB(b,k,(e&255)+1|0)|0;gB(k);o=15;}}else{k=j+1|0;p=fB(k)|0;if(j>>>0<=h>>>0&(p|0)==0)break a;q=a[d>>0]|0;if(q<<24>>24<0){l=1;m=c[b>>2]|0;n=p;o=12;break;}else{bB(p,b,(q&255)+1|0)|0;r=p;s=k;t=b+4|0;o=14;break;}}}while(0);if((o|0)==12){k=b+4|0;bB(n,m,(c[k>>2]|0)+1|0)|0;gB(m);if(l){r=n;s=j+1|0;t=k;o=14;}else o=15;}if((o|0)==14){c[b+8>>2]=s|-2147483648;c[t>>2]=g;c[b>>2]=r;break;}else if((o|0)==15){a[d>>0]=g;break;}}}while(0);return;}function UB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=0;while(1){if((f|0)==3)break;c[b+(f<<2)>>2]=0;f=f+1|0;}f=AB(d)|0;g=e+11|0;h=a[g>>0]|0;i=h<<24>>24<0?c[e+4>>2]|0:h&255;VB(b,d,f,i+f|0);TA(b,(a[g>>0]|0)<0?c[e>>2]|0:e,i)|0;return;}function VB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g;if(f>>>0>4294967279)eB(b);if(f>>>0<11){a[b+11>>0]=e;i=b;}else{j=f+16&-16;f=fB(j)|0;c[b>>2]=f;c[b+8>>2]=j|-2147483648;c[b+4>>2]=e;i=f;}bB(i,d,e)|0;a[h>>0]=0;cB(i+e|0,h);l=g;return;}function WB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+96|0;g=f+64|0;h=f+48|0;i=f+36|0;j=f+24|0;k=f+12|0;m=f;a:do{if((d-b|0)>3?(a[b>>0]|0)==76:0){n=b+1|0;do{switch(a[n>>0]|0){case 84:{o=b;break a;break;}case 119:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19867,AB(19867)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 98:{if((a[b+3>>0]|0)!=69){o=b;break a;}switch(a[b+2>>0]|0){case 48:{sC(g,19875);q=e+4|0;p=c[q>>2]|0;if(p>>>0<(c[e+8>>2]|0)>>>0){KB(p,g);c[q>>2]=(c[q>>2]|0)+24;}else LB(e,g);QA(g);o=b+4|0;break a;break;}case 49:{cD(g,19881);q=e+4|0;p=c[q>>2]|0;if(p>>>0<(c[e+8>>2]|0)>>>0){KB(p,g);c[q>>2]=(c[q>>2]|0)+24;}else LB(e,g);QA(g);o=b+4|0;break a;break;}default:{o=b;break a;}}break;}case 99:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19886,AB(19886)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 97:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19891,AB(19891)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 104:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19903,AB(19903)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 115:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19917,AB(19917)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 116:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19923,AB(19923)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 105:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,22268,AB(22268)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 106:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19938,AB(19938)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 108:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19940,AB(19940)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 109:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19942,AB(19942)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 120:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19945,AB(19945)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 121:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19948,AB(19948)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 110:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19952,AB(19952)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 111:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19961,AB(19961)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 102:{p=b+2|0;q=dD(p,d,e)|0;o=(q|0)==(p|0)?b:q;break a;break;}case 100:{q=b+2|0;p=eD(q,d,e)|0;o=(p|0)==(q|0)?b:p;break a;break;}case 101:{p=b+2|0;q=fD(p,d,e)|0;o=(q|0)==(p|0)?b:q;break a;break;}case 95:{if((a[b+2>>0]|0)!=90){o=b;break a;}q=b+3|0;p=jB(q,d,e)|0;if((p|0)==(q|0)|(p|0)==(d|0)){o=b;break a;}o=(a[p>>0]|0)==69?p+1|0:b;break a;break;}default:{p=mB(n,d,e)|0;if((p|0)==(n|0)|(p|0)==(d|0)){o=b;break a;}if((a[p>>0]|0)==69){o=p+1|0;break a;}q=p;while(1){if((q|0)==(d|0)){o=b;break a;}r=a[q>>0]|0;if(((r<<24>>24)+-48|0)>>>0>=10)break;q=q+1|0;}if(!((q|0)!=(p|0)&r<<24>>24==69)){o=b;break a;}s=e+4|0;t=c[s>>2]|0;if((c[e>>2]|0)==(t|0)){o=b;break a;}FB(k,t+-24|0);pB(k,0,18675)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];t=0;while(1){if((t|0)==3)break;c[k+(t<<2)>>2]=0;t=t+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];t=0;while(1){if((t|0)==3)break;c[j+(t<<2)>>2]=0;t=t+1|0;}c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;QC(m,p,q);t=a[m+11>>0]|0;u=t<<24>>24<0;TA(i,u?c[m>>2]|0:m,u?c[m+4>>2]|0:t&255)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];t=0;while(1){if((t|0)==3)break;c[i+(t<<2)>>2]=0;t=t+1|0;}IB(g,h);JB((c[s>>2]|0)+-24|0,g);QA(g);iB(h);iB(m);iB(i);iB(j);iB(k);o=q+1|0;break a;}}}while(0);}else o=b;}while(0);l=f;return o|0;}function XB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+80|0;g=f+64|0;h=f+40|0;i=f+12|0;j=f+24|0;k=f;a:do{if((d-b|0)>2?(a[b>>0]|0)==102:0){switch(a[b+1>>0]|0){case 112:{m=nB(b+2|0,d,g)|0;n=QB(m,d)|0;if((n|0)!=(d|0)?(a[n>>0]|0)==95:0){c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;QC(j,m,n);pB(j,0,19864)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];m=0;while(1){if((m|0)==3)break;c[j+(m<<2)>>2]=0;m=m+1|0;}IB(h,i);m=e+4|0;o=c[m>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){KB(o,h);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,h);QA(h);iB(i);iB(j);p=n+1|0;}else p=b;q=p;break a;break;}case 76:break;default:{q=b;break a;}}m=QB(b+2|0,d)|0;if((((m|0)!=(d|0)?(a[m>>0]|0)==112:0)?(o=nB(m+1|0,d,g)|0,m=QB(o,d)|0,(m|0)!=(d|0)):0)?(a[m>>0]|0)==95:0){c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;QC(j,o,m);pB(j,0,19864)|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}IB(h,k);o=e+4|0;n=c[o>>2]|0;if(n>>>0<(c[e+8>>2]|0)>>>0){KB(n,h);c[o>>2]=(c[o>>2]|0)+24;}else LB(e,h);QA(h);iB(k);iB(j);r=m+1|0;}else r=b;q=r;}else q=b;}while(0);l=f;return q|0;}function YB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;g=l;l=l+96|0;h=g+84|0;i=g+72|0;j=g+60|0;k=g+48|0;m=g+36|0;n=g+24|0;o=g+12|0;p=g;q=SB(b,d,f)|0;do{if((q|0)!=(b|0)){r=SB(q,d,f)|0;s=f+4|0;if((r|0)==(q|0)){t=c[s>>2]|0;u=0;while(1){if((u|0)==-1)break;v=u+-1|0;QA(t+(v*24|0)|0);u=v;}c[s>>2]=t+-24;w=b;break;}u=c[s>>2]|0;if(((u-(c[f>>2]|0)|0)/24|0)>>>0>=2){FB(i,u+-24|0);u=c[s>>2]|0;v=0;while(1){if((v|0)==-1)break;x=v+-1|0;QA(u+(x*24|0)|0);v=x;}c[s>>2]=u+-24;FB(j,u+-48|0);v=c[s>>2]|0;t=v+-24|0;x=t+11|0;if((a[x>>0]|0)<0){y=c[t>>2]|0;a[h>>0]=0;cB(y,h);c[v+-20>>2]=0;}else{a[h>>0]=0;cB(t,h);a[x>>0]=0;}x=AB(18711)|0;v=e+11|0;y=a[v>>0]|0;z=e+4|0;if((x|0)==((y<<24>>24<0?c[z>>2]|0:y&255)|0)?(BB(e,18711,x)|0)==0:0)NC(t,40);UB(p,18675,j);qB(p,18961)|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];x=0;while(1){if((x|0)==3)break;c[p+(x<<2)>>2]=0;x=x+1|0;}x=a[v>>0]|0;s=x<<24>>24<0;TA(o,s?c[e>>2]|0:e,s?c[z>>2]|0:x&255)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];x=0;while(1){if((x|0)==3)break;c[o+(x<<2)>>2]=0;x=x+1|0;}qB(n,18670)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];x=0;while(1){if((x|0)==3)break;c[n+(x<<2)>>2]=0;x=x+1|0;}x=a[i+11>>0]|0;s=x<<24>>24<0;TA(m,s?c[i>>2]|0:i,s?c[i+4>>2]|0:x&255)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];x=0;while(1){if((x|0)==3)break;c[m+(x<<2)>>2]=0;x=x+1|0;}qB(k,18673)|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];x=0;while(1){if((x|0)==3)break;c[k+(x<<2)>>2]=0;x=x+1|0;}x=a[h+11>>0]|0;s=x<<24>>24<0;TA(t,s?c[h>>2]|0:h,s?c[h+4>>2]|0:x&255)|0;iB(h);iB(k);iB(m);iB(n);iB(o);iB(p);x=AB(18711)|0;s=a[v>>0]|0;if((x|0)==((s<<24>>24<0?c[z>>2]|0:s&255)|0)?(BB(e,18711,x)|0)==0:0)NC(t,41);iB(j);iB(i);w=r;}else w=b;}else w=b;}while(0);l=g;return w|0;}function ZB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+64|0;h=g+48|0;i=g+36|0;j=g+24|0;k=g+12|0;m=g;n=SB(b,d,f)|0;if((n|0)!=(b|0)?(d=f+4|0,(c[f>>2]|0)!=(c[d>>2]|0)):0){HB(k,e,18675);FB(m,(c[d>>2]|0)+-24|0);e=a[m+11>>0]|0;f=e<<24>>24<0;TA(k,f?c[m>>2]|0:m,f?c[m+4>>2]|0:e&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];e=0;while(1){if((e|0)==3)break;c[k+(e<<2)>>2]=0;e=e+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];e=0;while(1){if((e|0)==3)break;c[j+(e<<2)>>2]=0;e=e+1|0;}e=c[d>>2]|0;d=e+-24|0;f=d+11|0;if((a[f>>0]|0)<0){o=c[d>>2]|0;a[h>>0]=0;cB(o,h);c[e+-20>>2]=0;}else{a[h>>0]=0;cB(d,h);a[f>>0]=0;}TB(d);c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}iB(i);iB(j);iB(m);iB(k);p=n;}else p=b;l=g;return p|0;}function _B(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+48|0;g=f+36|0;h=f+24|0;i=f+12|0;j=f;if(((((d-b|0)>2?(a[b>>0]|0)==97:0)?(a[b+1>>0]|0)==116:0)?(k=b+2|0,m=mB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,19854)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}d=c[k>>2]|0;k=d+-24|0;e=k+11|0;if((a[e>>0]|0)<0){n=c[k>>2]|0;a[g>>0]=0;cB(n,g);c[d+-20>>2]=0;}else{a[g>>0]=0;cB(k,g);a[e>>0]=0;}TB(k);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];k=0;while(1){if((k|0)==3)break;c[h+(k<<2)>>2]=0;k=k+1|0;}iB(h);iB(i);iB(j);o=m;}else o=b;l=f;return o|0;}function $B(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+48|0;g=f+36|0;h=f+24|0;i=f+12|0;j=f;if(((((d-b|0)>2?(a[b>>0]|0)==97:0)?(a[b+1>>0]|0)==122:0)?(k=b+2|0,m=SB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,19854)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}d=c[k>>2]|0;k=d+-24|0;e=k+11|0;if((a[e>>0]|0)<0){n=c[k>>2]|0;a[g>>0]=0;cB(n,g);c[d+-20>>2]=0;}else{a[g>>0]=0;cB(k,g);a[e>>0]=0;}TB(k);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];k=0;while(1){if((k|0)==3)break;c[h+(k<<2)>>2]=0;k=k+1|0;}iB(h);iB(i);iB(j);o=m;}else o=b;l=f;return o|0;}function aC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;if((((((d-b|0)>2?(a[b>>0]|0)==99:0)?(a[b+1>>0]|0)==99:0)?(o=b+2|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=SB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;FB(n,d+-48|0);pB(n,0,19842)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=0;while(1){if((d|0)==3)break;c[n+(d<<2)>>2]=0;d=d+1|0;}qB(m,18922)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];d=0;while(1){if((d|0)==3)break;c[m+(d<<2)>>2]=0;d=d+1|0;}d=a[g+11>>0]|0;e=d<<24>>24<0;TA(k,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];d=0;while(1){if((d|0)==3)break;c[k+(d<<2)>>2]=0;d=d+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}IB(h,i);JB((c[p>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);r=o;}else r=b;l=f;return r|0;}function bC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=l;l=l+32|0;g=f+12|0;h=f;a:do{if(((((d-b|0)>3?(a[b>>0]|0)==99:0)?(a[b+1>>0]|0)==108:0)?(i=b+2|0,j=SB(i,d,e)|0,!((j|0)==(i|0)|(j|0)==(d|0))):0)?(i=e+4|0,k=c[i>>2]|0,(c[e>>2]|0)!=(k|0)):0){m=k+-12|0;n=a[m+11>>0]|0;o=n<<24>>24<0;TA(k+-24|0,o?c[m>>2]|0:m,o?c[k+-8>>2]|0:n&255)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;n=0;while(1){if((n|0)==3)break;c[h+(n<<2)>>2]=0;n=n+1|0;}n=c[i>>2]|0;k=n+-12|0;o=k+11|0;if((a[o>>0]|0)<0){m=c[k>>2]|0;a[g>>0]=0;cB(m,g);c[n+-8>>2]=0;}else{a[g>>0]=0;cB(k,g);a[o>>0]=0;}TB(k);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];k=0;while(1){if((k|0)==3)break;c[h+(k<<2)>>2]=0;k=k+1|0;}iB(h);qB((c[i>>2]|0)+-24|0,18675)|0;k=g+11|0;o=g+4|0;n=0;m=j;while(1){if((a[m>>0]|0)==69)break;p=SB(m,d,e)|0;if((p|0)==(m|0)|(p|0)==(d|0)){q=b;break a;}r=c[i>>2]|0;if((c[e>>2]|0)==(r|0)){q=b;break a;}FB(g,r+-24|0);r=c[i>>2]|0;s=0;while(1){if((s|0)==-1)break;t=s+-1|0;QA(r+(t*24|0)|0);s=t;}s=r+-24|0;c[i>>2]=s;t=a[k>>0]|0;u=t<<24>>24<0;v=u?c[o>>2]|0:t&255;if(v){if((c[e>>2]|0)==(s|0)){w=0;x=b;y=m;}else{TA(r+-48|0,u?c[g>>2]|0:g,v)|0;w=1;x=n;y=p;}}else{w=1;x=n;y=p;}iB(g);if(w){n=x;m=y;}else{q=x;break a;}}n=c[i>>2]|0;if((c[e>>2]|0)!=(n|0)){qB(n+-24|0,18673)|0;q=m+1|0;}else q=b;}else q=b;}while(0);l=f;return q|0;}function cC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;a:do{if((((d-b|0)>2?(a[b>>0]|0)==99:0)?(a[b+1>>0]|0)==118:0)?(o=e+63|0,p=a[o>>0]|0,a[o>>0]=0,q=b+2|0,r=mB(q,d,e)|0,a[o>>0]=p,!((r|0)==(q|0)|(r|0)==(d|0))):0){if((a[r>>0]|0)!=95){q=SB(r,d,e)|0;if((q|0)==(r|0)){s=b;break;}else t=q;}else{q=r+1|0;if((q|0)==(d|0)){s=b;break;}r=a[q>>0]|0;b:do{if(r<<24>>24==69){p=e+4|0;o=c[p>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;VC(o);c[p>>2]=(c[p>>2]|0)+24;u=q;break;}else{WC(e);u=q;break;}}else{p=q;o=r;while(1){if(o<<24>>24==69){u=p;break b;}v=SB(p,d,e)|0;if((v|0)==(p|0)|(v|0)==(d|0)){s=b;break a;}p=v;o=a[v>>0]|0;}}}while(0);t=u+1|0;}r=e+4|0;q=c[r>>2]|0;if(((q-(c[e>>2]|0)|0)/24|0)>>>0>=2){FB(g,q+-24|0);q=c[r>>2]|0;o=0;while(1){if((o|0)==-1)break;p=o+-1|0;QA(q+(p*24|0)|0);o=p;}c[r>>2]=q+-24;FB(n,q+-48|0);pB(n,0,18675)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];o=0;while(1){if((o|0)==3)break;c[n+(o<<2)>>2]=0;o=o+1|0;}qB(m,19839)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];o=0;while(1){if((o|0)==3)break;c[m+(o<<2)>>2]=0;o=o+1|0;}o=a[g+11>>0]|0;q=o<<24>>24<0;TA(k,q?c[g>>2]|0:g,q?c[g+4>>2]|0:o&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];o=0;while(1){if((o|0)==3)break;c[k+(o<<2)>>2]=0;o=o+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}IB(h,i);JB((c[r>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);s=t;}else s=b;}else s=b;}while(0);l=f;return s|0;}function dC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;if((((((d-b|0)>2?(a[b>>0]|0)==100:0)?(a[b+1>>0]|0)==99:0)?(o=b+2|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=SB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;FB(n,d+-48|0);pB(n,0,19825)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=0;while(1){if((d|0)==3)break;c[n+(d<<2)>>2]=0;d=d+1|0;}qB(m,18922)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];d=0;while(1){if((d|0)==3)break;c[m+(d<<2)>>2]=0;d=d+1|0;}d=a[g+11>>0]|0;e=d<<24>>24<0;TA(k,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];d=0;while(1){if((d|0)==3)break;c[k+(d<<2)>>2]=0;d=d+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}IB(h,i);JB((c[p>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);r=o;}else r=b;l=f;return r|0;}function eC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;f=l;l=l+32|0;g=f+12|0;h=f;i=d;a:do{if((i-b|0)>2){if((a[b>>0]|0)==103){j=(a[b+1>>0]|0)==115;k=j;m=j?b+2|0:b;}else{k=0;m=b;}j=xC(m,d,e)|0;if((j|0)!=(m|0)){if(!k){n=j;break;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){n=b;break;}pB(o+-24|0,0,18747)|0;n=j;break;}if(((i-m|0)>2?(a[m>>0]|0)==115:0)?(a[m+1>>0]|0)==114:0){j=m+2|0;if((a[j>>0]|0)==78){o=m+3|0;p=yC(o,d,e)|0;if((p|0)==(o|0)|(p|0)==(d|0)){n=b;break;}o=EB(p,d,e)|0;q=e+4|0;do{if((o|0)==(p|0)){r=p;s=e;}else{t=c[q>>2]|0;if(((t-(c[e>>2]|0)|0)/24|0)>>>0<2){n=b;break a;}FB(g,t+-24|0);t=c[q>>2]|0;u=0;while(1){if((u|0)==-1)break;v=u+-1|0;QA(t+(v*24|0)|0);u=v;}c[q>>2]=t+-24;u=a[g+11>>0]|0;v=u<<24>>24<0;TA(t+-48|0,v?c[g>>2]|0:g,v?c[g+4>>2]|0:u&255)|0;if((o|0)!=(d|0)){iB(g);r=o;s=e;break;}u=c[q>>2]|0;v=0;while(1){if((v|0)==-1)break;w=v+-1|0;QA(u+(w*24|0)|0);v=w;}c[q>>2]=u+-24;iB(g);n=b;break a;}}while(0);o=h+11|0;p=h+4|0;v=r;while(1){if((a[v>>0]|0)==69)break;t=zC(v,d,e)|0;if((t|0)==(v|0)|(t|0)==(d|0)){n=b;break a;}w=c[q>>2]|0;if(((w-(c[s>>2]|0)|0)/24|0)>>>0<2){n=b;break a;}FB(g,w+-24|0);w=c[q>>2]|0;x=0;while(1){if((x|0)==-1)break;y=x+-1|0;QA(w+(y*24|0)|0);x=y;}c[q>>2]=w+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];x=0;while(1){if((x|0)==3)break;c[g+(x<<2)>>2]=0;x=x+1|0;}x=a[o>>0]|0;w=x<<24>>24<0;TA((c[q>>2]|0)+-24|0,w?c[h>>2]|0:h,w?c[p>>2]|0:x&255)|0;iB(h);iB(g);v=t;}p=v+1|0;o=xC(p,d,e)|0;if((o|0)==(p|0)){p=c[q>>2]|0;if((c[e>>2]|0)==(p|0)){n=b;break;}x=0;while(1){if((x|0)==-1)break;w=x+-1|0;QA(p+(w*24|0)|0);x=w;}c[q>>2]=p+-24;n=b;break;}x=c[q>>2]|0;if(((x-(c[s>>2]|0)|0)/24|0)>>>0<2){n=b;break;}FB(g,x+-24|0);x=c[q>>2]|0;v=0;while(1){if((v|0)==-1)break;w=v+-1|0;QA(x+(w*24|0)|0);v=w;}c[q>>2]=x+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];v=0;while(1){if((v|0)==3)break;c[g+(v<<2)>>2]=0;v=v+1|0;}v=a[h+11>>0]|0;x=v<<24>>24<0;TA((c[q>>2]|0)+-24|0,x?c[h>>2]|0:h,x?c[h+4>>2]|0:v&255)|0;iB(h);iB(g);n=o;break;}v=yC(j,d,e)|0;if((v|0)!=(j|0)){x=EB(v,d,e)|0;if((x|0)==(v|0))z=v;else{v=e+4|0;p=c[v>>2]|0;if(((p-(c[e>>2]|0)|0)/24|0)>>>0<2){n=b;break;}FB(g,p+-24|0);p=c[v>>2]|0;w=0;while(1){if((w|0)==-1)break;u=w+-1|0;QA(p+(u*24|0)|0);w=u;}c[v>>2]=p+-24;w=a[g+11>>0]|0;o=w<<24>>24<0;TA(p+-48|0,o?c[g>>2]|0:g,o?c[g+4>>2]|0:w&255)|0;iB(g);z=x;}w=xC(z,d,e)|0;if((w|0)==(z|0)){o=e+4|0;q=c[o>>2]|0;if((c[e>>2]|0)==(q|0)){n=b;break;}u=0;while(1){if((u|0)==-1)break;y=u+-1|0;QA(q+(y*24|0)|0);u=y;}c[o>>2]=q+-24;n=b;break;}u=e+4|0;x=c[u>>2]|0;if(((x-(c[e>>2]|0)|0)/24|0)>>>0<2){n=b;break;}FB(g,x+-24|0);x=c[u>>2]|0;p=0;while(1){if((p|0)==-1)break;v=p+-1|0;QA(x+(v*24|0)|0);p=v;}c[u>>2]=x+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];p=0;while(1){if((p|0)==3)break;c[g+(p<<2)>>2]=0;p=p+1|0;}p=a[h+11>>0]|0;x=p<<24>>24<0;TA((c[u>>2]|0)+-24|0,x?c[h>>2]|0:h,x?c[h+4>>2]|0:p&255)|0;iB(h);iB(g);n=w;break;}p=zC(j,d,e)|0;if(!((p|0)==(j|0)|(p|0)==(d|0))){if(k){x=e+4|0;q=c[x>>2]|0;if((c[e>>2]|0)==(q|0)){n=b;break;}pB(q+-24|0,0,18747)|0;A=x;}else A=e+4|0;x=h+11|0;q=h+4|0;o=p;while(1){if((a[o>>0]|0)==69)break;p=zC(o,d,e)|0;if((p|0)==(o|0)|(p|0)==(d|0)){n=b;break a;}v=c[A>>2]|0;if(((v-(c[e>>2]|0)|0)/24|0)>>>0<2){n=b;break a;}FB(g,v+-24|0);v=c[A>>2]|0;y=0;while(1){if((y|0)==-1)break;B=y+-1|0;QA(v+(B*24|0)|0);y=B;}c[A>>2]=v+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];y=0;while(1){if((y|0)==3)break;c[g+(y<<2)>>2]=0;y=y+1|0;}y=a[x>>0]|0;v=y<<24>>24<0;TA((c[A>>2]|0)+-24|0,v?c[h>>2]|0:h,v?c[q>>2]|0:y&255)|0;iB(h);iB(g);o=p;}q=o+1|0;x=xC(q,d,e)|0;if((x|0)==(q|0)){q=c[A>>2]|0;if((c[e>>2]|0)==(q|0)){n=b;break;}j=0;while(1){if((j|0)==-1)break;w=j+-1|0;QA(q+(w*24|0)|0);j=w;}c[A>>2]=q+-24;n=b;break;}j=c[A>>2]|0;if(((j-(c[e>>2]|0)|0)/24|0)>>>0>=2){FB(g,j+-24|0);j=c[A>>2]|0;o=0;while(1){if((o|0)==-1)break;w=o+-1|0;QA(j+(w*24|0)|0);o=w;}c[A>>2]=j+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];o=0;while(1){if((o|0)==3)break;c[g+(o<<2)>>2]=0;o=o+1|0;}o=a[h+11>>0]|0;j=o<<24>>24<0;TA((c[A>>2]|0)+-24|0,j?c[h>>2]|0:h,j?c[h+4>>2]|0:o&255)|0;iB(h);iB(g);n=x;}else n=b;}else n=b;}else n=b;}else n=b;}while(0);l=f;return n|0;}function fC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+12|0;h=f;if((((((d-b|0)>2?(a[b>>0]|0)==100:0)?(a[b+1>>0]|0)==115:0)?(i=b+2|0,j=SB(i,d,e)|0,(j|0)!=(i|0)):0)?(i=SB(j,d,e)|0,(i|0)!=(j|0)):0)?(j=e+4|0,d=c[j>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[j>>2]|0;e=0;while(1){if((e|0)==-1)break;k=e+-1|0;QA(d+(k*24|0)|0);e=k;}c[j>>2]=d+-24;UB(h,18966,g);d=a[h+11>>0]|0;e=d<<24>>24<0;TA((c[j>>2]|0)+-24|0,e?c[h>>2]|0:h,e?c[h+4>>2]|0:d&255)|0;iB(h);iB(g);m=i;}else m=b;l=f;return m|0;}function gC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+12|0;h=f;if((((((d-b|0)>2?(a[b>>0]|0)==100:0)?(a[b+1>>0]|0)==116:0)?(i=b+2|0,j=SB(i,d,e)|0,(j|0)!=(i|0)):0)?(i=eC(j,d,e)|0,(i|0)!=(j|0)):0)?(j=e+4|0,d=c[j>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[j>>2]|0;e=0;while(1){if((e|0)==-1)break;k=e+-1|0;QA(d+(k*24|0)|0);e=k;}c[j>>2]=d+-24;UB(h,18964,g);d=a[h+11>>0]|0;e=d<<24>>24<0;TA((c[j>>2]|0)+-24|0,e?c[h>>2]|0:h,e?c[h+4>>2]|0:d&255)|0;iB(h);iB(g);m=i;}else m=b;l=f;return m|0;}function hC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;f=l;l=l+112|0;g=f+88|0;h=f+76|0;i=f+64|0;j=f+40|0;k=f+16|0;m=f;n=f+52|0;o=d;a:do{if((o-b|0)>3){p=a[b>>0]|0;if(p<<24>>24==103){q=(a[b+1>>0]|0)==115;r=q?b+2|0:b;s=q;t=r;u=a[r>>0]|0;}else{s=0;t=b;u=p;}if(u<<24>>24==110){p=a[t+1>>0]|0;switch(p<<24>>24){case 97:case 119:break;default:{v=b;break a;}}r=p<<24>>24==97;p=t+2|0;b:do{if((p|0)!=(d|0)){q=0;w=p;while(1){if((a[w>>0]|0)==95)break;x=SB(w,d,e)|0;if((x|0)==(w|0)|(x|0)==(d|0))break b;else{q=1;w=x;}}x=w+1|0;y=mB(x,d,e)|0;if(!((y|0)==(x|0)|(y|0)==(d|0))){x=a[y>>0]|0;c:do{if(!((o-y|0)>2&x<<24>>24==112)){if(x<<24>>24==69){z=0;A=y;}else break b;}else{if((a[y+1>>0]|0)!=105)break b;B=y+2|0;while(1){if((a[B>>0]|0)==69){z=1;A=B;break c;}C=B;B=SB(B,d,e)|0;if((B|0)==(C|0)|(B|0)==(d|0))break b;}}}while(0);c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;y=0;while(1){if((y|0)==3)break;c[h+(y<<2)>>2]=0;y=y+1|0;}if(z){y=e+4|0;x=c[y>>2]|0;if((c[e>>2]|0)==(x|0)){D=b;E=1;}else{FB(i,x+-24|0);x=h+11|0;if((a[x>>0]|0)<0){w=c[h>>2]|0;a[g>>0]=0;cB(w,g);c[h+4>>2]=0;}else{a[g>>0]=0;cB(h,g);a[x>>0]=0;}TB(h);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];x=0;while(1){if((x|0)==3)break;c[i+(x<<2)>>2]=0;x=x+1|0;}iB(i);x=c[y>>2]|0;w=0;while(1){if((w|0)==-1)break;B=w+-1|0;QA(x+(B*24|0)|0);w=B;}w=x+-24|0;c[y>>2]=w;F=y;G=e;H=w;I=33;}}else{w=e+4|0;F=w;G=e;H=c[w>>2]|0;I=33;}if((I|0)==33)if((c[G>>2]|0)==(H|0)){D=b;E=1;}else{FB(i,H+-24|0);w=c[F>>2]|0;B=0;while(1){if((B|0)==-1)break;C=B+-1|0;QA(w+(C*24|0)|0);B=C;}B=w+-24|0;c[F>>2]=B;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;y=0;while(1){if((y|0)==3)break;c[j+(y<<2)>>2]=0;y=y+1|0;}if(q){if((c[G>>2]|0)==(B|0)){J=b;K=1;}else{FB(k,w+-48|0);y=j+11|0;if((a[y>>0]|0)<0){x=c[j>>2]|0;a[g>>0]=0;cB(x,g);c[j+4>>2]=0;}else{a[g>>0]=0;cB(j,g);a[y>>0]=0;}TB(j);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];y=0;while(1){if((y|0)==3)break;c[k+(y<<2)>>2]=0;y=y+1|0;}iB(k);y=c[F>>2]|0;w=0;while(1){if((w|0)==-1)break;B=w+-1|0;QA(y+(B*24|0)|0);w=B;}c[F>>2]=y+-24;I=52;}}else I=52;if((I|0)==52){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;w=0;while(1){if((w|0)==3)break;c[g+(w<<2)>>2]=0;w=w+1|0;}if(s)uC(g,18747);if(r)qB(g,18957)|0;else qB(g,18707)|0;if(q){UB(m,18675,j);qB(m,18961)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];w=0;while(1){if((w|0)==3)break;c[m+(w<<2)>>2]=0;w=w+1|0;}w=a[k+11>>0]|0;q=w<<24>>24<0;TA(g,q?c[k>>2]|0:k,q?c[k+4>>2]|0:w&255)|0;iB(k);iB(m);}w=a[i+11>>0]|0;q=w<<24>>24<0;TA(g,q?c[i>>2]|0:i,q?c[i+4>>2]|0:w&255)|0;if(z){UB(m,18670,h);qB(m,18673)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];w=0;while(1){if((w|0)==3)break;c[m+(w<<2)>>2]=0;w=w+1|0;}w=a[k+11>>0]|0;q=w<<24>>24<0;TA(g,q?c[k>>2]|0:k,q?c[k+4>>2]|0:w&255)|0;iB(k);iB(m);};c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];w=0;while(1){if((w|0)==3)break;c[g+(w<<2)>>2]=0;w=w+1|0;}IB(k,n);w=c[F>>2]|0;if(w>>>0<(c[e+8>>2]|0)>>>0){KB(w,k);c[F>>2]=(c[F>>2]|0)+24;}else LB(e,k);QA(k);iB(n);iB(g);J=A+1|0;K=0;}iB(j);iB(i);D=J;E=K;}iB(h);if(!E){v=D;break a;}}}}while(0);v=b;}else v=b;}else v=b;}while(0);l=f;return v|0;}function iC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+48|0;g=f+36|0;h=f+24|0;i=f+12|0;j=f;k=SB(b,d,e)|0;if((k|0)!=(b|0)?(d=e+4|0,m=c[d>>2]|0,(c[e>>2]|0)!=(m|0)):0){FB(j,m+-24|0);pB(j,0,18946)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];m=0;while(1){if((m|0)==3)break;c[j+(m<<2)>>2]=0;m=m+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];m=0;while(1){if((m|0)==3)break;c[i+(m<<2)>>2]=0;m=m+1|0;}m=c[d>>2]|0;d=m+-24|0;e=d+11|0;if((a[e>>0]|0)<0){n=c[d>>2]|0;a[g>>0]=0;cB(n,g);c[m+-20>>2]=0;}else{a[g>>0]=0;cB(d,g);a[e>>0]=0;}TB(d);c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];d=0;while(1){if((d|0)==3)break;c[h+(d<<2)>>2]=0;d=d+1|0;}iB(h);iB(i);iB(j);o=k;}else o=b;l=f;return o|0;}function jC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;g=f;if((((((d-b|0)>2?(a[b>>0]|0)==112:0)?(a[b+1>>0]|0)==116:0)?(h=b+2|0,i=SB(h,d,e)|0,(i|0)!=(h|0)):0)?(h=SB(i,d,e)|0,(h|0)!=(i|0)):0)?(i=e+4|0,d=c[i>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[i>>2]|0;e=0;while(1){if((e|0)==-1)break;j=e+-1|0;QA(d+(j*24|0)|0);e=j;}c[i>>2]=d+-24;qB(d+-48|0,18943)|0;d=a[g+11>>0]|0;e=d<<24>>24<0;TA((c[i>>2]|0)+-24|0,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;iB(g);k=h;}else k=b;l=f;return k|0;}function kC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;if((((((d-b|0)>2?(a[b>>0]|0)==114:0)?(a[b+1>>0]|0)==99:0)?(o=b+2|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=SB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;FB(n,d+-48|0);pB(n,0,18925)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=0;while(1){if((d|0)==3)break;c[n+(d<<2)>>2]=0;d=d+1|0;}qB(m,18922)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];d=0;while(1){if((d|0)==3)break;c[m+(d<<2)>>2]=0;d=d+1|0;}d=a[g+11>>0]|0;e=d<<24>>24<0;TA(k,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];d=0;while(1){if((d|0)==3)break;c[k+(d<<2)>>2]=0;d=d+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}IB(h,i);JB((c[p>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);r=o;}else r=b;l=f;return r|0;}function lC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;if((((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==99:0)?(o=b+2|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=SB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;FB(n,d+-48|0);pB(n,0,18909)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=0;while(1){if((d|0)==3)break;c[n+(d<<2)>>2]=0;d=d+1|0;}qB(m,18922)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];d=0;while(1){if((d|0)==3)break;c[m+(d<<2)>>2]=0;d=d+1|0;}d=a[g+11>>0]|0;e=d<<24>>24<0;TA(k,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];d=0;while(1){if((d|0)==3)break;c[k+(d<<2)>>2]=0;d=d+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}IB(h,i);JB((c[p>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);r=o;}else r=b;l=f;return r|0;}function mC(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(((c-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==112:0){e=b+2|0;f=SB(e,c,d)|0;g=(f|0)==(e|0)?b:f;}else g=b;return g|0;}function nC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;if(((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==116:0)?(k=b+2|0,m=mB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,18900)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}IB(g,h);JB((c[k>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);n=m;}else n=b;l=f;return n|0;}function oC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;if(((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==122:0)?(k=b+2|0,m=SB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,18900)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}IB(g,h);JB((c[k>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);n=m;}else n=b;l=f;return n|0;}function pC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+64|0;g=f+48|0;h=f+24|0;i=f;j=f+12|0;if(((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==90:0)?(k=b+2|0,(a[k>>0]|0)==84):0)?(m=e+4|0,n=((c[m>>2]|0)-(c[e>>2]|0)|0)/24|0,o=DB(k,d,e)|0,d=((c[m>>2]|0)-(c[e>>2]|0)|0)/24|0,(o|0)!=(k|0)):0){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18886,AB(18886)|0);a:do{if((n|0)!=(d|0)){FB(h,(c[e>>2]|0)+(n*24|0)|0);k=a[h+11>>0]|0;p=k<<24>>24<0;TA(g,p?c[h>>2]|0:h,p?c[h+4>>2]|0:k&255)|0;iB(h);k=h+11|0;p=h+4|0;q=n;while(1){r=q+1|0;if((r|0)==(d|0))break a;FB(i,(c[e>>2]|0)+(r*24|0)|0);pB(i,0,18897)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];s=0;while(1){if((s|0)==3)break;c[i+(s<<2)>>2]=0;s=s+1|0;}s=a[k>>0]|0;t=s<<24>>24<0;TA(g,t?c[h>>2]|0:h,t?c[p>>2]|0:s&255)|0;iB(h);iB(i);q=r;}}}while(0);qB(g,18673)|0;i=d;while(1){if((i|0)==(n|0))break;d=c[m>>2]|0;q=0;while(1){if((q|0)==-1)break;p=q+-1|0;QA(d+(p*24|0)|0);q=p;}c[m>>2]=d+-24;i=i+-1|0;}c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];i=0;while(1){if((i|0)==3)break;c[g+(i<<2)>>2]=0;i=i+1|0;}IB(h,j);i=c[m>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,h);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,h);QA(h);iB(j);iB(g);u=o;}else u=b;l=f;return u|0;}function qC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;if((((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==90:0)?(k=b+2|0,(a[k>>0]|0)==102):0)?(m=XB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,18886)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}IB(g,h);JB((c[k>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);n=m;}else n=b;l=f;return n|0;}function rC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;a:do{if((d-b|0)>2?(a[b>>0]|0)==116:0){k=a[b+1>>0]|0;switch(k<<24>>24){case 105:case 101:break;default:{m=b;break a;}}n=b+2|0;if(k<<24>>24==101)o=SB(n,d,e)|0;else o=mB(n,d,e)|0;if((o|0)!=(n|0)?(n=e+4|0,k=c[n>>2]|0,(c[e>>2]|0)!=(k|0)):0){FB(j,k+-24|0);pB(j,0,18878)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];k=0;while(1){if((k|0)==3)break;c[j+(k<<2)>>2]=0;k=k+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];k=0;while(1){if((k|0)==3)break;c[i+(k<<2)>>2]=0;k=k+1|0;}IB(g,h);JB((c[n>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);m=o;}else m=b;}else m=b;}while(0);l=f;return m|0;}function sC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,5);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function tC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+48|0;g=f+24|0;h=f;i=f+12|0;if(((((d-b|0)>2?(a[b>>0]|0)==116:0)?(a[b+1>>0]|0)==119:0)?(j=b+2|0,k=SB(j,d,e)|0,(k|0)!=(j|0)):0)?(j=e+4|0,d=c[j>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(i,d+-24|0);pB(i,0,18871)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}IB(g,h);JB((c[j>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);m=k;}else m=b;l=f;return m|0;}function uC(a,b){a=a|0;b=b|0;vC(a,b,AB(b)|0);return;}function vC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+16|0;g=f;h=b+11|0;i=a[h>>0]|0;j=i<<24>>24<0;if(j)k=(c[b+8>>2]&2147483647)+-1|0;else k=10;do{if(k>>>0>=e>>>0){if(j)m=c[b>>2]|0;else m=b;wC(m,d,e)|0;a[g>>0]=0;cB(m+e|0,g);if((a[h>>0]|0)<0){c[b+4>>2]=e;break;}else{a[h>>0]=e;break;}}else{if(j)n=c[b+4>>2]|0;else n=i&255;dB(b,k,e-k|0,n,0,n,e,d);}}while(0);l=f;return;}function wC(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)nE(a|0,b|0,c|0)|0;return a|0;}function xC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+16|0;g=f;a:do{if((d-b|0)>1){h=a[b>>0]|0;switch(h<<24>>24){case 100:case 111:{if((a[b+1>>0]|0)==110){i=b+2|0;if(h<<24>>24!=111){h=UC(i,d,e)|0;j=(h|0)==(i|0)?b:h;break a;}h=EC(i,d,e)|0;if((h|0)==(i|0)){j=b;break a;}i=EB(h,d,e)|0;if((i|0)==(h|0)){j=h;break a;}h=e+4|0;k=c[h>>2]|0;if(((k-(c[e>>2]|0)|0)/24|0)>>>0<2){j=i;break a;}FB(g,k+-24|0);k=c[h>>2]|0;m=0;while(1){if((m|0)==-1)break;n=m+-1|0;QA(k+(n*24|0)|0);m=n;}c[h>>2]=k+-24;m=a[g+11>>0]|0;n=m<<24>>24<0;TA(k+-48|0,n?c[g>>2]|0:g,n?c[g+4>>2]|0:m&255)|0;iB(g);j=i;break a;}break;}default:{}}m=AC(b,d,e)|0;if((m|0)==(b|0)){n=EC(b,d,e)|0;if((n|0)!=(b|0)){o=EB(n,d,e)|0;if((o|0)!=(n|0)){p=e+4|0;q=c[p>>2]|0;if(((q-(c[e>>2]|0)|0)/24|0)>>>0<2)j=o;else{FB(g,q+-24|0);q=c[p>>2]|0;r=0;while(1){if((r|0)==-1)break;s=r+-1|0;QA(q+(s*24|0)|0);r=s;}c[p>>2]=q+-24;r=a[g+11>>0]|0;i=r<<24>>24<0;TA(q+-48|0,i?c[g>>2]|0:g,i?c[g+4>>2]|0:r&255)|0;iB(g);j=o;}}else j=n;}else j=b;}else j=m;}else j=b;}while(0);l=f;return j|0;}function yC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+32|0;g=f+8|0;h=f;a:do{if((b|0)==(d|0))i=b;else switch(a[b>>0]|0){case 84:{j=e+4|0;k=((c[j>>2]|0)-(c[e>>2]|0)|0)/24|0;m=DB(b,d,e)|0;n=c[j>>2]|0;o=(n-(c[e>>2]|0)|0)/24|0;p=n;if((m|0)!=(b|0)&(o|0)==(k+1|0)){c[h>>2]=c[e+12>>2];vB(g,p+-24|0,h);n=e+20|0;q=c[n>>2]|0;if(q>>>0<(c[e+24>>2]|0)>>>0){c[q>>2]=0;r=q+4|0;c[r>>2]=0;s=q+8|0;c[s>>2]=0;c[q+12>>2]=c[g+12>>2];c[q>>2]=c[g>>2];q=g+4|0;c[r>>2]=c[q>>2];r=g+8|0;c[s>>2]=c[r>>2];c[r>>2]=0;c[q>>2]=0;c[g>>2]=0;c[n>>2]=(c[n>>2]|0)+16;}else wB(e+16|0,g);RA(g);i=m;break a;}m=o;o=p;while(1){if((m|0)==(k|0)){i=b;break a;}p=0;while(1){if((p|0)==-1)break;n=p+-1|0;QA(o+(n*24|0)|0);p=n;}p=o+-24|0;c[j>>2]=p;m=m+-1|0;o=p;}break;}case 68:{o=OB(b,d,e)|0;if((o|0)==(b|0)){i=b;break a;}m=c[e+4>>2]|0;if((c[e>>2]|0)==(m|0)){i=b;break a;}c[h>>2]=c[e+12>>2];vB(g,m+-24|0,h);m=e+20|0;j=c[m>>2]|0;if(j>>>0<(c[e+24>>2]|0)>>>0){c[j>>2]=0;k=j+4|0;c[k>>2]=0;p=j+8|0;c[p>>2]=0;c[j+12>>2]=c[g+12>>2];c[j>>2]=c[g>>2];j=g+4|0;c[k>>2]=c[j>>2];k=g+8|0;c[p>>2]=c[k>>2];c[k>>2]=0;c[j>>2]=0;c[g>>2]=0;c[m>>2]=(c[m>>2]|0)+16;}else wB(e+16|0,g);RA(g);i=o;break a;break;}case 83:{o=NB(b,d,e)|0;if((o|0)!=(b|0)){i=o;break a;}if((d-b|0)<=2){i=b;break a;}if((a[b+1>>0]|0)!=116){i=b;break a;}o=b+2|0;m=BC(o,d,e)|0;if((m|0)==(o|0)){i=b;break a;}o=e+4|0;j=c[o>>2]|0;if((c[e>>2]|0)==(j|0)){i=b;break a;}pB(j+-24|0,0,18969)|0;j=(c[o>>2]|0)+-24|0;c[h>>2]=c[e+12>>2];vB(g,j,h);j=e+20|0;o=c[j>>2]|0;if(o>>>0<(c[e+24>>2]|0)>>>0){c[o>>2]=0;k=o+4|0;c[k>>2]=0;p=o+8|0;c[p>>2]=0;c[o+12>>2]=c[g+12>>2];c[o>>2]=c[g>>2];o=g+4|0;c[k>>2]=c[o>>2];k=g+8|0;c[p>>2]=c[k>>2];c[k>>2]=0;c[o>>2]=0;c[g>>2]=0;c[j>>2]=(c[j>>2]|0)+16;}else wB(e+16|0,g);RA(g);i=m;break a;break;}default:{i=b;break a;}}}while(0);l=f;return i|0;}function zC(a,b,c){a=a|0;b=b|0;c=c|0;return AC(a,b,c)|0;}function AC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+16|0;g=f;if((b|0)!=(d|0)?(h=GB(b,d,e)|0,(h|0)!=(b|0)):0){i=EB(h,d,e)|0;if((i|0)!=(h|0)){d=e+4|0;j=c[d>>2]|0;if(((j-(c[e>>2]|0)|0)/24|0)>>>0<2)k=b;else{FB(g,j+-24|0);j=c[d>>2]|0;e=0;while(1){if((e|0)==-1)break;m=e+-1|0;QA(j+(m*24|0)|0);e=m;}c[d>>2]=j+-24;d=a[g+11>>0]|0;e=d<<24>>24<0;TA(j+-48|0,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;iB(g);k=i;}}else k=h;}else k=b;l=f;return k|0;}function BC(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do{if((b|0)==(c|0))e=b;else switch(a[b>>0]|0){case 68:case 67:{e=CC(b,c,d)|0;break a;break;}case 85:{e=DC(b,c,d)|0;break a;break;}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{e=GB(b,c,d)|0;break a;break;}default:return EC(b,c,d)|0;}}while(0);return e|0;}function CC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+64|0;g=f+40|0;h=f+24|0;i=f;j=f+12|0;a:do{if((d-b|0)>1?(k=e+4|0,m=c[k>>2]|0,(c[e>>2]|0)!=(m|0)):0){switch(a[b>>0]|0){case 67:{switch(a[b+1>>0]|0){case 53:case 51:case 50:case 49:break;default:{n=b;break a;}}SC(h,m+-24|0);IB(g,h);o=c[k>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){KB(o,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);iB(h);a[e+60>>0]=1;n=b+2|0;break a;break;}case 68:break;default:{n=b;break a;}}switch(a[b+1>>0]|0){case 53:case 50:case 49:case 48:break;default:{n=b;break a;}}SC(j,m+-24|0);pB(j,0,18745)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];m=0;while(1){if((m|0)==3)break;c[j+(m<<2)>>2]=0;m=m+1|0;}IB(g,i);m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);iB(i);iB(j);a[e+60>>0]=1;n=b+2|0;}else n=b;}while(0);l=f;return n|0;}function Zl(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;i=l;l=l+192|0;j=i+176|0;k=i+172|0;m=i+168|0;n=i+164|0;o=i+160|0;p=i+156|0;q=i+152|0;r=i+148|0;s=i+144|0;t=i+140|0;u=i+136|0;v=i+132|0;w=i+128|0;x=i+124|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+72|0;L=i+68|0;M=i+64|0;N=i+60|0;O=i+56|0;P=i+52|0;Q=i+48|0;R=i+44|0;S=i+40|0;T=i+36|0;U=i+32|0;V=i+28|0;W=i+24|0;X=i+20|0;Y=i+16|0;Z=i+12|0;_=i+8|0;$=i+4|0;aa=i;c[X>>2]=a;c[Y>>2]=b;c[Z>>2]=e;c[_>>2]=f;c[$>>2]=g;c[aa>>2]=h;h=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;c[j>>2]=c[X>>2];c[k>>2]=h;c[m>>2]=Y;c[n>>2]=Z;c[o>>2]=_;c[p>>2]=$;c[q>>2]=0;c[r>>2]=0;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[y>>2]=c[q>>2]|0?5:4;c[z>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[m>>2]|0)+4>>2];c[B>>2]=0;c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[x>>2]|0)&1);c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[C>>2]=(c[t>>2]|0)-(c[x>>2]|0);if((c[A>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[A>>2];c[A>>2]=0;}if((c[z>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[z>>2];c[z>>2]=0;}while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[D>>2]=0;c[E>>2]=0;c[F>>2]=(c[t>>2]|0)+1;C=(c[z>>2]|0)>>>0>0&1;q=Bk((c[t>>2]|0)+1|0)|0;if(!(C&(q|0)==(Bk((c[t>>2]|0)+1+(0-(c[z>>2]|0))|0)|0)|0?(c[D>>2]=(Qm((c[t>>2]|0)+1+4|0,(c[t>>2]|0)+1+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[G>>2]=99999999;c[H>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,G)|0;if((c[H>>2]|0)>>>0>(c[D>>2]|0)>>>0){c[D>>2]=c[H>>2];c[F>>2]=c[t>>2];c[E>>2]=c[G>>2];}if((c[D>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;if(((c[E>>2]|0?(q=(c[z>>2]|0)>>>0>0&1,C=Bk(c[t>>2]|0)|0,q&(C|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[I>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[J>>2]=(c[I>>2]|0)*3,C=(c[D>>2]|0)*3|0,c[K>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[I>>2]|0)>>>0>=4):0)?(c[J>>2]|0)>(c[K>>2]|0):0){c[D>>2]=c[I>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}c[L>>2]=99999999;c[M>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,L)|0;C=c[M>>2]<<2;c[N>>2]=C-(Mm((c[L>>2]|0)+1|0)|0);C=c[D>>2]<<2;c[O>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+4;if((c[M>>2]|0)>>>0>=4?(c[N>>2]|0)>(c[O>>2]|0):0){c[D>>2]=c[M>>2];c[E>>2]=c[L>>2];c[F>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;do{if((c[E>>2]|0?(C=(c[z>>2]|0)>>>0>0&1,q=Bk(c[t>>2]|0)|0,C&(q|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[P>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[Q>>2]=c[P>>2]<<2,q=c[D>>2]<<2,c[R>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[P>>2]|0)>>>0>=4):0){if((c[Q>>2]|0)<=(c[R>>2]|0))break;c[D>>2]=c[P>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}}while(0);c[S>>2]=99999999;c[T>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,S)|0;q=c[T>>2]<<2;c[U>>2]=q-(Mm((c[S>>2]|0)+1|0)|0);q=c[D>>2]<<2;c[V>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+7;if((c[T>>2]|0)>>>0<4)break a;if((c[U>>2]|0)<=(c[V>>2]|0))break a;c[D>>2]=c[T>>2];c[E>>2]=c[S>>2];c[F>>2]=c[t>>2];}}while(0);if(c[E>>2]|0){while(1){if(!(((c[F>>2]|0)>>>0>(c[u>>2]|0)>>>0?((c[F>>2]|0)+(0-((c[E>>2]|0)-2))|0)>>>0>(c[x>>2]|0)>>>0:0)|0))break;if((d[(c[F>>2]|0)+-1>>0]|0|0)!=(d[(c[F>>2]|0)+(0-((c[E>>2]|0)-2))+-1>>0]|0|0))break;c[F>>2]=(c[F>>2]|0)+-1;c[D>>2]=(c[D>>2]|0)+1;}c[A>>2]=c[z>>2];c[z>>2]=(c[E>>2]|0)-2;}}c[W>>2]=(c[F>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[W>>2]|0,c[u>>2]|0,c[E>>2]|0,(c[D>>2]|0)-3|0);q=(c[F>>2]|0)+(c[D>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if(!(((c[A>>2]|0)>>>0>0?(c[t>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk((c[t>>2]|0)+(0-(c[A>>2]|0))|0)|0))break;c[D>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[A>>2]|0))|0,c[v>>2]|0)|0)+4;c[E>>2]=c[A>>2];c[A>>2]=c[z>>2];c[z>>2]=c[E>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[D>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[D>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[z>>2]|0?c[z>>2]|0:c[B>>2]|0;c[(c[m>>2]|0)+4>>2]=c[A>>2]|0?c[A>>2]|0:c[B>>2]|0;l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function _l(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;i=l;l=l+192|0;j=i+176|0;k=i+172|0;m=i+168|0;n=i+164|0;o=i+160|0;p=i+156|0;q=i+152|0;r=i+148|0;s=i+144|0;t=i+140|0;u=i+136|0;v=i+132|0;w=i+128|0;x=i+124|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+72|0;L=i+68|0;M=i+64|0;N=i+60|0;O=i+56|0;P=i+52|0;Q=i+48|0;R=i+44|0;S=i+40|0;T=i+36|0;U=i+32|0;V=i+28|0;W=i+24|0;X=i+20|0;Y=i+16|0;Z=i+12|0;_=i+8|0;$=i+4|0;aa=i;c[X>>2]=a;c[Y>>2]=b;c[Z>>2]=e;c[_>>2]=f;c[$>>2]=g;c[aa>>2]=h;h=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;c[j>>2]=c[X>>2];c[k>>2]=h;c[m>>2]=Y;c[n>>2]=Z;c[o>>2]=_;c[p>>2]=$;c[q>>2]=0;c[r>>2]=1;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[y>>2]=c[q>>2]|0?5:4;c[z>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[m>>2]|0)+4>>2];c[B>>2]=0;c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[x>>2]|0)&1);c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[C>>2]=(c[t>>2]|0)-(c[x>>2]|0);if((c[A>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[A>>2];c[A>>2]=0;}if((c[z>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[z>>2];c[z>>2]=0;}while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[D>>2]=0;c[E>>2]=0;c[F>>2]=(c[t>>2]|0)+1;C=(c[z>>2]|0)>>>0>0&1;q=Bk((c[t>>2]|0)+1|0)|0;if(!(C&(q|0)==(Bk((c[t>>2]|0)+1+(0-(c[z>>2]|0))|0)|0)|0?(c[D>>2]=(Qm((c[t>>2]|0)+1+4|0,(c[t>>2]|0)+1+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[G>>2]=99999999;c[H>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,G)|0;if((c[H>>2]|0)>>>0>(c[D>>2]|0)>>>0){c[D>>2]=c[H>>2];c[F>>2]=c[t>>2];c[E>>2]=c[G>>2];}if((c[D>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;if(((c[E>>2]|0?(q=(c[z>>2]|0)>>>0>0&1,C=Bk(c[t>>2]|0)|0,q&(C|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[I>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[J>>2]=(c[I>>2]|0)*3,C=(c[D>>2]|0)*3|0,c[K>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[I>>2]|0)>>>0>=4):0)?(c[J>>2]|0)>(c[K>>2]|0):0){c[D>>2]=c[I>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}c[L>>2]=99999999;c[M>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,L)|0;C=c[M>>2]<<2;c[N>>2]=C-(Mm((c[L>>2]|0)+1|0)|0);C=c[D>>2]<<2;c[O>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+4;if((c[M>>2]|0)>>>0>=4?(c[N>>2]|0)>(c[O>>2]|0):0){c[D>>2]=c[M>>2];c[E>>2]=c[L>>2];c[F>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;do{if((c[E>>2]|0?(C=(c[z>>2]|0)>>>0>0&1,q=Bk(c[t>>2]|0)|0,C&(q|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[P>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[Q>>2]=c[P>>2]<<2,q=c[D>>2]<<2,c[R>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[P>>2]|0)>>>0>=4):0){if((c[Q>>2]|0)<=(c[R>>2]|0))break;c[D>>2]=c[P>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}}while(0);c[S>>2]=99999999;c[T>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,S)|0;q=c[T>>2]<<2;c[U>>2]=q-(Mm((c[S>>2]|0)+1|0)|0);q=c[D>>2]<<2;c[V>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+7;if((c[T>>2]|0)>>>0<4)break a;if((c[U>>2]|0)<=(c[V>>2]|0))break a;c[D>>2]=c[T>>2];c[E>>2]=c[S>>2];c[F>>2]=c[t>>2];}}while(0);if(c[E>>2]|0){while(1){if(!(((c[F>>2]|0)>>>0>(c[u>>2]|0)>>>0?((c[F>>2]|0)+(0-((c[E>>2]|0)-2))|0)>>>0>(c[x>>2]|0)>>>0:0)|0))break;if((d[(c[F>>2]|0)+-1>>0]|0|0)!=(d[(c[F>>2]|0)+(0-((c[E>>2]|0)-2))+-1>>0]|0|0))break;c[F>>2]=(c[F>>2]|0)+-1;c[D>>2]=(c[D>>2]|0)+1;}c[A>>2]=c[z>>2];c[z>>2]=(c[E>>2]|0)-2;}}c[W>>2]=(c[F>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[W>>2]|0,c[u>>2]|0,c[E>>2]|0,(c[D>>2]|0)-3|0);q=(c[F>>2]|0)+(c[D>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if(!(((c[A>>2]|0)>>>0>0?(c[t>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk((c[t>>2]|0)+(0-(c[A>>2]|0))|0)|0))break;c[D>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[A>>2]|0))|0,c[v>>2]|0)|0)+4;c[E>>2]=c[A>>2];c[A>>2]=c[z>>2];c[z>>2]=c[E>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[D>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[D>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[z>>2]|0?c[z>>2]|0:c[B>>2]|0;c[(c[m>>2]|0)+4>>2]=c[A>>2]|0?c[A>>2]|0:c[B>>2]|0;l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function $l(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;i=l;l=l+192|0;j=i+176|0;k=i+172|0;m=i+168|0;n=i+164|0;o=i+160|0;p=i+156|0;q=i+152|0;r=i+148|0;s=i+144|0;t=i+140|0;u=i+136|0;v=i+132|0;w=i+128|0;x=i+124|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+72|0;L=i+68|0;M=i+64|0;N=i+60|0;O=i+56|0;P=i+52|0;Q=i+48|0;R=i+44|0;S=i+40|0;T=i+36|0;U=i+32|0;V=i+28|0;W=i+24|0;X=i+20|0;Y=i+16|0;Z=i+12|0;_=i+8|0;$=i+4|0;aa=i;c[X>>2]=a;c[Y>>2]=b;c[Z>>2]=e;c[_>>2]=f;c[$>>2]=g;c[aa>>2]=h;h=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;c[j>>2]=c[X>>2];c[k>>2]=h;c[m>>2]=Y;c[n>>2]=Z;c[o>>2]=_;c[p>>2]=$;c[q>>2]=0;c[r>>2]=2;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[y>>2]=c[q>>2]|0?5:4;c[z>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[m>>2]|0)+4>>2];c[B>>2]=0;c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[x>>2]|0)&1);c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[C>>2]=(c[t>>2]|0)-(c[x>>2]|0);if((c[A>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[A>>2];c[A>>2]=0;}if((c[z>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[z>>2];c[z>>2]=0;}while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[D>>2]=0;c[E>>2]=0;c[F>>2]=(c[t>>2]|0)+1;C=(c[z>>2]|0)>>>0>0&1;q=Bk((c[t>>2]|0)+1|0)|0;if(!(C&(q|0)==(Bk((c[t>>2]|0)+1+(0-(c[z>>2]|0))|0)|0)|0?(c[D>>2]=(Qm((c[t>>2]|0)+1+4|0,(c[t>>2]|0)+1+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[G>>2]=99999999;c[H>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,G)|0;if((c[H>>2]|0)>>>0>(c[D>>2]|0)>>>0){c[D>>2]=c[H>>2];c[F>>2]=c[t>>2];c[E>>2]=c[G>>2];}if((c[D>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;if(((c[E>>2]|0?(q=(c[z>>2]|0)>>>0>0&1,C=Bk(c[t>>2]|0)|0,q&(C|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[I>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[J>>2]=(c[I>>2]|0)*3,C=(c[D>>2]|0)*3|0,c[K>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[I>>2]|0)>>>0>=4):0)?(c[J>>2]|0)>(c[K>>2]|0):0){c[D>>2]=c[I>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}c[L>>2]=99999999;c[M>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,L)|0;C=c[M>>2]<<2;c[N>>2]=C-(Mm((c[L>>2]|0)+1|0)|0);C=c[D>>2]<<2;c[O>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+4;if((c[M>>2]|0)>>>0>=4?(c[N>>2]|0)>(c[O>>2]|0):0){c[D>>2]=c[M>>2];c[E>>2]=c[L>>2];c[F>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;do{if((c[E>>2]|0?(C=(c[z>>2]|0)>>>0>0&1,q=Bk(c[t>>2]|0)|0,C&(q|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[P>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[Q>>2]=c[P>>2]<<2,q=c[D>>2]<<2,c[R>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[P>>2]|0)>>>0>=4):0){if((c[Q>>2]|0)<=(c[R>>2]|0))break;c[D>>2]=c[P>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}}while(0);c[S>>2]=99999999;c[T>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,S)|0;q=c[T>>2]<<2;c[U>>2]=q-(Mm((c[S>>2]|0)+1|0)|0);q=c[D>>2]<<2;c[V>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+7;if((c[T>>2]|0)>>>0<4)break a;if((c[U>>2]|0)<=(c[V>>2]|0))break a;c[D>>2]=c[T>>2];c[E>>2]=c[S>>2];c[F>>2]=c[t>>2];}}while(0);if(c[E>>2]|0){while(1){if(!(((c[F>>2]|0)>>>0>(c[u>>2]|0)>>>0?((c[F>>2]|0)+(0-((c[E>>2]|0)-2))|0)>>>0>(c[x>>2]|0)>>>0:0)|0))break;if((d[(c[F>>2]|0)+-1>>0]|0|0)!=(d[(c[F>>2]|0)+(0-((c[E>>2]|0)-2))+-1>>0]|0|0))break;c[F>>2]=(c[F>>2]|0)+-1;c[D>>2]=(c[D>>2]|0)+1;}c[A>>2]=c[z>>2];c[z>>2]=(c[E>>2]|0)-2;}}c[W>>2]=(c[F>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[W>>2]|0,c[u>>2]|0,c[E>>2]|0,(c[D>>2]|0)-3|0);q=(c[F>>2]|0)+(c[D>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if(!(((c[A>>2]|0)>>>0>0?(c[t>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk((c[t>>2]|0)+(0-(c[A>>2]|0))|0)|0))break;c[D>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[A>>2]|0))|0,c[v>>2]|0)|0)+4;c[E>>2]=c[A>>2];c[A>>2]=c[z>>2];c[z>>2]=c[E>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[D>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[D>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[z>>2]|0?c[z>>2]|0:c[B>>2]|0;c[(c[m>>2]|0)+4>>2]=c[A>>2]|0?c[A>>2]|0:c[B>>2]|0;l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function am(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;i=l;l=l+192|0;j=i+176|0;k=i+172|0;m=i+168|0;n=i+164|0;o=i+160|0;p=i+156|0;q=i+152|0;r=i+148|0;s=i+144|0;t=i+140|0;u=i+136|0;v=i+132|0;w=i+128|0;x=i+124|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+72|0;L=i+68|0;M=i+64|0;N=i+60|0;O=i+56|0;P=i+52|0;Q=i+48|0;R=i+44|0;S=i+40|0;T=i+36|0;U=i+32|0;V=i+28|0;W=i+24|0;X=i+20|0;Y=i+16|0;Z=i+12|0;_=i+8|0;$=i+4|0;aa=i;c[X>>2]=a;c[Y>>2]=b;c[Z>>2]=e;c[_>>2]=f;c[$>>2]=g;c[aa>>2]=h;h=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;c[j>>2]=c[X>>2];c[k>>2]=h;c[m>>2]=Y;c[n>>2]=Z;c[o>>2]=_;c[p>>2]=$;c[q>>2]=1;c[r>>2]=2;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[y>>2]=c[q>>2]|0?5:4;c[z>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[m>>2]|0)+4>>2];c[B>>2]=0;c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[x>>2]|0)&1);c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[C>>2]=(c[t>>2]|0)-(c[x>>2]|0);if((c[A>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[A>>2];c[A>>2]=0;}if((c[z>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[z>>2];c[z>>2]=0;}while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[D>>2]=0;c[E>>2]=0;c[F>>2]=(c[t>>2]|0)+1;C=(c[z>>2]|0)>>>0>0&1;q=Bk((c[t>>2]|0)+1|0)|0;if(!(C&(q|0)==(Bk((c[t>>2]|0)+1+(0-(c[z>>2]|0))|0)|0)|0?(c[D>>2]=(Qm((c[t>>2]|0)+1+4|0,(c[t>>2]|0)+1+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[G>>2]=99999999;c[H>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,G)|0;if((c[H>>2]|0)>>>0>(c[D>>2]|0)>>>0){c[D>>2]=c[H>>2];c[F>>2]=c[t>>2];c[E>>2]=c[G>>2];}if((c[D>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;if(((c[E>>2]|0?(q=(c[z>>2]|0)>>>0>0&1,C=Bk(c[t>>2]|0)|0,q&(C|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[I>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[J>>2]=(c[I>>2]|0)*3,C=(c[D>>2]|0)*3|0,c[K>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[I>>2]|0)>>>0>=4):0)?(c[J>>2]|0)>(c[K>>2]|0):0){c[D>>2]=c[I>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}c[L>>2]=99999999;c[M>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,L)|0;C=c[M>>2]<<2;c[N>>2]=C-(Mm((c[L>>2]|0)+1|0)|0);C=c[D>>2]<<2;c[O>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+4;if((c[M>>2]|0)>>>0>=4?(c[N>>2]|0)>(c[O>>2]|0):0){c[D>>2]=c[M>>2];c[E>>2]=c[L>>2];c[F>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;do{if((c[E>>2]|0?(C=(c[z>>2]|0)>>>0>0&1,q=Bk(c[t>>2]|0)|0,C&(q|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[P>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[Q>>2]=c[P>>2]<<2,q=c[D>>2]<<2,c[R>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[P>>2]|0)>>>0>=4):0){if((c[Q>>2]|0)<=(c[R>>2]|0))break;c[D>>2]=c[P>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}}while(0);c[S>>2]=99999999;c[T>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,S)|0;q=c[T>>2]<<2;c[U>>2]=q-(Mm((c[S>>2]|0)+1|0)|0);q=c[D>>2]<<2;c[V>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+7;if((c[T>>2]|0)>>>0<4)break a;if((c[U>>2]|0)<=(c[V>>2]|0))break a;c[D>>2]=c[T>>2];c[E>>2]=c[S>>2];c[F>>2]=c[t>>2];}}while(0);if(c[E>>2]|0){while(1){if(!(((c[F>>2]|0)>>>0>(c[u>>2]|0)>>>0?((c[F>>2]|0)+(0-((c[E>>2]|0)-2))|0)>>>0>(c[x>>2]|0)>>>0:0)|0))break;if((d[(c[F>>2]|0)+-1>>0]|0|0)!=(d[(c[F>>2]|0)+(0-((c[E>>2]|0)-2))+-1>>0]|0|0))break;c[F>>2]=(c[F>>2]|0)+-1;c[D>>2]=(c[D>>2]|0)+1;}c[A>>2]=c[z>>2];c[z>>2]=(c[E>>2]|0)-2;}}c[W>>2]=(c[F>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[W>>2]|0,c[u>>2]|0,c[E>>2]|0,(c[D>>2]|0)-3|0);q=(c[F>>2]|0)+(c[D>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if(!(((c[A>>2]|0)>>>0>0?(c[t>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk((c[t>>2]|0)+(0-(c[A>>2]|0))|0)|0))break;c[D>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[A>>2]|0))|0,c[v>>2]|0)|0)+4;c[E>>2]=c[A>>2];c[A>>2]=c[z>>2];c[z>>2]=c[E>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[D>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[D>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[z>>2]|0?c[z>>2]|0:c[B>>2]|0;c[(c[m>>2]|0)+4>>2]=c[A>>2]|0?c[A>>2]|0:c[B>>2]|0;l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function bm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0;i=l;l=l+2144|0;j=i+2136|0;k=i+2132|0;m=i+2128|0;n=i+2124|0;o=i+2120|0;p=i+2116|0;q=i+2112|0;r=i+2108|0;s=i+2104|0;t=i+2100|0;u=i+2096|0;v=i+2092|0;w=i+2088|0;x=i+2084|0;y=i+2080|0;z=i+2076|0;A=i+2072|0;B=i+2068|0;C=i+2064|0;D=i+2060|0;E=i+2056|0;F=i+2052|0;G=i+2048|0;H=i+2044|0;I=i+2040|0;J=i+2036|0;K=i+2032|0;L=i+2028|0;M=i+2024|0;N=i+2020|0;O=i+2016|0;P=i+2012|0;Q=i+2008|0;R=i+2004|0;S=i+2e3|0;T=i+1996|0;U=i+1992|0;V=i+1988|0;W=i+1984|0;X=i+1980|0;Y=i+1976|0;Z=i+1972|0;_=i+1968|0;$=i+1964|0;aa=i+1960|0;ba=i+1956|0;ca=i+1952|0;da=i+1948|0;ea=i+1944|0;fa=i+1940|0;ga=i+1936|0;ha=i+1932|0;ia=i+1928|0;ja=i+1924|0;ka=i+1920|0;la=i+1916|0;ma=i+1912|0;na=i+1908|0;oa=i+1904|0;pa=i+1900|0;qa=i+1896|0;ra=i+1892|0;sa=i+1888|0;ta=i+1884|0;ua=i+1880|0;va=i+1876|0;wa=i+1872|0;xa=i+1868|0;ya=i+1864|0;za=i+1860|0;Aa=i+1856|0;Ba=i+1852|0;Ca=i+1848|0;Da=i+1844|0;Ea=i+1840|0;Fa=i+1836|0;Ga=i+1832|0;Ha=i+1828|0;Ia=i+1824|0;Ja=i+1820|0;Ka=i+1816|0;La=i+1812|0;Ma=i+1808|0;Na=i+1804|0;Oa=i+1800|0;Pa=i+1796|0;Qa=i+1792|0;Ra=i+1788|0;Sa=i+1784|0;Ta=i+1780|0;Ua=i+1776|0;Va=i+1772|0;Wa=i+1768|0;Xa=i+1764|0;Ya=i+1760|0;Za=i+1756|0;_a=i+1752|0;$a=i+1748|0;ab=i+1744|0;bb=i+1740|0;cb=i+1736|0;db=i+1732|0;eb=i+1728|0;fb=i+1724|0;gb=i+1720|0;hb=i+1716|0;ib=i+1712|0;jb=i+1708|0;kb=i+1704|0;lb=i+1700|0;mb=i+1696|0;nb=i+1692|0;ob=i+1688|0;pb=i+1684|0;qb=i+1680|0;rb=i+1676|0;sb=i+1672|0;tb=i+1668|0;ub=i+1664|0;vb=i+1660|0;wb=i+1656|0;xb=i+1652|0;yb=i+1648|0;zb=i+1644|0;Ab=i+1640|0;Bb=i+1636|0;Cb=i+1632|0;Db=i+1628|0;Eb=i+1624|0;Fb=i+1620|0;Gb=i+1616|0;Hb=i+1612|0;Ib=i+1608|0;Jb=i+1604|0;Kb=i+1600|0;Lb=i+1596|0;Mb=i+1592|0;Nb=i+1588|0;Ob=i+1584|0;Pb=i+1580|0;Qb=i+1576|0;Rb=i+1572|0;Sb=i+1568|0;Tb=i+1564|0;Ub=i+1560|0;Vb=i+1556|0;Wb=i+1552|0;Xb=i+1548|0;Yb=i+1544|0;Zb=i+1540|0;_b=i+1536|0;$b=i+1532|0;ac=i+1528|0;bc=i+1524|0;cc=i+1520|0;dc=i+1516|0;ec=i+1512|0;fc=i+1508|0;gc=i+1504|0;hc=i+1500|0;ic=i+1496|0;jc=i+1492|0;kc=i+1488|0;lc=i+1484|0;mc=i+1480|0;nc=i+1476|0;oc=i+1472|0;pc=i+1468|0;qc=i+1464|0;rc=i+1460|0;sc=i+1456|0;tc=i+1452|0;uc=i+1448|0;vc=i+1444|0;wc=i+1440|0;xc=i+1436|0;yc=i+1432|0;zc=i+1428|0;Ac=i+1424|0;Bc=i+1420|0;Cc=i+1416|0;Dc=i+1412|0;Ec=i+1408|0;Fc=i+1404|0;Gc=i+1400|0;Hc=i+1396|0;Ic=i+1392|0;Jc=i+1388|0;Kc=i+1384|0;Lc=i+1380|0;Mc=i+1376|0;Nc=i+1372|0;Oc=i+1368|0;Pc=i+1364|0;Qc=i+1360|0;Rc=i+1356|0;Sc=i+1352|0;Tc=i+1348|0;Uc=i+1344|0;Vc=i+1340|0;Wc=i+1336|0;Xc=i+1332|0;Yc=i+1328|0;Zc=i+1324|0;_c=i+1320|0;$c=i+1316|0;ad=i+1312|0;bd=i+1308|0;cd=i+1304|0;dd=i+1300|0;ed=i+1296|0;fd=i+1292|0;gd=i+1288|0;hd=i+1284|0;id=i+1280|0;jd=i+1276|0;kd=i+1272|0;ld=i+1268|0;md=i+1264|0;nd=i+1260|0;od=i+1256|0;pd=i+1252|0;qd=i+1248|0;rd=i+1244|0;sd=i+1240|0;td=i+1236|0;ud=i+1232|0;vd=i+1228|0;wd=i+1224|0;xd=i+1220|0;yd=i+1216|0;zd=i+1212|0;Ad=i+1208|0;Bd=i+1204|0;Cd=i+1200|0;Dd=i+1196|0;Ed=i+1192|0;Fd=i+1188|0;Gd=i+1184|0;Hd=i+1180|0;Id=i+1176|0;Jd=i+1172|0;Kd=i+1168|0;Ld=i+1164|0;Md=i+1160|0;Nd=i+1156|0;Od=i+1152|0;Pd=i+1148|0;Qd=i+1144|0;Rd=i+1140|0;Sd=i+1136|0;Td=i+1132|0;Ud=i+1128|0;Vd=i+1124|0;Wd=i+1120|0;Xd=i+1116|0;Yd=i+1112|0;Zd=i+1108|0;_d=i+1104|0;$d=i+1100|0;ae=i+1096|0;be=i+1092|0;ce=i+1088|0;de=i+1084|0;ee=i+1080|0;fe=i+1076|0;ge=i+1072|0;he=i+1068|0;ie=i+1064|0;je=i+1060|0;ke=i+1056|0;le=i+1052|0;me=i+1048|0;ne=i+1044|0;oe=i+1040|0;pe=i+1036|0;qe=i+1032|0;re=i+1028|0;se=i+1024|0;te=i+1020|0;ue=i+1016|0;ve=i+1012|0;we=i+1008|0;xe=i+1004|0;ye=i+1e3|0;ze=i+996|0;Ae=i+992|0;Be=i+988|0;Ce=i+984|0;De=i+980|0;Ee=i+976|0;Fe=i+972|0;Ge=i+968|0;He=i+964|0;Ie=i+960|0;Je=i+956|0;Ke=i+952|0;Le=i+948|0;Me=i+944|0;Ne=i+940|0;Oe=i+936|0;Pe=i+932|0;Qe=i+928|0;Re=i+924|0;Se=i+920|0;Te=i+916|0;Ue=i+912|0;Ve=i+908|0;We=i+904|0;Xe=i+900|0;Ye=i+896|0;Ze=i+892|0;_e=i+888|0;$e=i+884|0;af=i+880|0;bf=i+876|0;cf=i+872|0;df=i+868|0;ef=i+864|0;ff=i+860|0;gf=i+856|0;hf=i+852|0;jf=i+848|0;kf=i+844|0;lf=i+840|0;mf=i+836|0;nf=i+832|0;of=i+828|0;pf=i+824|0;qf=i+820|0;rf=i+816|0;sf=i+812|0;tf=i+808|0;uf=i+804|0;vf=i+800|0;wf=i+796|0;xf=i+792|0;yf=i+788|0;zf=i+784|0;Af=i+780|0;Bf=i+776|0;Cf=i+772|0;Df=i+768|0;Ef=i+764|0;Ff=i+760|0;Gf=i+756|0;Hf=i+752|0;If=i+748|0;Jf=i+744|0;Kf=i+740|0;Lf=i+736|0;Mf=i+732|0;Nf=i+728|0;Of=i+724|0;Pf=i+720|0;Qf=i+716|0;Rf=i+712|0;Sf=i+708|0;Tf=i+704|0;Uf=i+700|0;Vf=i+696|0;Wf=i+692|0;Xf=i+688|0;Yf=i+684|0;Zf=i+680|0;_f=i+676|0;$f=i+672|0;ag=i+668|0;bg=i+664|0;cg=i+660|0;dg=i+656|0;eg=i+652|0;fg=i+648|0;gg=i+644|0;hg=i+640|0;ig=i+636|0;jg=i+632|0;kg=i+628|0;lg=i+624|0;mg=i+620|0;ng=i+616|0;og=i+612|0;pg=i+608|0;qg=i+604|0;rg=i+600|0;sg=i+596|0;tg=i+592|0;ug=i+588|0;vg=i+584|0;wg=i+580|0;xg=i+576|0;yg=i+572|0;zg=i+568|0;Ag=i+564|0;Bg=i+560|0;Cg=i+556|0;Dg=i+552|0;Eg=i+548|0;Fg=i+544|0;Gg=i+540|0;Hg=i+536|0;Ig=i+532|0;Jg=i+528|0;Kg=i+524|0;Lg=i+520|0;Mg=i+516|0;Ng=i+512|0;Og=i+508|0;Pg=i+504|0;Qg=i+500|0;Rg=i+496|0;Sg=i+492|0;Tg=i+488|0;Ug=i+484|0;Vg=i+480|0;Wg=i+476|0;Xg=i+472|0;Yg=i+468|0;Zg=i+464|0;_g=i+460|0;$g=i+456|0;ah=i+452|0;bh=i+448|0;ch=i+444|0;dh=i+440|0;eh=i+436|0;fh=i+432|0;gh=i+428|0;hh=i+424|0;ih=i+420|0;jh=i+416|0;kh=i+412|0;lh=i+408|0;mh=i+404|0;nh=i+400|0;oh=i+396|0;ph=i+392|0;qh=i+388|0;rh=i+384|0;sh=i+380|0;th=i+376|0;uh=i+372|0;vh=i+368|0;wh=i+364|0;xh=i+360|0;yh=i+356|0;zh=i+352|0;Ah=i+348|0;Bh=i+344|0;Ch=i+340|0;Dh=i+336|0;Eh=i+332|0;Fh=i+328|0;Gh=i+324|0;Hh=i+320|0;Ih=i+316|0;Jh=i+312|0;Kh=i+308|0;Lh=i+304|0;Mh=i+300|0;Nh=i+296|0;Oh=i+292|0;Ph=i+288|0;Qh=i+284|0;Rh=i+280|0;Sh=i+276|0;Th=i+272|0;Uh=i+268|0;Vh=i+264|0;Wh=i+260|0;Xh=i+256|0;Yh=i+252|0;Zh=i+248|0;_h=i+244|0;$h=i+240|0;ai=i+236|0;bi=i+232|0;ci=i+228|0;di=i+216|0;ei=i+212|0;fi=i+208|0;gi=i+204|0;hi=i+200|0;ii=i+196|0;ji=i+192|0;ki=i+188|0;li=i+184|0;mi=i+180|0;ni=i+176|0;oi=i+172|0;pi=i+168|0;qi=i+164|0;ri=i+160|0;si=i+148|0;ti=i+144|0;ui=i+140|0;vi=i+136|0;wi=i+132|0;xi=i+128|0;yi=i+124|0;zi=i+120|0;Ai=i+116|0;Bi=i+112|0;Ci=i+108|0;Di=i+104|0;Ei=i+100|0;Fi=i+88|0;Gi=i+84|0;Hi=i+80|0;Ii=i+76|0;Ji=i+72|0;Ki=i+68|0;Li=i+64|0;Mi=i+60|0;Ni=i+56|0;Oi=i+52|0;Pi=i+48|0;Qi=i+44|0;Ri=i+40|0;Si=i+36|0;Ti=i+32|0;Ui=i+28|0;Vi=i+24|0;Wi=i+20|0;Xi=i+16|0;Yi=i+12|0;Zi=i+8|0;_i=i+4|0;$i=i;c[Wi>>2]=a;c[Xi>>2]=b;c[Yi>>2]=e;c[Zi>>2]=f;c[_i>>2]=g;c[$i>>2]=h;h=c[Xi>>2]|0;Xi=c[Yi>>2]|0;Yi=c[Zi>>2]|0;Zi=c[_i>>2]|0;_i=c[$i>>2]|0;c[Lh>>2]=c[Wi>>2];c[Mh>>2]=h;c[Nh>>2]=Xi;c[Oh>>2]=Yi;c[Ph>>2]=Zi;c[Qh>>2]=_i;c[Rh>>2]=0;c[Sh>>2]=0;c[Th>>2]=(c[Lh>>2]|0)+48;c[Uh>>2]=c[Ph>>2];c[Vh>>2]=c[Uh>>2];c[Wh>>2]=c[Uh>>2];c[Xh>>2]=(c[Uh>>2]|0)+(c[Qh>>2]|0);c[Yh>>2]=(c[Xh>>2]|0)+-8;c[Zh>>2]=c[(c[Lh>>2]|0)+4>>2];c[_h>>2]=(c[Zh>>2]|0)+(c[(c[Lh>>2]|0)+12>>2]|0);if((c[(c[Oh>>2]|0)+20>>2]|0)>>>0<4095)aj=c[(c[Oh>>2]|0)+20>>2]|0;else aj=4095;c[$h>>2]=aj;c[ai>>2]=(c[(c[Oh>>2]|0)+16>>2]|0)==3?3:4;c[bi>>2]=c[(c[Th>>2]|0)+20>>2];c[ci>>2]=c[(c[Th>>2]|0)+16>>2];c[(c[Lh>>2]|0)+28>>2]=c[(c[Lh>>2]|0)+24>>2];lm(c[Th>>2]|0,c[Ph>>2]|0,c[Qh>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+((c[Vh>>2]|0)==(c[_h>>2]|0)&1);c[di>>2]=0;c[di+4>>2]=0;c[di+8>>2]=0;while(1){if((c[Vh>>2]|0)>>>0>=(c[Yh>>2]|0)>>>0)break;c[fi>>2]=0;c[ii>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[ji>>2]=((c[ii>>2]|0)!=0^1)&1;_h=c[Oh>>2]|0;Qh=c[Vh>>2]|0;Ph=c[Xh>>2]|0;aj=c[Sh>>2]|0;Zh=c[Nh>>2]|0;Uh=c[ji>>2]|0;_i=c[ci>>2]|0;Zi=c[ai>>2]|0;c[Bh>>2]=c[Lh>>2];c[Ch>>2]=_h;c[Dh>>2]=Qh;c[Eh>>2]=Ph;c[Fh>>2]=aj;c[Gh>>2]=Zh;c[Hh>>2]=Uh;c[Ih>>2]=_i;c[Jh>>2]=Zi;c[Kh>>2]=c[(c[Ch>>2]|0)+16>>2];a:do{if((c[Dh>>2]|0)>>>0<((c[(c[Bh>>2]|0)+4>>2]|0)+(c[(c[Bh>>2]|0)+24>>2]|0)|0)>>>0)c[Ah>>2]=0;else{Zi=c[Ch>>2]|0;_i=c[Dh>>2]|0;Uh=c[Eh>>2]|0;Zh=c[Kh>>2]|0;aj=c[Fh>>2]|0;c[rh>>2]=c[Bh>>2];c[sh>>2]=Zi;c[th>>2]=_i;c[uh>>2]=Uh;c[vh>>2]=Zh;c[wh>>2]=aj;c[xh>>2]=c[(c[rh>>2]|0)+4>>2];c[yh>>2]=(c[th>>2]|0)-(c[xh>>2]|0);c[zh>>2]=c[(c[rh>>2]|0)+24>>2];while(1){if((c[zh>>2]|0)>>>0>=(c[yh>>2]|0)>>>0)break;aj=Rj(c[rh>>2]|0,c[sh>>2]|0,(c[xh>>2]|0)+(c[zh>>2]|0)|0,c[uh>>2]|0,c[vh>>2]|0,c[wh>>2]|0)|0;c[zh>>2]=(c[zh>>2]|0)+aj;}c[(c[rh>>2]|0)+24>>2]=c[yh>>2];switch(c[Kh>>2]|0){case 3:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[wg>>2]=c[Bh>>2];c[xg>>2]=aj;c[yg>>2]=Zh;c[zg>>2]=Uh;c[Ag>>2]=_i;c[Bg>>2]=Zi;c[Cg>>2]=Ph;c[Dg>>2]=Qh;c[Eg>>2]=_h;c[Fg>>2]=3;if((c[(c[xg>>2]|0)+20>>2]|0)>>>0<4095)bj=c[(c[xg>>2]|0)+20>>2]|0;else bj=4095;c[Gg>>2]=bj;c[Hg>>2]=c[(c[wg>>2]|0)+4>>2];c[Ig>>2]=(c[yg>>2]|0)-(c[Hg>>2]|0);c[Jg>>2]=c[(c[xg>>2]|0)+8>>2];c[Kg>>2]=(c[Fg>>2]|0)==3?3:4;c[Lg>>2]=c[(c[wg>>2]|0)+36>>2];c[Mg>>2]=Sj(c[yg>>2]|0,c[Jg>>2]|0,c[Fg>>2]|0)|0;c[Ng>>2]=c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2];c[Og>>2]=c[(c[wg>>2]|0)+44>>2];c[Pg>>2]=(c[(c[xg>>2]|0)+4>>2]|0)-1;c[Qg>>2]=(1<<c[Pg>>2])-1;c[Rg>>2]=0;c[Sg>>2]=0;c[Tg>>2]=c[(c[wg>>2]|0)+8>>2];c[Ug>>2]=c[(c[wg>>2]|0)+12>>2];c[Vg>>2]=(c[Tg>>2]|0)+(c[Ug>>2]|0);c[Wg>>2]=(c[Hg>>2]|0)+(c[Ug>>2]|0);if((c[Qg>>2]|0)>>>0>=(c[Ig>>2]|0)>>>0)cj=0;else cj=(c[Ig>>2]|0)-(c[Qg>>2]|0)|0;c[Xg>>2]=cj;c[Yg>>2]=c[(c[wg>>2]|0)+16>>2];c[Zg>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2);c[_g>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2)+4;c[$g>>2]=(c[Ig>>2]|0)+8+1;c[bh>>2]=0;c[ch>>2]=1<<c[(c[xg>>2]|0)+12>>2];c[dh>>2]=(c[Eg>>2]|0)-1;c[eh>>2]=3+(c[Cg>>2]|0);c[fh>>2]=c[Cg>>2];while(1){if((c[fh>>2]|0)>>>0>=(c[eh>>2]|0)>>>0){dj=31;break;}_h=c[Bg>>2]|0;if((c[fh>>2]|0)==3)ej=(c[_h>>2]|0)-1|0;else ej=c[_h+(c[fh>>2]<<2)>>2]|0;c[gh>>2]=ej;c[hh>>2]=(c[Ig>>2]|0)-(c[gh>>2]|0);c[ih>>2]=0;if(((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Ug>>2]|0)|0)>>>0){_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0;if((_h|0)==(mm((c[yg>>2]|0)+(0-(c[gh>>2]|0))|0,c[Kg>>2]|0)|0)){_h=Tj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[yg>>2]|0)+(c[Kg>>2]|0)+(0-(c[gh>>2]|0))|0,c[zg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}else{c[jh>>2]=(c[Tg>>2]|0)+(c[hh>>2]|0);if((c[Ag>>2]|0?(((c[Ug>>2]|0)-1-(c[hh>>2]|0)|0)>>>0>=3?((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Yg>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0,(_h|0)==(mm(c[jh>>2]|0,c[Kg>>2]|0)|0)):0){_h=Uj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[jh>>2]|0)+(c[Kg>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}if((c[ih>>2]|0)>>>0>(c[dh>>2]|0)>>>0?(c[dh>>2]=c[ih>>2],c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[fh>>2]|0)-(c[Cg>>2]|0),c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ih>>2],c[bh>>2]=(c[bh>>2]|0)+1,((c[ih>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[ih>>2]|0)|0)==(c[zg>>2]|0))|0):0){dj=29;break;}c[fh>>2]=(c[fh>>2]|0)+1;}do{if((dj|0)==29){dj=0;c[vg>>2]=c[bh>>2];}else if((dj|0)==31){dj=0;if(((c[Fg>>2]|0)==3?(c[dh>>2]|0)>>>0<(c[Fg>>2]|0)>>>0:0)?(c[kh>>2]=nm(c[wg>>2]|0,c[yg>>2]|0)|0,((c[kh>>2]|0)>>>0>(c[Yg>>2]|0)>>>0?((c[Ig>>2]|0)-(c[kh>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ag>>2]|0?(c[kh>>2]|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[nh>>2]=(c[Tg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Uj(c[yg>>2]|0,c[nh>>2]|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;}else{c[mh>>2]=(c[Hg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Tj(c[yg>>2]|0,c[mh>>2]|0,c[zg>>2]|0)|0;}if((c[lh>>2]|0)>>>0>=(c[Fg>>2]|0)>>>0?(c[dh>>2]=c[lh>>2],c[c[Dg>>2]>>2]=(c[Ig>>2]|0)-(c[kh>>2]|0)+2,c[(c[Dg>>2]|0)+4>>2]=c[lh>>2],c[bh>>2]=1,((c[lh>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[lh>>2]|0)|0)==(c[zg>>2]|0))|0):0){c[(c[wg>>2]|0)+24>>2]=(c[Ig>>2]|0)+1;c[vg>>2]=1;break;}}c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2]=c[Ig>>2];while(1){_h=c[ch>>2]|0;c[ch>>2]=_h+-1;if(!_h)break;if((c[Ng>>2]|0)>>>0<=(c[Yg>>2]|0)>>>0)break;c[oh>>2]=(c[Og>>2]|0)+((c[Ng>>2]&c[Qg>>2])<<1<<2);c[ph>>2]=(c[Rg>>2]|0)>>>0<(c[Sg>>2]|0)>>>0?c[Rg>>2]|0:c[Sg>>2]|0;if(c[Ag>>2]|0?((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[qh>>2]=(c[Tg>>2]|0)+(c[Ng>>2]|0);_h=Uj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;if(((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0>=(c[Ug>>2]|0)>>>0)c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);}else{c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);_h=Tj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;}if((c[ph>>2]|0)>>>0>(c[dh>>2]|0)>>>0){if((c[ph>>2]|0)>>>0>((c[$g>>2]|0)-(c[Ng>>2]|0)|0)>>>0)c[$g>>2]=(c[Ng>>2]|0)+(c[ph>>2]|0);c[dh>>2]=c[ph>>2];c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[Ig>>2]|0)-(c[Ng>>2]|0)+2;c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ph>>2];c[bh>>2]=(c[bh>>2]|0)+1;if((c[ph>>2]|0)>>>0>4096)break;if(((c[yg>>2]|0)+(c[ph>>2]|0)|0)==(c[zg>>2]|0))break;}_h=c[Ng>>2]|0;if((d[(c[qh>>2]|0)+(c[ph>>2]|0)>>0]|0|0)<(d[(c[yg>>2]|0)+(c[ph>>2]|0)>>0]|0|0)){c[c[Zg>>2]>>2]=_h;c[Rg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=56;break;}c[Zg>>2]=(c[oh>>2]|0)+4;c[Ng>>2]=c[(c[oh>>2]|0)+4>>2];}else{c[c[_g>>2]>>2]=_h;c[Sg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=59;break;}c[_g>>2]=c[oh>>2];c[Ng>>2]=c[c[oh>>2]>>2];}}if((dj|0)==56){dj=0;c[Zg>>2]=ah;}else if((dj|0)==59){dj=0;c[_g>>2]=ah;}c[c[_g>>2]>>2]=0;c[c[Zg>>2]>>2]=0;c[(c[wg>>2]|0)+24>>2]=(c[$g>>2]|0)-8;c[vg>>2]=c[bh>>2];}}while(0);c[Ah>>2]=c[vg>>2];break a;break;}case 7:case 6:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Hd>>2]=c[Bh>>2];c[Id>>2]=_h;c[Jd>>2]=Qh;c[Kd>>2]=Ph;c[Ld>>2]=Zi;c[Md>>2]=_i;c[Nd>>2]=Uh;c[Od>>2]=Zh;c[Pd>>2]=aj;c[Qd>>2]=6;if((c[(c[Id>>2]|0)+20>>2]|0)>>>0<4095)fj=c[(c[Id>>2]|0)+20>>2]|0;else fj=4095;c[Rd>>2]=fj;c[Sd>>2]=c[(c[Hd>>2]|0)+4>>2];c[Td>>2]=(c[Jd>>2]|0)-(c[Sd>>2]|0);c[Ud>>2]=c[(c[Id>>2]|0)+8>>2];c[Vd>>2]=(c[Qd>>2]|0)==3?3:4;c[Wd>>2]=c[(c[Hd>>2]|0)+36>>2];c[Xd>>2]=Sj(c[Jd>>2]|0,c[Ud>>2]|0,c[Qd>>2]|0)|0;c[Yd>>2]=c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2];c[Zd>>2]=c[(c[Hd>>2]|0)+44>>2];c[_d>>2]=(c[(c[Id>>2]|0)+4>>2]|0)-1;c[$d>>2]=(1<<c[_d>>2])-1;c[ae>>2]=0;c[be>>2]=0;c[ce>>2]=c[(c[Hd>>2]|0)+8>>2];c[de>>2]=c[(c[Hd>>2]|0)+12>>2];c[ee>>2]=(c[ce>>2]|0)+(c[de>>2]|0);c[fe>>2]=(c[Sd>>2]|0)+(c[de>>2]|0);if((c[$d>>2]|0)>>>0>=(c[Td>>2]|0)>>>0)gj=0;else gj=(c[Td>>2]|0)-(c[$d>>2]|0)|0;c[ge>>2]=gj;c[he>>2]=c[(c[Hd>>2]|0)+16>>2];c[ie>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2);c[je>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2)+4;c[ke>>2]=(c[Td>>2]|0)+8+1;c[me>>2]=0;c[ne>>2]=1<<c[(c[Id>>2]|0)+12>>2];c[oe>>2]=(c[Pd>>2]|0)-1;c[pe>>2]=3+(c[Nd>>2]|0);c[qe>>2]=c[Nd>>2];while(1){if((c[qe>>2]|0)>>>0>=(c[pe>>2]|0)>>>0){dj=190;break;}aj=c[Md>>2]|0;if((c[qe>>2]|0)==3)hj=(c[aj>>2]|0)-1|0;else hj=c[aj+(c[qe>>2]<<2)>>2]|0;c[re>>2]=hj;c[se>>2]=(c[Td>>2]|0)-(c[re>>2]|0);c[te>>2]=0;if(((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[de>>2]|0)|0)>>>0){aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0;if((aj|0)==(mm((c[Jd>>2]|0)+(0-(c[re>>2]|0))|0,c[Vd>>2]|0)|0)){aj=Tj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[Jd>>2]|0)+(c[Vd>>2]|0)+(0-(c[re>>2]|0))|0,c[Kd>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}else{c[ue>>2]=(c[ce>>2]|0)+(c[se>>2]|0);if((c[Ld>>2]|0?(((c[de>>2]|0)-1-(c[se>>2]|0)|0)>>>0>=3?((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[he>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0,(aj|0)==(mm(c[ue>>2]|0,c[Vd>>2]|0)|0)):0){aj=Uj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[ue>>2]|0)+(c[Vd>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}if((c[te>>2]|0)>>>0>(c[oe>>2]|0)>>>0?(c[oe>>2]=c[te>>2],c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[qe>>2]|0)-(c[Nd>>2]|0),c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[te>>2],c[me>>2]=(c[me>>2]|0)+1,((c[te>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[te>>2]|0)|0)==(c[Kd>>2]|0))|0):0){dj=188;break;}c[qe>>2]=(c[qe>>2]|0)+1;}do{if((dj|0)==188){dj=0;c[Gd>>2]=c[me>>2];}else if((dj|0)==190){dj=0;if(((c[Qd>>2]|0)==3?(c[oe>>2]|0)>>>0<(c[Qd>>2]|0)>>>0:0)?(c[ve>>2]=nm(c[Hd>>2]|0,c[Jd>>2]|0)|0,((c[ve>>2]|0)>>>0>(c[he>>2]|0)>>>0?((c[Td>>2]|0)-(c[ve>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ld>>2]|0?(c[ve>>2]|0)>>>0<(c[de>>2]|0)>>>0:0){c[ye>>2]=(c[ce>>2]|0)+(c[ve>>2]|0);c[we>>2]=Uj(c[Jd>>2]|0,c[ye>>2]|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;}else{c[xe>>2]=(c[Sd>>2]|0)+(c[ve>>2]|0);c[we>>2]=Tj(c[Jd>>2]|0,c[xe>>2]|0,c[Kd>>2]|0)|0;}if((c[we>>2]|0)>>>0>=(c[Qd>>2]|0)>>>0?(c[oe>>2]=c[we>>2],c[c[Od>>2]>>2]=(c[Td>>2]|0)-(c[ve>>2]|0)+2,c[(c[Od>>2]|0)+4>>2]=c[we>>2],c[me>>2]=1,((c[we>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[we>>2]|0)|0)==(c[Kd>>2]|0))|0):0){c[(c[Hd>>2]|0)+24>>2]=(c[Td>>2]|0)+1;c[Gd>>2]=1;break;}}c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2]=c[Td>>2];while(1){aj=c[ne>>2]|0;c[ne>>2]=aj+-1;if(!aj)break;if((c[Yd>>2]|0)>>>0<=(c[he>>2]|0)>>>0)break;c[ze>>2]=(c[Zd>>2]|0)+((c[Yd>>2]&c[$d>>2])<<1<<2);c[Ae>>2]=(c[ae>>2]|0)>>>0<(c[be>>2]|0)>>>0?c[ae>>2]|0:c[be>>2]|0;if(c[Ld>>2]|0?((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0<(c[de>>2]|0)>>>0:0){c[Be>>2]=(c[ce>>2]|0)+(c[Yd>>2]|0);aj=Uj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;if(((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0>=(c[de>>2]|0)>>>0)c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);}else{c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);aj=Tj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;}if((c[Ae>>2]|0)>>>0>(c[oe>>2]|0)>>>0){if((c[Ae>>2]|0)>>>0>((c[ke>>2]|0)-(c[Yd>>2]|0)|0)>>>0)c[ke>>2]=(c[Yd>>2]|0)+(c[Ae>>2]|0);c[oe>>2]=c[Ae>>2];c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[Td>>2]|0)-(c[Yd>>2]|0)+2;c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[Ae>>2];c[me>>2]=(c[me>>2]|0)+1;if((c[Ae>>2]|0)>>>0>4096)break;if(((c[Jd>>2]|0)+(c[Ae>>2]|0)|0)==(c[Kd>>2]|0))break;}aj=c[Yd>>2]|0;if((d[(c[Be>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)<(d[(c[Jd>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)){c[c[ie>>2]>>2]=aj;c[ae>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=215;break;}c[ie>>2]=(c[ze>>2]|0)+4;c[Yd>>2]=c[(c[ze>>2]|0)+4>>2];}else{c[c[je>>2]>>2]=aj;c[be>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=218;break;}c[je>>2]=c[ze>>2];c[Yd>>2]=c[c[ze>>2]>>2];}}if((dj|0)==215){dj=0;c[ie>>2]=le;}else if((dj|0)==218){dj=0;c[je>>2]=le;}c[c[je>>2]>>2]=0;c[c[ie>>2]>>2]=0;c[(c[Hd>>2]|0)+24>>2]=(c[ke>>2]|0)-8;c[Gd>>2]=c[me>>2];}}while(0);c[Ah>>2]=c[Gd>>2];break a;break;}case 5:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[De>>2]=c[Bh>>2];c[Ee>>2]=aj;c[Fe>>2]=Zh;c[Ge>>2]=Uh;c[He>>2]=_i;c[Ie>>2]=Zi;c[Je>>2]=Ph;c[Ke>>2]=Qh;c[Le>>2]=_h;c[Me>>2]=5;if((c[(c[Ee>>2]|0)+20>>2]|0)>>>0<4095)ij=c[(c[Ee>>2]|0)+20>>2]|0;else ij=4095;c[Ne>>2]=ij;c[Oe>>2]=c[(c[De>>2]|0)+4>>2];c[Pe>>2]=(c[Fe>>2]|0)-(c[Oe>>2]|0);c[Qe>>2]=c[(c[Ee>>2]|0)+8>>2];c[Re>>2]=(c[Me>>2]|0)==3?3:4;c[Se>>2]=c[(c[De>>2]|0)+36>>2];c[Te>>2]=Sj(c[Fe>>2]|0,c[Qe>>2]|0,c[Me>>2]|0)|0;c[Ue>>2]=c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2];c[Ve>>2]=c[(c[De>>2]|0)+44>>2];c[We>>2]=(c[(c[Ee>>2]|0)+4>>2]|0)-1;c[Xe>>2]=(1<<c[We>>2])-1;c[Ye>>2]=0;c[Ze>>2]=0;c[_e>>2]=c[(c[De>>2]|0)+8>>2];c[$e>>2]=c[(c[De>>2]|0)+12>>2];c[af>>2]=(c[_e>>2]|0)+(c[$e>>2]|0);c[bf>>2]=(c[Oe>>2]|0)+(c[$e>>2]|0);if((c[Xe>>2]|0)>>>0>=(c[Pe>>2]|0)>>>0)jj=0;else jj=(c[Pe>>2]|0)-(c[Xe>>2]|0)|0;c[cf>>2]=jj;c[df>>2]=c[(c[De>>2]|0)+16>>2];c[ef>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2);c[ff>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2)+4;c[gf>>2]=(c[Pe>>2]|0)+8+1;c[jf>>2]=0;c[kf>>2]=1<<c[(c[Ee>>2]|0)+12>>2];c[lf>>2]=(c[Le>>2]|0)-1;c[mf>>2]=3+(c[Je>>2]|0);c[nf>>2]=c[Je>>2];while(1){if((c[nf>>2]|0)>>>0>=(c[mf>>2]|0)>>>0){dj=137;break;}_h=c[Ie>>2]|0;if((c[nf>>2]|0)==3)kj=(c[_h>>2]|0)-1|0;else kj=c[_h+(c[nf>>2]<<2)>>2]|0;c[of>>2]=kj;c[pf>>2]=(c[Pe>>2]|0)-(c[of>>2]|0);c[qf>>2]=0;if(((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[$e>>2]|0)|0)>>>0){_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0;if((_h|0)==(mm((c[Fe>>2]|0)+(0-(c[of>>2]|0))|0,c[Re>>2]|0)|0)){_h=Tj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[Fe>>2]|0)+(c[Re>>2]|0)+(0-(c[of>>2]|0))|0,c[Ge>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}else{c[rf>>2]=(c[_e>>2]|0)+(c[pf>>2]|0);if((c[He>>2]|0?(((c[$e>>2]|0)-1-(c[pf>>2]|0)|0)>>>0>=3?((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[df>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0,(_h|0)==(mm(c[rf>>2]|0,c[Re>>2]|0)|0)):0){_h=Uj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[rf>>2]|0)+(c[Re>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}if((c[qf>>2]|0)>>>0>(c[lf>>2]|0)>>>0?(c[lf>>2]=c[qf>>2],c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[nf>>2]|0)-(c[Je>>2]|0),c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[qf>>2],c[jf>>2]=(c[jf>>2]|0)+1,((c[qf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[qf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){dj=135;break;}c[nf>>2]=(c[nf>>2]|0)+1;}do{if((dj|0)==135){dj=0;c[Ce>>2]=c[jf>>2];}else if((dj|0)==137){dj=0;if(((c[Me>>2]|0)==3?(c[lf>>2]|0)>>>0<(c[Me>>2]|0)>>>0:0)?(c[sf>>2]=nm(c[De>>2]|0,c[Fe>>2]|0)|0,((c[sf>>2]|0)>>>0>(c[df>>2]|0)>>>0?((c[Pe>>2]|0)-(c[sf>>2]|0)|0)>>>0<262144:0)|0):0){if(c[He>>2]|0?(c[sf>>2]|0)>>>0<(c[$e>>2]|0)>>>0:0){c[vf>>2]=(c[_e>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Uj(c[Fe>>2]|0,c[vf>>2]|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;}else{c[uf>>2]=(c[Oe>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Tj(c[Fe>>2]|0,c[uf>>2]|0,c[Ge>>2]|0)|0;}if((c[tf>>2]|0)>>>0>=(c[Me>>2]|0)>>>0?(c[lf>>2]=c[tf>>2],c[c[Ke>>2]>>2]=(c[Pe>>2]|0)-(c[sf>>2]|0)+2,c[(c[Ke>>2]|0)+4>>2]=c[tf>>2],c[jf>>2]=1,((c[tf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[tf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){c[(c[De>>2]|0)+24>>2]=(c[Pe>>2]|0)+1;c[Ce>>2]=1;break;}}c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2]=c[Pe>>2];while(1){_h=c[kf>>2]|0;c[kf>>2]=_h+-1;if(!_h)break;if((c[Ue>>2]|0)>>>0<=(c[df>>2]|0)>>>0)break;c[wf>>2]=(c[Ve>>2]|0)+((c[Ue>>2]&c[Xe>>2])<<1<<2);c[xf>>2]=(c[Ye>>2]|0)>>>0<(c[Ze>>2]|0)>>>0?c[Ye>>2]|0:c[Ze>>2]|0;if(c[He>>2]|0?((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0<(c[$e>>2]|0)>>>0:0){c[yf>>2]=(c[_e>>2]|0)+(c[Ue>>2]|0);_h=Uj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;if(((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0>=(c[$e>>2]|0)>>>0)c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);}else{c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);_h=Tj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;}if((c[xf>>2]|0)>>>0>(c[lf>>2]|0)>>>0){if((c[xf>>2]|0)>>>0>((c[gf>>2]|0)-(c[Ue>>2]|0)|0)>>>0)c[gf>>2]=(c[Ue>>2]|0)+(c[xf>>2]|0);c[lf>>2]=c[xf>>2];c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[Pe>>2]|0)-(c[Ue>>2]|0)+2;c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[xf>>2];c[jf>>2]=(c[jf>>2]|0)+1;if((c[xf>>2]|0)>>>0>4096)break;if(((c[Fe>>2]|0)+(c[xf>>2]|0)|0)==(c[Ge>>2]|0))break;}_h=c[Ue>>2]|0;if((d[(c[yf>>2]|0)+(c[xf>>2]|0)>>0]|0|0)<(d[(c[Fe>>2]|0)+(c[xf>>2]|0)>>0]|0|0)){c[c[ef>>2]>>2]=_h;c[Ye>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=162;break;}c[ef>>2]=(c[wf>>2]|0)+4;c[Ue>>2]=c[(c[wf>>2]|0)+4>>2];}else{c[c[ff>>2]>>2]=_h;c[Ze>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=165;break;}c[ff>>2]=c[wf>>2];c[Ue>>2]=c[c[wf>>2]>>2];}}if((dj|0)==162){dj=0;c[ef>>2]=hf;}else if((dj|0)==165){dj=0;c[ff>>2]=hf;}c[c[ff>>2]>>2]=0;c[c[ef>>2]>>2]=0;c[(c[De>>2]|0)+24>>2]=(c[gf>>2]|0)-8;c[Ce>>2]=c[jf>>2];}}while(0);c[Ah>>2]=c[Ce>>2];break a;break;}default:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Af>>2]=c[Bh>>2];c[Bf>>2]=_h;c[Cf>>2]=Qh;c[Df>>2]=Ph;c[Ef>>2]=Zi;c[Ff>>2]=_i;c[Gf>>2]=Uh;c[Hf>>2]=Zh;c[If>>2]=aj;c[Jf>>2]=4;if((c[(c[Bf>>2]|0)+20>>2]|0)>>>0<4095)lj=c[(c[Bf>>2]|0)+20>>2]|0;else lj=4095;c[Kf>>2]=lj;c[Lf>>2]=c[(c[Af>>2]|0)+4>>2];c[Mf>>2]=(c[Cf>>2]|0)-(c[Lf>>2]|0);c[Nf>>2]=c[(c[Bf>>2]|0)+8>>2];c[Of>>2]=(c[Jf>>2]|0)==3?3:4;c[Pf>>2]=c[(c[Af>>2]|0)+36>>2];c[Qf>>2]=Sj(c[Cf>>2]|0,c[Nf>>2]|0,c[Jf>>2]|0)|0;c[Rf>>2]=c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2];c[Sf>>2]=c[(c[Af>>2]|0)+44>>2];c[Tf>>2]=(c[(c[Bf>>2]|0)+4>>2]|0)-1;c[Uf>>2]=(1<<c[Tf>>2])-1;c[Vf>>2]=0;c[Wf>>2]=0;c[Xf>>2]=c[(c[Af>>2]|0)+8>>2];c[Yf>>2]=c[(c[Af>>2]|0)+12>>2];c[Zf>>2]=(c[Xf>>2]|0)+(c[Yf>>2]|0);c[_f>>2]=(c[Lf>>2]|0)+(c[Yf>>2]|0);if((c[Uf>>2]|0)>>>0>=(c[Mf>>2]|0)>>>0)mj=0;else mj=(c[Mf>>2]|0)-(c[Uf>>2]|0)|0;c[$f>>2]=mj;c[ag>>2]=c[(c[Af>>2]|0)+16>>2];c[bg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2);c[cg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2)+4;c[dg>>2]=(c[Mf>>2]|0)+8+1;c[fg>>2]=0;c[gg>>2]=1<<c[(c[Bf>>2]|0)+12>>2];c[hg>>2]=(c[If>>2]|0)-1;c[ig>>2]=3+(c[Gf>>2]|0);c[jg>>2]=c[Gf>>2];while(1){if((c[jg>>2]|0)>>>0>=(c[ig>>2]|0)>>>0){dj=84;break;}aj=c[Ff>>2]|0;if((c[jg>>2]|0)==3)nj=(c[aj>>2]|0)-1|0;else nj=c[aj+(c[jg>>2]<<2)>>2]|0;c[kg>>2]=nj;c[lg>>2]=(c[Mf>>2]|0)-(c[kg>>2]|0);c[mg>>2]=0;if(((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[Yf>>2]|0)|0)>>>0){aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0;if((aj|0)==(mm((c[Cf>>2]|0)+(0-(c[kg>>2]|0))|0,c[Of>>2]|0)|0)){aj=Tj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[Cf>>2]|0)+(c[Of>>2]|0)+(0-(c[kg>>2]|0))|0,c[Df>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}else{c[ng>>2]=(c[Xf>>2]|0)+(c[lg>>2]|0);if((c[Ef>>2]|0?(((c[Yf>>2]|0)-1-(c[lg>>2]|0)|0)>>>0>=3?((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[ag>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0,(aj|0)==(mm(c[ng>>2]|0,c[Of>>2]|0)|0)):0){aj=Uj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[ng>>2]|0)+(c[Of>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}if((c[mg>>2]|0)>>>0>(c[hg>>2]|0)>>>0?(c[hg>>2]=c[mg>>2],c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[jg>>2]|0)-(c[Gf>>2]|0),c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[mg>>2],c[fg>>2]=(c[fg>>2]|0)+1,((c[mg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[mg>>2]|0)|0)==(c[Df>>2]|0))|0):0){dj=82;break;}c[jg>>2]=(c[jg>>2]|0)+1;}do{if((dj|0)==82){dj=0;c[zf>>2]=c[fg>>2];}else if((dj|0)==84){dj=0;if(((c[Jf>>2]|0)==3?(c[hg>>2]|0)>>>0<(c[Jf>>2]|0)>>>0:0)?(c[og>>2]=nm(c[Af>>2]|0,c[Cf>>2]|0)|0,((c[og>>2]|0)>>>0>(c[ag>>2]|0)>>>0?((c[Mf>>2]|0)-(c[og>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ef>>2]|0?(c[og>>2]|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[rg>>2]=(c[Xf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Uj(c[Cf>>2]|0,c[rg>>2]|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;}else{c[qg>>2]=(c[Lf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Tj(c[Cf>>2]|0,c[qg>>2]|0,c[Df>>2]|0)|0;}if((c[pg>>2]|0)>>>0>=(c[Jf>>2]|0)>>>0?(c[hg>>2]=c[pg>>2],c[c[Hf>>2]>>2]=(c[Mf>>2]|0)-(c[og>>2]|0)+2,c[(c[Hf>>2]|0)+4>>2]=c[pg>>2],c[fg>>2]=1,((c[pg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[pg>>2]|0)|0)==(c[Df>>2]|0))|0):0){c[(c[Af>>2]|0)+24>>2]=(c[Mf>>2]|0)+1;c[zf>>2]=1;break;}}c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2]=c[Mf>>2];while(1){aj=c[gg>>2]|0;c[gg>>2]=aj+-1;if(!aj)break;if((c[Rf>>2]|0)>>>0<=(c[ag>>2]|0)>>>0)break;c[sg>>2]=(c[Sf>>2]|0)+((c[Rf>>2]&c[Uf>>2])<<1<<2);c[tg>>2]=(c[Vf>>2]|0)>>>0<(c[Wf>>2]|0)>>>0?c[Vf>>2]|0:c[Wf>>2]|0;if(c[Ef>>2]|0?((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[ug>>2]=(c[Xf>>2]|0)+(c[Rf>>2]|0);aj=Uj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;if(((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0>=(c[Yf>>2]|0)>>>0)c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);}else{c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);aj=Tj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;}if((c[tg>>2]|0)>>>0>(c[hg>>2]|0)>>>0){if((c[tg>>2]|0)>>>0>((c[dg>>2]|0)-(c[Rf>>2]|0)|0)>>>0)c[dg>>2]=(c[Rf>>2]|0)+(c[tg>>2]|0);c[hg>>2]=c[tg>>2];c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[Mf>>2]|0)-(c[Rf>>2]|0)+2;c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[tg>>2];c[fg>>2]=(c[fg>>2]|0)+1;if((c[tg>>2]|0)>>>0>4096)break;if(((c[Cf>>2]|0)+(c[tg>>2]|0)|0)==(c[Df>>2]|0))break;}aj=c[Rf>>2]|0;if((d[(c[ug>>2]|0)+(c[tg>>2]|0)>>0]|0|0)<(d[(c[Cf>>2]|0)+(c[tg>>2]|0)>>0]|0|0)){c[c[bg>>2]>>2]=aj;c[Vf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=109;break;}c[bg>>2]=(c[sg>>2]|0)+4;c[Rf>>2]=c[(c[sg>>2]|0)+4>>2];}else{c[c[cg>>2]>>2]=aj;c[Wf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=112;break;}c[cg>>2]=c[sg>>2];c[Rf>>2]=c[c[sg>>2]>>2];}}if((dj|0)==109){dj=0;c[bg>>2]=eg;}else if((dj|0)==112){dj=0;c[cg>>2]=eg;}c[c[cg>>2]>>2]=0;c[c[bg>>2]>>2]=0;c[(c[Af>>2]|0)+24>>2]=(c[dg>>2]|0)-8;c[zf>>2]=c[fg>>2];}}while(0);c[Ah>>2]=c[zf>>2];break a;}}}}while(0);c[ki>>2]=c[Ah>>2];if(!(c[ki>>2]|0)){c[Vh>>2]=(c[Vh>>2]|0)+1;continue;}c[li>>2]=0;while(1){if((c[li>>2]|0)>>>0>=3)break;c[(c[bi>>2]|0)+16+(c[li>>2]<<2)>>2]=c[(c[Nh>>2]|0)+(c[li>>2]<<2)>>2];c[li>>2]=(c[li>>2]|0)+1;}c[(c[bi>>2]|0)+8>>2]=1;c[(c[bi>>2]|0)+12>>2]=c[ii>>2];c[mi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)+4>>2];do{if((c[mi>>2]|0)>>>0<=(c[$h>>2]|0)>>>0){c[ni>>2]=om(di,c[Wh>>2]|0,c[ii>>2]|0,c[Th>>2]|0)|0;c[oi>>2]=0;while(1){if((c[oi>>2]|0)>>>0>=(c[ai>>2]|0)>>>0)break;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=1073741824;c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=0;while(1){if((c[pi>>2]|0)>>>0>=(c[ki>>2]|0)>>>0)break;c[qi>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)>>2];c[ri>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)+4>>2];pm(si,c[Nh>>2]|0,c[qi>>2]|0,c[ji>>2]|0);while(1){if((c[oi>>2]|0)>>>0>(c[ri>>2]|0)>>>0)break;aj=c[ni>>2]|0;Zh=c[oi>>2]|0;Uh=c[Th>>2]|0;_i=c[Rh>>2]|0;c[yd>>2]=c[qi>>2];c[zd>>2]=Zh;c[Ad>>2]=Uh;c[Bd>>2]=_i;c[Dd>>2]=qm((c[yd>>2]|0)+1|0)|0;c[Ed>>2]=(c[zd>>2]|0)-3;if(c[(c[Ad>>2]|0)+56>>2]|0){_i=(qm((c[Ed>>2]|0)+1|0)|0)+16|0;c[xd>>2]=_i+(c[Dd>>2]|0);}else{_i=(c[Dd>>2]|0)+(c[(c[Ad>>2]|0)+52>>2]|0)|0;c[Cd>>2]=_i-(qm((c[(c[(c[Ad>>2]|0)+12>>2]|0)+(c[Dd>>2]<<2)>>2]|0)+1|0)|0);if((c[Bd>>2]|0)<2&(c[Dd>>2]|0)>>>0>=20)c[Cd>>2]=(c[Cd>>2]|0)+((c[Dd>>2]|0)-19<<1);c[Fd>>2]=rm(c[Ed>>2]|0)|0;_i=(c[5840+(c[Fd>>2]<<2)>>2]|0)+(c[(c[Ad>>2]|0)+48>>2]|0)|0;Uh=_i-(qm((c[(c[(c[Ad>>2]|0)+8>>2]|0)+(c[Fd>>2]<<2)>>2]|0)+1|0)|0)|0;c[Cd>>2]=(c[Cd>>2]|0)+Uh;c[xd>>2]=c[Cd>>2];}c[ti>>2]=aj+(c[xd>>2]|0);c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=c[oi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+4>>2]=c[qi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+12>>2]=c[ii>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=c[ti>>2];aj=(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+16|0;c[aj>>2]=c[si>>2];c[aj+4>>2]=c[si+4>>2];c[aj+8>>2]=c[si+8>>2];c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=(c[pi>>2]|0)+1;}c[fi>>2]=(c[oi>>2]|0)-1;c[ei>>2]=1;b:while(1){if((c[ei>>2]|0)>>>0>(c[fi>>2]|0)>>>0){dj=504;break;}c[ui>>2]=(c[Vh>>2]|0)+(c[ei>>2]|0);if((c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+8>>2]|0)==1)oj=(c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+12>>2]|0)+1|0;else oj=1;c[vi>>2]=oj;if((c[ei>>2]|0)>>>0>(c[vi>>2]|0)>>>0){aj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[vi>>2]|0)|0)*28|0)>>2]|0;c[wi>>2]=aj+(sm((c[ui>>2]|0)+(0-(c[vi>>2]|0))|0,c[vi>>2]|0,c[Th>>2]|0)|0);}else c[wi>>2]=tm(di,c[Wh>>2]|0,c[vi>>2]|0,c[Th>>2]|0)|0;if((c[wi>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0)){c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+4>>2]=0;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]=c[vi>>2];c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]=c[wi>>2];aj=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Uh=(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+16|0;c[aj>>2]=c[Uh>>2];c[aj+4>>2]=c[Uh+4>>2];c[aj+8>>2]=c[Uh+8>>2];}c:do{if((c[ui>>2]|0)>>>0<=(c[Yh>>2]|0)>>>0){if((c[ei>>2]|0)==(c[fi>>2]|0)){dj=504;break b;}if((c[Rh>>2]|0)==0?(c[(c[bi>>2]|0)+(((c[ei>>2]|0)+1|0)*28|0)>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0):0)break;c[xi>>2]=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)!=1&1;if((c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)==1)pj=c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]|0;else pj=0;c[yi>>2]=pj;if((c[ei>>2]|0)>>>0>(c[yi>>2]|0)>>>0)qj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[yi>>2]|0)|0)*28|0)>>2]|0;else qj=0;c[zi>>2]=qj;Uh=c[zi>>2]|0;c[Ai>>2]=Uh+(um((c[ui>>2]|0)+(0-(c[yi>>2]|0))|0,c[yi>>2]|0,c[Th>>2]|0)|0);Uh=c[Oh>>2]|0;aj=c[ui>>2]|0;_i=c[Xh>>2]|0;Zh=c[Sh>>2]|0;Zi=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Ph=c[xi>>2]|0;Qh=c[ci>>2]|0;_h=c[ai>>2]|0;c[nd>>2]=c[Lh>>2];c[od>>2]=Uh;c[pd>>2]=aj;c[qd>>2]=_i;c[rd>>2]=Zh;c[sd>>2]=Zi;c[td>>2]=Ph;c[ud>>2]=Qh;c[vd>>2]=_h;c[wd>>2]=c[(c[od>>2]|0)+16>>2];d:do{if((c[pd>>2]|0)>>>0<((c[(c[nd>>2]|0)+4>>2]|0)+(c[(c[nd>>2]|0)+24>>2]|0)|0)>>>0)c[md>>2]=0;else{_h=c[od>>2]|0;Qh=c[pd>>2]|0;Ph=c[qd>>2]|0;Zi=c[wd>>2]|0;Zh=c[rd>>2]|0;c[dd>>2]=c[nd>>2];c[ed>>2]=_h;c[fd>>2]=Qh;c[gd>>2]=Ph;c[hd>>2]=Zi;c[id>>2]=Zh;c[jd>>2]=c[(c[dd>>2]|0)+4>>2];c[kd>>2]=(c[fd>>2]|0)-(c[jd>>2]|0);c[ld>>2]=c[(c[dd>>2]|0)+24>>2];while(1){if((c[ld>>2]|0)>>>0>=(c[kd>>2]|0)>>>0)break;Zh=Rj(c[dd>>2]|0,c[ed>>2]|0,(c[jd>>2]|0)+(c[ld>>2]|0)|0,c[gd>>2]|0,c[hd>>2]|0,c[id>>2]|0)|0;c[ld>>2]=(c[ld>>2]|0)+Zh;}c[(c[dd>>2]|0)+24>>2]=c[kd>>2];switch(c[wd>>2]|0){case 3:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[ic>>2]=c[nd>>2];c[jc>>2]=Zh;c[kc>>2]=Zi;c[lc>>2]=Ph;c[mc>>2]=Qh;c[nc>>2]=_h;c[oc>>2]=_i;c[pc>>2]=aj;c[qc>>2]=Uh;c[rc>>2]=3;if((c[(c[jc>>2]|0)+20>>2]|0)>>>0<4095)rj=c[(c[jc>>2]|0)+20>>2]|0;else rj=4095;c[sc>>2]=rj;c[tc>>2]=c[(c[ic>>2]|0)+4>>2];c[uc>>2]=(c[kc>>2]|0)-(c[tc>>2]|0);c[vc>>2]=c[(c[jc>>2]|0)+8>>2];c[wc>>2]=(c[rc>>2]|0)==3?3:4;c[xc>>2]=c[(c[ic>>2]|0)+36>>2];c[yc>>2]=Sj(c[kc>>2]|0,c[vc>>2]|0,c[rc>>2]|0)|0;c[zc>>2]=c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2];c[Ac>>2]=c[(c[ic>>2]|0)+44>>2];c[Bc>>2]=(c[(c[jc>>2]|0)+4>>2]|0)-1;c[Cc>>2]=(1<<c[Bc>>2])-1;c[Dc>>2]=0;c[Ec>>2]=0;c[Fc>>2]=c[(c[ic>>2]|0)+8>>2];c[Gc>>2]=c[(c[ic>>2]|0)+12>>2];c[Hc>>2]=(c[Fc>>2]|0)+(c[Gc>>2]|0);c[Ic>>2]=(c[tc>>2]|0)+(c[Gc>>2]|0);if((c[Cc>>2]|0)>>>0>=(c[uc>>2]|0)>>>0)sj=0;else sj=(c[uc>>2]|0)-(c[Cc>>2]|0)|0;c[Jc>>2]=sj;c[Kc>>2]=c[(c[ic>>2]|0)+16>>2];c[Lc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2);c[Mc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2)+4;c[Nc>>2]=(c[uc>>2]|0)+8+1;c[Pc>>2]=0;c[Qc>>2]=1<<c[(c[jc>>2]|0)+12>>2];c[Rc>>2]=(c[qc>>2]|0)-1;c[Sc>>2]=3+(c[oc>>2]|0);c[Tc>>2]=c[oc>>2];while(1){if((c[Tc>>2]|0)>>>0>=(c[Sc>>2]|0)>>>0){dj=287;break;}Uh=c[nc>>2]|0;if((c[Tc>>2]|0)==3)tj=(c[Uh>>2]|0)-1|0;else tj=c[Uh+(c[Tc>>2]<<2)>>2]|0;c[Uc>>2]=tj;c[Vc>>2]=(c[uc>>2]|0)-(c[Uc>>2]|0);c[Wc>>2]=0;do{if(((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Gc>>2]|0)|0)>>>0){Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm((c[kc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[wc>>2]|0)|0))break;Uh=Tj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[kc>>2]|0)+(c[wc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[lc>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}else{c[Xc>>2]=(c[Fc>>2]|0)+(c[Vc>>2]|0);if(!(c[mc>>2]|0))break;if(!((((c[Gc>>2]|0)-1-(c[Vc>>2]|0)|0)>>>0>=3?((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Kc>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm(c[Xc>>2]|0,c[wc>>2]|0)|0))break;Uh=Uj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[Xc>>2]|0)+(c[wc>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}}while(0);if((c[Wc>>2]|0)>>>0>(c[Rc>>2]|0)>>>0?(c[Rc>>2]=c[Wc>>2],c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[Tc>>2]|0)-(c[oc>>2]|0),c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[Wc>>2],c[Pc>>2]=(c[Pc>>2]|0)+1,((c[Wc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Wc>>2]|0)|0)==(c[lc>>2]|0))|0):0){dj=285;break;}c[Tc>>2]=(c[Tc>>2]|0)+1;}e:do{if((dj|0)==285){dj=0;c[hc>>2]=c[Pc>>2];}else if((dj|0)==287){dj=0;do{if((c[rc>>2]|0)==3){if((c[Rc>>2]|0)>>>0>=(c[rc>>2]|0)>>>0)break;c[Yc>>2]=nm(c[ic>>2]|0,c[kc>>2]|0)|0;if(!(((c[Yc>>2]|0)>>>0>(c[Kc>>2]|0)>>>0?((c[uc>>2]|0)-(c[Yc>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[mc>>2]|0){if((c[Yc>>2]|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=292;break;}c[$c>>2]=(c[Fc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Uj(c[kc>>2]|0,c[$c>>2]|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;}else dj=292;}while(0);if((dj|0)==292){dj=0;c[_c>>2]=(c[tc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Tj(c[kc>>2]|0,c[_c>>2]|0,c[lc>>2]|0)|0;}if((c[Zc>>2]|0)>>>0<(c[rc>>2]|0)>>>0)break;c[Rc>>2]=c[Zc>>2];c[c[pc>>2]>>2]=(c[uc>>2]|0)-(c[Yc>>2]|0)+2;c[(c[pc>>2]|0)+4>>2]=c[Zc>>2];c[Pc>>2]=1;if(!(((c[Zc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Zc>>2]|0)|0)==(c[lc>>2]|0))|0))break;c[(c[ic>>2]|0)+24>>2]=(c[uc>>2]|0)+1;c[hc>>2]=1;break e;}}while(0);c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2]=c[uc>>2];while(1){Uh=c[Qc>>2]|0;c[Qc>>2]=Uh+-1;if(!Uh)break;if((c[zc>>2]|0)>>>0<=(c[Kc>>2]|0)>>>0)break;c[ad>>2]=(c[Ac>>2]|0)+((c[zc>>2]&c[Cc>>2])<<1<<2);c[bd>>2]=(c[Dc>>2]|0)>>>0<(c[Ec>>2]|0)>>>0?c[Dc>>2]|0:c[Ec>>2]|0;do{if(c[mc>>2]|0){if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=302;break;}c[cd>>2]=(c[Fc>>2]|0)+(c[zc>>2]|0);Uh=Uj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0<(c[Gc>>2]|0)>>>0)break;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);}else dj=302;}while(0);if((dj|0)==302){dj=0;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);Uh=Tj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;}if((c[bd>>2]|0)>>>0>(c[Rc>>2]|0)>>>0){if((c[bd>>2]|0)>>>0>((c[Nc>>2]|0)-(c[zc>>2]|0)|0)>>>0)c[Nc>>2]=(c[zc>>2]|0)+(c[bd>>2]|0);c[Rc>>2]=c[bd>>2];c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[uc>>2]|0)-(c[zc>>2]|0)+2;c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[bd>>2];c[Pc>>2]=(c[Pc>>2]|0)+1;if((c[bd>>2]|0)>>>0>4096)break;if(((c[kc>>2]|0)+(c[bd>>2]|0)|0)==(c[lc>>2]|0))break;}Uh=c[zc>>2]|0;if((d[(c[cd>>2]|0)+(c[bd>>2]|0)>>0]|0|0)<(d[(c[kc>>2]|0)+(c[bd>>2]|0)>>0]|0|0)){c[c[Lc>>2]>>2]=Uh;c[Dc>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=312;break;}c[Lc>>2]=(c[ad>>2]|0)+4;c[zc>>2]=c[(c[ad>>2]|0)+4>>2];}else{c[c[Mc>>2]>>2]=Uh;c[Ec>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=315;break;}c[Mc>>2]=c[ad>>2];c[zc>>2]=c[c[ad>>2]>>2];}}if((dj|0)==312){dj=0;c[Lc>>2]=Oc;}else if((dj|0)==315){dj=0;c[Mc>>2]=Oc;}c[c[Mc>>2]>>2]=0;c[c[Lc>>2]>>2]=0;c[(c[ic>>2]|0)+24>>2]=(c[Nc>>2]|0)-8;c[hc>>2]=c[Pc>>2];}}while(0);c[md>>2]=c[hc>>2];break d;break;}case 7:case 6:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[u>>2]=c[nd>>2];c[v>>2]=Uh;c[w>>2]=aj;c[x>>2]=_i;c[y>>2]=_h;c[z>>2]=Qh;c[A>>2]=Ph;c[B>>2]=Zi;c[C>>2]=Zh;c[D>>2]=6;if((c[(c[v>>2]|0)+20>>2]|0)>>>0<4095)uj=c[(c[v>>2]|0)+20>>2]|0;else uj=4095;c[E>>2]=uj;c[F>>2]=c[(c[u>>2]|0)+4>>2];c[G>>2]=(c[w>>2]|0)-(c[F>>2]|0);c[H>>2]=c[(c[v>>2]|0)+8>>2];c[I>>2]=(c[D>>2]|0)==3?3:4;c[J>>2]=c[(c[u>>2]|0)+36>>2];c[K>>2]=Sj(c[w>>2]|0,c[H>>2]|0,c[D>>2]|0)|0;c[L>>2]=c[(c[J>>2]|0)+(c[K>>2]<<2)>>2];c[M>>2]=c[(c[u>>2]|0)+44>>2];c[N>>2]=(c[(c[v>>2]|0)+4>>2]|0)-1;c[O>>2]=(1<<c[N>>2])-1;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=c[(c[u>>2]|0)+8>>2];c[S>>2]=c[(c[u>>2]|0)+12>>2];c[T>>2]=(c[R>>2]|0)+(c[S>>2]|0);c[U>>2]=(c[F>>2]|0)+(c[S>>2]|0);if((c[O>>2]|0)>>>0>=(c[G>>2]|0)>>>0)vj=0;else vj=(c[G>>2]|0)-(c[O>>2]|0)|0;c[V>>2]=vj;c[W>>2]=c[(c[u>>2]|0)+16>>2];c[X>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2);c[Y>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2)+4;c[Z>>2]=(c[G>>2]|0)+8+1;c[$>>2]=0;c[aa>>2]=1<<c[(c[v>>2]|0)+12>>2];c[ba>>2]=(c[C>>2]|0)-1;c[ca>>2]=3+(c[A>>2]|0);c[da>>2]=c[A>>2];while(1){if((c[da>>2]|0)>>>0>=(c[ca>>2]|0)>>>0){dj=446;break;}Zh=c[z>>2]|0;if((c[da>>2]|0)==3)wj=(c[Zh>>2]|0)-1|0;else wj=c[Zh+(c[da>>2]<<2)>>2]|0;c[ea>>2]=wj;c[fa>>2]=(c[G>>2]|0)-(c[ea>>2]|0);c[ga>>2]=0;do{if(((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[S>>2]|0)|0)>>>0){Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm((c[w>>2]|0)+(0-(c[ea>>2]|0))|0,c[I>>2]|0)|0))break;Zh=Tj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[w>>2]|0)+(c[I>>2]|0)+(0-(c[ea>>2]|0))|0,c[x>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}else{c[ha>>2]=(c[R>>2]|0)+(c[fa>>2]|0);if(!(c[y>>2]|0))break;if(!((((c[S>>2]|0)-1-(c[fa>>2]|0)|0)>>>0>=3?((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[W>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm(c[ha>>2]|0,c[I>>2]|0)|0))break;Zh=Uj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[ha>>2]|0)+(c[I>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}}while(0);if((c[ga>>2]|0)>>>0>(c[ba>>2]|0)>>>0?(c[ba>>2]=c[ga>>2],c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[da>>2]|0)-(c[A>>2]|0),c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[ga>>2],c[$>>2]=(c[$>>2]|0)+1,((c[ga>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ga>>2]|0)|0)==(c[x>>2]|0))|0):0){dj=444;break;}c[da>>2]=(c[da>>2]|0)+1;}f:do{if((dj|0)==444){dj=0;c[t>>2]=c[$>>2];}else if((dj|0)==446){dj=0;do{if((c[D>>2]|0)==3){if((c[ba>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[ia>>2]=nm(c[u>>2]|0,c[w>>2]|0)|0;if(!(((c[ia>>2]|0)>>>0>(c[W>>2]|0)>>>0?((c[G>>2]|0)-(c[ia>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[y>>2]|0){if((c[ia>>2]|0)>>>0>=(c[S>>2]|0)>>>0){dj=451;break;}c[la>>2]=(c[R>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Uj(c[w>>2]|0,c[la>>2]|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;}else dj=451;}while(0);if((dj|0)==451){dj=0;c[ka>>2]=(c[F>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Tj(c[w>>2]|0,c[ka>>2]|0,c[x>>2]|0)|0;}if((c[ja>>2]|0)>>>0<(c[D>>2]|0)>>>0)break;c[ba>>2]=c[ja>>2];c[c[B>>2]>>2]=(c[G>>2]|0)-(c[ia>>2]|0)+2;c[(c[B>>2]|0)+4>>2]=c[ja>>2];c[$>>2]=1;if(!(((c[ja>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ja>>2]|0)|0)==(c[x>>2]|0))|0))break;c[(c[u>>2]|0)+24>>2]=(c[G>>2]|0)+1;c[t>>2]=1;break f;}}while(0);c[(c[J>>2]|0)+(c[K>>2]<<2)>>2]=c[G>>2];while(1){Zh=c[aa>>2]|0;c[aa>>2]=Zh+-1;if(!Zh)break;if((c[L>>2]|0)>>>0<=(c[W>>2]|0)>>>0)break;c[ma>>2]=(c[M>>2]|0)+((c[L>>2]&c[O>>2])<<1<<2);c[na>>2]=(c[P>>2]|0)>>>0<(c[Q>>2]|0)>>>0?c[P>>2]|0:c[Q>>2]|0;do{if(c[y>>2]|0){if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0>=(c[S>>2]|0)>>>0){dj=461;break;}c[oa>>2]=(c[R>>2]|0)+(c[L>>2]|0);Zh=Uj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0<(c[S>>2]|0)>>>0)break;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);}else dj=461;}while(0);if((dj|0)==461){dj=0;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);Zh=Tj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;}if((c[na>>2]|0)>>>0>(c[ba>>2]|0)>>>0){if((c[na>>2]|0)>>>0>((c[Z>>2]|0)-(c[L>>2]|0)|0)>>>0)c[Z>>2]=(c[L>>2]|0)+(c[na>>2]|0);c[ba>>2]=c[na>>2];c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[G>>2]|0)-(c[L>>2]|0)+2;c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[na>>2];c[$>>2]=(c[$>>2]|0)+1;if((c[na>>2]|0)>>>0>4096)break;if(((c[w>>2]|0)+(c[na>>2]|0)|0)==(c[x>>2]|0))break;}Zh=c[L>>2]|0;if((d[(c[oa>>2]|0)+(c[na>>2]|0)>>0]|0|0)<(d[(c[w>>2]|0)+(c[na>>2]|0)>>0]|0|0)){c[c[X>>2]>>2]=Zh;c[P>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=471;break;}c[X>>2]=(c[ma>>2]|0)+4;c[L>>2]=c[(c[ma>>2]|0)+4>>2];}else{c[c[Y>>2]>>2]=Zh;c[Q>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=474;break;}c[Y>>2]=c[ma>>2];c[L>>2]=c[c[ma>>2]>>2];}}if((dj|0)==471){dj=0;c[X>>2]=_;}else if((dj|0)==474){dj=0;c[Y>>2]=_;}c[c[Y>>2]>>2]=0;c[c[X>>2]>>2]=0;c[(c[u>>2]|0)+24>>2]=(c[Z>>2]|0)-8;c[t>>2]=c[$>>2];}}while(0);c[md>>2]=c[t>>2];break d;break;}case 5:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[qa>>2]=c[nd>>2];c[ra>>2]=Zh;c[sa>>2]=Zi;c[ta>>2]=Ph;c[ua>>2]=Qh;c[va>>2]=_h;c[wa>>2]=_i;c[xa>>2]=aj;c[ya>>2]=Uh;c[za>>2]=5;if((c[(c[ra>>2]|0)+20>>2]|0)>>>0<4095)xj=c[(c[ra>>2]|0)+20>>2]|0;else xj=4095;c[Aa>>2]=xj;c[Ba>>2]=c[(c[qa>>2]|0)+4>>2];c[Ca>>2]=(c[sa>>2]|0)-(c[Ba>>2]|0);c[Da>>2]=c[(c[ra>>2]|0)+8>>2];c[Ea>>2]=(c[za>>2]|0)==3?3:4;c[Fa>>2]=c[(c[qa>>2]|0)+36>>2];c[Ga>>2]=Sj(c[sa>>2]|0,c[Da>>2]|0,c[za>>2]|0)|0;c[Ha>>2]=c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2];c[Ia>>2]=c[(c[qa>>2]|0)+44>>2];c[Ja>>2]=(c[(c[ra>>2]|0)+4>>2]|0)-1;c[Ka>>2]=(1<<c[Ja>>2])-1;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=c[(c[qa>>2]|0)+8>>2];c[Oa>>2]=c[(c[qa>>2]|0)+12>>2];c[Pa>>2]=(c[Na>>2]|0)+(c[Oa>>2]|0);c[Qa>>2]=(c[Ba>>2]|0)+(c[Oa>>2]|0);if((c[Ka>>2]|0)>>>0>=(c[Ca>>2]|0)>>>0)yj=0;else yj=(c[Ca>>2]|0)-(c[Ka>>2]|0)|0;c[Ra>>2]=yj;c[Sa>>2]=c[(c[qa>>2]|0)+16>>2];c[Ta>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2);c[Ua>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2)+4;c[Va>>2]=(c[Ca>>2]|0)+8+1;c[Xa>>2]=0;c[Ya>>2]=1<<c[(c[ra>>2]|0)+12>>2];c[Za>>2]=(c[ya>>2]|0)-1;c[_a>>2]=3+(c[wa>>2]|0);c[$a>>2]=c[wa>>2];while(1){if((c[$a>>2]|0)>>>0>=(c[_a>>2]|0)>>>0){dj=393;break;}Uh=c[va>>2]|0;if((c[$a>>2]|0)==3)zj=(c[Uh>>2]|0)-1|0;else zj=c[Uh+(c[$a>>2]<<2)>>2]|0;c[ab>>2]=zj;c[bb>>2]=(c[Ca>>2]|0)-(c[ab>>2]|0);c[cb>>2]=0;do{if(((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Oa>>2]|0)|0)>>>0){Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm((c[sa>>2]|0)+(0-(c[ab>>2]|0))|0,c[Ea>>2]|0)|0))break;Uh=Tj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[sa>>2]|0)+(c[Ea>>2]|0)+(0-(c[ab>>2]|0))|0,c[ta>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}else{c[db>>2]=(c[Na>>2]|0)+(c[bb>>2]|0);if(!(c[ua>>2]|0))break;if(!((((c[Oa>>2]|0)-1-(c[bb>>2]|0)|0)>>>0>=3?((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Sa>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm(c[db>>2]|0,c[Ea>>2]|0)|0))break;Uh=Uj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[db>>2]|0)+(c[Ea>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}}while(0);if((c[cb>>2]|0)>>>0>(c[Za>>2]|0)>>>0?(c[Za>>2]=c[cb>>2],c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[$a>>2]|0)-(c[wa>>2]|0),c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[cb>>2],c[Xa>>2]=(c[Xa>>2]|0)+1,((c[cb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[cb>>2]|0)|0)==(c[ta>>2]|0))|0):0){dj=391;break;}c[$a>>2]=(c[$a>>2]|0)+1;}g:do{if((dj|0)==391){dj=0;c[pa>>2]=c[Xa>>2];}else if((dj|0)==393){dj=0;do{if((c[za>>2]|0)==3){if((c[Za>>2]|0)>>>0>=(c[za>>2]|0)>>>0)break;c[eb>>2]=nm(c[qa>>2]|0,c[sa>>2]|0)|0;if(!(((c[eb>>2]|0)>>>0>(c[Sa>>2]|0)>>>0?((c[Ca>>2]|0)-(c[eb>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[ua>>2]|0){if((c[eb>>2]|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=398;break;}c[hb>>2]=(c[Na>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Uj(c[sa>>2]|0,c[hb>>2]|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;}else dj=398;}while(0);if((dj|0)==398){dj=0;c[gb>>2]=(c[Ba>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Tj(c[sa>>2]|0,c[gb>>2]|0,c[ta>>2]|0)|0;}if((c[fb>>2]|0)>>>0<(c[za>>2]|0)>>>0)break;c[Za>>2]=c[fb>>2];c[c[xa>>2]>>2]=(c[Ca>>2]|0)-(c[eb>>2]|0)+2;c[(c[xa>>2]|0)+4>>2]=c[fb>>2];c[Xa>>2]=1;if(!(((c[fb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[fb>>2]|0)|0)==(c[ta>>2]|0))|0))break;c[(c[qa>>2]|0)+24>>2]=(c[Ca>>2]|0)+1;c[pa>>2]=1;break g;}}while(0);c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2]=c[Ca>>2];while(1){Uh=c[Ya>>2]|0;c[Ya>>2]=Uh+-1;if(!Uh)break;if((c[Ha>>2]|0)>>>0<=(c[Sa>>2]|0)>>>0)break;c[ib>>2]=(c[Ia>>2]|0)+((c[Ha>>2]&c[Ka>>2])<<1<<2);c[jb>>2]=(c[La>>2]|0)>>>0<(c[Ma>>2]|0)>>>0?c[La>>2]|0:c[Ma>>2]|0;do{if(c[ua>>2]|0){if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=408;break;}c[kb>>2]=(c[Na>>2]|0)+(c[Ha>>2]|0);Uh=Uj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0<(c[Oa>>2]|0)>>>0)break;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);}else dj=408;}while(0);if((dj|0)==408){dj=0;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);Uh=Tj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;}if((c[jb>>2]|0)>>>0>(c[Za>>2]|0)>>>0){if((c[jb>>2]|0)>>>0>((c[Va>>2]|0)-(c[Ha>>2]|0)|0)>>>0)c[Va>>2]=(c[Ha>>2]|0)+(c[jb>>2]|0);c[Za>>2]=c[jb>>2];c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[Ca>>2]|0)-(c[Ha>>2]|0)+2;c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[jb>>2];c[Xa>>2]=(c[Xa>>2]|0)+1;if((c[jb>>2]|0)>>>0>4096)break;if(((c[sa>>2]|0)+(c[jb>>2]|0)|0)==(c[ta>>2]|0))break;}Uh=c[Ha>>2]|0;if((d[(c[kb>>2]|0)+(c[jb>>2]|0)>>0]|0|0)<(d[(c[sa>>2]|0)+(c[jb>>2]|0)>>0]|0|0)){c[c[Ta>>2]>>2]=Uh;c[La>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=418;break;}c[Ta>>2]=(c[ib>>2]|0)+4;c[Ha>>2]=c[(c[ib>>2]|0)+4>>2];}else{c[c[Ua>>2]>>2]=Uh;c[Ma>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=421;break;}c[Ua>>2]=c[ib>>2];c[Ha>>2]=c[c[ib>>2]>>2];}}if((dj|0)==418){dj=0;c[Ta>>2]=Wa;}else if((dj|0)==421){dj=0;c[Ua>>2]=Wa;}c[c[Ua>>2]>>2]=0;c[c[Ta>>2]>>2]=0;c[(c[qa>>2]|0)+24>>2]=(c[Va>>2]|0)-8;c[pa>>2]=c[Xa>>2];}}while(0);c[md>>2]=c[pa>>2];break d;break;}default:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[mb>>2]=c[nd>>2];c[nb>>2]=Uh;c[ob>>2]=aj;c[pb>>2]=_i;c[qb>>2]=_h;c[rb>>2]=Qh;c[sb>>2]=Ph;c[tb>>2]=Zi;c[ub>>2]=Zh;c[vb>>2]=4;if((c[(c[nb>>2]|0)+20>>2]|0)>>>0<4095)Aj=c[(c[nb>>2]|0)+20>>2]|0;else Aj=4095;c[wb>>2]=Aj;c[xb>>2]=c[(c[mb>>2]|0)+4>>2];c[yb>>2]=(c[ob>>2]|0)-(c[xb>>2]|0);c[zb>>2]=c[(c[nb>>2]|0)+8>>2];c[Ab>>2]=(c[vb>>2]|0)==3?3:4;c[Bb>>2]=c[(c[mb>>2]|0)+36>>2];c[Cb>>2]=Sj(c[ob>>2]|0,c[zb>>2]|0,c[vb>>2]|0)|0;c[Db>>2]=c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2];c[Eb>>2]=c[(c[mb>>2]|0)+44>>2];c[Fb>>2]=(c[(c[nb>>2]|0)+4>>2]|0)-1;c[Gb>>2]=(1<<c[Fb>>2])-1;c[Hb>>2]=0;c[Ib>>2]=0;c[Jb>>2]=c[(c[mb>>2]|0)+8>>2];c[Kb>>2]=c[(c[mb>>2]|0)+12>>2];c[Lb>>2]=(c[Jb>>2]|0)+(c[Kb>>2]|0);c[Mb>>2]=(c[xb>>2]|0)+(c[Kb>>2]|0);if((c[Gb>>2]|0)>>>0>=(c[yb>>2]|0)>>>0)Bj=0;else Bj=(c[yb>>2]|0)-(c[Gb>>2]|0)|0;c[Nb>>2]=Bj;c[Ob>>2]=c[(c[mb>>2]|0)+16>>2];c[Pb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2);c[Qb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2)+4;c[Rb>>2]=(c[yb>>2]|0)+8+1;c[Tb>>2]=0;c[Ub>>2]=1<<c[(c[nb>>2]|0)+12>>2];c[Vb>>2]=(c[ub>>2]|0)-1;c[Wb>>2]=3+(c[sb>>2]|0);c[Xb>>2]=c[sb>>2];while(1){if((c[Xb>>2]|0)>>>0>=(c[Wb>>2]|0)>>>0){dj=340;break;}Zh=c[rb>>2]|0;if((c[Xb>>2]|0)==3)Cj=(c[Zh>>2]|0)-1|0;else Cj=c[Zh+(c[Xb>>2]<<2)>>2]|0;c[Yb>>2]=Cj;c[Zb>>2]=(c[yb>>2]|0)-(c[Yb>>2]|0);c[_b>>2]=0;do{if(((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Kb>>2]|0)|0)>>>0){Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm((c[ob>>2]|0)+(0-(c[Yb>>2]|0))|0,c[Ab>>2]|0)|0))break;Zh=Tj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[ob>>2]|0)+(c[Ab>>2]|0)+(0-(c[Yb>>2]|0))|0,c[pb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}else{c[$b>>2]=(c[Jb>>2]|0)+(c[Zb>>2]|0);if(!(c[qb>>2]|0))break;if(!((((c[Kb>>2]|0)-1-(c[Zb>>2]|0)|0)>>>0>=3?((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Ob>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm(c[$b>>2]|0,c[Ab>>2]|0)|0))break;Zh=Uj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[$b>>2]|0)+(c[Ab>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}}while(0);if((c[_b>>2]|0)>>>0>(c[Vb>>2]|0)>>>0?(c[Vb>>2]=c[_b>>2],c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[Xb>>2]|0)-(c[sb>>2]|0),c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[_b>>2],c[Tb>>2]=(c[Tb>>2]|0)+1,((c[_b>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[_b>>2]|0)|0)==(c[pb>>2]|0))|0):0){dj=338;break;}c[Xb>>2]=(c[Xb>>2]|0)+1;}h:do{if((dj|0)==338){dj=0;c[lb>>2]=c[Tb>>2];}else if((dj|0)==340){dj=0;do{if((c[vb>>2]|0)==3){if((c[Vb>>2]|0)>>>0>=(c[vb>>2]|0)>>>0)break;c[ac>>2]=nm(c[mb>>2]|0,c[ob>>2]|0)|0;if(!(((c[ac>>2]|0)>>>0>(c[Ob>>2]|0)>>>0?((c[yb>>2]|0)-(c[ac>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[qb>>2]|0){if((c[ac>>2]|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=345;break;}c[dc>>2]=(c[Jb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Uj(c[ob>>2]|0,c[dc>>2]|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;}else dj=345;}while(0);if((dj|0)==345){dj=0;c[cc>>2]=(c[xb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Tj(c[ob>>2]|0,c[cc>>2]|0,c[pb>>2]|0)|0;}if((c[bc>>2]|0)>>>0<(c[vb>>2]|0)>>>0)break;c[Vb>>2]=c[bc>>2];c[c[tb>>2]>>2]=(c[yb>>2]|0)-(c[ac>>2]|0)+2;c[(c[tb>>2]|0)+4>>2]=c[bc>>2];c[Tb>>2]=1;if(!(((c[bc>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[bc>>2]|0)|0)==(c[pb>>2]|0))|0))break;c[(c[mb>>2]|0)+24>>2]=(c[yb>>2]|0)+1;c[lb>>2]=1;break h;}}while(0);c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2]=c[yb>>2];while(1){Zh=c[Ub>>2]|0;c[Ub>>2]=Zh+-1;if(!Zh)break;if((c[Db>>2]|0)>>>0<=(c[Ob>>2]|0)>>>0)break;c[ec>>2]=(c[Eb>>2]|0)+((c[Db>>2]&c[Gb>>2])<<1<<2);c[fc>>2]=(c[Hb>>2]|0)>>>0<(c[Ib>>2]|0)>>>0?c[Hb>>2]|0:c[Ib>>2]|0;do{if(c[qb>>2]|0){if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=355;break;}c[gc>>2]=(c[Jb>>2]|0)+(c[Db>>2]|0);Zh=Uj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0<(c[Kb>>2]|0)>>>0)break;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);}else dj=355;}while(0);if((dj|0)==355){dj=0;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);Zh=Tj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;}if((c[fc>>2]|0)>>>0>(c[Vb>>2]|0)>>>0){if((c[fc>>2]|0)>>>0>((c[Rb>>2]|0)-(c[Db>>2]|0)|0)>>>0)c[Rb>>2]=(c[Db>>2]|0)+(c[fc>>2]|0);c[Vb>>2]=c[fc>>2];c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[yb>>2]|0)-(c[Db>>2]|0)+2;c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[fc>>2];c[Tb>>2]=(c[Tb>>2]|0)+1;if((c[fc>>2]|0)>>>0>4096)break;if(((c[ob>>2]|0)+(c[fc>>2]|0)|0)==(c[pb>>2]|0))break;}Zh=c[Db>>2]|0;if((d[(c[gc>>2]|0)+(c[fc>>2]|0)>>0]|0|0)<(d[(c[ob>>2]|0)+(c[fc>>2]|0)>>0]|0|0)){c[c[Pb>>2]>>2]=Zh;c[Hb>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=365;break;}c[Pb>>2]=(c[ec>>2]|0)+4;c[Db>>2]=c[(c[ec>>2]|0)+4>>2];}else{c[c[Qb>>2]>>2]=Zh;c[Ib>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=368;break;}c[Qb>>2]=c[ec>>2];c[Db>>2]=c[c[ec>>2]>>2];}}if((dj|0)==365){dj=0;c[Pb>>2]=Sb;}else if((dj|0)==368){dj=0;c[Qb>>2]=Sb;}c[c[Qb>>2]>>2]=0;c[c[Pb>>2]>>2]=0;c[(c[mb>>2]|0)+24>>2]=(c[Rb>>2]|0)-8;c[lb>>2]=c[Tb>>2];}}while(0);c[md>>2]=c[lb>>2];break d;}}}}while(0);c[Bi>>2]=c[md>>2];if(c[Bi>>2]|0){c[Di>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)+4>>2];if(((c[Di>>2]|0)>>>0>(c[$h>>2]|0)>>>0?1:((c[ei>>2]|0)+(c[Di>>2]|0)|0)>>>0>=4096)|0){dj=481;break b;}c[Ci>>2]=0;while(1){if((c[Ci>>2]|0)>>>0>=(c[Bi>>2]|0)>>>0)break c;c[Ei>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)>>2];pm(Fi,(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0,c[Ei>>2]|0,c[xi>>2]|0);c[Gi>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)+4>>2];if((c[Ci>>2]|0)>>>0>0)Dj=(c[(c[ci>>2]|0)+((c[Ci>>2]|0)-1<<3)+4>>2]|0)+1|0;else Dj=c[ai>>2]|0;c[Hi>>2]=Dj;c[Ii>>2]=c[Gi>>2];i:while(1){if((c[Ii>>2]|0)>>>0<(c[Hi>>2]|0)>>>0)break;c[Ji>>2]=(c[ei>>2]|0)+(c[Ii>>2]|0);Zh=c[Ai>>2]|0;Zi=c[Ii>>2]|0;Ph=c[Th>>2]|0;Qh=c[Rh>>2]|0;c[k>>2]=c[Ei>>2];c[m>>2]=Zi;c[n>>2]=Ph;c[o>>2]=Qh;c[q>>2]=qm((c[k>>2]|0)+1|0)|0;c[r>>2]=(c[m>>2]|0)-3;if(c[(c[n>>2]|0)+56>>2]|0){Qh=(qm((c[r>>2]|0)+1|0)|0)+16|0;c[j>>2]=Qh+(c[q>>2]|0);}else{Qh=(c[q>>2]|0)+(c[(c[n>>2]|0)+52>>2]|0)|0;c[p>>2]=Qh-(qm((c[(c[(c[n>>2]|0)+12>>2]|0)+(c[q>>2]<<2)>>2]|0)+1|0)|0);if((c[o>>2]|0)<2&(c[q>>2]|0)>>>0>=20)c[p>>2]=(c[p>>2]|0)+((c[q>>2]|0)-19<<1);c[s>>2]=rm(c[r>>2]|0)|0;Qh=(c[5840+(c[s>>2]<<2)>>2]|0)+(c[(c[n>>2]|0)+48>>2]|0)|0;Ph=Qh-(qm((c[(c[(c[n>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0)+1|0)|0)|0;c[p>>2]=(c[p>>2]|0)+Ph;c[j>>2]=c[p>>2];}c[Ki>>2]=Zh+(c[j>>2]|0);do{if((c[Ji>>2]|0)>>>0<=(c[fi>>2]|0)>>>0){if((c[Ki>>2]|0)<(c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]|0)){dj=496;break;}if(!(c[Rh>>2]|0))break i;}else dj=496;}while(0);if((dj|0)==496){dj=0;while(1){if((c[fi>>2]|0)>>>0>=(c[Ji>>2]|0)>>>0)break;c[(c[bi>>2]|0)+(((c[fi>>2]|0)+1|0)*28|0)>>2]=1073741824;c[fi>>2]=(c[fi>>2]|0)+1;}c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+8>>2]=c[Ii>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+4>>2]=c[Ei>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+12>>2]=c[yi>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]=c[Ki>>2];Zh=(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+16|0;c[Zh>>2]=c[Fi>>2];c[Zh+4>>2]=c[Fi+4>>2];c[Zh+8>>2]=c[Fi+8>>2];}c[Ii>>2]=(c[Ii>>2]|0)+-1;}c[Ci>>2]=(c[Ci>>2]|0)+1;}}}}while(0);c[ei>>2]=(c[ei>>2]|0)+1;}if((dj|0)==481){dj=0;c[gi>>2]=c[Di>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)>>2];c[fi>>2]=(c[ei>>2]|0)+1;break;}else if((dj|0)==504){dj=0;c[gi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+8>>2];c[hi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+4>>2];c[ei>>2]=(c[fi>>2]|0)-(c[gi>>2]|0);break;}}else{c[gi>>2]=c[mi>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)>>2];c[ei>>2]=0;c[fi>>2]=1;}}while(0);c[Li>>2]=c[gi>>2];c[Mi>>2]=c[hi>>2];c[Ni>>2]=c[ei>>2];while(1){c[Oi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2];c[Pi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2]=c[Li>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2]=c[Mi>>2];c[Li>>2]=c[Oi>>2];c[Mi>>2]=c[Pi>>2];if((c[Oi>>2]|0)>>>0>(c[Ni>>2]|0)>>>0)break;c[Ni>>2]=(c[Ni>>2]|0)-(c[Oi>>2]|0);}c[Qi>>2]=0;while(1){if((c[Qi>>2]|0)>>>0>=(c[fi>>2]|0)>>>0)break;c[Ri>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[Si>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+8>>2];c[Ti>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+4>>2];if((c[Si>>2]|0)==1){c[Vh>>2]=(c[Vh>>2]|0)+1;c[Qi>>2]=(c[Qi>>2]|0)+1;continue;}c[Qi>>2]=(c[Qi>>2]|0)+(c[Si>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+(c[Si>>2]|0);if((c[Ti>>2]|0)>>>0<3){c[Ui>>2]=(c[Ti>>2]|0)+((c[Ri>>2]|0)==0&1);if(c[Ui>>2]|0){Zh=c[Nh>>2]|0;if((c[Ui>>2]|0)==3)Ej=(c[Zh>>2]|0)-1|0;else Ej=c[Zh+(c[Ui>>2]<<2)>>2]|0;c[Vi>>2]=Ej;if((c[Ui>>2]|0)>>>0>=2)c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=c[Vi>>2];}}else{c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=(c[Ti>>2]|0)-2;}vm(c[Th>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,c[Si>>2]|0);wm(c[Mh>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,(c[Si>>2]|0)-3|0);c[Wh>>2]=c[Vh>>2];}xm(c[Th>>2]|0);}l=i;return(c[Xh>>2]|0)-(c[Wh>>2]|0)|0;}function cm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0;i=l;l=l+2144|0;j=i+2136|0;k=i+2132|0;m=i+2128|0;n=i+2124|0;o=i+2120|0;p=i+2116|0;q=i+2112|0;r=i+2108|0;s=i+2104|0;t=i+2100|0;u=i+2096|0;v=i+2092|0;w=i+2088|0;x=i+2084|0;y=i+2080|0;z=i+2076|0;A=i+2072|0;B=i+2068|0;C=i+2064|0;D=i+2060|0;E=i+2056|0;F=i+2052|0;G=i+2048|0;H=i+2044|0;I=i+2040|0;J=i+2036|0;K=i+2032|0;L=i+2028|0;M=i+2024|0;N=i+2020|0;O=i+2016|0;P=i+2012|0;Q=i+2008|0;R=i+2004|0;S=i+2e3|0;T=i+1996|0;U=i+1992|0;V=i+1988|0;W=i+1984|0;X=i+1980|0;Y=i+1976|0;Z=i+1972|0;_=i+1968|0;$=i+1964|0;aa=i+1960|0;ba=i+1956|0;ca=i+1952|0;da=i+1948|0;ea=i+1944|0;fa=i+1940|0;ga=i+1936|0;ha=i+1932|0;ia=i+1928|0;ja=i+1924|0;ka=i+1920|0;la=i+1916|0;ma=i+1912|0;na=i+1908|0;oa=i+1904|0;pa=i+1900|0;qa=i+1896|0;ra=i+1892|0;sa=i+1888|0;ta=i+1884|0;ua=i+1880|0;va=i+1876|0;wa=i+1872|0;xa=i+1868|0;ya=i+1864|0;za=i+1860|0;Aa=i+1856|0;Ba=i+1852|0;Ca=i+1848|0;Da=i+1844|0;Ea=i+1840|0;Fa=i+1836|0;Ga=i+1832|0;Ha=i+1828|0;Ia=i+1824|0;Ja=i+1820|0;Ka=i+1816|0;La=i+1812|0;Ma=i+1808|0;Na=i+1804|0;Oa=i+1800|0;Pa=i+1796|0;Qa=i+1792|0;Ra=i+1788|0;Sa=i+1784|0;Ta=i+1780|0;Ua=i+1776|0;Va=i+1772|0;Wa=i+1768|0;Xa=i+1764|0;Ya=i+1760|0;Za=i+1756|0;_a=i+1752|0;$a=i+1748|0;ab=i+1744|0;bb=i+1740|0;cb=i+1736|0;db=i+1732|0;eb=i+1728|0;fb=i+1724|0;gb=i+1720|0;hb=i+1716|0;ib=i+1712|0;jb=i+1708|0;kb=i+1704|0;lb=i+1700|0;mb=i+1696|0;nb=i+1692|0;ob=i+1688|0;pb=i+1684|0;qb=i+1680|0;rb=i+1676|0;sb=i+1672|0;tb=i+1668|0;ub=i+1664|0;vb=i+1660|0;wb=i+1656|0;xb=i+1652|0;yb=i+1648|0;zb=i+1644|0;Ab=i+1640|0;Bb=i+1636|0;Cb=i+1632|0;Db=i+1628|0;Eb=i+1624|0;Fb=i+1620|0;Gb=i+1616|0;Hb=i+1612|0;Ib=i+1608|0;Jb=i+1604|0;Kb=i+1600|0;Lb=i+1596|0;Mb=i+1592|0;Nb=i+1588|0;Ob=i+1584|0;Pb=i+1580|0;Qb=i+1576|0;Rb=i+1572|0;Sb=i+1568|0;Tb=i+1564|0;Ub=i+1560|0;Vb=i+1556|0;Wb=i+1552|0;Xb=i+1548|0;Yb=i+1544|0;Zb=i+1540|0;_b=i+1536|0;$b=i+1532|0;ac=i+1528|0;bc=i+1524|0;cc=i+1520|0;dc=i+1516|0;ec=i+1512|0;fc=i+1508|0;gc=i+1504|0;hc=i+1500|0;ic=i+1496|0;jc=i+1492|0;kc=i+1488|0;lc=i+1484|0;mc=i+1480|0;nc=i+1476|0;oc=i+1472|0;pc=i+1468|0;qc=i+1464|0;rc=i+1460|0;sc=i+1456|0;tc=i+1452|0;uc=i+1448|0;vc=i+1444|0;wc=i+1440|0;xc=i+1436|0;yc=i+1432|0;zc=i+1428|0;Ac=i+1424|0;Bc=i+1420|0;Cc=i+1416|0;Dc=i+1412|0;Ec=i+1408|0;Fc=i+1404|0;Gc=i+1400|0;Hc=i+1396|0;Ic=i+1392|0;Jc=i+1388|0;Kc=i+1384|0;Lc=i+1380|0;Mc=i+1376|0;Nc=i+1372|0;Oc=i+1368|0;Pc=i+1364|0;Qc=i+1360|0;Rc=i+1356|0;Sc=i+1352|0;Tc=i+1348|0;Uc=i+1344|0;Vc=i+1340|0;Wc=i+1336|0;Xc=i+1332|0;Yc=i+1328|0;Zc=i+1324|0;_c=i+1320|0;$c=i+1316|0;ad=i+1312|0;bd=i+1308|0;cd=i+1304|0;dd=i+1300|0;ed=i+1296|0;fd=i+1292|0;gd=i+1288|0;hd=i+1284|0;id=i+1280|0;jd=i+1276|0;kd=i+1272|0;ld=i+1268|0;md=i+1264|0;nd=i+1260|0;od=i+1256|0;pd=i+1252|0;qd=i+1248|0;rd=i+1244|0;sd=i+1240|0;td=i+1236|0;ud=i+1232|0;vd=i+1228|0;wd=i+1224|0;xd=i+1220|0;yd=i+1216|0;zd=i+1212|0;Ad=i+1208|0;Bd=i+1204|0;Cd=i+1200|0;Dd=i+1196|0;Ed=i+1192|0;Fd=i+1188|0;Gd=i+1184|0;Hd=i+1180|0;Id=i+1176|0;Jd=i+1172|0;Kd=i+1168|0;Ld=i+1164|0;Md=i+1160|0;Nd=i+1156|0;Od=i+1152|0;Pd=i+1148|0;Qd=i+1144|0;Rd=i+1140|0;Sd=i+1136|0;Td=i+1132|0;Ud=i+1128|0;Vd=i+1124|0;Wd=i+1120|0;Xd=i+1116|0;Yd=i+1112|0;Zd=i+1108|0;_d=i+1104|0;$d=i+1100|0;ae=i+1096|0;be=i+1092|0;ce=i+1088|0;de=i+1084|0;ee=i+1080|0;fe=i+1076|0;ge=i+1072|0;he=i+1068|0;ie=i+1064|0;je=i+1060|0;ke=i+1056|0;le=i+1052|0;me=i+1048|0;ne=i+1044|0;oe=i+1040|0;pe=i+1036|0;qe=i+1032|0;re=i+1028|0;se=i+1024|0;te=i+1020|0;ue=i+1016|0;ve=i+1012|0;we=i+1008|0;xe=i+1004|0;ye=i+1e3|0;ze=i+996|0;Ae=i+992|0;Be=i+988|0;Ce=i+984|0;De=i+980|0;Ee=i+976|0;Fe=i+972|0;Ge=i+968|0;He=i+964|0;Ie=i+960|0;Je=i+956|0;Ke=i+952|0;Le=i+948|0;Me=i+944|0;Ne=i+940|0;Oe=i+936|0;Pe=i+932|0;Qe=i+928|0;Re=i+924|0;Se=i+920|0;Te=i+916|0;Ue=i+912|0;Ve=i+908|0;We=i+904|0;Xe=i+900|0;Ye=i+896|0;Ze=i+892|0;_e=i+888|0;$e=i+884|0;af=i+880|0;bf=i+876|0;cf=i+872|0;df=i+868|0;ef=i+864|0;ff=i+860|0;gf=i+856|0;hf=i+852|0;jf=i+848|0;kf=i+844|0;lf=i+840|0;mf=i+836|0;nf=i+832|0;of=i+828|0;pf=i+824|0;qf=i+820|0;rf=i+816|0;sf=i+812|0;tf=i+808|0;uf=i+804|0;vf=i+800|0;wf=i+796|0;xf=i+792|0;yf=i+788|0;zf=i+784|0;Af=i+780|0;Bf=i+776|0;Cf=i+772|0;Df=i+768|0;Ef=i+764|0;Ff=i+760|0;Gf=i+756|0;Hf=i+752|0;If=i+748|0;Jf=i+744|0;Kf=i+740|0;Lf=i+736|0;Mf=i+732|0;Nf=i+728|0;Of=i+724|0;Pf=i+720|0;Qf=i+716|0;Rf=i+712|0;Sf=i+708|0;Tf=i+704|0;Uf=i+700|0;Vf=i+696|0;Wf=i+692|0;Xf=i+688|0;Yf=i+684|0;Zf=i+680|0;_f=i+676|0;$f=i+672|0;ag=i+668|0;bg=i+664|0;cg=i+660|0;dg=i+656|0;eg=i+652|0;fg=i+648|0;gg=i+644|0;hg=i+640|0;ig=i+636|0;jg=i+632|0;kg=i+628|0;lg=i+624|0;mg=i+620|0;ng=i+616|0;og=i+612|0;pg=i+608|0;qg=i+604|0;rg=i+600|0;sg=i+596|0;tg=i+592|0;ug=i+588|0;vg=i+584|0;wg=i+580|0;xg=i+576|0;yg=i+572|0;zg=i+568|0;Ag=i+564|0;Bg=i+560|0;Cg=i+556|0;Dg=i+552|0;Eg=i+548|0;Fg=i+544|0;Gg=i+540|0;Hg=i+536|0;Ig=i+532|0;Jg=i+528|0;Kg=i+524|0;Lg=i+520|0;Mg=i+516|0;Ng=i+512|0;Og=i+508|0;Pg=i+504|0;Qg=i+500|0;Rg=i+496|0;Sg=i+492|0;Tg=i+488|0;Ug=i+484|0;Vg=i+480|0;Wg=i+476|0;Xg=i+472|0;Yg=i+468|0;Zg=i+464|0;_g=i+460|0;$g=i+456|0;ah=i+452|0;bh=i+448|0;ch=i+444|0;dh=i+440|0;eh=i+436|0;fh=i+432|0;gh=i+428|0;hh=i+424|0;ih=i+420|0;jh=i+416|0;kh=i+412|0;lh=i+408|0;mh=i+404|0;nh=i+400|0;oh=i+396|0;ph=i+392|0;qh=i+388|0;rh=i+384|0;sh=i+380|0;th=i+376|0;uh=i+372|0;vh=i+368|0;wh=i+364|0;xh=i+360|0;yh=i+356|0;zh=i+352|0;Ah=i+348|0;Bh=i+344|0;Ch=i+340|0;Dh=i+336|0;Eh=i+332|0;Fh=i+328|0;Gh=i+324|0;Hh=i+320|0;Ih=i+316|0;Jh=i+312|0;Kh=i+308|0;Lh=i+304|0;Mh=i+300|0;Nh=i+296|0;Oh=i+292|0;Ph=i+288|0;Qh=i+284|0;Rh=i+280|0;Sh=i+276|0;Th=i+272|0;Uh=i+268|0;Vh=i+264|0;Wh=i+260|0;Xh=i+256|0;Yh=i+252|0;Zh=i+248|0;_h=i+244|0;$h=i+240|0;ai=i+236|0;bi=i+232|0;ci=i+228|0;di=i+216|0;ei=i+212|0;fi=i+208|0;gi=i+204|0;hi=i+200|0;ii=i+196|0;ji=i+192|0;ki=i+188|0;li=i+184|0;mi=i+180|0;ni=i+176|0;oi=i+172|0;pi=i+168|0;qi=i+164|0;ri=i+160|0;si=i+148|0;ti=i+144|0;ui=i+140|0;vi=i+136|0;wi=i+132|0;xi=i+128|0;yi=i+124|0;zi=i+120|0;Ai=i+116|0;Bi=i+112|0;Ci=i+108|0;Di=i+104|0;Ei=i+100|0;Fi=i+88|0;Gi=i+84|0;Hi=i+80|0;Ii=i+76|0;Ji=i+72|0;Ki=i+68|0;Li=i+64|0;Mi=i+60|0;Ni=i+56|0;Oi=i+52|0;Pi=i+48|0;Qi=i+44|0;Ri=i+40|0;Si=i+36|0;Ti=i+32|0;Ui=i+28|0;Vi=i+24|0;Wi=i+20|0;Xi=i+16|0;Yi=i+12|0;Zi=i+8|0;_i=i+4|0;$i=i;c[Wi>>2]=a;c[Xi>>2]=b;c[Yi>>2]=e;c[Zi>>2]=f;c[_i>>2]=g;c[$i>>2]=h;h=c[Xi>>2]|0;Xi=c[Yi>>2]|0;Yi=c[Zi>>2]|0;Zi=c[_i>>2]|0;_i=c[$i>>2]|0;c[Lh>>2]=c[Wi>>2];c[Mh>>2]=h;c[Nh>>2]=Xi;c[Oh>>2]=Yi;c[Ph>>2]=Zi;c[Qh>>2]=_i;c[Rh>>2]=2;c[Sh>>2]=0;c[Th>>2]=(c[Lh>>2]|0)+48;c[Uh>>2]=c[Ph>>2];c[Vh>>2]=c[Uh>>2];c[Wh>>2]=c[Uh>>2];c[Xh>>2]=(c[Uh>>2]|0)+(c[Qh>>2]|0);c[Yh>>2]=(c[Xh>>2]|0)+-8;c[Zh>>2]=c[(c[Lh>>2]|0)+4>>2];c[_h>>2]=(c[Zh>>2]|0)+(c[(c[Lh>>2]|0)+12>>2]|0);if((c[(c[Oh>>2]|0)+20>>2]|0)>>>0<4095)aj=c[(c[Oh>>2]|0)+20>>2]|0;else aj=4095;c[$h>>2]=aj;c[ai>>2]=(c[(c[Oh>>2]|0)+16>>2]|0)==3?3:4;c[bi>>2]=c[(c[Th>>2]|0)+20>>2];c[ci>>2]=c[(c[Th>>2]|0)+16>>2];c[(c[Lh>>2]|0)+28>>2]=c[(c[Lh>>2]|0)+24>>2];lm(c[Th>>2]|0,c[Ph>>2]|0,c[Qh>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+((c[Vh>>2]|0)==(c[_h>>2]|0)&1);c[di>>2]=0;c[di+4>>2]=0;c[di+8>>2]=0;while(1){if((c[Vh>>2]|0)>>>0>=(c[Yh>>2]|0)>>>0)break;c[fi>>2]=0;c[ii>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[ji>>2]=((c[ii>>2]|0)!=0^1)&1;_h=c[Oh>>2]|0;Qh=c[Vh>>2]|0;Ph=c[Xh>>2]|0;aj=c[Sh>>2]|0;Zh=c[Nh>>2]|0;Uh=c[ji>>2]|0;_i=c[ci>>2]|0;Zi=c[ai>>2]|0;c[Bh>>2]=c[Lh>>2];c[Ch>>2]=_h;c[Dh>>2]=Qh;c[Eh>>2]=Ph;c[Fh>>2]=aj;c[Gh>>2]=Zh;c[Hh>>2]=Uh;c[Ih>>2]=_i;c[Jh>>2]=Zi;c[Kh>>2]=c[(c[Ch>>2]|0)+16>>2];a:do{if((c[Dh>>2]|0)>>>0<((c[(c[Bh>>2]|0)+4>>2]|0)+(c[(c[Bh>>2]|0)+24>>2]|0)|0)>>>0)c[Ah>>2]=0;else{Zi=c[Ch>>2]|0;_i=c[Dh>>2]|0;Uh=c[Eh>>2]|0;Zh=c[Kh>>2]|0;aj=c[Fh>>2]|0;c[rh>>2]=c[Bh>>2];c[sh>>2]=Zi;c[th>>2]=_i;c[uh>>2]=Uh;c[vh>>2]=Zh;c[wh>>2]=aj;c[xh>>2]=c[(c[rh>>2]|0)+4>>2];c[yh>>2]=(c[th>>2]|0)-(c[xh>>2]|0);c[zh>>2]=c[(c[rh>>2]|0)+24>>2];while(1){if((c[zh>>2]|0)>>>0>=(c[yh>>2]|0)>>>0)break;aj=Rj(c[rh>>2]|0,c[sh>>2]|0,(c[xh>>2]|0)+(c[zh>>2]|0)|0,c[uh>>2]|0,c[vh>>2]|0,c[wh>>2]|0)|0;c[zh>>2]=(c[zh>>2]|0)+aj;}c[(c[rh>>2]|0)+24>>2]=c[yh>>2];switch(c[Kh>>2]|0){case 3:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[wg>>2]=c[Bh>>2];c[xg>>2]=aj;c[yg>>2]=Zh;c[zg>>2]=Uh;c[Ag>>2]=_i;c[Bg>>2]=Zi;c[Cg>>2]=Ph;c[Dg>>2]=Qh;c[Eg>>2]=_h;c[Fg>>2]=3;if((c[(c[xg>>2]|0)+20>>2]|0)>>>0<4095)bj=c[(c[xg>>2]|0)+20>>2]|0;else bj=4095;c[Gg>>2]=bj;c[Hg>>2]=c[(c[wg>>2]|0)+4>>2];c[Ig>>2]=(c[yg>>2]|0)-(c[Hg>>2]|0);c[Jg>>2]=c[(c[xg>>2]|0)+8>>2];c[Kg>>2]=(c[Fg>>2]|0)==3?3:4;c[Lg>>2]=c[(c[wg>>2]|0)+36>>2];c[Mg>>2]=Sj(c[yg>>2]|0,c[Jg>>2]|0,c[Fg>>2]|0)|0;c[Ng>>2]=c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2];c[Og>>2]=c[(c[wg>>2]|0)+44>>2];c[Pg>>2]=(c[(c[xg>>2]|0)+4>>2]|0)-1;c[Qg>>2]=(1<<c[Pg>>2])-1;c[Rg>>2]=0;c[Sg>>2]=0;c[Tg>>2]=c[(c[wg>>2]|0)+8>>2];c[Ug>>2]=c[(c[wg>>2]|0)+12>>2];c[Vg>>2]=(c[Tg>>2]|0)+(c[Ug>>2]|0);c[Wg>>2]=(c[Hg>>2]|0)+(c[Ug>>2]|0);if((c[Qg>>2]|0)>>>0>=(c[Ig>>2]|0)>>>0)cj=0;else cj=(c[Ig>>2]|0)-(c[Qg>>2]|0)|0;c[Xg>>2]=cj;c[Yg>>2]=c[(c[wg>>2]|0)+16>>2];c[Zg>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2);c[_g>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2)+4;c[$g>>2]=(c[Ig>>2]|0)+8+1;c[bh>>2]=0;c[ch>>2]=1<<c[(c[xg>>2]|0)+12>>2];c[dh>>2]=(c[Eg>>2]|0)-1;c[eh>>2]=3+(c[Cg>>2]|0);c[fh>>2]=c[Cg>>2];while(1){if((c[fh>>2]|0)>>>0>=(c[eh>>2]|0)>>>0){dj=31;break;}_h=c[Bg>>2]|0;if((c[fh>>2]|0)==3)ej=(c[_h>>2]|0)-1|0;else ej=c[_h+(c[fh>>2]<<2)>>2]|0;c[gh>>2]=ej;c[hh>>2]=(c[Ig>>2]|0)-(c[gh>>2]|0);c[ih>>2]=0;if(((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Ug>>2]|0)|0)>>>0){_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0;if((_h|0)==(mm((c[yg>>2]|0)+(0-(c[gh>>2]|0))|0,c[Kg>>2]|0)|0)){_h=Tj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[yg>>2]|0)+(c[Kg>>2]|0)+(0-(c[gh>>2]|0))|0,c[zg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}else{c[jh>>2]=(c[Tg>>2]|0)+(c[hh>>2]|0);if((c[Ag>>2]|0?(((c[Ug>>2]|0)-1-(c[hh>>2]|0)|0)>>>0>=3?((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Yg>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0,(_h|0)==(mm(c[jh>>2]|0,c[Kg>>2]|0)|0)):0){_h=Uj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[jh>>2]|0)+(c[Kg>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}if((c[ih>>2]|0)>>>0>(c[dh>>2]|0)>>>0?(c[dh>>2]=c[ih>>2],c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[fh>>2]|0)-(c[Cg>>2]|0),c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ih>>2],c[bh>>2]=(c[bh>>2]|0)+1,((c[ih>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[ih>>2]|0)|0)==(c[zg>>2]|0))|0):0){dj=29;break;}c[fh>>2]=(c[fh>>2]|0)+1;}do{if((dj|0)==29){dj=0;c[vg>>2]=c[bh>>2];}else if((dj|0)==31){dj=0;if(((c[Fg>>2]|0)==3?(c[dh>>2]|0)>>>0<(c[Fg>>2]|0)>>>0:0)?(c[kh>>2]=nm(c[wg>>2]|0,c[yg>>2]|0)|0,((c[kh>>2]|0)>>>0>(c[Yg>>2]|0)>>>0?((c[Ig>>2]|0)-(c[kh>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ag>>2]|0?(c[kh>>2]|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[nh>>2]=(c[Tg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Uj(c[yg>>2]|0,c[nh>>2]|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;}else{c[mh>>2]=(c[Hg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Tj(c[yg>>2]|0,c[mh>>2]|0,c[zg>>2]|0)|0;}if((c[lh>>2]|0)>>>0>=(c[Fg>>2]|0)>>>0?(c[dh>>2]=c[lh>>2],c[c[Dg>>2]>>2]=(c[Ig>>2]|0)-(c[kh>>2]|0)+2,c[(c[Dg>>2]|0)+4>>2]=c[lh>>2],c[bh>>2]=1,((c[lh>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[lh>>2]|0)|0)==(c[zg>>2]|0))|0):0){c[(c[wg>>2]|0)+24>>2]=(c[Ig>>2]|0)+1;c[vg>>2]=1;break;}}c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2]=c[Ig>>2];while(1){_h=c[ch>>2]|0;c[ch>>2]=_h+-1;if(!_h)break;if((c[Ng>>2]|0)>>>0<=(c[Yg>>2]|0)>>>0)break;c[oh>>2]=(c[Og>>2]|0)+((c[Ng>>2]&c[Qg>>2])<<1<<2);c[ph>>2]=(c[Rg>>2]|0)>>>0<(c[Sg>>2]|0)>>>0?c[Rg>>2]|0:c[Sg>>2]|0;if(c[Ag>>2]|0?((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[qh>>2]=(c[Tg>>2]|0)+(c[Ng>>2]|0);_h=Uj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;if(((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0>=(c[Ug>>2]|0)>>>0)c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);}else{c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);_h=Tj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;}if((c[ph>>2]|0)>>>0>(c[dh>>2]|0)>>>0){if((c[ph>>2]|0)>>>0>((c[$g>>2]|0)-(c[Ng>>2]|0)|0)>>>0)c[$g>>2]=(c[Ng>>2]|0)+(c[ph>>2]|0);c[dh>>2]=c[ph>>2];c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[Ig>>2]|0)-(c[Ng>>2]|0)+2;c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ph>>2];c[bh>>2]=(c[bh>>2]|0)+1;if((c[ph>>2]|0)>>>0>4096)break;if(((c[yg>>2]|0)+(c[ph>>2]|0)|0)==(c[zg>>2]|0))break;}_h=c[Ng>>2]|0;if((d[(c[qh>>2]|0)+(c[ph>>2]|0)>>0]|0|0)<(d[(c[yg>>2]|0)+(c[ph>>2]|0)>>0]|0|0)){c[c[Zg>>2]>>2]=_h;c[Rg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=56;break;}c[Zg>>2]=(c[oh>>2]|0)+4;c[Ng>>2]=c[(c[oh>>2]|0)+4>>2];}else{c[c[_g>>2]>>2]=_h;c[Sg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=59;break;}c[_g>>2]=c[oh>>2];c[Ng>>2]=c[c[oh>>2]>>2];}}if((dj|0)==56){dj=0;c[Zg>>2]=ah;}else if((dj|0)==59){dj=0;c[_g>>2]=ah;}c[c[_g>>2]>>2]=0;c[c[Zg>>2]>>2]=0;c[(c[wg>>2]|0)+24>>2]=(c[$g>>2]|0)-8;c[vg>>2]=c[bh>>2];}}while(0);c[Ah>>2]=c[vg>>2];break a;break;}case 7:case 6:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Hd>>2]=c[Bh>>2];c[Id>>2]=_h;c[Jd>>2]=Qh;c[Kd>>2]=Ph;c[Ld>>2]=Zi;c[Md>>2]=_i;c[Nd>>2]=Uh;c[Od>>2]=Zh;c[Pd>>2]=aj;c[Qd>>2]=6;if((c[(c[Id>>2]|0)+20>>2]|0)>>>0<4095)fj=c[(c[Id>>2]|0)+20>>2]|0;else fj=4095;c[Rd>>2]=fj;c[Sd>>2]=c[(c[Hd>>2]|0)+4>>2];c[Td>>2]=(c[Jd>>2]|0)-(c[Sd>>2]|0);c[Ud>>2]=c[(c[Id>>2]|0)+8>>2];c[Vd>>2]=(c[Qd>>2]|0)==3?3:4;c[Wd>>2]=c[(c[Hd>>2]|0)+36>>2];c[Xd>>2]=Sj(c[Jd>>2]|0,c[Ud>>2]|0,c[Qd>>2]|0)|0;c[Yd>>2]=c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2];c[Zd>>2]=c[(c[Hd>>2]|0)+44>>2];c[_d>>2]=(c[(c[Id>>2]|0)+4>>2]|0)-1;c[$d>>2]=(1<<c[_d>>2])-1;c[ae>>2]=0;c[be>>2]=0;c[ce>>2]=c[(c[Hd>>2]|0)+8>>2];c[de>>2]=c[(c[Hd>>2]|0)+12>>2];c[ee>>2]=(c[ce>>2]|0)+(c[de>>2]|0);c[fe>>2]=(c[Sd>>2]|0)+(c[de>>2]|0);if((c[$d>>2]|0)>>>0>=(c[Td>>2]|0)>>>0)gj=0;else gj=(c[Td>>2]|0)-(c[$d>>2]|0)|0;c[ge>>2]=gj;c[he>>2]=c[(c[Hd>>2]|0)+16>>2];c[ie>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2);c[je>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2)+4;c[ke>>2]=(c[Td>>2]|0)+8+1;c[me>>2]=0;c[ne>>2]=1<<c[(c[Id>>2]|0)+12>>2];c[oe>>2]=(c[Pd>>2]|0)-1;c[pe>>2]=3+(c[Nd>>2]|0);c[qe>>2]=c[Nd>>2];while(1){if((c[qe>>2]|0)>>>0>=(c[pe>>2]|0)>>>0){dj=190;break;}aj=c[Md>>2]|0;if((c[qe>>2]|0)==3)hj=(c[aj>>2]|0)-1|0;else hj=c[aj+(c[qe>>2]<<2)>>2]|0;c[re>>2]=hj;c[se>>2]=(c[Td>>2]|0)-(c[re>>2]|0);c[te>>2]=0;if(((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[de>>2]|0)|0)>>>0){aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0;if((aj|0)==(mm((c[Jd>>2]|0)+(0-(c[re>>2]|0))|0,c[Vd>>2]|0)|0)){aj=Tj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[Jd>>2]|0)+(c[Vd>>2]|0)+(0-(c[re>>2]|0))|0,c[Kd>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}else{c[ue>>2]=(c[ce>>2]|0)+(c[se>>2]|0);if((c[Ld>>2]|0?(((c[de>>2]|0)-1-(c[se>>2]|0)|0)>>>0>=3?((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[he>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0,(aj|0)==(mm(c[ue>>2]|0,c[Vd>>2]|0)|0)):0){aj=Uj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[ue>>2]|0)+(c[Vd>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}if((c[te>>2]|0)>>>0>(c[oe>>2]|0)>>>0?(c[oe>>2]=c[te>>2],c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[qe>>2]|0)-(c[Nd>>2]|0),c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[te>>2],c[me>>2]=(c[me>>2]|0)+1,((c[te>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[te>>2]|0)|0)==(c[Kd>>2]|0))|0):0){dj=188;break;}c[qe>>2]=(c[qe>>2]|0)+1;}do{if((dj|0)==188){dj=0;c[Gd>>2]=c[me>>2];}else if((dj|0)==190){dj=0;if(((c[Qd>>2]|0)==3?(c[oe>>2]|0)>>>0<(c[Qd>>2]|0)>>>0:0)?(c[ve>>2]=nm(c[Hd>>2]|0,c[Jd>>2]|0)|0,((c[ve>>2]|0)>>>0>(c[he>>2]|0)>>>0?((c[Td>>2]|0)-(c[ve>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ld>>2]|0?(c[ve>>2]|0)>>>0<(c[de>>2]|0)>>>0:0){c[ye>>2]=(c[ce>>2]|0)+(c[ve>>2]|0);c[we>>2]=Uj(c[Jd>>2]|0,c[ye>>2]|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;}else{c[xe>>2]=(c[Sd>>2]|0)+(c[ve>>2]|0);c[we>>2]=Tj(c[Jd>>2]|0,c[xe>>2]|0,c[Kd>>2]|0)|0;}if((c[we>>2]|0)>>>0>=(c[Qd>>2]|0)>>>0?(c[oe>>2]=c[we>>2],c[c[Od>>2]>>2]=(c[Td>>2]|0)-(c[ve>>2]|0)+2,c[(c[Od>>2]|0)+4>>2]=c[we>>2],c[me>>2]=1,((c[we>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[we>>2]|0)|0)==(c[Kd>>2]|0))|0):0){c[(c[Hd>>2]|0)+24>>2]=(c[Td>>2]|0)+1;c[Gd>>2]=1;break;}}c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2]=c[Td>>2];while(1){aj=c[ne>>2]|0;c[ne>>2]=aj+-1;if(!aj)break;if((c[Yd>>2]|0)>>>0<=(c[he>>2]|0)>>>0)break;c[ze>>2]=(c[Zd>>2]|0)+((c[Yd>>2]&c[$d>>2])<<1<<2);c[Ae>>2]=(c[ae>>2]|0)>>>0<(c[be>>2]|0)>>>0?c[ae>>2]|0:c[be>>2]|0;if(c[Ld>>2]|0?((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0<(c[de>>2]|0)>>>0:0){c[Be>>2]=(c[ce>>2]|0)+(c[Yd>>2]|0);aj=Uj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;if(((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0>=(c[de>>2]|0)>>>0)c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);}else{c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);aj=Tj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;}if((c[Ae>>2]|0)>>>0>(c[oe>>2]|0)>>>0){if((c[Ae>>2]|0)>>>0>((c[ke>>2]|0)-(c[Yd>>2]|0)|0)>>>0)c[ke>>2]=(c[Yd>>2]|0)+(c[Ae>>2]|0);c[oe>>2]=c[Ae>>2];c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[Td>>2]|0)-(c[Yd>>2]|0)+2;c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[Ae>>2];c[me>>2]=(c[me>>2]|0)+1;if((c[Ae>>2]|0)>>>0>4096)break;if(((c[Jd>>2]|0)+(c[Ae>>2]|0)|0)==(c[Kd>>2]|0))break;}aj=c[Yd>>2]|0;if((d[(c[Be>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)<(d[(c[Jd>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)){c[c[ie>>2]>>2]=aj;c[ae>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=215;break;}c[ie>>2]=(c[ze>>2]|0)+4;c[Yd>>2]=c[(c[ze>>2]|0)+4>>2];}else{c[c[je>>2]>>2]=aj;c[be>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=218;break;}c[je>>2]=c[ze>>2];c[Yd>>2]=c[c[ze>>2]>>2];}}if((dj|0)==215){dj=0;c[ie>>2]=le;}else if((dj|0)==218){dj=0;c[je>>2]=le;}c[c[je>>2]>>2]=0;c[c[ie>>2]>>2]=0;c[(c[Hd>>2]|0)+24>>2]=(c[ke>>2]|0)-8;c[Gd>>2]=c[me>>2];}}while(0);c[Ah>>2]=c[Gd>>2];break a;break;}case 5:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[De>>2]=c[Bh>>2];c[Ee>>2]=aj;c[Fe>>2]=Zh;c[Ge>>2]=Uh;c[He>>2]=_i;c[Ie>>2]=Zi;c[Je>>2]=Ph;c[Ke>>2]=Qh;c[Le>>2]=_h;c[Me>>2]=5;if((c[(c[Ee>>2]|0)+20>>2]|0)>>>0<4095)ij=c[(c[Ee>>2]|0)+20>>2]|0;else ij=4095;c[Ne>>2]=ij;c[Oe>>2]=c[(c[De>>2]|0)+4>>2];c[Pe>>2]=(c[Fe>>2]|0)-(c[Oe>>2]|0);c[Qe>>2]=c[(c[Ee>>2]|0)+8>>2];c[Re>>2]=(c[Me>>2]|0)==3?3:4;c[Se>>2]=c[(c[De>>2]|0)+36>>2];c[Te>>2]=Sj(c[Fe>>2]|0,c[Qe>>2]|0,c[Me>>2]|0)|0;c[Ue>>2]=c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2];c[Ve>>2]=c[(c[De>>2]|0)+44>>2];c[We>>2]=(c[(c[Ee>>2]|0)+4>>2]|0)-1;c[Xe>>2]=(1<<c[We>>2])-1;c[Ye>>2]=0;c[Ze>>2]=0;c[_e>>2]=c[(c[De>>2]|0)+8>>2];c[$e>>2]=c[(c[De>>2]|0)+12>>2];c[af>>2]=(c[_e>>2]|0)+(c[$e>>2]|0);c[bf>>2]=(c[Oe>>2]|0)+(c[$e>>2]|0);if((c[Xe>>2]|0)>>>0>=(c[Pe>>2]|0)>>>0)jj=0;else jj=(c[Pe>>2]|0)-(c[Xe>>2]|0)|0;c[cf>>2]=jj;c[df>>2]=c[(c[De>>2]|0)+16>>2];c[ef>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2);c[ff>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2)+4;c[gf>>2]=(c[Pe>>2]|0)+8+1;c[jf>>2]=0;c[kf>>2]=1<<c[(c[Ee>>2]|0)+12>>2];c[lf>>2]=(c[Le>>2]|0)-1;c[mf>>2]=3+(c[Je>>2]|0);c[nf>>2]=c[Je>>2];while(1){if((c[nf>>2]|0)>>>0>=(c[mf>>2]|0)>>>0){dj=137;break;}_h=c[Ie>>2]|0;if((c[nf>>2]|0)==3)kj=(c[_h>>2]|0)-1|0;else kj=c[_h+(c[nf>>2]<<2)>>2]|0;c[of>>2]=kj;c[pf>>2]=(c[Pe>>2]|0)-(c[of>>2]|0);c[qf>>2]=0;if(((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[$e>>2]|0)|0)>>>0){_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0;if((_h|0)==(mm((c[Fe>>2]|0)+(0-(c[of>>2]|0))|0,c[Re>>2]|0)|0)){_h=Tj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[Fe>>2]|0)+(c[Re>>2]|0)+(0-(c[of>>2]|0))|0,c[Ge>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}else{c[rf>>2]=(c[_e>>2]|0)+(c[pf>>2]|0);if((c[He>>2]|0?(((c[$e>>2]|0)-1-(c[pf>>2]|0)|0)>>>0>=3?((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[df>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0,(_h|0)==(mm(c[rf>>2]|0,c[Re>>2]|0)|0)):0){_h=Uj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[rf>>2]|0)+(c[Re>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}if((c[qf>>2]|0)>>>0>(c[lf>>2]|0)>>>0?(c[lf>>2]=c[qf>>2],c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[nf>>2]|0)-(c[Je>>2]|0),c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[qf>>2],c[jf>>2]=(c[jf>>2]|0)+1,((c[qf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[qf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){dj=135;break;}c[nf>>2]=(c[nf>>2]|0)+1;}do{if((dj|0)==135){dj=0;c[Ce>>2]=c[jf>>2];}else if((dj|0)==137){dj=0;if(((c[Me>>2]|0)==3?(c[lf>>2]|0)>>>0<(c[Me>>2]|0)>>>0:0)?(c[sf>>2]=nm(c[De>>2]|0,c[Fe>>2]|0)|0,((c[sf>>2]|0)>>>0>(c[df>>2]|0)>>>0?((c[Pe>>2]|0)-(c[sf>>2]|0)|0)>>>0<262144:0)|0):0){if(c[He>>2]|0?(c[sf>>2]|0)>>>0<(c[$e>>2]|0)>>>0:0){c[vf>>2]=(c[_e>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Uj(c[Fe>>2]|0,c[vf>>2]|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;}else{c[uf>>2]=(c[Oe>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Tj(c[Fe>>2]|0,c[uf>>2]|0,c[Ge>>2]|0)|0;}if((c[tf>>2]|0)>>>0>=(c[Me>>2]|0)>>>0?(c[lf>>2]=c[tf>>2],c[c[Ke>>2]>>2]=(c[Pe>>2]|0)-(c[sf>>2]|0)+2,c[(c[Ke>>2]|0)+4>>2]=c[tf>>2],c[jf>>2]=1,((c[tf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[tf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){c[(c[De>>2]|0)+24>>2]=(c[Pe>>2]|0)+1;c[Ce>>2]=1;break;}}c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2]=c[Pe>>2];while(1){_h=c[kf>>2]|0;c[kf>>2]=_h+-1;if(!_h)break;if((c[Ue>>2]|0)>>>0<=(c[df>>2]|0)>>>0)break;c[wf>>2]=(c[Ve>>2]|0)+((c[Ue>>2]&c[Xe>>2])<<1<<2);c[xf>>2]=(c[Ye>>2]|0)>>>0<(c[Ze>>2]|0)>>>0?c[Ye>>2]|0:c[Ze>>2]|0;if(c[He>>2]|0?((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0<(c[$e>>2]|0)>>>0:0){c[yf>>2]=(c[_e>>2]|0)+(c[Ue>>2]|0);_h=Uj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;if(((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0>=(c[$e>>2]|0)>>>0)c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);}else{c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);_h=Tj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;}if((c[xf>>2]|0)>>>0>(c[lf>>2]|0)>>>0){if((c[xf>>2]|0)>>>0>((c[gf>>2]|0)-(c[Ue>>2]|0)|0)>>>0)c[gf>>2]=(c[Ue>>2]|0)+(c[xf>>2]|0);c[lf>>2]=c[xf>>2];c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[Pe>>2]|0)-(c[Ue>>2]|0)+2;c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[xf>>2];c[jf>>2]=(c[jf>>2]|0)+1;if((c[xf>>2]|0)>>>0>4096)break;if(((c[Fe>>2]|0)+(c[xf>>2]|0)|0)==(c[Ge>>2]|0))break;}_h=c[Ue>>2]|0;if((d[(c[yf>>2]|0)+(c[xf>>2]|0)>>0]|0|0)<(d[(c[Fe>>2]|0)+(c[xf>>2]|0)>>0]|0|0)){c[c[ef>>2]>>2]=_h;c[Ye>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=162;break;}c[ef>>2]=(c[wf>>2]|0)+4;c[Ue>>2]=c[(c[wf>>2]|0)+4>>2];}else{c[c[ff>>2]>>2]=_h;c[Ze>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=165;break;}c[ff>>2]=c[wf>>2];c[Ue>>2]=c[c[wf>>2]>>2];}}if((dj|0)==162){dj=0;c[ef>>2]=hf;}else if((dj|0)==165){dj=0;c[ff>>2]=hf;}c[c[ff>>2]>>2]=0;c[c[ef>>2]>>2]=0;c[(c[De>>2]|0)+24>>2]=(c[gf>>2]|0)-8;c[Ce>>2]=c[jf>>2];}}while(0);c[Ah>>2]=c[Ce>>2];break a;break;}default:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Af>>2]=c[Bh>>2];c[Bf>>2]=_h;c[Cf>>2]=Qh;c[Df>>2]=Ph;c[Ef>>2]=Zi;c[Ff>>2]=_i;c[Gf>>2]=Uh;c[Hf>>2]=Zh;c[If>>2]=aj;c[Jf>>2]=4;if((c[(c[Bf>>2]|0)+20>>2]|0)>>>0<4095)lj=c[(c[Bf>>2]|0)+20>>2]|0;else lj=4095;c[Kf>>2]=lj;c[Lf>>2]=c[(c[Af>>2]|0)+4>>2];c[Mf>>2]=(c[Cf>>2]|0)-(c[Lf>>2]|0);c[Nf>>2]=c[(c[Bf>>2]|0)+8>>2];c[Of>>2]=(c[Jf>>2]|0)==3?3:4;c[Pf>>2]=c[(c[Af>>2]|0)+36>>2];c[Qf>>2]=Sj(c[Cf>>2]|0,c[Nf>>2]|0,c[Jf>>2]|0)|0;c[Rf>>2]=c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2];c[Sf>>2]=c[(c[Af>>2]|0)+44>>2];c[Tf>>2]=(c[(c[Bf>>2]|0)+4>>2]|0)-1;c[Uf>>2]=(1<<c[Tf>>2])-1;c[Vf>>2]=0;c[Wf>>2]=0;c[Xf>>2]=c[(c[Af>>2]|0)+8>>2];c[Yf>>2]=c[(c[Af>>2]|0)+12>>2];c[Zf>>2]=(c[Xf>>2]|0)+(c[Yf>>2]|0);c[_f>>2]=(c[Lf>>2]|0)+(c[Yf>>2]|0);if((c[Uf>>2]|0)>>>0>=(c[Mf>>2]|0)>>>0)mj=0;else mj=(c[Mf>>2]|0)-(c[Uf>>2]|0)|0;c[$f>>2]=mj;c[ag>>2]=c[(c[Af>>2]|0)+16>>2];c[bg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2);c[cg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2)+4;c[dg>>2]=(c[Mf>>2]|0)+8+1;c[fg>>2]=0;c[gg>>2]=1<<c[(c[Bf>>2]|0)+12>>2];c[hg>>2]=(c[If>>2]|0)-1;c[ig>>2]=3+(c[Gf>>2]|0);c[jg>>2]=c[Gf>>2];while(1){if((c[jg>>2]|0)>>>0>=(c[ig>>2]|0)>>>0){dj=84;break;}aj=c[Ff>>2]|0;if((c[jg>>2]|0)==3)nj=(c[aj>>2]|0)-1|0;else nj=c[aj+(c[jg>>2]<<2)>>2]|0;c[kg>>2]=nj;c[lg>>2]=(c[Mf>>2]|0)-(c[kg>>2]|0);c[mg>>2]=0;if(((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[Yf>>2]|0)|0)>>>0){aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0;if((aj|0)==(mm((c[Cf>>2]|0)+(0-(c[kg>>2]|0))|0,c[Of>>2]|0)|0)){aj=Tj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[Cf>>2]|0)+(c[Of>>2]|0)+(0-(c[kg>>2]|0))|0,c[Df>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}else{c[ng>>2]=(c[Xf>>2]|0)+(c[lg>>2]|0);if((c[Ef>>2]|0?(((c[Yf>>2]|0)-1-(c[lg>>2]|0)|0)>>>0>=3?((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[ag>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0,(aj|0)==(mm(c[ng>>2]|0,c[Of>>2]|0)|0)):0){aj=Uj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[ng>>2]|0)+(c[Of>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}if((c[mg>>2]|0)>>>0>(c[hg>>2]|0)>>>0?(c[hg>>2]=c[mg>>2],c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[jg>>2]|0)-(c[Gf>>2]|0),c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[mg>>2],c[fg>>2]=(c[fg>>2]|0)+1,((c[mg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[mg>>2]|0)|0)==(c[Df>>2]|0))|0):0){dj=82;break;}c[jg>>2]=(c[jg>>2]|0)+1;}do{if((dj|0)==82){dj=0;c[zf>>2]=c[fg>>2];}else if((dj|0)==84){dj=0;if(((c[Jf>>2]|0)==3?(c[hg>>2]|0)>>>0<(c[Jf>>2]|0)>>>0:0)?(c[og>>2]=nm(c[Af>>2]|0,c[Cf>>2]|0)|0,((c[og>>2]|0)>>>0>(c[ag>>2]|0)>>>0?((c[Mf>>2]|0)-(c[og>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ef>>2]|0?(c[og>>2]|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[rg>>2]=(c[Xf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Uj(c[Cf>>2]|0,c[rg>>2]|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;}else{c[qg>>2]=(c[Lf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Tj(c[Cf>>2]|0,c[qg>>2]|0,c[Df>>2]|0)|0;}if((c[pg>>2]|0)>>>0>=(c[Jf>>2]|0)>>>0?(c[hg>>2]=c[pg>>2],c[c[Hf>>2]>>2]=(c[Mf>>2]|0)-(c[og>>2]|0)+2,c[(c[Hf>>2]|0)+4>>2]=c[pg>>2],c[fg>>2]=1,((c[pg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[pg>>2]|0)|0)==(c[Df>>2]|0))|0):0){c[(c[Af>>2]|0)+24>>2]=(c[Mf>>2]|0)+1;c[zf>>2]=1;break;}}c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2]=c[Mf>>2];while(1){aj=c[gg>>2]|0;c[gg>>2]=aj+-1;if(!aj)break;if((c[Rf>>2]|0)>>>0<=(c[ag>>2]|0)>>>0)break;c[sg>>2]=(c[Sf>>2]|0)+((c[Rf>>2]&c[Uf>>2])<<1<<2);c[tg>>2]=(c[Vf>>2]|0)>>>0<(c[Wf>>2]|0)>>>0?c[Vf>>2]|0:c[Wf>>2]|0;if(c[Ef>>2]|0?((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[ug>>2]=(c[Xf>>2]|0)+(c[Rf>>2]|0);aj=Uj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;if(((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0>=(c[Yf>>2]|0)>>>0)c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);}else{c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);aj=Tj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;}if((c[tg>>2]|0)>>>0>(c[hg>>2]|0)>>>0){if((c[tg>>2]|0)>>>0>((c[dg>>2]|0)-(c[Rf>>2]|0)|0)>>>0)c[dg>>2]=(c[Rf>>2]|0)+(c[tg>>2]|0);c[hg>>2]=c[tg>>2];c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[Mf>>2]|0)-(c[Rf>>2]|0)+2;c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[tg>>2];c[fg>>2]=(c[fg>>2]|0)+1;if((c[tg>>2]|0)>>>0>4096)break;if(((c[Cf>>2]|0)+(c[tg>>2]|0)|0)==(c[Df>>2]|0))break;}aj=c[Rf>>2]|0;if((d[(c[ug>>2]|0)+(c[tg>>2]|0)>>0]|0|0)<(d[(c[Cf>>2]|0)+(c[tg>>2]|0)>>0]|0|0)){c[c[bg>>2]>>2]=aj;c[Vf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=109;break;}c[bg>>2]=(c[sg>>2]|0)+4;c[Rf>>2]=c[(c[sg>>2]|0)+4>>2];}else{c[c[cg>>2]>>2]=aj;c[Wf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=112;break;}c[cg>>2]=c[sg>>2];c[Rf>>2]=c[c[sg>>2]>>2];}}if((dj|0)==109){dj=0;c[bg>>2]=eg;}else if((dj|0)==112){dj=0;c[cg>>2]=eg;}c[c[cg>>2]>>2]=0;c[c[bg>>2]>>2]=0;c[(c[Af>>2]|0)+24>>2]=(c[dg>>2]|0)-8;c[zf>>2]=c[fg>>2];}}while(0);c[Ah>>2]=c[zf>>2];break a;}}}}while(0);c[ki>>2]=c[Ah>>2];if(!(c[ki>>2]|0)){c[Vh>>2]=(c[Vh>>2]|0)+1;continue;}c[li>>2]=0;while(1){if((c[li>>2]|0)>>>0>=3)break;c[(c[bi>>2]|0)+16+(c[li>>2]<<2)>>2]=c[(c[Nh>>2]|0)+(c[li>>2]<<2)>>2];c[li>>2]=(c[li>>2]|0)+1;}c[(c[bi>>2]|0)+8>>2]=1;c[(c[bi>>2]|0)+12>>2]=c[ii>>2];c[mi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)+4>>2];do{if((c[mi>>2]|0)>>>0<=(c[$h>>2]|0)>>>0){c[ni>>2]=om(di,c[Wh>>2]|0,c[ii>>2]|0,c[Th>>2]|0)|0;c[oi>>2]=0;while(1){if((c[oi>>2]|0)>>>0>=(c[ai>>2]|0)>>>0)break;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=1073741824;c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=0;while(1){if((c[pi>>2]|0)>>>0>=(c[ki>>2]|0)>>>0)break;c[qi>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)>>2];c[ri>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)+4>>2];pm(si,c[Nh>>2]|0,c[qi>>2]|0,c[ji>>2]|0);while(1){if((c[oi>>2]|0)>>>0>(c[ri>>2]|0)>>>0)break;aj=c[ni>>2]|0;Zh=c[oi>>2]|0;Uh=c[Th>>2]|0;_i=c[Rh>>2]|0;c[yd>>2]=c[qi>>2];c[zd>>2]=Zh;c[Ad>>2]=Uh;c[Bd>>2]=_i;c[Dd>>2]=qm((c[yd>>2]|0)+1|0)|0;c[Ed>>2]=(c[zd>>2]|0)-3;if(c[(c[Ad>>2]|0)+56>>2]|0){_i=(qm((c[Ed>>2]|0)+1|0)|0)+16|0;c[xd>>2]=_i+(c[Dd>>2]|0);}else{_i=(c[Dd>>2]|0)+(c[(c[Ad>>2]|0)+52>>2]|0)|0;c[Cd>>2]=_i-(qm((c[(c[(c[Ad>>2]|0)+12>>2]|0)+(c[Dd>>2]<<2)>>2]|0)+1|0)|0);if((c[Bd>>2]|0)<2&(c[Dd>>2]|0)>>>0>=20)c[Cd>>2]=(c[Cd>>2]|0)+((c[Dd>>2]|0)-19<<1);c[Fd>>2]=rm(c[Ed>>2]|0)|0;_i=(c[5840+(c[Fd>>2]<<2)>>2]|0)+(c[(c[Ad>>2]|0)+48>>2]|0)|0;Uh=_i-(qm((c[(c[(c[Ad>>2]|0)+8>>2]|0)+(c[Fd>>2]<<2)>>2]|0)+1|0)|0)|0;c[Cd>>2]=(c[Cd>>2]|0)+Uh;c[xd>>2]=c[Cd>>2];}c[ti>>2]=aj+(c[xd>>2]|0);c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=c[oi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+4>>2]=c[qi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+12>>2]=c[ii>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=c[ti>>2];aj=(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+16|0;c[aj>>2]=c[si>>2];c[aj+4>>2]=c[si+4>>2];c[aj+8>>2]=c[si+8>>2];c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=(c[pi>>2]|0)+1;}c[fi>>2]=(c[oi>>2]|0)-1;c[ei>>2]=1;b:while(1){if((c[ei>>2]|0)>>>0>(c[fi>>2]|0)>>>0){dj=504;break;}c[ui>>2]=(c[Vh>>2]|0)+(c[ei>>2]|0);if((c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+8>>2]|0)==1)oj=(c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+12>>2]|0)+1|0;else oj=1;c[vi>>2]=oj;if((c[ei>>2]|0)>>>0>(c[vi>>2]|0)>>>0){aj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[vi>>2]|0)|0)*28|0)>>2]|0;c[wi>>2]=aj+(sm((c[ui>>2]|0)+(0-(c[vi>>2]|0))|0,c[vi>>2]|0,c[Th>>2]|0)|0);}else c[wi>>2]=tm(di,c[Wh>>2]|0,c[vi>>2]|0,c[Th>>2]|0)|0;if((c[wi>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0)){c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+4>>2]=0;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]=c[vi>>2];c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]=c[wi>>2];aj=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Uh=(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+16|0;c[aj>>2]=c[Uh>>2];c[aj+4>>2]=c[Uh+4>>2];c[aj+8>>2]=c[Uh+8>>2];}c:do{if((c[ui>>2]|0)>>>0<=(c[Yh>>2]|0)>>>0){if((c[ei>>2]|0)==(c[fi>>2]|0)){dj=504;break b;}if((c[Rh>>2]|0)==0?(c[(c[bi>>2]|0)+(((c[ei>>2]|0)+1|0)*28|0)>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0):0)break;c[xi>>2]=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)!=1&1;if((c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)==1)pj=c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]|0;else pj=0;c[yi>>2]=pj;if((c[ei>>2]|0)>>>0>(c[yi>>2]|0)>>>0)qj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[yi>>2]|0)|0)*28|0)>>2]|0;else qj=0;c[zi>>2]=qj;Uh=c[zi>>2]|0;c[Ai>>2]=Uh+(um((c[ui>>2]|0)+(0-(c[yi>>2]|0))|0,c[yi>>2]|0,c[Th>>2]|0)|0);Uh=c[Oh>>2]|0;aj=c[ui>>2]|0;_i=c[Xh>>2]|0;Zh=c[Sh>>2]|0;Zi=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Ph=c[xi>>2]|0;Qh=c[ci>>2]|0;_h=c[ai>>2]|0;c[nd>>2]=c[Lh>>2];c[od>>2]=Uh;c[pd>>2]=aj;c[qd>>2]=_i;c[rd>>2]=Zh;c[sd>>2]=Zi;c[td>>2]=Ph;c[ud>>2]=Qh;c[vd>>2]=_h;c[wd>>2]=c[(c[od>>2]|0)+16>>2];d:do{if((c[pd>>2]|0)>>>0<((c[(c[nd>>2]|0)+4>>2]|0)+(c[(c[nd>>2]|0)+24>>2]|0)|0)>>>0)c[md>>2]=0;else{_h=c[od>>2]|0;Qh=c[pd>>2]|0;Ph=c[qd>>2]|0;Zi=c[wd>>2]|0;Zh=c[rd>>2]|0;c[dd>>2]=c[nd>>2];c[ed>>2]=_h;c[fd>>2]=Qh;c[gd>>2]=Ph;c[hd>>2]=Zi;c[id>>2]=Zh;c[jd>>2]=c[(c[dd>>2]|0)+4>>2];c[kd>>2]=(c[fd>>2]|0)-(c[jd>>2]|0);c[ld>>2]=c[(c[dd>>2]|0)+24>>2];while(1){if((c[ld>>2]|0)>>>0>=(c[kd>>2]|0)>>>0)break;Zh=Rj(c[dd>>2]|0,c[ed>>2]|0,(c[jd>>2]|0)+(c[ld>>2]|0)|0,c[gd>>2]|0,c[hd>>2]|0,c[id>>2]|0)|0;c[ld>>2]=(c[ld>>2]|0)+Zh;}c[(c[dd>>2]|0)+24>>2]=c[kd>>2];switch(c[wd>>2]|0){case 3:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[ic>>2]=c[nd>>2];c[jc>>2]=Zh;c[kc>>2]=Zi;c[lc>>2]=Ph;c[mc>>2]=Qh;c[nc>>2]=_h;c[oc>>2]=_i;c[pc>>2]=aj;c[qc>>2]=Uh;c[rc>>2]=3;if((c[(c[jc>>2]|0)+20>>2]|0)>>>0<4095)rj=c[(c[jc>>2]|0)+20>>2]|0;else rj=4095;c[sc>>2]=rj;c[tc>>2]=c[(c[ic>>2]|0)+4>>2];c[uc>>2]=(c[kc>>2]|0)-(c[tc>>2]|0);c[vc>>2]=c[(c[jc>>2]|0)+8>>2];c[wc>>2]=(c[rc>>2]|0)==3?3:4;c[xc>>2]=c[(c[ic>>2]|0)+36>>2];c[yc>>2]=Sj(c[kc>>2]|0,c[vc>>2]|0,c[rc>>2]|0)|0;c[zc>>2]=c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2];c[Ac>>2]=c[(c[ic>>2]|0)+44>>2];c[Bc>>2]=(c[(c[jc>>2]|0)+4>>2]|0)-1;c[Cc>>2]=(1<<c[Bc>>2])-1;c[Dc>>2]=0;c[Ec>>2]=0;c[Fc>>2]=c[(c[ic>>2]|0)+8>>2];c[Gc>>2]=c[(c[ic>>2]|0)+12>>2];c[Hc>>2]=(c[Fc>>2]|0)+(c[Gc>>2]|0);c[Ic>>2]=(c[tc>>2]|0)+(c[Gc>>2]|0);if((c[Cc>>2]|0)>>>0>=(c[uc>>2]|0)>>>0)sj=0;else sj=(c[uc>>2]|0)-(c[Cc>>2]|0)|0;c[Jc>>2]=sj;c[Kc>>2]=c[(c[ic>>2]|0)+16>>2];c[Lc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2);c[Mc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2)+4;c[Nc>>2]=(c[uc>>2]|0)+8+1;c[Pc>>2]=0;c[Qc>>2]=1<<c[(c[jc>>2]|0)+12>>2];c[Rc>>2]=(c[qc>>2]|0)-1;c[Sc>>2]=3+(c[oc>>2]|0);c[Tc>>2]=c[oc>>2];while(1){if((c[Tc>>2]|0)>>>0>=(c[Sc>>2]|0)>>>0){dj=287;break;}Uh=c[nc>>2]|0;if((c[Tc>>2]|0)==3)tj=(c[Uh>>2]|0)-1|0;else tj=c[Uh+(c[Tc>>2]<<2)>>2]|0;c[Uc>>2]=tj;c[Vc>>2]=(c[uc>>2]|0)-(c[Uc>>2]|0);c[Wc>>2]=0;do{if(((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Gc>>2]|0)|0)>>>0){Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm((c[kc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[wc>>2]|0)|0))break;Uh=Tj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[kc>>2]|0)+(c[wc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[lc>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}else{c[Xc>>2]=(c[Fc>>2]|0)+(c[Vc>>2]|0);if(!(c[mc>>2]|0))break;if(!((((c[Gc>>2]|0)-1-(c[Vc>>2]|0)|0)>>>0>=3?((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Kc>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm(c[Xc>>2]|0,c[wc>>2]|0)|0))break;Uh=Uj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[Xc>>2]|0)+(c[wc>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}}while(0);if((c[Wc>>2]|0)>>>0>(c[Rc>>2]|0)>>>0?(c[Rc>>2]=c[Wc>>2],c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[Tc>>2]|0)-(c[oc>>2]|0),c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[Wc>>2],c[Pc>>2]=(c[Pc>>2]|0)+1,((c[Wc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Wc>>2]|0)|0)==(c[lc>>2]|0))|0):0){dj=285;break;}c[Tc>>2]=(c[Tc>>2]|0)+1;}e:do{if((dj|0)==285){dj=0;c[hc>>2]=c[Pc>>2];}else if((dj|0)==287){dj=0;do{if((c[rc>>2]|0)==3){if((c[Rc>>2]|0)>>>0>=(c[rc>>2]|0)>>>0)break;c[Yc>>2]=nm(c[ic>>2]|0,c[kc>>2]|0)|0;if(!(((c[Yc>>2]|0)>>>0>(c[Kc>>2]|0)>>>0?((c[uc>>2]|0)-(c[Yc>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[mc>>2]|0){if((c[Yc>>2]|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=292;break;}c[$c>>2]=(c[Fc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Uj(c[kc>>2]|0,c[$c>>2]|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;}else dj=292;}while(0);if((dj|0)==292){dj=0;c[_c>>2]=(c[tc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Tj(c[kc>>2]|0,c[_c>>2]|0,c[lc>>2]|0)|0;}if((c[Zc>>2]|0)>>>0<(c[rc>>2]|0)>>>0)break;c[Rc>>2]=c[Zc>>2];c[c[pc>>2]>>2]=(c[uc>>2]|0)-(c[Yc>>2]|0)+2;c[(c[pc>>2]|0)+4>>2]=c[Zc>>2];c[Pc>>2]=1;if(!(((c[Zc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Zc>>2]|0)|0)==(c[lc>>2]|0))|0))break;c[(c[ic>>2]|0)+24>>2]=(c[uc>>2]|0)+1;c[hc>>2]=1;break e;}}while(0);c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2]=c[uc>>2];while(1){Uh=c[Qc>>2]|0;c[Qc>>2]=Uh+-1;if(!Uh)break;if((c[zc>>2]|0)>>>0<=(c[Kc>>2]|0)>>>0)break;c[ad>>2]=(c[Ac>>2]|0)+((c[zc>>2]&c[Cc>>2])<<1<<2);c[bd>>2]=(c[Dc>>2]|0)>>>0<(c[Ec>>2]|0)>>>0?c[Dc>>2]|0:c[Ec>>2]|0;do{if(c[mc>>2]|0){if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=302;break;}c[cd>>2]=(c[Fc>>2]|0)+(c[zc>>2]|0);Uh=Uj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0<(c[Gc>>2]|0)>>>0)break;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);}else dj=302;}while(0);if((dj|0)==302){dj=0;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);Uh=Tj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;}if((c[bd>>2]|0)>>>0>(c[Rc>>2]|0)>>>0){if((c[bd>>2]|0)>>>0>((c[Nc>>2]|0)-(c[zc>>2]|0)|0)>>>0)c[Nc>>2]=(c[zc>>2]|0)+(c[bd>>2]|0);c[Rc>>2]=c[bd>>2];c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[uc>>2]|0)-(c[zc>>2]|0)+2;c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[bd>>2];c[Pc>>2]=(c[Pc>>2]|0)+1;if((c[bd>>2]|0)>>>0>4096)break;if(((c[kc>>2]|0)+(c[bd>>2]|0)|0)==(c[lc>>2]|0))break;}Uh=c[zc>>2]|0;if((d[(c[cd>>2]|0)+(c[bd>>2]|0)>>0]|0|0)<(d[(c[kc>>2]|0)+(c[bd>>2]|0)>>0]|0|0)){c[c[Lc>>2]>>2]=Uh;c[Dc>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=312;break;}c[Lc>>2]=(c[ad>>2]|0)+4;c[zc>>2]=c[(c[ad>>2]|0)+4>>2];}else{c[c[Mc>>2]>>2]=Uh;c[Ec>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=315;break;}c[Mc>>2]=c[ad>>2];c[zc>>2]=c[c[ad>>2]>>2];}}if((dj|0)==312){dj=0;c[Lc>>2]=Oc;}else if((dj|0)==315){dj=0;c[Mc>>2]=Oc;}c[c[Mc>>2]>>2]=0;c[c[Lc>>2]>>2]=0;c[(c[ic>>2]|0)+24>>2]=(c[Nc>>2]|0)-8;c[hc>>2]=c[Pc>>2];}}while(0);c[md>>2]=c[hc>>2];break d;break;}case 7:case 6:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[u>>2]=c[nd>>2];c[v>>2]=Uh;c[w>>2]=aj;c[x>>2]=_i;c[y>>2]=_h;c[z>>2]=Qh;c[A>>2]=Ph;c[B>>2]=Zi;c[C>>2]=Zh;c[D>>2]=6;if((c[(c[v>>2]|0)+20>>2]|0)>>>0<4095)uj=c[(c[v>>2]|0)+20>>2]|0;else uj=4095;c[E>>2]=uj;c[F>>2]=c[(c[u>>2]|0)+4>>2];c[G>>2]=(c[w>>2]|0)-(c[F>>2]|0);c[H>>2]=c[(c[v>>2]|0)+8>>2];c[I>>2]=(c[D>>2]|0)==3?3:4;c[J>>2]=c[(c[u>>2]|0)+36>>2];c[K>>2]=Sj(c[w>>2]|0,c[H>>2]|0,c[D>>2]|0)|0;c[L>>2]=c[(c[J>>2]|0)+(c[K>>2]<<2)>>2];c[M>>2]=c[(c[u>>2]|0)+44>>2];c[N>>2]=(c[(c[v>>2]|0)+4>>2]|0)-1;c[O>>2]=(1<<c[N>>2])-1;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=c[(c[u>>2]|0)+8>>2];c[S>>2]=c[(c[u>>2]|0)+12>>2];c[T>>2]=(c[R>>2]|0)+(c[S>>2]|0);c[U>>2]=(c[F>>2]|0)+(c[S>>2]|0);if((c[O>>2]|0)>>>0>=(c[G>>2]|0)>>>0)vj=0;else vj=(c[G>>2]|0)-(c[O>>2]|0)|0;c[V>>2]=vj;c[W>>2]=c[(c[u>>2]|0)+16>>2];c[X>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2);c[Y>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2)+4;c[Z>>2]=(c[G>>2]|0)+8+1;c[$>>2]=0;c[aa>>2]=1<<c[(c[v>>2]|0)+12>>2];c[ba>>2]=(c[C>>2]|0)-1;c[ca>>2]=3+(c[A>>2]|0);c[da>>2]=c[A>>2];while(1){if((c[da>>2]|0)>>>0>=(c[ca>>2]|0)>>>0){dj=446;break;}Zh=c[z>>2]|0;if((c[da>>2]|0)==3)wj=(c[Zh>>2]|0)-1|0;else wj=c[Zh+(c[da>>2]<<2)>>2]|0;c[ea>>2]=wj;c[fa>>2]=(c[G>>2]|0)-(c[ea>>2]|0);c[ga>>2]=0;do{if(((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[S>>2]|0)|0)>>>0){Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm((c[w>>2]|0)+(0-(c[ea>>2]|0))|0,c[I>>2]|0)|0))break;Zh=Tj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[w>>2]|0)+(c[I>>2]|0)+(0-(c[ea>>2]|0))|0,c[x>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}else{c[ha>>2]=(c[R>>2]|0)+(c[fa>>2]|0);if(!(c[y>>2]|0))break;if(!((((c[S>>2]|0)-1-(c[fa>>2]|0)|0)>>>0>=3?((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[W>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm(c[ha>>2]|0,c[I>>2]|0)|0))break;Zh=Uj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[ha>>2]|0)+(c[I>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}}while(0);if((c[ga>>2]|0)>>>0>(c[ba>>2]|0)>>>0?(c[ba>>2]=c[ga>>2],c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[da>>2]|0)-(c[A>>2]|0),c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[ga>>2],c[$>>2]=(c[$>>2]|0)+1,((c[ga>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ga>>2]|0)|0)==(c[x>>2]|0))|0):0){dj=444;break;}c[da>>2]=(c[da>>2]|0)+1;}f:do{if((dj|0)==444){dj=0;c[t>>2]=c[$>>2];}else if((dj|0)==446){dj=0;do{if((c[D>>2]|0)==3){if((c[ba>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[ia>>2]=nm(c[u>>2]|0,c[w>>2]|0)|0;if(!(((c[ia>>2]|0)>>>0>(c[W>>2]|0)>>>0?((c[G>>2]|0)-(c[ia>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[y>>2]|0){if((c[ia>>2]|0)>>>0>=(c[S>>2]|0)>>>0){dj=451;break;}c[la>>2]=(c[R>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Uj(c[w>>2]|0,c[la>>2]|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;}else dj=451;}while(0);if((dj|0)==451){dj=0;c[ka>>2]=(c[F>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Tj(c[w>>2]|0,c[ka>>2]|0,c[x>>2]|0)|0;}if((c[ja>>2]|0)>>>0<(c[D>>2]|0)>>>0)break;c[ba>>2]=c[ja>>2];c[c[B>>2]>>2]=(c[G>>2]|0)-(c[ia>>2]|0)+2;c[(c[B>>2]|0)+4>>2]=c[ja>>2];c[$>>2]=1;if(!(((c[ja>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ja>>2]|0)|0)==(c[x>>2]|0))|0))break;c[(c[u>>2]|0)+24>>2]=(c[G>>2]|0)+1;c[t>>2]=1;break f;}}while(0);c[(c[J>>2]|0)+(c[K>>2]<<2)>>2]=c[G>>2];while(1){Zh=c[aa>>2]|0;c[aa>>2]=Zh+-1;if(!Zh)break;if((c[L>>2]|0)>>>0<=(c[W>>2]|0)>>>0)break;c[ma>>2]=(c[M>>2]|0)+((c[L>>2]&c[O>>2])<<1<<2);c[na>>2]=(c[P>>2]|0)>>>0<(c[Q>>2]|0)>>>0?c[P>>2]|0:c[Q>>2]|0;do{if(c[y>>2]|0){if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0>=(c[S>>2]|0)>>>0){dj=461;break;}c[oa>>2]=(c[R>>2]|0)+(c[L>>2]|0);Zh=Uj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0<(c[S>>2]|0)>>>0)break;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);}else dj=461;}while(0);if((dj|0)==461){dj=0;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);Zh=Tj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;}if((c[na>>2]|0)>>>0>(c[ba>>2]|0)>>>0){if((c[na>>2]|0)>>>0>((c[Z>>2]|0)-(c[L>>2]|0)|0)>>>0)c[Z>>2]=(c[L>>2]|0)+(c[na>>2]|0);c[ba>>2]=c[na>>2];c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[G>>2]|0)-(c[L>>2]|0)+2;c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[na>>2];c[$>>2]=(c[$>>2]|0)+1;if((c[na>>2]|0)>>>0>4096)break;if(((c[w>>2]|0)+(c[na>>2]|0)|0)==(c[x>>2]|0))break;}Zh=c[L>>2]|0;if((d[(c[oa>>2]|0)+(c[na>>2]|0)>>0]|0|0)<(d[(c[w>>2]|0)+(c[na>>2]|0)>>0]|0|0)){c[c[X>>2]>>2]=Zh;c[P>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=471;break;}c[X>>2]=(c[ma>>2]|0)+4;c[L>>2]=c[(c[ma>>2]|0)+4>>2];}else{c[c[Y>>2]>>2]=Zh;c[Q>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=474;break;}c[Y>>2]=c[ma>>2];c[L>>2]=c[c[ma>>2]>>2];}}if((dj|0)==471){dj=0;c[X>>2]=_;}else if((dj|0)==474){dj=0;c[Y>>2]=_;}c[c[Y>>2]>>2]=0;c[c[X>>2]>>2]=0;c[(c[u>>2]|0)+24>>2]=(c[Z>>2]|0)-8;c[t>>2]=c[$>>2];}}while(0);c[md>>2]=c[t>>2];break d;break;}case 5:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[qa>>2]=c[nd>>2];c[ra>>2]=Zh;c[sa>>2]=Zi;c[ta>>2]=Ph;c[ua>>2]=Qh;c[va>>2]=_h;c[wa>>2]=_i;c[xa>>2]=aj;c[ya>>2]=Uh;c[za>>2]=5;if((c[(c[ra>>2]|0)+20>>2]|0)>>>0<4095)xj=c[(c[ra>>2]|0)+20>>2]|0;else xj=4095;c[Aa>>2]=xj;c[Ba>>2]=c[(c[qa>>2]|0)+4>>2];c[Ca>>2]=(c[sa>>2]|0)-(c[Ba>>2]|0);c[Da>>2]=c[(c[ra>>2]|0)+8>>2];c[Ea>>2]=(c[za>>2]|0)==3?3:4;c[Fa>>2]=c[(c[qa>>2]|0)+36>>2];c[Ga>>2]=Sj(c[sa>>2]|0,c[Da>>2]|0,c[za>>2]|0)|0;c[Ha>>2]=c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2];c[Ia>>2]=c[(c[qa>>2]|0)+44>>2];c[Ja>>2]=(c[(c[ra>>2]|0)+4>>2]|0)-1;c[Ka>>2]=(1<<c[Ja>>2])-1;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=c[(c[qa>>2]|0)+8>>2];c[Oa>>2]=c[(c[qa>>2]|0)+12>>2];c[Pa>>2]=(c[Na>>2]|0)+(c[Oa>>2]|0);c[Qa>>2]=(c[Ba>>2]|0)+(c[Oa>>2]|0);if((c[Ka>>2]|0)>>>0>=(c[Ca>>2]|0)>>>0)yj=0;else yj=(c[Ca>>2]|0)-(c[Ka>>2]|0)|0;c[Ra>>2]=yj;c[Sa>>2]=c[(c[qa>>2]|0)+16>>2];c[Ta>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2);c[Ua>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2)+4;c[Va>>2]=(c[Ca>>2]|0)+8+1;c[Xa>>2]=0;c[Ya>>2]=1<<c[(c[ra>>2]|0)+12>>2];c[Za>>2]=(c[ya>>2]|0)-1;c[_a>>2]=3+(c[wa>>2]|0);c[$a>>2]=c[wa>>2];while(1){if((c[$a>>2]|0)>>>0>=(c[_a>>2]|0)>>>0){dj=393;break;}Uh=c[va>>2]|0;if((c[$a>>2]|0)==3)zj=(c[Uh>>2]|0)-1|0;else zj=c[Uh+(c[$a>>2]<<2)>>2]|0;c[ab>>2]=zj;c[bb>>2]=(c[Ca>>2]|0)-(c[ab>>2]|0);c[cb>>2]=0;do{if(((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Oa>>2]|0)|0)>>>0){Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm((c[sa>>2]|0)+(0-(c[ab>>2]|0))|0,c[Ea>>2]|0)|0))break;Uh=Tj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[sa>>2]|0)+(c[Ea>>2]|0)+(0-(c[ab>>2]|0))|0,c[ta>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}else{c[db>>2]=(c[Na>>2]|0)+(c[bb>>2]|0);if(!(c[ua>>2]|0))break;if(!((((c[Oa>>2]|0)-1-(c[bb>>2]|0)|0)>>>0>=3?((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Sa>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm(c[db>>2]|0,c[Ea>>2]|0)|0))break;Uh=Uj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[db>>2]|0)+(c[Ea>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}}while(0);if((c[cb>>2]|0)>>>0>(c[Za>>2]|0)>>>0?(c[Za>>2]=c[cb>>2],c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[$a>>2]|0)-(c[wa>>2]|0),c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[cb>>2],c[Xa>>2]=(c[Xa>>2]|0)+1,((c[cb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[cb>>2]|0)|0)==(c[ta>>2]|0))|0):0){dj=391;break;}c[$a>>2]=(c[$a>>2]|0)+1;}g:do{if((dj|0)==391){dj=0;c[pa>>2]=c[Xa>>2];}else if((dj|0)==393){dj=0;do{if((c[za>>2]|0)==3){if((c[Za>>2]|0)>>>0>=(c[za>>2]|0)>>>0)break;c[eb>>2]=nm(c[qa>>2]|0,c[sa>>2]|0)|0;if(!(((c[eb>>2]|0)>>>0>(c[Sa>>2]|0)>>>0?((c[Ca>>2]|0)-(c[eb>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[ua>>2]|0){if((c[eb>>2]|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=398;break;}c[hb>>2]=(c[Na>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Uj(c[sa>>2]|0,c[hb>>2]|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;}else dj=398;}while(0);if((dj|0)==398){dj=0;c[gb>>2]=(c[Ba>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Tj(c[sa>>2]|0,c[gb>>2]|0,c[ta>>2]|0)|0;}if((c[fb>>2]|0)>>>0<(c[za>>2]|0)>>>0)break;c[Za>>2]=c[fb>>2];c[c[xa>>2]>>2]=(c[Ca>>2]|0)-(c[eb>>2]|0)+2;c[(c[xa>>2]|0)+4>>2]=c[fb>>2];c[Xa>>2]=1;if(!(((c[fb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[fb>>2]|0)|0)==(c[ta>>2]|0))|0))break;c[(c[qa>>2]|0)+24>>2]=(c[Ca>>2]|0)+1;c[pa>>2]=1;break g;}}while(0);c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2]=c[Ca>>2];while(1){Uh=c[Ya>>2]|0;c[Ya>>2]=Uh+-1;if(!Uh)break;if((c[Ha>>2]|0)>>>0<=(c[Sa>>2]|0)>>>0)break;c[ib>>2]=(c[Ia>>2]|0)+((c[Ha>>2]&c[Ka>>2])<<1<<2);c[jb>>2]=(c[La>>2]|0)>>>0<(c[Ma>>2]|0)>>>0?c[La>>2]|0:c[Ma>>2]|0;do{if(c[ua>>2]|0){if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=408;break;}c[kb>>2]=(c[Na>>2]|0)+(c[Ha>>2]|0);Uh=Uj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0<(c[Oa>>2]|0)>>>0)break;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);}else dj=408;}while(0);if((dj|0)==408){dj=0;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);Uh=Tj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;}if((c[jb>>2]|0)>>>0>(c[Za>>2]|0)>>>0){if((c[jb>>2]|0)>>>0>((c[Va>>2]|0)-(c[Ha>>2]|0)|0)>>>0)c[Va>>2]=(c[Ha>>2]|0)+(c[jb>>2]|0);c[Za>>2]=c[jb>>2];c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[Ca>>2]|0)-(c[Ha>>2]|0)+2;c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[jb>>2];c[Xa>>2]=(c[Xa>>2]|0)+1;if((c[jb>>2]|0)>>>0>4096)break;if(((c[sa>>2]|0)+(c[jb>>2]|0)|0)==(c[ta>>2]|0))break;}Uh=c[Ha>>2]|0;if((d[(c[kb>>2]|0)+(c[jb>>2]|0)>>0]|0|0)<(d[(c[sa>>2]|0)+(c[jb>>2]|0)>>0]|0|0)){c[c[Ta>>2]>>2]=Uh;c[La>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=418;break;}c[Ta>>2]=(c[ib>>2]|0)+4;c[Ha>>2]=c[(c[ib>>2]|0)+4>>2];}else{c[c[Ua>>2]>>2]=Uh;c[Ma>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=421;break;}c[Ua>>2]=c[ib>>2];c[Ha>>2]=c[c[ib>>2]>>2];}}if((dj|0)==418){dj=0;c[Ta>>2]=Wa;}else if((dj|0)==421){dj=0;c[Ua>>2]=Wa;}c[c[Ua>>2]>>2]=0;c[c[Ta>>2]>>2]=0;c[(c[qa>>2]|0)+24>>2]=(c[Va>>2]|0)-8;c[pa>>2]=c[Xa>>2];}}while(0);c[md>>2]=c[pa>>2];break d;break;}default:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[mb>>2]=c[nd>>2];c[nb>>2]=Uh;c[ob>>2]=aj;c[pb>>2]=_i;c[qb>>2]=_h;c[rb>>2]=Qh;c[sb>>2]=Ph;c[tb>>2]=Zi;c[ub>>2]=Zh;c[vb>>2]=4;if((c[(c[nb>>2]|0)+20>>2]|0)>>>0<4095)Aj=c[(c[nb>>2]|0)+20>>2]|0;else Aj=4095;c[wb>>2]=Aj;c[xb>>2]=c[(c[mb>>2]|0)+4>>2];c[yb>>2]=(c[ob>>2]|0)-(c[xb>>2]|0);c[zb>>2]=c[(c[nb>>2]|0)+8>>2];c[Ab>>2]=(c[vb>>2]|0)==3?3:4;c[Bb>>2]=c[(c[mb>>2]|0)+36>>2];c[Cb>>2]=Sj(c[ob>>2]|0,c[zb>>2]|0,c[vb>>2]|0)|0;c[Db>>2]=c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2];c[Eb>>2]=c[(c[mb>>2]|0)+44>>2];c[Fb>>2]=(c[(c[nb>>2]|0)+4>>2]|0)-1;c[Gb>>2]=(1<<c[Fb>>2])-1;c[Hb>>2]=0;c[Ib>>2]=0;c[Jb>>2]=c[(c[mb>>2]|0)+8>>2];c[Kb>>2]=c[(c[mb>>2]|0)+12>>2];c[Lb>>2]=(c[Jb>>2]|0)+(c[Kb>>2]|0);c[Mb>>2]=(c[xb>>2]|0)+(c[Kb>>2]|0);if((c[Gb>>2]|0)>>>0>=(c[yb>>2]|0)>>>0)Bj=0;else Bj=(c[yb>>2]|0)-(c[Gb>>2]|0)|0;c[Nb>>2]=Bj;c[Ob>>2]=c[(c[mb>>2]|0)+16>>2];c[Pb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2);c[Qb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2)+4;c[Rb>>2]=(c[yb>>2]|0)+8+1;c[Tb>>2]=0;c[Ub>>2]=1<<c[(c[nb>>2]|0)+12>>2];c[Vb>>2]=(c[ub>>2]|0)-1;c[Wb>>2]=3+(c[sb>>2]|0);c[Xb>>2]=c[sb>>2];while(1){if((c[Xb>>2]|0)>>>0>=(c[Wb>>2]|0)>>>0){dj=340;break;}Zh=c[rb>>2]|0;if((c[Xb>>2]|0)==3)Cj=(c[Zh>>2]|0)-1|0;else Cj=c[Zh+(c[Xb>>2]<<2)>>2]|0;c[Yb>>2]=Cj;c[Zb>>2]=(c[yb>>2]|0)-(c[Yb>>2]|0);c[_b>>2]=0;do{if(((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Kb>>2]|0)|0)>>>0){Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm((c[ob>>2]|0)+(0-(c[Yb>>2]|0))|0,c[Ab>>2]|0)|0))break;Zh=Tj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[ob>>2]|0)+(c[Ab>>2]|0)+(0-(c[Yb>>2]|0))|0,c[pb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}else{c[$b>>2]=(c[Jb>>2]|0)+(c[Zb>>2]|0);if(!(c[qb>>2]|0))break;if(!((((c[Kb>>2]|0)-1-(c[Zb>>2]|0)|0)>>>0>=3?((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Ob>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm(c[$b>>2]|0,c[Ab>>2]|0)|0))break;Zh=Uj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[$b>>2]|0)+(c[Ab>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}}while(0);if((c[_b>>2]|0)>>>0>(c[Vb>>2]|0)>>>0?(c[Vb>>2]=c[_b>>2],c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[Xb>>2]|0)-(c[sb>>2]|0),c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[_b>>2],c[Tb>>2]=(c[Tb>>2]|0)+1,((c[_b>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[_b>>2]|0)|0)==(c[pb>>2]|0))|0):0){dj=338;break;}c[Xb>>2]=(c[Xb>>2]|0)+1;}h:do{if((dj|0)==338){dj=0;c[lb>>2]=c[Tb>>2];}else if((dj|0)==340){dj=0;do{if((c[vb>>2]|0)==3){if((c[Vb>>2]|0)>>>0>=(c[vb>>2]|0)>>>0)break;c[ac>>2]=nm(c[mb>>2]|0,c[ob>>2]|0)|0;if(!(((c[ac>>2]|0)>>>0>(c[Ob>>2]|0)>>>0?((c[yb>>2]|0)-(c[ac>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[qb>>2]|0){if((c[ac>>2]|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=345;break;}c[dc>>2]=(c[Jb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Uj(c[ob>>2]|0,c[dc>>2]|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;}else dj=345;}while(0);if((dj|0)==345){dj=0;c[cc>>2]=(c[xb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Tj(c[ob>>2]|0,c[cc>>2]|0,c[pb>>2]|0)|0;}if((c[bc>>2]|0)>>>0<(c[vb>>2]|0)>>>0)break;c[Vb>>2]=c[bc>>2];c[c[tb>>2]>>2]=(c[yb>>2]|0)-(c[ac>>2]|0)+2;c[(c[tb>>2]|0)+4>>2]=c[bc>>2];c[Tb>>2]=1;if(!(((c[bc>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[bc>>2]|0)|0)==(c[pb>>2]|0))|0))break;c[(c[mb>>2]|0)+24>>2]=(c[yb>>2]|0)+1;c[lb>>2]=1;break h;}}while(0);c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2]=c[yb>>2];while(1){Zh=c[Ub>>2]|0;c[Ub>>2]=Zh+-1;if(!Zh)break;if((c[Db>>2]|0)>>>0<=(c[Ob>>2]|0)>>>0)break;c[ec>>2]=(c[Eb>>2]|0)+((c[Db>>2]&c[Gb>>2])<<1<<2);c[fc>>2]=(c[Hb>>2]|0)>>>0<(c[Ib>>2]|0)>>>0?c[Hb>>2]|0:c[Ib>>2]|0;do{if(c[qb>>2]|0){if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=355;break;}c[gc>>2]=(c[Jb>>2]|0)+(c[Db>>2]|0);Zh=Uj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0<(c[Kb>>2]|0)>>>0)break;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);}else dj=355;}while(0);if((dj|0)==355){dj=0;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);Zh=Tj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;}if((c[fc>>2]|0)>>>0>(c[Vb>>2]|0)>>>0){if((c[fc>>2]|0)>>>0>((c[Rb>>2]|0)-(c[Db>>2]|0)|0)>>>0)c[Rb>>2]=(c[Db>>2]|0)+(c[fc>>2]|0);c[Vb>>2]=c[fc>>2];c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[yb>>2]|0)-(c[Db>>2]|0)+2;c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[fc>>2];c[Tb>>2]=(c[Tb>>2]|0)+1;if((c[fc>>2]|0)>>>0>4096)break;if(((c[ob>>2]|0)+(c[fc>>2]|0)|0)==(c[pb>>2]|0))break;}Zh=c[Db>>2]|0;if((d[(c[gc>>2]|0)+(c[fc>>2]|0)>>0]|0|0)<(d[(c[ob>>2]|0)+(c[fc>>2]|0)>>0]|0|0)){c[c[Pb>>2]>>2]=Zh;c[Hb>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=365;break;}c[Pb>>2]=(c[ec>>2]|0)+4;c[Db>>2]=c[(c[ec>>2]|0)+4>>2];}else{c[c[Qb>>2]>>2]=Zh;c[Ib>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=368;break;}c[Qb>>2]=c[ec>>2];c[Db>>2]=c[c[ec>>2]>>2];}}if((dj|0)==365){dj=0;c[Pb>>2]=Sb;}else if((dj|0)==368){dj=0;c[Qb>>2]=Sb;}c[c[Qb>>2]>>2]=0;c[c[Pb>>2]>>2]=0;c[(c[mb>>2]|0)+24>>2]=(c[Rb>>2]|0)-8;c[lb>>2]=c[Tb>>2];}}while(0);c[md>>2]=c[lb>>2];break d;}}}}while(0);c[Bi>>2]=c[md>>2];if(c[Bi>>2]|0){c[Di>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)+4>>2];if(((c[Di>>2]|0)>>>0>(c[$h>>2]|0)>>>0?1:((c[ei>>2]|0)+(c[Di>>2]|0)|0)>>>0>=4096)|0){dj=481;break b;}c[Ci>>2]=0;while(1){if((c[Ci>>2]|0)>>>0>=(c[Bi>>2]|0)>>>0)break c;c[Ei>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)>>2];pm(Fi,(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0,c[Ei>>2]|0,c[xi>>2]|0);c[Gi>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)+4>>2];if((c[Ci>>2]|0)>>>0>0)Dj=(c[(c[ci>>2]|0)+((c[Ci>>2]|0)-1<<3)+4>>2]|0)+1|0;else Dj=c[ai>>2]|0;c[Hi>>2]=Dj;c[Ii>>2]=c[Gi>>2];i:while(1){if((c[Ii>>2]|0)>>>0<(c[Hi>>2]|0)>>>0)break;c[Ji>>2]=(c[ei>>2]|0)+(c[Ii>>2]|0);Zh=c[Ai>>2]|0;Zi=c[Ii>>2]|0;Ph=c[Th>>2]|0;Qh=c[Rh>>2]|0;c[k>>2]=c[Ei>>2];c[m>>2]=Zi;c[n>>2]=Ph;c[o>>2]=Qh;c[q>>2]=qm((c[k>>2]|0)+1|0)|0;c[r>>2]=(c[m>>2]|0)-3;if(c[(c[n>>2]|0)+56>>2]|0){Qh=(qm((c[r>>2]|0)+1|0)|0)+16|0;c[j>>2]=Qh+(c[q>>2]|0);}else{Qh=(c[q>>2]|0)+(c[(c[n>>2]|0)+52>>2]|0)|0;c[p>>2]=Qh-(qm((c[(c[(c[n>>2]|0)+12>>2]|0)+(c[q>>2]<<2)>>2]|0)+1|0)|0);if((c[o>>2]|0)<2&(c[q>>2]|0)>>>0>=20)c[p>>2]=(c[p>>2]|0)+((c[q>>2]|0)-19<<1);c[s>>2]=rm(c[r>>2]|0)|0;Qh=(c[5840+(c[s>>2]<<2)>>2]|0)+(c[(c[n>>2]|0)+48>>2]|0)|0;Ph=Qh-(qm((c[(c[(c[n>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0)+1|0)|0)|0;c[p>>2]=(c[p>>2]|0)+Ph;c[j>>2]=c[p>>2];}c[Ki>>2]=Zh+(c[j>>2]|0);do{if((c[Ji>>2]|0)>>>0<=(c[fi>>2]|0)>>>0){if((c[Ki>>2]|0)<(c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]|0)){dj=496;break;}if(!(c[Rh>>2]|0))break i;}else dj=496;}while(0);if((dj|0)==496){dj=0;while(1){if((c[fi>>2]|0)>>>0>=(c[Ji>>2]|0)>>>0)break;c[(c[bi>>2]|0)+(((c[fi>>2]|0)+1|0)*28|0)>>2]=1073741824;c[fi>>2]=(c[fi>>2]|0)+1;}c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+8>>2]=c[Ii>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+4>>2]=c[Ei>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+12>>2]=c[yi>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]=c[Ki>>2];Zh=(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+16|0;c[Zh>>2]=c[Fi>>2];c[Zh+4>>2]=c[Fi+4>>2];c[Zh+8>>2]=c[Fi+8>>2];}c[Ii>>2]=(c[Ii>>2]|0)+-1;}c[Ci>>2]=(c[Ci>>2]|0)+1;}}}}while(0);c[ei>>2]=(c[ei>>2]|0)+1;}if((dj|0)==481){dj=0;c[gi>>2]=c[Di>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)>>2];c[fi>>2]=(c[ei>>2]|0)+1;break;}else if((dj|0)==504){dj=0;c[gi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+8>>2];c[hi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+4>>2];c[ei>>2]=(c[fi>>2]|0)-(c[gi>>2]|0);break;}}else{c[gi>>2]=c[mi>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)>>2];c[ei>>2]=0;c[fi>>2]=1;}}while(0);c[Li>>2]=c[gi>>2];c[Mi>>2]=c[hi>>2];c[Ni>>2]=c[ei>>2];while(1){c[Oi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2];c[Pi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2]=c[Li>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2]=c[Mi>>2];c[Li>>2]=c[Oi>>2];c[Mi>>2]=c[Pi>>2];if((c[Oi>>2]|0)>>>0>(c[Ni>>2]|0)>>>0)break;c[Ni>>2]=(c[Ni>>2]|0)-(c[Oi>>2]|0);}c[Qi>>2]=0;while(1){if((c[Qi>>2]|0)>>>0>=(c[fi>>2]|0)>>>0)break;c[Ri>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[Si>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+8>>2];c[Ti>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+4>>2];if((c[Si>>2]|0)==1){c[Vh>>2]=(c[Vh>>2]|0)+1;c[Qi>>2]=(c[Qi>>2]|0)+1;continue;}c[Qi>>2]=(c[Qi>>2]|0)+(c[Si>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+(c[Si>>2]|0);if((c[Ti>>2]|0)>>>0<3){c[Ui>>2]=(c[Ti>>2]|0)+((c[Ri>>2]|0)==0&1);if(c[Ui>>2]|0){Zh=c[Nh>>2]|0;if((c[Ui>>2]|0)==3)Ej=(c[Zh>>2]|0)-1|0;else Ej=c[Zh+(c[Ui>>2]<<2)>>2]|0;c[Vi>>2]=Ej;if((c[Ui>>2]|0)>>>0>=2)c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=c[Vi>>2];}}else{c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=(c[Ti>>2]|0)-2;}vm(c[Th>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,c[Si>>2]|0);wm(c[Mh>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,(c[Si>>2]|0)-3|0);c[Wh>>2]=c[Vh>>2];}xm(c[Th>>2]|0);}l=i;return(c[Xh>>2]|0)-(c[Wh>>2]|0)|0;}function dm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+48|0;i=h+36|0;j=h+32|0;k=h+28|0;m=h+24|0;n=h+20|0;o=h+16|0;p=h+12|0;q=h+8|0;r=h+4|0;s=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[(c[n>>2]|0)+8>>2];c[r>>2]=c[(c[n>>2]|0)+16>>2];c[s>>2]=c[(c[n>>2]|0)+20>>2];switch(c[r>>2]|0){case 7:{c[i>>2]=hn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,7)|0;t=c[i>>2]|0;l=h;return t|0;}case 5:{c[i>>2]=hn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,5)|0;t=c[i>>2]|0;l=h;return t|0;}case 6:{c[i>>2]=hn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,6)|0;t=c[i>>2]|0;l=h;return t|0;}default:{c[i>>2]=hn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,4)|0;t=c[i>>2]|0;l=h;return t|0;}}return 0;}function em(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;h=l;l=l+32|0;i=h+28|0;j=h+24|0;k=h+20|0;m=h+16|0;n=h+12|0;o=h+8|0;p=h+4|0;q=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[(c[n>>2]|0)+16>>2];switch(c[q>>2]|0){case 7:{c[i>>2]=Zm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,7)|0;r=c[i>>2]|0;l=h;return r|0;}case 5:{c[i>>2]=Zm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,5)|0;r=c[i>>2]|0;l=h;return r|0;}case 6:{c[i>>2]=Zm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,6)|0;r=c[i>>2]|0;l=h;return r|0;}default:{c[i>>2]=Zm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,4)|0;r=c[i>>2]|0;l=h;return r|0;}}return 0;}function fm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;i=l;l=l+288|0;j=i+272|0;k=i+268|0;m=i+264|0;n=i+260|0;o=i+256|0;p=i+252|0;q=i+248|0;r=i+244|0;s=i+240|0;t=i+236|0;u=i+232|0;v=i+228|0;w=i+224|0;x=i+220|0;y=i+216|0;z=i+212|0;A=i+208|0;B=i+204|0;C=i+200|0;D=i+196|0;E=i+192|0;F=i+188|0;G=i+184|0;H=i+180|0;I=i+176|0;J=i+172|0;K=i+168|0;L=i+164|0;M=i+160|0;N=i+156|0;O=i+152|0;P=i+148|0;Q=i+144|0;R=i+140|0;S=i+136|0;T=i+132|0;U=i+128|0;V=i+124|0;W=i+120|0;X=i+116|0;Y=i+112|0;Z=i+108|0;_=i+104|0;$=i+100|0;aa=i+96|0;ba=i+92|0;ca=i+88|0;da=i+84|0;ea=i+80|0;fa=i+76|0;ga=i+72|0;ha=i+68|0;ia=i+64|0;ja=i+60|0;ka=i+56|0;la=i+52|0;ma=i+48|0;na=i+44|0;oa=i+40|0;pa=i+36|0;qa=i+32|0;ra=i+28|0;sa=i+24|0;ta=i+20|0;ua=i+16|0;va=i+12|0;wa=i+8|0;xa=i+4|0;ya=i;c[ta>>2]=a;c[ua>>2]=b;c[va>>2]=e;c[wa>>2]=f;c[xa>>2]=g;c[ya>>2]=h;h=c[ua>>2]|0;ua=c[va>>2]|0;va=c[wa>>2]|0;wa=c[xa>>2]|0;xa=c[ya>>2]|0;c[j>>2]=c[ta>>2];c[k>>2]=h;c[m>>2]=ua;c[n>>2]=va;c[o>>2]=wa;c[p>>2]=xa;c[q>>2]=0;c[r>>2]=0;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=c[(c[j>>2]|0)+4>>2];c[y>>2]=c[(c[j>>2]|0)+12>>2];c[z>>2]=c[(c[j>>2]|0)+16>>2];c[A>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[B>>2]=c[(c[j>>2]|0)+8>>2];c[C>>2]=(c[B>>2]|0)+(c[y>>2]|0);c[D>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[E>>2]=c[q>>2]|0?7:6;c[F>>2]=c[c[m>>2]>>2];c[G>>2]=c[(c[m>>2]|0)+4>>2];c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[A>>2]|0)&1);while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[H>>2]=0;c[I>>2]=0;c[J>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[t>>2]|0)-(c[x>>2]|0);c[L>>2]=(c[K>>2]|0)+1-(c[F>>2]|0);c[M>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[N>>2]=(c[M>>2]|0)+(c[L>>2]|0);if(!((((c[L>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[L>>2]|0)|0)>>>0>=3:0)|0?(q=Bk((c[t>>2]|0)+1|0)|0,(q|0)==(Bk(c[N>>2]|0)|0)):0)?(c[O>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[H>>2]=(Lm((c[t>>2]|0)+1+4|0,(c[N>>2]|0)+4|0,c[v>>2]|0,c[O>>2]|0,c[A>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[P>>2]=99999999;c[Q>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,P)|0;if((c[Q>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[H>>2]=c[Q>>2];c[J>>2]=c[t>>2];c[I>>2]=c[P>>2];}if((c[H>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[R>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[S>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[T>>2]=(c[S>>2]|0)+(c[R>>2]|0),((c[R>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[R>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[T>>2]|0)|0)):0)?(c[U>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[V>>2]=(Lm((c[t>>2]|0)+4|0,(c[T>>2]|0)+4|0,c[v>>2]|0,c[U>>2]|0,c[A>>2]|0)|0)+4,c[W>>2]=(c[V>>2]|0)*3,q=(c[H>>2]|0)*3|0,c[X>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[V>>2]|0)>>>0>=4):0)?(c[W>>2]|0)>(c[X>>2]|0):0){c[H>>2]=c[V>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[Y>>2]=99999999;c[Z>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,Y)|0;q=c[Z>>2]<<2;c[_>>2]=q-(Mm((c[Y>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[$>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+4;if((c[Z>>2]|0)>>>0>=4?(c[_>>2]|0)>(c[$>>2]|0):0){c[H>>2]=c[Z>>2];c[I>>2]=c[Y>>2];c[J>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[aa>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[ba>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[ca>>2]=(c[ba>>2]|0)+(c[aa>>2]|0),((c[aa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[aa>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[ca>>2]|0)|0)):0)?(c[da>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[ea>>2]=(Lm((c[t>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[v>>2]|0,c[da>>2]|0,c[A>>2]|0)|0)+4,c[fa>>2]=c[ea>>2]<<2,q=c[H>>2]<<2,c[ga>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[ea>>2]|0)>>>0>=4):0)?(c[fa>>2]|0)>(c[ga>>2]|0):0){c[H>>2]=c[ea>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[ha>>2]=99999999;c[ia>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,ha)|0;q=c[ia>>2]<<2;c[ja>>2]=q-(Mm((c[ha>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[ka>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+7;if((c[ia>>2]|0)>>>0<4)break a;if((c[ja>>2]|0)<=(c[ka>>2]|0))break a;c[H>>2]=c[ia>>2];c[I>>2]=c[ha>>2];c[J>>2]=c[t>>2];}}while(0);if(c[I>>2]|0){c[la>>2]=(c[J>>2]|0)-(c[x>>2]|0)-((c[I>>2]|0)-2);c[ma>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?(c[B>>2]|0)+(c[la>>2]|0)|0:(c[x>>2]|0)+(c[la>>2]|0)|0;c[na>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[D>>2]|0:c[A>>2]|0;while(1){if((c[J>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;if((c[ma>>2]|0)>>>0<=(c[na>>2]|0)>>>0)break;if((d[(c[J>>2]|0)+-1>>0]|0|0)!=(d[(c[ma>>2]|0)+-1>>0]|0|0))break;c[J>>2]=(c[J>>2]|0)+-1;c[ma>>2]=(c[ma>>2]|0)+-1;c[H>>2]=(c[H>>2]|0)+1;}c[G>>2]=c[F>>2];c[F>>2]=(c[I>>2]|0)-2;}}c[oa>>2]=(c[J>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[oa>>2]|0,c[u>>2]|0,c[I>>2]|0,(c[H>>2]|0)-3|0);q=(c[J>>2]|0)+(c[H>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if((c[t>>2]|0)>>>0>(c[w>>2]|0)>>>0)break;c[pa>>2]=(c[t>>2]|0)-(c[x>>2]|0)-(c[G>>2]|0);c[qa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[ra>>2]=(c[qa>>2]|0)+(c[pa>>2]|0);if(!(((c[pa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[pa>>2]|0)|0)>>>0>=3:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk(c[ra>>2]|0)|0))break;c[sa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0;c[H>>2]=(Lm((c[t>>2]|0)+4|0,(c[ra>>2]|0)+4|0,c[v>>2]|0,c[sa>>2]|0,c[A>>2]|0)|0)+4;c[I>>2]=c[G>>2];c[G>>2]=c[F>>2];c[F>>2]=c[I>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[H>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[H>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[F>>2];c[(c[m>>2]|0)+4>>2]=c[G>>2];l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function gm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;i=l;l=l+288|0;j=i+272|0;k=i+268|0;m=i+264|0;n=i+260|0;o=i+256|0;p=i+252|0;q=i+248|0;r=i+244|0;s=i+240|0;t=i+236|0;u=i+232|0;v=i+228|0;w=i+224|0;x=i+220|0;y=i+216|0;z=i+212|0;A=i+208|0;B=i+204|0;C=i+200|0;D=i+196|0;E=i+192|0;F=i+188|0;G=i+184|0;H=i+180|0;I=i+176|0;J=i+172|0;K=i+168|0;L=i+164|0;M=i+160|0;N=i+156|0;O=i+152|0;P=i+148|0;Q=i+144|0;R=i+140|0;S=i+136|0;T=i+132|0;U=i+128|0;V=i+124|0;W=i+120|0;X=i+116|0;Y=i+112|0;Z=i+108|0;_=i+104|0;$=i+100|0;aa=i+96|0;ba=i+92|0;ca=i+88|0;da=i+84|0;ea=i+80|0;fa=i+76|0;ga=i+72|0;ha=i+68|0;ia=i+64|0;ja=i+60|0;ka=i+56|0;la=i+52|0;ma=i+48|0;na=i+44|0;oa=i+40|0;pa=i+36|0;qa=i+32|0;ra=i+28|0;sa=i+24|0;ta=i+20|0;ua=i+16|0;va=i+12|0;wa=i+8|0;xa=i+4|0;ya=i;c[ta>>2]=a;c[ua>>2]=b;c[va>>2]=e;c[wa>>2]=f;c[xa>>2]=g;c[ya>>2]=h;h=c[ua>>2]|0;ua=c[va>>2]|0;va=c[wa>>2]|0;wa=c[xa>>2]|0;xa=c[ya>>2]|0;c[j>>2]=c[ta>>2];c[k>>2]=h;c[m>>2]=ua;c[n>>2]=va;c[o>>2]=wa;c[p>>2]=xa;c[q>>2]=0;c[r>>2]=1;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=c[(c[j>>2]|0)+4>>2];c[y>>2]=c[(c[j>>2]|0)+12>>2];c[z>>2]=c[(c[j>>2]|0)+16>>2];c[A>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[B>>2]=c[(c[j>>2]|0)+8>>2];c[C>>2]=(c[B>>2]|0)+(c[y>>2]|0);c[D>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[E>>2]=c[q>>2]|0?7:6;c[F>>2]=c[c[m>>2]>>2];c[G>>2]=c[(c[m>>2]|0)+4>>2];c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[A>>2]|0)&1);while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[H>>2]=0;c[I>>2]=0;c[J>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[t>>2]|0)-(c[x>>2]|0);c[L>>2]=(c[K>>2]|0)+1-(c[F>>2]|0);c[M>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[N>>2]=(c[M>>2]|0)+(c[L>>2]|0);if(!((((c[L>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[L>>2]|0)|0)>>>0>=3:0)|0?(q=Bk((c[t>>2]|0)+1|0)|0,(q|0)==(Bk(c[N>>2]|0)|0)):0)?(c[O>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[H>>2]=(Lm((c[t>>2]|0)+1+4|0,(c[N>>2]|0)+4|0,c[v>>2]|0,c[O>>2]|0,c[A>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[P>>2]=99999999;c[Q>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,P)|0;if((c[Q>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[H>>2]=c[Q>>2];c[J>>2]=c[t>>2];c[I>>2]=c[P>>2];}if((c[H>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[R>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[S>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[T>>2]=(c[S>>2]|0)+(c[R>>2]|0),((c[R>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[R>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[T>>2]|0)|0)):0)?(c[U>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[V>>2]=(Lm((c[t>>2]|0)+4|0,(c[T>>2]|0)+4|0,c[v>>2]|0,c[U>>2]|0,c[A>>2]|0)|0)+4,c[W>>2]=(c[V>>2]|0)*3,q=(c[H>>2]|0)*3|0,c[X>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[V>>2]|0)>>>0>=4):0)?(c[W>>2]|0)>(c[X>>2]|0):0){c[H>>2]=c[V>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[Y>>2]=99999999;c[Z>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,Y)|0;q=c[Z>>2]<<2;c[_>>2]=q-(Mm((c[Y>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[$>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+4;if((c[Z>>2]|0)>>>0>=4?(c[_>>2]|0)>(c[$>>2]|0):0){c[H>>2]=c[Z>>2];c[I>>2]=c[Y>>2];c[J>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[aa>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[ba>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[ca>>2]=(c[ba>>2]|0)+(c[aa>>2]|0),((c[aa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[aa>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[ca>>2]|0)|0)):0)?(c[da>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[ea>>2]=(Lm((c[t>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[v>>2]|0,c[da>>2]|0,c[A>>2]|0)|0)+4,c[fa>>2]=c[ea>>2]<<2,q=c[H>>2]<<2,c[ga>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[ea>>2]|0)>>>0>=4):0)?(c[fa>>2]|0)>(c[ga>>2]|0):0){c[H>>2]=c[ea>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[ha>>2]=99999999;c[ia>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,ha)|0;q=c[ia>>2]<<2;c[ja>>2]=q-(Mm((c[ha>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[ka>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+7;if((c[ia>>2]|0)>>>0<4)break a;if((c[ja>>2]|0)<=(c[ka>>2]|0))break a;c[H>>2]=c[ia>>2];c[I>>2]=c[ha>>2];c[J>>2]=c[t>>2];}}while(0);if(c[I>>2]|0){c[la>>2]=(c[J>>2]|0)-(c[x>>2]|0)-((c[I>>2]|0)-2);c[ma>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?(c[B>>2]|0)+(c[la>>2]|0)|0:(c[x>>2]|0)+(c[la>>2]|0)|0;c[na>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[D>>2]|0:c[A>>2]|0;while(1){if((c[J>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;if((c[ma>>2]|0)>>>0<=(c[na>>2]|0)>>>0)break;if((d[(c[J>>2]|0)+-1>>0]|0|0)!=(d[(c[ma>>2]|0)+-1>>0]|0|0))break;c[J>>2]=(c[J>>2]|0)+-1;c[ma>>2]=(c[ma>>2]|0)+-1;c[H>>2]=(c[H>>2]|0)+1;}c[G>>2]=c[F>>2];c[F>>2]=(c[I>>2]|0)-2;}}c[oa>>2]=(c[J>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[oa>>2]|0,c[u>>2]|0,c[I>>2]|0,(c[H>>2]|0)-3|0);q=(c[J>>2]|0)+(c[H>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if((c[t>>2]|0)>>>0>(c[w>>2]|0)>>>0)break;c[pa>>2]=(c[t>>2]|0)-(c[x>>2]|0)-(c[G>>2]|0);c[qa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[ra>>2]=(c[qa>>2]|0)+(c[pa>>2]|0);if(!(((c[pa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[pa>>2]|0)|0)>>>0>=3:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk(c[ra>>2]|0)|0))break;c[sa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0;c[H>>2]=(Lm((c[t>>2]|0)+4|0,(c[ra>>2]|0)+4|0,c[v>>2]|0,c[sa>>2]|0,c[A>>2]|0)|0)+4;c[I>>2]=c[G>>2];c[G>>2]=c[F>>2];c[F>>2]=c[I>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[H>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[H>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[F>>2];c[(c[m>>2]|0)+4>>2]=c[G>>2];l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function hm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;i=l;l=l+288|0;j=i+272|0;k=i+268|0;m=i+264|0;n=i+260|0;o=i+256|0;p=i+252|0;q=i+248|0;r=i+244|0;s=i+240|0;t=i+236|0;u=i+232|0;v=i+228|0;w=i+224|0;x=i+220|0;y=i+216|0;z=i+212|0;A=i+208|0;B=i+204|0;C=i+200|0;D=i+196|0;E=i+192|0;F=i+188|0;G=i+184|0;H=i+180|0;I=i+176|0;J=i+172|0;K=i+168|0;L=i+164|0;M=i+160|0;N=i+156|0;O=i+152|0;P=i+148|0;Q=i+144|0;R=i+140|0;S=i+136|0;T=i+132|0;U=i+128|0;V=i+124|0;W=i+120|0;X=i+116|0;Y=i+112|0;Z=i+108|0;_=i+104|0;$=i+100|0;aa=i+96|0;ba=i+92|0;ca=i+88|0;da=i+84|0;ea=i+80|0;fa=i+76|0;ga=i+72|0;ha=i+68|0;ia=i+64|0;ja=i+60|0;ka=i+56|0;la=i+52|0;ma=i+48|0;na=i+44|0;oa=i+40|0;pa=i+36|0;qa=i+32|0;ra=i+28|0;sa=i+24|0;ta=i+20|0;ua=i+16|0;va=i+12|0;wa=i+8|0;xa=i+4|0;ya=i;c[ta>>2]=a;c[ua>>2]=b;c[va>>2]=e;c[wa>>2]=f;c[xa>>2]=g;c[ya>>2]=h;h=c[ua>>2]|0;ua=c[va>>2]|0;va=c[wa>>2]|0;wa=c[xa>>2]|0;xa=c[ya>>2]|0;c[j>>2]=c[ta>>2];c[k>>2]=h;c[m>>2]=ua;c[n>>2]=va;c[o>>2]=wa;c[p>>2]=xa;c[q>>2]=0;c[r>>2]=2;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=c[(c[j>>2]|0)+4>>2];c[y>>2]=c[(c[j>>2]|0)+12>>2];c[z>>2]=c[(c[j>>2]|0)+16>>2];c[A>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[B>>2]=c[(c[j>>2]|0)+8>>2];c[C>>2]=(c[B>>2]|0)+(c[y>>2]|0);c[D>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[E>>2]=c[q>>2]|0?7:6;c[F>>2]=c[c[m>>2]>>2];c[G>>2]=c[(c[m>>2]|0)+4>>2];c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[A>>2]|0)&1);while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[H>>2]=0;c[I>>2]=0;c[J>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[t>>2]|0)-(c[x>>2]|0);c[L>>2]=(c[K>>2]|0)+1-(c[F>>2]|0);c[M>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[N>>2]=(c[M>>2]|0)+(c[L>>2]|0);if(!((((c[L>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[L>>2]|0)|0)>>>0>=3:0)|0?(q=Bk((c[t>>2]|0)+1|0)|0,(q|0)==(Bk(c[N>>2]|0)|0)):0)?(c[O>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[H>>2]=(Lm((c[t>>2]|0)+1+4|0,(c[N>>2]|0)+4|0,c[v>>2]|0,c[O>>2]|0,c[A>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[P>>2]=99999999;c[Q>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,P)|0;if((c[Q>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[H>>2]=c[Q>>2];c[J>>2]=c[t>>2];c[I>>2]=c[P>>2];}if((c[H>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[R>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[S>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[T>>2]=(c[S>>2]|0)+(c[R>>2]|0),((c[R>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[R>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[T>>2]|0)|0)):0)?(c[U>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[V>>2]=(Lm((c[t>>2]|0)+4|0,(c[T>>2]|0)+4|0,c[v>>2]|0,c[U>>2]|0,c[A>>2]|0)|0)+4,c[W>>2]=(c[V>>2]|0)*3,q=(c[H>>2]|0)*3|0,c[X>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[V>>2]|0)>>>0>=4):0)?(c[W>>2]|0)>(c[X>>2]|0):0){c[H>>2]=c[V>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[Y>>2]=99999999;c[Z>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,Y)|0;q=c[Z>>2]<<2;c[_>>2]=q-(Mm((c[Y>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[$>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+4;if((c[Z>>2]|0)>>>0>=4?(c[_>>2]|0)>(c[$>>2]|0):0){c[H>>2]=c[Z>>2];c[I>>2]=c[Y>>2];c[J>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[aa>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[ba>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[ca>>2]=(c[ba>>2]|0)+(c[aa>>2]|0),((c[aa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[aa>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[ca>>2]|0)|0)):0)?(c[da>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[ea>>2]=(Lm((c[t>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[v>>2]|0,c[da>>2]|0,c[A>>2]|0)|0)+4,c[fa>>2]=c[ea>>2]<<2,q=c[H>>2]<<2,c[ga>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[ea>>2]|0)>>>0>=4):0)?(c[fa>>2]|0)>(c[ga>>2]|0):0){c[H>>2]=c[ea>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[ha>>2]=99999999;c[ia>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,ha)|0;q=c[ia>>2]<<2;c[ja>>2]=q-(Mm((c[ha>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[ka>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+7;if((c[ia>>2]|0)>>>0<4)break a;if((c[ja>>2]|0)<=(c[ka>>2]|0))break a;c[H>>2]=c[ia>>2];c[I>>2]=c[ha>>2];c[J>>2]=c[t>>2];}}while(0);if(c[I>>2]|0){c[la>>2]=(c[J>>2]|0)-(c[x>>2]|0)-((c[I>>2]|0)-2);c[ma>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?(c[B>>2]|0)+(c[la>>2]|0)|0:(c[x>>2]|0)+(c[la>>2]|0)|0;c[na>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[D>>2]|0:c[A>>2]|0;while(1){if((c[J>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;if((c[ma>>2]|0)>>>0<=(c[na>>2]|0)>>>0)break;if((d[(c[J>>2]|0)+-1>>0]|0|0)!=(d[(c[ma>>2]|0)+-1>>0]|0|0))break;c[J>>2]=(c[J>>2]|0)+-1;c[ma>>2]=(c[ma>>2]|0)+-1;c[H>>2]=(c[H>>2]|0)+1;}c[G>>2]=c[F>>2];c[F>>2]=(c[I>>2]|0)-2;}}c[oa>>2]=(c[J>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[oa>>2]|0,c[u>>2]|0,c[I>>2]|0,(c[H>>2]|0)-3|0);q=(c[J>>2]|0)+(c[H>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if((c[t>>2]|0)>>>0>(c[w>>2]|0)>>>0)break;c[pa>>2]=(c[t>>2]|0)-(c[x>>2]|0)-(c[G>>2]|0);c[qa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[ra>>2]=(c[qa>>2]|0)+(c[pa>>2]|0);if(!(((c[pa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[pa>>2]|0)|0)>>>0>=3:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk(c[ra>>2]|0)|0))break;c[sa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0;c[H>>2]=(Lm((c[t>>2]|0)+4|0,(c[ra>>2]|0)+4|0,c[v>>2]|0,c[sa>>2]|0,c[A>>2]|0)|0)+4;c[I>>2]=c[G>>2];c[G>>2]=c[F>>2];c[F>>2]=c[I>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[H>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[H>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[F>>2];c[(c[m>>2]|0)+4>>2]=c[G>>2];l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function im(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;i=l;l=l+288|0;j=i+272|0;k=i+268|0;m=i+264|0;n=i+260|0;o=i+256|0;p=i+252|0;q=i+248|0;r=i+244|0;s=i+240|0;t=i+236|0;u=i+232|0;v=i+228|0;w=i+224|0;x=i+220|0;y=i+216|0;z=i+212|0;A=i+208|0;B=i+204|0;C=i+200|0;D=i+196|0;E=i+192|0;F=i+188|0;G=i+184|0;H=i+180|0;I=i+176|0;J=i+172|0;K=i+168|0;L=i+164|0;M=i+160|0;N=i+156|0;O=i+152|0;P=i+148|0;Q=i+144|0;R=i+140|0;S=i+136|0;T=i+132|0;U=i+128|0;V=i+124|0;W=i+120|0;X=i+116|0;Y=i+112|0;Z=i+108|0;_=i+104|0;$=i+100|0;aa=i+96|0;ba=i+92|0;ca=i+88|0;da=i+84|0;ea=i+80|0;fa=i+76|0;ga=i+72|0;ha=i+68|0;ia=i+64|0;ja=i+60|0;ka=i+56|0;la=i+52|0;ma=i+48|0;na=i+44|0;oa=i+40|0;pa=i+36|0;qa=i+32|0;ra=i+28|0;sa=i+24|0;ta=i+20|0;ua=i+16|0;va=i+12|0;wa=i+8|0;xa=i+4|0;ya=i;c[ta>>2]=a;c[ua>>2]=b;c[va>>2]=e;c[wa>>2]=f;c[xa>>2]=g;c[ya>>2]=h;h=c[ua>>2]|0;ua=c[va>>2]|0;va=c[wa>>2]|0;wa=c[xa>>2]|0;xa=c[ya>>2]|0;c[j>>2]=c[ta>>2];c[k>>2]=h;c[m>>2]=ua;c[n>>2]=va;c[o>>2]=wa;c[p>>2]=xa;c[q>>2]=1;c[r>>2]=2;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=c[(c[j>>2]|0)+4>>2];c[y>>2]=c[(c[j>>2]|0)+12>>2];c[z>>2]=c[(c[j>>2]|0)+16>>2];c[A>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[B>>2]=c[(c[j>>2]|0)+8>>2];c[C>>2]=(c[B>>2]|0)+(c[y>>2]|0);c[D>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[E>>2]=c[q>>2]|0?7:6;c[F>>2]=c[c[m>>2]>>2];c[G>>2]=c[(c[m>>2]|0)+4>>2];c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[A>>2]|0)&1);while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[H>>2]=0;c[I>>2]=0;c[J>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[t>>2]|0)-(c[x>>2]|0);c[L>>2]=(c[K>>2]|0)+1-(c[F>>2]|0);c[M>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[N>>2]=(c[M>>2]|0)+(c[L>>2]|0);if(!((((c[L>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[L>>2]|0)|0)>>>0>=3:0)|0?(q=Bk((c[t>>2]|0)+1|0)|0,(q|0)==(Bk(c[N>>2]|0)|0)):0)?(c[O>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[H>>2]=(Lm((c[t>>2]|0)+1+4|0,(c[N>>2]|0)+4|0,c[v>>2]|0,c[O>>2]|0,c[A>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[P>>2]=99999999;c[Q>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,P)|0;if((c[Q>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[H>>2]=c[Q>>2];c[J>>2]=c[t>>2];c[I>>2]=c[P>>2];}if((c[H>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[R>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[S>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[T>>2]=(c[S>>2]|0)+(c[R>>2]|0),((c[R>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[R>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[T>>2]|0)|0)):0)?(c[U>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[V>>2]=(Lm((c[t>>2]|0)+4|0,(c[T>>2]|0)+4|0,c[v>>2]|0,c[U>>2]|0,c[A>>2]|0)|0)+4,c[W>>2]=(c[V>>2]|0)*3,q=(c[H>>2]|0)*3|0,c[X>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[V>>2]|0)>>>0>=4):0)?(c[W>>2]|0)>(c[X>>2]|0):0){c[H>>2]=c[V>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[Y>>2]=99999999;c[Z>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,Y)|0;q=c[Z>>2]<<2;c[_>>2]=q-(Mm((c[Y>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[$>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+4;if((c[Z>>2]|0)>>>0>=4?(c[_>>2]|0)>(c[$>>2]|0):0){c[H>>2]=c[Z>>2];c[I>>2]=c[Y>>2];c[J>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[aa>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[ba>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[ca>>2]=(c[ba>>2]|0)+(c[aa>>2]|0),((c[aa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[aa>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[ca>>2]|0)|0)):0)?(c[da>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[ea>>2]=(Lm((c[t>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[v>>2]|0,c[da>>2]|0,c[A>>2]|0)|0)+4,c[fa>>2]=c[ea>>2]<<2,q=c[H>>2]<<2,c[ga>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[ea>>2]|0)>>>0>=4):0)?(c[fa>>2]|0)>(c[ga>>2]|0):0){c[H>>2]=c[ea>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[ha>>2]=99999999;c[ia>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,ha)|0;q=c[ia>>2]<<2;c[ja>>2]=q-(Mm((c[ha>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[ka>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+7;if((c[ia>>2]|0)>>>0<4)break a;if((c[ja>>2]|0)<=(c[ka>>2]|0))break a;c[H>>2]=c[ia>>2];c[I>>2]=c[ha>>2];c[J>>2]=c[t>>2];}}while(0);if(c[I>>2]|0){c[la>>2]=(c[J>>2]|0)-(c[x>>2]|0)-((c[I>>2]|0)-2);c[ma>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?(c[B>>2]|0)+(c[la>>2]|0)|0:(c[x>>2]|0)+(c[la>>2]|0)|0;c[na>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[D>>2]|0:c[A>>2]|0;while(1){if((c[J>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;if((c[ma>>2]|0)>>>0<=(c[na>>2]|0)>>>0)break;if((d[(c[J>>2]|0)+-1>>0]|0|0)!=(d[(c[ma>>2]|0)+-1>>0]|0|0))break;c[J>>2]=(c[J>>2]|0)+-1;c[ma>>2]=(c[ma>>2]|0)+-1;c[H>>2]=(c[H>>2]|0)+1;}c[G>>2]=c[F>>2];c[F>>2]=(c[I>>2]|0)-2;}}c[oa>>2]=(c[J>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[oa>>2]|0,c[u>>2]|0,c[I>>2]|0,(c[H>>2]|0)-3|0);q=(c[J>>2]|0)+(c[H>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if((c[t>>2]|0)>>>0>(c[w>>2]|0)>>>0)break;c[pa>>2]=(c[t>>2]|0)-(c[x>>2]|0)-(c[G>>2]|0);c[qa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[ra>>2]=(c[qa>>2]|0)+(c[pa>>2]|0);if(!(((c[pa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[pa>>2]|0)|0)>>>0>=3:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk(c[ra>>2]|0)|0))break;c[sa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0;c[H>>2]=(Lm((c[t>>2]|0)+4|0,(c[ra>>2]|0)+4|0,c[v>>2]|0,c[sa>>2]|0,c[A>>2]|0)|0)+4;c[I>>2]=c[G>>2];c[G>>2]=c[F>>2];c[F>>2]=c[I>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[H>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[H>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[F>>2];c[(c[m>>2]|0)+4>>2]=c[G>>2];l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function DC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;f=l;l=l+80|0;g=f+56|0;h=f+40|0;i=f+28|0;j=f+12|0;k=f;m=f+24|0;a:do{if((d-b|0)>2?(a[b>>0]|0)==85:0){switch(a[b+1>>0]|0){case 116:{c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;RB(h,19476,AB(19476)|0);IB(g,h);n=e+4|0;o=c[n>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){KB(o,g);c[n>>2]=(c[n>>2]|0)+24;}else LB(e,g);QA(g);iB(h);o=b+2|0;if((o|0)==(d|0)){p=c[n>>2]|0;q=0;while(1){if((q|0)==-1)break;r=q+-1|0;QA(p+(r*24|0)|0);q=r;}c[n>>2]=p+-24;s=b;break a;}if(((a[o>>0]|0)+-48|0)>>>0<10){q=b+3|0;while(1){if((q|0)==(d|0)){t=d;break;}if(((a[q>>0]|0)+-48|0)>>>0>=10){t=q;break;}q=q+1|0;}MC((c[n>>2]|0)+-24|0,o,t);u=t;}else u=o;NC((c[n>>2]|0)+-24|0,39);if((u|0)!=(d|0)?(a[u>>0]|0)==95:0){s=u+1|0;break a;}q=c[n>>2]|0;p=0;while(1){if((p|0)==-1)break;r=p+-1|0;QA(q+(r*24|0)|0);p=r;}c[n>>2]=q+-24;s=b;break a;break;}case 108:break;default:{s=b;break a;}}c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;RB(i,19485,AB(19485)|0);IB(g,i);p=e+4|0;o=c[p>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){KB(o,g);c[p>>2]=(c[p>>2]|0)+24;}else LB(e,g);QA(g);iB(i);o=b+2|0;do{if((a[o>>0]|0)!=118){r=mB(o,d,e)|0;if((r|0)==(o|0)){v=c[p>>2]|0;w=0;while(1){if((w|0)==-1)break;x=w+-1|0;QA(v+(x*24|0)|0);w=x;}c[p>>2]=v+-24;s=b;break a;}w=c[p>>2]|0;if(((w-(c[e>>2]|0)|0)/24|0)>>>0<2){s=b;break a;}FB(j,w+-24|0);w=c[p>>2]|0;x=0;while(1){if((x|0)==-1)break;y=x+-1|0;QA(w+(y*24|0)|0);x=y;}c[p>>2]=w+-24;x=j+11|0;v=a[x>>0]|0;y=v<<24>>24<0;z=j+4|0;TA(w+-48|0,y?c[j>>2]|0:j,y?c[z>>2]|0:v&255)|0;v=r;while(1){y=mB(v,d,e)|0;if((y|0)==(v|0)){A=54;break;}B=c[p>>2]|0;if(((B-(c[e>>2]|0)|0)/24|0)>>>0<2){A=82;break;}FB(k,B+-24|0);if((a[x>>0]|0)<0){B=c[j>>2]|0;a[g>>0]=0;cB(B,g);c[z>>2]=0;}else{a[g>>0]=0;cB(j,g);a[x>>0]=0;}TB(j);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];B=0;while(1){if((B|0)==3)break;c[k+(B<<2)>>2]=0;B=B+1|0;}iB(k);B=c[p>>2]|0;C=0;while(1){if((C|0)==-1)break;D=C+-1|0;QA(B+(D*24|0)|0);C=D;}c[p>>2]=B+-24;C=a[x>>0]|0;if((C<<24>>24<0?c[z>>2]|0:C&255)|0){qB(B+-48|0,18897)|0;C=a[x>>0]|0;D=C<<24>>24<0;TA((c[p>>2]|0)+-24|0,D?c[j>>2]|0:j,D?c[z>>2]|0:C&255)|0;}v=y;}if((A|0)==54){qB((c[p>>2]|0)+-24|0,18673)|0;iB(j);E=v;break;}else if((A|0)==82){iB(j);s=b;break a;}}else{NC((c[p>>2]|0)+-24|0,41);E=b+3|0;}}while(0);if((E|0)!=(d|0)?(a[E>>0]|0)==69:0){o=E+1|0;if((o|0)==(d|0)){q=c[p>>2]|0;n=0;while(1){if((n|0)==-1)break;z=n+-1|0;QA(q+(z*24|0)|0);n=z;}c[p>>2]=q+-24;s=b;break;}if(((a[o>>0]|0)+-48|0)>>>0<10){n=E+2|0;while(1){if((n|0)==(d|0)){F=d;break;}if(((a[n>>0]|0)+-48|0)>>>0>=10){F=n;break;}n=n+1|0;}n=(c[p>>2]|0)+-24|0;if((a[n+11>>0]|0)<0)G=c[n>>2]|0;else G=n;c[m>>2]=G+7;c[g>>2]=c[m>>2];OC(n,g,o,F)|0;H=F;}else H=o;if((H|0)!=(d|0)?(a[H>>0]|0)==95:0){s=H+1|0;break;}n=c[p>>2]|0;q=0;while(1){if((q|0)==-1)break;z=q+-1|0;QA(n+(z*24|0)|0);q=z;}c[p>>2]=n+-24;s=b;break;}q=c[p>>2]|0;o=0;while(1){if((o|0)==-1)break;z=o+-1|0;QA(q+(z*24|0)|0);o=z;}c[p>>2]=q+-24;s=b;}else s=b;}while(0);l=f;return s|0;}function EC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f;a:do{if((d-b|0)>1)do{switch(a[b>>0]|0){case 97:{switch(a[b+1>>0]|0){case 97:{FC(g,18975);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 110:case 100:{GC(g,18986);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 78:{FC(g,18996);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 83:{GC(g,19007);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 99:{switch(a[b+1>>0]|0){case 108:{FC(g,19017);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 109:{GC(g,19028);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 111:{GC(g,19038);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 118:{h=e+63|0;i=a[h>>0]|0;a[h>>0]=0;k=b+2|0;m=mB(k,d,e)|0;a[h>>0]=i;if((m|0)==(k|0)){j=b;break a;}k=c[e+4>>2]|0;if((c[e>>2]|0)==(k|0)){j=b;break a;}pB(k+-24|0,0,19048)|0;a[e+60>>0]=1;j=m;break a;break;}default:{j=b;break a;}}break;}case 100:{switch(a[b+1>>0]|0){case 97:{HC(g,19058);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 101:{GC(g,19076);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 108:{IC(g);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 118:{GC(g,19086);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 86:{FC(g,19096);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 101:{switch(a[b+1>>0]|0){case 111:{GC(g,19107);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 79:{FC(g,19117);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 113:{FC(g,19128);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 103:{switch(a[b+1>>0]|0){case 101:{FC(g,19139);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 116:{GC(g,19150);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 105:{if((a[b+1>>0]|0)!=120){j=b;break a;}FC(g,19160);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 108:{switch(a[b+1>>0]|0){case 101:{FC(g,19171);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 105:{m=b+2|0;k=GB(m,d,e)|0;if((k|0)==(m|0)){j=b;break a;}m=c[e+4>>2]|0;if((c[e>>2]|0)==(m|0)){j=b;break a;}pB(m+-24|0,0,19182)|0;j=k;break a;break;}case 115:{FC(g,19194);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 83:{JC(g,19205);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 116:{GC(g,19217);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 109:{switch(a[b+1>>0]|0){case 105:{GC(g,19227);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 73:{FC(g,19237);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 108:{GC(g,19076);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 76:{FC(g,19248);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 109:{FC(g,19259);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 110:{switch(a[b+1>>0]|0){case 97:{KC(g,19270);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 101:{FC(g,19285);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 103:{GC(g,19227);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 116:{GC(g,19296);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 119:{LC(g,19306);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 111:{switch(a[b+1>>0]|0){case 111:{FC(g,19319);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 114:{GC(g,19330);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 82:{FC(g,19340);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 112:{switch(a[b+1>>0]|0){case 109:{JC(g,19351);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 108:{GC(g,19363);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 76:{FC(g,19373);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 112:{FC(g,19384);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 115:{GC(g,19363);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 116:{FC(g,19395);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 113:{if((a[b+1>>0]|0)!=117){j=b;break a;}GC(g,19406);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 114:{switch(a[b+1>>0]|0){case 109:{GC(g,19416);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 77:{FC(g,19426);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 115:{FC(g,19437);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 83:{JC(g,19448);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 118:{if(((a[b+1>>0]|0)+-48|0)>>>0>=10){j=b;break a;}k=b+2|0;m=GB(k,d,e)|0;if((m|0)==(k|0)){j=b;break a;}k=c[e+4>>2]|0;if((c[e>>2]|0)==(k|0)){j=b;break a;}pB(k+-24|0,0,19048)|0;j=m;break a;break;}default:{j=b;break a;}}}while(0);else j=b;}while(0);l=f;return j|0;}function FC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,10);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function GC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,9);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function HC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,17);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function IC(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,19460,15);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function JC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,11);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function KC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,14);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function LC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,12);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function MC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+16|0;g=d;h=f;i=b+11|0;j=a[i>>0]|0;k=j<<24>>24<0;if(k){m=c[b+4>>2]|0;n=(c[b+8>>2]&2147483647)+-1|0;}else{m=j&255;n=10;}o=e-g|0;do{if(o|0){if(k){p=c[b>>2]|0;q=c[b+4>>2]|0;}else{p=b;q=j&255;}if(PC(d,p,p+q|0)|0){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;QC(h,d,e);r=a[h+11>>0]|0;s=r<<24>>24<0;TA(b,s?c[h>>2]|0:h,s?c[h+4>>2]|0:r&255)|0;iB(h);break;}if((n-m|0)>>>0<o>>>0)RC(b,n,m+o-n|0,m,m,0);if((a[i>>0]|0)<0)t=c[b>>2]|0;else t=b;r=e+(m-g)|0;s=t+m|0;u=d;while(1){if((u|0)==(e|0))break;cB(s,u);s=s+1|0;u=u+1|0;}a[h>>0]=0;cB(t+r|0,h);u=m+o|0;if((a[i>>0]|0)<0){c[b+4>>2]=u;break;}else{a[i>>0]=u;break;}}}while(0);l=f;return;}function NC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;e=l;l=l+16|0;f=e;g=e+1|0;a[f>>0]=d;d=b+11|0;h=a[d>>0]|0;i=h<<24>>24<0;if(i){j=c[b+4>>2]|0;k=(c[b+8>>2]&2147483647)+-1|0;}else{j=h&255;k=10;}if((j|0)==(k|0)){RC(b,k,1,k,k,0);if((a[d>>0]|0)<0)m=8;else m=7;}else if(i)m=8;else m=7;if((m|0)==7){a[d>>0]=j+1;n=b;}else if((m|0)==8){m=c[b>>2]|0;c[b+4>>2]=j+1;n=m;}m=n+j|0;cB(m,f);a[g>>0]=0;cB(m+1|0,g);l=e;return;}function OC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;g=l;l=l+32|0;h=g+16|0;i=g+4|0;j=g;k=b+11|0;m=a[k>>0]|0;n=m<<24>>24<0;if(n)o=c[b>>2]|0;else o=b;p=c[d>>2]|0;d=p-o|0;o=f-e|0;do{if(!o){q=m;r=27;}else{if(n){s=c[b>>2]|0;t=c[b+4>>2]|0;}else{s=b;t=m&255;}if(PC(e,s,s+t|0)|0){c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;QC(i,e,f);c[j>>2]=p;u=a[i+11>>0]|0;v=u<<24>>24<0;w=v?c[i>>2]|0:i;x=w+(v?c[i+4>>2]|0:u&255)|0;c[h>>2]=c[j>>2];u=OC(b,h,w,x)|0;iB(i);y=u;break;}u=a[k>>0]|0;x=u<<24>>24<0;if(x){z=c[b+4>>2]|0;A=(c[b+8>>2]&2147483647)+-1|0;}else{z=u&255;A=10;}if((A-z|0)>>>0>=o>>>0){if(x)B=c[b>>2]|0;else B=b;x=z-d|0;if(!x)C=B;else{u=B+d|0;wC(u+o|0,u,x)|0;C=B;}}else{RC(b,A,z+o-A|0,z,d,o);C=c[b>>2]|0;}x=z+o|0;if((a[k>>0]|0)<0)c[b+4>>2]=x;else a[k>>0]=x;a[h>>0]=0;cB(C+x|0,h);x=e;u=C+d|0;while(1){if((x|0)==(f|0))break;cB(u,x);x=x+1|0;u=u+1|0;}q=a[k>>0]|0;r=27;}}while(0);if((r|0)==27){if(q<<24>>24<0)D=c[b>>2]|0;else D=b;y=D+d|0;}l=g;return y|0;}function PC(a,b,c){a=a|0;b=b|0;c=c|0;return b>>>0<=a>>>0&a>>>0<c>>>0|0;}function QC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+16|0;g=d;h=f;i=e-g|0;if(i>>>0>4294967279)eB(b);if(i>>>0<11){a[b+11>>0]=i;j=b;}else{k=i+16&-16;m=fB(k)|0;c[b>>2]=m;c[b+8>>2]=k|-2147483648;c[b+4>>2]=i;j=m;}m=e-g|0;g=d;d=j;while(1){if((g|0)==(e|0))break;cB(d,g);g=g+1|0;d=d+1|0;}a[h>>0]=0;cB(j+m|0,h);l=f;return;}function RC(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;if((-17-d|0)>>>0<e>>>0)eB(b);if((a[b+11>>0]|0)<0)i=c[b>>2]|0;else i=b;if(d>>>0<2147483623){j=e+d|0;e=d<<1;k=j>>>0<e>>>0?e:j;l=k>>>0<11?11:k+16&-16;}else l=-17;k=fB(l)|0;if(g|0)bB(k,i,g)|0;j=f-g|0;if(j|0)bB(k+g+h|0,i+g|0,j)|0;if((d|0)!=10)gB(i);c[b>>2]=k;c[b+8>>2]=l|-2147483648;return;}function SC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=d+11|0;f=a[e>>0]|0;g=d+4|0;a:do{if(!((f<<24>>24<0?c[g>>2]|0:f&255)|0))TC(b,d);else{h=AB(19495)|0;i=a[e>>0]|0;if((h|0)==((i<<24>>24<0?c[g>>2]|0:i&255)|0)?(BB(d,19495,h)|0)==0:0){uC(d,19507);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;RB(b,19578,AB(19578)|0);break;}h=AB(19591)|0;i=a[e>>0]|0;if((h|0)==((i<<24>>24<0?c[g>>2]|0:i&255)|0)?(BB(d,19591,h)|0)==0:0){uC(d,19604);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;RB(b,19654,AB(19654)|0);break;}h=AB(19668)|0;i=a[e>>0]|0;if((h|0)==((i<<24>>24<0?c[g>>2]|0:i&255)|0)?(BB(d,19668,h)|0)==0:0){uC(d,19681);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;RB(b,19731,AB(19731)|0);break;}h=AB(19745)|0;i=a[e>>0]|0;j=c[g>>2]|0;k=i&255;do{if((h|0)==((i<<24>>24<0?j:k)|0)){if(!(BB(d,19745,h)|0)){uC(d,19759);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;RB(b,19810,AB(19810)|0);break a;}else{l=a[e>>0]|0;m=l&255;n=l;o=c[g>>2]|0;break;}}else{m=k;n=i;o=j;}}while(0);j=n<<24>>24<0;i=j?c[d>>2]|0:d;k=i+(j?o:m)|0;do{if((a[k+-1>>0]|0)==62){j=1;h=k;b:while(1){p=h;c:while(1){q=p+-1|0;if((q|0)==(i|0))break b;switch(a[p+-2>>0]|0){case 60:{r=24;break c;break;}case 62:{r=25;break c;break;}default:p=q;}}if((r|0)==24){r=0;l=j+-1|0;if(!l){r=27;break;}else s=l;}else if((r|0)==25){r=0;s=j+1|0;}j=s;h=q;}if((r|0)==27){t=p+-2|0;break;};c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;h=0;while(1){if((h|0)==3)break a;c[b+(h<<2)>>2]=0;h=h+1|0;}}else t=k;}while(0);k=t;while(1){h=k+-1|0;if((h|0)==(i|0)){u=i;break;}if((a[h>>0]|0)==58){u=k;break;}else k=h;}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;QC(b,u,t);}}while(0);return;}function TC(b,d){b=b|0;d=d|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if((a[d+11>>0]|0)<0)RB(b,c[d>>2]|0,c[d+4>>2]|0);else{c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];}return;}function UC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((a|0)!=(b|0)){e=yC(a,b,d)|0;if((e|0)==(a|0))f=AC(a,b,d)|0;else f=e;if((f|0)!=(a|0)?(e=c[d+4>>2]|0,(c[d>>2]|0)!=(e|0)):0){pB(e+-24|0,0,18745)|0;g=f;}else g=a;}else g=a;return g|0;}function VC(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;b=0;while(1){if((b|0)==3)break;c[a+(b<<2)>>2]=0;b=b+1|0;}b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function WC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b;e=a+4|0;f=(((c[e>>2]|0)-(c[a>>2]|0)|0)/24|0)+1|0;g=XC(a)|0;if(g>>>0<f>>>0)Wz(a);else{h=c[a>>2]|0;i=((c[a+8>>2]|0)-h|0)/24|0;j=i<<1;YC(d,i>>>0<g>>>1>>>0?j>>>0<f>>>0?f:j:g,((c[e>>2]|0)-h|0)/24|0,a+12|0);h=d+8|0;e=c[h>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;VC(e);c[h>>2]=e+24;ZC(a,d);_C(d);l=b;return;}}function XC(a){a=a|0;return 178956970;}function YC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+12|0;c[f>>2]=0;c[a+16>>2]=e;if(!b)g=0;else g=$C(e,b)|0;c[a>>2]=g;e=g+(d*24|0)|0;c[a+8>>2]=e;c[a+4>>2]=e;c[f>>2]=g+(b*24|0);return;}function ZC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a>>2]|0;e=a+4|0;f=b+4|0;g=c[e>>2]|0;while(1){if((g|0)==(d|0))break;h=g+-24|0;KB((c[f>>2]|0)+-24|0,h);c[f>>2]=(c[f>>2]|0)+-24;g=h;}g=c[a>>2]|0;c[a>>2]=c[f>>2];c[f>>2]=g;g=b+8|0;d=c[e>>2]|0;c[e>>2]=c[g>>2];c[g>>2]=d;d=a+8|0;a=b+12|0;g=c[d>>2]|0;c[d>>2]=c[a>>2];c[a>>2]=g;c[b>>2]=c[f>>2];return;}function _C(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+4>>2]|0;d=a+8|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;f=e+-24|0;c[d>>2]=f;QA(f);}d=c[a>>2]|0;if(d|0)hB(c[a+16>>2]|0,d,((c[a+12>>2]|0)-d|0)/24|0);return;}function $C(a,b){a=a|0;b=b|0;return aD(c[a>>2]|0,b*24|0)|0;}function aD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=$A(b)|0;b=a+4096|0;e=c[b>>2]|0;if((a+4096-e|0)>>>0<d>>>0)f=Cy(d)|0;else{c[b>>2]=e+d;f=e;}return f|0;}function bD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+48|0;h=g+24|0;i=g;j=g+12|0;k=QB(b,d)|0;if(!((k|0)==(b|0)|(k|0)==(d|0))?(a[k>>0]|0)==69:0){d=e+11|0;m=a[d>>0]|0;n=e+4|0;do{if((m<<24>>24<0?c[n>>2]|0:m&255)>>>0<=3){o=f+4|0;p=c[o>>2]|0;if(p>>>0<(c[f+8>>2]|0)>>>0){c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;VC(p);c[o>>2]=(c[o>>2]|0)+24;break;}else{WC(f);break;}}else{UB(j,18675,e);qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}IB(h,i);o=f+4|0;p=c[o>>2]|0;if(p>>>0<(c[f+8>>2]|0)>>>0){KB(p,h);c[o>>2]=(c[o>>2]|0)+24;}else LB(f,h);QA(h);iB(i);iB(j);}}while(0);j=f+4|0;if((a[b>>0]|0)==110){NC((c[j>>2]|0)+-24|0,45);q=b+1|0;}else q=b;MC((c[j>>2]|0)+-24|0,q,k);q=a[d>>0]|0;d=q<<24>>24<0;f=d?c[n>>2]|0:q&255;if(f>>>0<4)TA((c[j>>2]|0)+-24|0,d?c[e>>2]|0:e,f)|0;r=k+1|0;}else r=b;l=g;return r|0;}function cD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,4);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function dD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;f=l;l=l+64|0;i=f+24|0;j=f+60|0;k=f;m=f+48|0;a:do{if((d-b|0)>>>0>8){n=0;o=j;while(1){p=a[b+n>>0]|0;q=p<<24>>24;if((n|0)==8){r=6;break;}if(!(Qz(q)|0))break;s=a[b+(n|1)>>0]|0;a[o>>0]=(((q+-48|0)>>>0<10?0:9)+q<<4)+s+((s+-48|0)>>>0<10?208:169);n=n+2|0;o=o+1|0;}do{if((r|0)==6){if(p<<24>>24==69){b:do{if((o|0)!=(j|0)){n=o;s=j;while(1){q=n+-1|0;if(s>>>0>=q>>>0)break b;t=a[s>>0]|0;a[s>>0]=a[q>>0]|0;a[q>>0]=t;n=q;s=s+1|0;}}}while(0);c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;h[i>>3]=+g[j>>2];s=bz(k,24,19987,i)|0;if(s>>>0>23)break;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;RB(m,k,s);IB(i,m);s=e+4|0;n=c[s>>2]|0;if(n>>>0<(c[e+8>>2]|0)>>>0){KB(n,i);c[s>>2]=(c[s>>2]|0)+24;}else LB(e,i);QA(i);iB(m);u=b+9|0;}else u=b;v=u;break a;}}while(0);v=b;}else v=b;}while(0);l=f;return v|0;}function eD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+80|0;g=f+40|0;i=f+32|0;j=f;k=f+64|0;a:do{if((d-b|0)>>>0>16){m=0;n=i;while(1){o=a[b+m>>0]|0;p=o<<24>>24;if((m|0)==16){q=6;break;}if(!(Qz(p)|0))break;r=a[b+(m|1)>>0]|0;a[n>>0]=(((p+-48|0)>>>0<10?0:9)+p<<4)+r+((r+-48|0)>>>0<10?208:169);m=m+2|0;n=n+1|0;}do{if((q|0)==6){if(o<<24>>24==69){b:do{if((n|0)!=(i|0)){m=n;r=i;while(1){p=m+-1|0;if(r>>>0>=p>>>0)break b;s=a[r>>0]|0;a[r>>0]=a[p>>0]|0;a[p>>0]=s;m=p;r=r+1|0;}}}while(0);c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;h[g>>3]=+h[i>>3];r=bz(j,32,19984,g)|0;if(r>>>0>31)break;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;RB(k,j,r);IB(g,k);r=e+4|0;m=c[r>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[r>>2]=(c[r>>2]|0)+24;}else LB(e,g);QA(g);iB(k);t=b+17|0;}else t=b;u=t;break a;}}while(0);u=b;}else u=b;}while(0);l=f;return u|0;}function fD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+96|0;g=f+48|0;i=f+40|0;j=f;k=f+72|0;a:do{if((d-b|0)>>>0>20){m=0;n=i;while(1){o=a[b+m>>0]|0;p=o<<24>>24;if((m|0)==20){q=6;break;}if(!(Qz(p)|0))break;r=a[b+(m|1)>>0]|0;a[n>>0]=(((p+-48|0)>>>0<10?0:9)+p<<4)+r+((r+-48|0)>>>0<10?208:169);m=m+2|0;n=n+1|0;}do{if((q|0)==6){if(o<<24>>24==69){b:do{if((n|0)!=(i|0)){m=n;r=i;while(1){p=m+-1|0;if(r>>>0>=p>>>0)break b;s=a[r>>0]|0;a[r>>0]=a[p>>0]|0;a[p>>0]=s;m=p;r=r+1|0;}}}while(0);r=j;m=r+40|0;do{c[r>>2]=0;r=r+4|0;}while((r|0)<(m|0));h[g>>3]=+h[i>>3];r=bz(j,40,19979,g)|0;if(r>>>0>39)break;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;RB(k,j,r);IB(g,k);r=e+4|0;m=c[r>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[r>>2]=(c[r>>2]|0)+24;}else LB(e,g);QA(g);iB(k);t=b+21|0;}else t=b;u=t;break a;}}while(0);u=b;}else u=b;}while(0);l=f;return u|0;}function gD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,13);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function hD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;f=l;l=l+48|0;g=f+36|0;h=f+24|0;i=f+8|0;j=f;a:do{if((b|0)!=(d|0)?(a[b>>0]|0)==78:0){k=nB(b+1|0,d,g)|0;b:do{if((k|0)!=(d|0)){m=e+52|0;c[m>>2]=0;switch(a[k>>0]|0){case 82:{n=1;o=6;break;}case 79:{n=2;o=6;break;}default:p=k;}if((o|0)==6){c[m>>2]=n;p=k+1|0;}m=e+4|0;q=c[m>>2]|0;if(q>>>0<(c[e+8>>2]|0)>>>0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;VC(q);c[m>>2]=(c[m>>2]|0)+24;}else WC(e);if(((d-p|0)>1?(a[p>>0]|0)==83:0)?(a[p+1>>0]|0)==116:0){uC((c[m>>2]|0)+-24|0,20051);r=p+2|0;}else r=p;if((r|0)==(d|0)){q=c[m>>2]|0;s=0;while(1){if((s|0)==-1)break;t=s+-1|0;QA(q+(t*24|0)|0);s=t;}c[m>>2]=q+-24;break;}s=h+11|0;t=h+4|0;u=e+12|0;v=e+20|0;w=e+24|0;x=i+11|0;y=i+4|0;z=i+11|0;A=i+4|0;B=i+12|0;C=i+4|0;D=i+8|0;E=e+16|0;F=i+12|0;G=i+4|0;H=i+8|0;I=i+11|0;J=i+4|0;K=i+12|0;L=i+4|0;M=i+8|0;N=i+11|0;O=i+4|0;P=i+12|0;Q=i+4|0;R=i+8|0;S=i+12|0;T=i+4|0;U=i+8|0;V=0;W=r;c:while(1){X=W;d:while(1){Y=a[X>>0]|0;if(Y<<24>>24==69)break c;switch(Y<<24>>24|0){case 83:{o=23;break d;break;}case 84:{o=39;break d;break;}case 68:{o=53;break d;break;}case 73:{Y=EB(X,d,e)|0;if((Y|0)==(X|0)|(Y|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);Z=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;$=_+-1|0;QA(Z+($*24|0)|0);_=$;}c[m>>2]=Z+-24;_=a[s>>0]|0;$=_<<24>>24<0;TA(Z+-48|0,$?c[h>>2]|0:h,$?c[t>>2]|0:_&255)|0;_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;$=_+4|0;c[$>>2]=0;aa=_+8|0;c[aa>>2]=0;c[_+12>>2]=c[B>>2];c[_>>2]=c[i>>2];c[$>>2]=c[C>>2];c[aa>>2]=c[D>>2];c[D>>2]=0;c[C>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);iB(h);ba=Y;break;}case 76:{aa=X+1|0;if((aa|0)==(d|0))break b;else ba=aa;break;}default:{o=79;break d;}}X=ba;}e:do{if((o|0)==23){o=0;aa=X+1|0;if((aa|0)!=(d|0)?(a[aa>>0]|0)==116:0){o=79;break;}aa=NB(X,d,e)|0;if((aa|0)==(X|0)|(aa|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);$=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;ca=_+-1|0;QA($+(ca*24|0)|0);_=ca;}c[m>>2]=$+-24;_=$+-48|0;Y=a[_+11>>0]|0;if(Y<<24>>24<0)da=c[$+-44>>2]|0;else da=Y&255;if(!da)lD(_,h);else{UB(i,18747,h);_=a[I>>0]|0;Y=_<<24>>24<0;TA((c[m>>2]|0)+-24|0,Y?c[i>>2]|0:i,Y?c[J>>2]|0:_&255)|0;iB(i);_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;Y=_+4|0;c[Y>>2]=0;Z=_+8|0;c[Z>>2]=0;c[_+12>>2]=c[S>>2];c[_>>2]=c[i>>2];c[Y>>2]=c[T>>2];c[Z>>2]=c[U>>2];c[U>>2]=0;c[T>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);}iB(h);ea=aa;}else if((o|0)==39){o=0;Z=DB(X,d,e)|0;if((Z|0)==(X|0)|(Z|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);Y=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;ca=_+-1|0;QA(Y+(ca*24|0)|0);_=ca;}c[m>>2]=Y+-24;_=Y+-48|0;aa=a[_+11>>0]|0;if(aa<<24>>24<0)fa=c[Y+-44>>2]|0;else fa=aa&255;if(!fa)lD(_,h);else{UB(i,18747,h);_=a[z>>0]|0;aa=_<<24>>24<0;TA((c[m>>2]|0)+-24|0,aa?c[i>>2]|0:i,aa?c[A>>2]|0:_&255)|0;iB(i);}_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;aa=_+4|0;c[aa>>2]=0;$=_+8|0;c[$>>2]=0;c[_+12>>2]=c[K>>2];c[_>>2]=c[i>>2];c[aa>>2]=c[L>>2];c[$>>2]=c[M>>2];c[M>>2]=0;c[L>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);iB(h);ea=Z;}else if((o|0)==53){o=0;$=X+1|0;if(($|0)!=(d|0))switch(a[$>>0]|0){case 84:case 116:break;default:{o=79;break e;}}$=OB(X,d,e)|0;if(($|0)==(X|0)|($|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);aa=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;ca=_+-1|0;QA(aa+(ca*24|0)|0);_=ca;}c[m>>2]=aa+-24;_=aa+-48|0;Z=a[_+11>>0]|0;if(Z<<24>>24<0)ga=c[aa+-44>>2]|0;else ga=Z&255;if(!ga)lD(_,h);else{UB(i,18747,h);_=a[N>>0]|0;Z=_<<24>>24<0;TA((c[m>>2]|0)+-24|0,Z?c[i>>2]|0:i,Z?c[O>>2]|0:_&255)|0;iB(i);}_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;Z=_+4|0;c[Z>>2]=0;Y=_+8|0;c[Y>>2]=0;c[_+12>>2]=c[P>>2];c[_>>2]=c[i>>2];c[Z>>2]=c[Q>>2];c[Y>>2]=c[R>>2];c[R>>2]=0;c[Q>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);iB(h);ea=$;}}while(0);if((o|0)==79){o=0;Y=BC(X,d,e)|0;if((Y|0)==(X|0)|(Y|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);Z=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;ca=_+-1|0;QA(Z+(ca*24|0)|0);_=ca;}c[m>>2]=Z+-24;_=Z+-48|0;ca=a[_+11>>0]|0;if(ca<<24>>24<0)ha=c[Z+-44>>2]|0;else ha=ca&255;if(!ha)lD(_,h);else{UB(i,18747,h);_=a[x>>0]|0;ca=_<<24>>24<0;TA((c[m>>2]|0)+-24|0,ca?c[i>>2]|0:i,ca?c[y>>2]|0:_&255)|0;iB(i);}_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;ca=_+4|0;c[ca>>2]=0;ia=_+8|0;c[ia>>2]=0;c[_+12>>2]=c[F>>2];c[_>>2]=c[i>>2];c[ca>>2]=c[G>>2];c[ia>>2]=c[H>>2];c[H>>2]=0;c[G>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);iB(h);ea=Y;}V=1;W=ea;}W=X+1|0;c[e+48>>2]=c[g>>2];if(V?(E=c[v>>2]|0,(c[e+16>>2]|0)!=(E|0)):0){G=0;while(1){if((G|0)==-1)break;H=G+-1|0;RA(E+(H<<4)|0);G=H;}c[v>>2]=E+-16;}ja=W;break a;}}while(0);ja=b;}else ja=b;}while(0);l=f;return ja|0;}function iD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+16|0;g=f;a:do{if(((((b|0)!=(d|0)?(a[b>>0]|0)==90:0)?(h=b+1|0,i=jB(h,d,e)|0,!((i|0)==(h|0)|(i|0)==(d|0))):0)?(a[i>>0]|0)==69:0)?(h=i+1|0,(h|0)!=(d|0)):0)switch(a[h>>0]|0){case 115:{j=kD(i+2|0,d)|0;k=c[e+4>>2]|0;if((c[e>>2]|0)==(k|0)){m=j;break a;}qB(k+-24|0,20034)|0;m=j;break a;break;}case 100:{j=i+2|0;if((j|0)==(d|0)){m=b;break a;}i=QB(j,d)|0;if((i|0)==(d|0)){m=b;break a;}if((a[i>>0]|0)!=95){m=b;break a;}j=i+1|0;i=MB(j,d,e)|0;k=e+4|0;if((i|0)==(j|0)){j=c[k>>2]|0;n=0;while(1){if((n|0)==-1)break;o=n+-1|0;QA(j+(o*24|0)|0);n=o;}c[k>>2]=j+-24;m=b;break a;}n=c[k>>2]|0;if(((n-(c[e>>2]|0)|0)/24|0)>>>0<2){m=b;break a;}FB(g,n+-24|0);n=c[k>>2]|0;o=0;while(1){if((o|0)==-1)break;p=o+-1|0;QA(n+(p*24|0)|0);o=p;}c[k>>2]=n+-24;qB(n+-48|0,18747)|0;o=a[g+11>>0]|0;j=o<<24>>24<0;TA((c[k>>2]|0)+-24|0,j?c[g>>2]|0:g,j?c[g+4>>2]|0:o&255)|0;iB(g);m=i;break a;break;}default:{o=MB(h,d,e)|0;if((o|0)==(h|0)){j=e+4|0;p=c[j>>2]|0;q=0;while(1){if((q|0)==-1)break;r=q+-1|0;QA(p+(r*24|0)|0);q=r;}c[j>>2]=p+-24;m=b;break a;}q=kD(o,d)|0;h=e+4|0;i=c[h>>2]|0;if(((i-(c[e>>2]|0)|0)/24|0)>>>0<2){m=q;break a;}FB(g,i+-24|0);i=c[h>>2]|0;k=0;while(1){if((k|0)==-1)break;n=k+-1|0;QA(i+(n*24|0)|0);k=n;}c[h>>2]=i+-24;qB(i+-48|0,18747)|0;k=a[g+11>>0]|0;o=k<<24>>24<0;TA((c[h>>2]|0)+-24|0,o?c[g>>2]|0:g,o?c[g+4>>2]|0:k&255)|0;iB(g);m=q;break a;}}else m=b;}while(0);l=f;return m|0;}function jD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((d-b|0)>1){if((a[b>>0]|0)==83?(a[b+1>>0]|0)==116:0){f=b+2|0;if((f|0)==(d|0)){g=0;h=d;}else{g=0;h=(a[f>>0]|0)==76?b+3|0:f;}}else{g=1;h=b;}f=BC(h,d,e)|0;d=(f|0)==(h|0);if(!(g|d)){g=c[e+4>>2]|0;if((c[e>>2]|0)==(g|0))i=b;else{pB(g+-24|0,0,18969)|0;i=f;}}else i=d?b:f;}else i=b;return i|0;}function kD(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:do{if((b|0)!=(c|0)){d=a[b>>0]|0;if(d<<24>>24!=95){if(((d<<24>>24)+-48|0)>>>0>=10){e=b;break;}d=b;while(1){f=d+1|0;if((f|0)==(c|0)){e=c;break a;}if(((a[f>>0]|0)+-48|0)>>>0<10)d=f;else{e=f;break a;}}}d=b+1|0;if((d|0)!=(c|0)){f=a[d>>0]|0;if(((f<<24>>24)+-48|0)>>>0<10){e=b+2|0;break;}if(f<<24>>24==95){f=b+2|0;while(1){if((f|0)==(c|0)){e=b;break a;}g=a[f>>0]|0;if(((g<<24>>24)+-48|0)>>>0>=10)break;f=f+1|0;}return(g<<24>>24==95?f+1|0:b)|0;}else e=b;}else e=b;}else e=b;}while(0);return e|0;}function lD(b,d){b=b|0;d=d|0;var e=0,f=0;if((b|0)!=(d|0)){e=a[d+11>>0]|0;f=e<<24>>24<0;vC(b,f?c[d>>2]|0:d,f?c[d+4>>2]|0:e&255);}return;}function mD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,20066,21);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function nD(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];return;}function oD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+32|0;e=d+20|0;f=d;g=a+4|0;h=((c[g>>2]|0)-(c[a>>2]|0)>>4)+1|0;i=qD(a)|0;if(i>>>0<h>>>0)Wz(a);else{j=c[a>>2]|0;k=(c[a+8>>2]|0)-j|0;m=k>>3;rD(f,k>>4>>>0<i>>>1>>>0?m>>>0<h>>>0?h:m:i,(c[g>>2]|0)-j>>4,a+12|0);j=f+8|0;g=c[j>>2]|0;nD(e,b);c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=c[e>>2];c[j>>2]=g+16;sD(a,f);tD(f);l=d;return;}}function pD(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;a:do{if((b|0)==(c|0))e=b;else switch(a[b>>0]|0){case 88:{f=b+1|0;g=SB(f,c,d)|0;if((g|0)==(f|0)|(g|0)==(c|0)){e=b;break a;}e=(a[g>>0]|0)==69?g+1|0:b;break a;break;}case 74:{g=b+1|0;if((g|0)==(c|0)){e=b;break a;}f=g;while(1){if((a[f>>0]|0)==69)break;g=pD(f,c,d)|0;if((g|0)==(f|0)){e=b;break a;}else f=g;}e=f+1|0;break a;break;}case 76:{g=b+1|0;if((g|0)!=(c|0)?(a[g>>0]|0)==90:0){g=b+2|0;h=jB(g,c,d)|0;if((h|0)==(g|0)|(h|0)==(c|0)){e=b;break a;}e=(a[h>>0]|0)==69?h+1|0:b;break a;}e=WB(b,c,d)|0;break a;break;}default:{e=mB(b,c,d)|0;break a;}}}while(0);return e|0;}function qD(a){a=a|0;return 268435455;}function rD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+12|0;c[f>>2]=0;c[a+16>>2]=e;if(!b)g=0;else g=uD(e,b)|0;c[a>>2]=g;e=g+(d<<4)|0;c[a+8>>2]=e;c[a+4>>2]=e;c[f>>2]=g+(b<<4);return;}function sD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[a>>2]|0;e=a+4|0;f=b+4|0;g=c[e>>2]|0;while(1){if((g|0)==(d|0))break;h=c[f>>2]|0;i=h+-16|0;j=g+-16|0;c[i>>2]=0;k=h+-12|0;c[k>>2]=0;l=h+-8|0;c[l>>2]=0;c[h+-4>>2]=c[g+-4>>2];c[i>>2]=c[j>>2];i=g+-12|0;c[k>>2]=c[i>>2];k=g+-8|0;c[l>>2]=c[k>>2];c[k>>2]=0;c[i>>2]=0;c[j>>2]=0;c[f>>2]=(c[f>>2]|0)+-16;g=j;}g=c[a>>2]|0;c[a>>2]=c[f>>2];c[f>>2]=g;g=b+8|0;d=c[e>>2]|0;c[e>>2]=c[g>>2];c[g>>2]=d;d=a+8|0;a=b+12|0;g=c[d>>2]|0;c[d>>2]=c[a>>2];c[a>>2]=g;c[b>>2]=c[f>>2];return;}function tD(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+4>>2]|0;d=a+8|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;f=e+-16|0;c[d>>2]=f;XA(f);}d=c[a>>2]|0;if(d|0)aB(c[a+16>>2]|0,d,(c[a+12>>2]|0)-d>>4);return;}function uD(a,b){a=a|0;b=b|0;return aD(c[a>>2]|0,b<<4)|0;}function vD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,20091,2);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function wD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=l;l=l+16|0;f=e;g=b+11|0;h=a[g>>0]|0;i=h<<24>>24<0;if(i){j=c[b+4>>2]|0;k=j>>>0<11?j:11;m=j;n=(c[b+8>>2]&2147483647)+-1|0;}else{j=h&255;k=j>>>0<11?j:11;m=j;n=10;}if((k-m+n|0)>>>0<d>>>0)dB(b,n,d-k+m-n|0,m,0,k,d,20094);else{if(i)o=c[b>>2]|0;else o=b;do{if((k|0)!=(d|0)){i=m-k|0;if(!i){p=k;q=0;r=20094;s=d;t=17;}else{if(k>>>0>d>>>0){wC(o,20094,d)|0;wC(o+d|0,o+k|0,i)|0;u=k;v=d;break;}do{if(o>>>0<20094>>>0&(o+m|0)>>>0>20094>>>0){if((o+k|0)>>>0>20094>>>0){wC(o,20094,k)|0;w=0;x=k;y=20094+d|0;z=d-k|0;break;}else{w=k;x=0;y=20094+(d-k)|0;z=d;break;}}else{w=k;x=0;y=20094;z=d;}}while(0);n=o+x|0;wC(n+z|0,n+w|0,i)|0;p=w;q=x;r=y;s=z;t=17;}}else{p=d;q=0;r=20094;s=d;t=17;}}while(0);if((t|0)==17){wC(o+q|0,r,s)|0;u=p;v=s;}s=v-u+m|0;if((a[g>>0]|0)<0)c[b+4>>2]=s;else a[g>>0]=s;a[f>>0]=0;cB(o+s|0,f);}l=e;return;}function xD(a){a=a|0;lb();}function yD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)d=0;else d=Qy(a,b,c)|0;return d|0;}function zD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+16|0;h=g;i=b+11|0;j=a[i>>0]|0;k=j<<24>>24<0;if(k)m=c[b+4>>2]|0;else m=j&255;if(m>>>0<d>>>0)xD(b);if(k)n=(c[b+8>>2]&2147483647)+-1|0;else n=10;if((n-m|0)>>>0>=f>>>0){if(f|0){if(k)o=c[b>>2]|0;else o=b;k=m-d|0;j=o+d|0;if(!k)p=e;else{wC(j+f|0,j,k)|0;p=j>>>0<=e>>>0&(o+m|0)>>>0>e>>>0?e+f|0:e;}wC(j,p,f)|0;p=m+f|0;if((a[i>>0]|0)<0)c[b+4>>2]=p;else a[i>>0]=p;a[h>>0]=0;cB(o+p|0,h);}}else dB(b,n,m+f-n|0,m,d,0,f,e);l=g;return b|0;}function AD(a){a=a|0;return 268435455;}function BD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+12|0;c[f>>2]=0;c[a+16>>2]=e;if(!b)g=0;else g=ED(e,b)|0;c[a>>2]=g;e=g+(d<<4)|0;c[a+8>>2]=e;c[a+4>>2]=e;c[f>>2]=g+(b<<4);return;}function CD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[a>>2]|0;e=a+4|0;f=b+4|0;g=c[e>>2]|0;while(1){if((g|0)==(d|0))break;h=c[f>>2]|0;i=h+-16|0;j=g+-16|0;c[i>>2]=0;k=h+-12|0;c[k>>2]=0;l=h+-8|0;c[l>>2]=0;c[h+-4>>2]=c[g+-4>>2];c[i>>2]=c[j>>2];i=g+-12|0;c[k>>2]=c[i>>2];k=g+-8|0;c[l>>2]=c[k>>2];c[k>>2]=0;c[i>>2]=0;c[j>>2]=0;c[f>>2]=(c[f>>2]|0)+-16;g=j;}g=c[a>>2]|0;c[a>>2]=c[f>>2];c[f>>2]=g;g=b+8|0;d=c[e>>2]|0;c[e>>2]=c[g>>2];c[g>>2]=d;d=a+8|0;a=b+12|0;g=c[d>>2]|0;c[d>>2]=c[a>>2];c[a>>2]=g;c[b>>2]=c[f>>2];return;}function DD(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+4>>2]|0;d=a+8|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;f=e+-16|0;c[d>>2]=f;RA(f);}d=c[a>>2]|0;if(d|0)YA(c[a+16>>2]|0,d,(c[a+12>>2]|0)-d>>4);return;}function ED(a,b){a=a|0;b=b|0;return aD(c[a>>2]|0,b<<4)|0;}function FD(a){a=a|0;var b=0;if(!(XC(a)|0))Wz(a);else{b=$C(a+12|0,1)|0;c[a+4>>2]=b;c[a>>2]=b;c[a+8>>2]=b+24;return;}}function GD(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+16|0;e=d;f=b+11|0;g=a[f>>0]|0;if(g<<24>>24<0){h=c[b>>2]|0;i=c[b+4>>2]|0;}else{h=b;i=g&255;}j=(i|0)!=0&1;k=i-j|0;if(!k)m=g;else{wC(h,h+j|0,k)|0;m=a[f>>0]|0;}if(m<<24>>24<0)c[b+4>>2]=k;else a[f>>0]=k;a[e>>0]=0;cB(h+k|0,e);l=d;return;}function HD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,19867,7);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function ID(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,3);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function JD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,20287,18);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function KD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,8);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function LD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,20280,6);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function MD(a,b){a=a|0;b=b|0;c[a>>2]=b;c[a+4>>2]=c[b>>2];return;}function ND(b,d){b=b|0;d=d|0;c[b>>2]=d;a[b+4>>0]=a[d>>0]|0;return;}function OD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=l;l=l+64|0;g=f+60|0;h=f+48|0;i=f+36|0;j=f+24|0;k=f+12|0;m=f;a:do{if((d-b|0)>2){switch(a[b>>0]|0){case 84:break;case 71:{switch(a[b+1>>0]|0){case 86:{n=b+2|0;o=MB(n,d,e)|0;if((o|0)==(n|0)){p=b;q=60;break a;}n=c[e+4>>2]|0;if((c[e>>2]|0)==(n|0)){r=b;break a;}pB(n+-24|0,0,20505)|0;p=o;q=60;break a;break;}case 82:{o=b+2|0;n=MB(o,d,e)|0;if((n|0)==(o|0)){p=b;q=60;break a;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){r=b;break a;}pB(o+-24|0,0,20525)|0;p=n;q=60;break a;break;}default:{p=b;q=60;break a;}}break;}default:{p=b;q=60;break a;}}n=b+1|0;switch(a[n>>0]|0){case 86:{o=b+2|0;s=mB(o,d,e)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){r=b;break a;}pB(o+-24|0,0,20354)|0;p=s;q=60;break a;break;}case 84:{s=b+2|0;o=mB(s,d,e)|0;if((o|0)==(s|0)){p=b;q=60;break a;}s=c[e+4>>2]|0;if((c[e>>2]|0)==(s|0)){r=b;break a;}pB(s+-24|0,0,20366)|0;p=o;q=60;break a;break;}case 73:{o=b+2|0;s=mB(o,d,e)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){r=b;break a;}pB(o+-24|0,0,20375)|0;p=s;q=60;break a;break;}case 83:{s=b+2|0;o=mB(s,d,e)|0;if((o|0)==(s|0)){p=b;q=60;break a;}s=c[e+4>>2]|0;if((c[e>>2]|0)==(s|0)){r=b;break a;}pB(s+-24|0,0,20389)|0;p=o;q=60;break a;break;}case 99:{o=b+2|0;s=RD(o,d)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=RD(s,d)|0;if((o|0)==(s|0)){p=b;q=60;break a;}s=jB(o,d,e)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){r=b;break a;}pB(o+-24|0,0,20408)|0;p=s;q=60;break a;break;}case 67:{s=b+2|0;o=mB(s,d,e)|0;if((o|0)==(s|0)){p=b;q=60;break a;}s=QB(o,d)|0;if((s|0)==(o|0)|(s|0)==(d|0)){p=b;q=60;break a;}if((a[s>>0]|0)!=95){p=b;q=60;break a;}o=s+1|0;s=mB(o,d,e)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=e+4|0;t=c[o>>2]|0;if(((t-(c[e>>2]|0)|0)/24|0)>>>0<2){r=b;break a;}FB(h,t+-24|0);t=c[o>>2]|0;u=0;while(1){if((u|0)==-1)break;v=u+-1|0;QA(t+(v*24|0)|0);u=v;}c[o>>2]=t+-24;pB(h,0,20435)|0;c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];u=0;while(1){if((u|0)==3)break;c[h+(u<<2)>>2]=0;u=u+1|0;}qB(k,20460)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];u=0;while(1){if((u|0)==3)break;c[k+(u<<2)>>2]=0;u=u+1|0;}FB(m,(c[o>>2]|0)+-24|0);u=a[m+11>>0]|0;t=u<<24>>24<0;TA(j,t?c[m>>2]|0:m,t?c[m+4>>2]|0:u&255)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];u=0;while(1){if((u|0)==3)break;c[j+(u<<2)>>2]=0;u=u+1|0;}u=c[o>>2]|0;t=u+-24|0;v=t+11|0;if((a[v>>0]|0)<0){w=c[t>>2]|0;a[g>>0]=0;cB(w,g);c[u+-20>>2]=0;}else{a[g>>0]=0;cB(t,g);a[v>>0]=0;}TB(t);c[t>>2]=c[i>>2];c[t+4>>2]=c[i+4>>2];c[t+8>>2]=c[i+8>>2];t=0;while(1){if((t|0)==3)break;c[i+(t<<2)>>2]=0;t=t+1|0;}iB(i);iB(m);iB(j);iB(k);iB(h);p=s;q=60;break a;break;}default:{t=RD(n,d)|0;do{if((t|0)!=(n|0)){o=jB(t,d,e)|0;if((o|0)!=(t|0)){v=c[e+4>>2]|0;if((c[e>>2]|0)!=(v|0)){u=v+-24|0;if((a[b+2>>0]|0)==118){pB(u,0,20465)|0;x=0;y=o;break;}else{pB(u,0,20483)|0;x=0;y=o;break;}}else{x=1;y=b;}}else{x=0;y=b;}}else{x=3;y=b;}}while(0);switch(x&3){case 3:case 0:{p=y;q=60;break a;break;}default:{}}if(!x){p=y;q=60;break a;}else{r=b;break a;}}}}else{p=b;q=60;}}while(0);if((q|0)==60)r=p;l=f;return r|0;}function PD(b){b=b|0;a[c[b>>2]>>0]=a[b+4>>0]|0;return;}function QD(a){a=a|0;c[c[a>>2]>>2]=c[a+4>>2];return;}function RD(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a:do{if((b|0)!=(c|0)){switch(a[b>>0]|0){case 104:{d=b+1|0;e=QB(d,c)|0;if((e|0)==(d|0)|(e|0)==(c|0)){f=b;break a;}return((a[e>>0]|0)==95?e+1|0:b)|0;}case 118:break;default:{f=b;break a;}}e=b+1|0;d=QB(e,c)|0;if((!((d|0)==(e|0)|(d|0)==(c|0))?(a[d>>0]|0)==95:0)?(e=d+1|0,d=QB(e,c)|0,!((d|0)==(e|0)|(d|0)==(c|0))):0)f=(a[d>>0]|0)==95?d+1|0:b;else f=b;}else f=b;}while(0);return f|0;}function SD(a,b){a=a|0;b=b|0;c[a>>2]=b;return;}function TD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=c[b>>2];return;}function UD(a,b){a=a|0;b=b|0;c[a>>2]=b;return;}function VD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=c[b>>2];return;}function WD(b){b=b|0;var c=0;if((a[b>>0]|0)==1)c=0;else{a[b>>0]=1;c=1;}return c|0;}function XD(a){a=a|0;return;}function YD(a){a=a|0;return;}function ZD(){var a=0;a=c[5564]|0;c[5564]=a+0;return a|0;}function _D(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;c[f>>2]=c[d>>2];g=rc[c[(c[a>>2]|0)+16>>2]&31](a,b,f)|0;if(g)c[d>>2]=c[f>>2];l=e;return g&1|0;}function $D(a){a=a|0;var b=0;if(!a)b=0;else b=(kA(a,10840,10896,0)|0)!=0&1;return b|0;}function aE(){}function bE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=N(d,c)|0;f=a>>>16;a=(e>>>16)+(N(d,f)|0)|0;d=b>>>16;b=N(d,c)|0;return(y=(a>>>16)+(N(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0;}function cE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=bE(e,a)|0;f=y;return(y=(N(b,a)|0)+(N(d,e)|0)+f|f&0,c|0|0)|0;}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return(y=b+d+(e>>>0<a>>>0|0)>>>0,e|0)|0;}function eE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return(y=e,a-c>>>0|0)|0;}function fE(a){a=a|0;return(a?31-(Q(a^a-1)|0)|0:32)|0;}function gE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;g=a;h=b;i=h;j=d;k=e;l=k;if(!i){m=(f|0)!=0;if(!l){if(m){c[f>>2]=(g>>>0)%(j>>>0);c[f+4>>2]=0;}n=0;o=(g>>>0)/(j>>>0)>>>0;return(y=n,o)|0;}else{if(!m){n=0;o=0;return(y=n,o)|0;}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;o=0;return(y=n,o)|0;}}m=(l|0)==0;do{if(j){if(!m){p=(Q(l|0)|0)-(Q(i|0)|0)|0;if(p>>>0<=31){q=p+1|0;r=31-p|0;s=p-31>>31;t=q;u=g>>>(q>>>0)&s|i<<r;v=i>>>(q>>>0)&s;w=0;x=g<<r;break;}if(!f){n=0;o=0;return(y=n,o)|0;}c[f>>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(y=n,o)|0;}r=j-1|0;if(r&j|0){s=(Q(j|0)|0)+33-(Q(i|0)|0)|0;q=64-s|0;p=32-s|0;z=p>>31;A=s-32|0;B=A>>31;t=s;u=p-1>>31&i>>>(A>>>0)|(i<<p|g>>>(s>>>0))&B;v=B&i>>>(s>>>0);w=g<<q&z;x=(i<<q|g>>>(A>>>0))&z|g<<p&s-33>>31;break;}if(f|0){c[f>>2]=r&g;c[f+4>>2]=0;}if((j|0)==1){n=h|b&0;o=a|0|0;return(y=n,o)|0;}else{r=fE(j|0)|0;n=i>>>(r>>>0)|0;o=i<<32-r|g>>>(r>>>0)|0;return(y=n,o)|0;}}else{if(m){if(f|0){c[f>>2]=(i>>>0)%(j>>>0);c[f+4>>2]=0;}n=0;o=(i>>>0)/(j>>>0)>>>0;return(y=n,o)|0;}if(!g){if(f|0){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(l>>>0);}n=0;o=(i>>>0)/(l>>>0)>>>0;return(y=n,o)|0;}r=l-1|0;if(!(r&l)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=r&i|b&0;}n=0;o=i>>>((fE(l|0)|0)>>>0);return(y=n,o)|0;}r=(Q(l|0)|0)-(Q(i|0)|0)|0;if(r>>>0<=30){s=r+1|0;p=31-r|0;t=s;u=i<<p|g>>>(s>>>0);v=i>>>(s>>>0);w=0;x=g<<p;break;}if(!f){n=0;o=0;return(y=n,o)|0;}c[f>>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(y=n,o)|0;}}while(0);if(!t){C=x;D=w;E=v;F=u;G=0;H=0;}else{b=d|0|0;d=k|e&0;e=dE(b|0,d|0,-1,-1)|0;k=y;h=x;x=w;w=v;v=u;u=t;t=0;do{a=h;h=x>>>31|h<<1;x=t|x<<1;g=v<<1|a>>>31|0;a=v>>>31|w<<1|0;eE(e|0,k|0,g|0,a|0)|0;i=y;l=i>>31|((i|0)<0?-1:0)<<1;t=l&1;v=eE(g|0,a|0,l&b|0,(((i|0)<0?-1:0)>>31|((i|0)<0?-1:0)<<1)&d|0)|0;w=y;u=u-1|0;}while((u|0)!=0);C=h;D=x;E=w;F=v;G=0;H=t;}t=D;D=0;if(f|0){c[f>>2]=F;c[f+4>>2]=E;}n=(t|0)>>>31|(C|D)<<1|(D<<1|t>>>31)&0|G;o=(t<<1|0>>>31)&-2|H;return(y=n,o)|0;}function hE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return gE(a,b,c,d,0)|0;}function iE(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c;}y=0;return b>>>c-32|0;}function jE(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c;}y=a<<c-32;return 0;}function kE(a){a=a|0;return(a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0;}function lE(a,b,c){a=a|0;b=b|0;c=c|0;c=Q(b)|0;if((c|0)==32)c=c+(Q(a)|0)|0;y=0;return c|0;}function mE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return nb(b|0,d|0,e|0)|0;f=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0;}h=g&-4|0;e=h-64|0;while((b|0)<=(e|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0;}while((b|0)<(h|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;}}else{h=g-4|0;while((b|0)<(h|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0;}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;}return f|0;}function nE(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0;}b=e;}else mE(b,c,d)|0;return b|0;}function oE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0;}g=f&-4|0;h=g-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(h|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0;}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0;}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0;}return f-e|0;}function pE(a){a=a|0;var b=0,d=0;b=c[i>>2]|0;d=b+a|0;if((a|0)>0&(d|0)<(b|0)|(d|0)<0){V()|0;Ca(12);return-1;}c[i>>2]=d;if((d|0)>(U()|0)?(T()|0)==0:0){c[i>>2]=b;Ca(12);return-1;}return b|0;}function qE(a){a=a|0;return oc[a&7]()|0;}function rE(a,b){a=a|0;b=b|0;return pc[a&63](b|0)|0;}function sE(a,b,c){a=a|0;b=b|0;c=c|0;return qc[a&63](b|0,c|0)|0;}function tE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return rc[a&31](b|0,c|0,d|0)|0;}function uE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return sc[a&15](b|0,c|0,d|0,e|0)|0;}function vE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return tc[a&7](b|0,c|0,d|0,e|0,f|0)|0;}function wE(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return uc[a&31](b|0,c|0,d|0,e|0,f|0,g|0)|0;}function xE(a){a=a|0;vc[a&3]();}function yE(a,b){a=a|0;b=b|0;wc[a&127](b|0);}function zE(a,b,c){a=a|0;b=b|0;c=c|0;xc[a&31](b|0,c|0);}function AE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yc[a&7](b|0,c|0,d|0);}function BE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;zc[a&7](b|0,c|0,d|0,e|0);}function CE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ac[a&3](b|0,c|0,d|0,e|0,f|0);}function DE(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Bc[a&3](b|0,c|0,d|0,e|0,f|0,g|0);}function EE(){R(0);return 0;}function FE(a){a=a|0;R(1);return 0;}function GE(a,b){a=a|0;b=b|0;R(2);return 0;}function HE(a,b,c){a=a|0;b=b|0;c=c|0;R(3);return 0;}function IE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;R(4);return 0;}function JE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;R(5);return 0;}function KE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;R(6);return 0;}function LE(){R(7);}function ME(a){a=a|0;R(8);}function NE(a,b){a=a|0;b=b|0;R(9);}function OE(a,b,c){a=a|0;b=b|0;c=c|0;R(10);}function PE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;R(11);}function QE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;R(12);}function RE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;R(13);}// EMSCRIPTEN_END_FUNCS\nvar oc=[EE,Ce,Me,Ue,ge,EE,EE,EE];var pc=[FE,fd,ld,nd,td,vd,Bd,Ed,Kd,Md,Sd,Ud,_d,kf,qf,xf,Df,If,Of,Tf,Zf,fg,lg,og,ug,Fg,Lg,Og,Ug,Iy,Tz,qe,ve,Qc,Ae,De,Ke,Ne,Se,Ve,Wc,ee,he,Mc,Oo,Gx,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE];var qc=[GE,kd,sd,Ad,Jd,Rd,Zd,pf,Cf,Nf,Yf,jg,kg,sg,tg,Jg,Kg,Sg,Tg,Ht,pe,Oc,ze,$e,af,Rc,Sc,Uc,Vc,We,Xc,Zc,_c,ke,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE];var rc=[HE,Jy,Ky,Ny,zz,cA,xA,zA,CA,ue,Ee,Fe,cf,Oe,Pe,Tc,Re,Xe,Yc,Ze,le,ce,Py,HE,HE,HE,HE,HE,HE,HE,HE,HE];var sc=[IE,vu,wu,Kv,Lv,Xw,Yw,bf,He,df,rf,Qe,Ye,me,IE,IE];var tc=[JE,Ge,Ie,Je,tn,sn,Km,Jm];var uc=[KE,Xl,Yl,Zl,_l,$l,am,bm,cm,dm,em,fm,gm,hm,im,jm,km,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE];var vc=[LE,Xz,Jc,qA];var wc=[ME,Cd,ed,hd,id,md,pd,qd,ud,xd,yd,Dd,Gd,Hd,Ld,Od,Pd,Td,Wd,Xd,hf,jf,mf,nf,vf,wf,zf,Af,Gf,Hf,Kf,Lf,Rf,Sf,Vf,Wf,dg,eg,hg,ig,ng,qg,rg,Dg,Eg,Hg,Ig,Ng,Qg,Rg,Rz,Sz,_z,$z,aA,bA,lA,wA,yA,BA,DA,ne,re,we,Be,Le,Te,fe,ef,sf,Ff,Qf,rA,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME];var xc=[NE,gd,jd,od,rd,wd,zd,Fd,Id,Nd,Qd,Vd,Yd,lf,of,yf,Bf,Jf,Mf,Uf,Xf,gg,pg,Gg,Pg,It,Kc,Lc,Nc,$d,NE,NE];var yc=[OE,oe,ie,ae,be,OE,OE,OE];var zc=[PE,fA,oA,GA,je,PE,PE,PE];var Ac=[QE,eA,nA,FA];var Bc=[RE,dA,mA,EA];return{__GLOBAL__sub_I_bind_cpp:zy,__GLOBAL__sub_I_zstd_binding_cc:_e,___cxa_can_catch:_D,___cxa_demangle:KA,___cxa_is_pointer_type:$D,___errno_location:My,___getTypeName:By,___muldi3:cE,___udivdi3:hE,_bitshift64Lshr:iE,_bitshift64Shl:jE,_free:Dy,_i64Add:dE,_i64Subtract:eE,_llvm_bswap_i32:kE,_llvm_ctlz_i64:lE,_llvm_cttz_i32:fE,_malloc:Cy,_memcpy:mE,_memmove:nE,_memset:oE,_sbrk:pE,dynCall_i:qE,dynCall_ii:rE,dynCall_iii:sE,dynCall_iiii:tE,dynCall_iiiii:uE,dynCall_iiiiii:vE,dynCall_iiiiiii:wE,dynCall_v:xE,dynCall_vi:yE,dynCall_vii:zE,dynCall_viii:AE,dynCall_viiii:BE,dynCall_viiiii:CE,dynCall_viiiiii:DE,establishStackSpace:Fc,getTempRet0:Ic,runPostSets:aE,setTempRet0:Hc,setThrew:Gc,stackAlloc:Cc,stackRestore:Ec,stackSave:Dc};}(// EMSCRIPTEN_END_ASM\nModule.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module[\"__GLOBAL__sub_I_bind_cpp\"]=asm[\"__GLOBAL__sub_I_bind_cpp\"];var __GLOBAL__sub_I_zstd_binding_cc=Module[\"__GLOBAL__sub_I_zstd_binding_cc\"]=asm[\"__GLOBAL__sub_I_zstd_binding_cc\"];var ___cxa_can_catch=Module[\"___cxa_can_catch\"]=asm[\"___cxa_can_catch\"];var ___cxa_demangle=Module[\"___cxa_demangle\"]=asm[\"___cxa_demangle\"];var ___cxa_is_pointer_type=Module[\"___cxa_is_pointer_type\"]=asm[\"___cxa_is_pointer_type\"];var ___errno_location=Module[\"___errno_location\"]=asm[\"___errno_location\"];var ___getTypeName=Module[\"___getTypeName\"]=asm[\"___getTypeName\"];var ___muldi3=Module[\"___muldi3\"]=asm[\"___muldi3\"];var ___udivdi3=Module[\"___udivdi3\"]=asm[\"___udivdi3\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=asm[\"_llvm_bswap_i32\"];var _llvm_ctlz_i64=Module[\"_llvm_ctlz_i64\"]=asm[\"_llvm_ctlz_i64\"];var _llvm_cttz_i32=Module[\"_llvm_cttz_i32\"]=asm[\"_llvm_cttz_i32\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memmove=Module[\"_memmove\"]=asm[\"_memmove\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var getTempRet0=Module[\"getTempRet0\"]=asm[\"getTempRet0\"];var runPostSets=Module[\"runPostSets\"]=asm[\"runPostSets\"];var setTempRet0=Module[\"setTempRet0\"]=asm[\"setTempRet0\"];var setThrew=Module[\"setThrew\"]=asm[\"setThrew\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var _stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var _stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];var dynCall_i=Module[\"dynCall_i\"]=asm[\"dynCall_i\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_iii=Module[\"dynCall_iii\"]=asm[\"dynCall_iii\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=asm[\"dynCall_iiiiii\"];var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=asm[\"dynCall_iiiiiii\"];var dynCall_v=Module[\"dynCall_v\"]=asm[\"dynCall_v\"];var dynCall_vi=Module[\"dynCall_vi\"]=asm[\"dynCall_vi\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];var dynCall_viii=Module[\"dynCall_viii\"]=asm[\"dynCall_viii\"];var dynCall_viiii=Module[\"dynCall_viiii\"]=asm[\"dynCall_viiii\"];var dynCall_viiiii=Module[\"dynCall_viiiii\"]=asm[\"dynCall_viiiii\"];var dynCall_viiiiii=Module[\"dynCall_viiiiii\"]=asm[\"dynCall_viiiiii\"];Module[\"asm\"]=asm;Module[\"FS\"]=FS;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer);}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module[\"readBinary\"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE);}else{var doBrowserLoad=function doBrowserLoad(){Module[\"readAsync\"](memoryInitializer,applyMemoryInitializer,function(){throw\"could not load memory initializer \"+memoryInitializer;});};addRunDependency(\"memory initializer\");var applyMemoryInitializer=function applyMemoryInitializer(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\");};var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer);}else if(Module[\"memoryInitializerRequest\"]){var useRequest=function useRequest(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer;}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return;}}applyMemoryInitializer(response);};if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0);}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest);}}else{doBrowserLoad();}}}Module[\"then\"]=function(func){if(Module[\"calledRun\"]){func(Module);}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module);};}return Module;};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status;}ExitStatus.prototype=new Error();ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller;};function run(args){args=args||Module[\"arguments\"];if(runDependencies>0){return;}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun();}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\");},1);doRun();},1);}else{doRun();}}Module[\"run\"]=run;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what);}if(what!==undefined){out(what);err(what);what=JSON.stringify(what);}else{what=\"\";}ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()();}}Module[\"noExitRuntime\"]=true;run();return Module;};}();if((typeof exports==='undefined'?'undefined':_typeof(exports))==='object'&&(typeof module==='undefined'?'undefined':_typeof(module))==='object')module.exports=Module;else if(typeof define==='function'&&define['amd'])define([],function(){return Module;});else if((typeof exports==='undefined'?'undefined':_typeof(exports))==='object')exports[\"Module\"]=Module;\n\n}).call(this,require('_process'),require(\"buffer\").Buffer,\"/lib\")\n},{\"_process\":126,\"buffer\":54,\"crypto\":63,\"fs\":9,\"path\":119}],7:[function(require,module,exports){\n'use strict';var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var ArrayBufferHelper=require('./helpers.js').ArrayBufferHelper;var constants=require('./constants.js');var onReady=function onReady(binding){var codec=new binding.ZstdCodec();var withBindingInstance=function withBindingInstance(instance,callback){try{return callback(instance);}finally{instance.delete();}};var withCppVector=function withCppVector(callback){var vector=new binding.VectorU8();return withBindingInstance(vector,callback);};var correctCompressionLevel=function correctCompressionLevel(compression_level){return compression_level||constants.DEFAULT_COMPRESSION_LEVEL;};var compressBoundImpl=function compressBoundImpl(content_size){var rc=codec.compressBound(content_size);return rc>=0?rc:null;};var contentSizeImpl=function contentSizeImpl(src_vec){var rc=codec.contentSize(src_vec);return rc>=0?rc:null;};var ArrayBufferSink=function(){function ArrayBufferSink(initial_size){_classCallCheck(this,ArrayBufferSink);this._buffer=new ArrayBuffer(initial_size);this._array=new Uint8Array(this._buffer);this._offset=0;}_createClass(ArrayBufferSink,[{key:'concat',value:function concat(array){if(array.length+this._offset>this._array.length){this._grow(Math.max(this._array.length,array.length)*2);}this._array.set(array,this._offset);this._offset+=array.length;}},{key:'array',value:function array(){// NOTE: clone buffer to shrink to fit\nvar buffer=ArrayBufferHelper.transfer(this._buffer,this._offset);return new Uint8Array(buffer);}},{key:'_grow',value:function _grow(new_size){this._buffer=ArrayBufferHelper.transfer(this._buffer,new_size);this._array=new Uint8Array(this._buffer);}}]);return ArrayBufferSink;}();var Generic=function(){function Generic(){_classCallCheck(this,Generic);}_createClass(Generic,[{key:'compressBound',value:function compressBound(content_bytes){return compressBoundImpl(content_bytes.length);}},{key:'contentSize',value:function contentSize(compressed_bytes){return withCppVector(function(src){binding.cloneToVector(src,compressed_bytes);return contentSizeImpl(src);});}}]);return Generic;}();var Simple=function(){function Simple(){_classCallCheck(this,Simple);}_createClass(Simple,[{key:'compress',value:function compress(content_bytes,compression_level){// use basic-api `compress`, to embed `frameContentSize`.\nvar compressBound=compressBoundImpl(content_bytes.length);if(!compressBound)return null;compression_level=correctCompressionLevel(compression_level);return withCppVector(function(src){return withCppVector(function(dest){binding.cloneToVector(src,content_bytes);dest.resize(compressBound,0);var rc=codec.compress(dest,src,compression_level);if(rc<0)return null;// `rc` is compressed size\ndest.resize(rc,0);return binding.cloneAsTypedArray(dest);});});}},{key:'decompress',value:function decompress(compressed_bytes){// use streaming-api, to support data without `frameContentSize`.\nreturn withCppVector(function(src){return withCppVector(function(dest){binding.cloneToVector(src,compressed_bytes);var contentSize=contentSizeImpl(src);if(!contentSize)return null;dest.resize(contentSize,0);var rc=codec.decompress(dest,src);if(rc<0||rc!=contentSize)return null;// `rc` is compressed size\nreturn binding.cloneAsTypedArray(dest);});});}},{key:'compressUsingDict',value:function compressUsingDict(content_bytes,cdict){// use basic-api `compress`, to embed `frameContentSize`.\nvar compressBound=compressBoundImpl(content_bytes.length);if(!compressBound)return null;return withCppVector(function(src){return withCppVector(function(dest){binding.cloneToVector(src,content_bytes);dest.resize(compressBound,0);var rc=codec.compressUsingDict(dest,src,cdict.get());if(rc<0)return null;// `rc` is original content size\ndest.resize(rc,0);return binding.cloneAsTypedArray(dest);});});}},{key:'decompressUsingDict',value:function decompressUsingDict(compressed_bytes,ddict){// use streaming-api, to support data without `frameContentSize`.\nreturn withCppVector(function(src){return withCppVector(function(dest){binding.cloneToVector(src,compressed_bytes);var contentSize=contentSizeImpl(src);if(!contentSize)return null;dest.resize(contentSize,0);var rc=codec.decompressUsingDict(dest,src,ddict.get());if(rc<0||rc!=contentSize)return null;// `rc` is compressed size\nreturn binding.cloneAsTypedArray(dest);});});}}]);return Simple;}();var Streaming=function(){function Streaming(){_classCallCheck(this,Streaming);}_createClass(Streaming,[{key:'compress',value:function compress(content_bytes,compression_level){return withBindingInstance(new binding.ZstdCompressStreamBinding(),function(stream){var initial_size=compressBoundImpl(content_bytes.length);var sink=new ArrayBufferSink(initial_size);var callback=function callback(compressed){sink.concat(compressed);};var level=correctCompressionLevel(compression_level);if(!stream.begin(level))return null;if(!stream.transform(content_bytes,callback))return null;if(!stream.end(callback))return null;return sink.array();});}},{key:'compressChunks',value:function compressChunks(chunks,size_hint,compression_level){return withBindingInstance(new binding.ZstdCompressStreamBinding(),function(stream){var initial_size=size_hint||constants.STREAMING_DEFAULT_BUFFER_SIZE;var sink=new ArrayBufferSink(initial_size);var callback=function callback(compressed){sink.concat(compressed);};var level=correctCompressionLevel(compression_level);if(!stream.begin(level))return null;var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=chunks[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var chunk=_step.value;if(!stream.transform(chunk,callback))return null;}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}if(!stream.end(callback))return null;return sink.array();});}},{key:'compressUsingDict',value:function compressUsingDict(content_bytes,cdict){return withBindingInstance(new binding.ZstdCompressStreamBinding(),function(stream){var initial_size=compressBoundImpl(content_bytes.length);var sink=new ArrayBufferSink(initial_size);var callback=function callback(compressed){sink.concat(compressed);};if(!stream.beginUsingDict(cdict.get()))return null;if(!stream.transform(content_bytes,callback))return null;if(!stream.end(callback))return null;return sink.array();});}},{key:'compressChunksUsingDict',value:function compressChunksUsingDict(chunks,size_hint,cdict){return withBindingInstance(new binding.ZstdCompressStreamBinding(),function(stream){var initial_size=size_hint||constants.STREAMING_DEFAULT_BUFFER_SIZE;var sink=new ArrayBufferSink(initial_size);var callback=function callback(compressed){sink.concat(compressed);};if(!stream.beginUsingDict(cdict.get()))return null;var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=chunks[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var chunk=_step2.value;if(!stream.transform(chunk,callback))return null;}}catch(err){_didIteratorError2=true;_iteratorError2=err;}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return();}}finally{if(_didIteratorError2){throw _iteratorError2;}}}if(!stream.end(callback))return null;return sink.array();});}},{key:'decompress',value:function decompress(compressed_bytes,size_hint){var _this=this;return withBindingInstance(new binding.ZstdDecompressStreamBinding(),function(stream){var initial_size=size_hint||_this._estimateContentSize(compressed_bytes);var sink=new ArrayBufferSink(initial_size);var callback=function callback(decompressed){sink.concat(decompressed);};if(!stream.begin())return null;if(!stream.transform(compressed_bytes,callback))return null;if(!stream.end(callback))return null;return sink.array();});}},{key:'decompressChunks',value:function decompressChunks(chunks,size_hint){return withBindingInstance(new binding.ZstdDecompressStreamBinding(),function(stream){var initial_size=size_hint||constants.STREAMING_DEFAULT_BUFFER_SIZE;var sink=new ArrayBufferSink(initial_size);var callback=function callback(decompressed){sink.concat(decompressed);};if(!stream.begin())return null;var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=chunks[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var chunk=_step3.value;if(!stream.transform(chunk,callback))return null;}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3;}}}if(!stream.end(callback))return null;return sink.array();});}},{key:'decompressUsingDict',value:function decompressUsingDict(compressed_bytes,size_hint,ddict){var _this2=this;return withBindingInstance(new binding.ZstdDecompressStreamBinding(),function(stream){var initial_size=size_hint||_this2._estimateContentSize(compressed_bytes);var sink=new ArrayBufferSink(initial_size);var callback=function callback(decompressed){sink.concat(decompressed);};if(!stream.beginUsingDict(ddict.get()))return null;if(!stream.transform(compressed_bytes,callback))return null;if(!stream.end(callback))return null;return sink.array();});}},{key:'decompressChunksUsingDict',value:function decompressChunksUsingDict(chunks,size_hint,ddict){return withBindingInstance(new binding.ZstdDecompressStreamBinding(),function(stream){var initial_size=size_hint||constants.STREAMING_DEFAULT_BUFFER_SIZE;var sink=new ArrayBufferSink(initial_size);var callback=function callback(decompressed){sink.concat(decompressed);};if(!stream.beginUsingDict(ddict.get()))return null;var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=chunks[Symbol.iterator](),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var chunk=_step4.value;if(!stream.transform(chunk,callback))return null;}}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally{if(_didIteratorError4){throw _iteratorError4;}}}if(!stream.end(callback))return null;return sink.array();});}},{key:'_estimateContentSize',value:function _estimateContentSize(compressed_bytes){// REF: https://code.facebook.com/posts/1658392934479273/smaller-and-faster-data-compression-with-zstandard/\n// with lzbench, ratio=3.11 .. 3.14. round up to integer\nreturn compressed_bytes.length*4;}}]);return Streaming;}();var ZstdCompressionDict=function(){function ZstdCompressionDict(dict_bytes,compression_level){_classCallCheck(this,ZstdCompressionDict);this.binding=binding.createCompressionDict(dict_bytes,compression_level);}_createClass(ZstdCompressionDict,[{key:'get',value:function get(){return this.binding;}},{key:'close',value:function close(){if(this.binding){this.binding.delete();}}},{key:'delete',value:function _delete(){this.close();}}]);return ZstdCompressionDict;}();var ZstdDecompressionDict=function(){function ZstdDecompressionDict(dict_bytes){_classCallCheck(this,ZstdDecompressionDict);this.binding=new binding.createDecompressionDict(dict_bytes);}_createClass(ZstdDecompressionDict,[{key:'get',value:function get(){return this.binding;}},{key:'close',value:function close(){if(this.binding){this.binding.delete();}}},{key:'delete',value:function _delete(){this.close();}}]);return ZstdDecompressionDict;}();var zstd={};zstd.Generic=Generic;zstd.Simple=Simple;zstd.Streaming=Streaming;zstd.Dict={};zstd.Dict.Compress=ZstdCompressionDict;zstd.Dict.Decompress=ZstdDecompressionDict;return zstd;};exports.run=function(f){return require('./module.js').run(function(binding){var zstd=onReady(binding);f(zstd);});};\n\n},{\"./constants.js\":2,\"./helpers.js\":3,\"./module.js\":4}],8:[function(require,module,exports){\n'use strict';var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&(typeof call===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;}var stream=require('stream');var binding=require('./module.js').Binding;var constants=require('./constants.js');var helpers=require('./helpers.js');var getClassName=helpers.getClassName;var toTypedArray=helpers.toTypedArray;var fromTypedArrayToBuffer=helpers.fromTypedArrayToBuffer;var onReady=function onReady(binding){var ZstdCompressTransform=function(_stream$Transform){_inherits(ZstdCompressTransform,_stream$Transform);function ZstdCompressTransform(compression_level,string_decoder,option){_classCallCheck(this,ZstdCompressTransform);var _this=_possibleConstructorReturn(this,(ZstdCompressTransform.__proto__||Object.getPrototypeOf(ZstdCompressTransform)).call(this,option||{}));_this.string_decoder=string_decoder;_this.binding=new binding.ZstdCompressStreamBinding();_this.binding.begin(compression_level||constants.DEFAULT_COMPRESSION_LEVEL);_this.callback=function(compressed){_this.push(fromTypedArrayToBuffer(compressed),'buffer');};return _this;}_createClass(ZstdCompressTransform,[{key:'_transform',value:function _transform(chunk,encoding,callback){var chunkBytes=toTypedArray(chunk,encoding,this.string_decoder);if(!chunkBytes){var type_name=getClassName(chunk)||(typeof chunk==='undefined'?'undefined':_typeof(chunk));callback(new Error('unsupported chunk type: '+type_name));return;}if(this.binding.transform(chunkBytes,this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _transform'));}}},{key:'_flush',value:function _flush(callback){if(this.binding.flush(this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _flush'));}}},{key:'_final',value:function _final(callback){if(this.binding.end(this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _final'));}}}]);return ZstdCompressTransform;}(stream.Transform);var ZstdDecompressTransform=function(_stream$Transform2){_inherits(ZstdDecompressTransform,_stream$Transform2);function ZstdDecompressTransform(option){_classCallCheck(this,ZstdDecompressTransform);var _this2=_possibleConstructorReturn(this,(ZstdDecompressTransform.__proto__||Object.getPrototypeOf(ZstdDecompressTransform)).call(this,option||{}));_this2.binding=new binding.ZstdDecompressStreamBinding();_this2.binding.begin();_this2.callback=function(decompressed){_this2.push(fromTypedArrayToBuffer(decompressed),'buffer');};return _this2;}_createClass(ZstdDecompressTransform,[{key:'_transform',value:function _transform(chunk,encoding,callback){var chunkBytes=toTypedArray(chunk,encoding,this.string_decoder);if(!chunkBytes){var type_name=getClassName(chunk)||(typeof chunk==='undefined'?'undefined':_typeof(chunk));callback(new Error('unsupported chunk type: '+type_name));return;}if(this.binding.transform(chunk,this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _transform'));}}},{key:'_flush',value:function _flush(callback){if(this.binding.flush(this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _flush'));}}},{key:'_final',value:function _final(callback){if(this.binding.end(this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _final'));}}}]);return ZstdDecompressTransform;}(stream.Transform);var streams={};streams.ZstdCompressTransform=ZstdCompressTransform;streams.ZstdDecompressTransform=ZstdDecompressTransform;return streams;};exports=function exports(f){return require('./module.js').then(function(binding){var streams=onReady(binding);f(streams);});};\n\n},{\"./constants.js\":2,\"./helpers.js\":3,\"./module.js\":4,\"stream\":157}],9:[function(require,module,exports){\n\n},{}],10:[function(require,module,exports){\nvar asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n\n},{\"./asn1/api\":11,\"./asn1/base\":13,\"./asn1/constants\":17,\"./asn1/decoders\":19,\"./asn1/encoders\":22,\"bn.js\":25}],11:[function(require,module,exports){\nvar asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n  var named;\n  try {\n    named = require('vm').runInThisContext(\n      '(function ' + this.name + '(entity) {\\n' +\n      '  this._initNamed(entity);\\n' +\n      '})'\n    );\n  } catch (e) {\n    named = function (entity) {\n      this._initNamed(entity);\n    };\n  }\n  inherits(named, base);\n  named.prototype._initNamed = function initnamed(entity) {\n    base.call(this, entity);\n  };\n\n  return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n\n},{\"../asn1\":10,\"inherits\":108,\"vm\":160}],12:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  var res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  var res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!(item instanceof EncoderBuffer))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = new Buffer(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n\n},{\"../base\":13,\"buffer\":54,\"inherits\":108}],13:[function(require,module,exports){\nvar base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n\n},{\"./buffer\":12,\"./node\":14,\"./reporter\":15}],14:[function(require,module,exports){\nvar Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n  var state = {};\n  this._baseState = state;\n\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  var state = this._baseState;\n  var cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  var res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  var state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      var clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  var state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  var state = this._baseState;\n\n  // Filter children and args\n  var children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      var res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        var value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    var state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    var state = this._baseState;\n    var args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  var state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  var state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  var state = this._baseState;\n  var args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  var state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  var state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  var state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  var result = state['default'];\n  var present = true;\n\n  var prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    var tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      var save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  var prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      var explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    var start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      if (state.any)\n        var save = input.save();\n      var body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any)\n      result = result;\n    else if (state.choice === null)\n      result = this._decodeGeneric(state.tag, input, options);\n    else\n      result = this._decodeChoice(input, options);\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      var data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n          ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  var state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n        ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  var state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  var state = this._baseState;\n  var result = null;\n  var match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    var save = input.save();\n    var node = state.choice[key];\n    try {\n      var value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  var state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  var result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  var result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default']\n    else\n      return;\n  }\n\n  // Encode children first\n  var content = null;\n  var primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      var prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      var res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      var child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        var state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  var result;\n  if (!state.any && state.choice === null) {\n    var tag = state.implicit !== null ? state.implicit : state.tag;\n    var cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be ommited only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  var state = this._baseState;\n\n  var node = state.choice[data.type];\n  if (!node) {\n    assert(\n        false,\n        data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  var state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n\n},{\"../base\":13,\"minimalistic-assert\":112}],15:[function(require,module,exports){\nvar inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  var state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  var state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  var state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  var state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  var state = this._reporterState;\n\n  var prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  var state = this._reporterState;\n\n  var now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  var err;\n  var state = this._reporterState;\n\n  var inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  var state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n\n},{\"inherits\":108}],16:[function(require,module,exports){\nvar constants = require('../constants');\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n\n},{\"../constants\":17}],17:[function(require,module,exports){\nvar constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  var res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    var value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n\n},{\"./der\":16}],18:[function(require,module,exports){\nvar inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!(data instanceof base.DecoderBuffer))\n    data = new base.DecoderBuffer(data, options);\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  var state = buffer.save();\n  var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  var decodedTag = derDecodeTag(buffer,\n                                'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  var len = derDecodeLen(buffer,\n                         decodedTag.primitive,\n                         'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  var state = buffer.save();\n  var res = this._skipUntilEnd(\n      buffer,\n      'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  while (true) {\n    var tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    var len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    var res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len)\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n                                                    options) {\n  var result = [];\n  while (!buffer.isEmpty()) {\n    var possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    var res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    var unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    var raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    var str = '';\n    for (var i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    var numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    var printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  var result;\n  var identifiers = [];\n  var ident = 0;\n  while (!buffer.isEmpty()) {\n    var subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  var first = (identifiers[0] / 40) | 0;\n  var second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    var tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  var str = buffer.raw().toString();\n  if (tag === 'gentime') {\n    var year = str.slice(0, 4) | 0;\n    var mon = str.slice(4, 6) | 0;\n    var day = str.slice(6, 8) | 0;\n    var hour = str.slice(8, 10) | 0;\n    var min = str.slice(10, 12) | 0;\n    var sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    var year = str.slice(0, 2) | 0;\n    var mon = str.slice(2, 4) | 0;\n    var day = str.slice(4, 6) | 0;\n    var hour = str.slice(6, 8) | 0;\n    var min = str.slice(8, 10) | 0;\n    var sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  var res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  var raw = buffer.raw();\n  var res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  var tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  var cls = der.tagClass[tag >> 6];\n  var primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    var oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  var tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  var len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  var num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (var i = 0; i < num; i++) {\n    len <<= 8;\n    var j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n\n},{\"../../asn1\":10,\"inherits\":108}],19:[function(require,module,exports){\nvar decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n\n},{\"./der\":18,\"./pem\":20}],20:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  var lines = data.toString().split(/[\\r\\n]+/g);\n\n  var label = options.label.toUpperCase();\n\n  var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  var start = -1;\n  var end = -1;\n  for (var i = 0; i < lines.length; i++) {\n    var match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  var base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n  var input = new Buffer(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n\n},{\"./der\":18,\"buffer\":54,\"inherits\":108}],21:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n                                                              primitive,\n                                                              cls,\n                                                              content) {\n  var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    var header = new Buffer(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  var lenOctets = 1;\n  for (var i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  var header = new Buffer(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    var buf = new Buffer(str.length * 2);\n    for (var i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s\\.]+/g);\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  var size = 0;\n  for (var i = 0; i < id.length; i++) {\n    var ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  var objid = new Buffer(size);\n  var offset = objid.length - 1;\n  for (var i = id.length - 1; i >= 0; i--) {\n    var ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  var str;\n  var date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    var numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = new Buffer(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    var size = num.length;\n    if (num.length === 0)\n      size++;\n\n    var out = new Buffer(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  var size = 1;\n  for (var i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  var out = new Array(size);\n  for (var i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  var state = this._baseState;\n  var i;\n  if (state['default'] === null)\n    return false;\n\n  var data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  var res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n\n},{\"../../asn1\":10,\"buffer\":54,\"inherits\":108}],22:[function(require,module,exports){\nvar encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n\n},{\"./der\":21,\"./pem\":23}],23:[function(require,module,exports){\nvar inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  var buf = DEREncoder.prototype.encode.call(this, data);\n\n  var p = buf.toString('base64');\n  var out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (var i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n\n},{\"./der\":21,\"inherits\":108}],24:[function(require,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n  var len = b64.length\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n  // base64 is 4/3 + up to two characters of the original data\n  return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n  var i, l, tmp, placeHolders, arr\n  var len = b64.length\n  placeHolders = placeHoldersCount(b64)\n\n  arr = new Arr((len * 3 / 4) - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0; i < l; i += 4) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n\n},{}],25:[function(require,module,exports){\n(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    Buffer = require('buffer').Buffer;\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n    }\n\n    if (base === 16) {\n      this._parseHex(number, start);\n    } else {\n      this._parseBase(number, base, start);\n    }\n\n    if (number[0] === '-') {\n      this.negative = 1;\n    }\n\n    this.strip();\n\n    if (endian !== 'le') return;\n\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex (str, start, end) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r <<= 4;\n\n      // 'a' - 'f'\n      if (c >= 49 && c <= 54) {\n        r |= c - 49 + 0xa;\n\n      // 'A' - 'F'\n      } else if (c >= 17 && c <= 22) {\n        r |= c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r |= c & 0xf;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    // Scan 24-bit chunks and add them to the number\n    var off = 0;\n    for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n      w = parseHex(number, i, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n      off += 24;\n      if (off >= 26) {\n        off -= 26;\n        j++;\n      }\n    }\n    if (i + 6 !== start) {\n      w = parseHex(number, start, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n    }\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      r.strip();\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n\n},{\"buffer\":27}],26:[function(require,module,exports){\nvar r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n\n},{\"crypto\":27}],27:[function(require,module,exports){\narguments[4][9][0].apply(exports,arguments)\n},{\"dup\":9}],28:[function(require,module,exports){\n(function (Buffer){\n// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar uint_max = Math.pow(2, 32)\nfunction fixup_uint32 (x) {\n  var ret, x_pos\n  ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x\n  return ret\n}\nfunction scrub_vec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n  return false\n}\n\nfunction Global () {\n  this.SBOX = []\n  this.INV_SBOX = []\n  this.SUB_MIX = [[], [], [], []]\n  this.INV_SUB_MIX = [[], [], [], []]\n  this.init()\n  this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\n}\n\nGlobal.prototype.init = function () {\n  var d, i, sx, t, x, x2, x4, x8, xi, _i\n  d = (function () {\n    var _i, _results\n    _results = []\n    for (i = _i = 0; _i < 256; i = ++_i) {\n      if (i < 128) {\n        _results.push(i << 1)\n      } else {\n        _results.push((i << 1) ^ 0x11b)\n      }\n    }\n    return _results\n  })()\n  x = 0\n  xi = 0\n  for (i = _i = 0; _i < 256; i = ++_i) {\n    sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    this.SBOX[x] = sx\n    this.INV_SBOX[sx] = x\n    x2 = d[x]\n    x4 = d[x2]\n    x8 = d[x4]\n    t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    this.SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    this.SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    this.SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    this.SUB_MIX[3][x] = t\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    this.INV_SUB_MIX[3][sx] = t\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n  return true\n}\n\nvar G = new Global()\n\nAES.blockSize = 4 * 4\n\nAES.prototype.blockSize = AES.blockSize\n\nAES.keySize = 256 / 8\n\nAES.prototype.keySize = AES.keySize\n\nfunction bufferToArray (buf) {\n  var len = buf.length / 4\n  var out = new Array(len)\n  var i = -1\n  while (++i < len) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n  return out\n}\nfunction AES (key) {\n  this._key = bufferToArray(key)\n  this._doReset()\n}\n\nAES.prototype._doReset = function () {\n  var invKsRow, keySize, keyWords, ksRow, ksRows, t\n  keyWords = this._key\n  keySize = keyWords.length\n  this._nRounds = keySize + 6\n  ksRows = (this._nRounds + 1) * 4\n  this._keySchedule = []\n  for (ksRow = 0; ksRow < ksRows; ksRow++) {\n    this._keySchedule[ksRow] = ksRow < keySize ? keyWords[ksRow] : (t = this._keySchedule[ksRow - 1], (ksRow % keySize) === 0 ? (t = (t << 8) | (t >>> 24), t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff], t ^= G.RCON[(ksRow / keySize) | 0] << 24) : keySize > 6 && ksRow % keySize === 4 ? t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff] : void 0, this._keySchedule[ksRow - keySize] ^ t)\n  }\n  this._invKeySchedule = []\n  for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n    ksRow = ksRows - invKsRow\n    t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)]\n    this._invKeySchedule[invKsRow] = invKsRow < 4 || ksRow <= 4 ? t : G.INV_SUB_MIX[0][G.SBOX[t >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(t >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(t >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[t & 0xff]]\n  }\n  return true\n}\n\nAES.prototype.encryptBlock = function (M) {\n  M = bufferToArray(new Buffer(M))\n  var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX)\n  var buf = new Buffer(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = bufferToArray(new Buffer(M))\n  var temp = [M[3], M[1]]\n  M[1] = temp[0]\n  M[3] = temp[1]\n  var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX)\n  var buf = new Buffer(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrub_vec(this._keySchedule)\n  scrub_vec(this._invKeySchedule)\n  scrub_vec(this._key)\n}\n\nAES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) {\n  var ksRow, s0, s1, s2, s3, t0, t1, t2, t3\n\n  s0 = M[0] ^ keySchedule[0]\n  s1 = M[1] ^ keySchedule[1]\n  s2 = M[2] ^ keySchedule[2]\n  s3 = M[3] ^ keySchedule[3]\n  ksRow = 4\n  for (var round = 1; round < this._nRounds; round++) {\n    t0 = SUB_MIX[0][s0 >>> 24] ^ SUB_MIX[1][(s1 >>> 16) & 0xff] ^ SUB_MIX[2][(s2 >>> 8) & 0xff] ^ SUB_MIX[3][s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX[0][s1 >>> 24] ^ SUB_MIX[1][(s2 >>> 16) & 0xff] ^ SUB_MIX[2][(s3 >>> 8) & 0xff] ^ SUB_MIX[3][s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX[0][s2 >>> 24] ^ SUB_MIX[1][(s3 >>> 16) & 0xff] ^ SUB_MIX[2][(s0 >>> 8) & 0xff] ^ SUB_MIX[3][s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX[0][s3 >>> 24] ^ SUB_MIX[1][(s0 >>> 16) & 0xff] ^ SUB_MIX[2][(s1 >>> 8) & 0xff] ^ SUB_MIX[3][s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  return [\n    fixup_uint32(t0),\n    fixup_uint32(t1),\n    fixup_uint32(t2),\n    fixup_uint32(t3)\n  ]\n}\n\nexports.AES = AES\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],29:[function(require,module,exports){\n(function (Buffer){\nvar aes = require('./aes')\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\ninherits(StreamCipher, Transform)\nmodule.exports = StreamCipher\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  if (!(this instanceof StreamCipher)) {\n    return new StreamCipher(mode, key, iv)\n  }\n  Transform.call(this)\n  this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])])\n  iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])])\n  this._cipher = new aes.AES(key)\n  this._prev = new Buffer(iv.length)\n  this._cache = new Buffer('')\n  this._secCache = new Buffer('')\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  iv.copy(this._prev)\n  this._mode = mode\n  var h = new Buffer(4)\n  h.fill(0)\n  this._ghash = new GHASH(this._cipher.encryptBlock(h))\n  this._authTag = null\n  this._called = false\n}\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = new Buffer(rump)\n      rump.fill(0)\n      this._ghash.update(rump)\n    }\n  }\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) {\n    throw new Error('Unsupported state or unable to authenticate data')\n  }\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt) {\n    if (xorTest(tag, this._authTag)) {\n      throw new Error('Unsupported state or unable to authenticate data')\n    }\n  } else {\n    this._authTag = tag\n  }\n  this._cipher.scrub()\n}\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (!this._decrypt && Buffer.isBuffer(this._authTag)) {\n    return this._authTag\n  } else {\n    throw new Error('Attempting to get auth tag in unsupported state')\n  }\n}\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (this._decrypt) {\n    this._authTag = tag\n  } else {\n    throw new Error('Attempting to set auth tag in unsupported state')\n  }\n}\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (!this._called) {\n    this._ghash.update(buf)\n    this._alen += buf.length\n  } else {\n    throw new Error('Attempting to set AAD in unsupported state')\n  }\n}\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) {\n    out++\n  }\n  var len = Math.min(a.length, b.length)\n  var i = -1\n  while (++i < len) {\n    out += (a[i] ^ b[i])\n  }\n  return out\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aes\":28,\"./ghash\":33,\"buffer\":54,\"buffer-xor\":53,\"cipher-base\":55,\"inherits\":108}],30:[function(require,module,exports){\nvar ciphers = require('./encrypter')\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nvar deciphers = require('./decrypter')\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nvar modes = require('./modes')\nfunction getCiphers () {\n  return Object.keys(modes)\n}\nexports.listCiphers = exports.getCiphers = getCiphers\n\n},{\"./decrypter\":31,\"./encrypter\":32,\"./modes\":34}],31:[function(require,module,exports){\n(function (Buffer){\nvar aes = require('./aes')\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar modes = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar AuthCipher = require('./authCipher')\nvar ebtk = require('evp_bytestokey')\n\ninherits(Decipher, Transform)\nfunction Decipher (mode, key, iv) {\n  if (!(this instanceof Decipher)) {\n    return new Decipher(mode, key, iv)\n  }\n  Transform.call(this)\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = new Buffer(iv.length)\n  iv.copy(this._prev)\n  this._mode = mode\n  this._autopadding = true\n}\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\nfunction Splitter () {\n  if (!(this instanceof Splitter)) {\n    return new Splitter()\n  }\n  this.cache = new Buffer('')\n}\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n  return null\n}\nSplitter.prototype.flush = function () {\n  if (this.cache.length) {\n    return this.cache\n  }\n}\nfunction unpad (last) {\n  var padded = last[15]\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) {\n    return\n  }\n  return last.slice(0, 16 - padded)\n}\n\nvar modelist = {\n  ECB: require('./modes/ecb'),\n  CBC: require('./modes/cbc'),\n  CFB: require('./modes/cfb'),\n  CFB8: require('./modes/cfb8'),\n  CFB1: require('./modes/cfb1'),\n  OFB: require('./modes/ofb'),\n  CTR: require('./modes/ctr'),\n  GCM: require('./modes/ctr')\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = modes[suite.toLowerCase()]\n  if (!config) {\n    throw new TypeError('invalid suite type')\n  }\n  if (typeof iv === 'string') {\n    iv = new Buffer(iv)\n  }\n  if (typeof password === 'string') {\n    password = new Buffer(password)\n  }\n  if (password.length !== config.key / 8) {\n    throw new TypeError('invalid key length ' + password.length)\n  }\n  if (iv.length !== config.iv) {\n    throw new TypeError('invalid iv length ' + iv.length)\n  }\n  if (config.type === 'stream') {\n    return new StreamCipher(modelist[config.mode], password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(modelist[config.mode], password, iv, true)\n  }\n  return new Decipher(modelist[config.mode], password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = modes[suite.toLowerCase()]\n  if (!config) {\n    throw new TypeError('invalid suite type')\n  }\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aes\":28,\"./authCipher\":29,\"./modes\":34,\"./modes/cbc\":35,\"./modes/cfb\":36,\"./modes/cfb1\":37,\"./modes/cfb8\":38,\"./modes/ctr\":39,\"./modes/ecb\":40,\"./modes/ofb\":41,\"./streamCipher\":42,\"buffer\":54,\"cipher-base\":55,\"evp_bytestokey\":91,\"inherits\":108}],32:[function(require,module,exports){\n(function (Buffer){\nvar aes = require('./aes')\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar modes = require('./modes')\nvar ebtk = require('evp_bytestokey')\nvar StreamCipher = require('./streamCipher')\nvar AuthCipher = require('./authCipher')\ninherits(Cipher, Transform)\nfunction Cipher (mode, key, iv) {\n  if (!(this instanceof Cipher)) {\n    return new Cipher(mode, key, iv)\n  }\n  Transform.call(this)\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = new Buffer(iv.length)\n  iv.copy(this._prev)\n  this._mode = mode\n  this._autopadding = true\n}\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  } else if (chunk.toString('hex') !== '10101010101010101010101010101010') {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  if (!(this instanceof Splitter)) {\n    return new Splitter()\n  }\n  this.cache = new Buffer('')\n}\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = new Buffer(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n  var out = Buffer.concat([this.cache, padBuff])\n  return out\n}\nvar modelist = {\n  ECB: require('./modes/ecb'),\n  CBC: require('./modes/cbc'),\n  CFB: require('./modes/cfb'),\n  CFB8: require('./modes/cfb8'),\n  CFB1: require('./modes/cfb1'),\n  OFB: require('./modes/ofb'),\n  CTR: require('./modes/ctr'),\n  GCM: require('./modes/ctr')\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = modes[suite.toLowerCase()]\n  if (!config) {\n    throw new TypeError('invalid suite type')\n  }\n  if (typeof iv === 'string') {\n    iv = new Buffer(iv)\n  }\n  if (typeof password === 'string') {\n    password = new Buffer(password)\n  }\n  if (password.length !== config.key / 8) {\n    throw new TypeError('invalid key length ' + password.length)\n  }\n  if (iv.length !== config.iv) {\n    throw new TypeError('invalid iv length ' + iv.length)\n  }\n  if (config.type === 'stream') {\n    return new StreamCipher(modelist[config.mode], password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(modelist[config.mode], password, iv)\n  }\n  return new Cipher(modelist[config.mode], password, iv)\n}\nfunction createCipher (suite, password) {\n  var config = modes[suite.toLowerCase()]\n  if (!config) {\n    throw new TypeError('invalid suite type')\n  }\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aes\":28,\"./authCipher\":29,\"./modes\":34,\"./modes/cbc\":35,\"./modes/cfb\":36,\"./modes/cfb1\":37,\"./modes/cfb8\":38,\"./modes/ctr\":39,\"./modes/ecb\":40,\"./modes/ofb\":41,\"./streamCipher\":42,\"buffer\":54,\"cipher-base\":55,\"evp_bytestokey\":91,\"inherits\":108}],33:[function(require,module,exports){\n(function (Buffer){\nvar zeros = new Buffer(16)\nzeros.fill(0)\nmodule.exports = GHASH\nfunction GHASH (key) {\n  this.h = key\n  this.state = new Buffer(16)\n  this.state.fill(0)\n  this.cache = new Buffer('')\n}\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsb_Vi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi = xor(Zi, Vi)\n    }\n\n    // Store the value of LSB(V_i)\n    lsb_Vi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsb_Vi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, zeros], 16))\n  }\n  this.ghash(fromArray([\n    0, abl,\n    0, bl\n  ]))\n  return this.state\n}\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\nfunction fromArray (out) {\n  out = out.map(fixup_uint32)\n  var buf = new Buffer(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\nvar uint_max = Math.pow(2, 32)\nfunction fixup_uint32 (x) {\n  var ret, x_pos\n  ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x\n  return ret\n}\nfunction xor (a, b) {\n  return [\n    a[0] ^ b[0],\n    a[1] ^ b[1],\n    a[2] ^ b[2],\n    a[3] ^ b[3]\n  ]\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],34:[function(require,module,exports){\nexports['aes-128-ecb'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 0,\n  mode: 'ECB',\n  type: 'block'\n}\nexports['aes-192-ecb'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 0,\n  mode: 'ECB',\n  type: 'block'\n}\nexports['aes-256-ecb'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 0,\n  mode: 'ECB',\n  type: 'block'\n}\nexports['aes-128-cbc'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CBC',\n  type: 'block'\n}\nexports['aes-192-cbc'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CBC',\n  type: 'block'\n}\nexports['aes-256-cbc'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CBC',\n  type: 'block'\n}\nexports['aes128'] = exports['aes-128-cbc']\nexports['aes192'] = exports['aes-192-cbc']\nexports['aes256'] = exports['aes-256-cbc']\nexports['aes-128-cfb'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CFB',\n  type: 'stream'\n}\nexports['aes-192-cfb'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CFB',\n  type: 'stream'\n}\nexports['aes-256-cfb'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CFB',\n  type: 'stream'\n}\nexports['aes-128-cfb8'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CFB8',\n  type: 'stream'\n}\nexports['aes-192-cfb8'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CFB8',\n  type: 'stream'\n}\nexports['aes-256-cfb8'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CFB8',\n  type: 'stream'\n}\nexports['aes-128-cfb1'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CFB1',\n  type: 'stream'\n}\nexports['aes-192-cfb1'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CFB1',\n  type: 'stream'\n}\nexports['aes-256-cfb1'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CFB1',\n  type: 'stream'\n}\nexports['aes-128-ofb'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'OFB',\n  type: 'stream'\n}\nexports['aes-192-ofb'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'OFB',\n  type: 'stream'\n}\nexports['aes-256-ofb'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'OFB',\n  type: 'stream'\n}\nexports['aes-128-ctr'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CTR',\n  type: 'stream'\n}\nexports['aes-192-ctr'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CTR',\n  type: 'stream'\n}\nexports['aes-256-ctr'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CTR',\n  type: 'stream'\n}\nexports['aes-128-gcm'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 12,\n  mode: 'GCM',\n  type: 'auth'\n}\nexports['aes-192-gcm'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 12,\n  mode: 'GCM',\n  type: 'auth'\n}\nexports['aes-256-gcm'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 12,\n  mode: 'GCM',\n  type: 'auth'\n}\n\n},{}],35:[function(require,module,exports){\nvar xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n\n},{\"buffer-xor\":53}],36:[function(require,module,exports){\n(function (Buffer){\nvar xor = require('buffer-xor')\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = new Buffer('')\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = new Buffer('')\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"buffer-xor\":53}],37:[function(require,module,exports){\n(function (Buffer){\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = new Buffer(len)\n  var i = -1\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n  return out\n}\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = new Buffer(buffer.length)\n  buffer = Buffer.concat([buffer, new Buffer([value])])\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n  return out\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],38:[function(require,module,exports){\n(function (Buffer){\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n  self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])])\n  return out\n}\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = new Buffer(len)\n  var i = -1\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n  return out\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],39:[function(require,module,exports){\n(function (Buffer){\nvar xor = require('buffer-xor')\n\nfunction incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlock(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"buffer-xor\":53}],40:[function(require,module,exports){\nexports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n\n},{}],41:[function(require,module,exports){\n(function (Buffer){\nvar xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"buffer-xor\":53}],42:[function(require,module,exports){\n(function (Buffer){\nvar aes = require('./aes')\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\ninherits(StreamCipher, Transform)\nmodule.exports = StreamCipher\nfunction StreamCipher (mode, key, iv, decrypt) {\n  if (!(this instanceof StreamCipher)) {\n    return new StreamCipher(mode, key, iv)\n  }\n  Transform.call(this)\n  this._cipher = new aes.AES(key)\n  this._prev = new Buffer(iv.length)\n  this._cache = new Buffer('')\n  this._secCache = new Buffer('')\n  this._decrypt = decrypt\n  iv.copy(this._prev)\n  this._mode = mode\n}\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aes\":28,\"buffer\":54,\"cipher-base\":55,\"inherits\":108}],43:[function(require,module,exports){\nvar ebtk = require('evp_bytestokey')\nvar aes = require('browserify-aes/browser')\nvar DES = require('browserify-des')\nvar desModes = require('browserify-des/modes')\nvar aesModes = require('browserify-aes/modes')\nfunction createCipher (suite, password) {\n  var keyLen, ivLen\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\nfunction createDecipher (suite, password) {\n  var keyLen, ivLen\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) {\n    return aes.createCipheriv(suite, key, iv)\n  } else if (desModes[suite]) {\n    return new DES({\n      key: key,\n      iv: iv,\n      mode: suite\n    })\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n}\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) {\n    return aes.createDecipheriv(suite, key, iv)\n  } else if (desModes[suite]) {\n    return new DES({\n      key: key,\n      iv: iv,\n      mode: suite,\n      decrypt: true\n    })\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n}\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\nexports.listCiphers = exports.getCiphers = getCiphers\n\n},{\"browserify-aes/browser\":30,\"browserify-aes/modes\":34,\"browserify-des\":44,\"browserify-des/modes\":45,\"evp_bytestokey\":91}],44:[function(require,module,exports){\n(function (Buffer){\nvar CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return new Buffer(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return new Buffer(this._des.final())\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"cipher-base\":55,\"des.js\":64,\"inherits\":108}],45:[function(require,module,exports){\nexports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n\n},{}],46:[function(require,module,exports){\n(function (Buffer){\nvar bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n  var r = getr(priv);\n  var blinder = r.toRed(bn.mont(priv.modulus))\n  .redPow(new bn(priv.publicExponent)).fromRed();\n  return {\n    blinder: blinder,\n    unblinder:r.invm(priv.modulus)\n  };\n}\nfunction crt(msg, priv) {\n  var blinds = blind(priv);\n  var len = priv.modulus.byteLength();\n  var mod = bn.mont(priv.modulus);\n  var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n  var c1 = blinded.toRed(bn.mont(priv.prime1));\n  var c2 = blinded.toRed(bn.mont(priv.prime2));\n  var qinv = priv.coefficient;\n  var p = priv.prime1;\n  var q = priv.prime2;\n  var m1 = c1.redPow(priv.exponent1);\n  var m2 = c2.redPow(priv.exponent2);\n  m1 = m1.fromRed();\n  m2 = m2.fromRed();\n  var h = m1.isub(m2).imul(qinv).umod(p);\n  h.imul(q);\n  m2.iadd(h);\n  return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n  var len = priv.modulus.byteLength();\n  var r = new bn(randomBytes(len));\n  while (r.cmp(priv.modulus) >=  0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n    r = new bn(randomBytes(len));\n  }\n  return r;\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":25,\"buffer\":54,\"randombytes\":133}],47:[function(require,module,exports){\nmodule.exports = require('./browser/algorithms.json')\n\n},{\"./browser/algorithms.json\":48}],48:[function(require,module,exports){\nmodule.exports={\n  \"sha224WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"RSA-SHA224\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"sha256WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"RSA-SHA256\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"sha384WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"RSA-SHA384\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"sha512WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA512\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA1\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"3021300906052b0e03021a05000414\"\n  },\n  \"ecdsa-with-SHA1\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"sha256\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"sha224\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"sha384\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"sha512\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA1\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-RIPEMD160\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"\"\n  },\n  \"ripemd160WithRSA\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"RSA-RIPEMD160\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"md5WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  },\n  \"RSA-MD5\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  }\n}\n\n},{}],49:[function(require,module,exports){\nmodule.exports={\n  \"1.3.132.0.10\": \"secp256k1\",\n  \"1.3.132.0.33\": \"p224\",\n  \"1.2.840.10045.3.1.1\": \"p192\",\n  \"1.2.840.10045.3.1.7\": \"p256\",\n  \"1.3.132.0.34\": \"p384\",\n  \"1.3.132.0.35\": \"p521\"\n}\n\n},{}],50:[function(require,module,exports){\n(function (Buffer){\nvar createHash = require('create-hash')\nvar stream = require('stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = new Buffer(algorithms[key].id, 'hex')\n  algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hashType = data.hash\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nSign.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n  this.end()\n  var hash = this._hash.digest()\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n  return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n  if (typeof sig === 'string') sig = new Buffer(sig, enc)\n\n  this.end()\n  var hash = this._hash.digest()\n  return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n  return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n  return new Verify(algorithm)\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./algorithms.json\":48,\"./sign\":51,\"./verify\":52,\"buffer\":54,\"create-hash\":58,\"inherits\":108,\"stream\":157}],51:[function(require,module,exports){\n(function (Buffer){\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key)\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n    return ecSign(hash, priv)\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong private key type')\n    return dsaSign(hash, priv, hashType)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = priv.modulus.byteLength()\n  var pad = [ 0, 1 ]\n  while (hash.length + pad.length + 1 < len) pad.push(0xff)\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) pad.push(hash[i])\n\n  var out = crt(pad, priv)\n  return out\n}\n\nfunction ecSign (hash, priv) {\n  var curveId = curves[priv.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var key = curve.keyFromPrivate(priv.privateKey)\n  var out = key.sign(hash)\n\n  return new Buffer(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n  var x = priv.params.priv_key\n  var p = priv.params.p\n  var q = priv.params.q\n  var g = priv.params.g\n  var r = new BN(0)\n  var k\n  var H = bits2int(hash, q).mod(q)\n  var s = false\n  var kv = getKey(x, q, hash, algo)\n  while (s === false) {\n    k = makeKey(q, kv, algo)\n    r = makeR(g, k, p, q)\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n    if (s.cmpn(0) === 0) {\n      s = false\n      r = new BN(0)\n    }\n  }\n  return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n  r = r.toArray()\n  s = s.toArray()\n\n  // Pad values\n  if (r[0] & 0x80) r = [ 0 ].concat(r)\n  if (s[0] & 0x80) s = [ 0 ].concat(s)\n\n  var total = r.length + s.length + 4\n  var res = [ 0x30, total, 0x02, r.length ]\n  res = res.concat(r, [ 0x02, s.length ], s)\n  return new Buffer(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n  x = new Buffer(x.toArray())\n  if (x.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - x.length)\n    zeros.fill(0)\n    x = Buffer.concat([ zeros, x ])\n  }\n  var hlen = hash.length\n  var hbits = bits2octets(hash, q)\n  var v = new Buffer(hlen)\n  v.fill(1)\n  var k = new Buffer(hlen)\n  k.fill(0)\n  k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n  var bits = new BN(obits)\n  var shift = (obits.length << 3) - q.bitLength()\n  if (shift > 0) bits.ishrn(shift)\n  return bits\n}\n\nfunction bits2octets (bits, q) {\n  bits = bits2int(bits, q)\n  bits = bits.mod(q)\n  var out = new Buffer(bits.toArray())\n  if (out.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - out.length)\n    zeros.fill(0)\n    out = Buffer.concat([ zeros, out ])\n  }\n  return out\n}\n\nfunction makeKey (q, kv, algo) {\n  var t\n  var k\n\n  do {\n    t = new Buffer(0)\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n      t = Buffer.concat([ t, kv.v ])\n    }\n\n    k = bits2int(t, q)\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n  } while (k.cmp(q) !== -1)\n\n  return k\n}\n\nfunction makeR (g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./curves.json\":49,\"bn.js\":25,\"browserify-rsa\":46,\"buffer\":54,\"create-hmac\":61,\"elliptic\":74,\"parse-asn1\":118}],52:[function(require,module,exports){\n(function (Buffer){\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n  var pub = parseKeys(key)\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n    return ecVerify(sig, hash, pub)\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong public key type')\n    return dsaVerify(sig, hash, pub)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = pub.modulus.byteLength()\n  var pad = [ 1 ]\n  var padNum = 0\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff)\n    padNum++\n  }\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) {\n    pad.push(hash[i])\n  }\n  pad = new Buffer(pad)\n  var red = BN.mont(pub.modulus)\n  sig = new BN(sig).toRed(red)\n\n  sig = sig.redPow(new BN(pub.publicExponent))\n  sig = new Buffer(sig.fromRed().toArray())\n  var out = padNum < 8 ? 1 : 0\n  len = Math.min(sig.length, pad.length)\n  if (sig.length !== pad.length) out = 1\n\n  i = -1\n  while (++i < len) out |= sig[i] ^ pad[i]\n  return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var pubkey = pub.data.subjectPrivateKey.data\n\n  return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n  var p = pub.data.p\n  var q = pub.data.q\n  var g = pub.data.g\n  var y = pub.data.pub_key\n  var unpacked = parseKeys.signature.decode(sig, 'der')\n  var s = unpacked.s\n  var r = unpacked.r\n  checkValue(s, q)\n  checkValue(r, q)\n  var montp = BN.mont(p)\n  var w = s.invm(q)\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q)\n  return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n  if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n  if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./curves.json\":49,\"bn.js\":25,\"buffer\":54,\"elliptic\":74,\"parse-asn1\":118}],53:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],54:[function(require,module,exports){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('Invalid typed array length')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  buf.__proto__ = Buffer.prototype\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species &&\n    Buffer[Symbol.species] === Buffer) {\n  Object.defineProperty(Buffer, Symbol.species, {\n    value: null,\n    configurable: true,\n    enumerable: false,\n    writable: false\n  })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (isArrayBuffer(value)) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  return fromObject(value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  buf.__proto__ = Buffer.prototype\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj) {\n    if (isArrayBufferView(obj) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n        return createBuffer(0)\n      }\n      return fromArrayLike(obj)\n    }\n\n    if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n      return fromArrayLike(obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (isArrayBufferView(string) || isArrayBuffer(string)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  newBuf.__proto__ = Buffer.prototype\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : new Buffer(val, encoding)\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check\n// but they should be treated as valid. See: https://github.com/feross/buffer/issues/166\nfunction isArrayBuffer (obj) {\n  return obj instanceof ArrayBuffer ||\n    (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' &&\n      typeof obj.byteLength === 'number')\n}\n\n// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`\nfunction isArrayBufferView (obj) {\n  return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)\n}\n\nfunction numberIsNaN (obj) {\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n},{\"base64-js\":24,\"ieee754\":106}],55:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n  Transform.call(this)\n  this.hashMode = typeof hashMode === 'string'\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest\n  } else {\n    this.final = this._finalOrDigest\n  }\n  if (this._final) {\n    this.__final = this._final\n    this._final = null\n  }\n  this._decoder = null\n  this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc)\n  }\n\n  var outData = this._update(data)\n  if (this.hashMode) return this\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc)\n  }\n\n  return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err\n  try {\n    if (this.hashMode) {\n      this._update(data)\n    } else {\n      this.push(this._update(data))\n    }\n  } catch (e) {\n    err = e\n  } finally {\n    next(err)\n  }\n}\nCipherBase.prototype._flush = function (done) {\n  var err\n  try {\n    this.push(this.__final())\n  } catch (e) {\n    err = e\n  }\n\n  done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0)\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true)\n  }\n  return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc)\n    this._encoding = enc\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n  var out = this._decoder.write(value)\n  if (fin) {\n    out += this._decoder.end()\n  }\n\n  return out\n}\n\nmodule.exports = CipherBase\n\n},{\"inherits\":108,\"safe-buffer\":148,\"stream\":157,\"string_decoder\":158}],56:[function(require,module,exports){\n(function (Buffer){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n}).call(this,{\"isBuffer\":require(\"../../is-buffer/index.js\")})\n},{\"../../is-buffer/index.js\":109}],57:[function(require,module,exports){\n(function (Buffer){\nvar elliptic = require('elliptic');\nvar BN = require('bn.js');\n\nmodule.exports = function createECDH(curve) {\n\treturn new ECDH(curve);\n};\n\nvar aliases = {\n\tsecp256k1: {\n\t\tname: 'secp256k1',\n\t\tbyteLength: 32\n\t},\n\tsecp224r1: {\n\t\tname: 'p224',\n\t\tbyteLength: 28\n\t},\n\tprime256v1: {\n\t\tname: 'p256',\n\t\tbyteLength: 32\n\t},\n\tprime192v1: {\n\t\tname: 'p192',\n\t\tbyteLength: 24\n\t},\n\ted25519: {\n\t\tname: 'ed25519',\n\t\tbyteLength: 32\n\t},\n\tsecp384r1: {\n\t\tname: 'p384',\n\t\tbyteLength: 48\n\t},\n\tsecp521r1: {\n\t\tname: 'p521',\n\t\tbyteLength: 66\n\t}\n};\n\naliases.p224 = aliases.secp224r1;\naliases.p256 = aliases.secp256r1 = aliases.prime256v1;\naliases.p192 = aliases.secp192r1 = aliases.prime192v1;\naliases.p384 = aliases.secp384r1;\naliases.p521 = aliases.secp521r1;\n\nfunction ECDH(curve) {\n\tthis.curveType = aliases[curve];\n\tif (!this.curveType ) {\n\t\tthis.curveType = {\n\t\t\tname: curve\n\t\t};\n\t}\n\tthis.curve = new elliptic.ec(this.curveType.name);\n\tthis.keys = void 0;\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n\tthis.keys = this.curve.genKeyPair();\n\treturn this.getPublicKey(enc, format);\n};\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n\tinenc = inenc || 'utf8';\n\tif (!Buffer.isBuffer(other)) {\n\t\tother = new Buffer(other, inenc);\n\t}\n\tvar otherPub = this.curve.keyFromPublic(other).getPublic();\n\tvar out = otherPub.mul(this.keys.getPrivate()).getX();\n\treturn formatReturnValue(out, enc, this.curveType.byteLength);\n};\n\nECDH.prototype.getPublicKey = function (enc, format) {\n\tvar key = this.keys.getPublic(format === 'compressed', true);\n\tif (format === 'hybrid') {\n\t\tif (key[key.length - 1] % 2) {\n\t\t\tkey[0] = 7;\n\t\t} else {\n\t\t\tkey [0] = 6;\n\t\t}\n\t}\n\treturn formatReturnValue(key, enc);\n};\n\nECDH.prototype.getPrivateKey = function (enc) {\n\treturn formatReturnValue(this.keys.getPrivate(), enc);\n};\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n\tenc = enc || 'utf8';\n\tif (!Buffer.isBuffer(pub)) {\n\t\tpub = new Buffer(pub, enc);\n\t}\n\tthis.keys._importPublic(pub);\n\treturn this;\n};\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n\tenc = enc || 'utf8';\n\tif (!Buffer.isBuffer(priv)) {\n\t\tpriv = new Buffer(priv, enc);\n\t}\n\tvar _priv = new BN(priv);\n\t_priv = _priv.toString(16);\n\tthis.keys._importPrivate(_priv);\n\treturn this;\n};\n\nfunction formatReturnValue(bn, enc, len) {\n\tif (!Array.isArray(bn)) {\n\t\tbn = bn.toArray();\n\t}\n\tvar buf = new Buffer(bn);\n\tif (len && buf.length < len) {\n\t\tvar zeros = new Buffer(len - buf.length);\n\t\tzeros.fill(0);\n\t\tbuf = Buffer.concat([zeros, buf]);\n\t}\n\tif (!enc) {\n\t\treturn buf;\n\t} else {\n\t\treturn buf.toString(enc);\n\t}\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":25,\"buffer\":54,\"elliptic\":74}],58:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nvar inherits = require('inherits')\nvar md5 = require('./md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar Base = require('cipher-base')\n\nfunction HashNoConstructor (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n  this.buffers = []\n}\n\ninherits(HashNoConstructor, Base)\n\nHashNoConstructor.prototype._update = function (data) {\n  this.buffers.push(data)\n}\n\nHashNoConstructor.prototype._final = function () {\n  var buf = Buffer.concat(this.buffers)\n  var r = this._hash(buf)\n  this.buffers = null\n\n  return r\n}\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new HashNoConstructor(md5)\n  if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())\n\n  return new Hash(sha(alg))\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./md5\":60,\"buffer\":54,\"cipher-base\":55,\"inherits\":108,\"ripemd160\":147,\"sha.js\":150}],59:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nvar intSize = 4\nvar zeroBuffer = new Buffer(intSize)\nzeroBuffer.fill(0)\n\nvar charSize = 8\nvar hashSize = 16\n\nfunction toArray (buf) {\n  if ((buf.length % intSize) !== 0) {\n    var len = buf.length + (intSize - (buf.length % intSize))\n    buf = Buffer.concat([buf, zeroBuffer], len)\n  }\n\n  var arr = new Array(buf.length >>> 2)\n  for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {\n    arr[j] = buf.readInt32LE(i)\n  }\n\n  return arr\n}\n\nmodule.exports = function hash (buf, fn) {\n  var arr = fn(toArray(buf), buf.length * charSize)\n  buf = new Buffer(hashSize)\n  for (var i = 0; i < arr.length; i++) {\n    buf.writeInt32LE(arr[i], i << 2, true)\n  }\n  return buf\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],60:[function(require,module,exports){\n'use strict'\n/*\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\nvar makeHash = require('./make-hash')\n\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length\n */\nfunction core_md5 (x, len) {\n  /* append padding */\n  x[len >> 5] |= 0x80 << ((len) % 32)\n  x[(((len + 64) >>> 9) << 4) + 14] = len\n\n  var a = 1732584193\n  var b = -271733879\n  var c = -1732584194\n  var d = 271733878\n\n  for (var i = 0; i < x.length; i += 16) {\n    var olda = a\n    var oldb = b\n    var oldc = c\n    var oldd = d\n\n    a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)\n    d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)\n    c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)\n    b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)\n    a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)\n    d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)\n    c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)\n    b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)\n    a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)\n    d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)\n    c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)\n    b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)\n    a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)\n    d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)\n    c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)\n    b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)\n\n    a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)\n    d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)\n    c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)\n    b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)\n    a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)\n    d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)\n    c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)\n    b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)\n    a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)\n    d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)\n    c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)\n    b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)\n    a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)\n    d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)\n    c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)\n    b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)\n\n    a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)\n    d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)\n    c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)\n    b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)\n    a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)\n    d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)\n    c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)\n    b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)\n    a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)\n    d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)\n    c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)\n    b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)\n    a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)\n    d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)\n    c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)\n    b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)\n\n    a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)\n    d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)\n    c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)\n    b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)\n    a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)\n    d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)\n    c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)\n    b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)\n    a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)\n    d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)\n    c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)\n    b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)\n    a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)\n    d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)\n    c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)\n    b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)\n\n    a = safe_add(a, olda)\n    b = safe_add(b, oldb)\n    c = safe_add(c, oldc)\n    d = safe_add(d, oldd)\n  }\n\n  return [a, b, c, d]\n}\n\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\nfunction md5_cmn (q, a, b, x, s, t) {\n  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)\n}\n\nfunction md5_ff (a, b, c, d, x, s, t) {\n  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)\n}\n\nfunction md5_gg (a, b, c, d, x, s, t) {\n  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)\n}\n\nfunction md5_hh (a, b, c, d, x, s, t) {\n  return md5_cmn(b ^ c ^ d, a, b, x, s, t)\n}\n\nfunction md5_ii (a, b, c, d, x, s, t) {\n  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)\n}\n\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\nfunction safe_add (x, y) {\n  var lsw = (x & 0xFFFF) + (y & 0xFFFF)\n  var msw = (x >> 16) + (y >> 16) + (lsw >> 16)\n  return (msw << 16) | (lsw & 0xFFFF)\n}\n\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\nfunction bit_rol (num, cnt) {\n  return (num << cnt) | (num >>> (32 - cnt))\n}\n\nmodule.exports = function md5 (buf) {\n  return makeHash(buf, core_md5)\n}\n\n},{\"./make-hash\":59}],61:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n\n},{\"./legacy\":62,\"cipher-base\":55,\"create-hash/md5\":60,\"inherits\":108,\"ripemd160\":147,\"safe-buffer\":148,\"sha.js\":150}],62:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n\n},{\"cipher-base\":55,\"inherits\":108,\"safe-buffer\":148}],63:[function(require,module,exports){\n'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n  return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nexports.createCredentials = function () {\n  throw new Error([\n    'sorry, createCredentials is not implemented yet',\n    'we accept pull requests',\n    'https://github.com/crypto-browserify/crypto-browserify'\n  ].join('\\n'))\n}\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n}\n\n},{\"browserify-cipher\":43,\"browserify-sign\":50,\"browserify-sign/algos\":47,\"create-ecdh\":57,\"create-hash\":58,\"create-hmac\":61,\"diffie-hellman\":70,\"pbkdf2\":120,\"public-encrypt\":127,\"randombytes\":133}],64:[function(require,module,exports){\n'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n\n},{\"./des/cbc\":65,\"./des/cipher\":66,\"./des/des\":67,\"./des/ede\":68,\"./des/utils\":69}],65:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n\n},{\"inherits\":108,\"minimalistic-assert\":112}],66:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n\n},{\"minimalistic-assert\":112}],67:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar utils = des.utils;\nvar Cipher = des.Cipher;\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n\n},{\"../des\":64,\"inherits\":108,\"minimalistic-assert\":112}],68:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar Cipher = des.Cipher;\nvar DES = des.DES;\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n\n},{\"../des\":64,\"inherits\":108,\"minimalistic-assert\":112}],69:[function(require,module,exports){\n'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n\n},{}],70:[function(require,module,exports){\n(function (Buffer){\nvar generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./lib/dh\":71,\"./lib/generatePrime\":72,\"./lib/primes.json\":73,\"buffer\":54}],71:[function(require,module,exports){\n(function (Buffer){\nvar BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./generatePrime\":72,\"bn.js\":25,\"buffer\":54,\"miller-rabin\":111,\"randombytes\":133}],72:[function(require,module,exports){\nvar randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n\n},{\"bn.js\":25,\"miller-rabin\":111,\"randombytes\":133}],73:[function(require,module,exports){\nmodule.exports={\n    \"modp1\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n    },\n    \"modp2\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n    },\n    \"modp5\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n    },\n    \"modp14\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n    },\n    \"modp15\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n    },\n    \"modp16\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n    },\n    \"modp17\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n    },\n    \"modp18\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n    }\n}\n},{}],74:[function(require,module,exports){\n'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n\n},{\"../package.json\":89,\"./elliptic/curve\":77,\"./elliptic/curves\":80,\"./elliptic/ec\":81,\"./elliptic/eddsa\":84,\"./elliptic/utils\":88,\"brorand\":26}],75:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  for (var j = 0; j < naf.length; j += doubles.step) {\n    var nafW = 0;\n    for (var k = j + doubles.step - 1; k >= j; k--)\n      nafW = (nafW << 1) + naf[k];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (var j = 0; j < repr.length; j++) {\n      var nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var k = 0; i >= 0 && naf[i] === 0; i--)\n      k++;\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n                                                       points,\n                                                       coeffs,\n                                                       len,\n                                                       jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  for (var i = 0; i < len; i++) {\n    var p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (var i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a]);\n      naf[b] = getNAF(coeffs[b], wndWidth[b]);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b] /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (var j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (var i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (var j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (var j = 0; j < len; j++) {\n      var z = tmp[j];\n      var p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (var i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n                          bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n\n},{\"../../elliptic\":74,\"bn.js\":25}],76:[function(require,module,exports){\n'use strict';\n\nvar curve = require('../curve');\nvar elliptic = require('../../elliptic');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - 1) / (d y^2 + 1)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.one);\n  var rhs = y2.redMul(this.d).redAdd(this.one);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n         this.y.cmp(this.z) === 0;\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // E = a * C\n    var e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      var h = this.z.redSqr();\n      // J = F - 2 * H\n      var j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    var e = c.redAdd(d);\n    // H = (c * Z1)^2\n    var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();\n    // J = E - 2 * H\n    var j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n                          this.y,\n                          this.z,\n                          this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n  return false;\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n\n},{\"../../elliptic\":74,\"../curve\":77,\"bn.js\":25,\"inherits\":108}],77:[function(require,module,exports){\n'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n\n},{\"./base\":75,\"./edwards\":76,\"./mont\":78,\"./short\":79}],78:[function(require,module,exports){\n'use strict';\n\nvar curve = require('../curve');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n\n},{\"../../elliptic\":74,\"../curve\":77,\"bn.js\":25,\"inherits\":108}],79:[function(require,module,exports){\n'use strict';\n\nvar curve = require('../curve');\nvar elliptic = require('../../elliptic');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16)\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 }\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n  var npoints = this._endoWnafT1;\n  var ncoeffs = this._endoWnafT2;\n  for (var i = 0; i < points.length; i++) {\n    var split = this._endoSplit(coeffs[i]);\n    var p = points[i];\n    var beta = p._getBeta();\n\n    if (split.k1.negative) {\n      split.k1.ineg();\n      p = p.neg(true);\n    }\n    if (split.k2.negative) {\n      split.k2.ineg();\n      beta = beta.neg(true);\n    }\n\n    npoints[i * 2] = p;\n    npoints[i * 2 + 1] = beta;\n    ncoeffs[i * 2] = split.k1;\n    ncoeffs[i * 2 + 1] = split.k2;\n  }\n  var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n  // Clean-up references to points and coefficients\n  for (var j = 0; j < i * 2; j++) {\n    npoints[j] = null;\n    ncoeffs[j] = null;\n  }\n  return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul)\n      }\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1)\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1)\n    }\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point))\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point))\n    }\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate)\n      }\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (var i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (var i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n  return false;\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\n},{\"../../elliptic\":74,\"../curve\":77,\"bn.js\":25,\"inherits\":108}],80:[function(require,module,exports){\n'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar elliptic = require('../elliptic');\n\nvar assert = elliptic.utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new elliptic.curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new elliptic.curve.edwards(options);\n  else\n    this.curve = new elliptic.curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve\n      });\n      return curve;\n    }\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n  ]\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n  ]\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n  ]\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n  ]\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n  ]\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9'\n  ]\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658'\n  ]\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3'\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15'\n    }\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre\n  ]\n});\n\n},{\"../elliptic\":74,\"./precomputed/secp256k1\":87,\"hash.js\":93}],81:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n    options = elliptic.curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof elliptic.curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray()\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  do {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8'\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; true; iter++) {\n    var k = options.k ?\n        options.k(iter) :\n        new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n\n  if (!this.curve._maxwellTrick) {\n    var p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n\n},{\"../../elliptic\":74,\"./key\":82,\"./signature\":83,\"bn.js\":25,\"hmac-drbg\":105}],82:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n\n},{\"../../elliptic\":74,\"bn.js\":25}],83:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n  }\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0 && (r[1] & 0x80)) {\n    r = r.slice(1);\n  }\n  if (s[0] === 0 && (s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n\n},{\"../../elliptic\":74,\"bn.js\":25}],84:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  var curve = elliptic.curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n               .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n\n},{\"../../elliptic\":74,\"./key\":85,\"./signature\":86,\"hash.js\":93}],85:[function(require,module,exports){\n'use strict';\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n\n},{\"../../elliptic\":74}],86:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength)\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n\n},{\"../../elliptic\":74,\"bn.js\":25}],87:[function(require,module,exports){\nmodule.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n      ]\n    ]\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n      ]\n    ]\n  }\n};\n\n},{}],88:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n  var naf = [];\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n  while (k.cmpn(1) >= 0) {\n    var z;\n    if (k.isOdd()) {\n      var mod = k.andln(ws - 1);\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n    naf.push(z);\n\n    // Optimization, shift by word if possible\n    var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n    for (var i = 1; i < shift; i++)\n      naf.push(0);\n    k.iushrn(shift);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    []\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      var m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      var m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n           this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n                                     bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n\n},{\"bn.js\":25,\"minimalistic-assert\":112,\"minimalistic-crypto-utils\":113}],89:[function(require,module,exports){\nmodule.exports={\n  \"_from\": \"elliptic@^6.0.0\",\n  \"_id\": \"elliptic@6.4.0\",\n  \"_inBundle\": false,\n  \"_integrity\": \"sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=\",\n  \"_location\": \"/browserify/elliptic\",\n  \"_phantomChildren\": {},\n  \"_requested\": {\n    \"type\": \"range\",\n    \"registry\": true,\n    \"raw\": \"elliptic@^6.0.0\",\n    \"name\": \"elliptic\",\n    \"escapedName\": \"elliptic\",\n    \"rawSpec\": \"^6.0.0\",\n    \"saveSpec\": null,\n    \"fetchSpec\": \"^6.0.0\"\n  },\n  \"_requiredBy\": [\n    \"/browserify/browserify-sign\",\n    \"/browserify/create-ecdh\"\n  ],\n  \"_resolved\": \"https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz\",\n  \"_shasum\": \"cac9af8762c85836187003c8dfe193e5e2eae5df\",\n  \"_spec\": \"elliptic@^6.0.0\",\n  \"_where\": \"/usr/local/lib/node_modules/browserify/node_modules/browserify-sign\",\n  \"author\": {\n    \"name\": \"Fedor Indutny\",\n    \"email\": \"fedor@indutny.com\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/indutny/elliptic/issues\"\n  },\n  \"bundleDependencies\": false,\n  \"dependencies\": {\n    \"bn.js\": \"^4.4.0\",\n    \"brorand\": \"^1.0.1\",\n    \"hash.js\": \"^1.0.0\",\n    \"hmac-drbg\": \"^1.0.0\",\n    \"inherits\": \"^2.0.1\",\n    \"minimalistic-assert\": \"^1.0.0\",\n    \"minimalistic-crypto-utils\": \"^1.0.0\"\n  },\n  \"deprecated\": false,\n  \"description\": \"EC cryptography\",\n  \"devDependencies\": {\n    \"brfs\": \"^1.4.3\",\n    \"coveralls\": \"^2.11.3\",\n    \"grunt\": \"^0.4.5\",\n    \"grunt-browserify\": \"^5.0.0\",\n    \"grunt-cli\": \"^1.2.0\",\n    \"grunt-contrib-connect\": \"^1.0.0\",\n    \"grunt-contrib-copy\": \"^1.0.0\",\n    \"grunt-contrib-uglify\": \"^1.0.1\",\n    \"grunt-mocha-istanbul\": \"^3.0.1\",\n    \"grunt-saucelabs\": \"^8.6.2\",\n    \"istanbul\": \"^0.4.2\",\n    \"jscs\": \"^2.9.0\",\n    \"jshint\": \"^2.6.0\",\n    \"mocha\": \"^2.1.0\"\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"homepage\": \"https://github.com/indutny/elliptic\",\n  \"keywords\": [\n    \"EC\",\n    \"Elliptic\",\n    \"curve\",\n    \"Cryptography\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"lib/elliptic.js\",\n  \"name\": \"elliptic\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+ssh://git@github.com/indutny/elliptic.git\"\n  },\n  \"scripts\": {\n    \"jscs\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n    \"jshint\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n    \"lint\": \"npm run jscs && npm run jshint\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n    \"version\": \"grunt dist && git add dist/\"\n  },\n  \"version\": \"6.4.0\"\n}\n\n},{}],90:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],91:[function(require,module,exports){\n(function (Buffer){\nvar md5 = require('create-hash/md5')\nmodule.exports = EVP_BytesToKey\nfunction EVP_BytesToKey (password, salt, keyLen, ivLen) {\n  if (!Buffer.isBuffer(password)) {\n    password = new Buffer(password, 'binary')\n  }\n  if (salt && !Buffer.isBuffer(salt)) {\n    salt = new Buffer(salt, 'binary')\n  }\n  keyLen = keyLen / 8\n  ivLen = ivLen || 0\n  var ki = 0\n  var ii = 0\n  var key = new Buffer(keyLen)\n  var iv = new Buffer(ivLen)\n  var addmd = 0\n  var md_buf\n  var i\n  var bufs = []\n  while (true) {\n    if (addmd++ > 0) {\n      bufs.push(md_buf)\n    }\n    bufs.push(password)\n    if (salt) {\n      bufs.push(salt)\n    }\n    md_buf = md5(Buffer.concat(bufs))\n    bufs = []\n    i = 0\n    if (keyLen > 0) {\n      while (true) {\n        if (keyLen === 0) {\n          break\n        }\n        if (i === md_buf.length) {\n          break\n        }\n        key[ki++] = md_buf[i]\n        keyLen--\n        i++\n      }\n    }\n    if (ivLen > 0 && i !== md_buf.length) {\n      while (true) {\n        if (ivLen === 0) {\n          break\n        }\n        if (i === md_buf.length) {\n          break\n        }\n        iv[ii++] = md_buf[i]\n        ivLen--\n        i++\n      }\n    }\n    if (keyLen === 0 && ivLen === 0) {\n      break\n    }\n  }\n  for (i = 0; i < md_buf.length; i++) {\n    md_buf[i] = 0\n  }\n  return {\n    key: key,\n    iv: iv\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"create-hash/md5\":60}],92:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = new Buffer(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)\n    this.update(chunk)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this._digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')\n  if (this._finalized) throw new Error('Digest already called')\n  if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function (data) {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"inherits\":108,\"stream\":157}],93:[function(require,module,exports){\nvar hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n\n},{\"./hash/common\":94,\"./hash/hmac\":95,\"./hash/ripemd\":96,\"./hash/sha\":97,\"./hash/utils\":104}],94:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n\n},{\"./utils\":104,\"minimalistic-assert\":112}],95:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n\n},{\"./utils\":104,\"minimalistic-assert\":112}],96:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n\n},{\"./common\":94,\"./utils\":104}],97:[function(require,module,exports){\n'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n\n},{\"./sha/1\":98,\"./sha/224\":99,\"./sha/256\":100,\"./sha/384\":101,\"./sha/512\":102}],98:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":94,\"../utils\":104,\"./common\":103}],99:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n\n},{\"../utils\":104,\"./256\":100}],100:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":94,\"../utils\":104,\"./common\":103,\"minimalistic-assert\":112}],101:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n\n},{\"../utils\":104,\"./512\":102}],102:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\n},{\"../common\":94,\"../utils\":104,\"minimalistic-assert\":112}],103:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n\n},{\"../utils\":104}],104:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        var hi = c >> 8;\n        var lo = c & 0xff;\n        if (hi)\n          res.push(hi, lo);\n        else\n          res.push(lo);\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n\n},{\"inherits\":108,\"minimalistic-assert\":112}],105:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n\n},{\"hash.js\":93,\"minimalistic-assert\":112,\"minimalistic-crypto-utils\":113}],106:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n},{}],107:[function(require,module,exports){\n\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n},{}],108:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],109:[function(require,module,exports){\n/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n},{}],110:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n},{}],111:[function(require,module,exports){\nvar bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._rand = function _rand(n) {\n  var len = n.bitLength();\n  var buf = this.rand.generate(Math.ceil(len / 8));\n\n  // Set low bits\n  buf[0] |= 3;\n\n  // Mask high bits\n  var mask = len & 0x7;\n  if (mask !== 0)\n    buf[buf.length - 1] >>= 7 - mask;\n\n  return new bn(buf);\n}\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  var n2 = n1.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._rand(n2);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  var n2 = n1.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._rand(n2);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n\n},{\"bn.js\":25,\"brorand\":26}],112:[function(require,module,exports){\nmodule.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n\n},{}],113:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n\n},{}],114:[function(require,module,exports){\nmodule.exports={\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}\n},{}],115:[function(require,module,exports){\n// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('modulus').int(),\n    this.key('publicExponent').int(),\n    this.key('privateExponent').int(),\n    this.key('prime1').int(),\n    this.key('prime2').int(),\n    this.key('exponent1').int(),\n    this.key('exponent2').int(),\n    this.key('coefficient').int()\n  )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n  this.seq().obj(\n    this.key('modulus').int(),\n    this.key('publicExponent').int()\n  )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('none').null_().optional(),\n    this.key('curve').objid().optional(),\n    this.key('params').seq().obj(\n      this.key('p').int(),\n      this.key('q').int(),\n      this.key('g').int()\n    ).optional()\n  )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').seq().obj(\n      this.key('id').objid(),\n      this.key('decrypt').seq().obj(\n        this.key('kde').seq().obj(\n          this.key('id').objid(),\n          this.key('kdeparams').seq().obj(\n            this.key('salt').octstr(),\n            this.key('iters').int()\n          )\n        ),\n        this.key('cipher').seq().obj(\n          this.key('algo').objid(),\n          this.key('iv').octstr()\n        )\n      )\n    ),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('p').int(),\n    this.key('q').int(),\n    this.key('g').int(),\n    this.key('pub_key').int(),\n    this.key('priv_key').int()\n  )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n  this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('privateKey').octstr(),\n    this.key('parameters').optional().explicit(0).use(ECParameters),\n    this.key('publicKey').optional().explicit(1).bitstr()\n  )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n  this.choice({\n    namedCurve: this.objid()\n  })\n})\n\nexports.signature = asn1.define('signature', function () {\n  this.seq().obj(\n    this.key('r').int(),\n    this.key('s').int()\n  )\n})\n\n},{\"./certificate\":116,\"asn1.js\":10}],116:[function(require,module,exports){\n// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n  this.choice({\n    utcTime: this.utctime(),\n    generalTime: this.gentime()\n  })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n  this.seq().obj(\n    this.key('type').objid(),\n    this.key('value').any()\n  )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('parameters').optional()\n  )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n  this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n  this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n  this.choice({\n    rdnSequence: this.use(RDNSequence)\n  })\n})\n\nvar Validity = asn.define('Validity', function () {\n  this.seq().obj(\n    this.key('notBefore').use(Time),\n    this.key('notAfter').use(Time)\n  )\n})\n\nvar Extension = asn.define('Extension', function () {\n  this.seq().obj(\n    this.key('extnID').objid(),\n    this.key('critical').bool().def(false),\n    this.key('extnValue').octstr()\n  )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n  this.seq().obj(\n    this.key('version').explicit(0).int(),\n    this.key('serialNumber').int(),\n    this.key('signature').use(AlgorithmIdentifier),\n    this.key('issuer').use(Name),\n    this.key('validity').use(Validity),\n    this.key('subject').use(Name),\n    this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n    this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n    this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n    this.key('extensions').explicit(3).seqof(Extension).optional()\n  )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n  this.seq().obj(\n    this.key('tbsCertificate').use(TBSCertificate),\n    this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n    this.key('signatureValue').bitstr()\n  )\n})\n\nmodule.exports = X509Certificate\n\n},{\"asn1.js\":10}],117:[function(require,module,exports){\n(function (Buffer){\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED\\n\\r?DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\\n\\r?\\n\\r?([0-9A-z\\n\\r\\+\\/\\=]+)\\n\\r?/m\nvar startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\\n/m\nvar fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\\n\\r?([0-9A-z\\n\\r\\+\\/\\=]+)\\n\\r?-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nmodule.exports = function (okey, password) {\n  var key = okey.toString()\n  var match = key.match(findProc)\n  var decrypted\n  if (!match) {\n    var match2 = key.match(fullRegex)\n    decrypted = new Buffer(match2[2].replace(/\\r?\\n/g, ''), 'base64')\n  } else {\n    var suite = 'aes' + match[1]\n    var iv = new Buffer(match[2], 'hex')\n    var cipherText = new Buffer(match[3].replace(/\\r?\\n/g, ''), 'base64')\n    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n    var out = []\n    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n    out.push(cipher.update(cipherText))\n    out.push(cipher.final())\n    decrypted = Buffer.concat(out)\n  }\n  var tag = key.match(startRegex)[1]\n  return {\n    tag: tag,\n    data: decrypted\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"browserify-aes\":30,\"buffer\":54,\"evp_bytestokey\":91}],118:[function(require,module,exports){\n(function (Buffer){\nvar asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n  var password\n  if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n    password = buffer.passphrase\n    buffer = buffer.key\n  }\n  if (typeof buffer === 'string') {\n    buffer = new Buffer(buffer)\n  }\n\n  var stripped = fixProc(buffer, password)\n\n  var type = stripped.tag\n  var data = stripped.data\n  var subtype, ndata\n  switch (type) {\n    case 'CERTIFICATE':\n      ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n      // falls through\n    case 'PUBLIC KEY':\n      if (!ndata) {\n        ndata = asn1.PublicKey.decode(data, 'der')\n      }\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n        case '1.2.840.10045.2.1':\n          ndata.subjectPrivateKey = ndata.subjectPublicKey\n          return {\n            type: 'ec',\n            data: ndata\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n          return {\n            type: 'dsa',\n            data: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      throw new Error('unknown key type ' + type)\n    case 'ENCRYPTED PRIVATE KEY':\n      data = asn1.EncryptedPrivateKey.decode(data, 'der')\n      data = decrypt(data, password)\n      // falls through\n    case 'PRIVATE KEY':\n      ndata = asn1.PrivateKey.decode(data, 'der')\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n        case '1.2.840.10045.2.1':\n          return {\n            curve: ndata.algorithm.curve,\n            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n          return {\n            type: 'dsa',\n            params: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      throw new Error('unknown key type ' + type)\n    case 'RSA PUBLIC KEY':\n      return asn1.RSAPublicKey.decode(data, 'der')\n    case 'RSA PRIVATE KEY':\n      return asn1.RSAPrivateKey.decode(data, 'der')\n    case 'DSA PRIVATE KEY':\n      return {\n        type: 'dsa',\n        params: asn1.DSAPrivateKey.decode(data, 'der')\n      }\n    case 'EC PRIVATE KEY':\n      data = asn1.ECPrivateKey.decode(data, 'der')\n      return {\n        curve: data.parameters.value,\n        privateKey: data.privateKey\n      }\n    default: throw new Error('unknown key type ' + type)\n  }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n  var salt = data.algorithm.decrypt.kde.kdeparams.salt\n  var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n  var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n  var iv = data.algorithm.decrypt.cipher.iv\n  var cipherText = data.subjectPrivateKey\n  var keylen = parseInt(algo.split('-')[1], 10) / 8\n  var key = compat.pbkdf2Sync(password, salt, iters, keylen)\n  var cipher = ciphers.createDecipheriv(algo, key, iv)\n  var out = []\n  out.push(cipher.update(cipherText))\n  out.push(cipher.final())\n  return Buffer.concat(out)\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aesid.json\":114,\"./asn1\":115,\"./fixProc\":117,\"browserify-aes\":30,\"buffer\":54,\"pbkdf2\":120}],119:[function(require,module,exports){\n(function (process){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n  return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n  var result = splitPath(path),\n      root = result[0],\n      dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n  var f = splitPath(path)[2];\n  // TODO: make this comparison case-insensitive on windows?\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\n\nexports.extname = function(path) {\n  return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\n}).call(this,require('_process'))\n},{\"_process\":126}],120:[function(require,module,exports){\n\nexports.pbkdf2 = require('./lib/async')\n\nexports.pbkdf2Sync = require('./lib/sync')\n\n},{\"./lib/async\":121,\"./lib/sync\":124}],121:[function(require,module,exports){\n(function (process,global){\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  'sha': 'SHA-1',\n  'sha-1': 'SHA-1',\n  'sha1': 'SHA-1',\n  'sha256': 'SHA-256',\n  'sha-256': 'SHA-256',\n  'sha384': 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    process.nextTick(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    process.nextTick(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n  checkParameters(iterations, keylen)\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n  if (!algo || typeof global.Promise !== 'function') {\n    return process.nextTick(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n  }\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) {\n      return browserPbkdf2(password, salt, iterations, keylen, algo)\n    } else {\n      return sync(password, salt, iterations, keylen, digest)\n    }\n  }), callback)\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./default-encoding\":122,\"./precondition\":123,\"./sync\":124,\"_process\":126,\"safe-buffer\":148}],122:[function(require,module,exports){\n(function (process){\nvar defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n  defaultEncoding = 'utf-8'\n} else {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n\n}).call(this,require('_process'))\n},{\"_process\":126}],123:[function(require,module,exports){\nvar MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\nmodule.exports = function (iterations, keylen) {\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n\n},{}],124:[function(require,module,exports){\nvar md5 = require('create-hash/md5')\nvar rmd160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n  checkParameters(iterations, keylen)\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n\n},{\"./default-encoding\":122,\"./precondition\":123,\"create-hash/md5\":60,\"ripemd160\":147,\"safe-buffer\":148,\"sha.js\":150}],125:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (!process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = nextTick;\n} else {\n  module.exports = process.nextTick;\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n}).call(this,require('_process'))\n},{\"_process\":126}],126:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],127:[function(require,module,exports){\nexports.publicEncrypt = require('./publicEncrypt');\nexports.privateDecrypt = require('./privateDecrypt');\n\nexports.privateEncrypt = function privateEncrypt(key, buf) {\n  return exports.publicEncrypt(key, buf, true);\n};\n\nexports.publicDecrypt = function publicDecrypt(key, buf) {\n  return exports.privateDecrypt(key, buf, true);\n};\n},{\"./privateDecrypt\":129,\"./publicEncrypt\":130}],128:[function(require,module,exports){\n(function (Buffer){\nvar createHash = require('create-hash');\nmodule.exports = function (seed, len) {\n  var t = new Buffer('');\n  var  i = 0, c;\n  while (t.length < len) {\n    c = i2ops(i++);\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);\n  }\n  return t.slice(0, len);\n};\n\nfunction i2ops(c) {\n  var out = new Buffer(4);\n  out.writeUInt32BE(c,0);\n  return out;\n}\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"create-hash\":58}],129:[function(require,module,exports){\n(function (Buffer){\nvar parseKeys = require('parse-asn1');\nvar mgf = require('./mgf');\nvar xor = require('./xor');\nvar bn = require('bn.js');\nvar crt = require('browserify-rsa');\nvar createHash = require('create-hash');\nvar withPublic = require('./withPublic');\nmodule.exports = function privateDecrypt(private_key, enc, reverse) {\n  var padding;\n  if (private_key.padding) {\n    padding = private_key.padding;\n  } else if (reverse) {\n    padding = 1;\n  } else {\n    padding = 4;\n  }\n\n  var key = parseKeys(private_key);\n  var k = key.modulus.byteLength();\n  if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error');\n  }\n  var msg;\n  if (reverse) {\n    msg = withPublic(new bn(enc), key);\n  } else {\n    msg = crt(enc, key);\n  }\n  var zBuffer = new Buffer(k - msg.length);\n  zBuffer.fill(0);\n  msg = Buffer.concat([zBuffer, msg], k);\n  if (padding === 4) {\n    return oaep(key, msg);\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse);\n  } else if (padding === 3) {\n    return msg;\n  } else {\n    throw new Error('unknown padding');\n  }\n};\n\nfunction oaep(key, msg){\n  var n = key.modulus;\n  var k = key.modulus.byteLength();\n  var mLen = msg.length;\n  var iHash = createHash('sha1').update(new Buffer('')).digest();\n  var hLen = iHash.length;\n  var hLen2 = 2 * hLen;\n  if (msg[0] !== 0) {\n    throw new Error('decryption error');\n  }\n  var maskedSeed = msg.slice(1, hLen + 1);\n  var maskedDb =  msg.slice(hLen + 1);\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen));\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1));\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error');\n  }\n  var i = hLen;\n  while (db[i] === 0) {\n    i++;\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error');\n  }\n  return db.slice(i);\n}\n\nfunction pkcs1(key, msg, reverse){\n  var p1 = msg.slice(0, 2);\n  var i = 2;\n  var status = 0;\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++;\n      break;\n    }\n  }\n  var ps = msg.slice(2, i - 1);\n  var p2 = msg.slice(i - 1, i);\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){\n    status++;\n  }\n  if (ps.length < 8) {\n    status++;\n  }\n  if (status) {\n    throw new Error('decryption error');\n  }\n  return  msg.slice(i);\n}\nfunction compare(a, b){\n  a = new Buffer(a);\n  b = new Buffer(b);\n  var dif = 0;\n  var len = a.length;\n  if (a.length !== b.length) {\n    dif++;\n    len = Math.min(a.length, b.length);\n  }\n  var i = -1;\n  while (++i < len) {\n    dif += (a[i] ^ b[i]);\n  }\n  return dif;\n}\n}).call(this,require(\"buffer\").Buffer)\n},{\"./mgf\":128,\"./withPublic\":131,\"./xor\":132,\"bn.js\":25,\"browserify-rsa\":46,\"buffer\":54,\"create-hash\":58,\"parse-asn1\":118}],130:[function(require,module,exports){\n(function (Buffer){\nvar parseKeys = require('parse-asn1');\nvar randomBytes = require('randombytes');\nvar createHash = require('create-hash');\nvar mgf = require('./mgf');\nvar xor = require('./xor');\nvar bn = require('bn.js');\nvar withPublic = require('./withPublic');\nvar crt = require('browserify-rsa');\n\nvar constants = {\n  RSA_PKCS1_OAEP_PADDING: 4,\n  RSA_PKCS1_PADDIN: 1,\n  RSA_NO_PADDING: 3\n};\n\nmodule.exports = function publicEncrypt(public_key, msg, reverse) {\n  var padding;\n  if (public_key.padding) {\n    padding = public_key.padding;\n  } else if (reverse) {\n    padding = 1;\n  } else {\n    padding = 4;\n  }\n  var key = parseKeys(public_key);\n  var paddedMsg;\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg);\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse);\n  } else if (padding === 3) {\n    paddedMsg = new bn(msg);\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus');\n    }\n  } else {\n    throw new Error('unknown padding');\n  }\n  if (reverse) {\n    return crt(paddedMsg, key);\n  } else {\n    return withPublic(paddedMsg, key);\n  }\n};\n\nfunction oaep(key, msg){\n  var k = key.modulus.byteLength();\n  var mLen = msg.length;\n  var iHash = createHash('sha1').update(new Buffer('')).digest();\n  var hLen = iHash.length;\n  var hLen2 = 2 * hLen;\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long');\n  }\n  var ps = new Buffer(k - mLen - hLen2 - 2);\n  ps.fill(0);\n  var dblen = k - hLen - 1;\n  var seed = randomBytes(hLen);\n  var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen));\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen));\n  return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k));\n}\nfunction pkcs1(key, msg, reverse){\n  var mLen = msg.length;\n  var k = key.modulus.byteLength();\n  if (mLen > k - 11) {\n    throw new Error('message too long');\n  }\n  var ps;\n  if (reverse) {\n    ps = new Buffer(k - mLen - 3);\n    ps.fill(0xff);\n  } else {\n    ps = nonZero(k - mLen - 3);\n  }\n  return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k));\n}\nfunction nonZero(len, crypto) {\n  var out = new Buffer(len);\n  var i = 0;\n  var cache = randomBytes(len*2);\n  var cur = 0;\n  var num;\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len*2);\n      cur = 0;\n    }\n    num = cache[cur++];\n    if (num) {\n      out[i++] = num;\n    }\n  }\n  return out;\n}\n}).call(this,require(\"buffer\").Buffer)\n},{\"./mgf\":128,\"./withPublic\":131,\"./xor\":132,\"bn.js\":25,\"browserify-rsa\":46,\"buffer\":54,\"create-hash\":58,\"parse-asn1\":118,\"randombytes\":133}],131:[function(require,module,exports){\n(function (Buffer){\nvar bn = require('bn.js');\nfunction withPublic(paddedMsg, key) {\n  return new Buffer(paddedMsg\n    .toRed(bn.mont(key.modulus))\n    .redPow(new bn(key.publicExponent))\n    .fromRed()\n    .toArray());\n}\n\nmodule.exports = withPublic;\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":25,\"buffer\":54}],132:[function(require,module,exports){\nmodule.exports = function xor(a, b) {\n  var len = a.length;\n  var i = -1;\n  while (++i < len) {\n    a[i] ^= b[i];\n  }\n  return a\n};\n},{}],133:[function(require,module,exports){\n(function (process,global){\n'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > 65536) throw new Error('requested too many random bytes')\n  // in case browserify  isn't using the Uint8Array version\n  var rawBytes = new global.Uint8Array(size)\n\n  // This will not work in older browsers.\n  // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    crypto.getRandomValues(rawBytes)\n  }\n\n  // XXX: phantomjs doesn't like a buffer being passed here\n  var bytes = Buffer.from(rawBytes.buffer)\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":126,\"safe-buffer\":148}],134:[function(require,module,exports){\nmodule.exports = require('./lib/_stream_duplex.js');\n\n},{\"./lib/_stream_duplex.js\":135}],135:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\nvar keys = objectKeys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n  var method = keys[v];\n  if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  processNextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  processNextTick(cb, err);\n};\n\nfunction forEach(xs, f) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    f(xs[i], i);\n  }\n}\n},{\"./_stream_readable\":137,\"./_stream_writable\":139,\"core-util-is\":56,\"inherits\":108,\"process-nextick-args\":125}],136:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};\n},{\"./_stream_transform\":138,\"core-util-is\":56,\"inherits\":108}],137:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n// TODO(bmeurer): Change this back to const once hole checks are\n// properly optimized away early in Ignition+TurboFan.\n/*<replacement>*/\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') {\n    return emitter.prependListener(event, fn);\n  } else {\n    // This is a hack to make sure that our error handler is attached before any\n    // userland ones.  NEVER DO THIS. This is here only because this code needs\n    // to continue to work with older versions of Node.js that do not include\n    // the prependListener() method. The goal is to eventually remove this hack.\n    if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n  }\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    processNextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, unpipeInfo);\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        processNextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    processNextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var state = this._readableState;\n  var paused = false;\n\n  var self = this;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) self.push(chunk);\n    }\n\n    self.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = self.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  self._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    processNextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction forEach(xs, f) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    f(xs[i], i);\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./_stream_duplex\":135,\"./internal/streams/BufferList\":140,\"./internal/streams/destroy\":141,\"./internal/streams/stream\":142,\"_process\":126,\"core-util-is\":56,\"events\":90,\"inherits\":108,\"isarray\":110,\"process-nextick-args\":125,\"safe-buffer\":148,\"string_decoder/\":158,\"util\":27}],138:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction TransformState(stream) {\n  this.afterTransform = function (er, data) {\n    return afterTransform(stream, er, data);\n  };\n\n  this.needTransform = false;\n  this.transforming = false;\n  this.writecb = null;\n  this.writechunk = null;\n  this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n  var ts = stream._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return stream.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data !== null && data !== undefined) stream.push(data);\n\n  cb(er);\n\n  var rs = stream._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    stream._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = new TransformState(this);\n\n  var stream = this;\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.once('prefinish', function () {\n    if (typeof this._flush === 'function') this._flush(function (er, data) {\n      done(stream, er, data);\n    });else done(stream);\n  });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data !== null && data !== undefined) stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  var ws = stream._writableState;\n  var ts = stream._transformState;\n\n  if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}\n},{\"./_stream_duplex\":135,\"core-util-is\":56,\"inherits\":108}],139:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  processNextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    processNextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = _isUint8Array(chunk) && !state.objectMode;\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    processNextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    processNextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequestCount = 0;\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      processNextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) processNextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n  if (state.corkedRequestsFree) {\n    state.corkedRequestsFree.next = corkReq;\n  } else {\n    state.corkedRequestsFree = corkReq;\n  }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./_stream_duplex\":135,\"./internal/streams/destroy\":141,\"./internal/streams/stream\":142,\"_process\":126,\"core-util-is\":56,\"inherits\":108,\"process-nextick-args\":125,\"safe-buffer\":148,\"util-deprecate\":159}],140:[function(require,module,exports){\n'use strict';\n\n/*<replacement>*/\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    if (this.length === 1) return this.head.data;\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n},{\"safe-buffer\":148}],141:[function(require,module,exports){\n'use strict';\n\n/*<replacement>*/\n\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n      processNextTick(emitErrorNT, this, err);\n    }\n    return;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      processNextTick(emitErrorNT, _this, err);\n      if (_this._writableState) {\n        _this._writableState.errorEmitted = true;\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};\n},{\"process-nextick-args\":125}],142:[function(require,module,exports){\nmodule.exports = require('events').EventEmitter;\n\n},{\"events\":90}],143:[function(require,module,exports){\nmodule.exports = require('./readable').PassThrough\n\n},{\"./readable\":144}],144:[function(require,module,exports){\nexports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n\n},{\"./lib/_stream_duplex.js\":135,\"./lib/_stream_passthrough.js\":136,\"./lib/_stream_readable.js\":137,\"./lib/_stream_transform.js\":138,\"./lib/_stream_writable.js\":139}],145:[function(require,module,exports){\nmodule.exports = require('./readable').Transform\n\n},{\"./readable\":144}],146:[function(require,module,exports){\nmodule.exports = require('./lib/_stream_writable.js');\n\n},{\"./lib/_stream_writable.js\":139}],147:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var m = new Array(16)\n  for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)\n\n  var al = this._a\n  var bl = this._b\n  var cl = this._c\n  var dl = this._d\n  var el = this._e\n\n  // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n  // K = 0x00000000\n  // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8\n  al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)\n  el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)\n  dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)\n  cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)\n  bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)\n  al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)\n  el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)\n  dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)\n  cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)\n  bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)\n  al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)\n  el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)\n  dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)\n  cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)\n  bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)\n  al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)\n\n  // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8\n  // K = 0x5a827999\n  // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12\n  el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)\n  dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)\n  cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)\n  bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)\n  al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)\n  el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)\n  dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)\n  cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)\n  bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)\n  al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)\n  el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)\n  dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)\n  cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)\n  bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)\n  al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)\n  el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)\n\n  // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12\n  // K = 0x6ed9eba1\n  // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5\n  dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)\n  cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)\n  bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)\n  al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)\n  el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)\n  dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)\n  cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)\n  bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)\n  al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)\n  el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)\n  dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)\n  cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)\n  bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)\n  al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)\n  el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)\n  dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)\n\n  // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2\n  // K = 0x8f1bbcdc\n  // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12\n  cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)\n  bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)\n  al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)\n  el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)\n  dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)\n  cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)\n  bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)\n  al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)\n  el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)\n  dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)\n  cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)\n  bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)\n  al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)\n  el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)\n  dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)\n  cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)\n\n  // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n  // K = 0xa953fd4e\n  // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n  bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)\n  al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)\n  el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)\n  dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)\n  cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)\n  bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)\n  al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)\n  el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)\n  dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)\n  cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)\n  bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)\n  al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)\n  el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)\n  dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)\n  cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)\n  bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)\n\n  var ar = this._a\n  var br = this._b\n  var cr = this._c\n  var dr = this._d\n  var er = this._e\n\n  // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12\n  // K' = 0x50a28be6\n  // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6\n  ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)\n  er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)\n  dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)\n  cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)\n  br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)\n  ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)\n  er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)\n  dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)\n  cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)\n  br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)\n  ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)\n  er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)\n  dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)\n  cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)\n  br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)\n  ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)\n\n  // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2\n  // K' = 0x5c4dd124\n  // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11\n  er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)\n  dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)\n  cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)\n  br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)\n  ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)\n  er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)\n  dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)\n  cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)\n  br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)\n  ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)\n  er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)\n  dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)\n  cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)\n  br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)\n  ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)\n  er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)\n\n  // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13\n  // K' = 0x6d703ef3\n  // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5\n  dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)\n  cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)\n  br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)\n  ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)\n  er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)\n  dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)\n  cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)\n  br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)\n  ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)\n  er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)\n  dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)\n  cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)\n  br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)\n  ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)\n  er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)\n  dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)\n\n  // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14\n  // K' = 0x7a6d76e9\n  // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8\n  cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)\n  br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)\n  ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)\n  er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)\n  dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)\n  cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)\n  br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)\n  ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)\n  er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)\n  dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)\n  cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)\n  br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)\n  ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)\n  er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)\n  dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)\n  cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)\n\n  // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n  // K' = 0x00000000\n  // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n  br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)\n  ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)\n  er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)\n  dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)\n  cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)\n  br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)\n  ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)\n  er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)\n  dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)\n  cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)\n  br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)\n  ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)\n  er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)\n  dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)\n  cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)\n  br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)\n\n  // change state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"hash-base\":92,\"inherits\":108}],148:[function(require,module,exports){\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":54}],149:[function(require,module,exports){\n(function (Buffer){\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = new Buffer(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n  this._s = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = new Buffer(data, enc)\n  }\n\n  var l = this._len += data.length\n  var s = this._s || 0\n  var f = 0\n  var buffer = this._block\n\n  while (s < l) {\n    var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))\n    var ch = (t - f)\n\n    for (var i = 0; i < ch; i++) {\n      buffer[(s % this._blockSize) + i] = data[i + f]\n    }\n\n    s += ch\n    f += ch\n\n    if ((s % this._blockSize) === 0) {\n      this._update(buffer)\n    }\n  }\n  this._s = s\n\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  // Suppose the length of the message M, in bits, is l\n  var l = this._len * 8\n\n  // Append the bit 1 to the end of the message\n  this._block[this._len % this._blockSize] = 0x80\n\n  // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize\n  this._block.fill(0, this._len % this._blockSize + 1)\n\n  if (l % (this._blockSize * 8) >= this._finalSize * 8) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  // to this append the block which is equal to the number l written in binary\n  // TODO: handle case where l is > Math.pow(2, 29)\n  this._block.writeInt32BE(l, this._blockSize - 4)\n\n  var hash = this._update(this._block) || this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],150:[function(require,module,exports){\nvar exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n\n},{\"./sha\":151,\"./sha1\":152,\"./sha224\":153,\"./sha256\":154,\"./sha384\":155,\"./sha512\":156}],151:[function(require,module,exports){\n(function (Buffer){\n/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = new Buffer(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"buffer\":54,\"inherits\":108}],152:[function(require,module,exports){\n(function (Buffer){\n/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = new Buffer(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"buffer\":54,\"inherits\":108}],153:[function(require,module,exports){\n(function (Buffer){\n/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = new Buffer(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"./sha256\":154,\"buffer\":54,\"inherits\":108}],154:[function(require,module,exports){\n(function (Buffer){\n/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = new Buffer(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"buffer\":54,\"inherits\":108}],155:[function(require,module,exports){\n(function (Buffer){\nvar inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = new Buffer(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"./sha512\":156,\"buffer\":54,\"inherits\":108}],156:[function(require,module,exports){\n(function (Buffer){\nvar inherits = require('inherits')\nvar Hash = require('./hash')\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = new Buffer(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"buffer\":54,\"inherits\":108}],157:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n\n},{\"events\":90,\"inherits\":108,\"readable-stream/duplex.js\":134,\"readable-stream/passthrough.js\":143,\"readable-stream/readable.js\":144,\"readable-stream/transform.js\":145,\"readable-stream/writable.js\":146}],158:[function(require,module,exports){\n'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return -1;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// UTF-8 replacement characters ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd'.repeat(p);\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd'.repeat(p + 1);\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd'.repeat(p + 2);\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character for each buffered byte of a (partial)\n// character needs to be added to the output.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd'.repeat(this.lastTotal - this.lastNeed);\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n},{\"safe-buffer\":148}],159:[function(require,module,exports){\n(function (global){\n\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],160:[function(require,module,exports){\nvar indexOf = require('indexof');\n\nvar Object_keys = function (obj) {\n    if (Object.keys) return Object.keys(obj)\n    else {\n        var res = [];\n        for (var key in obj) res.push(key)\n        return res;\n    }\n};\n\nvar forEach = function (xs, fn) {\n    if (xs.forEach) return xs.forEach(fn)\n    else for (var i = 0; i < xs.length; i++) {\n        fn(xs[i], i, xs);\n    }\n};\n\nvar defineProp = (function() {\n    try {\n        Object.defineProperty({}, '_', {});\n        return function(obj, name, value) {\n            Object.defineProperty(obj, name, {\n                writable: true,\n                enumerable: false,\n                configurable: true,\n                value: value\n            })\n        };\n    } catch(e) {\n        return function(obj, name, value) {\n            obj[name] = value;\n        };\n    }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n    if (!(this instanceof Script)) return new Script(code);\n    this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n    if (!(context instanceof Context)) {\n        throw new TypeError(\"needs a 'context' argument.\");\n    }\n\n    var iframe = document.createElement('iframe');\n    if (!iframe.style) iframe.style = {};\n    iframe.style.display = 'none';\n\n    document.body.appendChild(iframe);\n\n    var win = iframe.contentWindow;\n    var wEval = win.eval, wExecScript = win.execScript;\n\n    if (!wEval && wExecScript) {\n        // win.eval() magically appears when this is called in IE:\n        wExecScript.call(win, 'null');\n        wEval = win.eval;\n    }\n\n    forEach(Object_keys(context), function (key) {\n        win[key] = context[key];\n    });\n    forEach(globals, function (key) {\n        if (context[key]) {\n            win[key] = context[key];\n        }\n    });\n\n    var winKeys = Object_keys(win);\n\n    var res = wEval.call(win, this.code);\n\n    forEach(Object_keys(win), function (key) {\n        // Avoid copying circular objects like `top` and `window` by only\n        // updating existing context properties or new properties in the `win`\n        // that was only introduced after the eval.\n        if (key in context || indexOf(winKeys, key) === -1) {\n            context[key] = win[key];\n        }\n    });\n\n    forEach(globals, function (key) {\n        if (!(key in context)) {\n            defineProp(context, key, win[key]);\n        }\n    });\n\n    document.body.removeChild(iframe);\n\n    return res;\n};\n\nScript.prototype.runInThisContext = function () {\n    return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n    var ctx = Script.createContext(context);\n    var res = this.runInContext(ctx);\n\n    forEach(Object_keys(ctx), function (key) {\n        context[key] = ctx[key];\n    });\n\n    return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n    exports[name] = Script[name] = function (code) {\n        var s = Script(code);\n        return s[name].apply(s, [].slice.call(arguments, 1));\n    };\n});\n\nexports.createScript = function (code) {\n    return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n    var copy = new Context();\n    if(typeof context === 'object') {\n        forEach(Object_keys(context), function (key) {\n            copy[key] = context[key];\n        });\n    }\n    return copy;\n};\n\n},{\"indexof\":107}]},{},[1]);\n\nfunction parseEpt(event) {\n\tlet buffer = event.data.buffer;\n\tlet view = new DataView(buffer);\n\tlet schema = event.data.schema;\n\tlet scale = event.data.scale;\n\tlet offset = event.data.offset;\n\tlet mins = event.data.mins;\n\n\tlet dimensions = schema.reduce((p, c) => {\n\t\tp[c.name] = c;\n\t\treturn p;\n\t}, { });\n\n\tlet dimOffset = (name) => {\n\t\tlet offset = 0;\n\t\tfor (var i = 0; i < schema.length; ++i) {\n\t\t\tif (schema[i].name == name) return offset;\n\t\t\toffset += schema[i].size;\n\t\t}\n\t\treturn undefined;\n\t};\n\n\tlet getExtractor = (name) => {\n\t\tlet offset = dimOffset(name);\n\t\tlet type = dimensions[name].type;\n\t\tlet size = dimensions[name].size;\n\n\t\tif (type == 'signed') switch (size) {\n\t\t\tcase 1: return (p) => view.getInt8(p + offset);\n\t\t\tcase 2: return (p) => view.getInt16(p + offset, true);\n\t\t\tcase 4: return (p) => view.getInt32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getInt64(p + offset, true);\n\t\t}\n\t\tif (type == 'unsigned') switch (size) {\n\t\t\tcase 1: return (p) => view.getUint8(p + offset);\n\t\t\tcase 2: return (p) => view.getUint16(p + offset, true);\n\t\t\tcase 4: return (p) => view.getUint32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getUint64(p + offset, true);\n\t\t}\n\t\tif (type == 'float') switch (size) {\n\t\t\tcase 4: return (p) => view.getFloat32(p + offset, true);\n\t\t\tcase 8: return (p) => view.getFloat64(p + offset, true);\n\t\t}\n\n\t\tlet str = JSON.stringify(dimensions[name]);\n\t\tthrow new Error(`Invalid dimension specification for ${name}: ${str}`);\n\t};\n\n\tlet pointSize = schema.reduce((p, c) => p + c.size, 0);\n\tlet numPoints = buffer.byteLength / pointSize;\n\n\tlet xyzBuffer, rgbBuffer, intensityBuffer, classificationBuffer,\n\t\treturnNumberBuffer, numberOfReturnsBuffer, pointSourceIdBuffer;\n\tlet xyz, rgb, intensity, classification, returnNumber, numberOfReturns,\n\t\tpointSourceId;\n\tlet xyzExtractor, rgbExtractor, intensityExtractor, classificationExtractor,\n\t\treturnNumberExtractor, numberOfReturnsExtractor, pointSourceIdExtractor;\n\tlet twoByteColor = false;\n\n\tif (dimensions['X'] && dimensions['Y'] && dimensions['Z']) {\n\t\txyzBuffer = new ArrayBuffer(numPoints * 4 * 3);\n\t\txyz = new Float32Array(xyzBuffer);\n\t\txyzExtractor = [\n\t\t\tgetExtractor('X'),\n\t\t\tgetExtractor('Y'),\n\t\t\tgetExtractor('Z')\n\t\t];\n\t}\n\n\tif (dimensions['Red'] && dimensions['Green'] && dimensions['Blue']) {\n\t\trgbBuffer = new ArrayBuffer(numPoints * 4);\n\t\trgb = new Uint8Array(rgbBuffer);\n\t\trgbExtractor = [\n\t\t\tgetExtractor('Red'),\n\t\t\tgetExtractor('Green'),\n\t\t\tgetExtractor('Blue')\n\t\t];\n\n\t\tlet r, g, b, pos;\n\t\tfor (let i = 0; i < numPoints && !twoByteColor; ++i) {\n\t\t\tpos = i * pointSize;\n\t\t\tr = rgbExtractor[0](pos);\n\t\t\tg = rgbExtractor[1](pos);\n\t\t\tb = rgbExtractor[2](pos);\n\t\t\tif (r > 255 || g > 255 || b > 255) twoByteColor = true;\n\t\t}\n\t}\n\n\tif (dimensions['Intensity']) {\n\t\tintensityBuffer = new ArrayBuffer(numPoints * 4);\n\t\tintensity = new Float32Array(intensityBuffer);\n\t\tintensityExtractor = getExtractor('Intensity');\n\t}\n\n\tif (dimensions['Classification']) {\n\t\tclassificationBuffer = new ArrayBuffer(numPoints);\n\t\tclassification = new Uint8Array(classificationBuffer);\n\t\tclassificationExtractor = getExtractor('Classification');\n\t}\n\n\tif (dimensions['ReturnNumber']) {\n\t\treturnNumberBuffer = new ArrayBuffer(numPoints);\n\t\treturnNumber = new Uint8Array(returnNumberBuffer);\n\t\treturnNumberExtractor = getExtractor('ReturnNumber');\n\t}\n\n\tif (dimensions['NumberOfReturns']) {\n\t\tnumberOfReturnsBuffer = new ArrayBuffer(numPoints);\n\t\tnumberOfReturns = new Uint8Array(numberOfReturnsBuffer);\n\t\tnumberOfReturnsExtractor = getExtractor('NumberOfReturns');\n\t}\n\n\tif (dimensions['PointSourceId']) {\n\t\tpointSourceIdBuffer = new ArrayBuffer(numPoints * 2);\n\t\tpointSourceId = new Uint16Array(pointSourceIdBuffer);\n\t\tpointSourceIdExtractor = getExtractor('PointSourceId');\n\t}\n\n\tlet mean = [0, 0, 0];\n\tlet bounds = {\n\t\tmin: [Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE],\n\t\tmax: [-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE],\n\t};\n\n\tlet x, y, z, r, g, b;\n\tfor (let i = 0; i < numPoints; ++i) {\n\t\tlet pos = i * pointSize;\n\t\tif (xyz) {\n\t\t\tx = xyzExtractor[0](pos) * scale.x + offset.x - mins[0];\n\t\t\ty = xyzExtractor[1](pos) * scale.y + offset.y - mins[1];\n\t\t\tz = xyzExtractor[2](pos) * scale.z + offset.z - mins[2];\n\n\t\t\tmean[0] += x / numPoints;\n\t\t\tmean[1] += y / numPoints;\n\t\t\tmean[2] += z / numPoints;\n\n\t\t\tbounds.min[0] = Math.min(bounds.min[0], x);\n\t\t\tbounds.min[1] = Math.min(bounds.min[1], y);\n\t\t\tbounds.min[2] = Math.min(bounds.min[2], z);\n\n\t\t\tbounds.max[0] = Math.max(bounds.max[0], x);\n\t\t\tbounds.max[1] = Math.max(bounds.max[1], y);\n\t\t\tbounds.max[2] = Math.max(bounds.max[2], z);\n\n\t\t\txyz[3 * i + 0] = x;\n\t\t\txyz[3 * i + 1] = y;\n\t\t\txyz[3 * i + 2] = z;\n\t\t}\n\n\t\tif (rgb) {\n\t\t\tr = rgbExtractor[0](pos);\n\t\t\tg = rgbExtractor[1](pos);\n\t\t\tb = rgbExtractor[2](pos);\n\n\t\t\tif (twoByteColor) {\n\t\t\t\tr /= 256;\n\t\t\t\tg /= 256;\n\t\t\t\tb /= 256;\n\t\t\t}\n\n\t\t\trgb[4 * i + 0] = r;\n\t\t\trgb[4 * i + 1] = g;\n\t\t\trgb[4 * i + 2] = b;\n\t\t}\n\n\t\tif (intensity) intensity[i] = intensityExtractor(pos);\n\t\tif (classification) classification[i] = classificationExtractor(pos);\n\t\tif (returnNumber) returnNumber[i] = returnNumberExtractor(pos);\n\t\tif (numberOfReturns) numberOfReturns[i] = numberOfReturnsExtractor(pos);\n\t\tif (pointSourceId) pointSourceId[i] = pointSourceIdExtractor(pos);\n\t}\n\n\tlet indicesBuffer = new ArrayBuffer(numPoints * 4);\n\tlet indices = new Uint32Array(indicesBuffer);\n\tfor (let i = 0; i < numPoints; ++i) {\n\t\tindices[i] = i;\n\t}\n\n\tlet message = {\n\t\tnumPoints: numPoints,\n\t\ttightBoundingBox: bounds,\n\t\tmean: mean,\n\n\t\tposition: xyzBuffer,\n\t\tcolor: rgbBuffer,\n\t\tintensity: intensityBuffer,\n\t\tclassification: classificationBuffer,\n\t\treturnNumber: returnNumberBuffer,\n\t\tnumberOfReturns: numberOfReturnsBuffer,\n\t\tpointSourceId: pointSourceIdBuffer,\n\t\tindices: indicesBuffer\n\t};\n\n\tlet transferables = [\n\t\tmessage.position,\n\t\tmessage.color,\n\t\tmessage.intensity,\n\t\tmessage.classification,\n\t\tmessage.returnNumber,\n\t\tmessage.numberOfReturns,\n\t\tmessage.pointSourceId,\n\t\tmessage.indices\n\t].filter((v) => v);\n\n\tpostMessage(message, transferables);\n}\n\n\n// window = { };\n// document = { };\n// importScripts('/libs/zstd-codec/bundle.js', '/libs/ept/ParseBuffer.js');\n\nonmessage = async function(event) {\n\t\n\tconst zstd = await new Promise(resolve => window.ZstdCodec.run(resolve));\n\t\n\tconst streaming = new zstd.Streaming();\n\tconst arr = new Uint8Array(event.data.buffer);\n\tconst decompressed = streaming.decompress(arr);\n\n\tevent.data.buffer = decompressed.buffer\n\tparseEpt(event);\n\t\n};\n\n"
  },
  {
    "path": "libs/potree/workers/LASDecoderWorker.js",
    "content": "\nfunction readUsingTempArrays(event) {\n\n\tperformance.mark(\"laslaz-start\");\n\n\tlet buffer = event.data.buffer;\n\tlet numPoints = event.data.numPoints;\n\tlet sourcePointSize = event.data.pointSize;\n\tlet pointFormatID = event.data.pointFormatID;\n\tlet scale = event.data.scale;\n\tlet offset = event.data.offset;\n\n\tlet temp = new ArrayBuffer(4);\n\tlet tempUint8 = new Uint8Array(temp);\n\tlet tempUint16 = new Uint16Array(temp);\n\tlet tempInt32 = new Int32Array(temp);\n\tlet sourceUint8 = new Uint8Array(buffer);\n\n\tlet tightBoundingBox = {\n\t\tmin: [ Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY ],\n\t\tmax: [ Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY ]\n\t};\n\n\tlet mean = [0, 0, 0];\n\n\tlet pBuff = new ArrayBuffer(numPoints * 3 * 4);\n\tlet cBuff = new ArrayBuffer(numPoints * 4);\n\tlet iBuff = new ArrayBuffer(numPoints * 4);\n\tlet clBuff = new ArrayBuffer(numPoints);\n\tlet rnBuff = new ArrayBuffer(numPoints);\n\tlet nrBuff = new ArrayBuffer(numPoints);\n\tlet psBuff = new ArrayBuffer(numPoints * 2);\n\n\tlet positions = new Float32Array(pBuff);\n\tlet colors = new Uint8Array(cBuff);\n\tlet intensities = new Float32Array(iBuff);\n\tlet classifications = new Uint8Array(clBuff);\n\tlet returnNumbers = new Uint8Array(rnBuff);\n\tlet numberOfReturns = new Uint8Array(nrBuff);\n\tlet pointSourceIDs = new Uint16Array(psBuff);\n\n\tfor (let i = 0; i < numPoints; i++) {\n\t\t// POSITION\n\t\ttempUint8[0] = sourceUint8[i * sourcePointSize + 0];\n\t\ttempUint8[1] = sourceUint8[i * sourcePointSize + 1];\n\t\ttempUint8[2] = sourceUint8[i * sourcePointSize + 2];\n\t\ttempUint8[3] = sourceUint8[i * sourcePointSize + 3];\n\t\tlet x = tempInt32[0];\n\n\t\ttempUint8[0] = sourceUint8[i * sourcePointSize + 4];\n\t\ttempUint8[1] = sourceUint8[i * sourcePointSize + 5];\n\t\ttempUint8[2] = sourceUint8[i * sourcePointSize + 6];\n\t\ttempUint8[3] = sourceUint8[i * sourcePointSize + 7];\n\t\tlet y = tempInt32[0];\n\n\t\ttempUint8[0] = sourceUint8[i * sourcePointSize + 8];\n\t\ttempUint8[1] = sourceUint8[i * sourcePointSize + 9];\n\t\ttempUint8[2] = sourceUint8[i * sourcePointSize + 10];\n\t\ttempUint8[3] = sourceUint8[i * sourcePointSize + 11];\n\t\tlet z = tempInt32[0];\n\n\t\tx = x * scale[0] + offset[0] - event.data.mins[0];\n\t\ty = y * scale[1] + offset[1] - event.data.mins[1];\n\t\tz = z * scale[2] + offset[2] - event.data.mins[2];\n\n\t\tpositions[3 * i + 0] = x;\n\t\tpositions[3 * i + 1] = y;\n\t\tpositions[3 * i + 2] = z;\n\n\t\tmean[0] += x / numPoints;\n\t\tmean[1] += y / numPoints;\n\t\tmean[2] += z / numPoints;\n\n\t\ttightBoundingBox.min[0] = Math.min(tightBoundingBox.min[0], x);\n\t\ttightBoundingBox.min[1] = Math.min(tightBoundingBox.min[1], y);\n\t\ttightBoundingBox.min[2] = Math.min(tightBoundingBox.min[2], z);\n\n\t\ttightBoundingBox.max[0] = Math.max(tightBoundingBox.max[0], x);\n\t\ttightBoundingBox.max[1] = Math.max(tightBoundingBox.max[1], y);\n\t\ttightBoundingBox.max[2] = Math.max(tightBoundingBox.max[2], z);\n\n\t\t// INTENSITY\n\t\ttempUint8[0] = sourceUint8[i * sourcePointSize + 12];\n\t\ttempUint8[1] = sourceUint8[i * sourcePointSize + 13];\n\t\tlet intensity = tempUint16[0];\n\t\tintensities[i] = intensity;\n\n\t\t// RETURN NUMBER, stored in the first 3 bits - 00000111\n\t\tlet returnNumber = sourceUint8[i * sourcePointSize + 14] & 0b111;\n\t\treturnNumbers[i] = returnNumber;\n\n\t\t// NUMBER OF RETURNS, stored in 00111000\n\t\tnumberOfReturns[i] = (sourceUint8[i * pointSize + 14] & 0b111000) >> 3;\n\n\t\tdebugger;\n\n\t\t// CLASSIFICATION\n\t\tlet classification = sourceUint8[i * sourcePointSize + 15];\n\t\tclassifications[i] = classification;\n\n\t\t// POINT SOURCE ID\n\t\ttempUint8[0] = sourceUint8[i * sourcePointSize + 18];\n\t\ttempUint8[1] = sourceUint8[i * sourcePointSize + 19];\n\t\tlet pointSourceID = tempUint16[0];\n\t\tpointSourceIDs[i] = pointSourceID;\n\n\t\t// COLOR, if available\n\t\tif (pointFormatID === 2) {\n\t\t\ttempUint8[0] = sourceUint8[i * sourcePointSize + 20];\n\t\t\ttempUint8[1] = sourceUint8[i * sourcePointSize + 21];\n\t\t\tlet r = tempUint16[0];\n\n\t\t\ttempUint8[0] = sourceUint8[i * sourcePointSize + 22];\n\t\t\ttempUint8[1] = sourceUint8[i * sourcePointSize + 23];\n\t\t\tlet g = tempUint16[0];\n\n\t\t\ttempUint8[0] = sourceUint8[i * sourcePointSize + 24];\n\t\t\ttempUint8[1] = sourceUint8[i * sourcePointSize + 25];\n\t\t\tlet b = tempUint16[0];\n\n\t\t\tr = r / 256;\n\t\t\tg = g / 256;\n\t\t\tb = b / 256;\n\t\t\tcolors[4 * i + 0] = r;\n\t\t\tcolors[4 * i + 1] = g;\n\t\t\tcolors[4 * i + 2] = b;\n\n\t\t}\n\t}\n\n\tlet indices = new ArrayBuffer(numPoints * 4);\n\tlet iIndices = new Uint32Array(indices);\n\tfor (let i = 0; i < numPoints; i++) {\n\t\tiIndices[i] = i;\n\t}\n\n\tperformance.mark(\"laslaz-end\");\n\tperformance.measure(\"laslaz\", \"laslaz-start\", \"laslaz-end\");\n\n\tlet measure = performance.getEntriesByType(\"measure\")[0];\n\tlet dpp = 1000 * measure.duration / numPoints;\n\tlet debugMessage = `${measure.duration.toFixed(3)} ms, ${numPoints} points, ${dpp.toFixed(3)} micros / point`;\n\tconsole.log(debugMessage);\n\n\tperformance.clearMarks();\n\tperformance.clearMeasures();\n\n\tlet message = {\n\t\tmean: mean,\n\t\tposition: pBuff,\n\t\tcolor: cBuff,\n\t\tintensity: iBuff,\n\t\tclassification: clBuff,\n\t\treturnNumber: rnBuff,\n\t\tnumberOfReturns: nrBuff,\n\t\tpointSourceID: psBuff,\n\t\ttightBoundingBox: tightBoundingBox,\n\t\tindices: indices\n\t};\n\n\tlet transferables = [\n\t\tmessage.position,\n\t\tmessage.color,\n\t\tmessage.intensity,\n\t\tmessage.classification,\n\t\tmessage.returnNumber,\n\t\tmessage.numberOfReturns,\n\t\tmessage.pointSourceID,\n\t\tmessage.indices];\n\n\tdebugger;\n\n\tpostMessage(message, transferables);\n};\n\n\nfunction readUsingDataView(event) {\n\n\tperformance.mark(\"laslaz-start\");\n\n\tlet buffer = event.data.buffer;\n\tlet numPoints = event.data.numPoints;\n\tlet sourcePointSize = event.data.pointSize;\n\tlet pointFormatID = event.data.pointFormatID;\n\tlet scale = event.data.scale;\n\tlet offset = event.data.offset;\n\n\tlet sourceView = new DataView(buffer);\n\n\tlet tightBoundingBox = {\n\t\tmin: [Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE],\n\t\tmax: [-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE]\n\t};\n\n\tlet mean = [0, 0, 0];\n\n\tlet pBuff = new ArrayBuffer(numPoints * 3 * 4);\n\tlet cBuff = new ArrayBuffer(numPoints * 4);\n\tlet iBuff = new ArrayBuffer(numPoints * 4);\n\tlet clBuff = new ArrayBuffer(numPoints);\n\tlet rnBuff = new ArrayBuffer(numPoints);\n\tlet nrBuff = new ArrayBuffer(numPoints);\n\tlet psBuff = new ArrayBuffer(numPoints * 2);\n\n\tlet positions = new Float32Array(pBuff);\n\tlet colors = new Uint8Array(cBuff);\n\tlet intensities = new Float32Array(iBuff);\n\tlet classifications = new Uint8Array(clBuff);\n\tlet returnNumbers = new Uint8Array(rnBuff);\n\tlet numberOfReturns = new Uint8Array(nrBuff);\n\tlet pointSourceIDs = new Uint16Array(psBuff);\n\t\n\tconst rangeIntensity = [Infinity, -Infinity];\n\tconst rangeClassification = [Infinity, -Infinity];\n\tconst rangeReturnNumber = [Infinity, -Infinity];\n\tconst rangeNumberOfReturns = [Infinity, -Infinity];\n\tconst rangeSourceID = [Infinity, -Infinity];\n\n\tfor (let i = 0; i < numPoints; i++) {\n\t\t// POSITION\n\t\tlet ux = sourceView.getInt32(i * sourcePointSize + 0, true);\n\t\tlet uy = sourceView.getInt32(i * sourcePointSize + 4, true);\n\t\tlet uz = sourceView.getInt32(i * sourcePointSize + 8, true);\n\n\t\tx = ux * scale[0] + offset[0] - event.data.mins[0];\n\t\ty = uy * scale[1] + offset[1] - event.data.mins[1];\n\t\tz = uz * scale[2] + offset[2] - event.data.mins[2];\n\n\t\tpositions[3 * i + 0] = x;\n\t\tpositions[3 * i + 1] = y;\n\t\tpositions[3 * i + 2] = z;\n\n\t\tmean[0] += x / numPoints;\n\t\tmean[1] += y / numPoints;\n\t\tmean[2] += z / numPoints;\n\n\t\ttightBoundingBox.min[0] = Math.min(tightBoundingBox.min[0], x);\n\t\ttightBoundingBox.min[1] = Math.min(tightBoundingBox.min[1], y);\n\t\ttightBoundingBox.min[2] = Math.min(tightBoundingBox.min[2], z);\n\n\t\ttightBoundingBox.max[0] = Math.max(tightBoundingBox.max[0], x);\n\t\ttightBoundingBox.max[1] = Math.max(tightBoundingBox.max[1], y);\n\t\ttightBoundingBox.max[2] = Math.max(tightBoundingBox.max[2], z);\n\n\t\t// INTENSITY\n\t\tlet intensity = sourceView.getUint16(i * sourcePointSize + 12, true);\n\t\tintensities[i] = intensity;\n\t\trangeIntensity[0] = Math.min(rangeIntensity[0], intensity);\n\t\trangeIntensity[1] = Math.max(rangeIntensity[1], intensity);\n\n\t\t// RETURN NUMBER, stored in the first 3 bits - 00000111\n\t\t// number of returns stored in next 3 bits   - 00111000\n\t\tlet returnNumberAndNumberOfReturns = sourceView.getUint8(i * sourcePointSize + 14, true);\n\t\tlet returnNumber = returnNumberAndNumberOfReturns & 0b0111;\n\t\tlet numberOfReturn = (returnNumberAndNumberOfReturns & 0b00111000) >> 3;\n\t\treturnNumbers[i] = returnNumber;\n\t\tnumberOfReturns[i] = numberOfReturn;\n\t\trangeReturnNumber[0] = Math.min(rangeReturnNumber[0], returnNumber);\n\t\trangeReturnNumber[1] = Math.max(rangeReturnNumber[1], returnNumber);\n\t\trangeNumberOfReturns[0] = Math.min(rangeNumberOfReturns[0], numberOfReturn);\n\t\trangeNumberOfReturns[1] = Math.max(rangeNumberOfReturns[1], numberOfReturn);\n\n\t\t// CLASSIFICATION\n\t\tlet classification = sourceView.getUint8(i * sourcePointSize + 15, true);\n\t\tclassifications[i] = classification;\n\t\trangeClassification[0] = Math.min(rangeClassification[0], classification);\n\t\trangeClassification[1] = Math.max(rangeClassification[1], classification);\n\n\t\t// POINT SOURCE ID\n\t\tlet pointSourceID = sourceView.getUint16(i * sourcePointSize + 18, true);\n\t\tpointSourceIDs[i] = pointSourceID;\n\t\trangeSourceID[0] = Math.min(rangeSourceID[0], pointSourceID);\n\t\trangeSourceID[1] = Math.max(rangeSourceID[1], pointSourceID);\n\n\t\t// COLOR, if available\n\t\tif (pointFormatID === 2) {\n\t\t\tlet r = sourceView.getUint16(i * sourcePointSize + 20, true) / 256;\n\t\t\tlet g = sourceView.getUint16(i * sourcePointSize + 22, true) / 256;\n\t\t\tlet b = sourceView.getUint16(i * sourcePointSize + 24, true) / 256;\n\n\t\t\tcolors[4 * i + 0] = r;\n\t\t\tcolors[4 * i + 1] = g;\n\t\t\tcolors[4 * i + 2] = b;\n\t\t\tcolors[4 * i + 3] = 255;\n\t\t}\n\t}\n\n\tlet indices = new ArrayBuffer(numPoints * 4);\n\tlet iIndices = new Uint32Array(indices);\n\tfor (let i = 0; i < numPoints; i++) {\n\t\tiIndices[i] = i;\n\t}\n\n\tperformance.mark(\"laslaz-end\");\n\n\t//{ // print timings\n\t//\tperformance.measure(\"laslaz\", \"laslaz-start\", \"laslaz-end\");\n\t//\tlet measure = performance.getEntriesByType(\"measure\")[0];\n\t//\tlet dpp = 1000 * measure.duration / numPoints;\n\t//\tlet debugMessage = `${measure.duration.toFixed(3)} ms, ${numPoints} points, ${dpp.toFixed(3)} µs / point`;\n\t//\tconsole.log(debugMessage);\n\t//}\n\tperformance.clearMarks();\n\tperformance.clearMeasures();\n\n\tconst ranges = {\n\t\t\"intensity\": rangeIntensity,\n\t\t\"classification\": rangeClassification,\n\t\t\"return number\": rangeReturnNumber,\n\t\t\"number of returns\": rangeNumberOfReturns,\n\t\t\"source id\": rangeSourceID,\n\t};\n\n\tlet message = {\n\t\tmean: mean,\n\t\tposition: pBuff,\n\t\tcolor: cBuff,\n\t\tintensity: iBuff,\n\t\tclassification: clBuff,\n\t\treturnNumber: rnBuff,\n\t\tnumberOfReturns: nrBuff,\n\t\tpointSourceID: psBuff,\n\t\ttightBoundingBox: tightBoundingBox,\n\t\tindices: indices,\n\t\tranges: ranges,\n\t};\n\n\tlet transferables = [\n\t\tmessage.position,\n\t\tmessage.color,\n\t\tmessage.intensity,\n\t\tmessage.classification,\n\t\tmessage.returnNumber,\n\t\tmessage.numberOfReturns,\n\t\tmessage.pointSourceID,\n\t\tmessage.indices];\n\n\tpostMessage(message, transferables);\n};\n\n\n\nonmessage = readUsingDataView;\n//onmessage = readUsingTempArrays;\n"
  },
  {
    "path": "libs/potree/workers/LASLAZWorker.js",
    "content": "// The Module object: Our interface to the outside world. We import\n// and export values on it. There are various ways Module can be used:\n// 1. Not defined. We create it here\n// 2. A function parameter, function(Module) { ..generated code.. }\n// 3. pre-run appended it, var Module = {}; ..generated code..\n// 4. External script tag defines var Module.\n// We need to check if Module already exists (e.g. case 3 above).\n// Substitution will be replaced with actual code on later stage of the build,\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\n// Note that if you want to run closure, and also to use Module\n// after the generated code, you will need to define   var Module = {};\n// before the code. Then that object will be used in the code, and you\n// can continue to use Module afterwards as well.\nvar Module = typeof Module !== 'undefined' ? Module : {};\n\n// --pre-jses are emitted after the Module integration code, so that they can\n// refer to Module (if they choose; they can also define Module)\n// {{PRE_JSES}}\n\n// Sometimes an existing Module object exists with properties\n// meant to overwrite the default module functionality. Here\n// we collect those properties and reapply _after_ we configure\n// the current environment's defaults to avoid having to be so\n// defensive during initialization.\nvar moduleOverrides = {};\nvar key;\nfor (key in Module) {\n  if (Module.hasOwnProperty(key)) {\n    moduleOverrides[key] = Module[key];\n  }\n}\n\nModule['arguments'] = [];\nModule['thisProgram'] = './this.program';\nModule['quit'] = function(status, toThrow) {\n  throw toThrow;\n};\nModule['preRun'] = [];\nModule['postRun'] = [];\n\n// The environment setup code below is customized to use Module.\n// *** Environment setup code ***\nvar ENVIRONMENT_IS_WEB = false;\nvar ENVIRONMENT_IS_WORKER = false;\nvar ENVIRONMENT_IS_NODE = false;\nvar ENVIRONMENT_IS_SHELL = false;\n\n// Three configurations we can be running in:\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\n\nif (Module['ENVIRONMENT']) {\n  if (Module['ENVIRONMENT'] === 'WEB') {\n    ENVIRONMENT_IS_WEB = true;\n  } else if (Module['ENVIRONMENT'] === 'WORKER') {\n    ENVIRONMENT_IS_WORKER = true;\n  } else if (Module['ENVIRONMENT'] === 'NODE') {\n    ENVIRONMENT_IS_NODE = true;\n  } else if (Module['ENVIRONMENT'] === 'SHELL') {\n    ENVIRONMENT_IS_SHELL = true;\n  } else {\n    throw new Error('Module[\\'ENVIRONMENT\\'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.');\n  }\n} else {\n  ENVIRONMENT_IS_WEB = typeof window === 'object';\n  ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\n  ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\n  ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\n}\n\n\nif (ENVIRONMENT_IS_NODE) {\n  // Expose functionality in the same simple way that the shells work\n  // Note that we pollute the global namespace here, otherwise we break in node\n  var nodeFS;\n  var nodePath;\n\n  Module['read'] = function shell_read(filename, binary) {\n    var ret;\n    ret = tryParseAsDataURI(filename);\n    if (!ret) {\n      if (!nodeFS) nodeFS = require('fs');\n      if (!nodePath) nodePath = require('path');\n      filename = nodePath['normalize'](filename);\n      ret = nodeFS['readFileSync'](filename);\n    }\n    return binary ? ret : ret.toString();\n  };\n\n  Module['readBinary'] = function readBinary(filename) {\n    var ret = Module['read'](filename, true);\n    if (!ret.buffer) {\n      ret = new Uint8Array(ret);\n    }\n    assert(ret.buffer);\n    return ret;\n  };\n\n  if (process['argv'].length > 1) {\n    Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\n  }\n\n  Module['arguments'] = process['argv'].slice(2);\n\n  if (typeof module !== 'undefined') {\n    module['exports'] = Module;\n  }\n\n  process['on']('uncaughtException', function(ex) {\n    // suppress ExitStatus exceptions from showing an error\n    if (!(ex instanceof ExitStatus)) {\n      throw ex;\n    }\n  });\n  // Currently node will swallow unhandled rejections, but this behavior is\n  // deprecated, and in the future it will exit with error status.\n  process['on']('unhandledRejection', function(reason, p) {\n    Module['printErr']('node.js exiting due to unhandled promise rejection');\n    process['exit'](1);\n  });\n\n  Module['inspect'] = function () { return '[Emscripten Module object]'; };\n} else\nif (ENVIRONMENT_IS_SHELL) {\n  if (typeof read != 'undefined') {\n    Module['read'] = function shell_read(f) {\n      var data = tryParseAsDataURI(f);\n      if (data) {\n        return intArrayToString(data);\n      }\n      return read(f);\n    };\n  }\n\n  Module['readBinary'] = function readBinary(f) {\n    var data;\n    data = tryParseAsDataURI(f);\n    if (data) {\n      return data;\n    }\n    if (typeof readbuffer === 'function') {\n      return new Uint8Array(readbuffer(f));\n    }\n    data = read(f, 'binary');\n    assert(typeof data === 'object');\n    return data;\n  };\n\n  if (typeof scriptArgs != 'undefined') {\n    Module['arguments'] = scriptArgs;\n  } else if (typeof arguments != 'undefined') {\n    Module['arguments'] = arguments;\n  }\n\n  if (typeof quit === 'function') {\n    Module['quit'] = function(status, toThrow) {\n      quit(status);\n    }\n  }\n} else\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n  Module['read'] = function shell_read(url) {\n    try {\n      var xhr = new XMLHttpRequest();\n      xhr.open('GET', url, false);\n      xhr.send(null);\n      return xhr.responseText;\n    } catch (err) {\n      var data = tryParseAsDataURI(url);\n      if (data) {\n        return intArrayToString(data);\n      }\n      throw err;\n    }\n  };\n\n  if (ENVIRONMENT_IS_WORKER) {\n    Module['readBinary'] = function readBinary(url) {\n      try {\n        var xhr = new XMLHttpRequest();\n        xhr.open('GET', url, false);\n        xhr.responseType = 'arraybuffer';\n        xhr.send(null);\n        return new Uint8Array(xhr.response);\n      } catch (err) {\n        var data = tryParseAsDataURI(url);\n        if (data) {\n          return data;\n        }\n        throw err;\n      }\n    };\n  }\n\n  Module['readAsync'] = function readAsync(url, onload, onerror) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.responseType = 'arraybuffer';\n    xhr.onload = function xhr_onload() {\n      if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\n        onload(xhr.response);\n        return;\n      }\n      var data = tryParseAsDataURI(url);\n      if (data) {\n        onload(data.buffer);\n        return;\n      }\n      onerror();\n    };\n    xhr.onerror = onerror;\n    xhr.send(null);\n  };\n\n  Module['setWindowTitle'] = function(title) { document.title = title };\n} else\n{\n  throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');\n}\n\n// console.log is checked first, as 'print' on the web will open a print dialogue\n// printErr is preferable to console.warn (works better in shells)\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\nModule['print'] = typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null);\nModule['printErr'] = typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || Module['print']);\n\n// *** Environment setup code ***\n\n// Closure helpers\nModule.print = Module['print'];\nModule.printErr = Module['printErr'];\n\n// Merge back in the overrides\nfor (key in moduleOverrides) {\n  if (moduleOverrides.hasOwnProperty(key)) {\n    Module[key] = moduleOverrides[key];\n  }\n}\n// Free the object hierarchy contained in the overrides, this lets the GC\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\nmoduleOverrides = undefined;\n\n\n\n// {{PREAMBLE_ADDITIONS}}\n\nvar STACK_ALIGN = 16;\n\n// stack management, and other functionality that is provided by the compiled code,\n// should not be used before it is ready\nstackSave = stackRestore = stackAlloc = setTempRet0 = getTempRet0 = function() {\n  abort('cannot use the stack before compiled code is ready to run, and has provided stack access');\n};\n\nfunction staticAlloc(size) {\n  assert(!staticSealed);\n  var ret = STATICTOP;\n  STATICTOP = (STATICTOP + size + 15) & -16;\n  return ret;\n}\n\nfunction dynamicAlloc(size) {\n  assert(DYNAMICTOP_PTR);\n  var ret = HEAP32[DYNAMICTOP_PTR>>2];\n  var end = (ret + size + 15) & -16;\n  HEAP32[DYNAMICTOP_PTR>>2] = end;\n  if (end >= TOTAL_MEMORY) {\n    var success = enlargeMemory();\n    if (!success) {\n      HEAP32[DYNAMICTOP_PTR>>2] = ret;\n      return 0;\n    }\n  }\n  return ret;\n}\n\nfunction alignMemory(size, factor) {\n  if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\n  var ret = size = Math.ceil(size / factor) * factor;\n  return ret;\n}\n\nfunction getNativeTypeSize(type) {\n  switch (type) {\n    case 'i1': case 'i8': return 1;\n    case 'i16': return 2;\n    case 'i32': return 4;\n    case 'i64': return 8;\n    case 'float': return 4;\n    case 'double': return 8;\n    default: {\n      if (type[type.length-1] === '*') {\n        return 4; // A pointer\n      } else if (type[0] === 'i') {\n        var bits = parseInt(type.substr(1));\n        assert(bits % 8 === 0);\n        return bits / 8;\n      } else {\n        return 0;\n      }\n    }\n  }\n}\n\nfunction warnOnce(text) {\n  if (!warnOnce.shown) warnOnce.shown = {};\n  if (!warnOnce.shown[text]) {\n    warnOnce.shown[text] = 1;\n    Module.printErr(text);\n  }\n}\n\n\n\nvar jsCallStartIndex = 1;\nvar functionPointers = new Array(0);\n\n// 'sig' parameter is only used on LLVM wasm backend\nfunction addFunction(func, sig) {\n  if (typeof sig === 'undefined') {\n    Module.printErr('warning: addFunction(): You should provide a wasm function signature string as a second argument. This is not necessary for asm.js and asm2wasm, but is required for the LLVM wasm backend, so it is recommended for full portability.');\n  }\n  var base = 0;\n  for (var i = base; i < base + 0; i++) {\n    if (!functionPointers[i]) {\n      functionPointers[i] = func;\n      return jsCallStartIndex + i;\n    }\n  }\n  throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\n}\n\nfunction removeFunction(index) {\n  functionPointers[index-jsCallStartIndex] = null;\n}\n\nvar funcWrappers = {};\n\nfunction getFuncWrapper(func, sig) {\n  if (!func) return; // on null pointer, return undefined\n  assert(sig);\n  if (!funcWrappers[sig]) {\n    funcWrappers[sig] = {};\n  }\n  var sigCache = funcWrappers[sig];\n  if (!sigCache[func]) {\n    // optimize away arguments usage in common cases\n    if (sig.length === 1) {\n      sigCache[func] = function dynCall_wrapper() {\n        return dynCall(sig, func);\n      };\n    } else if (sig.length === 2) {\n      sigCache[func] = function dynCall_wrapper(arg) {\n        return dynCall(sig, func, [arg]);\n      };\n    } else {\n      // general case\n      sigCache[func] = function dynCall_wrapper() {\n        return dynCall(sig, func, Array.prototype.slice.call(arguments));\n      };\n    }\n  }\n  return sigCache[func];\n}\n\n\nfunction makeBigInt(low, high, unsigned) {\n  return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\n}\n\nfunction dynCall(sig, ptr, args) {\n  if (args && args.length) {\n    assert(args.length == sig.length-1);\n    assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \\'' + sig + '\\'');\n    return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\n  } else {\n    assert(sig.length == 1);\n    assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \\'' + sig + '\\'');\n    return Module['dynCall_' + sig].call(null, ptr);\n  }\n}\n\n\nfunction getCompilerSetting(name) {\n  throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work';\n}\n\nvar Runtime = {\n  // FIXME backwards compatibility layer for ports. Support some Runtime.*\n  //       for now, fix it there, then remove it from here. That way we\n  //       can minimize any period of breakage.\n  dynCall: dynCall, // for SDL2 port\n  // helpful errors\n  getTempRet0: function() { abort('getTempRet0() is now a top-level function, after removing the Runtime object. Remove \"Runtime.\"') },\n  staticAlloc: function() { abort('staticAlloc() is now a top-level function, after removing the Runtime object. Remove \"Runtime.\"') },\n  stackAlloc: function() { abort('stackAlloc() is now a top-level function, after removing the Runtime object. Remove \"Runtime.\"') },\n};\n\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\n// Above 0 is static memory, starting with globals.\n// Then the stack.\n// Then 'dynamic' memory for sbrk.\nvar GLOBAL_BASE = 8;\n\n\n\n// === Preamble library stuff ===\n\n// Documentation for the public APIs defined in this file must be updated in:\n//    site/source/docs/api_reference/preamble.js.rst\n// A prebuilt local version of the documentation is available at:\n//    site/build/text/docs/api_reference/preamble.js.txt\n// You can also build docs locally as HTML or other formats in site/\n// An online HTML version (which may be of a different version of Emscripten)\n//    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n\n\n\n//========================================\n// Runtime essentials\n//========================================\n\nvar ABORT = 0; // whether we are quitting the application. no code should run after this. set in exit() and abort()\nvar EXITSTATUS = 0;\n\n/** @type {function(*, string=)} */\nfunction assert(condition, text) {\n  if (!condition) {\n    abort('Assertion failed: ' + text);\n  }\n}\n\nvar globalScope = this;\n\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\nfunction getCFunc(ident) {\n  var func = Module['_' + ident]; // closure exported function\n  assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\n  return func;\n}\n\nvar JSfuncs = {\n  // Helpers for cwrap -- it can't refer to Runtime directly because it might\n  // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find\n  // out what the minified function name is.\n  'stackSave': function() {\n    stackSave()\n  },\n  'stackRestore': function() {\n    stackRestore()\n  },\n  // type conversion from js to c\n  'arrayToC' : function(arr) {\n    var ret = stackAlloc(arr.length);\n    writeArrayToMemory(arr, ret);\n    return ret;\n  },\n  'stringToC' : function(str) {\n    var ret = 0;\n    if (str !== null && str !== undefined && str !== 0) { // null string\n      // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\n      var len = (str.length << 2) + 1;\n      ret = stackAlloc(len);\n      stringToUTF8(str, ret, len);\n    }\n    return ret;\n  }\n};\n\n// For fast lookup of conversion functions\nvar toC = {\n  'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC']\n};\n\n// C calling interface.\nfunction ccall (ident, returnType, argTypes, args, opts) {\n  var func = getCFunc(ident);\n  var cArgs = [];\n  var stack = 0;\n  assert(returnType !== 'array', 'Return type should not be \"array\".');\n  if (args) {\n    for (var i = 0; i < args.length; i++) {\n      var converter = toC[argTypes[i]];\n      if (converter) {\n        if (stack === 0) stack = stackSave();\n        cArgs[i] = converter(args[i]);\n      } else {\n        cArgs[i] = args[i];\n      }\n    }\n  }\n  var ret = func.apply(null, cArgs);\n  if (returnType === 'string') ret = Pointer_stringify(ret);\n  else if (returnType === 'boolean') ret = Boolean(ret);\n  if (stack !== 0) {\n    stackRestore(stack);\n  }\n  return ret;\n}\n\nfunction cwrap (ident, returnType, argTypes) {\n  argTypes = argTypes || [];\n  var cfunc = getCFunc(ident);\n  // When the function takes numbers and returns a number, we can just return\n  // the original function\n  var numericArgs = argTypes.every(function(type){ return type === 'number'});\n  var numericRet = returnType !== 'string';\n  if (numericRet && numericArgs) {\n    return cfunc;\n  }\n  return function() {\n    return ccall(ident, returnType, argTypes, arguments);\n  }\n}\n\n/** @type {function(number, number, string, boolean=)} */\nfunction setValue(ptr, value, type, noSafe) {\n  type = type || 'i8';\n  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\n    switch(type) {\n      case 'i1': HEAP8[((ptr)>>0)]=value; break;\n      case 'i8': HEAP8[((ptr)>>0)]=value; break;\n      case 'i16': HEAP16[((ptr)>>1)]=value; break;\n      case 'i32': HEAP32[((ptr)>>2)]=value; break;\n      case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\n      case 'float': HEAPF32[((ptr)>>2)]=value; break;\n      case 'double': HEAPF64[((ptr)>>3)]=value; break;\n      default: abort('invalid type for setValue: ' + type);\n    }\n}\n\n/** @type {function(number, string, boolean=)} */\nfunction getValue(ptr, type, noSafe) {\n  type = type || 'i8';\n  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\n    switch(type) {\n      case 'i1': return HEAP8[((ptr)>>0)];\n      case 'i8': return HEAP8[((ptr)>>0)];\n      case 'i16': return HEAP16[((ptr)>>1)];\n      case 'i32': return HEAP32[((ptr)>>2)];\n      case 'i64': return HEAP32[((ptr)>>2)];\n      case 'float': return HEAPF32[((ptr)>>2)];\n      case 'double': return HEAPF64[((ptr)>>3)];\n      default: abort('invalid type for getValue: ' + type);\n    }\n  return null;\n}\n\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\nvar ALLOC_STATIC = 2; // Cannot be freed\nvar ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk\nvar ALLOC_NONE = 4; // Do not allocate\n\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\n//             is a little tricky (see docs right below). The reason is that it is optimized\n//             for multiple syntaxes to save space in generated code. So you should\n//             normally not use allocate(), and instead allocate memory using _malloc(),\n//             initialize it with setValue(), and so forth.\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\n//        in *bytes* (note that this is sometimes confusing: the next parameter does not\n//        affect this!)\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\n//         or a single type which is used for the entire block. This only matters if there\n//         is initial data - if @slab is a number, then this does not matter at all and is\n//         ignored.\n// @allocator: How to allocate memory, see ALLOC_*\n/** @type {function((TypedArray|Array<number>|number), string, number, number=)} */\nfunction allocate(slab, types, allocator, ptr) {\n  var zeroinit, size;\n  if (typeof slab === 'number') {\n    zeroinit = true;\n    size = slab;\n  } else {\n    zeroinit = false;\n    size = slab.length;\n  }\n\n  var singleType = typeof types === 'string' ? types : null;\n\n  var ret;\n  if (allocator == ALLOC_NONE) {\n    ret = ptr;\n  } else {\n    ret = [typeof _malloc === 'function' ? _malloc : staticAlloc, stackAlloc, staticAlloc, dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));\n  }\n\n  if (zeroinit) {\n    var stop;\n    ptr = ret;\n    assert((ret & 3) == 0);\n    stop = ret + (size & ~3);\n    for (; ptr < stop; ptr += 4) {\n      HEAP32[((ptr)>>2)]=0;\n    }\n    stop = ret + size;\n    while (ptr < stop) {\n      HEAP8[((ptr++)>>0)]=0;\n    }\n    return ret;\n  }\n\n  if (singleType === 'i8') {\n    if (slab.subarray || slab.slice) {\n      HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\n    } else {\n      HEAPU8.set(new Uint8Array(slab), ret);\n    }\n    return ret;\n  }\n\n  var i = 0, type, typeSize, previousType;\n  while (i < size) {\n    var curr = slab[i];\n\n    type = singleType || types[i];\n    if (type === 0) {\n      i++;\n      continue;\n    }\n    assert(type, 'Must know what type to store in allocate!');\n\n    if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\n\n    setValue(ret+i, curr, type);\n\n    // no need to look up size unless type changes, so cache it\n    if (previousType !== type) {\n      typeSize = getNativeTypeSize(type);\n      previousType = type;\n    }\n    i += typeSize;\n  }\n\n  return ret;\n}\n\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\nfunction getMemory(size) {\n  if (!staticSealed) return staticAlloc(size);\n  if (!runtimeInitialized) return dynamicAlloc(size);\n  return _malloc(size);\n}\n\n/** @type {function(number, number=)} */\nfunction Pointer_stringify(ptr, length) {\n  if (length === 0 || !ptr) return '';\n  // Find the length, and check for UTF while doing so\n  var hasUtf = 0;\n  var t;\n  var i = 0;\n  while (1) {\n    assert(ptr + i < TOTAL_MEMORY);\n    t = HEAPU8[(((ptr)+(i))>>0)];\n    hasUtf |= t;\n    if (t == 0 && !length) break;\n    i++;\n    if (length && i == length) break;\n  }\n  if (!length) length = i;\n\n  var ret = '';\n\n  if (hasUtf < 128) {\n    var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack\n    var curr;\n    while (length > 0) {\n      curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));\n      ret = ret ? ret + curr : curr;\n      ptr += MAX_CHUNK;\n      length -= MAX_CHUNK;\n    }\n    return ret;\n  }\n  return UTF8ToString(ptr);\n}\n\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\n// a copy of that string as a Javascript String object.\n\nfunction AsciiToString(ptr) {\n  var str = '';\n  while (1) {\n    var ch = HEAP8[((ptr++)>>0)];\n    if (!ch) return str;\n    str += String.fromCharCode(ch);\n  }\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\n\nfunction stringToAscii(str, outPtr) {\n  return writeAsciiToMemory(str, outPtr, false);\n}\n\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\n// a copy of that string as a Javascript String object.\n\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\nfunction UTF8ArrayToString(u8Array, idx) {\n  var endPtr = idx;\n  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\n  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\n  while (u8Array[endPtr]) ++endPtr;\n\n  if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\n    return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\n  } else {\n    var u0, u1, u2, u3, u4, u5;\n\n    var str = '';\n    while (1) {\n      // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\n      u0 = u8Array[idx++];\n      if (!u0) return str;\n      if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\n      u1 = u8Array[idx++] & 63;\n      if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\n      u2 = u8Array[idx++] & 63;\n      if ((u0 & 0xF0) == 0xE0) {\n        u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n      } else {\n        u3 = u8Array[idx++] & 63;\n        if ((u0 & 0xF8) == 0xF0) {\n          u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\n        } else {\n          u4 = u8Array[idx++] & 63;\n          if ((u0 & 0xFC) == 0xF8) {\n            u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\n          } else {\n            u5 = u8Array[idx++] & 63;\n            u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\n          }\n        }\n      }\n      if (u0 < 0x10000) {\n        str += String.fromCharCode(u0);\n      } else {\n        var ch = u0 - 0x10000;\n        str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\n      }\n    }\n  }\n}\n\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns\n// a copy of that string as a Javascript String object.\n\nfunction UTF8ToString(ptr) {\n  return UTF8ArrayToString(HEAPU8,ptr);\n}\n\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\n//   outIdx: The starting offset in the array to begin the copying.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\n//                    terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\n  if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\n    return 0;\n\n  var startIdx = outIdx;\n  var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\n  for (var i = 0; i < str.length; ++i) {\n    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\n    var u = str.charCodeAt(i); // possibly a lead surrogate\n    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\n    if (u <= 0x7F) {\n      if (outIdx >= endIdx) break;\n      outU8Array[outIdx++] = u;\n    } else if (u <= 0x7FF) {\n      if (outIdx + 1 >= endIdx) break;\n      outU8Array[outIdx++] = 0xC0 | (u >> 6);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    } else if (u <= 0xFFFF) {\n      if (outIdx + 2 >= endIdx) break;\n      outU8Array[outIdx++] = 0xE0 | (u >> 12);\n      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    } else if (u <= 0x1FFFFF) {\n      if (outIdx + 3 >= endIdx) break;\n      outU8Array[outIdx++] = 0xF0 | (u >> 18);\n      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    } else if (u <= 0x3FFFFFF) {\n      if (outIdx + 4 >= endIdx) break;\n      outU8Array[outIdx++] = 0xF8 | (u >> 24);\n      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    } else {\n      if (outIdx + 5 >= endIdx) break;\n      outU8Array[outIdx++] = 0xFC | (u >> 30);\n      outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\n      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\n      outU8Array[outIdx++] = 0x80 | (u & 63);\n    }\n  }\n  // Null-terminate the pointer to the buffer.\n  outU8Array[outIdx] = 0;\n  return outIdx - startIdx;\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\n\nfunction lengthBytesUTF8(str) {\n  var len = 0;\n  for (var i = 0; i < str.length; ++i) {\n    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var u = str.charCodeAt(i); // possibly a lead surrogate\n    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\n    if (u <= 0x7F) {\n      ++len;\n    } else if (u <= 0x7FF) {\n      len += 2;\n    } else if (u <= 0xFFFF) {\n      len += 3;\n    } else if (u <= 0x1FFFFF) {\n      len += 4;\n    } else if (u <= 0x3FFFFFF) {\n      len += 5;\n    } else {\n      len += 6;\n    }\n  }\n  return len;\n}\n\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\n// a copy of that string as a Javascript String object.\n\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\nfunction UTF16ToString(ptr) {\n  assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');\n  var endPtr = ptr;\n  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\n  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\n  var idx = endPtr >> 1;\n  while (HEAP16[idx]) ++idx;\n  endPtr = idx << 1;\n\n  if (endPtr - ptr > 32 && UTF16Decoder) {\n    return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\n  } else {\n    var i = 0;\n\n    var str = '';\n    while (1) {\n      var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\n      if (codeUnit == 0) return str;\n      ++i;\n      // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\n      str += String.fromCharCode(codeUnit);\n    }\n  }\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   outPtr: Byte address in Emscripten HEAP where to write the string to.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\n//                    terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\n  assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n  if (maxBytesToWrite === undefined) {\n    maxBytesToWrite = 0x7FFFFFFF;\n  }\n  if (maxBytesToWrite < 2) return 0;\n  maxBytesToWrite -= 2; // Null terminator.\n  var startPtr = outPtr;\n  var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\n  for (var i = 0; i < numCharsToWrite; ++i) {\n    // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\n    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n    HEAP16[((outPtr)>>1)]=codeUnit;\n    outPtr += 2;\n  }\n  // Null-terminate the pointer to the HEAP.\n  HEAP16[((outPtr)>>1)]=0;\n  return outPtr - startPtr;\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\n\nfunction lengthBytesUTF16(str) {\n  return str.length*2;\n}\n\nfunction UTF32ToString(ptr) {\n  assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!');\n  var i = 0;\n\n  var str = '';\n  while (1) {\n    var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\n    if (utf32 == 0)\n      return str;\n    ++i;\n    // 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.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    if (utf32 >= 0x10000) {\n      var ch = utf32 - 0x10000;\n      str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\n    } else {\n      str += String.fromCharCode(utf32);\n    }\n  }\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   outPtr: Byte address in Emscripten HEAP where to write the string to.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\n//                    terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\n  assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!');\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n  if (maxBytesToWrite === undefined) {\n    maxBytesToWrite = 0x7FFFFFFF;\n  }\n  if (maxBytesToWrite < 4) return 0;\n  var startPtr = outPtr;\n  var endPtr = startPtr + maxBytesToWrite - 4;\n  for (var i = 0; i < str.length; ++i) {\n    // 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.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\n      var trailSurrogate = str.charCodeAt(++i);\n      codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\n    }\n    HEAP32[((outPtr)>>2)]=codeUnit;\n    outPtr += 4;\n    if (outPtr + 4 > endPtr) break;\n  }\n  // Null-terminate the pointer to the HEAP.\n  HEAP32[((outPtr)>>2)]=0;\n  return outPtr - startPtr;\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\n\nfunction lengthBytesUTF32(str) {\n  var len = 0;\n  for (var i = 0; i < str.length; ++i) {\n    // 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.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var codeUnit = str.charCodeAt(i);\n    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\n    len += 4;\n  }\n\n  return len;\n}\n\n// Allocate heap space for a JS string, and write it there.\n// It is the responsibility of the caller to free() that memory.\nfunction allocateUTF8(str) {\n  var size = lengthBytesUTF8(str) + 1;\n  var ret = _malloc(size);\n  if (ret) stringToUTF8Array(str, HEAP8, ret, size);\n  return ret;\n}\n\n// Allocate stack space for a JS string, and write it there.\nfunction allocateUTF8OnStack(str) {\n  var size = lengthBytesUTF8(str) + 1;\n  var ret = stackAlloc(size);\n  stringToUTF8Array(str, HEAP8, ret, size);\n  return ret;\n}\n\nfunction demangle(func) {\n  warnOnce('warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling');\n  return func;\n}\n\nfunction demangleAll(text) {\n  var regex =\n    /__Z[\\w\\d_]+/g;\n  return text.replace(regex,\n    function(x) {\n      var y = demangle(x);\n      return x === y ? x : (x + ' [' + y + ']');\n    });\n}\n\nfunction jsStackTrace() {\n  var err = new Error();\n  if (!err.stack) {\n    // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\n    // so try that as a special-case.\n    try {\n      throw new Error(0);\n    } catch(e) {\n      err = e;\n    }\n    if (!err.stack) {\n      return '(no stack trace available)';\n    }\n  }\n  return err.stack.toString();\n}\n\nfunction stackTrace() {\n  var js = jsStackTrace();\n  if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\n  return demangleAll(js);\n}\n\n// Memory management\n\nvar PAGE_SIZE = 16384;\nvar WASM_PAGE_SIZE = 65536;\nvar ASMJS_PAGE_SIZE = 16777216;\nvar MIN_TOTAL_MEMORY = 16777216;\n\nfunction alignUp(x, multiple) {\n  if (x % multiple > 0) {\n    x += multiple - (x % multiple);\n  }\n  return x;\n}\n\nvar HEAP,\n/** @type {ArrayBuffer} */\n  buffer,\n/** @type {Int8Array} */\n  HEAP8,\n/** @type {Uint8Array} */\n  HEAPU8,\n/** @type {Int16Array} */\n  HEAP16,\n/** @type {Uint16Array} */\n  HEAPU16,\n/** @type {Int32Array} */\n  HEAP32,\n/** @type {Uint32Array} */\n  HEAPU32,\n/** @type {Float32Array} */\n  HEAPF32,\n/** @type {Float64Array} */\n  HEAPF64;\n\nfunction updateGlobalBuffer(buf) {\n  Module['buffer'] = buffer = buf;\n}\n\nfunction updateGlobalBufferViews() {\n  Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\n  Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\n  Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\n  Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\n  Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\n  Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\n  Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\n  Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\n}\n\nvar STATIC_BASE, STATICTOP, staticSealed; // static area\nvar STACK_BASE, STACKTOP, STACK_MAX; // stack area\nvar DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk\n\n  STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;\n  staticSealed = false;\n\n\n// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.\nfunction writeStackCookie() {\n  assert((STACK_MAX & 3) == 0);\n  HEAPU32[(STACK_MAX >> 2)-1] = 0x02135467;\n  HEAPU32[(STACK_MAX >> 2)-2] = 0x89BACDFE;\n}\n\nfunction checkStackCookie() {\n  if (HEAPU32[(STACK_MAX >> 2)-1] != 0x02135467 || HEAPU32[(STACK_MAX >> 2)-2] != 0x89BACDFE) {\n    abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x' + HEAPU32[(STACK_MAX >> 2)-2].toString(16) + ' ' + HEAPU32[(STACK_MAX >> 2)-1].toString(16));\n  }\n  // Also test the global address 0 for integrity. This check is not compatible with SAFE_SPLIT_MEMORY though, since that mode already tests all address 0 accesses on its own.\n  if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) throw 'Runtime error: The application has corrupted its heap memory area (address zero)!';\n}\n\nfunction abortStackOverflow(allocSize) {\n  abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - stackSave() + allocSize) + ' bytes available!');\n}\n\nfunction abortOnCannotGrowMemory() {\n  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  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ');\n}\n\n\nfunction enlargeMemory() {\n  abortOnCannotGrowMemory();\n}\n\n\nvar TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;\nvar TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 167772160;\nif (TOTAL_MEMORY < TOTAL_STACK) Module.printErr('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\n\n// Initialize the runtime's memory\n// check for full engine support (use string 'subarray' to avoid closure compiler confusion)\nassert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined,\n       'JS engine does not provide full typed array support');\n\n\n\n// Use a provided buffer, if there is one, or else allocate a new one\nif (Module['buffer']) {\n  buffer = Module['buffer'];\n  assert(buffer.byteLength === TOTAL_MEMORY, 'provided buffer should be ' + TOTAL_MEMORY + ' bytes, but it is ' + buffer.byteLength);\n} else {\n  // Use a WebAssembly memory where available\n  {\n    buffer = new ArrayBuffer(TOTAL_MEMORY);\n  }\n  assert(buffer.byteLength === TOTAL_MEMORY);\n  Module['buffer'] = buffer;\n}\nupdateGlobalBufferViews();\n\n\nfunction getTotalMemory() {\n  return TOTAL_MEMORY;\n}\n\n// Endianness check (note: assumes compiler arch was little-endian)\n  HEAP32[0] = 0x63736d65; /* 'emsc' */\nHEAP16[1] = 0x6373;\nif (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!';\n\nfunction callRuntimeCallbacks(callbacks) {\n  while(callbacks.length > 0) {\n    var callback = callbacks.shift();\n    if (typeof callback == 'function') {\n      callback();\n      continue;\n    }\n    var func = callback.func;\n    if (typeof func === 'number') {\n      if (callback.arg === undefined) {\n        Module['dynCall_v'](func);\n      } else {\n        Module['dynCall_vi'](func, callback.arg);\n      }\n    } else {\n      func(callback.arg === undefined ? null : callback.arg);\n    }\n  }\n}\n\nvar __ATPRERUN__  = []; // functions called before the runtime is initialized\nvar __ATINIT__    = []; // functions called during startup\nvar __ATMAIN__    = []; // functions called when main() is to be run\nvar __ATEXIT__    = []; // functions called during shutdown\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\n\nvar runtimeInitialized = false;\nvar runtimeExited = false;\n\n\nfunction preRun() {\n  // compatibility - merge in anything from Module['preRun'] at this time\n  if (Module['preRun']) {\n    if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\n    while (Module['preRun'].length) {\n      addOnPreRun(Module['preRun'].shift());\n    }\n  }\n  callRuntimeCallbacks(__ATPRERUN__);\n}\n\nfunction ensureInitRuntime() {\n  checkStackCookie();\n  if (runtimeInitialized) return;\n  runtimeInitialized = true;\n  callRuntimeCallbacks(__ATINIT__);\n}\n\nfunction preMain() {\n  checkStackCookie();\n  callRuntimeCallbacks(__ATMAIN__);\n}\n\nfunction exitRuntime() {\n  checkStackCookie();\n  callRuntimeCallbacks(__ATEXIT__);\n  runtimeExited = true;\n}\n\nfunction postRun() {\n  checkStackCookie();\n  // compatibility - merge in anything from Module['postRun'] at this time\n  if (Module['postRun']) {\n    if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\n    while (Module['postRun'].length) {\n      addOnPostRun(Module['postRun'].shift());\n    }\n  }\n  callRuntimeCallbacks(__ATPOSTRUN__);\n}\n\nfunction addOnPreRun(cb) {\n  __ATPRERUN__.unshift(cb);\n}\n\nfunction addOnInit(cb) {\n  __ATINIT__.unshift(cb);\n}\n\nfunction addOnPreMain(cb) {\n  __ATMAIN__.unshift(cb);\n}\n\nfunction addOnExit(cb) {\n  __ATEXIT__.unshift(cb);\n}\n\nfunction addOnPostRun(cb) {\n  __ATPOSTRUN__.unshift(cb);\n}\n\n// Deprecated: This function should not be called because it is unsafe and does not provide\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\n// to be secure from out of bounds writes.\n/** @deprecated */\nfunction writeStringToMemory(string, buffer, dontAddNull) {\n  warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\n\n  var /** @type {number} */ lastChar, /** @type {number} */ end;\n  if (dontAddNull) {\n    // stringToUTF8Array always appends null. If we don't want to do that, remember the\n    // character that existed at the location where the null will be placed, and restore\n    // that after the write (below).\n    end = buffer + lengthBytesUTF8(string);\n    lastChar = HEAP8[end];\n  }\n  stringToUTF8(string, buffer, Infinity);\n  if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\n}\n\nfunction writeArrayToMemory(array, buffer) {\n  assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)')\n  HEAP8.set(array, buffer);\n}\n\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\n  for (var i = 0; i < str.length; ++i) {\n    assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);\n    HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\n  }\n  // Null-terminate the pointer to the HEAP.\n  if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\n}\n\nfunction unSign(value, bits, ignore) {\n  if (value >= 0) {\n    return value;\n  }\n  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\n                    : Math.pow(2, bits)         + value;\n}\nfunction reSign(value, bits, ignore) {\n  if (value <= 0) {\n    return value;\n  }\n  var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\n                        : Math.pow(2, bits-1);\n  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\n                                                       // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\n                                                       // TODO: In i64 mode 1, resign the two parts separately and safely\n    value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\n  }\n  return value;\n}\n\nassert(Math['imul'] && Math['fround'] && Math['clz32'] && Math['trunc'], 'this is a legacy browser, build with LEGACY_VM_SUPPORT');\n\nvar Math_abs = Math.abs;\nvar Math_cos = Math.cos;\nvar Math_sin = Math.sin;\nvar Math_tan = Math.tan;\nvar Math_acos = Math.acos;\nvar Math_asin = Math.asin;\nvar Math_atan = Math.atan;\nvar Math_atan2 = Math.atan2;\nvar Math_exp = Math.exp;\nvar Math_log = Math.log;\nvar Math_sqrt = Math.sqrt;\nvar Math_ceil = Math.ceil;\nvar Math_floor = Math.floor;\nvar Math_pow = Math.pow;\nvar Math_imul = Math.imul;\nvar Math_fround = Math.fround;\nvar Math_round = Math.round;\nvar Math_min = Math.min;\nvar Math_max = Math.max;\nvar Math_clz32 = Math.clz32;\nvar Math_trunc = Math.trunc;\n\n// A counter of dependencies for calling run(). If we need to\n// do asynchronous work before running, increment this and\n// decrement it. Incrementing must happen in a place like\n// PRE_RUN_ADDITIONS (used by emcc to add file preloading).\n// Note that you can add dependencies in preRun, even though\n// it happens right before run - run will be postponed until\n// the dependencies are met.\nvar runDependencies = 0;\nvar runDependencyWatcher = null;\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\nvar runDependencyTracking = {};\n\nfunction getUniqueRunDependency(id) {\n  var orig = id;\n  while (1) {\n    if (!runDependencyTracking[id]) return id;\n    id = orig + Math.random();\n  }\n  return id;\n}\n\nfunction addRunDependency(id) {\n  runDependencies++;\n  if (Module['monitorRunDependencies']) {\n    Module['monitorRunDependencies'](runDependencies);\n  }\n  if (id) {\n    assert(!runDependencyTracking[id]);\n    runDependencyTracking[id] = 1;\n    if (runDependencyWatcher === null && typeof setInterval !== 'undefined') {\n      // Check for missing dependencies every few seconds\n      runDependencyWatcher = setInterval(function() {\n        if (ABORT) {\n          clearInterval(runDependencyWatcher);\n          runDependencyWatcher = null;\n          return;\n        }\n        var shown = false;\n        for (var dep in runDependencyTracking) {\n          if (!shown) {\n            shown = true;\n            Module.printErr('still waiting on run dependencies:');\n          }\n          Module.printErr('dependency: ' + dep);\n        }\n        if (shown) {\n          Module.printErr('(end of list)');\n        }\n      }, 10000);\n    }\n  } else {\n    Module.printErr('warning: run dependency added without ID');\n  }\n}\n\nfunction removeRunDependency(id) {\n  runDependencies--;\n  if (Module['monitorRunDependencies']) {\n    Module['monitorRunDependencies'](runDependencies);\n  }\n  if (id) {\n    assert(runDependencyTracking[id]);\n    delete runDependencyTracking[id];\n  } else {\n    Module.printErr('warning: run dependency removed without ID');\n  }\n  if (runDependencies == 0) {\n    if (runDependencyWatcher !== null) {\n      clearInterval(runDependencyWatcher);\n      runDependencyWatcher = null;\n    }\n    if (dependenciesFulfilled) {\n      var callback = dependenciesFulfilled;\n      dependenciesFulfilled = null;\n      callback(); // can add another dependenciesFulfilled\n    }\n  }\n}\n\nModule[\"preloadedImages\"] = {}; // maps url to image data\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\n\n\n\nvar memoryInitializer = null;\n\n\n\nvar /* show errors on likely calls to FS when it was not included */ FS = {\n  error: function() {\n    abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with  -s FORCE_FILESYSTEM=1');\n  },\n  init: function() { FS.error() },\n  createDataFile: function() { FS.error() },\n  createPreloadedFile: function() { FS.error() },\n  createLazyFile: function() { FS.error() },\n  open: function() { FS.error() },\n  mkdev: function() { FS.error() },\n  registerDevice: function() { FS.error() },\n  analyzePath: function() { FS.error() },\n  loadFilesFromDB: function() { FS.error() },\n\n  ErrnoError: function ErrnoError() { FS.error() },\n};\nModule['FS_createDataFile'] = FS.createDataFile;\nModule['FS_createPreloadedFile'] = FS.createPreloadedFile;\n\n\n\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\n\n// Indicates whether filename is a base64 data URI.\nfunction isDataURI(filename) {\n  return String.prototype.startsWith ?\n      filename.startsWith(dataURIPrefix) :\n      filename.indexOf(dataURIPrefix) === 0;\n}\n\n\n\n\n\n// === Body ===\n\nvar ASM_CONSTS = [];\n\n\n\n\n\nSTATIC_BASE = GLOBAL_BASE;\n\nSTATICTOP = STATIC_BASE + 22928;\n/* global initializers */  __ATINIT__.push({ func: function() { __GLOBAL__sub_I_laz_perf_cpp() } }, { func: function() { __GLOBAL__sub_I_bind_cpp() } });\n\n\nmemoryInitializer = \"data:application/octet-stream;base64,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2wAAAAAAAABIBQAA3AAAAN0AAADeAAAAAAAAAFgFAADfAAAA4AAAAA0AAAAAAAAAaAUAANwAAADhAAAA3gAAAAAAAACYBQAAzQAAAOIAAADPAAAA0AAAAOMAAAAAAAAAiAUAAM0AAADkAAAAzwAAANAAAADlAAAAAAAAABgGAADNAAAA5gAAAM8AAADQAAAA0QAAAOcAAADoAAAA6QAAAExBU1ppcABvcGVuAGdldFBvaW50AGdldENvdW50AER5bmFtaWNMQVNaaXAAYWRkRmllbGRGbG9hdGluZwBhZGRGaWVsZFNpZ25lZABhZGRGaWVsZFVuc2lnbmVkAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzNfRUVOU185YWxsb2NhdG9ySVMzX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzdfRUVOU185YWxsb2NhdG9ySVM3X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFAExBU0YATjZsYXN6aXAxM2ludmFsaWRfbWFnaWNFAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUARmlsZSBtYWdpYyBpcyBub3QgdmFsaWQATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk42bGFzemlwMmlvNnJlYWRlcjEwYmFzaWNfZmlsZUlOUzJfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRTExX3ZhbGlkYXRvcnNFdkVVbFJOUzNfNmhlYWRlckVFX05TXzlhbGxvY2F0b3JJU0JfRUVGdlNBX0VFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlJONmxhc3ppcDJpbzZoZWFkZXJFRUVFAE42bGFzemlwMjFvbGRfc3R5bGVfY29tcHJlc3Npb25FAE42bGFzemlwMTRub3RfY29tcHJlc3NlZEUAVGhlIGZpbGUgc2VlbXMgdG8gaGF2ZSBvbGQgc3R5bGUgY29tcHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZABUaGUgZmlsZSBkb2Vzbid0IHNlZW0gdG8gYmUgY29tcHJlc3NlZABaTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUUxMV92YWxpZGF0b3JzRXZFVWxSTlMwXzZoZWFkZXJFRV8AbGFzemlwIGVuY29kZWQATjZsYXN6aXAxM25vX2xhc3ppcF92bHJFAE42bGFzemlwMjVsYXN6aXBfZm9ybWF0X3Vuc3VwcG9ydGVkRQBPbmx5IExBU3ppcCBQT0lOVFdJU0UgQ0hVTktFRCBkZWNvbXByZXNzb3IgaXMgc3VwcG9ydGVkAE5vIExBU3ppcCBWTFIgd2FzIGZvdW5kIGluIHRoZSBWTFJzIHNlY3Rpb24ATjZsYXN6aXAyMmNodW5rX3RhYmxlX3JlYWRfZXJyb3JFAENodW5rIHRhYmxlIG9mZnNldCA9PSAtMSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZQBONmxhc3ppcDEzbm90X3N1cHBvcnRlZEUATjZsYXN6aXAyNnVua25vd25fY2h1bmtfdGFibGVfZm9ybWF0RQBjaHVua19zaXplID09IHVpbnQubWF4IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLCBjYWxsIDEtODAwLURBRlVRIGZvciBzdXBwb3J0LgBUaGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgdGhlIGNodW5rIHRhYmxlAFRoZSBjaHVuayB0YWJsZSB2ZXJzaW9uIG51bWJlciBpcyB1bmtub3duAE42bGFzemlwMTFlbmRfb2ZfZmlsZUUAUmVhY2hlZCBFbmQgb2YgZmlsZQBJbnZhbGlkIG51bWJlciBvZiBzeW1ib2xzAGJpdHMgJiYgKGJpdHMgPD0gMzIpAC9Vc2Vycy9jb25ub3IvY29kZS9sYXotcGVyZi1hYmVsbC9lbXNjcmlwdGVuLy4uL2xhei1wZXJmL2RlY29kZXIuaHBwAHJlYWRCaXRzAHN5bSA8ICgxPDwxNikAcmVhZFNob3J0AE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM5X0VFTlNfOWFsbG9jYXRvcklTOV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwMTl1bmtub3duX3NjaGVtYV90eXBlRQBUaGUgTEFaIHNjaGVtYSBpcyBub3QgcmVjb2duaXplZABONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2ZpZWxkX2RlY29tcHJlc3NvcklOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMGR5bmFtaWNfZGVjb21wcmVzc29yRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVOU185YWxsb2NhdG9ySVNDX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBONmxhc3ppcDdmb3JtYXRzMTBiYXNlX2ZpZWxkRQAPDg0MCwoJCA4AAQMGCgoJDQECBAcLCwoMAwQFCAwMCwsGBwgJDQ0MCgoLDA0ODg0JCgsMDQ4PDggJCgsMDQ4PAAECAwQFBgcBAAECAwQFBgIBAAECAwQFAwIBAAECAwQEAwIBAAECAwUEAwIBAAECBgUEAwIBAAEHBgUEAwIBAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdncHN0aW1lRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzN2dwc3RpbWVFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTSV9FRU5TXzlhbGxvY2F0b3JJU0lfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3Z3BzdGltZUVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF81ZmllbGRJTlMwXzNsYXMzcmdiRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzM3JnYkVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczNyZ2JFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfNWZpZWxkSU5TMF8zbGFzMTBleHRyYWJ5dGVzRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzMTBleHRyYWJ5dGVzRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0lfRUVOU185YWxsb2NhdG9ySVNJX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzMTBleHRyYWJ5dGVzRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNLX0VFTlNfOWFsbG9jYXRvcklTS19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzBfNWZpZWxkSU5TMF8zbGFzN3BvaW50MTBFTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0RfRUVFRU5TQl9JTlNDXzdncHN0aW1lRU5TRV9JU0hfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTTl9FRU5TXzlhbGxvY2F0b3JJU05fRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNEX0VFRUVOU0JfSU5TQ18zcmdiRU5TRV9JU0hfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTSl9FRUVFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNOX0VFTlNfOWFsbG9jYXRvcklTTl9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFTlNEX0lOU0VfM3JnYkVOU0dfSVNKX0VFRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFTlNCX0lOU0NfN2dwc3RpbWVFTlNFX0lTSF9FRUVFTlNCX0lOU0NfM3JnYkVOU0VfSVNLX0VFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNGX0VFRUVOU0RfSU5TRV83Z3BzdGltZUVOU0dfSVNKX0VFRUVOU0RfSU5TRV8zcmdiRU5TR19JU01fRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTUV9FRU5TXzlhbGxvY2F0b3JJU1FfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTTV9FRUVFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBidWZfc3RyZWFtTlNfMTRkZWZhdWx0X2RlbGV0ZUlTMV9FRU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUkxMGJ1Zl9zdHJlYW1FRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA4ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM1X0VFTlNfOWFsbG9jYXRvcklTNV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZmllbGRfZGVjb21wcmVzc29ySU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzhfRUVOU185YWxsb2NhdG9ySVM4X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElpTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJaU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWlFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWlOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElpRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElqTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJakVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJak5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWpFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWpOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElqRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElhTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJYUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJYU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWFFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWFOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElhRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElzTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJc0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJc05TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXNFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXNOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElzRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZEloTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaEVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJaE5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWhFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWhOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEloRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZEl0TlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJdEVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJdE5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXRFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXROUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEl0RUVFRUVFRUUANkxBU1ppcABQNkxBU1ppcABQSzZMQVNaaXAAaWkAdgB2aQB2aWlpaQB2aWlpAGlpaQAxM0R5bmFtaWNMQVNaaXAAUDEzRHluYW1pY0xBU1ppcABQSzEzRHluYW1pY0xBU1ppcAB2b2lkAGJvb2wAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AGludAB1bnNpZ25lZCBpbnQAbG9uZwB1bnNpZ25lZCBsb25nAGZsb2F0AGRvdWJsZQBzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE4xMGVtc2NyaXB0ZW4zdmFsRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMjFfX2Jhc2ljX3N0cmluZ19jb21tb25JTGIxRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOADAxMjM0NTY3ODlBQkNERUYuAFQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAc3RkOjpiYWRfZnVuY3Rpb25fY2FsbABOU3QzX18yMTdiYWRfZnVuY3Rpb25fY2FsbEUATlN0M19fMjE0X19zaGFyZWRfY291bnRFAE5TdDNfXzIxOV9fc2hhcmVkX3dlYWtfY291bnRFAG11dGV4IGxvY2sgZmFpbGVkAHRlcm1pbmF0aW5nIHdpdGggJXMgZXhjZXB0aW9uIG9mIHR5cGUgJXM6ICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZXhjZXB0aW9uIG9mIHR5cGUgJXMAdGVybWluYXRpbmcgd2l0aCAlcyBmb3JlaWduIGV4Y2VwdGlvbgB0ZXJtaW5hdGluZwB1bmNhdWdodABTdDlleGNlcHRpb24ATjEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mb0UAU3Q5dHlwZV9pbmZvAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAcHRocmVhZF9vbmNlIGZhaWx1cmUgaW4gX19jeGFfZ2V0X2dsb2JhbHNfZmFzdCgpAGNhbm5vdCBjcmVhdGUgcHRocmVhZCBrZXkgZm9yIF9fY3hhX2dldF9nbG9iYWxzKCkAY2Fubm90IHplcm8gb3V0IHRocmVhZCB2YWx1ZSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQB0ZXJtaW5hdGVfaGFuZGxlciB1bmV4cGVjdGVkbHkgcmV0dXJuZWQAc3RkOjpleGNlcHRpb24AU3QxMWxvZ2ljX2Vycm9yAFN0MTNydW50aW1lX2Vycm9yAFN0MTJsZW5ndGhfZXJyb3IATjEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19wYmFzZV90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRQB2AERuAGIAYwBoAGEAcwB0AGkAagBsAG0AZgBkAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0U=\";\n\n\n\n\n\n/* no memory initializer */\nvar tempDoublePtr = STATICTOP; STATICTOP += 16;\n\nassert(tempDoublePtr % 8 == 0);\n\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\n\n  HEAP8[tempDoublePtr] = HEAP8[ptr];\n\n  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\n\n  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\n\n  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\n\n}\n\nfunction copyTempDouble(ptr) {\n\n  HEAP8[tempDoublePtr] = HEAP8[ptr];\n\n  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\n\n  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\n\n  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\n\n  HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\n\n  HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\n\n  HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\n\n  HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\n\n}\n\n// {{PRE_LIBRARY}}\n\n\n  function ___assert_fail(condition, filename, line, func) {\n      abort('Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function']);\n    }\n\n  function ___cxa_allocate_exception(size) {\n      return _malloc(size);\n    }\n\n  \n  function __ZSt18uncaught_exceptionv() { // std::uncaught_exception()\n      return !!__ZSt18uncaught_exceptionv.uncaught_exception;\n    }\n  \n  var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function (adjusted) {\n        if (!adjusted || EXCEPTIONS.infos[adjusted]) return adjusted;\n        for (var key in EXCEPTIONS.infos) {\n          var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\n          var info = EXCEPTIONS.infos[ptr];\n          if (info.adjusted === adjusted) {\n            return ptr;\n          }\n        }\n        return adjusted;\n      },addRef:function (ptr) {\n        if (!ptr) return;\n        var info = EXCEPTIONS.infos[ptr];\n        info.refcount++;\n      },decRef:function (ptr) {\n        if (!ptr) return;\n        var info = EXCEPTIONS.infos[ptr];\n        assert(info.refcount > 0);\n        info.refcount--;\n        // A rethrown exception can reach refcount 0; it must not be discarded\n        // Its next handler will clear the rethrown flag and addRef it, prior to\n        // final decRef and destruction here\n        if (info.refcount === 0 && !info.rethrown) {\n          if (info.destructor) {\n            Module['dynCall_vi'](info.destructor, ptr);\n          }\n          delete EXCEPTIONS.infos[ptr];\n          ___cxa_free_exception(ptr);\n        }\n      },clearRef:function (ptr) {\n        if (!ptr) return;\n        var info = EXCEPTIONS.infos[ptr];\n        info.refcount = 0;\n      }};function ___cxa_begin_catch(ptr) {\n      var info = EXCEPTIONS.infos[ptr];\n      if (info && !info.caught) {\n        info.caught = true;\n        __ZSt18uncaught_exceptionv.uncaught_exception--;\n      }\n      if (info) info.rethrown = false;\n      EXCEPTIONS.caught.push(ptr);\n      EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));\n      return ptr;\n    }\n\n  function ___cxa_pure_virtual() {\n      ABORT = true;\n      throw 'Pure virtual function called!';\n    }\n\n  \n  \n  function ___resumeException(ptr) {\n      if (!EXCEPTIONS.last) { EXCEPTIONS.last = ptr; }\n      throw ptr;\n    }function ___cxa_find_matching_catch() {\n      var thrown = EXCEPTIONS.last;\n      if (!thrown) {\n        // just pass through the null ptr\n        return ((setTempRet0(0),0)|0);\n      }\n      var info = EXCEPTIONS.infos[thrown];\n      var throwntype = info.type;\n      if (!throwntype) {\n        // just pass through the thrown ptr\n        return ((setTempRet0(0),thrown)|0);\n      }\n      var typeArray = Array.prototype.slice.call(arguments);\n  \n      var pointer = Module['___cxa_is_pointer_type'](throwntype);\n      // can_catch receives a **, add indirection\n      if (!___cxa_find_matching_catch.buffer) ___cxa_find_matching_catch.buffer = _malloc(4);\n      HEAP32[((___cxa_find_matching_catch.buffer)>>2)]=thrown;\n      thrown = ___cxa_find_matching_catch.buffer;\n      // The different catch blocks are denoted by different types.\n      // Due to inheritance, those types may not precisely match the\n      // type of the thrown object. Find one which matches, and\n      // return the type of the catch block which should be called.\n      for (var i = 0; i < typeArray.length; i++) {\n        if (typeArray[i] && Module['___cxa_can_catch'](typeArray[i], throwntype, thrown)) {\n          thrown = HEAP32[((thrown)>>2)]; // undo indirection\n          info.adjusted = thrown;\n          return ((setTempRet0(typeArray[i]),thrown)|0);\n        }\n      }\n      // Shouldn't happen unless we have bogus data in typeArray\n      // or encounter a type for which emscripten doesn't have suitable\n      // typeinfo defined. Best-efforts match just in case.\n      thrown = HEAP32[((thrown)>>2)]; // undo indirection\n      return ((setTempRet0(throwntype),thrown)|0);\n    }function ___cxa_throw(ptr, type, destructor) {\n      EXCEPTIONS.infos[ptr] = {\n        ptr: ptr,\n        adjusted: ptr,\n        type: type,\n        destructor: destructor,\n        refcount: 0,\n        caught: false,\n        rethrown: false\n      };\n      EXCEPTIONS.last = ptr;\n      if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\n        __ZSt18uncaught_exceptionv.uncaught_exception = 1;\n      } else {\n        __ZSt18uncaught_exceptionv.uncaught_exception++;\n      }\n      throw ptr;\n    }\n\n  function ___gxx_personality_v0() {\n    }\n\n  function ___lock() {}\n\n  \n    \n\n  \n  var SYSCALLS={varargs:0,get:function (varargs) {\n        SYSCALLS.varargs += 4;\n        var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\n        return ret;\n      },getStr:function () {\n        var ret = Pointer_stringify(SYSCALLS.get());\n        return ret;\n      },get64:function () {\n        var low = SYSCALLS.get(), high = SYSCALLS.get();\n        if (low >= 0) assert(high === 0);\n        else assert(high === -1);\n        return low;\n      },getZero:function () {\n        assert(SYSCALLS.get() === 0);\n      }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\n  try {\n   // llseek\n      var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\n      // NOTE: offset_high is unused - Emscripten's off_t is 32-bit\n      var offset = offset_low;\n      FS.llseek(stream, offset, whence);\n      HEAP32[((result)>>2)]=stream.position;\n      if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  \n  function flush_NO_FILESYSTEM() {\n      // flush anything remaining in the buffers during shutdown\n      var fflush = Module[\"_fflush\"];\n      if (fflush) fflush(0);\n      var printChar = ___syscall146.printChar;\n      if (!printChar) return;\n      var buffers = ___syscall146.buffers;\n      if (buffers[1].length) printChar(1, 10);\n      if (buffers[2].length) printChar(2, 10);\n    }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\n  try {\n   // writev\n      // hack to support printf in NO_FILESYSTEM\n      var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\n      var ret = 0;\n      if (!___syscall146.buffers) {\n        ___syscall146.buffers = [null, [], []]; // 1 => stdout, 2 => stderr\n        ___syscall146.printChar = function(stream, curr) {\n          var buffer = ___syscall146.buffers[stream];\n          assert(buffer);\n          if (curr === 0 || curr === 10) {\n            (stream === 1 ? Module['print'] : Module['printErr'])(UTF8ArrayToString(buffer, 0));\n            buffer.length = 0;\n          } else {\n            buffer.push(curr);\n          }\n        };\n      }\n      for (var i = 0; i < iovcnt; i++) {\n        var ptr = HEAP32[(((iov)+(i*8))>>2)];\n        var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\n        for (var j = 0; j < len; j++) {\n          ___syscall146.printChar(stream, HEAPU8[ptr+j]);\n        }\n        ret += len;\n      }\n      return ret;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\n  try {\n   // ioctl\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\n  try {\n   // close\n      var stream = SYSCALLS.getStreamFromFD();\n      FS.close(stream);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  \n  \n   \n  \n   \n  \n     \n\n  function ___unlock() {}\n\n  \n  function getShiftFromSize(size) {\n      switch (size) {\n          case 1: return 0;\n          case 2: return 1;\n          case 4: return 2;\n          case 8: return 3;\n          default:\n              throw new TypeError('Unknown type size: ' + size);\n      }\n    }\n  \n  \n  \n  function embind_init_charCodes() {\n      var codes = new Array(256);\n      for (var i = 0; i < 256; ++i) {\n          codes[i] = String.fromCharCode(i);\n      }\n      embind_charCodes = codes;\n    }var embind_charCodes=undefined;function readLatin1String(ptr) {\n      var ret = \"\";\n      var c = ptr;\n      while (HEAPU8[c]) {\n          ret += embind_charCodes[HEAPU8[c++]];\n      }\n      return ret;\n    }\n  \n  \n  var awaitingDependencies={};\n  \n  var registeredTypes={};\n  \n  var typeDependencies={};\n  \n  \n  \n  \n  \n  \n  var char_0=48;\n  \n  var char_9=57;function makeLegalFunctionName(name) {\n      if (undefined === name) {\n          return '_unknown';\n      }\n      name = name.replace(/[^a-zA-Z0-9_]/g, '$');\n      var f = name.charCodeAt(0);\n      if (f >= char_0 && f <= char_9) {\n          return '_' + name;\n      } else {\n          return name;\n      }\n    }function createNamedFunction(name, body) {\n      name = makeLegalFunctionName(name);\n      /*jshint evil:true*/\n      return new Function(\n          \"body\",\n          \"return function \" + name + \"() {\\n\" +\n          \"    \\\"use strict\\\";\" +\n          \"    return body.apply(this, arguments);\\n\" +\n          \"};\\n\"\n      )(body);\n    }function extendError(baseErrorType, errorName) {\n      var errorClass = createNamedFunction(errorName, function(message) {\n          this.name = errorName;\n          this.message = message;\n  \n          var stack = (new Error(message)).stack;\n          if (stack !== undefined) {\n              this.stack = this.toString() + '\\n' +\n                  stack.replace(/^Error(:[^\\n]*)?\\n/, '');\n          }\n      });\n      errorClass.prototype = Object.create(baseErrorType.prototype);\n      errorClass.prototype.constructor = errorClass;\n      errorClass.prototype.toString = function() {\n          if (this.message === undefined) {\n              return this.name;\n          } else {\n              return this.name + ': ' + this.message;\n          }\n      };\n  \n      return errorClass;\n    }var BindingError=undefined;function throwBindingError(message) {\n      throw new BindingError(message);\n    }\n  \n  \n  \n  var InternalError=undefined;function throwInternalError(message) {\n      throw new InternalError(message);\n    }function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) {\n      myTypes.forEach(function(type) {\n          typeDependencies[type] = dependentTypes;\n      });\n  \n      function onComplete(typeConverters) {\n          var myTypeConverters = getTypeConverters(typeConverters);\n          if (myTypeConverters.length !== myTypes.length) {\n              throwInternalError('Mismatched type converter count');\n          }\n          for (var i = 0; i < myTypes.length; ++i) {\n              registerType(myTypes[i], myTypeConverters[i]);\n          }\n      }\n  \n      var typeConverters = new Array(dependentTypes.length);\n      var unregisteredTypes = [];\n      var registered = 0;\n      dependentTypes.forEach(function(dt, i) {\n          if (registeredTypes.hasOwnProperty(dt)) {\n              typeConverters[i] = registeredTypes[dt];\n          } else {\n              unregisteredTypes.push(dt);\n              if (!awaitingDependencies.hasOwnProperty(dt)) {\n                  awaitingDependencies[dt] = [];\n              }\n              awaitingDependencies[dt].push(function() {\n                  typeConverters[i] = registeredTypes[dt];\n                  ++registered;\n                  if (registered === unregisteredTypes.length) {\n                      onComplete(typeConverters);\n                  }\n              });\n          }\n      });\n      if (0 === unregisteredTypes.length) {\n          onComplete(typeConverters);\n      }\n    }function registerType(rawType, registeredInstance, options) {\n      options = options || {};\n  \n      if (!('argPackAdvance' in registeredInstance)) {\n          throw new TypeError('registerType registeredInstance requires argPackAdvance');\n      }\n  \n      var name = registeredInstance.name;\n      if (!rawType) {\n          throwBindingError('type \"' + name + '\" must have a positive integer typeid pointer');\n      }\n      if (registeredTypes.hasOwnProperty(rawType)) {\n          if (options.ignoreDuplicateRegistrations) {\n              return;\n          } else {\n              throwBindingError(\"Cannot register type '\" + name + \"' twice\");\n          }\n      }\n  \n      registeredTypes[rawType] = registeredInstance;\n      delete typeDependencies[rawType];\n  \n      if (awaitingDependencies.hasOwnProperty(rawType)) {\n          var callbacks = awaitingDependencies[rawType];\n          delete awaitingDependencies[rawType];\n          callbacks.forEach(function(cb) {\n              cb();\n          });\n      }\n    }function __embind_register_bool(rawType, name, size, trueValue, falseValue) {\n      var shift = getShiftFromSize(size);\n  \n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(wt) {\n              // ambiguous emscripten ABI: sometimes return values are\n              // true or false, and sometimes integers (0 or 1)\n              return !!wt;\n          },\n          'toWireType': function(destructors, o) {\n              return o ? trueValue : falseValue;\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': function(pointer) {\n              // TODO: if heap is fixed (like in asm.js) this could be executed outside\n              var heap;\n              if (size === 1) {\n                  heap = HEAP8;\n              } else if (size === 2) {\n                  heap = HEAP16;\n              } else if (size === 4) {\n                  heap = HEAP32;\n              } else {\n                  throw new TypeError(\"Unknown boolean type size: \" + name);\n              }\n              return this['fromWireType'](heap[pointer >> shift]);\n          },\n          destructorFunction: null, // This type does not need a destructor\n      });\n    }\n\n  \n  \n  \n  function ClassHandle_isAliasOf(other) {\n      if (!(this instanceof ClassHandle)) {\n          return false;\n      }\n      if (!(other instanceof ClassHandle)) {\n          return false;\n      }\n  \n      var leftClass = this.$$.ptrType.registeredClass;\n      var left = this.$$.ptr;\n      var rightClass = other.$$.ptrType.registeredClass;\n      var right = other.$$.ptr;\n  \n      while (leftClass.baseClass) {\n          left = leftClass.upcast(left);\n          leftClass = leftClass.baseClass;\n      }\n  \n      while (rightClass.baseClass) {\n          right = rightClass.upcast(right);\n          rightClass = rightClass.baseClass;\n      }\n  \n      return leftClass === rightClass && left === right;\n    }\n  \n  \n  function shallowCopyInternalPointer(o) {\n      return {\n          count: o.count,\n          deleteScheduled: o.deleteScheduled,\n          preservePointerOnDelete: o.preservePointerOnDelete,\n          ptr: o.ptr,\n          ptrType: o.ptrType,\n          smartPtr: o.smartPtr,\n          smartPtrType: o.smartPtrType,\n      };\n    }\n  \n  function throwInstanceAlreadyDeleted(obj) {\n      function getInstanceTypeName(handle) {\n        return handle.$$.ptrType.registeredClass.name;\n      }\n      throwBindingError(getInstanceTypeName(obj) + ' instance already deleted');\n    }function ClassHandle_clone() {\n      if (!this.$$.ptr) {\n          throwInstanceAlreadyDeleted(this);\n      }\n  \n      if (this.$$.preservePointerOnDelete) {\n          this.$$.count.value += 1;\n          return this;\n      } else {\n          var clone = Object.create(Object.getPrototypeOf(this), {\n              $$: {\n                  value: shallowCopyInternalPointer(this.$$),\n              }\n          });\n  \n          clone.$$.count.value += 1;\n          clone.$$.deleteScheduled = false;\n          return clone;\n      }\n    }\n  \n  \n  function runDestructor(handle) {\n      var $$ = handle.$$;\n      if ($$.smartPtr) {\n          $$.smartPtrType.rawDestructor($$.smartPtr);\n      } else {\n          $$.ptrType.registeredClass.rawDestructor($$.ptr);\n      }\n    }function ClassHandle_delete() {\n      if (!this.$$.ptr) {\n          throwInstanceAlreadyDeleted(this);\n      }\n  \n      if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {\n          throwBindingError('Object already scheduled for deletion');\n      }\n  \n      this.$$.count.value -= 1;\n      var toDelete = 0 === this.$$.count.value;\n      if (toDelete) {\n          runDestructor(this);\n      }\n      if (!this.$$.preservePointerOnDelete) {\n          this.$$.smartPtr = undefined;\n          this.$$.ptr = undefined;\n      }\n    }\n  \n  function ClassHandle_isDeleted() {\n      return !this.$$.ptr;\n    }\n  \n  \n  var delayFunction=undefined;\n  \n  var deletionQueue=[];\n  \n  function flushPendingDeletes() {\n      while (deletionQueue.length) {\n          var obj = deletionQueue.pop();\n          obj.$$.deleteScheduled = false;\n          obj['delete']();\n      }\n    }function ClassHandle_deleteLater() {\n      if (!this.$$.ptr) {\n          throwInstanceAlreadyDeleted(this);\n      }\n      if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) {\n          throwBindingError('Object already scheduled for deletion');\n      }\n      deletionQueue.push(this);\n      if (deletionQueue.length === 1 && delayFunction) {\n          delayFunction(flushPendingDeletes);\n      }\n      this.$$.deleteScheduled = true;\n      return this;\n    }function init_ClassHandle() {\n      ClassHandle.prototype['isAliasOf'] = ClassHandle_isAliasOf;\n      ClassHandle.prototype['clone'] = ClassHandle_clone;\n      ClassHandle.prototype['delete'] = ClassHandle_delete;\n      ClassHandle.prototype['isDeleted'] = ClassHandle_isDeleted;\n      ClassHandle.prototype['deleteLater'] = ClassHandle_deleteLater;\n    }function ClassHandle() {\n    }\n  \n  var registeredPointers={};\n  \n  \n  function ensureOverloadTable(proto, methodName, humanName) {\n      if (undefined === proto[methodName].overloadTable) {\n          var prevFunc = proto[methodName];\n          // Inject an overload resolver function that routes to the appropriate overload based on the number of arguments.\n          proto[methodName] = function() {\n              // TODO This check can be removed in -O3 level \"unsafe\" optimizations.\n              if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) {\n                  throwBindingError(\"Function '\" + humanName + \"' called with an invalid number of arguments (\" + arguments.length + \") - expects one of (\" + proto[methodName].overloadTable + \")!\");\n              }\n              return proto[methodName].overloadTable[arguments.length].apply(this, arguments);\n          };\n          // Move the previous function into the overload table.\n          proto[methodName].overloadTable = [];\n          proto[methodName].overloadTable[prevFunc.argCount] = prevFunc;\n      }\n    }function exposePublicSymbol(name, value, numArguments) {\n      if (Module.hasOwnProperty(name)) {\n          if (undefined === numArguments || (undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments])) {\n              throwBindingError(\"Cannot register public name '\" + name + \"' twice\");\n          }\n  \n          // We are exposing a function with the same name as an existing function. Create an overload table and a function selector\n          // that routes between the two.\n          ensureOverloadTable(Module, name, name);\n          if (Module.hasOwnProperty(numArguments)) {\n              throwBindingError(\"Cannot register multiple overloads of a function with the same number of arguments (\" + numArguments + \")!\");\n          }\n          // Add the new function into the overload table.\n          Module[name].overloadTable[numArguments] = value;\n      }\n      else {\n          Module[name] = value;\n          if (undefined !== numArguments) {\n              Module[name].numArguments = numArguments;\n          }\n      }\n    }\n  \n  function RegisteredClass(\n      name,\n      constructor,\n      instancePrototype,\n      rawDestructor,\n      baseClass,\n      getActualType,\n      upcast,\n      downcast\n    ) {\n      this.name = name;\n      this.constructor = constructor;\n      this.instancePrototype = instancePrototype;\n      this.rawDestructor = rawDestructor;\n      this.baseClass = baseClass;\n      this.getActualType = getActualType;\n      this.upcast = upcast;\n      this.downcast = downcast;\n      this.pureVirtualFunctions = [];\n    }\n  \n  \n  \n  function upcastPointer(ptr, ptrClass, desiredClass) {\n      while (ptrClass !== desiredClass) {\n          if (!ptrClass.upcast) {\n              throwBindingError(\"Expected null or instance of \" + desiredClass.name + \", got an instance of \" + ptrClass.name);\n          }\n          ptr = ptrClass.upcast(ptr);\n          ptrClass = ptrClass.baseClass;\n      }\n      return ptr;\n    }function constNoSmartPtrRawPointerToWireType(destructors, handle) {\n      if (handle === null) {\n          if (this.isReference) {\n              throwBindingError('null is not a valid ' + this.name);\n          }\n          return 0;\n      }\n  \n      if (!handle.$$) {\n          throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n      }\n      if (!handle.$$.ptr) {\n          throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n      }\n      var handleClass = handle.$$.ptrType.registeredClass;\n      var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n      return ptr;\n    }\n  \n  function genericPointerToWireType(destructors, handle) {\n      var ptr;\n      if (handle === null) {\n          if (this.isReference) {\n              throwBindingError('null is not a valid ' + this.name);\n          }\n  \n          if (this.isSmartPointer) {\n              ptr = this.rawConstructor();\n              if (destructors !== null) {\n                  destructors.push(this.rawDestructor, ptr);\n              }\n              return ptr;\n          } else {\n              return 0;\n          }\n      }\n  \n      if (!handle.$$) {\n          throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n      }\n      if (!handle.$$.ptr) {\n          throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n      }\n      if (!this.isConst && handle.$$.ptrType.isConst) {\n          throwBindingError('Cannot convert argument of type ' + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + ' to parameter type ' + this.name);\n      }\n      var handleClass = handle.$$.ptrType.registeredClass;\n      ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n  \n      if (this.isSmartPointer) {\n          // TODO: this is not strictly true\n          // We could support BY_EMVAL conversions from raw pointers to smart pointers\n          // because the smart pointer can hold a reference to the handle\n          if (undefined === handle.$$.smartPtr) {\n              throwBindingError('Passing raw pointer to smart pointer is illegal');\n          }\n  \n          switch (this.sharingPolicy) {\n              case 0: // NONE\n                  // no upcasting\n                  if (handle.$$.smartPtrType === this) {\n                      ptr = handle.$$.smartPtr;\n                  } else {\n                      throwBindingError('Cannot convert argument of type ' + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + ' to parameter type ' + this.name);\n                  }\n                  break;\n  \n              case 1: // INTRUSIVE\n                  ptr = handle.$$.smartPtr;\n                  break;\n  \n              case 2: // BY_EMVAL\n                  if (handle.$$.smartPtrType === this) {\n                      ptr = handle.$$.smartPtr;\n                  } else {\n                      var clonedHandle = handle['clone']();\n                      ptr = this.rawShare(\n                          ptr,\n                          __emval_register(function() {\n                              clonedHandle['delete']();\n                          })\n                      );\n                      if (destructors !== null) {\n                          destructors.push(this.rawDestructor, ptr);\n                      }\n                  }\n                  break;\n  \n              default:\n                  throwBindingError('Unsupporting sharing policy');\n          }\n      }\n      return ptr;\n    }\n  \n  function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) {\n      if (handle === null) {\n          if (this.isReference) {\n              throwBindingError('null is not a valid ' + this.name);\n          }\n          return 0;\n      }\n  \n      if (!handle.$$) {\n          throwBindingError('Cannot pass \"' + _embind_repr(handle) + '\" as a ' + this.name);\n      }\n      if (!handle.$$.ptr) {\n          throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name);\n      }\n      if (handle.$$.ptrType.isConst) {\n          throwBindingError('Cannot convert argument of type ' + handle.$$.ptrType.name + ' to parameter type ' + this.name);\n      }\n      var handleClass = handle.$$.ptrType.registeredClass;\n      var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass);\n      return ptr;\n    }\n  \n  \n  function simpleReadValueFromPointer(pointer) {\n      return this['fromWireType'](HEAPU32[pointer >> 2]);\n    }\n  \n  function RegisteredPointer_getPointee(ptr) {\n      if (this.rawGetPointee) {\n          ptr = this.rawGetPointee(ptr);\n      }\n      return ptr;\n    }\n  \n  function RegisteredPointer_destructor(ptr) {\n      if (this.rawDestructor) {\n          this.rawDestructor(ptr);\n      }\n    }\n  \n  function RegisteredPointer_deleteObject(handle) {\n      if (handle !== null) {\n          handle['delete']();\n      }\n    }\n  \n  \n  function downcastPointer(ptr, ptrClass, desiredClass) {\n      if (ptrClass === desiredClass) {\n          return ptr;\n      }\n      if (undefined === desiredClass.baseClass) {\n          return null; // no conversion\n      }\n  \n      var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass);\n      if (rv === null) {\n          return null;\n      }\n      return desiredClass.downcast(rv);\n    }\n  \n  \n  \n  \n  function getInheritedInstanceCount() {\n      return Object.keys(registeredInstances).length;\n    }\n  \n  function getLiveInheritedInstances() {\n      var rv = [];\n      for (var k in registeredInstances) {\n          if (registeredInstances.hasOwnProperty(k)) {\n              rv.push(registeredInstances[k]);\n          }\n      }\n      return rv;\n    }\n  \n  function setDelayFunction(fn) {\n      delayFunction = fn;\n      if (deletionQueue.length && delayFunction) {\n          delayFunction(flushPendingDeletes);\n      }\n    }function init_embind() {\n      Module['getInheritedInstanceCount'] = getInheritedInstanceCount;\n      Module['getLiveInheritedInstances'] = getLiveInheritedInstances;\n      Module['flushPendingDeletes'] = flushPendingDeletes;\n      Module['setDelayFunction'] = setDelayFunction;\n    }var registeredInstances={};\n  \n  function getBasestPointer(class_, ptr) {\n      if (ptr === undefined) {\n          throwBindingError('ptr should not be undefined');\n      }\n      while (class_.baseClass) {\n          ptr = class_.upcast(ptr);\n          class_ = class_.baseClass;\n      }\n      return ptr;\n    }function getInheritedInstance(class_, ptr) {\n      ptr = getBasestPointer(class_, ptr);\n      return registeredInstances[ptr];\n    }\n  \n  function makeClassHandle(prototype, record) {\n      if (!record.ptrType || !record.ptr) {\n          throwInternalError('makeClassHandle requires ptr and ptrType');\n      }\n      var hasSmartPtrType = !!record.smartPtrType;\n      var hasSmartPtr = !!record.smartPtr;\n      if (hasSmartPtrType !== hasSmartPtr) {\n          throwInternalError('Both smartPtrType and smartPtr must be specified');\n      }\n      record.count = { value: 1 };\n      return Object.create(prototype, {\n          $$: {\n              value: record,\n          },\n      });\n    }function RegisteredPointer_fromWireType(ptr) {\n      // ptr is a raw pointer (or a raw smartpointer)\n  \n      // rawPointer is a maybe-null raw pointer\n      var rawPointer = this.getPointee(ptr);\n      if (!rawPointer) {\n          this.destructor(ptr);\n          return null;\n      }\n  \n      var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer);\n      if (undefined !== registeredInstance) {\n          // JS object has been neutered, time to repopulate it\n          if (0 === registeredInstance.$$.count.value) {\n              registeredInstance.$$.ptr = rawPointer;\n              registeredInstance.$$.smartPtr = ptr;\n              return registeredInstance['clone']();\n          } else {\n              // else, just increment reference count on existing object\n              // it already has a reference to the smart pointer\n              var rv = registeredInstance['clone']();\n              this.destructor(ptr);\n              return rv;\n          }\n      }\n  \n      function makeDefaultHandle() {\n          if (this.isSmartPointer) {\n              return makeClassHandle(this.registeredClass.instancePrototype, {\n                  ptrType: this.pointeeType,\n                  ptr: rawPointer,\n                  smartPtrType: this,\n                  smartPtr: ptr,\n              });\n          } else {\n              return makeClassHandle(this.registeredClass.instancePrototype, {\n                  ptrType: this,\n                  ptr: ptr,\n              });\n          }\n      }\n  \n      var actualType = this.registeredClass.getActualType(rawPointer);\n      var registeredPointerRecord = registeredPointers[actualType];\n      if (!registeredPointerRecord) {\n          return makeDefaultHandle.call(this);\n      }\n  \n      var toType;\n      if (this.isConst) {\n          toType = registeredPointerRecord.constPointerType;\n      } else {\n          toType = registeredPointerRecord.pointerType;\n      }\n      var dp = downcastPointer(\n          rawPointer,\n          this.registeredClass,\n          toType.registeredClass);\n      if (dp === null) {\n          return makeDefaultHandle.call(this);\n      }\n      if (this.isSmartPointer) {\n          return makeClassHandle(toType.registeredClass.instancePrototype, {\n              ptrType: toType,\n              ptr: dp,\n              smartPtrType: this,\n              smartPtr: ptr,\n          });\n      } else {\n          return makeClassHandle(toType.registeredClass.instancePrototype, {\n              ptrType: toType,\n              ptr: dp,\n          });\n      }\n    }function init_RegisteredPointer() {\n      RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee;\n      RegisteredPointer.prototype.destructor = RegisteredPointer_destructor;\n      RegisteredPointer.prototype['argPackAdvance'] = 8;\n      RegisteredPointer.prototype['readValueFromPointer'] = simpleReadValueFromPointer;\n      RegisteredPointer.prototype['deleteObject'] = RegisteredPointer_deleteObject;\n      RegisteredPointer.prototype['fromWireType'] = RegisteredPointer_fromWireType;\n    }function RegisteredPointer(\n      name,\n      registeredClass,\n      isReference,\n      isConst,\n  \n      // smart pointer properties\n      isSmartPointer,\n      pointeeType,\n      sharingPolicy,\n      rawGetPointee,\n      rawConstructor,\n      rawShare,\n      rawDestructor\n    ) {\n      this.name = name;\n      this.registeredClass = registeredClass;\n      this.isReference = isReference;\n      this.isConst = isConst;\n  \n      // smart pointer properties\n      this.isSmartPointer = isSmartPointer;\n      this.pointeeType = pointeeType;\n      this.sharingPolicy = sharingPolicy;\n      this.rawGetPointee = rawGetPointee;\n      this.rawConstructor = rawConstructor;\n      this.rawShare = rawShare;\n      this.rawDestructor = rawDestructor;\n  \n      if (!isSmartPointer && registeredClass.baseClass === undefined) {\n          if (isConst) {\n              this['toWireType'] = constNoSmartPtrRawPointerToWireType;\n              this.destructorFunction = null;\n          } else {\n              this['toWireType'] = nonConstNoSmartPtrRawPointerToWireType;\n              this.destructorFunction = null;\n          }\n      } else {\n          this['toWireType'] = genericPointerToWireType;\n          // Here we must leave this.destructorFunction undefined, since whether genericPointerToWireType returns\n          // a pointer that needs to be freed up is runtime-dependent, and cannot be evaluated at registration time.\n          // TODO: Create an alternative mechanism that allows removing the use of var destructors = []; array in\n          //       craftInvokerFunction altogether.\n      }\n    }\n  \n  function replacePublicSymbol(name, value, numArguments) {\n      if (!Module.hasOwnProperty(name)) {\n          throwInternalError('Replacing nonexistant public symbol');\n      }\n      // If there's an overload table for this symbol, replace the symbol in the overload table instead.\n      if (undefined !== Module[name].overloadTable && undefined !== numArguments) {\n          Module[name].overloadTable[numArguments] = value;\n      }\n      else {\n          Module[name] = value;\n          Module[name].argCount = numArguments;\n      }\n    }\n  \n  function embind__requireFunction(signature, rawFunction) {\n      signature = readLatin1String(signature);\n  \n      function makeDynCaller(dynCall) {\n          var args = [];\n          for (var i = 1; i < signature.length; ++i) {\n              args.push('a' + i);\n          }\n  \n          var name = 'dynCall_' + signature + '_' + rawFunction;\n          var body = 'return function ' + name + '(' + args.join(', ') + ') {\\n';\n          body    += '    return dynCall(rawFunction' + (args.length ? ', ' : '') + args.join(', ') + ');\\n';\n          body    += '};\\n';\n  \n          return (new Function('dynCall', 'rawFunction', body))(dynCall, rawFunction);\n      }\n  \n      var fp;\n      if (Module['FUNCTION_TABLE_' + signature] !== undefined) {\n          fp = Module['FUNCTION_TABLE_' + signature][rawFunction];\n      } else if (typeof FUNCTION_TABLE !== \"undefined\") {\n          fp = FUNCTION_TABLE[rawFunction];\n      } else {\n          // asm.js does not give direct access to the function tables,\n          // and thus we must go through the dynCall interface which allows\n          // calling into a signature's function table by pointer value.\n          //\n          // https://github.com/dherman/asm.js/issues/83\n          //\n          // This has three main penalties:\n          // - dynCall is another function call in the path from JavaScript to C++.\n          // - JITs may not predict through the function table indirection at runtime.\n          var dc = Module[\"asm\"]['dynCall_' + signature];\n          if (dc === undefined) {\n              // We will always enter this branch if the signature\n              // contains 'f' and PRECISE_F32 is not enabled.\n              //\n              // Try again, replacing 'f' with 'd'.\n              dc = Module[\"asm\"]['dynCall_' + signature.replace(/f/g, 'd')];\n              if (dc === undefined) {\n                  throwBindingError(\"No dynCall invoker for signature: \" + signature);\n              }\n          }\n          fp = makeDynCaller(dc);\n      }\n  \n      if (typeof fp !== \"function\") {\n          throwBindingError(\"unknown function pointer with signature \" + signature + \": \" + rawFunction);\n      }\n      return fp;\n    }\n  \n  \n  var UnboundTypeError=undefined;\n  \n  function getTypeName(type) {\n      var ptr = ___getTypeName(type);\n      var rv = readLatin1String(ptr);\n      _free(ptr);\n      return rv;\n    }function throwUnboundTypeError(message, types) {\n      var unboundTypes = [];\n      var seen = {};\n      function visit(type) {\n          if (seen[type]) {\n              return;\n          }\n          if (registeredTypes[type]) {\n              return;\n          }\n          if (typeDependencies[type]) {\n              typeDependencies[type].forEach(visit);\n              return;\n          }\n          unboundTypes.push(type);\n          seen[type] = true;\n      }\n      types.forEach(visit);\n  \n      throw new UnboundTypeError(message + ': ' + unboundTypes.map(getTypeName).join([', ']));\n    }function __embind_register_class(\n      rawType,\n      rawPointerType,\n      rawConstPointerType,\n      baseClassRawType,\n      getActualTypeSignature,\n      getActualType,\n      upcastSignature,\n      upcast,\n      downcastSignature,\n      downcast,\n      name,\n      destructorSignature,\n      rawDestructor\n    ) {\n      name = readLatin1String(name);\n      getActualType = embind__requireFunction(getActualTypeSignature, getActualType);\n      if (upcast) {\n          upcast = embind__requireFunction(upcastSignature, upcast);\n      }\n      if (downcast) {\n          downcast = embind__requireFunction(downcastSignature, downcast);\n      }\n      rawDestructor = embind__requireFunction(destructorSignature, rawDestructor);\n      var legalFunctionName = makeLegalFunctionName(name);\n  \n      exposePublicSymbol(legalFunctionName, function() {\n          // this code cannot run if baseClassRawType is zero\n          throwUnboundTypeError('Cannot construct ' + name + ' due to unbound types', [baseClassRawType]);\n      });\n  \n      whenDependentTypesAreResolved(\n          [rawType, rawPointerType, rawConstPointerType],\n          baseClassRawType ? [baseClassRawType] : [],\n          function(base) {\n              base = base[0];\n  \n              var baseClass;\n              var basePrototype;\n              if (baseClassRawType) {\n                  baseClass = base.registeredClass;\n                  basePrototype = baseClass.instancePrototype;\n              } else {\n                  basePrototype = ClassHandle.prototype;\n              }\n  \n              var constructor = createNamedFunction(legalFunctionName, function() {\n                  if (Object.getPrototypeOf(this) !== instancePrototype) {\n                      throw new BindingError(\"Use 'new' to construct \" + name);\n                  }\n                  if (undefined === registeredClass.constructor_body) {\n                      throw new BindingError(name + \" has no accessible constructor\");\n                  }\n                  var body = registeredClass.constructor_body[arguments.length];\n                  if (undefined === body) {\n                      throw new BindingError(\"Tried to invoke ctor of \" + name + \" with invalid number of parameters (\" + arguments.length + \") - expected (\" + Object.keys(registeredClass.constructor_body).toString() + \") parameters instead!\");\n                  }\n                  return body.apply(this, arguments);\n              });\n  \n              var instancePrototype = Object.create(basePrototype, {\n                  constructor: { value: constructor },\n              });\n  \n              constructor.prototype = instancePrototype;\n  \n              var registeredClass = new RegisteredClass(\n                  name,\n                  constructor,\n                  instancePrototype,\n                  rawDestructor,\n                  baseClass,\n                  getActualType,\n                  upcast,\n                  downcast);\n  \n              var referenceConverter = new RegisteredPointer(\n                  name,\n                  registeredClass,\n                  true,\n                  false,\n                  false);\n  \n              var pointerConverter = new RegisteredPointer(\n                  name + '*',\n                  registeredClass,\n                  false,\n                  false,\n                  false);\n  \n              var constPointerConverter = new RegisteredPointer(\n                  name + ' const*',\n                  registeredClass,\n                  false,\n                  true,\n                  false);\n  \n              registeredPointers[rawType] = {\n                  pointerType: pointerConverter,\n                  constPointerType: constPointerConverter\n              };\n  \n              replacePublicSymbol(legalFunctionName, constructor);\n  \n              return [referenceConverter, pointerConverter, constPointerConverter];\n          }\n      );\n    }\n\n  \n  function heap32VectorToArray(count, firstElement) {\n      var array = [];\n      for (var i = 0; i < count; i++) {\n          array.push(HEAP32[(firstElement >> 2) + i]);\n      }\n      return array;\n    }\n  \n  function runDestructors(destructors) {\n      while (destructors.length) {\n          var ptr = destructors.pop();\n          var del = destructors.pop();\n          del(ptr);\n      }\n    }function __embind_register_class_constructor(\n      rawClassType,\n      argCount,\n      rawArgTypesAddr,\n      invokerSignature,\n      invoker,\n      rawConstructor\n    ) {\n      var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);\n      invoker = embind__requireFunction(invokerSignature, invoker);\n  \n      whenDependentTypesAreResolved([], [rawClassType], function(classType) {\n          classType = classType[0];\n          var humanName = 'constructor ' + classType.name;\n  \n          if (undefined === classType.registeredClass.constructor_body) {\n              classType.registeredClass.constructor_body = [];\n          }\n          if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) {\n              throw new BindingError(\"Cannot register multiple constructors with identical number of parameters (\" + (argCount-1) + \") for class '\" + classType.name + \"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");\n          }\n          classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() {\n              throwUnboundTypeError('Cannot construct ' + classType.name + ' due to unbound types', rawArgTypes);\n          };\n  \n          whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) {\n              classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() {\n                  if (arguments.length !== argCount - 1) {\n                      throwBindingError(humanName + ' called with ' + arguments.length + ' arguments, expected ' + (argCount-1));\n                  }\n                  var destructors = [];\n                  var args = new Array(argCount);\n                  args[0] = rawConstructor;\n                  for (var i = 1; i < argCount; ++i) {\n                      args[i] = argTypes[i]['toWireType'](destructors, arguments[i - 1]);\n                  }\n  \n                  var ptr = invoker.apply(null, args);\n                  runDestructors(destructors);\n  \n                  return argTypes[0]['fromWireType'](ptr);\n              };\n              return [];\n          });\n          return [];\n      });\n    }\n\n  \n  \n  function new_(constructor, argumentList) {\n      if (!(constructor instanceof Function)) {\n          throw new TypeError('new_ called with constructor type ' + typeof(constructor) + \" which is not a function\");\n      }\n  \n      /*\n       * Previously, the following line was just:\n  \n       function dummy() {};\n  \n       * Unfortunately, Chrome was preserving 'dummy' as the object's name, even though at creation, the 'dummy' has the\n       * correct constructor name.  Thus, objects created with IMVU.new would show up in the debugger as 'dummy', which\n       * isn't very helpful.  Using IMVU.createNamedFunction addresses the issue.  Doublely-unfortunately, there's no way\n       * to write a test for this behavior.  -NRD 2013.02.22\n       */\n      var dummy = createNamedFunction(constructor.name || 'unknownFunctionName', function(){});\n      dummy.prototype = constructor.prototype;\n      var obj = new dummy;\n  \n      var r = constructor.apply(obj, argumentList);\n      return (r instanceof Object) ? r : obj;\n    }function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) {\n      // humanName: a human-readable string name for the function to be generated.\n      // argTypes: An array that contains the embind type objects for all types in the function signature.\n      //    argTypes[0] is the type object for the function return value.\n      //    argTypes[1] is the type object for function this object/class type, or null if not crafting an invoker for a class method.\n      //    argTypes[2...] are the actual function parameters.\n      // classType: The embind type object for the class to be bound, or null if this is not a method of a class.\n      // cppInvokerFunc: JS Function object to the C++-side function that interops into C++ code.\n      // cppTargetFunc: Function pointer (an integer to FUNCTION_TABLE) to the target C++ function the cppInvokerFunc will end up calling.\n      var argCount = argTypes.length;\n  \n      if (argCount < 2) {\n          throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");\n      }\n  \n      var isClassMethodFunc = (argTypes[1] !== null && classType !== null);\n  \n      // Free functions with signature \"void function()\" do not need an invoker that marshalls between wire types.\n  // TODO: This omits argument count check - enable only at -O3 or similar.\n  //    if (ENABLE_UNSAFE_OPTS && argCount == 2 && argTypes[0].name == \"void\" && !isClassMethodFunc) {\n  //       return FUNCTION_TABLE[fn];\n  //    }\n  \n  \n      // Determine if we need to use a dynamic stack to store the destructors for the function parameters.\n      // TODO: Remove this completely once all function invokers are being dynamically generated.\n      var needsDestructorStack = false;\n  \n      for(var i = 1; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here.\n          if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { // The type does not define a destructor function - must use dynamic stack\n              needsDestructorStack = true;\n              break;\n          }\n      }\n  \n      var returns = (argTypes[0].name !== \"void\");\n  \n      var argsList = \"\";\n      var argsListWired = \"\";\n      for(var i = 0; i < argCount - 2; ++i) {\n          argsList += (i!==0?\", \":\"\")+\"arg\"+i;\n          argsListWired += (i!==0?\", \":\"\")+\"arg\"+i+\"Wired\";\n      }\n  \n      var invokerFnBody =\n          \"return function \"+makeLegalFunctionName(humanName)+\"(\"+argsList+\") {\\n\" +\n          \"if (arguments.length !== \"+(argCount - 2)+\") {\\n\" +\n              \"throwBindingError('function \"+humanName+\" called with ' + arguments.length + ' arguments, expected \"+(argCount - 2)+\" args!');\\n\" +\n          \"}\\n\";\n  \n  \n      if (needsDestructorStack) {\n          invokerFnBody +=\n              \"var destructors = [];\\n\";\n      }\n  \n      var dtorStack = needsDestructorStack ? \"destructors\" : \"null\";\n      var args1 = [\"throwBindingError\", \"invoker\", \"fn\", \"runDestructors\", \"retType\", \"classParam\"];\n      var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]];\n  \n  \n      if (isClassMethodFunc) {\n          invokerFnBody += \"var thisWired = classParam.toWireType(\"+dtorStack+\", this);\\n\";\n      }\n  \n      for(var i = 0; i < argCount - 2; ++i) {\n          invokerFnBody += \"var arg\"+i+\"Wired = argType\"+i+\".toWireType(\"+dtorStack+\", arg\"+i+\"); // \"+argTypes[i+2].name+\"\\n\";\n          args1.push(\"argType\"+i);\n          args2.push(argTypes[i+2]);\n      }\n  \n      if (isClassMethodFunc) {\n          argsListWired = \"thisWired\" + (argsListWired.length > 0 ? \", \" : \"\") + argsListWired;\n      }\n  \n      invokerFnBody +=\n          (returns?\"var rv = \":\"\") + \"invoker(fn\"+(argsListWired.length>0?\", \":\"\")+argsListWired+\");\\n\";\n  \n      if (needsDestructorStack) {\n          invokerFnBody += \"runDestructors(destructors);\\n\";\n      } else {\n          for(var i = isClassMethodFunc?1:2; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method.\n              var paramName = (i === 1 ? \"thisWired\" : (\"arg\"+(i - 2)+\"Wired\"));\n              if (argTypes[i].destructorFunction !== null) {\n                  invokerFnBody += paramName+\"_dtor(\"+paramName+\"); // \"+argTypes[i].name+\"\\n\";\n                  args1.push(paramName+\"_dtor\");\n                  args2.push(argTypes[i].destructorFunction);\n              }\n          }\n      }\n  \n      if (returns) {\n          invokerFnBody += \"var ret = retType.fromWireType(rv);\\n\" +\n                           \"return ret;\\n\";\n      } else {\n      }\n      invokerFnBody += \"}\\n\";\n  \n      args1.push(invokerFnBody);\n  \n      var invokerFunction = new_(Function, args1).apply(null, args2);\n      return invokerFunction;\n    }function __embind_register_class_function(\n      rawClassType,\n      methodName,\n      argCount,\n      rawArgTypesAddr, // [ReturnType, ThisType, Args...]\n      invokerSignature,\n      rawInvoker,\n      context,\n      isPureVirtual\n    ) {\n      var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr);\n      methodName = readLatin1String(methodName);\n      rawInvoker = embind__requireFunction(invokerSignature, rawInvoker);\n  \n      whenDependentTypesAreResolved([], [rawClassType], function(classType) {\n          classType = classType[0];\n          var humanName = classType.name + '.' + methodName;\n  \n          if (isPureVirtual) {\n              classType.registeredClass.pureVirtualFunctions.push(methodName);\n          }\n  \n          function unboundTypesHandler() {\n              throwUnboundTypeError('Cannot call ' + humanName + ' due to unbound types', rawArgTypes);\n          }\n  \n          var proto = classType.registeredClass.instancePrototype;\n          var method = proto[methodName];\n          if (undefined === method || (undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2)) {\n              // This is the first overload to be registered, OR we are replacing a function in the base class with a function in the derived class.\n              unboundTypesHandler.argCount = argCount - 2;\n              unboundTypesHandler.className = classType.name;\n              proto[methodName] = unboundTypesHandler;\n          } else {\n              // There was an existing function with the same name registered. Set up a function overload routing table.\n              ensureOverloadTable(proto, methodName, humanName);\n              proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler;\n          }\n  \n          whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) {\n  \n              var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context);\n  \n              // Replace the initial unbound-handler-stub function with the appropriate member function, now that all types\n              // are resolved. If multiple overloads are registered for this function, the function goes into an overload table.\n              if (undefined === proto[methodName].overloadTable) {\n                  // Set argCount in case an overload is registered later\n                  memberFunction.argCount = argCount - 2;\n                  proto[methodName] = memberFunction;\n              } else {\n                  proto[methodName].overloadTable[argCount - 2] = memberFunction;\n              }\n  \n              return [];\n          });\n          return [];\n      });\n    }\n\n  \n  \n  var emval_free_list=[];\n  \n  var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle) {\n      if (handle > 4 && 0 === --emval_handle_array[handle].refcount) {\n          emval_handle_array[handle] = undefined;\n          emval_free_list.push(handle);\n      }\n    }\n  \n  \n  \n  function count_emval_handles() {\n      var count = 0;\n      for (var i = 5; i < emval_handle_array.length; ++i) {\n          if (emval_handle_array[i] !== undefined) {\n              ++count;\n          }\n      }\n      return count;\n    }\n  \n  function get_first_emval() {\n      for (var i = 5; i < emval_handle_array.length; ++i) {\n          if (emval_handle_array[i] !== undefined) {\n              return emval_handle_array[i];\n          }\n      }\n      return null;\n    }function init_emval() {\n      Module['count_emval_handles'] = count_emval_handles;\n      Module['get_first_emval'] = get_first_emval;\n    }function __emval_register(value) {\n  \n      switch(value){\n        case undefined :{ return 1; }\n        case null :{ return 2; }\n        case true :{ return 3; }\n        case false :{ return 4; }\n        default:{\n          var handle = emval_free_list.length ?\n              emval_free_list.pop() :\n              emval_handle_array.length;\n  \n          emval_handle_array[handle] = {refcount: 1, value: value};\n          return handle;\n          }\n        }\n    }function __embind_register_emval(rawType, name) {\n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(handle) {\n              var rv = emval_handle_array[handle].value;\n              __emval_decref(handle);\n              return rv;\n          },\n          'toWireType': function(destructors, value) {\n              return __emval_register(value);\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': simpleReadValueFromPointer,\n          destructorFunction: null, // This type does not need a destructor\n  \n          // TODO: do we need a deleteObject here?  write a test where\n          // emval is passed into JS via an interface\n      });\n    }\n\n  \n  function _embind_repr(v) {\n      if (v === null) {\n          return 'null';\n      }\n      var t = typeof v;\n      if (t === 'object' || t === 'array' || t === 'function') {\n          return v.toString();\n      } else {\n          return '' + v;\n      }\n    }\n  \n  function floatReadValueFromPointer(name, shift) {\n      switch (shift) {\n          case 2: return function(pointer) {\n              return this['fromWireType'](HEAPF32[pointer >> 2]);\n          };\n          case 3: return function(pointer) {\n              return this['fromWireType'](HEAPF64[pointer >> 3]);\n          };\n          default:\n              throw new TypeError(\"Unknown float type: \" + name);\n      }\n    }function __embind_register_float(rawType, name, size) {\n      var shift = getShiftFromSize(size);\n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(value) {\n              return value;\n          },\n          'toWireType': function(destructors, value) {\n              // todo: Here we have an opportunity for -O3 level \"unsafe\" optimizations: we could\n              // avoid the following if() and assume value is of proper type.\n              if (typeof value !== \"number\" && typeof value !== \"boolean\") {\n                  throw new TypeError('Cannot convert \"' + _embind_repr(value) + '\" to ' + this.name);\n              }\n              return value;\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': floatReadValueFromPointer(name, shift),\n          destructorFunction: null, // This type does not need a destructor\n      });\n    }\n\n  \n  function integerReadValueFromPointer(name, shift, signed) {\n      // integers are quite common, so generate very specialized functions\n      switch (shift) {\n          case 0: return signed ?\n              function readS8FromPointer(pointer) { return HEAP8[pointer]; } :\n              function readU8FromPointer(pointer) { return HEAPU8[pointer]; };\n          case 1: return signed ?\n              function readS16FromPointer(pointer) { return HEAP16[pointer >> 1]; } :\n              function readU16FromPointer(pointer) { return HEAPU16[pointer >> 1]; };\n          case 2: return signed ?\n              function readS32FromPointer(pointer) { return HEAP32[pointer >> 2]; } :\n              function readU32FromPointer(pointer) { return HEAPU32[pointer >> 2]; };\n          default:\n              throw new TypeError(\"Unknown integer type: \" + name);\n      }\n    }function __embind_register_integer(primitiveType, name, size, minRange, maxRange) {\n      name = readLatin1String(name);\n      if (maxRange === -1) { // LLVM doesn't have signed and unsigned 32-bit types, so u32 literals come out as 'i32 -1'. Always treat those as max u32.\n          maxRange = 4294967295;\n      }\n  \n      var shift = getShiftFromSize(size);\n  \n      var fromWireType = function(value) {\n          return value;\n      };\n  \n      if (minRange === 0) {\n          var bitshift = 32 - 8*size;\n          fromWireType = function(value) {\n              return (value << bitshift) >>> bitshift;\n          };\n      }\n  \n      var isUnsignedType = (name.indexOf('unsigned') != -1);\n  \n      registerType(primitiveType, {\n          name: name,\n          'fromWireType': fromWireType,\n          'toWireType': function(destructors, value) {\n              // todo: Here we have an opportunity for -O3 level \"unsafe\" optimizations: we could\n              // avoid the following two if()s and assume value is of proper type.\n              if (typeof value !== \"number\" && typeof value !== \"boolean\") {\n                  throw new TypeError('Cannot convert \"' + _embind_repr(value) + '\" to ' + this.name);\n              }\n              if (value < minRange || value > maxRange) {\n                  throw new TypeError('Passing a number \"' + _embind_repr(value) + '\" from JS side to C/C++ side to an argument of type \"' + name + '\", which is outside the valid range [' + minRange + ', ' + maxRange + ']!');\n              }\n              return isUnsignedType ? (value >>> 0) : (value | 0);\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': integerReadValueFromPointer(name, shift, minRange !== 0),\n          destructorFunction: null, // This type does not need a destructor\n      });\n    }\n\n  function __embind_register_memory_view(rawType, dataTypeIndex, name) {\n      var typeMapping = [\n          Int8Array,\n          Uint8Array,\n          Int16Array,\n          Uint16Array,\n          Int32Array,\n          Uint32Array,\n          Float32Array,\n          Float64Array,\n      ];\n  \n      var TA = typeMapping[dataTypeIndex];\n  \n      function decodeMemoryView(handle) {\n          handle = handle >> 2;\n          var heap = HEAPU32;\n          var size = heap[handle]; // in elements\n          var data = heap[handle + 1]; // byte offset into emscripten heap\n          return new TA(heap['buffer'], data, size);\n      }\n  \n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': decodeMemoryView,\n          'argPackAdvance': 8,\n          'readValueFromPointer': decodeMemoryView,\n      }, {\n          ignoreDuplicateRegistrations: true,\n      });\n    }\n\n  function __embind_register_std_string(rawType, name) {\n      name = readLatin1String(name);\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(value) {\n              var length = HEAPU32[value >> 2];\n              var a = new Array(length);\n              for (var i = 0; i < length; ++i) {\n                  a[i] = String.fromCharCode(HEAPU8[value + 4 + i]);\n              }\n              _free(value);\n              return a.join('');\n          },\n          'toWireType': function(destructors, value) {\n              if (value instanceof ArrayBuffer) {\n                  value = new Uint8Array(value);\n              }\n  \n              function getTAElement(ta, index) {\n                  return ta[index];\n              }\n              function getStringElement(string, index) {\n                  return string.charCodeAt(index);\n              }\n              var getElement;\n              if (value instanceof Uint8Array) {\n                  getElement = getTAElement;\n              } else if (value instanceof Uint8ClampedArray) {\n                  getElement = getTAElement;\n              } else if (value instanceof Int8Array) {\n                  getElement = getTAElement;\n              } else if (typeof value === 'string') {\n                  getElement = getStringElement;\n              } else {\n                  throwBindingError('Cannot pass non-string to std::string');\n              }\n  \n              // assumes 4-byte alignment\n              var length = value.length;\n              var ptr = _malloc(4 + length);\n              HEAPU32[ptr >> 2] = length;\n              for (var i = 0; i < length; ++i) {\n                  var charCode = getElement(value, i);\n                  if (charCode > 255) {\n                      _free(ptr);\n                      throwBindingError('String has UTF-16 code units that do not fit in 8 bits');\n                  }\n                  HEAPU8[ptr + 4 + i] = charCode;\n              }\n              if (destructors !== null) {\n                  destructors.push(_free, ptr);\n              }\n              return ptr;\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': simpleReadValueFromPointer,\n          destructorFunction: function(ptr) { _free(ptr); },\n      });\n    }\n\n  function __embind_register_std_wstring(rawType, charSize, name) {\n      // nb. do not cache HEAPU16 and HEAPU32, they may be destroyed by enlargeMemory().\n      name = readLatin1String(name);\n      var getHeap, shift;\n      if (charSize === 2) {\n          getHeap = function() { return HEAPU16; };\n          shift = 1;\n      } else if (charSize === 4) {\n          getHeap = function() { return HEAPU32; };\n          shift = 2;\n      }\n      registerType(rawType, {\n          name: name,\n          'fromWireType': function(value) {\n              var HEAP = getHeap();\n              var length = HEAPU32[value >> 2];\n              var a = new Array(length);\n              var start = (value + 4) >> shift;\n              for (var i = 0; i < length; ++i) {\n                  a[i] = String.fromCharCode(HEAP[start + i]);\n              }\n              _free(value);\n              return a.join('');\n          },\n          'toWireType': function(destructors, value) {\n              // assumes 4-byte alignment\n              var HEAP = getHeap();\n              var length = value.length;\n              var ptr = _malloc(4 + length * charSize);\n              HEAPU32[ptr >> 2] = length;\n              var start = (ptr + 4) >> shift;\n              for (var i = 0; i < length; ++i) {\n                  HEAP[start + i] = value.charCodeAt(i);\n              }\n              if (destructors !== null) {\n                  destructors.push(_free, ptr);\n              }\n              return ptr;\n          },\n          'argPackAdvance': 8,\n          'readValueFromPointer': simpleReadValueFromPointer,\n          destructorFunction: function(ptr) { _free(ptr); },\n      });\n    }\n\n  function __embind_register_void(rawType, name) {\n      name = readLatin1String(name);\n      registerType(rawType, {\n          isVoid: true, // void return values can be optimized out sometimes\n          name: name,\n          'argPackAdvance': 0,\n          'fromWireType': function() {\n              return undefined;\n          },\n          'toWireType': function(destructors, o) {\n              // TODO: assert if anything else is given?\n              return undefined;\n          },\n      });\n    }\n\n  function _abort() {\n      Module['abort']();\n    }\n\n   \n\n   \n\n   \n\n\n\n   \n\n  function _llvm_trap() {\n      abort('trap!');\n    }\n\n  \n  function _emscripten_memcpy_big(dest, src, num) {\n      HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\n      return dest;\n    } \n\n   \n\n   \n\n  \n  var PTHREAD_SPECIFIC={};function _pthread_getspecific(key) {\n      return PTHREAD_SPECIFIC[key] || 0;\n    }\n\n  \n  var PTHREAD_SPECIFIC_NEXT_KEY=1;\n  \n  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};function _pthread_key_create(key, destructor) {\n      if (key == 0) {\n        return ERRNO_CODES.EINVAL;\n      }\n      HEAP32[((key)>>2)]=PTHREAD_SPECIFIC_NEXT_KEY;\n      // values start at 0\n      PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY] = 0;\n      PTHREAD_SPECIFIC_NEXT_KEY++;\n      return 0;\n    }\n\n   \n\n   \n\n  function _pthread_once(ptr, func) {\n      if (!_pthread_once.seen) _pthread_once.seen = {};\n      if (ptr in _pthread_once.seen) return;\n      Module['dynCall_v'](func);\n      _pthread_once.seen[ptr] = 1;\n    }\n\n  function _pthread_setspecific(key, value) {\n      if (!(key in PTHREAD_SPECIFIC)) {\n        return ERRNO_CODES.EINVAL;\n      }\n      PTHREAD_SPECIFIC[key] = value;\n      return 0;\n    }\n\n  \n  function ___setErrNo(value) {\n      if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\n      else Module.printErr('failed to set errno from JS');\n      return value;\n    } \nembind_init_charCodes();\nBindingError = Module['BindingError'] = extendError(Error, 'BindingError');;\nInternalError = Module['InternalError'] = extendError(Error, 'InternalError');;\ninit_ClassHandle();\ninit_RegisteredPointer();\ninit_embind();;\nUnboundTypeError = Module['UnboundTypeError'] = extendError(Error, 'UnboundTypeError');;\ninit_emval();;\nDYNAMICTOP_PTR = staticAlloc(4);\n\nSTACK_BASE = STACKTOP = alignMemory(STATICTOP);\n\nSTACK_MAX = STACK_BASE + TOTAL_STACK;\n\nDYNAMIC_BASE = alignMemory(STACK_MAX);\n\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\n\nstaticSealed = true; // seal the static portion of memory\n\nassert(DYNAMIC_BASE < TOTAL_MEMORY, \"TOTAL_MEMORY not big enough for stack\");\n\nvar ASSERTIONS = true;\n\n/** @type {function(string, boolean=, number=)} */\nfunction intArrayFromString(stringy, dontAddNull, length) {\n  var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\n  var u8array = new Array(len);\n  var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n  if (dontAddNull) u8array.length = numBytesWritten;\n  return u8array;\n}\n\nfunction intArrayToString(array) {\n  var ret = [];\n  for (var i = 0; i < array.length; i++) {\n    var chr = array[i];\n    if (chr > 0xFF) {\n      if (ASSERTIONS) {\n        assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ')  at offset ' + i + ' not in 0x00-0xFF.');\n      }\n      chr &= 0xFF;\n    }\n    ret.push(String.fromCharCode(chr));\n  }\n  return ret.join('');\n}\n\n\n// Copied from https://github.com/strophe/strophejs/blob/e06d027/src/polyfills.js#L149\n\n// This code was written by Tyler Akins and has been placed in the\n// public domain.  It would be nice if you left this header intact.\n// Base64 code from Tyler Akins -- http://rumkin.com\n\n/**\n * Decodes a base64 string.\n * @param {String} input The string to decode.\n */\nvar decodeBase64 = typeof atob === 'function' ? atob : function (input) {\n  var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n  var output = '';\n  var chr1, chr2, chr3;\n  var enc1, enc2, enc3, enc4;\n  var i = 0;\n  // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n  input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n  do {\n    enc1 = keyStr.indexOf(input.charAt(i++));\n    enc2 = keyStr.indexOf(input.charAt(i++));\n    enc3 = keyStr.indexOf(input.charAt(i++));\n    enc4 = keyStr.indexOf(input.charAt(i++));\n\n    chr1 = (enc1 << 2) | (enc2 >> 4);\n    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n    chr3 = ((enc3 & 3) << 6) | enc4;\n\n    output = output + String.fromCharCode(chr1);\n\n    if (enc3 !== 64) {\n      output = output + String.fromCharCode(chr2);\n    }\n    if (enc4 !== 64) {\n      output = output + String.fromCharCode(chr3);\n    }\n  } while (i < input.length);\n  return output;\n};\n\n// Converts a string of base64 into a byte array.\n// Throws error on invalid input.\nfunction intArrayFromBase64(s) {\n  if (typeof ENVIRONMENT_IS_NODE === 'boolean' && ENVIRONMENT_IS_NODE) {\n    var buf;\n    try {\n      buf = Buffer.from(s, 'base64');\n    } catch (_) {\n      buf = new Buffer(s, 'base64');\n    }\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n  }\n\n  try {\n    var decoded = decodeBase64(s);\n    var bytes = new Uint8Array(decoded.length);\n    for (var i = 0 ; i < decoded.length ; ++i) {\n      bytes[i] = decoded.charCodeAt(i);\n    }\n    return bytes;\n  } catch (_) {\n    throw new Error('Converting base64 string to bytes failed.');\n  }\n}\n\n// If filename is a base64 data URI, parses and returns data (Buffer on node,\n// Uint8Array otherwise). If filename is not a base64 data URI, returns undefined.\nfunction tryParseAsDataURI(filename) {\n  if (!isDataURI(filename)) {\n    return;\n  }\n\n  return intArrayFromBase64(filename.slice(dataURIPrefix.length));\n}\n\n\n\nfunction nullFunc_i(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'i'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_ii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'ii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_iii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'iii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_iiii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'iiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_v(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'v'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_vi(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'vi'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_vii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'vii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_viii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'viii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_viiii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'viiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_viiiii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'viiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction nullFunc_viiiiii(x) { Module[\"printErr\"](\"Invalid function pointer called with signature 'viiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)\");  Module[\"printErr\"](\"Build with ASSERTIONS=2 for more info.\");abort(x) }\n\nfunction invoke_i(index) {\n  try {\n    return Module[\"dynCall_i\"](index);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_ii(index,a1) {\n  try {\n    return Module[\"dynCall_ii\"](index,a1);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_iii(index,a1,a2) {\n  try {\n    return Module[\"dynCall_iii\"](index,a1,a2);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_iiii(index,a1,a2,a3) {\n  try {\n    return Module[\"dynCall_iiii\"](index,a1,a2,a3);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_v(index) {\n  try {\n    Module[\"dynCall_v\"](index);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_vi(index,a1) {\n  try {\n    Module[\"dynCall_vi\"](index,a1);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_vii(index,a1,a2) {\n  try {\n    Module[\"dynCall_vii\"](index,a1,a2);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_viii(index,a1,a2,a3) {\n  try {\n    Module[\"dynCall_viii\"](index,a1,a2,a3);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_viiii(index,a1,a2,a3,a4) {\n  try {\n    Module[\"dynCall_viiii\"](index,a1,a2,a3,a4);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\n  try {\n    Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nfunction invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {\n  try {\n    Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6);\n  } catch(e) {\n    if (typeof e !== 'number' && e !== 'longjmp') throw e;\n    Module[\"setThrew\"](1, 0);\n  }\n}\n\nModule.asmGlobalArg = { \"Math\": Math, \"Int8Array\": Int8Array, \"Int16Array\": Int16Array, \"Int32Array\": Int32Array, \"Uint8Array\": Uint8Array, \"Uint16Array\": Uint16Array, \"Uint32Array\": Uint32Array, \"Float32Array\": Float32Array, \"Float64Array\": Float64Array, \"NaN\": NaN, \"Infinity\": Infinity };\n\nModule.asmLibraryArg = { \"abort\": abort, \"assert\": assert, \"enlargeMemory\": enlargeMemory, \"getTotalMemory\": getTotalMemory, \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory, \"abortStackOverflow\": abortStackOverflow, \"nullFunc_i\": nullFunc_i, \"nullFunc_ii\": nullFunc_ii, \"nullFunc_iii\": nullFunc_iii, \"nullFunc_iiii\": nullFunc_iiii, \"nullFunc_v\": nullFunc_v, \"nullFunc_vi\": nullFunc_vi, \"nullFunc_vii\": nullFunc_vii, \"nullFunc_viii\": nullFunc_viii, \"nullFunc_viiii\": nullFunc_viiii, \"nullFunc_viiiii\": nullFunc_viiiii, \"nullFunc_viiiiii\": nullFunc_viiiiii, \"invoke_i\": invoke_i, \"invoke_ii\": invoke_ii, \"invoke_iii\": invoke_iii, \"invoke_iiii\": invoke_iiii, \"invoke_v\": invoke_v, \"invoke_vi\": invoke_vi, \"invoke_vii\": invoke_vii, \"invoke_viii\": invoke_viii, \"invoke_viiii\": invoke_viiii, \"invoke_viiiii\": invoke_viiiii, \"invoke_viiiiii\": invoke_viiiiii, \"ClassHandle\": ClassHandle, \"ClassHandle_clone\": ClassHandle_clone, \"ClassHandle_delete\": ClassHandle_delete, \"ClassHandle_deleteLater\": ClassHandle_deleteLater, \"ClassHandle_isAliasOf\": ClassHandle_isAliasOf, \"ClassHandle_isDeleted\": ClassHandle_isDeleted, \"RegisteredClass\": RegisteredClass, \"RegisteredPointer\": RegisteredPointer, \"RegisteredPointer_deleteObject\": RegisteredPointer_deleteObject, \"RegisteredPointer_destructor\": RegisteredPointer_destructor, \"RegisteredPointer_fromWireType\": RegisteredPointer_fromWireType, \"RegisteredPointer_getPointee\": RegisteredPointer_getPointee, \"__ZSt18uncaught_exceptionv\": __ZSt18uncaught_exceptionv, \"___assert_fail\": ___assert_fail, \"___cxa_allocate_exception\": ___cxa_allocate_exception, \"___cxa_begin_catch\": ___cxa_begin_catch, \"___cxa_find_matching_catch\": ___cxa_find_matching_catch, \"___cxa_pure_virtual\": ___cxa_pure_virtual, \"___cxa_throw\": ___cxa_throw, \"___gxx_personality_v0\": ___gxx_personality_v0, \"___lock\": ___lock, \"___resumeException\": ___resumeException, \"___setErrNo\": ___setErrNo, \"___syscall140\": ___syscall140, \"___syscall146\": ___syscall146, \"___syscall54\": ___syscall54, \"___syscall6\": ___syscall6, \"___unlock\": ___unlock, \"__embind_register_bool\": __embind_register_bool, \"__embind_register_class\": __embind_register_class, \"__embind_register_class_constructor\": __embind_register_class_constructor, \"__embind_register_class_function\": __embind_register_class_function, \"__embind_register_emval\": __embind_register_emval, \"__embind_register_float\": __embind_register_float, \"__embind_register_integer\": __embind_register_integer, \"__embind_register_memory_view\": __embind_register_memory_view, \"__embind_register_std_string\": __embind_register_std_string, \"__embind_register_std_wstring\": __embind_register_std_wstring, \"__embind_register_void\": __embind_register_void, \"__emval_decref\": __emval_decref, \"__emval_register\": __emval_register, \"_abort\": _abort, \"_embind_repr\": _embind_repr, \"_emscripten_memcpy_big\": _emscripten_memcpy_big, \"_llvm_trap\": _llvm_trap, \"_pthread_getspecific\": _pthread_getspecific, \"_pthread_key_create\": _pthread_key_create, \"_pthread_once\": _pthread_once, \"_pthread_setspecific\": _pthread_setspecific, \"constNoSmartPtrRawPointerToWireType\": constNoSmartPtrRawPointerToWireType, \"count_emval_handles\": count_emval_handles, \"craftInvokerFunction\": craftInvokerFunction, \"createNamedFunction\": createNamedFunction, \"downcastPointer\": downcastPointer, \"embind__requireFunction\": embind__requireFunction, \"embind_init_charCodes\": embind_init_charCodes, \"ensureOverloadTable\": ensureOverloadTable, \"exposePublicSymbol\": exposePublicSymbol, \"extendError\": extendError, \"floatReadValueFromPointer\": floatReadValueFromPointer, \"flushPendingDeletes\": flushPendingDeletes, \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM, \"genericPointerToWireType\": genericPointerToWireType, \"getBasestPointer\": getBasestPointer, \"getInheritedInstance\": getInheritedInstance, \"getInheritedInstanceCount\": getInheritedInstanceCount, \"getLiveInheritedInstances\": getLiveInheritedInstances, \"getShiftFromSize\": getShiftFromSize, \"getTypeName\": getTypeName, \"get_first_emval\": get_first_emval, \"heap32VectorToArray\": heap32VectorToArray, \"init_ClassHandle\": init_ClassHandle, \"init_RegisteredPointer\": init_RegisteredPointer, \"init_embind\": init_embind, \"init_emval\": init_emval, \"integerReadValueFromPointer\": integerReadValueFromPointer, \"makeClassHandle\": makeClassHandle, \"makeLegalFunctionName\": makeLegalFunctionName, \"new_\": new_, \"nonConstNoSmartPtrRawPointerToWireType\": nonConstNoSmartPtrRawPointerToWireType, \"readLatin1String\": readLatin1String, \"registerType\": registerType, \"replacePublicSymbol\": replacePublicSymbol, \"runDestructor\": runDestructor, \"runDestructors\": runDestructors, \"setDelayFunction\": setDelayFunction, \"shallowCopyInternalPointer\": shallowCopyInternalPointer, \"simpleReadValueFromPointer\": simpleReadValueFromPointer, \"throwBindingError\": throwBindingError, \"throwInstanceAlreadyDeleted\": throwInstanceAlreadyDeleted, \"throwInternalError\": throwInternalError, \"throwUnboundTypeError\": throwUnboundTypeError, \"upcastPointer\": upcastPointer, \"whenDependentTypesAreResolved\": whenDependentTypesAreResolved, \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR, \"tempDoublePtr\": tempDoublePtr, \"ABORT\": ABORT, \"STACKTOP\": STACKTOP, \"STACK_MAX\": STACK_MAX };\n// EMSCRIPTEN_START_ASM\nvar asm = (/** @suppress {uselessCode} */ function(global, env, buffer) {\n'almost asm';\n\n\n  var HEAP8 = new global.Int8Array(buffer);\n  var HEAP16 = new global.Int16Array(buffer);\n  var HEAP32 = new global.Int32Array(buffer);\n  var HEAPU8 = new global.Uint8Array(buffer);\n  var HEAPU16 = new global.Uint16Array(buffer);\n  var HEAPU32 = new global.Uint32Array(buffer);\n  var HEAPF32 = new global.Float32Array(buffer);\n  var HEAPF64 = new global.Float64Array(buffer);\n\n  var DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0;\n  var tempDoublePtr=env.tempDoublePtr|0;\n  var ABORT=env.ABORT|0;\n  var STACKTOP=env.STACKTOP|0;\n  var STACK_MAX=env.STACK_MAX|0;\n\n  var __THREW__ = 0;\n  var threwValue = 0;\n  var setjmpId = 0;\n  var undef = 0;\n  var nan = global.NaN, inf = global.Infinity;\n  var tempInt = 0, tempBigInt = 0, tempBigIntS = 0, tempValue = 0, tempDouble = 0.0;\n  var tempRet0 = 0;\n\n  var Math_floor=global.Math.floor;\n  var Math_abs=global.Math.abs;\n  var Math_sqrt=global.Math.sqrt;\n  var Math_pow=global.Math.pow;\n  var Math_cos=global.Math.cos;\n  var Math_sin=global.Math.sin;\n  var Math_tan=global.Math.tan;\n  var Math_acos=global.Math.acos;\n  var Math_asin=global.Math.asin;\n  var Math_atan=global.Math.atan;\n  var Math_atan2=global.Math.atan2;\n  var Math_exp=global.Math.exp;\n  var Math_log=global.Math.log;\n  var Math_ceil=global.Math.ceil;\n  var Math_imul=global.Math.imul;\n  var Math_min=global.Math.min;\n  var Math_max=global.Math.max;\n  var Math_clz32=global.Math.clz32;\n  var abort=env.abort;\n  var assert=env.assert;\n  var enlargeMemory=env.enlargeMemory;\n  var getTotalMemory=env.getTotalMemory;\n  var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory;\n  var abortStackOverflow=env.abortStackOverflow;\n  var nullFunc_i=env.nullFunc_i;\n  var nullFunc_ii=env.nullFunc_ii;\n  var nullFunc_iii=env.nullFunc_iii;\n  var nullFunc_iiii=env.nullFunc_iiii;\n  var nullFunc_v=env.nullFunc_v;\n  var nullFunc_vi=env.nullFunc_vi;\n  var nullFunc_vii=env.nullFunc_vii;\n  var nullFunc_viii=env.nullFunc_viii;\n  var nullFunc_viiii=env.nullFunc_viiii;\n  var nullFunc_viiiii=env.nullFunc_viiiii;\n  var nullFunc_viiiiii=env.nullFunc_viiiiii;\n  var invoke_i=env.invoke_i;\n  var invoke_ii=env.invoke_ii;\n  var invoke_iii=env.invoke_iii;\n  var invoke_iiii=env.invoke_iiii;\n  var invoke_v=env.invoke_v;\n  var invoke_vi=env.invoke_vi;\n  var invoke_vii=env.invoke_vii;\n  var invoke_viii=env.invoke_viii;\n  var invoke_viiii=env.invoke_viiii;\n  var invoke_viiiii=env.invoke_viiiii;\n  var invoke_viiiiii=env.invoke_viiiiii;\n  var ClassHandle=env.ClassHandle;\n  var ClassHandle_clone=env.ClassHandle_clone;\n  var ClassHandle_delete=env.ClassHandle_delete;\n  var ClassHandle_deleteLater=env.ClassHandle_deleteLater;\n  var ClassHandle_isAliasOf=env.ClassHandle_isAliasOf;\n  var ClassHandle_isDeleted=env.ClassHandle_isDeleted;\n  var RegisteredClass=env.RegisteredClass;\n  var RegisteredPointer=env.RegisteredPointer;\n  var RegisteredPointer_deleteObject=env.RegisteredPointer_deleteObject;\n  var RegisteredPointer_destructor=env.RegisteredPointer_destructor;\n  var RegisteredPointer_fromWireType=env.RegisteredPointer_fromWireType;\n  var RegisteredPointer_getPointee=env.RegisteredPointer_getPointee;\n  var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv;\n  var ___assert_fail=env.___assert_fail;\n  var ___cxa_allocate_exception=env.___cxa_allocate_exception;\n  var ___cxa_begin_catch=env.___cxa_begin_catch;\n  var ___cxa_find_matching_catch=env.___cxa_find_matching_catch;\n  var ___cxa_pure_virtual=env.___cxa_pure_virtual;\n  var ___cxa_throw=env.___cxa_throw;\n  var ___gxx_personality_v0=env.___gxx_personality_v0;\n  var ___lock=env.___lock;\n  var ___resumeException=env.___resumeException;\n  var ___setErrNo=env.___setErrNo;\n  var ___syscall140=env.___syscall140;\n  var ___syscall146=env.___syscall146;\n  var ___syscall54=env.___syscall54;\n  var ___syscall6=env.___syscall6;\n  var ___unlock=env.___unlock;\n  var __embind_register_bool=env.__embind_register_bool;\n  var __embind_register_class=env.__embind_register_class;\n  var __embind_register_class_constructor=env.__embind_register_class_constructor;\n  var __embind_register_class_function=env.__embind_register_class_function;\n  var __embind_register_emval=env.__embind_register_emval;\n  var __embind_register_float=env.__embind_register_float;\n  var __embind_register_integer=env.__embind_register_integer;\n  var __embind_register_memory_view=env.__embind_register_memory_view;\n  var __embind_register_std_string=env.__embind_register_std_string;\n  var __embind_register_std_wstring=env.__embind_register_std_wstring;\n  var __embind_register_void=env.__embind_register_void;\n  var __emval_decref=env.__emval_decref;\n  var __emval_register=env.__emval_register;\n  var _abort=env._abort;\n  var _embind_repr=env._embind_repr;\n  var _emscripten_memcpy_big=env._emscripten_memcpy_big;\n  var _llvm_trap=env._llvm_trap;\n  var _pthread_getspecific=env._pthread_getspecific;\n  var _pthread_key_create=env._pthread_key_create;\n  var _pthread_once=env._pthread_once;\n  var _pthread_setspecific=env._pthread_setspecific;\n  var constNoSmartPtrRawPointerToWireType=env.constNoSmartPtrRawPointerToWireType;\n  var count_emval_handles=env.count_emval_handles;\n  var craftInvokerFunction=env.craftInvokerFunction;\n  var createNamedFunction=env.createNamedFunction;\n  var downcastPointer=env.downcastPointer;\n  var embind__requireFunction=env.embind__requireFunction;\n  var embind_init_charCodes=env.embind_init_charCodes;\n  var ensureOverloadTable=env.ensureOverloadTable;\n  var exposePublicSymbol=env.exposePublicSymbol;\n  var extendError=env.extendError;\n  var floatReadValueFromPointer=env.floatReadValueFromPointer;\n  var flushPendingDeletes=env.flushPendingDeletes;\n  var flush_NO_FILESYSTEM=env.flush_NO_FILESYSTEM;\n  var genericPointerToWireType=env.genericPointerToWireType;\n  var getBasestPointer=env.getBasestPointer;\n  var getInheritedInstance=env.getInheritedInstance;\n  var getInheritedInstanceCount=env.getInheritedInstanceCount;\n  var getLiveInheritedInstances=env.getLiveInheritedInstances;\n  var getShiftFromSize=env.getShiftFromSize;\n  var getTypeName=env.getTypeName;\n  var get_first_emval=env.get_first_emval;\n  var heap32VectorToArray=env.heap32VectorToArray;\n  var init_ClassHandle=env.init_ClassHandle;\n  var init_RegisteredPointer=env.init_RegisteredPointer;\n  var init_embind=env.init_embind;\n  var init_emval=env.init_emval;\n  var integerReadValueFromPointer=env.integerReadValueFromPointer;\n  var makeClassHandle=env.makeClassHandle;\n  var makeLegalFunctionName=env.makeLegalFunctionName;\n  var new_=env.new_;\n  var nonConstNoSmartPtrRawPointerToWireType=env.nonConstNoSmartPtrRawPointerToWireType;\n  var readLatin1String=env.readLatin1String;\n  var registerType=env.registerType;\n  var replacePublicSymbol=env.replacePublicSymbol;\n  var runDestructor=env.runDestructor;\n  var runDestructors=env.runDestructors;\n  var setDelayFunction=env.setDelayFunction;\n  var shallowCopyInternalPointer=env.shallowCopyInternalPointer;\n  var simpleReadValueFromPointer=env.simpleReadValueFromPointer;\n  var throwBindingError=env.throwBindingError;\n  var throwInstanceAlreadyDeleted=env.throwInstanceAlreadyDeleted;\n  var throwInternalError=env.throwInternalError;\n  var throwUnboundTypeError=env.throwUnboundTypeError;\n  var upcastPointer=env.upcastPointer;\n  var whenDependentTypesAreResolved=env.whenDependentTypesAreResolved;\n  var tempFloat = 0.0;\n\n// EMSCRIPTEN_START_FUNCS\n\nfunction stackAlloc(size) {\n  size = size|0;\n  var ret = 0;\n  ret = STACKTOP;\n  STACKTOP = (STACKTOP + size)|0;\n  STACKTOP = (STACKTOP + 15)&-16;\n  if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(size|0);\n\n  return ret|0;\n}\nfunction stackSave() {\n  return STACKTOP|0;\n}\nfunction stackRestore(top) {\n  top = top|0;\n  STACKTOP = top;\n}\nfunction establishStackSpace(stackBase, stackMax) {\n  stackBase = stackBase|0;\n  stackMax = stackMax|0;\n  STACKTOP = stackBase;\n  STACK_MAX = stackMax;\n}\n\nfunction setThrew(threw, value) {\n  threw = threw|0;\n  value = value|0;\n  if ((__THREW__|0) == 0) {\n    __THREW__ = threw;\n    threwValue = value;\n  }\n}\n\nfunction setTempRet0(value) {\n  value = value|0;\n  tempRet0 = value;\n}\nfunction getTempRet0() {\n  return tempRet0|0;\n}\n\nfunction ___cxx_global_var_init() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN38EmscriptenBindingInitializer_my_moduleC2Ev(21880);\n return;\n}\nfunction __ZN38EmscriptenBindingInitializer_my_moduleC2Ev($0) {\n $0 = $0|0;\n var $$field = 0, $$field11 = 0, $$field14 = 0, $$field21 = 0, $$field24 = 0, $$field31 = 0, $$field34 = 0, $$field4 = 0, $$field41 = 0, $$field44 = 0, $$field51 = 0, $$field54 = 0, $$field61 = 0, $$field64 = 0, $$field71 = 0, $$field74 = 0, $$index1 = 0, $$index13 = 0, $$index17 = 0, $$index19 = 0;\n var $$index23 = 0, $$index27 = 0, $$index29 = 0, $$index3 = 0, $$index33 = 0, $$index37 = 0, $$index39 = 0, $$index43 = 0, $$index47 = 0, $$index49 = 0, $$index53 = 0, $$index57 = 0, $$index59 = 0, $$index63 = 0, $$index67 = 0, $$index69 = 0, $$index7 = 0, $$index73 = 0, $$index77 = 0, $$index9 = 0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;\n var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;\n var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 496|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(496|0);\n $4 = sp + 448|0;\n $6 = sp + 481|0;\n $7 = sp + 72|0;\n $11 = sp + 424|0;\n $13 = sp + 480|0;\n $14 = sp + 64|0;\n $18 = sp + 400|0;\n $20 = sp + 479|0;\n $21 = sp + 56|0;\n $25 = sp + 376|0;\n $27 = sp + 478|0;\n $28 = sp + 48|0;\n $32 = sp + 352|0;\n $34 = sp + 477|0;\n $35 = sp + 40|0;\n $36 = sp + 32|0;\n $40 = sp + 476|0;\n $56 = sp + 264|0;\n $58 = sp + 475|0;\n $59 = sp + 24|0;\n $63 = sp + 240|0;\n $65 = sp + 474|0;\n $66 = sp + 16|0;\n $70 = sp + 216|0;\n $72 = sp + 473|0;\n $73 = sp + 8|0;\n $74 = sp;\n $78 = sp + 472|0;\n $92 = sp + 471|0;\n $93 = sp + 470|0;\n $94 = sp + 136|0;\n $95 = sp + 128|0;\n $96 = sp + 120|0;\n $97 = sp + 469|0;\n $98 = sp + 468|0;\n $99 = sp + 112|0;\n $100 = sp + 104|0;\n $101 = sp + 96|0;\n $102 = sp + 88|0;\n $103 = sp + 80|0;\n $91 = $0;\n $85 = $92;\n $86 = 3768;\n __ZN10emscripten8internal11NoBaseClass6verifyI6LASZipEEvv();\n $87 = 234;\n $104 = (__ZN10emscripten8internal11NoBaseClass11getUpcasterI6LASZipEEPFvvEv()|0);\n $88 = $104;\n $105 = (__ZN10emscripten8internal11NoBaseClass13getDowncasterI6LASZipEEPFvvEv()|0);\n $89 = $105;\n $90 = 235;\n $106 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $107 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI6LASZipEEE3getEv()|0);\n $108 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK6LASZipEEE3getEv()|0);\n $109 = (__ZN10emscripten8internal11NoBaseClass3getEv()|0);\n $110 = $87;\n $84 = $110;\n $111 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0);\n $112 = $87;\n $113 = $88;\n $83 = $113;\n $114 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0);\n $115 = $88;\n $116 = $89;\n $82 = $116;\n $117 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0);\n $118 = $89;\n $119 = $86;\n $120 = $90;\n $81 = $120;\n $121 = (__ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv()|0);\n $122 = $90;\n __embind_register_class(($106|0),($107|0),($108|0),($109|0),($111|0),($112|0),($114|0),($115|0),($117|0),($118|0),($119|0),($121|0),($122|0));\n $80 = $92;\n $123 = $80;\n $76 = $123;\n $77 = 236;\n $124 = $76;\n $79 = 237;\n $125 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $126 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getCountEv($78)|0);\n $127 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getTypesEv($78)|0);\n $128 = $79;\n $75 = $128;\n $129 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0);\n $130 = $79;\n $131 = $77;\n __embind_register_class_constructor(($125|0),($126|0),($127|0),($129|0),($130|0),($131|0));\n HEAP32[$94>>2] = (238);\n $$index1 = ((($94)) + 4|0);\n HEAP32[$$index1>>2] = 0;\n ;HEAP8[$73>>0]=HEAP8[$93>>0]|0;\n ;HEAP8[$74>>0]=HEAP8[$94>>0]|0;HEAP8[$74+1>>0]=HEAP8[$94+1>>0]|0;HEAP8[$74+2>>0]=HEAP8[$94+2>>0]|0;HEAP8[$74+3>>0]=HEAP8[$94+3>>0]|0;HEAP8[$74+4>>0]=HEAP8[$94+4>>0]|0;HEAP8[$74+5>>0]=HEAP8[$94+5>>0]|0;HEAP8[$74+6>>0]=HEAP8[$94+6>>0]|0;HEAP8[$74+7>>0]=HEAP8[$94+7>>0]|0;\n $$field = HEAP32[$74>>2]|0;\n $$index3 = ((($74)) + 4|0);\n $$field4 = HEAP32[$$index3>>2]|0;\n $68 = $124;\n $69 = 3775;\n HEAP32[$70>>2] = $$field;\n $$index7 = ((($70)) + 4|0);\n HEAP32[$$index7>>2] = $$field4;\n $132 = $68;\n $71 = 239;\n $133 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $134 = $69;\n $135 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getCountEv($72)|0);\n $136 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getTypesEv($72)|0);\n $137 = $71;\n $67 = $137;\n $138 = (__ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv()|0);\n $139 = $71;\n $140 = (__ZN10emscripten8internal10getContextIM6LASZipFvjjEEEPT_RKS5_($70)|0);\n __embind_register_class_function(($133|0),($134|0),($135|0),($136|0),($138|0),($139|0),($140|0),0);\n HEAP32[$95>>2] = (240);\n $$index9 = ((($95)) + 4|0);\n HEAP32[$$index9>>2] = 0;\n ;HEAP8[$66>>0]=HEAP8[$95>>0]|0;HEAP8[$66+1>>0]=HEAP8[$95+1>>0]|0;HEAP8[$66+2>>0]=HEAP8[$95+2>>0]|0;HEAP8[$66+3>>0]=HEAP8[$95+3>>0]|0;HEAP8[$66+4>>0]=HEAP8[$95+4>>0]|0;HEAP8[$66+5>>0]=HEAP8[$95+5>>0]|0;HEAP8[$66+6>>0]=HEAP8[$95+6>>0]|0;HEAP8[$66+7>>0]=HEAP8[$95+7>>0]|0;\n $$field11 = HEAP32[$66>>2]|0;\n $$index13 = ((($66)) + 4|0);\n $$field14 = HEAP32[$$index13>>2]|0;\n $61 = $132;\n $62 = 3780;\n HEAP32[$63>>2] = $$field11;\n $$index17 = ((($63)) + 4|0);\n HEAP32[$$index17>>2] = $$field14;\n $141 = $61;\n $64 = 241;\n $142 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $143 = $62;\n $144 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getCountEv($65)|0);\n $145 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getTypesEv($65)|0);\n $146 = $64;\n $60 = $146;\n $147 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $148 = $64;\n $149 = (__ZN10emscripten8internal10getContextIM6LASZipFviEEEPT_RKS5_($63)|0);\n __embind_register_class_function(($142|0),($143|0),($144|0),($145|0),($147|0),($148|0),($149|0),0);\n HEAP32[$96>>2] = (242);\n $$index19 = ((($96)) + 4|0);\n HEAP32[$$index19>>2] = 0;\n ;HEAP8[$59>>0]=HEAP8[$96>>0]|0;HEAP8[$59+1>>0]=HEAP8[$96+1>>0]|0;HEAP8[$59+2>>0]=HEAP8[$96+2>>0]|0;HEAP8[$59+3>>0]=HEAP8[$96+3>>0]|0;HEAP8[$59+4>>0]=HEAP8[$96+4>>0]|0;HEAP8[$59+5>>0]=HEAP8[$96+5>>0]|0;HEAP8[$59+6>>0]=HEAP8[$96+6>>0]|0;HEAP8[$59+7>>0]=HEAP8[$96+7>>0]|0;\n $$field21 = HEAP32[$59>>2]|0;\n $$index23 = ((($59)) + 4|0);\n $$field24 = HEAP32[$$index23>>2]|0;\n $54 = $141;\n $55 = 3789;\n HEAP32[$56>>2] = $$field21;\n $$index27 = ((($56)) + 4|0);\n HEAP32[$$index27>>2] = $$field24;\n $57 = 243;\n $150 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0);\n $151 = $55;\n $152 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getCountEv($58)|0);\n $153 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getTypesEv($58)|0);\n $154 = $57;\n $53 = $154;\n $155 = (__ZN10emscripten8internal19getGenericSignatureIJiiiEEEPKcv()|0);\n $156 = $57;\n $157 = (__ZN10emscripten8internal10getContextIM6LASZipFjvEEEPT_RKS5_($56)|0);\n __embind_register_class_function(($150|0),($151|0),($152|0),($153|0),($155|0),($156|0),($157|0),0);\n $47 = $97;\n $48 = 3798;\n __ZN10emscripten8internal11NoBaseClass6verifyI13DynamicLASZipEEvv();\n $49 = 244;\n $158 = (__ZN10emscripten8internal11NoBaseClass11getUpcasterI13DynamicLASZipEEPFvvEv()|0);\n $50 = $158;\n $159 = (__ZN10emscripten8internal11NoBaseClass13getDowncasterI13DynamicLASZipEEPFvvEv()|0);\n $51 = $159;\n $52 = 245;\n $160 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $161 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI13DynamicLASZipEEE3getEv()|0);\n $162 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK13DynamicLASZipEEE3getEv()|0);\n $163 = (__ZN10emscripten8internal11NoBaseClass3getEv()|0);\n $164 = $49;\n $46 = $164;\n $165 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0);\n $166 = $49;\n $167 = $50;\n $45 = $167;\n $168 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0);\n $169 = $50;\n $170 = $51;\n $44 = $170;\n $171 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0);\n $172 = $51;\n $173 = $48;\n $174 = $52;\n $43 = $174;\n $175 = (__ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv()|0);\n $176 = $52;\n __embind_register_class(($160|0),($161|0),($162|0),($163|0),($165|0),($166|0),($168|0),($169|0),($171|0),($172|0),($173|0),($175|0),($176|0));\n $42 = $97;\n $177 = $42;\n $38 = $177;\n $39 = 246;\n $178 = $38;\n $41 = 247;\n $179 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $180 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getCountEv($40)|0);\n $181 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getTypesEv($40)|0);\n $182 = $41;\n $37 = $182;\n $183 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0);\n $184 = $41;\n $185 = $39;\n __embind_register_class_constructor(($179|0),($180|0),($181|0),($183|0),($184|0),($185|0));\n HEAP32[$99>>2] = (248);\n $$index29 = ((($99)) + 4|0);\n HEAP32[$$index29>>2] = 0;\n ;HEAP8[$35>>0]=HEAP8[$98>>0]|0;\n ;HEAP8[$36>>0]=HEAP8[$99>>0]|0;HEAP8[$36+1>>0]=HEAP8[$99+1>>0]|0;HEAP8[$36+2>>0]=HEAP8[$99+2>>0]|0;HEAP8[$36+3>>0]=HEAP8[$99+3>>0]|0;HEAP8[$36+4>>0]=HEAP8[$99+4>>0]|0;HEAP8[$36+5>>0]=HEAP8[$99+5>>0]|0;HEAP8[$36+6>>0]=HEAP8[$99+6>>0]|0;HEAP8[$36+7>>0]=HEAP8[$99+7>>0]|0;\n $$field31 = HEAP32[$36>>2]|0;\n $$index33 = ((($36)) + 4|0);\n $$field34 = HEAP32[$$index33>>2]|0;\n $30 = $178;\n $31 = 3775;\n HEAP32[$32>>2] = $$field31;\n $$index37 = ((($32)) + 4|0);\n HEAP32[$$index37>>2] = $$field34;\n $186 = $30;\n $33 = 249;\n $187 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $188 = $31;\n $189 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getCountEv($34)|0);\n $190 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getTypesEv($34)|0);\n $191 = $33;\n $29 = $191;\n $192 = (__ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv()|0);\n $193 = $33;\n $194 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjjEEEPT_RKS5_($32)|0);\n __embind_register_class_function(($187|0),($188|0),($189|0),($190|0),($192|0),($193|0),($194|0),0);\n HEAP32[$100>>2] = (250);\n $$index39 = ((($100)) + 4|0);\n HEAP32[$$index39>>2] = 0;\n ;HEAP8[$28>>0]=HEAP8[$100>>0]|0;HEAP8[$28+1>>0]=HEAP8[$100+1>>0]|0;HEAP8[$28+2>>0]=HEAP8[$100+2>>0]|0;HEAP8[$28+3>>0]=HEAP8[$100+3>>0]|0;HEAP8[$28+4>>0]=HEAP8[$100+4>>0]|0;HEAP8[$28+5>>0]=HEAP8[$100+5>>0]|0;HEAP8[$28+6>>0]=HEAP8[$100+6>>0]|0;HEAP8[$28+7>>0]=HEAP8[$100+7>>0]|0;\n $$field41 = HEAP32[$28>>2]|0;\n $$index43 = ((($28)) + 4|0);\n $$field44 = HEAP32[$$index43>>2]|0;\n $23 = $186;\n $24 = 3812;\n HEAP32[$25>>2] = $$field41;\n $$index47 = ((($25)) + 4|0);\n HEAP32[$$index47>>2] = $$field44;\n $195 = $23;\n $26 = 251;\n $196 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $197 = $24;\n $198 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($27)|0);\n $199 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($27)|0);\n $200 = $26;\n $22 = $200;\n $201 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $202 = $26;\n $203 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($25)|0);\n __embind_register_class_function(($196|0),($197|0),($198|0),($199|0),($201|0),($202|0),($203|0),0);\n HEAP32[$101>>2] = (252);\n $$index49 = ((($101)) + 4|0);\n HEAP32[$$index49>>2] = 0;\n ;HEAP8[$21>>0]=HEAP8[$101>>0]|0;HEAP8[$21+1>>0]=HEAP8[$101+1>>0]|0;HEAP8[$21+2>>0]=HEAP8[$101+2>>0]|0;HEAP8[$21+3>>0]=HEAP8[$101+3>>0]|0;HEAP8[$21+4>>0]=HEAP8[$101+4>>0]|0;HEAP8[$21+5>>0]=HEAP8[$101+5>>0]|0;HEAP8[$21+6>>0]=HEAP8[$101+6>>0]|0;HEAP8[$21+7>>0]=HEAP8[$101+7>>0]|0;\n $$field51 = HEAP32[$21>>2]|0;\n $$index53 = ((($21)) + 4|0);\n $$field54 = HEAP32[$$index53>>2]|0;\n $16 = $195;\n $17 = 3829;\n HEAP32[$18>>2] = $$field51;\n $$index57 = ((($18)) + 4|0);\n HEAP32[$$index57>>2] = $$field54;\n $204 = $16;\n $19 = 251;\n $205 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $206 = $17;\n $207 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($20)|0);\n $208 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($20)|0);\n $209 = $19;\n $15 = $209;\n $210 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $211 = $19;\n $212 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($18)|0);\n __embind_register_class_function(($205|0),($206|0),($207|0),($208|0),($210|0),($211|0),($212|0),0);\n HEAP32[$102>>2] = (253);\n $$index59 = ((($102)) + 4|0);\n HEAP32[$$index59>>2] = 0;\n ;HEAP8[$14>>0]=HEAP8[$102>>0]|0;HEAP8[$14+1>>0]=HEAP8[$102+1>>0]|0;HEAP8[$14+2>>0]=HEAP8[$102+2>>0]|0;HEAP8[$14+3>>0]=HEAP8[$102+3>>0]|0;HEAP8[$14+4>>0]=HEAP8[$102+4>>0]|0;HEAP8[$14+5>>0]=HEAP8[$102+5>>0]|0;HEAP8[$14+6>>0]=HEAP8[$102+6>>0]|0;HEAP8[$14+7>>0]=HEAP8[$102+7>>0]|0;\n $$field61 = HEAP32[$14>>2]|0;\n $$index63 = ((($14)) + 4|0);\n $$field64 = HEAP32[$$index63>>2]|0;\n $9 = $204;\n $10 = 3844;\n HEAP32[$11>>2] = $$field61;\n $$index67 = ((($11)) + 4|0);\n HEAP32[$$index67>>2] = $$field64;\n $213 = $9;\n $12 = 251;\n $214 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $215 = $10;\n $216 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($13)|0);\n $217 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($13)|0);\n $218 = $12;\n $8 = $218;\n $219 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $220 = $12;\n $221 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($11)|0);\n __embind_register_class_function(($214|0),($215|0),($216|0),($217|0),($219|0),($220|0),($221|0),0);\n HEAP32[$103>>2] = (254);\n $$index69 = ((($103)) + 4|0);\n HEAP32[$$index69>>2] = 0;\n ;HEAP8[$7>>0]=HEAP8[$103>>0]|0;HEAP8[$7+1>>0]=HEAP8[$103+1>>0]|0;HEAP8[$7+2>>0]=HEAP8[$103+2>>0]|0;HEAP8[$7+3>>0]=HEAP8[$103+3>>0]|0;HEAP8[$7+4>>0]=HEAP8[$103+4>>0]|0;HEAP8[$7+5>>0]=HEAP8[$103+5>>0]|0;HEAP8[$7+6>>0]=HEAP8[$103+6>>0]|0;HEAP8[$7+7>>0]=HEAP8[$103+7>>0]|0;\n $$field71 = HEAP32[$7>>2]|0;\n $$index73 = ((($7)) + 4|0);\n $$field74 = HEAP32[$$index73>>2]|0;\n $2 = $213;\n $3 = 3780;\n HEAP32[$4>>2] = $$field71;\n $$index77 = ((($4)) + 4|0);\n HEAP32[$$index77>>2] = $$field74;\n $5 = 255;\n $222 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0);\n $223 = $3;\n $224 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getCountEv($6)|0);\n $225 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getTypesEv($6)|0);\n $226 = $5;\n $1 = $226;\n $227 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0);\n $228 = $5;\n $229 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFviEEEPT_RKS5_($4)|0);\n __embind_register_class_function(($222|0),($223|0),($224|0),($225|0),($227|0),($228|0),($229|0),0);\n STACKTOP = sp;return;\n}\nfunction __ZN6LASZip4openEjj($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0;\n var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;\n var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;\n var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;\n var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;\n var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);\n $$byval_copy1 = sp + 180|0;\n $$byval_copy = sp + 176|0;\n $8 = sp + 152|0;\n $14 = sp + 128|0;\n $19 = sp + 104|0;\n $20 = sp + 100|0;\n $27 = sp + 72|0;\n $33 = sp + 48|0;\n $38 = sp + 24|0;\n $39 = sp + 16|0;\n $40 = $0;\n $41 = $1;\n $42 = $2;\n $44 = $40;\n $45 = $41;\n $46 = $45;\n $43 = $46;\n $47 = (__Znwj(20)|0);\n $48 = $43;\n $49 = $42;\n __ZN6laszip7streams13memory_streamC2EPKci($47,$48,$49);\n $36 = $44;\n $37 = $47;\n $50 = $36;\n $51 = $37;\n ;HEAP32[$39>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$39>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE($38,$51,$$byval_copy);\n $34 = $38;\n $35 = $50;\n $52 = $34;\n $53 = $35;\n $31 = $52;\n $32 = $53;\n $54 = $31;\n $30 = $54;\n $55 = $30;\n $56 = HEAP32[$55>>2]|0;\n HEAP32[$33>>2] = $56;\n $57 = $32;\n $28 = $57;\n $58 = $28;\n $59 = HEAP32[$58>>2]|0;\n $60 = $31;\n HEAP32[$60>>2] = $59;\n $29 = $33;\n $61 = $29;\n $62 = HEAP32[$61>>2]|0;\n $63 = $32;\n HEAP32[$63>>2] = $62;\n $64 = ((($52)) + 4|0);\n $65 = $35;\n $66 = ((($65)) + 4|0);\n $25 = $64;\n $26 = $66;\n $67 = $25;\n $24 = $67;\n $68 = $24;\n $69 = HEAP32[$68>>2]|0;\n HEAP32[$27>>2] = $69;\n $70 = $26;\n $22 = $70;\n $71 = $22;\n $72 = HEAP32[$71>>2]|0;\n $73 = $25;\n HEAP32[$73>>2] = $72;\n $23 = $27;\n $74 = $23;\n $75 = HEAP32[$74>>2]|0;\n $76 = $26;\n HEAP32[$76>>2] = $75;\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($38);\n $77 = ((($44)) + 8|0);\n $78 = (__Znwj(352)|0);\n $21 = $44;\n $79 = $21;\n $80 = HEAP32[$79>>2]|0;\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEEC2ERS4_($78,$80);\n $17 = $77;\n $18 = $78;\n $81 = $17;\n $82 = $18;\n ;HEAP32[$20>>2]=0|0;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$20>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEEC2IS7_EEPT_NS_9enable_ifIXsr14is_convertibleISB_PS7_EE5valueENS8_5__natEE4typeE($19,$82,$$byval_copy1);\n $15 = $19;\n $16 = $81;\n $83 = $15;\n $84 = $16;\n $12 = $83;\n $13 = $84;\n $85 = $12;\n $11 = $85;\n $86 = $11;\n $87 = HEAP32[$86>>2]|0;\n HEAP32[$14>>2] = $87;\n $88 = $13;\n $9 = $88;\n $89 = $9;\n $90 = HEAP32[$89>>2]|0;\n $91 = $12;\n HEAP32[$91>>2] = $90;\n $10 = $14;\n $92 = $10;\n $93 = HEAP32[$92>>2]|0;\n $94 = $13;\n HEAP32[$94>>2] = $93;\n $95 = ((($83)) + 4|0);\n $96 = $16;\n $97 = ((($96)) + 4|0);\n $6 = $95;\n $7 = $97;\n $98 = $6;\n $5 = $98;\n $99 = $5;\n $100 = HEAP32[$99>>2]|0;\n HEAP32[$8>>2] = $100;\n $101 = $7;\n $3 = $101;\n $102 = $3;\n $103 = HEAP32[$102>>2]|0;\n $104 = $6;\n HEAP32[$104>>2] = $103;\n $4 = $8;\n $105 = $4;\n $106 = HEAP32[$105>>2]|0;\n $107 = $7;\n HEAP32[$107>>2] = $106;\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($19);\n STACKTOP = sp;return;\n}\nfunction __ZN6LASZip8getPointEi($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $6 = $3;\n $7 = $4;\n $8 = $7;\n $5 = $8;\n $9 = ((($6)) + 8|0);\n $2 = $9;\n $10 = $2;\n $11 = HEAP32[$10>>2]|0;\n $12 = $5;\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE9readPointEPc($11,$12);\n STACKTOP = sp;return;\n}\nfunction __ZN6LASZip8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $2;\n $4 = ((($3)) + 8|0);\n $1 = $4;\n $5 = $1;\n $6 = HEAP32[$5>>2]|0;\n $7 = (__ZNK6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10get_headerEv($6)|0);\n $8 = ((($7)) + 107|0);\n $9 = HEAPU8[$8>>0]|(HEAPU8[$8+1>>0]<<8)|(HEAPU8[$8+2>>0]<<16)|(HEAPU8[$8+3>>0]<<24);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN13DynamicLASZip4openEjj($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);\n $$byval_copy1 = sp + 280|0;\n $$byval_copy = sp + 276|0;\n $8 = sp + 252|0;\n $14 = sp + 228|0;\n $22 = sp + 192|0;\n $29 = sp + 160|0;\n $35 = sp + 136|0;\n $40 = sp + 112|0;\n $41 = sp + 108|0;\n $48 = sp + 80|0;\n $54 = sp + 56|0;\n $59 = sp + 32|0;\n $60 = sp + 24|0;\n $65 = sp;\n $61 = $0;\n $62 = $1;\n $63 = $2;\n $66 = $61;\n $67 = $62;\n $68 = $67;\n $64 = $68;\n $69 = (__Znwj(12)|0);\n $70 = $64;\n $71 = $63;\n __ZN10buf_streamC2EPhj($69,$70,$71);\n $57 = $66;\n $58 = $69;\n $72 = $57;\n $73 = $58;\n ;HEAP32[$60>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$60>>2]|0;\n __ZNSt3__210shared_ptrI10buf_streamEC2IS1_EEPT_NS_9enable_ifIXsr14is_convertibleIS5_PS1_EE5valueENS2_5__natEE4typeE($59,$73,$$byval_copy);\n $55 = $59;\n $56 = $72;\n $74 = $55;\n $75 = $56;\n $52 = $74;\n $53 = $75;\n $76 = $52;\n $51 = $76;\n $77 = $51;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$54>>2] = $78;\n $79 = $53;\n $49 = $79;\n $80 = $49;\n $81 = HEAP32[$80>>2]|0;\n $82 = $52;\n HEAP32[$82>>2] = $81;\n $50 = $54;\n $83 = $50;\n $84 = HEAP32[$83>>2]|0;\n $85 = $53;\n HEAP32[$85>>2] = $84;\n $86 = ((($74)) + 4|0);\n $87 = $56;\n $88 = ((($87)) + 4|0);\n $46 = $86;\n $47 = $88;\n $89 = $46;\n $45 = $89;\n $90 = $45;\n $91 = HEAP32[$90>>2]|0;\n HEAP32[$48>>2] = $91;\n $92 = $47;\n $43 = $92;\n $93 = $43;\n $94 = HEAP32[$93>>2]|0;\n $95 = $46;\n HEAP32[$95>>2] = $94;\n $44 = $48;\n $96 = $44;\n $97 = HEAP32[$96>>2]|0;\n $98 = $47;\n HEAP32[$98>>2] = $97;\n __ZNSt3__210shared_ptrI10buf_streamED2Ev($59);\n $99 = ((($66)) + 8|0);\n $100 = (__Znwj(12)|0);\n $42 = $66;\n $101 = $42;\n $102 = HEAP32[$101>>2]|0;\n __ZN6laszip8decoders10arithmeticI10buf_streamEC2ERS2_($100,$102);\n $38 = $99;\n $39 = $100;\n $103 = $38;\n $104 = $39;\n ;HEAP32[$41>>2]=0|0;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$41>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEEC2IS5_EEPT_NS_9enable_ifIXsr14is_convertibleIS9_PS5_EE5valueENS6_5__natEE4typeE($40,$104,$$byval_copy1);\n $36 = $40;\n $37 = $103;\n $105 = $36;\n $106 = $37;\n $33 = $105;\n $34 = $106;\n $107 = $33;\n $32 = $107;\n $108 = $32;\n $109 = HEAP32[$108>>2]|0;\n HEAP32[$35>>2] = $109;\n $110 = $34;\n $30 = $110;\n $111 = $30;\n $112 = HEAP32[$111>>2]|0;\n $113 = $33;\n HEAP32[$113>>2] = $112;\n $31 = $35;\n $114 = $31;\n $115 = HEAP32[$114>>2]|0;\n $116 = $34;\n HEAP32[$116>>2] = $115;\n $117 = ((($105)) + 4|0);\n $118 = $37;\n $119 = ((($118)) + 4|0);\n $27 = $117;\n $28 = $119;\n $120 = $27;\n $26 = $120;\n $121 = $26;\n $122 = HEAP32[$121>>2]|0;\n HEAP32[$29>>2] = $122;\n $123 = $28;\n $24 = $123;\n $124 = $24;\n $125 = HEAP32[$124>>2]|0;\n $126 = $27;\n HEAP32[$126>>2] = $125;\n $25 = $29;\n $127 = $25;\n $128 = HEAP32[$127>>2]|0;\n $129 = $28;\n HEAP32[$129>>2] = $128;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($40);\n $130 = ((($66)) + 8|0);\n $23 = $130;\n $131 = $23;\n $132 = HEAP32[$131>>2]|0;\n __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticI10buf_streamEEEENS0_26dynamic_field_decompressorIT_E3ptrERS7_($65,$132);\n $133 = ((($66)) + 16|0);\n $20 = $133;\n $21 = $65;\n $134 = $20;\n $135 = $21;\n $19 = $135;\n $136 = $19;\n $17 = $22;\n $18 = $136;\n $137 = $17;\n $138 = $18;\n $139 = HEAP32[$138>>2]|0;\n HEAP32[$137>>2] = $139;\n $140 = ((($137)) + 4|0);\n $141 = $18;\n $142 = ((($141)) + 4|0);\n $143 = HEAP32[$142>>2]|0;\n HEAP32[$140>>2] = $143;\n $144 = $18;\n HEAP32[$144>>2] = 0;\n $145 = $18;\n $146 = ((($145)) + 4|0);\n HEAP32[$146>>2] = 0;\n $15 = $22;\n $16 = $134;\n $147 = $15;\n $148 = $16;\n $12 = $147;\n $13 = $148;\n $149 = $12;\n $11 = $149;\n $150 = $11;\n $151 = HEAP32[$150>>2]|0;\n HEAP32[$14>>2] = $151;\n $152 = $13;\n $9 = $152;\n $153 = $9;\n $154 = HEAP32[$153>>2]|0;\n $155 = $12;\n HEAP32[$155>>2] = $154;\n $10 = $14;\n $156 = $10;\n $157 = HEAP32[$156>>2]|0;\n $158 = $13;\n HEAP32[$158>>2] = $157;\n $159 = ((($147)) + 4|0);\n $160 = $16;\n $161 = ((($160)) + 4|0);\n $6 = $159;\n $7 = $161;\n $162 = $6;\n $5 = $162;\n $163 = $5;\n $164 = HEAP32[$163>>2]|0;\n HEAP32[$8>>2] = $164;\n $165 = $7;\n $3 = $165;\n $166 = $3;\n $167 = HEAP32[$166>>2]|0;\n $168 = $6;\n HEAP32[$168>>2] = $167;\n $4 = $8;\n $169 = $4;\n $170 = HEAP32[$169>>2]|0;\n $171 = $7;\n HEAP32[$171>>2] = $170;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($22);\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($65);\n STACKTOP = sp;return;\n}\nfunction __ZN13DynamicLASZip16addFieldFloatingEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $7 = $0;\n $8 = $1;\n $9 = $7;\n $10 = ((($9)) + 16|0);\n $6 = $10;\n $11 = $6;\n $5 = $11;\n $12 = $5;\n $13 = HEAP32[$12>>2]|0;\n $14 = ($13|0)!=(0|0);\n if (!($14)) {\n  STACKTOP = sp;return;\n }\n $15 = $8;\n switch ($15|0) {\n case 4:  {\n  $16 = ((($9)) + 16|0);\n  $4 = $16;\n  $17 = $4;\n  $18 = HEAP32[$17>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($18);\n  STACKTOP = sp;return;\n  break;\n }\n case 8:  {\n  $19 = ((($9)) + 16|0);\n  $2 = $19;\n  $20 = $2;\n  $21 = HEAP32[$20>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($21);\n  $22 = ((($9)) + 16|0);\n  $3 = $22;\n  $23 = $3;\n  $24 = HEAP32[$23>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($24);\n  STACKTOP = sp;return;\n  break;\n }\n default: {\n  STACKTOP = sp;return;\n }\n }\n}\nfunction __ZN13DynamicLASZip14addFieldSignedEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $8 = $0;\n $9 = $1;\n $10 = $8;\n $11 = ((($10)) + 16|0);\n $7 = $11;\n $12 = $7;\n $6 = $12;\n $13 = $6;\n $14 = HEAP32[$13>>2]|0;\n $15 = ($14|0)!=(0|0);\n if (!($15)) {\n  STACKTOP = sp;return;\n }\n $16 = $9;\n switch ($16|0) {\n case 1:  {\n  $17 = ((($10)) + 16|0);\n  $5 = $17;\n  $18 = $5;\n  $19 = HEAP32[$18>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIaEEvv($19);\n  STACKTOP = sp;return;\n  break;\n }\n case 2:  {\n  $20 = ((($10)) + 16|0);\n  $3 = $20;\n  $21 = $3;\n  $22 = HEAP32[$21>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIsEEvv($22);\n  STACKTOP = sp;return;\n  break;\n }\n case 8:  {\n  $23 = ((($10)) + 16|0);\n  $2 = $23;\n  $24 = $2;\n  $25 = HEAP32[$24>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($25);\n  break;\n }\n case 4:  {\n  break;\n }\n default: {\n  STACKTOP = sp;return;\n }\n }\n $26 = ((($10)) + 16|0);\n $4 = $26;\n $27 = $4;\n $28 = HEAP32[$27>>2]|0;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($28);\n STACKTOP = sp;return;\n}\nfunction __ZN13DynamicLASZip16addFieldUnsignedEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $8 = $0;\n $9 = $1;\n $10 = $8;\n $11 = ((($10)) + 16|0);\n $7 = $11;\n $12 = $7;\n $6 = $12;\n $13 = $6;\n $14 = HEAP32[$13>>2]|0;\n $15 = ($14|0)!=(0|0);\n if (!($15)) {\n  STACKTOP = sp;return;\n }\n $16 = $9;\n switch ($16|0) {\n case 1:  {\n  $17 = ((($10)) + 16|0);\n  $5 = $17;\n  $18 = $5;\n  $19 = HEAP32[$18>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIhEEvv($19);\n  STACKTOP = sp;return;\n  break;\n }\n case 2:  {\n  $20 = ((($10)) + 16|0);\n  $3 = $20;\n  $21 = $3;\n  $22 = HEAP32[$21>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldItEEvv($22);\n  STACKTOP = sp;return;\n  break;\n }\n case 8:  {\n  $23 = ((($10)) + 16|0);\n  $2 = $23;\n  $24 = $2;\n  $25 = HEAP32[$24>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($25);\n  break;\n }\n case 4:  {\n  break;\n }\n default: {\n  STACKTOP = sp;return;\n }\n }\n $26 = ((($10)) + 16|0);\n $4 = $26;\n $27 = $4;\n $28 = HEAP32[$27>>2]|0;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($28);\n STACKTOP = sp;return;\n}\nfunction __ZN13DynamicLASZip8getPointEi($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $8 = $5;\n $9 = $6;\n $10 = $9;\n $7 = $10;\n $11 = ((($8)) + 16|0);\n $4 = $11;\n $12 = $4;\n $3 = $12;\n $13 = $3;\n $14 = HEAP32[$13>>2]|0;\n $15 = ($14|0)!=(0|0);\n if (!($15)) {\n  STACKTOP = sp;return;\n }\n $16 = ((($8)) + 16|0);\n $2 = $16;\n $17 = $2;\n $18 = HEAP32[$17>>2]|0;\n $19 = HEAP32[$18>>2]|0;\n $20 = HEAP32[$19>>2]|0;\n $21 = $7;\n (FUNCTION_TABLE_iii[$20 & 255]($18,$21)|0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7streams13memory_streamC2EPKci($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n HEAP32[$6>>2] = $7;\n $8 = ((($6)) + 4|0);\n $9 = $5;\n HEAP32[$8>>2] = $9;\n $10 = ((($6)) + 8|0);\n HEAP32[$10>>2] = 0;\n $11 = ((($6)) + 12|0);\n HEAP8[$11>>0] = 0;\n $12 = ((($6)) + 13|0);\n HEAP8[$12>>0] = 0;\n $13 = ((($6)) + 16|0);\n HEAP32[$13>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEEC2ERS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 12|0;\n $16 = $0;\n $17 = $1;\n $18 = $16;\n $19 = $17;\n HEAP32[$18>>2] = $19;\n $20 = ((($18)) + 4|0);\n $21 = HEAP32[$18>>2]|0;\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($20,$21);\n $22 = ((($18)) + 247|0);\n __ZN6laszip2io7laz_vlrC2Ev($22);\n $23 = ((($18)) + 288|0);\n $15 = $23;\n $24 = $15;\n $13 = $24;\n $25 = $13;\n $12 = $25;\n HEAP32[$25>>2] = 0;\n $26 = ((($25)) + 4|0);\n HEAP32[$26>>2] = 0;\n $27 = ((($25)) + 8|0);\n HEAP32[$14>>2] = 0;\n $10 = $27;\n $11 = $14;\n $28 = $10;\n $29 = $11;\n $9 = $29;\n $30 = $9;\n $5 = $28;\n $6 = $30;\n $31 = $5;\n $32 = $6;\n $4 = $32;\n HEAP32[$31>>2] = 0;\n $8 = $28;\n $33 = $8;\n $7 = $33;\n $34 = ((($18)) + 300|0);\n __ZN6laszip7factory13record_schemaC2Ev($34);\n $35 = ((($18)) + 312|0);\n $3 = $35;\n $36 = $3;\n HEAP32[$36>>2] = 0;\n $37 = ((($36)) + 4|0);\n HEAP32[$37>>2] = 0;\n $38 = ((($18)) + 320|0);\n $2 = $38;\n $39 = $2;\n HEAP32[$39>>2] = 0;\n $40 = ((($39)) + 4|0);\n HEAP32[$40>>2] = 0;\n $41 = ((($18)) + 328|0);\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE13__chunk_stateC2Ev($41);\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE5_openEv($18);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (1584);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction ___clang_call_terminate($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n (___cxa_begin_catch(($0|0))|0);\n __ZSt9terminatev();\n // unreachable;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 24;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEEC2IS7_EEPT_NS_9enable_ifIXsr14is_convertibleISB_PS7_EE5valueENS8_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $50 = sp + 76|0;\n $51 = sp + 72|0;\n $52 = sp + 8|0;\n $53 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$52>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$53>>0]=HEAP8[$66>>0]|0;\n $49 = $79;\n HEAP32[$50>>2] = $80;\n $81 = $49;\n $47 = $81;\n $48 = 0;\n $82 = $47;\n $83 = $48;\n $45 = $82;\n $46 = $83;\n $84 = $45;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $46;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $48;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (1612);\n $89 = ((($81)) + 12|0);\n $21 = $53;\n $90 = $21;\n $30 = $51;\n $31 = $50;\n $32 = $90;\n $91 = $30;\n $92 = $31;\n $29 = $92;\n $93 = $29;\n $23 = $91;\n $24 = $93;\n $94 = $23;\n $95 = $24;\n $22 = $95;\n $96 = $22;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $32;\n $25 = $98;\n $99 = $25;\n $27 = $91;\n $28 = $99;\n $100 = $28;\n $26 = $100;\n $33 = $52;\n $101 = $33;\n $42 = $89;\n $43 = $51;\n $44 = $101;\n $102 = $42;\n $103 = $43;\n $41 = $103;\n $104 = $41;\n $35 = $102;\n $36 = $104;\n $105 = $35;\n $106 = $36;\n $34 = $106;\n $107 = $34;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $44;\n $37 = $108;\n $109 = $37;\n $39 = $102;\n $40 = $109;\n $110 = $40;\n $38 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $20 = $65;\n $120 = $20;\n $17 = $120;\n $18 = 0;\n $121 = $17;\n $16 = $121;\n $122 = $16;\n $15 = $122;\n $123 = $15;\n $124 = HEAP32[$123>>2]|0;\n $19 = $124;\n $125 = $18;\n $12 = $121;\n $126 = $12;\n $11 = $126;\n $127 = $11;\n HEAP32[$127>>2] = $125;\n $128 = $19;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $10 = $121;\n $130 = $10;\n $9 = $130;\n $131 = $9;\n $132 = $19;\n $13 = $131;\n $14 = $132;\n $133 = $14;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($133);\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $4 = $22;\n $23 = $4;\n $3 = $23;\n $24 = $3;\n $2 = $24;\n $25 = $2;\n $1 = $25;\n $26 = $1;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($28);\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 48;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 320|0);\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($3);\n $4 = ((($2)) + 312|0);\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($4);\n $5 = ((($2)) + 300|0);\n __ZN6laszip7factory13record_schemaD2Ev($5);\n $6 = ((($2)) + 288|0);\n __ZNSt3__26vectorIyNS_9allocatorIyEEED2Ev($6);\n $7 = ((($2)) + 247|0);\n __ZN6laszip2io7laz_vlrD2Ev($7);\n $8 = ((($2)) + 4|0);\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($8);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory13record_schemaD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseIyNS_9allocatorIyEEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io7laz_vlrD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 34|0);\n $4 = HEAPU8[$3>>0]|(HEAPU8[$3+1>>0]<<8)|(HEAPU8[$3+2>>0]<<16)|(HEAPU8[$3+3>>0]<<24);\n $5 = ($4|0)==(0|0);\n if ($5) {\n  STACKTOP = sp;return;\n }\n __ZdaPv($4);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 12|0);\n $4 = HEAP32[$3>>2]|0;\n __ZN6laszip5utilsL12aligned_freeEPv($4);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -12|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n }\n $54 = $28;\n $55 = ((($37)) + 4|0);\n HEAP32[$55>>2] = $54;\n $7 = $32;\n $56 = $7;\n $57 = ((($56)) + 8|0);\n $6 = $57;\n $58 = $6;\n $5 = $58;\n $59 = $5;\n $60 = HEAP32[$32>>2]|0;\n $4 = $32;\n $61 = $4;\n $3 = $61;\n $62 = $3;\n $63 = ((($62)) + 8|0);\n $2 = $63;\n $64 = $2;\n $1 = $64;\n $65 = $1;\n $66 = HEAP32[$65>>2]|0;\n $67 = HEAP32[$61>>2]|0;\n $68 = $66;\n $69 = $67;\n $70 = (($68) - ($69))|0;\n $71 = (($70|0) / 12)&-1;\n $12 = $59;\n $13 = $60;\n $14 = $71;\n $72 = $12;\n $73 = $13;\n $74 = $14;\n $9 = $72;\n $10 = $73;\n $11 = $74;\n $75 = $10;\n $8 = $75;\n $76 = $8;\n __ZdlPv($76);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseIyNS_9allocatorIyEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -8|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n }\n $54 = $28;\n $55 = ((($37)) + 4|0);\n HEAP32[$55>>2] = $54;\n $7 = $32;\n $56 = $7;\n $57 = ((($56)) + 8|0);\n $6 = $57;\n $58 = $6;\n $5 = $58;\n $59 = $5;\n $60 = HEAP32[$32>>2]|0;\n $4 = $32;\n $61 = $4;\n $3 = $61;\n $62 = $3;\n $63 = ((($62)) + 8|0);\n $2 = $63;\n $64 = $2;\n $1 = $64;\n $65 = $1;\n $66 = HEAP32[$65>>2]|0;\n $67 = HEAP32[$61>>2]|0;\n $68 = $66;\n $69 = $67;\n $70 = (($68) - ($69))|0;\n $71 = (($70|0) / 8)&-1;\n $12 = $59;\n $13 = $60;\n $14 = $71;\n $72 = $12;\n $73 = $13;\n $74 = $14;\n $9 = $72;\n $10 = $73;\n $11 = $74;\n $75 = $10;\n $8 = $75;\n $76 = $8;\n __ZdlPv($76);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip5utilsL12aligned_freeEPv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + -4|0);\n $4 = HEAP32[$3>>2]|0;\n _free($4);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP32[$4>>2] = $5;\n $6 = ((($4)) + 4|0);\n HEAP32[$6>>2] = 0;\n $7 = ((($4)) + 8|0);\n HEAP32[$7>>2] = 0;\n $8 = ((($4)) + 12|0);\n $9 = (__ZN6laszip5utilsL14aligned_mallocEi(1048576)|0);\n HEAP32[$8>>2] = $9;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io7laz_vlrC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 32|0);\n HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=0>>8;\n $4 = ((($2)) + 34|0);\n HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=(0>>8)&255;HEAP8[$4+2>>0]=(0>>16)&255;HEAP8[$4+3>>0]=0>>24;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory13record_schemaC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $11 = sp + 8|0;\n $13 = $0;\n $14 = $13;\n $12 = $14;\n $15 = $12;\n $10 = $15;\n $16 = $10;\n $9 = $16;\n HEAP32[$16>>2] = 0;\n $17 = ((($16)) + 4|0);\n HEAP32[$17>>2] = 0;\n $18 = ((($16)) + 8|0);\n HEAP32[$11>>2] = 0;\n $7 = $18;\n $8 = $11;\n $19 = $7;\n $20 = $8;\n $6 = $20;\n $21 = $6;\n $2 = $19;\n $3 = $21;\n $22 = $2;\n $23 = $3;\n $1 = $23;\n HEAP32[$22>>2] = 0;\n $5 = $19;\n $24 = $5;\n $4 = $24;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE13__chunk_stateC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = $2;\n $4 = $3;\n HEAP32[$4>>2] = 0;\n $5 = (($3) + 4)|0;\n $6 = $5;\n HEAP32[$6>>2] = 0;\n $7 = ((($2)) + 8|0);\n $8 = $7;\n $9 = $8;\n HEAP32[$9>>2] = 0;\n $10 = (($8) + 4)|0;\n $11 = $10;\n HEAP32[$11>>2] = 0;\n $12 = ((($2)) + 16|0);\n $13 = $12;\n $14 = $13;\n HEAP32[$14>>2] = -1;\n $15 = (($13) + 4)|0;\n $16 = $15;\n HEAP32[$16>>2] = -1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE5_openEv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $$expand_i1_val = 0, $$expand_i1_val3 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0;\n var $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0;\n var $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0;\n var $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0;\n var $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0;\n var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;\n var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;\n var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;\n var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0;\n var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0);\n $$byval_copy1 = sp + 88|0;\n $$byval_copy = sp + 72|0;\n $3 = sp + 64|0;\n $13 = sp + 268|0;\n $16 = sp + 256|0;\n $20 = sp + 240|0;\n $23 = sp + 228|0;\n $26 = sp + 56|0;\n $37 = sp + 320|0;\n $51 = sp + 316|0;\n $52 = sp + 116|0;\n $53 = sp + 40|0;\n $55 = sp + 108|0;\n $56 = sp + 104|0;\n $57 = sp + 16|0;\n $58 = sp;\n $50 = $0;\n $59 = $50;\n $60 = HEAP32[$59>>2]|0;\n __ZN6laszip7streams13memory_stream4readEPci($60,$51,4);\n $61 = ((($51)) + 4|0);\n $47 = $52;\n $48 = $51;\n $49 = $61;\n $62 = $47;\n $46 = $62;\n $63 = $46;\n $45 = $63;\n $64 = $45;\n ;HEAP32[$64>>2]=0|0;HEAP32[$64+4>>2]=0|0;HEAP32[$64+8>>2]=0|0;\n $44 = $63;\n $65 = $44;\n $43 = $65;\n $66 = $48;\n $67 = $49;\n __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_($62,$66,$67);\n $41 = $52;\n $42 = 4257;\n $68 = $41;\n $69 = $42;\n $38 = $68;\n $39 = $69;\n $70 = $39;\n $71 = (__ZNSt3__211char_traitsIcE6lengthEPKc($70)|0);\n $40 = $71;\n $72 = $40;\n $73 = $38;\n $36 = $73;\n $74 = $36;\n $35 = $74;\n $75 = $35;\n $34 = $75;\n $76 = $34;\n $33 = $76;\n $77 = $33;\n $78 = ((($77)) + 11|0);\n $79 = HEAP8[$78>>0]|0;\n $80 = $79&255;\n $81 = $80 & 128;\n $82 = ($81|0)!=(0);\n if ($82) {\n  $29 = $74;\n  $83 = $29;\n  $28 = $83;\n  $84 = $28;\n  $27 = $84;\n  $85 = $27;\n  $86 = ((($85)) + 4|0);\n  $87 = HEAP32[$86>>2]|0;\n  $95 = $87;\n } else {\n  $32 = $74;\n  $88 = $32;\n  $31 = $88;\n  $89 = $31;\n  $30 = $89;\n  $90 = $30;\n  $91 = ((($90)) + 11|0);\n  $92 = HEAP8[$91>>0]|0;\n  $93 = $92&255;\n  $95 = $93;\n }\n $94 = ($72|0)!=($95|0);\n if ($94) {\n  $$expand_i1_val = 0;\n  HEAP8[$37>>0] = $$expand_i1_val;\n } else {\n  $96 = $38;\n  $97 = $39;\n  $98 = $40;\n  $99 = (__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj($96,0,-1,$97,$98)|0);\n  $100 = ($99|0)==(0);\n  $$expand_i1_val3 = $100&1;\n  HEAP8[$37>>0] = $$expand_i1_val3;\n }\n $$pre_trunc = HEAP8[$37>>0]|0;\n $101 = $$pre_trunc&1;\n $102 = $101 ^ 1;\n __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev($52);\n if ($102) {\n  $103 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip13invalid_magicC2Ev($103);\n  ___cxa_throw(($103|0),(56|0),(11|0));\n  // unreachable;\n }\n $104 = HEAP32[$59>>2]|0;\n $25 = $53;\n $105 = $26;\n $106 = $105;\n HEAP32[$106>>2] = 0;\n $107 = (($105) + 4)|0;\n $108 = $107;\n HEAP32[$108>>2] = 0;\n $109 = $25;\n ;HEAP32[$109>>2]=0|0;HEAP32[$109+4>>2]=0|0;\n $110 = ((($109)) + 8|0);\n $111 = $26;\n $112 = $111;\n $113 = HEAP32[$112>>2]|0;\n $114 = (($111) + 4)|0;\n $115 = $114;\n $116 = HEAP32[$115>>2]|0;\n $117 = $110;\n $118 = $117;\n HEAP32[$118>>2] = $113;\n $119 = (($117) + 4)|0;\n $120 = $119;\n HEAP32[$120>>2] = $116;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$53>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$53+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$53+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$53+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($104,$$byval_copy);\n $121 = HEAP32[$59>>2]|0;\n $122 = ((($59)) + 20|0);\n __ZN6laszip7streams13memory_stream4readEPci($121,$122,227);\n $123 = ((($59)) + 20|0);\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10_fixMinMaxERNS0_6headerE($59,$123);\n $124 = (__ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEv()|0);\n $54 = $124;\n $125 = $54;\n $24 = $125;\n $126 = $24;\n $127 = HEAP32[$126>>2]|0;\n $21 = $126;\n $22 = $127;\n $128 = $22;\n $18 = $20;\n $19 = $128;\n $129 = $18;\n $130 = $19;\n HEAP32[$129>>2] = $130;\n $131 = HEAP32[$20>>2]|0;\n HEAP32[$23>>2] = $131;\n $132 = HEAP32[$23>>2]|0;\n HEAP32[$55>>2] = $132;\n $133 = $54;\n $17 = $133;\n $134 = $17;\n $135 = ((($134)) + 4|0);\n $136 = HEAP32[$135>>2]|0;\n $14 = $134;\n $15 = $136;\n $137 = $15;\n $11 = $13;\n $12 = $137;\n $138 = $11;\n $139 = $12;\n HEAP32[$138>>2] = $139;\n $140 = HEAP32[$13>>2]|0;\n HEAP32[$16>>2] = $140;\n $141 = HEAP32[$16>>2]|0;\n HEAP32[$56>>2] = $141;\n while(1) {\n  $9 = $55;\n  $10 = $56;\n  $142 = $9;\n  $143 = $10;\n  $7 = $142;\n  $8 = $143;\n  $144 = $7;\n  $6 = $144;\n  $145 = $6;\n  $146 = HEAP32[$145>>2]|0;\n  $147 = $8;\n  $5 = $147;\n  $148 = $5;\n  $149 = HEAP32[$148>>2]|0;\n  $150 = ($146|0)==($149|0);\n  $151 = $150 ^ 1;\n  if (!($151)) {\n   break;\n  }\n  $4 = $55;\n  $152 = $4;\n  $153 = HEAP32[$152>>2]|0;\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2ERKS6_($57,$153);\n  $154 = ((($59)) + 20|0);\n  __ZNKSt3__28functionIFvRN6laszip2io6headerEEEclES4_($57,$154);\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($57);\n  $1 = $55;\n  $155 = $1;\n  $156 = HEAP32[$155>>2]|0;\n  $157 = ((($156)) + 24|0);\n  HEAP32[$155>>2] = $157;\n }\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE12_parseLASZIPEv($59);\n __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE16_parseChunkTableEv($59);\n $158 = HEAP32[$59>>2]|0;\n __ZN6laszip7streams13memory_stream5clearEv($158);\n $159 = HEAP32[$59>>2]|0;\n $160 = ((($59)) + 20|0);\n $161 = ((($160)) + 96|0);\n $162 = HEAP32[$161>>2]|0;\n $163 = (($162) + 8)|0;\n $2 = $58;\n $164 = $3;\n $165 = $164;\n HEAP32[$165>>2] = $163;\n $166 = (($164) + 4)|0;\n $167 = $166;\n HEAP32[$167>>2] = 0;\n $168 = $2;\n ;HEAP32[$168>>2]=0|0;HEAP32[$168+4>>2]=0|0;\n $169 = ((($168)) + 8|0);\n $170 = $3;\n $171 = $170;\n $172 = HEAP32[$171>>2]|0;\n $173 = (($170) + 4)|0;\n $174 = $173;\n $175 = HEAP32[$174>>2]|0;\n $176 = $169;\n $177 = $176;\n HEAP32[$177>>2] = $172;\n $178 = (($176) + 4)|0;\n $179 = $178;\n HEAP32[$179>>2] = $175;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$58>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$58+4>>2]|0;HEAP32[$$byval_copy1+8>>2]=HEAP32[$58+8>>2]|0;HEAP32[$$byval_copy1+12>>2]=HEAP32[$58+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($159,$$byval_copy1);\n $180 = ((($59)) + 4|0);\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE5resetEv($180);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip5utilsL14aligned_mallocEi($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $4 = $1;\n $5 = (($4) + 64)|0;\n $6 = (($5) + 4)|0;\n $7 = (_malloc($6)|0);\n $2 = $7;\n $8 = $2;\n $9 = $8;\n $10 = (($9) + 64)|0;\n $11 = (($10) + 4)|0;\n $12 = $11 & -64;\n $13 = $12;\n $3 = $13;\n $14 = $2;\n $15 = $3;\n $16 = ((($15)) + -4|0);\n HEAP32[$16>>2] = $14;\n $17 = $3;\n STACKTOP = sp;return ($17|0);\n}\nfunction __ZN6laszip7streams13memory_stream4readEPci($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);\n $18 = sp;\n $21 = sp + 92|0;\n $24 = sp + 12|0;\n $26 = sp + 4|0;\n $22 = $0;\n $23 = $1;\n HEAP32[$24>>2] = $2;\n $27 = $22;\n $28 = ((($27)) + 13|0);\n $29 = HEAP8[$28>>0]|0;\n $30 = $29&1;\n if ($30) {\n  $31 = ((($27)) + 12|0);\n  HEAP8[$31>>0] = 1;\n  STACKTOP = sp;return;\n }\n $32 = ((($27)) + 4|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = ((($27)) + 8|0);\n $35 = HEAP32[$34>>2]|0;\n $36 = (($33) - ($35))|0;\n HEAP32[$26>>2] = $36;\n $19 = $24;\n $20 = $26;\n $37 = $19;\n $38 = $20;\n ;HEAP8[$18>>0]=HEAP8[$21>>0]|0;\n $16 = $37;\n $17 = $38;\n $39 = $17;\n $40 = $16;\n $13 = $18;\n $14 = $39;\n $15 = $40;\n $41 = $14;\n $42 = HEAP32[$41>>2]|0;\n $43 = $15;\n $44 = HEAP32[$43>>2]|0;\n $45 = ($42|0)<($44|0);\n $46 = $17;\n $47 = $16;\n $48 = $45 ? $46 : $47;\n $49 = HEAP32[$48>>2]|0;\n $25 = $49;\n $50 = HEAP32[$27>>2]|0;\n $51 = ((($27)) + 8|0);\n $52 = HEAP32[$51>>2]|0;\n $53 = (($50) + ($52)|0);\n $54 = HEAP32[$27>>2]|0;\n $55 = ((($27)) + 8|0);\n $56 = HEAP32[$55>>2]|0;\n $57 = (($54) + ($56)|0);\n $58 = $25;\n $59 = (($57) + ($58)|0);\n $60 = $23;\n $10 = $53;\n $11 = $59;\n $12 = $60;\n $61 = $10;\n $9 = $61;\n $62 = $9;\n $63 = $11;\n $3 = $63;\n $64 = $3;\n $65 = $12;\n $4 = $65;\n $66 = $4;\n $5 = $62;\n $6 = $64;\n $7 = $66;\n $67 = $6;\n $68 = $5;\n $69 = $67;\n $70 = $68;\n $71 = (($69) - ($70))|0;\n $8 = $71;\n $72 = $8;\n $73 = ($72>>>0)>(0);\n if ($73) {\n  $74 = $7;\n  $75 = $5;\n  $76 = $8;\n  _memmove(($74|0),($75|0),($76|0))|0;\n }\n $77 = $25;\n $78 = ((($27)) + 8|0);\n $79 = HEAP32[$78>>2]|0;\n $80 = (($79) + ($77))|0;\n HEAP32[$78>>2] = $80;\n $81 = $25;\n $82 = ((($27)) + 16|0);\n HEAP32[$82>>2] = $81;\n $83 = ((($27)) + 8|0);\n $84 = HEAP32[$83>>2]|0;\n $85 = ((($27)) + 4|0);\n $86 = HEAP32[$85>>2]|0;\n $87 = ($84|0)>=($86|0);\n if (!($87)) {\n  STACKTOP = sp;return;\n }\n $88 = ((($27)) + 13|0);\n HEAP8[$88>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13invalid_magicC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4355);\n HEAP32[$2>>2] = (1640);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13invalid_magicD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $4;\n $3 = $1;\n $6 = $3;\n $7 = ((($6)) + 8|0);\n $8 = $7;\n $9 = $8;\n $10 = HEAP32[$9>>2]|0;\n $11 = (($8) + 4)|0;\n $12 = $11;\n $13 = HEAP32[$12>>2]|0;\n $14 = ((($5)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = ($15|0)<(0);\n $17 = $16 << 31 >> 31;\n $18 = ($13|0)>($17|0);\n $19 = ($10>>>0)>=($15>>>0);\n $20 = ($13|0)==($17|0);\n $21 = $20 & $19;\n $22 = $18 | $21;\n if ($22) {\n  $23 = ((($5)) + 12|0);\n  HEAP8[$23>>0] = 1;\n  STACKTOP = sp;return;\n } else {\n  $2 = $1;\n  $24 = $2;\n  $25 = ((($24)) + 8|0);\n  $26 = $25;\n  $27 = $26;\n  $28 = HEAP32[$27>>2]|0;\n  $29 = (($26) + 4)|0;\n  $30 = $29;\n  $31 = HEAP32[$30>>2]|0;\n  $32 = ((($5)) + 8|0);\n  HEAP32[$32>>2] = $28;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10_fixMinMaxERNS0_6headerE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0.0, $13 = 0, $14 = 0, $15 = 0, $16 = 0.0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0.0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0, $27 = 0.0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0.0, $32 = 0.0, $33 = 0, $34 = 0, $35 = 0.0, $36 = 0, $37 = 0, $38 = 0.0, $39 = 0, $4 = 0.0, $40 = 0, $41 = 0, $42 = 0.0, $43 = 0, $44 = 0, $45 = 0, $46 = 0.0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0.0, $50 = 0.0, $51 = 0, $52 = 0, $53 = 0, $6 = 0.0, $7 = 0.0, $8 = 0.0, $9 = 0.0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $2 = $0;\n $3 = $1;\n $10 = $3;\n $11 = ((($10)) + 179|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$11>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$11+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$11+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$11+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$11+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$11+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$11+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$11+7>>0];$12 = +HEAPF64[tempDoublePtr>>3];\n $4 = $12;\n $13 = $3;\n $14 = ((($13)) + 179|0);\n $15 = ((($14)) + 8|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$15>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$15+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$15+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$15+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$15+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$15+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$15+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$15+7>>0];$16 = +HEAPF64[tempDoublePtr>>3];\n $7 = $16;\n $17 = $3;\n $18 = ((($17)) + 179|0);\n $19 = ((($18)) + 16|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$19>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$19+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$19+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$19+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$19+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$19+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$19+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$19+7>>0];$20 = +HEAPF64[tempDoublePtr>>3];\n $5 = $20;\n $21 = $3;\n $22 = ((($21)) + 203|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$22>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$22+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$22+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$22+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$22+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$22+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$22+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$22+7>>0];$23 = +HEAPF64[tempDoublePtr>>3];\n $8 = $23;\n $24 = $3;\n $25 = ((($24)) + 203|0);\n $26 = ((($25)) + 8|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$26>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$26+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$26+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$26+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$26+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$26+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$26+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$26+7>>0];$27 = +HEAPF64[tempDoublePtr>>3];\n $6 = $27;\n $28 = $3;\n $29 = ((($28)) + 203|0);\n $30 = ((($29)) + 16|0);\n HEAP8[tempDoublePtr>>0]=HEAP8[$30>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$30+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$30+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$30+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$30+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$30+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$30+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$30+7>>0];$31 = +HEAPF64[tempDoublePtr>>3];\n $9 = $31;\n $32 = $7;\n $33 = $3;\n $34 = ((($33)) + 179|0);\n HEAPF64[tempDoublePtr>>3]=$32;HEAP8[$34>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$34+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$34+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$34+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$34+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$34+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$34+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$34+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $35 = $4;\n $36 = $3;\n $37 = ((($36)) + 203|0);\n HEAPF64[tempDoublePtr>>3]=$35;HEAP8[$37>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$37+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$37+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$37+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$37+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$37+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$37+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$37+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $38 = $8;\n $39 = $3;\n $40 = ((($39)) + 179|0);\n $41 = ((($40)) + 8|0);\n HEAPF64[tempDoublePtr>>3]=$38;HEAP8[$41>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$41+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$41+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$41+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$41+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$41+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$41+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$41+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $42 = $5;\n $43 = $3;\n $44 = ((($43)) + 203|0);\n $45 = ((($44)) + 8|0);\n HEAPF64[tempDoublePtr>>3]=$42;HEAP8[$45>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$45+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$45+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$45+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$45+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$45+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$45+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$45+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $46 = $9;\n $47 = $3;\n $48 = ((($47)) + 179|0);\n $49 = ((($48)) + 16|0);\n HEAPF64[tempDoublePtr>>3]=$46;HEAP8[$49>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$49+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$49+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$49+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$49+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$49+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$49+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$49+7>>0]=HEAP8[tempDoublePtr+7>>0];\n $50 = $6;\n $51 = $3;\n $52 = ((($51)) + 203|0);\n $53 = ((($52)) + 16|0);\n HEAPF64[tempDoublePtr>>3]=$50;HEAP8[$53>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$53+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$53+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$53+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$53+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$53+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$53+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$53+7>>0]=HEAP8[tempDoublePtr+7>>0];\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEv() {\n var $$byval_copy = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0;\n var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $$byval_copy = sp + 195|0;\n $13 = sp + 24|0;\n $18 = sp + 194|0;\n $29 = sp + 193|0;\n $42 = sp + 32|0;\n $44 = sp;\n $45 = sp + 192|0;\n $46 = HEAP8[21176]|0;\n $47 = ($46<<24>>24)==(0);\n if ($47) {\n  $48 = (___cxa_guard_acquire(21176)|0);\n  $49 = ($48|0)!=(0);\n  if ($49) {\n   $43 = 21216;\n   $50 = $43;\n   $41 = $50;\n   $51 = $41;\n   $40 = $51;\n   HEAP32[$51>>2] = 0;\n   $52 = ((($51)) + 4|0);\n   HEAP32[$52>>2] = 0;\n   $53 = ((($51)) + 8|0);\n   HEAP32[$42>>2] = 0;\n   $38 = $53;\n   $39 = $42;\n   $54 = $38;\n   $55 = $39;\n   $37 = $55;\n   $56 = $37;\n   $33 = $54;\n   $34 = $56;\n   $57 = $33;\n   $58 = $34;\n   $32 = $58;\n   HEAP32[$57>>2] = 0;\n   $36 = $54;\n   $59 = $36;\n   $35 = $59;\n  }\n }\n $60 = HEAP8[21184]|0;\n $61 = ($60<<24>>24)==(0);\n if ($61) {\n  $62 = (___cxa_guard_acquire(21184)|0);\n  $63 = ($62|0)!=(0);\n  if ($63) {\n  }\n }\n $31 = 21216;\n $64 = $31;\n $65 = HEAP32[$64>>2]|0;\n $66 = ((($64)) + 4|0);\n $67 = HEAP32[$66>>2]|0;\n $68 = ($65|0)==($67|0);\n if (!($68)) {\n  STACKTOP = sp;return (21216|0);\n }\n __ZNSt3__25mutex4lockEv(21228);\n $30 = 21216;\n $69 = $30;\n $70 = HEAP32[$69>>2]|0;\n $71 = ((($69)) + 4|0);\n $72 = HEAP32[$71>>2]|0;\n $73 = ($70|0)==($72|0);\n if ($73) {\n  ;HEAP8[$$byval_copy>>0]=HEAP8[$45>>0]|0;\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2IZNS2_6reader10basic_fileINS1_7streams13memory_streamEE11_validatorsEvEUlS4_E_vEET_($44,$$byval_copy);\n  $27 = 21216;\n  $28 = $44;\n  $74 = $27;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  $26 = $74;\n  $77 = $26;\n  $78 = ((($77)) + 8|0);\n  $25 = $78;\n  $79 = $25;\n  $24 = $79;\n  $80 = $24;\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ($76>>>0)<($81>>>0);\n  if ($82) {\n   $21 = $29;\n   $22 = $74;\n   $23 = 1;\n   $4 = $74;\n   $83 = $4;\n   $84 = ((($83)) + 8|0);\n   $3 = $84;\n   $85 = $3;\n   $2 = $85;\n   $86 = $2;\n   $87 = ((($74)) + 4|0);\n   $88 = HEAP32[$87>>2]|0;\n   $0 = $88;\n   $89 = $0;\n   $90 = $28;\n   $1 = $90;\n   $91 = $1;\n   $15 = $86;\n   $16 = $89;\n   $17 = $91;\n   $92 = $15;\n   $93 = $16;\n   $94 = $17;\n   $14 = $94;\n   $95 = $14;\n   ;HEAP8[$13>>0]=HEAP8[$18>>0]|0;\n   $10 = $92;\n   $11 = $93;\n   $12 = $95;\n   $96 = $10;\n   $97 = $11;\n   $98 = $12;\n   $9 = $98;\n   $99 = $9;\n   $6 = $96;\n   $7 = $97;\n   $8 = $99;\n   $100 = $7;\n   $101 = $8;\n   $5 = $101;\n   $102 = $5;\n   __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($100,$102);\n   $19 = $29;\n   $103 = ((($74)) + 4|0);\n   $104 = HEAP32[$103>>2]|0;\n   $105 = ((($104)) + 24|0);\n   HEAP32[$103>>2] = $105;\n  } else {\n   $106 = $28;\n   $20 = $106;\n   $107 = $20;\n   __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE21__push_back_slow_pathIS7_EEvOT_($74,$107);\n  }\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($44);\n }\n __ZNSt3__25mutex6unlockEv(21228);\n STACKTOP = sp;return (21216|0);\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2ERKS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n $6 = ((($5)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = ($7|0)==(0|0);\n if ($8) {\n  $9 = ((($4)) + 16|0);\n  HEAP32[$9>>2] = 0;\n  STACKTOP = sp;return;\n }\n $10 = $3;\n $11 = ((($10)) + 16|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = $3;\n $14 = ($12|0)==($13|0);\n if ($14) {\n  $15 = (__ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($4)|0);\n  $16 = ((($4)) + 16|0);\n  HEAP32[$16>>2] = $15;\n  $17 = $3;\n  $18 = ((($17)) + 16|0);\n  $19 = HEAP32[$18>>2]|0;\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ((($20)) + 12|0);\n  $22 = HEAP32[$21>>2]|0;\n  $23 = ((($4)) + 16|0);\n  $24 = HEAP32[$23>>2]|0;\n  FUNCTION_TABLE_vii[$22 & 255]($19,$24);\n  STACKTOP = sp;return;\n } else {\n  $25 = $3;\n  $26 = ((($25)) + 16|0);\n  $27 = HEAP32[$26>>2]|0;\n  $28 = HEAP32[$27>>2]|0;\n  $29 = ((($28)) + 8|0);\n  $30 = HEAP32[$29>>2]|0;\n  $31 = (FUNCTION_TABLE_ii[$30 & 255]($27)|0);\n  $32 = ((($4)) + 16|0);\n  HEAP32[$32>>2] = $31;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNKSt3__28functionIFvRN6laszip2io6headerEEEclES4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $3;\n $6 = ((($5)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = ($7|0)==(0|0);\n if ($8) {\n  $9 = (___cxa_allocate_exception(4)|0);\n  ;HEAP32[$9>>2]=0|0;\n  __ZNSt3__217bad_function_callC2Ev($9);\n  ___cxa_throw(($9|0),(1240|0),(197|0));\n  // unreachable;\n } else {\n  $10 = ((($5)) + 16|0);\n  $11 = HEAP32[$10>>2]|0;\n  $12 = HEAP32[$11>>2]|0;\n  $13 = ((($12)) + 24|0);\n  $14 = HEAP32[$13>>2]|0;\n  $15 = $4;\n  $2 = $15;\n  $16 = $2;\n  FUNCTION_TABLE_vii[$14 & 255]($11,$16);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 16|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ($4|0)==($2|0);\n $6 = ((($2)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n if ($5) {\n  $8 = HEAP32[$7>>2]|0;\n  $9 = ((($8)) + 16|0);\n  $10 = HEAP32[$9>>2]|0;\n  FUNCTION_TABLE_vi[$10 & 511]($7);\n  STACKTOP = sp;return;\n }\n $11 = ($7|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($2)) + 16|0);\n $13 = HEAP32[$12>>2]|0;\n $14 = HEAP32[$13>>2]|0;\n $15 = ((($14)) + 20|0);\n $16 = HEAP32[$15>>2]|0;\n FUNCTION_TABLE_vi[$16 & 511]($13);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE12_parseLASZIPEv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $$expand_i1_val = 0, $$expand_i1_val3 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0;\n var $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0;\n var $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0;\n var $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;\n var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;\n var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;\n var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;\n var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;\n var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);\n $$byval_copy = sp + 32|0;\n $26 = sp + 116|0;\n $30 = sp + 277|0;\n $34 = sp + 24|0;\n $38 = sp + 276|0;\n $40 = sp + 16|0;\n $42 = sp;\n $43 = sp + 222|0;\n $47 = sp + 60|0;\n $48 = sp + 48|0;\n $41 = $0;\n $49 = $41;\n $50 = HEAP32[$49>>2]|0;\n $51 = ((($49)) + 20|0);\n $52 = ((($51)) + 94|0);\n $53 = HEAP16[$52>>1]|0;\n $54 = $53&65535;\n $39 = $42;\n $55 = $40;\n $56 = $55;\n HEAP32[$56>>2] = $54;\n $57 = (($55) + 4)|0;\n $58 = $57;\n HEAP32[$58>>2] = 0;\n $59 = $39;\n ;HEAP32[$59>>2]=0|0;HEAP32[$59+4>>2]=0|0;\n $60 = ((($59)) + 8|0);\n $61 = $40;\n $62 = $61;\n $63 = HEAP32[$62>>2]|0;\n $64 = (($61) + 4)|0;\n $65 = $64;\n $66 = HEAP32[$65>>2]|0;\n $67 = $60;\n $68 = $67;\n HEAP32[$68>>2] = $63;\n $69 = (($67) + 4)|0;\n $70 = $69;\n HEAP32[$70>>2] = $66;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$42>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$42+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$42+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$42+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($50,$$byval_copy);\n $44 = 0;\n $45 = 0;\n while(1) {\n  $71 = $44;\n  $72 = ((($49)) + 20|0);\n  $73 = ((($72)) + 100|0);\n  $74 = HEAP32[$73>>2]|0;\n  $75 = ($71>>>0)<($74>>>0);\n  if (!($75)) {\n   break;\n  }\n  $76 = HEAP32[$49>>2]|0;\n  $77 = (__ZN6laszip7streams13memory_stream4goodEv($76)|0);\n  if (!($77)) {\n   break;\n  }\n  $78 = HEAP32[$49>>2]|0;\n  $79 = (__ZN6laszip7streams13memory_stream3eofEv($78)|0);\n  $80 = $79 ^ 1;\n  if (!($80)) {\n   break;\n  }\n  $81 = HEAP32[$49>>2]|0;\n  __ZN6laszip7streams13memory_stream4readEPci($81,$43,54);\n  $46 = 4841;\n  $82 = ((($43)) + 2|0);\n  $83 = ((($43)) + 2|0);\n  $84 = ((($83)) + 14|0);\n  $85 = $46;\n  $35 = $82;\n  $36 = $84;\n  $37 = $85;\n  $86 = $35;\n  $87 = $36;\n  $88 = $37;\n  ;HEAP8[$34>>0]=HEAP8[$38>>0]|0;\n  $31 = $86;\n  $32 = $87;\n  $33 = $88;\n  while(1) {\n   $89 = $31;\n   $90 = $32;\n   $91 = ($89|0)!=($90|0);\n   if (!($91)) {\n    label = 10;\n    break;\n   }\n   $92 = $31;\n   $93 = $33;\n   $27 = $34;\n   $28 = $92;\n   $29 = $93;\n   $94 = $28;\n   $95 = HEAP8[$94>>0]|0;\n   $96 = $95 << 24 >> 24;\n   $97 = $29;\n   $98 = HEAP8[$97>>0]|0;\n   $99 = $98 << 24 >> 24;\n   $100 = ($96|0)==($99|0);\n   if (!($100)) {\n    label = 8;\n    break;\n   }\n   $101 = $31;\n   $102 = ((($101)) + 1|0);\n   $31 = $102;\n   $103 = $33;\n   $104 = ((($103)) + 1|0);\n   $33 = $104;\n  }\n  if ((label|0) == 8) {\n   label = 0;\n   $$expand_i1_val = 0;\n   HEAP8[$30>>0] = $$expand_i1_val;\n  }\n  else if ((label|0) == 10) {\n   label = 0;\n   $$expand_i1_val3 = 1;\n   HEAP8[$30>>0] = $$expand_i1_val3;\n  }\n  $$pre_trunc = HEAP8[$30>>0]|0;\n  $105 = $$pre_trunc&1;\n  if ($105) {\n   $106 = ((($43)) + 18|0);\n   $107 = HEAPU8[$106>>0]|(HEAPU8[$106+1>>0]<<8);\n   $108 = $107&65535;\n   $109 = ($108|0)==(22204);\n   if ($109) {\n    label = 13;\n    break;\n   }\n  }\n  $149 = HEAP32[$49>>2]|0;\n  $150 = ((($43)) + 20|0);\n  $151 = HEAPU8[$150>>0]|(HEAPU8[$150+1>>0]<<8);\n  $152 = $151&65535;\n  __ZN6laszip7streams13memory_stream5seekgExNSt3__28ios_base7seekdirE($149,$152,0,1);\n  $153 = $44;\n  $154 = (($153) + 1)|0;\n  $44 = $154;\n }\n if ((label|0) == 13) {\n  $45 = 1;\n  $110 = ((($43)) + 20|0);\n  $111 = HEAPU8[$110>>0]|(HEAPU8[$110+1>>0]<<8);\n  $112 = $111&65535;\n  $113 = (__Znaj($112)|0);\n  $25 = $47;\n  HEAP32[$26>>2] = $113;\n  $114 = $25;\n  $23 = $114;\n  $24 = $26;\n  $115 = $23;\n  $116 = $24;\n  $22 = $116;\n  $117 = $22;\n  $20 = $115;\n  $21 = $117;\n  $118 = $20;\n  $119 = $21;\n  $19 = $119;\n  $120 = $19;\n  $121 = HEAP32[$120>>2]|0;\n  HEAP32[$118>>2] = $121;\n  $122 = HEAP32[$49>>2]|0;\n  $18 = $47;\n  $123 = $18;\n  $17 = $123;\n  $124 = $17;\n  $16 = $124;\n  $125 = $16;\n  $126 = HEAP32[$125>>2]|0;\n  $127 = ((($43)) + 20|0);\n  $128 = HEAPU8[$127>>0]|(HEAPU8[$127+1>>0]<<8);\n  $129 = $128&65535;\n  __ZN6laszip7streams13memory_stream4readEPci($122,$126,$129);\n  $15 = $47;\n  $130 = $15;\n  $14 = $130;\n  $131 = $14;\n  $13 = $131;\n  $132 = $13;\n  $133 = HEAP32[$132>>2]|0;\n  __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE15_parseLASZIPVLREPKc($49,$133);\n  $12 = $47;\n  $134 = $12;\n  $9 = $134;\n  $10 = 0;\n  $135 = $9;\n  $8 = $135;\n  $136 = $8;\n  $7 = $136;\n  $137 = $7;\n  $138 = HEAP32[$137>>2]|0;\n  $11 = $138;\n  $139 = $10;\n  $4 = $135;\n  $140 = $4;\n  $3 = $140;\n  $141 = $3;\n  HEAP32[$141>>2] = $139;\n  $142 = $11;\n  $143 = ($142|0)!=(0|0);\n  if ($143) {\n   $2 = $135;\n   $144 = $2;\n   $1 = $144;\n   $145 = $1;\n   $146 = $11;\n   $5 = $145;\n   $6 = $146;\n   $147 = $6;\n   $148 = ($147|0)==(0|0);\n   if (!($148)) {\n    __ZdlPv($147);\n   }\n  }\n }\n $155 = $45;\n $156 = $155&1;\n if ($156) {\n  $158 = ((($49)) + 247|0);\n  $159 = ((($49)) + 20|0);\n  $160 = ((($159)) + 105|0);\n  $161 = HEAPU8[$160>>0]|(HEAPU8[$160+1>>0]<<8);\n  $162 = $161&65535;\n  __ZN6laszip2io7laz_vlr9to_schemaERKS1_i($48,$158,$162);\n  $163 = ((($49)) + 300|0);\n  (__ZN6laszip7factory13record_schemaaSEOS1_($163,$48)|0);\n  __ZN6laszip7factory13record_schemaD2Ev($48);\n  STACKTOP = sp;return;\n } else {\n  $157 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip13no_laszip_vlrC2Ev($157);\n  ___cxa_throw(($157|0),(136|0),(32|0));\n  // unreachable;\n }\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE16_parseChunkTableEv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0;\n var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0;\n var $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0;\n var $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0;\n var $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0;\n var $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0;\n var $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0;\n var $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0;\n var $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0;\n var $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0;\n var $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0;\n var $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0;\n var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;\n var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;\n var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;\n var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 448|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(448|0);\n $$byval_copy1 = sp + 80|0;\n $$byval_copy = sp + 64|0;\n $38 = sp + 56|0;\n $41 = sp + 436|0;\n $54 = sp + 48|0;\n $56 = sp + 40|0;\n $58 = sp + 24|0;\n $59 = sp + 16|0;\n $60 = sp;\n $61 = sp + 216|0;\n $62 = sp + 200|0;\n $63 = sp + 184|0;\n $64 = sp + 104|0;\n $57 = $0;\n $67 = $57;\n $68 = HEAP32[$67>>2]|0;\n $69 = ((($67)) + 20|0);\n $70 = ((($69)) + 96|0);\n $71 = HEAP32[$70>>2]|0;\n $55 = $58;\n $72 = $56;\n $73 = $72;\n HEAP32[$73>>2] = $71;\n $74 = (($72) + 4)|0;\n $75 = $74;\n HEAP32[$75>>2] = 0;\n $76 = $55;\n ;HEAP32[$76>>2]=0|0;HEAP32[$76+4>>2]=0|0;\n $77 = ((($76)) + 8|0);\n $78 = $56;\n $79 = $78;\n $80 = HEAP32[$79>>2]|0;\n $81 = (($78) + 4)|0;\n $82 = $81;\n $83 = HEAP32[$82>>2]|0;\n $84 = $77;\n $85 = $84;\n HEAP32[$85>>2] = $80;\n $86 = (($84) + 4)|0;\n $87 = $86;\n HEAP32[$87>>2] = $83;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$58>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$58+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$58+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$58+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($68,$$byval_copy);\n $88 = $59;\n $89 = $88;\n HEAP32[$89>>2] = 0;\n $90 = (($88) + 4)|0;\n $91 = $90;\n HEAP32[$91>>2] = 0;\n $92 = HEAP32[$67>>2]|0;\n __ZN6laszip7streams13memory_stream4readEPci($92,$59,8);\n $93 = HEAP32[$67>>2]|0;\n $94 = (__ZN6laszip7streams13memory_stream4goodEv($93)|0);\n if (!($94)) {\n  $95 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip22chunk_table_read_errorC2Ev($95);\n  ___cxa_throw(($95|0),(168|0),(34|0));\n  // unreachable;\n }\n $96 = $59;\n $97 = $96;\n $98 = HEAP32[$97>>2]|0;\n $99 = (($96) + 4)|0;\n $100 = $99;\n $101 = HEAP32[$100>>2]|0;\n $102 = ($98|0)==(-1);\n $103 = ($101|0)==(-1);\n $104 = $102 & $103;\n if ($104) {\n  $105 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip13not_supportedC2EPKc($105,5052);\n  ___cxa_throw(($105|0),(184|0),(36|0));\n  // unreachable;\n }\n $106 = HEAP32[$67>>2]|0;\n $107 = $59;\n $108 = $107;\n $109 = HEAP32[$108>>2]|0;\n $110 = (($107) + 4)|0;\n $111 = $110;\n $112 = HEAP32[$111>>2]|0;\n $53 = $60;\n $113 = $54;\n $114 = $113;\n HEAP32[$114>>2] = $109;\n $115 = (($113) + 4)|0;\n $116 = $115;\n HEAP32[$116>>2] = $112;\n $117 = $53;\n ;HEAP32[$117>>2]=0|0;HEAP32[$117+4>>2]=0|0;\n $118 = ((($117)) + 8|0);\n $119 = $54;\n $120 = $119;\n $121 = HEAP32[$120>>2]|0;\n $122 = (($119) + 4)|0;\n $123 = $122;\n $124 = HEAP32[$123>>2]|0;\n $125 = $118;\n $126 = $125;\n HEAP32[$126>>2] = $121;\n $127 = (($125) + 4)|0;\n $128 = $127;\n HEAP32[$128>>2] = $124;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$60>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$60+4>>2]|0;HEAP32[$$byval_copy1+8>>2]=HEAP32[$60+8>>2]|0;HEAP32[$$byval_copy1+12>>2]=HEAP32[$60+12>>2]|0;\n __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($106,$$byval_copy1);\n $129 = HEAP32[$67>>2]|0;\n $130 = (__ZN6laszip7streams13memory_stream4goodEv($129)|0);\n if (!($130)) {\n  $131 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip22chunk_table_read_errorC2Ev($131);\n  ___cxa_throw(($131|0),(168|0),(34|0));\n  // unreachable;\n }\n $132 = HEAP32[$67>>2]|0;\n __ZN6laszip7streams13memory_stream4readEPci($132,$61,8);\n $133 = HEAP32[$67>>2]|0;\n $134 = (__ZN6laszip7streams13memory_stream4goodEv($133)|0);\n if (!($134)) {\n  $135 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip22chunk_table_read_errorC2Ev($135);\n  ___cxa_throw(($135|0),(168|0),(34|0));\n  // unreachable;\n }\n $136 = HEAP32[$61>>2]|0;\n $137 = ($136|0)!=(0);\n if ($137) {\n  $138 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip26unknown_chunk_table_formatC2Ev($138);\n  ___cxa_throw(($138|0),(200|0),(38|0));\n  // unreachable;\n }\n $139 = ((($67)) + 288|0);\n $51 = $139;\n $140 = $51;\n $50 = $140;\n $141 = $50;\n $142 = ((($141)) + 4|0);\n $143 = HEAP32[$142>>2]|0;\n $144 = HEAP32[$141>>2]|0;\n $145 = $143;\n $146 = $144;\n $147 = (($145) - ($146))|0;\n $148 = (($147|0) / 8)&-1;\n $52 = $148;\n $49 = $140;\n $149 = $49;\n $150 = HEAP32[$149>>2]|0;\n $46 = $149;\n $47 = $150;\n $151 = $46;\n $152 = ((($151)) + 4|0);\n $153 = HEAP32[$152>>2]|0;\n $48 = $153;\n while(1) {\n  $154 = $47;\n  $155 = $48;\n  $156 = ($154|0)!=($155|0);\n  if (!($156)) {\n   break;\n  }\n  $45 = $151;\n  $157 = $45;\n  $158 = ((($157)) + 8|0);\n  $44 = $158;\n  $159 = $44;\n  $43 = $159;\n  $160 = $43;\n  $161 = $48;\n  $162 = ((($161)) + -8|0);\n  $48 = $162;\n  $42 = $162;\n  $163 = $42;\n  $39 = $160;\n  $40 = $163;\n  $164 = $39;\n  $165 = $40;\n  ;HEAP8[$38>>0]=HEAP8[$41>>0]|0;\n  $36 = $164;\n  $37 = $165;\n  $166 = $36;\n  $167 = $37;\n  $34 = $166;\n  $35 = $167;\n }\n $168 = $47;\n $169 = ((($151)) + 4|0);\n HEAP32[$169>>2] = $168;\n $170 = $52;\n $31 = $140;\n $32 = $170;\n $171 = $31;\n $30 = $171;\n $172 = $30;\n $173 = HEAP32[$172>>2]|0;\n $29 = $173;\n $174 = $29;\n $13 = $171;\n $175 = $13;\n $176 = HEAP32[$175>>2]|0;\n $12 = $176;\n $177 = $12;\n $18 = $171;\n $178 = $18;\n $17 = $178;\n $179 = $17;\n $16 = $179;\n $180 = $16;\n $181 = ((($180)) + 8|0);\n $15 = $181;\n $182 = $15;\n $14 = $182;\n $183 = $14;\n $184 = HEAP32[$183>>2]|0;\n $185 = HEAP32[$179>>2]|0;\n $186 = $184;\n $187 = $185;\n $188 = (($186) - ($187))|0;\n $189 = (($188|0) / 8)&-1;\n $190 = (($177) + ($189<<3)|0);\n $20 = $171;\n $191 = $20;\n $192 = HEAP32[$191>>2]|0;\n $19 = $192;\n $193 = $19;\n $194 = $32;\n $195 = (($193) + ($194<<3)|0);\n $22 = $171;\n $196 = $22;\n $197 = HEAP32[$196>>2]|0;\n $21 = $197;\n $198 = $21;\n $23 = $171;\n $199 = $23;\n $200 = ((($199)) + 4|0);\n $201 = HEAP32[$200>>2]|0;\n $202 = HEAP32[$199>>2]|0;\n $203 = $201;\n $204 = $202;\n $205 = (($203) - ($204))|0;\n $206 = (($205|0) / 8)&-1;\n $207 = (($198) + ($206<<3)|0);\n $24 = $171;\n $25 = $174;\n $26 = $190;\n $27 = $195;\n $28 = $207;\n $33 = $140;\n $208 = ((($67)) + 247|0);\n $209 = ((($208)) + 12|0);\n $210 = HEAPU8[$209>>0]|(HEAPU8[$209+1>>0]<<8)|(HEAPU8[$209+2>>0]<<16)|(HEAPU8[$209+3>>0]<<24);\n $211 = ($210|0)==(-1);\n if ($211) {\n  $212 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip13not_supportedC2EPKc($212,5170);\n  ___cxa_throw(($212|0),(184|0),(36|0));\n  // unreachable;\n }\n $213 = ((($67)) + 288|0);\n $214 = ((($61)) + 4|0);\n $215 = HEAP32[$214>>2]|0;\n $216 = (($215) + 1)|0;\n __ZNSt3__26vectorIyNS_9allocatorIyEEE6resizeEj($213,$216);\n $217 = ((($67)) + 20|0);\n $218 = ((($217)) + 96|0);\n $219 = HEAP32[$218>>2]|0;\n $220 = (($219) + 8)|0;\n $221 = ((($67)) + 288|0);\n $10 = $221;\n $11 = 0;\n $222 = $10;\n $223 = HEAP32[$222>>2]|0;\n $224 = $11;\n $225 = (($223) + ($224<<3)|0);\n $226 = $225;\n $227 = $226;\n HEAP32[$227>>2] = $220;\n $228 = (($226) + 4)|0;\n $229 = $228;\n HEAP32[$229>>2] = 0;\n $230 = ((($61)) + 4|0);\n $231 = HEAP32[$230>>2]|0;\n $232 = ($231>>>0)>(1);\n if (!($232)) {\n  STACKTOP = sp;return;\n }\n $233 = HEAP32[$67>>2]|0;\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($62,$233);\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($63,$62);\n __ZN6laszip13decompressors7integerC2Ejjjj($64,32,2,8,0);\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($63);\n __ZN6laszip13decompressors7integer4initEv($64);\n $65 = 1;\n while(1) {\n  $234 = $65;\n  $235 = ((($61)) + 4|0);\n  $236 = HEAP32[$235>>2]|0;\n  $237 = ($234>>>0)<=($236>>>0);\n  if (!($237)) {\n   break;\n  }\n  $238 = $65;\n  $239 = ($238>>>0)>(1);\n  if ($239) {\n   $240 = ((($67)) + 288|0);\n   $241 = $65;\n   $242 = (($241) - 1)|0;\n   $8 = $240;\n   $9 = $242;\n   $243 = $8;\n   $244 = HEAP32[$243>>2]|0;\n   $245 = $9;\n   $246 = (($244) + ($245<<3)|0);\n   $247 = $246;\n   $248 = $247;\n   $249 = HEAP32[$248>>2]|0;\n   $250 = (($247) + 4)|0;\n   $251 = $250;\n   $252 = HEAP32[$251>>2]|0;\n   $253 = $249;\n  } else {\n   $253 = 0;\n  }\n  $254 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($64,$63,$253,1)|0);\n  $255 = ($254|0)<(0);\n  $256 = $255 << 31 >> 31;\n  $257 = ((($67)) + 288|0);\n  $258 = $65;\n  $1 = $257;\n  $2 = $258;\n  $259 = $1;\n  $260 = HEAP32[$259>>2]|0;\n  $261 = $2;\n  $262 = (($260) + ($261<<3)|0);\n  $263 = $262;\n  $264 = $263;\n  HEAP32[$264>>2] = $254;\n  $265 = (($263) + 4)|0;\n  $266 = $265;\n  HEAP32[$266>>2] = $256;\n  $267 = $65;\n  $268 = (($267) + 1)|0;\n  $65 = $268;\n }\n $66 = 1;\n while(1) {\n  $269 = $66;\n  $270 = ((($67)) + 288|0);\n  $3 = $270;\n  $271 = $3;\n  $272 = ((($271)) + 4|0);\n  $273 = HEAP32[$272>>2]|0;\n  $274 = HEAP32[$271>>2]|0;\n  $275 = $273;\n  $276 = $274;\n  $277 = (($275) - ($276))|0;\n  $278 = (($277|0) / 8)&-1;\n  $279 = ($269>>>0)<($278>>>0);\n  if (!($279)) {\n   break;\n  }\n  $280 = ((($67)) + 288|0);\n  $281 = $66;\n  $282 = (($281) - 1)|0;\n  $4 = $280;\n  $5 = $282;\n  $283 = $4;\n  $284 = HEAP32[$283>>2]|0;\n  $285 = $5;\n  $286 = (($284) + ($285<<3)|0);\n  $287 = $286;\n  $288 = $287;\n  $289 = HEAP32[$288>>2]|0;\n  $290 = (($287) + 4)|0;\n  $291 = $290;\n  $292 = HEAP32[$291>>2]|0;\n  $293 = ((($67)) + 288|0);\n  $294 = $66;\n  $6 = $293;\n  $7 = $294;\n  $295 = $6;\n  $296 = HEAP32[$295>>2]|0;\n  $297 = $7;\n  $298 = (($296) + ($297<<3)|0);\n  $299 = $298;\n  $300 = $299;\n  $301 = HEAP32[$300>>2]|0;\n  $302 = (($299) + 4)|0;\n  $303 = $302;\n  $304 = HEAP32[$303>>2]|0;\n  $305 = (_i64Add(($301|0),($304|0),($289|0),($292|0))|0);\n  $306 = tempRet0;\n  $307 = $298;\n  $308 = $307;\n  HEAP32[$308>>2] = $305;\n  $309 = (($307) + 4)|0;\n  $310 = $309;\n  HEAP32[$310>>2] = $306;\n  $311 = $66;\n  $312 = (($311) + 1)|0;\n  $66 = $312;\n }\n __ZN6laszip13decompressors7integerD2Ev($64);\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($63);\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($62);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7streams13memory_stream5clearEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 12|0);\n HEAP8[$3>>0] = 0;\n $4 = ((($2)) + 13|0);\n HEAP8[$4>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE5resetEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 8|0);\n HEAP32[$3>>2] = 0;\n $4 = ((($2)) + 4|0);\n HEAP32[$4>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__211char_traitsIcE6lengthEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (_strlen($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0);\n $38 = sp + 8|0;\n $40 = sp + 218|0;\n $48 = sp;\n $51 = sp + 217|0;\n $58 = sp + 216|0;\n $52 = $0;\n $53 = $1;\n $54 = $2;\n $59 = $52;\n $60 = $53;\n $61 = $54;\n $49 = $60;\n $50 = $61;\n $62 = $49;\n $63 = $50;\n ;HEAP8[$48>>0]=HEAP8[$51>>0]|0;\n $46 = $62;\n $47 = $63;\n $64 = $47;\n $65 = $46;\n $66 = $64;\n $67 = $65;\n $68 = (($66) - ($67))|0;\n $55 = $68;\n $69 = $55;\n $44 = $59;\n $70 = $44;\n $43 = $70;\n $71 = $43;\n $42 = $71;\n $72 = $42;\n $41 = $72;\n $73 = $41;\n $39 = $73;\n $74 = $39;\n ;HEAP8[$38>>0]=HEAP8[$40>>0]|0;\n $37 = $74;\n $75 = $37;\n $36 = $75;\n $45 = -1;\n $76 = $45;\n $77 = (($76) - 16)|0;\n $78 = ($69>>>0)>($77>>>0);\n if ($78) {\n  __ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv($59);\n  // unreachable;\n }\n $79 = $55;\n $80 = ($79>>>0)<(11);\n $81 = $55;\n if ($80) {\n  $34 = $59;\n  $35 = $81;\n  $82 = $34;\n  $83 = $35;\n  $84 = $83&255;\n  $33 = $82;\n  $85 = $33;\n  $32 = $85;\n  $86 = $32;\n  $87 = ((($86)) + 11|0);\n  HEAP8[$87>>0] = $84;\n  $12 = $59;\n  $88 = $12;\n  $11 = $88;\n  $89 = $11;\n  $10 = $89;\n  $90 = $10;\n  $9 = $90;\n  $91 = $9;\n  $8 = $91;\n  $92 = $8;\n  $56 = $92;\n } else {\n  $4 = $81;\n  $93 = $4;\n  $94 = ($93>>>0)<(11);\n  if ($94) {\n   $101 = 11;\n  } else {\n   $95 = $4;\n   $96 = (($95) + 1)|0;\n   $3 = $96;\n   $97 = $3;\n   $98 = (($97) + 15)|0;\n   $99 = $98 & -16;\n   $101 = $99;\n  }\n  $100 = (($101) - 1)|0;\n  $57 = $100;\n  $7 = $59;\n  $102 = $7;\n  $6 = $102;\n  $103 = $6;\n  $5 = $103;\n  $104 = $5;\n  $105 = $57;\n  $106 = (($105) + 1)|0;\n  $18 = $104;\n  $19 = $106;\n  $107 = $18;\n  $108 = $19;\n  $15 = $107;\n  $16 = $108;\n  $17 = 0;\n  $109 = $15;\n  $14 = $109;\n  $110 = $16;\n  $13 = $110;\n  $111 = $13;\n  $112 = (__Znwj($111)|0);\n  $56 = $112;\n  $113 = $56;\n  $22 = $59;\n  $23 = $113;\n  $114 = $22;\n  $115 = $23;\n  $21 = $114;\n  $116 = $21;\n  $20 = $116;\n  $117 = $20;\n  HEAP32[$117>>2] = $115;\n  $118 = $57;\n  $119 = (($118) + 1)|0;\n  $26 = $59;\n  $27 = $119;\n  $120 = $26;\n  $121 = $27;\n  $122 = -2147483648 | $121;\n  $25 = $120;\n  $123 = $25;\n  $24 = $123;\n  $124 = $24;\n  $125 = ((($124)) + 8|0);\n  HEAP32[$125>>2] = $122;\n  $126 = $55;\n  $30 = $59;\n  $31 = $126;\n  $127 = $30;\n  $128 = $31;\n  $29 = $127;\n  $129 = $29;\n  $28 = $129;\n  $130 = $28;\n  $131 = ((($130)) + 4|0);\n  HEAP32[$131>>2] = $128;\n }\n while(1) {\n  $132 = $53;\n  $133 = $54;\n  $134 = ($132|0)!=($133|0);\n  $135 = $56;\n  if (!($134)) {\n   break;\n  }\n  $136 = $53;\n  __ZNSt3__211char_traitsIcE6assignERcRKc($135,$136);\n  $137 = $53;\n  $138 = ((($137)) + 1|0);\n  $53 = $138;\n  $139 = $56;\n  $140 = ((($139)) + 1|0);\n  $56 = $140;\n }\n HEAP8[$58>>0] = 0;\n __ZNSt3__211char_traitsIcE6assignERcRKc($135,$58);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__211char_traitsIcE6assignERcRKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $3;\n $5 = HEAP8[$4>>0]|0;\n $6 = $2;\n HEAP8[$6>>0] = $5;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13invalid_magicD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13invalid_magicD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2IZNS2_6reader10basic_fileINS1_7streams13memory_streamEE11_validatorsEvEUlS4_E_vEET_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0);\n $10 = sp + 96|0;\n $11 = sp + 88|0;\n $12 = sp + 80|0;\n $13 = sp + 72|0;\n $17 = sp + 235|0;\n $18 = sp + 234|0;\n $19 = sp + 233|0;\n $20 = sp + 232|0;\n $22 = sp + 172|0;\n $25 = sp + 231|0;\n $30 = sp + 64|0;\n $31 = sp + 56|0;\n $32 = sp + 48|0;\n $36 = sp + 40|0;\n $37 = sp + 32|0;\n $38 = sp + 24|0;\n $41 = sp + 230|0;\n $42 = sp + 124|0;\n $43 = sp + 229|0;\n $44 = sp + 228|0;\n $45 = sp + 227|0;\n $46 = sp + 226|0;\n $47 = sp + 16|0;\n $48 = sp + 8|0;\n $49 = sp;\n $53 = sp + 225|0;\n $54 = sp + 108|0;\n $55 = sp + 224|0;\n $57 = $0;\n $58 = $57;\n $59 = ((($58)) + 16|0);\n HEAP32[$59>>2] = 0;\n $56 = $1;\n $2 = $1;\n $60 = $2;\n $51 = $58;\n $52 = $60;\n $61 = $51;\n $50 = $61;\n $62 = $50;\n HEAP32[$62>>2] = (1704);\n HEAP32[$61>>2] = (1660);\n $63 = ((($61)) + 4|0);\n $64 = $52;\n $3 = $64;\n $65 = $3;\n $23 = $65;\n $66 = $23;\n $21 = $66;\n $67 = $21;\n $15 = $22;\n $16 = $67;\n $68 = $15;\n $69 = $16;\n $14 = $69;\n $70 = $14;\n ;HEAP8[$10>>0]=HEAP8[$20>>0]|0;\n ;HEAP8[$11>>0]=HEAP8[$19>>0]|0;\n ;HEAP8[$12>>0]=HEAP8[$18>>0]|0;\n ;HEAP8[$13>>0]=HEAP8[$17>>0]|0;\n $8 = $68;\n $9 = $70;\n $71 = $8;\n $72 = $9;\n $7 = $72;\n $73 = $7;\n $5 = $71;\n $6 = $73;\n $74 = $5;\n $75 = $6;\n $4 = $75;\n $76 = $4;\n HEAP32[$74>>2] = $76;\n $77 = HEAP32[$22>>2]|0;\n HEAP32[$54>>2] = $77;\n $24 = $25;\n ;HEAP8[$47>>0]=HEAP8[$55>>0]|0;\n ;HEAP8[$48>>0]=HEAP8[$54>>0]|0;HEAP8[$48+1>>0]=HEAP8[$54+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$54+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$54+3>>0]|0;\n ;HEAP8[$49>>0]=HEAP8[$53>>0]|0;\n $40 = $63;\n $78 = $40;\n $39 = $48;\n $79 = $39;\n ;HEAP32[$42>>2]=HEAP32[$79>>2]|0;\n ;HEAP8[$30>>0]=HEAP8[$43>>0]|0;\n ;HEAP8[$31>>0]=HEAP8[$42>>0]|0;HEAP8[$31+1>>0]=HEAP8[$42+1>>0]|0;HEAP8[$31+2>>0]=HEAP8[$42+2>>0]|0;HEAP8[$31+3>>0]=HEAP8[$42+3>>0]|0;\n ;HEAP8[$32>>0]=HEAP8[$41>>0]|0;\n $29 = $78;\n $28 = $31;\n $80 = $28;\n $27 = $80;\n $81 = $27;\n $82 = HEAP32[$81>>2]|0;\n $26 = $82;\n $33 = $47;\n ;HEAP8[$36>>0]=HEAP8[$46>>0]|0;\n ;HEAP8[$37>>0]=HEAP8[$45>>0]|0;\n ;HEAP8[$38>>0]=HEAP8[$44>>0]|0;\n $35 = $78;\n $83 = $35;\n $34 = $83;\n $84 = ((($58)) + 16|0);\n HEAP32[$84>>2] = $58;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE21__push_back_slow_pathIS7_EEvOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $10 = sp + 8|0;\n $15 = sp + 193|0;\n $24 = sp;\n $27 = sp + 192|0;\n $35 = sp + 72|0;\n $38 = sp + 60|0;\n $46 = sp + 12|0;\n $43 = $0;\n $44 = $1;\n $47 = $43;\n $42 = $47;\n $48 = $42;\n $49 = ((($48)) + 8|0);\n $41 = $49;\n $50 = $41;\n $40 = $50;\n $51 = $40;\n $45 = $51;\n $39 = $47;\n $52 = $39;\n $53 = ((($52)) + 4|0);\n $54 = HEAP32[$53>>2]|0;\n $55 = HEAP32[$52>>2]|0;\n $56 = $54;\n $57 = $55;\n $58 = (($56) - ($57))|0;\n $59 = (($58|0) / 24)&-1;\n $60 = (($59) + 1)|0;\n $34 = $47;\n HEAP32[$35>>2] = $60;\n $61 = $34;\n $62 = (__ZNKSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE8max_sizeEv($61)|0);\n $36 = $62;\n $63 = HEAP32[$35>>2]|0;\n $64 = $36;\n $65 = ($63>>>0)>($64>>>0);\n if ($65) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61);\n  // unreachable;\n }\n $32 = $61;\n $66 = $32;\n $31 = $66;\n $67 = $31;\n $30 = $67;\n $68 = $30;\n $69 = ((($68)) + 8|0);\n $29 = $69;\n $70 = $29;\n $28 = $70;\n $71 = $28;\n $72 = HEAP32[$71>>2]|0;\n $73 = HEAP32[$67>>2]|0;\n $74 = $72;\n $75 = $73;\n $76 = (($74) - ($75))|0;\n $77 = (($76|0) / 24)&-1;\n $37 = $77;\n $78 = $37;\n $79 = $36;\n $80 = (($79>>>0) / 2)&-1;\n $81 = ($78>>>0)>=($80>>>0);\n if ($81) {\n  $82 = $36;\n  $33 = $82;\n } else {\n  $83 = $37;\n  $84 = $83<<1;\n  HEAP32[$38>>2] = $84;\n  $25 = $38;\n  $26 = $35;\n  $85 = $25;\n  $86 = $26;\n  ;HEAP8[$24>>0]=HEAP8[$27>>0]|0;\n  $22 = $85;\n  $23 = $86;\n  $87 = $22;\n  $88 = $23;\n  $19 = $24;\n  $20 = $87;\n  $21 = $88;\n  $89 = $20;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = $21;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = ($90>>>0)<($92>>>0);\n  $94 = $23;\n  $95 = $22;\n  $96 = $93 ? $94 : $95;\n  $97 = HEAP32[$96>>2]|0;\n  $33 = $97;\n }\n $98 = $33;\n $18 = $47;\n $99 = $18;\n $100 = ((($99)) + 4|0);\n $101 = HEAP32[$100>>2]|0;\n $102 = HEAP32[$99>>2]|0;\n $103 = $101;\n $104 = $102;\n $105 = (($103) - ($104))|0;\n $106 = (($105|0) / 24)&-1;\n $107 = $45;\n __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEEC2EjjSA_($46,$98,$106,$107);\n $108 = $45;\n $109 = ((($46)) + 8|0);\n $110 = HEAP32[$109>>2]|0;\n $17 = $110;\n $111 = $17;\n $112 = $44;\n $16 = $112;\n $113 = $16;\n $12 = $108;\n $13 = $111;\n $14 = $113;\n $114 = $12;\n $115 = $13;\n $116 = $14;\n $11 = $116;\n $117 = $11;\n ;HEAP8[$10>>0]=HEAP8[$15>>0]|0;\n $7 = $114;\n $8 = $115;\n $9 = $117;\n $118 = $7;\n $119 = $8;\n $120 = $9;\n $6 = $120;\n $121 = $6;\n $3 = $118;\n $4 = $119;\n $5 = $121;\n $122 = $4;\n $123 = $5;\n $2 = $123;\n $124 = $2;\n __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($122,$124);\n $125 = ((($46)) + 8|0);\n $126 = HEAP32[$125>>2]|0;\n $127 = ((($126)) + 24|0);\n HEAP32[$125>>2] = $127;\n __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS7_RS9_EE($47,$46);\n __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEED2Ev($46);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n $6 = ((($5)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = ($7|0)==(0|0);\n if ($8) {\n  $9 = ((($4)) + 16|0);\n  HEAP32[$9>>2] = 0;\n  STACKTOP = sp;return;\n }\n $10 = $3;\n $11 = ((($10)) + 16|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = $3;\n $14 = ($12|0)==($13|0);\n if ($14) {\n  $15 = (__ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($4)|0);\n  $16 = ((($4)) + 16|0);\n  HEAP32[$16>>2] = $15;\n  $17 = $3;\n  $18 = ((($17)) + 16|0);\n  $19 = HEAP32[$18>>2]|0;\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ((($20)) + 12|0);\n  $22 = HEAP32[$21>>2]|0;\n  $23 = ((($4)) + 16|0);\n  $24 = HEAP32[$23>>2]|0;\n  FUNCTION_TABLE_vii[$22 & 255]($19,$24);\n  STACKTOP = sp;return;\n } else {\n  $25 = $3;\n  $26 = ((($25)) + 16|0);\n  $27 = HEAP32[$26>>2]|0;\n  $28 = ((($4)) + 16|0);\n  HEAP32[$28>>2] = $27;\n  $29 = $3;\n  $30 = ((($29)) + 16|0);\n  HEAP32[$30>>2] = 0;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEEC2EjjSA_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(178956970);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = ($68*24)|0;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + (($74*24)|0)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + (($79*24)|0)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS7_RS9_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0;\n var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0;\n var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;\n var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;\n var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;\n var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;\n var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0);\n $15 = sp;\n $20 = sp + 404|0;\n $31 = sp + 292|0;\n $37 = sp + 268|0;\n $49 = sp + 220|0;\n $102 = $0;\n $103 = $1;\n $104 = $102;\n $101 = $104;\n $105 = $101;\n $100 = $105;\n $106 = $100;\n $107 = HEAP32[$106>>2]|0;\n $99 = $107;\n $108 = $99;\n $78 = $105;\n $109 = $78;\n $110 = HEAP32[$109>>2]|0;\n $77 = $110;\n $111 = $77;\n $83 = $105;\n $112 = $83;\n $82 = $112;\n $113 = $82;\n $81 = $113;\n $114 = $81;\n $115 = ((($114)) + 8|0);\n $80 = $115;\n $116 = $80;\n $79 = $116;\n $117 = $79;\n $118 = HEAP32[$117>>2]|0;\n $119 = HEAP32[$113>>2]|0;\n $120 = $118;\n $121 = $119;\n $122 = (($120) - ($121))|0;\n $123 = (($122|0) / 24)&-1;\n $124 = (($111) + (($123*24)|0)|0);\n $85 = $105;\n $125 = $85;\n $126 = HEAP32[$125>>2]|0;\n $84 = $126;\n $127 = $84;\n $86 = $105;\n $128 = $86;\n $129 = ((($128)) + 4|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$128>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 24)&-1;\n $136 = (($127) + (($135*24)|0)|0);\n $88 = $105;\n $137 = $88;\n $138 = HEAP32[$137>>2]|0;\n $87 = $138;\n $139 = $87;\n $93 = $105;\n $140 = $93;\n $92 = $140;\n $141 = $92;\n $91 = $141;\n $142 = $91;\n $143 = ((($142)) + 8|0);\n $90 = $143;\n $144 = $90;\n $89 = $144;\n $145 = $89;\n $146 = HEAP32[$145>>2]|0;\n $147 = HEAP32[$141>>2]|0;\n $148 = $146;\n $149 = $147;\n $150 = (($148) - ($149))|0;\n $151 = (($150|0) / 24)&-1;\n $152 = (($139) + (($151*24)|0)|0);\n $94 = $105;\n $95 = $108;\n $96 = $124;\n $97 = $136;\n $98 = $152;\n $4 = $104;\n $153 = $4;\n $154 = ((($153)) + 8|0);\n $3 = $154;\n $155 = $3;\n $2 = $155;\n $156 = $2;\n $157 = HEAP32[$104>>2]|0;\n $158 = ((($104)) + 4|0);\n $159 = HEAP32[$158>>2]|0;\n $160 = $103;\n $161 = ((($160)) + 4|0);\n $22 = $156;\n $23 = $157;\n $24 = $159;\n $25 = $161;\n while(1) {\n  $162 = $24;\n  $163 = $23;\n  $164 = ($162|0)!=($163|0);\n  if (!($164)) {\n   break;\n  }\n  $165 = $22;\n  $166 = $25;\n  $167 = HEAP32[$166>>2]|0;\n  $168 = ((($167)) + -24|0);\n  $21 = $168;\n  $169 = $21;\n  $170 = $24;\n  $171 = ((($170)) + -24|0);\n  $24 = $171;\n  $6 = $171;\n  $172 = $6;\n  $5 = $172;\n  $173 = $5;\n  $17 = $165;\n  $18 = $169;\n  $19 = $173;\n  $174 = $17;\n  $175 = $18;\n  $176 = $19;\n  $16 = $176;\n  $177 = $16;\n  ;HEAP8[$15>>0]=HEAP8[$20>>0]|0;\n  $12 = $174;\n  $13 = $175;\n  $14 = $177;\n  $178 = $12;\n  $179 = $13;\n  $180 = $14;\n  $11 = $180;\n  $181 = $11;\n  $8 = $178;\n  $9 = $179;\n  $10 = $181;\n  $182 = $9;\n  $183 = $10;\n  $7 = $183;\n  $184 = $7;\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($182,$184);\n  $185 = $25;\n  $186 = HEAP32[$185>>2]|0;\n  $187 = ((($186)) + -24|0);\n  HEAP32[$185>>2] = $187;\n }\n $188 = $103;\n $189 = ((($188)) + 4|0);\n $29 = $104;\n $30 = $189;\n $190 = $29;\n $28 = $190;\n $191 = $28;\n $192 = HEAP32[$191>>2]|0;\n HEAP32[$31>>2] = $192;\n $193 = $30;\n $26 = $193;\n $194 = $26;\n $195 = HEAP32[$194>>2]|0;\n $196 = $29;\n HEAP32[$196>>2] = $195;\n $27 = $31;\n $197 = $27;\n $198 = HEAP32[$197>>2]|0;\n $199 = $30;\n HEAP32[$199>>2] = $198;\n $200 = ((($104)) + 4|0);\n $201 = $103;\n $202 = ((($201)) + 8|0);\n $35 = $200;\n $36 = $202;\n $203 = $35;\n $34 = $203;\n $204 = $34;\n $205 = HEAP32[$204>>2]|0;\n HEAP32[$37>>2] = $205;\n $206 = $36;\n $32 = $206;\n $207 = $32;\n $208 = HEAP32[$207>>2]|0;\n $209 = $35;\n HEAP32[$209>>2] = $208;\n $33 = $37;\n $210 = $33;\n $211 = HEAP32[$210>>2]|0;\n $212 = $36;\n HEAP32[$212>>2] = $211;\n $40 = $104;\n $213 = $40;\n $214 = ((($213)) + 8|0);\n $39 = $214;\n $215 = $39;\n $38 = $215;\n $216 = $38;\n $217 = $103;\n $43 = $217;\n $218 = $43;\n $219 = ((($218)) + 12|0);\n $42 = $219;\n $220 = $42;\n $41 = $220;\n $221 = $41;\n $47 = $216;\n $48 = $221;\n $222 = $47;\n $46 = $222;\n $223 = $46;\n $224 = HEAP32[$223>>2]|0;\n HEAP32[$49>>2] = $224;\n $225 = $48;\n $44 = $225;\n $226 = $44;\n $227 = HEAP32[$226>>2]|0;\n $228 = $47;\n HEAP32[$228>>2] = $227;\n $45 = $49;\n $229 = $45;\n $230 = HEAP32[$229>>2]|0;\n $231 = $48;\n HEAP32[$231>>2] = $230;\n $232 = $103;\n $233 = ((($232)) + 4|0);\n $234 = HEAP32[$233>>2]|0;\n $235 = $103;\n HEAP32[$235>>2] = $234;\n $50 = $104;\n $236 = $50;\n $237 = ((($236)) + 4|0);\n $238 = HEAP32[$237>>2]|0;\n $239 = HEAP32[$236>>2]|0;\n $240 = $238;\n $241 = $239;\n $242 = (($240) - ($241))|0;\n $243 = (($242|0) / 24)&-1;\n $74 = $104;\n $75 = $243;\n $244 = $74;\n $73 = $244;\n $245 = $73;\n $246 = HEAP32[$245>>2]|0;\n $72 = $246;\n $247 = $72;\n $52 = $244;\n $248 = $52;\n $249 = HEAP32[$248>>2]|0;\n $51 = $249;\n $250 = $51;\n $57 = $244;\n $251 = $57;\n $56 = $251;\n $252 = $56;\n $55 = $252;\n $253 = $55;\n $254 = ((($253)) + 8|0);\n $54 = $254;\n $255 = $54;\n $53 = $255;\n $256 = $53;\n $257 = HEAP32[$256>>2]|0;\n $258 = HEAP32[$252>>2]|0;\n $259 = $257;\n $260 = $258;\n $261 = (($259) - ($260))|0;\n $262 = (($261|0) / 24)&-1;\n $263 = (($250) + (($262*24)|0)|0);\n $59 = $244;\n $264 = $59;\n $265 = HEAP32[$264>>2]|0;\n $58 = $265;\n $266 = $58;\n $64 = $244;\n $267 = $64;\n $63 = $267;\n $268 = $63;\n $62 = $268;\n $269 = $62;\n $270 = ((($269)) + 8|0);\n $61 = $270;\n $271 = $61;\n $60 = $271;\n $272 = $60;\n $273 = HEAP32[$272>>2]|0;\n $274 = HEAP32[$268>>2]|0;\n $275 = $273;\n $276 = $274;\n $277 = (($275) - ($276))|0;\n $278 = (($277|0) / 24)&-1;\n $279 = (($266) + (($278*24)|0)|0);\n $66 = $244;\n $280 = $66;\n $281 = HEAP32[$280>>2]|0;\n $65 = $281;\n $282 = $65;\n $283 = $75;\n $284 = (($282) + (($283*24)|0)|0);\n $67 = $244;\n $68 = $247;\n $69 = $263;\n $70 = $279;\n $71 = $284;\n $76 = $104;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -24|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n  $60 = $16;\n  __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($60);\n }\n $61 = HEAP32[$35>>2]|0;\n $62 = ($61|0)!=(0|0);\n if (!($62)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $63 = $14;\n $64 = ((($63)) + 12|0);\n $13 = $64;\n $65 = $13;\n $66 = ((($65)) + 4|0);\n $12 = $66;\n $67 = $12;\n $68 = HEAP32[$67>>2]|0;\n $69 = HEAP32[$35>>2]|0;\n $11 = $35;\n $70 = $11;\n $10 = $70;\n $71 = $10;\n $72 = ((($71)) + 12|0);\n $9 = $72;\n $73 = $9;\n $8 = $73;\n $74 = $8;\n $75 = HEAP32[$74>>2]|0;\n $76 = HEAP32[$70>>2]|0;\n $77 = $75;\n $78 = $76;\n $79 = (($77) - ($78))|0;\n $80 = (($79|0) / 24)&-1;\n $5 = $68;\n $6 = $69;\n $7 = $80;\n $81 = $5;\n $82 = $6;\n $83 = $7;\n $2 = $81;\n $3 = $82;\n $4 = $83;\n $84 = $3;\n $1 = $84;\n $85 = $1;\n __ZdlPv($85);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 178956970;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $2;\n $1 = $3;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;\n var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;\n var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;\n var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 608|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(608|0);\n $7 = sp + 128|0;\n $8 = sp + 120|0;\n $9 = sp + 112|0;\n $10 = sp + 104|0;\n $13 = sp + 594|0;\n $14 = sp + 593|0;\n $15 = sp + 592|0;\n $16 = sp + 591|0;\n $18 = sp + 540|0;\n $27 = sp + 96|0;\n $28 = sp + 88|0;\n $29 = sp + 80|0;\n $30 = sp + 72|0;\n $34 = sp + 590|0;\n $35 = sp + 589|0;\n $36 = sp + 588|0;\n $37 = sp + 587|0;\n $39 = sp + 488|0;\n $45 = sp + 64|0;\n $46 = sp + 56|0;\n $47 = sp + 48|0;\n $53 = sp + 40|0;\n $54 = sp + 32|0;\n $55 = sp + 24|0;\n $58 = sp + 586|0;\n $59 = sp + 436|0;\n $60 = sp + 585|0;\n $61 = sp + 584|0;\n $62 = sp + 432|0;\n $63 = sp + 583|0;\n $64 = sp + 16|0;\n $65 = sp + 8|0;\n $66 = sp;\n $71 = sp + 582|0;\n $72 = sp + 412|0;\n $73 = sp + 408|0;\n $100 = sp + 300|0;\n $137 = sp + 581|0;\n $138 = sp + 144|0;\n $139 = sp + 136|0;\n $140 = sp + 580|0;\n $136 = $0;\n $141 = $136;\n $142 = ((($141)) + 4|0);\n $135 = $142;\n $143 = $135;\n $134 = $143;\n $144 = $134;\n $132 = $137;\n $133 = $144;\n $110 = $137;\n $111 = 1;\n $112 = 0;\n $145 = $110;\n $146 = $111;\n $109 = $145;\n $147 = ($146>>>0)>(536870911);\n if ($147) {\n  $107 = 4287;\n  $148 = (___cxa_allocate_exception(8)|0);\n  $149 = $107;\n  $105 = $148;\n  $106 = $149;\n  $150 = $105;\n  $151 = $106;\n  __ZNSt11logic_errorC2EPKc($150,$151);\n  HEAP32[$150>>2] = (3660);\n  ___cxa_throw(($148|0),(1384|0),(220|0));\n  // unreachable;\n }\n $152 = $111;\n $153 = $152<<3;\n $108 = $153;\n $154 = $108;\n $155 = (__Znwj($154)|0);\n $102 = $139;\n $103 = $137;\n $104 = 1;\n $156 = $102;\n $157 = $103;\n HEAP32[$156>>2] = $157;\n $158 = ((($156)) + 4|0);\n $159 = $104;\n HEAP32[$158>>2] = $159;\n $99 = $138;\n HEAP32[$100>>2] = $155;\n $101 = $139;\n $160 = $99;\n $161 = $101;\n $98 = $161;\n $162 = $98;\n $95 = $160;\n $96 = $100;\n $97 = $162;\n $163 = $95;\n $164 = $96;\n $94 = $164;\n $165 = $94;\n $88 = $163;\n $89 = $165;\n $166 = $88;\n $167 = $89;\n $87 = $167;\n $168 = $87;\n $169 = HEAP32[$168>>2]|0;\n HEAP32[$166>>2] = $169;\n $170 = ((($163)) + 4|0);\n $171 = $97;\n $90 = $171;\n $172 = $90;\n $92 = $170;\n $93 = $172;\n $173 = $92;\n $174 = $93;\n $91 = $174;\n $175 = $91;\n ;HEAP32[$173>>2]=HEAP32[$175>>2]|0;HEAP32[$173+4>>2]=HEAP32[$175+4>>2]|0;\n $86 = $138;\n $176 = $86;\n $85 = $176;\n $177 = $85;\n $84 = $177;\n $178 = $84;\n $179 = HEAP32[$178>>2]|0;\n $180 = ((($141)) + 4|0);\n $83 = $180;\n $181 = $83;\n $82 = $181;\n $182 = $82;\n $80 = $140;\n $81 = $137;\n $68 = $179;\n $69 = $182;\n $70 = $140;\n $183 = $68;\n $67 = $183;\n $184 = $67;\n HEAP32[$184>>2] = (1704);\n HEAP32[$183>>2] = (1660);\n $185 = ((($183)) + 4|0);\n $186 = $69;\n $19 = $186;\n $187 = $19;\n $17 = $187;\n $188 = $17;\n $11 = $18;\n $12 = $188;\n $189 = $11;\n $190 = $12;\n ;HEAP8[$7>>0]=HEAP8[$16>>0]|0;\n ;HEAP8[$8>>0]=HEAP8[$15>>0]|0;\n ;HEAP8[$9>>0]=HEAP8[$14>>0]|0;\n ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n $5 = $189;\n $6 = $190;\n $191 = $5;\n $192 = $6;\n $4 = $192;\n $193 = $4;\n $2 = $191;\n $3 = $193;\n $194 = $2;\n $195 = $3;\n $1 = $195;\n $196 = $1;\n HEAP32[$194>>2] = $196;\n $197 = HEAP32[$18>>2]|0;\n HEAP32[$72>>2] = $197;\n $198 = $70;\n $20 = $198;\n $199 = $20;\n $40 = $199;\n $200 = $40;\n $38 = $200;\n $201 = $38;\n $32 = $39;\n $33 = $201;\n $202 = $32;\n $203 = $33;\n $31 = $203;\n $204 = $31;\n ;HEAP8[$27>>0]=HEAP8[$37>>0]|0;\n ;HEAP8[$28>>0]=HEAP8[$36>>0]|0;\n ;HEAP8[$29>>0]=HEAP8[$35>>0]|0;\n ;HEAP8[$30>>0]=HEAP8[$34>>0]|0;\n $25 = $202;\n $26 = $204;\n $205 = $25;\n $206 = $26;\n $24 = $206;\n $207 = $24;\n $22 = $205;\n $23 = $207;\n $208 = $22;\n $209 = $23;\n $21 = $209;\n $210 = $21;\n HEAP32[$208>>2] = $210;\n $211 = HEAP32[$39>>2]|0;\n HEAP32[$73>>2] = $211;\n ;HEAP8[$64>>0]=HEAP8[$73>>0]|0;HEAP8[$64+1>>0]=HEAP8[$73+1>>0]|0;HEAP8[$64+2>>0]=HEAP8[$73+2>>0]|0;HEAP8[$64+3>>0]=HEAP8[$73+3>>0]|0;\n ;HEAP8[$65>>0]=HEAP8[$72>>0]|0;HEAP8[$65+1>>0]=HEAP8[$72+1>>0]|0;HEAP8[$65+2>>0]=HEAP8[$72+2>>0]|0;HEAP8[$65+3>>0]=HEAP8[$72+3>>0]|0;\n ;HEAP8[$66>>0]=HEAP8[$71>>0]|0;\n $57 = $185;\n $212 = $57;\n $56 = $65;\n $213 = $56;\n ;HEAP32[$59>>2]=HEAP32[$213>>2]|0;\n ;HEAP8[$45>>0]=HEAP8[$60>>0]|0;\n ;HEAP8[$46>>0]=HEAP8[$59>>0]|0;HEAP8[$46+1>>0]=HEAP8[$59+1>>0]|0;HEAP8[$46+2>>0]=HEAP8[$59+2>>0]|0;HEAP8[$46+3>>0]=HEAP8[$59+3>>0]|0;\n ;HEAP8[$47>>0]=HEAP8[$58>>0]|0;\n $44 = $212;\n $43 = $46;\n $214 = $43;\n $42 = $214;\n $215 = $42;\n $216 = HEAP32[$215>>2]|0;\n $41 = $216;\n $48 = $64;\n $217 = $48;\n ;HEAP32[$62>>2]=HEAP32[$217>>2]|0;\n ;HEAP8[$53>>0]=HEAP8[$63>>0]|0;\n ;HEAP8[$54>>0]=HEAP8[$62>>0]|0;HEAP8[$54+1>>0]=HEAP8[$62+1>>0]|0;HEAP8[$54+2>>0]=HEAP8[$62+2>>0]|0;HEAP8[$54+3>>0]=HEAP8[$62+3>>0]|0;\n ;HEAP8[$55>>0]=HEAP8[$61>>0]|0;\n $52 = $212;\n $51 = $54;\n $218 = $51;\n $50 = $218;\n $219 = $50;\n $220 = HEAP32[$219>>2]|0;\n $49 = $220;\n $78 = $138;\n $221 = $78;\n $77 = $221;\n $222 = $77;\n $76 = $222;\n $223 = $76;\n $224 = HEAP32[$223>>2]|0;\n $79 = $224;\n $75 = $221;\n $225 = $75;\n $74 = $225;\n $226 = $74;\n HEAP32[$226>>2] = 0;\n $227 = $79;\n $131 = $138;\n $228 = $131;\n $128 = $228;\n $129 = 0;\n $229 = $128;\n $127 = $229;\n $230 = $127;\n $126 = $230;\n $231 = $126;\n $232 = HEAP32[$231>>2]|0;\n $130 = $232;\n $233 = $129;\n $116 = $229;\n $234 = $116;\n $115 = $234;\n $235 = $115;\n HEAP32[$235>>2] = $233;\n $236 = $130;\n $237 = ($236|0)!=(0|0);\n if (!($237)) {\n  STACKTOP = sp;return ($227|0);\n }\n $114 = $229;\n $238 = $114;\n $239 = ((($238)) + 4|0);\n $113 = $239;\n $240 = $113;\n $241 = $130;\n $124 = $240;\n $125 = $241;\n $242 = $124;\n $243 = HEAP32[$242>>2]|0;\n $244 = $125;\n $245 = ((($242)) + 4|0);\n $246 = HEAP32[$245>>2]|0;\n $121 = $243;\n $122 = $244;\n $123 = $246;\n $247 = $121;\n $248 = $122;\n $249 = $123;\n $118 = $247;\n $119 = $248;\n $120 = $249;\n $250 = $119;\n $117 = $250;\n $251 = $117;\n __ZdlPv($251);\n STACKTOP = sp;return ($227|0);\n}\nfunction __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEPNS0_6__baseISE_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;\n var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;\n var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;\n var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;\n var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;\n var $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0);\n $10 = sp + 128|0;\n $11 = sp + 120|0;\n $12 = sp + 112|0;\n $13 = sp + 104|0;\n $16 = sp + 332|0;\n $17 = sp + 331|0;\n $18 = sp + 330|0;\n $19 = sp + 329|0;\n $21 = sp + 272|0;\n $29 = sp + 96|0;\n $30 = sp + 88|0;\n $31 = sp + 80|0;\n $32 = sp + 72|0;\n $35 = sp + 328|0;\n $36 = sp + 327|0;\n $37 = sp + 326|0;\n $38 = sp + 325|0;\n $40 = sp + 228|0;\n $46 = sp + 64|0;\n $47 = sp + 56|0;\n $48 = sp + 48|0;\n $54 = sp + 40|0;\n $55 = sp + 32|0;\n $56 = sp + 24|0;\n $59 = sp + 324|0;\n $60 = sp + 176|0;\n $61 = sp + 323|0;\n $62 = sp + 322|0;\n $63 = sp + 172|0;\n $64 = sp + 321|0;\n $65 = sp + 16|0;\n $66 = sp + 8|0;\n $67 = sp;\n $72 = sp + 320|0;\n $73 = sp + 152|0;\n $74 = sp + 148|0;\n $77 = $0;\n $78 = $1;\n $79 = $77;\n $80 = $78;\n $81 = ((($79)) + 4|0);\n $76 = $81;\n $82 = $76;\n $75 = $82;\n $83 = $75;\n $84 = ((($79)) + 4|0);\n $3 = $84;\n $85 = $3;\n $2 = $85;\n $86 = $2;\n $69 = $80;\n $70 = $83;\n $71 = $86;\n $87 = $69;\n $68 = $87;\n $88 = $68;\n HEAP32[$88>>2] = (1704);\n HEAP32[$87>>2] = (1660);\n $89 = ((($87)) + 4|0);\n $90 = $70;\n $22 = $90;\n $91 = $22;\n $20 = $91;\n $92 = $20;\n $14 = $21;\n $15 = $92;\n $93 = $14;\n $94 = $15;\n ;HEAP8[$10>>0]=HEAP8[$19>>0]|0;\n ;HEAP8[$11>>0]=HEAP8[$18>>0]|0;\n ;HEAP8[$12>>0]=HEAP8[$17>>0]|0;\n ;HEAP8[$13>>0]=HEAP8[$16>>0]|0;\n $8 = $93;\n $9 = $94;\n $95 = $8;\n $96 = $9;\n $7 = $96;\n $97 = $7;\n $5 = $95;\n $6 = $97;\n $98 = $5;\n $99 = $6;\n $4 = $99;\n $100 = $4;\n HEAP32[$98>>2] = $100;\n $101 = HEAP32[$21>>2]|0;\n HEAP32[$73>>2] = $101;\n $102 = $71;\n $41 = $102;\n $103 = $41;\n $39 = $103;\n $104 = $39;\n $33 = $40;\n $34 = $104;\n $105 = $33;\n $106 = $34;\n ;HEAP8[$29>>0]=HEAP8[$38>>0]|0;\n ;HEAP8[$30>>0]=HEAP8[$37>>0]|0;\n ;HEAP8[$31>>0]=HEAP8[$36>>0]|0;\n ;HEAP8[$32>>0]=HEAP8[$35>>0]|0;\n $27 = $105;\n $28 = $106;\n $107 = $27;\n $108 = $28;\n $26 = $108;\n $109 = $26;\n $24 = $107;\n $25 = $109;\n $110 = $24;\n $111 = $25;\n $23 = $111;\n $112 = $23;\n HEAP32[$110>>2] = $112;\n $113 = HEAP32[$40>>2]|0;\n HEAP32[$74>>2] = $113;\n ;HEAP8[$65>>0]=HEAP8[$74>>0]|0;HEAP8[$65+1>>0]=HEAP8[$74+1>>0]|0;HEAP8[$65+2>>0]=HEAP8[$74+2>>0]|0;HEAP8[$65+3>>0]=HEAP8[$74+3>>0]|0;\n ;HEAP8[$66>>0]=HEAP8[$73>>0]|0;HEAP8[$66+1>>0]=HEAP8[$73+1>>0]|0;HEAP8[$66+2>>0]=HEAP8[$73+2>>0]|0;HEAP8[$66+3>>0]=HEAP8[$73+3>>0]|0;\n ;HEAP8[$67>>0]=HEAP8[$72>>0]|0;\n $58 = $89;\n $114 = $58;\n $57 = $66;\n $115 = $57;\n ;HEAP32[$60>>2]=HEAP32[$115>>2]|0;\n ;HEAP8[$46>>0]=HEAP8[$61>>0]|0;\n ;HEAP8[$47>>0]=HEAP8[$60>>0]|0;HEAP8[$47+1>>0]=HEAP8[$60+1>>0]|0;HEAP8[$47+2>>0]=HEAP8[$60+2>>0]|0;HEAP8[$47+3>>0]=HEAP8[$60+3>>0]|0;\n ;HEAP8[$48>>0]=HEAP8[$59>>0]|0;\n $45 = $114;\n $44 = $47;\n $116 = $44;\n $43 = $116;\n $117 = $43;\n $118 = HEAP32[$117>>2]|0;\n $42 = $118;\n $49 = $65;\n $119 = $49;\n ;HEAP32[$63>>2]=HEAP32[$119>>2]|0;\n ;HEAP8[$54>>0]=HEAP8[$64>>0]|0;\n ;HEAP8[$55>>0]=HEAP8[$63>>0]|0;HEAP8[$55+1>>0]=HEAP8[$63+1>>0]|0;HEAP8[$55+2>>0]=HEAP8[$63+2>>0]|0;HEAP8[$55+3>>0]=HEAP8[$63+3>>0]|0;\n ;HEAP8[$56>>0]=HEAP8[$62>>0]|0;\n $53 = $114;\n $52 = $55;\n $120 = $52;\n $51 = $120;\n $121 = $51;\n $122 = HEAP32[$121>>2]|0;\n $50 = $122;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7destroyEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE18destroy_deallocateEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 36|0;\n $9 = $0;\n $11 = $9;\n $12 = ((($11)) + 4|0);\n $8 = $12;\n $13 = $8;\n $7 = $13;\n $14 = $7;\n $1 = $10;\n $2 = $14;\n $4 = $10;\n $5 = $11;\n $6 = 1;\n $15 = $5;\n $3 = $15;\n $16 = $3;\n __ZdlPv($16);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EEclESA_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 4|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $11 = $6;\n $2 = $11;\n $12 = $2;\n __ZNSt3__228__invoke_void_return_wrapperIvE6__callIJRZN6laszip2io6reader10basic_fileINS3_7streams13memory_streamEE11_validatorsEvEUlRNS4_6headerEE_SB_EEEvDpOT_($10,$12);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE6targetERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $7 = $0;\n $8 = $1;\n $9 = $7;\n $10 = $8;\n $4 = $10;\n $5 = 128;\n $11 = $4;\n $12 = ((($11)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $14 = $5;\n $15 = ((($14)) + 4|0);\n $16 = HEAP32[$15>>2]|0;\n $17 = ($13|0)==($16|0);\n if ($17) {\n  $18 = ((($9)) + 4|0);\n  $3 = $18;\n  $19 = $3;\n  $2 = $19;\n  $20 = $2;\n  $6 = $20;\n  $21 = $6;\n  STACKTOP = sp;return ($21|0);\n } else {\n  $6 = 0;\n  $21 = $6;\n  STACKTOP = sp;return ($21|0);\n }\n return (0)|0;\n}\nfunction __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE11target_typeEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return (128|0);\n}\nfunction __ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n _llvm_trap();\n // unreachable;\n}\nfunction __ZNSt3__228__invoke_void_return_wrapperIvE6__callIJRZN6laszip2io6reader10basic_fileINS3_7streams13memory_streamEE11_validatorsEvEUlRNS4_6headerEE_SB_EEEvDpOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $8 = $0;\n $9 = $1;\n $10 = $8;\n $7 = $10;\n $11 = $7;\n $12 = $9;\n $2 = $12;\n $13 = $2;\n $5 = $11;\n $6 = $13;\n $14 = $5;\n $4 = $14;\n $15 = $4;\n $16 = $6;\n $3 = $16;\n $17 = $3;\n __ZZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEvENKUlRNS0_6headerEE_clES7_($15,$17);\n STACKTOP = sp;return;\n}\nfunction __ZZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEvENKUlRNS0_6headerEE_clES7_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $6 = $3;\n $7 = ((($6)) + 104|0);\n $8 = HEAP8[$7>>0]|0;\n $9 = $8&255;\n $10 = $9 >> 7;\n $11 = $10 & 1;\n $4 = $11;\n $12 = $3;\n $13 = ((($12)) + 104|0);\n $14 = HEAP8[$13>>0]|0;\n $15 = $14&255;\n $16 = $15 >> 6;\n $17 = $16 & 1;\n $5 = $17;\n $18 = $4;\n $19 = ($18|0)==(1);\n $20 = $5;\n $21 = ($20|0)==(1);\n $or$cond = $19 & $21;\n if ($or$cond) {\n  $22 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip21old_style_compressionC2Ev($22);\n  ___cxa_throw(($22|0),(96|0),(26|0));\n  // unreachable;\n }\n $23 = $4;\n $24 = $5;\n $25 = $23 ^ $24;\n $26 = ($25|0)==(0);\n if ($26) {\n  $27 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip14not_compressedC2Ev($27);\n  ___cxa_throw(($27|0),(112|0),(28|0));\n  // unreachable;\n } else {\n  $28 = $3;\n  $29 = ((($28)) + 104|0);\n  $30 = HEAP8[$29>>0]|0;\n  $31 = $30&255;\n  $32 = $31 & 63;\n  $33 = $32&255;\n  HEAP8[$29>>0] = $33;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip21old_style_compressionC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4640);\n HEAP32[$2>>2] = (1748);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip21old_style_compressionD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip14not_compressedC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4708);\n HEAP32[$2>>2] = (1768);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip14not_compressedD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip21old_style_compressionD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip21old_style_compressionD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip14not_compressedD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip14not_compressedD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__217bad_function_callC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $2;\n $1 = $3;\n $4 = $1;\n HEAP32[$4>>2] = (3600);\n HEAP32[$3>>2] = (3448);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7streams13memory_stream4goodEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $3 = $1;\n $4 = ((($3)) + 12|0);\n $5 = HEAP8[$4>>0]|0;\n $6 = $5&1;\n $7 = $6&1;\n $2 = $7;\n $8 = ((($3)) + 12|0);\n HEAP8[$8>>0] = 0;\n $9 = $2;\n $10 = $9&1;\n $11 = $10 ^ 1;\n STACKTOP = sp;return ($11|0);\n}\nfunction __ZN6laszip7streams13memory_stream3eofEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 13|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE15_parseLASZIPVLREPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 247|0);\n $6 = $3;\n __ZN6laszip2io7laz_vlr4fillEPKc($5,$6);\n $7 = ((($4)) + 247|0);\n $8 = HEAPU8[$7>>0]|(HEAPU8[$7+1>>0]<<8);\n $9 = $8&65535;\n $10 = ($9|0)!=(2);\n if ($10) {\n  $11 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip25laszip_format_unsupportedC2Ev($11);\n  ___cxa_throw(($11|0),(152|0),(30|0));\n  // unreachable;\n } else {\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7streams13memory_stream5seekgExNSt3__28ios_base7seekdirE($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = sp + 8|0;\n $7 = sp;\n $4 = $0;\n $8 = $5;\n $9 = $8;\n HEAP32[$9>>2] = $1;\n $10 = (($8) + 4)|0;\n $11 = $10;\n HEAP32[$11>>2] = $2;\n $6 = $3;\n $12 = $4;\n $13 = $7;\n $14 = $13;\n HEAP32[$14>>2] = 0;\n $15 = (($13) + 4)|0;\n $16 = $15;\n HEAP32[$16>>2] = 0;\n $17 = $6;\n switch ($17|0) {\n case 0:  {\n  $18 = $5;\n  $19 = $18;\n  $20 = HEAP32[$19>>2]|0;\n  $21 = (($18) + 4)|0;\n  $22 = $21;\n  $23 = HEAP32[$22>>2]|0;\n  $24 = $7;\n  $25 = $24;\n  HEAP32[$25>>2] = $20;\n  $26 = (($24) + 4)|0;\n  $27 = $26;\n  HEAP32[$27>>2] = $23;\n  break;\n }\n case 2:  {\n  $28 = ((($12)) + 4|0);\n  $29 = HEAP32[$28>>2]|0;\n  $30 = ($29|0)<(0);\n  $31 = $30 << 31 >> 31;\n  $32 = $5;\n  $33 = $32;\n  $34 = HEAP32[$33>>2]|0;\n  $35 = (($32) + 4)|0;\n  $36 = $35;\n  $37 = HEAP32[$36>>2]|0;\n  $38 = (_i64Add(($29|0),($31|0),($34|0),($37|0))|0);\n  $39 = tempRet0;\n  $40 = (_i64Subtract(($38|0),($39|0),1,0)|0);\n  $41 = tempRet0;\n  $42 = $7;\n  $43 = $42;\n  HEAP32[$43>>2] = $40;\n  $44 = (($42) + 4)|0;\n  $45 = $44;\n  HEAP32[$45>>2] = $41;\n  break;\n }\n case 1:  {\n  $46 = ((($12)) + 8|0);\n  $47 = HEAP32[$46>>2]|0;\n  $48 = ($47|0)<(0);\n  $49 = $48 << 31 >> 31;\n  $50 = $5;\n  $51 = $50;\n  $52 = HEAP32[$51>>2]|0;\n  $53 = (($50) + 4)|0;\n  $54 = $53;\n  $55 = HEAP32[$54>>2]|0;\n  $56 = (_i64Add(($47|0),($49|0),($52|0),($55|0))|0);\n  $57 = tempRet0;\n  $58 = $7;\n  $59 = $58;\n  HEAP32[$59>>2] = $56;\n  $60 = (($58) + 4)|0;\n  $61 = $60;\n  HEAP32[$61>>2] = $57;\n  break;\n }\n default: {\n }\n }\n $62 = $7;\n $63 = $62;\n $64 = HEAP32[$63>>2]|0;\n $65 = (($62) + 4)|0;\n $66 = $65;\n $67 = HEAP32[$66>>2]|0;\n $68 = ((($12)) + 4|0);\n $69 = HEAP32[$68>>2]|0;\n $70 = ($69|0)<(0);\n $71 = $70 << 31 >> 31;\n $72 = ($67|0)>($71|0);\n $73 = ($64>>>0)>=($69>>>0);\n $74 = ($67|0)==($71|0);\n $75 = $74 & $73;\n $76 = $72 | $75;\n $77 = $7;\n $78 = $77;\n $79 = HEAP32[$78>>2]|0;\n $80 = (($77) + 4)|0;\n $81 = $80;\n $82 = HEAP32[$81>>2]|0;\n $83 = ($82|0)<(0);\n $or$cond = $76 | $83;\n $84 = ((($12)) + 12|0);\n if ($or$cond) {\n  HEAP8[$84>>0] = 1;\n  STACKTOP = sp;return;\n } else {\n  HEAP8[$84>>0] = 0;\n  $85 = $7;\n  $86 = $85;\n  $87 = HEAP32[$86>>2]|0;\n  $88 = (($85) + 4)|0;\n  $89 = $88;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = ((($12)) + 8|0);\n  HEAP32[$91>>2] = $87;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip13no_laszip_vlrC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4974);\n HEAP32[$2>>2] = (1808);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13no_laszip_vlrD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io7laz_vlr9to_schemaERKS1_i($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $5 = sp + 40|0;\n $8 = sp + 12|0;\n $9 = sp;\n $3 = $1;\n $4 = $2;\n $$expand_i1_val = 0;\n HEAP8[$5>>0] = $$expand_i1_val;\n __ZN6laszip7factory13record_schemaC2Ev($0);\n $6 = 0;\n while(1) {\n  $10 = $6;\n  $11 = $3;\n  $12 = ((($11)) + 32|0);\n  $13 = HEAPU8[$12>>0]|(HEAPU8[$12+1>>0]<<8);\n  $14 = $13&65535;\n  $15 = ($10|0)<($14|0);\n  if (!($15)) {\n   break;\n  }\n  $16 = $3;\n  $17 = ((($16)) + 34|0);\n  $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24);\n  $19 = $6;\n  $20 = (($18) + (($19*6)|0)|0);\n  $7 = $20;\n  $21 = $7;\n  $22 = HEAPU8[$21>>0]|(HEAPU8[$21+1>>0]<<8);\n  $23 = $22&65535;\n  $24 = $7;\n  $25 = ((($24)) + 2|0);\n  $26 = HEAPU8[$25>>0]|(HEAPU8[$25+1>>0]<<8);\n  $27 = $26&65535;\n  $28 = $7;\n  $29 = ((($28)) + 4|0);\n  $30 = HEAPU8[$29>>0]|(HEAPU8[$29+1>>0]<<8);\n  $31 = $30&65535;\n  __ZN6laszip7factory11record_itemC2Eiii($8,$23,$27,$31);\n  __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$8);\n  $32 = $7;\n  $33 = ((($32)) + 2|0);\n  $34 = HEAPU8[$33>>0]|(HEAPU8[$33+1>>0]<<8);\n  $35 = $34&65535;\n  $36 = $4;\n  $37 = (($36) - ($35))|0;\n  $4 = $37;\n  $38 = $6;\n  $39 = (($38) + 1)|0;\n  $6 = $39;\n }\n $40 = $4;\n $41 = ($40|0)<(0);\n if ($41) {\n  $42 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip25laszip_format_unsupportedC2Ev($42);\n  ___cxa_throw(($42|0),(152|0),(30|0));\n  // unreachable;\n }\n $43 = $4;\n $44 = ($43|0)!=(0);\n if ($44) {\n  $45 = $4;\n  __ZN6laszip7factory11record_itemC2Eiii($9,0,$45,2);\n  __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$9);\n }\n $$expand_i1_val2 = 1;\n HEAP8[$5>>0] = $$expand_i1_val2;\n $$pre_trunc = HEAP8[$5>>0]|0;\n $46 = $$pre_trunc&1;\n if ($46) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip7factory13record_schemaD2Ev($0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory13record_schemaaSEOS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $$byval_copy = sp + 17|0;\n $4 = sp + 16|0;\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = $6;\n $2 = $7;\n $3 = $8;\n $9 = $2;\n $10 = $3;\n ;HEAP8[$$byval_copy>>0]=HEAP8[$4>>0]|0;\n __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE13__move_assignERS6_NS_17integral_constantIbLb1EEE($9,$10,$$byval_copy);\n STACKTOP = sp;return ($7|0);\n}\nfunction __ZN6laszip2io7laz_vlr4fillEPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$arith = 0, $$overflow = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0;\n var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0;\n var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0;\n var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0;\n var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0;\n var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0;\n var $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0;\n var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0;\n var $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0;\n var $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0;\n var $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0;\n var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;\n var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0;\n var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 464|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(464|0);\n $112 = $0;\n $113 = $1;\n $116 = $112;\n $117 = $113;\n $118 = $113;\n $119 = ((($118)) + 2|0);\n $109 = $117;\n $110 = $119;\n $111 = $116;\n $120 = $109;\n $108 = $120;\n $121 = $108;\n $122 = $110;\n $102 = $122;\n $123 = $102;\n $124 = $111;\n $103 = $124;\n $125 = $103;\n $104 = $121;\n $105 = $123;\n $106 = $125;\n $126 = $105;\n $127 = $104;\n $128 = $126;\n $129 = $127;\n $130 = (($128) - ($129))|0;\n $107 = $130;\n $131 = $107;\n $132 = ($131>>>0)>(0);\n if ($132) {\n  $133 = $106;\n  $134 = $104;\n  $135 = $107;\n  _memmove(($133|0),($134|0),($135|0))|0;\n }\n $136 = HEAPU8[$116>>0]|(HEAPU8[$116+1>>0]<<8);\n HEAP8[$116>>0]=$136&255;HEAP8[$116+1>>0]=$136>>8;\n $137 = $113;\n $138 = ((($137)) + 2|0);\n $113 = $138;\n $139 = $113;\n $140 = $113;\n $141 = ((($140)) + 2|0);\n $142 = ((($116)) + 2|0);\n $9 = $139;\n $10 = $141;\n $11 = $142;\n $143 = $9;\n $8 = $143;\n $144 = $8;\n $145 = $10;\n $2 = $145;\n $146 = $2;\n $147 = $11;\n $3 = $147;\n $148 = $3;\n $4 = $144;\n $5 = $146;\n $6 = $148;\n $149 = $5;\n $150 = $4;\n $151 = $149;\n $152 = $150;\n $153 = (($151) - ($152))|0;\n $7 = $153;\n $154 = $7;\n $155 = ($154>>>0)>(0);\n if ($155) {\n  $156 = $6;\n  $157 = $4;\n  $158 = $7;\n  _memmove(($156|0),($157|0),($158|0))|0;\n }\n $159 = ((($116)) + 2|0);\n $160 = HEAPU8[$159>>0]|(HEAPU8[$159+1>>0]<<8);\n $161 = ((($116)) + 2|0);\n HEAP8[$161>>0]=$160&255;HEAP8[$161+1>>0]=$160>>8;\n $162 = $113;\n $163 = ((($162)) + 2|0);\n $113 = $163;\n $164 = $113;\n $165 = ((($164)) + 1|0);\n $113 = $165;\n $166 = HEAP8[$164>>0]|0;\n $167 = ((($116)) + 4|0);\n HEAP8[$167>>0] = $166;\n $168 = $113;\n $169 = ((($168)) + 1|0);\n $113 = $169;\n $170 = HEAP8[$168>>0]|0;\n $171 = ((($116)) + 4|0);\n $172 = ((($171)) + 1|0);\n HEAP8[$172>>0] = $170;\n $173 = $113;\n $174 = $113;\n $175 = ((($174)) + 2|0);\n $176 = ((($116)) + 4|0);\n $177 = ((($176)) + 2|0);\n $19 = $173;\n $20 = $175;\n $21 = $177;\n $178 = $19;\n $18 = $178;\n $179 = $18;\n $180 = $20;\n $12 = $180;\n $181 = $12;\n $182 = $21;\n $13 = $182;\n $183 = $13;\n $14 = $179;\n $15 = $181;\n $16 = $183;\n $184 = $15;\n $185 = $14;\n $186 = $184;\n $187 = $185;\n $188 = (($186) - ($187))|0;\n $17 = $188;\n $189 = $17;\n $190 = ($189>>>0)>(0);\n if ($190) {\n  $191 = $16;\n  $192 = $14;\n  $193 = $17;\n  _memmove(($191|0),($192|0),($193|0))|0;\n }\n $194 = ((($116)) + 4|0);\n $195 = ((($194)) + 2|0);\n $196 = HEAPU8[$195>>0]|(HEAPU8[$195+1>>0]<<8);\n $197 = ((($116)) + 4|0);\n $198 = ((($197)) + 2|0);\n HEAP8[$198>>0]=$196&255;HEAP8[$198+1>>0]=$196>>8;\n $199 = $113;\n $200 = ((($199)) + 2|0);\n $113 = $200;\n $201 = $113;\n $202 = $113;\n $203 = ((($202)) + 4|0);\n $204 = ((($116)) + 8|0);\n $29 = $201;\n $30 = $203;\n $31 = $204;\n $205 = $29;\n $28 = $205;\n $206 = $28;\n $207 = $30;\n $22 = $207;\n $208 = $22;\n $209 = $31;\n $23 = $209;\n $210 = $23;\n $24 = $206;\n $25 = $208;\n $26 = $210;\n $211 = $25;\n $212 = $24;\n $213 = $211;\n $214 = $212;\n $215 = (($213) - ($214))|0;\n $27 = $215;\n $216 = $27;\n $217 = ($216>>>0)>(0);\n if ($217) {\n  $218 = $26;\n  $219 = $24;\n  $220 = $27;\n  _memmove(($218|0),($219|0),($220|0))|0;\n }\n $221 = ((($116)) + 8|0);\n $222 = HEAPU8[$221>>0]|(HEAPU8[$221+1>>0]<<8)|(HEAPU8[$221+2>>0]<<16)|(HEAPU8[$221+3>>0]<<24);\n $223 = ((($116)) + 8|0);\n HEAP8[$223>>0]=$222&255;HEAP8[$223+1>>0]=($222>>8)&255;HEAP8[$223+2>>0]=($222>>16)&255;HEAP8[$223+3>>0]=$222>>24;\n $224 = $113;\n $225 = ((($224)) + 4|0);\n $113 = $225;\n $226 = $113;\n $227 = $113;\n $228 = ((($227)) + 4|0);\n $229 = ((($116)) + 12|0);\n $39 = $226;\n $40 = $228;\n $41 = $229;\n $230 = $39;\n $38 = $230;\n $231 = $38;\n $232 = $40;\n $32 = $232;\n $233 = $32;\n $234 = $41;\n $33 = $234;\n $235 = $33;\n $34 = $231;\n $35 = $233;\n $36 = $235;\n $236 = $35;\n $237 = $34;\n $238 = $236;\n $239 = $237;\n $240 = (($238) - ($239))|0;\n $37 = $240;\n $241 = $37;\n $242 = ($241>>>0)>(0);\n if ($242) {\n  $243 = $36;\n  $244 = $34;\n  $245 = $37;\n  _memmove(($243|0),($244|0),($245|0))|0;\n }\n $246 = ((($116)) + 12|0);\n $247 = HEAPU8[$246>>0]|(HEAPU8[$246+1>>0]<<8)|(HEAPU8[$246+2>>0]<<16)|(HEAPU8[$246+3>>0]<<24);\n $248 = ((($116)) + 12|0);\n HEAP8[$248>>0]=$247&255;HEAP8[$248+1>>0]=($247>>8)&255;HEAP8[$248+2>>0]=($247>>16)&255;HEAP8[$248+3>>0]=$247>>24;\n $249 = $113;\n $250 = ((($249)) + 4|0);\n $113 = $250;\n $251 = $113;\n $252 = $113;\n $253 = ((($252)) + 8|0);\n $254 = ((($116)) + 16|0);\n $49 = $251;\n $50 = $253;\n $51 = $254;\n $255 = $49;\n $48 = $255;\n $256 = $48;\n $257 = $50;\n $42 = $257;\n $258 = $42;\n $259 = $51;\n $43 = $259;\n $260 = $43;\n $44 = $256;\n $45 = $258;\n $46 = $260;\n $261 = $45;\n $262 = $44;\n $263 = $261;\n $264 = $262;\n $265 = (($263) - ($264))|0;\n $47 = $265;\n $266 = $47;\n $267 = ($266>>>0)>(0);\n if ($267) {\n  $268 = $46;\n  $269 = $44;\n  $270 = $47;\n  _memmove(($268|0),($269|0),($270|0))|0;\n }\n $271 = ((($116)) + 16|0);\n $272 = $271;\n $273 = $272;\n $274 = HEAPU8[$273>>0]|(HEAPU8[$273+1>>0]<<8)|(HEAPU8[$273+2>>0]<<16)|(HEAPU8[$273+3>>0]<<24);\n $275 = (($272) + 4)|0;\n $276 = $275;\n $277 = HEAPU8[$276>>0]|(HEAPU8[$276+1>>0]<<8)|(HEAPU8[$276+2>>0]<<16)|(HEAPU8[$276+3>>0]<<24);\n $278 = ((($116)) + 16|0);\n $279 = $278;\n $280 = $279;\n HEAP8[$280>>0]=$274&255;HEAP8[$280+1>>0]=($274>>8)&255;HEAP8[$280+2>>0]=($274>>16)&255;HEAP8[$280+3>>0]=$274>>24;\n $281 = (($279) + 4)|0;\n $282 = $281;\n HEAP8[$282>>0]=$277&255;HEAP8[$282+1>>0]=($277>>8)&255;HEAP8[$282+2>>0]=($277>>16)&255;HEAP8[$282+3>>0]=$277>>24;\n $283 = $113;\n $284 = ((($283)) + 8|0);\n $113 = $284;\n $285 = $113;\n $286 = $113;\n $287 = ((($286)) + 8|0);\n $288 = ((($116)) + 24|0);\n $59 = $285;\n $60 = $287;\n $61 = $288;\n $289 = $59;\n $58 = $289;\n $290 = $58;\n $291 = $60;\n $52 = $291;\n $292 = $52;\n $293 = $61;\n $53 = $293;\n $294 = $53;\n $54 = $290;\n $55 = $292;\n $56 = $294;\n $295 = $55;\n $296 = $54;\n $297 = $295;\n $298 = $296;\n $299 = (($297) - ($298))|0;\n $57 = $299;\n $300 = $57;\n $301 = ($300>>>0)>(0);\n if ($301) {\n  $302 = $56;\n  $303 = $54;\n  $304 = $57;\n  _memmove(($302|0),($303|0),($304|0))|0;\n }\n $305 = ((($116)) + 24|0);\n $306 = $305;\n $307 = $306;\n $308 = HEAPU8[$307>>0]|(HEAPU8[$307+1>>0]<<8)|(HEAPU8[$307+2>>0]<<16)|(HEAPU8[$307+3>>0]<<24);\n $309 = (($306) + 4)|0;\n $310 = $309;\n $311 = HEAPU8[$310>>0]|(HEAPU8[$310+1>>0]<<8)|(HEAPU8[$310+2>>0]<<16)|(HEAPU8[$310+3>>0]<<24);\n $312 = ((($116)) + 24|0);\n $313 = $312;\n $314 = $313;\n HEAP8[$314>>0]=$308&255;HEAP8[$314+1>>0]=($308>>8)&255;HEAP8[$314+2>>0]=($308>>16)&255;HEAP8[$314+3>>0]=$308>>24;\n $315 = (($313) + 4)|0;\n $316 = $315;\n HEAP8[$316>>0]=$311&255;HEAP8[$316+1>>0]=($311>>8)&255;HEAP8[$316+2>>0]=($311>>16)&255;HEAP8[$316+3>>0]=$311>>24;\n $317 = $113;\n $318 = ((($317)) + 8|0);\n $113 = $318;\n $319 = $113;\n $320 = $113;\n $321 = ((($320)) + 2|0);\n $322 = ((($116)) + 32|0);\n $69 = $319;\n $70 = $321;\n $71 = $322;\n $323 = $69;\n $68 = $323;\n $324 = $68;\n $325 = $70;\n $62 = $325;\n $326 = $62;\n $327 = $71;\n $63 = $327;\n $328 = $63;\n $64 = $324;\n $65 = $326;\n $66 = $328;\n $329 = $65;\n $330 = $64;\n $331 = $329;\n $332 = $330;\n $333 = (($331) - ($332))|0;\n $67 = $333;\n $334 = $67;\n $335 = ($334>>>0)>(0);\n if ($335) {\n  $336 = $66;\n  $337 = $64;\n  $338 = $67;\n  _memmove(($336|0),($337|0),($338|0))|0;\n }\n $339 = ((($116)) + 32|0);\n $340 = HEAPU8[$339>>0]|(HEAPU8[$339+1>>0]<<8);\n $341 = ((($116)) + 32|0);\n HEAP8[$341>>0]=$340&255;HEAP8[$341+1>>0]=$340>>8;\n $342 = $113;\n $343 = ((($342)) + 2|0);\n $113 = $343;\n $344 = ((($116)) + 34|0);\n $345 = HEAPU8[$344>>0]|(HEAPU8[$344+1>>0]<<8)|(HEAPU8[$344+2>>0]<<16)|(HEAPU8[$344+3>>0]<<24);\n $346 = ($345|0)==(0|0);\n if (!($346)) {\n  __ZdaPv($345);\n }\n $347 = ((($116)) + 32|0);\n $348 = HEAPU8[$347>>0]|(HEAPU8[$347+1>>0]<<8);\n $349 = $348&65535;\n $$arith = ($349*6)|0;\n $$overflow = ($349>>>0)>(715827882);\n $350 = $$overflow ? -1 : $$arith;\n $351 = (__Znaj($350)|0);\n $352 = ((($116)) + 34|0);\n HEAP8[$352>>0]=$351&255;HEAP8[$352+1>>0]=($351>>8)&255;HEAP8[$352+2>>0]=($351>>16)&255;HEAP8[$352+3>>0]=$351>>24;\n $114 = 0;\n while(1) {\n  $353 = $114;\n  $354 = ((($116)) + 32|0);\n  $355 = HEAPU8[$354>>0]|(HEAPU8[$354+1>>0]<<8);\n  $356 = $355&65535;\n  $357 = ($353|0)<($356|0);\n  if (!($357)) {\n   break;\n  }\n  $358 = ((($116)) + 34|0);\n  $359 = HEAPU8[$358>>0]|(HEAPU8[$358+1>>0]<<8)|(HEAPU8[$358+2>>0]<<16)|(HEAPU8[$358+3>>0]<<24);\n  $360 = $114;\n  $361 = (($359) + (($360*6)|0)|0);\n  $115 = $361;\n  $362 = $113;\n  $363 = $113;\n  $364 = ((($363)) + 2|0);\n  $365 = $115;\n  $79 = $362;\n  $80 = $364;\n  $81 = $365;\n  $366 = $79;\n  $78 = $366;\n  $367 = $78;\n  $368 = $80;\n  $72 = $368;\n  $369 = $72;\n  $370 = $81;\n  $73 = $370;\n  $371 = $73;\n  $74 = $367;\n  $75 = $369;\n  $76 = $371;\n  $372 = $75;\n  $373 = $74;\n  $374 = $372;\n  $375 = $373;\n  $376 = (($374) - ($375))|0;\n  $77 = $376;\n  $377 = $77;\n  $378 = ($377>>>0)>(0);\n  if ($378) {\n   $379 = $76;\n   $380 = $74;\n   $381 = $77;\n   _memmove(($379|0),($380|0),($381|0))|0;\n  }\n  $382 = $115;\n  $383 = HEAPU8[$382>>0]|(HEAPU8[$382+1>>0]<<8);\n  $384 = $115;\n  HEAP8[$384>>0]=$383&255;HEAP8[$384+1>>0]=$383>>8;\n  $385 = $113;\n  $386 = ((($385)) + 2|0);\n  $113 = $386;\n  $387 = $113;\n  $388 = $113;\n  $389 = ((($388)) + 2|0);\n  $390 = $115;\n  $391 = ((($390)) + 2|0);\n  $89 = $387;\n  $90 = $389;\n  $91 = $391;\n  $392 = $89;\n  $88 = $392;\n  $393 = $88;\n  $394 = $90;\n  $82 = $394;\n  $395 = $82;\n  $396 = $91;\n  $83 = $396;\n  $397 = $83;\n  $84 = $393;\n  $85 = $395;\n  $86 = $397;\n  $398 = $85;\n  $399 = $84;\n  $400 = $398;\n  $401 = $399;\n  $402 = (($400) - ($401))|0;\n  $87 = $402;\n  $403 = $87;\n  $404 = ($403>>>0)>(0);\n  if ($404) {\n   $405 = $86;\n   $406 = $84;\n   $407 = $87;\n   _memmove(($405|0),($406|0),($407|0))|0;\n  }\n  $408 = $115;\n  $409 = ((($408)) + 2|0);\n  $410 = HEAPU8[$409>>0]|(HEAPU8[$409+1>>0]<<8);\n  $411 = $115;\n  $412 = ((($411)) + 2|0);\n  HEAP8[$412>>0]=$410&255;HEAP8[$412+1>>0]=$410>>8;\n  $413 = $113;\n  $414 = ((($413)) + 2|0);\n  $113 = $414;\n  $415 = $113;\n  $416 = $113;\n  $417 = ((($416)) + 2|0);\n  $418 = $115;\n  $419 = ((($418)) + 4|0);\n  $99 = $415;\n  $100 = $417;\n  $101 = $419;\n  $420 = $99;\n  $98 = $420;\n  $421 = $98;\n  $422 = $100;\n  $92 = $422;\n  $423 = $92;\n  $424 = $101;\n  $93 = $424;\n  $425 = $93;\n  $94 = $421;\n  $95 = $423;\n  $96 = $425;\n  $426 = $95;\n  $427 = $94;\n  $428 = $426;\n  $429 = $427;\n  $430 = (($428) - ($429))|0;\n  $97 = $430;\n  $431 = $97;\n  $432 = ($431>>>0)>(0);\n  if ($432) {\n   $433 = $96;\n   $434 = $94;\n   $435 = $97;\n   _memmove(($433|0),($434|0),($435|0))|0;\n  }\n  $436 = $115;\n  $437 = ((($436)) + 4|0);\n  $438 = HEAPU8[$437>>0]|(HEAPU8[$437+1>>0]<<8);\n  $439 = $115;\n  $440 = ((($439)) + 4|0);\n  HEAP8[$440>>0]=$438&255;HEAP8[$440+1>>0]=$438>>8;\n  $441 = $113;\n  $442 = ((($441)) + 2|0);\n  $113 = $442;\n  $443 = $114;\n  $444 = (($443) + 1)|0;\n  $114 = $444;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip25laszip_format_unsupportedC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,4918);\n HEAP32[$2>>2] = (1788);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip25laszip_format_unsupportedD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip25laszip_format_unsupportedD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip25laszip_format_unsupportedD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13no_laszip_vlrD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13no_laszip_vlrD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $14 = sp;\n $19 = sp + 113|0;\n $29 = sp + 112|0;\n $30 = $0;\n $31 = $1;\n $32 = $30;\n $33 = $31;\n $27 = $32;\n $28 = $33;\n $34 = $27;\n $35 = ((($34)) + 4|0);\n $36 = HEAP32[$35>>2]|0;\n $26 = $34;\n $37 = $26;\n $38 = ((($37)) + 8|0);\n $25 = $38;\n $39 = $25;\n $24 = $39;\n $40 = $24;\n $41 = HEAP32[$40>>2]|0;\n $42 = ($36|0)!=($41|0);\n if ($42) {\n  $21 = $29;\n  $22 = $34;\n  $23 = 1;\n  $4 = $34;\n  $43 = $4;\n  $44 = ((($43)) + 8|0);\n  $3 = $44;\n  $45 = $3;\n  $2 = $45;\n  $46 = $2;\n  $47 = ((($34)) + 4|0);\n  $48 = HEAP32[$47>>2]|0;\n  $5 = $48;\n  $49 = $5;\n  $50 = $28;\n  $16 = $46;\n  $17 = $49;\n  $18 = $50;\n  $51 = $16;\n  $52 = $17;\n  $53 = $18;\n  $15 = $53;\n  $54 = $15;\n  ;HEAP8[$14>>0]=HEAP8[$19>>0]|0;\n  $11 = $51;\n  $12 = $52;\n  $13 = $54;\n  $55 = $11;\n  $56 = $12;\n  $57 = $13;\n  $10 = $57;\n  $58 = $10;\n  $7 = $55;\n  $8 = $56;\n  $9 = $58;\n  $59 = $8;\n  $60 = $9;\n  $6 = $60;\n  $61 = $6;\n  ;HEAP32[$59>>2]=HEAP32[$61>>2]|0;HEAP32[$59+4>>2]=HEAP32[$61+4>>2]|0;HEAP32[$59+8>>2]=HEAP32[$61+8>>2]|0;\n  $20 = $29;\n  $62 = ((($34)) + 4|0);\n  $63 = HEAP32[$62>>2]|0;\n  $64 = ((($63)) + 12|0);\n  HEAP32[$62>>2] = $64;\n  STACKTOP = sp;return;\n } else {\n  $65 = $28;\n  __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_($34,$65);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7factory11record_itemC2Eiii($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $7 = $3;\n $8 = $4;\n $9 = $5;\n HEAP32[$8>>2] = $9;\n $10 = ((($8)) + 4|0);\n $11 = $6;\n HEAP32[$10>>2] = $11;\n $12 = ((($8)) + 8|0);\n $13 = $7;\n HEAP32[$12>>2] = $13;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $10 = sp + 8|0;\n $15 = sp + 193|0;\n $24 = sp;\n $27 = sp + 192|0;\n $35 = sp + 72|0;\n $38 = sp + 60|0;\n $46 = sp + 12|0;\n $43 = $0;\n $44 = $1;\n $47 = $43;\n $42 = $47;\n $48 = $42;\n $49 = ((($48)) + 8|0);\n $41 = $49;\n $50 = $41;\n $40 = $50;\n $51 = $40;\n $45 = $51;\n $39 = $47;\n $52 = $39;\n $53 = ((($52)) + 4|0);\n $54 = HEAP32[$53>>2]|0;\n $55 = HEAP32[$52>>2]|0;\n $56 = $54;\n $57 = $55;\n $58 = (($56) - ($57))|0;\n $59 = (($58|0) / 12)&-1;\n $60 = (($59) + 1)|0;\n $34 = $47;\n HEAP32[$35>>2] = $60;\n $61 = $34;\n $62 = (__ZNKSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE8max_sizeEv($61)|0);\n $36 = $62;\n $63 = HEAP32[$35>>2]|0;\n $64 = $36;\n $65 = ($63>>>0)>($64>>>0);\n if ($65) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61);\n  // unreachable;\n }\n $32 = $61;\n $66 = $32;\n $31 = $66;\n $67 = $31;\n $30 = $67;\n $68 = $30;\n $69 = ((($68)) + 8|0);\n $29 = $69;\n $70 = $29;\n $28 = $70;\n $71 = $28;\n $72 = HEAP32[$71>>2]|0;\n $73 = HEAP32[$67>>2]|0;\n $74 = $72;\n $75 = $73;\n $76 = (($74) - ($75))|0;\n $77 = (($76|0) / 12)&-1;\n $37 = $77;\n $78 = $37;\n $79 = $36;\n $80 = (($79>>>0) / 2)&-1;\n $81 = ($78>>>0)>=($80>>>0);\n if ($81) {\n  $82 = $36;\n  $33 = $82;\n } else {\n  $83 = $37;\n  $84 = $83<<1;\n  HEAP32[$38>>2] = $84;\n  $25 = $38;\n  $26 = $35;\n  $85 = $25;\n  $86 = $26;\n  ;HEAP8[$24>>0]=HEAP8[$27>>0]|0;\n  $22 = $85;\n  $23 = $86;\n  $87 = $22;\n  $88 = $23;\n  $19 = $24;\n  $20 = $87;\n  $21 = $88;\n  $89 = $20;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = $21;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = ($90>>>0)<($92>>>0);\n  $94 = $23;\n  $95 = $22;\n  $96 = $93 ? $94 : $95;\n  $97 = HEAP32[$96>>2]|0;\n  $33 = $97;\n }\n $98 = $33;\n $18 = $47;\n $99 = $18;\n $100 = ((($99)) + 4|0);\n $101 = HEAP32[$100>>2]|0;\n $102 = HEAP32[$99>>2]|0;\n $103 = $101;\n $104 = $102;\n $105 = (($103) - ($104))|0;\n $106 = (($105|0) / 12)&-1;\n $107 = $45;\n __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEEC2EjjS6_($46,$98,$106,$107);\n $108 = $45;\n $109 = ((($46)) + 8|0);\n $110 = HEAP32[$109>>2]|0;\n $17 = $110;\n $111 = $17;\n $112 = $44;\n $16 = $112;\n $113 = $16;\n $12 = $108;\n $13 = $111;\n $14 = $113;\n $114 = $12;\n $115 = $13;\n $116 = $14;\n $11 = $116;\n $117 = $11;\n ;HEAP8[$10>>0]=HEAP8[$15>>0]|0;\n $7 = $114;\n $8 = $115;\n $9 = $117;\n $118 = $7;\n $119 = $8;\n $120 = $9;\n $6 = $120;\n $121 = $6;\n $3 = $118;\n $4 = $119;\n $5 = $121;\n $122 = $4;\n $123 = $5;\n $2 = $123;\n $124 = $2;\n ;HEAP32[$122>>2]=HEAP32[$124>>2]|0;HEAP32[$122+4>>2]=HEAP32[$124+4>>2]|0;HEAP32[$122+8>>2]=HEAP32[$124+8>>2]|0;\n $125 = ((($46)) + 8|0);\n $126 = HEAP32[$125>>2]|0;\n $127 = ((($126)) + 12|0);\n HEAP32[$125>>2] = $127;\n __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($47,$46);\n __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEED2Ev($46);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEEC2EjjS6_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(357913941);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = ($68*12)|0;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + (($74*12)|0)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + (($79*12)|0)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0);\n $15 = sp + 288|0;\n $21 = sp + 264|0;\n $33 = sp + 216|0;\n $86 = $0;\n $87 = $1;\n $88 = $86;\n $85 = $88;\n $89 = $85;\n $84 = $89;\n $90 = $84;\n $91 = HEAP32[$90>>2]|0;\n $83 = $91;\n $92 = $83;\n $62 = $89;\n $93 = $62;\n $94 = HEAP32[$93>>2]|0;\n $61 = $94;\n $95 = $61;\n $67 = $89;\n $96 = $67;\n $66 = $96;\n $97 = $66;\n $65 = $97;\n $98 = $65;\n $99 = ((($98)) + 8|0);\n $64 = $99;\n $100 = $64;\n $63 = $100;\n $101 = $63;\n $102 = HEAP32[$101>>2]|0;\n $103 = HEAP32[$97>>2]|0;\n $104 = $102;\n $105 = $103;\n $106 = (($104) - ($105))|0;\n $107 = (($106|0) / 12)&-1;\n $108 = (($95) + (($107*12)|0)|0);\n $69 = $89;\n $109 = $69;\n $110 = HEAP32[$109>>2]|0;\n $68 = $110;\n $111 = $68;\n $70 = $89;\n $112 = $70;\n $113 = ((($112)) + 4|0);\n $114 = HEAP32[$113>>2]|0;\n $115 = HEAP32[$112>>2]|0;\n $116 = $114;\n $117 = $115;\n $118 = (($116) - ($117))|0;\n $119 = (($118|0) / 12)&-1;\n $120 = (($111) + (($119*12)|0)|0);\n $72 = $89;\n $121 = $72;\n $122 = HEAP32[$121>>2]|0;\n $71 = $122;\n $123 = $71;\n $77 = $89;\n $124 = $77;\n $76 = $124;\n $125 = $76;\n $75 = $125;\n $126 = $75;\n $127 = ((($126)) + 8|0);\n $74 = $127;\n $128 = $74;\n $73 = $128;\n $129 = $73;\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$125>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 12)&-1;\n $136 = (($123) + (($135*12)|0)|0);\n $78 = $89;\n $79 = $92;\n $80 = $108;\n $81 = $120;\n $82 = $136;\n $4 = $88;\n $137 = $4;\n $138 = ((($137)) + 8|0);\n $3 = $138;\n $139 = $3;\n $2 = $139;\n $140 = $2;\n $141 = HEAP32[$88>>2]|0;\n $142 = ((($88)) + 4|0);\n $143 = HEAP32[$142>>2]|0;\n $144 = $87;\n $145 = ((($144)) + 4|0);\n $5 = $140;\n $6 = $141;\n $7 = $143;\n $8 = $145;\n $146 = $7;\n $147 = $6;\n $148 = $146;\n $149 = $147;\n $150 = (($148) - ($149))|0;\n $151 = (($150|0) / 12)&-1;\n $9 = $151;\n $152 = $9;\n $153 = $8;\n $154 = HEAP32[$153>>2]|0;\n $155 = (0 - ($152))|0;\n $156 = (($154) + (($155*12)|0)|0);\n HEAP32[$153>>2] = $156;\n $157 = $9;\n $158 = ($157|0)>(0);\n if ($158) {\n  $159 = $8;\n  $160 = HEAP32[$159>>2]|0;\n  $161 = $6;\n  $162 = $9;\n  $163 = ($162*12)|0;\n  _memcpy(($160|0),($161|0),($163|0))|0;\n }\n $164 = $87;\n $165 = ((($164)) + 4|0);\n $13 = $88;\n $14 = $165;\n $166 = $13;\n $12 = $166;\n $167 = $12;\n $168 = HEAP32[$167>>2]|0;\n HEAP32[$15>>2] = $168;\n $169 = $14;\n $10 = $169;\n $170 = $10;\n $171 = HEAP32[$170>>2]|0;\n $172 = $13;\n HEAP32[$172>>2] = $171;\n $11 = $15;\n $173 = $11;\n $174 = HEAP32[$173>>2]|0;\n $175 = $14;\n HEAP32[$175>>2] = $174;\n $176 = ((($88)) + 4|0);\n $177 = $87;\n $178 = ((($177)) + 8|0);\n $19 = $176;\n $20 = $178;\n $179 = $19;\n $18 = $179;\n $180 = $18;\n $181 = HEAP32[$180>>2]|0;\n HEAP32[$21>>2] = $181;\n $182 = $20;\n $16 = $182;\n $183 = $16;\n $184 = HEAP32[$183>>2]|0;\n $185 = $19;\n HEAP32[$185>>2] = $184;\n $17 = $21;\n $186 = $17;\n $187 = HEAP32[$186>>2]|0;\n $188 = $20;\n HEAP32[$188>>2] = $187;\n $24 = $88;\n $189 = $24;\n $190 = ((($189)) + 8|0);\n $23 = $190;\n $191 = $23;\n $22 = $191;\n $192 = $22;\n $193 = $87;\n $27 = $193;\n $194 = $27;\n $195 = ((($194)) + 12|0);\n $26 = $195;\n $196 = $26;\n $25 = $196;\n $197 = $25;\n $31 = $192;\n $32 = $197;\n $198 = $31;\n $30 = $198;\n $199 = $30;\n $200 = HEAP32[$199>>2]|0;\n HEAP32[$33>>2] = $200;\n $201 = $32;\n $28 = $201;\n $202 = $28;\n $203 = HEAP32[$202>>2]|0;\n $204 = $31;\n HEAP32[$204>>2] = $203;\n $29 = $33;\n $205 = $29;\n $206 = HEAP32[$205>>2]|0;\n $207 = $32;\n HEAP32[$207>>2] = $206;\n $208 = $87;\n $209 = ((($208)) + 4|0);\n $210 = HEAP32[$209>>2]|0;\n $211 = $87;\n HEAP32[$211>>2] = $210;\n $34 = $88;\n $212 = $34;\n $213 = ((($212)) + 4|0);\n $214 = HEAP32[$213>>2]|0;\n $215 = HEAP32[$212>>2]|0;\n $216 = $214;\n $217 = $215;\n $218 = (($216) - ($217))|0;\n $219 = (($218|0) / 12)&-1;\n $58 = $88;\n $59 = $219;\n $220 = $58;\n $57 = $220;\n $221 = $57;\n $222 = HEAP32[$221>>2]|0;\n $56 = $222;\n $223 = $56;\n $36 = $220;\n $224 = $36;\n $225 = HEAP32[$224>>2]|0;\n $35 = $225;\n $226 = $35;\n $41 = $220;\n $227 = $41;\n $40 = $227;\n $228 = $40;\n $39 = $228;\n $229 = $39;\n $230 = ((($229)) + 8|0);\n $38 = $230;\n $231 = $38;\n $37 = $231;\n $232 = $37;\n $233 = HEAP32[$232>>2]|0;\n $234 = HEAP32[$228>>2]|0;\n $235 = $233;\n $236 = $234;\n $237 = (($235) - ($236))|0;\n $238 = (($237|0) / 12)&-1;\n $239 = (($226) + (($238*12)|0)|0);\n $43 = $220;\n $240 = $43;\n $241 = HEAP32[$240>>2]|0;\n $42 = $241;\n $242 = $42;\n $48 = $220;\n $243 = $48;\n $47 = $243;\n $244 = $47;\n $46 = $244;\n $245 = $46;\n $246 = ((($245)) + 8|0);\n $45 = $246;\n $247 = $45;\n $44 = $247;\n $248 = $44;\n $249 = HEAP32[$248>>2]|0;\n $250 = HEAP32[$244>>2]|0;\n $251 = $249;\n $252 = $250;\n $253 = (($251) - ($252))|0;\n $254 = (($253|0) / 12)&-1;\n $255 = (($242) + (($254*12)|0)|0);\n $50 = $220;\n $256 = $50;\n $257 = HEAP32[$256>>2]|0;\n $49 = $257;\n $258 = $49;\n $259 = $59;\n $260 = (($258) + (($259*12)|0)|0);\n $51 = $220;\n $52 = $223;\n $53 = $239;\n $54 = $255;\n $55 = $260;\n $60 = $88;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -12|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n }\n $60 = HEAP32[$35>>2]|0;\n $61 = ($60|0)!=(0|0);\n if (!($61)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $62 = $14;\n $63 = ((($62)) + 12|0);\n $13 = $63;\n $64 = $13;\n $65 = ((($64)) + 4|0);\n $12 = $65;\n $66 = $12;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$35>>2]|0;\n $4 = $35;\n $69 = $4;\n $3 = $69;\n $70 = $3;\n $71 = ((($70)) + 12|0);\n $2 = $71;\n $72 = $2;\n $1 = $72;\n $73 = $1;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 12)&-1;\n $9 = $67;\n $10 = $68;\n $11 = $79;\n $80 = $9;\n $81 = $10;\n $82 = $11;\n $6 = $80;\n $7 = $81;\n $8 = $82;\n $83 = $7;\n $5 = $83;\n $84 = $5;\n __ZdlPv($84);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 357913941;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE13__move_assignERS6_NS_17integral_constantIbLb1EEE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);\n $21 = sp;\n $24 = sp + 92|0;\n $25 = $0;\n $26 = $1;\n $27 = $25;\n __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE10deallocateEv($27);\n $28 = $26;\n $22 = $27;\n $23 = $28;\n $29 = $22;\n $30 = $23;\n ;HEAP8[$21>>0]=HEAP8[$24>>0]|0;\n $19 = $29;\n $20 = $30;\n $31 = $19;\n $32 = $20;\n $18 = $32;\n $33 = $18;\n $34 = ((($33)) + 8|0);\n $17 = $34;\n $35 = $17;\n $16 = $35;\n $36 = $16;\n $12 = $36;\n $15 = $31;\n $37 = $15;\n $38 = ((($37)) + 8|0);\n $14 = $38;\n $39 = $14;\n $13 = $39;\n $40 = $26;\n $41 = HEAP32[$40>>2]|0;\n HEAP32[$27>>2] = $41;\n $42 = $26;\n $43 = ((($42)) + 4|0);\n $44 = HEAP32[$43>>2]|0;\n $45 = ((($27)) + 4|0);\n HEAP32[$45>>2] = $44;\n $46 = $26;\n $5 = $46;\n $47 = $5;\n $48 = ((($47)) + 8|0);\n $4 = $48;\n $49 = $4;\n $3 = $49;\n $50 = $3;\n $51 = HEAP32[$50>>2]|0;\n $8 = $27;\n $52 = $8;\n $53 = ((($52)) + 8|0);\n $7 = $53;\n $54 = $7;\n $6 = $54;\n $55 = $6;\n HEAP32[$55>>2] = $51;\n $56 = $26;\n $11 = $56;\n $57 = $11;\n $58 = ((($57)) + 8|0);\n $10 = $58;\n $59 = $10;\n $9 = $59;\n $60 = $9;\n HEAP32[$60>>2] = 0;\n $61 = $26;\n $62 = ((($61)) + 4|0);\n HEAP32[$62>>2] = 0;\n $63 = $26;\n HEAP32[$63>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE10deallocateEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0);\n $45 = sp;\n $48 = sp + 236|0;\n $60 = $0;\n $61 = $60;\n $62 = HEAP32[$61>>2]|0;\n $63 = ($62|0)!=(0|0);\n if (!($63)) {\n  STACKTOP = sp;return;\n }\n $58 = $61;\n $64 = $58;\n $57 = $64;\n $65 = $57;\n $66 = ((($65)) + 4|0);\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$65>>2]|0;\n $69 = $67;\n $70 = $68;\n $71 = (($69) - ($70))|0;\n $72 = (($71|0) / 12)&-1;\n $59 = $72;\n $56 = $64;\n $73 = $56;\n $74 = HEAP32[$73>>2]|0;\n $53 = $73;\n $54 = $74;\n $75 = $53;\n $76 = ((($75)) + 4|0);\n $77 = HEAP32[$76>>2]|0;\n $55 = $77;\n while(1) {\n  $78 = $54;\n  $79 = $55;\n  $80 = ($78|0)!=($79|0);\n  if (!($80)) {\n   break;\n  }\n  $52 = $75;\n  $81 = $52;\n  $82 = ((($81)) + 8|0);\n  $51 = $82;\n  $83 = $51;\n  $50 = $83;\n  $84 = $50;\n  $85 = $55;\n  $86 = ((($85)) + -12|0);\n  $55 = $86;\n  $49 = $86;\n  $87 = $49;\n  $46 = $84;\n  $47 = $87;\n  $88 = $46;\n  $89 = $47;\n  ;HEAP8[$45>>0]=HEAP8[$48>>0]|0;\n  $43 = $88;\n  $44 = $89;\n  $90 = $43;\n  $91 = $44;\n  $41 = $90;\n  $42 = $91;\n }\n $92 = $54;\n $93 = ((($75)) + 4|0);\n HEAP32[$93>>2] = $92;\n $94 = $59;\n $38 = $64;\n $39 = $94;\n $95 = $38;\n $37 = $95;\n $96 = $37;\n $97 = HEAP32[$96>>2]|0;\n $36 = $97;\n $98 = $36;\n $20 = $95;\n $99 = $20;\n $100 = HEAP32[$99>>2]|0;\n $19 = $100;\n $101 = $19;\n $25 = $95;\n $102 = $25;\n $24 = $102;\n $103 = $24;\n $23 = $103;\n $104 = $23;\n $105 = ((($104)) + 8|0);\n $22 = $105;\n $106 = $22;\n $21 = $106;\n $107 = $21;\n $108 = HEAP32[$107>>2]|0;\n $109 = HEAP32[$103>>2]|0;\n $110 = $108;\n $111 = $109;\n $112 = (($110) - ($111))|0;\n $113 = (($112|0) / 12)&-1;\n $114 = (($101) + (($113*12)|0)|0);\n $27 = $95;\n $115 = $27;\n $116 = HEAP32[$115>>2]|0;\n $26 = $116;\n $117 = $26;\n $118 = $39;\n $119 = (($117) + (($118*12)|0)|0);\n $29 = $95;\n $120 = $29;\n $121 = HEAP32[$120>>2]|0;\n $28 = $121;\n $122 = $28;\n $30 = $95;\n $123 = $30;\n $124 = ((($123)) + 4|0);\n $125 = HEAP32[$124>>2]|0;\n $126 = HEAP32[$123>>2]|0;\n $127 = $125;\n $128 = $126;\n $129 = (($127) - ($128))|0;\n $130 = (($129|0) / 12)&-1;\n $131 = (($122) + (($130*12)|0)|0);\n $31 = $95;\n $32 = $98;\n $33 = $114;\n $34 = $119;\n $35 = $131;\n $40 = $64;\n $8 = $61;\n $132 = $8;\n $133 = ((($132)) + 8|0);\n $7 = $133;\n $134 = $7;\n $6 = $134;\n $135 = $6;\n $136 = HEAP32[$61>>2]|0;\n $5 = $61;\n $137 = $5;\n $4 = $137;\n $138 = $4;\n $3 = $138;\n $139 = $3;\n $140 = ((($139)) + 8|0);\n $2 = $140;\n $141 = $2;\n $1 = $141;\n $142 = $1;\n $143 = HEAP32[$142>>2]|0;\n $144 = HEAP32[$138>>2]|0;\n $145 = $143;\n $146 = $144;\n $147 = (($145) - ($146))|0;\n $148 = (($147|0) / 12)&-1;\n $13 = $135;\n $14 = $136;\n $15 = $148;\n $149 = $13;\n $150 = $14;\n $151 = $15;\n $10 = $149;\n $11 = $150;\n $12 = $151;\n $152 = $11;\n $9 = $152;\n $153 = $9;\n __ZdlPv($153);\n $18 = $61;\n $154 = $18;\n $155 = ((($154)) + 8|0);\n $17 = $155;\n $156 = $17;\n $16 = $156;\n $157 = $16;\n HEAP32[$157>>2] = 0;\n $158 = ((($61)) + 4|0);\n HEAP32[$158>>2] = 0;\n HEAP32[$61>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip22chunk_table_read_errorC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,5254);\n HEAP32[$2>>2] = (1828);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip22chunk_table_read_errorD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13not_supportedC2EPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n __ZNSt13runtime_errorC2EPKc($4,$5);\n HEAP32[$4>>2] = (1848);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13not_supportedD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip26unknown_chunk_table_formatC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,5298);\n HEAP32[$2>>2] = (1868);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip26unknown_chunk_table_formatD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEE6resizeEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);\n $6 = sp;\n $9 = sp + 180|0;\n $45 = $0;\n $46 = $1;\n $48 = $45;\n $44 = $48;\n $49 = $44;\n $50 = ((($49)) + 4|0);\n $51 = HEAP32[$50>>2]|0;\n $52 = HEAP32[$49>>2]|0;\n $53 = $51;\n $54 = $52;\n $55 = (($53) - ($54))|0;\n $56 = (($55|0) / 8)&-1;\n $47 = $56;\n $57 = $47;\n $58 = $46;\n $59 = ($57>>>0)<($58>>>0);\n if ($59) {\n  $60 = $46;\n  $61 = $47;\n  $62 = (($60) - ($61))|0;\n  __ZNSt3__26vectorIyNS_9allocatorIyEEE8__appendEj($48,$62);\n  STACKTOP = sp;return;\n }\n $63 = $47;\n $64 = $46;\n $65 = ($63>>>0)>($64>>>0);\n if (!($65)) {\n  STACKTOP = sp;return;\n }\n $66 = HEAP32[$48>>2]|0;\n $67 = $46;\n $68 = (($66) + ($67<<3)|0);\n $41 = $48;\n $42 = $68;\n $69 = $41;\n $70 = $42;\n $39 = $69;\n $40 = $70;\n $38 = $69;\n $71 = $38;\n $72 = ((($71)) + 4|0);\n $73 = HEAP32[$72>>2]|0;\n $74 = HEAP32[$71>>2]|0;\n $75 = $73;\n $76 = $74;\n $77 = (($75) - ($76))|0;\n $78 = (($77|0) / 8)&-1;\n $43 = $78;\n $79 = $42;\n $14 = $69;\n $15 = $79;\n $80 = $14;\n $81 = ((($80)) + 4|0);\n $82 = HEAP32[$81>>2]|0;\n $16 = $82;\n while(1) {\n  $83 = $15;\n  $84 = $16;\n  $85 = ($83|0)!=($84|0);\n  if (!($85)) {\n   break;\n  }\n  $13 = $80;\n  $86 = $13;\n  $87 = ((($86)) + 8|0);\n  $12 = $87;\n  $88 = $12;\n  $11 = $88;\n  $89 = $11;\n  $90 = $16;\n  $91 = ((($90)) + -8|0);\n  $16 = $91;\n  $10 = $91;\n  $92 = $10;\n  $7 = $89;\n  $8 = $92;\n  $93 = $7;\n  $94 = $8;\n  ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n  $4 = $93;\n  $5 = $94;\n  $95 = $4;\n  $96 = $5;\n  $2 = $95;\n  $3 = $96;\n }\n $97 = $15;\n $98 = ((($80)) + 4|0);\n HEAP32[$98>>2] = $97;\n $99 = $43;\n $36 = $69;\n $37 = $99;\n $100 = $36;\n $35 = $100;\n $101 = $35;\n $102 = HEAP32[$101>>2]|0;\n $34 = $102;\n $103 = $34;\n $18 = $100;\n $104 = $18;\n $105 = HEAP32[$104>>2]|0;\n $17 = $105;\n $106 = $17;\n $23 = $100;\n $107 = $23;\n $22 = $107;\n $108 = $22;\n $21 = $108;\n $109 = $21;\n $110 = ((($109)) + 8|0);\n $20 = $110;\n $111 = $20;\n $19 = $111;\n $112 = $19;\n $113 = HEAP32[$112>>2]|0;\n $114 = HEAP32[$108>>2]|0;\n $115 = $113;\n $116 = $114;\n $117 = (($115) - ($116))|0;\n $118 = (($117|0) / 8)&-1;\n $119 = (($106) + ($118<<3)|0);\n $25 = $100;\n $120 = $25;\n $121 = HEAP32[$120>>2]|0;\n $24 = $121;\n $122 = $24;\n $123 = $37;\n $124 = (($122) + ($123<<3)|0);\n $27 = $100;\n $125 = $27;\n $126 = HEAP32[$125>>2]|0;\n $26 = $126;\n $127 = $26;\n $28 = $100;\n $128 = $28;\n $129 = ((($128)) + 4|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$128>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 8)&-1;\n $136 = (($127) + ($135<<3)|0);\n $29 = $100;\n $30 = $103;\n $31 = $119;\n $32 = $124;\n $33 = $136;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP32[$4>>2] = $5;\n $6 = ((($4)) + 4|0);\n HEAP32[$6>>2] = 0;\n $7 = ((($4)) + 8|0);\n HEAP32[$7>>2] = -1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integerC2Ejjjj($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0;\n var $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $15 = sp + 72|0;\n $27 = sp + 24|0;\n $29 = $0;\n $30 = $1;\n $31 = $2;\n $32 = $3;\n $33 = $4;\n $34 = $29;\n $35 = ((($34)) + 4|0);\n $36 = $30;\n HEAP32[$35>>2] = $36;\n $37 = ((($34)) + 8|0);\n $38 = $31;\n HEAP32[$37>>2] = $38;\n $39 = ((($34)) + 12|0);\n $40 = $32;\n HEAP32[$39>>2] = $40;\n $41 = ((($34)) + 16|0);\n $42 = $33;\n HEAP32[$41>>2] = $42;\n $43 = ((($34)) + 36|0);\n $28 = $43;\n $44 = $28;\n $26 = $44;\n $45 = $26;\n $25 = $45;\n HEAP32[$45>>2] = 0;\n $46 = ((($45)) + 4|0);\n HEAP32[$46>>2] = 0;\n $47 = ((($45)) + 8|0);\n HEAP32[$27>>2] = 0;\n $23 = $47;\n $24 = $27;\n $48 = $23;\n $49 = $24;\n $22 = $49;\n $50 = $22;\n $18 = $48;\n $19 = $50;\n $51 = $18;\n $52 = $19;\n $17 = $52;\n HEAP32[$51>>2] = 0;\n $21 = $48;\n $53 = $21;\n $20 = $53;\n $54 = ((($34)) + 48|0);\n __ZN6laszip6models14arithmetic_bitC2Ev($54);\n $55 = ((($34)) + 68|0);\n $16 = $55;\n $56 = $16;\n $14 = $56;\n $57 = $14;\n $13 = $57;\n HEAP32[$57>>2] = 0;\n $58 = ((($57)) + 4|0);\n HEAP32[$58>>2] = 0;\n $59 = ((($57)) + 8|0);\n HEAP32[$15>>2] = 0;\n $11 = $59;\n $12 = $15;\n $60 = $11;\n $61 = $12;\n $10 = $61;\n $62 = $10;\n $6 = $60;\n $7 = $62;\n $63 = $6;\n $64 = $7;\n $5 = $64;\n HEAP32[$63>>2] = 0;\n $9 = $60;\n $65 = $9;\n $8 = $65;\n $66 = $33;\n $67 = ($66|0)!=(0);\n if (!($67)) {\n  $100 = $30;\n  $101 = ($100|0)!=(0);\n  $102 = $30;\n  $103 = ($102>>>0)<(32);\n  $or$cond = $101 & $103;\n  if ($or$cond) {\n   $104 = $30;\n   $105 = ((($34)) + 20|0);\n   HEAP32[$105>>2] = $104;\n   $106 = $30;\n   $107 = 1 << $106;\n   $108 = ((($34)) + 24|0);\n   HEAP32[$108>>2] = $107;\n   $109 = ((($34)) + 24|0);\n   $110 = HEAP32[$109>>2]|0;\n   $111 = (($110>>>0) / 2)&-1;\n   $112 = (0 - ($111))|0;\n   $113 = ((($34)) + 28|0);\n   HEAP32[$113>>2] = $112;\n   $114 = ((($34)) + 28|0);\n   $115 = HEAP32[$114>>2]|0;\n   $116 = ((($34)) + 24|0);\n   $117 = HEAP32[$116>>2]|0;\n   $118 = (($115) + ($117))|0;\n   $119 = (($118) - 1)|0;\n   $120 = ((($34)) + 32|0);\n   HEAP32[$120>>2] = $119;\n   HEAP32[$34>>2] = 0;\n   STACKTOP = sp;return;\n  } else {\n   $121 = ((($34)) + 20|0);\n   HEAP32[$121>>2] = 32;\n   $122 = ((($34)) + 24|0);\n   HEAP32[$122>>2] = 0;\n   $123 = ((($34)) + 28|0);\n   HEAP32[$123>>2] = -2147483648;\n   $124 = ((($34)) + 32|0);\n   HEAP32[$124>>2] = 2147483647;\n   HEAP32[$34>>2] = 0;\n   STACKTOP = sp;return;\n  }\n }\n $68 = ((($34)) + 20|0);\n HEAP32[$68>>2] = 0;\n $69 = $33;\n $70 = ((($34)) + 24|0);\n HEAP32[$70>>2] = $69;\n while(1) {\n  $71 = $33;\n  $72 = ($71|0)!=(0);\n  if (!($72)) {\n   break;\n  }\n  $73 = $33;\n  $74 = $73 >>> 1;\n  $33 = $74;\n  $75 = ((($34)) + 20|0);\n  $76 = HEAP32[$75>>2]|0;\n  $77 = (($76) + 1)|0;\n  HEAP32[$75>>2] = $77;\n }\n $78 = ((($34)) + 24|0);\n $79 = HEAP32[$78>>2]|0;\n $80 = ((($34)) + 20|0);\n $81 = HEAP32[$80>>2]|0;\n $82 = (($81) - 1)|0;\n $83 = 1 << $82;\n $84 = ($79|0)==($83|0);\n if ($84) {\n  $85 = ((($34)) + 20|0);\n  $86 = HEAP32[$85>>2]|0;\n  $87 = (($86) + -1)|0;\n  HEAP32[$85>>2] = $87;\n }\n $88 = ((($34)) + 24|0);\n $89 = HEAP32[$88>>2]|0;\n $90 = (($89>>>0) / 2)&-1;\n $91 = (0 - ($90))|0;\n $92 = ((($34)) + 28|0);\n HEAP32[$92>>2] = $91;\n $93 = ((($34)) + 28|0);\n $94 = HEAP32[$93>>2]|0;\n $95 = ((($34)) + 24|0);\n $96 = HEAP32[$95>>2]|0;\n $97 = (($94) + ($96))|0;\n $98 = (($97) - 1)|0;\n $99 = ((($34)) + 32|0);\n HEAP32[$99>>2] = $98;\n HEAP32[$34>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n $4 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($3)|0);\n $5 = $4&255;\n $6 = $5 << 24;\n $7 = HEAP32[$2>>2]|0;\n $8 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($7)|0);\n $9 = $8&255;\n $10 = $9 << 16;\n $11 = $6 | $10;\n $12 = HEAP32[$2>>2]|0;\n $13 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($12)|0);\n $14 = $13&255;\n $15 = $14 << 8;\n $16 = $11 | $15;\n $17 = HEAP32[$2>>2]|0;\n $18 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($17)|0);\n $19 = $18&255;\n $20 = $16 | $19;\n $21 = ((($2)) + 4|0);\n HEAP32[$21>>2] = $20;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integer4initEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $18 = 0;\n var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0);\n $14 = sp + 8|0;\n $19 = sp + 335|0;\n $30 = sp + 334|0;\n $44 = sp;\n $49 = sp + 333|0;\n $60 = sp + 332|0;\n $64 = sp + 60|0;\n $66 = sp + 12|0;\n $62 = $0;\n $67 = $62;\n $68 = ((($67)) + 36|0);\n $61 = $68;\n $69 = $61;\n $70 = HEAP32[$69>>2]|0;\n $71 = ((($69)) + 4|0);\n $72 = HEAP32[$71>>2]|0;\n $73 = ($70|0)==($72|0);\n if (!($73)) {\n  STACKTOP = sp;return;\n }\n $63 = 0;\n while(1) {\n  $74 = $63;\n  $75 = ((($67)) + 8|0);\n  $76 = HEAP32[$75>>2]|0;\n  $77 = ($74>>>0)<($76>>>0);\n  if (!($77)) {\n   break;\n  }\n  $78 = ((($67)) + 36|0);\n  $79 = ((($67)) + 20|0);\n  $80 = HEAP32[$79>>2]|0;\n  $81 = (($80) + 1)|0;\n  __ZN6laszip6models10arithmeticC2EjbPj($64,$81,0,0);\n  $58 = $78;\n  $59 = $64;\n  $82 = $58;\n  $83 = ((($82)) + 4|0);\n  $84 = HEAP32[$83>>2]|0;\n  $57 = $82;\n  $85 = $57;\n  $86 = ((($85)) + 8|0);\n  $56 = $86;\n  $87 = $56;\n  $55 = $87;\n  $88 = $55;\n  $89 = HEAP32[$88>>2]|0;\n  $90 = ($84>>>0)<($89>>>0);\n  if ($90) {\n   $52 = $60;\n   $53 = $82;\n   $54 = 1;\n   $35 = $82;\n   $91 = $35;\n   $92 = ((($91)) + 8|0);\n   $34 = $92;\n   $93 = $34;\n   $33 = $93;\n   $94 = $33;\n   $95 = ((($82)) + 4|0);\n   $96 = HEAP32[$95>>2]|0;\n   $31 = $96;\n   $97 = $31;\n   $98 = $59;\n   $32 = $98;\n   $99 = $32;\n   $46 = $94;\n   $47 = $97;\n   $48 = $99;\n   $100 = $46;\n   $101 = $47;\n   $102 = $48;\n   $45 = $102;\n   $103 = $45;\n   ;HEAP8[$44>>0]=HEAP8[$49>>0]|0;\n   $41 = $100;\n   $42 = $101;\n   $43 = $103;\n   $104 = $41;\n   $105 = $42;\n   $106 = $43;\n   $40 = $106;\n   $107 = $40;\n   $37 = $104;\n   $38 = $105;\n   $39 = $107;\n   $108 = $38;\n   $109 = $39;\n   $36 = $109;\n   $110 = $36;\n   __ZN6laszip6models10arithmeticC2EOS1_($108,$110);\n   $50 = $60;\n   $111 = ((($82)) + 4|0);\n   $112 = HEAP32[$111>>2]|0;\n   $113 = ((($112)) + 44|0);\n   HEAP32[$111>>2] = $113;\n  } else {\n   $114 = $59;\n   $51 = $114;\n   $115 = $51;\n   __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($82,$115);\n  }\n  __ZN6laszip6models10arithmeticD2Ev($64);\n  $116 = $63;\n  $117 = (($116) + 1)|0;\n  $63 = $117;\n }\n $63 = 1;\n while(1) {\n  $118 = $63;\n  $119 = ((($67)) + 20|0);\n  $120 = HEAP32[$119>>2]|0;\n  $121 = ($118>>>0)<=($120>>>0);\n  if (!($121)) {\n   break;\n  }\n  $122 = $63;\n  $123 = ((($67)) + 12|0);\n  $124 = HEAP32[$123>>2]|0;\n  $125 = ($122>>>0)<=($124>>>0);\n  if ($125) {\n   $126 = $63;\n   $127 = 1 << $126;\n   $131 = $127;\n  } else {\n   $128 = ((($67)) + 12|0);\n   $129 = HEAP32[$128>>2]|0;\n   $130 = 1 << $129;\n   $131 = $130;\n  }\n  $65 = $131;\n  $132 = ((($67)) + 68|0);\n  $133 = $65;\n  __ZN6laszip6models10arithmeticC2EjbPj($66,$133,0,0);\n  $28 = $132;\n  $29 = $66;\n  $134 = $28;\n  $135 = ((($134)) + 4|0);\n  $136 = HEAP32[$135>>2]|0;\n  $27 = $134;\n  $137 = $27;\n  $138 = ((($137)) + 8|0);\n  $26 = $138;\n  $139 = $26;\n  $25 = $139;\n  $140 = $25;\n  $141 = HEAP32[$140>>2]|0;\n  $142 = ($136>>>0)<($141>>>0);\n  if ($142) {\n   $22 = $30;\n   $23 = $134;\n   $24 = 1;\n   $5 = $134;\n   $143 = $5;\n   $144 = ((($143)) + 8|0);\n   $4 = $144;\n   $145 = $4;\n   $3 = $145;\n   $146 = $3;\n   $147 = ((($134)) + 4|0);\n   $148 = HEAP32[$147>>2]|0;\n   $1 = $148;\n   $149 = $1;\n   $150 = $29;\n   $2 = $150;\n   $151 = $2;\n   $16 = $146;\n   $17 = $149;\n   $18 = $151;\n   $152 = $16;\n   $153 = $17;\n   $154 = $18;\n   $15 = $154;\n   $155 = $15;\n   ;HEAP8[$14>>0]=HEAP8[$19>>0]|0;\n   $11 = $152;\n   $12 = $153;\n   $13 = $155;\n   $156 = $11;\n   $157 = $12;\n   $158 = $13;\n   $10 = $158;\n   $159 = $10;\n   $7 = $156;\n   $8 = $157;\n   $9 = $159;\n   $160 = $8;\n   $161 = $9;\n   $6 = $161;\n   $162 = $6;\n   __ZN6laszip6models10arithmeticC2EOS1_($160,$162);\n   $20 = $30;\n   $163 = ((($134)) + 4|0);\n   $164 = HEAP32[$163>>2]|0;\n   $165 = ((($164)) + 44|0);\n   HEAP32[$163>>2] = $165;\n  } else {\n   $166 = $29;\n   $21 = $166;\n   $167 = $21;\n   __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($134,$167);\n  }\n  __ZN6laszip6models10arithmeticD2Ev($66);\n  $168 = $63;\n  $169 = (($168) + 1)|0;\n  $63 = $169;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $6 = $0;\n $7 = $1;\n $8 = $2;\n $9 = $3;\n $11 = $6;\n $12 = $8;\n $13 = $7;\n $14 = ((($11)) + 36|0);\n $15 = $9;\n $4 = $14;\n $5 = $15;\n $16 = $4;\n $17 = HEAP32[$16>>2]|0;\n $18 = $5;\n $19 = (($17) + (($18*44)|0)|0);\n $20 = (__ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS_6models10arithmeticEEEiRT_RT0_($11,$13,$19)|0);\n $21 = (($12) + ($20))|0;\n $10 = $21;\n $22 = $10;\n $23 = ($22|0)<(0);\n if ($23) {\n  $24 = ((($11)) + 24|0);\n  $25 = HEAP32[$24>>2]|0;\n  $26 = $10;\n  $27 = (($26) + ($25))|0;\n  $10 = $27;\n  $36 = $10;\n  STACKTOP = sp;return ($36|0);\n }\n $28 = $10;\n $29 = ((($11)) + 24|0);\n $30 = HEAP32[$29>>2]|0;\n $31 = ($28>>>0)>=($30>>>0);\n if (!($31)) {\n  $36 = $10;\n  STACKTOP = sp;return ($36|0);\n }\n $32 = ((($11)) + 24|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = $10;\n $35 = (($34) - ($33))|0;\n $10 = $35;\n $36 = $10;\n STACKTOP = sp;return ($36|0);\n}\nfunction __ZN6laszip13decompressors7integerD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 68|0);\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($3);\n $4 = ((($2)) + 36|0);\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($4);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip22chunk_table_read_errorD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip22chunk_table_read_errorD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13not_supportedD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13not_supportedD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip26unknown_chunk_table_formatD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip26unknown_chunk_table_formatD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEE8__appendEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0;\n var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $8 = sp;\n $11 = sp + 140|0;\n $19 = sp + 76|0;\n $22 = sp + 64|0;\n $33 = sp + 4|0;\n $30 = $0;\n $31 = $1;\n $34 = $30;\n $29 = $34;\n $35 = $29;\n $36 = ((($35)) + 8|0);\n $28 = $36;\n $37 = $28;\n $27 = $37;\n $38 = $27;\n $39 = HEAP32[$38>>2]|0;\n $40 = ((($34)) + 4|0);\n $41 = HEAP32[$40>>2]|0;\n $42 = $39;\n $43 = $41;\n $44 = (($42) - ($43))|0;\n $45 = (($44|0) / 8)&-1;\n $46 = $31;\n $47 = ($45>>>0)>=($46>>>0);\n if ($47) {\n  $48 = $31;\n  __ZNSt3__26vectorIyNS_9allocatorIyEEE18__construct_at_endEj($34,$48);\n  STACKTOP = sp;return;\n }\n $26 = $34;\n $49 = $26;\n $50 = ((($49)) + 8|0);\n $25 = $50;\n $51 = $25;\n $24 = $51;\n $52 = $24;\n $32 = $52;\n $23 = $34;\n $53 = $23;\n $54 = ((($53)) + 4|0);\n $55 = HEAP32[$54>>2]|0;\n $56 = HEAP32[$53>>2]|0;\n $57 = $55;\n $58 = $56;\n $59 = (($57) - ($58))|0;\n $60 = (($59|0) / 8)&-1;\n $61 = $31;\n $62 = (($60) + ($61))|0;\n $18 = $34;\n HEAP32[$19>>2] = $62;\n $63 = $18;\n $64 = (__ZNKSt3__26vectorIyNS_9allocatorIyEEE8max_sizeEv($63)|0);\n $20 = $64;\n $65 = HEAP32[$19>>2]|0;\n $66 = $20;\n $67 = ($65>>>0)>($66>>>0);\n if ($67) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($63);\n  // unreachable;\n }\n $16 = $63;\n $68 = $16;\n $15 = $68;\n $69 = $15;\n $14 = $69;\n $70 = $14;\n $71 = ((($70)) + 8|0);\n $13 = $71;\n $72 = $13;\n $12 = $72;\n $73 = $12;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 8)&-1;\n $21 = $79;\n $80 = $21;\n $81 = $20;\n $82 = (($81>>>0) / 2)&-1;\n $83 = ($80>>>0)>=($82>>>0);\n if ($83) {\n  $84 = $20;\n  $17 = $84;\n } else {\n  $85 = $21;\n  $86 = $85<<1;\n  HEAP32[$22>>2] = $86;\n  $9 = $22;\n  $10 = $19;\n  $87 = $9;\n  $88 = $10;\n  ;HEAP8[$8>>0]=HEAP8[$11>>0]|0;\n  $6 = $87;\n  $7 = $88;\n  $89 = $6;\n  $90 = $7;\n  $3 = $8;\n  $4 = $89;\n  $5 = $90;\n  $91 = $4;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = $5;\n  $94 = HEAP32[$93>>2]|0;\n  $95 = ($92>>>0)<($94>>>0);\n  $96 = $7;\n  $97 = $6;\n  $98 = $95 ? $96 : $97;\n  $99 = HEAP32[$98>>2]|0;\n  $17 = $99;\n }\n $100 = $17;\n $2 = $34;\n $101 = $2;\n $102 = ((($101)) + 4|0);\n $103 = HEAP32[$102>>2]|0;\n $104 = HEAP32[$101>>2]|0;\n $105 = $103;\n $106 = $104;\n $107 = (($105) - ($106))|0;\n $108 = (($107|0) / 8)&-1;\n $109 = $32;\n __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEEC2EjjS3_($33,$100,$108,$109);\n $110 = $31;\n __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEE18__construct_at_endEj($33,$110);\n __ZNSt3__26vectorIyNS_9allocatorIyEEE26__swap_out_circular_bufferERNS_14__split_bufferIyRS2_EE($34,$33);\n __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEED2Ev($33);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEE18__construct_at_endEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $10 = sp;\n $13 = sp + 73|0;\n $21 = sp + 72|0;\n $18 = $0;\n $19 = $1;\n $22 = $18;\n $17 = $22;\n $23 = $17;\n $24 = ((($23)) + 8|0);\n $16 = $24;\n $25 = $16;\n $15 = $25;\n $26 = $15;\n $20 = $26;\n while(1) {\n  $2 = $21;\n  $3 = $22;\n  $4 = 1;\n  $27 = $20;\n  $28 = ((($22)) + 4|0);\n  $29 = HEAP32[$28>>2]|0;\n  $5 = $29;\n  $30 = $5;\n  $11 = $27;\n  $12 = $30;\n  $31 = $11;\n  $32 = $12;\n  ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n  $8 = $31;\n  $9 = $32;\n  $33 = $8;\n  $34 = $9;\n  $6 = $33;\n  $7 = $34;\n  $35 = $7;\n  $36 = $35;\n  $37 = $36;\n  HEAP32[$37>>2] = 0;\n  $38 = (($36) + 4)|0;\n  $39 = $38;\n  HEAP32[$39>>2] = 0;\n  $40 = ((($22)) + 4|0);\n  $41 = HEAP32[$40>>2]|0;\n  $42 = ((($41)) + 8|0);\n  HEAP32[$40>>2] = $42;\n  $43 = $19;\n  $44 = (($43) + -1)|0;\n  $19 = $44;\n  $14 = $21;\n  $45 = $19;\n  $46 = ($45>>>0)>(0);\n  if (!($46)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEEC2EjjS3_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(536870911);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = $68<<3;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + ($74<<3)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + ($79<<3)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEE18__construct_at_endEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $7 = sp;\n $10 = sp + 56|0;\n $14 = $0;\n $15 = $1;\n $17 = $14;\n $13 = $17;\n $18 = $13;\n $19 = ((($18)) + 12|0);\n $12 = $19;\n $20 = $12;\n $21 = ((($20)) + 4|0);\n $11 = $21;\n $22 = $11;\n $23 = HEAP32[$22>>2]|0;\n $16 = $23;\n while(1) {\n  $24 = $16;\n  $25 = ((($17)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  $2 = $26;\n  $27 = $2;\n  $8 = $24;\n  $9 = $27;\n  $28 = $8;\n  $29 = $9;\n  ;HEAP8[$7>>0]=HEAP8[$10>>0]|0;\n  $5 = $28;\n  $6 = $29;\n  $30 = $5;\n  $31 = $6;\n  $3 = $30;\n  $4 = $31;\n  $32 = $4;\n  $33 = $32;\n  $34 = $33;\n  HEAP32[$34>>2] = 0;\n  $35 = (($33) + 4)|0;\n  $36 = $35;\n  HEAP32[$36>>2] = 0;\n  $37 = ((($17)) + 8|0);\n  $38 = HEAP32[$37>>2]|0;\n  $39 = ((($38)) + 8|0);\n  HEAP32[$37>>2] = $39;\n  $40 = $15;\n  $41 = (($40) + -1)|0;\n  $15 = $41;\n  $42 = $15;\n  $43 = ($42>>>0)>(0);\n  if (!($43)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIyNS_9allocatorIyEEE26__swap_out_circular_bufferERNS_14__split_bufferIyRS2_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0);\n $15 = sp + 288|0;\n $21 = sp + 264|0;\n $33 = sp + 216|0;\n $86 = $0;\n $87 = $1;\n $88 = $86;\n $85 = $88;\n $89 = $85;\n $84 = $89;\n $90 = $84;\n $91 = HEAP32[$90>>2]|0;\n $83 = $91;\n $92 = $83;\n $62 = $89;\n $93 = $62;\n $94 = HEAP32[$93>>2]|0;\n $61 = $94;\n $95 = $61;\n $67 = $89;\n $96 = $67;\n $66 = $96;\n $97 = $66;\n $65 = $97;\n $98 = $65;\n $99 = ((($98)) + 8|0);\n $64 = $99;\n $100 = $64;\n $63 = $100;\n $101 = $63;\n $102 = HEAP32[$101>>2]|0;\n $103 = HEAP32[$97>>2]|0;\n $104 = $102;\n $105 = $103;\n $106 = (($104) - ($105))|0;\n $107 = (($106|0) / 8)&-1;\n $108 = (($95) + ($107<<3)|0);\n $69 = $89;\n $109 = $69;\n $110 = HEAP32[$109>>2]|0;\n $68 = $110;\n $111 = $68;\n $70 = $89;\n $112 = $70;\n $113 = ((($112)) + 4|0);\n $114 = HEAP32[$113>>2]|0;\n $115 = HEAP32[$112>>2]|0;\n $116 = $114;\n $117 = $115;\n $118 = (($116) - ($117))|0;\n $119 = (($118|0) / 8)&-1;\n $120 = (($111) + ($119<<3)|0);\n $72 = $89;\n $121 = $72;\n $122 = HEAP32[$121>>2]|0;\n $71 = $122;\n $123 = $71;\n $77 = $89;\n $124 = $77;\n $76 = $124;\n $125 = $76;\n $75 = $125;\n $126 = $75;\n $127 = ((($126)) + 8|0);\n $74 = $127;\n $128 = $74;\n $73 = $128;\n $129 = $73;\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$125>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 8)&-1;\n $136 = (($123) + ($135<<3)|0);\n $78 = $89;\n $79 = $92;\n $80 = $108;\n $81 = $120;\n $82 = $136;\n $4 = $88;\n $137 = $4;\n $138 = ((($137)) + 8|0);\n $3 = $138;\n $139 = $3;\n $2 = $139;\n $140 = $2;\n $141 = HEAP32[$88>>2]|0;\n $142 = ((($88)) + 4|0);\n $143 = HEAP32[$142>>2]|0;\n $144 = $87;\n $145 = ((($144)) + 4|0);\n $5 = $140;\n $6 = $141;\n $7 = $143;\n $8 = $145;\n $146 = $7;\n $147 = $6;\n $148 = $146;\n $149 = $147;\n $150 = (($148) - ($149))|0;\n $151 = (($150|0) / 8)&-1;\n $9 = $151;\n $152 = $9;\n $153 = $8;\n $154 = HEAP32[$153>>2]|0;\n $155 = (0 - ($152))|0;\n $156 = (($154) + ($155<<3)|0);\n HEAP32[$153>>2] = $156;\n $157 = $9;\n $158 = ($157|0)>(0);\n if ($158) {\n  $159 = $8;\n  $160 = HEAP32[$159>>2]|0;\n  $161 = $6;\n  $162 = $9;\n  $163 = $162<<3;\n  _memcpy(($160|0),($161|0),($163|0))|0;\n }\n $164 = $87;\n $165 = ((($164)) + 4|0);\n $13 = $88;\n $14 = $165;\n $166 = $13;\n $12 = $166;\n $167 = $12;\n $168 = HEAP32[$167>>2]|0;\n HEAP32[$15>>2] = $168;\n $169 = $14;\n $10 = $169;\n $170 = $10;\n $171 = HEAP32[$170>>2]|0;\n $172 = $13;\n HEAP32[$172>>2] = $171;\n $11 = $15;\n $173 = $11;\n $174 = HEAP32[$173>>2]|0;\n $175 = $14;\n HEAP32[$175>>2] = $174;\n $176 = ((($88)) + 4|0);\n $177 = $87;\n $178 = ((($177)) + 8|0);\n $19 = $176;\n $20 = $178;\n $179 = $19;\n $18 = $179;\n $180 = $18;\n $181 = HEAP32[$180>>2]|0;\n HEAP32[$21>>2] = $181;\n $182 = $20;\n $16 = $182;\n $183 = $16;\n $184 = HEAP32[$183>>2]|0;\n $185 = $19;\n HEAP32[$185>>2] = $184;\n $17 = $21;\n $186 = $17;\n $187 = HEAP32[$186>>2]|0;\n $188 = $20;\n HEAP32[$188>>2] = $187;\n $24 = $88;\n $189 = $24;\n $190 = ((($189)) + 8|0);\n $23 = $190;\n $191 = $23;\n $22 = $191;\n $192 = $22;\n $193 = $87;\n $27 = $193;\n $194 = $27;\n $195 = ((($194)) + 12|0);\n $26 = $195;\n $196 = $26;\n $25 = $196;\n $197 = $25;\n $31 = $192;\n $32 = $197;\n $198 = $31;\n $30 = $198;\n $199 = $30;\n $200 = HEAP32[$199>>2]|0;\n HEAP32[$33>>2] = $200;\n $201 = $32;\n $28 = $201;\n $202 = $28;\n $203 = HEAP32[$202>>2]|0;\n $204 = $31;\n HEAP32[$204>>2] = $203;\n $29 = $33;\n $205 = $29;\n $206 = HEAP32[$205>>2]|0;\n $207 = $32;\n HEAP32[$207>>2] = $206;\n $208 = $87;\n $209 = ((($208)) + 4|0);\n $210 = HEAP32[$209>>2]|0;\n $211 = $87;\n HEAP32[$211>>2] = $210;\n $34 = $88;\n $212 = $34;\n $213 = ((($212)) + 4|0);\n $214 = HEAP32[$213>>2]|0;\n $215 = HEAP32[$212>>2]|0;\n $216 = $214;\n $217 = $215;\n $218 = (($216) - ($217))|0;\n $219 = (($218|0) / 8)&-1;\n $58 = $88;\n $59 = $219;\n $220 = $58;\n $57 = $220;\n $221 = $57;\n $222 = HEAP32[$221>>2]|0;\n $56 = $222;\n $223 = $56;\n $36 = $220;\n $224 = $36;\n $225 = HEAP32[$224>>2]|0;\n $35 = $225;\n $226 = $35;\n $41 = $220;\n $227 = $41;\n $40 = $227;\n $228 = $40;\n $39 = $228;\n $229 = $39;\n $230 = ((($229)) + 8|0);\n $38 = $230;\n $231 = $38;\n $37 = $231;\n $232 = $37;\n $233 = HEAP32[$232>>2]|0;\n $234 = HEAP32[$228>>2]|0;\n $235 = $233;\n $236 = $234;\n $237 = (($235) - ($236))|0;\n $238 = (($237|0) / 8)&-1;\n $239 = (($226) + ($238<<3)|0);\n $43 = $220;\n $240 = $43;\n $241 = HEAP32[$240>>2]|0;\n $42 = $241;\n $242 = $42;\n $48 = $220;\n $243 = $48;\n $47 = $243;\n $244 = $47;\n $46 = $244;\n $245 = $46;\n $246 = ((($245)) + 8|0);\n $45 = $246;\n $247 = $45;\n $44 = $247;\n $248 = $44;\n $249 = HEAP32[$248>>2]|0;\n $250 = HEAP32[$244>>2]|0;\n $251 = $249;\n $252 = $250;\n $253 = (($251) - ($252))|0;\n $254 = (($253|0) / 8)&-1;\n $255 = (($242) + ($254<<3)|0);\n $50 = $220;\n $256 = $50;\n $257 = HEAP32[$256>>2]|0;\n $49 = $257;\n $258 = $49;\n $259 = $59;\n $260 = (($258) + ($259<<3)|0);\n $51 = $220;\n $52 = $223;\n $53 = $239;\n $54 = $255;\n $55 = $260;\n $60 = $88;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -8|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n }\n $60 = HEAP32[$35>>2]|0;\n $61 = ($60|0)!=(0|0);\n if (!($61)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $62 = $14;\n $63 = ((($62)) + 12|0);\n $13 = $63;\n $64 = $13;\n $65 = ((($64)) + 4|0);\n $12 = $65;\n $66 = $12;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$35>>2]|0;\n $4 = $35;\n $69 = $4;\n $3 = $69;\n $70 = $3;\n $71 = ((($70)) + 12|0);\n $2 = $71;\n $72 = $2;\n $1 = $72;\n $73 = $1;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 8)&-1;\n $9 = $67;\n $10 = $68;\n $11 = $79;\n $80 = $9;\n $81 = $10;\n $82 = $11;\n $6 = $80;\n $7 = $81;\n $8 = $82;\n $83 = $7;\n $5 = $83;\n $84 = $5;\n __ZdlPv($84);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorIyNS_9allocatorIyEEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 536870911;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZN6laszip6models14arithmetic_bitC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 12|0);\n HEAP32[$3>>2] = 1;\n $4 = ((($2)) + 16|0);\n HEAP32[$4>>2] = 2;\n $5 = ((($2)) + 8|0);\n HEAP32[$5>>2] = 4096;\n $6 = ((($2)) + 4|0);\n HEAP32[$6>>2] = 4;\n HEAP32[$2>>2] = 4;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -44|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n  $54 = $16;\n  __ZN6laszip6models10arithmeticD2Ev($54);\n }\n $55 = $28;\n $56 = ((($37)) + 4|0);\n HEAP32[$56>>2] = $55;\n $14 = $32;\n $57 = $14;\n $58 = ((($57)) + 8|0);\n $13 = $58;\n $59 = $13;\n $12 = $59;\n $60 = $12;\n $61 = HEAP32[$32>>2]|0;\n $4 = $32;\n $62 = $4;\n $3 = $62;\n $63 = $3;\n $64 = ((($63)) + 8|0);\n $2 = $64;\n $65 = $2;\n $1 = $65;\n $66 = $1;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$62>>2]|0;\n $69 = $67;\n $70 = $68;\n $71 = (($69) - ($70))|0;\n $72 = (($71|0) / 44)&-1;\n $9 = $60;\n $10 = $61;\n $11 = $72;\n $73 = $9;\n $74 = $10;\n $75 = $11;\n $6 = $73;\n $7 = $74;\n $8 = $75;\n $76 = $7;\n $5 = $76;\n $77 = $5;\n __ZdlPv($77);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip6models10arithmeticD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 8|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ($4|0)!=(0|0);\n if ($5) {\n  $6 = ((($2)) + 8|0);\n  $7 = HEAP32[$6>>2]|0;\n  __ZN6laszip5utilsL12aligned_freeEPv($7);\n }\n $8 = ((($2)) + 12|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = ($9|0)!=(0|0);\n if ($10) {\n  $11 = ((($2)) + 12|0);\n  $12 = HEAP32[$11>>2]|0;\n  __ZN6laszip5utilsL12aligned_freeEPv($12);\n }\n $13 = ((($2)) + 16|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = ($14|0)!=(0|0);\n if (!($15)) {\n  STACKTOP = sp;return;\n }\n $16 = ((($2)) + 16|0);\n $17 = HEAP32[$16>>2]|0;\n __ZN6laszip5utilsL12aligned_freeEPv($17);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ((($2)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = ($4|0)>=($6|0);\n if ($7) {\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($2);\n }\n $8 = ((($2)) + 12|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = ((($2)) + 4|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = (($11) + 1)|0;\n HEAP32[$10>>2] = $12;\n $13 = (($9) + ($11)|0);\n $14 = HEAP8[$13>>0]|0;\n STACKTOP = sp;return ($14|0);\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n HEAP32[$3>>2] = 0;\n $4 = HEAP32[$2>>2]|0;\n $5 = ((($2)) + 12|0);\n $6 = HEAP32[$5>>2]|0;\n __ZN6laszip7streams13memory_stream4readEPci($4,$6,1048576);\n $7 = HEAP32[$2>>2]|0;\n $8 = (__ZN6laszip7streams13memory_stream6gcountEv($7)|0);\n $9 = ((($2)) + 8|0);\n HEAP32[$9>>2] = $8;\n $10 = ((($2)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = ($11|0)==(0);\n if ($12) {\n  $13 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip11end_of_fileC2Ev($13);\n  ___cxa_throw(($13|0),(216|0),(40|0));\n  // unreachable;\n } else {\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7streams13memory_stream6gcountEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 16|0);\n $4 = HEAP32[$3>>2]|0;\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZN6laszip11end_of_fileC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,5363);\n HEAP32[$2>>2] = (1888);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip11end_of_fileD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip11end_of_fileD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11end_of_fileD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip6models10arithmeticC2EjbPj($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = $0;\n $5 = $1;\n $11 = $2&1;\n $6 = $11;\n $7 = $3;\n $12 = $4;\n $13 = $5;\n HEAP32[$12>>2] = $13;\n $14 = ((($12)) + 4|0);\n $15 = $6;\n $16 = $15&1;\n $17 = $16&1;\n HEAP8[$14>>0] = $17;\n $18 = ((($12)) + 8|0);\n HEAP32[$18>>2] = 0;\n $19 = ((($12)) + 12|0);\n HEAP32[$19>>2] = 0;\n $20 = ((($12)) + 16|0);\n HEAP32[$20>>2] = 0;\n $21 = HEAP32[$12>>2]|0;\n $22 = ($21>>>0)<(2);\n if ($22) {\n  $25 = (___cxa_allocate_exception(8)|0);\n  __ZNSt13runtime_errorC2EPKc($25,5383);\n  ___cxa_throw(($25|0),(1368|0),(223|0));\n  // unreachable;\n }\n $23 = HEAP32[$12>>2]|0;\n $24 = ($23>>>0)>(2048);\n if ($24) {\n  $25 = (___cxa_allocate_exception(8)|0);\n  __ZNSt13runtime_errorC2EPKc($25,5383);\n  ___cxa_throw(($25|0),(1368|0),(223|0));\n  // unreachable;\n }\n $26 = HEAP32[$12>>2]|0;\n $27 = (($26) - 1)|0;\n $28 = ((($12)) + 32|0);\n HEAP32[$28>>2] = $27;\n $29 = ((($12)) + 4|0);\n $30 = HEAP8[$29>>0]|0;\n $31 = $30&1;\n if ($31) {\n  label = 10;\n } else {\n  $32 = HEAP32[$12>>2]|0;\n  $33 = ($32>>>0)>(16);\n  if ($33) {\n   $8 = 3;\n   while(1) {\n    $34 = HEAP32[$12>>2]|0;\n    $35 = $8;\n    $36 = (($35) + 2)|0;\n    $37 = 1 << $36;\n    $38 = ($34>>>0)>($37>>>0);\n    $39 = $8;\n    if (!($38)) {\n     break;\n    }\n    $40 = (($39) + 1)|0;\n    $8 = $40;\n   }\n   $41 = 1 << $39;\n   $42 = ((($12)) + 36|0);\n   HEAP32[$42>>2] = $41;\n   $43 = $8;\n   $44 = (15 - ($43))|0;\n   $45 = ((($12)) + 40|0);\n   HEAP32[$45>>2] = $44;\n   $46 = ((($12)) + 36|0);\n   $47 = HEAP32[$46>>2]|0;\n   $48 = (($47) + 2)|0;\n   $49 = $48<<2;\n   $50 = (__ZN6laszip5utilsL14aligned_mallocEi($49)|0);\n   $51 = ((($12)) + 16|0);\n   HEAP32[$51>>2] = $50;\n  } else {\n   label = 10;\n  }\n }\n if ((label|0) == 10) {\n  $52 = ((($12)) + 16|0);\n  HEAP32[$52>>2] = 0;\n  $53 = ((($12)) + 40|0);\n  HEAP32[$53>>2] = 0;\n  $54 = ((($12)) + 36|0);\n  HEAP32[$54>>2] = 0;\n }\n $55 = HEAP32[$12>>2]|0;\n $56 = $55<<2;\n $57 = (__ZN6laszip5utilsL14aligned_mallocEi($56)|0);\n $58 = ((($12)) + 8|0);\n HEAP32[$58>>2] = $57;\n $59 = HEAP32[$12>>2]|0;\n $60 = $59<<2;\n $61 = (__ZN6laszip5utilsL14aligned_mallocEi($60)|0);\n $62 = ((($12)) + 12|0);\n HEAP32[$62>>2] = $61;\n $63 = ((($12)) + 20|0);\n HEAP32[$63>>2] = 0;\n $64 = HEAP32[$12>>2]|0;\n $65 = ((($12)) + 24|0);\n HEAP32[$65>>2] = $64;\n $66 = $7;\n $67 = ($66|0)!=(0|0);\n if ($67) {\n  $9 = 0;\n  while(1) {\n   $68 = $9;\n   $69 = HEAP32[$12>>2]|0;\n   $70 = ($68>>>0)<($69>>>0);\n   if (!($70)) {\n    break;\n   }\n   $71 = $7;\n   $72 = $9;\n   $73 = (($71) + ($72<<2)|0);\n   $74 = HEAP32[$73>>2]|0;\n   $75 = ((($12)) + 12|0);\n   $76 = HEAP32[$75>>2]|0;\n   $77 = $9;\n   $78 = (($76) + ($77<<2)|0);\n   HEAP32[$78>>2] = $74;\n   $79 = $9;\n   $80 = (($79) + 1)|0;\n   $9 = $80;\n  }\n  __ZN6laszip6models10arithmetic6updateEv($12);\n  $90 = HEAP32[$12>>2]|0;\n  $91 = (($90) + 6)|0;\n  $92 = $91 >>> 1;\n  $93 = ((($12)) + 24|0);\n  HEAP32[$93>>2] = $92;\n  $94 = ((($12)) + 28|0);\n  HEAP32[$94>>2] = $92;\n  STACKTOP = sp;return;\n } else {\n  $10 = 0;\n  while(1) {\n   $81 = $10;\n   $82 = HEAP32[$12>>2]|0;\n   $83 = ($81>>>0)<($82>>>0);\n   if (!($83)) {\n    break;\n   }\n   $84 = ((($12)) + 12|0);\n   $85 = HEAP32[$84>>2]|0;\n   $86 = $10;\n   $87 = (($85) + ($86<<2)|0);\n   HEAP32[$87>>2] = 1;\n   $88 = $10;\n   $89 = (($88) + 1)|0;\n   $10 = $89;\n  }\n  __ZN6laszip6models10arithmetic6updateEv($12);\n  $90 = HEAP32[$12>>2]|0;\n  $91 = (($90) + 6)|0;\n  $92 = $91 >>> 1;\n  $93 = ((($12)) + 24|0);\n  HEAP32[$93>>2] = $92;\n  $94 = ((($12)) + 28|0);\n  HEAP32[$94>>2] = $92;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $10 = sp + 8|0;\n $15 = sp + 193|0;\n $24 = sp;\n $27 = sp + 192|0;\n $35 = sp + 72|0;\n $38 = sp + 60|0;\n $46 = sp + 12|0;\n $43 = $0;\n $44 = $1;\n $47 = $43;\n $42 = $47;\n $48 = $42;\n $49 = ((($48)) + 8|0);\n $41 = $49;\n $50 = $41;\n $40 = $50;\n $51 = $40;\n $45 = $51;\n $39 = $47;\n $52 = $39;\n $53 = ((($52)) + 4|0);\n $54 = HEAP32[$53>>2]|0;\n $55 = HEAP32[$52>>2]|0;\n $56 = $54;\n $57 = $55;\n $58 = (($56) - ($57))|0;\n $59 = (($58|0) / 44)&-1;\n $60 = (($59) + 1)|0;\n $34 = $47;\n HEAP32[$35>>2] = $60;\n $61 = $34;\n $62 = (__ZNKSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8max_sizeEv($61)|0);\n $36 = $62;\n $63 = HEAP32[$35>>2]|0;\n $64 = $36;\n $65 = ($63>>>0)>($64>>>0);\n if ($65) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61);\n  // unreachable;\n }\n $32 = $61;\n $66 = $32;\n $31 = $66;\n $67 = $31;\n $30 = $67;\n $68 = $30;\n $69 = ((($68)) + 8|0);\n $29 = $69;\n $70 = $29;\n $28 = $70;\n $71 = $28;\n $72 = HEAP32[$71>>2]|0;\n $73 = HEAP32[$67>>2]|0;\n $74 = $72;\n $75 = $73;\n $76 = (($74) - ($75))|0;\n $77 = (($76|0) / 44)&-1;\n $37 = $77;\n $78 = $37;\n $79 = $36;\n $80 = (($79>>>0) / 2)&-1;\n $81 = ($78>>>0)>=($80>>>0);\n if ($81) {\n  $82 = $36;\n  $33 = $82;\n } else {\n  $83 = $37;\n  $84 = $83<<1;\n  HEAP32[$38>>2] = $84;\n  $25 = $38;\n  $26 = $35;\n  $85 = $25;\n  $86 = $26;\n  ;HEAP8[$24>>0]=HEAP8[$27>>0]|0;\n  $22 = $85;\n  $23 = $86;\n  $87 = $22;\n  $88 = $23;\n  $19 = $24;\n  $20 = $87;\n  $21 = $88;\n  $89 = $20;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = $21;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = ($90>>>0)<($92>>>0);\n  $94 = $23;\n  $95 = $22;\n  $96 = $93 ? $94 : $95;\n  $97 = HEAP32[$96>>2]|0;\n  $33 = $97;\n }\n $98 = $33;\n $18 = $47;\n $99 = $18;\n $100 = ((($99)) + 4|0);\n $101 = HEAP32[$100>>2]|0;\n $102 = HEAP32[$99>>2]|0;\n $103 = $101;\n $104 = $102;\n $105 = (($103) - ($104))|0;\n $106 = (($105|0) / 44)&-1;\n $107 = $45;\n __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEEC2EjjS6_($46,$98,$106,$107);\n $108 = $45;\n $109 = ((($46)) + 8|0);\n $110 = HEAP32[$109>>2]|0;\n $17 = $110;\n $111 = $17;\n $112 = $44;\n $16 = $112;\n $113 = $16;\n $12 = $108;\n $13 = $111;\n $14 = $113;\n $114 = $12;\n $115 = $13;\n $116 = $14;\n $11 = $116;\n $117 = $11;\n ;HEAP8[$10>>0]=HEAP8[$15>>0]|0;\n $7 = $114;\n $8 = $115;\n $9 = $117;\n $118 = $7;\n $119 = $8;\n $120 = $9;\n $6 = $120;\n $121 = $6;\n $3 = $118;\n $4 = $119;\n $5 = $121;\n $122 = $4;\n $123 = $5;\n $2 = $123;\n $124 = $2;\n __ZN6laszip6models10arithmeticC2EOS1_($122,$124);\n $125 = ((($46)) + 8|0);\n $126 = HEAP32[$125>>2]|0;\n $127 = ((($126)) + 44|0);\n HEAP32[$125>>2] = $127;\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($47,$46);\n __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEED2Ev($46);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip6models10arithmeticC2EOS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n $6 = HEAP32[$5>>2]|0;\n HEAP32[$4>>2] = $6;\n $7 = ((($4)) + 4|0);\n $8 = $3;\n $9 = ((($8)) + 4|0);\n $10 = HEAP8[$9>>0]|0;\n $11 = $10&1;\n $12 = $11&1;\n HEAP8[$7>>0] = $12;\n $13 = ((($4)) + 8|0);\n $14 = $3;\n $15 = ((($14)) + 8|0);\n $16 = HEAP32[$15>>2]|0;\n HEAP32[$13>>2] = $16;\n $17 = ((($4)) + 12|0);\n $18 = $3;\n $19 = ((($18)) + 12|0);\n $20 = HEAP32[$19>>2]|0;\n HEAP32[$17>>2] = $20;\n $21 = ((($4)) + 16|0);\n $22 = $3;\n $23 = ((($22)) + 16|0);\n $24 = HEAP32[$23>>2]|0;\n HEAP32[$21>>2] = $24;\n $25 = ((($4)) + 20|0);\n $26 = $3;\n $27 = ((($26)) + 20|0);\n $28 = HEAP32[$27>>2]|0;\n HEAP32[$25>>2] = $28;\n $29 = ((($4)) + 24|0);\n $30 = $3;\n $31 = ((($30)) + 24|0);\n $32 = HEAP32[$31>>2]|0;\n HEAP32[$29>>2] = $32;\n $33 = ((($4)) + 28|0);\n $34 = $3;\n $35 = ((($34)) + 28|0);\n $36 = HEAP32[$35>>2]|0;\n HEAP32[$33>>2] = $36;\n $37 = ((($4)) + 32|0);\n $38 = $3;\n $39 = ((($38)) + 32|0);\n $40 = HEAP32[$39>>2]|0;\n HEAP32[$37>>2] = $40;\n $41 = ((($4)) + 36|0);\n $42 = $3;\n $43 = ((($42)) + 36|0);\n $44 = HEAP32[$43>>2]|0;\n HEAP32[$41>>2] = $44;\n $45 = ((($4)) + 40|0);\n $46 = $3;\n $47 = ((($46)) + 40|0);\n $48 = HEAP32[$47>>2]|0;\n HEAP32[$45>>2] = $48;\n $49 = $3;\n $50 = ((($49)) + 12|0);\n HEAP32[$50>>2] = 0;\n $51 = $3;\n $52 = ((($51)) + 16|0);\n HEAP32[$52>>2] = 0;\n $53 = $3;\n $54 = ((($53)) + 8|0);\n HEAP32[$54>>2] = 0;\n $55 = $3;\n $56 = ((($55)) + 12|0);\n HEAP32[$56>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEEC2EjjS6_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(97612893);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = ($68*44)|0;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + (($74*44)|0)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + (($79*44)|0)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0;\n var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0;\n var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;\n var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;\n var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;\n var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;\n var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0);\n $15 = sp;\n $20 = sp + 404|0;\n $31 = sp + 292|0;\n $37 = sp + 268|0;\n $49 = sp + 220|0;\n $102 = $0;\n $103 = $1;\n $104 = $102;\n $101 = $104;\n $105 = $101;\n $100 = $105;\n $106 = $100;\n $107 = HEAP32[$106>>2]|0;\n $99 = $107;\n $108 = $99;\n $78 = $105;\n $109 = $78;\n $110 = HEAP32[$109>>2]|0;\n $77 = $110;\n $111 = $77;\n $83 = $105;\n $112 = $83;\n $82 = $112;\n $113 = $82;\n $81 = $113;\n $114 = $81;\n $115 = ((($114)) + 8|0);\n $80 = $115;\n $116 = $80;\n $79 = $116;\n $117 = $79;\n $118 = HEAP32[$117>>2]|0;\n $119 = HEAP32[$113>>2]|0;\n $120 = $118;\n $121 = $119;\n $122 = (($120) - ($121))|0;\n $123 = (($122|0) / 44)&-1;\n $124 = (($111) + (($123*44)|0)|0);\n $85 = $105;\n $125 = $85;\n $126 = HEAP32[$125>>2]|0;\n $84 = $126;\n $127 = $84;\n $86 = $105;\n $128 = $86;\n $129 = ((($128)) + 4|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = HEAP32[$128>>2]|0;\n $132 = $130;\n $133 = $131;\n $134 = (($132) - ($133))|0;\n $135 = (($134|0) / 44)&-1;\n $136 = (($127) + (($135*44)|0)|0);\n $88 = $105;\n $137 = $88;\n $138 = HEAP32[$137>>2]|0;\n $87 = $138;\n $139 = $87;\n $93 = $105;\n $140 = $93;\n $92 = $140;\n $141 = $92;\n $91 = $141;\n $142 = $91;\n $143 = ((($142)) + 8|0);\n $90 = $143;\n $144 = $90;\n $89 = $144;\n $145 = $89;\n $146 = HEAP32[$145>>2]|0;\n $147 = HEAP32[$141>>2]|0;\n $148 = $146;\n $149 = $147;\n $150 = (($148) - ($149))|0;\n $151 = (($150|0) / 44)&-1;\n $152 = (($139) + (($151*44)|0)|0);\n $94 = $105;\n $95 = $108;\n $96 = $124;\n $97 = $136;\n $98 = $152;\n $4 = $104;\n $153 = $4;\n $154 = ((($153)) + 8|0);\n $3 = $154;\n $155 = $3;\n $2 = $155;\n $156 = $2;\n $157 = HEAP32[$104>>2]|0;\n $158 = ((($104)) + 4|0);\n $159 = HEAP32[$158>>2]|0;\n $160 = $103;\n $161 = ((($160)) + 4|0);\n $22 = $156;\n $23 = $157;\n $24 = $159;\n $25 = $161;\n while(1) {\n  $162 = $24;\n  $163 = $23;\n  $164 = ($162|0)!=($163|0);\n  if (!($164)) {\n   break;\n  }\n  $165 = $22;\n  $166 = $25;\n  $167 = HEAP32[$166>>2]|0;\n  $168 = ((($167)) + -44|0);\n  $21 = $168;\n  $169 = $21;\n  $170 = $24;\n  $171 = ((($170)) + -44|0);\n  $24 = $171;\n  $6 = $171;\n  $172 = $6;\n  $5 = $172;\n  $173 = $5;\n  $17 = $165;\n  $18 = $169;\n  $19 = $173;\n  $174 = $17;\n  $175 = $18;\n  $176 = $19;\n  $16 = $176;\n  $177 = $16;\n  ;HEAP8[$15>>0]=HEAP8[$20>>0]|0;\n  $12 = $174;\n  $13 = $175;\n  $14 = $177;\n  $178 = $12;\n  $179 = $13;\n  $180 = $14;\n  $11 = $180;\n  $181 = $11;\n  $8 = $178;\n  $9 = $179;\n  $10 = $181;\n  $182 = $9;\n  $183 = $10;\n  $7 = $183;\n  $184 = $7;\n  __ZN6laszip6models10arithmeticC2ERKS1_($182,$184);\n  $185 = $25;\n  $186 = HEAP32[$185>>2]|0;\n  $187 = ((($186)) + -44|0);\n  HEAP32[$185>>2] = $187;\n }\n $188 = $103;\n $189 = ((($188)) + 4|0);\n $29 = $104;\n $30 = $189;\n $190 = $29;\n $28 = $190;\n $191 = $28;\n $192 = HEAP32[$191>>2]|0;\n HEAP32[$31>>2] = $192;\n $193 = $30;\n $26 = $193;\n $194 = $26;\n $195 = HEAP32[$194>>2]|0;\n $196 = $29;\n HEAP32[$196>>2] = $195;\n $27 = $31;\n $197 = $27;\n $198 = HEAP32[$197>>2]|0;\n $199 = $30;\n HEAP32[$199>>2] = $198;\n $200 = ((($104)) + 4|0);\n $201 = $103;\n $202 = ((($201)) + 8|0);\n $35 = $200;\n $36 = $202;\n $203 = $35;\n $34 = $203;\n $204 = $34;\n $205 = HEAP32[$204>>2]|0;\n HEAP32[$37>>2] = $205;\n $206 = $36;\n $32 = $206;\n $207 = $32;\n $208 = HEAP32[$207>>2]|0;\n $209 = $35;\n HEAP32[$209>>2] = $208;\n $33 = $37;\n $210 = $33;\n $211 = HEAP32[$210>>2]|0;\n $212 = $36;\n HEAP32[$212>>2] = $211;\n $40 = $104;\n $213 = $40;\n $214 = ((($213)) + 8|0);\n $39 = $214;\n $215 = $39;\n $38 = $215;\n $216 = $38;\n $217 = $103;\n $43 = $217;\n $218 = $43;\n $219 = ((($218)) + 12|0);\n $42 = $219;\n $220 = $42;\n $41 = $220;\n $221 = $41;\n $47 = $216;\n $48 = $221;\n $222 = $47;\n $46 = $222;\n $223 = $46;\n $224 = HEAP32[$223>>2]|0;\n HEAP32[$49>>2] = $224;\n $225 = $48;\n $44 = $225;\n $226 = $44;\n $227 = HEAP32[$226>>2]|0;\n $228 = $47;\n HEAP32[$228>>2] = $227;\n $45 = $49;\n $229 = $45;\n $230 = HEAP32[$229>>2]|0;\n $231 = $48;\n HEAP32[$231>>2] = $230;\n $232 = $103;\n $233 = ((($232)) + 4|0);\n $234 = HEAP32[$233>>2]|0;\n $235 = $103;\n HEAP32[$235>>2] = $234;\n $50 = $104;\n $236 = $50;\n $237 = ((($236)) + 4|0);\n $238 = HEAP32[$237>>2]|0;\n $239 = HEAP32[$236>>2]|0;\n $240 = $238;\n $241 = $239;\n $242 = (($240) - ($241))|0;\n $243 = (($242|0) / 44)&-1;\n $74 = $104;\n $75 = $243;\n $244 = $74;\n $73 = $244;\n $245 = $73;\n $246 = HEAP32[$245>>2]|0;\n $72 = $246;\n $247 = $72;\n $52 = $244;\n $248 = $52;\n $249 = HEAP32[$248>>2]|0;\n $51 = $249;\n $250 = $51;\n $57 = $244;\n $251 = $57;\n $56 = $251;\n $252 = $56;\n $55 = $252;\n $253 = $55;\n $254 = ((($253)) + 8|0);\n $54 = $254;\n $255 = $54;\n $53 = $255;\n $256 = $53;\n $257 = HEAP32[$256>>2]|0;\n $258 = HEAP32[$252>>2]|0;\n $259 = $257;\n $260 = $258;\n $261 = (($259) - ($260))|0;\n $262 = (($261|0) / 44)&-1;\n $263 = (($250) + (($262*44)|0)|0);\n $59 = $244;\n $264 = $59;\n $265 = HEAP32[$264>>2]|0;\n $58 = $265;\n $266 = $58;\n $64 = $244;\n $267 = $64;\n $63 = $267;\n $268 = $63;\n $62 = $268;\n $269 = $62;\n $270 = ((($269)) + 8|0);\n $61 = $270;\n $271 = $61;\n $60 = $271;\n $272 = $60;\n $273 = HEAP32[$272>>2]|0;\n $274 = HEAP32[$268>>2]|0;\n $275 = $273;\n $276 = $274;\n $277 = (($275) - ($276))|0;\n $278 = (($277|0) / 44)&-1;\n $279 = (($266) + (($278*44)|0)|0);\n $66 = $244;\n $280 = $66;\n $281 = HEAP32[$280>>2]|0;\n $65 = $281;\n $282 = $65;\n $283 = $75;\n $284 = (($282) + (($283*44)|0)|0);\n $67 = $244;\n $68 = $247;\n $69 = $263;\n $70 = $279;\n $71 = $284;\n $76 = $104;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -44|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n  $60 = $16;\n  __ZN6laszip6models10arithmeticD2Ev($60);\n }\n $61 = HEAP32[$35>>2]|0;\n $62 = ($61|0)!=(0|0);\n if (!($62)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $63 = $14;\n $64 = ((($63)) + 12|0);\n $13 = $64;\n $65 = $13;\n $66 = ((($65)) + 4|0);\n $12 = $66;\n $67 = $12;\n $68 = HEAP32[$67>>2]|0;\n $69 = HEAP32[$35>>2]|0;\n $11 = $35;\n $70 = $11;\n $10 = $70;\n $71 = $10;\n $72 = ((($71)) + 12|0);\n $9 = $72;\n $73 = $9;\n $8 = $73;\n $74 = $8;\n $75 = HEAP32[$74>>2]|0;\n $76 = HEAP32[$70>>2]|0;\n $77 = $75;\n $78 = $76;\n $79 = (($77) - ($78))|0;\n $80 = (($79|0) / 44)&-1;\n $5 = $68;\n $6 = $69;\n $7 = $80;\n $81 = $5;\n $82 = $6;\n $83 = $7;\n $2 = $81;\n $3 = $82;\n $4 = $83;\n $84 = $3;\n $1 = $84;\n $85 = $1;\n __ZdlPv($85);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 97612893;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZN6laszip6models10arithmeticC2ERKS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $32 = $0;\n $33 = $1;\n $35 = $32;\n $36 = $33;\n $37 = HEAP32[$36>>2]|0;\n HEAP32[$35>>2] = $37;\n $38 = ((($35)) + 4|0);\n $39 = $33;\n $40 = ((($39)) + 4|0);\n $41 = HEAP8[$40>>0]|0;\n $42 = $41&1;\n $43 = $42&1;\n HEAP8[$38>>0] = $43;\n $44 = ((($35)) + 20|0);\n $45 = $33;\n $46 = ((($45)) + 20|0);\n $47 = HEAP32[$46>>2]|0;\n HEAP32[$44>>2] = $47;\n $48 = ((($35)) + 24|0);\n $49 = $33;\n $50 = ((($49)) + 24|0);\n $51 = HEAP32[$50>>2]|0;\n HEAP32[$48>>2] = $51;\n $52 = ((($35)) + 28|0);\n $53 = $33;\n $54 = ((($53)) + 28|0);\n $55 = HEAP32[$54>>2]|0;\n HEAP32[$52>>2] = $55;\n $56 = ((($35)) + 32|0);\n $57 = $33;\n $58 = ((($57)) + 32|0);\n $59 = HEAP32[$58>>2]|0;\n HEAP32[$56>>2] = $59;\n $60 = ((($35)) + 36|0);\n $61 = $33;\n $62 = ((($61)) + 36|0);\n $63 = HEAP32[$62>>2]|0;\n HEAP32[$60>>2] = $63;\n $64 = ((($35)) + 40|0);\n $65 = $33;\n $66 = ((($65)) + 40|0);\n $67 = HEAP32[$66>>2]|0;\n HEAP32[$64>>2] = $67;\n $68 = HEAP32[$35>>2]|0;\n $69 = $68<<2;\n $34 = $69;\n $70 = $34;\n $71 = (__ZN6laszip5utilsL14aligned_mallocEi($70)|0);\n $72 = ((($35)) + 8|0);\n HEAP32[$72>>2] = $71;\n $73 = $33;\n $74 = ((($73)) + 8|0);\n $75 = HEAP32[$74>>2]|0;\n $76 = $33;\n $77 = ((($76)) + 8|0);\n $78 = HEAP32[$77>>2]|0;\n $79 = HEAP32[$35>>2]|0;\n $80 = (($78) + ($79<<2)|0);\n $81 = ((($35)) + 8|0);\n $82 = HEAP32[$81>>2]|0;\n $29 = $75;\n $30 = $80;\n $31 = $82;\n $83 = $29;\n $28 = $83;\n $84 = $28;\n $85 = $30;\n $22 = $85;\n $86 = $22;\n $87 = $31;\n $23 = $87;\n $88 = $23;\n $24 = $84;\n $25 = $86;\n $26 = $88;\n $89 = $25;\n $90 = $24;\n $91 = $89;\n $92 = $90;\n $93 = (($91) - ($92))|0;\n $94 = (($93|0) / 4)&-1;\n $27 = $94;\n $95 = $27;\n $96 = ($95>>>0)>(0);\n if ($96) {\n  $97 = $26;\n  $98 = $24;\n  $99 = $27;\n  $100 = $99<<2;\n  _memmove(($97|0),($98|0),($100|0))|0;\n }\n $101 = $34;\n $102 = (__ZN6laszip5utilsL14aligned_mallocEi($101)|0);\n $103 = ((($35)) + 12|0);\n HEAP32[$103>>2] = $102;\n $104 = $33;\n $105 = ((($104)) + 12|0);\n $106 = HEAP32[$105>>2]|0;\n $107 = $33;\n $108 = ((($107)) + 12|0);\n $109 = HEAP32[$108>>2]|0;\n $110 = HEAP32[$35>>2]|0;\n $111 = (($109) + ($110<<2)|0);\n $112 = ((($35)) + 12|0);\n $113 = HEAP32[$112>>2]|0;\n $9 = $106;\n $10 = $111;\n $11 = $113;\n $114 = $9;\n $8 = $114;\n $115 = $8;\n $116 = $10;\n $2 = $116;\n $117 = $2;\n $118 = $11;\n $3 = $118;\n $119 = $3;\n $4 = $115;\n $5 = $117;\n $6 = $119;\n $120 = $5;\n $121 = $4;\n $122 = $120;\n $123 = $121;\n $124 = (($122) - ($123))|0;\n $125 = (($124|0) / 4)&-1;\n $7 = $125;\n $126 = $7;\n $127 = ($126>>>0)>(0);\n if ($127) {\n  $128 = $6;\n  $129 = $4;\n  $130 = $7;\n  $131 = $130<<2;\n  _memmove(($128|0),($129|0),($131|0))|0;\n }\n $132 = ((($35)) + 36|0);\n $133 = HEAP32[$132>>2]|0;\n $134 = ($133|0)!=(0);\n if (!($134)) {\n  $172 = ((($35)) + 16|0);\n  HEAP32[$172>>2] = 0;\n  STACKTOP = sp;return;\n }\n $135 = ((($35)) + 36|0);\n $136 = HEAP32[$135>>2]|0;\n $137 = (($136) + 2)|0;\n $138 = $137<<2;\n $34 = $138;\n $139 = $34;\n $140 = (__ZN6laszip5utilsL14aligned_mallocEi($139)|0);\n $141 = ((($35)) + 16|0);\n HEAP32[$141>>2] = $140;\n $142 = $33;\n $143 = ((($142)) + 16|0);\n $144 = HEAP32[$143>>2]|0;\n $145 = $33;\n $146 = ((($145)) + 16|0);\n $147 = HEAP32[$146>>2]|0;\n $148 = ((($35)) + 36|0);\n $149 = HEAP32[$148>>2]|0;\n $150 = (($149) + 2)|0;\n $151 = (($147) + ($150<<2)|0);\n $152 = ((($35)) + 16|0);\n $153 = HEAP32[$152>>2]|0;\n $19 = $144;\n $20 = $151;\n $21 = $153;\n $154 = $19;\n $18 = $154;\n $155 = $18;\n $156 = $20;\n $12 = $156;\n $157 = $12;\n $158 = $21;\n $13 = $158;\n $159 = $13;\n $14 = $155;\n $15 = $157;\n $16 = $159;\n $160 = $15;\n $161 = $14;\n $162 = $160;\n $163 = $161;\n $164 = (($162) - ($163))|0;\n $165 = (($164|0) / 4)&-1;\n $17 = $165;\n $166 = $17;\n $167 = ($166>>>0)>(0);\n if ($167) {\n  $168 = $16;\n  $169 = $14;\n  $170 = $17;\n  $171 = $170<<2;\n  _memmove(($168|0),($169|0),($171|0))|0;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip6models10arithmetic6updateEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $14 = 0, $15 = 0, $16 = 0;\n var $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $1 = $0;\n $9 = $1;\n $10 = ((($9)) + 24|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = ((($9)) + 20|0);\n $13 = HEAP32[$12>>2]|0;\n $14 = (($13) + ($11))|0;\n HEAP32[$12>>2] = $14;\n $15 = ($14>>>0)>(32768);\n L1: do {\n  if ($15) {\n   $16 = ((($9)) + 20|0);\n   HEAP32[$16>>2] = 0;\n   $2 = 0;\n   while(1) {\n    $17 = $2;\n    $18 = HEAP32[$9>>2]|0;\n    $19 = ($17>>>0)<($18>>>0);\n    if (!($19)) {\n     break L1;\n    }\n    $20 = ((($9)) + 12|0);\n    $21 = HEAP32[$20>>2]|0;\n    $22 = $2;\n    $23 = (($21) + ($22<<2)|0);\n    $24 = HEAP32[$23>>2]|0;\n    $25 = (($24) + 1)|0;\n    $26 = $25 >>> 1;\n    $27 = ((($9)) + 12|0);\n    $28 = HEAP32[$27>>2]|0;\n    $29 = $2;\n    $30 = (($28) + ($29<<2)|0);\n    HEAP32[$30>>2] = $26;\n    $31 = ((($9)) + 20|0);\n    $32 = HEAP32[$31>>2]|0;\n    $33 = (($32) + ($26))|0;\n    HEAP32[$31>>2] = $33;\n    $34 = $2;\n    $35 = (($34) + 1)|0;\n    $2 = $35;\n   }\n  }\n } while(0);\n $4 = 0;\n $5 = 0;\n $36 = ((($9)) + 20|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = (2147483648 / ($37>>>0))&-1;\n $6 = $38;\n $39 = ((($9)) + 4|0);\n $40 = HEAP8[$39>>0]|0;\n $41 = $40&1;\n L7: do {\n  if ($41) {\n   label = 7;\n  } else {\n   $42 = ((($9)) + 36|0);\n   $43 = HEAP32[$42>>2]|0;\n   $44 = ($43|0)==(0);\n   if ($44) {\n    label = 7;\n   } else {\n    $3 = 0;\n    while(1) {\n     $65 = $3;\n     $66 = HEAP32[$9>>2]|0;\n     $67 = ($65>>>0)<($66>>>0);\n     if (!($67)) {\n      break;\n     }\n     $68 = $6;\n     $69 = $4;\n     $70 = Math_imul($68, $69)|0;\n     $71 = $70 >>> 16;\n     $72 = ((($9)) + 8|0);\n     $73 = HEAP32[$72>>2]|0;\n     $74 = $3;\n     $75 = (($73) + ($74<<2)|0);\n     HEAP32[$75>>2] = $71;\n     $76 = ((($9)) + 12|0);\n     $77 = HEAP32[$76>>2]|0;\n     $78 = $3;\n     $79 = (($77) + ($78<<2)|0);\n     $80 = HEAP32[$79>>2]|0;\n     $81 = $4;\n     $82 = (($81) + ($80))|0;\n     $4 = $82;\n     $83 = ((($9)) + 8|0);\n     $84 = HEAP32[$83>>2]|0;\n     $85 = $3;\n     $86 = (($84) + ($85<<2)|0);\n     $87 = HEAP32[$86>>2]|0;\n     $88 = ((($9)) + 40|0);\n     $89 = HEAP32[$88>>2]|0;\n     $90 = $87 >>> $89;\n     $7 = $90;\n     while(1) {\n      $91 = $5;\n      $92 = $7;\n      $93 = ($91>>>0)<($92>>>0);\n      $94 = $3;\n      if (!($93)) {\n       break;\n      }\n      $95 = (($94) - 1)|0;\n      $96 = ((($9)) + 16|0);\n      $97 = HEAP32[$96>>2]|0;\n      $98 = $5;\n      $99 = (($98) + 1)|0;\n      $5 = $99;\n      $100 = (($97) + ($99<<2)|0);\n      HEAP32[$100>>2] = $95;\n     }\n     $101 = (($94) + 1)|0;\n     $3 = $101;\n    }\n    $102 = ((($9)) + 16|0);\n    $103 = HEAP32[$102>>2]|0;\n    HEAP32[$103>>2] = 0;\n    while(1) {\n     $104 = $5;\n     $105 = ((($9)) + 36|0);\n     $106 = HEAP32[$105>>2]|0;\n     $107 = ($104>>>0)<=($106>>>0);\n     if (!($107)) {\n      break L7;\n     }\n     $108 = HEAP32[$9>>2]|0;\n     $109 = (($108) - 1)|0;\n     $110 = ((($9)) + 16|0);\n     $111 = HEAP32[$110>>2]|0;\n     $112 = $5;\n     $113 = (($112) + 1)|0;\n     $5 = $113;\n     $114 = (($111) + ($113<<2)|0);\n     HEAP32[$114>>2] = $109;\n    }\n   }\n  }\n } while(0);\n L21: do {\n  if ((label|0) == 7) {\n   $3 = 0;\n   while(1) {\n    $45 = $3;\n    $46 = HEAP32[$9>>2]|0;\n    $47 = ($45>>>0)<($46>>>0);\n    if (!($47)) {\n     break L21;\n    }\n    $48 = $6;\n    $49 = $4;\n    $50 = Math_imul($48, $49)|0;\n    $51 = $50 >>> 16;\n    $52 = ((($9)) + 8|0);\n    $53 = HEAP32[$52>>2]|0;\n    $54 = $3;\n    $55 = (($53) + ($54<<2)|0);\n    HEAP32[$55>>2] = $51;\n    $56 = ((($9)) + 12|0);\n    $57 = HEAP32[$56>>2]|0;\n    $58 = $3;\n    $59 = (($57) + ($58<<2)|0);\n    $60 = HEAP32[$59>>2]|0;\n    $61 = $4;\n    $62 = (($61) + ($60))|0;\n    $4 = $62;\n    $63 = $3;\n    $64 = (($63) + 1)|0;\n    $3 = $64;\n   }\n  }\n } while(0);\n $115 = ((($9)) + 24|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = ($116*5)|0;\n $118 = $117 >>> 2;\n $119 = ((($9)) + 24|0);\n HEAP32[$119>>2] = $118;\n $120 = HEAP32[$9>>2]|0;\n $121 = (($120) + 6)|0;\n $122 = $121 << 3;\n $8 = $122;\n $123 = ((($9)) + 24|0);\n $124 = HEAP32[$123>>2]|0;\n $125 = $8;\n $126 = ($124>>>0)>($125>>>0);\n if (!($126)) {\n  $129 = ((($9)) + 24|0);\n  $130 = HEAP32[$129>>2]|0;\n  $131 = ((($9)) + 28|0);\n  HEAP32[$131>>2] = $130;\n  STACKTOP = sp;return;\n }\n $127 = $8;\n $128 = ((($9)) + 24|0);\n HEAP32[$128>>2] = $127;\n $129 = ((($9)) + 24|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = ((($9)) + 28|0);\n HEAP32[$131>>2] = $130;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS_6models10arithmeticEEEiRT_RT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $7 = $0;\n $8 = $1;\n $9 = $2;\n $13 = $7;\n $14 = $8;\n $15 = $9;\n $16 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($14,$15)|0);\n HEAP32[$13>>2] = $16;\n $17 = HEAP32[$13>>2]|0;\n $18 = ($17|0)!=(0);\n if (!($18)) {\n  $69 = $8;\n  $70 = ((($13)) + 48|0);\n  $71 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9decodeBitINS_6models14arithmetic_bitEEEjRT_($69,$70)|0);\n  $10 = $71;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n $19 = HEAP32[$13>>2]|0;\n $20 = ($19>>>0)<(32);\n if (!($20)) {\n  $67 = ((($13)) + 28|0);\n  $68 = HEAP32[$67>>2]|0;\n  $10 = $68;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n $21 = HEAP32[$13>>2]|0;\n $22 = ((($13)) + 12|0);\n $23 = HEAP32[$22>>2]|0;\n $24 = ($21>>>0)<=($23>>>0);\n if ($24) {\n  $25 = $8;\n  $26 = ((($13)) + 68|0);\n  $27 = HEAP32[$13>>2]|0;\n  $28 = (($27) - 1)|0;\n  $5 = $26;\n  $6 = $28;\n  $29 = $5;\n  $30 = HEAP32[$29>>2]|0;\n  $31 = $6;\n  $32 = (($30) + (($31*44)|0)|0);\n  $33 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($25,$32)|0);\n  $10 = $33;\n } else {\n  $34 = HEAP32[$13>>2]|0;\n  $35 = ((($13)) + 12|0);\n  $36 = HEAP32[$35>>2]|0;\n  $37 = (($34) - ($36))|0;\n  $11 = $37;\n  $38 = $8;\n  $39 = ((($13)) + 68|0);\n  $40 = HEAP32[$13>>2]|0;\n  $41 = (($40) - 1)|0;\n  $3 = $39;\n  $4 = $41;\n  $42 = $3;\n  $43 = HEAP32[$42>>2]|0;\n  $44 = $4;\n  $45 = (($43) + (($44*44)|0)|0);\n  $46 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($38,$45)|0);\n  $10 = $46;\n  $47 = $8;\n  $48 = $11;\n  $49 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($47,$48)|0);\n  $12 = $49;\n  $50 = $10;\n  $51 = $11;\n  $52 = $50 << $51;\n  $53 = $12;\n  $54 = $52 | $53;\n  $10 = $54;\n }\n $55 = $10;\n $56 = HEAP32[$13>>2]|0;\n $57 = (($56) - 1)|0;\n $58 = 1 << $57;\n $59 = ($55|0)>=($58|0);\n if ($59) {\n  $60 = $10;\n  $61 = (($60) + 1)|0;\n  $10 = $61;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n } else {\n  $62 = HEAP32[$13>>2]|0;\n  $63 = 1 << $62;\n  $64 = (($63) - 1)|0;\n  $65 = $10;\n  $66 = (($65) - ($64))|0;\n  $10 = $66;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n return (0)|0;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $2 = $0;\n $3 = $1;\n $13 = $2;\n $14 = ((($13)) + 8|0);\n $15 = HEAP32[$14>>2]|0;\n $7 = $15;\n $16 = $3;\n $17 = ((($16)) + 16|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18|0)!=(0|0);\n if ($19) {\n  $20 = ((($13)) + 4|0);\n  $21 = HEAP32[$20>>2]|0;\n  $22 = ((($13)) + 8|0);\n  $23 = HEAP32[$22>>2]|0;\n  $24 = $23 >>> 15;\n  HEAP32[$22>>2] = $24;\n  $25 = (($21>>>0) / ($24>>>0))&-1;\n  $8 = $25;\n  $26 = $8;\n  $27 = $3;\n  $28 = ((($27)) + 40|0);\n  $29 = HEAP32[$28>>2]|0;\n  $30 = $26 >>> $29;\n  $9 = $30;\n  $31 = $3;\n  $32 = ((($31)) + 16|0);\n  $33 = HEAP32[$32>>2]|0;\n  $34 = $9;\n  $35 = (($33) + ($34<<2)|0);\n  $36 = HEAP32[$35>>2]|0;\n  $5 = $36;\n  $37 = $3;\n  $38 = ((($37)) + 16|0);\n  $39 = HEAP32[$38>>2]|0;\n  $40 = $9;\n  $41 = (($40) + 1)|0;\n  $42 = (($39) + ($41<<2)|0);\n  $43 = HEAP32[$42>>2]|0;\n  $44 = (($43) + 1)|0;\n  $4 = $44;\n  while(1) {\n   $45 = $4;\n   $46 = $5;\n   $47 = (($46) + 1)|0;\n   $48 = ($45>>>0)>($47>>>0);\n   if (!($48)) {\n    break;\n   }\n   $49 = $5;\n   $50 = $4;\n   $51 = (($49) + ($50))|0;\n   $52 = $51 >>> 1;\n   $10 = $52;\n   $53 = $3;\n   $54 = ((($53)) + 8|0);\n   $55 = HEAP32[$54>>2]|0;\n   $56 = $10;\n   $57 = (($55) + ($56<<2)|0);\n   $58 = HEAP32[$57>>2]|0;\n   $59 = $8;\n   $60 = ($58>>>0)>($59>>>0);\n   $61 = $10;\n   if ($60) {\n    $4 = $61;\n   } else {\n    $5 = $61;\n   }\n  }\n  $62 = $3;\n  $63 = ((($62)) + 8|0);\n  $64 = HEAP32[$63>>2]|0;\n  $65 = $5;\n  $66 = (($64) + ($65<<2)|0);\n  $67 = HEAP32[$66>>2]|0;\n  $68 = ((($13)) + 8|0);\n  $69 = HEAP32[$68>>2]|0;\n  $70 = Math_imul($67, $69)|0;\n  $6 = $70;\n  $71 = $5;\n  $72 = $3;\n  $73 = ((($72)) + 32|0);\n  $74 = HEAP32[$73>>2]|0;\n  $75 = ($71|0)!=($74|0);\n  if ($75) {\n   $76 = $3;\n   $77 = ((($76)) + 8|0);\n   $78 = HEAP32[$77>>2]|0;\n   $79 = $5;\n   $80 = (($79) + 1)|0;\n   $81 = (($78) + ($80<<2)|0);\n   $82 = HEAP32[$81>>2]|0;\n   $83 = ((($13)) + 8|0);\n   $84 = HEAP32[$83>>2]|0;\n   $85 = Math_imul($82, $84)|0;\n   $7 = $85;\n  }\n } else {\n  $5 = 0;\n  $6 = 0;\n  $86 = ((($13)) + 8|0);\n  $87 = HEAP32[$86>>2]|0;\n  $88 = $87 >>> 15;\n  HEAP32[$86>>2] = $88;\n  $89 = $3;\n  $90 = HEAP32[$89>>2]|0;\n  $4 = $90;\n  $91 = $90 >>> 1;\n  $11 = $91;\n  while(1) {\n   $92 = ((($13)) + 8|0);\n   $93 = HEAP32[$92>>2]|0;\n   $94 = $3;\n   $95 = ((($94)) + 8|0);\n   $96 = HEAP32[$95>>2]|0;\n   $97 = $11;\n   $98 = (($96) + ($97<<2)|0);\n   $99 = HEAP32[$98>>2]|0;\n   $100 = Math_imul($93, $99)|0;\n   $12 = $100;\n   $101 = $12;\n   $102 = ((($13)) + 4|0);\n   $103 = HEAP32[$102>>2]|0;\n   $104 = ($101>>>0)>($103>>>0);\n   $105 = $11;\n   if ($104) {\n    $4 = $105;\n    $106 = $12;\n    $7 = $106;\n   } else {\n    $5 = $105;\n    $107 = $12;\n    $6 = $107;\n   }\n   $108 = $5;\n   $109 = $4;\n   $110 = (($108) + ($109))|0;\n   $111 = $110 >>> 1;\n   $11 = $111;\n   $112 = $5;\n   $113 = ($111|0)!=($112|0);\n   if (!($113)) {\n    break;\n   }\n  }\n }\n $114 = $6;\n $115 = ((($13)) + 4|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = (($116) - ($114))|0;\n HEAP32[$115>>2] = $117;\n $118 = $7;\n $119 = $6;\n $120 = (($118) - ($119))|0;\n $121 = ((($13)) + 8|0);\n HEAP32[$121>>2] = $120;\n $122 = ((($13)) + 8|0);\n $123 = HEAP32[$122>>2]|0;\n $124 = ($123>>>0)<(16777216);\n if ($124) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($13);\n }\n $125 = $3;\n $126 = ((($125)) + 12|0);\n $127 = HEAP32[$126>>2]|0;\n $128 = $5;\n $129 = (($127) + ($128<<2)|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = (($130) + 1)|0;\n HEAP32[$129>>2] = $131;\n $132 = $3;\n $133 = ((($132)) + 28|0);\n $134 = HEAP32[$133>>2]|0;\n $135 = (($134) + -1)|0;\n HEAP32[$133>>2] = $135;\n $136 = ($135|0)==(0);\n if (!($136)) {\n  $138 = $5;\n  STACKTOP = sp;return ($138|0);\n }\n $137 = $3;\n __ZN6laszip6models10arithmetic6updateEv($137);\n $138 = $5;\n STACKTOP = sp;return ($138|0);\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $3 = $0;\n $4 = $1;\n $8 = $3;\n $9 = $4;\n $10 = ($9|0)!=(0);\n $11 = $4;\n $12 = ($11>>>0)<=(32);\n $or$cond = $10 & $12;\n if (!($or$cond)) {\n  ___assert_fail((5409|0),(5430|0),139,(5499|0));\n  // unreachable;\n }\n $13 = $4;\n $14 = ($13>>>0)>(19);\n if ($14) {\n  $15 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($8)|0);\n  $16 = $15&65535;\n  $5 = $16;\n  $17 = $4;\n  $18 = (($17) - 16)|0;\n  $4 = $18;\n  $19 = $4;\n  $20 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($8,$19)|0);\n  $21 = $20 << 16;\n  $6 = $21;\n  $22 = $6;\n  $23 = $5;\n  $24 = $22 | $23;\n  $2 = $24;\n  $43 = $2;\n  STACKTOP = sp;return ($43|0);\n }\n $25 = ((($8)) + 4|0);\n $26 = HEAP32[$25>>2]|0;\n $27 = $4;\n $28 = ((($8)) + 8|0);\n $29 = HEAP32[$28>>2]|0;\n $30 = $29 >>> $27;\n HEAP32[$28>>2] = $30;\n $31 = (($26>>>0) / ($30>>>0))&-1;\n $7 = $31;\n $32 = ((($8)) + 8|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = $7;\n $35 = Math_imul($33, $34)|0;\n $36 = ((($8)) + 4|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = (($37) - ($35))|0;\n HEAP32[$36>>2] = $38;\n $39 = ((($8)) + 8|0);\n $40 = HEAP32[$39>>2]|0;\n $41 = ($40>>>0)<(16777216);\n if ($41) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($8);\n }\n $42 = $7;\n $2 = $42;\n $43 = $2;\n STACKTOP = sp;return ($43|0);\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9decodeBitINS_6models14arithmetic_bitEEEjRT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $6 = $2;\n $7 = $3;\n $8 = ((($7)) + 8|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = ((($6)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = $11 >>> 13;\n $13 = Math_imul($9, $12)|0;\n $4 = $13;\n $14 = ((($6)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $4;\n $17 = ($15>>>0)>=($16>>>0);\n $18 = $17&1;\n $5 = $18;\n $19 = $5;\n $20 = ($19|0)==(0);\n $21 = $4;\n if ($20) {\n  $22 = ((($6)) + 8|0);\n  HEAP32[$22>>2] = $21;\n  $23 = $3;\n  $24 = ((($23)) + 12|0);\n  $25 = HEAP32[$24>>2]|0;\n  $26 = (($25) + 1)|0;\n  HEAP32[$24>>2] = $26;\n } else {\n  $27 = ((($6)) + 4|0);\n  $28 = HEAP32[$27>>2]|0;\n  $29 = (($28) - ($21))|0;\n  HEAP32[$27>>2] = $29;\n  $30 = $4;\n  $31 = ((($6)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  $33 = (($32) - ($30))|0;\n  HEAP32[$31>>2] = $33;\n }\n $34 = ((($6)) + 8|0);\n $35 = HEAP32[$34>>2]|0;\n $36 = ($35>>>0)<(16777216);\n if ($36) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($6);\n }\n $37 = $3;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $40 = (($39) + -1)|0;\n HEAP32[$38>>2] = $40;\n $41 = ($40|0)==(0);\n if (!($41)) {\n  $43 = $5;\n  STACKTOP = sp;return ($43|0);\n }\n $42 = $3;\n __ZN6laszip6models14arithmetic_bit6updateEv($42);\n $43 = $5;\n STACKTOP = sp;return ($43|0);\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n while(1) {\n  $3 = ((($2)) + 4|0);\n  $4 = HEAP32[$3>>2]|0;\n  $5 = $4 << 8;\n  $6 = HEAP32[$2>>2]|0;\n  $7 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($6)|0);\n  $8 = $7&255;\n  $9 = $5 | $8;\n  $10 = ((($2)) + 4|0);\n  HEAP32[$10>>2] = $9;\n  $11 = ((($2)) + 8|0);\n  $12 = HEAP32[$11>>2]|0;\n  $13 = $12 << 8;\n  HEAP32[$11>>2] = $13;\n  $14 = ($13>>>0)<(16777216);\n  if (!($14)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $3 = $1;\n $4 = ((($3)) + 4|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ((($3)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $7 >>> 16;\n HEAP32[$6>>2] = $8;\n $9 = (($5>>>0) / ($8>>>0))&-1;\n $2 = $9;\n $10 = ((($3)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = $2;\n $13 = Math_imul($11, $12)|0;\n $14 = ((($3)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = (($15) - ($13))|0;\n HEAP32[$14>>2] = $16;\n $17 = ((($3)) + 8|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18>>>0)<(16777216);\n if ($19) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($3);\n }\n $20 = $2;\n $21 = ($20>>>0)<(65536);\n if ($21) {\n  $22 = $2;\n  $23 = $22&65535;\n  STACKTOP = sp;return ($23|0);\n } else {\n  ___assert_fail((5508|0),(5430|0),172,(5522|0));\n  // unreachable;\n }\n return (0)|0;\n}\nfunction __ZN6laszip6models14arithmetic_bit6updateEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $3 = $1;\n $4 = HEAP32[$3>>2]|0;\n $5 = ((($3)) + 16|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (($6) + ($4))|0;\n HEAP32[$5>>2] = $7;\n $8 = ($7>>>0)>(8192);\n if ($8) {\n  $9 = ((($3)) + 16|0);\n  $10 = HEAP32[$9>>2]|0;\n  $11 = (($10) + 1)|0;\n  $12 = $11 >>> 1;\n  $13 = ((($3)) + 16|0);\n  HEAP32[$13>>2] = $12;\n  $14 = ((($3)) + 12|0);\n  $15 = HEAP32[$14>>2]|0;\n  $16 = (($15) + 1)|0;\n  $17 = $16 >>> 1;\n  $18 = ((($3)) + 12|0);\n  HEAP32[$18>>2] = $17;\n  $19 = ((($3)) + 12|0);\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ((($3)) + 16|0);\n  $22 = HEAP32[$21>>2]|0;\n  $23 = ($20|0)==($22|0);\n  if ($23) {\n   $24 = ((($3)) + 16|0);\n   $25 = HEAP32[$24>>2]|0;\n   $26 = (($25) + 1)|0;\n   HEAP32[$24>>2] = $26;\n  }\n }\n $27 = ((($3)) + 16|0);\n $28 = HEAP32[$27>>2]|0;\n $29 = (2147483648 / ($28>>>0))&-1;\n $2 = $29;\n $30 = ((($3)) + 12|0);\n $31 = HEAP32[$30>>2]|0;\n $32 = $2;\n $33 = Math_imul($31, $32)|0;\n $34 = $33 >>> 18;\n $35 = ((($3)) + 8|0);\n HEAP32[$35>>2] = $34;\n $36 = HEAP32[$3>>2]|0;\n $37 = ($36*5)|0;\n $38 = $37 >>> 2;\n HEAP32[$3>>2] = $38;\n $39 = HEAP32[$3>>2]|0;\n $40 = ($39>>>0)>(64);\n if (!($40)) {\n  $41 = HEAP32[$3>>2]|0;\n  $42 = ((($3)) + 4|0);\n  HEAP32[$42>>2] = $41;\n  STACKTOP = sp;return;\n }\n HEAP32[$3>>2] = 64;\n $41 = HEAP32[$3>>2]|0;\n $42 = ((($3)) + 4|0);\n HEAP32[$42>>2] = $41;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE9readPointEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;\n var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;\n var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;\n var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0;\n var $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0);\n $$byval_copy = sp + 356|0;\n $7 = sp + 332|0;\n $13 = sp + 308|0;\n $21 = sp + 272|0;\n $28 = sp + 240|0;\n $34 = sp + 216|0;\n $39 = sp + 192|0;\n $40 = sp + 184|0;\n $46 = sp + 160|0;\n $52 = sp + 136|0;\n $57 = sp + 112|0;\n $63 = sp + 88|0;\n $69 = sp + 64|0;\n $74 = sp + 40|0;\n $82 = sp;\n $80 = $0;\n $81 = $1;\n $83 = $80;\n $84 = ((($83)) + 328|0);\n $85 = ((($84)) + 8|0);\n $86 = $85;\n $87 = $86;\n $88 = HEAP32[$87>>2]|0;\n $89 = (($86) + 4)|0;\n $90 = $89;\n $91 = HEAP32[$90>>2]|0;\n $92 = ((($83)) + 247|0);\n $93 = ((($92)) + 12|0);\n $94 = HEAPU8[$93>>0]|(HEAPU8[$93+1>>0]<<8)|(HEAPU8[$93+2>>0]<<16)|(HEAPU8[$93+3>>0]<<24);\n $95 = ($88|0)==($94|0);\n $96 = ($91|0)==(0);\n $97 = $95 & $96;\n if (!($97)) {\n  $98 = ((($83)) + 320|0);\n  $79 = $98;\n  $99 = $79;\n  $78 = $99;\n  $100 = $78;\n  $101 = HEAP32[$100>>2]|0;\n  $102 = ($101|0)!=(0|0);\n  if ($102) {\n   $103 = ((($83)) + 312|0);\n   $77 = $103;\n   $104 = $77;\n   $76 = $104;\n   $105 = $76;\n   $106 = HEAP32[$105>>2]|0;\n   $107 = ($106|0)!=(0|0);\n   if ($107) {\n    $258 = ((($83)) + 320|0);\n    $75 = $258;\n    $259 = $75;\n    $260 = HEAP32[$259>>2]|0;\n    $261 = HEAP32[$260>>2]|0;\n    $262 = HEAP32[$261>>2]|0;\n    $263 = $81;\n    (FUNCTION_TABLE_iii[$262 & 255]($260,$263)|0);\n    $264 = ((($83)) + 328|0);\n    $265 = ((($264)) + 8|0);\n    $266 = $265;\n    $267 = $266;\n    $268 = HEAP32[$267>>2]|0;\n    $269 = (($266) + 4)|0;\n    $270 = $269;\n    $271 = HEAP32[$270>>2]|0;\n    $272 = (_i64Add(($268|0),($271|0),1,0)|0);\n    $273 = tempRet0;\n    $274 = $265;\n    $275 = $274;\n    HEAP32[$275>>2] = $272;\n    $276 = (($274) + 4)|0;\n    $277 = $276;\n    HEAP32[$277>>2] = $273;\n    STACKTOP = sp;return;\n   }\n  }\n }\n $108 = ((($83)) + 320|0);\n $73 = $108;\n $109 = $73;\n $72 = $74;\n $110 = $72;\n HEAP32[$110>>2] = 0;\n $111 = ((($110)) + 4|0);\n HEAP32[$111>>2] = 0;\n $70 = $74;\n $71 = $109;\n $112 = $70;\n $113 = $71;\n $67 = $112;\n $68 = $113;\n $114 = $67;\n $66 = $114;\n $115 = $66;\n $116 = HEAP32[$115>>2]|0;\n HEAP32[$69>>2] = $116;\n $117 = $68;\n $64 = $117;\n $118 = $64;\n $119 = HEAP32[$118>>2]|0;\n $120 = $67;\n HEAP32[$120>>2] = $119;\n $65 = $69;\n $121 = $65;\n $122 = HEAP32[$121>>2]|0;\n $123 = $68;\n HEAP32[$123>>2] = $122;\n $124 = ((($112)) + 4|0);\n $125 = $71;\n $126 = ((($125)) + 4|0);\n $61 = $124;\n $62 = $126;\n $127 = $61;\n $60 = $127;\n $128 = $60;\n $129 = HEAP32[$128>>2]|0;\n HEAP32[$63>>2] = $129;\n $130 = $62;\n $58 = $130;\n $131 = $58;\n $132 = HEAP32[$131>>2]|0;\n $133 = $61;\n HEAP32[$133>>2] = $132;\n $59 = $63;\n $134 = $59;\n $135 = HEAP32[$134>>2]|0;\n $136 = $62;\n HEAP32[$136>>2] = $135;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($74);\n $137 = ((($83)) + 312|0);\n $56 = $137;\n $138 = $56;\n $55 = $57;\n $139 = $55;\n HEAP32[$139>>2] = 0;\n $140 = ((($139)) + 4|0);\n HEAP32[$140>>2] = 0;\n $53 = $57;\n $54 = $138;\n $141 = $53;\n $142 = $54;\n $50 = $141;\n $51 = $142;\n $143 = $50;\n $49 = $143;\n $144 = $49;\n $145 = HEAP32[$144>>2]|0;\n HEAP32[$52>>2] = $145;\n $146 = $51;\n $47 = $146;\n $147 = $47;\n $148 = HEAP32[$147>>2]|0;\n $149 = $50;\n HEAP32[$149>>2] = $148;\n $48 = $52;\n $150 = $48;\n $151 = HEAP32[$150>>2]|0;\n $152 = $51;\n HEAP32[$152>>2] = $151;\n $153 = ((($141)) + 4|0);\n $154 = $54;\n $155 = ((($154)) + 4|0);\n $44 = $153;\n $45 = $155;\n $156 = $44;\n $43 = $156;\n $157 = $43;\n $158 = HEAP32[$157>>2]|0;\n HEAP32[$46>>2] = $158;\n $159 = $45;\n $41 = $159;\n $160 = $41;\n $161 = HEAP32[$160>>2]|0;\n $162 = $44;\n HEAP32[$162>>2] = $161;\n $42 = $46;\n $163 = $42;\n $164 = HEAP32[$163>>2]|0;\n $165 = $45;\n HEAP32[$165>>2] = $164;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($57);\n $166 = ((($83)) + 312|0);\n $167 = (__Znwj(12)|0);\n $168 = ((($83)) + 4|0);\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($167,$168);\n $37 = $166;\n $38 = $167;\n $169 = $37;\n $170 = $38;\n ;HEAP32[$40>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$40>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEC2IS9_EEPT_NS_9enable_ifIXsr14is_convertibleISD_PS9_EE5valueENSA_5__natEE4typeE($39,$170,$$byval_copy);\n $35 = $39;\n $36 = $169;\n $171 = $35;\n $172 = $36;\n $32 = $171;\n $33 = $172;\n $173 = $32;\n $31 = $173;\n $174 = $31;\n $175 = HEAP32[$174>>2]|0;\n HEAP32[$34>>2] = $175;\n $176 = $33;\n $29 = $176;\n $177 = $29;\n $178 = HEAP32[$177>>2]|0;\n $179 = $32;\n HEAP32[$179>>2] = $178;\n $30 = $34;\n $180 = $30;\n $181 = HEAP32[$180>>2]|0;\n $182 = $33;\n HEAP32[$182>>2] = $181;\n $183 = ((($171)) + 4|0);\n $184 = $36;\n $185 = ((($184)) + 4|0);\n $26 = $183;\n $27 = $185;\n $186 = $26;\n $25 = $186;\n $187 = $25;\n $188 = HEAP32[$187>>2]|0;\n HEAP32[$28>>2] = $188;\n $189 = $27;\n $23 = $189;\n $190 = $23;\n $191 = HEAP32[$190>>2]|0;\n $192 = $26;\n HEAP32[$192>>2] = $191;\n $24 = $28;\n $193 = $24;\n $194 = HEAP32[$193>>2]|0;\n $195 = $27;\n HEAP32[$195>>2] = $194;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($39);\n $196 = ((($83)) + 312|0);\n $22 = $196;\n $197 = $22;\n $198 = HEAP32[$197>>2]|0;\n $199 = ((($83)) + 300|0);\n __ZN6laszip7factory18build_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENSt3__210shared_ptrINS_7formats20dynamic_decompressorEEERT_RKNS0_13record_schemaE($82,$198,$199);\n $200 = ((($83)) + 320|0);\n $19 = $200;\n $20 = $82;\n $201 = $19;\n $202 = $20;\n $18 = $202;\n $203 = $18;\n $16 = $21;\n $17 = $203;\n $204 = $16;\n $205 = $17;\n $206 = HEAP32[$205>>2]|0;\n HEAP32[$204>>2] = $206;\n $207 = ((($204)) + 4|0);\n $208 = $17;\n $209 = ((($208)) + 4|0);\n $210 = HEAP32[$209>>2]|0;\n HEAP32[$207>>2] = $210;\n $211 = $17;\n HEAP32[$211>>2] = 0;\n $212 = $17;\n $213 = ((($212)) + 4|0);\n HEAP32[$213>>2] = 0;\n $14 = $21;\n $15 = $201;\n $214 = $14;\n $215 = $15;\n $11 = $214;\n $12 = $215;\n $216 = $11;\n $10 = $216;\n $217 = $10;\n $218 = HEAP32[$217>>2]|0;\n HEAP32[$13>>2] = $218;\n $219 = $12;\n $8 = $219;\n $220 = $8;\n $221 = HEAP32[$220>>2]|0;\n $222 = $11;\n HEAP32[$222>>2] = $221;\n $9 = $13;\n $223 = $9;\n $224 = HEAP32[$223>>2]|0;\n $225 = $12;\n HEAP32[$225>>2] = $224;\n $226 = ((($214)) + 4|0);\n $227 = $15;\n $228 = ((($227)) + 4|0);\n $5 = $226;\n $6 = $228;\n $229 = $5;\n $4 = $229;\n $230 = $4;\n $231 = HEAP32[$230>>2]|0;\n HEAP32[$7>>2] = $231;\n $232 = $6;\n $2 = $232;\n $233 = $2;\n $234 = HEAP32[$233>>2]|0;\n $235 = $5;\n HEAP32[$235>>2] = $234;\n $3 = $7;\n $236 = $3;\n $237 = HEAP32[$236>>2]|0;\n $238 = $6;\n HEAP32[$238>>2] = $237;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($21);\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($82);\n $239 = ((($83)) + 328|0);\n $240 = $239;\n $241 = $240;\n $242 = HEAP32[$241>>2]|0;\n $243 = (($240) + 4)|0;\n $244 = $243;\n $245 = HEAP32[$244>>2]|0;\n $246 = (_i64Add(($242|0),($245|0),1,0)|0);\n $247 = tempRet0;\n $248 = $239;\n $249 = $248;\n HEAP32[$249>>2] = $246;\n $250 = (($248) + 4)|0;\n $251 = $250;\n HEAP32[$251>>2] = $247;\n $252 = ((($83)) + 328|0);\n $253 = ((($252)) + 8|0);\n $254 = $253;\n $255 = $254;\n HEAP32[$255>>2] = 0;\n $256 = (($254) + 4)|0;\n $257 = $256;\n HEAP32[$257>>2] = 0;\n $258 = ((($83)) + 320|0);\n $75 = $258;\n $259 = $75;\n $260 = HEAP32[$259>>2]|0;\n $261 = HEAP32[$260>>2]|0;\n $262 = HEAP32[$261>>2]|0;\n $263 = $81;\n (FUNCTION_TABLE_iii[$262 & 255]($260,$263)|0);\n $264 = ((($83)) + 328|0);\n $265 = ((($264)) + 8|0);\n $266 = $265;\n $267 = $266;\n $268 = HEAP32[$267>>2]|0;\n $269 = (($266) + 4)|0;\n $270 = $269;\n $271 = HEAP32[$270>>2]|0;\n $272 = (_i64Add(($268|0),($271|0),1,0)|0);\n $273 = tempRet0;\n $274 = $265;\n $275 = $274;\n HEAP32[$275>>2] = $272;\n $276 = (($274) + 4)|0;\n $277 = $276;\n HEAP32[$277>>2] = $273;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7factory18build_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENSt3__210shared_ptrINS_7formats20dynamic_decompressorEEERT_RKNS0_13record_schemaE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $5 = sp;\n $15 = sp + 64|0;\n $16 = sp + 8|0;\n $17 = sp + 4|0;\n $11 = $1;\n $12 = $2;\n $18 = $12;\n $19 = (__ZNK6laszip7factory13record_schema6formatEv($18)|0);\n $13 = $19;\n $20 = $13;\n $21 = ($20|0)==(-1);\n if ($21) {\n  $22 = (___cxa_allocate_exception(8)|0);\n  __ZN6laszip19unknown_schema_typeC2Ev($22);\n  ___cxa_throw(($22|0),(256|0),(47|0));\n  // unreachable;\n }\n $23 = $12;\n $24 = (__ZNK6laszip7factory13record_schema10extrabytesEv($23)|0);\n $14 = $24;\n $25 = $14;\n $26 = ($25|0)!=(0);\n if ($26) {\n  $27 = $11;\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENS0_26dynamic_field_decompressorIT_E3ptrERSB_($15,$27);\n  $10 = $15;\n  $28 = $10;\n  $29 = HEAP32[$28>>2]|0;\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7point10EEEvv($29);\n  $30 = $13;\n  $31 = ($30|0)==(1);\n  $32 = $13;\n  $33 = ($32|0)==(3);\n  $or$cond = $31 | $33;\n  if ($or$cond) {\n   $8 = $15;\n   $34 = $8;\n   $35 = HEAP32[$34>>2]|0;\n   __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7gpstimeEEEvv($35);\n  }\n  $36 = $13;\n  $37 = ($36|0)==(2);\n  $38 = $13;\n  $39 = ($38|0)==(3);\n  $or$cond3 = $37 | $39;\n  if ($or$cond3) {\n   $7 = $15;\n   $40 = $7;\n   $41 = HEAP32[$40>>2]|0;\n   __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las3rgbEEEvv($41);\n  }\n  $6 = $15;\n  $42 = $6;\n  $43 = HEAP32[$42>>2]|0;\n  $44 = $14;\n  __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2Ej($16,$44);\n  __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISE_EEEEEEvRKT_($43,$16);\n  __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($16);\n  ;HEAP32[$17>>2]=0|0;\n  ;HEAP8[$5>>0]=HEAP8[$17>>0]|0;HEAP8[$5+1>>0]=HEAP8[$17+1>>0]|0;HEAP8[$5+2>>0]=HEAP8[$17+2>>0]|0;HEAP8[$5+3>>0]=HEAP8[$17+3>>0]|0;\n  $3 = $0;\n  $4 = $15;\n  $45 = $3;\n  $46 = $4;\n  $47 = HEAP32[$46>>2]|0;\n  HEAP32[$45>>2] = $47;\n  $48 = ((($45)) + 4|0);\n  $49 = $4;\n  $50 = ((($49)) + 4|0);\n  $51 = HEAP32[$50>>2]|0;\n  HEAP32[$48>>2] = $51;\n  $52 = $4;\n  HEAP32[$52>>2] = 0;\n  $53 = $4;\n  $54 = ((($53)) + 4|0);\n  HEAP32[$54>>2] = 0;\n  __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEED2Ev($15);\n  STACKTOP = sp;return;\n }\n $55 = $13;\n switch ($55|0) {\n case 0:  {\n  $56 = $11;\n  $57 = (__Znwj(4788)|0);\n  __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEEC2Ev($57);\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$56,$57);\n  STACKTOP = sp;return;\n  break;\n }\n case 1:  {\n  $58 = $11;\n  $59 = (__Znwj(5116)|0);\n  __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEEC2Ev($59);\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$58,$59);\n  STACKTOP = sp;return;\n  break;\n }\n case 2:  {\n  $60 = $11;\n  $61 = (__Znwj(5104)|0);\n  __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($61);\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$60,$61);\n  STACKTOP = sp;return;\n  break;\n }\n case 3:  {\n  $62 = $11;\n  $63 = (__Znwj(5432)|0);\n  __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEEC2Ev($63);\n  __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$62,$63);\n  STACKTOP = sp;return;\n  break;\n }\n default: {\n  $9 = $0;\n  $64 = $9;\n  HEAP32[$64>>2] = 0;\n  $65 = ((($64)) + 4|0);\n  HEAP32[$65>>2] = 0;\n  STACKTOP = sp;return;\n }\n }\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEC2IS9_EEPT_NS_9enable_ifIXsr14is_convertibleISD_PS9_EE5valueENSA_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $50 = sp + 76|0;\n $51 = sp + 72|0;\n $52 = sp + 8|0;\n $53 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$52>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$53>>0]=HEAP8[$66>>0]|0;\n $49 = $79;\n HEAP32[$50>>2] = $80;\n $81 = $49;\n $47 = $81;\n $48 = 0;\n $82 = $47;\n $83 = $48;\n $45 = $82;\n $46 = $83;\n $84 = $45;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $46;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $48;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (1908);\n $89 = ((($81)) + 12|0);\n $21 = $53;\n $90 = $21;\n $30 = $51;\n $31 = $50;\n $32 = $90;\n $91 = $30;\n $92 = $31;\n $29 = $92;\n $93 = $29;\n $23 = $91;\n $24 = $93;\n $94 = $23;\n $95 = $24;\n $22 = $95;\n $96 = $22;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $32;\n $25 = $98;\n $99 = $25;\n $27 = $91;\n $28 = $99;\n $100 = $28;\n $26 = $100;\n $33 = $52;\n $101 = $33;\n $42 = $89;\n $43 = $51;\n $44 = $101;\n $102 = $42;\n $103 = $43;\n $41 = $103;\n $104 = $41;\n $35 = $102;\n $36 = $104;\n $105 = $35;\n $106 = $36;\n $34 = $106;\n $107 = $34;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $44;\n $37 = $108;\n $109 = $37;\n $39 = $102;\n $40 = $109;\n $110 = $40;\n $38 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $20 = $65;\n $120 = $20;\n $17 = $120;\n $18 = 0;\n $121 = $17;\n $16 = $121;\n $122 = $16;\n $15 = $122;\n $123 = $15;\n $124 = HEAP32[$123>>2]|0;\n $19 = $124;\n $125 = $18;\n $12 = $121;\n $126 = $12;\n $11 = $126;\n $127 = $11;\n HEAP32[$127>>2] = $125;\n $128 = $19;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $10 = $121;\n $130 = $10;\n $9 = $130;\n $131 = $9;\n $132 = $19;\n $13 = $131;\n $14 = $132;\n $133 = $14;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($133);\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $4 = $22;\n $23 = $4;\n $3 = $23;\n $24 = $3;\n $2 = $24;\n $25 = $2;\n $1 = $25;\n $26 = $1;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($28);\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 248;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZNK6laszip7factory13record_schema6formatEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $15 = $13;\n $11 = $15;\n $16 = $11;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = HEAP32[$16>>2]|0;\n $20 = $18;\n $21 = $19;\n $22 = (($20) - ($21))|0;\n $23 = (($22|0) / 12)&-1;\n $14 = $23;\n $24 = $14;\n $25 = ($24|0)==(0);\n if ($25) {\n  $12 = -1;\n  $68 = $12;\n  STACKTOP = sp;return ($68|0);\n }\n $26 = (__ZNK6laszip7factory13record_schema10extrabytesEv($15)|0);\n $27 = ($26|0)!=(0);\n if ($27) {\n  $28 = $14;\n  $29 = (($28) + -1)|0;\n  $14 = $29;\n }\n $30 = $14;\n $31 = ($30|0)==(0);\n if (!($31)) {\n  $9 = $15;\n  $10 = 0;\n  $32 = $9;\n  $33 = HEAP32[$32>>2]|0;\n  $34 = $10;\n  $35 = (($33) + (($34*12)|0)|0);\n  $36 = (__ZN6laszip7factory11record_item5pointEv()|0);\n  $37 = (__ZNK6laszip7factory11record_itemneERKS1_($35,$36)|0);\n  if (!($37)) {\n   $38 = $14;\n   $39 = ($38|0)==(1);\n   if ($39) {\n    $12 = 0;\n    $68 = $12;\n    STACKTOP = sp;return ($68|0);\n   }\n   $40 = $14;\n   $41 = ($40|0)==(2);\n   if ($41) {\n    $7 = $15;\n    $8 = 1;\n    $42 = $7;\n    $43 = HEAP32[$42>>2]|0;\n    $44 = $8;\n    $45 = (($43) + (($44*12)|0)|0);\n    $46 = (__ZN6laszip7factory11record_item7gpstimeEv()|0);\n    $47 = (__ZNK6laszip7factory11record_itemeqERKS1_($45,$46)|0);\n    if ($47) {\n     $12 = 1;\n     $68 = $12;\n     STACKTOP = sp;return ($68|0);\n    }\n    $3 = $15;\n    $4 = 1;\n    $48 = $3;\n    $49 = HEAP32[$48>>2]|0;\n    $50 = $4;\n    $51 = (($49) + (($50*12)|0)|0);\n    $52 = (__ZN6laszip7factory11record_item3rgbEv()|0);\n    $53 = (__ZNK6laszip7factory11record_itemeqERKS1_($51,$52)|0);\n    if ($53) {\n     $12 = 2;\n     $68 = $12;\n     STACKTOP = sp;return ($68|0);\n    }\n   }\n   $54 = $14;\n   $55 = ($54|0)==(3);\n   if ($55) {\n    $1 = $15;\n    $2 = 1;\n    $56 = $1;\n    $57 = HEAP32[$56>>2]|0;\n    $58 = $2;\n    $59 = (($57) + (($58*12)|0)|0);\n    $60 = (__ZN6laszip7factory11record_item7gpstimeEv()|0);\n    $61 = (__ZNK6laszip7factory11record_itemeqERKS1_($59,$60)|0);\n    if ($61) {\n     $5 = $15;\n     $6 = 2;\n     $62 = $5;\n     $63 = HEAP32[$62>>2]|0;\n     $64 = $6;\n     $65 = (($63) + (($64*12)|0)|0);\n     $66 = (__ZN6laszip7factory11record_item3rgbEv()|0);\n     $67 = (__ZNK6laszip7factory11record_itemeqERKS1_($65,$66)|0);\n     if ($67) {\n      $12 = 3;\n      $68 = $12;\n      STACKTOP = sp;return ($68|0);\n     }\n    }\n   }\n   $12 = -1;\n   $68 = $12;\n   STACKTOP = sp;return ($68|0);\n  }\n }\n $12 = -1;\n $68 = $12;\n STACKTOP = sp;return ($68|0);\n}\nfunction __ZN6laszip19unknown_schema_typeC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorC2EPKc($2,5848);\n HEAP32[$2>>2] = (1936);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip19unknown_schema_typeD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt13runtime_errorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNK6laszip7factory13record_schema10extrabytesEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $2 = sp;\n $5 = sp + 124|0;\n $8 = sp + 112|0;\n $11 = sp + 100|0;\n $16 = sp + 80|0;\n $22 = sp + 56|0;\n $28 = sp + 32|0;\n $33 = sp + 8|0;\n $32 = $0;\n $34 = $32;\n $30 = $34;\n $35 = $30;\n $36 = ((($35)) + 4|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = HEAP32[$35>>2]|0;\n $39 = $37;\n $40 = $38;\n $41 = (($39) - ($40))|0;\n $42 = (($41|0) / 12)&-1;\n $43 = ($42|0)!=(0);\n if ($43) {\n  $10 = $34;\n  $44 = $10;\n  $9 = $44;\n  $45 = $9;\n  $46 = ((($45)) + 4|0);\n  $47 = HEAP32[$46>>2]|0;\n  $6 = $45;\n  $7 = $47;\n  $48 = $7;\n  $3 = $5;\n  $4 = $48;\n  $49 = $3;\n  $50 = $4;\n  HEAP32[$49>>2] = $50;\n  $51 = HEAP32[$5>>2]|0;\n  HEAP32[$8>>2] = $51;\n  $52 = HEAP32[$8>>2]|0;\n  HEAP32[$11>>2] = $52;\n  ;HEAP8[$2>>0]=HEAP8[$11>>0]|0;HEAP8[$2+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$2+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$2+3>>0]=HEAP8[$11+3>>0]|0;\n  $1 = $33;\n  $53 = $1;\n  ;HEAP32[$53>>2]=HEAP32[$2>>2]|0;\n  $54 = ((($53)) + 4|0);\n  ;HEAP32[$54>>2]=HEAP32[$2>>2]|0;\n  $17 = $33;\n  $55 = $17;\n  $15 = $55;\n  $56 = $15;\n  $57 = ((($56)) + 4|0);\n  ;HEAP32[$16>>2]=HEAP32[$57>>2]|0;\n  $14 = $16;\n  $58 = $14;\n  $59 = HEAP32[$58>>2]|0;\n  $60 = ((($59)) + -12|0);\n  HEAP32[$58>>2] = $60;\n  $13 = $58;\n  $61 = $13;\n  $62 = HEAP32[$61>>2]|0;\n  $12 = $62;\n  $63 = $12;\n  $64 = HEAP32[$63>>2]|0;\n  $65 = ($64|0)==(0);\n  if ($65) {\n   $23 = $33;\n   $66 = $23;\n   $21 = $66;\n   $67 = $21;\n   $68 = ((($67)) + 4|0);\n   ;HEAP32[$22>>2]=HEAP32[$68>>2]|0;\n   $20 = $22;\n   $69 = $20;\n   $70 = HEAP32[$69>>2]|0;\n   $71 = ((($70)) + -12|0);\n   HEAP32[$69>>2] = $71;\n   $19 = $69;\n   $72 = $19;\n   $73 = HEAP32[$72>>2]|0;\n   $18 = $73;\n   $74 = $18;\n   $75 = ((($74)) + 8|0);\n   $76 = HEAP32[$75>>2]|0;\n   $77 = ($76|0)==(2);\n   if ($77) {\n    $29 = $33;\n    $78 = $29;\n    $27 = $78;\n    $79 = $27;\n    $80 = ((($79)) + 4|0);\n    ;HEAP32[$28>>2]=HEAP32[$80>>2]|0;\n    $26 = $28;\n    $81 = $26;\n    $82 = HEAP32[$81>>2]|0;\n    $83 = ((($82)) + -12|0);\n    HEAP32[$81>>2] = $83;\n    $25 = $81;\n    $84 = $25;\n    $85 = HEAP32[$84>>2]|0;\n    $24 = $85;\n    $86 = $24;\n    $87 = ((($86)) + 4|0);\n    $88 = HEAP32[$87>>2]|0;\n    $31 = $88;\n    $89 = $31;\n    STACKTOP = sp;return ($89|0);\n   }\n  }\n }\n $31 = 0;\n $89 = $31;\n STACKTOP = sp;return ($89|0);\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENS0_26dynamic_field_decompressorIT_E3ptrERSB_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 8|0;\n $3 = sp;\n $2 = $1;\n $4 = (__Znwj(24)|0);\n $5 = $2;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEC2ERS9_($4,$5);\n ;HEAP32[$3>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEEC2ISC_EEPT_NS_9enable_ifIXsr14is_convertibleISG_PSC_EE5valueENSD_5__natEE4typeE($0,$4,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7point10EEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(4792)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7gpstimeEEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(336)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las3rgbEEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(324)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISE_EEEEEEvRKT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $$byval_copy = sp + 140|0;\n $17 = sp;\n $22 = sp + 145|0;\n $33 = sp + 144|0;\n $36 = sp + 8|0;\n $37 = sp + 4|0;\n $34 = $0;\n $35 = $1;\n $38 = $34;\n $39 = ((($38)) + 8|0);\n $40 = (__Znwj(64)|0);\n $41 = ((($38)) + 4|0);\n $42 = HEAP32[$41>>2]|0;\n $43 = $35;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEEC2ERS9_RKSF_($40,$42,$43);\n ;HEAP32[$37>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$37>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($36,$40,$$byval_copy);\n $31 = $39;\n $32 = $36;\n $44 = $31;\n $45 = ((($44)) + 4|0);\n $46 = HEAP32[$45>>2]|0;\n $30 = $44;\n $47 = $30;\n $48 = ((($47)) + 8|0);\n $29 = $48;\n $49 = $29;\n $28 = $49;\n $50 = $28;\n $51 = HEAP32[$50>>2]|0;\n $52 = ($46>>>0)<($51>>>0);\n if ($52) {\n  $25 = $33;\n  $26 = $44;\n  $27 = 1;\n  $4 = $44;\n  $53 = $4;\n  $54 = ((($53)) + 8|0);\n  $3 = $54;\n  $55 = $3;\n  $2 = $55;\n  $56 = $2;\n  $57 = ((($44)) + 4|0);\n  $58 = HEAP32[$57>>2]|0;\n  $5 = $58;\n  $59 = $5;\n  $60 = $32;\n  $6 = $60;\n  $61 = $6;\n  $19 = $56;\n  $20 = $59;\n  $21 = $61;\n  $62 = $19;\n  $63 = $20;\n  $64 = $21;\n  $18 = $64;\n  $65 = $18;\n  ;HEAP8[$17>>0]=HEAP8[$22>>0]|0;\n  $14 = $62;\n  $15 = $63;\n  $16 = $65;\n  $66 = $14;\n  $67 = $15;\n  $68 = $16;\n  $13 = $68;\n  $69 = $13;\n  $10 = $66;\n  $11 = $67;\n  $12 = $69;\n  $70 = $11;\n  $71 = $12;\n  $9 = $71;\n  $72 = $9;\n  $7 = $70;\n  $8 = $72;\n  $73 = $7;\n  $74 = $8;\n  $75 = HEAP32[$74>>2]|0;\n  HEAP32[$73>>2] = $75;\n  $76 = ((($73)) + 4|0);\n  $77 = $8;\n  $78 = ((($77)) + 4|0);\n  $79 = HEAP32[$78>>2]|0;\n  HEAP32[$76>>2] = $79;\n  $80 = $8;\n  HEAP32[$80>>2] = 0;\n  $81 = $8;\n  $82 = ((($81)) + 4|0);\n  HEAP32[$82>>2] = 0;\n  $23 = $33;\n  $83 = ((($44)) + 4|0);\n  $84 = HEAP32[$83>>2]|0;\n  $85 = ((($84)) + 8|0);\n  HEAP32[$83>>2] = $85;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($36);\n  STACKTOP = sp;return;\n } else {\n  $86 = $32;\n  $24 = $86;\n  $87 = $24;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($44,$87);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($36);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2Ej($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $4 = sp;\n $2 = $0;\n $3 = $1;\n $5 = $2;\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($5)) + 4|0);\n HEAP8[$7>>0] = 0;\n $8 = ((($5)) + 8|0);\n $9 = $3;\n __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($8,$9);\n $10 = ((($5)) + 20|0);\n $11 = $3;\n __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($10,$11);\n $12 = ((($5)) + 32|0);\n $13 = $3;\n __ZN6laszip6models10arithmeticC2EjbPj($4,256,0,0);\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2EjRKS3_($12,$13,$4);\n __ZN6laszip6models10arithmeticD2Ev($4);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 32|0);\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($3);\n $4 = ((($2)) + 20|0);\n __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($4);\n $5 = ((($2)) + 8|0);\n __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($5);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 12|0;\n $5 = sp;\n $3 = $1;\n $4 = $2;\n $6 = (__Znwj(12)|0);\n $7 = $3;\n $8 = $4;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEC2ERS9_PSH_($6,$7,$8);\n ;HEAP32[$5>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISP_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 12|0;\n $5 = sp;\n $3 = $1;\n $4 = $2;\n $6 = (__Znwj(12)|0);\n $7 = $3;\n $8 = $4;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEC2ERS9_PSK_($6,$7,$8);\n ;HEAP32[$5>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 12|0;\n $5 = sp;\n $3 = $1;\n $4 = $2;\n $6 = (__Znwj(12)|0);\n $7 = $3;\n $8 = $4;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEC2ERS9_PSK_($6,$7,$8);\n ;HEAP32[$5>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_3rgbENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 12|0;\n $5 = sp;\n $3 = $1;\n $4 = $2;\n $6 = (__Znwj(12)|0);\n $7 = $3;\n $8 = $4;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEC2ERS9_PSN_($6,$7,$8);\n ;HEAP32[$5>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEENSG_INSH_3rgbENSJ_ISP_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISV_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZNK6laszip7factory11record_itemneERKS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n $6 = (__ZNK6laszip7factory11record_itemeqERKS1_($4,$5)|0);\n $7 = $6 ^ 1;\n STACKTOP = sp;return ($7|0);\n}\nfunction __ZN6laszip7factory11record_item5pointEv() {\n var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP8[21192]|0;\n $1 = ($0<<24>>24)==(0);\n if ($1) {\n  $2 = (___cxa_guard_acquire(21192)|0);\n  $3 = ($2|0)!=(0);\n  if ($3) {\n   __ZN6laszip7factory11record_itemC2Eiii(21256,6,20,2);\n  }\n }\n return (21256|0);\n}\nfunction __ZNK6laszip7factory11record_itemeqERKS1_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = HEAP32[$4>>2]|0;\n $6 = $3;\n $7 = HEAP32[$6>>2]|0;\n $8 = ($5|0)==($7|0);\n if (!($8)) {\n  $21 = 0;\n  STACKTOP = sp;return ($21|0);\n }\n $9 = ((($4)) + 8|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = $3;\n $12 = ((($11)) + 8|0);\n $13 = HEAP32[$12>>2]|0;\n $14 = ($10|0)==($13|0);\n if (!($14)) {\n  $21 = 0;\n  STACKTOP = sp;return ($21|0);\n }\n $15 = ((($4)) + 4|0);\n $16 = HEAP32[$15>>2]|0;\n $17 = $3;\n $18 = ((($17)) + 4|0);\n $19 = HEAP32[$18>>2]|0;\n $20 = ($16|0)==($19|0);\n $21 = $20;\n STACKTOP = sp;return ($21|0);\n}\nfunction __ZN6laszip7factory11record_item7gpstimeEv() {\n var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP8[21200]|0;\n $1 = ($0<<24>>24)==(0);\n if ($1) {\n  $2 = (___cxa_guard_acquire(21200)|0);\n  $3 = ($2|0)!=(0);\n  if ($3) {\n   __ZN6laszip7factory11record_itemC2Eiii(21268,7,8,2);\n  }\n }\n return (21268|0);\n}\nfunction __ZN6laszip7factory11record_item3rgbEv() {\n var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP8[21208]|0;\n $1 = ($0<<24>>24)==(0);\n if ($1) {\n  $2 = (___cxa_guard_acquire(21208)|0);\n  $3 = ($2|0)!=(0);\n  if ($3) {\n   __ZN6laszip7factory11record_itemC2Eiii(21280,8,6,2);\n  }\n }\n return (21280|0);\n}\nfunction __ZN6laszip19unknown_schema_typeD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip19unknown_schema_typeD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEC2ERS9_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $12 = sp + 12|0;\n $14 = $0;\n $15 = $1;\n $16 = $14;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($16);\n HEAP32[$16>>2] = (1956);\n $17 = ((($16)) + 4|0);\n $18 = $15;\n HEAP32[$17>>2] = $18;\n $19 = ((($16)) + 8|0);\n $13 = $19;\n $20 = $13;\n $11 = $20;\n $21 = $11;\n $10 = $21;\n HEAP32[$21>>2] = 0;\n $22 = ((($21)) + 4|0);\n HEAP32[$22>>2] = 0;\n $23 = ((($21)) + 8|0);\n HEAP32[$12>>2] = 0;\n $8 = $23;\n $9 = $12;\n $24 = $8;\n $25 = $9;\n $7 = $25;\n $26 = $7;\n $3 = $24;\n $4 = $26;\n $27 = $3;\n $28 = $4;\n $2 = $28;\n HEAP32[$27>>2] = 0;\n $6 = $24;\n $29 = $6;\n $5 = $29;\n $30 = ((($16)) + 20|0);\n HEAP8[$30>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEEC2ISC_EEPT_NS_9enable_ifIXsr14is_convertibleISG_PSC_EE5valueENSD_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (1996);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats20dynamic_decompressorC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (1976);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0;\n var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;\n var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;\n var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0;\n var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $20 = sp + 72|0;\n $23 = sp + 60|0;\n $27 = sp + 44|0;\n $30 = sp + 32|0;\n $35 = sp + 12|0;\n $36 = sp + 8|0;\n $37 = sp;\n $32 = $0;\n $33 = $1;\n $38 = $32;\n $39 = ((($38)) + 8|0);\n $34 = $39;\n $40 = $34;\n $31 = $40;\n $41 = $31;\n $42 = HEAP32[$41>>2]|0;\n $28 = $41;\n $29 = $42;\n $43 = $29;\n $25 = $27;\n $26 = $43;\n $44 = $25;\n $45 = $26;\n HEAP32[$44>>2] = $45;\n $46 = HEAP32[$27>>2]|0;\n HEAP32[$30>>2] = $46;\n $47 = HEAP32[$30>>2]|0;\n HEAP32[$35>>2] = $47;\n $48 = $34;\n $24 = $48;\n $49 = $24;\n $50 = ((($49)) + 4|0);\n $51 = HEAP32[$50>>2]|0;\n $21 = $49;\n $22 = $51;\n $52 = $22;\n $18 = $20;\n $19 = $52;\n $53 = $18;\n $54 = $19;\n HEAP32[$53>>2] = $54;\n $55 = HEAP32[$20>>2]|0;\n HEAP32[$23>>2] = $55;\n $56 = HEAP32[$23>>2]|0;\n HEAP32[$36>>2] = $56;\n while(1) {\n  $16 = $35;\n  $17 = $36;\n  $57 = $16;\n  $58 = $17;\n  $14 = $57;\n  $15 = $58;\n  $59 = $14;\n  $13 = $59;\n  $60 = $13;\n  $61 = HEAP32[$60>>2]|0;\n  $62 = $15;\n  $12 = $62;\n  $63 = $12;\n  $64 = HEAP32[$63>>2]|0;\n  $65 = ($61|0)==($64|0);\n  $66 = $65 ^ 1;\n  if (!($66)) {\n   break;\n  }\n  $10 = $35;\n  $67 = $10;\n  $68 = HEAP32[$67>>2]|0;\n  $8 = $37;\n  $9 = $68;\n  $69 = $8;\n  $70 = $9;\n  $71 = HEAP32[$70>>2]|0;\n  HEAP32[$69>>2] = $71;\n  $72 = ((($69)) + 4|0);\n  $73 = $9;\n  $74 = ((($73)) + 4|0);\n  $75 = HEAP32[$74>>2]|0;\n  HEAP32[$72>>2] = $75;\n  $76 = ((($69)) + 4|0);\n  $77 = HEAP32[$76>>2]|0;\n  $78 = ($77|0)!=(0|0);\n  if ($78) {\n   $79 = ((($69)) + 4|0);\n   $80 = HEAP32[$79>>2]|0;\n   $7 = $80;\n   $81 = $7;\n   $6 = $81;\n   $82 = $6;\n   $83 = ((($82)) + 4|0);\n   $3 = $83;\n   $84 = $3;\n   $4 = 1;\n   $85 = $4;\n   $86 = HEAP32[$84>>2]|0;\n   $87 = (($86) + ($85))|0;\n   HEAP32[$84>>2] = $87;\n   $88 = (($86) + ($85))|0;\n   $5 = $88;\n  }\n  $2 = $37;\n  $89 = $2;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = HEAP32[$90>>2]|0;\n  $92 = ((($91)) + 12|0);\n  $93 = HEAP32[$92>>2]|0;\n  $94 = $33;\n  $95 = (FUNCTION_TABLE_iii[$93 & 255]($90,$94)|0);\n  $33 = $95;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($37);\n  $11 = $35;\n  $96 = $11;\n  $97 = HEAP32[$96>>2]|0;\n  $98 = ((($97)) + 8|0);\n  HEAP32[$96>>2] = $98;\n }\n $99 = ((($38)) + 20|0);\n $100 = HEAP8[$99>>0]|0;\n $101 = $100&1;\n if (!($101)) {\n  $105 = $33;\n  STACKTOP = sp;return ($105|0);\n }\n $102 = ((($38)) + 20|0);\n HEAP8[$102>>0] = 0;\n $103 = ((($38)) + 4|0);\n $104 = HEAP32[$103>>2]|0;\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($104);\n $105 = $33;\n STACKTOP = sp;return ($105|0);\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (1956);\n $3 = ((($2)) + 8|0);\n __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($3);\n __ZN6laszip7formats20dynamic_decompressorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats20dynamic_decompressorD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats20dynamic_decompressorD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n _llvm_trap();\n // unreachable;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -8|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n  $54 = $16;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($54);\n }\n $55 = $28;\n $56 = ((($37)) + 4|0);\n HEAP32[$56>>2] = $55;\n $14 = $32;\n $57 = $14;\n $58 = ((($57)) + 8|0);\n $13 = $58;\n $59 = $13;\n $12 = $59;\n $60 = $12;\n $61 = HEAP32[$32>>2]|0;\n $4 = $32;\n $62 = $4;\n $3 = $62;\n $63 = $3;\n $64 = ((($63)) + 8|0);\n $2 = $64;\n $65 = $2;\n $1 = $65;\n $66 = $1;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$62>>2]|0;\n $69 = $67;\n $70 = $68;\n $71 = (($69) - ($70))|0;\n $72 = (($71|0) / 8)&-1;\n $9 = $60;\n $10 = $61;\n $11 = $72;\n $73 = $9;\n $74 = $10;\n $75 = $11;\n $6 = $73;\n $7 = $74;\n $8 = $75;\n $76 = $7;\n $5 = $76;\n $77 = $5;\n __ZdlPv($77);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 312;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2024);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2072);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $12 = sp + 8|0;\n $17 = sp + 201|0;\n $26 = sp;\n $29 = sp + 200|0;\n $37 = sp + 72|0;\n $40 = sp + 60|0;\n $48 = sp + 12|0;\n $45 = $0;\n $46 = $1;\n $49 = $45;\n $44 = $49;\n $50 = $44;\n $51 = ((($50)) + 8|0);\n $43 = $51;\n $52 = $43;\n $42 = $52;\n $53 = $42;\n $47 = $53;\n $41 = $49;\n $54 = $41;\n $55 = ((($54)) + 4|0);\n $56 = HEAP32[$55>>2]|0;\n $57 = HEAP32[$54>>2]|0;\n $58 = $56;\n $59 = $57;\n $60 = (($58) - ($59))|0;\n $61 = (($60|0) / 8)&-1;\n $62 = (($61) + 1)|0;\n $36 = $49;\n HEAP32[$37>>2] = $62;\n $63 = $36;\n $64 = (__ZNKSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE8max_sizeEv($63)|0);\n $38 = $64;\n $65 = HEAP32[$37>>2]|0;\n $66 = $38;\n $67 = ($65>>>0)>($66>>>0);\n if ($67) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($63);\n  // unreachable;\n }\n $34 = $63;\n $68 = $34;\n $33 = $68;\n $69 = $33;\n $32 = $69;\n $70 = $32;\n $71 = ((($70)) + 8|0);\n $31 = $71;\n $72 = $31;\n $30 = $72;\n $73 = $30;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 8)&-1;\n $39 = $79;\n $80 = $39;\n $81 = $38;\n $82 = (($81>>>0) / 2)&-1;\n $83 = ($80>>>0)>=($82>>>0);\n if ($83) {\n  $84 = $38;\n  $35 = $84;\n } else {\n  $85 = $39;\n  $86 = $85<<1;\n  HEAP32[$40>>2] = $86;\n  $27 = $40;\n  $28 = $37;\n  $87 = $27;\n  $88 = $28;\n  ;HEAP8[$26>>0]=HEAP8[$29>>0]|0;\n  $24 = $87;\n  $25 = $88;\n  $89 = $24;\n  $90 = $25;\n  $21 = $26;\n  $22 = $89;\n  $23 = $90;\n  $91 = $22;\n  $92 = HEAP32[$91>>2]|0;\n  $93 = $23;\n  $94 = HEAP32[$93>>2]|0;\n  $95 = ($92>>>0)<($94>>>0);\n  $96 = $25;\n  $97 = $24;\n  $98 = $95 ? $96 : $97;\n  $99 = HEAP32[$98>>2]|0;\n  $35 = $99;\n }\n $100 = $35;\n $20 = $49;\n $101 = $20;\n $102 = ((($101)) + 4|0);\n $103 = HEAP32[$102>>2]|0;\n $104 = HEAP32[$101>>2]|0;\n $105 = $103;\n $106 = $104;\n $107 = (($105) - ($106))|0;\n $108 = (($107|0) / 8)&-1;\n $109 = $47;\n __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEEC2EjjS8_($48,$100,$108,$109);\n $110 = $47;\n $111 = ((($48)) + 8|0);\n $112 = HEAP32[$111>>2]|0;\n $19 = $112;\n $113 = $19;\n $114 = $46;\n $18 = $114;\n $115 = $18;\n $14 = $110;\n $15 = $113;\n $16 = $115;\n $116 = $14;\n $117 = $15;\n $118 = $16;\n $13 = $118;\n $119 = $13;\n ;HEAP8[$12>>0]=HEAP8[$17>>0]|0;\n $9 = $116;\n $10 = $117;\n $11 = $119;\n $120 = $9;\n $121 = $10;\n $122 = $11;\n $8 = $122;\n $123 = $8;\n $5 = $120;\n $6 = $121;\n $7 = $123;\n $124 = $6;\n $125 = $7;\n $4 = $125;\n $126 = $4;\n $2 = $124;\n $3 = $126;\n $127 = $2;\n $128 = $3;\n $129 = HEAP32[$128>>2]|0;\n HEAP32[$127>>2] = $129;\n $130 = ((($127)) + 4|0);\n $131 = $3;\n $132 = ((($131)) + 4|0);\n $133 = HEAP32[$132>>2]|0;\n HEAP32[$130>>2] = $133;\n $134 = $3;\n HEAP32[$134>>2] = 0;\n $135 = $3;\n $136 = ((($135)) + 4|0);\n HEAP32[$136>>2] = 0;\n $137 = ((($48)) + 8|0);\n $138 = HEAP32[$137>>2]|0;\n $139 = ((($138)) + 8|0);\n HEAP32[$137>>2] = $139;\n __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE($49,$48);\n __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEED2Ev($48);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEEC2EjjS8_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(536870911);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = $68<<3;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + ($74<<3)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + ($79<<3)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0;\n var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0;\n var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0);\n $17 = sp;\n $22 = sp + 412|0;\n $33 = sp + 292|0;\n $39 = sp + 268|0;\n $51 = sp + 220|0;\n $104 = $0;\n $105 = $1;\n $106 = $104;\n $103 = $106;\n $107 = $103;\n $102 = $107;\n $108 = $102;\n $109 = HEAP32[$108>>2]|0;\n $101 = $109;\n $110 = $101;\n $80 = $107;\n $111 = $80;\n $112 = HEAP32[$111>>2]|0;\n $79 = $112;\n $113 = $79;\n $85 = $107;\n $114 = $85;\n $84 = $114;\n $115 = $84;\n $83 = $115;\n $116 = $83;\n $117 = ((($116)) + 8|0);\n $82 = $117;\n $118 = $82;\n $81 = $118;\n $119 = $81;\n $120 = HEAP32[$119>>2]|0;\n $121 = HEAP32[$115>>2]|0;\n $122 = $120;\n $123 = $121;\n $124 = (($122) - ($123))|0;\n $125 = (($124|0) / 8)&-1;\n $126 = (($113) + ($125<<3)|0);\n $87 = $107;\n $127 = $87;\n $128 = HEAP32[$127>>2]|0;\n $86 = $128;\n $129 = $86;\n $88 = $107;\n $130 = $88;\n $131 = ((($130)) + 4|0);\n $132 = HEAP32[$131>>2]|0;\n $133 = HEAP32[$130>>2]|0;\n $134 = $132;\n $135 = $133;\n $136 = (($134) - ($135))|0;\n $137 = (($136|0) / 8)&-1;\n $138 = (($129) + ($137<<3)|0);\n $90 = $107;\n $139 = $90;\n $140 = HEAP32[$139>>2]|0;\n $89 = $140;\n $141 = $89;\n $95 = $107;\n $142 = $95;\n $94 = $142;\n $143 = $94;\n $93 = $143;\n $144 = $93;\n $145 = ((($144)) + 8|0);\n $92 = $145;\n $146 = $92;\n $91 = $146;\n $147 = $91;\n $148 = HEAP32[$147>>2]|0;\n $149 = HEAP32[$143>>2]|0;\n $150 = $148;\n $151 = $149;\n $152 = (($150) - ($151))|0;\n $153 = (($152|0) / 8)&-1;\n $154 = (($141) + ($153<<3)|0);\n $96 = $107;\n $97 = $110;\n $98 = $126;\n $99 = $138;\n $100 = $154;\n $4 = $106;\n $155 = $4;\n $156 = ((($155)) + 8|0);\n $3 = $156;\n $157 = $3;\n $2 = $157;\n $158 = $2;\n $159 = HEAP32[$106>>2]|0;\n $160 = ((($106)) + 4|0);\n $161 = HEAP32[$160>>2]|0;\n $162 = $105;\n $163 = ((($162)) + 4|0);\n $24 = $158;\n $25 = $159;\n $26 = $161;\n $27 = $163;\n while(1) {\n  $164 = $26;\n  $165 = $25;\n  $166 = ($164|0)!=($165|0);\n  if (!($166)) {\n   break;\n  }\n  $167 = $24;\n  $168 = $27;\n  $169 = HEAP32[$168>>2]|0;\n  $170 = ((($169)) + -8|0);\n  $23 = $170;\n  $171 = $23;\n  $172 = $26;\n  $173 = ((($172)) + -8|0);\n  $26 = $173;\n  $6 = $173;\n  $174 = $6;\n  $5 = $174;\n  $175 = $5;\n  $19 = $167;\n  $20 = $171;\n  $21 = $175;\n  $176 = $19;\n  $177 = $20;\n  $178 = $21;\n  $18 = $178;\n  $179 = $18;\n  ;HEAP8[$17>>0]=HEAP8[$22>>0]|0;\n  $14 = $176;\n  $15 = $177;\n  $16 = $179;\n  $180 = $14;\n  $181 = $15;\n  $182 = $16;\n  $13 = $182;\n  $183 = $13;\n  $10 = $180;\n  $11 = $181;\n  $12 = $183;\n  $184 = $11;\n  $185 = $12;\n  $9 = $185;\n  $186 = $9;\n  $7 = $184;\n  $8 = $186;\n  $187 = $7;\n  $188 = $8;\n  $189 = HEAP32[$188>>2]|0;\n  HEAP32[$187>>2] = $189;\n  $190 = ((($187)) + 4|0);\n  $191 = $8;\n  $192 = ((($191)) + 4|0);\n  $193 = HEAP32[$192>>2]|0;\n  HEAP32[$190>>2] = $193;\n  $194 = $8;\n  HEAP32[$194>>2] = 0;\n  $195 = $8;\n  $196 = ((($195)) + 4|0);\n  HEAP32[$196>>2] = 0;\n  $197 = $27;\n  $198 = HEAP32[$197>>2]|0;\n  $199 = ((($198)) + -8|0);\n  HEAP32[$197>>2] = $199;\n }\n $200 = $105;\n $201 = ((($200)) + 4|0);\n $31 = $106;\n $32 = $201;\n $202 = $31;\n $30 = $202;\n $203 = $30;\n $204 = HEAP32[$203>>2]|0;\n HEAP32[$33>>2] = $204;\n $205 = $32;\n $28 = $205;\n $206 = $28;\n $207 = HEAP32[$206>>2]|0;\n $208 = $31;\n HEAP32[$208>>2] = $207;\n $29 = $33;\n $209 = $29;\n $210 = HEAP32[$209>>2]|0;\n $211 = $32;\n HEAP32[$211>>2] = $210;\n $212 = ((($106)) + 4|0);\n $213 = $105;\n $214 = ((($213)) + 8|0);\n $37 = $212;\n $38 = $214;\n $215 = $37;\n $36 = $215;\n $216 = $36;\n $217 = HEAP32[$216>>2]|0;\n HEAP32[$39>>2] = $217;\n $218 = $38;\n $34 = $218;\n $219 = $34;\n $220 = HEAP32[$219>>2]|0;\n $221 = $37;\n HEAP32[$221>>2] = $220;\n $35 = $39;\n $222 = $35;\n $223 = HEAP32[$222>>2]|0;\n $224 = $38;\n HEAP32[$224>>2] = $223;\n $42 = $106;\n $225 = $42;\n $226 = ((($225)) + 8|0);\n $41 = $226;\n $227 = $41;\n $40 = $227;\n $228 = $40;\n $229 = $105;\n $45 = $229;\n $230 = $45;\n $231 = ((($230)) + 12|0);\n $44 = $231;\n $232 = $44;\n $43 = $232;\n $233 = $43;\n $49 = $228;\n $50 = $233;\n $234 = $49;\n $48 = $234;\n $235 = $48;\n $236 = HEAP32[$235>>2]|0;\n HEAP32[$51>>2] = $236;\n $237 = $50;\n $46 = $237;\n $238 = $46;\n $239 = HEAP32[$238>>2]|0;\n $240 = $49;\n HEAP32[$240>>2] = $239;\n $47 = $51;\n $241 = $47;\n $242 = HEAP32[$241>>2]|0;\n $243 = $50;\n HEAP32[$243>>2] = $242;\n $244 = $105;\n $245 = ((($244)) + 4|0);\n $246 = HEAP32[$245>>2]|0;\n $247 = $105;\n HEAP32[$247>>2] = $246;\n $52 = $106;\n $248 = $52;\n $249 = ((($248)) + 4|0);\n $250 = HEAP32[$249>>2]|0;\n $251 = HEAP32[$248>>2]|0;\n $252 = $250;\n $253 = $251;\n $254 = (($252) - ($253))|0;\n $255 = (($254|0) / 8)&-1;\n $76 = $106;\n $77 = $255;\n $256 = $76;\n $75 = $256;\n $257 = $75;\n $258 = HEAP32[$257>>2]|0;\n $74 = $258;\n $259 = $74;\n $54 = $256;\n $260 = $54;\n $261 = HEAP32[$260>>2]|0;\n $53 = $261;\n $262 = $53;\n $59 = $256;\n $263 = $59;\n $58 = $263;\n $264 = $58;\n $57 = $264;\n $265 = $57;\n $266 = ((($265)) + 8|0);\n $56 = $266;\n $267 = $56;\n $55 = $267;\n $268 = $55;\n $269 = HEAP32[$268>>2]|0;\n $270 = HEAP32[$264>>2]|0;\n $271 = $269;\n $272 = $270;\n $273 = (($271) - ($272))|0;\n $274 = (($273|0) / 8)&-1;\n $275 = (($262) + ($274<<3)|0);\n $61 = $256;\n $276 = $61;\n $277 = HEAP32[$276>>2]|0;\n $60 = $277;\n $278 = $60;\n $66 = $256;\n $279 = $66;\n $65 = $279;\n $280 = $65;\n $64 = $280;\n $281 = $64;\n $282 = ((($281)) + 8|0);\n $63 = $282;\n $283 = $63;\n $62 = $283;\n $284 = $62;\n $285 = HEAP32[$284>>2]|0;\n $286 = HEAP32[$280>>2]|0;\n $287 = $285;\n $288 = $286;\n $289 = (($287) - ($288))|0;\n $290 = (($289|0) / 8)&-1;\n $291 = (($278) + ($290<<3)|0);\n $68 = $256;\n $292 = $68;\n $293 = HEAP32[$292>>2]|0;\n $67 = $293;\n $294 = $67;\n $295 = $77;\n $296 = (($294) + ($295<<3)|0);\n $69 = $256;\n $70 = $259;\n $71 = $275;\n $72 = $291;\n $73 = $296;\n $78 = $106;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -8|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n  $60 = $16;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($60);\n }\n $61 = HEAP32[$35>>2]|0;\n $62 = ($61|0)!=(0|0);\n if (!($62)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $63 = $14;\n $64 = ((($63)) + 12|0);\n $13 = $64;\n $65 = $13;\n $66 = ((($65)) + 4|0);\n $12 = $66;\n $67 = $12;\n $68 = HEAP32[$67>>2]|0;\n $69 = HEAP32[$35>>2]|0;\n $11 = $35;\n $70 = $11;\n $10 = $70;\n $71 = $10;\n $72 = ((($71)) + 12|0);\n $9 = $72;\n $73 = $9;\n $8 = $73;\n $74 = $8;\n $75 = HEAP32[$74>>2]|0;\n $76 = HEAP32[$70>>2]|0;\n $77 = $75;\n $78 = $76;\n $79 = (($77) - ($78))|0;\n $80 = (($79|0) / 8)&-1;\n $5 = $68;\n $6 = $69;\n $7 = $80;\n $81 = $5;\n $82 = $6;\n $83 = $7;\n $2 = $81;\n $3 = $82;\n $4 = $83;\n $84 = $3;\n $1 = $84;\n $85 = $1;\n __ZdlPv($85);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = 536870911;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZN6laszip7formats10base_fieldC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2048);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($2);\n $3 = ((($2)) + 3980|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($3);\n $4 = ((($2)) + 4380|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($4);\n $5 = ((($2)) + 4780|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 4781|0);\n HEAP8[$6>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2024);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats10base_field11compressRawEPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $3;\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats10base_fieldD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats10base_fieldD0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats10base_fieldD2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats10base_field13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $3;\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;\n var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;\n var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;\n var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;\n var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;\n var $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $30 = sp + 124|0;\n $31 = sp + 4|0;\n $29 = $0;\n $33 = $29;\n __ZN6laszip7formats3las7point10C2Ev($33);\n $34 = ((($33)) + 52|0);\n __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($34);\n $35 = ((($33)) + 436|0);\n __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($35);\n $36 = ((($33)) + 852|0);\n __ZN6laszip6models10arithmeticC2EjbPj($36,64,0,0);\n $37 = ((($33)) + 3976|0);\n HEAP8[$37>>0] = 0;\n $38 = ((($33)) + 20|0);\n HEAP16[$30>>1] = 0;\n $27 = $38;\n $28 = $30;\n $39 = $27;\n $40 = $28;\n $24 = $39;\n $25 = 16;\n $26 = $40;\n $41 = $24;\n $42 = $25;\n $23 = $42;\n $43 = $23;\n $44 = $26;\n $20 = $41;\n $21 = $43;\n $22 = $44;\n while(1) {\n  $45 = $21;\n  $46 = ($45>>>0)>(0);\n  if (!($46)) {\n   break;\n  }\n  $47 = $22;\n  $48 = HEAP16[$47>>1]|0;\n  $49 = $20;\n  HEAP16[$49>>1] = $48;\n  $50 = $20;\n  $51 = ((($50)) + 2|0);\n  $20 = $51;\n  $52 = $21;\n  $53 = (($52) + -1)|0;\n  $21 = $53;\n }\n $54 = (__Znwj(44)|0);\n __ZN6laszip6models10arithmeticC2EjbPj($54,256,0,0);\n $55 = ((($33)) + 896|0);\n $18 = $55;\n $19 = 0;\n $56 = $18;\n $57 = $19;\n $58 = (($56) + ($57<<2)|0);\n HEAP32[$58>>2] = $54;\n $59 = (__Znwj(44)|0);\n __ZN6laszip6models10arithmeticC2EjbPj($59,256,0,0);\n $60 = ((($33)) + 896|0);\n $14 = $60;\n $15 = 1;\n $61 = $14;\n $62 = $15;\n $63 = (($61) + ($62<<2)|0);\n HEAP32[$63>>2] = $59;\n $64 = ((($33)) + 820|0);\n HEAP32[$31>>2] = 0;\n $10 = $64;\n $11 = $31;\n $65 = $10;\n $66 = $11;\n $7 = $65;\n $8 = 8;\n $9 = $66;\n $67 = $7;\n $68 = $8;\n $6 = $68;\n $69 = $6;\n $70 = $9;\n $3 = $67;\n $4 = $69;\n $5 = $70;\n while(1) {\n  $71 = $4;\n  $72 = ($71>>>0)>(0);\n  if (!($72)) {\n   break;\n  }\n  $73 = $5;\n  $74 = HEAP32[$73>>2]|0;\n  $75 = $3;\n  HEAP32[$75>>2] = $74;\n  $76 = $3;\n  $77 = ((($76)) + 4|0);\n  $3 = $77;\n  $78 = $4;\n  $79 = (($78) + -1)|0;\n  $4 = $79;\n }\n $32 = 0;\n while(1) {\n  $80 = $32;\n  $81 = ($80|0)<(256);\n  if (!($81)) {\n   break;\n  }\n  $82 = (__Znwj(44)|0);\n  __ZN6laszip6models10arithmeticC2EjbPj($82,256,0,0);\n  $83 = ((($33)) + 904|0);\n  $84 = $32;\n  $1 = $83;\n  $2 = $84;\n  $85 = $1;\n  $86 = $2;\n  $87 = (($85) + ($86<<2)|0);\n  HEAP32[$87>>2] = $82;\n  $88 = (__Znwj(44)|0);\n  __ZN6laszip6models10arithmeticC2EjbPj($88,256,0,0);\n  $89 = ((($33)) + 1928|0);\n  $90 = $32;\n  $12 = $89;\n  $13 = $90;\n  $91 = $12;\n  $92 = $13;\n  $93 = (($91) + ($92<<2)|0);\n  HEAP32[$93>>2] = $88;\n  $94 = (__Znwj(44)|0);\n  __ZN6laszip6models10arithmeticC2EjbPj($94,256,0,0);\n  $95 = ((($33)) + 2952|0);\n  $96 = $32;\n  $16 = $95;\n  $17 = $96;\n  $97 = $16;\n  $98 = $17;\n  $99 = (($97) + ($98<<2)|0);\n  HEAP32[$99>>2] = $94;\n  $100 = $32;\n  $101 = (($100) + 1)|0;\n  $32 = $101;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,16,4,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip11compressors7integerC2Ejjjj($3,16,1,8,0);\n $4 = ((($2)) + 160|0);\n __ZN6laszip11compressors7integerC2Ejjjj($4,32,2,8,0);\n $5 = ((($2)) + 240|0);\n __ZN6laszip11compressors7integerC2Ejjjj($5,32,22,8,0);\n $6 = ((($2)) + 320|0);\n __ZN6laszip11compressors7integerC2Ejjjj($6,32,20,8,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integerC2Ejjjj($2,16,4,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0);\n $4 = ((($2)) + 160|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($4,32,2,8,0);\n $5 = ((($2)) + 240|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($5,32,22,8,0);\n $6 = ((($2)) + 320|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($6,32,20,8,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 320|0);\n __ZN6laszip11compressors7integerD2Ev($3);\n $4 = ((($2)) + 240|0);\n __ZN6laszip11compressors7integerD2Ev($4);\n $5 = ((($2)) + 160|0);\n __ZN6laszip11compressors7integerD2Ev($5);\n $6 = ((($2)) + 80|0);\n __ZN6laszip11compressors7integerD2Ev($6);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $11 = $0;\n $13 = $11;\n $14 = ((($13)) + 896|0);\n $9 = $14;\n $10 = 0;\n $15 = $9;\n $16 = $10;\n $17 = (($15) + ($16<<2)|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18|0)==(0|0);\n if (!($19)) {\n  __ZN6laszip6models10arithmeticD2Ev($18);\n  __ZdlPv($18);\n }\n $20 = ((($13)) + 896|0);\n $7 = $20;\n $8 = 1;\n $21 = $7;\n $22 = $8;\n $23 = (($21) + ($22<<2)|0);\n $24 = HEAP32[$23>>2]|0;\n $25 = ($24|0)==(0|0);\n if (!($25)) {\n  __ZN6laszip6models10arithmeticD2Ev($24);\n  __ZdlPv($24);\n }\n $12 = 0;\n while(1) {\n  $26 = $12;\n  $27 = ($26|0)<(256);\n  if (!($27)) {\n   break;\n  }\n  $28 = ((($13)) + 904|0);\n  $29 = $12;\n  $5 = $28;\n  $6 = $29;\n  $30 = $5;\n  $31 = $6;\n  $32 = (($30) + ($31<<2)|0);\n  $33 = HEAP32[$32>>2]|0;\n  $34 = ($33|0)==(0|0);\n  if (!($34)) {\n   __ZN6laszip6models10arithmeticD2Ev($33);\n   __ZdlPv($33);\n  }\n  $35 = ((($13)) + 1928|0);\n  $36 = $12;\n  $3 = $35;\n  $4 = $36;\n  $37 = $3;\n  $38 = $4;\n  $39 = (($37) + ($38<<2)|0);\n  $40 = HEAP32[$39>>2]|0;\n  $41 = ($40|0)==(0|0);\n  if (!($41)) {\n   __ZN6laszip6models10arithmeticD2Ev($40);\n   __ZdlPv($40);\n  }\n  $42 = ((($13)) + 2952|0);\n  $43 = $12;\n  $1 = $42;\n  $2 = $43;\n  $44 = $1;\n  $45 = $2;\n  $46 = (($44) + ($45<<2)|0);\n  $47 = HEAP32[$46>>2]|0;\n  $48 = ($47|0)==(0|0);\n  if (!($48)) {\n   __ZN6laszip6models10arithmeticD2Ev($47);\n   __ZdlPv($47);\n  }\n  $49 = $12;\n  $50 = (($49) + 1)|0;\n  $12 = $50;\n }\n $51 = ((($13)) + 852|0);\n __ZN6laszip6models10arithmeticD2Ev($51);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats3las7point10C2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP8[$2>>0]=0&255;HEAP8[$2+1>>0]=(0>>8)&255;HEAP8[$2+2>>0]=(0>>16)&255;HEAP8[$2+3>>0]=0>>24;\n $3 = ((($2)) + 4|0);\n HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=(0>>8)&255;HEAP8[$3+2>>0]=(0>>16)&255;HEAP8[$3+3>>0]=0>>24;\n $4 = ((($2)) + 12|0);\n HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=0>>8;\n $5 = ((($2)) + 14|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6 & -8;\n HEAP8[$5>>0] = $7;\n $8 = ((($2)) + 14|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9 & -57;\n HEAP8[$8>>0] = $10;\n $11 = ((($2)) + 14|0);\n $12 = HEAP8[$11>>0]|0;\n $13 = $12 & -65;\n HEAP8[$11>>0] = $13;\n $14 = ((($2)) + 14|0);\n $15 = HEAP8[$14>>0]|0;\n $16 = $15 & 127;\n HEAP8[$14>>0] = $16;\n $17 = ((($2)) + 15|0);\n HEAP8[$17>>0] = 0;\n $18 = ((($2)) + 16|0);\n HEAP8[$18>>0] = 0;\n $19 = ((($2)) + 17|0);\n HEAP8[$19>>0] = 0;\n $20 = ((($2)) + 18|0);\n HEAP8[$20>>0]=0&255;HEAP8[$20+1>>0]=0>>8;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 384|0);\n $4 = $2;\n while(1) {\n  __ZN6laszip5utils16streaming_medianIiEC2Ev($4);\n  $5 = ((($4)) + 24|0);\n  $6 = ($5|0)==($3|0);\n  if ($6) {\n   break;\n  } else {\n   $4 = $5;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip5utils16streaming_medianIiEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip5utils16streaming_medianIiE4initEv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip5utils16streaming_medianIiE4initEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $11 = sp;\n $10 = $0;\n $12 = $10;\n HEAP32[$11>>2] = 0;\n $8 = $12;\n $9 = $11;\n $13 = $8;\n $14 = $9;\n $5 = $13;\n $6 = 5;\n $7 = $14;\n $15 = $5;\n $16 = $6;\n $4 = $16;\n $17 = $4;\n $18 = $7;\n $1 = $15;\n $2 = $17;\n $3 = $18;\n while(1) {\n  $19 = $2;\n  $20 = ($19>>>0)>(0);\n  if (!($20)) {\n   break;\n  }\n  $21 = $3;\n  $22 = HEAP32[$21>>2]|0;\n  $23 = $1;\n  HEAP32[$23>>2] = $22;\n  $24 = $1;\n  $25 = ((($24)) + 4|0);\n  $1 = $25;\n  $26 = $2;\n  $27 = (($26) + -1)|0;\n  $2 = $27;\n }\n $28 = ((($12)) + 20|0);\n HEAP8[$28>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip11compressors7integerC2Ejjjj($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0;\n var $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $15 = sp + 72|0;\n $27 = sp + 24|0;\n $29 = $0;\n $30 = $1;\n $31 = $2;\n $32 = $3;\n $33 = $4;\n $34 = $29;\n $35 = ((($34)) + 4|0);\n $36 = $30;\n HEAP32[$35>>2] = $36;\n $37 = ((($34)) + 8|0);\n $38 = $31;\n HEAP32[$37>>2] = $38;\n $39 = ((($34)) + 12|0);\n $40 = $32;\n HEAP32[$39>>2] = $40;\n $41 = ((($34)) + 16|0);\n $42 = $33;\n HEAP32[$41>>2] = $42;\n $43 = ((($34)) + 36|0);\n $28 = $43;\n $44 = $28;\n $26 = $44;\n $45 = $26;\n $25 = $45;\n HEAP32[$45>>2] = 0;\n $46 = ((($45)) + 4|0);\n HEAP32[$46>>2] = 0;\n $47 = ((($45)) + 8|0);\n HEAP32[$27>>2] = 0;\n $23 = $47;\n $24 = $27;\n $48 = $23;\n $49 = $24;\n $22 = $49;\n $50 = $22;\n $18 = $48;\n $19 = $50;\n $51 = $18;\n $52 = $19;\n $17 = $52;\n HEAP32[$51>>2] = 0;\n $21 = $48;\n $53 = $21;\n $20 = $53;\n $54 = ((($34)) + 48|0);\n __ZN6laszip6models14arithmetic_bitC2Ev($54);\n $55 = ((($34)) + 68|0);\n $16 = $55;\n $56 = $16;\n $14 = $56;\n $57 = $14;\n $13 = $57;\n HEAP32[$57>>2] = 0;\n $58 = ((($57)) + 4|0);\n HEAP32[$58>>2] = 0;\n $59 = ((($57)) + 8|0);\n HEAP32[$15>>2] = 0;\n $11 = $59;\n $12 = $15;\n $60 = $11;\n $61 = $12;\n $10 = $61;\n $62 = $10;\n $6 = $60;\n $7 = $62;\n $63 = $6;\n $64 = $7;\n $5 = $64;\n HEAP32[$63>>2] = 0;\n $9 = $60;\n $65 = $9;\n $8 = $65;\n $66 = $33;\n $67 = ($66|0)!=(0);\n if (!($67)) {\n  $100 = $30;\n  $101 = ($100|0)!=(0);\n  $102 = $30;\n  $103 = ($102>>>0)<(32);\n  $or$cond = $101 & $103;\n  if ($or$cond) {\n   $104 = $30;\n   $105 = ((($34)) + 20|0);\n   HEAP32[$105>>2] = $104;\n   $106 = $30;\n   $107 = 1 << $106;\n   $108 = ((($34)) + 24|0);\n   HEAP32[$108>>2] = $107;\n   $109 = ((($34)) + 24|0);\n   $110 = HEAP32[$109>>2]|0;\n   $111 = (($110>>>0) / 2)&-1;\n   $112 = (0 - ($111))|0;\n   $113 = ((($34)) + 28|0);\n   HEAP32[$113>>2] = $112;\n   $114 = ((($34)) + 28|0);\n   $115 = HEAP32[$114>>2]|0;\n   $116 = ((($34)) + 24|0);\n   $117 = HEAP32[$116>>2]|0;\n   $118 = (($115) + ($117))|0;\n   $119 = (($118) - 1)|0;\n   $120 = ((($34)) + 32|0);\n   HEAP32[$120>>2] = $119;\n   HEAP32[$34>>2] = 0;\n   STACKTOP = sp;return;\n  } else {\n   $121 = ((($34)) + 20|0);\n   HEAP32[$121>>2] = 32;\n   $122 = ((($34)) + 24|0);\n   HEAP32[$122>>2] = 0;\n   $123 = ((($34)) + 28|0);\n   HEAP32[$123>>2] = -2147483648;\n   $124 = ((($34)) + 32|0);\n   HEAP32[$124>>2] = 2147483647;\n   HEAP32[$34>>2] = 0;\n   STACKTOP = sp;return;\n  }\n }\n $68 = ((($34)) + 20|0);\n HEAP32[$68>>2] = 0;\n $69 = $33;\n $70 = ((($34)) + 24|0);\n HEAP32[$70>>2] = $69;\n while(1) {\n  $71 = $33;\n  $72 = ($71|0)!=(0);\n  if (!($72)) {\n   break;\n  }\n  $73 = $33;\n  $74 = $73 >>> 1;\n  $33 = $74;\n  $75 = ((($34)) + 20|0);\n  $76 = HEAP32[$75>>2]|0;\n  $77 = (($76) + 1)|0;\n  HEAP32[$75>>2] = $77;\n }\n $78 = ((($34)) + 24|0);\n $79 = HEAP32[$78>>2]|0;\n $80 = ((($34)) + 20|0);\n $81 = HEAP32[$80>>2]|0;\n $82 = (($81) - 1)|0;\n $83 = 1 << $82;\n $84 = ($79|0)==($83|0);\n if ($84) {\n  $85 = ((($34)) + 20|0);\n  $86 = HEAP32[$85>>2]|0;\n  $87 = (($86) + -1)|0;\n  HEAP32[$85>>2] = $87;\n }\n $88 = ((($34)) + 24|0);\n $89 = HEAP32[$88>>2]|0;\n $90 = (($89>>>0) / 2)&-1;\n $91 = (0 - ($90))|0;\n $92 = ((($34)) + 28|0);\n HEAP32[$92>>2] = $91;\n $93 = ((($34)) + 28|0);\n $94 = HEAP32[$93>>2]|0;\n $95 = ((($34)) + 24|0);\n $96 = HEAP32[$95>>2]|0;\n $97 = (($94) + ($96))|0;\n $98 = (($97) - 1)|0;\n $99 = ((($34)) + 32|0);\n HEAP32[$99>>2] = $98;\n HEAP32[$34>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip11compressors7integerD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0;\n var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0;\n var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0;\n var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0);\n $27 = sp + 8|0;\n $30 = sp + 329|0;\n $68 = sp;\n $71 = sp + 328|0;\n $83 = $0;\n $84 = $83;\n $85 = ((($84)) + 36|0);\n $81 = $85;\n $86 = $81;\n $80 = $86;\n $87 = $80;\n $88 = ((($87)) + 4|0);\n $89 = HEAP32[$88>>2]|0;\n $90 = HEAP32[$87>>2]|0;\n $91 = $89;\n $92 = $90;\n $93 = (($91) - ($92))|0;\n $94 = (($93|0) / 44)&-1;\n $82 = $94;\n $79 = $86;\n $95 = $79;\n $96 = HEAP32[$95>>2]|0;\n $76 = $95;\n $77 = $96;\n $97 = $76;\n $98 = ((($97)) + 4|0);\n $99 = HEAP32[$98>>2]|0;\n $78 = $99;\n while(1) {\n  $100 = $77;\n  $101 = $78;\n  $102 = ($100|0)!=($101|0);\n  if (!($102)) {\n   break;\n  }\n  $75 = $97;\n  $103 = $75;\n  $104 = ((($103)) + 8|0);\n  $74 = $104;\n  $105 = $74;\n  $73 = $105;\n  $106 = $73;\n  $107 = $78;\n  $108 = ((($107)) + -44|0);\n  $78 = $108;\n  $72 = $108;\n  $109 = $72;\n  $69 = $106;\n  $70 = $109;\n  $110 = $69;\n  $111 = $70;\n  ;HEAP8[$68>>0]=HEAP8[$71>>0]|0;\n  $66 = $110;\n  $67 = $111;\n  $112 = $66;\n  $113 = $67;\n  $64 = $112;\n  $65 = $113;\n  $114 = $65;\n  __ZN6laszip6models10arithmeticD2Ev($114);\n }\n $115 = $77;\n $116 = ((($97)) + 4|0);\n HEAP32[$116>>2] = $115;\n $117 = $82;\n $62 = $86;\n $63 = $117;\n $118 = $62;\n $61 = $118;\n $119 = $61;\n $120 = HEAP32[$119>>2]|0;\n $60 = $120;\n $121 = $60;\n $44 = $118;\n $122 = $44;\n $123 = HEAP32[$122>>2]|0;\n $43 = $123;\n $124 = $43;\n $49 = $118;\n $125 = $49;\n $48 = $125;\n $126 = $48;\n $47 = $126;\n $127 = $47;\n $128 = ((($127)) + 8|0);\n $46 = $128;\n $129 = $46;\n $45 = $129;\n $130 = $45;\n $131 = HEAP32[$130>>2]|0;\n $132 = HEAP32[$126>>2]|0;\n $133 = $131;\n $134 = $132;\n $135 = (($133) - ($134))|0;\n $136 = (($135|0) / 44)&-1;\n $137 = (($124) + (($136*44)|0)|0);\n $51 = $118;\n $138 = $51;\n $139 = HEAP32[$138>>2]|0;\n $50 = $139;\n $140 = $50;\n $141 = $63;\n $142 = (($140) + (($141*44)|0)|0);\n $53 = $118;\n $143 = $53;\n $144 = HEAP32[$143>>2]|0;\n $52 = $144;\n $145 = $52;\n $54 = $118;\n $146 = $54;\n $147 = ((($146)) + 4|0);\n $148 = HEAP32[$147>>2]|0;\n $149 = HEAP32[$146>>2]|0;\n $150 = $148;\n $151 = $149;\n $152 = (($150) - ($151))|0;\n $153 = (($152|0) / 44)&-1;\n $154 = (($145) + (($153*44)|0)|0);\n $55 = $118;\n $56 = $121;\n $57 = $137;\n $58 = $142;\n $59 = $154;\n $42 = $86;\n $155 = ((($84)) + 68|0);\n $40 = $155;\n $156 = $40;\n $39 = $156;\n $157 = $39;\n $158 = ((($157)) + 4|0);\n $159 = HEAP32[$158>>2]|0;\n $160 = HEAP32[$157>>2]|0;\n $161 = $159;\n $162 = $160;\n $163 = (($161) - ($162))|0;\n $164 = (($163|0) / 44)&-1;\n $41 = $164;\n $38 = $156;\n $165 = $38;\n $166 = HEAP32[$165>>2]|0;\n $35 = $165;\n $36 = $166;\n $167 = $35;\n $168 = ((($167)) + 4|0);\n $169 = HEAP32[$168>>2]|0;\n $37 = $169;\n while(1) {\n  $170 = $36;\n  $171 = $37;\n  $172 = ($170|0)!=($171|0);\n  if (!($172)) {\n   break;\n  }\n  $34 = $167;\n  $173 = $34;\n  $174 = ((($173)) + 8|0);\n  $33 = $174;\n  $175 = $33;\n  $32 = $175;\n  $176 = $32;\n  $177 = $37;\n  $178 = ((($177)) + -44|0);\n  $37 = $178;\n  $31 = $178;\n  $179 = $31;\n  $28 = $176;\n  $29 = $179;\n  $180 = $28;\n  $181 = $29;\n  ;HEAP8[$27>>0]=HEAP8[$30>>0]|0;\n  $25 = $180;\n  $26 = $181;\n  $182 = $25;\n  $183 = $26;\n  $23 = $182;\n  $24 = $183;\n  $184 = $24;\n  __ZN6laszip6models10arithmeticD2Ev($184);\n }\n $185 = $36;\n $186 = ((($167)) + 4|0);\n HEAP32[$186>>2] = $185;\n $187 = $41;\n $21 = $156;\n $22 = $187;\n $188 = $21;\n $20 = $188;\n $189 = $20;\n $190 = HEAP32[$189>>2]|0;\n $19 = $190;\n $191 = $19;\n $3 = $188;\n $192 = $3;\n $193 = HEAP32[$192>>2]|0;\n $2 = $193;\n $194 = $2;\n $8 = $188;\n $195 = $8;\n $7 = $195;\n $196 = $7;\n $6 = $196;\n $197 = $6;\n $198 = ((($197)) + 8|0);\n $5 = $198;\n $199 = $5;\n $4 = $199;\n $200 = $4;\n $201 = HEAP32[$200>>2]|0;\n $202 = HEAP32[$196>>2]|0;\n $203 = $201;\n $204 = $202;\n $205 = (($203) - ($204))|0;\n $206 = (($205|0) / 44)&-1;\n $207 = (($194) + (($206*44)|0)|0);\n $10 = $188;\n $208 = $10;\n $209 = HEAP32[$208>>2]|0;\n $9 = $209;\n $210 = $9;\n $211 = $22;\n $212 = (($210) + (($211*44)|0)|0);\n $12 = $188;\n $213 = $12;\n $214 = HEAP32[$213>>2]|0;\n $11 = $214;\n $215 = $11;\n $13 = $188;\n $216 = $13;\n $217 = ((($216)) + 4|0);\n $218 = HEAP32[$217>>2]|0;\n $219 = HEAP32[$216>>2]|0;\n $220 = $218;\n $221 = $219;\n $222 = (($220) - ($221))|0;\n $223 = (($222|0) / 44)&-1;\n $224 = (($215) + (($223*44)|0)|0);\n $14 = $188;\n $15 = $191;\n $16 = $207;\n $17 = $212;\n $18 = $224;\n $1 = $156;\n $225 = ((($84)) + 68|0);\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($225);\n $226 = ((($84)) + 36|0);\n __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($226);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4380|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($3);\n $4 = ((($2)) + 3980|0);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($4);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 320|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n $4 = ((($2)) + 240|0);\n __ZN6laszip13decompressors7integerD2Ev($4);\n $5 = ((($2)) + 160|0);\n __ZN6laszip13decompressors7integerD2Ev($5);\n $6 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($6);\n __ZN6laszip13decompressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;\n var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;\n var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;\n var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;\n var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;\n var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;\n var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, dest = 0, label = 0, sp = 0, src = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);\n $33 = sp + 160|0;\n $40 = sp + 8|0;\n $30 = $0;\n $31 = $1;\n $32 = $2;\n $44 = $30;\n $45 = ((($44)) + 4781|0);\n $46 = HEAP8[$45>>0]|0;\n $47 = $46&1;\n if (!($47)) {\n  $48 = ((($44)) + 4380|0);\n  __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($48);\n  $49 = ((($44)) + 4781|0);\n  HEAP8[$49>>0] = 1;\n }\n $50 = ((($44)) + 3976|0);\n $51 = HEAP8[$50>>0]|0;\n $52 = $51&1;\n if (!($52)) {\n  $53 = ((($44)) + 3976|0);\n  HEAP8[$53>>0] = 1;\n  $54 = $31;\n  $55 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($54)|0);\n  $56 = $32;\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($55,$56,20);\n  $57 = $32;\n  __ZN6laszip7formats7packersINS0_3las7point10EE6unpackEPKc($33,$57);\n  dest=$44; src=$33; stop=dest+20|0; do { HEAP8[dest>>0]=HEAP8[src>>0]|0; dest=dest+1|0; src=src+1|0; } while ((dest|0) < (stop|0));\n  $58 = $32;\n  $59 = ((($58)) + 20|0);\n  $29 = $59;\n  $311 = $29;\n  STACKTOP = sp;return ($311|0);\n }\n $60 = $31;\n $61 = ((($44)) + 852|0);\n $62 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($60,$61)|0);\n $41 = $62;\n $63 = $41;\n $64 = ($63|0)!=(0);\n if ($64) {\n  $65 = $41;\n  $66 = $65 & 32;\n  $67 = ($66|0)!=(0);\n  if ($67) {\n   $68 = (__ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($44)|0);\n   $42 = $68;\n   $69 = $31;\n   $70 = ((($44)) + 904|0);\n   $71 = $42;\n   $72 = $71&255;\n   $27 = $70;\n   $28 = $72;\n   $73 = $27;\n   $74 = $28;\n   $75 = (($73) + ($74<<2)|0);\n   $76 = HEAP32[$75>>2]|0;\n   $77 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($69,$76)|0);\n   $78 = $77&255;\n   $42 = $78;\n   $79 = $42;\n   __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($79,$44);\n  }\n  $80 = ((($44)) + 14|0);\n  $81 = HEAP8[$80>>0]|0;\n  $82 = $81 & 7;\n  $83 = $82&255;\n  $34 = $83;\n  $84 = ((($44)) + 14|0);\n  $85 = HEAP8[$84>>0]|0;\n  $86 = ($85&255) >>> 3;\n  $87 = $86 & 7;\n  $88 = $87&255;\n  $35 = $88;\n  $89 = $35;\n  $90 = (6646 + ($89<<3)|0);\n  $91 = $34;\n  $92 = (($90) + ($91)|0);\n  $93 = HEAP8[$92>>0]|0;\n  $94 = $93&255;\n  $36 = $94;\n  $95 = $35;\n  $96 = (6710 + ($95<<3)|0);\n  $97 = $34;\n  $98 = (($96) + ($97)|0);\n  $99 = HEAP8[$98>>0]|0;\n  $100 = $99&255;\n  $37 = $100;\n  $101 = $41;\n  $102 = $101 & 16;\n  $103 = ($102|0)!=(0);\n  if ($103) {\n   $104 = ((($44)) + 4380|0);\n   $105 = $31;\n   $106 = ((($44)) + 20|0);\n   $107 = $36;\n   $25 = $106;\n   $26 = $107;\n   $108 = $25;\n   $109 = $26;\n   $110 = (($108) + ($109<<1)|0);\n   $111 = HEAP16[$110>>1]|0;\n   $112 = $111&65535;\n   $113 = $36;\n   $114 = ($113>>>0)<(3);\n   $115 = $36;\n   $116 = $114 ? $115 : 3;\n   $117 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($104,$105,$112,$116)|0);\n   $118 = $117&65535;\n   $119 = ((($44)) + 12|0);\n   HEAP16[$119>>1] = $118;\n   $120 = ((($44)) + 12|0);\n   $121 = HEAP16[$120>>1]|0;\n   $122 = ((($44)) + 20|0);\n   $123 = $36;\n   $21 = $122;\n   $22 = $123;\n   $124 = $21;\n   $125 = $22;\n   $126 = (($124) + ($125<<1)|0);\n   HEAP16[$126>>1] = $121;\n  } else {\n   $127 = ((($44)) + 20|0);\n   $128 = $36;\n   $17 = $127;\n   $18 = $128;\n   $129 = $17;\n   $130 = $18;\n   $131 = (($129) + ($130<<1)|0);\n   $132 = HEAP16[$131>>1]|0;\n   $133 = ((($44)) + 12|0);\n   HEAP16[$133>>1] = $132;\n  }\n  $134 = $41;\n  $135 = $134 & 8;\n  $136 = ($135|0)!=(0);\n  if ($136) {\n   $137 = $31;\n   $138 = ((($44)) + 1928|0);\n   $139 = ((($44)) + 15|0);\n   $140 = HEAP8[$139>>0]|0;\n   $141 = $140&255;\n   $15 = $138;\n   $16 = $141;\n   $142 = $15;\n   $143 = $16;\n   $144 = (($142) + ($143<<2)|0);\n   $145 = HEAP32[$144>>2]|0;\n   $146 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($137,$145)|0);\n   $147 = $146&255;\n   $148 = ((($44)) + 15|0);\n   HEAP8[$148>>0] = $147;\n  }\n  $149 = $41;\n  $150 = $149 & 4;\n  $151 = ($150|0)!=(0);\n  if ($151) {\n   $152 = $31;\n   $153 = ((($44)) + 896|0);\n   $154 = ((($44)) + 14|0);\n   $155 = HEAP8[$154>>0]|0;\n   $156 = ($155&255) >>> 6;\n   $157 = $156 & 1;\n   $158 = $157&255;\n   $13 = $153;\n   $14 = $158;\n   $159 = $13;\n   $160 = $14;\n   $161 = (($159) + ($160<<2)|0);\n   $162 = HEAP32[$161>>2]|0;\n   $163 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($152,$162)|0);\n   $43 = $163;\n   $164 = $43;\n   $165 = ((($44)) + 16|0);\n   $166 = HEAP8[$165>>0]|0;\n   $167 = $166 << 24 >> 24;\n   $168 = (($164) + ($167))|0;\n   $169 = (__Z7U8_FOLDi($168)|0);\n   $170 = ((($44)) + 16|0);\n   HEAP8[$170>>0] = $169;\n  }\n  $171 = $41;\n  $172 = $171 & 2;\n  $173 = ($172|0)!=(0);\n  if ($173) {\n   $174 = $31;\n   $175 = ((($44)) + 2952|0);\n   $176 = ((($44)) + 17|0);\n   $177 = HEAP8[$176>>0]|0;\n   $178 = $177&255;\n   $9 = $175;\n   $10 = $178;\n   $179 = $9;\n   $180 = $10;\n   $181 = (($179) + ($180<<2)|0);\n   $182 = HEAP32[$181>>2]|0;\n   $183 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($174,$182)|0);\n   $184 = $183&255;\n   $185 = ((($44)) + 17|0);\n   HEAP8[$185>>0] = $184;\n  }\n  $186 = $41;\n  $187 = $186 & 1;\n  $188 = ($187|0)!=(0);\n  if ($188) {\n   $189 = ((($44)) + 4380|0);\n   $190 = ((($189)) + 80|0);\n   $191 = $31;\n   $192 = ((($44)) + 18|0);\n   $193 = HEAP16[$192>>1]|0;\n   $194 = $193&65535;\n   $195 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($190,$191,$194,0)|0);\n   $196 = $195&65535;\n   $197 = ((($44)) + 18|0);\n   HEAP16[$197>>1] = $196;\n  }\n } else {\n  $198 = ((($44)) + 14|0);\n  $199 = HEAP8[$198>>0]|0;\n  $200 = $199 & 7;\n  $201 = $200&255;\n  $34 = $201;\n  $202 = ((($44)) + 14|0);\n  $203 = HEAP8[$202>>0]|0;\n  $204 = ($203&255) >>> 3;\n  $205 = $204 & 7;\n  $206 = $205&255;\n  $35 = $206;\n  $207 = $35;\n  $208 = (6646 + ($207<<3)|0);\n  $209 = $34;\n  $210 = (($208) + ($209)|0);\n  $211 = HEAP8[$210>>0]|0;\n  $212 = $211&255;\n  $36 = $212;\n  $213 = $35;\n  $214 = (6710 + ($213<<3)|0);\n  $215 = $34;\n  $216 = (($214) + ($215)|0);\n  $217 = HEAP8[$216>>0]|0;\n  $218 = $217&255;\n  $37 = $218;\n }\n $219 = ((($44)) + 52|0);\n $220 = $36;\n $7 = $219;\n $8 = $220;\n $221 = $7;\n $222 = $8;\n $223 = (($221) + (($222*24)|0)|0);\n $224 = (__ZNK6laszip5utils16streaming_medianIiE3getEv($223)|0);\n $39 = $224;\n $225 = ((($44)) + 4380|0);\n $226 = ((($225)) + 160|0);\n $227 = $31;\n $228 = $39;\n $229 = $35;\n $230 = ($229|0)==(1);\n $231 = $230&1;\n $232 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($226,$227,$228,$231)|0);\n HEAP32[$40>>2] = $232;\n $233 = HEAP32[$40>>2]|0;\n $234 = HEAP32[$44>>2]|0;\n $235 = (($234) + ($233))|0;\n HEAP32[$44>>2] = $235;\n $236 = ((($44)) + 52|0);\n $237 = $36;\n $5 = $236;\n $6 = $237;\n $238 = $5;\n $239 = $6;\n $240 = (($238) + (($239*24)|0)|0);\n __ZN6laszip5utils16streaming_medianIiE3addERKi($240,$40);\n $241 = ((($44)) + 436|0);\n $242 = $36;\n $3 = $241;\n $4 = $242;\n $243 = $3;\n $244 = $4;\n $245 = (($243) + (($244*24)|0)|0);\n $246 = (__ZNK6laszip5utils16streaming_medianIiE3getEv($245)|0);\n $39 = $246;\n $247 = ((($44)) + 4380|0);\n $248 = ((($247)) + 160|0);\n $249 = (__ZNK6laszip13decompressors7integer4getKEv($248)|0);\n $38 = $249;\n $250 = ((($44)) + 4380|0);\n $251 = ((($250)) + 240|0);\n $252 = $31;\n $253 = $39;\n $254 = $35;\n $255 = ($254|0)==(1);\n $256 = $255&1;\n $257 = $38;\n $258 = ($257>>>0)<(20);\n $259 = $38;\n $260 = $259 & -2;\n $261 = $258 ? $260 : 20;\n $262 = (($256) + ($261))|0;\n $263 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($251,$252,$253,$262)|0);\n HEAP32[$40>>2] = $263;\n $264 = HEAP32[$40>>2]|0;\n $265 = ((($44)) + 4|0);\n $266 = HEAP32[$265>>2]|0;\n $267 = (($266) + ($264))|0;\n HEAP32[$265>>2] = $267;\n $268 = ((($44)) + 436|0);\n $269 = $36;\n $11 = $268;\n $12 = $269;\n $270 = $11;\n $271 = $12;\n $272 = (($270) + (($271*24)|0)|0);\n __ZN6laszip5utils16streaming_medianIiE3addERKi($272,$40);\n $273 = ((($44)) + 4380|0);\n $274 = ((($273)) + 160|0);\n $275 = (__ZNK6laszip13decompressors7integer4getKEv($274)|0);\n $276 = ((($44)) + 4380|0);\n $277 = ((($276)) + 240|0);\n $278 = (__ZNK6laszip13decompressors7integer4getKEv($277)|0);\n $279 = (($275) + ($278))|0;\n $280 = (($279>>>0) / 2)&-1;\n $38 = $280;\n $281 = ((($44)) + 4380|0);\n $282 = ((($281)) + 320|0);\n $283 = $31;\n $284 = ((($44)) + 820|0);\n $285 = $37;\n $19 = $284;\n $20 = $285;\n $286 = $19;\n $287 = $20;\n $288 = (($286) + ($287<<2)|0);\n $289 = HEAP32[$288>>2]|0;\n $290 = $35;\n $291 = ($290|0)==(1);\n $292 = $291&1;\n $293 = $38;\n $294 = ($293>>>0)<(18);\n $295 = $38;\n $296 = $295 & -2;\n $297 = $294 ? $296 : 18;\n $298 = (($292) + ($297))|0;\n $299 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($282,$283,$289,$298)|0);\n $300 = ((($44)) + 8|0);\n HEAP32[$300>>2] = $299;\n $301 = ((($44)) + 8|0);\n $302 = HEAP32[$301>>2]|0;\n $303 = ((($44)) + 820|0);\n $304 = $37;\n $23 = $303;\n $24 = $304;\n $305 = $23;\n $306 = $24;\n $307 = (($305) + ($306<<2)|0);\n HEAP32[$307>>2] = $302;\n $308 = $32;\n __ZN6laszip7formats7packersINS0_3las7point10EE4packERKS3_Pc($44,$308);\n $309 = $32;\n $310 = ((($309)) + 20|0);\n $29 = $310;\n $311 = $29;\n STACKTOP = sp;return ($311|0);\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integer4initEv($2);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integer4initEv($3);\n $4 = ((($2)) + 160|0);\n __ZN6laszip13decompressors7integer4initEv($4);\n $5 = ((($2)) + 240|0);\n __ZN6laszip13decompressors7integer4initEv($5);\n $6 = ((($2)) + 320|0);\n __ZN6laszip13decompressors7integer4initEv($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;\n var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;\n var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;\n var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0;\n var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $26 = sp;\n $29 = sp + 124|0;\n $32 = sp + 12|0;\n $34 = sp + 4|0;\n $30 = $0;\n $31 = $1;\n HEAP32[$32>>2] = $2;\n $35 = $30;\n $36 = ((($35)) + 8|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = ((($35)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $40 = (($37) - ($39))|0;\n HEAP32[$34>>2] = $40;\n $27 = $34;\n $28 = $32;\n $41 = $27;\n $42 = $28;\n ;HEAP8[$26>>0]=HEAP8[$29>>0]|0;\n $24 = $41;\n $25 = $42;\n $43 = $25;\n $44 = $24;\n $21 = $26;\n $22 = $43;\n $23 = $44;\n $45 = $22;\n $46 = HEAP32[$45>>2]|0;\n $47 = $23;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($46>>>0)<($48>>>0);\n $50 = $25;\n $51 = $24;\n $52 = $49 ? $50 : $51;\n $53 = HEAP32[$52>>2]|0;\n $33 = $53;\n $54 = ((($35)) + 12|0);\n $55 = HEAP32[$54>>2]|0;\n $56 = ((($35)) + 4|0);\n $57 = HEAP32[$56>>2]|0;\n $58 = (($55) + ($57)|0);\n $59 = ((($35)) + 12|0);\n $60 = HEAP32[$59>>2]|0;\n $61 = ((($35)) + 4|0);\n $62 = HEAP32[$61>>2]|0;\n $63 = (($60) + ($62)|0);\n $64 = $33;\n $65 = (($63) + ($64)|0);\n $66 = $31;\n $9 = $58;\n $10 = $65;\n $11 = $66;\n $67 = $9;\n $8 = $67;\n $68 = $8;\n $69 = $10;\n $3 = $69;\n $70 = $3;\n $71 = $11;\n $4 = $71;\n $72 = $4;\n $5 = $68;\n $6 = $70;\n $7 = $72;\n while(1) {\n  $73 = $5;\n  $74 = $6;\n  $75 = ($73|0)!=($74|0);\n  if (!($75)) {\n   break;\n  }\n  $76 = $5;\n  $77 = HEAP8[$76>>0]|0;\n  $78 = $7;\n  HEAP8[$78>>0] = $77;\n  $79 = $5;\n  $80 = ((($79)) + 1|0);\n  $5 = $80;\n  $81 = $7;\n  $82 = ((($81)) + 1|0);\n  $7 = $82;\n }\n $83 = $33;\n $84 = ((($35)) + 4|0);\n $85 = HEAP32[$84>>2]|0;\n $86 = (($85) + ($83))|0;\n HEAP32[$84>>2] = $86;\n $87 = $33;\n $88 = HEAP32[$32>>2]|0;\n $89 = (($88) - ($87))|0;\n HEAP32[$32>>2] = $89;\n $90 = HEAP32[$32>>2]|0;\n $91 = ($90|0)!=(0);\n if (!($91)) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($35);\n $92 = ((($35)) + 12|0);\n $93 = HEAP32[$92>>2]|0;\n $94 = ((($35)) + 4|0);\n $95 = HEAP32[$94>>2]|0;\n $96 = (($93) + ($95)|0);\n $97 = ((($35)) + 12|0);\n $98 = HEAP32[$97>>2]|0;\n $99 = ((($35)) + 4|0);\n $100 = HEAP32[$99>>2]|0;\n $101 = (($98) + ($100)|0);\n $102 = HEAP32[$32>>2]|0;\n $103 = (($101) + ($102)|0);\n $104 = $31;\n $105 = $33;\n $106 = (($104) + ($105)|0);\n $18 = $96;\n $19 = $103;\n $20 = $106;\n $107 = $18;\n $17 = $107;\n $108 = $17;\n $109 = $19;\n $12 = $109;\n $110 = $12;\n $111 = $20;\n $13 = $111;\n $112 = $13;\n $14 = $108;\n $15 = $110;\n $16 = $112;\n while(1) {\n  $113 = $14;\n  $114 = $15;\n  $115 = ($113|0)!=($114|0);\n  if (!($115)) {\n   break;\n  }\n  $116 = $14;\n  $117 = HEAP8[$116>>0]|0;\n  $118 = $16;\n  HEAP8[$118>>0] = $117;\n  $119 = $14;\n  $120 = ((($119)) + 1|0);\n  $14 = $120;\n  $121 = $16;\n  $122 = ((($121)) + 1|0);\n  $16 = $122;\n }\n $123 = HEAP32[$32>>2]|0;\n $124 = ((($35)) + 4|0);\n $125 = HEAP32[$124>>2]|0;\n $126 = (($125) + ($123))|0;\n HEAP32[$124>>2] = $126;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersINS0_3las7point10EE6unpackEPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $1;\n __ZN6laszip7formats3las7point10C2Ev($0);\n $4 = $2;\n $5 = (__ZN6laszip7formats7packersIiE6unpackEPKc($4)|0);\n HEAP8[$0>>0]=$5&255;HEAP8[$0+1>>0]=($5>>8)&255;HEAP8[$0+2>>0]=($5>>16)&255;HEAP8[$0+3>>0]=$5>>24;\n $6 = $2;\n $7 = ((($6)) + 4|0);\n $2 = $7;\n $8 = $2;\n $9 = (__ZN6laszip7formats7packersIiE6unpackEPKc($8)|0);\n $10 = ((($0)) + 4|0);\n HEAP8[$10>>0]=$9&255;HEAP8[$10+1>>0]=($9>>8)&255;HEAP8[$10+2>>0]=($9>>16)&255;HEAP8[$10+3>>0]=$9>>24;\n $11 = $2;\n $12 = ((($11)) + 4|0);\n $2 = $12;\n $13 = $2;\n $14 = (__ZN6laszip7formats7packersIiE6unpackEPKc($13)|0);\n $15 = ((($0)) + 8|0);\n HEAP8[$15>>0]=$14&255;HEAP8[$15+1>>0]=($14>>8)&255;HEAP8[$15+2>>0]=($14>>16)&255;HEAP8[$15+3>>0]=$14>>24;\n $16 = $2;\n $17 = ((($16)) + 4|0);\n $2 = $17;\n $18 = $2;\n $19 = (__ZN6laszip7formats7packersItE6unpackEPKc($18)|0);\n $20 = ((($0)) + 12|0);\n HEAP8[$20>>0]=$19&255;HEAP8[$20+1>>0]=$19>>8;\n $21 = $2;\n $22 = ((($21)) + 2|0);\n $2 = $22;\n $23 = $2;\n $24 = (__ZN6laszip7formats7packersIhE6unpackEPKc($23)|0);\n $3 = $24;\n $25 = $2;\n $26 = ((($25)) + 1|0);\n $2 = $26;\n $27 = $3;\n __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($27,$0);\n $28 = $2;\n $29 = (__ZN6laszip7formats7packersIhE6unpackEPKc($28)|0);\n $30 = ((($0)) + 15|0);\n HEAP8[$30>>0] = $29;\n $31 = $2;\n $32 = ((($31)) + 1|0);\n $2 = $32;\n $33 = $2;\n $34 = (__ZN6laszip7formats7packersIcE6unpackEPKc($33)|0);\n $35 = ((($0)) + 16|0);\n HEAP8[$35>>0] = $34;\n $36 = $2;\n $37 = ((($36)) + 1|0);\n $2 = $37;\n $38 = $2;\n $39 = (__ZN6laszip7formats7packersIcE6unpackEPKc($38)|0);\n $40 = ((($0)) + 17|0);\n HEAP8[$40>>0] = $39;\n $41 = $2;\n $42 = ((($41)) + 1|0);\n $2 = $42;\n $43 = $2;\n $44 = (__ZN6laszip7formats7packersItE6unpackEPKc($43)|0);\n $45 = ((($0)) + 18|0);\n HEAP8[$45>>0]=$44&255;HEAP8[$45+1>>0]=$44>>8;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $6 = $1;\n $7 = ((($6)) + 14|0);\n $8 = HEAP8[$7>>0]|0;\n $9 = $8 & 7;\n $2 = $9;\n $10 = $1;\n $11 = ((($10)) + 14|0);\n $12 = HEAP8[$11>>0]|0;\n $13 = ($12&255) >>> 3;\n $14 = $13 & 7;\n $3 = $14;\n $15 = $1;\n $16 = ((($15)) + 14|0);\n $17 = HEAP8[$16>>0]|0;\n $18 = ($17&255) >>> 6;\n $19 = $18 & 1;\n $4 = $19;\n $20 = $1;\n $21 = ((($20)) + 14|0);\n $22 = HEAP8[$21>>0]|0;\n $23 = ($22&255) >>> 7;\n $5 = $23;\n $24 = $5;\n $25 = $24&255;\n $26 = $25 & 1;\n $27 = $26 << 7;\n $28 = $4;\n $29 = $28&255;\n $30 = $29 & 1;\n $31 = $30 << 6;\n $32 = $27 | $31;\n $33 = $3;\n $34 = $33&255;\n $35 = $34 & 7;\n $36 = $35 << 3;\n $37 = $32 | $36;\n $38 = $2;\n $39 = $38&255;\n $40 = $39 & 7;\n $41 = $37 | $40;\n $42 = $41&255;\n STACKTOP = sp;return ($42|0);\n}\nfunction __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $4&255;\n $6 = $5 & 7;\n $7 = $6&255;\n $8 = $3;\n $9 = ((($8)) + 14|0);\n $10 = HEAP8[$9>>0]|0;\n $11 = $7 & 7;\n $12 = $10 & -8;\n $13 = $12 | $11;\n HEAP8[$9>>0] = $13;\n $14 = $2;\n $15 = $14&255;\n $16 = $15 >> 3;\n $17 = $16 & 7;\n $18 = $17&255;\n $19 = $3;\n $20 = ((($19)) + 14|0);\n $21 = HEAP8[$20>>0]|0;\n $22 = $18 & 7;\n $23 = ($22 << 3)&255;\n $24 = $21 & -57;\n $25 = $24 | $23;\n HEAP8[$20>>0] = $25;\n $26 = $2;\n $27 = $26&255;\n $28 = $27 >> 6;\n $29 = $28 & 1;\n $30 = $29&255;\n $31 = $3;\n $32 = ((($31)) + 14|0);\n $33 = HEAP8[$32>>0]|0;\n $34 = $30 & 1;\n $35 = ($34 << 6)&255;\n $36 = $33 & -65;\n $37 = $36 | $35;\n HEAP8[$32>>0] = $37;\n $38 = $2;\n $39 = $38&255;\n $40 = $39 >> 7;\n $41 = $40 & 1;\n $42 = $41&255;\n $43 = $3;\n $44 = ((($43)) + 14|0);\n $45 = HEAP8[$44>>0]|0;\n $46 = $42 & 1;\n $47 = ($46 << 7)&255;\n $48 = $45 & 127;\n $49 = $48 | $47;\n HEAP8[$44>>0] = $49;\n STACKTOP = sp;return;\n}\nfunction __Z7U8_FOLDi($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = $2&255;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZNK6laszip5utils16streaming_medianIiE3getEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $3;\n $1 = $4;\n $2 = 2;\n $5 = $1;\n $6 = $2;\n $7 = (($5) + ($6<<2)|0);\n $8 = HEAP32[$7>>2]|0;\n STACKTOP = sp;return ($8|0);\n}\nfunction __ZN6laszip5utils16streaming_medianIiE3addERKi($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0;\n var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0;\n var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0;\n var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0;\n var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0;\n var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;\n var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;\n var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0;\n var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0;\n var $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0);\n $86 = $0;\n $87 = $1;\n $88 = $86;\n $89 = ((($88)) + 20|0);\n $90 = HEAP8[$89>>0]|0;\n $91 = $90&1;\n if ($91) {\n  $92 = $87;\n  $93 = HEAP32[$92>>2]|0;\n  $84 = $88;\n  $85 = 2;\n  $94 = $84;\n  $95 = $85;\n  $96 = (($94) + ($95<<2)|0);\n  $97 = HEAP32[$96>>2]|0;\n  $98 = ($93|0)<($97|0);\n  if (!($98)) {\n   $163 = $87;\n   $164 = HEAP32[$163>>2]|0;\n   $32 = $88;\n   $33 = 3;\n   $165 = $32;\n   $166 = $33;\n   $167 = (($165) + ($166<<2)|0);\n   $168 = HEAP32[$167>>2]|0;\n   $169 = ($164|0)<($168|0);\n   if ($169) {\n    $34 = $88;\n    $35 = 3;\n    $170 = $34;\n    $171 = $35;\n    $172 = (($170) + ($171<<2)|0);\n    $173 = HEAP32[$172>>2]|0;\n    $36 = $88;\n    $37 = 4;\n    $174 = $36;\n    $175 = $37;\n    $176 = (($174) + ($175<<2)|0);\n    HEAP32[$176>>2] = $173;\n    $177 = $87;\n    $178 = HEAP32[$177>>2]|0;\n    $38 = $88;\n    $39 = 3;\n    $179 = $38;\n    $180 = $39;\n    $181 = (($179) + ($180<<2)|0);\n    HEAP32[$181>>2] = $178;\n   } else {\n    $182 = $87;\n    $183 = HEAP32[$182>>2]|0;\n    $40 = $88;\n    $41 = 4;\n    $184 = $40;\n    $185 = $41;\n    $186 = (($184) + ($185<<2)|0);\n    HEAP32[$186>>2] = $183;\n   }\n   $187 = ((($88)) + 20|0);\n   HEAP8[$187>>0] = 0;\n   STACKTOP = sp;return;\n  }\n  $2 = $88;\n  $3 = 3;\n  $99 = $2;\n  $100 = $3;\n  $101 = (($99) + ($100<<2)|0);\n  $102 = HEAP32[$101>>2]|0;\n  $4 = $88;\n  $5 = 4;\n  $103 = $4;\n  $104 = $5;\n  $105 = (($103) + ($104<<2)|0);\n  HEAP32[$105>>2] = $102;\n  $6 = $88;\n  $7 = 2;\n  $106 = $6;\n  $107 = $7;\n  $108 = (($106) + ($107<<2)|0);\n  $109 = HEAP32[$108>>2]|0;\n  $8 = $88;\n  $9 = 3;\n  $110 = $8;\n  $111 = $9;\n  $112 = (($110) + ($111<<2)|0);\n  HEAP32[$112>>2] = $109;\n  $113 = $87;\n  $114 = HEAP32[$113>>2]|0;\n  $10 = $88;\n  $11 = 0;\n  $115 = $10;\n  $116 = $11;\n  $117 = (($115) + ($116<<2)|0);\n  $118 = HEAP32[$117>>2]|0;\n  $119 = ($114|0)<($118|0);\n  if ($119) {\n   $12 = $88;\n   $13 = 1;\n   $120 = $12;\n   $121 = $13;\n   $122 = (($120) + ($121<<2)|0);\n   $123 = HEAP32[$122>>2]|0;\n   $14 = $88;\n   $15 = 2;\n   $124 = $14;\n   $125 = $15;\n   $126 = (($124) + ($125<<2)|0);\n   HEAP32[$126>>2] = $123;\n   $16 = $88;\n   $17 = 0;\n   $127 = $16;\n   $128 = $17;\n   $129 = (($127) + ($128<<2)|0);\n   $130 = HEAP32[$129>>2]|0;\n   $18 = $88;\n   $19 = 1;\n   $131 = $18;\n   $132 = $19;\n   $133 = (($131) + ($132<<2)|0);\n   HEAP32[$133>>2] = $130;\n   $134 = $87;\n   $135 = HEAP32[$134>>2]|0;\n   $20 = $88;\n   $21 = 0;\n   $136 = $20;\n   $137 = $21;\n   $138 = (($136) + ($137<<2)|0);\n   HEAP32[$138>>2] = $135;\n   STACKTOP = sp;return;\n  }\n  $139 = $87;\n  $140 = HEAP32[$139>>2]|0;\n  $22 = $88;\n  $23 = 1;\n  $141 = $22;\n  $142 = $23;\n  $143 = (($141) + ($142<<2)|0);\n  $144 = HEAP32[$143>>2]|0;\n  $145 = ($140|0)<($144|0);\n  if ($145) {\n   $24 = $88;\n   $25 = 1;\n   $146 = $24;\n   $147 = $25;\n   $148 = (($146) + ($147<<2)|0);\n   $149 = HEAP32[$148>>2]|0;\n   $26 = $88;\n   $27 = 2;\n   $150 = $26;\n   $151 = $27;\n   $152 = (($150) + ($151<<2)|0);\n   HEAP32[$152>>2] = $149;\n   $153 = $87;\n   $154 = HEAP32[$153>>2]|0;\n   $28 = $88;\n   $29 = 1;\n   $155 = $28;\n   $156 = $29;\n   $157 = (($155) + ($156<<2)|0);\n   HEAP32[$157>>2] = $154;\n   STACKTOP = sp;return;\n  } else {\n   $158 = $87;\n   $159 = HEAP32[$158>>2]|0;\n   $30 = $88;\n   $31 = 2;\n   $160 = $30;\n   $161 = $31;\n   $162 = (($160) + ($161<<2)|0);\n   HEAP32[$162>>2] = $159;\n   STACKTOP = sp;return;\n  }\n } else {\n  $42 = $88;\n  $43 = 2;\n  $188 = $42;\n  $189 = $43;\n  $190 = (($188) + ($189<<2)|0);\n  $191 = HEAP32[$190>>2]|0;\n  $192 = $87;\n  $193 = HEAP32[$192>>2]|0;\n  $194 = ($191|0)<($193|0);\n  if (!($194)) {\n   $74 = $88;\n   $75 = 1;\n   $259 = $74;\n   $260 = $75;\n   $261 = (($259) + ($260<<2)|0);\n   $262 = HEAP32[$261>>2]|0;\n   $263 = $87;\n   $264 = HEAP32[$263>>2]|0;\n   $265 = ($262|0)<($264|0);\n   if ($265) {\n    $76 = $88;\n    $77 = 1;\n    $266 = $76;\n    $267 = $77;\n    $268 = (($266) + ($267<<2)|0);\n    $269 = HEAP32[$268>>2]|0;\n    $78 = $88;\n    $79 = 0;\n    $270 = $78;\n    $271 = $79;\n    $272 = (($270) + ($271<<2)|0);\n    HEAP32[$272>>2] = $269;\n    $273 = $87;\n    $274 = HEAP32[$273>>2]|0;\n    $80 = $88;\n    $81 = 1;\n    $275 = $80;\n    $276 = $81;\n    $277 = (($275) + ($276<<2)|0);\n    HEAP32[$277>>2] = $274;\n   } else {\n    $278 = $87;\n    $279 = HEAP32[$278>>2]|0;\n    $82 = $88;\n    $83 = 0;\n    $280 = $82;\n    $281 = $83;\n    $282 = (($280) + ($281<<2)|0);\n    HEAP32[$282>>2] = $279;\n   }\n   $283 = ((($88)) + 20|0);\n   HEAP8[$283>>0] = 1;\n   STACKTOP = sp;return;\n  }\n  $44 = $88;\n  $45 = 1;\n  $195 = $44;\n  $196 = $45;\n  $197 = (($195) + ($196<<2)|0);\n  $198 = HEAP32[$197>>2]|0;\n  $46 = $88;\n  $47 = 0;\n  $199 = $46;\n  $200 = $47;\n  $201 = (($199) + ($200<<2)|0);\n  HEAP32[$201>>2] = $198;\n  $48 = $88;\n  $49 = 2;\n  $202 = $48;\n  $203 = $49;\n  $204 = (($202) + ($203<<2)|0);\n  $205 = HEAP32[$204>>2]|0;\n  $50 = $88;\n  $51 = 1;\n  $206 = $50;\n  $207 = $51;\n  $208 = (($206) + ($207<<2)|0);\n  HEAP32[$208>>2] = $205;\n  $52 = $88;\n  $53 = 4;\n  $209 = $52;\n  $210 = $53;\n  $211 = (($209) + ($210<<2)|0);\n  $212 = HEAP32[$211>>2]|0;\n  $213 = $87;\n  $214 = HEAP32[$213>>2]|0;\n  $215 = ($212|0)<($214|0);\n  if ($215) {\n   $54 = $88;\n   $55 = 3;\n   $216 = $54;\n   $217 = $55;\n   $218 = (($216) + ($217<<2)|0);\n   $219 = HEAP32[$218>>2]|0;\n   $56 = $88;\n   $57 = 2;\n   $220 = $56;\n   $221 = $57;\n   $222 = (($220) + ($221<<2)|0);\n   HEAP32[$222>>2] = $219;\n   $58 = $88;\n   $59 = 4;\n   $223 = $58;\n   $224 = $59;\n   $225 = (($223) + ($224<<2)|0);\n   $226 = HEAP32[$225>>2]|0;\n   $60 = $88;\n   $61 = 3;\n   $227 = $60;\n   $228 = $61;\n   $229 = (($227) + ($228<<2)|0);\n   HEAP32[$229>>2] = $226;\n   $230 = $87;\n   $231 = HEAP32[$230>>2]|0;\n   $62 = $88;\n   $63 = 4;\n   $232 = $62;\n   $233 = $63;\n   $234 = (($232) + ($233<<2)|0);\n   HEAP32[$234>>2] = $231;\n   STACKTOP = sp;return;\n  }\n  $64 = $88;\n  $65 = 3;\n  $235 = $64;\n  $236 = $65;\n  $237 = (($235) + ($236<<2)|0);\n  $238 = HEAP32[$237>>2]|0;\n  $239 = $87;\n  $240 = HEAP32[$239>>2]|0;\n  $241 = ($238|0)<($240|0);\n  if ($241) {\n   $66 = $88;\n   $67 = 3;\n   $242 = $66;\n   $243 = $67;\n   $244 = (($242) + ($243<<2)|0);\n   $245 = HEAP32[$244>>2]|0;\n   $68 = $88;\n   $69 = 2;\n   $246 = $68;\n   $247 = $69;\n   $248 = (($246) + ($247<<2)|0);\n   HEAP32[$248>>2] = $245;\n   $249 = $87;\n   $250 = HEAP32[$249>>2]|0;\n   $70 = $88;\n   $71 = 3;\n   $251 = $70;\n   $252 = $71;\n   $253 = (($251) + ($252<<2)|0);\n   HEAP32[$253>>2] = $250;\n   STACKTOP = sp;return;\n  } else {\n   $254 = $87;\n   $255 = HEAP32[$254>>2]|0;\n   $72 = $88;\n   $73 = 2;\n   $256 = $72;\n   $257 = $73;\n   $258 = (($256) + ($257<<2)|0);\n   HEAP32[$258>>2] = $255;\n   STACKTOP = sp;return;\n  }\n }\n}\nfunction __ZNK6laszip13decompressors7integer4getKEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats7packersINS0_3las7point10EE4packERKS3_Pc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $5 = $2;\n $6 = HEAPU8[$5>>0]|(HEAPU8[$5+1>>0]<<8)|(HEAPU8[$5+2>>0]<<16)|(HEAPU8[$5+3>>0]<<24);\n $7 = $3;\n __ZN6laszip7formats7packersIiE4packEiPc($6,$7);\n $8 = $3;\n $9 = ((($8)) + 4|0);\n $3 = $9;\n $10 = $2;\n $11 = ((($10)) + 4|0);\n $12 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8)|(HEAPU8[$11+2>>0]<<16)|(HEAPU8[$11+3>>0]<<24);\n $13 = $3;\n __ZN6laszip7formats7packersIiE4packEiPc($12,$13);\n $14 = $3;\n $15 = ((($14)) + 4|0);\n $3 = $15;\n $16 = $2;\n $17 = ((($16)) + 8|0);\n $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24);\n $19 = $3;\n __ZN6laszip7formats7packersIiE4packEiPc($18,$19);\n $20 = $3;\n $21 = ((($20)) + 4|0);\n $3 = $21;\n $22 = $2;\n $23 = ((($22)) + 12|0);\n $24 = HEAPU8[$23>>0]|(HEAPU8[$23+1>>0]<<8);\n $25 = $3;\n __ZN6laszip7formats7packersItE4packEtPc($24,$25);\n $26 = $3;\n $27 = ((($26)) + 2|0);\n $3 = $27;\n $28 = $2;\n $29 = (__ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($28)|0);\n $4 = $29;\n $30 = $4;\n $31 = $3;\n __ZN6laszip7formats7packersIhE4packEhPc($30,$31);\n $32 = $3;\n $33 = ((($32)) + 1|0);\n $3 = $33;\n $34 = $2;\n $35 = ((($34)) + 15|0);\n $36 = HEAP8[$35>>0]|0;\n $37 = $3;\n __ZN6laszip7formats7packersIhE4packEhPc($36,$37);\n $38 = $3;\n $39 = ((($38)) + 1|0);\n $3 = $39;\n $40 = $2;\n $41 = ((($40)) + 16|0);\n $42 = HEAP8[$41>>0]|0;\n $43 = $3;\n __ZN6laszip7formats7packersIcE4packEcPc($42,$43);\n $44 = $3;\n $45 = ((($44)) + 1|0);\n $3 = $45;\n $46 = $2;\n $47 = ((($46)) + 17|0);\n $48 = HEAP8[$47>>0]|0;\n $49 = $3;\n __ZN6laszip7formats7packersIcE4packEcPc($48,$49);\n $50 = $3;\n $51 = ((($50)) + 1|0);\n $3 = $51;\n $52 = $2;\n $53 = ((($52)) + 18|0);\n $54 = HEAPU8[$53>>0]|(HEAPU8[$53+1>>0]<<8);\n $55 = $3;\n __ZN6laszip7formats7packersItE4packEtPc($54,$55);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIiE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (__ZN6laszip7formats7packersIjE6unpackEPKc($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats7packersItE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $4 = $1;\n $5 = HEAP8[$4>>0]|0;\n $6 = $5 << 24 >> 24;\n $2 = $6;\n $7 = $1;\n $8 = ((($7)) + 1|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9 << 24 >> 24;\n $3 = $10;\n $11 = $3;\n $12 = $11&65535;\n $13 = $12 & 255;\n $14 = $13 << 8;\n $15 = $2;\n $16 = $15&65535;\n $17 = $16 & 255;\n $18 = $14 | $17;\n $19 = $18&65535;\n STACKTOP = sp;return ($19|0);\n}\nfunction __ZN6laszip7formats7packersIhE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP8[$2>>0]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats7packersIcE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP8[$2>>0]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats7packersIjE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $1 = $0;\n $6 = $1;\n $7 = HEAP8[$6>>0]|0;\n $8 = $7 << 24 >> 24;\n $2 = $8;\n $9 = $1;\n $10 = ((($9)) + 1|0);\n $11 = HEAP8[$10>>0]|0;\n $12 = $11 << 24 >> 24;\n $3 = $12;\n $13 = $1;\n $14 = ((($13)) + 2|0);\n $15 = HEAP8[$14>>0]|0;\n $16 = $15 << 24 >> 24;\n $4 = $16;\n $17 = $1;\n $18 = ((($17)) + 3|0);\n $19 = HEAP8[$18>>0]|0;\n $20 = $19 << 24 >> 24;\n $5 = $20;\n $21 = $5;\n $22 = $21 << 24;\n $23 = $4;\n $24 = $23 & 255;\n $25 = $24 << 16;\n $26 = $22 | $25;\n $27 = $3;\n $28 = $27 & 255;\n $29 = $28 << 8;\n $30 = $26 | $29;\n $31 = $2;\n $32 = $31 & 255;\n $33 = $30 | $32;\n STACKTOP = sp;return ($33|0);\n}\nfunction __ZN6laszip7formats7packersIiE4packEiPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n __ZN6laszip7formats7packersIjE4packEjPc($4,$5);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersItE4packEtPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $4&65535;\n $6 = $5 >> 8;\n $7 = $6 & 255;\n $8 = $7&255;\n $9 = $3;\n $10 = ((($9)) + 1|0);\n HEAP8[$10>>0] = $8;\n $11 = $2;\n $12 = $11&65535;\n $13 = $12 & 255;\n $14 = $13&255;\n $15 = $3;\n HEAP8[$15>>0] = $14;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIhE4packEhPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP8[$5>>0] = $4;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIcE4packEcPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP8[$5>>0] = $4;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIjE4packEjPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $4 >>> 24;\n $6 = $5 & 255;\n $7 = $6&255;\n $8 = $3;\n $9 = ((($8)) + 3|0);\n HEAP8[$9>>0] = $7;\n $10 = $2;\n $11 = $10 >>> 16;\n $12 = $11 & 255;\n $13 = $12&255;\n $14 = $3;\n $15 = ((($14)) + 2|0);\n HEAP8[$15>>0] = $13;\n $16 = $2;\n $17 = $16 >>> 8;\n $18 = $17 & 255;\n $19 = $18&255;\n $20 = $3;\n $21 = ((($20)) + 1|0);\n HEAP8[$21>>0] = $19;\n $22 = $2;\n $23 = $22 & 255;\n $24 = $23&255;\n $25 = $3;\n HEAP8[$25>>0] = $24;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 360;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2100);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2124);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($2);\n $3 = ((($2)) + 164|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($3);\n $4 = ((($2)) + 244|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($4);\n $5 = ((($2)) + 324|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 325|0);\n HEAP8[$6>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2100);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $29 = sp + 120|0;\n $30 = sp + 4|0;\n $31 = sp;\n $28 = $0;\n $32 = $28;\n HEAP8[$32>>0] = 0;\n $33 = ((($32)) + 4|0);\n __ZN6laszip6models10arithmeticC2EjbPj($33,516,0,0);\n $34 = ((($32)) + 48|0);\n __ZN6laszip6models10arithmeticC2EjbPj($34,6,0,0);\n $35 = ((($32)) + 92|0);\n HEAP32[$35>>2] = 0;\n $36 = ((($32)) + 96|0);\n HEAP32[$36>>2] = 0;\n $37 = ((($32)) + 100|0);\n __ZNSt3__25arrayIN6laszip7formats3las7gpstimeELj4EEC2Ev($37);\n $38 = ((($32)) + 100|0);\n __ZN6laszip7formats3las7gpstimeC2Ev($29);\n $26 = $38;\n $27 = $29;\n $39 = $26;\n $40 = $27;\n $23 = $39;\n $24 = 4;\n $25 = $40;\n $41 = $23;\n $42 = $24;\n $22 = $42;\n $43 = $22;\n $44 = $25;\n $19 = $41;\n $20 = $43;\n $21 = $44;\n while(1) {\n  $45 = $20;\n  $46 = ($45>>>0)>(0);\n  if (!($46)) {\n   break;\n  }\n  $47 = $21;\n  $48 = $19;\n  ;HEAP8[$48>>0]=HEAP8[$47>>0]|0;HEAP8[$48+1>>0]=HEAP8[$47+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$47+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$47+3>>0]|0;HEAP8[$48+4>>0]=HEAP8[$47+4>>0]|0;HEAP8[$48+5>>0]=HEAP8[$47+5>>0]|0;HEAP8[$48+6>>0]=HEAP8[$47+6>>0]|0;HEAP8[$48+7>>0]=HEAP8[$47+7>>0]|0;\n  $49 = $19;\n  $50 = ((($49)) + 8|0);\n  $19 = $50;\n  $51 = $20;\n  $52 = (($51) + -1)|0;\n  $20 = $52;\n }\n $53 = ((($32)) + 132|0);\n HEAP32[$30>>2] = 0;\n $17 = $53;\n $18 = $30;\n $54 = $17;\n $55 = $18;\n $14 = $54;\n $15 = 4;\n $16 = $55;\n $56 = $14;\n $57 = $15;\n $13 = $57;\n $58 = $13;\n $59 = $16;\n $10 = $56;\n $11 = $58;\n $12 = $59;\n while(1) {\n  $60 = $11;\n  $61 = ($60>>>0)>(0);\n  if (!($61)) {\n   break;\n  }\n  $62 = $12;\n  $63 = HEAP32[$62>>2]|0;\n  $64 = $10;\n  HEAP32[$64>>2] = $63;\n  $65 = $10;\n  $66 = ((($65)) + 4|0);\n  $10 = $66;\n  $67 = $11;\n  $68 = (($67) + -1)|0;\n  $11 = $68;\n }\n $69 = ((($32)) + 148|0);\n HEAP32[$31>>2] = 0;\n $8 = $69;\n $9 = $31;\n $70 = $8;\n $71 = $9;\n $5 = $70;\n $6 = 4;\n $7 = $71;\n $72 = $5;\n $73 = $6;\n $4 = $73;\n $74 = $4;\n $75 = $7;\n $1 = $72;\n $2 = $74;\n $3 = $75;\n while(1) {\n  $76 = $2;\n  $77 = ($76>>>0)>(0);\n  if (!($77)) {\n   break;\n  }\n  $78 = $3;\n  $79 = HEAP32[$78>>2]|0;\n  $80 = $1;\n  HEAP32[$80>>2] = $79;\n  $81 = $1;\n  $82 = ((($81)) + 4|0);\n  $1 = $82;\n  $83 = $2;\n  $84 = (($83) + -1)|0;\n  $2 = $84;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,32,9,8,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integerC2Ejjjj($2,32,9,8,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 48|0);\n __ZN6laszip6models10arithmeticD2Ev($3);\n $4 = ((($2)) + 4|0);\n __ZN6laszip6models10arithmeticD2Ev($4);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25arrayIN6laszip7formats3las7gpstimeELj4EEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 32|0);\n $4 = $2;\n while(1) {\n  __ZN6laszip7formats3las7gpstimeC2Ev($4);\n  $5 = ((($4)) + 8|0);\n  $6 = ($5|0)==($3|0);\n  if ($6) {\n   break;\n  } else {\n   $4 = $5;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats3las7gpstimeC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = $2;\n $4 = $3;\n HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=(0>>8)&255;HEAP8[$4+2>>0]=(0>>16)&255;HEAP8[$4+3>>0]=0>>24;\n $5 = (($3) + 4)|0;\n $6 = $5;\n HEAP8[$6>>0]=0&255;HEAP8[$6+1>>0]=(0>>8)&255;HEAP8[$6+2>>0]=(0>>16)&255;HEAP8[$6+3>>0]=0>>24;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 244|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($3);\n $4 = ((($2)) + 164|0);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($4);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;\n var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;\n var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;\n var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;\n var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;\n var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;\n var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0;\n var $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0;\n var $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0;\n var $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0;\n var $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0;\n var $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0;\n var $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0;\n var $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0;\n var $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0;\n var $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0;\n var $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0;\n var $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0;\n var $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0;\n var $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0;\n var $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0;\n var $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0;\n var $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0);\n $91 = sp + 360|0;\n $88 = $0;\n $89 = $1;\n $90 = $2;\n $94 = $88;\n $95 = ((($94)) + 325|0);\n $96 = HEAP8[$95>>0]|0;\n $97 = $96&1;\n if (!($97)) {\n  $98 = ((($94)) + 244|0);\n  __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($98);\n  $99 = ((($94)) + 325|0);\n  HEAP8[$99>>0] = 1;\n }\n $100 = HEAP8[$94>>0]|0;\n $101 = $100&1;\n if (!($101)) {\n  HEAP8[$94>>0] = 1;\n  $102 = $89;\n  $103 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($102)|0);\n  $104 = $90;\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($103,$104,8);\n  $105 = $90;\n  $106 = (__ZN6laszip7formats7packersINS0_3las7gpstimeEE6unpackEPKc($105)|0);\n  $107 = tempRet0;\n  $108 = $91;\n  $109 = $108;\n  HEAP8[$109>>0]=$106&255;HEAP8[$109+1>>0]=($106>>8)&255;HEAP8[$109+2>>0]=($106>>16)&255;HEAP8[$109+3>>0]=$106>>24;\n  $110 = (($108) + 4)|0;\n  $111 = $110;\n  HEAP8[$111>>0]=$107&255;HEAP8[$111+1>>0]=($107>>8)&255;HEAP8[$111+2>>0]=($107>>16)&255;HEAP8[$111+3>>0]=$107>>24;\n  $112 = ((($94)) + 100|0);\n  $85 = $112;\n  $86 = 0;\n  $113 = $85;\n  $114 = $86;\n  $115 = (($113) + ($114<<3)|0);\n  ;HEAP8[$115>>0]=HEAP8[$91>>0]|0;HEAP8[$115+1>>0]=HEAP8[$91+1>>0]|0;HEAP8[$115+2>>0]=HEAP8[$91+2>>0]|0;HEAP8[$115+3>>0]=HEAP8[$91+3>>0]|0;HEAP8[$115+4>>0]=HEAP8[$91+4>>0]|0;HEAP8[$115+5>>0]=HEAP8[$91+5>>0]|0;HEAP8[$115+6>>0]=HEAP8[$91+6>>0]|0;HEAP8[$115+7>>0]=HEAP8[$91+7>>0]|0;\n  $116 = $90;\n  $117 = ((($116)) + 8|0);\n  $87 = $117;\n  $601 = $87;\n  STACKTOP = sp;return ($601|0);\n }\n $118 = ((($94)) + 132|0);\n $119 = ((($94)) + 92|0);\n $120 = HEAP32[$119>>2]|0;\n $83 = $118;\n $84 = $120;\n $121 = $83;\n $122 = $84;\n $123 = (($121) + ($122<<2)|0);\n $124 = HEAP32[$123>>2]|0;\n $125 = ($124|0)==(0);\n $126 = $89;\n do {\n  if ($125) {\n   $127 = ((($94)) + 48|0);\n   $128 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($126,$127)|0);\n   $92 = $128;\n   $129 = $92;\n   $130 = ($129|0)==(1);\n   if ($130) {\n    $131 = ((($94)) + 244|0);\n    $132 = $89;\n    $133 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($131,$132,0,0)|0);\n    $134 = ((($94)) + 132|0);\n    $135 = ((($94)) + 92|0);\n    $136 = HEAP32[$135>>2]|0;\n    $81 = $134;\n    $82 = $136;\n    $137 = $81;\n    $138 = $82;\n    $139 = (($137) + ($138<<2)|0);\n    HEAP32[$139>>2] = $133;\n    $140 = ((($94)) + 132|0);\n    $141 = ((($94)) + 92|0);\n    $142 = HEAP32[$141>>2]|0;\n    $71 = $140;\n    $72 = $142;\n    $143 = $71;\n    $144 = $72;\n    $145 = (($143) + ($144<<2)|0);\n    $146 = HEAP32[$145>>2]|0;\n    $147 = ($146|0)<(0);\n    $148 = $147 << 31 >> 31;\n    $149 = ((($94)) + 100|0);\n    $150 = ((($94)) + 92|0);\n    $151 = HEAP32[$150>>2]|0;\n    $63 = $149;\n    $64 = $151;\n    $152 = $63;\n    $153 = $64;\n    $154 = (($152) + ($153<<3)|0);\n    $155 = $154;\n    $156 = $155;\n    $157 = HEAPU8[$156>>0]|(HEAPU8[$156+1>>0]<<8)|(HEAPU8[$156+2>>0]<<16)|(HEAPU8[$156+3>>0]<<24);\n    $158 = (($155) + 4)|0;\n    $159 = $158;\n    $160 = HEAPU8[$159>>0]|(HEAPU8[$159+1>>0]<<8)|(HEAPU8[$159+2>>0]<<16)|(HEAPU8[$159+3>>0]<<24);\n    $161 = (_i64Add(($157|0),($160|0),($146|0),($148|0))|0);\n    $162 = tempRet0;\n    $163 = $154;\n    $164 = $163;\n    HEAP8[$164>>0]=$161&255;HEAP8[$164+1>>0]=($161>>8)&255;HEAP8[$164+2>>0]=($161>>16)&255;HEAP8[$164+3>>0]=$161>>24;\n    $165 = (($163) + 4)|0;\n    $166 = $165;\n    HEAP8[$166>>0]=$162&255;HEAP8[$166+1>>0]=($162>>8)&255;HEAP8[$166+2>>0]=($162>>16)&255;HEAP8[$166+3>>0]=$162>>24;\n    $167 = ((($94)) + 148|0);\n    $168 = ((($94)) + 92|0);\n    $169 = HEAP32[$168>>2]|0;\n    $49 = $167;\n    $50 = $169;\n    $170 = $49;\n    $171 = $50;\n    $172 = (($170) + ($171<<2)|0);\n    HEAP32[$172>>2] = 0;\n    break;\n   }\n   $173 = $92;\n   $174 = ($173|0)==(2);\n   if ($174) {\n    $175 = ((($94)) + 96|0);\n    $176 = HEAP32[$175>>2]|0;\n    $177 = (($176) + 1)|0;\n    $178 = $177 & 3;\n    $179 = ((($94)) + 96|0);\n    HEAP32[$179>>2] = $178;\n    $180 = ((($94)) + 244|0);\n    $181 = $89;\n    $182 = ((($94)) + 100|0);\n    $183 = ((($94)) + 92|0);\n    $184 = HEAP32[$183>>2]|0;\n    $45 = $182;\n    $46 = $184;\n    $185 = $45;\n    $186 = $46;\n    $187 = (($185) + ($186<<3)|0);\n    $188 = $187;\n    $189 = $188;\n    $190 = HEAPU8[$189>>0]|(HEAPU8[$189+1>>0]<<8)|(HEAPU8[$189+2>>0]<<16)|(HEAPU8[$189+3>>0]<<24);\n    $191 = (($188) + 4)|0;\n    $192 = $191;\n    $193 = HEAPU8[$192>>0]|(HEAPU8[$192+1>>0]<<8)|(HEAPU8[$192+2>>0]<<16)|(HEAPU8[$192+3>>0]<<24);\n    $194 = (_bitshift64Ashr(($190|0),($193|0),32)|0);\n    $195 = tempRet0;\n    $196 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($180,$181,$194,8)|0);\n    $197 = ($196|0)<(0);\n    $198 = $197 << 31 >> 31;\n    $199 = ((($94)) + 100|0);\n    $200 = ((($94)) + 96|0);\n    $201 = HEAP32[$200>>2]|0;\n    $33 = $199;\n    $34 = $201;\n    $202 = $33;\n    $203 = $34;\n    $204 = (($202) + ($203<<3)|0);\n    $205 = $204;\n    $206 = $205;\n    HEAP8[$206>>0]=$196&255;HEAP8[$206+1>>0]=($196>>8)&255;HEAP8[$206+2>>0]=($196>>16)&255;HEAP8[$206+3>>0]=$196>>24;\n    $207 = (($205) + 4)|0;\n    $208 = $207;\n    HEAP8[$208>>0]=$198&255;HEAP8[$208+1>>0]=($198>>8)&255;HEAP8[$208+2>>0]=($198>>16)&255;HEAP8[$208+3>>0]=$198>>24;\n    $209 = ((($94)) + 100|0);\n    $210 = ((($94)) + 96|0);\n    $211 = HEAP32[$210>>2]|0;\n    $29 = $209;\n    $30 = $211;\n    $212 = $29;\n    $213 = $30;\n    $214 = (($212) + ($213<<3)|0);\n    $215 = $214;\n    $216 = $215;\n    $217 = HEAPU8[$216>>0]|(HEAPU8[$216+1>>0]<<8)|(HEAPU8[$216+2>>0]<<16)|(HEAPU8[$216+3>>0]<<24);\n    $218 = (($215) + 4)|0;\n    $219 = $218;\n    $220 = HEAPU8[$219>>0]|(HEAPU8[$219+1>>0]<<8)|(HEAPU8[$219+2>>0]<<16)|(HEAPU8[$219+3>>0]<<24);\n    $221 = ((($94)) + 100|0);\n    $222 = ((($94)) + 96|0);\n    $223 = HEAP32[$222>>2]|0;\n    $25 = $221;\n    $26 = $223;\n    $224 = $25;\n    $225 = $26;\n    $226 = (($224) + ($225<<3)|0);\n    $227 = $226;\n    $228 = $227;\n    HEAP8[$228>>0]=0&255;HEAP8[$228+1>>0]=(0>>8)&255;HEAP8[$228+2>>0]=(0>>16)&255;HEAP8[$228+3>>0]=0>>24;\n    $229 = (($227) + 4)|0;\n    $230 = $229;\n    HEAP8[$230>>0]=$217&255;HEAP8[$230+1>>0]=($217>>8)&255;HEAP8[$230+2>>0]=($217>>16)&255;HEAP8[$230+3>>0]=$217>>24;\n    $231 = $89;\n    $232 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($231)|0);\n    $233 = ((($94)) + 100|0);\n    $234 = ((($94)) + 96|0);\n    $235 = HEAP32[$234>>2]|0;\n    $13 = $233;\n    $14 = $235;\n    $236 = $13;\n    $237 = $14;\n    $238 = (($236) + ($237<<3)|0);\n    $239 = $238;\n    $240 = $239;\n    $241 = HEAPU8[$240>>0]|(HEAPU8[$240+1>>0]<<8)|(HEAPU8[$240+2>>0]<<16)|(HEAPU8[$240+3>>0]<<24);\n    $242 = (($239) + 4)|0;\n    $243 = $242;\n    $244 = HEAPU8[$243>>0]|(HEAPU8[$243+1>>0]<<8)|(HEAPU8[$243+2>>0]<<16)|(HEAPU8[$243+3>>0]<<24);\n    $245 = $241 | $232;\n    $246 = $238;\n    $247 = $246;\n    HEAP8[$247>>0]=$245&255;HEAP8[$247+1>>0]=($245>>8)&255;HEAP8[$247+2>>0]=($245>>16)&255;HEAP8[$247+3>>0]=$245>>24;\n    $248 = (($246) + 4)|0;\n    $249 = $248;\n    HEAP8[$249>>0]=$244&255;HEAP8[$249+1>>0]=($244>>8)&255;HEAP8[$249+2>>0]=($244>>16)&255;HEAP8[$249+3>>0]=$244>>24;\n    $250 = ((($94)) + 96|0);\n    $251 = HEAP32[$250>>2]|0;\n    $252 = ((($94)) + 92|0);\n    HEAP32[$252>>2] = $251;\n    $253 = ((($94)) + 132|0);\n    $254 = ((($94)) + 92|0);\n    $255 = HEAP32[$254>>2]|0;\n    $7 = $253;\n    $8 = $255;\n    $256 = $7;\n    $257 = $8;\n    $258 = (($256) + ($257<<2)|0);\n    HEAP32[$258>>2] = 0;\n    $259 = ((($94)) + 148|0);\n    $260 = ((($94)) + 92|0);\n    $261 = HEAP32[$260>>2]|0;\n    $3 = $259;\n    $4 = $261;\n    $262 = $3;\n    $263 = $4;\n    $264 = (($262) + ($263<<2)|0);\n    HEAP32[$264>>2] = 0;\n    break;\n   }\n   $265 = $92;\n   $266 = ($265|0)>(2);\n   if ($266) {\n    $267 = ((($94)) + 92|0);\n    $268 = HEAP32[$267>>2]|0;\n    $269 = $92;\n    $270 = (($268) + ($269))|0;\n    $271 = (($270) - 2)|0;\n    $272 = $271 & 3;\n    $273 = ((($94)) + 92|0);\n    HEAP32[$273>>2] = $272;\n    $274 = $89;\n    $275 = $90;\n    (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($94,$274,$275)|0);\n   }\n  } else {\n   $276 = ((($94)) + 4|0);\n   $277 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($126,$276)|0);\n   $92 = $277;\n   $278 = $92;\n   $279 = ($278|0)==(1);\n   if ($279) {\n    $280 = ((($94)) + 244|0);\n    $281 = $89;\n    $282 = ((($94)) + 132|0);\n    $283 = ((($94)) + 92|0);\n    $284 = HEAP32[$283>>2]|0;\n    $5 = $282;\n    $6 = $284;\n    $285 = $5;\n    $286 = $6;\n    $287 = (($285) + ($286<<2)|0);\n    $288 = HEAP32[$287>>2]|0;\n    $289 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($280,$281,$288,1)|0);\n    $290 = ($289|0)<(0);\n    $291 = $290 << 31 >> 31;\n    $292 = ((($94)) + 100|0);\n    $293 = ((($94)) + 92|0);\n    $294 = HEAP32[$293>>2]|0;\n    $9 = $292;\n    $10 = $294;\n    $295 = $9;\n    $296 = $10;\n    $297 = (($295) + ($296<<3)|0);\n    $298 = $297;\n    $299 = $298;\n    $300 = HEAPU8[$299>>0]|(HEAPU8[$299+1>>0]<<8)|(HEAPU8[$299+2>>0]<<16)|(HEAPU8[$299+3>>0]<<24);\n    $301 = (($298) + 4)|0;\n    $302 = $301;\n    $303 = HEAPU8[$302>>0]|(HEAPU8[$302+1>>0]<<8)|(HEAPU8[$302+2>>0]<<16)|(HEAPU8[$302+3>>0]<<24);\n    $304 = (_i64Add(($300|0),($303|0),($289|0),($291|0))|0);\n    $305 = tempRet0;\n    $306 = $297;\n    $307 = $306;\n    HEAP8[$307>>0]=$304&255;HEAP8[$307+1>>0]=($304>>8)&255;HEAP8[$307+2>>0]=($304>>16)&255;HEAP8[$307+3>>0]=$304>>24;\n    $308 = (($306) + 4)|0;\n    $309 = $308;\n    HEAP8[$309>>0]=$305&255;HEAP8[$309+1>>0]=($305>>8)&255;HEAP8[$309+2>>0]=($305>>16)&255;HEAP8[$309+3>>0]=$305>>24;\n    $310 = ((($94)) + 148|0);\n    $311 = ((($94)) + 92|0);\n    $312 = HEAP32[$311>>2]|0;\n    $11 = $310;\n    $12 = $312;\n    $313 = $11;\n    $314 = $12;\n    $315 = (($313) + ($314<<2)|0);\n    HEAP32[$315>>2] = 0;\n    break;\n   }\n   $316 = $92;\n   $317 = ($316|0)<(511);\n   $318 = $92;\n   if (!($317)) {\n    $490 = ($318|0)==(512);\n    if ($490) {\n     $491 = ((($94)) + 96|0);\n     $492 = HEAP32[$491>>2]|0;\n     $493 = (($492) + 1)|0;\n     $494 = $493 & 3;\n     $495 = ((($94)) + 96|0);\n     HEAP32[$495>>2] = $494;\n     $496 = ((($94)) + 244|0);\n     $497 = $89;\n     $498 = ((($94)) + 100|0);\n     $499 = ((($94)) + 92|0);\n     $500 = HEAP32[$499>>2]|0;\n     $61 = $498;\n     $62 = $500;\n     $501 = $61;\n     $502 = $62;\n     $503 = (($501) + ($502<<3)|0);\n     $504 = $503;\n     $505 = $504;\n     $506 = HEAPU8[$505>>0]|(HEAPU8[$505+1>>0]<<8)|(HEAPU8[$505+2>>0]<<16)|(HEAPU8[$505+3>>0]<<24);\n     $507 = (($504) + 4)|0;\n     $508 = $507;\n     $509 = HEAPU8[$508>>0]|(HEAPU8[$508+1>>0]<<8)|(HEAPU8[$508+2>>0]<<16)|(HEAPU8[$508+3>>0]<<24);\n     $510 = (_bitshift64Ashr(($506|0),($509|0),32)|0);\n     $511 = tempRet0;\n     $512 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($496,$497,$510,8)|0);\n     $513 = ($512|0)<(0);\n     $514 = $513 << 31 >> 31;\n     $515 = ((($94)) + 100|0);\n     $516 = ((($94)) + 96|0);\n     $517 = HEAP32[$516>>2]|0;\n     $65 = $515;\n     $66 = $517;\n     $518 = $65;\n     $519 = $66;\n     $520 = (($518) + ($519<<3)|0);\n     $521 = $520;\n     $522 = $521;\n     HEAP8[$522>>0]=$512&255;HEAP8[$522+1>>0]=($512>>8)&255;HEAP8[$522+2>>0]=($512>>16)&255;HEAP8[$522+3>>0]=$512>>24;\n     $523 = (($521) + 4)|0;\n     $524 = $523;\n     HEAP8[$524>>0]=$514&255;HEAP8[$524+1>>0]=($514>>8)&255;HEAP8[$524+2>>0]=($514>>16)&255;HEAP8[$524+3>>0]=$514>>24;\n     $525 = ((($94)) + 100|0);\n     $526 = ((($94)) + 96|0);\n     $527 = HEAP32[$526>>2]|0;\n     $67 = $525;\n     $68 = $527;\n     $528 = $67;\n     $529 = $68;\n     $530 = (($528) + ($529<<3)|0);\n     $531 = $530;\n     $532 = $531;\n     $533 = HEAPU8[$532>>0]|(HEAPU8[$532+1>>0]<<8)|(HEAPU8[$532+2>>0]<<16)|(HEAPU8[$532+3>>0]<<24);\n     $534 = (($531) + 4)|0;\n     $535 = $534;\n     $536 = HEAPU8[$535>>0]|(HEAPU8[$535+1>>0]<<8)|(HEAPU8[$535+2>>0]<<16)|(HEAPU8[$535+3>>0]<<24);\n     $537 = ((($94)) + 100|0);\n     $538 = ((($94)) + 96|0);\n     $539 = HEAP32[$538>>2]|0;\n     $69 = $537;\n     $70 = $539;\n     $540 = $69;\n     $541 = $70;\n     $542 = (($540) + ($541<<3)|0);\n     $543 = $542;\n     $544 = $543;\n     HEAP8[$544>>0]=0&255;HEAP8[$544+1>>0]=(0>>8)&255;HEAP8[$544+2>>0]=(0>>16)&255;HEAP8[$544+3>>0]=0>>24;\n     $545 = (($543) + 4)|0;\n     $546 = $545;\n     HEAP8[$546>>0]=$533&255;HEAP8[$546+1>>0]=($533>>8)&255;HEAP8[$546+2>>0]=($533>>16)&255;HEAP8[$546+3>>0]=$533>>24;\n     $547 = $89;\n     $548 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($547)|0);\n     $549 = ((($94)) + 100|0);\n     $550 = ((($94)) + 96|0);\n     $551 = HEAP32[$550>>2]|0;\n     $73 = $549;\n     $74 = $551;\n     $552 = $73;\n     $553 = $74;\n     $554 = (($552) + ($553<<3)|0);\n     $555 = $554;\n     $556 = $555;\n     $557 = HEAPU8[$556>>0]|(HEAPU8[$556+1>>0]<<8)|(HEAPU8[$556+2>>0]<<16)|(HEAPU8[$556+3>>0]<<24);\n     $558 = (($555) + 4)|0;\n     $559 = $558;\n     $560 = HEAPU8[$559>>0]|(HEAPU8[$559+1>>0]<<8)|(HEAPU8[$559+2>>0]<<16)|(HEAPU8[$559+3>>0]<<24);\n     $561 = $557 | $548;\n     $562 = $554;\n     $563 = $562;\n     HEAP8[$563>>0]=$561&255;HEAP8[$563+1>>0]=($561>>8)&255;HEAP8[$563+2>>0]=($561>>16)&255;HEAP8[$563+3>>0]=$561>>24;\n     $564 = (($562) + 4)|0;\n     $565 = $564;\n     HEAP8[$565>>0]=$560&255;HEAP8[$565+1>>0]=($560>>8)&255;HEAP8[$565+2>>0]=($560>>16)&255;HEAP8[$565+3>>0]=$560>>24;\n     $566 = ((($94)) + 96|0);\n     $567 = HEAP32[$566>>2]|0;\n     $568 = ((($94)) + 92|0);\n     HEAP32[$568>>2] = $567;\n     $569 = ((($94)) + 132|0);\n     $570 = ((($94)) + 92|0);\n     $571 = HEAP32[$570>>2]|0;\n     $75 = $569;\n     $76 = $571;\n     $572 = $75;\n     $573 = $76;\n     $574 = (($572) + ($573<<2)|0);\n     HEAP32[$574>>2] = 0;\n     $575 = ((($94)) + 148|0);\n     $576 = ((($94)) + 92|0);\n     $577 = HEAP32[$576>>2]|0;\n     $77 = $575;\n     $78 = $577;\n     $578 = $77;\n     $579 = $78;\n     $580 = (($578) + ($579<<2)|0);\n     HEAP32[$580>>2] = 0;\n     break;\n    }\n    $581 = $92;\n    $582 = ($581|0)>=(512);\n    if (!($582)) {\n     break;\n    }\n    $583 = ((($94)) + 92|0);\n    $584 = HEAP32[$583>>2]|0;\n    $585 = $92;\n    $586 = (($584) + ($585))|0;\n    $587 = (($586) - 512)|0;\n    $588 = $587 & 3;\n    $589 = ((($94)) + 92|0);\n    HEAP32[$589>>2] = $588;\n    $590 = $89;\n    $591 = $90;\n    (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($94,$590,$591)|0);\n    break;\n   }\n   $319 = ($318|0)==(0);\n   do {\n    if ($319) {\n     $320 = ((($94)) + 244|0);\n     $321 = $89;\n     $322 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($320,$321,0,7)|0);\n     $93 = $322;\n     $323 = ((($94)) + 148|0);\n     $324 = ((($94)) + 92|0);\n     $325 = HEAP32[$324>>2]|0;\n     $15 = $323;\n     $16 = $325;\n     $326 = $15;\n     $327 = $16;\n     $328 = (($326) + ($327<<2)|0);\n     $329 = HEAP32[$328>>2]|0;\n     $330 = (($329) + 1)|0;\n     HEAP32[$328>>2] = $330;\n     $331 = ((($94)) + 148|0);\n     $332 = ((($94)) + 92|0);\n     $333 = HEAP32[$332>>2]|0;\n     $17 = $331;\n     $18 = $333;\n     $334 = $17;\n     $335 = $18;\n     $336 = (($334) + ($335<<2)|0);\n     $337 = HEAP32[$336>>2]|0;\n     $338 = ($337|0)>(3);\n     if ($338) {\n      $339 = $93;\n      $340 = ((($94)) + 132|0);\n      $341 = ((($94)) + 92|0);\n      $342 = HEAP32[$341>>2]|0;\n      $19 = $340;\n      $20 = $342;\n      $343 = $19;\n      $344 = $20;\n      $345 = (($343) + ($344<<2)|0);\n      HEAP32[$345>>2] = $339;\n      $346 = ((($94)) + 148|0);\n      $347 = ((($94)) + 92|0);\n      $348 = HEAP32[$347>>2]|0;\n      $21 = $346;\n      $22 = $348;\n      $349 = $21;\n      $350 = $22;\n      $351 = (($349) + ($350<<2)|0);\n      HEAP32[$351>>2] = 0;\n     }\n    } else {\n     $352 = $92;\n     $353 = ($352|0)<(500);\n     $354 = $92;\n     if ($353) {\n      $355 = ($354|0)<(10);\n      $356 = ((($94)) + 244|0);\n      $357 = $89;\n      $358 = $92;\n      $359 = ((($94)) + 132|0);\n      $360 = ((($94)) + 92|0);\n      $361 = HEAP32[$360>>2]|0;\n      if ($355) {\n       $23 = $359;\n       $24 = $361;\n       $362 = $23;\n       $363 = $24;\n       $364 = (($362) + ($363<<2)|0);\n       $365 = HEAP32[$364>>2]|0;\n       $366 = Math_imul($358, $365)|0;\n       $367 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($356,$357,$366,2)|0);\n       $93 = $367;\n       break;\n      } else {\n       $27 = $359;\n       $28 = $361;\n       $368 = $27;\n       $369 = $28;\n       $370 = (($368) + ($369<<2)|0);\n       $371 = HEAP32[$370>>2]|0;\n       $372 = Math_imul($358, $371)|0;\n       $373 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($356,$357,$372,3)|0);\n       $93 = $373;\n       break;\n      }\n     }\n     $374 = ($354|0)==(500);\n     if ($374) {\n      $375 = ((($94)) + 244|0);\n      $376 = $89;\n      $377 = ((($94)) + 132|0);\n      $378 = ((($94)) + 92|0);\n      $379 = HEAP32[$378>>2]|0;\n      $31 = $377;\n      $32 = $379;\n      $380 = $31;\n      $381 = $32;\n      $382 = (($380) + ($381<<2)|0);\n      $383 = HEAP32[$382>>2]|0;\n      $384 = ($383*500)|0;\n      $385 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($375,$376,$384,4)|0);\n      $93 = $385;\n      $386 = ((($94)) + 148|0);\n      $387 = ((($94)) + 92|0);\n      $388 = HEAP32[$387>>2]|0;\n      $35 = $386;\n      $36 = $388;\n      $389 = $35;\n      $390 = $36;\n      $391 = (($389) + ($390<<2)|0);\n      $392 = HEAP32[$391>>2]|0;\n      $393 = (($392) + 1)|0;\n      HEAP32[$391>>2] = $393;\n      $394 = ((($94)) + 148|0);\n      $395 = ((($94)) + 92|0);\n      $396 = HEAP32[$395>>2]|0;\n      $37 = $394;\n      $38 = $396;\n      $397 = $37;\n      $398 = $38;\n      $399 = (($397) + ($398<<2)|0);\n      $400 = HEAP32[$399>>2]|0;\n      $401 = ($400|0)>(3);\n      if (!($401)) {\n       break;\n      }\n      $402 = $93;\n      $403 = ((($94)) + 132|0);\n      $404 = ((($94)) + 92|0);\n      $405 = HEAP32[$404>>2]|0;\n      $39 = $403;\n      $40 = $405;\n      $406 = $39;\n      $407 = $40;\n      $408 = (($406) + ($407<<2)|0);\n      HEAP32[$408>>2] = $402;\n      $409 = ((($94)) + 148|0);\n      $410 = ((($94)) + 92|0);\n      $411 = HEAP32[$410>>2]|0;\n      $41 = $409;\n      $42 = $411;\n      $412 = $41;\n      $413 = $42;\n      $414 = (($412) + ($413<<2)|0);\n      HEAP32[$414>>2] = 0;\n      break;\n     }\n     $415 = $92;\n     $416 = (500 - ($415))|0;\n     $92 = $416;\n     $417 = $92;\n     $418 = ($417|0)>(-10);\n     $419 = ((($94)) + 244|0);\n     $420 = $89;\n     if ($418) {\n      $421 = $92;\n      $422 = ((($94)) + 132|0);\n      $423 = ((($94)) + 92|0);\n      $424 = HEAP32[$423>>2]|0;\n      $43 = $422;\n      $44 = $424;\n      $425 = $43;\n      $426 = $44;\n      $427 = (($425) + ($426<<2)|0);\n      $428 = HEAP32[$427>>2]|0;\n      $429 = Math_imul($421, $428)|0;\n      $430 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($419,$420,$429,5)|0);\n      $93 = $430;\n      break;\n     }\n     $431 = ((($94)) + 132|0);\n     $432 = ((($94)) + 92|0);\n     $433 = HEAP32[$432>>2]|0;\n     $47 = $431;\n     $48 = $433;\n     $434 = $47;\n     $435 = $48;\n     $436 = (($434) + ($435<<2)|0);\n     $437 = HEAP32[$436>>2]|0;\n     $438 = Math_imul(-10, $437)|0;\n     $439 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($419,$420,$438,6)|0);\n     $93 = $439;\n     $440 = ((($94)) + 148|0);\n     $441 = ((($94)) + 92|0);\n     $442 = HEAP32[$441>>2]|0;\n     $51 = $440;\n     $52 = $442;\n     $443 = $51;\n     $444 = $52;\n     $445 = (($443) + ($444<<2)|0);\n     $446 = HEAP32[$445>>2]|0;\n     $447 = (($446) + 1)|0;\n     HEAP32[$445>>2] = $447;\n     $448 = ((($94)) + 148|0);\n     $449 = ((($94)) + 92|0);\n     $450 = HEAP32[$449>>2]|0;\n     $53 = $448;\n     $54 = $450;\n     $451 = $53;\n     $452 = $54;\n     $453 = (($451) + ($452<<2)|0);\n     $454 = HEAP32[$453>>2]|0;\n     $455 = ($454|0)>(3);\n     if ($455) {\n      $456 = $93;\n      $457 = ((($94)) + 132|0);\n      $458 = ((($94)) + 92|0);\n      $459 = HEAP32[$458>>2]|0;\n      $55 = $457;\n      $56 = $459;\n      $460 = $55;\n      $461 = $56;\n      $462 = (($460) + ($461<<2)|0);\n      HEAP32[$462>>2] = $456;\n      $463 = ((($94)) + 148|0);\n      $464 = ((($94)) + 92|0);\n      $465 = HEAP32[$464>>2]|0;\n      $57 = $463;\n      $58 = $465;\n      $466 = $57;\n      $467 = $58;\n      $468 = (($466) + ($467<<2)|0);\n      HEAP32[$468>>2] = 0;\n     }\n    }\n   } while(0);\n   $469 = $93;\n   $470 = ($469|0)<(0);\n   $471 = $470 << 31 >> 31;\n   $472 = ((($94)) + 100|0);\n   $473 = ((($94)) + 92|0);\n   $474 = HEAP32[$473>>2]|0;\n   $59 = $472;\n   $60 = $474;\n   $475 = $59;\n   $476 = $60;\n   $477 = (($475) + ($476<<3)|0);\n   $478 = $477;\n   $479 = $478;\n   $480 = HEAPU8[$479>>0]|(HEAPU8[$479+1>>0]<<8)|(HEAPU8[$479+2>>0]<<16)|(HEAPU8[$479+3>>0]<<24);\n   $481 = (($478) + 4)|0;\n   $482 = $481;\n   $483 = HEAPU8[$482>>0]|(HEAPU8[$482+1>>0]<<8)|(HEAPU8[$482+2>>0]<<16)|(HEAPU8[$482+3>>0]<<24);\n   $484 = (_i64Add(($480|0),($483|0),($469|0),($471|0))|0);\n   $485 = tempRet0;\n   $486 = $477;\n   $487 = $486;\n   HEAP8[$487>>0]=$484&255;HEAP8[$487+1>>0]=($484>>8)&255;HEAP8[$487+2>>0]=($484>>16)&255;HEAP8[$487+3>>0]=$484>>24;\n   $488 = (($486) + 4)|0;\n   $489 = $488;\n   HEAP8[$489>>0]=$485&255;HEAP8[$489+1>>0]=($485>>8)&255;HEAP8[$489+2>>0]=($485>>16)&255;HEAP8[$489+3>>0]=$485>>24;\n  }\n } while(0);\n $592 = ((($94)) + 100|0);\n $593 = ((($94)) + 92|0);\n $594 = HEAP32[$593>>2]|0;\n $79 = $592;\n $80 = $594;\n $595 = $79;\n $596 = $80;\n $597 = (($595) + ($596<<3)|0);\n $598 = $90;\n __ZN6laszip7formats7packersINS0_3las7gpstimeEE4packERKS3_Pc($597,$598);\n $599 = $90;\n $600 = ((($599)) + 8|0);\n $87 = $600;\n $601 = $87;\n STACKTOP = sp;return ($601|0);\n}\nfunction __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip13decompressors7integer4initEv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersINS0_3las7gpstimeEE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $1 = sp + 24|0;\n $3 = sp + 8|0;\n $4 = sp;\n $2 = $0;\n $5 = $2;\n $6 = (__ZN6laszip7formats7packersIjE6unpackEPKc($5)|0);\n $7 = $3;\n $8 = $7;\n HEAP32[$8>>2] = $6;\n $9 = (($7) + 4)|0;\n $10 = $9;\n HEAP32[$10>>2] = 0;\n $11 = $2;\n $12 = ((($11)) + 4|0);\n $13 = (__ZN6laszip7formats7packersIjE6unpackEPKc($12)|0);\n $14 = $4;\n $15 = $14;\n HEAP32[$15>>2] = $13;\n $16 = (($14) + 4)|0;\n $17 = $16;\n HEAP32[$17>>2] = 0;\n $18 = $4;\n $19 = $18;\n $20 = HEAP32[$19>>2]|0;\n $21 = (($18) + 4)|0;\n $22 = $21;\n $23 = HEAP32[$22>>2]|0;\n $24 = $3;\n $25 = $24;\n $26 = HEAP32[$25>>2]|0;\n $27 = (($24) + 4)|0;\n $28 = $27;\n $29 = HEAP32[$28>>2]|0;\n $30 = $20 | $29;\n __ZN6laszip7formats3las7gpstimeC2Ex($1,$26,$30);\n $31 = $1;\n $32 = $31;\n $33 = HEAPU8[$32>>0]|(HEAPU8[$32+1>>0]<<8)|(HEAPU8[$32+2>>0]<<16)|(HEAPU8[$32+3>>0]<<24);\n $34 = (($31) + 4)|0;\n $35 = $34;\n $36 = HEAPU8[$35>>0]|(HEAPU8[$35+1>>0]<<8)|(HEAPU8[$35+2>>0]<<16)|(HEAPU8[$35+3>>0]<<24);\n tempRet0 = ($36);\n STACKTOP = sp;return ($33|0);\n}\nfunction __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $4 = $1;\n $5 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($4)|0);\n $6 = $5&65535;\n $2 = $6;\n $7 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($4)|0);\n $8 = $7&65535;\n $3 = $8;\n $9 = $3;\n $10 = $9 << 16;\n $11 = $2;\n $12 = $10 | $11;\n STACKTOP = sp;return ($12|0);\n}\nfunction __ZN6laszip7formats7packersINS0_3las7gpstimeEE4packERKS3_Pc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $4;\n $6 = $5;\n $7 = HEAPU8[$6>>0]|(HEAPU8[$6+1>>0]<<8)|(HEAPU8[$6+2>>0]<<16)|(HEAPU8[$6+3>>0]<<24);\n $8 = (($5) + 4)|0;\n $9 = $8;\n $10 = HEAPU8[$9>>0]|(HEAPU8[$9+1>>0]<<8)|(HEAPU8[$9+2>>0]<<16)|(HEAPU8[$9+3>>0]<<24);\n $11 = $3;\n __ZN6laszip7formats7packersIjE4packEjPc($7,$11);\n $12 = $2;\n $13 = $12;\n $14 = $13;\n $15 = HEAPU8[$14>>0]|(HEAPU8[$14+1>>0]<<8)|(HEAPU8[$14+2>>0]<<16)|(HEAPU8[$14+3>>0]<<24);\n $16 = (($13) + 4)|0;\n $17 = $16;\n $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24);\n $19 = (_bitshift64Ashr(($15|0),($18|0),32)|0);\n $20 = tempRet0;\n $21 = $3;\n $22 = ((($21)) + 4|0);\n __ZN6laszip7formats7packersIjE4packEjPc($19,$22);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats3las7gpstimeC2Ex($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = sp;\n $3 = $0;\n $5 = $4;\n $6 = $5;\n HEAP32[$6>>2] = $1;\n $7 = (($5) + 4)|0;\n $8 = $7;\n HEAP32[$8>>2] = $2;\n $9 = $3;\n $10 = $4;\n $11 = $10;\n $12 = HEAP32[$11>>2]|0;\n $13 = (($10) + 4)|0;\n $14 = $13;\n $15 = HEAP32[$14>>2]|0;\n $16 = $9;\n $17 = $16;\n HEAP8[$17>>0]=$12&255;HEAP8[$17+1>>0]=($12>>8)&255;HEAP8[$17+2>>0]=($12>>16)&255;HEAP8[$17+3>>0]=$12>>24;\n $18 = (($16) + 4)|0;\n $19 = $18;\n HEAP8[$19>>0]=$15&255;HEAP8[$19+1>>0]=($15>>8)&255;HEAP8[$19+2>>0]=($15>>16)&255;HEAP8[$19+3>>0]=$15>>24;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 400;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2152);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2176);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP8[$2>>0] = 0;\n $3 = ((($2)) + 1|0);\n __ZN6laszip7formats3las3rgbC2Ev($3);\n $4 = ((($2)) + 8|0);\n __ZN6laszip6models10arithmeticC2EjbPj($4,128,0,0);\n $5 = ((($2)) + 52|0);\n __ZN6laszip6models10arithmeticC2EjbPj($5,256,0,0);\n $6 = ((($2)) + 96|0);\n __ZN6laszip6models10arithmeticC2EjbPj($6,256,0,0);\n $7 = ((($2)) + 140|0);\n __ZN6laszip6models10arithmeticC2EjbPj($7,256,0,0);\n $8 = ((($2)) + 184|0);\n __ZN6laszip6models10arithmeticC2EjbPj($8,256,0,0);\n $9 = ((($2)) + 228|0);\n __ZN6laszip6models10arithmeticC2EjbPj($9,256,0,0);\n $10 = ((($2)) + 272|0);\n __ZN6laszip6models10arithmeticC2EjbPj($10,256,0,0);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2152);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats3las3rgbC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP8[$2>>0]=0&255;HEAP8[$2+1>>0]=0>>8;\n $3 = ((($2)) + 2|0);\n HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=0>>8;\n $4 = ((($2)) + 4|0);\n HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=0>>8;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 272|0);\n __ZN6laszip6models10arithmeticD2Ev($3);\n $4 = ((($2)) + 228|0);\n __ZN6laszip6models10arithmeticD2Ev($4);\n $5 = ((($2)) + 184|0);\n __ZN6laszip6models10arithmeticD2Ev($5);\n $6 = ((($2)) + 140|0);\n __ZN6laszip6models10arithmeticD2Ev($6);\n $7 = ((($2)) + 96|0);\n __ZN6laszip6models10arithmeticD2Ev($7);\n $8 = ((($2)) + 52|0);\n __ZN6laszip6models10arithmeticD2Ev($8);\n $9 = ((($2)) + 8|0);\n __ZN6laszip6models10arithmeticD2Ev($9);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;\n var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0;\n var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0;\n var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0;\n var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0;\n var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0;\n var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0;\n var $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $34 = 0, $35 = 0, $36 = 0;\n var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0;\n var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0;\n var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0;\n var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $7 = sp + 32|0;\n $11 = sp + 24|0;\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $12 = $4;\n $13 = HEAP8[$12>>0]|0;\n $14 = $13&1;\n if (!($14)) {\n  HEAP8[$12>>0] = 1;\n  $15 = $5;\n  $16 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($15)|0);\n  $17 = $6;\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($16,$17,6);\n  $18 = $6;\n  __ZN6laszip7formats7packersINS0_3las3rgbEE6unpackEPKc($7,$18);\n  $19 = ((($12)) + 1|0);\n  ;HEAP8[$19>>0]=HEAP8[$7>>0]|0;HEAP8[$19+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$19+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$19+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$19+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$19+5>>0]=HEAP8[$7+5>>0]|0;\n  $20 = $6;\n  $21 = ((($20)) + 6|0);\n  $3 = $21;\n  $331 = $3;\n  STACKTOP = sp;return ($331|0);\n }\n $9 = 0;\n $22 = $5;\n $23 = ((($12)) + 8|0);\n $24 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($22,$23)|0);\n $10 = $24;\n __ZN6laszip7formats3las3rgbC2Ev($11);\n $25 = $10;\n $26 = $25 & 1;\n $27 = ($26|0)!=(0);\n if ($27) {\n  $28 = $5;\n  $29 = ((($12)) + 52|0);\n  $30 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($28,$29)|0);\n  $31 = $30&255;\n  $8 = $31;\n  $32 = $8;\n  $33 = $32&255;\n  $34 = ((($12)) + 1|0);\n  $35 = HEAPU8[$34>>0]|(HEAPU8[$34+1>>0]<<8);\n  $36 = $35&65535;\n  $37 = $36 & 255;\n  $38 = (($33) + ($37))|0;\n  $39 = (__Z7U8_FOLDi($38)|0);\n  $40 = $39&255;\n  HEAP8[$11>>0]=$40&255;HEAP8[$11+1>>0]=$40>>8;\n } else {\n  $41 = ((($12)) + 1|0);\n  $42 = HEAPU8[$41>>0]|(HEAPU8[$41+1>>0]<<8);\n  $43 = $42&65535;\n  $44 = $43 & 255;\n  $45 = $44&65535;\n  HEAP8[$11>>0]=$45&255;HEAP8[$11+1>>0]=$45>>8;\n }\n $46 = $10;\n $47 = $46 & 2;\n $48 = ($47|0)!=(0);\n if ($48) {\n  $49 = $5;\n  $50 = ((($12)) + 96|0);\n  $51 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($49,$50)|0);\n  $52 = $51&255;\n  $8 = $52;\n  $53 = $8;\n  $54 = $53&255;\n  $55 = ((($12)) + 1|0);\n  $56 = HEAPU8[$55>>0]|(HEAPU8[$55+1>>0]<<8);\n  $57 = $56&65535;\n  $58 = $57 >> 8;\n  $59 = (($54) + ($58))|0;\n  $60 = (__Z7U8_FOLDi($59)|0);\n  $61 = $60&255;\n  $62 = $61&65535;\n  $63 = $62 << 8;\n  $64 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n  $65 = $64&65535;\n  $66 = $65 | $63;\n  $67 = $66&65535;\n  HEAP8[$11>>0]=$67&255;HEAP8[$11+1>>0]=$67>>8;\n } else {\n  $68 = ((($12)) + 1|0);\n  $69 = HEAPU8[$68>>0]|(HEAPU8[$68+1>>0]<<8);\n  $70 = $69&65535;\n  $71 = $70 & 65280;\n  $72 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n  $73 = $72&65535;\n  $74 = $73 | $71;\n  $75 = $74&65535;\n  HEAP8[$11>>0]=$75&255;HEAP8[$11+1>>0]=$75>>8;\n }\n $76 = $10;\n $77 = $76 & 64;\n $78 = ($77|0)!=(0);\n $79 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n do {\n  if ($78) {\n   $80 = $79&65535;\n   $81 = $80 & 255;\n   $82 = ((($12)) + 1|0);\n   $83 = HEAPU8[$82>>0]|(HEAPU8[$82+1>>0]<<8);\n   $84 = $83&65535;\n   $85 = $84 & 255;\n   $86 = (($81) - ($85))|0;\n   $9 = $86;\n   $87 = $10;\n   $88 = $87 & 4;\n   $89 = ($88|0)!=(0);\n   if ($89) {\n    $90 = $5;\n    $91 = ((($12)) + 140|0);\n    $92 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($90,$91)|0);\n    $93 = $92&255;\n    $8 = $93;\n    $94 = $8;\n    $95 = $94&255;\n    $96 = $9;\n    $97 = ((($12)) + 1|0);\n    $98 = ((($97)) + 2|0);\n    $99 = HEAPU8[$98>>0]|(HEAPU8[$98+1>>0]<<8);\n    $100 = $99&65535;\n    $101 = $100 & 255;\n    $102 = (($96) + ($101))|0;\n    $103 = ($102|0)<=(0);\n    if ($103) {\n     $121 = 0;\n    } else {\n     $104 = $9;\n     $105 = ((($12)) + 1|0);\n     $106 = ((($105)) + 2|0);\n     $107 = HEAPU8[$106>>0]|(HEAPU8[$106+1>>0]<<8);\n     $108 = $107&65535;\n     $109 = $108 & 255;\n     $110 = (($104) + ($109))|0;\n     $111 = ($110|0)>=(255);\n     if ($111) {\n      $121 = -1;\n     } else {\n      $112 = $9;\n      $113 = ((($12)) + 1|0);\n      $114 = ((($113)) + 2|0);\n      $115 = HEAPU8[$114>>0]|(HEAPU8[$114+1>>0]<<8);\n      $116 = $115&65535;\n      $117 = $116 & 255;\n      $118 = (($112) + ($117))|0;\n      $119 = $118&255;\n      $121 = $119;\n     }\n    }\n    $120 = $121&255;\n    $122 = (($95) + ($120))|0;\n    $123 = (__Z7U8_FOLDi($122)|0);\n    $124 = $123&255;\n    $125 = ((($11)) + 2|0);\n    HEAP8[$125>>0]=$124&255;HEAP8[$125+1>>0]=$124>>8;\n   } else {\n    $126 = ((($12)) + 1|0);\n    $127 = ((($126)) + 2|0);\n    $128 = HEAPU8[$127>>0]|(HEAPU8[$127+1>>0]<<8);\n    $129 = $128&65535;\n    $130 = $129 & 255;\n    $131 = $130&65535;\n    $132 = ((($11)) + 2|0);\n    HEAP8[$132>>0]=$131&255;HEAP8[$132+1>>0]=$131>>8;\n   }\n   $133 = $10;\n   $134 = $133 & 16;\n   $135 = ($134|0)!=(0);\n   if ($135) {\n    $136 = $5;\n    $137 = ((($12)) + 228|0);\n    $138 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($136,$137)|0);\n    $139 = $138&255;\n    $8 = $139;\n    $140 = $9;\n    $141 = ((($11)) + 2|0);\n    $142 = HEAPU8[$141>>0]|(HEAPU8[$141+1>>0]<<8);\n    $143 = $142&65535;\n    $144 = $143 & 255;\n    $145 = (($140) + ($144))|0;\n    $146 = ((($12)) + 1|0);\n    $147 = ((($146)) + 2|0);\n    $148 = HEAPU8[$147>>0]|(HEAPU8[$147+1>>0]<<8);\n    $149 = $148&65535;\n    $150 = $149 & 255;\n    $151 = (($145) - ($150))|0;\n    $152 = (($151|0) / 2)&-1;\n    $9 = $152;\n    $153 = $8;\n    $154 = $153&255;\n    $155 = $9;\n    $156 = ((($12)) + 1|0);\n    $157 = ((($156)) + 4|0);\n    $158 = HEAPU8[$157>>0]|(HEAPU8[$157+1>>0]<<8);\n    $159 = $158&65535;\n    $160 = $159 & 255;\n    $161 = (($155) + ($160))|0;\n    $162 = ($161|0)<=(0);\n    if ($162) {\n     $180 = 0;\n    } else {\n     $163 = $9;\n     $164 = ((($12)) + 1|0);\n     $165 = ((($164)) + 4|0);\n     $166 = HEAPU8[$165>>0]|(HEAPU8[$165+1>>0]<<8);\n     $167 = $166&65535;\n     $168 = $167 & 255;\n     $169 = (($163) + ($168))|0;\n     $170 = ($169|0)>=(255);\n     if ($170) {\n      $180 = -1;\n     } else {\n      $171 = $9;\n      $172 = ((($12)) + 1|0);\n      $173 = ((($172)) + 4|0);\n      $174 = HEAPU8[$173>>0]|(HEAPU8[$173+1>>0]<<8);\n      $175 = $174&65535;\n      $176 = $175 & 255;\n      $177 = (($171) + ($176))|0;\n      $178 = $177&255;\n      $180 = $178;\n     }\n    }\n    $179 = $180&255;\n    $181 = (($154) + ($179))|0;\n    $182 = (__Z7U8_FOLDi($181)|0);\n    $183 = $182&255;\n    $184 = ((($11)) + 4|0);\n    HEAP8[$184>>0]=$183&255;HEAP8[$184+1>>0]=$183>>8;\n   } else {\n    $185 = ((($12)) + 1|0);\n    $186 = ((($185)) + 4|0);\n    $187 = HEAPU8[$186>>0]|(HEAPU8[$186+1>>0]<<8);\n    $188 = $187&65535;\n    $189 = $188 & 255;\n    $190 = $189&65535;\n    $191 = ((($11)) + 4|0);\n    HEAP8[$191>>0]=$190&255;HEAP8[$191+1>>0]=$190>>8;\n   }\n   $192 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n   $193 = $192&65535;\n   $194 = $193 >> 8;\n   $195 = ((($12)) + 1|0);\n   $196 = HEAPU8[$195>>0]|(HEAPU8[$195+1>>0]<<8);\n   $197 = $196&65535;\n   $198 = $197 >> 8;\n   $199 = (($194) - ($198))|0;\n   $9 = $199;\n   $200 = $10;\n   $201 = $200 & 8;\n   $202 = ($201|0)!=(0);\n   if ($202) {\n    $203 = $5;\n    $204 = ((($12)) + 184|0);\n    $205 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($203,$204)|0);\n    $206 = $205&255;\n    $8 = $206;\n    $207 = $8;\n    $208 = $207&255;\n    $209 = $9;\n    $210 = ((($12)) + 1|0);\n    $211 = ((($210)) + 2|0);\n    $212 = HEAPU8[$211>>0]|(HEAPU8[$211+1>>0]<<8);\n    $213 = $212&65535;\n    $214 = $213 >> 8;\n    $215 = (($209) + ($214))|0;\n    $216 = ($215|0)<=(0);\n    if ($216) {\n     $234 = 0;\n    } else {\n     $217 = $9;\n     $218 = ((($12)) + 1|0);\n     $219 = ((($218)) + 2|0);\n     $220 = HEAPU8[$219>>0]|(HEAPU8[$219+1>>0]<<8);\n     $221 = $220&65535;\n     $222 = $221 >> 8;\n     $223 = (($217) + ($222))|0;\n     $224 = ($223|0)>=(255);\n     if ($224) {\n      $234 = -1;\n     } else {\n      $225 = $9;\n      $226 = ((($12)) + 1|0);\n      $227 = ((($226)) + 2|0);\n      $228 = HEAPU8[$227>>0]|(HEAPU8[$227+1>>0]<<8);\n      $229 = $228&65535;\n      $230 = $229 >> 8;\n      $231 = (($225) + ($230))|0;\n      $232 = $231&255;\n      $234 = $232;\n     }\n    }\n    $233 = $234&255;\n    $235 = (($208) + ($233))|0;\n    $236 = (__Z7U8_FOLDi($235)|0);\n    $237 = $236&255;\n    $238 = $237&65535;\n    $239 = $238 << 8;\n    $240 = ((($11)) + 2|0);\n    $241 = HEAPU8[$240>>0]|(HEAPU8[$240+1>>0]<<8);\n    $242 = $241&65535;\n    $243 = $242 | $239;\n    $244 = $243&65535;\n    HEAP8[$240>>0]=$244&255;HEAP8[$240+1>>0]=$244>>8;\n   } else {\n    $245 = ((($12)) + 1|0);\n    $246 = ((($245)) + 2|0);\n    $247 = HEAPU8[$246>>0]|(HEAPU8[$246+1>>0]<<8);\n    $248 = $247&65535;\n    $249 = $248 & 65280;\n    $250 = ((($11)) + 2|0);\n    $251 = HEAPU8[$250>>0]|(HEAPU8[$250+1>>0]<<8);\n    $252 = $251&65535;\n    $253 = $252 | $249;\n    $254 = $253&65535;\n    HEAP8[$250>>0]=$254&255;HEAP8[$250+1>>0]=$254>>8;\n   }\n   $255 = $10;\n   $256 = $255 & 32;\n   $257 = ($256|0)!=(0);\n   if (!($257)) {\n    $313 = ((($12)) + 1|0);\n    $314 = ((($313)) + 4|0);\n    $315 = HEAPU8[$314>>0]|(HEAPU8[$314+1>>0]<<8);\n    $316 = $315&65535;\n    $317 = $316 & 65280;\n    $318 = ((($11)) + 4|0);\n    $319 = HEAPU8[$318>>0]|(HEAPU8[$318+1>>0]<<8);\n    $320 = $319&65535;\n    $321 = $320 | $317;\n    $322 = $321&65535;\n    HEAP8[$318>>0]=$322&255;HEAP8[$318+1>>0]=$322>>8;\n    break;\n   }\n   $258 = $5;\n   $259 = ((($12)) + 272|0);\n   $260 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($258,$259)|0);\n   $261 = $260&255;\n   $8 = $261;\n   $262 = $9;\n   $263 = ((($11)) + 2|0);\n   $264 = HEAPU8[$263>>0]|(HEAPU8[$263+1>>0]<<8);\n   $265 = $264&65535;\n   $266 = $265 >> 8;\n   $267 = (($262) + ($266))|0;\n   $268 = ((($12)) + 1|0);\n   $269 = ((($268)) + 2|0);\n   $270 = HEAPU8[$269>>0]|(HEAPU8[$269+1>>0]<<8);\n   $271 = $270&65535;\n   $272 = $271 >> 8;\n   $273 = (($267) - ($272))|0;\n   $274 = (($273|0) / 2)&-1;\n   $9 = $274;\n   $275 = $8;\n   $276 = $275&255;\n   $277 = $9;\n   $278 = ((($12)) + 1|0);\n   $279 = ((($278)) + 4|0);\n   $280 = HEAPU8[$279>>0]|(HEAPU8[$279+1>>0]<<8);\n   $281 = $280&65535;\n   $282 = $281 >> 8;\n   $283 = (($277) + ($282))|0;\n   $284 = ($283|0)<=(0);\n   if ($284) {\n    $302 = 0;\n   } else {\n    $285 = $9;\n    $286 = ((($12)) + 1|0);\n    $287 = ((($286)) + 4|0);\n    $288 = HEAPU8[$287>>0]|(HEAPU8[$287+1>>0]<<8);\n    $289 = $288&65535;\n    $290 = $289 >> 8;\n    $291 = (($285) + ($290))|0;\n    $292 = ($291|0)>=(255);\n    if ($292) {\n     $302 = -1;\n    } else {\n     $293 = $9;\n     $294 = ((($12)) + 1|0);\n     $295 = ((($294)) + 4|0);\n     $296 = HEAPU8[$295>>0]|(HEAPU8[$295+1>>0]<<8);\n     $297 = $296&65535;\n     $298 = $297 >> 8;\n     $299 = (($293) + ($298))|0;\n     $300 = $299&255;\n     $302 = $300;\n    }\n   }\n   $301 = $302&255;\n   $303 = (($276) + ($301))|0;\n   $304 = (__Z7U8_FOLDi($303)|0);\n   $305 = $304&255;\n   $306 = $305&65535;\n   $307 = $306 << 8;\n   $308 = ((($11)) + 4|0);\n   $309 = HEAPU8[$308>>0]|(HEAPU8[$308+1>>0]<<8);\n   $310 = $309&65535;\n   $311 = $310 | $307;\n   $312 = $311&65535;\n   HEAP8[$308>>0]=$312&255;HEAP8[$308+1>>0]=$312>>8;\n  } else {\n   $323 = ((($11)) + 2|0);\n   HEAP8[$323>>0]=$79&255;HEAP8[$323+1>>0]=$79>>8;\n   $324 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8);\n   $325 = ((($11)) + 4|0);\n   HEAP8[$325>>0]=$324&255;HEAP8[$325+1>>0]=$324>>8;\n  }\n } while(0);\n $326 = ((($12)) + 1|0);\n ;HEAP8[$326>>0]=HEAP8[$11>>0]|0;HEAP8[$326+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$326+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$326+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$326+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$326+5>>0]=HEAP8[$11+5>>0]|0;\n $327 = ((($12)) + 1|0);\n $328 = $6;\n __ZN6laszip7formats7packersINS0_3las3rgbEE4packERKS3_Pc($327,$328);\n $329 = $6;\n $330 = ((($329)) + 6|0);\n $3 = $330;\n $331 = $3;\n STACKTOP = sp;return ($331|0);\n}\nfunction __ZN6laszip7formats7packersINS0_3las3rgbEE6unpackEPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $1;\n $3 = $2;\n $4 = (__ZN6laszip7formats7packersItE6unpackEPKc($3)|0);\n $5 = $2;\n $6 = ((($5)) + 2|0);\n $7 = (__ZN6laszip7formats7packersItE6unpackEPKc($6)|0);\n $8 = $2;\n $9 = ((($8)) + 4|0);\n $10 = (__ZN6laszip7formats7packersItE6unpackEPKc($9)|0);\n __ZN6laszip7formats3las3rgbC2Ettt($0,$4,$7,$10);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersINS0_3las3rgbEE4packERKS3_Pc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = HEAPU8[$4>>0]|(HEAPU8[$4+1>>0]<<8);\n $6 = $3;\n __ZN6laszip7formats7packersItE4packEtPc($5,$6);\n $7 = $2;\n $8 = ((($7)) + 2|0);\n $9 = HEAPU8[$8>>0]|(HEAPU8[$8+1>>0]<<8);\n $10 = $3;\n $11 = ((($10)) + 2|0);\n __ZN6laszip7formats7packersItE4packEtPc($9,$11);\n $12 = $2;\n $13 = ((($12)) + 4|0);\n $14 = HEAPU8[$13>>0]|(HEAPU8[$13+1>>0]<<8);\n $15 = $3;\n $16 = ((($15)) + 4|0);\n __ZN6laszip7formats7packersItE4packEtPc($14,$16);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats3las3rgbC2Ettt($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $7 = $3;\n $8 = $4;\n $9 = $5;\n HEAP8[$8>>0]=$9&255;HEAP8[$8+1>>0]=$9>>8;\n $10 = ((($8)) + 2|0);\n $11 = $6;\n HEAP8[$10>>0]=$11&255;HEAP8[$10+1>>0]=$11>>8;\n $12 = ((($8)) + 4|0);\n $13 = $7;\n HEAP8[$12>>0]=$13&255;HEAP8[$12+1>>0]=$13>>8;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 440;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEEC2ERS9_RKSF_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n __ZN6laszip7formats10base_fieldC2Ev($6);\n HEAP32[$6>>2] = (2204);\n $7 = ((($6)) + 4|0);\n $8 = $4;\n HEAP32[$7>>2] = $8;\n $9 = ((($6)) + 8|0);\n $10 = $5;\n __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2ERKS6_($9,$10);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2228);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2ERKS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP8[$4+4>>0]=HEAP8[$5+4>>0]|0;\n $6 = ((($4)) + 8|0);\n $7 = $3;\n $8 = ((($7)) + 8|0);\n __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($6,$8);\n $9 = ((($4)) + 20|0);\n $10 = $3;\n $11 = ((($10)) + 20|0);\n __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($9,$11);\n $12 = ((($4)) + 32|0);\n $13 = $3;\n $14 = ((($13)) + 32|0);\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2ERKS6_($12,$14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2204);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);\n $17 = sp + 36|0;\n $19 = sp;\n $21 = sp + 101|0;\n $27 = sp + 100|0;\n $25 = $0;\n $26 = $1;\n $29 = $25;\n $30 = $26;\n $24 = $30;\n $31 = $24;\n $32 = ((($31)) + 8|0);\n $23 = $32;\n $33 = $23;\n $22 = $33;\n $34 = $22;\n $20 = $34;\n $35 = $20;\n ;HEAP8[$19>>0]=HEAP8[$21>>0]|0;\n $18 = $35;\n $15 = $29;\n $16 = $27;\n $36 = $15;\n $14 = $36;\n HEAP32[$36>>2] = 0;\n $37 = ((($36)) + 4|0);\n HEAP32[$37>>2] = 0;\n $38 = ((($36)) + 8|0);\n HEAP32[$17>>2] = 0;\n $39 = $16;\n $11 = $38;\n $12 = $17;\n $13 = $39;\n $40 = $11;\n $41 = $12;\n $10 = $41;\n $42 = $10;\n $4 = $40;\n $5 = $42;\n $43 = $4;\n $44 = $5;\n $3 = $44;\n HEAP32[$43>>2] = 0;\n $45 = $13;\n $6 = $45;\n $46 = $6;\n $8 = $40;\n $9 = $46;\n $47 = $9;\n $7 = $47;\n $48 = $26;\n $2 = $48;\n $49 = $2;\n $50 = ((($49)) + 4|0);\n $51 = HEAP32[$50>>2]|0;\n $52 = HEAP32[$49>>2]|0;\n $53 = $51;\n $54 = $52;\n $55 = (($53) - ($54))|0;\n $28 = $55;\n $56 = $28;\n $57 = ($56>>>0)>(0);\n if (!($57)) {\n  STACKTOP = sp;return;\n }\n $58 = $28;\n __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($29,$58);\n $59 = $26;\n $60 = HEAP32[$59>>2]|0;\n $61 = $26;\n $62 = ((($61)) + 4|0);\n $63 = HEAP32[$62>>2]|0;\n $64 = $28;\n __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endIPhEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES7_S7_j($29,$60,$63,$64);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2ERKS6_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0);\n $$byval_copy1 = sp + 192|0;\n $$byval_copy = sp + 184|0;\n $28 = sp + 72|0;\n $33 = sp + 202|0;\n $34 = sp + 52|0;\n $36 = sp;\n $38 = sp + 201|0;\n $44 = sp + 200|0;\n $45 = sp + 16|0;\n $46 = sp + 8|0;\n $42 = $0;\n $43 = $1;\n $47 = $42;\n $48 = $43;\n $41 = $48;\n $49 = $41;\n $50 = ((($49)) + 20|0);\n $40 = $50;\n $51 = $40;\n $39 = $51;\n $52 = $39;\n $37 = $52;\n $53 = $37;\n ;HEAP8[$36>>0]=HEAP8[$38>>0]|0;\n $35 = $53;\n $31 = $47;\n $32 = $44;\n $54 = $31;\n $55 = $32;\n $29 = $33;\n $30 = $55;\n $26 = $54;\n $27 = $33;\n $56 = $26;\n HEAP32[$56>>2] = 0;\n $57 = ((($56)) + 4|0);\n HEAP32[$57>>2] = 0;\n $58 = ((($56)) + 8|0);\n HEAP32[$58>>2] = 0;\n $59 = ((($56)) + 12|0);\n HEAP32[$28>>2] = 0;\n $60 = $27;\n $23 = $59;\n $24 = $28;\n $25 = $60;\n $61 = $23;\n $62 = $24;\n $22 = $62;\n $63 = $22;\n $16 = $61;\n $17 = $63;\n $64 = $16;\n $65 = $17;\n $15 = $65;\n HEAP32[$64>>2] = 0;\n $66 = $25;\n $18 = $66;\n $67 = $18;\n $20 = $61;\n $21 = $67;\n $68 = $21;\n $19 = $68;\n $69 = ((($54)) + 16|0);\n HEAP32[$69>>2] = 0;\n $70 = ((($54)) + 20|0);\n HEAP32[$34>>2] = 0;\n $71 = $32;\n $12 = $70;\n $13 = $34;\n $14 = $71;\n $72 = $12;\n $73 = $13;\n $11 = $73;\n $74 = $11;\n $5 = $72;\n $6 = $74;\n $75 = $5;\n $76 = $6;\n $4 = $76;\n $77 = $4;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = $14;\n $7 = $79;\n $80 = $7;\n $9 = $72;\n $10 = $80;\n $81 = $10;\n $8 = $81;\n $82 = $43;\n $2 = $82;\n $83 = $2;\n __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($45,$83);\n $84 = $43;\n $3 = $84;\n $85 = $3;\n __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($46,$85);\n ;HEAP32[$$byval_copy>>2]=HEAP32[$45>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$45+4>>2]|0;\n ;HEAP32[$$byval_copy1>>2]=HEAP32[$46>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$46+4>>2]|0;\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendINS_16__deque_iteratorIS3_PKS3_RS9_PKSA_iLi0EEEEEvT_SF_PNS_9enable_ifIXsr21__is_forward_iteratorISF_EE5valueEvE4typeE($47,$$byval_copy,$$byval_copy1,0);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__213__vector_baseIhNS_9allocatorIhEEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;\n var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;\n var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0;\n var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0;\n var $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $40 = $0;\n $41 = $1;\n $42 = $40;\n $43 = $41;\n $44 = (__ZNKSt3__26vectorIhNS_9allocatorIhEEE8max_sizeEv($42)|0);\n $45 = ($43>>>0)>($44>>>0);\n if ($45) {\n  __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($42);\n  // unreachable;\n } else {\n  $39 = $42;\n  $46 = $39;\n  $47 = ((($46)) + 8|0);\n  $38 = $47;\n  $48 = $38;\n  $37 = $48;\n  $49 = $37;\n  $50 = $41;\n  $7 = $49;\n  $8 = $50;\n  $51 = $7;\n  $52 = $8;\n  $4 = $51;\n  $5 = $52;\n  $6 = 0;\n  $53 = $4;\n  $3 = $53;\n  $54 = $5;\n  $2 = $54;\n  $55 = $2;\n  $56 = (__Znwj($55)|0);\n  $57 = ((($42)) + 4|0);\n  HEAP32[$57>>2] = $56;\n  HEAP32[$42>>2] = $56;\n  $58 = HEAP32[$42>>2]|0;\n  $59 = $41;\n  $60 = (($58) + ($59)|0);\n  $11 = $42;\n  $61 = $11;\n  $62 = ((($61)) + 8|0);\n  $10 = $62;\n  $63 = $10;\n  $9 = $63;\n  $64 = $9;\n  HEAP32[$64>>2] = $60;\n  $35 = $42;\n  $36 = 0;\n  $65 = $35;\n  $34 = $65;\n  $66 = $34;\n  $67 = HEAP32[$66>>2]|0;\n  $33 = $67;\n  $68 = $33;\n  $13 = $65;\n  $69 = $13;\n  $70 = HEAP32[$69>>2]|0;\n  $12 = $70;\n  $71 = $12;\n  $18 = $65;\n  $72 = $18;\n  $17 = $72;\n  $73 = $17;\n  $16 = $73;\n  $74 = $16;\n  $75 = ((($74)) + 8|0);\n  $15 = $75;\n  $76 = $15;\n  $14 = $76;\n  $77 = $14;\n  $78 = HEAP32[$77>>2]|0;\n  $79 = HEAP32[$73>>2]|0;\n  $80 = $78;\n  $81 = $79;\n  $82 = (($80) - ($81))|0;\n  $83 = (($71) + ($82)|0);\n  $20 = $65;\n  $84 = $20;\n  $85 = HEAP32[$84>>2]|0;\n  $19 = $85;\n  $86 = $19;\n  $25 = $65;\n  $87 = $25;\n  $24 = $87;\n  $88 = $24;\n  $23 = $88;\n  $89 = $23;\n  $90 = ((($89)) + 8|0);\n  $22 = $90;\n  $91 = $22;\n  $21 = $91;\n  $92 = $21;\n  $93 = HEAP32[$92>>2]|0;\n  $94 = HEAP32[$88>>2]|0;\n  $95 = $93;\n  $96 = $94;\n  $97 = (($95) - ($96))|0;\n  $98 = (($86) + ($97)|0);\n  $27 = $65;\n  $99 = $27;\n  $100 = HEAP32[$99>>2]|0;\n  $26 = $100;\n  $101 = $26;\n  $102 = $36;\n  $103 = (($101) + ($102)|0);\n  $28 = $65;\n  $29 = $68;\n  $30 = $83;\n  $31 = $98;\n  $32 = $103;\n  STACKTOP = sp;return;\n }\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endIPhEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES7_S7_j($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $21 = sp + 68|0;\n $16 = $0;\n $17 = $1;\n $18 = $2;\n $19 = $3;\n $22 = $16;\n $15 = $22;\n $23 = $15;\n $24 = ((($23)) + 8|0);\n $14 = $24;\n $25 = $14;\n $13 = $25;\n $26 = $13;\n $20 = $26;\n $27 = $19;\n $4 = $21;\n $5 = $22;\n $6 = $27;\n $28 = $20;\n $29 = $17;\n $30 = $18;\n $31 = ((($22)) + 4|0);\n $7 = $28;\n $8 = $29;\n $9 = $30;\n $10 = $31;\n $32 = $9;\n $33 = $8;\n $34 = $32;\n $35 = $33;\n $36 = (($34) - ($35))|0;\n $11 = $36;\n $37 = $11;\n $38 = ($37|0)>(0);\n if (!($38)) {\n  $12 = $21;\n  STACKTOP = sp;return;\n }\n $39 = $10;\n $40 = HEAP32[$39>>2]|0;\n $41 = $8;\n $42 = $11;\n _memcpy(($40|0),($41|0),($42|0))|0;\n $43 = $11;\n $44 = $10;\n $45 = HEAP32[$44>>2]|0;\n $46 = (($45) + ($43)|0);\n HEAP32[$44>>2] = $46;\n $12 = $21;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__213__vector_baseIhNS_9allocatorIhEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $19 = sp;\n $22 = sp + 120|0;\n $31 = $0;\n $32 = $31;\n $33 = HEAP32[$32>>2]|0;\n $34 = ($33|0)!=(0|0);\n if (!($34)) {\n  STACKTOP = sp;return;\n }\n $30 = $32;\n $35 = $30;\n $36 = HEAP32[$35>>2]|0;\n $27 = $35;\n $28 = $36;\n $37 = $27;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $29 = $39;\n while(1) {\n  $40 = $28;\n  $41 = $29;\n  $42 = ($40|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $26 = $37;\n  $43 = $26;\n  $44 = ((($43)) + 8|0);\n  $25 = $44;\n  $45 = $25;\n  $24 = $45;\n  $46 = $24;\n  $47 = $29;\n  $48 = ((($47)) + -1|0);\n  $29 = $48;\n  $23 = $48;\n  $49 = $23;\n  $20 = $46;\n  $21 = $49;\n  $50 = $20;\n  $51 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $50;\n  $18 = $51;\n  $52 = $17;\n  $53 = $18;\n  $15 = $52;\n  $16 = $53;\n }\n $54 = $28;\n $55 = ((($37)) + 4|0);\n HEAP32[$55>>2] = $54;\n $7 = $32;\n $56 = $7;\n $57 = ((($56)) + 8|0);\n $6 = $57;\n $58 = $6;\n $5 = $58;\n $59 = $5;\n $60 = HEAP32[$32>>2]|0;\n $4 = $32;\n $61 = $4;\n $3 = $61;\n $62 = $3;\n $63 = ((($62)) + 8|0);\n $2 = $63;\n $64 = $2;\n $1 = $64;\n $65 = $1;\n $66 = HEAP32[$65>>2]|0;\n $67 = HEAP32[$61>>2]|0;\n $68 = $66;\n $69 = $67;\n $70 = (($68) - ($69))|0;\n $12 = $59;\n $13 = $60;\n $14 = $70;\n $71 = $12;\n $72 = $13;\n $73 = $14;\n $9 = $71;\n $10 = $72;\n $11 = $73;\n $74 = $10;\n $8 = $74;\n $75 = $8;\n __ZdlPv($75);\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__26vectorIhNS_9allocatorIhEEE8max_sizeEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $6 = sp + 8|0;\n $9 = sp + 77|0;\n $12 = sp;\n $14 = sp + 76|0;\n $19 = sp + 16|0;\n $20 = sp + 12|0;\n $18 = $0;\n $21 = $18;\n $17 = $21;\n $22 = $17;\n $23 = ((($22)) + 8|0);\n $16 = $23;\n $24 = $16;\n $15 = $24;\n $25 = $15;\n $13 = $25;\n $26 = $13;\n ;HEAP8[$12>>0]=HEAP8[$14>>0]|0;\n $11 = $26;\n $27 = $11;\n $10 = $27;\n HEAP32[$19>>2] = -1;\n HEAP32[$20>>2] = 2147483647;\n $7 = $19;\n $8 = $20;\n $28 = $7;\n $29 = $8;\n ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n $4 = $28;\n $5 = $29;\n $30 = $5;\n $31 = $4;\n $1 = $6;\n $2 = $30;\n $3 = $31;\n $32 = $2;\n $33 = HEAP32[$32>>2]|0;\n $34 = $3;\n $35 = HEAP32[$34>>2]|0;\n $36 = ($33>>>0)<($35>>>0);\n $37 = $5;\n $38 = $4;\n $39 = $36 ? $37 : $38;\n $40 = HEAP32[$39>>2]|0;\n STACKTOP = sp;return ($40|0);\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendINS_16__deque_iteratorIS3_PKS3_RS9_PKSA_iLi0EEEEEvT_SF_PNS_9enable_ifIXsr21__is_forward_iteratorISF_EE5valueEvE4typeE($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0;\n var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0;\n var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0;\n var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0;\n var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0;\n var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);\n $29 = sp + 40|0;\n $34 = sp + 277|0;\n $47 = sp + 32|0;\n $48 = sp + 24|0;\n $49 = sp + 16|0;\n $50 = sp + 104|0;\n $51 = sp + 96|0;\n $52 = sp + 276|0;\n $53 = sp + 8|0;\n $54 = sp;\n $58 = sp + 72|0;\n $59 = sp + 64|0;\n $62 = sp + 48|0;\n $55 = $0;\n $56 = $3;\n $63 = $55;\n ;HEAP32[$58>>2]=HEAP32[$1>>2]|0;HEAP32[$58+4>>2]=HEAP32[$1+4>>2]|0;\n ;HEAP32[$59>>2]=HEAP32[$2>>2]|0;HEAP32[$59+4>>2]=HEAP32[$2+4>>2]|0;\n ;HEAP8[$53>>0]=HEAP8[$59>>0]|0;HEAP8[$53+1>>0]=HEAP8[$59+1>>0]|0;HEAP8[$53+2>>0]=HEAP8[$59+2>>0]|0;HEAP8[$53+3>>0]=HEAP8[$59+3>>0]|0;HEAP8[$53+4>>0]=HEAP8[$59+4>>0]|0;HEAP8[$53+5>>0]=HEAP8[$59+5>>0]|0;HEAP8[$53+6>>0]=HEAP8[$59+6>>0]|0;HEAP8[$53+7>>0]=HEAP8[$59+7>>0]|0;\n ;HEAP8[$54>>0]=HEAP8[$58>>0]|0;HEAP8[$54+1>>0]=HEAP8[$58+1>>0]|0;HEAP8[$54+2>>0]=HEAP8[$58+2>>0]|0;HEAP8[$54+3>>0]=HEAP8[$58+3>>0]|0;HEAP8[$54+4>>0]=HEAP8[$58+4>>0]|0;HEAP8[$54+5>>0]=HEAP8[$58+5>>0]|0;HEAP8[$54+6>>0]=HEAP8[$58+6>>0]|0;HEAP8[$54+7>>0]=HEAP8[$58+7>>0]|0;\n ;HEAP32[$50>>2]=HEAP32[$54>>2]|0;HEAP32[$50+4>>2]=HEAP32[$54+4>>2]|0;\n ;HEAP32[$51>>2]=HEAP32[$53>>2]|0;HEAP32[$51+4>>2]=HEAP32[$53+4>>2]|0;\n ;HEAP8[$47>>0]=HEAP8[$52>>0]|0;\n ;HEAP8[$48>>0]=HEAP8[$51>>0]|0;HEAP8[$48+1>>0]=HEAP8[$51+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$51+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$51+3>>0]|0;HEAP8[$48+4>>0]=HEAP8[$51+4>>0]|0;HEAP8[$48+5>>0]=HEAP8[$51+5>>0]|0;HEAP8[$48+6>>0]=HEAP8[$51+6>>0]|0;HEAP8[$48+7>>0]=HEAP8[$51+7>>0]|0;\n ;HEAP8[$49>>0]=HEAP8[$50>>0]|0;HEAP8[$49+1>>0]=HEAP8[$50+1>>0]|0;HEAP8[$49+2>>0]=HEAP8[$50+2>>0]|0;HEAP8[$49+3>>0]=HEAP8[$50+3>>0]|0;HEAP8[$49+4>>0]=HEAP8[$50+4>>0]|0;HEAP8[$49+5>>0]=HEAP8[$50+5>>0]|0;HEAP8[$49+6>>0]=HEAP8[$50+6>>0]|0;HEAP8[$49+7>>0]=HEAP8[$50+7>>0]|0;\n $45 = $48;\n $46 = $49;\n $64 = $45;\n $65 = $46;\n $42 = $64;\n $43 = $65;\n $66 = $42;\n $67 = $43;\n $40 = $66;\n $41 = $67;\n $68 = $40;\n $69 = ((($68)) + 4|0);\n $70 = HEAP32[$69>>2]|0;\n $71 = $41;\n $72 = ((($71)) + 4|0);\n $73 = HEAP32[$72>>2]|0;\n $74 = ($70|0)==($73|0);\n $75 = $74 ^ 1;\n if ($75) {\n  $76 = $45;\n  $77 = HEAP32[$76>>2]|0;\n  $78 = $46;\n  $79 = HEAP32[$78>>2]|0;\n  $80 = $77;\n  $81 = $79;\n  $82 = (($80) - ($81))|0;\n  $83 = (($82|0) / 4)&-1;\n  $84 = ($83*93)|0;\n  $85 = $45;\n  $86 = ((($85)) + 4|0);\n  $87 = HEAP32[$86>>2]|0;\n  $88 = $45;\n  $89 = HEAP32[$88>>2]|0;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = $87;\n  $92 = $90;\n  $93 = (($91) - ($92))|0;\n  $94 = (($93|0) / 44)&-1;\n  $95 = (($84) + ($94))|0;\n  $96 = $46;\n  $97 = ((($96)) + 4|0);\n  $98 = HEAP32[$97>>2]|0;\n  $99 = $46;\n  $100 = HEAP32[$99>>2]|0;\n  $101 = HEAP32[$100>>2]|0;\n  $102 = $98;\n  $103 = $101;\n  $104 = (($102) - ($103))|0;\n  $105 = (($104|0) / 44)&-1;\n  $106 = (($95) - ($105))|0;\n  $44 = $106;\n } else {\n  $44 = 0;\n }\n $107 = $44;\n $57 = $107;\n $20 = $63;\n $108 = $20;\n $109 = ((($108)) + 20|0);\n $19 = $109;\n $110 = $19;\n $18 = $110;\n $111 = $18;\n $60 = $111;\n $10 = $63;\n $112 = $10;\n $9 = $112;\n $113 = $9;\n $8 = $113;\n $114 = $8;\n $115 = ((($114)) + 8|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = ((($114)) + 4|0);\n $118 = HEAP32[$117>>2]|0;\n $119 = $116;\n $120 = $118;\n $121 = (($119) - ($120))|0;\n $122 = (($121|0) / 4)&-1;\n $123 = ($122|0)==(0);\n if ($123) {\n  $144 = 0;\n } else {\n  $7 = $113;\n  $124 = $7;\n  $125 = ((($124)) + 8|0);\n  $126 = HEAP32[$125>>2]|0;\n  $127 = ((($124)) + 4|0);\n  $128 = HEAP32[$127>>2]|0;\n  $129 = $126;\n  $130 = $128;\n  $131 = (($129) - ($130))|0;\n  $132 = (($131|0) / 4)&-1;\n  $133 = ($132*93)|0;\n  $134 = (($133) - 1)|0;\n  $144 = $134;\n }\n $135 = ((($112)) + 16|0);\n $136 = HEAP32[$135>>2]|0;\n $6 = $112;\n $137 = $6;\n $138 = ((($137)) + 20|0);\n $5 = $138;\n $139 = $5;\n $4 = $139;\n $140 = $4;\n $141 = HEAP32[$140>>2]|0;\n $142 = (($136) + ($141))|0;\n $143 = (($144) - ($142))|0;\n $61 = $143;\n $145 = $57;\n $146 = $61;\n $147 = ($145>>>0)>($146>>>0);\n if ($147) {\n  $148 = $57;\n  $149 = $61;\n  $150 = (($148) - ($149))|0;\n  __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($63,$150);\n }\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($62,$63);\n while(1) {\n  $13 = $1;\n  $14 = $2;\n  $151 = $13;\n  $152 = $14;\n  $11 = $151;\n  $12 = $152;\n  $153 = $11;\n  $154 = ((($153)) + 4|0);\n  $155 = HEAP32[$154>>2]|0;\n  $156 = $12;\n  $157 = ((($156)) + 4|0);\n  $158 = HEAP32[$157>>2]|0;\n  $159 = ($155|0)==($158|0);\n  $160 = $159 ^ 1;\n  if (!($160)) {\n   break;\n  }\n  $161 = $60;\n  $15 = $62;\n  $162 = $15;\n  $163 = ((($162)) + 4|0);\n  $164 = HEAP32[$163>>2]|0;\n  $16 = $164;\n  $165 = $16;\n  $17 = $1;\n  $166 = $17;\n  $167 = ((($166)) + 4|0);\n  $168 = HEAP32[$167>>2]|0;\n  $31 = $161;\n  $32 = $165;\n  $33 = $168;\n  $169 = $31;\n  $170 = $32;\n  $171 = $33;\n  $30 = $171;\n  $172 = $30;\n  ;HEAP8[$29>>0]=HEAP8[$34>>0]|0;\n  $26 = $169;\n  $27 = $170;\n  $28 = $172;\n  $173 = $26;\n  $174 = $27;\n  $175 = $28;\n  $25 = $175;\n  $176 = $25;\n  $22 = $173;\n  $23 = $174;\n  $24 = $176;\n  $177 = $23;\n  $178 = $24;\n  $21 = $178;\n  $179 = $21;\n  __ZN6laszip6models10arithmeticC2ERKS1_($177,$179);\n  $35 = $62;\n  $180 = $35;\n  $181 = ((($180)) + 4|0);\n  $182 = HEAP32[$181>>2]|0;\n  $183 = ((($182)) + 44|0);\n  HEAP32[$181>>2] = $183;\n  $184 = HEAP32[$180>>2]|0;\n  $185 = HEAP32[$184>>2]|0;\n  $186 = $183;\n  $187 = $185;\n  $188 = (($186) - ($187))|0;\n  $189 = (($188|0) / 44)&-1;\n  $190 = ($189|0)==(93);\n  if ($190) {\n   $191 = HEAP32[$180>>2]|0;\n   $192 = ((($191)) + 4|0);\n   HEAP32[$180>>2] = $192;\n   $193 = HEAP32[$180>>2]|0;\n   $194 = HEAP32[$193>>2]|0;\n   $195 = ((($180)) + 4|0);\n   HEAP32[$195>>2] = $194;\n  }\n  $36 = $1;\n  $196 = $36;\n  $197 = ((($196)) + 4|0);\n  $198 = HEAP32[$197>>2]|0;\n  $199 = ((($198)) + 44|0);\n  HEAP32[$197>>2] = $199;\n  $200 = HEAP32[$196>>2]|0;\n  $201 = HEAP32[$200>>2]|0;\n  $202 = $199;\n  $203 = $201;\n  $204 = (($202) - ($203))|0;\n  $205 = (($204|0) / 44)&-1;\n  $206 = ($205|0)==(93);\n  if ($206) {\n   $207 = HEAP32[$196>>2]|0;\n   $208 = ((($207)) + 4|0);\n   HEAP32[$196>>2] = $208;\n   $209 = HEAP32[$196>>2]|0;\n   $210 = HEAP32[$209>>2]|0;\n   $211 = ((($196)) + 4|0);\n   HEAP32[$211>>2] = $210;\n  }\n  $39 = $63;\n  $212 = $39;\n  $213 = ((($212)) + 20|0);\n  $38 = $213;\n  $214 = $38;\n  $37 = $214;\n  $215 = $37;\n  $216 = HEAP32[$215>>2]|0;\n  $217 = (($216) + 1)|0;\n  HEAP32[$215>>2] = $217;\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $16 = $13;\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5clearEv($16);\n $12 = $16;\n $17 = $12;\n $18 = ((($17)) + 4|0);\n $19 = HEAP32[$18>>2]|0;\n $14 = $19;\n $11 = $16;\n $20 = $11;\n $21 = ((($20)) + 8|0);\n $22 = HEAP32[$21>>2]|0;\n $15 = $22;\n while(1) {\n  $23 = $14;\n  $24 = $15;\n  $25 = ($23|0)!=($24|0);\n  if (!($25)) {\n   break;\n  }\n  $10 = $16;\n  $26 = $10;\n  $27 = ((($26)) + 20|0);\n  $9 = $27;\n  $28 = $9;\n  $8 = $28;\n  $29 = $8;\n  $30 = $14;\n  $31 = HEAP32[$30>>2]|0;\n  $5 = $29;\n  $6 = $31;\n  $7 = 93;\n  $32 = $5;\n  $33 = $6;\n  $34 = $7;\n  $2 = $32;\n  $3 = $33;\n  $4 = $34;\n  $35 = $3;\n  $1 = $35;\n  $36 = $1;\n  __ZdlPv($36);\n  $37 = $14;\n  $38 = ((($37)) + 4|0);\n  $14 = $38;\n }\n __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEED2Ev($16);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $24 = $48;\n  $49 = $24;\n  $50 = ((($41)) + 8|0);\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($51)) + -4|0);\n  HEAP32[$50>>2] = $52;\n  $23 = $52;\n  $53 = $23;\n  $20 = $49;\n  $21 = $53;\n  $54 = $20;\n  $55 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $54;\n  $18 = $55;\n  $56 = $17;\n  $57 = $18;\n  $15 = $56;\n  $16 = $57;\n }\n $58 = HEAP32[$35>>2]|0;\n $59 = ($58|0)!=(0|0);\n if (!($59)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $60 = $14;\n $61 = ((($60)) + 12|0);\n $13 = $61;\n $62 = $13;\n $12 = $62;\n $63 = $12;\n $64 = HEAP32[$35>>2]|0;\n $4 = $35;\n $65 = $4;\n $3 = $65;\n $66 = $3;\n $67 = ((($66)) + 12|0);\n $2 = $67;\n $68 = $2;\n $1 = $68;\n $69 = $1;\n $70 = HEAP32[$69>>2]|0;\n $71 = HEAP32[$65>>2]|0;\n $72 = $70;\n $73 = $71;\n $74 = (($72) - ($73))|0;\n $75 = (($74|0) / 4)&-1;\n $9 = $63;\n $10 = $64;\n $11 = $75;\n $76 = $9;\n $77 = $10;\n $78 = $11;\n $6 = $76;\n $7 = $77;\n $8 = $78;\n $79 = $7;\n $5 = $79;\n $80 = $5;\n __ZdlPv($80);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0;\n var $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0;\n var $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0;\n var $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0;\n var $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0, $1083 = 0;\n var $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0, $1088 = 0, $1089 = 0, $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0, $1100 = 0;\n var $1101 = 0, $1102 = 0, $1103 = 0, $1104 = 0, $1105 = 0, $1106 = 0, $1107 = 0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0, $1119 = 0;\n var $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0, $1123 = 0, $1124 = 0, $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0, $1137 = 0;\n var $1138 = 0, $1139 = 0, $114 = 0, $1140 = 0, $1141 = 0, $1142 = 0, $1143 = 0, $1144 = 0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0, $1155 = 0;\n var $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0, $116 = 0, $1160 = 0, $1161 = 0, $1162 = 0, $1163 = 0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0, $1173 = 0;\n var $1174 = 0, $1175 = 0, $1176 = 0, $1177 = 0, $1178 = 0, $1179 = 0, $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0, $1191 = 0;\n var $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0, $1196 = 0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0, $1209 = 0;\n var $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0, $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0, $1226 = 0, $1227 = 0;\n var $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0, $1231 = 0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0, $1244 = 0, $1245 = 0;\n var $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0, $125 = 0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0;\n var $1264 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0;\n var $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0;\n var $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0;\n var $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0;\n var $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0;\n var $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0;\n var $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0;\n var $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0;\n var $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0;\n var $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0;\n var $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0;\n var $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0;\n var $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0;\n var $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0;\n var $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0;\n var $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0;\n var $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0;\n var $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0;\n var $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0;\n var $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0;\n var $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0;\n var $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0;\n var $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0;\n var $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0;\n var $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0;\n var $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0;\n var $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0;\n var $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0;\n var $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0;\n var $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0;\n var $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0;\n var $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0;\n var $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0;\n var $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0;\n var $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0;\n var $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0;\n var $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0;\n var $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0;\n var $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0;\n var $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0;\n var $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0;\n var $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0;\n var $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0;\n var $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0;\n var $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0;\n var $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0;\n var $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0;\n var $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0;\n var $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 1744|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1744|0);\n $$byval_copy5 = sp + 1724|0;\n $$byval_copy4 = sp + 1720|0;\n $$byval_copy3 = sp + 1716|0;\n $$byval_copy2 = sp + 1712|0;\n $$byval_copy1 = sp + 1708|0;\n $$byval_copy = sp + 1704|0;\n $22 = sp + 80|0;\n $25 = sp + 1738|0;\n $43 = sp + 72|0;\n $46 = sp + 1737|0;\n $52 = sp + 1516|0;\n $58 = sp + 1492|0;\n $64 = sp + 1468|0;\n $76 = sp + 1420|0;\n $102 = sp + 64|0;\n $107 = sp + 1736|0;\n $115 = sp + 1272|0;\n $116 = sp + 1268|0;\n $117 = sp + 1248|0;\n $118 = sp + 1244|0;\n $119 = sp + 1240|0;\n $122 = sp + 56|0;\n $125 = sp + 1735|0;\n $170 = sp + 48|0;\n $173 = sp + 1734|0;\n $179 = sp + 1016|0;\n $185 = sp + 992|0;\n $191 = sp + 968|0;\n $203 = sp + 920|0;\n $229 = sp + 40|0;\n $234 = sp + 1733|0;\n $242 = sp + 772|0;\n $243 = sp + 768|0;\n $244 = sp + 748|0;\n $245 = sp + 744|0;\n $246 = sp + 740|0;\n $249 = sp + 32|0;\n $252 = sp + 1732|0;\n $267 = sp + 24|0;\n $270 = sp + 1731|0;\n $276 = sp + 636|0;\n $282 = sp + 612|0;\n $288 = sp + 588|0;\n $300 = sp + 540|0;\n $326 = sp + 16|0;\n $331 = sp + 1730|0;\n $339 = sp + 392|0;\n $340 = sp + 388|0;\n $341 = sp + 368|0;\n $342 = sp + 364|0;\n $343 = sp + 360|0;\n $346 = sp + 8|0;\n $349 = sp + 1729|0;\n $358 = sp;\n $361 = sp + 1728|0;\n $367 = sp + 280|0;\n $373 = sp + 256|0;\n $379 = sp + 232|0;\n $391 = sp + 184|0;\n $401 = sp + 144|0;\n $402 = sp + 140|0;\n $403 = sp + 136|0;\n $404 = sp + 132|0;\n $405 = sp + 128|0;\n $406 = sp + 124|0;\n $408 = sp + 100|0;\n $409 = sp + 96|0;\n $410 = sp + 92|0;\n $411 = sp + 88|0;\n $398 = $0;\n $399 = $1;\n $413 = $398;\n $397 = $413;\n $414 = $397;\n $415 = ((($414)) + 20|0);\n $396 = $415;\n $416 = $396;\n $395 = $416;\n $417 = $395;\n $400 = $417;\n $418 = $399;\n $394 = $413;\n $419 = $394;\n $420 = ((($419)) + 8|0);\n $421 = HEAP32[$420>>2]|0;\n $422 = ((($419)) + 4|0);\n $423 = HEAP32[$422>>2]|0;\n $424 = ($421|0)==($423|0);\n $425 = $424&1;\n $426 = (($418) + ($425))|0;\n $393 = $426;\n $427 = $393;\n $428 = (($427>>>0) / 93)&-1;\n $429 = $393;\n $430 = (($429>>>0) % 93)&-1;\n $431 = ($430|0)!=(0);\n $432 = $431&1;\n $433 = (($428) + ($432))|0;\n HEAP32[$401>>2] = $433;\n $392 = $413;\n $434 = $392;\n $435 = ((($434)) + 16|0);\n $436 = HEAP32[$435>>2]|0;\n $437 = (($436>>>0) / 93)&-1;\n HEAP32[$402>>2] = $437;\n $359 = $402;\n $360 = $401;\n $438 = $359;\n $439 = $360;\n ;HEAP8[$358>>0]=HEAP8[$361>>0]|0;\n $356 = $438;\n $357 = $439;\n $440 = $357;\n $441 = $356;\n $353 = $358;\n $354 = $440;\n $355 = $441;\n $442 = $354;\n $443 = HEAP32[$442>>2]|0;\n $444 = $355;\n $445 = HEAP32[$444>>2]|0;\n $446 = ($443>>>0)<($445>>>0);\n $447 = $357;\n $448 = $356;\n $449 = $446 ? $447 : $448;\n $450 = HEAP32[$449>>2]|0;\n HEAP32[$402>>2] = $450;\n $451 = HEAP32[$402>>2]|0;\n $452 = HEAP32[$401>>2]|0;\n $453 = (($452) - ($451))|0;\n HEAP32[$401>>2] = $453;\n $454 = HEAP32[$401>>2]|0;\n $455 = ($454|0)==(0);\n if ($455) {\n  $456 = HEAP32[$402>>2]|0;\n  $457 = ($456*93)|0;\n  $458 = ((($413)) + 16|0);\n  $459 = HEAP32[$458>>2]|0;\n  $460 = (($459) - ($457))|0;\n  HEAP32[$458>>2] = $460;\n  while(1) {\n   $461 = HEAP32[$402>>2]|0;\n   $462 = ($461>>>0)>(0);\n   if (!($462)) {\n    break;\n   }\n   $254 = $413;\n   $463 = $254;\n   $464 = ((($463)) + 4|0);\n   $465 = HEAP32[$464>>2]|0;\n   $466 = HEAP32[$465>>2]|0;\n   HEAP32[$403>>2] = $466;\n   $253 = $413;\n   $467 = $253;\n   $468 = ((($467)) + 4|0);\n   $469 = HEAP32[$468>>2]|0;\n   $470 = ((($469)) + 4|0);\n   $250 = $467;\n   $251 = $470;\n   $471 = $250;\n   $472 = $251;\n   ;HEAP8[$249>>0]=HEAP8[$252>>0]|0;\n   $247 = $471;\n   $248 = $472;\n   $473 = $247;\n   $474 = $248;\n   $475 = ((($473)) + 4|0);\n   HEAP32[$475>>2] = $474;\n   $238 = $413;\n   $239 = $403;\n   $476 = $238;\n   $477 = ((($476)) + 8|0);\n   $478 = HEAP32[$477>>2]|0;\n   $237 = $476;\n   $479 = $237;\n   $480 = ((($479)) + 12|0);\n   $236 = $480;\n   $481 = $236;\n   $235 = $481;\n   $482 = $235;\n   $483 = HEAP32[$482>>2]|0;\n   $484 = ($478|0)==($483|0);\n   do {\n    if ($484) {\n     $485 = ((($476)) + 4|0);\n     $486 = HEAP32[$485>>2]|0;\n     $487 = HEAP32[$476>>2]|0;\n     $488 = ($486>>>0)>($487>>>0);\n     if (!($488)) {\n      $206 = $476;\n      $535 = $206;\n      $536 = ((($535)) + 12|0);\n      $205 = $536;\n      $537 = $205;\n      $204 = $537;\n      $538 = $204;\n      $539 = HEAP32[$538>>2]|0;\n      $540 = HEAP32[$476>>2]|0;\n      $541 = $539;\n      $542 = $540;\n      $543 = (($541) - ($542))|0;\n      $544 = (($543|0) / 4)&-1;\n      $545 = $544<<1;\n      HEAP32[$242>>2] = $545;\n      HEAP32[$243>>2] = 1;\n      $171 = $242;\n      $172 = $243;\n      $546 = $171;\n      $547 = $172;\n      ;HEAP8[$170>>0]=HEAP8[$173>>0]|0;\n      $168 = $546;\n      $169 = $547;\n      $548 = $168;\n      $549 = $169;\n      $165 = $170;\n      $166 = $548;\n      $167 = $549;\n      $550 = $166;\n      $551 = HEAP32[$550>>2]|0;\n      $552 = $167;\n      $553 = HEAP32[$552>>2]|0;\n      $554 = ($551>>>0)<($553>>>0);\n      $555 = $169;\n      $556 = $168;\n      $557 = $554 ? $555 : $556;\n      $558 = HEAP32[$557>>2]|0;\n      $241 = $558;\n      $559 = $241;\n      $560 = $241;\n      $561 = (($560>>>0) / 4)&-1;\n      $160 = $476;\n      $562 = $160;\n      $563 = ((($562)) + 12|0);\n      $159 = $563;\n      $564 = $159;\n      $158 = $564;\n      $565 = $158;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($244,$559,$561,$565);\n      $566 = ((($476)) + 4|0);\n      $567 = HEAP32[$566>>2]|0;\n      $161 = $245;\n      $162 = $567;\n      $568 = $161;\n      $569 = $162;\n      HEAP32[$568>>2] = $569;\n      $570 = ((($476)) + 8|0);\n      $571 = HEAP32[$570>>2]|0;\n      $163 = $246;\n      $164 = $571;\n      $572 = $163;\n      $573 = $164;\n      HEAP32[$572>>2] = $573;\n      ;HEAP32[$$byval_copy>>2]=HEAP32[$245>>2]|0;\n      ;HEAP32[$$byval_copy1>>2]=HEAP32[$246>>2]|0;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($244,$$byval_copy,$$byval_copy1);\n      $177 = $476;\n      $178 = $244;\n      $574 = $177;\n      $176 = $574;\n      $575 = $176;\n      $576 = HEAP32[$575>>2]|0;\n      HEAP32[$179>>2] = $576;\n      $577 = $178;\n      $174 = $577;\n      $578 = $174;\n      $579 = HEAP32[$578>>2]|0;\n      $580 = $177;\n      HEAP32[$580>>2] = $579;\n      $175 = $179;\n      $581 = $175;\n      $582 = HEAP32[$581>>2]|0;\n      $583 = $178;\n      HEAP32[$583>>2] = $582;\n      $584 = ((($476)) + 4|0);\n      $585 = ((($244)) + 4|0);\n      $183 = $584;\n      $184 = $585;\n      $586 = $183;\n      $182 = $586;\n      $587 = $182;\n      $588 = HEAP32[$587>>2]|0;\n      HEAP32[$185>>2] = $588;\n      $589 = $184;\n      $180 = $589;\n      $590 = $180;\n      $591 = HEAP32[$590>>2]|0;\n      $592 = $183;\n      HEAP32[$592>>2] = $591;\n      $181 = $185;\n      $593 = $181;\n      $594 = HEAP32[$593>>2]|0;\n      $595 = $184;\n      HEAP32[$595>>2] = $594;\n      $596 = ((($476)) + 8|0);\n      $597 = ((($244)) + 8|0);\n      $189 = $596;\n      $190 = $597;\n      $598 = $189;\n      $188 = $598;\n      $599 = $188;\n      $600 = HEAP32[$599>>2]|0;\n      HEAP32[$191>>2] = $600;\n      $601 = $190;\n      $186 = $601;\n      $602 = $186;\n      $603 = HEAP32[$602>>2]|0;\n      $604 = $189;\n      HEAP32[$604>>2] = $603;\n      $187 = $191;\n      $605 = $187;\n      $606 = HEAP32[$605>>2]|0;\n      $607 = $190;\n      HEAP32[$607>>2] = $606;\n      $194 = $476;\n      $608 = $194;\n      $609 = ((($608)) + 12|0);\n      $193 = $609;\n      $610 = $193;\n      $192 = $610;\n      $611 = $192;\n      $197 = $244;\n      $612 = $197;\n      $613 = ((($612)) + 12|0);\n      $196 = $613;\n      $614 = $196;\n      $195 = $614;\n      $615 = $195;\n      $201 = $611;\n      $202 = $615;\n      $616 = $201;\n      $200 = $616;\n      $617 = $200;\n      $618 = HEAP32[$617>>2]|0;\n      HEAP32[$203>>2] = $618;\n      $619 = $202;\n      $198 = $619;\n      $620 = $198;\n      $621 = HEAP32[$620>>2]|0;\n      $622 = $201;\n      HEAP32[$622>>2] = $621;\n      $199 = $203;\n      $623 = $199;\n      $624 = HEAP32[$623>>2]|0;\n      $625 = $202;\n      HEAP32[$625>>2] = $624;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($244);\n      break;\n     }\n     $489 = ((($476)) + 4|0);\n     $490 = HEAP32[$489>>2]|0;\n     $491 = HEAP32[$476>>2]|0;\n     $492 = $490;\n     $493 = $491;\n     $494 = (($492) - ($493))|0;\n     $495 = (($494|0) / 4)&-1;\n     $240 = $495;\n     $496 = $240;\n     $497 = (($496) + 1)|0;\n     $498 = (($497|0) / 2)&-1;\n     $240 = $498;\n     $499 = ((($476)) + 4|0);\n     $500 = HEAP32[$499>>2]|0;\n     $501 = ((($476)) + 8|0);\n     $502 = HEAP32[$501>>2]|0;\n     $503 = ((($476)) + 4|0);\n     $504 = HEAP32[$503>>2]|0;\n     $505 = $240;\n     $506 = (0 - ($505))|0;\n     $507 = (($504) + ($506<<2)|0);\n     $214 = $500;\n     $215 = $502;\n     $216 = $507;\n     $508 = $214;\n     $213 = $508;\n     $509 = $213;\n     $510 = $215;\n     $207 = $510;\n     $511 = $207;\n     $512 = $216;\n     $208 = $512;\n     $513 = $208;\n     $209 = $509;\n     $210 = $511;\n     $211 = $513;\n     $514 = $210;\n     $515 = $209;\n     $516 = $514;\n     $517 = $515;\n     $518 = (($516) - ($517))|0;\n     $519 = (($518|0) / 4)&-1;\n     $212 = $519;\n     $520 = $212;\n     $521 = ($520>>>0)>(0);\n     if ($521) {\n      $522 = $211;\n      $523 = $209;\n      $524 = $212;\n      $525 = $524<<2;\n      _memmove(($522|0),($523|0),($525|0))|0;\n     }\n     $526 = $211;\n     $527 = $212;\n     $528 = (($526) + ($527<<2)|0);\n     $529 = ((($476)) + 8|0);\n     HEAP32[$529>>2] = $528;\n     $530 = $240;\n     $531 = ((($476)) + 4|0);\n     $532 = HEAP32[$531>>2]|0;\n     $533 = (0 - ($530))|0;\n     $534 = (($532) + ($533<<2)|0);\n     HEAP32[$531>>2] = $534;\n    }\n   } while(0);\n   $219 = $476;\n   $626 = $219;\n   $627 = ((($626)) + 12|0);\n   $218 = $627;\n   $628 = $218;\n   $217 = $628;\n   $629 = $217;\n   $630 = ((($476)) + 8|0);\n   $631 = HEAP32[$630>>2]|0;\n   $220 = $631;\n   $632 = $220;\n   $633 = $239;\n   $231 = $629;\n   $232 = $632;\n   $233 = $633;\n   $634 = $231;\n   $635 = $232;\n   $636 = $233;\n   $230 = $636;\n   $637 = $230;\n   ;HEAP8[$229>>0]=HEAP8[$234>>0]|0;\n   $226 = $634;\n   $227 = $635;\n   $228 = $637;\n   $638 = $226;\n   $639 = $227;\n   $640 = $228;\n   $225 = $640;\n   $641 = $225;\n   $222 = $638;\n   $223 = $639;\n   $224 = $641;\n   $642 = $223;\n   $643 = $224;\n   $221 = $643;\n   $644 = $221;\n   $645 = HEAP32[$644>>2]|0;\n   HEAP32[$642>>2] = $645;\n   $646 = ((($476)) + 8|0);\n   $647 = HEAP32[$646>>2]|0;\n   $648 = ((($647)) + 4|0);\n   HEAP32[$646>>2] = $648;\n   $649 = HEAP32[$402>>2]|0;\n   $650 = (($649) + -1)|0;\n   HEAP32[$402>>2] = $650;\n  }\n  STACKTOP = sp;return;\n }\n $651 = HEAP32[$401>>2]|0;\n $157 = $413;\n $652 = $157;\n $156 = $652;\n $653 = $156;\n $654 = ((($653)) + 12|0);\n $155 = $654;\n $655 = $155;\n $154 = $655;\n $656 = $154;\n $657 = HEAP32[$656>>2]|0;\n $658 = HEAP32[$652>>2]|0;\n $659 = $657;\n $660 = $658;\n $661 = (($659) - ($660))|0;\n $662 = (($661|0) / 4)&-1;\n $153 = $413;\n $663 = $153;\n $664 = ((($663)) + 8|0);\n $665 = HEAP32[$664>>2]|0;\n $666 = ((($663)) + 4|0);\n $667 = HEAP32[$666>>2]|0;\n $668 = $665;\n $669 = $667;\n $670 = (($668) - ($669))|0;\n $671 = (($670|0) / 4)&-1;\n $672 = (($662) - ($671))|0;\n $673 = ($651>>>0)<=($672>>>0);\n if (!($673)) {\n  $935 = HEAP32[$402>>2]|0;\n  $936 = ($935*93)|0;\n  $407 = $936;\n  $30 = $413;\n  $937 = $30;\n  $29 = $937;\n  $938 = $29;\n  $939 = ((($938)) + 12|0);\n  $28 = $939;\n  $940 = $28;\n  $27 = $940;\n  $941 = $27;\n  $942 = HEAP32[$941>>2]|0;\n  $943 = HEAP32[$937>>2]|0;\n  $944 = $942;\n  $945 = $943;\n  $946 = (($944) - ($945))|0;\n  $947 = (($946|0) / 4)&-1;\n  $948 = $947<<1;\n  HEAP32[$409>>2] = $948;\n  $949 = HEAP32[$401>>2]|0;\n  $26 = $413;\n  $950 = $26;\n  $951 = ((($950)) + 8|0);\n  $952 = HEAP32[$951>>2]|0;\n  $953 = ((($950)) + 4|0);\n  $954 = HEAP32[$953>>2]|0;\n  $955 = $952;\n  $956 = $954;\n  $957 = (($955) - ($956))|0;\n  $958 = (($957|0) / 4)&-1;\n  $959 = (($949) + ($958))|0;\n  HEAP32[$410>>2] = $959;\n  $23 = $409;\n  $24 = $410;\n  $960 = $23;\n  $961 = $24;\n  ;HEAP8[$22>>0]=HEAP8[$25>>0]|0;\n  $20 = $960;\n  $21 = $961;\n  $962 = $20;\n  $963 = $21;\n  $17 = $22;\n  $18 = $962;\n  $19 = $963;\n  $964 = $18;\n  $965 = HEAP32[$964>>2]|0;\n  $966 = $19;\n  $967 = HEAP32[$966>>2]|0;\n  $968 = ($965>>>0)<($967>>>0);\n  $969 = $21;\n  $970 = $20;\n  $971 = $968 ? $969 : $970;\n  $972 = HEAP32[$971>>2]|0;\n  $16 = $413;\n  $973 = $16;\n  $974 = ((($973)) + 8|0);\n  $975 = HEAP32[$974>>2]|0;\n  $976 = ((($973)) + 4|0);\n  $977 = HEAP32[$976>>2]|0;\n  $978 = $975;\n  $979 = $977;\n  $980 = (($978) - ($979))|0;\n  $981 = (($980|0) / 4)&-1;\n  $982 = HEAP32[$402>>2]|0;\n  $983 = (($981) - ($982))|0;\n  $15 = $413;\n  $984 = $15;\n  $985 = ((($984)) + 12|0);\n  $14 = $985;\n  $986 = $14;\n  $13 = $986;\n  $987 = $13;\n  __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($408,$972,$983,$987);\n  while(1) {\n   $988 = HEAP32[$401>>2]|0;\n   $989 = ($988>>>0)>(0);\n   if (!($989)) {\n    break;\n   }\n   $990 = $400;\n   $11 = $990;\n   $12 = 93;\n   $991 = $11;\n   $992 = $12;\n   $8 = $991;\n   $9 = $992;\n   $10 = 0;\n   $993 = $8;\n   $994 = $9;\n   $7 = $993;\n   $995 = ($994>>>0)>(97612893);\n   if ($995) {\n    label = 35;\n    break;\n   }\n   $1000 = $9;\n   $1001 = ($1000*44)|0;\n   $6 = $1001;\n   $1002 = $6;\n   $1003 = (__Znwj($1002)|0);\n   HEAP32[$411>>2] = $1003;\n   __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE9push_backEOS4_($408,$411);\n   $1004 = HEAP32[$401>>2]|0;\n   $1005 = (($1004) + -1)|0;\n   HEAP32[$401>>2] = $1005;\n  }\n  if ((label|0) == 35) {\n   $5 = 4287;\n   $996 = (___cxa_allocate_exception(8)|0);\n   $997 = $5;\n   $3 = $996;\n   $4 = $997;\n   $998 = $3;\n   $999 = $4;\n   __ZNSt11logic_errorC2EPKc($998,$999);\n   HEAP32[$998>>2] = (3660);\n   ___cxa_throw(($996|0),(1384|0),(220|0));\n   // unreachable;\n  }\n  while(1) {\n   $1006 = HEAP32[$402>>2]|0;\n   $1007 = ($1006>>>0)>(0);\n   if (!($1007)) {\n    break;\n   }\n   $2 = $413;\n   $1008 = $2;\n   $1009 = ((($1008)) + 4|0);\n   $1010 = HEAP32[$1009>>2]|0;\n   $335 = $408;\n   $336 = $1010;\n   $1011 = $335;\n   $1012 = ((($1011)) + 8|0);\n   $1013 = HEAP32[$1012>>2]|0;\n   $334 = $1011;\n   $1014 = $334;\n   $1015 = ((($1014)) + 12|0);\n   $333 = $1015;\n   $1016 = $333;\n   $332 = $1016;\n   $1017 = $332;\n   $1018 = HEAP32[$1017>>2]|0;\n   $1019 = ($1013|0)==($1018|0);\n   do {\n    if ($1019) {\n     $1020 = ((($1011)) + 4|0);\n     $1021 = HEAP32[$1020>>2]|0;\n     $1022 = HEAP32[$1011>>2]|0;\n     $1023 = ($1021>>>0)>($1022>>>0);\n     if (!($1023)) {\n      $303 = $1011;\n      $1070 = $303;\n      $1071 = ((($1070)) + 12|0);\n      $302 = $1071;\n      $1072 = $302;\n      $301 = $1072;\n      $1073 = $301;\n      $1074 = HEAP32[$1073>>2]|0;\n      $1075 = HEAP32[$1011>>2]|0;\n      $1076 = $1074;\n      $1077 = $1075;\n      $1078 = (($1076) - ($1077))|0;\n      $1079 = (($1078|0) / 4)&-1;\n      $1080 = $1079<<1;\n      HEAP32[$339>>2] = $1080;\n      HEAP32[$340>>2] = 1;\n      $268 = $339;\n      $269 = $340;\n      $1081 = $268;\n      $1082 = $269;\n      ;HEAP8[$267>>0]=HEAP8[$270>>0]|0;\n      $265 = $1081;\n      $266 = $1082;\n      $1083 = $265;\n      $1084 = $266;\n      $262 = $267;\n      $263 = $1083;\n      $264 = $1084;\n      $1085 = $263;\n      $1086 = HEAP32[$1085>>2]|0;\n      $1087 = $264;\n      $1088 = HEAP32[$1087>>2]|0;\n      $1089 = ($1086>>>0)<($1088>>>0);\n      $1090 = $266;\n      $1091 = $265;\n      $1092 = $1089 ? $1090 : $1091;\n      $1093 = HEAP32[$1092>>2]|0;\n      $338 = $1093;\n      $1094 = $338;\n      $1095 = $338;\n      $1096 = (($1095>>>0) / 4)&-1;\n      $257 = $1011;\n      $1097 = $257;\n      $1098 = ((($1097)) + 12|0);\n      $256 = $1098;\n      $1099 = $256;\n      $1100 = ((($1099)) + 4|0);\n      $255 = $1100;\n      $1101 = $255;\n      $1102 = HEAP32[$1101>>2]|0;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($341,$1094,$1096,$1102);\n      $1103 = ((($1011)) + 4|0);\n      $1104 = HEAP32[$1103>>2]|0;\n      $258 = $342;\n      $259 = $1104;\n      $1105 = $258;\n      $1106 = $259;\n      HEAP32[$1105>>2] = $1106;\n      $1107 = ((($1011)) + 8|0);\n      $1108 = HEAP32[$1107>>2]|0;\n      $260 = $343;\n      $261 = $1108;\n      $1109 = $260;\n      $1110 = $261;\n      HEAP32[$1109>>2] = $1110;\n      ;HEAP32[$$byval_copy4>>2]=HEAP32[$342>>2]|0;\n      ;HEAP32[$$byval_copy5>>2]=HEAP32[$343>>2]|0;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($341,$$byval_copy4,$$byval_copy5);\n      $274 = $1011;\n      $275 = $341;\n      $1111 = $274;\n      $273 = $1111;\n      $1112 = $273;\n      $1113 = HEAP32[$1112>>2]|0;\n      HEAP32[$276>>2] = $1113;\n      $1114 = $275;\n      $271 = $1114;\n      $1115 = $271;\n      $1116 = HEAP32[$1115>>2]|0;\n      $1117 = $274;\n      HEAP32[$1117>>2] = $1116;\n      $272 = $276;\n      $1118 = $272;\n      $1119 = HEAP32[$1118>>2]|0;\n      $1120 = $275;\n      HEAP32[$1120>>2] = $1119;\n      $1121 = ((($1011)) + 4|0);\n      $1122 = ((($341)) + 4|0);\n      $280 = $1121;\n      $281 = $1122;\n      $1123 = $280;\n      $279 = $1123;\n      $1124 = $279;\n      $1125 = HEAP32[$1124>>2]|0;\n      HEAP32[$282>>2] = $1125;\n      $1126 = $281;\n      $277 = $1126;\n      $1127 = $277;\n      $1128 = HEAP32[$1127>>2]|0;\n      $1129 = $280;\n      HEAP32[$1129>>2] = $1128;\n      $278 = $282;\n      $1130 = $278;\n      $1131 = HEAP32[$1130>>2]|0;\n      $1132 = $281;\n      HEAP32[$1132>>2] = $1131;\n      $1133 = ((($1011)) + 8|0);\n      $1134 = ((($341)) + 8|0);\n      $286 = $1133;\n      $287 = $1134;\n      $1135 = $286;\n      $285 = $1135;\n      $1136 = $285;\n      $1137 = HEAP32[$1136>>2]|0;\n      HEAP32[$288>>2] = $1137;\n      $1138 = $287;\n      $283 = $1138;\n      $1139 = $283;\n      $1140 = HEAP32[$1139>>2]|0;\n      $1141 = $286;\n      HEAP32[$1141>>2] = $1140;\n      $284 = $288;\n      $1142 = $284;\n      $1143 = HEAP32[$1142>>2]|0;\n      $1144 = $287;\n      HEAP32[$1144>>2] = $1143;\n      $291 = $1011;\n      $1145 = $291;\n      $1146 = ((($1145)) + 12|0);\n      $290 = $1146;\n      $1147 = $290;\n      $289 = $1147;\n      $1148 = $289;\n      $294 = $341;\n      $1149 = $294;\n      $1150 = ((($1149)) + 12|0);\n      $293 = $1150;\n      $1151 = $293;\n      $292 = $1151;\n      $1152 = $292;\n      $298 = $1148;\n      $299 = $1152;\n      $1153 = $298;\n      $297 = $1153;\n      $1154 = $297;\n      $1155 = HEAP32[$1154>>2]|0;\n      HEAP32[$300>>2] = $1155;\n      $1156 = $299;\n      $295 = $1156;\n      $1157 = $295;\n      $1158 = HEAP32[$1157>>2]|0;\n      $1159 = $298;\n      HEAP32[$1159>>2] = $1158;\n      $296 = $300;\n      $1160 = $296;\n      $1161 = HEAP32[$1160>>2]|0;\n      $1162 = $299;\n      HEAP32[$1162>>2] = $1161;\n      __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($341);\n      break;\n     }\n     $1024 = ((($1011)) + 4|0);\n     $1025 = HEAP32[$1024>>2]|0;\n     $1026 = HEAP32[$1011>>2]|0;\n     $1027 = $1025;\n     $1028 = $1026;\n     $1029 = (($1027) - ($1028))|0;\n     $1030 = (($1029|0) / 4)&-1;\n     $337 = $1030;\n     $1031 = $337;\n     $1032 = (($1031) + 1)|0;\n     $1033 = (($1032|0) / 2)&-1;\n     $337 = $1033;\n     $1034 = ((($1011)) + 4|0);\n     $1035 = HEAP32[$1034>>2]|0;\n     $1036 = ((($1011)) + 8|0);\n     $1037 = HEAP32[$1036>>2]|0;\n     $1038 = ((($1011)) + 4|0);\n     $1039 = HEAP32[$1038>>2]|0;\n     $1040 = $337;\n     $1041 = (0 - ($1040))|0;\n     $1042 = (($1039) + ($1041<<2)|0);\n     $311 = $1035;\n     $312 = $1037;\n     $313 = $1042;\n     $1043 = $311;\n     $310 = $1043;\n     $1044 = $310;\n     $1045 = $312;\n     $304 = $1045;\n     $1046 = $304;\n     $1047 = $313;\n     $305 = $1047;\n     $1048 = $305;\n     $306 = $1044;\n     $307 = $1046;\n     $308 = $1048;\n     $1049 = $307;\n     $1050 = $306;\n     $1051 = $1049;\n     $1052 = $1050;\n     $1053 = (($1051) - ($1052))|0;\n     $1054 = (($1053|0) / 4)&-1;\n     $309 = $1054;\n     $1055 = $309;\n     $1056 = ($1055>>>0)>(0);\n     if ($1056) {\n      $1057 = $308;\n      $1058 = $306;\n      $1059 = $309;\n      $1060 = $1059<<2;\n      _memmove(($1057|0),($1058|0),($1060|0))|0;\n     }\n     $1061 = $308;\n     $1062 = $309;\n     $1063 = (($1061) + ($1062<<2)|0);\n     $1064 = ((($1011)) + 8|0);\n     HEAP32[$1064>>2] = $1063;\n     $1065 = $337;\n     $1066 = ((($1011)) + 4|0);\n     $1067 = HEAP32[$1066>>2]|0;\n     $1068 = (0 - ($1065))|0;\n     $1069 = (($1067) + ($1068<<2)|0);\n     HEAP32[$1066>>2] = $1069;\n    }\n   } while(0);\n   $316 = $1011;\n   $1163 = $316;\n   $1164 = ((($1163)) + 12|0);\n   $315 = $1164;\n   $1165 = $315;\n   $1166 = ((($1165)) + 4|0);\n   $314 = $1166;\n   $1167 = $314;\n   $1168 = HEAP32[$1167>>2]|0;\n   $1169 = ((($1011)) + 8|0);\n   $1170 = HEAP32[$1169>>2]|0;\n   $317 = $1170;\n   $1171 = $317;\n   $1172 = $336;\n   $328 = $1168;\n   $329 = $1171;\n   $330 = $1172;\n   $1173 = $328;\n   $1174 = $329;\n   $1175 = $330;\n   $327 = $1175;\n   $1176 = $327;\n   ;HEAP8[$326>>0]=HEAP8[$331>>0]|0;\n   $323 = $1173;\n   $324 = $1174;\n   $325 = $1176;\n   $1177 = $323;\n   $1178 = $324;\n   $1179 = $325;\n   $322 = $1179;\n   $1180 = $322;\n   $319 = $1177;\n   $320 = $1178;\n   $321 = $1180;\n   $1181 = $320;\n   $1182 = $321;\n   $318 = $1182;\n   $1183 = $318;\n   $1184 = HEAP32[$1183>>2]|0;\n   HEAP32[$1181>>2] = $1184;\n   $1185 = ((($1011)) + 8|0);\n   $1186 = HEAP32[$1185>>2]|0;\n   $1187 = ((($1186)) + 4|0);\n   HEAP32[$1185>>2] = $1187;\n   $350 = $413;\n   $1188 = $350;\n   $1189 = ((($1188)) + 4|0);\n   $1190 = HEAP32[$1189>>2]|0;\n   $1191 = ((($1190)) + 4|0);\n   $347 = $1188;\n   $348 = $1191;\n   $1192 = $347;\n   $1193 = $348;\n   ;HEAP8[$346>>0]=HEAP8[$349>>0]|0;\n   $344 = $1192;\n   $345 = $1193;\n   $1194 = $344;\n   $1195 = $345;\n   $1196 = ((($1194)) + 4|0);\n   HEAP32[$1196>>2] = $1195;\n   $1197 = HEAP32[$402>>2]|0;\n   $1198 = (($1197) + -1)|0;\n   HEAP32[$402>>2] = $1198;\n  }\n  $351 = $413;\n  $1199 = $351;\n  $1200 = ((($1199)) + 8|0);\n  $1201 = HEAP32[$1200>>2]|0;\n  $412 = $1201;\n  while(1) {\n   $1202 = $412;\n   $352 = $413;\n   $1203 = $352;\n   $1204 = ((($1203)) + 4|0);\n   $1205 = HEAP32[$1204>>2]|0;\n   $1206 = ($1202|0)!=($1205|0);\n   if (!($1206)) {\n    break;\n   }\n   $1207 = $412;\n   $1208 = ((($1207)) + -4|0);\n   $412 = $1208;\n   __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE10push_frontERKS4_($408,$1208);\n  }\n  $365 = $413;\n  $366 = $408;\n  $1209 = $365;\n  $364 = $1209;\n  $1210 = $364;\n  $1211 = HEAP32[$1210>>2]|0;\n  HEAP32[$367>>2] = $1211;\n  $1212 = $366;\n  $362 = $1212;\n  $1213 = $362;\n  $1214 = HEAP32[$1213>>2]|0;\n  $1215 = $365;\n  HEAP32[$1215>>2] = $1214;\n  $363 = $367;\n  $1216 = $363;\n  $1217 = HEAP32[$1216>>2]|0;\n  $1218 = $366;\n  HEAP32[$1218>>2] = $1217;\n  $1219 = ((($413)) + 4|0);\n  $1220 = ((($408)) + 4|0);\n  $371 = $1219;\n  $372 = $1220;\n  $1221 = $371;\n  $370 = $1221;\n  $1222 = $370;\n  $1223 = HEAP32[$1222>>2]|0;\n  HEAP32[$373>>2] = $1223;\n  $1224 = $372;\n  $368 = $1224;\n  $1225 = $368;\n  $1226 = HEAP32[$1225>>2]|0;\n  $1227 = $371;\n  HEAP32[$1227>>2] = $1226;\n  $369 = $373;\n  $1228 = $369;\n  $1229 = HEAP32[$1228>>2]|0;\n  $1230 = $372;\n  HEAP32[$1230>>2] = $1229;\n  $1231 = ((($413)) + 8|0);\n  $1232 = ((($408)) + 8|0);\n  $377 = $1231;\n  $378 = $1232;\n  $1233 = $377;\n  $376 = $1233;\n  $1234 = $376;\n  $1235 = HEAP32[$1234>>2]|0;\n  HEAP32[$379>>2] = $1235;\n  $1236 = $378;\n  $374 = $1236;\n  $1237 = $374;\n  $1238 = HEAP32[$1237>>2]|0;\n  $1239 = $377;\n  HEAP32[$1239>>2] = $1238;\n  $375 = $379;\n  $1240 = $375;\n  $1241 = HEAP32[$1240>>2]|0;\n  $1242 = $378;\n  HEAP32[$1242>>2] = $1241;\n  $382 = $413;\n  $1243 = $382;\n  $1244 = ((($1243)) + 12|0);\n  $381 = $1244;\n  $1245 = $381;\n  $380 = $1245;\n  $1246 = $380;\n  $385 = $408;\n  $1247 = $385;\n  $1248 = ((($1247)) + 12|0);\n  $384 = $1248;\n  $1249 = $384;\n  $383 = $1249;\n  $1250 = $383;\n  $389 = $1246;\n  $390 = $1250;\n  $1251 = $389;\n  $388 = $1251;\n  $1252 = $388;\n  $1253 = HEAP32[$1252>>2]|0;\n  HEAP32[$391>>2] = $1253;\n  $1254 = $390;\n  $386 = $1254;\n  $1255 = $386;\n  $1256 = HEAP32[$1255>>2]|0;\n  $1257 = $389;\n  HEAP32[$1257>>2] = $1256;\n  $387 = $391;\n  $1258 = $387;\n  $1259 = HEAP32[$1258>>2]|0;\n  $1260 = $390;\n  HEAP32[$1260>>2] = $1259;\n  $1261 = $407;\n  $1262 = ((($413)) + 16|0);\n  $1263 = HEAP32[$1262>>2]|0;\n  $1264 = (($1263) - ($1261))|0;\n  HEAP32[$1262>>2] = $1264;\n  __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($408);\n  STACKTOP = sp;return;\n }\n while(1) {\n  $674 = HEAP32[$401>>2]|0;\n  $675 = ($674>>>0)>(0);\n  if (!($675)) {\n   break;\n  }\n  $152 = $413;\n  $676 = $152;\n  $151 = $676;\n  $677 = $151;\n  $678 = ((($677)) + 12|0);\n  $150 = $678;\n  $679 = $150;\n  $149 = $679;\n  $680 = $149;\n  $681 = HEAP32[$680>>2]|0;\n  $682 = ((($676)) + 8|0);\n  $683 = HEAP32[$682>>2]|0;\n  $684 = $681;\n  $685 = $683;\n  $686 = (($684) - ($685))|0;\n  $687 = (($686|0) / 4)&-1;\n  $688 = ($687|0)==(0);\n  if ($688) {\n   break;\n  }\n  $689 = $400;\n  $147 = $689;\n  $148 = 93;\n  $690 = $147;\n  $691 = $148;\n  $144 = $690;\n  $145 = $691;\n  $146 = 0;\n  $692 = $144;\n  $693 = $145;\n  $143 = $692;\n  $694 = ($693>>>0)>(97612893);\n  if ($694) {\n   label = 16;\n   break;\n  }\n  $699 = $145;\n  $700 = ($699*44)|0;\n  $142 = $700;\n  $701 = $142;\n  $702 = (__Znwj($701)|0);\n  HEAP32[$404>>2] = $702;\n  __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE9push_backEOS4_($413,$404);\n  $703 = HEAP32[$401>>2]|0;\n  $704 = (($703) + -1)|0;\n  HEAP32[$401>>2] = $704;\n }\n if ((label|0) == 16) {\n  $141 = 4287;\n  $695 = (___cxa_allocate_exception(8)|0);\n  $696 = $141;\n  $139 = $695;\n  $140 = $696;\n  $697 = $139;\n  $698 = $140;\n  __ZNSt11logic_errorC2EPKc($697,$698);\n  HEAP32[$697>>2] = (3660);\n  ___cxa_throw(($695|0),(1384|0),(220|0));\n  // unreachable;\n }\n while(1) {\n  $705 = HEAP32[$401>>2]|0;\n  $706 = ($705>>>0)>(0);\n  if (!($706)) {\n   break;\n  }\n  $707 = $400;\n  $137 = $707;\n  $138 = 93;\n  $708 = $137;\n  $709 = $138;\n  $134 = $708;\n  $135 = $709;\n  $136 = 0;\n  $710 = $134;\n  $711 = $135;\n  $133 = $710;\n  $712 = ($711>>>0)>(97612893);\n  if ($712) {\n   label = 21;\n   break;\n  }\n  $717 = $135;\n  $718 = ($717*44)|0;\n  $132 = $718;\n  $719 = $132;\n  $720 = (__Znwj($719)|0);\n  HEAP32[$405>>2] = $720;\n  __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE10push_frontEOS4_($413,$405);\n  $721 = HEAP32[$401>>2]|0;\n  $722 = (($721) + -1)|0;\n  HEAP32[$401>>2] = $722;\n  $723 = HEAP32[$402>>2]|0;\n  $724 = (($723) + 1)|0;\n  HEAP32[$402>>2] = $724;\n  $128 = $413;\n  $725 = $128;\n  $726 = ((($725)) + 8|0);\n  $727 = HEAP32[$726>>2]|0;\n  $728 = ((($725)) + 4|0);\n  $729 = HEAP32[$728>>2]|0;\n  $730 = $727;\n  $731 = $729;\n  $732 = (($730) - ($731))|0;\n  $733 = (($732|0) / 4)&-1;\n  $734 = ($733|0)==(1);\n  $735 = $734&1;\n  $736 = (93 - ($735))|0;\n  $737 = ((($413)) + 16|0);\n  $738 = HEAP32[$737>>2]|0;\n  $739 = (($738) + ($736))|0;\n  HEAP32[$737>>2] = $739;\n }\n if ((label|0) == 21) {\n  $131 = 4287;\n  $713 = (___cxa_allocate_exception(8)|0);\n  $714 = $131;\n  $129 = $713;\n  $130 = $714;\n  $715 = $129;\n  $716 = $130;\n  __ZNSt11logic_errorC2EPKc($715,$716);\n  HEAP32[$715>>2] = (3660);\n  ___cxa_throw(($713|0),(1384|0),(220|0));\n  // unreachable;\n }\n $740 = HEAP32[$402>>2]|0;\n $741 = ($740*93)|0;\n $742 = ((($413)) + 16|0);\n $743 = HEAP32[$742>>2]|0;\n $744 = (($743) - ($741))|0;\n HEAP32[$742>>2] = $744;\n while(1) {\n  $745 = HEAP32[$402>>2]|0;\n  $746 = ($745>>>0)>(0);\n  if (!($746)) {\n   break;\n  }\n  $127 = $413;\n  $747 = $127;\n  $748 = ((($747)) + 4|0);\n  $749 = HEAP32[$748>>2]|0;\n  $750 = HEAP32[$749>>2]|0;\n  HEAP32[$406>>2] = $750;\n  $126 = $413;\n  $751 = $126;\n  $752 = ((($751)) + 4|0);\n  $753 = HEAP32[$752>>2]|0;\n  $754 = ((($753)) + 4|0);\n  $123 = $751;\n  $124 = $754;\n  $755 = $123;\n  $756 = $124;\n  ;HEAP8[$122>>0]=HEAP8[$125>>0]|0;\n  $120 = $755;\n  $121 = $756;\n  $757 = $120;\n  $758 = $121;\n  $759 = ((($757)) + 4|0);\n  HEAP32[$759>>2] = $758;\n  $111 = $413;\n  $112 = $406;\n  $760 = $111;\n  $761 = ((($760)) + 8|0);\n  $762 = HEAP32[$761>>2]|0;\n  $110 = $760;\n  $763 = $110;\n  $764 = ((($763)) + 12|0);\n  $109 = $764;\n  $765 = $109;\n  $108 = $765;\n  $766 = $108;\n  $767 = HEAP32[$766>>2]|0;\n  $768 = ($762|0)==($767|0);\n  do {\n   if ($768) {\n    $769 = ((($760)) + 4|0);\n    $770 = HEAP32[$769>>2]|0;\n    $771 = HEAP32[$760>>2]|0;\n    $772 = ($770>>>0)>($771>>>0);\n    if (!($772)) {\n     $79 = $760;\n     $819 = $79;\n     $820 = ((($819)) + 12|0);\n     $78 = $820;\n     $821 = $78;\n     $77 = $821;\n     $822 = $77;\n     $823 = HEAP32[$822>>2]|0;\n     $824 = HEAP32[$760>>2]|0;\n     $825 = $823;\n     $826 = $824;\n     $827 = (($825) - ($826))|0;\n     $828 = (($827|0) / 4)&-1;\n     $829 = $828<<1;\n     HEAP32[$115>>2] = $829;\n     HEAP32[$116>>2] = 1;\n     $44 = $115;\n     $45 = $116;\n     $830 = $44;\n     $831 = $45;\n     ;HEAP8[$43>>0]=HEAP8[$46>>0]|0;\n     $41 = $830;\n     $42 = $831;\n     $832 = $41;\n     $833 = $42;\n     $38 = $43;\n     $39 = $832;\n     $40 = $833;\n     $834 = $39;\n     $835 = HEAP32[$834>>2]|0;\n     $836 = $40;\n     $837 = HEAP32[$836>>2]|0;\n     $838 = ($835>>>0)<($837>>>0);\n     $839 = $42;\n     $840 = $41;\n     $841 = $838 ? $839 : $840;\n     $842 = HEAP32[$841>>2]|0;\n     $114 = $842;\n     $843 = $114;\n     $844 = $114;\n     $845 = (($844>>>0) / 4)&-1;\n     $33 = $760;\n     $846 = $33;\n     $847 = ((($846)) + 12|0);\n     $32 = $847;\n     $848 = $32;\n     $31 = $848;\n     $849 = $31;\n     __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($117,$843,$845,$849);\n     $850 = ((($760)) + 4|0);\n     $851 = HEAP32[$850>>2]|0;\n     $34 = $118;\n     $35 = $851;\n     $852 = $34;\n     $853 = $35;\n     HEAP32[$852>>2] = $853;\n     $854 = ((($760)) + 8|0);\n     $855 = HEAP32[$854>>2]|0;\n     $36 = $119;\n     $37 = $855;\n     $856 = $36;\n     $857 = $37;\n     HEAP32[$856>>2] = $857;\n     ;HEAP32[$$byval_copy2>>2]=HEAP32[$118>>2]|0;\n     ;HEAP32[$$byval_copy3>>2]=HEAP32[$119>>2]|0;\n     __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($117,$$byval_copy2,$$byval_copy3);\n     $50 = $760;\n     $51 = $117;\n     $858 = $50;\n     $49 = $858;\n     $859 = $49;\n     $860 = HEAP32[$859>>2]|0;\n     HEAP32[$52>>2] = $860;\n     $861 = $51;\n     $47 = $861;\n     $862 = $47;\n     $863 = HEAP32[$862>>2]|0;\n     $864 = $50;\n     HEAP32[$864>>2] = $863;\n     $48 = $52;\n     $865 = $48;\n     $866 = HEAP32[$865>>2]|0;\n     $867 = $51;\n     HEAP32[$867>>2] = $866;\n     $868 = ((($760)) + 4|0);\n     $869 = ((($117)) + 4|0);\n     $56 = $868;\n     $57 = $869;\n     $870 = $56;\n     $55 = $870;\n     $871 = $55;\n     $872 = HEAP32[$871>>2]|0;\n     HEAP32[$58>>2] = $872;\n     $873 = $57;\n     $53 = $873;\n     $874 = $53;\n     $875 = HEAP32[$874>>2]|0;\n     $876 = $56;\n     HEAP32[$876>>2] = $875;\n     $54 = $58;\n     $877 = $54;\n     $878 = HEAP32[$877>>2]|0;\n     $879 = $57;\n     HEAP32[$879>>2] = $878;\n     $880 = ((($760)) + 8|0);\n     $881 = ((($117)) + 8|0);\n     $62 = $880;\n     $63 = $881;\n     $882 = $62;\n     $61 = $882;\n     $883 = $61;\n     $884 = HEAP32[$883>>2]|0;\n     HEAP32[$64>>2] = $884;\n     $885 = $63;\n     $59 = $885;\n     $886 = $59;\n     $887 = HEAP32[$886>>2]|0;\n     $888 = $62;\n     HEAP32[$888>>2] = $887;\n     $60 = $64;\n     $889 = $60;\n     $890 = HEAP32[$889>>2]|0;\n     $891 = $63;\n     HEAP32[$891>>2] = $890;\n     $67 = $760;\n     $892 = $67;\n     $893 = ((($892)) + 12|0);\n     $66 = $893;\n     $894 = $66;\n     $65 = $894;\n     $895 = $65;\n     $70 = $117;\n     $896 = $70;\n     $897 = ((($896)) + 12|0);\n     $69 = $897;\n     $898 = $69;\n     $68 = $898;\n     $899 = $68;\n     $74 = $895;\n     $75 = $899;\n     $900 = $74;\n     $73 = $900;\n     $901 = $73;\n     $902 = HEAP32[$901>>2]|0;\n     HEAP32[$76>>2] = $902;\n     $903 = $75;\n     $71 = $903;\n     $904 = $71;\n     $905 = HEAP32[$904>>2]|0;\n     $906 = $74;\n     HEAP32[$906>>2] = $905;\n     $72 = $76;\n     $907 = $72;\n     $908 = HEAP32[$907>>2]|0;\n     $909 = $75;\n     HEAP32[$909>>2] = $908;\n     __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($117);\n     break;\n    }\n    $773 = ((($760)) + 4|0);\n    $774 = HEAP32[$773>>2]|0;\n    $775 = HEAP32[$760>>2]|0;\n    $776 = $774;\n    $777 = $775;\n    $778 = (($776) - ($777))|0;\n    $779 = (($778|0) / 4)&-1;\n    $113 = $779;\n    $780 = $113;\n    $781 = (($780) + 1)|0;\n    $782 = (($781|0) / 2)&-1;\n    $113 = $782;\n    $783 = ((($760)) + 4|0);\n    $784 = HEAP32[$783>>2]|0;\n    $785 = ((($760)) + 8|0);\n    $786 = HEAP32[$785>>2]|0;\n    $787 = ((($760)) + 4|0);\n    $788 = HEAP32[$787>>2]|0;\n    $789 = $113;\n    $790 = (0 - ($789))|0;\n    $791 = (($788) + ($790<<2)|0);\n    $87 = $784;\n    $88 = $786;\n    $89 = $791;\n    $792 = $87;\n    $86 = $792;\n    $793 = $86;\n    $794 = $88;\n    $80 = $794;\n    $795 = $80;\n    $796 = $89;\n    $81 = $796;\n    $797 = $81;\n    $82 = $793;\n    $83 = $795;\n    $84 = $797;\n    $798 = $83;\n    $799 = $82;\n    $800 = $798;\n    $801 = $799;\n    $802 = (($800) - ($801))|0;\n    $803 = (($802|0) / 4)&-1;\n    $85 = $803;\n    $804 = $85;\n    $805 = ($804>>>0)>(0);\n    if ($805) {\n     $806 = $84;\n     $807 = $82;\n     $808 = $85;\n     $809 = $808<<2;\n     _memmove(($806|0),($807|0),($809|0))|0;\n    }\n    $810 = $84;\n    $811 = $85;\n    $812 = (($810) + ($811<<2)|0);\n    $813 = ((($760)) + 8|0);\n    HEAP32[$813>>2] = $812;\n    $814 = $113;\n    $815 = ((($760)) + 4|0);\n    $816 = HEAP32[$815>>2]|0;\n    $817 = (0 - ($814))|0;\n    $818 = (($816) + ($817<<2)|0);\n    HEAP32[$815>>2] = $818;\n   }\n  } while(0);\n  $92 = $760;\n  $910 = $92;\n  $911 = ((($910)) + 12|0);\n  $91 = $911;\n  $912 = $91;\n  $90 = $912;\n  $913 = $90;\n  $914 = ((($760)) + 8|0);\n  $915 = HEAP32[$914>>2]|0;\n  $93 = $915;\n  $916 = $93;\n  $917 = $112;\n  $104 = $913;\n  $105 = $916;\n  $106 = $917;\n  $918 = $104;\n  $919 = $105;\n  $920 = $106;\n  $103 = $920;\n  $921 = $103;\n  ;HEAP8[$102>>0]=HEAP8[$107>>0]|0;\n  $99 = $918;\n  $100 = $919;\n  $101 = $921;\n  $922 = $99;\n  $923 = $100;\n  $924 = $101;\n  $98 = $924;\n  $925 = $98;\n  $95 = $922;\n  $96 = $923;\n  $97 = $925;\n  $926 = $96;\n  $927 = $97;\n  $94 = $927;\n  $928 = $94;\n  $929 = HEAP32[$928>>2]|0;\n  HEAP32[$926>>2] = $929;\n  $930 = ((($760)) + 8|0);\n  $931 = HEAP32[$930>>2]|0;\n  $932 = ((($931)) + 4|0);\n  HEAP32[$930>>2] = $932;\n  $933 = HEAP32[$402>>2]|0;\n  $934 = (($933) + -1)|0;\n  HEAP32[$402>>2] = $934;\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = $1;\n $13 = $10;\n $9 = $13;\n $14 = $9;\n $15 = ((($14)) + 20|0);\n $8 = $15;\n $16 = $8;\n $7 = $16;\n $17 = $7;\n $18 = HEAP32[$17>>2]|0;\n $19 = ((($13)) + 16|0);\n $20 = HEAP32[$19>>2]|0;\n $21 = (($18) + ($20))|0;\n $11 = $21;\n $6 = $13;\n $22 = $6;\n $23 = ((($22)) + 4|0);\n $24 = HEAP32[$23>>2]|0;\n $25 = $11;\n $26 = (($25>>>0) / 93)&-1;\n $27 = (($24) + ($26<<2)|0);\n $12 = $27;\n $28 = $12;\n $2 = $13;\n $29 = $2;\n $30 = ((($29)) + 8|0);\n $31 = HEAP32[$30>>2]|0;\n $32 = ((($29)) + 4|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = ($31|0)==($33|0);\n if ($34) {\n  $40 = 0;\n  $3 = $0;\n  $4 = $28;\n  $5 = $40;\n  $41 = $3;\n  $42 = $4;\n  HEAP32[$41>>2] = $42;\n  $43 = ((($41)) + 4|0);\n  $44 = $5;\n  HEAP32[$43>>2] = $44;\n  STACKTOP = sp;return;\n }\n $35 = $12;\n $36 = HEAP32[$35>>2]|0;\n $37 = $11;\n $38 = (($37>>>0) % 93)&-1;\n $39 = (($36) + (($38*44)|0)|0);\n $40 = $39;\n $3 = $0;\n $4 = $28;\n $5 = $40;\n $41 = $3;\n $42 = $4;\n HEAP32[$41>>2] = $42;\n $43 = ((($41)) + 4|0);\n $44 = $5;\n HEAP32[$43>>2] = $44;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE9push_backEOS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0;\n var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0;\n var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0;\n var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0;\n var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 384|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(384|0);\n $$byval_copy1 = sp + 376|0;\n $$byval_copy = sp + 372|0;\n $14 = sp + 8|0;\n $17 = sp + 381|0;\n $23 = sp + 292|0;\n $29 = sp + 268|0;\n $35 = sp + 244|0;\n $47 = sp + 196|0;\n $74 = sp;\n $79 = sp + 380|0;\n $87 = sp + 44|0;\n $88 = sp + 40|0;\n $89 = sp + 20|0;\n $90 = sp + 16|0;\n $91 = sp + 12|0;\n $83 = $0;\n $84 = $1;\n $92 = $83;\n $93 = ((($92)) + 8|0);\n $94 = HEAP32[$93>>2]|0;\n $82 = $92;\n $95 = $82;\n $96 = ((($95)) + 12|0);\n $81 = $96;\n $97 = $81;\n $80 = $97;\n $98 = $80;\n $99 = HEAP32[$98>>2]|0;\n $100 = ($94|0)==($99|0);\n do {\n  if ($100) {\n   $101 = ((($92)) + 4|0);\n   $102 = HEAP32[$101>>2]|0;\n   $103 = HEAP32[$92>>2]|0;\n   $104 = ($102>>>0)>($103>>>0);\n   if (!($104)) {\n    $50 = $92;\n    $151 = $50;\n    $152 = ((($151)) + 12|0);\n    $49 = $152;\n    $153 = $49;\n    $48 = $153;\n    $154 = $48;\n    $155 = HEAP32[$154>>2]|0;\n    $156 = HEAP32[$92>>2]|0;\n    $157 = $155;\n    $158 = $156;\n    $159 = (($157) - ($158))|0;\n    $160 = (($159|0) / 4)&-1;\n    $161 = $160<<1;\n    HEAP32[$87>>2] = $161;\n    HEAP32[$88>>2] = 1;\n    $15 = $87;\n    $16 = $88;\n    $162 = $15;\n    $163 = $16;\n    ;HEAP8[$14>>0]=HEAP8[$17>>0]|0;\n    $12 = $162;\n    $13 = $163;\n    $164 = $12;\n    $165 = $13;\n    $9 = $14;\n    $10 = $164;\n    $11 = $165;\n    $166 = $10;\n    $167 = HEAP32[$166>>2]|0;\n    $168 = $11;\n    $169 = HEAP32[$168>>2]|0;\n    $170 = ($167>>>0)<($169>>>0);\n    $171 = $13;\n    $172 = $12;\n    $173 = $170 ? $171 : $172;\n    $174 = HEAP32[$173>>2]|0;\n    $86 = $174;\n    $175 = $86;\n    $176 = $86;\n    $177 = (($176>>>0) / 4)&-1;\n    $4 = $92;\n    $178 = $4;\n    $179 = ((($178)) + 12|0);\n    $3 = $179;\n    $180 = $3;\n    $2 = $180;\n    $181 = $2;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($89,$175,$177,$181);\n    $182 = ((($92)) + 4|0);\n    $183 = HEAP32[$182>>2]|0;\n    $5 = $90;\n    $6 = $183;\n    $184 = $5;\n    $185 = $6;\n    HEAP32[$184>>2] = $185;\n    $186 = ((($92)) + 8|0);\n    $187 = HEAP32[$186>>2]|0;\n    $7 = $91;\n    $8 = $187;\n    $188 = $7;\n    $189 = $8;\n    HEAP32[$188>>2] = $189;\n    ;HEAP32[$$byval_copy>>2]=HEAP32[$90>>2]|0;\n    ;HEAP32[$$byval_copy1>>2]=HEAP32[$91>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($89,$$byval_copy,$$byval_copy1);\n    $21 = $92;\n    $22 = $89;\n    $190 = $21;\n    $20 = $190;\n    $191 = $20;\n    $192 = HEAP32[$191>>2]|0;\n    HEAP32[$23>>2] = $192;\n    $193 = $22;\n    $18 = $193;\n    $194 = $18;\n    $195 = HEAP32[$194>>2]|0;\n    $196 = $21;\n    HEAP32[$196>>2] = $195;\n    $19 = $23;\n    $197 = $19;\n    $198 = HEAP32[$197>>2]|0;\n    $199 = $22;\n    HEAP32[$199>>2] = $198;\n    $200 = ((($92)) + 4|0);\n    $201 = ((($89)) + 4|0);\n    $27 = $200;\n    $28 = $201;\n    $202 = $27;\n    $26 = $202;\n    $203 = $26;\n    $204 = HEAP32[$203>>2]|0;\n    HEAP32[$29>>2] = $204;\n    $205 = $28;\n    $24 = $205;\n    $206 = $24;\n    $207 = HEAP32[$206>>2]|0;\n    $208 = $27;\n    HEAP32[$208>>2] = $207;\n    $25 = $29;\n    $209 = $25;\n    $210 = HEAP32[$209>>2]|0;\n    $211 = $28;\n    HEAP32[$211>>2] = $210;\n    $212 = ((($92)) + 8|0);\n    $213 = ((($89)) + 8|0);\n    $33 = $212;\n    $34 = $213;\n    $214 = $33;\n    $32 = $214;\n    $215 = $32;\n    $216 = HEAP32[$215>>2]|0;\n    HEAP32[$35>>2] = $216;\n    $217 = $34;\n    $30 = $217;\n    $218 = $30;\n    $219 = HEAP32[$218>>2]|0;\n    $220 = $33;\n    HEAP32[$220>>2] = $219;\n    $31 = $35;\n    $221 = $31;\n    $222 = HEAP32[$221>>2]|0;\n    $223 = $34;\n    HEAP32[$223>>2] = $222;\n    $38 = $92;\n    $224 = $38;\n    $225 = ((($224)) + 12|0);\n    $37 = $225;\n    $226 = $37;\n    $36 = $226;\n    $227 = $36;\n    $41 = $89;\n    $228 = $41;\n    $229 = ((($228)) + 12|0);\n    $40 = $229;\n    $230 = $40;\n    $39 = $230;\n    $231 = $39;\n    $45 = $227;\n    $46 = $231;\n    $232 = $45;\n    $44 = $232;\n    $233 = $44;\n    $234 = HEAP32[$233>>2]|0;\n    HEAP32[$47>>2] = $234;\n    $235 = $46;\n    $42 = $235;\n    $236 = $42;\n    $237 = HEAP32[$236>>2]|0;\n    $238 = $45;\n    HEAP32[$238>>2] = $237;\n    $43 = $47;\n    $239 = $43;\n    $240 = HEAP32[$239>>2]|0;\n    $241 = $46;\n    HEAP32[$241>>2] = $240;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($89);\n    break;\n   }\n   $105 = ((($92)) + 4|0);\n   $106 = HEAP32[$105>>2]|0;\n   $107 = HEAP32[$92>>2]|0;\n   $108 = $106;\n   $109 = $107;\n   $110 = (($108) - ($109))|0;\n   $111 = (($110|0) / 4)&-1;\n   $85 = $111;\n   $112 = $85;\n   $113 = (($112) + 1)|0;\n   $114 = (($113|0) / 2)&-1;\n   $85 = $114;\n   $115 = ((($92)) + 4|0);\n   $116 = HEAP32[$115>>2]|0;\n   $117 = ((($92)) + 8|0);\n   $118 = HEAP32[$117>>2]|0;\n   $119 = ((($92)) + 4|0);\n   $120 = HEAP32[$119>>2]|0;\n   $121 = $85;\n   $122 = (0 - ($121))|0;\n   $123 = (($120) + ($122<<2)|0);\n   $58 = $116;\n   $59 = $118;\n   $60 = $123;\n   $124 = $58;\n   $57 = $124;\n   $125 = $57;\n   $126 = $59;\n   $51 = $126;\n   $127 = $51;\n   $128 = $60;\n   $52 = $128;\n   $129 = $52;\n   $53 = $125;\n   $54 = $127;\n   $55 = $129;\n   $130 = $54;\n   $131 = $53;\n   $132 = $130;\n   $133 = $131;\n   $134 = (($132) - ($133))|0;\n   $135 = (($134|0) / 4)&-1;\n   $56 = $135;\n   $136 = $56;\n   $137 = ($136>>>0)>(0);\n   if ($137) {\n    $138 = $55;\n    $139 = $53;\n    $140 = $56;\n    $141 = $140<<2;\n    _memmove(($138|0),($139|0),($141|0))|0;\n   }\n   $142 = $55;\n   $143 = $56;\n   $144 = (($142) + ($143<<2)|0);\n   $145 = ((($92)) + 8|0);\n   HEAP32[$145>>2] = $144;\n   $146 = $85;\n   $147 = ((($92)) + 4|0);\n   $148 = HEAP32[$147>>2]|0;\n   $149 = (0 - ($146))|0;\n   $150 = (($148) + ($149<<2)|0);\n   HEAP32[$147>>2] = $150;\n  }\n } while(0);\n $63 = $92;\n $242 = $63;\n $243 = ((($242)) + 12|0);\n $62 = $243;\n $244 = $62;\n $61 = $244;\n $245 = $61;\n $246 = ((($92)) + 8|0);\n $247 = HEAP32[$246>>2]|0;\n $64 = $247;\n $248 = $64;\n $249 = $84;\n $65 = $249;\n $250 = $65;\n $76 = $245;\n $77 = $248;\n $78 = $250;\n $251 = $76;\n $252 = $77;\n $253 = $78;\n $75 = $253;\n $254 = $75;\n ;HEAP8[$74>>0]=HEAP8[$79>>0]|0;\n $71 = $251;\n $72 = $252;\n $73 = $254;\n $255 = $71;\n $256 = $72;\n $257 = $73;\n $70 = $257;\n $258 = $70;\n $67 = $255;\n $68 = $256;\n $69 = $258;\n $259 = $68;\n $260 = $69;\n $66 = $260;\n $261 = $66;\n $262 = HEAP32[$261>>2]|0;\n HEAP32[$259>>2] = $262;\n $263 = ((($92)) + 8|0);\n $264 = HEAP32[$263>>2]|0;\n $265 = ((($264)) + 4|0);\n HEAP32[$263>>2] = $265;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE10push_frontEOS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 400|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(400|0);\n $$byval_copy1 = sp + 388|0;\n $$byval_copy = sp + 384|0;\n $10 = sp + 8|0;\n $13 = sp + 393|0;\n $26 = sp + 292|0;\n $32 = sp + 268|0;\n $38 = sp + 244|0;\n $50 = sp + 196|0;\n $77 = sp;\n $82 = sp + 392|0;\n $90 = sp + 44|0;\n $91 = sp + 40|0;\n $92 = sp + 20|0;\n $93 = sp + 16|0;\n $94 = sp + 12|0;\n $86 = $0;\n $87 = $1;\n $95 = $86;\n $96 = ((($95)) + 4|0);\n $97 = HEAP32[$96>>2]|0;\n $98 = HEAP32[$95>>2]|0;\n $99 = ($97|0)==($98|0);\n do {\n  if ($99) {\n   $100 = ((($95)) + 8|0);\n   $101 = HEAP32[$100>>2]|0;\n   $85 = $95;\n   $102 = $85;\n   $103 = ((($102)) + 12|0);\n   $84 = $103;\n   $104 = $84;\n   $83 = $104;\n   $105 = $83;\n   $106 = HEAP32[$105>>2]|0;\n   $107 = ($101>>>0)<($106>>>0);\n   if (!($107)) {\n    $20 = $95;\n    $158 = $20;\n    $159 = ((($158)) + 12|0);\n    $19 = $159;\n    $160 = $19;\n    $18 = $160;\n    $161 = $18;\n    $162 = HEAP32[$161>>2]|0;\n    $163 = HEAP32[$95>>2]|0;\n    $164 = $162;\n    $165 = $163;\n    $166 = (($164) - ($165))|0;\n    $167 = (($166|0) / 4)&-1;\n    $168 = $167<<1;\n    HEAP32[$90>>2] = $168;\n    HEAP32[$91>>2] = 1;\n    $11 = $90;\n    $12 = $91;\n    $169 = $11;\n    $170 = $12;\n    ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n    $8 = $169;\n    $9 = $170;\n    $171 = $8;\n    $172 = $9;\n    $5 = $10;\n    $6 = $171;\n    $7 = $172;\n    $173 = $6;\n    $174 = HEAP32[$173>>2]|0;\n    $175 = $7;\n    $176 = HEAP32[$175>>2]|0;\n    $177 = ($174>>>0)<($176>>>0);\n    $178 = $9;\n    $179 = $8;\n    $180 = $177 ? $178 : $179;\n    $181 = HEAP32[$180>>2]|0;\n    $89 = $181;\n    $182 = $89;\n    $183 = $89;\n    $184 = (($183) + 3)|0;\n    $185 = (($184>>>0) / 4)&-1;\n    $4 = $95;\n    $186 = $4;\n    $187 = ((($186)) + 12|0);\n    $3 = $187;\n    $188 = $3;\n    $2 = $188;\n    $189 = $2;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($92,$182,$185,$189);\n    $190 = ((($95)) + 4|0);\n    $191 = HEAP32[$190>>2]|0;\n    $14 = $93;\n    $15 = $191;\n    $192 = $14;\n    $193 = $15;\n    HEAP32[$192>>2] = $193;\n    $194 = ((($95)) + 8|0);\n    $195 = HEAP32[$194>>2]|0;\n    $16 = $94;\n    $17 = $195;\n    $196 = $16;\n    $197 = $17;\n    HEAP32[$196>>2] = $197;\n    ;HEAP32[$$byval_copy>>2]=HEAP32[$93>>2]|0;\n    ;HEAP32[$$byval_copy1>>2]=HEAP32[$94>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($92,$$byval_copy,$$byval_copy1);\n    $24 = $95;\n    $25 = $92;\n    $198 = $24;\n    $23 = $198;\n    $199 = $23;\n    $200 = HEAP32[$199>>2]|0;\n    HEAP32[$26>>2] = $200;\n    $201 = $25;\n    $21 = $201;\n    $202 = $21;\n    $203 = HEAP32[$202>>2]|0;\n    $204 = $24;\n    HEAP32[$204>>2] = $203;\n    $22 = $26;\n    $205 = $22;\n    $206 = HEAP32[$205>>2]|0;\n    $207 = $25;\n    HEAP32[$207>>2] = $206;\n    $208 = ((($95)) + 4|0);\n    $209 = ((($92)) + 4|0);\n    $30 = $208;\n    $31 = $209;\n    $210 = $30;\n    $29 = $210;\n    $211 = $29;\n    $212 = HEAP32[$211>>2]|0;\n    HEAP32[$32>>2] = $212;\n    $213 = $31;\n    $27 = $213;\n    $214 = $27;\n    $215 = HEAP32[$214>>2]|0;\n    $216 = $30;\n    HEAP32[$216>>2] = $215;\n    $28 = $32;\n    $217 = $28;\n    $218 = HEAP32[$217>>2]|0;\n    $219 = $31;\n    HEAP32[$219>>2] = $218;\n    $220 = ((($95)) + 8|0);\n    $221 = ((($92)) + 8|0);\n    $36 = $220;\n    $37 = $221;\n    $222 = $36;\n    $35 = $222;\n    $223 = $35;\n    $224 = HEAP32[$223>>2]|0;\n    HEAP32[$38>>2] = $224;\n    $225 = $37;\n    $33 = $225;\n    $226 = $33;\n    $227 = HEAP32[$226>>2]|0;\n    $228 = $36;\n    HEAP32[$228>>2] = $227;\n    $34 = $38;\n    $229 = $34;\n    $230 = HEAP32[$229>>2]|0;\n    $231 = $37;\n    HEAP32[$231>>2] = $230;\n    $41 = $95;\n    $232 = $41;\n    $233 = ((($232)) + 12|0);\n    $40 = $233;\n    $234 = $40;\n    $39 = $234;\n    $235 = $39;\n    $44 = $92;\n    $236 = $44;\n    $237 = ((($236)) + 12|0);\n    $43 = $237;\n    $238 = $43;\n    $42 = $238;\n    $239 = $42;\n    $48 = $235;\n    $49 = $239;\n    $240 = $48;\n    $47 = $240;\n    $241 = $47;\n    $242 = HEAP32[$241>>2]|0;\n    HEAP32[$50>>2] = $242;\n    $243 = $49;\n    $45 = $243;\n    $244 = $45;\n    $245 = HEAP32[$244>>2]|0;\n    $246 = $48;\n    HEAP32[$246>>2] = $245;\n    $46 = $50;\n    $247 = $46;\n    $248 = HEAP32[$247>>2]|0;\n    $249 = $49;\n    HEAP32[$249>>2] = $248;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($92);\n    break;\n   }\n   $63 = $95;\n   $108 = $63;\n   $109 = ((($108)) + 12|0);\n   $62 = $109;\n   $110 = $62;\n   $61 = $110;\n   $111 = $61;\n   $112 = HEAP32[$111>>2]|0;\n   $113 = ((($95)) + 8|0);\n   $114 = HEAP32[$113>>2]|0;\n   $115 = $112;\n   $116 = $114;\n   $117 = (($115) - ($116))|0;\n   $118 = (($117|0) / 4)&-1;\n   $88 = $118;\n   $119 = $88;\n   $120 = (($119) + 1)|0;\n   $121 = (($120|0) / 2)&-1;\n   $88 = $121;\n   $122 = ((($95)) + 4|0);\n   $123 = HEAP32[$122>>2]|0;\n   $124 = ((($95)) + 8|0);\n   $125 = HEAP32[$124>>2]|0;\n   $126 = ((($95)) + 8|0);\n   $127 = HEAP32[$126>>2]|0;\n   $128 = $88;\n   $129 = (($127) + ($128<<2)|0);\n   $58 = $123;\n   $59 = $125;\n   $60 = $129;\n   $130 = $58;\n   $57 = $130;\n   $131 = $57;\n   $132 = $59;\n   $51 = $132;\n   $133 = $51;\n   $134 = $60;\n   $52 = $134;\n   $135 = $52;\n   $53 = $131;\n   $54 = $133;\n   $55 = $135;\n   $136 = $54;\n   $137 = $53;\n   $138 = $136;\n   $139 = $137;\n   $140 = (($138) - ($139))|0;\n   $141 = (($140|0) / 4)&-1;\n   $56 = $141;\n   $142 = $56;\n   $143 = ($142>>>0)>(0);\n   if ($143) {\n    $144 = $56;\n    $145 = $55;\n    $146 = (0 - ($144))|0;\n    $147 = (($145) + ($146<<2)|0);\n    $55 = $147;\n    $148 = $55;\n    $149 = $53;\n    $150 = $56;\n    $151 = $150<<2;\n    _memmove(($148|0),($149|0),($151|0))|0;\n   }\n   $152 = $55;\n   $153 = ((($95)) + 4|0);\n   HEAP32[$153>>2] = $152;\n   $154 = $88;\n   $155 = ((($95)) + 8|0);\n   $156 = HEAP32[$155>>2]|0;\n   $157 = (($156) + ($154<<2)|0);\n   HEAP32[$155>>2] = $157;\n  }\n } while(0);\n $66 = $95;\n $250 = $66;\n $251 = ((($250)) + 12|0);\n $65 = $251;\n $252 = $65;\n $64 = $252;\n $253 = $64;\n $254 = ((($95)) + 4|0);\n $255 = HEAP32[$254>>2]|0;\n $256 = ((($255)) + -4|0);\n $67 = $256;\n $257 = $67;\n $258 = $87;\n $68 = $258;\n $259 = $68;\n $79 = $253;\n $80 = $257;\n $81 = $259;\n $260 = $79;\n $261 = $80;\n $262 = $81;\n $78 = $262;\n $263 = $78;\n ;HEAP8[$77>>0]=HEAP8[$82>>0]|0;\n $74 = $260;\n $75 = $261;\n $76 = $263;\n $264 = $74;\n $265 = $75;\n $266 = $76;\n $73 = $266;\n $267 = $73;\n $70 = $264;\n $71 = $265;\n $72 = $267;\n $268 = $71;\n $269 = $72;\n $69 = $269;\n $270 = $69;\n $271 = HEAP32[$270>>2]|0;\n HEAP32[$268>>2] = $271;\n $272 = ((($95)) + 4|0);\n $273 = HEAP32[$272>>2]|0;\n $274 = ((($273)) + -4|0);\n HEAP32[$272>>2] = $274;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0);\n $35 = sp;\n $31 = $0;\n $32 = $1;\n $33 = $2;\n $34 = $3;\n $36 = $31;\n $37 = ((($36)) + 12|0);\n HEAP32[$35>>2] = 0;\n $38 = $34;\n $28 = $37;\n $29 = $35;\n $30 = $38;\n $39 = $28;\n $40 = $29;\n $27 = $40;\n $41 = $27;\n $21 = $39;\n $22 = $41;\n $42 = $21;\n $43 = $22;\n $20 = $43;\n HEAP32[$42>>2] = 0;\n $44 = ((($39)) + 4|0);\n $45 = $30;\n $23 = $45;\n $46 = $23;\n $25 = $44;\n $26 = $46;\n $47 = $25;\n $48 = $26;\n $24 = $48;\n $49 = $24;\n HEAP32[$47>>2] = $49;\n $50 = $32;\n $51 = ($50|0)!=(0);\n do {\n  if ($51) {\n   $6 = $36;\n   $52 = $6;\n   $53 = ((($52)) + 12|0);\n   $5 = $53;\n   $54 = $5;\n   $55 = ((($54)) + 4|0);\n   $4 = $55;\n   $56 = $4;\n   $57 = HEAP32[$56>>2]|0;\n   $58 = $32;\n   $15 = $57;\n   $16 = $58;\n   $59 = $15;\n   $60 = $16;\n   $12 = $59;\n   $13 = $60;\n   $14 = 0;\n   $61 = $12;\n   $62 = $13;\n   $11 = $61;\n   $63 = ($62>>>0)>(1073741823);\n   if ($63) {\n    $9 = 4287;\n    $64 = (___cxa_allocate_exception(8)|0);\n    $65 = $9;\n    $7 = $64;\n    $8 = $65;\n    $66 = $7;\n    $67 = $8;\n    __ZNSt11logic_errorC2EPKc($66,$67);\n    HEAP32[$66>>2] = (3660);\n    ___cxa_throw(($64|0),(1384|0),(220|0));\n    // unreachable;\n   } else {\n    $68 = $13;\n    $69 = $68<<2;\n    $10 = $69;\n    $70 = $10;\n    $71 = (__Znwj($70)|0);\n    $72 = $71;\n    break;\n   }\n  } else {\n   $72 = 0;\n  }\n } while(0);\n HEAP32[$36>>2] = $72;\n $73 = HEAP32[$36>>2]|0;\n $74 = $33;\n $75 = (($73) + ($74<<2)|0);\n $76 = ((($36)) + 8|0);\n HEAP32[$76>>2] = $75;\n $77 = ((($36)) + 4|0);\n HEAP32[$77>>2] = $75;\n $78 = HEAP32[$36>>2]|0;\n $79 = $32;\n $80 = (($78) + ($79<<2)|0);\n $19 = $36;\n $81 = $19;\n $82 = ((($81)) + 12|0);\n $18 = $82;\n $83 = $18;\n $17 = $83;\n $84 = $17;\n HEAP32[$84>>2] = $80;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE9push_backEOS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0;\n var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0;\n var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0;\n var $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0;\n var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 384|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(384|0);\n $$byval_copy1 = sp + 376|0;\n $$byval_copy = sp + 372|0;\n $14 = sp + 8|0;\n $17 = sp + 381|0;\n $23 = sp + 292|0;\n $29 = sp + 268|0;\n $35 = sp + 244|0;\n $47 = sp + 196|0;\n $74 = sp;\n $79 = sp + 380|0;\n $87 = sp + 44|0;\n $88 = sp + 40|0;\n $89 = sp + 20|0;\n $90 = sp + 16|0;\n $91 = sp + 12|0;\n $83 = $0;\n $84 = $1;\n $92 = $83;\n $93 = ((($92)) + 8|0);\n $94 = HEAP32[$93>>2]|0;\n $82 = $92;\n $95 = $82;\n $96 = ((($95)) + 12|0);\n $81 = $96;\n $97 = $81;\n $80 = $97;\n $98 = $80;\n $99 = HEAP32[$98>>2]|0;\n $100 = ($94|0)==($99|0);\n do {\n  if ($100) {\n   $101 = ((($92)) + 4|0);\n   $102 = HEAP32[$101>>2]|0;\n   $103 = HEAP32[$92>>2]|0;\n   $104 = ($102>>>0)>($103>>>0);\n   if (!($104)) {\n    $50 = $92;\n    $151 = $50;\n    $152 = ((($151)) + 12|0);\n    $49 = $152;\n    $153 = $49;\n    $48 = $153;\n    $154 = $48;\n    $155 = HEAP32[$154>>2]|0;\n    $156 = HEAP32[$92>>2]|0;\n    $157 = $155;\n    $158 = $156;\n    $159 = (($157) - ($158))|0;\n    $160 = (($159|0) / 4)&-1;\n    $161 = $160<<1;\n    HEAP32[$87>>2] = $161;\n    HEAP32[$88>>2] = 1;\n    $15 = $87;\n    $16 = $88;\n    $162 = $15;\n    $163 = $16;\n    ;HEAP8[$14>>0]=HEAP8[$17>>0]|0;\n    $12 = $162;\n    $13 = $163;\n    $164 = $12;\n    $165 = $13;\n    $9 = $14;\n    $10 = $164;\n    $11 = $165;\n    $166 = $10;\n    $167 = HEAP32[$166>>2]|0;\n    $168 = $11;\n    $169 = HEAP32[$168>>2]|0;\n    $170 = ($167>>>0)<($169>>>0);\n    $171 = $13;\n    $172 = $12;\n    $173 = $170 ? $171 : $172;\n    $174 = HEAP32[$173>>2]|0;\n    $86 = $174;\n    $175 = $86;\n    $176 = $86;\n    $177 = (($176>>>0) / 4)&-1;\n    $4 = $92;\n    $178 = $4;\n    $179 = ((($178)) + 12|0);\n    $3 = $179;\n    $180 = $3;\n    $181 = ((($180)) + 4|0);\n    $2 = $181;\n    $182 = $2;\n    $183 = HEAP32[$182>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($89,$175,$177,$183);\n    $184 = ((($92)) + 4|0);\n    $185 = HEAP32[$184>>2]|0;\n    $5 = $90;\n    $6 = $185;\n    $186 = $5;\n    $187 = $6;\n    HEAP32[$186>>2] = $187;\n    $188 = ((($92)) + 8|0);\n    $189 = HEAP32[$188>>2]|0;\n    $7 = $91;\n    $8 = $189;\n    $190 = $7;\n    $191 = $8;\n    HEAP32[$190>>2] = $191;\n    ;HEAP32[$$byval_copy>>2]=HEAP32[$90>>2]|0;\n    ;HEAP32[$$byval_copy1>>2]=HEAP32[$91>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($89,$$byval_copy,$$byval_copy1);\n    $21 = $92;\n    $22 = $89;\n    $192 = $21;\n    $20 = $192;\n    $193 = $20;\n    $194 = HEAP32[$193>>2]|0;\n    HEAP32[$23>>2] = $194;\n    $195 = $22;\n    $18 = $195;\n    $196 = $18;\n    $197 = HEAP32[$196>>2]|0;\n    $198 = $21;\n    HEAP32[$198>>2] = $197;\n    $19 = $23;\n    $199 = $19;\n    $200 = HEAP32[$199>>2]|0;\n    $201 = $22;\n    HEAP32[$201>>2] = $200;\n    $202 = ((($92)) + 4|0);\n    $203 = ((($89)) + 4|0);\n    $27 = $202;\n    $28 = $203;\n    $204 = $27;\n    $26 = $204;\n    $205 = $26;\n    $206 = HEAP32[$205>>2]|0;\n    HEAP32[$29>>2] = $206;\n    $207 = $28;\n    $24 = $207;\n    $208 = $24;\n    $209 = HEAP32[$208>>2]|0;\n    $210 = $27;\n    HEAP32[$210>>2] = $209;\n    $25 = $29;\n    $211 = $25;\n    $212 = HEAP32[$211>>2]|0;\n    $213 = $28;\n    HEAP32[$213>>2] = $212;\n    $214 = ((($92)) + 8|0);\n    $215 = ((($89)) + 8|0);\n    $33 = $214;\n    $34 = $215;\n    $216 = $33;\n    $32 = $216;\n    $217 = $32;\n    $218 = HEAP32[$217>>2]|0;\n    HEAP32[$35>>2] = $218;\n    $219 = $34;\n    $30 = $219;\n    $220 = $30;\n    $221 = HEAP32[$220>>2]|0;\n    $222 = $33;\n    HEAP32[$222>>2] = $221;\n    $31 = $35;\n    $223 = $31;\n    $224 = HEAP32[$223>>2]|0;\n    $225 = $34;\n    HEAP32[$225>>2] = $224;\n    $38 = $92;\n    $226 = $38;\n    $227 = ((($226)) + 12|0);\n    $37 = $227;\n    $228 = $37;\n    $36 = $228;\n    $229 = $36;\n    $41 = $89;\n    $230 = $41;\n    $231 = ((($230)) + 12|0);\n    $40 = $231;\n    $232 = $40;\n    $39 = $232;\n    $233 = $39;\n    $45 = $229;\n    $46 = $233;\n    $234 = $45;\n    $44 = $234;\n    $235 = $44;\n    $236 = HEAP32[$235>>2]|0;\n    HEAP32[$47>>2] = $236;\n    $237 = $46;\n    $42 = $237;\n    $238 = $42;\n    $239 = HEAP32[$238>>2]|0;\n    $240 = $45;\n    HEAP32[$240>>2] = $239;\n    $43 = $47;\n    $241 = $43;\n    $242 = HEAP32[$241>>2]|0;\n    $243 = $46;\n    HEAP32[$243>>2] = $242;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($89);\n    break;\n   }\n   $105 = ((($92)) + 4|0);\n   $106 = HEAP32[$105>>2]|0;\n   $107 = HEAP32[$92>>2]|0;\n   $108 = $106;\n   $109 = $107;\n   $110 = (($108) - ($109))|0;\n   $111 = (($110|0) / 4)&-1;\n   $85 = $111;\n   $112 = $85;\n   $113 = (($112) + 1)|0;\n   $114 = (($113|0) / 2)&-1;\n   $85 = $114;\n   $115 = ((($92)) + 4|0);\n   $116 = HEAP32[$115>>2]|0;\n   $117 = ((($92)) + 8|0);\n   $118 = HEAP32[$117>>2]|0;\n   $119 = ((($92)) + 4|0);\n   $120 = HEAP32[$119>>2]|0;\n   $121 = $85;\n   $122 = (0 - ($121))|0;\n   $123 = (($120) + ($122<<2)|0);\n   $58 = $116;\n   $59 = $118;\n   $60 = $123;\n   $124 = $58;\n   $57 = $124;\n   $125 = $57;\n   $126 = $59;\n   $51 = $126;\n   $127 = $51;\n   $128 = $60;\n   $52 = $128;\n   $129 = $52;\n   $53 = $125;\n   $54 = $127;\n   $55 = $129;\n   $130 = $54;\n   $131 = $53;\n   $132 = $130;\n   $133 = $131;\n   $134 = (($132) - ($133))|0;\n   $135 = (($134|0) / 4)&-1;\n   $56 = $135;\n   $136 = $56;\n   $137 = ($136>>>0)>(0);\n   if ($137) {\n    $138 = $55;\n    $139 = $53;\n    $140 = $56;\n    $141 = $140<<2;\n    _memmove(($138|0),($139|0),($141|0))|0;\n   }\n   $142 = $55;\n   $143 = $56;\n   $144 = (($142) + ($143<<2)|0);\n   $145 = ((($92)) + 8|0);\n   HEAP32[$145>>2] = $144;\n   $146 = $85;\n   $147 = ((($92)) + 4|0);\n   $148 = HEAP32[$147>>2]|0;\n   $149 = (0 - ($146))|0;\n   $150 = (($148) + ($149<<2)|0);\n   HEAP32[$147>>2] = $150;\n  }\n } while(0);\n $63 = $92;\n $244 = $63;\n $245 = ((($244)) + 12|0);\n $62 = $245;\n $246 = $62;\n $247 = ((($246)) + 4|0);\n $61 = $247;\n $248 = $61;\n $249 = HEAP32[$248>>2]|0;\n $250 = ((($92)) + 8|0);\n $251 = HEAP32[$250>>2]|0;\n $64 = $251;\n $252 = $64;\n $253 = $84;\n $65 = $253;\n $254 = $65;\n $76 = $249;\n $77 = $252;\n $78 = $254;\n $255 = $76;\n $256 = $77;\n $257 = $78;\n $75 = $257;\n $258 = $75;\n ;HEAP8[$74>>0]=HEAP8[$79>>0]|0;\n $71 = $255;\n $72 = $256;\n $73 = $258;\n $259 = $71;\n $260 = $72;\n $261 = $73;\n $70 = $261;\n $262 = $70;\n $67 = $259;\n $68 = $260;\n $69 = $262;\n $263 = $68;\n $264 = $69;\n $66 = $264;\n $265 = $66;\n $266 = HEAP32[$265>>2]|0;\n HEAP32[$263>>2] = $266;\n $267 = ((($92)) + 8|0);\n $268 = HEAP32[$267>>2]|0;\n $269 = ((($268)) + 4|0);\n HEAP32[$267>>2] = $269;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE10push_frontERKS4_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0;\n var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0;\n var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0;\n var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0;\n var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 400|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(400|0);\n $$byval_copy1 = sp + 384|0;\n $$byval_copy = sp + 380|0;\n $10 = sp + 8|0;\n $13 = sp + 389|0;\n $26 = sp + 288|0;\n $32 = sp + 264|0;\n $38 = sp + 240|0;\n $50 = sp + 192|0;\n $76 = sp;\n $81 = sp + 388|0;\n $89 = sp + 44|0;\n $90 = sp + 40|0;\n $91 = sp + 20|0;\n $92 = sp + 16|0;\n $93 = sp + 12|0;\n $85 = $0;\n $86 = $1;\n $94 = $85;\n $95 = ((($94)) + 4|0);\n $96 = HEAP32[$95>>2]|0;\n $97 = HEAP32[$94>>2]|0;\n $98 = ($96|0)==($97|0);\n do {\n  if ($98) {\n   $99 = ((($94)) + 8|0);\n   $100 = HEAP32[$99>>2]|0;\n   $84 = $94;\n   $101 = $84;\n   $102 = ((($101)) + 12|0);\n   $83 = $102;\n   $103 = $83;\n   $82 = $103;\n   $104 = $82;\n   $105 = HEAP32[$104>>2]|0;\n   $106 = ($100>>>0)<($105>>>0);\n   if (!($106)) {\n    $20 = $94;\n    $157 = $20;\n    $158 = ((($157)) + 12|0);\n    $19 = $158;\n    $159 = $19;\n    $18 = $159;\n    $160 = $18;\n    $161 = HEAP32[$160>>2]|0;\n    $162 = HEAP32[$94>>2]|0;\n    $163 = $161;\n    $164 = $162;\n    $165 = (($163) - ($164))|0;\n    $166 = (($165|0) / 4)&-1;\n    $167 = $166<<1;\n    HEAP32[$89>>2] = $167;\n    HEAP32[$90>>2] = 1;\n    $11 = $89;\n    $12 = $90;\n    $168 = $11;\n    $169 = $12;\n    ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n    $8 = $168;\n    $9 = $169;\n    $170 = $8;\n    $171 = $9;\n    $5 = $10;\n    $6 = $170;\n    $7 = $171;\n    $172 = $6;\n    $173 = HEAP32[$172>>2]|0;\n    $174 = $7;\n    $175 = HEAP32[$174>>2]|0;\n    $176 = ($173>>>0)<($175>>>0);\n    $177 = $9;\n    $178 = $8;\n    $179 = $176 ? $177 : $178;\n    $180 = HEAP32[$179>>2]|0;\n    $88 = $180;\n    $181 = $88;\n    $182 = $88;\n    $183 = (($182) + 3)|0;\n    $184 = (($183>>>0) / 4)&-1;\n    $4 = $94;\n    $185 = $4;\n    $186 = ((($185)) + 12|0);\n    $3 = $186;\n    $187 = $3;\n    $188 = ((($187)) + 4|0);\n    $2 = $188;\n    $189 = $2;\n    $190 = HEAP32[$189>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($91,$181,$184,$190);\n    $191 = ((($94)) + 4|0);\n    $192 = HEAP32[$191>>2]|0;\n    $14 = $92;\n    $15 = $192;\n    $193 = $14;\n    $194 = $15;\n    HEAP32[$193>>2] = $194;\n    $195 = ((($94)) + 8|0);\n    $196 = HEAP32[$195>>2]|0;\n    $16 = $93;\n    $17 = $196;\n    $197 = $16;\n    $198 = $17;\n    HEAP32[$197>>2] = $198;\n    ;HEAP32[$$byval_copy>>2]=HEAP32[$92>>2]|0;\n    ;HEAP32[$$byval_copy1>>2]=HEAP32[$93>>2]|0;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($91,$$byval_copy,$$byval_copy1);\n    $24 = $94;\n    $25 = $91;\n    $199 = $24;\n    $23 = $199;\n    $200 = $23;\n    $201 = HEAP32[$200>>2]|0;\n    HEAP32[$26>>2] = $201;\n    $202 = $25;\n    $21 = $202;\n    $203 = $21;\n    $204 = HEAP32[$203>>2]|0;\n    $205 = $24;\n    HEAP32[$205>>2] = $204;\n    $22 = $26;\n    $206 = $22;\n    $207 = HEAP32[$206>>2]|0;\n    $208 = $25;\n    HEAP32[$208>>2] = $207;\n    $209 = ((($94)) + 4|0);\n    $210 = ((($91)) + 4|0);\n    $30 = $209;\n    $31 = $210;\n    $211 = $30;\n    $29 = $211;\n    $212 = $29;\n    $213 = HEAP32[$212>>2]|0;\n    HEAP32[$32>>2] = $213;\n    $214 = $31;\n    $27 = $214;\n    $215 = $27;\n    $216 = HEAP32[$215>>2]|0;\n    $217 = $30;\n    HEAP32[$217>>2] = $216;\n    $28 = $32;\n    $218 = $28;\n    $219 = HEAP32[$218>>2]|0;\n    $220 = $31;\n    HEAP32[$220>>2] = $219;\n    $221 = ((($94)) + 8|0);\n    $222 = ((($91)) + 8|0);\n    $36 = $221;\n    $37 = $222;\n    $223 = $36;\n    $35 = $223;\n    $224 = $35;\n    $225 = HEAP32[$224>>2]|0;\n    HEAP32[$38>>2] = $225;\n    $226 = $37;\n    $33 = $226;\n    $227 = $33;\n    $228 = HEAP32[$227>>2]|0;\n    $229 = $36;\n    HEAP32[$229>>2] = $228;\n    $34 = $38;\n    $230 = $34;\n    $231 = HEAP32[$230>>2]|0;\n    $232 = $37;\n    HEAP32[$232>>2] = $231;\n    $41 = $94;\n    $233 = $41;\n    $234 = ((($233)) + 12|0);\n    $40 = $234;\n    $235 = $40;\n    $39 = $235;\n    $236 = $39;\n    $44 = $91;\n    $237 = $44;\n    $238 = ((($237)) + 12|0);\n    $43 = $238;\n    $239 = $43;\n    $42 = $239;\n    $240 = $42;\n    $48 = $236;\n    $49 = $240;\n    $241 = $48;\n    $47 = $241;\n    $242 = $47;\n    $243 = HEAP32[$242>>2]|0;\n    HEAP32[$50>>2] = $243;\n    $244 = $49;\n    $45 = $244;\n    $245 = $45;\n    $246 = HEAP32[$245>>2]|0;\n    $247 = $48;\n    HEAP32[$247>>2] = $246;\n    $46 = $50;\n    $248 = $46;\n    $249 = HEAP32[$248>>2]|0;\n    $250 = $49;\n    HEAP32[$250>>2] = $249;\n    __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($91);\n    break;\n   }\n   $63 = $94;\n   $107 = $63;\n   $108 = ((($107)) + 12|0);\n   $62 = $108;\n   $109 = $62;\n   $61 = $109;\n   $110 = $61;\n   $111 = HEAP32[$110>>2]|0;\n   $112 = ((($94)) + 8|0);\n   $113 = HEAP32[$112>>2]|0;\n   $114 = $111;\n   $115 = $113;\n   $116 = (($114) - ($115))|0;\n   $117 = (($116|0) / 4)&-1;\n   $87 = $117;\n   $118 = $87;\n   $119 = (($118) + 1)|0;\n   $120 = (($119|0) / 2)&-1;\n   $87 = $120;\n   $121 = ((($94)) + 4|0);\n   $122 = HEAP32[$121>>2]|0;\n   $123 = ((($94)) + 8|0);\n   $124 = HEAP32[$123>>2]|0;\n   $125 = ((($94)) + 8|0);\n   $126 = HEAP32[$125>>2]|0;\n   $127 = $87;\n   $128 = (($126) + ($127<<2)|0);\n   $58 = $122;\n   $59 = $124;\n   $60 = $128;\n   $129 = $58;\n   $57 = $129;\n   $130 = $57;\n   $131 = $59;\n   $51 = $131;\n   $132 = $51;\n   $133 = $60;\n   $52 = $133;\n   $134 = $52;\n   $53 = $130;\n   $54 = $132;\n   $55 = $134;\n   $135 = $54;\n   $136 = $53;\n   $137 = $135;\n   $138 = $136;\n   $139 = (($137) - ($138))|0;\n   $140 = (($139|0) / 4)&-1;\n   $56 = $140;\n   $141 = $56;\n   $142 = ($141>>>0)>(0);\n   if ($142) {\n    $143 = $56;\n    $144 = $55;\n    $145 = (0 - ($143))|0;\n    $146 = (($144) + ($145<<2)|0);\n    $55 = $146;\n    $147 = $55;\n    $148 = $53;\n    $149 = $56;\n    $150 = $149<<2;\n    _memmove(($147|0),($148|0),($150|0))|0;\n   }\n   $151 = $55;\n   $152 = ((($94)) + 4|0);\n   HEAP32[$152>>2] = $151;\n   $153 = $87;\n   $154 = ((($94)) + 8|0);\n   $155 = HEAP32[$154>>2]|0;\n   $156 = (($155) + ($153<<2)|0);\n   HEAP32[$154>>2] = $156;\n  }\n } while(0);\n $66 = $94;\n $251 = $66;\n $252 = ((($251)) + 12|0);\n $65 = $252;\n $253 = $65;\n $254 = ((($253)) + 4|0);\n $64 = $254;\n $255 = $64;\n $256 = HEAP32[$255>>2]|0;\n $257 = ((($94)) + 4|0);\n $258 = HEAP32[$257>>2]|0;\n $259 = ((($258)) + -4|0);\n $67 = $259;\n $260 = $67;\n $261 = $86;\n $78 = $256;\n $79 = $260;\n $80 = $261;\n $262 = $78;\n $263 = $79;\n $264 = $80;\n $77 = $264;\n $265 = $77;\n ;HEAP8[$76>>0]=HEAP8[$81>>0]|0;\n $73 = $262;\n $74 = $263;\n $75 = $265;\n $266 = $73;\n $267 = $74;\n $268 = $75;\n $72 = $268;\n $269 = $72;\n $69 = $266;\n $70 = $267;\n $71 = $269;\n $270 = $70;\n $271 = $71;\n $68 = $271;\n $272 = $68;\n $273 = HEAP32[$272>>2]|0;\n HEAP32[$270>>2] = $273;\n $274 = ((($94)) + 4|0);\n $275 = HEAP32[$274>>2]|0;\n $276 = ((($275)) + -4|0);\n HEAP32[$274>>2] = $276;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $19 = sp + 8|0;\n $22 = sp + 133|0;\n $29 = sp;\n $32 = sp + 132|0;\n $34 = $0;\n $35 = $34;\n $33 = $35;\n $36 = $33;\n $37 = ((($36)) + 4|0);\n $38 = HEAP32[$37>>2]|0;\n $30 = $36;\n $31 = $38;\n $39 = $30;\n $40 = $31;\n ;HEAP8[$29>>0]=HEAP8[$32>>0]|0;\n $27 = $39;\n $28 = $40;\n $41 = $27;\n while(1) {\n  $42 = $28;\n  $43 = ((($41)) + 8|0);\n  $44 = HEAP32[$43>>2]|0;\n  $45 = ($42|0)!=($44|0);\n  if (!($45)) {\n   break;\n  }\n  $26 = $41;\n  $46 = $26;\n  $47 = ((($46)) + 12|0);\n  $25 = $47;\n  $48 = $25;\n  $49 = ((($48)) + 4|0);\n  $24 = $49;\n  $50 = $24;\n  $51 = HEAP32[$50>>2]|0;\n  $52 = ((($41)) + 8|0);\n  $53 = HEAP32[$52>>2]|0;\n  $54 = ((($53)) + -4|0);\n  HEAP32[$52>>2] = $54;\n  $23 = $54;\n  $55 = $23;\n  $20 = $51;\n  $21 = $55;\n  $56 = $20;\n  $57 = $21;\n  ;HEAP8[$19>>0]=HEAP8[$22>>0]|0;\n  $17 = $56;\n  $18 = $57;\n  $58 = $17;\n  $59 = $18;\n  $15 = $58;\n  $16 = $59;\n }\n $60 = HEAP32[$35>>2]|0;\n $61 = ($60|0)!=(0|0);\n if (!($61)) {\n  STACKTOP = sp;return;\n }\n $14 = $35;\n $62 = $14;\n $63 = ((($62)) + 12|0);\n $13 = $63;\n $64 = $13;\n $65 = ((($64)) + 4|0);\n $12 = $65;\n $66 = $12;\n $67 = HEAP32[$66>>2]|0;\n $68 = HEAP32[$35>>2]|0;\n $4 = $35;\n $69 = $4;\n $3 = $69;\n $70 = $3;\n $71 = ((($70)) + 12|0);\n $2 = $71;\n $72 = $2;\n $1 = $72;\n $73 = $1;\n $74 = HEAP32[$73>>2]|0;\n $75 = HEAP32[$69>>2]|0;\n $76 = $74;\n $77 = $75;\n $78 = (($76) - ($77))|0;\n $79 = (($78|0) / 4)&-1;\n $9 = $67;\n $10 = $68;\n $11 = $79;\n $80 = $9;\n $81 = $10;\n $82 = $11;\n $6 = $80;\n $7 = $81;\n $8 = $82;\n $83 = $7;\n $5 = $83;\n $84 = $5;\n __ZdlPv($84);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0);\n $17 = sp;\n $22 = sp + 100|0;\n $27 = $0;\n $29 = $27;\n $26 = $29;\n $30 = $26;\n $31 = ((($30)) + 12|0);\n $25 = $31;\n $32 = $25;\n $33 = ((($32)) + 4|0);\n $24 = $33;\n $34 = $24;\n $35 = HEAP32[$34>>2]|0;\n $28 = $35;\n while(1) {\n  $5 = $1;\n  $6 = $2;\n  $36 = $5;\n  $4 = $36;\n  $37 = $4;\n  $38 = HEAP32[$37>>2]|0;\n  $39 = $6;\n  $3 = $39;\n  $40 = $3;\n  $41 = HEAP32[$40>>2]|0;\n  $42 = ($38|0)!=($41|0);\n  if (!($42)) {\n   break;\n  }\n  $43 = $28;\n  $44 = ((($29)) + 8|0);\n  $45 = HEAP32[$44>>2]|0;\n  $7 = $45;\n  $46 = $7;\n  $8 = $1;\n  $47 = $8;\n  $48 = HEAP32[$47>>2]|0;\n  $19 = $43;\n  $20 = $46;\n  $21 = $48;\n  $49 = $19;\n  $50 = $20;\n  $51 = $21;\n  $18 = $51;\n  $52 = $18;\n  ;HEAP8[$17>>0]=HEAP8[$22>>0]|0;\n  $14 = $49;\n  $15 = $50;\n  $16 = $52;\n  $53 = $14;\n  $54 = $15;\n  $55 = $16;\n  $13 = $55;\n  $56 = $13;\n  $10 = $53;\n  $11 = $54;\n  $12 = $56;\n  $57 = $11;\n  $58 = $12;\n  $9 = $58;\n  $59 = $9;\n  $60 = HEAP32[$59>>2]|0;\n  HEAP32[$57>>2] = $60;\n  $61 = ((($29)) + 8|0);\n  $62 = HEAP32[$61>>2]|0;\n  $63 = ((($62)) + 4|0);\n  HEAP32[$61>>2] = $63;\n  $23 = $1;\n  $64 = $23;\n  $65 = HEAP32[$64>>2]|0;\n  $66 = ((($65)) + 4|0);\n  HEAP32[$64>>2] = $66;\n }\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $7 = $1;\n $9 = $7;\n $6 = $9;\n $10 = $6;\n $11 = ((($10)) + 4|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($9)) + 16|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = (($14>>>0) / 93)&-1;\n $16 = (($12) + ($15<<2)|0);\n $8 = $16;\n $17 = $8;\n $5 = $9;\n $18 = $5;\n $19 = ((($18)) + 8|0);\n $20 = HEAP32[$19>>2]|0;\n $21 = ((($18)) + 4|0);\n $22 = HEAP32[$21>>2]|0;\n $23 = ($20|0)==($22|0);\n if ($23) {\n  $30 = 0;\n } else {\n  $24 = $8;\n  $25 = HEAP32[$24>>2]|0;\n  $26 = ((($9)) + 16|0);\n  $27 = HEAP32[$26>>2]|0;\n  $28 = (($27>>>0) % 93)&-1;\n  $29 = (($25) + (($28*44)|0)|0);\n  $30 = $29;\n }\n $2 = $0;\n $3 = $17;\n $4 = $30;\n $31 = $2;\n $32 = $3;\n HEAP32[$31>>2] = $32;\n $33 = ((($31)) + 4|0);\n $34 = $4;\n HEAP32[$33>>2] = $34;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = $1;\n $13 = $10;\n $9 = $13;\n $14 = $9;\n $15 = ((($14)) + 20|0);\n $8 = $15;\n $16 = $8;\n $7 = $16;\n $17 = $7;\n $18 = HEAP32[$17>>2]|0;\n $19 = ((($13)) + 16|0);\n $20 = HEAP32[$19>>2]|0;\n $21 = (($18) + ($20))|0;\n $11 = $21;\n $6 = $13;\n $22 = $6;\n $23 = ((($22)) + 4|0);\n $24 = HEAP32[$23>>2]|0;\n $25 = $11;\n $26 = (($25>>>0) / 93)&-1;\n $27 = (($24) + ($26<<2)|0);\n $12 = $27;\n $28 = $12;\n $2 = $13;\n $29 = $2;\n $30 = ((($29)) + 8|0);\n $31 = HEAP32[$30>>2]|0;\n $32 = ((($29)) + 4|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = ($31|0)==($33|0);\n if ($34) {\n  $40 = 0;\n  $3 = $0;\n  $4 = $28;\n  $5 = $40;\n  $41 = $3;\n  $42 = $4;\n  HEAP32[$41>>2] = $42;\n  $43 = ((($41)) + 4|0);\n  $44 = $5;\n  HEAP32[$43>>2] = $44;\n  STACKTOP = sp;return;\n }\n $35 = $12;\n $36 = HEAP32[$35>>2]|0;\n $37 = $11;\n $38 = (($37>>>0) % 93)&-1;\n $39 = (($36) + (($38*44)|0)|0);\n $40 = $39;\n $3 = $0;\n $4 = $28;\n $5 = $40;\n $41 = $3;\n $42 = $4;\n HEAP32[$41>>2] = $42;\n $43 = ((($41)) + 4|0);\n $44 = $5;\n HEAP32[$43>>2] = $44;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5clearEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;\n var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0;\n var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0;\n var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0;\n var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0;\n var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0);\n $6 = sp + 8|0;\n $9 = sp + 177|0;\n $26 = sp;\n $29 = sp + 176|0;\n $41 = sp + 24|0;\n $42 = sp + 16|0;\n $39 = $0;\n $43 = $39;\n $38 = $43;\n $44 = $38;\n $45 = ((($44)) + 20|0);\n $37 = $45;\n $46 = $37;\n $36 = $46;\n $47 = $36;\n $40 = $47;\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($41,$43);\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($42,$43);\n while(1) {\n  $34 = $41;\n  $35 = $42;\n  $48 = $34;\n  $49 = $35;\n  $32 = $48;\n  $33 = $49;\n  $50 = $32;\n  $51 = ((($50)) + 4|0);\n  $52 = HEAP32[$51>>2]|0;\n  $53 = $33;\n  $54 = ((($53)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $56 = ($52|0)==($55|0);\n  $57 = $56 ^ 1;\n  if (!($57)) {\n   break;\n  }\n  $58 = $40;\n  $16 = $41;\n  $59 = $16;\n  $60 = ((($59)) + 4|0);\n  $61 = HEAP32[$60>>2]|0;\n  $1 = $61;\n  $62 = $1;\n  $7 = $58;\n  $8 = $62;\n  $63 = $7;\n  $64 = $8;\n  ;HEAP8[$6>>0]=HEAP8[$9>>0]|0;\n  $4 = $63;\n  $5 = $64;\n  $65 = $4;\n  $66 = $5;\n  $2 = $65;\n  $3 = $66;\n  $67 = $3;\n  __ZN6laszip6models10arithmeticD2Ev($67);\n  $10 = $41;\n  $68 = $10;\n  $69 = ((($68)) + 4|0);\n  $70 = HEAP32[$69>>2]|0;\n  $71 = ((($70)) + 44|0);\n  HEAP32[$69>>2] = $71;\n  $72 = HEAP32[$68>>2]|0;\n  $73 = HEAP32[$72>>2]|0;\n  $74 = $71;\n  $75 = $73;\n  $76 = (($74) - ($75))|0;\n  $77 = (($76|0) / 44)&-1;\n  $78 = ($77|0)==(93);\n  if ($78) {\n   $79 = HEAP32[$68>>2]|0;\n   $80 = ((($79)) + 4|0);\n   HEAP32[$68>>2] = $80;\n   $81 = HEAP32[$68>>2]|0;\n   $82 = HEAP32[$81>>2]|0;\n   $83 = ((($68)) + 4|0);\n   HEAP32[$83>>2] = $82;\n  }\n }\n $13 = $43;\n $84 = $13;\n $85 = ((($84)) + 20|0);\n $12 = $85;\n $86 = $12;\n $11 = $86;\n $87 = $11;\n HEAP32[$87>>2] = 0;\n while(1) {\n  $14 = $43;\n  $88 = $14;\n  $89 = ((($88)) + 8|0);\n  $90 = HEAP32[$89>>2]|0;\n  $91 = ((($88)) + 4|0);\n  $92 = HEAP32[$91>>2]|0;\n  $93 = $90;\n  $94 = $92;\n  $95 = (($93) - ($94))|0;\n  $96 = (($95|0) / 4)&-1;\n  $97 = ($96>>>0)>(2);\n  if (!($97)) {\n   break;\n  }\n  $98 = $40;\n  $15 = $43;\n  $99 = $15;\n  $100 = ((($99)) + 4|0);\n  $101 = HEAP32[$100>>2]|0;\n  $102 = HEAP32[$101>>2]|0;\n  $21 = $98;\n  $22 = $102;\n  $23 = 93;\n  $103 = $21;\n  $104 = $22;\n  $105 = $23;\n  $18 = $103;\n  $19 = $104;\n  $20 = $105;\n  $106 = $19;\n  $17 = $106;\n  $107 = $17;\n  __ZdlPv($107);\n  $30 = $43;\n  $108 = $30;\n  $109 = ((($108)) + 4|0);\n  $110 = HEAP32[$109>>2]|0;\n  $111 = ((($110)) + 4|0);\n  $27 = $108;\n  $28 = $111;\n  $112 = $27;\n  $113 = $28;\n  ;HEAP8[$26>>0]=HEAP8[$29>>0]|0;\n  $24 = $112;\n  $25 = $113;\n  $114 = $24;\n  $115 = $25;\n  $116 = ((($114)) + 4|0);\n  HEAP32[$116>>2] = $115;\n }\n $31 = $43;\n $117 = $31;\n $118 = ((($117)) + 8|0);\n $119 = HEAP32[$118>>2]|0;\n $120 = ((($117)) + 4|0);\n $121 = HEAP32[$120>>2]|0;\n $122 = $119;\n $123 = $121;\n $124 = (($122) - ($123))|0;\n $125 = (($124|0) / 4)&-1;\n switch ($125|0) {\n case 1:  {\n  $126 = ((($43)) + 16|0);\n  HEAP32[$126>>2] = 46;\n  STACKTOP = sp;return;\n  break;\n }\n case 2:  {\n  $127 = ((($43)) + 16|0);\n  HEAP32[$127>>2] = 93;\n  STACKTOP = sp;return;\n  break;\n }\n default: {\n  STACKTOP = sp;return;\n }\n }\n}\nfunction __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $7 = $1;\n $9 = $7;\n $6 = $9;\n $10 = $6;\n $11 = ((($10)) + 4|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($9)) + 16|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = (($14>>>0) / 93)&-1;\n $16 = (($12) + ($15<<2)|0);\n $8 = $16;\n $17 = $8;\n $5 = $9;\n $18 = $5;\n $19 = ((($18)) + 8|0);\n $20 = HEAP32[$19>>2]|0;\n $21 = ((($18)) + 4|0);\n $22 = HEAP32[$21>>2]|0;\n $23 = ($20|0)==($22|0);\n if ($23) {\n  $30 = 0;\n } else {\n  $24 = $8;\n  $25 = HEAP32[$24>>2]|0;\n  $26 = ((($9)) + 16|0);\n  $27 = HEAP32[$26>>2]|0;\n  $28 = (($27>>>0) % 93)&-1;\n  $29 = (($25) + (($28*44)|0)|0);\n  $30 = $29;\n }\n $2 = $0;\n $3 = $17;\n $4 = $30;\n $31 = $2;\n $32 = $3;\n HEAP32[$31>>2] = $32;\n $33 = ((($31)) + 4|0);\n $34 = $4;\n HEAP32[$33>>2] = $34;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0;\n var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0;\n var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0;\n var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0;\n var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0;\n var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0;\n var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0;\n var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0);\n $5 = sp + 268|0;\n $8 = sp + 256|0;\n $13 = sp + 236|0;\n $16 = sp + 224|0;\n $28 = sp + 176|0;\n $31 = sp + 164|0;\n $46 = sp + 104|0;\n $50 = sp + 88|0;\n $63 = sp + 36|0;\n $64 = sp + 32|0;\n $65 = sp + 24|0;\n $66 = sp + 16|0;\n $67 = sp + 12|0;\n $68 = sp + 8|0;\n $69 = sp;\n $59 = $0;\n $60 = $1;\n $61 = $2;\n $70 = $59;\n $71 = ((($70)) + 4|0);\n $72 = HEAP8[$71>>0]|0;\n $73 = $72&1;\n if (!($73)) {\n  $74 = $60;\n  $75 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($74)|0);\n  $76 = $61;\n  $77 = HEAP32[$70>>2]|0;\n  __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($75,$76,$77);\n  $78 = $61;\n  $79 = $61;\n  $80 = HEAP32[$70>>2]|0;\n  $81 = (($79) + ($80)|0);\n  $82 = ((($70)) + 8|0);\n  $57 = $82;\n  $83 = $57;\n  $84 = HEAP32[$83>>2]|0;\n  $56 = $84;\n  $85 = $56;\n  $39 = $78;\n  $40 = $81;\n  $41 = $85;\n  $86 = $39;\n  $38 = $86;\n  $87 = $38;\n  $88 = $40;\n  $33 = $88;\n  $89 = $33;\n  $90 = $41;\n  $34 = $90;\n  $91 = $34;\n  $35 = $87;\n  $36 = $89;\n  $37 = $91;\n  while(1) {\n   $92 = $35;\n   $93 = $36;\n   $94 = ($92|0)!=($93|0);\n   if (!($94)) {\n    break;\n   }\n   $95 = $35;\n   $96 = HEAP8[$95>>0]|0;\n   $97 = $37;\n   HEAP8[$97>>0] = $96;\n   $98 = $35;\n   $99 = ((($98)) + 1|0);\n   $35 = $99;\n   $100 = $37;\n   $101 = ((($100)) + 1|0);\n   $37 = $101;\n  }\n  $102 = ((($70)) + 4|0);\n  HEAP8[$102>>0] = 1;\n  $103 = $61;\n  $104 = HEAP32[$70>>2]|0;\n  $105 = (($103) + ($104)|0);\n  $58 = $105;\n  $193 = $58;\n  STACKTOP = sp;return ($193|0);\n }\n $106 = ((($70)) + 20|0);\n $62 = $106;\n $107 = $62;\n $32 = $107;\n $108 = $32;\n $109 = HEAP32[$108>>2]|0;\n $29 = $108;\n $30 = $109;\n $110 = $30;\n $26 = $28;\n $27 = $110;\n $111 = $26;\n $112 = $27;\n HEAP32[$111>>2] = $112;\n $113 = HEAP32[$28>>2]|0;\n HEAP32[$31>>2] = $113;\n $114 = HEAP32[$31>>2]|0;\n HEAP32[$63>>2] = $114;\n $115 = ((($70)) + 8|0);\n $9 = $115;\n $116 = $9;\n $117 = HEAP32[$116>>2]|0;\n $6 = $116;\n $7 = $117;\n $118 = $7;\n $3 = $5;\n $4 = $118;\n $119 = $3;\n $120 = $4;\n HEAP32[$119>>2] = $120;\n $121 = HEAP32[$5>>2]|0;\n HEAP32[$8>>2] = $121;\n $122 = HEAP32[$8>>2]|0;\n HEAP32[$64>>2] = $122;\n $123 = ((($70)) + 32|0);\n $10 = $123;\n $124 = $10;\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($65,$124);\n while(1) {\n  $125 = ((($70)) + 8|0);\n  $17 = $125;\n  $126 = $17;\n  $127 = ((($126)) + 4|0);\n  $128 = HEAP32[$127>>2]|0;\n  $14 = $126;\n  $15 = $128;\n  $129 = $15;\n  $11 = $13;\n  $12 = $129;\n  $130 = $11;\n  $131 = $12;\n  HEAP32[$130>>2] = $131;\n  $132 = HEAP32[$13>>2]|0;\n  HEAP32[$16>>2] = $132;\n  $133 = HEAP32[$16>>2]|0;\n  HEAP32[$66>>2] = $133;\n  $22 = $64;\n  $23 = $66;\n  $134 = $22;\n  $135 = $23;\n  $20 = $134;\n  $21 = $135;\n  $136 = $20;\n  $19 = $136;\n  $137 = $19;\n  $138 = HEAP32[$137>>2]|0;\n  $139 = $21;\n  $18 = $139;\n  $140 = $18;\n  $141 = HEAP32[$140>>2]|0;\n  $142 = ($138|0)==($141|0);\n  $143 = $142 ^ 1;\n  if (!($143)) {\n   break;\n  }\n  $24 = $64;\n  $144 = $24;\n  $145 = HEAP32[$144>>2]|0;\n  $146 = HEAP8[$145>>0]|0;\n  $147 = $146&255;\n  $148 = $60;\n  $25 = $65;\n  $149 = $25;\n  $150 = ((($149)) + 4|0);\n  $151 = HEAP32[$150>>2]|0;\n  $152 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($148,$151)|0);\n  $153 = (($147) + ($152))|0;\n  $154 = (__Z7u8_foldi($153)|0);\n  $42 = $63;\n  $155 = $42;\n  $156 = HEAP32[$155>>2]|0;\n  HEAP8[$156>>0] = $154;\n  $43 = $63;\n  $157 = $43;\n  $158 = HEAP32[$157>>2]|0;\n  $159 = HEAP8[$158>>0]|0;\n  $160 = $61;\n  HEAP8[$160>>0] = $159;\n  $44 = $64;\n  $161 = $44;\n  $162 = HEAP32[$161>>2]|0;\n  HEAP8[$162>>0] = $159;\n  $47 = $64;\n  $48 = 0;\n  $163 = $47;\n  ;HEAP32[$46>>2]=HEAP32[$163>>2]|0;\n  $45 = $163;\n  $164 = $45;\n  $165 = HEAP32[$164>>2]|0;\n  $166 = ((($165)) + 1|0);\n  HEAP32[$164>>2] = $166;\n  $167 = HEAP32[$46>>2]|0;\n  HEAP32[$67>>2] = $167;\n  $168 = $61;\n  $169 = ((($168)) + 1|0);\n  $61 = $169;\n  $51 = $63;\n  $52 = 0;\n  $170 = $51;\n  ;HEAP32[$50>>2]=HEAP32[$170>>2]|0;\n  $49 = $170;\n  $171 = $49;\n  $172 = HEAP32[$171>>2]|0;\n  $173 = ((($172)) + 1|0);\n  HEAP32[$171>>2] = $173;\n  $174 = HEAP32[$50>>2]|0;\n  HEAP32[$68>>2] = $174;\n  $54 = $65;\n  $55 = 0;\n  $175 = $54;\n  ;HEAP32[$69>>2]=HEAP32[$175>>2]|0;HEAP32[$69+4>>2]=HEAP32[$175+4>>2]|0;\n  $53 = $175;\n  $176 = $53;\n  $177 = ((($176)) + 4|0);\n  $178 = HEAP32[$177>>2]|0;\n  $179 = ((($178)) + 44|0);\n  HEAP32[$177>>2] = $179;\n  $180 = HEAP32[$176>>2]|0;\n  $181 = HEAP32[$180>>2]|0;\n  $182 = $179;\n  $183 = $181;\n  $184 = (($182) - ($183))|0;\n  $185 = (($184|0) / 44)&-1;\n  $186 = ($185|0)==(93);\n  if ($186) {\n   $187 = HEAP32[$176>>2]|0;\n   $188 = ((($187)) + 4|0);\n   HEAP32[$176>>2] = $188;\n   $189 = HEAP32[$176>>2]|0;\n   $190 = HEAP32[$189>>2]|0;\n   $191 = ((($176)) + 4|0);\n   HEAP32[$191>>2] = $190;\n  }\n }\n $192 = $61;\n $58 = $192;\n $193 = $58;\n STACKTOP = sp;return ($193|0);\n}\nfunction __Z7u8_foldi($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = $2&255;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 480;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $12 = sp + 8|0;\n $13 = $0;\n $14 = $1;\n $15 = $13;\n $11 = $15;\n $16 = $11;\n $10 = $16;\n HEAP32[$16>>2] = 0;\n $17 = ((($16)) + 4|0);\n HEAP32[$17>>2] = 0;\n $18 = ((($16)) + 8|0);\n HEAP32[$12>>2] = 0;\n $8 = $18;\n $9 = $12;\n $19 = $8;\n $20 = $9;\n $7 = $20;\n $21 = $7;\n $3 = $19;\n $4 = $21;\n $22 = $3;\n $23 = $4;\n $2 = $23;\n HEAP32[$22>>2] = 0;\n $6 = $19;\n $24 = $6;\n $5 = $24;\n $25 = $14;\n $26 = ($25>>>0)>(0);\n if (!($26)) {\n  STACKTOP = sp;return;\n }\n $27 = $14;\n __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($15,$27);\n $28 = $14;\n __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endEj($15,$28);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2EjRKS3_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0);\n $20 = sp + 20|0;\n $22 = sp + 12|0;\n $23 = $0;\n $24 = $1;\n $25 = $2;\n $26 = $23;\n $21 = $26;\n $27 = $21;\n $19 = $27;\n $28 = $19;\n HEAP32[$28>>2] = 0;\n $29 = ((($28)) + 4|0);\n HEAP32[$29>>2] = 0;\n $30 = ((($28)) + 8|0);\n HEAP32[$30>>2] = 0;\n $31 = ((($28)) + 12|0);\n HEAP32[$20>>2] = 0;\n $17 = $31;\n $18 = $20;\n $32 = $17;\n $33 = $18;\n $16 = $33;\n $34 = $16;\n $12 = $32;\n $13 = $34;\n $35 = $12;\n $36 = $13;\n $11 = $36;\n HEAP32[$35>>2] = 0;\n $15 = $32;\n $37 = $15;\n $14 = $37;\n $38 = ((($27)) + 16|0);\n HEAP32[$38>>2] = 0;\n $39 = ((($27)) + 20|0);\n HEAP32[$22>>2] = 0;\n $9 = $39;\n $10 = $22;\n $40 = $9;\n $41 = $10;\n $8 = $41;\n $42 = $8;\n $4 = $40;\n $5 = $42;\n $43 = $4;\n $44 = $5;\n $3 = $44;\n $45 = $3;\n $46 = HEAP32[$45>>2]|0;\n HEAP32[$43>>2] = $46;\n $7 = $40;\n $47 = $7;\n $6 = $47;\n $48 = $24;\n $49 = ($48>>>0)>(0);\n if (!($49)) {\n  STACKTOP = sp;return;\n }\n $50 = $24;\n $51 = $25;\n __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendEjRKS3_($26,$50,$51);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0);\n $10 = sp;\n $13 = sp + 73|0;\n $21 = sp + 72|0;\n $18 = $0;\n $19 = $1;\n $22 = $18;\n $17 = $22;\n $23 = $17;\n $24 = ((($23)) + 8|0);\n $16 = $24;\n $25 = $16;\n $15 = $25;\n $26 = $15;\n $20 = $26;\n while(1) {\n  $2 = $21;\n  $3 = $22;\n  $4 = 1;\n  $27 = $20;\n  $28 = ((($22)) + 4|0);\n  $29 = HEAP32[$28>>2]|0;\n  $5 = $29;\n  $30 = $5;\n  $11 = $27;\n  $12 = $30;\n  $31 = $11;\n  $32 = $12;\n  ;HEAP8[$10>>0]=HEAP8[$13>>0]|0;\n  $8 = $31;\n  $9 = $32;\n  $33 = $8;\n  $34 = $9;\n  $6 = $33;\n  $7 = $34;\n  $35 = $7;\n  HEAP8[$35>>0] = 0;\n  $36 = ((($22)) + 4|0);\n  $37 = HEAP32[$36>>2]|0;\n  $38 = ((($37)) + 1|0);\n  HEAP32[$36>>2] = $38;\n  $39 = $19;\n  $40 = (($39) + -1)|0;\n  $19 = $40;\n  $14 = $21;\n  $41 = $19;\n  $42 = ($41>>>0)>(0);\n  if (!($42)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendEjRKS3_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;\n var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0;\n var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0;\n var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0;\n var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0;\n var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $20 = sp;\n $25 = sp + 148|0;\n $38 = sp + 8|0;\n $33 = $0;\n $34 = $1;\n $35 = $2;\n $39 = $33;\n $32 = $39;\n $40 = $32;\n $41 = ((($40)) + 20|0);\n $31 = $41;\n $42 = $31;\n $30 = $42;\n $43 = $30;\n $36 = $43;\n $11 = $39;\n $44 = $11;\n $10 = $44;\n $45 = $10;\n $9 = $45;\n $46 = $9;\n $47 = ((($46)) + 8|0);\n $48 = HEAP32[$47>>2]|0;\n $49 = ((($46)) + 4|0);\n $50 = HEAP32[$49>>2]|0;\n $51 = $48;\n $52 = $50;\n $53 = (($51) - ($52))|0;\n $54 = (($53|0) / 4)&-1;\n $55 = ($54|0)==(0);\n if ($55) {\n  $76 = 0;\n } else {\n  $8 = $45;\n  $56 = $8;\n  $57 = ((($56)) + 8|0);\n  $58 = HEAP32[$57>>2]|0;\n  $59 = ((($56)) + 4|0);\n  $60 = HEAP32[$59>>2]|0;\n  $61 = $58;\n  $62 = $60;\n  $63 = (($61) - ($62))|0;\n  $64 = (($63|0) / 4)&-1;\n  $65 = ($64*93)|0;\n  $66 = (($65) - 1)|0;\n  $76 = $66;\n }\n $67 = ((($44)) + 16|0);\n $68 = HEAP32[$67>>2]|0;\n $7 = $44;\n $69 = $7;\n $70 = ((($69)) + 20|0);\n $6 = $70;\n $71 = $6;\n $5 = $71;\n $72 = $5;\n $73 = HEAP32[$72>>2]|0;\n $74 = (($68) + ($73))|0;\n $75 = (($76) - ($74))|0;\n $37 = $75;\n $77 = $34;\n $78 = $37;\n $79 = ($77>>>0)>($78>>>0);\n if ($79) {\n  $80 = $34;\n  $81 = $37;\n  $82 = (($80) - ($81))|0;\n  __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($39,$82);\n }\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($38,$39);\n while(1) {\n  $83 = $34;\n  $84 = ($83|0)!=(0);\n  if (!($84)) {\n   break;\n  }\n  $85 = $36;\n  $3 = $38;\n  $86 = $3;\n  $87 = ((($86)) + 4|0);\n  $88 = HEAP32[$87>>2]|0;\n  $4 = $88;\n  $89 = $4;\n  $90 = $35;\n  $22 = $85;\n  $23 = $89;\n  $24 = $90;\n  $91 = $22;\n  $92 = $23;\n  $93 = $24;\n  $21 = $93;\n  $94 = $21;\n  ;HEAP8[$20>>0]=HEAP8[$25>>0]|0;\n  $17 = $91;\n  $18 = $92;\n  $19 = $94;\n  $95 = $17;\n  $96 = $18;\n  $97 = $19;\n  $16 = $97;\n  $98 = $16;\n  $13 = $95;\n  $14 = $96;\n  $15 = $98;\n  $99 = $14;\n  $100 = $15;\n  $12 = $100;\n  $101 = $12;\n  __ZN6laszip6models10arithmeticC2ERKS1_($99,$101);\n  $102 = $34;\n  $103 = (($102) + -1)|0;\n  $34 = $103;\n  $26 = $38;\n  $104 = $26;\n  $105 = ((($104)) + 4|0);\n  $106 = HEAP32[$105>>2]|0;\n  $107 = ((($106)) + 44|0);\n  HEAP32[$105>>2] = $107;\n  $108 = HEAP32[$104>>2]|0;\n  $109 = HEAP32[$108>>2]|0;\n  $110 = $107;\n  $111 = $109;\n  $112 = (($110) - ($111))|0;\n  $113 = (($112|0) / 44)&-1;\n  $114 = ($113|0)==(93);\n  if ($114) {\n   $115 = HEAP32[$104>>2]|0;\n   $116 = ((($115)) + 4|0);\n   HEAP32[$104>>2] = $116;\n   $117 = HEAP32[$104>>2]|0;\n   $118 = HEAP32[$117>>2]|0;\n   $119 = ((($104)) + 4|0);\n   HEAP32[$119>>2] = $118;\n  }\n  $29 = $39;\n  $120 = $29;\n  $121 = ((($120)) + 20|0);\n  $28 = $121;\n  $122 = $28;\n  $27 = $122;\n  $123 = $27;\n  $124 = HEAP32[$123>>2]|0;\n  $125 = (($124) + 1)|0;\n  HEAP32[$123>>2] = $125;\n }\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEC2ERS9_PSH_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 12|0;\n $11 = $0;\n $12 = $1;\n $13 = $2;\n $14 = $11;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($14);\n HEAP32[$14>>2] = (2256);\n $15 = ((($14)) + 4|0);\n $16 = $12;\n HEAP32[$15>>2] = $16;\n $17 = ((($14)) + 8|0);\n $18 = $13;\n $9 = $17;\n HEAP32[$10>>2] = $18;\n $19 = $9;\n $7 = $19;\n $8 = $10;\n $20 = $7;\n $21 = $8;\n $6 = $21;\n $22 = $6;\n $4 = $20;\n $5 = $22;\n $23 = $4;\n $24 = $5;\n $3 = $24;\n $25 = $3;\n $26 = HEAP32[$25>>2]|0;\n HEAP32[$23>>2] = $26;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISP_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2276);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 8|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $2 = $10;\n $11 = $2;\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($7)) + 4|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $6;\n $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($12,$14,$15)|0);\n STACKTOP = sp;return ($16|0);\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $14 = $13;\n HEAP32[$14>>2] = (2256);\n $15 = ((($14)) + 8|0);\n $12 = $15;\n $16 = $12;\n $9 = $16;\n $10 = 0;\n $17 = $9;\n $8 = $17;\n $18 = $8;\n $7 = $18;\n $19 = $7;\n $20 = HEAP32[$19>>2]|0;\n $11 = $20;\n $21 = $10;\n $4 = $17;\n $22 = $4;\n $3 = $22;\n $23 = $3;\n HEAP32[$23>>2] = $21;\n $24 = $11;\n $25 = ($24|0)!=(0|0);\n if ($25) {\n  $2 = $17;\n  $26 = $2;\n  $1 = $26;\n  $27 = $1;\n  $28 = $11;\n  $5 = $27;\n  $6 = $28;\n  $29 = $6;\n  $30 = ($29|0)==(0|0);\n  if (!($30)) {\n   __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEED2Ev($29);\n   __ZdlPv($29);\n  }\n }\n __ZN6laszip7formats20dynamic_decompressorD2Ev($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 4784|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = HEAP8[$6>>0]|0;\n $8 = $7&1;\n if (!($8)) {\n  $10 = $5;\n  STACKTOP = sp;return ($10|0);\n }\n $9 = $4;\n __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($9);\n HEAP8[$6>>0] = 0;\n $10 = $5;\n STACKTOP = sp;return ($10|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 520;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP8[$2>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEC2ERS9_PSK_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 12|0;\n $11 = $0;\n $12 = $1;\n $13 = $2;\n $14 = $11;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($14);\n HEAP32[$14>>2] = (2304);\n $15 = ((($14)) + 4|0);\n $16 = $12;\n HEAP32[$15>>2] = $16;\n $17 = ((($14)) + 8|0);\n $18 = $13;\n $9 = $17;\n HEAP32[$10>>2] = $18;\n $19 = $9;\n $7 = $19;\n $8 = $10;\n $20 = $7;\n $21 = $8;\n $6 = $21;\n $22 = $6;\n $4 = $20;\n $5 = $22;\n $23 = $4;\n $24 = $5;\n $3 = $24;\n $25 = $3;\n $26 = HEAP32[$25>>2]|0;\n HEAP32[$23>>2] = $26;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2324);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 8|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $2 = $10;\n $11 = $2;\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($7)) + 4|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $6;\n $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($12,$14,$15)|0);\n STACKTOP = sp;return ($16|0);\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $14 = $13;\n HEAP32[$14>>2] = (2304);\n $15 = ((($14)) + 8|0);\n $12 = $15;\n $16 = $12;\n $9 = $16;\n $10 = 0;\n $17 = $9;\n $8 = $17;\n $18 = $8;\n $7 = $18;\n $19 = $7;\n $20 = HEAP32[$19>>2]|0;\n $11 = $20;\n $21 = $10;\n $4 = $17;\n $22 = $4;\n $3 = $22;\n $23 = $3;\n HEAP32[$23>>2] = $21;\n $24 = $11;\n $25 = ($24|0)!=(0|0);\n if ($25) {\n  $2 = $17;\n  $26 = $2;\n  $1 = $26;\n  $27 = $1;\n  $28 = $11;\n  $5 = $27;\n  $6 = $28;\n  $29 = $6;\n  $30 = ($29|0)==(0|0);\n  if (!($30)) {\n   __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEED2Ev($29);\n   __ZdlPv($29);\n  }\n }\n __ZN6laszip7formats20dynamic_decompressorD2Ev($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 4784|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 328|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEED2Ev($3);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 560;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 328|0);\n __ZN6laszip7formats19record_decompressorIJEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEC2ERS9_PSK_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 12|0;\n $11 = $0;\n $12 = $1;\n $13 = $2;\n $14 = $11;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($14);\n HEAP32[$14>>2] = (2352);\n $15 = ((($14)) + 4|0);\n $16 = $12;\n HEAP32[$15>>2] = $16;\n $17 = ((($14)) + 8|0);\n $18 = $13;\n $9 = $17;\n HEAP32[$10>>2] = $18;\n $19 = $9;\n $7 = $19;\n $8 = $10;\n $20 = $7;\n $21 = $8;\n $6 = $21;\n $22 = $6;\n $4 = $20;\n $5 = $22;\n $23 = $4;\n $24 = $5;\n $3 = $24;\n $25 = $3;\n $26 = HEAP32[$25>>2]|0;\n HEAP32[$23>>2] = $26;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_3rgbENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2372);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 8|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $2 = $10;\n $11 = $2;\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($7)) + 4|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $6;\n $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($12,$14,$15)|0);\n STACKTOP = sp;return ($16|0);\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $14 = $13;\n HEAP32[$14>>2] = (2352);\n $15 = ((($14)) + 8|0);\n $12 = $15;\n $16 = $12;\n $9 = $16;\n $10 = 0;\n $17 = $9;\n $8 = $17;\n $18 = $8;\n $7 = $18;\n $19 = $7;\n $20 = HEAP32[$19>>2]|0;\n $11 = $20;\n $21 = $10;\n $4 = $17;\n $22 = $4;\n $3 = $22;\n $23 = $3;\n HEAP32[$23>>2] = $21;\n $24 = $11;\n $25 = ($24|0)!=(0|0);\n if ($25) {\n  $2 = $17;\n  $26 = $2;\n  $1 = $26;\n  $27 = $1;\n  $28 = $11;\n  $5 = $27;\n  $6 = $28;\n  $29 = $6;\n  $30 = ($29|0)==(0|0);\n  if (!($30)) {\n   __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($29);\n   __ZdlPv($29);\n  }\n }\n __ZN6laszip7formats20dynamic_decompressorD2Ev($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 4784|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 316|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($3);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 600;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 316|0);\n __ZN6laszip7formats19record_decompressorIJEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEC2ERS9_PSN_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $10 = sp + 12|0;\n $11 = $0;\n $12 = $1;\n $13 = $2;\n $14 = $11;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($14);\n HEAP32[$14>>2] = (2400);\n $15 = ((($14)) + 4|0);\n $16 = $12;\n HEAP32[$15>>2] = $16;\n $17 = ((($14)) + 8|0);\n $18 = $13;\n $9 = $17;\n HEAP32[$10>>2] = $18;\n $19 = $9;\n $7 = $19;\n $8 = $10;\n $20 = $7;\n $21 = $8;\n $6 = $21;\n $22 = $6;\n $4 = $20;\n $5 = $22;\n $23 = $4;\n $24 = $5;\n $3 = $24;\n $25 = $3;\n $26 = HEAP32[$25>>2]|0;\n HEAP32[$23>>2] = $26;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEENSG_INSH_3rgbENSJ_ISP_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISV_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2420);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $5 = $0;\n $6 = $1;\n $7 = $5;\n $8 = ((($7)) + 8|0);\n $4 = $8;\n $9 = $4;\n $3 = $9;\n $10 = $3;\n $2 = $10;\n $11 = $2;\n $12 = HEAP32[$11>>2]|0;\n $13 = ((($7)) + 4|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $6;\n $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SO_($12,$14,$15)|0);\n STACKTOP = sp;return ($16|0);\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $13 = $0;\n $14 = $13;\n HEAP32[$14>>2] = (2400);\n $15 = ((($14)) + 8|0);\n $12 = $15;\n $16 = $12;\n $9 = $16;\n $10 = 0;\n $17 = $9;\n $8 = $17;\n $18 = $8;\n $7 = $18;\n $19 = $7;\n $20 = HEAP32[$19>>2]|0;\n $11 = $20;\n $21 = $10;\n $4 = $17;\n $22 = $4;\n $3 = $22;\n $23 = $3;\n HEAP32[$23>>2] = $21;\n $24 = $11;\n $25 = ($24|0)!=(0|0);\n if ($25) {\n  $2 = $17;\n  $26 = $2;\n  $1 = $26;\n  $27 = $1;\n  $28 = $11;\n  $5 = $27;\n  $6 = $28;\n  $29 = $6;\n  $30 = ($29|0)==(0|0);\n  if (!($30)) {\n   __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEED2Ev($29);\n   __ZdlPv($29);\n  }\n }\n __ZN6laszip7formats20dynamic_decompressorD2Ev($14);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SO_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 4784|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n $8 = $5;\n $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0);\n $5 = $9;\n $10 = ((($6)) + 328|0);\n $11 = $4;\n $12 = $5;\n $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0);\n STACKTOP = sp;return ($13|0);\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4784|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($3);\n __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 328|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($3);\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 640;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($2);\n $3 = ((($2)) + 328|0);\n __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3);\n STACKTOP = sp;return;\n}\nfunction __ZNK6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10get_headerEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 20|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10buf_streamC2EPhj($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $3;\n $7 = $4;\n HEAP32[$6>>2] = $7;\n $8 = ((($6)) + 4|0);\n $9 = $5;\n HEAP32[$8>>2] = $9;\n $10 = ((($6)) + 8|0);\n HEAP32[$10>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamEC2ERS2_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP32[$4>>2] = $5;\n $6 = ((($4)) + 4|0);\n HEAP32[$6>>2] = 0;\n $7 = ((($4)) + 8|0);\n HEAP32[$7>>2] = -1;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticI10buf_streamEEEENS0_26dynamic_field_decompressorIT_E3ptrERS7_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $$byval_copy = sp + 8|0;\n $3 = sp;\n $2 = $1;\n $4 = (__Znwj(24)|0);\n $5 = $2;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEEC2ERS5_($4,$5);\n ;HEAP32[$3>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEEC2IS8_EEPT_NS_9enable_ifIXsr14is_convertibleISC_PS8_EE5valueENS9_5__natEE4typeE($0,$4,$$byval_copy);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrI10buf_streamEC2IS1_EEPT_NS_9enable_ifIXsr14is_convertibleIS5_PS1_EE5valueENS2_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2448);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrI10buf_streamE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrI10buf_streamED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrI10buf_streamE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 664;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEEC2IS5_EEPT_NS_9enable_ifIXsr14is_convertibleIS9_PS5_EE5valueENS6_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0;\n var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0;\n var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0;\n var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $50 = sp + 76|0;\n $51 = sp + 72|0;\n $52 = sp + 8|0;\n $53 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$52>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$53>>0]=HEAP8[$66>>0]|0;\n $49 = $79;\n HEAP32[$50>>2] = $80;\n $81 = $49;\n $47 = $81;\n $48 = 0;\n $82 = $47;\n $83 = $48;\n $45 = $82;\n $46 = $83;\n $84 = $45;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $46;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $48;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2476);\n $89 = ((($81)) + 12|0);\n $21 = $53;\n $90 = $21;\n $30 = $51;\n $31 = $50;\n $32 = $90;\n $91 = $30;\n $92 = $31;\n $29 = $92;\n $93 = $29;\n $23 = $91;\n $24 = $93;\n $94 = $23;\n $95 = $24;\n $22 = $95;\n $96 = $22;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $32;\n $25 = $98;\n $99 = $25;\n $27 = $91;\n $28 = $99;\n $100 = $28;\n $26 = $100;\n $33 = $52;\n $101 = $33;\n $42 = $89;\n $43 = $51;\n $44 = $101;\n $102 = $42;\n $103 = $43;\n $41 = $103;\n $104 = $41;\n $35 = $102;\n $36 = $104;\n $105 = $35;\n $106 = $36;\n $34 = $106;\n $107 = $34;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $44;\n $37 = $108;\n $109 = $37;\n $39 = $102;\n $40 = $109;\n $110 = $40;\n $38 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $20 = $65;\n $120 = $20;\n $17 = $120;\n $18 = 0;\n $121 = $17;\n $16 = $121;\n $122 = $16;\n $15 = $122;\n $123 = $15;\n $124 = HEAP32[$123>>2]|0;\n $19 = $124;\n $125 = $18;\n $12 = $121;\n $126 = $12;\n $11 = $126;\n $127 = $11;\n HEAP32[$127>>2] = $125;\n $128 = $19;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $10 = $121;\n $130 = $10;\n $9 = $130;\n $131 = $9;\n $132 = $19;\n $13 = $131;\n $14 = $132;\n $133 = $14;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($133);\n __ZdlPv($133);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($0) {\n $0 = $0|0;\n var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $4 = sp + 24|0;\n $7 = $0;\n $8 = $7;\n $9 = ((($8)) + 4|0);\n $10 = HEAP32[$9>>2]|0;\n $11 = ($10|0)!=(0|0);\n if (!($11)) {\n  STACKTOP = sp;return;\n }\n $12 = ((($8)) + 4|0);\n $13 = HEAP32[$12>>2]|0;\n $6 = $13;\n $14 = $6;\n $5 = $14;\n $15 = $5;\n $16 = ((($15)) + 4|0);\n $1 = $16;\n $17 = $1;\n $2 = -1;\n $18 = $2;\n $19 = HEAP32[$17>>2]|0;\n $20 = (($19) + ($18))|0;\n HEAP32[$17>>2] = $20;\n $21 = (($19) + ($18))|0;\n $3 = $21;\n $22 = $3;\n $23 = ($22|0)==(-1);\n if ($23) {\n  $24 = HEAP32[$15>>2]|0;\n  $25 = ((($24)) + 8|0);\n  $26 = HEAP32[$25>>2]|0;\n  FUNCTION_TABLE_vi[$26 & 511]($15);\n  $$expand_i1_val = 1;\n  HEAP8[$4>>0] = $$expand_i1_val;\n } else {\n  $$expand_i1_val2 = 0;\n  HEAP8[$4>>0] = $$expand_i1_val2;\n }\n $$pre_trunc = HEAP8[$4>>0]|0;\n $27 = $$pre_trunc&1;\n if (!($27)) {\n  STACKTOP = sp;return;\n }\n __ZNSt3__219__shared_weak_count14__release_weakEv($14);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $4 = $22;\n $23 = $4;\n $3 = $23;\n $24 = $3;\n $2 = $24;\n $25 = $2;\n $1 = $25;\n $26 = $1;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($28);\n  __ZdlPv($28);\n }\n $30 = ((($16)) + 12|0);\n $10 = $30;\n $31 = $10;\n $9 = $31;\n $32 = $9;\n $12 = $32;\n $33 = $12;\n $11 = $33;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 688;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $12 = sp + 12|0;\n $14 = $0;\n $15 = $1;\n $16 = $14;\n __ZN6laszip7formats20dynamic_decompressorC2Ev($16);\n HEAP32[$16>>2] = (2504);\n $17 = ((($16)) + 4|0);\n $18 = $15;\n HEAP32[$17>>2] = $18;\n $19 = ((($16)) + 8|0);\n $13 = $19;\n $20 = $13;\n $11 = $20;\n $21 = $11;\n $10 = $21;\n HEAP32[$21>>2] = 0;\n $22 = ((($21)) + 4|0);\n HEAP32[$22>>2] = 0;\n $23 = ((($21)) + 8|0);\n HEAP32[$12>>2] = 0;\n $8 = $23;\n $9 = $12;\n $24 = $8;\n $25 = $9;\n $7 = $25;\n $26 = $7;\n $3 = $24;\n $4 = $26;\n $27 = $3;\n $28 = $4;\n $2 = $28;\n HEAP32[$27>>2] = 0;\n $6 = $24;\n $29 = $6;\n $5 = $29;\n $30 = ((($16)) + 20|0);\n HEAP8[$30>>0] = 1;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEEC2IS8_EEPT_NS_9enable_ifIXsr14is_convertibleISC_PS8_EE5valueENS9_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2524);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 8|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE10decompressEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0;\n var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;\n var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;\n var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0;\n var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $20 = sp + 72|0;\n $23 = sp + 60|0;\n $27 = sp + 44|0;\n $30 = sp + 32|0;\n $35 = sp + 12|0;\n $36 = sp + 8|0;\n $37 = sp;\n $32 = $0;\n $33 = $1;\n $38 = $32;\n $39 = ((($38)) + 8|0);\n $34 = $39;\n $40 = $34;\n $31 = $40;\n $41 = $31;\n $42 = HEAP32[$41>>2]|0;\n $28 = $41;\n $29 = $42;\n $43 = $29;\n $25 = $27;\n $26 = $43;\n $44 = $25;\n $45 = $26;\n HEAP32[$44>>2] = $45;\n $46 = HEAP32[$27>>2]|0;\n HEAP32[$30>>2] = $46;\n $47 = HEAP32[$30>>2]|0;\n HEAP32[$35>>2] = $47;\n $48 = $34;\n $24 = $48;\n $49 = $24;\n $50 = ((($49)) + 4|0);\n $51 = HEAP32[$50>>2]|0;\n $21 = $49;\n $22 = $51;\n $52 = $22;\n $18 = $20;\n $19 = $52;\n $53 = $18;\n $54 = $19;\n HEAP32[$53>>2] = $54;\n $55 = HEAP32[$20>>2]|0;\n HEAP32[$23>>2] = $55;\n $56 = HEAP32[$23>>2]|0;\n HEAP32[$36>>2] = $56;\n while(1) {\n  $16 = $35;\n  $17 = $36;\n  $57 = $16;\n  $58 = $17;\n  $14 = $57;\n  $15 = $58;\n  $59 = $14;\n  $13 = $59;\n  $60 = $13;\n  $61 = HEAP32[$60>>2]|0;\n  $62 = $15;\n  $12 = $62;\n  $63 = $12;\n  $64 = HEAP32[$63>>2]|0;\n  $65 = ($61|0)==($64|0);\n  $66 = $65 ^ 1;\n  if (!($66)) {\n   break;\n  }\n  $10 = $35;\n  $67 = $10;\n  $68 = HEAP32[$67>>2]|0;\n  $8 = $37;\n  $9 = $68;\n  $69 = $8;\n  $70 = $9;\n  $71 = HEAP32[$70>>2]|0;\n  HEAP32[$69>>2] = $71;\n  $72 = ((($69)) + 4|0);\n  $73 = $9;\n  $74 = ((($73)) + 4|0);\n  $75 = HEAP32[$74>>2]|0;\n  HEAP32[$72>>2] = $75;\n  $76 = ((($69)) + 4|0);\n  $77 = HEAP32[$76>>2]|0;\n  $78 = ($77|0)!=(0|0);\n  if ($78) {\n   $79 = ((($69)) + 4|0);\n   $80 = HEAP32[$79>>2]|0;\n   $7 = $80;\n   $81 = $7;\n   $6 = $81;\n   $82 = $6;\n   $83 = ((($82)) + 4|0);\n   $3 = $83;\n   $84 = $3;\n   $4 = 1;\n   $85 = $4;\n   $86 = HEAP32[$84>>2]|0;\n   $87 = (($86) + ($85))|0;\n   HEAP32[$84>>2] = $87;\n   $88 = (($86) + ($85))|0;\n   $5 = $88;\n  }\n  $2 = $37;\n  $89 = $2;\n  $90 = HEAP32[$89>>2]|0;\n  $91 = HEAP32[$90>>2]|0;\n  $92 = ((($91)) + 12|0);\n  $93 = HEAP32[$92>>2]|0;\n  $94 = $33;\n  $95 = (FUNCTION_TABLE_iii[$93 & 255]($90,$94)|0);\n  $33 = $95;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($37);\n  $11 = $35;\n  $96 = $11;\n  $97 = HEAP32[$96>>2]|0;\n  $98 = ((($97)) + 8|0);\n  HEAP32[$96>>2] = $98;\n }\n $99 = ((($38)) + 20|0);\n $100 = HEAP8[$99>>0]|0;\n $101 = $100&1;\n if (!($101)) {\n  $105 = $33;\n  STACKTOP = sp;return ($105|0);\n }\n $102 = ((($38)) + 20|0);\n HEAP8[$102>>0] = 0;\n $103 = ((($38)) + 4|0);\n $104 = HEAP32[$103>>2]|0;\n __ZN6laszip8decoders10arithmeticI10buf_streamE13readInitBytesEv($104);\n $105 = $33;\n STACKTOP = sp;return ($105|0);\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2504);\n $3 = ((($2)) + 8|0);\n __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($3);\n __ZN6laszip7formats20dynamic_decompressorD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE13readInitBytesEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n $4 = (__ZN10buf_stream7getByteEv($3)|0);\n $5 = $4&255;\n $6 = $5 << 24;\n $7 = HEAP32[$2>>2]|0;\n $8 = (__ZN10buf_stream7getByteEv($7)|0);\n $9 = $8&255;\n $10 = $9 << 16;\n $11 = $6 | $10;\n $12 = HEAP32[$2>>2]|0;\n $13 = (__ZN10buf_stream7getByteEv($12)|0);\n $14 = $13&255;\n $15 = $14 << 8;\n $16 = $11 | $15;\n $17 = HEAP32[$2>>2]|0;\n $18 = (__ZN10buf_stream7getByteEv($17)|0);\n $19 = $18&255;\n $20 = $16 | $19;\n $21 = ((($2)) + 4|0);\n HEAP32[$21>>2] = $20;\n STACKTOP = sp;return;\n}\nfunction __ZN10buf_stream7getByteEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n $4 = ((($2)) + 8|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = (($5) + 1)|0;\n HEAP32[$4>>2] = $6;\n $7 = (($3) + ($5)|0);\n $8 = HEAP8[$7>>0]|0;\n STACKTOP = sp;return ($8|0);\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEE18__enable_weak_thisEz($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 728;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(180)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(180)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2552);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2576);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,32,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,32,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 164|0);\n __ZN6laszip7formats20standard_diff_methodIiEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2552);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIiEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 164|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIiE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 164|0);\n  $17 = HEAP32[$16>>2]|0;\n  $18 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$17,0)|0);\n  HEAP32[$6>>2] = $18;\n  $19 = HEAP32[$6>>2]|0;\n  $20 = $5;\n  __ZN6laszip7formats7packersIiE4packEiPc($19,$20);\n  $26 = $5;\n  $27 = ((($26)) + 4|0);\n  $5 = $27;\n  $28 = ((($7)) + 164|0);\n  __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($28,$6);\n  $29 = $5;\n  STACKTOP = sp;return ($29|0);\n } else {\n  $21 = $4;\n  $22 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($21)|0);\n  $23 = $5;\n  __ZN10buf_stream8getBytesEPhi($22,$23,4);\n  $24 = $5;\n  $25 = (__ZN6laszip7formats7packersIiE6unpackEPKc($24)|0);\n  HEAP32[$6>>2] = $25;\n  $26 = $5;\n  $27 = ((($26)) + 4|0);\n  $5 = $27;\n  $28 = ((($7)) + 164|0);\n  __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($28,$6);\n  $29 = $5;\n  STACKTOP = sp;return ($29|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIiE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $6 = $0;\n $7 = $1;\n $8 = $2;\n $9 = $3;\n $11 = $6;\n $12 = $8;\n $13 = $7;\n $14 = ((($11)) + 36|0);\n $15 = $9;\n $4 = $14;\n $5 = $15;\n $16 = $4;\n $17 = HEAP32[$16>>2]|0;\n $18 = $5;\n $19 = (($17) + (($18*44)|0)|0);\n $20 = (__ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticI10buf_streamEENS_6models10arithmeticEEEiRT_RT0_($11,$13,$19)|0);\n $21 = (($12) + ($20))|0;\n $10 = $21;\n $22 = $10;\n $23 = ($22|0)<(0);\n if ($23) {\n  $24 = ((($11)) + 24|0);\n  $25 = HEAP32[$24>>2]|0;\n  $26 = $10;\n  $27 = (($26) + ($25))|0;\n  $10 = $27;\n  $36 = $10;\n  STACKTOP = sp;return ($36|0);\n }\n $28 = $10;\n $29 = ((($11)) + 24|0);\n $30 = HEAP32[$29>>2]|0;\n $31 = ($28>>>0)>=($30>>>0);\n if (!($31)) {\n  $36 = $10;\n  STACKTOP = sp;return ($36|0);\n }\n $32 = ((($11)) + 24|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = $10;\n $35 = (($34) - ($33))|0;\n $10 = $35;\n $36 = $10;\n STACKTOP = sp;return ($36|0);\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10buf_stream8getBytesEPhi($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $6 = 0;\n while(1) {\n  $8 = $6;\n  $9 = $5;\n  $10 = ($8|0)<($9|0);\n  if (!($10)) {\n   break;\n  }\n  $11 = (__ZN10buf_stream7getByteEv($7)|0);\n  $12 = $4;\n  $13 = $6;\n  $14 = (($12) + ($13)|0);\n  HEAP8[$14>>0] = $11;\n  $15 = $6;\n  $16 = (($15) + 1)|0;\n  $6 = $16;\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 4|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 4|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP32[$9>>2]|0;\n HEAP32[$4>>2] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticI10buf_streamEENS_6models10arithmeticEEEiRT_RT0_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $7 = $0;\n $8 = $1;\n $9 = $2;\n $13 = $7;\n $14 = $8;\n $15 = $9;\n $16 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($14,$15)|0);\n HEAP32[$13>>2] = $16;\n $17 = HEAP32[$13>>2]|0;\n $18 = ($17|0)!=(0);\n if (!($18)) {\n  $69 = $8;\n  $70 = ((($13)) + 48|0);\n  $71 = (__ZN6laszip8decoders10arithmeticI10buf_streamE9decodeBitINS_6models14arithmetic_bitEEEjRT_($69,$70)|0);\n  $10 = $71;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n $19 = HEAP32[$13>>2]|0;\n $20 = ($19>>>0)<(32);\n if (!($20)) {\n  $67 = ((($13)) + 28|0);\n  $68 = HEAP32[$67>>2]|0;\n  $10 = $68;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n $21 = HEAP32[$13>>2]|0;\n $22 = ((($13)) + 12|0);\n $23 = HEAP32[$22>>2]|0;\n $24 = ($21>>>0)<=($23>>>0);\n if ($24) {\n  $25 = $8;\n  $26 = ((($13)) + 68|0);\n  $27 = HEAP32[$13>>2]|0;\n  $28 = (($27) - 1)|0;\n  $5 = $26;\n  $6 = $28;\n  $29 = $5;\n  $30 = HEAP32[$29>>2]|0;\n  $31 = $6;\n  $32 = (($30) + (($31*44)|0)|0);\n  $33 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($25,$32)|0);\n  $10 = $33;\n } else {\n  $34 = HEAP32[$13>>2]|0;\n  $35 = ((($13)) + 12|0);\n  $36 = HEAP32[$35>>2]|0;\n  $37 = (($34) - ($36))|0;\n  $11 = $37;\n  $38 = $8;\n  $39 = ((($13)) + 68|0);\n  $40 = HEAP32[$13>>2]|0;\n  $41 = (($40) - 1)|0;\n  $3 = $39;\n  $4 = $41;\n  $42 = $3;\n  $43 = HEAP32[$42>>2]|0;\n  $44 = $4;\n  $45 = (($43) + (($44*44)|0)|0);\n  $46 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($38,$45)|0);\n  $10 = $46;\n  $47 = $8;\n  $48 = $11;\n  $49 = (__ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($47,$48)|0);\n  $12 = $49;\n  $50 = $10;\n  $51 = $11;\n  $52 = $50 << $51;\n  $53 = $12;\n  $54 = $52 | $53;\n  $10 = $54;\n }\n $55 = $10;\n $56 = HEAP32[$13>>2]|0;\n $57 = (($56) - 1)|0;\n $58 = 1 << $57;\n $59 = ($55|0)>=($58|0);\n if ($59) {\n  $60 = $10;\n  $61 = (($60) + 1)|0;\n  $10 = $61;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n } else {\n  $62 = HEAP32[$13>>2]|0;\n  $63 = 1 << $62;\n  $64 = (($63) - 1)|0;\n  $65 = $10;\n  $66 = (($65) - ($64))|0;\n  $10 = $66;\n  $72 = $10;\n  STACKTOP = sp;return ($72|0);\n }\n return (0)|0;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $138 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $2 = $0;\n $3 = $1;\n $13 = $2;\n $14 = ((($13)) + 8|0);\n $15 = HEAP32[$14>>2]|0;\n $7 = $15;\n $16 = $3;\n $17 = ((($16)) + 16|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18|0)!=(0|0);\n if ($19) {\n  $20 = ((($13)) + 4|0);\n  $21 = HEAP32[$20>>2]|0;\n  $22 = ((($13)) + 8|0);\n  $23 = HEAP32[$22>>2]|0;\n  $24 = $23 >>> 15;\n  HEAP32[$22>>2] = $24;\n  $25 = (($21>>>0) / ($24>>>0))&-1;\n  $8 = $25;\n  $26 = $8;\n  $27 = $3;\n  $28 = ((($27)) + 40|0);\n  $29 = HEAP32[$28>>2]|0;\n  $30 = $26 >>> $29;\n  $9 = $30;\n  $31 = $3;\n  $32 = ((($31)) + 16|0);\n  $33 = HEAP32[$32>>2]|0;\n  $34 = $9;\n  $35 = (($33) + ($34<<2)|0);\n  $36 = HEAP32[$35>>2]|0;\n  $5 = $36;\n  $37 = $3;\n  $38 = ((($37)) + 16|0);\n  $39 = HEAP32[$38>>2]|0;\n  $40 = $9;\n  $41 = (($40) + 1)|0;\n  $42 = (($39) + ($41<<2)|0);\n  $43 = HEAP32[$42>>2]|0;\n  $44 = (($43) + 1)|0;\n  $4 = $44;\n  while(1) {\n   $45 = $4;\n   $46 = $5;\n   $47 = (($46) + 1)|0;\n   $48 = ($45>>>0)>($47>>>0);\n   if (!($48)) {\n    break;\n   }\n   $49 = $5;\n   $50 = $4;\n   $51 = (($49) + ($50))|0;\n   $52 = $51 >>> 1;\n   $10 = $52;\n   $53 = $3;\n   $54 = ((($53)) + 8|0);\n   $55 = HEAP32[$54>>2]|0;\n   $56 = $10;\n   $57 = (($55) + ($56<<2)|0);\n   $58 = HEAP32[$57>>2]|0;\n   $59 = $8;\n   $60 = ($58>>>0)>($59>>>0);\n   $61 = $10;\n   if ($60) {\n    $4 = $61;\n   } else {\n    $5 = $61;\n   }\n  }\n  $62 = $3;\n  $63 = ((($62)) + 8|0);\n  $64 = HEAP32[$63>>2]|0;\n  $65 = $5;\n  $66 = (($64) + ($65<<2)|0);\n  $67 = HEAP32[$66>>2]|0;\n  $68 = ((($13)) + 8|0);\n  $69 = HEAP32[$68>>2]|0;\n  $70 = Math_imul($67, $69)|0;\n  $6 = $70;\n  $71 = $5;\n  $72 = $3;\n  $73 = ((($72)) + 32|0);\n  $74 = HEAP32[$73>>2]|0;\n  $75 = ($71|0)!=($74|0);\n  if ($75) {\n   $76 = $3;\n   $77 = ((($76)) + 8|0);\n   $78 = HEAP32[$77>>2]|0;\n   $79 = $5;\n   $80 = (($79) + 1)|0;\n   $81 = (($78) + ($80<<2)|0);\n   $82 = HEAP32[$81>>2]|0;\n   $83 = ((($13)) + 8|0);\n   $84 = HEAP32[$83>>2]|0;\n   $85 = Math_imul($82, $84)|0;\n   $7 = $85;\n  }\n } else {\n  $5 = 0;\n  $6 = 0;\n  $86 = ((($13)) + 8|0);\n  $87 = HEAP32[$86>>2]|0;\n  $88 = $87 >>> 15;\n  HEAP32[$86>>2] = $88;\n  $89 = $3;\n  $90 = HEAP32[$89>>2]|0;\n  $4 = $90;\n  $91 = $90 >>> 1;\n  $11 = $91;\n  while(1) {\n   $92 = ((($13)) + 8|0);\n   $93 = HEAP32[$92>>2]|0;\n   $94 = $3;\n   $95 = ((($94)) + 8|0);\n   $96 = HEAP32[$95>>2]|0;\n   $97 = $11;\n   $98 = (($96) + ($97<<2)|0);\n   $99 = HEAP32[$98>>2]|0;\n   $100 = Math_imul($93, $99)|0;\n   $12 = $100;\n   $101 = $12;\n   $102 = ((($13)) + 4|0);\n   $103 = HEAP32[$102>>2]|0;\n   $104 = ($101>>>0)>($103>>>0);\n   $105 = $11;\n   if ($104) {\n    $4 = $105;\n    $106 = $12;\n    $7 = $106;\n   } else {\n    $5 = $105;\n    $107 = $12;\n    $6 = $107;\n   }\n   $108 = $5;\n   $109 = $4;\n   $110 = (($108) + ($109))|0;\n   $111 = $110 >>> 1;\n   $11 = $111;\n   $112 = $5;\n   $113 = ($111|0)!=($112|0);\n   if (!($113)) {\n    break;\n   }\n  }\n }\n $114 = $6;\n $115 = ((($13)) + 4|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = (($116) - ($114))|0;\n HEAP32[$115>>2] = $117;\n $118 = $7;\n $119 = $6;\n $120 = (($118) - ($119))|0;\n $121 = ((($13)) + 8|0);\n HEAP32[$121>>2] = $120;\n $122 = ((($13)) + 8|0);\n $123 = HEAP32[$122>>2]|0;\n $124 = ($123>>>0)<(16777216);\n if ($124) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($13);\n }\n $125 = $3;\n $126 = ((($125)) + 12|0);\n $127 = HEAP32[$126>>2]|0;\n $128 = $5;\n $129 = (($127) + ($128<<2)|0);\n $130 = HEAP32[$129>>2]|0;\n $131 = (($130) + 1)|0;\n HEAP32[$129>>2] = $131;\n $132 = $3;\n $133 = ((($132)) + 28|0);\n $134 = HEAP32[$133>>2]|0;\n $135 = (($134) + -1)|0;\n HEAP32[$133>>2] = $135;\n $136 = ($135|0)==(0);\n if (!($136)) {\n  $138 = $5;\n  STACKTOP = sp;return ($138|0);\n }\n $137 = $3;\n __ZN6laszip6models10arithmetic6updateEv($137);\n $138 = $5;\n STACKTOP = sp;return ($138|0);\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $3 = $0;\n $4 = $1;\n $8 = $3;\n $9 = $4;\n $10 = ($9|0)!=(0);\n $11 = $4;\n $12 = ($11>>>0)<=(32);\n $or$cond = $10 & $12;\n if (!($or$cond)) {\n  ___assert_fail((5409|0),(5430|0),139,(5499|0));\n  // unreachable;\n }\n $13 = $4;\n $14 = ($13>>>0)>(19);\n if ($14) {\n  $15 = (__ZN6laszip8decoders10arithmeticI10buf_streamE9readShortEv($8)|0);\n  $16 = $15&65535;\n  $5 = $16;\n  $17 = $4;\n  $18 = (($17) - 16)|0;\n  $4 = $18;\n  $19 = $4;\n  $20 = (__ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($8,$19)|0);\n  $21 = $20 << 16;\n  $6 = $21;\n  $22 = $6;\n  $23 = $5;\n  $24 = $22 | $23;\n  $2 = $24;\n  $43 = $2;\n  STACKTOP = sp;return ($43|0);\n }\n $25 = ((($8)) + 4|0);\n $26 = HEAP32[$25>>2]|0;\n $27 = $4;\n $28 = ((($8)) + 8|0);\n $29 = HEAP32[$28>>2]|0;\n $30 = $29 >>> $27;\n HEAP32[$28>>2] = $30;\n $31 = (($26>>>0) / ($30>>>0))&-1;\n $7 = $31;\n $32 = ((($8)) + 8|0);\n $33 = HEAP32[$32>>2]|0;\n $34 = $7;\n $35 = Math_imul($33, $34)|0;\n $36 = ((($8)) + 4|0);\n $37 = HEAP32[$36>>2]|0;\n $38 = (($37) - ($35))|0;\n HEAP32[$36>>2] = $38;\n $39 = ((($8)) + 8|0);\n $40 = HEAP32[$39>>2]|0;\n $41 = ($40>>>0)<(16777216);\n if ($41) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($8);\n }\n $42 = $7;\n $2 = $42;\n $43 = $2;\n STACKTOP = sp;return ($43|0);\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE9decodeBitINS_6models14arithmetic_bitEEEjRT_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $6 = $2;\n $7 = $3;\n $8 = ((($7)) + 8|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = ((($6)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = $11 >>> 13;\n $13 = Math_imul($9, $12)|0;\n $4 = $13;\n $14 = ((($6)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $4;\n $17 = ($15>>>0)>=($16>>>0);\n $18 = $17&1;\n $5 = $18;\n $19 = $5;\n $20 = ($19|0)==(0);\n $21 = $4;\n if ($20) {\n  $22 = ((($6)) + 8|0);\n  HEAP32[$22>>2] = $21;\n  $23 = $3;\n  $24 = ((($23)) + 12|0);\n  $25 = HEAP32[$24>>2]|0;\n  $26 = (($25) + 1)|0;\n  HEAP32[$24>>2] = $26;\n } else {\n  $27 = ((($6)) + 4|0);\n  $28 = HEAP32[$27>>2]|0;\n  $29 = (($28) - ($21))|0;\n  HEAP32[$27>>2] = $29;\n  $30 = $4;\n  $31 = ((($6)) + 8|0);\n  $32 = HEAP32[$31>>2]|0;\n  $33 = (($32) - ($30))|0;\n  HEAP32[$31>>2] = $33;\n }\n $34 = ((($6)) + 8|0);\n $35 = HEAP32[$34>>2]|0;\n $36 = ($35>>>0)<(16777216);\n if ($36) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($6);\n }\n $37 = $3;\n $38 = ((($37)) + 4|0);\n $39 = HEAP32[$38>>2]|0;\n $40 = (($39) + -1)|0;\n HEAP32[$38>>2] = $40;\n $41 = ($40|0)==(0);\n if (!($41)) {\n  $43 = $5;\n  STACKTOP = sp;return ($43|0);\n }\n $42 = $3;\n __ZN6laszip6models14arithmetic_bit6updateEv($42);\n $43 = $5;\n STACKTOP = sp;return ($43|0);\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n while(1) {\n  $3 = ((($2)) + 4|0);\n  $4 = HEAP32[$3>>2]|0;\n  $5 = $4 << 8;\n  $6 = HEAP32[$2>>2]|0;\n  $7 = (__ZN10buf_stream7getByteEv($6)|0);\n  $8 = $7&255;\n  $9 = $5 | $8;\n  $10 = ((($2)) + 4|0);\n  HEAP32[$10>>2] = $9;\n  $11 = ((($2)) + 8|0);\n  $12 = HEAP32[$11>>2]|0;\n  $13 = $12 << 8;\n  HEAP32[$11>>2] = $13;\n  $14 = ($13>>>0)<(16777216);\n  if (!($14)) {\n   break;\n  }\n }\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip8decoders10arithmeticI10buf_streamE9readShortEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $3 = $1;\n $4 = ((($3)) + 4|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ((($3)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $7 >>> 16;\n HEAP32[$6>>2] = $8;\n $9 = (($5>>>0) / ($8>>>0))&-1;\n $2 = $9;\n $10 = ((($3)) + 8|0);\n $11 = HEAP32[$10>>2]|0;\n $12 = $2;\n $13 = Math_imul($11, $12)|0;\n $14 = ((($3)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = (($15) - ($13))|0;\n HEAP32[$14>>2] = $16;\n $17 = ((($3)) + 8|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($18>>>0)<(16777216);\n if ($19) {\n  __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($3);\n }\n $20 = $2;\n $21 = ($20>>>0)<(65536);\n if ($21) {\n  $22 = $2;\n  $23 = $22&65535;\n  STACKTOP = sp;return ($23|0);\n } else {\n  ___assert_fail((5508|0),(5430|0),172,(5522|0));\n  // unreachable;\n }\n return (0)|0;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 768;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2604);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2628);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,32,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,32,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 164|0);\n __ZN6laszip7formats20standard_diff_methodIjEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2604);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIjEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 164|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIjE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 164|0);\n  $17 = HEAP32[$16>>2]|0;\n  $18 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$17,0)|0);\n  HEAP32[$6>>2] = $18;\n  $19 = HEAP32[$6>>2]|0;\n  $20 = $5;\n  __ZN6laszip7formats7packersIjE4packEjPc($19,$20);\n  $26 = $5;\n  $27 = ((($26)) + 4|0);\n  $5 = $27;\n  $28 = ((($7)) + 164|0);\n  __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($28,$6);\n  $29 = $5;\n  STACKTOP = sp;return ($29|0);\n } else {\n  $21 = $4;\n  $22 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($21)|0);\n  $23 = $5;\n  __ZN10buf_stream8getBytesEPhi($22,$23,4);\n  $24 = $5;\n  $25 = (__ZN6laszip7formats7packersIjE6unpackEPKc($24)|0);\n  HEAP32[$6>>2] = $25;\n  $26 = $5;\n  $27 = ((($26)) + 4|0);\n  $5 = $27;\n  $28 = ((($7)) + 164|0);\n  __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($28,$6);\n  $29 = $5;\n  STACKTOP = sp;return ($29|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIjE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 4|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 4|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 4|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP32[$9>>2]|0;\n HEAP32[$4>>2] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 808;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIaEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(172)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIsEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(176)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2656);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2680);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,8,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,8,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 162|0);\n __ZN6laszip7formats20standard_diff_methodIaEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2656);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIaEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 1|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp + 12|0;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 162|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIaE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 162|0);\n  $17 = HEAP8[$16>>0]|0;\n  $18 = $17 << 24 >> 24;\n  $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0);\n  $20 = $19&255;\n  HEAP8[$6>>0] = $20;\n  $21 = HEAP8[$6>>0]|0;\n  $22 = $5;\n  __ZN6laszip7formats7packersIaE4packEaPc($21,$22);\n  $28 = $5;\n  $29 = ((($28)) + 1|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n } else {\n  $23 = $4;\n  $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0);\n  $25 = $5;\n  __ZN10buf_stream8getBytesEPhi($24,$25,1);\n  $26 = $5;\n  $27 = (__ZN6laszip7formats7packersIaE6unpackEPKc($26)|0);\n  HEAP8[$6>>0] = $27;\n  $28 = $5;\n  $29 = ((($28)) + 1|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIaE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 1|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats7packersIaE4packEaPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n HEAP8[$5>>0] = $4;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIaE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP8[$2>>0]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 1|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 1|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP8[$9>>0]|0;\n HEAP8[$4>>0] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 848;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2708);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2732);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,16,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 162|0);\n __ZN6laszip7formats20standard_diff_methodIsEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2708);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIsEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 2|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp + 12|0;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 162|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIsE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 162|0);\n  $17 = HEAP16[$16>>1]|0;\n  $18 = $17 << 16 >> 16;\n  $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0);\n  $20 = $19&65535;\n  HEAP16[$6>>1] = $20;\n  $21 = HEAP16[$6>>1]|0;\n  $22 = $5;\n  __ZN6laszip7formats7packersIsE4packEsPc($21,$22);\n  $28 = $5;\n  $29 = ((($28)) + 2|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n } else {\n  $23 = $4;\n  $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0);\n  $25 = $5;\n  __ZN10buf_stream8getBytesEPhi($24,$25,2);\n  $26 = $5;\n  $27 = (__ZN6laszip7formats7packersIsE6unpackEPKc($26)|0);\n  HEAP16[$6>>1] = $27;\n  $28 = $5;\n  $29 = ((($28)) + 2|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIsE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 2|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats7packersIsE4packEsPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = $3;\n __ZN6laszip7formats7packersItE4packEtPc($4,$5);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats7packersIsE6unpackEPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (__ZN6laszip7formats7packersItE6unpackEPKc($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 2|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 2|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP16[$9>>1]|0;\n HEAP16[$4>>1] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 888;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIhEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(172)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldItEEvv($0) {\n $0 = $0|0;\n var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0;\n var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0;\n var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0;\n var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0);\n $$byval_copy = sp + 136|0;\n $16 = sp;\n $21 = sp + 141|0;\n $32 = sp + 140|0;\n $34 = sp + 8|0;\n $35 = sp + 4|0;\n $33 = $0;\n $36 = $33;\n $37 = ((($36)) + 8|0);\n $38 = (__Znwj(176)|0);\n $39 = ((($36)) + 4|0);\n $40 = HEAP32[$39>>2]|0;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEEC2ERS5_($38,$40);\n ;HEAP32[$35>>2]=0|0;\n ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy);\n $30 = $37;\n $31 = $34;\n $41 = $30;\n $42 = ((($41)) + 4|0);\n $43 = HEAP32[$42>>2]|0;\n $29 = $41;\n $44 = $29;\n $45 = ((($44)) + 8|0);\n $28 = $45;\n $46 = $28;\n $27 = $46;\n $47 = $27;\n $48 = HEAP32[$47>>2]|0;\n $49 = ($43>>>0)<($48>>>0);\n if ($49) {\n  $24 = $32;\n  $25 = $41;\n  $26 = 1;\n  $3 = $41;\n  $50 = $3;\n  $51 = ((($50)) + 8|0);\n  $2 = $51;\n  $52 = $2;\n  $1 = $52;\n  $53 = $1;\n  $54 = ((($41)) + 4|0);\n  $55 = HEAP32[$54>>2]|0;\n  $4 = $55;\n  $56 = $4;\n  $57 = $31;\n  $5 = $57;\n  $58 = $5;\n  $18 = $53;\n  $19 = $56;\n  $20 = $58;\n  $59 = $18;\n  $60 = $19;\n  $61 = $20;\n  $17 = $61;\n  $62 = $17;\n  ;HEAP8[$16>>0]=HEAP8[$21>>0]|0;\n  $13 = $59;\n  $14 = $60;\n  $15 = $62;\n  $63 = $13;\n  $64 = $14;\n  $65 = $15;\n  $12 = $65;\n  $66 = $12;\n  $9 = $63;\n  $10 = $64;\n  $11 = $66;\n  $67 = $10;\n  $68 = $11;\n  $8 = $68;\n  $69 = $8;\n  $6 = $67;\n  $7 = $69;\n  $70 = $6;\n  $71 = $7;\n  $72 = HEAP32[$71>>2]|0;\n  HEAP32[$70>>2] = $72;\n  $73 = ((($70)) + 4|0);\n  $74 = $7;\n  $75 = ((($74)) + 4|0);\n  $76 = HEAP32[$75>>2]|0;\n  HEAP32[$73>>2] = $76;\n  $77 = $7;\n  HEAP32[$77>>2] = 0;\n  $78 = $7;\n  $79 = ((($78)) + 4|0);\n  HEAP32[$79>>2] = 0;\n  $22 = $32;\n  $80 = ((($41)) + 4|0);\n  $81 = HEAP32[$80>>2]|0;\n  $82 = ((($81)) + 8|0);\n  HEAP32[$80>>2] = $82;\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n } else {\n  $83 = $31;\n  $23 = $83;\n  $84 = $23;\n  __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84);\n  __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34);\n  STACKTOP = sp;return;\n }\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2760);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2784);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,8,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,8,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 162|0);\n __ZN6laszip7formats20standard_diff_methodIhEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2760);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIhEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 1|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp + 12|0;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 162|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodIhE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 162|0);\n  $17 = HEAP8[$16>>0]|0;\n  $18 = $17&255;\n  $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0);\n  $20 = $19&255;\n  HEAP8[$6>>0] = $20;\n  $21 = HEAP8[$6>>0]|0;\n  $22 = $5;\n  __ZN6laszip7formats7packersIhE4packEhPc($21,$22);\n  $28 = $5;\n  $29 = ((($28)) + 1|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n } else {\n  $23 = $4;\n  $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0);\n  $25 = $5;\n  __ZN10buf_stream8getBytesEPhi($24,$25,1);\n  $26 = $5;\n  $27 = (__ZN6laszip7formats7packersIhE6unpackEPKc($26)|0);\n  HEAP8[$6>>0] = $27;\n  $28 = $5;\n  $29 = ((($28)) + 1|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodIhE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 1|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 1|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 1|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP8[$9>>0]|0;\n HEAP8[$4>>0] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 928;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEEC2ERS5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n __ZN6laszip7formats10base_fieldC2Ev($4);\n HEAP32[$4>>2] = (2812);\n $5 = ((($4)) + 4|0);\n $6 = $3;\n HEAP32[$5>>2] = $6;\n $7 = ((($4)) + 8|0);\n __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEEC2Ev($7);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0;\n var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0;\n var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0;\n var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0;\n var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0;\n var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0;\n var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0);\n $vararg_buffer = sp + 16|0;\n $38 = sp + 124|0;\n $39 = sp + 120|0;\n $40 = sp + 8|0;\n $41 = sp;\n $62 = sp + 36|0;\n $65 = sp + 24|0;\n $66 = sp + 269|0;\n $67 = sp + 268|0;\n $63 = $0;\n $64 = $1;\n $68 = $63;\n $69 = $64;\n HEAP32[$68>>2] = $69;\n $70 = $64;\n $61 = $65;\n HEAP32[$62>>2] = $70;\n $71 = $61;\n $59 = $71;\n $60 = $62;\n $72 = $59;\n $73 = $60;\n $58 = $73;\n $74 = $58;\n $56 = $72;\n $57 = $74;\n $75 = $56;\n $76 = $57;\n $55 = $76;\n $77 = $55;\n $78 = HEAP32[$77>>2]|0;\n HEAP32[$75>>2] = $78;\n $79 = (__Znwj(16)|0);\n $80 = $64;\n $54 = $67;\n ;HEAP8[$40>>0]=HEAP8[$67>>0]|0;\n ;HEAP8[$41>>0]=HEAP8[$66>>0]|0;\n $37 = $79;\n HEAP32[$38>>2] = $80;\n $81 = $37;\n $35 = $81;\n $36 = 0;\n $82 = $35;\n $83 = $36;\n $33 = $82;\n $34 = $83;\n $84 = $33;\n HEAP32[$84>>2] = (3468);\n $85 = ((($84)) + 4|0);\n $86 = $34;\n HEAP32[$85>>2] = $86;\n HEAP32[$82>>2] = (3488);\n $87 = ((($82)) + 8|0);\n $88 = $36;\n HEAP32[$87>>2] = $88;\n HEAP32[$81>>2] = (2836);\n $89 = ((($81)) + 12|0);\n $9 = $41;\n $90 = $9;\n $18 = $39;\n $19 = $38;\n $20 = $90;\n $91 = $18;\n $92 = $19;\n $17 = $92;\n $93 = $17;\n $11 = $91;\n $12 = $93;\n $94 = $11;\n $95 = $12;\n $10 = $95;\n $96 = $10;\n $97 = HEAP32[$96>>2]|0;\n HEAP32[$94>>2] = $97;\n $98 = $20;\n $13 = $98;\n $99 = $13;\n $15 = $91;\n $16 = $99;\n $100 = $16;\n $14 = $100;\n $21 = $40;\n $101 = $21;\n $30 = $89;\n $31 = $39;\n $32 = $101;\n $102 = $30;\n $103 = $31;\n $29 = $103;\n $104 = $29;\n $23 = $102;\n $24 = $104;\n $105 = $23;\n $106 = $24;\n $22 = $106;\n $107 = $22;\n ;HEAP32[$105>>2]=HEAP32[$107>>2]|0;\n $108 = $32;\n $25 = $108;\n $109 = $25;\n $27 = $102;\n $28 = $109;\n $110 = $28;\n $26 = $110;\n $111 = ((($68)) + 4|0);\n HEAP32[$111>>2] = $79;\n $7 = $65;\n $112 = $7;\n $6 = $112;\n $113 = $6;\n $5 = $113;\n $114 = $5;\n $115 = HEAP32[$114>>2]|0;\n $8 = $115;\n $4 = $112;\n $116 = $4;\n $3 = $116;\n $117 = $3;\n HEAP32[$117>>2] = 0;\n $118 = $64;\n $119 = $64;\n HEAP32[$vararg_buffer>>2] = $118;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $119;\n __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer);\n $53 = $65;\n $120 = $53;\n $50 = $120;\n $51 = 0;\n $121 = $50;\n $49 = $121;\n $122 = $49;\n $48 = $122;\n $123 = $48;\n $124 = HEAP32[$123>>2]|0;\n $52 = $124;\n $125 = $51;\n $45 = $121;\n $126 = $45;\n $44 = $126;\n $127 = $44;\n HEAP32[$127>>2] = $125;\n $128 = $52;\n $129 = ($128|0)!=(0|0);\n if (!($129)) {\n  STACKTOP = sp;return;\n }\n $43 = $121;\n $130 = $43;\n $42 = $130;\n $131 = $42;\n $132 = $52;\n $46 = $131;\n $47 = $132;\n $133 = $47;\n $134 = ($133|0)==(0|0);\n if ($134) {\n  STACKTOP = sp;return;\n }\n $135 = HEAP32[$133>>2]|0;\n $136 = ((($135)) + 4|0);\n $137 = HEAP32[$136>>2]|0;\n FUNCTION_TABLE_vi[$137 & 511]($133);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip11compressors7integerC2Ejjjj($2,16,1,8,0);\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0);\n $4 = ((($2)) + 160|0);\n HEAP8[$4>>0] = 0;\n $5 = ((($2)) + 161|0);\n HEAP8[$5>>0] = 0;\n $6 = ((($2)) + 162|0);\n __ZN6laszip7formats20standard_diff_methodItEC2Ev($6);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n HEAP32[$2>>2] = (2812);\n $3 = ((($2)) + 8|0);\n __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEED2Ev($3);\n __ZN6laszip7formats10base_fieldD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEE13decompressRawEPc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 8|0);\n $6 = ((($4)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $3;\n $9 = (__ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0);\n STACKTOP = sp;return ($9|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodItEC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 2|0);\n HEAP8[$3>>0] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 80|0);\n __ZN6laszip13decompressors7integerD2Ev($3);\n __ZN6laszip11compressors7integerD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $6 = sp + 12|0;\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $7 = $3;\n $8 = ((($7)) + 161|0);\n $9 = HEAP8[$8>>0]|0;\n $10 = $9&1;\n if (!($10)) {\n  $11 = ((($7)) + 80|0);\n  __ZN6laszip13decompressors7integer4initEv($11);\n }\n $12 = ((($7)) + 162|0);\n $13 = (__ZNK6laszip7formats20standard_diff_methodItE10have_valueEv($12)|0);\n if ($13) {\n  $14 = ((($7)) + 80|0);\n  $15 = $4;\n  $16 = ((($7)) + 162|0);\n  $17 = HEAP16[$16>>1]|0;\n  $18 = $17&65535;\n  $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0);\n  $20 = $19&65535;\n  HEAP16[$6>>1] = $20;\n  $21 = HEAP16[$6>>1]|0;\n  $22 = $5;\n  __ZN6laszip7formats7packersItE4packEtPc($21,$22);\n  $28 = $5;\n  $29 = ((($28)) + 2|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodItE4pushERKt($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n } else {\n  $23 = $4;\n  $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0);\n  $25 = $5;\n  __ZN10buf_stream8getBytesEPhi($24,$25,2);\n  $26 = $5;\n  $27 = (__ZN6laszip7formats7packersItE6unpackEPKc($26)|0);\n  HEAP16[$6>>1] = $27;\n  $28 = $5;\n  $29 = ((($28)) + 2|0);\n  $5 = $29;\n  $30 = ((($7)) + 162|0);\n  __ZN6laszip7formats20standard_diff_methodItE4pushERKt($30,$6);\n  $31 = $5;\n  STACKTOP = sp;return ($31|0);\n }\n return (0)|0;\n}\nfunction __ZNK6laszip7formats20standard_diff_methodItE10have_valueEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ((($2)) + 2|0);\n $4 = HEAP8[$3>>0]|0;\n $5 = $4&1;\n STACKTOP = sp;return ($5|0);\n}\nfunction __ZN6laszip7formats20standard_diff_methodItE4pushERKt($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $1;\n $4 = $2;\n $5 = ((($4)) + 2|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = $6&1;\n if (!($7)) {\n  $8 = ((($4)) + 2|0);\n  HEAP8[$8>>0] = 1;\n }\n $9 = $3;\n $10 = HEAP16[$9>>1]|0;\n HEAP16[$4>>1] = $10;\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__214__shared_countD2Ev($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2);\n __ZdlPv($2);\n STACKTOP = sp;return;\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $15 = $0;\n $16 = $15;\n $17 = ((($16)) + 12|0);\n $14 = $17;\n $18 = $14;\n $13 = $18;\n $19 = $13;\n $6 = $19;\n $20 = $6;\n $5 = $20;\n $21 = $5;\n $22 = ((($16)) + 12|0);\n $2 = $22;\n $23 = $2;\n $1 = $23;\n $24 = $1;\n $4 = $24;\n $25 = $4;\n $3 = $25;\n $26 = $3;\n $27 = HEAP32[$26>>2]|0;\n $7 = $21;\n $8 = $27;\n $28 = $8;\n $29 = ($28|0)==(0|0);\n if (!($29)) {\n  $30 = HEAP32[$28>>2]|0;\n  $31 = ((($30)) + 4|0);\n  $32 = HEAP32[$31>>2]|0;\n  FUNCTION_TABLE_vi[$32 & 511]($28);\n }\n $33 = ((($16)) + 12|0);\n $10 = $33;\n $34 = $10;\n $9 = $34;\n $35 = $9;\n $12 = $35;\n $36 = $12;\n $11 = $36;\n STACKTOP = sp;return;\n}\nfunction __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $9 = $0;\n $10 = $1;\n $11 = $9;\n $12 = $10;\n $7 = $12;\n $8 = 968;\n $13 = $7;\n $14 = ((($13)) + 4|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = $8;\n $17 = ((($16)) + 4|0);\n $18 = HEAP32[$17>>2]|0;\n $19 = ($15|0)==($18|0);\n if (!($19)) {\n  $26 = 0;\n  STACKTOP = sp;return ($26|0);\n }\n $20 = ((($11)) + 12|0);\n $3 = $20;\n $21 = $3;\n $2 = $21;\n $22 = $2;\n $5 = $22;\n $23 = $5;\n $4 = $23;\n $24 = $4;\n $6 = $24;\n $25 = $6;\n $26 = $25;\n STACKTOP = sp;return ($26|0);\n}\nfunction __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $14 = sp + 52|0;\n $13 = $0;\n $15 = $13;\n $16 = ((($15)) + 12|0);\n $12 = $16;\n $17 = $12;\n $11 = $17;\n $18 = $11;\n $5 = $14;\n $6 = $18;\n $19 = ((($15)) + 12|0);\n $2 = $19;\n $20 = $2;\n $1 = $20;\n $4 = $15;\n $21 = $4;\n $3 = $21;\n $22 = $3;\n $8 = $14;\n $9 = $22;\n $10 = 1;\n $23 = $9;\n $7 = $23;\n $24 = $7;\n __ZdlPv($24);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal11NoBaseClass6verifyI6LASZipEEvv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZN10emscripten8internal13getActualTypeI6LASZipEEPKvPT_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (__ZN10emscripten8internal14getLightTypeIDI6LASZipEEPKvRKT_($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass11getUpcasterI6LASZipEEPFvvEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass13getDowncasterI6LASZipEEPFvvEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal14raw_destructorI6LASZipEEvPT_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ($2|0)==(0|0);\n if (!($3)) {\n  __ZN6LASZipD2Ev($2);\n  __ZdlPv($2);\n }\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDI6LASZipE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDI6LASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI6LASZipEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIP6LASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK6LASZipEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIPK6LASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal14getLightTypeIDI6LASZipEEPKvRKT_($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return (976|0);\n}\nfunction __ZN6LASZipD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0;\n var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0;\n var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0;\n var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0);\n $6 = sp + 128|0;\n $12 = sp + 104|0;\n $17 = sp + 80|0;\n $23 = sp + 56|0;\n $29 = sp + 32|0;\n $34 = sp + 8|0;\n $35 = $0;\n $36 = $35;\n $33 = $36;\n $37 = $33;\n $32 = $34;\n $38 = $32;\n HEAP32[$38>>2] = 0;\n $39 = ((($38)) + 4|0);\n HEAP32[$39>>2] = 0;\n $30 = $34;\n $31 = $37;\n $40 = $30;\n $41 = $31;\n $27 = $40;\n $28 = $41;\n $42 = $27;\n $26 = $42;\n $43 = $26;\n $44 = HEAP32[$43>>2]|0;\n HEAP32[$29>>2] = $44;\n $45 = $28;\n $24 = $45;\n $46 = $24;\n $47 = HEAP32[$46>>2]|0;\n $48 = $27;\n HEAP32[$48>>2] = $47;\n $25 = $29;\n $49 = $25;\n $50 = HEAP32[$49>>2]|0;\n $51 = $28;\n HEAP32[$51>>2] = $50;\n $52 = ((($40)) + 4|0);\n $53 = $31;\n $54 = ((($53)) + 4|0);\n $21 = $52;\n $22 = $54;\n $55 = $21;\n $20 = $55;\n $56 = $20;\n $57 = HEAP32[$56>>2]|0;\n HEAP32[$23>>2] = $57;\n $58 = $22;\n $18 = $58;\n $59 = $18;\n $60 = HEAP32[$59>>2]|0;\n $61 = $21;\n HEAP32[$61>>2] = $60;\n $19 = $23;\n $62 = $19;\n $63 = HEAP32[$62>>2]|0;\n $64 = $22;\n HEAP32[$64>>2] = $63;\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($34);\n $65 = ((($36)) + 8|0);\n $16 = $65;\n $66 = $16;\n $15 = $17;\n $67 = $15;\n HEAP32[$67>>2] = 0;\n $68 = ((($67)) + 4|0);\n HEAP32[$68>>2] = 0;\n $13 = $17;\n $14 = $66;\n $69 = $13;\n $70 = $14;\n $10 = $69;\n $11 = $70;\n $71 = $10;\n $9 = $71;\n $72 = $9;\n $73 = HEAP32[$72>>2]|0;\n HEAP32[$12>>2] = $73;\n $74 = $11;\n $7 = $74;\n $75 = $7;\n $76 = HEAP32[$75>>2]|0;\n $77 = $10;\n HEAP32[$77>>2] = $76;\n $8 = $12;\n $78 = $8;\n $79 = HEAP32[$78>>2]|0;\n $80 = $11;\n HEAP32[$80>>2] = $79;\n $81 = ((($69)) + 4|0);\n $82 = $14;\n $83 = ((($82)) + 4|0);\n $4 = $81;\n $5 = $83;\n $84 = $4;\n $3 = $84;\n $85 = $3;\n $86 = HEAP32[$85>>2]|0;\n HEAP32[$6>>2] = $86;\n $87 = $5;\n $1 = $87;\n $88 = $1;\n $89 = HEAP32[$88>>2]|0;\n $90 = $4;\n HEAP32[$90>>2] = $89;\n $2 = $6;\n $91 = $2;\n $92 = HEAP32[$91>>2]|0;\n $93 = $5;\n HEAP32[$93>>2] = $92;\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($17);\n $94 = ((($36)) + 8|0);\n __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($94);\n __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($36);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal11LightTypeIDI6LASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (976|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIP6LASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (984|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIPK6LASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1000|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16424|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16427|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16429|0);\n}\nfunction __ZN10emscripten8internal12operator_newI6LASZipJEEEPT_DpOT0_() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__Znwj(16)|0);\n __ZN6LASZipC2Ev($0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal7InvokerIP6LASZipJEE6invokeEPFS3_vE($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (FUNCTION_TABLE_i[$2 & 255]()|0);\n $4 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE10toWireTypeES3_($3)|0);\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 1;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIP6LASZipE10toWireTypeES3_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2856|0);\n}\nfunction __ZN6LASZipC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $3;\n $2 = $4;\n $5 = $2;\n HEAP32[$5>>2] = 0;\n $6 = ((($5)) + 4|0);\n HEAP32[$6>>2] = 0;\n $7 = ((($4)) + 8|0);\n $1 = $7;\n $8 = $1;\n HEAP32[$8>>2] = 0;\n $9 = ((($8)) + 4|0);\n HEAP32[$9>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM6LASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $7 = $3;\n $8 = $5;\n $9 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($8)|0);\n $10 = $4;\n $$field = HEAP32[$10>>2]|0;\n $$index1 = ((($10)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $11 = $$field2 >> 1;\n $12 = (($9) + ($11)|0);\n $13 = $$field2 & 1;\n $14 = ($13|0)!=(0);\n if ($14) {\n  $15 = HEAP32[$12>>2]|0;\n  $16 = (($15) + ($$field)|0);\n  $17 = HEAP32[$16>>2]|0;\n  $23 = $17;\n } else {\n  $18 = $$field;\n  $23 = $18;\n }\n $19 = $6;\n $20 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($19)|0);\n $21 = $7;\n $22 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($21)|0);\n FUNCTION_TABLE_viii[$23 & 255]($12,$20,$22);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 4;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM6LASZipFvjjEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2860|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16432|0);\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM6LASZipFviEvPS2_JiEE6invokeERKS4_S5_i($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $4;\n $7 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($6)|0);\n $8 = $3;\n $$field = HEAP32[$8>>2]|0;\n $$index1 = ((($8)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $9 = $$field2 >> 1;\n $10 = (($7) + ($9)|0);\n $11 = $$field2 & 1;\n $12 = ($11|0)!=(0);\n if ($12) {\n  $13 = HEAP32[$10>>2]|0;\n  $14 = (($13) + ($$field)|0);\n  $15 = HEAP32[$14>>2]|0;\n  $19 = $15;\n } else {\n  $16 = $$field;\n  $19 = $16;\n }\n $17 = $5;\n $18 = (__ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($17)|0);\n FUNCTION_TABLE_vii[$19 & 255]($10,$18);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 3;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM6LASZipFviEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2876|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16438|0);\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM6LASZipFjvEjPS2_JEE6invokeERKS4_S5_($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = sp;\n $2 = $0;\n $3 = $1;\n $5 = $3;\n $6 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($5)|0);\n $7 = $2;\n $$field = HEAP32[$7>>2]|0;\n $$index1 = ((($7)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $8 = $$field2 >> 1;\n $9 = (($6) + ($8)|0);\n $10 = $$field2 & 1;\n $11 = ($10|0)!=(0);\n if ($11) {\n  $12 = HEAP32[$9>>2]|0;\n  $13 = (($12) + ($$field)|0);\n  $14 = HEAP32[$13>>2]|0;\n  $16 = $14;\n } else {\n  $15 = $$field;\n  $16 = $15;\n }\n $17 = (FUNCTION_TABLE_ii[$16 & 255]($9)|0);\n HEAP32[$4>>2] = $17;\n $18 = (__ZN10emscripten8internal11BindingTypeIjE10toWireTypeERKj($4)|0);\n STACKTOP = sp;return ($18|0);\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 2;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJjNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM6LASZipFjvEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIjE10toWireTypeERKj($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = HEAP32[$2>>2]|0;\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJjNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2888|0);\n}\nfunction __ZN10emscripten8internal19getGenericSignatureIJiiiEEEPKcv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (16443|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass6verifyI13DynamicLASZipEEvv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZN10emscripten8internal13getActualTypeI13DynamicLASZipEEPKvPT_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (__ZN10emscripten8internal14getLightTypeIDI13DynamicLASZipEEPKvRKT_($2)|0);\n STACKTOP = sp;return ($3|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass11getUpcasterI13DynamicLASZipEEPFvvEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal11NoBaseClass13getDowncasterI13DynamicLASZipEEPFvvEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZN10emscripten8internal14raw_destructorI13DynamicLASZipEEvPT_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = ($2|0)==(0|0);\n if (!($3)) {\n  __ZN13DynamicLASZipD2Ev($2);\n  __ZdlPv($2);\n }\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDI13DynamicLASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI13DynamicLASZipEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIP13DynamicLASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK13DynamicLASZipEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIPK13DynamicLASZipE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal14getLightTypeIDI13DynamicLASZipEEPKvRKT_($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return (1016|0);\n}\nfunction __ZN13DynamicLASZipD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0;\n var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0;\n var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0;\n var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0;\n var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0;\n var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0;\n var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0;\n var $99 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0);\n $6 = sp + 200|0;\n $12 = sp + 176|0;\n $17 = sp + 152|0;\n $23 = sp + 128|0;\n $29 = sp + 104|0;\n $34 = sp + 80|0;\n $40 = sp + 56|0;\n $46 = sp + 32|0;\n $51 = sp + 8|0;\n $52 = $0;\n $53 = $52;\n $50 = $53;\n $54 = $50;\n $49 = $51;\n $55 = $49;\n HEAP32[$55>>2] = 0;\n $56 = ((($55)) + 4|0);\n HEAP32[$56>>2] = 0;\n $47 = $51;\n $48 = $54;\n $57 = $47;\n $58 = $48;\n $44 = $57;\n $45 = $58;\n $59 = $44;\n $43 = $59;\n $60 = $43;\n $61 = HEAP32[$60>>2]|0;\n HEAP32[$46>>2] = $61;\n $62 = $45;\n $41 = $62;\n $63 = $41;\n $64 = HEAP32[$63>>2]|0;\n $65 = $44;\n HEAP32[$65>>2] = $64;\n $42 = $46;\n $66 = $42;\n $67 = HEAP32[$66>>2]|0;\n $68 = $45;\n HEAP32[$68>>2] = $67;\n $69 = ((($57)) + 4|0);\n $70 = $48;\n $71 = ((($70)) + 4|0);\n $38 = $69;\n $39 = $71;\n $72 = $38;\n $37 = $72;\n $73 = $37;\n $74 = HEAP32[$73>>2]|0;\n HEAP32[$40>>2] = $74;\n $75 = $39;\n $35 = $75;\n $76 = $35;\n $77 = HEAP32[$76>>2]|0;\n $78 = $38;\n HEAP32[$78>>2] = $77;\n $36 = $40;\n $79 = $36;\n $80 = HEAP32[$79>>2]|0;\n $81 = $39;\n HEAP32[$81>>2] = $80;\n __ZNSt3__210shared_ptrI10buf_streamED2Ev($51);\n $82 = ((($53)) + 16|0);\n $33 = $82;\n $83 = $33;\n $32 = $34;\n $84 = $32;\n HEAP32[$84>>2] = 0;\n $85 = ((($84)) + 4|0);\n HEAP32[$85>>2] = 0;\n $30 = $34;\n $31 = $83;\n $86 = $30;\n $87 = $31;\n $27 = $86;\n $28 = $87;\n $88 = $27;\n $26 = $88;\n $89 = $26;\n $90 = HEAP32[$89>>2]|0;\n HEAP32[$29>>2] = $90;\n $91 = $28;\n $24 = $91;\n $92 = $24;\n $93 = HEAP32[$92>>2]|0;\n $94 = $27;\n HEAP32[$94>>2] = $93;\n $25 = $29;\n $95 = $25;\n $96 = HEAP32[$95>>2]|0;\n $97 = $28;\n HEAP32[$97>>2] = $96;\n $98 = ((($86)) + 4|0);\n $99 = $31;\n $100 = ((($99)) + 4|0);\n $21 = $98;\n $22 = $100;\n $101 = $21;\n $20 = $101;\n $102 = $20;\n $103 = HEAP32[$102>>2]|0;\n HEAP32[$23>>2] = $103;\n $104 = $22;\n $18 = $104;\n $105 = $18;\n $106 = HEAP32[$105>>2]|0;\n $107 = $21;\n HEAP32[$107>>2] = $106;\n $19 = $23;\n $108 = $19;\n $109 = HEAP32[$108>>2]|0;\n $110 = $22;\n HEAP32[$110>>2] = $109;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($34);\n $111 = ((($53)) + 16|0);\n $16 = $111;\n $112 = $16;\n $15 = $17;\n $113 = $15;\n HEAP32[$113>>2] = 0;\n $114 = ((($113)) + 4|0);\n HEAP32[$114>>2] = 0;\n $13 = $17;\n $14 = $112;\n $115 = $13;\n $116 = $14;\n $10 = $115;\n $11 = $116;\n $117 = $10;\n $9 = $117;\n $118 = $9;\n $119 = HEAP32[$118>>2]|0;\n HEAP32[$12>>2] = $119;\n $120 = $11;\n $7 = $120;\n $121 = $7;\n $122 = HEAP32[$121>>2]|0;\n $123 = $10;\n HEAP32[$123>>2] = $122;\n $8 = $12;\n $124 = $8;\n $125 = HEAP32[$124>>2]|0;\n $126 = $11;\n HEAP32[$126>>2] = $125;\n $127 = ((($115)) + 4|0);\n $128 = $14;\n $129 = ((($128)) + 4|0);\n $4 = $127;\n $5 = $129;\n $130 = $4;\n $3 = $130;\n $131 = $3;\n $132 = HEAP32[$131>>2]|0;\n HEAP32[$6>>2] = $132;\n $133 = $5;\n $1 = $133;\n $134 = $1;\n $135 = HEAP32[$134>>2]|0;\n $136 = $4;\n HEAP32[$136>>2] = $135;\n $2 = $6;\n $137 = $2;\n $138 = HEAP32[$137>>2]|0;\n $139 = $5;\n HEAP32[$139>>2] = $138;\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($17);\n $140 = ((($53)) + 16|0);\n __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($140);\n $141 = ((($53)) + 8|0);\n __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($141);\n __ZNSt3__210shared_ptrI10buf_streamED2Ev($53);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal11LightTypeIDI13DynamicLASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1016|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIP13DynamicLASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1024|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIPK13DynamicLASZipE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1040|0);\n}\nfunction __ZN10emscripten8internal12operator_newI13DynamicLASZipJEEEPT_DpOT0_() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__Znwj(24)|0);\n __ZN13DynamicLASZipC2Ev($0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal7InvokerIP13DynamicLASZipJEE6invokeEPFS3_vE($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n $3 = (FUNCTION_TABLE_i[$2 & 255]()|0);\n $4 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE10toWireTypeES3_($3)|0);\n STACKTOP = sp;return ($4|0);\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 1;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI13DynamicLASZipEEEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE10toWireTypeES3_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI13DynamicLASZipEEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2896|0);\n}\nfunction __ZN13DynamicLASZipC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $4;\n $3 = $5;\n $6 = $3;\n HEAP32[$6>>2] = 0;\n $7 = ((($6)) + 4|0);\n HEAP32[$7>>2] = 0;\n $8 = ((($5)) + 8|0);\n $1 = $8;\n $9 = $1;\n HEAP32[$9>>2] = 0;\n $10 = ((($9)) + 4|0);\n HEAP32[$10>>2] = 0;\n $11 = ((($5)) + 16|0);\n $2 = $11;\n $12 = $2;\n HEAP32[$12>>2] = 0;\n $13 = ((($12)) + 4|0);\n HEAP32[$13>>2] = 0;\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $4 = 0, $5 = 0, $6 = 0;\n var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $4 = $0;\n $5 = $1;\n $6 = $2;\n $7 = $3;\n $8 = $5;\n $9 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($8)|0);\n $10 = $4;\n $$field = HEAP32[$10>>2]|0;\n $$index1 = ((($10)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $11 = $$field2 >> 1;\n $12 = (($9) + ($11)|0);\n $13 = $$field2 & 1;\n $14 = ($13|0)!=(0);\n if ($14) {\n  $15 = HEAP32[$12>>2]|0;\n  $16 = (($15) + ($$field)|0);\n  $17 = HEAP32[$16>>2]|0;\n  $23 = $17;\n } else {\n  $18 = $$field;\n  $23 = $18;\n }\n $19 = $6;\n $20 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($19)|0);\n $21 = $7;\n $22 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($21)|0);\n FUNCTION_TABLE_viii[$23 & 255]($12,$20,$22);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 4;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM13DynamicLASZipFvjjEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = $1;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2900|0);\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjEvPS2_JjEE6invokeERKS4_S5_j($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $4;\n $7 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($6)|0);\n $8 = $3;\n $$field = HEAP32[$8>>2]|0;\n $$index1 = ((($8)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $9 = $$field2 >> 1;\n $10 = (($7) + ($9)|0);\n $11 = $$field2 & 1;\n $12 = ($11|0)!=(0);\n if ($12) {\n  $13 = HEAP32[$10>>2]|0;\n  $14 = (($13) + ($$field)|0);\n  $15 = HEAP32[$14>>2]|0;\n  $19 = $15;\n } else {\n  $16 = $$field;\n  $19 = $16;\n }\n $17 = $5;\n $18 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($17)|0);\n FUNCTION_TABLE_vii[$19 & 255]($10,$18);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 3;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2916|0);\n}\nfunction __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFviEvPS2_JiEE6invokeERKS4_S5_i($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = $0;\n $4 = $1;\n $5 = $2;\n $6 = $4;\n $7 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($6)|0);\n $8 = $3;\n $$field = HEAP32[$8>>2]|0;\n $$index1 = ((($8)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n $9 = $$field2 >> 1;\n $10 = (($7) + ($9)|0);\n $11 = $$field2 & 1;\n $12 = ($11|0)!=(0);\n if ($12) {\n  $13 = HEAP32[$10>>2]|0;\n  $14 = (($13) + ($$field)|0);\n  $15 = HEAP32[$14>>2]|0;\n  $19 = $15;\n } else {\n  $16 = $$field;\n  $19 = $16;\n }\n $17 = $5;\n $18 = (__ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($17)|0);\n FUNCTION_TABLE_vii[$19 & 255]($10,$18);\n STACKTOP = sp;return;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getCountEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n STACKTOP = sp;return 3;\n}\nfunction __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getTypesEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEEEE3getEv()|0);\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal10getContextIM13DynamicLASZipFviEEEPT_RKS5_($0) {\n $0 = $0|0;\n var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__Znwj(8)|0);\n $3 = $1;\n $$field = HEAP32[$3>>2]|0;\n $$index1 = ((($3)) + 4|0);\n $$field2 = HEAP32[$$index1>>2]|0;\n HEAP32[$2>>2] = $$field;\n $$index5 = ((($2)) + 4|0);\n HEAP32[$$index5>>2] = $$field2;\n STACKTOP = sp;return ($2|0);\n}\nfunction __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (2928|0);\n}\nfunction __GLOBAL__sub_I_laz_perf_cpp() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n ___cxx_global_var_init();\n return;\n}\nfunction __GLOBAL__sub_I_bind_cpp() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n ___cxx_global_var_init_2();\n return;\n}\nfunction ___cxx_global_var_init_2() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN53EmscriptenBindingInitializer_native_and_builtin_typesC2Ev(21881);\n return;\n}\nfunction __ZN53EmscriptenBindingInitializer_native_and_builtin_typesC2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIvE3getEv()|0);\n __embind_register_void(($2|0),(16498|0));\n $3 = (__ZN10emscripten8internal6TypeIDIbE3getEv()|0);\n __embind_register_bool(($3|0),(16503|0),1,1,0);\n __ZN12_GLOBAL__N_116register_integerIcEEvPKc(16508);\n __ZN12_GLOBAL__N_116register_integerIaEEvPKc(16513);\n __ZN12_GLOBAL__N_116register_integerIhEEvPKc(16525);\n __ZN12_GLOBAL__N_116register_integerIsEEvPKc(16539);\n __ZN12_GLOBAL__N_116register_integerItEEvPKc(16545);\n __ZN12_GLOBAL__N_116register_integerIiEEvPKc(16560);\n __ZN12_GLOBAL__N_116register_integerIjEEvPKc(16564);\n __ZN12_GLOBAL__N_116register_integerIlEEvPKc(16577);\n __ZN12_GLOBAL__N_116register_integerImEEvPKc(16582);\n __ZN12_GLOBAL__N_114register_floatIfEEvPKc(16596);\n __ZN12_GLOBAL__N_114register_floatIdEEvPKc(16602);\n $4 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv()|0);\n __embind_register_std_string(($4|0),(16609|0));\n $5 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv()|0);\n __embind_register_std_string(($5|0),(16621|0));\n $6 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv()|0);\n __embind_register_std_wstring(($6|0),4,(16654|0));\n $7 = (__ZN10emscripten8internal6TypeIDINS_3valEE3getEv()|0);\n __embind_register_emval(($7|0),(16667|0));\n __ZN12_GLOBAL__N_120register_memory_viewIcEEvPKc(16683);\n __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc(16713);\n __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc(16750);\n __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc(16789);\n __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc(16820);\n __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc(16860);\n __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc(16889);\n __ZN12_GLOBAL__N_120register_memory_viewIlEEvPKc(16927);\n __ZN12_GLOBAL__N_120register_memory_viewImEEvPKc(16957);\n __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc(16996);\n __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc(17028);\n __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc(17061);\n __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc(17094);\n __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc(17128);\n __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc(17161);\n __ZN12_GLOBAL__N_120register_memory_viewIfEEvPKc(17195);\n __ZN12_GLOBAL__N_120register_memory_viewIdEEvPKc(17226);\n __ZN12_GLOBAL__N_120register_memory_viewIeEEvPKc(17258);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDIvE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIvE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIbE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIbE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_116register_integerIcEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIcE3getEv()|0);\n $3 = $1;\n $4 = -128 << 24 >> 24;\n $5 = 127 << 24 >> 24;\n __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIaEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIaE3getEv()|0);\n $3 = $1;\n $4 = -128 << 24 >> 24;\n $5 = 127 << 24 >> 24;\n __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIhEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIhE3getEv()|0);\n $3 = $1;\n $4 = 0;\n $5 = 255;\n __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIsEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIsE3getEv()|0);\n $3 = $1;\n $4 = -32768 << 16 >> 16;\n $5 = 32767 << 16 >> 16;\n __embind_register_integer(($2|0),($3|0),2,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerItEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDItE3getEv()|0);\n $3 = $1;\n $4 = 0;\n $5 = 65535;\n __embind_register_integer(($2|0),($3|0),2,($4|0),($5|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIiEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIiE3getEv()|0);\n $3 = $1;\n __embind_register_integer(($2|0),($3|0),4,-2147483648,2147483647);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIjEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIjE3getEv()|0);\n $3 = $1;\n __embind_register_integer(($2|0),($3|0),4,0,-1);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerIlEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIlE3getEv()|0);\n $3 = $1;\n __embind_register_integer(($2|0),($3|0),4,-2147483648,2147483647);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_116register_integerImEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDImE3getEv()|0);\n $3 = $1;\n __embind_register_integer(($2|0),($3|0),4,0,-1);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_114register_floatIfEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIfE3getEv()|0);\n $3 = $1;\n __embind_register_float(($2|0),($3|0),4);\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_114register_floatIdEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDIdE3getEv()|0);\n $3 = $1;\n __embind_register_float(($2|0),($3|0),8);\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_3valEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_3valEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIcEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIcEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIcEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIaEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIaEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIhEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIhEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIsEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIsEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewItEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexItEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIiEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIiEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIjEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIjEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIlEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIlEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIlEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewImEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewImEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexImEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIfEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIfEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIfEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIdEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIdEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIdEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN12_GLOBAL__N_120register_memory_viewIeEEvPKc($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = $0;\n $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIeEEE3getEv()|0);\n $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIeEENS_15TypedArrayIndexEv()|0);\n $4 = $1;\n __embind_register_memory_view(($2|0),($3|0),($4|0));\n STACKTOP = sp;return;\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIeEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIeEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIeEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 7;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIeEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1056|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIdEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIdEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIdEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 7;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIdEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1064|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIfEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIfEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIfEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 6;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIfEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1072|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewImEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewImEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexImEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 5;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewImEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1080|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIlEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIlEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIlEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 4;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIlEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1088|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIjEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIjEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIjEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 5;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIjEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1096|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIiEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIiEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIiEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 4;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIiEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1104|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewItEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewItEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexItEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 3;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewItEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1112|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIsEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIsEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIsEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 2;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIsEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1120|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIhEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIhEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIhEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 1;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIhEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1128|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIaEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIaEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIaEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 0;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIaEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1136|0);\n}\nfunction __ZN10emscripten8internal6TypeIDINS_11memory_viewIcEEE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIcEEE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN12_GLOBAL__N_118getTypedArrayIndexIcEENS_15TypedArrayIndexEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 0;\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIcEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1144|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDINS_3valEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1152|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1160|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1192|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1216|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIdE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIdE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIdE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1552|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIfE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIfE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIfE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1544|0);\n}\nfunction __ZN10emscripten8internal6TypeIDImE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDImE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDImE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1536|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIlE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIlE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIlE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1528|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIjE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIjE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIjE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1520|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIiE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIiE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIiE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1512|0);\n}\nfunction __ZN10emscripten8internal6TypeIDItE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDItE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDItE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1504|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIsE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIsE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIsE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1496|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIhE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIhE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIhE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1480|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIaE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIaE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIaE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1488|0);\n}\nfunction __ZN10emscripten8internal6TypeIDIcE3getEv() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (__ZN10emscripten8internal11LightTypeIDIcE3getEv()|0);\n return ($0|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIcE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1472|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIbE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1464|0);\n}\nfunction __ZN10emscripten8internal11LightTypeIDIvE3getEv() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (1448|0);\n}\nfunction ___getTypeName($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = $0;\n $3 = $2;\n $1 = $3;\n $4 = $1;\n $5 = ((($4)) + 4|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (___strdup($6)|0);\n STACKTOP = sp;return ($7|0);\n}\nfunction _malloc($0) {\n $0 = $0|0;\n var $$0 = 0, $$0$i$i = 0, $$0$i$i$i = 0, $$0$i16$i = 0, $$0187$i = 0, $$0189$i = 0, $$0190$i = 0, $$0191$i = 0, $$0197 = 0, $$0199 = 0, $$02065$i$i = 0, $$0207$lcssa$i$i = 0, $$02074$i$i = 0, $$0211$i$i = 0, $$0212$i$i = 0, $$024372$i = 0, $$0286$i$i = 0, $$028711$i$i = 0, $$0288$lcssa$i$i = 0, $$028810$i$i = 0;\n var $$0294$i$i = 0, $$0295$i$i = 0, $$0340$i = 0, $$034217$i = 0, $$0343$lcssa$i = 0, $$034316$i = 0, $$0345$i = 0, $$0351$i = 0, $$0357$i = 0, $$0358$i = 0, $$0360$i = 0, $$0361$i = 0, $$0367$i = 0, $$1194$i = 0, $$1194$i$be = 0, $$1194$i$ph = 0, $$1196$i = 0, $$1196$i$be = 0, $$1196$i$ph = 0, $$124471$i = 0;\n var $$1290$i$i = 0, $$1290$i$i$be = 0, $$1290$i$i$ph = 0, $$1292$i$i = 0, $$1292$i$i$be = 0, $$1292$i$i$ph = 0, $$1341$i = 0, $$1346$i = 0, $$1362$i = 0, $$1369$i = 0, $$1369$i$be = 0, $$1369$i$ph = 0, $$1373$i = 0, $$1373$i$be = 0, $$1373$i$ph = 0, $$2234243136$i = 0, $$2247$ph$i = 0, $$2253$ph$i = 0, $$2353$i = 0, $$3$i = 0;\n var $$3$i$i = 0, $$3$i203 = 0, $$3$i203218 = 0, $$3348$i = 0, $$3371$i = 0, $$4$lcssa$i = 0, $$420$i = 0, $$420$i$ph = 0, $$4236$i = 0, $$4349$lcssa$i = 0, $$434919$i = 0, $$434919$i$ph = 0, $$4355$i = 0, $$535618$i = 0, $$535618$i$ph = 0, $$723947$i = 0, $$748$i = 0, $$pre = 0, $$pre$i = 0, $$pre$i$i = 0;\n var $$pre$i17$i = 0, $$pre$i208 = 0, $$pre$i210 = 0, $$pre$phi$i$iZ2D = 0, $$pre$phi$i18$iZ2D = 0, $$pre$phi$i209Z2D = 0, $$pre$phi$iZ2D = 0, $$pre$phi17$i$iZ2D = 0, $$pre$phiZ2D = 0, $$pre16$i$i = 0, $$sink = 0, $$sink325 = 0, $$sink326 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0;\n var $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0;\n var $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0;\n var $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0;\n var $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0;\n var $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0;\n var $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0;\n var $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0;\n var $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0;\n var $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0;\n var $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0;\n var $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0;\n var $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0;\n var $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0;\n var $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0;\n var $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0;\n var $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0;\n var $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0;\n var $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0;\n var $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0;\n var $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0;\n var $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0;\n var $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0;\n var $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0;\n var $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0;\n var $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0;\n var $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0;\n var $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0;\n var $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0;\n var $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0;\n var $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0;\n var $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0;\n var $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0;\n var $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0;\n var $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0;\n var $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0;\n var $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0;\n var $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0;\n var $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0;\n var $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0;\n var $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0;\n var $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0;\n var $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0;\n var $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0;\n var $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0;\n var $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0;\n var $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0;\n var $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0;\n var $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0;\n var $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0;\n var $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0;\n var $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0;\n var $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0;\n var $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0;\n var $997 = 0, $998 = 0, $999 = 0, $cond$i = 0, $cond$i$i = 0, $cond$i207 = 0, $not$$i = 0, $or$cond$i = 0, $or$cond$i213 = 0, $or$cond1$i = 0, $or$cond11$i = 0, $or$cond2$i = 0, $or$cond2$i214 = 0, $or$cond5$i = 0, $or$cond50$i = 0, $or$cond51$i = 0, $or$cond6$i = 0, $or$cond7$i = 0, $or$cond8$i = 0, $or$cond8$not$i = 0;\n var $spec$select$i = 0, $spec$select$i205 = 0, $spec$select1$i = 0, $spec$select3$i = 0, $spec$select49$i = 0, $spec$select7$i = 0, $spec$select9$i = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = sp;\n $2 = ($0>>>0)<(245);\n do {\n  if ($2) {\n   $3 = ($0>>>0)<(11);\n   $4 = (($0) + 11)|0;\n   $5 = $4 & -8;\n   $6 = $3 ? 16 : $5;\n   $7 = $6 >>> 3;\n   $8 = HEAP32[5323]|0;\n   $9 = $8 >>> $7;\n   $10 = $9 & 3;\n   $11 = ($10|0)==(0);\n   if (!($11)) {\n    $12 = $9 & 1;\n    $13 = $12 ^ 1;\n    $14 = (($13) + ($7))|0;\n    $15 = $14 << 1;\n    $16 = (21332 + ($15<<2)|0);\n    $17 = ((($16)) + 8|0);\n    $18 = HEAP32[$17>>2]|0;\n    $19 = ((($18)) + 8|0);\n    $20 = HEAP32[$19>>2]|0;\n    $21 = ($20|0)==($16|0);\n    do {\n     if ($21) {\n      $22 = 1 << $14;\n      $23 = $22 ^ -1;\n      $24 = $8 & $23;\n      HEAP32[5323] = $24;\n     } else {\n      $25 = HEAP32[(21308)>>2]|0;\n      $26 = ($25>>>0)>($20>>>0);\n      if ($26) {\n       _abort();\n       // unreachable;\n      }\n      $27 = ((($20)) + 12|0);\n      $28 = HEAP32[$27>>2]|0;\n      $29 = ($28|0)==($18|0);\n      if ($29) {\n       HEAP32[$27>>2] = $16;\n       HEAP32[$17>>2] = $20;\n       break;\n      } else {\n       _abort();\n       // unreachable;\n      }\n     }\n    } while(0);\n    $30 = $14 << 3;\n    $31 = $30 | 3;\n    $32 = ((($18)) + 4|0);\n    HEAP32[$32>>2] = $31;\n    $33 = (($18) + ($30)|0);\n    $34 = ((($33)) + 4|0);\n    $35 = HEAP32[$34>>2]|0;\n    $36 = $35 | 1;\n    HEAP32[$34>>2] = $36;\n    $$0 = $19;\n    STACKTOP = sp;return ($$0|0);\n   }\n   $37 = HEAP32[(21300)>>2]|0;\n   $38 = ($6>>>0)>($37>>>0);\n   if ($38) {\n    $39 = ($9|0)==(0);\n    if (!($39)) {\n     $40 = $9 << $7;\n     $41 = 2 << $7;\n     $42 = (0 - ($41))|0;\n     $43 = $41 | $42;\n     $44 = $40 & $43;\n     $45 = (0 - ($44))|0;\n     $46 = $44 & $45;\n     $47 = (($46) + -1)|0;\n     $48 = $47 >>> 12;\n     $49 = $48 & 16;\n     $50 = $47 >>> $49;\n     $51 = $50 >>> 5;\n     $52 = $51 & 8;\n     $53 = $52 | $49;\n     $54 = $50 >>> $52;\n     $55 = $54 >>> 2;\n     $56 = $55 & 4;\n     $57 = $53 | $56;\n     $58 = $54 >>> $56;\n     $59 = $58 >>> 1;\n     $60 = $59 & 2;\n     $61 = $57 | $60;\n     $62 = $58 >>> $60;\n     $63 = $62 >>> 1;\n     $64 = $63 & 1;\n     $65 = $61 | $64;\n     $66 = $62 >>> $64;\n     $67 = (($65) + ($66))|0;\n     $68 = $67 << 1;\n     $69 = (21332 + ($68<<2)|0);\n     $70 = ((($69)) + 8|0);\n     $71 = HEAP32[$70>>2]|0;\n     $72 = ((($71)) + 8|0);\n     $73 = HEAP32[$72>>2]|0;\n     $74 = ($73|0)==($69|0);\n     do {\n      if ($74) {\n       $75 = 1 << $67;\n       $76 = $75 ^ -1;\n       $77 = $8 & $76;\n       HEAP32[5323] = $77;\n       $98 = $77;\n      } else {\n       $78 = HEAP32[(21308)>>2]|0;\n       $79 = ($78>>>0)>($73>>>0);\n       if ($79) {\n        _abort();\n        // unreachable;\n       }\n       $80 = ((($73)) + 12|0);\n       $81 = HEAP32[$80>>2]|0;\n       $82 = ($81|0)==($71|0);\n       if ($82) {\n        HEAP32[$80>>2] = $69;\n        HEAP32[$70>>2] = $73;\n        $98 = $8;\n        break;\n       } else {\n        _abort();\n        // unreachable;\n       }\n      }\n     } while(0);\n     $83 = $67 << 3;\n     $84 = (($83) - ($6))|0;\n     $85 = $6 | 3;\n     $86 = ((($71)) + 4|0);\n     HEAP32[$86>>2] = $85;\n     $87 = (($71) + ($6)|0);\n     $88 = $84 | 1;\n     $89 = ((($87)) + 4|0);\n     HEAP32[$89>>2] = $88;\n     $90 = (($71) + ($83)|0);\n     HEAP32[$90>>2] = $84;\n     $91 = ($37|0)==(0);\n     if (!($91)) {\n      $92 = HEAP32[(21312)>>2]|0;\n      $93 = $37 >>> 3;\n      $94 = $93 << 1;\n      $95 = (21332 + ($94<<2)|0);\n      $96 = 1 << $93;\n      $97 = $98 & $96;\n      $99 = ($97|0)==(0);\n      if ($99) {\n       $100 = $98 | $96;\n       HEAP32[5323] = $100;\n       $$pre = ((($95)) + 8|0);\n       $$0199 = $95;$$pre$phiZ2D = $$pre;\n      } else {\n       $101 = ((($95)) + 8|0);\n       $102 = HEAP32[$101>>2]|0;\n       $103 = HEAP32[(21308)>>2]|0;\n       $104 = ($103>>>0)>($102>>>0);\n       if ($104) {\n        _abort();\n        // unreachable;\n       } else {\n        $$0199 = $102;$$pre$phiZ2D = $101;\n       }\n      }\n      HEAP32[$$pre$phiZ2D>>2] = $92;\n      $105 = ((($$0199)) + 12|0);\n      HEAP32[$105>>2] = $92;\n      $106 = ((($92)) + 8|0);\n      HEAP32[$106>>2] = $$0199;\n      $107 = ((($92)) + 12|0);\n      HEAP32[$107>>2] = $95;\n     }\n     HEAP32[(21300)>>2] = $84;\n     HEAP32[(21312)>>2] = $87;\n     $$0 = $72;\n     STACKTOP = sp;return ($$0|0);\n    }\n    $108 = HEAP32[(21296)>>2]|0;\n    $109 = ($108|0)==(0);\n    if ($109) {\n     $$0197 = $6;\n    } else {\n     $110 = (0 - ($108))|0;\n     $111 = $108 & $110;\n     $112 = (($111) + -1)|0;\n     $113 = $112 >>> 12;\n     $114 = $113 & 16;\n     $115 = $112 >>> $114;\n     $116 = $115 >>> 5;\n     $117 = $116 & 8;\n     $118 = $117 | $114;\n     $119 = $115 >>> $117;\n     $120 = $119 >>> 2;\n     $121 = $120 & 4;\n     $122 = $118 | $121;\n     $123 = $119 >>> $121;\n     $124 = $123 >>> 1;\n     $125 = $124 & 2;\n     $126 = $122 | $125;\n     $127 = $123 >>> $125;\n     $128 = $127 >>> 1;\n     $129 = $128 & 1;\n     $130 = $126 | $129;\n     $131 = $127 >>> $129;\n     $132 = (($130) + ($131))|0;\n     $133 = (21596 + ($132<<2)|0);\n     $134 = HEAP32[$133>>2]|0;\n     $135 = ((($134)) + 4|0);\n     $136 = HEAP32[$135>>2]|0;\n     $137 = $136 & -8;\n     $138 = (($137) - ($6))|0;\n     $$0189$i = $134;$$0190$i = $134;$$0191$i = $138;\n     while(1) {\n      $139 = ((($$0189$i)) + 16|0);\n      $140 = HEAP32[$139>>2]|0;\n      $141 = ($140|0)==(0|0);\n      if ($141) {\n       $142 = ((($$0189$i)) + 20|0);\n       $143 = HEAP32[$142>>2]|0;\n       $144 = ($143|0)==(0|0);\n       if ($144) {\n        break;\n       } else {\n        $146 = $143;\n       }\n      } else {\n       $146 = $140;\n      }\n      $145 = ((($146)) + 4|0);\n      $147 = HEAP32[$145>>2]|0;\n      $148 = $147 & -8;\n      $149 = (($148) - ($6))|0;\n      $150 = ($149>>>0)<($$0191$i>>>0);\n      $spec$select$i = $150 ? $149 : $$0191$i;\n      $spec$select1$i = $150 ? $146 : $$0190$i;\n      $$0189$i = $146;$$0190$i = $spec$select1$i;$$0191$i = $spec$select$i;\n     }\n     $151 = HEAP32[(21308)>>2]|0;\n     $152 = ($151>>>0)>($$0190$i>>>0);\n     if ($152) {\n      _abort();\n      // unreachable;\n     }\n     $153 = (($$0190$i) + ($6)|0);\n     $154 = ($153>>>0)>($$0190$i>>>0);\n     if (!($154)) {\n      _abort();\n      // unreachable;\n     }\n     $155 = ((($$0190$i)) + 24|0);\n     $156 = HEAP32[$155>>2]|0;\n     $157 = ((($$0190$i)) + 12|0);\n     $158 = HEAP32[$157>>2]|0;\n     $159 = ($158|0)==($$0190$i|0);\n     do {\n      if ($159) {\n       $169 = ((($$0190$i)) + 20|0);\n       $170 = HEAP32[$169>>2]|0;\n       $171 = ($170|0)==(0|0);\n       if ($171) {\n        $172 = ((($$0190$i)) + 16|0);\n        $173 = HEAP32[$172>>2]|0;\n        $174 = ($173|0)==(0|0);\n        if ($174) {\n         $$3$i = 0;\n         break;\n        } else {\n         $$1194$i$ph = $173;$$1196$i$ph = $172;\n        }\n       } else {\n        $$1194$i$ph = $170;$$1196$i$ph = $169;\n       }\n       $$1194$i = $$1194$i$ph;$$1196$i = $$1196$i$ph;\n       while(1) {\n        $175 = ((($$1194$i)) + 20|0);\n        $176 = HEAP32[$175>>2]|0;\n        $177 = ($176|0)==(0|0);\n        if ($177) {\n         $178 = ((($$1194$i)) + 16|0);\n         $179 = HEAP32[$178>>2]|0;\n         $180 = ($179|0)==(0|0);\n         if ($180) {\n          break;\n         } else {\n          $$1194$i$be = $179;$$1196$i$be = $178;\n         }\n        } else {\n         $$1194$i$be = $176;$$1196$i$be = $175;\n        }\n        $$1194$i = $$1194$i$be;$$1196$i = $$1196$i$be;\n       }\n       $181 = ($151>>>0)>($$1196$i>>>0);\n       if ($181) {\n        _abort();\n        // unreachable;\n       } else {\n        HEAP32[$$1196$i>>2] = 0;\n        $$3$i = $$1194$i;\n        break;\n       }\n      } else {\n       $160 = ((($$0190$i)) + 8|0);\n       $161 = HEAP32[$160>>2]|0;\n       $162 = ($151>>>0)>($161>>>0);\n       if ($162) {\n        _abort();\n        // unreachable;\n       }\n       $163 = ((($161)) + 12|0);\n       $164 = HEAP32[$163>>2]|0;\n       $165 = ($164|0)==($$0190$i|0);\n       if (!($165)) {\n        _abort();\n        // unreachable;\n       }\n       $166 = ((($158)) + 8|0);\n       $167 = HEAP32[$166>>2]|0;\n       $168 = ($167|0)==($$0190$i|0);\n       if ($168) {\n        HEAP32[$163>>2] = $158;\n        HEAP32[$166>>2] = $161;\n        $$3$i = $158;\n        break;\n       } else {\n        _abort();\n        // unreachable;\n       }\n      }\n     } while(0);\n     $182 = ($156|0)==(0|0);\n     L78: do {\n      if (!($182)) {\n       $183 = ((($$0190$i)) + 28|0);\n       $184 = HEAP32[$183>>2]|0;\n       $185 = (21596 + ($184<<2)|0);\n       $186 = HEAP32[$185>>2]|0;\n       $187 = ($$0190$i|0)==($186|0);\n       do {\n        if ($187) {\n         HEAP32[$185>>2] = $$3$i;\n         $cond$i = ($$3$i|0)==(0|0);\n         if ($cond$i) {\n          $188 = 1 << $184;\n          $189 = $188 ^ -1;\n          $190 = $108 & $189;\n          HEAP32[(21296)>>2] = $190;\n          break L78;\n         }\n        } else {\n         $191 = HEAP32[(21308)>>2]|0;\n         $192 = ($191>>>0)>($156>>>0);\n         if ($192) {\n          _abort();\n          // unreachable;\n         } else {\n          $193 = ((($156)) + 16|0);\n          $194 = HEAP32[$193>>2]|0;\n          $195 = ($194|0)==($$0190$i|0);\n          $196 = ((($156)) + 20|0);\n          $$sink = $195 ? $193 : $196;\n          HEAP32[$$sink>>2] = $$3$i;\n          $197 = ($$3$i|0)==(0|0);\n          if ($197) {\n           break L78;\n          } else {\n           break;\n          }\n         }\n        }\n       } while(0);\n       $198 = HEAP32[(21308)>>2]|0;\n       $199 = ($198>>>0)>($$3$i>>>0);\n       if ($199) {\n        _abort();\n        // unreachable;\n       }\n       $200 = ((($$3$i)) + 24|0);\n       HEAP32[$200>>2] = $156;\n       $201 = ((($$0190$i)) + 16|0);\n       $202 = HEAP32[$201>>2]|0;\n       $203 = ($202|0)==(0|0);\n       do {\n        if (!($203)) {\n         $204 = ($198>>>0)>($202>>>0);\n         if ($204) {\n          _abort();\n          // unreachable;\n         } else {\n          $205 = ((($$3$i)) + 16|0);\n          HEAP32[$205>>2] = $202;\n          $206 = ((($202)) + 24|0);\n          HEAP32[$206>>2] = $$3$i;\n          break;\n         }\n        }\n       } while(0);\n       $207 = ((($$0190$i)) + 20|0);\n       $208 = HEAP32[$207>>2]|0;\n       $209 = ($208|0)==(0|0);\n       if (!($209)) {\n        $210 = HEAP32[(21308)>>2]|0;\n        $211 = ($210>>>0)>($208>>>0);\n        if ($211) {\n         _abort();\n         // unreachable;\n        } else {\n         $212 = ((($$3$i)) + 20|0);\n         HEAP32[$212>>2] = $208;\n         $213 = ((($208)) + 24|0);\n         HEAP32[$213>>2] = $$3$i;\n         break;\n        }\n       }\n      }\n     } while(0);\n     $214 = ($$0191$i>>>0)<(16);\n     if ($214) {\n      $215 = (($$0191$i) + ($6))|0;\n      $216 = $215 | 3;\n      $217 = ((($$0190$i)) + 4|0);\n      HEAP32[$217>>2] = $216;\n      $218 = (($$0190$i) + ($215)|0);\n      $219 = ((($218)) + 4|0);\n      $220 = HEAP32[$219>>2]|0;\n      $221 = $220 | 1;\n      HEAP32[$219>>2] = $221;\n     } else {\n      $222 = $6 | 3;\n      $223 = ((($$0190$i)) + 4|0);\n      HEAP32[$223>>2] = $222;\n      $224 = $$0191$i | 1;\n      $225 = ((($153)) + 4|0);\n      HEAP32[$225>>2] = $224;\n      $226 = (($153) + ($$0191$i)|0);\n      HEAP32[$226>>2] = $$0191$i;\n      $227 = ($37|0)==(0);\n      if (!($227)) {\n       $228 = HEAP32[(21312)>>2]|0;\n       $229 = $37 >>> 3;\n       $230 = $229 << 1;\n       $231 = (21332 + ($230<<2)|0);\n       $232 = 1 << $229;\n       $233 = $232 & $8;\n       $234 = ($233|0)==(0);\n       if ($234) {\n        $235 = $232 | $8;\n        HEAP32[5323] = $235;\n        $$pre$i = ((($231)) + 8|0);\n        $$0187$i = $231;$$pre$phi$iZ2D = $$pre$i;\n       } else {\n        $236 = ((($231)) + 8|0);\n        $237 = HEAP32[$236>>2]|0;\n        $238 = HEAP32[(21308)>>2]|0;\n        $239 = ($238>>>0)>($237>>>0);\n        if ($239) {\n         _abort();\n         // unreachable;\n        } else {\n         $$0187$i = $237;$$pre$phi$iZ2D = $236;\n        }\n       }\n       HEAP32[$$pre$phi$iZ2D>>2] = $228;\n       $240 = ((($$0187$i)) + 12|0);\n       HEAP32[$240>>2] = $228;\n       $241 = ((($228)) + 8|0);\n       HEAP32[$241>>2] = $$0187$i;\n       $242 = ((($228)) + 12|0);\n       HEAP32[$242>>2] = $231;\n      }\n      HEAP32[(21300)>>2] = $$0191$i;\n      HEAP32[(21312)>>2] = $153;\n     }\n     $243 = ((($$0190$i)) + 8|0);\n     $$0 = $243;\n     STACKTOP = sp;return ($$0|0);\n    }\n   } else {\n    $$0197 = $6;\n   }\n  } else {\n   $244 = ($0>>>0)>(4294967231);\n   if ($244) {\n    $$0197 = -1;\n   } else {\n    $245 = (($0) + 11)|0;\n    $246 = $245 & -8;\n    $247 = HEAP32[(21296)>>2]|0;\n    $248 = ($247|0)==(0);\n    if ($248) {\n     $$0197 = $246;\n    } else {\n     $249 = (0 - ($246))|0;\n     $250 = $245 >>> 8;\n     $251 = ($250|0)==(0);\n     if ($251) {\n      $$0357$i = 0;\n     } else {\n      $252 = ($246>>>0)>(16777215);\n      if ($252) {\n       $$0357$i = 31;\n      } else {\n       $253 = (($250) + 1048320)|0;\n       $254 = $253 >>> 16;\n       $255 = $254 & 8;\n       $256 = $250 << $255;\n       $257 = (($256) + 520192)|0;\n       $258 = $257 >>> 16;\n       $259 = $258 & 4;\n       $260 = $259 | $255;\n       $261 = $256 << $259;\n       $262 = (($261) + 245760)|0;\n       $263 = $262 >>> 16;\n       $264 = $263 & 2;\n       $265 = $260 | $264;\n       $266 = (14 - ($265))|0;\n       $267 = $261 << $264;\n       $268 = $267 >>> 15;\n       $269 = (($266) + ($268))|0;\n       $270 = $269 << 1;\n       $271 = (($269) + 7)|0;\n       $272 = $246 >>> $271;\n       $273 = $272 & 1;\n       $274 = $273 | $270;\n       $$0357$i = $274;\n      }\n     }\n     $275 = (21596 + ($$0357$i<<2)|0);\n     $276 = HEAP32[$275>>2]|0;\n     $277 = ($276|0)==(0|0);\n     L122: do {\n      if ($277) {\n       $$2353$i = 0;$$3$i203 = 0;$$3348$i = $249;\n       label = 85;\n      } else {\n       $278 = ($$0357$i|0)==(31);\n       $279 = $$0357$i >>> 1;\n       $280 = (25 - ($279))|0;\n       $281 = $278 ? 0 : $280;\n       $282 = $246 << $281;\n       $$0340$i = 0;$$0345$i = $249;$$0351$i = $276;$$0358$i = $282;$$0361$i = 0;\n       while(1) {\n        $283 = ((($$0351$i)) + 4|0);\n        $284 = HEAP32[$283>>2]|0;\n        $285 = $284 & -8;\n        $286 = (($285) - ($246))|0;\n        $287 = ($286>>>0)<($$0345$i>>>0);\n        if ($287) {\n         $288 = ($286|0)==(0);\n         if ($288) {\n          $$420$i$ph = $$0351$i;$$434919$i$ph = 0;$$535618$i$ph = $$0351$i;\n          label = 89;\n          break L122;\n         } else {\n          $$1341$i = $$0351$i;$$1346$i = $286;\n         }\n        } else {\n         $$1341$i = $$0340$i;$$1346$i = $$0345$i;\n        }\n        $289 = ((($$0351$i)) + 20|0);\n        $290 = HEAP32[$289>>2]|0;\n        $291 = $$0358$i >>> 31;\n        $292 = (((($$0351$i)) + 16|0) + ($291<<2)|0);\n        $293 = HEAP32[$292>>2]|0;\n        $294 = ($290|0)==(0|0);\n        $295 = ($290|0)==($293|0);\n        $or$cond2$i = $294 | $295;\n        $$1362$i = $or$cond2$i ? $$0361$i : $290;\n        $296 = ($293|0)==(0|0);\n        $spec$select7$i = $$0358$i << 1;\n        if ($296) {\n         $$2353$i = $$1362$i;$$3$i203 = $$1341$i;$$3348$i = $$1346$i;\n         label = 85;\n         break;\n        } else {\n         $$0340$i = $$1341$i;$$0345$i = $$1346$i;$$0351$i = $293;$$0358$i = $spec$select7$i;$$0361$i = $$1362$i;\n        }\n       }\n      }\n     } while(0);\n     if ((label|0) == 85) {\n      $297 = ($$2353$i|0)==(0|0);\n      $298 = ($$3$i203|0)==(0|0);\n      $or$cond$i = $297 & $298;\n      if ($or$cond$i) {\n       $299 = 2 << $$0357$i;\n       $300 = (0 - ($299))|0;\n       $301 = $299 | $300;\n       $302 = $301 & $247;\n       $303 = ($302|0)==(0);\n       if ($303) {\n        $$0197 = $246;\n        break;\n       }\n       $304 = (0 - ($302))|0;\n       $305 = $302 & $304;\n       $306 = (($305) + -1)|0;\n       $307 = $306 >>> 12;\n       $308 = $307 & 16;\n       $309 = $306 >>> $308;\n       $310 = $309 >>> 5;\n       $311 = $310 & 8;\n       $312 = $311 | $308;\n       $313 = $309 >>> $311;\n       $314 = $313 >>> 2;\n       $315 = $314 & 4;\n       $316 = $312 | $315;\n       $317 = $313 >>> $315;\n       $318 = $317 >>> 1;\n       $319 = $318 & 2;\n       $320 = $316 | $319;\n       $321 = $317 >>> $319;\n       $322 = $321 >>> 1;\n       $323 = $322 & 1;\n       $324 = $320 | $323;\n       $325 = $321 >>> $323;\n       $326 = (($324) + ($325))|0;\n       $327 = (21596 + ($326<<2)|0);\n       $328 = HEAP32[$327>>2]|0;\n       $$3$i203218 = 0;$$4355$i = $328;\n      } else {\n       $$3$i203218 = $$3$i203;$$4355$i = $$2353$i;\n      }\n      $329 = ($$4355$i|0)==(0|0);\n      if ($329) {\n       $$4$lcssa$i = $$3$i203218;$$4349$lcssa$i = $$3348$i;\n      } else {\n       $$420$i$ph = $$3$i203218;$$434919$i$ph = $$3348$i;$$535618$i$ph = $$4355$i;\n       label = 89;\n      }\n     }\n     if ((label|0) == 89) {\n      $$420$i = $$420$i$ph;$$434919$i = $$434919$i$ph;$$535618$i = $$535618$i$ph;\n      while(1) {\n       $330 = ((($$535618$i)) + 4|0);\n       $331 = HEAP32[$330>>2]|0;\n       $332 = $331 & -8;\n       $333 = (($332) - ($246))|0;\n       $334 = ($333>>>0)<($$434919$i>>>0);\n       $spec$select$i205 = $334 ? $333 : $$434919$i;\n       $spec$select3$i = $334 ? $$535618$i : $$420$i;\n       $335 = ((($$535618$i)) + 16|0);\n       $336 = HEAP32[$335>>2]|0;\n       $337 = ($336|0)==(0|0);\n       if ($337) {\n        $338 = ((($$535618$i)) + 20|0);\n        $339 = HEAP32[$338>>2]|0;\n        $341 = $339;\n       } else {\n        $341 = $336;\n       }\n       $340 = ($341|0)==(0|0);\n       if ($340) {\n        $$4$lcssa$i = $spec$select3$i;$$4349$lcssa$i = $spec$select$i205;\n        break;\n       } else {\n        $$420$i = $spec$select3$i;$$434919$i = $spec$select$i205;$$535618$i = $341;\n       }\n      }\n     }\n     $342 = ($$4$lcssa$i|0)==(0|0);\n     if ($342) {\n      $$0197 = $246;\n     } else {\n      $343 = HEAP32[(21300)>>2]|0;\n      $344 = (($343) - ($246))|0;\n      $345 = ($$4349$lcssa$i>>>0)<($344>>>0);\n      if ($345) {\n       $346 = HEAP32[(21308)>>2]|0;\n       $347 = ($346>>>0)>($$4$lcssa$i>>>0);\n       if ($347) {\n        _abort();\n        // unreachable;\n       }\n       $348 = (($$4$lcssa$i) + ($246)|0);\n       $349 = ($348>>>0)>($$4$lcssa$i>>>0);\n       if (!($349)) {\n        _abort();\n        // unreachable;\n       }\n       $350 = ((($$4$lcssa$i)) + 24|0);\n       $351 = HEAP32[$350>>2]|0;\n       $352 = ((($$4$lcssa$i)) + 12|0);\n       $353 = HEAP32[$352>>2]|0;\n       $354 = ($353|0)==($$4$lcssa$i|0);\n       do {\n        if ($354) {\n         $364 = ((($$4$lcssa$i)) + 20|0);\n         $365 = HEAP32[$364>>2]|0;\n         $366 = ($365|0)==(0|0);\n         if ($366) {\n          $367 = ((($$4$lcssa$i)) + 16|0);\n          $368 = HEAP32[$367>>2]|0;\n          $369 = ($368|0)==(0|0);\n          if ($369) {\n           $$3371$i = 0;\n           break;\n          } else {\n           $$1369$i$ph = $368;$$1373$i$ph = $367;\n          }\n         } else {\n          $$1369$i$ph = $365;$$1373$i$ph = $364;\n         }\n         $$1369$i = $$1369$i$ph;$$1373$i = $$1373$i$ph;\n         while(1) {\n          $370 = ((($$1369$i)) + 20|0);\n          $371 = HEAP32[$370>>2]|0;\n          $372 = ($371|0)==(0|0);\n          if ($372) {\n           $373 = ((($$1369$i)) + 16|0);\n           $374 = HEAP32[$373>>2]|0;\n           $375 = ($374|0)==(0|0);\n           if ($375) {\n            break;\n           } else {\n            $$1369$i$be = $374;$$1373$i$be = $373;\n           }\n          } else {\n           $$1369$i$be = $371;$$1373$i$be = $370;\n          }\n          $$1369$i = $$1369$i$be;$$1373$i = $$1373$i$be;\n         }\n         $376 = ($346>>>0)>($$1373$i>>>0);\n         if ($376) {\n          _abort();\n          // unreachable;\n         } else {\n          HEAP32[$$1373$i>>2] = 0;\n          $$3371$i = $$1369$i;\n          break;\n         }\n        } else {\n         $355 = ((($$4$lcssa$i)) + 8|0);\n         $356 = HEAP32[$355>>2]|0;\n         $357 = ($346>>>0)>($356>>>0);\n         if ($357) {\n          _abort();\n          // unreachable;\n         }\n         $358 = ((($356)) + 12|0);\n         $359 = HEAP32[$358>>2]|0;\n         $360 = ($359|0)==($$4$lcssa$i|0);\n         if (!($360)) {\n          _abort();\n          // unreachable;\n         }\n         $361 = ((($353)) + 8|0);\n         $362 = HEAP32[$361>>2]|0;\n         $363 = ($362|0)==($$4$lcssa$i|0);\n         if ($363) {\n          HEAP32[$358>>2] = $353;\n          HEAP32[$361>>2] = $356;\n          $$3371$i = $353;\n          break;\n         } else {\n          _abort();\n          // unreachable;\n         }\n        }\n       } while(0);\n       $377 = ($351|0)==(0|0);\n       L176: do {\n        if ($377) {\n         $469 = $247;\n        } else {\n         $378 = ((($$4$lcssa$i)) + 28|0);\n         $379 = HEAP32[$378>>2]|0;\n         $380 = (21596 + ($379<<2)|0);\n         $381 = HEAP32[$380>>2]|0;\n         $382 = ($$4$lcssa$i|0)==($381|0);\n         do {\n          if ($382) {\n           HEAP32[$380>>2] = $$3371$i;\n           $cond$i207 = ($$3371$i|0)==(0|0);\n           if ($cond$i207) {\n            $383 = 1 << $379;\n            $384 = $383 ^ -1;\n            $385 = $247 & $384;\n            HEAP32[(21296)>>2] = $385;\n            $469 = $385;\n            break L176;\n           }\n          } else {\n           $386 = HEAP32[(21308)>>2]|0;\n           $387 = ($386>>>0)>($351>>>0);\n           if ($387) {\n            _abort();\n            // unreachable;\n           } else {\n            $388 = ((($351)) + 16|0);\n            $389 = HEAP32[$388>>2]|0;\n            $390 = ($389|0)==($$4$lcssa$i|0);\n            $391 = ((($351)) + 20|0);\n            $$sink325 = $390 ? $388 : $391;\n            HEAP32[$$sink325>>2] = $$3371$i;\n            $392 = ($$3371$i|0)==(0|0);\n            if ($392) {\n             $469 = $247;\n             break L176;\n            } else {\n             break;\n            }\n           }\n          }\n         } while(0);\n         $393 = HEAP32[(21308)>>2]|0;\n         $394 = ($393>>>0)>($$3371$i>>>0);\n         if ($394) {\n          _abort();\n          // unreachable;\n         }\n         $395 = ((($$3371$i)) + 24|0);\n         HEAP32[$395>>2] = $351;\n         $396 = ((($$4$lcssa$i)) + 16|0);\n         $397 = HEAP32[$396>>2]|0;\n         $398 = ($397|0)==(0|0);\n         do {\n          if (!($398)) {\n           $399 = ($393>>>0)>($397>>>0);\n           if ($399) {\n            _abort();\n            // unreachable;\n           } else {\n            $400 = ((($$3371$i)) + 16|0);\n            HEAP32[$400>>2] = $397;\n            $401 = ((($397)) + 24|0);\n            HEAP32[$401>>2] = $$3371$i;\n            break;\n           }\n          }\n         } while(0);\n         $402 = ((($$4$lcssa$i)) + 20|0);\n         $403 = HEAP32[$402>>2]|0;\n         $404 = ($403|0)==(0|0);\n         if ($404) {\n          $469 = $247;\n         } else {\n          $405 = HEAP32[(21308)>>2]|0;\n          $406 = ($405>>>0)>($403>>>0);\n          if ($406) {\n           _abort();\n           // unreachable;\n          } else {\n           $407 = ((($$3371$i)) + 20|0);\n           HEAP32[$407>>2] = $403;\n           $408 = ((($403)) + 24|0);\n           HEAP32[$408>>2] = $$3371$i;\n           $469 = $247;\n           break;\n          }\n         }\n        }\n       } while(0);\n       $409 = ($$4349$lcssa$i>>>0)<(16);\n       L200: do {\n        if ($409) {\n         $410 = (($$4349$lcssa$i) + ($246))|0;\n         $411 = $410 | 3;\n         $412 = ((($$4$lcssa$i)) + 4|0);\n         HEAP32[$412>>2] = $411;\n         $413 = (($$4$lcssa$i) + ($410)|0);\n         $414 = ((($413)) + 4|0);\n         $415 = HEAP32[$414>>2]|0;\n         $416 = $415 | 1;\n         HEAP32[$414>>2] = $416;\n        } else {\n         $417 = $246 | 3;\n         $418 = ((($$4$lcssa$i)) + 4|0);\n         HEAP32[$418>>2] = $417;\n         $419 = $$4349$lcssa$i | 1;\n         $420 = ((($348)) + 4|0);\n         HEAP32[$420>>2] = $419;\n         $421 = (($348) + ($$4349$lcssa$i)|0);\n         HEAP32[$421>>2] = $$4349$lcssa$i;\n         $422 = $$4349$lcssa$i >>> 3;\n         $423 = ($$4349$lcssa$i>>>0)<(256);\n         if ($423) {\n          $424 = $422 << 1;\n          $425 = (21332 + ($424<<2)|0);\n          $426 = HEAP32[5323]|0;\n          $427 = 1 << $422;\n          $428 = $426 & $427;\n          $429 = ($428|0)==(0);\n          if ($429) {\n           $430 = $426 | $427;\n           HEAP32[5323] = $430;\n           $$pre$i208 = ((($425)) + 8|0);\n           $$0367$i = $425;$$pre$phi$i209Z2D = $$pre$i208;\n          } else {\n           $431 = ((($425)) + 8|0);\n           $432 = HEAP32[$431>>2]|0;\n           $433 = HEAP32[(21308)>>2]|0;\n           $434 = ($433>>>0)>($432>>>0);\n           if ($434) {\n            _abort();\n            // unreachable;\n           } else {\n            $$0367$i = $432;$$pre$phi$i209Z2D = $431;\n           }\n          }\n          HEAP32[$$pre$phi$i209Z2D>>2] = $348;\n          $435 = ((($$0367$i)) + 12|0);\n          HEAP32[$435>>2] = $348;\n          $436 = ((($348)) + 8|0);\n          HEAP32[$436>>2] = $$0367$i;\n          $437 = ((($348)) + 12|0);\n          HEAP32[$437>>2] = $425;\n          break;\n         }\n         $438 = $$4349$lcssa$i >>> 8;\n         $439 = ($438|0)==(0);\n         if ($439) {\n          $$0360$i = 0;\n         } else {\n          $440 = ($$4349$lcssa$i>>>0)>(16777215);\n          if ($440) {\n           $$0360$i = 31;\n          } else {\n           $441 = (($438) + 1048320)|0;\n           $442 = $441 >>> 16;\n           $443 = $442 & 8;\n           $444 = $438 << $443;\n           $445 = (($444) + 520192)|0;\n           $446 = $445 >>> 16;\n           $447 = $446 & 4;\n           $448 = $447 | $443;\n           $449 = $444 << $447;\n           $450 = (($449) + 245760)|0;\n           $451 = $450 >>> 16;\n           $452 = $451 & 2;\n           $453 = $448 | $452;\n           $454 = (14 - ($453))|0;\n           $455 = $449 << $452;\n           $456 = $455 >>> 15;\n           $457 = (($454) + ($456))|0;\n           $458 = $457 << 1;\n           $459 = (($457) + 7)|0;\n           $460 = $$4349$lcssa$i >>> $459;\n           $461 = $460 & 1;\n           $462 = $461 | $458;\n           $$0360$i = $462;\n          }\n         }\n         $463 = (21596 + ($$0360$i<<2)|0);\n         $464 = ((($348)) + 28|0);\n         HEAP32[$464>>2] = $$0360$i;\n         $465 = ((($348)) + 16|0);\n         $466 = ((($465)) + 4|0);\n         HEAP32[$466>>2] = 0;\n         HEAP32[$465>>2] = 0;\n         $467 = 1 << $$0360$i;\n         $468 = $469 & $467;\n         $470 = ($468|0)==(0);\n         if ($470) {\n          $471 = $469 | $467;\n          HEAP32[(21296)>>2] = $471;\n          HEAP32[$463>>2] = $348;\n          $472 = ((($348)) + 24|0);\n          HEAP32[$472>>2] = $463;\n          $473 = ((($348)) + 12|0);\n          HEAP32[$473>>2] = $348;\n          $474 = ((($348)) + 8|0);\n          HEAP32[$474>>2] = $348;\n          break;\n         }\n         $475 = HEAP32[$463>>2]|0;\n         $476 = ((($475)) + 4|0);\n         $477 = HEAP32[$476>>2]|0;\n         $478 = $477 & -8;\n         $479 = ($478|0)==($$4349$lcssa$i|0);\n         L218: do {\n          if ($479) {\n           $$0343$lcssa$i = $475;\n          } else {\n           $480 = ($$0360$i|0)==(31);\n           $481 = $$0360$i >>> 1;\n           $482 = (25 - ($481))|0;\n           $483 = $480 ? 0 : $482;\n           $484 = $$4349$lcssa$i << $483;\n           $$034217$i = $484;$$034316$i = $475;\n           while(1) {\n            $491 = $$034217$i >>> 31;\n            $492 = (((($$034316$i)) + 16|0) + ($491<<2)|0);\n            $487 = HEAP32[$492>>2]|0;\n            $493 = ($487|0)==(0|0);\n            if ($493) {\n             break;\n            }\n            $485 = $$034217$i << 1;\n            $486 = ((($487)) + 4|0);\n            $488 = HEAP32[$486>>2]|0;\n            $489 = $488 & -8;\n            $490 = ($489|0)==($$4349$lcssa$i|0);\n            if ($490) {\n             $$0343$lcssa$i = $487;\n             break L218;\n            } else {\n             $$034217$i = $485;$$034316$i = $487;\n            }\n           }\n           $494 = HEAP32[(21308)>>2]|0;\n           $495 = ($494>>>0)>($492>>>0);\n           if ($495) {\n            _abort();\n            // unreachable;\n           } else {\n            HEAP32[$492>>2] = $348;\n            $496 = ((($348)) + 24|0);\n            HEAP32[$496>>2] = $$034316$i;\n            $497 = ((($348)) + 12|0);\n            HEAP32[$497>>2] = $348;\n            $498 = ((($348)) + 8|0);\n            HEAP32[$498>>2] = $348;\n            break L200;\n           }\n          }\n         } while(0);\n         $499 = ((($$0343$lcssa$i)) + 8|0);\n         $500 = HEAP32[$499>>2]|0;\n         $501 = HEAP32[(21308)>>2]|0;\n         $502 = ($501>>>0)<=($$0343$lcssa$i>>>0);\n         $503 = ($501>>>0)<=($500>>>0);\n         $504 = $503 & $502;\n         if ($504) {\n          $505 = ((($500)) + 12|0);\n          HEAP32[$505>>2] = $348;\n          HEAP32[$499>>2] = $348;\n          $506 = ((($348)) + 8|0);\n          HEAP32[$506>>2] = $500;\n          $507 = ((($348)) + 12|0);\n          HEAP32[$507>>2] = $$0343$lcssa$i;\n          $508 = ((($348)) + 24|0);\n          HEAP32[$508>>2] = 0;\n          break;\n         } else {\n          _abort();\n          // unreachable;\n         }\n        }\n       } while(0);\n       $509 = ((($$4$lcssa$i)) + 8|0);\n       $$0 = $509;\n       STACKTOP = sp;return ($$0|0);\n      } else {\n       $$0197 = $246;\n      }\n     }\n    }\n   }\n  }\n } while(0);\n $510 = HEAP32[(21300)>>2]|0;\n $511 = ($510>>>0)<($$0197>>>0);\n if (!($511)) {\n  $512 = (($510) - ($$0197))|0;\n  $513 = HEAP32[(21312)>>2]|0;\n  $514 = ($512>>>0)>(15);\n  if ($514) {\n   $515 = (($513) + ($$0197)|0);\n   HEAP32[(21312)>>2] = $515;\n   HEAP32[(21300)>>2] = $512;\n   $516 = $512 | 1;\n   $517 = ((($515)) + 4|0);\n   HEAP32[$517>>2] = $516;\n   $518 = (($513) + ($510)|0);\n   HEAP32[$518>>2] = $512;\n   $519 = $$0197 | 3;\n   $520 = ((($513)) + 4|0);\n   HEAP32[$520>>2] = $519;\n  } else {\n   HEAP32[(21300)>>2] = 0;\n   HEAP32[(21312)>>2] = 0;\n   $521 = $510 | 3;\n   $522 = ((($513)) + 4|0);\n   HEAP32[$522>>2] = $521;\n   $523 = (($513) + ($510)|0);\n   $524 = ((($523)) + 4|0);\n   $525 = HEAP32[$524>>2]|0;\n   $526 = $525 | 1;\n   HEAP32[$524>>2] = $526;\n  }\n  $527 = ((($513)) + 8|0);\n  $$0 = $527;\n  STACKTOP = sp;return ($$0|0);\n }\n $528 = HEAP32[(21304)>>2]|0;\n $529 = ($528>>>0)>($$0197>>>0);\n if ($529) {\n  $530 = (($528) - ($$0197))|0;\n  HEAP32[(21304)>>2] = $530;\n  $531 = HEAP32[(21316)>>2]|0;\n  $532 = (($531) + ($$0197)|0);\n  HEAP32[(21316)>>2] = $532;\n  $533 = $530 | 1;\n  $534 = ((($532)) + 4|0);\n  HEAP32[$534>>2] = $533;\n  $535 = $$0197 | 3;\n  $536 = ((($531)) + 4|0);\n  HEAP32[$536>>2] = $535;\n  $537 = ((($531)) + 8|0);\n  $$0 = $537;\n  STACKTOP = sp;return ($$0|0);\n }\n $538 = HEAP32[5441]|0;\n $539 = ($538|0)==(0);\n if ($539) {\n  HEAP32[(21772)>>2] = 4096;\n  HEAP32[(21768)>>2] = 4096;\n  HEAP32[(21776)>>2] = -1;\n  HEAP32[(21780)>>2] = -1;\n  HEAP32[(21784)>>2] = 0;\n  HEAP32[(21736)>>2] = 0;\n  $540 = $1;\n  $541 = $540 & -16;\n  $542 = $541 ^ 1431655768;\n  HEAP32[5441] = $542;\n  $546 = 4096;\n } else {\n  $$pre$i210 = HEAP32[(21772)>>2]|0;\n  $546 = $$pre$i210;\n }\n $543 = (($$0197) + 48)|0;\n $544 = (($$0197) + 47)|0;\n $545 = (($546) + ($544))|0;\n $547 = (0 - ($546))|0;\n $548 = $545 & $547;\n $549 = ($548>>>0)>($$0197>>>0);\n if (!($549)) {\n  $$0 = 0;\n  STACKTOP = sp;return ($$0|0);\n }\n $550 = HEAP32[(21732)>>2]|0;\n $551 = ($550|0)==(0);\n if (!($551)) {\n  $552 = HEAP32[(21724)>>2]|0;\n  $553 = (($552) + ($548))|0;\n  $554 = ($553>>>0)<=($552>>>0);\n  $555 = ($553>>>0)>($550>>>0);\n  $or$cond1$i = $554 | $555;\n  if ($or$cond1$i) {\n   $$0 = 0;\n   STACKTOP = sp;return ($$0|0);\n  }\n }\n $556 = HEAP32[(21736)>>2]|0;\n $557 = $556 & 4;\n $558 = ($557|0)==(0);\n L257: do {\n  if ($558) {\n   $559 = HEAP32[(21316)>>2]|0;\n   $560 = ($559|0)==(0|0);\n   L259: do {\n    if ($560) {\n     label = 173;\n    } else {\n     $$0$i$i = (21740);\n     while(1) {\n      $561 = HEAP32[$$0$i$i>>2]|0;\n      $562 = ($561>>>0)>($559>>>0);\n      if (!($562)) {\n       $563 = ((($$0$i$i)) + 4|0);\n       $564 = HEAP32[$563>>2]|0;\n       $565 = (($561) + ($564)|0);\n       $566 = ($565>>>0)>($559>>>0);\n       if ($566) {\n        break;\n       }\n      }\n      $567 = ((($$0$i$i)) + 8|0);\n      $568 = HEAP32[$567>>2]|0;\n      $569 = ($568|0)==(0|0);\n      if ($569) {\n       label = 173;\n       break L259;\n      } else {\n       $$0$i$i = $568;\n      }\n     }\n     $592 = (($545) - ($528))|0;\n     $593 = $592 & $547;\n     $594 = ($593>>>0)<(2147483647);\n     if ($594) {\n      $595 = ((($$0$i$i)) + 4|0);\n      $596 = (_sbrk(($593|0))|0);\n      $597 = HEAP32[$$0$i$i>>2]|0;\n      $598 = HEAP32[$595>>2]|0;\n      $599 = (($597) + ($598)|0);\n      $600 = ($596|0)==($599|0);\n      if ($600) {\n       $601 = ($596|0)==((-1)|0);\n       if ($601) {\n        $$2234243136$i = $593;\n       } else {\n        $$723947$i = $593;$$748$i = $596;\n        label = 190;\n        break L257;\n       }\n      } else {\n       $$2247$ph$i = $596;$$2253$ph$i = $593;\n       label = 181;\n      }\n     } else {\n      $$2234243136$i = 0;\n     }\n    }\n   } while(0);\n   do {\n    if ((label|0) == 173) {\n     $570 = (_sbrk(0)|0);\n     $571 = ($570|0)==((-1)|0);\n     if ($571) {\n      $$2234243136$i = 0;\n     } else {\n      $572 = $570;\n      $573 = HEAP32[(21768)>>2]|0;\n      $574 = (($573) + -1)|0;\n      $575 = $574 & $572;\n      $576 = ($575|0)==(0);\n      $577 = (($574) + ($572))|0;\n      $578 = (0 - ($573))|0;\n      $579 = $577 & $578;\n      $580 = (($579) - ($572))|0;\n      $581 = $576 ? 0 : $580;\n      $spec$select49$i = (($581) + ($548))|0;\n      $582 = HEAP32[(21724)>>2]|0;\n      $583 = (($spec$select49$i) + ($582))|0;\n      $584 = ($spec$select49$i>>>0)>($$0197>>>0);\n      $585 = ($spec$select49$i>>>0)<(2147483647);\n      $or$cond$i213 = $584 & $585;\n      if ($or$cond$i213) {\n       $586 = HEAP32[(21732)>>2]|0;\n       $587 = ($586|0)==(0);\n       if (!($587)) {\n        $588 = ($583>>>0)<=($582>>>0);\n        $589 = ($583>>>0)>($586>>>0);\n        $or$cond2$i214 = $588 | $589;\n        if ($or$cond2$i214) {\n         $$2234243136$i = 0;\n         break;\n        }\n       }\n       $590 = (_sbrk(($spec$select49$i|0))|0);\n       $591 = ($590|0)==($570|0);\n       if ($591) {\n        $$723947$i = $spec$select49$i;$$748$i = $570;\n        label = 190;\n        break L257;\n       } else {\n        $$2247$ph$i = $590;$$2253$ph$i = $spec$select49$i;\n        label = 181;\n       }\n      } else {\n       $$2234243136$i = 0;\n      }\n     }\n    }\n   } while(0);\n   do {\n    if ((label|0) == 181) {\n     $602 = (0 - ($$2253$ph$i))|0;\n     $603 = ($$2247$ph$i|0)!=((-1)|0);\n     $604 = ($$2253$ph$i>>>0)<(2147483647);\n     $or$cond7$i = $604 & $603;\n     $605 = ($543>>>0)>($$2253$ph$i>>>0);\n     $or$cond6$i = $605 & $or$cond7$i;\n     if (!($or$cond6$i)) {\n      $615 = ($$2247$ph$i|0)==((-1)|0);\n      if ($615) {\n       $$2234243136$i = 0;\n       break;\n      } else {\n       $$723947$i = $$2253$ph$i;$$748$i = $$2247$ph$i;\n       label = 190;\n       break L257;\n      }\n     }\n     $606 = HEAP32[(21772)>>2]|0;\n     $607 = (($544) - ($$2253$ph$i))|0;\n     $608 = (($607) + ($606))|0;\n     $609 = (0 - ($606))|0;\n     $610 = $608 & $609;\n     $611 = ($610>>>0)<(2147483647);\n     if (!($611)) {\n      $$723947$i = $$2253$ph$i;$$748$i = $$2247$ph$i;\n      label = 190;\n      break L257;\n     }\n     $612 = (_sbrk(($610|0))|0);\n     $613 = ($612|0)==((-1)|0);\n     if ($613) {\n      (_sbrk(($602|0))|0);\n      $$2234243136$i = 0;\n      break;\n     } else {\n      $614 = (($610) + ($$2253$ph$i))|0;\n      $$723947$i = $614;$$748$i = $$2247$ph$i;\n      label = 190;\n      break L257;\n     }\n    }\n   } while(0);\n   $616 = HEAP32[(21736)>>2]|0;\n   $617 = $616 | 4;\n   HEAP32[(21736)>>2] = $617;\n   $$4236$i = $$2234243136$i;\n   label = 188;\n  } else {\n   $$4236$i = 0;\n   label = 188;\n  }\n } while(0);\n if ((label|0) == 188) {\n  $618 = ($548>>>0)<(2147483647);\n  if ($618) {\n   $619 = (_sbrk(($548|0))|0);\n   $620 = (_sbrk(0)|0);\n   $621 = ($619|0)!=((-1)|0);\n   $622 = ($620|0)!=((-1)|0);\n   $or$cond5$i = $621 & $622;\n   $623 = ($619>>>0)<($620>>>0);\n   $or$cond8$i = $623 & $or$cond5$i;\n   $624 = $620;\n   $625 = $619;\n   $626 = (($624) - ($625))|0;\n   $627 = (($$0197) + 40)|0;\n   $628 = ($626>>>0)>($627>>>0);\n   $spec$select9$i = $628 ? $626 : $$4236$i;\n   $or$cond8$not$i = $or$cond8$i ^ 1;\n   $629 = ($619|0)==((-1)|0);\n   $not$$i = $628 ^ 1;\n   $630 = $629 | $not$$i;\n   $or$cond50$i = $630 | $or$cond8$not$i;\n   if (!($or$cond50$i)) {\n    $$723947$i = $spec$select9$i;$$748$i = $619;\n    label = 190;\n   }\n  }\n }\n if ((label|0) == 190) {\n  $631 = HEAP32[(21724)>>2]|0;\n  $632 = (($631) + ($$723947$i))|0;\n  HEAP32[(21724)>>2] = $632;\n  $633 = HEAP32[(21728)>>2]|0;\n  $634 = ($632>>>0)>($633>>>0);\n  if ($634) {\n   HEAP32[(21728)>>2] = $632;\n  }\n  $635 = HEAP32[(21316)>>2]|0;\n  $636 = ($635|0)==(0|0);\n  L294: do {\n   if ($636) {\n    $637 = HEAP32[(21308)>>2]|0;\n    $638 = ($637|0)==(0|0);\n    $639 = ($$748$i>>>0)<($637>>>0);\n    $or$cond11$i = $638 | $639;\n    if ($or$cond11$i) {\n     HEAP32[(21308)>>2] = $$748$i;\n    }\n    HEAP32[(21740)>>2] = $$748$i;\n    HEAP32[(21744)>>2] = $$723947$i;\n    HEAP32[(21752)>>2] = 0;\n    $640 = HEAP32[5441]|0;\n    HEAP32[(21328)>>2] = $640;\n    HEAP32[(21324)>>2] = -1;\n    HEAP32[(21344)>>2] = (21332);\n    HEAP32[(21340)>>2] = (21332);\n    HEAP32[(21352)>>2] = (21340);\n    HEAP32[(21348)>>2] = (21340);\n    HEAP32[(21360)>>2] = (21348);\n    HEAP32[(21356)>>2] = (21348);\n    HEAP32[(21368)>>2] = (21356);\n    HEAP32[(21364)>>2] = (21356);\n    HEAP32[(21376)>>2] = (21364);\n    HEAP32[(21372)>>2] = (21364);\n    HEAP32[(21384)>>2] = (21372);\n    HEAP32[(21380)>>2] = (21372);\n    HEAP32[(21392)>>2] = (21380);\n    HEAP32[(21388)>>2] = (21380);\n    HEAP32[(21400)>>2] = (21388);\n    HEAP32[(21396)>>2] = (21388);\n    HEAP32[(21408)>>2] = (21396);\n    HEAP32[(21404)>>2] = (21396);\n    HEAP32[(21416)>>2] = (21404);\n    HEAP32[(21412)>>2] = (21404);\n    HEAP32[(21424)>>2] = (21412);\n    HEAP32[(21420)>>2] = (21412);\n    HEAP32[(21432)>>2] = (21420);\n    HEAP32[(21428)>>2] = (21420);\n    HEAP32[(21440)>>2] = (21428);\n    HEAP32[(21436)>>2] = (21428);\n    HEAP32[(21448)>>2] = (21436);\n    HEAP32[(21444)>>2] = (21436);\n    HEAP32[(21456)>>2] = (21444);\n    HEAP32[(21452)>>2] = (21444);\n    HEAP32[(21464)>>2] = (21452);\n    HEAP32[(21460)>>2] = (21452);\n    HEAP32[(21472)>>2] = (21460);\n    HEAP32[(21468)>>2] = (21460);\n    HEAP32[(21480)>>2] = (21468);\n    HEAP32[(21476)>>2] = (21468);\n    HEAP32[(21488)>>2] = (21476);\n    HEAP32[(21484)>>2] = (21476);\n    HEAP32[(21496)>>2] = (21484);\n    HEAP32[(21492)>>2] = (21484);\n    HEAP32[(21504)>>2] = (21492);\n    HEAP32[(21500)>>2] = (21492);\n    HEAP32[(21512)>>2] = (21500);\n    HEAP32[(21508)>>2] = (21500);\n    HEAP32[(21520)>>2] = (21508);\n    HEAP32[(21516)>>2] = (21508);\n    HEAP32[(21528)>>2] = (21516);\n    HEAP32[(21524)>>2] = (21516);\n    HEAP32[(21536)>>2] = (21524);\n    HEAP32[(21532)>>2] = (21524);\n    HEAP32[(21544)>>2] = (21532);\n    HEAP32[(21540)>>2] = (21532);\n    HEAP32[(21552)>>2] = (21540);\n    HEAP32[(21548)>>2] = (21540);\n    HEAP32[(21560)>>2] = (21548);\n    HEAP32[(21556)>>2] = (21548);\n    HEAP32[(21568)>>2] = (21556);\n    HEAP32[(21564)>>2] = (21556);\n    HEAP32[(21576)>>2] = (21564);\n    HEAP32[(21572)>>2] = (21564);\n    HEAP32[(21584)>>2] = (21572);\n    HEAP32[(21580)>>2] = (21572);\n    HEAP32[(21592)>>2] = (21580);\n    HEAP32[(21588)>>2] = (21580);\n    $641 = (($$723947$i) + -40)|0;\n    $642 = ((($$748$i)) + 8|0);\n    $643 = $642;\n    $644 = $643 & 7;\n    $645 = ($644|0)==(0);\n    $646 = (0 - ($643))|0;\n    $647 = $646 & 7;\n    $648 = $645 ? 0 : $647;\n    $649 = (($$748$i) + ($648)|0);\n    $650 = (($641) - ($648))|0;\n    HEAP32[(21316)>>2] = $649;\n    HEAP32[(21304)>>2] = $650;\n    $651 = $650 | 1;\n    $652 = ((($649)) + 4|0);\n    HEAP32[$652>>2] = $651;\n    $653 = (($$748$i) + ($641)|0);\n    $654 = ((($653)) + 4|0);\n    HEAP32[$654>>2] = 40;\n    $655 = HEAP32[(21780)>>2]|0;\n    HEAP32[(21320)>>2] = $655;\n   } else {\n    $$024372$i = (21740);\n    while(1) {\n     $656 = HEAP32[$$024372$i>>2]|0;\n     $657 = ((($$024372$i)) + 4|0);\n     $658 = HEAP32[$657>>2]|0;\n     $659 = (($656) + ($658)|0);\n     $660 = ($$748$i|0)==($659|0);\n     if ($660) {\n      label = 199;\n      break;\n     }\n     $661 = ((($$024372$i)) + 8|0);\n     $662 = HEAP32[$661>>2]|0;\n     $663 = ($662|0)==(0|0);\n     if ($663) {\n      break;\n     } else {\n      $$024372$i = $662;\n     }\n    }\n    if ((label|0) == 199) {\n     $664 = ((($$024372$i)) + 4|0);\n     $665 = ((($$024372$i)) + 12|0);\n     $666 = HEAP32[$665>>2]|0;\n     $667 = $666 & 8;\n     $668 = ($667|0)==(0);\n     if ($668) {\n      $669 = ($656>>>0)<=($635>>>0);\n      $670 = ($$748$i>>>0)>($635>>>0);\n      $or$cond51$i = $670 & $669;\n      if ($or$cond51$i) {\n       $671 = (($658) + ($$723947$i))|0;\n       HEAP32[$664>>2] = $671;\n       $672 = HEAP32[(21304)>>2]|0;\n       $673 = (($672) + ($$723947$i))|0;\n       $674 = ((($635)) + 8|0);\n       $675 = $674;\n       $676 = $675 & 7;\n       $677 = ($676|0)==(0);\n       $678 = (0 - ($675))|0;\n       $679 = $678 & 7;\n       $680 = $677 ? 0 : $679;\n       $681 = (($635) + ($680)|0);\n       $682 = (($673) - ($680))|0;\n       HEAP32[(21316)>>2] = $681;\n       HEAP32[(21304)>>2] = $682;\n       $683 = $682 | 1;\n       $684 = ((($681)) + 4|0);\n       HEAP32[$684>>2] = $683;\n       $685 = (($635) + ($673)|0);\n       $686 = ((($685)) + 4|0);\n       HEAP32[$686>>2] = 40;\n       $687 = HEAP32[(21780)>>2]|0;\n       HEAP32[(21320)>>2] = $687;\n       break;\n      }\n     }\n    }\n    $688 = HEAP32[(21308)>>2]|0;\n    $689 = ($$748$i>>>0)<($688>>>0);\n    if ($689) {\n     HEAP32[(21308)>>2] = $$748$i;\n     $753 = $$748$i;\n    } else {\n     $753 = $688;\n    }\n    $690 = (($$748$i) + ($$723947$i)|0);\n    $$124471$i = (21740);\n    while(1) {\n     $691 = HEAP32[$$124471$i>>2]|0;\n     $692 = ($691|0)==($690|0);\n     if ($692) {\n      label = 207;\n      break;\n     }\n     $693 = ((($$124471$i)) + 8|0);\n     $694 = HEAP32[$693>>2]|0;\n     $695 = ($694|0)==(0|0);\n     if ($695) {\n      break;\n     } else {\n      $$124471$i = $694;\n     }\n    }\n    if ((label|0) == 207) {\n     $696 = ((($$124471$i)) + 12|0);\n     $697 = HEAP32[$696>>2]|0;\n     $698 = $697 & 8;\n     $699 = ($698|0)==(0);\n     if ($699) {\n      HEAP32[$$124471$i>>2] = $$748$i;\n      $700 = ((($$124471$i)) + 4|0);\n      $701 = HEAP32[$700>>2]|0;\n      $702 = (($701) + ($$723947$i))|0;\n      HEAP32[$700>>2] = $702;\n      $703 = ((($$748$i)) + 8|0);\n      $704 = $703;\n      $705 = $704 & 7;\n      $706 = ($705|0)==(0);\n      $707 = (0 - ($704))|0;\n      $708 = $707 & 7;\n      $709 = $706 ? 0 : $708;\n      $710 = (($$748$i) + ($709)|0);\n      $711 = ((($690)) + 8|0);\n      $712 = $711;\n      $713 = $712 & 7;\n      $714 = ($713|0)==(0);\n      $715 = (0 - ($712))|0;\n      $716 = $715 & 7;\n      $717 = $714 ? 0 : $716;\n      $718 = (($690) + ($717)|0);\n      $719 = $718;\n      $720 = $710;\n      $721 = (($719) - ($720))|0;\n      $722 = (($710) + ($$0197)|0);\n      $723 = (($721) - ($$0197))|0;\n      $724 = $$0197 | 3;\n      $725 = ((($710)) + 4|0);\n      HEAP32[$725>>2] = $724;\n      $726 = ($635|0)==($718|0);\n      L317: do {\n       if ($726) {\n        $727 = HEAP32[(21304)>>2]|0;\n        $728 = (($727) + ($723))|0;\n        HEAP32[(21304)>>2] = $728;\n        HEAP32[(21316)>>2] = $722;\n        $729 = $728 | 1;\n        $730 = ((($722)) + 4|0);\n        HEAP32[$730>>2] = $729;\n       } else {\n        $731 = HEAP32[(21312)>>2]|0;\n        $732 = ($731|0)==($718|0);\n        if ($732) {\n         $733 = HEAP32[(21300)>>2]|0;\n         $734 = (($733) + ($723))|0;\n         HEAP32[(21300)>>2] = $734;\n         HEAP32[(21312)>>2] = $722;\n         $735 = $734 | 1;\n         $736 = ((($722)) + 4|0);\n         HEAP32[$736>>2] = $735;\n         $737 = (($722) + ($734)|0);\n         HEAP32[$737>>2] = $734;\n         break;\n        }\n        $738 = ((($718)) + 4|0);\n        $739 = HEAP32[$738>>2]|0;\n        $740 = $739 & 3;\n        $741 = ($740|0)==(1);\n        if ($741) {\n         $742 = $739 & -8;\n         $743 = $739 >>> 3;\n         $744 = ($739>>>0)<(256);\n         L325: do {\n          if ($744) {\n           $745 = ((($718)) + 8|0);\n           $746 = HEAP32[$745>>2]|0;\n           $747 = ((($718)) + 12|0);\n           $748 = HEAP32[$747>>2]|0;\n           $749 = $743 << 1;\n           $750 = (21332 + ($749<<2)|0);\n           $751 = ($746|0)==($750|0);\n           do {\n            if (!($751)) {\n             $752 = ($753>>>0)>($746>>>0);\n             if ($752) {\n              _abort();\n              // unreachable;\n             }\n             $754 = ((($746)) + 12|0);\n             $755 = HEAP32[$754>>2]|0;\n             $756 = ($755|0)==($718|0);\n             if ($756) {\n              break;\n             }\n             _abort();\n             // unreachable;\n            }\n           } while(0);\n           $757 = ($748|0)==($746|0);\n           if ($757) {\n            $758 = 1 << $743;\n            $759 = $758 ^ -1;\n            $760 = HEAP32[5323]|0;\n            $761 = $760 & $759;\n            HEAP32[5323] = $761;\n            break;\n           }\n           $762 = ($748|0)==($750|0);\n           do {\n            if ($762) {\n             $$pre16$i$i = ((($748)) + 8|0);\n             $$pre$phi17$i$iZ2D = $$pre16$i$i;\n            } else {\n             $763 = ($753>>>0)>($748>>>0);\n             if ($763) {\n              _abort();\n              // unreachable;\n             }\n             $764 = ((($748)) + 8|0);\n             $765 = HEAP32[$764>>2]|0;\n             $766 = ($765|0)==($718|0);\n             if ($766) {\n              $$pre$phi17$i$iZ2D = $764;\n              break;\n             }\n             _abort();\n             // unreachable;\n            }\n           } while(0);\n           $767 = ((($746)) + 12|0);\n           HEAP32[$767>>2] = $748;\n           HEAP32[$$pre$phi17$i$iZ2D>>2] = $746;\n          } else {\n           $768 = ((($718)) + 24|0);\n           $769 = HEAP32[$768>>2]|0;\n           $770 = ((($718)) + 12|0);\n           $771 = HEAP32[$770>>2]|0;\n           $772 = ($771|0)==($718|0);\n           do {\n            if ($772) {\n             $782 = ((($718)) + 16|0);\n             $783 = ((($782)) + 4|0);\n             $784 = HEAP32[$783>>2]|0;\n             $785 = ($784|0)==(0|0);\n             if ($785) {\n              $786 = HEAP32[$782>>2]|0;\n              $787 = ($786|0)==(0|0);\n              if ($787) {\n               $$3$i$i = 0;\n               break;\n              } else {\n               $$1290$i$i$ph = $786;$$1292$i$i$ph = $782;\n              }\n             } else {\n              $$1290$i$i$ph = $784;$$1292$i$i$ph = $783;\n             }\n             $$1290$i$i = $$1290$i$i$ph;$$1292$i$i = $$1292$i$i$ph;\n             while(1) {\n              $788 = ((($$1290$i$i)) + 20|0);\n              $789 = HEAP32[$788>>2]|0;\n              $790 = ($789|0)==(0|0);\n              if ($790) {\n               $791 = ((($$1290$i$i)) + 16|0);\n               $792 = HEAP32[$791>>2]|0;\n               $793 = ($792|0)==(0|0);\n               if ($793) {\n                break;\n               } else {\n                $$1290$i$i$be = $792;$$1292$i$i$be = $791;\n               }\n              } else {\n               $$1290$i$i$be = $789;$$1292$i$i$be = $788;\n              }\n              $$1290$i$i = $$1290$i$i$be;$$1292$i$i = $$1292$i$i$be;\n             }\n             $794 = ($753>>>0)>($$1292$i$i>>>0);\n             if ($794) {\n              _abort();\n              // unreachable;\n             } else {\n              HEAP32[$$1292$i$i>>2] = 0;\n              $$3$i$i = $$1290$i$i;\n              break;\n             }\n            } else {\n             $773 = ((($718)) + 8|0);\n             $774 = HEAP32[$773>>2]|0;\n             $775 = ($753>>>0)>($774>>>0);\n             if ($775) {\n              _abort();\n              // unreachable;\n             }\n             $776 = ((($774)) + 12|0);\n             $777 = HEAP32[$776>>2]|0;\n             $778 = ($777|0)==($718|0);\n             if (!($778)) {\n              _abort();\n              // unreachable;\n             }\n             $779 = ((($771)) + 8|0);\n             $780 = HEAP32[$779>>2]|0;\n             $781 = ($780|0)==($718|0);\n             if ($781) {\n              HEAP32[$776>>2] = $771;\n              HEAP32[$779>>2] = $774;\n              $$3$i$i = $771;\n              break;\n             } else {\n              _abort();\n              // unreachable;\n             }\n            }\n           } while(0);\n           $795 = ($769|0)==(0|0);\n           if ($795) {\n            break;\n           }\n           $796 = ((($718)) + 28|0);\n           $797 = HEAP32[$796>>2]|0;\n           $798 = (21596 + ($797<<2)|0);\n           $799 = HEAP32[$798>>2]|0;\n           $800 = ($799|0)==($718|0);\n           do {\n            if ($800) {\n             HEAP32[$798>>2] = $$3$i$i;\n             $cond$i$i = ($$3$i$i|0)==(0|0);\n             if (!($cond$i$i)) {\n              break;\n             }\n             $801 = 1 << $797;\n             $802 = $801 ^ -1;\n             $803 = HEAP32[(21296)>>2]|0;\n             $804 = $803 & $802;\n             HEAP32[(21296)>>2] = $804;\n             break L325;\n            } else {\n             $805 = HEAP32[(21308)>>2]|0;\n             $806 = ($805>>>0)>($769>>>0);\n             if ($806) {\n              _abort();\n              // unreachable;\n             } else {\n              $807 = ((($769)) + 16|0);\n              $808 = HEAP32[$807>>2]|0;\n              $809 = ($808|0)==($718|0);\n              $810 = ((($769)) + 20|0);\n              $$sink326 = $809 ? $807 : $810;\n              HEAP32[$$sink326>>2] = $$3$i$i;\n              $811 = ($$3$i$i|0)==(0|0);\n              if ($811) {\n               break L325;\n              } else {\n               break;\n              }\n             }\n            }\n           } while(0);\n           $812 = HEAP32[(21308)>>2]|0;\n           $813 = ($812>>>0)>($$3$i$i>>>0);\n           if ($813) {\n            _abort();\n            // unreachable;\n           }\n           $814 = ((($$3$i$i)) + 24|0);\n           HEAP32[$814>>2] = $769;\n           $815 = ((($718)) + 16|0);\n           $816 = HEAP32[$815>>2]|0;\n           $817 = ($816|0)==(0|0);\n           do {\n            if (!($817)) {\n             $818 = ($812>>>0)>($816>>>0);\n             if ($818) {\n              _abort();\n              // unreachable;\n             } else {\n              $819 = ((($$3$i$i)) + 16|0);\n              HEAP32[$819>>2] = $816;\n              $820 = ((($816)) + 24|0);\n              HEAP32[$820>>2] = $$3$i$i;\n              break;\n             }\n            }\n           } while(0);\n           $821 = ((($815)) + 4|0);\n           $822 = HEAP32[$821>>2]|0;\n           $823 = ($822|0)==(0|0);\n           if ($823) {\n            break;\n           }\n           $824 = HEAP32[(21308)>>2]|0;\n           $825 = ($824>>>0)>($822>>>0);\n           if ($825) {\n            _abort();\n            // unreachable;\n           } else {\n            $826 = ((($$3$i$i)) + 20|0);\n            HEAP32[$826>>2] = $822;\n            $827 = ((($822)) + 24|0);\n            HEAP32[$827>>2] = $$3$i$i;\n            break;\n           }\n          }\n         } while(0);\n         $828 = (($718) + ($742)|0);\n         $829 = (($742) + ($723))|0;\n         $$0$i16$i = $828;$$0286$i$i = $829;\n        } else {\n         $$0$i16$i = $718;$$0286$i$i = $723;\n        }\n        $830 = ((($$0$i16$i)) + 4|0);\n        $831 = HEAP32[$830>>2]|0;\n        $832 = $831 & -2;\n        HEAP32[$830>>2] = $832;\n        $833 = $$0286$i$i | 1;\n        $834 = ((($722)) + 4|0);\n        HEAP32[$834>>2] = $833;\n        $835 = (($722) + ($$0286$i$i)|0);\n        HEAP32[$835>>2] = $$0286$i$i;\n        $836 = $$0286$i$i >>> 3;\n        $837 = ($$0286$i$i>>>0)<(256);\n        if ($837) {\n         $838 = $836 << 1;\n         $839 = (21332 + ($838<<2)|0);\n         $840 = HEAP32[5323]|0;\n         $841 = 1 << $836;\n         $842 = $840 & $841;\n         $843 = ($842|0)==(0);\n         do {\n          if ($843) {\n           $844 = $840 | $841;\n           HEAP32[5323] = $844;\n           $$pre$i17$i = ((($839)) + 8|0);\n           $$0294$i$i = $839;$$pre$phi$i18$iZ2D = $$pre$i17$i;\n          } else {\n           $845 = ((($839)) + 8|0);\n           $846 = HEAP32[$845>>2]|0;\n           $847 = HEAP32[(21308)>>2]|0;\n           $848 = ($847>>>0)>($846>>>0);\n           if (!($848)) {\n            $$0294$i$i = $846;$$pre$phi$i18$iZ2D = $845;\n            break;\n           }\n           _abort();\n           // unreachable;\n          }\n         } while(0);\n         HEAP32[$$pre$phi$i18$iZ2D>>2] = $722;\n         $849 = ((($$0294$i$i)) + 12|0);\n         HEAP32[$849>>2] = $722;\n         $850 = ((($722)) + 8|0);\n         HEAP32[$850>>2] = $$0294$i$i;\n         $851 = ((($722)) + 12|0);\n         HEAP32[$851>>2] = $839;\n         break;\n        }\n        $852 = $$0286$i$i >>> 8;\n        $853 = ($852|0)==(0);\n        do {\n         if ($853) {\n          $$0295$i$i = 0;\n         } else {\n          $854 = ($$0286$i$i>>>0)>(16777215);\n          if ($854) {\n           $$0295$i$i = 31;\n           break;\n          }\n          $855 = (($852) + 1048320)|0;\n          $856 = $855 >>> 16;\n          $857 = $856 & 8;\n          $858 = $852 << $857;\n          $859 = (($858) + 520192)|0;\n          $860 = $859 >>> 16;\n          $861 = $860 & 4;\n          $862 = $861 | $857;\n          $863 = $858 << $861;\n          $864 = (($863) + 245760)|0;\n          $865 = $864 >>> 16;\n          $866 = $865 & 2;\n          $867 = $862 | $866;\n          $868 = (14 - ($867))|0;\n          $869 = $863 << $866;\n          $870 = $869 >>> 15;\n          $871 = (($868) + ($870))|0;\n          $872 = $871 << 1;\n          $873 = (($871) + 7)|0;\n          $874 = $$0286$i$i >>> $873;\n          $875 = $874 & 1;\n          $876 = $875 | $872;\n          $$0295$i$i = $876;\n         }\n        } while(0);\n        $877 = (21596 + ($$0295$i$i<<2)|0);\n        $878 = ((($722)) + 28|0);\n        HEAP32[$878>>2] = $$0295$i$i;\n        $879 = ((($722)) + 16|0);\n        $880 = ((($879)) + 4|0);\n        HEAP32[$880>>2] = 0;\n        HEAP32[$879>>2] = 0;\n        $881 = HEAP32[(21296)>>2]|0;\n        $882 = 1 << $$0295$i$i;\n        $883 = $881 & $882;\n        $884 = ($883|0)==(0);\n        if ($884) {\n         $885 = $881 | $882;\n         HEAP32[(21296)>>2] = $885;\n         HEAP32[$877>>2] = $722;\n         $886 = ((($722)) + 24|0);\n         HEAP32[$886>>2] = $877;\n         $887 = ((($722)) + 12|0);\n         HEAP32[$887>>2] = $722;\n         $888 = ((($722)) + 8|0);\n         HEAP32[$888>>2] = $722;\n         break;\n        }\n        $889 = HEAP32[$877>>2]|0;\n        $890 = ((($889)) + 4|0);\n        $891 = HEAP32[$890>>2]|0;\n        $892 = $891 & -8;\n        $893 = ($892|0)==($$0286$i$i|0);\n        L410: do {\n         if ($893) {\n          $$0288$lcssa$i$i = $889;\n         } else {\n          $894 = ($$0295$i$i|0)==(31);\n          $895 = $$0295$i$i >>> 1;\n          $896 = (25 - ($895))|0;\n          $897 = $894 ? 0 : $896;\n          $898 = $$0286$i$i << $897;\n          $$028711$i$i = $898;$$028810$i$i = $889;\n          while(1) {\n           $905 = $$028711$i$i >>> 31;\n           $906 = (((($$028810$i$i)) + 16|0) + ($905<<2)|0);\n           $901 = HEAP32[$906>>2]|0;\n           $907 = ($901|0)==(0|0);\n           if ($907) {\n            break;\n           }\n           $899 = $$028711$i$i << 1;\n           $900 = ((($901)) + 4|0);\n           $902 = HEAP32[$900>>2]|0;\n           $903 = $902 & -8;\n           $904 = ($903|0)==($$0286$i$i|0);\n           if ($904) {\n            $$0288$lcssa$i$i = $901;\n            break L410;\n           } else {\n            $$028711$i$i = $899;$$028810$i$i = $901;\n           }\n          }\n          $908 = HEAP32[(21308)>>2]|0;\n          $909 = ($908>>>0)>($906>>>0);\n          if ($909) {\n           _abort();\n           // unreachable;\n          } else {\n           HEAP32[$906>>2] = $722;\n           $910 = ((($722)) + 24|0);\n           HEAP32[$910>>2] = $$028810$i$i;\n           $911 = ((($722)) + 12|0);\n           HEAP32[$911>>2] = $722;\n           $912 = ((($722)) + 8|0);\n           HEAP32[$912>>2] = $722;\n           break L317;\n          }\n         }\n        } while(0);\n        $913 = ((($$0288$lcssa$i$i)) + 8|0);\n        $914 = HEAP32[$913>>2]|0;\n        $915 = HEAP32[(21308)>>2]|0;\n        $916 = ($915>>>0)<=($$0288$lcssa$i$i>>>0);\n        $917 = ($915>>>0)<=($914>>>0);\n        $918 = $917 & $916;\n        if ($918) {\n         $919 = ((($914)) + 12|0);\n         HEAP32[$919>>2] = $722;\n         HEAP32[$913>>2] = $722;\n         $920 = ((($722)) + 8|0);\n         HEAP32[$920>>2] = $914;\n         $921 = ((($722)) + 12|0);\n         HEAP32[$921>>2] = $$0288$lcssa$i$i;\n         $922 = ((($722)) + 24|0);\n         HEAP32[$922>>2] = 0;\n         break;\n        } else {\n         _abort();\n         // unreachable;\n        }\n       }\n      } while(0);\n      $1059 = ((($710)) + 8|0);\n      $$0 = $1059;\n      STACKTOP = sp;return ($$0|0);\n     }\n    }\n    $$0$i$i$i = (21740);\n    while(1) {\n     $923 = HEAP32[$$0$i$i$i>>2]|0;\n     $924 = ($923>>>0)>($635>>>0);\n     if (!($924)) {\n      $925 = ((($$0$i$i$i)) + 4|0);\n      $926 = HEAP32[$925>>2]|0;\n      $927 = (($923) + ($926)|0);\n      $928 = ($927>>>0)>($635>>>0);\n      if ($928) {\n       break;\n      }\n     }\n     $929 = ((($$0$i$i$i)) + 8|0);\n     $930 = HEAP32[$929>>2]|0;\n     $$0$i$i$i = $930;\n    }\n    $931 = ((($927)) + -47|0);\n    $932 = ((($931)) + 8|0);\n    $933 = $932;\n    $934 = $933 & 7;\n    $935 = ($934|0)==(0);\n    $936 = (0 - ($933))|0;\n    $937 = $936 & 7;\n    $938 = $935 ? 0 : $937;\n    $939 = (($931) + ($938)|0);\n    $940 = ((($635)) + 16|0);\n    $941 = ($939>>>0)<($940>>>0);\n    $942 = $941 ? $635 : $939;\n    $943 = ((($942)) + 8|0);\n    $944 = ((($942)) + 24|0);\n    $945 = (($$723947$i) + -40)|0;\n    $946 = ((($$748$i)) + 8|0);\n    $947 = $946;\n    $948 = $947 & 7;\n    $949 = ($948|0)==(0);\n    $950 = (0 - ($947))|0;\n    $951 = $950 & 7;\n    $952 = $949 ? 0 : $951;\n    $953 = (($$748$i) + ($952)|0);\n    $954 = (($945) - ($952))|0;\n    HEAP32[(21316)>>2] = $953;\n    HEAP32[(21304)>>2] = $954;\n    $955 = $954 | 1;\n    $956 = ((($953)) + 4|0);\n    HEAP32[$956>>2] = $955;\n    $957 = (($$748$i) + ($945)|0);\n    $958 = ((($957)) + 4|0);\n    HEAP32[$958>>2] = 40;\n    $959 = HEAP32[(21780)>>2]|0;\n    HEAP32[(21320)>>2] = $959;\n    $960 = ((($942)) + 4|0);\n    HEAP32[$960>>2] = 27;\n    ;HEAP32[$943>>2]=HEAP32[(21740)>>2]|0;HEAP32[$943+4>>2]=HEAP32[(21740)+4>>2]|0;HEAP32[$943+8>>2]=HEAP32[(21740)+8>>2]|0;HEAP32[$943+12>>2]=HEAP32[(21740)+12>>2]|0;\n    HEAP32[(21740)>>2] = $$748$i;\n    HEAP32[(21744)>>2] = $$723947$i;\n    HEAP32[(21752)>>2] = 0;\n    HEAP32[(21748)>>2] = $943;\n    $962 = $944;\n    while(1) {\n     $961 = ((($962)) + 4|0);\n     HEAP32[$961>>2] = 7;\n     $963 = ((($962)) + 8|0);\n     $964 = ($963>>>0)<($927>>>0);\n     if ($964) {\n      $962 = $961;\n     } else {\n      break;\n     }\n    }\n    $965 = ($942|0)==($635|0);\n    if (!($965)) {\n     $966 = $942;\n     $967 = $635;\n     $968 = (($966) - ($967))|0;\n     $969 = HEAP32[$960>>2]|0;\n     $970 = $969 & -2;\n     HEAP32[$960>>2] = $970;\n     $971 = $968 | 1;\n     $972 = ((($635)) + 4|0);\n     HEAP32[$972>>2] = $971;\n     HEAP32[$942>>2] = $968;\n     $973 = $968 >>> 3;\n     $974 = ($968>>>0)<(256);\n     if ($974) {\n      $975 = $973 << 1;\n      $976 = (21332 + ($975<<2)|0);\n      $977 = HEAP32[5323]|0;\n      $978 = 1 << $973;\n      $979 = $977 & $978;\n      $980 = ($979|0)==(0);\n      if ($980) {\n       $981 = $977 | $978;\n       HEAP32[5323] = $981;\n       $$pre$i$i = ((($976)) + 8|0);\n       $$0211$i$i = $976;$$pre$phi$i$iZ2D = $$pre$i$i;\n      } else {\n       $982 = ((($976)) + 8|0);\n       $983 = HEAP32[$982>>2]|0;\n       $984 = HEAP32[(21308)>>2]|0;\n       $985 = ($984>>>0)>($983>>>0);\n       if ($985) {\n        _abort();\n        // unreachable;\n       } else {\n        $$0211$i$i = $983;$$pre$phi$i$iZ2D = $982;\n       }\n      }\n      HEAP32[$$pre$phi$i$iZ2D>>2] = $635;\n      $986 = ((($$0211$i$i)) + 12|0);\n      HEAP32[$986>>2] = $635;\n      $987 = ((($635)) + 8|0);\n      HEAP32[$987>>2] = $$0211$i$i;\n      $988 = ((($635)) + 12|0);\n      HEAP32[$988>>2] = $976;\n      break;\n     }\n     $989 = $968 >>> 8;\n     $990 = ($989|0)==(0);\n     if ($990) {\n      $$0212$i$i = 0;\n     } else {\n      $991 = ($968>>>0)>(16777215);\n      if ($991) {\n       $$0212$i$i = 31;\n      } else {\n       $992 = (($989) + 1048320)|0;\n       $993 = $992 >>> 16;\n       $994 = $993 & 8;\n       $995 = $989 << $994;\n       $996 = (($995) + 520192)|0;\n       $997 = $996 >>> 16;\n       $998 = $997 & 4;\n       $999 = $998 | $994;\n       $1000 = $995 << $998;\n       $1001 = (($1000) + 245760)|0;\n       $1002 = $1001 >>> 16;\n       $1003 = $1002 & 2;\n       $1004 = $999 | $1003;\n       $1005 = (14 - ($1004))|0;\n       $1006 = $1000 << $1003;\n       $1007 = $1006 >>> 15;\n       $1008 = (($1005) + ($1007))|0;\n       $1009 = $1008 << 1;\n       $1010 = (($1008) + 7)|0;\n       $1011 = $968 >>> $1010;\n       $1012 = $1011 & 1;\n       $1013 = $1012 | $1009;\n       $$0212$i$i = $1013;\n      }\n     }\n     $1014 = (21596 + ($$0212$i$i<<2)|0);\n     $1015 = ((($635)) + 28|0);\n     HEAP32[$1015>>2] = $$0212$i$i;\n     $1016 = ((($635)) + 20|0);\n     HEAP32[$1016>>2] = 0;\n     HEAP32[$940>>2] = 0;\n     $1017 = HEAP32[(21296)>>2]|0;\n     $1018 = 1 << $$0212$i$i;\n     $1019 = $1017 & $1018;\n     $1020 = ($1019|0)==(0);\n     if ($1020) {\n      $1021 = $1017 | $1018;\n      HEAP32[(21296)>>2] = $1021;\n      HEAP32[$1014>>2] = $635;\n      $1022 = ((($635)) + 24|0);\n      HEAP32[$1022>>2] = $1014;\n      $1023 = ((($635)) + 12|0);\n      HEAP32[$1023>>2] = $635;\n      $1024 = ((($635)) + 8|0);\n      HEAP32[$1024>>2] = $635;\n      break;\n     }\n     $1025 = HEAP32[$1014>>2]|0;\n     $1026 = ((($1025)) + 4|0);\n     $1027 = HEAP32[$1026>>2]|0;\n     $1028 = $1027 & -8;\n     $1029 = ($1028|0)==($968|0);\n     L451: do {\n      if ($1029) {\n       $$0207$lcssa$i$i = $1025;\n      } else {\n       $1030 = ($$0212$i$i|0)==(31);\n       $1031 = $$0212$i$i >>> 1;\n       $1032 = (25 - ($1031))|0;\n       $1033 = $1030 ? 0 : $1032;\n       $1034 = $968 << $1033;\n       $$02065$i$i = $1034;$$02074$i$i = $1025;\n       while(1) {\n        $1041 = $$02065$i$i >>> 31;\n        $1042 = (((($$02074$i$i)) + 16|0) + ($1041<<2)|0);\n        $1037 = HEAP32[$1042>>2]|0;\n        $1043 = ($1037|0)==(0|0);\n        if ($1043) {\n         break;\n        }\n        $1035 = $$02065$i$i << 1;\n        $1036 = ((($1037)) + 4|0);\n        $1038 = HEAP32[$1036>>2]|0;\n        $1039 = $1038 & -8;\n        $1040 = ($1039|0)==($968|0);\n        if ($1040) {\n         $$0207$lcssa$i$i = $1037;\n         break L451;\n        } else {\n         $$02065$i$i = $1035;$$02074$i$i = $1037;\n        }\n       }\n       $1044 = HEAP32[(21308)>>2]|0;\n       $1045 = ($1044>>>0)>($1042>>>0);\n       if ($1045) {\n        _abort();\n        // unreachable;\n       } else {\n        HEAP32[$1042>>2] = $635;\n        $1046 = ((($635)) + 24|0);\n        HEAP32[$1046>>2] = $$02074$i$i;\n        $1047 = ((($635)) + 12|0);\n        HEAP32[$1047>>2] = $635;\n        $1048 = ((($635)) + 8|0);\n        HEAP32[$1048>>2] = $635;\n        break L294;\n       }\n      }\n     } while(0);\n     $1049 = ((($$0207$lcssa$i$i)) + 8|0);\n     $1050 = HEAP32[$1049>>2]|0;\n     $1051 = HEAP32[(21308)>>2]|0;\n     $1052 = ($1051>>>0)<=($$0207$lcssa$i$i>>>0);\n     $1053 = ($1051>>>0)<=($1050>>>0);\n     $1054 = $1053 & $1052;\n     if ($1054) {\n      $1055 = ((($1050)) + 12|0);\n      HEAP32[$1055>>2] = $635;\n      HEAP32[$1049>>2] = $635;\n      $1056 = ((($635)) + 8|0);\n      HEAP32[$1056>>2] = $1050;\n      $1057 = ((($635)) + 12|0);\n      HEAP32[$1057>>2] = $$0207$lcssa$i$i;\n      $1058 = ((($635)) + 24|0);\n      HEAP32[$1058>>2] = 0;\n      break;\n     } else {\n      _abort();\n      // unreachable;\n     }\n    }\n   }\n  } while(0);\n  $1060 = HEAP32[(21304)>>2]|0;\n  $1061 = ($1060>>>0)>($$0197>>>0);\n  if ($1061) {\n   $1062 = (($1060) - ($$0197))|0;\n   HEAP32[(21304)>>2] = $1062;\n   $1063 = HEAP32[(21316)>>2]|0;\n   $1064 = (($1063) + ($$0197)|0);\n   HEAP32[(21316)>>2] = $1064;\n   $1065 = $1062 | 1;\n   $1066 = ((($1064)) + 4|0);\n   HEAP32[$1066>>2] = $1065;\n   $1067 = $$0197 | 3;\n   $1068 = ((($1063)) + 4|0);\n   HEAP32[$1068>>2] = $1067;\n   $1069 = ((($1063)) + 8|0);\n   $$0 = $1069;\n   STACKTOP = sp;return ($$0|0);\n  }\n }\n $1070 = (___errno_location()|0);\n HEAP32[$1070>>2] = 12;\n $$0 = 0;\n STACKTOP = sp;return ($$0|0);\n}\nfunction _free($0) {\n $0 = $0|0;\n var $$0211$i = 0, $$0211$in$i = 0, $$0381438 = 0, $$0382$lcssa = 0, $$0382437 = 0, $$0394 = 0, $$0401 = 0, $$1 = 0, $$1380 = 0, $$1385 = 0, $$1385$be = 0, $$1385$ph = 0, $$1388 = 0, $$1388$be = 0, $$1388$ph = 0, $$1396 = 0, $$1396$be = 0, $$1396$ph = 0, $$1400 = 0, $$1400$be = 0;\n var $$1400$ph = 0, $$2 = 0, $$3 = 0, $$3398 = 0, $$pre = 0, $$pre$phi444Z2D = 0, $$pre$phi446Z2D = 0, $$pre$phiZ2D = 0, $$pre443 = 0, $$pre445 = 0, $$sink = 0, $$sink456 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0;\n var $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0;\n var $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0;\n var $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0;\n var $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0;\n var $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0;\n var $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0;\n var $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0;\n var $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0;\n var $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0;\n var $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0;\n var $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0;\n var $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0;\n var $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0;\n var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0;\n var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $cond419 = 0, $cond420 = 0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0|0)==(0|0);\n if ($1) {\n  return;\n }\n $2 = ((($0)) + -8|0);\n $3 = HEAP32[(21308)>>2]|0;\n $4 = ($2>>>0)<($3>>>0);\n if ($4) {\n  _abort();\n  // unreachable;\n }\n $5 = ((($0)) + -4|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = $6 & 3;\n $8 = ($7|0)==(1);\n if ($8) {\n  _abort();\n  // unreachable;\n }\n $9 = $6 & -8;\n $10 = (($2) + ($9)|0);\n $11 = $6 & 1;\n $12 = ($11|0)==(0);\n L10: do {\n  if ($12) {\n   $13 = HEAP32[$2>>2]|0;\n   $14 = ($7|0)==(0);\n   if ($14) {\n    return;\n   }\n   $15 = (0 - ($13))|0;\n   $16 = (($2) + ($15)|0);\n   $17 = (($13) + ($9))|0;\n   $18 = ($16>>>0)<($3>>>0);\n   if ($18) {\n    _abort();\n    // unreachable;\n   }\n   $19 = HEAP32[(21312)>>2]|0;\n   $20 = ($19|0)==($16|0);\n   if ($20) {\n    $105 = ((($10)) + 4|0);\n    $106 = HEAP32[$105>>2]|0;\n    $107 = $106 & 3;\n    $108 = ($107|0)==(3);\n    if (!($108)) {\n     $$1 = $16;$$1380 = $17;$114 = $16;\n     break;\n    }\n    $109 = (($16) + ($17)|0);\n    $110 = ((($16)) + 4|0);\n    $111 = $17 | 1;\n    $112 = $106 & -2;\n    HEAP32[(21300)>>2] = $17;\n    HEAP32[$105>>2] = $112;\n    HEAP32[$110>>2] = $111;\n    HEAP32[$109>>2] = $17;\n    return;\n   }\n   $21 = $13 >>> 3;\n   $22 = ($13>>>0)<(256);\n   if ($22) {\n    $23 = ((($16)) + 8|0);\n    $24 = HEAP32[$23>>2]|0;\n    $25 = ((($16)) + 12|0);\n    $26 = HEAP32[$25>>2]|0;\n    $27 = $21 << 1;\n    $28 = (21332 + ($27<<2)|0);\n    $29 = ($24|0)==($28|0);\n    if (!($29)) {\n     $30 = ($3>>>0)>($24>>>0);\n     if ($30) {\n      _abort();\n      // unreachable;\n     }\n     $31 = ((($24)) + 12|0);\n     $32 = HEAP32[$31>>2]|0;\n     $33 = ($32|0)==($16|0);\n     if (!($33)) {\n      _abort();\n      // unreachable;\n     }\n    }\n    $34 = ($26|0)==($24|0);\n    if ($34) {\n     $35 = 1 << $21;\n     $36 = $35 ^ -1;\n     $37 = HEAP32[5323]|0;\n     $38 = $37 & $36;\n     HEAP32[5323] = $38;\n     $$1 = $16;$$1380 = $17;$114 = $16;\n     break;\n    }\n    $39 = ($26|0)==($28|0);\n    if ($39) {\n     $$pre445 = ((($26)) + 8|0);\n     $$pre$phi446Z2D = $$pre445;\n    } else {\n     $40 = ($3>>>0)>($26>>>0);\n     if ($40) {\n      _abort();\n      // unreachable;\n     }\n     $41 = ((($26)) + 8|0);\n     $42 = HEAP32[$41>>2]|0;\n     $43 = ($42|0)==($16|0);\n     if ($43) {\n      $$pre$phi446Z2D = $41;\n     } else {\n      _abort();\n      // unreachable;\n     }\n    }\n    $44 = ((($24)) + 12|0);\n    HEAP32[$44>>2] = $26;\n    HEAP32[$$pre$phi446Z2D>>2] = $24;\n    $$1 = $16;$$1380 = $17;$114 = $16;\n    break;\n   }\n   $45 = ((($16)) + 24|0);\n   $46 = HEAP32[$45>>2]|0;\n   $47 = ((($16)) + 12|0);\n   $48 = HEAP32[$47>>2]|0;\n   $49 = ($48|0)==($16|0);\n   do {\n    if ($49) {\n     $59 = ((($16)) + 16|0);\n     $60 = ((($59)) + 4|0);\n     $61 = HEAP32[$60>>2]|0;\n     $62 = ($61|0)==(0|0);\n     if ($62) {\n      $63 = HEAP32[$59>>2]|0;\n      $64 = ($63|0)==(0|0);\n      if ($64) {\n       $$3 = 0;\n       break;\n      } else {\n       $$1385$ph = $63;$$1388$ph = $59;\n      }\n     } else {\n      $$1385$ph = $61;$$1388$ph = $60;\n     }\n     $$1385 = $$1385$ph;$$1388 = $$1388$ph;\n     while(1) {\n      $65 = ((($$1385)) + 20|0);\n      $66 = HEAP32[$65>>2]|0;\n      $67 = ($66|0)==(0|0);\n      if ($67) {\n       $68 = ((($$1385)) + 16|0);\n       $69 = HEAP32[$68>>2]|0;\n       $70 = ($69|0)==(0|0);\n       if ($70) {\n        break;\n       } else {\n        $$1385$be = $69;$$1388$be = $68;\n       }\n      } else {\n       $$1385$be = $66;$$1388$be = $65;\n      }\n      $$1385 = $$1385$be;$$1388 = $$1388$be;\n     }\n     $71 = ($3>>>0)>($$1388>>>0);\n     if ($71) {\n      _abort();\n      // unreachable;\n     } else {\n      HEAP32[$$1388>>2] = 0;\n      $$3 = $$1385;\n      break;\n     }\n    } else {\n     $50 = ((($16)) + 8|0);\n     $51 = HEAP32[$50>>2]|0;\n     $52 = ($3>>>0)>($51>>>0);\n     if ($52) {\n      _abort();\n      // unreachable;\n     }\n     $53 = ((($51)) + 12|0);\n     $54 = HEAP32[$53>>2]|0;\n     $55 = ($54|0)==($16|0);\n     if (!($55)) {\n      _abort();\n      // unreachable;\n     }\n     $56 = ((($48)) + 8|0);\n     $57 = HEAP32[$56>>2]|0;\n     $58 = ($57|0)==($16|0);\n     if ($58) {\n      HEAP32[$53>>2] = $48;\n      HEAP32[$56>>2] = $51;\n      $$3 = $48;\n      break;\n     } else {\n      _abort();\n      // unreachable;\n     }\n    }\n   } while(0);\n   $72 = ($46|0)==(0|0);\n   if ($72) {\n    $$1 = $16;$$1380 = $17;$114 = $16;\n   } else {\n    $73 = ((($16)) + 28|0);\n    $74 = HEAP32[$73>>2]|0;\n    $75 = (21596 + ($74<<2)|0);\n    $76 = HEAP32[$75>>2]|0;\n    $77 = ($76|0)==($16|0);\n    do {\n     if ($77) {\n      HEAP32[$75>>2] = $$3;\n      $cond419 = ($$3|0)==(0|0);\n      if ($cond419) {\n       $78 = 1 << $74;\n       $79 = $78 ^ -1;\n       $80 = HEAP32[(21296)>>2]|0;\n       $81 = $80 & $79;\n       HEAP32[(21296)>>2] = $81;\n       $$1 = $16;$$1380 = $17;$114 = $16;\n       break L10;\n      }\n     } else {\n      $82 = HEAP32[(21308)>>2]|0;\n      $83 = ($82>>>0)>($46>>>0);\n      if ($83) {\n       _abort();\n       // unreachable;\n      } else {\n       $84 = ((($46)) + 16|0);\n       $85 = HEAP32[$84>>2]|0;\n       $86 = ($85|0)==($16|0);\n       $87 = ((($46)) + 20|0);\n       $$sink = $86 ? $84 : $87;\n       HEAP32[$$sink>>2] = $$3;\n       $88 = ($$3|0)==(0|0);\n       if ($88) {\n        $$1 = $16;$$1380 = $17;$114 = $16;\n        break L10;\n       } else {\n        break;\n       }\n      }\n     }\n    } while(0);\n    $89 = HEAP32[(21308)>>2]|0;\n    $90 = ($89>>>0)>($$3>>>0);\n    if ($90) {\n     _abort();\n     // unreachable;\n    }\n    $91 = ((($$3)) + 24|0);\n    HEAP32[$91>>2] = $46;\n    $92 = ((($16)) + 16|0);\n    $93 = HEAP32[$92>>2]|0;\n    $94 = ($93|0)==(0|0);\n    do {\n     if (!($94)) {\n      $95 = ($89>>>0)>($93>>>0);\n      if ($95) {\n       _abort();\n       // unreachable;\n      } else {\n       $96 = ((($$3)) + 16|0);\n       HEAP32[$96>>2] = $93;\n       $97 = ((($93)) + 24|0);\n       HEAP32[$97>>2] = $$3;\n       break;\n      }\n     }\n    } while(0);\n    $98 = ((($92)) + 4|0);\n    $99 = HEAP32[$98>>2]|0;\n    $100 = ($99|0)==(0|0);\n    if ($100) {\n     $$1 = $16;$$1380 = $17;$114 = $16;\n    } else {\n     $101 = HEAP32[(21308)>>2]|0;\n     $102 = ($101>>>0)>($99>>>0);\n     if ($102) {\n      _abort();\n      // unreachable;\n     } else {\n      $103 = ((($$3)) + 20|0);\n      HEAP32[$103>>2] = $99;\n      $104 = ((($99)) + 24|0);\n      HEAP32[$104>>2] = $$3;\n      $$1 = $16;$$1380 = $17;$114 = $16;\n      break;\n     }\n    }\n   }\n  } else {\n   $$1 = $2;$$1380 = $9;$114 = $2;\n  }\n } while(0);\n $113 = ($114>>>0)<($10>>>0);\n if (!($113)) {\n  _abort();\n  // unreachable;\n }\n $115 = ((($10)) + 4|0);\n $116 = HEAP32[$115>>2]|0;\n $117 = $116 & 1;\n $118 = ($117|0)==(0);\n if ($118) {\n  _abort();\n  // unreachable;\n }\n $119 = $116 & 2;\n $120 = ($119|0)==(0);\n if ($120) {\n  $121 = HEAP32[(21316)>>2]|0;\n  $122 = ($121|0)==($10|0);\n  if ($122) {\n   $123 = HEAP32[(21304)>>2]|0;\n   $124 = (($123) + ($$1380))|0;\n   HEAP32[(21304)>>2] = $124;\n   HEAP32[(21316)>>2] = $$1;\n   $125 = $124 | 1;\n   $126 = ((($$1)) + 4|0);\n   HEAP32[$126>>2] = $125;\n   $127 = HEAP32[(21312)>>2]|0;\n   $128 = ($$1|0)==($127|0);\n   if (!($128)) {\n    return;\n   }\n   HEAP32[(21312)>>2] = 0;\n   HEAP32[(21300)>>2] = 0;\n   return;\n  }\n  $129 = HEAP32[(21312)>>2]|0;\n  $130 = ($129|0)==($10|0);\n  if ($130) {\n   $131 = HEAP32[(21300)>>2]|0;\n   $132 = (($131) + ($$1380))|0;\n   HEAP32[(21300)>>2] = $132;\n   HEAP32[(21312)>>2] = $114;\n   $133 = $132 | 1;\n   $134 = ((($$1)) + 4|0);\n   HEAP32[$134>>2] = $133;\n   $135 = (($114) + ($132)|0);\n   HEAP32[$135>>2] = $132;\n   return;\n  }\n  $136 = $116 & -8;\n  $137 = (($136) + ($$1380))|0;\n  $138 = $116 >>> 3;\n  $139 = ($116>>>0)<(256);\n  L111: do {\n   if ($139) {\n    $140 = ((($10)) + 8|0);\n    $141 = HEAP32[$140>>2]|0;\n    $142 = ((($10)) + 12|0);\n    $143 = HEAP32[$142>>2]|0;\n    $144 = $138 << 1;\n    $145 = (21332 + ($144<<2)|0);\n    $146 = ($141|0)==($145|0);\n    if (!($146)) {\n     $147 = HEAP32[(21308)>>2]|0;\n     $148 = ($147>>>0)>($141>>>0);\n     if ($148) {\n      _abort();\n      // unreachable;\n     }\n     $149 = ((($141)) + 12|0);\n     $150 = HEAP32[$149>>2]|0;\n     $151 = ($150|0)==($10|0);\n     if (!($151)) {\n      _abort();\n      // unreachable;\n     }\n    }\n    $152 = ($143|0)==($141|0);\n    if ($152) {\n     $153 = 1 << $138;\n     $154 = $153 ^ -1;\n     $155 = HEAP32[5323]|0;\n     $156 = $155 & $154;\n     HEAP32[5323] = $156;\n     break;\n    }\n    $157 = ($143|0)==($145|0);\n    if ($157) {\n     $$pre443 = ((($143)) + 8|0);\n     $$pre$phi444Z2D = $$pre443;\n    } else {\n     $158 = HEAP32[(21308)>>2]|0;\n     $159 = ($158>>>0)>($143>>>0);\n     if ($159) {\n      _abort();\n      // unreachable;\n     }\n     $160 = ((($143)) + 8|0);\n     $161 = HEAP32[$160>>2]|0;\n     $162 = ($161|0)==($10|0);\n     if ($162) {\n      $$pre$phi444Z2D = $160;\n     } else {\n      _abort();\n      // unreachable;\n     }\n    }\n    $163 = ((($141)) + 12|0);\n    HEAP32[$163>>2] = $143;\n    HEAP32[$$pre$phi444Z2D>>2] = $141;\n   } else {\n    $164 = ((($10)) + 24|0);\n    $165 = HEAP32[$164>>2]|0;\n    $166 = ((($10)) + 12|0);\n    $167 = HEAP32[$166>>2]|0;\n    $168 = ($167|0)==($10|0);\n    do {\n     if ($168) {\n      $179 = ((($10)) + 16|0);\n      $180 = ((($179)) + 4|0);\n      $181 = HEAP32[$180>>2]|0;\n      $182 = ($181|0)==(0|0);\n      if ($182) {\n       $183 = HEAP32[$179>>2]|0;\n       $184 = ($183|0)==(0|0);\n       if ($184) {\n        $$3398 = 0;\n        break;\n       } else {\n        $$1396$ph = $183;$$1400$ph = $179;\n       }\n      } else {\n       $$1396$ph = $181;$$1400$ph = $180;\n      }\n      $$1396 = $$1396$ph;$$1400 = $$1400$ph;\n      while(1) {\n       $185 = ((($$1396)) + 20|0);\n       $186 = HEAP32[$185>>2]|0;\n       $187 = ($186|0)==(0|0);\n       if ($187) {\n        $188 = ((($$1396)) + 16|0);\n        $189 = HEAP32[$188>>2]|0;\n        $190 = ($189|0)==(0|0);\n        if ($190) {\n         break;\n        } else {\n         $$1396$be = $189;$$1400$be = $188;\n        }\n       } else {\n        $$1396$be = $186;$$1400$be = $185;\n       }\n       $$1396 = $$1396$be;$$1400 = $$1400$be;\n      }\n      $191 = HEAP32[(21308)>>2]|0;\n      $192 = ($191>>>0)>($$1400>>>0);\n      if ($192) {\n       _abort();\n       // unreachable;\n      } else {\n       HEAP32[$$1400>>2] = 0;\n       $$3398 = $$1396;\n       break;\n      }\n     } else {\n      $169 = ((($10)) + 8|0);\n      $170 = HEAP32[$169>>2]|0;\n      $171 = HEAP32[(21308)>>2]|0;\n      $172 = ($171>>>0)>($170>>>0);\n      if ($172) {\n       _abort();\n       // unreachable;\n      }\n      $173 = ((($170)) + 12|0);\n      $174 = HEAP32[$173>>2]|0;\n      $175 = ($174|0)==($10|0);\n      if (!($175)) {\n       _abort();\n       // unreachable;\n      }\n      $176 = ((($167)) + 8|0);\n      $177 = HEAP32[$176>>2]|0;\n      $178 = ($177|0)==($10|0);\n      if ($178) {\n       HEAP32[$173>>2] = $167;\n       HEAP32[$176>>2] = $170;\n       $$3398 = $167;\n       break;\n      } else {\n       _abort();\n       // unreachable;\n      }\n     }\n    } while(0);\n    $193 = ($165|0)==(0|0);\n    if (!($193)) {\n     $194 = ((($10)) + 28|0);\n     $195 = HEAP32[$194>>2]|0;\n     $196 = (21596 + ($195<<2)|0);\n     $197 = HEAP32[$196>>2]|0;\n     $198 = ($197|0)==($10|0);\n     do {\n      if ($198) {\n       HEAP32[$196>>2] = $$3398;\n       $cond420 = ($$3398|0)==(0|0);\n       if ($cond420) {\n        $199 = 1 << $195;\n        $200 = $199 ^ -1;\n        $201 = HEAP32[(21296)>>2]|0;\n        $202 = $201 & $200;\n        HEAP32[(21296)>>2] = $202;\n        break L111;\n       }\n      } else {\n       $203 = HEAP32[(21308)>>2]|0;\n       $204 = ($203>>>0)>($165>>>0);\n       if ($204) {\n        _abort();\n        // unreachable;\n       } else {\n        $205 = ((($165)) + 16|0);\n        $206 = HEAP32[$205>>2]|0;\n        $207 = ($206|0)==($10|0);\n        $208 = ((($165)) + 20|0);\n        $$sink456 = $207 ? $205 : $208;\n        HEAP32[$$sink456>>2] = $$3398;\n        $209 = ($$3398|0)==(0|0);\n        if ($209) {\n         break L111;\n        } else {\n         break;\n        }\n       }\n      }\n     } while(0);\n     $210 = HEAP32[(21308)>>2]|0;\n     $211 = ($210>>>0)>($$3398>>>0);\n     if ($211) {\n      _abort();\n      // unreachable;\n     }\n     $212 = ((($$3398)) + 24|0);\n     HEAP32[$212>>2] = $165;\n     $213 = ((($10)) + 16|0);\n     $214 = HEAP32[$213>>2]|0;\n     $215 = ($214|0)==(0|0);\n     do {\n      if (!($215)) {\n       $216 = ($210>>>0)>($214>>>0);\n       if ($216) {\n        _abort();\n        // unreachable;\n       } else {\n        $217 = ((($$3398)) + 16|0);\n        HEAP32[$217>>2] = $214;\n        $218 = ((($214)) + 24|0);\n        HEAP32[$218>>2] = $$3398;\n        break;\n       }\n      }\n     } while(0);\n     $219 = ((($213)) + 4|0);\n     $220 = HEAP32[$219>>2]|0;\n     $221 = ($220|0)==(0|0);\n     if (!($221)) {\n      $222 = HEAP32[(21308)>>2]|0;\n      $223 = ($222>>>0)>($220>>>0);\n      if ($223) {\n       _abort();\n       // unreachable;\n      } else {\n       $224 = ((($$3398)) + 20|0);\n       HEAP32[$224>>2] = $220;\n       $225 = ((($220)) + 24|0);\n       HEAP32[$225>>2] = $$3398;\n       break;\n      }\n     }\n    }\n   }\n  } while(0);\n  $226 = $137 | 1;\n  $227 = ((($$1)) + 4|0);\n  HEAP32[$227>>2] = $226;\n  $228 = (($114) + ($137)|0);\n  HEAP32[$228>>2] = $137;\n  $229 = HEAP32[(21312)>>2]|0;\n  $230 = ($$1|0)==($229|0);\n  if ($230) {\n   HEAP32[(21300)>>2] = $137;\n   return;\n  } else {\n   $$2 = $137;\n  }\n } else {\n  $231 = $116 & -2;\n  HEAP32[$115>>2] = $231;\n  $232 = $$1380 | 1;\n  $233 = ((($$1)) + 4|0);\n  HEAP32[$233>>2] = $232;\n  $234 = (($114) + ($$1380)|0);\n  HEAP32[$234>>2] = $$1380;\n  $$2 = $$1380;\n }\n $235 = $$2 >>> 3;\n $236 = ($$2>>>0)<(256);\n if ($236) {\n  $237 = $235 << 1;\n  $238 = (21332 + ($237<<2)|0);\n  $239 = HEAP32[5323]|0;\n  $240 = 1 << $235;\n  $241 = $239 & $240;\n  $242 = ($241|0)==(0);\n  if ($242) {\n   $243 = $239 | $240;\n   HEAP32[5323] = $243;\n   $$pre = ((($238)) + 8|0);\n   $$0401 = $238;$$pre$phiZ2D = $$pre;\n  } else {\n   $244 = ((($238)) + 8|0);\n   $245 = HEAP32[$244>>2]|0;\n   $246 = HEAP32[(21308)>>2]|0;\n   $247 = ($246>>>0)>($245>>>0);\n   if ($247) {\n    _abort();\n    // unreachable;\n   } else {\n    $$0401 = $245;$$pre$phiZ2D = $244;\n   }\n  }\n  HEAP32[$$pre$phiZ2D>>2] = $$1;\n  $248 = ((($$0401)) + 12|0);\n  HEAP32[$248>>2] = $$1;\n  $249 = ((($$1)) + 8|0);\n  HEAP32[$249>>2] = $$0401;\n  $250 = ((($$1)) + 12|0);\n  HEAP32[$250>>2] = $238;\n  return;\n }\n $251 = $$2 >>> 8;\n $252 = ($251|0)==(0);\n if ($252) {\n  $$0394 = 0;\n } else {\n  $253 = ($$2>>>0)>(16777215);\n  if ($253) {\n   $$0394 = 31;\n  } else {\n   $254 = (($251) + 1048320)|0;\n   $255 = $254 >>> 16;\n   $256 = $255 & 8;\n   $257 = $251 << $256;\n   $258 = (($257) + 520192)|0;\n   $259 = $258 >>> 16;\n   $260 = $259 & 4;\n   $261 = $260 | $256;\n   $262 = $257 << $260;\n   $263 = (($262) + 245760)|0;\n   $264 = $263 >>> 16;\n   $265 = $264 & 2;\n   $266 = $261 | $265;\n   $267 = (14 - ($266))|0;\n   $268 = $262 << $265;\n   $269 = $268 >>> 15;\n   $270 = (($267) + ($269))|0;\n   $271 = $270 << 1;\n   $272 = (($270) + 7)|0;\n   $273 = $$2 >>> $272;\n   $274 = $273 & 1;\n   $275 = $274 | $271;\n   $$0394 = $275;\n  }\n }\n $276 = (21596 + ($$0394<<2)|0);\n $277 = ((($$1)) + 28|0);\n HEAP32[$277>>2] = $$0394;\n $278 = ((($$1)) + 16|0);\n $279 = ((($$1)) + 20|0);\n HEAP32[$279>>2] = 0;\n HEAP32[$278>>2] = 0;\n $280 = HEAP32[(21296)>>2]|0;\n $281 = 1 << $$0394;\n $282 = $280 & $281;\n $283 = ($282|0)==(0);\n L197: do {\n  if ($283) {\n   $284 = $280 | $281;\n   HEAP32[(21296)>>2] = $284;\n   HEAP32[$276>>2] = $$1;\n   $285 = ((($$1)) + 24|0);\n   HEAP32[$285>>2] = $276;\n   $286 = ((($$1)) + 12|0);\n   HEAP32[$286>>2] = $$1;\n   $287 = ((($$1)) + 8|0);\n   HEAP32[$287>>2] = $$1;\n  } else {\n   $288 = HEAP32[$276>>2]|0;\n   $289 = ((($288)) + 4|0);\n   $290 = HEAP32[$289>>2]|0;\n   $291 = $290 & -8;\n   $292 = ($291|0)==($$2|0);\n   L200: do {\n    if ($292) {\n     $$0382$lcssa = $288;\n    } else {\n     $293 = ($$0394|0)==(31);\n     $294 = $$0394 >>> 1;\n     $295 = (25 - ($294))|0;\n     $296 = $293 ? 0 : $295;\n     $297 = $$2 << $296;\n     $$0381438 = $297;$$0382437 = $288;\n     while(1) {\n      $304 = $$0381438 >>> 31;\n      $305 = (((($$0382437)) + 16|0) + ($304<<2)|0);\n      $300 = HEAP32[$305>>2]|0;\n      $306 = ($300|0)==(0|0);\n      if ($306) {\n       break;\n      }\n      $298 = $$0381438 << 1;\n      $299 = ((($300)) + 4|0);\n      $301 = HEAP32[$299>>2]|0;\n      $302 = $301 & -8;\n      $303 = ($302|0)==($$2|0);\n      if ($303) {\n       $$0382$lcssa = $300;\n       break L200;\n      } else {\n       $$0381438 = $298;$$0382437 = $300;\n      }\n     }\n     $307 = HEAP32[(21308)>>2]|0;\n     $308 = ($307>>>0)>($305>>>0);\n     if ($308) {\n      _abort();\n      // unreachable;\n     } else {\n      HEAP32[$305>>2] = $$1;\n      $309 = ((($$1)) + 24|0);\n      HEAP32[$309>>2] = $$0382437;\n      $310 = ((($$1)) + 12|0);\n      HEAP32[$310>>2] = $$1;\n      $311 = ((($$1)) + 8|0);\n      HEAP32[$311>>2] = $$1;\n      break L197;\n     }\n    }\n   } while(0);\n   $312 = ((($$0382$lcssa)) + 8|0);\n   $313 = HEAP32[$312>>2]|0;\n   $314 = HEAP32[(21308)>>2]|0;\n   $315 = ($314>>>0)<=($$0382$lcssa>>>0);\n   $316 = ($314>>>0)<=($313>>>0);\n   $317 = $316 & $315;\n   if ($317) {\n    $318 = ((($313)) + 12|0);\n    HEAP32[$318>>2] = $$1;\n    HEAP32[$312>>2] = $$1;\n    $319 = ((($$1)) + 8|0);\n    HEAP32[$319>>2] = $313;\n    $320 = ((($$1)) + 12|0);\n    HEAP32[$320>>2] = $$0382$lcssa;\n    $321 = ((($$1)) + 24|0);\n    HEAP32[$321>>2] = 0;\n    break;\n   } else {\n    _abort();\n    // unreachable;\n   }\n  }\n } while(0);\n $322 = HEAP32[(21324)>>2]|0;\n $323 = (($322) + -1)|0;\n HEAP32[(21324)>>2] = $323;\n $324 = ($323|0)==(0);\n if (!($324)) {\n  return;\n }\n $$0211$in$i = (21748);\n while(1) {\n  $$0211$i = HEAP32[$$0211$in$i>>2]|0;\n  $325 = ($$0211$i|0)==(0|0);\n  $326 = ((($$0211$i)) + 8|0);\n  if ($325) {\n   break;\n  } else {\n   $$0211$in$i = $326;\n  }\n }\n HEAP32[(21324)>>2] = -1;\n return;\n}\nfunction ___stdio_close($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n $1 = ((($0)) + 60|0);\n $2 = HEAP32[$1>>2]|0;\n $3 = (_dummy_569($2)|0);\n HEAP32[$vararg_buffer>>2] = $3;\n $4 = (___syscall6(6,($vararg_buffer|0))|0);\n $5 = (___syscall_ret($4)|0);\n STACKTOP = sp;return ($5|0);\n}\nfunction ___stdio_write($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $$04756 = 0, $$04855 = 0, $$04954 = 0, $$051 = 0, $$1 = 0, $$150 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0;\n var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer3 = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0;\n var $vararg_ptr6 = 0, $vararg_ptr7 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $vararg_buffer3 = sp + 16|0;\n $vararg_buffer = sp;\n $3 = sp + 32|0;\n $4 = ((($0)) + 28|0);\n $5 = HEAP32[$4>>2]|0;\n HEAP32[$3>>2] = $5;\n $6 = ((($3)) + 4|0);\n $7 = ((($0)) + 20|0);\n $8 = HEAP32[$7>>2]|0;\n $9 = (($8) - ($5))|0;\n HEAP32[$6>>2] = $9;\n $10 = ((($3)) + 8|0);\n HEAP32[$10>>2] = $1;\n $11 = ((($3)) + 12|0);\n HEAP32[$11>>2] = $2;\n $12 = (($9) + ($2))|0;\n $13 = ((($0)) + 60|0);\n $14 = HEAP32[$13>>2]|0;\n $15 = $3;\n HEAP32[$vararg_buffer>>2] = $14;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = $15;\n $vararg_ptr2 = ((($vararg_buffer)) + 8|0);\n HEAP32[$vararg_ptr2>>2] = 2;\n $16 = (___syscall146(146,($vararg_buffer|0))|0);\n $17 = (___syscall_ret($16)|0);\n $18 = ($12|0)==($17|0);\n L1: do {\n  if ($18) {\n   label = 3;\n  } else {\n   $$04756 = 2;$$04855 = $12;$$04954 = $3;$27 = $17;\n   while(1) {\n    $26 = ($27|0)<(0);\n    if ($26) {\n     break;\n    }\n    $35 = (($$04855) - ($27))|0;\n    $36 = ((($$04954)) + 4|0);\n    $37 = HEAP32[$36>>2]|0;\n    $38 = ($27>>>0)>($37>>>0);\n    $39 = ((($$04954)) + 8|0);\n    $$150 = $38 ? $39 : $$04954;\n    $40 = $38 << 31 >> 31;\n    $$1 = (($$04756) + ($40))|0;\n    $41 = $38 ? $37 : 0;\n    $$0 = (($27) - ($41))|0;\n    $42 = HEAP32[$$150>>2]|0;\n    $43 = (($42) + ($$0)|0);\n    HEAP32[$$150>>2] = $43;\n    $44 = ((($$150)) + 4|0);\n    $45 = HEAP32[$44>>2]|0;\n    $46 = (($45) - ($$0))|0;\n    HEAP32[$44>>2] = $46;\n    $47 = HEAP32[$13>>2]|0;\n    $48 = $$150;\n    HEAP32[$vararg_buffer3>>2] = $47;\n    $vararg_ptr6 = ((($vararg_buffer3)) + 4|0);\n    HEAP32[$vararg_ptr6>>2] = $48;\n    $vararg_ptr7 = ((($vararg_buffer3)) + 8|0);\n    HEAP32[$vararg_ptr7>>2] = $$1;\n    $49 = (___syscall146(146,($vararg_buffer3|0))|0);\n    $50 = (___syscall_ret($49)|0);\n    $51 = ($35|0)==($50|0);\n    if ($51) {\n     label = 3;\n     break L1;\n    } else {\n     $$04756 = $$1;$$04855 = $35;$$04954 = $$150;$27 = $50;\n    }\n   }\n   $28 = ((($0)) + 16|0);\n   HEAP32[$28>>2] = 0;\n   HEAP32[$4>>2] = 0;\n   HEAP32[$7>>2] = 0;\n   $29 = HEAP32[$0>>2]|0;\n   $30 = $29 | 32;\n   HEAP32[$0>>2] = $30;\n   $31 = ($$04756|0)==(2);\n   if ($31) {\n    $$051 = 0;\n   } else {\n    $32 = ((($$04954)) + 4|0);\n    $33 = HEAP32[$32>>2]|0;\n    $34 = (($2) - ($33))|0;\n    $$051 = $34;\n   }\n  }\n } while(0);\n if ((label|0) == 3) {\n  $19 = ((($0)) + 44|0);\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ((($0)) + 48|0);\n  $22 = HEAP32[$21>>2]|0;\n  $23 = (($20) + ($22)|0);\n  $24 = ((($0)) + 16|0);\n  HEAP32[$24>>2] = $23;\n  $25 = $20;\n  HEAP32[$4>>2] = $25;\n  HEAP32[$7>>2] = $25;\n  $$051 = $2;\n }\n STACKTOP = sp;return ($$051|0);\n}\nfunction ___stdio_seek($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$pre = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0, $vararg_ptr4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $vararg_buffer = sp;\n $3 = sp + 20|0;\n $4 = ((($0)) + 60|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = $3;\n HEAP32[$vararg_buffer>>2] = $5;\n $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n HEAP32[$vararg_ptr1>>2] = 0;\n $vararg_ptr2 = ((($vararg_buffer)) + 8|0);\n HEAP32[$vararg_ptr2>>2] = $1;\n $vararg_ptr3 = ((($vararg_buffer)) + 12|0);\n HEAP32[$vararg_ptr3>>2] = $6;\n $vararg_ptr4 = ((($vararg_buffer)) + 16|0);\n HEAP32[$vararg_ptr4>>2] = $2;\n $7 = (___syscall140(140,($vararg_buffer|0))|0);\n $8 = (___syscall_ret($7)|0);\n $9 = ($8|0)<(0);\n if ($9) {\n  HEAP32[$3>>2] = -1;\n  $10 = -1;\n } else {\n  $$pre = HEAP32[$3>>2]|0;\n  $10 = $$pre;\n }\n STACKTOP = sp;return ($10|0);\n}\nfunction ___syscall_ret($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0>>>0)>(4294963200);\n if ($1) {\n  $2 = (0 - ($0))|0;\n  $3 = (___errno_location()|0);\n  HEAP32[$3>>2] = $2;\n  $$0 = -1;\n } else {\n  $$0 = $0;\n }\n return ($$0|0);\n}\nfunction ___errno_location() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (21852|0);\n}\nfunction _dummy_569($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return ($0|0);\n}\nfunction ___stdout_write($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0);\n $vararg_buffer = sp;\n $3 = sp + 16|0;\n $4 = ((($0)) + 36|0);\n HEAP32[$4>>2] = 194;\n $5 = HEAP32[$0>>2]|0;\n $6 = $5 & 64;\n $7 = ($6|0)==(0);\n if ($7) {\n  $8 = ((($0)) + 60|0);\n  $9 = HEAP32[$8>>2]|0;\n  $10 = $3;\n  HEAP32[$vararg_buffer>>2] = $9;\n  $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n  HEAP32[$vararg_ptr1>>2] = 21523;\n  $vararg_ptr2 = ((($vararg_buffer)) + 8|0);\n  HEAP32[$vararg_ptr2>>2] = $10;\n  $11 = (___syscall54(54,($vararg_buffer|0))|0);\n  $12 = ($11|0)==(0);\n  if (!($12)) {\n   $13 = ((($0)) + 75|0);\n   HEAP8[$13>>0] = -1;\n  }\n }\n $14 = (___stdio_write($0,$1,$2)|0);\n STACKTOP = sp;return ($14|0);\n}\nfunction _strcmp($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$011 = 0, $$0710 = 0, $$lcssa = 0, $$lcssa8 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond9 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n $2 = HEAP8[$0>>0]|0;\n $3 = HEAP8[$1>>0]|0;\n $4 = ($2<<24>>24)!=($3<<24>>24);\n $5 = ($2<<24>>24)==(0);\n $or$cond9 = $5 | $4;\n if ($or$cond9) {\n  $$lcssa = $3;$$lcssa8 = $2;\n } else {\n  $$011 = $1;$$0710 = $0;\n  while(1) {\n   $6 = ((($$0710)) + 1|0);\n   $7 = ((($$011)) + 1|0);\n   $8 = HEAP8[$6>>0]|0;\n   $9 = HEAP8[$7>>0]|0;\n   $10 = ($8<<24>>24)!=($9<<24>>24);\n   $11 = ($8<<24>>24)==(0);\n   $or$cond = $11 | $10;\n   if ($or$cond) {\n    $$lcssa = $9;$$lcssa8 = $8;\n    break;\n   } else {\n    $$011 = $7;$$0710 = $6;\n   }\n  }\n }\n $12 = $$lcssa8&255;\n $13 = $$lcssa&255;\n $14 = (($12) - ($13))|0;\n return ($14|0);\n}\nfunction _memcmp($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$01318 = 0, $$01417 = 0, $$019 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($2|0)==(0);\n L1: do {\n  if ($3) {\n   $14 = 0;\n  } else {\n   $$01318 = $0;$$01417 = $2;$$019 = $1;\n   while(1) {\n    $4 = HEAP8[$$01318>>0]|0;\n    $5 = HEAP8[$$019>>0]|0;\n    $6 = ($4<<24>>24)==($5<<24>>24);\n    if (!($6)) {\n     break;\n    }\n    $7 = (($$01417) + -1)|0;\n    $8 = ((($$01318)) + 1|0);\n    $9 = ((($$019)) + 1|0);\n    $10 = ($7|0)==(0);\n    if ($10) {\n     $14 = 0;\n     break L1;\n    } else {\n     $$01318 = $8;$$01417 = $7;$$019 = $9;\n    }\n   }\n   $11 = $4&255;\n   $12 = $5&255;\n   $13 = (($11) - ($12))|0;\n   $14 = $13;\n  }\n } while(0);\n return ($14|0);\n}\nfunction _isdigit($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (($0) + -48)|0;\n $2 = ($1>>>0)<(10);\n $3 = $2&1;\n return ($3|0);\n}\nfunction _vfprintf($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $$1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var $spec$select = 0, $spec$select41 = 0, $vacopy_currentptr = 0, dest = 0, label = 0, sp = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0);\n $3 = sp + 120|0;\n $4 = sp + 80|0;\n $5 = sp;\n $6 = sp + 136|0;\n dest=$4; stop=dest+40|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));\n $vacopy_currentptr = HEAP32[$2>>2]|0;\n HEAP32[$3>>2] = $vacopy_currentptr;\n $7 = (_printf_core(0,$1,$3,$5,$4)|0);\n $8 = ($7|0)<(0);\n if ($8) {\n  $$0 = -1;\n } else {\n  $9 = ((($0)) + 76|0);\n  $10 = HEAP32[$9>>2]|0;\n  $11 = ($10|0)>(-1);\n  if ($11) {\n   $12 = (___lockfile($0)|0);\n   $40 = $12;\n  } else {\n   $40 = 0;\n  }\n  $13 = HEAP32[$0>>2]|0;\n  $14 = $13 & 32;\n  $15 = ((($0)) + 74|0);\n  $16 = HEAP8[$15>>0]|0;\n  $17 = ($16<<24>>24)<(1);\n  if ($17) {\n   $18 = $13 & -33;\n   HEAP32[$0>>2] = $18;\n  }\n  $19 = ((($0)) + 48|0);\n  $20 = HEAP32[$19>>2]|0;\n  $21 = ($20|0)==(0);\n  if ($21) {\n   $23 = ((($0)) + 44|0);\n   $24 = HEAP32[$23>>2]|0;\n   HEAP32[$23>>2] = $6;\n   $25 = ((($0)) + 28|0);\n   HEAP32[$25>>2] = $6;\n   $26 = ((($0)) + 20|0);\n   HEAP32[$26>>2] = $6;\n   HEAP32[$19>>2] = 80;\n   $27 = ((($6)) + 80|0);\n   $28 = ((($0)) + 16|0);\n   HEAP32[$28>>2] = $27;\n   $29 = (_printf_core($0,$1,$3,$5,$4)|0);\n   $30 = ($24|0)==(0|0);\n   if ($30) {\n    $$1 = $29;\n   } else {\n    $31 = ((($0)) + 36|0);\n    $32 = HEAP32[$31>>2]|0;\n    (FUNCTION_TABLE_iiii[$32 & 255]($0,0,0)|0);\n    $33 = HEAP32[$26>>2]|0;\n    $34 = ($33|0)==(0|0);\n    $spec$select = $34 ? -1 : $29;\n    HEAP32[$23>>2] = $24;\n    HEAP32[$19>>2] = 0;\n    HEAP32[$28>>2] = 0;\n    HEAP32[$25>>2] = 0;\n    HEAP32[$26>>2] = 0;\n    $$1 = $spec$select;\n   }\n  } else {\n   $22 = (_printf_core($0,$1,$3,$5,$4)|0);\n   $$1 = $22;\n  }\n  $35 = HEAP32[$0>>2]|0;\n  $36 = $35 & 32;\n  $37 = ($36|0)==(0);\n  $spec$select41 = $37 ? $$1 : -1;\n  $38 = $35 | $14;\n  HEAP32[$0>>2] = $38;\n  $39 = ($40|0)==(0);\n  if (!($39)) {\n   ___unlockfile($0);\n  }\n  $$0 = $spec$select41;\n }\n STACKTOP = sp;return ($$0|0);\n}\nfunction _printf_core($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$ = 0, $$0 = 0, $$0228 = 0, $$0229334 = 0, $$0232 = 0, $$0235 = 0, $$0237 = 0, $$0240313 = 0, $$0240313371 = 0, $$0240333 = 0, $$0243 = 0, $$0243$ph = 0, $$0243$ph$be = 0, $$0247 = 0, $$0247$ph = 0, $$0249$lcssa = 0, $$0249321 = 0, $$0252 = 0, $$0253 = 0, $$0254 = 0;\n var $$0259 = 0, $$0262$lcssa = 0, $$0262328 = 0, $$0269$ph = 0, $$1 = 0, $$1230340 = 0, $$1233 = 0, $$1236 = 0, $$1238 = 0, $$1241339 = 0, $$1248 = 0, $$1250 = 0, $$1255 = 0, $$1260 = 0, $$1263 = 0, $$1270 = 0, $$2 = 0, $$2234 = 0, $$2239 = 0, $$2242320 = 0;\n var $$2256 = 0, $$2256$ = 0, $$2261 = 0, $$2271 = 0, $$3257 = 0, $$3265 = 0, $$3272 = 0, $$3317 = 0, $$4258370 = 0, $$4266 = 0, $$5 = 0, $$6268 = 0, $$lcssa308 = 0, $$pre = 0, $$pre$phiZ2D = 0, $$pre360 = 0, $$pre362 = 0, $$pre363 = 0, $$pre363$pre = 0, $$pre364 = 0;\n var $$pre368 = 0, $$sink = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0;\n var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0;\n var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0;\n var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0;\n var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0;\n var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0;\n var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0;\n var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0;\n var $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0;\n var $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0;\n var $298 = 0, $299 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0;\n var $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0;\n var $334 = 0, $335 = 0, $336 = 0.0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0;\n var $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0;\n var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0;\n var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current2 = 0, $arglist_next = 0;\n var $arglist_next3 = 0, $brmerge = 0, $brmerge326 = 0, $expanded = 0, $expanded10 = 0, $expanded11 = 0, $expanded13 = 0, $expanded14 = 0, $expanded15 = 0, $expanded4 = 0, $expanded6 = 0, $expanded7 = 0, $expanded8 = 0, $or$cond = 0, $or$cond276 = 0, $or$cond278 = 0, $or$cond283 = 0, $spec$select = 0, $spec$select281 = 0, $spec$select284 = 0;\n var $spec$select291 = 0, $spec$select292 = 0, $spec$select293 = 0, $spec$select294 = 0, $spec$select295 = 0, $spec$select296 = 0, $spec$select297 = 0, $spec$select298 = 0, $spec$select299 = 0, $storemerge273$lcssa = 0, $storemerge273327 = 0, $storemerge274 = 0, $trunc = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $5 = sp + 16|0;\n $6 = sp;\n $7 = sp + 24|0;\n $8 = sp + 8|0;\n $9 = sp + 20|0;\n HEAP32[$5>>2] = $1;\n $10 = ($0|0)!=(0|0);\n $11 = ((($7)) + 40|0);\n $12 = $11;\n $13 = ((($7)) + 39|0);\n $14 = ((($8)) + 4|0);\n $$0243$ph = 0;$$0247$ph = 0;$$0269$ph = 0;\n L1: while(1) {\n  $$0243 = $$0243$ph;$$0247 = $$0247$ph;\n  while(1) {\n   $15 = ($$0247|0)>(-1);\n   do {\n    if ($15) {\n     $16 = (2147483647 - ($$0247))|0;\n     $17 = ($$0243|0)>($16|0);\n     if ($17) {\n      $18 = (___errno_location()|0);\n      HEAP32[$18>>2] = 75;\n      $$1248 = -1;\n      break;\n     } else {\n      $19 = (($$0243) + ($$0247))|0;\n      $$1248 = $19;\n      break;\n     }\n    } else {\n     $$1248 = $$0247;\n    }\n   } while(0);\n   $20 = HEAP32[$5>>2]|0;\n   $21 = HEAP8[$20>>0]|0;\n   $22 = ($21<<24>>24)==(0);\n   if ($22) {\n    label = 94;\n    break L1;\n   }\n   $23 = $21;$25 = $20;\n   L12: while(1) {\n    switch ($23<<24>>24) {\n    case 37:  {\n     label = 10;\n     break L12;\n     break;\n    }\n    case 0:  {\n     $$0249$lcssa = $25;\n     break L12;\n     break;\n    }\n    default: {\n    }\n    }\n    $24 = ((($25)) + 1|0);\n    HEAP32[$5>>2] = $24;\n    $$pre = HEAP8[$24>>0]|0;\n    $23 = $$pre;$25 = $24;\n   }\n   L15: do {\n    if ((label|0) == 10) {\n     label = 0;\n     $$0249321 = $25;$27 = $25;\n     while(1) {\n      $26 = ((($27)) + 1|0);\n      $28 = HEAP8[$26>>0]|0;\n      $29 = ($28<<24>>24)==(37);\n      if (!($29)) {\n       $$0249$lcssa = $$0249321;\n       break L15;\n      }\n      $30 = ((($$0249321)) + 1|0);\n      $31 = ((($27)) + 2|0);\n      HEAP32[$5>>2] = $31;\n      $32 = HEAP8[$31>>0]|0;\n      $33 = ($32<<24>>24)==(37);\n      if ($33) {\n       $$0249321 = $30;$27 = $31;\n      } else {\n       $$0249$lcssa = $30;\n       break;\n      }\n     }\n    }\n   } while(0);\n   $34 = $$0249$lcssa;\n   $35 = $20;\n   $36 = (($34) - ($35))|0;\n   if ($10) {\n    _out($0,$20,$36);\n   }\n   $37 = ($36|0)==(0);\n   if ($37) {\n    break;\n   } else {\n    $$0243 = $36;$$0247 = $$1248;\n   }\n  }\n  $38 = HEAP32[$5>>2]|0;\n  $39 = ((($38)) + 1|0);\n  $40 = HEAP8[$39>>0]|0;\n  $41 = $40 << 24 >> 24;\n  $42 = (_isdigit($41)|0);\n  $43 = ($42|0)==(0);\n  $$pre360 = HEAP32[$5>>2]|0;\n  if ($43) {\n   $$0253 = -1;$$1270 = $$0269$ph;$$sink = 1;\n  } else {\n   $44 = ((($$pre360)) + 2|0);\n   $45 = HEAP8[$44>>0]|0;\n   $46 = ($45<<24>>24)==(36);\n   if ($46) {\n    $47 = ((($$pre360)) + 1|0);\n    $48 = HEAP8[$47>>0]|0;\n    $49 = $48 << 24 >> 24;\n    $50 = (($49) + -48)|0;\n    $$0253 = $50;$$1270 = 1;$$sink = 3;\n   } else {\n    $$0253 = -1;$$1270 = $$0269$ph;$$sink = 1;\n   }\n  }\n  $51 = (($$pre360) + ($$sink)|0);\n  HEAP32[$5>>2] = $51;\n  $52 = HEAP8[$51>>0]|0;\n  $53 = $52 << 24 >> 24;\n  $54 = (($53) + -32)|0;\n  $55 = ($54>>>0)>(31);\n  $56 = 1 << $54;\n  $57 = $56 & 75913;\n  $58 = ($57|0)==(0);\n  $brmerge326 = $55 | $58;\n  if ($brmerge326) {\n   $$0262$lcssa = 0;$$lcssa308 = $52;$storemerge273$lcssa = $51;\n  } else {\n   $$0262328 = 0;$60 = $54;$storemerge273327 = $51;\n   while(1) {\n    $59 = 1 << $60;\n    $61 = $59 | $$0262328;\n    $62 = ((($storemerge273327)) + 1|0);\n    HEAP32[$5>>2] = $62;\n    $63 = HEAP8[$62>>0]|0;\n    $64 = $63 << 24 >> 24;\n    $65 = (($64) + -32)|0;\n    $66 = ($65>>>0)>(31);\n    $67 = 1 << $65;\n    $68 = $67 & 75913;\n    $69 = ($68|0)==(0);\n    $brmerge = $66 | $69;\n    if ($brmerge) {\n     $$0262$lcssa = $61;$$lcssa308 = $63;$storemerge273$lcssa = $62;\n     break;\n    } else {\n     $$0262328 = $61;$60 = $65;$storemerge273327 = $62;\n    }\n   }\n  }\n  $70 = ($$lcssa308<<24>>24)==(42);\n  if ($70) {\n   $71 = ((($storemerge273$lcssa)) + 1|0);\n   $72 = HEAP8[$71>>0]|0;\n   $73 = $72 << 24 >> 24;\n   $74 = (_isdigit($73)|0);\n   $75 = ($74|0)==(0);\n   if ($75) {\n    label = 27;\n   } else {\n    $76 = HEAP32[$5>>2]|0;\n    $77 = ((($76)) + 2|0);\n    $78 = HEAP8[$77>>0]|0;\n    $79 = ($78<<24>>24)==(36);\n    if ($79) {\n     $80 = ((($76)) + 1|0);\n     $81 = HEAP8[$80>>0]|0;\n     $82 = $81 << 24 >> 24;\n     $83 = (($82) + -48)|0;\n     $84 = (($4) + ($83<<2)|0);\n     HEAP32[$84>>2] = 10;\n     $85 = HEAP8[$80>>0]|0;\n     $86 = $85 << 24 >> 24;\n     $87 = (($86) + -48)|0;\n     $88 = (($3) + ($87<<3)|0);\n     $89 = $88;\n     $90 = $89;\n     $91 = HEAP32[$90>>2]|0;\n     $92 = (($89) + 4)|0;\n     $93 = $92;\n     $94 = HEAP32[$93>>2]|0;\n     $95 = ((($76)) + 3|0);\n     $$0259 = $91;$$2271 = 1;$storemerge274 = $95;\n    } else {\n     label = 27;\n    }\n   }\n   if ((label|0) == 27) {\n    label = 0;\n    $96 = ($$1270|0)==(0);\n    if (!($96)) {\n     $$0 = -1;\n     break;\n    }\n    if ($10) {\n     $arglist_current = HEAP32[$2>>2]|0;\n     $97 = $arglist_current;\n     $98 = ((0) + 4|0);\n     $expanded4 = $98;\n     $expanded = (($expanded4) - 1)|0;\n     $99 = (($97) + ($expanded))|0;\n     $100 = ((0) + 4|0);\n     $expanded8 = $100;\n     $expanded7 = (($expanded8) - 1)|0;\n     $expanded6 = $expanded7 ^ -1;\n     $101 = $99 & $expanded6;\n     $102 = $101;\n     $103 = HEAP32[$102>>2]|0;\n     $arglist_next = ((($102)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next;\n     $358 = $103;\n    } else {\n     $358 = 0;\n    }\n    $104 = HEAP32[$5>>2]|0;\n    $105 = ((($104)) + 1|0);\n    $$0259 = $358;$$2271 = 0;$storemerge274 = $105;\n   }\n   HEAP32[$5>>2] = $storemerge274;\n   $106 = ($$0259|0)<(0);\n   $107 = $$0262$lcssa | 8192;\n   $108 = (0 - ($$0259))|0;\n   $spec$select291 = $106 ? $107 : $$0262$lcssa;\n   $spec$select292 = $106 ? $108 : $$0259;\n   $$1260 = $spec$select292;$$1263 = $spec$select291;$$3272 = $$2271;$112 = $storemerge274;\n  } else {\n   $109 = (_getint($5)|0);\n   $110 = ($109|0)<(0);\n   if ($110) {\n    $$0 = -1;\n    break;\n   }\n   $$pre362 = HEAP32[$5>>2]|0;\n   $$1260 = $109;$$1263 = $$0262$lcssa;$$3272 = $$1270;$112 = $$pre362;\n  }\n  $111 = HEAP8[$112>>0]|0;\n  $113 = ($111<<24>>24)==(46);\n  do {\n   if ($113) {\n    $114 = ((($112)) + 1|0);\n    $115 = HEAP8[$114>>0]|0;\n    $116 = ($115<<24>>24)==(42);\n    if (!($116)) {\n     HEAP32[$5>>2] = $114;\n     $152 = (_getint($5)|0);\n     $$pre363$pre = HEAP32[$5>>2]|0;\n     $$0254 = $152;$$pre363 = $$pre363$pre;\n     break;\n    }\n    $117 = ((($112)) + 2|0);\n    $118 = HEAP8[$117>>0]|0;\n    $119 = $118 << 24 >> 24;\n    $120 = (_isdigit($119)|0);\n    $121 = ($120|0)==(0);\n    if (!($121)) {\n     $122 = HEAP32[$5>>2]|0;\n     $123 = ((($122)) + 3|0);\n     $124 = HEAP8[$123>>0]|0;\n     $125 = ($124<<24>>24)==(36);\n     if ($125) {\n      $126 = ((($122)) + 2|0);\n      $127 = HEAP8[$126>>0]|0;\n      $128 = $127 << 24 >> 24;\n      $129 = (($128) + -48)|0;\n      $130 = (($4) + ($129<<2)|0);\n      HEAP32[$130>>2] = 10;\n      $131 = HEAP8[$126>>0]|0;\n      $132 = $131 << 24 >> 24;\n      $133 = (($132) + -48)|0;\n      $134 = (($3) + ($133<<3)|0);\n      $135 = $134;\n      $136 = $135;\n      $137 = HEAP32[$136>>2]|0;\n      $138 = (($135) + 4)|0;\n      $139 = $138;\n      $140 = HEAP32[$139>>2]|0;\n      $141 = ((($122)) + 4|0);\n      HEAP32[$5>>2] = $141;\n      $$0254 = $137;$$pre363 = $141;\n      break;\n     }\n    }\n    $142 = ($$3272|0)==(0);\n    if (!($142)) {\n     $$0 = -1;\n     break L1;\n    }\n    if ($10) {\n     $arglist_current2 = HEAP32[$2>>2]|0;\n     $143 = $arglist_current2;\n     $144 = ((0) + 4|0);\n     $expanded11 = $144;\n     $expanded10 = (($expanded11) - 1)|0;\n     $145 = (($143) + ($expanded10))|0;\n     $146 = ((0) + 4|0);\n     $expanded15 = $146;\n     $expanded14 = (($expanded15) - 1)|0;\n     $expanded13 = $expanded14 ^ -1;\n     $147 = $145 & $expanded13;\n     $148 = $147;\n     $149 = HEAP32[$148>>2]|0;\n     $arglist_next3 = ((($148)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next3;\n     $359 = $149;\n    } else {\n     $359 = 0;\n    }\n    $150 = HEAP32[$5>>2]|0;\n    $151 = ((($150)) + 2|0);\n    HEAP32[$5>>2] = $151;\n    $$0254 = $359;$$pre363 = $151;\n   } else {\n    $$0254 = -1;$$pre363 = $112;\n   }\n  } while(0);\n  $$0252 = 0;$154 = $$pre363;\n  while(1) {\n   $153 = HEAP8[$154>>0]|0;\n   $155 = $153 << 24 >> 24;\n   $156 = (($155) + -65)|0;\n   $157 = ($156>>>0)>(57);\n   if ($157) {\n    $$0 = -1;\n    break L1;\n   }\n   $158 = ((($154)) + 1|0);\n   HEAP32[$5>>2] = $158;\n   $159 = HEAP8[$154>>0]|0;\n   $160 = $159 << 24 >> 24;\n   $161 = (($160) + -65)|0;\n   $162 = ((17913 + (($$0252*58)|0)|0) + ($161)|0);\n   $163 = HEAP8[$162>>0]|0;\n   $164 = $163&255;\n   $165 = (($164) + -1)|0;\n   $166 = ($165>>>0)<(8);\n   if ($166) {\n    $$0252 = $164;$154 = $158;\n   } else {\n    break;\n   }\n  }\n  $167 = ($163<<24>>24)==(0);\n  if ($167) {\n   $$0 = -1;\n   break;\n  }\n  $168 = ($163<<24>>24)==(19);\n  $169 = ($$0253|0)>(-1);\n  do {\n   if ($168) {\n    if ($169) {\n     $$0 = -1;\n     break L1;\n    } else {\n     label = 54;\n    }\n   } else {\n    if ($169) {\n     $170 = (($4) + ($$0253<<2)|0);\n     HEAP32[$170>>2] = $164;\n     $171 = (($3) + ($$0253<<3)|0);\n     $172 = $171;\n     $173 = $172;\n     $174 = HEAP32[$173>>2]|0;\n     $175 = (($172) + 4)|0;\n     $176 = $175;\n     $177 = HEAP32[$176>>2]|0;\n     $178 = $6;\n     $179 = $178;\n     HEAP32[$179>>2] = $174;\n     $180 = (($178) + 4)|0;\n     $181 = $180;\n     HEAP32[$181>>2] = $177;\n     label = 54;\n     break;\n    }\n    if (!($10)) {\n     $$0 = 0;\n     break L1;\n    }\n    _pop_arg($6,$164,$2);\n    $$pre364 = HEAP32[$5>>2]|0;\n    $183 = $$pre364;\n    label = 55;\n   }\n  } while(0);\n  if ((label|0) == 54) {\n   label = 0;\n   if ($10) {\n    $183 = $158;\n    label = 55;\n   } else {\n    $$0243$ph$be = 0;\n   }\n  }\n  L77: do {\n   if ((label|0) == 55) {\n    label = 0;\n    $182 = ((($183)) + -1|0);\n    $184 = HEAP8[$182>>0]|0;\n    $185 = $184 << 24 >> 24;\n    $186 = ($$0252|0)!=(0);\n    $187 = $185 & 15;\n    $188 = ($187|0)==(3);\n    $or$cond276 = $186 & $188;\n    $189 = $185 & -33;\n    $$0235 = $or$cond276 ? $189 : $185;\n    $190 = $$1263 & 8192;\n    $191 = ($190|0)==(0);\n    $192 = $$1263 & -65537;\n    $spec$select = $191 ? $$1263 : $192;\n    L79: do {\n     switch ($$0235|0) {\n     case 110:  {\n      $trunc = $$0252&255;\n      switch ($trunc<<24>>24) {\n      case 0:  {\n       $199 = HEAP32[$6>>2]|0;\n       HEAP32[$199>>2] = $$1248;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 1:  {\n       $200 = HEAP32[$6>>2]|0;\n       HEAP32[$200>>2] = $$1248;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 2:  {\n       $201 = ($$1248|0)<(0);\n       $202 = $201 << 31 >> 31;\n       $203 = HEAP32[$6>>2]|0;\n       $204 = $203;\n       $205 = $204;\n       HEAP32[$205>>2] = $$1248;\n       $206 = (($204) + 4)|0;\n       $207 = $206;\n       HEAP32[$207>>2] = $202;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 3:  {\n       $208 = $$1248&65535;\n       $209 = HEAP32[$6>>2]|0;\n       HEAP16[$209>>1] = $208;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 4:  {\n       $210 = $$1248&255;\n       $211 = HEAP32[$6>>2]|0;\n       HEAP8[$211>>0] = $210;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 6:  {\n       $212 = HEAP32[$6>>2]|0;\n       HEAP32[$212>>2] = $$1248;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      case 7:  {\n       $213 = ($$1248|0)<(0);\n       $214 = $213 << 31 >> 31;\n       $215 = HEAP32[$6>>2]|0;\n       $216 = $215;\n       $217 = $216;\n       HEAP32[$217>>2] = $$1248;\n       $218 = (($216) + 4)|0;\n       $219 = $218;\n       HEAP32[$219>>2] = $214;\n       $$0243$ph$be = 0;\n       break L77;\n       break;\n      }\n      default: {\n       $$0243$ph$be = 0;\n       break L77;\n      }\n      }\n      break;\n     }\n     case 112:  {\n      $220 = ($$0254>>>0)>(8);\n      $221 = $220 ? $$0254 : 8;\n      $222 = $spec$select | 8;\n      $$1236 = 120;$$1255 = $221;$$3265 = $222;\n      label = 67;\n      break;\n     }\n     case 88: case 120:  {\n      $$1236 = $$0235;$$1255 = $$0254;$$3265 = $spec$select;\n      label = 67;\n      break;\n     }\n     case 111:  {\n      $238 = $6;\n      $239 = $238;\n      $240 = HEAP32[$239>>2]|0;\n      $241 = (($238) + 4)|0;\n      $242 = $241;\n      $243 = HEAP32[$242>>2]|0;\n      $244 = (_fmt_o($240,$243,$11)|0);\n      $245 = $spec$select & 8;\n      $246 = ($245|0)==(0);\n      $247 = $244;\n      $248 = (($12) - ($247))|0;\n      $249 = ($$0254|0)>($248|0);\n      $250 = (($248) + 1)|0;\n      $251 = $246 | $249;\n      $spec$select295 = $251 ? $$0254 : $250;\n      $$0228 = $244;$$1233 = 0;$$1238 = 18377;$$2256 = $spec$select295;$$4266 = $spec$select;$277 = $240;$279 = $243;\n      label = 73;\n      break;\n     }\n     case 105: case 100:  {\n      $252 = $6;\n      $253 = $252;\n      $254 = HEAP32[$253>>2]|0;\n      $255 = (($252) + 4)|0;\n      $256 = $255;\n      $257 = HEAP32[$256>>2]|0;\n      $258 = ($257|0)<(0);\n      if ($258) {\n       $259 = (_i64Subtract(0,0,($254|0),($257|0))|0);\n       $260 = tempRet0;\n       $261 = $6;\n       $262 = $261;\n       HEAP32[$262>>2] = $259;\n       $263 = (($261) + 4)|0;\n       $264 = $263;\n       HEAP32[$264>>2] = $260;\n       $$0232 = 1;$$0237 = 18377;$271 = $259;$272 = $260;\n       label = 72;\n       break L79;\n      } else {\n       $265 = $spec$select & 2048;\n       $266 = ($265|0)==(0);\n       $267 = $spec$select & 1;\n       $268 = ($267|0)==(0);\n       $$ = $268 ? 18377 : (18379);\n       $spec$select296 = $266 ? $$ : (18378);\n       $269 = $spec$select & 2049;\n       $270 = ($269|0)!=(0);\n       $spec$select297 = $270&1;\n       $$0232 = $spec$select297;$$0237 = $spec$select296;$271 = $254;$272 = $257;\n       label = 72;\n       break L79;\n      }\n      break;\n     }\n     case 117:  {\n      $193 = $6;\n      $194 = $193;\n      $195 = HEAP32[$194>>2]|0;\n      $196 = (($193) + 4)|0;\n      $197 = $196;\n      $198 = HEAP32[$197>>2]|0;\n      $$0232 = 0;$$0237 = 18377;$271 = $195;$272 = $198;\n      label = 72;\n      break;\n     }\n     case 99:  {\n      $288 = $6;\n      $289 = $288;\n      $290 = HEAP32[$289>>2]|0;\n      $291 = (($288) + 4)|0;\n      $292 = $291;\n      $293 = HEAP32[$292>>2]|0;\n      $294 = $290&255;\n      HEAP8[$13>>0] = $294;\n      $$2 = $13;$$2234 = 0;$$2239 = 18377;$$5 = 1;$$6268 = $192;$$pre$phiZ2D = $12;\n      break;\n     }\n     case 109:  {\n      $295 = (___errno_location()|0);\n      $296 = HEAP32[$295>>2]|0;\n      $297 = (_strerror($296)|0);\n      $$1 = $297;\n      label = 77;\n      break;\n     }\n     case 115:  {\n      $298 = HEAP32[$6>>2]|0;\n      $299 = ($298|0)==(0|0);\n      $300 = $299 ? 18387 : $298;\n      $$1 = $300;\n      label = 77;\n      break;\n     }\n     case 67:  {\n      $307 = $6;\n      $308 = $307;\n      $309 = HEAP32[$308>>2]|0;\n      $310 = (($307) + 4)|0;\n      $311 = $310;\n      $312 = HEAP32[$311>>2]|0;\n      HEAP32[$8>>2] = $309;\n      HEAP32[$14>>2] = 0;\n      HEAP32[$6>>2] = $8;\n      $$4258370 = -1;\n      label = 81;\n      break;\n     }\n     case 83:  {\n      $313 = ($$0254|0)==(0);\n      if ($313) {\n       _pad_683($0,32,$$1260,0,$spec$select);\n       $$0240313371 = 0;\n       label = 91;\n      } else {\n       $$4258370 = $$0254;\n       label = 81;\n      }\n      break;\n     }\n     case 65: case 71: case 70: case 69: case 97: case 103: case 102: case 101:  {\n      $336 = +HEAPF64[$6>>3];\n      $337 = (_fmt_fp($0,$336,$$1260,$$0254,$spec$select,$$0235)|0);\n      $$0243$ph$be = $337;\n      break L77;\n      break;\n     }\n     default: {\n      $$2 = $20;$$2234 = 0;$$2239 = 18377;$$5 = $$0254;$$6268 = $spec$select;$$pre$phiZ2D = $12;\n     }\n     }\n    } while(0);\n    L103: do {\n     if ((label|0) == 67) {\n      label = 0;\n      $223 = $6;\n      $224 = $223;\n      $225 = HEAP32[$224>>2]|0;\n      $226 = (($223) + 4)|0;\n      $227 = $226;\n      $228 = HEAP32[$227>>2]|0;\n      $229 = $$1236 & 32;\n      $230 = (_fmt_x($225,$228,$11,$229)|0);\n      $231 = ($225|0)==(0);\n      $232 = ($228|0)==(0);\n      $233 = $231 & $232;\n      $234 = $$3265 & 8;\n      $235 = ($234|0)==(0);\n      $or$cond278 = $235 | $233;\n      $236 = $$1236 >>> 4;\n      $237 = (18377 + ($236)|0);\n      $spec$select293 = $or$cond278 ? 18377 : $237;\n      $spec$select294 = $or$cond278 ? 0 : 2;\n      $$0228 = $230;$$1233 = $spec$select294;$$1238 = $spec$select293;$$2256 = $$1255;$$4266 = $$3265;$277 = $225;$279 = $228;\n      label = 73;\n     }\n     else if ((label|0) == 72) {\n      label = 0;\n      $273 = (_fmt_u($271,$272,$11)|0);\n      $$0228 = $273;$$1233 = $$0232;$$1238 = $$0237;$$2256 = $$0254;$$4266 = $spec$select;$277 = $271;$279 = $272;\n      label = 73;\n     }\n     else if ((label|0) == 77) {\n      label = 0;\n      $301 = (_memchr($$1,0,$$0254)|0);\n      $302 = ($301|0)==(0|0);\n      $303 = $301;\n      $304 = $$1;\n      $305 = (($303) - ($304))|0;\n      $306 = (($$1) + ($$0254)|0);\n      $$3257 = $302 ? $$0254 : $305;\n      $$1250 = $302 ? $306 : $301;\n      $$pre368 = $$1250;\n      $$2 = $$1;$$2234 = 0;$$2239 = 18377;$$5 = $$3257;$$6268 = $192;$$pre$phiZ2D = $$pre368;\n     }\n     else if ((label|0) == 81) {\n      label = 0;\n      $314 = HEAP32[$6>>2]|0;\n      $$0229334 = $314;$$0240333 = 0;\n      while(1) {\n       $315 = HEAP32[$$0229334>>2]|0;\n       $316 = ($315|0)==(0);\n       if ($316) {\n        $$0240313 = $$0240333;\n        break;\n       }\n       $317 = (_wctomb($9,$315)|0);\n       $318 = ($317|0)<(0);\n       $319 = (($$4258370) - ($$0240333))|0;\n       $320 = ($317>>>0)>($319>>>0);\n       $or$cond283 = $318 | $320;\n       if ($or$cond283) {\n        label = 85;\n        break;\n       }\n       $321 = ((($$0229334)) + 4|0);\n       $322 = (($317) + ($$0240333))|0;\n       $323 = ($$4258370>>>0)>($322>>>0);\n       if ($323) {\n        $$0229334 = $321;$$0240333 = $322;\n       } else {\n        $$0240313 = $322;\n        break;\n       }\n      }\n      if ((label|0) == 85) {\n       label = 0;\n       if ($318) {\n        $$0 = -1;\n        break L1;\n       } else {\n        $$0240313 = $$0240333;\n       }\n      }\n      _pad_683($0,32,$$1260,$$0240313,$spec$select);\n      $324 = ($$0240313|0)==(0);\n      if ($324) {\n       $$0240313371 = 0;\n       label = 91;\n      } else {\n       $325 = HEAP32[$6>>2]|0;\n       $$1230340 = $325;$$1241339 = 0;\n       while(1) {\n        $326 = HEAP32[$$1230340>>2]|0;\n        $327 = ($326|0)==(0);\n        if ($327) {\n         $$0240313371 = $$0240313;\n         label = 91;\n         break L103;\n        }\n        $328 = (_wctomb($9,$326)|0);\n        $329 = (($328) + ($$1241339))|0;\n        $330 = ($329|0)>($$0240313|0);\n        if ($330) {\n         $$0240313371 = $$0240313;\n         label = 91;\n         break L103;\n        }\n        $331 = ((($$1230340)) + 4|0);\n        _out($0,$9,$328);\n        $332 = ($329>>>0)<($$0240313>>>0);\n        if ($332) {\n         $$1230340 = $331;$$1241339 = $329;\n        } else {\n         $$0240313371 = $$0240313;\n         label = 91;\n         break;\n        }\n       }\n      }\n     }\n    } while(0);\n    if ((label|0) == 73) {\n     label = 0;\n     $274 = ($$2256|0)>(-1);\n     $275 = $$4266 & -65537;\n     $spec$select281 = $274 ? $275 : $$4266;\n     $276 = ($277|0)!=(0);\n     $278 = ($279|0)!=(0);\n     $280 = $276 | $278;\n     $281 = ($$2256|0)!=(0);\n     $or$cond = $281 | $280;\n     $282 = $$0228;\n     $283 = (($12) - ($282))|0;\n     $284 = $280 ^ 1;\n     $285 = $284&1;\n     $286 = (($283) + ($285))|0;\n     $287 = ($$2256|0)>($286|0);\n     $$2256$ = $287 ? $$2256 : $286;\n     $spec$select298 = $or$cond ? $$2256$ : 0;\n     $spec$select299 = $or$cond ? $$0228 : $11;\n     $$2 = $spec$select299;$$2234 = $$1233;$$2239 = $$1238;$$5 = $spec$select298;$$6268 = $spec$select281;$$pre$phiZ2D = $12;\n    }\n    else if ((label|0) == 91) {\n     label = 0;\n     $333 = $spec$select ^ 8192;\n     _pad_683($0,32,$$1260,$$0240313371,$333);\n     $334 = ($$1260|0)>($$0240313371|0);\n     $335 = $334 ? $$1260 : $$0240313371;\n     $$0243$ph$be = $335;\n     break;\n    }\n    $338 = $$2;\n    $339 = (($$pre$phiZ2D) - ($338))|0;\n    $340 = ($$5|0)<($339|0);\n    $spec$select284 = $340 ? $339 : $$5;\n    $341 = (($spec$select284) + ($$2234))|0;\n    $342 = ($$1260|0)<($341|0);\n    $$2261 = $342 ? $341 : $$1260;\n    _pad_683($0,32,$$2261,$341,$$6268);\n    _out($0,$$2239,$$2234);\n    $343 = $$6268 ^ 65536;\n    _pad_683($0,48,$$2261,$341,$343);\n    _pad_683($0,48,$spec$select284,$339,0);\n    _out($0,$$2,$339);\n    $344 = $$6268 ^ 8192;\n    _pad_683($0,32,$$2261,$341,$344);\n    $$0243$ph$be = $$2261;\n   }\n  } while(0);\n  $$0243$ph = $$0243$ph$be;$$0247$ph = $$1248;$$0269$ph = $$3272;\n }\n L125: do {\n  if ((label|0) == 94) {\n   $345 = ($0|0)==(0|0);\n   if ($345) {\n    $346 = ($$0269$ph|0)==(0);\n    if ($346) {\n     $$0 = 0;\n    } else {\n     $$2242320 = 1;\n     while(1) {\n      $347 = (($4) + ($$2242320<<2)|0);\n      $348 = HEAP32[$347>>2]|0;\n      $349 = ($348|0)==(0);\n      if ($349) {\n       break;\n      }\n      $350 = (($3) + ($$2242320<<3)|0);\n      _pop_arg($350,$348,$2);\n      $351 = (($$2242320) + 1)|0;\n      $352 = ($351>>>0)<(10);\n      if ($352) {\n       $$2242320 = $351;\n      } else {\n       $$0 = 1;\n       break L125;\n      }\n     }\n     $$3317 = $$2242320;\n     while(1) {\n      $355 = (($4) + ($$3317<<2)|0);\n      $356 = HEAP32[$355>>2]|0;\n      $357 = ($356|0)==(0);\n      $354 = (($$3317) + 1)|0;\n      if (!($357)) {\n       $$0 = -1;\n       break L125;\n      }\n      $353 = ($354>>>0)<(10);\n      if ($353) {\n       $$3317 = $354;\n      } else {\n       $$0 = 1;\n       break;\n      }\n     }\n    }\n   } else {\n    $$0 = $$1248;\n   }\n  }\n } while(0);\n STACKTOP = sp;return ($$0|0);\n}\nfunction ___lockfile($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 0;\n}\nfunction ___unlockfile($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction _out($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = HEAP32[$0>>2]|0;\n $4 = $3 & 32;\n $5 = ($4|0)==(0);\n if ($5) {\n  (___fwritex($1,$2,$0)|0);\n }\n return;\n}\nfunction _getint($0) {\n $0 = $0|0;\n var $$0$lcssa = 0, $$04 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = HEAP32[$0>>2]|0;\n $2 = HEAP8[$1>>0]|0;\n $3 = $2 << 24 >> 24;\n $4 = (_isdigit($3)|0);\n $5 = ($4|0)==(0);\n if ($5) {\n  $$0$lcssa = 0;\n } else {\n  $$04 = 0;\n  while(1) {\n   $6 = ($$04*10)|0;\n   $7 = HEAP32[$0>>2]|0;\n   $8 = HEAP8[$7>>0]|0;\n   $9 = $8 << 24 >> 24;\n   $10 = (($6) + -48)|0;\n   $11 = (($10) + ($9))|0;\n   $12 = ((($7)) + 1|0);\n   HEAP32[$0>>2] = $12;\n   $13 = HEAP8[$12>>0]|0;\n   $14 = $13 << 24 >> 24;\n   $15 = (_isdigit($14)|0);\n   $16 = ($15|0)==(0);\n   if ($16) {\n    $$0$lcssa = $11;\n    break;\n   } else {\n    $$04 = $11;\n   }\n  }\n }\n return ($$0$lcssa|0);\n}\nfunction _pop_arg($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$mask = 0, $$mask31 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0.0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0;\n var $116 = 0.0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0;\n var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0;\n var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current11 = 0, $arglist_current14 = 0, $arglist_current17 = 0;\n var $arglist_current2 = 0, $arglist_current20 = 0, $arglist_current23 = 0, $arglist_current26 = 0, $arglist_current5 = 0, $arglist_current8 = 0, $arglist_next = 0, $arglist_next12 = 0, $arglist_next15 = 0, $arglist_next18 = 0, $arglist_next21 = 0, $arglist_next24 = 0, $arglist_next27 = 0, $arglist_next3 = 0, $arglist_next6 = 0, $arglist_next9 = 0, $expanded = 0, $expanded28 = 0, $expanded30 = 0, $expanded31 = 0;\n var $expanded32 = 0, $expanded34 = 0, $expanded35 = 0, $expanded37 = 0, $expanded38 = 0, $expanded39 = 0, $expanded41 = 0, $expanded42 = 0, $expanded44 = 0, $expanded45 = 0, $expanded46 = 0, $expanded48 = 0, $expanded49 = 0, $expanded51 = 0, $expanded52 = 0, $expanded53 = 0, $expanded55 = 0, $expanded56 = 0, $expanded58 = 0, $expanded59 = 0;\n var $expanded60 = 0, $expanded62 = 0, $expanded63 = 0, $expanded65 = 0, $expanded66 = 0, $expanded67 = 0, $expanded69 = 0, $expanded70 = 0, $expanded72 = 0, $expanded73 = 0, $expanded74 = 0, $expanded76 = 0, $expanded77 = 0, $expanded79 = 0, $expanded80 = 0, $expanded81 = 0, $expanded83 = 0, $expanded84 = 0, $expanded86 = 0, $expanded87 = 0;\n var $expanded88 = 0, $expanded90 = 0, $expanded91 = 0, $expanded93 = 0, $expanded94 = 0, $expanded95 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($1>>>0)>(20);\n L1: do {\n  if (!($3)) {\n   do {\n    switch ($1|0) {\n    case 9:  {\n     $arglist_current = HEAP32[$2>>2]|0;\n     $4 = $arglist_current;\n     $5 = ((0) + 4|0);\n     $expanded28 = $5;\n     $expanded = (($expanded28) - 1)|0;\n     $6 = (($4) + ($expanded))|0;\n     $7 = ((0) + 4|0);\n     $expanded32 = $7;\n     $expanded31 = (($expanded32) - 1)|0;\n     $expanded30 = $expanded31 ^ -1;\n     $8 = $6 & $expanded30;\n     $9 = $8;\n     $10 = HEAP32[$9>>2]|0;\n     $arglist_next = ((($9)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next;\n     HEAP32[$0>>2] = $10;\n     break L1;\n     break;\n    }\n    case 10:  {\n     $arglist_current2 = HEAP32[$2>>2]|0;\n     $11 = $arglist_current2;\n     $12 = ((0) + 4|0);\n     $expanded35 = $12;\n     $expanded34 = (($expanded35) - 1)|0;\n     $13 = (($11) + ($expanded34))|0;\n     $14 = ((0) + 4|0);\n     $expanded39 = $14;\n     $expanded38 = (($expanded39) - 1)|0;\n     $expanded37 = $expanded38 ^ -1;\n     $15 = $13 & $expanded37;\n     $16 = $15;\n     $17 = HEAP32[$16>>2]|0;\n     $arglist_next3 = ((($16)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next3;\n     $18 = ($17|0)<(0);\n     $19 = $18 << 31 >> 31;\n     $20 = $0;\n     $21 = $20;\n     HEAP32[$21>>2] = $17;\n     $22 = (($20) + 4)|0;\n     $23 = $22;\n     HEAP32[$23>>2] = $19;\n     break L1;\n     break;\n    }\n    case 11:  {\n     $arglist_current5 = HEAP32[$2>>2]|0;\n     $24 = $arglist_current5;\n     $25 = ((0) + 4|0);\n     $expanded42 = $25;\n     $expanded41 = (($expanded42) - 1)|0;\n     $26 = (($24) + ($expanded41))|0;\n     $27 = ((0) + 4|0);\n     $expanded46 = $27;\n     $expanded45 = (($expanded46) - 1)|0;\n     $expanded44 = $expanded45 ^ -1;\n     $28 = $26 & $expanded44;\n     $29 = $28;\n     $30 = HEAP32[$29>>2]|0;\n     $arglist_next6 = ((($29)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next6;\n     $31 = $0;\n     $32 = $31;\n     HEAP32[$32>>2] = $30;\n     $33 = (($31) + 4)|0;\n     $34 = $33;\n     HEAP32[$34>>2] = 0;\n     break L1;\n     break;\n    }\n    case 12:  {\n     $arglist_current8 = HEAP32[$2>>2]|0;\n     $35 = $arglist_current8;\n     $36 = ((0) + 8|0);\n     $expanded49 = $36;\n     $expanded48 = (($expanded49) - 1)|0;\n     $37 = (($35) + ($expanded48))|0;\n     $38 = ((0) + 8|0);\n     $expanded53 = $38;\n     $expanded52 = (($expanded53) - 1)|0;\n     $expanded51 = $expanded52 ^ -1;\n     $39 = $37 & $expanded51;\n     $40 = $39;\n     $41 = $40;\n     $42 = $41;\n     $43 = HEAP32[$42>>2]|0;\n     $44 = (($41) + 4)|0;\n     $45 = $44;\n     $46 = HEAP32[$45>>2]|0;\n     $arglist_next9 = ((($40)) + 8|0);\n     HEAP32[$2>>2] = $arglist_next9;\n     $47 = $0;\n     $48 = $47;\n     HEAP32[$48>>2] = $43;\n     $49 = (($47) + 4)|0;\n     $50 = $49;\n     HEAP32[$50>>2] = $46;\n     break L1;\n     break;\n    }\n    case 13:  {\n     $arglist_current11 = HEAP32[$2>>2]|0;\n     $51 = $arglist_current11;\n     $52 = ((0) + 4|0);\n     $expanded56 = $52;\n     $expanded55 = (($expanded56) - 1)|0;\n     $53 = (($51) + ($expanded55))|0;\n     $54 = ((0) + 4|0);\n     $expanded60 = $54;\n     $expanded59 = (($expanded60) - 1)|0;\n     $expanded58 = $expanded59 ^ -1;\n     $55 = $53 & $expanded58;\n     $56 = $55;\n     $57 = HEAP32[$56>>2]|0;\n     $arglist_next12 = ((($56)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next12;\n     $58 = $57&65535;\n     $59 = $58 << 16 >> 16;\n     $60 = ($59|0)<(0);\n     $61 = $60 << 31 >> 31;\n     $62 = $0;\n     $63 = $62;\n     HEAP32[$63>>2] = $59;\n     $64 = (($62) + 4)|0;\n     $65 = $64;\n     HEAP32[$65>>2] = $61;\n     break L1;\n     break;\n    }\n    case 14:  {\n     $arglist_current14 = HEAP32[$2>>2]|0;\n     $66 = $arglist_current14;\n     $67 = ((0) + 4|0);\n     $expanded63 = $67;\n     $expanded62 = (($expanded63) - 1)|0;\n     $68 = (($66) + ($expanded62))|0;\n     $69 = ((0) + 4|0);\n     $expanded67 = $69;\n     $expanded66 = (($expanded67) - 1)|0;\n     $expanded65 = $expanded66 ^ -1;\n     $70 = $68 & $expanded65;\n     $71 = $70;\n     $72 = HEAP32[$71>>2]|0;\n     $arglist_next15 = ((($71)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next15;\n     $$mask31 = $72 & 65535;\n     $73 = $0;\n     $74 = $73;\n     HEAP32[$74>>2] = $$mask31;\n     $75 = (($73) + 4)|0;\n     $76 = $75;\n     HEAP32[$76>>2] = 0;\n     break L1;\n     break;\n    }\n    case 15:  {\n     $arglist_current17 = HEAP32[$2>>2]|0;\n     $77 = $arglist_current17;\n     $78 = ((0) + 4|0);\n     $expanded70 = $78;\n     $expanded69 = (($expanded70) - 1)|0;\n     $79 = (($77) + ($expanded69))|0;\n     $80 = ((0) + 4|0);\n     $expanded74 = $80;\n     $expanded73 = (($expanded74) - 1)|0;\n     $expanded72 = $expanded73 ^ -1;\n     $81 = $79 & $expanded72;\n     $82 = $81;\n     $83 = HEAP32[$82>>2]|0;\n     $arglist_next18 = ((($82)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next18;\n     $84 = $83&255;\n     $85 = $84 << 24 >> 24;\n     $86 = ($85|0)<(0);\n     $87 = $86 << 31 >> 31;\n     $88 = $0;\n     $89 = $88;\n     HEAP32[$89>>2] = $85;\n     $90 = (($88) + 4)|0;\n     $91 = $90;\n     HEAP32[$91>>2] = $87;\n     break L1;\n     break;\n    }\n    case 16:  {\n     $arglist_current20 = HEAP32[$2>>2]|0;\n     $92 = $arglist_current20;\n     $93 = ((0) + 4|0);\n     $expanded77 = $93;\n     $expanded76 = (($expanded77) - 1)|0;\n     $94 = (($92) + ($expanded76))|0;\n     $95 = ((0) + 4|0);\n     $expanded81 = $95;\n     $expanded80 = (($expanded81) - 1)|0;\n     $expanded79 = $expanded80 ^ -1;\n     $96 = $94 & $expanded79;\n     $97 = $96;\n     $98 = HEAP32[$97>>2]|0;\n     $arglist_next21 = ((($97)) + 4|0);\n     HEAP32[$2>>2] = $arglist_next21;\n     $$mask = $98 & 255;\n     $99 = $0;\n     $100 = $99;\n     HEAP32[$100>>2] = $$mask;\n     $101 = (($99) + 4)|0;\n     $102 = $101;\n     HEAP32[$102>>2] = 0;\n     break L1;\n     break;\n    }\n    case 17:  {\n     $arglist_current23 = HEAP32[$2>>2]|0;\n     $103 = $arglist_current23;\n     $104 = ((0) + 8|0);\n     $expanded84 = $104;\n     $expanded83 = (($expanded84) - 1)|0;\n     $105 = (($103) + ($expanded83))|0;\n     $106 = ((0) + 8|0);\n     $expanded88 = $106;\n     $expanded87 = (($expanded88) - 1)|0;\n     $expanded86 = $expanded87 ^ -1;\n     $107 = $105 & $expanded86;\n     $108 = $107;\n     $109 = +HEAPF64[$108>>3];\n     $arglist_next24 = ((($108)) + 8|0);\n     HEAP32[$2>>2] = $arglist_next24;\n     HEAPF64[$0>>3] = $109;\n     break L1;\n     break;\n    }\n    case 18:  {\n     $arglist_current26 = HEAP32[$2>>2]|0;\n     $110 = $arglist_current26;\n     $111 = ((0) + 8|0);\n     $expanded91 = $111;\n     $expanded90 = (($expanded91) - 1)|0;\n     $112 = (($110) + ($expanded90))|0;\n     $113 = ((0) + 8|0);\n     $expanded95 = $113;\n     $expanded94 = (($expanded95) - 1)|0;\n     $expanded93 = $expanded94 ^ -1;\n     $114 = $112 & $expanded93;\n     $115 = $114;\n     $116 = +HEAPF64[$115>>3];\n     $arglist_next27 = ((($115)) + 8|0);\n     HEAP32[$2>>2] = $arglist_next27;\n     HEAPF64[$0>>3] = $116;\n     break L1;\n     break;\n    }\n    default: {\n     break L1;\n    }\n    }\n   } while(0);\n  }\n } while(0);\n return;\n}\nfunction _fmt_x($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$05$lcssa = 0, $$056 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n $4 = ($0|0)==(0);\n $5 = ($1|0)==(0);\n $6 = $4 & $5;\n if ($6) {\n  $$05$lcssa = $2;\n } else {\n  $$056 = $2;$15 = $1;$8 = $0;\n  while(1) {\n   $7 = $8 & 15;\n   $9 = (18429 + ($7)|0);\n   $10 = HEAP8[$9>>0]|0;\n   $11 = $10&255;\n   $12 = $11 | $3;\n   $13 = $12&255;\n   $14 = ((($$056)) + -1|0);\n   HEAP8[$14>>0] = $13;\n   $16 = (_bitshift64Lshr(($8|0),($15|0),4)|0);\n   $17 = tempRet0;\n   $18 = ($16|0)==(0);\n   $19 = ($17|0)==(0);\n   $20 = $18 & $19;\n   if ($20) {\n    $$05$lcssa = $14;\n    break;\n   } else {\n    $$056 = $14;$15 = $17;$8 = $16;\n   }\n  }\n }\n return ($$05$lcssa|0);\n}\nfunction _fmt_o($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0$lcssa = 0, $$06 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($0|0)==(0);\n $4 = ($1|0)==(0);\n $5 = $3 & $4;\n if ($5) {\n  $$0$lcssa = $2;\n } else {\n  $$06 = $2;$11 = $1;$7 = $0;\n  while(1) {\n   $6 = $7&255;\n   $8 = $6 & 7;\n   $9 = $8 | 48;\n   $10 = ((($$06)) + -1|0);\n   HEAP8[$10>>0] = $9;\n   $12 = (_bitshift64Lshr(($7|0),($11|0),3)|0);\n   $13 = tempRet0;\n   $14 = ($12|0)==(0);\n   $15 = ($13|0)==(0);\n   $16 = $14 & $15;\n   if ($16) {\n    $$0$lcssa = $10;\n    break;\n   } else {\n    $$06 = $10;$11 = $13;$7 = $12;\n   }\n  }\n }\n return ($$0$lcssa|0);\n}\nfunction _fmt_u($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$010$lcssa$off0 = 0, $$012 = 0, $$09$lcssa = 0, $$0914 = 0, $$1$lcssa = 0, $$111 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0;\n var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($1>>>0)>(0);\n $4 = ($0>>>0)>(4294967295);\n $5 = ($1|0)==(0);\n $6 = $5 & $4;\n $7 = $3 | $6;\n if ($7) {\n  $$0914 = $2;$8 = $0;$9 = $1;\n  while(1) {\n   $10 = (___udivdi3(($8|0),($9|0),10,0)|0);\n   $11 = tempRet0;\n   $12 = (___muldi3(($10|0),($11|0),10,0)|0);\n   $13 = tempRet0;\n   $14 = (_i64Subtract(($8|0),($9|0),($12|0),($13|0))|0);\n   $15 = tempRet0;\n   $16 = $14&255;\n   $17 = $16 | 48;\n   $18 = ((($$0914)) + -1|0);\n   HEAP8[$18>>0] = $17;\n   $19 = ($9>>>0)>(9);\n   $20 = ($8>>>0)>(4294967295);\n   $21 = ($9|0)==(9);\n   $22 = $21 & $20;\n   $23 = $19 | $22;\n   if ($23) {\n    $$0914 = $18;$8 = $10;$9 = $11;\n   } else {\n    break;\n   }\n  }\n  $$010$lcssa$off0 = $10;$$09$lcssa = $18;\n } else {\n  $$010$lcssa$off0 = $0;$$09$lcssa = $2;\n }\n $24 = ($$010$lcssa$off0|0)==(0);\n if ($24) {\n  $$1$lcssa = $$09$lcssa;\n } else {\n  $$012 = $$010$lcssa$off0;$$111 = $$09$lcssa;\n  while(1) {\n   $25 = (($$012>>>0) / 10)&-1;\n   $26 = ($25*10)|0;\n   $27 = (($$012) - ($26))|0;\n   $28 = $27 | 48;\n   $29 = $28&255;\n   $30 = ((($$111)) + -1|0);\n   HEAP8[$30>>0] = $29;\n   $31 = ($$012>>>0)<(10);\n   if ($31) {\n    $$1$lcssa = $30;\n    break;\n   } else {\n    $$012 = $25;$$111 = $30;\n   }\n  }\n }\n return ($$1$lcssa|0);\n}\nfunction _strerror($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (___pthread_self_105()|0);\n $2 = ((($1)) + 188|0);\n $3 = HEAP32[$2>>2]|0;\n $4 = (___strerror_l($0,$3)|0);\n return ($4|0);\n}\nfunction _memchr($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0$lcssa = 0, $$035$lcssa = 0, $$035$lcssa65 = 0, $$03555 = 0, $$036$lcssa = 0, $$036$lcssa64 = 0, $$03654 = 0, $$046 = 0, $$137$lcssa = 0, $$137$lcssa66 = 0, $$13745 = 0, $$140 = 0, $$23839 = 0, $$in = 0, $$lcssa = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0;\n var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0;\n var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond53 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = $1 & 255;\n $4 = $0;\n $5 = $4 & 3;\n $6 = ($5|0)!=(0);\n $7 = ($2|0)!=(0);\n $or$cond53 = $7 & $6;\n L1: do {\n  if ($or$cond53) {\n   $8 = $1&255;\n   $$03555 = $0;$$03654 = $2;\n   while(1) {\n    $9 = HEAP8[$$03555>>0]|0;\n    $10 = ($9<<24>>24)==($8<<24>>24);\n    if ($10) {\n     $$035$lcssa65 = $$03555;$$036$lcssa64 = $$03654;\n     label = 6;\n     break L1;\n    }\n    $11 = ((($$03555)) + 1|0);\n    $12 = (($$03654) + -1)|0;\n    $13 = $11;\n    $14 = $13 & 3;\n    $15 = ($14|0)!=(0);\n    $16 = ($12|0)!=(0);\n    $or$cond = $16 & $15;\n    if ($or$cond) {\n     $$03555 = $11;$$03654 = $12;\n    } else {\n     $$035$lcssa = $11;$$036$lcssa = $12;$$lcssa = $16;\n     label = 5;\n     break;\n    }\n   }\n  } else {\n   $$035$lcssa = $0;$$036$lcssa = $2;$$lcssa = $7;\n   label = 5;\n  }\n } while(0);\n if ((label|0) == 5) {\n  if ($$lcssa) {\n   $$035$lcssa65 = $$035$lcssa;$$036$lcssa64 = $$036$lcssa;\n   label = 6;\n  } else {\n   label = 16;\n  }\n }\n L8: do {\n  if ((label|0) == 6) {\n   $17 = HEAP8[$$035$lcssa65>>0]|0;\n   $18 = $1&255;\n   $19 = ($17<<24>>24)==($18<<24>>24);\n   if ($19) {\n    $38 = ($$036$lcssa64|0)==(0);\n    if ($38) {\n     label = 16;\n     break;\n    } else {\n     $39 = $$035$lcssa65;\n     break;\n    }\n   }\n   $20 = Math_imul($3, 16843009)|0;\n   $21 = ($$036$lcssa64>>>0)>(3);\n   L13: do {\n    if ($21) {\n     $$046 = $$035$lcssa65;$$13745 = $$036$lcssa64;\n     while(1) {\n      $22 = HEAP32[$$046>>2]|0;\n      $23 = $22 ^ $20;\n      $24 = (($23) + -16843009)|0;\n      $25 = $23 & -2139062144;\n      $26 = $25 ^ -2139062144;\n      $27 = $26 & $24;\n      $28 = ($27|0)==(0);\n      if (!($28)) {\n       $$137$lcssa66 = $$13745;$$in = $$046;\n       break L13;\n      }\n      $29 = ((($$046)) + 4|0);\n      $30 = (($$13745) + -4)|0;\n      $31 = ($30>>>0)>(3);\n      if ($31) {\n       $$046 = $29;$$13745 = $30;\n      } else {\n       $$0$lcssa = $29;$$137$lcssa = $30;\n       label = 11;\n       break;\n      }\n     }\n    } else {\n     $$0$lcssa = $$035$lcssa65;$$137$lcssa = $$036$lcssa64;\n     label = 11;\n    }\n   } while(0);\n   if ((label|0) == 11) {\n    $32 = ($$137$lcssa|0)==(0);\n    if ($32) {\n     label = 16;\n     break;\n    } else {\n     $$137$lcssa66 = $$137$lcssa;$$in = $$0$lcssa;\n    }\n   }\n   $$140 = $$in;$$23839 = $$137$lcssa66;\n   while(1) {\n    $33 = HEAP8[$$140>>0]|0;\n    $34 = ($33<<24>>24)==($18<<24>>24);\n    if ($34) {\n     $39 = $$140;\n     break L8;\n    }\n    $35 = ((($$140)) + 1|0);\n    $36 = (($$23839) + -1)|0;\n    $37 = ($36|0)==(0);\n    if ($37) {\n     label = 16;\n     break;\n    } else {\n     $$140 = $35;$$23839 = $36;\n    }\n   }\n  }\n } while(0);\n if ((label|0) == 16) {\n  $39 = 0;\n }\n return ($39|0);\n}\nfunction _pad_683($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$0$lcssa = 0, $$011 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 256|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(256|0);\n $5 = sp;\n $6 = $4 & 73728;\n $7 = ($6|0)==(0);\n $8 = ($2|0)>($3|0);\n $or$cond = $8 & $7;\n if ($or$cond) {\n  $9 = (($2) - ($3))|0;\n  $10 = $1 << 24 >> 24;\n  $11 = ($9>>>0)<(256);\n  $12 = $11 ? $9 : 256;\n  (_memset(($5|0),($10|0),($12|0))|0);\n  $13 = ($9>>>0)>(255);\n  if ($13) {\n   $14 = (($2) - ($3))|0;\n   $$011 = $9;\n   while(1) {\n    _out($0,$5,256);\n    $15 = (($$011) + -256)|0;\n    $16 = ($15>>>0)>(255);\n    if ($16) {\n     $$011 = $15;\n    } else {\n     break;\n    }\n   }\n   $17 = $14 & 255;\n   $$0$lcssa = $17;\n  } else {\n   $$0$lcssa = $9;\n  }\n  _out($0,$5,$$0$lcssa);\n }\n STACKTOP = sp;return;\n}\nfunction _wctomb($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$0 = 0, $2 = 0, $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = ($0|0)==(0|0);\n if ($2) {\n  $$0 = 0;\n } else {\n  $3 = (_wcrtomb($0,$1,0)|0);\n  $$0 = $3;\n }\n return ($$0|0);\n}\nfunction _fmt_fp($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = +$1;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $$ = 0, $$0 = 0, $$0463$lcssa = 0, $$0463588 = 0, $$0464599 = 0, $$0471 = 0.0, $$0479 = 0, $$0487657 = 0, $$0488 = 0, $$0488669 = 0, $$0488671 = 0, $$0497670 = 0, $$0498 = 0, $$0511586 = 0.0, $$0512 = 0, $$0513 = 0, $$0516652 = 0, $$0522 = 0, $$0523 = 0, $$0525 = 0;\n var $$0527 = 0, $$0529 = 0, $$0529$in646 = 0, $$0532651 = 0, $$1465 = 0, $$1467 = 0.0, $$1469 = 0.0, $$1472 = 0.0, $$1480 = 0, $$1482$lcssa = 0, $$1482683 = 0, $$1489656 = 0, $$1499 = 0, $$1510587 = 0, $$1514$lcssa = 0, $$1514614 = 0, $$1517 = 0, $$1526 = 0, $$1528 = 0, $$1530621 = 0;\n var $$1533$lcssa = 0, $$1533645 = 0, $$1604 = 0, $$2 = 0, $$2473 = 0.0, $$2476 = 0, $$2483 = 0, $$2490$lcssa = 0, $$2490638 = 0, $$2500$lcssa = 0, $$2500682 = 0, $$2515 = 0, $$2518634 = 0, $$2531 = 0, $$2534633 = 0, $$3 = 0.0, $$3477 = 0, $$3484$lcssa = 0, $$3484663 = 0, $$3501$lcssa = 0;\n var $$3501676 = 0, $$3535620 = 0, $$4 = 0.0, $$4478$lcssa = 0, $$4478594 = 0, $$4492 = 0, $$4502$lcssa = 0, $$4502662 = 0, $$4520 = 0, $$5$lcssa = 0, $$5486$lcssa = 0, $$5486639 = 0, $$5493603 = 0, $$5503 = 0, $$5521 = 0, $$560 = 0, $$5609 = 0, $$6 = 0, $$6494593 = 0, $$7495608 = 0;\n var $$8 = 0, $$8506 = 0, $$9 = 0, $$9507$lcssa = 0, $$9507625 = 0, $$lcssa583 = 0, $$lobit = 0, $$neg = 0, $$neg571 = 0, $$not = 0, $$pn = 0, $$pr = 0, $$pr564 = 0, $$pre = 0, $$pre$phi713Z2D = 0, $$pre$phi714Z2D = 0, $$pre716 = 0, $$sink755 = 0, $10 = 0, $100 = 0;\n var $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0;\n var $12 = 0, $120 = 0, $121 = 0.0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0;\n var $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0.0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0;\n var $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0;\n var $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0;\n var $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0;\n var $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0;\n var $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0.0;\n var $247 = 0.0, $248 = 0, $249 = 0.0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0;\n var $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0;\n var $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $30 = 0, $300 = 0;\n var $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0;\n var $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0;\n var $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0;\n var $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0.0, $370 = 0, $371 = 0, $372 = 0, $373 = 0;\n var $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0.0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0;\n var $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0;\n var $410 = 0, $411 = 0, $412 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0.0, $54 = 0, $55 = 0, $56 = 0, $57 = 0.0, $58 = 0.0;\n var $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0.0, $62 = 0.0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0;\n var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0.0, $91 = 0.0, $92 = 0.0, $93 = 0, $94 = 0;\n var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $not$ = 0, $or$cond = 0, $or$cond3$not = 0, $or$cond543 = 0, $or$cond546 = 0, $or$cond556 = 0, $or$cond559 = 0, $or$cond6 = 0, $scevgep707 = 0, $scevgep707708 = 0, $spec$select = 0, $spec$select539 = 0, $spec$select540 = 0, $spec$select540720 = 0, $spec$select540721 = 0;\n var $spec$select541 = 0, $spec$select544 = 0.0, $spec$select547 = 0, $spec$select548 = 0, $spec$select549 = 0, $spec$select551 = 0, $spec$select554 = 0, $spec$select557 = 0, $spec$select561 = 0.0, $spec$select562 = 0, $spec$select563 = 0, $spec$select565 = 0, $spec$select566 = 0, $spec$select567 = 0.0, $spec$select568 = 0.0, $spec$select569 = 0.0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 560|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(560|0);\n $6 = sp + 8|0;\n $7 = sp;\n $8 = sp + 524|0;\n $9 = $8;\n $10 = sp + 512|0;\n HEAP32[$7>>2] = 0;\n $11 = ((($10)) + 12|0);\n $12 = (___DOUBLE_BITS_684($1)|0);\n $13 = tempRet0;\n $14 = ($13|0)<(0);\n if ($14) {\n  $15 = - $1;\n  $16 = (___DOUBLE_BITS_684($15)|0);\n  $17 = tempRet0;\n  $$0471 = $15;$$0522 = 1;$$0523 = 18394;$25 = $17;$412 = $16;\n } else {\n  $18 = $4 & 2048;\n  $19 = ($18|0)==(0);\n  $20 = $4 & 1;\n  $21 = ($20|0)==(0);\n  $$ = $21 ? (18395) : (18400);\n  $spec$select565 = $19 ? $$ : (18397);\n  $22 = $4 & 2049;\n  $23 = ($22|0)!=(0);\n  $spec$select566 = $23&1;\n  $$0471 = $1;$$0522 = $spec$select566;$$0523 = $spec$select565;$25 = $13;$412 = $12;\n }\n $24 = $25 & 2146435072;\n $26 = (0)==(0);\n $27 = ($24|0)==(2146435072);\n $28 = $26 & $27;\n do {\n  if ($28) {\n   $29 = $5 & 32;\n   $30 = ($29|0)!=(0);\n   $31 = $30 ? 18413 : 18417;\n   $32 = ($$0471 != $$0471) | (0.0 != 0.0);\n   $33 = $30 ? 18421 : 18425;\n   $$0512 = $32 ? $33 : $31;\n   $34 = (($$0522) + 3)|0;\n   $35 = $4 & -65537;\n   _pad_683($0,32,$2,$34,$35);\n   _out($0,$$0523,$$0522);\n   _out($0,$$0512,3);\n   $36 = $4 ^ 8192;\n   _pad_683($0,32,$2,$34,$36);\n   $$sink755 = $34;\n  } else {\n   $37 = (+_frexpl($$0471,$7));\n   $38 = $37 * 2.0;\n   $39 = $38 != 0.0;\n   if ($39) {\n    $40 = HEAP32[$7>>2]|0;\n    $41 = (($40) + -1)|0;\n    HEAP32[$7>>2] = $41;\n   }\n   $42 = $5 | 32;\n   $43 = ($42|0)==(97);\n   if ($43) {\n    $44 = $5 & 32;\n    $45 = ($44|0)==(0);\n    $46 = ((($$0523)) + 9|0);\n    $spec$select = $45 ? $$0523 : $46;\n    $47 = $$0522 | 2;\n    $48 = ($3>>>0)>(11);\n    $49 = (12 - ($3))|0;\n    $50 = ($49|0)==(0);\n    $51 = $48 | $50;\n    do {\n     if ($51) {\n      $$1472 = $38;\n     } else {\n      $$0511586 = 8.0;$$1510587 = $49;\n      while(1) {\n       $52 = (($$1510587) + -1)|0;\n       $53 = $$0511586 * 16.0;\n       $54 = ($52|0)==(0);\n       if ($54) {\n        break;\n       } else {\n        $$0511586 = $53;$$1510587 = $52;\n       }\n      }\n      $55 = HEAP8[$spec$select>>0]|0;\n      $56 = ($55<<24>>24)==(45);\n      if ($56) {\n       $57 = - $38;\n       $58 = $57 - $53;\n       $59 = $53 + $58;\n       $60 = - $59;\n       $$1472 = $60;\n       break;\n      } else {\n       $61 = $38 + $53;\n       $62 = $61 - $53;\n       $$1472 = $62;\n       break;\n      }\n     }\n    } while(0);\n    $63 = HEAP32[$7>>2]|0;\n    $64 = ($63|0)<(0);\n    $65 = (0 - ($63))|0;\n    $66 = $64 ? $65 : $63;\n    $67 = ($66|0)<(0);\n    $68 = $67 << 31 >> 31;\n    $69 = (_fmt_u($66,$68,$11)|0);\n    $70 = ($69|0)==($11|0);\n    if ($70) {\n     $71 = ((($10)) + 11|0);\n     HEAP8[$71>>0] = 48;\n     $$0513 = $71;\n    } else {\n     $$0513 = $69;\n    }\n    $72 = $63 >> 31;\n    $73 = $72 & 2;\n    $74 = (($73) + 43)|0;\n    $75 = $74&255;\n    $76 = ((($$0513)) + -1|0);\n    HEAP8[$76>>0] = $75;\n    $77 = (($5) + 15)|0;\n    $78 = $77&255;\n    $79 = ((($$0513)) + -2|0);\n    HEAP8[$79>>0] = $78;\n    $80 = ($3|0)<(1);\n    $81 = $4 & 8;\n    $82 = ($81|0)==(0);\n    $$0525 = $8;$$2473 = $$1472;\n    while(1) {\n     $83 = (~~(($$2473)));\n     $84 = (18429 + ($83)|0);\n     $85 = HEAP8[$84>>0]|0;\n     $86 = $85&255;\n     $87 = $44 | $86;\n     $88 = $87&255;\n     $89 = ((($$0525)) + 1|0);\n     HEAP8[$$0525>>0] = $88;\n     $90 = (+($83|0));\n     $91 = $$2473 - $90;\n     $92 = $91 * 16.0;\n     $93 = $89;\n     $94 = (($93) - ($9))|0;\n     $95 = ($94|0)==(1);\n     if ($95) {\n      $96 = $92 == 0.0;\n      $or$cond3$not = $80 & $96;\n      $or$cond = $82 & $or$cond3$not;\n      if ($or$cond) {\n       $$1526 = $89;\n      } else {\n       $97 = ((($$0525)) + 2|0);\n       HEAP8[$89>>0] = 46;\n       $$1526 = $97;\n      }\n     } else {\n      $$1526 = $89;\n     }\n     $98 = $92 != 0.0;\n     if ($98) {\n      $$0525 = $$1526;$$2473 = $92;\n     } else {\n      break;\n     }\n    }\n    $99 = ($3|0)==(0);\n    $$pre716 = $$1526;\n    if ($99) {\n     label = 25;\n    } else {\n     $100 = (-2 - ($9))|0;\n     $101 = (($100) + ($$pre716))|0;\n     $102 = ($101|0)<($3|0);\n     if ($102) {\n      $103 = $11;\n      $104 = $79;\n      $105 = (($3) + 2)|0;\n      $106 = (($105) + ($103))|0;\n      $107 = (($106) - ($104))|0;\n      $$0527 = $107;$$pre$phi713Z2D = $103;$$pre$phi714Z2D = $104;\n     } else {\n      label = 25;\n     }\n    }\n    if ((label|0) == 25) {\n     $108 = $11;\n     $109 = $79;\n     $110 = (($108) - ($9))|0;\n     $111 = (($110) - ($109))|0;\n     $112 = (($111) + ($$pre716))|0;\n     $$0527 = $112;$$pre$phi713Z2D = $108;$$pre$phi714Z2D = $109;\n    }\n    $113 = (($$0527) + ($47))|0;\n    _pad_683($0,32,$2,$113,$4);\n    _out($0,$spec$select,$47);\n    $114 = $4 ^ 65536;\n    _pad_683($0,48,$2,$113,$114);\n    $115 = (($$pre716) - ($9))|0;\n    _out($0,$8,$115);\n    $116 = (($$pre$phi713Z2D) - ($$pre$phi714Z2D))|0;\n    $117 = (($115) + ($116))|0;\n    $118 = (($$0527) - ($117))|0;\n    _pad_683($0,48,$118,0,0);\n    _out($0,$79,$116);\n    $119 = $4 ^ 8192;\n    _pad_683($0,32,$2,$113,$119);\n    $$sink755 = $113;\n    break;\n   }\n   $120 = ($3|0)<(0);\n   $spec$select539 = $120 ? 6 : $3;\n   if ($39) {\n    $121 = $38 * 268435456.0;\n    $122 = HEAP32[$7>>2]|0;\n    $123 = (($122) + -28)|0;\n    HEAP32[$7>>2] = $123;\n    $$3 = $121;$$pr = $123;\n   } else {\n    $$pre = HEAP32[$7>>2]|0;\n    $$3 = $38;$$pr = $$pre;\n   }\n   $124 = ($$pr|0)<(0);\n   $125 = ((($6)) + 288|0);\n   $$0498 = $124 ? $6 : $125;\n   $$1499 = $$0498;$$4 = $$3;\n   while(1) {\n    $126 = (~~(($$4))>>>0);\n    HEAP32[$$1499>>2] = $126;\n    $127 = ((($$1499)) + 4|0);\n    $128 = (+($126>>>0));\n    $129 = $$4 - $128;\n    $130 = $129 * 1.0E+9;\n    $131 = $130 != 0.0;\n    if ($131) {\n     $$1499 = $127;$$4 = $130;\n    } else {\n     break;\n    }\n   }\n   $132 = ($$pr|0)>(0);\n   if ($132) {\n    $$1482683 = $$0498;$$2500682 = $127;$134 = $$pr;\n    while(1) {\n     $133 = ($134|0)<(29);\n     $135 = $133 ? $134 : 29;\n     $$0488669 = ((($$2500682)) + -4|0);\n     $136 = ($$0488669>>>0)<($$1482683>>>0);\n     if ($136) {\n      $$2483 = $$1482683;\n     } else {\n      $$0488671 = $$0488669;$$0497670 = 0;\n      while(1) {\n       $137 = HEAP32[$$0488671>>2]|0;\n       $138 = (_bitshift64Shl(($137|0),0,($135|0))|0);\n       $139 = tempRet0;\n       $140 = (_i64Add(($138|0),($139|0),($$0497670|0),0)|0);\n       $141 = tempRet0;\n       $142 = (___udivdi3(($140|0),($141|0),1000000000,0)|0);\n       $143 = tempRet0;\n       $144 = (___muldi3(($142|0),($143|0),1000000000,0)|0);\n       $145 = tempRet0;\n       $146 = (_i64Subtract(($140|0),($141|0),($144|0),($145|0))|0);\n       $147 = tempRet0;\n       HEAP32[$$0488671>>2] = $146;\n       $$0488 = ((($$0488671)) + -4|0);\n       $148 = ($$0488>>>0)<($$1482683>>>0);\n       if ($148) {\n        break;\n       } else {\n        $$0488671 = $$0488;$$0497670 = $142;\n       }\n      }\n      $149 = ($142|0)==(0);\n      if ($149) {\n       $$2483 = $$1482683;\n      } else {\n       $150 = ((($$1482683)) + -4|0);\n       HEAP32[$150>>2] = $142;\n       $$2483 = $150;\n      }\n     }\n     $151 = ($$2500682>>>0)>($$2483>>>0);\n     L57: do {\n      if ($151) {\n       $$3501676 = $$2500682;\n       while(1) {\n        $153 = ((($$3501676)) + -4|0);\n        $154 = HEAP32[$153>>2]|0;\n        $155 = ($154|0)==(0);\n        if (!($155)) {\n         $$3501$lcssa = $$3501676;\n         break L57;\n        }\n        $152 = ($153>>>0)>($$2483>>>0);\n        if ($152) {\n         $$3501676 = $153;\n        } else {\n         $$3501$lcssa = $153;\n         break;\n        }\n       }\n      } else {\n       $$3501$lcssa = $$2500682;\n      }\n     } while(0);\n     $156 = HEAP32[$7>>2]|0;\n     $157 = (($156) - ($135))|0;\n     HEAP32[$7>>2] = $157;\n     $158 = ($157|0)>(0);\n     if ($158) {\n      $$1482683 = $$2483;$$2500682 = $$3501$lcssa;$134 = $157;\n     } else {\n      $$1482$lcssa = $$2483;$$2500$lcssa = $$3501$lcssa;$$pr564 = $157;\n      break;\n     }\n    }\n   } else {\n    $$1482$lcssa = $$0498;$$2500$lcssa = $127;$$pr564 = $$pr;\n   }\n   $159 = ($$pr564|0)<(0);\n   if ($159) {\n    $160 = (($spec$select539) + 25)|0;\n    $161 = (($160|0) / 9)&-1;\n    $162 = (($161) + 1)|0;\n    $163 = ($42|0)==(102);\n    $$3484663 = $$1482$lcssa;$$4502662 = $$2500$lcssa;$165 = $$pr564;\n    while(1) {\n     $164 = (0 - ($165))|0;\n     $166 = ($164|0)<(9);\n     $167 = $166 ? $164 : 9;\n     $168 = ($$3484663>>>0)<($$4502662>>>0);\n     if ($168) {\n      $172 = 1 << $167;\n      $173 = (($172) + -1)|0;\n      $174 = 1000000000 >>> $167;\n      $$0487657 = 0;$$1489656 = $$3484663;\n      while(1) {\n       $175 = HEAP32[$$1489656>>2]|0;\n       $176 = $175 & $173;\n       $177 = $175 >>> $167;\n       $178 = (($177) + ($$0487657))|0;\n       HEAP32[$$1489656>>2] = $178;\n       $179 = Math_imul($176, $174)|0;\n       $180 = ((($$1489656)) + 4|0);\n       $181 = ($180>>>0)<($$4502662>>>0);\n       if ($181) {\n        $$0487657 = $179;$$1489656 = $180;\n       } else {\n        break;\n       }\n      }\n      $182 = HEAP32[$$3484663>>2]|0;\n      $183 = ($182|0)==(0);\n      $184 = ((($$3484663)) + 4|0);\n      $spec$select540 = $183 ? $184 : $$3484663;\n      $185 = ($179|0)==(0);\n      if ($185) {\n       $$5503 = $$4502662;$spec$select540721 = $spec$select540;\n      } else {\n       $186 = ((($$4502662)) + 4|0);\n       HEAP32[$$4502662>>2] = $179;\n       $$5503 = $186;$spec$select540721 = $spec$select540;\n      }\n     } else {\n      $169 = HEAP32[$$3484663>>2]|0;\n      $170 = ($169|0)==(0);\n      $171 = ((($$3484663)) + 4|0);\n      $spec$select540720 = $170 ? $171 : $$3484663;\n      $$5503 = $$4502662;$spec$select540721 = $spec$select540720;\n     }\n     $187 = $163 ? $$0498 : $spec$select540721;\n     $188 = $$5503;\n     $189 = $187;\n     $190 = (($188) - ($189))|0;\n     $191 = $190 >> 2;\n     $192 = ($191|0)>($162|0);\n     $193 = (($187) + ($162<<2)|0);\n     $spec$select541 = $192 ? $193 : $$5503;\n     $194 = HEAP32[$7>>2]|0;\n     $195 = (($194) + ($167))|0;\n     HEAP32[$7>>2] = $195;\n     $196 = ($195|0)<(0);\n     if ($196) {\n      $$3484663 = $spec$select540721;$$4502662 = $spec$select541;$165 = $195;\n     } else {\n      $$3484$lcssa = $spec$select540721;$$4502$lcssa = $spec$select541;\n      break;\n     }\n    }\n   } else {\n    $$3484$lcssa = $$1482$lcssa;$$4502$lcssa = $$2500$lcssa;\n   }\n   $197 = ($$3484$lcssa>>>0)<($$4502$lcssa>>>0);\n   $198 = $$0498;\n   if ($197) {\n    $199 = $$3484$lcssa;\n    $200 = (($198) - ($199))|0;\n    $201 = $200 >> 2;\n    $202 = ($201*9)|0;\n    $203 = HEAP32[$$3484$lcssa>>2]|0;\n    $204 = ($203>>>0)<(10);\n    if ($204) {\n     $$1517 = $202;\n    } else {\n     $$0516652 = $202;$$0532651 = 10;\n     while(1) {\n      $205 = ($$0532651*10)|0;\n      $206 = (($$0516652) + 1)|0;\n      $207 = ($203>>>0)<($205>>>0);\n      if ($207) {\n       $$1517 = $206;\n       break;\n      } else {\n       $$0516652 = $206;$$0532651 = $205;\n      }\n     }\n    }\n   } else {\n    $$1517 = 0;\n   }\n   $208 = ($42|0)==(102);\n   $209 = $208 ? 0 : $$1517;\n   $210 = (($spec$select539) - ($209))|0;\n   $211 = ($42|0)==(103);\n   $212 = ($spec$select539|0)!=(0);\n   $213 = $212 & $211;\n   $$neg = $213 << 31 >> 31;\n   $214 = (($210) + ($$neg))|0;\n   $215 = $$4502$lcssa;\n   $216 = (($215) - ($198))|0;\n   $217 = $216 >> 2;\n   $218 = ($217*9)|0;\n   $219 = (($218) + -9)|0;\n   $220 = ($214|0)<($219|0);\n   if ($220) {\n    $221 = ((($$0498)) + 4|0);\n    $222 = (($214) + 9216)|0;\n    $223 = (($222|0) / 9)&-1;\n    $224 = (($223) + -1024)|0;\n    $225 = (($221) + ($224<<2)|0);\n    $226 = ($223*9)|0;\n    $227 = (($222) - ($226))|0;\n    $228 = ($227|0)<(8);\n    if ($228) {\n     $$0529$in646 = $227;$$1533645 = 10;\n     while(1) {\n      $$0529 = (($$0529$in646) + 1)|0;\n      $229 = ($$1533645*10)|0;\n      $230 = ($$0529$in646|0)<(7);\n      if ($230) {\n       $$0529$in646 = $$0529;$$1533645 = $229;\n      } else {\n       $$1533$lcssa = $229;\n       break;\n      }\n     }\n    } else {\n     $$1533$lcssa = 10;\n    }\n    $231 = HEAP32[$225>>2]|0;\n    $232 = (($231>>>0) / ($$1533$lcssa>>>0))&-1;\n    $233 = Math_imul($232, $$1533$lcssa)|0;\n    $234 = (($231) - ($233))|0;\n    $235 = ($234|0)==(0);\n    $236 = ((($225)) + 4|0);\n    $237 = ($236|0)==($$4502$lcssa|0);\n    $or$cond543 = $237 & $235;\n    if ($or$cond543) {\n     $$4492 = $225;$$4520 = $$1517;$$8 = $$3484$lcssa;\n    } else {\n     $238 = $232 & 1;\n     $239 = ($238|0)==(0);\n     $spec$select544 = $239 ? 9007199254740992.0 : 9007199254740994.0;\n     $240 = $$1533$lcssa >>> 1;\n     $241 = ($234>>>0)<($240>>>0);\n     $242 = ($234|0)==($240|0);\n     $or$cond546 = $237 & $242;\n     $spec$select561 = $or$cond546 ? 1.0 : 1.5;\n     $spec$select567 = $241 ? 0.5 : $spec$select561;\n     $243 = ($$0522|0)==(0);\n     if ($243) {\n      $$1467 = $spec$select567;$$1469 = $spec$select544;\n     } else {\n      $244 = HEAP8[$$0523>>0]|0;\n      $245 = ($244<<24>>24)==(45);\n      $246 = - $spec$select544;\n      $247 = - $spec$select567;\n      $spec$select568 = $245 ? $246 : $spec$select544;\n      $spec$select569 = $245 ? $247 : $spec$select567;\n      $$1467 = $spec$select569;$$1469 = $spec$select568;\n     }\n     $248 = (($231) - ($234))|0;\n     HEAP32[$225>>2] = $248;\n     $249 = $$1469 + $$1467;\n     $250 = $249 != $$1469;\n     if ($250) {\n      $251 = (($248) + ($$1533$lcssa))|0;\n      HEAP32[$225>>2] = $251;\n      $252 = ($251>>>0)>(999999999);\n      if ($252) {\n       $$2490638 = $225;$$5486639 = $$3484$lcssa;\n       while(1) {\n        $253 = ((($$2490638)) + -4|0);\n        HEAP32[$$2490638>>2] = 0;\n        $254 = ($253>>>0)<($$5486639>>>0);\n        if ($254) {\n         $255 = ((($$5486639)) + -4|0);\n         HEAP32[$255>>2] = 0;\n         $$6 = $255;\n        } else {\n         $$6 = $$5486639;\n        }\n        $256 = HEAP32[$253>>2]|0;\n        $257 = (($256) + 1)|0;\n        HEAP32[$253>>2] = $257;\n        $258 = ($257>>>0)>(999999999);\n        if ($258) {\n         $$2490638 = $253;$$5486639 = $$6;\n        } else {\n         $$2490$lcssa = $253;$$5486$lcssa = $$6;\n         break;\n        }\n       }\n      } else {\n       $$2490$lcssa = $225;$$5486$lcssa = $$3484$lcssa;\n      }\n      $259 = $$5486$lcssa;\n      $260 = (($198) - ($259))|0;\n      $261 = $260 >> 2;\n      $262 = ($261*9)|0;\n      $263 = HEAP32[$$5486$lcssa>>2]|0;\n      $264 = ($263>>>0)<(10);\n      if ($264) {\n       $$4492 = $$2490$lcssa;$$4520 = $262;$$8 = $$5486$lcssa;\n      } else {\n       $$2518634 = $262;$$2534633 = 10;\n       while(1) {\n        $265 = ($$2534633*10)|0;\n        $266 = (($$2518634) + 1)|0;\n        $267 = ($263>>>0)<($265>>>0);\n        if ($267) {\n         $$4492 = $$2490$lcssa;$$4520 = $266;$$8 = $$5486$lcssa;\n         break;\n        } else {\n         $$2518634 = $266;$$2534633 = $265;\n        }\n       }\n      }\n     } else {\n      $$4492 = $225;$$4520 = $$1517;$$8 = $$3484$lcssa;\n     }\n    }\n    $268 = ((($$4492)) + 4|0);\n    $269 = ($$4502$lcssa>>>0)>($268>>>0);\n    $spec$select547 = $269 ? $268 : $$4502$lcssa;\n    $$5521 = $$4520;$$8506 = $spec$select547;$$9 = $$8;\n   } else {\n    $$5521 = $$1517;$$8506 = $$4502$lcssa;$$9 = $$3484$lcssa;\n   }\n   $270 = (0 - ($$5521))|0;\n   $271 = ($$8506>>>0)>($$9>>>0);\n   L109: do {\n    if ($271) {\n     $$9507625 = $$8506;\n     while(1) {\n      $273 = ((($$9507625)) + -4|0);\n      $274 = HEAP32[$273>>2]|0;\n      $275 = ($274|0)==(0);\n      if (!($275)) {\n       $$9507$lcssa = $$9507625;$$lcssa583 = 1;\n       break L109;\n      }\n      $272 = ($273>>>0)>($$9>>>0);\n      if ($272) {\n       $$9507625 = $273;\n      } else {\n       $$9507$lcssa = $273;$$lcssa583 = 0;\n       break;\n      }\n     }\n    } else {\n     $$9507$lcssa = $$8506;$$lcssa583 = 0;\n    }\n   } while(0);\n   do {\n    if ($211) {\n     $not$ = $212 ^ 1;\n     $276 = $not$&1;\n     $spec$select548 = (($spec$select539) + ($276))|0;\n     $277 = ($spec$select548|0)>($$5521|0);\n     $278 = ($$5521|0)>(-5);\n     $or$cond6 = $277 & $278;\n     if ($or$cond6) {\n      $279 = (($5) + -1)|0;\n      $$neg571 = (($spec$select548) + -1)|0;\n      $280 = (($$neg571) - ($$5521))|0;\n      $$0479 = $279;$$2476 = $280;\n     } else {\n      $281 = (($5) + -2)|0;\n      $282 = (($spec$select548) + -1)|0;\n      $$0479 = $281;$$2476 = $282;\n     }\n     $283 = $4 & 8;\n     $284 = ($283|0)==(0);\n     if ($284) {\n      if ($$lcssa583) {\n       $285 = ((($$9507$lcssa)) + -4|0);\n       $286 = HEAP32[$285>>2]|0;\n       $287 = ($286|0)==(0);\n       if ($287) {\n        $$2531 = 9;\n       } else {\n        $288 = (($286>>>0) % 10)&-1;\n        $289 = ($288|0)==(0);\n        if ($289) {\n         $$1530621 = 0;$$3535620 = 10;\n         while(1) {\n          $290 = ($$3535620*10)|0;\n          $291 = (($$1530621) + 1)|0;\n          $292 = (($286>>>0) % ($290>>>0))&-1;\n          $293 = ($292|0)==(0);\n          if ($293) {\n           $$1530621 = $291;$$3535620 = $290;\n          } else {\n           $$2531 = $291;\n           break;\n          }\n         }\n        } else {\n         $$2531 = 0;\n        }\n       }\n      } else {\n       $$2531 = 9;\n      }\n      $294 = $$0479 | 32;\n      $295 = ($294|0)==(102);\n      $296 = $$9507$lcssa;\n      $297 = (($296) - ($198))|0;\n      $298 = $297 >> 2;\n      $299 = ($298*9)|0;\n      $300 = (($299) + -9)|0;\n      if ($295) {\n       $301 = (($300) - ($$2531))|0;\n       $302 = ($301|0)>(0);\n       $spec$select549 = $302 ? $301 : 0;\n       $303 = ($$2476|0)<($spec$select549|0);\n       $spec$select562 = $303 ? $$2476 : $spec$select549;\n       $$1480 = $$0479;$$3477 = $spec$select562;\n       break;\n      } else {\n       $304 = (($300) + ($$5521))|0;\n       $305 = (($304) - ($$2531))|0;\n       $306 = ($305|0)>(0);\n       $spec$select551 = $306 ? $305 : 0;\n       $307 = ($$2476|0)<($spec$select551|0);\n       $spec$select563 = $307 ? $$2476 : $spec$select551;\n       $$1480 = $$0479;$$3477 = $spec$select563;\n       break;\n      }\n     } else {\n      $$1480 = $$0479;$$3477 = $$2476;\n     }\n    } else {\n     $$1480 = $5;$$3477 = $spec$select539;\n    }\n   } while(0);\n   $308 = ($$3477|0)!=(0);\n   $309 = $4 >>> 3;\n   $$lobit = $309 & 1;\n   $310 = $308 ? 1 : $$lobit;\n   $311 = $$1480 | 32;\n   $312 = ($311|0)==(102);\n   if ($312) {\n    $313 = ($$5521|0)>(0);\n    $314 = $313 ? $$5521 : 0;\n    $$2515 = 0;$$pn = $314;\n   } else {\n    $315 = ($$5521|0)<(0);\n    $316 = $315 ? $270 : $$5521;\n    $317 = ($316|0)<(0);\n    $318 = $317 << 31 >> 31;\n    $319 = (_fmt_u($316,$318,$11)|0);\n    $320 = $11;\n    $321 = $319;\n    $322 = (($320) - ($321))|0;\n    $323 = ($322|0)<(2);\n    if ($323) {\n     $$1514614 = $319;\n     while(1) {\n      $324 = ((($$1514614)) + -1|0);\n      HEAP8[$324>>0] = 48;\n      $325 = $324;\n      $326 = (($320) - ($325))|0;\n      $327 = ($326|0)<(2);\n      if ($327) {\n       $$1514614 = $324;\n      } else {\n       $$1514$lcssa = $324;\n       break;\n      }\n     }\n    } else {\n     $$1514$lcssa = $319;\n    }\n    $328 = $$5521 >> 31;\n    $329 = $328 & 2;\n    $330 = (($329) + 43)|0;\n    $331 = $330&255;\n    $332 = ((($$1514$lcssa)) + -1|0);\n    HEAP8[$332>>0] = $331;\n    $333 = $$1480&255;\n    $334 = ((($$1514$lcssa)) + -2|0);\n    HEAP8[$334>>0] = $333;\n    $335 = $334;\n    $336 = (($320) - ($335))|0;\n    $$2515 = $334;$$pn = $336;\n   }\n   $337 = (($$0522) + 1)|0;\n   $338 = (($337) + ($$3477))|0;\n   $$1528 = (($338) + ($310))|0;\n   $339 = (($$1528) + ($$pn))|0;\n   _pad_683($0,32,$2,$339,$4);\n   _out($0,$$0523,$$0522);\n   $340 = $4 ^ 65536;\n   _pad_683($0,48,$2,$339,$340);\n   if ($312) {\n    $341 = ($$9>>>0)>($$0498>>>0);\n    $spec$select554 = $341 ? $$0498 : $$9;\n    $342 = ((($8)) + 9|0);\n    $343 = $342;\n    $344 = ((($8)) + 8|0);\n    $$5493603 = $spec$select554;\n    while(1) {\n     $345 = HEAP32[$$5493603>>2]|0;\n     $346 = (_fmt_u($345,0,$342)|0);\n     $347 = ($$5493603|0)==($spec$select554|0);\n     if ($347) {\n      $353 = ($346|0)==($342|0);\n      if ($353) {\n       HEAP8[$344>>0] = 48;\n       $$1465 = $344;\n      } else {\n       $$1465 = $346;\n      }\n     } else {\n      $348 = ($346>>>0)>($8>>>0);\n      if ($348) {\n       $349 = $346;\n       $350 = (($349) - ($9))|0;\n       _memset(($8|0),48,($350|0))|0;\n       $$0464599 = $346;\n       while(1) {\n        $351 = ((($$0464599)) + -1|0);\n        $352 = ($351>>>0)>($8>>>0);\n        if ($352) {\n         $$0464599 = $351;\n        } else {\n         $$1465 = $351;\n         break;\n        }\n       }\n      } else {\n       $$1465 = $346;\n      }\n     }\n     $354 = $$1465;\n     $355 = (($343) - ($354))|0;\n     _out($0,$$1465,$355);\n     $356 = ((($$5493603)) + 4|0);\n     $357 = ($356>>>0)>($$0498>>>0);\n     if ($357) {\n      break;\n     } else {\n      $$5493603 = $356;\n     }\n    }\n    $$not = $308 ^ 1;\n    $358 = $4 & 8;\n    $359 = ($358|0)==(0);\n    $or$cond556 = $359 & $$not;\n    if (!($or$cond556)) {\n     _out($0,18445,1);\n    }\n    $360 = ($356>>>0)<($$9507$lcssa>>>0);\n    $361 = ($$3477|0)>(0);\n    $362 = $360 & $361;\n    if ($362) {\n     $$4478594 = $$3477;$$6494593 = $356;\n     while(1) {\n      $363 = HEAP32[$$6494593>>2]|0;\n      $364 = (_fmt_u($363,0,$342)|0);\n      $365 = ($364>>>0)>($8>>>0);\n      if ($365) {\n       $366 = $364;\n       $367 = (($366) - ($9))|0;\n       _memset(($8|0),48,($367|0))|0;\n       $$0463588 = $364;\n       while(1) {\n        $368 = ((($$0463588)) + -1|0);\n        $369 = ($368>>>0)>($8>>>0);\n        if ($369) {\n         $$0463588 = $368;\n        } else {\n         $$0463$lcssa = $368;\n         break;\n        }\n       }\n      } else {\n       $$0463$lcssa = $364;\n      }\n      $370 = ($$4478594|0)<(9);\n      $371 = $370 ? $$4478594 : 9;\n      _out($0,$$0463$lcssa,$371);\n      $372 = ((($$6494593)) + 4|0);\n      $373 = (($$4478594) + -9)|0;\n      $374 = ($372>>>0)<($$9507$lcssa>>>0);\n      $375 = ($$4478594|0)>(9);\n      $376 = $374 & $375;\n      if ($376) {\n       $$4478594 = $373;$$6494593 = $372;\n      } else {\n       $$4478$lcssa = $373;\n       break;\n      }\n     }\n    } else {\n     $$4478$lcssa = $$3477;\n    }\n    $377 = (($$4478$lcssa) + 9)|0;\n    _pad_683($0,48,$377,9,0);\n   } else {\n    $378 = ((($$9)) + 4|0);\n    $spec$select557 = $$lcssa583 ? $$9507$lcssa : $378;\n    $379 = ($$9>>>0)<($spec$select557>>>0);\n    $380 = ($$3477|0)>(-1);\n    $381 = $379 & $380;\n    if ($381) {\n     $382 = ((($8)) + 9|0);\n     $383 = $4 & 8;\n     $384 = ($383|0)==(0);\n     $385 = $382;\n     $386 = (0 - ($9))|0;\n     $387 = ((($8)) + 8|0);\n     $$5609 = $$3477;$$7495608 = $$9;\n     while(1) {\n      $388 = HEAP32[$$7495608>>2]|0;\n      $389 = (_fmt_u($388,0,$382)|0);\n      $390 = ($389|0)==($382|0);\n      if ($390) {\n       HEAP8[$387>>0] = 48;\n       $$0 = $387;\n      } else {\n       $$0 = $389;\n      }\n      $391 = ($$7495608|0)==($$9|0);\n      do {\n       if ($391) {\n        $395 = ((($$0)) + 1|0);\n        _out($0,$$0,1);\n        $396 = ($$5609|0)<(1);\n        $or$cond559 = $384 & $396;\n        if ($or$cond559) {\n         $$2 = $395;\n         break;\n        }\n        _out($0,18445,1);\n        $$2 = $395;\n       } else {\n        $392 = ($$0>>>0)>($8>>>0);\n        if (!($392)) {\n         $$2 = $$0;\n         break;\n        }\n        $scevgep707 = (($$0) + ($386)|0);\n        $scevgep707708 = $scevgep707;\n        _memset(($8|0),48,($scevgep707708|0))|0;\n        $$1604 = $$0;\n        while(1) {\n         $393 = ((($$1604)) + -1|0);\n         $394 = ($393>>>0)>($8>>>0);\n         if ($394) {\n          $$1604 = $393;\n         } else {\n          $$2 = $393;\n          break;\n         }\n        }\n       }\n      } while(0);\n      $397 = $$2;\n      $398 = (($385) - ($397))|0;\n      $399 = ($$5609|0)>($398|0);\n      $400 = $399 ? $398 : $$5609;\n      _out($0,$$2,$400);\n      $401 = (($$5609) - ($398))|0;\n      $402 = ((($$7495608)) + 4|0);\n      $403 = ($402>>>0)<($spec$select557>>>0);\n      $404 = ($401|0)>(-1);\n      $405 = $403 & $404;\n      if ($405) {\n       $$5609 = $401;$$7495608 = $402;\n      } else {\n       $$5$lcssa = $401;\n       break;\n      }\n     }\n    } else {\n     $$5$lcssa = $$3477;\n    }\n    $406 = (($$5$lcssa) + 18)|0;\n    _pad_683($0,48,$406,18,0);\n    $407 = $11;\n    $408 = $$2515;\n    $409 = (($407) - ($408))|0;\n    _out($0,$$2515,$409);\n   }\n   $410 = $4 ^ 8192;\n   _pad_683($0,32,$2,$339,$410);\n   $$sink755 = $339;\n  }\n } while(0);\n $411 = ($$sink755|0)<($2|0);\n $$560 = $411 ? $2 : $$sink755;\n STACKTOP = sp;return ($$560|0);\n}\nfunction ___DOUBLE_BITS_684($0) {\n $0 = +$0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAPF64[tempDoublePtr>>3] = $0;$1 = HEAP32[tempDoublePtr>>2]|0;\n $2 = HEAP32[tempDoublePtr+4>>2]|0;\n tempRet0 = ($2);\n return ($1|0);\n}\nfunction _frexpl($0,$1) {\n $0 = +$0;\n $1 = $1|0;\n var $2 = 0.0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = (+_frexp($0,$1));\n return (+$2);\n}\nfunction _frexp($0,$1) {\n $0 = +$0;\n $1 = $1|0;\n var $$0 = 0.0, $$016 = 0.0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0.0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0.0, $9 = 0.0, $storemerge = 0, $trunc$clear = 0, label = 0;\n var sp = 0;\n sp = STACKTOP;\n HEAPF64[tempDoublePtr>>3] = $0;$2 = HEAP32[tempDoublePtr>>2]|0;\n $3 = HEAP32[tempDoublePtr+4>>2]|0;\n $4 = (_bitshift64Lshr(($2|0),($3|0),52)|0);\n $5 = tempRet0;\n $6 = $4&65535;\n $trunc$clear = $6 & 2047;\n switch ($trunc$clear<<16>>16) {\n case 0:  {\n  $7 = $0 != 0.0;\n  if ($7) {\n   $8 = $0 * 1.8446744073709552E+19;\n   $9 = (+_frexp($8,$1));\n   $10 = HEAP32[$1>>2]|0;\n   $11 = (($10) + -64)|0;\n   $$016 = $9;$storemerge = $11;\n  } else {\n   $$016 = $0;$storemerge = 0;\n  }\n  HEAP32[$1>>2] = $storemerge;\n  $$0 = $$016;\n  break;\n }\n case 2047:  {\n  $$0 = $0;\n  break;\n }\n default: {\n  $12 = $4 & 2047;\n  $13 = (($12) + -1022)|0;\n  HEAP32[$1>>2] = $13;\n  $14 = $3 & -2146435073;\n  $15 = $14 | 1071644672;\n  HEAP32[tempDoublePtr>>2] = $2;HEAP32[tempDoublePtr+4>>2] = $15;$16 = +HEAPF64[tempDoublePtr>>3];\n  $$0 = $16;\n }\n }\n return (+$$0);\n}\nfunction _wcrtomb($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0;\n var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($0|0)==(0|0);\n do {\n  if ($3) {\n   $$0 = 1;\n  } else {\n   $4 = ($1>>>0)<(128);\n   if ($4) {\n    $5 = $1&255;\n    HEAP8[$0>>0] = $5;\n    $$0 = 1;\n    break;\n   }\n   $6 = (___pthread_self_430()|0);\n   $7 = ((($6)) + 188|0);\n   $8 = HEAP32[$7>>2]|0;\n   $9 = HEAP32[$8>>2]|0;\n   $10 = ($9|0)==(0|0);\n   if ($10) {\n    $11 = $1 & -128;\n    $12 = ($11|0)==(57216);\n    if ($12) {\n     $14 = $1&255;\n     HEAP8[$0>>0] = $14;\n     $$0 = 1;\n     break;\n    } else {\n     $13 = (___errno_location()|0);\n     HEAP32[$13>>2] = 84;\n     $$0 = -1;\n     break;\n    }\n   }\n   $15 = ($1>>>0)<(2048);\n   if ($15) {\n    $16 = $1 >>> 6;\n    $17 = $16 | 192;\n    $18 = $17&255;\n    $19 = ((($0)) + 1|0);\n    HEAP8[$0>>0] = $18;\n    $20 = $1 & 63;\n    $21 = $20 | 128;\n    $22 = $21&255;\n    HEAP8[$19>>0] = $22;\n    $$0 = 2;\n    break;\n   }\n   $23 = ($1>>>0)<(55296);\n   $24 = $1 & -8192;\n   $25 = ($24|0)==(57344);\n   $or$cond = $23 | $25;\n   if ($or$cond) {\n    $26 = $1 >>> 12;\n    $27 = $26 | 224;\n    $28 = $27&255;\n    $29 = ((($0)) + 1|0);\n    HEAP8[$0>>0] = $28;\n    $30 = $1 >>> 6;\n    $31 = $30 & 63;\n    $32 = $31 | 128;\n    $33 = $32&255;\n    $34 = ((($0)) + 2|0);\n    HEAP8[$29>>0] = $33;\n    $35 = $1 & 63;\n    $36 = $35 | 128;\n    $37 = $36&255;\n    HEAP8[$34>>0] = $37;\n    $$0 = 3;\n    break;\n   }\n   $38 = (($1) + -65536)|0;\n   $39 = ($38>>>0)<(1048576);\n   if ($39) {\n    $40 = $1 >>> 18;\n    $41 = $40 | 240;\n    $42 = $41&255;\n    $43 = ((($0)) + 1|0);\n    HEAP8[$0>>0] = $42;\n    $44 = $1 >>> 12;\n    $45 = $44 & 63;\n    $46 = $45 | 128;\n    $47 = $46&255;\n    $48 = ((($0)) + 2|0);\n    HEAP8[$43>>0] = $47;\n    $49 = $1 >>> 6;\n    $50 = $49 & 63;\n    $51 = $50 | 128;\n    $52 = $51&255;\n    $53 = ((($0)) + 3|0);\n    HEAP8[$48>>0] = $52;\n    $54 = $1 & 63;\n    $55 = $54 | 128;\n    $56 = $55&255;\n    HEAP8[$53>>0] = $56;\n    $$0 = 4;\n    break;\n   } else {\n    $57 = (___errno_location()|0);\n    HEAP32[$57>>2] = 84;\n    $$0 = -1;\n    break;\n   }\n  }\n } while(0);\n return ($$0|0);\n}\nfunction ___pthread_self_430() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (_pthread_self()|0);\n return ($0|0);\n}\nfunction _pthread_self() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (3196|0);\n}\nfunction ___pthread_self_105() {\n var $0 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (_pthread_self()|0);\n return ($0|0);\n}\nfunction ___strerror_l($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$012$lcssa = 0, $$01214 = 0, $$016 = 0, $$113 = 0, $$115 = 0, $$115$ph = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $$016 = 0;\n while(1) {\n  $2 = (18447 + ($$016)|0);\n  $3 = HEAP8[$2>>0]|0;\n  $4 = $3&255;\n  $5 = ($4|0)==($0|0);\n  if ($5) {\n   label = 4;\n   break;\n  }\n  $6 = (($$016) + 1)|0;\n  $7 = ($6|0)==(87);\n  if ($7) {\n   $$115$ph = 87;\n   label = 5;\n   break;\n  } else {\n   $$016 = $6;\n  }\n }\n if ((label|0) == 4) {\n  $8 = ($$016|0)==(0);\n  if ($8) {\n   $$012$lcssa = 18535;\n  } else {\n   $$115$ph = $$016;\n   label = 5;\n  }\n }\n if ((label|0) == 5) {\n  $$01214 = 18535;$$115 = $$115$ph;\n  while(1) {\n   $$113 = $$01214;\n   while(1) {\n    $9 = HEAP8[$$113>>0]|0;\n    $10 = ($9<<24>>24)==(0);\n    $11 = ((($$113)) + 1|0);\n    if ($10) {\n     break;\n    } else {\n     $$113 = $11;\n    }\n   }\n   $12 = (($$115) + -1)|0;\n   $13 = ($12|0)==(0);\n   if ($13) {\n    $$012$lcssa = $11;\n    break;\n   } else {\n    $$01214 = $11;$$115 = $12;\n   }\n  }\n }\n $14 = ((($1)) + 20|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = (___lctrans($$012$lcssa,$15)|0);\n return ($16|0);\n}\nfunction ___lctrans($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = (___lctrans_impl($0,$1)|0);\n return ($2|0);\n}\nfunction ___lctrans_impl($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$0 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = ($1|0)==(0|0);\n if ($2) {\n  $$0 = 0;\n } else {\n  $3 = HEAP32[$1>>2]|0;\n  $4 = ((($1)) + 4|0);\n  $5 = HEAP32[$4>>2]|0;\n  $6 = (___mo_lookup($3,$5,$0)|0);\n  $$0 = $6;\n }\n $7 = ($$0|0)==(0|0);\n $8 = $7 ? $0 : $$0;\n return ($8|0);\n}\nfunction ___mo_lookup($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$090 = 0, $$094 = 0, $$191 = 0, $$195 = 0, $$4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0;\n var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0;\n var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0;\n var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond102 = 0, $or$cond104 = 0, $spec$select = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = HEAP32[$0>>2]|0;\n $4 = (($3) + 1794895138)|0;\n $5 = ((($0)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (_swapc($6,$4)|0);\n $8 = ((($0)) + 12|0);\n $9 = HEAP32[$8>>2]|0;\n $10 = (_swapc($9,$4)|0);\n $11 = ((($0)) + 16|0);\n $12 = HEAP32[$11>>2]|0;\n $13 = (_swapc($12,$4)|0);\n $14 = $1 >>> 2;\n $15 = ($7>>>0)<($14>>>0);\n L1: do {\n  if ($15) {\n   $16 = $7 << 2;\n   $17 = (($1) - ($16))|0;\n   $18 = ($10>>>0)<($17>>>0);\n   $19 = ($13>>>0)<($17>>>0);\n   $or$cond = $18 & $19;\n   if ($or$cond) {\n    $20 = $13 | $10;\n    $21 = $20 & 3;\n    $22 = ($21|0)==(0);\n    if ($22) {\n     $23 = $10 >>> 2;\n     $24 = $13 >>> 2;\n     $$090 = 0;$$094 = $7;\n     while(1) {\n      $25 = $$094 >>> 1;\n      $26 = (($$090) + ($25))|0;\n      $27 = $26 << 1;\n      $28 = (($27) + ($23))|0;\n      $29 = (($0) + ($28<<2)|0);\n      $30 = HEAP32[$29>>2]|0;\n      $31 = (_swapc($30,$4)|0);\n      $32 = (($28) + 1)|0;\n      $33 = (($0) + ($32<<2)|0);\n      $34 = HEAP32[$33>>2]|0;\n      $35 = (_swapc($34,$4)|0);\n      $36 = ($35>>>0)<($1>>>0);\n      $37 = (($1) - ($35))|0;\n      $38 = ($31>>>0)<($37>>>0);\n      $or$cond102 = $36 & $38;\n      if (!($or$cond102)) {\n       $$4 = 0;\n       break L1;\n      }\n      $39 = (($35) + ($31))|0;\n      $40 = (($0) + ($39)|0);\n      $41 = HEAP8[$40>>0]|0;\n      $42 = ($41<<24>>24)==(0);\n      if (!($42)) {\n       $$4 = 0;\n       break L1;\n      }\n      $43 = (($0) + ($35)|0);\n      $44 = (_strcmp($2,$43)|0);\n      $45 = ($44|0)==(0);\n      if ($45) {\n       break;\n      }\n      $62 = ($$094|0)==(1);\n      $63 = ($44|0)<(0);\n      if ($62) {\n       $$4 = 0;\n       break L1;\n      }\n      $$191 = $63 ? $$090 : $26;\n      $64 = (($$094) - ($25))|0;\n      $$195 = $63 ? $25 : $64;\n      $$090 = $$191;$$094 = $$195;\n     }\n     $46 = (($27) + ($24))|0;\n     $47 = (($0) + ($46<<2)|0);\n     $48 = HEAP32[$47>>2]|0;\n     $49 = (_swapc($48,$4)|0);\n     $50 = (($46) + 1)|0;\n     $51 = (($0) + ($50<<2)|0);\n     $52 = HEAP32[$51>>2]|0;\n     $53 = (_swapc($52,$4)|0);\n     $54 = ($53>>>0)<($1>>>0);\n     $55 = (($1) - ($53))|0;\n     $56 = ($49>>>0)<($55>>>0);\n     $or$cond104 = $54 & $56;\n     if ($or$cond104) {\n      $57 = (($0) + ($53)|0);\n      $58 = (($53) + ($49))|0;\n      $59 = (($0) + ($58)|0);\n      $60 = HEAP8[$59>>0]|0;\n      $61 = ($60<<24>>24)==(0);\n      $spec$select = $61 ? $57 : 0;\n      $$4 = $spec$select;\n     } else {\n      $$4 = 0;\n     }\n    } else {\n     $$4 = 0;\n    }\n   } else {\n    $$4 = 0;\n   }\n  } else {\n   $$4 = 0;\n  }\n } while(0);\n return ($$4|0);\n}\nfunction _swapc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $spec$select = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = ($1|0)==(0);\n $3 = (_llvm_bswap_i32(($0|0))|0);\n $spec$select = $2 ? $0 : $3;\n return ($spec$select|0);\n}\nfunction ___fwritex($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$03846 = 0, $$042 = 0, $$1 = 0, $$139 = 0, $$141 = 0, $$143 = 0, $$pre = 0, $$pre48 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0;\n var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, $or$cond = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ((($2)) + 16|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ($4|0)==(0|0);\n if ($5) {\n  $7 = (___towrite($2)|0);\n  $8 = ($7|0)==(0);\n  if ($8) {\n   $$pre = HEAP32[$3>>2]|0;\n   $12 = $$pre;\n   label = 5;\n  } else {\n   $$1 = 0;\n  }\n } else {\n  $6 = $4;\n  $12 = $6;\n  label = 5;\n }\n L5: do {\n  if ((label|0) == 5) {\n   $9 = ((($2)) + 20|0);\n   $10 = HEAP32[$9>>2]|0;\n   $11 = (($12) - ($10))|0;\n   $13 = ($11>>>0)<($1>>>0);\n   $14 = $10;\n   if ($13) {\n    $15 = ((($2)) + 36|0);\n    $16 = HEAP32[$15>>2]|0;\n    $17 = (FUNCTION_TABLE_iiii[$16 & 255]($2,$0,$1)|0);\n    $$1 = $17;\n    break;\n   }\n   $18 = ((($2)) + 75|0);\n   $19 = HEAP8[$18>>0]|0;\n   $20 = ($19<<24>>24)<(0);\n   $21 = ($1|0)==(0);\n   $or$cond = $20 | $21;\n   L10: do {\n    if ($or$cond) {\n     $$139 = 0;$$141 = $0;$$143 = $1;$32 = $14;\n    } else {\n     $$03846 = $1;\n     while(1) {\n      $23 = (($$03846) + -1)|0;\n      $24 = (($0) + ($23)|0);\n      $25 = HEAP8[$24>>0]|0;\n      $26 = ($25<<24>>24)==(10);\n      if ($26) {\n       break;\n      }\n      $22 = ($23|0)==(0);\n      if ($22) {\n       $$139 = 0;$$141 = $0;$$143 = $1;$32 = $14;\n       break L10;\n      } else {\n       $$03846 = $23;\n      }\n     }\n     $27 = ((($2)) + 36|0);\n     $28 = HEAP32[$27>>2]|0;\n     $29 = (FUNCTION_TABLE_iiii[$28 & 255]($2,$0,$$03846)|0);\n     $30 = ($29>>>0)<($$03846>>>0);\n     if ($30) {\n      $$1 = $29;\n      break L5;\n     }\n     $31 = (($0) + ($$03846)|0);\n     $$042 = (($1) - ($$03846))|0;\n     $$pre48 = HEAP32[$9>>2]|0;\n     $$139 = $$03846;$$141 = $31;$$143 = $$042;$32 = $$pre48;\n    }\n   } while(0);\n   (_memcpy(($32|0),($$141|0),($$143|0))|0);\n   $33 = HEAP32[$9>>2]|0;\n   $34 = (($33) + ($$143)|0);\n   HEAP32[$9>>2] = $34;\n   $35 = (($$139) + ($$143))|0;\n   $$1 = $35;\n  }\n } while(0);\n return ($$1|0);\n}\nfunction ___towrite($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0;\n var $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 74|0);\n $2 = HEAP8[$1>>0]|0;\n $3 = $2 << 24 >> 24;\n $4 = (($3) + 255)|0;\n $5 = $4 | $3;\n $6 = $5&255;\n HEAP8[$1>>0] = $6;\n $7 = HEAP32[$0>>2]|0;\n $8 = $7 & 8;\n $9 = ($8|0)==(0);\n if ($9) {\n  $11 = ((($0)) + 8|0);\n  HEAP32[$11>>2] = 0;\n  $12 = ((($0)) + 4|0);\n  HEAP32[$12>>2] = 0;\n  $13 = ((($0)) + 44|0);\n  $14 = HEAP32[$13>>2]|0;\n  $15 = ((($0)) + 28|0);\n  HEAP32[$15>>2] = $14;\n  $16 = ((($0)) + 20|0);\n  HEAP32[$16>>2] = $14;\n  $17 = $14;\n  $18 = ((($0)) + 48|0);\n  $19 = HEAP32[$18>>2]|0;\n  $20 = (($17) + ($19)|0);\n  $21 = ((($0)) + 16|0);\n  HEAP32[$21>>2] = $20;\n  $$0 = 0;\n } else {\n  $10 = $7 | 32;\n  HEAP32[$0>>2] = $10;\n  $$0 = -1;\n }\n return ($$0|0);\n}\nfunction _strlen($0) {\n $0 = $0|0;\n var $$0 = 0, $$014 = 0, $$015$lcssa = 0, $$01518 = 0, $$1$lcssa = 0, $$pn = 0, $$pn29 = 0, $$pre = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0;\n var $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = $0;\n $2 = $1 & 3;\n $3 = ($2|0)==(0);\n L1: do {\n  if ($3) {\n   $$015$lcssa = $0;\n   label = 5;\n  } else {\n   $$01518 = $0;$22 = $1;\n   while(1) {\n    $4 = HEAP8[$$01518>>0]|0;\n    $5 = ($4<<24>>24)==(0);\n    if ($5) {\n     $$pn = $22;\n     break L1;\n    }\n    $6 = ((($$01518)) + 1|0);\n    $7 = $6;\n    $8 = $7 & 3;\n    $9 = ($8|0)==(0);\n    if ($9) {\n     $$015$lcssa = $6;\n     label = 5;\n     break;\n    } else {\n     $$01518 = $6;$22 = $7;\n    }\n   }\n  }\n } while(0);\n if ((label|0) == 5) {\n  $$0 = $$015$lcssa;\n  while(1) {\n   $10 = HEAP32[$$0>>2]|0;\n   $11 = (($10) + -16843009)|0;\n   $12 = $10 & -2139062144;\n   $13 = $12 ^ -2139062144;\n   $14 = $13 & $11;\n   $15 = ($14|0)==(0);\n   $16 = ((($$0)) + 4|0);\n   if ($15) {\n    $$0 = $16;\n   } else {\n    break;\n   }\n  }\n  $17 = $10&255;\n  $18 = ($17<<24>>24)==(0);\n  if ($18) {\n   $$1$lcssa = $$0;\n  } else {\n   $$pn29 = $$0;\n   while(1) {\n    $19 = ((($$pn29)) + 1|0);\n    $$pre = HEAP8[$19>>0]|0;\n    $20 = ($$pre<<24>>24)==(0);\n    if ($20) {\n     $$1$lcssa = $19;\n     break;\n    } else {\n     $$pn29 = $19;\n    }\n   }\n  }\n  $21 = $$1$lcssa;\n  $$pn = $21;\n }\n $$014 = (($$pn) - ($1))|0;\n return ($$014|0);\n}\nfunction ___strdup($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (_strlen($0)|0);\n $2 = (($1) + 1)|0;\n $3 = (_malloc($2)|0);\n $4 = ($3|0)==(0|0);\n if ($4) {\n  $$0 = 0;\n } else {\n  $5 = (_memcpy(($3|0),($0|0),($2|0))|0);\n  $$0 = $5;\n }\n return ($$0|0);\n}\nfunction ___overflow($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$0 = 0, $$pre = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $2 = sp;\n $3 = $1&255;\n HEAP8[$2>>0] = $3;\n $4 = ((($0)) + 16|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ($5|0)==(0|0);\n if ($6) {\n  $7 = (___towrite($0)|0);\n  $8 = ($7|0)==(0);\n  if ($8) {\n   $$pre = HEAP32[$4>>2]|0;\n   $12 = $$pre;\n   label = 4;\n  } else {\n   $$0 = -1;\n  }\n } else {\n  $12 = $5;\n  label = 4;\n }\n do {\n  if ((label|0) == 4) {\n   $9 = ((($0)) + 20|0);\n   $10 = HEAP32[$9>>2]|0;\n   $11 = ($10>>>0)<($12>>>0);\n   if ($11) {\n    $13 = $1 & 255;\n    $14 = ((($0)) + 75|0);\n    $15 = HEAP8[$14>>0]|0;\n    $16 = $15 << 24 >> 24;\n    $17 = ($13|0)==($16|0);\n    if (!($17)) {\n     $18 = ((($10)) + 1|0);\n     HEAP32[$9>>2] = $18;\n     HEAP8[$10>>0] = $3;\n     $$0 = $13;\n     break;\n    }\n   }\n   $19 = ((($0)) + 36|0);\n   $20 = HEAP32[$19>>2]|0;\n   $21 = (FUNCTION_TABLE_iiii[$20 & 255]($0,$2,1)|0);\n   $22 = ($21|0)==(1);\n   if ($22) {\n    $23 = HEAP8[$2>>0]|0;\n    $24 = $23&255;\n    $$0 = $24;\n   } else {\n    $$0 = -1;\n   }\n  }\n } while(0);\n STACKTOP = sp;return ($$0|0);\n}\nfunction ___ofl_lock() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n ___lock((21856|0));\n return (21864|0);\n}\nfunction ___ofl_unlock() {\n var label = 0, sp = 0;\n sp = STACKTOP;\n ___unlock((21856|0));\n return;\n}\nfunction _fflush($0) {\n $0 = $0|0;\n var $$0 = 0, $$023 = 0, $$02325 = 0, $$02327 = 0, $$024$lcssa = 0, $$02426 = 0, $$1 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $phitmp = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0|0)==(0|0);\n do {\n  if ($1) {\n   $8 = HEAP32[798]|0;\n   $9 = ($8|0)==(0|0);\n   if ($9) {\n    $29 = 0;\n   } else {\n    $10 = HEAP32[798]|0;\n    $11 = (_fflush($10)|0);\n    $29 = $11;\n   }\n   $12 = (___ofl_lock()|0);\n   $$02325 = HEAP32[$12>>2]|0;\n   $13 = ($$02325|0)==(0|0);\n   if ($13) {\n    $$024$lcssa = $29;\n   } else {\n    $$02327 = $$02325;$$02426 = $29;\n    while(1) {\n     $14 = ((($$02327)) + 76|0);\n     $15 = HEAP32[$14>>2]|0;\n     $16 = ($15|0)>(-1);\n     if ($16) {\n      $17 = (___lockfile($$02327)|0);\n      $26 = $17;\n     } else {\n      $26 = 0;\n     }\n     $18 = ((($$02327)) + 20|0);\n     $19 = HEAP32[$18>>2]|0;\n     $20 = ((($$02327)) + 28|0);\n     $21 = HEAP32[$20>>2]|0;\n     $22 = ($19>>>0)>($21>>>0);\n     if ($22) {\n      $23 = (___fflush_unlocked($$02327)|0);\n      $24 = $23 | $$02426;\n      $$1 = $24;\n     } else {\n      $$1 = $$02426;\n     }\n     $25 = ($26|0)==(0);\n     if (!($25)) {\n      ___unlockfile($$02327);\n     }\n     $27 = ((($$02327)) + 56|0);\n     $$023 = HEAP32[$27>>2]|0;\n     $28 = ($$023|0)==(0|0);\n     if ($28) {\n      $$024$lcssa = $$1;\n      break;\n     } else {\n      $$02327 = $$023;$$02426 = $$1;\n     }\n    }\n   }\n   ___ofl_unlock();\n   $$0 = $$024$lcssa;\n  } else {\n   $2 = ((($0)) + 76|0);\n   $3 = HEAP32[$2>>2]|0;\n   $4 = ($3|0)>(-1);\n   if (!($4)) {\n    $5 = (___fflush_unlocked($0)|0);\n    $$0 = $5;\n    break;\n   }\n   $6 = (___lockfile($0)|0);\n   $phitmp = ($6|0)==(0);\n   $7 = (___fflush_unlocked($0)|0);\n   if ($phitmp) {\n    $$0 = $7;\n   } else {\n    ___unlockfile($0);\n    $$0 = $7;\n   }\n  }\n } while(0);\n return ($$0|0);\n}\nfunction ___fflush_unlocked($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0;\n var $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 20|0);\n $2 = HEAP32[$1>>2]|0;\n $3 = ((($0)) + 28|0);\n $4 = HEAP32[$3>>2]|0;\n $5 = ($2>>>0)>($4>>>0);\n if ($5) {\n  $6 = ((($0)) + 36|0);\n  $7 = HEAP32[$6>>2]|0;\n  (FUNCTION_TABLE_iiii[$7 & 255]($0,0,0)|0);\n  $8 = HEAP32[$1>>2]|0;\n  $9 = ($8|0)==(0|0);\n  if ($9) {\n   $$0 = -1;\n  } else {\n   label = 3;\n  }\n } else {\n  label = 3;\n }\n if ((label|0) == 3) {\n  $10 = ((($0)) + 4|0);\n  $11 = HEAP32[$10>>2]|0;\n  $12 = ((($0)) + 8|0);\n  $13 = HEAP32[$12>>2]|0;\n  $14 = ($11>>>0)<($13>>>0);\n  if ($14) {\n   $15 = $11;\n   $16 = $13;\n   $17 = (($15) - ($16))|0;\n   $18 = ((($0)) + 40|0);\n   $19 = HEAP32[$18>>2]|0;\n   (FUNCTION_TABLE_iiii[$19 & 255]($0,$17,1)|0);\n  }\n  $20 = ((($0)) + 16|0);\n  HEAP32[$20>>2] = 0;\n  HEAP32[$3>>2] = 0;\n  HEAP32[$1>>2] = 0;\n  HEAP32[$12>>2] = 0;\n  HEAP32[$10>>2] = 0;\n  $$0 = 0;\n }\n return ($$0|0);\n}\nfunction _fputc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = ((($1)) + 76|0);\n $3 = HEAP32[$2>>2]|0;\n $4 = ($3|0)<(0);\n if ($4) {\n  label = 3;\n } else {\n  $5 = (___lockfile($1)|0);\n  $6 = ($5|0)==(0);\n  if ($6) {\n   label = 3;\n  } else {\n   $20 = $0&255;\n   $21 = $0 & 255;\n   $22 = ((($1)) + 75|0);\n   $23 = HEAP8[$22>>0]|0;\n   $24 = $23 << 24 >> 24;\n   $25 = ($21|0)==($24|0);\n   if ($25) {\n    label = 10;\n   } else {\n    $26 = ((($1)) + 20|0);\n    $27 = HEAP32[$26>>2]|0;\n    $28 = ((($1)) + 16|0);\n    $29 = HEAP32[$28>>2]|0;\n    $30 = ($27>>>0)<($29>>>0);\n    if ($30) {\n     $31 = ((($27)) + 1|0);\n     HEAP32[$26>>2] = $31;\n     HEAP8[$27>>0] = $20;\n     $33 = $21;\n    } else {\n     label = 10;\n    }\n   }\n   if ((label|0) == 10) {\n    $32 = (___overflow($1,$0)|0);\n    $33 = $32;\n   }\n   ___unlockfile($1);\n   $$0 = $33;\n  }\n }\n do {\n  if ((label|0) == 3) {\n   $7 = $0&255;\n   $8 = $0 & 255;\n   $9 = ((($1)) + 75|0);\n   $10 = HEAP8[$9>>0]|0;\n   $11 = $10 << 24 >> 24;\n   $12 = ($8|0)==($11|0);\n   if (!($12)) {\n    $13 = ((($1)) + 20|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = ((($1)) + 16|0);\n    $16 = HEAP32[$15>>2]|0;\n    $17 = ($14>>>0)<($16>>>0);\n    if ($17) {\n     $18 = ((($14)) + 1|0);\n     HEAP32[$13>>2] = $18;\n     HEAP8[$14>>0] = $7;\n     $$0 = $8;\n     break;\n    }\n   }\n   $19 = (___overflow($1,$0)|0);\n   $$0 = $19;\n  }\n } while(0);\n return ($$0|0);\n}\nfunction __ZNSt3__217bad_function_callD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNSt3__217bad_function_callD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZNSt3__217bad_function_callD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNKSt3__217bad_function_call4whatEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (20339|0);\n}\nfunction __ZNSt3__214__shared_countD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNSt3__214__shared_countD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _llvm_trap();\n // unreachable;\n}\nfunction __ZNSt3__219__shared_weak_countD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _llvm_trap();\n // unreachable;\n}\nfunction __ZNKSt3__219__shared_weak_count13__get_deleterERKSt9type_info($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (0|0);\n}\nfunction __ZNSt3__219__shared_weak_count14__release_weakEv($0) {\n $0 = $0|0;\n var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 8|0);\n $2 = HEAP32[$1>>2]|0;\n $3 = ($2|0)==(0);\n if ($3) {\n  $4 = HEAP32[$0>>2]|0;\n  $5 = ((($4)) + 16|0);\n  $6 = HEAP32[$5>>2]|0;\n  FUNCTION_TABLE_vi[$6 & 511]($0);\n } else {\n  $7 = HEAP32[$1>>2]|0;\n  $8 = (($7) + -1)|0;\n  HEAP32[$1>>2] = $8;\n  $9 = ($7|0)==(0);\n  if ($9) {\n   $10 = HEAP32[$0>>2]|0;\n   $11 = ((($10)) + 16|0);\n   $12 = HEAP32[$11>>2]|0;\n   FUNCTION_TABLE_vi[$12 & 511]($0);\n  }\n }\n return;\n}\nfunction __ZNSt3__25mutex4lockEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (_pthread_mutex_lock(($0|0))|0);\n $2 = ($1|0)==(0);\n if ($2) {\n  return;\n } else {\n  __ZNSt3__220__throw_system_errorEiPKc($1,20445);\n  // unreachable;\n }\n}\nfunction __ZNSt3__25mutex6unlockEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n (_pthread_mutex_unlock(($0|0))|0);\n return;\n}\nfunction __Znwj($0) {\n $0 = $0|0;\n var $$lcssa = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $spec$store$select = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0|0)==(0);\n $spec$store$select = $1 ? 1 : $0;\n while(1) {\n  $2 = (_malloc($spec$store$select)|0);\n  $3 = ($2|0)==(0|0);\n  if (!($3)) {\n   $$lcssa = $2;\n   break;\n  }\n  $4 = (__ZSt15get_new_handlerv()|0);\n  $5 = ($4|0)==(0|0);\n  if ($5) {\n   $$lcssa = 0;\n   break;\n  }\n  FUNCTION_TABLE_v[$4 & 511]();\n }\n return ($$lcssa|0);\n}\nfunction __Znaj($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (__Znwj($0)|0);\n return ($1|0);\n}\nfunction __ZdlPv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _free($0);\n return;\n}\nfunction __ZdaPv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZdlPv($0);\n return;\n}\nfunction __ZNSt3__218__libcpp_refstringC2EPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $2 = (_strlen($1)|0);\n $3 = (($2) + 13)|0;\n $4 = (__Znwj($3)|0);\n HEAP32[$4>>2] = $2;\n $5 = ((($4)) + 4|0);\n HEAP32[$5>>2] = $2;\n $6 = ((($4)) + 8|0);\n HEAP32[$6>>2] = 0;\n $7 = (__ZNSt3__215__refstring_imp12_GLOBAL__N_113data_from_repEPNS1_9_Rep_baseE($4)|0);\n $8 = (($2) + 1)|0;\n _memcpy(($7|0),($1|0),($8|0))|0;\n HEAP32[$0>>2] = $7;\n return;\n}\nfunction __ZNSt3__215__refstring_imp12_GLOBAL__N_113data_from_repEPNS1_9_Rep_baseE($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 12|0);\n return ($1|0);\n}\nfunction __ZNSt11logic_errorC2EPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAP32[$0>>2] = (3620);\n $2 = ((($0)) + 4|0);\n __ZNSt3__218__libcpp_refstringC2EPKc($2,$1);\n return;\n}\nfunction __ZNKSt3__218__libcpp_refstring15__uses_refcountEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return 1;\n}\nfunction __ZNSt13runtime_errorC2EPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAP32[$0>>2] = (3640);\n $2 = ((($0)) + 4|0);\n __ZNSt3__218__libcpp_refstringC2EPKc($2,$1);\n return;\n}\nfunction __ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _abort();\n // unreachable;\n}\nfunction __ZNKSt3__221__basic_string_commonILb1EE20__throw_out_of_rangeEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _abort();\n // unreachable;\n}\nfunction __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 11|0);\n $2 = HEAP8[$1>>0]|0;\n $3 = ($2<<24>>24)<(0);\n if ($3) {\n  $4 = HEAP32[$0>>2]|0;\n  __ZdlPv($4);\n }\n return;\n}\nfunction __ZNSt3__211char_traitsIcE7compareEPKcS3_j($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($2|0)==(0);\n if ($3) {\n  $$0 = 0;\n } else {\n  $4 = (_memcmp($0,$1,$2)|0);\n  $$0 = $4;\n }\n return ($$0|0);\n}\nfunction __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$sroa$speculated = 0, $$sroa$speculated19 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var $or$cond = 0, $spec$select = 0, $spec$select31 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($0)) + 11|0);\n $6 = HEAP8[$5>>0]|0;\n $7 = ($6<<24>>24)<(0);\n if ($7) {\n  $8 = ((($0)) + 4|0);\n  $9 = HEAP32[$8>>2]|0;\n  $12 = $9;\n } else {\n  $10 = $6&255;\n  $12 = $10;\n }\n $11 = ($12>>>0)<($1>>>0);\n $13 = ($4|0)==(-1);\n $or$cond = $13 | $11;\n if ($or$cond) {\n  __ZNKSt3__221__basic_string_commonILb1EE20__throw_out_of_rangeEv($0);\n  // unreachable;\n }\n $14 = (($12) - ($1))|0;\n $15 = ($14>>>0)<($2>>>0);\n $$sroa$speculated = $15 ? $14 : $2;\n if ($7) {\n  $16 = HEAP32[$0>>2]|0;\n  $18 = $16;\n } else {\n  $18 = $0;\n }\n $17 = (($18) + ($1)|0);\n $19 = ($$sroa$speculated>>>0)>($4>>>0);\n $$sroa$speculated19 = $19 ? $4 : $$sroa$speculated;\n $20 = (__ZNSt3__211char_traitsIcE7compareEPKcS3_j($17,$3,$$sroa$speculated19)|0);\n $21 = ($20|0)==(0);\n if ($21) {\n  $22 = ($$sroa$speculated>>>0)<($4>>>0);\n  $spec$select = $19&1;\n  $spec$select31 = $22 ? -1 : $spec$select;\n  return ($spec$select31|0);\n } else {\n  return ($20|0);\n }\n return (0)|0;\n}\nfunction __ZNSt3__220__throw_system_errorEiPKc($0,$1) {\n $0 = $0|0;\n $1 = $1|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _abort();\n // unreachable;\n}\nfunction __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n _abort();\n // unreachable;\n}\nfunction __ZL25default_terminate_handlerv() {\n var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0;\n var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer10 = 0, $vararg_buffer3 = 0, $vararg_buffer7 = 0, $vararg_ptr1 = 0;\n var $vararg_ptr2 = 0, $vararg_ptr6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0);\n $vararg_buffer10 = sp + 32|0;\n $vararg_buffer7 = sp + 24|0;\n $vararg_buffer3 = sp + 16|0;\n $vararg_buffer = sp;\n $0 = sp + 36|0;\n $1 = (___cxa_get_globals_fast()|0);\n $2 = ($1|0)==(0|0);\n if (!($2)) {\n  $3 = HEAP32[$1>>2]|0;\n  $4 = ($3|0)==(0|0);\n  if (!($4)) {\n   $5 = ((($3)) + 80|0);\n   $6 = ((($3)) + 48|0);\n   $7 = $6;\n   $8 = $7;\n   $9 = HEAP32[$8>>2]|0;\n   $10 = (($7) + 4)|0;\n   $11 = $10;\n   $12 = HEAP32[$11>>2]|0;\n   $13 = $9 & -256;\n   $14 = ($13|0)==(1126902528);\n   $15 = ($12|0)==(1129074247);\n   $16 = $14 & $15;\n   if (!($16)) {\n    HEAP32[$vararg_buffer7>>2] = 20599;\n    _abort_message(20549,$vararg_buffer7);\n    // unreachable;\n   }\n   $17 = ($9|0)==(1126902529);\n   $18 = ($12|0)==(1129074247);\n   $19 = $17 & $18;\n   if ($19) {\n    $20 = ((($3)) + 44|0);\n    $21 = HEAP32[$20>>2]|0;\n    $22 = $21;\n   } else {\n    $22 = $5;\n   }\n   HEAP32[$0>>2] = $22;\n   $23 = HEAP32[$3>>2]|0;\n   $24 = ((($23)) + 4|0);\n   $25 = HEAP32[$24>>2]|0;\n   $26 = HEAP32[322]|0;\n   $27 = ((($26)) + 16|0);\n   $28 = HEAP32[$27>>2]|0;\n   $29 = (FUNCTION_TABLE_iiii[$28 & 255](1288,$23,$0)|0);\n   if ($29) {\n    $30 = HEAP32[$0>>2]|0;\n    $31 = HEAP32[$30>>2]|0;\n    $32 = ((($31)) + 8|0);\n    $33 = HEAP32[$32>>2]|0;\n    $34 = (FUNCTION_TABLE_ii[$33 & 255]($30)|0);\n    HEAP32[$vararg_buffer>>2] = 20599;\n    $vararg_ptr1 = ((($vararg_buffer)) + 4|0);\n    HEAP32[$vararg_ptr1>>2] = $25;\n    $vararg_ptr2 = ((($vararg_buffer)) + 8|0);\n    HEAP32[$vararg_ptr2>>2] = $34;\n    _abort_message(20463,$vararg_buffer);\n    // unreachable;\n   } else {\n    HEAP32[$vararg_buffer3>>2] = 20599;\n    $vararg_ptr6 = ((($vararg_buffer3)) + 4|0);\n    HEAP32[$vararg_ptr6>>2] = $25;\n    _abort_message(20508,$vararg_buffer3);\n    // unreachable;\n   }\n  }\n }\n _abort_message(20587,$vararg_buffer10);\n // unreachable;\n}\nfunction ___cxa_get_globals_fast() {\n var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n $0 = (_pthread_once((21868|0),(256|0))|0);\n $1 = ($0|0)==(0);\n if ($1) {\n  $2 = HEAP32[5468]|0;\n  $3 = (_pthread_getspecific(($2|0))|0);\n  STACKTOP = sp;return ($3|0);\n } else {\n  _abort_message(20738,$vararg_buffer);\n  // unreachable;\n }\n return (0)|0;\n}\nfunction _abort_message($0,$varargs) {\n $0 = $0|0;\n $varargs = $varargs|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $1 = sp;\n HEAP32[$1>>2] = $varargs;\n $2 = HEAP32[735]|0;\n (_vfprintf($2,$0,$1)|0);\n (_fputc(10,$2)|0);\n _abort();\n // unreachable;\n}\nfunction __ZN10__cxxabiv116__shim_type_infoD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZN10__cxxabiv117__class_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv116__shim_type_info5noop1Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNK10__cxxabiv116__shim_type_info5noop2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $$2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;\n var dest = 0, label = 0, sp = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $3 = sp;\n $4 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0);\n if ($4) {\n  $$2 = 1;\n } else {\n  $5 = ($1|0)==(0|0);\n  if ($5) {\n   $$2 = 0;\n  } else {\n   $6 = (___dynamic_cast($1,1312,1296,0)|0);\n   $7 = ($6|0)==(0|0);\n   if ($7) {\n    $$2 = 0;\n   } else {\n    $8 = ((($3)) + 4|0);\n    dest=$8; stop=dest+52|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));\n    HEAP32[$3>>2] = $6;\n    $9 = ((($3)) + 8|0);\n    HEAP32[$9>>2] = $0;\n    $10 = ((($3)) + 12|0);\n    HEAP32[$10>>2] = -1;\n    $11 = ((($3)) + 48|0);\n    HEAP32[$11>>2] = 1;\n    $12 = HEAP32[$6>>2]|0;\n    $13 = ((($12)) + 28|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = HEAP32[$2>>2]|0;\n    FUNCTION_TABLE_viiii[$14 & 255]($6,$3,$15,1);\n    $16 = ((($3)) + 24|0);\n    $17 = HEAP32[$16>>2]|0;\n    $18 = ($17|0)==(1);\n    if ($18) {\n     $19 = ((($3)) + 16|0);\n     $20 = HEAP32[$19>>2]|0;\n     HEAP32[$2>>2] = $20;\n     $$0 = 1;\n    } else {\n     $$0 = 0;\n    }\n    $$2 = $$0;\n   }\n  }\n }\n STACKTOP = sp;return ($$2|0);\n}\nfunction __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $6 = ((($1)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0);\n if ($8) {\n  __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4);\n }\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($1)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0);\n do {\n  if ($7) {\n   __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3);\n  } else {\n   $8 = HEAP32[$1>>2]|0;\n   $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0);\n   if ($9) {\n    $10 = ((($1)) + 16|0);\n    $11 = HEAP32[$10>>2]|0;\n    $12 = ($11|0)==($2|0);\n    if (!($12)) {\n     $13 = ((($1)) + 20|0);\n     $14 = HEAP32[$13>>2]|0;\n     $15 = ($14|0)==($2|0);\n     if (!($15)) {\n      $18 = ((($1)) + 32|0);\n      HEAP32[$18>>2] = $3;\n      HEAP32[$13>>2] = $2;\n      $19 = ((($1)) + 40|0);\n      $20 = HEAP32[$19>>2]|0;\n      $21 = (($20) + 1)|0;\n      HEAP32[$19>>2] = $21;\n      $22 = ((($1)) + 36|0);\n      $23 = HEAP32[$22>>2]|0;\n      $24 = ($23|0)==(1);\n      if ($24) {\n       $25 = ((($1)) + 24|0);\n       $26 = HEAP32[$25>>2]|0;\n       $27 = ($26|0)==(2);\n       if ($27) {\n        $28 = ((($1)) + 54|0);\n        HEAP8[$28>>0] = 1;\n       }\n      }\n      $29 = ((($1)) + 44|0);\n      HEAP32[$29>>2] = 4;\n      break;\n     }\n    }\n    $16 = ($3|0)==(1);\n    if ($16) {\n     $17 = ((($1)) + 32|0);\n     HEAP32[$17>>2] = 1;\n    }\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 8|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0);\n if ($6) {\n  __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3);\n }\n return;\n}\nfunction __ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = ($0|0)==($1|0);\n return ($3|0);\n}\nfunction __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 16|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ($5|0)==(0|0);\n do {\n  if ($6) {\n   HEAP32[$4>>2] = $2;\n   $7 = ((($1)) + 24|0);\n   HEAP32[$7>>2] = $3;\n   $8 = ((($1)) + 36|0);\n   HEAP32[$8>>2] = 1;\n  } else {\n   $9 = ($5|0)==($2|0);\n   if (!($9)) {\n    $13 = ((($1)) + 36|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = (($14) + 1)|0;\n    HEAP32[$13>>2] = $15;\n    $16 = ((($1)) + 24|0);\n    HEAP32[$16>>2] = 2;\n    $17 = ((($1)) + 54|0);\n    HEAP8[$17>>0] = 1;\n    break;\n   }\n   $10 = ((($1)) + 24|0);\n   $11 = HEAP32[$10>>2]|0;\n   $12 = ($11|0)==(2);\n   if ($12) {\n    HEAP32[$10>>2] = $3;\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 4|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = ($5|0)==($2|0);\n if ($6) {\n  $7 = ((($1)) + 28|0);\n  $8 = HEAP32[$7>>2]|0;\n  $9 = ($8|0)==(1);\n  if (!($9)) {\n   HEAP32[$7>>2] = $3;\n  }\n }\n return;\n}\nfunction __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0;\n var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond22 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($1)) + 53|0);\n HEAP8[$5>>0] = 1;\n $6 = ((($1)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = ($7|0)==($3|0);\n do {\n  if ($8) {\n   $9 = ((($1)) + 52|0);\n   HEAP8[$9>>0] = 1;\n   $10 = ((($1)) + 16|0);\n   $11 = HEAP32[$10>>2]|0;\n   $12 = ($11|0)==(0|0);\n   if ($12) {\n    HEAP32[$10>>2] = $2;\n    $13 = ((($1)) + 24|0);\n    HEAP32[$13>>2] = $4;\n    $14 = ((($1)) + 36|0);\n    HEAP32[$14>>2] = 1;\n    $15 = ((($1)) + 48|0);\n    $16 = HEAP32[$15>>2]|0;\n    $17 = ($16|0)==(1);\n    $18 = ($4|0)==(1);\n    $or$cond = $18 & $17;\n    if (!($or$cond)) {\n     break;\n    }\n    $19 = ((($1)) + 54|0);\n    HEAP8[$19>>0] = 1;\n    break;\n   }\n   $20 = ($11|0)==($2|0);\n   if (!($20)) {\n    $30 = ((($1)) + 36|0);\n    $31 = HEAP32[$30>>2]|0;\n    $32 = (($31) + 1)|0;\n    HEAP32[$30>>2] = $32;\n    $33 = ((($1)) + 54|0);\n    HEAP8[$33>>0] = 1;\n    break;\n   }\n   $21 = ((($1)) + 24|0);\n   $22 = HEAP32[$21>>2]|0;\n   $23 = ($22|0)==(2);\n   if ($23) {\n    HEAP32[$21>>2] = $4;\n    $28 = $4;\n   } else {\n    $28 = $22;\n   }\n   $24 = ((($1)) + 48|0);\n   $25 = HEAP32[$24>>2]|0;\n   $26 = ($25|0)==(1);\n   $27 = ($28|0)==(1);\n   $or$cond22 = $26 & $27;\n   if ($or$cond22) {\n    $29 = ((($1)) + 54|0);\n    HEAP8[$29>>0] = 1;\n   }\n  }\n } while(0);\n return;\n}\nfunction ___dynamic_cast($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond28 = 0, $or$cond30 = 0, $or$cond32 = 0, $spec$select = 0, $spec$select33 = 0, dest = 0, label = 0, sp = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $4 = sp;\n $5 = HEAP32[$0>>2]|0;\n $6 = ((($5)) + -8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (($0) + ($7)|0);\n $9 = ((($5)) + -4|0);\n $10 = HEAP32[$9>>2]|0;\n HEAP32[$4>>2] = $2;\n $11 = ((($4)) + 4|0);\n HEAP32[$11>>2] = $0;\n $12 = ((($4)) + 8|0);\n HEAP32[$12>>2] = $1;\n $13 = ((($4)) + 12|0);\n HEAP32[$13>>2] = $3;\n $14 = ((($4)) + 16|0);\n $15 = ((($4)) + 20|0);\n $16 = ((($4)) + 24|0);\n $17 = ((($4)) + 28|0);\n $18 = ((($4)) + 32|0);\n $19 = ((($4)) + 40|0);\n dest=$14; stop=dest+36|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));HEAP16[$14+36>>1]=0|0;HEAP8[$14+38>>0]=0|0;\n $20 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($10,$2,0)|0);\n L1: do {\n  if ($20) {\n   $21 = ((($4)) + 48|0);\n   HEAP32[$21>>2] = 1;\n   $22 = HEAP32[$10>>2]|0;\n   $23 = ((($22)) + 20|0);\n   $24 = HEAP32[$23>>2]|0;\n   FUNCTION_TABLE_viiiiii[$24 & 255]($10,$4,$8,$8,1,0);\n   $25 = HEAP32[$16>>2]|0;\n   $26 = ($25|0)==(1);\n   $spec$select = $26 ? $8 : 0;\n   $$0 = $spec$select;\n  } else {\n   $27 = ((($4)) + 36|0);\n   $28 = HEAP32[$10>>2]|0;\n   $29 = ((($28)) + 24|0);\n   $30 = HEAP32[$29>>2]|0;\n   FUNCTION_TABLE_viiiii[$30 & 255]($10,$4,$8,1,0);\n   $31 = HEAP32[$27>>2]|0;\n   switch ($31|0) {\n   case 0:  {\n    $32 = HEAP32[$19>>2]|0;\n    $33 = ($32|0)==(1);\n    $34 = HEAP32[$17>>2]|0;\n    $35 = ($34|0)==(1);\n    $or$cond = $33 & $35;\n    $36 = HEAP32[$18>>2]|0;\n    $37 = ($36|0)==(1);\n    $or$cond28 = $or$cond & $37;\n    $38 = HEAP32[$15>>2]|0;\n    $spec$select33 = $or$cond28 ? $38 : 0;\n    $$0 = $spec$select33;\n    break L1;\n    break;\n   }\n   case 1:  {\n    break;\n   }\n   default: {\n    $$0 = 0;\n    break L1;\n   }\n   }\n   $39 = HEAP32[$16>>2]|0;\n   $40 = ($39|0)==(1);\n   if (!($40)) {\n    $41 = HEAP32[$19>>2]|0;\n    $42 = ($41|0)==(0);\n    $43 = HEAP32[$17>>2]|0;\n    $44 = ($43|0)==(1);\n    $or$cond30 = $42 & $44;\n    $45 = HEAP32[$18>>2]|0;\n    $46 = ($45|0)==(1);\n    $or$cond32 = $or$cond30 & $46;\n    if (!($or$cond32)) {\n     $$0 = 0;\n     break;\n    }\n   }\n   $47 = HEAP32[$14>>2]|0;\n   $$0 = $47;\n  }\n } while(0);\n STACKTOP = sp;return ($$0|0);\n}\nfunction __ZN10__cxxabiv120__si_class_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $6 = ((($1)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0);\n if ($8) {\n  __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4);\n } else {\n  $9 = ((($0)) + 8|0);\n  $10 = HEAP32[$9>>2]|0;\n  $11 = HEAP32[$10>>2]|0;\n  $12 = ((($11)) + 20|0);\n  $13 = HEAP32[$12>>2]|0;\n  FUNCTION_TABLE_viiiiii[$13 & 255]($10,$1,$2,$3,$4,$5);\n }\n return;\n}\nfunction __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$037$off038 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0;\n var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($1)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0);\n do {\n  if ($7) {\n   __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3);\n  } else {\n   $8 = HEAP32[$1>>2]|0;\n   $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0);\n   if (!($9)) {\n    $44 = ((($0)) + 8|0);\n    $45 = HEAP32[$44>>2]|0;\n    $46 = HEAP32[$45>>2]|0;\n    $47 = ((($46)) + 24|0);\n    $48 = HEAP32[$47>>2]|0;\n    FUNCTION_TABLE_viiiii[$48 & 255]($45,$1,$2,$3,$4);\n    break;\n   }\n   $10 = ((($1)) + 16|0);\n   $11 = HEAP32[$10>>2]|0;\n   $12 = ($11|0)==($2|0);\n   if (!($12)) {\n    $13 = ((($1)) + 20|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = ($14|0)==($2|0);\n    if (!($15)) {\n     $18 = ((($1)) + 32|0);\n     HEAP32[$18>>2] = $3;\n     $19 = ((($1)) + 44|0);\n     $20 = HEAP32[$19>>2]|0;\n     $21 = ($20|0)==(4);\n     if ($21) {\n      break;\n     }\n     $22 = ((($1)) + 52|0);\n     HEAP8[$22>>0] = 0;\n     $23 = ((($1)) + 53|0);\n     HEAP8[$23>>0] = 0;\n     $24 = ((($0)) + 8|0);\n     $25 = HEAP32[$24>>2]|0;\n     $26 = HEAP32[$25>>2]|0;\n     $27 = ((($26)) + 20|0);\n     $28 = HEAP32[$27>>2]|0;\n     FUNCTION_TABLE_viiiiii[$28 & 255]($25,$1,$2,$2,1,$4);\n     $29 = HEAP8[$23>>0]|0;\n     $30 = ($29<<24>>24)==(0);\n     if ($30) {\n      $$037$off038 = 0;\n      label = 11;\n     } else {\n      $31 = HEAP8[$22>>0]|0;\n      $32 = ($31<<24>>24)==(0);\n      if ($32) {\n       $$037$off038 = 1;\n       label = 11;\n      } else {\n       label = 15;\n      }\n     }\n     do {\n      if ((label|0) == 11) {\n       HEAP32[$13>>2] = $2;\n       $33 = ((($1)) + 40|0);\n       $34 = HEAP32[$33>>2]|0;\n       $35 = (($34) + 1)|0;\n       HEAP32[$33>>2] = $35;\n       $36 = ((($1)) + 36|0);\n       $37 = HEAP32[$36>>2]|0;\n       $38 = ($37|0)==(1);\n       if ($38) {\n        $39 = ((($1)) + 24|0);\n        $40 = HEAP32[$39>>2]|0;\n        $41 = ($40|0)==(2);\n        if ($41) {\n         $42 = ((($1)) + 54|0);\n         HEAP8[$42>>0] = 1;\n         if ($$037$off038) {\n          label = 15;\n          break;\n         } else {\n          $43 = 4;\n          break;\n         }\n        }\n       }\n       if ($$037$off038) {\n        label = 15;\n       } else {\n        $43 = 4;\n       }\n      }\n     } while(0);\n     if ((label|0) == 15) {\n      $43 = 3;\n     }\n     HEAP32[$19>>2] = $43;\n     break;\n    }\n   }\n   $16 = ($3|0)==(1);\n   if ($16) {\n    $17 = ((($1)) + 32|0);\n    HEAP32[$17>>2] = 1;\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $10 = 0, $11 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 8|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0);\n if ($6) {\n  __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3);\n } else {\n  $7 = ((($0)) + 8|0);\n  $8 = HEAP32[$7>>2]|0;\n  $9 = HEAP32[$8>>2]|0;\n  $10 = ((($9)) + 28|0);\n  $11 = HEAP32[$10>>2]|0;\n  FUNCTION_TABLE_viiii[$11 & 255]($8,$1,$2,$3);\n }\n return;\n}\nfunction __ZNSt9type_infoD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZN10__cxxabiv112_GLOBAL__N_110construct_Ev() {\n var $0 = 0, $1 = 0, $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n $0 = (_pthread_key_create((21872|0),(257|0))|0);\n $1 = ($0|0)==(0);\n if ($1) {\n  STACKTOP = sp;return;\n } else {\n  _abort_message(20787,$vararg_buffer);\n  // unreachable;\n }\n}\nfunction __ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n _free($0);\n $1 = HEAP32[5468]|0;\n $2 = (_pthread_setspecific(($1|0),(0|0))|0);\n $3 = ($2|0)==(0);\n if ($3) {\n  STACKTOP = sp;return;\n } else {\n  _abort_message(20837,$vararg_buffer);\n  // unreachable;\n }\n}\nfunction __ZSt9terminatev() {\n var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = (___cxa_get_globals_fast()|0);\n $1 = ($0|0)==(0|0);\n if (!($1)) {\n  $2 = HEAP32[$0>>2]|0;\n  $3 = ($2|0)==(0|0);\n  if (!($3)) {\n   $4 = ((($2)) + 48|0);\n   $5 = $4;\n   $6 = $5;\n   $7 = HEAP32[$6>>2]|0;\n   $8 = (($5) + 4)|0;\n   $9 = $8;\n   $10 = HEAP32[$9>>2]|0;\n   $11 = $7 & -256;\n   $12 = ($11|0)==(1126902528);\n   $13 = ($10|0)==(1129074247);\n   $14 = $12 & $13;\n   if ($14) {\n    $15 = ((($2)) + 12|0);\n    $16 = HEAP32[$15>>2]|0;\n    __ZSt11__terminatePFvvE($16);\n    // unreachable;\n   }\n  }\n }\n $17 = (__ZSt13get_terminatev()|0);\n __ZSt11__terminatePFvvE($17);\n // unreachable;\n}\nfunction __ZSt11__terminatePFvvE($0) {\n $0 = $0|0;\n var $vararg_buffer = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $vararg_buffer = sp;\n FUNCTION_TABLE_v[$0 & 511]();\n _abort_message(20890,$vararg_buffer);\n // unreachable;\n}\nfunction __ZSt13get_terminatev() {\n var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP32[877]|0;\n $1 = (($0) + 0)|0;\n HEAP32[877] = $1;\n $2 = $0;\n return ($2|0);\n}\nfunction __ZNSt9exceptionD2Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZNSt9exceptionD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZdlPv($0);\n return;\n}\nfunction __ZNKSt9exception4whatEv($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return (20930|0);\n}\nfunction __ZNSt11logic_errorD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAP32[$0>>2] = (3620);\n $1 = ((($0)) + 4|0);\n __ZNSt3__218__libcpp_refstringD2Ev($1);\n return;\n}\nfunction __ZNSt11logic_errorD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZNSt11logic_errorD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNKSt11logic_error4whatEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 4|0);\n $2 = (__ZNKSt3__218__libcpp_refstring5c_strEv($1)|0);\n return ($2|0);\n}\nfunction __ZNKSt3__218__libcpp_refstring5c_strEv($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = HEAP32[$0>>2]|0;\n return ($1|0);\n}\nfunction __ZNSt3__218__libcpp_refstringD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = (__ZNKSt3__218__libcpp_refstring15__uses_refcountEv($0)|0);\n if ($1) {\n  $2 = HEAP32[$0>>2]|0;\n  $3 = (__ZNSt3__215__refstring_imp12_GLOBAL__N_113rep_from_dataEPKc_238($2)|0);\n  $4 = ((($3)) + 8|0);\n  $5 = HEAP32[$4>>2]|0;\n  $6 = (($5) + -1)|0;\n  HEAP32[$4>>2] = $6;\n  $7 = (($5) + -1)|0;\n  $8 = ($7|0)<(0);\n  if ($8) {\n   __ZdlPv($3);\n  }\n }\n return;\n}\nfunction __ZNSt3__215__refstring_imp12_GLOBAL__N_113rep_from_dataEPKc_238($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + -12|0);\n return ($1|0);\n}\nfunction __ZNSt13runtime_errorD2Ev($0) {\n $0 = $0|0;\n var $1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n HEAP32[$0>>2] = (3640);\n $1 = ((($0)) + 4|0);\n __ZNSt3__218__libcpp_refstringD2Ev($1);\n return;\n}\nfunction __ZNSt13runtime_errorD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZNSt13runtime_errorD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNKSt13runtime_error4whatEv($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ((($0)) + 4|0);\n $2 = (__ZNKSt3__218__libcpp_refstring5c_strEv($1)|0);\n return ($2|0);\n}\nfunction __ZNSt12length_errorD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZNSt11logic_errorD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZN10__cxxabiv123__fundamental_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $3 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0);\n return ($3|0);\n}\nfunction __ZN10__cxxabiv119__pointer_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $$4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0;\n var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0;\n var $6 = 0, $7 = 0, $8 = 0, $9 = 0, dest = 0, label = 0, sp = 0, stop = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0);\n $3 = sp;\n $4 = HEAP32[$2>>2]|0;\n $5 = HEAP32[$4>>2]|0;\n HEAP32[$2>>2] = $5;\n $6 = (__ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,0)|0);\n if ($6) {\n  $$4 = 1;\n } else {\n  $7 = ($1|0)==(0|0);\n  if ($7) {\n   $$4 = 0;\n  } else {\n   $8 = (___dynamic_cast($1,1312,1416,0)|0);\n   $9 = ($8|0)==(0|0);\n   if ($9) {\n    $$4 = 0;\n   } else {\n    $10 = ((($8)) + 8|0);\n    $11 = HEAP32[$10>>2]|0;\n    $12 = ((($0)) + 8|0);\n    $13 = HEAP32[$12>>2]|0;\n    $14 = $13 ^ -1;\n    $15 = $11 & $14;\n    $16 = ($15|0)==(0);\n    if ($16) {\n     $17 = ((($0)) + 12|0);\n     $18 = HEAP32[$17>>2]|0;\n     $19 = ((($8)) + 12|0);\n     $20 = HEAP32[$19>>2]|0;\n     $21 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($18,$20,0)|0);\n     if ($21) {\n      $$4 = 1;\n     } else {\n      $22 = HEAP32[$17>>2]|0;\n      $23 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($22,1448,0)|0);\n      if ($23) {\n       $$4 = 1;\n      } else {\n       $24 = HEAP32[$17>>2]|0;\n       $25 = ($24|0)==(0|0);\n       if ($25) {\n        $$4 = 0;\n       } else {\n        $26 = (___dynamic_cast($24,1312,1296,0)|0);\n        $27 = ($26|0)==(0|0);\n        if ($27) {\n         $$4 = 0;\n        } else {\n         $28 = HEAP32[$19>>2]|0;\n         $29 = ($28|0)==(0|0);\n         if ($29) {\n          $$4 = 0;\n         } else {\n          $30 = (___dynamic_cast($28,1312,1296,0)|0);\n          $31 = ($30|0)==(0|0);\n          if ($31) {\n           $$4 = 0;\n          } else {\n           $32 = ((($3)) + 4|0);\n           dest=$32; stop=dest+52|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));\n           HEAP32[$3>>2] = $30;\n           $33 = ((($3)) + 8|0);\n           HEAP32[$33>>2] = $26;\n           $34 = ((($3)) + 12|0);\n           HEAP32[$34>>2] = -1;\n           $35 = ((($3)) + 48|0);\n           HEAP32[$35>>2] = 1;\n           $36 = HEAP32[$30>>2]|0;\n           $37 = ((($36)) + 28|0);\n           $38 = HEAP32[$37>>2]|0;\n           $39 = HEAP32[$2>>2]|0;\n           FUNCTION_TABLE_viiii[$38 & 255]($30,$3,$39,1);\n           $40 = ((($3)) + 24|0);\n           $41 = HEAP32[$40>>2]|0;\n           $42 = ($41|0)==(1);\n           if ($42) {\n            $43 = ((($3)) + 16|0);\n            $44 = HEAP32[$43>>2]|0;\n            HEAP32[$2>>2] = $44;\n            $$0 = 1;\n           } else {\n            $$0 = 0;\n           }\n           $$4 = $$0;\n          }\n         }\n        }\n       }\n      }\n     }\n    } else {\n     $$4 = 0;\n    }\n   }\n  }\n }\n STACKTOP = sp;return ($$4|0);\n}\nfunction __ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $$0 = 0, $3 = 0, $4 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $3 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0);\n if ($3) {\n  $$0 = 1;\n } else {\n  $4 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($1,1456,0)|0);\n  $$0 = $4;\n }\n return ($$0|0);\n}\nfunction __ZN10__cxxabiv121__vmi_class_type_infoD0Ev($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n __ZN10__cxxabiv116__shim_type_infoD2Ev($0);\n __ZdlPv($0);\n return;\n}\nfunction __ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0;\n var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $6 = ((($1)) + 8|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0);\n if ($8) {\n  __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4);\n } else {\n  $9 = ((($1)) + 52|0);\n  $10 = HEAP8[$9>>0]|0;\n  $11 = ((($1)) + 53|0);\n  $12 = HEAP8[$11>>0]|0;\n  $13 = ((($0)) + 16|0);\n  $14 = ((($0)) + 12|0);\n  $15 = HEAP32[$14>>2]|0;\n  $16 = (((($0)) + 16|0) + ($15<<3)|0);\n  HEAP8[$9>>0] = 0;\n  HEAP8[$11>>0] = 0;\n  __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($13,$1,$2,$3,$4,$5);\n  $17 = ($15|0)>(1);\n  L4: do {\n   if ($17) {\n    $18 = ((($0)) + 24|0);\n    $19 = ((($1)) + 24|0);\n    $20 = ((($0)) + 8|0);\n    $21 = ((($1)) + 54|0);\n    $$0 = $18;\n    while(1) {\n     $22 = HEAP8[$21>>0]|0;\n     $23 = ($22<<24>>24)==(0);\n     if (!($23)) {\n      break L4;\n     }\n     $24 = HEAP8[$9>>0]|0;\n     $25 = ($24<<24>>24)==(0);\n     if ($25) {\n      $31 = HEAP8[$11>>0]|0;\n      $32 = ($31<<24>>24)==(0);\n      if (!($32)) {\n       $33 = HEAP32[$20>>2]|0;\n       $34 = $33 & 1;\n       $35 = ($34|0)==(0);\n       if ($35) {\n        break L4;\n       }\n      }\n     } else {\n      $26 = HEAP32[$19>>2]|0;\n      $27 = ($26|0)==(1);\n      if ($27) {\n       break L4;\n      }\n      $28 = HEAP32[$20>>2]|0;\n      $29 = $28 & 2;\n      $30 = ($29|0)==(0);\n      if ($30) {\n       break L4;\n      }\n     }\n     HEAP8[$9>>0] = 0;\n     HEAP8[$11>>0] = 0;\n     __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($$0,$1,$2,$3,$4,$5);\n     $36 = ((($$0)) + 8|0);\n     $37 = ($36>>>0)<($16>>>0);\n     if ($37) {\n      $$0 = $36;\n     } else {\n      break;\n     }\n    }\n   }\n  } while(0);\n  HEAP8[$9>>0] = $10;\n  HEAP8[$11>>0] = $12;\n }\n return;\n}\nfunction __ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$0 = 0, $$081$off0 = 0, $$084 = 0, $$085$off0 = 0, $$1 = 0, $$182$off0 = 0, $$186$off0 = 0, $$2 = 0, $$283$off0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0;\n var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0;\n var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0;\n var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0;\n var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($1)) + 8|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0);\n L1: do {\n  if ($7) {\n   __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3);\n  } else {\n   $8 = HEAP32[$1>>2]|0;\n   $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0);\n   if (!($9)) {\n    $56 = ((($0)) + 16|0);\n    $57 = ((($0)) + 12|0);\n    $58 = HEAP32[$57>>2]|0;\n    $59 = (((($0)) + 16|0) + ($58<<3)|0);\n    __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($56,$1,$2,$3,$4);\n    $60 = ((($0)) + 24|0);\n    $61 = ($58|0)>(1);\n    if (!($61)) {\n     break;\n    }\n    $62 = ((($0)) + 8|0);\n    $63 = HEAP32[$62>>2]|0;\n    $64 = $63 & 2;\n    $65 = ($64|0)==(0);\n    if ($65) {\n     $66 = ((($1)) + 36|0);\n     $67 = HEAP32[$66>>2]|0;\n     $68 = ($67|0)==(1);\n     if (!($68)) {\n      $74 = $63 & 1;\n      $75 = ($74|0)==(0);\n      if ($75) {\n       $86 = ((($1)) + 54|0);\n       $$2 = $60;\n       while(1) {\n        $87 = HEAP8[$86>>0]|0;\n        $88 = ($87<<24>>24)==(0);\n        if (!($88)) {\n         break L1;\n        }\n        $89 = HEAP32[$66>>2]|0;\n        $90 = ($89|0)==(1);\n        if ($90) {\n         break L1;\n        }\n        __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$2,$1,$2,$3,$4);\n        $91 = ((($$2)) + 8|0);\n        $92 = ($91>>>0)<($59>>>0);\n        if ($92) {\n         $$2 = $91;\n        } else {\n         break L1;\n        }\n       }\n      }\n      $76 = ((($1)) + 24|0);\n      $77 = ((($1)) + 54|0);\n      $$1 = $60;\n      while(1) {\n       $78 = HEAP8[$77>>0]|0;\n       $79 = ($78<<24>>24)==(0);\n       if (!($79)) {\n        break L1;\n       }\n       $80 = HEAP32[$66>>2]|0;\n       $81 = ($80|0)==(1);\n       if ($81) {\n        $82 = HEAP32[$76>>2]|0;\n        $83 = ($82|0)==(1);\n        if ($83) {\n         break L1;\n        }\n       }\n       __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$1,$1,$2,$3,$4);\n       $84 = ((($$1)) + 8|0);\n       $85 = ($84>>>0)<($59>>>0);\n       if ($85) {\n        $$1 = $84;\n       } else {\n        break L1;\n       }\n      }\n     }\n    }\n    $69 = ((($1)) + 54|0);\n    $$0 = $60;\n    while(1) {\n     $70 = HEAP8[$69>>0]|0;\n     $71 = ($70<<24>>24)==(0);\n     if (!($71)) {\n      break L1;\n     }\n     __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$0,$1,$2,$3,$4);\n     $72 = ((($$0)) + 8|0);\n     $73 = ($72>>>0)<($59>>>0);\n     if ($73) {\n      $$0 = $72;\n     } else {\n      break L1;\n     }\n    }\n   }\n   $10 = ((($1)) + 16|0);\n   $11 = HEAP32[$10>>2]|0;\n   $12 = ($11|0)==($2|0);\n   if (!($12)) {\n    $13 = ((($1)) + 20|0);\n    $14 = HEAP32[$13>>2]|0;\n    $15 = ($14|0)==($2|0);\n    if (!($15)) {\n     $18 = ((($1)) + 32|0);\n     HEAP32[$18>>2] = $3;\n     $19 = ((($1)) + 44|0);\n     $20 = HEAP32[$19>>2]|0;\n     $21 = ($20|0)==(4);\n     if ($21) {\n      break;\n     }\n     $22 = ((($0)) + 16|0);\n     $23 = ((($0)) + 12|0);\n     $24 = HEAP32[$23>>2]|0;\n     $25 = (((($0)) + 16|0) + ($24<<3)|0);\n     $26 = ((($1)) + 52|0);\n     $27 = ((($1)) + 53|0);\n     $28 = ((($1)) + 54|0);\n     $29 = ((($0)) + 8|0);\n     $30 = ((($1)) + 24|0);\n     $$081$off0 = 0;$$084 = $22;$$085$off0 = 0;\n     L32: while(1) {\n      $31 = ($$084>>>0)<($25>>>0);\n      if (!($31)) {\n       $$283$off0 = $$081$off0;\n       label = 18;\n       break;\n      }\n      HEAP8[$26>>0] = 0;\n      HEAP8[$27>>0] = 0;\n      __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($$084,$1,$2,$2,1,$4);\n      $32 = HEAP8[$28>>0]|0;\n      $33 = ($32<<24>>24)==(0);\n      if (!($33)) {\n       $$283$off0 = $$081$off0;\n       label = 18;\n       break;\n      }\n      $34 = HEAP8[$27>>0]|0;\n      $35 = ($34<<24>>24)==(0);\n      do {\n       if ($35) {\n        $$182$off0 = $$081$off0;$$186$off0 = $$085$off0;\n       } else {\n        $36 = HEAP8[$26>>0]|0;\n        $37 = ($36<<24>>24)==(0);\n        if ($37) {\n         $43 = HEAP32[$29>>2]|0;\n         $44 = $43 & 1;\n         $45 = ($44|0)==(0);\n         if ($45) {\n          $$283$off0 = 1;\n          label = 18;\n          break L32;\n         } else {\n          $$182$off0 = 1;$$186$off0 = $$085$off0;\n          break;\n         }\n        }\n        $38 = HEAP32[$30>>2]|0;\n        $39 = ($38|0)==(1);\n        if ($39) {\n         label = 23;\n         break L32;\n        }\n        $40 = HEAP32[$29>>2]|0;\n        $41 = $40 & 2;\n        $42 = ($41|0)==(0);\n        if ($42) {\n         label = 23;\n         break L32;\n        } else {\n         $$182$off0 = 1;$$186$off0 = 1;\n        }\n       }\n      } while(0);\n      $46 = ((($$084)) + 8|0);\n      $$081$off0 = $$182$off0;$$084 = $46;$$085$off0 = $$186$off0;\n     }\n     do {\n      if ((label|0) == 18) {\n       if (!($$085$off0)) {\n        HEAP32[$13>>2] = $2;\n        $47 = ((($1)) + 40|0);\n        $48 = HEAP32[$47>>2]|0;\n        $49 = (($48) + 1)|0;\n        HEAP32[$47>>2] = $49;\n        $50 = ((($1)) + 36|0);\n        $51 = HEAP32[$50>>2]|0;\n        $52 = ($51|0)==(1);\n        if ($52) {\n         $53 = HEAP32[$30>>2]|0;\n         $54 = ($53|0)==(2);\n         if ($54) {\n          HEAP8[$28>>0] = 1;\n          if ($$283$off0) {\n           label = 23;\n           break;\n          } else {\n           $55 = 4;\n           break;\n          }\n         }\n        }\n       }\n       if ($$283$off0) {\n        label = 23;\n       } else {\n        $55 = 4;\n       }\n      }\n     } while(0);\n     if ((label|0) == 23) {\n      $55 = 3;\n     }\n     HEAP32[$19>>2] = $55;\n     break;\n    }\n   }\n   $16 = ($3|0)==(1);\n   if ($16) {\n    $17 = ((($1)) + 32|0);\n    HEAP32[$17>>2] = 1;\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($1)) + 8|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0);\n L1: do {\n  if ($6) {\n   __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3);\n  } else {\n   $7 = ((($0)) + 16|0);\n   $8 = ((($0)) + 12|0);\n   $9 = HEAP32[$8>>2]|0;\n   $10 = (((($0)) + 16|0) + ($9<<3)|0);\n   __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($7,$1,$2,$3);\n   $11 = ($9|0)>(1);\n   if ($11) {\n    $12 = ((($0)) + 24|0);\n    $13 = ((($1)) + 54|0);\n    $$0 = $12;\n    while(1) {\n     __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($$0,$1,$2,$3);\n     $14 = HEAP8[$13>>0]|0;\n     $15 = ($14<<24>>24)==(0);\n     if (!($15)) {\n      break L1;\n     }\n     $16 = ((($$0)) + 8|0);\n     $17 = ($16>>>0)<($10>>>0);\n     if ($17) {\n      $$0 = $16;\n     } else {\n      break;\n     }\n    }\n   }\n  }\n } while(0);\n return;\n}\nfunction __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $4 = ((($0)) + 4|0);\n $5 = HEAP32[$4>>2]|0;\n $6 = $5 >> 8;\n $7 = $5 & 1;\n $8 = ($7|0)==(0);\n if ($8) {\n  $$0 = $6;\n } else {\n  $9 = HEAP32[$2>>2]|0;\n  $10 = (($9) + ($6)|0);\n  $11 = HEAP32[$10>>2]|0;\n  $$0 = $11;\n }\n $12 = HEAP32[$0>>2]|0;\n $13 = HEAP32[$12>>2]|0;\n $14 = ((($13)) + 28|0);\n $15 = HEAP32[$14>>2]|0;\n $16 = (($2) + ($$0)|0);\n $17 = $5 & 2;\n $18 = ($17|0)==(0);\n $19 = $18 ? 2 : $3;\n FUNCTION_TABLE_viiii[$15 & 255]($12,$1,$16,$19);\n return;\n}\nfunction __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n $5 = $5|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $6 = ((($0)) + 4|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = $7 >> 8;\n $9 = $7 & 1;\n $10 = ($9|0)==(0);\n if ($10) {\n  $$0 = $8;\n } else {\n  $11 = HEAP32[$3>>2]|0;\n  $12 = (($11) + ($8)|0);\n  $13 = HEAP32[$12>>2]|0;\n  $$0 = $13;\n }\n $14 = HEAP32[$0>>2]|0;\n $15 = HEAP32[$14>>2]|0;\n $16 = ((($15)) + 20|0);\n $17 = HEAP32[$16>>2]|0;\n $18 = (($3) + ($$0)|0);\n $19 = $7 & 2;\n $20 = ($19|0)==(0);\n $21 = $20 ? 2 : $4;\n FUNCTION_TABLE_viiiiii[$17 & 255]($14,$1,$2,$18,$21,$5);\n return;\n}\nfunction __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n $3 = $3|0;\n $4 = $4|0;\n var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $5 = ((($0)) + 4|0);\n $6 = HEAP32[$5>>2]|0;\n $7 = $6 >> 8;\n $8 = $6 & 1;\n $9 = ($8|0)==(0);\n if ($9) {\n  $$0 = $7;\n } else {\n  $10 = HEAP32[$2>>2]|0;\n  $11 = (($10) + ($7)|0);\n  $12 = HEAP32[$11>>2]|0;\n  $$0 = $12;\n }\n $13 = HEAP32[$0>>2]|0;\n $14 = HEAP32[$13>>2]|0;\n $15 = ((($14)) + 24|0);\n $16 = HEAP32[$15>>2]|0;\n $17 = (($2) + ($$0)|0);\n $18 = $6 & 2;\n $19 = ($18|0)==(0);\n $20 = $19 ? 2 : $3;\n FUNCTION_TABLE_viiiii[$16 & 255]($13,$1,$17,$20,$4);\n return;\n}\nfunction ___cxa_guard_acquire($0) {\n $0 = $0|0;\n var $$0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = HEAP8[$0>>0]|0;\n $2 = ($1<<24>>24)==(1);\n if ($2) {\n  $$0 = 0;\n } else {\n  HEAP8[$0>>0] = 1;\n  $$0 = 1;\n }\n return ($$0|0);\n}\nfunction ___cxa_guard_release($0) {\n $0 = $0|0;\n var label = 0, sp = 0;\n sp = STACKTOP;\n return;\n}\nfunction __ZSt15get_new_handlerv() {\n var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $0 = HEAP32[5469]|0;\n $1 = (($0) + 0)|0;\n HEAP32[5469] = $1;\n $2 = $0;\n return ($2|0);\n}\nfunction ___cxa_can_catch($0,$1,$2) {\n $0 = $0|0;\n $1 = $1|0;\n $2 = $2|0;\n var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0);\n $3 = sp;\n $4 = HEAP32[$2>>2]|0;\n HEAP32[$3>>2] = $4;\n $5 = HEAP32[$0>>2]|0;\n $6 = ((($5)) + 16|0);\n $7 = HEAP32[$6>>2]|0;\n $8 = (FUNCTION_TABLE_iiii[$7 & 255]($0,$1,$3)|0);\n $9 = $8&1;\n if ($8) {\n  $10 = HEAP32[$3>>2]|0;\n  HEAP32[$2>>2] = $10;\n }\n STACKTOP = sp;return ($9|0);\n}\nfunction ___cxa_is_pointer_type($0) {\n $0 = $0|0;\n var $1 = 0, $2 = 0, $3 = 0, $phitmp = 0, $phitmp1 = 0, label = 0, sp = 0;\n sp = STACKTOP;\n $1 = ($0|0)==(0|0);\n if ($1) {\n  $3 = 0;\n } else {\n  $2 = (___dynamic_cast($0,1312,1416,0)|0);\n  $phitmp = ($2|0)!=(0|0);\n  $phitmp1 = $phitmp&1;\n  $3 = $phitmp1;\n }\n return ($3|0);\n}\nfunction runPostSets() {\n}\nfunction ___muldsi3($a, $b) {\n    $a = $a | 0;\n    $b = $b | 0;\n    var $1 = 0, $2 = 0, $3 = 0, $6 = 0, $8 = 0, $11 = 0, $12 = 0;\n    $1 = $a & 65535;\n    $2 = $b & 65535;\n    $3 = Math_imul($2, $1) | 0;\n    $6 = $a >>> 16;\n    $8 = ($3 >>> 16) + (Math_imul($2, $6) | 0) | 0;\n    $11 = $b >>> 16;\n    $12 = Math_imul($11, $1) | 0;\n    return (tempRet0 = (($8 >>> 16) + (Math_imul($11, $6) | 0) | 0) + ((($8 & 65535) + $12 | 0) >>> 16) | 0, 0 | ($8 + $12 << 16 | $3 & 65535)) | 0;\n}\nfunction ___muldi3($a$0, $a$1, $b$0, $b$1) {\n    $a$0 = $a$0 | 0;\n    $a$1 = $a$1 | 0;\n    $b$0 = $b$0 | 0;\n    $b$1 = $b$1 | 0;\n    var $x_sroa_0_0_extract_trunc = 0, $y_sroa_0_0_extract_trunc = 0, $1$0 = 0, $1$1 = 0, $2 = 0;\n    $x_sroa_0_0_extract_trunc = $a$0;\n    $y_sroa_0_0_extract_trunc = $b$0;\n    $1$0 = ___muldsi3($x_sroa_0_0_extract_trunc, $y_sroa_0_0_extract_trunc) | 0;\n    $1$1 = tempRet0;\n    $2 = Math_imul($a$1, $y_sroa_0_0_extract_trunc) | 0;\n    return (tempRet0 = ((Math_imul($b$1, $x_sroa_0_0_extract_trunc) | 0) + $2 | 0) + $1$1 | $1$1 & 0, 0 | $1$0 & -1) | 0;\n}\nfunction _i64Add(a, b, c, d) {\n    /*\n      x = a + b*2^32\n      y = c + d*2^32\n      result = l + h*2^32\n    */\n    a = a|0; b = b|0; c = c|0; d = d|0;\n    var l = 0, h = 0;\n    l = (a + c)>>>0;\n    h = (b + d + (((l>>>0) < (a>>>0))|0))>>>0; // Add carry from low word to high word on overflow.\n    return ((tempRet0 = h,l|0)|0);\n}\nfunction _i64Subtract(a, b, c, d) {\n    a = a|0; b = b|0; c = c|0; d = d|0;\n    var l = 0, h = 0;\n    l = (a - c)>>>0;\n    h = (b - d)>>>0;\n    h = (b - d - (((c>>>0) > (a>>>0))|0))>>>0; // Borrow one from high word to low word on underflow.\n    return ((tempRet0 = h,l|0)|0);\n}\nfunction _llvm_cttz_i32(x) { // Note: Currently doesn't take isZeroUndef()\n    x = x | 0;\n    return (x ? (31 - (Math_clz32((x ^ (x - 1))) | 0) | 0) : 32) | 0;\n}\nfunction ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) {\n    $a$0 = $a$0 | 0;\n    $a$1 = $a$1 | 0;\n    $b$0 = $b$0 | 0;\n    $b$1 = $b$1 | 0;\n    $rem = $rem | 0;\n    var $n_sroa_0_0_extract_trunc = 0, $n_sroa_1_4_extract_shift$0 = 0, $n_sroa_1_4_extract_trunc = 0, $d_sroa_0_0_extract_trunc = 0, $d_sroa_1_4_extract_shift$0 = 0, $d_sroa_1_4_extract_trunc = 0, $4 = 0, $17 = 0, $37 = 0, $49 = 0, $51 = 0, $57 = 0, $58 = 0, $66 = 0, $78 = 0, $86 = 0, $88 = 0, $89 = 0, $91 = 0, $92 = 0, $95 = 0, $105 = 0, $117 = 0, $119 = 0, $125 = 0, $126 = 0, $130 = 0, $q_sroa_1_1_ph = 0, $q_sroa_0_1_ph = 0, $r_sroa_1_1_ph = 0, $r_sroa_0_1_ph = 0, $sr_1_ph = 0, $d_sroa_0_0_insert_insert99$0 = 0, $d_sroa_0_0_insert_insert99$1 = 0, $137$0 = 0, $137$1 = 0, $carry_0203 = 0, $sr_1202 = 0, $r_sroa_0_1201 = 0, $r_sroa_1_1200 = 0, $q_sroa_0_1199 = 0, $q_sroa_1_1198 = 0, $147 = 0, $149 = 0, $r_sroa_0_0_insert_insert42$0 = 0, $r_sroa_0_0_insert_insert42$1 = 0, $150$1 = 0, $151$0 = 0, $152 = 0, $154$0 = 0, $r_sroa_0_0_extract_trunc = 0, $r_sroa_1_4_extract_trunc = 0, $155 = 0, $carry_0_lcssa$0 = 0, $carry_0_lcssa$1 = 0, $r_sroa_0_1_lcssa = 0, $r_sroa_1_1_lcssa = 0, $q_sroa_0_1_lcssa = 0, $q_sroa_1_1_lcssa = 0, $q_sroa_0_0_insert_ext75$0 = 0, $q_sroa_0_0_insert_ext75$1 = 0, $q_sroa_0_0_insert_insert77$1 = 0, $_0$0 = 0, $_0$1 = 0;\n    $n_sroa_0_0_extract_trunc = $a$0;\n    $n_sroa_1_4_extract_shift$0 = $a$1;\n    $n_sroa_1_4_extract_trunc = $n_sroa_1_4_extract_shift$0;\n    $d_sroa_0_0_extract_trunc = $b$0;\n    $d_sroa_1_4_extract_shift$0 = $b$1;\n    $d_sroa_1_4_extract_trunc = $d_sroa_1_4_extract_shift$0;\n    if (($n_sroa_1_4_extract_trunc | 0) == 0) {\n      $4 = ($rem | 0) != 0;\n      if (($d_sroa_1_4_extract_trunc | 0) == 0) {\n        if ($4) {\n          HEAP32[$rem >> 2] = ($n_sroa_0_0_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0);\n          HEAP32[$rem + 4 >> 2] = 0;\n        }\n        $_0$1 = 0;\n        $_0$0 = ($n_sroa_0_0_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0;\n        return (tempRet0 = $_0$1, $_0$0) | 0;\n      } else {\n        if (!$4) {\n          $_0$1 = 0;\n          $_0$0 = 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        HEAP32[$rem >> 2] = $a$0 & -1;\n        HEAP32[$rem + 4 >> 2] = $a$1 & 0;\n        $_0$1 = 0;\n        $_0$0 = 0;\n        return (tempRet0 = $_0$1, $_0$0) | 0;\n      }\n    }\n    $17 = ($d_sroa_1_4_extract_trunc | 0) == 0;\n    do {\n      if (($d_sroa_0_0_extract_trunc | 0) == 0) {\n        if ($17) {\n          if (($rem | 0) != 0) {\n            HEAP32[$rem >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0);\n            HEAP32[$rem + 4 >> 2] = 0;\n          }\n          $_0$1 = 0;\n          $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        if (($n_sroa_0_0_extract_trunc | 0) == 0) {\n          if (($rem | 0) != 0) {\n            HEAP32[$rem >> 2] = 0;\n            HEAP32[$rem + 4 >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_1_4_extract_trunc >>> 0);\n          }\n          $_0$1 = 0;\n          $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_1_4_extract_trunc >>> 0) >>> 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        $37 = $d_sroa_1_4_extract_trunc - 1 | 0;\n        if (($37 & $d_sroa_1_4_extract_trunc | 0) == 0) {\n          if (($rem | 0) != 0) {\n            HEAP32[$rem >> 2] = 0 | $a$0 & -1;\n            HEAP32[$rem + 4 >> 2] = $37 & $n_sroa_1_4_extract_trunc | $a$1 & 0;\n          }\n          $_0$1 = 0;\n          $_0$0 = $n_sroa_1_4_extract_trunc >>> ((_llvm_cttz_i32($d_sroa_1_4_extract_trunc | 0) | 0) >>> 0);\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        $49 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0;\n        $51 = $49 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;\n        if ($51 >>> 0 <= 30) {\n          $57 = $51 + 1 | 0;\n          $58 = 31 - $51 | 0;\n          $sr_1_ph = $57;\n          $r_sroa_0_1_ph = $n_sroa_1_4_extract_trunc << $58 | $n_sroa_0_0_extract_trunc >>> ($57 >>> 0);\n          $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($57 >>> 0);\n          $q_sroa_0_1_ph = 0;\n          $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $58;\n          break;\n        }\n        if (($rem | 0) == 0) {\n          $_0$1 = 0;\n          $_0$0 = 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        HEAP32[$rem >> 2] = 0 | $a$0 & -1;\n        HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;\n        $_0$1 = 0;\n        $_0$0 = 0;\n        return (tempRet0 = $_0$1, $_0$0) | 0;\n      } else {\n        if (!$17) {\n          $117 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0;\n          $119 = $117 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;\n          if ($119 >>> 0 <= 31) {\n            $125 = $119 + 1 | 0;\n            $126 = 31 - $119 | 0;\n            $130 = $119 - 31 >> 31;\n            $sr_1_ph = $125;\n            $r_sroa_0_1_ph = $n_sroa_0_0_extract_trunc >>> ($125 >>> 0) & $130 | $n_sroa_1_4_extract_trunc << $126;\n            $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($125 >>> 0) & $130;\n            $q_sroa_0_1_ph = 0;\n            $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $126;\n            break;\n          }\n          if (($rem | 0) == 0) {\n            $_0$1 = 0;\n            $_0$0 = 0;\n            return (tempRet0 = $_0$1, $_0$0) | 0;\n          }\n          HEAP32[$rem >> 2] = 0 | $a$0 & -1;\n          HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;\n          $_0$1 = 0;\n          $_0$0 = 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n        $66 = $d_sroa_0_0_extract_trunc - 1 | 0;\n        if (($66 & $d_sroa_0_0_extract_trunc | 0) != 0) {\n          $86 = (Math_clz32($d_sroa_0_0_extract_trunc | 0) | 0) + 33 | 0;\n          $88 = $86 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0;\n          $89 = 64 - $88 | 0;\n          $91 = 32 - $88 | 0;\n          $92 = $91 >> 31;\n          $95 = $88 - 32 | 0;\n          $105 = $95 >> 31;\n          $sr_1_ph = $88;\n          $r_sroa_0_1_ph = $91 - 1 >> 31 & $n_sroa_1_4_extract_trunc >>> ($95 >>> 0) | ($n_sroa_1_4_extract_trunc << $91 | $n_sroa_0_0_extract_trunc >>> ($88 >>> 0)) & $105;\n          $r_sroa_1_1_ph = $105 & $n_sroa_1_4_extract_trunc >>> ($88 >>> 0);\n          $q_sroa_0_1_ph = $n_sroa_0_0_extract_trunc << $89 & $92;\n          $q_sroa_1_1_ph = ($n_sroa_1_4_extract_trunc << $89 | $n_sroa_0_0_extract_trunc >>> ($95 >>> 0)) & $92 | $n_sroa_0_0_extract_trunc << $91 & $88 - 33 >> 31;\n          break;\n        }\n        if (($rem | 0) != 0) {\n          HEAP32[$rem >> 2] = $66 & $n_sroa_0_0_extract_trunc;\n          HEAP32[$rem + 4 >> 2] = 0;\n        }\n        if (($d_sroa_0_0_extract_trunc | 0) == 1) {\n          $_0$1 = $n_sroa_1_4_extract_shift$0 | $a$1 & 0;\n          $_0$0 = 0 | $a$0 & -1;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        } else {\n          $78 = _llvm_cttz_i32($d_sroa_0_0_extract_trunc | 0) | 0;\n          $_0$1 = 0 | $n_sroa_1_4_extract_trunc >>> ($78 >>> 0);\n          $_0$0 = $n_sroa_1_4_extract_trunc << 32 - $78 | $n_sroa_0_0_extract_trunc >>> ($78 >>> 0) | 0;\n          return (tempRet0 = $_0$1, $_0$0) | 0;\n        }\n      }\n    } while (0);\n    if (($sr_1_ph | 0) == 0) {\n      $q_sroa_1_1_lcssa = $q_sroa_1_1_ph;\n      $q_sroa_0_1_lcssa = $q_sroa_0_1_ph;\n      $r_sroa_1_1_lcssa = $r_sroa_1_1_ph;\n      $r_sroa_0_1_lcssa = $r_sroa_0_1_ph;\n      $carry_0_lcssa$1 = 0;\n      $carry_0_lcssa$0 = 0;\n    } else {\n      $d_sroa_0_0_insert_insert99$0 = 0 | $b$0 & -1;\n      $d_sroa_0_0_insert_insert99$1 = $d_sroa_1_4_extract_shift$0 | $b$1 & 0;\n      $137$0 = _i64Add($d_sroa_0_0_insert_insert99$0 | 0, $d_sroa_0_0_insert_insert99$1 | 0, -1, -1) | 0;\n      $137$1 = tempRet0;\n      $q_sroa_1_1198 = $q_sroa_1_1_ph;\n      $q_sroa_0_1199 = $q_sroa_0_1_ph;\n      $r_sroa_1_1200 = $r_sroa_1_1_ph;\n      $r_sroa_0_1201 = $r_sroa_0_1_ph;\n      $sr_1202 = $sr_1_ph;\n      $carry_0203 = 0;\n      while (1) {\n        $147 = $q_sroa_0_1199 >>> 31 | $q_sroa_1_1198 << 1;\n        $149 = $carry_0203 | $q_sroa_0_1199 << 1;\n        $r_sroa_0_0_insert_insert42$0 = 0 | ($r_sroa_0_1201 << 1 | $q_sroa_1_1198 >>> 31);\n        $r_sroa_0_0_insert_insert42$1 = $r_sroa_0_1201 >>> 31 | $r_sroa_1_1200 << 1 | 0;\n        _i64Subtract($137$0 | 0, $137$1 | 0, $r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0) | 0;\n        $150$1 = tempRet0;\n        $151$0 = $150$1 >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1;\n        $152 = $151$0 & 1;\n        $154$0 = _i64Subtract($r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0, $151$0 & $d_sroa_0_0_insert_insert99$0 | 0, ((($150$1 | 0) < 0 ? -1 : 0) >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1) & $d_sroa_0_0_insert_insert99$1 | 0) | 0;\n        $r_sroa_0_0_extract_trunc = $154$0;\n        $r_sroa_1_4_extract_trunc = tempRet0;\n        $155 = $sr_1202 - 1 | 0;\n        if (($155 | 0) == 0) {\n          break;\n        } else {\n          $q_sroa_1_1198 = $147;\n          $q_sroa_0_1199 = $149;\n          $r_sroa_1_1200 = $r_sroa_1_4_extract_trunc;\n          $r_sroa_0_1201 = $r_sroa_0_0_extract_trunc;\n          $sr_1202 = $155;\n          $carry_0203 = $152;\n        }\n      }\n      $q_sroa_1_1_lcssa = $147;\n      $q_sroa_0_1_lcssa = $149;\n      $r_sroa_1_1_lcssa = $r_sroa_1_4_extract_trunc;\n      $r_sroa_0_1_lcssa = $r_sroa_0_0_extract_trunc;\n      $carry_0_lcssa$1 = 0;\n      $carry_0_lcssa$0 = $152;\n    }\n    $q_sroa_0_0_insert_ext75$0 = $q_sroa_0_1_lcssa;\n    $q_sroa_0_0_insert_ext75$1 = 0;\n    $q_sroa_0_0_insert_insert77$1 = $q_sroa_1_1_lcssa | $q_sroa_0_0_insert_ext75$1;\n    if (($rem | 0) != 0) {\n      HEAP32[$rem >> 2] = 0 | $r_sroa_0_1_lcssa;\n      HEAP32[$rem + 4 >> 2] = $r_sroa_1_1_lcssa | 0;\n    }\n    $_0$1 = (0 | $q_sroa_0_0_insert_ext75$0) >>> 31 | $q_sroa_0_0_insert_insert77$1 << 1 | ($q_sroa_0_0_insert_ext75$1 << 1 | $q_sroa_0_0_insert_ext75$0 >>> 31) & 0 | $carry_0_lcssa$1;\n    $_0$0 = ($q_sroa_0_0_insert_ext75$0 << 1 | 0 >>> 31) & -2 | $carry_0_lcssa$0;\n    return (tempRet0 = $_0$1, $_0$0) | 0;\n}\nfunction ___udivdi3($a$0, $a$1, $b$0, $b$1) {\n    $a$0 = $a$0 | 0;\n    $a$1 = $a$1 | 0;\n    $b$0 = $b$0 | 0;\n    $b$1 = $b$1 | 0;\n    var $1$0 = 0;\n    $1$0 = ___udivmoddi4($a$0, $a$1, $b$0, $b$1, 0) | 0;\n    return $1$0 | 0;\n}\nfunction _bitshift64Ashr(low, high, bits) {\n    low = low|0; high = high|0; bits = bits|0;\n    var ander = 0;\n    if ((bits|0) < 32) {\n      ander = ((1 << bits) - 1)|0;\n      tempRet0 = high >> bits;\n      return (low >>> bits) | ((high&ander) << (32 - bits));\n    }\n    tempRet0 = (high|0) < 0 ? -1 : 0;\n    return (high >> (bits - 32))|0;\n}\nfunction _bitshift64Lshr(low, high, bits) {\n    low = low|0; high = high|0; bits = bits|0;\n    var ander = 0;\n    if ((bits|0) < 32) {\n      ander = ((1 << bits) - 1)|0;\n      tempRet0 = high >>> bits;\n      return (low >>> bits) | ((high&ander) << (32 - bits));\n    }\n    tempRet0 = 0;\n    return (high >>> (bits - 32))|0;\n}\nfunction _bitshift64Shl(low, high, bits) {\n    low = low|0; high = high|0; bits = bits|0;\n    var ander = 0;\n    if ((bits|0) < 32) {\n      ander = ((1 << bits) - 1)|0;\n      tempRet0 = (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits));\n      return low << bits;\n    }\n    tempRet0 = low << (bits - 32);\n    return 0;\n}\nfunction _llvm_bswap_i32(x) {\n    x = x|0;\n    return (((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24))|0;\n}\nfunction _memcpy(dest, src, num) {\n    dest = dest|0; src = src|0; num = num|0;\n    var ret = 0;\n    var aligned_dest_end = 0;\n    var block_aligned_dest_end = 0;\n    var dest_end = 0;\n    // Test against a benchmarked cutoff limit for when HEAPU8.set() becomes faster to use.\n    if ((num|0) >=\n      8192\n    ) {\n      return _emscripten_memcpy_big(dest|0, src|0, num|0)|0;\n    }\n\n    ret = dest|0;\n    dest_end = (dest + num)|0;\n    if ((dest&3) == (src&3)) {\n      // The initial unaligned < 4-byte front.\n      while (dest & 3) {\n        if ((num|0) == 0) return ret|0;\n        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);\n        dest = (dest+1)|0;\n        src = (src+1)|0;\n        num = (num-1)|0;\n      }\n      aligned_dest_end = (dest_end & -4)|0;\n      block_aligned_dest_end = (aligned_dest_end - 64)|0;\n      while ((dest|0) <= (block_aligned_dest_end|0) ) {\n        HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0);\n        HEAP32[(((dest)+(4))>>2)]=((HEAP32[(((src)+(4))>>2)])|0);\n        HEAP32[(((dest)+(8))>>2)]=((HEAP32[(((src)+(8))>>2)])|0);\n        HEAP32[(((dest)+(12))>>2)]=((HEAP32[(((src)+(12))>>2)])|0);\n        HEAP32[(((dest)+(16))>>2)]=((HEAP32[(((src)+(16))>>2)])|0);\n        HEAP32[(((dest)+(20))>>2)]=((HEAP32[(((src)+(20))>>2)])|0);\n        HEAP32[(((dest)+(24))>>2)]=((HEAP32[(((src)+(24))>>2)])|0);\n        HEAP32[(((dest)+(28))>>2)]=((HEAP32[(((src)+(28))>>2)])|0);\n        HEAP32[(((dest)+(32))>>2)]=((HEAP32[(((src)+(32))>>2)])|0);\n        HEAP32[(((dest)+(36))>>2)]=((HEAP32[(((src)+(36))>>2)])|0);\n        HEAP32[(((dest)+(40))>>2)]=((HEAP32[(((src)+(40))>>2)])|0);\n        HEAP32[(((dest)+(44))>>2)]=((HEAP32[(((src)+(44))>>2)])|0);\n        HEAP32[(((dest)+(48))>>2)]=((HEAP32[(((src)+(48))>>2)])|0);\n        HEAP32[(((dest)+(52))>>2)]=((HEAP32[(((src)+(52))>>2)])|0);\n        HEAP32[(((dest)+(56))>>2)]=((HEAP32[(((src)+(56))>>2)])|0);\n        HEAP32[(((dest)+(60))>>2)]=((HEAP32[(((src)+(60))>>2)])|0);\n        dest = (dest+64)|0;\n        src = (src+64)|0;\n      }\n      while ((dest|0) < (aligned_dest_end|0) ) {\n        HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0);\n        dest = (dest+4)|0;\n        src = (src+4)|0;\n      }\n    } else {\n      // In the unaligned copy case, unroll a bit as well.\n      aligned_dest_end = (dest_end - 4)|0;\n      while ((dest|0) < (aligned_dest_end|0) ) {\n        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);\n        HEAP8[(((dest)+(1))>>0)]=((HEAP8[(((src)+(1))>>0)])|0);\n        HEAP8[(((dest)+(2))>>0)]=((HEAP8[(((src)+(2))>>0)])|0);\n        HEAP8[(((dest)+(3))>>0)]=((HEAP8[(((src)+(3))>>0)])|0);\n        dest = (dest+4)|0;\n        src = (src+4)|0;\n      }\n    }\n    // The remaining unaligned < 4 byte tail.\n    while ((dest|0) < (dest_end|0)) {\n      HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);\n      dest = (dest+1)|0;\n      src = (src+1)|0;\n    }\n    return ret|0;\n}\nfunction _memmove(dest, src, num) {\n    dest = dest|0; src = src|0; num = num|0;\n    var ret = 0;\n    if (((src|0) < (dest|0)) & ((dest|0) < ((src + num)|0))) {\n      // Unlikely case: Copy backwards in a safe manner\n      ret = dest;\n      src = (src + num)|0;\n      dest = (dest + num)|0;\n      while ((num|0) > 0) {\n        dest = (dest - 1)|0;\n        src = (src - 1)|0;\n        num = (num - 1)|0;\n        HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0);\n      }\n      dest = ret;\n    } else {\n      _memcpy(dest, src, num) | 0;\n    }\n    return dest | 0;\n}\nfunction _memset(ptr, value, num) {\n    ptr = ptr|0; value = value|0; num = num|0;\n    var end = 0, aligned_end = 0, block_aligned_end = 0, value4 = 0;\n    end = (ptr + num)|0;\n\n    value = value & 0xff;\n    if ((num|0) >= 67 /* 64 bytes for an unrolled loop + 3 bytes for unaligned head*/) {\n      while ((ptr&3) != 0) {\n        HEAP8[((ptr)>>0)]=value;\n        ptr = (ptr+1)|0;\n      }\n\n      aligned_end = (end & -4)|0;\n      block_aligned_end = (aligned_end - 64)|0;\n      value4 = value | (value << 8) | (value << 16) | (value << 24);\n\n      while((ptr|0) <= (block_aligned_end|0)) {\n        HEAP32[((ptr)>>2)]=value4;\n        HEAP32[(((ptr)+(4))>>2)]=value4;\n        HEAP32[(((ptr)+(8))>>2)]=value4;\n        HEAP32[(((ptr)+(12))>>2)]=value4;\n        HEAP32[(((ptr)+(16))>>2)]=value4;\n        HEAP32[(((ptr)+(20))>>2)]=value4;\n        HEAP32[(((ptr)+(24))>>2)]=value4;\n        HEAP32[(((ptr)+(28))>>2)]=value4;\n        HEAP32[(((ptr)+(32))>>2)]=value4;\n        HEAP32[(((ptr)+(36))>>2)]=value4;\n        HEAP32[(((ptr)+(40))>>2)]=value4;\n        HEAP32[(((ptr)+(44))>>2)]=value4;\n        HEAP32[(((ptr)+(48))>>2)]=value4;\n        HEAP32[(((ptr)+(52))>>2)]=value4;\n        HEAP32[(((ptr)+(56))>>2)]=value4;\n        HEAP32[(((ptr)+(60))>>2)]=value4;\n        ptr = (ptr + 64)|0;\n      }\n\n      while ((ptr|0) < (aligned_end|0) ) {\n        HEAP32[((ptr)>>2)]=value4;\n        ptr = (ptr+4)|0;\n      }\n    }\n    // The remaining bytes.\n    while ((ptr|0) < (end|0)) {\n      HEAP8[((ptr)>>0)]=value;\n      ptr = (ptr+1)|0;\n    }\n    return (end-num)|0;\n}\nfunction _pthread_mutex_lock(x) {\n    x = x | 0;\n    return 0;\n}\nfunction _pthread_mutex_unlock(x) {\n    x = x | 0;\n    return 0;\n}\nfunction _sbrk(increment) {\n    increment = increment|0;\n    var oldDynamicTop = 0;\n    var oldDynamicTopOnChange = 0;\n    var newDynamicTop = 0;\n    var totalMemory = 0;\n    oldDynamicTop = HEAP32[DYNAMICTOP_PTR>>2]|0;\n    newDynamicTop = oldDynamicTop + increment | 0;\n\n    if (((increment|0) > 0 & (newDynamicTop|0) < (oldDynamicTop|0)) // Detect and fail if we would wrap around signed 32-bit int.\n      | (newDynamicTop|0) < 0) { // Also underflow, sbrk() should be able to be used to subtract.\n      abortOnCannotGrowMemory()|0;\n      ___setErrNo(12);\n      return -1;\n    }\n\n    HEAP32[DYNAMICTOP_PTR>>2] = newDynamicTop;\n    totalMemory = getTotalMemory()|0;\n    if ((newDynamicTop|0) > (totalMemory|0)) {\n      if ((enlargeMemory()|0) == 0) {\n        HEAP32[DYNAMICTOP_PTR>>2] = oldDynamicTop;\n        ___setErrNo(12);\n        return -1;\n      }\n    }\n    return oldDynamicTop|0;\n}\n\n  \nfunction dynCall_i(index) {\n  index = index|0;\n  \n  return FUNCTION_TABLE_i[index&255]()|0;\n}\n\n\nfunction dynCall_ii(index,a1) {\n  index = index|0;\n  a1=a1|0;\n  return FUNCTION_TABLE_ii[index&255](a1|0)|0;\n}\n\n\nfunction dynCall_iii(index,a1,a2) {\n  index = index|0;\n  a1=a1|0; a2=a2|0;\n  return FUNCTION_TABLE_iii[index&255](a1|0,a2|0)|0;\n}\n\n\nfunction dynCall_iiii(index,a1,a2,a3) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0;\n  return FUNCTION_TABLE_iiii[index&255](a1|0,a2|0,a3|0)|0;\n}\n\n\nfunction dynCall_v(index) {\n  index = index|0;\n  \n  FUNCTION_TABLE_v[index&511]();\n}\n\n\nfunction dynCall_vi(index,a1) {\n  index = index|0;\n  a1=a1|0;\n  FUNCTION_TABLE_vi[index&511](a1|0);\n}\n\n\nfunction dynCall_vii(index,a1,a2) {\n  index = index|0;\n  a1=a1|0; a2=a2|0;\n  FUNCTION_TABLE_vii[index&255](a1|0,a2|0);\n}\n\n\nfunction dynCall_viii(index,a1,a2,a3) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0;\n  FUNCTION_TABLE_viii[index&255](a1|0,a2|0,a3|0);\n}\n\n\nfunction dynCall_viiii(index,a1,a2,a3,a4) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0;\n  FUNCTION_TABLE_viiii[index&255](a1|0,a2|0,a3|0,a4|0);\n}\n\n\nfunction dynCall_viiiii(index,a1,a2,a3,a4,a5) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0;\n  FUNCTION_TABLE_viiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0);\n}\n\n\nfunction dynCall_viiiiii(index,a1,a2,a3,a4,a5,a6) {\n  index = index|0;\n  a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0; a6=a6|0;\n  FUNCTION_TABLE_viiiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0,a6|0);\n}\n\nfunction b0() {\n ; nullFunc_i(0);return 0;\n}\nfunction b1(p0) {\n p0 = p0|0; nullFunc_ii(1);return 0;\n}\nfunction b2(p0,p1) {\n p0 = p0|0;p1 = p1|0; nullFunc_iii(2);return 0;\n}\nfunction b3(p0,p1,p2) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_iiii(3);return 0;\n}\nfunction b4() {\n ; nullFunc_v(4);\n}\nfunction ___cxa_pure_virtual__wrapper() {\n ; ___cxa_pure_virtual();\n}\nfunction b5(p0) {\n p0 = p0|0; nullFunc_vi(5);\n}\nfunction b6(p0,p1) {\n p0 = p0|0;p1 = p1|0; nullFunc_vii(6);\n}\nfunction b7(p0,p1,p2) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_viii(7);\n}\nfunction b8(p0,p1,p2,p3) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0; nullFunc_viiii(8);\n}\nfunction b9(p0,p1,p2,p3,p4) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0; nullFunc_viiiii(9);\n}\nfunction b10(p0,p1,p2,p3,p4,p5) {\n p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0;p5 = p5|0; nullFunc_viiiiii(10);\n}\n\n// EMSCRIPTEN_END_FUNCS\nvar FUNCTION_TABLE_i = [b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,__ZN10emscripten8internal12operator_newI6LASZipJEEEPT_DpOT0_,b0,b0\n,b0,b0,b0,b0,b0,b0,b0,__ZN10emscripten8internal12operator_newI13DynamicLASZipJEEEPT_DpOT0_,b0,b0,b0,b0,b0,b0,b0,b0,b0];\nvar FUNCTION_TABLE_ii = [b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZNKSt13runtime_error4whatEv,b1,b1,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEv,b1,b1,b1,b1,b1,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE11target_typeEv,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,___stdio_close,b1,b1,b1,b1,b1,__ZNKSt3__217bad_function_call4whatEv,b1,b1,b1,b1,b1,b1,b1,b1,b1\n,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZNKSt9exception4whatEv,b1,b1,__ZNKSt11logic_error4whatEv,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZN10emscripten8internal13getActualTypeI6LASZipEEPKvPT_,b1,b1,__ZN10emscripten8internal7InvokerIP6LASZipJEE6invokeEPFS3_vE,b1\n,b1,b1,b1,__ZN6LASZip8getCountEv,b1,__ZN10emscripten8internal13getActualTypeI13DynamicLASZipEEPKvPT_,b1,b1,__ZN10emscripten8internal7InvokerIP13DynamicLASZipJEE6invokeEPFS3_vE,b1,b1,b1,b1,b1,b1,b1,b1];\nvar FUNCTION_TABLE_iii = [b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE6targetERKSt9type_info,b2,b2,b2,b2,b2,b2,b2\n,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE10decompressEPc,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2\n,b2,b2,__ZN6laszip7formats10base_field11compressRawEPKc,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,__ZN6laszip7formats10base_field13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2\n,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info,b2\n,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEE13decompressRawEPc,b2\n,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2\n,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__219__shared_weak_count13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2\n,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2\n,b2,b2,b2,b2,__ZN10emscripten8internal13MethodInvokerIM6LASZipFjvEjPS2_JEE6invokeERKS4_S5_,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2];\nvar FUNCTION_TABLE_iiii = [b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,___stdio_write,___stdio_seek,___stdout_write,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,__ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,__ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,b3,b3,b3,b3,b3,b3,b3,b3\n,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3];\nvar FUNCTION_TABLE_v = [b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,___cxa_pure_virtual__wrapper,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,__ZL25default_terminate_handlerv,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,__ZN10__cxxabiv112_GLOBAL__N_110construct_Ev,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4\n,b4,b4,b4];\nvar FUNCTION_TABLE_vi = [b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE21__on_zero_shared_weakEv,__ZN6laszip13invalid_magicD2Ev,__ZN6laszip13invalid_magicD0Ev,b5,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED0Ev,b5,b5,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7destroyEv,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE18destroy_deallocateEv,b5,b5,b5,__ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED2Ev,__ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED0Ev,b5,__ZN6laszip21old_style_compressionD2Ev,__ZN6laszip21old_style_compressionD0Ev,__ZN6laszip14not_compressedD2Ev\n,__ZN6laszip14not_compressedD0Ev,__ZN6laszip25laszip_format_unsupportedD2Ev,__ZN6laszip25laszip_format_unsupportedD0Ev,__ZN6laszip13no_laszip_vlrD2Ev,__ZN6laszip13no_laszip_vlrD0Ev,__ZN6laszip22chunk_table_read_errorD2Ev,__ZN6laszip22chunk_table_read_errorD0Ev,__ZN6laszip13not_supportedD2Ev,__ZN6laszip13not_supportedD0Ev,__ZN6laszip26unknown_chunk_table_formatD2Ev,__ZN6laszip26unknown_chunk_table_formatD0Ev,__ZN6laszip11end_of_fileD2Ev,__ZN6laszip11end_of_fileD0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE21__on_zero_shared_weakEv,__ZN6laszip19unknown_schema_typeD2Ev,__ZN6laszip19unknown_schema_typeD0Ev,b5,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED0Ev,__ZN6laszip7formats20dynamic_decompressorD2Ev,__ZN6laszip7formats20dynamic_decompressorD0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv\n,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED0Ev,b5,b5,__ZN6laszip7formats10base_fieldD2Ev,__ZN6laszip7formats10base_fieldD0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED0Ev\n,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv\n,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev\n,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED0Ev\n,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,b5,b5,b5,b5,__ZNSt3__217bad_function_callD2Ev,__ZNSt3__217bad_function_callD0Ev,b5,__ZNSt3__214__shared_countD2Ev,__ZNSt3__214__shared_countD0Ev,__ZNSt3__219__shared_weak_countD0Ev,b5,b5,__ZN10__cxxabiv116__shim_type_infoD2Ev,__ZN10__cxxabiv117__class_type_infoD0Ev,__ZNK10__cxxabiv116__shim_type_info5noop1Ev,__ZNK10__cxxabiv116__shim_type_info5noop2Ev\n,b5,b5,b5,b5,__ZN10__cxxabiv120__si_class_type_infoD0Ev,b5,b5,b5,__ZNSt9exceptionD2Ev,__ZNSt9exceptionD0Ev,b5,__ZNSt11logic_errorD2Ev,__ZNSt11logic_errorD0Ev,b5,__ZNSt13runtime_errorD2Ev,__ZNSt13runtime_errorD0Ev,__ZNSt12length_errorD0Ev,__ZN10__cxxabiv123__fundamental_type_infoD0Ev,b5,__ZN10__cxxabiv119__pointer_type_infoD0Ev,b5,__ZN10__cxxabiv121__vmi_class_type_infoD0Ev,b5,b5,b5,b5,__ZN10emscripten8internal14raw_destructorI6LASZipEEvPT_,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,__ZN10emscripten8internal14raw_destructorI13DynamicLASZipEEvPT_,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,__ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5\n,b5,b5,b5];\nvar FUNCTION_TABLE_vii = [b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEPNS0_6__baseISE_EE,b6,b6,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EEclESA_,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6\n,b6,__ZN6LASZip8getPointEi,b6,b6,b6,b6,b6,b6,b6,b6,b6,__ZN13DynamicLASZip16addFieldFloatingEj,b6,__ZN13DynamicLASZip14addFieldSignedEj,__ZN13DynamicLASZip16addFieldUnsignedEj,__ZN13DynamicLASZip8getPointEi,b6];\nvar FUNCTION_TABLE_viii = [b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7\n,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,__ZN6LASZip4openEjj\n,b7,b7,__ZN10emscripten8internal13MethodInvokerIM6LASZipFviEvPS2_JiEE6invokeERKS4_S5_i,b7,b7,b7,b7,b7,b7,__ZN13DynamicLASZip4openEjj,b7,b7,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjEvPS2_JjEE6invokeERKS4_S5_j,b7,b7,b7,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFviEvPS2_JiEE6invokeERKS4_S5_i];\nvar FUNCTION_TABLE_viiii = [b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8\n,b8,b8,b8,__ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,__ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,b8,b8\n,__ZN10emscripten8internal13MethodInvokerIM6LASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj,b8,b8,b8,b8,b8,b8,b8,b8,b8,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj,b8,b8,b8,b8,b8,b8];\nvar FUNCTION_TABLE_viiiii = [b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9\n,b9,b9,__ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,__ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,b9,b9,b9\n,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9];\nvar FUNCTION_TABLE_viiiiii = [b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10\n,b10,__ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,__ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,__ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,b10,b10,b10,b10\n,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10];\n\n  return { __GLOBAL__sub_I_bind_cpp: __GLOBAL__sub_I_bind_cpp, __GLOBAL__sub_I_laz_perf_cpp: __GLOBAL__sub_I_laz_perf_cpp, ___cxa_can_catch: ___cxa_can_catch, ___cxa_is_pointer_type: ___cxa_is_pointer_type, ___errno_location: ___errno_location, ___getTypeName: ___getTypeName, ___muldi3: ___muldi3, ___udivdi3: ___udivdi3, _bitshift64Ashr: _bitshift64Ashr, _bitshift64Lshr: _bitshift64Lshr, _bitshift64Shl: _bitshift64Shl, _fflush: _fflush, _free: _free, _i64Add: _i64Add, _i64Subtract: _i64Subtract, _llvm_bswap_i32: _llvm_bswap_i32, _malloc: _malloc, _memcpy: _memcpy, _memmove: _memmove, _memset: _memset, _pthread_mutex_lock: _pthread_mutex_lock, _pthread_mutex_unlock: _pthread_mutex_unlock, _sbrk: _sbrk, dynCall_i: dynCall_i, dynCall_ii: dynCall_ii, dynCall_iii: dynCall_iii, dynCall_iiii: dynCall_iiii, dynCall_v: dynCall_v, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_viii: dynCall_viii, dynCall_viiii: dynCall_viiii, dynCall_viiiii: dynCall_viiiii, dynCall_viiiiii: dynCall_viiiiii, establishStackSpace: establishStackSpace, getTempRet0: getTempRet0, runPostSets: runPostSets, setTempRet0: setTempRet0, setThrew: setThrew, stackAlloc: stackAlloc, stackRestore: stackRestore, stackSave: stackSave };\n})\n// EMSCRIPTEN_END_ASM\n(Module.asmGlobalArg, Module.asmLibraryArg, buffer);\n\nvar real___GLOBAL__sub_I_bind_cpp = asm[\"__GLOBAL__sub_I_bind_cpp\"]; asm[\"__GLOBAL__sub_I_bind_cpp\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real___GLOBAL__sub_I_bind_cpp.apply(null, arguments);\n};\n\nvar real___GLOBAL__sub_I_laz_perf_cpp = asm[\"__GLOBAL__sub_I_laz_perf_cpp\"]; asm[\"__GLOBAL__sub_I_laz_perf_cpp\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real___GLOBAL__sub_I_laz_perf_cpp.apply(null, arguments);\n};\n\nvar real____cxa_can_catch = asm[\"___cxa_can_catch\"]; asm[\"___cxa_can_catch\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____cxa_can_catch.apply(null, arguments);\n};\n\nvar real____cxa_is_pointer_type = asm[\"___cxa_is_pointer_type\"]; asm[\"___cxa_is_pointer_type\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____cxa_is_pointer_type.apply(null, arguments);\n};\n\nvar real____errno_location = asm[\"___errno_location\"]; asm[\"___errno_location\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____errno_location.apply(null, arguments);\n};\n\nvar real____getTypeName = asm[\"___getTypeName\"]; asm[\"___getTypeName\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____getTypeName.apply(null, arguments);\n};\n\nvar real____muldi3 = asm[\"___muldi3\"]; asm[\"___muldi3\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____muldi3.apply(null, arguments);\n};\n\nvar real____udivdi3 = asm[\"___udivdi3\"]; asm[\"___udivdi3\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real____udivdi3.apply(null, arguments);\n};\n\nvar real__bitshift64Ashr = asm[\"_bitshift64Ashr\"]; asm[\"_bitshift64Ashr\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__bitshift64Ashr.apply(null, arguments);\n};\n\nvar real__bitshift64Lshr = asm[\"_bitshift64Lshr\"]; asm[\"_bitshift64Lshr\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__bitshift64Lshr.apply(null, arguments);\n};\n\nvar real__bitshift64Shl = asm[\"_bitshift64Shl\"]; asm[\"_bitshift64Shl\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__bitshift64Shl.apply(null, arguments);\n};\n\nvar real__fflush = asm[\"_fflush\"]; asm[\"_fflush\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__fflush.apply(null, arguments);\n};\n\nvar real__free = asm[\"_free\"]; asm[\"_free\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__free.apply(null, arguments);\n};\n\nvar real__i64Add = asm[\"_i64Add\"]; asm[\"_i64Add\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__i64Add.apply(null, arguments);\n};\n\nvar real__i64Subtract = asm[\"_i64Subtract\"]; asm[\"_i64Subtract\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__i64Subtract.apply(null, arguments);\n};\n\nvar real__llvm_bswap_i32 = asm[\"_llvm_bswap_i32\"]; asm[\"_llvm_bswap_i32\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__llvm_bswap_i32.apply(null, arguments);\n};\n\nvar real__malloc = asm[\"_malloc\"]; asm[\"_malloc\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__malloc.apply(null, arguments);\n};\n\nvar real__memmove = asm[\"_memmove\"]; asm[\"_memmove\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__memmove.apply(null, arguments);\n};\n\nvar real__pthread_mutex_lock = asm[\"_pthread_mutex_lock\"]; asm[\"_pthread_mutex_lock\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__pthread_mutex_lock.apply(null, arguments);\n};\n\nvar real__pthread_mutex_unlock = asm[\"_pthread_mutex_unlock\"]; asm[\"_pthread_mutex_unlock\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__pthread_mutex_unlock.apply(null, arguments);\n};\n\nvar real__sbrk = asm[\"_sbrk\"]; asm[\"_sbrk\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real__sbrk.apply(null, arguments);\n};\n\nvar real_establishStackSpace = asm[\"establishStackSpace\"]; asm[\"establishStackSpace\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_establishStackSpace.apply(null, arguments);\n};\n\nvar real_getTempRet0 = asm[\"getTempRet0\"]; asm[\"getTempRet0\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_getTempRet0.apply(null, arguments);\n};\n\nvar real_setTempRet0 = asm[\"setTempRet0\"]; asm[\"setTempRet0\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_setTempRet0.apply(null, arguments);\n};\n\nvar real_setThrew = asm[\"setThrew\"]; asm[\"setThrew\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_setThrew.apply(null, arguments);\n};\n\nvar real_stackAlloc = asm[\"stackAlloc\"]; asm[\"stackAlloc\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_stackAlloc.apply(null, arguments);\n};\n\nvar real_stackRestore = asm[\"stackRestore\"]; asm[\"stackRestore\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_stackRestore.apply(null, arguments);\n};\n\nvar real_stackSave = asm[\"stackSave\"]; asm[\"stackSave\"] = function() {\n  assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)');\n  assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n  return real_stackSave.apply(null, arguments);\n};\nvar __GLOBAL__sub_I_bind_cpp = Module[\"__GLOBAL__sub_I_bind_cpp\"] = asm[\"__GLOBAL__sub_I_bind_cpp\"];\nvar __GLOBAL__sub_I_laz_perf_cpp = Module[\"__GLOBAL__sub_I_laz_perf_cpp\"] = asm[\"__GLOBAL__sub_I_laz_perf_cpp\"];\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = asm[\"___cxa_can_catch\"];\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = asm[\"___cxa_is_pointer_type\"];\nvar ___errno_location = Module[\"___errno_location\"] = asm[\"___errno_location\"];\nvar ___getTypeName = Module[\"___getTypeName\"] = asm[\"___getTypeName\"];\nvar ___muldi3 = Module[\"___muldi3\"] = asm[\"___muldi3\"];\nvar ___udivdi3 = Module[\"___udivdi3\"] = asm[\"___udivdi3\"];\nvar _bitshift64Ashr = Module[\"_bitshift64Ashr\"] = asm[\"_bitshift64Ashr\"];\nvar _bitshift64Lshr = Module[\"_bitshift64Lshr\"] = asm[\"_bitshift64Lshr\"];\nvar _bitshift64Shl = Module[\"_bitshift64Shl\"] = asm[\"_bitshift64Shl\"];\nvar _fflush = Module[\"_fflush\"] = asm[\"_fflush\"];\nvar _free = Module[\"_free\"] = asm[\"_free\"];\nvar _i64Add = Module[\"_i64Add\"] = asm[\"_i64Add\"];\nvar _i64Subtract = Module[\"_i64Subtract\"] = asm[\"_i64Subtract\"];\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = asm[\"_llvm_bswap_i32\"];\nvar _malloc = Module[\"_malloc\"] = asm[\"_malloc\"];\nvar _memcpy = Module[\"_memcpy\"] = asm[\"_memcpy\"];\nvar _memmove = Module[\"_memmove\"] = asm[\"_memmove\"];\nvar _memset = Module[\"_memset\"] = asm[\"_memset\"];\nvar _pthread_mutex_lock = Module[\"_pthread_mutex_lock\"] = asm[\"_pthread_mutex_lock\"];\nvar _pthread_mutex_unlock = Module[\"_pthread_mutex_unlock\"] = asm[\"_pthread_mutex_unlock\"];\nvar _sbrk = Module[\"_sbrk\"] = asm[\"_sbrk\"];\nvar establishStackSpace = Module[\"establishStackSpace\"] = asm[\"establishStackSpace\"];\nvar getTempRet0 = Module[\"getTempRet0\"] = asm[\"getTempRet0\"];\nvar runPostSets = Module[\"runPostSets\"] = asm[\"runPostSets\"];\nvar setTempRet0 = Module[\"setTempRet0\"] = asm[\"setTempRet0\"];\nvar setThrew = Module[\"setThrew\"] = asm[\"setThrew\"];\nvar stackAlloc = Module[\"stackAlloc\"] = asm[\"stackAlloc\"];\nvar stackRestore = Module[\"stackRestore\"] = asm[\"stackRestore\"];\nvar stackSave = Module[\"stackSave\"] = asm[\"stackSave\"];\nvar dynCall_i = Module[\"dynCall_i\"] = asm[\"dynCall_i\"];\nvar dynCall_ii = Module[\"dynCall_ii\"] = asm[\"dynCall_ii\"];\nvar dynCall_iii = Module[\"dynCall_iii\"] = asm[\"dynCall_iii\"];\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = asm[\"dynCall_iiii\"];\nvar dynCall_v = Module[\"dynCall_v\"] = asm[\"dynCall_v\"];\nvar dynCall_vi = Module[\"dynCall_vi\"] = asm[\"dynCall_vi\"];\nvar dynCall_vii = Module[\"dynCall_vii\"] = asm[\"dynCall_vii\"];\nvar dynCall_viii = Module[\"dynCall_viii\"] = asm[\"dynCall_viii\"];\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = asm[\"dynCall_viiii\"];\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = asm[\"dynCall_viiiii\"];\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = asm[\"dynCall_viiiiii\"];\n;\n\n\n\n// === Auto-generated postamble setup entry stuff ===\n\nModule['asm'] = asm;\n\nif (!Module[\"intArrayFromString\"]) Module[\"intArrayFromString\"] = function() { abort(\"'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"intArrayToString\"]) Module[\"intArrayToString\"] = function() { abort(\"'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"ccall\"]) Module[\"ccall\"] = function() { abort(\"'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"cwrap\"]) Module[\"cwrap\"] = function() { abort(\"'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"setValue\"]) Module[\"setValue\"] = function() { abort(\"'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getValue\"]) Module[\"getValue\"] = function() { abort(\"'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"allocate\"]) Module[\"allocate\"] = function() { abort(\"'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getMemory\"]) Module[\"getMemory\"] = function() { abort(\"'getMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"Pointer_stringify\"]) Module[\"Pointer_stringify\"] = function() { abort(\"'Pointer_stringify' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"AsciiToString\"]) Module[\"AsciiToString\"] = function() { abort(\"'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToAscii\"]) Module[\"stringToAscii\"] = function() { abort(\"'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"UTF8ArrayToString\"]) Module[\"UTF8ArrayToString\"] = function() { abort(\"'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"UTF8ToString\"]) Module[\"UTF8ToString\"] = function() { abort(\"'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToUTF8Array\"]) Module[\"stringToUTF8Array\"] = function() { abort(\"'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToUTF8\"]) Module[\"stringToUTF8\"] = function() { abort(\"'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"lengthBytesUTF8\"]) Module[\"lengthBytesUTF8\"] = function() { abort(\"'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"UTF16ToString\"]) Module[\"UTF16ToString\"] = function() { abort(\"'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToUTF16\"]) Module[\"stringToUTF16\"] = function() { abort(\"'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"lengthBytesUTF16\"]) Module[\"lengthBytesUTF16\"] = function() { abort(\"'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"UTF32ToString\"]) Module[\"UTF32ToString\"] = function() { abort(\"'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stringToUTF32\"]) Module[\"stringToUTF32\"] = function() { abort(\"'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"lengthBytesUTF32\"]) Module[\"lengthBytesUTF32\"] = function() { abort(\"'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"allocateUTF8\"]) Module[\"allocateUTF8\"] = function() { abort(\"'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stackTrace\"]) Module[\"stackTrace\"] = function() { abort(\"'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnPreRun\"]) Module[\"addOnPreRun\"] = function() { abort(\"'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnInit\"]) Module[\"addOnInit\"] = function() { abort(\"'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnPreMain\"]) Module[\"addOnPreMain\"] = function() { abort(\"'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnExit\"]) Module[\"addOnExit\"] = function() { abort(\"'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addOnPostRun\"]) Module[\"addOnPostRun\"] = function() { abort(\"'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"writeStringToMemory\"]) Module[\"writeStringToMemory\"] = function() { abort(\"'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"writeArrayToMemory\"]) Module[\"writeArrayToMemory\"] = function() { abort(\"'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"writeAsciiToMemory\"]) Module[\"writeAsciiToMemory\"] = function() { abort(\"'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addRunDependency\"]) Module[\"addRunDependency\"] = function() { abort(\"'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"removeRunDependency\"]) Module[\"removeRunDependency\"] = function() { abort(\"'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS\"]) Module[\"FS\"] = function() { abort(\"'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"FS_createFolder\"]) Module[\"FS_createFolder\"] = function() { abort(\"'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createPath\"]) Module[\"FS_createPath\"] = function() { abort(\"'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createDataFile\"]) Module[\"FS_createDataFile\"] = function() { abort(\"'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createPreloadedFile\"]) Module[\"FS_createPreloadedFile\"] = function() { abort(\"'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createLazyFile\"]) Module[\"FS_createLazyFile\"] = function() { abort(\"'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createLink\"]) Module[\"FS_createLink\"] = function() { abort(\"'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_createDevice\"]) Module[\"FS_createDevice\"] = function() { abort(\"'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"FS_unlink\"]) Module[\"FS_unlink\"] = function() { abort(\"'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you\") };\nif (!Module[\"GL\"]) Module[\"GL\"] = function() { abort(\"'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"staticAlloc\"]) Module[\"staticAlloc\"] = function() { abort(\"'staticAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"dynamicAlloc\"]) Module[\"dynamicAlloc\"] = function() { abort(\"'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"warnOnce\"]) Module[\"warnOnce\"] = function() { abort(\"'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"loadDynamicLibrary\"]) Module[\"loadDynamicLibrary\"] = function() { abort(\"'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"loadWebAssemblyModule\"]) Module[\"loadWebAssemblyModule\"] = function() { abort(\"'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getLEB\"]) Module[\"getLEB\"] = function() { abort(\"'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getFunctionTables\"]) Module[\"getFunctionTables\"] = function() { abort(\"'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"alignFunctionTables\"]) Module[\"alignFunctionTables\"] = function() { abort(\"'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"registerFunctions\"]) Module[\"registerFunctions\"] = function() { abort(\"'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"addFunction\"]) Module[\"addFunction\"] = function() { abort(\"'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"removeFunction\"]) Module[\"removeFunction\"] = function() { abort(\"'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getFuncWrapper\"]) Module[\"getFuncWrapper\"] = function() { abort(\"'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"prettyPrint\"]) Module[\"prettyPrint\"] = function() { abort(\"'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"makeBigInt\"]) Module[\"makeBigInt\"] = function() { abort(\"'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"dynCall\"]) Module[\"dynCall\"] = function() { abort(\"'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"getCompilerSetting\"]) Module[\"getCompilerSetting\"] = function() { abort(\"'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stackSave\"]) Module[\"stackSave\"] = function() { abort(\"'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stackRestore\"]) Module[\"stackRestore\"] = function() { abort(\"'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"stackAlloc\"]) Module[\"stackAlloc\"] = function() { abort(\"'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"intArrayFromBase64\"]) Module[\"intArrayFromBase64\"] = function() { abort(\"'intArrayFromBase64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Module[\"tryParseAsDataURI\"]) Module[\"tryParseAsDataURI\"] = function() { abort(\"'tryParseAsDataURI' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") };if (!Module[\"ALLOC_NORMAL\"]) Object.defineProperty(Module, \"ALLOC_NORMAL\", { get: function() { abort(\"'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Module[\"ALLOC_STACK\"]) Object.defineProperty(Module, \"ALLOC_STACK\", { get: function() { abort(\"'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Module[\"ALLOC_STATIC\"]) Object.defineProperty(Module, \"ALLOC_STATIC\", { get: function() { abort(\"'ALLOC_STATIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Module[\"ALLOC_DYNAMIC\"]) Object.defineProperty(Module, \"ALLOC_DYNAMIC\", { get: function() { abort(\"'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Module[\"ALLOC_NONE\"]) Object.defineProperty(Module, \"ALLOC_NONE\", { get: function() { abort(\"'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\n\nif (memoryInitializer) {\n  if (!isDataURI(memoryInitializer)) {\n    if (typeof Module['locateFile'] === 'function') {\n      memoryInitializer = Module['locateFile'](memoryInitializer);\n    } else if (Module['memoryInitializerPrefixURL']) {\n      memoryInitializer = Module['memoryInitializerPrefixURL'] + memoryInitializer;\n    }\n  }\n  if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {\n    var data = Module['readBinary'](memoryInitializer);\n    HEAPU8.set(data, GLOBAL_BASE);\n  } else {\n    addRunDependency('memory initializer');\n    var applyMemoryInitializer = function(data) {\n      if (data.byteLength) data = new Uint8Array(data);\n      for (var i = 0; i < data.length; i++) {\n        assert(HEAPU8[GLOBAL_BASE + i] === 0, \"area for memory initializer should not have been touched before it's loaded\");\n      }\n      HEAPU8.set(data, GLOBAL_BASE);\n      // Delete the typed array that contains the large blob of the memory initializer request response so that\n      // we won't keep unnecessary memory lying around. However, keep the XHR object itself alive so that e.g.\n      // its .status field can still be accessed later.\n      if (Module['memoryInitializerRequest']) delete Module['memoryInitializerRequest'].response;\n      removeRunDependency('memory initializer');\n    }\n    function doBrowserLoad() {\n      Module['readAsync'](memoryInitializer, applyMemoryInitializer, function() {\n        throw 'could not load memory initializer ' + memoryInitializer;\n      });\n    }\n    var memoryInitializerBytes = tryParseAsDataURI(memoryInitializer);\n    if (memoryInitializerBytes) {\n      applyMemoryInitializer(memoryInitializerBytes.buffer);\n    } else\n    if (Module['memoryInitializerRequest']) {\n      // a network request has already been created, just use that\n      function useRequest() {\n        var request = Module['memoryInitializerRequest'];\n        var response = request.response;\n        if (request.status !== 200 && request.status !== 0) {\n          var data = tryParseAsDataURI(Module['memoryInitializerRequestURL']);\n          if (data) {\n            response = data.buffer;\n          } else {\n            // If you see this warning, the issue may be that you are using locateFile or memoryInitializerPrefixURL, and defining them in JS. That\n            // means that the HTML file doesn't know about them, and when it tries to create the mem init request early, does it to the wrong place.\n            // Look in your browser's devtools network console to see what's going on.\n            console.warn('a problem seems to have happened with Module.memoryInitializerRequest, status: ' + request.status + ', retrying ' + memoryInitializer);\n            doBrowserLoad();\n            return;\n          }\n        }\n        applyMemoryInitializer(response);\n      }\n      if (Module['memoryInitializerRequest'].response) {\n        setTimeout(useRequest, 0); // it's already here; but, apply it asynchronously\n      } else {\n        Module['memoryInitializerRequest'].addEventListener('load', useRequest); // wait for it\n      }\n    } else {\n      // fetch it from the network ourselves\n      doBrowserLoad();\n    }\n  }\n}\n\n\n\n/**\n * @constructor\n * @extends {Error}\n * @this {ExitStatus}\n */\nfunction ExitStatus(status) {\n  this.name = \"ExitStatus\";\n  this.message = \"Program terminated with exit(\" + status + \")\";\n  this.status = status;\n};\nExitStatus.prototype = new Error();\nExitStatus.prototype.constructor = ExitStatus;\n\nvar initialStackTop;\nvar calledMain = false;\n\ndependenciesFulfilled = function runCaller() {\n  // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\n  if (!Module['calledRun']) run();\n  if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\n}\n\n\n\n\n\n/** @type {function(Array=)} */\nfunction run(args) {\n  args = args || Module['arguments'];\n\n  if (runDependencies > 0) {\n    return;\n  }\n\n  writeStackCookie();\n\n  preRun();\n\n  if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\n  if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\n\n  function doRun() {\n    if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\n    Module['calledRun'] = true;\n\n    if (ABORT) return;\n\n    ensureInitRuntime();\n\n    preMain();\n\n    if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\n\n    assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module[\"onRuntimeInitialized\"]');\n\n    postRun();\n  }\n\n  if (Module['setStatus']) {\n    Module['setStatus']('Running...');\n    setTimeout(function() {\n      setTimeout(function() {\n        Module['setStatus']('');\n      }, 1);\n      doRun();\n    }, 1);\n  } else {\n    doRun();\n  }\n  checkStackCookie();\n}\nModule['run'] = run;\n\nfunction checkUnflushedContent() {\n  // Compiler settings do not allow exiting the runtime, so flushing\n  // the streams is not possible. but in ASSERTIONS mode we check\n  // if there was something to flush, and if so tell the user they\n  // should request that the runtime be exitable.\n  // Normally we would not even include flush() at all, but in ASSERTIONS\n  // builds we do so just for this check, and here we see if there is any\n  // content to flush, that is, we check if there would have been\n  // something a non-ASSERTIONS build would have not seen.\n  // How we flush the streams depends on whether we are in NO_FILESYSTEM\n  // mode (which has its own special function for this; otherwise, all\n  // the code is inside libc)\n  var print = Module['print'];\n  var printErr = Module['printErr'];\n  var has = false;\n  Module['print'] = Module['printErr'] = function(x) {\n    has = true;\n  }\n  try { // it doesn't matter if it fails\n    var flush = flush_NO_FILESYSTEM;\n    if (flush) flush(0);\n  } catch(e) {}\n  Module['print'] = print;\n  Module['printErr'] = printErr;\n  if (has) {\n    warnOnce('stdio streams had content in them that was not flushed. you should set NO_EXIT_RUNTIME to 0 (see the FAQ), or make sure to emit a newline when you printf etc.');\n  }\n}\n\nfunction exit(status, implicit) {\n  checkUnflushedContent();\n\n  // if this is just main exit-ing implicitly, and the status is 0, then we\n  // don't need to do anything here and can just leave. if the status is\n  // non-zero, though, then we need to report it.\n  // (we may have warned about this earlier, if a situation justifies doing so)\n  if (implicit && Module['noExitRuntime'] && status === 0) {\n    return;\n  }\n\n  if (Module['noExitRuntime']) {\n    // if exit() was called, we may warn the user if the runtime isn't actually being shut down\n    if (!implicit) {\n      Module.printErr('exit(' + status + ') called, but NO_EXIT_RUNTIME is set, so halting execution but not exiting the runtime or preventing further async execution (build with NO_EXIT_RUNTIME=0, if you want a true shutdown)');\n    }\n  } else {\n\n    ABORT = true;\n    EXITSTATUS = status;\n    STACKTOP = initialStackTop;\n\n    exitRuntime();\n\n    if (Module['onExit']) Module['onExit'](status);\n  }\n\n  if (ENVIRONMENT_IS_NODE) {\n    process['exit'](status);\n  }\n  Module['quit'](status, new ExitStatus(status));\n}\nModule['exit'] = exit;\n\nvar abortDecorators = [];\n\nfunction abort(what) {\n  if (Module['onAbort']) {\n    Module['onAbort'](what);\n  }\n\n  if (what !== undefined) {\n    Module.print(what);\n    Module.printErr(what);\n    what = JSON.stringify(what)\n  } else {\n    what = '';\n  }\n\n  ABORT = true;\n  EXITSTATUS = 1;\n\n  var extra = '';\n  var output = 'abort(' + what + ') at ' + stackTrace() + extra;\n  if (abortDecorators) {\n    abortDecorators.forEach(function(decorator) {\n      output = decorator(output, what);\n    });\n  }\n  throw output;\n}\nModule['abort'] = abort;\n\n// {{PRE_RUN_ADDITIONS}}\n\nif (Module['preInit']) {\n  if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\n  while (Module['preInit'].length > 0) {\n    Module['preInit'].pop()();\n  }\n}\n\n\nModule[\"noExitRuntime\"] = true;\n\nrun();\n\n// {{POST_RUN_ADDITIONS}}\n\n\n\n\n\n// {{MODULE_ADDITIONS}}\n\n\n\n\n// laz-loader-worker.js\n//\n\n//import {Module} from \"./laz-perf.js\";\n\nlet instance = null; // laz-perf instance\n\nfunction readAs(buf, Type, offset, count) {\n\tcount = (count === undefined || count === 0 ? 1 : count);\n\tvar sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count);\n\n\tvar r = new Type(sub);\n\tif (count === undefined || count === 1)\n\t\treturn r[0];\n\n\tvar ret = [];\n\tfor (var i = 0 ; i < count ; i ++) {\n\t\tret.push(r[i]);\n\t}\n\n\treturn ret;\n}\n\nfunction parseLASHeader(arraybuffer) {\n\tvar o = { };\n\n\to.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3);\n\to.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8) & 0b111111;\n\to.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1);\n\n\to.extraBytes = 0;\n\n\tswitch (o.pointsFormatId) {\n\t\tcase 0: o.extraBytes = o.pointsStructSize - 20; break;\n\t\tcase 1: o.extraBytes = o.pointsStructSize - 28; break;\n\t\tcase 2: o.extraBytes = o.pointsStructSize - 26; break;\n\t\tcase 3: o.extraBytes = o.pointsStructSize - 34; break;\n\t}\n\n\to.pointsCount = readAs(arraybuffer, Uint32Array, 32 * 3 + 11);\n\n\tvar start = 32 * 3 + 35;\n\to.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24;\n\to.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24;\n\n\tvar bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48;\n\to.maxs = [bounds[0], bounds[2], bounds[4]];\n\to.mins = [bounds[1], bounds[3], bounds[5]];\n\n\treturn o;\n}\n\nfunction handleEvent(msg) {\n\tswitch(msg.type) {\n\t\tcase \"open\":\n\t\t\ttry {\n\t\t\t\tinstance = new Module.LASZip();\n\t\t\t\tvar abInt = new Uint8Array(msg.arraybuffer);\n\t\t\t\tvar buf = Module._malloc(msg.arraybuffer.byteLength);\n\n\t\t\t\tinstance.arraybuffer = msg.arraybuffer;\n\t\t\t\tinstance.buf = buf;\n\t\t\t\tModule.HEAPU8.set(abInt, buf);\n\t\t\t\tinstance.open(buf, msg.arraybuffer.byteLength);\n\n\t\t\t\tinstance.readOffset = 0;\n\n\t\t\t\tpostMessage({ type: \"open\", status: 1});\n\t\t\t}catch(e) {\n\t\t\t\tdebugger;\n\t\t\t\tpostMessage({ type: \"open\", status: 0, details: e });\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase \"header\":\n\t\t\tif (!instance)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"You need to open the file before reading the header\");\n\n\t\t\tvar header = parseLASHeader(instance.arraybuffer);\n\t\t\theader.pointsFormatId &= 0x3f;\n\t\t\tinstance.header = header;\n\t\t\tpostMessage({type: \"header\", status: 1, header: header});\n\t\t\tbreak;\n\n\t\tcase \"read\":\n\t\t\tif (!instance)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"You need to open the file before trying to read\");\n\n\t\t\tvar start = msg.start, count = msg.count, skip = msg.skip;\n\t\t\tvar o = instance;\n\n\t\t\tif (!o.header)\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"You need to query header before reading\");\n\n\t\t\tlet h = o.header;\n\n\t\t\tvar pointsToRead = Math.min(\n\t\t\t\t\tcount * skip, h.pointsCount - o.readOffset);\n\t\t\tvar bufferSize = Math.ceil(pointsToRead / skip);\n\t\t\tvar pointsRead = 0;\n\n\t\t\tlet buffer = new ArrayBuffer(bufferSize * h.pointsStructSize);\n\t\t\tlet this_buf = new Uint8Array(buffer);\n\t\t\tvar buf_read = Module._malloc(h.pointsStructSize);\n\n\t\t\tfor (var i = 0 ; i < pointsToRead ; i ++) {\n\t\t\t\to.getPoint(buf_read);\n\n\t\t\t\tif (i % skip === 0) {\n\t\t\t\t\tvar a = new Uint8Array(\n\t\t\t\t\t\t\tModule.HEAPU8.buffer,\n\t\t\t\t\t\t\tbuf_read,\n\t\t\t\t\t\t\th.pointsStructSize);\n\n\t\t\t\t\tthis_buf.set(\n\t\t\t\t\t\t\ta,\n\t\t\t\t\t\t\tpointsRead * h.pointsStructSize,\n\t\t\t\t\t\t\th.pointsStructSize);\n\n\t\t\t\t\t++pointsRead;\n\t\t\t\t}\n\n\t\t\t\t++o.readOffset;\n\t\t\t}\n\t\t\tModule._free(buf_read);\n\n\t\t\tlet transferables = [buffer];\n\n\t\t\tpostMessage({\n\t\t\t\ttype: 'header',\n\t\t\t\tstatus: 1,\n\t\t\t\tbuffer: buffer,\n\t\t\t\tcount: pointsRead,\n\t\t\t\thasMoreData: o.readOffset < o.header.pointsCount\n\t\t\t}, transferables);\n\n\t\t\tbreak;\n\n\t\tcase \"close\":\n\t\t\tif (instance !== null) {\n\t\t\t\tModule._free(instance.buf);\n\t\t\t\tinstance.delete();\n\t\t\t\tinstance = null;\n\t\t\t}else{\n\t\t\t\tdebugger;\n\t\t\t}\n\n\t\t\tpostMessage({ type: \"close\", status: 1});\n\t\t\tbreak;\n\t}\n}\n\nonmessage = function(event) {\n\ttry {\n\t\thandleEvent(event.data);\n\t} catch(e) {\n\t\tdebugger;\n\t\tpostMessage({type: event.data.type, status: 0, details: e});\n\t}\n};\n\n\n"
  },
  {
    "path": "libs/proj4/LICENSE.md",
    "content": "##Proj4js -- Javascript reprojection library. \n \nAuthors:\n- Mike Adair madairATdmsolutions.ca\n- Richard Greenwood richATgreenwoodmap.com\n- Didier Richard didier.richardATign.fr\n- Stephen Irons stephen.ironsATclear.net.nz\n- Olivier Terral oterralATgmail.com\n- Calvin Metcalf cmetcalfATappgeo.com\n\nCopyright (c) 2014, Mike Adair, Richard Greenwood, Didier Richard, Stephen Irons, Olivier Terral and Calvin Metcalf\n\n Permission is hereby granted, free of charge, to any person obtaining a\n copy of this software and associated documentation files (the \"Software\"),\n to deal in the Software without restriction, including without limitation\n the rights to use, copy, modify, merge, publish, distribute, sublicense,\n and/or sell copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included\n in all copies or substantial portions of the Software.\n\n _THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\n DEALINGS IN THE SOFTWARE._"
  },
  {
    "path": "libs/proj4/README.md",
    "content": "# PROJ4JS [![Build Status](https://travis-ci.org/proj4js/proj4js.svg)](https://travis-ci.org/proj4js/proj4js)\n\nProj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.\nOriginally a port of [PROJ.4](http://trac.osgeo.org/proj/) and [GCTCP C](http://edcftp.cr.usgs.gov/pub//software/gctpc) it is\na part of the [MetaCRS](http://wiki.osgeo.org/wiki/MetaCRS) group of projects.\n\n## Installing\n\nDepending on your preferences\n\n```bash\nnpm install proj4\nbower install proj4\njam install proj4\ncomponent install proj4js/proj4js\n```\n\nor just manually grab the file `proj4.js` from the [latest release](https://github.com/proj4js/proj4js/releases).\n\nif you do not want to download anything, Proj4js is also hosted on [cdnjs](http://www.cdnjs.com/libraries/proj4js) for direct use in your browser applications.\n\n## Using\n\nthe basic signature is:\n\n```javascript\nproj4(fromProjection[, toProjection, coordinates])\n```\n\nProjections can be proj or wkt strings.\n\nCoordinates may an object of the form `{x:x,y:y}` or an array of the form `[x,y]`.\n\nWhen all 3 arguments  are given, the result is that the coordinates are transformed from projection1 to projection 2. And returned in the same format that they were given in.\n\n```javascript\nvar firstProjection = 'PROJCS[\"NAD83 / Massachusetts Mainland\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"standard_parallel_1\",42.68333333333333],PARAMETER[\"standard_parallel_2\",41.71666666666667],PARAMETER[\"latitude_of_origin\",41],PARAMETER[\"central_meridian\",-71.5],PARAMETER[\"false_easting\",200000],PARAMETER[\"false_northing\",750000],AUTHORITY[\"EPSG\",\"26986\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]';\nvar secondProjection = \"+proj=gnom +lat_0=90 +lon_0=0 +x_0=6300000 +y_0=6300000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs\";\n//I'm not going to redefine those two in latter examples.\nproj4(firstProjection,secondProjection,[2,5]);\n// [-2690666.2977344505, 3662659.885459918]\n```\n\nIf only 1 projection is given then it is assumed that it is being projected *from* WGS84 (fromProjection is WGS84).\n\n```javascript\nproj4(firstProjection,[-71,41]);\n// [242075.00535055372, 750123.32090043]\n```\n\nIf no coordinates are given an object with two methods is returned, its methods are `forward` which projects from the first projection to the second and `inverse` which projects from the second to the first.\n\n```javascript\nproj4(firstProjection,secondProjection).forward([2,5]);\n// [-2690666.2977344505, 3662659.885459918]\nproj4(secondProjection,firstProjection).inverse([2,5]);\n// [-2690666.2977344505, 3662659.885459918]\n```\n\nand as above if only one projection is given, it's assumed to be coming from wgs84\n\n```javascript\nproj4(firstProjection).forward([-71,41]);\n// [242075.00535055372, 750123.32090043]\nproj4(firstProjection).inverse([242075.00535055372, 750123.32090043]);\n//[-71, 40.99999999999986]\n//the floating points to answer your question\n```\n\n## Named Projections\n\nIf you prefer to define a projection as a string and reference it that way, you may use the proj4.defs method which can be called 2 ways, with a name and projection:\n\n```js\nproj4.defs('WGS84', \"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\");\n```\n\nor with an array\n\n```js\nproj4.defs([\n  [\n    'EPSG:4326',\n    '+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees'],\n  [\n    'EPSG:4269',\n    '+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees'\n  ]\n]);\n```\n\nyou can then do \n\n```js\nproj4('EPSG:4326');\n```\n\ninstead of writing out the whole proj definition, by default proj4 has the following projections predefined:\n\n- 'EPSG:4326', which has the following alias\n    - 'WGS84'\n- 'EPSG:4269'\n- 'EPSG:3857', which has the following aliases\n    - 'EPSG:3785'\n    - 'GOOGLE'\n    - 'EPSG:900913'\n    - 'EPSG:102113'\n\ndefined projections can also be accessed through the proj4.defs function (`proj4.defs('EPSG:4326')`).\n\nproj4.defs can also be used to define a named alias:\n\n```javascript\nproj4.defs('urn:x-ogc:def:crs:EPSG:4326', proj4.defs('EPSG:4326'));\n``` \n\n## Developing\nto set up build tools make sure you have node and grunt-cli installed and then run `npm install`\n\nto do the complete build and browser tests run\n\n```bash\ngrunt\n```\n\nto run node tests run\n\n```bash\nnpm test\n```\n\nto run node tests with coverage run\n\n```bash\nnode test --coverage\n```\n\nto create a build with only default projections (latlon and Mercator) run \n\n```bash\ngrunt build\n```\n\nto create a build with only custom projections include a comma separated list of projections codes (the file name in 'lib/projections' without the '.js') after a colon, e.g.\n\n```bash\ngrunt build:tmerc\n#includes transverse Mercator\ngrunt build:lcc\n#includes lambert conformal conic\ngrunt build:omerc,moll\n#includes oblique Mercator and Mollweide\n```\n"
  },
  {
    "path": "libs/proj4/proj4.js",
    "content": "!function(a){if(\"object\"==typeof exports)module.exports=a();else if(\"function\"==typeof define&&define.amd)define(a);else{var b;\"undefined\"!=typeof window?b=window:\"undefined\"!=typeof global?b=global:\"undefined\"!=typeof self&&(b=self),b.proj4=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i=\"function\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error(\"Cannot find module '\"+g+\"'\")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f=\"function\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){function Point(a,b,c){if(!(this instanceof Point))return new Point(a,b,c);if(Array.isArray(a))this.x=a[0],this.y=a[1],this.z=a[2]||0;else if(\"object\"==typeof a)this.x=a.x,this.y=a.y,this.z=a.z||0;else if(\"string\"==typeof a&&\"undefined\"==typeof b){var d=a.split(\",\");this.x=parseFloat(d[0],10),this.y=parseFloat(d[1],10),this.z=parseFloat(d[2],10)||0}else this.x=a,this.y=b,this.z=c||0;console.warn(\"proj4.Point will be removed in version 3, use proj4.toPoint\")}var d=a(\"mgrs\");Point.fromMGRS=function(a){return new Point(d.toPoint(a))},Point.prototype.toMGRS=function(a){return d.forward([this.x,this.y],a)},b.exports=Point},{mgrs:67}],2:[function(a,b,c){function Projection(a,b){if(!(this instanceof Projection))return new Projection(a);b=b||function(a){if(a)throw a};var c=d(a);if(\"object\"!=typeof c)return void b(a);var f=g(c),h=Projection.projections.get(f.projName);h?(e(this,f),e(this,h),this.init(),b(null,this)):b(a)}var d=a(\"./parseCode\"),e=a(\"./extend\"),f=a(\"./projections\"),g=a(\"./deriveConstants\");Projection.projections=f,Projection.projections.start(),b.exports=Projection},{\"./deriveConstants\":33,\"./extend\":34,\"./parseCode\":37,\"./projections\":39}],3:[function(a,b,c){b.exports=function(a,b,c){var d,e,f,g=c.x,h=c.y,i=c.z||0;for(f=0;3>f;f++)if(!b||2!==f||void 0!==c.z)switch(0===f?(d=g,e=\"x\"):1===f?(d=h,e=\"y\"):(d=i,e=\"z\"),a.axis[f]){case\"e\":c[e]=d;break;case\"w\":c[e]=-d;break;case\"n\":c[e]=d;break;case\"s\":c[e]=-d;break;case\"u\":void 0!==c[e]&&(c.z=d);break;case\"d\":void 0!==c[e]&&(c.z=-d);break;default:return null}return c}},{}],4:[function(a,b,c){var d=Math.PI/2,e=a(\"./sign\");b.exports=function(a){return Math.abs(a)<d?a:a-e(a)*Math.PI}},{\"./sign\":21}],5:[function(a,b,c){var d=2*Math.PI,e=3.14159265359,f=a(\"./sign\");b.exports=function(a){return Math.abs(a)<=e?a:a-f(a)*d}},{\"./sign\":21}],6:[function(a,b,c){b.exports=function(a){return Math.abs(a)>1&&(a=a>1?1:-1),Math.asin(a)}},{}],7:[function(a,b,c){b.exports=function(a){return 1-.25*a*(1+a/16*(3+1.25*a))}},{}],8:[function(a,b,c){b.exports=function(a){return.375*a*(1+.25*a*(1+.46875*a))}},{}],9:[function(a,b,c){b.exports=function(a){return.05859375*a*a*(1+.75*a)}},{}],10:[function(a,b,c){b.exports=function(a){return a*a*a*(35/3072)}},{}],11:[function(a,b,c){b.exports=function(a,b,c){var d=b*c;return a/Math.sqrt(1-d*d)}},{}],12:[function(a,b,c){b.exports=function(a,b,c,d,e){var f,g;f=a/b;for(var h=0;15>h;h++)if(g=(a-(b*f-c*Math.sin(2*f)+d*Math.sin(4*f)-e*Math.sin(6*f)))/(b-2*c*Math.cos(2*f)+4*d*Math.cos(4*f)-6*e*Math.cos(6*f)),f+=g,Math.abs(g)<=1e-10)return f;return NaN}},{}],13:[function(a,b,c){var d=Math.PI/2;b.exports=function(a,b){var c=1-(1-a*a)/(2*a)*Math.log((1-a)/(1+a));if(Math.abs(Math.abs(b)-c)<1e-6)return 0>b?-1*d:d;for(var e,f,g,h,i=Math.asin(.5*b),j=0;30>j;j++)if(f=Math.sin(i),g=Math.cos(i),h=a*f,e=Math.pow(1-h*h,2)/(2*g)*(b/(1-a*a)-f/(1-h*h)+.5/a*Math.log((1-h)/(1+h))),i+=e,Math.abs(e)<=1e-10)return i;return NaN}},{}],14:[function(a,b,c){b.exports=function(a,b,c,d,e){return a*e-b*Math.sin(2*e)+c*Math.sin(4*e)-d*Math.sin(6*e)}},{}],15:[function(a,b,c){b.exports=function(a,b,c){var d=a*b;return c/Math.sqrt(1-d*d)}},{}],16:[function(a,b,c){var d=Math.PI/2;b.exports=function(a,b){for(var c,e,f=.5*a,g=d-2*Math.atan(b),h=0;15>=h;h++)if(c=a*Math.sin(g),e=d-2*Math.atan(b*Math.pow((1-c)/(1+c),f))-g,g+=e,Math.abs(e)<=1e-10)return g;return-9999}},{}],17:[function(a,b,c){var d=1,e=.25,f=.046875,g=.01953125,h=.01068115234375,i=.75,j=.46875,k=.013020833333333334,l=.007120768229166667,m=.3645833333333333,n=.005696614583333333,o=.3076171875;b.exports=function(a){var b=[];b[0]=d-a*(e+a*(f+a*(g+a*h))),b[1]=a*(i-a*(f+a*(g+a*h)));var c=a*a;return b[2]=c*(j-a*(k+a*l)),c*=a,b[3]=c*(m-a*n),b[4]=c*a*o,b}},{}],18:[function(a,b,c){var d=a(\"./pj_mlfn\"),e=1e-10,f=20;b.exports=function(a,b,c){for(var g=1/(1-b),h=a,i=f;i;--i){var j=Math.sin(h),k=1-b*j*j;if(k=(d(h,j,Math.cos(h),c)-a)*(k*Math.sqrt(k))*g,h-=k,Math.abs(k)<e)return h}return h}},{\"./pj_mlfn\":19}],19:[function(a,b,c){b.exports=function(a,b,c,d){return c*=b,b*=b,d[0]*a-c*(d[1]+b*(d[2]+b*(d[3]+b*d[4])))}},{}],20:[function(a,b,c){b.exports=function(a,b){var c;return a>1e-7?(c=a*b,(1-a*a)*(b/(1-c*c)-.5/a*Math.log((1-c)/(1+c)))):2*b}},{}],21:[function(a,b,c){b.exports=function(a){return 0>a?-1:1}},{}],22:[function(a,b,c){b.exports=function(a,b){return Math.pow((1-a)/(1+a),b)}},{}],23:[function(a,b,c){b.exports=function(a){var b={x:a[0],y:a[1]};return a.length>2&&(b.z=a[2]),a.length>3&&(b.m=a[3]),b}},{}],24:[function(a,b,c){var d=Math.PI/2;b.exports=function(a,b,c){var e=a*c,f=.5*a;return e=Math.pow((1-e)/(1+e),f),Math.tan(.5*(d-b))/e}},{}],25:[function(a,b,c){c.wgs84={towgs84:\"0,0,0\",ellipse:\"WGS84\",datumName:\"WGS84\"},c.ch1903={towgs84:\"674.374,15.056,405.346\",ellipse:\"bessel\",datumName:\"swiss\"},c.ggrs87={towgs84:\"-199.87,74.79,246.62\",ellipse:\"GRS80\",datumName:\"Greek_Geodetic_Reference_System_1987\"},c.nad83={towgs84:\"0,0,0\",ellipse:\"GRS80\",datumName:\"North_American_Datum_1983\"},c.nad27={nadgrids:\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",ellipse:\"clrk66\",datumName:\"North_American_Datum_1927\"},c.potsdam={towgs84:\"606.0,23.0,413.0\",ellipse:\"bessel\",datumName:\"Potsdam Rauenberg 1950 DHDN\"},c.carthage={towgs84:\"-263.0,6.0,431.0\",ellipse:\"clark80\",datumName:\"Carthage 1934 Tunisia\"},c.hermannskogel={towgs84:\"653.0,-212.0,449.0\",ellipse:\"bessel\",datumName:\"Hermannskogel\"},c.ire65={towgs84:\"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",ellipse:\"mod_airy\",datumName:\"Ireland 1965\"},c.rassadiran={towgs84:\"-133.63,-157.5,-158.62\",ellipse:\"intl\",datumName:\"Rassadiran\"},c.nzgd49={towgs84:\"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",ellipse:\"intl\",datumName:\"New Zealand Geodetic Datum 1949\"},c.osgb36={towgs84:\"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",ellipse:\"airy\",datumName:\"Airy 1830\"},c.s_jtsk={towgs84:\"589,76,480\",ellipse:\"bessel\",datumName:\"S-JTSK (Ferro)\"},c.beduaram={towgs84:\"-106,-87,188\",ellipse:\"clrk80\",datumName:\"Beduaram\"},c.gunung_segara={towgs84:\"-403,684,41\",ellipse:\"bessel\",datumName:\"Gunung Segara Jakarta\"},c.rnb72={towgs84:\"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",ellipse:\"intl\",datumName:\"Reseau National Belge 1972\"}},{}],26:[function(a,b,c){c.MERIT={a:6378137,rf:298.257,ellipseName:\"MERIT 1983\"},c.SGS85={a:6378136,rf:298.257,ellipseName:\"Soviet Geodetic System 85\"},c.GRS80={a:6378137,rf:298.257222101,ellipseName:\"GRS 1980(IUGG, 1980)\"},c.IAU76={a:6378140,rf:298.257,ellipseName:\"IAU 1976\"},c.airy={a:6377563.396,b:6356256.91,ellipseName:\"Airy 1830\"},c.APL4={a:6378137,rf:298.25,ellipseName:\"Appl. Physics. 1965\"},c.NWL9D={a:6378145,rf:298.25,ellipseName:\"Naval Weapons Lab., 1965\"},c.mod_airy={a:6377340.189,b:6356034.446,ellipseName:\"Modified Airy\"},c.andrae={a:6377104.43,rf:300,ellipseName:\"Andrae 1876 (Den., Iclnd.)\"},c.aust_SA={a:6378160,rf:298.25,ellipseName:\"Australian Natl & S. Amer. 1969\"},c.GRS67={a:6378160,rf:298.247167427,ellipseName:\"GRS 67(IUGG 1967)\"},c.bessel={a:6377397.155,rf:299.1528128,ellipseName:\"Bessel 1841\"},c.bess_nam={a:6377483.865,rf:299.1528128,ellipseName:\"Bessel 1841 (Namibia)\"},c.clrk66={a:6378206.4,b:6356583.8,ellipseName:\"Clarke 1866\"},c.clrk80={a:6378249.145,rf:293.4663,ellipseName:\"Clarke 1880 mod.\"},c.clrk58={a:6378293.645208759,rf:294.2606763692654,ellipseName:\"Clarke 1858\"},c.CPM={a:6375738.7,rf:334.29,ellipseName:\"Comm. des Poids et Mesures 1799\"},c.delmbr={a:6376428,rf:311.5,ellipseName:\"Delambre 1810 (Belgium)\"},c.engelis={a:6378136.05,rf:298.2566,ellipseName:\"Engelis 1985\"},c.evrst30={a:6377276.345,rf:300.8017,ellipseName:\"Everest 1830\"},c.evrst48={a:6377304.063,rf:300.8017,ellipseName:\"Everest 1948\"},c.evrst56={a:6377301.243,rf:300.8017,ellipseName:\"Everest 1956\"},c.evrst69={a:6377295.664,rf:300.8017,ellipseName:\"Everest 1969\"},c.evrstSS={a:6377298.556,rf:300.8017,ellipseName:\"Everest (Sabah & Sarawak)\"},c.fschr60={a:6378166,rf:298.3,ellipseName:\"Fischer (Mercury Datum) 1960\"},c.fschr60m={a:6378155,rf:298.3,ellipseName:\"Fischer 1960\"},c.fschr68={a:6378150,rf:298.3,ellipseName:\"Fischer 1968\"},c.helmert={a:6378200,rf:298.3,ellipseName:\"Helmert 1906\"},c.hough={a:6378270,rf:297,ellipseName:\"Hough\"},c.intl={a:6378388,rf:297,ellipseName:\"International 1909 (Hayford)\"},c.kaula={a:6378163,rf:298.24,ellipseName:\"Kaula 1961\"},c.lerch={a:6378139,rf:298.257,ellipseName:\"Lerch 1979\"},c.mprts={a:6397300,rf:191,ellipseName:\"Maupertius 1738\"},c.new_intl={a:6378157.5,b:6356772.2,ellipseName:\"New International 1967\"},c.plessis={a:6376523,rf:6355863,ellipseName:\"Plessis 1817 (France)\"},c.krass={a:6378245,rf:298.3,ellipseName:\"Krassovsky, 1942\"},c.SEasia={a:6378155,b:6356773.3205,ellipseName:\"Southeast Asia\"},c.walbeck={a:6376896,b:6355834.8467,ellipseName:\"Walbeck\"},c.WGS60={a:6378165,rf:298.3,ellipseName:\"WGS 60\"},c.WGS66={a:6378145,rf:298.25,ellipseName:\"WGS 66\"},c.WGS7={a:6378135,rf:298.26,ellipseName:\"WGS 72\"},c.WGS84={a:6378137,rf:298.257223563,ellipseName:\"WGS 84\"},c.sphere={a:6370997,b:6370997,ellipseName:\"Normal Sphere (r=6370997)\"}},{}],27:[function(a,b,c){c.greenwich=0,c.lisbon=-9.131906111111,c.paris=2.337229166667,c.bogota=-74.080916666667,c.madrid=-3.687938888889,c.rome=12.452333333333,c.bern=7.439583333333,c.jakarta=106.807719444444,c.ferro=-17.666666666667,c.brussels=4.367975,c.stockholm=18.058277777778,c.athens=23.7163375,c.oslo=10.722916666667},{}],28:[function(a,b,c){c.ft={to_meter:.3048},c[\"us-ft\"]={to_meter:1200/3937}},{}],29:[function(a,b,c){function d(a,b,c){var d;return Array.isArray(c)?(d=g(a,b,c),3===c.length?[d.x,d.y,d.z]:[d.x,d.y]):g(a,b,c)}function e(a){return a instanceof f?a:a.oProj?a.oProj:f(a)}function proj4(a,b,c){a=e(a);var f,g=!1;return\"undefined\"==typeof b?(b=a,a=h,g=!0):(\"undefined\"!=typeof b.x||Array.isArray(b))&&(c=b,b=a,a=h,g=!0),b=e(b),c?d(a,b,c):(f={forward:function(c){return d(a,b,c)},inverse:function(c){return d(b,a,c)}},g&&(f.oProj=b),f)}var f=a(\"./Proj\"),g=a(\"./transform\"),h=f(\"WGS84\");b.exports=proj4},{\"./Proj\":2,\"./transform\":65}],30:[function(a,b,c){var d=Math.PI/2,e=1,f=2,g=3,h=4,i=5,j=484813681109536e-20,k=1.0026,l=.3826834323650898,m=function(a){return this instanceof m?(this.datum_type=h,void(a&&(a.datumCode&&\"none\"===a.datumCode&&(this.datum_type=i),a.datum_params&&(this.datum_params=a.datum_params.map(parseFloat),(0!==this.datum_params[0]||0!==this.datum_params[1]||0!==this.datum_params[2])&&(this.datum_type=e),this.datum_params.length>3&&(0!==this.datum_params[3]||0!==this.datum_params[4]||0!==this.datum_params[5]||0!==this.datum_params[6])&&(this.datum_type=f,this.datum_params[3]*=j,this.datum_params[4]*=j,this.datum_params[5]*=j,this.datum_params[6]=this.datum_params[6]/1e6+1)),this.datum_type=a.grids?g:this.datum_type,this.a=a.a,this.b=a.b,this.es=a.es,this.ep2=a.ep2,this.datum_type===g&&(this.grids=a.grids)))):new m(a)};m.prototype={compare_datums:function(a){return this.datum_type!==a.datum_type?!1:this.a!==a.a||Math.abs(this.es-a.es)>5e-11?!1:this.datum_type===e?this.datum_params[0]===a.datum_params[0]&&this.datum_params[1]===a.datum_params[1]&&this.datum_params[2]===a.datum_params[2]:this.datum_type===f?this.datum_params[0]===a.datum_params[0]&&this.datum_params[1]===a.datum_params[1]&&this.datum_params[2]===a.datum_params[2]&&this.datum_params[3]===a.datum_params[3]&&this.datum_params[4]===a.datum_params[4]&&this.datum_params[5]===a.datum_params[5]&&this.datum_params[6]===a.datum_params[6]:this.datum_type===g||a.datum_type===g?this.nadgrids===a.nadgrids:!0},geodetic_to_geocentric:function(a){var b,c,e,f,g,h,i,j=a.x,k=a.y,l=a.z?a.z:0,m=0;if(-d>k&&k>-1.001*d)k=-d;else if(k>d&&1.001*d>k)k=d;else if(-d>k||k>d)return null;return j>Math.PI&&(j-=2*Math.PI),g=Math.sin(k),i=Math.cos(k),h=g*g,f=this.a/Math.sqrt(1-this.es*h),b=(f+l)*i*Math.cos(j),c=(f+l)*i*Math.sin(j),e=(f*(1-this.es)+l)*g,a.x=b,a.y=c,a.z=e,m},geocentric_to_geodetic:function(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t=1e-12,u=t*t,v=30,w=a.x,x=a.y,y=a.z?a.z:0;if(o=!1,b=Math.sqrt(w*w+x*x),c=Math.sqrt(w*w+x*x+y*y),b/this.a<t){if(o=!0,q=0,c/this.a<t)return r=d,void(s=-this.b)}else q=Math.atan2(x,w);e=y/c,f=b/c,g=1/Math.sqrt(1-this.es*(2-this.es)*f*f),j=f*(1-this.es)*g,k=e*g,p=0;do p++,i=this.a/Math.sqrt(1-this.es*k*k),s=b*j+y*k-i*(1-this.es*k*k),h=this.es*i/(i+s),g=1/Math.sqrt(1-h*(2-h)*f*f),l=f*(1-h)*g,m=e*g,n=m*j-l*k,j=l,k=m;while(n*n>u&&v>p);return r=Math.atan(m/Math.abs(l)),a.x=q,a.y=r,a.z=s,a},geocentric_to_geodetic_noniter:function(a){var b,c,e,f,g,h,i,j,m,n,o,p,q,r,s,t,u,v=a.x,w=a.y,x=a.z?a.z:0;if(v=parseFloat(v),w=parseFloat(w),x=parseFloat(x),u=!1,0!==v)b=Math.atan2(w,v);else if(w>0)b=d;else if(0>w)b=-d;else if(u=!0,b=0,x>0)c=d;else{if(!(0>x))return c=d,void(e=-this.b);c=-d}return g=v*v+w*w,f=Math.sqrt(g),h=x*k,j=Math.sqrt(h*h+g),n=h/j,p=f/j,o=n*n*n,i=x+this.b*this.ep2*o,t=f-this.a*this.es*p*p*p,m=Math.sqrt(i*i+t*t),q=i/m,r=t/m,s=this.a/Math.sqrt(1-this.es*q*q),e=r>=l?f/r-s:-l>=r?f/-r-s:x/q+s*(this.es-1),u===!1&&(c=Math.atan(q/r)),a.x=b,a.y=c,a.z=e,a},geocentric_to_wgs84:function(a){if(this.datum_type===e)a.x+=this.datum_params[0],a.y+=this.datum_params[1],a.z+=this.datum_params[2];else if(this.datum_type===f){var b=this.datum_params[0],c=this.datum_params[1],d=this.datum_params[2],g=this.datum_params[3],h=this.datum_params[4],i=this.datum_params[5],j=this.datum_params[6],k=j*(a.x-i*a.y+h*a.z)+b,l=j*(i*a.x+a.y-g*a.z)+c,m=j*(-h*a.x+g*a.y+a.z)+d;a.x=k,a.y=l,a.z=m}},geocentric_from_wgs84:function(a){if(this.datum_type===e)a.x-=this.datum_params[0],a.y-=this.datum_params[1],a.z-=this.datum_params[2];else if(this.datum_type===f){var b=this.datum_params[0],c=this.datum_params[1],d=this.datum_params[2],g=this.datum_params[3],h=this.datum_params[4],i=this.datum_params[5],j=this.datum_params[6],k=(a.x-b)/j,l=(a.y-c)/j,m=(a.z-d)/j;a.x=k+i*l-h*m,a.y=-i*k+l+g*m,a.z=h*k-g*l+m}}},b.exports=m},{}],31:[function(a,b,c){var d=1,e=2,f=3,g=5,h=6378137,i=.006694379990141316;b.exports=function(a,b,c){function j(a){return a===d||a===e}var k,l,m;if(a.compare_datums(b))return c;if(a.datum_type===g||b.datum_type===g)return c;var n=a.a,o=a.es,p=b.a,q=b.es,r=a.datum_type;if(r===f)if(0===this.apply_gridshift(a,0,c))a.a=h,a.es=i;else{if(!a.datum_params)return a.a=n,a.es=a.es,c;for(k=1,l=0,m=a.datum_params.length;m>l;l++)k*=a.datum_params[l];if(0===k)return a.a=n,a.es=a.es,c;r=a.datum_params.length>3?e:d}return b.datum_type===f&&(b.a=h,b.es=i),(a.es!==b.es||a.a!==b.a||j(r)||j(b.datum_type))&&(a.geodetic_to_geocentric(c),j(a.datum_type)&&a.geocentric_to_wgs84(c),j(b.datum_type)&&b.geocentric_from_wgs84(c),b.geocentric_to_geodetic(c)),b.datum_type===f&&this.apply_gridshift(b,1,c),a.a=n,a.es=o,b.a=p,b.es=q,c}},{}],32:[function(a,b,c){function d(a){var b=this;if(2===arguments.length){var c=arguments[1];\"string\"==typeof c?\"+\"===c.charAt(0)?d[a]=f(arguments[1]):d[a]=g(arguments[1]):d[a]=c}else if(1===arguments.length){if(Array.isArray(a))return a.map(function(a){Array.isArray(a)?d.apply(b,a):d(a)});if(\"string\"==typeof a){if(a in d)return d[a]}else\"EPSG\"in a?d[\"EPSG:\"+a.EPSG]=a:\"ESRI\"in a?d[\"ESRI:\"+a.ESRI]=a:\"IAU2000\"in a?d[\"IAU2000:\"+a.IAU2000]=a:console.log(a);return}}var e=a(\"./global\"),f=a(\"./projString\"),g=a(\"./wkt\");e(d),b.exports=d},{\"./global\":35,\"./projString\":38,\"./wkt\":66}],33:[function(a,b,c){var d=a(\"./constants/Datum\"),e=a(\"./constants/Ellipsoid\"),f=a(\"./extend\"),g=a(\"./datum\"),h=1e-10,i=.16666666666666666,j=.04722222222222222,k=.022156084656084655;b.exports=function(a){if(a.datumCode&&\"none\"!==a.datumCode){var b=d[a.datumCode];b&&(a.datum_params=b.towgs84?b.towgs84.split(\",\"):null,a.ellps=b.ellipse,a.datumName=b.datumName?b.datumName:a.datumCode)}if(!a.a){var c=e[a.ellps]?e[a.ellps]:e.WGS84;f(a,c)}return a.rf&&!a.b&&(a.b=(1-1/a.rf)*a.a),(0===a.rf||Math.abs(a.a-a.b)<h)&&(a.sphere=!0,a.b=a.a),a.a2=a.a*a.a,a.b2=a.b*a.b,a.es=(a.a2-a.b2)/a.a2,a.e=Math.sqrt(a.es),a.R_A&&(a.a*=1-a.es*(i+a.es*(j+a.es*k)),a.a2=a.a*a.a,a.b2=a.b*a.b,a.es=0),a.ep2=(a.a2-a.b2)/a.b2,a.k0||(a.k0=1),a.axis||(a.axis=\"enu\"),a.datum||(a.datum=g(a)),a}},{\"./constants/Datum\":25,\"./constants/Ellipsoid\":26,\"./datum\":30,\"./extend\":34}],34:[function(a,b,c){b.exports=function(a,b){a=a||{};var c,d;if(!b)return a;for(d in b)c=b[d],void 0!==c&&(a[d]=c);return a}},{}],35:[function(a,b,c){b.exports=function(a){a(\"EPSG:4326\",\"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\"),a(\"EPSG:4269\",\"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\"),a(\"EPSG:3857\",\"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\"),a.WGS84=a[\"EPSG:4326\"],a[\"EPSG:3785\"]=a[\"EPSG:3857\"],a.GOOGLE=a[\"EPSG:3857\"],a[\"EPSG:900913\"]=a[\"EPSG:3857\"],a[\"EPSG:102113\"]=a[\"EPSG:3857\"]}},{}],36:[function(a,b,c){var proj4=a(\"./core\");proj4.defaultDatum=\"WGS84\",proj4.Proj=a(\"./Proj\"),proj4.WGS84=new proj4.Proj(\"WGS84\"),proj4.Point=a(\"./Point\"),proj4.toPoint=a(\"./common/toPoint\"),proj4.defs=a(\"./defs\"),proj4.transform=a(\"./transform\"),proj4.mgrs=a(\"mgrs\"),proj4.version=a(\"../package.json\").version,a(\"./includedProjections\")(proj4),b.exports=proj4},{\"../package.json\":68,\"./Point\":1,\"./Proj\":2,\"./common/toPoint\":23,\"./core\":29,\"./defs\":32,\"./includedProjections\":\"hTEDpn\",\"./transform\":65,mgrs:67}],37:[function(a,b,c){function d(a){return\"string\"==typeof a}function e(a){return a in i}function f(a){var b=[\"GEOGCS\",\"GEOCCS\",\"PROJCS\",\"LOCAL_CS\"];return b.reduce(function(b,c){return b+1+a.indexOf(c)},0)}function g(a){return\"+\"===a[0]}function h(a){return d(a)?e(a)?i[a]:f(a)?j(a):g(a)?k(a):void 0:a}var i=a(\"./defs\"),j=a(\"./wkt\"),k=a(\"./projString\");b.exports=h},{\"./defs\":32,\"./projString\":38,\"./wkt\":66}],38:[function(a,b,c){var d=.017453292519943295,e=a(\"./constants/PrimeMeridian\"),f=a(\"./constants/units\");b.exports=function(a){var b={},c={};a.split(\"+\").map(function(a){return a.trim()}).filter(function(a){return a}).forEach(function(a){var b=a.split(\"=\");b.push(!0),c[b[0].toLowerCase()]=b[1]});var g,h,i,j={proj:\"projName\",datum:\"datumCode\",rf:function(a){b.rf=parseFloat(a)},lat_0:function(a){b.lat0=a*d},lat_1:function(a){b.lat1=a*d},lat_2:function(a){b.lat2=a*d},lat_ts:function(a){b.lat_ts=a*d},lon_0:function(a){b.long0=a*d},lon_1:function(a){b.long1=a*d},lon_2:function(a){b.long2=a*d},alpha:function(a){b.alpha=parseFloat(a)*d},lonc:function(a){b.longc=a*d},x_0:function(a){b.x0=parseFloat(a)},y_0:function(a){b.y0=parseFloat(a)},k_0:function(a){b.k0=parseFloat(a)},k:function(a){b.k0=parseFloat(a)},a:function(a){b.a=parseFloat(a)},b:function(a){b.b=parseFloat(a)},r_a:function(){b.R_A=!0},zone:function(a){b.zone=parseInt(a,10)},south:function(){b.utmSouth=!0},towgs84:function(a){b.datum_params=a.split(\",\").map(function(a){return parseFloat(a)})},to_meter:function(a){b.to_meter=parseFloat(a)},units:function(a){b.units=a,f[a]&&(b.to_meter=f[a].to_meter)},from_greenwich:function(a){b.from_greenwich=a*d},pm:function(a){b.from_greenwich=(e[a]?e[a]:parseFloat(a))*d},nadgrids:function(a){\"@null\"===a?b.datumCode=\"none\":b.nadgrids=a},axis:function(a){var c=\"ewnsud\";3===a.length&&-1!==c.indexOf(a.substr(0,1))&&-1!==c.indexOf(a.substr(1,1))&&-1!==c.indexOf(a.substr(2,1))&&(b.axis=a)}};for(g in c)h=c[g],g in j?(i=j[g],\"function\"==typeof i?i(h):b[i]=h):b[g]=h;return\"string\"==typeof b.datumCode&&\"WGS84\"!==b.datumCode&&(b.datumCode=b.datumCode.toLowerCase()),b}},{\"./constants/PrimeMeridian\":27,\"./constants/units\":28}],39:[function(a,b,c){function d(a,b){var c=g.length;return a.names?(g[c]=a,a.names.forEach(function(a){f[a.toLowerCase()]=c}),this):(console.log(b),!0)}var e=[a(\"./projections/merc\"),a(\"./projections/longlat\")],f={},g=[];c.add=d,c.get=function(a){if(!a)return!1;var b=a.toLowerCase();return\"undefined\"!=typeof f[b]&&g[f[b]]?g[f[b]]:void 0},c.start=function(){e.forEach(d)}},{\"./projections/longlat\":51,\"./projections/merc\":52}],40:[function(a,b,c){var d=1e-10,e=a(\"../common/msfnz\"),f=a(\"../common/qsfnz\"),g=a(\"../common/adjust_lon\"),h=a(\"../common/asinz\");c.init=function(){Math.abs(this.lat1+this.lat2)<d||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=e(this.e3,this.sin_po,this.cos_po),this.qs1=f(this.e3,this.sin_po,this.cos_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=e(this.e3,this.sin_po,this.cos_po),this.qs2=f(this.e3,this.sin_po,this.cos_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=f(this.e3,this.sin_po,this.cos_po),Math.abs(this.lat1-this.lat2)>d?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},c.forward=function(a){var b=a.x,c=a.y;this.sin_phi=Math.sin(c),this.cos_phi=Math.cos(c);var d=f(this.e3,this.sin_phi,this.cos_phi),e=this.a*Math.sqrt(this.c-this.ns0*d)/this.ns0,h=this.ns0*g(b-this.long0),i=e*Math.sin(h)+this.x0,j=this.rh-e*Math.cos(h)+this.y0;return a.x=i,a.y=j,a},c.inverse=function(a){var b,c,d,e,f,h;return a.x-=this.x0,a.y=this.rh-a.y+this.y0,this.ns0>=0?(b=Math.sqrt(a.x*a.x+a.y*a.y),d=1):(b=-Math.sqrt(a.x*a.x+a.y*a.y),d=-1),e=0,0!==b&&(e=Math.atan2(d*a.x,d*a.y)),d=b*this.ns0/this.a,this.sphere?h=Math.asin((this.c-d*d)/(2*this.ns0)):(c=(this.c-d*d)/this.ns0,h=this.phi1z(this.e3,c)),f=g(e/this.ns0+this.long0),a.x=f,a.y=h,a},c.phi1z=function(a,b){var c,e,f,g,i,j=h(.5*b);if(d>a)return j;for(var k=a*a,l=1;25>=l;l++)if(c=Math.sin(j),e=Math.cos(j),f=a*c,g=1-f*f,i=.5*g*g/e*(b/(1-k)-c/g+.5/a*Math.log((1-f)/(1+f))),j+=i,Math.abs(i)<=1e-7)return j;return null},c.names=[\"Albers_Conic_Equal_Area\",\"Albers\",\"aea\"]},{\"../common/adjust_lon\":5,\"../common/asinz\":6,\"../common/msfnz\":15,\"../common/qsfnz\":20}],41:[function(a,b,c){var d=a(\"../common/adjust_lon\"),e=Math.PI/2,f=1e-10,g=a(\"../common/mlfn\"),h=a(\"../common/e0fn\"),i=a(\"../common/e1fn\"),j=a(\"../common/e2fn\"),k=a(\"../common/e3fn\"),l=a(\"../common/gN\"),m=a(\"../common/asinz\"),n=a(\"../common/imlfn\");c.init=function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},c.forward=function(a){var b,c,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H=a.x,I=a.y,J=Math.sin(a.y),K=Math.cos(a.y),L=d(H-this.long0);return this.sphere?Math.abs(this.sin_p12-1)<=f?(a.x=this.x0+this.a*(e-I)*Math.sin(L),a.y=this.y0-this.a*(e-I)*Math.cos(L),a):Math.abs(this.sin_p12+1)<=f?(a.x=this.x0+this.a*(e+I)*Math.sin(L),a.y=this.y0+this.a*(e+I)*Math.cos(L),a):(B=this.sin_p12*J+this.cos_p12*K*Math.cos(L),z=Math.acos(B),A=z/Math.sin(z),a.x=this.x0+this.a*A*K*Math.sin(L),a.y=this.y0+this.a*A*(this.cos_p12*J-this.sin_p12*K*Math.cos(L)),a):(b=h(this.es),c=i(this.es),m=j(this.es),n=k(this.es),Math.abs(this.sin_p12-1)<=f?(o=this.a*g(b,c,m,n,e),p=this.a*g(b,c,m,n,I),a.x=this.x0+(o-p)*Math.sin(L),a.y=this.y0-(o-p)*Math.cos(L),a):Math.abs(this.sin_p12+1)<=f?(o=this.a*g(b,c,m,n,e),p=this.a*g(b,c,m,n,I),a.x=this.x0+(o+p)*Math.sin(L),a.y=this.y0+(o+p)*Math.cos(L),a):(q=J/K,r=l(this.a,this.e,this.sin_p12),s=l(this.a,this.e,J),t=Math.atan((1-this.es)*q+this.es*r*this.sin_p12/(s*K)),u=Math.atan2(Math.sin(L),this.cos_p12*Math.tan(t)-this.sin_p12*Math.cos(L)),C=0===u?Math.asin(this.cos_p12*Math.sin(t)-this.sin_p12*Math.cos(t)):Math.abs(Math.abs(u)-Math.PI)<=f?-Math.asin(this.cos_p12*Math.sin(t)-this.sin_p12*Math.cos(t)):Math.asin(Math.sin(L)*Math.cos(t)/Math.sin(u)),v=this.e*this.sin_p12/Math.sqrt(1-this.es),w=this.e*this.cos_p12*Math.cos(u)/Math.sqrt(1-this.es),x=v*w,y=w*w,D=C*C,E=D*C,F=E*C,G=F*C,z=r*C*(1-D*y*(1-y)/6+E/8*x*(1-2*y)+F/120*(y*(4-7*y)-3*v*v*(1-7*y))-G/48*x),a.x=this.x0+z*Math.sin(u),a.y=this.y0+z*Math.cos(u),a))},c.inverse=function(a){a.x-=this.x0,a.y-=this.y0;var b,c,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I;if(this.sphere){if(b=Math.sqrt(a.x*a.x+a.y*a.y),b>2*e*this.a)return;return c=b/this.a,o=Math.sin(c),p=Math.cos(c),q=this.long0,Math.abs(b)<=f?r=this.lat0:(r=m(p*this.sin_p12+a.y*o*this.cos_p12/b),s=Math.abs(this.lat0)-e,q=d(Math.abs(s)<=f?this.lat0>=0?this.long0+Math.atan2(a.x,-a.y):this.long0-Math.atan2(-a.x,a.y):this.long0+Math.atan2(a.x*o,b*this.cos_p12*p-a.y*this.sin_p12*o))),a.x=q,a.y=r,a}return t=h(this.es),u=i(this.es),v=j(this.es),w=k(this.es),Math.abs(this.sin_p12-1)<=f?(x=this.a*g(t,u,v,w,e),b=Math.sqrt(a.x*a.x+a.y*a.y),y=x-b,r=n(y/this.a,t,u,v,w),q=d(this.long0+Math.atan2(a.x,-1*a.y)),a.x=q,a.y=r,a):Math.abs(this.sin_p12+1)<=f?(x=this.a*g(t,u,v,w,e),b=Math.sqrt(a.x*a.x+a.y*a.y),y=b-x,r=n(y/this.a,t,u,v,w),q=d(this.long0+Math.atan2(a.x,a.y)),a.x=q,a.y=r,a):(b=Math.sqrt(a.x*a.x+a.y*a.y),B=Math.atan2(a.x,a.y),z=l(this.a,this.e,this.sin_p12),C=Math.cos(B),D=this.e*this.cos_p12*C,E=-D*D/(1-this.es),F=3*this.es*(1-E)*this.sin_p12*this.cos_p12*C/(1-this.es),G=b/z,H=G-E*(1+E)*Math.pow(G,3)/6-F*(1+3*E)*Math.pow(G,4)/24,I=1-E*H*H/2-G*H*H*H/6,A=Math.asin(this.sin_p12*Math.cos(H)+this.cos_p12*Math.sin(H)*C),q=d(this.long0+Math.asin(Math.sin(B)*Math.sin(H)/Math.cos(A))),r=Math.atan((1-this.es*I*this.sin_p12/Math.sin(A))*Math.tan(A)/(1-this.es)),a.x=q,a.y=r,a)},c.names=[\"Azimuthal_Equidistant\",\"aeqd\"]},{\"../common/adjust_lon\":5,\"../common/asinz\":6,\"../common/e0fn\":7,\"../common/e1fn\":8,\"../common/e2fn\":9,\"../common/e3fn\":10,\"../common/gN\":11,\"../common/imlfn\":12,\"../common/mlfn\":14}],42:[function(a,b,c){var d=a(\"../common/mlfn\"),e=a(\"../common/e0fn\"),f=a(\"../common/e1fn\"),g=a(\"../common/e2fn\"),h=a(\"../common/e3fn\"),i=a(\"../common/gN\"),j=a(\"../common/adjust_lon\"),k=a(\"../common/adjust_lat\"),l=a(\"../common/imlfn\"),m=Math.PI/2,n=1e-10;c.init=function(){this.sphere||(this.e0=e(this.es),this.e1=f(this.es),this.e2=g(this.es),this.e3=h(this.es),this.ml0=this.a*d(this.e0,this.e1,this.e2,this.e3,this.lat0))},c.forward=function(a){var b,c,e=a.x,f=a.y;if(e=j(e-this.long0),this.sphere)b=this.a*Math.asin(Math.cos(f)*Math.sin(e)),c=this.a*(Math.atan2(Math.tan(f),Math.cos(e))-this.lat0);else{var g=Math.sin(f),h=Math.cos(f),k=i(this.a,this.e,g),l=Math.tan(f)*Math.tan(f),m=e*Math.cos(f),n=m*m,o=this.es*h*h/(1-this.es),p=this.a*d(this.e0,this.e1,this.e2,this.e3,f);b=k*m*(1-n*l*(1/6-(8-l+8*o)*n/120)),c=p-this.ml0+k*g/h*n*(.5+(5-l+6*o)*n/24)}return a.x=b+this.x0,a.y=c+this.y0,a},c.inverse=function(a){a.x-=this.x0,a.y-=this.y0;var b,c,d=a.x/this.a,e=a.y/this.a;if(this.sphere){var f=e+this.lat0;b=Math.asin(Math.sin(f)*Math.cos(d)),c=Math.atan2(Math.tan(d),Math.cos(f))}else{var g=this.ml0/this.a+e,h=l(g,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(h)-m)<=n)return a.x=this.long0,a.y=m,0>e&&(a.y*=-1),a;var o=i(this.a,this.e,Math.sin(h)),p=o*o*o/this.a/this.a*(1-this.es),q=Math.pow(Math.tan(h),2),r=d*this.a/o,s=r*r;b=h-o*Math.tan(h)/p*r*r*(.5-(1+3*q)*r*r/24),c=r*(1-s*(q/3+(1+3*q)*q*s/15))/Math.cos(h)}return a.x=j(c+this.long0),a.y=k(b),a},c.names=[\"Cassini\",\"Cassini_Soldner\",\"cass\"]},{\"../common/adjust_lat\":4,\"../common/adjust_lon\":5,\"../common/e0fn\":7,\"../common/e1fn\":8,\"../common/e2fn\":9,\"../common/e3fn\":10,\"../common/gN\":11,\"../common/imlfn\":12,\"../common/mlfn\":14}],43:[function(a,b,c){var d=a(\"../common/adjust_lon\"),e=a(\"../common/qsfnz\"),f=a(\"../common/msfnz\"),g=a(\"../common/iqsfnz\");c.init=function(){this.sphere||(this.k0=f(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},c.forward=function(a){var b,c,f=a.x,g=a.y,h=d(f-this.long0);if(this.sphere)b=this.x0+this.a*h*Math.cos(this.lat_ts),c=this.y0+this.a*Math.sin(g)/Math.cos(this.lat_ts);else{var i=e(this.e,Math.sin(g));b=this.x0+this.a*this.k0*h,c=this.y0+this.a*i*.5/this.k0}return a.x=b,a.y=c,a},c.inverse=function(a){a.x-=this.x0,a.y-=this.y0;var b,c;return this.sphere?(b=d(this.long0+a.x/this.a/Math.cos(this.lat_ts)),c=Math.asin(a.y/this.a*Math.cos(this.lat_ts))):(c=g(this.e,2*a.y*this.k0/this.a),b=d(this.long0+a.x/(this.a*this.k0))),a.x=b,a.y=c,a},c.names=[\"cea\"]},{\"../common/adjust_lon\":5,\"../common/iqsfnz\":13,\"../common/msfnz\":15,\"../common/qsfnz\":20}],44:[function(a,b,c){var d=a(\"../common/adjust_lon\"),e=a(\"../common/adjust_lat\");c.init=function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||\"Equidistant Cylindrical (Plate Carre)\",this.rc=Math.cos(this.lat_ts)},c.forward=function(a){var b=a.x,c=a.y,f=d(b-this.long0),g=e(c-this.lat0);return a.x=this.x0+this.a*f*this.rc,a.y=this.y0+this.a*g,a},c.inverse=function(a){var b=a.x,c=a.y;return a.x=d(this.long0+(b-this.x0)/(this.a*this.rc)),a.y=e(this.lat0+(c-this.y0)/this.a),a},c.names=[\"Equirectangular\",\"Equidistant_Cylindrical\",\"eqc\"]},{\"../common/adjust_lat\":4,\"../common/adjust_lon\":5}],45:[function(a,b,c){var d=a(\"../common/e0fn\"),e=a(\"../common/e1fn\"),f=a(\"../common/e2fn\"),g=a(\"../common/e3fn\"),h=a(\"../common/msfnz\"),i=a(\"../common/mlfn\"),j=a(\"../common/adjust_lon\"),k=a(\"../common/adjust_lat\"),l=a(\"../common/imlfn\"),m=1e-10;c.init=function(){Math.abs(this.lat1+this.lat2)<m||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=d(this.es),this.e1=e(this.es),this.e2=f(this.es),this.e3=g(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=h(this.e,this.sinphi,this.cosphi),this.ml1=i(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<m?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=h(this.e,this.sinphi,this.cosphi),this.ml2=i(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=i(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))},c.forward=function(a){var b,c=a.x,d=a.y;if(this.sphere)b=this.a*(this.g-d);else{var e=i(this.e0,this.e1,this.e2,this.e3,d);b=this.a*(this.g-e)}var f=this.ns*j(c-this.long0),g=this.x0+b*Math.sin(f),h=this.y0+this.rh-b*Math.cos(f);return a.x=g,a.y=h,a},c.inverse=function(a){a.x-=this.x0,a.y=this.rh-a.y+this.y0;var b,c,d,e;this.ns>=0?(c=Math.sqrt(a.x*a.x+a.y*a.y),b=1):(c=-Math.sqrt(a.x*a.x+a.y*a.y),b=-1);var f=0;if(0!==c&&(f=Math.atan2(b*a.x,b*a.y)),this.sphere)return e=j(this.long0+f/this.ns),d=k(this.g-c/this.a),a.x=e,a.y=d,a;var g=this.g-c/this.a;return d=l(g,this.e0,this.e1,this.e2,this.e3),e=j(this.long0+f/this.ns),a.x=e,a.y=d,a},c.names=[\"Equidistant_Conic\",\"eqdc\"]},{\"../common/adjust_lat\":4,\"../common/adjust_lon\":5,\"../common/e0fn\":7,\"../common/e1fn\":8,\"../common/e2fn\":9,\"../common/e3fn\":10,\"../common/imlfn\":12,\"../common/mlfn\":14,\"../common/msfnz\":15}],46:[function(a,b,c){var d=Math.PI/4,e=a(\"../common/srat\"),f=Math.PI/2,g=20;c.init=function(){var a=Math.sin(this.lat0),b=Math.cos(this.lat0);b*=b,this.rc=Math.sqrt(1-this.es)/(1-this.es*a*a),this.C=Math.sqrt(1+this.es*b*b/(1-this.es)),this.phic0=Math.asin(a/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+d)/(Math.pow(Math.tan(.5*this.lat0+d),this.C)*e(this.e*a,this.ratexp))},c.forward=function(a){var b=a.x,c=a.y;return a.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*c+d),this.C)*e(this.e*Math.sin(c),this.ratexp))-f,a.x=this.C*b,a},c.inverse=function(a){for(var b=1e-14,c=a.x/this.C,h=a.y,i=Math.pow(Math.tan(.5*h+d)/this.K,1/this.C),j=g;j>0&&(h=2*Math.atan(i*e(this.e*Math.sin(a.y),-.5*this.e))-f,!(Math.abs(h-a.y)<b));--j)a.y=h;return j?(a.x=c,a.y=h,a):null},c.names=[\"gauss\"]},{\"../common/srat\":22}],47:[function(a,b,c){var d=a(\"../common/adjust_lon\"),e=1e-10,f=a(\"../common/asinz\");c.init=function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),\nthis.infinity_dist=1e3*this.a,this.rc=1},c.forward=function(a){var b,c,f,g,h,i,j,k,l=a.x,m=a.y;return f=d(l-this.long0),b=Math.sin(m),c=Math.cos(m),g=Math.cos(f),i=this.sin_p14*b+this.cos_p14*c*g,h=1,i>0||Math.abs(i)<=e?(j=this.x0+this.a*h*c*Math.sin(f)/i,k=this.y0+this.a*h*(this.cos_p14*b-this.sin_p14*c*g)/i):(j=this.x0+this.infinity_dist*c*Math.sin(f),k=this.y0+this.infinity_dist*(this.cos_p14*b-this.sin_p14*c*g)),a.x=j,a.y=k,a},c.inverse=function(a){var b,c,e,g,h,i;return a.x=(a.x-this.x0)/this.a,a.y=(a.y-this.y0)/this.a,a.x/=this.k0,a.y/=this.k0,(b=Math.sqrt(a.x*a.x+a.y*a.y))?(g=Math.atan2(b,this.rc),c=Math.sin(g),e=Math.cos(g),i=f(e*this.sin_p14+a.y*c*this.cos_p14/b),h=Math.atan2(a.x*c,b*this.cos_p14*e-a.y*this.sin_p14*c),h=d(this.long0+h)):(i=this.phic0,h=0),a.x=h,a.y=i,a},c.names=[\"gnom\"]},{\"../common/adjust_lon\":5,\"../common/asinz\":6}],48:[function(a,b,c){var d=a(\"../common/adjust_lon\");c.init=function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},c.forward=function(a){var b,c,e,f,g,h,i,j=a.x,k=a.y,l=d(j-this.long0);return b=Math.pow((1+this.e*Math.sin(k))/(1-this.e*Math.sin(k)),this.alfa*this.e/2),c=2*(Math.atan(this.k*Math.pow(Math.tan(k/2+this.s45),this.alfa)/b)-this.s45),e=-l*this.alfa,f=Math.asin(Math.cos(this.ad)*Math.sin(c)+Math.sin(this.ad)*Math.cos(c)*Math.cos(e)),g=Math.asin(Math.cos(c)*Math.sin(e)/Math.cos(f)),h=this.n*g,i=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(f/2+this.s45),this.n),a.y=i*Math.cos(h)/1,a.x=i*Math.sin(h)/1,this.czech||(a.y*=-1,a.x*=-1),a},c.inverse=function(a){var b,c,d,e,f,g,h,i,j=a.x;a.x=a.y,a.y=j,this.czech||(a.y*=-1,a.x*=-1),g=Math.sqrt(a.x*a.x+a.y*a.y),f=Math.atan2(a.y,a.x),e=f/Math.sin(this.s0),d=2*(Math.atan(Math.pow(this.ro0/g,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),b=Math.asin(Math.cos(this.ad)*Math.sin(d)-Math.sin(this.ad)*Math.cos(d)*Math.cos(e)),c=Math.asin(Math.cos(d)*Math.sin(e)/Math.cos(b)),a.x=this.long0-c/this.alfa,h=b,i=0;var k=0;do a.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(b/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(h))/(1-this.e*Math.sin(h)),this.e/2))-this.s45),Math.abs(h-a.y)<1e-10&&(i=1),h=a.y,k+=1;while(0===i&&15>k);return k>=15?null:a},c.names=[\"Krovak\",\"krovak\"]},{\"../common/adjust_lon\":5}],49:[function(a,b,c){var d=Math.PI/2,e=Math.PI/4,f=1e-10,g=a(\"../common/qsfnz\"),h=a(\"../common/adjust_lon\");c.S_POLE=1,c.N_POLE=2,c.EQUIT=3,c.OBLIQ=4,c.init=function(){var a=Math.abs(this.lat0);if(Math.abs(a-d)<f?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(a)<f?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0){var b;switch(this.qp=g(this.e,1),this.mmf=.5/(1-this.es),this.apa=this.authset(this.es),this.mode){case this.N_POLE:this.dd=1;break;case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),b=Math.sin(this.lat0),this.sinb1=g(this.e,b)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*b*b)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},c.forward=function(a){var b,c,i,j,k,l,m,n,o,p,q=a.x,r=a.y;if(q=h(q-this.long0),this.sphere){if(k=Math.sin(r),p=Math.cos(r),i=Math.cos(q),this.mode===this.OBLIQ||this.mode===this.EQUIT){if(c=this.mode===this.EQUIT?1+p*i:1+this.sinph0*k+this.cosph0*p*i,f>=c)return null;c=Math.sqrt(2/c),b=c*p*Math.sin(q),c*=this.mode===this.EQUIT?k:this.cosph0*k-this.sinph0*p*i}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(i=-i),Math.abs(r+this.phi0)<f)return null;c=e-.5*r,c=2*(this.mode===this.S_POLE?Math.cos(c):Math.sin(c)),b=c*Math.sin(q),c*=i}}else{switch(m=0,n=0,o=0,i=Math.cos(q),j=Math.sin(q),k=Math.sin(r),l=g(this.e,k),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(m=l/this.qp,n=Math.sqrt(1-m*m)),this.mode){case this.OBLIQ:o=1+this.sinb1*m+this.cosb1*n*i;break;case this.EQUIT:o=1+n*i;break;case this.N_POLE:o=d+r,l=this.qp-l;break;case this.S_POLE:o=r-d,l=this.qp+l}if(Math.abs(o)<f)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:o=Math.sqrt(2/o),c=this.mode===this.OBLIQ?this.ymf*o*(this.cosb1*m-this.sinb1*n*i):(o=Math.sqrt(2/(1+n*i)))*m*this.ymf,b=this.xmf*o*n*j;break;case this.N_POLE:case this.S_POLE:l>=0?(b=(o=Math.sqrt(l))*j,c=i*(this.mode===this.S_POLE?o:-o)):b=c=0}}return a.x=this.a*b+this.x0,a.y=this.a*c+this.y0,a},c.inverse=function(a){a.x-=this.x0,a.y-=this.y0;var b,c,e,g,i,j,k,l=a.x/this.a,m=a.y/this.a;if(this.sphere){var n,o=0,p=0;if(n=Math.sqrt(l*l+m*m),c=.5*n,c>1)return null;switch(c=2*Math.asin(c),(this.mode===this.OBLIQ||this.mode===this.EQUIT)&&(p=Math.sin(c),o=Math.cos(c)),this.mode){case this.EQUIT:c=Math.abs(n)<=f?0:Math.asin(m*p/n),l*=p,m=o*n;break;case this.OBLIQ:c=Math.abs(n)<=f?this.phi0:Math.asin(o*this.sinph0+m*p*this.cosph0/n),l*=p*this.cosph0,m=(o-Math.sin(c)*this.sinph0)*n;break;case this.N_POLE:m=-m,c=d-c;break;case this.S_POLE:c-=d}b=0!==m||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(l,m):0}else{if(k=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(l/=this.dd,m*=this.dd,j=Math.sqrt(l*l+m*m),f>j)return a.x=0,a.y=this.phi0,a;g=2*Math.asin(.5*j/this.rq),e=Math.cos(g),l*=g=Math.sin(g),this.mode===this.OBLIQ?(k=e*this.sinb1+m*g*this.cosb1/j,i=this.qp*k,m=j*this.cosb1*e-m*this.sinb1*g):(k=m*g/j,i=this.qp*k,m=j*e)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(m=-m),i=l*l+m*m,!i)return a.x=0,a.y=this.phi0,a;k=1-i/this.qp,this.mode===this.S_POLE&&(k=-k)}b=Math.atan2(l,m),c=this.authlat(Math.asin(k),this.apa)}return a.x=h(this.long0+b),a.y=c,a},c.P00=.3333333333333333,c.P01=.17222222222222222,c.P02=.10257936507936508,c.P10=.06388888888888888,c.P11=.0664021164021164,c.P20=.016415012942191543,c.authset=function(a){var b,c=[];return c[0]=a*this.P00,b=a*a,c[0]+=b*this.P01,c[1]=b*this.P10,b*=a,c[0]+=b*this.P02,c[1]+=b*this.P11,c[2]=b*this.P20,c},c.authlat=function(a,b){var c=a+a;return a+b[0]*Math.sin(c)+b[1]*Math.sin(c+c)+b[2]*Math.sin(c+c+c)},c.names=[\"Lambert Azimuthal Equal Area\",\"Lambert_Azimuthal_Equal_Area\",\"laea\"]},{\"../common/adjust_lon\":5,\"../common/qsfnz\":20}],50:[function(a,b,c){var d=1e-10,e=a(\"../common/msfnz\"),f=a(\"../common/tsfnz\"),g=Math.PI/2,h=a(\"../common/sign\"),i=a(\"../common/adjust_lon\"),j=a(\"../common/phi2z\");c.init=function(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<d)){var a=this.b/this.a;this.e=Math.sqrt(1-a*a);var b=Math.sin(this.lat1),c=Math.cos(this.lat1),g=e(this.e,b,c),h=f(this.e,this.lat1,b),i=Math.sin(this.lat2),j=Math.cos(this.lat2),k=e(this.e,i,j),l=f(this.e,this.lat2,i),m=f(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>d?this.ns=Math.log(g/k)/Math.log(h/l):this.ns=b,isNaN(this.ns)&&(this.ns=b),this.f0=g/(this.ns*Math.pow(h,this.ns)),this.rh=this.a*this.f0*Math.pow(m,this.ns),this.title||(this.title=\"Lambert Conformal Conic\")}},c.forward=function(a){var b=a.x,c=a.y;Math.abs(2*Math.abs(c)-Math.PI)<=d&&(c=h(c)*(g-2*d));var e,j,k=Math.abs(Math.abs(c)-g);if(k>d)e=f(this.e,c,Math.sin(c)),j=this.a*this.f0*Math.pow(e,this.ns);else{if(k=c*this.ns,0>=k)return null;j=0}var l=this.ns*i(b-this.long0);return a.x=this.k0*(j*Math.sin(l))+this.x0,a.y=this.k0*(this.rh-j*Math.cos(l))+this.y0,a},c.inverse=function(a){var b,c,d,e,f,h=(a.x-this.x0)/this.k0,k=this.rh-(a.y-this.y0)/this.k0;this.ns>0?(b=Math.sqrt(h*h+k*k),c=1):(b=-Math.sqrt(h*h+k*k),c=-1);var l=0;if(0!==b&&(l=Math.atan2(c*h,c*k)),0!==b||this.ns>0){if(c=1/this.ns,d=Math.pow(b/(this.a*this.f0),c),e=j(this.e,d),-9999===e)return null}else e=-g;return f=i(l/this.ns+this.long0),a.x=f,a.y=e,a},c.names=[\"Lambert Tangential Conformal Conic Projection\",\"Lambert_Conformal_Conic\",\"Lambert_Conformal_Conic_2SP\",\"lcc\"]},{\"../common/adjust_lon\":5,\"../common/msfnz\":15,\"../common/phi2z\":16,\"../common/sign\":21,\"../common/tsfnz\":24}],51:[function(a,b,c){function d(a){return a}c.init=function(){},c.forward=d,c.inverse=d,c.names=[\"longlat\",\"identity\"]},{}],52:[function(a,b,c){var d=a(\"../common/msfnz\"),e=Math.PI/2,f=1e-10,g=57.29577951308232,h=a(\"../common/adjust_lon\"),i=Math.PI/4,j=a(\"../common/tsfnz\"),k=a(\"../common/phi2z\");c.init=function(){var a=this.b/this.a;this.es=1-a*a,\"x0\"in this||(this.x0=0),\"y0\"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=d(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},c.forward=function(a){var b=a.x,c=a.y;if(c*g>90&&-90>c*g&&b*g>180&&-180>b*g)return null;var d,k;if(Math.abs(Math.abs(c)-e)<=f)return null;if(this.sphere)d=this.x0+this.a*this.k0*h(b-this.long0),k=this.y0+this.a*this.k0*Math.log(Math.tan(i+.5*c));else{var l=Math.sin(c),m=j(this.e,c,l);d=this.x0+this.a*this.k0*h(b-this.long0),k=this.y0-this.a*this.k0*Math.log(m)}return a.x=d,a.y=k,a},c.inverse=function(a){var b,c,d=a.x-this.x0,f=a.y-this.y0;if(this.sphere)c=e-2*Math.atan(Math.exp(-f/(this.a*this.k0)));else{var g=Math.exp(-f/(this.a*this.k0));if(c=k(this.e,g),-9999===c)return null}return b=h(this.long0+d/(this.a*this.k0)),a.x=b,a.y=c,a},c.names=[\"Mercator\",\"Popular Visualisation Pseudo Mercator\",\"Mercator_1SP\",\"Mercator_Auxiliary_Sphere\",\"merc\"]},{\"../common/adjust_lon\":5,\"../common/msfnz\":15,\"../common/phi2z\":16,\"../common/tsfnz\":24}],53:[function(a,b,c){var d=a(\"../common/adjust_lon\");c.init=function(){},c.forward=function(a){var b=a.x,c=a.y,e=d(b-this.long0),f=this.x0+this.a*e,g=this.y0+this.a*Math.log(Math.tan(Math.PI/4+c/2.5))*1.25;return a.x=f,a.y=g,a},c.inverse=function(a){a.x-=this.x0,a.y-=this.y0;var b=d(this.long0+a.x/this.a),c=2.5*(Math.atan(Math.exp(.8*a.y/this.a))-Math.PI/4);return a.x=b,a.y=c,a},c.names=[\"Miller_Cylindrical\",\"mill\"]},{\"../common/adjust_lon\":5}],54:[function(a,b,c){var d=a(\"../common/adjust_lon\"),e=1e-10;c.init=function(){},c.forward=function(a){for(var b=a.x,c=a.y,f=d(b-this.long0),g=c,h=Math.PI*Math.sin(c),i=0;!0;i++){var j=-(g+Math.sin(g)-h)/(1+Math.cos(g));if(g+=j,Math.abs(j)<e)break}g/=2,Math.PI/2-Math.abs(c)<e&&(f=0);var k=.900316316158*this.a*f*Math.cos(g)+this.x0,l=1.4142135623731*this.a*Math.sin(g)+this.y0;return a.x=k,a.y=l,a},c.inverse=function(a){var b,c;a.x-=this.x0,a.y-=this.y0,c=a.y/(1.4142135623731*this.a),Math.abs(c)>.999999999999&&(c=.999999999999),b=Math.asin(c);var e=d(this.long0+a.x/(.900316316158*this.a*Math.cos(b)));e<-Math.PI&&(e=-Math.PI),e>Math.PI&&(e=Math.PI),c=(2*b+Math.sin(2*b))/Math.PI,Math.abs(c)>1&&(c=1);var f=Math.asin(c);return a.x=e,a.y=f,a},c.names=[\"Mollweide\",\"moll\"]},{\"../common/adjust_lon\":5}],55:[function(a,b,c){var d=484813681109536e-20;c.iterations=1,c.init=function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},c.forward=function(a){var b,c=a.x,e=a.y,f=e-this.lat0,g=c-this.long0,h=f/d*1e-5,i=g,j=1,k=0;for(b=1;10>=b;b++)j*=h,k+=this.A[b]*j;var l,m,n=k,o=i,p=1,q=0,r=0,s=0;for(b=1;6>=b;b++)l=p*n-q*o,m=q*n+p*o,p=l,q=m,r=r+this.B_re[b]*p-this.B_im[b]*q,s=s+this.B_im[b]*p+this.B_re[b]*q;return a.x=s*this.a+this.x0,a.y=r*this.a+this.y0,a},c.inverse=function(a){var b,c,e,f=a.x,g=a.y,h=f-this.x0,i=g-this.y0,j=i/this.a,k=h/this.a,l=1,m=0,n=0,o=0;for(b=1;6>=b;b++)c=l*j-m*k,e=m*j+l*k,l=c,m=e,n=n+this.C_re[b]*l-this.C_im[b]*m,o=o+this.C_im[b]*l+this.C_re[b]*m;for(var p=0;p<this.iterations;p++){var q,r,s=n,t=o,u=j,v=k;for(b=2;6>=b;b++)q=s*n-t*o,r=t*n+s*o,s=q,t=r,u+=(b-1)*(this.B_re[b]*s-this.B_im[b]*t),v+=(b-1)*(this.B_im[b]*s+this.B_re[b]*t);s=1,t=0;var w=this.B_re[1],x=this.B_im[1];for(b=2;6>=b;b++)q=s*n-t*o,r=t*n+s*o,s=q,t=r,w+=b*(this.B_re[b]*s-this.B_im[b]*t),x+=b*(this.B_im[b]*s+this.B_re[b]*t);var y=w*w+x*x;n=(u*w+v*x)/y,o=(v*w-u*x)/y}var z=n,A=o,B=1,C=0;for(b=1;9>=b;b++)B*=z,C+=this.D[b]*B;var D=this.lat0+C*d*1e5,E=this.long0+A;return a.x=E,a.y=D,a},c.names=[\"New_Zealand_Map_Grid\",\"nzmg\"]},{}],56:[function(a,b,c){var d=a(\"../common/tsfnz\"),e=a(\"../common/adjust_lon\"),f=a(\"../common/phi2z\"),g=Math.PI/2,h=Math.PI/4,i=1e-10;c.init=function(){this.no_off=this.no_off||!1,this.no_rot=this.no_rot||!1,isNaN(this.k0)&&(this.k0=1);var a=Math.sin(this.lat0),b=Math.cos(this.lat0),c=this.e*a;this.bl=Math.sqrt(1+this.es/(1-this.es)*Math.pow(b,4)),this.al=this.a*this.bl*this.k0*Math.sqrt(1-this.es)/(1-c*c);var f=d(this.e,this.lat0,a),g=this.bl/b*Math.sqrt((1-this.es)/(1-c*c));1>g*g&&(g=1);var h,i;if(isNaN(this.longc)){var j=d(this.e,this.lat1,Math.sin(this.lat1)),k=d(this.e,this.lat2,Math.sin(this.lat2));this.lat0>=0?this.el=(g+Math.sqrt(g*g-1))*Math.pow(f,this.bl):this.el=(g-Math.sqrt(g*g-1))*Math.pow(f,this.bl);var l=Math.pow(j,this.bl),m=Math.pow(k,this.bl);h=this.el/l,i=.5*(h-1/h);var n=(this.el*this.el-m*l)/(this.el*this.el+m*l),o=(m-l)/(m+l),p=e(this.long1-this.long2);this.long0=.5*(this.long1+this.long2)-Math.atan(n*Math.tan(.5*this.bl*p)/o)/this.bl,this.long0=e(this.long0);var q=e(this.long1-this.long0);this.gamma0=Math.atan(Math.sin(this.bl*q)/i),this.alpha=Math.asin(g*Math.sin(this.gamma0))}else h=this.lat0>=0?g+Math.sqrt(g*g-1):g-Math.sqrt(g*g-1),this.el=h*Math.pow(f,this.bl),i=.5*(h-1/h),this.gamma0=Math.asin(Math.sin(this.alpha)/g),this.long0=this.longc-Math.asin(i*Math.tan(this.gamma0))/this.bl;this.no_off?this.uc=0:this.lat0>=0?this.uc=this.al/this.bl*Math.atan2(Math.sqrt(g*g-1),Math.cos(this.alpha)):this.uc=-1*this.al/this.bl*Math.atan2(Math.sqrt(g*g-1),Math.cos(this.alpha))},c.forward=function(a){var b,c,f,j=a.x,k=a.y,l=e(j-this.long0);if(Math.abs(Math.abs(k)-g)<=i)f=k>0?-1:1,c=this.al/this.bl*Math.log(Math.tan(h+f*this.gamma0*.5)),b=-1*f*g*this.al/this.bl;else{var m=d(this.e,k,Math.sin(k)),n=this.el/Math.pow(m,this.bl),o=.5*(n-1/n),p=.5*(n+1/n),q=Math.sin(this.bl*l),r=(o*Math.sin(this.gamma0)-q*Math.cos(this.gamma0))/p;c=Math.abs(Math.abs(r)-1)<=i?Number.POSITIVE_INFINITY:.5*this.al*Math.log((1-r)/(1+r))/this.bl,b=Math.abs(Math.cos(this.bl*l))<=i?this.al*this.bl*l:this.al*Math.atan2(o*Math.cos(this.gamma0)+q*Math.sin(this.gamma0),Math.cos(this.bl*l))/this.bl}return this.no_rot?(a.x=this.x0+b,a.y=this.y0+c):(b-=this.uc,a.x=this.x0+c*Math.cos(this.alpha)+b*Math.sin(this.alpha),a.y=this.y0+b*Math.cos(this.alpha)-c*Math.sin(this.alpha)),a},c.inverse=function(a){var b,c;this.no_rot?(c=a.y-this.y0,b=a.x-this.x0):(c=(a.x-this.x0)*Math.cos(this.alpha)-(a.y-this.y0)*Math.sin(this.alpha),b=(a.y-this.y0)*Math.cos(this.alpha)+(a.x-this.x0)*Math.sin(this.alpha),b+=this.uc);var d=Math.exp(-1*this.bl*c/this.al),h=.5*(d-1/d),j=.5*(d+1/d),k=Math.sin(this.bl*b/this.al),l=(k*Math.cos(this.gamma0)+h*Math.sin(this.gamma0))/j,m=Math.pow(this.el/Math.sqrt((1+l)/(1-l)),1/this.bl);return Math.abs(l-1)<i?(a.x=this.long0,a.y=g):Math.abs(l+1)<i?(a.x=this.long0,a.y=-1*g):(a.y=f(this.e,m),a.x=e(this.long0-Math.atan2(h*Math.cos(this.gamma0)-k*Math.sin(this.gamma0),Math.cos(this.bl*b/this.al))/this.bl)),a},c.names=[\"Hotine_Oblique_Mercator\",\"Hotine Oblique Mercator\",\"Hotine_Oblique_Mercator_Azimuth_Natural_Origin\",\"Hotine_Oblique_Mercator_Azimuth_Center\",\"omerc\"]},{\"../common/adjust_lon\":5,\"../common/phi2z\":16,\"../common/tsfnz\":24}],57:[function(a,b,c){var d=a(\"../common/e0fn\"),e=a(\"../common/e1fn\"),f=a(\"../common/e2fn\"),g=a(\"../common/e3fn\"),h=a(\"../common/adjust_lon\"),i=a(\"../common/adjust_lat\"),j=a(\"../common/mlfn\"),k=1e-10,l=a(\"../common/gN\"),m=20;c.init=function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=d(this.es),this.e1=e(this.es),this.e2=f(this.es),this.e3=g(this.es),this.ml0=this.a*j(this.e0,this.e1,this.e2,this.e3,this.lat0)},c.forward=function(a){var b,c,d,e=a.x,f=a.y,g=h(e-this.long0);if(d=g*Math.sin(f),this.sphere)Math.abs(f)<=k?(b=this.a*g,c=-1*this.a*this.lat0):(b=this.a*Math.sin(d)/Math.tan(f),c=this.a*(i(f-this.lat0)+(1-Math.cos(d))/Math.tan(f)));else if(Math.abs(f)<=k)b=this.a*g,c=-1*this.ml0;else{var m=l(this.a,this.e,Math.sin(f))/Math.tan(f);b=m*Math.sin(d),c=this.a*j(this.e0,this.e1,this.e2,this.e3,f)-this.ml0+m*(1-Math.cos(d))}return a.x=b+this.x0,a.y=c+this.y0,a},c.inverse=function(a){var b,c,d,e,f,g,i,l,n;if(d=a.x-this.x0,e=a.y-this.y0,this.sphere)if(Math.abs(e+this.a*this.lat0)<=k)b=h(d/this.a+this.long0),c=0;else{g=this.lat0+e/this.a,i=d*d/this.a/this.a+g*g,l=g;var o;for(f=m;f;--f)if(o=Math.tan(l),n=-1*(g*(l*o+1)-l-.5*(l*l+i)*o)/((l-g)/o-1),l+=n,Math.abs(n)<=k){c=l;break}b=h(this.long0+Math.asin(d*Math.tan(l)/this.a)/Math.sin(c))}else if(Math.abs(e+this.ml0)<=k)c=0,b=h(this.long0+d/this.a);else{g=(this.ml0+e)/this.a,i=d*d/this.a/this.a+g*g,l=g;var p,q,r,s,t;for(f=m;f;--f)if(t=this.e*Math.sin(l),p=Math.sqrt(1-t*t)*Math.tan(l),q=this.a*j(this.e0,this.e1,this.e2,this.e3,l),r=this.e0-2*this.e1*Math.cos(2*l)+4*this.e2*Math.cos(4*l)-6*this.e3*Math.cos(6*l),s=q/this.a,n=(g*(p*s+1)-s-.5*p*(s*s+i))/(this.es*Math.sin(2*l)*(s*s+i-2*g*s)/(4*p)+(g-s)*(p*r-2/Math.sin(2*l))-r),l-=n,Math.abs(n)<=k){c=l;break}p=Math.sqrt(1-this.es*Math.pow(Math.sin(c),2))*Math.tan(c),b=h(this.long0+Math.asin(d*p/this.a)/Math.sin(c))}return a.x=b,a.y=c,a},c.names=[\"Polyconic\",\"poly\"]},{\"../common/adjust_lat\":4,\"../common/adjust_lon\":5,\"../common/e0fn\":7,\"../common/e1fn\":8,\"../common/e2fn\":9,\"../common/e3fn\":10,\"../common/gN\":11,\"../common/mlfn\":14}],58:[function(a,b,c){var d=a(\"../common/adjust_lon\"),e=a(\"../common/adjust_lat\"),f=a(\"../common/pj_enfn\"),g=20,h=a(\"../common/pj_mlfn\"),i=a(\"../common/pj_inv_mlfn\"),j=Math.PI/2,k=1e-10,l=a(\"../common/asinz\");c.init=function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=f(this.es)},c.forward=function(a){var b,c,e=a.x,f=a.y;if(e=d(e-this.long0),this.sphere){if(this.m)for(var i=this.n*Math.sin(f),j=g;j;--j){var l=(this.m*f+Math.sin(f)-i)/(this.m+Math.cos(f));if(f-=l,Math.abs(l)<k)break}else f=1!==this.n?Math.asin(this.n*Math.sin(f)):f;b=this.a*this.C_x*e*(this.m+Math.cos(f)),c=this.a*this.C_y*f}else{var m=Math.sin(f),n=Math.cos(f);c=this.a*h(f,m,n,this.en),b=this.a*e*n/Math.sqrt(1-this.es*m*m)}return a.x=b,a.y=c,a},c.inverse=function(a){var b,c,f,g;return a.x-=this.x0,f=a.x/this.a,a.y-=this.y0,b=a.y/this.a,this.sphere?(b/=this.C_y,f/=this.C_x*(this.m+Math.cos(b)),this.m?b=l((this.m*b+Math.sin(b))/this.n):1!==this.n&&(b=l(Math.sin(b)/this.n)),f=d(f+this.long0),b=e(b)):(b=i(a.y/this.a,this.es,this.en),g=Math.abs(b),j>g?(g=Math.sin(b),c=this.long0+a.x*Math.sqrt(1-this.es*g*g)/(this.a*Math.cos(b)),f=d(c)):j>g-k&&(f=this.long0)),a.x=f,a.y=b,a},c.names=[\"Sinusoidal\",\"sinu\"]},{\"../common/adjust_lat\":4,\"../common/adjust_lon\":5,\"../common/asinz\":6,\"../common/pj_enfn\":17,\"../common/pj_inv_mlfn\":18,\"../common/pj_mlfn\":19}],59:[function(a,b,c){c.init=function(){var a=this.lat0;this.lambda0=this.long0;var b=Math.sin(a),c=this.a,d=this.rf,e=1/d,f=2*e-Math.pow(e,2),g=this.e=Math.sqrt(f);this.R=this.k0*c*Math.sqrt(1-f)/(1-f*Math.pow(b,2)),this.alpha=Math.sqrt(1+f/(1-f)*Math.pow(Math.cos(a),4)),this.b0=Math.asin(b/this.alpha);var h=Math.log(Math.tan(Math.PI/4+this.b0/2)),i=Math.log(Math.tan(Math.PI/4+a/2)),j=Math.log((1+g*b)/(1-g*b));this.K=h-this.alpha*i+this.alpha*g/2*j},c.forward=function(a){var b=Math.log(Math.tan(Math.PI/4-a.y/2)),c=this.e/2*Math.log((1+this.e*Math.sin(a.y))/(1-this.e*Math.sin(a.y))),d=-this.alpha*(b+c)+this.K,e=2*(Math.atan(Math.exp(d))-Math.PI/4),f=this.alpha*(a.x-this.lambda0),g=Math.atan(Math.sin(f)/(Math.sin(this.b0)*Math.tan(e)+Math.cos(this.b0)*Math.cos(f))),h=Math.asin(Math.cos(this.b0)*Math.sin(e)-Math.sin(this.b0)*Math.cos(e)*Math.cos(f));return a.y=this.R/2*Math.log((1+Math.sin(h))/(1-Math.sin(h)))+this.y0,a.x=this.R*g+this.x0,a},c.inverse=function(a){for(var b=a.x-this.x0,c=a.y-this.y0,d=b/this.R,e=2*(Math.atan(Math.exp(c/this.R))-Math.PI/4),f=Math.asin(Math.cos(this.b0)*Math.sin(e)+Math.sin(this.b0)*Math.cos(e)*Math.cos(d)),g=Math.atan(Math.sin(d)/(Math.cos(this.b0)*Math.cos(d)-Math.sin(this.b0)*Math.tan(e))),h=this.lambda0+g/this.alpha,i=0,j=f,k=-1e3,l=0;Math.abs(j-k)>1e-7;){if(++l>20)return;i=1/this.alpha*(Math.log(Math.tan(Math.PI/4+f/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(j))/2)),k=j,j=2*Math.atan(Math.exp(i))-Math.PI/2}return a.x=h,a.y=j,a},c.names=[\"somerc\"]},{}],60:[function(a,b,c){var d=Math.PI/2,e=1e-10,f=a(\"../common/sign\"),g=a(\"../common/msfnz\"),h=a(\"../common/tsfnz\"),i=a(\"../common/phi2z\"),j=a(\"../common/adjust_lon\");c.ssfn_=function(a,b,c){return b*=c,Math.tan(.5*(d+a))*Math.pow((1-b)/(1+b),.5*c)},c.init=function(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=e&&(this.k0=.5*(1+f(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=e&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=e&&(this.k0=.5*this.cons*g(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/h(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=g(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-d,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},c.forward=function(a){var b,c,f,g,i,k,l=a.x,m=a.y,n=Math.sin(m),o=Math.cos(m),p=j(l-this.long0);return Math.abs(Math.abs(l-this.long0)-Math.PI)<=e&&Math.abs(m+this.lat0)<=e?(a.x=NaN,a.y=NaN,a):this.sphere?(b=2*this.k0/(1+this.sinlat0*n+this.coslat0*o*Math.cos(p)),a.x=this.a*b*o*Math.sin(p)+this.x0,a.y=this.a*b*(this.coslat0*n-this.sinlat0*o*Math.cos(p))+this.y0,a):(c=2*Math.atan(this.ssfn_(m,n,this.e))-d,g=Math.cos(c),f=Math.sin(c),Math.abs(this.coslat0)<=e?(i=h(this.e,m*this.con,this.con*n),k=2*this.a*this.k0*i/this.cons,a.x=this.x0+k*Math.sin(l-this.long0),a.y=this.y0-this.con*k*Math.cos(l-this.long0),a):(Math.abs(this.sinlat0)<e?(b=2*this.a*this.k0/(1+g*Math.cos(p)),a.y=b*f):(b=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*f+this.cosX0*g*Math.cos(p))),a.y=b*(this.cosX0*f-this.sinX0*g*Math.cos(p))+this.y0),a.x=b*g*Math.sin(p)+this.x0,a))},c.inverse=function(a){a.x-=this.x0,a.y-=this.y0;var b,c,f,g,h,k=Math.sqrt(a.x*a.x+a.y*a.y);if(this.sphere){var l=2*Math.atan(k/(.5*this.a*this.k0));return b=this.long0,c=this.lat0,e>=k?(a.x=b,a.y=c,a):(c=Math.asin(Math.cos(l)*this.sinlat0+a.y*Math.sin(l)*this.coslat0/k),b=j(Math.abs(this.coslat0)<e?this.lat0>0?this.long0+Math.atan2(a.x,-1*a.y):this.long0+Math.atan2(a.x,a.y):this.long0+Math.atan2(a.x*Math.sin(l),k*this.coslat0*Math.cos(l)-a.y*this.sinlat0*Math.sin(l))),a.x=b,a.y=c,a)}if(Math.abs(this.coslat0)<=e){if(e>=k)return c=this.lat0,b=this.long0,a.x=b,a.y=c,a;a.x*=this.con,a.y*=this.con,f=k*this.cons/(2*this.a*this.k0),c=this.con*i(this.e,f),b=this.con*j(this.con*this.long0+Math.atan2(a.x,-1*a.y))}else g=2*Math.atan(k*this.cosX0/(2*this.a*this.k0*this.ms1)),b=this.long0,e>=k?h=this.X0:(h=Math.asin(Math.cos(g)*this.sinX0+a.y*Math.sin(g)*this.cosX0/k),b=j(this.long0+Math.atan2(a.x*Math.sin(g),k*this.cosX0*Math.cos(g)-a.y*this.sinX0*Math.sin(g)))),c=-1*i(this.e,Math.tan(.5*(d+h)));return a.x=b,a.y=c,a},c.names=[\"stere\",\"Stereographic_South_Pole\",\"Polar Stereographic (variant B)\"]},{\"../common/adjust_lon\":5,\"../common/msfnz\":15,\"../common/phi2z\":16,\"../common/sign\":21,\"../common/tsfnz\":24}],61:[function(a,b,c){var d=a(\"./gauss\"),e=a(\"../common/adjust_lon\");c.init=function(){d.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title=\"Oblique Stereographic Alternative\"))},c.forward=function(a){var b,c,f,g;return a.x=e(a.x-this.long0),d.forward.apply(this,[a]),b=Math.sin(a.y),c=Math.cos(a.y),f=Math.cos(a.x),g=this.k0*this.R2/(1+this.sinc0*b+this.cosc0*c*f),a.x=g*c*Math.sin(a.x),a.y=g*(this.cosc0*b-this.sinc0*c*f),a.x=this.a*a.x+this.x0,a.y=this.a*a.y+this.y0,a},c.inverse=function(a){var b,c,f,g,h;if(a.x=(a.x-this.x0)/this.a,a.y=(a.y-this.y0)/this.a,a.x/=this.k0,a.y/=this.k0,h=Math.sqrt(a.x*a.x+a.y*a.y)){var i=2*Math.atan2(h,this.R2);b=Math.sin(i),c=Math.cos(i),g=Math.asin(c*this.sinc0+a.y*b*this.cosc0/h),f=Math.atan2(a.x*b,h*this.cosc0*c-a.y*this.sinc0*b)}else g=this.phic0,f=0;return a.x=f,a.y=g,d.inverse.apply(this,[a]),a.x=e(a.x+this.long0),a},c.names=[\"Stereographic_North_Pole\",\"Oblique_Stereographic\",\"Polar_Stereographic\",\"sterea\",\"Oblique Stereographic Alternative\"]},{\"../common/adjust_lon\":5,\"./gauss\":46}],62:[function(a,b,c){var d=a(\"../common/e0fn\"),e=a(\"../common/e1fn\"),f=a(\"../common/e2fn\"),g=a(\"../common/e3fn\"),h=a(\"../common/mlfn\"),i=a(\"../common/adjust_lon\"),j=Math.PI/2,k=1e-10,l=a(\"../common/sign\"),m=a(\"../common/asinz\");c.init=function(){this.e0=d(this.es),this.e1=e(this.es),this.e2=f(this.es),this.e3=g(this.es),this.ml0=this.a*h(this.e0,this.e1,this.e2,this.e3,this.lat0)},c.forward=function(a){var b,c,d,e=a.x,f=a.y,g=i(e-this.long0),j=Math.sin(f),k=Math.cos(f);if(this.sphere){var l=k*Math.sin(g);if(Math.abs(Math.abs(l)-1)<1e-10)return 93;c=.5*this.a*this.k0*Math.log((1+l)/(1-l)),b=Math.acos(k*Math.cos(g)/Math.sqrt(1-l*l)),0>f&&(b=-b),d=this.a*this.k0*(b-this.lat0)}else{var m=k*g,n=Math.pow(m,2),o=this.ep2*Math.pow(k,2),p=Math.tan(f),q=Math.pow(p,2);b=1-this.es*Math.pow(j,2);var r=this.a/Math.sqrt(b),s=this.a*h(this.e0,this.e1,this.e2,this.e3,f);c=this.k0*r*m*(1+n/6*(1-q+o+n/20*(5-18*q+Math.pow(q,2)+72*o-58*this.ep2)))+this.x0,d=this.k0*(s-this.ml0+r*p*(n*(.5+n/24*(5-q+9*o+4*Math.pow(o,2)+n/30*(61-58*q+Math.pow(q,2)+600*o-330*this.ep2)))))+this.y0}return a.x=c,a.y=d,a},c.inverse=function(a){var b,c,d,e,f,g,h=6;if(this.sphere){var n=Math.exp(a.x/(this.a*this.k0)),o=.5*(n-1/n),p=this.lat0+a.y/(this.a*this.k0),q=Math.cos(p);b=Math.sqrt((1-q*q)/(1+o*o)),f=m(b),0>p&&(f=-f),g=0===o&&0===q?this.long0:i(Math.atan2(o,q)+this.long0)}else{var r=a.x-this.x0,s=a.y-this.y0;for(b=(this.ml0+s/this.k0)/this.a,c=b,e=0;!0&&(d=(b+this.e1*Math.sin(2*c)-this.e2*Math.sin(4*c)+this.e3*Math.sin(6*c))/this.e0-c,c+=d,!(Math.abs(d)<=k));e++)if(e>=h)return 95;if(Math.abs(c)<j){var t=Math.sin(c),u=Math.cos(c),v=Math.tan(c),w=this.ep2*Math.pow(u,2),x=Math.pow(w,2),y=Math.pow(v,2),z=Math.pow(y,2);b=1-this.es*Math.pow(t,2);var A=this.a/Math.sqrt(b),B=A*(1-this.es)/b,C=r/(A*this.k0),D=Math.pow(C,2);f=c-A*v*D/B*(.5-D/24*(5+3*y+10*w-4*x-9*this.ep2-D/30*(61+90*y+298*w+45*z-252*this.ep2-3*x))),g=i(this.long0+C*(1-D/6*(1+2*y+w-D/20*(5-2*w+28*y-3*x+8*this.ep2+24*z)))/u)}else f=j*l(s),g=this.long0}return a.x=g,a.y=f,a},c.names=[\"Transverse_Mercator\",\"Transverse Mercator\",\"tmerc\"]},{\"../common/adjust_lon\":5,\"../common/asinz\":6,\"../common/e0fn\":7,\"../common/e1fn\":8,\"../common/e2fn\":9,\"../common/e3fn\":10,\"../common/mlfn\":14,\"../common/sign\":21}],63:[function(a,b,c){var d=.017453292519943295,e=a(\"./tmerc\");c.dependsOn=\"tmerc\",c.init=function(){this.zone&&(this.lat0=0,this.long0=(6*Math.abs(this.zone)-183)*d,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,e.init.apply(this),this.forward=e.forward,this.inverse=e.inverse)},c.names=[\"Universal Transverse Mercator System\",\"utm\"]},{\"./tmerc\":62}],64:[function(a,b,c){var d=a(\"../common/adjust_lon\"),e=Math.PI/2,f=1e-10,g=a(\"../common/asinz\");c.init=function(){this.R=this.a},c.forward=function(a){var b,c,h=a.x,i=a.y,j=d(h-this.long0);Math.abs(i)<=f&&(b=this.x0+this.R*j,c=this.y0);var k=g(2*Math.abs(i/Math.PI));(Math.abs(j)<=f||Math.abs(Math.abs(i)-e)<=f)&&(b=this.x0,c=i>=0?this.y0+Math.PI*this.R*Math.tan(.5*k):this.y0+Math.PI*this.R*-Math.tan(.5*k));var l=.5*Math.abs(Math.PI/j-j/Math.PI),m=l*l,n=Math.sin(k),o=Math.cos(k),p=o/(n+o-1),q=p*p,r=p*(2/n-1),s=r*r,t=Math.PI*this.R*(l*(p-s)+Math.sqrt(m*(p-s)*(p-s)-(s+m)*(q-s)))/(s+m);0>j&&(t=-t),b=this.x0+t;var u=m+p;return t=Math.PI*this.R*(r*u-l*Math.sqrt((s+m)*(m+1)-u*u))/(s+m),c=i>=0?this.y0+t:this.y0-t,a.x=b,a.y=c,a},c.inverse=function(a){var b,c,e,g,h,i,j,k,l,m,n,o,p;return a.x-=this.x0,a.y-=this.y0,n=Math.PI*this.R,e=a.x/n,g=a.y/n,h=e*e+g*g,i=-Math.abs(g)*(1+h),j=i-2*g*g+e*e,k=-2*i+1+2*g*g+h*h,p=g*g/k+(2*j*j*j/k/k/k-9*i*j/k/k)/27,l=(i-j*j/3/k)/k,m=2*Math.sqrt(-l/3),n=3*p/l/m,Math.abs(n)>1&&(n=n>=0?1:-1),o=Math.acos(n)/3,c=a.y>=0?(-m*Math.cos(o+Math.PI/3)-j/3/k)*Math.PI:-(-m*Math.cos(o+Math.PI/3)-j/3/k)*Math.PI,b=Math.abs(e)<f?this.long0:d(this.long0+Math.PI*(h-1+Math.sqrt(1+2*(e*e-g*g)+h*h))/2/e),a.x=b,a.y=c,a},c.names=[\"Van_der_Grinten_I\",\"VanDerGrinten\",\"vandg\"]},{\"../common/adjust_lon\":5,\"../common/asinz\":6}],65:[function(a,b,c){var d=.017453292519943295,e=57.29577951308232,f=1,g=2,h=a(\"./datum_transform\"),i=a(\"./adjust_axis\"),j=a(\"./Proj\"),k=a(\"./common/toPoint\");b.exports=function l(a,b,c){function m(a,b){return(a.datum.datum_type===f||a.datum.datum_type===g)&&\"WGS84\"!==b.datumCode}var n;return Array.isArray(c)&&(c=k(c)),a.datum&&b.datum&&(m(a,b)||m(b,a))&&(n=new j(\"WGS84\"),l(a,n,c),a=n),\"enu\"!==a.axis&&i(a,!1,c),\"longlat\"===a.projName?(c.x*=d,c.y*=d):(a.to_meter&&(c.x*=a.to_meter,c.y*=a.to_meter),a.inverse(c)),a.from_greenwich&&(c.x+=a.from_greenwich),c=h(a.datum,b.datum,c),b.from_greenwich&&(c.x-=b.from_greenwich),\"longlat\"===b.projName?(c.x*=e,c.y*=e):(b.forward(c),b.to_meter&&(c.x/=b.to_meter,c.y/=b.to_meter)),\"enu\"!==b.axis&&i(b,!0,c),c}},{\"./Proj\":2,\"./adjust_axis\":3,\"./common/toPoint\":23,\"./datum_transform\":31}],66:[function(a,b,c){function d(a,b,c){a[b]=c.map(function(a){var b={};return e(a,b),b}).reduce(function(a,b){return j(a,b)},{})}function e(a,b){var c;return Array.isArray(a)?(c=a.shift(),\"PARAMETER\"===c&&(c=a.shift()),1===a.length?Array.isArray(a[0])?(b[c]={},e(a[0],b[c])):b[c]=a[0]:a.length?\"TOWGS84\"===c?b[c]=a:(b[c]={},[\"UNIT\",\"PRIMEM\",\"VERT_DATUM\"].indexOf(c)>-1?(b[c]={name:a[0].toLowerCase(),convert:a[1]},3===a.length&&(b[c].auth=a[2])):\"SPHEROID\"===c?(b[c]={name:a[0],a:a[1],rf:a[2]},4===a.length&&(b[c].auth=a[3])):[\"GEOGCS\",\"GEOCCS\",\"DATUM\",\"VERT_CS\",\"COMPD_CS\",\"LOCAL_CS\",\"FITTED_CS\",\"LOCAL_DATUM\"].indexOf(c)>-1?(a[0]=[\"name\",a[0]],d(b,c,a)):a.every(function(a){return Array.isArray(a)})?d(b,c,a):e(a,b[c])):b[c]=!0,void 0):void(b[a]=!0)}function f(a,b){var c=b[0],d=b[1];!(c in a)&&d in a&&(a[c]=a[d],3===b.length&&(a[c]=b[2](a[c])))}function g(a){return a*i}function h(a){function b(b){var c=a.to_meter||1;return parseFloat(b,10)*c}\"GEOGCS\"===a.type?a.projName=\"longlat\":\"LOCAL_CS\"===a.type?(a.projName=\"identity\",a.local=!0):\"object\"==typeof a.PROJECTION?a.projName=Object.keys(a.PROJECTION)[0]:a.projName=a.PROJECTION,a.UNIT&&(a.units=a.UNIT.name.toLowerCase(),\"metre\"===a.units&&(a.units=\"meter\"),\na.UNIT.convert&&(\"GEOGCS\"===a.type?a.DATUM&&a.DATUM.SPHEROID&&(a.to_meter=parseFloat(a.UNIT.convert,10)*a.DATUM.SPHEROID.a):a.to_meter=parseFloat(a.UNIT.convert,10))),a.GEOGCS&&(a.GEOGCS.DATUM?a.datumCode=a.GEOGCS.DATUM.name.toLowerCase():a.datumCode=a.GEOGCS.name.toLowerCase(),\"d_\"===a.datumCode.slice(0,2)&&(a.datumCode=a.datumCode.slice(2)),(\"new_zealand_geodetic_datum_1949\"===a.datumCode||\"new_zealand_1949\"===a.datumCode)&&(a.datumCode=\"nzgd49\"),\"wgs_1984\"===a.datumCode&&(\"Mercator_Auxiliary_Sphere\"===a.PROJECTION&&(a.sphere=!0),a.datumCode=\"wgs84\"),\"_ferro\"===a.datumCode.slice(-6)&&(a.datumCode=a.datumCode.slice(0,-6)),\"_jakarta\"===a.datumCode.slice(-8)&&(a.datumCode=a.datumCode.slice(0,-8)),~a.datumCode.indexOf(\"belge\")&&(a.datumCode=\"rnb72\"),a.GEOGCS.DATUM&&a.GEOGCS.DATUM.SPHEROID&&(a.ellps=a.GEOGCS.DATUM.SPHEROID.name.replace(\"_19\",\"\").replace(/[Cc]larke\\_18/,\"clrk\"),\"international\"===a.ellps.toLowerCase().slice(0,13)&&(a.ellps=\"intl\"),a.a=a.GEOGCS.DATUM.SPHEROID.a,a.rf=parseFloat(a.GEOGCS.DATUM.SPHEROID.rf,10)),~a.datumCode.indexOf(\"osgb_1936\")&&(a.datumCode=\"osgb36\")),a.b&&!isFinite(a.b)&&(a.b=a.a);var c=function(b){return f(a,b)},d=[[\"standard_parallel_1\",\"Standard_Parallel_1\"],[\"standard_parallel_2\",\"Standard_Parallel_2\"],[\"false_easting\",\"False_Easting\"],[\"false_northing\",\"False_Northing\"],[\"central_meridian\",\"Central_Meridian\"],[\"latitude_of_origin\",\"Latitude_Of_Origin\"],[\"latitude_of_origin\",\"Central_Parallel\"],[\"scale_factor\",\"Scale_Factor\"],[\"k0\",\"scale_factor\"],[\"latitude_of_center\",\"Latitude_of_center\"],[\"lat0\",\"latitude_of_center\",g],[\"longitude_of_center\",\"Longitude_Of_Center\"],[\"longc\",\"longitude_of_center\",g],[\"x0\",\"false_easting\",b],[\"y0\",\"false_northing\",b],[\"long0\",\"central_meridian\",g],[\"lat0\",\"latitude_of_origin\",g],[\"lat0\",\"standard_parallel_1\",g],[\"lat1\",\"standard_parallel_1\",g],[\"lat2\",\"standard_parallel_2\",g],[\"alpha\",\"azimuth\",g],[\"srsCode\",\"name\"]];d.forEach(c),a.long0||!a.longc||\"Albers_Conic_Equal_Area\"!==a.projName&&\"Lambert_Azimuthal_Equal_Area\"!==a.projName||(a.long0=a.longc),a.lat_ts||!a.lat1||\"Stereographic_South_Pole\"!==a.projName&&\"Polar Stereographic (variant B)\"!==a.projName||(a.lat0=g(a.lat1>0?90:-90),a.lat_ts=a.lat1)}var i=.017453292519943295,j=a(\"./extend\");b.exports=function(a,b){var c=JSON.parse((\",\"+a).replace(/\\s*\\,\\s*([A-Z_0-9]+?)(\\[)/g,',[\"$1\",').slice(1).replace(/\\s*\\,\\s*([A-Z_0-9]+?)\\]/g,',\"$1\"]').replace(/,\\[\"VERTCS\".+/,\"\")),d=c.shift(),f=c.shift();c.unshift([\"name\",f]),c.unshift([\"type\",d]),c.unshift(\"output\");var g={};return e(c,g),h(g.output),j(b,g.output)}},{\"./extend\":34}],67:[function(a,b,c){function d(a){return a*(Math.PI/180)}function e(a){return 180*(a/Math.PI)}function f(a){var b,c,e,f,g,i,j,k,l,m=a.lat,n=a.lon,o=6378137,p=.00669438,q=.9996,r=d(m),s=d(n);l=Math.floor((n+180)/6)+1,180===n&&(l=60),m>=56&&64>m&&n>=3&&12>n&&(l=32),m>=72&&84>m&&(n>=0&&9>n?l=31:n>=9&&21>n?l=33:n>=21&&33>n?l=35:n>=33&&42>n&&(l=37)),b=6*(l-1)-180+3,k=d(b),c=p/(1-p),e=o/Math.sqrt(1-p*Math.sin(r)*Math.sin(r)),f=Math.tan(r)*Math.tan(r),g=c*Math.cos(r)*Math.cos(r),i=Math.cos(r)*(s-k),j=o*((1-p/4-3*p*p/64-5*p*p*p/256)*r-(3*p/8+3*p*p/32+45*p*p*p/1024)*Math.sin(2*r)+(15*p*p/256+45*p*p*p/1024)*Math.sin(4*r)-35*p*p*p/3072*Math.sin(6*r));var t=q*e*(i+(1-f+g)*i*i*i/6+(5-18*f+f*f+72*g-58*c)*i*i*i*i*i/120)+5e5,u=q*(j+e*Math.tan(r)*(i*i/2+(5-f+9*g+4*g*g)*i*i*i*i/24+(61-58*f+f*f+600*g-330*c)*i*i*i*i*i*i/720));return 0>m&&(u+=1e7),{northing:Math.round(u),easting:Math.round(t),zoneNumber:l,zoneLetter:h(m)}}function g(a){var b=a.northing,c=a.easting,d=a.zoneLetter,f=a.zoneNumber;if(0>f||f>60)return null;var h,i,j,k,l,m,n,o,p,q,r=.9996,s=6378137,t=.00669438,u=(1-Math.sqrt(1-t))/(1+Math.sqrt(1-t)),v=c-5e5,w=b;\"N\">d&&(w-=1e7),o=6*(f-1)-180+3,h=t/(1-t),n=w/r,p=n/(s*(1-t/4-3*t*t/64-5*t*t*t/256)),q=p+(3*u/2-27*u*u*u/32)*Math.sin(2*p)+(21*u*u/16-55*u*u*u*u/32)*Math.sin(4*p)+151*u*u*u/96*Math.sin(6*p),i=s/Math.sqrt(1-t*Math.sin(q)*Math.sin(q)),j=Math.tan(q)*Math.tan(q),k=h*Math.cos(q)*Math.cos(q),l=s*(1-t)/Math.pow(1-t*Math.sin(q)*Math.sin(q),1.5),m=v/(i*r);var x=q-i*Math.tan(q)/l*(m*m/2-(5+3*j+10*k-4*k*k-9*h)*m*m*m*m/24+(61+90*j+298*k+45*j*j-252*h-3*k*k)*m*m*m*m*m*m/720);x=e(x);var y=(m-(1+2*j+k)*m*m*m/6+(5-2*k+28*j-3*k*k+8*h+24*j*j)*m*m*m*m*m/120)/Math.cos(q);y=o+e(y);var z;if(a.accuracy){var A=g({northing:a.northing+a.accuracy,easting:a.easting+a.accuracy,zoneLetter:a.zoneLetter,zoneNumber:a.zoneNumber});z={top:A.lat,right:A.lon,bottom:x,left:y}}else z={lat:x,lon:y};return z}function h(a){var b=\"Z\";return 84>=a&&a>=72?b=\"X\":72>a&&a>=64?b=\"W\":64>a&&a>=56?b=\"V\":56>a&&a>=48?b=\"U\":48>a&&a>=40?b=\"T\":40>a&&a>=32?b=\"S\":32>a&&a>=24?b=\"R\":24>a&&a>=16?b=\"Q\":16>a&&a>=8?b=\"P\":8>a&&a>=0?b=\"N\":0>a&&a>=-8?b=\"M\":-8>a&&a>=-16?b=\"L\":-16>a&&a>=-24?b=\"K\":-24>a&&a>=-32?b=\"J\":-32>a&&a>=-40?b=\"H\":-40>a&&a>=-48?b=\"G\":-48>a&&a>=-56?b=\"F\":-56>a&&a>=-64?b=\"E\":-64>a&&a>=-72?b=\"D\":-72>a&&a>=-80&&(b=\"C\"),b}function i(a,b){var c=\"00000\"+a.easting,d=\"00000\"+a.northing;return a.zoneNumber+a.zoneLetter+j(a.easting,a.northing,a.zoneNumber)+c.substr(c.length-5,b)+d.substr(d.length-5,b)}function j(a,b,c){var d=k(c),e=Math.floor(a/1e5),f=Math.floor(b/1e5)%20;return l(e,f,d)}function k(a){var b=a%q;return 0===b&&(b=q),b}function l(a,b,c){var d=c-1,e=r.charCodeAt(d),f=s.charCodeAt(d),g=e+a-1,h=f+b,i=!1;g>x&&(g=g-x+t-1,i=!0),(g===u||u>e&&g>u||(g>u||u>e)&&i)&&g++,(g===v||v>e&&g>v||(g>v||v>e)&&i)&&(g++,g===u&&g++),g>x&&(g=g-x+t-1),h>w?(h=h-w+t-1,i=!0):i=!1,(h===u||u>f&&h>u||(h>u||u>f)&&i)&&h++,(h===v||v>f&&h>v||(h>v||v>f)&&i)&&(h++,h===u&&h++),h>w&&(h=h-w+t-1);var j=String.fromCharCode(g)+String.fromCharCode(h);return j}function m(a){if(a&&0===a.length)throw\"MGRSPoint coverting from nothing\";for(var b,c=a.length,d=null,e=\"\",f=0;!/[A-Z]/.test(b=a.charAt(f));){if(f>=2)throw\"MGRSPoint bad conversion from: \"+a;e+=b,f++}var g=parseInt(e,10);if(0===f||f+3>c)throw\"MGRSPoint bad conversion from: \"+a;var h=a.charAt(f++);if(\"A\">=h||\"B\"===h||\"Y\"===h||h>=\"Z\"||\"I\"===h||\"O\"===h)throw\"MGRSPoint zone letter \"+h+\" not handled: \"+a;d=a.substring(f,f+=2);for(var i=k(g),j=n(d.charAt(0),i),l=o(d.charAt(1),i);l<p(h);)l+=2e6;var m=c-f;if(m%2!==0)throw\"MGRSPoint has to have an even number \\nof digits after the zone letter and two 100km letters - front \\nhalf for easting meters, second half for \\nnorthing meters\"+a;var q,r,s,t,u,v=m/2,w=0,x=0;return v>0&&(q=1e5/Math.pow(10,v),r=a.substring(f,f+v),w=parseFloat(r)*q,s=a.substring(f+v),x=parseFloat(s)*q),t=w+j,u=x+l,{easting:t,northing:u,zoneLetter:h,zoneNumber:g,accuracy:q}}function n(a,b){for(var c=r.charCodeAt(b-1),d=1e5,e=!1;c!==a.charCodeAt(0);){if(c++,c===u&&c++,c===v&&c++,c>x){if(e)throw\"Bad character: \"+a;c=t,e=!0}d+=1e5}return d}function o(a,b){if(a>\"V\")throw\"MGRSPoint given invalid Northing \"+a;for(var c=s.charCodeAt(b-1),d=0,e=!1;c!==a.charCodeAt(0);){if(c++,c===u&&c++,c===v&&c++,c>w){if(e)throw\"Bad character: \"+a;c=t,e=!0}d+=1e5}return d}function p(a){var b;switch(a){case\"C\":b=11e5;break;case\"D\":b=2e6;break;case\"E\":b=28e5;break;case\"F\":b=37e5;break;case\"G\":b=46e5;break;case\"H\":b=55e5;break;case\"J\":b=64e5;break;case\"K\":b=73e5;break;case\"L\":b=82e5;break;case\"M\":b=91e5;break;case\"N\":b=0;break;case\"P\":b=8e5;break;case\"Q\":b=17e5;break;case\"R\":b=26e5;break;case\"S\":b=35e5;break;case\"T\":b=44e5;break;case\"U\":b=53e5;break;case\"V\":b=62e5;break;case\"W\":b=7e6;break;case\"X\":b=79e5;break;default:b=-1}if(b>=0)return b;throw\"Invalid zone letter: \"+a}var q=6,r=\"AJSAJS\",s=\"AFAFAF\",t=65,u=73,v=79,w=86,x=90;c.forward=function(a,b){return b=b||5,i(f({lat:a[1],lon:a[0]}),b)},c.inverse=function(a){var b=g(m(a.toUpperCase()));return b.lat&&b.lon?[b.lon,b.lat,b.lon,b.lat]:[b.left,b.bottom,b.right,b.top]},c.toPoint=function(a){var b=g(m(a.toUpperCase()));return b.lat&&b.lon?[b.lon,b.lat]:[(b.left+b.right)/2,(b.top+b.bottom)/2]}},{}],68:[function(a,b,c){b.exports={name:\"proj4\",version:\"2.3.12\",description:\"Proj4js is a JavaScript library to transform point coordinates from one coordinate system to another, including datum transformations.\",main:\"lib/index.js\",directories:{test:\"test\",doc:\"docs\"},scripts:{test:\"./node_modules/istanbul/lib/cli.js test ./node_modules/mocha/bin/_mocha test/test.js\"},repository:{type:\"git\",url:\"git://github.com/proj4js/proj4js.git\"},author:\"\",license:\"MIT\",jam:{main:\"dist/proj4.js\",include:[\"dist/proj4.js\",\"README.md\",\"AUTHORS\",\"LICENSE.md\"]},devDependencies:{\"grunt-cli\":\"~0.1.13\",grunt:\"~0.4.2\",\"grunt-contrib-connect\":\"~0.6.0\",\"grunt-contrib-jshint\":\"~0.8.0\",chai:\"~1.8.1\",mocha:\"~1.17.1\",\"grunt-mocha-phantomjs\":\"~0.4.0\",browserify:\"~3.24.5\",\"grunt-browserify\":\"~1.3.0\",\"grunt-contrib-uglify\":\"~0.3.2\",curl:\"git://github.com/cujojs/curl.git\",istanbul:\"~0.2.4\",tin:\"~0.4.0\"},dependencies:{mgrs:\"~0.0.2\"}}},{}],\"./includedProjections\":[function(a,b,c){b.exports=a(\"hTEDpn\")},{}],hTEDpn:[function(a,b,c){var d=[a(\"./lib/projections/tmerc\"),a(\"./lib/projections/utm\"),a(\"./lib/projections/sterea\"),a(\"./lib/projections/stere\"),a(\"./lib/projections/somerc\"),a(\"./lib/projections/omerc\"),a(\"./lib/projections/lcc\"),a(\"./lib/projections/krovak\"),a(\"./lib/projections/cass\"),a(\"./lib/projections/laea\"),a(\"./lib/projections/aea\"),a(\"./lib/projections/gnom\"),a(\"./lib/projections/cea\"),a(\"./lib/projections/eqc\"),a(\"./lib/projections/poly\"),a(\"./lib/projections/nzmg\"),a(\"./lib/projections/mill\"),a(\"./lib/projections/sinu\"),a(\"./lib/projections/moll\"),a(\"./lib/projections/eqdc\"),a(\"./lib/projections/vandg\"),a(\"./lib/projections/aeqd\")];b.exports=function(proj4){d.forEach(function(a){proj4.Proj.projections.add(a)})}},{\"./lib/projections/aea\":40,\"./lib/projections/aeqd\":41,\"./lib/projections/cass\":42,\"./lib/projections/cea\":43,\"./lib/projections/eqc\":44,\"./lib/projections/eqdc\":45,\"./lib/projections/gnom\":47,\"./lib/projections/krovak\":48,\"./lib/projections/laea\":49,\"./lib/projections/lcc\":50,\"./lib/projections/mill\":53,\"./lib/projections/moll\":54,\"./lib/projections/nzmg\":55,\"./lib/projections/omerc\":56,\"./lib/projections/poly\":57,\"./lib/projections/sinu\":58,\"./lib/projections/somerc\":59,\"./lib/projections/stere\":60,\"./lib/projections/sterea\":61,\"./lib/projections/tmerc\":62,\"./lib/projections/utm\":63,\"./lib/projections/vandg\":64}]},{},[36])(36)});"
  },
  {
    "path": "libs/shapefile/shapefile.js",
    "content": "// https://github.com/mbostock/shapefile Version 0.6.2. Copyright 2017 Mike Bostock.\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.shapefile = global.shapefile || {})));\n}(this, (function (exports) { 'use strict';\n\nvar array_cancel = function() {\n  this._array = null;\n  return Promise.resolve();\n};\n\nvar array_read = function() {\n  var array = this._array;\n  this._array = null;\n  return Promise.resolve(array ? {done: false, value: array} : {done: true, value: undefined});\n};\n\nfunction array(array) {\n  return new ArraySource(array instanceof Uint8Array ? array : new Uint8Array(array));\n}\n\nfunction ArraySource(array) {\n  this._array = array;\n}\n\nArraySource.prototype.read = array_read;\nArraySource.prototype.cancel = array_cancel;\n\nvar fetchPath = function(url) {\n  return fetch(url).then(function(response) {\n    return response.body && response.body.getReader\n        ? response.body.getReader()\n        : response.arrayBuffer().then(array);\n  });\n};\n\nvar requestPath = function(url) {\n  return new Promise(function(resolve, reject) {\n    var request = new XMLHttpRequest;\n    request.responseType = \"arraybuffer\";\n    request.onload = function() { resolve(array(request.response)); };\n    request.onerror = reject;\n    request.ontimeout = reject;\n    request.open(\"GET\", url, true);\n    request.send();\n  });\n};\n\nfunction path(path) {\n  return (typeof fetch === \"function\" ? fetchPath : requestPath)(path);\n}\n\nfunction stream(source) {\n  return typeof source.read === \"function\" ? source : source.getReader();\n}\n\nvar empty = new Uint8Array(0);\n\nvar slice_cancel = function() {\n  return this._source.cancel();\n};\n\nfunction concat(a, b) {\n  if (!a.length) return b;\n  if (!b.length) return a;\n  var c = new Uint8Array(a.length + b.length);\n  c.set(a);\n  c.set(b, a.length);\n  return c;\n}\n\nvar slice_read = function() {\n  var that = this, array = that._array.subarray(that._index);\n  return that._source.read().then(function(result) {\n    that._array = empty;\n    that._index = 0;\n    return result.done ? (array.length > 0\n        ? {done: false, value: array}\n        : {done: true, value: undefined})\n        : {done: false, value: concat(array, result.value)};\n  });\n};\n\nvar slice_slice = function(length) {\n  if ((length |= 0) < 0) throw new Error(\"invalid length\");\n  var that = this, index = this._array.length - this._index;\n\n  // If the request fits within the remaining buffer, resolve it immediately.\n  if (this._index + length <= this._array.length) {\n    return Promise.resolve(this._array.subarray(this._index, this._index += length));\n  }\n\n  // Otherwise, read chunks repeatedly until the request is fulfilled.\n  var array = new Uint8Array(length);\n  array.set(this._array.subarray(this._index));\n  return (function read() {\n    return that._source.read().then(function(result) {\n\n      // When done, its possible the request wasnt fully fullfilled!\n      // If so, the pre-allocated array is too big and needs slicing.\n      if (result.done) {\n        that._array = empty;\n        that._index = 0;\n        return index > 0 ? array.subarray(0, index) : null;\n      }\n\n      // If this chunk fulfills the request, return the resulting array.\n      if (index + result.value.length >= length) {\n        that._array = result.value;\n        that._index = length - index;\n        array.set(result.value.subarray(0, length - index), index);\n        return array;\n      }\n\n      // Otherwise copy this chunk into the array, then read the next chunk.\n      array.set(result.value, index);\n      index += result.value.length;\n      return read();\n    });\n  })();\n};\n\nfunction slice(source) {\n  return typeof source.slice === \"function\" ? source :\n      new SliceSource(typeof source.read === \"function\" ? source\n          : source.getReader());\n}\n\nfunction SliceSource(source) {\n  this._source = source;\n  this._array = empty;\n  this._index = 0;\n}\n\nSliceSource.prototype.read = slice_read;\nSliceSource.prototype.slice = slice_slice;\nSliceSource.prototype.cancel = slice_cancel;\n\nvar dbf_cancel = function() {\n  return this._source.cancel();\n};\n\nvar readBoolean = function(value) {\n  return /^[nf]$/i.test(value) ? false\n      : /^[yt]$/i.test(value) ? true\n      : null;\n};\n\nvar readDate = function(value) {\n  return new Date(+value.substring(0, 4), value.substring(4, 6) - 1, +value.substring(6, 8));\n};\n\nvar readNumber = function(value) {\n  return !(value = value.trim()) || isNaN(value = +value) ? null : value;\n};\n\nvar readString = function(value) {\n  return value.trim() || null;\n};\n\nvar types = {\n  B: readNumber,\n  C: readString,\n  D: readDate,\n  F: readNumber,\n  L: readBoolean,\n  M: readNumber,\n  N: readNumber\n};\n\nvar dbf_read = function() {\n  var that = this, i = 1;\n  return that._source.slice(that._recordLength).then(function(value) {\n    return value && (value[0] !== 0x1a) ? {done: false, value: that._fields.reduce(function(p, f) {\n      p[f.name] = types[f.type](that._decode(value.subarray(i, i += f.length)));\n      return p;\n    }, {})} : {done: true, value: undefined};\n  });\n};\n\nvar view = function(array) {\n  return new DataView(array.buffer, array.byteOffset, array.byteLength);\n};\n\nvar dbf = function(source, decoder) {\n  source = slice(source);\n  return source.slice(32).then(function(array) {\n    var head = view(array);\n    return source.slice(head.getUint16(8, true) - 32).then(function(array) {\n      return new Dbf(source, decoder, head, view(array));\n    });\n  });\n};\n\nfunction Dbf(source, decoder, head, body) {\n  this._source = source;\n  this._decode = decoder.decode.bind(decoder);\n  this._recordLength = head.getUint16(10, true);\n  this._fields = [];\n  for (var n = 0; body.getUint8(n) !== 0x0d; n += 32) {\n    for (var j = 0; j < 11; ++j) if (body.getUint8(n + j) === 0) break;\n    this._fields.push({\n      name: this._decode(new Uint8Array(body.buffer, body.byteOffset + n, j)),\n      type: String.fromCharCode(body.getUint8(n + 11)),\n      length: body.getUint8(n + 16)\n    });\n  }\n}\n\nvar prototype = Dbf.prototype;\nprototype.read = dbf_read;\nprototype.cancel = dbf_cancel;\n\nfunction cancel() {\n  return this._source.cancel();\n}\n\nvar readMultiPoint = function(record) {\n  var i = 40, j, n = record.getInt32(36, true), coordinates = new Array(n);\n  for (j = 0; j < n; ++j, i += 16) coordinates[j] = [record.getFloat64(i, true), record.getFloat64(i + 8, true)];\n  return {type: \"MultiPoint\", coordinates: coordinates};\n};\n\nvar readNull = function() {\n  return null;\n};\n\nvar readPoint = function(record) {\n  return {type: \"Point\", coordinates: [record.getFloat64(4, true), record.getFloat64(12, true)]};\n};\n\nvar readPolygon = function(record) {\n  var i = 44, j, n = record.getInt32(36, true), m = record.getInt32(40, true), parts = new Array(n), points = new Array(m), polygons = [], holes = [];\n  for (j = 0; j < n; ++j, i += 4) parts[j] = record.getInt32(i, true);\n  for (j = 0; j < m; ++j, i += 16) points[j] = [record.getFloat64(i, true), record.getFloat64(i + 8, true)];\n\n  parts.forEach(function(i, j) {\n    var ring = points.slice(i, parts[j + 1]);\n    if (ringClockwise(ring)) polygons.push([ring]);\n    else holes.push(ring);\n  });\n\n  holes.forEach(function(hole) {\n    polygons.some(function(polygon) {\n      if (ringContainsSome(polygon[0], hole)) {\n        polygon.push(hole);\n        return true;\n      }\n    }) || polygons.push([hole]);\n  });\n\n  return polygons.length === 1\n      ? {type: \"Polygon\", coordinates: polygons[0]}\n      : {type: \"MultiPolygon\", coordinates: polygons};\n};\n\nfunction ringClockwise(ring) {\n  if ((n = ring.length) < 4) return false;\n  var i = 0, n, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n  return area >= 0;\n}\n\nfunction ringContainsSome(ring, hole) {\n  var i = -1, n = hole.length, c;\n  while (++i < n) {\n    if (c = ringContains(ring, hole[i])) {\n      return c > 0;\n    }\n  }\n  return false;\n}\n\nfunction ringContains(ring, point) {\n  var x = point[0], y = point[1], contains = -1;\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n    var pi = ring[i], xi = pi[0], yi = pi[1],\n        pj = ring[j], xj = pj[0], yj = pj[1];\n    if (segmentContains(pi, pj, point)) {\n      return 0;\n    }\n    if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) {\n      contains = -contains;\n    }\n  }\n  return contains;\n}\n\nfunction segmentContains(p0, p1, p2) {\n  var x20 = p2[0] - p0[0], y20 = p2[1] - p0[1];\n  if (x20 === 0 && y20 === 0) return true;\n  var x10 = p1[0] - p0[0], y10 = p1[1] - p0[1];\n  if (x10 === 0 && y10 === 0) return false;\n  var t = (x20 * x10 + y20 * y10) / (x10 * x10 + y10 * y10);\n  return t < 0 || t > 1 ? false : t === 0 || t === 1 ? true : t * x10 === x20 && t * y10 === y20;\n}\n\nvar readPolyLine = function(record) {\n  var i = 44, j, n = record.getInt32(36, true), m = record.getInt32(40, true), parts = new Array(n), points = new Array(m);\n  for (j = 0; j < n; ++j, i += 4) parts[j] = record.getInt32(i, true);\n  for (j = 0; j < m; ++j, i += 16) points[j] = [record.getFloat64(i, true), record.getFloat64(i + 8, true)];\n  return n === 1\n      ? {type: \"LineString\", coordinates: points}\n      : {type: \"MultiLineString\", coordinates: parts.map(function(i, j) { return points.slice(i, parts[j + 1]); })};\n};\n\nvar shp_read = function() {\n  var that = this;\n  return that._source.slice(8).then(function(array) {\n    if (array == null) return {done: true, value: undefined};\n    var header = view(array);\n    return that._source.slice(header.getInt32(4, false) * 2).then(function(array) {\n      var record = view(array);\n      return {done: false, value: record.getInt32(0, true) ? that._type(record) : readNull()};\n    });\n  });\n};\n\nvar types$1 = {\n  0: readNull,\n  1: readPoint,\n  3: readPolyLine,\n  5: readPolygon,\n  8: readMultiPoint,\n  11: readPoint,\n  13: readPolyLine,\n  15: readPolygon,\n  18: readMultiPoint\n};\n\nvar shp = function(source) {\n  source = slice(source);\n  return source.slice(100).then(function(array) {\n    return new Shp(source, view(array));\n  });\n};\n\nfunction Shp(source, header) {\n  var type = header.getInt32(32, true);\n  if (!(type in types$1)) throw new Error(\"unsupported shape type: \" + type);\n  this._source = source;\n  this._type = types$1[type];\n  this.bbox = [header.getFloat64(36, true), header.getFloat64(44, true), header.getFloat64(52, true), header.getFloat64(60, true)];\n}\n\nvar prototype$2 = Shp.prototype;\nprototype$2.read = shp_read;\nprototype$2.cancel = cancel;\n\nfunction noop() {}\n\nvar shapefile_cancel = function() {\n  return Promise.all([\n    this._dbf && this._dbf.cancel(),\n    this._shp.cancel()\n  ]).then(noop);\n};\n\nvar shapefile_read = function() {\n  var that = this;\n  return Promise.all([\n    that._dbf ? that._dbf.read() : {value: {}},\n    that._shp.read()\n  ]).then(function(results) {\n    var dbf = results[0], shp = results[1];\n    return shp.done ? shp : {\n      done: false,\n      value: {\n        type: \"Feature\",\n        properties: dbf.value,\n        geometry: shp.value\n      }\n    };\n  });\n};\n\nvar shapefile = function(shpSource, dbfSource, decoder) {\n  return Promise.all([\n    shp(shpSource),\n    dbfSource && dbf(dbfSource, decoder)\n  ]).then(function(sources) {\n    return new Shapefile(sources[0], sources[1]);\n  });\n};\n\nfunction Shapefile(shp$$1, dbf$$1) {\n  this._shp = shp$$1;\n  this._dbf = dbf$$1;\n  this.bbox = shp$$1.bbox;\n}\n\nvar prototype$1 = Shapefile.prototype;\nprototype$1.read = shapefile_read;\nprototype$1.cancel = shapefile_cancel;\n\nfunction open(shp$$1, dbf$$1, options) {\n  if (typeof dbf$$1 === \"string\") {\n    if (!/\\.dbf$/.test(dbf$$1)) dbf$$1 += \".dbf\";\n    dbf$$1 = path(dbf$$1, options);\n  } else if (dbf$$1 instanceof ArrayBuffer || dbf$$1 instanceof Uint8Array) {\n    dbf$$1 = array(dbf$$1);\n  } else if (dbf$$1 != null) {\n    dbf$$1 = stream(dbf$$1);\n  }\n  if (typeof shp$$1 === \"string\") {\n    if (!/\\.shp$/.test(shp$$1)) shp$$1 += \".shp\";\n    if (dbf$$1 === undefined) dbf$$1 = path(shp$$1.substring(0, shp$$1.length - 4) + \".dbf\", options).catch(function() {});\n    shp$$1 = path(shp$$1, options);\n  } else if (shp$$1 instanceof ArrayBuffer || shp$$1 instanceof Uint8Array) {\n    shp$$1 = array(shp$$1);\n  } else {\n    shp$$1 = stream(shp$$1);\n  }\n  return Promise.all([shp$$1, dbf$$1]).then(function(sources) {\n    var shp$$1 = sources[0], dbf$$1 = sources[1], encoding = \"windows-1252\";\n    if (options && options.encoding != null) encoding = options.encoding;\n    return shapefile(shp$$1, dbf$$1, dbf$$1 && new TextDecoder(encoding));\n  });\n}\n\nfunction openShp(source, options) {\n  if (typeof source === \"string\") {\n    if (!/\\.shp$/.test(source)) source += \".shp\";\n    source = path(source, options);\n  } else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n    source = array(source);\n  } else {\n    source = stream(source);\n  }\n  return Promise.resolve(source).then(shp);\n}\n\nfunction openDbf(source, options) {\n  var encoding = \"windows-1252\";\n  if (options && options.encoding != null) encoding = options.encoding;\n  encoding = new TextDecoder(encoding);\n  if (typeof source === \"string\") {\n    if (!/\\.dbf$/.test(source)) source += \".dbf\";\n    source = path(source, options);\n  } else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n    source = array(source);\n  } else {\n    source = stream(source);\n  }\n  return Promise.resolve(source).then(function(source) {\n    return dbf(source, encoding);\n  });\n}\n\nfunction read(shp$$1, dbf$$1, options) {\n  return open(shp$$1, dbf$$1, options).then(function(source) {\n    var features = [], collection = {type: \"FeatureCollection\", features: features, bbox: source.bbox};\n    return source.read().then(function read(result) {\n      if (result.done) return collection;\n      features.push(result.value);\n      return source.read().then(read);\n    });\n  });\n}\n\nexports.open = open;\nexports.openShp = openShp;\nexports.openDbf = openDbf;\nexports.read = read;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));"
  },
  {
    "path": "libs/spectrum/LICENSE",
    "content": "Copyright (c) Brian Grinstead\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "libs/spectrum/README.md",
    "content": "# Spectrum\n## The No Hassle Colorpicker\n\nSee the demo and docs: http://bgrins.github.io/spectrum.\n\nI wanted a colorpicker that didn't require images, and that had an API that made sense to me as a developer who has worked with color in a number of applications.  I had tried a number of existing plugins, but decided to try and make a smaller, simpler one.\n\nI started using canvas, then switched to CSS gradients, since it turned out to be easier to manage, and provided better cross browser support.\n\n### Basic Usage\n\nHead over to the [docs](http://bgrins.github.io/spectrum) for more information.  There is a visual demo of the different options hosted at: http://bgrins.github.io/spectrum.\n\n    <script src='spectrum.js'></script>\n    <link rel='stylesheet' href='spectrum.css' />\n\n    <input id='colorpicker' />\n\n    <script>\n    $(\"#colorpicker\").spectrum({\n        color: \"#f00\"\n    });\n    </script>\n\n### npm\n\nSpectrum is registered as package with npm.  It can be installed with:\n\n    npm install spectrum-colorpicker\n\n### Bower\n\nSpectrum is registered as a package with [Bower](http://bower.io/), so it can be pulled down using:\n\n    bower install spectrum\n\n### Using spectrum with a CDN\n\nCDN provided by [cdnjs](https://cdnjs.com/libraries/spectrum)\n\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectrum.min.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdnjs.cloudflare.com/ajax/libs/spectrum/1.8.0/spectrum.min.css\">\n\n### Continuous Integration\n\n[![Build Status](https://secure.travis-ci.org/bgrins/spectrum.png?branch=master)](http://travis-ci.org/bgrins/spectrum)\n\nVisit https://travis-ci.org/bgrins/spectrum to view the status of the automated tests.\n\n### Building Spectrum Locally\n\nIf you'd like to download and use the plugin, head over to http://bgrins.github.io/spectrum/ and click the 'Download Zip' button.\n\nIf you'd like to run the development version, spectrum uses Grunt to automate the testing, linting, and building.  Head over to http://gruntjs.com/getting-started for more information.  First, clone the repository, then run:\n\n    npm install -g grunt-cli\n    npm install\n\n    # runs jshint and the unit test suite\n    grunt\n\n    # runs jshint, the unit test suite, and builds a minified version of the file.\n    grunt build\n\n### Internationalization\n\nIf you are able to translate the text in the UI to another language, please do!  You can do so by either [filing a pull request](https://github.com/bgrins/spectrum/pulls) or [opening an issue]( https://github.com/bgrins/spectrum/issues) with the translation.  The existing languages are listed at: https://github.com/bgrins/spectrum/tree/master/i18n.\n\nFor an example, see the [Dutch translation](i18n/jquery.spectrum-nl.js).\n"
  },
  {
    "path": "libs/spectrum/spectrum.css",
    "content": "/***\nSpectrum Colorpicker v1.8.0\nhttps://github.com/bgrins/spectrum\nAuthor: Brian Grinstead\nLicense: MIT\n***/\n\n.sp-container {\n    position:absolute;\n    top:0;\n    left:0;\n    display:inline-block;\n    *display: inline;\n    *zoom: 1;\n    /* https://github.com/bgrins/spectrum/issues/40 */\n    z-index: 9999994;\n    overflow: hidden;\n}\n.sp-container.sp-flat {\n    position: relative;\n}\n\n/* Fix for * { box-sizing: border-box; } */\n.sp-container,\n.sp-container * {\n    -webkit-box-sizing: content-box;\n       -moz-box-sizing: content-box;\n            box-sizing: content-box;\n}\n\n/* http://ansciath.tumblr.com/post/7347495869/css-aspect-ratio */\n.sp-top {\n  position:relative;\n  width: 100%;\n  display:inline-block;\n}\n.sp-top-inner {\n   position:absolute;\n   top:0;\n   left:0;\n   bottom:0;\n   right:0;\n}\n.sp-color {\n    position: absolute;\n    top:0;\n    left:0;\n    bottom:0;\n    right:20%;\n}\n.sp-hue {\n    position: absolute;\n    top:0;\n    right:0;\n    bottom:0;\n    left:84%;\n    height: 100%;\n}\n\n.sp-clear-enabled .sp-hue {\n    top:33px;\n    height: 77.5%;\n}\n\n.sp-fill {\n    padding-top: 80%;\n}\n.sp-sat, .sp-val {\n    position: absolute;\n    top:0;\n    left:0;\n    right:0;\n    bottom:0;\n}\n\n.sp-alpha-enabled .sp-top {\n    margin-bottom: 18px;\n}\n.sp-alpha-enabled .sp-alpha {\n    display: block;\n}\n.sp-alpha-handle {\n    position:absolute;\n    top:-4px;\n    bottom: -4px;\n    width: 6px;\n    left: 50%;\n    cursor: pointer;\n    border: 1px solid black;\n    background: white;\n    opacity: .8;\n}\n.sp-alpha {\n    display: none;\n    position: absolute;\n    bottom: -14px;\n    right: 0;\n    left: 0;\n    height: 8px;\n}\n.sp-alpha-inner {\n    border: solid 1px #333;\n}\n\n.sp-clear {\n    display: none;\n}\n\n.sp-clear.sp-clear-display {\n    background-position: center;\n}\n\n.sp-clear-enabled .sp-clear {\n    display: block;\n    position:absolute;\n    top:0px;\n    right:0;\n    bottom:0;\n    left:84%;\n    height: 28px;\n}\n\n/* Don't allow text selection */\n.sp-container, .sp-replacer, .sp-preview, .sp-dragger, .sp-slider, .sp-alpha, .sp-clear, .sp-alpha-handle, .sp-container.sp-dragging .sp-input, .sp-container button  {\n    -webkit-user-select:none;\n    -moz-user-select: -moz-none;\n    -o-user-select:none;\n    user-select: none;\n}\n\n.sp-container.sp-input-disabled .sp-input-container {\n    display: none;\n}\n.sp-container.sp-buttons-disabled .sp-button-container {\n    display: none;\n}\n.sp-container.sp-palette-buttons-disabled .sp-palette-button-container {\n    display: none;\n}\n.sp-palette-only .sp-picker-container {\n    display: none;\n}\n.sp-palette-disabled .sp-palette-container {\n    display: none;\n}\n\n.sp-initial-disabled .sp-initial {\n    display: none;\n}\n\n\n/* Gradients for hue, saturation and value instead of images.  Not pretty... but it works */\n.sp-sat {\n    background-image: -webkit-gradient(linear,  0 0, 100% 0, from(#FFF), to(rgba(204, 154, 129, 0)));\n    background-image: -webkit-linear-gradient(left, #FFF, rgba(204, 154, 129, 0));\n    background-image: -moz-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: -o-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: -ms-linear-gradient(left, #fff, rgba(204, 154, 129, 0));\n    background-image: linear-gradient(to right, #fff, rgba(204, 154, 129, 0));\n    -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)\";\n    filter : progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr='#FFFFFFFF', endColorstr='#00CC9A81');\n}\n.sp-val {\n    background-image: -webkit-gradient(linear, 0 100%, 0 0, from(#000000), to(rgba(204, 154, 129, 0)));\n    background-image: -webkit-linear-gradient(bottom, #000000, rgba(204, 154, 129, 0));\n    background-image: -moz-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: -o-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: -ms-linear-gradient(bottom, #000, rgba(204, 154, 129, 0));\n    background-image: linear-gradient(to top, #000, rgba(204, 154, 129, 0));\n    -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)\";\n    filter : progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81', endColorstr='#FF000000');\n}\n\n.sp-hue {\n    background: -moz-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    background: -ms-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    background: -o-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    background: -webkit-gradient(linear, left top, left bottom, from(#ff0000), color-stop(0.17, #ffff00), color-stop(0.33, #00ff00), color-stop(0.5, #00ffff), color-stop(0.67, #0000ff), color-stop(0.83, #ff00ff), to(#ff0000));\n    background: -webkit-linear-gradient(top, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n    background: linear-gradient(to bottom, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n}\n\n/* IE filters do not support multiple color stops.\n   Generate 6 divs, line them up, and do two color gradients for each.\n   Yes, really.\n */\n.sp-1 {\n    height:17%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000', endColorstr='#ffff00');\n}\n.sp-2 {\n    height:16%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00', endColorstr='#00ff00');\n}\n.sp-3 {\n    height:17%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00', endColorstr='#00ffff');\n}\n.sp-4 {\n    height:17%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff', endColorstr='#0000ff');\n}\n.sp-5 {\n    height:16%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff', endColorstr='#ff00ff');\n}\n.sp-6 {\n    height:17%;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff', endColorstr='#ff0000');\n}\n\n.sp-hidden {\n    display: none !important;\n}\n\n/* Clearfix hack */\n.sp-cf:before, .sp-cf:after { content: \"\"; display: table; }\n.sp-cf:after { clear: both; }\n.sp-cf { *zoom: 1; }\n\n/* Mobile devices, make hue slider bigger so it is easier to slide */\n@media (max-device-width: 480px) {\n    .sp-color { right: 40%; }\n    .sp-hue { left: 63%; }\n    .sp-fill { padding-top: 60%; }\n}\n.sp-dragger {\n   border-radius: 5px;\n   height: 5px;\n   width: 5px;\n   border: 1px solid #fff;\n   background: #000;\n   cursor: pointer;\n   position:absolute;\n   top:0;\n   left: 0;\n}\n.sp-slider {\n    position: absolute;\n    top:0;\n    cursor:pointer;\n    height: 3px;\n    left: -1px;\n    right: -1px;\n    border: 1px solid #000;\n    background: white;\n    opacity: .8;\n}\n\n/*\nTheme authors:\nHere are the basic themeable display options (colors, fonts, global widths).\nSee http://bgrins.github.io/spectrum/themes/ for instructions.\n*/\n\n.sp-container {\n    border-radius: 0;\n    background-color: #ECECEC;\n    border: solid 1px #f0c49B;\n    padding: 0;\n}\n.sp-container, .sp-container button, .sp-container input, .sp-color, .sp-hue, .sp-clear {\n    font: normal 12px \"Lucida Grande\", \"Lucida Sans Unicode\", \"Lucida Sans\", Geneva, Verdana, sans-serif;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n}\n.sp-top {\n    margin-bottom: 3px;\n}\n.sp-color, .sp-hue, .sp-clear {\n    border: solid 1px #666;\n}\n\n/* Input */\n.sp-input-container {\n    float:right;\n    width: 100px;\n    margin-bottom: 4px;\n}\n.sp-initial-disabled  .sp-input-container {\n    width: 100%;\n}\n.sp-input {\n   font-size: 12px !important;\n   border: 1px inset;\n   padding: 4px 5px;\n   margin: 0;\n   width: 100%;\n   background:transparent;\n   border-radius: 3px;\n   color: #222;\n}\n.sp-input:focus  {\n    border: 1px solid orange;\n}\n.sp-input.sp-validation-error {\n    border: 1px solid red;\n    background: #fdd;\n}\n.sp-picker-container , .sp-palette-container {\n    float:left;\n    position: relative;\n    padding: 10px;\n    padding-bottom: 300px;\n    margin-bottom: -290px;\n}\n.sp-picker-container {\n    width: 172px;\n    border-left: solid 1px #fff;\n}\n\n/* Palettes */\n.sp-palette-container {\n    border-right: solid 1px #ccc;\n}\n\n.sp-palette-only .sp-palette-container {\n    border: 0;\n}\n\n.sp-palette .sp-thumb-el {\n    display: block;\n    position:relative;\n    float:left;\n    width: 24px;\n    height: 15px;\n    margin: 3px;\n    cursor: pointer;\n    border:solid 2px transparent;\n}\n.sp-palette .sp-thumb-el:hover, .sp-palette .sp-thumb-el.sp-thumb-active {\n    border-color: orange;\n}\n.sp-thumb-el {\n    position:relative;\n}\n\n/* Initial */\n.sp-initial {\n    float: left;\n    border: solid 1px #333;\n}\n.sp-initial span {\n    width: 30px;\n    height: 25px;\n    border:none;\n    display:block;\n    float:left;\n    margin:0;\n}\n\n.sp-initial .sp-clear-display {\n    background-position: center;\n}\n\n/* Buttons */\n.sp-palette-button-container,\n.sp-button-container {\n    float: right;\n}\n\n/* Replacer (the little preview div that shows up instead of the <input>) */\n.sp-replacer {\n    margin:0;\n    overflow:hidden;\n    cursor:pointer;\n    padding: 4px;\n    display:inline-block;\n    *zoom: 1;\n    *display: inline;\n    border: solid 1px #91765d;\n    background: #eee;\n    color: #333;\n    vertical-align: middle;\n}\n.sp-replacer:hover, .sp-replacer.sp-active {\n    border-color: #F0C49B;\n    color: #111;\n}\n.sp-replacer.sp-disabled {\n    cursor:default;\n    border-color: silver;\n    color: silver;\n}\n.sp-dd {\n    padding: 2px 0;\n    height: 16px;\n    line-height: 16px;\n    float:left;\n    font-size:10px;\n}\n.sp-preview {\n    position:relative;\n    width:25px;\n    height: 20px;\n    border: solid 1px #222;\n    margin-right: 5px;\n    float:left;\n    z-index: 0;\n}\n\n.sp-palette {\n    *width: 220px;\n    max-width: 220px;\n}\n.sp-palette .sp-thumb-el {\n    width:16px;\n    height: 16px;\n    margin:2px 1px;\n    border: solid 1px #d0d0d0;\n}\n\n.sp-container {\n    padding-bottom:0;\n}\n\n\n/* Buttons: http://hellohappy.org/css3-buttons/ */\n.sp-container button {\n  background-color: #eeeeee;\n  background-image: -webkit-linear-gradient(top, #eeeeee, #cccccc);\n  background-image: -moz-linear-gradient(top, #eeeeee, #cccccc);\n  background-image: -ms-linear-gradient(top, #eeeeee, #cccccc);\n  background-image: -o-linear-gradient(top, #eeeeee, #cccccc);\n  background-image: linear-gradient(to bottom, #eeeeee, #cccccc);\n  border: 1px solid #ccc;\n  border-bottom: 1px solid #bbb;\n  border-radius: 3px;\n  color: #333;\n  font-size: 14px;\n  line-height: 1;\n  padding: 5px 4px;\n  text-align: center;\n  text-shadow: 0 1px 0 #eee;\n  vertical-align: middle;\n}\n.sp-container button:hover {\n    background-color: #dddddd;\n    background-image: -webkit-linear-gradient(top, #dddddd, #bbbbbb);\n    background-image: -moz-linear-gradient(top, #dddddd, #bbbbbb);\n    background-image: -ms-linear-gradient(top, #dddddd, #bbbbbb);\n    background-image: -o-linear-gradient(top, #dddddd, #bbbbbb);\n    background-image: linear-gradient(to bottom, #dddddd, #bbbbbb);\n    border: 1px solid #bbb;\n    border-bottom: 1px solid #999;\n    cursor: pointer;\n    text-shadow: 0 1px 0 #ddd;\n}\n.sp-container button:active {\n    border: 1px solid #aaa;\n    border-bottom: 1px solid #888;\n    -webkit-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n    -moz-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n    -ms-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n    -o-box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n    box-shadow: inset 0 0 5px 2px #aaaaaa, 0 1px 0 0 #eeeeee;\n}\n.sp-cancel {\n    font-size: 11px;\n    color: #d93f3f !important;\n    margin:0;\n    padding:2px;\n    margin-right: 5px;\n    vertical-align: middle;\n    text-decoration:none;\n\n}\n.sp-cancel:hover {\n    color: #d93f3f !important;\n    text-decoration: underline;\n}\n\n\n.sp-palette span:hover, .sp-palette span.sp-thumb-active {\n    border-color: #000;\n}\n\n.sp-preview, .sp-alpha, .sp-thumb-el {\n    position:relative;\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);\n}\n.sp-preview-inner, .sp-alpha-inner, .sp-thumb-inner {\n    display:block;\n    position:absolute;\n    top:0;left:0;bottom:0;right:0;\n}\n\n.sp-palette .sp-thumb-inner {\n    background-position: 50% 50%;\n    background-repeat: no-repeat;\n}\n\n.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner {\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=);\n}\n\n.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner {\n    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=);\n}\n\n.sp-clear-display {\n    background-repeat:no-repeat;\n    background-position: center;\n    background-image: url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==);\n}\n"
  },
  {
    "path": "libs/spectrum/spectrum.js",
    "content": "// Spectrum Colorpicker v1.8.0\n// https://github.com/bgrins/spectrum\n// Author: Brian Grinstead\n// License: MIT\n\n(function (factory) {\n    \"use strict\";\n\n    if (typeof define === 'function' && define.amd) { // AMD\n        define(['jquery'], factory);\n    }\n    else if (typeof exports == \"object\" && typeof module == \"object\") { // CommonJS\n        module.exports = factory(require('jquery'));\n    }\n    else { // Browser\n        factory(jQuery);\n    }\n})(function($, undefined) {\n    \"use strict\";\n\n    var defaultOpts = {\n\n        // Callbacks\n        beforeShow: noop,\n        move: noop,\n        change: noop,\n        show: noop,\n        hide: noop,\n\n        // Options\n        color: false,\n        flat: false,\n        showInput: false,\n        allowEmpty: false,\n        showButtons: true,\n        clickoutFiresChange: true,\n        showInitial: false,\n        showPalette: false,\n        showPaletteOnly: false,\n        hideAfterPaletteSelect: false,\n        togglePaletteOnly: false,\n        showSelectionPalette: true,\n        localStorageKey: false,\n        appendTo: \"body\",\n        maxSelectionSize: 7,\n        cancelText: \"cancel\",\n        chooseText: \"choose\",\n        togglePaletteMoreText: \"more\",\n        togglePaletteLessText: \"less\",\n        clearText: \"Clear Color Selection\",\n        noColorSelectedText: \"No Color Selected\",\n        preferredFormat: false,\n        className: \"\", // Deprecated - use containerClassName and replacerClassName instead.\n        containerClassName: \"\",\n        replacerClassName: \"\",\n        showAlpha: false,\n        theme: \"sp-light\",\n        palette: [[\"#ffffff\", \"#000000\", \"#ff0000\", \"#ff8000\", \"#ffff00\", \"#008000\", \"#0000ff\", \"#4b0082\", \"#9400d3\"]],\n        selectionPalette: [],\n        disabled: false,\n        offset: null\n    },\n    spectrums = [],\n    IE = !!/msie/i.exec( window.navigator.userAgent ),\n    rgbaSupport = (function() {\n        function contains( str, substr ) {\n            return !!~('' + str).indexOf(substr);\n        }\n\n        var elem = document.createElement('div');\n        var style = elem.style;\n        style.cssText = 'background-color:rgba(0,0,0,.5)';\n        return contains(style.backgroundColor, 'rgba') || contains(style.backgroundColor, 'hsla');\n    })(),\n    replaceInput = [\n        \"<div class='sp-replacer'>\",\n            \"<div class='sp-preview'><div class='sp-preview-inner'></div></div>\",\n            \"<div class='sp-dd'>&#9660;</div>\",\n        \"</div>\"\n    ].join(''),\n    markup = (function () {\n\n        // IE does not support gradients with multiple stops, so we need to simulate\n        //  that for the rainbow slider with 8 divs that each have a single gradient\n        var gradientFix = \"\";\n        if (IE) {\n            for (var i = 1; i <= 6; i++) {\n                gradientFix += \"<div class='sp-\" + i + \"'></div>\";\n            }\n        }\n\n        return [\n            \"<div class='sp-container sp-hidden'>\",\n                \"<div class='sp-palette-container'>\",\n                    \"<div class='sp-palette sp-thumb sp-cf'></div>\",\n                    \"<div class='sp-palette-button-container sp-cf'>\",\n                        \"<button type='button' class='sp-palette-toggle'></button>\",\n                    \"</div>\",\n                \"</div>\",\n                \"<div class='sp-picker-container'>\",\n                    \"<div class='sp-top sp-cf'>\",\n                        \"<div class='sp-fill'></div>\",\n                        \"<div class='sp-top-inner'>\",\n                            \"<div class='sp-color'>\",\n                                \"<div class='sp-sat'>\",\n                                    \"<div class='sp-val'>\",\n                                        \"<div class='sp-dragger'></div>\",\n                                    \"</div>\",\n                                \"</div>\",\n                            \"</div>\",\n                            \"<div class='sp-clear sp-clear-display'>\",\n                            \"</div>\",\n                            \"<div class='sp-hue'>\",\n                                \"<div class='sp-slider'></div>\",\n                                gradientFix,\n                            \"</div>\",\n                        \"</div>\",\n                        \"<div class='sp-alpha'><div class='sp-alpha-inner'><div class='sp-alpha-handle'></div></div></div>\",\n                    \"</div>\",\n                    \"<div class='sp-input-container sp-cf'>\",\n                        \"<input class='sp-input' type='text' spellcheck='false'  />\",\n                    \"</div>\",\n                    \"<div class='sp-initial sp-thumb sp-cf'></div>\",\n                    \"<div class='sp-button-container sp-cf'>\",\n                        \"<a class='sp-cancel' href='#'></a>\",\n                        \"<button type='button' class='sp-choose'></button>\",\n                    \"</div>\",\n                \"</div>\",\n            \"</div>\"\n        ].join(\"\");\n    })();\n\n    function paletteTemplate (p, color, className, opts) {\n        var html = [];\n        for (var i = 0; i < p.length; i++) {\n            var current = p[i];\n            if(current) {\n                var tiny = tinycolor(current);\n                var c = tiny.toHsl().l < 0.5 ? \"sp-thumb-el sp-thumb-dark\" : \"sp-thumb-el sp-thumb-light\";\n                c += (tinycolor.equals(color, current)) ? \" sp-thumb-active\" : \"\";\n                var formattedString = tiny.toString(opts.preferredFormat || \"rgb\");\n                var swatchStyle = rgbaSupport ? (\"background-color:\" + tiny.toRgbString()) : \"filter:\" + tiny.toFilter();\n                html.push('<span title=\"' + formattedString + '\" data-color=\"' + tiny.toRgbString() + '\" class=\"' + c + '\"><span class=\"sp-thumb-inner\" style=\"' + swatchStyle + ';\" /></span>');\n            } else {\n                var cls = 'sp-clear-display';\n                html.push($('<div />')\n                    .append($('<span data-color=\"\" style=\"background-color:transparent;\" class=\"' + cls + '\"></span>')\n                        .attr('title', opts.noColorSelectedText)\n                    )\n                    .html()\n                );\n            }\n        }\n        return \"<div class='sp-cf \" + className + \"'>\" + html.join('') + \"</div>\";\n    }\n\n    function hideAll() {\n        for (var i = 0; i < spectrums.length; i++) {\n            if (spectrums[i]) {\n                spectrums[i].hide();\n            }\n        }\n    }\n\n    function instanceOptions(o, callbackContext) {\n        var opts = $.extend({}, defaultOpts, o);\n        opts.callbacks = {\n            'move': bind(opts.move, callbackContext),\n            'change': bind(opts.change, callbackContext),\n            'show': bind(opts.show, callbackContext),\n            'hide': bind(opts.hide, callbackContext),\n            'beforeShow': bind(opts.beforeShow, callbackContext)\n        };\n\n        return opts;\n    }\n\n    function spectrum(element, o) {\n\n        var opts = instanceOptions(o, element),\n            flat = opts.flat,\n            showSelectionPalette = opts.showSelectionPalette,\n            localStorageKey = opts.localStorageKey,\n            theme = opts.theme,\n            callbacks = opts.callbacks,\n            resize = throttle(reflow, 10),\n            visible = false,\n            isDragging = false,\n            dragWidth = 0,\n            dragHeight = 0,\n            dragHelperHeight = 0,\n            slideHeight = 0,\n            slideWidth = 0,\n            alphaWidth = 0,\n            alphaSlideHelperWidth = 0,\n            slideHelperHeight = 0,\n            currentHue = 0,\n            currentSaturation = 0,\n            currentValue = 0,\n            currentAlpha = 1,\n            palette = [],\n            paletteArray = [],\n            paletteLookup = {},\n            selectionPalette = opts.selectionPalette.slice(0),\n            maxSelectionSize = opts.maxSelectionSize,\n            draggingClass = \"sp-dragging\",\n            shiftMovementDirection = null;\n\n        var doc = element.ownerDocument,\n            body = doc.body,\n            boundElement = $(element),\n            disabled = false,\n            container = $(markup, doc).addClass(theme),\n            pickerContainer = container.find(\".sp-picker-container\"),\n            dragger = container.find(\".sp-color\"),\n            dragHelper = container.find(\".sp-dragger\"),\n            slider = container.find(\".sp-hue\"),\n            slideHelper = container.find(\".sp-slider\"),\n            alphaSliderInner = container.find(\".sp-alpha-inner\"),\n            alphaSlider = container.find(\".sp-alpha\"),\n            alphaSlideHelper = container.find(\".sp-alpha-handle\"),\n            textInput = container.find(\".sp-input\"),\n            paletteContainer = container.find(\".sp-palette\"),\n            initialColorContainer = container.find(\".sp-initial\"),\n            cancelButton = container.find(\".sp-cancel\"),\n            clearButton = container.find(\".sp-clear\"),\n            chooseButton = container.find(\".sp-choose\"),\n            toggleButton = container.find(\".sp-palette-toggle\"),\n            isInput = boundElement.is(\"input\"),\n            isInputTypeColor = isInput && boundElement.attr(\"type\") === \"color\" && inputTypeColorSupport(),\n            shouldReplace = isInput && !flat,\n            replacer = (shouldReplace) ? $(replaceInput).addClass(theme).addClass(opts.className).addClass(opts.replacerClassName) : $([]),\n            offsetElement = (shouldReplace) ? replacer : boundElement,\n            previewElement = replacer.find(\".sp-preview-inner\"),\n            initialColor = opts.color || (isInput && boundElement.val()),\n            colorOnShow = false,\n            currentPreferredFormat = opts.preferredFormat,\n            clickoutFiresChange = !opts.showButtons || opts.clickoutFiresChange,\n            isEmpty = !initialColor,\n            allowEmpty = opts.allowEmpty && !isInputTypeColor;\n\n        function applyOptions() {\n\n            if (opts.showPaletteOnly) {\n                opts.showPalette = true;\n            }\n\n            toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);\n\n            if (opts.palette) {\n                palette = opts.palette.slice(0);\n                paletteArray = $.isArray(palette[0]) ? palette : [palette];\n                paletteLookup = {};\n                for (var i = 0; i < paletteArray.length; i++) {\n                    for (var j = 0; j < paletteArray[i].length; j++) {\n                        var rgb = tinycolor(paletteArray[i][j]).toRgbString();\n                        paletteLookup[rgb] = true;\n                    }\n                }\n            }\n\n            container.toggleClass(\"sp-flat\", flat);\n            container.toggleClass(\"sp-input-disabled\", !opts.showInput);\n            container.toggleClass(\"sp-alpha-enabled\", opts.showAlpha);\n            container.toggleClass(\"sp-clear-enabled\", allowEmpty);\n            container.toggleClass(\"sp-buttons-disabled\", !opts.showButtons);\n            container.toggleClass(\"sp-palette-buttons-disabled\", !opts.togglePaletteOnly);\n            container.toggleClass(\"sp-palette-disabled\", !opts.showPalette);\n            container.toggleClass(\"sp-palette-only\", opts.showPaletteOnly);\n            container.toggleClass(\"sp-initial-disabled\", !opts.showInitial);\n            container.addClass(opts.className).addClass(opts.containerClassName);\n\n            reflow();\n        }\n\n        function initialize() {\n\n            if (IE) {\n                container.find(\"*:not(input)\").attr(\"unselectable\", \"on\");\n            }\n\n            applyOptions();\n\n            if (shouldReplace) {\n                boundElement.after(replacer).hide();\n            }\n\n            if (!allowEmpty) {\n                clearButton.hide();\n            }\n\n            if (flat) {\n                boundElement.after(container).hide();\n            }\n            else {\n\n                var appendTo = opts.appendTo === \"parent\" ? boundElement.parent() : $(opts.appendTo);\n                if (appendTo.length !== 1) {\n                    appendTo = $(\"body\");\n                }\n\n                appendTo.append(container);\n            }\n\n            updateSelectionPaletteFromStorage();\n\n            offsetElement.on(\"click.spectrum touchstart.spectrum\", function (e) {\n                if (!disabled) {\n                    toggle();\n                }\n\n                e.stopPropagation();\n\n                if (!$(e.target).is(\"input\")) {\n                    e.preventDefault();\n                }\n            });\n\n            if(boundElement.is(\":disabled\") || (opts.disabled === true)) {\n                disable();\n            }\n\n            // Prevent clicks from bubbling up to document.  This would cause it to be hidden.\n            container.click(stopPropagation);\n\n            // Handle user typed input\n            textInput.change(setFromTextInput);\n            textInput.on(\"paste\", function () {\n                setTimeout(setFromTextInput, 1);\n            });\n            textInput.keydown(function (e) { if (e.keyCode == 13) { setFromTextInput(); } });\n\n            cancelButton.text(opts.cancelText);\n            cancelButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                revert();\n                hide();\n            });\n\n            clearButton.attr(\"title\", opts.clearText);\n            clearButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                isEmpty = true;\n                move();\n\n                if(flat) {\n                    //for the flat style, this is a change event\n                    updateOriginalInput(true);\n                }\n            });\n\n            chooseButton.text(opts.chooseText);\n            chooseButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n\n                if (IE && textInput.is(\":focus\")) {\n                    textInput.trigger('change');\n                }\n\n                if (isValid()) {\n                    updateOriginalInput(true);\n                    hide();\n                }\n            });\n\n            toggleButton.text(opts.showPaletteOnly ? opts.togglePaletteMoreText : opts.togglePaletteLessText);\n            toggleButton.on(\"click.spectrum\", function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n\n                opts.showPaletteOnly = !opts.showPaletteOnly;\n\n                // To make sure the Picker area is drawn on the right, next to the\n                // Palette area (and not below the palette), first move the Palette\n                // to the left to make space for the picker, plus 5px extra.\n                // The 'applyOptions' function puts the whole container back into place\n                // and takes care of the button-text and the sp-palette-only CSS class.\n                if (!opts.showPaletteOnly && !flat) {\n                    container.css('left', '-=' + (pickerContainer.outerWidth(true) + 5));\n                }\n                applyOptions();\n            });\n\n            draggable(alphaSlider, function (dragX, dragY, e) {\n                currentAlpha = (dragX / alphaWidth);\n                isEmpty = false;\n                if (e.shiftKey) {\n                    currentAlpha = Math.round(currentAlpha * 10) / 10;\n                }\n\n                move();\n            }, dragStart, dragStop);\n\n            draggable(slider, function (dragX, dragY) {\n                currentHue = parseFloat(dragY / slideHeight);\n                isEmpty = false;\n                if (!opts.showAlpha) {\n                    currentAlpha = 1;\n                }\n                move();\n            }, dragStart, dragStop);\n\n            draggable(dragger, function (dragX, dragY, e) {\n\n                // shift+drag should snap the movement to either the x or y axis.\n                if (!e.shiftKey) {\n                    shiftMovementDirection = null;\n                }\n                else if (!shiftMovementDirection) {\n                    var oldDragX = currentSaturation * dragWidth;\n                    var oldDragY = dragHeight - (currentValue * dragHeight);\n                    var furtherFromX = Math.abs(dragX - oldDragX) > Math.abs(dragY - oldDragY);\n\n                    shiftMovementDirection = furtherFromX ? \"x\" : \"y\";\n                }\n\n                var setSaturation = !shiftMovementDirection || shiftMovementDirection === \"x\";\n                var setValue = !shiftMovementDirection || shiftMovementDirection === \"y\";\n\n                if (setSaturation) {\n                    currentSaturation = parseFloat(dragX / dragWidth);\n                }\n                if (setValue) {\n                    currentValue = parseFloat((dragHeight - dragY) / dragHeight);\n                }\n\n                isEmpty = false;\n                if (!opts.showAlpha) {\n                    currentAlpha = 1;\n                }\n\n                move();\n\n            }, dragStart, dragStop);\n\n            if (!!initialColor) {\n                set(initialColor);\n\n                // In case color was black - update the preview UI and set the format\n                // since the set function will not run (default color is black).\n                updateUI();\n                currentPreferredFormat = opts.preferredFormat || tinycolor(initialColor).format;\n\n                addColorToSelectionPalette(initialColor);\n            }\n            else {\n                updateUI();\n            }\n\n            if (flat) {\n                show();\n            }\n\n            function paletteElementClick(e) {\n                if (e.data && e.data.ignore) {\n                    set($(e.target).closest(\".sp-thumb-el\").data(\"color\"));\n                    move();\n                }\n                else {\n                    set($(e.target).closest(\".sp-thumb-el\").data(\"color\"));\n                    move();\n\n                    // If the picker is going to close immediately, a palette selection\n                    // is a change.  Otherwise, it's a move only.\n                    if (opts.hideAfterPaletteSelect) {\n                        updateOriginalInput(true);\n                        hide();\n                    } else {\n                        updateOriginalInput();\n                    }\n                }\n\n                return false;\n            }\n\n            var paletteEvent = IE ? \"mousedown.spectrum\" : \"click.spectrum touchstart.spectrum\";\n            paletteContainer.on(paletteEvent, \".sp-thumb-el\", paletteElementClick);\n            initialColorContainer.on(paletteEvent, \".sp-thumb-el:nth-child(1)\", { ignore: true }, paletteElementClick);\n        }\n\n        function updateSelectionPaletteFromStorage() {\n\n            if (localStorageKey && window.localStorage) {\n\n                // Migrate old palettes over to new format.  May want to remove this eventually.\n                try {\n                    var oldPalette = window.localStorage[localStorageKey].split(\",#\");\n                    if (oldPalette.length > 1) {\n                        delete window.localStorage[localStorageKey];\n                        $.each(oldPalette, function(i, c) {\n                             addColorToSelectionPalette(c);\n                        });\n                    }\n                }\n                catch(e) { }\n\n                try {\n                    selectionPalette = window.localStorage[localStorageKey].split(\";\");\n                }\n                catch (e) { }\n            }\n        }\n\n        function addColorToSelectionPalette(color) {\n            if (showSelectionPalette) {\n                var rgb = tinycolor(color).toRgbString();\n                if (!paletteLookup[rgb] && $.inArray(rgb, selectionPalette) === -1) {\n                    selectionPalette.push(rgb);\n                    while(selectionPalette.length > maxSelectionSize) {\n                        selectionPalette.shift();\n                    }\n                }\n\n                if (localStorageKey && window.localStorage) {\n                    try {\n                        window.localStorage[localStorageKey] = selectionPalette.join(\";\");\n                    }\n                    catch(e) { }\n                }\n            }\n        }\n\n        function getUniqueSelectionPalette() {\n            var unique = [];\n            if (opts.showPalette) {\n                for (var i = 0; i < selectionPalette.length; i++) {\n                    var rgb = tinycolor(selectionPalette[i]).toRgbString();\n\n                    if (!paletteLookup[rgb]) {\n                        unique.push(selectionPalette[i]);\n                    }\n                }\n            }\n\n            return unique.reverse().slice(0, opts.maxSelectionSize);\n        }\n\n        function drawPalette() {\n\n            var currentColor = get();\n\n            var html = $.map(paletteArray, function (palette, i) {\n                return paletteTemplate(palette, currentColor, \"sp-palette-row sp-palette-row-\" + i, opts);\n            });\n\n            updateSelectionPaletteFromStorage();\n\n            if (selectionPalette) {\n                html.push(paletteTemplate(getUniqueSelectionPalette(), currentColor, \"sp-palette-row sp-palette-row-selection\", opts));\n            }\n\n            paletteContainer.html(html.join(\"\"));\n        }\n\n        function drawInitial() {\n            if (opts.showInitial) {\n                var initial = colorOnShow;\n                var current = get();\n                initialColorContainer.html(paletteTemplate([initial, current], current, \"sp-palette-row-initial\", opts));\n            }\n        }\n\n        function dragStart() {\n            if (dragHeight <= 0 || dragWidth <= 0 || slideHeight <= 0) {\n                reflow();\n            }\n            isDragging = true;\n            container.addClass(draggingClass);\n            shiftMovementDirection = null;\n            boundElement.trigger('dragstart.spectrum', [ get() ]);\n        }\n\n        function dragStop() {\n            isDragging = false;\n            container.removeClass(draggingClass);\n            boundElement.trigger('dragstop.spectrum', [ get() ]);\n        }\n\n        function setFromTextInput() {\n\n            var value = textInput.val();\n\n            if ((value === null || value === \"\") && allowEmpty) {\n                set(null);\n                move();\n                updateOriginalInput();\n            }\n            else {\n                var tiny = tinycolor(value);\n                if (tiny.isValid()) {\n                    set(tiny);\n                    move();\n                    updateOriginalInput();\n                }\n                else {\n                    textInput.addClass(\"sp-validation-error\");\n                }\n            }\n        }\n\n        function toggle() {\n            if (visible) {\n                hide();\n            }\n            else {\n                show();\n            }\n        }\n\n        function show() {\n            var event = $.Event('beforeShow.spectrum');\n\n            if (visible) {\n                reflow();\n                return;\n            }\n\n            boundElement.trigger(event, [ get() ]);\n\n            if (callbacks.beforeShow(get()) === false || event.isDefaultPrevented()) {\n                return;\n            }\n\n            hideAll();\n            visible = true;\n\n            $(doc).on(\"keydown.spectrum\", onkeydown);\n            $(doc).on(\"click.spectrum\", clickout);\n            $(window).on(\"resize.spectrum\", resize);\n            replacer.addClass(\"sp-active\");\n            container.removeClass(\"sp-hidden\");\n\n            reflow();\n            updateUI();\n\n            colorOnShow = get();\n\n            drawInitial();\n            callbacks.show(colorOnShow);\n            boundElement.trigger('show.spectrum', [ colorOnShow ]);\n        }\n\n        function onkeydown(e) {\n            // Close on ESC\n            if (e.keyCode === 27) {\n                hide();\n            }\n        }\n\n        function clickout(e) {\n            // Return on right click.\n            if (e.button == 2) { return; }\n\n            // If a drag event was happening during the mouseup, don't hide\n            // on click.\n            if (isDragging) { return; }\n\n            if (clickoutFiresChange) {\n                updateOriginalInput(true);\n            }\n            else {\n                revert();\n            }\n            hide();\n        }\n\n        function hide() {\n            // Return if hiding is unnecessary\n            if (!visible || flat) { return; }\n            visible = false;\n\n            $(doc).off(\"keydown.spectrum\", onkeydown);\n            $(doc).off(\"click.spectrum\", clickout);\n            $(window).off(\"resize.spectrum\", resize);\n\n            replacer.removeClass(\"sp-active\");\n            container.addClass(\"sp-hidden\");\n\n            callbacks.hide(get());\n            boundElement.trigger('hide.spectrum', [ get() ]);\n        }\n\n        function revert() {\n            set(colorOnShow, true);\n            updateOriginalInput(true);\n        }\n\n        function set(color, ignoreFormatChange) {\n            if (tinycolor.equals(color, get())) {\n                // Update UI just in case a validation error needs\n                // to be cleared.\n                updateUI();\n                return;\n            }\n\n            var newColor, newHsv;\n            if (!color && allowEmpty) {\n                isEmpty = true;\n            } else {\n                isEmpty = false;\n                newColor = tinycolor(color);\n                newHsv = newColor.toHsv();\n\n                currentHue = (newHsv.h % 360) / 360;\n                currentSaturation = newHsv.s;\n                currentValue = newHsv.v;\n                currentAlpha = newHsv.a;\n            }\n            updateUI();\n\n            if (newColor && newColor.isValid() && !ignoreFormatChange) {\n                currentPreferredFormat = opts.preferredFormat || newColor.getFormat();\n            }\n        }\n\n        function get(opts) {\n            opts = opts || { };\n\n            if (allowEmpty && isEmpty) {\n                return null;\n            }\n\n            return tinycolor.fromRatio({\n                h: currentHue,\n                s: currentSaturation,\n                v: currentValue,\n                a: Math.round(currentAlpha * 1000) / 1000\n            }, { format: opts.format || currentPreferredFormat });\n        }\n\n        function isValid() {\n            return !textInput.hasClass(\"sp-validation-error\");\n        }\n\n        function move() {\n            updateUI();\n\n            callbacks.move(get());\n            boundElement.trigger('move.spectrum', [ get() ]);\n        }\n\n        function updateUI() {\n\n            textInput.removeClass(\"sp-validation-error\");\n\n            updateHelperLocations();\n\n            // Update dragger background color (gradients take care of saturation and value).\n            var flatColor = tinycolor.fromRatio({ h: currentHue, s: 1, v: 1 });\n            dragger.css(\"background-color\", flatColor.toHexString());\n\n            // Get a format that alpha will be included in (hex and names ignore alpha)\n            var format = currentPreferredFormat;\n            if (currentAlpha < 1 && !(currentAlpha === 0 && format === \"name\")) {\n                if (format === \"hex\" || format === \"hex3\" || format === \"hex6\" || format === \"name\") {\n                    format = \"rgb\";\n                }\n            }\n\n            var realColor = get({ format: format }),\n                displayColor = '';\n\n             //reset background info for preview element\n            previewElement.removeClass(\"sp-clear-display\");\n            previewElement.css('background-color', 'transparent');\n\n            if (!realColor && allowEmpty) {\n                // Update the replaced elements background with icon indicating no color selection\n                previewElement.addClass(\"sp-clear-display\");\n            }\n            else {\n                var realHex = realColor.toHexString(),\n                    realRgb = realColor.toRgbString();\n\n                // Update the replaced elements background color (with actual selected color)\n                if (rgbaSupport || realColor.alpha === 1) {\n                    previewElement.css(\"background-color\", realRgb);\n                }\n                else {\n                    previewElement.css(\"background-color\", \"transparent\");\n                    previewElement.css(\"filter\", realColor.toFilter());\n                }\n\n                if (opts.showAlpha) {\n                    var rgb = realColor.toRgb();\n                    rgb.a = 0;\n                    var realAlpha = tinycolor(rgb).toRgbString();\n                    var gradient = \"linear-gradient(left, \" + realAlpha + \", \" + realHex + \")\";\n\n                    if (IE) {\n                        alphaSliderInner.css(\"filter\", tinycolor(realAlpha).toFilter({ gradientType: 1 }, realHex));\n                    }\n                    else {\n                        alphaSliderInner.css(\"background\", \"-webkit-\" + gradient);\n                        alphaSliderInner.css(\"background\", \"-moz-\" + gradient);\n                        alphaSliderInner.css(\"background\", \"-ms-\" + gradient);\n                        // Use current syntax gradient on unprefixed property.\n                        alphaSliderInner.css(\"background\",\n                            \"linear-gradient(to right, \" + realAlpha + \", \" + realHex + \")\");\n                    }\n                }\n\n                displayColor = realColor.toString(format);\n            }\n\n            // Update the text entry input as it changes happen\n            if (opts.showInput) {\n                textInput.val(displayColor);\n            }\n\n            if (opts.showPalette) {\n                drawPalette();\n            }\n\n            drawInitial();\n        }\n\n        function updateHelperLocations() {\n            var s = currentSaturation;\n            var v = currentValue;\n\n            if(allowEmpty && isEmpty) {\n                //if selected color is empty, hide the helpers\n                alphaSlideHelper.hide();\n                slideHelper.hide();\n                dragHelper.hide();\n            }\n            else {\n                //make sure helpers are visible\n                alphaSlideHelper.show();\n                slideHelper.show();\n                dragHelper.show();\n\n                // Where to show the little circle in that displays your current selected color\n                var dragX = s * dragWidth;\n                var dragY = dragHeight - (v * dragHeight);\n                dragX = Math.max(\n                    -dragHelperHeight,\n                    Math.min(dragWidth - dragHelperHeight, dragX - dragHelperHeight)\n                );\n                dragY = Math.max(\n                    -dragHelperHeight,\n                    Math.min(dragHeight - dragHelperHeight, dragY - dragHelperHeight)\n                );\n                dragHelper.css({\n                    \"top\": dragY + \"px\",\n                    \"left\": dragX + \"px\"\n                });\n\n                var alphaX = currentAlpha * alphaWidth;\n                alphaSlideHelper.css({\n                    \"left\": (alphaX - (alphaSlideHelperWidth / 2)) + \"px\"\n                });\n\n                // Where to show the bar that displays your current selected hue\n                var slideY = (currentHue) * slideHeight;\n                slideHelper.css({\n                    \"top\": (slideY - slideHelperHeight) + \"px\"\n                });\n            }\n        }\n\n        function updateOriginalInput(fireCallback) {\n            var color = get(),\n                displayColor = '',\n                hasChanged = !tinycolor.equals(color, colorOnShow);\n\n            if (color) {\n                displayColor = color.toString(currentPreferredFormat);\n                // Update the selection palette with the current color\n                addColorToSelectionPalette(color);\n            }\n\n            if (isInput) {\n                boundElement.val(displayColor);\n            }\n\n            if (fireCallback && hasChanged) {\n                callbacks.change(color);\n                boundElement.trigger('change', [ color ]);\n            }\n        }\n\n        function reflow() {\n            if (!visible) {\n                return; // Calculations would be useless and wouldn't be reliable anyways\n            }\n            dragWidth = dragger.width();\n            dragHeight = dragger.height();\n            dragHelperHeight = dragHelper.height();\n            slideWidth = slider.width();\n            slideHeight = slider.height();\n            slideHelperHeight = slideHelper.height();\n            alphaWidth = alphaSlider.width();\n            alphaSlideHelperWidth = alphaSlideHelper.width();\n\n            if (!flat) {\n                container.css(\"position\", \"absolute\");\n                if (opts.offset) {\n                    container.offset(opts.offset);\n                } else {\n                    container.offset(getOffset(container, offsetElement));\n                }\n            }\n\n            updateHelperLocations();\n\n            if (opts.showPalette) {\n                drawPalette();\n            }\n\n            boundElement.trigger('reflow.spectrum');\n        }\n\n        function destroy() {\n            boundElement.show();\n            offsetElement.off(\"click.spectrum touchstart.spectrum\");\n            container.remove();\n            replacer.remove();\n            spectrums[spect.id] = null;\n        }\n\n        function option(optionName, optionValue) {\n            if (optionName === undefined) {\n                return $.extend({}, opts);\n            }\n            if (optionValue === undefined) {\n                return opts[optionName];\n            }\n\n            opts[optionName] = optionValue;\n\n            if (optionName === \"preferredFormat\") {\n                currentPreferredFormat = opts.preferredFormat;\n            }\n            applyOptions();\n        }\n\n        function enable() {\n            disabled = false;\n            boundElement.attr(\"disabled\", false);\n            offsetElement.removeClass(\"sp-disabled\");\n        }\n\n        function disable() {\n            hide();\n            disabled = true;\n            boundElement.attr(\"disabled\", true);\n            offsetElement.addClass(\"sp-disabled\");\n        }\n\n        function setOffset(coord) {\n            opts.offset = coord;\n            reflow();\n        }\n\n        initialize();\n\n        var spect = {\n            show: show,\n            hide: hide,\n            toggle: toggle,\n            reflow: reflow,\n            option: option,\n            enable: enable,\n            disable: disable,\n            offset: setOffset,\n            set: function (c) {\n                set(c);\n                updateOriginalInput();\n            },\n            get: get,\n            destroy: destroy,\n            container: container\n        };\n\n        spect.id = spectrums.push(spect) - 1;\n\n        return spect;\n    }\n\n    /**\n    * checkOffset - get the offset below/above and left/right element depending on screen position\n    * Thanks https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.datepicker.js\n    */\n    function getOffset(picker, input) {\n        var extraY = 0;\n        var dpWidth = picker.outerWidth();\n        var dpHeight = picker.outerHeight();\n        var inputHeight = input.outerHeight();\n        var doc = picker[0].ownerDocument;\n        var docElem = doc.documentElement;\n        var viewWidth = docElem.clientWidth + $(doc).scrollLeft();\n        var viewHeight = docElem.clientHeight + $(doc).scrollTop();\n        var offset = input.offset();\n        var offsetLeft = offset.left;\n        var offsetTop = offset.top;\n\n        offsetTop += inputHeight;\n\n        offsetLeft -=\n            Math.min(offsetLeft, (offsetLeft + dpWidth > viewWidth && viewWidth > dpWidth) ?\n            Math.abs(offsetLeft + dpWidth - viewWidth) : 0);\n\n        offsetTop -=\n            Math.min(offsetTop, ((offsetTop + dpHeight > viewHeight && viewHeight > dpHeight) ?\n            Math.abs(dpHeight + inputHeight - extraY) : extraY));\n\n        return {\n            top: offsetTop,\n            bottom: offset.bottom,\n            left: offsetLeft,\n            right: offset.right,\n            width: offset.width,\n            height: offset.height\n        };\n    }\n\n    /**\n    * noop - do nothing\n    */\n    function noop() {\n\n    }\n\n    /**\n    * stopPropagation - makes the code only doing this a little easier to read in line\n    */\n    function stopPropagation(e) {\n        e.stopPropagation();\n    }\n\n    /**\n    * Create a function bound to a given object\n    * Thanks to underscore.js\n    */\n    function bind(func, obj) {\n        var slice = Array.prototype.slice;\n        var args = slice.call(arguments, 2);\n        return function () {\n            return func.apply(obj, args.concat(slice.call(arguments)));\n        };\n    }\n\n    /**\n    * Lightweight drag helper.  Handles containment within the element, so that\n    * when dragging, the x is within [0,element.width] and y is within [0,element.height]\n    */\n    function draggable(element, onmove, onstart, onstop) {\n        onmove = onmove || function () { };\n        onstart = onstart || function () { };\n        onstop = onstop || function () { };\n        var doc = document;\n        var dragging = false;\n        var offset = {};\n        var maxHeight = 0;\n        var maxWidth = 0;\n        var hasTouch = ('ontouchstart' in window);\n\n        var duringDragEvents = {};\n        duringDragEvents[\"selectstart\"] = prevent;\n        duringDragEvents[\"dragstart\"] = prevent;\n        duringDragEvents[\"touchmove mousemove\"] = move;\n        duringDragEvents[\"touchend mouseup\"] = stop;\n\n        function prevent(e) {\n            if (e.stopPropagation) {\n                e.stopPropagation();\n            }\n            if (e.preventDefault) {\n                e.preventDefault();\n            }\n            e.returnValue = false;\n        }\n\n        function move(e) {\n            if (dragging) {\n                // Mouseup happened outside of window\n                if (IE && doc.documentMode < 9 && !e.button) {\n                    return stop();\n                }\n\n                var t0 = e.originalEvent && e.originalEvent.touches && e.originalEvent.touches[0];\n                var pageX = t0 && t0.pageX || e.pageX;\n                var pageY = t0 && t0.pageY || e.pageY;\n\n                var dragX = Math.max(0, Math.min(pageX - offset.left, maxWidth));\n                var dragY = Math.max(0, Math.min(pageY - offset.top, maxHeight));\n\n                if (hasTouch) {\n                    // Stop scrolling in iOS\n                    prevent(e);\n                }\n\n                onmove.apply(element, [dragX, dragY, e]);\n            }\n        }\n\n        function start(e) {\n            var rightclick = (e.which) ? (e.which == 3) : (e.button == 2);\n\n            if (!rightclick && !dragging) {\n                if (onstart.apply(element, arguments) !== false) {\n                    dragging = true;\n                    maxHeight = $(element).height();\n                    maxWidth = $(element).width();\n                    offset = $(element).offset();\n\n                    $(doc).on(duringDragEvents);\n                    $(doc.body).addClass(\"sp-dragging\");\n\n                    move(e);\n\n                    prevent(e);\n                }\n            }\n        }\n\n        function stop() {\n            if (dragging) {\n                $(doc).off(duringDragEvents);\n                $(doc.body).removeClass(\"sp-dragging\");\n\n                // Wait a tick before notifying observers to allow the click event\n                // to fire in Chrome.\n                setTimeout(function() {\n                    onstop.apply(element, arguments);\n                }, 0);\n            }\n            dragging = false;\n        }\n\n        $(element).on(\"touchstart mousedown\", start);\n    }\n\n    function throttle(func, wait, debounce) {\n        var timeout;\n        return function () {\n            var context = this, args = arguments;\n            var throttler = function () {\n                timeout = null;\n                func.apply(context, args);\n            };\n            if (debounce) clearTimeout(timeout);\n            if (debounce || !timeout) timeout = setTimeout(throttler, wait);\n        };\n    }\n\n    function inputTypeColorSupport() {\n        return $.fn.spectrum.inputTypeColorSupport();\n    }\n\n    /**\n    * Define a jQuery plugin\n    */\n    var dataID = \"spectrum.id\";\n    $.fn.spectrum = function (opts, extra) {\n\n        if (typeof opts == \"string\") {\n\n            var returnValue = this;\n            var args = Array.prototype.slice.call( arguments, 1 );\n\n            this.each(function () {\n                var spect = spectrums[$(this).data(dataID)];\n                if (spect) {\n                    var method = spect[opts];\n                    if (!method) {\n                        throw new Error( \"Spectrum: no such method: '\" + opts + \"'\" );\n                    }\n\n                    if (opts == \"get\") {\n                        returnValue = spect.get();\n                    }\n                    else if (opts == \"container\") {\n                        returnValue = spect.container;\n                    }\n                    else if (opts == \"option\") {\n                        returnValue = spect.option.apply(spect, args);\n                    }\n                    else if (opts == \"destroy\") {\n                        spect.destroy();\n                        $(this).removeData(dataID);\n                    }\n                    else {\n                        method.apply(spect, args);\n                    }\n                }\n            });\n\n            return returnValue;\n        }\n\n        // Initializing a new instance of spectrum\n        return this.spectrum(\"destroy\").each(function () {\n            var options = $.extend({}, $(this).data(), opts);\n            var spect = spectrum(this, options);\n            $(this).data(dataID, spect.id);\n        });\n    };\n\n    $.fn.spectrum.load = true;\n    $.fn.spectrum.loadOpts = {};\n    $.fn.spectrum.draggable = draggable;\n    $.fn.spectrum.defaults = defaultOpts;\n    $.fn.spectrum.inputTypeColorSupport = function inputTypeColorSupport() {\n        if (typeof inputTypeColorSupport._cachedResult === \"undefined\") {\n            var colorInput = $(\"<input type='color'/>\")[0]; // if color element is supported, value will default to not null\n            inputTypeColorSupport._cachedResult = colorInput.type === \"color\" && colorInput.value !== \"\";\n        }\n        return inputTypeColorSupport._cachedResult;\n    };\n\n    $.spectrum = { };\n    $.spectrum.localization = { };\n    $.spectrum.palettes = { };\n\n    $.fn.spectrum.processNativeColorInputs = function () {\n        var colorInputs = $(\"input[type=color]\");\n        if (colorInputs.length && !inputTypeColorSupport()) {\n            colorInputs.spectrum({\n                preferredFormat: \"hex6\"\n            });\n        }\n    };\n\n    // TinyColor v1.1.2\n    // https://github.com/bgrins/TinyColor\n    // Brian Grinstead, MIT License\n\n    (function() {\n\n    var trimLeft = /^[\\s,#]+/,\n        trimRight = /\\s+$/,\n        tinyCounter = 0,\n        math = Math,\n        mathRound = math.round,\n        mathMin = math.min,\n        mathMax = math.max,\n        mathRandom = math.random;\n\n    var tinycolor = function(color, opts) {\n\n        color = (color) ? color : '';\n        opts = opts || { };\n\n        // If input is already a tinycolor, return itself\n        if (color instanceof tinycolor) {\n           return color;\n        }\n        // If we are called as a function, call using new instead\n        if (!(this instanceof tinycolor)) {\n            return new tinycolor(color, opts);\n        }\n\n        var rgb = inputToRGB(color);\n        this._originalInput = color,\n        this._r = rgb.r,\n        this._g = rgb.g,\n        this._b = rgb.b,\n        this._a = rgb.a,\n        this._roundA = mathRound(1000 * this._a) / 1000,\n        this._format = opts.format || rgb.format;\n        this._gradientType = opts.gradientType;\n\n        // Don't let the range of [0,255] come back in [0,1].\n        // Potentially lose a little bit of precision here, but will fix issues where\n        // .5 gets interpreted as half of the total, instead of half of 1\n        // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n        if (this._r < 1) { this._r = mathRound(this._r); }\n        if (this._g < 1) { this._g = mathRound(this._g); }\n        if (this._b < 1) { this._b = mathRound(this._b); }\n\n        this._ok = rgb.ok;\n        this._tc_id = tinyCounter++;\n    };\n\n    tinycolor.prototype = {\n        isDark: function() {\n            return this.getBrightness() < 128;\n        },\n        isLight: function() {\n            return !this.isDark();\n        },\n        isValid: function() {\n            return this._ok;\n        },\n        getOriginalInput: function() {\n          return this._originalInput;\n        },\n        getFormat: function() {\n            return this._format;\n        },\n        getAlpha: function() {\n            return this._a;\n        },\n        getBrightness: function() {\n            var rgb = this.toRgb();\n            return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n        },\n        setAlpha: function(value) {\n            this._a = boundAlpha(value);\n            this._roundA = mathRound(1000 * this._a) / 1000;\n            return this;\n        },\n        toHsv: function() {\n            var hsv = rgbToHsv(this._r, this._g, this._b);\n            return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n        },\n        toHsvString: function() {\n            var hsv = rgbToHsv(this._r, this._g, this._b);\n            var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n            return (this._a == 1) ?\n              \"hsv(\"  + h + \", \" + s + \"%, \" + v + \"%)\" :\n              \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n        },\n        toHsl: function() {\n            var hsl = rgbToHsl(this._r, this._g, this._b);\n            return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n        },\n        toHslString: function() {\n            var hsl = rgbToHsl(this._r, this._g, this._b);\n            var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n            return (this._a == 1) ?\n              \"hsl(\"  + h + \", \" + s + \"%, \" + l + \"%)\" :\n              \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n        },\n        toHex: function(allow3Char) {\n            return rgbToHex(this._r, this._g, this._b, allow3Char);\n        },\n        toHexString: function(allow3Char) {\n            return '#' + this.toHex(allow3Char);\n        },\n        toHex8: function() {\n            return rgbaToHex(this._r, this._g, this._b, this._a);\n        },\n        toHex8String: function() {\n            return '#' + this.toHex8();\n        },\n        toRgb: function() {\n            return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n        },\n        toRgbString: function() {\n            return (this._a == 1) ?\n              \"rgb(\"  + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n              \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n        },\n        toPercentageRgb: function() {\n            return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n        },\n        toPercentageRgbString: function() {\n            return (this._a == 1) ?\n              \"rgb(\"  + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n              \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n        },\n        toName: function() {\n            if (this._a === 0) {\n                return \"transparent\";\n            }\n\n            if (this._a < 1) {\n                return false;\n            }\n\n            return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n        },\n        toFilter: function(secondColor) {\n            var hex8String = '#' + rgbaToHex(this._r, this._g, this._b, this._a);\n            var secondHex8String = hex8String;\n            var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n            if (secondColor) {\n                var s = tinycolor(secondColor);\n                secondHex8String = s.toHex8String();\n            }\n\n            return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n        },\n        toString: function(format) {\n            var formatSet = !!format;\n            format = format || this._format;\n\n            var formattedString = false;\n            var hasAlpha = this._a < 1 && this._a >= 0;\n            var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"name\");\n\n            if (needsAlphaFormat) {\n                // Special case for \"transparent\", all other non-alpha formats\n                // will return rgba when there is transparency.\n                if (format === \"name\" && this._a === 0) {\n                    return this.toName();\n                }\n                return this.toRgbString();\n            }\n            if (format === \"rgb\") {\n                formattedString = this.toRgbString();\n            }\n            if (format === \"prgb\") {\n                formattedString = this.toPercentageRgbString();\n            }\n            if (format === \"hex\" || format === \"hex6\") {\n                formattedString = this.toHexString();\n            }\n            if (format === \"hex3\") {\n                formattedString = this.toHexString(true);\n            }\n            if (format === \"hex8\") {\n                formattedString = this.toHex8String();\n            }\n            if (format === \"name\") {\n                formattedString = this.toName();\n            }\n            if (format === \"hsl\") {\n                formattedString = this.toHslString();\n            }\n            if (format === \"hsv\") {\n                formattedString = this.toHsvString();\n            }\n\n            return formattedString || this.toHexString();\n        },\n\n        _applyModification: function(fn, args) {\n            var color = fn.apply(null, [this].concat([].slice.call(args)));\n            this._r = color._r;\n            this._g = color._g;\n            this._b = color._b;\n            this.setAlpha(color._a);\n            return this;\n        },\n        lighten: function() {\n            return this._applyModification(lighten, arguments);\n        },\n        brighten: function() {\n            return this._applyModification(brighten, arguments);\n        },\n        darken: function() {\n            return this._applyModification(darken, arguments);\n        },\n        desaturate: function() {\n            return this._applyModification(desaturate, arguments);\n        },\n        saturate: function() {\n            return this._applyModification(saturate, arguments);\n        },\n        greyscale: function() {\n            return this._applyModification(greyscale, arguments);\n        },\n        spin: function() {\n            return this._applyModification(spin, arguments);\n        },\n\n        _applyCombination: function(fn, args) {\n            return fn.apply(null, [this].concat([].slice.call(args)));\n        },\n        analogous: function() {\n            return this._applyCombination(analogous, arguments);\n        },\n        complement: function() {\n            return this._applyCombination(complement, arguments);\n        },\n        monochromatic: function() {\n            return this._applyCombination(monochromatic, arguments);\n        },\n        splitcomplement: function() {\n            return this._applyCombination(splitcomplement, arguments);\n        },\n        triad: function() {\n            return this._applyCombination(triad, arguments);\n        },\n        tetrad: function() {\n            return this._applyCombination(tetrad, arguments);\n        }\n    };\n\n    // If input is an object, force 1 into \"1.0\" to handle ratios properly\n    // String input requires \"1.0\" as input, so 1 will be treated as 1\n    tinycolor.fromRatio = function(color, opts) {\n        if (typeof color == \"object\") {\n            var newColor = {};\n            for (var i in color) {\n                if (color.hasOwnProperty(i)) {\n                    if (i === \"a\") {\n                        newColor[i] = color[i];\n                    }\n                    else {\n                        newColor[i] = convertToPercentage(color[i]);\n                    }\n                }\n            }\n            color = newColor;\n        }\n\n        return tinycolor(color, opts);\n    };\n\n    // Given a string or object, convert that input to RGB\n    // Possible string inputs:\n    //\n    //     \"red\"\n    //     \"#f00\" or \"f00\"\n    //     \"#ff0000\" or \"ff0000\"\n    //     \"#ff000000\" or \"ff000000\"\n    //     \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n    //     \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n    //     \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n    //     \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n    //     \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n    //     \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n    //     \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n    //\n    function inputToRGB(color) {\n\n        var rgb = { r: 0, g: 0, b: 0 };\n        var a = 1;\n        var ok = false;\n        var format = false;\n\n        if (typeof color == \"string\") {\n            color = stringInputToObject(color);\n        }\n\n        if (typeof color == \"object\") {\n            if (color.hasOwnProperty(\"r\") && color.hasOwnProperty(\"g\") && color.hasOwnProperty(\"b\")) {\n                rgb = rgbToRgb(color.r, color.g, color.b);\n                ok = true;\n                format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n            }\n            else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"v\")) {\n                color.s = convertToPercentage(color.s);\n                color.v = convertToPercentage(color.v);\n                rgb = hsvToRgb(color.h, color.s, color.v);\n                ok = true;\n                format = \"hsv\";\n            }\n            else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"l\")) {\n                color.s = convertToPercentage(color.s);\n                color.l = convertToPercentage(color.l);\n                rgb = hslToRgb(color.h, color.s, color.l);\n                ok = true;\n                format = \"hsl\";\n            }\n\n            if (color.hasOwnProperty(\"a\")) {\n                a = color.a;\n            }\n        }\n\n        a = boundAlpha(a);\n\n        return {\n            ok: ok,\n            format: color.format || format,\n            r: mathMin(255, mathMax(rgb.r, 0)),\n            g: mathMin(255, mathMax(rgb.g, 0)),\n            b: mathMin(255, mathMax(rgb.b, 0)),\n            a: a\n        };\n    }\n\n\n    // Conversion Functions\n    // --------------------\n\n    // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n    // <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n    // `rgbToRgb`\n    // Handle bounds / percentage checking to conform to CSS color spec\n    // <http://www.w3.org/TR/css3-color/>\n    // *Assumes:* r, g, b in [0, 255] or [0, 1]\n    // *Returns:* { r, g, b } in [0, 255]\n    function rgbToRgb(r, g, b){\n        return {\n            r: bound01(r, 255) * 255,\n            g: bound01(g, 255) * 255,\n            b: bound01(b, 255) * 255\n        };\n    }\n\n    // `rgbToHsl`\n    // Converts an RGB color value to HSL.\n    // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n    // *Returns:* { h, s, l } in [0,1]\n    function rgbToHsl(r, g, b) {\n\n        r = bound01(r, 255);\n        g = bound01(g, 255);\n        b = bound01(b, 255);\n\n        var max = mathMax(r, g, b), min = mathMin(r, g, b);\n        var h, s, l = (max + min) / 2;\n\n        if(max == min) {\n            h = s = 0; // achromatic\n        }\n        else {\n            var d = max - min;\n            s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n            switch(max) {\n                case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n                case g: h = (b - r) / d + 2; break;\n                case b: h = (r - g) / d + 4; break;\n            }\n\n            h /= 6;\n        }\n\n        return { h: h, s: s, l: l };\n    }\n\n    // `hslToRgb`\n    // Converts an HSL color value to RGB.\n    // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n    // *Returns:* { r, g, b } in the set [0, 255]\n    function hslToRgb(h, s, l) {\n        var r, g, b;\n\n        h = bound01(h, 360);\n        s = bound01(s, 100);\n        l = bound01(l, 100);\n\n        function hue2rgb(p, q, t) {\n            if(t < 0) t += 1;\n            if(t > 1) t -= 1;\n            if(t < 1/6) return p + (q - p) * 6 * t;\n            if(t < 1/2) return q;\n            if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n            return p;\n        }\n\n        if(s === 0) {\n            r = g = b = l; // achromatic\n        }\n        else {\n            var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n            var p = 2 * l - q;\n            r = hue2rgb(p, q, h + 1/3);\n            g = hue2rgb(p, q, h);\n            b = hue2rgb(p, q, h - 1/3);\n        }\n\n        return { r: r * 255, g: g * 255, b: b * 255 };\n    }\n\n    // `rgbToHsv`\n    // Converts an RGB color value to HSV\n    // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n    // *Returns:* { h, s, v } in [0,1]\n    function rgbToHsv(r, g, b) {\n\n        r = bound01(r, 255);\n        g = bound01(g, 255);\n        b = bound01(b, 255);\n\n        var max = mathMax(r, g, b), min = mathMin(r, g, b);\n        var h, s, v = max;\n\n        var d = max - min;\n        s = max === 0 ? 0 : d / max;\n\n        if(max == min) {\n            h = 0; // achromatic\n        }\n        else {\n            switch(max) {\n                case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n                case g: h = (b - r) / d + 2; break;\n                case b: h = (r - g) / d + 4; break;\n            }\n            h /= 6;\n        }\n        return { h: h, s: s, v: v };\n    }\n\n    // `hsvToRgb`\n    // Converts an HSV color value to RGB.\n    // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n    // *Returns:* { r, g, b } in the set [0, 255]\n     function hsvToRgb(h, s, v) {\n\n        h = bound01(h, 360) * 6;\n        s = bound01(s, 100);\n        v = bound01(v, 100);\n\n        var i = math.floor(h),\n            f = h - i,\n            p = v * (1 - s),\n            q = v * (1 - f * s),\n            t = v * (1 - (1 - f) * s),\n            mod = i % 6,\n            r = [v, q, p, p, t, v][mod],\n            g = [t, v, v, q, p, p][mod],\n            b = [p, p, t, v, v, q][mod];\n\n        return { r: r * 255, g: g * 255, b: b * 255 };\n    }\n\n    // `rgbToHex`\n    // Converts an RGB color to hex\n    // Assumes r, g, and b are contained in the set [0, 255]\n    // Returns a 3 or 6 character hex\n    function rgbToHex(r, g, b, allow3Char) {\n\n        var hex = [\n            pad2(mathRound(r).toString(16)),\n            pad2(mathRound(g).toString(16)),\n            pad2(mathRound(b).toString(16))\n        ];\n\n        // Return a 3 character hex if possible\n        if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n            return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n        }\n\n        return hex.join(\"\");\n    }\n        // `rgbaToHex`\n        // Converts an RGBA color plus alpha transparency to hex\n        // Assumes r, g, b and a are contained in the set [0, 255]\n        // Returns an 8 character hex\n        function rgbaToHex(r, g, b, a) {\n\n            var hex = [\n                pad2(convertDecimalToHex(a)),\n                pad2(mathRound(r).toString(16)),\n                pad2(mathRound(g).toString(16)),\n                pad2(mathRound(b).toString(16))\n            ];\n\n            return hex.join(\"\");\n        }\n\n    // `equals`\n    // Can be called with any tinycolor input\n    tinycolor.equals = function (color1, color2) {\n        if (!color1 || !color2) { return false; }\n        return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n    };\n    tinycolor.random = function() {\n        return tinycolor.fromRatio({\n            r: mathRandom(),\n            g: mathRandom(),\n            b: mathRandom()\n        });\n    };\n\n\n    // Modification Functions\n    // ----------------------\n    // Thanks to less.js for some of the basics here\n    // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\n    function desaturate(color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var hsl = tinycolor(color).toHsl();\n        hsl.s -= amount / 100;\n        hsl.s = clamp01(hsl.s);\n        return tinycolor(hsl);\n    }\n\n    function saturate(color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var hsl = tinycolor(color).toHsl();\n        hsl.s += amount / 100;\n        hsl.s = clamp01(hsl.s);\n        return tinycolor(hsl);\n    }\n\n    function greyscale(color) {\n        return tinycolor(color).desaturate(100);\n    }\n\n    function lighten (color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var hsl = tinycolor(color).toHsl();\n        hsl.l += amount / 100;\n        hsl.l = clamp01(hsl.l);\n        return tinycolor(hsl);\n    }\n\n    function brighten(color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var rgb = tinycolor(color).toRgb();\n        rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n        rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n        rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n        return tinycolor(rgb);\n    }\n\n    function darken (color, amount) {\n        amount = (amount === 0) ? 0 : (amount || 10);\n        var hsl = tinycolor(color).toHsl();\n        hsl.l -= amount / 100;\n        hsl.l = clamp01(hsl.l);\n        return tinycolor(hsl);\n    }\n\n    // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n    // Values outside of this range will be wrapped into this range.\n    function spin(color, amount) {\n        var hsl = tinycolor(color).toHsl();\n        var hue = (mathRound(hsl.h) + amount) % 360;\n        hsl.h = hue < 0 ? 360 + hue : hue;\n        return tinycolor(hsl);\n    }\n\n    // Combination Functions\n    // ---------------------\n    // Thanks to jQuery xColor for some of the ideas behind these\n    // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\n    function complement(color) {\n        var hsl = tinycolor(color).toHsl();\n        hsl.h = (hsl.h + 180) % 360;\n        return tinycolor(hsl);\n    }\n\n    function triad(color) {\n        var hsl = tinycolor(color).toHsl();\n        var h = hsl.h;\n        return [\n            tinycolor(color),\n            tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n            tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n        ];\n    }\n\n    function tetrad(color) {\n        var hsl = tinycolor(color).toHsl();\n        var h = hsl.h;\n        return [\n            tinycolor(color),\n            tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n            tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n            tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n        ];\n    }\n\n    function splitcomplement(color) {\n        var hsl = tinycolor(color).toHsl();\n        var h = hsl.h;\n        return [\n            tinycolor(color),\n            tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n            tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n        ];\n    }\n\n    function analogous(color, results, slices) {\n        results = results || 6;\n        slices = slices || 30;\n\n        var hsl = tinycolor(color).toHsl();\n        var part = 360 / slices;\n        var ret = [tinycolor(color)];\n\n        for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n            hsl.h = (hsl.h + part) % 360;\n            ret.push(tinycolor(hsl));\n        }\n        return ret;\n    }\n\n    function monochromatic(color, results) {\n        results = results || 6;\n        var hsv = tinycolor(color).toHsv();\n        var h = hsv.h, s = hsv.s, v = hsv.v;\n        var ret = [];\n        var modification = 1 / results;\n\n        while (results--) {\n            ret.push(tinycolor({ h: h, s: s, v: v}));\n            v = (v + modification) % 1;\n        }\n\n        return ret;\n    }\n\n    // Utility Functions\n    // ---------------------\n\n    tinycolor.mix = function(color1, color2, amount) {\n        amount = (amount === 0) ? 0 : (amount || 50);\n\n        var rgb1 = tinycolor(color1).toRgb();\n        var rgb2 = tinycolor(color2).toRgb();\n\n        var p = amount / 100;\n        var w = p * 2 - 1;\n        var a = rgb2.a - rgb1.a;\n\n        var w1;\n\n        if (w * a == -1) {\n            w1 = w;\n        } else {\n            w1 = (w + a) / (1 + w * a);\n        }\n\n        w1 = (w1 + 1) / 2;\n\n        var w2 = 1 - w1;\n\n        var rgba = {\n            r: rgb2.r * w1 + rgb1.r * w2,\n            g: rgb2.g * w1 + rgb1.g * w2,\n            b: rgb2.b * w1 + rgb1.b * w2,\n            a: rgb2.a * p  + rgb1.a * (1 - p)\n        };\n\n        return tinycolor(rgba);\n    };\n\n\n    // Readability Functions\n    // ---------------------\n    // <http://www.w3.org/TR/AERT#color-contrast>\n\n    // `readability`\n    // Analyze the 2 colors and returns an object with the following properties:\n    //    `brightness`: difference in brightness between the two colors\n    //    `color`: difference in color/hue between the two colors\n    tinycolor.readability = function(color1, color2) {\n        var c1 = tinycolor(color1);\n        var c2 = tinycolor(color2);\n        var rgb1 = c1.toRgb();\n        var rgb2 = c2.toRgb();\n        var brightnessA = c1.getBrightness();\n        var brightnessB = c2.getBrightness();\n        var colorDiff = (\n            Math.max(rgb1.r, rgb2.r) - Math.min(rgb1.r, rgb2.r) +\n            Math.max(rgb1.g, rgb2.g) - Math.min(rgb1.g, rgb2.g) +\n            Math.max(rgb1.b, rgb2.b) - Math.min(rgb1.b, rgb2.b)\n        );\n\n        return {\n            brightness: Math.abs(brightnessA - brightnessB),\n            color: colorDiff\n        };\n    };\n\n    // `readable`\n    // http://www.w3.org/TR/AERT#color-contrast\n    // Ensure that foreground and background color combinations provide sufficient contrast.\n    // *Example*\n    //    tinycolor.isReadable(\"#000\", \"#111\") => false\n    tinycolor.isReadable = function(color1, color2) {\n        var readability = tinycolor.readability(color1, color2);\n        return readability.brightness > 125 && readability.color > 500;\n    };\n\n    // `mostReadable`\n    // Given a base color and a list of possible foreground or background\n    // colors for that base, returns the most readable color.\n    // *Example*\n    //    tinycolor.mostReadable(\"#123\", [\"#fff\", \"#000\"]) => \"#000\"\n    tinycolor.mostReadable = function(baseColor, colorList) {\n        var bestColor = null;\n        var bestScore = 0;\n        var bestIsReadable = false;\n        for (var i=0; i < colorList.length; i++) {\n\n            // We normalize both around the \"acceptable\" breaking point,\n            // but rank brightness constrast higher than hue.\n\n            var readability = tinycolor.readability(baseColor, colorList[i]);\n            var readable = readability.brightness > 125 && readability.color > 500;\n            var score = 3 * (readability.brightness / 125) + (readability.color / 500);\n\n            if ((readable && ! bestIsReadable) ||\n                (readable && bestIsReadable && score > bestScore) ||\n                ((! readable) && (! bestIsReadable) && score > bestScore)) {\n                bestIsReadable = readable;\n                bestScore = score;\n                bestColor = tinycolor(colorList[i]);\n            }\n        }\n        return bestColor;\n    };\n\n\n    // Big List of Colors\n    // ------------------\n    // <http://www.w3.org/TR/css3-color/#svg-color>\n    var names = tinycolor.names = {\n        aliceblue: \"f0f8ff\",\n        antiquewhite: \"faebd7\",\n        aqua: \"0ff\",\n        aquamarine: \"7fffd4\",\n        azure: \"f0ffff\",\n        beige: \"f5f5dc\",\n        bisque: \"ffe4c4\",\n        black: \"000\",\n        blanchedalmond: \"ffebcd\",\n        blue: \"00f\",\n        blueviolet: \"8a2be2\",\n        brown: \"a52a2a\",\n        burlywood: \"deb887\",\n        burntsienna: \"ea7e5d\",\n        cadetblue: \"5f9ea0\",\n        chartreuse: \"7fff00\",\n        chocolate: \"d2691e\",\n        coral: \"ff7f50\",\n        cornflowerblue: \"6495ed\",\n        cornsilk: \"fff8dc\",\n        crimson: \"dc143c\",\n        cyan: \"0ff\",\n        darkblue: \"00008b\",\n        darkcyan: \"008b8b\",\n        darkgoldenrod: \"b8860b\",\n        darkgray: \"a9a9a9\",\n        darkgreen: \"006400\",\n        darkgrey: \"a9a9a9\",\n        darkkhaki: \"bdb76b\",\n        darkmagenta: \"8b008b\",\n        darkolivegreen: \"556b2f\",\n        darkorange: \"ff8c00\",\n        darkorchid: \"9932cc\",\n        darkred: \"8b0000\",\n        darksalmon: \"e9967a\",\n        darkseagreen: \"8fbc8f\",\n        darkslateblue: \"483d8b\",\n        darkslategray: \"2f4f4f\",\n        darkslategrey: \"2f4f4f\",\n        darkturquoise: \"00ced1\",\n        darkviolet: \"9400d3\",\n        deeppink: \"ff1493\",\n        deepskyblue: \"00bfff\",\n        dimgray: \"696969\",\n        dimgrey: \"696969\",\n        dodgerblue: \"1e90ff\",\n        firebrick: \"b22222\",\n        floralwhite: \"fffaf0\",\n        forestgreen: \"228b22\",\n        fuchsia: \"f0f\",\n        gainsboro: \"dcdcdc\",\n        ghostwhite: \"f8f8ff\",\n        gold: \"ffd700\",\n        goldenrod: \"daa520\",\n        gray: \"808080\",\n        green: \"008000\",\n        greenyellow: \"adff2f\",\n        grey: \"808080\",\n        honeydew: \"f0fff0\",\n        hotpink: \"ff69b4\",\n        indianred: \"cd5c5c\",\n        indigo: \"4b0082\",\n        ivory: \"fffff0\",\n        khaki: \"f0e68c\",\n        lavender: \"e6e6fa\",\n        lavenderblush: \"fff0f5\",\n        lawngreen: \"7cfc00\",\n        lemonchiffon: \"fffacd\",\n        lightblue: \"add8e6\",\n        lightcoral: \"f08080\",\n        lightcyan: \"e0ffff\",\n        lightgoldenrodyellow: \"fafad2\",\n        lightgray: \"d3d3d3\",\n        lightgreen: \"90ee90\",\n        lightgrey: \"d3d3d3\",\n        lightpink: \"ffb6c1\",\n        lightsalmon: \"ffa07a\",\n        lightseagreen: \"20b2aa\",\n        lightskyblue: \"87cefa\",\n        lightslategray: \"789\",\n        lightslategrey: \"789\",\n        lightsteelblue: \"b0c4de\",\n        lightyellow: \"ffffe0\",\n        lime: \"0f0\",\n        limegreen: \"32cd32\",\n        linen: \"faf0e6\",\n        magenta: \"f0f\",\n        maroon: \"800000\",\n        mediumaquamarine: \"66cdaa\",\n        mediumblue: \"0000cd\",\n        mediumorchid: \"ba55d3\",\n        mediumpurple: \"9370db\",\n        mediumseagreen: \"3cb371\",\n        mediumslateblue: \"7b68ee\",\n        mediumspringgreen: \"00fa9a\",\n        mediumturquoise: \"48d1cc\",\n        mediumvioletred: \"c71585\",\n        midnightblue: \"191970\",\n        mintcream: \"f5fffa\",\n        mistyrose: \"ffe4e1\",\n        moccasin: \"ffe4b5\",\n        navajowhite: \"ffdead\",\n        navy: \"000080\",\n        oldlace: \"fdf5e6\",\n        olive: \"808000\",\n        olivedrab: \"6b8e23\",\n        orange: \"ffa500\",\n        orangered: \"ff4500\",\n        orchid: \"da70d6\",\n        palegoldenrod: \"eee8aa\",\n        palegreen: \"98fb98\",\n        paleturquoise: \"afeeee\",\n        palevioletred: \"db7093\",\n        papayawhip: \"ffefd5\",\n        peachpuff: \"ffdab9\",\n        peru: \"cd853f\",\n        pink: \"ffc0cb\",\n        plum: \"dda0dd\",\n        powderblue: \"b0e0e6\",\n        purple: \"800080\",\n        rebeccapurple: \"663399\",\n        red: \"f00\",\n        rosybrown: \"bc8f8f\",\n        royalblue: \"4169e1\",\n        saddlebrown: \"8b4513\",\n        salmon: \"fa8072\",\n        sandybrown: \"f4a460\",\n        seagreen: \"2e8b57\",\n        seashell: \"fff5ee\",\n        sienna: \"a0522d\",\n        silver: \"c0c0c0\",\n        skyblue: \"87ceeb\",\n        slateblue: \"6a5acd\",\n        slategray: \"708090\",\n        slategrey: \"708090\",\n        snow: \"fffafa\",\n        springgreen: \"00ff7f\",\n        steelblue: \"4682b4\",\n        tan: \"d2b48c\",\n        teal: \"008080\",\n        thistle: \"d8bfd8\",\n        tomato: \"ff6347\",\n        turquoise: \"40e0d0\",\n        violet: \"ee82ee\",\n        wheat: \"f5deb3\",\n        white: \"fff\",\n        whitesmoke: \"f5f5f5\",\n        yellow: \"ff0\",\n        yellowgreen: \"9acd32\"\n    };\n\n    // Make it easy to access colors via `hexNames[hex]`\n    var hexNames = tinycolor.hexNames = flip(names);\n\n\n    // Utilities\n    // ---------\n\n    // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n    function flip(o) {\n        var flipped = { };\n        for (var i in o) {\n            if (o.hasOwnProperty(i)) {\n                flipped[o[i]] = i;\n            }\n        }\n        return flipped;\n    }\n\n    // Return a valid alpha value [0,1] with all invalid values being set to 1\n    function boundAlpha(a) {\n        a = parseFloat(a);\n\n        if (isNaN(a) || a < 0 || a > 1) {\n            a = 1;\n        }\n\n        return a;\n    }\n\n    // Take input from [0, n] and return it as [0, 1]\n    function bound01(n, max) {\n        if (isOnePointZero(n)) { n = \"100%\"; }\n\n        var processPercent = isPercentage(n);\n        n = mathMin(max, mathMax(0, parseFloat(n)));\n\n        // Automatically convert percentage into number\n        if (processPercent) {\n            n = parseInt(n * max, 10) / 100;\n        }\n\n        // Handle floating point rounding errors\n        if ((math.abs(n - max) < 0.000001)) {\n            return 1;\n        }\n\n        // Convert into [0, 1] range if it isn't already\n        return (n % max) / parseFloat(max);\n    }\n\n    // Force a number between 0 and 1\n    function clamp01(val) {\n        return mathMin(1, mathMax(0, val));\n    }\n\n    // Parse a base-16 hex value into a base-10 integer\n    function parseIntFromHex(val) {\n        return parseInt(val, 16);\n    }\n\n    // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n    // <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n    function isOnePointZero(n) {\n        return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n    }\n\n    // Check to see if string passed in is a percentage\n    function isPercentage(n) {\n        return typeof n === \"string\" && n.indexOf('%') != -1;\n    }\n\n    // Force a hex value to have 2 characters\n    function pad2(c) {\n        return c.length == 1 ? '0' + c : '' + c;\n    }\n\n    // Replace a decimal with it's percentage value\n    function convertToPercentage(n) {\n        if (n <= 1) {\n            n = (n * 100) + \"%\";\n        }\n\n        return n;\n    }\n\n    // Converts a decimal to a hex value\n    function convertDecimalToHex(d) {\n        return Math.round(parseFloat(d) * 255).toString(16);\n    }\n    // Converts a hex value to a decimal\n    function convertHexToDecimal(h) {\n        return (parseIntFromHex(h) / 255);\n    }\n\n    var matchers = (function() {\n\n        // <http://www.w3.org/TR/css3-values/#integers>\n        var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n        // <http://www.w3.org/TR/css3-values/#number-value>\n        var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n        // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\n        var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n        // Actual matching.\n        // Parentheses and commas are optional, but not required.\n        // Whitespace can take the place of commas or opening paren\n        var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n        var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n        return {\n            rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n            rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n            hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n            hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n            hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n            hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n            hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n            hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n            hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n        };\n    })();\n\n    // `stringInputToObject`\n    // Permissive string parsing.  Take in a number of formats, and output an object\n    // based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n    function stringInputToObject(color) {\n\n        color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n        var named = false;\n        if (names[color]) {\n            color = names[color];\n            named = true;\n        }\n        else if (color == 'transparent') {\n            return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n        }\n\n        // Try to match string input using regular expressions.\n        // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n        // Just return an object and let the conversion functions handle that.\n        // This way the result will be the same whether the tinycolor is initialized with string or object.\n        var match;\n        if ((match = matchers.rgb.exec(color))) {\n            return { r: match[1], g: match[2], b: match[3] };\n        }\n        if ((match = matchers.rgba.exec(color))) {\n            return { r: match[1], g: match[2], b: match[3], a: match[4] };\n        }\n        if ((match = matchers.hsl.exec(color))) {\n            return { h: match[1], s: match[2], l: match[3] };\n        }\n        if ((match = matchers.hsla.exec(color))) {\n            return { h: match[1], s: match[2], l: match[3], a: match[4] };\n        }\n        if ((match = matchers.hsv.exec(color))) {\n            return { h: match[1], s: match[2], v: match[3] };\n        }\n        if ((match = matchers.hsva.exec(color))) {\n            return { h: match[1], s: match[2], v: match[3], a: match[4] };\n        }\n        if ((match = matchers.hex8.exec(color))) {\n            return {\n                a: convertHexToDecimal(match[1]),\n                r: parseIntFromHex(match[2]),\n                g: parseIntFromHex(match[3]),\n                b: parseIntFromHex(match[4]),\n                format: named ? \"name\" : \"hex8\"\n            };\n        }\n        if ((match = matchers.hex6.exec(color))) {\n            return {\n                r: parseIntFromHex(match[1]),\n                g: parseIntFromHex(match[2]),\n                b: parseIntFromHex(match[3]),\n                format: named ? \"name\" : \"hex\"\n            };\n        }\n        if ((match = matchers.hex3.exec(color))) {\n            return {\n                r: parseIntFromHex(match[1] + '' + match[1]),\n                g: parseIntFromHex(match[2] + '' + match[2]),\n                b: parseIntFromHex(match[3] + '' + match[3]),\n                format: named ? \"name\" : \"hex\"\n            };\n        }\n\n        return false;\n    }\n\n    window.tinycolor = tinycolor;\n    })();\n\n    $(function () {\n        if ($.fn.spectrum.load) {\n            $.fn.spectrum.processNativeColorInputs();\n        }\n    });\n\n});\n"
  },
  {
    "path": "libs/sql.js/AUTHORS",
    "content": "Ophir LOJKINE <pere.jobs@gmail.com> (https://github.com/lovasoa)\n@kripken\n@hankinsoft\n@firien\n@dinedal\n@taytay\n"
  },
  {
    "path": "libs/sql.js/LICENSE",
    "content": "MIT license\n===========\n\nCopyright (c) 2017 sql.js authors (see AUTHORS)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n\n# Some portions of the Makefile taken from:\nCopyright 2017 Ryusei Yamaguchi\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "libs/sql.js/README.md",
    "content": "# SQLite compiled to javascript\n[![Build Status](https://travis-ci.org/kripken/sql.js.svg?branch=master)](http://travis-ci.org/kripken/sql.js) [![CDNJS version](https://img.shields.io/cdnjs/v/sql.js.svg)](https://cdnjs.com/libraries/sql.js)\n\nFor the impatients, try the demo here: http://kripken.github.io/sql.js/examples/GUI\n\n*sql.js* is a port of [SQLite](http://sqlite.org/about.html) to Webassembly, by compiling the SQLite C code with [Emscripten](http://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html). It uses a [virtual database file stored in memory](https://kripken.github.io/emscripten-site/docs/porting/files/file_systems_overview.html), and thus **doesn't persist the changes** made to the database. However, it allows you to **import** any existing sqlite file, and to **export** the created database as a [javascript typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays).\n\nThere are no C bindings or node-gyp compilation here, sql.js is a simple javascript file, that can be used like any traditional javascript library. If you are building a native application in javascript (using Electron for instance), or are working in node.js, you will likely prefer to use [a native binding of SQLite to javascript](https://www.npmjs.com/package/sqlite3).\n\nSQLite is public domain, sql.js is MIT licensed.\n\nSql.js predates WebAssembly, and thus started as an [asm.js](https://en.wikipedia.org/wiki/Asm.js) project. It still supports asm.js for backwards compatability.\n\n## Version of binaries\nSql.js was last built with:\nEmscripten version 1.38.30 (2019-04-16) [Release History](https://emscripten.org/docs/introducing_emscripten/release_notes.html)\nSqlLite version: 3.28.0 (2019-04-16) [Release History](https://www.sqlite.org/changes.html)\n\n## Documentation\nA [full documentation](http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Database.html) generated from comments inside the source code, is available.\n\n## Usage\n\n```javascript\nvar initSqlJs = require('sql-wasm.js');\n// or if you are in a browser:\n//var initSqlJs = window.initSqlJs;\n\ninitSqlJs().then(function(SQL){\n\n  // Create a database\n  var db = new SQL.Database();\n  // NOTE: You can also use new SQL.Database(data) where\n  // data is an Uint8Array representing an SQLite database file\n\n  // Execute some sql\n  sqlstr = \"CREATE TABLE hello (a int, b char);\";\n  sqlstr += \"INSERT INTO hello VALUES (0, 'hello');\"\n  sqlstr += \"INSERT INTO hello VALUES (1, 'world');\"\n  db.run(sqlstr); // Run the query without returning anything\n\n  var res = db.exec(\"SELECT * FROM hello\");\n  /*\n  [\n    {columns:['a','b'], values:[[0,'hello'],[1,'world']]}\n  ]\n  */\n\n  // Prepare an sql statement\n  var stmt = db.prepare(\"SELECT * FROM hello WHERE a=:aval AND b=:bval\");\n\n  // Bind values to the parameters and fetch the results of the query\n  var result = stmt.getAsObject({':aval' : 1, ':bval' : 'world'});\n  console.log(result); // Will print {a:1, b:'world'}\n\n  // Bind other values\n  stmt.bind([0, 'hello']);\n  while (stmt.step()) console.log(stmt.get()); // Will print [0, 'hello']\n\n  // You can also use javascript functions inside your SQL code\n  // Create the js function you need\n  function add(a, b) {return a+b;}\n  // Specifies the SQL function's name, the number of it's arguments, and the js function to use\n  db.create_function(\"add_js\", add);\n  // Run a query in which the function is used\n  db.run(\"INSERT INTO hello VALUES (add_js(7, 3), add_js('Hello ', 'world'));\"); // Inserts 10 and 'Hello world'\n\n  // free the memory used by the statement\n  stmt.free();\n  // You can not use your statement anymore once it has been freed.\n  // But not freeing your statements causes memory leaks. You don't want that.\n\n  // Export the database to an Uint8Array containing the SQLite database file\n  var binaryArray = db.export();\n});\n\n```\n\n## Demo\nThere are a few examples [available here](https://kripken.github.io/sql.js/index.html). The most full-featured is the [Sqlite Interpreter](https://kripken.github.io/sql.js/examples/GUI/index.html).\n\n## Examples\nThe test files provide up to date example of the use of the api.\n### Inside the browser\n#### Example **HTML** file:\n```html\n<meta charset=\"utf8\" />\n<html>\n  <script src='/dist/sql-wasm.js'></script>\n  <script>\n    config = {\n      locateFile: url => `/dist/${filename}` \n    }\n    // The `initSqlJs` function is globally provided by all of the main dist files if loaded in the browser.\n    // We must specify this locateFile function if we are loading a wasm file from anywhere other than the current html page's folder.\n    initSqlJs(config).then(function(SQL){\n      //Create the database\n      var db = new SQL.Database();\n      // Run a query without reading the results\n      db.run(\"CREATE TABLE test (col1, col2);\");\n      // Insert two rows: (1,111) and (2,222)\n      db.run(\"INSERT INTO test VALUES (?,?), (?,?)\", [1,111,2,222]);\n  \n      // Prepare a statement\n      var stmt = db.prepare(\"SELECT * FROM test WHERE col1 BETWEEN $start AND $end\");\n      stmt.getAsObject({$start:1, $end:1}); // {col1:1, col2:111}\n  \n      // Bind new values\n      stmt.bind({$start:1, $end:2});\n      while(stmt.step()) { //\n        var row = stmt.getAsObject();\n        console.log('Here is a row: ' + JSON.stringify(row));\n      }\n    });\n  </script>\n  <body>\n    Output is in Javscript console\n  </body>\n</html>\n```\n\n#### Creating a database from a file choosen by the user\n`SQL.Database` constructor takes an array of integer representing a database file as an optional parameter.\nThe following code uses an HTML input as the source for loading a database:\n```javascript\ndbFileElm.onchange = () => {\n  var f = dbFileElm.files[0];\n  var r = new FileReader();\n  r.onload = function() {\n    var Uints = new Uint8Array(r.result);\n    db = new SQL.Database(Uints);\n  }\n  r.readAsArrayBuffer(f);\n}\n```\nSee : http://kripken.github.io/sql.js/examples/GUI/gui.js\n\n#### Loading a database from a server\n\n```javascript\nvar xhr = new XMLHttpRequest();\n// For example: https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite\nxhr.open('GET', '/path/to/database.sqlite', true);\nxhr.responseType = 'arraybuffer';\n\nxhr.onload = e => {\n  var uInt8Array = new Uint8Array(this.response);\n  var db = new SQL.Database(uInt8Array);\n  var contents = db.exec(\"SELECT * FROM my_table\");\n  // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}]\n};\nxhr.send();\n```\nSee: https://github.com/kripken/sql.js/wiki/Load-a-database-from-the-server\n\n\n### Use from node.js\n\n`sql.js` is [hosted on npm](https://www.npmjs.org/package/sql.js). To install it, you can simply run `npm install sql.js`.\nAlternatively, you can simply download `sql-wasm.js` and `sql-wasm.wasm`, from the download link below.\n\n#### read a database from the disk:\n```javascript\nvar fs = require('fs');\nvar initSqlJs = require('sql-wasm.js');\nvar filebuffer = fs.readFileSync('test.sqlite');\n \ninitSqlJs().then(function(SQL){\n  // Load the db\n  var db = new SQL.Database(filebuffer);\n});\n\n```\n\n#### write a database to the disk\nYou need to convert the result of `db.export` to a buffer\n```javascript\nvar fs = require(\"fs\");\n// [...] (create the database)\nvar data = db.export();\nvar buffer = new Buffer(data);\nfs.writeFileSync(\"filename.sqlite\", buffer);\n```\n\nSee : https://github.com/kripken/sql.js/blob/master/test/test_node_file.js\n\n### Use as web worker\nIf you don't want to run CPU-intensive SQL queries in your main application thread,\nyou can use the *more limited* WebWorker API.\n\nYou will need to download [dist/worker.sql-wasm.js](dist/worker.sql-wasm.js) [dist/worker.sql-wasm.wasm](dist/worker.sql-wasm.wasm).\n\nExample:\n```html\n<script>\n  var worker = new Worker(\"/dist/worker.sql-wasm.js\");\n  worker.onmessage = () => {\n    console.log(\"Database opened\");\n    worker.onmessage = event => {\n      console.log(event.data); // The result of the query\n    };\n\t\n    worker.postMessage({\n      id: 2,\n      action: 'exec',\n      sql: 'SELECT * FROM test'\n    });\n  };\n\n  worker.onerror = e => console.log(\"Worker error: \", e);\n  worker.postMessage({\n    id:1,\n    action:'open',\n    buffer:buf, /*Optional. An ArrayBuffer representing an SQLite Database file*/\n  });\n</script>\n```\n\nSee [examples/GUI/gui.js](examples/GUI/gui.js) for a full working example.\n\n## Flavors/versions Targets/Downloads\n\nThis library includes both WebAssembly and asm.js versions of Sqlite. (WebAssembly is the newer, preferred way to compile to Javascript, and has superceded asm.js. It produces smaller, faster code.) Asm.js versions are included for compatibility.\n\n## Upgrading from 0.x to 1.x\n\nVersion 1.0 of sql.js must be loaded asynchronously, whereas asm.js was able to be loaded synchronously. \n\nSo in the past, you would:\n```html\n<script src='js/sql.js'></script>\n<script>\n  var db = new SQL.Database();\n  //...\n</script>\n```\nor:\n```javascript\nvar SQL = require('sql.js');\nvar db = new QL.Database();\n//...\n```\n\nVersion 1.x:\n```html\n<script src='dist/sql-wasm.js'></script>\n<script>\n  initSqlJs({ locateFile: filename => `/dist/${filename}` }).then(function(SQL){\n    var db = new SQL.Database();\n    //...\n  });\n</script>\n```\nor:\n```javascript\nvar initSqlJs = require('sql-wasm.js');\ninitSqlJs().then(function(SQL){\n  var db = new SQL.Database();\n  //...\n});\n```\n\n`NOTHING` is now a reserved word in SQLite, whereas previously it was not. This could cause errors like `Error: near \"nothing\": syntax error`\n\n### Downloading/Using: ###\nAlthough asm.js files were distributed as a single Javascript file, WebAssembly libraries are most efficiently distributed as a pair of files, the `.js`  loader and the `.wasm` file, like [dist/sql-wasm.js]([dist/sql-wasm.js]) and [dist/sql-wasm.wasm]([dist/sql-wasm.wasm]). The `.js` file is reponsible for wrapping/loading the `.wasm` file. \n\n\n\n\n## Versions of sql.js included in `dist/`\n - `sql-wasm.js` : The Web Assembly version of Sql.js. Minified and suitable for production. Use this. If you use this, you will need to include/ship `sql-wasm.wasm` as well.\n - `sql-wasm-debug.js` : The Web Assembly, Debug version of Sql.js. Larger, with assertions turned on. Useful for local development. You will need to include/ship `sql-wasm-debug.wasm` if you use this.\n - `sql-asm.js` : The older asm.js version of Sql.js. Slower and larger. Provided for compatiblity reasons.\n - `sql-asm-memory-growth.js` : Asm.js doesn't allow for memory to grow by default, because it is slower and de-optimizes. If you are using sql-asm.js and you see this error (`Cannot enlarge memory arrays`), use this file.\n - `sql-asm-debug.js` : The _Debug_ asm.js version of Sql.js. Use this for local development.\n - `worker.*` - Web Worker versions of the above libraries. More limited API. See [examples/GUI/gui.js](examples/GUI/gui.js) for a good example of this.\n\n## Compiling\n\n- Install the EMSDK, [as described here](https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html)\n- Run `npm run rebuild`\n\n"
  },
  {
    "path": "libs/sql.js/sql-wasm.js",
    "content": "\n// We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n// https://github.com/kripken/emscripten/issues/5820\n// In addition, When you use emcc's modularization, it still expects to export a global object called `Module`,\n// which is able to be used/called before the WASM is loaded.\n// The modularization below exports a promise that loads and resolves to the actual sql.js module.\n// That way, this module can't be used before the WASM is finished loading.\n\n// We are going to define a function that a user will call to start loading initializing our Sql.js library\n// However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module\n// Instead, we want to return the previously loaded module\n\n// TODO: Make this not declare a global if used in the browser\nvar initSqlJsPromise = undefined;\n\nvar initSqlJs = function (moduleConfig) {\n\n    if (initSqlJsPromise){\n      return initSqlJsPromise;\n    }\n    // If we're here, we've never called this function before\n    initSqlJsPromise = new Promise((resolveModule, reject) => {\n\n        // We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n        // https://github.com/kripken/emscripten/issues/5820\n\n        // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add\n        // properties to it, like `preRun`, `postRun`, etc\n        // We are using that to get notified when the WASM has finished loading.\n        // Only then will we return our promise\n\n        // If they passed in a moduleConfig object, use that\n        // Otherwise, initialize Module to the empty object\n        var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {};\n\n        // EMCC only allows for a single onAbort function (not an array of functions)\n        // So if the user defined their own onAbort function, we remember it and call it\n        var originalOnAbortFunction = Module['onAbort'];\n        Module['onAbort'] = function (errorThatCausedAbort) {\n            reject(new Error(errorThatCausedAbort));\n            if (originalOnAbortFunction){\n              originalOnAbortFunction(errorThatCausedAbort);\n            }\n        };\n\n        Module['postRun'] = Module['postRun'] || [];\n        Module['postRun'].push(function () {\n            // When Emscripted calls postRun, this promise resolves with the built Module\n            resolveModule(Module);\n        });\n\n        // There is a section of code in the emcc-generated code below that looks like this:\n        // (Note that this is lowercase `module`)\n        // if (typeof module !== 'undefined') {\n        //     module['exports'] = Module;\n        // }\n        // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js!\n        // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags,\n        // but that carries with it additional unnecessary baggage/bugs we don't want either.\n        // So, we have three options:\n        // 1) We undefine `module`\n        // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later\n        // 3) We write a script to remove those lines of code as part of the Make process.\n        //\n        // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward\n        // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future.\n        // That's a nice side effect since we're handling the modularization efforts ourselves\n        module = undefined;\n        \n        // The emcc-generated code and shell-post.js code goes below,\n        // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort\nvar aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {});\nvar va=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.fb=a;this.db=b;this.nb=1;this.Eb=[]}a.prototype.bind=function(a){if(!this.fb)throw\"Statement closed\";this.reset();return Array.isArray(a)?this.lc(a):this.mc(a)};a.prototype.step=function(){var a;if(!this.fb)throw\"Statement closed\";this.nb=1;switch(a=Tb(this.fb)){case c.hc:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.sc=function(a){null==a&&(a=this.nb++);return Ub(this.fb,a)};a.prototype.tc=\nfunction(a){null==a&&(a=this.nb++);return Vb(this.fb,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.nb++);var c=Wb(this.fb,a);var d=Xb(this.fb,a);var e=new Uint8Array(c);for(a=b=0;0<=c?b<c:b>c;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=ib(this.fb);0<=d?b<d:b>d;a=0<=d?++b:--b)switch(Yb(this.fb,a)){case c.fc:case c.FLOAT:e.push(this.sc(a));break;case c.ic:e.push(this.tc(a));break;case c.Zb:e.push(this.getBlob(a));\nbreak;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=ib(this.fb);0<=b?a<b:a>b;d=0<=b?++a:--a)c.push(Zb(this.fb,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b<c;a=++b){var Sb=e[a];g[Sb]=d[a]}return g};a.prototype.run=function(a){null!=a&&this.bind(a);this.step();return this.reset()};a.prototype.pc=function(a,b){var c;null==b&&(b=this.nb++);a=ba(a);this.Eb.push(c=\nea(a));this.db.handleError(ca(this.fb,b,c,a.length-1,0))};a.prototype.kc=function(a,b){var c;null==b&&(b=this.nb++);this.Eb.push(c=ea(a));this.db.handleError(Ia(this.fb,b,c,a.length,0))};a.prototype.oc=function(a,b){null==b&&(b=this.nb++);this.db.handleError((a===(a|0)?$b:ac)(this.fb,b,a))};a.prototype.nc=function(a){null==a&&(a=this.nb++);Ia(this.fb,a,0,0,0)};a.prototype.Qb=function(a,b){null==b&&(b=this.nb++);switch(typeof a){case \"string\":this.pc(a,b);break;case \"number\":case \"boolean\":this.oc(a+\n0,b);break;case \"object\":if(null===a)this.nc(b);else if(null!=a.length)this.kc(a,b);else throw\"Wrong API use : tried to bind a value of an unknown type (\"+a+\").\";}};a.prototype.mc=function(a){var b;for(b in a){var c=a[b];var d=bc(this.fb,b);0!==d&&this.Qb(c,d)}return!0};a.prototype.lc=function(a){var b,c;var d=b=0;for(c=a.length;b<c;d=++b){var e=a[d];this.Qb(e,d+1)}return!0};a.prototype.reset=function(){this.freemem();return cc(this.fb)===c.xb&&dc(this.fb)===c.xb};a.prototype.freemem=function(){for(var a;a=\nthis.Eb.pop();)ha(a);return null};a.prototype.free=function(){this.freemem();var a=ec(this.fb)===c.xb;delete this.db.Bb[this.fb];this.fb=da;return a};return a}();var e=function(){function a(a){this.filename=\"dbfile_\"+(4294967295*Math.random()>>>0);if(null!=a){var c=this.filename,d=c?n(\"/\",c):\"/\";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if(\"string\"===typeof a){for(var e=Array(a.length),k=0,m=a.length;k<m;++k)e[k]=a.charCodeAt(k);a=e}ka(d,c|146);e=p(d,\"w\");la(e,a,0,a.length,0,void 0);\nma(e);ka(d,c)}}this.handleError(g(this.filename,b));this.db=q(b,\"i32\");fc(this.db);this.Bb={}}a.prototype.run=function(a,c){if(!this.db)throw\"Database closed\";c?(a=this.prepare(a,c),a.step(),a.free()):this.handleError(m(this.db,a,0,0,b));return this};a.prototype.exec=function(a){if(!this.db)throw\"Database closed\";var c=na();var e=oa(a)+1;var g=h(e);r(a,l,g,e);a=g;e=h(4);for(g=[];q(a,\"i8\")!==da;){pa(b);pa(e);this.handleError(fa(this.db,a,-1,b,e));var k=q(b,\"i32\");a=q(e,\"i32\");if(k!==da){var m=new d(k,\nthis);for(k=null;m.step();)null===k&&(k={columns:m.getColumnNames(),values:[]},g.push(k)),k.values.push(m.get());m.free()}}qa(c);return g};a.prototype.each=function(a,b,c,d){\"function\"===typeof b&&(d=c,c=b,b=void 0);for(a=this.prepare(a,b);a.step();)c(a.getAsObject());a.free();if(\"function\"===typeof d)return d()};a.prototype.prepare=function(a,c){pa(b);this.handleError(z(this.db,a,-1,b,da));a=q(b,\"i32\");if(a===da)throw\"Nothing to prepare\";var e=new d(a,this);null!=c&&e.bind(c);return this.Bb[a]=e};\na.prototype[\"export\"]=function(){var a;var c=this.Bb;for(e in c){var d=c[e];d.free()}this.handleError(k(this.db));d=this.filename;var e=e={encoding:\"binary\"};e.flags=e.flags||\"r\";e.encoding=e.encoding||\"binary\";if(\"utf8\"!==e.encoding&&\"binary\"!==e.encoding)throw Error('Invalid encoding type \"'+e.encoding+'\"');c=p(d,e.flags);d=ra(d).size;var m=new Uint8Array(d);sa(c,m,0,d,0);\"utf8\"===e.encoding?a=t(m,0):\"binary\"===e.encoding&&(a=m);ma(c);this.handleError(g(this.filename,b));this.db=q(b,\"i32\");return a};\na.prototype.close=function(){var a;var b=this.Bb;for(a in b){var c=b[a];c.free()}this.handleError(k(this.db));ta(\"/\"+this.filename);return this.db=null};a.prototype.handleError=function(a){if(a===c.xb)return null;a=hc(this.db);throw Error(a);};a.prototype.getRowsModified=function(){return y(this.db)};a.prototype.create_function=function(a,b){var d=ua(function(a,c,d){var e,g;var k=[];for(e=g=0;0<=c?g<c:g>c;e=0<=c?++g:--g){var m=q(d+4*e,\"i32\");var z=jc(m);e=function(){switch(!1){case 1!==z:return kc;\ncase 2!==z:return lc;case 3!==z:return mc;case 4!==z:return function(a){var b,c;var d=nc(a);var e=oc(a);a=new Uint8Array(d);for(b=c=0;0<=d?c<d:c>d;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(m);k.push(e)}if(c=b.apply(null,k))switch(typeof c){case \"number\":return pc(a,c);case \"string\":return qc(a,c,-1,-1)}else return rc(a)});this.handleError(sc(this.db,a,b.length,c.jc,0,d,0,0,0));return this};return a}();var g=f.cwrap(\"sqlite3_open\",\"number\",[\"string\",\"number\"]);\nvar k=f.cwrap(\"sqlite3_close_v2\",\"number\",[\"number\"]);var m=f.cwrap(\"sqlite3_exec\",\"number\",[\"number\",\"string\",\"number\",\"number\",\"number\"]);f.cwrap(\"sqlite3_free\",\"\",[\"number\"]);var y=f.cwrap(\"sqlite3_changes\",\"number\",[\"number\"]);var z=f.cwrap(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"string\",\"number\",\"number\",\"number\"]);var fa=f.cwrap(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var ca=f.cwrap(\"sqlite3_bind_text\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);\nvar Ia=f.cwrap(\"sqlite3_bind_blob\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]);var ac=f.cwrap(\"sqlite3_bind_double\",\"number\",[\"number\",\"number\",\"number\"]);var $b=f.cwrap(\"sqlite3_bind_int\",\"number\",[\"number\",\"number\",\"number\"]);var bc=f.cwrap(\"sqlite3_bind_parameter_index\",\"number\",[\"number\",\"string\"]);var Tb=f.cwrap(\"sqlite3_step\",\"number\",[\"number\"]);var hc=f.cwrap(\"sqlite3_errmsg\",\"string\",[\"number\"]);var ib=f.cwrap(\"sqlite3_data_count\",\"number\",[\"number\"]);var Ub=f.cwrap(\"sqlite3_column_double\",\n\"number\",[\"number\",\"number\"]);var Vb=f.cwrap(\"sqlite3_column_text\",\"string\",[\"number\",\"number\"]);var Xb=f.cwrap(\"sqlite3_column_blob\",\"number\",[\"number\",\"number\"]);var Wb=f.cwrap(\"sqlite3_column_bytes\",\"number\",[\"number\",\"number\"]);var Yb=f.cwrap(\"sqlite3_column_type\",\"number\",[\"number\",\"number\"]);var Zb=f.cwrap(\"sqlite3_column_name\",\"string\",[\"number\",\"number\"]);var dc=f.cwrap(\"sqlite3_reset\",\"number\",[\"number\"]);var cc=f.cwrap(\"sqlite3_clear_bindings\",\"number\",[\"number\"]);var ec=f.cwrap(\"sqlite3_finalize\",\n\"number\",[\"number\"]);var sc=f.cwrap(\"sqlite3_create_function_v2\",\"number\",\"number string number number number number number number number\".split(\" \"));var jc=f.cwrap(\"sqlite3_value_type\",\"number\",[\"number\"]);var nc=f.cwrap(\"sqlite3_value_bytes\",\"number\",[\"number\"]);var mc=f.cwrap(\"sqlite3_value_text\",\"string\",[\"number\"]);var kc=f.cwrap(\"sqlite3_value_int\",\"number\",[\"number\"]);var oc=f.cwrap(\"sqlite3_value_blob\",\"number\",[\"number\"]);var lc=f.cwrap(\"sqlite3_value_double\",\"number\",[\"number\"]);var pc=\nf.cwrap(\"sqlite3_result_double\",\"\",[\"number\",\"number\"]);var rc=f.cwrap(\"sqlite3_result_null\",\"\",[\"number\"]);var qc=f.cwrap(\"sqlite3_result_text\",\"\",[\"number\",\"string\",\"number\",\"number\"]);var fc=f.cwrap(\"RegisterExtensionFunctions\",\"number\",[\"number\"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var da=0;c.xb=0;c.we=1;c.Pe=2;c.Ze=3;c.Cc=4;c.Ec=5;c.Se=6;c.NOMEM=7;c.bf=8;c.Qe=9;c.Re=10;c.Hc=11;c.NOTFOUND=12;c.Oe=13;c.Fc=14;c.$e=15;c.EMPTY=16;c.cf=17;c.df=18;c.Gc=19;c.Te=20;c.Ue=21;c.Ve=\n22;c.Dc=23;c.Ne=24;c.af=25;c.We=26;c.Xe=27;c.ef=28;c.hc=100;c.DONE=101;c.fc=1;c.FLOAT=2;c.ic=3;c.Zb=4;c.Ye=5;c.jc=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(va);var wa={},u;for(u in f)f.hasOwnProperty(u)&&(wa[u]=f[u]);f.arguments=[];f.thisProgram=\"./this.program\";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var v=!1,w=!1,x=!1,xa=!1;v=\"object\"===typeof window;w=\"function\"===typeof importScripts;x=\"object\"===typeof process&&\"function\"===typeof require&&!v&&!w;xa=!v&&!x&&!w;var A=\"\";\nif(x){A=__dirname+\"/\";var ya,za;f.read=function(a,b){ya||(ya=require(\"fs\"));za||(za=require(\"path\"));a=za.normalize(a);a=ya.readFileSync(a);return b?a:a.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1<process.argv.length&&(f.thisProgram=process.argv[1].replace(/\\\\/g,\"/\"));f.arguments=process.argv.slice(2);\"undefined\"!==typeof module&&(module.exports=f);process.on(\"unhandledRejection\",B);f.quit=function(a){process.exit(a)};f.inspect=\nfunction(){return\"[Emscripten Module object]\"}}else if(xa)\"undefined\"!=typeof read&&(f.read=function(a){return read(a)}),f.readBinary=function(a){if(\"function\"===typeof readbuffer)return new Uint8Array(readbuffer(a));a=read(a,\"binary\");assert(\"object\"===typeof a);return a},\"undefined\"!=typeof scriptArgs?f.arguments=scriptArgs:\"undefined\"!=typeof arguments&&(f.arguments=arguments),\"function\"===typeof quit&&(f.quit=function(a){quit(a)});else if(v||w)w?A=self.location.href:document.currentScript&&(A=\ndocument.currentScript.src),A=0!==A.indexOf(\"blob:\")?A.substr(0,A.lastIndexOf(\"/\")+1):\"\",f.read=function(a){var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.send(null);return b.responseText},w&&(f.readBinary=function(a){var b=new XMLHttpRequest;b.open(\"GET\",a,!1);b.responseType=\"arraybuffer\";b.send(null);return new Uint8Array(b.response)}),f.readAsync=function(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a,!0);d.responseType=\"arraybuffer\";d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):\nc()};d.onerror=c;d.send(null)},f.setWindowTitle=function(a){document.title=a};var Aa=f.print||(\"undefined\"!==typeof console?console.log.bind(console):\"undefined\"!==typeof print?print:null),C=f.printErr||(\"undefined\"!==typeof printErr?printErr:\"undefined\"!==typeof console&&console.warn.bind(console)||Aa);for(u in wa)wa.hasOwnProperty(u)&&(f[u]=wa[u]);wa=void 0;function Ba(a){var b=D[Ca>>2];a=b+a+15&-16;if(a<=Da())D[Ca>>2]=a;else if(!Ea(a))return 0;return b}\nvar Fa={\"f64-rem\":function(a,b){return a%b},\"debugger\":function(){debugger}},Ga=1,E=Array(64);function ua(a){for(var b=0;64>b;b++)if(!E[b])return E[b]=a,Ga+b;throw\"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.\";}\"object\"!==typeof WebAssembly&&C(\"no native wasm support detected\");\nfunction q(a,b){b=b||\"i8\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":return l[a>>0];case \"i8\":return l[a>>0];case \"i16\":return Ha[a>>1];case \"i32\":return D[a>>2];case \"i64\":return D[a>>2];case \"float\":return Ja[a>>2];case \"double\":return Ka[a>>3];default:B(\"invalid type for getValue: \"+b)}return null}var La,Ma=!1;function assert(a,b){a||B(\"Assertion failed: \"+b)}function Na(a){var b=f[\"_\"+a];assert(b,\"Cannot call unknown function \"+a+\", make sure it is exported\");return b}\nfunction Oa(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,F,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Na(a),k=[];a=0;if(d)for(var m=0;m<d.length;m++){var y=e[c[m]];y?(0===a&&(a=na()),k[m]=y(d[m])):k[m]=d[m]}c=g.apply(null,k);c=function(a){return\"string\"===b?G(a):\"boolean\"===b?!!a:a}(c);0!==a&&qa(a);return c}\nfunction pa(a){var b=\"i32\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":l[a>>0]=0;break;case \"i8\":l[a>>0]=0;break;case \"i16\":Ha[a>>1]=0;break;case \"i32\":D[a>>2]=0;break;case \"i64\":aa=[0,1<=+Pa(0)?~~+Qa(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case \"float\":Ja[a>>2]=0;break;case \"double\":Ka[a>>3]=0;break;default:B(\"invalid type for setValue: \"+b)}}var Ra=0,Sa=3;\nfunction ea(a){var b=Ra;if(\"number\"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;b=b==Sa?e:[Ta,h,Ba][b](Math.max(d,1));if(c){var e=b;assert(0==(b&3));for(a=b+(d&-4);e<a;e+=4)D[e>>2]=0;for(a=b+d;e<a;)l[e++>>0]=0;return b}a.subarray||a.slice?F.set(a,b):F.set(new Uint8Array(a),b);return b}var Ua=\"undefined\"!==typeof TextDecoder?new TextDecoder(\"utf8\"):void 0;\nfunction t(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.subarray&&Ua)return Ua.decode(a.subarray(b,c));for(d=\"\";b<c;){var e=a[b++];if(e&128){var g=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|g);else{var k=a[b++]&63;e=224==(e&240)?(e&15)<<12|g<<6|k:(e&7)<<18|g<<12|k<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function G(a){return a?t(F,a,void 0):\"\"}\nfunction r(a,b,c,d){if(!(0<d))return 0;var e=c;d=c+d-1;for(var g=0;g<a.length;++g){var k=a.charCodeAt(g);if(55296<=k&&57343>=k){var m=a.charCodeAt(++g);k=65536+((k&1023)<<10)|m&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e}\nfunction oa(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}\"undefined\"!==typeof TextDecoder&&new TextDecoder(\"utf-16le\");function Va(a){return a.replace(/__Z[\\w\\d_]+/g,function(a){return a===a?a:a+\" [\"+a+\"]\"})}function Wa(a){0<a%65536&&(a+=65536-a%65536);return a}var buffer,l,F,Ha,D,Ja,Ka;\nfunction Xa(){f.HEAP8=l=new Int8Array(buffer);f.HEAP16=Ha=new Int16Array(buffer);f.HEAP32=D=new Int32Array(buffer);f.HEAPU8=F=new Uint8Array(buffer);f.HEAPU16=new Uint16Array(buffer);f.HEAPU32=new Uint32Array(buffer);f.HEAPF32=Ja=new Float32Array(buffer);f.HEAPF64=Ka=new Float64Array(buffer)}var Ca=60128,Ya=f.TOTAL_MEMORY||16777216;5242880>Ya&&C(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+Ya+\"! (TOTAL_STACK=5242880)\");\nf.buffer?buffer=f.buffer:\"object\"===typeof WebAssembly&&\"function\"===typeof WebAssembly.Memory?(La=new WebAssembly.Memory({initial:Ya/65536}),buffer=La.buffer):buffer=new ArrayBuffer(Ya);Xa();D[Ca>>2]=5303264;function Za(a){for(;0<a.length;){var b=a.shift();if(\"function\"==typeof b)b();else{var c=b.rc;\"number\"===typeof c?void 0===b.Fb?f.dynCall_v(c):f.dynCall_vi(c,b.Fb):c(void 0===b.Fb?null:b.Fb)}}}var $a=[],ab=[],bb=[],cb=[],db=!1;function eb(){var a=f.preRun.shift();$a.unshift(a)}\nvar Pa=Math.abs,Qa=Math.ceil,H=0,fb=null,gb=null;f.preloadedImages={};f.preloadedAudios={};function hb(){var a=I;return String.prototype.startsWith?a.startsWith(\"data:application/octet-stream;base64,\"):0===a.indexOf(\"data:application/octet-stream;base64,\")}var I=\"sql-wasm.wasm\";if(!hb()){var jb=I;I=f.locateFile?f.locateFile(jb,A):A+jb}\nfunction kb(){try{if(f.wasmBinary)return new Uint8Array(f.wasmBinary);if(f.readBinary)return f.readBinary(I);throw\"both async and sync fetching of the wasm failed\";}catch(a){B(a)}}function lb(){return f.wasmBinary||!v&&!w||\"function\"!==typeof fetch?new Promise(function(a){a(kb())}):fetch(I,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+I+\"'\";return a.arrayBuffer()}).catch(function(){return kb()})}\nfunction mb(a){function b(a){f.asm=a.exports;H--;f.monitorRunDependencies&&f.monitorRunDependencies(H);0==H&&(null!==fb&&(clearInterval(fb),fb=null),gb&&(a=gb,gb=null,a()))}function c(a){b(a.instance)}function d(a){lb().then(function(a){return WebAssembly.instantiate(a,e)}).then(a,function(a){C(\"failed to asynchronously prepare wasm: \"+a);B(a)})}var e={env:a,global:{NaN:NaN,Infinity:Infinity},\"global.Math\":Math,asm2wasm:Fa};H++;f.monitorRunDependencies&&f.monitorRunDependencies(H);if(f.instantiateWasm)try{return f.instantiateWasm(e,\nb)}catch(g){return C(\"Module.instantiateWasm callback failed with error: \"+g),!1}f.wasmBinary||\"function\"!==typeof WebAssembly.instantiateStreaming||hb()||\"function\"!==typeof fetch?d(c):WebAssembly.instantiateStreaming(fetch(I,{credentials:\"same-origin\"}),e).then(c,function(a){C(\"wasm streaming compile failed: \"+a);C(\"falling back to ArrayBuffer instantiation\");d(c)});return{}}\nf.asm=function(a,b){b.memory=La;b.table=new WebAssembly.Table({initial:2560,maximum:2560,element:\"anyfunc\"});b.__memory_base=1024;b.__table_base=0;return mb(b)};ab.push({rc:function(){nb()}});var J={};\nfunction ob(a){if(ob.rb){var b=D[a>>2];var c=D[b>>2]}else ob.rb=!0,J.USER=J.LOGNAME=\"web_user\",J.PATH=\"/\",J.PWD=\"/\",J.HOME=\"/home/web_user\",J.LANG=\"C.UTF-8\",J._=f.thisProgram,c=db?Ta(1024):Ba(1024),b=db?Ta(256):Ba(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in J)if(\"string\"===typeof J[e]){var g=e+\"=\"+J[e];a.push(g);d+=g.length}if(1024<d)throw Error(\"Environment size exceeded TOTAL_ENV_SIZE!\");for(e=0;e<a.length;e++){d=g=a[e];for(var k=c,m=0;m<d.length;++m)l[k++>>0]=d.charCodeAt(m);l[k>>0]=0;D[b+\n4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function pb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function qb(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];\".\"===e?a.splice(d,1):\"..\"===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift(\"..\");return a}function rb(a){var b=\"/\"===a.charAt(0),c=\"/\"===a.substr(-1);(a=qb(a.split(\"/\").filter(function(a){return!!a}),!b).join(\"/\"))||b||(a=\".\");a&&c&&(a+=\"/\");return(b?\"/\":\"\")+a}\nfunction sb(a){var b=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return\".\";b&&(b=b.substr(0,b.length-1));return a+b}function tb(a){if(\"/\"===a)return\"/\";var b=a.lastIndexOf(\"/\");return-1===b?a:a.substr(b+1)}function ub(){var a=Array.prototype.slice.call(arguments,0);return rb(a.join(\"/\"))}function n(a,b){return rb(a+\"/\"+b)}\nfunction vb(){for(var a=\"\",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:\"/\";if(\"string\"!==typeof b)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!b)return\"\";a=b+\"/\"+a;b=\"/\"===b.charAt(0)}a=qb(a.split(\"/\").filter(function(a){return!!a}),!b).join(\"/\");return(b?\"/\":\"\")+a||\".\"}var wb=[];function xb(a,b){wb[a]={input:[],output:[],ub:b};yb(a,zb)}\nvar zb={open:function(a){var b=wb[a.node.rdev];if(!b)throw new K(L.Cb);a.tty=b;a.seekable=!1},close:function(a){a.tty.ub.flush(a.tty)},flush:function(a){a.tty.ub.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.ub.Xb)throw new K(L.Ob);for(var e=0,g=0;g<d;g++){try{var k=a.tty.ub.Xb(a.tty)}catch(m){throw new K(L.Lb);}if(void 0===k&&0===e)throw new K(L.ac);if(null===k||void 0===k)break;e++;b[c+g]=k}e&&(a.node.timestamp=Date.now());return e},write:function(a,b,c,d){if(!a.tty||!a.tty.ub.Ib)throw new K(L.Ob);\ntry{for(var e=0;e<d;e++)a.tty.ub.Ib(a.tty,b[c+e])}catch(g){throw new K(L.Lb);}d&&(a.node.timestamp=Date.now());return e}},Ab={Xb:function(a){if(!a.input.length){var b=null;if(x){var c=new Buffer(256),d=0,e=process.stdin.fd;if(\"win32\"!=process.platform){var g=!1;try{e=fs.openSync(\"/dev/stdin\",\"r\"),g=!0}catch(k){}}try{d=fs.readSync(e,c,0,256,null)}catch(k){if(-1!=k.toString().indexOf(\"EOF\"))d=0;else throw k;}g&&fs.closeSync(e);0<d?b=c.slice(0,d).toString(\"utf-8\"):b=null}else\"undefined\"!=typeof window&&\n\"function\"==typeof window.prompt?(b=window.prompt(\"Input: \"),null!==b&&(b+=\"\\n\")):\"function\"==typeof readline&&(b=readline(),null!==b&&(b+=\"\\n\"));if(!b)return null;a.input=ba(b,!0)}return a.input.shift()},Ib:function(a,b){null===b||10===b?(Aa(t(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(Aa(t(a.output,0)),a.output=[])}},Bb={Ib:function(a,b){null===b||10===b?(C(t(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&\n(C(t(a.output,0)),a.output=[])}},M={mb:null,jb:function(){return M.createNode(null,\"/\",16895,0)},createNode:function(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new K(L.dc);M.mb||(M.mb={dir:{node:{lb:M.ab.lb,hb:M.ab.hb,lookup:M.ab.lookup,vb:M.ab.vb,rename:M.ab.rename,unlink:M.ab.unlink,rmdir:M.ab.rmdir,readdir:M.ab.readdir,symlink:M.ab.symlink},stream:{ob:M.cb.ob}},file:{node:{lb:M.ab.lb,hb:M.ab.hb},stream:{ob:M.cb.ob,read:M.cb.read,write:M.cb.write,Pb:M.cb.Pb,zb:M.cb.zb,Ab:M.cb.Ab}},link:{node:{lb:M.ab.lb,\nhb:M.ab.hb,readlink:M.ab.readlink},stream:{}},Sb:{node:{lb:M.ab.lb,hb:M.ab.hb},stream:Cb}});c=Db(a,b,c,d);N(c.mode)?(c.ab=M.mb.dir.node,c.cb=M.mb.dir.stream,c.bb={}):32768===(c.mode&61440)?(c.ab=M.mb.file.node,c.cb=M.mb.file.stream,c.gb=0,c.bb=null):40960===(c.mode&61440)?(c.ab=M.mb.link.node,c.cb=M.mb.link.stream):8192===(c.mode&61440)&&(c.ab=M.mb.Sb.node,c.cb=M.mb.Sb.stream);c.timestamp=Date.now();a&&(a.bb[b]=c);return c},ff:function(a){if(a.bb&&a.bb.subarray){for(var b=[],c=0;c<a.gb;++c)b.push(a.bb[c]);\nreturn b}return a.bb},gf:function(a){return a.bb?a.bb.subarray?a.bb.subarray(0,a.gb):new Uint8Array(a.bb):new Uint8Array},Tb:function(a,b){var c=a.bb?a.bb.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.bb,a.bb=new Uint8Array(b),0<a.gb&&a.bb.set(c.subarray(0,a.gb),0))},yc:function(a,b){if(a.gb!=b)if(0==b)a.bb=null,a.gb=0;else{if(!a.bb||a.bb.subarray){var c=a.bb;a.bb=new Uint8Array(new ArrayBuffer(b));c&&a.bb.set(c.subarray(0,Math.min(b,a.gb)))}else if(a.bb||(a.bb=\n[]),a.bb.length>b)a.bb.length=b;else for(;a.bb.length<b;)a.bb.push(0);a.gb=b}},ab:{lb:function(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;N(a.mode)?b.size=4096:32768===(a.mode&61440)?b.size=a.gb:40960===(a.mode&61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.pb=4096;b.blocks=Math.ceil(b.size/b.pb);return b},hb:function(a,b){void 0!==b.mode&&(a.mode=\nb.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&M.yc(a,b.size)},lookup:function(){throw Eb[L.bc];},vb:function(a,b,c,d){return M.createNode(a,b,c,d)},rename:function(a,b,c){if(N(a.mode)){try{var d=O(b,c)}catch(g){}if(d)for(var e in d.bb)throw new K(L.Nb);}delete a.parent.bb[a.name];a.name=c;b.bb[c]=a;a.parent=b},unlink:function(a,b){delete a.bb[b]},rmdir:function(a,b){var c=O(a,b),d;for(d in c.bb)throw new K(L.Nb);delete a.bb[b]},readdir:function(a){var b=[\".\",\"..\"],c;for(c in a.bb)a.bb.hasOwnProperty(c)&&\nb.push(c);return b},symlink:function(a,b,c){a=M.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(40960!==(a.mode&61440))throw new K(L.ib);return a.link}},cb:{read:function(a,b,c,d,e){var g=a.node.bb;if(e>=a.node.gb)return 0;a=Math.min(a.node.gb-e,d);if(8<a&&g.subarray)b.set(g.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=g[e+d];return a},write:function(a,b,c,d,e,g){g=!1;if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.bb||a.bb.subarray)){if(g)return a.bb=b.subarray(c,\nc+d),a.gb=d;if(0===a.gb&&0===e)return a.bb=new Uint8Array(b.subarray(c,c+d)),a.gb=d;if(e+d<=a.gb)return a.bb.set(b.subarray(c,c+d),e),d}M.Tb(a,e+d);if(a.bb.subarray&&b.subarray)a.bb.set(b.subarray(c,c+d),e);else for(g=0;g<d;g++)a.bb[e+g]=b[c+g];a.gb=Math.max(a.gb,e+d);return d},ob:function(a,b,c){1===c?b+=a.position:2===c&&32768===(a.node.mode&61440)&&(b+=a.node.gb);if(0>b)throw new K(L.ib);return b},Pb:function(a,b,c){M.Tb(a.node,b+c);a.node.gb=Math.max(a.node.gb,b+c)},zb:function(a,b,c,d,e,g,k){if(32768!==\n(a.node.mode&61440))throw new K(L.Cb);c=a.node.bb;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0<e||e+d<a.node.gb)c.subarray?c=c.subarray(e,e+d):c=Array.prototype.slice.call(c,e,e+d);a=!0;d=Ta(d);if(!d)throw new K(L.Mb);b.set(c,d)}else a=!1,d=c.byteOffset;return{xc:d,Db:a}},Ab:function(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new K(L.Cb);if(e&2)return 0;M.cb.write(a,b,0,d,c,!1);return 0}}},P={yb:!1,Ac:function(){P.yb=!!process.platform.match(/^win/);var a=process.binding(\"constants\");a.fs&&\n(a=a.fs);P.Ub={1024:a.O_APPEND,64:a.O_CREAT,128:a.O_EXCL,0:a.O_RDONLY,2:a.O_RDWR,4096:a.O_SYNC,512:a.O_TRUNC,1:a.O_WRONLY}},Rb:function(a){return Buffer.rb?Buffer.from(a):new Buffer(a)},jb:function(a){assert(x);return P.createNode(null,\"/\",P.Wb(a.Hb.root),0)},createNode:function(a,b,c){if(!N(c)&&32768!==(c&61440)&&40960!==(c&61440))throw new K(L.ib);a=Db(a,b,c);a.ab=P.ab;a.cb=P.cb;return a},Wb:function(a){try{var b=fs.lstatSync(a);P.yb&&(b.mode=b.mode|(b.mode&292)>>2)}catch(c){if(!c.code)throw c;\nthrow new K(L[c.code]);}return b.mode},kb:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.jb.Hb.root);b.reverse();return ub.apply(null,b)},qc:function(a){a&=-2656257;var b=0,c;for(c in P.Ub)a&c&&(b|=P.Ub[c],a^=c);if(a)throw new K(L.ib);return b},ab:{lb:function(a){a=P.kb(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}P.yb&&!b.pb&&(b.pb=4096);P.yb&&!b.blocks&&(b.blocks=(b.size+b.pb-1)/b.pb|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink,\nuid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,pb:b.pb,blocks:b.blocks}},hb:function(a,b){var c=P.kb(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},lookup:function(a,b){var c=n(P.kb(a),b);c=P.Wb(c);return P.createNode(a,b,c)},vb:function(a,b,c,d){a=P.createNode(a,b,c,d);b=P.kb(a);try{N(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,\"\",{mode:a.mode})}catch(e){if(!e.code)throw e;\nthrow new K(L[e.code]);}return a},rename:function(a,b,c){a=P.kb(a);b=n(P.kb(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},unlink:function(a,b){a=n(P.kb(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},rmdir:function(a,b){a=n(P.kb(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},readdir:function(a){a=P.kb(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new K(L[b.code]);}},symlink:function(a,\nb,c){a=n(P.kb(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},readlink:function(a){var b=P.kb(a);try{return b=fs.readlinkSync(b),b=Fb.relative(Fb.resolve(a.jb.Hb.root),b)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}}},cb:{open:function(a){var b=P.kb(a.node);try{32768===(a.node.mode&61440)&&(a.wb=fs.openSync(b,P.qc(a.flags)))}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.wb&&fs.closeSync(a.wb)}catch(b){if(!b.code)throw b;\nthrow new K(L[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},ob:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.wb).size}catch(d){throw new K(L[d.code]);}if(0>b)throw new K(L.ib);return b}}},Gb=null,Hb={},Q=[],Ib=1,R=null,Jb=!0,S={},K=null,\nEb={};function T(a,b){a=vb(\"/\",a);b=b||{};if(!a)return{path:\"\",node:null};var c={Vb:!0,Jb:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.Jb)throw new K(40);a=qb(a.split(\"/\").filter(function(a){return!!a}),!1);var e=Gb;c=\"/\";for(d=0;d<a.length;d++){var g=d===a.length-1;if(g&&b.parent)break;e=O(e,a[d]);c=n(c,a[d]);e.sb&&(!g||g&&b.Vb)&&(e=e.sb.root);if(!g||b.qb)for(g=0;40960===(e.mode&61440);)if(e=Kb(c),c=vb(sb(c),e),e=T(c,{Jb:b.Jb}).node,40<g++)throw new K(40);}return{path:c,node:e}}\nfunction Lb(a){for(var b;;){if(a===a.parent)return a=a.jb.Yb,b?\"/\"!==a[a.length-1]?a+\"/\"+b:a+b:a;b=b?a.name+\"/\"+b:a.name;a=a.parent}}function Mb(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%R.length}function Nb(a){var b=Mb(a.parent.id,a.name);a.tb=R[b];R[b]=a}function Ob(a){var b=Mb(a.parent.id,a.name);if(R[b]===a)R[b]=a.tb;else for(b=R[b];b;){if(b.tb===a){b.tb=a.tb;break}b=b.tb}}\nfunction O(a,b){var c;if(c=(c=Pb(a,\"x\"))?c:a.ab.lookup?0:13)throw new K(c,a);for(c=R[Mb(a.id,b)];c;c=c.tb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ab.lookup(a,b)}\nfunction Db(a,b,c,d){Qb||(Qb=function(a,b,c,d){a||(a=this);this.parent=a;this.jb=a.jb;this.sb=null;this.id=Ib++;this.name=b;this.mode=c;this.ab={};this.cb={};this.rdev=d},Qb.prototype={},Object.defineProperties(Qb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Qb(a,b,c,d);Nb(a);return a}\nfunction N(a){return 16384===(a&61440)}var Rb={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};function ic(a){var b=[\"r\",\"w\",\"rw\"][a&3];a&512&&(b+=\"w\");return b}function Pb(a,b){if(Jb)return 0;if(-1===b.indexOf(\"r\")||a.mode&292){if(-1!==b.indexOf(\"w\")&&!(a.mode&146)||-1!==b.indexOf(\"x\")&&!(a.mode&73))return 13}else return 13;return 0}function tc(a,b){try{return O(a,b),17}catch(c){}return Pb(a,\"wx\")}\nfunction uc(a,b,c){try{var d=O(a,b)}catch(e){return e.eb}if(a=Pb(a,\"wx\"))return a;if(c){if(!N(d.mode))return 20;if(d===d.parent||\"/\"===Lb(d))return 16}else if(N(d.mode))return 21;return 0}function vc(a){var b=4096;for(a=a||0;a<=b;a++)if(!Q[a])return a;throw new K(24);}\nfunction wc(a,b){xc||(xc=function(){},xc.prototype={},Object.defineProperties(xc.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new xc,d;for(d in a)c[d]=a[d];a=c;b=vc(b);a.fd=b;return Q[b]=a}var Cb={open:function(a){a.cb=Hb[a.node.rdev].cb;a.cb.open&&a.cb.open(a)},ob:function(){throw new K(29);}};function yb(a,b){Hb[a]={cb:b}}\nfunction yc(a,b){var c=\"/\"===b,d=!b;if(c&&Gb)throw new K(16);if(!c&&!d){var e=T(b,{Vb:!1});b=e.path;e=e.node;if(e.sb)throw new K(16);if(!N(e.mode))throw new K(20);}b={type:a,Hb:{},Yb:b,wc:[]};a=a.jb(b);a.jb=b;b.root=a;c?Gb=a:e&&(e.sb=b,e.jb&&e.jb.wc.push(b))}function ja(a,b,c){var d=T(a,{parent:!0}).node;a=tb(a);if(!a||\".\"===a||\"..\"===a)throw new K(22);var e=tc(d,a);if(e)throw new K(e);if(!d.ab.vb)throw new K(1);return d.ab.vb(d,a,b,c)}function U(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)}\nfunction zc(a,b,c){\"undefined\"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function Ac(a,b){if(!vb(a))throw new K(2);var c=T(b,{parent:!0}).node;if(!c)throw new K(2);b=tb(b);var d=tc(c,b);if(d)throw new K(d);if(!c.ab.symlink)throw new K(1);c.ab.symlink(c,b,a)}\nfunction ta(a){var b=T(a,{parent:!0}).node,c=tb(a),d=O(b,c),e=uc(b,c,!1);if(e)throw new K(e);if(!b.ab.unlink)throw new K(1);if(d.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(a)}catch(g){console.log(\"FS.trackingDelegate['willDeletePath']('\"+a+\"') threw an exception: \"+g.message)}b.ab.unlink(b,c);Ob(d);try{if(S.onDeletePath)S.onDeletePath(a)}catch(g){console.log(\"FS.trackingDelegate['onDeletePath']('\"+a+\"') threw an exception: \"+g.message)}}\nfunction Kb(a){a=T(a).node;if(!a)throw new K(2);if(!a.ab.readlink)throw new K(22);return vb(Lb(a.parent),a.ab.readlink(a))}function ra(a,b){a=T(a,{qb:!b}).node;if(!a)throw new K(2);if(!a.ab.lb)throw new K(1);return a.ab.lb(a)}function Bc(a){return ra(a,!0)}function ka(a,b){var c;\"string\"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);c.ab.hb(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})}\nfunction Cc(a){var b;\"string\"===typeof a?b=T(a,{qb:!0}).node:b=a;if(!b.ab.hb)throw new K(1);b.ab.hb(b,{timestamp:Date.now()})}function Dc(a,b){if(0>b)throw new K(22);var c;\"string\"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);if(N(c.mode))throw new K(21);if(32768!==(c.mode&61440))throw new K(22);if(a=Pb(c,\"w\"))throw new K(a);c.ab.hb(c,{size:b,timestamp:Date.now()})}\nfunction p(a,b,c,d){if(\"\"===a)throw new K(2);if(\"string\"===typeof b){var e=Rb[b];if(\"undefined\"===typeof e)throw Error(\"Unknown file open mode: \"+b);b=e}c=b&64?(\"undefined\"===typeof c?438:c)&4095|32768:0;if(\"object\"===typeof a)var g=a;else{a=rb(a);try{g=T(a,{qb:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new K(17);}else g=ja(a,c,0),e=!0;if(!g)throw new K(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!N(g.mode))throw new K(20);if(!e&&(c=g?40960===(g.mode&61440)?40:N(g.mode)&&\n(\"r\"!==ic(b)||b&512)?21:Pb(g,ic(b)):2))throw new K(c);b&512&&Dc(g,0);b&=-641;d=wc({node:g,path:Lb(g),flags:b,seekable:!0,position:0,cb:g.cb,Bc:[],error:!1},d);d.cb.open&&d.cb.open(d);!f.logReadFiles||b&1||(Ec||(Ec={}),a in Ec||(Ec[a]=1,console.log(\"FS.trackingDelegate error on read file: \"+a)));try{S.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),S.onOpenFile(a,g))}catch(k){console.log(\"FS.trackingDelegate['onOpenFile']('\"+a+\"', flags) threw an exception: \"+k.message)}return d}\nfunction ma(a){if(null===a.fd)throw new K(9);a.Gb&&(a.Gb=null);try{a.cb.close&&a.cb.close(a)}catch(b){throw b;}finally{Q[a.fd]=null}a.fd=null}function Fc(a,b,c){if(null===a.fd)throw new K(9);if(!a.seekable||!a.cb.ob)throw new K(29);if(0!=c&&1!=c&&2!=c)throw new K(22);a.position=a.cb.ob(a,b,c);a.Bc=[]}\nfunction sa(a,b,c,d,e){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(1===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.read)throw new K(22);var g=\"undefined\"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.read(a,b,c,d,e);g||(a.position+=b);return b}\nfunction la(a,b,c,d,e,g){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(0===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.write)throw new K(22);a.flags&1024&&Fc(a,0,2);var k=\"undefined\"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&S.onWriteToFile)S.onWriteToFile(a.path)}catch(m){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+a.path+\"') threw an exception: \"+m.message)}return b}\nfunction Gc(){K||(K=function(a,b){this.node=b;this.zc=function(a){this.eb=a};this.zc(a);this.message=\"FS error\";this.stack&&Object.defineProperty(this,\"stack\",{value:Error().stack,writable:!0})},K.prototype=Error(),K.prototype.constructor=K,[2].forEach(function(a){Eb[a]=new K(a);Eb[a].stack=\"<generic error, no stack>\"}))}var Hc;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c}\nfunction Ic(a,b,c){a=n(\"/dev\",a);var d=ia(!!b,!!c);Jc||(Jc=64);var e=Jc++<<8|0;yb(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k<e;k++){try{var m=b()}catch(Ia){throw new K(5);}if(void 0===m&&0===g)throw new K(11);if(null===m||void 0===m)break;g++;c[d+k]=m}g&&(a.node.timestamp=Date.now());return g},write:function(a,b,d,e){for(var g=0;g<e;g++)try{c(b[d+g])}catch(fa){throw new K(5);}e&&(a.node.timestamp=Date.now());return g}});\nzc(a,d,e)}\nvar Jc,V={},Qb,xc,Ec,L={dc:1,bc:2,Ae:3,sd:4,Lb:5,Ob:6,Ic:7,Td:8,Kb:9,Xc:10,ac:11,Ke:11,Mb:12,$b:13,ld:14,ee:15,Vc:16,kd:17,Le:18,Cb:19,cc:20,ud:21,ib:22,Od:23,Gd:24,je:25,He:26,md:27,ae:28,ze:29,ve:30,Hd:31,pe:32,gd:33,ec:34,Xd:42,pd:43,Yc:44,wd:45,xd:46,yd:47,Ed:48,Ie:49,Rd:50,vd:51,cd:35,Ud:37,Oc:52,Rc:53,Me:54,Pd:55,Sc:56,Tc:57,dd:35,Uc:59,ce:60,Sd:61,Ee:62,be:63,Yd:64,Zd:65,ue:66,Vd:67,Lc:68,Be:69,Zc:70,qe:71,Jd:72,hd:73,Qc:74,ke:76,Pc:77,te:78,zd:79,Ad:80,Dd:81,Cd:82,Bd:83,de:38,Nb:39,Kd:36,\nFd:40,le:95,oe:96,bd:104,Qd:105,Mc:97,se:91,he:88,$d:92,xe:108,ad:111,Jc:98,$c:103,Nd:101,Ld:100,Fe:110,nd:112,od:113,rd:115,Nc:114,ed:89,Id:90,re:93,ye:94,Kc:99,Md:102,td:106,fe:107,Ge:109,Je:87,jd:122,Ce:116,ie:95,Wd:123,qd:84,me:75,Wc:125,ge:131,ne:130,De:86},Kc={};\nfunction Lc(a,b,c){try{var d=a(b)}catch(e){if(e&&e.node&&rb(b)!==rb(Lb(e.node)))return-L.cc;throw e;}D[c>>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var W=0;\nfunction X(){W+=4;return D[W-4>>2]}function Y(){return G(X())}function Z(){var a=Q[X()];if(!a)throw new K(L.Kb);return a}function Da(){return l.length}function Ea(a){if(2147418112<a)return!1;for(var b=Math.max(Da(),16777216);b<a;)536870912>=b?b=Wa(2*b):b=Math.min(Wa((3*b+2147483648)/4),2147418112);a=Wa(b);var c=buffer.byteLength;try{var d=-1!==La.grow((a-c)/65536)?buffer=La.buffer:null}catch(e){d=null}if(!d||d.byteLength!=b)return!1;Xa();return!0}\nfunction Mc(a){if(0===a)return 0;a=G(a);if(!J.hasOwnProperty(a))return 0;Mc.rb&&ha(Mc.rb);a=J[a];var b=oa(a)+1,c=Ta(b);c&&r(a,l,c,b);Mc.rb=c;return Mc.rb}r(\"GMT\",F,60272,4);\nfunction Nc(){function a(a){return(a=a.toTimeString().match(/\\(([A-Za-z ]+)\\)$/))?a[1]:\"GMT\"}if(!Oc){Oc=!0;D[Pc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Qc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ea(ba(d));e=ea(ba(e));c.getTimezoneOffset()<b.getTimezoneOffset()?(D[Rc()>>2]=d,D[Rc()+4>>2]=e):(D[Rc()>>2]=e,D[Rc()+4>>2]=d)}}var Oc;\nfunction Sc(a){a/=1E3;if((v||w)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b<a;);else for(b=Date.now();Date.now()-b<a;);return 0}f._usleep=Sc;Gc();R=Array(4096);yc(M,\"/\");U(\"/tmp\");U(\"/home\");U(\"/home/web_user\");\n(function(){U(\"/dev\");yb(259,{read:function(){return 0},write:function(a,b,c,k){return k}});zc(\"/dev/null\",259);xb(1280,Ab);xb(1536,Bb);zc(\"/dev/tty\",1280);zc(\"/dev/tty1\",1536);if(\"object\"===typeof crypto&&\"function\"===typeof crypto.getRandomValues){var a=new Uint8Array(1);var b=function(){crypto.getRandomValues(a);return a[0]}}else if(x)try{var c=require(\"crypto\");b=function(){return c.randomBytes(1)[0]}}catch(d){}b||(b=function(){B(\"random_device\")});Ic(\"random\",b);Ic(\"urandom\",b);U(\"/dev/shm\");\nU(\"/dev/shm/tmp\")})();U(\"/proc\");U(\"/proc/self\");U(\"/proc/self/fd\");yc({jb:function(){var a=Db(\"/proc/self\",\"fd\",16895,73);a.ab={lookup:function(a,c){var b=Q[+c];if(!b)throw new K(9);a={parent:null,jb:{Yb:\"fake\"},ab:{readlink:function(){return b.path}}};return a.parent=a}};return a}},\"/proc/self/fd\");if(x){var fs=require(\"fs\"),Fb=require(\"path\");P.Ac()}function ba(a,b){var c=Array(oa(a)+1);a=r(a,c,0,c.length);b&&(c.length=a);return c}\nvar Vc=f.asm({},{n:B,l:function(a){return E[a]()},i:function(a,b){return E[a](b)},h:function(a,b,c){return E[a](b,c)},g:function(a,b,c,d){return E[a](b,c,d)},f:function(a,b,c,d,e){return E[a](b,c,d,e)},e:function(a,b,c,d,e,g){return E[a](b,c,d,e,g)},d:function(a,b,c,d,e,g,k){return E[a](b,c,d,e,g,k)},B:function(a,b,c,d,e){return E[a](b,c,d,e)},A:function(a,b,c){return E[a](b,c)},z:function(a,b,c,d){return E[a](b,c,d)},y:function(a,b,c,d,e){return E[a](b,c,d,e)},c:function(a,b){E[a](b)},b:function(a,\nb,c){E[a](b,c)},k:function(a,b,c,d){E[a](b,c,d)},j:function(a,b,c,d,e){E[a](b,c,d,e)},x:function(a,b,c,d,e,g){E[a](b,c,d,e,g)},w:function(a,b,c,d){E[a](b,c,d)},v:function(a,b,c,d){E[a](b,c,d)},m:function(a,b,c,d){B(\"Assertion failed: \"+G(a)+\", at: \"+[b?G(b):\"unknown filename\",c,d?G(d):\"unknown function\"])},ga:ob,u:pb,fa:function(a,b){W=b;try{var c=Y();ta(c);return 0}catch(d){return\"undefined\"!==typeof V&&d instanceof K||B(d),-d.eb}},ea:function(a,b){W=b;try{return Z(),0}catch(c){return\"undefined\"!==\ntypeof V&&c instanceof K||B(c),-c.eb}},da:function(a,b){W=b;try{var c=Z();X();var d=X(),e=X(),g=X();Fc(c,d,g);D[e>>2]=c.position;c.Gb&&0===d&&0===g&&(c.Gb=null);return 0}catch(k){return\"undefined\"!==typeof V&&k instanceof K||B(k),-k.eb}},ca:function(a,b){W=b;try{var c=Y(),d=X();ka(c,d);return 0}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},ba:function(a,b){W=b;try{var c=X(),d=X();if(0===d)return-L.ib;if(d<oa(\"/\")+1)return-L.ec;r(\"/\",F,c,d);return c}catch(e){return\"undefined\"!==\ntypeof V&&e instanceof K||B(e),-e.eb}},aa:function(a,b){W=b;try{var c=X(),d=X(),e=X(),g=X(),k=X(),m=X();m<<=12;a=!1;if(-1===k){var y=Tc(16384,d);if(!y)return-L.Mb;Uc(y,0,d);a=!0}else{var z=Q[k];if(!z)return-L.Kb;b=F;if(1===(z.flags&2097155))throw new K(13);if(!z.cb.zb)throw new K(19);var fa=z.cb.zb(z,b,c,d,m,e,g);y=fa.xc;a=fa.Db}Kc[y]={vc:y,uc:d,Db:a,fd:k,flags:g};return y}catch(ca){return\"undefined\"!==typeof V&&ca instanceof K||B(ca),-ca.eb}},$:function(a,b){W=b;try{var c=X();X();var d=X();X();var e=\nQ[c];if(!e)throw new K(9);if(0===(e.flags&2097155))throw new K(22);Dc(e.node,d);return 0}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},t:function(a,b){W=b;try{var c=Y(),d=X();return Lc(ra,c,d)}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},_:function(a,b){W=b;try{var c=Y(),d=X();return Lc(Bc,c,d)}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},Z:function(a,b){W=b;try{var c=Z(),d=X();return Lc(ra,c.path,d)}catch(e){return\"undefined\"!==\ntypeof V&&e instanceof K||B(e),-e.eb}},Y:function(a,b){W=b;return 42},X:function(a,b){W=b;return 0},W:function(a,b){W=b;try{var c=X();X();X();var d=Q[c];if(!d)throw new K(9);Cc(d.node);return 0}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},V:function(a,b){W=b;try{var c=Y();X();X();Cc(c);return 0}catch(d){return\"undefined\"!==typeof V&&d instanceof K||B(d),-d.eb}},o:function(a,b){W=b;try{var c=Z();switch(X()){case 0:var d=X();return 0>d?-L.ib:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0;\ncase 3:return c.flags;case 4:return d=X(),c.flags|=d,0;case 12:return d=X(),Ha[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-L.ib;case 9:return pb(L.ib),-1;default:return-L.ib}}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},U:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return sa(c,l,d,e)}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},T:function(a,b){W=b;try{var c=Y();var d=X();if(d&-8)var e=-L.ib;else{var g=T(c,{qb:!0}).node;a=\"\";d&4&&(a+=\"r\");\nd&2&&(a+=\"w\");d&1&&(a+=\"x\");e=a&&Pb(g,a)?-L.$b:0}return e}catch(k){return\"undefined\"!==typeof V&&k instanceof K||B(k),-k.eb}},S:function(a,b){W=b;try{var c=Y(),d=X();a=c;a=rb(a);\"/\"===a[a.length-1]&&(a=a.substr(0,a.length-1));U(a,d);return 0}catch(e){return\"undefined\"!==typeof V&&e instanceof K||B(e),-e.eb}},R:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return la(c,l,d,e)}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},Q:function(a,b){W=b;try{var c=Y(),d=T(c,{parent:!0}).node,\ne=tb(c),g=O(d,e),k=uc(d,e,!0);if(k)throw new K(k);if(!d.ab.rmdir)throw new K(1);if(g.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(c)}catch(m){console.log(\"FS.trackingDelegate['willDeletePath']('\"+c+\"') threw an exception: \"+m.message)}d.ab.rmdir(d,e);Ob(g);try{if(S.onDeletePath)S.onDeletePath(c)}catch(m){console.log(\"FS.trackingDelegate['onDeletePath']('\"+c+\"') threw an exception: \"+m.message)}return 0}catch(m){return\"undefined\"!==typeof V&&m instanceof K||B(m),-m.eb}},P:function(a,b){W=\nb;try{var c=Y(),d=X(),e=X();return p(c,d,e).fd}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},s:function(a,b){W=b;try{var c=Z();ma(c);return 0}catch(d){return\"undefined\"!==typeof V&&d instanceof K||B(d),-d.eb}},O:function(a,b){W=b;try{var c=Y(),d=X();var e=X();if(0>=e)var g=-L.ib;else{var k=Kb(c),m=Math.min(e,oa(k)),y=l[d+m];r(k,F,d,e+1);l[d+m]=y;g=m}return g}catch(z){return\"undefined\"!==typeof V&&z instanceof K||B(z),-z.eb}},N:function(a,b){W=b;try{var c=X(),d=X(),e=Kc[c];if(!e)return 0;\nif(d===e.uc){var g=Q[e.fd],k=e.flags,m=new Uint8Array(F.subarray(c,c+d));g&&g.cb.Ab&&g.cb.Ab(g,m,0,d,k);Kc[c]=null;e.Db&&ha(e.vc)}return 0}catch(y){return\"undefined\"!==typeof V&&y instanceof K||B(y),-y.eb}},M:function(a,b){W=b;try{var c=X(),d=X(),e=Q[c];if(!e)throw new K(9);ka(e.node,d);return 0}catch(g){return\"undefined\"!==typeof V&&g instanceof K||B(g),-g.eb}},L:Da,K:function(a,b,c){F.set(F.subarray(b,b+c),a)},J:Ea,r:Mc,q:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0},\nI:function(a){return Math.log(a)/Math.LN10},p:function(){B(\"trap!\")},H:function(a){Nc();a=new Date(1E3*D[a>>2]);D[15056]=a.getSeconds();D[15057]=a.getMinutes();D[15058]=a.getHours();D[15059]=a.getDate();D[15060]=a.getMonth();D[15061]=a.getFullYear()-1900;D[15062]=a.getDay();var b=new Date(a.getFullYear(),0,1);D[15063]=(a.getTime()-b.getTime())/864E5|0;D[15065]=-(60*a.getTimezoneOffset());var c=(new Date(2E3,6,1)).getTimezoneOffset();b=b.getTimezoneOffset();a=(c!=b&&a.getTimezoneOffset()==Math.min(b,\nc))|0;D[15064]=a;a=D[Rc()+(a?4:0)>>2];D[15066]=a;return 60224},G:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Sc(1E6*c+a/1E3)},F:function(a){switch(a){case 30:return 16384;case 85:return 131068;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;\ncase 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;\ncase 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return\"object\"===typeof navigator?navigator.hardwareConcurrency||1:1}pb(22);return-1},\nE:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},D:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=G(a);try{b=c;var d=T(a,{qb:!0}).node;d.ab.hb(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof K)){a+=\" : \";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d=\"(no stack trace available)\";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+=\"\\n\"+f.extraStackTrace());d=Va(d);throw a+d;}pb(a.eb);return-1}},C:function(){B(\"OOM\")},\na:Ca},buffer);f.asm=Vc;f._RegisterExtensionFunctions=function(){return f.asm.ha.apply(null,arguments)};var nb=f.___emscripten_environ_constructor=function(){return f.asm.ia.apply(null,arguments)};f.___errno_location=function(){return f.asm.ja.apply(null,arguments)};\nvar Qc=f.__get_daylight=function(){return f.asm.ka.apply(null,arguments)},Pc=f.__get_timezone=function(){return f.asm.la.apply(null,arguments)},Rc=f.__get_tzname=function(){return f.asm.ma.apply(null,arguments)},ha=f._free=function(){return f.asm.na.apply(null,arguments)},Ta=f._malloc=function(){return f.asm.oa.apply(null,arguments)},Tc=f._memalign=function(){return f.asm.pa.apply(null,arguments)},Uc=f._memset=function(){return f.asm.qa.apply(null,arguments)};\nf._sqlite3_bind_blob=function(){return f.asm.ra.apply(null,arguments)};f._sqlite3_bind_double=function(){return f.asm.sa.apply(null,arguments)};f._sqlite3_bind_int=function(){return f.asm.ta.apply(null,arguments)};f._sqlite3_bind_parameter_index=function(){return f.asm.ua.apply(null,arguments)};f._sqlite3_bind_text=function(){return f.asm.va.apply(null,arguments)};f._sqlite3_changes=function(){return f.asm.wa.apply(null,arguments)};f._sqlite3_clear_bindings=function(){return f.asm.xa.apply(null,arguments)};\nf._sqlite3_close_v2=function(){return f.asm.ya.apply(null,arguments)};f._sqlite3_column_blob=function(){return f.asm.za.apply(null,arguments)};f._sqlite3_column_bytes=function(){return f.asm.Aa.apply(null,arguments)};f._sqlite3_column_double=function(){return f.asm.Ba.apply(null,arguments)};f._sqlite3_column_name=function(){return f.asm.Ca.apply(null,arguments)};f._sqlite3_column_text=function(){return f.asm.Da.apply(null,arguments)};f._sqlite3_column_type=function(){return f.asm.Ea.apply(null,arguments)};\nf._sqlite3_create_function_v2=function(){return f.asm.Fa.apply(null,arguments)};f._sqlite3_data_count=function(){return f.asm.Ga.apply(null,arguments)};f._sqlite3_errmsg=function(){return f.asm.Ha.apply(null,arguments)};f._sqlite3_exec=function(){return f.asm.Ia.apply(null,arguments)};f._sqlite3_finalize=function(){return f.asm.Ja.apply(null,arguments)};f._sqlite3_free=function(){return f.asm.Ka.apply(null,arguments)};f._sqlite3_open=function(){return f.asm.La.apply(null,arguments)};\nf._sqlite3_prepare_v2=function(){return f.asm.Ma.apply(null,arguments)};f._sqlite3_reset=function(){return f.asm.Na.apply(null,arguments)};f._sqlite3_result_double=function(){return f.asm.Oa.apply(null,arguments)};f._sqlite3_result_null=function(){return f.asm.Pa.apply(null,arguments)};f._sqlite3_result_text=function(){return f.asm.Qa.apply(null,arguments)};f._sqlite3_step=function(){return f.asm.Ra.apply(null,arguments)};f._sqlite3_value_blob=function(){return f.asm.Sa.apply(null,arguments)};\nf._sqlite3_value_bytes=function(){return f.asm.Ta.apply(null,arguments)};f._sqlite3_value_double=function(){return f.asm.Ua.apply(null,arguments)};f._sqlite3_value_int=function(){return f.asm.Va.apply(null,arguments)};f._sqlite3_value_text=function(){return f.asm.Wa.apply(null,arguments)};f._sqlite3_value_type=function(){return f.asm.Xa.apply(null,arguments)};\nvar h=f.stackAlloc=function(){return f.asm.Za.apply(null,arguments)},qa=f.stackRestore=function(){return f.asm._a.apply(null,arguments)},na=f.stackSave=function(){return f.asm.$a.apply(null,arguments)};f.dynCall_vi=function(){return f.asm.Ya.apply(null,arguments)};f.asm=Vc;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return\"number\"===a});return\"string\"!==b&&e&&!d?Na(a):function(){return Oa(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h;\nfunction Wc(a){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+a+\")\";this.status=a}Wc.prototype=Error();Wc.prototype.constructor=Wc;gb=function Xc(){f.calledRun||Yc();f.calledRun||(gb=Xc)};\nfunction Yc(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Ma)){db||(db=!0,f.noFSInit||Hc||(Hc=!0,Gc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Ic(\"stdin\",f.stdin):Ac(\"/dev/tty\",\"/dev/stdin\"),f.stdout?Ic(\"stdout\",null,f.stdout):Ac(\"/dev/tty\",\"/dev/stdout\"),f.stderr?Ic(\"stderr\",null,f.stderr):Ac(\"/dev/tty1\",\"/dev/stderr\"),p(\"/dev/stdin\",\"r\"),p(\"/dev/stdout\",\"w\"),p(\"/dev/stderr\",\"w\")),Za(ab));Jb=!1;Za(bb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for(\"function\"==\ntypeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();cb.unshift(a)}Za(cb)}}if(!(0<H)){if(f.preRun)for(\"function\"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)eb();Za($a);0<H||f.calledRun||(f.setStatus?(f.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){f.setStatus(\"\")},1);a()},1)):a())}}f.run=Yc;\nfunction B(a){if(f.onAbort)f.onAbort(a);void 0!==a?(Aa(a),C(a),a=JSON.stringify(a)):a=\"\";Ma=!0;throw\"abort(\"+a+\"). Build with -s ASSERTIONS=1 for more info.\";}f.abort=B;if(f.preInit)for(\"function\"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.pop()();f.noExitRuntime=!0;Yc();\n\n\n        // The shell-pre.js and emcc-generated code goes above\n        return Module;\n    }); // The end of the promise being returned\n\n  return initSqlJsPromise;\n} // The end of our initSqlJs function\n\n// This bit below is copied almost exactly from what you get when you use the MODULARIZE=1 flag with emcc\n// However, we don't want to use the emcc modularization. See shell-pre.js\nif (typeof exports === 'object' && typeof module === 'object'){\n    module.exports = initSqlJs;\n    // This will allow the module to be used in ES6 or CommonJS\n    module.exports.default = initSqlJs;\n}\nelse if (typeof define === 'function' && define['amd']) {\n    define([], function() { return initSqlJs; });\n}\nelse if (typeof exports === 'object'){\n    exports[\"Module\"] = initSqlJs;\n}\n    \n"
  },
  {
    "path": "libs/three.js/LICENSE",
    "content": "The MIT License\n\nCopyright © 2010-2019 three.js authors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "libs/three.js/README.md",
    "content": "three.js\n========\n\n[![NPM package][npm]][npm-url]\n[![Build Size][build-size]][build-size-url]\n[![Build Status][build-status]][build-status-url]\n[![Dependencies][dependencies]][dependencies-url]\n[![Dev Dependencies][dev-dependencies]][dev-dependencies-url]\n[![Language Grade][lgtm]][lgtm-url]\n\n#### JavaScript 3D library ####\n\nThe aim of the project is to create an easy to use, lightweight, 3D library with a default WebGL renderer. The library also provides Canvas 2D, SVG and CSS3D renderers in the examples.\n\n[Examples](http://threejs.org/examples/) &mdash;\n[Documentation](http://threejs.org/docs/) &mdash;\n[Wiki](https://github.com/mrdoob/three.js/wiki) &mdash;\n[Migrating](https://github.com/mrdoob/three.js/wiki/Migration-Guide) &mdash;\n[Questions](http://stackoverflow.com/questions/tagged/three.js) &mdash;\n[Forum](https://discourse.threejs.org/) &mdash;\n[Gitter](https://gitter.im/mrdoob/three.js) &mdash;\n[Slack](https://join.slack.com/t/threejs/shared_invite/enQtMzYxMzczODM2OTgxLTQ1YmY4YTQxOTFjNDAzYmQ4NjU2YzRhNzliY2RiNDEyYjU2MjhhODgyYWQ5Y2MyZTU3MWNkOGVmOGRhOTQzYTk)\n\n### Usage ###\n\nDownload the [minified library](http://threejs.org/build/three.min.js) and include it in your HTML, or install and import it as a [module](http://threejs.org/docs/#manual/introduction/Import-via-modules),\nAlternatively, see [how to build the library yourself](https://github.com/mrdoob/three.js/wiki/Build-instructions).\n\n```html\n<script src=\"js/three.min.js\"></script>\n```\n\nThis code creates a scene, a camera, and a geometric cube, and it adds the cube to the scene. It then creates a `WebGL` renderer for the scene and camera, and it adds that viewport to the `document.body` element. Finally, it animates the cube within the scene for the camera.\n\n```javascript\nvar camera, scene, renderer;\nvar geometry, material, mesh;\n\ninit();\nanimate();\n\nfunction init() {\n\n\tcamera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.01, 10 );\n\tcamera.position.z = 1;\n\n\tscene = new THREE.Scene();\n\n\tgeometry = new THREE.BoxGeometry( 0.2, 0.2, 0.2 );\n\tmaterial = new THREE.MeshNormalMaterial();\n\n\tmesh = new THREE.Mesh( geometry, material );\n\tscene.add( mesh );\n\n\trenderer = new THREE.WebGLRenderer( { antialias: true } );\n\trenderer.setSize( window.innerWidth, window.innerHeight );\n\tdocument.body.appendChild( renderer.domElement );\n\n}\n\nfunction animate() {\n\n\trequestAnimationFrame( animate );\n\n\tmesh.rotation.x += 0.01;\n\tmesh.rotation.y += 0.02;\n\n\trenderer.render( scene, camera );\n\n}\n```\n\nIf everything went well you should see [this](https://jsfiddle.net/f2Lommf5/).\n\n### Change log ###\n\n[Releases](https://github.com/mrdoob/three.js/releases)\n\n\n[npm]: https://img.shields.io/npm/v/three.svg\n[npm-url]: https://www.npmjs.com/package/three\n[build-size]: https://badgen.net/bundlephobia/minzip/three\n[build-size-url]: https://bundlephobia.com/result?p=three\n[build-status]: https://travis-ci.org/mrdoob/three.js.svg?branch=dev\n[build-status-url]: https://travis-ci.org/mrdoob/three.js\n[dependencies]: https://img.shields.io/david/mrdoob/three.js.svg\n[dependencies-url]: https://david-dm.org/mrdoob/three.js\n[dev-dependencies]: https://img.shields.io/david/dev/mrdoob/three.js.svg\n[dev-dependencies-url]: https://david-dm.org/mrdoob/three.js#info=devDependencies\n[lgtm]: https://img.shields.io/lgtm/grade/javascript/g/mrdoob/three.js.svg?label=code%20quality\n[lgtm-url]: https://lgtm.com/projects/g/mrdoob/three.js/\n"
  },
  {
    "path": "libs/three.js/build/three.js",
    "content": "// threejs.org/license\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.THREE = {}));\n}(this, (function (exports) { 'use strict';\n\n\t// Polyfills\n\tif (Number.EPSILON === undefined) {\n\t\tNumber.EPSILON = Math.pow(2, -52);\n\t}\n\n\tif (Number.isInteger === undefined) {\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\t\tNumber.isInteger = function (value) {\n\t\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n\t\t};\n\t} //\n\n\n\tif (Math.sign === undefined) {\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\t\tMath.sign = function (x) {\n\t\t\treturn x < 0 ? -1 : x > 0 ? 1 : +x;\n\t\t};\n\t}\n\n\tif ('name' in Function.prototype === false) {\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\t\tObject.defineProperty(Function.prototype, 'name', {\n\t\t\tget: function get() {\n\t\t\t\treturn this.toString().match(/^\\s*function\\s*([^\\(\\s]*)/)[1];\n\t\t\t}\n\t\t});\n\t}\n\n\tif (Object.assign === undefined) {\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\t\tObject.assign = function (target) {\n\n\t\t\tif (target === undefined || target === null) {\n\t\t\t\tthrow new TypeError('Cannot convert undefined or null to object');\n\t\t\t}\n\n\t\t\tvar output = Object(target);\n\n\t\t\tfor (var index = 1; index < arguments.length; index++) {\n\t\t\t\tvar source = arguments[index];\n\n\t\t\t\tif (source !== undefined && source !== null) {\n\t\t\t\t\tfor (var nextKey in source) {\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(source, nextKey)) {\n\t\t\t\t\t\t\toutput[nextKey] = source[nextKey];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn output;\n\t\t};\n\t}\n\n\tvar REVISION = '124';\n\tvar MOUSE = {\n\t\tLEFT: 0,\n\t\tMIDDLE: 1,\n\t\tRIGHT: 2,\n\t\tROTATE: 0,\n\t\tDOLLY: 1,\n\t\tPAN: 2\n\t};\n\tvar TOUCH = {\n\t\tROTATE: 0,\n\t\tPAN: 1,\n\t\tDOLLY_PAN: 2,\n\t\tDOLLY_ROTATE: 3\n\t};\n\tvar CullFaceNone = 0;\n\tvar CullFaceBack = 1;\n\tvar CullFaceFront = 2;\n\tvar CullFaceFrontBack = 3;\n\tvar BasicShadowMap = 0;\n\tvar PCFShadowMap = 1;\n\tvar PCFSoftShadowMap = 2;\n\tvar VSMShadowMap = 3;\n\tvar FrontSide = 0;\n\tvar BackSide = 1;\n\tvar DoubleSide = 2;\n\tvar FlatShading = 1;\n\tvar SmoothShading = 2;\n\tvar NoBlending = 0;\n\tvar NormalBlending = 1;\n\tvar AdditiveBlending = 2;\n\tvar SubtractiveBlending = 3;\n\tvar MultiplyBlending = 4;\n\tvar CustomBlending = 5;\n\tvar AddEquation = 100;\n\tvar SubtractEquation = 101;\n\tvar ReverseSubtractEquation = 102;\n\tvar MinEquation = 103;\n\tvar MaxEquation = 104;\n\tvar ZeroFactor = 200;\n\tvar OneFactor = 201;\n\tvar SrcColorFactor = 202;\n\tvar OneMinusSrcColorFactor = 203;\n\tvar SrcAlphaFactor = 204;\n\tvar OneMinusSrcAlphaFactor = 205;\n\tvar DstAlphaFactor = 206;\n\tvar OneMinusDstAlphaFactor = 207;\n\tvar DstColorFactor = 208;\n\tvar OneMinusDstColorFactor = 209;\n\tvar SrcAlphaSaturateFactor = 210;\n\tvar NeverDepth = 0;\n\tvar AlwaysDepth = 1;\n\tvar LessDepth = 2;\n\tvar LessEqualDepth = 3;\n\tvar EqualDepth = 4;\n\tvar GreaterEqualDepth = 5;\n\tvar GreaterDepth = 6;\n\tvar NotEqualDepth = 7;\n\tvar MultiplyOperation = 0;\n\tvar MixOperation = 1;\n\tvar AddOperation = 2;\n\tvar NoToneMapping = 0;\n\tvar LinearToneMapping = 1;\n\tvar ReinhardToneMapping = 2;\n\tvar CineonToneMapping = 3;\n\tvar ACESFilmicToneMapping = 4;\n\tvar CustomToneMapping = 5;\n\tvar UVMapping = 300;\n\tvar CubeReflectionMapping = 301;\n\tvar CubeRefractionMapping = 302;\n\tvar EquirectangularReflectionMapping = 303;\n\tvar EquirectangularRefractionMapping = 304;\n\tvar CubeUVReflectionMapping = 306;\n\tvar CubeUVRefractionMapping = 307;\n\tvar RepeatWrapping = 1000;\n\tvar ClampToEdgeWrapping = 1001;\n\tvar MirroredRepeatWrapping = 1002;\n\tvar NearestFilter = 1003;\n\tvar NearestMipmapNearestFilter = 1004;\n\tvar NearestMipMapNearestFilter = 1004;\n\tvar NearestMipmapLinearFilter = 1005;\n\tvar NearestMipMapLinearFilter = 1005;\n\tvar LinearFilter = 1006;\n\tvar LinearMipmapNearestFilter = 1007;\n\tvar LinearMipMapNearestFilter = 1007;\n\tvar LinearMipmapLinearFilter = 1008;\n\tvar LinearMipMapLinearFilter = 1008;\n\tvar UnsignedByteType = 1009;\n\tvar ByteType = 1010;\n\tvar ShortType = 1011;\n\tvar UnsignedShortType = 1012;\n\tvar IntType = 1013;\n\tvar UnsignedIntType = 1014;\n\tvar FloatType = 1015;\n\tvar HalfFloatType = 1016;\n\tvar UnsignedShort4444Type = 1017;\n\tvar UnsignedShort5551Type = 1018;\n\tvar UnsignedShort565Type = 1019;\n\tvar UnsignedInt248Type = 1020;\n\tvar AlphaFormat = 1021;\n\tvar RGBFormat = 1022;\n\tvar RGBAFormat = 1023;\n\tvar LuminanceFormat = 1024;\n\tvar LuminanceAlphaFormat = 1025;\n\tvar RGBEFormat = RGBAFormat;\n\tvar DepthFormat = 1026;\n\tvar DepthStencilFormat = 1027;\n\tvar RedFormat = 1028;\n\tvar RedIntegerFormat = 1029;\n\tvar RGFormat = 1030;\n\tvar RGIntegerFormat = 1031;\n\tvar RGBIntegerFormat = 1032;\n\tvar RGBAIntegerFormat = 1033;\n\tvar RGB_S3TC_DXT1_Format = 33776;\n\tvar RGBA_S3TC_DXT1_Format = 33777;\n\tvar RGBA_S3TC_DXT3_Format = 33778;\n\tvar RGBA_S3TC_DXT5_Format = 33779;\n\tvar RGB_PVRTC_4BPPV1_Format = 35840;\n\tvar RGB_PVRTC_2BPPV1_Format = 35841;\n\tvar RGBA_PVRTC_4BPPV1_Format = 35842;\n\tvar RGBA_PVRTC_2BPPV1_Format = 35843;\n\tvar RGB_ETC1_Format = 36196;\n\tvar RGB_ETC2_Format = 37492;\n\tvar RGBA_ETC2_EAC_Format = 37496;\n\tvar RGBA_ASTC_4x4_Format = 37808;\n\tvar RGBA_ASTC_5x4_Format = 37809;\n\tvar RGBA_ASTC_5x5_Format = 37810;\n\tvar RGBA_ASTC_6x5_Format = 37811;\n\tvar RGBA_ASTC_6x6_Format = 37812;\n\tvar RGBA_ASTC_8x5_Format = 37813;\n\tvar RGBA_ASTC_8x6_Format = 37814;\n\tvar RGBA_ASTC_8x8_Format = 37815;\n\tvar RGBA_ASTC_10x5_Format = 37816;\n\tvar RGBA_ASTC_10x6_Format = 37817;\n\tvar RGBA_ASTC_10x8_Format = 37818;\n\tvar RGBA_ASTC_10x10_Format = 37819;\n\tvar RGBA_ASTC_12x10_Format = 37820;\n\tvar RGBA_ASTC_12x12_Format = 37821;\n\tvar RGBA_BPTC_Format = 36492;\n\tvar SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\n\tvar SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\n\tvar SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\n\tvar SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\n\tvar SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\n\tvar SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\n\tvar SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\n\tvar SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\n\tvar SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\n\tvar SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\n\tvar SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\n\tvar SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\n\tvar SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\n\tvar SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\n\tvar LoopOnce = 2200;\n\tvar LoopRepeat = 2201;\n\tvar LoopPingPong = 2202;\n\tvar InterpolateDiscrete = 2300;\n\tvar InterpolateLinear = 2301;\n\tvar InterpolateSmooth = 2302;\n\tvar ZeroCurvatureEnding = 2400;\n\tvar ZeroSlopeEnding = 2401;\n\tvar WrapAroundEnding = 2402;\n\tvar NormalAnimationBlendMode = 2500;\n\tvar AdditiveAnimationBlendMode = 2501;\n\tvar TrianglesDrawMode = 0;\n\tvar TriangleStripDrawMode = 1;\n\tvar TriangleFanDrawMode = 2;\n\tvar LinearEncoding = 3000;\n\tvar sRGBEncoding = 3001;\n\tvar GammaEncoding = 3007;\n\tvar RGBEEncoding = 3002;\n\tvar LogLuvEncoding = 3003;\n\tvar RGBM7Encoding = 3004;\n\tvar RGBM16Encoding = 3005;\n\tvar RGBDEncoding = 3006;\n\tvar BasicDepthPacking = 3200;\n\tvar RGBADepthPacking = 3201;\n\tvar TangentSpaceNormalMap = 0;\n\tvar ObjectSpaceNormalMap = 1;\n\tvar ZeroStencilOp = 0;\n\tvar KeepStencilOp = 7680;\n\tvar ReplaceStencilOp = 7681;\n\tvar IncrementStencilOp = 7682;\n\tvar DecrementStencilOp = 7683;\n\tvar IncrementWrapStencilOp = 34055;\n\tvar DecrementWrapStencilOp = 34056;\n\tvar InvertStencilOp = 5386;\n\tvar NeverStencilFunc = 512;\n\tvar LessStencilFunc = 513;\n\tvar EqualStencilFunc = 514;\n\tvar LessEqualStencilFunc = 515;\n\tvar GreaterStencilFunc = 516;\n\tvar NotEqualStencilFunc = 517;\n\tvar GreaterEqualStencilFunc = 518;\n\tvar AlwaysStencilFunc = 519;\n\tvar StaticDrawUsage = 35044;\n\tvar DynamicDrawUsage = 35048;\n\tvar StreamDrawUsage = 35040;\n\tvar StaticReadUsage = 35045;\n\tvar DynamicReadUsage = 35049;\n\tvar StreamReadUsage = 35041;\n\tvar StaticCopyUsage = 35046;\n\tvar DynamicCopyUsage = 35050;\n\tvar StreamCopyUsage = 35042;\n\tvar GLSL1 = '100';\n\tvar GLSL3 = '300 es';\n\n\t/**\n\t * https://github.com/mrdoob/eventdispatcher.js/\n\t */\n\tfunction EventDispatcher() {}\n\n\tObject.assign(EventDispatcher.prototype, {\n\t\taddEventListener: function addEventListener(type, listener) {\n\t\t\tif (this._listeners === undefined) this._listeners = {};\n\t\t\tvar listeners = this._listeners;\n\n\t\t\tif (listeners[type] === undefined) {\n\t\t\t\tlisteners[type] = [];\n\t\t\t}\n\n\t\t\tif (listeners[type].indexOf(listener) === -1) {\n\t\t\t\tlisteners[type].push(listener);\n\t\t\t}\n\t\t},\n\t\thasEventListener: function hasEventListener(type, listener) {\n\t\t\tif (this._listeners === undefined) return false;\n\t\t\tvar listeners = this._listeners;\n\t\t\treturn listeners[type] !== undefined && listeners[type].indexOf(listener) !== -1;\n\t\t},\n\t\tremoveEventListener: function removeEventListener(type, listener) {\n\t\t\tif (this._listeners === undefined) return;\n\t\t\tvar listeners = this._listeners;\n\t\t\tvar listenerArray = listeners[type];\n\n\t\t\tif (listenerArray !== undefined) {\n\t\t\t\tvar index = listenerArray.indexOf(listener);\n\n\t\t\t\tif (index !== -1) {\n\t\t\t\t\tlistenerArray.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdispatchEvent: function dispatchEvent(event) {\n\t\t\tif (this._listeners === undefined) return;\n\t\t\tvar listeners = this._listeners;\n\t\t\tvar listenerArray = listeners[event.type];\n\n\t\t\tif (listenerArray !== undefined) {\n\t\t\t\tevent.target = this; // Make a copy, in case listeners are removed while iterating.\n\n\t\t\t\tvar array = listenerArray.slice(0);\n\n\t\t\t\tfor (var i = 0, l = array.length; i < l; i++) {\n\t\t\t\t\tarray[i].call(this, event);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tvar _lut = [];\n\n\tfor (var i = 0; i < 256; i++) {\n\t\t_lut[i] = (i < 16 ? '0' : '') + i.toString(16);\n\t}\n\n\tvar _seed = 1234567;\n\tvar MathUtils = {\n\t\tDEG2RAD: Math.PI / 180,\n\t\tRAD2DEG: 180 / Math.PI,\n\t\tgenerateUUID: function generateUUID() {\n\t\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\tvar uuid = _lut[d0 & 0xff] + _lut[d0 >> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' + _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' + _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] + _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff]; // .toUpperCase() here flattens concatenated strings to save heap memory space.\n\n\t\t\treturn uuid.toUpperCase();\n\t\t},\n\t\tclamp: function clamp(value, min, max) {\n\t\t\treturn Math.max(min, Math.min(max, value));\n\t\t},\n\t\t// compute euclidian modulo of m % n\n\t\t// https://en.wikipedia.org/wiki/Modulo_operation\n\t\teuclideanModulo: function euclideanModulo(n, m) {\n\t\t\treturn (n % m + m) % m;\n\t\t},\n\t\t// Linear mapping from range <a1, a2> to range <b1, b2>\n\t\tmapLinear: function mapLinear(x, a1, a2, b1, b2) {\n\t\t\treturn b1 + (x - a1) * (b2 - b1) / (a2 - a1);\n\t\t},\n\t\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\t\tlerp: function lerp(x, y, t) {\n\t\t\treturn (1 - t) * x + t * y;\n\t\t},\n\t\t// http://en.wikipedia.org/wiki/Smoothstep\n\t\tsmoothstep: function smoothstep(x, min, max) {\n\t\t\tif (x <= min) return 0;\n\t\t\tif (x >= max) return 1;\n\t\t\tx = (x - min) / (max - min);\n\t\t\treturn x * x * (3 - 2 * x);\n\t\t},\n\t\tsmootherstep: function smootherstep(x, min, max) {\n\t\t\tif (x <= min) return 0;\n\t\t\tif (x >= max) return 1;\n\t\t\tx = (x - min) / (max - min);\n\t\t\treturn x * x * x * (x * (x * 6 - 15) + 10);\n\t\t},\n\t\t// Random integer from <low, high> interval\n\t\trandInt: function randInt(low, high) {\n\t\t\treturn low + Math.floor(Math.random() * (high - low + 1));\n\t\t},\n\t\t// Random float from <low, high> interval\n\t\trandFloat: function randFloat(low, high) {\n\t\t\treturn low + Math.random() * (high - low);\n\t\t},\n\t\t// Random float from <-range/2, range/2> interval\n\t\trandFloatSpread: function randFloatSpread(range) {\n\t\t\treturn range * (0.5 - Math.random());\n\t\t},\n\t\t// Deterministic pseudo-random float in the interval [ 0, 1 ]\n\t\tseededRandom: function seededRandom(s) {\n\t\t\tif (s !== undefined) _seed = s % 2147483647; // Park-Miller algorithm\n\n\t\t\t_seed = _seed * 16807 % 2147483647;\n\t\t\treturn (_seed - 1) / 2147483646;\n\t\t},\n\t\tdegToRad: function degToRad(degrees) {\n\t\t\treturn degrees * MathUtils.DEG2RAD;\n\t\t},\n\t\tradToDeg: function radToDeg(radians) {\n\t\t\treturn radians * MathUtils.RAD2DEG;\n\t\t},\n\t\tisPowerOfTwo: function isPowerOfTwo(value) {\n\t\t\treturn (value & value - 1) === 0 && value !== 0;\n\t\t},\n\t\tceilPowerOfTwo: function ceilPowerOfTwo(value) {\n\t\t\treturn Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));\n\t\t},\n\t\tfloorPowerOfTwo: function floorPowerOfTwo(value) {\n\t\t\treturn Math.pow(2, Math.floor(Math.log(value) / Math.LN2));\n\t\t},\n\t\tsetQuaternionFromProperEuler: function setQuaternionFromProperEuler(q, a, b, c, order) {\n\t\t\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\t\t\t// rotations are applied to the axes in the order specified by 'order'\n\t\t\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t\t\t// angles are in radians\n\t\t\tvar cos = Math.cos;\n\t\t\tvar sin = Math.sin;\n\t\t\tvar c2 = cos(b / 2);\n\t\t\tvar s2 = sin(b / 2);\n\t\t\tvar c13 = cos((a + c) / 2);\n\t\t\tvar s13 = sin((a + c) / 2);\n\t\t\tvar c1_3 = cos((a - c) / 2);\n\t\t\tvar s1_3 = sin((a - c) / 2);\n\t\t\tvar c3_1 = cos((c - a) / 2);\n\t\t\tvar s3_1 = sin((c - a) / 2);\n\n\t\t\tswitch (order) {\n\t\t\t\tcase 'XYX':\n\t\t\t\t\tq.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YZY':\n\t\t\t\t\tq.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZXZ':\n\t\t\t\t\tq.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'XZX':\n\t\t\t\t\tq.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YXY':\n\t\t\t\t\tq.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZYZ':\n\t\t\t\t\tq.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn('THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order);\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction _defineProperties(target, props) {\n\t\tfor (var i = 0; i < props.length; i++) {\n\t\t\tvar descriptor = props[i];\n\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\tdescriptor.configurable = true;\n\t\t\tif (\"value\" in descriptor) descriptor.writable = true;\n\t\t\tObject.defineProperty(target, descriptor.key, descriptor);\n\t\t}\n\t}\n\n\tfunction _createClass(Constructor, protoProps, staticProps) {\n\t\tif (protoProps) _defineProperties(Constructor.prototype, protoProps);\n\t\tif (staticProps) _defineProperties(Constructor, staticProps);\n\t\treturn Constructor;\n\t}\n\n\tfunction _inheritsLoose(subClass, superClass) {\n\t\tsubClass.prototype = Object.create(superClass.prototype);\n\t\tsubClass.prototype.constructor = subClass;\n\t\tsubClass.__proto__ = superClass;\n\t}\n\n\tfunction _assertThisInitialized(self) {\n\t\tif (self === void 0) {\n\t\t\tthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t\t}\n\n\t\treturn self;\n\t}\n\n\tvar Vector2 = /*#__PURE__*/function () {\n\t\tfunction Vector2(x, y) {\n\t\t\tif (x === void 0) {\n\t\t\t\tx = 0;\n\t\t\t}\n\n\t\t\tif (y === void 0) {\n\t\t\t\ty = 0;\n\t\t\t}\n\n\t\t\tObject.defineProperty(this, 'isVector2', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t}\n\n\t\tvar _proto = Vector2.prototype;\n\n\t\t_proto.set = function set(x, y) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setScalar = function setScalar(scalar) {\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setX = function setX(x) {\n\t\t\tthis.x = x;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setY = function setY(y) {\n\t\t\tthis.y = y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setComponent = function setComponent(index, value) {\n\t\t\tswitch (index) {\n\t\t\t\tcase 0:\n\t\t\t\t\tthis.x = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\tthis.y = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('index is out of range: ' + index);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getComponent = function getComponent(index) {\n\t\t\tswitch (index) {\n\t\t\t\tcase 0:\n\t\t\t\t\treturn this.x;\n\n\t\t\t\tcase 1:\n\t\t\t\t\treturn this.y;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('index is out of range: ' + index);\n\t\t\t}\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor(this.x, this.y);\n\t\t};\n\n\t\t_proto.copy = function copy(v) {\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.add = function add(v, w) {\n\t\t\tif (w !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');\n\t\t\t\treturn this.addVectors(v, w);\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addScalar = function addScalar(s) {\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addVectors = function addVectors(a, b) {\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addScaledVector = function addScaledVector(v, s) {\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.sub = function sub(v, w) {\n\t\t\tif (w !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');\n\t\t\t\treturn this.subVectors(v, w);\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.subScalar = function subScalar(s) {\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.subVectors = function subVectors(a, b) {\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiply = function multiply(v) {\n\t\t\tthis.x *= v.x;\n\t\t\tthis.y *= v.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiplyScalar = function multiplyScalar(scalar) {\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.divide = function divide(v) {\n\t\t\tthis.x /= v.x;\n\t\t\tthis.y /= v.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.divideScalar = function divideScalar(scalar) {\n\t\t\treturn this.multiplyScalar(1 / scalar);\n\t\t};\n\n\t\t_proto.applyMatrix3 = function applyMatrix3(m) {\n\t\t\tvar x = this.x,\n\t\t\t\t\ty = this.y;\n\t\t\tvar e = m.elements;\n\t\t\tthis.x = e[0] * x + e[3] * y + e[6];\n\t\t\tthis.y = e[1] * x + e[4] * y + e[7];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.min = function min(v) {\n\t\t\tthis.x = Math.min(this.x, v.x);\n\t\t\tthis.y = Math.min(this.y, v.y);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.max = function max(v) {\n\t\t\tthis.x = Math.max(this.x, v.x);\n\t\t\tthis.y = Math.max(this.y, v.y);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clamp = function clamp(min, max) {\n\t\t\t// assumes min < max, componentwise\n\t\t\tthis.x = Math.max(min.x, Math.min(max.x, this.x));\n\t\t\tthis.y = Math.max(min.y, Math.min(max.y, this.y));\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clampScalar = function clampScalar(minVal, maxVal) {\n\t\t\tthis.x = Math.max(minVal, Math.min(maxVal, this.x));\n\t\t\tthis.y = Math.max(minVal, Math.min(maxVal, this.y));\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clampLength = function clampLength(min, max) {\n\t\t\tvar length = this.length();\n\t\t\treturn this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n\t\t};\n\n\t\t_proto.floor = function floor() {\n\t\t\tthis.x = Math.floor(this.x);\n\t\t\tthis.y = Math.floor(this.y);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.ceil = function ceil() {\n\t\t\tthis.x = Math.ceil(this.x);\n\t\t\tthis.y = Math.ceil(this.y);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.round = function round() {\n\t\t\tthis.x = Math.round(this.x);\n\t\t\tthis.y = Math.round(this.y);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.roundToZero = function roundToZero() {\n\t\t\tthis.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\n\t\t\tthis.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.negate = function negate() {\n\t\t\tthis.x = -this.x;\n\t\t\tthis.y = -this.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.dot = function dot(v) {\n\t\t\treturn this.x * v.x + this.y * v.y;\n\t\t};\n\n\t\t_proto.cross = function cross(v) {\n\t\t\treturn this.x * v.y - this.y * v.x;\n\t\t};\n\n\t\t_proto.lengthSq = function lengthSq() {\n\t\t\treturn this.x * this.x + this.y * this.y;\n\t\t};\n\n\t\t_proto.length = function length() {\n\t\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t\t};\n\n\t\t_proto.manhattanLength = function manhattanLength() {\n\t\t\treturn Math.abs(this.x) + Math.abs(this.y);\n\t\t};\n\n\t\t_proto.normalize = function normalize() {\n\t\t\treturn this.divideScalar(this.length() || 1);\n\t\t};\n\n\t\t_proto.angle = function angle() {\n\t\t\t// computes the angle in radians with respect to the positive x-axis\n\t\t\tvar angle = Math.atan2(-this.y, -this.x) + Math.PI;\n\t\t\treturn angle;\n\t\t};\n\n\t\t_proto.distanceTo = function distanceTo(v) {\n\t\t\treturn Math.sqrt(this.distanceToSquared(v));\n\t\t};\n\n\t\t_proto.distanceToSquared = function distanceToSquared(v) {\n\t\t\tvar dx = this.x - v.x,\n\t\t\t\t\tdy = this.y - v.y;\n\t\t\treturn dx * dx + dy * dy;\n\t\t};\n\n\t\t_proto.manhattanDistanceTo = function manhattanDistanceTo(v) {\n\t\t\treturn Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\n\t\t};\n\n\t\t_proto.setLength = function setLength(length) {\n\t\t\treturn this.normalize().multiplyScalar(length);\n\t\t};\n\n\t\t_proto.lerp = function lerp(v, alpha) {\n\t\t\tthis.x += (v.x - this.x) * alpha;\n\t\t\tthis.y += (v.y - this.y) * alpha;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.lerpVectors = function lerpVectors(v1, v2, alpha) {\n\t\t\tthis.x = v1.x + (v2.x - v1.x) * alpha;\n\t\t\tthis.y = v1.y + (v2.y - v1.y) * alpha;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(v) {\n\t\t\treturn v.x === this.x && v.y === this.y;\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tthis.x = array[offset];\n\t\t\tthis.y = array[offset + 1];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tarray[offset] = this.x;\n\t\t\tarray[offset + 1] = this.y;\n\t\t\treturn array;\n\t\t};\n\n\t\t_proto.fromBufferAttribute = function fromBufferAttribute(attribute, index, offset) {\n\t\t\tif (offset !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector2: offset has been removed from .fromBufferAttribute().');\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX(index);\n\t\t\tthis.y = attribute.getY(index);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.rotateAround = function rotateAround(center, angle) {\n\t\t\tvar c = Math.cos(angle),\n\t\t\t\t\ts = Math.sin(angle);\n\t\t\tvar x = this.x - center.x;\n\t\t\tvar y = this.y - center.y;\n\t\t\tthis.x = x * c - y * s + center.x;\n\t\t\tthis.y = x * s + y * c + center.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.random = function random() {\n\t\t\tthis.x = Math.random();\n\t\t\tthis.y = Math.random();\n\t\t\treturn this;\n\t\t};\n\n\t\t_createClass(Vector2, [{\n\t\t\tkey: \"width\",\n\t\t\tget: function get() {\n\t\t\t\treturn this.x;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis.x = value;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"height\",\n\t\t\tget: function get() {\n\t\t\t\treturn this.y;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis.y = value;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Vector2;\n\t}();\n\n\tvar Matrix3 = /*#__PURE__*/function () {\n\t\tfunction Matrix3() {\n\t\t\tObject.defineProperty(this, 'isMatrix3', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconsole.error('THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.');\n\t\t\t}\n\t\t}\n\n\t\tvar _proto = Matrix3.prototype;\n\n\t\t_proto.set = function set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\n\t\t\tvar te = this.elements;\n\t\t\tte[0] = n11;\n\t\t\tte[1] = n21;\n\t\t\tte[2] = n31;\n\t\t\tte[3] = n12;\n\t\t\tte[4] = n22;\n\t\t\tte[5] = n32;\n\t\t\tte[6] = n13;\n\t\t\tte[7] = n23;\n\t\t\tte[8] = n33;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.identity = function identity() {\n\t\t\tthis.set(1, 0, 0, 0, 1, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().fromArray(this.elements);\n\t\t};\n\n\t\t_proto.copy = function copy(m) {\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\t\t\tte[0] = me[0];\n\t\t\tte[1] = me[1];\n\t\t\tte[2] = me[2];\n\t\t\tte[3] = me[3];\n\t\t\tte[4] = me[4];\n\t\t\tte[5] = me[5];\n\t\t\tte[6] = me[6];\n\t\t\tte[7] = me[7];\n\t\t\tte[8] = me[8];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.extractBasis = function extractBasis(xAxis, yAxis, zAxis) {\n\t\t\txAxis.setFromMatrix3Column(this, 0);\n\t\t\tyAxis.setFromMatrix3Column(this, 1);\n\t\t\tzAxis.setFromMatrix3Column(this, 2);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromMatrix4 = function setFromMatrix4(m) {\n\t\t\tvar me = m.elements;\n\t\t\tthis.set(me[0], me[4], me[8], me[1], me[5], me[9], me[2], me[6], me[10]);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiply = function multiply(m) {\n\t\t\treturn this.multiplyMatrices(this, m);\n\t\t};\n\n\t\t_proto.premultiply = function premultiply(m) {\n\t\t\treturn this.multiplyMatrices(m, this);\n\t\t};\n\n\t\t_proto.multiplyMatrices = function multiplyMatrices(a, b) {\n\t\t\tvar ae = a.elements;\n\t\t\tvar be = b.elements;\n\t\t\tvar te = this.elements;\n\t\t\tvar a11 = ae[0],\n\t\t\t\t\ta12 = ae[3],\n\t\t\t\t\ta13 = ae[6];\n\t\t\tvar a21 = ae[1],\n\t\t\t\t\ta22 = ae[4],\n\t\t\t\t\ta23 = ae[7];\n\t\t\tvar a31 = ae[2],\n\t\t\t\t\ta32 = ae[5],\n\t\t\t\t\ta33 = ae[8];\n\t\t\tvar b11 = be[0],\n\t\t\t\t\tb12 = be[3],\n\t\t\t\t\tb13 = be[6];\n\t\t\tvar b21 = be[1],\n\t\t\t\t\tb22 = be[4],\n\t\t\t\t\tb23 = be[7];\n\t\t\tvar b31 = be[2],\n\t\t\t\t\tb32 = be[5],\n\t\t\t\t\tb33 = be[8];\n\t\t\tte[0] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\t\tte[3] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\t\tte[6] = a11 * b13 + a12 * b23 + a13 * b33;\n\t\t\tte[1] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\t\tte[4] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\t\tte[7] = a21 * b13 + a22 * b23 + a23 * b33;\n\t\t\tte[2] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\t\tte[5] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\t\tte[8] = a31 * b13 + a32 * b23 + a33 * b33;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiplyScalar = function multiplyScalar(s) {\n\t\t\tvar te = this.elements;\n\t\t\tte[0] *= s;\n\t\t\tte[3] *= s;\n\t\t\tte[6] *= s;\n\t\t\tte[1] *= s;\n\t\t\tte[4] *= s;\n\t\t\tte[7] *= s;\n\t\t\tte[2] *= s;\n\t\t\tte[5] *= s;\n\t\t\tte[8] *= s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.determinant = function determinant() {\n\t\t\tvar te = this.elements;\n\t\t\tvar a = te[0],\n\t\t\t\t\tb = te[1],\n\t\t\t\t\tc = te[2],\n\t\t\t\t\td = te[3],\n\t\t\t\t\te = te[4],\n\t\t\t\t\tf = te[5],\n\t\t\t\t\tg = te[6],\n\t\t\t\t\th = te[7],\n\t\t\t\t\ti = te[8];\n\t\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\t\t};\n\n\t\t_proto.invert = function invert() {\n\t\t\tvar te = this.elements,\n\t\t\t\t\tn11 = te[0],\n\t\t\t\t\tn21 = te[1],\n\t\t\t\t\tn31 = te[2],\n\t\t\t\t\tn12 = te[3],\n\t\t\t\t\tn22 = te[4],\n\t\t\t\t\tn32 = te[5],\n\t\t\t\t\tn13 = te[6],\n\t\t\t\t\tn23 = te[7],\n\t\t\t\t\tn33 = te[8],\n\t\t\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\t\t\tt13 = n23 * n12 - n22 * n13,\n\t\t\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\t\t\tif (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n\t\t\tvar detInv = 1 / det;\n\t\t\tte[0] = t11 * detInv;\n\t\t\tte[1] = (n31 * n23 - n33 * n21) * detInv;\n\t\t\tte[2] = (n32 * n21 - n31 * n22) * detInv;\n\t\t\tte[3] = t12 * detInv;\n\t\t\tte[4] = (n33 * n11 - n31 * n13) * detInv;\n\t\t\tte[5] = (n31 * n12 - n32 * n11) * detInv;\n\t\t\tte[6] = t13 * detInv;\n\t\t\tte[7] = (n21 * n13 - n23 * n11) * detInv;\n\t\t\tte[8] = (n22 * n11 - n21 * n12) * detInv;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.transpose = function transpose() {\n\t\t\tvar tmp;\n\t\t\tvar m = this.elements;\n\t\t\ttmp = m[1];\n\t\t\tm[1] = m[3];\n\t\t\tm[3] = tmp;\n\t\t\ttmp = m[2];\n\t\t\tm[2] = m[6];\n\t\t\tm[6] = tmp;\n\t\t\ttmp = m[5];\n\t\t\tm[5] = m[7];\n\t\t\tm[7] = tmp;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getNormalMatrix = function getNormalMatrix(matrix4) {\n\t\t\treturn this.setFromMatrix4(matrix4).copy(this).invert().transpose();\n\t\t};\n\n\t\t_proto.transposeIntoArray = function transposeIntoArray(r) {\n\t\t\tvar m = this.elements;\n\t\t\tr[0] = m[0];\n\t\t\tr[1] = m[3];\n\t\t\tr[2] = m[6];\n\t\t\tr[3] = m[1];\n\t\t\tr[4] = m[4];\n\t\t\tr[5] = m[7];\n\t\t\tr[6] = m[2];\n\t\t\tr[7] = m[5];\n\t\t\tr[8] = m[8];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setUvTransform = function setUvTransform(tx, ty, sx, sy, rotation, cx, cy) {\n\t\t\tvar c = Math.cos(rotation);\n\t\t\tvar s = Math.sin(rotation);\n\t\t\tthis.set(sx * c, sx * s, -sx * (c * cx + s * cy) + cx + tx, -sy * s, sy * c, -sy * (-s * cx + c * cy) + cy + ty, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.scale = function scale(sx, sy) {\n\t\t\tvar te = this.elements;\n\t\t\tte[0] *= sx;\n\t\t\tte[3] *= sx;\n\t\t\tte[6] *= sx;\n\t\t\tte[1] *= sy;\n\t\t\tte[4] *= sy;\n\t\t\tte[7] *= sy;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.rotate = function rotate(theta) {\n\t\t\tvar c = Math.cos(theta);\n\t\t\tvar s = Math.sin(theta);\n\t\t\tvar te = this.elements;\n\t\t\tvar a11 = te[0],\n\t\t\t\t\ta12 = te[3],\n\t\t\t\t\ta13 = te[6];\n\t\t\tvar a21 = te[1],\n\t\t\t\t\ta22 = te[4],\n\t\t\t\t\ta23 = te[7];\n\t\t\tte[0] = c * a11 + s * a21;\n\t\t\tte[3] = c * a12 + s * a22;\n\t\t\tte[6] = c * a13 + s * a23;\n\t\t\tte[1] = -s * a11 + c * a21;\n\t\t\tte[4] = -s * a12 + c * a22;\n\t\t\tte[7] = -s * a13 + c * a23;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.translate = function translate(tx, ty) {\n\t\t\tvar te = this.elements;\n\t\t\tte[0] += tx * te[2];\n\t\t\tte[3] += tx * te[5];\n\t\t\tte[6] += tx * te[8];\n\t\t\tte[1] += ty * te[2];\n\t\t\tte[4] += ty * te[5];\n\t\t\tte[7] += ty * te[8];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(matrix) {\n\t\t\tvar te = this.elements;\n\t\t\tvar me = matrix.elements;\n\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tif (te[i] !== me[i]) return false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tthis.elements[i] = array[i + offset];\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tvar te = this.elements;\n\t\t\tarray[offset] = te[0];\n\t\t\tarray[offset + 1] = te[1];\n\t\t\tarray[offset + 2] = te[2];\n\t\t\tarray[offset + 3] = te[3];\n\t\t\tarray[offset + 4] = te[4];\n\t\t\tarray[offset + 5] = te[5];\n\t\t\tarray[offset + 6] = te[6];\n\t\t\tarray[offset + 7] = te[7];\n\t\t\tarray[offset + 8] = te[8];\n\t\t\treturn array;\n\t\t};\n\n\t\treturn Matrix3;\n\t}();\n\n\tvar _canvas;\n\n\tvar ImageUtils = {\n\t\tgetDataURL: function getDataURL(image) {\n\t\t\tif (/^data:/i.test(image.src)) {\n\t\t\t\treturn image.src;\n\t\t\t}\n\n\t\t\tif (typeof HTMLCanvasElement == 'undefined') {\n\t\t\t\treturn image.src;\n\t\t\t}\n\n\t\t\tvar canvas;\n\n\t\t\tif (image instanceof HTMLCanvasElement) {\n\t\t\t\tcanvas = image;\n\t\t\t} else {\n\t\t\t\tif (_canvas === undefined) _canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');\n\t\t\t\t_canvas.width = image.width;\n\t\t\t\t_canvas.height = image.height;\n\n\t\t\t\tvar context = _canvas.getContext('2d');\n\n\t\t\t\tif (image instanceof ImageData) {\n\t\t\t\t\tcontext.putImageData(image, 0, 0);\n\t\t\t\t} else {\n\t\t\t\t\tcontext.drawImage(image, 0, 0, image.width, image.height);\n\t\t\t\t}\n\n\t\t\t\tcanvas = _canvas;\n\t\t\t}\n\n\t\t\tif (canvas.width > 2048 || canvas.height > 2048) {\n\t\t\t\treturn canvas.toDataURL('image/jpeg', 0.6);\n\t\t\t} else {\n\t\t\t\treturn canvas.toDataURL('image/png');\n\t\t\t}\n\t\t}\n\t};\n\n\tvar textureId = 0;\n\n\tfunction Texture(image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding) {\n\t\tif (image === void 0) {\n\t\t\timage = Texture.DEFAULT_IMAGE;\n\t\t}\n\n\t\tif (mapping === void 0) {\n\t\t\tmapping = Texture.DEFAULT_MAPPING;\n\t\t}\n\n\t\tif (wrapS === void 0) {\n\t\t\twrapS = ClampToEdgeWrapping;\n\t\t}\n\n\t\tif (wrapT === void 0) {\n\t\t\twrapT = ClampToEdgeWrapping;\n\t\t}\n\n\t\tif (magFilter === void 0) {\n\t\t\tmagFilter = LinearFilter;\n\t\t}\n\n\t\tif (minFilter === void 0) {\n\t\t\tminFilter = LinearMipmapLinearFilter;\n\t\t}\n\n\t\tif (format === void 0) {\n\t\t\tformat = RGBAFormat;\n\t\t}\n\n\t\tif (type === void 0) {\n\t\t\ttype = UnsignedByteType;\n\t\t}\n\n\t\tif (anisotropy === void 0) {\n\t\t\tanisotropy = 1;\n\t\t}\n\n\t\tif (encoding === void 0) {\n\t\t\tencoding = LinearEncoding;\n\t\t}\n\n\t\tObject.defineProperty(this, 'id', {\n\t\t\tvalue: textureId++\n\t\t});\n\t\tthis.uuid = MathUtils.generateUUID();\n\t\tthis.name = '';\n\t\tthis.image = image;\n\t\tthis.mipmaps = [];\n\t\tthis.mapping = mapping;\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\t\tthis.anisotropy = anisotropy;\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\t\tthis.offset = new Vector2(0, 0);\n\t\tthis.repeat = new Vector2(1, 1);\n\t\tthis.center = new Vector2(0, 0);\n\t\tthis.rotation = 0;\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\n\t\tthis.encoding = encoding;\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\t}\n\n\tTexture.DEFAULT_IMAGE = undefined;\n\tTexture.DEFAULT_MAPPING = UVMapping;\n\tTexture.prototype = Object.assign(Object.create(EventDispatcher.prototype), {\n\t\tconstructor: Texture,\n\t\tisTexture: true,\n\t\tupdateMatrix: function updateMatrix() {\n\t\t\tthis.matrix.setUvTransform(this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y);\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tthis.name = source.name;\n\t\t\tthis.image = source.image;\n\t\t\tthis.mipmaps = source.mipmaps.slice(0);\n\t\t\tthis.mapping = source.mapping;\n\t\t\tthis.wrapS = source.wrapS;\n\t\t\tthis.wrapT = source.wrapT;\n\t\t\tthis.magFilter = source.magFilter;\n\t\t\tthis.minFilter = source.minFilter;\n\t\t\tthis.anisotropy = source.anisotropy;\n\t\t\tthis.format = source.format;\n\t\t\tthis.internalFormat = source.internalFormat;\n\t\t\tthis.type = source.type;\n\t\t\tthis.offset.copy(source.offset);\n\t\t\tthis.repeat.copy(source.repeat);\n\t\t\tthis.center.copy(source.center);\n\t\t\tthis.rotation = source.rotation;\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\tthis.matrix.copy(source.matrix);\n\t\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\t\tthis.flipY = source.flipY;\n\t\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\t\tthis.encoding = source.encoding;\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar isRootObject = meta === undefined || typeof meta === 'string';\n\n\t\t\tif (!isRootObject && meta.textures[this.uuid] !== undefined) {\n\t\t\t\treturn meta.textures[this.uuid];\n\t\t\t}\n\n\t\t\tvar output = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Texture',\n\t\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t\t},\n\t\t\t\tuuid: this.uuid,\n\t\t\t\tname: this.name,\n\t\t\t\tmapping: this.mapping,\n\t\t\t\trepeat: [this.repeat.x, this.repeat.y],\n\t\t\t\toffset: [this.offset.x, this.offset.y],\n\t\t\t\tcenter: [this.center.x, this.center.y],\n\t\t\t\trotation: this.rotation,\n\t\t\t\twrap: [this.wrapS, this.wrapT],\n\t\t\t\tformat: this.format,\n\t\t\t\ttype: this.type,\n\t\t\t\tencoding: this.encoding,\n\t\t\t\tminFilter: this.minFilter,\n\t\t\t\tmagFilter: this.magFilter,\n\t\t\t\tanisotropy: this.anisotropy,\n\t\t\t\tflipY: this.flipY,\n\t\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\t\tunpackAlignment: this.unpackAlignment\n\t\t\t};\n\n\t\t\tif (this.image !== undefined) {\n\t\t\t\t// TODO: Move to THREE.Image\n\t\t\t\tvar image = this.image;\n\n\t\t\t\tif (image.uuid === undefined) {\n\t\t\t\t\timage.uuid = MathUtils.generateUUID(); // UGH\n\t\t\t\t}\n\n\t\t\t\tif (!isRootObject && meta.images[image.uuid] === undefined) {\n\t\t\t\t\tvar url;\n\n\t\t\t\t\tif (Array.isArray(image)) {\n\t\t\t\t\t\t// process array of images e.g. CubeTexture\n\t\t\t\t\t\turl = [];\n\n\t\t\t\t\t\tfor (var i = 0, l = image.length; i < l; i++) {\n\t\t\t\t\t\t\t// check cube texture with data textures\n\t\t\t\t\t\t\tif (image[i].isDataTexture) {\n\t\t\t\t\t\t\t\turl.push(serializeImage(image[i].image));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\turl.push(serializeImage(image[i]));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// process single image\n\t\t\t\t\t\turl = serializeImage(image);\n\t\t\t\t\t}\n\n\t\t\t\t\tmeta.images[image.uuid] = {\n\t\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\t\turl: url\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\toutput.image = image.uuid;\n\t\t\t}\n\n\t\t\tif (!isRootObject) {\n\t\t\t\tmeta.textures[this.uuid] = output;\n\t\t\t}\n\n\t\t\treturn output;\n\t\t},\n\t\tdispose: function dispose() {\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'dispose'\n\t\t\t});\n\t\t},\n\t\ttransformUv: function transformUv(uv) {\n\t\t\tif (this.mapping !== UVMapping) return uv;\n\t\t\tuv.applyMatrix3(this.matrix);\n\n\t\t\tif (uv.x < 0 || uv.x > 1) {\n\t\t\t\tswitch (this.wrapS) {\n\t\t\t\t\tcase RepeatWrapping:\n\t\t\t\t\t\tuv.x = uv.x - Math.floor(uv.x);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ClampToEdgeWrapping:\n\t\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MirroredRepeatWrapping:\n\t\t\t\t\t\tif (Math.abs(Math.floor(uv.x) % 2) === 1) {\n\t\t\t\t\t\t\tuv.x = Math.ceil(uv.x) - uv.x;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tuv.x = uv.x - Math.floor(uv.x);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (uv.y < 0 || uv.y > 1) {\n\t\t\t\tswitch (this.wrapT) {\n\t\t\t\t\tcase RepeatWrapping:\n\t\t\t\t\t\tuv.y = uv.y - Math.floor(uv.y);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ClampToEdgeWrapping:\n\t\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MirroredRepeatWrapping:\n\t\t\t\t\t\tif (Math.abs(Math.floor(uv.y) % 2) === 1) {\n\t\t\t\t\t\t\tuv.y = Math.ceil(uv.y) - uv.y;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tuv.y = uv.y - Math.floor(uv.y);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.flipY) {\n\t\t\t\tuv.y = 1 - uv.y;\n\t\t\t}\n\n\t\t\treturn uv;\n\t\t}\n\t});\n\tObject.defineProperty(Texture.prototype, 'needsUpdate', {\n\t\tset: function set(value) {\n\t\t\tif (value === true) this.version++;\n\t\t}\n\t});\n\n\tfunction serializeImage(image) {\n\t\tif (typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) {\n\t\t\t// default images\n\t\t\treturn ImageUtils.getDataURL(image);\n\t\t} else {\n\t\t\tif (image.data) {\n\t\t\t\t// images of DataTexture\n\t\t\t\treturn {\n\t\t\t\t\tdata: Array.prototype.slice.call(image.data),\n\t\t\t\t\twidth: image.width,\n\t\t\t\t\theight: image.height,\n\t\t\t\t\ttype: image.data.constructor.name\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tconsole.warn('THREE.Texture: Unable to serialize Texture.');\n\t\t\t\treturn {};\n\t\t\t}\n\t\t}\n\t}\n\n\tvar Vector4 = /*#__PURE__*/function () {\n\t\tfunction Vector4(x, y, z, w) {\n\t\t\tif (x === void 0) {\n\t\t\t\tx = 0;\n\t\t\t}\n\n\t\t\tif (y === void 0) {\n\t\t\t\ty = 0;\n\t\t\t}\n\n\t\t\tif (z === void 0) {\n\t\t\t\tz = 0;\n\t\t\t}\n\n\t\t\tif (w === void 0) {\n\t\t\t\tw = 1;\n\t\t\t}\n\n\t\t\tObject.defineProperty(this, 'isVector4', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\t\t}\n\n\t\tvar _proto = Vector4.prototype;\n\n\t\t_proto.set = function set(x, y, z, w) {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setScalar = function setScalar(scalar) {\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\tthis.z = scalar;\n\t\t\tthis.w = scalar;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setX = function setX(x) {\n\t\t\tthis.x = x;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setY = function setY(y) {\n\t\t\tthis.y = y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setZ = function setZ(z) {\n\t\t\tthis.z = z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setW = function setW(w) {\n\t\t\tthis.w = w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setComponent = function setComponent(index, value) {\n\t\t\tswitch (index) {\n\t\t\t\tcase 0:\n\t\t\t\t\tthis.x = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\tthis.y = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.z = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.w = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('index is out of range: ' + index);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getComponent = function getComponent(index) {\n\t\t\tswitch (index) {\n\t\t\t\tcase 0:\n\t\t\t\t\treturn this.x;\n\n\t\t\t\tcase 1:\n\t\t\t\t\treturn this.y;\n\n\t\t\t\tcase 2:\n\t\t\t\t\treturn this.z;\n\n\t\t\t\tcase 3:\n\t\t\t\t\treturn this.w;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('index is out of range: ' + index);\n\t\t\t}\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor(this.x, this.y, this.z, this.w);\n\t\t};\n\n\t\t_proto.copy = function copy(v) {\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\tthis.z = v.z;\n\t\t\tthis.w = v.w !== undefined ? v.w : 1;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.add = function add(v, w) {\n\t\t\tif (w !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');\n\t\t\t\treturn this.addVectors(v, w);\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\tthis.z += v.z;\n\t\t\tthis.w += v.w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addScalar = function addScalar(s) {\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\tthis.z += s;\n\t\t\tthis.w += s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addVectors = function addVectors(a, b) {\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\tthis.z = a.z + b.z;\n\t\t\tthis.w = a.w + b.w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addScaledVector = function addScaledVector(v, s) {\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\tthis.z += v.z * s;\n\t\t\tthis.w += v.w * s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.sub = function sub(v, w) {\n\t\t\tif (w !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');\n\t\t\t\treturn this.subVectors(v, w);\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\tthis.z -= v.z;\n\t\t\tthis.w -= v.w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.subScalar = function subScalar(s) {\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\tthis.z -= s;\n\t\t\tthis.w -= s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.subVectors = function subVectors(a, b) {\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\tthis.z = a.z - b.z;\n\t\t\tthis.w = a.w - b.w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiplyScalar = function multiplyScalar(scalar) {\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\tthis.z *= scalar;\n\t\t\tthis.w *= scalar;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.applyMatrix4 = function applyMatrix4(m) {\n\t\t\tvar x = this.x,\n\t\t\t\t\ty = this.y,\n\t\t\t\t\tz = this.z,\n\t\t\t\t\tw = this.w;\n\t\t\tvar e = m.elements;\n\t\t\tthis.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;\n\t\t\tthis.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;\n\t\t\tthis.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;\n\t\t\tthis.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.divideScalar = function divideScalar(scalar) {\n\t\t\treturn this.multiplyScalar(1 / scalar);\n\t\t};\n\n\t\t_proto.setAxisAngleFromQuaternion = function setAxisAngleFromQuaternion(q) {\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\t\t\t// q is assumed to be normalized\n\t\t\tthis.w = 2 * Math.acos(q.w);\n\t\t\tvar s = Math.sqrt(1 - q.w * q.w);\n\n\t\t\tif (s < 0.0001) {\n\t\t\t\tthis.x = 1;\n\t\t\t\tthis.y = 0;\n\t\t\t\tthis.z = 0;\n\t\t\t} else {\n\t\t\t\tthis.x = q.x / s;\n\t\t\t\tthis.y = q.y / s;\n\t\t\t\tthis.z = q.z / s;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setAxisAngleFromRotationMatrix = function setAxisAngleFromRotationMatrix(m) {\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\t\t\tvar angle, x, y, z; // variables for result\n\n\t\t\tvar epsilon = 0.01,\n\t\t\t\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\n\t\t\t\t\t// margin to distinguish between 0 and 180 degrees\n\t\t\tte = m.elements,\n\t\t\t\t\tm11 = te[0],\n\t\t\t\t\tm12 = te[4],\n\t\t\t\t\tm13 = te[8],\n\t\t\t\t\tm21 = te[1],\n\t\t\t\t\tm22 = te[5],\n\t\t\t\t\tm23 = te[9],\n\t\t\t\t\tm31 = te[2],\n\t\t\t\t\tm32 = te[6],\n\t\t\t\t\tm33 = te[10];\n\n\t\t\tif (Math.abs(m12 - m21) < epsilon && Math.abs(m13 - m31) < epsilon && Math.abs(m23 - m32) < epsilon) {\n\t\t\t\t// singularity found\n\t\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t\t// in leading diagonal and zero in other terms\n\t\t\t\tif (Math.abs(m12 + m21) < epsilon2 && Math.abs(m13 + m31) < epsilon2 && Math.abs(m23 + m32) < epsilon2 && Math.abs(m11 + m22 + m33 - 3) < epsilon2) {\n\t\t\t\t\t// this singularity is identity matrix so angle = 0\n\t\t\t\t\tthis.set(1, 0, 0, 0);\n\t\t\t\t\treturn this; // zero angle, arbitrary axis\n\t\t\t\t} // otherwise this singularity is angle = 180\n\n\n\t\t\t\tangle = Math.PI;\n\t\t\t\tvar xx = (m11 + 1) / 2;\n\t\t\t\tvar yy = (m22 + 1) / 2;\n\t\t\t\tvar zz = (m33 + 1) / 2;\n\t\t\t\tvar xy = (m12 + m21) / 4;\n\t\t\t\tvar xz = (m13 + m31) / 4;\n\t\t\t\tvar yz = (m23 + m32) / 4;\n\n\t\t\t\tif (xx > yy && xx > zz) {\n\t\t\t\t\t// m11 is the largest diagonal term\n\t\t\t\t\tif (xx < epsilon) {\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\t\tz = 0.707106781;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx = Math.sqrt(xx);\n\t\t\t\t\t\ty = xy / x;\n\t\t\t\t\t\tz = xz / x;\n\t\t\t\t\t}\n\t\t\t\t} else if (yy > zz) {\n\t\t\t\t\t// m22 is the largest diagonal term\n\t\t\t\t\tif (yy < epsilon) {\n\t\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\tz = 0.707106781;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ty = Math.sqrt(yy);\n\t\t\t\t\t\tx = xy / y;\n\t\t\t\t\t\tz = yz / y;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// m33 is the largest diagonal term so base result on this\n\t\t\t\t\tif (zz < epsilon) {\n\t\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\t\tz = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tz = Math.sqrt(zz);\n\t\t\t\t\t\tx = xz / z;\n\t\t\t\t\t\ty = yz / z;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.set(x, y, z, angle);\n\t\t\t\treturn this; // return 180 deg rotation\n\t\t\t} // as we have reached here there are no singularities so we can handle normally\n\n\n\t\t\tvar s = Math.sqrt((m32 - m23) * (m32 - m23) + (m13 - m31) * (m13 - m31) + (m21 - m12) * (m21 - m12)); // used to normalize\n\n\t\t\tif (Math.abs(s) < 0.001) s = 1; // prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\t\tthis.x = (m32 - m23) / s;\n\t\t\tthis.y = (m13 - m31) / s;\n\t\t\tthis.z = (m21 - m12) / s;\n\t\t\tthis.w = Math.acos((m11 + m22 + m33 - 1) / 2);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.min = function min(v) {\n\t\t\tthis.x = Math.min(this.x, v.x);\n\t\t\tthis.y = Math.min(this.y, v.y);\n\t\t\tthis.z = Math.min(this.z, v.z);\n\t\t\tthis.w = Math.min(this.w, v.w);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.max = function max(v) {\n\t\t\tthis.x = Math.max(this.x, v.x);\n\t\t\tthis.y = Math.max(this.y, v.y);\n\t\t\tthis.z = Math.max(this.z, v.z);\n\t\t\tthis.w = Math.max(this.w, v.w);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clamp = function clamp(min, max) {\n\t\t\t// assumes min < max, componentwise\n\t\t\tthis.x = Math.max(min.x, Math.min(max.x, this.x));\n\t\t\tthis.y = Math.max(min.y, Math.min(max.y, this.y));\n\t\t\tthis.z = Math.max(min.z, Math.min(max.z, this.z));\n\t\t\tthis.w = Math.max(min.w, Math.min(max.w, this.w));\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clampScalar = function clampScalar(minVal, maxVal) {\n\t\t\tthis.x = Math.max(minVal, Math.min(maxVal, this.x));\n\t\t\tthis.y = Math.max(minVal, Math.min(maxVal, this.y));\n\t\t\tthis.z = Math.max(minVal, Math.min(maxVal, this.z));\n\t\t\tthis.w = Math.max(minVal, Math.min(maxVal, this.w));\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clampLength = function clampLength(min, max) {\n\t\t\tvar length = this.length();\n\t\t\treturn this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n\t\t};\n\n\t\t_proto.floor = function floor() {\n\t\t\tthis.x = Math.floor(this.x);\n\t\t\tthis.y = Math.floor(this.y);\n\t\t\tthis.z = Math.floor(this.z);\n\t\t\tthis.w = Math.floor(this.w);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.ceil = function ceil() {\n\t\t\tthis.x = Math.ceil(this.x);\n\t\t\tthis.y = Math.ceil(this.y);\n\t\t\tthis.z = Math.ceil(this.z);\n\t\t\tthis.w = Math.ceil(this.w);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.round = function round() {\n\t\t\tthis.x = Math.round(this.x);\n\t\t\tthis.y = Math.round(this.y);\n\t\t\tthis.z = Math.round(this.z);\n\t\t\tthis.w = Math.round(this.w);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.roundToZero = function roundToZero() {\n\t\t\tthis.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\n\t\t\tthis.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\n\t\t\tthis.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);\n\t\t\tthis.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.negate = function negate() {\n\t\t\tthis.x = -this.x;\n\t\t\tthis.y = -this.y;\n\t\t\tthis.z = -this.z;\n\t\t\tthis.w = -this.w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.dot = function dot(v) {\n\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\t\t};\n\n\t\t_proto.lengthSq = function lengthSq() {\n\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\t\t};\n\n\t\t_proto.length = function length() {\n\t\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n\t\t};\n\n\t\t_proto.manhattanLength = function manhattanLength() {\n\t\t\treturn Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w);\n\t\t};\n\n\t\t_proto.normalize = function normalize() {\n\t\t\treturn this.divideScalar(this.length() || 1);\n\t\t};\n\n\t\t_proto.setLength = function setLength(length) {\n\t\t\treturn this.normalize().multiplyScalar(length);\n\t\t};\n\n\t\t_proto.lerp = function lerp(v, alpha) {\n\t\t\tthis.x += (v.x - this.x) * alpha;\n\t\t\tthis.y += (v.y - this.y) * alpha;\n\t\t\tthis.z += (v.z - this.z) * alpha;\n\t\t\tthis.w += (v.w - this.w) * alpha;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.lerpVectors = function lerpVectors(v1, v2, alpha) {\n\t\t\tthis.x = v1.x + (v2.x - v1.x) * alpha;\n\t\t\tthis.y = v1.y + (v2.y - v1.y) * alpha;\n\t\t\tthis.z = v1.z + (v2.z - v1.z) * alpha;\n\t\t\tthis.w = v1.w + (v2.w - v1.w) * alpha;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(v) {\n\t\t\treturn v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w;\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tthis.x = array[offset];\n\t\t\tthis.y = array[offset + 1];\n\t\t\tthis.z = array[offset + 2];\n\t\t\tthis.w = array[offset + 3];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tarray[offset] = this.x;\n\t\t\tarray[offset + 1] = this.y;\n\t\t\tarray[offset + 2] = this.z;\n\t\t\tarray[offset + 3] = this.w;\n\t\t\treturn array;\n\t\t};\n\n\t\t_proto.fromBufferAttribute = function fromBufferAttribute(attribute, index, offset) {\n\t\t\tif (offset !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector4: offset has been removed from .fromBufferAttribute().');\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX(index);\n\t\t\tthis.y = attribute.getY(index);\n\t\t\tthis.z = attribute.getZ(index);\n\t\t\tthis.w = attribute.getW(index);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.random = function random() {\n\t\t\tthis.x = Math.random();\n\t\t\tthis.y = Math.random();\n\t\t\tthis.z = Math.random();\n\t\t\tthis.w = Math.random();\n\t\t\treturn this;\n\t\t};\n\n\t\t_createClass(Vector4, [{\n\t\t\tkey: \"width\",\n\t\t\tget: function get() {\n\t\t\t\treturn this.z;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis.z = value;\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"height\",\n\t\t\tget: function get() {\n\t\t\t\treturn this.w;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis.w = value;\n\t\t\t}\n\t\t}]);\n\n\t\treturn Vector4;\n\t}();\n\n\t/*\n\t In options, we can specify:\n\t * Texture parameters for an auto-generated target texture\n\t * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n\t*/\n\n\tfunction WebGLRenderTarget(width, height, options) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.scissor = new Vector4(0, 0, width, height);\n\t\tthis.scissorTest = false;\n\t\tthis.viewport = new Vector4(0, 0, width, height);\n\t\toptions = options || {};\n\t\tthis.texture = new Texture(undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding);\n\t\tthis.texture.image = {};\n\t\tthis.texture.image.width = width;\n\t\tthis.texture.image.height = height;\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\t}\n\n\tWebGLRenderTarget.prototype = Object.assign(Object.create(EventDispatcher.prototype), {\n\t\tconstructor: WebGLRenderTarget,\n\t\tisWebGLRenderTarget: true,\n\t\tsetSize: function setSize(width, height) {\n\t\t\tif (this.width !== width || this.height !== height) {\n\t\t\t\tthis.width = width;\n\t\t\t\tthis.height = height;\n\t\t\t\tthis.texture.image.width = width;\n\t\t\t\tthis.texture.image.height = height;\n\t\t\t\tthis.dispose();\n\t\t\t}\n\n\t\t\tthis.viewport.set(0, 0, width, height);\n\t\t\tthis.scissor.set(0, 0, width, height);\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tthis.width = source.width;\n\t\t\tthis.height = source.height;\n\t\t\tthis.viewport.copy(source.viewport);\n\t\t\tthis.texture = source.texture.clone();\n\t\t\tthis.depthBuffer = source.depthBuffer;\n\t\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\t\tthis.depthTexture = source.depthTexture;\n\t\t\treturn this;\n\t\t},\n\t\tdispose: function dispose() {\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'dispose'\n\t\t\t});\n\t\t}\n\t});\n\n\tfunction WebGLMultisampleRenderTarget(width, height, options) {\n\t\tWebGLRenderTarget.call(this, width, height, options);\n\t\tthis.samples = 4;\n\t}\n\n\tWebGLMultisampleRenderTarget.prototype = Object.assign(Object.create(WebGLRenderTarget.prototype), {\n\t\tconstructor: WebGLMultisampleRenderTarget,\n\t\tisWebGLMultisampleRenderTarget: true,\n\t\tcopy: function copy(source) {\n\t\t\tWebGLRenderTarget.prototype.copy.call(this, source);\n\t\t\tthis.samples = source.samples;\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tvar Quaternion = /*#__PURE__*/function () {\n\t\tfunction Quaternion(x, y, z, w) {\n\t\t\tif (x === void 0) {\n\t\t\t\tx = 0;\n\t\t\t}\n\n\t\t\tif (y === void 0) {\n\t\t\t\ty = 0;\n\t\t\t}\n\n\t\t\tif (z === void 0) {\n\t\t\t\tz = 0;\n\t\t\t}\n\n\t\t\tif (w === void 0) {\n\t\t\t\tw = 1;\n\t\t\t}\n\n\t\t\tObject.defineProperty(this, 'isQuaternion', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._w = w;\n\t\t}\n\n\t\tQuaternion.slerp = function slerp(qa, qb, qm, t) {\n\t\t\treturn qm.copy(qa).slerp(qb, t);\n\t\t};\n\n\t\tQuaternion.slerpFlat = function slerpFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t) {\n\t\t\t// fuzz-free, array-based Quaternion SLERP operation\n\t\t\tvar x0 = src0[srcOffset0 + 0],\n\t\t\t\t\ty0 = src0[srcOffset0 + 1],\n\t\t\t\t\tz0 = src0[srcOffset0 + 2],\n\t\t\t\t\tw0 = src0[srcOffset0 + 3];\n\t\t\tvar x1 = src1[srcOffset1 + 0],\n\t\t\t\t\ty1 = src1[srcOffset1 + 1],\n\t\t\t\t\tz1 = src1[srcOffset1 + 2],\n\t\t\t\t\tw1 = src1[srcOffset1 + 3];\n\n\t\t\tif (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n\t\t\t\tvar s = 1 - t;\n\t\t\t\tvar cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\t\t\tdir = cos >= 0 ? 1 : -1,\n\t\t\t\t\t\tsqrSin = 1 - cos * cos; // Skip the Slerp for tiny steps to avoid numeric problems:\n\n\t\t\t\tif (sqrSin > Number.EPSILON) {\n\t\t\t\t\tvar sin = Math.sqrt(sqrSin),\n\t\t\t\t\t\t\tlen = Math.atan2(sin, cos * dir);\n\t\t\t\t\ts = Math.sin(s * len) / sin;\n\t\t\t\t\tt = Math.sin(t * len) / sin;\n\t\t\t\t}\n\n\t\t\t\tvar tDir = t * dir;\n\t\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\t\tw0 = w0 * s + w1 * tDir; // Normalize in case we just did a lerp:\n\n\t\t\t\tif (s === 1 - t) {\n\t\t\t\t\tvar f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n\t\t\t\t\tx0 *= f;\n\t\t\t\t\ty0 *= f;\n\t\t\t\t\tz0 *= f;\n\t\t\t\t\tw0 *= f;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdst[dstOffset] = x0;\n\t\t\tdst[dstOffset + 1] = y0;\n\t\t\tdst[dstOffset + 2] = z0;\n\t\t\tdst[dstOffset + 3] = w0;\n\t\t};\n\n\t\tQuaternion.multiplyQuaternionsFlat = function multiplyQuaternionsFlat(dst, dstOffset, src0, srcOffset0, src1, srcOffset1) {\n\t\t\tvar x0 = src0[srcOffset0];\n\t\t\tvar y0 = src0[srcOffset0 + 1];\n\t\t\tvar z0 = src0[srcOffset0 + 2];\n\t\t\tvar w0 = src0[srcOffset0 + 3];\n\t\t\tvar x1 = src1[srcOffset1];\n\t\t\tvar y1 = src1[srcOffset1 + 1];\n\t\t\tvar z1 = src1[srcOffset1 + 2];\n\t\t\tvar w1 = src1[srcOffset1 + 3];\n\t\t\tdst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\t\tdst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\t\tdst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\t\tdst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\t\t\treturn dst;\n\t\t};\n\n\t\tvar _proto = Quaternion.prototype;\n\n\t\t_proto.set = function set(x, y, z, w) {\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._w = w;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor(this._x, this._y, this._z, this._w);\n\t\t};\n\n\t\t_proto.copy = function copy(quaternion) {\n\t\t\tthis._x = quaternion.x;\n\t\t\tthis._y = quaternion.y;\n\t\t\tthis._z = quaternion.z;\n\t\t\tthis._w = quaternion.w;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromEuler = function setFromEuler(euler, update) {\n\t\t\tif (!(euler && euler.isEuler)) {\n\t\t\t\tthrow new Error('THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.');\n\t\t\t}\n\n\t\t\tvar x = euler._x,\n\t\t\t\t\ty = euler._y,\n\t\t\t\t\tz = euler._z,\n\t\t\t\t\torder = euler._order; // http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t\t//\tcontent/SpinCalc.m\n\n\t\t\tvar cos = Math.cos;\n\t\t\tvar sin = Math.sin;\n\t\t\tvar c1 = cos(x / 2);\n\t\t\tvar c2 = cos(y / 2);\n\t\t\tvar c3 = cos(z / 2);\n\t\t\tvar s1 = sin(x / 2);\n\t\t\tvar s2 = sin(y / 2);\n\t\t\tvar s3 = sin(z / 2);\n\n\t\t\tswitch (order) {\n\t\t\t\tcase 'XYZ':\n\t\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YXZ':\n\t\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZXY':\n\t\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZYX':\n\t\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YZX':\n\t\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'XZY':\n\t\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn('THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order);\n\t\t\t}\n\n\t\t\tif (update !== false) this._onChangeCallback();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromAxisAngle = function setFromAxisAngle(axis, angle) {\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\t\t\t// assumes axis is normalized\n\t\t\tvar halfAngle = angle / 2,\n\t\t\t\t\ts = Math.sin(halfAngle);\n\t\t\tthis._x = axis.x * s;\n\t\t\tthis._y = axis.y * s;\n\t\t\tthis._z = axis.z * s;\n\t\t\tthis._w = Math.cos(halfAngle);\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromRotationMatrix = function setFromRotationMatrix(m) {\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\t\t\tvar te = m.elements,\n\t\t\t\t\tm11 = te[0],\n\t\t\t\t\tm12 = te[4],\n\t\t\t\t\tm13 = te[8],\n\t\t\t\t\tm21 = te[1],\n\t\t\t\t\tm22 = te[5],\n\t\t\t\t\tm23 = te[9],\n\t\t\t\t\tm31 = te[2],\n\t\t\t\t\tm32 = te[6],\n\t\t\t\t\tm33 = te[10],\n\t\t\t\t\ttrace = m11 + m22 + m33;\n\n\t\t\tif (trace > 0) {\n\t\t\t\tvar s = 0.5 / Math.sqrt(trace + 1.0);\n\t\t\t\tthis._w = 0.25 / s;\n\t\t\t\tthis._x = (m32 - m23) * s;\n\t\t\t\tthis._y = (m13 - m31) * s;\n\t\t\t\tthis._z = (m21 - m12) * s;\n\t\t\t} else if (m11 > m22 && m11 > m33) {\n\t\t\t\tvar _s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n\n\t\t\t\tthis._w = (m32 - m23) / _s;\n\t\t\t\tthis._x = 0.25 * _s;\n\t\t\t\tthis._y = (m12 + m21) / _s;\n\t\t\t\tthis._z = (m13 + m31) / _s;\n\t\t\t} else if (m22 > m33) {\n\t\t\t\tvar _s2 = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n\n\t\t\t\tthis._w = (m13 - m31) / _s2;\n\t\t\t\tthis._x = (m12 + m21) / _s2;\n\t\t\t\tthis._y = 0.25 * _s2;\n\t\t\t\tthis._z = (m23 + m32) / _s2;\n\t\t\t} else {\n\t\t\t\tvar _s3 = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n\n\t\t\t\tthis._w = (m21 - m12) / _s3;\n\t\t\t\tthis._x = (m13 + m31) / _s3;\n\t\t\t\tthis._y = (m23 + m32) / _s3;\n\t\t\t\tthis._z = 0.25 * _s3;\n\t\t\t}\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromUnitVectors = function setFromUnitVectors(vFrom, vTo) {\n\t\t\t// assumes direction vectors vFrom and vTo are normalized\n\t\t\tvar EPS = 0.000001;\n\t\t\tvar r = vFrom.dot(vTo) + 1;\n\n\t\t\tif (r < EPS) {\n\t\t\t\tr = 0;\n\n\t\t\t\tif (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n\t\t\t\t\tthis._x = -vFrom.y;\n\t\t\t\t\tthis._y = vFrom.x;\n\t\t\t\t\tthis._z = 0;\n\t\t\t\t\tthis._w = r;\n\t\t\t\t} else {\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = -vFrom.z;\n\t\t\t\t\tthis._z = vFrom.y;\n\t\t\t\t\tthis._w = r;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\t\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\t\tthis._w = r;\n\t\t\t}\n\n\t\t\treturn this.normalize();\n\t\t};\n\n\t\t_proto.angleTo = function angleTo(q) {\n\t\t\treturn 2 * Math.acos(Math.abs(MathUtils.clamp(this.dot(q), -1, 1)));\n\t\t};\n\n\t\t_proto.rotateTowards = function rotateTowards(q, step) {\n\t\t\tvar angle = this.angleTo(q);\n\t\t\tif (angle === 0) return this;\n\t\t\tvar t = Math.min(1, step / angle);\n\t\t\tthis.slerp(q, t);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.identity = function identity() {\n\t\t\treturn this.set(0, 0, 0, 1);\n\t\t};\n\n\t\t_proto.invert = function invert() {\n\t\t\t// quaternion is assumed to have unit length\n\t\t\treturn this.conjugate();\n\t\t};\n\n\t\t_proto.conjugate = function conjugate() {\n\t\t\tthis._x *= -1;\n\t\t\tthis._y *= -1;\n\t\t\tthis._z *= -1;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.dot = function dot(v) {\n\t\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\t\t};\n\n\t\t_proto.lengthSq = function lengthSq() {\n\t\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\t\t};\n\n\t\t_proto.length = function length() {\n\t\t\treturn Math.sqrt(this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w);\n\t\t};\n\n\t\t_proto.normalize = function normalize() {\n\t\t\tvar l = this.length();\n\n\t\t\tif (l === 0) {\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = 1;\n\t\t\t} else {\n\t\t\t\tl = 1 / l;\n\t\t\t\tthis._x = this._x * l;\n\t\t\t\tthis._y = this._y * l;\n\t\t\t\tthis._z = this._z * l;\n\t\t\t\tthis._w = this._w * l;\n\t\t\t}\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiply = function multiply(q, p) {\n\t\t\tif (p !== undefined) {\n\t\t\t\tconsole.warn('THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.');\n\t\t\t\treturn this.multiplyQuaternions(q, p);\n\t\t\t}\n\n\t\t\treturn this.multiplyQuaternions(this, q);\n\t\t};\n\n\t\t_proto.premultiply = function premultiply(q) {\n\t\t\treturn this.multiplyQuaternions(q, this);\n\t\t};\n\n\t\t_proto.multiplyQuaternions = function multiplyQuaternions(a, b) {\n\t\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\t\t\tvar qax = a._x,\n\t\t\t\t\tqay = a._y,\n\t\t\t\t\tqaz = a._z,\n\t\t\t\t\tqaw = a._w;\n\t\t\tvar qbx = b._x,\n\t\t\t\t\tqby = b._y,\n\t\t\t\t\tqbz = b._z,\n\t\t\t\t\tqbw = b._w;\n\t\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.slerp = function slerp(qb, t) {\n\t\t\tif (t === 0) return this;\n\t\t\tif (t === 1) return this.copy(qb);\n\t\t\tvar x = this._x,\n\t\t\t\t\ty = this._y,\n\t\t\t\t\tz = this._z,\n\t\t\t\t\tw = this._w; // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\t\tif (cosHalfTheta < 0) {\n\t\t\t\tthis._w = -qb._w;\n\t\t\t\tthis._x = -qb._x;\n\t\t\t\tthis._y = -qb._y;\n\t\t\t\tthis._z = -qb._z;\n\t\t\t\tcosHalfTheta = -cosHalfTheta;\n\t\t\t} else {\n\t\t\t\tthis.copy(qb);\n\t\t\t}\n\n\t\t\tif (cosHalfTheta >= 1.0) {\n\t\t\t\tthis._w = w;\n\t\t\t\tthis._x = x;\n\t\t\t\tthis._y = y;\n\t\t\t\tthis._z = z;\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\t\tif (sqrSinHalfTheta <= Number.EPSILON) {\n\t\t\t\tvar s = 1 - t;\n\t\t\t\tthis._w = s * w + t * this._w;\n\t\t\t\tthis._x = s * x + t * this._x;\n\t\t\t\tthis._y = s * y + t * this._y;\n\t\t\t\tthis._z = s * z + t * this._z;\n\t\t\t\tthis.normalize();\n\n\t\t\t\tthis._onChangeCallback();\n\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n\t\t\tvar halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n\t\t\tvar ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta,\n\t\t\t\t\tratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n\t\t\tthis._w = w * ratioA + this._w * ratioB;\n\t\t\tthis._x = x * ratioA + this._x * ratioB;\n\t\t\tthis._y = y * ratioA + this._y * ratioB;\n\t\t\tthis._z = z * ratioA + this._z * ratioB;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(quaternion) {\n\t\t\treturn quaternion._x === this._x && quaternion._y === this._y && quaternion._z === this._z && quaternion._w === this._w;\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tthis._x = array[offset];\n\t\t\tthis._y = array[offset + 1];\n\t\t\tthis._z = array[offset + 2];\n\t\t\tthis._w = array[offset + 3];\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tarray[offset] = this._x;\n\t\t\tarray[offset + 1] = this._y;\n\t\t\tarray[offset + 2] = this._z;\n\t\t\tarray[offset + 3] = this._w;\n\t\t\treturn array;\n\t\t};\n\n\t\t_proto.fromBufferAttribute = function fromBufferAttribute(attribute, index) {\n\t\t\tthis._x = attribute.getX(index);\n\t\t\tthis._y = attribute.getY(index);\n\t\t\tthis._z = attribute.getZ(index);\n\t\t\tthis._w = attribute.getW(index);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto._onChange = function _onChange(callback) {\n\t\t\tthis._onChangeCallback = callback;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto._onChangeCallback = function _onChangeCallback() {};\n\n\t\t_createClass(Quaternion, [{\n\t\t\tkey: \"x\",\n\t\t\tget: function get() {\n\t\t\t\treturn this._x;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis._x = value;\n\n\t\t\t\tthis._onChangeCallback();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"y\",\n\t\t\tget: function get() {\n\t\t\t\treturn this._y;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis._y = value;\n\n\t\t\t\tthis._onChangeCallback();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"z\",\n\t\t\tget: function get() {\n\t\t\t\treturn this._z;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis._z = value;\n\n\t\t\t\tthis._onChangeCallback();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"w\",\n\t\t\tget: function get() {\n\t\t\t\treturn this._w;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis._w = value;\n\n\t\t\t\tthis._onChangeCallback();\n\t\t\t}\n\t\t}]);\n\n\t\treturn Quaternion;\n\t}();\n\n\tvar Vector3 = /*#__PURE__*/function () {\n\t\tfunction Vector3(x, y, z) {\n\t\t\tif (x === void 0) {\n\t\t\t\tx = 0;\n\t\t\t}\n\n\t\t\tif (y === void 0) {\n\t\t\t\ty = 0;\n\t\t\t}\n\n\t\t\tif (z === void 0) {\n\t\t\t\tz = 0;\n\t\t\t}\n\n\t\t\tObject.defineProperty(this, 'isVector3', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t}\n\n\t\tvar _proto = Vector3.prototype;\n\n\t\t_proto.set = function set(x, y, z) {\n\t\t\tif (z === undefined) z = this.z; // sprite.scale.set(x,y)\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setScalar = function setScalar(scalar) {\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\tthis.z = scalar;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setX = function setX(x) {\n\t\t\tthis.x = x;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setY = function setY(y) {\n\t\t\tthis.y = y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setZ = function setZ(z) {\n\t\t\tthis.z = z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setComponent = function setComponent(index, value) {\n\t\t\tswitch (index) {\n\t\t\t\tcase 0:\n\t\t\t\t\tthis.x = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\tthis.y = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\tthis.z = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('index is out of range: ' + index);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getComponent = function getComponent(index) {\n\t\t\tswitch (index) {\n\t\t\t\tcase 0:\n\t\t\t\t\treturn this.x;\n\n\t\t\t\tcase 1:\n\t\t\t\t\treturn this.y;\n\n\t\t\t\tcase 2:\n\t\t\t\t\treturn this.z;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('index is out of range: ' + index);\n\t\t\t}\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor(this.x, this.y, this.z);\n\t\t};\n\n\t\t_proto.copy = function copy(v) {\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\tthis.z = v.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.add = function add(v, w) {\n\t\t\tif (w !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.');\n\t\t\t\treturn this.addVectors(v, w);\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\tthis.z += v.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addScalar = function addScalar(s) {\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\tthis.z += s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addVectors = function addVectors(a, b) {\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\tthis.z = a.z + b.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addScaledVector = function addScaledVector(v, s) {\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\tthis.z += v.z * s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.sub = function sub(v, w) {\n\t\t\tif (w !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.');\n\t\t\t\treturn this.subVectors(v, w);\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\tthis.z -= v.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.subScalar = function subScalar(s) {\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\tthis.z -= s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.subVectors = function subVectors(a, b) {\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\tthis.z = a.z - b.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiply = function multiply(v, w) {\n\t\t\tif (w !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.');\n\t\t\t\treturn this.multiplyVectors(v, w);\n\t\t\t}\n\n\t\t\tthis.x *= v.x;\n\t\t\tthis.y *= v.y;\n\t\t\tthis.z *= v.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiplyScalar = function multiplyScalar(scalar) {\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\tthis.z *= scalar;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiplyVectors = function multiplyVectors(a, b) {\n\t\t\tthis.x = a.x * b.x;\n\t\t\tthis.y = a.y * b.y;\n\t\t\tthis.z = a.z * b.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.applyEuler = function applyEuler(euler) {\n\t\t\tif (!(euler && euler.isEuler)) {\n\t\t\t\tconsole.error('THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.');\n\t\t\t}\n\n\t\t\treturn this.applyQuaternion(_quaternion.setFromEuler(euler));\n\t\t};\n\n\t\t_proto.applyAxisAngle = function applyAxisAngle(axis, angle) {\n\t\t\treturn this.applyQuaternion(_quaternion.setFromAxisAngle(axis, angle));\n\t\t};\n\n\t\t_proto.applyMatrix3 = function applyMatrix3(m) {\n\t\t\tvar x = this.x,\n\t\t\t\t\ty = this.y,\n\t\t\t\t\tz = this.z;\n\t\t\tvar e = m.elements;\n\t\t\tthis.x = e[0] * x + e[3] * y + e[6] * z;\n\t\t\tthis.y = e[1] * x + e[4] * y + e[7] * z;\n\t\t\tthis.z = e[2] * x + e[5] * y + e[8] * z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.applyNormalMatrix = function applyNormalMatrix(m) {\n\t\t\treturn this.applyMatrix3(m).normalize();\n\t\t};\n\n\t\t_proto.applyMatrix4 = function applyMatrix4(m) {\n\t\t\tvar x = this.x,\n\t\t\t\t\ty = this.y,\n\t\t\t\t\tz = this.z;\n\t\t\tvar e = m.elements;\n\t\t\tvar w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\n\t\t\tthis.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\n\t\t\tthis.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\n\t\t\tthis.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.applyQuaternion = function applyQuaternion(q) {\n\t\t\tvar x = this.x,\n\t\t\t\t\ty = this.y,\n\t\t\t\t\tz = this.z;\n\t\t\tvar qx = q.x,\n\t\t\t\t\tqy = q.y,\n\t\t\t\t\tqz = q.z,\n\t\t\t\t\tqw = q.w; // calculate quat * vector\n\n\t\t\tvar ix = qw * x + qy * z - qz * y;\n\t\t\tvar iy = qw * y + qz * x - qx * z;\n\t\t\tvar iz = qw * z + qx * y - qy * x;\n\t\t\tvar iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n\t\t\tthis.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n\t\t\tthis.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n\t\t\tthis.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.project = function project(camera) {\n\t\t\treturn this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(camera.projectionMatrix);\n\t\t};\n\n\t\t_proto.unproject = function unproject(camera) {\n\t\t\treturn this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(camera.matrixWorld);\n\t\t};\n\n\t\t_proto.transformDirection = function transformDirection(m) {\n\t\t\t// input: THREE.Matrix4 affine matrix\n\t\t\t// vector interpreted as a direction\n\t\t\tvar x = this.x,\n\t\t\t\t\ty = this.y,\n\t\t\t\t\tz = this.z;\n\t\t\tvar e = m.elements;\n\t\t\tthis.x = e[0] * x + e[4] * y + e[8] * z;\n\t\t\tthis.y = e[1] * x + e[5] * y + e[9] * z;\n\t\t\tthis.z = e[2] * x + e[6] * y + e[10] * z;\n\t\t\treturn this.normalize();\n\t\t};\n\n\t\t_proto.divide = function divide(v) {\n\t\t\tthis.x /= v.x;\n\t\t\tthis.y /= v.y;\n\t\t\tthis.z /= v.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.divideScalar = function divideScalar(scalar) {\n\t\t\treturn this.multiplyScalar(1 / scalar);\n\t\t};\n\n\t\t_proto.min = function min(v) {\n\t\t\tthis.x = Math.min(this.x, v.x);\n\t\t\tthis.y = Math.min(this.y, v.y);\n\t\t\tthis.z = Math.min(this.z, v.z);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.max = function max(v) {\n\t\t\tthis.x = Math.max(this.x, v.x);\n\t\t\tthis.y = Math.max(this.y, v.y);\n\t\t\tthis.z = Math.max(this.z, v.z);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clamp = function clamp(min, max) {\n\t\t\t// assumes min < max, componentwise\n\t\t\tthis.x = Math.max(min.x, Math.min(max.x, this.x));\n\t\t\tthis.y = Math.max(min.y, Math.min(max.y, this.y));\n\t\t\tthis.z = Math.max(min.z, Math.min(max.z, this.z));\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clampScalar = function clampScalar(minVal, maxVal) {\n\t\t\tthis.x = Math.max(minVal, Math.min(maxVal, this.x));\n\t\t\tthis.y = Math.max(minVal, Math.min(maxVal, this.y));\n\t\t\tthis.z = Math.max(minVal, Math.min(maxVal, this.z));\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clampLength = function clampLength(min, max) {\n\t\t\tvar length = this.length();\n\t\t\treturn this.divideScalar(length || 1).multiplyScalar(Math.max(min, Math.min(max, length)));\n\t\t};\n\n\t\t_proto.floor = function floor() {\n\t\t\tthis.x = Math.floor(this.x);\n\t\t\tthis.y = Math.floor(this.y);\n\t\t\tthis.z = Math.floor(this.z);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.ceil = function ceil() {\n\t\t\tthis.x = Math.ceil(this.x);\n\t\t\tthis.y = Math.ceil(this.y);\n\t\t\tthis.z = Math.ceil(this.z);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.round = function round() {\n\t\t\tthis.x = Math.round(this.x);\n\t\t\tthis.y = Math.round(this.y);\n\t\t\tthis.z = Math.round(this.z);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.roundToZero = function roundToZero() {\n\t\t\tthis.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x);\n\t\t\tthis.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y);\n\t\t\tthis.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.negate = function negate() {\n\t\t\tthis.x = -this.x;\n\t\t\tthis.y = -this.y;\n\t\t\tthis.z = -this.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.dot = function dot(v) {\n\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\t\t} // TODO lengthSquared?\n\t\t;\n\n\t\t_proto.lengthSq = function lengthSq() {\n\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\t\t};\n\n\t\t_proto.length = function length() {\n\t\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n\t\t};\n\n\t\t_proto.manhattanLength = function manhattanLength() {\n\t\t\treturn Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n\t\t};\n\n\t\t_proto.normalize = function normalize() {\n\t\t\treturn this.divideScalar(this.length() || 1);\n\t\t};\n\n\t\t_proto.setLength = function setLength(length) {\n\t\t\treturn this.normalize().multiplyScalar(length);\n\t\t};\n\n\t\t_proto.lerp = function lerp(v, alpha) {\n\t\t\tthis.x += (v.x - this.x) * alpha;\n\t\t\tthis.y += (v.y - this.y) * alpha;\n\t\t\tthis.z += (v.z - this.z) * alpha;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.lerpVectors = function lerpVectors(v1, v2, alpha) {\n\t\t\tthis.x = v1.x + (v2.x - v1.x) * alpha;\n\t\t\tthis.y = v1.y + (v2.y - v1.y) * alpha;\n\t\t\tthis.z = v1.z + (v2.z - v1.z) * alpha;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.cross = function cross(v, w) {\n\t\t\tif (w !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.');\n\t\t\t\treturn this.crossVectors(v, w);\n\t\t\t}\n\n\t\t\treturn this.crossVectors(this, v);\n\t\t};\n\n\t\t_proto.crossVectors = function crossVectors(a, b) {\n\t\t\tvar ax = a.x,\n\t\t\t\t\tay = a.y,\n\t\t\t\t\taz = a.z;\n\t\t\tvar bx = b.x,\n\t\t\t\t\tby = b.y,\n\t\t\t\t\tbz = b.z;\n\t\t\tthis.x = ay * bz - az * by;\n\t\t\tthis.y = az * bx - ax * bz;\n\t\t\tthis.z = ax * by - ay * bx;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.projectOnVector = function projectOnVector(v) {\n\t\t\tvar denominator = v.lengthSq();\n\t\t\tif (denominator === 0) return this.set(0, 0, 0);\n\t\t\tvar scalar = v.dot(this) / denominator;\n\t\t\treturn this.copy(v).multiplyScalar(scalar);\n\t\t};\n\n\t\t_proto.projectOnPlane = function projectOnPlane(planeNormal) {\n\t\t\t_vector.copy(this).projectOnVector(planeNormal);\n\n\t\t\treturn this.sub(_vector);\n\t\t};\n\n\t\t_proto.reflect = function reflect(normal) {\n\t\t\t// reflect incident vector off plane orthogonal to normal\n\t\t\t// normal is assumed to have unit length\n\t\t\treturn this.sub(_vector.copy(normal).multiplyScalar(2 * this.dot(normal)));\n\t\t};\n\n\t\t_proto.angleTo = function angleTo(v) {\n\t\t\tvar denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n\t\t\tif (denominator === 0) return Math.PI / 2;\n\t\t\tvar theta = this.dot(v) / denominator; // clamp, to handle numerical problems\n\n\t\t\treturn Math.acos(MathUtils.clamp(theta, -1, 1));\n\t\t};\n\n\t\t_proto.distanceTo = function distanceTo(v) {\n\t\t\treturn Math.sqrt(this.distanceToSquared(v));\n\t\t};\n\n\t\t_proto.distanceToSquared = function distanceToSquared(v) {\n\t\t\tvar dx = this.x - v.x,\n\t\t\t\t\tdy = this.y - v.y,\n\t\t\t\t\tdz = this.z - v.z;\n\t\t\treturn dx * dx + dy * dy + dz * dz;\n\t\t};\n\n\t\t_proto.manhattanDistanceTo = function manhattanDistanceTo(v) {\n\t\t\treturn Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z);\n\t\t};\n\n\t\t_proto.setFromSpherical = function setFromSpherical(s) {\n\t\t\treturn this.setFromSphericalCoords(s.radius, s.phi, s.theta);\n\t\t};\n\n\t\t_proto.setFromSphericalCoords = function setFromSphericalCoords(radius, phi, theta) {\n\t\t\tvar sinPhiRadius = Math.sin(phi) * radius;\n\t\t\tthis.x = sinPhiRadius * Math.sin(theta);\n\t\t\tthis.y = Math.cos(phi) * radius;\n\t\t\tthis.z = sinPhiRadius * Math.cos(theta);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromCylindrical = function setFromCylindrical(c) {\n\t\t\treturn this.setFromCylindricalCoords(c.radius, c.theta, c.y);\n\t\t};\n\n\t\t_proto.setFromCylindricalCoords = function setFromCylindricalCoords(radius, theta, y) {\n\t\t\tthis.x = radius * Math.sin(theta);\n\t\t\tthis.y = y;\n\t\t\tthis.z = radius * Math.cos(theta);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromMatrixPosition = function setFromMatrixPosition(m) {\n\t\t\tvar e = m.elements;\n\t\t\tthis.x = e[12];\n\t\t\tthis.y = e[13];\n\t\t\tthis.z = e[14];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromMatrixScale = function setFromMatrixScale(m) {\n\t\t\tvar sx = this.setFromMatrixColumn(m, 0).length();\n\t\t\tvar sy = this.setFromMatrixColumn(m, 1).length();\n\t\t\tvar sz = this.setFromMatrixColumn(m, 2).length();\n\t\t\tthis.x = sx;\n\t\t\tthis.y = sy;\n\t\t\tthis.z = sz;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromMatrixColumn = function setFromMatrixColumn(m, index) {\n\t\t\treturn this.fromArray(m.elements, index * 4);\n\t\t};\n\n\t\t_proto.setFromMatrix3Column = function setFromMatrix3Column(m, index) {\n\t\t\treturn this.fromArray(m.elements, index * 3);\n\t\t};\n\n\t\t_proto.equals = function equals(v) {\n\t\t\treturn v.x === this.x && v.y === this.y && v.z === this.z;\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tthis.x = array[offset];\n\t\t\tthis.y = array[offset + 1];\n\t\t\tthis.z = array[offset + 2];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tarray[offset] = this.x;\n\t\t\tarray[offset + 1] = this.y;\n\t\t\tarray[offset + 2] = this.z;\n\t\t\treturn array;\n\t\t};\n\n\t\t_proto.fromBufferAttribute = function fromBufferAttribute(attribute, index, offset) {\n\t\t\tif (offset !== undefined) {\n\t\t\t\tconsole.warn('THREE.Vector3: offset has been removed from .fromBufferAttribute().');\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX(index);\n\t\t\tthis.y = attribute.getY(index);\n\t\t\tthis.z = attribute.getZ(index);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.random = function random() {\n\t\t\tthis.x = Math.random();\n\t\t\tthis.y = Math.random();\n\t\t\tthis.z = Math.random();\n\t\t\treturn this;\n\t\t};\n\n\t\treturn Vector3;\n\t}();\n\n\tvar _vector = /*@__PURE__*/new Vector3();\n\n\tvar _quaternion = /*@__PURE__*/new Quaternion();\n\n\tvar Box3 = /*#__PURE__*/function () {\n\t\tfunction Box3(min, max) {\n\t\t\tObject.defineProperty(this, 'isBox3', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.min = min !== undefined ? min : new Vector3(+Infinity, +Infinity, +Infinity);\n\t\t\tthis.max = max !== undefined ? max : new Vector3(-Infinity, -Infinity, -Infinity);\n\t\t}\n\n\t\tvar _proto = Box3.prototype;\n\n\t\t_proto.set = function set(min, max) {\n\t\t\tthis.min.copy(min);\n\t\t\tthis.max.copy(max);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromArray = function setFromArray(array) {\n\t\t\tvar minX = +Infinity;\n\t\t\tvar minY = +Infinity;\n\t\t\tvar minZ = +Infinity;\n\t\t\tvar maxX = -Infinity;\n\t\t\tvar maxY = -Infinity;\n\t\t\tvar maxZ = -Infinity;\n\n\t\t\tfor (var i = 0, l = array.length; i < l; i += 3) {\n\t\t\t\tvar x = array[i];\n\t\t\t\tvar y = array[i + 1];\n\t\t\t\tvar z = array[i + 2];\n\t\t\t\tif (x < minX) minX = x;\n\t\t\t\tif (y < minY) minY = y;\n\t\t\t\tif (z < minZ) minZ = z;\n\t\t\t\tif (x > maxX) maxX = x;\n\t\t\t\tif (y > maxY) maxY = y;\n\t\t\t\tif (z > maxZ) maxZ = z;\n\t\t\t}\n\n\t\t\tthis.min.set(minX, minY, minZ);\n\t\t\tthis.max.set(maxX, maxY, maxZ);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromBufferAttribute = function setFromBufferAttribute(attribute) {\n\t\t\tvar minX = +Infinity;\n\t\t\tvar minY = +Infinity;\n\t\t\tvar minZ = +Infinity;\n\t\t\tvar maxX = -Infinity;\n\t\t\tvar maxY = -Infinity;\n\t\t\tvar maxZ = -Infinity;\n\n\t\t\tfor (var i = 0, l = attribute.count; i < l; i++) {\n\t\t\t\tvar x = attribute.getX(i);\n\t\t\t\tvar y = attribute.getY(i);\n\t\t\t\tvar z = attribute.getZ(i);\n\t\t\t\tif (x < minX) minX = x;\n\t\t\t\tif (y < minY) minY = y;\n\t\t\t\tif (z < minZ) minZ = z;\n\t\t\t\tif (x > maxX) maxX = x;\n\t\t\t\tif (y > maxY) maxY = y;\n\t\t\t\tif (z > maxZ) maxZ = z;\n\t\t\t}\n\n\t\t\tthis.min.set(minX, minY, minZ);\n\t\t\tthis.max.set(maxX, maxY, maxZ);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromPoints = function setFromPoints(points) {\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor (var i = 0, il = points.length; i < il; i++) {\n\t\t\t\tthis.expandByPoint(points[i]);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromCenterAndSize = function setFromCenterAndSize(center, size) {\n\t\t\tvar halfSize = _vector$1.copy(size).multiplyScalar(0.5);\n\n\t\t\tthis.min.copy(center).sub(halfSize);\n\t\t\tthis.max.copy(center).add(halfSize);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromObject = function setFromObject(object) {\n\t\t\tthis.makeEmpty();\n\t\t\treturn this.expandByObject(object);\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(box) {\n\t\t\tthis.min.copy(box.min);\n\t\t\tthis.max.copy(box.max);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeEmpty = function makeEmpty() {\n\t\t\tthis.min.x = this.min.y = this.min.z = +Infinity;\n\t\t\tthis.max.x = this.max.y = this.max.z = -Infinity;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.isEmpty = function isEmpty() {\n\t\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\t\t\treturn this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z;\n\t\t};\n\n\t\t_proto.getCenter = function getCenter(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Box3: .getCenter() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set(0, 0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5);\n\t\t};\n\n\t\t_proto.getSize = function getSize(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Box3: .getSize() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set(0, 0, 0) : target.subVectors(this.max, this.min);\n\t\t};\n\n\t\t_proto.expandByPoint = function expandByPoint(point) {\n\t\t\tthis.min.min(point);\n\t\t\tthis.max.max(point);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.expandByVector = function expandByVector(vector) {\n\t\t\tthis.min.sub(vector);\n\t\t\tthis.max.add(vector);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.expandByScalar = function expandByScalar(scalar) {\n\t\t\tthis.min.addScalar(-scalar);\n\t\t\tthis.max.addScalar(scalar);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.expandByObject = function expandByObject(object) {\n\t\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t\t// accounting for both the object's, and children's, world transforms\n\t\t\tobject.updateWorldMatrix(false, false);\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif (geometry !== undefined) {\n\t\t\t\tif (geometry.boundingBox === null) {\n\t\t\t\t\tgeometry.computeBoundingBox();\n\t\t\t\t}\n\n\t\t\t\t_box.copy(geometry.boundingBox);\n\n\t\t\t\t_box.applyMatrix4(object.matrixWorld);\n\n\t\t\t\tthis.union(_box);\n\t\t\t}\n\n\t\t\tvar children = object.children;\n\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tthis.expandByObject(children[i]);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.containsPoint = function containsPoint(point) {\n\t\t\treturn point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y || point.z < this.min.z || point.z > this.max.z ? false : true;\n\t\t};\n\n\t\t_proto.containsBox = function containsBox(box) {\n\t\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z;\n\t\t};\n\n\t\t_proto.getParameter = function getParameter(point, target) {\n\t\t\t// This can potentially have a divide by zero if the box\n\t\t\t// has a size dimension of 0.\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Box3: .getParameter() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y), (point.z - this.min.z) / (this.max.z - this.min.z));\n\t\t};\n\n\t\t_proto.intersectsBox = function intersectsBox(box) {\n\t\t\t// using 6 splitting planes to rule out intersections.\n\t\t\treturn box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y || box.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\t\t};\n\n\t\t_proto.intersectsSphere = function intersectsSphere(sphere) {\n\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\tthis.clampPoint(sphere.center, _vector$1); // If that point is inside the sphere, the AABB and sphere intersect.\n\n\t\t\treturn _vector$1.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius;\n\t\t};\n\n\t\t_proto.intersectsPlane = function intersectsPlane(plane) {\n\t\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\t\t\tvar min, max;\n\n\t\t\tif (plane.normal.x > 0) {\n\t\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\t\tmax = plane.normal.x * this.max.x;\n\t\t\t} else {\n\t\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\t\tmax = plane.normal.x * this.min.x;\n\t\t\t}\n\n\t\t\tif (plane.normal.y > 0) {\n\t\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\t\tmax += plane.normal.y * this.max.y;\n\t\t\t} else {\n\t\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\t\tmax += plane.normal.y * this.min.y;\n\t\t\t}\n\n\t\t\tif (plane.normal.z > 0) {\n\t\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\t\tmax += plane.normal.z * this.max.z;\n\t\t\t} else {\n\t\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\t\tmax += plane.normal.z * this.min.z;\n\t\t\t}\n\n\t\t\treturn min <= -plane.constant && max >= -plane.constant;\n\t\t};\n\n\t\t_proto.intersectsTriangle = function intersectsTriangle(triangle) {\n\t\t\tif (this.isEmpty()) {\n\t\t\t\treturn false;\n\t\t\t} // compute box center and extents\n\n\n\t\t\tthis.getCenter(_center);\n\n\t\t\t_extents.subVectors(this.max, _center); // translate triangle to aabb origin\n\n\n\t\t\t_v0.subVectors(triangle.a, _center);\n\n\t\t\t_v1.subVectors(triangle.b, _center);\n\n\t\t\t_v2.subVectors(triangle.c, _center); // compute edge vectors for triangle\n\n\n\t\t\t_f0.subVectors(_v1, _v0);\n\n\t\t\t_f1.subVectors(_v2, _v1);\n\n\t\t\t_f2.subVectors(_v0, _v2); // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\n\n\t\t\tvar axes = [0, -_f0.z, _f0.y, 0, -_f1.z, _f1.y, 0, -_f2.z, _f2.y, _f0.z, 0, -_f0.x, _f1.z, 0, -_f1.x, _f2.z, 0, -_f2.x, -_f0.y, _f0.x, 0, -_f1.y, _f1.x, 0, -_f2.y, _f2.x, 0];\n\n\t\t\tif (!satForAxes(axes, _v0, _v1, _v2, _extents)) {\n\t\t\t\treturn false;\n\t\t\t} // test 3 face normals from the aabb\n\n\n\t\t\taxes = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n\t\t\tif (!satForAxes(axes, _v0, _v1, _v2, _extents)) {\n\t\t\t\treturn false;\n\t\t\t} // finally testing the face normal of the triangle\n\t\t\t// use already existing triangle edge vectors here\n\n\n\t\t\t_triangleNormal.crossVectors(_f0, _f1);\n\n\t\t\taxes = [_triangleNormal.x, _triangleNormal.y, _triangleNormal.z];\n\t\t\treturn satForAxes(axes, _v0, _v1, _v2, _extents);\n\t\t};\n\n\t\t_proto.clampPoint = function clampPoint(point, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Box3: .clampPoint() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn target.copy(point).clamp(this.min, this.max);\n\t\t};\n\n\t\t_proto.distanceToPoint = function distanceToPoint(point) {\n\t\t\tvar clampedPoint = _vector$1.copy(point).clamp(this.min, this.max);\n\n\t\t\treturn clampedPoint.sub(point).length();\n\t\t};\n\n\t\t_proto.getBoundingSphere = function getBoundingSphere(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.error('THREE.Box3: .getBoundingSphere() target is now required'); //target = new Sphere(); // removed to avoid cyclic dependency\n\t\t\t}\n\n\t\t\tthis.getCenter(target.center);\n\t\t\ttarget.radius = this.getSize(_vector$1).length() * 0.5;\n\t\t\treturn target;\n\t\t};\n\n\t\t_proto.intersect = function intersect(box) {\n\t\t\tthis.min.max(box.min);\n\t\t\tthis.max.min(box.max); // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\n\t\t\tif (this.isEmpty()) this.makeEmpty();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.union = function union(box) {\n\t\t\tthis.min.min(box.min);\n\t\t\tthis.max.max(box.max);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.applyMatrix4 = function applyMatrix4(matrix) {\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif (this.isEmpty()) return this; // NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\n\t\t\t_points[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(matrix); // 000\n\n\n\t\t\t_points[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(matrix); // 001\n\n\n\t\t\t_points[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(matrix); // 010\n\n\n\t\t\t_points[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(matrix); // 011\n\n\n\t\t\t_points[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(matrix); // 100\n\n\n\t\t\t_points[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(matrix); // 101\n\n\n\t\t\t_points[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(matrix); // 110\n\n\n\t\t\t_points[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(matrix); // 111\n\n\n\t\t\tthis.setFromPoints(_points);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.translate = function translate(offset) {\n\t\t\tthis.min.add(offset);\n\t\t\tthis.max.add(offset);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(box) {\n\t\t\treturn box.min.equals(this.min) && box.max.equals(this.max);\n\t\t};\n\n\t\treturn Box3;\n\t}();\n\n\tfunction satForAxes(axes, v0, v1, v2, extents) {\n\t\tfor (var i = 0, j = axes.length - 3; i <= j; i += 3) {\n\t\t\t_testAxis.fromArray(axes, i); // project the aabb onto the seperating axis\n\n\n\t\t\tvar r = extents.x * Math.abs(_testAxis.x) + extents.y * Math.abs(_testAxis.y) + extents.z * Math.abs(_testAxis.z); // project all 3 vertices of the triangle onto the seperating axis\n\n\t\t\tvar p0 = v0.dot(_testAxis);\n\t\t\tvar p1 = v1.dot(_testAxis);\n\t\t\tvar p2 = v2.dot(_testAxis); // actual test, basically see if either of the most extreme of the triangle points intersects r\n\n\t\t\tif (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\n\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tvar _points = [/*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3(), /*@__PURE__*/new Vector3()];\n\n\tvar _vector$1 = /*@__PURE__*/new Vector3();\n\n\tvar _box = /*@__PURE__*/new Box3(); // triangle centered vertices\n\n\n\tvar _v0 = /*@__PURE__*/new Vector3();\n\n\tvar _v1 = /*@__PURE__*/new Vector3();\n\n\tvar _v2 = /*@__PURE__*/new Vector3(); // triangle edge vectors\n\n\n\tvar _f0 = /*@__PURE__*/new Vector3();\n\n\tvar _f1 = /*@__PURE__*/new Vector3();\n\n\tvar _f2 = /*@__PURE__*/new Vector3();\n\n\tvar _center = /*@__PURE__*/new Vector3();\n\n\tvar _extents = /*@__PURE__*/new Vector3();\n\n\tvar _triangleNormal = /*@__PURE__*/new Vector3();\n\n\tvar _testAxis = /*@__PURE__*/new Vector3();\n\n\tvar _box$1 = /*@__PURE__*/new Box3();\n\n\tvar Sphere = /*#__PURE__*/function () {\n\t\tfunction Sphere(center, radius) {\n\t\t\tthis.center = center !== undefined ? center : new Vector3();\n\t\t\tthis.radius = radius !== undefined ? radius : -1;\n\t\t}\n\n\t\tvar _proto = Sphere.prototype;\n\n\t\t_proto.set = function set(center, radius) {\n\t\t\tthis.center.copy(center);\n\t\t\tthis.radius = radius;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromPoints = function setFromPoints(points, optionalCenter) {\n\t\t\tvar center = this.center;\n\n\t\t\tif (optionalCenter !== undefined) {\n\t\t\t\tcenter.copy(optionalCenter);\n\t\t\t} else {\n\t\t\t\t_box$1.setFromPoints(points).getCenter(center);\n\t\t\t}\n\n\t\t\tvar maxRadiusSq = 0;\n\n\t\t\tfor (var i = 0, il = points.length; i < il; i++) {\n\t\t\t\tmaxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(points[i]));\n\t\t\t}\n\n\t\t\tthis.radius = Math.sqrt(maxRadiusSq);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(sphere) {\n\t\t\tthis.center.copy(sphere.center);\n\t\t\tthis.radius = sphere.radius;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.isEmpty = function isEmpty() {\n\t\t\treturn this.radius < 0;\n\t\t};\n\n\t\t_proto.makeEmpty = function makeEmpty() {\n\t\t\tthis.center.set(0, 0, 0);\n\t\t\tthis.radius = -1;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.containsPoint = function containsPoint(point) {\n\t\t\treturn point.distanceToSquared(this.center) <= this.radius * this.radius;\n\t\t};\n\n\t\t_proto.distanceToPoint = function distanceToPoint(point) {\n\t\t\treturn point.distanceTo(this.center) - this.radius;\n\t\t};\n\n\t\t_proto.intersectsSphere = function intersectsSphere(sphere) {\n\t\t\tvar radiusSum = this.radius + sphere.radius;\n\t\t\treturn sphere.center.distanceToSquared(this.center) <= radiusSum * radiusSum;\n\t\t};\n\n\t\t_proto.intersectsBox = function intersectsBox(box) {\n\t\t\treturn box.intersectsSphere(this);\n\t\t};\n\n\t\t_proto.intersectsPlane = function intersectsPlane(plane) {\n\t\t\treturn Math.abs(plane.distanceToPoint(this.center)) <= this.radius;\n\t\t};\n\n\t\t_proto.clampPoint = function clampPoint(point, target) {\n\t\t\tvar deltaLengthSq = this.center.distanceToSquared(point);\n\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Sphere: .clampPoint() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\ttarget.copy(point);\n\n\t\t\tif (deltaLengthSq > this.radius * this.radius) {\n\t\t\t\ttarget.sub(this.center).normalize();\n\t\t\t\ttarget.multiplyScalar(this.radius).add(this.center);\n\t\t\t}\n\n\t\t\treturn target;\n\t\t};\n\n\t\t_proto.getBoundingBox = function getBoundingBox(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Sphere: .getBoundingBox() target is now required');\n\t\t\t\ttarget = new Box3();\n\t\t\t}\n\n\t\t\tif (this.isEmpty()) {\n\t\t\t\t// Empty sphere produces empty bounding box\n\t\t\t\ttarget.makeEmpty();\n\t\t\t\treturn target;\n\t\t\t}\n\n\t\t\ttarget.set(this.center, this.center);\n\t\t\ttarget.expandByScalar(this.radius);\n\t\t\treturn target;\n\t\t};\n\n\t\t_proto.applyMatrix4 = function applyMatrix4(matrix) {\n\t\t\tthis.center.applyMatrix4(matrix);\n\t\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.translate = function translate(offset) {\n\t\t\tthis.center.add(offset);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(sphere) {\n\t\t\treturn sphere.center.equals(this.center) && sphere.radius === this.radius;\n\t\t};\n\n\t\treturn Sphere;\n\t}();\n\n\tvar _vector$2 = /*@__PURE__*/new Vector3();\n\n\tvar _segCenter = /*@__PURE__*/new Vector3();\n\n\tvar _segDir = /*@__PURE__*/new Vector3();\n\n\tvar _diff = /*@__PURE__*/new Vector3();\n\n\tvar _edge1 = /*@__PURE__*/new Vector3();\n\n\tvar _edge2 = /*@__PURE__*/new Vector3();\n\n\tvar _normal = /*@__PURE__*/new Vector3();\n\n\tvar Ray = /*#__PURE__*/function () {\n\t\tfunction Ray(origin, direction) {\n\t\t\tthis.origin = origin !== undefined ? origin : new Vector3();\n\t\t\tthis.direction = direction !== undefined ? direction : new Vector3(0, 0, -1);\n\t\t}\n\n\t\tvar _proto = Ray.prototype;\n\n\t\t_proto.set = function set(origin, direction) {\n\t\t\tthis.origin.copy(origin);\n\t\t\tthis.direction.copy(direction);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(ray) {\n\t\t\tthis.origin.copy(ray.origin);\n\t\t\tthis.direction.copy(ray.direction);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.at = function at(t, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Ray: .at() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn target.copy(this.direction).multiplyScalar(t).add(this.origin);\n\t\t};\n\n\t\t_proto.lookAt = function lookAt(v) {\n\t\t\tthis.direction.copy(v).sub(this.origin).normalize();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.recast = function recast(t) {\n\t\t\tthis.origin.copy(this.at(t, _vector$2));\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.closestPointToPoint = function closestPointToPoint(point, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Ray: .closestPointToPoint() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\ttarget.subVectors(point, this.origin);\n\t\t\tvar directionDistance = target.dot(this.direction);\n\n\t\t\tif (directionDistance < 0) {\n\t\t\t\treturn target.copy(this.origin);\n\t\t\t}\n\n\t\t\treturn target.copy(this.direction).multiplyScalar(directionDistance).add(this.origin);\n\t\t};\n\n\t\t_proto.distanceToPoint = function distanceToPoint(point) {\n\t\t\treturn Math.sqrt(this.distanceSqToPoint(point));\n\t\t};\n\n\t\t_proto.distanceSqToPoint = function distanceSqToPoint(point) {\n\t\t\tvar directionDistance = _vector$2.subVectors(point, this.origin).dot(this.direction); // point behind the ray\n\n\n\t\t\tif (directionDistance < 0) {\n\t\t\t\treturn this.origin.distanceToSquared(point);\n\t\t\t}\n\n\t\t\t_vector$2.copy(this.direction).multiplyScalar(directionDistance).add(this.origin);\n\n\t\t\treturn _vector$2.distanceToSquared(point);\n\t\t};\n\n\t\t_proto.distanceSqToSegment = function distanceSqToSegment(v0, v1, optionalPointOnRay, optionalPointOnSegment) {\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t// defined by v0 and v1\n\t\t\t// It can also set two optional targets :\n\t\t\t// - The closest point on the ray\n\t\t\t// - The closest point on the segment\n\t\t\t_segCenter.copy(v0).add(v1).multiplyScalar(0.5);\n\n\t\t\t_segDir.copy(v1).sub(v0).normalize();\n\n\t\t\t_diff.copy(this.origin).sub(_segCenter);\n\n\t\t\tvar segExtent = v0.distanceTo(v1) * 0.5;\n\t\t\tvar a01 = -this.direction.dot(_segDir);\n\n\t\t\tvar b0 = _diff.dot(this.direction);\n\n\t\t\tvar b1 = -_diff.dot(_segDir);\n\n\t\t\tvar c = _diff.lengthSq();\n\n\t\t\tvar det = Math.abs(1 - a01 * a01);\n\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\tif (det > 0) {\n\t\t\t\t// The ray and segment are not parallel.\n\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\textDet = segExtent * det;\n\n\t\t\t\tif (s0 >= 0) {\n\t\t\t\t\tif (s1 >= -extDet) {\n\t\t\t\t\t\tif (s1 <= extDet) {\n\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\tsqrDist = s0 * (s0 + a01 * s1 + 2 * b0) + s1 * (a01 * s0 + s1 + 2 * b1) + c;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// region 1\n\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\ts0 = Math.max(0, -(a01 * s1 + b0));\n\t\t\t\t\t\t\tsqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// region 5\n\t\t\t\t\t\ts1 = -segExtent;\n\t\t\t\t\t\ts0 = Math.max(0, -(a01 * s1 + b0));\n\t\t\t\t\t\tsqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (s1 <= -extDet) {\n\t\t\t\t\t\t// region 4\n\t\t\t\t\t\ts0 = Math.max(0, -(-a01 * segExtent + b0));\n\t\t\t\t\t\ts1 = s0 > 0 ? -segExtent : Math.min(Math.max(-segExtent, -b1), segExtent);\n\t\t\t\t\t\tsqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n\t\t\t\t\t} else if (s1 <= extDet) {\n\t\t\t\t\t\t// region 3\n\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\ts1 = Math.min(Math.max(-segExtent, -b1), segExtent);\n\t\t\t\t\t\tsqrDist = s1 * (s1 + 2 * b1) + c;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// region 2\n\t\t\t\t\t\ts0 = Math.max(0, -(a01 * segExtent + b0));\n\t\t\t\t\t\ts1 = s0 > 0 ? segExtent : Math.min(Math.max(-segExtent, -b1), segExtent);\n\t\t\t\t\t\tsqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Ray and segment are parallel.\n\t\t\t\ts1 = a01 > 0 ? -segExtent : segExtent;\n\t\t\t\ts0 = Math.max(0, -(a01 * s1 + b0));\n\t\t\t\tsqrDist = -s0 * s0 + s1 * (s1 + 2 * b1) + c;\n\t\t\t}\n\n\t\t\tif (optionalPointOnRay) {\n\t\t\t\toptionalPointOnRay.copy(this.direction).multiplyScalar(s0).add(this.origin);\n\t\t\t}\n\n\t\t\tif (optionalPointOnSegment) {\n\t\t\t\toptionalPointOnSegment.copy(_segDir).multiplyScalar(s1).add(_segCenter);\n\t\t\t}\n\n\t\t\treturn sqrDist;\n\t\t};\n\n\t\t_proto.intersectSphere = function intersectSphere(sphere, target) {\n\t\t\t_vector$2.subVectors(sphere.center, this.origin);\n\n\t\t\tvar tca = _vector$2.dot(this.direction);\n\n\t\t\tvar d2 = _vector$2.dot(_vector$2) - tca * tca;\n\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\t\t\tif (d2 > radius2) return null;\n\t\t\tvar thc = Math.sqrt(radius2 - d2); // t0 = first intersect point - entrance on front of sphere\n\n\t\t\tvar t0 = tca - thc; // t1 = second intersect point - exit point on back of sphere\n\n\t\t\tvar t1 = tca + thc; // test to see if both t0 and t1 are behind the ray - if so, return null\n\n\t\t\tif (t0 < 0 && t1 < 0) return null; // test to see if t0 is behind the ray:\n\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t// in order to always return an intersect point that is in front of the ray.\n\n\t\t\tif (t0 < 0) return this.at(t1, target); // else t0 is in front of the ray, so return the first collision point scaled by t0\n\n\t\t\treturn this.at(t0, target);\n\t\t};\n\n\t\t_proto.intersectsSphere = function intersectsSphere(sphere) {\n\t\t\treturn this.distanceSqToPoint(sphere.center) <= sphere.radius * sphere.radius;\n\t\t};\n\n\t\t_proto.distanceToPlane = function distanceToPlane(plane) {\n\t\t\tvar denominator = plane.normal.dot(this.direction);\n\n\t\t\tif (denominator === 0) {\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif (plane.distanceToPoint(this.origin) === 0) {\n\t\t\t\t\treturn 0;\n\t\t\t\t} // Null is preferable to undefined since undefined means.... it is undefined\n\n\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar t = -(this.origin.dot(plane.normal) + plane.constant) / denominator; // Return if the ray never intersects the plane\n\n\t\t\treturn t >= 0 ? t : null;\n\t\t};\n\n\t\t_proto.intersectPlane = function intersectPlane(plane, target) {\n\t\t\tvar t = this.distanceToPlane(plane);\n\n\t\t\tif (t === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn this.at(t, target);\n\t\t};\n\n\t\t_proto.intersectsPlane = function intersectsPlane(plane) {\n\t\t\t// check if the ray lies on the plane first\n\t\t\tvar distToPoint = plane.distanceToPoint(this.origin);\n\n\t\t\tif (distToPoint === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar denominator = plane.normal.dot(this.direction);\n\n\t\t\tif (denominator * distToPoint < 0) {\n\t\t\t\treturn true;\n\t\t\t} // ray origin is behind the plane (and is pointing behind it)\n\n\n\t\t\treturn false;\n\t\t};\n\n\t\t_proto.intersectBox = function intersectBox(box, target) {\n\t\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\t\t\tvar invdirx = 1 / this.direction.x,\n\t\t\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\t\t\tinvdirz = 1 / this.direction.z;\n\t\t\tvar origin = this.origin;\n\n\t\t\tif (invdirx >= 0) {\n\t\t\t\ttmin = (box.min.x - origin.x) * invdirx;\n\t\t\t\ttmax = (box.max.x - origin.x) * invdirx;\n\t\t\t} else {\n\t\t\t\ttmin = (box.max.x - origin.x) * invdirx;\n\t\t\t\ttmax = (box.min.x - origin.x) * invdirx;\n\t\t\t}\n\n\t\t\tif (invdiry >= 0) {\n\t\t\t\ttymin = (box.min.y - origin.y) * invdiry;\n\t\t\t\ttymax = (box.max.y - origin.y) * invdiry;\n\t\t\t} else {\n\t\t\t\ttymin = (box.max.y - origin.y) * invdiry;\n\t\t\t\ttymax = (box.min.y - origin.y) * invdiry;\n\t\t\t}\n\n\t\t\tif (tmin > tymax || tymin > tmax) return null; // These lines also handle the case where tmin or tmax is NaN\n\t\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\t\tif (tymin > tmin || tmin !== tmin) tmin = tymin;\n\t\t\tif (tymax < tmax || tmax !== tmax) tmax = tymax;\n\n\t\t\tif (invdirz >= 0) {\n\t\t\t\ttzmin = (box.min.z - origin.z) * invdirz;\n\t\t\t\ttzmax = (box.max.z - origin.z) * invdirz;\n\t\t\t} else {\n\t\t\t\ttzmin = (box.max.z - origin.z) * invdirz;\n\t\t\t\ttzmax = (box.min.z - origin.z) * invdirz;\n\t\t\t}\n\n\t\t\tif (tmin > tzmax || tzmin > tmax) return null;\n\t\t\tif (tzmin > tmin || tmin !== tmin) tmin = tzmin;\n\t\t\tif (tzmax < tmax || tmax !== tmax) tmax = tzmax; //return point closest to the ray (positive side)\n\n\t\t\tif (tmax < 0) return null;\n\t\t\treturn this.at(tmin >= 0 ? tmin : tmax, target);\n\t\t};\n\n\t\t_proto.intersectsBox = function intersectsBox(box) {\n\t\t\treturn this.intersectBox(box, _vector$2) !== null;\n\t\t};\n\n\t\t_proto.intersectTriangle = function intersectTriangle(a, b, c, backfaceCulling, target) {\n\t\t\t// Compute the offset origin, edges, and normal.\n\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\t\t\t_edge1.subVectors(b, a);\n\n\t\t\t_edge2.subVectors(c, a);\n\n\t\t\t_normal.crossVectors(_edge1, _edge2); // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t//\t |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t//\t |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t//\t |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\n\n\t\t\tvar DdN = this.direction.dot(_normal);\n\t\t\tvar sign;\n\n\t\t\tif (DdN > 0) {\n\t\t\t\tif (backfaceCulling) return null;\n\t\t\t\tsign = 1;\n\t\t\t} else if (DdN < 0) {\n\t\t\t\tsign = -1;\n\t\t\t\tDdN = -DdN;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t_diff.subVectors(this.origin, a);\n\n\t\t\tvar DdQxE2 = sign * this.direction.dot(_edge2.crossVectors(_diff, _edge2)); // b1 < 0, no intersection\n\n\t\t\tif (DdQxE2 < 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar DdE1xQ = sign * this.direction.dot(_edge1.cross(_diff)); // b2 < 0, no intersection\n\n\t\t\tif (DdE1xQ < 0) {\n\t\t\t\treturn null;\n\t\t\t} // b1+b2 > 1, no intersection\n\n\n\t\t\tif (DdQxE2 + DdE1xQ > DdN) {\n\t\t\t\treturn null;\n\t\t\t} // Line intersects triangle, check if ray does.\n\n\n\t\t\tvar QdN = -sign * _diff.dot(_normal); // t < 0, no intersection\n\n\n\t\t\tif (QdN < 0) {\n\t\t\t\treturn null;\n\t\t\t} // Ray intersects triangle.\n\n\n\t\t\treturn this.at(QdN / DdN, target);\n\t\t};\n\n\t\t_proto.applyMatrix4 = function applyMatrix4(matrix4) {\n\t\t\tthis.origin.applyMatrix4(matrix4);\n\t\t\tthis.direction.transformDirection(matrix4);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(ray) {\n\t\t\treturn ray.origin.equals(this.origin) && ray.direction.equals(this.direction);\n\t\t};\n\n\t\treturn Ray;\n\t}();\n\n\tvar Matrix4 = /*#__PURE__*/function () {\n\t\tfunction Matrix4() {\n\t\t\tObject.defineProperty(this, 'isMatrix4', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconsole.error('THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.');\n\t\t\t}\n\t\t}\n\n\t\tvar _proto = Matrix4.prototype;\n\n\t\t_proto.set = function set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {\n\t\t\tvar te = this.elements;\n\t\t\tte[0] = n11;\n\t\t\tte[4] = n12;\n\t\t\tte[8] = n13;\n\t\t\tte[12] = n14;\n\t\t\tte[1] = n21;\n\t\t\tte[5] = n22;\n\t\t\tte[9] = n23;\n\t\t\tte[13] = n24;\n\t\t\tte[2] = n31;\n\t\t\tte[6] = n32;\n\t\t\tte[10] = n33;\n\t\t\tte[14] = n34;\n\t\t\tte[3] = n41;\n\t\t\tte[7] = n42;\n\t\t\tte[11] = n43;\n\t\t\tte[15] = n44;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.identity = function identity() {\n\t\t\tthis.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new Matrix4().fromArray(this.elements);\n\t\t};\n\n\t\t_proto.copy = function copy(m) {\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\t\t\tte[0] = me[0];\n\t\t\tte[1] = me[1];\n\t\t\tte[2] = me[2];\n\t\t\tte[3] = me[3];\n\t\t\tte[4] = me[4];\n\t\t\tte[5] = me[5];\n\t\t\tte[6] = me[6];\n\t\t\tte[7] = me[7];\n\t\t\tte[8] = me[8];\n\t\t\tte[9] = me[9];\n\t\t\tte[10] = me[10];\n\t\t\tte[11] = me[11];\n\t\t\tte[12] = me[12];\n\t\t\tte[13] = me[13];\n\t\t\tte[14] = me[14];\n\t\t\tte[15] = me[15];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.copyPosition = function copyPosition(m) {\n\t\t\tvar te = this.elements,\n\t\t\t\t\tme = m.elements;\n\t\t\tte[12] = me[12];\n\t\t\tte[13] = me[13];\n\t\t\tte[14] = me[14];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.extractBasis = function extractBasis(xAxis, yAxis, zAxis) {\n\t\t\txAxis.setFromMatrixColumn(this, 0);\n\t\t\tyAxis.setFromMatrixColumn(this, 1);\n\t\t\tzAxis.setFromMatrixColumn(this, 2);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeBasis = function makeBasis(xAxis, yAxis, zAxis) {\n\t\t\tthis.set(xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.extractRotation = function extractRotation(m) {\n\t\t\t// this method does not support reflection matrices\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tvar scaleX = 1 / _v1$1.setFromMatrixColumn(m, 0).length();\n\n\t\t\tvar scaleY = 1 / _v1$1.setFromMatrixColumn(m, 1).length();\n\n\t\t\tvar scaleZ = 1 / _v1$1.setFromMatrixColumn(m, 2).length();\n\n\t\t\tte[0] = me[0] * scaleX;\n\t\t\tte[1] = me[1] * scaleX;\n\t\t\tte[2] = me[2] * scaleX;\n\t\t\tte[3] = 0;\n\t\t\tte[4] = me[4] * scaleY;\n\t\t\tte[5] = me[5] * scaleY;\n\t\t\tte[6] = me[6] * scaleY;\n\t\t\tte[7] = 0;\n\t\t\tte[8] = me[8] * scaleZ;\n\t\t\tte[9] = me[9] * scaleZ;\n\t\t\tte[10] = me[10] * scaleZ;\n\t\t\tte[11] = 0;\n\t\t\tte[12] = 0;\n\t\t\tte[13] = 0;\n\t\t\tte[14] = 0;\n\t\t\tte[15] = 1;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeRotationFromEuler = function makeRotationFromEuler(euler) {\n\t\t\tif (!(euler && euler.isEuler)) {\n\t\t\t\tconsole.error('THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.');\n\t\t\t}\n\n\t\t\tvar te = this.elements;\n\t\t\tvar x = euler.x,\n\t\t\t\t\ty = euler.y,\n\t\t\t\t\tz = euler.z;\n\t\t\tvar a = Math.cos(x),\n\t\t\t\t\tb = Math.sin(x);\n\t\t\tvar c = Math.cos(y),\n\t\t\t\t\td = Math.sin(y);\n\t\t\tvar e = Math.cos(z),\n\t\t\t\t\tf = Math.sin(z);\n\n\t\t\tif (euler.order === 'XYZ') {\n\t\t\t\tvar ae = a * e,\n\t\t\t\t\t\taf = a * f,\n\t\t\t\t\t\tbe = b * e,\n\t\t\t\t\t\tbf = b * f;\n\t\t\t\tte[0] = c * e;\n\t\t\t\tte[4] = -c * f;\n\t\t\t\tte[8] = d;\n\t\t\t\tte[1] = af + be * d;\n\t\t\t\tte[5] = ae - bf * d;\n\t\t\t\tte[9] = -b * c;\n\t\t\t\tte[2] = bf - ae * d;\n\t\t\t\tte[6] = be + af * d;\n\t\t\t\tte[10] = a * c;\n\t\t\t} else if (euler.order === 'YXZ') {\n\t\t\t\tvar ce = c * e,\n\t\t\t\t\t\tcf = c * f,\n\t\t\t\t\t\tde = d * e,\n\t\t\t\t\t\tdf = d * f;\n\t\t\t\tte[0] = ce + df * b;\n\t\t\t\tte[4] = de * b - cf;\n\t\t\t\tte[8] = a * d;\n\t\t\t\tte[1] = a * f;\n\t\t\t\tte[5] = a * e;\n\t\t\t\tte[9] = -b;\n\t\t\t\tte[2] = cf * b - de;\n\t\t\t\tte[6] = df + ce * b;\n\t\t\t\tte[10] = a * c;\n\t\t\t} else if (euler.order === 'ZXY') {\n\t\t\t\tvar _ce = c * e,\n\t\t\t\t\t\t_cf = c * f,\n\t\t\t\t\t\t_de = d * e,\n\t\t\t\t\t\t_df = d * f;\n\n\t\t\t\tte[0] = _ce - _df * b;\n\t\t\t\tte[4] = -a * f;\n\t\t\t\tte[8] = _de + _cf * b;\n\t\t\t\tte[1] = _cf + _de * b;\n\t\t\t\tte[5] = a * e;\n\t\t\t\tte[9] = _df - _ce * b;\n\t\t\t\tte[2] = -a * d;\n\t\t\t\tte[6] = b;\n\t\t\t\tte[10] = a * c;\n\t\t\t} else if (euler.order === 'ZYX') {\n\t\t\t\tvar _ae = a * e,\n\t\t\t\t\t\t_af = a * f,\n\t\t\t\t\t\t_be = b * e,\n\t\t\t\t\t\t_bf = b * f;\n\n\t\t\t\tte[0] = c * e;\n\t\t\t\tte[4] = _be * d - _af;\n\t\t\t\tte[8] = _ae * d + _bf;\n\t\t\t\tte[1] = c * f;\n\t\t\t\tte[5] = _bf * d + _ae;\n\t\t\t\tte[9] = _af * d - _be;\n\t\t\t\tte[2] = -d;\n\t\t\t\tte[6] = b * c;\n\t\t\t\tte[10] = a * c;\n\t\t\t} else if (euler.order === 'YZX') {\n\t\t\t\tvar ac = a * c,\n\t\t\t\t\t\tad = a * d,\n\t\t\t\t\t\tbc = b * c,\n\t\t\t\t\t\tbd = b * d;\n\t\t\t\tte[0] = c * e;\n\t\t\t\tte[4] = bd - ac * f;\n\t\t\t\tte[8] = bc * f + ad;\n\t\t\t\tte[1] = f;\n\t\t\t\tte[5] = a * e;\n\t\t\t\tte[9] = -b * e;\n\t\t\t\tte[2] = -d * e;\n\t\t\t\tte[6] = ad * f + bc;\n\t\t\t\tte[10] = ac - bd * f;\n\t\t\t} else if (euler.order === 'XZY') {\n\t\t\t\tvar _ac = a * c,\n\t\t\t\t\t\t_ad = a * d,\n\t\t\t\t\t\t_bc = b * c,\n\t\t\t\t\t\t_bd = b * d;\n\n\t\t\t\tte[0] = c * e;\n\t\t\t\tte[4] = -f;\n\t\t\t\tte[8] = d * e;\n\t\t\t\tte[1] = _ac * f + _bd;\n\t\t\t\tte[5] = a * e;\n\t\t\t\tte[9] = _ad * f - _bc;\n\t\t\t\tte[2] = _bc * f - _ad;\n\t\t\t\tte[6] = b * e;\n\t\t\t\tte[10] = _bd * f + _ac;\n\t\t\t} // bottom row\n\n\n\t\t\tte[3] = 0;\n\t\t\tte[7] = 0;\n\t\t\tte[11] = 0; // last column\n\n\t\t\tte[12] = 0;\n\t\t\tte[13] = 0;\n\t\t\tte[14] = 0;\n\t\t\tte[15] = 1;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeRotationFromQuaternion = function makeRotationFromQuaternion(q) {\n\t\t\treturn this.compose(_zero, q, _one);\n\t\t};\n\n\t\t_proto.lookAt = function lookAt(eye, target, up) {\n\t\t\tvar te = this.elements;\n\n\t\t\t_z.subVectors(eye, target);\n\n\t\t\tif (_z.lengthSq() === 0) {\n\t\t\t\t// eye and target are in the same position\n\t\t\t\t_z.z = 1;\n\t\t\t}\n\n\t\t\t_z.normalize();\n\n\t\t\t_x.crossVectors(up, _z);\n\n\t\t\tif (_x.lengthSq() === 0) {\n\t\t\t\t// up and z are parallel\n\t\t\t\tif (Math.abs(up.z) === 1) {\n\t\t\t\t\t_z.x += 0.0001;\n\t\t\t\t} else {\n\t\t\t\t\t_z.z += 0.0001;\n\t\t\t\t}\n\n\t\t\t\t_z.normalize();\n\n\t\t\t\t_x.crossVectors(up, _z);\n\t\t\t}\n\n\t\t\t_x.normalize();\n\n\t\t\t_y.crossVectors(_z, _x);\n\n\t\t\tte[0] = _x.x;\n\t\t\tte[4] = _y.x;\n\t\t\tte[8] = _z.x;\n\t\t\tte[1] = _x.y;\n\t\t\tte[5] = _y.y;\n\t\t\tte[9] = _z.y;\n\t\t\tte[2] = _x.z;\n\t\t\tte[6] = _y.z;\n\t\t\tte[10] = _z.z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiply = function multiply(m, n) {\n\t\t\tif (n !== undefined) {\n\t\t\t\tconsole.warn('THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.');\n\t\t\t\treturn this.multiplyMatrices(m, n);\n\t\t\t}\n\n\t\t\treturn this.multiplyMatrices(this, m);\n\t\t};\n\n\t\t_proto.premultiply = function premultiply(m) {\n\t\t\treturn this.multiplyMatrices(m, this);\n\t\t};\n\n\t\t_proto.multiplyMatrices = function multiplyMatrices(a, b) {\n\t\t\tvar ae = a.elements;\n\t\t\tvar be = b.elements;\n\t\t\tvar te = this.elements;\n\t\t\tvar a11 = ae[0],\n\t\t\t\t\ta12 = ae[4],\n\t\t\t\t\ta13 = ae[8],\n\t\t\t\t\ta14 = ae[12];\n\t\t\tvar a21 = ae[1],\n\t\t\t\t\ta22 = ae[5],\n\t\t\t\t\ta23 = ae[9],\n\t\t\t\t\ta24 = ae[13];\n\t\t\tvar a31 = ae[2],\n\t\t\t\t\ta32 = ae[6],\n\t\t\t\t\ta33 = ae[10],\n\t\t\t\t\ta34 = ae[14];\n\t\t\tvar a41 = ae[3],\n\t\t\t\t\ta42 = ae[7],\n\t\t\t\t\ta43 = ae[11],\n\t\t\t\t\ta44 = ae[15];\n\t\t\tvar b11 = be[0],\n\t\t\t\t\tb12 = be[4],\n\t\t\t\t\tb13 = be[8],\n\t\t\t\t\tb14 = be[12];\n\t\t\tvar b21 = be[1],\n\t\t\t\t\tb22 = be[5],\n\t\t\t\t\tb23 = be[9],\n\t\t\t\t\tb24 = be[13];\n\t\t\tvar b31 = be[2],\n\t\t\t\t\tb32 = be[6],\n\t\t\t\t\tb33 = be[10],\n\t\t\t\t\tb34 = be[14];\n\t\t\tvar b41 = be[3],\n\t\t\t\t\tb42 = be[7],\n\t\t\t\t\tb43 = be[11],\n\t\t\t\t\tb44 = be[15];\n\t\t\tte[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\t\tte[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\t\tte[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\t\tte[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\t\t\tte[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\t\tte[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\t\tte[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\t\tte[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\t\t\tte[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\t\tte[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\t\tte[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\t\tte[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\t\t\tte[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\t\tte[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\t\tte[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\t\tte[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiplyScalar = function multiplyScalar(s) {\n\t\t\tvar te = this.elements;\n\t\t\tte[0] *= s;\n\t\t\tte[4] *= s;\n\t\t\tte[8] *= s;\n\t\t\tte[12] *= s;\n\t\t\tte[1] *= s;\n\t\t\tte[5] *= s;\n\t\t\tte[9] *= s;\n\t\t\tte[13] *= s;\n\t\t\tte[2] *= s;\n\t\t\tte[6] *= s;\n\t\t\tte[10] *= s;\n\t\t\tte[14] *= s;\n\t\t\tte[3] *= s;\n\t\t\tte[7] *= s;\n\t\t\tte[11] *= s;\n\t\t\tte[15] *= s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.determinant = function determinant() {\n\t\t\tvar te = this.elements;\n\t\t\tvar n11 = te[0],\n\t\t\t\t\tn12 = te[4],\n\t\t\t\t\tn13 = te[8],\n\t\t\t\t\tn14 = te[12];\n\t\t\tvar n21 = te[1],\n\t\t\t\t\tn22 = te[5],\n\t\t\t\t\tn23 = te[9],\n\t\t\t\t\tn24 = te[13];\n\t\t\tvar n31 = te[2],\n\t\t\t\t\tn32 = te[6],\n\t\t\t\t\tn33 = te[10],\n\t\t\t\t\tn34 = te[14];\n\t\t\tvar n41 = te[3],\n\t\t\t\t\tn42 = te[7],\n\t\t\t\t\tn43 = te[11],\n\t\t\t\t\tn44 = te[15]; //TODO: make this more efficient\n\t\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\t\treturn n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31);\n\t\t};\n\n\t\t_proto.transpose = function transpose() {\n\t\t\tvar te = this.elements;\n\t\t\tvar tmp;\n\t\t\ttmp = te[1];\n\t\t\tte[1] = te[4];\n\t\t\tte[4] = tmp;\n\t\t\ttmp = te[2];\n\t\t\tte[2] = te[8];\n\t\t\tte[8] = tmp;\n\t\t\ttmp = te[6];\n\t\t\tte[6] = te[9];\n\t\t\tte[9] = tmp;\n\t\t\ttmp = te[3];\n\t\t\tte[3] = te[12];\n\t\t\tte[12] = tmp;\n\t\t\ttmp = te[7];\n\t\t\tte[7] = te[13];\n\t\t\tte[13] = tmp;\n\t\t\ttmp = te[11];\n\t\t\tte[11] = te[14];\n\t\t\tte[14] = tmp;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setPosition = function setPosition(x, y, z) {\n\t\t\tvar te = this.elements;\n\n\t\t\tif (x.isVector3) {\n\t\t\t\tte[12] = x.x;\n\t\t\t\tte[13] = x.y;\n\t\t\t\tte[14] = x.z;\n\t\t\t} else {\n\t\t\t\tte[12] = x;\n\t\t\t\tte[13] = y;\n\t\t\t\tte[14] = z;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.invert = function invert() {\n\t\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\t\tvar te = this.elements,\n\t\t\t\t\tn11 = te[0],\n\t\t\t\t\tn21 = te[1],\n\t\t\t\t\tn31 = te[2],\n\t\t\t\t\tn41 = te[3],\n\t\t\t\t\tn12 = te[4],\n\t\t\t\t\tn22 = te[5],\n\t\t\t\t\tn32 = te[6],\n\t\t\t\t\tn42 = te[7],\n\t\t\t\t\tn13 = te[8],\n\t\t\t\t\tn23 = te[9],\n\t\t\t\t\tn33 = te[10],\n\t\t\t\t\tn43 = te[11],\n\t\t\t\t\tn14 = te[12],\n\t\t\t\t\tn24 = te[13],\n\t\t\t\t\tn34 = te[14],\n\t\t\t\t\tn44 = te[15],\n\t\t\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\t\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\t\t\tif (det === 0) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n\t\t\tvar detInv = 1 / det;\n\t\t\tte[0] = t11 * detInv;\n\t\t\tte[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;\n\t\t\tte[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;\n\t\t\tte[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;\n\t\t\tte[4] = t12 * detInv;\n\t\t\tte[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;\n\t\t\tte[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;\n\t\t\tte[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;\n\t\t\tte[8] = t13 * detInv;\n\t\t\tte[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;\n\t\t\tte[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;\n\t\t\tte[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;\n\t\t\tte[12] = t14 * detInv;\n\t\t\tte[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;\n\t\t\tte[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;\n\t\t\tte[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.scale = function scale(v) {\n\t\t\tvar te = this.elements;\n\t\t\tvar x = v.x,\n\t\t\t\t\ty = v.y,\n\t\t\t\t\tz = v.z;\n\t\t\tte[0] *= x;\n\t\t\tte[4] *= y;\n\t\t\tte[8] *= z;\n\t\t\tte[1] *= x;\n\t\t\tte[5] *= y;\n\t\t\tte[9] *= z;\n\t\t\tte[2] *= x;\n\t\t\tte[6] *= y;\n\t\t\tte[10] *= z;\n\t\t\tte[3] *= x;\n\t\t\tte[7] *= y;\n\t\t\tte[11] *= z;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getMaxScaleOnAxis = function getMaxScaleOnAxis() {\n\t\t\tvar te = this.elements;\n\t\t\tvar scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\n\t\t\tvar scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\n\t\t\tvar scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\n\t\t\treturn Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\n\t\t};\n\n\t\t_proto.makeTranslation = function makeTranslation(x, y, z) {\n\t\t\tthis.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeRotationX = function makeRotationX(theta) {\n\t\t\tvar c = Math.cos(theta),\n\t\t\t\t\ts = Math.sin(theta);\n\t\t\tthis.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeRotationY = function makeRotationY(theta) {\n\t\t\tvar c = Math.cos(theta),\n\t\t\t\t\ts = Math.sin(theta);\n\t\t\tthis.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeRotationZ = function makeRotationZ(theta) {\n\t\t\tvar c = Math.cos(theta),\n\t\t\t\t\ts = Math.sin(theta);\n\t\t\tthis.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeRotationAxis = function makeRotationAxis(axis, angle) {\n\t\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\t\t\tvar c = Math.cos(angle);\n\t\t\tvar s = Math.sin(angle);\n\t\t\tvar t = 1 - c;\n\t\t\tvar x = axis.x,\n\t\t\t\t\ty = axis.y,\n\t\t\t\t\tz = axis.z;\n\t\t\tvar tx = t * x,\n\t\t\t\t\tty = t * y;\n\t\t\tthis.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeScale = function makeScale(x, y, z) {\n\t\t\tthis.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeShear = function makeShear(x, y, z) {\n\t\t\tthis.set(1, y, z, 0, x, 1, z, 0, x, y, 1, 0, 0, 0, 0, 1);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.compose = function compose(position, quaternion, scale) {\n\t\t\tvar te = this.elements;\n\t\t\tvar x = quaternion._x,\n\t\t\t\t\ty = quaternion._y,\n\t\t\t\t\tz = quaternion._z,\n\t\t\t\t\tw = quaternion._w;\n\t\t\tvar x2 = x + x,\n\t\t\t\t\ty2 = y + y,\n\t\t\t\t\tz2 = z + z;\n\t\t\tvar xx = x * x2,\n\t\t\t\t\txy = x * y2,\n\t\t\t\t\txz = x * z2;\n\t\t\tvar yy = y * y2,\n\t\t\t\t\tyz = y * z2,\n\t\t\t\t\tzz = z * z2;\n\t\t\tvar wx = w * x2,\n\t\t\t\t\twy = w * y2,\n\t\t\t\t\twz = w * z2;\n\t\t\tvar sx = scale.x,\n\t\t\t\t\tsy = scale.y,\n\t\t\t\t\tsz = scale.z;\n\t\t\tte[0] = (1 - (yy + zz)) * sx;\n\t\t\tte[1] = (xy + wz) * sx;\n\t\t\tte[2] = (xz - wy) * sx;\n\t\t\tte[3] = 0;\n\t\t\tte[4] = (xy - wz) * sy;\n\t\t\tte[5] = (1 - (xx + zz)) * sy;\n\t\t\tte[6] = (yz + wx) * sy;\n\t\t\tte[7] = 0;\n\t\t\tte[8] = (xz + wy) * sz;\n\t\t\tte[9] = (yz - wx) * sz;\n\t\t\tte[10] = (1 - (xx + yy)) * sz;\n\t\t\tte[11] = 0;\n\t\t\tte[12] = position.x;\n\t\t\tte[13] = position.y;\n\t\t\tte[14] = position.z;\n\t\t\tte[15] = 1;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.decompose = function decompose(position, quaternion, scale) {\n\t\t\tvar te = this.elements;\n\n\t\t\tvar sx = _v1$1.set(te[0], te[1], te[2]).length();\n\n\t\t\tvar sy = _v1$1.set(te[4], te[5], te[6]).length();\n\n\t\t\tvar sz = _v1$1.set(te[8], te[9], te[10]).length(); // if determine is negative, we need to invert one scale\n\n\n\t\t\tvar det = this.determinant();\n\t\t\tif (det < 0) sx = -sx;\n\t\t\tposition.x = te[12];\n\t\t\tposition.y = te[13];\n\t\t\tposition.z = te[14]; // scale the rotation part\n\n\t\t\t_m1.copy(this);\n\n\t\t\tvar invSX = 1 / sx;\n\t\t\tvar invSY = 1 / sy;\n\t\t\tvar invSZ = 1 / sz;\n\t\t\t_m1.elements[0] *= invSX;\n\t\t\t_m1.elements[1] *= invSX;\n\t\t\t_m1.elements[2] *= invSX;\n\t\t\t_m1.elements[4] *= invSY;\n\t\t\t_m1.elements[5] *= invSY;\n\t\t\t_m1.elements[6] *= invSY;\n\t\t\t_m1.elements[8] *= invSZ;\n\t\t\t_m1.elements[9] *= invSZ;\n\t\t\t_m1.elements[10] *= invSZ;\n\t\t\tquaternion.setFromRotationMatrix(_m1);\n\t\t\tscale.x = sx;\n\t\t\tscale.y = sy;\n\t\t\tscale.z = sz;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makePerspective = function makePerspective(left, right, top, bottom, near, far) {\n\t\t\tif (far === undefined) {\n\t\t\t\tconsole.warn('THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.');\n\t\t\t}\n\n\t\t\tvar te = this.elements;\n\t\t\tvar x = 2 * near / (right - left);\n\t\t\tvar y = 2 * near / (top - bottom);\n\t\t\tvar a = (right + left) / (right - left);\n\t\t\tvar b = (top + bottom) / (top - bottom);\n\t\t\tvar c = -(far + near) / (far - near);\n\t\t\tvar d = -2 * far * near / (far - near);\n\t\t\tte[0] = x;\n\t\t\tte[4] = 0;\n\t\t\tte[8] = a;\n\t\t\tte[12] = 0;\n\t\t\tte[1] = 0;\n\t\t\tte[5] = y;\n\t\t\tte[9] = b;\n\t\t\tte[13] = 0;\n\t\t\tte[2] = 0;\n\t\t\tte[6] = 0;\n\t\t\tte[10] = c;\n\t\t\tte[14] = d;\n\t\t\tte[3] = 0;\n\t\t\tte[7] = 0;\n\t\t\tte[11] = -1;\n\t\t\tte[15] = 0;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeOrthographic = function makeOrthographic(left, right, top, bottom, near, far) {\n\t\t\tvar te = this.elements;\n\t\t\tvar w = 1.0 / (right - left);\n\t\t\tvar h = 1.0 / (top - bottom);\n\t\t\tvar p = 1.0 / (far - near);\n\t\t\tvar x = (right + left) * w;\n\t\t\tvar y = (top + bottom) * h;\n\t\t\tvar z = (far + near) * p;\n\t\t\tte[0] = 2 * w;\n\t\t\tte[4] = 0;\n\t\t\tte[8] = 0;\n\t\t\tte[12] = -x;\n\t\t\tte[1] = 0;\n\t\t\tte[5] = 2 * h;\n\t\t\tte[9] = 0;\n\t\t\tte[13] = -y;\n\t\t\tte[2] = 0;\n\t\t\tte[6] = 0;\n\t\t\tte[10] = -2 * p;\n\t\t\tte[14] = -z;\n\t\t\tte[3] = 0;\n\t\t\tte[7] = 0;\n\t\t\tte[11] = 0;\n\t\t\tte[15] = 1;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(matrix) {\n\t\t\tvar te = this.elements;\n\t\t\tvar me = matrix.elements;\n\n\t\t\tfor (var i = 0; i < 16; i++) {\n\t\t\t\tif (te[i] !== me[i]) return false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < 16; i++) {\n\t\t\t\tthis.elements[i] = array[i + offset];\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tvar te = this.elements;\n\t\t\tarray[offset] = te[0];\n\t\t\tarray[offset + 1] = te[1];\n\t\t\tarray[offset + 2] = te[2];\n\t\t\tarray[offset + 3] = te[3];\n\t\t\tarray[offset + 4] = te[4];\n\t\t\tarray[offset + 5] = te[5];\n\t\t\tarray[offset + 6] = te[6];\n\t\t\tarray[offset + 7] = te[7];\n\t\t\tarray[offset + 8] = te[8];\n\t\t\tarray[offset + 9] = te[9];\n\t\t\tarray[offset + 10] = te[10];\n\t\t\tarray[offset + 11] = te[11];\n\t\t\tarray[offset + 12] = te[12];\n\t\t\tarray[offset + 13] = te[13];\n\t\t\tarray[offset + 14] = te[14];\n\t\t\tarray[offset + 15] = te[15];\n\t\t\treturn array;\n\t\t};\n\n\t\treturn Matrix4;\n\t}();\n\n\tvar _v1$1 = /*@__PURE__*/new Vector3();\n\n\tvar _m1 = /*@__PURE__*/new Matrix4();\n\n\tvar _zero = /*@__PURE__*/new Vector3(0, 0, 0);\n\n\tvar _one = /*@__PURE__*/new Vector3(1, 1, 1);\n\n\tvar _x = /*@__PURE__*/new Vector3();\n\n\tvar _y = /*@__PURE__*/new Vector3();\n\n\tvar _z = /*@__PURE__*/new Vector3();\n\n\tvar Euler = /*#__PURE__*/function () {\n\t\tfunction Euler(x, y, z, order) {\n\t\t\tif (x === void 0) {\n\t\t\t\tx = 0;\n\t\t\t}\n\n\t\t\tif (y === void 0) {\n\t\t\t\ty = 0;\n\t\t\t}\n\n\t\t\tif (z === void 0) {\n\t\t\t\tz = 0;\n\t\t\t}\n\n\t\t\tif (order === void 0) {\n\t\t\t\torder = Euler.DefaultOrder;\n\t\t\t}\n\n\t\t\tObject.defineProperty(this, 'isEuler', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._order = order;\n\t\t}\n\n\t\tvar _proto = Euler.prototype;\n\n\t\t_proto.set = function set(x, y, z, order) {\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._order = order || this._order;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor(this._x, this._y, this._z, this._order);\n\t\t};\n\n\t\t_proto.copy = function copy(euler) {\n\t\t\tthis._x = euler._x;\n\t\t\tthis._y = euler._y;\n\t\t\tthis._z = euler._z;\n\t\t\tthis._order = euler._order;\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromRotationMatrix = function setFromRotationMatrix(m, order, update) {\n\t\t\tvar clamp = MathUtils.clamp; // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tvar te = m.elements;\n\t\t\tvar m11 = te[0],\n\t\t\t\t\tm12 = te[4],\n\t\t\t\t\tm13 = te[8];\n\t\t\tvar m21 = te[1],\n\t\t\t\t\tm22 = te[5],\n\t\t\t\t\tm23 = te[9];\n\t\t\tvar m31 = te[2],\n\t\t\t\t\tm32 = te[6],\n\t\t\t\t\tm33 = te[10];\n\t\t\torder = order || this._order;\n\n\t\t\tswitch (order) {\n\t\t\t\tcase 'XYZ':\n\t\t\t\t\tthis._y = Math.asin(clamp(m13, -1, 1));\n\n\t\t\t\t\tif (Math.abs(m13) < 0.9999999) {\n\t\t\t\t\t\tthis._x = Math.atan2(-m23, m33);\n\t\t\t\t\t\tthis._z = Math.atan2(-m12, m11);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._x = Math.atan2(m32, m22);\n\t\t\t\t\t\tthis._z = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YXZ':\n\t\t\t\t\tthis._x = Math.asin(-clamp(m23, -1, 1));\n\n\t\t\t\t\tif (Math.abs(m23) < 0.9999999) {\n\t\t\t\t\t\tthis._y = Math.atan2(m13, m33);\n\t\t\t\t\t\tthis._z = Math.atan2(m21, m22);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._y = Math.atan2(-m31, m11);\n\t\t\t\t\t\tthis._z = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZXY':\n\t\t\t\t\tthis._x = Math.asin(clamp(m32, -1, 1));\n\n\t\t\t\t\tif (Math.abs(m32) < 0.9999999) {\n\t\t\t\t\t\tthis._y = Math.atan2(-m31, m33);\n\t\t\t\t\t\tthis._z = Math.atan2(-m12, m22);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._y = 0;\n\t\t\t\t\t\tthis._z = Math.atan2(m21, m11);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ZYX':\n\t\t\t\t\tthis._y = Math.asin(-clamp(m31, -1, 1));\n\n\t\t\t\t\tif (Math.abs(m31) < 0.9999999) {\n\t\t\t\t\t\tthis._x = Math.atan2(m32, m33);\n\t\t\t\t\t\tthis._z = Math.atan2(m21, m11);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._x = 0;\n\t\t\t\t\t\tthis._z = Math.atan2(-m12, m22);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'YZX':\n\t\t\t\t\tthis._z = Math.asin(clamp(m21, -1, 1));\n\n\t\t\t\t\tif (Math.abs(m21) < 0.9999999) {\n\t\t\t\t\t\tthis._x = Math.atan2(-m23, m22);\n\t\t\t\t\t\tthis._y = Math.atan2(-m31, m11);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._x = 0;\n\t\t\t\t\t\tthis._y = Math.atan2(m13, m33);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'XZY':\n\t\t\t\t\tthis._z = Math.asin(-clamp(m12, -1, 1));\n\n\t\t\t\t\tif (Math.abs(m12) < 0.9999999) {\n\t\t\t\t\t\tthis._x = Math.atan2(m32, m22);\n\t\t\t\t\t\tthis._y = Math.atan2(m13, m11);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._x = Math.atan2(-m23, m33);\n\t\t\t\t\t\tthis._y = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn('THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order);\n\t\t\t}\n\n\t\t\tthis._order = order;\n\t\t\tif (update !== false) this._onChangeCallback();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromQuaternion = function setFromQuaternion(q, order, update) {\n\t\t\t_matrix.makeRotationFromQuaternion(q);\n\n\t\t\treturn this.setFromRotationMatrix(_matrix, order, update);\n\t\t};\n\n\t\t_proto.setFromVector3 = function setFromVector3(v, order) {\n\t\t\treturn this.set(v.x, v.y, v.z, order || this._order);\n\t\t};\n\n\t\t_proto.reorder = function reorder(newOrder) {\n\t\t\t// WARNING: this discards revolution information -bhouston\n\t\t\t_quaternion$1.setFromEuler(this);\n\n\t\t\treturn this.setFromQuaternion(_quaternion$1, newOrder);\n\t\t};\n\n\t\t_proto.equals = function equals(euler) {\n\t\t\treturn euler._x === this._x && euler._y === this._y && euler._z === this._z && euler._order === this._order;\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array) {\n\t\t\tthis._x = array[0];\n\t\t\tthis._y = array[1];\n\t\t\tthis._z = array[2];\n\t\t\tif (array[3] !== undefined) this._order = array[3];\n\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tarray[offset] = this._x;\n\t\t\tarray[offset + 1] = this._y;\n\t\t\tarray[offset + 2] = this._z;\n\t\t\tarray[offset + 3] = this._order;\n\t\t\treturn array;\n\t\t};\n\n\t\t_proto.toVector3 = function toVector3(optionalResult) {\n\t\t\tif (optionalResult) {\n\t\t\t\treturn optionalResult.set(this._x, this._y, this._z);\n\t\t\t} else {\n\t\t\t\treturn new Vector3(this._x, this._y, this._z);\n\t\t\t}\n\t\t};\n\n\t\t_proto._onChange = function _onChange(callback) {\n\t\t\tthis._onChangeCallback = callback;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto._onChangeCallback = function _onChangeCallback() {};\n\n\t\t_createClass(Euler, [{\n\t\t\tkey: \"x\",\n\t\t\tget: function get() {\n\t\t\t\treturn this._x;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis._x = value;\n\n\t\t\t\tthis._onChangeCallback();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"y\",\n\t\t\tget: function get() {\n\t\t\t\treturn this._y;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis._y = value;\n\n\t\t\t\tthis._onChangeCallback();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"z\",\n\t\t\tget: function get() {\n\t\t\t\treturn this._z;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis._z = value;\n\n\t\t\t\tthis._onChangeCallback();\n\t\t\t}\n\t\t}, {\n\t\t\tkey: \"order\",\n\t\t\tget: function get() {\n\t\t\t\treturn this._order;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tthis._order = value;\n\n\t\t\t\tthis._onChangeCallback();\n\t\t\t}\n\t\t}]);\n\n\t\treturn Euler;\n\t}();\n\n\tEuler.DefaultOrder = 'XYZ';\n\tEuler.RotationOrders = ['XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX'];\n\n\tvar _matrix = /*@__PURE__*/new Matrix4();\n\n\tvar _quaternion$1 = /*@__PURE__*/new Quaternion();\n\n\tvar Layers = /*#__PURE__*/function () {\n\t\tfunction Layers() {\n\t\t\tthis.mask = 1 | 0;\n\t\t}\n\n\t\tvar _proto = Layers.prototype;\n\n\t\t_proto.set = function set(channel) {\n\t\t\tthis.mask = 1 << channel | 0;\n\t\t};\n\n\t\t_proto.enable = function enable(channel) {\n\t\t\tthis.mask |= 1 << channel | 0;\n\t\t};\n\n\t\t_proto.enableAll = function enableAll() {\n\t\t\tthis.mask = 0xffffffff | 0;\n\t\t};\n\n\t\t_proto.toggle = function toggle(channel) {\n\t\t\tthis.mask ^= 1 << channel | 0;\n\t\t};\n\n\t\t_proto.disable = function disable(channel) {\n\t\t\tthis.mask &= ~(1 << channel | 0);\n\t\t};\n\n\t\t_proto.disableAll = function disableAll() {\n\t\t\tthis.mask = 0;\n\t\t};\n\n\t\t_proto.test = function test(layers) {\n\t\t\treturn (this.mask & layers.mask) !== 0;\n\t\t};\n\n\t\treturn Layers;\n\t}();\n\n\tvar _object3DId = 0;\n\n\tvar _v1$2 = new Vector3();\n\n\tvar _q1 = new Quaternion();\n\n\tvar _m1$1 = new Matrix4();\n\n\tvar _target = new Vector3();\n\n\tvar _position = new Vector3();\n\n\tvar _scale = new Vector3();\n\n\tvar _quaternion$2 = new Quaternion();\n\n\tvar _xAxis = new Vector3(1, 0, 0);\n\n\tvar _yAxis = new Vector3(0, 1, 0);\n\n\tvar _zAxis = new Vector3(0, 0, 1);\n\n\tvar _addedEvent = {\n\t\ttype: 'added'\n\t};\n\tvar _removedEvent = {\n\t\ttype: 'removed'\n\t};\n\n\tfunction Object3D() {\n\t\tObject.defineProperty(this, 'id', {\n\t\t\tvalue: _object3DId++\n\t\t});\n\t\tthis.uuid = MathUtils.generateUUID();\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\t\tthis.up = Object3D.DefaultUp.clone();\n\t\tvar position = new Vector3();\n\t\tvar rotation = new Euler();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3(1, 1, 1);\n\n\t\tfunction onRotationChange() {\n\t\t\tquaternion.setFromEuler(rotation, false);\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\t\t\trotation.setFromQuaternion(quaternion, undefined, false);\n\t\t}\n\n\t\trotation._onChange(onRotationChange);\n\n\t\tquaternion._onChange(onQuaternionChange);\n\n\t\tObject.defineProperties(this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t});\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\t\tthis.animations = [];\n\t\tthis.userData = {};\n\t}\n\n\tObject3D.DefaultUp = new Vector3(0, 1, 0);\n\tObject3D.DefaultMatrixAutoUpdate = true;\n\tObject3D.prototype = Object.assign(Object.create(EventDispatcher.prototype), {\n\t\tconstructor: Object3D,\n\t\tisObject3D: true,\n\t\tonBeforeRender: function onBeforeRender() {},\n\t\tonAfterRender: function onAfterRender() {},\n\t\tapplyMatrix4: function applyMatrix4(matrix) {\n\t\t\tif (this.matrixAutoUpdate) this.updateMatrix();\n\t\t\tthis.matrix.premultiply(matrix);\n\t\t\tthis.matrix.decompose(this.position, this.quaternion, this.scale);\n\t\t},\n\t\tapplyQuaternion: function applyQuaternion(q) {\n\t\t\tthis.quaternion.premultiply(q);\n\t\t\treturn this;\n\t\t},\n\t\tsetRotationFromAxisAngle: function setRotationFromAxisAngle(axis, angle) {\n\t\t\t// assumes axis is normalized\n\t\t\tthis.quaternion.setFromAxisAngle(axis, angle);\n\t\t},\n\t\tsetRotationFromEuler: function setRotationFromEuler(euler) {\n\t\t\tthis.quaternion.setFromEuler(euler, true);\n\t\t},\n\t\tsetRotationFromMatrix: function setRotationFromMatrix(m) {\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\t\t\tthis.quaternion.setFromRotationMatrix(m);\n\t\t},\n\t\tsetRotationFromQuaternion: function setRotationFromQuaternion(q) {\n\t\t\t// assumes q is normalized\n\t\t\tthis.quaternion.copy(q);\n\t\t},\n\t\trotateOnAxis: function rotateOnAxis(axis, angle) {\n\t\t\t// rotate object on axis in object space\n\t\t\t// axis is assumed to be normalized\n\t\t\t_q1.setFromAxisAngle(axis, angle);\n\n\t\t\tthis.quaternion.multiply(_q1);\n\t\t\treturn this;\n\t\t},\n\t\trotateOnWorldAxis: function rotateOnWorldAxis(axis, angle) {\n\t\t\t// rotate object on axis in world space\n\t\t\t// axis is assumed to be normalized\n\t\t\t// method assumes no rotated parent\n\t\t\t_q1.setFromAxisAngle(axis, angle);\n\n\t\t\tthis.quaternion.premultiply(_q1);\n\t\t\treturn this;\n\t\t},\n\t\trotateX: function rotateX(angle) {\n\t\t\treturn this.rotateOnAxis(_xAxis, angle);\n\t\t},\n\t\trotateY: function rotateY(angle) {\n\t\t\treturn this.rotateOnAxis(_yAxis, angle);\n\t\t},\n\t\trotateZ: function rotateZ(angle) {\n\t\t\treturn this.rotateOnAxis(_zAxis, angle);\n\t\t},\n\t\ttranslateOnAxis: function translateOnAxis(axis, distance) {\n\t\t\t// translate object by distance along axis in object space\n\t\t\t// axis is assumed to be normalized\n\t\t\t_v1$2.copy(axis).applyQuaternion(this.quaternion);\n\n\t\t\tthis.position.add(_v1$2.multiplyScalar(distance));\n\t\t\treturn this;\n\t\t},\n\t\ttranslateX: function translateX(distance) {\n\t\t\treturn this.translateOnAxis(_xAxis, distance);\n\t\t},\n\t\ttranslateY: function translateY(distance) {\n\t\t\treturn this.translateOnAxis(_yAxis, distance);\n\t\t},\n\t\ttranslateZ: function translateZ(distance) {\n\t\t\treturn this.translateOnAxis(_zAxis, distance);\n\t\t},\n\t\tlocalToWorld: function localToWorld(vector) {\n\t\t\treturn vector.applyMatrix4(this.matrixWorld);\n\t\t},\n\t\tworldToLocal: function worldToLocal(vector) {\n\t\t\treturn vector.applyMatrix4(_m1$1.copy(this.matrixWorld).invert());\n\t\t},\n\t\tlookAt: function lookAt(x, y, z) {\n\t\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\t\t\tif (x.isVector3) {\n\t\t\t\t_target.copy(x);\n\t\t\t} else {\n\t\t\t\t_target.set(x, y, z);\n\t\t\t}\n\n\t\t\tvar parent = this.parent;\n\t\t\tthis.updateWorldMatrix(true, false);\n\n\t\t\t_position.setFromMatrixPosition(this.matrixWorld);\n\n\t\t\tif (this.isCamera || this.isLight) {\n\t\t\t\t_m1$1.lookAt(_position, _target, this.up);\n\t\t\t} else {\n\t\t\t\t_m1$1.lookAt(_target, _position, this.up);\n\t\t\t}\n\n\t\t\tthis.quaternion.setFromRotationMatrix(_m1$1);\n\n\t\t\tif (parent) {\n\t\t\t\t_m1$1.extractRotation(parent.matrixWorld);\n\n\t\t\t\t_q1.setFromRotationMatrix(_m1$1);\n\n\t\t\t\tthis.quaternion.premultiply(_q1.invert());\n\t\t\t}\n\t\t},\n\t\tadd: function add(object) {\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\t\tthis.add(arguments[i]);\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (object === this) {\n\t\t\t\tconsole.error('THREE.Object3D.add: object can\\'t be added as a child of itself.', object);\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tif (object && object.isObject3D) {\n\t\t\t\tif (object.parent !== null) {\n\t\t\t\t\tobject.parent.remove(object);\n\t\t\t\t}\n\n\t\t\t\tobject.parent = this;\n\t\t\t\tthis.children.push(object);\n\t\t\t\tobject.dispatchEvent(_addedEvent);\n\t\t\t} else {\n\t\t\t\tconsole.error('THREE.Object3D.add: object not an instance of THREE.Object3D.', object);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tremove: function remove(object) {\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\t\tthis.remove(arguments[i]);\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar index = this.children.indexOf(object);\n\n\t\t\tif (index !== -1) {\n\t\t\t\tobject.parent = null;\n\t\t\t\tthis.children.splice(index, 1);\n\t\t\t\tobject.dispatchEvent(_removedEvent);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tclear: function clear() {\n\t\t\tfor (var i = 0; i < this.children.length; i++) {\n\t\t\t\tvar object = this.children[i];\n\t\t\t\tobject.parent = null;\n\t\t\t\tobject.dispatchEvent(_removedEvent);\n\t\t\t}\n\n\t\t\tthis.children.length = 0;\n\t\t\treturn this;\n\t\t},\n\t\tattach: function attach(object) {\n\t\t\t// adds object as a child of this, while maintaining the object's world transform\n\t\t\tthis.updateWorldMatrix(true, false);\n\n\t\t\t_m1$1.copy(this.matrixWorld).invert();\n\n\t\t\tif (object.parent !== null) {\n\t\t\t\tobject.parent.updateWorldMatrix(true, false);\n\n\t\t\t\t_m1$1.multiply(object.parent.matrixWorld);\n\t\t\t}\n\n\t\t\tobject.applyMatrix4(_m1$1);\n\t\t\tobject.updateWorldMatrix(false, false);\n\t\t\tthis.add(object);\n\t\t\treturn this;\n\t\t},\n\t\tgetObjectById: function getObjectById(id) {\n\t\t\treturn this.getObjectByProperty('id', id);\n\t\t},\n\t\tgetObjectByName: function getObjectByName(name) {\n\t\t\treturn this.getObjectByProperty('name', name);\n\t\t},\n\t\tgetObjectByProperty: function getObjectByProperty(name, value) {\n\t\t\tif (this[name] === value) return this;\n\n\t\t\tfor (var i = 0, l = this.children.length; i < l; i++) {\n\t\t\t\tvar child = this.children[i];\n\t\t\t\tvar object = child.getObjectByProperty(name, value);\n\n\t\t\t\tif (object !== undefined) {\n\t\t\t\t\treturn object;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t\tgetWorldPosition: function getWorldPosition(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Object3D: .getWorldPosition() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix(true, false);\n\t\t\treturn target.setFromMatrixPosition(this.matrixWorld);\n\t\t},\n\t\tgetWorldQuaternion: function getWorldQuaternion(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Object3D: .getWorldQuaternion() target is now required');\n\t\t\t\ttarget = new Quaternion();\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix(true, false);\n\t\t\tthis.matrixWorld.decompose(_position, target, _scale);\n\t\t\treturn target;\n\t\t},\n\t\tgetWorldScale: function getWorldScale(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Object3D: .getWorldScale() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix(true, false);\n\t\t\tthis.matrixWorld.decompose(_position, _quaternion$2, target);\n\t\t\treturn target;\n\t\t},\n\t\tgetWorldDirection: function getWorldDirection(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Object3D: .getWorldDirection() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix(true, false);\n\t\t\tvar e = this.matrixWorld.elements;\n\t\t\treturn target.set(e[8], e[9], e[10]).normalize();\n\t\t},\n\t\traycast: function raycast() {},\n\t\ttraverse: function traverse(callback) {\n\t\t\tcallback(this);\n\t\t\tvar children = this.children;\n\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].traverse(callback);\n\t\t\t}\n\t\t},\n\t\ttraverseVisible: function traverseVisible(callback) {\n\t\t\tif (this.visible === false) return;\n\t\t\tcallback(this);\n\t\t\tvar children = this.children;\n\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].traverseVisible(callback);\n\t\t\t}\n\t\t},\n\t\ttraverseAncestors: function traverseAncestors(callback) {\n\t\t\tvar parent = this.parent;\n\n\t\t\tif (parent !== null) {\n\t\t\t\tcallback(parent);\n\t\t\t\tparent.traverseAncestors(callback);\n\t\t\t}\n\t\t},\n\t\tupdateMatrix: function updateMatrix() {\n\t\t\tthis.matrix.compose(this.position, this.quaternion, this.scale);\n\t\t\tthis.matrixWorldNeedsUpdate = true;\n\t\t},\n\t\tupdateMatrixWorld: function updateMatrixWorld(force) {\n\t\t\tif (this.matrixAutoUpdate) this.updateMatrix();\n\n\t\t\tif (this.matrixWorldNeedsUpdate || force) {\n\t\t\t\tif (this.parent === null) {\n\t\t\t\t\tthis.matrixWorld.copy(this.matrix);\n\t\t\t\t} else {\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);\n\t\t\t\t}\n\n\t\t\t\tthis.matrixWorldNeedsUpdate = false;\n\t\t\t\tforce = true;\n\t\t\t} // update children\n\n\n\t\t\tvar children = this.children;\n\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].updateMatrixWorld(force);\n\t\t\t}\n\t\t},\n\t\tupdateWorldMatrix: function updateWorldMatrix(updateParents, updateChildren) {\n\t\t\tvar parent = this.parent;\n\n\t\t\tif (updateParents === true && parent !== null) {\n\t\t\t\tparent.updateWorldMatrix(true, false);\n\t\t\t}\n\n\t\t\tif (this.matrixAutoUpdate) this.updateMatrix();\n\n\t\t\tif (this.parent === null) {\n\t\t\t\tthis.matrixWorld.copy(this.matrix);\n\t\t\t} else {\n\t\t\t\tthis.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);\n\t\t\t} // update children\n\n\n\t\t\tif (updateChildren === true) {\n\t\t\t\tvar children = this.children;\n\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tchildren[i].updateWorldMatrix(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\t// meta is a string when called from JSON.stringify\n\t\t\tvar isRootObject = meta === undefined || typeof meta === 'string';\n\t\t\tvar output = {}; // meta is a hash used to collect geometries, materials.\n\t\t\t// not providing it implies that this is the root object\n\t\t\t// being serialized.\n\n\t\t\tif (isRootObject) {\n\t\t\t\t// initialize meta obj\n\t\t\t\tmeta = {\n\t\t\t\t\tgeometries: {},\n\t\t\t\t\tmaterials: {},\n\t\t\t\t\ttextures: {},\n\t\t\t\t\timages: {},\n\t\t\t\t\tshapes: {},\n\t\t\t\t\tskeletons: {},\n\t\t\t\t\tanimations: {}\n\t\t\t\t};\n\t\t\t\toutput.metadata = {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Object',\n\t\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t\t};\n\t\t\t} // standard Object3D serialization\n\n\n\t\t\tvar object = {};\n\t\t\tobject.uuid = this.uuid;\n\t\t\tobject.type = this.type;\n\t\t\tif (this.name !== '') object.name = this.name;\n\t\t\tif (this.castShadow === true) object.castShadow = true;\n\t\t\tif (this.receiveShadow === true) object.receiveShadow = true;\n\t\t\tif (this.visible === false) object.visible = false;\n\t\t\tif (this.frustumCulled === false) object.frustumCulled = false;\n\t\t\tif (this.renderOrder !== 0) object.renderOrder = this.renderOrder;\n\t\t\tif (JSON.stringify(this.userData) !== '{}') object.userData = this.userData;\n\t\t\tobject.layers = this.layers.mask;\n\t\t\tobject.matrix = this.matrix.toArray();\n\t\t\tif (this.matrixAutoUpdate === false) object.matrixAutoUpdate = false; // object specific properties\n\n\t\t\tif (this.isInstancedMesh) {\n\t\t\t\tobject.type = 'InstancedMesh';\n\t\t\t\tobject.count = this.count;\n\t\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\t} //\n\n\n\t\t\tfunction serialize(library, element) {\n\t\t\t\tif (library[element.uuid] === undefined) {\n\t\t\t\t\tlibrary[element.uuid] = element.toJSON(meta);\n\t\t\t\t}\n\n\t\t\t\treturn element.uuid;\n\t\t\t}\n\n\t\t\tif (this.isMesh || this.isLine || this.isPoints) {\n\t\t\t\tobject.geometry = serialize(meta.geometries, this.geometry);\n\t\t\t\tvar parameters = this.geometry.parameters;\n\n\t\t\t\tif (parameters !== undefined && parameters.shapes !== undefined) {\n\t\t\t\t\tvar shapes = parameters.shapes;\n\n\t\t\t\t\tif (Array.isArray(shapes)) {\n\t\t\t\t\t\tfor (var i = 0, l = shapes.length; i < l; i++) {\n\t\t\t\t\t\t\tvar shape = shapes[i];\n\t\t\t\t\t\t\tserialize(meta.shapes, shape);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tserialize(meta.shapes, shapes);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isSkinnedMesh) {\n\t\t\t\tobject.bindMode = this.bindMode;\n\t\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\t\tif (this.skeleton !== undefined) {\n\t\t\t\t\tserialize(meta.skeletons, this.skeleton);\n\t\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.material !== undefined) {\n\t\t\t\tif (Array.isArray(this.material)) {\n\t\t\t\t\tvar uuids = [];\n\n\t\t\t\t\tfor (var _i = 0, _l = this.material.length; _i < _l; _i++) {\n\t\t\t\t\t\tuuids.push(serialize(meta.materials, this.material[_i]));\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.material = uuids;\n\t\t\t\t} else {\n\t\t\t\t\tobject.material = serialize(meta.materials, this.material);\n\t\t\t\t}\n\t\t\t} //\n\n\n\t\t\tif (this.children.length > 0) {\n\t\t\t\tobject.children = [];\n\n\t\t\t\tfor (var _i2 = 0; _i2 < this.children.length; _i2++) {\n\t\t\t\t\tobject.children.push(this.children[_i2].toJSON(meta).object);\n\t\t\t\t}\n\t\t\t} //\n\n\n\t\t\tif (this.animations.length > 0) {\n\t\t\t\tobject.animations = [];\n\n\t\t\t\tfor (var _i3 = 0; _i3 < this.animations.length; _i3++) {\n\t\t\t\t\tvar animation = this.animations[_i3];\n\t\t\t\t\tobject.animations.push(serialize(meta.animations, animation));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isRootObject) {\n\t\t\t\tvar geometries = extractFromCache(meta.geometries);\n\t\t\t\tvar materials = extractFromCache(meta.materials);\n\t\t\t\tvar textures = extractFromCache(meta.textures);\n\t\t\t\tvar images = extractFromCache(meta.images);\n\n\t\t\t\tvar _shapes = extractFromCache(meta.shapes);\n\n\t\t\t\tvar skeletons = extractFromCache(meta.skeletons);\n\t\t\t\tvar animations = extractFromCache(meta.animations);\n\t\t\t\tif (geometries.length > 0) output.geometries = geometries;\n\t\t\t\tif (materials.length > 0) output.materials = materials;\n\t\t\t\tif (textures.length > 0) output.textures = textures;\n\t\t\t\tif (images.length > 0) output.images = images;\n\t\t\t\tif (_shapes.length > 0) output.shapes = _shapes;\n\t\t\t\tif (skeletons.length > 0) output.skeletons = skeletons;\n\t\t\t\tif (animations.length > 0) output.animations = animations;\n\t\t\t}\n\n\t\t\toutput.object = object;\n\t\t\treturn output; // extract data from the cache hash\n\t\t\t// remove metadata on each item\n\t\t\t// and return as array\n\n\t\t\tfunction extractFromCache(cache) {\n\t\t\t\tvar values = [];\n\n\t\t\t\tfor (var key in cache) {\n\t\t\t\t\tvar data = cache[key];\n\t\t\t\t\tdelete data.metadata;\n\t\t\t\t\tvalues.push(data);\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t}\n\t\t},\n\t\tclone: function clone(recursive) {\n\t\t\treturn new this.constructor().copy(this, recursive);\n\t\t},\n\t\tcopy: function copy(source, recursive) {\n\t\t\tif (recursive === void 0) {\n\t\t\t\trecursive = true;\n\t\t\t}\n\n\t\t\tthis.name = source.name;\n\t\t\tthis.up.copy(source.up);\n\t\t\tthis.position.copy(source.position);\n\t\t\tthis.rotation.order = source.rotation.order;\n\t\t\tthis.quaternion.copy(source.quaternion);\n\t\t\tthis.scale.copy(source.scale);\n\t\t\tthis.matrix.copy(source.matrix);\n\t\t\tthis.matrixWorld.copy(source.matrixWorld);\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\t\t\tthis.layers.mask = source.layers.mask;\n\t\t\tthis.visible = source.visible;\n\t\t\tthis.castShadow = source.castShadow;\n\t\t\tthis.receiveShadow = source.receiveShadow;\n\t\t\tthis.frustumCulled = source.frustumCulled;\n\t\t\tthis.renderOrder = source.renderOrder;\n\t\t\tthis.userData = JSON.parse(JSON.stringify(source.userData));\n\n\t\t\tif (recursive === true) {\n\t\t\t\tfor (var i = 0; i < source.children.length; i++) {\n\t\t\t\t\tvar child = source.children[i];\n\t\t\t\t\tthis.add(child.clone());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tvar _vector1 = /*@__PURE__*/new Vector3();\n\n\tvar _vector2 = /*@__PURE__*/new Vector3();\n\n\tvar _normalMatrix = /*@__PURE__*/new Matrix3();\n\n\tvar Plane = /*#__PURE__*/function () {\n\t\tfunction Plane(normal, constant) {\n\t\t\tObject.defineProperty(this, 'isPlane', {\n\t\t\t\tvalue: true\n\t\t\t}); // normal is assumed to be normalized\n\n\t\t\tthis.normal = normal !== undefined ? normal : new Vector3(1, 0, 0);\n\t\t\tthis.constant = constant !== undefined ? constant : 0;\n\t\t}\n\n\t\tvar _proto = Plane.prototype;\n\n\t\t_proto.set = function set(normal, constant) {\n\t\t\tthis.normal.copy(normal);\n\t\t\tthis.constant = constant;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setComponents = function setComponents(x, y, z, w) {\n\t\t\tthis.normal.set(x, y, z);\n\t\t\tthis.constant = w;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromNormalAndCoplanarPoint = function setFromNormalAndCoplanarPoint(normal, point) {\n\t\t\tthis.normal.copy(normal);\n\t\t\tthis.constant = -point.dot(this.normal);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromCoplanarPoints = function setFromCoplanarPoints(a, b, c) {\n\t\t\tvar normal = _vector1.subVectors(c, b).cross(_vector2.subVectors(a, b)).normalize(); // Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\n\t\t\tthis.setFromNormalAndCoplanarPoint(normal, a);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(plane) {\n\t\t\tthis.normal.copy(plane.normal);\n\t\t\tthis.constant = plane.constant;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.normalize = function normalize() {\n\t\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\t\t\tvar inverseNormalLength = 1.0 / this.normal.length();\n\t\t\tthis.normal.multiplyScalar(inverseNormalLength);\n\t\t\tthis.constant *= inverseNormalLength;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.negate = function negate() {\n\t\t\tthis.constant *= -1;\n\t\t\tthis.normal.negate();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.distanceToPoint = function distanceToPoint(point) {\n\t\t\treturn this.normal.dot(point) + this.constant;\n\t\t};\n\n\t\t_proto.distanceToSphere = function distanceToSphere(sphere) {\n\t\t\treturn this.distanceToPoint(sphere.center) - sphere.radius;\n\t\t};\n\n\t\t_proto.projectPoint = function projectPoint(point, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Plane: .projectPoint() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn target.copy(this.normal).multiplyScalar(-this.distanceToPoint(point)).add(point);\n\t\t};\n\n\t\t_proto.intersectLine = function intersectLine(line, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Plane: .intersectLine() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\tvar direction = line.delta(_vector1);\n\t\t\tvar denominator = this.normal.dot(direction);\n\n\t\t\tif (denominator === 0) {\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif (this.distanceToPoint(line.start) === 0) {\n\t\t\t\t\treturn target.copy(line.start);\n\t\t\t\t} // Unsure if this is the correct method to handle this case.\n\n\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tvar t = -(line.start.dot(this.normal) + this.constant) / denominator;\n\n\t\t\tif (t < 0 || t > 1) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn target.copy(direction).multiplyScalar(t).add(line.start);\n\t\t};\n\n\t\t_proto.intersectsLine = function intersectsLine(line) {\n\t\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\t\t\tvar startSign = this.distanceToPoint(line.start);\n\t\t\tvar endSign = this.distanceToPoint(line.end);\n\t\t\treturn startSign < 0 && endSign > 0 || endSign < 0 && startSign > 0;\n\t\t};\n\n\t\t_proto.intersectsBox = function intersectsBox(box) {\n\t\t\treturn box.intersectsPlane(this);\n\t\t};\n\n\t\t_proto.intersectsSphere = function intersectsSphere(sphere) {\n\t\t\treturn sphere.intersectsPlane(this);\n\t\t};\n\n\t\t_proto.coplanarPoint = function coplanarPoint(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Plane: .coplanarPoint() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn target.copy(this.normal).multiplyScalar(-this.constant);\n\t\t};\n\n\t\t_proto.applyMatrix4 = function applyMatrix4(matrix, optionalNormalMatrix) {\n\t\t\tvar normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix(matrix);\n\n\t\t\tvar referencePoint = this.coplanarPoint(_vector1).applyMatrix4(matrix);\n\t\t\tvar normal = this.normal.applyMatrix3(normalMatrix).normalize();\n\t\t\tthis.constant = -referencePoint.dot(normal);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.translate = function translate(offset) {\n\t\t\tthis.constant -= offset.dot(this.normal);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(plane) {\n\t\t\treturn plane.normal.equals(this.normal) && plane.constant === this.constant;\n\t\t};\n\n\t\treturn Plane;\n\t}();\n\n\tvar _v0$1 = /*@__PURE__*/new Vector3();\n\n\tvar _v1$3 = /*@__PURE__*/new Vector3();\n\n\tvar _v2$1 = /*@__PURE__*/new Vector3();\n\n\tvar _v3 = /*@__PURE__*/new Vector3();\n\n\tvar _vab = /*@__PURE__*/new Vector3();\n\n\tvar _vac = /*@__PURE__*/new Vector3();\n\n\tvar _vbc = /*@__PURE__*/new Vector3();\n\n\tvar _vap = /*@__PURE__*/new Vector3();\n\n\tvar _vbp = /*@__PURE__*/new Vector3();\n\n\tvar _vcp = /*@__PURE__*/new Vector3();\n\n\tvar Triangle = /*#__PURE__*/function () {\n\t\tfunction Triangle(a, b, c) {\n\t\t\tthis.a = a !== undefined ? a : new Vector3();\n\t\t\tthis.b = b !== undefined ? b : new Vector3();\n\t\t\tthis.c = c !== undefined ? c : new Vector3();\n\t\t}\n\n\t\tTriangle.getNormal = function getNormal(a, b, c, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Triangle: .getNormal() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\ttarget.subVectors(c, b);\n\n\t\t\t_v0$1.subVectors(a, b);\n\n\t\t\ttarget.cross(_v0$1);\n\t\t\tvar targetLengthSq = target.lengthSq();\n\n\t\t\tif (targetLengthSq > 0) {\n\t\t\t\treturn target.multiplyScalar(1 / Math.sqrt(targetLengthSq));\n\t\t\t}\n\n\t\t\treturn target.set(0, 0, 0);\n\t\t} // static/instance method to calculate barycentric coordinates\n\t\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\t\t;\n\n\t\tTriangle.getBarycoord = function getBarycoord(point, a, b, c, target) {\n\t\t\t_v0$1.subVectors(c, a);\n\n\t\t\t_v1$3.subVectors(b, a);\n\n\t\t\t_v2$1.subVectors(point, a);\n\n\t\t\tvar dot00 = _v0$1.dot(_v0$1);\n\n\t\t\tvar dot01 = _v0$1.dot(_v1$3);\n\n\t\t\tvar dot02 = _v0$1.dot(_v2$1);\n\n\t\t\tvar dot11 = _v1$3.dot(_v1$3);\n\n\t\t\tvar dot12 = _v1$3.dot(_v2$1);\n\n\t\t\tvar denom = dot00 * dot11 - dot01 * dot01;\n\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Triangle: .getBarycoord() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t} // collinear or singular triangle\n\n\n\t\t\tif (denom === 0) {\n\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\treturn target.set(-2, -1, -1);\n\t\t\t}\n\n\t\t\tvar invDenom = 1 / denom;\n\t\t\tvar u = (dot11 * dot02 - dot01 * dot12) * invDenom;\n\t\t\tvar v = (dot00 * dot12 - dot01 * dot02) * invDenom; // barycentric coordinates must always sum to 1\n\n\t\t\treturn target.set(1 - u - v, v, u);\n\t\t};\n\n\t\tTriangle.containsPoint = function containsPoint(point, a, b, c) {\n\t\t\tthis.getBarycoord(point, a, b, c, _v3);\n\t\t\treturn _v3.x >= 0 && _v3.y >= 0 && _v3.x + _v3.y <= 1;\n\t\t};\n\n\t\tTriangle.getUV = function getUV(point, p1, p2, p3, uv1, uv2, uv3, target) {\n\t\t\tthis.getBarycoord(point, p1, p2, p3, _v3);\n\t\t\ttarget.set(0, 0);\n\t\t\ttarget.addScaledVector(uv1, _v3.x);\n\t\t\ttarget.addScaledVector(uv2, _v3.y);\n\t\t\ttarget.addScaledVector(uv3, _v3.z);\n\t\t\treturn target;\n\t\t};\n\n\t\tTriangle.isFrontFacing = function isFrontFacing(a, b, c, direction) {\n\t\t\t_v0$1.subVectors(c, b);\n\n\t\t\t_v1$3.subVectors(a, b); // strictly front facing\n\n\n\t\t\treturn _v0$1.cross(_v1$3).dot(direction) < 0 ? true : false;\n\t\t};\n\n\t\tvar _proto = Triangle.prototype;\n\n\t\t_proto.set = function set(a, b, c) {\n\t\t\tthis.a.copy(a);\n\t\t\tthis.b.copy(b);\n\t\t\tthis.c.copy(c);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromPointsAndIndices = function setFromPointsAndIndices(points, i0, i1, i2) {\n\t\t\tthis.a.copy(points[i0]);\n\t\t\tthis.b.copy(points[i1]);\n\t\t\tthis.c.copy(points[i2]);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(triangle) {\n\t\t\tthis.a.copy(triangle.a);\n\t\t\tthis.b.copy(triangle.b);\n\t\t\tthis.c.copy(triangle.c);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getArea = function getArea() {\n\t\t\t_v0$1.subVectors(this.c, this.b);\n\n\t\t\t_v1$3.subVectors(this.a, this.b);\n\n\t\t\treturn _v0$1.cross(_v1$3).length() * 0.5;\n\t\t};\n\n\t\t_proto.getMidpoint = function getMidpoint(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Triangle: .getMidpoint() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn target.addVectors(this.a, this.b).add(this.c).multiplyScalar(1 / 3);\n\t\t};\n\n\t\t_proto.getNormal = function getNormal(target) {\n\t\t\treturn Triangle.getNormal(this.a, this.b, this.c, target);\n\t\t};\n\n\t\t_proto.getPlane = function getPlane(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Triangle: .getPlane() target is now required');\n\t\t\t\ttarget = new Plane();\n\t\t\t}\n\n\t\t\treturn target.setFromCoplanarPoints(this.a, this.b, this.c);\n\t\t};\n\n\t\t_proto.getBarycoord = function getBarycoord(point, target) {\n\t\t\treturn Triangle.getBarycoord(point, this.a, this.b, this.c, target);\n\t\t};\n\n\t\t_proto.getUV = function getUV(point, uv1, uv2, uv3, target) {\n\t\t\treturn Triangle.getUV(point, this.a, this.b, this.c, uv1, uv2, uv3, target);\n\t\t};\n\n\t\t_proto.containsPoint = function containsPoint(point) {\n\t\t\treturn Triangle.containsPoint(point, this.a, this.b, this.c);\n\t\t};\n\n\t\t_proto.isFrontFacing = function isFrontFacing(direction) {\n\t\t\treturn Triangle.isFrontFacing(this.a, this.b, this.c, direction);\n\t\t};\n\n\t\t_proto.intersectsBox = function intersectsBox(box) {\n\t\t\treturn box.intersectsTriangle(this);\n\t\t};\n\n\t\t_proto.closestPointToPoint = function closestPointToPoint(p, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Triangle: .closestPointToPoint() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\tvar a = this.a,\n\t\t\t\t\tb = this.b,\n\t\t\t\t\tc = this.c;\n\t\t\tvar v, w; // algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t\t_vab.subVectors(b, a);\n\n\t\t\t_vac.subVectors(c, a);\n\n\t\t\t_vap.subVectors(p, a);\n\n\t\t\tvar d1 = _vab.dot(_vap);\n\n\t\t\tvar d2 = _vac.dot(_vap);\n\n\t\t\tif (d1 <= 0 && d2 <= 0) {\n\t\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\t\treturn target.copy(a);\n\t\t\t}\n\n\t\t\t_vbp.subVectors(p, b);\n\n\t\t\tvar d3 = _vab.dot(_vbp);\n\n\t\t\tvar d4 = _vac.dot(_vbp);\n\n\t\t\tif (d3 >= 0 && d4 <= d3) {\n\t\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\t\treturn target.copy(b);\n\t\t\t}\n\n\t\t\tvar vc = d1 * d4 - d3 * d2;\n\n\t\t\tif (vc <= 0 && d1 >= 0 && d3 <= 0) {\n\t\t\t\tv = d1 / (d1 - d3); // edge region of AB; barycentric coords (1-v, v, 0)\n\n\t\t\t\treturn target.copy(a).addScaledVector(_vab, v);\n\t\t\t}\n\n\t\t\t_vcp.subVectors(p, c);\n\n\t\t\tvar d5 = _vab.dot(_vcp);\n\n\t\t\tvar d6 = _vac.dot(_vcp);\n\n\t\t\tif (d6 >= 0 && d5 <= d6) {\n\t\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\t\treturn target.copy(c);\n\t\t\t}\n\n\t\t\tvar vb = d5 * d2 - d1 * d6;\n\n\t\t\tif (vb <= 0 && d2 >= 0 && d6 <= 0) {\n\t\t\t\tw = d2 / (d2 - d6); // edge region of AC; barycentric coords (1-w, 0, w)\n\n\t\t\t\treturn target.copy(a).addScaledVector(_vac, w);\n\t\t\t}\n\n\t\t\tvar va = d3 * d6 - d5 * d4;\n\n\t\t\tif (va <= 0 && d4 - d3 >= 0 && d5 - d6 >= 0) {\n\t\t\t\t_vbc.subVectors(c, b);\n\n\t\t\t\tw = (d4 - d3) / (d4 - d3 + (d5 - d6)); // edge region of BC; barycentric coords (0, 1-w, w)\n\n\t\t\t\treturn target.copy(b).addScaledVector(_vbc, w); // edge region of BC\n\t\t\t} // face region\n\n\n\t\t\tvar denom = 1 / (va + vb + vc); // u = va * denom\n\n\t\t\tv = vb * denom;\n\t\t\tw = vc * denom;\n\t\t\treturn target.copy(a).addScaledVector(_vab, v).addScaledVector(_vac, w);\n\t\t};\n\n\t\t_proto.equals = function equals(triangle) {\n\t\t\treturn triangle.a.equals(this.a) && triangle.b.equals(this.b) && triangle.c.equals(this.c);\n\t\t};\n\n\t\treturn Triangle;\n\t}();\n\n\tvar _colorKeywords = {\n\t\t'aliceblue': 0xF0F8FF,\n\t\t'antiquewhite': 0xFAEBD7,\n\t\t'aqua': 0x00FFFF,\n\t\t'aquamarine': 0x7FFFD4,\n\t\t'azure': 0xF0FFFF,\n\t\t'beige': 0xF5F5DC,\n\t\t'bisque': 0xFFE4C4,\n\t\t'black': 0x000000,\n\t\t'blanchedalmond': 0xFFEBCD,\n\t\t'blue': 0x0000FF,\n\t\t'blueviolet': 0x8A2BE2,\n\t\t'brown': 0xA52A2A,\n\t\t'burlywood': 0xDEB887,\n\t\t'cadetblue': 0x5F9EA0,\n\t\t'chartreuse': 0x7FFF00,\n\t\t'chocolate': 0xD2691E,\n\t\t'coral': 0xFF7F50,\n\t\t'cornflowerblue': 0x6495ED,\n\t\t'cornsilk': 0xFFF8DC,\n\t\t'crimson': 0xDC143C,\n\t\t'cyan': 0x00FFFF,\n\t\t'darkblue': 0x00008B,\n\t\t'darkcyan': 0x008B8B,\n\t\t'darkgoldenrod': 0xB8860B,\n\t\t'darkgray': 0xA9A9A9,\n\t\t'darkgreen': 0x006400,\n\t\t'darkgrey': 0xA9A9A9,\n\t\t'darkkhaki': 0xBDB76B,\n\t\t'darkmagenta': 0x8B008B,\n\t\t'darkolivegreen': 0x556B2F,\n\t\t'darkorange': 0xFF8C00,\n\t\t'darkorchid': 0x9932CC,\n\t\t'darkred': 0x8B0000,\n\t\t'darksalmon': 0xE9967A,\n\t\t'darkseagreen': 0x8FBC8F,\n\t\t'darkslateblue': 0x483D8B,\n\t\t'darkslategray': 0x2F4F4F,\n\t\t'darkslategrey': 0x2F4F4F,\n\t\t'darkturquoise': 0x00CED1,\n\t\t'darkviolet': 0x9400D3,\n\t\t'deeppink': 0xFF1493,\n\t\t'deepskyblue': 0x00BFFF,\n\t\t'dimgray': 0x696969,\n\t\t'dimgrey': 0x696969,\n\t\t'dodgerblue': 0x1E90FF,\n\t\t'firebrick': 0xB22222,\n\t\t'floralwhite': 0xFFFAF0,\n\t\t'forestgreen': 0x228B22,\n\t\t'fuchsia': 0xFF00FF,\n\t\t'gainsboro': 0xDCDCDC,\n\t\t'ghostwhite': 0xF8F8FF,\n\t\t'gold': 0xFFD700,\n\t\t'goldenrod': 0xDAA520,\n\t\t'gray': 0x808080,\n\t\t'green': 0x008000,\n\t\t'greenyellow': 0xADFF2F,\n\t\t'grey': 0x808080,\n\t\t'honeydew': 0xF0FFF0,\n\t\t'hotpink': 0xFF69B4,\n\t\t'indianred': 0xCD5C5C,\n\t\t'indigo': 0x4B0082,\n\t\t'ivory': 0xFFFFF0,\n\t\t'khaki': 0xF0E68C,\n\t\t'lavender': 0xE6E6FA,\n\t\t'lavenderblush': 0xFFF0F5,\n\t\t'lawngreen': 0x7CFC00,\n\t\t'lemonchiffon': 0xFFFACD,\n\t\t'lightblue': 0xADD8E6,\n\t\t'lightcoral': 0xF08080,\n\t\t'lightcyan': 0xE0FFFF,\n\t\t'lightgoldenrodyellow': 0xFAFAD2,\n\t\t'lightgray': 0xD3D3D3,\n\t\t'lightgreen': 0x90EE90,\n\t\t'lightgrey': 0xD3D3D3,\n\t\t'lightpink': 0xFFB6C1,\n\t\t'lightsalmon': 0xFFA07A,\n\t\t'lightseagreen': 0x20B2AA,\n\t\t'lightskyblue': 0x87CEFA,\n\t\t'lightslategray': 0x778899,\n\t\t'lightslategrey': 0x778899,\n\t\t'lightsteelblue': 0xB0C4DE,\n\t\t'lightyellow': 0xFFFFE0,\n\t\t'lime': 0x00FF00,\n\t\t'limegreen': 0x32CD32,\n\t\t'linen': 0xFAF0E6,\n\t\t'magenta': 0xFF00FF,\n\t\t'maroon': 0x800000,\n\t\t'mediumaquamarine': 0x66CDAA,\n\t\t'mediumblue': 0x0000CD,\n\t\t'mediumorchid': 0xBA55D3,\n\t\t'mediumpurple': 0x9370DB,\n\t\t'mediumseagreen': 0x3CB371,\n\t\t'mediumslateblue': 0x7B68EE,\n\t\t'mediumspringgreen': 0x00FA9A,\n\t\t'mediumturquoise': 0x48D1CC,\n\t\t'mediumvioletred': 0xC71585,\n\t\t'midnightblue': 0x191970,\n\t\t'mintcream': 0xF5FFFA,\n\t\t'mistyrose': 0xFFE4E1,\n\t\t'moccasin': 0xFFE4B5,\n\t\t'navajowhite': 0xFFDEAD,\n\t\t'navy': 0x000080,\n\t\t'oldlace': 0xFDF5E6,\n\t\t'olive': 0x808000,\n\t\t'olivedrab': 0x6B8E23,\n\t\t'orange': 0xFFA500,\n\t\t'orangered': 0xFF4500,\n\t\t'orchid': 0xDA70D6,\n\t\t'palegoldenrod': 0xEEE8AA,\n\t\t'palegreen': 0x98FB98,\n\t\t'paleturquoise': 0xAFEEEE,\n\t\t'palevioletred': 0xDB7093,\n\t\t'papayawhip': 0xFFEFD5,\n\t\t'peachpuff': 0xFFDAB9,\n\t\t'peru': 0xCD853F,\n\t\t'pink': 0xFFC0CB,\n\t\t'plum': 0xDDA0DD,\n\t\t'powderblue': 0xB0E0E6,\n\t\t'purple': 0x800080,\n\t\t'rebeccapurple': 0x663399,\n\t\t'red': 0xFF0000,\n\t\t'rosybrown': 0xBC8F8F,\n\t\t'royalblue': 0x4169E1,\n\t\t'saddlebrown': 0x8B4513,\n\t\t'salmon': 0xFA8072,\n\t\t'sandybrown': 0xF4A460,\n\t\t'seagreen': 0x2E8B57,\n\t\t'seashell': 0xFFF5EE,\n\t\t'sienna': 0xA0522D,\n\t\t'silver': 0xC0C0C0,\n\t\t'skyblue': 0x87CEEB,\n\t\t'slateblue': 0x6A5ACD,\n\t\t'slategray': 0x708090,\n\t\t'slategrey': 0x708090,\n\t\t'snow': 0xFFFAFA,\n\t\t'springgreen': 0x00FF7F,\n\t\t'steelblue': 0x4682B4,\n\t\t'tan': 0xD2B48C,\n\t\t'teal': 0x008080,\n\t\t'thistle': 0xD8BFD8,\n\t\t'tomato': 0xFF6347,\n\t\t'turquoise': 0x40E0D0,\n\t\t'violet': 0xEE82EE,\n\t\t'wheat': 0xF5DEB3,\n\t\t'white': 0xFFFFFF,\n\t\t'whitesmoke': 0xF5F5F5,\n\t\t'yellow': 0xFFFF00,\n\t\t'yellowgreen': 0x9ACD32\n\t};\n\tvar _hslA = {\n\t\th: 0,\n\t\ts: 0,\n\t\tl: 0\n\t};\n\tvar _hslB = {\n\t\th: 0,\n\t\ts: 0,\n\t\tl: 0\n\t};\n\n\tfunction hue2rgb(p, q, t) {\n\t\tif (t < 0) t += 1;\n\t\tif (t > 1) t -= 1;\n\t\tif (t < 1 / 6) return p + (q - p) * 6 * t;\n\t\tif (t < 1 / 2) return q;\n\t\tif (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t);\n\t\treturn p;\n\t}\n\n\tfunction SRGBToLinear(c) {\n\t\treturn c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n\t}\n\n\tfunction LinearToSRGB(c) {\n\t\treturn c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n\t}\n\n\tvar Color = /*#__PURE__*/function () {\n\t\tfunction Color(r, g, b) {\n\t\t\tObject.defineProperty(this, 'isColor', {\n\t\t\t\tvalue: true\n\t\t\t});\n\n\t\t\tif (g === undefined && b === undefined) {\n\t\t\t\t// r is THREE.Color, hex or string\n\t\t\t\treturn this.set(r);\n\t\t\t}\n\n\t\t\treturn this.setRGB(r, g, b);\n\t\t}\n\n\t\tvar _proto = Color.prototype;\n\n\t\t_proto.set = function set(value) {\n\t\t\tif (value && value.isColor) {\n\t\t\t\tthis.copy(value);\n\t\t\t} else if (typeof value === 'number') {\n\t\t\t\tthis.setHex(value);\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tthis.setStyle(value);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setScalar = function setScalar(scalar) {\n\t\t\tthis.r = scalar;\n\t\t\tthis.g = scalar;\n\t\t\tthis.b = scalar;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setHex = function setHex(hex) {\n\t\t\thex = Math.floor(hex);\n\t\t\tthis.r = (hex >> 16 & 255) / 255;\n\t\t\tthis.g = (hex >> 8 & 255) / 255;\n\t\t\tthis.b = (hex & 255) / 255;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setRGB = function setRGB(r, g, b) {\n\t\t\tthis.r = r;\n\t\t\tthis.g = g;\n\t\t\tthis.b = b;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setHSL = function setHSL(h, s, l) {\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\th = MathUtils.euclideanModulo(h, 1);\n\t\t\ts = MathUtils.clamp(s, 0, 1);\n\t\t\tl = MathUtils.clamp(l, 0, 1);\n\n\t\t\tif (s === 0) {\n\t\t\t\tthis.r = this.g = this.b = l;\n\t\t\t} else {\n\t\t\t\tvar p = l <= 0.5 ? l * (1 + s) : l + s - l * s;\n\t\t\t\tvar q = 2 * l - p;\n\t\t\t\tthis.r = hue2rgb(q, p, h + 1 / 3);\n\t\t\t\tthis.g = hue2rgb(q, p, h);\n\t\t\t\tthis.b = hue2rgb(q, p, h - 1 / 3);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setStyle = function setStyle(style) {\n\t\t\tfunction handleAlpha(string) {\n\t\t\t\tif (string === undefined) return;\n\n\t\t\t\tif (parseFloat(string) < 1) {\n\t\t\t\t\tconsole.warn('THREE.Color: Alpha component of ' + style + ' will be ignored.');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar m;\n\n\t\t\tif (m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec(style)) {\n\t\t\t\t// rgb / hsl\n\t\t\t\tvar color;\n\t\t\t\tvar name = m[1];\n\t\t\t\tvar components = m[2];\n\n\t\t\t\tswitch (name) {\n\t\t\t\t\tcase 'rgb':\n\t\t\t\t\tcase 'rgba':\n\t\t\t\t\t\tif (color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n\t\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\t\tthis.r = Math.min(255, parseInt(color[1], 10)) / 255;\n\t\t\t\t\t\t\tthis.g = Math.min(255, parseInt(color[2], 10)) / 255;\n\t\t\t\t\t\t\tthis.b = Math.min(255, parseInt(color[3], 10)) / 255;\n\t\t\t\t\t\t\thandleAlpha(color[4]);\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n\t\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\t\tthis.r = Math.min(100, parseInt(color[1], 10)) / 100;\n\t\t\t\t\t\t\tthis.g = Math.min(100, parseInt(color[2], 10)) / 100;\n\t\t\t\t\t\t\tthis.b = Math.min(100, parseInt(color[3], 10)) / 100;\n\t\t\t\t\t\t\thandleAlpha(color[4]);\n\t\t\t\t\t\t\treturn this;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'hsl':\n\t\t\t\t\tcase 'hsla':\n\t\t\t\t\t\tif (color = /^(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(components)) {\n\t\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\t\tvar h = parseFloat(color[1]) / 360;\n\t\t\t\t\t\t\tvar s = parseInt(color[2], 10) / 100;\n\t\t\t\t\t\t\tvar l = parseInt(color[3], 10) / 100;\n\t\t\t\t\t\t\thandleAlpha(color[4]);\n\t\t\t\t\t\t\treturn this.setHSL(h, s, l);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if (m = /^\\#([A-Fa-f\\d]+)$/.exec(style)) {\n\t\t\t\t// hex color\n\t\t\t\tvar hex = m[1];\n\t\t\t\tvar size = hex.length;\n\n\t\t\t\tif (size === 3) {\n\t\t\t\t\t// #ff0\n\t\t\t\t\tthis.r = parseInt(hex.charAt(0) + hex.charAt(0), 16) / 255;\n\t\t\t\t\tthis.g = parseInt(hex.charAt(1) + hex.charAt(1), 16) / 255;\n\t\t\t\t\tthis.b = parseInt(hex.charAt(2) + hex.charAt(2), 16) / 255;\n\t\t\t\t\treturn this;\n\t\t\t\t} else if (size === 6) {\n\t\t\t\t\t// #ff0000\n\t\t\t\t\tthis.r = parseInt(hex.charAt(0) + hex.charAt(1), 16) / 255;\n\t\t\t\t\tthis.g = parseInt(hex.charAt(2) + hex.charAt(3), 16) / 255;\n\t\t\t\t\tthis.b = parseInt(hex.charAt(4) + hex.charAt(5), 16) / 255;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (style && style.length > 0) {\n\t\t\t\treturn this.setColorName(style);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setColorName = function setColorName(style) {\n\t\t\t// color keywords\n\t\t\tvar hex = _colorKeywords[style];\n\n\t\t\tif (hex !== undefined) {\n\t\t\t\t// red\n\t\t\t\tthis.setHex(hex);\n\t\t\t} else {\n\t\t\t\t// unknown color\n\t\t\t\tconsole.warn('THREE.Color: Unknown color ' + style);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor(this.r, this.g, this.b);\n\t\t};\n\n\t\t_proto.copy = function copy(color) {\n\t\t\tthis.r = color.r;\n\t\t\tthis.g = color.g;\n\t\t\tthis.b = color.b;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.copyGammaToLinear = function copyGammaToLinear(color, gammaFactor) {\n\t\t\tif (gammaFactor === void 0) {\n\t\t\t\tgammaFactor = 2.0;\n\t\t\t}\n\n\t\t\tthis.r = Math.pow(color.r, gammaFactor);\n\t\t\tthis.g = Math.pow(color.g, gammaFactor);\n\t\t\tthis.b = Math.pow(color.b, gammaFactor);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.copyLinearToGamma = function copyLinearToGamma(color, gammaFactor) {\n\t\t\tif (gammaFactor === void 0) {\n\t\t\t\tgammaFactor = 2.0;\n\t\t\t}\n\n\t\t\tvar safeInverse = gammaFactor > 0 ? 1.0 / gammaFactor : 1.0;\n\t\t\tthis.r = Math.pow(color.r, safeInverse);\n\t\t\tthis.g = Math.pow(color.g, safeInverse);\n\t\t\tthis.b = Math.pow(color.b, safeInverse);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.convertGammaToLinear = function convertGammaToLinear(gammaFactor) {\n\t\t\tthis.copyGammaToLinear(this, gammaFactor);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.convertLinearToGamma = function convertLinearToGamma(gammaFactor) {\n\t\t\tthis.copyLinearToGamma(this, gammaFactor);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.copySRGBToLinear = function copySRGBToLinear(color) {\n\t\t\tthis.r = SRGBToLinear(color.r);\n\t\t\tthis.g = SRGBToLinear(color.g);\n\t\t\tthis.b = SRGBToLinear(color.b);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.copyLinearToSRGB = function copyLinearToSRGB(color) {\n\t\t\tthis.r = LinearToSRGB(color.r);\n\t\t\tthis.g = LinearToSRGB(color.g);\n\t\t\tthis.b = LinearToSRGB(color.b);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.convertSRGBToLinear = function convertSRGBToLinear() {\n\t\t\tthis.copySRGBToLinear(this);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.convertLinearToSRGB = function convertLinearToSRGB() {\n\t\t\tthis.copyLinearToSRGB(this);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getHex = function getHex() {\n\t\t\treturn this.r * 255 << 16 ^ this.g * 255 << 8 ^ this.b * 255 << 0;\n\t\t};\n\n\t\t_proto.getHexString = function getHexString() {\n\t\t\treturn ('000000' + this.getHex().toString(16)).slice(-6);\n\t\t};\n\n\t\t_proto.getHSL = function getHSL(target) {\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Color: .getHSL() target is now required');\n\t\t\t\ttarget = {\n\t\t\t\t\th: 0,\n\t\t\t\t\ts: 0,\n\t\t\t\t\tl: 0\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar r = this.r,\n\t\t\t\t\tg = this.g,\n\t\t\t\t\tb = this.b;\n\t\t\tvar max = Math.max(r, g, b);\n\t\t\tvar min = Math.min(r, g, b);\n\t\t\tvar hue, saturation;\n\t\t\tvar lightness = (min + max) / 2.0;\n\n\t\t\tif (min === max) {\n\t\t\t\thue = 0;\n\t\t\t\tsaturation = 0;\n\t\t\t} else {\n\t\t\t\tvar delta = max - min;\n\t\t\t\tsaturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min);\n\n\t\t\t\tswitch (max) {\n\t\t\t\t\tcase r:\n\t\t\t\t\t\thue = (g - b) / delta + (g < b ? 6 : 0);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase g:\n\t\t\t\t\t\thue = (b - r) / delta + 2;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase b:\n\t\t\t\t\t\thue = (r - g) / delta + 4;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\thue /= 6;\n\t\t\t}\n\n\t\t\ttarget.h = hue;\n\t\t\ttarget.s = saturation;\n\t\t\ttarget.l = lightness;\n\t\t\treturn target;\n\t\t};\n\n\t\t_proto.getStyle = function getStyle() {\n\t\t\treturn 'rgb(' + (this.r * 255 | 0) + ',' + (this.g * 255 | 0) + ',' + (this.b * 255 | 0) + ')';\n\t\t};\n\n\t\t_proto.offsetHSL = function offsetHSL(h, s, l) {\n\t\t\tthis.getHSL(_hslA);\n\t\t\t_hslA.h += h;\n\t\t\t_hslA.s += s;\n\t\t\t_hslA.l += l;\n\t\t\tthis.setHSL(_hslA.h, _hslA.s, _hslA.l);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.add = function add(color) {\n\t\t\tthis.r += color.r;\n\t\t\tthis.g += color.g;\n\t\t\tthis.b += color.b;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addColors = function addColors(color1, color2) {\n\t\t\tthis.r = color1.r + color2.r;\n\t\t\tthis.g = color1.g + color2.g;\n\t\t\tthis.b = color1.b + color2.b;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addScalar = function addScalar(s) {\n\t\t\tthis.r += s;\n\t\t\tthis.g += s;\n\t\t\tthis.b += s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.sub = function sub(color) {\n\t\t\tthis.r = Math.max(0, this.r - color.r);\n\t\t\tthis.g = Math.max(0, this.g - color.g);\n\t\t\tthis.b = Math.max(0, this.b - color.b);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiply = function multiply(color) {\n\t\t\tthis.r *= color.r;\n\t\t\tthis.g *= color.g;\n\t\t\tthis.b *= color.b;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.multiplyScalar = function multiplyScalar(s) {\n\t\t\tthis.r *= s;\n\t\t\tthis.g *= s;\n\t\t\tthis.b *= s;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.lerp = function lerp(color, alpha) {\n\t\t\tthis.r += (color.r - this.r) * alpha;\n\t\t\tthis.g += (color.g - this.g) * alpha;\n\t\t\tthis.b += (color.b - this.b) * alpha;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.lerpHSL = function lerpHSL(color, alpha) {\n\t\t\tthis.getHSL(_hslA);\n\t\t\tcolor.getHSL(_hslB);\n\t\t\tvar h = MathUtils.lerp(_hslA.h, _hslB.h, alpha);\n\t\t\tvar s = MathUtils.lerp(_hslA.s, _hslB.s, alpha);\n\t\t\tvar l = MathUtils.lerp(_hslA.l, _hslB.l, alpha);\n\t\t\tthis.setHSL(h, s, l);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(c) {\n\t\t\treturn c.r === this.r && c.g === this.g && c.b === this.b;\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tthis.r = array[offset];\n\t\t\tthis.g = array[offset + 1];\n\t\t\tthis.b = array[offset + 2];\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tarray[offset] = this.r;\n\t\t\tarray[offset + 1] = this.g;\n\t\t\tarray[offset + 2] = this.b;\n\t\t\treturn array;\n\t\t};\n\n\t\t_proto.fromBufferAttribute = function fromBufferAttribute(attribute, index) {\n\t\t\tthis.r = attribute.getX(index);\n\t\t\tthis.g = attribute.getY(index);\n\t\t\tthis.b = attribute.getZ(index);\n\n\t\t\tif (attribute.normalized === true) {\n\t\t\t\t// assuming Uint8Array\n\t\t\t\tthis.r /= 255;\n\t\t\t\tthis.g /= 255;\n\t\t\t\tthis.b /= 255;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toJSON = function toJSON() {\n\t\t\treturn this.getHex();\n\t\t};\n\n\t\treturn Color;\n\t}();\n\n\tColor.NAMES = _colorKeywords;\n\tColor.prototype.r = 1;\n\tColor.prototype.g = 1;\n\tColor.prototype.b = 1;\n\n\tvar Face3 = /*#__PURE__*/function () {\n\t\tfunction Face3(a, b, c, normal, color, materialIndex) {\n\t\t\tif (materialIndex === void 0) {\n\t\t\t\tmaterialIndex = 0;\n\t\t\t}\n\n\t\t\tthis.a = a;\n\t\t\tthis.b = b;\n\t\t\tthis.c = c;\n\t\t\tthis.normal = normal && normal.isVector3 ? normal : new Vector3();\n\t\t\tthis.vertexNormals = Array.isArray(normal) ? normal : [];\n\t\t\tthis.color = color && color.isColor ? color : new Color();\n\t\t\tthis.vertexColors = Array.isArray(color) ? color : [];\n\t\t\tthis.materialIndex = materialIndex;\n\t\t}\n\n\t\tvar _proto = Face3.prototype;\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(source) {\n\t\t\tthis.a = source.a;\n\t\t\tthis.b = source.b;\n\t\t\tthis.c = source.c;\n\t\t\tthis.normal.copy(source.normal);\n\t\t\tthis.color.copy(source.color);\n\t\t\tthis.materialIndex = source.materialIndex;\n\n\t\t\tfor (var i = 0, il = source.vertexNormals.length; i < il; i++) {\n\t\t\t\tthis.vertexNormals[i] = source.vertexNormals[i].clone();\n\t\t\t}\n\n\t\t\tfor (var _i = 0, _il = source.vertexColors.length; _i < _il; _i++) {\n\t\t\t\tthis.vertexColors[_i] = source.vertexColors[_i].clone();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\treturn Face3;\n\t}();\n\n\tvar materialId = 0;\n\n\tfunction Material() {\n\t\tObject.defineProperty(this, 'id', {\n\t\t\tvalue: materialId++\n\t\t});\n\t\tthis.uuid = MathUtils.generateUUID();\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\t\tthis.fog = true;\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.flatShading = false;\n\t\tthis.vertexColors = false;\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\t\tthis.shadowSide = null;\n\t\tthis.colorWrite = true;\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\t\tthis.dithering = false;\n\t\tthis.alphaTest = 0;\n\t\tthis.premultipliedAlpha = false;\n\t\tthis.visible = true;\n\t\tthis.toneMapped = true;\n\t\tthis.userData = {};\n\t\tthis.version = 0;\n\t}\n\n\tMaterial.prototype = Object.assign(Object.create(EventDispatcher.prototype), {\n\t\tconstructor: Material,\n\t\tisMaterial: true,\n\t\tonBeforeCompile: function onBeforeCompile()\n\t\t/* shaderobject, renderer */\n\t\t{},\n\t\tcustomProgramCacheKey: function customProgramCacheKey() {\n\t\t\treturn this.onBeforeCompile.toString();\n\t\t},\n\t\tsetValues: function setValues(values) {\n\t\t\tif (values === undefined) return;\n\n\t\t\tfor (var key in values) {\n\t\t\t\tvar newValue = values[key];\n\n\t\t\t\tif (newValue === undefined) {\n\t\t\t\t\tconsole.warn('THREE.Material: \\'' + key + '\\' parameter is undefined.');\n\t\t\t\t\tcontinue;\n\t\t\t\t} // for backward compatability if shading is set in the constructor\n\n\n\t\t\t\tif (key === 'shading') {\n\t\t\t\t\tconsole.warn('THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.');\n\t\t\t\t\tthis.flatShading = newValue === FlatShading ? true : false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar currentValue = this[key];\n\n\t\t\t\tif (currentValue === undefined) {\n\t\t\t\t\tconsole.warn('THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.');\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (currentValue && currentValue.isColor) {\n\t\t\t\t\tcurrentValue.set(newValue);\n\t\t\t\t} else if (currentValue && currentValue.isVector3 && newValue && newValue.isVector3) {\n\t\t\t\t\tcurrentValue.copy(newValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis[key] = newValue;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar isRoot = meta === undefined || typeof meta === 'string';\n\n\t\t\tif (isRoot) {\n\t\t\t\tmeta = {\n\t\t\t\t\ttextures: {},\n\t\t\t\t\timages: {}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Material',\n\t\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t\t}\n\t\t\t}; // standard Material serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif (this.name !== '') data.name = this.name;\n\t\t\tif (this.color && this.color.isColor) data.color = this.color.getHex();\n\t\t\tif (this.roughness !== undefined) data.roughness = this.roughness;\n\t\t\tif (this.metalness !== undefined) data.metalness = this.metalness;\n\t\t\tif (this.sheen && this.sheen.isColor) data.sheen = this.sheen.getHex();\n\t\t\tif (this.emissive && this.emissive.isColor) data.emissive = this.emissive.getHex();\n\t\t\tif (this.emissiveIntensity && this.emissiveIntensity !== 1) data.emissiveIntensity = this.emissiveIntensity;\n\t\t\tif (this.specular && this.specular.isColor) data.specular = this.specular.getHex();\n\t\t\tif (this.shininess !== undefined) data.shininess = this.shininess;\n\t\t\tif (this.clearcoat !== undefined) data.clearcoat = this.clearcoat;\n\t\t\tif (this.clearcoatRoughness !== undefined) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\t\tif (this.clearcoatMap && this.clearcoatMap.isTexture) {\n\t\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON(meta).uuid;\n\t\t\t}\n\n\t\t\tif (this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture) {\n\t\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(meta).uuid;\n\t\t\t}\n\n\t\t\tif (this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture) {\n\t\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(meta).uuid;\n\t\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\t\t\t}\n\n\t\t\tif (this.map && this.map.isTexture) data.map = this.map.toJSON(meta).uuid;\n\t\t\tif (this.matcap && this.matcap.isTexture) data.matcap = this.matcap.toJSON(meta).uuid;\n\t\t\tif (this.alphaMap && this.alphaMap.isTexture) data.alphaMap = this.alphaMap.toJSON(meta).uuid;\n\t\t\tif (this.lightMap && this.lightMap.isTexture) data.lightMap = this.lightMap.toJSON(meta).uuid;\n\n\t\t\tif (this.aoMap && this.aoMap.isTexture) {\n\t\t\t\tdata.aoMap = this.aoMap.toJSON(meta).uuid;\n\t\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\t\t\t}\n\n\t\t\tif (this.bumpMap && this.bumpMap.isTexture) {\n\t\t\t\tdata.bumpMap = this.bumpMap.toJSON(meta).uuid;\n\t\t\t\tdata.bumpScale = this.bumpScale;\n\t\t\t}\n\n\t\t\tif (this.normalMap && this.normalMap.isTexture) {\n\t\t\t\tdata.normalMap = this.normalMap.toJSON(meta).uuid;\n\t\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\t\tdata.normalScale = this.normalScale.toArray();\n\t\t\t}\n\n\t\t\tif (this.displacementMap && this.displacementMap.isTexture) {\n\t\t\t\tdata.displacementMap = this.displacementMap.toJSON(meta).uuid;\n\t\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\t\tdata.displacementBias = this.displacementBias;\n\t\t\t}\n\n\t\t\tif (this.roughnessMap && this.roughnessMap.isTexture) data.roughnessMap = this.roughnessMap.toJSON(meta).uuid;\n\t\t\tif (this.metalnessMap && this.metalnessMap.isTexture) data.metalnessMap = this.metalnessMap.toJSON(meta).uuid;\n\t\t\tif (this.emissiveMap && this.emissiveMap.isTexture) data.emissiveMap = this.emissiveMap.toJSON(meta).uuid;\n\t\t\tif (this.specularMap && this.specularMap.isTexture) data.specularMap = this.specularMap.toJSON(meta).uuid;\n\n\t\t\tif (this.envMap && this.envMap.isTexture) {\n\t\t\t\tdata.envMap = this.envMap.toJSON(meta).uuid;\n\t\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t\t\tdata.refractionRatio = this.refractionRatio;\n\t\t\t\tif (this.combine !== undefined) data.combine = this.combine;\n\t\t\t\tif (this.envMapIntensity !== undefined) data.envMapIntensity = this.envMapIntensity;\n\t\t\t}\n\n\t\t\tif (this.gradientMap && this.gradientMap.isTexture) {\n\t\t\t\tdata.gradientMap = this.gradientMap.toJSON(meta).uuid;\n\t\t\t}\n\n\t\t\tif (this.size !== undefined) data.size = this.size;\n\t\t\tif (this.sizeAttenuation !== undefined) data.sizeAttenuation = this.sizeAttenuation;\n\t\t\tif (this.blending !== NormalBlending) data.blending = this.blending;\n\t\t\tif (this.flatShading === true) data.flatShading = this.flatShading;\n\t\t\tif (this.side !== FrontSide) data.side = this.side;\n\t\t\tif (this.vertexColors) data.vertexColors = true;\n\t\t\tif (this.opacity < 1) data.opacity = this.opacity;\n\t\t\tif (this.transparent === true) data.transparent = this.transparent;\n\t\t\tdata.depthFunc = this.depthFunc;\n\t\t\tdata.depthTest = this.depthTest;\n\t\t\tdata.depthWrite = this.depthWrite;\n\t\t\tdata.stencilWrite = this.stencilWrite;\n\t\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\t\tdata.stencilFunc = this.stencilFunc;\n\t\t\tdata.stencilRef = this.stencilRef;\n\t\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\t\tdata.stencilFail = this.stencilFail;\n\t\t\tdata.stencilZFail = this.stencilZFail;\n\t\t\tdata.stencilZPass = this.stencilZPass; // rotation (SpriteMaterial)\n\n\t\t\tif (this.rotation && this.rotation !== 0) data.rotation = this.rotation;\n\t\t\tif (this.polygonOffset === true) data.polygonOffset = true;\n\t\t\tif (this.polygonOffsetFactor !== 0) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\t\tif (this.polygonOffsetUnits !== 0) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\t\t\tif (this.linewidth && this.linewidth !== 1) data.linewidth = this.linewidth;\n\t\t\tif (this.dashSize !== undefined) data.dashSize = this.dashSize;\n\t\t\tif (this.gapSize !== undefined) data.gapSize = this.gapSize;\n\t\t\tif (this.scale !== undefined) data.scale = this.scale;\n\t\t\tif (this.dithering === true) data.dithering = true;\n\t\t\tif (this.alphaTest > 0) data.alphaTest = this.alphaTest;\n\t\t\tif (this.premultipliedAlpha === true) data.premultipliedAlpha = this.premultipliedAlpha;\n\t\t\tif (this.wireframe === true) data.wireframe = this.wireframe;\n\t\t\tif (this.wireframeLinewidth > 1) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\t\tif (this.wireframeLinecap !== 'round') data.wireframeLinecap = this.wireframeLinecap;\n\t\t\tif (this.wireframeLinejoin !== 'round') data.wireframeLinejoin = this.wireframeLinejoin;\n\t\t\tif (this.morphTargets === true) data.morphTargets = true;\n\t\t\tif (this.morphNormals === true) data.morphNormals = true;\n\t\t\tif (this.skinning === true) data.skinning = true;\n\t\t\tif (this.visible === false) data.visible = false;\n\t\t\tif (this.toneMapped === false) data.toneMapped = false;\n\t\t\tif (JSON.stringify(this.userData) !== '{}') data.userData = this.userData; // TODO: Copied from Object3D.toJSON\n\n\t\t\tfunction extractFromCache(cache) {\n\t\t\t\tvar values = [];\n\n\t\t\t\tfor (var key in cache) {\n\t\t\t\t\tvar _data = cache[key];\n\t\t\t\t\tdelete _data.metadata;\n\t\t\t\t\tvalues.push(_data);\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t}\n\n\t\t\tif (isRoot) {\n\t\t\t\tvar textures = extractFromCache(meta.textures);\n\t\t\t\tvar images = extractFromCache(meta.images);\n\t\t\t\tif (textures.length > 0) data.textures = textures;\n\t\t\t\tif (images.length > 0) data.images = images;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tthis.name = source.name;\n\t\t\tthis.fog = source.fog;\n\t\t\tthis.blending = source.blending;\n\t\t\tthis.side = source.side;\n\t\t\tthis.flatShading = source.flatShading;\n\t\t\tthis.vertexColors = source.vertexColors;\n\t\t\tthis.opacity = source.opacity;\n\t\t\tthis.transparent = source.transparent;\n\t\t\tthis.blendSrc = source.blendSrc;\n\t\t\tthis.blendDst = source.blendDst;\n\t\t\tthis.blendEquation = source.blendEquation;\n\t\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\t\t\tthis.depthFunc = source.depthFunc;\n\t\t\tthis.depthTest = source.depthTest;\n\t\t\tthis.depthWrite = source.depthWrite;\n\t\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\t\tthis.stencilFunc = source.stencilFunc;\n\t\t\tthis.stencilRef = source.stencilRef;\n\t\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\t\tthis.stencilFail = source.stencilFail;\n\t\t\tthis.stencilZFail = source.stencilZFail;\n\t\t\tthis.stencilZPass = source.stencilZPass;\n\t\t\tthis.stencilWrite = source.stencilWrite;\n\t\t\tvar srcPlanes = source.clippingPlanes;\n\t\t\tvar dstPlanes = null;\n\n\t\t\tif (srcPlanes !== null) {\n\t\t\t\tvar n = srcPlanes.length;\n\t\t\t\tdstPlanes = new Array(n);\n\n\t\t\t\tfor (var i = 0; i !== n; ++i) {\n\t\t\t\t\tdstPlanes[i] = srcPlanes[i].clone();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.clippingPlanes = dstPlanes;\n\t\t\tthis.clipIntersection = source.clipIntersection;\n\t\t\tthis.clipShadows = source.clipShadows;\n\t\t\tthis.shadowSide = source.shadowSide;\n\t\t\tthis.colorWrite = source.colorWrite;\n\t\t\tthis.precision = source.precision;\n\t\t\tthis.polygonOffset = source.polygonOffset;\n\t\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\t\t\tthis.dithering = source.dithering;\n\t\t\tthis.alphaTest = source.alphaTest;\n\t\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\t\tthis.visible = source.visible;\n\t\t\tthis.toneMapped = source.toneMapped;\n\t\t\tthis.userData = JSON.parse(JSON.stringify(source.userData));\n\t\t\treturn this;\n\t\t},\n\t\tdispose: function dispose() {\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'dispose'\n\t\t\t});\n\t\t}\n\t});\n\tObject.defineProperty(Material.prototype, 'needsUpdate', {\n\t\tset: function set(value) {\n\t\t\tif (value === true) this.version++;\n\t\t}\n\t});\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\topacity: <float>,\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\n\t *\tlightMap: new THREE.Texture( <Image> ),\n\t *\tlightMapIntensity: <float>\n\t *\n\t *\taoMap: new THREE.Texture( <Image> ),\n\t *\taoMapIntensity: <float>\n\t *\n\t *\tspecularMap: new THREE.Texture( <Image> ),\n\t *\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tenvMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t *\tcombine: THREE.Multiply,\n\t *\treflectivity: <float>,\n\t *\trefractionRatio: <float>,\n\t *\n\t *\tdepthTest: <bool>,\n\t *\tdepthWrite: <bool>,\n\t *\n\t *\twireframe: <boolean>,\n\t *\twireframeLinewidth: <float>,\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>\n\t * }\n\t */\n\n\tfunction MeshBasicMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'MeshBasicMaterial';\n\t\tthis.color = new Color(0xffffff); // emissive\n\n\t\tthis.map = null;\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\t\tthis.specularMap = null;\n\t\tthis.alphaMap = null;\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshBasicMaterial.prototype = Object.create(Material.prototype);\n\tMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\tMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\n\tMeshBasicMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.color.copy(source.color);\n\t\tthis.map = source.map;\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\t\tthis.specularMap = source.specularMap;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\treturn this;\n\t};\n\n\tvar _vector$3 = new Vector3();\n\n\tvar _vector2$1 = new Vector2();\n\n\tfunction BufferAttribute(array, itemSize, normalized) {\n\t\tif (Array.isArray(array)) {\n\t\t\tthrow new TypeError('THREE.BufferAttribute: array should be a Typed Array.');\n\t\t}\n\n\t\tthis.name = '';\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = {\n\t\t\toffset: 0,\n\t\t\tcount: -1\n\t\t};\n\t\tthis.version = 0;\n\t}\n\n\tObject.defineProperty(BufferAttribute.prototype, 'needsUpdate', {\n\t\tset: function set(value) {\n\t\t\tif (value === true) this.version++;\n\t\t}\n\t});\n\tObject.assign(BufferAttribute.prototype, {\n\t\tisBufferAttribute: true,\n\t\tonUploadCallback: function onUploadCallback() {},\n\t\tsetUsage: function setUsage(value) {\n\t\t\tthis.usage = value;\n\t\t\treturn this;\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tthis.name = source.name;\n\t\t\tthis.array = new source.array.constructor(source.array);\n\t\t\tthis.itemSize = source.itemSize;\n\t\t\tthis.count = source.count;\n\t\t\tthis.normalized = source.normalized;\n\t\t\tthis.usage = source.usage;\n\t\t\treturn this;\n\t\t},\n\t\tcopyAt: function copyAt(index1, attribute, index2) {\n\t\t\tindex1 *= this.itemSize;\n\t\t\tindex2 *= attribute.itemSize;\n\n\t\t\tfor (var i = 0, l = this.itemSize; i < l; i++) {\n\t\t\t\tthis.array[index1 + i] = attribute.array[index2 + i];\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tcopyArray: function copyArray(array) {\n\t\t\tthis.array.set(array);\n\t\t\treturn this;\n\t\t},\n\t\tcopyColorsArray: function copyColorsArray(colors) {\n\t\t\tvar array = this.array;\n\t\t\tvar offset = 0;\n\n\t\t\tfor (var i = 0, l = colors.length; i < l; i++) {\n\t\t\t\tvar color = colors[i];\n\n\t\t\t\tif (color === undefined) {\n\t\t\t\t\tconsole.warn('THREE.BufferAttribute.copyColorsArray(): color is undefined', i);\n\t\t\t\t\tcolor = new Color();\n\t\t\t\t}\n\n\t\t\t\tarray[offset++] = color.r;\n\t\t\t\tarray[offset++] = color.g;\n\t\t\t\tarray[offset++] = color.b;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tcopyVector2sArray: function copyVector2sArray(vectors) {\n\t\t\tvar array = this.array;\n\t\t\tvar offset = 0;\n\n\t\t\tfor (var i = 0, l = vectors.length; i < l; i++) {\n\t\t\t\tvar vector = vectors[i];\n\n\t\t\t\tif (vector === undefined) {\n\t\t\t\t\tconsole.warn('THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i);\n\t\t\t\t\tvector = new Vector2();\n\t\t\t\t}\n\n\t\t\t\tarray[offset++] = vector.x;\n\t\t\t\tarray[offset++] = vector.y;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tcopyVector3sArray: function copyVector3sArray(vectors) {\n\t\t\tvar array = this.array;\n\t\t\tvar offset = 0;\n\n\t\t\tfor (var i = 0, l = vectors.length; i < l; i++) {\n\t\t\t\tvar vector = vectors[i];\n\n\t\t\t\tif (vector === undefined) {\n\t\t\t\t\tconsole.warn('THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i);\n\t\t\t\t\tvector = new Vector3();\n\t\t\t\t}\n\n\t\t\t\tarray[offset++] = vector.x;\n\t\t\t\tarray[offset++] = vector.y;\n\t\t\t\tarray[offset++] = vector.z;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tcopyVector4sArray: function copyVector4sArray(vectors) {\n\t\t\tvar array = this.array;\n\t\t\tvar offset = 0;\n\n\t\t\tfor (var i = 0, l = vectors.length; i < l; i++) {\n\t\t\t\tvar vector = vectors[i];\n\n\t\t\t\tif (vector === undefined) {\n\t\t\t\t\tconsole.warn('THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i);\n\t\t\t\t\tvector = new Vector4();\n\t\t\t\t}\n\n\t\t\t\tarray[offset++] = vector.x;\n\t\t\t\tarray[offset++] = vector.y;\n\t\t\t\tarray[offset++] = vector.z;\n\t\t\t\tarray[offset++] = vector.w;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tapplyMatrix3: function applyMatrix3(m) {\n\t\t\tif (this.itemSize === 2) {\n\t\t\t\tfor (var i = 0, l = this.count; i < l; i++) {\n\t\t\t\t\t_vector2$1.fromBufferAttribute(this, i);\n\n\t\t\t\t\t_vector2$1.applyMatrix3(m);\n\n\t\t\t\t\tthis.setXY(i, _vector2$1.x, _vector2$1.y);\n\t\t\t\t}\n\t\t\t} else if (this.itemSize === 3) {\n\t\t\t\tfor (var _i = 0, _l = this.count; _i < _l; _i++) {\n\t\t\t\t\t_vector$3.fromBufferAttribute(this, _i);\n\n\t\t\t\t\t_vector$3.applyMatrix3(m);\n\n\t\t\t\t\tthis.setXYZ(_i, _vector$3.x, _vector$3.y, _vector$3.z);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tapplyMatrix4: function applyMatrix4(m) {\n\t\t\tfor (var i = 0, l = this.count; i < l; i++) {\n\t\t\t\t_vector$3.x = this.getX(i);\n\t\t\t\t_vector$3.y = this.getY(i);\n\t\t\t\t_vector$3.z = this.getZ(i);\n\n\t\t\t\t_vector$3.applyMatrix4(m);\n\n\t\t\t\tthis.setXYZ(i, _vector$3.x, _vector$3.y, _vector$3.z);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tapplyNormalMatrix: function applyNormalMatrix(m) {\n\t\t\tfor (var i = 0, l = this.count; i < l; i++) {\n\t\t\t\t_vector$3.x = this.getX(i);\n\t\t\t\t_vector$3.y = this.getY(i);\n\t\t\t\t_vector$3.z = this.getZ(i);\n\n\t\t\t\t_vector$3.applyNormalMatrix(m);\n\n\t\t\t\tthis.setXYZ(i, _vector$3.x, _vector$3.y, _vector$3.z);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\ttransformDirection: function transformDirection(m) {\n\t\t\tfor (var i = 0, l = this.count; i < l; i++) {\n\t\t\t\t_vector$3.x = this.getX(i);\n\t\t\t\t_vector$3.y = this.getY(i);\n\t\t\t\t_vector$3.z = this.getZ(i);\n\n\t\t\t\t_vector$3.transformDirection(m);\n\n\t\t\t\tthis.setXYZ(i, _vector$3.x, _vector$3.y, _vector$3.z);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tset: function set(value, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tthis.array.set(value, offset);\n\t\t\treturn this;\n\t\t},\n\t\tgetX: function getX(index) {\n\t\t\treturn this.array[index * this.itemSize];\n\t\t},\n\t\tsetX: function setX(index, x) {\n\t\t\tthis.array[index * this.itemSize] = x;\n\t\t\treturn this;\n\t\t},\n\t\tgetY: function getY(index) {\n\t\t\treturn this.array[index * this.itemSize + 1];\n\t\t},\n\t\tsetY: function setY(index, y) {\n\t\t\tthis.array[index * this.itemSize + 1] = y;\n\t\t\treturn this;\n\t\t},\n\t\tgetZ: function getZ(index) {\n\t\t\treturn this.array[index * this.itemSize + 2];\n\t\t},\n\t\tsetZ: function setZ(index, z) {\n\t\t\tthis.array[index * this.itemSize + 2] = z;\n\t\t\treturn this;\n\t\t},\n\t\tgetW: function getW(index) {\n\t\t\treturn this.array[index * this.itemSize + 3];\n\t\t},\n\t\tsetW: function setW(index, w) {\n\t\t\tthis.array[index * this.itemSize + 3] = w;\n\t\t\treturn this;\n\t\t},\n\t\tsetXY: function setXY(index, x, y) {\n\t\t\tindex *= this.itemSize;\n\t\t\tthis.array[index + 0] = x;\n\t\t\tthis.array[index + 1] = y;\n\t\t\treturn this;\n\t\t},\n\t\tsetXYZ: function setXYZ(index, x, y, z) {\n\t\t\tindex *= this.itemSize;\n\t\t\tthis.array[index + 0] = x;\n\t\t\tthis.array[index + 1] = y;\n\t\t\tthis.array[index + 2] = z;\n\t\t\treturn this;\n\t\t},\n\t\tsetXYZW: function setXYZW(index, x, y, z, w) {\n\t\t\tindex *= this.itemSize;\n\t\t\tthis.array[index + 0] = x;\n\t\t\tthis.array[index + 1] = y;\n\t\t\tthis.array[index + 2] = z;\n\t\t\tthis.array[index + 3] = w;\n\t\t\treturn this;\n\t\t},\n\t\tonUpload: function onUpload(callback) {\n\t\t\tthis.onUploadCallback = callback;\n\t\t\treturn this;\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor(this.array, this.itemSize).copy(this);\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call(this.array),\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\t\t}\n\t}); //\n\n\tfunction Int8BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Int8Array(array), itemSize, normalized);\n\t}\n\n\tInt8BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\tfunction Uint8BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Uint8Array(array), itemSize, normalized);\n\t}\n\n\tUint8BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\tfunction Uint8ClampedBufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Uint8ClampedArray(array), itemSize, normalized);\n\t}\n\n\tUint8ClampedBufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\tfunction Int16BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Int16Array(array), itemSize, normalized);\n\t}\n\n\tInt16BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\tfunction Uint16BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Uint16Array(array), itemSize, normalized);\n\t}\n\n\tUint16BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\tfunction Int32BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Int32Array(array), itemSize, normalized);\n\t}\n\n\tInt32BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\tfunction Uint32BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Uint32Array(array), itemSize, normalized);\n\t}\n\n\tUint32BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\tfunction Float16BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Uint16Array(array), itemSize, normalized);\n\t}\n\n\tFloat16BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tFloat16BufferAttribute.prototype.constructor = Float16BufferAttribute;\n\tFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\n\tfunction Float32BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Float32Array(array), itemSize, normalized);\n\t}\n\n\tFloat32BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\tfunction Float64BufferAttribute(array, itemSize, normalized) {\n\t\tBufferAttribute.call(this, new Float64Array(array), itemSize, normalized);\n\t}\n\n\tFloat64BufferAttribute.prototype = Object.create(BufferAttribute.prototype);\n\tFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute; //\n\n\tvar DirectGeometry = /*#__PURE__*/function () {\n\t\tfunction DirectGeometry() {\n\t\t\tthis.vertices = [];\n\t\t\tthis.normals = [];\n\t\t\tthis.colors = [];\n\t\t\tthis.uvs = [];\n\t\t\tthis.uvs2 = [];\n\t\t\tthis.groups = [];\n\t\t\tthis.morphTargets = {};\n\t\t\tthis.skinWeights = [];\n\t\t\tthis.skinIndices = []; // this.lineDistances = [];\n\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null; // update flags\n\n\t\t\tthis.verticesNeedUpdate = false;\n\t\t\tthis.normalsNeedUpdate = false;\n\t\t\tthis.colorsNeedUpdate = false;\n\t\t\tthis.uvsNeedUpdate = false;\n\t\t\tthis.groupsNeedUpdate = false;\n\t\t}\n\n\t\tvar _proto = DirectGeometry.prototype;\n\n\t\t_proto.computeGroups = function computeGroups(geometry) {\n\t\t\tvar groups = [];\n\t\t\tvar group, i;\n\t\t\tvar materialIndex = undefined;\n\t\t\tvar faces = geometry.faces;\n\n\t\t\tfor (i = 0; i < faces.length; i++) {\n\t\t\t\tvar face = faces[i]; // materials\n\n\t\t\t\tif (face.materialIndex !== materialIndex) {\n\t\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\t\tif (group !== undefined) {\n\t\t\t\t\t\tgroup.count = i * 3 - group.start;\n\t\t\t\t\t\tgroups.push(group);\n\t\t\t\t\t}\n\n\t\t\t\t\tgroup = {\n\t\t\t\t\t\tstart: i * 3,\n\t\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (group !== undefined) {\n\t\t\t\tgroup.count = i * 3 - group.start;\n\t\t\t\tgroups.push(group);\n\t\t\t}\n\n\t\t\tthis.groups = groups;\n\t\t};\n\n\t\t_proto.fromGeometry = function fromGeometry(geometry) {\n\t\t\tvar faces = geometry.faces;\n\t\t\tvar vertices = geometry.vertices;\n\t\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\t\t\tvar hasFaceVertexUv = faceVertexUvs[0] && faceVertexUvs[0].length > 0;\n\t\t\tvar hasFaceVertexUv2 = faceVertexUvs[1] && faceVertexUvs[1].length > 0; // morphs\n\n\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\tvar morphTargetsLength = morphTargets.length;\n\t\t\tvar morphTargetsPosition;\n\n\t\t\tif (morphTargetsLength > 0) {\n\t\t\t\tmorphTargetsPosition = [];\n\n\t\t\t\tfor (var i = 0; i < morphTargetsLength; i++) {\n\t\t\t\t\tmorphTargetsPosition[i] = {\n\t\t\t\t\t\tname: morphTargets[i].name,\n\t\t\t\t\t\tdata: []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\t\t\t}\n\n\t\t\tvar morphNormals = geometry.morphNormals;\n\t\t\tvar morphNormalsLength = morphNormals.length;\n\t\t\tvar morphTargetsNormal;\n\n\t\t\tif (morphNormalsLength > 0) {\n\t\t\t\tmorphTargetsNormal = [];\n\n\t\t\t\tfor (var _i = 0; _i < morphNormalsLength; _i++) {\n\t\t\t\t\tmorphTargetsNormal[_i] = {\n\t\t\t\t\t\tname: morphNormals[_i].name,\n\t\t\t\t\t\tdata: []\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\t\t\t} // skins\n\n\n\t\t\tvar skinIndices = geometry.skinIndices;\n\t\t\tvar skinWeights = geometry.skinWeights;\n\t\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\n\t\t\tvar hasSkinWeights = skinWeights.length === vertices.length; //\n\n\t\t\tif (vertices.length > 0 && faces.length === 0) {\n\t\t\t\tconsole.error('THREE.DirectGeometry: Faceless geometries are not supported.');\n\t\t\t}\n\n\t\t\tfor (var _i2 = 0; _i2 < faces.length; _i2++) {\n\t\t\t\tvar face = faces[_i2];\n\t\t\t\tthis.vertices.push(vertices[face.a], vertices[face.b], vertices[face.c]);\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tif (vertexNormals.length === 3) {\n\t\t\t\t\tthis.normals.push(vertexNormals[0], vertexNormals[1], vertexNormals[2]);\n\t\t\t\t} else {\n\t\t\t\t\tvar normal = face.normal;\n\t\t\t\t\tthis.normals.push(normal, normal, normal);\n\t\t\t\t}\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tif (vertexColors.length === 3) {\n\t\t\t\t\tthis.colors.push(vertexColors[0], vertexColors[1], vertexColors[2]);\n\t\t\t\t} else {\n\t\t\t\t\tvar color = face.color;\n\t\t\t\t\tthis.colors.push(color, color, color);\n\t\t\t\t}\n\n\t\t\t\tif (hasFaceVertexUv === true) {\n\t\t\t\t\tvar vertexUvs = faceVertexUvs[0][_i2];\n\n\t\t\t\t\tif (vertexUvs !== undefined) {\n\t\t\t\t\t\tthis.uvs.push(vertexUvs[0], vertexUvs[1], vertexUvs[2]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn('THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', _i2);\n\t\t\t\t\t\tthis.uvs.push(new Vector2(), new Vector2(), new Vector2());\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasFaceVertexUv2 === true) {\n\t\t\t\t\tvar _vertexUvs = faceVertexUvs[1][_i2];\n\n\t\t\t\t\tif (_vertexUvs !== undefined) {\n\t\t\t\t\t\tthis.uvs2.push(_vertexUvs[0], _vertexUvs[1], _vertexUvs[2]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn('THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', _i2);\n\t\t\t\t\t\tthis.uvs2.push(new Vector2(), new Vector2(), new Vector2());\n\t\t\t\t\t}\n\t\t\t\t} // morphs\n\n\n\t\t\t\tfor (var j = 0; j < morphTargetsLength; j++) {\n\t\t\t\t\tvar morphTarget = morphTargets[j].vertices;\n\t\t\t\t\tmorphTargetsPosition[j].data.push(morphTarget[face.a], morphTarget[face.b], morphTarget[face.c]);\n\t\t\t\t}\n\n\t\t\t\tfor (var _j = 0; _j < morphNormalsLength; _j++) {\n\t\t\t\t\tvar morphNormal = morphNormals[_j].vertexNormals[_i2];\n\n\t\t\t\t\tmorphTargetsNormal[_j].data.push(morphNormal.a, morphNormal.b, morphNormal.c);\n\t\t\t\t} // skins\n\n\n\t\t\t\tif (hasSkinIndices) {\n\t\t\t\t\tthis.skinIndices.push(skinIndices[face.a], skinIndices[face.b], skinIndices[face.c]);\n\t\t\t\t}\n\n\t\t\t\tif (hasSkinWeights) {\n\t\t\t\t\tthis.skinWeights.push(skinWeights[face.a], skinWeights[face.b], skinWeights[face.c]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.computeGroups(geometry);\n\t\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tif (geometry.boundingSphere !== null) {\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\t\t\t}\n\n\t\t\tif (geometry.boundingBox !== null) {\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\treturn DirectGeometry;\n\t}();\n\n\tfunction arrayMax(array) {\n\t\tif (array.length === 0) return -Infinity;\n\t\tvar max = array[0];\n\n\t\tfor (var i = 1, l = array.length; i < l; ++i) {\n\t\t\tif (array[i] > max) max = array[i];\n\t\t}\n\n\t\treturn max;\n\t}\n\n\tvar TYPED_ARRAYS = {\n\t\tInt8Array: Int8Array,\n\t\tUint8Array: Uint8Array,\n\t\t// Workaround for IE11 pre KB2929437. See #11440\n\t\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\t\tInt16Array: Int16Array,\n\t\tUint16Array: Uint16Array,\n\t\tInt32Array: Int32Array,\n\t\tUint32Array: Uint32Array,\n\t\tFloat32Array: Float32Array,\n\t\tFloat64Array: Float64Array\n\t};\n\n\tfunction getTypedArray(type, buffer) {\n\t\treturn new TYPED_ARRAYS[type](buffer);\n\t}\n\n\tvar _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\n\tvar _m1$2 = new Matrix4();\n\n\tvar _obj = new Object3D();\n\n\tvar _offset = new Vector3();\n\n\tvar _box$2 = new Box3();\n\n\tvar _boxMorphTargets = new Box3();\n\n\tvar _vector$4 = new Vector3();\n\n\tfunction BufferGeometry() {\n\t\tObject.defineProperty(this, 'id', {\n\t\t\tvalue: _bufferGeometryId += 2\n\t\t});\n\t\tthis.uuid = MathUtils.generateUUID();\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\t\tthis.drawRange = {\n\t\t\tstart: 0,\n\t\t\tcount: Infinity\n\t\t};\n\t\tthis.userData = {};\n\t}\n\n\tBufferGeometry.prototype = Object.assign(Object.create(EventDispatcher.prototype), {\n\t\tconstructor: BufferGeometry,\n\t\tisBufferGeometry: true,\n\t\tgetIndex: function getIndex() {\n\t\t\treturn this.index;\n\t\t},\n\t\tsetIndex: function setIndex(index) {\n\t\t\tif (Array.isArray(index)) {\n\t\t\t\tthis.index = new (arrayMax(index) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute)(index, 1);\n\t\t\t} else {\n\t\t\t\tthis.index = index;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tgetAttribute: function getAttribute(name) {\n\t\t\treturn this.attributes[name];\n\t\t},\n\t\tsetAttribute: function setAttribute(name, attribute) {\n\t\t\tthis.attributes[name] = attribute;\n\t\t\treturn this;\n\t\t},\n\t\tdeleteAttribute: function deleteAttribute(name) {\n\t\t\tdelete this.attributes[name];\n\t\t\treturn this;\n\t\t},\n\t\thasAttribute: function hasAttribute(name) {\n\t\t\treturn this.attributes[name] !== undefined;\n\t\t},\n\t\taddGroup: function addGroup(start, count, materialIndex) {\n\t\t\tif (materialIndex === void 0) {\n\t\t\t\tmaterialIndex = 0;\n\t\t\t}\n\n\t\t\tthis.groups.push({\n\t\t\t\tstart: start,\n\t\t\t\tcount: count,\n\t\t\t\tmaterialIndex: materialIndex\n\t\t\t});\n\t\t},\n\t\tclearGroups: function clearGroups() {\n\t\t\tthis.groups = [];\n\t\t},\n\t\tsetDrawRange: function setDrawRange(start, count) {\n\t\t\tthis.drawRange.start = start;\n\t\t\tthis.drawRange.count = count;\n\t\t},\n\t\tapplyMatrix4: function applyMatrix4(matrix) {\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif (position !== undefined) {\n\t\t\t\tposition.applyMatrix4(matrix);\n\t\t\t\tposition.needsUpdate = true;\n\t\t\t}\n\n\t\t\tvar normal = this.attributes.normal;\n\n\t\t\tif (normal !== undefined) {\n\t\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix(matrix);\n\t\t\t\tnormal.applyNormalMatrix(normalMatrix);\n\t\t\t\tnormal.needsUpdate = true;\n\t\t\t}\n\n\t\t\tvar tangent = this.attributes.tangent;\n\n\t\t\tif (tangent !== undefined) {\n\t\t\t\ttangent.transformDirection(matrix);\n\t\t\t\ttangent.needsUpdate = true;\n\t\t\t}\n\n\t\t\tif (this.boundingBox !== null) {\n\t\t\t\tthis.computeBoundingBox();\n\t\t\t}\n\n\t\t\tif (this.boundingSphere !== null) {\n\t\t\t\tthis.computeBoundingSphere();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\trotateX: function rotateX(angle) {\n\t\t\t// rotate geometry around world x-axis\n\t\t\t_m1$2.makeRotationX(angle);\n\n\t\t\tthis.applyMatrix4(_m1$2);\n\t\t\treturn this;\n\t\t},\n\t\trotateY: function rotateY(angle) {\n\t\t\t// rotate geometry around world y-axis\n\t\t\t_m1$2.makeRotationY(angle);\n\n\t\t\tthis.applyMatrix4(_m1$2);\n\t\t\treturn this;\n\t\t},\n\t\trotateZ: function rotateZ(angle) {\n\t\t\t// rotate geometry around world z-axis\n\t\t\t_m1$2.makeRotationZ(angle);\n\n\t\t\tthis.applyMatrix4(_m1$2);\n\t\t\treturn this;\n\t\t},\n\t\ttranslate: function translate(x, y, z) {\n\t\t\t// translate geometry\n\t\t\t_m1$2.makeTranslation(x, y, z);\n\n\t\t\tthis.applyMatrix4(_m1$2);\n\t\t\treturn this;\n\t\t},\n\t\tscale: function scale(x, y, z) {\n\t\t\t// scale geometry\n\t\t\t_m1$2.makeScale(x, y, z);\n\n\t\t\tthis.applyMatrix4(_m1$2);\n\t\t\treturn this;\n\t\t},\n\t\tlookAt: function lookAt(vector) {\n\t\t\t_obj.lookAt(vector);\n\n\t\t\t_obj.updateMatrix();\n\n\t\t\tthis.applyMatrix4(_obj.matrix);\n\t\t\treturn this;\n\t\t},\n\t\tcenter: function center() {\n\t\t\tthis.computeBoundingBox();\n\t\t\tthis.boundingBox.getCenter(_offset).negate();\n\t\t\tthis.translate(_offset.x, _offset.y, _offset.z);\n\t\t\treturn this;\n\t\t},\n\t\tsetFromObject: function setFromObject(object) {\n\t\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif (object.isPoints || object.isLine) {\n\t\t\t\tvar positions = new Float32BufferAttribute(geometry.vertices.length * 3, 3);\n\t\t\t\tvar colors = new Float32BufferAttribute(geometry.colors.length * 3, 3);\n\t\t\t\tthis.setAttribute('position', positions.copyVector3sArray(geometry.vertices));\n\t\t\t\tthis.setAttribute('color', colors.copyColorsArray(geometry.colors));\n\n\t\t\t\tif (geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length) {\n\t\t\t\t\tvar lineDistances = new Float32BufferAttribute(geometry.lineDistances.length, 1);\n\t\t\t\t\tthis.setAttribute('lineDistance', lineDistances.copyArray(geometry.lineDistances));\n\t\t\t\t}\n\n\t\t\t\tif (geometry.boundingSphere !== null) {\n\t\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\t\t\t\t}\n\n\t\t\t\tif (geometry.boundingBox !== null) {\n\t\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\t\t\t\t}\n\t\t\t} else if (object.isMesh) {\n\t\t\t\tif (geometry && geometry.isGeometry) {\n\t\t\t\t\tthis.fromGeometry(geometry);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tsetFromPoints: function setFromPoints(points) {\n\t\t\tvar position = [];\n\n\t\t\tfor (var i = 0, l = points.length; i < l; i++) {\n\t\t\t\tvar point = points[i];\n\t\t\t\tposition.push(point.x, point.y, point.z || 0);\n\t\t\t}\n\n\t\t\tthis.setAttribute('position', new Float32BufferAttribute(position, 3));\n\t\t\treturn this;\n\t\t},\n\t\tupdateFromObject: function updateFromObject(object) {\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif (object.isMesh) {\n\t\t\t\tvar direct = geometry.__directGeometry;\n\n\t\t\t\tif (geometry.elementsNeedUpdate === true) {\n\t\t\t\t\tdirect = undefined;\n\t\t\t\t\tgeometry.elementsNeedUpdate = false;\n\t\t\t\t}\n\n\t\t\t\tif (direct === undefined) {\n\t\t\t\t\treturn this.fromGeometry(geometry);\n\t\t\t\t}\n\n\t\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\t\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\t\tgeometry.groupsNeedUpdate = false;\n\t\t\t\tgeometry = direct;\n\t\t\t}\n\n\t\t\tif (geometry.verticesNeedUpdate === true) {\n\t\t\t\tvar attribute = this.attributes.position;\n\n\t\t\t\tif (attribute !== undefined) {\n\t\t\t\t\tattribute.copyVector3sArray(geometry.vertices);\n\t\t\t\t\tattribute.needsUpdate = true;\n\t\t\t\t}\n\n\t\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\t}\n\n\t\t\tif (geometry.normalsNeedUpdate === true) {\n\t\t\t\tvar _attribute = this.attributes.normal;\n\n\t\t\t\tif (_attribute !== undefined) {\n\t\t\t\t\t_attribute.copyVector3sArray(geometry.normals);\n\n\t\t\t\t\t_attribute.needsUpdate = true;\n\t\t\t\t}\n\n\t\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\t}\n\n\t\t\tif (geometry.colorsNeedUpdate === true) {\n\t\t\t\tvar _attribute2 = this.attributes.color;\n\n\t\t\t\tif (_attribute2 !== undefined) {\n\t\t\t\t\t_attribute2.copyColorsArray(geometry.colors);\n\n\t\t\t\t\t_attribute2.needsUpdate = true;\n\t\t\t\t}\n\n\t\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\t}\n\n\t\t\tif (geometry.uvsNeedUpdate) {\n\t\t\t\tvar _attribute3 = this.attributes.uv;\n\n\t\t\t\tif (_attribute3 !== undefined) {\n\t\t\t\t\t_attribute3.copyVector2sArray(geometry.uvs);\n\n\t\t\t\t\t_attribute3.needsUpdate = true;\n\t\t\t\t}\n\n\t\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\t}\n\n\t\t\tif (geometry.lineDistancesNeedUpdate) {\n\t\t\t\tvar _attribute4 = this.attributes.lineDistance;\n\n\t\t\t\tif (_attribute4 !== undefined) {\n\t\t\t\t\t_attribute4.copyArray(geometry.lineDistances);\n\n\t\t\t\t\t_attribute4.needsUpdate = true;\n\t\t\t\t}\n\n\t\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\t\t\t}\n\n\t\t\tif (geometry.groupsNeedUpdate) {\n\t\t\t\tgeometry.computeGroups(object.geometry);\n\t\t\t\tthis.groups = geometry.groups;\n\t\t\t\tgeometry.groupsNeedUpdate = false;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tfromGeometry: function fromGeometry(geometry) {\n\t\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry(geometry);\n\t\t\treturn this.fromDirectGeometry(geometry.__directGeometry);\n\t\t},\n\t\tfromDirectGeometry: function fromDirectGeometry(geometry) {\n\t\t\tvar positions = new Float32Array(geometry.vertices.length * 3);\n\t\t\tthis.setAttribute('position', new BufferAttribute(positions, 3).copyVector3sArray(geometry.vertices));\n\n\t\t\tif (geometry.normals.length > 0) {\n\t\t\t\tvar normals = new Float32Array(geometry.normals.length * 3);\n\t\t\t\tthis.setAttribute('normal', new BufferAttribute(normals, 3).copyVector3sArray(geometry.normals));\n\t\t\t}\n\n\t\t\tif (geometry.colors.length > 0) {\n\t\t\t\tvar colors = new Float32Array(geometry.colors.length * 3);\n\t\t\t\tthis.setAttribute('color', new BufferAttribute(colors, 3).copyColorsArray(geometry.colors));\n\t\t\t}\n\n\t\t\tif (geometry.uvs.length > 0) {\n\t\t\t\tvar uvs = new Float32Array(geometry.uvs.length * 2);\n\t\t\t\tthis.setAttribute('uv', new BufferAttribute(uvs, 2).copyVector2sArray(geometry.uvs));\n\t\t\t}\n\n\t\t\tif (geometry.uvs2.length > 0) {\n\t\t\t\tvar uvs2 = new Float32Array(geometry.uvs2.length * 2);\n\t\t\t\tthis.setAttribute('uv2', new BufferAttribute(uvs2, 2).copyVector2sArray(geometry.uvs2));\n\t\t\t} // groups\n\n\n\t\t\tthis.groups = geometry.groups; // morphs\n\n\t\t\tfor (var name in geometry.morphTargets) {\n\t\t\t\tvar array = [];\n\t\t\t\tvar morphTargets = geometry.morphTargets[name];\n\n\t\t\t\tfor (var i = 0, l = morphTargets.length; i < l; i++) {\n\t\t\t\t\tvar morphTarget = morphTargets[i];\n\t\t\t\t\tvar attribute = new Float32BufferAttribute(morphTarget.data.length * 3, 3);\n\t\t\t\t\tattribute.name = morphTarget.name;\n\t\t\t\t\tarray.push(attribute.copyVector3sArray(morphTarget.data));\n\t\t\t\t}\n\n\t\t\t\tthis.morphAttributes[name] = array;\n\t\t\t} // skinning\n\n\n\t\t\tif (geometry.skinIndices.length > 0) {\n\t\t\t\tvar skinIndices = new Float32BufferAttribute(geometry.skinIndices.length * 4, 4);\n\t\t\t\tthis.setAttribute('skinIndex', skinIndices.copyVector4sArray(geometry.skinIndices));\n\t\t\t}\n\n\t\t\tif (geometry.skinWeights.length > 0) {\n\t\t\t\tvar skinWeights = new Float32BufferAttribute(geometry.skinWeights.length * 4, 4);\n\t\t\t\tthis.setAttribute('skinWeight', skinWeights.copyVector4sArray(geometry.skinWeights));\n\t\t\t} //\n\n\n\t\t\tif (geometry.boundingSphere !== null) {\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\t\t\t}\n\n\t\t\tif (geometry.boundingBox !== null) {\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tcomputeBoundingBox: function computeBoundingBox() {\n\t\t\tif (this.boundingBox === null) {\n\t\t\t\tthis.boundingBox = new Box3();\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\t\t\tvar morphAttributesPosition = this.morphAttributes.position;\n\n\t\t\tif (position && position.isGLBufferAttribute) {\n\t\t\t\tconsole.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this);\n\t\t\t\tthis.boundingBox.set(new Vector3(-Infinity, -Infinity, -Infinity), new Vector3(+Infinity, +Infinity, +Infinity));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (position !== undefined) {\n\t\t\t\tthis.boundingBox.setFromBufferAttribute(position); // process morph attributes if present\n\n\t\t\t\tif (morphAttributesPosition) {\n\t\t\t\t\tfor (var i = 0, il = morphAttributesPosition.length; i < il; i++) {\n\t\t\t\t\t\tvar morphAttribute = morphAttributesPosition[i];\n\n\t\t\t\t\t\t_box$2.setFromBufferAttribute(morphAttribute);\n\n\t\t\t\t\t\tif (this.morphTargetsRelative) {\n\t\t\t\t\t\t\t_vector$4.addVectors(this.boundingBox.min, _box$2.min);\n\n\t\t\t\t\t\t\tthis.boundingBox.expandByPoint(_vector$4);\n\n\t\t\t\t\t\t\t_vector$4.addVectors(this.boundingBox.max, _box$2.max);\n\n\t\t\t\t\t\t\tthis.boundingBox.expandByPoint(_vector$4);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.boundingBox.expandByPoint(_box$2.min);\n\t\t\t\t\t\t\tthis.boundingBox.expandByPoint(_box$2.max);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.boundingBox.makeEmpty();\n\t\t\t}\n\n\t\t\tif (isNaN(this.boundingBox.min.x) || isNaN(this.boundingBox.min.y) || isNaN(this.boundingBox.min.z)) {\n\t\t\t\tconsole.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this);\n\t\t\t}\n\t\t},\n\t\tcomputeBoundingSphere: function computeBoundingSphere() {\n\t\t\tif (this.boundingSphere === null) {\n\t\t\t\tthis.boundingSphere = new Sphere();\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\t\t\tvar morphAttributesPosition = this.morphAttributes.position;\n\n\t\t\tif (position && position.isGLBufferAttribute) {\n\t\t\t\tconsole.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this);\n\t\t\t\tthis.boundingSphere.set(new Vector3(), Infinity);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (position) {\n\t\t\t\t// first, find the center of the bounding sphere\n\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\t_box$2.setFromBufferAttribute(position); // process morph attributes if present\n\n\n\t\t\t\tif (morphAttributesPosition) {\n\t\t\t\t\tfor (var i = 0, il = morphAttributesPosition.length; i < il; i++) {\n\t\t\t\t\t\tvar morphAttribute = morphAttributesPosition[i];\n\n\t\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute(morphAttribute);\n\n\t\t\t\t\t\tif (this.morphTargetsRelative) {\n\t\t\t\t\t\t\t_vector$4.addVectors(_box$2.min, _boxMorphTargets.min);\n\n\t\t\t\t\t\t\t_box$2.expandByPoint(_vector$4);\n\n\t\t\t\t\t\t\t_vector$4.addVectors(_box$2.max, _boxMorphTargets.max);\n\n\t\t\t\t\t\t\t_box$2.expandByPoint(_vector$4);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_box$2.expandByPoint(_boxMorphTargets.min);\n\n\t\t\t\t\t\t\t_box$2.expandByPoint(_boxMorphTargets.max);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t_box$2.getCenter(center); // second, try to find a boundingSphere with a radius smaller than the\n\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor (var _i = 0, _il = position.count; _i < _il; _i++) {\n\t\t\t\t\t_vector$4.fromBufferAttribute(position, _i);\n\n\t\t\t\t\tmaxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$4));\n\t\t\t\t} // process morph attributes if present\n\n\n\t\t\t\tif (morphAttributesPosition) {\n\t\t\t\t\tfor (var _i2 = 0, _il2 = morphAttributesPosition.length; _i2 < _il2; _i2++) {\n\t\t\t\t\t\tvar _morphAttribute = morphAttributesPosition[_i2];\n\t\t\t\t\t\tvar morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\t\tfor (var j = 0, jl = _morphAttribute.count; j < jl; j++) {\n\t\t\t\t\t\t\t_vector$4.fromBufferAttribute(_morphAttribute, j);\n\n\t\t\t\t\t\t\tif (morphTargetsRelative) {\n\t\t\t\t\t\t\t\t_offset.fromBufferAttribute(position, j);\n\n\t\t\t\t\t\t\t\t_vector$4.add(_offset);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector$4));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt(maxRadiusSq);\n\n\t\t\t\tif (isNaN(this.boundingSphere.radius)) {\n\t\t\t\t\tconsole.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcomputeFaceNormals: function computeFaceNormals() {// backwards compatibility\n\t\t},\n\t\tcomputeVertexNormals: function computeVertexNormals() {\n\t\t\tvar index = this.index;\n\t\t\tvar positionAttribute = this.getAttribute('position');\n\n\t\t\tif (positionAttribute !== undefined) {\n\t\t\t\tvar normalAttribute = this.getAttribute('normal');\n\n\t\t\t\tif (normalAttribute === undefined) {\n\t\t\t\t\tnormalAttribute = new BufferAttribute(new Float32Array(positionAttribute.count * 3), 3);\n\t\t\t\t\tthis.setAttribute('normal', normalAttribute);\n\t\t\t\t} else {\n\t\t\t\t\t// reset existing normals to zero\n\t\t\t\t\tfor (var i = 0, il = normalAttribute.count; i < il; i++) {\n\t\t\t\t\t\tnormalAttribute.setXYZ(i, 0, 0, 0);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar pA = new Vector3(),\n\t\t\t\t\t\tpB = new Vector3(),\n\t\t\t\t\t\tpC = new Vector3();\n\t\t\t\tvar nA = new Vector3(),\n\t\t\t\t\t\tnB = new Vector3(),\n\t\t\t\t\t\tnC = new Vector3();\n\t\t\t\tvar cb = new Vector3(),\n\t\t\t\t\t\tab = new Vector3(); // indexed elements\n\n\t\t\t\tif (index) {\n\t\t\t\t\tfor (var _i3 = 0, _il3 = index.count; _i3 < _il3; _i3 += 3) {\n\t\t\t\t\t\tvar vA = index.getX(_i3 + 0);\n\t\t\t\t\t\tvar vB = index.getX(_i3 + 1);\n\t\t\t\t\t\tvar vC = index.getX(_i3 + 2);\n\t\t\t\t\t\tpA.fromBufferAttribute(positionAttribute, vA);\n\t\t\t\t\t\tpB.fromBufferAttribute(positionAttribute, vB);\n\t\t\t\t\t\tpC.fromBufferAttribute(positionAttribute, vC);\n\t\t\t\t\t\tcb.subVectors(pC, pB);\n\t\t\t\t\t\tab.subVectors(pA, pB);\n\t\t\t\t\t\tcb.cross(ab);\n\t\t\t\t\t\tnA.fromBufferAttribute(normalAttribute, vA);\n\t\t\t\t\t\tnB.fromBufferAttribute(normalAttribute, vB);\n\t\t\t\t\t\tnC.fromBufferAttribute(normalAttribute, vC);\n\t\t\t\t\t\tnA.add(cb);\n\t\t\t\t\t\tnB.add(cb);\n\t\t\t\t\t\tnC.add(cb);\n\t\t\t\t\t\tnormalAttribute.setXYZ(vA, nA.x, nA.y, nA.z);\n\t\t\t\t\t\tnormalAttribute.setXYZ(vB, nB.x, nB.y, nB.z);\n\t\t\t\t\t\tnormalAttribute.setXYZ(vC, nC.x, nC.y, nC.z);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\t\t\t\t\tfor (var _i4 = 0, _il4 = positionAttribute.count; _i4 < _il4; _i4 += 3) {\n\t\t\t\t\t\tpA.fromBufferAttribute(positionAttribute, _i4 + 0);\n\t\t\t\t\t\tpB.fromBufferAttribute(positionAttribute, _i4 + 1);\n\t\t\t\t\t\tpC.fromBufferAttribute(positionAttribute, _i4 + 2);\n\t\t\t\t\t\tcb.subVectors(pC, pB);\n\t\t\t\t\t\tab.subVectors(pA, pB);\n\t\t\t\t\t\tcb.cross(ab);\n\t\t\t\t\t\tnormalAttribute.setXYZ(_i4 + 0, cb.x, cb.y, cb.z);\n\t\t\t\t\t\tnormalAttribute.setXYZ(_i4 + 1, cb.x, cb.y, cb.z);\n\t\t\t\t\t\tnormalAttribute.setXYZ(_i4 + 2, cb.x, cb.y, cb.z);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.normalizeNormals();\n\t\t\t\tnormalAttribute.needsUpdate = true;\n\t\t\t}\n\t\t},\n\t\tmerge: function merge(geometry, offset) {\n\t\t\tif (!(geometry && geometry.isBufferGeometry)) {\n\t\t\t\tconsole.error('THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (offset === undefined) {\n\t\t\t\toffset = 0;\n\t\t\t\tconsole.warn('THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.');\n\t\t\t}\n\n\t\t\tvar attributes = this.attributes;\n\n\t\t\tfor (var key in attributes) {\n\t\t\t\tif (geometry.attributes[key] === undefined) continue;\n\t\t\t\tvar attribute1 = attributes[key];\n\t\t\t\tvar attributeArray1 = attribute1.array;\n\t\t\t\tvar attribute2 = geometry.attributes[key];\n\t\t\t\tvar attributeArray2 = attribute2.array;\n\t\t\t\tvar attributeOffset = attribute2.itemSize * offset;\n\t\t\t\tvar length = Math.min(attributeArray2.length, attributeArray1.length - attributeOffset);\n\n\t\t\t\tfor (var i = 0, j = attributeOffset; i < length; i++, j++) {\n\t\t\t\t\tattributeArray1[j] = attributeArray2[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tnormalizeNormals: function normalizeNormals() {\n\t\t\tvar normals = this.attributes.normal;\n\n\t\t\tfor (var i = 0, il = normals.count; i < il; i++) {\n\t\t\t\t_vector$4.fromBufferAttribute(normals, i);\n\n\t\t\t\t_vector$4.normalize();\n\n\t\t\t\tnormals.setXYZ(i, _vector$4.x, _vector$4.y, _vector$4.z);\n\t\t\t}\n\t\t},\n\t\ttoNonIndexed: function toNonIndexed() {\n\t\t\tfunction convertBufferAttribute(attribute, indices) {\n\t\t\t\tvar array = attribute.array;\n\t\t\t\tvar itemSize = attribute.itemSize;\n\t\t\t\tvar normalized = attribute.normalized;\n\t\t\t\tvar array2 = new array.constructor(indices.length * itemSize);\n\t\t\t\tvar index = 0,\n\t\t\t\t\t\tindex2 = 0;\n\n\t\t\t\tfor (var i = 0, l = indices.length; i < l; i++) {\n\t\t\t\t\tindex = indices[i] * itemSize;\n\n\t\t\t\t\tfor (var j = 0; j < itemSize; j++) {\n\t\t\t\t\t\tarray2[index2++] = array[index++];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn new BufferAttribute(array2, itemSize, normalized);\n\t\t\t} //\n\n\n\t\t\tif (this.index === null) {\n\t\t\t\tconsole.warn('THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.');\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar geometry2 = new BufferGeometry();\n\t\t\tvar indices = this.index.array;\n\t\t\tvar attributes = this.attributes; // attributes\n\n\t\t\tfor (var name in attributes) {\n\t\t\t\tvar attribute = attributes[name];\n\t\t\t\tvar newAttribute = convertBufferAttribute(attribute, indices);\n\t\t\t\tgeometry2.setAttribute(name, newAttribute);\n\t\t\t} // morph attributes\n\n\n\t\t\tvar morphAttributes = this.morphAttributes;\n\n\t\t\tfor (var _name in morphAttributes) {\n\t\t\t\tvar morphArray = [];\n\t\t\t\tvar morphAttribute = morphAttributes[_name]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\t\tfor (var i = 0, il = morphAttribute.length; i < il; i++) {\n\t\t\t\t\tvar _attribute5 = morphAttribute[i];\n\n\t\t\t\t\tvar _newAttribute = convertBufferAttribute(_attribute5, indices);\n\n\t\t\t\t\tmorphArray.push(_newAttribute);\n\t\t\t\t}\n\n\t\t\t\tgeometry2.morphAttributes[_name] = morphArray;\n\t\t\t}\n\n\t\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative; // groups\n\n\t\t\tvar groups = this.groups;\n\n\t\t\tfor (var _i5 = 0, l = groups.length; _i5 < l; _i5++) {\n\t\t\t\tvar group = groups[_i5];\n\t\t\t\tgeometry2.addGroup(group.start, group.count, group.materialIndex);\n\t\t\t}\n\n\t\t\treturn geometry2;\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t\t}\n\t\t\t}; // standard BufferGeometry serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif (this.name !== '') data.name = this.name;\n\t\t\tif (Object.keys(this.userData).length > 0) data.userData = this.userData;\n\n\t\t\tif (this.parameters !== undefined) {\n\t\t\t\tvar parameters = this.parameters;\n\n\t\t\t\tfor (var key in parameters) {\n\t\t\t\t\tif (parameters[key] !== undefined) data[key] = parameters[key];\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tdata.data = {\n\t\t\t\tattributes: {}\n\t\t\t};\n\t\t\tvar index = this.index;\n\n\t\t\tif (index !== null) {\n\t\t\t\tdata.data.index = {\n\t\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\t\tarray: Array.prototype.slice.call(index.array)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar attributes = this.attributes;\n\n\t\t\tfor (var _key in attributes) {\n\t\t\t\tvar attribute = attributes[_key];\n\t\t\t\tvar attributeData = attribute.toJSON(data.data);\n\t\t\t\tif (attribute.name !== '') attributeData.name = attribute.name;\n\t\t\t\tdata.data.attributes[_key] = attributeData;\n\t\t\t}\n\n\t\t\tvar morphAttributes = {};\n\t\t\tvar hasMorphAttributes = false;\n\n\t\t\tfor (var _key2 in this.morphAttributes) {\n\t\t\t\tvar attributeArray = this.morphAttributes[_key2];\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor (var i = 0, il = attributeArray.length; i < il; i++) {\n\t\t\t\t\tvar _attribute6 = attributeArray[i];\n\n\t\t\t\t\tvar _attributeData = _attribute6.toJSON(data.data);\n\n\t\t\t\t\tif (_attribute6.name !== '') _attributeData.name = _attribute6.name;\n\t\t\t\t\tarray.push(_attributeData);\n\t\t\t\t}\n\n\t\t\t\tif (array.length > 0) {\n\t\t\t\t\tmorphAttributes[_key2] = array;\n\t\t\t\t\thasMorphAttributes = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hasMorphAttributes) {\n\t\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\t\t\t}\n\n\t\t\tvar groups = this.groups;\n\n\t\t\tif (groups.length > 0) {\n\t\t\t\tdata.data.groups = JSON.parse(JSON.stringify(groups));\n\t\t\t}\n\n\t\t\tvar boundingSphere = this.boundingSphere;\n\n\t\t\tif (boundingSphere !== null) {\n\t\t\t\tdata.data.boundingSphere = {\n\t\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\t\tradius: boundingSphere.radius\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t\tclone: function clone() {\n\t\t\t/*\n\t\t\t // Handle primitives\n\t\t\t\t const parameters = this.parameters;\n\t\t\t\t if ( parameters !== undefined ) {\n\t\t\t\t const values = [];\n\t\t\t\t for ( const key in parameters ) {\n\t\t\t\t values.push( parameters[ key ] );\n\t\t\t\t }\n\t\t\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t\t this.constructor.apply( geometry, values );\n\t\t\t return geometry;\n\t\t\t\t }\n\t\t\t\t return new this.constructor().copy( this );\n\t\t\t */\n\t\t\treturn new BufferGeometry().copy(this);\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\t// reset\n\t\t\tthis.index = null;\n\t\t\tthis.attributes = {};\n\t\t\tthis.morphAttributes = {};\n\t\t\tthis.groups = [];\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null; // used for storing cloned, shared data\n\n\t\t\tvar data = {}; // name\n\n\t\t\tthis.name = source.name; // index\n\n\t\t\tvar index = source.index;\n\n\t\t\tif (index !== null) {\n\t\t\t\tthis.setIndex(index.clone(data));\n\t\t\t} // attributes\n\n\n\t\t\tvar attributes = source.attributes;\n\n\t\t\tfor (var name in attributes) {\n\t\t\t\tvar attribute = attributes[name];\n\t\t\t\tthis.setAttribute(name, attribute.clone(data));\n\t\t\t} // morph attributes\n\n\n\t\t\tvar morphAttributes = source.morphAttributes;\n\n\t\t\tfor (var _name2 in morphAttributes) {\n\t\t\t\tvar array = [];\n\t\t\t\tvar morphAttribute = morphAttributes[_name2]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\t\tfor (var i = 0, l = morphAttribute.length; i < l; i++) {\n\t\t\t\t\tarray.push(morphAttribute[i].clone(data));\n\t\t\t\t}\n\n\t\t\t\tthis.morphAttributes[_name2] = array;\n\t\t\t}\n\n\t\t\tthis.morphTargetsRelative = source.morphTargetsRelative; // groups\n\n\t\t\tvar groups = source.groups;\n\n\t\t\tfor (var _i6 = 0, _l = groups.length; _i6 < _l; _i6++) {\n\t\t\t\tvar group = groups[_i6];\n\t\t\t\tthis.addGroup(group.start, group.count, group.materialIndex);\n\t\t\t} // bounding box\n\n\n\t\t\tvar boundingBox = source.boundingBox;\n\n\t\t\tif (boundingBox !== null) {\n\t\t\t\tthis.boundingBox = boundingBox.clone();\n\t\t\t} // bounding sphere\n\n\n\t\t\tvar boundingSphere = source.boundingSphere;\n\n\t\t\tif (boundingSphere !== null) {\n\t\t\t\tthis.boundingSphere = boundingSphere.clone();\n\t\t\t} // draw range\n\n\n\t\t\tthis.drawRange.start = source.drawRange.start;\n\t\t\tthis.drawRange.count = source.drawRange.count; // user data\n\n\t\t\tthis.userData = source.userData;\n\t\t\treturn this;\n\t\t},\n\t\tdispose: function dispose() {\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'dispose'\n\t\t\t});\n\t\t}\n\t});\n\n\tvar _inverseMatrix = new Matrix4();\n\n\tvar _ray = new Ray();\n\n\tvar _sphere = new Sphere();\n\n\tvar _vA = new Vector3();\n\n\tvar _vB = new Vector3();\n\n\tvar _vC = new Vector3();\n\n\tvar _tempA = new Vector3();\n\n\tvar _tempB = new Vector3();\n\n\tvar _tempC = new Vector3();\n\n\tvar _morphA = new Vector3();\n\n\tvar _morphB = new Vector3();\n\n\tvar _morphC = new Vector3();\n\n\tvar _uvA = new Vector2();\n\n\tvar _uvB = new Vector2();\n\n\tvar _uvC = new Vector2();\n\n\tvar _intersectionPoint = new Vector3();\n\n\tvar _intersectionPointWorld = new Vector3();\n\n\tfunction Mesh(geometry, material) {\n\t\tif (geometry === void 0) {\n\t\t\tgeometry = new BufferGeometry();\n\t\t}\n\n\t\tif (material === void 0) {\n\t\t\tmaterial = new MeshBasicMaterial();\n\t\t}\n\n\t\tObject3D.call(this);\n\t\tthis.type = 'Mesh';\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\t\tthis.updateMorphTargets();\n\t}\n\n\tMesh.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: Mesh,\n\t\tisMesh: true,\n\t\tcopy: function copy(source) {\n\t\t\tObject3D.prototype.copy.call(this, source);\n\n\t\t\tif (source.morphTargetInfluences !== undefined) {\n\t\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\t\t\t}\n\n\t\t\tif (source.morphTargetDictionary !== undefined) {\n\t\t\t\tthis.morphTargetDictionary = Object.assign({}, source.morphTargetDictionary);\n\t\t\t}\n\n\t\t\tthis.material = source.material;\n\t\t\tthis.geometry = source.geometry;\n\t\t\treturn this;\n\t\t},\n\t\tupdateMorphTargets: function updateMorphTargets() {\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\t\tvar keys = Object.keys(morphAttributes);\n\n\t\t\t\tif (keys.length > 0) {\n\t\t\t\t\tvar morphAttribute = morphAttributes[keys[0]];\n\n\t\t\t\t\tif (morphAttribute !== undefined) {\n\t\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\t\tfor (var m = 0, ml = morphAttribute.length; m < ml; m++) {\n\t\t\t\t\t\t\tvar name = morphAttribute[m].name || String(m);\n\t\t\t\t\t\t\tthis.morphTargetInfluences.push(0);\n\t\t\t\t\t\t\tthis.morphTargetDictionary[name] = m;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\t\tif (morphTargets !== undefined && morphTargets.length > 0) {\n\t\t\t\t\tconsole.error('THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\traycast: function raycast(raycaster, intersects) {\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar material = this.material;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tif (material === undefined) return; // Checking boundingSphere distance to ray\n\n\t\t\tif (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n\n\t\t\t_sphere.copy(geometry.boundingSphere);\n\n\t\t\t_sphere.applyMatrix4(matrixWorld);\n\n\t\t\tif (raycaster.ray.intersectsSphere(_sphere) === false) return; //\n\n\t\t\t_inverseMatrix.copy(matrixWorld).invert();\n\n\t\t\t_ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix); // Check boundingBox before continuing\n\n\n\t\t\tif (geometry.boundingBox !== null) {\n\t\t\t\tif (_ray.intersectsBox(geometry.boundingBox) === false) return;\n\t\t\t}\n\n\t\t\tvar intersection;\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\tvar morphPosition = geometry.morphAttributes.position;\n\t\t\t\tvar morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\t\tvar uv = geometry.attributes.uv;\n\t\t\t\tvar uv2 = geometry.attributes.uv2;\n\t\t\t\tvar groups = geometry.groups;\n\t\t\t\tvar drawRange = geometry.drawRange;\n\n\t\t\t\tif (index !== null) {\n\t\t\t\t\t// indexed buffer geometry\n\t\t\t\t\tif (Array.isArray(material)) {\n\t\t\t\t\t\tfor (var i = 0, il = groups.length; i < il; i++) {\n\t\t\t\t\t\t\tvar group = groups[i];\n\t\t\t\t\t\t\tvar groupMaterial = material[group.materialIndex];\n\t\t\t\t\t\t\tvar start = Math.max(group.start, drawRange.start);\n\t\t\t\t\t\t\tvar end = Math.min(group.start + group.count, drawRange.start + drawRange.count);\n\n\t\t\t\t\t\t\tfor (var j = start, jl = end; j < jl; j += 3) {\n\t\t\t\t\t\t\t\tvar a = index.getX(j);\n\t\t\t\t\t\t\t\tvar b = index.getX(j + 1);\n\t\t\t\t\t\t\t\tvar c = index.getX(j + 2);\n\t\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection(this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c);\n\n\t\t\t\t\t\t\t\tif (intersection) {\n\t\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor(j / 3); // triangle number in indexed buffer semantics\n\n\t\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\t\tintersects.push(intersection);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _start = Math.max(0, drawRange.start);\n\n\t\t\t\t\t\tvar _end = Math.min(index.count, drawRange.start + drawRange.count);\n\n\t\t\t\t\t\tfor (var _i = _start, _il = _end; _i < _il; _i += 3) {\n\t\t\t\t\t\t\tvar _a = index.getX(_i);\n\n\t\t\t\t\t\t\tvar _b = index.getX(_i + 1);\n\n\t\t\t\t\t\t\tvar _c = index.getX(_i + 2);\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection(this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, _a, _b, _c);\n\n\t\t\t\t\t\t\tif (intersection) {\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor(_i / 3); // triangle number in indexed buffer semantics\n\n\t\t\t\t\t\t\t\tintersects.push(intersection);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (position !== undefined) {\n\t\t\t\t\t// non-indexed buffer geometry\n\t\t\t\t\tif (Array.isArray(material)) {\n\t\t\t\t\t\tfor (var _i2 = 0, _il2 = groups.length; _i2 < _il2; _i2++) {\n\t\t\t\t\t\t\tvar _group = groups[_i2];\n\t\t\t\t\t\t\tvar _groupMaterial = material[_group.materialIndex];\n\n\t\t\t\t\t\t\tvar _start2 = Math.max(_group.start, drawRange.start);\n\n\t\t\t\t\t\t\tvar _end2 = Math.min(_group.start + _group.count, drawRange.start + drawRange.count);\n\n\t\t\t\t\t\t\tfor (var _j = _start2, _jl = _end2; _j < _jl; _j += 3) {\n\t\t\t\t\t\t\t\tvar _a2 = _j;\n\n\t\t\t\t\t\t\t\tvar _b2 = _j + 1;\n\n\t\t\t\t\t\t\t\tvar _c2 = _j + 2;\n\n\t\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection(this, _groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, _a2, _b2, _c2);\n\n\t\t\t\t\t\t\t\tif (intersection) {\n\t\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor(_j / 3); // triangle number in non-indexed buffer semantics\n\n\t\t\t\t\t\t\t\t\tintersection.face.materialIndex = _group.materialIndex;\n\t\t\t\t\t\t\t\t\tintersects.push(intersection);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _start3 = Math.max(0, drawRange.start);\n\n\t\t\t\t\t\tvar _end3 = Math.min(position.count, drawRange.start + drawRange.count);\n\n\t\t\t\t\t\tfor (var _i3 = _start3, _il3 = _end3; _i3 < _il3; _i3 += 3) {\n\t\t\t\t\t\t\tvar _a3 = _i3;\n\n\t\t\t\t\t\t\tvar _b3 = _i3 + 1;\n\n\t\t\t\t\t\t\tvar _c3 = _i3 + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection(this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, _a3, _b3, _c3);\n\n\t\t\t\t\t\t\tif (intersection) {\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor(_i3 / 3); // triangle number in non-indexed buffer semantics\n\n\t\t\t\t\t\t\t\tintersects.push(intersection);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (geometry.isGeometry) {\n\t\t\t\tvar isMultiMaterial = Array.isArray(material);\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar faces = geometry.faces;\n\t\t\t\tvar uvs;\n\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[0];\n\t\t\t\tif (faceVertexUvs.length > 0) uvs = faceVertexUvs;\n\n\t\t\t\tfor (var f = 0, fl = faces.length; f < fl; f++) {\n\t\t\t\t\tvar face = faces[f];\n\t\t\t\t\tvar faceMaterial = isMultiMaterial ? material[face.materialIndex] : material;\n\t\t\t\t\tif (faceMaterial === undefined) continue;\n\t\t\t\t\tvar fvA = vertices[face.a];\n\t\t\t\t\tvar fvB = vertices[face.b];\n\t\t\t\t\tvar fvC = vertices[face.c];\n\t\t\t\t\tintersection = checkIntersection(this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint);\n\n\t\t\t\t\tif (intersection) {\n\t\t\t\t\t\tif (uvs && uvs[f]) {\n\t\t\t\t\t\t\tvar uvs_f = uvs[f];\n\n\t\t\t\t\t\t\t_uvA.copy(uvs_f[0]);\n\n\t\t\t\t\t\t\t_uvB.copy(uvs_f[1]);\n\n\t\t\t\t\t\t\t_uvC.copy(uvs_f[2]);\n\n\t\t\t\t\t\t\tintersection.uv = Triangle.getUV(_intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\t\tintersects.push(intersection);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction checkIntersection(object, material, raycaster, ray, pA, pB, pC, point) {\n\t\tvar intersect;\n\n\t\tif (material.side === BackSide) {\n\t\t\tintersect = ray.intersectTriangle(pC, pB, pA, true, point);\n\t\t} else {\n\t\t\tintersect = ray.intersectTriangle(pA, pB, pC, material.side !== DoubleSide, point);\n\t\t}\n\n\t\tif (intersect === null) return null;\n\n\t\t_intersectionPointWorld.copy(point);\n\n\t\t_intersectionPointWorld.applyMatrix4(object.matrixWorld);\n\n\t\tvar distance = raycaster.ray.origin.distanceTo(_intersectionPointWorld);\n\t\tif (distance < raycaster.near || distance > raycaster.far) return null;\n\t\treturn {\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectionPointWorld.clone(),\n\t\t\tobject: object\n\t\t};\n\t}\n\n\tfunction checkBufferGeometryIntersection(object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c) {\n\t\t_vA.fromBufferAttribute(position, a);\n\n\t\t_vB.fromBufferAttribute(position, b);\n\n\t\t_vC.fromBufferAttribute(position, c);\n\n\t\tvar morphInfluences = object.morphTargetInfluences;\n\n\t\tif (material.morphTargets && morphPosition && morphInfluences) {\n\t\t\t_morphA.set(0, 0, 0);\n\n\t\t\t_morphB.set(0, 0, 0);\n\n\t\t\t_morphC.set(0, 0, 0);\n\n\t\t\tfor (var i = 0, il = morphPosition.length; i < il; i++) {\n\t\t\t\tvar influence = morphInfluences[i];\n\t\t\t\tvar morphAttribute = morphPosition[i];\n\t\t\t\tif (influence === 0) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute(morphAttribute, a);\n\n\t\t\t\t_tempB.fromBufferAttribute(morphAttribute, b);\n\n\t\t\t\t_tempC.fromBufferAttribute(morphAttribute, c);\n\n\t\t\t\tif (morphTargetsRelative) {\n\t\t\t\t\t_morphA.addScaledVector(_tempA, influence);\n\n\t\t\t\t\t_morphB.addScaledVector(_tempB, influence);\n\n\t\t\t\t\t_morphC.addScaledVector(_tempC, influence);\n\t\t\t\t} else {\n\t\t\t\t\t_morphA.addScaledVector(_tempA.sub(_vA), influence);\n\n\t\t\t\t\t_morphB.addScaledVector(_tempB.sub(_vB), influence);\n\n\t\t\t\t\t_morphC.addScaledVector(_tempC.sub(_vC), influence);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_vA.add(_morphA);\n\n\t\t\t_vB.add(_morphB);\n\n\t\t\t_vC.add(_morphC);\n\t\t}\n\n\t\tif (object.isSkinnedMesh) {\n\t\t\tobject.boneTransform(a, _vA);\n\t\t\tobject.boneTransform(b, _vB);\n\t\t\tobject.boneTransform(c, _vC);\n\t\t}\n\n\t\tvar intersection = checkIntersection(object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint);\n\n\t\tif (intersection) {\n\t\t\tif (uv) {\n\t\t\t\t_uvA.fromBufferAttribute(uv, a);\n\n\t\t\t\t_uvB.fromBufferAttribute(uv, b);\n\n\t\t\t\t_uvC.fromBufferAttribute(uv, c);\n\n\t\t\t\tintersection.uv = Triangle.getUV(_intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2());\n\t\t\t}\n\n\t\t\tif (uv2) {\n\t\t\t\t_uvA.fromBufferAttribute(uv2, a);\n\n\t\t\t\t_uvB.fromBufferAttribute(uv2, b);\n\n\t\t\t\t_uvC.fromBufferAttribute(uv2, c);\n\n\t\t\t\tintersection.uv2 = Triangle.getUV(_intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2());\n\t\t\t}\n\n\t\t\tvar face = new Face3(a, b, c);\n\t\t\tTriangle.getNormal(_vA, _vB, _vC, face.normal);\n\t\t\tintersection.face = face;\n\t\t}\n\n\t\treturn intersection;\n\t}\n\n\tvar BoxBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(BoxBufferGeometry, _BufferGeometry);\n\n\t\tfunction BoxBufferGeometry(width, height, depth, widthSegments, heightSegments, depthSegments) {\n\t\t\tvar _this;\n\n\t\t\tif (width === void 0) {\n\t\t\t\twidth = 1;\n\t\t\t}\n\n\t\t\tif (height === void 0) {\n\t\t\t\theight = 1;\n\t\t\t}\n\n\t\t\tif (depth === void 0) {\n\t\t\t\tdepth = 1;\n\t\t\t}\n\n\t\t\tif (widthSegments === void 0) {\n\t\t\t\twidthSegments = 1;\n\t\t\t}\n\n\t\t\tif (heightSegments === void 0) {\n\t\t\t\theightSegments = 1;\n\t\t\t}\n\n\t\t\tif (depthSegments === void 0) {\n\t\t\t\tdepthSegments = 1;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'BoxBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tdepth: depth,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\tdepthSegments: depthSegments\n\t\t\t};\n\n\t\t\tvar scope = _assertThisInitialized(_this); // segments\n\n\n\t\t\twidthSegments = Math.floor(widthSegments);\n\t\t\theightSegments = Math.floor(heightSegments);\n\t\t\tdepthSegments = Math.floor(depthSegments); // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = []; // helper variables\n\n\t\t\tvar numberOfVertices = 0;\n\t\t\tvar groupStart = 0; // build each side of the box geometry\n\n\t\t\tbuildPlane('z', 'y', 'x', -1, -1, depth, height, width, depthSegments, heightSegments, 0); // px\n\n\t\t\tbuildPlane('z', 'y', 'x', 1, -1, depth, height, -width, depthSegments, heightSegments, 1); // nx\n\n\t\t\tbuildPlane('x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2); // py\n\n\t\t\tbuildPlane('x', 'z', 'y', 1, -1, width, depth, -height, widthSegments, depthSegments, 3); // ny\n\n\t\t\tbuildPlane('x', 'y', 'z', 1, -1, width, height, depth, widthSegments, heightSegments, 4); // pz\n\n\t\t\tbuildPlane('x', 'y', 'z', -1, -1, width, height, -depth, widthSegments, heightSegments, 5); // nz\n\t\t\t// build geometry\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\n\t\t\tfunction buildPlane(u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex) {\n\t\t\t\tvar segmentWidth = width / gridX;\n\t\t\t\tvar segmentHeight = height / gridY;\n\t\t\t\tvar widthHalf = width / 2;\n\t\t\t\tvar heightHalf = height / 2;\n\t\t\t\tvar depthHalf = depth / 2;\n\t\t\t\tvar gridX1 = gridX + 1;\n\t\t\t\tvar gridY1 = gridY + 1;\n\t\t\t\tvar vertexCounter = 0;\n\t\t\t\tvar groupCount = 0;\n\t\t\t\tvar vector = new Vector3(); // generate vertices, normals and uvs\n\n\t\t\t\tfor (var iy = 0; iy < gridY1; iy++) {\n\t\t\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\t\t\tfor (var ix = 0; ix < gridX1; ix++) {\n\t\t\t\t\t\tvar x = ix * segmentWidth - widthHalf; // set values to correct vector component\n\n\t\t\t\t\t\tvector[u] = x * udir;\n\t\t\t\t\t\tvector[v] = y * vdir;\n\t\t\t\t\t\tvector[w] = depthHalf; // now apply vector to vertex buffer\n\n\t\t\t\t\t\tvertices.push(vector.x, vector.y, vector.z); // set values to correct vector component\n\n\t\t\t\t\t\tvector[u] = 0;\n\t\t\t\t\t\tvector[v] = 0;\n\t\t\t\t\t\tvector[w] = depth > 0 ? 1 : -1; // now apply vector to normal buffer\n\n\t\t\t\t\t\tnormals.push(vector.x, vector.y, vector.z); // uvs\n\n\t\t\t\t\t\tuvs.push(ix / gridX);\n\t\t\t\t\t\tuvs.push(1 - iy / gridY); // counters\n\n\t\t\t\t\t\tvertexCounter += 1;\n\t\t\t\t\t}\n\t\t\t\t} // indices\n\t\t\t\t// 1. you need three indices to draw a single face\n\t\t\t\t// 2. a single segment consists of two faces\n\t\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\n\t\t\t\tfor (var _iy = 0; _iy < gridY; _iy++) {\n\t\t\t\t\tfor (var _ix = 0; _ix < gridX; _ix++) {\n\t\t\t\t\t\tvar a = numberOfVertices + _ix + gridX1 * _iy;\n\t\t\t\t\t\tvar b = numberOfVertices + _ix + gridX1 * (_iy + 1);\n\t\t\t\t\t\tvar c = numberOfVertices + (_ix + 1) + gridX1 * (_iy + 1);\n\t\t\t\t\t\tvar d = numberOfVertices + (_ix + 1) + gridX1 * _iy; // faces\n\n\t\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t\t\tindices.push(b, c, d); // increase counter\n\n\t\t\t\t\t\tgroupCount += 6;\n\t\t\t\t\t}\n\t\t\t\t} // add a group to the geometry. this will ensure multi material support\n\n\n\t\t\t\tscope.addGroup(groupStart, groupCount, materialIndex); // calculate new start value for groups\n\n\t\t\t\tgroupStart += groupCount; // update total number of vertices\n\n\t\t\t\tnumberOfVertices += vertexCounter;\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn BoxBufferGeometry;\n\t}(BufferGeometry);\n\n\t/**\n\t * Uniform Utilities\n\t */\n\tfunction cloneUniforms(src) {\n\t\tvar dst = {};\n\n\t\tfor (var u in src) {\n\t\t\tdst[u] = {};\n\n\t\t\tfor (var p in src[u]) {\n\t\t\t\tvar property = src[u][p];\n\n\t\t\t\tif (property && (property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture)) {\n\t\t\t\t\tdst[u][p] = property.clone();\n\t\t\t\t} else if (Array.isArray(property)) {\n\t\t\t\t\tdst[u][p] = property.slice();\n\t\t\t\t} else {\n\t\t\t\t\tdst[u][p] = property;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn dst;\n\t}\n\tfunction mergeUniforms(uniforms) {\n\t\tvar merged = {};\n\n\t\tfor (var u = 0; u < uniforms.length; u++) {\n\t\t\tvar tmp = cloneUniforms(uniforms[u]);\n\n\t\t\tfor (var p in tmp) {\n\t\t\t\tmerged[p] = tmp[p];\n\t\t\t}\n\t\t}\n\n\t\treturn merged;\n\t} // Legacy\n\n\tvar UniformsUtils = {\n\t\tclone: cloneUniforms,\n\t\tmerge: mergeUniforms\n\t};\n\n\tvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\n\tvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n\t/**\n\t * parameters = {\n\t *\tdefines: { \"label\" : \"value\" },\n\t *\tuniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n\t *\n\t *\tfragmentShader: <string>,\n\t *\tvertexShader: <string>,\n\t *\n\t *\twireframe: <boolean>,\n\t *\twireframeLinewidth: <float>,\n\t *\n\t *\tlights: <bool>,\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>,\n\t *\tmorphNormals: <bool>\n\t * }\n\t */\n\n\tfunction ShaderMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'ShaderMaterial';\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\t\tthis.linewidth = 1;\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.fog = false; // set to use scene fog\n\n\t\tthis.lights = false; // set to use scene lights\n\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.skinning = false; // set to use skinning attribute streams\n\n\t\tthis.morphTargets = false; // set to use morph targets\n\n\t\tthis.morphNormals = false; // set to use morph normals\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false,\n\t\t\t// set to use derivatives\n\t\t\tfragDepth: false,\n\t\t\t// set to use fragment depth values\n\t\t\tdrawBuffers: false,\n\t\t\t// set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\n\t\t}; // When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [1, 1, 1],\n\t\t\t'uv': [0, 0],\n\t\t\t'uv2': [0, 0]\n\t\t};\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\t\tthis.glslVersion = null;\n\n\t\tif (parameters !== undefined) {\n\t\t\tif (parameters.attributes !== undefined) {\n\t\t\t\tconsole.error('THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.');\n\t\t\t}\n\n\t\t\tthis.setValues(parameters);\n\t\t}\n\t}\n\n\tShaderMaterial.prototype = Object.create(Material.prototype);\n\tShaderMaterial.prototype.constructor = ShaderMaterial;\n\tShaderMaterial.prototype.isShaderMaterial = true;\n\n\tShaderMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\t\tthis.uniforms = cloneUniforms(source.uniforms);\n\t\tthis.defines = Object.assign({}, source.defines);\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\t\tthis.extensions = Object.assign({}, source.extensions);\n\t\tthis.glslVersion = source.glslVersion;\n\t\treturn this;\n\t};\n\n\tShaderMaterial.prototype.toJSON = function (meta) {\n\t\tvar data = Material.prototype.toJSON.call(this, meta);\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor (var name in this.uniforms) {\n\t\t\tvar uniform = this.uniforms[name];\n\t\t\tvar value = uniform.value;\n\n\t\t\tif (value && value.isTexture) {\n\t\t\t\tdata.uniforms[name] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON(meta).uuid\n\t\t\t\t};\n\t\t\t} else if (value && value.isColor) {\n\t\t\t\tdata.uniforms[name] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\t\t\t} else if (value && value.isVector2) {\n\t\t\t\tdata.uniforms[name] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\t\t\t} else if (value && value.isVector3) {\n\t\t\t\tdata.uniforms[name] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\t\t\t} else if (value && value.isVector4) {\n\t\t\t\tdata.uniforms[name] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\t\t\t} else if (value && value.isMatrix3) {\n\t\t\t\tdata.uniforms[name] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\t\t\t} else if (value && value.isMatrix4) {\n\t\t\t\tdata.uniforms[name] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tdata.uniforms[name] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t}; // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(this.defines).length > 0) data.defines = this.defines;\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\t\tvar extensions = {};\n\n\t\tfor (var key in this.extensions) {\n\t\t\tif (this.extensions[key] === true) extensions[key] = true;\n\t\t}\n\n\t\tif (Object.keys(extensions).length > 0) data.extensions = extensions;\n\t\treturn data;\n\t};\n\n\tfunction Camera() {\n\t\tObject3D.call(this);\n\t\tthis.type = 'Camera';\n\t\tthis.matrixWorldInverse = new Matrix4();\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\t}\n\n\tCamera.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: Camera,\n\t\tisCamera: true,\n\t\tcopy: function copy(source, recursive) {\n\t\t\tObject3D.prototype.copy.call(this, source, recursive);\n\t\t\tthis.matrixWorldInverse.copy(source.matrixWorldInverse);\n\t\t\tthis.projectionMatrix.copy(source.projectionMatrix);\n\t\t\tthis.projectionMatrixInverse.copy(source.projectionMatrixInverse);\n\t\t\treturn this;\n\t\t},\n\t\tgetWorldDirection: function getWorldDirection(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Camera: .getWorldDirection() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\tthis.updateWorldMatrix(true, false);\n\t\t\tvar e = this.matrixWorld.elements;\n\t\t\treturn target.set(-e[8], -e[9], -e[10]).normalize();\n\t\t},\n\t\tupdateMatrixWorld: function updateMatrixWorld(force) {\n\t\t\tObject3D.prototype.updateMatrixWorld.call(this, force);\n\t\t\tthis.matrixWorldInverse.copy(this.matrixWorld).invert();\n\t\t},\n\t\tupdateWorldMatrix: function updateWorldMatrix(updateParents, updateChildren) {\n\t\t\tObject3D.prototype.updateWorldMatrix.call(this, updateParents, updateChildren);\n\t\t\tthis.matrixWorldInverse.copy(this.matrixWorld).invert();\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t}\n\t});\n\n\tfunction PerspectiveCamera(fov, aspect, near, far) {\n\t\tif (fov === void 0) {\n\t\t\tfov = 50;\n\t\t}\n\n\t\tif (aspect === void 0) {\n\t\t\taspect = 1;\n\t\t}\n\n\t\tif (near === void 0) {\n\t\t\tnear = 0.1;\n\t\t}\n\n\t\tif (far === void 0) {\n\t\t\tfar = 2000;\n\t\t}\n\n\t\tCamera.call(this);\n\t\tthis.type = 'PerspectiveCamera';\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\t\tthis.filmGauge = 35; // width of the film (default in millimeters)\n\n\t\tthis.filmOffset = 0; // horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\t}\n\n\tPerspectiveCamera.prototype = Object.assign(Object.create(Camera.prototype), {\n\t\tconstructor: PerspectiveCamera,\n\t\tisPerspectiveCamera: true,\n\t\tcopy: function copy(source, recursive) {\n\t\t\tCamera.prototype.copy.call(this, source, recursive);\n\t\t\tthis.fov = source.fov;\n\t\t\tthis.zoom = source.zoom;\n\t\t\tthis.near = source.near;\n\t\t\tthis.far = source.far;\n\t\t\tthis.focus = source.focus;\n\t\t\tthis.aspect = source.aspect;\n\t\t\tthis.view = source.view === null ? null : Object.assign({}, source.view);\n\t\t\tthis.filmGauge = source.filmGauge;\n\t\t\tthis.filmOffset = source.filmOffset;\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t\t *\n\t\t * The default film gauge is 35, so that the focal length can be specified for\n\t\t * a 35mm (full frame) camera.\n\t\t *\n\t\t * Values for focal length and film gauge must have the same unit.\n\t\t */\n\t\tsetFocalLength: function setFocalLength(focalLength) {\n\t\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\t\t\tthis.fov = MathUtils.RAD2DEG * 2 * Math.atan(vExtentSlope);\n\t\t\tthis.updateProjectionMatrix();\n\t\t},\n\n\t\t/**\n\t\t * Calculates the focal length from the current .fov and .filmGauge.\n\t\t */\n\t\tgetFocalLength: function getFocalLength() {\n\t\t\tvar vExtentSlope = Math.tan(MathUtils.DEG2RAD * 0.5 * this.fov);\n\t\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\t\t},\n\t\tgetEffectiveFOV: function getEffectiveFOV() {\n\t\t\treturn MathUtils.RAD2DEG * 2 * Math.atan(Math.tan(MathUtils.DEG2RAD * 0.5 * this.fov) / this.zoom);\n\t\t},\n\t\tgetFilmWidth: function getFilmWidth() {\n\t\t\t// film not completely covered in portrait format (aspect < 1)\n\t\t\treturn this.filmGauge * Math.min(this.aspect, 1);\n\t\t},\n\t\tgetFilmHeight: function getFilmHeight() {\n\t\t\t// film not completely covered in landscape format (aspect > 1)\n\t\t\treturn this.filmGauge / Math.max(this.aspect, 1);\n\t\t},\n\n\t\t/**\n\t\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t\t * multi-monitor/multi-machine setups.\n\t\t *\n\t\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t\t * the monitors are in grid like this\n\t\t *\n\t\t *\t +---+---+---+\n\t\t *\t | A | B | C |\n\t\t *\t +---+---+---+\n\t\t *\t | D | E | F |\n\t\t *\t +---+---+---+\n\t\t *\n\t\t * then for each monitor you would call it like this\n\t\t *\n\t\t *\t const w = 1920;\n\t\t *\t const h = 1080;\n\t\t *\t const fullWidth = w * 3;\n\t\t *\t const fullHeight = h * 2;\n\t\t *\n\t\t *\t --A--\n\t\t *\t camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t\t *\t --B--\n\t\t *\t camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t\t *\t --C--\n\t\t *\t camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t\t *\t --D--\n\t\t *\t camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t\t *\t --E--\n\t\t *\t camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t\t *\t --F--\n\t\t *\t camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t\t *\n\t\t *\t Note there is no reason monitors have to be the same size or in a grid.\n\t\t */\n\t\tsetViewOffset: function setViewOffset(fullWidth, fullHeight, x, y, width, height) {\n\t\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\t\tif (this.view === null) {\n\t\t\t\tthis.view = {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tfullWidth: 1,\n\t\t\t\t\tfullHeight: 1,\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 0,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.view.enabled = true;\n\t\t\tthis.view.fullWidth = fullWidth;\n\t\t\tthis.view.fullHeight = fullHeight;\n\t\t\tthis.view.offsetX = x;\n\t\t\tthis.view.offsetY = y;\n\t\t\tthis.view.width = width;\n\t\t\tthis.view.height = height;\n\t\t\tthis.updateProjectionMatrix();\n\t\t},\n\t\tclearViewOffset: function clearViewOffset() {\n\t\t\tif (this.view !== null) {\n\t\t\t\tthis.view.enabled = false;\n\t\t\t}\n\n\t\t\tthis.updateProjectionMatrix();\n\t\t},\n\t\tupdateProjectionMatrix: function updateProjectionMatrix() {\n\t\t\tvar near = this.near;\n\t\t\tvar top = near * Math.tan(MathUtils.DEG2RAD * 0.5 * this.fov) / this.zoom;\n\t\t\tvar height = 2 * top;\n\t\t\tvar width = this.aspect * height;\n\t\t\tvar left = -0.5 * width;\n\t\t\tvar view = this.view;\n\n\t\t\tif (this.view !== null && this.view.enabled) {\n\t\t\t\tvar fullWidth = view.fullWidth,\n\t\t\t\t\t\tfullHeight = view.fullHeight;\n\t\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\t\twidth *= view.width / fullWidth;\n\t\t\t\theight *= view.height / fullHeight;\n\t\t\t}\n\n\t\t\tvar skew = this.filmOffset;\n\t\t\tif (skew !== 0) left += near * skew / this.getFilmWidth();\n\t\t\tthis.projectionMatrix.makePerspective(left, left + width, top, top - height, near, this.far);\n\t\t\tthis.projectionMatrixInverse.copy(this.projectionMatrix).invert();\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar data = Object3D.prototype.toJSON.call(this, meta);\n\t\t\tdata.object.fov = this.fov;\n\t\t\tdata.object.zoom = this.zoom;\n\t\t\tdata.object.near = this.near;\n\t\t\tdata.object.far = this.far;\n\t\t\tdata.object.focus = this.focus;\n\t\t\tdata.object.aspect = this.aspect;\n\t\t\tif (this.view !== null) data.object.view = Object.assign({}, this.view);\n\t\t\tdata.object.filmGauge = this.filmGauge;\n\t\t\tdata.object.filmOffset = this.filmOffset;\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tvar fov = 90,\n\t\t\taspect = 1;\n\n\tfunction CubeCamera(near, far, renderTarget) {\n\t\tObject3D.call(this);\n\t\tthis.type = 'CubeCamera';\n\n\t\tif (renderTarget.isWebGLCubeRenderTarget !== true) {\n\t\t\tconsole.error('THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.');\n\t\t\treturn;\n\t\t}\n\n\t\tthis.renderTarget = renderTarget;\n\t\tvar cameraPX = new PerspectiveCamera(fov, aspect, near, far);\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set(0, -1, 0);\n\t\tcameraPX.lookAt(new Vector3(1, 0, 0));\n\t\tthis.add(cameraPX);\n\t\tvar cameraNX = new PerspectiveCamera(fov, aspect, near, far);\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set(0, -1, 0);\n\t\tcameraNX.lookAt(new Vector3(-1, 0, 0));\n\t\tthis.add(cameraNX);\n\t\tvar cameraPY = new PerspectiveCamera(fov, aspect, near, far);\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set(0, 0, 1);\n\t\tcameraPY.lookAt(new Vector3(0, 1, 0));\n\t\tthis.add(cameraPY);\n\t\tvar cameraNY = new PerspectiveCamera(fov, aspect, near, far);\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set(0, 0, -1);\n\t\tcameraNY.lookAt(new Vector3(0, -1, 0));\n\t\tthis.add(cameraNY);\n\t\tvar cameraPZ = new PerspectiveCamera(fov, aspect, near, far);\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set(0, -1, 0);\n\t\tcameraPZ.lookAt(new Vector3(0, 0, 1));\n\t\tthis.add(cameraPZ);\n\t\tvar cameraNZ = new PerspectiveCamera(fov, aspect, near, far);\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set(0, -1, 0);\n\t\tcameraNZ.lookAt(new Vector3(0, 0, -1));\n\t\tthis.add(cameraNZ);\n\n\t\tthis.update = function (renderer, scene) {\n\t\t\tif (this.parent === null) this.updateMatrixWorld();\n\t\t\tvar currentXrEnabled = renderer.xr.enabled;\n\t\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\t\t\trenderer.xr.enabled = false;\n\t\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\t\t\trenderTarget.texture.generateMipmaps = false;\n\t\t\trenderer.setRenderTarget(renderTarget, 0);\n\t\t\trenderer.render(scene, cameraPX);\n\t\t\trenderer.setRenderTarget(renderTarget, 1);\n\t\t\trenderer.render(scene, cameraNX);\n\t\t\trenderer.setRenderTarget(renderTarget, 2);\n\t\t\trenderer.render(scene, cameraPY);\n\t\t\trenderer.setRenderTarget(renderTarget, 3);\n\t\t\trenderer.render(scene, cameraNY);\n\t\t\trenderer.setRenderTarget(renderTarget, 4);\n\t\t\trenderer.render(scene, cameraPZ);\n\t\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\t\t\trenderer.setRenderTarget(renderTarget, 5);\n\t\t\trenderer.render(scene, cameraNZ);\n\t\t\trenderer.setRenderTarget(currentRenderTarget);\n\t\t\trenderer.xr.enabled = currentXrEnabled;\n\t\t};\n\t}\n\n\tCubeCamera.prototype = Object.create(Object3D.prototype);\n\tCubeCamera.prototype.constructor = CubeCamera;\n\n\tfunction CubeTexture(images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding) {\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\t\tformat = format !== undefined ? format : RGBFormat;\n\t\tTexture.call(this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding);\n\t\tthis.flipY = false; // Why CubeTexture._needsFlipEnvMap is necessary:\n\t\t//\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false)\n\t\t// when using WebGLCubeRenderTarget.texture as a cube texture.\n\n\t\tthis._needsFlipEnvMap = true;\n\t}\n\n\tCubeTexture.prototype = Object.create(Texture.prototype);\n\tCubeTexture.prototype.constructor = CubeTexture;\n\tCubeTexture.prototype.isCubeTexture = true;\n\tObject.defineProperty(CubeTexture.prototype, 'images', {\n\t\tget: function get() {\n\t\t\treturn this.image;\n\t\t},\n\t\tset: function set(value) {\n\t\t\tthis.image = value;\n\t\t}\n\t});\n\n\tfunction WebGLCubeRenderTarget(size, options, dummy) {\n\t\tif (Number.isInteger(options)) {\n\t\t\tconsole.warn('THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )');\n\t\t\toptions = dummy;\n\t\t}\n\n\t\tWebGLRenderTarget.call(this, size, size, options);\n\t\toptions = options || {};\n\t\tthis.texture = new CubeTexture(undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding);\n\t\tthis.texture._needsFlipEnvMap = false;\n\t}\n\n\tWebGLCubeRenderTarget.prototype = Object.create(WebGLRenderTarget.prototype);\n\tWebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget;\n\tWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\n\tWebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function (renderer, texture) {\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.format = RGBAFormat; // see #18859\n\n\t\tthis.texture.encoding = texture.encoding;\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\t\tvar shader = {\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: {\n\t\t\t\t\tvalue: null\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader:\n\t\t\t/* glsl */\n\t\t\t\"\\n\\n\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\n\\t\\t\\t\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n\\n\\t\\t\\t}\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\n\\t\\t\\t\\t#include <begin_vertex>\\n\\t\\t\\t\\t#include <project_vertex>\\n\\n\\t\\t\\t}\\n\\t\\t\",\n\t\t\tfragmentShader:\n\t\t\t/* glsl */\n\t\t\t\"\\n\\n\\t\\t\\tuniform sampler2D tEquirect;\\n\\n\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t#include <common>\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tvec3 direction = normalize( vWorldDirection );\\n\\n\\t\\t\\t\\tvec2 sampleUV = equirectUv( direction );\\n\\n\\t\\t\\t\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\n\\t\\t\\t}\\n\\t\\t\"\n\t\t};\n\t\tvar geometry = new BoxBufferGeometry(5, 5, 5);\n\t\tvar material = new ShaderMaterial({\n\t\t\tname: 'CubemapFromEquirect',\n\t\t\tuniforms: cloneUniforms(shader.uniforms),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\t\t});\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\t\tvar mesh = new Mesh(geometry, material);\n\t\tvar currentMinFilter = texture.minFilter; // Avoid blurred poles\n\n\t\tif (texture.minFilter === LinearMipmapLinearFilter) texture.minFilter = LinearFilter;\n\t\tvar camera = new CubeCamera(1, 10, this);\n\t\tcamera.update(renderer, mesh);\n\t\ttexture.minFilter = currentMinFilter;\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\t\treturn this;\n\t};\n\n\tWebGLCubeRenderTarget.prototype.clear = function (renderer, color, depth, stencil) {\n\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\trenderer.setRenderTarget(this, i);\n\t\t\trenderer.clear(color, depth, stencil);\n\t\t}\n\n\t\trenderer.setRenderTarget(currentRenderTarget);\n\t};\n\n\tfunction DataTexture(data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding) {\n\t\tTexture.call(this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding);\n\t\tthis.image = {\n\t\t\tdata: data || null,\n\t\t\twidth: width || 1,\n\t\t\theight: height || 1\n\t\t};\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\t\tthis.needsUpdate = true;\n\t}\n\n\tDataTexture.prototype = Object.create(Texture.prototype);\n\tDataTexture.prototype.constructor = DataTexture;\n\tDataTexture.prototype.isDataTexture = true;\n\n\tvar _sphere$1 = /*@__PURE__*/new Sphere();\n\n\tvar _vector$5 = /*@__PURE__*/new Vector3();\n\n\tvar Frustum = /*#__PURE__*/function () {\n\t\tfunction Frustum(p0, p1, p2, p3, p4, p5) {\n\t\t\tthis.planes = [p0 !== undefined ? p0 : new Plane(), p1 !== undefined ? p1 : new Plane(), p2 !== undefined ? p2 : new Plane(), p3 !== undefined ? p3 : new Plane(), p4 !== undefined ? p4 : new Plane(), p5 !== undefined ? p5 : new Plane()];\n\t\t}\n\n\t\tvar _proto = Frustum.prototype;\n\n\t\t_proto.set = function set(p0, p1, p2, p3, p4, p5) {\n\t\t\tvar planes = this.planes;\n\t\t\tplanes[0].copy(p0);\n\t\t\tplanes[1].copy(p1);\n\t\t\tplanes[2].copy(p2);\n\t\t\tplanes[3].copy(p3);\n\t\t\tplanes[4].copy(p4);\n\t\t\tplanes[5].copy(p5);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(frustum) {\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\tplanes[i].copy(frustum.planes[i]);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromProjectionMatrix = function setFromProjectionMatrix(m) {\n\t\t\tvar planes = this.planes;\n\t\t\tvar me = m.elements;\n\t\t\tvar me0 = me[0],\n\t\t\t\t\tme1 = me[1],\n\t\t\t\t\tme2 = me[2],\n\t\t\t\t\tme3 = me[3];\n\t\t\tvar me4 = me[4],\n\t\t\t\t\tme5 = me[5],\n\t\t\t\t\tme6 = me[6],\n\t\t\t\t\tme7 = me[7];\n\t\t\tvar me8 = me[8],\n\t\t\t\t\tme9 = me[9],\n\t\t\t\t\tme10 = me[10],\n\t\t\t\t\tme11 = me[11];\n\t\t\tvar me12 = me[12],\n\t\t\t\t\tme13 = me[13],\n\t\t\t\t\tme14 = me[14],\n\t\t\t\t\tme15 = me[15];\n\t\t\tplanes[0].setComponents(me3 - me0, me7 - me4, me11 - me8, me15 - me12).normalize();\n\t\t\tplanes[1].setComponents(me3 + me0, me7 + me4, me11 + me8, me15 + me12).normalize();\n\t\t\tplanes[2].setComponents(me3 + me1, me7 + me5, me11 + me9, me15 + me13).normalize();\n\t\t\tplanes[3].setComponents(me3 - me1, me7 - me5, me11 - me9, me15 - me13).normalize();\n\t\t\tplanes[4].setComponents(me3 - me2, me7 - me6, me11 - me10, me15 - me14).normalize();\n\t\t\tplanes[5].setComponents(me3 + me2, me7 + me6, me11 + me10, me15 + me14).normalize();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.intersectsObject = function intersectsObject(object) {\n\t\t\tvar geometry = object.geometry;\n\t\t\tif (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$1.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld);\n\n\t\t\treturn this.intersectsSphere(_sphere$1);\n\t\t};\n\n\t\t_proto.intersectsSprite = function intersectsSprite(sprite) {\n\t\t\t_sphere$1.center.set(0, 0, 0);\n\n\t\t\t_sphere$1.radius = 0.7071067811865476;\n\n\t\t\t_sphere$1.applyMatrix4(sprite.matrixWorld);\n\n\t\t\treturn this.intersectsSphere(_sphere$1);\n\t\t};\n\n\t\t_proto.intersectsSphere = function intersectsSphere(sphere) {\n\t\t\tvar planes = this.planes;\n\t\t\tvar center = sphere.center;\n\t\t\tvar negRadius = -sphere.radius;\n\n\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\tvar distance = planes[i].distanceToPoint(center);\n\n\t\t\t\tif (distance < negRadius) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\t_proto.intersectsBox = function intersectsBox(box) {\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\tvar plane = planes[i]; // corner at max distance\n\n\t\t\t\t_vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\t_vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\t_vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\tif (plane.distanceToPoint(_vector$5) < 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\t_proto.containsPoint = function containsPoint(point) {\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\tif (planes[i].distanceToPoint(point) < 0) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\treturn Frustum;\n\t}();\n\n\tfunction WebGLAnimation() {\n\t\tvar context = null;\n\t\tvar isAnimating = false;\n\t\tvar animationLoop = null;\n\t\tvar requestId = null;\n\n\t\tfunction onAnimationFrame(time, frame) {\n\t\t\tanimationLoop(time, frame);\n\t\t\trequestId = context.requestAnimationFrame(onAnimationFrame);\n\t\t}\n\n\t\treturn {\n\t\t\tstart: function start() {\n\t\t\t\tif (isAnimating === true) return;\n\t\t\t\tif (animationLoop === null) return;\n\t\t\t\trequestId = context.requestAnimationFrame(onAnimationFrame);\n\t\t\t\tisAnimating = true;\n\t\t\t},\n\t\t\tstop: function stop() {\n\t\t\t\tcontext.cancelAnimationFrame(requestId);\n\t\t\t\tisAnimating = false;\n\t\t\t},\n\t\t\tsetAnimationLoop: function setAnimationLoop(callback) {\n\t\t\t\tanimationLoop = callback;\n\t\t\t},\n\t\t\tsetContext: function setContext(value) {\n\t\t\t\tcontext = value;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction WebGLAttributes(gl, capabilities) {\n\t\tvar isWebGL2 = capabilities.isWebGL2;\n\t\tvar buffers = new WeakMap();\n\n\t\tfunction createBuffer(attribute, bufferType) {\n\t\t\tvar array = attribute.array;\n\t\t\tvar usage = attribute.usage;\n\t\t\tvar buffer = gl.createBuffer();\n\t\t\tgl.bindBuffer(bufferType, buffer);\n\t\t\tgl.bufferData(bufferType, array, usage);\n\t\t\tattribute.onUploadCallback();\n\t\t\tvar type = 5126;\n\n\t\t\tif (array instanceof Float32Array) {\n\t\t\t\ttype = 5126;\n\t\t\t} else if (array instanceof Float64Array) {\n\t\t\t\tconsole.warn('THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.');\n\t\t\t} else if (array instanceof Uint16Array) {\n\t\t\t\tif (attribute.isFloat16BufferAttribute) {\n\t\t\t\t\tif (isWebGL2) {\n\t\t\t\t\t\ttype = 5131;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn('THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttype = 5123;\n\t\t\t\t}\n\t\t\t} else if (array instanceof Int16Array) {\n\t\t\t\ttype = 5122;\n\t\t\t} else if (array instanceof Uint32Array) {\n\t\t\t\ttype = 5125;\n\t\t\t} else if (array instanceof Int32Array) {\n\t\t\t\ttype = 5124;\n\t\t\t} else if (array instanceof Int8Array) {\n\t\t\t\ttype = 5120;\n\t\t\t} else if (array instanceof Uint8Array) {\n\t\t\t\ttype = 5121;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tbuffer: buffer,\n\t\t\t\ttype: type,\n\t\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\t\tversion: attribute.version\n\t\t\t};\n\t\t}\n\n\t\tfunction updateBuffer(buffer, attribute, bufferType) {\n\t\t\tvar array = attribute.array;\n\t\t\tvar updateRange = attribute.updateRange;\n\t\t\tgl.bindBuffer(bufferType, buffer);\n\n\t\t\tif (updateRange.count === -1) {\n\t\t\t\t// Not using update ranges\n\t\t\t\tgl.bufferSubData(bufferType, 0, array);\n\t\t\t} else {\n\t\t\t\tif (isWebGL2) {\n\t\t\t\t\tgl.bufferSubData(bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array, updateRange.offset, updateRange.count);\n\t\t\t\t} else {\n\t\t\t\t\tgl.bufferSubData(bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array.subarray(updateRange.offset, updateRange.offset + updateRange.count));\n\t\t\t\t}\n\n\t\t\t\tupdateRange.count = -1; // reset range\n\t\t\t}\n\t\t} //\n\n\n\t\tfunction get(attribute) {\n\t\t\tif (attribute.isInterleavedBufferAttribute) attribute = attribute.data;\n\t\t\treturn buffers.get(attribute);\n\t\t}\n\n\t\tfunction remove(attribute) {\n\t\t\tif (attribute.isInterleavedBufferAttribute) attribute = attribute.data;\n\t\t\tvar data = buffers.get(attribute);\n\n\t\t\tif (data) {\n\t\t\t\tgl.deleteBuffer(data.buffer);\n\t\t\t\tbuffers.delete(attribute);\n\t\t\t}\n\t\t}\n\n\t\tfunction update(attribute, bufferType) {\n\t\t\tif (attribute.isGLBufferAttribute) {\n\t\t\t\tvar cached = buffers.get(attribute);\n\n\t\t\t\tif (!cached || cached.version < attribute.version) {\n\t\t\t\t\tbuffers.set(attribute, {\n\t\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\t\tversion: attribute.version\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (attribute.isInterleavedBufferAttribute) attribute = attribute.data;\n\t\t\tvar data = buffers.get(attribute);\n\n\t\t\tif (data === undefined) {\n\t\t\t\tbuffers.set(attribute, createBuffer(attribute, bufferType));\n\t\t\t} else if (data.version < attribute.version) {\n\t\t\t\tupdateBuffer(data.buffer, attribute, bufferType);\n\t\t\t\tdata.version = attribute.version;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tremove: remove,\n\t\t\tupdate: update\n\t\t};\n\t}\n\n\tvar PlaneBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(PlaneBufferGeometry, _BufferGeometry);\n\n\t\tfunction PlaneBufferGeometry(width, height, widthSegments, heightSegments) {\n\t\t\tvar _this;\n\n\t\t\tif (width === void 0) {\n\t\t\t\twidth = 1;\n\t\t\t}\n\n\t\t\tif (height === void 0) {\n\t\t\t\theight = 1;\n\t\t\t}\n\n\t\t\tif (widthSegments === void 0) {\n\t\t\t\twidthSegments = 1;\n\t\t\t}\n\n\t\t\tif (heightSegments === void 0) {\n\t\t\t\theightSegments = 1;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'PlaneBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments\n\t\t\t};\n\t\t\tvar width_half = width / 2;\n\t\t\tvar height_half = height / 2;\n\t\t\tvar gridX = Math.floor(widthSegments);\n\t\t\tvar gridY = Math.floor(heightSegments);\n\t\t\tvar gridX1 = gridX + 1;\n\t\t\tvar gridY1 = gridY + 1;\n\t\t\tvar segment_width = width / gridX;\n\t\t\tvar segment_height = height / gridY; //\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = [];\n\n\t\t\tfor (var iy = 0; iy < gridY1; iy++) {\n\t\t\t\tvar y = iy * segment_height - height_half;\n\n\t\t\t\tfor (var ix = 0; ix < gridX1; ix++) {\n\t\t\t\t\tvar x = ix * segment_width - width_half;\n\t\t\t\t\tvertices.push(x, -y, 0);\n\t\t\t\t\tnormals.push(0, 0, 1);\n\t\t\t\t\tuvs.push(ix / gridX);\n\t\t\t\t\tuvs.push(1 - iy / gridY);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var _iy = 0; _iy < gridY; _iy++) {\n\t\t\t\tfor (var _ix = 0; _ix < gridX; _ix++) {\n\t\t\t\t\tvar a = _ix + gridX1 * _iy;\n\t\t\t\t\tvar b = _ix + gridX1 * (_iy + 1);\n\t\t\t\t\tvar c = _ix + 1 + gridX1 * (_iy + 1);\n\t\t\t\t\tvar d = _ix + 1 + gridX1 * _iy;\n\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t\tindices.push(b, c, d);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn PlaneBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\n\tvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\n\tvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\";\n\n\tvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\";\n\n\tvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\n\tvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\n\tvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\n\tvar bsdfs = \"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\";\n\n\tvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\n\tvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\n\tvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\n\tvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\n\tvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\n\tvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\n\tvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\n\tvar color_pars_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\n\tvar color_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor.xyz *= color.xyz;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\n\tvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\";\n\n\tvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\n\tvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\n\tvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\n\tvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\n\tvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\n\tvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\n\tvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\n\tvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\n\tvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\n\tvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\n\tvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\n\tvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\n\tvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\n\tvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\";\n\n\tvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\";\n\n\tvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\n\tvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\n\tvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\n\tvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\";\n\n\tvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\n\tvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\n\tvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\n\tvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\";\n\n\tvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\n\tvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\n\tvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\n\tvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\n\tvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\";\n\n\tvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3(\t\t0, 1,\t\t0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\n\tvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\n\tvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\";\n\n\tvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\n\tvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\n\tvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\n\tvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\n\tvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\n\tvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\n\tvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\n\tvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\n\tvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\n\tvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\n\tvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\n\tvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\";\n\n\tvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\n\tvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\";\n\n\tvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t\\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\n\tvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\";\n\n\tvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\n\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\";\n\n\tvar clearcoat_normal_fragment_begin = \"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\n\tvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\\n\\t#endif\\n#endif\";\n\n\tvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\n\tvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\n\tvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\n\tvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\n\tvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\n\tvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\n\tvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\n\tvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\n\tvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t\tf.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t\tf.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\n\tvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\n\tvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\n\tvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\n\tvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\n\tvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\n\tvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\n\tvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\n\tvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\n\tvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\n\tvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\n\tvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3(\t1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108,\t1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605,\t1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\n\tvar transmissionmap_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n#endif\";\n\n\tvar transmissionmap_pars_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\tuniform sampler2D transmissionMap;\\n#endif\";\n\n\tvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\n\tvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\n\tvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\n\tvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\n\tvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\n\tvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\n\tvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\n\tvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\n\tvar background_vert = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\n\tvar cube_frag = \"#include <envmap_common_pars_fragment>\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include <cube_uv_reflection_fragment>\\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\n\tvar cube_vert = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\n\tvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\";\n\n\tvar depth_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\n\tvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\n\tvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\n\tvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\n\tvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\";\n\n\tvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\n\tvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshbasic_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshmatcap_frag = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\n\tvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_toon_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_toon_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar meshphysical_frag = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n\\t#define TRANSMISSION\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef TRANSMISSION\\n\\tuniform float transmission;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <transmissionmap_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <lights_pars_begin>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <clearcoat_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#ifdef TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\n\\t#endif\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <clearcoat_normal_fragment_begin>\\n\\t#include <clearcoat_normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <transmissionmap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#ifdef TRANSMISSION\\n\\t\\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\\n\\t#endif\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\n\tvar meshphysical_vert = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\n\tvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\n\tvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\n\tvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\n\tvar shadow_vert = \"#include <common>\\n#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\n\tvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\n\tvar ShaderChunk = {\n\t\talphamap_fragment: alphamap_fragment,\n\t\talphamap_pars_fragment: alphamap_pars_fragment,\n\t\talphatest_fragment: alphatest_fragment,\n\t\taomap_fragment: aomap_fragment,\n\t\taomap_pars_fragment: aomap_pars_fragment,\n\t\tbegin_vertex: begin_vertex,\n\t\tbeginnormal_vertex: beginnormal_vertex,\n\t\tbsdfs: bsdfs,\n\t\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\t\tclipping_planes_fragment: clipping_planes_fragment,\n\t\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\t\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\t\tclipping_planes_vertex: clipping_planes_vertex,\n\t\tcolor_fragment: color_fragment,\n\t\tcolor_pars_fragment: color_pars_fragment,\n\t\tcolor_pars_vertex: color_pars_vertex,\n\t\tcolor_vertex: color_vertex,\n\t\tcommon: common,\n\t\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\t\tdefaultnormal_vertex: defaultnormal_vertex,\n\t\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\t\tdisplacementmap_vertex: displacementmap_vertex,\n\t\temissivemap_fragment: emissivemap_fragment,\n\t\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\t\tencodings_fragment: encodings_fragment,\n\t\tencodings_pars_fragment: encodings_pars_fragment,\n\t\tenvmap_fragment: envmap_fragment,\n\t\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\t\tenvmap_pars_fragment: envmap_pars_fragment,\n\t\tenvmap_pars_vertex: envmap_pars_vertex,\n\t\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\t\tenvmap_vertex: envmap_vertex,\n\t\tfog_vertex: fog_vertex,\n\t\tfog_pars_vertex: fog_pars_vertex,\n\t\tfog_fragment: fog_fragment,\n\t\tfog_pars_fragment: fog_pars_fragment,\n\t\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\t\tlightmap_fragment: lightmap_fragment,\n\t\tlightmap_pars_fragment: lightmap_pars_fragment,\n\t\tlights_lambert_vertex: lights_lambert_vertex,\n\t\tlights_pars_begin: lights_pars_begin,\n\t\tlights_toon_fragment: lights_toon_fragment,\n\t\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\t\tlights_phong_fragment: lights_phong_fragment,\n\t\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\t\tlights_physical_fragment: lights_physical_fragment,\n\t\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\t\tlights_fragment_begin: lights_fragment_begin,\n\t\tlights_fragment_maps: lights_fragment_maps,\n\t\tlights_fragment_end: lights_fragment_end,\n\t\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\t\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\t\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\t\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\t\tmap_fragment: map_fragment,\n\t\tmap_pars_fragment: map_pars_fragment,\n\t\tmap_particle_fragment: map_particle_fragment,\n\t\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\t\tmetalnessmap_fragment: metalnessmap_fragment,\n\t\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\t\tmorphnormal_vertex: morphnormal_vertex,\n\t\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\t\tmorphtarget_vertex: morphtarget_vertex,\n\t\tnormal_fragment_begin: normal_fragment_begin,\n\t\tnormal_fragment_maps: normal_fragment_maps,\n\t\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\t\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\t\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\t\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\t\tpacking: packing,\n\t\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\t\tproject_vertex: project_vertex,\n\t\tdithering_fragment: dithering_fragment,\n\t\tdithering_pars_fragment: dithering_pars_fragment,\n\t\troughnessmap_fragment: roughnessmap_fragment,\n\t\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\t\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\t\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\t\tshadowmap_vertex: shadowmap_vertex,\n\t\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\t\tskinbase_vertex: skinbase_vertex,\n\t\tskinning_pars_vertex: skinning_pars_vertex,\n\t\tskinning_vertex: skinning_vertex,\n\t\tskinnormal_vertex: skinnormal_vertex,\n\t\tspecularmap_fragment: specularmap_fragment,\n\t\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\t\ttonemapping_fragment: tonemapping_fragment,\n\t\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\t\ttransmissionmap_fragment: transmissionmap_fragment,\n\t\ttransmissionmap_pars_fragment: transmissionmap_pars_fragment,\n\t\tuv_pars_fragment: uv_pars_fragment,\n\t\tuv_pars_vertex: uv_pars_vertex,\n\t\tuv_vertex: uv_vertex,\n\t\tuv2_pars_fragment: uv2_pars_fragment,\n\t\tuv2_pars_vertex: uv2_pars_vertex,\n\t\tuv2_vertex: uv2_vertex,\n\t\tworldpos_vertex: worldpos_vertex,\n\t\tbackground_frag: background_frag,\n\t\tbackground_vert: background_vert,\n\t\tcube_frag: cube_frag,\n\t\tcube_vert: cube_vert,\n\t\tdepth_frag: depth_frag,\n\t\tdepth_vert: depth_vert,\n\t\tdistanceRGBA_frag: distanceRGBA_frag,\n\t\tdistanceRGBA_vert: distanceRGBA_vert,\n\t\tequirect_frag: equirect_frag,\n\t\tequirect_vert: equirect_vert,\n\t\tlinedashed_frag: linedashed_frag,\n\t\tlinedashed_vert: linedashed_vert,\n\t\tmeshbasic_frag: meshbasic_frag,\n\t\tmeshbasic_vert: meshbasic_vert,\n\t\tmeshlambert_frag: meshlambert_frag,\n\t\tmeshlambert_vert: meshlambert_vert,\n\t\tmeshmatcap_frag: meshmatcap_frag,\n\t\tmeshmatcap_vert: meshmatcap_vert,\n\t\tmeshtoon_frag: meshtoon_frag,\n\t\tmeshtoon_vert: meshtoon_vert,\n\t\tmeshphong_frag: meshphong_frag,\n\t\tmeshphong_vert: meshphong_vert,\n\t\tmeshphysical_frag: meshphysical_frag,\n\t\tmeshphysical_vert: meshphysical_vert,\n\t\tnormal_frag: normal_frag,\n\t\tnormal_vert: normal_vert,\n\t\tpoints_frag: points_frag,\n\t\tpoints_vert: points_vert,\n\t\tshadow_frag: shadow_frag,\n\t\tshadow_vert: shadow_vert,\n\t\tsprite_frag: sprite_frag,\n\t\tsprite_vert: sprite_vert\n\t};\n\n\t/**\n\t * Uniforms library for shared webgl shaders\n\t */\n\n\tvar UniformsLib = {\n\t\tcommon: {\n\t\t\tdiffuse: {\n\t\t\t\tvalue: new Color(0xeeeeee)\n\t\t\t},\n\t\t\topacity: {\n\t\t\t\tvalue: 1.0\n\t\t\t},\n\t\t\tmap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tuvTransform: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t},\n\t\t\tuv2Transform: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t},\n\t\t\talphaMap: {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t},\n\t\tspecularmap: {\n\t\t\tspecularMap: {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t},\n\t\tenvmap: {\n\t\t\tenvMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tflipEnvMap: {\n\t\t\t\tvalue: -1\n\t\t\t},\n\t\t\treflectivity: {\n\t\t\t\tvalue: 1.0\n\t\t\t},\n\t\t\trefractionRatio: {\n\t\t\t\tvalue: 0.98\n\t\t\t},\n\t\t\tmaxMipLevel: {\n\t\t\t\tvalue: 0\n\t\t\t}\n\t\t},\n\t\taomap: {\n\t\t\taoMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\taoMapIntensity: {\n\t\t\t\tvalue: 1\n\t\t\t}\n\t\t},\n\t\tlightmap: {\n\t\t\tlightMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tlightMapIntensity: {\n\t\t\t\tvalue: 1\n\t\t\t}\n\t\t},\n\t\temissivemap: {\n\t\t\temissiveMap: {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t},\n\t\tbumpmap: {\n\t\t\tbumpMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tbumpScale: {\n\t\t\t\tvalue: 1\n\t\t\t}\n\t\t},\n\t\tnormalmap: {\n\t\t\tnormalMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tnormalScale: {\n\t\t\t\tvalue: new Vector2(1, 1)\n\t\t\t}\n\t\t},\n\t\tdisplacementmap: {\n\t\t\tdisplacementMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tdisplacementScale: {\n\t\t\t\tvalue: 1\n\t\t\t},\n\t\t\tdisplacementBias: {\n\t\t\t\tvalue: 0\n\t\t\t}\n\t\t},\n\t\troughnessmap: {\n\t\t\troughnessMap: {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t},\n\t\tmetalnessmap: {\n\t\t\tmetalnessMap: {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t},\n\t\tgradientmap: {\n\t\t\tgradientMap: {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t},\n\t\tfog: {\n\t\t\tfogDensity: {\n\t\t\t\tvalue: 0.00025\n\t\t\t},\n\t\t\tfogNear: {\n\t\t\t\tvalue: 1\n\t\t\t},\n\t\t\tfogFar: {\n\t\t\t\tvalue: 2000\n\t\t\t},\n\t\t\tfogColor: {\n\t\t\t\tvalue: new Color(0xffffff)\n\t\t\t}\n\t\t},\n\t\tlights: {\n\t\t\tambientLightColor: {\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tlightProbe: {\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tdirectionalLights: {\n\t\t\t\tvalue: [],\n\t\t\t\tproperties: {\n\t\t\t\t\tdirection: {},\n\t\t\t\t\tcolor: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdirectionalLightShadows: {\n\t\t\t\tvalue: [],\n\t\t\t\tproperties: {\n\t\t\t\t\tshadowBias: {},\n\t\t\t\t\tshadowNormalBias: {},\n\t\t\t\t\tshadowRadius: {},\n\t\t\t\t\tshadowMapSize: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdirectionalShadowMap: {\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tdirectionalShadowMatrix: {\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tspotLights: {\n\t\t\t\tvalue: [],\n\t\t\t\tproperties: {\n\t\t\t\t\tcolor: {},\n\t\t\t\t\tposition: {},\n\t\t\t\t\tdirection: {},\n\t\t\t\t\tdistance: {},\n\t\t\t\t\tconeCos: {},\n\t\t\t\t\tpenumbraCos: {},\n\t\t\t\t\tdecay: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tspotLightShadows: {\n\t\t\t\tvalue: [],\n\t\t\t\tproperties: {\n\t\t\t\t\tshadowBias: {},\n\t\t\t\t\tshadowNormalBias: {},\n\t\t\t\t\tshadowRadius: {},\n\t\t\t\t\tshadowMapSize: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tspotShadowMap: {\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tspotShadowMatrix: {\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tpointLights: {\n\t\t\t\tvalue: [],\n\t\t\t\tproperties: {\n\t\t\t\t\tcolor: {},\n\t\t\t\t\tposition: {},\n\t\t\t\t\tdecay: {},\n\t\t\t\t\tdistance: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tpointLightShadows: {\n\t\t\t\tvalue: [],\n\t\t\t\tproperties: {\n\t\t\t\t\tshadowBias: {},\n\t\t\t\t\tshadowNormalBias: {},\n\t\t\t\t\tshadowRadius: {},\n\t\t\t\t\tshadowMapSize: {},\n\t\t\t\t\tshadowCameraNear: {},\n\t\t\t\t\tshadowCameraFar: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tpointShadowMap: {\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tpointShadowMatrix: {\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\themisphereLights: {\n\t\t\t\tvalue: [],\n\t\t\t\tproperties: {\n\t\t\t\t\tdirection: {},\n\t\t\t\t\tskyColor: {},\n\t\t\t\t\tgroundColor: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\t\trectAreaLights: {\n\t\t\t\tvalue: [],\n\t\t\t\tproperties: {\n\t\t\t\t\tcolor: {},\n\t\t\t\t\tposition: {},\n\t\t\t\t\twidth: {},\n\t\t\t\t\theight: {}\n\t\t\t\t}\n\t\t\t},\n\t\t\tltc_1: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tltc_2: {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t},\n\t\tpoints: {\n\t\t\tdiffuse: {\n\t\t\t\tvalue: new Color(0xeeeeee)\n\t\t\t},\n\t\t\topacity: {\n\t\t\t\tvalue: 1.0\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tvalue: 1.0\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tvalue: 1.0\n\t\t\t},\n\t\t\tmap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\talphaMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tuvTransform: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t},\n\t\tsprite: {\n\t\t\tdiffuse: {\n\t\t\t\tvalue: new Color(0xeeeeee)\n\t\t\t},\n\t\t\topacity: {\n\t\t\t\tvalue: 1.0\n\t\t\t},\n\t\t\tcenter: {\n\t\t\t\tvalue: new Vector2(0.5, 0.5)\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tvalue: 0.0\n\t\t\t},\n\t\t\tmap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\talphaMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tuvTransform: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t}\n\t};\n\n\tvar ShaderLib = {\n\t\tbasic: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.fog]),\n\t\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\t\t},\n\t\tlambert: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.fog, UniformsLib.lights, {\n\t\t\t\temissive: {\n\t\t\t\t\tvalue: new Color(0x000000)\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\t\t},\n\t\tphong: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.fog, UniformsLib.lights, {\n\t\t\t\temissive: {\n\t\t\t\t\tvalue: new Color(0x000000)\n\t\t\t\t},\n\t\t\t\tspecular: {\n\t\t\t\t\tvalue: new Color(0x111111)\n\t\t\t\t},\n\t\t\t\tshininess: {\n\t\t\t\t\tvalue: 30\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\t\tfragmentShader: ShaderChunk.meshphong_frag\n\t\t},\n\t\tstandard: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.roughnessmap, UniformsLib.metalnessmap, UniformsLib.fog, UniformsLib.lights, {\n\t\t\t\temissive: {\n\t\t\t\t\tvalue: new Color(0x000000)\n\t\t\t\t},\n\t\t\t\troughness: {\n\t\t\t\t\tvalue: 1.0\n\t\t\t\t},\n\t\t\t\tmetalness: {\n\t\t\t\t\tvalue: 0.0\n\t\t\t\t},\n\t\t\t\tenvMapIntensity: {\n\t\t\t\t\tvalue: 1\n\t\t\t\t} // temporary\n\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\t\t},\n\t\ttoon: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.gradientmap, UniformsLib.fog, UniformsLib.lights, {\n\t\t\t\temissive: {\n\t\t\t\t\tvalue: new Color(0x000000)\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\t\t},\n\t\tmatcap: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.fog, {\n\t\t\t\tmatcap: {\n\t\t\t\t\tvalue: null\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\t\t},\n\t\tpoints: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.points, UniformsLib.fog]),\n\t\t\tvertexShader: ShaderChunk.points_vert,\n\t\t\tfragmentShader: ShaderChunk.points_frag\n\t\t},\n\t\tdashed: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.fog, {\n\t\t\t\tscale: {\n\t\t\t\t\tvalue: 1\n\t\t\t\t},\n\t\t\t\tdashSize: {\n\t\t\t\t\tvalue: 1\n\t\t\t\t},\n\t\t\t\ttotalSize: {\n\t\t\t\t\tvalue: 2\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\t\tfragmentShader: ShaderChunk.linedashed_frag\n\t\t},\n\t\tdepth: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.displacementmap]),\n\t\t\tvertexShader: ShaderChunk.depth_vert,\n\t\t\tfragmentShader: ShaderChunk.depth_frag\n\t\t},\n\t\tnormal: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, {\n\t\t\t\topacity: {\n\t\t\t\t\tvalue: 1.0\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.normal_vert,\n\t\t\tfragmentShader: ShaderChunk.normal_frag\n\t\t},\n\t\tsprite: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.sprite, UniformsLib.fog]),\n\t\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\t\tfragmentShader: ShaderChunk.sprite_frag\n\t\t},\n\t\tbackground: {\n\t\t\tuniforms: {\n\t\t\t\tuvTransform: {\n\t\t\t\t\tvalue: new Matrix3()\n\t\t\t\t},\n\t\t\t\tt2D: {\n\t\t\t\t\tvalue: null\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: ShaderChunk.background_vert,\n\t\t\tfragmentShader: ShaderChunk.background_frag\n\t\t},\n\n\t\t/* -------------------------------------------------------------------------\n\t\t//\tCube map shader\n\t\t ------------------------------------------------------------------------- */\n\t\tcube: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.envmap, {\n\t\t\t\topacity: {\n\t\t\t\t\tvalue: 1.0\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.cube_vert,\n\t\t\tfragmentShader: ShaderChunk.cube_frag\n\t\t},\n\t\tequirect: {\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: {\n\t\t\t\t\tvalue: null\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\t\tfragmentShader: ShaderChunk.equirect_frag\n\t\t},\n\t\tdistanceRGBA: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.common, UniformsLib.displacementmap, {\n\t\t\t\treferencePosition: {\n\t\t\t\t\tvalue: new Vector3()\n\t\t\t\t},\n\t\t\t\tnearDistance: {\n\t\t\t\t\tvalue: 1\n\t\t\t\t},\n\t\t\t\tfarDistance: {\n\t\t\t\t\tvalue: 1000\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\t\t},\n\t\tshadow: {\n\t\t\tuniforms: mergeUniforms([UniformsLib.lights, UniformsLib.fog, {\n\t\t\t\tcolor: {\n\t\t\t\t\tvalue: new Color(0x00000)\n\t\t\t\t},\n\t\t\t\topacity: {\n\t\t\t\t\tvalue: 1.0\n\t\t\t\t}\n\t\t\t}]),\n\t\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\t\tfragmentShader: ShaderChunk.shadow_frag\n\t\t}\n\t};\n\tShaderLib.physical = {\n\t\tuniforms: mergeUniforms([ShaderLib.standard.uniforms, {\n\t\t\tclearcoat: {\n\t\t\t\tvalue: 0\n\t\t\t},\n\t\t\tclearcoatMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tclearcoatRoughness: {\n\t\t\t\tvalue: 0\n\t\t\t},\n\t\t\tclearcoatRoughnessMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tclearcoatNormalScale: {\n\t\t\t\tvalue: new Vector2(1, 1)\n\t\t\t},\n\t\t\tclearcoatNormalMap: {\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\tsheen: {\n\t\t\t\tvalue: new Color(0x000000)\n\t\t\t},\n\t\t\ttransmission: {\n\t\t\t\tvalue: 0\n\t\t\t},\n\t\t\ttransmissionMap: {\n\t\t\t\tvalue: null\n\t\t\t}\n\t\t}]),\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\t};\n\n\tfunction WebGLBackground(renderer, cubemaps, state, objects, premultipliedAlpha) {\n\t\tvar clearColor = new Color(0x000000);\n\t\tvar clearAlpha = 0;\n\t\tvar planeMesh;\n\t\tvar boxMesh;\n\t\tvar currentBackground = null;\n\t\tvar currentBackgroundVersion = 0;\n\t\tvar currentTonemapping = null;\n\n\t\tfunction render(renderList, scene, camera, forceClear) {\n\t\t\tvar background = scene.isScene === true ? scene.background : null;\n\n\t\t\tif (background && background.isTexture) {\n\t\t\t\tbackground = cubemaps.get(background);\n\t\t\t} // Ignore background in AR\n\t\t\t// TODO: Reconsider this.\n\n\n\t\t\tvar xr = renderer.xr;\n\t\t\tvar session = xr.getSession && xr.getSession();\n\n\t\t\tif (session && session.environmentBlendMode === 'additive') {\n\t\t\t\tbackground = null;\n\t\t\t}\n\n\t\t\tif (background === null) {\n\t\t\t\tsetClear(clearColor, clearAlpha);\n\t\t\t} else if (background && background.isColor) {\n\t\t\t\tsetClear(background, 1);\n\t\t\t\tforceClear = true;\n\t\t\t}\n\n\t\t\tif (renderer.autoClear || forceClear) {\n\t\t\t\trenderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil);\n\t\t\t}\n\n\t\t\tif (background && (background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping)) {\n\t\t\t\tif (boxMesh === undefined) {\n\t\t\t\t\tboxMesh = new Mesh(new BoxBufferGeometry(1, 1, 1), new ShaderMaterial({\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms(ShaderLib.cube.uniforms),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t}));\n\t\t\t\t\tboxMesh.geometry.deleteAttribute('normal');\n\t\t\t\t\tboxMesh.geometry.deleteAttribute('uv');\n\n\t\t\t\t\tboxMesh.onBeforeRender = function (renderer, scene, camera) {\n\t\t\t\t\t\tthis.matrixWorld.copyPosition(camera.matrixWorld);\n\t\t\t\t\t}; // enable code injection for non-built-in material\n\n\n\t\t\t\t\tObject.defineProperty(boxMesh.material, 'envMap', {\n\t\t\t\t\t\tget: function get() {\n\t\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tobjects.update(boxMesh);\n\t\t\t\t}\n\n\t\t\t\tif (background.isWebGLCubeRenderTarget) {\n\t\t\t\t\t// TODO Deprecate\n\t\t\t\t\tbackground = background.texture;\n\t\t\t\t}\n\n\t\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\t\tboxMesh.material.uniforms.flipEnvMap.value = background.isCubeTexture && background._needsFlipEnvMap ? -1 : 1;\n\n\t\t\t\tif (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) {\n\t\t\t\t\tboxMesh.material.needsUpdate = true;\n\t\t\t\t\tcurrentBackground = background;\n\t\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\t\t\t\t} // push to the pre-sorted opaque render list\n\n\n\t\t\t\trenderList.unshift(boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null);\n\t\t\t} else if (background && background.isTexture) {\n\t\t\t\tif (planeMesh === undefined) {\n\t\t\t\t\tplaneMesh = new Mesh(new PlaneBufferGeometry(2, 2), new ShaderMaterial({\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms(ShaderLib.background.uniforms),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t}));\n\t\t\t\t\tplaneMesh.geometry.deleteAttribute('normal'); // enable code injection for non-built-in material\n\n\t\t\t\t\tObject.defineProperty(planeMesh.material, 'map', {\n\t\t\t\t\t\tget: function get() {\n\t\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tobjects.update(planeMesh);\n\t\t\t\t}\n\n\t\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\t\tif (background.matrixAutoUpdate === true) {\n\t\t\t\t\tbackground.updateMatrix();\n\t\t\t\t}\n\n\t\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy(background.matrix);\n\n\t\t\t\tif (currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping) {\n\t\t\t\t\tplaneMesh.material.needsUpdate = true;\n\t\t\t\t\tcurrentBackground = background;\n\t\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\t\t\t\t} // push to the pre-sorted opaque render list\n\n\n\t\t\t\trenderList.unshift(planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null);\n\t\t\t}\n\t\t}\n\n\t\tfunction setClear(color, alpha) {\n\t\t\tstate.buffers.color.setClear(color.r, color.g, color.b, alpha, premultipliedAlpha);\n\t\t}\n\n\t\treturn {\n\t\t\tgetClearColor: function getClearColor() {\n\t\t\t\treturn clearColor;\n\t\t\t},\n\t\t\tsetClearColor: function setClearColor(color, alpha) {\n\t\t\t\tif (alpha === void 0) {\n\t\t\t\t\talpha = 1;\n\t\t\t\t}\n\n\t\t\t\tclearColor.set(color);\n\t\t\t\tclearAlpha = alpha;\n\t\t\t\tsetClear(clearColor, clearAlpha);\n\t\t\t},\n\t\t\tgetClearAlpha: function getClearAlpha() {\n\t\t\t\treturn clearAlpha;\n\t\t\t},\n\t\t\tsetClearAlpha: function setClearAlpha(alpha) {\n\t\t\t\tclearAlpha = alpha;\n\t\t\t\tsetClear(clearColor, clearAlpha);\n\t\t\t},\n\t\t\trender: render\n\t\t};\n\t}\n\n\tfunction WebGLBindingStates(gl, extensions, attributes, capabilities) {\n\t\tvar maxVertexAttributes = gl.getParameter(34921);\n\t\tvar extension = capabilities.isWebGL2 ? null : extensions.get('OES_vertex_array_object');\n\t\tvar vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\t\tvar bindingStates = {};\n\t\tvar defaultState = createBindingState(null);\n\t\tvar currentState = defaultState;\n\n\t\tfunction setup(object, material, program, geometry, index) {\n\t\t\tvar updateBuffers = false;\n\n\t\t\tif (vaoAvailable) {\n\t\t\t\tvar state = getBindingState(geometry, program, material);\n\n\t\t\t\tif (currentState !== state) {\n\t\t\t\t\tcurrentState = state;\n\t\t\t\t\tbindVertexArrayObject(currentState.object);\n\t\t\t\t}\n\n\t\t\t\tupdateBuffers = needsUpdate(geometry, index);\n\t\t\t\tif (updateBuffers) saveCache(geometry, index);\n\t\t\t} else {\n\t\t\t\tvar wireframe = material.wireframe === true;\n\n\t\t\t\tif (currentState.geometry !== geometry.id || currentState.program !== program.id || currentState.wireframe !== wireframe) {\n\t\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\t\tcurrentState.program = program.id;\n\t\t\t\t\tcurrentState.wireframe = wireframe;\n\t\t\t\t\tupdateBuffers = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (object.isInstancedMesh === true) {\n\t\t\t\tupdateBuffers = true;\n\t\t\t}\n\n\t\t\tif (index !== null) {\n\t\t\t\tattributes.update(index, 34963);\n\t\t\t}\n\n\t\t\tif (updateBuffers) {\n\t\t\t\tsetupVertexAttributes(object, material, program, geometry);\n\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tgl.bindBuffer(34963, attributes.get(index).buffer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction createVertexArrayObject() {\n\t\t\tif (capabilities.isWebGL2) return gl.createVertexArray();\n\t\t\treturn extension.createVertexArrayOES();\n\t\t}\n\n\t\tfunction bindVertexArrayObject(vao) {\n\t\t\tif (capabilities.isWebGL2) return gl.bindVertexArray(vao);\n\t\t\treturn extension.bindVertexArrayOES(vao);\n\t\t}\n\n\t\tfunction deleteVertexArrayObject(vao) {\n\t\t\tif (capabilities.isWebGL2) return gl.deleteVertexArray(vao);\n\t\t\treturn extension.deleteVertexArrayOES(vao);\n\t\t}\n\n\t\tfunction getBindingState(geometry, program, material) {\n\t\t\tvar wireframe = material.wireframe === true;\n\t\t\tvar programMap = bindingStates[geometry.id];\n\n\t\t\tif (programMap === undefined) {\n\t\t\t\tprogramMap = {};\n\t\t\t\tbindingStates[geometry.id] = programMap;\n\t\t\t}\n\n\t\t\tvar stateMap = programMap[program.id];\n\n\t\t\tif (stateMap === undefined) {\n\t\t\t\tstateMap = {};\n\t\t\t\tprogramMap[program.id] = stateMap;\n\t\t\t}\n\n\t\t\tvar state = stateMap[wireframe];\n\n\t\t\tif (state === undefined) {\n\t\t\t\tstate = createBindingState(createVertexArrayObject());\n\t\t\t\tstateMap[wireframe] = state;\n\t\t\t}\n\n\t\t\treturn state;\n\t\t}\n\n\t\tfunction createBindingState(vao) {\n\t\t\tvar newAttributes = [];\n\t\t\tvar enabledAttributes = [];\n\t\t\tvar attributeDivisors = [];\n\n\t\t\tfor (var i = 0; i < maxVertexAttributes; i++) {\n\t\t\t\tnewAttributes[i] = 0;\n\t\t\t\tenabledAttributes[i] = 0;\n\t\t\t\tattributeDivisors[i] = 0;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\t\tgeometry: null,\n\t\t\t\tprogram: null,\n\t\t\t\twireframe: false,\n\t\t\t\tnewAttributes: newAttributes,\n\t\t\t\tenabledAttributes: enabledAttributes,\n\t\t\t\tattributeDivisors: attributeDivisors,\n\t\t\t\tobject: vao,\n\t\t\t\tattributes: {},\n\t\t\t\tindex: null\n\t\t\t};\n\t\t}\n\n\t\tfunction needsUpdate(geometry, index) {\n\t\t\tvar cachedAttributes = currentState.attributes;\n\t\t\tvar geometryAttributes = geometry.attributes;\n\t\t\tvar attributesNum = 0;\n\n\t\t\tfor (var key in geometryAttributes) {\n\t\t\t\tvar cachedAttribute = cachedAttributes[key];\n\t\t\t\tvar geometryAttribute = geometryAttributes[key];\n\t\t\t\tif (cachedAttribute === undefined) return true;\n\t\t\t\tif (cachedAttribute.attribute !== geometryAttribute) return true;\n\t\t\t\tif (cachedAttribute.data !== geometryAttribute.data) return true;\n\t\t\t\tattributesNum++;\n\t\t\t}\n\n\t\t\tif (currentState.attributesNum !== attributesNum) return true;\n\t\t\tif (currentState.index !== index) return true;\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction saveCache(geometry, index) {\n\t\t\tvar cache = {};\n\t\t\tvar attributes = geometry.attributes;\n\t\t\tvar attributesNum = 0;\n\n\t\t\tfor (var key in attributes) {\n\t\t\t\tvar attribute = attributes[key];\n\t\t\t\tvar data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif (attribute.data) {\n\t\t\t\t\tdata.data = attribute.data;\n\t\t\t\t}\n\n\t\t\t\tcache[key] = data;\n\t\t\t\tattributesNum++;\n\t\t\t}\n\n\t\t\tcurrentState.attributes = cache;\n\t\t\tcurrentState.attributesNum = attributesNum;\n\t\t\tcurrentState.index = index;\n\t\t}\n\n\t\tfunction initAttributes() {\n\t\t\tvar newAttributes = currentState.newAttributes;\n\n\t\t\tfor (var i = 0, il = newAttributes.length; i < il; i++) {\n\t\t\t\tnewAttributes[i] = 0;\n\t\t\t}\n\t\t}\n\n\t\tfunction enableAttribute(attribute) {\n\t\t\tenableAttributeAndDivisor(attribute, 0);\n\t\t}\n\n\t\tfunction enableAttributeAndDivisor(attribute, meshPerAttribute) {\n\t\t\tvar newAttributes = currentState.newAttributes;\n\t\t\tvar enabledAttributes = currentState.enabledAttributes;\n\t\t\tvar attributeDivisors = currentState.attributeDivisors;\n\t\t\tnewAttributes[attribute] = 1;\n\n\t\t\tif (enabledAttributes[attribute] === 0) {\n\t\t\t\tgl.enableVertexAttribArray(attribute);\n\t\t\t\tenabledAttributes[attribute] = 1;\n\t\t\t}\n\n\t\t\tif (attributeDivisors[attribute] !== meshPerAttribute) {\n\t\t\t\tvar _extension = capabilities.isWebGL2 ? gl : extensions.get('ANGLE_instanced_arrays');\n\n\t\t\t\t_extension[capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE'](attribute, meshPerAttribute);\n\n\t\t\t\tattributeDivisors[attribute] = meshPerAttribute;\n\t\t\t}\n\t\t}\n\n\t\tfunction disableUnusedAttributes() {\n\t\t\tvar newAttributes = currentState.newAttributes;\n\t\t\tvar enabledAttributes = currentState.enabledAttributes;\n\n\t\t\tfor (var i = 0, il = enabledAttributes.length; i < il; i++) {\n\t\t\t\tif (enabledAttributes[i] !== newAttributes[i]) {\n\t\t\t\t\tgl.disableVertexAttribArray(i);\n\t\t\t\t\tenabledAttributes[i] = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction vertexAttribPointer(index, size, type, normalized, stride, offset) {\n\t\t\tif (capabilities.isWebGL2 === true && (type === 5124 || type === 5125)) {\n\t\t\t\tgl.vertexAttribIPointer(index, size, type, stride, offset);\n\t\t\t} else {\n\t\t\t\tgl.vertexAttribPointer(index, size, type, normalized, stride, offset);\n\t\t\t}\n\t\t}\n\n\t\tfunction setupVertexAttributes(object, material, program, geometry) {\n\t\t\tif (capabilities.isWebGL2 === false && (object.isInstancedMesh || geometry.isInstancedBufferGeometry)) {\n\t\t\t\tif (extensions.get('ANGLE_instanced_arrays') === null) return;\n\t\t\t}\n\n\t\t\tinitAttributes();\n\t\t\tvar geometryAttributes = geometry.attributes;\n\t\t\tvar programAttributes = program.getAttributes();\n\t\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\t\tfor (var name in programAttributes) {\n\t\t\t\tvar programAttribute = programAttributes[name];\n\n\t\t\t\tif (programAttribute >= 0) {\n\t\t\t\t\tvar geometryAttribute = geometryAttributes[name];\n\n\t\t\t\t\tif (geometryAttribute !== undefined) {\n\t\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\t\t\t\t\t\tvar attribute = attributes.get(geometryAttribute); // TODO Attribute may not be available on context restore\n\n\t\t\t\t\t\tif (attribute === undefined) continue;\n\t\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t\tif (geometryAttribute.isInterleavedBufferAttribute) {\n\t\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\t\tif (data && data.isInstancedInterleavedBuffer) {\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor(programAttribute, data.meshPerAttribute);\n\n\t\t\t\t\t\t\t\tif (geometry._maxInstanceCount === undefined) {\n\t\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tenableAttribute(programAttribute);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgl.bindBuffer(34962, buffer);\n\t\t\t\t\t\t\tvertexAttribPointer(programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (geometryAttribute.isInstancedBufferAttribute) {\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor(programAttribute, geometryAttribute.meshPerAttribute);\n\n\t\t\t\t\t\t\t\tif (geometry._maxInstanceCount === undefined) {\n\t\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tenableAttribute(programAttribute);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgl.bindBuffer(34962, buffer);\n\t\t\t\t\t\t\tvertexAttribPointer(programAttribute, size, type, normalized, 0, 0);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (name === 'instanceMatrix') {\n\t\t\t\t\t\tvar _attribute = attributes.get(object.instanceMatrix); // TODO Attribute may not be available on context restore\n\n\n\t\t\t\t\t\tif (_attribute === undefined) continue;\n\t\t\t\t\t\tvar _buffer = _attribute.buffer;\n\t\t\t\t\t\tvar _type = _attribute.type;\n\t\t\t\t\t\tenableAttributeAndDivisor(programAttribute + 0, 1);\n\t\t\t\t\t\tenableAttributeAndDivisor(programAttribute + 1, 1);\n\t\t\t\t\t\tenableAttributeAndDivisor(programAttribute + 2, 1);\n\t\t\t\t\t\tenableAttributeAndDivisor(programAttribute + 3, 1);\n\t\t\t\t\t\tgl.bindBuffer(34962, _buffer);\n\t\t\t\t\t\tgl.vertexAttribPointer(programAttribute + 0, 4, _type, false, 64, 0);\n\t\t\t\t\t\tgl.vertexAttribPointer(programAttribute + 1, 4, _type, false, 64, 16);\n\t\t\t\t\t\tgl.vertexAttribPointer(programAttribute + 2, 4, _type, false, 64, 32);\n\t\t\t\t\t\tgl.vertexAttribPointer(programAttribute + 3, 4, _type, false, 64, 48);\n\t\t\t\t\t} else if (name === 'instanceColor') {\n\t\t\t\t\t\tvar _attribute2 = attributes.get(object.instanceColor); // TODO Attribute may not be available on context restore\n\n\n\t\t\t\t\t\tif (_attribute2 === undefined) continue;\n\t\t\t\t\t\tvar _buffer2 = _attribute2.buffer;\n\t\t\t\t\t\tvar _type2 = _attribute2.type;\n\t\t\t\t\t\tenableAttributeAndDivisor(programAttribute, 1);\n\t\t\t\t\t\tgl.bindBuffer(34962, _buffer2);\n\t\t\t\t\t\tgl.vertexAttribPointer(programAttribute, 3, _type2, false, 12, 0);\n\t\t\t\t\t} else if (materialDefaultAttributeValues !== undefined) {\n\t\t\t\t\t\tvar value = materialDefaultAttributeValues[name];\n\n\t\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\t\tswitch (value.length) {\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\tgl.vertexAttrib2fv(programAttribute, value);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tgl.vertexAttrib3fv(programAttribute, value);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t\tgl.vertexAttrib4fv(programAttribute, value);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tgl.vertexAttrib1fv(programAttribute, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdisableUnusedAttributes();\n\t\t}\n\n\t\tfunction dispose() {\n\t\t\treset();\n\n\t\t\tfor (var geometryId in bindingStates) {\n\t\t\t\tvar programMap = bindingStates[geometryId];\n\n\t\t\t\tfor (var programId in programMap) {\n\t\t\t\t\tvar stateMap = programMap[programId];\n\n\t\t\t\t\tfor (var wireframe in stateMap) {\n\t\t\t\t\t\tdeleteVertexArrayObject(stateMap[wireframe].object);\n\t\t\t\t\t\tdelete stateMap[wireframe];\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete programMap[programId];\n\t\t\t\t}\n\n\t\t\t\tdelete bindingStates[geometryId];\n\t\t\t}\n\t\t}\n\n\t\tfunction releaseStatesOfGeometry(geometry) {\n\t\t\tif (bindingStates[geometry.id] === undefined) return;\n\t\t\tvar programMap = bindingStates[geometry.id];\n\n\t\t\tfor (var programId in programMap) {\n\t\t\t\tvar stateMap = programMap[programId];\n\n\t\t\t\tfor (var wireframe in stateMap) {\n\t\t\t\t\tdeleteVertexArrayObject(stateMap[wireframe].object);\n\t\t\t\t\tdelete stateMap[wireframe];\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[programId];\n\t\t\t}\n\n\t\t\tdelete bindingStates[geometry.id];\n\t\t}\n\n\t\tfunction releaseStatesOfProgram(program) {\n\t\t\tfor (var geometryId in bindingStates) {\n\t\t\t\tvar programMap = bindingStates[geometryId];\n\t\t\t\tif (programMap[program.id] === undefined) continue;\n\t\t\t\tvar stateMap = programMap[program.id];\n\n\t\t\t\tfor (var wireframe in stateMap) {\n\t\t\t\t\tdeleteVertexArrayObject(stateMap[wireframe].object);\n\t\t\t\t\tdelete stateMap[wireframe];\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[program.id];\n\t\t\t}\n\t\t}\n\n\t\tfunction reset() {\n\t\t\tresetDefaultState();\n\t\t\tif (currentState === defaultState) return;\n\t\t\tcurrentState = defaultState;\n\t\t\tbindVertexArrayObject(currentState.object);\n\t\t} // for backward-compatilibity\n\n\n\t\tfunction resetDefaultState() {\n\t\t\tdefaultState.geometry = null;\n\t\t\tdefaultState.program = null;\n\t\t\tdefaultState.wireframe = false;\n\t\t}\n\n\t\treturn {\n\t\t\tsetup: setup,\n\t\t\treset: reset,\n\t\t\tresetDefaultState: resetDefaultState,\n\t\t\tdispose: dispose,\n\t\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\t\t\tinitAttributes: initAttributes,\n\t\t\tenableAttribute: enableAttribute,\n\t\t\tdisableUnusedAttributes: disableUnusedAttributes\n\t\t};\n\t}\n\n\tfunction WebGLBufferRenderer(gl, extensions, info, capabilities) {\n\t\tvar isWebGL2 = capabilities.isWebGL2;\n\t\tvar mode;\n\n\t\tfunction setMode(value) {\n\t\t\tmode = value;\n\t\t}\n\n\t\tfunction render(start, count) {\n\t\t\tgl.drawArrays(mode, start, count);\n\t\t\tinfo.update(count, mode, 1);\n\t\t}\n\n\t\tfunction renderInstances(start, count, primcount) {\n\t\t\tif (primcount === 0) return;\n\t\t\tvar extension, methodName;\n\n\t\t\tif (isWebGL2) {\n\t\t\t\textension = gl;\n\t\t\t\tmethodName = 'drawArraysInstanced';\n\t\t\t} else {\n\t\t\t\textension = extensions.get('ANGLE_instanced_arrays');\n\t\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\t\tif (extension === null) {\n\t\t\t\t\tconsole.error('THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\textension[methodName](mode, start, count, primcount);\n\t\t\tinfo.update(count, mode, primcount);\n\t\t} //\n\n\n\t\tthis.setMode = setMode;\n\t\tthis.render = render;\n\t\tthis.renderInstances = renderInstances;\n\t}\n\n\tfunction WebGLCapabilities(gl, extensions, parameters) {\n\t\tvar maxAnisotropy;\n\n\t\tfunction getMaxAnisotropy() {\n\t\t\tif (maxAnisotropy !== undefined) return maxAnisotropy;\n\t\t\tvar extension = extensions.get('EXT_texture_filter_anisotropic');\n\n\t\t\tif (extension !== null) {\n\t\t\t\tmaxAnisotropy = gl.getParameter(extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\n\t\t\t} else {\n\t\t\t\tmaxAnisotropy = 0;\n\t\t\t}\n\n\t\t\treturn maxAnisotropy;\n\t\t}\n\n\t\tfunction getMaxPrecision(precision) {\n\t\t\tif (precision === 'highp') {\n\t\t\t\tif (gl.getShaderPrecisionFormat(35633, 36338).precision > 0 && gl.getShaderPrecisionFormat(35632, 36338).precision > 0) {\n\t\t\t\t\treturn 'highp';\n\t\t\t\t}\n\n\t\t\t\tprecision = 'mediump';\n\t\t\t}\n\n\t\t\tif (precision === 'mediump') {\n\t\t\t\tif (gl.getShaderPrecisionFormat(35633, 36337).precision > 0 && gl.getShaderPrecisionFormat(35632, 36337).precision > 0) {\n\t\t\t\t\treturn 'mediump';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 'lowp';\n\t\t}\n\t\t/* eslint-disable no-undef */\n\n\n\t\tvar isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext || typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext;\n\t\t/* eslint-enable no-undef */\n\n\t\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\t\tvar maxPrecision = getMaxPrecision(precision);\n\n\t\tif (maxPrecision !== precision) {\n\t\t\tconsole.warn('THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.');\n\t\t\tprecision = maxPrecision;\n\t\t}\n\n\t\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\t\tvar maxTextures = gl.getParameter(34930);\n\t\tvar maxVertexTextures = gl.getParameter(35660);\n\t\tvar maxTextureSize = gl.getParameter(3379);\n\t\tvar maxCubemapSize = gl.getParameter(34076);\n\t\tvar maxAttributes = gl.getParameter(34921);\n\t\tvar maxVertexUniforms = gl.getParameter(36347);\n\t\tvar maxVaryings = gl.getParameter(36348);\n\t\tvar maxFragmentUniforms = gl.getParameter(36349);\n\t\tvar vertexTextures = maxVertexTextures > 0;\n\t\tvar floatFragmentTextures = isWebGL2 || !!extensions.get('OES_texture_float');\n\t\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\t\tvar maxSamples = isWebGL2 ? gl.getParameter(36183) : 0;\n\t\treturn {\n\t\t\tisWebGL2: isWebGL2,\n\t\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\t\tgetMaxPrecision: getMaxPrecision,\n\t\t\tprecision: precision,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\t\t\tmaxTextures: maxTextures,\n\t\t\tmaxVertexTextures: maxVertexTextures,\n\t\t\tmaxTextureSize: maxTextureSize,\n\t\t\tmaxCubemapSize: maxCubemapSize,\n\t\t\tmaxAttributes: maxAttributes,\n\t\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\t\tmaxVaryings: maxVaryings,\n\t\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\t\t\tvertexTextures: vertexTextures,\n\t\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\t\tfloatVertexTextures: floatVertexTextures,\n\t\t\tmaxSamples: maxSamples\n\t\t};\n\t}\n\n\tfunction WebGLClipping(properties) {\n\t\tvar scope = this;\n\t\tvar globalState = null,\n\t\t\t\tnumGlobalPlanes = 0,\n\t\t\t\tlocalClippingEnabled = false,\n\t\t\t\trenderingShadows = false;\n\t\tvar plane = new Plane(),\n\t\t\t\tviewNormalMatrix = new Matrix3(),\n\t\t\t\tuniform = {\n\t\t\tvalue: null,\n\t\t\tneedsUpdate: false\n\t\t};\n\t\tthis.uniform = uniform;\n\t\tthis.numPlanes = 0;\n\t\tthis.numIntersection = 0;\n\n\t\tthis.init = function (planes, enableLocalClipping, camera) {\n\t\t\tvar enabled = planes.length !== 0 || enableLocalClipping || // enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 || localClippingEnabled;\n\t\t\tlocalClippingEnabled = enableLocalClipping;\n\t\t\tglobalState = projectPlanes(planes, camera, 0);\n\t\t\tnumGlobalPlanes = planes.length;\n\t\t\treturn enabled;\n\t\t};\n\n\t\tthis.beginShadows = function () {\n\t\t\trenderingShadows = true;\n\t\t\tprojectPlanes(null);\n\t\t};\n\n\t\tthis.endShadows = function () {\n\t\t\trenderingShadows = false;\n\t\t\tresetGlobalState();\n\t\t};\n\n\t\tthis.setState = function (material, camera, useCache) {\n\t\t\tvar planes = material.clippingPlanes,\n\t\t\t\t\tclipIntersection = material.clipIntersection,\n\t\t\t\t\tclipShadows = material.clipShadows;\n\t\t\tvar materialProperties = properties.get(material);\n\n\t\t\tif (!localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && !clipShadows) {\n\t\t\t\t// there's no local clipping\n\t\t\t\tif (renderingShadows) {\n\t\t\t\t\t// there's no global clipping\n\t\t\t\t\tprojectPlanes(null);\n\t\t\t\t} else {\n\t\t\t\t\tresetGlobalState();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\t\t\tlGlobal = nGlobal * 4;\n\t\t\t\tvar dstArray = materialProperties.clippingState || null;\n\t\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\t\tdstArray = projectPlanes(planes, camera, lGlobal, useCache);\n\n\t\t\t\tfor (var i = 0; i !== lGlobal; ++i) {\n\t\t\t\t\tdstArray[i] = globalState[i];\n\t\t\t\t}\n\n\t\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\t\tthis.numPlanes += nGlobal;\n\t\t\t}\n\t\t};\n\n\t\tfunction resetGlobalState() {\n\t\t\tif (uniform.value !== globalState) {\n\t\t\t\tuniform.value = globalState;\n\t\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\t\t\t}\n\n\t\t\tscope.numPlanes = numGlobalPlanes;\n\t\t\tscope.numIntersection = 0;\n\t\t}\n\n\t\tfunction projectPlanes(planes, camera, dstOffset, skipTransform) {\n\t\t\tvar nPlanes = planes !== null ? planes.length : 0;\n\t\t\tvar dstArray = null;\n\n\t\t\tif (nPlanes !== 0) {\n\t\t\t\tdstArray = uniform.value;\n\n\t\t\t\tif (skipTransform !== true || dstArray === null) {\n\t\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\t\t\t\t\tviewNormalMatrix.getNormalMatrix(viewMatrix);\n\n\t\t\t\t\tif (dstArray === null || dstArray.length < flatSize) {\n\t\t\t\t\t\tdstArray = new Float32Array(flatSize);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var i = 0, i4 = dstOffset; i !== nPlanes; ++i, i4 += 4) {\n\t\t\t\t\t\tplane.copy(planes[i]).applyMatrix4(viewMatrix, viewNormalMatrix);\n\t\t\t\t\t\tplane.normal.toArray(dstArray, i4);\n\t\t\t\t\t\tdstArray[i4 + 3] = plane.constant;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tuniform.value = dstArray;\n\t\t\t\tuniform.needsUpdate = true;\n\t\t\t}\n\n\t\t\tscope.numPlanes = nPlanes;\n\t\t\tscope.numIntersection = 0;\n\t\t\treturn dstArray;\n\t\t}\n\t}\n\n\tfunction WebGLCubeMaps(renderer) {\n\t\tvar cubemaps = new WeakMap();\n\n\t\tfunction mapTextureMapping(texture, mapping) {\n\t\t\tif (mapping === EquirectangularReflectionMapping) {\n\t\t\t\ttexture.mapping = CubeReflectionMapping;\n\t\t\t} else if (mapping === EquirectangularRefractionMapping) {\n\t\t\t\ttexture.mapping = CubeRefractionMapping;\n\t\t\t}\n\n\t\t\treturn texture;\n\t\t}\n\n\t\tfunction get(texture) {\n\t\t\tif (texture && texture.isTexture) {\n\t\t\t\tvar mapping = texture.mapping;\n\n\t\t\t\tif (mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping) {\n\t\t\t\t\tif (cubemaps.has(texture)) {\n\t\t\t\t\t\tvar cubemap = cubemaps.get(texture).texture;\n\t\t\t\t\t\treturn mapTextureMapping(cubemap, texture.mapping);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar image = texture.image;\n\n\t\t\t\t\t\tif (image && image.height > 0) {\n\t\t\t\t\t\t\tvar currentRenderList = renderer.getRenderList();\n\t\t\t\t\t\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\t\t\t\t\t\t\tvar renderTarget = new WebGLCubeRenderTarget(image.height / 2);\n\t\t\t\t\t\t\trenderTarget.fromEquirectangularTexture(renderer, texture);\n\t\t\t\t\t\t\tcubemaps.set(texture, renderTarget);\n\t\t\t\t\t\t\trenderer.setRenderTarget(currentRenderTarget);\n\t\t\t\t\t\t\trenderer.setRenderList(currentRenderList);\n\t\t\t\t\t\t\ttexture.addEventListener('dispose', onTextureDispose);\n\t\t\t\t\t\t\treturn mapTextureMapping(renderTarget.texture, texture.mapping);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn texture;\n\t\t}\n\n\t\tfunction onTextureDispose(event) {\n\t\t\tvar texture = event.target;\n\t\t\ttexture.removeEventListener('dispose', onTextureDispose);\n\t\t\tvar cubemap = cubemaps.get(texture);\n\n\t\t\tif (cubemap !== undefined) {\n\t\t\t\tcubemaps.delete(texture);\n\t\t\t\tcubemap.dispose();\n\t\t\t}\n\t\t}\n\n\t\tfunction dispose() {\n\t\t\tcubemaps = new WeakMap();\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\t}\n\n\tfunction WebGLExtensions(gl) {\n\t\tvar extensions = {};\n\t\treturn {\n\t\t\thas: function has(name) {\n\t\t\t\tif (extensions[name] !== undefined) {\n\t\t\t\t\treturn extensions[name] !== null;\n\t\t\t\t}\n\n\t\t\t\tvar extension;\n\n\t\t\t\tswitch (name) {\n\t\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\t\textension = gl.getExtension('WEBGL_depth_texture') || gl.getExtension('MOZ_WEBGL_depth_texture') || gl.getExtension('WEBKIT_WEBGL_depth_texture');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\t\textension = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('MOZ_EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\t\textension = gl.getExtension('WEBGL_compressed_texture_s3tc') || gl.getExtension('MOZ_WEBGL_compressed_texture_s3tc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\t\textension = gl.getExtension('WEBGL_compressed_texture_pvrtc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc');\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\textension = gl.getExtension(name);\n\t\t\t\t}\n\n\t\t\t\textensions[name] = extension;\n\t\t\t\treturn extension !== null;\n\t\t\t},\n\t\t\tget: function get(name) {\n\t\t\t\tif (!this.has(name)) {\n\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: ' + name + ' extension not supported.');\n\t\t\t\t}\n\n\t\t\t\treturn extensions[name];\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction WebGLGeometries(gl, attributes, info, bindingStates) {\n\t\tvar geometries = new WeakMap();\n\t\tvar wireframeAttributes = new WeakMap();\n\n\t\tfunction onGeometryDispose(event) {\n\t\t\tvar geometry = event.target;\n\t\t\tvar buffergeometry = geometries.get(geometry);\n\n\t\t\tif (buffergeometry.index !== null) {\n\t\t\t\tattributes.remove(buffergeometry.index);\n\t\t\t}\n\n\t\t\tfor (var name in buffergeometry.attributes) {\n\t\t\t\tattributes.remove(buffergeometry.attributes[name]);\n\t\t\t}\n\n\t\t\tgeometry.removeEventListener('dispose', onGeometryDispose);\n\t\t\tgeometries.delete(geometry);\n\t\t\tvar attribute = wireframeAttributes.get(buffergeometry);\n\n\t\t\tif (attribute) {\n\t\t\t\tattributes.remove(attribute);\n\t\t\t\twireframeAttributes.delete(buffergeometry);\n\t\t\t}\n\n\t\t\tbindingStates.releaseStatesOfGeometry(buffergeometry);\n\n\t\t\tif (geometry.isInstancedBufferGeometry === true) {\n\t\t\t\tdelete geometry._maxInstanceCount;\n\t\t\t} //\n\n\n\t\t\tinfo.memory.geometries--;\n\t\t}\n\n\t\tfunction get(object, geometry) {\n\t\t\tvar buffergeometry = geometries.get(geometry);\n\t\t\tif (buffergeometry) return buffergeometry;\n\t\t\tgeometry.addEventListener('dispose', onGeometryDispose);\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\tbuffergeometry = geometry;\n\t\t\t} else if (geometry.isGeometry) {\n\t\t\t\tif (geometry._bufferGeometry === undefined) {\n\t\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject(object);\n\t\t\t\t}\n\n\t\t\t\tbuffergeometry = geometry._bufferGeometry;\n\t\t\t}\n\n\t\t\tgeometries.set(geometry, buffergeometry);\n\t\t\tinfo.memory.geometries++;\n\t\t\treturn buffergeometry;\n\t\t}\n\n\t\tfunction update(geometry) {\n\t\t\tvar geometryAttributes = geometry.attributes; // Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\t\tfor (var name in geometryAttributes) {\n\t\t\t\tattributes.update(geometryAttributes[name], 34962);\n\t\t\t} // morph targets\n\n\n\t\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\t\tfor (var _name in morphAttributes) {\n\t\t\t\tvar array = morphAttributes[_name];\n\n\t\t\t\tfor (var i = 0, l = array.length; i < l; i++) {\n\t\t\t\t\tattributes.update(array[i], 34962);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction updateWireframeAttribute(geometry) {\n\t\t\tvar indices = [];\n\t\t\tvar geometryIndex = geometry.index;\n\t\t\tvar geometryPosition = geometry.attributes.position;\n\t\t\tvar version = 0;\n\n\t\t\tif (geometryIndex !== null) {\n\t\t\t\tvar array = geometryIndex.array;\n\t\t\t\tversion = geometryIndex.version;\n\n\t\t\t\tfor (var i = 0, l = array.length; i < l; i += 3) {\n\t\t\t\t\tvar a = array[i + 0];\n\t\t\t\t\tvar b = array[i + 1];\n\t\t\t\t\tvar c = array[i + 2];\n\t\t\t\t\tindices.push(a, b, b, c, c, a);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar _array = geometryPosition.array;\n\t\t\t\tversion = geometryPosition.version;\n\n\t\t\t\tfor (var _i = 0, _l = _array.length / 3 - 1; _i < _l; _i += 3) {\n\t\t\t\t\tvar _a = _i + 0;\n\n\t\t\t\t\tvar _b = _i + 1;\n\n\t\t\t\t\tvar _c = _i + 2;\n\n\t\t\t\t\tindices.push(_a, _b, _b, _c, _c, _a);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar attribute = new (arrayMax(indices) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute)(indices, 1);\n\t\t\tattribute.version = version; // Updating index buffer in VAO now. See WebGLBindingStates\n\t\t\t//\n\n\t\t\tvar previousAttribute = wireframeAttributes.get(geometry);\n\t\t\tif (previousAttribute) attributes.remove(previousAttribute); //\n\n\t\t\twireframeAttributes.set(geometry, attribute);\n\t\t}\n\n\t\tfunction getWireframeAttribute(geometry) {\n\t\t\tvar currentAttribute = wireframeAttributes.get(geometry);\n\n\t\t\tif (currentAttribute) {\n\t\t\t\tvar geometryIndex = geometry.index;\n\n\t\t\t\tif (geometryIndex !== null) {\n\t\t\t\t\t// if the attribute is obsolete, create a new one\n\t\t\t\t\tif (currentAttribute.version < geometryIndex.version) {\n\t\t\t\t\t\tupdateWireframeAttribute(geometry);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tupdateWireframeAttribute(geometry);\n\t\t\t}\n\n\t\t\treturn wireframeAttributes.get(geometry);\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tupdate: update,\n\t\t\tgetWireframeAttribute: getWireframeAttribute\n\t\t};\n\t}\n\n\tfunction WebGLIndexedBufferRenderer(gl, extensions, info, capabilities) {\n\t\tvar isWebGL2 = capabilities.isWebGL2;\n\t\tvar mode;\n\n\t\tfunction setMode(value) {\n\t\t\tmode = value;\n\t\t}\n\n\t\tvar type, bytesPerElement;\n\n\t\tfunction setIndex(value) {\n\t\t\ttype = value.type;\n\t\t\tbytesPerElement = value.bytesPerElement;\n\t\t}\n\n\t\tfunction render(start, count) {\n\t\t\tgl.drawElements(mode, count, type, start * bytesPerElement);\n\t\t\tinfo.update(count, mode, 1);\n\t\t}\n\n\t\tfunction renderInstances(start, count, primcount) {\n\t\t\tif (primcount === 0) return;\n\t\t\tvar extension, methodName;\n\n\t\t\tif (isWebGL2) {\n\t\t\t\textension = gl;\n\t\t\t\tmethodName = 'drawElementsInstanced';\n\t\t\t} else {\n\t\t\t\textension = extensions.get('ANGLE_instanced_arrays');\n\t\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\t\tif (extension === null) {\n\t\t\t\t\tconsole.error('THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\textension[methodName](mode, count, type, start * bytesPerElement, primcount);\n\t\t\tinfo.update(count, mode, primcount);\n\t\t} //\n\n\n\t\tthis.setMode = setMode;\n\t\tthis.setIndex = setIndex;\n\t\tthis.render = render;\n\t\tthis.renderInstances = renderInstances;\n\t}\n\n\tfunction WebGLInfo(gl) {\n\t\tvar memory = {\n\t\t\tgeometries: 0,\n\t\t\ttextures: 0\n\t\t};\n\t\tvar render = {\n\t\t\tframe: 0,\n\t\t\tcalls: 0,\n\t\t\ttriangles: 0,\n\t\t\tpoints: 0,\n\t\t\tlines: 0\n\t\t};\n\n\t\tfunction update(count, mode, instanceCount) {\n\t\t\trender.calls++;\n\n\t\t\tswitch (mode) {\n\t\t\t\tcase 4:\n\t\t\t\t\trender.triangles += instanceCount * (count / 3);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\trender.lines += instanceCount * (count / 2);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 3:\n\t\t\t\t\trender.lines += instanceCount * (count - 1);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0:\n\t\t\t\t\trender.points += instanceCount * count;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error('THREE.WebGLInfo: Unknown draw mode:', mode);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction reset() {\n\t\t\trender.frame++;\n\t\t\trender.calls = 0;\n\t\t\trender.triangles = 0;\n\t\t\trender.points = 0;\n\t\t\trender.lines = 0;\n\t\t}\n\n\t\treturn {\n\t\t\tmemory: memory,\n\t\t\trender: render,\n\t\t\tprograms: null,\n\t\t\tautoReset: true,\n\t\t\treset: reset,\n\t\t\tupdate: update\n\t\t};\n\t}\n\n\tfunction numericalSort(a, b) {\n\t\treturn a[0] - b[0];\n\t}\n\n\tfunction absNumericalSort(a, b) {\n\t\treturn Math.abs(b[1]) - Math.abs(a[1]);\n\t}\n\n\tfunction WebGLMorphtargets(gl) {\n\t\tvar influencesList = {};\n\t\tvar morphInfluences = new Float32Array(8);\n\t\tvar workInfluences = [];\n\n\t\tfor (var i = 0; i < 8; i++) {\n\t\t\tworkInfluences[i] = [i, 0];\n\t\t}\n\n\t\tfunction update(object, geometry, material, program) {\n\t\t\tvar objectInfluences = object.morphTargetInfluences; // When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\t\tvar length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\t\t\tvar influences = influencesList[geometry.id];\n\n\t\t\tif (influences === undefined) {\n\t\t\t\t// initialise list\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor (var _i = 0; _i < length; _i++) {\n\t\t\t\t\tinfluences[_i] = [_i, 0];\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[geometry.id] = influences;\n\t\t\t} // Collect influences\n\n\n\t\t\tfor (var _i2 = 0; _i2 < length; _i2++) {\n\t\t\t\tvar influence = influences[_i2];\n\t\t\t\tinfluence[0] = _i2;\n\t\t\t\tinfluence[1] = objectInfluences[_i2];\n\t\t\t}\n\n\t\t\tinfluences.sort(absNumericalSort);\n\n\t\t\tfor (var _i3 = 0; _i3 < 8; _i3++) {\n\t\t\t\tif (_i3 < length && influences[_i3][1]) {\n\t\t\t\t\tworkInfluences[_i3][0] = influences[_i3][0];\n\t\t\t\t\tworkInfluences[_i3][1] = influences[_i3][1];\n\t\t\t\t} else {\n\t\t\t\t\tworkInfluences[_i3][0] = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tworkInfluences[_i3][1] = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tworkInfluences.sort(numericalSort);\n\t\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\t\t\tvar morphInfluencesSum = 0;\n\n\t\t\tfor (var _i4 = 0; _i4 < 8; _i4++) {\n\t\t\t\tvar _influence = workInfluences[_i4];\n\t\t\t\tvar index = _influence[0];\n\t\t\t\tvar value = _influence[1];\n\n\t\t\t\tif (index !== Number.MAX_SAFE_INTEGER && value) {\n\t\t\t\t\tif (morphTargets && geometry.getAttribute('morphTarget' + _i4) !== morphTargets[index]) {\n\t\t\t\t\t\tgeometry.setAttribute('morphTarget' + _i4, morphTargets[index]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (morphNormals && geometry.getAttribute('morphNormal' + _i4) !== morphNormals[index]) {\n\t\t\t\t\t\tgeometry.setAttribute('morphNormal' + _i4, morphNormals[index]);\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[_i4] = value;\n\t\t\t\t\tmorphInfluencesSum += value;\n\t\t\t\t} else {\n\t\t\t\t\tif (morphTargets && geometry.hasAttribute('morphTarget' + _i4) === true) {\n\t\t\t\t\t\tgeometry.deleteAttribute('morphTarget' + _i4);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (morphNormals && geometry.hasAttribute('morphNormal' + _i4) === true) {\n\t\t\t\t\t\tgeometry.deleteAttribute('morphNormal' + _i4);\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[_i4] = 0;\n\t\t\t\t}\n\t\t\t} // GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\n\n\t\t\tvar morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\t\t\tprogram.getUniforms().setValue(gl, 'morphTargetBaseInfluence', morphBaseInfluence);\n\t\t\tprogram.getUniforms().setValue(gl, 'morphTargetInfluences', morphInfluences);\n\t\t}\n\n\t\treturn {\n\t\t\tupdate: update\n\t\t};\n\t}\n\n\tfunction WebGLObjects(gl, geometries, attributes, info) {\n\t\tvar updateMap = new WeakMap();\n\n\t\tfunction update(object) {\n\t\t\tvar frame = info.render.frame;\n\t\t\tvar geometry = object.geometry;\n\t\t\tvar buffergeometry = geometries.get(object, geometry); // Update once per frame\n\n\t\t\tif (updateMap.get(buffergeometry) !== frame) {\n\t\t\t\tif (geometry.isGeometry) {\n\t\t\t\t\tbuffergeometry.updateFromObject(object);\n\t\t\t\t}\n\n\t\t\t\tgeometries.update(buffergeometry);\n\t\t\t\tupdateMap.set(buffergeometry, frame);\n\t\t\t}\n\n\t\t\tif (object.isInstancedMesh) {\n\t\t\t\tif (object.hasEventListener('dispose', onInstancedMeshDispose) === false) {\n\t\t\t\t\tobject.addEventListener('dispose', onInstancedMeshDispose);\n\t\t\t\t}\n\n\t\t\t\tattributes.update(object.instanceMatrix, 34962);\n\n\t\t\t\tif (object.instanceColor !== null) {\n\t\t\t\t\tattributes.update(object.instanceColor, 34962);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn buffergeometry;\n\t\t}\n\n\t\tfunction dispose() {\n\t\t\tupdateMap = new WeakMap();\n\t\t}\n\n\t\tfunction onInstancedMeshDispose(event) {\n\t\t\tvar instancedMesh = event.target;\n\t\t\tinstancedMesh.removeEventListener('dispose', onInstancedMeshDispose);\n\t\t\tattributes.remove(instancedMesh.instanceMatrix);\n\t\t\tif (instancedMesh.instanceColor !== null) attributes.remove(instancedMesh.instanceColor);\n\t\t}\n\n\t\treturn {\n\t\t\tupdate: update,\n\t\t\tdispose: dispose\n\t\t};\n\t}\n\n\tfunction DataTexture2DArray(data, width, height, depth) {\n\t\tif (data === void 0) {\n\t\t\tdata = null;\n\t\t}\n\n\t\tif (width === void 0) {\n\t\t\twidth = 1;\n\t\t}\n\n\t\tif (height === void 0) {\n\t\t\theight = 1;\n\t\t}\n\n\t\tif (depth === void 0) {\n\t\t\tdepth = 1;\n\t\t}\n\n\t\tTexture.call(this, null);\n\t\tthis.image = {\n\t\t\tdata: data,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth\n\t\t};\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.needsUpdate = true;\n\t}\n\n\tDataTexture2DArray.prototype = Object.create(Texture.prototype);\n\tDataTexture2DArray.prototype.constructor = DataTexture2DArray;\n\tDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\n\tfunction DataTexture3D(data, width, height, depth) {\n\t\tif (data === void 0) {\n\t\t\tdata = null;\n\t\t}\n\n\t\tif (width === void 0) {\n\t\t\twidth = 1;\n\t\t}\n\n\t\tif (height === void 0) {\n\t\t\theight = 1;\n\t\t}\n\n\t\tif (depth === void 0) {\n\t\t\tdepth = 1;\n\t\t}\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\t\tTexture.call(this, null);\n\t\tthis.image = {\n\t\t\tdata: data,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth\n\t\t};\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.needsUpdate = true;\n\t}\n\n\tDataTexture3D.prototype = Object.create(Texture.prototype);\n\tDataTexture3D.prototype.constructor = DataTexture3D;\n\tDataTexture3D.prototype.isDataTexture3D = true;\n\n\t/**\n\t * Uniforms of a program.\n\t * Those form a tree structure with a special top-level container for the root,\n\t * which you get by calling 'new WebGLUniforms( gl, program )'.\n\t *\n\t *\n\t * Properties of inner nodes including the top-level container:\n\t *\n\t * .seq - array of nested uniforms\n\t * .map - nested uniforms by name\n\t *\n\t *\n\t * Methods of all nodes except the top-level container:\n\t *\n\t * .setValue( gl, value, [textures] )\n\t *\n\t * \t\tuploads a uniform value(s)\n\t *\t\tthe 'textures' parameter is needed for sampler uniforms\n\t *\n\t *\n\t * Static methods of the top-level container (textures factorizations):\n\t *\n\t * .upload( gl, seq, values, textures )\n\t *\n\t * \t\tsets uniforms in 'seq' to 'values[id].value'\n\t *\n\t * .seqWithValue( seq, values ) : filteredSeq\n\t *\n\t * \t\tfilters 'seq' entries with corresponding entry in values\n\t *\n\t *\n\t * Methods of the top-level container (textures factorizations):\n\t *\n\t * .setValue( gl, name, value, textures )\n\t *\n\t * \t\tsets uniform with\tname 'name' to 'value'\n\t *\n\t * .setOptional( gl, obj, prop )\n\t *\n\t * \t\tlike .set for an optional property of the object\n\t *\n\t */\n\tvar emptyTexture = new Texture();\n\tvar emptyTexture2dArray = new DataTexture2DArray();\n\tvar emptyTexture3d = new DataTexture3D();\n\tvar emptyCubeTexture = new CubeTexture(); // --- Utilities ---\n\t// Array Caches (provide typed arrays for temporary by size)\n\n\tvar arrayCacheF32 = [];\n\tvar arrayCacheI32 = []; // Float32Array caches used for uploading Matrix uniforms\n\n\tvar mat4array = new Float32Array(16);\n\tvar mat3array = new Float32Array(9);\n\tvar mat2array = new Float32Array(4); // Flattening for arrays of vectors and matrices\n\n\tfunction flatten(array, nBlocks, blockSize) {\n\t\tvar firstElem = array[0];\n\t\tif (firstElem <= 0 || firstElem > 0) return array; // unoptimized: ! isNaN( firstElem )\n\t\t// see http://jacksondunstan.com/articles/983\n\n\t\tvar n = nBlocks * blockSize;\n\t\tvar r = arrayCacheF32[n];\n\n\t\tif (r === undefined) {\n\t\t\tr = new Float32Array(n);\n\t\t\tarrayCacheF32[n] = r;\n\t\t}\n\n\t\tif (nBlocks !== 0) {\n\t\t\tfirstElem.toArray(r, 0);\n\n\t\t\tfor (var i = 1, offset = 0; i !== nBlocks; ++i) {\n\t\t\t\toffset += blockSize;\n\t\t\t\tarray[i].toArray(r, offset);\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n\n\tfunction arraysEqual(a, b) {\n\t\tif (a.length !== b.length) return false;\n\n\t\tfor (var i = 0, l = a.length; i < l; i++) {\n\t\t\tif (a[i] !== b[i]) return false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction copyArray(a, b) {\n\t\tfor (var i = 0, l = b.length; i < l; i++) {\n\t\t\ta[i] = b[i];\n\t\t}\n\t} // Texture unit allocation\n\n\n\tfunction allocTexUnits(textures, n) {\n\t\tvar r = arrayCacheI32[n];\n\n\t\tif (r === undefined) {\n\t\t\tr = new Int32Array(n);\n\t\t\tarrayCacheI32[n] = r;\n\t\t}\n\n\t\tfor (var i = 0; i !== n; ++i) {\n\t\t\tr[i] = textures.allocateTextureUnit();\n\t\t}\n\n\t\treturn r;\n\t} // --- Setters ---\n\t// Note: Defining these methods externally, because they come in a bunch\n\t// and this way their names minify.\n\t// Single scalar\n\n\n\tfunction setValueV1f(gl, v) {\n\t\tvar cache = this.cache;\n\t\tif (cache[0] === v) return;\n\t\tgl.uniform1f(this.addr, v);\n\t\tcache[0] = v;\n\t} // Single float vector (from flat array or THREE.VectorN)\n\n\n\tfunction setValueV2f(gl, v) {\n\t\tvar cache = this.cache;\n\n\t\tif (v.x !== undefined) {\n\t\t\tif (cache[0] !== v.x || cache[1] !== v.y) {\n\t\t\t\tgl.uniform2f(this.addr, v.x, v.y);\n\t\t\t\tcache[0] = v.x;\n\t\t\t\tcache[1] = v.y;\n\t\t\t}\n\t\t} else {\n\t\t\tif (arraysEqual(cache, v)) return;\n\t\t\tgl.uniform2fv(this.addr, v);\n\t\t\tcopyArray(cache, v);\n\t\t}\n\t}\n\n\tfunction setValueV3f(gl, v) {\n\t\tvar cache = this.cache;\n\n\t\tif (v.x !== undefined) {\n\t\t\tif (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z) {\n\t\t\t\tgl.uniform3f(this.addr, v.x, v.y, v.z);\n\t\t\t\tcache[0] = v.x;\n\t\t\t\tcache[1] = v.y;\n\t\t\t\tcache[2] = v.z;\n\t\t\t}\n\t\t} else if (v.r !== undefined) {\n\t\t\tif (cache[0] !== v.r || cache[1] !== v.g || cache[2] !== v.b) {\n\t\t\t\tgl.uniform3f(this.addr, v.r, v.g, v.b);\n\t\t\t\tcache[0] = v.r;\n\t\t\t\tcache[1] = v.g;\n\t\t\t\tcache[2] = v.b;\n\t\t\t}\n\t\t} else {\n\t\t\tif (arraysEqual(cache, v)) return;\n\t\t\tgl.uniform3fv(this.addr, v);\n\t\t\tcopyArray(cache, v);\n\t\t}\n\t}\n\n\tfunction setValueV4f(gl, v) {\n\t\tvar cache = this.cache;\n\n\t\tif (v.x !== undefined) {\n\t\t\tif (cache[0] !== v.x || cache[1] !== v.y || cache[2] !== v.z || cache[3] !== v.w) {\n\t\t\t\tgl.uniform4f(this.addr, v.x, v.y, v.z, v.w);\n\t\t\t\tcache[0] = v.x;\n\t\t\t\tcache[1] = v.y;\n\t\t\t\tcache[2] = v.z;\n\t\t\t\tcache[3] = v.w;\n\t\t\t}\n\t\t} else {\n\t\t\tif (arraysEqual(cache, v)) return;\n\t\t\tgl.uniform4fv(this.addr, v);\n\t\t\tcopyArray(cache, v);\n\t\t}\n\t} // Single matrix (from flat array or MatrixN)\n\n\n\tfunction setValueM2(gl, v) {\n\t\tvar cache = this.cache;\n\t\tvar elements = v.elements;\n\n\t\tif (elements === undefined) {\n\t\t\tif (arraysEqual(cache, v)) return;\n\t\t\tgl.uniformMatrix2fv(this.addr, false, v);\n\t\t\tcopyArray(cache, v);\n\t\t} else {\n\t\t\tif (arraysEqual(cache, elements)) return;\n\t\t\tmat2array.set(elements);\n\t\t\tgl.uniformMatrix2fv(this.addr, false, mat2array);\n\t\t\tcopyArray(cache, elements);\n\t\t}\n\t}\n\n\tfunction setValueM3(gl, v) {\n\t\tvar cache = this.cache;\n\t\tvar elements = v.elements;\n\n\t\tif (elements === undefined) {\n\t\t\tif (arraysEqual(cache, v)) return;\n\t\t\tgl.uniformMatrix3fv(this.addr, false, v);\n\t\t\tcopyArray(cache, v);\n\t\t} else {\n\t\t\tif (arraysEqual(cache, elements)) return;\n\t\t\tmat3array.set(elements);\n\t\t\tgl.uniformMatrix3fv(this.addr, false, mat3array);\n\t\t\tcopyArray(cache, elements);\n\t\t}\n\t}\n\n\tfunction setValueM4(gl, v) {\n\t\tvar cache = this.cache;\n\t\tvar elements = v.elements;\n\n\t\tif (elements === undefined) {\n\t\t\tif (arraysEqual(cache, v)) return;\n\t\t\tgl.uniformMatrix4fv(this.addr, false, v);\n\t\t\tcopyArray(cache, v);\n\t\t} else {\n\t\t\tif (arraysEqual(cache, elements)) return;\n\t\t\tmat4array.set(elements);\n\t\t\tgl.uniformMatrix4fv(this.addr, false, mat4array);\n\t\t\tcopyArray(cache, elements);\n\t\t}\n\t} // Single texture (2D / Cube)\n\n\n\tfunction setValueT1(gl, v, textures) {\n\t\tvar cache = this.cache;\n\t\tvar unit = textures.allocateTextureUnit();\n\n\t\tif (cache[0] !== unit) {\n\t\t\tgl.uniform1i(this.addr, unit);\n\t\t\tcache[0] = unit;\n\t\t}\n\n\t\ttextures.safeSetTexture2D(v || emptyTexture, unit);\n\t}\n\n\tfunction setValueT2DArray1(gl, v, textures) {\n\t\tvar cache = this.cache;\n\t\tvar unit = textures.allocateTextureUnit();\n\n\t\tif (cache[0] !== unit) {\n\t\t\tgl.uniform1i(this.addr, unit);\n\t\t\tcache[0] = unit;\n\t\t}\n\n\t\ttextures.setTexture2DArray(v || emptyTexture2dArray, unit);\n\t}\n\n\tfunction setValueT3D1(gl, v, textures) {\n\t\tvar cache = this.cache;\n\t\tvar unit = textures.allocateTextureUnit();\n\n\t\tif (cache[0] !== unit) {\n\t\t\tgl.uniform1i(this.addr, unit);\n\t\t\tcache[0] = unit;\n\t\t}\n\n\t\ttextures.setTexture3D(v || emptyTexture3d, unit);\n\t}\n\n\tfunction setValueT6(gl, v, textures) {\n\t\tvar cache = this.cache;\n\t\tvar unit = textures.allocateTextureUnit();\n\n\t\tif (cache[0] !== unit) {\n\t\t\tgl.uniform1i(this.addr, unit);\n\t\t\tcache[0] = unit;\n\t\t}\n\n\t\ttextures.safeSetTextureCube(v || emptyCubeTexture, unit);\n\t} // Integer / Boolean vectors or arrays thereof (always flat arrays)\n\n\n\tfunction setValueV1i(gl, v) {\n\t\tvar cache = this.cache;\n\t\tif (cache[0] === v) return;\n\t\tgl.uniform1i(this.addr, v);\n\t\tcache[0] = v;\n\t}\n\n\tfunction setValueV2i(gl, v) {\n\t\tvar cache = this.cache;\n\t\tif (arraysEqual(cache, v)) return;\n\t\tgl.uniform2iv(this.addr, v);\n\t\tcopyArray(cache, v);\n\t}\n\n\tfunction setValueV3i(gl, v) {\n\t\tvar cache = this.cache;\n\t\tif (arraysEqual(cache, v)) return;\n\t\tgl.uniform3iv(this.addr, v);\n\t\tcopyArray(cache, v);\n\t}\n\n\tfunction setValueV4i(gl, v) {\n\t\tvar cache = this.cache;\n\t\tif (arraysEqual(cache, v)) return;\n\t\tgl.uniform4iv(this.addr, v);\n\t\tcopyArray(cache, v);\n\t} // uint\n\n\n\tfunction setValueV1ui(gl, v) {\n\t\tvar cache = this.cache;\n\t\tif (cache[0] === v) return;\n\t\tgl.uniform1ui(this.addr, v);\n\t\tcache[0] = v;\n\t} // Helper to pick the right setter for the singular case\n\n\n\tfunction getSingularSetter(type) {\n\t\tswitch (type) {\n\t\t\tcase 0x1406:\n\t\t\t\treturn setValueV1f;\n\t\t\t// FLOAT\n\n\t\t\tcase 0x8b50:\n\t\t\t\treturn setValueV2f;\n\t\t\t// _VEC2\n\n\t\t\tcase 0x8b51:\n\t\t\t\treturn setValueV3f;\n\t\t\t// _VEC3\n\n\t\t\tcase 0x8b52:\n\t\t\t\treturn setValueV4f;\n\t\t\t// _VEC4\n\n\t\t\tcase 0x8b5a:\n\t\t\t\treturn setValueM2;\n\t\t\t// _MAT2\n\n\t\t\tcase 0x8b5b:\n\t\t\t\treturn setValueM3;\n\t\t\t// _MAT3\n\n\t\t\tcase 0x8b5c:\n\t\t\t\treturn setValueM4;\n\t\t\t// _MAT4\n\n\t\t\tcase 0x1404:\n\t\t\tcase 0x8b56:\n\t\t\t\treturn setValueV1i;\n\t\t\t// INT, BOOL\n\n\t\t\tcase 0x8b53:\n\t\t\tcase 0x8b57:\n\t\t\t\treturn setValueV2i;\n\t\t\t// _VEC2\n\n\t\t\tcase 0x8b54:\n\t\t\tcase 0x8b58:\n\t\t\t\treturn setValueV3i;\n\t\t\t// _VEC3\n\n\t\t\tcase 0x8b55:\n\t\t\tcase 0x8b59:\n\t\t\t\treturn setValueV4i;\n\t\t\t// _VEC4\n\n\t\t\tcase 0x1405:\n\t\t\t\treturn setValueV1ui;\n\t\t\t// UINT\n\n\t\t\tcase 0x8b5e: // SAMPLER_2D\n\n\t\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\n\t\t\tcase 0x8dca: // INT_SAMPLER_2D\n\n\t\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\n\t\t\tcase 0x8b62:\n\t\t\t\t// SAMPLER_2D_SHADOW\n\t\t\t\treturn setValueT1;\n\n\t\t\tcase 0x8b5f: // SAMPLER_3D\n\n\t\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\n\t\t\tcase 0x8dd3:\n\t\t\t\t// UNSIGNED_INT_SAMPLER_3D\n\t\t\t\treturn setValueT3D1;\n\n\t\t\tcase 0x8b60: // SAMPLER_CUBE\n\n\t\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\n\t\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\n\t\t\tcase 0x8dc5:\n\t\t\t\t// SAMPLER_CUBE_SHADOW\n\t\t\t\treturn setValueT6;\n\n\t\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\n\t\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\n\t\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\n\t\t\tcase 0x8dc4:\n\t\t\t\t// SAMPLER_2D_ARRAY_SHADOW\n\t\t\t\treturn setValueT2DArray1;\n\t\t}\n\t} // Array of scalars\n\n\n\tfunction setValueV1fArray(gl, v) {\n\t\tgl.uniform1fv(this.addr, v);\n\t} // Integer / Boolean vectors or arrays thereof (always flat arrays)\n\n\n\tfunction setValueV1iArray(gl, v) {\n\t\tgl.uniform1iv(this.addr, v);\n\t}\n\n\tfunction setValueV2iArray(gl, v) {\n\t\tgl.uniform2iv(this.addr, v);\n\t}\n\n\tfunction setValueV3iArray(gl, v) {\n\t\tgl.uniform3iv(this.addr, v);\n\t}\n\n\tfunction setValueV4iArray(gl, v) {\n\t\tgl.uniform4iv(this.addr, v);\n\t} // Array of vectors (flat or from THREE classes)\n\n\n\tfunction setValueV2fArray(gl, v) {\n\t\tvar data = flatten(v, this.size, 2);\n\t\tgl.uniform2fv(this.addr, data);\n\t}\n\n\tfunction setValueV3fArray(gl, v) {\n\t\tvar data = flatten(v, this.size, 3);\n\t\tgl.uniform3fv(this.addr, data);\n\t}\n\n\tfunction setValueV4fArray(gl, v) {\n\t\tvar data = flatten(v, this.size, 4);\n\t\tgl.uniform4fv(this.addr, data);\n\t} // Array of matrices (flat or from THREE clases)\n\n\n\tfunction setValueM2Array(gl, v) {\n\t\tvar data = flatten(v, this.size, 4);\n\t\tgl.uniformMatrix2fv(this.addr, false, data);\n\t}\n\n\tfunction setValueM3Array(gl, v) {\n\t\tvar data = flatten(v, this.size, 9);\n\t\tgl.uniformMatrix3fv(this.addr, false, data);\n\t}\n\n\tfunction setValueM4Array(gl, v) {\n\t\tvar data = flatten(v, this.size, 16);\n\t\tgl.uniformMatrix4fv(this.addr, false, data);\n\t} // Array of textures (2D / Cube)\n\n\n\tfunction setValueT1Array(gl, v, textures) {\n\t\tvar n = v.length;\n\t\tvar units = allocTexUnits(textures, n);\n\t\tgl.uniform1iv(this.addr, units);\n\n\t\tfor (var i = 0; i !== n; ++i) {\n\t\t\ttextures.safeSetTexture2D(v[i] || emptyTexture, units[i]);\n\t\t}\n\t}\n\n\tfunction setValueT6Array(gl, v, textures) {\n\t\tvar n = v.length;\n\t\tvar units = allocTexUnits(textures, n);\n\t\tgl.uniform1iv(this.addr, units);\n\n\t\tfor (var i = 0; i !== n; ++i) {\n\t\t\ttextures.safeSetTextureCube(v[i] || emptyCubeTexture, units[i]);\n\t\t}\n\t} // Helper to pick the right setter for a pure (bottom-level) array\n\n\n\tfunction getPureArraySetter(type) {\n\t\tswitch (type) {\n\t\t\tcase 0x1406:\n\t\t\t\treturn setValueV1fArray;\n\t\t\t// FLOAT\n\n\t\t\tcase 0x8b50:\n\t\t\t\treturn setValueV2fArray;\n\t\t\t// _VEC2\n\n\t\t\tcase 0x8b51:\n\t\t\t\treturn setValueV3fArray;\n\t\t\t// _VEC3\n\n\t\t\tcase 0x8b52:\n\t\t\t\treturn setValueV4fArray;\n\t\t\t// _VEC4\n\n\t\t\tcase 0x8b5a:\n\t\t\t\treturn setValueM2Array;\n\t\t\t// _MAT2\n\n\t\t\tcase 0x8b5b:\n\t\t\t\treturn setValueM3Array;\n\t\t\t// _MAT3\n\n\t\t\tcase 0x8b5c:\n\t\t\t\treturn setValueM4Array;\n\t\t\t// _MAT4\n\n\t\t\tcase 0x1404:\n\t\t\tcase 0x8b56:\n\t\t\t\treturn setValueV1iArray;\n\t\t\t// INT, BOOL\n\n\t\t\tcase 0x8b53:\n\t\t\tcase 0x8b57:\n\t\t\t\treturn setValueV2iArray;\n\t\t\t// _VEC2\n\n\t\t\tcase 0x8b54:\n\t\t\tcase 0x8b58:\n\t\t\t\treturn setValueV3iArray;\n\t\t\t// _VEC3\n\n\t\t\tcase 0x8b55:\n\t\t\tcase 0x8b59:\n\t\t\t\treturn setValueV4iArray;\n\t\t\t// _VEC4\n\n\t\t\tcase 0x8b5e: // SAMPLER_2D\n\n\t\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\n\t\t\tcase 0x8dca: // INT_SAMPLER_2D\n\n\t\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\n\t\t\tcase 0x8b62:\n\t\t\t\t// SAMPLER_2D_SHADOW\n\t\t\t\treturn setValueT1Array;\n\n\t\t\tcase 0x8b60: // SAMPLER_CUBE\n\n\t\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\n\t\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\n\t\t\tcase 0x8dc5:\n\t\t\t\t// SAMPLER_CUBE_SHADOW\n\t\t\t\treturn setValueT6Array;\n\t\t}\n\t} // --- Uniform Classes ---\n\n\n\tfunction SingleUniform(id, activeInfo, addr) {\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.setValue = getSingularSetter(activeInfo.type); // this.path = activeInfo.name; // DEBUG\n\t}\n\n\tfunction PureArrayUniform(id, activeInfo, addr) {\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter(activeInfo.type); // this.path = activeInfo.name; // DEBUG\n\t}\n\n\tPureArrayUniform.prototype.updateCache = function (data) {\n\t\tvar cache = this.cache;\n\n\t\tif (data instanceof Float32Array && cache.length !== data.length) {\n\t\t\tthis.cache = new Float32Array(data.length);\n\t\t}\n\n\t\tcopyArray(cache, data);\n\t};\n\n\tfunction StructuredUniform(id) {\n\t\tthis.id = id;\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\t}\n\n\tStructuredUniform.prototype.setValue = function (gl, value, textures) {\n\t\tvar seq = this.seq;\n\n\t\tfor (var i = 0, n = seq.length; i !== n; ++i) {\n\t\t\tvar u = seq[i];\n\t\t\tu.setValue(gl, value[u.id], textures);\n\t\t}\n\t}; // --- Top-level ---\n\t// Parser - builds up the property tree from the path strings\n\n\n\tvar RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g; // extracts\n\t// \t- the identifier (member name or array index)\n\t//\t- followed by an optional right bracket (found when array index)\n\t//\t- followed by an optional left bracket or dot (type of subscript)\n\t//\n\t// Note: These portions can be read in a non-overlapping fashion and\n\t// allow straightforward parsing of the hierarchy that WebGL encodes\n\t// in the uniform names.\n\n\tfunction addUniform(container, uniformObject) {\n\t\tcontainer.seq.push(uniformObject);\n\t\tcontainer.map[uniformObject.id] = uniformObject;\n\t}\n\n\tfunction parseUniform(activeInfo, addr, container) {\n\t\tvar path = activeInfo.name,\n\t\t\t\tpathLength = path.length; // reset RegExp object, because of the early exit of a previous run\n\n\t\tRePathPart.lastIndex = 0;\n\n\t\twhile (true) {\n\t\t\tvar match = RePathPart.exec(path),\n\t\t\t\t\tmatchEnd = RePathPart.lastIndex;\n\t\t\tvar id = match[1];\n\t\t\tvar idIsIndex = match[2] === ']',\n\t\t\t\t\tsubscript = match[3];\n\t\t\tif (idIsIndex) id = id | 0; // convert to integer\n\n\t\t\tif (subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength) {\n\t\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\t\t\t\taddUniform(container, subscript === undefined ? new SingleUniform(id, activeInfo, addr) : new PureArrayUniform(id, activeInfo, addr));\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\t// step into inner node / create it in case it doesn't exist\n\t\t\t\tvar map = container.map;\n\t\t\t\tvar next = map[id];\n\n\t\t\t\tif (next === undefined) {\n\t\t\t\t\tnext = new StructuredUniform(id);\n\t\t\t\t\taddUniform(container, next);\n\t\t\t\t}\n\n\t\t\t\tcontainer = next;\n\t\t\t}\n\t\t}\n\t} // Root Container\n\n\n\tfunction WebGLUniforms(gl, program) {\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\t\tvar n = gl.getProgramParameter(program, 35718);\n\n\t\tfor (var i = 0; i < n; ++i) {\n\t\t\tvar info = gl.getActiveUniform(program, i),\n\t\t\t\t\taddr = gl.getUniformLocation(program, info.name);\n\t\t\tparseUniform(info, addr, this);\n\t\t}\n\t}\n\n\tWebGLUniforms.prototype.setValue = function (gl, name, value, textures) {\n\t\tvar u = this.map[name];\n\t\tif (u !== undefined) u.setValue(gl, value, textures);\n\t};\n\n\tWebGLUniforms.prototype.setOptional = function (gl, object, name) {\n\t\tvar v = object[name];\n\t\tif (v !== undefined) this.setValue(gl, name, v);\n\t}; // Static interface\n\n\n\tWebGLUniforms.upload = function (gl, seq, values, textures) {\n\t\tfor (var i = 0, n = seq.length; i !== n; ++i) {\n\t\t\tvar u = seq[i],\n\t\t\t\t\tv = values[u.id];\n\n\t\t\tif (v.needsUpdate !== false) {\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue(gl, v.value, textures);\n\t\t\t}\n\t\t}\n\t};\n\n\tWebGLUniforms.seqWithValue = function (seq, values) {\n\t\tvar r = [];\n\n\t\tfor (var i = 0, n = seq.length; i !== n; ++i) {\n\t\t\tvar u = seq[i];\n\t\t\tif (u.id in values) r.push(u);\n\t\t}\n\n\t\treturn r;\n\t};\n\n\tfunction WebGLShader(gl, type, string) {\n\t\tvar shader = gl.createShader(type);\n\t\tgl.shaderSource(shader, string);\n\t\tgl.compileShader(shader);\n\t\treturn shader;\n\t}\n\n\tvar programIdCount = 0;\n\n\tfunction addLineNumbers(string) {\n\t\tvar lines = string.split('\\n');\n\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tlines[i] = i + 1 + ': ' + lines[i];\n\t\t}\n\n\t\treturn lines.join('\\n');\n\t}\n\n\tfunction getEncodingComponents(encoding) {\n\t\tswitch (encoding) {\n\t\t\tcase LinearEncoding:\n\t\t\t\treturn ['Linear', '( value )'];\n\n\t\t\tcase sRGBEncoding:\n\t\t\t\treturn ['sRGB', '( value )'];\n\n\t\t\tcase RGBEEncoding:\n\t\t\t\treturn ['RGBE', '( value )'];\n\n\t\t\tcase RGBM7Encoding:\n\t\t\t\treturn ['RGBM', '( value, 7.0 )'];\n\n\t\t\tcase RGBM16Encoding:\n\t\t\t\treturn ['RGBM', '( value, 16.0 )'];\n\n\t\t\tcase RGBDEncoding:\n\t\t\t\treturn ['RGBD', '( value, 256.0 )'];\n\n\t\t\tcase GammaEncoding:\n\t\t\t\treturn ['Gamma', '( value, float( GAMMA_FACTOR ) )'];\n\n\t\t\tcase LogLuvEncoding:\n\t\t\t\treturn ['LogLuv', '( value )'];\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('THREE.WebGLProgram: Unsupported encoding:', encoding);\n\t\t\t\treturn ['Linear', '( value )'];\n\t\t}\n\t}\n\n\tfunction getShaderErrors(gl, shader, type) {\n\t\tvar status = gl.getShaderParameter(shader, 35713);\n\t\tvar log = gl.getShaderInfoLog(shader).trim();\n\t\tif (status && log === '') return ''; // --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tvar source = gl.getShaderSource(shader);\n\t\treturn 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\\n' + log + addLineNumbers(source);\n\t}\n\n\tfunction getTexelDecodingFunction(functionName, encoding) {\n\t\tvar components = getEncodingComponents(encoding);\n\t\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[0] + 'ToLinear' + components[1] + '; }';\n\t}\n\n\tfunction getTexelEncodingFunction(functionName, encoding) {\n\t\tvar components = getEncodingComponents(encoding);\n\t\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[0] + components[1] + '; }';\n\t}\n\n\tfunction getToneMappingFunction(functionName, toneMapping) {\n\t\tvar toneMappingName;\n\n\t\tswitch (toneMapping) {\n\t\t\tcase LinearToneMapping:\n\t\t\t\ttoneMappingName = 'Linear';\n\t\t\t\tbreak;\n\n\t\t\tcase ReinhardToneMapping:\n\t\t\t\ttoneMappingName = 'Reinhard';\n\t\t\t\tbreak;\n\n\t\t\tcase CineonToneMapping:\n\t\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\t\tbreak;\n\n\t\t\tcase ACESFilmicToneMapping:\n\t\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\t\tbreak;\n\n\t\t\tcase CustomToneMapping:\n\t\t\t\ttoneMappingName = 'Custom';\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('THREE.WebGLProgram: Unsupported toneMapping:', toneMapping);\n\t\t\t\ttoneMappingName = 'Linear';\n\t\t}\n\n\t\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\t}\n\n\tfunction generateExtensions(parameters) {\n\t\tvar chunks = [parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ? '#extension GL_OES_standard_derivatives : enable' : '', (parameters.extensionFragDepth || parameters.logarithmicDepthBuffer) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ? '#extension GL_EXT_draw_buffers : require' : '', (parameters.extensionShaderTextureLOD || parameters.envMap) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''];\n\t\treturn chunks.filter(filterEmptyLine).join('\\n');\n\t}\n\n\tfunction generateDefines(defines) {\n\t\tvar chunks = [];\n\n\t\tfor (var name in defines) {\n\t\t\tvar value = defines[name];\n\t\t\tif (value === false) continue;\n\t\t\tchunks.push('#define ' + name + ' ' + value);\n\t\t}\n\n\t\treturn chunks.join('\\n');\n\t}\n\n\tfunction fetchAttributeLocations(gl, program) {\n\t\tvar attributes = {};\n\t\tvar n = gl.getProgramParameter(program, 35721);\n\n\t\tfor (var i = 0; i < n; i++) {\n\t\t\tvar info = gl.getActiveAttrib(program, i);\n\t\t\tvar name = info.name; // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\t\tattributes[name] = gl.getAttribLocation(program, name);\n\t\t}\n\n\t\treturn attributes;\n\t}\n\n\tfunction filterEmptyLine(string) {\n\t\treturn string !== '';\n\t}\n\n\tfunction replaceLightNums(string, parameters) {\n\t\treturn string.replace(/NUM_DIR_LIGHTS/g, parameters.numDirLights).replace(/NUM_SPOT_LIGHTS/g, parameters.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g, parameters.numPointLights).replace(/NUM_HEMI_LIGHTS/g, parameters.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows);\n\t}\n\n\tfunction replaceClippingPlaneNums(string, parameters) {\n\t\treturn string.replace(/NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g, parameters.numClippingPlanes - parameters.numClipIntersection);\n\t} // Resolve Includes\n\n\n\tvar includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\n\tfunction resolveIncludes(string) {\n\t\treturn string.replace(includePattern, includeReplacer);\n\t}\n\n\tfunction includeReplacer(match, include) {\n\t\tvar string = ShaderChunk[include];\n\n\t\tif (string === undefined) {\n\t\t\tthrow new Error('Can not resolve #include <' + include + '>');\n\t\t}\n\n\t\treturn resolveIncludes(string);\n\t} // Unroll Loops\n\n\n\tvar deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\tvar unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\n\tfunction unrollLoops(string) {\n\t\treturn string.replace(unrollLoopPattern, loopReplacer).replace(deprecatedUnrollLoopPattern, deprecatedLoopReplacer);\n\t}\n\n\tfunction deprecatedLoopReplacer(match, start, end, snippet) {\n\t\tconsole.warn('WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.');\n\t\treturn loopReplacer(match, start, end, snippet);\n\t}\n\n\tfunction loopReplacer(match, start, end, snippet) {\n\t\tvar string = '';\n\n\t\tfor (var i = parseInt(start); i < parseInt(end); i++) {\n\t\t\tstring += snippet.replace(/\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]').replace(/UNROLLED_LOOP_INDEX/g, i);\n\t\t}\n\n\t\treturn string;\n\t} //\n\n\n\tfunction generatePrecision(parameters) {\n\t\tvar precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\t\tif (parameters.precision === 'highp') {\n\t\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\t\t} else if (parameters.precision === 'mediump') {\n\t\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\t\t} else if (parameters.precision === 'lowp') {\n\t\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\t\t}\n\n\t\treturn precisionstring;\n\t}\n\n\tfunction generateShadowMapTypeDefine(parameters) {\n\t\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\t\tif (parameters.shadowMapType === PCFShadowMap) {\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\t\t} else if (parameters.shadowMapType === PCFSoftShadowMap) {\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\t\t} else if (parameters.shadowMapType === VSMShadowMap) {\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\t\t}\n\n\t\treturn shadowMapTypeDefine;\n\t}\n\n\tfunction generateEnvMapTypeDefine(parameters) {\n\t\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\t\tif (parameters.envMap) {\n\t\t\tswitch (parameters.envMapMode) {\n\t\t\t\tcase CubeReflectionMapping:\n\t\t\t\tcase CubeRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn envMapTypeDefine;\n\t}\n\n\tfunction generateEnvMapModeDefine(parameters) {\n\t\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\t\tif (parameters.envMap) {\n\t\t\tswitch (parameters.envMapMode) {\n\t\t\t\tcase CubeRefractionMapping:\n\t\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn envMapModeDefine;\n\t}\n\n\tfunction generateEnvMapBlendingDefine(parameters) {\n\t\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\t\tif (parameters.envMap) {\n\t\t\tswitch (parameters.combine) {\n\t\t\t\tcase MultiplyOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MixOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase AddOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn envMapBlendingDefine;\n\t}\n\n\tfunction WebGLProgram(renderer, cacheKey, parameters, bindingStates) {\n\t\tvar gl = renderer.getContext();\n\t\tvar defines = parameters.defines;\n\t\tvar vertexShader = parameters.vertexShader;\n\t\tvar fragmentShader = parameters.fragmentShader;\n\t\tvar shadowMapTypeDefine = generateShadowMapTypeDefine(parameters);\n\t\tvar envMapTypeDefine = generateEnvMapTypeDefine(parameters);\n\t\tvar envMapModeDefine = generateEnvMapModeDefine(parameters);\n\t\tvar envMapBlendingDefine = generateEnvMapBlendingDefine(parameters);\n\t\tvar gammaFactorDefine = renderer.gammaFactor > 0 ? renderer.gammaFactor : 1.0;\n\t\tvar customExtensions = parameters.isWebGL2 ? '' : generateExtensions(parameters);\n\t\tvar customDefines = generateDefines(defines);\n\t\tvar program = gl.createProgram();\n\t\tvar prefixVertex, prefixFragment;\n\t\tvar versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\t\tif (parameters.isRawShaderMaterial) {\n\t\t\tprefixVertex = [customDefines].filter(filterEmptyLine).join('\\n');\n\n\t\t\tif (prefixVertex.length > 0) {\n\t\t\t\tprefixVertex += '\\n';\n\t\t\t}\n\n\t\t\tprefixFragment = [customExtensions, customDefines].filter(filterEmptyLine).join('\\n');\n\n\t\t\tif (prefixFragment.length > 0) {\n\t\t\t\tprefixFragment += '\\n';\n\t\t\t}\n\t\t} else {\n\t\t\tprefixVertex = [generatePrecision(parameters), '#define SHADER_NAME ' + parameters.shaderName, customDefines, parameters.instancing ? '#define USE_INSTANCING' : '', parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', '#define GAMMA_FACTOR ' + gammaFactorDefine, '#define MAX_BONES ' + parameters.maxBones, parameters.useFog && parameters.fog ? '#define USE_FOG' : '', parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.normalMap && parameters.objectSpaceNormalMap ? '#define OBJECTSPACE_NORMALMAP' : '', parameters.normalMap && parameters.tangentSpaceNormalMap ? '#define TANGENTSPACE_NORMALMAP' : '', parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', parameters.alphaMap ? '#define USE_ALPHAMAP' : '', parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', parameters.vertexTangents ? '#define USE_TANGENT' : '', parameters.vertexColors ? '#define USE_COLOR' : '', parameters.vertexUvs ? '#define USE_UV' : '', parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', parameters.flatShading ? '#define FLAT_SHADED' : '', parameters.skinning ? '#define USE_SKINNING' : '', parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', parameters.doubleSided ? '#define DOUBLE_SIDED' : '', parameters.flipSided ? '#define FLIP_SIDED' : '', parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ? '#define USE_LOGDEPTHBUF_EXT' : '', 'uniform mat4 modelMatrix;', 'uniform mat4 modelViewMatrix;', 'uniform mat4 projectionMatrix;', 'uniform mat4 viewMatrix;', 'uniform mat3 normalMatrix;', 'uniform vec3 cameraPosition;', 'uniform bool isOrthographic;', '#ifdef USE_INSTANCING', '\tattribute mat4 instanceMatrix;', '#endif', '#ifdef USE_INSTANCING_COLOR', '\tattribute vec3 instanceColor;', '#endif', 'attribute vec3 position;', 'attribute vec3 normal;', 'attribute vec2 uv;', '#ifdef USE_TANGENT', '\tattribute vec4 tangent;', '#endif', '#ifdef USE_COLOR', '\tattribute vec3 color;', '#endif', '#ifdef USE_MORPHTARGETS', '\tattribute vec3 morphTarget0;', '\tattribute vec3 morphTarget1;', '\tattribute vec3 morphTarget2;', '\tattribute vec3 morphTarget3;', '\t#ifdef USE_MORPHNORMALS', '\t\tattribute vec3 morphNormal0;', '\t\tattribute vec3 morphNormal1;', '\t\tattribute vec3 morphNormal2;', '\t\tattribute vec3 morphNormal3;', '\t#else', '\t\tattribute vec3 morphTarget4;', '\t\tattribute vec3 morphTarget5;', '\t\tattribute vec3 morphTarget6;', '\t\tattribute vec3 morphTarget7;', '\t#endif', '#endif', '#ifdef USE_SKINNING', '\tattribute vec4 skinIndex;', '\tattribute vec4 skinWeight;', '#endif', '\\n'].filter(filterEmptyLine).join('\\n');\n\t\t\tprefixFragment = [customExtensions, generatePrecision(parameters), '#define SHADER_NAME ' + parameters.shaderName, customDefines, parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + (parameters.alphaTest % 1 ? '' : '.0') : '', // add '.0' if integer\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine, parameters.useFog && parameters.fog ? '#define USE_FOG' : '', parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.matcap ? '#define USE_MATCAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapTypeDefine : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.envMap ? '#define ' + envMapBlendingDefine : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.normalMap && parameters.objectSpaceNormalMap ? '#define OBJECTSPACE_NORMALMAP' : '', parameters.normalMap && parameters.tangentSpaceNormalMap ? '#define TANGENTSPACE_NORMALMAP' : '', parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', parameters.alphaMap ? '#define USE_ALPHAMAP' : '', parameters.sheen ? '#define USE_SHEEN' : '', parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', parameters.vertexTangents ? '#define USE_TANGENT' : '', parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', parameters.vertexUvs ? '#define USE_UV' : '', parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', parameters.flatShading ? '#define FLAT_SHADED' : '', parameters.doubleSided ? '#define DOUBLE_SIDED' : '', parameters.flipSided ? '#define FLIP_SIDED' : '', parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ? '#define USE_LOGDEPTHBUF_EXT' : '', (parameters.extensionShaderTextureLOD || parameters.envMap) && parameters.rendererExtensionShaderTextureLod ? '#define TEXTURE_LOD_EXT' : '', 'uniform mat4 viewMatrix;', 'uniform vec3 cameraPosition;', 'uniform bool isOrthographic;', parameters.toneMapping !== NoToneMapping ? '#define TONE_MAPPING' : '', parameters.toneMapping !== NoToneMapping ? ShaderChunk['tonemapping_pars_fragment'] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\tparameters.toneMapping !== NoToneMapping ? getToneMappingFunction('toneMapping', parameters.toneMapping) : '', parameters.dithering ? '#define DITHERING' : '', ShaderChunk['encodings_pars_fragment'], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction('mapTexelToLinear', parameters.mapEncoding) : '', parameters.matcap ? getTexelDecodingFunction('matcapTexelToLinear', parameters.matcapEncoding) : '', parameters.envMap ? getTexelDecodingFunction('envMapTexelToLinear', parameters.envMapEncoding) : '', parameters.emissiveMap ? getTexelDecodingFunction('emissiveMapTexelToLinear', parameters.emissiveMapEncoding) : '', parameters.lightMap ? getTexelDecodingFunction('lightMapTexelToLinear', parameters.lightMapEncoding) : '', getTexelEncodingFunction('linearToOutputTexel', parameters.outputEncoding), parameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '', '\\n'].filter(filterEmptyLine).join('\\n');\n\t\t}\n\n\t\tvertexShader = resolveIncludes(vertexShader);\n\t\tvertexShader = replaceLightNums(vertexShader, parameters);\n\t\tvertexShader = replaceClippingPlaneNums(vertexShader, parameters);\n\t\tfragmentShader = resolveIncludes(fragmentShader);\n\t\tfragmentShader = replaceLightNums(fragmentShader, parameters);\n\t\tfragmentShader = replaceClippingPlaneNums(fragmentShader, parameters);\n\t\tvertexShader = unrollLoops(vertexShader);\n\t\tfragmentShader = unrollLoops(fragmentShader);\n\n\t\tif (parameters.isWebGL2 && parameters.isRawShaderMaterial !== true) {\n\t\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\t\t\tversionString = '#version 300 es\\n';\n\t\t\tprefixVertex = ['#define attribute in', '#define varying out', '#define texture2D texture'].join('\\n') + '\\n' + prefixVertex;\n\t\t\tprefixFragment = ['#define varying in', parameters.glslVersion === GLSL3 ? '' : 'out highp vec4 pc_fragColor;', parameters.glslVersion === GLSL3 ? '' : '#define gl_FragColor pc_fragColor', '#define gl_FragDepthEXT gl_FragDepth', '#define texture2D texture', '#define textureCube texture', '#define texture2DProj textureProj', '#define texture2DLodEXT textureLod', '#define texture2DProjLodEXT textureProjLod', '#define textureCubeLodEXT textureLod', '#define texture2DGradEXT textureGrad', '#define texture2DProjGradEXT textureProjGrad', '#define textureCubeGradEXT textureGrad'].join('\\n') + '\\n' + prefixFragment;\n\t\t}\n\n\t\tvar vertexGlsl = versionString + prefixVertex + vertexShader;\n\t\tvar fragmentGlsl = versionString + prefixFragment + fragmentShader; // console.log( '*VERTEX*', vertexGlsl );\n\t\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\t\tvar glVertexShader = WebGLShader(gl, 35633, vertexGlsl);\n\t\tvar glFragmentShader = WebGLShader(gl, 35632, fragmentGlsl);\n\t\tgl.attachShader(program, glVertexShader);\n\t\tgl.attachShader(program, glFragmentShader); // Force a particular attribute to index 0.\n\n\t\tif (parameters.index0AttributeName !== undefined) {\n\t\t\tgl.bindAttribLocation(program, 0, parameters.index0AttributeName);\n\t\t} else if (parameters.morphTargets === true) {\n\t\t\t// programs with morphTargets displace position out of attribute 0\n\t\t\tgl.bindAttribLocation(program, 0, 'position');\n\t\t}\n\n\t\tgl.linkProgram(program); // check for link errors\n\n\t\tif (renderer.debug.checkShaderErrors) {\n\t\t\tvar programLog = gl.getProgramInfoLog(program).trim();\n\t\t\tvar vertexLog = gl.getShaderInfoLog(glVertexShader).trim();\n\t\t\tvar fragmentLog = gl.getShaderInfoLog(glFragmentShader).trim();\n\t\t\tvar runnable = true;\n\t\t\tvar haveDiagnostics = true;\n\n\t\t\tif (gl.getProgramParameter(program, 35714) === false) {\n\t\t\t\trunnable = false;\n\t\t\t\tvar vertexErrors = getShaderErrors(gl, glVertexShader, 'vertex');\n\t\t\t\tvar fragmentErrors = getShaderErrors(gl, glFragmentShader, 'fragment');\n\t\t\t\tconsole.error('THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter(program, 35715), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors);\n\t\t\t} else if (programLog !== '') {\n\t\t\t\tconsole.warn('THREE.WebGLProgram: gl.getProgramInfoLog()', programLog);\n\t\t\t} else if (vertexLog === '' || fragmentLog === '') {\n\t\t\t\thaveDiagnostics = false;\n\t\t\t}\n\n\t\t\tif (haveDiagnostics) {\n\t\t\t\tthis.diagnostics = {\n\t\t\t\t\trunnable: runnable,\n\t\t\t\t\tprogramLog: programLog,\n\t\t\t\t\tvertexShader: {\n\t\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\t\tprefix: prefixVertex\n\t\t\t\t\t},\n\t\t\t\t\tfragmentShader: {\n\t\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\t\tprefix: prefixFragment\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t} // Clean up\n\t\t// Crashes in iOS9 and iOS10. #18402\n\t\t// gl.detachShader( program, glVertexShader );\n\t\t// gl.detachShader( program, glFragmentShader );\n\n\n\t\tgl.deleteShader(glVertexShader);\n\t\tgl.deleteShader(glFragmentShader); // set up caching for uniform locations\n\n\t\tvar cachedUniforms;\n\n\t\tthis.getUniforms = function () {\n\t\t\tif (cachedUniforms === undefined) {\n\t\t\t\tcachedUniforms = new WebGLUniforms(gl, program);\n\t\t\t}\n\n\t\t\treturn cachedUniforms;\n\t\t}; // set up caching for attribute locations\n\n\n\t\tvar cachedAttributes;\n\n\t\tthis.getAttributes = function () {\n\t\t\tif (cachedAttributes === undefined) {\n\t\t\t\tcachedAttributes = fetchAttributeLocations(gl, program);\n\t\t\t}\n\n\t\t\treturn cachedAttributes;\n\t\t}; // free resource\n\n\n\t\tthis.destroy = function () {\n\t\t\tbindingStates.releaseStatesOfProgram(this);\n\t\t\tgl.deleteProgram(program);\n\t\t\tthis.program = undefined;\n\t\t}; //\n\n\n\t\tthis.name = parameters.shaderName;\n\t\tthis.id = programIdCount++;\n\t\tthis.cacheKey = cacheKey;\n\t\tthis.usedTimes = 1;\n\t\tthis.program = program;\n\t\tthis.vertexShader = glVertexShader;\n\t\tthis.fragmentShader = glFragmentShader;\n\t\treturn this;\n\t}\n\n\tfunction WebGLPrograms(renderer, cubemaps, extensions, capabilities, bindingStates, clipping) {\n\t\tvar programs = [];\n\t\tvar isWebGL2 = capabilities.isWebGL2;\n\t\tvar logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\t\tvar floatVertexTextures = capabilities.floatVertexTextures;\n\t\tvar maxVertexUniforms = capabilities.maxVertexUniforms;\n\t\tvar vertexTextures = capabilities.vertexTextures;\n\t\tvar precision = capabilities.precision;\n\t\tvar shaderIDs = {\n\t\t\tMeshDepthMaterial: 'depth',\n\t\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\t\tMeshNormalMaterial: 'normal',\n\t\t\tMeshBasicMaterial: 'basic',\n\t\t\tMeshLambertMaterial: 'lambert',\n\t\t\tMeshPhongMaterial: 'phong',\n\t\t\tMeshToonMaterial: 'toon',\n\t\t\tMeshStandardMaterial: 'physical',\n\t\t\tMeshPhysicalMaterial: 'physical',\n\t\t\tMeshMatcapMaterial: 'matcap',\n\t\t\tLineBasicMaterial: 'basic',\n\t\t\tLineDashedMaterial: 'dashed',\n\t\t\tPointsMaterial: 'points',\n\t\t\tShadowMaterial: 'shadow',\n\t\t\tSpriteMaterial: 'sprite'\n\t\t};\n\t\tvar parameterNames = ['precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor', 'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV', 'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap', 'objectSpaceNormalMap', 'tangentSpaceNormalMap', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap', 'displacementMap', 'specularMap', 'roughnessMap', 'metalnessMap', 'gradientMap', 'alphaMap', 'combine', 'vertexColors', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2', 'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning', 'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'maxMorphTargets', 'maxMorphNormals', 'premultipliedAlpha', 'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights', 'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows', 'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights', 'alphaTest', 'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering', 'sheen', 'transmissionMap'];\n\n\t\tfunction getMaxBones(object) {\n\t\t\tvar skeleton = object.skeleton;\n\t\t\tvar bones = skeleton.bones;\n\n\t\t\tif (floatVertexTextures) {\n\t\t\t\treturn 1024;\n\t\t\t} else {\n\t\t\t\t// default for when object is not specified\n\t\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t\t//\n\t\t\t\t//\t- leave some extra space for other uniforms\n\t\t\t\t//\t- limit here is ANGLE's 254 max uniform vectors\n\t\t\t\t//\t\t(up to 54 should be safe)\n\t\t\t\tvar nVertexUniforms = maxVertexUniforms;\n\t\t\t\tvar nVertexMatrices = Math.floor((nVertexUniforms - 20) / 4);\n\t\t\t\tvar maxBones = Math.min(nVertexMatrices, bones.length);\n\n\t\t\t\tif (maxBones < bones.length) {\n\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.');\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn maxBones;\n\t\t\t}\n\t\t}\n\n\t\tfunction getTextureEncodingFromMap(map) {\n\t\t\tvar encoding;\n\n\t\t\tif (map && map.isTexture) {\n\t\t\t\tencoding = map.encoding;\n\t\t\t} else if (map && map.isWebGLRenderTarget) {\n\t\t\t\tconsole.warn('THREE.WebGLPrograms.getTextureEncodingFromMap: don\\'t use render targets as textures. Use their .texture property instead.');\n\t\t\t\tencoding = map.texture.encoding;\n\t\t\t} else {\n\t\t\t\tencoding = LinearEncoding;\n\t\t\t}\n\n\t\t\treturn encoding;\n\t\t}\n\n\t\tfunction getParameters(material, lights, shadows, scene, object) {\n\t\t\tvar fog = scene.fog;\n\t\t\tvar environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tvar envMap = cubemaps.get(material.envMap || environment);\n\t\t\tvar shaderID = shaderIDs[material.type]; // heuristics to create shader parameters according to lights in the scene\n\t\t\t// (not to blow over maxLights budget)\n\n\t\t\tvar maxBones = object.isSkinnedMesh ? getMaxBones(object) : 0;\n\n\t\t\tif (material.precision !== null) {\n\t\t\t\tprecision = capabilities.getMaxPrecision(material.precision);\n\n\t\t\t\tif (precision !== material.precision) {\n\t\t\t\t\tconsole.warn('THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar vertexShader, fragmentShader;\n\n\t\t\tif (shaderID) {\n\t\t\t\tvar shader = ShaderLib[shaderID];\n\t\t\t\tvertexShader = shader.vertexShader;\n\t\t\t\tfragmentShader = shader.fragmentShader;\n\t\t\t} else {\n\t\t\t\tvertexShader = material.vertexShader;\n\t\t\t\tfragmentShader = material.fragmentShader;\n\t\t\t}\n\n\t\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\t\t\tvar parameters = {\n\t\t\t\tisWebGL2: isWebGL2,\n\t\t\t\tshaderID: shaderID,\n\t\t\t\tshaderName: material.type,\n\t\t\t\tvertexShader: vertexShader,\n\t\t\t\tfragmentShader: fragmentShader,\n\t\t\t\tdefines: material.defines,\n\t\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\t\tglslVersion: material.glslVersion,\n\t\t\t\tprecision: precision,\n\t\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\t\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\t\toutputEncoding: currentRenderTarget !== null ? getTextureEncodingFromMap(currentRenderTarget.texture) : renderer.outputEncoding,\n\t\t\t\tmap: !!material.map,\n\t\t\t\tmapEncoding: getTextureEncodingFromMap(material.map),\n\t\t\t\tmatcap: !!material.matcap,\n\t\t\t\tmatcapEncoding: getTextureEncodingFromMap(material.matcap),\n\t\t\t\tenvMap: !!envMap,\n\t\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\t\tenvMapEncoding: getTextureEncodingFromMap(envMap),\n\t\t\t\tenvMapCubeUV: !!envMap && (envMap.mapping === CubeUVReflectionMapping || envMap.mapping === CubeUVRefractionMapping),\n\t\t\t\tlightMap: !!material.lightMap,\n\t\t\t\tlightMapEncoding: getTextureEncodingFromMap(material.lightMap),\n\t\t\t\taoMap: !!material.aoMap,\n\t\t\t\temissiveMap: !!material.emissiveMap,\n\t\t\t\temissiveMapEncoding: getTextureEncodingFromMap(material.emissiveMap),\n\t\t\t\tbumpMap: !!material.bumpMap,\n\t\t\t\tnormalMap: !!material.normalMap,\n\t\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\t\t\t\tclearcoatMap: !!material.clearcoatMap,\n\t\t\t\tclearcoatRoughnessMap: !!material.clearcoatRoughnessMap,\n\t\t\t\tclearcoatNormalMap: !!material.clearcoatNormalMap,\n\t\t\t\tdisplacementMap: !!material.displacementMap,\n\t\t\t\troughnessMap: !!material.roughnessMap,\n\t\t\t\tmetalnessMap: !!material.metalnessMap,\n\t\t\t\tspecularMap: !!material.specularMap,\n\t\t\t\talphaMap: !!material.alphaMap,\n\t\t\t\tgradientMap: !!material.gradientMap,\n\t\t\t\tsheen: !!material.sheen,\n\t\t\t\ttransmissionMap: !!material.transmissionMap,\n\t\t\t\tcombine: material.combine,\n\t\t\t\tvertexTangents: material.normalMap && material.vertexTangents,\n\t\t\t\tvertexColors: material.vertexColors,\n\t\t\t\tvertexUvs: !!material.map || !!material.bumpMap || !!material.normalMap || !!material.specularMap || !!material.alphaMap || !!material.emissiveMap || !!material.roughnessMap || !!material.metalnessMap || !!material.clearcoatMap || !!material.clearcoatRoughnessMap || !!material.clearcoatNormalMap || !!material.displacementMap || !!material.transmissionMap,\n\t\t\t\tuvsVertexOnly: !(!!material.map || !!material.bumpMap || !!material.normalMap || !!material.specularMap || !!material.alphaMap || !!material.emissiveMap || !!material.roughnessMap || !!material.metalnessMap || !!material.clearcoatNormalMap || !!material.transmissionMap) && !!material.displacementMap,\n\t\t\t\tfog: !!fog,\n\t\t\t\tuseFog: material.fog,\n\t\t\t\tfogExp2: fog && fog.isFogExp2,\n\t\t\t\tflatShading: material.flatShading,\n\t\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\t\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\t\tmaxBones: maxBones,\n\t\t\t\tuseVertexTexture: floatVertexTextures,\n\t\t\t\tmorphTargets: material.morphTargets,\n\t\t\t\tmorphNormals: material.morphNormals,\n\t\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\t\t\t\tnumDirLights: lights.directional.length,\n\t\t\t\tnumPointLights: lights.point.length,\n\t\t\t\tnumSpotLights: lights.spot.length,\n\t\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\t\tnumHemiLights: lights.hemi.length,\n\t\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\t\tnumClipIntersection: clipping.numIntersection,\n\t\t\t\tdithering: material.dithering,\n\t\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\t\tshadowMapType: renderer.shadowMap.type,\n\t\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\t\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\t\t\t\talphaTest: material.alphaTest,\n\t\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\t\tflipSided: material.side === BackSide,\n\t\t\t\tdepthPacking: material.depthPacking !== undefined ? material.depthPacking : false,\n\t\t\t\tindex0AttributeName: material.index0AttributeName,\n\t\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\t\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has('EXT_frag_depth'),\n\t\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has('WEBGL_draw_buffers'),\n\t\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has('EXT_shader_texture_lod'),\n\t\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\t\t\t};\n\t\t\treturn parameters;\n\t\t}\n\n\t\tfunction getProgramCacheKey(parameters) {\n\t\t\tvar array = [];\n\n\t\t\tif (parameters.shaderID) {\n\t\t\t\tarray.push(parameters.shaderID);\n\t\t\t} else {\n\t\t\t\tarray.push(parameters.fragmentShader);\n\t\t\t\tarray.push(parameters.vertexShader);\n\t\t\t}\n\n\t\t\tif (parameters.defines !== undefined) {\n\t\t\t\tfor (var name in parameters.defines) {\n\t\t\t\t\tarray.push(name);\n\t\t\t\t\tarray.push(parameters.defines[name]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (parameters.isRawShaderMaterial === false) {\n\t\t\t\tfor (var i = 0; i < parameterNames.length; i++) {\n\t\t\t\t\tarray.push(parameters[parameterNames[i]]);\n\t\t\t\t}\n\n\t\t\t\tarray.push(renderer.outputEncoding);\n\t\t\t\tarray.push(renderer.gammaFactor);\n\t\t\t}\n\n\t\t\tarray.push(parameters.customProgramCacheKey);\n\t\t\treturn array.join();\n\t\t}\n\n\t\tfunction getUniforms(material) {\n\t\t\tvar shaderID = shaderIDs[material.type];\n\t\t\tvar uniforms;\n\n\t\t\tif (shaderID) {\n\t\t\t\tvar shader = ShaderLib[shaderID];\n\t\t\t\tuniforms = UniformsUtils.clone(shader.uniforms);\n\t\t\t} else {\n\t\t\t\tuniforms = material.uniforms;\n\t\t\t}\n\n\t\t\treturn uniforms;\n\t\t}\n\n\t\tfunction acquireProgram(parameters, cacheKey) {\n\t\t\tvar program; // Check if code has been already compiled\n\n\t\t\tfor (var p = 0, pl = programs.length; p < pl; p++) {\n\t\t\t\tvar preexistingProgram = programs[p];\n\n\t\t\t\tif (preexistingProgram.cacheKey === cacheKey) {\n\t\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t\t++program.usedTimes;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (program === undefined) {\n\t\t\t\tprogram = new WebGLProgram(renderer, cacheKey, parameters, bindingStates);\n\t\t\t\tprograms.push(program);\n\t\t\t}\n\n\t\t\treturn program;\n\t\t}\n\n\t\tfunction releaseProgram(program) {\n\t\t\tif (--program.usedTimes === 0) {\n\t\t\t\t// Remove from unordered set\n\t\t\t\tvar i = programs.indexOf(program);\n\t\t\t\tprograms[i] = programs[programs.length - 1];\n\t\t\t\tprograms.pop(); // Free WebGL resources\n\n\t\t\t\tprogram.destroy();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tgetParameters: getParameters,\n\t\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\t\tgetUniforms: getUniforms,\n\t\t\tacquireProgram: acquireProgram,\n\t\t\treleaseProgram: releaseProgram,\n\t\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\t\tprograms: programs\n\t\t};\n\t}\n\n\tfunction WebGLProperties() {\n\t\tvar properties = new WeakMap();\n\n\t\tfunction get(object) {\n\t\t\tvar map = properties.get(object);\n\n\t\t\tif (map === undefined) {\n\t\t\t\tmap = {};\n\t\t\t\tproperties.set(object, map);\n\t\t\t}\n\n\t\t\treturn map;\n\t\t}\n\n\t\tfunction remove(object) {\n\t\t\tproperties.delete(object);\n\t\t}\n\n\t\tfunction update(object, key, value) {\n\t\t\tproperties.get(object)[key] = value;\n\t\t}\n\n\t\tfunction dispose() {\n\t\t\tproperties = new WeakMap();\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tremove: remove,\n\t\t\tupdate: update,\n\t\t\tdispose: dispose\n\t\t};\n\t}\n\n\tfunction painterSortStable(a, b) {\n\t\tif (a.groupOrder !== b.groupOrder) {\n\t\t\treturn a.groupOrder - b.groupOrder;\n\t\t} else if (a.renderOrder !== b.renderOrder) {\n\t\t\treturn a.renderOrder - b.renderOrder;\n\t\t} else if (a.program !== b.program) {\n\t\t\treturn a.program.id - b.program.id;\n\t\t} else if (a.material.id !== b.material.id) {\n\t\t\treturn a.material.id - b.material.id;\n\t\t} else if (a.z !== b.z) {\n\t\t\treturn a.z - b.z;\n\t\t} else {\n\t\t\treturn a.id - b.id;\n\t\t}\n\t}\n\n\tfunction reversePainterSortStable(a, b) {\n\t\tif (a.groupOrder !== b.groupOrder) {\n\t\t\treturn a.groupOrder - b.groupOrder;\n\t\t} else if (a.renderOrder !== b.renderOrder) {\n\t\t\treturn a.renderOrder - b.renderOrder;\n\t\t} else if (a.z !== b.z) {\n\t\t\treturn b.z - a.z;\n\t\t} else {\n\t\t\treturn a.id - b.id;\n\t\t}\n\t}\n\n\tfunction WebGLRenderList(properties) {\n\t\tvar renderItems = [];\n\t\tvar renderItemsIndex = 0;\n\t\tvar opaque = [];\n\t\tvar transparent = [];\n\t\tvar defaultProgram = {\n\t\t\tid: -1\n\t\t};\n\n\t\tfunction init() {\n\t\t\trenderItemsIndex = 0;\n\t\t\topaque.length = 0;\n\t\t\ttransparent.length = 0;\n\t\t}\n\n\t\tfunction getNextRenderItem(object, geometry, material, groupOrder, z, group) {\n\t\t\tvar renderItem = renderItems[renderItemsIndex];\n\t\t\tvar materialProperties = properties.get(material);\n\n\t\t\tif (renderItem === undefined) {\n\t\t\t\trenderItem = {\n\t\t\t\t\tid: object.id,\n\t\t\t\t\tobject: object,\n\t\t\t\t\tgeometry: geometry,\n\t\t\t\t\tmaterial: material,\n\t\t\t\t\tprogram: materialProperties.program || defaultProgram,\n\t\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\t\tz: z,\n\t\t\t\t\tgroup: group\n\t\t\t\t};\n\t\t\t\trenderItems[renderItemsIndex] = renderItem;\n\t\t\t} else {\n\t\t\t\trenderItem.id = object.id;\n\t\t\t\trenderItem.object = object;\n\t\t\t\trenderItem.geometry = geometry;\n\t\t\t\trenderItem.material = material;\n\t\t\t\trenderItem.program = materialProperties.program || defaultProgram;\n\t\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\t\trenderItem.z = z;\n\t\t\t\trenderItem.group = group;\n\t\t\t}\n\n\t\t\trenderItemsIndex++;\n\t\t\treturn renderItem;\n\t\t}\n\n\t\tfunction push(object, geometry, material, groupOrder, z, group) {\n\t\t\tvar renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group);\n\t\t\t(material.transparent === true ? transparent : opaque).push(renderItem);\n\t\t}\n\n\t\tfunction unshift(object, geometry, material, groupOrder, z, group) {\n\t\t\tvar renderItem = getNextRenderItem(object, geometry, material, groupOrder, z, group);\n\t\t\t(material.transparent === true ? transparent : opaque).unshift(renderItem);\n\t\t}\n\n\t\tfunction sort(customOpaqueSort, customTransparentSort) {\n\t\t\tif (opaque.length > 1) opaque.sort(customOpaqueSort || painterSortStable);\n\t\t\tif (transparent.length > 1) transparent.sort(customTransparentSort || reversePainterSortStable);\n\t\t}\n\n\t\tfunction finish() {\n\t\t\t// Clear references from inactive renderItems in the list\n\t\t\tfor (var i = renderItemsIndex, il = renderItems.length; i < il; i++) {\n\t\t\t\tvar renderItem = renderItems[i];\n\t\t\t\tif (renderItem.id === null) break;\n\t\t\t\trenderItem.id = null;\n\t\t\t\trenderItem.object = null;\n\t\t\t\trenderItem.geometry = null;\n\t\t\t\trenderItem.material = null;\n\t\t\t\trenderItem.program = null;\n\t\t\t\trenderItem.group = null;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\topaque: opaque,\n\t\t\ttransparent: transparent,\n\t\t\tinit: init,\n\t\t\tpush: push,\n\t\t\tunshift: unshift,\n\t\t\tfinish: finish,\n\t\t\tsort: sort\n\t\t};\n\t}\n\n\tfunction WebGLRenderLists(properties) {\n\t\tvar lists = new WeakMap();\n\n\t\tfunction get(scene, camera) {\n\t\t\tvar cameras = lists.get(scene);\n\t\t\tvar list;\n\n\t\t\tif (cameras === undefined) {\n\t\t\t\tlist = new WebGLRenderList(properties);\n\t\t\t\tlists.set(scene, new WeakMap());\n\t\t\t\tlists.get(scene).set(camera, list);\n\t\t\t} else {\n\t\t\t\tlist = cameras.get(camera);\n\n\t\t\t\tif (list === undefined) {\n\t\t\t\t\tlist = new WebGLRenderList(properties);\n\t\t\t\t\tcameras.set(camera, list);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn list;\n\t\t}\n\n\t\tfunction dispose() {\n\t\t\tlists = new WeakMap();\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\t}\n\n\tfunction UniformsCache() {\n\t\tvar lights = {};\n\t\treturn {\n\t\t\tget: function get(light) {\n\t\t\t\tif (lights[light.id] !== undefined) {\n\t\t\t\t\treturn lights[light.id];\n\t\t\t\t}\n\n\t\t\t\tvar uniforms;\n\n\t\t\t\tswitch (light.type) {\n\t\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SpotLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tlights[light.id] = uniforms;\n\t\t\t\treturn uniforms;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction ShadowUniformsCache() {\n\t\tvar lights = {};\n\t\treturn {\n\t\t\tget: function get(light) {\n\t\t\t\tif (lights[light.id] !== undefined) {\n\t\t\t\t\treturn lights[light.id];\n\t\t\t\t}\n\n\t\t\t\tvar uniforms;\n\n\t\t\t\tswitch (light.type) {\n\t\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SpotLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\t\t\t\t}\n\n\t\t\t\tlights[light.id] = uniforms;\n\t\t\t\treturn uniforms;\n\t\t\t}\n\t\t};\n\t}\n\n\tvar nextVersion = 0;\n\n\tfunction shadowCastingLightsFirst(lightA, lightB) {\n\t\treturn (lightB.castShadow ? 1 : 0) - (lightA.castShadow ? 1 : 0);\n\t}\n\n\tfunction WebGLLights(extensions, capabilities) {\n\t\tvar cache = new UniformsCache();\n\t\tvar shadowCache = ShadowUniformsCache();\n\t\tvar state = {\n\t\t\tversion: 0,\n\t\t\thash: {\n\t\t\t\tdirectionalLength: -1,\n\t\t\t\tpointLength: -1,\n\t\t\t\tspotLength: -1,\n\t\t\t\trectAreaLength: -1,\n\t\t\t\themiLength: -1,\n\t\t\t\tnumDirectionalShadows: -1,\n\t\t\t\tnumPointShadows: -1,\n\t\t\t\tnumSpotShadows: -1\n\t\t\t},\n\t\t\tambient: [0, 0, 0],\n\t\t\tprobe: [],\n\t\t\tdirectional: [],\n\t\t\tdirectionalShadow: [],\n\t\t\tdirectionalShadowMap: [],\n\t\t\tdirectionalShadowMatrix: [],\n\t\t\tspot: [],\n\t\t\tspotShadow: [],\n\t\t\tspotShadowMap: [],\n\t\t\tspotShadowMatrix: [],\n\t\t\trectArea: [],\n\t\t\trectAreaLTC1: null,\n\t\t\trectAreaLTC2: null,\n\t\t\tpoint: [],\n\t\t\tpointShadow: [],\n\t\t\tpointShadowMap: [],\n\t\t\tpointShadowMatrix: [],\n\t\t\themi: []\n\t\t};\n\n\t\tfor (var i = 0; i < 9; i++) {\n\t\t\tstate.probe.push(new Vector3());\n\t\t}\n\n\t\tvar vector3 = new Vector3();\n\t\tvar matrix4 = new Matrix4();\n\t\tvar matrix42 = new Matrix4();\n\n\t\tfunction setup(lights) {\n\t\t\tvar r = 0,\n\t\t\t\t\tg = 0,\n\t\t\t\t\tb = 0;\n\n\t\t\tfor (var _i = 0; _i < 9; _i++) {\n\t\t\t\tstate.probe[_i].set(0, 0, 0);\n\t\t\t}\n\n\t\t\tvar directionalLength = 0;\n\t\t\tvar pointLength = 0;\n\t\t\tvar spotLength = 0;\n\t\t\tvar rectAreaLength = 0;\n\t\t\tvar hemiLength = 0;\n\t\t\tvar numDirectionalShadows = 0;\n\t\t\tvar numPointShadows = 0;\n\t\t\tvar numSpotShadows = 0;\n\t\t\tlights.sort(shadowCastingLightsFirst);\n\n\t\t\tfor (var _i2 = 0, l = lights.length; _i2 < l; _i2++) {\n\t\t\t\tvar light = lights[_i2];\n\t\t\t\tvar color = light.color;\n\t\t\t\tvar intensity = light.intensity;\n\t\t\t\tvar distance = light.distance;\n\t\t\t\tvar shadowMap = light.shadow && light.shadow.map ? light.shadow.map.texture : null;\n\n\t\t\t\tif (light.isAmbientLight) {\n\t\t\t\t\tr += color.r * intensity;\n\t\t\t\t\tg += color.g * intensity;\n\t\t\t\t\tb += color.b * intensity;\n\t\t\t\t} else if (light.isLightProbe) {\n\t\t\t\t\tfor (var j = 0; j < 9; j++) {\n\t\t\t\t\t\tstate.probe[j].addScaledVector(light.sh.coefficients[j], intensity);\n\t\t\t\t\t}\n\t\t\t\t} else if (light.isDirectionalLight) {\n\t\t\t\t\tvar uniforms = cache.get(light);\n\t\t\t\t\tuniforms.color.copy(light.color).multiplyScalar(light.intensity);\n\n\t\t\t\t\tif (light.castShadow) {\n\t\t\t\t\t\tvar shadow = light.shadow;\n\t\t\t\t\t\tvar shadowUniforms = shadowCache.get(light);\n\t\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\t\tstate.directionalShadow[directionalLength] = shadowUniforms;\n\t\t\t\t\t\tstate.directionalShadowMap[directionalLength] = shadowMap;\n\t\t\t\t\t\tstate.directionalShadowMatrix[directionalLength] = light.shadow.matrix;\n\t\t\t\t\t\tnumDirectionalShadows++;\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.directional[directionalLength] = uniforms;\n\t\t\t\t\tdirectionalLength++;\n\t\t\t\t} else if (light.isSpotLight) {\n\t\t\t\t\tvar _uniforms = cache.get(light);\n\n\t\t\t\t\t_uniforms.position.setFromMatrixPosition(light.matrixWorld);\n\n\t\t\t\t\t_uniforms.color.copy(color).multiplyScalar(intensity);\n\n\t\t\t\t\t_uniforms.distance = distance;\n\t\t\t\t\t_uniforms.coneCos = Math.cos(light.angle);\n\t\t\t\t\t_uniforms.penumbraCos = Math.cos(light.angle * (1 - light.penumbra));\n\t\t\t\t\t_uniforms.decay = light.decay;\n\n\t\t\t\t\tif (light.castShadow) {\n\t\t\t\t\t\tvar _shadow = light.shadow;\n\n\t\t\t\t\t\tvar _shadowUniforms = shadowCache.get(light);\n\n\t\t\t\t\t\t_shadowUniforms.shadowBias = _shadow.bias;\n\t\t\t\t\t\t_shadowUniforms.shadowNormalBias = _shadow.normalBias;\n\t\t\t\t\t\t_shadowUniforms.shadowRadius = _shadow.radius;\n\t\t\t\t\t\t_shadowUniforms.shadowMapSize = _shadow.mapSize;\n\t\t\t\t\t\tstate.spotShadow[spotLength] = _shadowUniforms;\n\t\t\t\t\t\tstate.spotShadowMap[spotLength] = shadowMap;\n\t\t\t\t\t\tstate.spotShadowMatrix[spotLength] = light.shadow.matrix;\n\t\t\t\t\t\tnumSpotShadows++;\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.spot[spotLength] = _uniforms;\n\t\t\t\t\tspotLength++;\n\t\t\t\t} else if (light.isRectAreaLight) {\n\t\t\t\t\tvar _uniforms2 = cache.get(light); // (a) intensity is the total visible light emitted\n\t\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\t\t\t\t\t// (b) intensity is the brightness of the light\n\n\n\t\t\t\t\t_uniforms2.color.copy(color).multiplyScalar(intensity);\n\n\t\t\t\t\t_uniforms2.halfWidth.set(light.width * 0.5, 0.0, 0.0);\n\n\t\t\t\t\t_uniforms2.halfHeight.set(0.0, light.height * 0.5, 0.0);\n\n\t\t\t\t\tstate.rectArea[rectAreaLength] = _uniforms2;\n\t\t\t\t\trectAreaLength++;\n\t\t\t\t} else if (light.isPointLight) {\n\t\t\t\t\tvar _uniforms3 = cache.get(light);\n\n\t\t\t\t\t_uniforms3.color.copy(light.color).multiplyScalar(light.intensity);\n\n\t\t\t\t\t_uniforms3.distance = light.distance;\n\t\t\t\t\t_uniforms3.decay = light.decay;\n\n\t\t\t\t\tif (light.castShadow) {\n\t\t\t\t\t\tvar _shadow2 = light.shadow;\n\n\t\t\t\t\t\tvar _shadowUniforms2 = shadowCache.get(light);\n\n\t\t\t\t\t\t_shadowUniforms2.shadowBias = _shadow2.bias;\n\t\t\t\t\t\t_shadowUniforms2.shadowNormalBias = _shadow2.normalBias;\n\t\t\t\t\t\t_shadowUniforms2.shadowRadius = _shadow2.radius;\n\t\t\t\t\t\t_shadowUniforms2.shadowMapSize = _shadow2.mapSize;\n\t\t\t\t\t\t_shadowUniforms2.shadowCameraNear = _shadow2.camera.near;\n\t\t\t\t\t\t_shadowUniforms2.shadowCameraFar = _shadow2.camera.far;\n\t\t\t\t\t\tstate.pointShadow[pointLength] = _shadowUniforms2;\n\t\t\t\t\t\tstate.pointShadowMap[pointLength] = shadowMap;\n\t\t\t\t\t\tstate.pointShadowMatrix[pointLength] = light.shadow.matrix;\n\t\t\t\t\t\tnumPointShadows++;\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.point[pointLength] = _uniforms3;\n\t\t\t\t\tpointLength++;\n\t\t\t\t} else if (light.isHemisphereLight) {\n\t\t\t\t\tvar _uniforms4 = cache.get(light);\n\n\t\t\t\t\t_uniforms4.skyColor.copy(light.color).multiplyScalar(intensity);\n\n\t\t\t\t\t_uniforms4.groundColor.copy(light.groundColor).multiplyScalar(intensity);\n\n\t\t\t\t\tstate.hemi[hemiLength] = _uniforms4;\n\t\t\t\t\themiLength++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (rectAreaLength > 0) {\n\t\t\t\tif (capabilities.isWebGL2) {\n\t\t\t\t\t// WebGL 2\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\t\t\t\t} else {\n\t\t\t\t\t// WebGL 1\n\t\t\t\t\tif (extensions.has('OES_texture_float_linear') === true) {\n\t\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\t\t\t\t\t} else if (extensions.has('OES_texture_half_float_linear') === true) {\n\t\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error('THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstate.ambient[0] = r;\n\t\t\tstate.ambient[1] = g;\n\t\t\tstate.ambient[2] = b;\n\t\t\tvar hash = state.hash;\n\n\t\t\tif (hash.directionalLength !== directionalLength || hash.pointLength !== pointLength || hash.spotLength !== spotLength || hash.rectAreaLength !== rectAreaLength || hash.hemiLength !== hemiLength || hash.numDirectionalShadows !== numDirectionalShadows || hash.numPointShadows !== numPointShadows || hash.numSpotShadows !== numSpotShadows) {\n\t\t\t\tstate.directional.length = directionalLength;\n\t\t\t\tstate.spot.length = spotLength;\n\t\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\t\tstate.point.length = pointLength;\n\t\t\t\tstate.hemi.length = hemiLength;\n\t\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\t\t\t\thash.directionalLength = directionalLength;\n\t\t\t\thash.pointLength = pointLength;\n\t\t\t\thash.spotLength = spotLength;\n\t\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\t\thash.hemiLength = hemiLength;\n\t\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\t\thash.numPointShadows = numPointShadows;\n\t\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\t\tstate.version = nextVersion++;\n\t\t\t}\n\t\t}\n\n\t\tfunction setupView(lights, camera) {\n\t\t\tvar directionalLength = 0;\n\t\t\tvar pointLength = 0;\n\t\t\tvar spotLength = 0;\n\t\t\tvar rectAreaLength = 0;\n\t\t\tvar hemiLength = 0;\n\t\t\tvar viewMatrix = camera.matrixWorldInverse;\n\n\t\t\tfor (var _i3 = 0, l = lights.length; _i3 < l; _i3++) {\n\t\t\t\tvar light = lights[_i3];\n\n\t\t\t\tif (light.isDirectionalLight) {\n\t\t\t\t\tvar uniforms = state.directional[directionalLength];\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition(light.matrixWorld);\n\t\t\t\t\tvector3.setFromMatrixPosition(light.target.matrixWorld);\n\t\t\t\t\tuniforms.direction.sub(vector3);\n\t\t\t\t\tuniforms.direction.transformDirection(viewMatrix);\n\t\t\t\t\tdirectionalLength++;\n\t\t\t\t} else if (light.isSpotLight) {\n\t\t\t\t\tvar _uniforms5 = state.spot[spotLength];\n\n\t\t\t\t\t_uniforms5.position.setFromMatrixPosition(light.matrixWorld);\n\n\t\t\t\t\t_uniforms5.position.applyMatrix4(viewMatrix);\n\n\t\t\t\t\t_uniforms5.direction.setFromMatrixPosition(light.matrixWorld);\n\n\t\t\t\t\tvector3.setFromMatrixPosition(light.target.matrixWorld);\n\n\t\t\t\t\t_uniforms5.direction.sub(vector3);\n\n\t\t\t\t\t_uniforms5.direction.transformDirection(viewMatrix);\n\n\t\t\t\t\tspotLength++;\n\t\t\t\t} else if (light.isRectAreaLight) {\n\t\t\t\t\tvar _uniforms6 = state.rectArea[rectAreaLength];\n\n\t\t\t\t\t_uniforms6.position.setFromMatrixPosition(light.matrixWorld);\n\n\t\t\t\t\t_uniforms6.position.applyMatrix4(viewMatrix); // extract local rotation of light to derive width/height half vectors\n\n\n\t\t\t\t\tmatrix42.identity();\n\t\t\t\t\tmatrix4.copy(light.matrixWorld);\n\t\t\t\t\tmatrix4.premultiply(viewMatrix);\n\t\t\t\t\tmatrix42.extractRotation(matrix4);\n\n\t\t\t\t\t_uniforms6.halfWidth.set(light.width * 0.5, 0.0, 0.0);\n\n\t\t\t\t\t_uniforms6.halfHeight.set(0.0, light.height * 0.5, 0.0);\n\n\t\t\t\t\t_uniforms6.halfWidth.applyMatrix4(matrix42);\n\n\t\t\t\t\t_uniforms6.halfHeight.applyMatrix4(matrix42);\n\n\t\t\t\t\trectAreaLength++;\n\t\t\t\t} else if (light.isPointLight) {\n\t\t\t\t\tvar _uniforms7 = state.point[pointLength];\n\n\t\t\t\t\t_uniforms7.position.setFromMatrixPosition(light.matrixWorld);\n\n\t\t\t\t\t_uniforms7.position.applyMatrix4(viewMatrix);\n\n\t\t\t\t\tpointLength++;\n\t\t\t\t} else if (light.isHemisphereLight) {\n\t\t\t\t\tvar _uniforms8 = state.hemi[hemiLength];\n\n\t\t\t\t\t_uniforms8.direction.setFromMatrixPosition(light.matrixWorld);\n\n\t\t\t\t\t_uniforms8.direction.transformDirection(viewMatrix);\n\n\t\t\t\t\t_uniforms8.direction.normalize();\n\n\t\t\t\t\themiLength++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsetup: setup,\n\t\t\tsetupView: setupView,\n\t\t\tstate: state\n\t\t};\n\t}\n\n\tfunction WebGLRenderState(extensions, capabilities) {\n\t\tvar lights = new WebGLLights(extensions, capabilities);\n\t\tvar lightsArray = [];\n\t\tvar shadowsArray = [];\n\n\t\tfunction init() {\n\t\t\tlightsArray.length = 0;\n\t\t\tshadowsArray.length = 0;\n\t\t}\n\n\t\tfunction pushLight(light) {\n\t\t\tlightsArray.push(light);\n\t\t}\n\n\t\tfunction pushShadow(shadowLight) {\n\t\t\tshadowsArray.push(shadowLight);\n\t\t}\n\n\t\tfunction setupLights() {\n\t\t\tlights.setup(lightsArray);\n\t\t}\n\n\t\tfunction setupLightsView(camera) {\n\t\t\tlights.setupView(lightsArray, camera);\n\t\t}\n\n\t\tvar state = {\n\t\t\tlightsArray: lightsArray,\n\t\t\tshadowsArray: shadowsArray,\n\t\t\tlights: lights\n\t\t};\n\t\treturn {\n\t\t\tinit: init,\n\t\t\tstate: state,\n\t\t\tsetupLights: setupLights,\n\t\t\tsetupLightsView: setupLightsView,\n\t\t\tpushLight: pushLight,\n\t\t\tpushShadow: pushShadow\n\t\t};\n\t}\n\n\tfunction WebGLRenderStates(extensions, capabilities) {\n\t\tvar renderStates = new WeakMap();\n\n\t\tfunction get(scene, renderCallDepth) {\n\t\t\tif (renderCallDepth === void 0) {\n\t\t\t\trenderCallDepth = 0;\n\t\t\t}\n\n\t\t\tvar renderState;\n\n\t\t\tif (renderStates.has(scene) === false) {\n\t\t\t\trenderState = new WebGLRenderState(extensions, capabilities);\n\t\t\t\trenderStates.set(scene, []);\n\t\t\t\trenderStates.get(scene).push(renderState);\n\t\t\t} else {\n\t\t\t\tif (renderCallDepth >= renderStates.get(scene).length) {\n\t\t\t\t\trenderState = new WebGLRenderState(extensions, capabilities);\n\t\t\t\t\trenderStates.get(scene).push(renderState);\n\t\t\t\t} else {\n\t\t\t\t\trenderState = renderStates.get(scene)[renderCallDepth];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn renderState;\n\t\t}\n\n\t\tfunction dispose() {\n\t\t\trenderStates = new WeakMap();\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\t}\n\n\t/**\n\t * parameters = {\n\t *\n\t *\topacity: <float>,\n\t *\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tdisplacementMap: new THREE.Texture( <Image> ),\n\t *\tdisplacementScale: <float>,\n\t *\tdisplacementBias: <float>,\n\t *\n\t *\twireframe: <boolean>,\n\t *\twireframeLinewidth: <float>\n\t * }\n\t */\n\n\tfunction MeshDepthMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'MeshDepthMaterial';\n\t\tthis.depthPacking = BasicDepthPacking;\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.map = null;\n\t\tthis.alphaMap = null;\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.fog = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshDepthMaterial.prototype = Object.create(Material.prototype);\n\tMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\tMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n\tMeshDepthMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.depthPacking = source.depthPacking;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.map = source.map;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\treturn this;\n\t};\n\n\t/**\n\t * parameters = {\n\t *\n\t *\treferencePosition: <float>,\n\t *\tnearDistance: <float>,\n\t *\tfarDistance: <float>,\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>,\n\t *\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tdisplacementMap: new THREE.Texture( <Image> ),\n\t *\tdisplacementScale: <float>,\n\t *\tdisplacementBias: <float>\n\t *\n\t * }\n\t */\n\n\tfunction MeshDistanceMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'MeshDistanceMaterial';\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.map = null;\n\t\tthis.alphaMap = null;\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\t\tthis.fog = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshDistanceMaterial.prototype = Object.create(Material.prototype);\n\tMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\tMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\n\tMeshDistanceMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.referencePosition.copy(source.referencePosition);\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.map = source.map;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\t\treturn this;\n\t};\n\n\tvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include <packing>\\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\n\tvar vsm_vert = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\n\tfunction WebGLShadowMap(_renderer, _objects, maxTextureSize) {\n\t\tvar _frustum = new Frustum();\n\n\t\tvar _shadowMapSize = new Vector2(),\n\t\t\t\t_viewportSize = new Vector2(),\n\t\t\t\t_viewport = new Vector4(),\n\t\t\t\t_depthMaterials = [],\n\t\t\t\t_distanceMaterials = [],\n\t\t\t\t_materialCache = {};\n\n\t\tvar shadowSide = {\n\t\t\t0: BackSide,\n\t\t\t1: FrontSide,\n\t\t\t2: DoubleSide\n\t\t};\n\t\tvar shadowMaterialVertical = new ShaderMaterial({\n\t\t\tdefines: {\n\t\t\t\tSAMPLE_RATE: 2.0 / 8.0,\n\t\t\t\tHALF_SAMPLE_RATE: 1.0 / 8.0\n\t\t\t},\n\t\t\tuniforms: {\n\t\t\t\tshadow_pass: {\n\t\t\t\t\tvalue: null\n\t\t\t\t},\n\t\t\t\tresolution: {\n\t\t\t\t\tvalue: new Vector2()\n\t\t\t\t},\n\t\t\t\tradius: {\n\t\t\t\t\tvalue: 4.0\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: vsm_vert,\n\t\t\tfragmentShader: vsm_frag\n\t\t});\n\t\tvar shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\t\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\t\tvar fullScreenTri = new BufferGeometry();\n\t\tfullScreenTri.setAttribute('position', new BufferAttribute(new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), 3));\n\t\tvar fullScreenMesh = new Mesh(fullScreenTri, shadowMaterialVertical);\n\t\tvar scope = this;\n\t\tthis.enabled = false;\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\t\tthis.type = PCFShadowMap;\n\n\t\tthis.render = function (lights, scene, camera) {\n\t\t\tif (scope.enabled === false) return;\n\t\t\tif (scope.autoUpdate === false && scope.needsUpdate === false) return;\n\t\t\tif (lights.length === 0) return;\n\n\t\t\tvar currentRenderTarget = _renderer.getRenderTarget();\n\n\t\t\tvar activeCubeFace = _renderer.getActiveCubeFace();\n\n\t\t\tvar activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\t\tvar _state = _renderer.state; // Set GL state for depth map.\n\n\t\t\t_state.setBlending(NoBlending);\n\n\t\t\t_state.buffers.color.setClear(1, 1, 1, 1);\n\n\t\t\t_state.buffers.depth.setTest(true);\n\n\t\t\t_state.setScissorTest(false); // render depth map\n\n\n\t\t\tfor (var i = 0, il = lights.length; i < il; i++) {\n\t\t\t\tvar light = lights[i];\n\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\tif (shadow === undefined) {\n\t\t\t\t\tconsole.warn('THREE.WebGLShadowMap:', light, 'has no shadow.');\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (shadow.autoUpdate === false && shadow.needsUpdate === false) continue;\n\n\t\t\t\t_shadowMapSize.copy(shadow.mapSize);\n\n\t\t\t\tvar shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t\t_shadowMapSize.multiply(shadowFrameExtents);\n\n\t\t\t\t_viewportSize.copy(shadow.mapSize);\n\n\t\t\t\tif (_shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize) {\n\t\t\t\t\tif (_shadowMapSize.x > maxTextureSize) {\n\t\t\t\t\t\t_viewportSize.x = Math.floor(maxTextureSize / shadowFrameExtents.x);\n\t\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_shadowMapSize.y > maxTextureSize) {\n\t\t\t\t\t\t_viewportSize.y = Math.floor(maxTextureSize / shadowFrameExtents.y);\n\t\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (shadow.map === null && !shadow.isPointLightShadow && this.type === VSMShadowMap) {\n\t\t\t\t\tvar pars = {\n\t\t\t\t\t\tminFilter: LinearFilter,\n\t\t\t\t\t\tmagFilter: LinearFilter,\n\t\t\t\t\t\tformat: RGBAFormat\n\t\t\t\t\t};\n\t\t\t\t\tshadow.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars);\n\t\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\t\t\t\t\tshadow.mapPass = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, pars);\n\t\t\t\t\tshadow.camera.updateProjectionMatrix();\n\t\t\t\t}\n\n\t\t\t\tif (shadow.map === null) {\n\t\t\t\t\tvar _pars = {\n\t\t\t\t\t\tminFilter: NearestFilter,\n\t\t\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\t\t\tformat: RGBAFormat\n\t\t\t\t\t};\n\t\t\t\t\tshadow.map = new WebGLRenderTarget(_shadowMapSize.x, _shadowMapSize.y, _pars);\n\t\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\t\t\t\t\tshadow.camera.updateProjectionMatrix();\n\t\t\t\t}\n\n\t\t\t\t_renderer.setRenderTarget(shadow.map);\n\n\t\t\t\t_renderer.clear();\n\n\t\t\t\tvar viewportCount = shadow.getViewportCount();\n\n\t\t\t\tfor (var vp = 0; vp < viewportCount; vp++) {\n\t\t\t\t\tvar viewport = shadow.getViewport(vp);\n\n\t\t\t\t\t_viewport.set(_viewportSize.x * viewport.x, _viewportSize.y * viewport.y, _viewportSize.x * viewport.z, _viewportSize.y * viewport.w);\n\n\t\t\t\t\t_state.viewport(_viewport);\n\n\t\t\t\t\tshadow.updateMatrices(light, vp);\n\t\t\t\t\t_frustum = shadow.getFrustum();\n\t\t\t\t\trenderObject(scene, camera, shadow.camera, light, this.type);\n\t\t\t\t} // do blur pass for VSM\n\n\n\t\t\t\tif (!shadow.isPointLightShadow && this.type === VSMShadowMap) {\n\t\t\t\t\tVSMPass(shadow, camera);\n\t\t\t\t}\n\n\t\t\t\tshadow.needsUpdate = false;\n\t\t\t}\n\n\t\t\tscope.needsUpdate = false;\n\n\t\t\t_renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel);\n\t\t};\n\n\t\tfunction VSMPass(shadow, camera) {\n\t\t\tvar geometry = _objects.update(fullScreenMesh); // vertical pass\n\n\n\t\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\n\t\t\t_renderer.setRenderTarget(shadow.mapPass);\n\n\t\t\t_renderer.clear();\n\n\t\t\t_renderer.renderBufferDirect(camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null); // horizontal pass\n\n\n\t\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\n\t\t\t_renderer.setRenderTarget(shadow.map);\n\n\t\t\t_renderer.clear();\n\n\t\t\t_renderer.renderBufferDirect(camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null);\n\t\t}\n\n\t\tfunction getDepthMaterialVariant(useMorphing, useSkinning, useInstancing) {\n\t\t\tvar index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\t\t\tvar material = _depthMaterials[index];\n\n\t\t\tif (material === undefined) {\n\t\t\t\tmaterial = new MeshDepthMaterial({\n\t\t\t\t\tdepthPacking: RGBADepthPacking,\n\t\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\t\tskinning: useSkinning\n\t\t\t\t});\n\t\t\t\t_depthMaterials[index] = material;\n\t\t\t}\n\n\t\t\treturn material;\n\t\t}\n\n\t\tfunction getDistanceMaterialVariant(useMorphing, useSkinning, useInstancing) {\n\t\t\tvar index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\t\t\tvar material = _distanceMaterials[index];\n\n\t\t\tif (material === undefined) {\n\t\t\t\tmaterial = new MeshDistanceMaterial({\n\t\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\t\tskinning: useSkinning\n\t\t\t\t});\n\t\t\t\t_distanceMaterials[index] = material;\n\t\t\t}\n\n\t\t\treturn material;\n\t\t}\n\n\t\tfunction getDepthMaterial(object, geometry, material, light, shadowCameraNear, shadowCameraFar, type) {\n\t\t\tvar result = null;\n\t\t\tvar getMaterialVariant = getDepthMaterialVariant;\n\t\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\t\tif (light.isPointLight === true) {\n\t\t\t\tgetMaterialVariant = getDistanceMaterialVariant;\n\t\t\t\tcustomMaterial = object.customDistanceMaterial;\n\t\t\t}\n\n\t\t\tif (customMaterial === undefined) {\n\t\t\t\tvar useMorphing = false;\n\n\t\t\t\tif (material.morphTargets === true) {\n\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\t\t\t\t}\n\n\t\t\t\tvar useSkinning = false;\n\n\t\t\t\tif (object.isSkinnedMesh === true) {\n\t\t\t\t\tif (material.skinning === true) {\n\t\t\t\t\t\tuseSkinning = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn('THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar useInstancing = object.isInstancedMesh === true;\n\t\t\t\tresult = getMaterialVariant(useMorphing, useSkinning, useInstancing);\n\t\t\t} else {\n\t\t\t\tresult = customMaterial;\n\t\t\t}\n\n\t\t\tif (_renderer.localClippingEnabled && material.clipShadows === true && material.clippingPlanes.length !== 0) {\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\t\t\t\tvar keyA = result.uuid,\n\t\t\t\t\t\tkeyB = material.uuid;\n\t\t\t\tvar materialsForVariant = _materialCache[keyA];\n\n\t\t\t\tif (materialsForVariant === undefined) {\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[keyA] = materialsForVariant;\n\t\t\t\t}\n\n\t\t\t\tvar cachedMaterial = materialsForVariant[keyB];\n\n\t\t\t\tif (cachedMaterial === undefined) {\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[keyB] = cachedMaterial;\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\t\t\t}\n\n\t\t\tresult.visible = material.visible;\n\t\t\tresult.wireframe = material.wireframe;\n\n\t\t\tif (type === VSMShadowMap) {\n\t\t\t\tresult.side = material.shadowSide !== null ? material.shadowSide : material.side;\n\t\t\t} else {\n\t\t\t\tresult.side = material.shadowSide !== null ? material.shadowSide : shadowSide[material.side];\n\t\t\t}\n\n\t\t\tresult.clipShadows = material.clipShadows;\n\t\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\t\tresult.clipIntersection = material.clipIntersection;\n\t\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\t\tresult.linewidth = material.linewidth;\n\n\t\t\tif (light.isPointLight === true && result.isMeshDistanceMaterial === true) {\n\t\t\t\tresult.referencePosition.setFromMatrixPosition(light.matrixWorld);\n\t\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\t\tresult.farDistance = shadowCameraFar;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tfunction renderObject(object, camera, shadowCamera, light, type) {\n\t\t\tif (object.visible === false) return;\n\t\t\tvar visible = object.layers.test(camera.layers);\n\n\t\t\tif (visible && (object.isMesh || object.isLine || object.isPoints)) {\n\t\t\t\tif ((object.castShadow || object.receiveShadow && type === VSMShadowMap) && (!object.frustumCulled || _frustum.intersectsObject(object))) {\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse, object.matrixWorld);\n\n\t\t\t\t\tvar geometry = _objects.update(object);\n\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tif (Array.isArray(material)) {\n\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\tfor (var k = 0, kl = groups.length; k < kl; k++) {\n\t\t\t\t\t\t\tvar group = groups[k];\n\t\t\t\t\t\t\tvar groupMaterial = material[group.materialIndex];\n\n\t\t\t\t\t\t\tif (groupMaterial && groupMaterial.visible) {\n\t\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial(object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type);\n\n\t\t\t\t\t\t\t\t_renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, group);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (material.visible) {\n\t\t\t\t\t\tvar _depthMaterial = getDepthMaterial(object, geometry, material, light, shadowCamera.near, shadowCamera.far, type);\n\n\t\t\t\t\t\t_renderer.renderBufferDirect(shadowCamera, null, geometry, _depthMaterial, object, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar children = object.children;\n\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\trenderObject(children[i], camera, shadowCamera, light, type);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction WebGLState(gl, extensions, capabilities) {\n\t\tvar _equationToGL, _factorToGL;\n\n\t\tvar isWebGL2 = capabilities.isWebGL2;\n\n\t\tfunction ColorBuffer() {\n\t\t\tvar locked = false;\n\t\t\tvar color = new Vector4();\n\t\t\tvar currentColorMask = null;\n\t\t\tvar currentColorClear = new Vector4(0, 0, 0, 0);\n\t\t\treturn {\n\t\t\t\tsetMask: function setMask(colorMask) {\n\t\t\t\t\tif (currentColorMask !== colorMask && !locked) {\n\t\t\t\t\t\tgl.colorMask(colorMask, colorMask, colorMask, colorMask);\n\t\t\t\t\t\tcurrentColorMask = colorMask;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetLocked: function setLocked(lock) {\n\t\t\t\t\tlocked = lock;\n\t\t\t\t},\n\t\t\t\tsetClear: function setClear(r, g, b, a, premultipliedAlpha) {\n\t\t\t\t\tif (premultipliedAlpha === true) {\n\t\t\t\t\t\tr *= a;\n\t\t\t\t\t\tg *= a;\n\t\t\t\t\t\tb *= a;\n\t\t\t\t\t}\n\n\t\t\t\t\tcolor.set(r, g, b, a);\n\n\t\t\t\t\tif (currentColorClear.equals(color) === false) {\n\t\t\t\t\t\tgl.clearColor(r, g, b, a);\n\t\t\t\t\t\tcurrentColorClear.copy(color);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\treset: function reset() {\n\t\t\t\t\tlocked = false;\n\t\t\t\t\tcurrentColorMask = null;\n\t\t\t\t\tcurrentColorClear.set(-1, 0, 0, 0); // set to invalid state\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction DepthBuffer() {\n\t\t\tvar locked = false;\n\t\t\tvar currentDepthMask = null;\n\t\t\tvar currentDepthFunc = null;\n\t\t\tvar currentDepthClear = null;\n\t\t\treturn {\n\t\t\t\tsetTest: function setTest(depthTest) {\n\t\t\t\t\tif (depthTest) {\n\t\t\t\t\t\tenable(2929);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdisable(2929);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetMask: function setMask(depthMask) {\n\t\t\t\t\tif (currentDepthMask !== depthMask && !locked) {\n\t\t\t\t\t\tgl.depthMask(depthMask);\n\t\t\t\t\t\tcurrentDepthMask = depthMask;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetFunc: function setFunc(depthFunc) {\n\t\t\t\t\tif (currentDepthFunc !== depthFunc) {\n\t\t\t\t\t\tif (depthFunc) {\n\t\t\t\t\t\t\tswitch (depthFunc) {\n\t\t\t\t\t\t\t\tcase NeverDepth:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(512);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase AlwaysDepth:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(519);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase LessDepth:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(513);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase LessEqualDepth:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(515);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase EqualDepth:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(514);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(518);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase GreaterDepth:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(516);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase NotEqualDepth:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(517);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tgl.depthFunc(515);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tgl.depthFunc(515);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetLocked: function setLocked(lock) {\n\t\t\t\t\tlocked = lock;\n\t\t\t\t},\n\t\t\t\tsetClear: function setClear(depth) {\n\t\t\t\t\tif (currentDepthClear !== depth) {\n\t\t\t\t\t\tgl.clearDepth(depth);\n\t\t\t\t\t\tcurrentDepthClear = depth;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\treset: function reset() {\n\t\t\t\t\tlocked = false;\n\t\t\t\t\tcurrentDepthMask = null;\n\t\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\t\tcurrentDepthClear = null;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction StencilBuffer() {\n\t\t\tvar locked = false;\n\t\t\tvar currentStencilMask = null;\n\t\t\tvar currentStencilFunc = null;\n\t\t\tvar currentStencilRef = null;\n\t\t\tvar currentStencilFuncMask = null;\n\t\t\tvar currentStencilFail = null;\n\t\t\tvar currentStencilZFail = null;\n\t\t\tvar currentStencilZPass = null;\n\t\t\tvar currentStencilClear = null;\n\t\t\treturn {\n\t\t\t\tsetTest: function setTest(stencilTest) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\tif (stencilTest) {\n\t\t\t\t\t\t\tenable(2960);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdisable(2960);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetMask: function setMask(stencilMask) {\n\t\t\t\t\tif (currentStencilMask !== stencilMask && !locked) {\n\t\t\t\t\t\tgl.stencilMask(stencilMask);\n\t\t\t\t\t\tcurrentStencilMask = stencilMask;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetFunc: function setFunc(stencilFunc, stencilRef, stencilMask) {\n\t\t\t\t\tif (currentStencilFunc !== stencilFunc || currentStencilRef !== stencilRef || currentStencilFuncMask !== stencilMask) {\n\t\t\t\t\t\tgl.stencilFunc(stencilFunc, stencilRef, stencilMask);\n\t\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetOp: function setOp(stencilFail, stencilZFail, stencilZPass) {\n\t\t\t\t\tif (currentStencilFail !== stencilFail || currentStencilZFail !== stencilZFail || currentStencilZPass !== stencilZPass) {\n\t\t\t\t\t\tgl.stencilOp(stencilFail, stencilZFail, stencilZPass);\n\t\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsetLocked: function setLocked(lock) {\n\t\t\t\t\tlocked = lock;\n\t\t\t\t},\n\t\t\t\tsetClear: function setClear(stencil) {\n\t\t\t\t\tif (currentStencilClear !== stencil) {\n\t\t\t\t\t\tgl.clearStencil(stencil);\n\t\t\t\t\t\tcurrentStencilClear = stencil;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\treset: function reset() {\n\t\t\t\t\tlocked = false;\n\t\t\t\t\tcurrentStencilMask = null;\n\t\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\t\tcurrentStencilRef = null;\n\t\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\t\tcurrentStencilFail = null;\n\t\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\t\tcurrentStencilClear = null;\n\t\t\t\t}\n\t\t\t};\n\t\t} //\n\n\n\t\tvar colorBuffer = new ColorBuffer();\n\t\tvar depthBuffer = new DepthBuffer();\n\t\tvar stencilBuffer = new StencilBuffer();\n\t\tvar enabledCapabilities = {};\n\t\tvar currentProgram = null;\n\t\tvar currentBlendingEnabled = null;\n\t\tvar currentBlending = null;\n\t\tvar currentBlendEquation = null;\n\t\tvar currentBlendSrc = null;\n\t\tvar currentBlendDst = null;\n\t\tvar currentBlendEquationAlpha = null;\n\t\tvar currentBlendSrcAlpha = null;\n\t\tvar currentBlendDstAlpha = null;\n\t\tvar currentPremultipledAlpha = false;\n\t\tvar currentFlipSided = null;\n\t\tvar currentCullFace = null;\n\t\tvar currentLineWidth = null;\n\t\tvar currentPolygonOffsetFactor = null;\n\t\tvar currentPolygonOffsetUnits = null;\n\t\tvar maxTextures = gl.getParameter(35661);\n\t\tvar lineWidthAvailable = false;\n\t\tvar version = 0;\n\t\tvar glVersion = gl.getParameter(7938);\n\n\t\tif (glVersion.indexOf('WebGL') !== -1) {\n\t\t\tversion = parseFloat(/^WebGL (\\d)/.exec(glVersion)[1]);\n\t\t\tlineWidthAvailable = version >= 1.0;\n\t\t} else if (glVersion.indexOf('OpenGL ES') !== -1) {\n\t\t\tversion = parseFloat(/^OpenGL ES (\\d)/.exec(glVersion)[1]);\n\t\t\tlineWidthAvailable = version >= 2.0;\n\t\t}\n\n\t\tvar currentTextureSlot = null;\n\t\tvar currentBoundTextures = {};\n\t\tvar currentScissor = new Vector4();\n\t\tvar currentViewport = new Vector4();\n\n\t\tfunction createTexture(type, target, count) {\n\t\t\tvar data = new Uint8Array(4); // 4 is required to match default unpack alignment of 4.\n\n\t\t\tvar texture = gl.createTexture();\n\t\t\tgl.bindTexture(type, texture);\n\t\t\tgl.texParameteri(type, 10241, 9728);\n\t\t\tgl.texParameteri(type, 10240, 9728);\n\n\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\tgl.texImage2D(target + i, 0, 6408, 1, 1, 0, 6408, 5121, data);\n\t\t\t}\n\n\t\t\treturn texture;\n\t\t}\n\n\t\tvar emptyTextures = {};\n\t\temptyTextures[3553] = createTexture(3553, 3553, 1);\n\t\temptyTextures[34067] = createTexture(34067, 34069, 6); // init\n\n\t\tcolorBuffer.setClear(0, 0, 0, 1);\n\t\tdepthBuffer.setClear(1);\n\t\tstencilBuffer.setClear(0);\n\t\tenable(2929);\n\t\tdepthBuffer.setFunc(LessEqualDepth);\n\t\tsetFlipSided(false);\n\t\tsetCullFace(CullFaceBack);\n\t\tenable(2884);\n\t\tsetBlending(NoBlending); //\n\n\t\tfunction enable(id) {\n\t\t\tif (enabledCapabilities[id] !== true) {\n\t\t\t\tgl.enable(id);\n\t\t\t\tenabledCapabilities[id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction disable(id) {\n\t\t\tif (enabledCapabilities[id] !== false) {\n\t\t\t\tgl.disable(id);\n\t\t\t\tenabledCapabilities[id] = false;\n\t\t\t}\n\t\t}\n\n\t\tfunction useProgram(program) {\n\t\t\tif (currentProgram !== program) {\n\t\t\t\tgl.useProgram(program);\n\t\t\t\tcurrentProgram = program;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tvar equationToGL = (_equationToGL = {}, _equationToGL[AddEquation] = 32774, _equationToGL[SubtractEquation] = 32778, _equationToGL[ReverseSubtractEquation] = 32779, _equationToGL);\n\n\t\tif (isWebGL2) {\n\t\t\tequationToGL[MinEquation] = 32775;\n\t\t\tequationToGL[MaxEquation] = 32776;\n\t\t} else {\n\t\t\tvar extension = extensions.get('EXT_blend_minmax');\n\n\t\t\tif (extension !== null) {\n\t\t\t\tequationToGL[MinEquation] = extension.MIN_EXT;\n\t\t\t\tequationToGL[MaxEquation] = extension.MAX_EXT;\n\t\t\t}\n\t\t}\n\n\t\tvar factorToGL = (_factorToGL = {}, _factorToGL[ZeroFactor] = 0, _factorToGL[OneFactor] = 1, _factorToGL[SrcColorFactor] = 768, _factorToGL[SrcAlphaFactor] = 770, _factorToGL[SrcAlphaSaturateFactor] = 776, _factorToGL[DstColorFactor] = 774, _factorToGL[DstAlphaFactor] = 772, _factorToGL[OneMinusSrcColorFactor] = 769, _factorToGL[OneMinusSrcAlphaFactor] = 771, _factorToGL[OneMinusDstColorFactor] = 775, _factorToGL[OneMinusDstAlphaFactor] = 773, _factorToGL);\n\n\t\tfunction setBlending(blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha) {\n\t\t\tif (blending === NoBlending) {\n\t\t\t\tif (currentBlendingEnabled) {\n\t\t\t\t\tdisable(3042);\n\t\t\t\t\tcurrentBlendingEnabled = false;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!currentBlendingEnabled) {\n\t\t\t\tenable(3042);\n\t\t\t\tcurrentBlendingEnabled = true;\n\t\t\t}\n\n\t\t\tif (blending !== CustomBlending) {\n\t\t\t\tif (blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha) {\n\t\t\t\t\tif (currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation) {\n\t\t\t\t\t\tgl.blendEquation(32774);\n\t\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (premultipliedAlpha) {\n\t\t\t\t\t\tswitch (blending) {\n\t\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate(1, 771, 1, 771);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\t\tgl.blendFunc(1, 1);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate(0, 0, 769, 771);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate(0, 768, 0, 770);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tconsole.error('THREE.WebGLState: Invalid blending: ', blending);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tswitch (blending) {\n\t\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate(770, 771, 1, 771);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\t\tgl.blendFunc(770, 1);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\t\tgl.blendFunc(0, 769);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\t\tgl.blendFunc(0, 768);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tconsole.error('THREE.WebGLState: Invalid blending: ', blending);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\t\tcurrentBlendDst = null;\n\t\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\t\tcurrentBlendDstAlpha = null;\n\t\t\t\t\tcurrentBlending = blending;\n\t\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t} // custom blending\n\n\n\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\tif (blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha) {\n\t\t\t\tgl.blendEquationSeparate(equationToGL[blendEquation], equationToGL[blendEquationAlpha]);\n\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\t\t\t}\n\n\t\t\tif (blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha) {\n\t\t\t\tgl.blendFuncSeparate(factorToGL[blendSrc], factorToGL[blendDst], factorToGL[blendSrcAlpha], factorToGL[blendDstAlpha]);\n\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\t\t\t}\n\n\t\t\tcurrentBlending = blending;\n\t\t\tcurrentPremultipledAlpha = null;\n\t\t}\n\n\t\tfunction setMaterial(material, frontFaceCW) {\n\t\t\tmaterial.side === DoubleSide ? disable(2884) : enable(2884);\n\t\t\tvar flipSided = material.side === BackSide;\n\t\t\tif (frontFaceCW) flipSided = !flipSided;\n\t\t\tsetFlipSided(flipSided);\n\t\t\tmaterial.blending === NormalBlending && material.transparent === false ? setBlending(NoBlending) : setBlending(material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha);\n\t\t\tdepthBuffer.setFunc(material.depthFunc);\n\t\t\tdepthBuffer.setTest(material.depthTest);\n\t\t\tdepthBuffer.setMask(material.depthWrite);\n\t\t\tcolorBuffer.setMask(material.colorWrite);\n\t\t\tvar stencilWrite = material.stencilWrite;\n\t\t\tstencilBuffer.setTest(stencilWrite);\n\n\t\t\tif (stencilWrite) {\n\t\t\t\tstencilBuffer.setMask(material.stencilWriteMask);\n\t\t\t\tstencilBuffer.setFunc(material.stencilFunc, material.stencilRef, material.stencilFuncMask);\n\t\t\t\tstencilBuffer.setOp(material.stencilFail, material.stencilZFail, material.stencilZPass);\n\t\t\t}\n\n\t\t\tsetPolygonOffset(material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits);\n\t\t} //\n\n\n\t\tfunction setFlipSided(flipSided) {\n\t\t\tif (currentFlipSided !== flipSided) {\n\t\t\t\tif (flipSided) {\n\t\t\t\t\tgl.frontFace(2304);\n\t\t\t\t} else {\n\t\t\t\t\tgl.frontFace(2305);\n\t\t\t\t}\n\n\t\t\t\tcurrentFlipSided = flipSided;\n\t\t\t}\n\t\t}\n\n\t\tfunction setCullFace(cullFace) {\n\t\t\tif (cullFace !== CullFaceNone) {\n\t\t\t\tenable(2884);\n\n\t\t\t\tif (cullFace !== currentCullFace) {\n\t\t\t\t\tif (cullFace === CullFaceBack) {\n\t\t\t\t\t\tgl.cullFace(1029);\n\t\t\t\t\t} else if (cullFace === CullFaceFront) {\n\t\t\t\t\t\tgl.cullFace(1028);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgl.cullFace(1032);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdisable(2884);\n\t\t\t}\n\n\t\t\tcurrentCullFace = cullFace;\n\t\t}\n\n\t\tfunction setLineWidth(width) {\n\t\t\tif (width !== currentLineWidth) {\n\t\t\t\tif (lineWidthAvailable) gl.lineWidth(width);\n\t\t\t\tcurrentLineWidth = width;\n\t\t\t}\n\t\t}\n\n\t\tfunction setPolygonOffset(polygonOffset, factor, units) {\n\t\t\tif (polygonOffset) {\n\t\t\t\tenable(32823);\n\n\t\t\t\tif (currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units) {\n\t\t\t\t\tgl.polygonOffset(factor, units);\n\t\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\t\tcurrentPolygonOffsetUnits = units;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdisable(32823);\n\t\t\t}\n\t\t}\n\n\t\tfunction setScissorTest(scissorTest) {\n\t\t\tif (scissorTest) {\n\t\t\t\tenable(3089);\n\t\t\t} else {\n\t\t\t\tdisable(3089);\n\t\t\t}\n\t\t} // texture\n\n\n\t\tfunction activeTexture(webglSlot) {\n\t\t\tif (webglSlot === undefined) webglSlot = 33984 + maxTextures - 1;\n\n\t\t\tif (currentTextureSlot !== webglSlot) {\n\t\t\t\tgl.activeTexture(webglSlot);\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\t\t\t}\n\t\t}\n\n\t\tfunction bindTexture(webglType, webglTexture) {\n\t\t\tif (currentTextureSlot === null) {\n\t\t\t\tactiveTexture();\n\t\t\t}\n\n\t\t\tvar boundTexture = currentBoundTextures[currentTextureSlot];\n\n\t\t\tif (boundTexture === undefined) {\n\t\t\t\tboundTexture = {\n\t\t\t\t\ttype: undefined,\n\t\t\t\t\ttexture: undefined\n\t\t\t\t};\n\t\t\t\tcurrentBoundTextures[currentTextureSlot] = boundTexture;\n\t\t\t}\n\n\t\t\tif (boundTexture.type !== webglType || boundTexture.texture !== webglTexture) {\n\t\t\t\tgl.bindTexture(webglType, webglTexture || emptyTextures[webglType]);\n\t\t\t\tboundTexture.type = webglType;\n\t\t\t\tboundTexture.texture = webglTexture;\n\t\t\t}\n\t\t}\n\n\t\tfunction unbindTexture() {\n\t\t\tvar boundTexture = currentBoundTextures[currentTextureSlot];\n\n\t\t\tif (boundTexture !== undefined && boundTexture.type !== undefined) {\n\t\t\t\tgl.bindTexture(boundTexture.type, null);\n\t\t\t\tboundTexture.type = undefined;\n\t\t\t\tboundTexture.texture = undefined;\n\t\t\t}\n\t\t}\n\n\t\tfunction compressedTexImage2D() {\n\t\t\ttry {\n\t\t\t\tgl.compressedTexImage2D.apply(gl, arguments);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('THREE.WebGLState:', error);\n\t\t\t}\n\t\t}\n\n\t\tfunction texImage2D() {\n\t\t\ttry {\n\t\t\t\tgl.texImage2D.apply(gl, arguments);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('THREE.WebGLState:', error);\n\t\t\t}\n\t\t}\n\n\t\tfunction texImage3D() {\n\t\t\ttry {\n\t\t\t\tgl.texImage3D.apply(gl, arguments);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('THREE.WebGLState:', error);\n\t\t\t}\n\t\t} //\n\n\n\t\tfunction scissor(scissor) {\n\t\t\tif (currentScissor.equals(scissor) === false) {\n\t\t\t\tgl.scissor(scissor.x, scissor.y, scissor.z, scissor.w);\n\t\t\t\tcurrentScissor.copy(scissor);\n\t\t\t}\n\t\t}\n\n\t\tfunction viewport(viewport) {\n\t\t\tif (currentViewport.equals(viewport) === false) {\n\t\t\t\tgl.viewport(viewport.x, viewport.y, viewport.z, viewport.w);\n\t\t\t\tcurrentViewport.copy(viewport);\n\t\t\t}\n\t\t} //\n\n\n\t\tfunction reset() {\n\t\t\tenabledCapabilities = {};\n\t\t\tcurrentTextureSlot = null;\n\t\t\tcurrentBoundTextures = {};\n\t\t\tcurrentProgram = null;\n\t\t\tcurrentBlendingEnabled = null;\n\t\t\tcurrentBlending = null;\n\t\t\tcurrentBlendEquation = null;\n\t\t\tcurrentBlendSrc = null;\n\t\t\tcurrentBlendDst = null;\n\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\tcurrentBlendDstAlpha = null;\n\t\t\tcurrentPremultipledAlpha = false;\n\t\t\tcurrentFlipSided = null;\n\t\t\tcurrentCullFace = null;\n\t\t\tcurrentLineWidth = null;\n\t\t\tcurrentPolygonOffsetFactor = null;\n\t\t\tcurrentPolygonOffsetUnits = null;\n\t\t\tcolorBuffer.reset();\n\t\t\tdepthBuffer.reset();\n\t\t\tstencilBuffer.reset();\n\t\t}\n\n\t\treturn {\n\t\t\tbuffers: {\n\t\t\t\tcolor: colorBuffer,\n\t\t\t\tdepth: depthBuffer,\n\t\t\t\tstencil: stencilBuffer\n\t\t\t},\n\t\t\tenable: enable,\n\t\t\tdisable: disable,\n\t\t\tuseProgram: useProgram,\n\t\t\tsetBlending: setBlending,\n\t\t\tsetMaterial: setMaterial,\n\t\t\tsetFlipSided: setFlipSided,\n\t\t\tsetCullFace: setCullFace,\n\t\t\tsetLineWidth: setLineWidth,\n\t\t\tsetPolygonOffset: setPolygonOffset,\n\t\t\tsetScissorTest: setScissorTest,\n\t\t\tactiveTexture: activeTexture,\n\t\t\tbindTexture: bindTexture,\n\t\t\tunbindTexture: unbindTexture,\n\t\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\t\ttexImage2D: texImage2D,\n\t\t\ttexImage3D: texImage3D,\n\t\t\tscissor: scissor,\n\t\t\tviewport: viewport,\n\t\t\treset: reset\n\t\t};\n\t}\n\n\tfunction WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info) {\n\t\tvar _wrappingToGL, _filterToGL;\n\n\t\tvar isWebGL2 = capabilities.isWebGL2;\n\t\tvar maxTextures = capabilities.maxTextures;\n\t\tvar maxCubemapSize = capabilities.maxCubemapSize;\n\t\tvar maxTextureSize = capabilities.maxTextureSize;\n\t\tvar maxSamples = capabilities.maxSamples;\n\n\t\tvar _videoTextures = new WeakMap();\n\n\t\tvar _canvas; // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\n\t\tvar useOffscreenCanvas = false;\n\n\t\ttry {\n\t\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' && new OffscreenCanvas(1, 1).getContext('2d') !== null;\n\t\t} catch (err) {// Ignore any errors\n\t\t}\n\n\t\tfunction createCanvas(width, height) {\n\t\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\t\t\treturn useOffscreenCanvas ? new OffscreenCanvas(width, height) : document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');\n\t\t}\n\n\t\tfunction resizeImage(image, needsPowerOfTwo, needsNewCanvas, maxSize) {\n\t\t\tvar scale = 1; // handle case if texture exceeds max size\n\n\t\t\tif (image.width > maxSize || image.height > maxSize) {\n\t\t\t\tscale = maxSize / Math.max(image.width, image.height);\n\t\t\t} // only perform resize if necessary\n\n\n\t\t\tif (scale < 1 || needsPowerOfTwo === true) {\n\t\t\t\t// only perform resize for certain image types\n\t\t\t\tif (typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement || typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap) {\n\t\t\t\t\tvar floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;\n\t\t\t\t\tvar width = floor(scale * image.width);\n\t\t\t\t\tvar height = floor(scale * image.height);\n\t\t\t\t\tif (_canvas === undefined) _canvas = createCanvas(width, height); // cube textures can't reuse the same canvas\n\n\t\t\t\t\tvar canvas = needsNewCanvas ? createCanvas(width, height) : _canvas;\n\t\t\t\t\tcanvas.width = width;\n\t\t\t\t\tcanvas.height = height;\n\t\t\t\t\tvar context = canvas.getContext('2d');\n\t\t\t\t\tcontext.drawImage(image, 0, 0, width, height);\n\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').');\n\t\t\t\t\treturn canvas;\n\t\t\t\t} else {\n\t\t\t\t\tif ('data' in image) {\n\t\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').');\n\t\t\t\t\t}\n\n\t\t\t\t\treturn image;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn image;\n\t\t}\n\n\t\tfunction isPowerOfTwo(image) {\n\t\t\treturn MathUtils.isPowerOfTwo(image.width) && MathUtils.isPowerOfTwo(image.height);\n\t\t}\n\n\t\tfunction textureNeedsPowerOfTwo(texture) {\n\t\t\tif (isWebGL2) return false;\n\t\t\treturn texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping || texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\t\t}\n\n\t\tfunction textureNeedsGenerateMipmaps(texture, supportsMips) {\n\t\t\treturn texture.generateMipmaps && supportsMips && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\t\t}\n\n\t\tfunction generateMipmap(target, texture, width, height) {\n\t\t\t_gl.generateMipmap(target);\n\n\t\t\tvar textureProperties = properties.get(texture); // Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\n\t\t\ttextureProperties.__maxMipLevel = Math.log(Math.max(width, height)) * Math.LOG2E;\n\t\t}\n\n\t\tfunction getInternalFormat(internalFormatName, glFormat, glType) {\n\t\t\tif (isWebGL2 === false) return glFormat;\n\n\t\t\tif (internalFormatName !== null) {\n\t\t\t\tif (_gl[internalFormatName] !== undefined) return _gl[internalFormatName];\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'');\n\t\t\t}\n\n\t\t\tvar internalFormat = glFormat;\n\n\t\t\tif (glFormat === 6403) {\n\t\t\t\tif (glType === 5126) internalFormat = 33326;\n\t\t\t\tif (glType === 5131) internalFormat = 33325;\n\t\t\t\tif (glType === 5121) internalFormat = 33321;\n\t\t\t}\n\n\t\t\tif (glFormat === 6407) {\n\t\t\t\tif (glType === 5126) internalFormat = 34837;\n\t\t\t\tif (glType === 5131) internalFormat = 34843;\n\t\t\t\tif (glType === 5121) internalFormat = 32849;\n\t\t\t}\n\n\t\t\tif (glFormat === 6408) {\n\t\t\t\tif (glType === 5126) internalFormat = 34836;\n\t\t\t\tif (glType === 5131) internalFormat = 34842;\n\t\t\t\tif (glType === 5121) internalFormat = 32856;\n\t\t\t}\n\n\t\t\tif (internalFormat === 33325 || internalFormat === 33326 || internalFormat === 34842 || internalFormat === 34836) {\n\t\t\t\textensions.get('EXT_color_buffer_float');\n\t\t\t}\n\n\t\t\treturn internalFormat;\n\t\t} // Fallback filters for non-power-of-2 textures\n\n\n\t\tfunction filterFallback(f) {\n\t\t\tif (f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter) {\n\t\t\t\treturn 9728;\n\t\t\t}\n\n\t\t\treturn 9729;\n\t\t} //\n\n\n\t\tfunction onTextureDispose(event) {\n\t\t\tvar texture = event.target;\n\t\t\ttexture.removeEventListener('dispose', onTextureDispose);\n\t\t\tdeallocateTexture(texture);\n\n\t\t\tif (texture.isVideoTexture) {\n\t\t\t\t_videoTextures.delete(texture);\n\t\t\t}\n\n\t\t\tinfo.memory.textures--;\n\t\t}\n\n\t\tfunction onRenderTargetDispose(event) {\n\t\t\tvar renderTarget = event.target;\n\t\t\trenderTarget.removeEventListener('dispose', onRenderTargetDispose);\n\t\t\tdeallocateRenderTarget(renderTarget);\n\t\t\tinfo.memory.textures--;\n\t\t} //\n\n\n\t\tfunction deallocateTexture(texture) {\n\t\t\tvar textureProperties = properties.get(texture);\n\t\t\tif (textureProperties.__webglInit === undefined) return;\n\n\t\t\t_gl.deleteTexture(textureProperties.__webglTexture);\n\n\t\t\tproperties.remove(texture);\n\t\t}\n\n\t\tfunction deallocateRenderTarget(renderTarget) {\n\t\t\tvar renderTargetProperties = properties.get(renderTarget);\n\t\t\tvar textureProperties = properties.get(renderTarget.texture);\n\t\t\tif (!renderTarget) return;\n\n\t\t\tif (textureProperties.__webglTexture !== undefined) {\n\t\t\t\t_gl.deleteTexture(textureProperties.__webglTexture);\n\t\t\t}\n\n\t\t\tif (renderTarget.depthTexture) {\n\t\t\t\trenderTarget.depthTexture.dispose();\n\t\t\t}\n\n\t\t\tif (renderTarget.isWebGLCubeRenderTarget) {\n\t\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\t\t_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]);\n\n\t\t\t\t\tif (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer);\n\n\t\t\t\tif (renderTargetProperties.__webglDepthbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer);\n\t\t\t\tif (renderTargetProperties.__webglMultisampledFramebuffer) _gl.deleteFramebuffer(renderTargetProperties.__webglMultisampledFramebuffer);\n\t\t\t\tif (renderTargetProperties.__webglColorRenderbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglColorRenderbuffer);\n\t\t\t\tif (renderTargetProperties.__webglDepthRenderbuffer) _gl.deleteRenderbuffer(renderTargetProperties.__webglDepthRenderbuffer);\n\t\t\t}\n\n\t\t\tproperties.remove(renderTarget.texture);\n\t\t\tproperties.remove(renderTarget);\n\t\t} //\n\n\n\t\tvar textureUnits = 0;\n\n\t\tfunction resetTextureUnits() {\n\t\t\ttextureUnits = 0;\n\t\t}\n\n\t\tfunction allocateTextureUnit() {\n\t\t\tvar textureUnit = textureUnits;\n\n\t\t\tif (textureUnit >= maxTextures) {\n\t\t\t\tconsole.warn('THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures);\n\t\t\t}\n\n\t\t\ttextureUnits += 1;\n\t\t\treturn textureUnit;\n\t\t} //\n\n\n\t\tfunction setTexture2D(texture, slot) {\n\t\t\tvar textureProperties = properties.get(texture);\n\t\t\tif (texture.isVideoTexture) updateVideoTexture(texture);\n\n\t\t\tif (texture.version > 0 && textureProperties.__version !== texture.version) {\n\t\t\t\tvar image = texture.image;\n\n\t\t\t\tif (image === undefined) {\n\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Texture marked for update but image is undefined');\n\t\t\t\t} else if (image.complete === false) {\n\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Texture marked for update but image is incomplete');\n\t\t\t\t} else {\n\t\t\t\t\tuploadTexture(textureProperties, texture, slot);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstate.activeTexture(33984 + slot);\n\t\t\tstate.bindTexture(3553, textureProperties.__webglTexture);\n\t\t}\n\n\t\tfunction setTexture2DArray(texture, slot) {\n\t\t\tvar textureProperties = properties.get(texture);\n\n\t\t\tif (texture.version > 0 && textureProperties.__version !== texture.version) {\n\t\t\t\tuploadTexture(textureProperties, texture, slot);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstate.activeTexture(33984 + slot);\n\t\t\tstate.bindTexture(35866, textureProperties.__webglTexture);\n\t\t}\n\n\t\tfunction setTexture3D(texture, slot) {\n\t\t\tvar textureProperties = properties.get(texture);\n\n\t\t\tif (texture.version > 0 && textureProperties.__version !== texture.version) {\n\t\t\t\tuploadTexture(textureProperties, texture, slot);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstate.activeTexture(33984 + slot);\n\t\t\tstate.bindTexture(32879, textureProperties.__webglTexture);\n\t\t}\n\n\t\tfunction setTextureCube(texture, slot) {\n\t\t\tvar textureProperties = properties.get(texture);\n\n\t\t\tif (texture.version > 0 && textureProperties.__version !== texture.version) {\n\t\t\t\tuploadCubeTexture(textureProperties, texture, slot);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstate.activeTexture(33984 + slot);\n\t\t\tstate.bindTexture(34067, textureProperties.__webglTexture);\n\t\t}\n\n\t\tvar wrappingToGL = (_wrappingToGL = {}, _wrappingToGL[RepeatWrapping] = 10497, _wrappingToGL[ClampToEdgeWrapping] = 33071, _wrappingToGL[MirroredRepeatWrapping] = 33648, _wrappingToGL);\n\t\tvar filterToGL = (_filterToGL = {}, _filterToGL[NearestFilter] = 9728, _filterToGL[NearestMipmapNearestFilter] = 9984, _filterToGL[NearestMipmapLinearFilter] = 9986, _filterToGL[LinearFilter] = 9729, _filterToGL[LinearMipmapNearestFilter] = 9985, _filterToGL[LinearMipmapLinearFilter] = 9987, _filterToGL);\n\n\t\tfunction setTextureParameters(textureType, texture, supportsMips) {\n\t\t\tif (supportsMips) {\n\t\t\t\t_gl.texParameteri(textureType, 10242, wrappingToGL[texture.wrapS]);\n\n\t\t\t\t_gl.texParameteri(textureType, 10243, wrappingToGL[texture.wrapT]);\n\n\t\t\t\tif (textureType === 32879 || textureType === 35866) {\n\t\t\t\t\t_gl.texParameteri(textureType, 32882, wrappingToGL[texture.wrapR]);\n\t\t\t\t}\n\n\t\t\t\t_gl.texParameteri(textureType, 10240, filterToGL[texture.magFilter]);\n\n\t\t\t\t_gl.texParameteri(textureType, 10241, filterToGL[texture.minFilter]);\n\t\t\t} else {\n\t\t\t\t_gl.texParameteri(textureType, 10242, 33071);\n\n\t\t\t\t_gl.texParameteri(textureType, 10243, 33071);\n\n\t\t\t\tif (textureType === 32879 || textureType === 35866) {\n\t\t\t\t\t_gl.texParameteri(textureType, 32882, 33071);\n\t\t\t\t}\n\n\t\t\t\tif (texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping) {\n\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.');\n\t\t\t\t}\n\n\t\t\t\t_gl.texParameteri(textureType, 10240, filterFallback(texture.magFilter));\n\n\t\t\t\t_gl.texParameteri(textureType, 10241, filterFallback(texture.minFilter));\n\n\t\t\t\tif (texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter) {\n\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar extension = extensions.get('EXT_texture_filter_anisotropic');\n\n\t\t\tif (extension) {\n\t\t\t\tif (texture.type === FloatType && extensions.get('OES_texture_float_linear') === null) return;\n\t\t\t\tif (texture.type === HalfFloatType && (isWebGL2 || extensions.get('OES_texture_half_float_linear')) === null) return;\n\n\t\t\t\tif (texture.anisotropy > 1 || properties.get(texture).__currentAnisotropy) {\n\t\t\t\t\t_gl.texParameterf(textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(texture.anisotropy, capabilities.getMaxAnisotropy()));\n\n\t\t\t\t\tproperties.get(texture).__currentAnisotropy = texture.anisotropy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction initTexture(textureProperties, texture) {\n\t\t\tif (textureProperties.__webglInit === undefined) {\n\t\t\t\ttextureProperties.__webglInit = true;\n\t\t\t\ttexture.addEventListener('dispose', onTextureDispose);\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\t\t\t\tinfo.memory.textures++;\n\t\t\t}\n\t\t}\n\n\t\tfunction uploadTexture(textureProperties, texture, slot) {\n\t\t\tvar textureType = 3553;\n\t\t\tif (texture.isDataTexture2DArray) textureType = 35866;\n\t\t\tif (texture.isDataTexture3D) textureType = 32879;\n\t\t\tinitTexture(textureProperties, texture);\n\t\t\tstate.activeTexture(33984 + slot);\n\t\t\tstate.bindTexture(textureType, textureProperties.__webglTexture);\n\n\t\t\t_gl.pixelStorei(37440, texture.flipY);\n\n\t\t\t_gl.pixelStorei(37441, texture.premultiplyAlpha);\n\n\t\t\t_gl.pixelStorei(3317, texture.unpackAlignment);\n\n\t\t\tvar needsPowerOfTwo = textureNeedsPowerOfTwo(texture) && isPowerOfTwo(texture.image) === false;\n\t\t\tvar image = resizeImage(texture.image, needsPowerOfTwo, false, maxTextureSize);\n\t\t\tvar supportsMips = isPowerOfTwo(image) || isWebGL2,\n\t\t\t\t\tglFormat = utils.convert(texture.format);\n\t\t\tvar glType = utils.convert(texture.type),\n\t\t\t\t\tglInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType);\n\t\t\tsetTextureParameters(textureType, texture, supportsMips);\n\t\t\tvar mipmap;\n\t\t\tvar mipmaps = texture.mipmaps;\n\n\t\t\tif (texture.isDepthTexture) {\n\t\t\t\t// populate depth texture with dummy data\n\t\t\t\tglInternalFormat = 6402;\n\n\t\t\t\tif (isWebGL2) {\n\t\t\t\t\tif (texture.type === FloatType) {\n\t\t\t\t\t\tglInternalFormat = 36012;\n\t\t\t\t\t} else if (texture.type === UnsignedIntType) {\n\t\t\t\t\t\tglInternalFormat = 33190;\n\t\t\t\t\t} else if (texture.type === UnsignedInt248Type) {\n\t\t\t\t\t\tglInternalFormat = 35056;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (texture.type === FloatType) {\n\t\t\t\t\t\tconsole.error('WebGLRenderer: Floating point depth texture requires WebGL2.');\n\t\t\t\t\t}\n\t\t\t\t} // validation checks for WebGL 1\n\n\n\t\t\t\tif (texture.format === DepthFormat && glInternalFormat === 6402) {\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif (texture.type !== UnsignedShortType && texture.type !== UnsignedIntType) {\n\t\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.');\n\t\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\t\tglType = utils.convert(texture.type);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (texture.format === DepthStencilFormat && glInternalFormat === 6402) {\n\t\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tglInternalFormat = 34041; // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\n\t\t\t\t\tif (texture.type !== UnsignedInt248Type) {\n\t\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.');\n\t\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\t\tglType = utils.convert(texture.type);\n\t\t\t\t\t}\n\t\t\t\t} //\n\n\n\t\t\t\tstate.texImage2D(3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null);\n\t\t\t} else if (texture.isDataTexture) {\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\t\t\t\tif (mipmaps.length > 0 && supportsMips) {\n\t\t\t\t\tfor (var i = 0, il = mipmaps.length; i < il; i++) {\n\t\t\t\t\t\tmipmap = mipmaps[i];\n\t\t\t\t\t\tstate.texImage2D(3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data);\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\t\t\t\t} else {\n\t\t\t\t\tstate.texImage2D(3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data);\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\t\t\t\t}\n\t\t\t} else if (texture.isCompressedTexture) {\n\t\t\t\tfor (var _i = 0, _il = mipmaps.length; _i < _il; _i++) {\n\t\t\t\t\tmipmap = mipmaps[_i];\n\n\t\t\t\t\tif (texture.format !== RGBAFormat && texture.format !== RGBFormat) {\n\t\t\t\t\t\tif (glFormat !== null) {\n\t\t\t\t\t\t\tstate.compressedTexImage2D(3553, _i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.texImage2D(3553, _i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\t\t\t} else if (texture.isDataTexture2DArray) {\n\t\t\t\tstate.texImage3D(35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data);\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\t\t\t} else if (texture.isDataTexture3D) {\n\t\t\t\tstate.texImage3D(32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data);\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\t\t\t} else {\n\t\t\t\t// regular Texture (image, video, canvas)\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\t\t\t\tif (mipmaps.length > 0 && supportsMips) {\n\t\t\t\t\tfor (var _i2 = 0, _il2 = mipmaps.length; _i2 < _il2; _i2++) {\n\t\t\t\t\t\tmipmap = mipmaps[_i2];\n\t\t\t\t\t\tstate.texImage2D(3553, _i2, glInternalFormat, glFormat, glType, mipmap);\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\t\t\t\t} else {\n\t\t\t\t\tstate.texImage2D(3553, 0, glInternalFormat, glFormat, glType, image);\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (textureNeedsGenerateMipmaps(texture, supportsMips)) {\n\t\t\t\tgenerateMipmap(textureType, texture, image.width, image.height);\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tif (texture.onUpdate) texture.onUpdate(texture);\n\t\t}\n\n\t\tfunction uploadCubeTexture(textureProperties, texture, slot) {\n\t\t\tif (texture.image.length !== 6) return;\n\t\t\tinitTexture(textureProperties, texture);\n\t\t\tstate.activeTexture(33984 + slot);\n\t\t\tstate.bindTexture(34067, textureProperties.__webglTexture);\n\n\t\t\t_gl.pixelStorei(37440, texture.flipY);\n\n\t\t\tvar isCompressed = texture && (texture.isCompressedTexture || texture.image[0].isCompressedTexture);\n\t\t\tvar isDataTexture = texture.image[0] && texture.image[0].isDataTexture;\n\t\t\tvar cubeImage = [];\n\n\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\tif (!isCompressed && !isDataTexture) {\n\t\t\t\t\tcubeImage[i] = resizeImage(texture.image[i], false, true, maxCubemapSize);\n\t\t\t\t} else {\n\t\t\t\t\tcubeImage[i] = isDataTexture ? texture.image[i].image : texture.image[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar image = cubeImage[0],\n\t\t\t\t\tsupportsMips = isPowerOfTwo(image) || isWebGL2,\n\t\t\t\t\tglFormat = utils.convert(texture.format),\n\t\t\t\t\tglType = utils.convert(texture.type),\n\t\t\t\t\tglInternalFormat = getInternalFormat(texture.internalFormat, glFormat, glType);\n\t\t\tsetTextureParameters(34067, texture, supportsMips);\n\t\t\tvar mipmaps;\n\n\t\t\tif (isCompressed) {\n\t\t\t\tfor (var _i3 = 0; _i3 < 6; _i3++) {\n\t\t\t\t\tmipmaps = cubeImage[_i3].mipmaps;\n\n\t\t\t\t\tfor (var j = 0; j < mipmaps.length; j++) {\n\t\t\t\t\t\tvar mipmap = mipmaps[j];\n\n\t\t\t\t\t\tif (texture.format !== RGBAFormat && texture.format !== RGBFormat) {\n\t\t\t\t\t\t\tif (glFormat !== null) {\n\t\t\t\t\t\t\t\tstate.compressedTexImage2D(34069 + _i3, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstate.texImage2D(34069 + _i3, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\t\t\t} else {\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tfor (var _i4 = 0; _i4 < 6; _i4++) {\n\t\t\t\t\tif (isDataTexture) {\n\t\t\t\t\t\tstate.texImage2D(34069 + _i4, 0, glInternalFormat, cubeImage[_i4].width, cubeImage[_i4].height, 0, glFormat, glType, cubeImage[_i4].data);\n\n\t\t\t\t\t\tfor (var _j = 0; _j < mipmaps.length; _j++) {\n\t\t\t\t\t\t\tvar _mipmap = mipmaps[_j];\n\t\t\t\t\t\t\tvar mipmapImage = _mipmap.image[_i4].image;\n\t\t\t\t\t\t\tstate.texImage2D(34069 + _i4, _j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.texImage2D(34069 + _i4, 0, glInternalFormat, glFormat, glType, cubeImage[_i4]);\n\n\t\t\t\t\t\tfor (var _j2 = 0; _j2 < mipmaps.length; _j2++) {\n\t\t\t\t\t\t\tvar _mipmap2 = mipmaps[_j2];\n\t\t\t\t\t\t\tstate.texImage2D(34069 + _i4, _j2 + 1, glInternalFormat, glFormat, glType, _mipmap2.image[_i4]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\t\t\t}\n\n\t\t\tif (textureNeedsGenerateMipmaps(texture, supportsMips)) {\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap(34067, texture, image.width, image.height);\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tif (texture.onUpdate) texture.onUpdate(texture);\n\t\t} // Render targets\n\t\t// Setup storage for target texture and bind it to correct framebuffer\n\n\n\t\tfunction setupFrameBufferTexture(framebuffer, renderTarget, attachment, textureTarget) {\n\t\t\tvar glFormat = utils.convert(renderTarget.texture.format);\n\t\t\tvar glType = utils.convert(renderTarget.texture.type);\n\t\t\tvar glInternalFormat = getInternalFormat(renderTarget.texture.internalFormat, glFormat, glType);\n\t\t\tstate.texImage2D(textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null);\n\n\t\t\t_gl.bindFramebuffer(36160, framebuffer);\n\n\t\t\t_gl.framebufferTexture2D(36160, attachment, textureTarget, properties.get(renderTarget.texture).__webglTexture, 0);\n\n\t\t\t_gl.bindFramebuffer(36160, null);\n\t\t} // Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\n\n\t\tfunction setupRenderBufferStorage(renderbuffer, renderTarget, isMultisample) {\n\t\t\t_gl.bindRenderbuffer(36161, renderbuffer);\n\n\t\t\tif (renderTarget.depthBuffer && !renderTarget.stencilBuffer) {\n\t\t\t\tvar glInternalFormat = 33189;\n\n\t\t\t\tif (isMultisample) {\n\t\t\t\t\tvar depthTexture = renderTarget.depthTexture;\n\n\t\t\t\t\tif (depthTexture && depthTexture.isDepthTexture) {\n\t\t\t\t\t\tif (depthTexture.type === FloatType) {\n\t\t\t\t\t\t\tglInternalFormat = 36012;\n\t\t\t\t\t\t} else if (depthTexture.type === UnsignedIntType) {\n\t\t\t\t\t\t\tglInternalFormat = 33190;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar samples = getRenderTargetSamples(renderTarget);\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample(36161, samples, glInternalFormat, renderTarget.width, renderTarget.height);\n\t\t\t\t} else {\n\t\t\t\t\t_gl.renderbufferStorage(36161, glInternalFormat, renderTarget.width, renderTarget.height);\n\t\t\t\t}\n\n\t\t\t\t_gl.framebufferRenderbuffer(36160, 36096, 36161, renderbuffer);\n\t\t\t} else if (renderTarget.depthBuffer && renderTarget.stencilBuffer) {\n\t\t\t\tif (isMultisample) {\n\t\t\t\t\tvar _samples = getRenderTargetSamples(renderTarget);\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample(36161, _samples, 35056, renderTarget.width, renderTarget.height);\n\t\t\t\t} else {\n\t\t\t\t\t_gl.renderbufferStorage(36161, 34041, renderTarget.width, renderTarget.height);\n\t\t\t\t}\n\n\t\t\t\t_gl.framebufferRenderbuffer(36160, 33306, 36161, renderbuffer);\n\t\t\t} else {\n\t\t\t\tvar glFormat = utils.convert(renderTarget.texture.format);\n\t\t\t\tvar glType = utils.convert(renderTarget.texture.type);\n\n\t\t\t\tvar _glInternalFormat = getInternalFormat(renderTarget.texture.internalFormat, glFormat, glType);\n\n\t\t\t\tif (isMultisample) {\n\t\t\t\t\tvar _samples2 = getRenderTargetSamples(renderTarget);\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample(36161, _samples2, _glInternalFormat, renderTarget.width, renderTarget.height);\n\t\t\t\t} else {\n\t\t\t\t\t_gl.renderbufferStorage(36161, _glInternalFormat, renderTarget.width, renderTarget.height);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_gl.bindRenderbuffer(36161, null);\n\t\t} // Setup resources for a Depth Texture for a FBO (needs an extension)\n\n\n\t\tfunction setupDepthTexture(framebuffer, renderTarget) {\n\t\t\tvar isCube = renderTarget && renderTarget.isWebGLCubeRenderTarget;\n\t\t\tif (isCube) throw new Error('Depth Texture with cube render targets is not supported');\n\n\t\t\t_gl.bindFramebuffer(36160, framebuffer);\n\n\t\t\tif (!(renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture)) {\n\t\t\t\tthrow new Error('renderTarget.depthTexture must be an instance of THREE.DepthTexture');\n\t\t\t} // upload an empty depth texture with framebuffer size\n\n\n\t\t\tif (!properties.get(renderTarget.depthTexture).__webglTexture || renderTarget.depthTexture.image.width !== renderTarget.width || renderTarget.depthTexture.image.height !== renderTarget.height) {\n\t\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\t\t\t}\n\n\t\t\tsetTexture2D(renderTarget.depthTexture, 0);\n\n\t\t\tvar webglDepthTexture = properties.get(renderTarget.depthTexture).__webglTexture;\n\n\t\t\tif (renderTarget.depthTexture.format === DepthFormat) {\n\t\t\t\t_gl.framebufferTexture2D(36160, 36096, 3553, webglDepthTexture, 0);\n\t\t\t} else if (renderTarget.depthTexture.format === DepthStencilFormat) {\n\t\t\t\t_gl.framebufferTexture2D(36160, 33306, 3553, webglDepthTexture, 0);\n\t\t\t} else {\n\t\t\t\tthrow new Error('Unknown depthTexture format');\n\t\t\t}\n\t\t} // Setup GL resources for a non-texture depth buffer\n\n\n\t\tfunction setupDepthRenderbuffer(renderTarget) {\n\t\t\tvar renderTargetProperties = properties.get(renderTarget);\n\t\t\tvar isCube = renderTarget.isWebGLCubeRenderTarget === true;\n\n\t\t\tif (renderTarget.depthTexture) {\n\t\t\t\tif (isCube) throw new Error('target.depthTexture not supported in Cube render targets');\n\t\t\t\tsetupDepthTexture(renderTargetProperties.__webglFramebuffer, renderTarget);\n\t\t\t} else {\n\t\t\t\tif (isCube) {\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\t\t\t_gl.bindFramebuffer(36160, renderTargetProperties.__webglFramebuffer[i]);\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[i] = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer[i], renderTarget, false);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t_gl.bindFramebuffer(36160, renderTargetProperties.__webglFramebuffer);\n\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage(renderTargetProperties.__webglDepthbuffer, renderTarget, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_gl.bindFramebuffer(36160, null);\n\t\t} // Set up GL resources for the render target\n\n\n\t\tfunction setupRenderTarget(renderTarget) {\n\t\t\tvar renderTargetProperties = properties.get(renderTarget);\n\t\t\tvar textureProperties = properties.get(renderTarget.texture);\n\t\t\trenderTarget.addEventListener('dispose', onRenderTargetDispose);\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\t\t\tinfo.memory.textures++;\n\t\t\tvar isCube = renderTarget.isWebGLCubeRenderTarget === true;\n\t\t\tvar isMultisample = renderTarget.isWebGLMultisampleRenderTarget === true;\n\t\t\tvar supportsMips = isPowerOfTwo(renderTarget) || isWebGL2; // Handles WebGL2 RGBFormat fallback - #18858\n\n\t\t\tif (isWebGL2 && renderTarget.texture.format === RGBFormat && (renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType)) {\n\t\t\t\trenderTarget.texture.format = RGBAFormat;\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.');\n\t\t\t} // Setup framebuffer\n\n\n\t\t\tif (isCube) {\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[i] = _gl.createFramebuffer();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t\tif (isMultisample) {\n\t\t\t\t\tif (isWebGL2) {\n\t\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t\t_gl.bindRenderbuffer(36161, renderTargetProperties.__webglColorRenderbuffer);\n\n\t\t\t\t\t\tvar glFormat = utils.convert(renderTarget.texture.format);\n\t\t\t\t\t\tvar glType = utils.convert(renderTarget.texture.type);\n\t\t\t\t\t\tvar glInternalFormat = getInternalFormat(renderTarget.texture.internalFormat, glFormat, glType);\n\t\t\t\t\t\tvar samples = getRenderTargetSamples(renderTarget);\n\n\t\t\t\t\t\t_gl.renderbufferStorageMultisample(36161, samples, glInternalFormat, renderTarget.width, renderTarget.height);\n\n\t\t\t\t\t\t_gl.bindFramebuffer(36160, renderTargetProperties.__webglMultisampledFramebuffer);\n\n\t\t\t\t\t\t_gl.framebufferRenderbuffer(36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer);\n\n\t\t\t\t\t\t_gl.bindRenderbuffer(36161, null);\n\n\t\t\t\t\t\tif (renderTarget.depthBuffer) {\n\t\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\t\tsetupRenderBufferStorage(renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.bindFramebuffer(36160, null);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // Setup color buffer\n\n\n\t\t\tif (isCube) {\n\t\t\t\tstate.bindTexture(34067, textureProperties.__webglTexture);\n\t\t\t\tsetTextureParameters(34067, renderTarget.texture, supportsMips);\n\n\t\t\t\tfor (var _i5 = 0; _i5 < 6; _i5++) {\n\t\t\t\t\tsetupFrameBufferTexture(renderTargetProperties.__webglFramebuffer[_i5], renderTarget, 36064, 34069 + _i5);\n\t\t\t\t}\n\n\t\t\t\tif (textureNeedsGenerateMipmaps(renderTarget.texture, supportsMips)) {\n\t\t\t\t\tgenerateMipmap(34067, renderTarget.texture, renderTarget.width, renderTarget.height);\n\t\t\t\t}\n\n\t\t\t\tstate.bindTexture(34067, null);\n\t\t\t} else {\n\t\t\t\tstate.bindTexture(3553, textureProperties.__webglTexture);\n\t\t\t\tsetTextureParameters(3553, renderTarget.texture, supportsMips);\n\t\t\t\tsetupFrameBufferTexture(renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553);\n\n\t\t\t\tif (textureNeedsGenerateMipmaps(renderTarget.texture, supportsMips)) {\n\t\t\t\t\tgenerateMipmap(3553, renderTarget.texture, renderTarget.width, renderTarget.height);\n\t\t\t\t}\n\n\t\t\t\tstate.bindTexture(3553, null);\n\t\t\t} // Setup depth and stencil buffers\n\n\n\t\t\tif (renderTarget.depthBuffer) {\n\t\t\t\tsetupDepthRenderbuffer(renderTarget);\n\t\t\t}\n\t\t}\n\n\t\tfunction updateRenderTargetMipmap(renderTarget) {\n\t\t\tvar texture = renderTarget.texture;\n\t\t\tvar supportsMips = isPowerOfTwo(renderTarget) || isWebGL2;\n\n\t\t\tif (textureNeedsGenerateMipmaps(texture, supportsMips)) {\n\t\t\t\tvar target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\n\t\t\t\tvar webglTexture = properties.get(texture).__webglTexture;\n\n\t\t\t\tstate.bindTexture(target, webglTexture);\n\t\t\t\tgenerateMipmap(target, texture, renderTarget.width, renderTarget.height);\n\t\t\t\tstate.bindTexture(target, null);\n\t\t\t}\n\t\t}\n\n\t\tfunction updateMultisampleRenderTarget(renderTarget) {\n\t\t\tif (renderTarget.isWebGLMultisampleRenderTarget) {\n\t\t\t\tif (isWebGL2) {\n\t\t\t\t\tvar renderTargetProperties = properties.get(renderTarget);\n\n\t\t\t\t\t_gl.bindFramebuffer(36008, renderTargetProperties.__webglMultisampledFramebuffer);\n\n\t\t\t\t\t_gl.bindFramebuffer(36009, renderTargetProperties.__webglFramebuffer);\n\n\t\t\t\t\tvar width = renderTarget.width;\n\t\t\t\t\tvar height = renderTarget.height;\n\t\t\t\t\tvar mask = 16384;\n\t\t\t\t\tif (renderTarget.depthBuffer) mask |= 256;\n\t\t\t\t\tif (renderTarget.stencilBuffer) mask |= 1024;\n\n\t\t\t\t\t_gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, mask, 9728);\n\n\t\t\t\t\t_gl.bindFramebuffer(36160, renderTargetProperties.__webglMultisampledFramebuffer); // see #18905\n\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction getRenderTargetSamples(renderTarget) {\n\t\t\treturn isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ? Math.min(maxSamples, renderTarget.samples) : 0;\n\t\t}\n\n\t\tfunction updateVideoTexture(texture) {\n\t\t\tvar frame = info.render.frame; // Check the last frame we updated the VideoTexture\n\n\t\t\tif (_videoTextures.get(texture) !== frame) {\n\t\t\t\t_videoTextures.set(texture, frame);\n\n\t\t\t\ttexture.update();\n\t\t\t}\n\t\t} // backwards compatibility\n\n\n\t\tvar warnedTexture2D = false;\n\t\tvar warnedTextureCube = false;\n\n\t\tfunction safeSetTexture2D(texture, slot) {\n\t\t\tif (texture && texture.isWebGLRenderTarget) {\n\t\t\t\tif (warnedTexture2D === false) {\n\t\t\t\t\tconsole.warn('THREE.WebGLTextures.safeSetTexture2D: don\\'t use render targets as textures. Use their .texture property instead.');\n\t\t\t\t\twarnedTexture2D = true;\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\t\t\t}\n\n\t\t\tsetTexture2D(texture, slot);\n\t\t}\n\n\t\tfunction safeSetTextureCube(texture, slot) {\n\t\t\tif (texture && texture.isWebGLCubeRenderTarget) {\n\t\t\t\tif (warnedTextureCube === false) {\n\t\t\t\t\tconsole.warn('THREE.WebGLTextures.safeSetTextureCube: don\\'t use cube render targets as textures. Use their .texture property instead.');\n\t\t\t\t\twarnedTextureCube = true;\n\t\t\t\t}\n\n\t\t\t\ttexture = texture.texture;\n\t\t\t}\n\n\t\t\tsetTextureCube(texture, slot);\n\t\t} //\n\n\n\t\tthis.allocateTextureUnit = allocateTextureUnit;\n\t\tthis.resetTextureUnits = resetTextureUnits;\n\t\tthis.setTexture2D = setTexture2D;\n\t\tthis.setTexture2DArray = setTexture2DArray;\n\t\tthis.setTexture3D = setTexture3D;\n\t\tthis.setTextureCube = setTextureCube;\n\t\tthis.setupRenderTarget = setupRenderTarget;\n\t\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\t\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\t\tthis.safeSetTexture2D = safeSetTexture2D;\n\t\tthis.safeSetTextureCube = safeSetTextureCube;\n\t}\n\n\tfunction WebGLUtils(gl, extensions, capabilities) {\n\t\tvar isWebGL2 = capabilities.isWebGL2;\n\n\t\tfunction convert(p) {\n\t\t\tvar extension;\n\t\t\tif (p === UnsignedByteType) return 5121;\n\t\t\tif (p === UnsignedShort4444Type) return 32819;\n\t\t\tif (p === UnsignedShort5551Type) return 32820;\n\t\t\tif (p === UnsignedShort565Type) return 33635;\n\t\t\tif (p === ByteType) return 5120;\n\t\t\tif (p === ShortType) return 5122;\n\t\t\tif (p === UnsignedShortType) return 5123;\n\t\t\tif (p === IntType) return 5124;\n\t\t\tif (p === UnsignedIntType) return 5125;\n\t\t\tif (p === FloatType) return 5126;\n\n\t\t\tif (p === HalfFloatType) {\n\t\t\t\tif (isWebGL2) return 5131;\n\t\t\t\textension = extensions.get('OES_texture_half_float');\n\n\t\t\t\tif (extension !== null) {\n\t\t\t\t\treturn extension.HALF_FLOAT_OES;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (p === AlphaFormat) return 6406;\n\t\t\tif (p === RGBFormat) return 6407;\n\t\t\tif (p === RGBAFormat) return 6408;\n\t\t\tif (p === LuminanceFormat) return 6409;\n\t\t\tif (p === LuminanceAlphaFormat) return 6410;\n\t\t\tif (p === DepthFormat) return 6402;\n\t\t\tif (p === DepthStencilFormat) return 34041;\n\t\t\tif (p === RedFormat) return 6403; // WebGL2 formats.\n\n\t\t\tif (p === RedIntegerFormat) return 36244;\n\t\t\tif (p === RGFormat) return 33319;\n\t\t\tif (p === RGIntegerFormat) return 33320;\n\t\t\tif (p === RGBIntegerFormat) return 36248;\n\t\t\tif (p === RGBAIntegerFormat) return 36249;\n\n\t\t\tif (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) {\n\t\t\t\textension = extensions.get('WEBGL_compressed_texture_s3tc');\n\n\t\t\t\tif (extension !== null) {\n\t\t\t\t\tif (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif (p === RGBA_S3TC_DXT1_Format) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif (p === RGBA_S3TC_DXT5_Format) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) {\n\t\t\t\textension = extensions.get('WEBGL_compressed_texture_pvrtc');\n\n\t\t\t\tif (extension !== null) {\n\t\t\t\t\tif (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\t\tif (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\t\tif (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\t\tif (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (p === RGB_ETC1_Format) {\n\t\t\t\textension = extensions.get('WEBGL_compressed_texture_etc1');\n\n\t\t\t\tif (extension !== null) {\n\t\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format) {\n\t\t\t\textension = extensions.get('WEBGL_compressed_texture_etc');\n\n\t\t\t\tif (extension !== null) {\n\t\t\t\t\tif (p === RGB_ETC2_Format) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\t\tif (p === RGBA_ETC2_EAC_Format) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format || p === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format || p === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format || p === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format || p === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format || p === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format) {\n\t\t\t\textension = extensions.get('WEBGL_compressed_texture_astc');\n\n\t\t\t\tif (extension !== null) {\n\t\t\t\t\t// TODO Complete?\n\t\t\t\t\treturn p;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (p === RGBA_BPTC_Format) {\n\t\t\t\textension = extensions.get('EXT_texture_compression_bptc');\n\n\t\t\t\tif (extension !== null) {\n\t\t\t\t\t// TODO Complete?\n\t\t\t\t\treturn p;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (p === UnsignedInt248Type) {\n\t\t\t\tif (isWebGL2) return 34042;\n\t\t\t\textension = extensions.get('WEBGL_depth_texture');\n\n\t\t\t\tif (extension !== null) {\n\t\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tconvert: convert\n\t\t};\n\t}\n\n\tfunction ArrayCamera(array) {\n\t\tif (array === void 0) {\n\t\t\tarray = [];\n\t\t}\n\n\t\tPerspectiveCamera.call(this);\n\t\tthis.cameras = array;\n\t}\n\n\tArrayCamera.prototype = Object.assign(Object.create(PerspectiveCamera.prototype), {\n\t\tconstructor: ArrayCamera,\n\t\tisArrayCamera: true\n\t});\n\n\tfunction Group() {\n\t\tObject3D.call(this);\n\t\tthis.type = 'Group';\n\t}\n\n\tGroup.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: Group,\n\t\tisGroup: true\n\t});\n\n\tfunction WebXRController() {\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\t}\n\n\tObject.assign(WebXRController.prototype, {\n\t\tconstructor: WebXRController,\n\t\tgetHandSpace: function getHandSpace() {\n\t\t\tif (this._hand === null) {\n\t\t\t\tthis._hand = new Group();\n\t\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\t\tthis._hand.visible = false;\n\t\t\t\tthis._hand.joints = [];\n\t\t\t\tthis._hand.inputState = {\n\t\t\t\t\tpinching: false\n\t\t\t\t};\n\n\t\t\t\tif (window.XRHand) {\n\t\t\t\t\tfor (var i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i++) {\n\t\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\t\tvar joint = new Group();\n\t\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\t\tjoint.visible = false;\n\n\t\t\t\t\t\tthis._hand.joints.push(joint); // ??\n\n\n\t\t\t\t\t\tthis._hand.add(joint);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this._hand;\n\t\t},\n\t\tgetTargetRaySpace: function getTargetRaySpace() {\n\t\t\tif (this._targetRay === null) {\n\t\t\t\tthis._targetRay = new Group();\n\t\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\t\tthis._targetRay.visible = false;\n\t\t\t}\n\n\t\t\treturn this._targetRay;\n\t\t},\n\t\tgetGripSpace: function getGripSpace() {\n\t\t\tif (this._grip === null) {\n\t\t\t\tthis._grip = new Group();\n\t\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\t\tthis._grip.visible = false;\n\t\t\t}\n\n\t\t\treturn this._grip;\n\t\t},\n\t\tdispatchEvent: function dispatchEvent(event) {\n\t\t\tif (this._targetRay !== null) {\n\t\t\t\tthis._targetRay.dispatchEvent(event);\n\t\t\t}\n\n\t\t\tif (this._grip !== null) {\n\t\t\t\tthis._grip.dispatchEvent(event);\n\t\t\t}\n\n\t\t\tif (this._hand !== null) {\n\t\t\t\tthis._hand.dispatchEvent(event);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tdisconnect: function disconnect(inputSource) {\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'disconnected',\n\t\t\t\tdata: inputSource\n\t\t\t});\n\n\t\t\tif (this._targetRay !== null) {\n\t\t\t\tthis._targetRay.visible = false;\n\t\t\t}\n\n\t\t\tif (this._grip !== null) {\n\t\t\t\tthis._grip.visible = false;\n\t\t\t}\n\n\t\t\tif (this._hand !== null) {\n\t\t\t\tthis._hand.visible = false;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tupdate: function update(inputSource, frame, referenceSpace) {\n\t\t\tvar inputPose = null;\n\t\t\tvar gripPose = null;\n\t\t\tvar handPose = null;\n\t\t\tvar targetRay = this._targetRay;\n\t\t\tvar grip = this._grip;\n\t\t\tvar hand = this._hand;\n\n\t\t\tif (inputSource && frame.session.visibilityState !== 'visible-blurred') {\n\t\t\t\tif (hand && inputSource.hand) {\n\t\t\t\t\thandPose = true;\n\n\t\t\t\t\tfor (var i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i++) {\n\t\t\t\t\t\tif (inputSource.hand[i]) {\n\t\t\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\t\t\tvar jointPose = frame.getJointPose(inputSource.hand[i], referenceSpace);\n\t\t\t\t\t\t\tvar joint = hand.joints[i];\n\n\t\t\t\t\t\t\tif (jointPose !== null) {\n\t\t\t\t\t\t\t\tjoint.matrix.fromArray(jointPose.transform.matrix);\n\t\t\t\t\t\t\t\tjoint.matrix.decompose(joint.position, joint.rotation, joint.scale);\n\t\t\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tjoint.visible = jointPose !== null; // Custom events\n\t\t\t\t\t\t\t// Check pinch\n\n\t\t\t\t\t\t\tvar indexTip = hand.joints[window.XRHand.INDEX_PHALANX_TIP];\n\t\t\t\t\t\t\tvar thumbTip = hand.joints[window.XRHand.THUMB_PHALANX_TIP];\n\t\t\t\t\t\t\tvar distance = indexTip.position.distanceTo(thumbTip.position);\n\t\t\t\t\t\t\tvar distanceToPinch = 0.02;\n\t\t\t\t\t\t\tvar threshold = 0.005;\n\n\t\t\t\t\t\t\tif (hand.inputState.pinching && distance > distanceToPinch + threshold) {\n\t\t\t\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else if (!hand.inputState.pinching && distance <= distanceToPinch - threshold) {\n\t\t\t\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\t\t\t\tthis.dispatchEvent({\n\t\t\t\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (targetRay !== null) {\n\t\t\t\t\t\tinputPose = frame.getPose(inputSource.targetRaySpace, referenceSpace);\n\n\t\t\t\t\t\tif (inputPose !== null) {\n\t\t\t\t\t\t\ttargetRay.matrix.fromArray(inputPose.transform.matrix);\n\t\t\t\t\t\t\ttargetRay.matrix.decompose(targetRay.position, targetRay.rotation, targetRay.scale);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (grip !== null && inputSource.gripSpace) {\n\t\t\t\t\t\tgripPose = frame.getPose(inputSource.gripSpace, referenceSpace);\n\n\t\t\t\t\t\tif (gripPose !== null) {\n\t\t\t\t\t\t\tgrip.matrix.fromArray(gripPose.transform.matrix);\n\t\t\t\t\t\t\tgrip.matrix.decompose(grip.position, grip.rotation, grip.scale);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (targetRay !== null) {\n\t\t\t\ttargetRay.visible = inputPose !== null;\n\t\t\t}\n\n\t\t\tif (grip !== null) {\n\t\t\t\tgrip.visible = gripPose !== null;\n\t\t\t}\n\n\t\t\tif (hand !== null) {\n\t\t\t\thand.visible = handPose !== null;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction WebXRManager(renderer, gl) {\n\t\tvar scope = this;\n\t\tvar session = null;\n\t\tvar framebufferScaleFactor = 1.0;\n\t\tvar referenceSpace = null;\n\t\tvar referenceSpaceType = 'local-floor';\n\t\tvar pose = null;\n\t\tvar controllers = [];\n\t\tvar inputSourcesMap = new Map(); //\n\n\t\tvar cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable(1);\n\t\tcameraL.viewport = new Vector4();\n\t\tvar cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable(2);\n\t\tcameraR.viewport = new Vector4();\n\t\tvar cameras = [cameraL, cameraR];\n\t\tvar cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable(1);\n\t\tcameraVR.layers.enable(2);\n\t\tvar _currentDepthNear = null;\n\t\tvar _currentDepthFar = null; //\n\n\t\tthis.enabled = false;\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function (index) {\n\t\t\tvar controller = controllers[index];\n\n\t\t\tif (controller === undefined) {\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[index] = controller;\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\t\t};\n\n\t\tthis.getControllerGrip = function (index) {\n\t\t\tvar controller = controllers[index];\n\n\t\t\tif (controller === undefined) {\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[index] = controller;\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\t\t};\n\n\t\tthis.getHand = function (index) {\n\t\t\tvar controller = controllers[index];\n\n\t\t\tif (controller === undefined) {\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[index] = controller;\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\t\t}; //\n\n\n\t\tfunction onSessionEvent(event) {\n\t\t\tvar controller = inputSourcesMap.get(event.inputSource);\n\n\t\t\tif (controller) {\n\t\t\t\tcontroller.dispatchEvent({\n\t\t\t\t\ttype: event.type,\n\t\t\t\t\tdata: event.inputSource\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\t\t\tinputSourcesMap.forEach(function (controller, inputSource) {\n\t\t\t\tcontroller.disconnect(inputSource);\n\t\t\t});\n\t\t\tinputSourcesMap.clear(); //\n\n\t\t\trenderer.setFramebuffer(null);\n\t\t\trenderer.setRenderTarget(renderer.getRenderTarget()); // Hack #15830\n\n\t\t\tanimation.stop();\n\t\t\tscope.isPresenting = false;\n\t\t\tscope.dispatchEvent({\n\t\t\t\ttype: 'sessionend'\n\t\t\t});\n\t\t}\n\n\t\tfunction onRequestReferenceSpace(value) {\n\t\t\treferenceSpace = value;\n\t\t\tanimation.setContext(session);\n\t\t\tanimation.start();\n\t\t\tscope.isPresenting = true;\n\t\t\tscope.dispatchEvent({\n\t\t\t\ttype: 'sessionstart'\n\t\t\t});\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function (value) {\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif (scope.isPresenting === true) {\n\t\t\t\tconsole.warn('THREE.WebXRManager: Cannot change framebuffer scale while presenting.');\n\t\t\t}\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function (value) {\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif (scope.isPresenting === true) {\n\t\t\t\tconsole.warn('THREE.WebXRManager: Cannot change reference space type while presenting.');\n\t\t\t}\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\t\t\treturn referenceSpace;\n\t\t};\n\n\t\tthis.getSession = function () {\n\t\t\treturn session;\n\t\t};\n\n\t\tthis.setSession = function (value) {\n\t\t\tsession = value;\n\n\t\t\tif (session !== null) {\n\t\t\t\tsession.addEventListener('select', onSessionEvent);\n\t\t\t\tsession.addEventListener('selectstart', onSessionEvent);\n\t\t\t\tsession.addEventListener('selectend', onSessionEvent);\n\t\t\t\tsession.addEventListener('squeeze', onSessionEvent);\n\t\t\t\tsession.addEventListener('squeezestart', onSessionEvent);\n\t\t\t\tsession.addEventListener('squeezeend', onSessionEvent);\n\t\t\t\tsession.addEventListener('end', onSessionEnd);\n\t\t\t\tvar attributes = gl.getContextAttributes();\n\n\t\t\t\tif (attributes.xrCompatible !== true) {\n\t\t\t\t\tgl.makeXRCompatible();\n\t\t\t\t}\n\n\t\t\t\tvar layerInit = {\n\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t}; // eslint-disable-next-line no-undef\n\n\t\t\t\tvar baseLayer = new XRWebGLLayer(session, gl, layerInit);\n\t\t\t\tsession.updateRenderState({\n\t\t\t\t\tbaseLayer: baseLayer\n\t\t\t\t});\n\t\t\t\tsession.requestReferenceSpace(referenceSpaceType).then(onRequestReferenceSpace); //\n\n\t\t\t\tsession.addEventListener('inputsourceschange', updateInputSources);\n\t\t\t}\n\t\t};\n\n\t\tfunction updateInputSources(event) {\n\t\t\tvar inputSources = session.inputSources; // Assign inputSources to available controllers\n\n\t\t\tfor (var i = 0; i < controllers.length; i++) {\n\t\t\t\tinputSourcesMap.set(inputSources[i], controllers[i]);\n\t\t\t} // Notify disconnected\n\n\n\t\t\tfor (var _i = 0; _i < event.removed.length; _i++) {\n\t\t\t\tvar inputSource = event.removed[_i];\n\t\t\t\tvar controller = inputSourcesMap.get(inputSource);\n\n\t\t\t\tif (controller) {\n\t\t\t\t\tcontroller.dispatchEvent({\n\t\t\t\t\t\ttype: 'disconnected',\n\t\t\t\t\t\tdata: inputSource\n\t\t\t\t\t});\n\t\t\t\t\tinputSourcesMap.delete(inputSource);\n\t\t\t\t}\n\t\t\t} // Notify connected\n\n\n\t\t\tfor (var _i2 = 0; _i2 < event.added.length; _i2++) {\n\t\t\t\tvar _inputSource = event.added[_i2];\n\n\t\t\t\tvar _controller = inputSourcesMap.get(_inputSource);\n\n\t\t\t\tif (_controller) {\n\t\t\t\t\t_controller.dispatchEvent({\n\t\t\t\t\t\ttype: 'connected',\n\t\t\t\t\t\tdata: _inputSource\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} //\n\n\n\t\tvar cameraLPos = new Vector3();\n\t\tvar cameraRPos = new Vector3();\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\n\t\tfunction setProjectionFromUnion(camera, cameraL, cameraR) {\n\t\t\tcameraLPos.setFromMatrixPosition(cameraL.matrixWorld);\n\t\t\tcameraRPos.setFromMatrixPosition(cameraR.matrixWorld);\n\t\t\tvar ipd = cameraLPos.distanceTo(cameraRPos);\n\t\t\tvar projL = cameraL.projectionMatrix.elements;\n\t\t\tvar projR = cameraR.projectionMatrix.elements; // VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\n\t\t\tvar near = projL[14] / (projL[10] - 1);\n\t\t\tvar far = projL[14] / (projL[10] + 1);\n\t\t\tvar topFov = (projL[9] + 1) / projL[5];\n\t\t\tvar bottomFov = (projL[9] - 1) / projL[5];\n\t\t\tvar leftFov = (projL[8] - 1) / projL[0];\n\t\t\tvar rightFov = (projR[8] + 1) / projR[0];\n\t\t\tvar left = near * leftFov;\n\t\t\tvar right = near * rightFov; // Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\n\t\t\tvar zOffset = ipd / (-leftFov + rightFov);\n\t\t\tvar xOffset = zOffset * -leftFov; // TODO: Better way to apply this offset?\n\n\t\t\tcameraL.matrixWorld.decompose(camera.position, camera.quaternion, camera.scale);\n\t\t\tcamera.translateX(xOffset);\n\t\t\tcamera.translateZ(zOffset);\n\t\t\tcamera.matrixWorld.compose(camera.position, camera.quaternion, camera.scale);\n\t\t\tcamera.matrixWorldInverse.copy(camera.matrixWorld).invert(); // Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\n\t\t\tvar near2 = near + zOffset;\n\t\t\tvar far2 = far + zOffset;\n\t\t\tvar left2 = left - xOffset;\n\t\t\tvar right2 = right + (ipd - xOffset);\n\t\t\tvar top2 = topFov * far / far2 * near2;\n\t\t\tvar bottom2 = bottomFov * far / far2 * near2;\n\t\t\tcamera.projectionMatrix.makePerspective(left2, right2, top2, bottom2, near2, far2);\n\t\t}\n\n\t\tfunction updateCamera(camera, parent) {\n\t\t\tif (parent === null) {\n\t\t\t\tcamera.matrixWorld.copy(camera.matrix);\n\t\t\t} else {\n\t\t\t\tcamera.matrixWorld.multiplyMatrices(parent.matrixWorld, camera.matrix);\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy(camera.matrixWorld).invert();\n\t\t}\n\n\t\tthis.getCamera = function (camera) {\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif (_currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far) {\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\t\t\t\tsession.updateRenderState({\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t});\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\t\t\t}\n\n\t\t\tvar parent = camera.parent;\n\t\t\tvar cameras = cameraVR.cameras;\n\t\t\tupdateCamera(cameraVR, parent);\n\n\t\t\tfor (var i = 0; i < cameras.length; i++) {\n\t\t\t\tupdateCamera(cameras[i], parent);\n\t\t\t} // update camera and its children\n\n\n\t\t\tcamera.matrixWorld.copy(cameraVR.matrixWorld);\n\t\t\tvar children = camera.children;\n\n\t\t\tfor (var _i3 = 0, l = children.length; _i3 < l; _i3++) {\n\t\t\t\tchildren[_i3].updateMatrixWorld(true);\n\t\t\t} // update projection matrix for proper view frustum culling\n\n\n\t\t\tif (cameras.length === 2) {\n\t\t\t\tsetProjectionFromUnion(cameraVR, cameraL, cameraR);\n\t\t\t} else {\n\t\t\t\t// assume single camera setup (AR)\n\t\t\t\tcameraVR.projectionMatrix.copy(cameraL.projectionMatrix);\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\t\t}; // Animation Loop\n\n\n\t\tvar onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame(time, frame) {\n\t\t\tpose = frame.getViewerPose(referenceSpace);\n\n\t\t\tif (pose !== null) {\n\t\t\t\tvar views = pose.views;\n\t\t\t\tvar baseLayer = session.renderState.baseLayer;\n\t\t\t\trenderer.setFramebuffer(baseLayer.framebuffer);\n\t\t\t\tvar cameraVRNeedsUpdate = false; // check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif (views.length !== cameraVR.cameras.length) {\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0; i < views.length; i++) {\n\t\t\t\t\tvar view = views[i];\n\t\t\t\t\tvar viewport = baseLayer.getViewport(view);\n\t\t\t\t\tvar camera = cameras[i];\n\t\t\t\t\tcamera.matrix.fromArray(view.transform.matrix);\n\t\t\t\t\tcamera.projectionMatrix.fromArray(view.projectionMatrix);\n\t\t\t\t\tcamera.viewport.set(viewport.x, viewport.y, viewport.width, viewport.height);\n\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tcameraVR.matrix.copy(camera.matrix);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cameraVRNeedsUpdate === true) {\n\t\t\t\t\t\tcameraVR.cameras.push(camera);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} //\n\n\n\t\t\tvar inputSources = session.inputSources;\n\n\t\t\tfor (var _i4 = 0; _i4 < controllers.length; _i4++) {\n\t\t\t\tvar controller = controllers[_i4];\n\t\t\t\tvar inputSource = inputSources[_i4];\n\t\t\t\tcontroller.update(inputSource, frame, referenceSpace);\n\t\t\t}\n\n\t\t\tif (onAnimationFrameCallback) onAnimationFrameCallback(time, frame);\n\t\t}\n\n\t\tvar animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop(onAnimationFrame);\n\n\t\tthis.setAnimationLoop = function (callback) {\n\t\t\tonAnimationFrameCallback = callback;\n\t\t};\n\n\t\tthis.dispose = function () {};\n\t}\n\n\tObject.assign(WebXRManager.prototype, EventDispatcher.prototype);\n\n\tfunction WebGLMaterials(properties) {\n\t\tfunction refreshFogUniforms(uniforms, fog) {\n\t\t\tuniforms.fogColor.value.copy(fog.color);\n\n\t\t\tif (fog.isFog) {\n\t\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\t\tuniforms.fogFar.value = fog.far;\n\t\t\t} else if (fog.isFogExp2) {\n\t\t\t\tuniforms.fogDensity.value = fog.density;\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshMaterialUniforms(uniforms, material, pixelRatio, height) {\n\t\t\tif (material.isMeshBasicMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\t\t\t} else if (material.isMeshLambertMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\t\t\t\trefreshUniformsLambert(uniforms, material);\n\t\t\t} else if (material.isMeshToonMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\t\t\t\trefreshUniformsToon(uniforms, material);\n\t\t\t} else if (material.isMeshPhongMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\t\t\t\trefreshUniformsPhong(uniforms, material);\n\t\t\t} else if (material.isMeshStandardMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\n\t\t\t\tif (material.isMeshPhysicalMaterial) {\n\t\t\t\t\trefreshUniformsPhysical(uniforms, material);\n\t\t\t\t} else {\n\t\t\t\t\trefreshUniformsStandard(uniforms, material);\n\t\t\t\t}\n\t\t\t} else if (material.isMeshMatcapMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\t\t\t\trefreshUniformsMatcap(uniforms, material);\n\t\t\t} else if (material.isMeshDepthMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\t\t\t\trefreshUniformsDepth(uniforms, material);\n\t\t\t} else if (material.isMeshDistanceMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\t\t\t\trefreshUniformsDistance(uniforms, material);\n\t\t\t} else if (material.isMeshNormalMaterial) {\n\t\t\t\trefreshUniformsCommon(uniforms, material);\n\t\t\t\trefreshUniformsNormal(uniforms, material);\n\t\t\t} else if (material.isLineBasicMaterial) {\n\t\t\t\trefreshUniformsLine(uniforms, material);\n\n\t\t\t\tif (material.isLineDashedMaterial) {\n\t\t\t\t\trefreshUniformsDash(uniforms, material);\n\t\t\t\t}\n\t\t\t} else if (material.isPointsMaterial) {\n\t\t\t\trefreshUniformsPoints(uniforms, material, pixelRatio, height);\n\t\t\t} else if (material.isSpriteMaterial) {\n\t\t\t\trefreshUniformsSprites(uniforms, material);\n\t\t\t} else if (material.isShadowMaterial) {\n\t\t\t\tuniforms.color.value.copy(material.color);\n\t\t\t\tuniforms.opacity.value = material.opacity;\n\t\t\t} else if (material.isShaderMaterial) {\n\t\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsCommon(uniforms, material) {\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t\tif (material.color) {\n\t\t\t\tuniforms.diffuse.value.copy(material.color);\n\t\t\t}\n\n\t\t\tif (material.emissive) {\n\t\t\t\tuniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity);\n\t\t\t}\n\n\t\t\tif (material.map) {\n\t\t\t\tuniforms.map.value = material.map;\n\t\t\t}\n\n\t\t\tif (material.alphaMap) {\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\t\t\t}\n\n\t\t\tif (material.specularMap) {\n\t\t\t\tuniforms.specularMap.value = material.specularMap;\n\t\t\t}\n\n\t\t\tvar envMap = properties.get(material).envMap;\n\n\t\t\tif (envMap) {\n\t\t\t\tuniforms.envMap.value = envMap;\n\t\t\t\tuniforms.flipEnvMap.value = envMap.isCubeTexture && envMap._needsFlipEnvMap ? -1 : 1;\n\t\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\t\tvar maxMipLevel = properties.get(envMap).__maxMipLevel;\n\n\t\t\t\tif (maxMipLevel !== undefined) {\n\t\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (material.lightMap) {\n\t\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\t\t\t}\n\n\t\t\tif (material.aoMap) {\n\t\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\t\t\t} // uv repeat and offset setting priorities\n\t\t\t// 1. color map\n\t\t\t// 2. specular map\n\t\t\t// 3. displacementMap map\n\t\t\t// 4. normal map\n\t\t\t// 5. bump map\n\t\t\t// 6. roughnessMap map\n\t\t\t// 7. metalnessMap map\n\t\t\t// 8. alphaMap map\n\t\t\t// 9. emissiveMap map\n\t\t\t// 10. clearcoat map\n\t\t\t// 11. clearcoat normal map\n\t\t\t// 12. clearcoat roughnessMap map\n\n\n\t\t\tvar uvScaleMap;\n\n\t\t\tif (material.map) {\n\t\t\t\tuvScaleMap = material.map;\n\t\t\t} else if (material.specularMap) {\n\t\t\t\tuvScaleMap = material.specularMap;\n\t\t\t} else if (material.displacementMap) {\n\t\t\t\tuvScaleMap = material.displacementMap;\n\t\t\t} else if (material.normalMap) {\n\t\t\t\tuvScaleMap = material.normalMap;\n\t\t\t} else if (material.bumpMap) {\n\t\t\t\tuvScaleMap = material.bumpMap;\n\t\t\t} else if (material.roughnessMap) {\n\t\t\t\tuvScaleMap = material.roughnessMap;\n\t\t\t} else if (material.metalnessMap) {\n\t\t\t\tuvScaleMap = material.metalnessMap;\n\t\t\t} else if (material.alphaMap) {\n\t\t\t\tuvScaleMap = material.alphaMap;\n\t\t\t} else if (material.emissiveMap) {\n\t\t\t\tuvScaleMap = material.emissiveMap;\n\t\t\t} else if (material.clearcoatMap) {\n\t\t\t\tuvScaleMap = material.clearcoatMap;\n\t\t\t} else if (material.clearcoatNormalMap) {\n\t\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\t\t\t} else if (material.clearcoatRoughnessMap) {\n\t\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\t\t\t}\n\n\t\t\tif (uvScaleMap !== undefined) {\n\t\t\t\t// backwards compatibility\n\t\t\t\tif (uvScaleMap.isWebGLRenderTarget) {\n\t\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\t\t\t\t}\n\n\t\t\t\tif (uvScaleMap.matrixAutoUpdate === true) {\n\t\t\t\t\tuvScaleMap.updateMatrix();\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy(uvScaleMap.matrix);\n\t\t\t} // uv repeat and offset setting priorities for uv2\n\t\t\t// 1. ao map\n\t\t\t// 2. light map\n\n\n\t\t\tvar uv2ScaleMap;\n\n\t\t\tif (material.aoMap) {\n\t\t\t\tuv2ScaleMap = material.aoMap;\n\t\t\t} else if (material.lightMap) {\n\t\t\t\tuv2ScaleMap = material.lightMap;\n\t\t\t}\n\n\t\t\tif (uv2ScaleMap !== undefined) {\n\t\t\t\t// backwards compatibility\n\t\t\t\tif (uv2ScaleMap.isWebGLRenderTarget) {\n\t\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\t\t\t\t}\n\n\t\t\t\tif (uv2ScaleMap.matrixAutoUpdate === true) {\n\t\t\t\t\tuv2ScaleMap.updateMatrix();\n\t\t\t\t}\n\n\t\t\t\tuniforms.uv2Transform.value.copy(uv2ScaleMap.matrix);\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsLine(uniforms, material) {\n\t\t\tuniforms.diffuse.value.copy(material.color);\n\t\t\tuniforms.opacity.value = material.opacity;\n\t\t}\n\n\t\tfunction refreshUniformsDash(uniforms, material) {\n\t\t\tuniforms.dashSize.value = material.dashSize;\n\t\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\t\tuniforms.scale.value = material.scale;\n\t\t}\n\n\t\tfunction refreshUniformsPoints(uniforms, material, pixelRatio, height) {\n\t\t\tuniforms.diffuse.value.copy(material.color);\n\t\t\tuniforms.opacity.value = material.opacity;\n\t\t\tuniforms.size.value = material.size * pixelRatio;\n\t\t\tuniforms.scale.value = height * 0.5;\n\n\t\t\tif (material.map) {\n\t\t\t\tuniforms.map.value = material.map;\n\t\t\t}\n\n\t\t\tif (material.alphaMap) {\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\t\t\t} // uv repeat and offset setting priorities\n\t\t\t// 1. color map\n\t\t\t// 2. alpha map\n\n\n\t\t\tvar uvScaleMap;\n\n\t\t\tif (material.map) {\n\t\t\t\tuvScaleMap = material.map;\n\t\t\t} else if (material.alphaMap) {\n\t\t\t\tuvScaleMap = material.alphaMap;\n\t\t\t}\n\n\t\t\tif (uvScaleMap !== undefined) {\n\t\t\t\tif (uvScaleMap.matrixAutoUpdate === true) {\n\t\t\t\t\tuvScaleMap.updateMatrix();\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy(uvScaleMap.matrix);\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsSprites(uniforms, material) {\n\t\t\tuniforms.diffuse.value.copy(material.color);\n\t\t\tuniforms.opacity.value = material.opacity;\n\t\t\tuniforms.rotation.value = material.rotation;\n\n\t\t\tif (material.map) {\n\t\t\t\tuniforms.map.value = material.map;\n\t\t\t}\n\n\t\t\tif (material.alphaMap) {\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\t\t\t} // uv repeat and offset setting priorities\n\t\t\t// 1. color map\n\t\t\t// 2. alpha map\n\n\n\t\t\tvar uvScaleMap;\n\n\t\t\tif (material.map) {\n\t\t\t\tuvScaleMap = material.map;\n\t\t\t} else if (material.alphaMap) {\n\t\t\t\tuvScaleMap = material.alphaMap;\n\t\t\t}\n\n\t\t\tif (uvScaleMap !== undefined) {\n\t\t\t\tif (uvScaleMap.matrixAutoUpdate === true) {\n\t\t\t\t\tuvScaleMap.updateMatrix();\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy(uvScaleMap.matrix);\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsLambert(uniforms, material) {\n\t\t\tif (material.emissiveMap) {\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsPhong(uniforms, material) {\n\t\t\tuniforms.specular.value.copy(material.specular);\n\t\t\tuniforms.shininess.value = Math.max(material.shininess, 1e-4); // to prevent pow( 0.0, 0.0 )\n\n\t\t\tif (material.emissiveMap) {\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\t\t\t}\n\n\t\t\tif (material.bumpMap) {\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif (material.side === BackSide) uniforms.bumpScale.value *= -1;\n\t\t\t}\n\n\t\t\tif (material.normalMap) {\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy(material.normalScale);\n\t\t\t\tif (material.side === BackSide) uniforms.normalScale.value.negate();\n\t\t\t}\n\n\t\t\tif (material.displacementMap) {\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsToon(uniforms, material) {\n\t\t\tif (material.gradientMap) {\n\t\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\t\t\t}\n\n\t\t\tif (material.emissiveMap) {\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\t\t\t}\n\n\t\t\tif (material.bumpMap) {\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif (material.side === BackSide) uniforms.bumpScale.value *= -1;\n\t\t\t}\n\n\t\t\tif (material.normalMap) {\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy(material.normalScale);\n\t\t\t\tif (material.side === BackSide) uniforms.normalScale.value.negate();\n\t\t\t}\n\n\t\t\tif (material.displacementMap) {\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsStandard(uniforms, material) {\n\t\t\tuniforms.roughness.value = material.roughness;\n\t\t\tuniforms.metalness.value = material.metalness;\n\n\t\t\tif (material.roughnessMap) {\n\t\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\t\t\t}\n\n\t\t\tif (material.metalnessMap) {\n\t\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\t\t\t}\n\n\t\t\tif (material.emissiveMap) {\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\t\t\t}\n\n\t\t\tif (material.bumpMap) {\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif (material.side === BackSide) uniforms.bumpScale.value *= -1;\n\t\t\t}\n\n\t\t\tif (material.normalMap) {\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy(material.normalScale);\n\t\t\t\tif (material.side === BackSide) uniforms.normalScale.value.negate();\n\t\t\t}\n\n\t\t\tif (material.displacementMap) {\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\t\t\t}\n\n\t\t\tvar envMap = properties.get(material).envMap;\n\n\t\t\tif (envMap) {\n\t\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsPhysical(uniforms, material) {\n\t\t\trefreshUniformsStandard(uniforms, material);\n\t\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\t\t\tif (material.sheen) uniforms.sheen.value.copy(material.sheen);\n\n\t\t\tif (material.clearcoatMap) {\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\t\t\t}\n\n\t\t\tif (material.clearcoatRoughnessMap) {\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\t\t\t}\n\n\t\t\tif (material.clearcoatNormalMap) {\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy(material.clearcoatNormalScale);\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\tif (material.side === BackSide) {\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\n\t\t\tif (material.transmissionMap) {\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsMatcap(uniforms, material) {\n\t\t\tif (material.matcap) {\n\t\t\t\tuniforms.matcap.value = material.matcap;\n\t\t\t}\n\n\t\t\tif (material.bumpMap) {\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif (material.side === BackSide) uniforms.bumpScale.value *= -1;\n\t\t\t}\n\n\t\t\tif (material.normalMap) {\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy(material.normalScale);\n\t\t\t\tif (material.side === BackSide) uniforms.normalScale.value.negate();\n\t\t\t}\n\n\t\t\tif (material.displacementMap) {\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsDepth(uniforms, material) {\n\t\t\tif (material.displacementMap) {\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\t\t\t}\n\t\t}\n\n\t\tfunction refreshUniformsDistance(uniforms, material) {\n\t\t\tif (material.displacementMap) {\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\t\t\t}\n\n\t\t\tuniforms.referencePosition.value.copy(material.referencePosition);\n\t\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\t\tuniforms.farDistance.value = material.farDistance;\n\t\t}\n\n\t\tfunction refreshUniformsNormal(uniforms, material) {\n\t\t\tif (material.bumpMap) {\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif (material.side === BackSide) uniforms.bumpScale.value *= -1;\n\t\t\t}\n\n\t\t\tif (material.normalMap) {\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy(material.normalScale);\n\t\t\t\tif (material.side === BackSide) uniforms.normalScale.value.negate();\n\t\t\t}\n\n\t\t\tif (material.displacementMap) {\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\trefreshFogUniforms: refreshFogUniforms,\n\t\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t\t};\n\t}\n\n\tfunction createCanvasElement() {\n\t\tvar canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');\n\t\tcanvas.style.display = 'block';\n\t\treturn canvas;\n\t}\n\n\tfunction WebGLRenderer(parameters) {\n\t\tparameters = parameters || {};\n\n\t\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\t\t\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\t\tvar currentRenderList = null;\n\t\tvar currentRenderState = null; // render() can be called from within a callback triggered by another render.\n\t\t// We track this so that the nested render call gets its state isolated from the parent render call.\n\n\t\tvar renderStateStack = []; // public properties\n\n\t\tthis.domElement = _canvas; // Debug configuration container\n\n\t\tthis.debug = {\n\t\t\t/**\n\t\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tcheckShaderErrors: true\n\t\t}; // clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true; // scene graph\n\n\t\tthis.sortObjects = true; // user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false; // physically based shading\n\n\t\tthis.gammaFactor = 2.0; // for backwards compatibility\n\n\t\tthis.outputEncoding = LinearEncoding; // physical lights\n\n\t\tthis.physicallyCorrectLights = false; // tone mapping\n\n\t\tthis.toneMapping = NoToneMapping;\n\t\tthis.toneMappingExposure = 1.0; // morphs\n\n\t\tthis.maxMorphTargets = 8;\n\t\tthis.maxMorphNormals = 4; // internal properties\n\n\t\tvar _this = this;\n\n\t\tvar _isContextLost = false; // internal state cache\n\n\t\tvar _framebuffer = null;\n\t\tvar _currentActiveCubeFace = 0;\n\t\tvar _currentActiveMipmapLevel = 0;\n\t\tvar _currentRenderTarget = null;\n\t\tvar _currentFramebuffer = null;\n\n\t\tvar _currentMaterialId = -1;\n\n\t\tvar _currentCamera = null;\n\n\t\tvar _currentViewport = new Vector4();\n\n\t\tvar _currentScissor = new Vector4();\n\n\t\tvar _currentScissorTest = null; //\n\n\t\tvar _width = _canvas.width;\n\t\tvar _height = _canvas.height;\n\t\tvar _pixelRatio = 1;\n\t\tvar _opaqueSort = null;\n\t\tvar _transparentSort = null;\n\n\t\tvar _viewport = new Vector4(0, 0, _width, _height);\n\n\t\tvar _scissor = new Vector4(0, 0, _width, _height);\n\n\t\tvar _scissorTest = false; // frustum\n\n\t\tvar _frustum = new Frustum(); // clipping\n\n\n\t\tvar _clippingEnabled = false;\n\t\tvar _localClippingEnabled = false; // camera matrices cache\n\n\t\tvar _projScreenMatrix = new Matrix4();\n\n\t\tvar _vector3 = new Vector3();\n\n\t\tvar _emptyScene = {\n\t\t\tbackground: null,\n\t\t\tfog: null,\n\t\t\tenvironment: null,\n\t\t\toverrideMaterial: null,\n\t\t\tisScene: true\n\t\t};\n\n\t\tfunction getTargetPixelRatio() {\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\t\t} // initialize\n\n\n\t\tvar _gl = _context;\n\n\t\tfunction getContext(contextNames, contextAttributes) {\n\t\t\tfor (var i = 0; i < contextNames.length; i++) {\n\t\t\t\tvar contextName = contextNames[i];\n\n\t\t\t\tvar context = _canvas.getContext(contextName, contextAttributes);\n\n\t\t\t\tif (context !== null) return context;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tvar contextAttributes = {\n\t\t\t\talpha: _alpha,\n\t\t\t\tdepth: _depth,\n\t\t\t\tstencil: _stencil,\n\t\t\t\tantialias: _antialias,\n\t\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\t\tpowerPreference: _powerPreference,\n\t\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t\t}; // event listeners must be registered before WebGL context is created, see #12753\n\n\t\t\t_canvas.addEventListener('webglcontextlost', onContextLost, false);\n\n\t\t\t_canvas.addEventListener('webglcontextrestored', onContextRestore, false);\n\n\t\t\tif (_gl === null) {\n\t\t\t\tvar contextNames = ['webgl2', 'webgl', 'experimental-webgl'];\n\n\t\t\t\tif (_this.isWebGL1Renderer === true) {\n\t\t\t\t\tcontextNames.shift();\n\t\t\t\t}\n\n\t\t\t\t_gl = getContext(contextNames, contextAttributes);\n\n\t\t\t\tif (_gl === null) {\n\t\t\t\t\tif (getContext(contextNames)) {\n\t\t\t\t\t\tthrow new Error('Error creating WebGL context with your selected attributes.');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error('Error creating WebGL context.');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\n\t\t\tif (_gl.getShaderPrecisionFormat === undefined) {\n\t\t\t\t_gl.getShaderPrecisionFormat = function () {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t'rangeMin': 1,\n\t\t\t\t\t\t'rangeMax': 1,\n\t\t\t\t\t\t'precision': 1\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('THREE.WebGLRenderer: ' + error.message);\n\t\t\tthrow error;\n\t\t}\n\n\t\tvar extensions, capabilities, state, info;\n\t\tvar properties, textures, cubemaps, attributes, geometries, objects;\n\t\tvar programCache, materials, renderLists, renderStates, clipping;\n\t\tvar background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\t\tvar utils, bindingStates;\n\n\t\tfunction initGLContext() {\n\t\t\textensions = new WebGLExtensions(_gl);\n\t\t\tcapabilities = new WebGLCapabilities(_gl, extensions, parameters);\n\n\t\t\tif (capabilities.isWebGL2 === false) {\n\t\t\t\textensions.get('WEBGL_depth_texture');\n\t\t\t\textensions.get('OES_texture_float');\n\t\t\t\textensions.get('OES_texture_half_float');\n\t\t\t\textensions.get('OES_texture_half_float_linear');\n\t\t\t\textensions.get('OES_standard_derivatives');\n\t\t\t\textensions.get('OES_element_index_uint');\n\t\t\t\textensions.get('OES_vertex_array_object');\n\t\t\t\textensions.get('ANGLE_instanced_arrays');\n\t\t\t}\n\n\t\t\textensions.get('OES_texture_float_linear');\n\t\t\tutils = new WebGLUtils(_gl, extensions, capabilities);\n\t\t\tstate = new WebGLState(_gl, extensions, capabilities);\n\t\t\tstate.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor());\n\t\t\tstate.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor());\n\t\t\tinfo = new WebGLInfo(_gl);\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures(_gl, extensions, state, properties, capabilities, utils, info);\n\t\t\tcubemaps = new WebGLCubeMaps(_this);\n\t\t\tattributes = new WebGLAttributes(_gl, capabilities);\n\t\t\tbindingStates = new WebGLBindingStates(_gl, extensions, attributes, capabilities);\n\t\t\tgeometries = new WebGLGeometries(_gl, attributes, info, bindingStates);\n\t\t\tobjects = new WebGLObjects(_gl, geometries, attributes, info);\n\t\t\tmorphtargets = new WebGLMorphtargets(_gl);\n\t\t\tclipping = new WebGLClipping(properties);\n\t\t\tprogramCache = new WebGLPrograms(_this, cubemaps, extensions, capabilities, bindingStates, clipping);\n\t\t\tmaterials = new WebGLMaterials(properties);\n\t\t\trenderLists = new WebGLRenderLists(properties);\n\t\t\trenderStates = new WebGLRenderStates(extensions, capabilities);\n\t\t\tbackground = new WebGLBackground(_this, cubemaps, state, objects, _premultipliedAlpha);\n\t\t\tbufferRenderer = new WebGLBufferRenderer(_gl, extensions, info, capabilities);\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer(_gl, extensions, info, capabilities);\n\t\t\tinfo.programs = programCache.programs;\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.state = state;\n\t\t\t_this.info = info;\n\t\t}\n\n\t\tinitGLContext(); // xr\n\n\t\tvar xr = new WebXRManager(_this, _gl);\n\t\tthis.xr = xr; // shadow map\n\n\t\tvar shadowMap = new WebGLShadowMap(_this, objects, capabilities.maxTextureSize);\n\t\tthis.shadowMap = shadowMap; // API\n\n\t\tthis.getContext = function () {\n\t\t\treturn _gl;\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\t\t\treturn _gl.getContextAttributes();\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\t\t\tvar extension = extensions.get('WEBGL_lose_context');\n\t\t\tif (extension) extension.loseContext();\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\t\t\tvar extension = extensions.get('WEBGL_lose_context');\n\t\t\tif (extension) extension.restoreContext();\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\t\t\treturn _pixelRatio;\n\t\t};\n\n\t\tthis.setPixelRatio = function (value) {\n\t\t\tif (value === undefined) return;\n\t\t\t_pixelRatio = value;\n\t\t\tthis.setSize(_width, _height, false);\n\t\t};\n\n\t\tthis.getSize = function (target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('WebGLRenderer: .getsize() now requires a Vector2 as an argument');\n\t\t\t\ttarget = new Vector2();\n\t\t\t}\n\n\t\t\treturn target.set(_width, _height);\n\t\t};\n\n\t\tthis.setSize = function (width, height, updateStyle) {\n\t\t\tif (xr.isPresenting) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\t\t\t_canvas.width = Math.floor(width * _pixelRatio);\n\t\t\t_canvas.height = Math.floor(height * _pixelRatio);\n\n\t\t\tif (updateStyle !== false) {\n\t\t\t\t_canvas.style.width = width + 'px';\n\t\t\t\t_canvas.style.height = height + 'px';\n\t\t\t}\n\n\t\t\tthis.setViewport(0, 0, width, height);\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function (target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument');\n\t\t\t\ttarget = new Vector2();\n\t\t\t}\n\n\t\t\treturn target.set(_width * _pixelRatio, _height * _pixelRatio).floor();\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function (width, height, pixelRatio) {\n\t\t\t_width = width;\n\t\t\t_height = height;\n\t\t\t_pixelRatio = pixelRatio;\n\t\t\t_canvas.width = Math.floor(width * pixelRatio);\n\t\t\t_canvas.height = Math.floor(height * pixelRatio);\n\t\t\tthis.setViewport(0, 0, width, height);\n\t\t};\n\n\t\tthis.getCurrentViewport = function (target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument');\n\t\t\t\ttarget = new Vector4();\n\t\t\t}\n\n\t\t\treturn target.copy(_currentViewport);\n\t\t};\n\n\t\tthis.getViewport = function (target) {\n\t\t\treturn target.copy(_viewport);\n\t\t};\n\n\t\tthis.setViewport = function (x, y, width, height) {\n\t\t\tif (x.isVector4) {\n\t\t\t\t_viewport.set(x.x, x.y, x.z, x.w);\n\t\t\t} else {\n\t\t\t\t_viewport.set(x, y, width, height);\n\t\t\t}\n\n\t\t\tstate.viewport(_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor());\n\t\t};\n\n\t\tthis.getScissor = function (target) {\n\t\t\treturn target.copy(_scissor);\n\t\t};\n\n\t\tthis.setScissor = function (x, y, width, height) {\n\t\t\tif (x.isVector4) {\n\t\t\t\t_scissor.set(x.x, x.y, x.z, x.w);\n\t\t\t} else {\n\t\t\t\t_scissor.set(x, y, width, height);\n\t\t\t}\n\n\t\t\tstate.scissor(_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor());\n\t\t};\n\n\t\tthis.getScissorTest = function () {\n\t\t\treturn _scissorTest;\n\t\t};\n\n\t\tthis.setScissorTest = function (boolean) {\n\t\t\tstate.setScissorTest(_scissorTest = boolean);\n\t\t};\n\n\t\tthis.setOpaqueSort = function (method) {\n\t\t\t_opaqueSort = method;\n\t\t};\n\n\t\tthis.setTransparentSort = function (method) {\n\t\t\t_transparentSort = method;\n\t\t}; // Clearing\n\n\n\t\tthis.getClearColor = function (target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('WebGLRenderer: .getClearColor() now requires a Color as an argument');\n\t\t\t\ttarget = new Color();\n\t\t\t}\n\n\t\t\treturn target.copy(background.getClearColor());\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\t\t\tbackground.setClearColor.apply(background, arguments);\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\t\t\treturn background.getClearAlpha();\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\t\t\tbackground.setClearAlpha.apply(background, arguments);\n\t\t};\n\n\t\tthis.clear = function (color, depth, stencil) {\n\t\t\tvar bits = 0;\n\t\t\tif (color === undefined || color) bits |= 16384;\n\t\t\tif (depth === undefined || depth) bits |= 256;\n\t\t\tif (stencil === undefined || stencil) bits |= 1024;\n\n\t\t\t_gl.clear(bits);\n\t\t};\n\n\t\tthis.clearColor = function () {\n\t\t\tthis.clear(true, false, false);\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\t\t\tthis.clear(false, true, false);\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\t\t\tthis.clear(false, false, true);\n\t\t}; //\n\n\n\t\tthis.dispose = function () {\n\t\t\t_canvas.removeEventListener('webglcontextlost', onContextLost, false);\n\n\t\t\t_canvas.removeEventListener('webglcontextrestored', onContextRestore, false);\n\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tcubemaps.dispose();\n\t\t\tobjects.dispose();\n\t\t\tbindingStates.dispose();\n\t\t\txr.dispose();\n\t\t\tanimation.stop();\n\t\t}; // Events\n\n\n\t\tfunction onContextLost(event) {\n\t\t\tevent.preventDefault();\n\t\t\tconsole.log('THREE.WebGLRenderer: Context Lost.');\n\t\t\t_isContextLost = true;\n\t\t}\n\n\t\tfunction onContextRestore()\n\t\t/* event */\n\t\t{\n\t\t\tconsole.log('THREE.WebGLRenderer: Context Restored.');\n\t\t\t_isContextLost = false;\n\t\t\tinitGLContext();\n\t\t}\n\n\t\tfunction onMaterialDispose(event) {\n\t\t\tvar material = event.target;\n\t\t\tmaterial.removeEventListener('dispose', onMaterialDispose);\n\t\t\tdeallocateMaterial(material);\n\t\t} // Buffer deallocation\n\n\n\t\tfunction deallocateMaterial(material) {\n\t\t\treleaseMaterialProgramReference(material);\n\t\t\tproperties.remove(material);\n\t\t}\n\n\t\tfunction releaseMaterialProgramReference(material) {\n\t\t\tvar programInfo = properties.get(material).program;\n\n\t\t\tif (programInfo !== undefined) {\n\t\t\t\tprogramCache.releaseProgram(programInfo);\n\t\t\t}\n\t\t} // Buffer rendering\n\n\n\t\tfunction renderObjectImmediate(object, program) {\n\t\t\tobject.render(function (object) {\n\t\t\t\t_this.renderBufferImmediate(object, program);\n\t\t\t});\n\t\t}\n\n\t\tthis.renderBufferImmediate = function (object, program) {\n\t\t\tbindingStates.initAttributes();\n\t\t\tvar buffers = properties.get(object);\n\t\t\tif (object.hasPositions && !buffers.position) buffers.position = _gl.createBuffer();\n\t\t\tif (object.hasNormals && !buffers.normal) buffers.normal = _gl.createBuffer();\n\t\t\tif (object.hasUvs && !buffers.uv) buffers.uv = _gl.createBuffer();\n\t\t\tif (object.hasColors && !buffers.color) buffers.color = _gl.createBuffer();\n\t\t\tvar programAttributes = program.getAttributes();\n\n\t\t\tif (object.hasPositions) {\n\t\t\t\t_gl.bindBuffer(34962, buffers.position);\n\n\t\t\t\t_gl.bufferData(34962, object.positionArray, 35048);\n\n\t\t\t\tbindingStates.enableAttribute(programAttributes.position);\n\n\t\t\t\t_gl.vertexAttribPointer(programAttributes.position, 3, 5126, false, 0, 0);\n\t\t\t}\n\n\t\t\tif (object.hasNormals) {\n\t\t\t\t_gl.bindBuffer(34962, buffers.normal);\n\n\t\t\t\t_gl.bufferData(34962, object.normalArray, 35048);\n\n\t\t\t\tbindingStates.enableAttribute(programAttributes.normal);\n\n\t\t\t\t_gl.vertexAttribPointer(programAttributes.normal, 3, 5126, false, 0, 0);\n\t\t\t}\n\n\t\t\tif (object.hasUvs) {\n\t\t\t\t_gl.bindBuffer(34962, buffers.uv);\n\n\t\t\t\t_gl.bufferData(34962, object.uvArray, 35048);\n\n\t\t\t\tbindingStates.enableAttribute(programAttributes.uv);\n\n\t\t\t\t_gl.vertexAttribPointer(programAttributes.uv, 2, 5126, false, 0, 0);\n\t\t\t}\n\n\t\t\tif (object.hasColors) {\n\t\t\t\t_gl.bindBuffer(34962, buffers.color);\n\n\t\t\t\t_gl.bufferData(34962, object.colorArray, 35048);\n\n\t\t\t\tbindingStates.enableAttribute(programAttributes.color);\n\n\t\t\t\t_gl.vertexAttribPointer(programAttributes.color, 3, 5126, false, 0, 0);\n\t\t\t}\n\n\t\t\tbindingStates.disableUnusedAttributes();\n\n\t\t\t_gl.drawArrays(4, 0, object.count);\n\n\t\t\tobject.count = 0;\n\t\t};\n\n\t\tthis.renderBufferDirect = function (camera, scene, geometry, material, object, group) {\n\t\t\tif (scene === null) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\t\tvar frontFaceCW = object.isMesh && object.matrixWorld.determinant() < 0;\n\t\t\tvar program = setProgram(camera, scene, material, object);\n\t\t\tstate.setMaterial(material, frontFaceCW); //\n\n\t\t\tvar index = geometry.index;\n\t\t\tvar position = geometry.attributes.position; //\n\n\t\t\tif (index === null) {\n\t\t\t\tif (position === undefined || position.count === 0) return;\n\t\t\t} else if (index.count === 0) {\n\t\t\t\treturn;\n\t\t\t} //\n\n\n\t\t\tvar rangeFactor = 1;\n\n\t\t\tif (material.wireframe === true) {\n\t\t\t\tindex = geometries.getWireframeAttribute(geometry);\n\t\t\t\trangeFactor = 2;\n\t\t\t}\n\n\t\t\tif (material.morphTargets || material.morphNormals) {\n\t\t\t\tmorphtargets.update(object, geometry, material, program);\n\t\t\t}\n\n\t\t\tbindingStates.setup(object, material, program, geometry, index);\n\t\t\tvar attribute;\n\t\t\tvar renderer = bufferRenderer;\n\n\t\t\tif (index !== null) {\n\t\t\t\tattribute = attributes.get(index);\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex(attribute);\n\t\t\t} //\n\n\n\t\t\tvar dataCount = index !== null ? index.count : position.count;\n\t\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\t\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\t\t\tvar drawStart = Math.max(rangeStart, groupStart);\n\t\t\tvar drawEnd = Math.min(dataCount, rangeStart + rangeCount, groupStart + groupCount) - 1;\n\t\t\tvar drawCount = Math.max(0, drawEnd - drawStart + 1);\n\t\t\tif (drawCount === 0) return; //\n\n\t\t\tif (object.isMesh) {\n\t\t\t\tif (material.wireframe === true) {\n\t\t\t\t\tstate.setLineWidth(material.wireframeLinewidth * getTargetPixelRatio());\n\t\t\t\t\trenderer.setMode(1);\n\t\t\t\t} else {\n\t\t\t\t\trenderer.setMode(4);\n\t\t\t\t}\n\t\t\t} else if (object.isLine) {\n\t\t\t\tvar lineWidth = material.linewidth;\n\t\t\t\tif (lineWidth === undefined) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth(lineWidth * getTargetPixelRatio());\n\n\t\t\t\tif (object.isLineSegments) {\n\t\t\t\t\trenderer.setMode(1);\n\t\t\t\t} else if (object.isLineLoop) {\n\t\t\t\t\trenderer.setMode(2);\n\t\t\t\t} else {\n\t\t\t\t\trenderer.setMode(3);\n\t\t\t\t}\n\t\t\t} else if (object.isPoints) {\n\t\t\t\trenderer.setMode(0);\n\t\t\t} else if (object.isSprite) {\n\t\t\t\trenderer.setMode(4);\n\t\t\t}\n\n\t\t\tif (object.isInstancedMesh) {\n\t\t\t\trenderer.renderInstances(drawStart, drawCount, object.count);\n\t\t\t} else if (geometry.isInstancedBufferGeometry) {\n\t\t\t\tvar instanceCount = Math.min(geometry.instanceCount, geometry._maxInstanceCount);\n\t\t\t\trenderer.renderInstances(drawStart, drawCount, instanceCount);\n\t\t\t} else {\n\t\t\t\trenderer.render(drawStart, drawCount);\n\t\t\t}\n\t\t}; // Compile\n\n\n\t\tthis.compile = function (scene, camera) {\n\t\t\tcurrentRenderState = renderStates.get(scene);\n\t\t\tcurrentRenderState.init();\n\t\t\tscene.traverseVisible(function (object) {\n\t\t\t\tif (object.isLight && object.layers.test(camera.layers)) {\n\t\t\t\t\tcurrentRenderState.pushLight(object);\n\n\t\t\t\t\tif (object.castShadow) {\n\t\t\t\t\t\tcurrentRenderState.pushShadow(object);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\tcurrentRenderState.setupLights();\n\t\t\tvar compiled = new WeakMap();\n\t\t\tscene.traverse(function (object) {\n\t\t\t\tvar material = object.material;\n\n\t\t\t\tif (material) {\n\t\t\t\t\tif (Array.isArray(material)) {\n\t\t\t\t\t\tfor (var i = 0; i < material.length; i++) {\n\t\t\t\t\t\t\tvar material2 = material[i];\n\n\t\t\t\t\t\t\tif (compiled.has(material2) === false) {\n\t\t\t\t\t\t\t\tinitMaterial(material2, scene, object);\n\t\t\t\t\t\t\t\tcompiled.set(material2);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (compiled.has(material) === false) {\n\t\t\t\t\t\tinitMaterial(material, scene, object);\n\t\t\t\t\t\tcompiled.set(material);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}; // Animation Loop\n\n\n\t\tvar onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame(time) {\n\t\t\tif (xr.isPresenting) return;\n\t\t\tif (onAnimationFrameCallback) onAnimationFrameCallback(time);\n\t\t}\n\n\t\tvar animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop(onAnimationFrame);\n\t\tif (typeof window !== 'undefined') animation.setContext(window);\n\n\t\tthis.setAnimationLoop = function (callback) {\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\txr.setAnimationLoop(callback);\n\t\t\tcallback === null ? animation.stop() : animation.start();\n\t\t}; // Rendering\n\n\n\t\tthis.render = function (scene, camera) {\n\t\t\tvar renderTarget, forceClear;\n\n\t\t\tif (arguments[2] !== undefined) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.');\n\t\t\t\trenderTarget = arguments[2];\n\t\t\t}\n\n\t\t\tif (arguments[3] !== undefined) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.');\n\t\t\t\tforceClear = arguments[3];\n\t\t\t}\n\n\t\t\tif (camera !== undefined && camera.isCamera !== true) {\n\t\t\t\tconsole.error('THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (_isContextLost === true) return; // reset caching for this frame\n\n\t\t\tbindingStates.resetDefaultState();\n\t\t\t_currentMaterialId = -1;\n\t\t\t_currentCamera = null; // update scene graph\n\n\t\t\tif (scene.autoUpdate === true) scene.updateMatrixWorld(); // update camera matrices and frustum\n\n\t\t\tif (camera.parent === null) camera.updateMatrixWorld();\n\n\t\t\tif (xr.enabled === true && xr.isPresenting === true) {\n\t\t\t\tcamera = xr.getCamera(camera);\n\t\t\t} //\n\n\n\t\t\tif (scene.isScene === true) scene.onBeforeRender(_this, scene, camera, renderTarget || _currentRenderTarget);\n\t\t\tcurrentRenderState = renderStates.get(scene, renderStateStack.length);\n\t\t\tcurrentRenderState.init();\n\t\t\trenderStateStack.push(currentRenderState);\n\n\t\t\t_projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\n\n\t\t\t_frustum.setFromProjectionMatrix(_projScreenMatrix);\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = clipping.init(this.clippingPlanes, _localClippingEnabled, camera);\n\t\t\tcurrentRenderList = renderLists.get(scene, camera);\n\t\t\tcurrentRenderList.init();\n\t\t\tprojectObject(scene, camera, 0, _this.sortObjects);\n\t\t\tcurrentRenderList.finish();\n\n\t\t\tif (_this.sortObjects === true) {\n\t\t\t\tcurrentRenderList.sort(_opaqueSort, _transparentSort);\n\t\t\t} //\n\n\n\t\t\tif (_clippingEnabled === true) clipping.beginShadows();\n\t\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\t\t\tshadowMap.render(shadowsArray, scene, camera);\n\t\t\tcurrentRenderState.setupLights();\n\t\t\tcurrentRenderState.setupLightsView(camera);\n\t\t\tif (_clippingEnabled === true) clipping.endShadows(); //\n\n\t\t\tif (this.info.autoReset === true) this.info.reset();\n\n\t\t\tif (renderTarget !== undefined) {\n\t\t\t\tthis.setRenderTarget(renderTarget);\n\t\t\t} //\n\n\n\t\t\tbackground.render(currentRenderList, scene, camera, forceClear); // render scene\n\n\t\t\tvar opaqueObjects = currentRenderList.opaque;\n\t\t\tvar transparentObjects = currentRenderList.transparent;\n\t\t\tif (opaqueObjects.length > 0) renderObjects(opaqueObjects, scene, camera);\n\t\t\tif (transparentObjects.length > 0) renderObjects(transparentObjects, scene, camera); //\n\n\t\t\tif (scene.isScene === true) scene.onAfterRender(_this, scene, camera); //\n\n\t\t\tif (_currentRenderTarget !== null) {\n\t\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\t\t\t\ttextures.updateRenderTargetMipmap(_currentRenderTarget); // resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\t\ttextures.updateMultisampleRenderTarget(_currentRenderTarget);\n\t\t\t} // Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\n\t\t\tstate.buffers.depth.setTest(true);\n\t\t\tstate.buffers.depth.setMask(true);\n\t\t\tstate.buffers.color.setMask(true);\n\t\t\tstate.setPolygonOffset(false); // _gl.finish();\n\n\t\t\trenderStateStack.pop();\n\n\t\t\tif (renderStateStack.length > 0) {\n\t\t\t\tcurrentRenderState = renderStateStack[renderStateStack.length - 1];\n\t\t\t} else {\n\t\t\t\tcurrentRenderState = null;\n\t\t\t}\n\n\t\t\tcurrentRenderList = null;\n\t\t};\n\n\t\tfunction projectObject(object, camera, groupOrder, sortObjects) {\n\t\t\tif (object.visible === false) return;\n\t\t\tvar visible = object.layers.test(camera.layers);\n\n\t\t\tif (visible) {\n\t\t\t\tif (object.isGroup) {\n\t\t\t\t\tgroupOrder = object.renderOrder;\n\t\t\t\t} else if (object.isLOD) {\n\t\t\t\t\tif (object.autoUpdate === true) object.update(camera);\n\t\t\t\t} else if (object.isLight) {\n\t\t\t\t\tcurrentRenderState.pushLight(object);\n\n\t\t\t\t\tif (object.castShadow) {\n\t\t\t\t\t\tcurrentRenderState.pushShadow(object);\n\t\t\t\t\t}\n\t\t\t\t} else if (object.isSprite) {\n\t\t\t\t\tif (!object.frustumCulled || _frustum.intersectsSprite(object)) {\n\t\t\t\t\t\tif (sortObjects) {\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar geometry = objects.update(object);\n\t\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\t\tif (material.visible) {\n\t\t\t\t\t\t\tcurrentRenderList.push(object, geometry, material, groupOrder, _vector3.z, null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (object.isImmediateRenderObject) {\n\t\t\t\t\tif (sortObjects) {\n\t\t\t\t\t\t_vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix);\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentRenderList.push(object, null, object.material, groupOrder, _vector3.z, null);\n\t\t\t\t} else if (object.isMesh || object.isLine || object.isPoints) {\n\t\t\t\t\tif (object.isSkinnedMesh) {\n\t\t\t\t\t\t// update skeleton only once in a frame\n\t\t\t\t\t\tif (object.skeleton.frame !== info.render.frame) {\n\t\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!object.frustumCulled || _frustum.intersectsObject(object)) {\n\t\t\t\t\t\tif (sortObjects) {\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition(object.matrixWorld).applyMatrix4(_projScreenMatrix);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar _geometry = objects.update(object);\n\n\t\t\t\t\t\tvar _material = object.material;\n\n\t\t\t\t\t\tif (Array.isArray(_material)) {\n\t\t\t\t\t\t\tvar groups = _geometry.groups;\n\n\t\t\t\t\t\t\tfor (var i = 0, l = groups.length; i < l; i++) {\n\t\t\t\t\t\t\t\tvar group = groups[i];\n\t\t\t\t\t\t\t\tvar groupMaterial = _material[group.materialIndex];\n\n\t\t\t\t\t\t\t\tif (groupMaterial && groupMaterial.visible) {\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push(object, _geometry, groupMaterial, groupOrder, _vector3.z, group);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (_material.visible) {\n\t\t\t\t\t\t\tcurrentRenderList.push(object, _geometry, _material, groupOrder, _vector3.z, null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar children = object.children;\n\n\t\t\tfor (var _i = 0, _l = children.length; _i < _l; _i++) {\n\t\t\t\tprojectObject(children[_i], camera, groupOrder, sortObjects);\n\t\t\t}\n\t\t}\n\n\t\tfunction renderObjects(renderList, scene, camera) {\n\t\t\tvar overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tfor (var i = 0, l = renderList.length; i < l; i++) {\n\t\t\t\tvar renderItem = renderList[i];\n\t\t\t\tvar object = renderItem.object;\n\t\t\t\tvar geometry = renderItem.geometry;\n\t\t\t\tvar material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\t\tvar group = renderItem.group;\n\n\t\t\t\tif (camera.isArrayCamera) {\n\t\t\t\t\tvar cameras = camera.cameras;\n\n\t\t\t\t\tfor (var j = 0, jl = cameras.length; j < jl; j++) {\n\t\t\t\t\t\tvar camera2 = cameras[j];\n\n\t\t\t\t\t\tif (object.layers.test(camera2.layers)) {\n\t\t\t\t\t\t\tstate.viewport(_currentViewport.copy(camera2.viewport));\n\t\t\t\t\t\t\tcurrentRenderState.setupLightsView(camera2);\n\t\t\t\t\t\t\trenderObject(object, scene, camera2, geometry, material, group);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trenderObject(object, scene, camera, geometry, material, group);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction renderObject(object, scene, camera, geometry, material, group) {\n\t\t\tobject.onBeforeRender(_this, scene, camera, geometry, material, group);\n\t\t\tobject.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld);\n\t\t\tobject.normalMatrix.getNormalMatrix(object.modelViewMatrix);\n\n\t\t\tif (object.isImmediateRenderObject) {\n\t\t\t\tvar program = setProgram(camera, scene, material, object);\n\t\t\t\tstate.setMaterial(material);\n\t\t\t\tbindingStates.reset();\n\t\t\t\trenderObjectImmediate(object, program);\n\t\t\t} else {\n\t\t\t\t_this.renderBufferDirect(camera, scene, geometry, material, object, group);\n\t\t\t}\n\n\t\t\tobject.onAfterRender(_this, scene, camera, geometry, material, group);\n\t\t}\n\n\t\tfunction initMaterial(material, scene, object) {\n\t\t\tif (scene.isScene !== true) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\tvar materialProperties = properties.get(material);\n\t\t\tvar lights = currentRenderState.state.lights;\n\t\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\t\t\tvar lightsStateVersion = lights.state.version;\n\t\t\tvar parameters = programCache.getParameters(material, lights.state, shadowsArray, scene, object);\n\t\t\tvar programCacheKey = programCache.getProgramCacheKey(parameters);\n\t\t\tvar program = materialProperties.program;\n\t\t\tvar programChange = true;\n\n\t\t\tif (program === undefined) {\n\t\t\t\t// new material\n\t\t\t\tmaterial.addEventListener('dispose', onMaterialDispose);\n\t\t\t} else if (program.cacheKey !== programCacheKey) {\n\t\t\t\t// changed glsl or parameters\n\t\t\t\treleaseMaterialProgramReference(material);\n\t\t\t} else if (materialProperties.lightsStateVersion !== lightsStateVersion) {\n\t\t\t\tprogramChange = false;\n\t\t\t} else if (parameters.shaderID !== undefined) {\n\t\t\t\t// same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect\n\t\t\t\tvar environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\t\tmaterialProperties.envMap = cubemaps.get(material.envMap || environment);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t// only rebuild uniform list\n\t\t\t\tprogramChange = false;\n\t\t\t}\n\n\t\t\tif (programChange) {\n\t\t\t\tparameters.uniforms = programCache.getUniforms(material);\n\t\t\t\tmaterial.onBeforeCompile(parameters, _this);\n\t\t\t\tprogram = programCache.acquireProgram(parameters, programCacheKey);\n\t\t\t\tmaterialProperties.program = program;\n\t\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\t\t\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\t\t\t}\n\n\t\t\tvar uniforms = materialProperties.uniforms;\n\n\t\t\tif (!material.isShaderMaterial && !material.isRawShaderMaterial || material.clipping === true) {\n\t\t\t\tmaterialProperties.numClippingPlanes = clipping.numPlanes;\n\t\t\t\tmaterialProperties.numIntersection = clipping.numIntersection;\n\t\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\t\t\t}\n\n\t\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.fog = scene.fog;\n\t\t\tmaterialProperties.envMap = cubemaps.get(material.envMap || materialProperties.environment); // store the light setup it was created for\n\n\t\t\tmaterialProperties.needsLights = materialNeedsLights(material);\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\t\tif (materialProperties.needsLights) {\n\t\t\t\t// wire up the material to this renderer's lighting state\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; // TODO (abelnation): add area lights shadow info to uniforms\n\t\t\t}\n\n\t\t\tvar progUniforms = materialProperties.program.getUniforms();\n\t\t\tvar uniformsList = WebGLUniforms.seqWithValue(progUniforms.seq, uniforms);\n\t\t\tmaterialProperties.uniformsList = uniformsList;\n\t\t}\n\n\t\tfunction setProgram(camera, scene, material, object) {\n\t\t\tif (scene.isScene !== true) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\ttextures.resetTextureUnits();\n\t\t\tvar fog = scene.fog;\n\t\t\tvar environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tvar encoding = _currentRenderTarget === null ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\t\tvar envMap = cubemaps.get(material.envMap || environment);\n\t\t\tvar materialProperties = properties.get(material);\n\t\t\tvar lights = currentRenderState.state.lights;\n\n\t\t\tif (_clippingEnabled === true) {\n\t\t\t\tif (_localClippingEnabled === true || camera !== _currentCamera) {\n\t\t\t\t\tvar useCache = camera === _currentCamera && material.id === _currentMaterialId; // we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\n\t\t\t\t\tclipping.setState(material, camera, useCache);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (material.version === materialProperties.__version) {\n\t\t\t\tif (material.fog && materialProperties.fog !== fog) {\n\t\t\t\t\tinitMaterial(material, scene, object);\n\t\t\t\t} else if (materialProperties.environment !== environment) {\n\t\t\t\t\tinitMaterial(material, scene, object);\n\t\t\t\t} else if (materialProperties.needsLights && materialProperties.lightsStateVersion !== lights.state.version) {\n\t\t\t\t\tinitMaterial(material, scene, object);\n\t\t\t\t} else if (materialProperties.numClippingPlanes !== undefined && (materialProperties.numClippingPlanes !== clipping.numPlanes || materialProperties.numIntersection !== clipping.numIntersection)) {\n\t\t\t\t\tinitMaterial(material, scene, object);\n\t\t\t\t} else if (materialProperties.outputEncoding !== encoding) {\n\t\t\t\t\tinitMaterial(material, scene, object);\n\t\t\t\t} else if (materialProperties.envMap !== envMap) {\n\t\t\t\t\tinitMaterial(material, scene, object);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinitMaterial(material, scene, object);\n\t\t\t\tmaterialProperties.__version = material.version;\n\t\t\t}\n\n\t\t\tvar refreshProgram = false;\n\t\t\tvar refreshMaterial = false;\n\t\t\tvar refreshLights = false;\n\t\t\tvar program = materialProperties.program,\n\t\t\t\t\tp_uniforms = program.getUniforms(),\n\t\t\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\t\tif (state.useProgram(program.program)) {\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\t\t\t}\n\n\t\t\tif (material.id !== _currentMaterialId) {\n\t\t\t\t_currentMaterialId = material.id;\n\t\t\t\trefreshMaterial = true;\n\t\t\t}\n\n\t\t\tif (refreshProgram || _currentCamera !== camera) {\n\t\t\t\tp_uniforms.setValue(_gl, 'projectionMatrix', camera.projectionMatrix);\n\n\t\t\t\tif (capabilities.logarithmicDepthBuffer) {\n\t\t\t\t\tp_uniforms.setValue(_gl, 'logDepthBufFC', 2.0 / (Math.log(camera.far + 1.0) / Math.LN2));\n\t\t\t\t}\n\n\t\t\t\tif (_currentCamera !== camera) {\n\t\t\t\t\t_currentCamera = camera; // lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true; // set to true on material change\n\n\t\t\t\t\trefreshLights = true; // remains set until update done\n\t\t\t\t} // load material specific uniforms\n\t\t\t\t// (shader material also gets them for the sake of genericity)\n\n\n\t\t\t\tif (material.isShaderMaterial || material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshStandardMaterial || material.envMap) {\n\t\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\t\tif (uCamPos !== undefined) {\n\t\t\t\t\t\tuCamPos.setValue(_gl, _vector3.setFromMatrixPosition(camera.matrixWorld));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial) {\n\t\t\t\t\tp_uniforms.setValue(_gl, 'isOrthographic', camera.isOrthographicCamera === true);\n\t\t\t\t}\n\n\t\t\t\tif (material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial || material.isShadowMaterial || material.skinning) {\n\t\t\t\t\tp_uniforms.setValue(_gl, 'viewMatrix', camera.matrixWorldInverse);\n\t\t\t\t}\n\t\t\t} // skinning uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t\t// otherwise textures used for skinning can take over texture units reserved for other material textures\n\n\n\t\t\tif (material.skinning) {\n\t\t\t\tp_uniforms.setOptional(_gl, object, 'bindMatrix');\n\t\t\t\tp_uniforms.setOptional(_gl, object, 'bindMatrixInverse');\n\t\t\t\tvar skeleton = object.skeleton;\n\n\t\t\t\tif (skeleton) {\n\t\t\t\t\tvar bones = skeleton.bones;\n\n\t\t\t\t\tif (capabilities.floatVertexTextures) {\n\t\t\t\t\t\tif (skeleton.boneTexture === null) {\n\t\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t\t//\t\t\tRGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t\t//\twith\t8x8\tpixel texture max\t 16 bones * 4 pixels =\t(8 * 8)\n\t\t\t\t\t\t\t//\t\t\t 16x16 pixel texture max\t 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t\t//\t\t\t 32x32 pixel texture max\t256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t\t//\t\t\t 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\t\t\t\t\t\t\tvar size = Math.sqrt(bones.length * 4); // 4 pixels needed for 1 matrix\n\n\t\t\t\t\t\t\tsize = MathUtils.ceilPowerOfTwo(size);\n\t\t\t\t\t\t\tsize = Math.max(size, 4);\n\t\t\t\t\t\t\tvar boneMatrices = new Float32Array(size * size * 4); // 4 floats per RGBA pixel\n\n\t\t\t\t\t\t\tboneMatrices.set(skeleton.boneMatrices); // copy current values\n\n\t\t\t\t\t\t\tvar boneTexture = new DataTexture(boneMatrices, size, size, RGBAFormat, FloatType);\n\t\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tp_uniforms.setValue(_gl, 'boneTexture', skeleton.boneTexture, textures);\n\t\t\t\t\t\tp_uniforms.setValue(_gl, 'boneTextureSize', skeleton.boneTextureSize);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tp_uniforms.setOptional(_gl, skeleton, 'boneMatrices');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow) {\n\t\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\t\tp_uniforms.setValue(_gl, 'receiveShadow', object.receiveShadow);\n\t\t\t}\n\n\t\t\tif (refreshMaterial) {\n\t\t\t\tp_uniforms.setValue(_gl, 'toneMappingExposure', _this.toneMappingExposure);\n\n\t\t\t\tif (materialProperties.needsLights) {\n\t\t\t\t\t// the current material requires lighting info\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate(m_uniforms, refreshLights);\n\t\t\t\t} // refresh uniforms common to several materials\n\n\n\t\t\t\tif (fog && material.fog) {\n\t\t\t\t\tmaterials.refreshFogUniforms(m_uniforms, fog);\n\t\t\t\t}\n\n\t\t\t\tmaterials.refreshMaterialUniforms(m_uniforms, material, _pixelRatio, _height);\n\t\t\t\tWebGLUniforms.upload(_gl, materialProperties.uniformsList, m_uniforms, textures);\n\t\t\t}\n\n\t\t\tif (material.isShaderMaterial && material.uniformsNeedUpdate === true) {\n\t\t\t\tWebGLUniforms.upload(_gl, materialProperties.uniformsList, m_uniforms, textures);\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\t\t\t}\n\n\t\t\tif (material.isSpriteMaterial) {\n\t\t\t\tp_uniforms.setValue(_gl, 'center', object.center);\n\t\t\t} // common matrices\n\n\n\t\t\tp_uniforms.setValue(_gl, 'modelViewMatrix', object.modelViewMatrix);\n\t\t\tp_uniforms.setValue(_gl, 'normalMatrix', object.normalMatrix);\n\t\t\tp_uniforms.setValue(_gl, 'modelMatrix', object.matrixWorld);\n\t\t\treturn program;\n\t\t} // If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\n\t\tfunction markUniformsLightsNeedsUpdate(uniforms, value) {\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\t\tuniforms.lightProbe.needsUpdate = value;\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\t\t}\n\n\t\tfunction materialNeedsLights(material) {\n\t\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isShadowMaterial || material.isShaderMaterial && material.lights === true;\n\t\t} //\n\n\n\t\tthis.setFramebuffer = function (value) {\n\t\t\tif (_framebuffer !== value && _currentRenderTarget === null) _gl.bindFramebuffer(36160, value);\n\t\t\t_framebuffer = value;\n\t\t};\n\n\t\tthis.getActiveCubeFace = function () {\n\t\t\treturn _currentActiveCubeFace;\n\t\t};\n\n\t\tthis.getActiveMipmapLevel = function () {\n\t\t\treturn _currentActiveMipmapLevel;\n\t\t};\n\n\t\tthis.getRenderList = function () {\n\t\t\treturn currentRenderList;\n\t\t};\n\n\t\tthis.setRenderList = function (renderList) {\n\t\t\tcurrentRenderList = renderList;\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\t\t\treturn _currentRenderTarget;\n\t\t};\n\n\t\tthis.setRenderTarget = function (renderTarget, activeCubeFace, activeMipmapLevel) {\n\t\t\tif (activeCubeFace === void 0) {\n\t\t\t\tactiveCubeFace = 0;\n\t\t\t}\n\n\t\t\tif (activeMipmapLevel === void 0) {\n\t\t\t\tactiveMipmapLevel = 0;\n\t\t\t}\n\n\t\t\t_currentRenderTarget = renderTarget;\n\t\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\t\tif (renderTarget && properties.get(renderTarget).__webglFramebuffer === undefined) {\n\t\t\t\ttextures.setupRenderTarget(renderTarget);\n\t\t\t}\n\n\t\t\tvar framebuffer = _framebuffer;\n\t\t\tvar isCube = false;\n\n\t\t\tif (renderTarget) {\n\t\t\t\tvar __webglFramebuffer = properties.get(renderTarget).__webglFramebuffer;\n\n\t\t\t\tif (renderTarget.isWebGLCubeRenderTarget) {\n\t\t\t\t\tframebuffer = __webglFramebuffer[activeCubeFace];\n\t\t\t\t\tisCube = true;\n\t\t\t\t} else if (renderTarget.isWebGLMultisampleRenderTarget) {\n\t\t\t\t\tframebuffer = properties.get(renderTarget).__webglMultisampledFramebuffer;\n\t\t\t\t} else {\n\t\t\t\t\tframebuffer = __webglFramebuffer;\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy(renderTarget.viewport);\n\n\t\t\t\t_currentScissor.copy(renderTarget.scissor);\n\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\t\t\t} else {\n\t\t\t\t_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio).floor();\n\n\t\t\t\t_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio).floor();\n\n\t\t\t\t_currentScissorTest = _scissorTest;\n\t\t\t}\n\n\t\t\tif (_currentFramebuffer !== framebuffer) {\n\t\t\t\t_gl.bindFramebuffer(36160, framebuffer);\n\n\t\t\t\t_currentFramebuffer = framebuffer;\n\t\t\t}\n\n\t\t\tstate.viewport(_currentViewport);\n\t\t\tstate.scissor(_currentScissor);\n\t\t\tstate.setScissorTest(_currentScissorTest);\n\n\t\t\tif (isCube) {\n\t\t\t\tvar textureProperties = properties.get(renderTarget.texture);\n\n\t\t\t\t_gl.framebufferTexture2D(36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel);\n\t\t\t}\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function (renderTarget, x, y, width, height, buffer, activeCubeFaceIndex) {\n\t\t\tif (!(renderTarget && renderTarget.isWebGLRenderTarget)) {\n\t\t\t\tconsole.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar framebuffer = properties.get(renderTarget).__webglFramebuffer;\n\n\t\t\tif (renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined) {\n\t\t\t\tframebuffer = framebuffer[activeCubeFaceIndex];\n\t\t\t}\n\n\t\t\tif (framebuffer) {\n\t\t\t\tvar restore = false;\n\n\t\t\t\tif (framebuffer !== _currentFramebuffer) {\n\t\t\t\t\t_gl.bindFramebuffer(36160, framebuffer);\n\n\t\t\t\t\trestore = true;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\t\tif (textureFormat !== RGBAFormat && utils.convert(textureFormat) !== _gl.getParameter(35739)) {\n\t\t\t\t\t\tconsole.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (textureType !== UnsignedByteType && utils.convert(textureType) !== _gl.getParameter(35738) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t!(textureType === FloatType && (capabilities.isWebGL2 || extensions.get('OES_texture_float') || extensions.get('WEBGL_color_buffer_float'))) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t!(textureType === HalfFloatType && (capabilities.isWebGL2 ? extensions.get('EXT_color_buffer_float') : extensions.get('EXT_color_buffer_half_float')))) {\n\t\t\t\t\t\tconsole.error('THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_gl.checkFramebufferStatus(36160) === 36053) {\n\t\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\t\t\t\t\t\tif (x >= 0 && x <= renderTarget.width - width && y >= 0 && y <= renderTarget.height - height) {\n\t\t\t\t\t\t\t_gl.readPixels(x, y, width, height, utils.convert(textureFormat), utils.convert(textureType), buffer);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error('THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.');\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (restore) {\n\t\t\t\t\t\t_gl.bindFramebuffer(36160, _currentFramebuffer);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.copyFramebufferToTexture = function (position, texture, level) {\n\t\t\tif (level === void 0) {\n\t\t\t\tlevel = 0;\n\t\t\t}\n\n\t\t\tvar levelScale = Math.pow(2, -level);\n\t\t\tvar width = Math.floor(texture.image.width * levelScale);\n\t\t\tvar height = Math.floor(texture.image.height * levelScale);\n\t\t\tvar glFormat = utils.convert(texture.format);\n\t\t\ttextures.setTexture2D(texture, 0);\n\n\t\t\t_gl.copyTexImage2D(3553, level, glFormat, position.x, position.y, width, height, 0);\n\n\t\t\tstate.unbindTexture();\n\t\t};\n\n\t\tthis.copyTextureToTexture = function (position, srcTexture, dstTexture, level) {\n\t\t\tif (level === void 0) {\n\t\t\t\tlevel = 0;\n\t\t\t}\n\n\t\t\tvar width = srcTexture.image.width;\n\t\t\tvar height = srcTexture.image.height;\n\t\t\tvar glFormat = utils.convert(dstTexture.format);\n\t\t\tvar glType = utils.convert(dstTexture.type);\n\t\t\ttextures.setTexture2D(dstTexture, 0); // As another texture upload may have changed pixelStorei\n\t\t\t// parameters, make sure they are correct for the dstTexture\n\n\t\t\t_gl.pixelStorei(37440, dstTexture.flipY);\n\n\t\t\t_gl.pixelStorei(37441, dstTexture.premultiplyAlpha);\n\n\t\t\t_gl.pixelStorei(3317, dstTexture.unpackAlignment);\n\n\t\t\tif (srcTexture.isDataTexture) {\n\t\t\t\t_gl.texSubImage2D(3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data);\n\t\t\t} else {\n\t\t\t\tif (srcTexture.isCompressedTexture) {\n\t\t\t\t\t_gl.compressedTexSubImage2D(3553, level, position.x, position.y, srcTexture.mipmaps[0].width, srcTexture.mipmaps[0].height, glFormat, srcTexture.mipmaps[0].data);\n\t\t\t\t} else {\n\t\t\t\t\t_gl.texSubImage2D(3553, level, position.x, position.y, glFormat, glType, srcTexture.image);\n\t\t\t\t}\n\t\t\t} // Generate mipmaps only when copying level 0\n\n\n\t\t\tif (level === 0 && dstTexture.generateMipmaps) _gl.generateMipmap(3553);\n\t\t\tstate.unbindTexture();\n\t\t};\n\n\t\tthis.initTexture = function (texture) {\n\t\t\ttextures.setTexture2D(texture, 0);\n\t\t\tstate.unbindTexture();\n\t\t};\n\n\t\tthis.resetState = function () {\n\t\t\tstate.reset();\n\t\t\tbindingStates.reset();\n\t\t};\n\n\t\tif (typeof __THREE_DEVTOOLS__ !== 'undefined') {\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', {\n\t\t\t\tdetail: this\n\t\t\t})); // eslint-disable-line no-undef\n\n\t\t}\n\t}\n\n\tfunction WebGL1Renderer(parameters) {\n\t\tWebGLRenderer.call(this, parameters);\n\t}\n\n\tWebGL1Renderer.prototype = Object.assign(Object.create(WebGLRenderer.prototype), {\n\t\tconstructor: WebGL1Renderer,\n\t\tisWebGL1Renderer: true\n\t});\n\n\tvar FogExp2 = /*#__PURE__*/function () {\n\t\tfunction FogExp2(color, density) {\n\t\t\tObject.defineProperty(this, 'isFogExp2', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.name = '';\n\t\t\tthis.color = new Color(color);\n\t\t\tthis.density = density !== undefined ? density : 0.00025;\n\t\t}\n\n\t\tvar _proto = FogExp2.prototype;\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new FogExp2(this.color, this.density);\n\t\t};\n\n\t\t_proto.toJSON = function toJSON()\n\t\t/* meta */\n\t\t{\n\t\t\treturn {\n\t\t\t\ttype: 'FogExp2',\n\t\t\t\tcolor: this.color.getHex(),\n\t\t\t\tdensity: this.density\n\t\t\t};\n\t\t};\n\n\t\treturn FogExp2;\n\t}();\n\n\tvar Fog = /*#__PURE__*/function () {\n\t\tfunction Fog(color, near, far) {\n\t\t\tObject.defineProperty(this, 'isFog', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.name = '';\n\t\t\tthis.color = new Color(color);\n\t\t\tthis.near = near !== undefined ? near : 1;\n\t\t\tthis.far = far !== undefined ? far : 1000;\n\t\t}\n\n\t\tvar _proto = Fog.prototype;\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new Fog(this.color, this.near, this.far);\n\t\t};\n\n\t\t_proto.toJSON = function toJSON()\n\t\t/* meta */\n\t\t{\n\t\t\treturn {\n\t\t\t\ttype: 'Fog',\n\t\t\t\tcolor: this.color.getHex(),\n\t\t\t\tnear: this.near,\n\t\t\t\tfar: this.far\n\t\t\t};\n\t\t};\n\n\t\treturn Fog;\n\t}();\n\n\tvar Scene = /*#__PURE__*/function (_Object3D) {\n\t\t_inheritsLoose(Scene, _Object3D);\n\n\t\tfunction Scene() {\n\t\t\tvar _this;\n\n\t\t\t_this = _Object3D.call(this) || this;\n\t\t\tObject.defineProperty(_assertThisInitialized(_this), 'isScene', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\t_this.type = 'Scene';\n\t\t\t_this.background = null;\n\t\t\t_this.environment = null;\n\t\t\t_this.fog = null;\n\t\t\t_this.overrideMaterial = null;\n\t\t\t_this.autoUpdate = true; // checked by the renderer\n\n\t\t\tif (typeof __THREE_DEVTOOLS__ !== 'undefined') {\n\t\t\t\t__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', {\n\t\t\t\t\tdetail: _assertThisInitialized(_this)\n\t\t\t\t})); // eslint-disable-line no-undef\n\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = Scene.prototype;\n\n\t\t_proto.copy = function copy(source, recursive) {\n\t\t\t_Object3D.prototype.copy.call(this, source, recursive);\n\n\t\t\tif (source.background !== null) this.background = source.background.clone();\n\t\t\tif (source.environment !== null) this.environment = source.environment.clone();\n\t\t\tif (source.fog !== null) this.fog = source.fog.clone();\n\t\t\tif (source.overrideMaterial !== null) this.overrideMaterial = source.overrideMaterial.clone();\n\t\t\tthis.autoUpdate = source.autoUpdate;\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toJSON = function toJSON(meta) {\n\t\t\tvar data = _Object3D.prototype.toJSON.call(this, meta);\n\n\t\t\tif (this.background !== null) data.object.background = this.background.toJSON(meta);\n\t\t\tif (this.environment !== null) data.object.environment = this.environment.toJSON(meta);\n\t\t\tif (this.fog !== null) data.object.fog = this.fog.toJSON();\n\t\t\treturn data;\n\t\t};\n\n\t\treturn Scene;\n\t}(Object3D);\n\n\tfunction InterleavedBuffer(array, stride) {\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = {\n\t\t\toffset: 0,\n\t\t\tcount: -1\n\t\t};\n\t\tthis.version = 0;\n\t\tthis.uuid = MathUtils.generateUUID();\n\t}\n\n\tObject.defineProperty(InterleavedBuffer.prototype, 'needsUpdate', {\n\t\tset: function set(value) {\n\t\t\tif (value === true) this.version++;\n\t\t}\n\t});\n\tObject.assign(InterleavedBuffer.prototype, {\n\t\tisInterleavedBuffer: true,\n\t\tonUploadCallback: function onUploadCallback() {},\n\t\tsetUsage: function setUsage(value) {\n\t\t\tthis.usage = value;\n\t\t\treturn this;\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tthis.array = new source.array.constructor(source.array);\n\t\t\tthis.count = source.count;\n\t\t\tthis.stride = source.stride;\n\t\t\tthis.usage = source.usage;\n\t\t\treturn this;\n\t\t},\n\t\tcopyAt: function copyAt(index1, attribute, index2) {\n\t\t\tindex1 *= this.stride;\n\t\t\tindex2 *= attribute.stride;\n\n\t\t\tfor (var i = 0, l = this.stride; i < l; i++) {\n\t\t\t\tthis.array[index1 + i] = attribute.array[index2 + i];\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tset: function set(value, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tthis.array.set(value, offset);\n\t\t\treturn this;\n\t\t},\n\t\tclone: function clone(data) {\n\t\t\tif (data.arrayBuffers === undefined) {\n\t\t\t\tdata.arrayBuffers = {};\n\t\t\t}\n\n\t\t\tif (this.array.buffer._uuid === undefined) {\n\t\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\t\t\t}\n\n\t\t\tif (data.arrayBuffers[this.array.buffer._uuid] === undefined) {\n\t\t\t\tdata.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer;\n\t\t\t}\n\n\t\t\tvar array = new this.array.constructor(data.arrayBuffers[this.array.buffer._uuid]);\n\t\t\tvar ib = new InterleavedBuffer(array, this.stride);\n\t\t\tib.setUsage(this.usage);\n\t\t\treturn ib;\n\t\t},\n\t\tonUpload: function onUpload(callback) {\n\t\t\tthis.onUploadCallback = callback;\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON(data) {\n\t\t\tif (data.arrayBuffers === undefined) {\n\t\t\t\tdata.arrayBuffers = {};\n\t\t\t} // generate UUID for array buffer if necessary\n\n\n\t\t\tif (this.array.buffer._uuid === undefined) {\n\t\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\t\t\t}\n\n\t\t\tif (data.arrayBuffers[this.array.buffer._uuid] === undefined) {\n\t\t\t\tdata.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call(new Uint32Array(this.array.buffer));\n\t\t\t} //\n\n\n\t\t\treturn {\n\t\t\t\tuuid: this.uuid,\n\t\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tstride: this.stride\n\t\t\t};\n\t\t}\n\t});\n\n\tvar _vector$6 = new Vector3();\n\n\tfunction InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, normalized) {\n\t\tthis.name = '';\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\t\tthis.normalized = normalized === true;\n\t}\n\n\tObject.defineProperties(InterleavedBufferAttribute.prototype, {\n\t\tcount: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.data.count;\n\t\t\t}\n\t\t},\n\t\tarray: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.data.array;\n\t\t\t}\n\t\t},\n\t\tneedsUpdate: {\n\t\t\tset: function set(value) {\n\t\t\t\tthis.data.needsUpdate = value;\n\t\t\t}\n\t\t}\n\t});\n\tObject.assign(InterleavedBufferAttribute.prototype, {\n\t\tisInterleavedBufferAttribute: true,\n\t\tapplyMatrix4: function applyMatrix4(m) {\n\t\t\tfor (var i = 0, l = this.data.count; i < l; i++) {\n\t\t\t\t_vector$6.x = this.getX(i);\n\t\t\t\t_vector$6.y = this.getY(i);\n\t\t\t\t_vector$6.z = this.getZ(i);\n\n\t\t\t\t_vector$6.applyMatrix4(m);\n\n\t\t\t\tthis.setXYZ(i, _vector$6.x, _vector$6.y, _vector$6.z);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tsetX: function setX(index, x) {\n\t\t\tthis.data.array[index * this.data.stride + this.offset] = x;\n\t\t\treturn this;\n\t\t},\n\t\tsetY: function setY(index, y) {\n\t\t\tthis.data.array[index * this.data.stride + this.offset + 1] = y;\n\t\t\treturn this;\n\t\t},\n\t\tsetZ: function setZ(index, z) {\n\t\t\tthis.data.array[index * this.data.stride + this.offset + 2] = z;\n\t\t\treturn this;\n\t\t},\n\t\tsetW: function setW(index, w) {\n\t\t\tthis.data.array[index * this.data.stride + this.offset + 3] = w;\n\t\t\treturn this;\n\t\t},\n\t\tgetX: function getX(index) {\n\t\t\treturn this.data.array[index * this.data.stride + this.offset];\n\t\t},\n\t\tgetY: function getY(index) {\n\t\t\treturn this.data.array[index * this.data.stride + this.offset + 1];\n\t\t},\n\t\tgetZ: function getZ(index) {\n\t\t\treturn this.data.array[index * this.data.stride + this.offset + 2];\n\t\t},\n\t\tgetW: function getW(index) {\n\t\t\treturn this.data.array[index * this.data.stride + this.offset + 3];\n\t\t},\n\t\tsetXY: function setXY(index, x, y) {\n\t\t\tindex = index * this.data.stride + this.offset;\n\t\t\tthis.data.array[index + 0] = x;\n\t\t\tthis.data.array[index + 1] = y;\n\t\t\treturn this;\n\t\t},\n\t\tsetXYZ: function setXYZ(index, x, y, z) {\n\t\t\tindex = index * this.data.stride + this.offset;\n\t\t\tthis.data.array[index + 0] = x;\n\t\t\tthis.data.array[index + 1] = y;\n\t\t\tthis.data.array[index + 2] = z;\n\t\t\treturn this;\n\t\t},\n\t\tsetXYZW: function setXYZW(index, x, y, z, w) {\n\t\t\tindex = index * this.data.stride + this.offset;\n\t\t\tthis.data.array[index + 0] = x;\n\t\t\tthis.data.array[index + 1] = y;\n\t\t\tthis.data.array[index + 2] = z;\n\t\t\tthis.data.array[index + 3] = w;\n\t\t\treturn this;\n\t\t},\n\t\tclone: function clone(data) {\n\t\t\tif (data === undefined) {\n\t\t\t\tconsole.log('THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.');\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor (var i = 0; i < this.count; i++) {\n\t\t\t\t\tvar index = i * this.data.stride + this.offset;\n\n\t\t\t\t\tfor (var j = 0; j < this.itemSize; j++) {\n\t\t\t\t\t\tarray.push(this.data.array[index + j]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn new BufferAttribute(new this.array.constructor(array), this.itemSize, this.normalized);\n\t\t\t} else {\n\t\t\t\tif (data.interleavedBuffers === undefined) {\n\t\t\t\t\tdata.interleavedBuffers = {};\n\t\t\t\t}\n\n\t\t\t\tif (data.interleavedBuffers[this.data.uuid] === undefined) {\n\t\t\t\t\tdata.interleavedBuffers[this.data.uuid] = this.data.clone(data);\n\t\t\t\t}\n\n\t\t\t\treturn new InterleavedBufferAttribute(data.interleavedBuffers[this.data.uuid], this.itemSize, this.offset, this.normalized);\n\t\t\t}\n\t\t},\n\t\ttoJSON: function toJSON(data) {\n\t\t\tif (data === undefined) {\n\t\t\t\tconsole.log('THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.');\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor (var i = 0; i < this.count; i++) {\n\t\t\t\t\tvar index = i * this.data.stride + this.offset;\n\n\t\t\t\t\tfor (var j = 0; j < this.itemSize; j++) {\n\t\t\t\t\t\tarray.push(this.data.array[index + j]);\n\t\t\t\t\t}\n\t\t\t\t} // deinterleave data and save it as an ordinary buffer attribute for now\n\n\n\t\t\t\treturn {\n\t\t\t\t\titemSize: this.itemSize,\n\t\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\t\tarray: array,\n\t\t\t\t\tnormalized: this.normalized\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// save as true interlaved attribtue\n\t\t\t\tif (data.interleavedBuffers === undefined) {\n\t\t\t\t\tdata.interleavedBuffers = {};\n\t\t\t\t}\n\n\t\t\t\tif (data.interleavedBuffers[this.data.uuid] === undefined) {\n\t\t\t\t\tdata.interleavedBuffers[this.data.uuid] = this.data.toJSON(data);\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\t\titemSize: this.itemSize,\n\t\t\t\t\tdata: this.data.uuid,\n\t\t\t\t\toffset: this.offset,\n\t\t\t\t\tnormalized: this.normalized\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\trotation: <float>,\n\t *\tsizeAttenuation: <bool>\n\t * }\n\t */\n\n\tfunction SpriteMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'SpriteMaterial';\n\t\tthis.color = new Color(0xffffff);\n\t\tthis.map = null;\n\t\tthis.alphaMap = null;\n\t\tthis.rotation = 0;\n\t\tthis.sizeAttenuation = true;\n\t\tthis.transparent = true;\n\t\tthis.setValues(parameters);\n\t}\n\n\tSpriteMaterial.prototype = Object.create(Material.prototype);\n\tSpriteMaterial.prototype.constructor = SpriteMaterial;\n\tSpriteMaterial.prototype.isSpriteMaterial = true;\n\n\tSpriteMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.color.copy(source.color);\n\t\tthis.map = source.map;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.rotation = source.rotation;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\t\treturn this;\n\t};\n\n\tvar _geometry;\n\n\tvar _intersectPoint = new Vector3();\n\n\tvar _worldScale = new Vector3();\n\n\tvar _mvPosition = new Vector3();\n\n\tvar _alignedPosition = new Vector2();\n\n\tvar _rotatedPosition = new Vector2();\n\n\tvar _viewWorldMatrix = new Matrix4();\n\n\tvar _vA$1 = new Vector3();\n\n\tvar _vB$1 = new Vector3();\n\n\tvar _vC$1 = new Vector3();\n\n\tvar _uvA$1 = new Vector2();\n\n\tvar _uvB$1 = new Vector2();\n\n\tvar _uvC$1 = new Vector2();\n\n\tfunction Sprite(material) {\n\t\tObject3D.call(this);\n\t\tthis.type = 'Sprite';\n\n\t\tif (_geometry === undefined) {\n\t\t\t_geometry = new BufferGeometry();\n\t\t\tvar float32Array = new Float32Array([-0.5, -0.5, 0, 0, 0, 0.5, -0.5, 0, 1, 0, 0.5, 0.5, 0, 1, 1, -0.5, 0.5, 0, 0, 1]);\n\t\t\tvar interleavedBuffer = new InterleavedBuffer(float32Array, 5);\n\n\t\t\t_geometry.setIndex([0, 1, 2, 0, 2, 3]);\n\n\t\t\t_geometry.setAttribute('position', new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false));\n\n\t\t\t_geometry.setAttribute('uv', new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false));\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = material !== undefined ? material : new SpriteMaterial();\n\t\tthis.center = new Vector2(0.5, 0.5);\n\t}\n\n\tSprite.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: Sprite,\n\t\tisSprite: true,\n\t\traycast: function raycast(raycaster, intersects) {\n\t\t\tif (raycaster.camera === null) {\n\t\t\t\tconsole.error('THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.');\n\t\t\t}\n\n\t\t\t_worldScale.setFromMatrixScale(this.matrixWorld);\n\n\t\t\t_viewWorldMatrix.copy(raycaster.camera.matrixWorld);\n\n\t\t\tthis.modelViewMatrix.multiplyMatrices(raycaster.camera.matrixWorldInverse, this.matrixWorld);\n\n\t\t\t_mvPosition.setFromMatrixPosition(this.modelViewMatrix);\n\n\t\t\tif (raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false) {\n\t\t\t\t_worldScale.multiplyScalar(-_mvPosition.z);\n\t\t\t}\n\n\t\t\tvar rotation = this.material.rotation;\n\t\t\tvar sin, cos;\n\n\t\t\tif (rotation !== 0) {\n\t\t\t\tcos = Math.cos(rotation);\n\t\t\t\tsin = Math.sin(rotation);\n\t\t\t}\n\n\t\t\tvar center = this.center;\n\t\t\ttransformVertex(_vA$1.set(-0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos);\n\t\t\ttransformVertex(_vB$1.set(0.5, -0.5, 0), _mvPosition, center, _worldScale, sin, cos);\n\t\t\ttransformVertex(_vC$1.set(0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos);\n\n\t\t\t_uvA$1.set(0, 0);\n\n\t\t\t_uvB$1.set(1, 0);\n\n\t\t\t_uvC$1.set(1, 1); // check first triangle\n\n\n\t\t\tvar intersect = raycaster.ray.intersectTriangle(_vA$1, _vB$1, _vC$1, false, _intersectPoint);\n\n\t\t\tif (intersect === null) {\n\t\t\t\t// check second triangle\n\t\t\t\ttransformVertex(_vB$1.set(-0.5, 0.5, 0), _mvPosition, center, _worldScale, sin, cos);\n\n\t\t\t\t_uvB$1.set(0, 1);\n\n\t\t\t\tintersect = raycaster.ray.intersectTriangle(_vA$1, _vC$1, _vB$1, false, _intersectPoint);\n\n\t\t\t\tif (intersect === null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar distance = raycaster.ray.origin.distanceTo(_intersectPoint);\n\t\t\tif (distance < raycaster.near || distance > raycaster.far) return;\n\t\t\tintersects.push({\n\t\t\t\tdistance: distance,\n\t\t\t\tpoint: _intersectPoint.clone(),\n\t\t\t\tuv: Triangle.getUV(_intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2()),\n\t\t\t\tface: null,\n\t\t\t\tobject: this\n\t\t\t});\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tObject3D.prototype.copy.call(this, source);\n\t\t\tif (source.center !== undefined) this.center.copy(source.center);\n\t\t\tthis.material = source.material;\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction transformVertex(vertexPosition, mvPosition, center, scale, sin, cos) {\n\t\t// compute position in camera space\n\t\t_alignedPosition.subVectors(vertexPosition, center).addScalar(0.5).multiply(scale); // to check if rotation is not zero\n\n\n\t\tif (sin !== undefined) {\n\t\t\t_rotatedPosition.x = cos * _alignedPosition.x - sin * _alignedPosition.y;\n\t\t\t_rotatedPosition.y = sin * _alignedPosition.x + cos * _alignedPosition.y;\n\t\t} else {\n\t\t\t_rotatedPosition.copy(_alignedPosition);\n\t\t}\n\n\t\tvertexPosition.copy(mvPosition);\n\t\tvertexPosition.x += _rotatedPosition.x;\n\t\tvertexPosition.y += _rotatedPosition.y; // transform to world space\n\n\t\tvertexPosition.applyMatrix4(_viewWorldMatrix);\n\t}\n\n\tvar _v1$4 = new Vector3();\n\n\tvar _v2$2 = new Vector3();\n\n\tfunction LOD() {\n\t\tObject3D.call(this);\n\t\tthis._currentLevel = 0;\n\t\tthis.type = 'LOD';\n\t\tObject.defineProperties(this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t}\n\t\t});\n\t\tthis.autoUpdate = true;\n\t}\n\n\tLOD.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: LOD,\n\t\tisLOD: true,\n\t\tcopy: function copy(source) {\n\t\t\tObject3D.prototype.copy.call(this, source, false);\n\t\t\tvar levels = source.levels;\n\n\t\t\tfor (var i = 0, l = levels.length; i < l; i++) {\n\t\t\t\tvar level = levels[i];\n\t\t\t\tthis.addLevel(level.object.clone(), level.distance);\n\t\t\t}\n\n\t\t\tthis.autoUpdate = source.autoUpdate;\n\t\t\treturn this;\n\t\t},\n\t\taddLevel: function addLevel(object, distance) {\n\t\t\tif (distance === void 0) {\n\t\t\t\tdistance = 0;\n\t\t\t}\n\n\t\t\tdistance = Math.abs(distance);\n\t\t\tvar levels = this.levels;\n\t\t\tvar l;\n\n\t\t\tfor (l = 0; l < levels.length; l++) {\n\t\t\t\tif (distance < levels[l].distance) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlevels.splice(l, 0, {\n\t\t\t\tdistance: distance,\n\t\t\t\tobject: object\n\t\t\t});\n\t\t\tthis.add(object);\n\t\t\treturn this;\n\t\t},\n\t\tgetCurrentLevel: function getCurrentLevel() {\n\t\t\treturn this._currentLevel;\n\t\t},\n\t\tgetObjectForDistance: function getObjectForDistance(distance) {\n\t\t\tvar levels = this.levels;\n\n\t\t\tif (levels.length > 0) {\n\t\t\t\tvar i, l;\n\n\t\t\t\tfor (i = 1, l = levels.length; i < l; i++) {\n\t\t\t\t\tif (distance < levels[i].distance) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn levels[i - 1].object;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\traycast: function raycast(raycaster, intersects) {\n\t\t\tvar levels = this.levels;\n\n\t\t\tif (levels.length > 0) {\n\t\t\t\t_v1$4.setFromMatrixPosition(this.matrixWorld);\n\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo(_v1$4);\n\t\t\t\tthis.getObjectForDistance(distance).raycast(raycaster, intersects);\n\t\t\t}\n\t\t},\n\t\tupdate: function update(camera) {\n\t\t\tvar levels = this.levels;\n\n\t\t\tif (levels.length > 1) {\n\t\t\t\t_v1$4.setFromMatrixPosition(camera.matrixWorld);\n\n\t\t\t\t_v2$2.setFromMatrixPosition(this.matrixWorld);\n\n\t\t\t\tvar distance = _v1$4.distanceTo(_v2$2) / camera.zoom;\n\t\t\t\tlevels[0].object.visible = true;\n\t\t\t\tvar i, l;\n\n\t\t\t\tfor (i = 1, l = levels.length; i < l; i++) {\n\t\t\t\t\tif (distance >= levels[i].distance) {\n\t\t\t\t\t\tlevels[i - 1].object.visible = false;\n\t\t\t\t\t\tlevels[i].object.visible = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._currentLevel = i - 1;\n\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tlevels[i].object.visible = false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar data = Object3D.prototype.toJSON.call(this, meta);\n\t\t\tif (this.autoUpdate === false) data.object.autoUpdate = false;\n\t\t\tdata.object.levels = [];\n\t\t\tvar levels = this.levels;\n\n\t\t\tfor (var i = 0, l = levels.length; i < l; i++) {\n\t\t\t\tvar level = levels[i];\n\t\t\t\tdata.object.levels.push({\n\t\t\t\t\tobject: level.object.uuid,\n\t\t\t\t\tdistance: level.distance\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tvar _basePosition = new Vector3();\n\n\tvar _skinIndex = new Vector4();\n\n\tvar _skinWeight = new Vector4();\n\n\tvar _vector$7 = new Vector3();\n\n\tvar _matrix$1 = new Matrix4();\n\n\tfunction SkinnedMesh(geometry, material) {\n\t\tif (geometry && geometry.isGeometry) {\n\t\t\tconsole.error('THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.');\n\t\t}\n\n\t\tMesh.call(this, geometry, material);\n\t\tthis.type = 'SkinnedMesh';\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\t}\n\n\tSkinnedMesh.prototype = Object.assign(Object.create(Mesh.prototype), {\n\t\tconstructor: SkinnedMesh,\n\t\tisSkinnedMesh: true,\n\t\tcopy: function copy(source) {\n\t\t\tMesh.prototype.copy.call(this, source);\n\t\t\tthis.bindMode = source.bindMode;\n\t\t\tthis.bindMatrix.copy(source.bindMatrix);\n\t\t\tthis.bindMatrixInverse.copy(source.bindMatrixInverse);\n\t\t\tthis.skeleton = source.skeleton;\n\t\t\treturn this;\n\t\t},\n\t\tbind: function bind(skeleton, bindMatrix) {\n\t\t\tthis.skeleton = skeleton;\n\n\t\t\tif (bindMatrix === undefined) {\n\t\t\t\tthis.updateMatrixWorld(true);\n\t\t\t\tthis.skeleton.calculateInverses();\n\t\t\t\tbindMatrix = this.matrixWorld;\n\t\t\t}\n\n\t\t\tthis.bindMatrix.copy(bindMatrix);\n\t\t\tthis.bindMatrixInverse.copy(bindMatrix).invert();\n\t\t},\n\t\tpose: function pose() {\n\t\t\tthis.skeleton.pose();\n\t\t},\n\t\tnormalizeSkinWeights: function normalizeSkinWeights() {\n\t\t\tvar vector = new Vector4();\n\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\tfor (var i = 0, l = skinWeight.count; i < l; i++) {\n\t\t\t\tvector.x = skinWeight.getX(i);\n\t\t\t\tvector.y = skinWeight.getY(i);\n\t\t\t\tvector.z = skinWeight.getZ(i);\n\t\t\t\tvector.w = skinWeight.getW(i);\n\t\t\t\tvar scale = 1.0 / vector.manhattanLength();\n\n\t\t\t\tif (scale !== Infinity) {\n\t\t\t\t\tvector.multiplyScalar(scale);\n\t\t\t\t} else {\n\t\t\t\t\tvector.set(1, 0, 0, 0); // do something reasonable\n\t\t\t\t}\n\n\t\t\t\tskinWeight.setXYZW(i, vector.x, vector.y, vector.z, vector.w);\n\t\t\t}\n\t\t},\n\t\tupdateMatrixWorld: function updateMatrixWorld(force) {\n\t\t\tMesh.prototype.updateMatrixWorld.call(this, force);\n\n\t\t\tif (this.bindMode === 'attached') {\n\t\t\t\tthis.bindMatrixInverse.copy(this.matrixWorld).invert();\n\t\t\t} else if (this.bindMode === 'detached') {\n\t\t\t\tthis.bindMatrixInverse.copy(this.bindMatrix).invert();\n\t\t\t} else {\n\t\t\t\tconsole.warn('THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode);\n\t\t\t}\n\t\t},\n\t\tboneTransform: function boneTransform(index, target) {\n\t\t\tvar skeleton = this.skeleton;\n\t\t\tvar geometry = this.geometry;\n\n\t\t\t_skinIndex.fromBufferAttribute(geometry.attributes.skinIndex, index);\n\n\t\t\t_skinWeight.fromBufferAttribute(geometry.attributes.skinWeight, index);\n\n\t\t\t_basePosition.fromBufferAttribute(geometry.attributes.position, index).applyMatrix4(this.bindMatrix);\n\n\t\t\ttarget.set(0, 0, 0);\n\n\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\tvar weight = _skinWeight.getComponent(i);\n\n\t\t\t\tif (weight !== 0) {\n\t\t\t\t\tvar boneIndex = _skinIndex.getComponent(i);\n\n\t\t\t\t\t_matrix$1.multiplyMatrices(skeleton.bones[boneIndex].matrixWorld, skeleton.boneInverses[boneIndex]);\n\n\t\t\t\t\ttarget.addScaledVector(_vector$7.copy(_basePosition).applyMatrix4(_matrix$1), weight);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn target.applyMatrix4(this.bindMatrixInverse);\n\t\t}\n\t});\n\n\tfunction Bone() {\n\t\tObject3D.call(this);\n\t\tthis.type = 'Bone';\n\t}\n\n\tBone.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: Bone,\n\t\tisBone: true\n\t});\n\n\tvar _offsetMatrix = new Matrix4();\n\n\tvar _identityMatrix = new Matrix4();\n\n\tfunction Skeleton(bones, boneInverses) {\n\t\tif (bones === void 0) {\n\t\t\tbones = [];\n\t\t}\n\n\t\tif (boneInverses === void 0) {\n\t\t\tboneInverses = [];\n\t\t}\n\n\t\tthis.uuid = MathUtils.generateUUID();\n\t\tthis.bones = bones.slice(0);\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\t\tthis.frame = -1;\n\t\tthis.init();\n\t}\n\n\tObject.assign(Skeleton.prototype, {\n\t\tinit: function init() {\n\t\t\tvar bones = this.bones;\n\t\t\tvar boneInverses = this.boneInverses;\n\t\t\tthis.boneMatrices = new Float32Array(bones.length * 16); // calculate inverse bone matrices if necessary\n\n\t\t\tif (boneInverses.length === 0) {\n\t\t\t\tthis.calculateInverses();\n\t\t\t} else {\n\t\t\t\t// handle special case\n\t\t\t\tif (bones.length !== boneInverses.length) {\n\t\t\t\t\tconsole.warn('THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.');\n\t\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\t\tfor (var i = 0, il = this.bones.length; i < il; i++) {\n\t\t\t\t\t\tthis.boneInverses.push(new Matrix4());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcalculateInverses: function calculateInverses() {\n\t\t\tthis.boneInverses.length = 0;\n\n\t\t\tfor (var i = 0, il = this.bones.length; i < il; i++) {\n\t\t\t\tvar inverse = new Matrix4();\n\n\t\t\t\tif (this.bones[i]) {\n\t\t\t\t\tinverse.copy(this.bones[i].matrixWorld).invert();\n\t\t\t\t}\n\n\t\t\t\tthis.boneInverses.push(inverse);\n\t\t\t}\n\t\t},\n\t\tpose: function pose() {\n\t\t\t// recover the bind-time world matrices\n\t\t\tfor (var i = 0, il = this.bones.length; i < il; i++) {\n\t\t\t\tvar bone = this.bones[i];\n\n\t\t\t\tif (bone) {\n\t\t\t\t\tbone.matrixWorld.copy(this.boneInverses[i]).invert();\n\t\t\t\t}\n\t\t\t} // compute the local matrices, positions, rotations and scales\n\n\n\t\t\tfor (var _i = 0, _il = this.bones.length; _i < _il; _i++) {\n\t\t\t\tvar _bone = this.bones[_i];\n\n\t\t\t\tif (_bone) {\n\t\t\t\t\tif (_bone.parent && _bone.parent.isBone) {\n\t\t\t\t\t\t_bone.matrix.copy(_bone.parent.matrixWorld).invert();\n\n\t\t\t\t\t\t_bone.matrix.multiply(_bone.matrixWorld);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_bone.matrix.copy(_bone.matrixWorld);\n\t\t\t\t\t}\n\n\t\t\t\t\t_bone.matrix.decompose(_bone.position, _bone.quaternion, _bone.scale);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tupdate: function update() {\n\t\t\tvar bones = this.bones;\n\t\t\tvar boneInverses = this.boneInverses;\n\t\t\tvar boneMatrices = this.boneMatrices;\n\t\t\tvar boneTexture = this.boneTexture; // flatten bone matrices to array\n\n\t\t\tfor (var i = 0, il = bones.length; i < il; i++) {\n\t\t\t\t// compute the offset between the current and the original transform\n\t\t\t\tvar matrix = bones[i] ? bones[i].matrixWorld : _identityMatrix;\n\n\t\t\t\t_offsetMatrix.multiplyMatrices(matrix, boneInverses[i]);\n\n\t\t\t\t_offsetMatrix.toArray(boneMatrices, i * 16);\n\t\t\t}\n\n\t\t\tif (boneTexture !== null) {\n\t\t\t\tboneTexture.needsUpdate = true;\n\t\t\t}\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new Skeleton(this.bones, this.boneInverses);\n\t\t},\n\t\tgetBoneByName: function getBoneByName(name) {\n\t\t\tfor (var i = 0, il = this.bones.length; i < il; i++) {\n\t\t\t\tvar bone = this.bones[i];\n\n\t\t\t\tif (bone.name === name) {\n\t\t\t\t\treturn bone;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t\tdispose: function dispose() {\n\t\t\tif (this.boneTexture !== null) {\n\t\t\t\tthis.boneTexture.dispose();\n\t\t\t\tthis.boneTexture = null;\n\t\t\t}\n\t\t},\n\t\tfromJSON: function fromJSON(json, bones) {\n\t\t\tthis.uuid = json.uuid;\n\n\t\t\tfor (var i = 0, l = json.bones.length; i < l; i++) {\n\t\t\t\tvar uuid = json.bones[i];\n\t\t\t\tvar bone = bones[uuid];\n\n\t\t\t\tif (bone === undefined) {\n\t\t\t\t\tconsole.warn('THREE.Skeleton: No bone found with UUID:', uuid);\n\t\t\t\t\tbone = new Bone();\n\t\t\t\t}\n\n\t\t\t\tthis.bones.push(bone);\n\t\t\t\tthis.boneInverses.push(new Matrix4().fromArray(json.boneInverses[i]));\n\t\t\t}\n\n\t\t\tthis.init();\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Skeleton',\n\t\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t\t},\n\t\t\t\tbones: [],\n\t\t\t\tboneInverses: []\n\t\t\t};\n\t\t\tdata.uuid = this.uuid;\n\t\t\tvar bones = this.bones;\n\t\t\tvar boneInverses = this.boneInverses;\n\n\t\t\tfor (var i = 0, l = bones.length; i < l; i++) {\n\t\t\t\tvar bone = bones[i];\n\t\t\t\tdata.bones.push(bone.uuid);\n\t\t\t\tvar boneInverse = boneInverses[i];\n\t\t\t\tdata.boneInverses.push(boneInverse.toArray());\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tvar _instanceLocalMatrix = new Matrix4();\n\n\tvar _instanceWorldMatrix = new Matrix4();\n\n\tvar _instanceIntersects = [];\n\n\tvar _mesh = new Mesh();\n\n\tfunction InstancedMesh(geometry, material, count) {\n\t\tMesh.call(this, geometry, material);\n\t\tthis.instanceMatrix = new BufferAttribute(new Float32Array(count * 16), 16);\n\t\tthis.instanceColor = null;\n\t\tthis.count = count;\n\t\tthis.frustumCulled = false;\n\t}\n\n\tInstancedMesh.prototype = Object.assign(Object.create(Mesh.prototype), {\n\t\tconstructor: InstancedMesh,\n\t\tisInstancedMesh: true,\n\t\tcopy: function copy(source) {\n\t\t\tMesh.prototype.copy.call(this, source);\n\t\t\tthis.instanceMatrix.copy(source.instanceMatrix);\n\t\t\tthis.count = source.count;\n\t\t\treturn this;\n\t\t},\n\t\tgetColorAt: function getColorAt(index, color) {\n\t\t\tcolor.fromArray(this.instanceColor.array, index * 3);\n\t\t},\n\t\tgetMatrixAt: function getMatrixAt(index, matrix) {\n\t\t\tmatrix.fromArray(this.instanceMatrix.array, index * 16);\n\t\t},\n\t\traycast: function raycast(raycaster, intersects) {\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tvar raycastTimes = this.count;\n\t\t\t_mesh.geometry = this.geometry;\n\t\t\t_mesh.material = this.material;\n\t\t\tif (_mesh.material === undefined) return;\n\n\t\t\tfor (var instanceId = 0; instanceId < raycastTimes; instanceId++) {\n\t\t\t\t// calculate the world matrix for each instance\n\t\t\t\tthis.getMatrixAt(instanceId, _instanceLocalMatrix);\n\n\t\t\t\t_instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix); // the mesh represents this single instance\n\n\n\t\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t\t_mesh.raycast(raycaster, _instanceIntersects); // process the result of raycast\n\n\n\t\t\t\tfor (var i = 0, l = _instanceIntersects.length; i < l; i++) {\n\t\t\t\t\tvar intersect = _instanceIntersects[i];\n\t\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\t\tintersect.object = this;\n\t\t\t\t\tintersects.push(intersect);\n\t\t\t\t}\n\n\t\t\t\t_instanceIntersects.length = 0;\n\t\t\t}\n\t\t},\n\t\tsetColorAt: function setColorAt(index, color) {\n\t\t\tif (this.instanceColor === null) {\n\t\t\t\tthis.instanceColor = new BufferAttribute(new Float32Array(this.count * 3), 3);\n\t\t\t}\n\n\t\t\tcolor.toArray(this.instanceColor.array, index * 3);\n\t\t},\n\t\tsetMatrixAt: function setMatrixAt(index, matrix) {\n\t\t\tmatrix.toArray(this.instanceMatrix.array, index * 16);\n\t\t},\n\t\tupdateMorphTargets: function updateMorphTargets() {},\n\t\tdispose: function dispose() {\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'dispose'\n\t\t\t});\n\t\t}\n\t});\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\topacity: <float>,\n\t *\n\t *\tlinewidth: <float>,\n\t *\tlinecap: \"round\",\n\t *\tlinejoin: \"round\"\n\t * }\n\t */\n\n\tfunction LineBasicMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'LineBasicMaterial';\n\t\tthis.color = new Color(0xffffff);\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\t\tthis.morphTargets = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tLineBasicMaterial.prototype = Object.create(Material.prototype);\n\tLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\tLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\n\tLineBasicMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.color.copy(source.color);\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\t\tthis.morphTargets = source.morphTargets;\n\t\treturn this;\n\t};\n\n\tvar _start = new Vector3();\n\n\tvar _end = new Vector3();\n\n\tvar _inverseMatrix$1 = new Matrix4();\n\n\tvar _ray$1 = new Ray();\n\n\tvar _sphere$2 = new Sphere();\n\n\tfunction Line(geometry, material) {\n\t\tif (geometry === void 0) {\n\t\t\tgeometry = new BufferGeometry();\n\t\t}\n\n\t\tif (material === void 0) {\n\t\t\tmaterial = new LineBasicMaterial();\n\t\t}\n\n\t\tObject3D.call(this);\n\t\tthis.type = 'Line';\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\t\tthis.updateMorphTargets();\n\t}\n\n\tLine.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: Line,\n\t\tisLine: true,\n\t\tcopy: function copy(source) {\n\t\t\tObject3D.prototype.copy.call(this, source);\n\t\t\tthis.material = source.material;\n\t\t\tthis.geometry = source.geometry;\n\t\t\treturn this;\n\t\t},\n\t\tcomputeLineDistances: function computeLineDistances() {\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\t// we assume non-indexed geometry\n\t\t\t\tif (geometry.index === null) {\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [0];\n\n\t\t\t\t\tfor (var i = 1, l = positionAttribute.count; i < l; i++) {\n\t\t\t\t\t\t_start.fromBufferAttribute(positionAttribute, i - 1);\n\n\t\t\t\t\t\t_end.fromBufferAttribute(positionAttribute, i);\n\n\t\t\t\t\t\tlineDistances[i] = lineDistances[i - 1];\n\t\t\t\t\t\tlineDistances[i] += _start.distanceTo(_end);\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute('lineDistance', new Float32BufferAttribute(lineDistances, 1));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.');\n\t\t\t\t}\n\t\t\t} else if (geometry.isGeometry) {\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar _lineDistances = geometry.lineDistances;\n\t\t\t\t_lineDistances[0] = 0;\n\n\t\t\t\tfor (var _i = 1, _l = vertices.length; _i < _l; _i++) {\n\t\t\t\t\t_lineDistances[_i] = _lineDistances[_i - 1];\n\t\t\t\t\t_lineDistances[_i] += vertices[_i - 1].distanceTo(vertices[_i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\traycast: function raycast(raycaster, intersects) {\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tvar threshold = raycaster.params.Line.threshold; // Checking boundingSphere distance to ray\n\n\t\t\tif (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$2.copy(geometry.boundingSphere);\n\n\t\t\t_sphere$2.applyMatrix4(matrixWorld);\n\n\t\t\t_sphere$2.radius += threshold;\n\t\t\tif (raycaster.ray.intersectsSphere(_sphere$2) === false) return; //\n\n\t\t\t_inverseMatrix$1.copy(matrixWorld).invert();\n\n\t\t\t_ray$1.copy(raycaster.ray).applyMatrix4(_inverseMatrix$1);\n\n\t\t\tvar localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\n\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\t\t\tvar vStart = new Vector3();\n\t\t\tvar vEnd = new Vector3();\n\t\t\tvar interSegment = new Vector3();\n\t\t\tvar interRay = new Vector3();\n\t\t\tvar step = this.isLineSegments ? 2 : 1;\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positionAttribute = attributes.position;\n\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor (var i = 0, l = indices.length - 1; i < l; i += step) {\n\t\t\t\t\t\tvar a = indices[i];\n\t\t\t\t\t\tvar b = indices[i + 1];\n\t\t\t\t\t\tvStart.fromBufferAttribute(positionAttribute, a);\n\t\t\t\t\t\tvEnd.fromBufferAttribute(positionAttribute, b);\n\n\t\t\t\t\t\tvar distSq = _ray$1.distanceSqToSegment(vStart, vEnd, interRay, interSegment);\n\n\t\t\t\t\t\tif (distSq > localThresholdSq) continue;\n\t\t\t\t\t\tinterRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo(interRay);\n\t\t\t\t\t\tif (distance < raycaster.near || distance > raycaster.far) continue;\n\t\t\t\t\t\tintersects.push({\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4(this.matrixWorld),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _i2 = 0, _l2 = positionAttribute.count - 1; _i2 < _l2; _i2 += step) {\n\t\t\t\t\t\tvStart.fromBufferAttribute(positionAttribute, _i2);\n\t\t\t\t\t\tvEnd.fromBufferAttribute(positionAttribute, _i2 + 1);\n\n\t\t\t\t\t\tvar _distSq = _ray$1.distanceSqToSegment(vStart, vEnd, interRay, interSegment);\n\n\t\t\t\t\t\tif (_distSq > localThresholdSq) continue;\n\t\t\t\t\t\tinterRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar _distance = raycaster.ray.origin.distanceTo(interRay);\n\n\t\t\t\t\t\tif (_distance < raycaster.near || _distance > raycaster.far) continue;\n\t\t\t\t\t\tintersects.push({\n\t\t\t\t\t\t\tdistance: _distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4(this.matrixWorld),\n\t\t\t\t\t\t\tindex: _i2,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (geometry.isGeometry) {\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar nbVertices = vertices.length;\n\n\t\t\t\tfor (var _i3 = 0; _i3 < nbVertices - 1; _i3 += step) {\n\t\t\t\t\tvar _distSq2 = _ray$1.distanceSqToSegment(vertices[_i3], vertices[_i3 + 1], interRay, interSegment);\n\n\t\t\t\t\tif (_distSq2 > localThresholdSq) continue;\n\t\t\t\t\tinterRay.applyMatrix4(this.matrixWorld); //Move back to world space for distance calculation\n\n\t\t\t\t\tvar _distance2 = raycaster.ray.origin.distanceTo(interRay);\n\n\t\t\t\t\tif (_distance2 < raycaster.near || _distance2 > raycaster.far) continue;\n\t\t\t\t\tintersects.push({\n\t\t\t\t\t\tdistance: _distance2,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4(this.matrixWorld),\n\t\t\t\t\t\tindex: _i3,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tupdateMorphTargets: function updateMorphTargets() {\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\t\tvar keys = Object.keys(morphAttributes);\n\n\t\t\t\tif (keys.length > 0) {\n\t\t\t\t\tvar morphAttribute = morphAttributes[keys[0]];\n\n\t\t\t\t\tif (morphAttribute !== undefined) {\n\t\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\t\tfor (var m = 0, ml = morphAttribute.length; m < ml; m++) {\n\t\t\t\t\t\t\tvar name = morphAttribute[m].name || String(m);\n\t\t\t\t\t\t\tthis.morphTargetInfluences.push(0);\n\t\t\t\t\t\t\tthis.morphTargetDictionary[name] = m;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\t\tif (morphTargets !== undefined && morphTargets.length > 0) {\n\t\t\t\t\tconsole.error('THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tvar _start$1 = new Vector3();\n\n\tvar _end$1 = new Vector3();\n\n\tfunction LineSegments(geometry, material) {\n\t\tLine.call(this, geometry, material);\n\t\tthis.type = 'LineSegments';\n\t}\n\n\tLineSegments.prototype = Object.assign(Object.create(Line.prototype), {\n\t\tconstructor: LineSegments,\n\t\tisLineSegments: true,\n\t\tcomputeLineDistances: function computeLineDistances() {\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\t// we assume non-indexed geometry\n\t\t\t\tif (geometry.index === null) {\n\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\tvar lineDistances = [];\n\n\t\t\t\t\tfor (var i = 0, l = positionAttribute.count; i < l; i += 2) {\n\t\t\t\t\t\t_start$1.fromBufferAttribute(positionAttribute, i);\n\n\t\t\t\t\t\t_end$1.fromBufferAttribute(positionAttribute, i + 1);\n\n\t\t\t\t\t\tlineDistances[i] = i === 0 ? 0 : lineDistances[i - 1];\n\t\t\t\t\t\tlineDistances[i + 1] = lineDistances[i] + _start$1.distanceTo(_end$1);\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute('lineDistance', new Float32BufferAttribute(lineDistances, 1));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.');\n\t\t\t\t}\n\t\t\t} else if (geometry.isGeometry) {\n\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\tvar _lineDistances = geometry.lineDistances;\n\n\t\t\t\tfor (var _i = 0, _l = vertices.length; _i < _l; _i += 2) {\n\t\t\t\t\t_start$1.copy(vertices[_i]);\n\n\t\t\t\t\t_end$1.copy(vertices[_i + 1]);\n\n\t\t\t\t\t_lineDistances[_i] = _i === 0 ? 0 : _lineDistances[_i - 1];\n\t\t\t\t\t_lineDistances[_i + 1] = _lineDistances[_i] + _start$1.distanceTo(_end$1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction LineLoop(geometry, material) {\n\t\tLine.call(this, geometry, material);\n\t\tthis.type = 'LineLoop';\n\t}\n\n\tLineLoop.prototype = Object.assign(Object.create(Line.prototype), {\n\t\tconstructor: LineLoop,\n\t\tisLineLoop: true\n\t});\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\topacity: <float>,\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tsize: <float>,\n\t *\tsizeAttenuation: <bool>\n\t *\n\t *\tmorphTargets: <bool>\n\t * }\n\t */\n\n\tfunction PointsMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'PointsMaterial';\n\t\tthis.color = new Color(0xffffff);\n\t\tthis.map = null;\n\t\tthis.alphaMap = null;\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\t\tthis.morphTargets = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tPointsMaterial.prototype = Object.create(Material.prototype);\n\tPointsMaterial.prototype.constructor = PointsMaterial;\n\tPointsMaterial.prototype.isPointsMaterial = true;\n\n\tPointsMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.color.copy(source.color);\n\t\tthis.map = source.map;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\t\tthis.morphTargets = source.morphTargets;\n\t\treturn this;\n\t};\n\n\tvar _inverseMatrix$2 = new Matrix4();\n\n\tvar _ray$2 = new Ray();\n\n\tvar _sphere$3 = new Sphere();\n\n\tvar _position$1 = new Vector3();\n\n\tfunction Points(geometry, material) {\n\t\tif (geometry === void 0) {\n\t\t\tgeometry = new BufferGeometry();\n\t\t}\n\n\t\tif (material === void 0) {\n\t\t\tmaterial = new PointsMaterial();\n\t\t}\n\n\t\tObject3D.call(this);\n\t\tthis.type = 'Points';\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\t\tthis.updateMorphTargets();\n\t}\n\n\tPoints.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: Points,\n\t\tisPoints: true,\n\t\tcopy: function copy(source) {\n\t\t\tObject3D.prototype.copy.call(this, source);\n\t\t\tthis.material = source.material;\n\t\t\tthis.geometry = source.geometry;\n\t\t\treturn this;\n\t\t},\n\t\traycast: function raycast(raycaster, intersects) {\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tvar threshold = raycaster.params.Points.threshold; // Checking boundingSphere distance to ray\n\n\t\t\tif (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$3.copy(geometry.boundingSphere);\n\n\t\t\t_sphere$3.applyMatrix4(matrixWorld);\n\n\t\t\t_sphere$3.radius += threshold;\n\t\t\tif (raycaster.ray.intersectsSphere(_sphere$3) === false) return; //\n\n\t\t\t_inverseMatrix$2.copy(matrixWorld).invert();\n\n\t\t\t_ray$2.copy(raycaster.ray).applyMatrix4(_inverseMatrix$2);\n\n\t\t\tvar localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\n\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\tvar index = geometry.index;\n\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\tvar positionAttribute = attributes.position;\n\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tfor (var i = 0, il = indices.length; i < il; i++) {\n\t\t\t\t\t\tvar a = indices[i];\n\n\t\t\t\t\t\t_position$1.fromBufferAttribute(positionAttribute, a);\n\n\t\t\t\t\t\ttestPoint(_position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _i = 0, l = positionAttribute.count; _i < l; _i++) {\n\t\t\t\t\t\t_position$1.fromBufferAttribute(positionAttribute, _i);\n\n\t\t\t\t\t\ttestPoint(_position$1, _i, localThresholdSq, matrixWorld, raycaster, intersects, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\tfor (var _i2 = 0, _l = vertices.length; _i2 < _l; _i2++) {\n\t\t\t\t\ttestPoint(vertices[_i2], _i2, localThresholdSq, matrixWorld, raycaster, intersects, this);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tupdateMorphTargets: function updateMorphTargets() {\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tif (geometry.isBufferGeometry) {\n\t\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\t\tvar keys = Object.keys(morphAttributes);\n\n\t\t\t\tif (keys.length > 0) {\n\t\t\t\t\tvar morphAttribute = morphAttributes[keys[0]];\n\n\t\t\t\t\tif (morphAttribute !== undefined) {\n\t\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\t\tfor (var m = 0, ml = morphAttribute.length; m < ml; m++) {\n\t\t\t\t\t\t\tvar name = morphAttribute[m].name || String(m);\n\t\t\t\t\t\t\tthis.morphTargetInfluences.push(0);\n\t\t\t\t\t\t\tthis.morphTargetDictionary[name] = m;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\t\tif (morphTargets !== undefined && morphTargets.length > 0) {\n\t\t\t\t\tconsole.error('THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction testPoint(point, index, localThresholdSq, matrixWorld, raycaster, intersects, object) {\n\t\tvar rayPointDistanceSq = _ray$2.distanceSqToPoint(point);\n\n\t\tif (rayPointDistanceSq < localThresholdSq) {\n\t\t\tvar intersectPoint = new Vector3();\n\n\t\t\t_ray$2.closestPointToPoint(point, intersectPoint);\n\n\t\t\tintersectPoint.applyMatrix4(matrixWorld);\n\t\t\tvar distance = raycaster.ray.origin.distanceTo(intersectPoint);\n\t\t\tif (distance < raycaster.near || distance > raycaster.far) return;\n\t\t\tintersects.push({\n\t\t\t\tdistance: distance,\n\t\t\t\tdistanceToRay: Math.sqrt(rayPointDistanceSq),\n\t\t\t\tpoint: intersectPoint,\n\t\t\t\tindex: index,\n\t\t\t\tface: null,\n\t\t\t\tobject: object\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction VideoTexture(video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) {\n\t\tTexture.call(this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy);\n\t\tthis.format = format !== undefined ? format : RGBFormat;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\t\tthis.generateMipmaps = false;\n\t\tvar scope = this;\n\n\t\tfunction updateVideo() {\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback(updateVideo);\n\t\t}\n\n\t\tif ('requestVideoFrameCallback' in video) {\n\t\t\tvideo.requestVideoFrameCallback(updateVideo);\n\t\t}\n\t}\n\n\tVideoTexture.prototype = Object.assign(Object.create(Texture.prototype), {\n\t\tconstructor: VideoTexture,\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor(this.image).copy(this);\n\t\t},\n\t\tisVideoTexture: true,\n\t\tupdate: function update() {\n\t\t\tvar video = this.image;\n\t\t\tvar hasVideoFrameCallback = ('requestVideoFrameCallback' in video);\n\n\t\t\tif (hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA) {\n\t\t\t\tthis.needsUpdate = true;\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction CompressedTexture(mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding) {\n\t\tTexture.call(this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding);\n\t\tthis.image = {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t\tthis.mipmaps = mipmaps; // no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false; // can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\t}\n\n\tCompressedTexture.prototype = Object.create(Texture.prototype);\n\tCompressedTexture.prototype.constructor = CompressedTexture;\n\tCompressedTexture.prototype.isCompressedTexture = true;\n\n\tfunction CanvasTexture(canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy) {\n\t\tTexture.call(this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy);\n\t\tthis.needsUpdate = true;\n\t}\n\n\tCanvasTexture.prototype = Object.create(Texture.prototype);\n\tCanvasTexture.prototype.constructor = CanvasTexture;\n\tCanvasTexture.prototype.isCanvasTexture = true;\n\n\tfunction DepthTexture(width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format) {\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif (format !== DepthFormat && format !== DepthStencilFormat) {\n\t\t\tthrow new Error('DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat');\n\t\t}\n\n\t\tif (type === undefined && format === DepthFormat) type = UnsignedShortType;\n\t\tif (type === undefined && format === DepthStencilFormat) type = UnsignedInt248Type;\n\t\tTexture.call(this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy);\n\t\tthis.image = {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\t}\n\n\tDepthTexture.prototype = Object.create(Texture.prototype);\n\tDepthTexture.prototype.constructor = DepthTexture;\n\tDepthTexture.prototype.isDepthTexture = true;\n\n\tvar _geometryId = 0; // Geometry uses even numbers as Id\n\n\tvar _m1$3 = new Matrix4();\n\n\tvar _obj$1 = new Object3D();\n\n\tvar _offset$1 = new Vector3();\n\n\tfunction Geometry() {\n\t\tObject.defineProperty(this, 'id', {\n\t\t\tvalue: _geometryId += 2\n\t\t});\n\t\tthis.uuid = MathUtils.generateUUID();\n\t\tthis.name = '';\n\t\tthis.type = 'Geometry';\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null; // update flags\n\n\t\tthis.elementsNeedUpdate = false;\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.lineDistancesNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\t}\n\n\tGeometry.prototype = Object.assign(Object.create(EventDispatcher.prototype), {\n\t\tconstructor: Geometry,\n\t\tisGeometry: true,\n\t\tapplyMatrix4: function applyMatrix4(matrix) {\n\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix(matrix);\n\n\t\t\tfor (var i = 0, il = this.vertices.length; i < il; i++) {\n\t\t\t\tvar vertex = this.vertices[i];\n\t\t\t\tvertex.applyMatrix4(matrix);\n\t\t\t}\n\n\t\t\tfor (var _i = 0, _il = this.faces.length; _i < _il; _i++) {\n\t\t\t\tvar face = this.faces[_i];\n\t\t\t\tface.normal.applyMatrix3(normalMatrix).normalize();\n\n\t\t\t\tfor (var j = 0, jl = face.vertexNormals.length; j < jl; j++) {\n\t\t\t\t\tface.vertexNormals[j].applyMatrix3(normalMatrix).normalize();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.boundingBox !== null) {\n\t\t\t\tthis.computeBoundingBox();\n\t\t\t}\n\n\t\t\tif (this.boundingSphere !== null) {\n\t\t\t\tthis.computeBoundingSphere();\n\t\t\t}\n\n\t\t\tthis.verticesNeedUpdate = true;\n\t\t\tthis.normalsNeedUpdate = true;\n\t\t\treturn this;\n\t\t},\n\t\trotateX: function rotateX(angle) {\n\t\t\t// rotate geometry around world x-axis\n\t\t\t_m1$3.makeRotationX(angle);\n\n\t\t\tthis.applyMatrix4(_m1$3);\n\t\t\treturn this;\n\t\t},\n\t\trotateY: function rotateY(angle) {\n\t\t\t// rotate geometry around world y-axis\n\t\t\t_m1$3.makeRotationY(angle);\n\n\t\t\tthis.applyMatrix4(_m1$3);\n\t\t\treturn this;\n\t\t},\n\t\trotateZ: function rotateZ(angle) {\n\t\t\t// rotate geometry around world z-axis\n\t\t\t_m1$3.makeRotationZ(angle);\n\n\t\t\tthis.applyMatrix4(_m1$3);\n\t\t\treturn this;\n\t\t},\n\t\ttranslate: function translate(x, y, z) {\n\t\t\t// translate geometry\n\t\t\t_m1$3.makeTranslation(x, y, z);\n\n\t\t\tthis.applyMatrix4(_m1$3);\n\t\t\treturn this;\n\t\t},\n\t\tscale: function scale(x, y, z) {\n\t\t\t// scale geometry\n\t\t\t_m1$3.makeScale(x, y, z);\n\n\t\t\tthis.applyMatrix4(_m1$3);\n\t\t\treturn this;\n\t\t},\n\t\tlookAt: function lookAt(vector) {\n\t\t\t_obj$1.lookAt(vector);\n\n\t\t\t_obj$1.updateMatrix();\n\n\t\t\tthis.applyMatrix4(_obj$1.matrix);\n\t\t\treturn this;\n\t\t},\n\t\tfromBufferGeometry: function fromBufferGeometry(geometry) {\n\t\t\tvar scope = this;\n\t\t\tvar index = geometry.index !== null ? geometry.index : undefined;\n\t\t\tvar attributes = geometry.attributes;\n\n\t\t\tif (attributes.position === undefined) {\n\t\t\t\tconsole.error('THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.');\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tvar position = attributes.position;\n\t\t\tvar normal = attributes.normal;\n\t\t\tvar color = attributes.color;\n\t\t\tvar uv = attributes.uv;\n\t\t\tvar uv2 = attributes.uv2;\n\t\t\tif (uv2 !== undefined) this.faceVertexUvs[1] = [];\n\n\t\t\tfor (var i = 0; i < position.count; i++) {\n\t\t\t\tscope.vertices.push(new Vector3().fromBufferAttribute(position, i));\n\n\t\t\t\tif (color !== undefined) {\n\t\t\t\t\tscope.colors.push(new Color().fromBufferAttribute(color, i));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction addFace(a, b, c, materialIndex) {\n\t\t\t\tvar vertexColors = color === undefined ? [] : [scope.colors[a].clone(), scope.colors[b].clone(), scope.colors[c].clone()];\n\t\t\t\tvar vertexNormals = normal === undefined ? [] : [new Vector3().fromBufferAttribute(normal, a), new Vector3().fromBufferAttribute(normal, b), new Vector3().fromBufferAttribute(normal, c)];\n\t\t\t\tvar face = new Face3(a, b, c, vertexNormals, vertexColors, materialIndex);\n\t\t\t\tscope.faces.push(face);\n\n\t\t\t\tif (uv !== undefined) {\n\t\t\t\t\tscope.faceVertexUvs[0].push([new Vector2().fromBufferAttribute(uv, a), new Vector2().fromBufferAttribute(uv, b), new Vector2().fromBufferAttribute(uv, c)]);\n\t\t\t\t}\n\n\t\t\t\tif (uv2 !== undefined) {\n\t\t\t\t\tscope.faceVertexUvs[1].push([new Vector2().fromBufferAttribute(uv2, a), new Vector2().fromBufferAttribute(uv2, b), new Vector2().fromBufferAttribute(uv2, c)]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar groups = geometry.groups;\n\n\t\t\tif (groups.length > 0) {\n\t\t\t\tfor (var _i2 = 0; _i2 < groups.length; _i2++) {\n\t\t\t\t\tvar group = groups[_i2];\n\t\t\t\t\tvar start = group.start;\n\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\tfor (var j = start, jl = start + count; j < jl; j += 3) {\n\t\t\t\t\t\tif (index !== undefined) {\n\t\t\t\t\t\t\taddFace(index.getX(j), index.getX(j + 1), index.getX(j + 2), group.materialIndex);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\taddFace(j, j + 1, j + 2, group.materialIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (index !== undefined) {\n\t\t\t\t\tfor (var _i3 = 0; _i3 < index.count; _i3 += 3) {\n\t\t\t\t\t\taddFace(index.getX(_i3), index.getX(_i3 + 1), index.getX(_i3 + 2));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (var _i4 = 0; _i4 < position.count; _i4 += 3) {\n\t\t\t\t\t\taddFace(_i4, _i4 + 1, _i4 + 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tif (geometry.boundingBox !== null) {\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\t\t\t}\n\n\t\t\tif (geometry.boundingSphere !== null) {\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tcenter: function center() {\n\t\t\tthis.computeBoundingBox();\n\t\t\tthis.boundingBox.getCenter(_offset$1).negate();\n\t\t\tthis.translate(_offset$1.x, _offset$1.y, _offset$1.z);\n\t\t\treturn this;\n\t\t},\n\t\tnormalize: function normalize() {\n\t\t\tthis.computeBoundingSphere();\n\t\t\tvar center = this.boundingSphere.center;\n\t\t\tvar radius = this.boundingSphere.radius;\n\t\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\t\t\tvar matrix = new Matrix4();\n\t\t\tmatrix.set(s, 0, 0, -s * center.x, 0, s, 0, -s * center.y, 0, 0, s, -s * center.z, 0, 0, 0, 1);\n\t\t\tthis.applyMatrix4(matrix);\n\t\t\treturn this;\n\t\t},\n\t\tcomputeFaceNormals: function computeFaceNormals() {\n\t\t\tvar cb = new Vector3(),\n\t\t\t\t\tab = new Vector3();\n\n\t\t\tfor (var f = 0, fl = this.faces.length; f < fl; f++) {\n\t\t\t\tvar face = this.faces[f];\n\t\t\t\tvar vA = this.vertices[face.a];\n\t\t\t\tvar vB = this.vertices[face.b];\n\t\t\t\tvar vC = this.vertices[face.c];\n\t\t\t\tcb.subVectors(vC, vB);\n\t\t\t\tab.subVectors(vA, vB);\n\t\t\t\tcb.cross(ab);\n\t\t\t\tcb.normalize();\n\t\t\t\tface.normal.copy(cb);\n\t\t\t}\n\t\t},\n\t\tcomputeVertexNormals: function computeVertexNormals(areaWeighted) {\n\t\t\tif (areaWeighted === void 0) {\n\t\t\t\tareaWeighted = true;\n\t\t\t}\n\n\t\t\tvar vertices = new Array(this.vertices.length);\n\n\t\t\tfor (var v = 0, vl = this.vertices.length; v < vl; v++) {\n\t\t\t\tvertices[v] = new Vector3();\n\t\t\t}\n\n\t\t\tif (areaWeighted) {\n\t\t\t\t// vertex normals weighted by triangle areas\n\t\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\t\t\t\tvar cb = new Vector3(),\n\t\t\t\t\t\tab = new Vector3();\n\n\t\t\t\tfor (var f = 0, fl = this.faces.length; f < fl; f++) {\n\t\t\t\t\tvar face = this.faces[f];\n\t\t\t\t\tvar vA = this.vertices[face.a];\n\t\t\t\t\tvar vB = this.vertices[face.b];\n\t\t\t\t\tvar vC = this.vertices[face.c];\n\t\t\t\t\tcb.subVectors(vC, vB);\n\t\t\t\t\tab.subVectors(vA, vB);\n\t\t\t\t\tcb.cross(ab);\n\t\t\t\t\tvertices[face.a].add(cb);\n\t\t\t\t\tvertices[face.b].add(cb);\n\t\t\t\t\tvertices[face.c].add(cb);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.computeFaceNormals();\n\n\t\t\t\tfor (var _f = 0, _fl = this.faces.length; _f < _fl; _f++) {\n\t\t\t\t\tvar _face = this.faces[_f];\n\n\t\t\t\t\tvertices[_face.a].add(_face.normal);\n\n\t\t\t\t\tvertices[_face.b].add(_face.normal);\n\n\t\t\t\t\tvertices[_face.c].add(_face.normal);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var _v = 0, _vl = this.vertices.length; _v < _vl; _v++) {\n\t\t\t\tvertices[_v].normalize();\n\t\t\t}\n\n\t\t\tfor (var _f2 = 0, _fl2 = this.faces.length; _f2 < _fl2; _f2++) {\n\t\t\t\tvar _face2 = this.faces[_f2];\n\t\t\t\tvar vertexNormals = _face2.vertexNormals;\n\n\t\t\t\tif (vertexNormals.length === 3) {\n\t\t\t\t\tvertexNormals[0].copy(vertices[_face2.a]);\n\t\t\t\t\tvertexNormals[1].copy(vertices[_face2.b]);\n\t\t\t\t\tvertexNormals[2].copy(vertices[_face2.c]);\n\t\t\t\t} else {\n\t\t\t\t\tvertexNormals[0] = vertices[_face2.a].clone();\n\t\t\t\t\tvertexNormals[1] = vertices[_face2.b].clone();\n\t\t\t\t\tvertexNormals[2] = vertices[_face2.c].clone();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.faces.length > 0) {\n\t\t\t\tthis.normalsNeedUpdate = true;\n\t\t\t}\n\t\t},\n\t\tcomputeFlatVertexNormals: function computeFlatVertexNormals() {\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor (var f = 0, fl = this.faces.length; f < fl; f++) {\n\t\t\t\tvar face = this.faces[f];\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tif (vertexNormals.length === 3) {\n\t\t\t\t\tvertexNormals[0].copy(face.normal);\n\t\t\t\t\tvertexNormals[1].copy(face.normal);\n\t\t\t\t\tvertexNormals[2].copy(face.normal);\n\t\t\t\t} else {\n\t\t\t\t\tvertexNormals[0] = face.normal.clone();\n\t\t\t\t\tvertexNormals[1] = face.normal.clone();\n\t\t\t\t\tvertexNormals[2] = face.normal.clone();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.faces.length > 0) {\n\t\t\t\tthis.normalsNeedUpdate = true;\n\t\t\t}\n\t\t},\n\t\tcomputeMorphNormals: function computeMorphNormals() {\n\t\t\t// save original normals\n\t\t\t// - create temp variables on first access\n\t\t\t//\t otherwise just copy (for faster repeated calls)\n\t\t\tfor (var f = 0, fl = this.faces.length; f < fl; f++) {\n\t\t\t\tvar face = this.faces[f];\n\n\t\t\t\tif (!face.__originalFaceNormal) {\n\t\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\t\t\t\t} else {\n\t\t\t\t\tface.__originalFaceNormal.copy(face.normal);\n\t\t\t\t}\n\n\t\t\t\tif (!face.__originalVertexNormals) face.__originalVertexNormals = [];\n\n\t\t\t\tfor (var i = 0, il = face.vertexNormals.length; i < il; i++) {\n\t\t\t\t\tif (!face.__originalVertexNormals[i]) {\n\t\t\t\t\t\tface.__originalVertexNormals[i] = face.vertexNormals[i].clone();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tface.__originalVertexNormals[i].copy(face.vertexNormals[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // use temp geometry to compute face and vertex normals for each morph\n\n\n\t\t\tvar tmpGeo = new Geometry();\n\t\t\ttmpGeo.faces = this.faces;\n\n\t\t\tfor (var _i5 = 0, _il2 = this.morphTargets.length; _i5 < _il2; _i5++) {\n\t\t\t\t// create on first access\n\t\t\t\tif (!this.morphNormals[_i5]) {\n\t\t\t\t\tthis.morphNormals[_i5] = {};\n\t\t\t\t\tthis.morphNormals[_i5].faceNormals = [];\n\t\t\t\t\tthis.morphNormals[_i5].vertexNormals = [];\n\t\t\t\t\tvar dstNormalsFace = this.morphNormals[_i5].faceNormals;\n\t\t\t\t\tvar dstNormalsVertex = this.morphNormals[_i5].vertexNormals;\n\n\t\t\t\t\tfor (var _f3 = 0, _fl3 = this.faces.length; _f3 < _fl3; _f3++) {\n\t\t\t\t\t\tvar faceNormal = new Vector3();\n\t\t\t\t\t\tvar vertexNormals = {\n\t\t\t\t\t\t\ta: new Vector3(),\n\t\t\t\t\t\t\tb: new Vector3(),\n\t\t\t\t\t\t\tc: new Vector3()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdstNormalsFace.push(faceNormal);\n\t\t\t\t\t\tdstNormalsVertex.push(vertexNormals);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar morphNormals = this.morphNormals[_i5]; // set vertices to morph target\n\n\t\t\t\ttmpGeo.vertices = this.morphTargets[_i5].vertices; // compute morph normals\n\n\t\t\t\ttmpGeo.computeFaceNormals();\n\t\t\t\ttmpGeo.computeVertexNormals(); // store morph normals\n\n\t\t\t\tfor (var _f4 = 0, _fl4 = this.faces.length; _f4 < _fl4; _f4++) {\n\t\t\t\t\tvar _face3 = this.faces[_f4];\n\t\t\t\t\tvar _faceNormal = morphNormals.faceNormals[_f4];\n\t\t\t\t\tvar _vertexNormals = morphNormals.vertexNormals[_f4];\n\n\t\t\t\t\t_faceNormal.copy(_face3.normal);\n\n\t\t\t\t\t_vertexNormals.a.copy(_face3.vertexNormals[0]);\n\n\t\t\t\t\t_vertexNormals.b.copy(_face3.vertexNormals[1]);\n\n\t\t\t\t\t_vertexNormals.c.copy(_face3.vertexNormals[2]);\n\t\t\t\t}\n\t\t\t} // restore original normals\n\n\n\t\t\tfor (var _f5 = 0, _fl5 = this.faces.length; _f5 < _fl5; _f5++) {\n\t\t\t\tvar _face4 = this.faces[_f5];\n\t\t\t\t_face4.normal = _face4.__originalFaceNormal;\n\t\t\t\t_face4.vertexNormals = _face4.__originalVertexNormals;\n\t\t\t}\n\t\t},\n\t\tcomputeBoundingBox: function computeBoundingBox() {\n\t\t\tif (this.boundingBox === null) {\n\t\t\t\tthis.boundingBox = new Box3();\n\t\t\t}\n\n\t\t\tthis.boundingBox.setFromPoints(this.vertices);\n\t\t},\n\t\tcomputeBoundingSphere: function computeBoundingSphere() {\n\t\t\tif (this.boundingSphere === null) {\n\t\t\t\tthis.boundingSphere = new Sphere();\n\t\t\t}\n\n\t\t\tthis.boundingSphere.setFromPoints(this.vertices);\n\t\t},\n\t\tmerge: function merge(geometry, matrix, materialIndexOffset) {\n\t\t\tif (materialIndexOffset === void 0) {\n\t\t\t\tmaterialIndexOffset = 0;\n\t\t\t}\n\n\t\t\tif (!(geometry && geometry.isGeometry)) {\n\t\t\t\tconsole.error('THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar normalMatrix;\n\t\t\tvar vertexOffset = this.vertices.length,\n\t\t\t\t\tvertices1 = this.vertices,\n\t\t\t\t\tvertices2 = geometry.vertices,\n\t\t\t\t\tfaces1 = this.faces,\n\t\t\t\t\tfaces2 = geometry.faces,\n\t\t\t\t\tcolors1 = this.colors,\n\t\t\t\t\tcolors2 = geometry.colors;\n\n\t\t\tif (matrix !== undefined) {\n\t\t\t\tnormalMatrix = new Matrix3().getNormalMatrix(matrix);\n\t\t\t} // vertices\n\n\n\t\t\tfor (var i = 0, il = vertices2.length; i < il; i++) {\n\t\t\t\tvar vertex = vertices2[i];\n\t\t\t\tvar vertexCopy = vertex.clone();\n\t\t\t\tif (matrix !== undefined) vertexCopy.applyMatrix4(matrix);\n\t\t\t\tvertices1.push(vertexCopy);\n\t\t\t} // colors\n\n\n\t\t\tfor (var _i6 = 0, _il3 = colors2.length; _i6 < _il3; _i6++) {\n\t\t\t\tcolors1.push(colors2[_i6].clone());\n\t\t\t} // faces\n\n\n\t\t\tfor (var _i7 = 0, _il4 = faces2.length; _i7 < _il4; _i7++) {\n\t\t\t\tvar face = faces2[_i7];\n\t\t\t\tvar normal = void 0,\n\t\t\t\t\t\tcolor = void 0;\n\t\t\t\tvar faceVertexNormals = face.vertexNormals,\n\t\t\t\t\t\tfaceVertexColors = face.vertexColors;\n\t\t\t\tvar faceCopy = new Face3(face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset);\n\t\t\t\tfaceCopy.normal.copy(face.normal);\n\n\t\t\t\tif (normalMatrix !== undefined) {\n\t\t\t\t\tfaceCopy.normal.applyMatrix3(normalMatrix).normalize();\n\t\t\t\t}\n\n\t\t\t\tfor (var j = 0, jl = faceVertexNormals.length; j < jl; j++) {\n\t\t\t\t\tnormal = faceVertexNormals[j].clone();\n\n\t\t\t\t\tif (normalMatrix !== undefined) {\n\t\t\t\t\t\tnormal.applyMatrix3(normalMatrix).normalize();\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCopy.vertexNormals.push(normal);\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.color.copy(face.color);\n\n\t\t\t\tfor (var _j = 0, _jl = faceVertexColors.length; _j < _jl; _j++) {\n\t\t\t\t\tcolor = faceVertexColors[_j];\n\t\t\t\t\tfaceCopy.vertexColors.push(color.clone());\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\t\t\t\tfaces1.push(faceCopy);\n\t\t\t} // uvs\n\n\n\t\t\tfor (var _i8 = 0, _il5 = geometry.faceVertexUvs.length; _i8 < _il5; _i8++) {\n\t\t\t\tvar faceVertexUvs2 = geometry.faceVertexUvs[_i8];\n\t\t\t\tif (this.faceVertexUvs[_i8] === undefined) this.faceVertexUvs[_i8] = [];\n\n\t\t\t\tfor (var _j2 = 0, _jl2 = faceVertexUvs2.length; _j2 < _jl2; _j2++) {\n\t\t\t\t\tvar uvs2 = faceVertexUvs2[_j2],\n\t\t\t\t\t\t\tuvsCopy = [];\n\n\t\t\t\t\tfor (var k = 0, kl = uvs2.length; k < kl; k++) {\n\t\t\t\t\t\tuvsCopy.push(uvs2[k].clone());\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.faceVertexUvs[_i8].push(uvsCopy);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmergeMesh: function mergeMesh(mesh) {\n\t\t\tif (!(mesh && mesh.isMesh)) {\n\t\t\t\tconsole.error('THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (mesh.matrixAutoUpdate) mesh.updateMatrix();\n\t\t\tthis.merge(mesh.geometry, mesh.matrix);\n\t\t},\n\n\t\t/*\n\t\t * Checks for duplicate vertices with hashmap.\n\t\t * Duplicated vertices are removed\n\t\t * and faces' vertices are updated.\n\t\t */\n\t\tmergeVertices: function mergeVertices(precisionPoints) {\n\t\t\tif (precisionPoints === void 0) {\n\t\t\t\tprecisionPoints = 4;\n\t\t\t}\n\n\t\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\n\t\t\tvar unique = [],\n\t\t\t\t\tchanges = [];\n\t\t\tvar precision = Math.pow(10, precisionPoints);\n\n\t\t\tfor (var i = 0, il = this.vertices.length; i < il; i++) {\n\t\t\t\tvar v = this.vertices[i];\n\t\t\t\tvar key = Math.round(v.x * precision) + '_' + Math.round(v.y * precision) + '_' + Math.round(v.z * precision);\n\n\t\t\t\tif (verticesMap[key] === undefined) {\n\t\t\t\t\tverticesMap[key] = i;\n\t\t\t\t\tunique.push(this.vertices[i]);\n\t\t\t\t\tchanges[i] = unique.length - 1;\n\t\t\t\t} else {\n\t\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\t\tchanges[i] = changes[verticesMap[key]];\n\t\t\t\t}\n\t\t\t} // if faces are completely degenerate after merging vertices, we\n\t\t\t// have to remove them from the geometry.\n\n\n\t\t\tvar faceIndicesToRemove = [];\n\n\t\t\tfor (var _i9 = 0, _il6 = this.faces.length; _i9 < _il6; _i9++) {\n\t\t\t\tvar face = this.faces[_i9];\n\t\t\t\tface.a = changes[face.a];\n\t\t\t\tface.b = changes[face.b];\n\t\t\t\tface.c = changes[face.c];\n\t\t\t\tvar indices = [face.a, face.b, face.c]; // if any duplicate vertices are found in a Face3\n\t\t\t\t// we have to remove the face as nothing can be saved\n\n\t\t\t\tfor (var n = 0; n < 3; n++) {\n\t\t\t\t\tif (indices[n] === indices[(n + 1) % 3]) {\n\t\t\t\t\t\tfaceIndicesToRemove.push(_i9);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var _i10 = faceIndicesToRemove.length - 1; _i10 >= 0; _i10--) {\n\t\t\t\tvar idx = faceIndicesToRemove[_i10];\n\t\t\t\tthis.faces.splice(idx, 1);\n\n\t\t\t\tfor (var j = 0, jl = this.faceVertexUvs.length; j < jl; j++) {\n\t\t\t\t\tthis.faceVertexUvs[j].splice(idx, 1);\n\t\t\t\t}\n\t\t\t} // Use unique set of vertices\n\n\n\t\t\tvar diff = this.vertices.length - unique.length;\n\t\t\tthis.vertices = unique;\n\t\t\treturn diff;\n\t\t},\n\t\tsetFromPoints: function setFromPoints(points) {\n\t\t\tthis.vertices = [];\n\n\t\t\tfor (var i = 0, l = points.length; i < l; i++) {\n\t\t\t\tvar point = points[i];\n\t\t\t\tthis.vertices.push(new Vector3(point.x, point.y, point.z || 0));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tsortFacesByMaterialIndex: function sortFacesByMaterialIndex() {\n\t\t\tvar faces = this.faces;\n\t\t\tvar length = faces.length; // tag faces\n\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tfaces[i]._id = i;\n\t\t\t} // sort faces\n\n\n\t\t\tfunction materialIndexSort(a, b) {\n\t\t\t\treturn a.materialIndex - b.materialIndex;\n\t\t\t}\n\n\t\t\tfaces.sort(materialIndexSort); // sort uvs\n\n\t\t\tvar uvs1 = this.faceVertexUvs[0];\n\t\t\tvar uvs2 = this.faceVertexUvs[1];\n\t\t\tvar newUvs1, newUvs2;\n\t\t\tif (uvs1 && uvs1.length === length) newUvs1 = [];\n\t\t\tif (uvs2 && uvs2.length === length) newUvs2 = [];\n\n\t\t\tfor (var _i11 = 0; _i11 < length; _i11++) {\n\t\t\t\tvar id = faces[_i11]._id;\n\t\t\t\tif (newUvs1) newUvs1.push(uvs1[id]);\n\t\t\t\tif (newUvs2) newUvs2.push(uvs2[id]);\n\t\t\t}\n\n\t\t\tif (newUvs1) this.faceVertexUvs[0] = newUvs1;\n\t\t\tif (newUvs2) this.faceVertexUvs[1] = newUvs2;\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Geometry',\n\t\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t\t}\n\t\t\t}; // standard Geometry serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif (this.name !== '') data.name = this.name;\n\n\t\t\tif (this.parameters !== undefined) {\n\t\t\t\tvar parameters = this.parameters;\n\n\t\t\t\tfor (var key in parameters) {\n\t\t\t\t\tif (parameters[key] !== undefined) data[key] = parameters[key];\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\tvar vertices = [];\n\n\t\t\tfor (var i = 0; i < this.vertices.length; i++) {\n\t\t\t\tvar vertex = this.vertices[i];\n\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z);\n\t\t\t}\n\n\t\t\tvar faces = [];\n\t\t\tvar normals = [];\n\t\t\tvar normalsHash = {};\n\t\t\tvar colors = [];\n\t\t\tvar colorsHash = {};\n\t\t\tvar uvs = [];\n\t\t\tvar uvsHash = {};\n\n\t\t\tfor (var _i12 = 0; _i12 < this.faces.length; _i12++) {\n\t\t\t\tvar face = this.faces[_i12];\n\t\t\t\tvar hasMaterial = true;\n\t\t\t\tvar hasFaceUv = false; // deprecated\n\n\t\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[0][_i12] !== undefined;\n\t\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\t\t\t\tvar faceType = 0;\n\t\t\t\tfaceType = setBit(faceType, 0, 0); // isQuad\n\n\t\t\t\tfaceType = setBit(faceType, 1, hasMaterial);\n\t\t\t\tfaceType = setBit(faceType, 2, hasFaceUv);\n\t\t\t\tfaceType = setBit(faceType, 3, hasFaceVertexUv);\n\t\t\t\tfaceType = setBit(faceType, 4, hasFaceNormal);\n\t\t\t\tfaceType = setBit(faceType, 5, hasFaceVertexNormal);\n\t\t\t\tfaceType = setBit(faceType, 6, hasFaceColor);\n\t\t\t\tfaceType = setBit(faceType, 7, hasFaceVertexColor);\n\t\t\t\tfaces.push(faceType);\n\t\t\t\tfaces.push(face.a, face.b, face.c);\n\t\t\t\tfaces.push(face.materialIndex);\n\n\t\t\t\tif (hasFaceVertexUv) {\n\t\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[0][_i12];\n\t\t\t\t\tfaces.push(getUvIndex(faceVertexUvs[0]), getUvIndex(faceVertexUvs[1]), getUvIndex(faceVertexUvs[2]));\n\t\t\t\t}\n\n\t\t\t\tif (hasFaceNormal) {\n\t\t\t\t\tfaces.push(getNormalIndex(face.normal));\n\t\t\t\t}\n\n\t\t\t\tif (hasFaceVertexNormal) {\n\t\t\t\t\tvar vertexNormals = face.vertexNormals;\n\t\t\t\t\tfaces.push(getNormalIndex(vertexNormals[0]), getNormalIndex(vertexNormals[1]), getNormalIndex(vertexNormals[2]));\n\t\t\t\t}\n\n\t\t\t\tif (hasFaceColor) {\n\t\t\t\t\tfaces.push(getColorIndex(face.color));\n\t\t\t\t}\n\n\t\t\t\tif (hasFaceVertexColor) {\n\t\t\t\t\tvar vertexColors = face.vertexColors;\n\t\t\t\t\tfaces.push(getColorIndex(vertexColors[0]), getColorIndex(vertexColors[1]), getColorIndex(vertexColors[2]));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction setBit(value, position, enabled) {\n\t\t\t\treturn enabled ? value | 1 << position : value & ~(1 << position);\n\t\t\t}\n\n\t\t\tfunction getNormalIndex(normal) {\n\t\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\t\tif (normalsHash[hash] !== undefined) {\n\t\t\t\t\treturn normalsHash[hash];\n\t\t\t\t}\n\n\t\t\t\tnormalsHash[hash] = normals.length / 3;\n\t\t\t\tnormals.push(normal.x, normal.y, normal.z);\n\t\t\t\treturn normalsHash[hash];\n\t\t\t}\n\n\t\t\tfunction getColorIndex(color) {\n\t\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\t\tif (colorsHash[hash] !== undefined) {\n\t\t\t\t\treturn colorsHash[hash];\n\t\t\t\t}\n\n\t\t\t\tcolorsHash[hash] = colors.length;\n\t\t\t\tcolors.push(color.getHex());\n\t\t\t\treturn colorsHash[hash];\n\t\t\t}\n\n\t\t\tfunction getUvIndex(uv) {\n\t\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\t\tif (uvsHash[hash] !== undefined) {\n\t\t\t\t\treturn uvsHash[hash];\n\t\t\t\t}\n\n\t\t\t\tuvsHash[hash] = uvs.length / 2;\n\t\t\t\tuvs.push(uv.x, uv.y);\n\t\t\t\treturn uvsHash[hash];\n\t\t\t}\n\n\t\t\tdata.data = {};\n\t\t\tdata.data.vertices = vertices;\n\t\t\tdata.data.normals = normals;\n\t\t\tif (colors.length > 0) data.data.colors = colors;\n\t\t\tif (uvs.length > 0) data.data.uvs = [uvs]; // temporal backward compatibility\n\n\t\t\tdata.data.faces = faces;\n\t\t\treturn data;\n\t\t},\n\t\tclone: function clone() {\n\t\t\t/*\n\t\t\t // Handle primitives\n\t\t\t\t const parameters = this.parameters;\n\t\t\t\t if ( parameters !== undefined ) {\n\t\t\t\t const values = [];\n\t\t\t\t for ( const key in parameters ) {\n\t\t\t\t values.push( parameters[ key ] );\n\t\t\t\t }\n\t\t\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t\t this.constructor.apply( geometry, values );\n\t\t\t return geometry;\n\t\t\t\t }\n\t\t\t\t return new this.constructor().copy( this );\n\t\t\t */\n\t\t\treturn new Geometry().copy(this);\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\t// reset\n\t\t\tthis.vertices = [];\n\t\t\tthis.colors = [];\n\t\t\tthis.faces = [];\n\t\t\tthis.faceVertexUvs = [[]];\n\t\t\tthis.morphTargets = [];\n\t\t\tthis.morphNormals = [];\n\t\t\tthis.skinWeights = [];\n\t\t\tthis.skinIndices = [];\n\t\t\tthis.lineDistances = [];\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null; // name\n\n\t\t\tthis.name = source.name; // vertices\n\n\t\t\tvar vertices = source.vertices;\n\n\t\t\tfor (var i = 0, il = vertices.length; i < il; i++) {\n\t\t\t\tthis.vertices.push(vertices[i].clone());\n\t\t\t} // colors\n\n\n\t\t\tvar colors = source.colors;\n\n\t\t\tfor (var _i13 = 0, _il7 = colors.length; _i13 < _il7; _i13++) {\n\t\t\t\tthis.colors.push(colors[_i13].clone());\n\t\t\t} // faces\n\n\n\t\t\tvar faces = source.faces;\n\n\t\t\tfor (var _i14 = 0, _il8 = faces.length; _i14 < _il8; _i14++) {\n\t\t\t\tthis.faces.push(faces[_i14].clone());\n\t\t\t} // face vertex uvs\n\n\n\t\t\tfor (var _i15 = 0, _il9 = source.faceVertexUvs.length; _i15 < _il9; _i15++) {\n\t\t\t\tvar faceVertexUvs = source.faceVertexUvs[_i15];\n\n\t\t\t\tif (this.faceVertexUvs[_i15] === undefined) {\n\t\t\t\t\tthis.faceVertexUvs[_i15] = [];\n\t\t\t\t}\n\n\t\t\t\tfor (var j = 0, jl = faceVertexUvs.length; j < jl; j++) {\n\t\t\t\t\tvar uvs = faceVertexUvs[j],\n\t\t\t\t\t\t\tuvsCopy = [];\n\n\t\t\t\t\tfor (var k = 0, kl = uvs.length; k < kl; k++) {\n\t\t\t\t\t\tvar uv = uvs[k];\n\t\t\t\t\t\tuvsCopy.push(uv.clone());\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.faceVertexUvs[_i15].push(uvsCopy);\n\t\t\t\t}\n\t\t\t} // morph targets\n\n\n\t\t\tvar morphTargets = source.morphTargets;\n\n\t\t\tfor (var _i16 = 0, _il10 = morphTargets.length; _i16 < _il10; _i16++) {\n\t\t\t\tvar morphTarget = {};\n\t\t\t\tmorphTarget.name = morphTargets[_i16].name; // vertices\n\n\t\t\t\tif (morphTargets[_i16].vertices !== undefined) {\n\t\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\t\tfor (var _j3 = 0, _jl3 = morphTargets[_i16].vertices.length; _j3 < _jl3; _j3++) {\n\t\t\t\t\t\tmorphTarget.vertices.push(morphTargets[_i16].vertices[_j3].clone());\n\t\t\t\t\t}\n\t\t\t\t} // normals\n\n\n\t\t\t\tif (morphTargets[_i16].normals !== undefined) {\n\t\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\t\tfor (var _j4 = 0, _jl4 = morphTargets[_i16].normals.length; _j4 < _jl4; _j4++) {\n\t\t\t\t\t\tmorphTarget.normals.push(morphTargets[_i16].normals[_j4].clone());\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.push(morphTarget);\n\t\t\t} // morph normals\n\n\n\t\t\tvar morphNormals = source.morphNormals;\n\n\t\t\tfor (var _i17 = 0, _il11 = morphNormals.length; _i17 < _il11; _i17++) {\n\t\t\t\tvar morphNormal = {}; // vertex normals\n\n\t\t\t\tif (morphNormals[_i17].vertexNormals !== undefined) {\n\t\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\t\tfor (var _j5 = 0, _jl5 = morphNormals[_i17].vertexNormals.length; _j5 < _jl5; _j5++) {\n\t\t\t\t\t\tvar srcVertexNormal = morphNormals[_i17].vertexNormals[_j5];\n\t\t\t\t\t\tvar destVertexNormal = {};\n\t\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\t\t\t\t\t\tmorphNormal.vertexNormals.push(destVertexNormal);\n\t\t\t\t\t}\n\t\t\t\t} // face normals\n\n\n\t\t\t\tif (morphNormals[_i17].faceNormals !== undefined) {\n\t\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\t\tfor (var _j6 = 0, _jl6 = morphNormals[_i17].faceNormals.length; _j6 < _jl6; _j6++) {\n\t\t\t\t\t\tmorphNormal.faceNormals.push(morphNormals[_i17].faceNormals[_j6].clone());\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.morphNormals.push(morphNormal);\n\t\t\t} // skin weights\n\n\n\t\t\tvar skinWeights = source.skinWeights;\n\n\t\t\tfor (var _i18 = 0, _il12 = skinWeights.length; _i18 < _il12; _i18++) {\n\t\t\t\tthis.skinWeights.push(skinWeights[_i18].clone());\n\t\t\t} // skin indices\n\n\n\t\t\tvar skinIndices = source.skinIndices;\n\n\t\t\tfor (var _i19 = 0, _il13 = skinIndices.length; _i19 < _il13; _i19++) {\n\t\t\t\tthis.skinIndices.push(skinIndices[_i19].clone());\n\t\t\t} // line distances\n\n\n\t\t\tvar lineDistances = source.lineDistances;\n\n\t\t\tfor (var _i20 = 0, _il14 = lineDistances.length; _i20 < _il14; _i20++) {\n\t\t\t\tthis.lineDistances.push(lineDistances[_i20]);\n\t\t\t} // bounding box\n\n\n\t\t\tvar boundingBox = source.boundingBox;\n\n\t\t\tif (boundingBox !== null) {\n\t\t\t\tthis.boundingBox = boundingBox.clone();\n\t\t\t} // bounding sphere\n\n\n\t\t\tvar boundingSphere = source.boundingSphere;\n\n\t\t\tif (boundingSphere !== null) {\n\t\t\t\tthis.boundingSphere = boundingSphere.clone();\n\t\t\t} // update flags\n\n\n\t\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\t\t\treturn this;\n\t\t},\n\t\tdispose: function dispose() {\n\t\t\tthis.dispatchEvent({\n\t\t\t\ttype: 'dispose'\n\t\t\t});\n\t\t}\n\t});\n\n\tvar BoxGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(BoxGeometry, _Geometry);\n\n\t\tfunction BoxGeometry(width, height, depth, widthSegments, heightSegments, depthSegments) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'BoxGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\tdepth: depth,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\tdepthSegments: depthSegments\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new BoxBufferGeometry(width, height, depth, widthSegments, heightSegments, depthSegments));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn BoxGeometry;\n\t}(Geometry);\n\n\tvar CircleBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(CircleBufferGeometry, _BufferGeometry);\n\n\t\tfunction CircleBufferGeometry(radius, segments, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (segments === void 0) {\n\t\t\t\tsegments = 8;\n\t\t\t}\n\n\t\t\tif (thetaStart === void 0) {\n\t\t\t\tthetaStart = 0;\n\t\t\t}\n\n\t\t\tif (thetaLength === void 0) {\n\t\t\t\tthetaLength = Math.PI * 2;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'CircleBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tsegments: segments,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\t\t\tsegments = Math.max(3, segments); // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = []; // helper variables\n\n\t\t\tvar vertex = new Vector3();\n\t\t\tvar uv = new Vector2(); // center point\n\n\t\t\tvertices.push(0, 0, 0);\n\t\t\tnormals.push(0, 0, 1);\n\t\t\tuvs.push(0.5, 0.5);\n\n\t\t\tfor (var s = 0, i = 3; s <= segments; s++, i += 3) {\n\t\t\t\tvar segment = thetaStart + s / segments * thetaLength; // vertex\n\n\t\t\t\tvertex.x = radius * Math.cos(segment);\n\t\t\t\tvertex.y = radius * Math.sin(segment);\n\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z); // normal\n\n\t\t\t\tnormals.push(0, 0, 1); // uvs\n\n\t\t\t\tuv.x = (vertices[i] / radius + 1) / 2;\n\t\t\t\tuv.y = (vertices[i + 1] / radius + 1) / 2;\n\t\t\t\tuvs.push(uv.x, uv.y);\n\t\t\t} // indices\n\n\n\t\t\tfor (var _i = 1; _i <= segments; _i++) {\n\t\t\t\tindices.push(_i, _i + 1, 0);\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn CircleBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar CircleGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(CircleGeometry, _Geometry);\n\n\t\tfunction CircleGeometry(radius, segments, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'CircleGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tsegments: segments,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new CircleBufferGeometry(radius, segments, thetaStart, thetaLength));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn CircleGeometry;\n\t}(Geometry);\n\n\tvar CylinderBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(CylinderBufferGeometry, _BufferGeometry);\n\n\t\tfunction CylinderBufferGeometry(radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\tif (radiusTop === void 0) {\n\t\t\t\tradiusTop = 1;\n\t\t\t}\n\n\t\t\tif (radiusBottom === void 0) {\n\t\t\t\tradiusBottom = 1;\n\t\t\t}\n\n\t\t\tif (height === void 0) {\n\t\t\t\theight = 1;\n\t\t\t}\n\n\t\t\tif (radialSegments === void 0) {\n\t\t\t\tradialSegments = 8;\n\t\t\t}\n\n\t\t\tif (heightSegments === void 0) {\n\t\t\t\theightSegments = 1;\n\t\t\t}\n\n\t\t\tif (openEnded === void 0) {\n\t\t\t\topenEnded = false;\n\t\t\t}\n\n\t\t\tif (thetaStart === void 0) {\n\t\t\t\tthetaStart = 0;\n\t\t\t}\n\n\t\t\tif (thetaLength === void 0) {\n\t\t\t\tthetaLength = Math.PI * 2;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'CylinderBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradiusTop: radiusTop,\n\t\t\t\tradiusBottom: radiusBottom,\n\t\t\t\theight: height,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\topenEnded: openEnded,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\tvar scope = _assertThisInitialized(_this);\n\n\t\t\tradialSegments = Math.floor(radialSegments);\n\t\t\theightSegments = Math.floor(heightSegments); // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = []; // helper variables\n\n\t\t\tvar index = 0;\n\t\t\tvar indexArray = [];\n\t\t\tvar halfHeight = height / 2;\n\t\t\tvar groupStart = 0; // generate geometry\n\n\t\t\tgenerateTorso();\n\n\t\t\tif (openEnded === false) {\n\t\t\t\tif (radiusTop > 0) generateCap(true);\n\t\t\t\tif (radiusBottom > 0) generateCap(false);\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\n\t\t\tfunction generateTorso() {\n\t\t\t\tvar normal = new Vector3();\n\t\t\t\tvar vertex = new Vector3();\n\t\t\t\tvar groupCount = 0; // this will be used to calculate the normal\n\n\t\t\t\tvar slope = (radiusBottom - radiusTop) / height; // generate vertices, normals and uvs\n\n\t\t\t\tfor (var y = 0; y <= heightSegments; y++) {\n\t\t\t\t\tvar indexRow = [];\n\t\t\t\t\tvar v = y / heightSegments; // calculate the radius of the current row\n\n\t\t\t\t\tvar radius = v * (radiusBottom - radiusTop) + radiusTop;\n\n\t\t\t\t\tfor (var x = 0; x <= radialSegments; x++) {\n\t\t\t\t\t\tvar u = x / radialSegments;\n\t\t\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\t\t\t\t\t\tvar sinTheta = Math.sin(theta);\n\t\t\t\t\t\tvar cosTheta = Math.cos(theta); // vertex\n\n\t\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\t\tvertex.y = -v * height + halfHeight;\n\t\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z); // normal\n\n\t\t\t\t\t\tnormal.set(sinTheta, slope, cosTheta).normalize();\n\t\t\t\t\t\tnormals.push(normal.x, normal.y, normal.z); // uv\n\n\t\t\t\t\t\tuvs.push(u, 1 - v); // save index of vertex in respective row\n\n\t\t\t\t\t\tindexRow.push(index++);\n\t\t\t\t\t} // now save vertices of the row in our index array\n\n\n\t\t\t\t\tindexArray.push(indexRow);\n\t\t\t\t} // generate indices\n\n\n\t\t\t\tfor (var _x = 0; _x < radialSegments; _x++) {\n\t\t\t\t\tfor (var _y = 0; _y < heightSegments; _y++) {\n\t\t\t\t\t\t// we use the index array to access the correct indices\n\t\t\t\t\t\tvar a = indexArray[_y][_x];\n\t\t\t\t\t\tvar b = indexArray[_y + 1][_x];\n\t\t\t\t\t\tvar c = indexArray[_y + 1][_x + 1];\n\t\t\t\t\t\tvar d = indexArray[_y][_x + 1]; // faces\n\n\t\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t\t\tindices.push(b, c, d); // update group counter\n\n\t\t\t\t\t\tgroupCount += 6;\n\t\t\t\t\t}\n\t\t\t\t} // add a group to the geometry. this will ensure multi material support\n\n\n\t\t\t\tscope.addGroup(groupStart, groupCount, 0); // calculate new start value for groups\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t}\n\n\t\t\tfunction generateCap(top) {\n\t\t\t\t// save the index of the first center vertex\n\t\t\t\tvar centerIndexStart = index;\n\t\t\t\tvar uv = new Vector2();\n\t\t\t\tvar vertex = new Vector3();\n\t\t\t\tvar groupCount = 0;\n\t\t\t\tvar radius = top === true ? radiusTop : radiusBottom;\n\t\t\t\tvar sign = top === true ? 1 : -1; // first we generate the center vertex data of the cap.\n\t\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\t\tfor (var x = 1; x <= radialSegments; x++) {\n\t\t\t\t\t// vertex\n\t\t\t\t\tvertices.push(0, halfHeight * sign, 0); // normal\n\n\t\t\t\t\tnormals.push(0, sign, 0); // uv\n\n\t\t\t\t\tuvs.push(0.5, 0.5); // increase index\n\n\t\t\t\t\tindex++;\n\t\t\t\t} // save the index of the last center vertex\n\n\n\t\t\t\tvar centerIndexEnd = index; // now we generate the surrounding vertices, normals and uvs\n\n\t\t\t\tfor (var _x2 = 0; _x2 <= radialSegments; _x2++) {\n\t\t\t\t\tvar u = _x2 / radialSegments;\n\t\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\t\t\t\t\tvar cosTheta = Math.cos(theta);\n\t\t\t\t\tvar sinTheta = Math.sin(theta); // vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z); // normal\n\n\t\t\t\t\tnormals.push(0, sign, 0); // uv\n\n\t\t\t\t\tuv.x = cosTheta * 0.5 + 0.5;\n\t\t\t\t\tuv.y = sinTheta * 0.5 * sign + 0.5;\n\t\t\t\t\tuvs.push(uv.x, uv.y); // increase index\n\n\t\t\t\t\tindex++;\n\t\t\t\t} // generate indices\n\n\n\t\t\t\tfor (var _x3 = 0; _x3 < radialSegments; _x3++) {\n\t\t\t\t\tvar c = centerIndexStart + _x3;\n\t\t\t\t\tvar i = centerIndexEnd + _x3;\n\n\t\t\t\t\tif (top === true) {\n\t\t\t\t\t\t// face top\n\t\t\t\t\t\tindices.push(i, i + 1, c);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// face bottom\n\t\t\t\t\t\tindices.push(i + 1, i, c);\n\t\t\t\t\t}\n\n\t\t\t\t\tgroupCount += 3;\n\t\t\t\t} // add a group to the geometry. this will ensure multi material support\n\n\n\t\t\t\tscope.addGroup(groupStart, groupCount, top === true ? 1 : 2); // calculate new start value for groups\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn CylinderBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar CylinderGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(CylinderGeometry, _Geometry);\n\n\t\tfunction CylinderGeometry(radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'CylinderGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradiusTop: radiusTop,\n\t\t\t\tradiusBottom: radiusBottom,\n\t\t\t\theight: height,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\topenEnded: openEnded,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new CylinderBufferGeometry(radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn CylinderGeometry;\n\t}(Geometry);\n\n\tvar ConeGeometry = /*#__PURE__*/function (_CylinderGeometry) {\n\t\t_inheritsLoose(ConeGeometry, _CylinderGeometry);\n\n\t\tfunction ConeGeometry(radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\t_this = _CylinderGeometry.call(this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength) || this;\n\t\t\t_this.type = 'ConeGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\theight: height,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\topenEnded: openEnded,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn ConeGeometry;\n\t}(CylinderGeometry);\n\n\tvar ConeBufferGeometry = /*#__PURE__*/function (_CylinderBufferGeomet) {\n\t\t_inheritsLoose(ConeBufferGeometry, _CylinderBufferGeomet);\n\n\t\tfunction ConeBufferGeometry(radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (height === void 0) {\n\t\t\t\theight = 1;\n\t\t\t}\n\n\t\t\tif (radialSegments === void 0) {\n\t\t\t\tradialSegments = 8;\n\t\t\t}\n\n\t\t\tif (heightSegments === void 0) {\n\t\t\t\theightSegments = 1;\n\t\t\t}\n\n\t\t\tif (openEnded === void 0) {\n\t\t\t\topenEnded = false;\n\t\t\t}\n\n\t\t\tif (thetaStart === void 0) {\n\t\t\t\tthetaStart = 0;\n\t\t\t}\n\n\t\t\tif (thetaLength === void 0) {\n\t\t\t\tthetaLength = Math.PI * 2;\n\t\t\t}\n\n\t\t\t_this = _CylinderBufferGeomet.call(this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength) || this;\n\t\t\t_this.type = 'ConeBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\theight: height,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\topenEnded: openEnded,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn ConeBufferGeometry;\n\t}(CylinderBufferGeometry);\n\n\tvar PolyhedronBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(PolyhedronBufferGeometry, _BufferGeometry);\n\n\t\tfunction PolyhedronBufferGeometry(vertices, indices, radius, detail) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (detail === void 0) {\n\t\t\t\tdetail = 0;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'PolyhedronBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tvertices: vertices,\n\t\t\t\tindices: indices,\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t}; // default buffer data\n\n\t\t\tvar vertexBuffer = [];\n\t\t\tvar uvBuffer = []; // the subdivision creates the vertex buffer data\n\n\t\t\tsubdivide(detail); // all vertices should lie on a conceptual sphere with a given radius\n\n\t\t\tapplyRadius(radius); // finally, create the uv data\n\n\t\t\tgenerateUVs(); // build non-indexed geometry\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertexBuffer, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(vertexBuffer.slice(), 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvBuffer, 2));\n\n\t\t\tif (detail === 0) {\n\t\t\t\t_this.computeVertexNormals(); // flat normals\n\n\t\t\t} else {\n\t\t\t\t_this.normalizeNormals(); // smooth normals\n\n\t\t\t} // helper functions\n\n\n\t\t\tfunction subdivide(detail) {\n\t\t\t\tvar a = new Vector3();\n\t\t\t\tvar b = new Vector3();\n\t\t\t\tvar c = new Vector3(); // iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\t\tfor (var i = 0; i < indices.length; i += 3) {\n\t\t\t\t\t// get the vertices of the face\n\t\t\t\t\tgetVertexByIndex(indices[i + 0], a);\n\t\t\t\t\tgetVertexByIndex(indices[i + 1], b);\n\t\t\t\t\tgetVertexByIndex(indices[i + 2], c); // perform subdivision\n\n\t\t\t\t\tsubdivideFace(a, b, c, detail);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction subdivideFace(a, b, c, detail) {\n\t\t\t\tvar cols = detail + 1; // we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\t\tvar v = []; // construct all of the vertices for this subdivision\n\n\t\t\t\tfor (var i = 0; i <= cols; i++) {\n\t\t\t\t\tv[i] = [];\n\t\t\t\t\tvar aj = a.clone().lerp(c, i / cols);\n\t\t\t\t\tvar bj = b.clone().lerp(c, i / cols);\n\t\t\t\t\tvar rows = cols - i;\n\n\t\t\t\t\tfor (var j = 0; j <= rows; j++) {\n\t\t\t\t\t\tif (j === 0 && i === cols) {\n\t\t\t\t\t\t\tv[i][j] = aj;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tv[i][j] = aj.clone().lerp(bj, j / rows);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} // construct all of the faces\n\n\n\t\t\t\tfor (var _i = 0; _i < cols; _i++) {\n\t\t\t\t\tfor (var _j = 0; _j < 2 * (cols - _i) - 1; _j++) {\n\t\t\t\t\t\tvar k = Math.floor(_j / 2);\n\n\t\t\t\t\t\tif (_j % 2 === 0) {\n\t\t\t\t\t\t\tpushVertex(v[_i][k + 1]);\n\t\t\t\t\t\t\tpushVertex(v[_i + 1][k]);\n\t\t\t\t\t\t\tpushVertex(v[_i][k]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpushVertex(v[_i][k + 1]);\n\t\t\t\t\t\t\tpushVertex(v[_i + 1][k + 1]);\n\t\t\t\t\t\t\tpushVertex(v[_i + 1][k]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction applyRadius(radius) {\n\t\t\t\tvar vertex = new Vector3(); // iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\t\tfor (var i = 0; i < vertexBuffer.length; i += 3) {\n\t\t\t\t\tvertex.x = vertexBuffer[i + 0];\n\t\t\t\t\tvertex.y = vertexBuffer[i + 1];\n\t\t\t\t\tvertex.z = vertexBuffer[i + 2];\n\t\t\t\t\tvertex.normalize().multiplyScalar(radius);\n\t\t\t\t\tvertexBuffer[i + 0] = vertex.x;\n\t\t\t\t\tvertexBuffer[i + 1] = vertex.y;\n\t\t\t\t\tvertexBuffer[i + 2] = vertex.z;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction generateUVs() {\n\t\t\t\tvar vertex = new Vector3();\n\n\t\t\t\tfor (var i = 0; i < vertexBuffer.length; i += 3) {\n\t\t\t\t\tvertex.x = vertexBuffer[i + 0];\n\t\t\t\t\tvertex.y = vertexBuffer[i + 1];\n\t\t\t\t\tvertex.z = vertexBuffer[i + 2];\n\t\t\t\t\tvar u = azimuth(vertex) / 2 / Math.PI + 0.5;\n\t\t\t\t\tvar v = inclination(vertex) / Math.PI + 0.5;\n\t\t\t\t\tuvBuffer.push(u, 1 - v);\n\t\t\t\t}\n\n\t\t\t\tcorrectUVs();\n\t\t\t\tcorrectSeam();\n\t\t\t}\n\n\t\t\tfunction correctSeam() {\n\t\t\t\t// handle case when face straddles the seam, see #3269\n\t\t\t\tfor (var i = 0; i < uvBuffer.length; i += 6) {\n\t\t\t\t\t// uv data of a single face\n\t\t\t\t\tvar x0 = uvBuffer[i + 0];\n\t\t\t\t\tvar x1 = uvBuffer[i + 2];\n\t\t\t\t\tvar x2 = uvBuffer[i + 4];\n\t\t\t\t\tvar max = Math.max(x0, x1, x2);\n\t\t\t\t\tvar min = Math.min(x0, x1, x2); // 0.9 is somewhat arbitrary\n\n\t\t\t\t\tif (max > 0.9 && min < 0.1) {\n\t\t\t\t\t\tif (x0 < 0.2) uvBuffer[i + 0] += 1;\n\t\t\t\t\t\tif (x1 < 0.2) uvBuffer[i + 2] += 1;\n\t\t\t\t\t\tif (x2 < 0.2) uvBuffer[i + 4] += 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction pushVertex(vertex) {\n\t\t\t\tvertexBuffer.push(vertex.x, vertex.y, vertex.z);\n\t\t\t}\n\n\t\t\tfunction getVertexByIndex(index, vertex) {\n\t\t\t\tvar stride = index * 3;\n\t\t\t\tvertex.x = vertices[stride + 0];\n\t\t\t\tvertex.y = vertices[stride + 1];\n\t\t\t\tvertex.z = vertices[stride + 2];\n\t\t\t}\n\n\t\t\tfunction correctUVs() {\n\t\t\t\tvar a = new Vector3();\n\t\t\t\tvar b = new Vector3();\n\t\t\t\tvar c = new Vector3();\n\t\t\t\tvar centroid = new Vector3();\n\t\t\t\tvar uvA = new Vector2();\n\t\t\t\tvar uvB = new Vector2();\n\t\t\t\tvar uvC = new Vector2();\n\n\t\t\t\tfor (var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6) {\n\t\t\t\t\ta.set(vertexBuffer[i + 0], vertexBuffer[i + 1], vertexBuffer[i + 2]);\n\t\t\t\t\tb.set(vertexBuffer[i + 3], vertexBuffer[i + 4], vertexBuffer[i + 5]);\n\t\t\t\t\tc.set(vertexBuffer[i + 6], vertexBuffer[i + 7], vertexBuffer[i + 8]);\n\t\t\t\t\tuvA.set(uvBuffer[j + 0], uvBuffer[j + 1]);\n\t\t\t\t\tuvB.set(uvBuffer[j + 2], uvBuffer[j + 3]);\n\t\t\t\t\tuvC.set(uvBuffer[j + 4], uvBuffer[j + 5]);\n\t\t\t\t\tcentroid.copy(a).add(b).add(c).divideScalar(3);\n\t\t\t\t\tvar azi = azimuth(centroid);\n\t\t\t\t\tcorrectUV(uvA, j + 0, a, azi);\n\t\t\t\t\tcorrectUV(uvB, j + 2, b, azi);\n\t\t\t\t\tcorrectUV(uvC, j + 4, c, azi);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction correctUV(uv, stride, vector, azimuth) {\n\t\t\t\tif (azimuth < 0 && uv.x === 1) {\n\t\t\t\t\tuvBuffer[stride] = uv.x - 1;\n\t\t\t\t}\n\n\t\t\t\tif (vector.x === 0 && vector.z === 0) {\n\t\t\t\t\tuvBuffer[stride] = azimuth / 2 / Math.PI + 0.5;\n\t\t\t\t}\n\t\t\t} // Angle around the Y axis, counter-clockwise when looking from above.\n\n\n\t\t\tfunction azimuth(vector) {\n\t\t\t\treturn Math.atan2(vector.z, -vector.x);\n\t\t\t} // Angle above the XZ plane.\n\n\n\t\t\tfunction inclination(vector) {\n\t\t\t\treturn Math.atan2(-vector.y, Math.sqrt(vector.x * vector.x + vector.z * vector.z));\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn PolyhedronBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar DodecahedronBufferGeometry = /*#__PURE__*/function (_PolyhedronBufferGeom) {\n\t\t_inheritsLoose(DodecahedronBufferGeometry, _PolyhedronBufferGeom);\n\n\t\tfunction DodecahedronBufferGeometry(radius, detail) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (detail === void 0) {\n\t\t\t\tdetail = 0;\n\t\t\t}\n\n\t\t\tvar t = (1 + Math.sqrt(5)) / 2;\n\t\t\tvar r = 1 / t;\n\t\t\tvar vertices = [// (±1, ±1, ±1)\n\t\t\t-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, ±1/φ, ±φ)\n\t\t\t0, -r, -t, 0, -r, t, 0, r, -t, 0, r, t, // (±1/φ, ±φ, 0)\n\t\t\t-r, -t, 0, -r, t, 0, r, -t, 0, r, t, 0, // (±φ, 0, ±1/φ)\n\t\t\t-t, 0, -r, t, 0, -r, -t, 0, r, t, 0, r];\n\t\t\tvar indices = [3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9];\n\t\t\t_this = _PolyhedronBufferGeom.call(this, vertices, indices, radius, detail) || this;\n\t\t\t_this.type = 'DodecahedronBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn DodecahedronBufferGeometry;\n\t}(PolyhedronBufferGeometry);\n\n\tvar DodecahedronGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(DodecahedronGeometry, _Geometry);\n\n\t\tfunction DodecahedronGeometry(radius, detail) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'DodecahedronGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new DodecahedronBufferGeometry(radius, detail));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn DodecahedronGeometry;\n\t}(Geometry);\n\n\tvar _v0$2 = new Vector3();\n\n\tvar _v1$5 = new Vector3();\n\n\tvar _normal$1 = new Vector3();\n\n\tvar _triangle = new Triangle();\n\n\tvar EdgesGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(EdgesGeometry, _BufferGeometry);\n\n\t\tfunction EdgesGeometry(geometry, thresholdAngle) {\n\t\t\tvar _this;\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'EdgesGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tthresholdAngle: thresholdAngle\n\t\t\t};\n\t\t\tthresholdAngle = thresholdAngle !== undefined ? thresholdAngle : 1;\n\n\t\t\tif (geometry.isGeometry) {\n\t\t\t\tgeometry = new BufferGeometry().fromGeometry(geometry);\n\t\t\t}\n\n\t\t\tvar precisionPoints = 4;\n\t\t\tvar precision = Math.pow(10, precisionPoints);\n\t\t\tvar thresholdDot = Math.cos(MathUtils.DEG2RAD * thresholdAngle);\n\t\t\tvar indexAttr = geometry.getIndex();\n\t\t\tvar positionAttr = geometry.getAttribute('position');\n\t\t\tvar indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\t\t\tvar indexArr = [0, 0, 0];\n\t\t\tvar vertKeys = ['a', 'b', 'c'];\n\t\t\tvar hashes = new Array(3);\n\t\t\tvar edgeData = {};\n\t\t\tvar vertices = [];\n\n\t\t\tfor (var i = 0; i < indexCount; i += 3) {\n\t\t\t\tif (indexAttr) {\n\t\t\t\t\tindexArr[0] = indexAttr.getX(i);\n\t\t\t\t\tindexArr[1] = indexAttr.getX(i + 1);\n\t\t\t\t\tindexArr[2] = indexAttr.getX(i + 2);\n\t\t\t\t} else {\n\t\t\t\t\tindexArr[0] = i;\n\t\t\t\t\tindexArr[1] = i + 1;\n\t\t\t\t\tindexArr[2] = i + 2;\n\t\t\t\t}\n\n\t\t\t\tvar a = _triangle.a,\n\t\t\t\t\t\tb = _triangle.b,\n\t\t\t\t\t\tc = _triangle.c;\n\t\t\t\ta.fromBufferAttribute(positionAttr, indexArr[0]);\n\t\t\t\tb.fromBufferAttribute(positionAttr, indexArr[1]);\n\t\t\t\tc.fromBufferAttribute(positionAttr, indexArr[2]);\n\n\t\t\t\t_triangle.getNormal(_normal$1); // create hashes for the edge from the vertices\n\n\n\t\t\t\thashes[0] = Math.round(a.x * precision) + \",\" + Math.round(a.y * precision) + \",\" + Math.round(a.z * precision);\n\t\t\t\thashes[1] = Math.round(b.x * precision) + \",\" + Math.round(b.y * precision) + \",\" + Math.round(b.z * precision);\n\t\t\t\thashes[2] = Math.round(c.x * precision) + \",\" + Math.round(c.y * precision) + \",\" + Math.round(c.z * precision); // skip degenerate triangles\n\n\t\t\t\tif (hashes[0] === hashes[1] || hashes[1] === hashes[2] || hashes[2] === hashes[0]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t} // iterate over every edge\n\n\n\t\t\t\tfor (var j = 0; j < 3; j++) {\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tvar jNext = (j + 1) % 3;\n\t\t\t\t\tvar vecHash0 = hashes[j];\n\t\t\t\t\tvar vecHash1 = hashes[jNext];\n\t\t\t\t\tvar v0 = _triangle[vertKeys[j]];\n\t\t\t\t\tvar v1 = _triangle[vertKeys[jNext]];\n\t\t\t\t\tvar hash = vecHash0 + \"_\" + vecHash1;\n\t\t\t\t\tvar reverseHash = vecHash1 + \"_\" + vecHash0;\n\n\t\t\t\t\tif (reverseHash in edgeData && edgeData[reverseHash]) {\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif (_normal$1.dot(edgeData[reverseHash].normal) <= thresholdDot) {\n\t\t\t\t\t\t\tvertices.push(v0.x, v0.y, v0.z);\n\t\t\t\t\t\t\tvertices.push(v1.x, v1.y, v1.z);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[reverseHash] = null;\n\t\t\t\t\t} else if (!(hash in edgeData)) {\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[hash] = {\n\t\t\t\t\t\t\tindex0: indexArr[j],\n\t\t\t\t\t\t\tindex1: indexArr[jNext],\n\t\t\t\t\t\t\tnormal: _normal$1.clone()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // iterate over all remaining, unmatched edges and add them to the vertex array\n\n\n\t\t\tfor (var key in edgeData) {\n\t\t\t\tif (edgeData[key]) {\n\t\t\t\t\tvar _edgeData$key = edgeData[key],\n\t\t\t\t\t\t\tindex0 = _edgeData$key.index0,\n\t\t\t\t\t\t\tindex1 = _edgeData$key.index1;\n\n\t\t\t\t\t_v0$2.fromBufferAttribute(positionAttr, index0);\n\n\t\t\t\t\t_v1$5.fromBufferAttribute(positionAttr, index1);\n\n\t\t\t\t\tvertices.push(_v0$2.x, _v0$2.y, _v0$2.z);\n\t\t\t\t\tvertices.push(_v1$5.x, _v1$5.y, _v1$5.z);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn EdgesGeometry;\n\t}(BufferGeometry);\n\n\t/**\n\t * Port from https://github.com/mapbox/earcut (v2.2.2)\n\t */\n\tvar Earcut = {\n\t\ttriangulate: function triangulate(data, holeIndices, dim) {\n\t\t\tdim = dim || 2;\n\t\t\tvar hasHoles = holeIndices && holeIndices.length;\n\t\t\tvar outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\t\t\tvar outerNode = linkedList(data, 0, outerLen, dim, true);\n\t\t\tvar triangles = [];\n\t\t\tif (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\t\t\tvar minX, minY, maxX, maxY, x, y, invSize;\n\t\t\tif (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\n\t\t\tif (data.length > 80 * dim) {\n\t\t\t\tminX = maxX = data[0];\n\t\t\t\tminY = maxY = data[1];\n\n\t\t\t\tfor (var i = dim; i < outerLen; i += dim) {\n\t\t\t\t\tx = data[i];\n\t\t\t\t\ty = data[i + 1];\n\t\t\t\t\tif (x < minX) minX = x;\n\t\t\t\t\tif (y < minY) minY = y;\n\t\t\t\t\tif (x > maxX) maxX = x;\n\t\t\t\t\tif (y > maxY) maxY = y;\n\t\t\t\t} // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\n\n\t\t\t\tinvSize = Math.max(maxX - minX, maxY - minY);\n\t\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\t\t\t}\n\n\t\t\tearcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\t\t\treturn triangles;\n\t\t}\n\t}; // create a circular doubly linked list from polygon points in the specified winding order\n\n\tfunction linkedList(data, start, end, dim, clockwise) {\n\t\tvar i, last;\n\n\t\tif (clockwise === signedArea(data, start, end, dim) > 0) {\n\t\t\tfor (i = start; i < end; i += dim) {\n\t\t\t\tlast = insertNode(i, data[i], data[i + 1], last);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = end - dim; i >= start; i -= dim) {\n\t\t\t\tlast = insertNode(i, data[i], data[i + 1], last);\n\t\t\t}\n\t\t}\n\n\t\tif (last && equals(last, last.next)) {\n\t\t\tremoveNode(last);\n\t\t\tlast = last.next;\n\t\t}\n\n\t\treturn last;\n\t} // eliminate colinear or duplicate points\n\n\n\tfunction filterPoints(start, end) {\n\t\tif (!start) return start;\n\t\tif (!end) end = start;\n\t\tvar p = start,\n\t\t\t\tagain;\n\n\t\tdo {\n\t\t\tagain = false;\n\n\t\t\tif (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n\t\t\t\tremoveNode(p);\n\t\t\t\tp = end = p.prev;\n\t\t\t\tif (p === p.next) break;\n\t\t\t\tagain = true;\n\t\t\t} else {\n\t\t\t\tp = p.next;\n\t\t\t}\n\t\t} while (again || p !== end);\n\n\t\treturn end;\n\t} // main ear slicing loop which triangulates a polygon (given as a linked list)\n\n\n\tfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n\t\tif (!ear) return; // interlink polygon nodes in z-order\n\n\t\tif (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\t\tvar stop = ear,\n\t\t\t\tprev,\n\t\t\t\tnext; // iterate through ears, slicing them one by one\n\n\t\twhile (ear.prev !== ear.next) {\n\t\t\tprev = ear.prev;\n\t\t\tnext = ear.next;\n\n\t\t\tif (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n\t\t\t\t// cut off the triangle\n\t\t\t\ttriangles.push(prev.i / dim);\n\t\t\t\ttriangles.push(ear.i / dim);\n\t\t\t\ttriangles.push(next.i / dim);\n\t\t\t\tremoveNode(ear); // skipping the next vertex leads to less sliver triangles\n\n\t\t\t\tear = next.next;\n\t\t\t\tstop = next.next;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tear = next; // if we looped through the whole remaining polygon and can't find any more ears\n\n\t\t\tif (ear === stop) {\n\t\t\t\t// try filtering points and slicing again\n\t\t\t\tif (!pass) {\n\t\t\t\t\tearcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1); // if this didn't work, try curing all small self-intersections locally\n\t\t\t\t} else if (pass === 1) {\n\t\t\t\t\tear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n\t\t\t\t\tearcutLinked(ear, triangles, dim, minX, minY, invSize, 2); // as a last resort, try splitting the remaining polygon into two\n\t\t\t\t} else if (pass === 2) {\n\t\t\t\t\tsplitEarcut(ear, triangles, dim, minX, minY, invSize);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} // check whether a polygon node forms a valid ear with adjacent nodes\n\n\n\tfunction isEar(ear) {\n\t\tvar a = ear.prev,\n\t\t\t\tb = ear,\n\t\t\t\tc = ear.next;\n\t\tif (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\t\t// now make sure we don't have other points inside the potential ear\n\n\t\tvar p = ear.next.next;\n\n\t\twhile (p !== ear.prev) {\n\t\t\tif (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n\t\t\tp = p.next;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tfunction isEarHashed(ear, minX, minY, invSize) {\n\t\tvar a = ear.prev,\n\t\t\t\tb = ear,\n\t\t\t\tc = ear.next;\n\t\tif (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\t\t// triangle bbox; min & max are calculated like this for speed\n\n\t\tvar minTX = a.x < b.x ? a.x < c.x ? a.x : c.x : b.x < c.x ? b.x : c.x,\n\t\t\t\tminTY = a.y < b.y ? a.y < c.y ? a.y : c.y : b.y < c.y ? b.y : c.y,\n\t\t\t\tmaxTX = a.x > b.x ? a.x > c.x ? a.x : c.x : b.x > c.x ? b.x : c.x,\n\t\t\t\tmaxTY = a.y > b.y ? a.y > c.y ? a.y : c.y : b.y > c.y ? b.y : c.y; // z-order range for the current triangle bbox;\n\n\t\tvar minZ = zOrder(minTX, minTY, minX, minY, invSize),\n\t\t\t\tmaxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\t\tvar p = ear.prevZ,\n\t\t\t\tn = ear.nextZ; // look for points inside the triangle in both directions\n\n\t\twhile (p && p.z >= minZ && n && n.z <= maxZ) {\n\t\t\tif (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n\t\t\tp = p.prevZ;\n\t\t\tif (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n\t\t\tn = n.nextZ;\n\t\t} // look for remaining points in decreasing z-order\n\n\n\t\twhile (p && p.z >= minZ) {\n\t\t\tif (p !== ear.prev && p !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n\t\t\tp = p.prevZ;\n\t\t} // look for remaining points in increasing z-order\n\n\n\t\twhile (n && n.z <= maxZ) {\n\t\t\tif (n !== ear.prev && n !== ear.next && pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n\t\t\tn = n.nextZ;\n\t\t}\n\n\t\treturn true;\n\t} // go through all polygon nodes and cure small local self-intersections\n\n\n\tfunction cureLocalIntersections(start, triangles, dim) {\n\t\tvar p = start;\n\n\t\tdo {\n\t\t\tvar a = p.prev,\n\t\t\t\t\tb = p.next.next;\n\n\t\t\tif (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\t\t\t\ttriangles.push(a.i / dim);\n\t\t\t\ttriangles.push(p.i / dim);\n\t\t\t\ttriangles.push(b.i / dim); // remove two nodes involved\n\n\t\t\t\tremoveNode(p);\n\t\t\t\tremoveNode(p.next);\n\t\t\t\tp = start = b;\n\t\t\t}\n\n\t\t\tp = p.next;\n\t\t} while (p !== start);\n\n\t\treturn filterPoints(p);\n\t} // try splitting polygon into two and triangulate them independently\n\n\n\tfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n\t\t// look for a valid diagonal that divides the polygon into two\n\t\tvar a = start;\n\n\t\tdo {\n\t\t\tvar b = a.next.next;\n\n\t\t\twhile (b !== a.prev) {\n\t\t\t\tif (a.i !== b.i && isValidDiagonal(a, b)) {\n\t\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\t\tvar c = splitPolygon(a, b); // filter colinear points around the cuts\n\n\t\t\t\t\ta = filterPoints(a, a.next);\n\t\t\t\t\tc = filterPoints(c, c.next); // run earcut on each half\n\n\t\t\t\t\tearcutLinked(a, triangles, dim, minX, minY, invSize);\n\t\t\t\t\tearcutLinked(c, triangles, dim, minX, minY, invSize);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tb = b.next;\n\t\t\t}\n\n\t\t\ta = a.next;\n\t\t} while (a !== start);\n\t} // link every hole into the outer loop, producing a single-ring polygon without holes\n\n\n\tfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n\t\tvar queue = [];\n\t\tvar i, len, start, end, list;\n\n\t\tfor (i = 0, len = holeIndices.length; i < len; i++) {\n\t\t\tstart = holeIndices[i] * dim;\n\t\t\tend = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n\t\t\tlist = linkedList(data, start, end, dim, false);\n\t\t\tif (list === list.next) list.steiner = true;\n\t\t\tqueue.push(getLeftmost(list));\n\t\t}\n\n\t\tqueue.sort(compareX); // process holes from left to right\n\n\t\tfor (i = 0; i < queue.length; i++) {\n\t\t\teliminateHole(queue[i], outerNode);\n\t\t\touterNode = filterPoints(outerNode, outerNode.next);\n\t\t}\n\n\t\treturn outerNode;\n\t}\n\n\tfunction compareX(a, b) {\n\t\treturn a.x - b.x;\n\t} // find a bridge between vertices that connects hole with an outer ring and and link it\n\n\n\tfunction eliminateHole(hole, outerNode) {\n\t\touterNode = findHoleBridge(hole, outerNode);\n\n\t\tif (outerNode) {\n\t\t\tvar b = splitPolygon(outerNode, hole); // filter collinear points around the cuts\n\n\t\t\tfilterPoints(outerNode, outerNode.next);\n\t\t\tfilterPoints(b, b.next);\n\t\t}\n\t} // David Eberly's algorithm for finding a bridge between hole and outer polygon\n\n\n\tfunction findHoleBridge(hole, outerNode) {\n\t\tvar p = outerNode;\n\t\tvar hx = hole.x;\n\t\tvar hy = hole.y;\n\t\tvar qx = -Infinity,\n\t\t\t\tm; // find a segment intersected by a ray from the hole's leftmost point to the left;\n\t\t// segment's endpoint with lesser x will be potential connection point\n\n\t\tdo {\n\t\t\tif (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n\t\t\t\tvar x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n\n\t\t\t\tif (x <= hx && x > qx) {\n\t\t\t\t\tqx = x;\n\n\t\t\t\t\tif (x === hx) {\n\t\t\t\t\t\tif (hy === p.y) return p;\n\t\t\t\t\t\tif (hy === p.next.y) return p.next;\n\t\t\t\t\t}\n\n\t\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp = p.next;\n\t\t} while (p !== outerNode);\n\n\t\tif (!m) return null;\n\t\tif (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\t\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t\t// if there are no points found, we have a valid connection;\n\t\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\t\tvar stop = m,\n\t\t\t\tmx = m.x,\n\t\t\t\tmy = m.y;\n\t\tvar tanMin = Infinity,\n\t\t\t\ttan;\n\t\tp = m;\n\n\t\tdo {\n\t\t\tif (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\t\t\t\ttan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n\t\t\t\tif (locallyInside(p, hole) && (tan < tanMin || tan === tanMin && (p.x > m.x || p.x === m.x && sectorContainsSector(m, p)))) {\n\t\t\t\t\tm = p;\n\t\t\t\t\ttanMin = tan;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp = p.next;\n\t\t} while (p !== stop);\n\n\t\treturn m;\n\t} // whether sector in vertex m contains sector in vertex p in the same coordinates\n\n\n\tfunction sectorContainsSector(m, p) {\n\t\treturn area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n\t} // interlink polygon nodes in z-order\n\n\n\tfunction indexCurve(start, minX, minY, invSize) {\n\t\tvar p = start;\n\n\t\tdo {\n\t\t\tif (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n\t\t\tp.prevZ = p.prev;\n\t\t\tp.nextZ = p.next;\n\t\t\tp = p.next;\n\t\t} while (p !== start);\n\n\t\tp.prevZ.nextZ = null;\n\t\tp.prevZ = null;\n\t\tsortLinked(p);\n\t} // Simon Tatham's linked list merge sort algorithm\n\t// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\n\n\n\tfunction sortLinked(list) {\n\t\tvar i,\n\t\t\t\tp,\n\t\t\t\tq,\n\t\t\t\te,\n\t\t\t\ttail,\n\t\t\t\tnumMerges,\n\t\t\t\tpSize,\n\t\t\t\tqSize,\n\t\t\t\tinSize = 1;\n\n\t\tdo {\n\t\t\tp = list;\n\t\t\tlist = null;\n\t\t\ttail = null;\n\t\t\tnumMerges = 0;\n\n\t\t\twhile (p) {\n\t\t\t\tnumMerges++;\n\t\t\t\tq = p;\n\t\t\t\tpSize = 0;\n\n\t\t\t\tfor (i = 0; i < inSize; i++) {\n\t\t\t\t\tpSize++;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tif (!q) break;\n\t\t\t\t}\n\n\t\t\t\tqSize = inSize;\n\n\t\t\t\twhile (pSize > 0 || qSize > 0 && q) {\n\t\t\t\t\tif (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n\t\t\t\t\t\te = p;\n\t\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\t\tpSize--;\n\t\t\t\t\t} else {\n\t\t\t\t\t\te = q;\n\t\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\t\tqSize--;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tail) tail.nextZ = e;else list = e;\n\t\t\t\t\te.prevZ = tail;\n\t\t\t\t\ttail = e;\n\t\t\t\t}\n\n\t\t\t\tp = q;\n\t\t\t}\n\n\t\t\ttail.nextZ = null;\n\t\t\tinSize *= 2;\n\t\t} while (numMerges > 1);\n\n\t\treturn list;\n\t} // z-order of a point given coords and inverse of the longer side of data bbox\n\n\n\tfunction zOrder(x, y, minX, minY, invSize) {\n\t\t// coords are transformed into non-negative 15-bit integer range\n\t\tx = 32767 * (x - minX) * invSize;\n\t\ty = 32767 * (y - minY) * invSize;\n\t\tx = (x | x << 8) & 0x00FF00FF;\n\t\tx = (x | x << 4) & 0x0F0F0F0F;\n\t\tx = (x | x << 2) & 0x33333333;\n\t\tx = (x | x << 1) & 0x55555555;\n\t\ty = (y | y << 8) & 0x00FF00FF;\n\t\ty = (y | y << 4) & 0x0F0F0F0F;\n\t\ty = (y | y << 2) & 0x33333333;\n\t\ty = (y | y << 1) & 0x55555555;\n\t\treturn x | y << 1;\n\t} // find the leftmost node of a polygon ring\n\n\n\tfunction getLeftmost(start) {\n\t\tvar p = start,\n\t\t\t\tleftmost = start;\n\n\t\tdo {\n\t\t\tif (p.x < leftmost.x || p.x === leftmost.x && p.y < leftmost.y) leftmost = p;\n\t\t\tp = p.next;\n\t\t} while (p !== start);\n\n\t\treturn leftmost;\n\t} // check if a point lies within a convex triangle\n\n\n\tfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n\t\treturn (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n\t} // check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n\n\n\tfunction isValidDiagonal(a, b) {\n\t\treturn a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && ( // dones't intersect other edges\n\t\tlocallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && ( // locally visible\n\t\tarea(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n\t\tequals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n\t} // signed area of a triangle\n\n\n\tfunction area(p, q, r) {\n\t\treturn (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n\t} // check if two points are equal\n\n\n\tfunction equals(p1, p2) {\n\t\treturn p1.x === p2.x && p1.y === p2.y;\n\t} // check if two segments intersect\n\n\n\tfunction intersects(p1, q1, p2, q2) {\n\t\tvar o1 = sign(area(p1, q1, p2));\n\t\tvar o2 = sign(area(p1, q1, q2));\n\t\tvar o3 = sign(area(p2, q2, p1));\n\t\tvar o4 = sign(area(p2, q2, q1));\n\t\tif (o1 !== o2 && o3 !== o4) return true; // general case\n\n\t\tif (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\n\t\tif (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\n\t\tif (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\n\t\tif (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\t\treturn false;\n\t} // for collinear points p, q, r, check if point q lies on segment pr\n\n\n\tfunction onSegment(p, q, r) {\n\t\treturn q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n\t}\n\n\tfunction sign(num) {\n\t\treturn num > 0 ? 1 : num < 0 ? -1 : 0;\n\t} // check if a polygon diagonal intersects any polygon segments\n\n\n\tfunction intersectsPolygon(a, b) {\n\t\tvar p = a;\n\n\t\tdo {\n\t\t\tif (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects(p, p.next, a, b)) return true;\n\t\t\tp = p.next;\n\t\t} while (p !== a);\n\n\t\treturn false;\n\t} // check if a polygon diagonal is locally inside the polygon\n\n\n\tfunction locallyInside(a, b) {\n\t\treturn area(a.prev, a, a.next) < 0 ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n\t} // check if the middle point of a polygon diagonal is inside the polygon\n\n\n\tfunction middleInside(a, b) {\n\t\tvar p = a,\n\t\t\t\tinside = false;\n\t\tvar px = (a.x + b.x) / 2,\n\t\t\t\tpy = (a.y + b.y) / 2;\n\n\t\tdo {\n\t\t\tif (p.y > py !== p.next.y > py && p.next.y !== p.y && px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x) inside = !inside;\n\t\t\tp = p.next;\n\t\t} while (p !== a);\n\n\t\treturn inside;\n\t} // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n\t// if one belongs to the outer ring and another to a hole, it merges it into a single ring\n\n\n\tfunction splitPolygon(a, b) {\n\t\tvar a2 = new Node(a.i, a.x, a.y),\n\t\t\t\tb2 = new Node(b.i, b.x, b.y),\n\t\t\t\tan = a.next,\n\t\t\t\tbp = b.prev;\n\t\ta.next = b;\n\t\tb.prev = a;\n\t\ta2.next = an;\n\t\tan.prev = a2;\n\t\tb2.next = a2;\n\t\ta2.prev = b2;\n\t\tbp.next = b2;\n\t\tb2.prev = bp;\n\t\treturn b2;\n\t} // create a node and optionally link it with previous one (in a circular doubly linked list)\n\n\n\tfunction insertNode(i, x, y, last) {\n\t\tvar p = new Node(i, x, y);\n\n\t\tif (!last) {\n\t\t\tp.prev = p;\n\t\t\tp.next = p;\n\t\t} else {\n\t\t\tp.next = last.next;\n\t\t\tp.prev = last;\n\t\t\tlast.next.prev = p;\n\t\t\tlast.next = p;\n\t\t}\n\n\t\treturn p;\n\t}\n\n\tfunction removeNode(p) {\n\t\tp.next.prev = p.prev;\n\t\tp.prev.next = p.next;\n\t\tif (p.prevZ) p.prevZ.nextZ = p.nextZ;\n\t\tif (p.nextZ) p.nextZ.prevZ = p.prevZ;\n\t}\n\n\tfunction Node(i, x, y) {\n\t\t// vertex index in coordinates array\n\t\tthis.i = i; // vertex coordinates\n\n\t\tthis.x = x;\n\t\tthis.y = y; // previous and next vertex nodes in a polygon ring\n\n\t\tthis.prev = null;\n\t\tthis.next = null; // z-order curve value\n\n\t\tthis.z = null; // previous and next nodes in z-order\n\n\t\tthis.prevZ = null;\n\t\tthis.nextZ = null; // indicates whether this is a steiner point\n\n\t\tthis.steiner = false;\n\t}\n\n\tfunction signedArea(data, start, end, dim) {\n\t\tvar sum = 0;\n\n\t\tfor (var i = start, j = end - dim; i < end; i += dim) {\n\t\t\tsum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n\t\t\tj = i;\n\t\t}\n\n\t\treturn sum;\n\t}\n\n\tvar ShapeUtils = {\n\t\t// calculate area of the contour polygon\n\t\tarea: function area(contour) {\n\t\t\tvar n = contour.length;\n\t\t\tvar a = 0.0;\n\n\t\t\tfor (var p = n - 1, q = 0; q < n; p = q++) {\n\t\t\t\ta += contour[p].x * contour[q].y - contour[q].x * contour[p].y;\n\t\t\t}\n\n\t\t\treturn a * 0.5;\n\t\t},\n\t\tisClockWise: function isClockWise(pts) {\n\t\t\treturn ShapeUtils.area(pts) < 0;\n\t\t},\n\t\ttriangulateShape: function triangulateShape(contour, holes) {\n\t\t\tvar vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\n\t\t\tvar holeIndices = []; // array of hole indices\n\n\t\t\tvar faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\t\tremoveDupEndPts(contour);\n\t\t\taddContour(vertices, contour); //\n\n\t\t\tvar holeIndex = contour.length;\n\t\t\tholes.forEach(removeDupEndPts);\n\n\t\t\tfor (var i = 0; i < holes.length; i++) {\n\t\t\t\tholeIndices.push(holeIndex);\n\t\t\t\tholeIndex += holes[i].length;\n\t\t\t\taddContour(vertices, holes[i]);\n\t\t\t} //\n\n\n\t\t\tvar triangles = Earcut.triangulate(vertices, holeIndices); //\n\n\t\t\tfor (var _i = 0; _i < triangles.length; _i += 3) {\n\t\t\t\tfaces.push(triangles.slice(_i, _i + 3));\n\t\t\t}\n\n\t\t\treturn faces;\n\t\t}\n\t};\n\n\tfunction removeDupEndPts(points) {\n\t\tvar l = points.length;\n\n\t\tif (l > 2 && points[l - 1].equals(points[0])) {\n\t\t\tpoints.pop();\n\t\t}\n\t}\n\n\tfunction addContour(vertices, contour) {\n\t\tfor (var i = 0; i < contour.length; i++) {\n\t\t\tvertices.push(contour[i].x);\n\t\t\tvertices.push(contour[i].y);\n\t\t}\n\t}\n\n\tvar ExtrudeBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(ExtrudeBufferGeometry, _BufferGeometry);\n\n\t\tfunction ExtrudeBufferGeometry(shapes, options) {\n\t\t\tvar _this;\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'ExtrudeBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tshapes: shapes,\n\t\t\t\toptions: options\n\t\t\t};\n\t\t\tshapes = Array.isArray(shapes) ? shapes : [shapes];\n\n\t\t\tvar scope = _assertThisInitialized(_this);\n\n\t\t\tvar verticesArray = [];\n\t\t\tvar uvArray = [];\n\n\t\t\tfor (var i = 0, l = shapes.length; i < l; i++) {\n\t\t\t\tvar shape = shapes[i];\n\t\t\t\taddShape(shape);\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(verticesArray, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvArray, 2));\n\n\t\t\t_this.computeVertexNormals(); // functions\n\n\n\t\t\tfunction addShape(shape) {\n\t\t\t\tvar placeholder = []; // options\n\n\t\t\t\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\t\tvar steps = options.steps !== undefined ? options.steps : 1;\n\t\t\t\tvar depth = options.depth !== undefined ? options.depth : 100;\n\t\t\t\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\t\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\t\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\t\tvar bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\t\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\t\t\t\tvar extrudePath = options.extrudePath;\n\t\t\t\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; // deprecated options\n\n\t\t\t\tif (options.amount !== undefined) {\n\t\t\t\t\tconsole.warn('THREE.ExtrudeBufferGeometry: amount has been renamed to depth.');\n\t\t\t\t\tdepth = options.amount;\n\t\t\t\t} //\n\n\n\t\t\t\tvar extrudePts,\n\t\t\t\t\t\textrudeByPath = false;\n\t\t\t\tvar splineTube, binormal, normal, position2;\n\n\t\t\t\tif (extrudePath) {\n\t\t\t\t\textrudePts = extrudePath.getSpacedPoints(steps);\n\t\t\t\t\textrudeByPath = true;\n\t\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\t\t\t\t\t// SETUP TNB variables\n\t\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\t\tsplineTube = extrudePath.computeFrenetFrames(steps, false); // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\t\tbinormal = new Vector3();\n\t\t\t\t\tnormal = new Vector3();\n\t\t\t\t\tposition2 = new Vector3();\n\t\t\t\t} // Safeguards if bevels are not enabled\n\n\n\t\t\t\tif (!bevelEnabled) {\n\t\t\t\t\tbevelSegments = 0;\n\t\t\t\t\tbevelThickness = 0;\n\t\t\t\t\tbevelSize = 0;\n\t\t\t\t\tbevelOffset = 0;\n\t\t\t\t} // Variables initialization\n\n\n\t\t\t\tvar shapePoints = shape.extractPoints(curveSegments);\n\t\t\t\tvar vertices = shapePoints.shape;\n\t\t\t\tvar holes = shapePoints.holes;\n\t\t\t\tvar reverse = !ShapeUtils.isClockWise(vertices);\n\n\t\t\t\tif (reverse) {\n\t\t\t\t\tvertices = vertices.reverse(); // Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\t\tfor (var h = 0, hl = holes.length; h < hl; h++) {\n\t\t\t\t\t\tvar ahole = holes[h];\n\n\t\t\t\t\t\tif (ShapeUtils.isClockWise(ahole)) {\n\t\t\t\t\t\t\tholes[h] = ahole.reverse();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar faces = ShapeUtils.triangulateShape(vertices, holes);\n\t\t\t\t/* Vertices */\n\n\t\t\t\tvar contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\t\tfor (var _h = 0, _hl = holes.length; _h < _hl; _h++) {\n\t\t\t\t\tvar _ahole = holes[_h];\n\t\t\t\t\tvertices = vertices.concat(_ahole);\n\t\t\t\t}\n\n\t\t\t\tfunction scalePt2(pt, vec, size) {\n\t\t\t\t\tif (!vec) console.error('THREE.ExtrudeGeometry: vec does not exist');\n\t\t\t\t\treturn vec.clone().multiplyScalar(size).add(pt);\n\t\t\t\t}\n\n\t\t\t\tvar vlen = vertices.length,\n\t\t\t\t\t\tflen = faces.length; // Find directions for point movement\n\n\t\t\t\tfunction getBevelVec(inPt, inPrev, inNext) {\n\t\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t\t//\t shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t\t//\n\t\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t\t//\tadjacent edges of inPt at a distance of 1 unit on the left side.\n\t\t\t\t\tvar v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\t\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\t\tvar v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\t\tvar v_next_x = inNext.x - inPt.x,\n\t\t\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\t\t\t\t\tvar v_prev_lensq = v_prev_x * v_prev_x + v_prev_y * v_prev_y; // check for collinear edges\n\n\t\t\t\t\tvar collinear0 = v_prev_x * v_next_y - v_prev_y * v_next_x;\n\n\t\t\t\t\tif (Math.abs(collinear0) > Number.EPSILON) {\n\t\t\t\t\t\t// not collinear\n\t\t\t\t\t\t// length of vectors for normalizing\n\t\t\t\t\t\tvar v_prev_len = Math.sqrt(v_prev_lensq);\n\t\t\t\t\t\tvar v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y); // shift adjacent points by unit vectors to the left\n\n\t\t\t\t\t\tvar ptPrevShift_x = inPrev.x - v_prev_y / v_prev_len;\n\t\t\t\t\t\tvar ptPrevShift_y = inPrev.y + v_prev_x / v_prev_len;\n\t\t\t\t\t\tvar ptNextShift_x = inNext.x - v_next_y / v_next_len;\n\t\t\t\t\t\tvar ptNextShift_y = inNext.y + v_next_x / v_next_len; // scaling factor for v_prev to intersection point\n\n\t\t\t\t\t\tvar sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y - (ptNextShift_y - ptPrevShift_y) * v_next_x) / (v_prev_x * v_next_y - v_prev_y * v_next_x); // vector from inPt to intersection point\n\n\t\t\t\t\t\tv_trans_x = ptPrevShift_x + v_prev_x * sf - inPt.x;\n\t\t\t\t\t\tv_trans_y = ptPrevShift_y + v_prev_y * sf - inPt.y; // Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t\t//\tbut prevent crazy spikes\n\n\t\t\t\t\t\tvar v_trans_lensq = v_trans_x * v_trans_x + v_trans_y * v_trans_y;\n\n\t\t\t\t\t\tif (v_trans_lensq <= 2) {\n\t\t\t\t\t\t\treturn new Vector2(v_trans_x, v_trans_y);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tshrink_by = Math.sqrt(v_trans_lensq / 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// handle special case of collinear edges\n\t\t\t\t\t\tvar direction_eq = false; // assumes: opposite\n\n\t\t\t\t\t\tif (v_prev_x > Number.EPSILON) {\n\t\t\t\t\t\t\tif (v_next_x > Number.EPSILON) {\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v_prev_x < -Number.EPSILON) {\n\t\t\t\t\t\t\t\tif (v_next_x < -Number.EPSILON) {\n\t\t\t\t\t\t\t\t\tdirection_eq = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (Math.sign(v_prev_y) === Math.sign(v_next_y)) {\n\t\t\t\t\t\t\t\t\tdirection_eq = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (direction_eq) {\n\t\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\t\tv_trans_x = -v_prev_y;\n\t\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\t\tshrink_by = Math.sqrt(v_prev_lensq);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\t\tshrink_by = Math.sqrt(v_prev_lensq / 2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by);\n\t\t\t\t}\n\n\t\t\t\tvar contourMovements = [];\n\n\t\t\t\tfor (var _i = 0, il = contour.length, j = il - 1, k = _i + 1; _i < il; _i++, j++, k++) {\n\t\t\t\t\tif (j === il) j = 0;\n\t\t\t\t\tif (k === il) k = 0; //\t(j)---(i)---(k)\n\t\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\t\tcontourMovements[_i] = getBevelVec(contour[_i], contour[j], contour[k]);\n\t\t\t\t}\n\n\t\t\t\tvar holesMovements = [];\n\t\t\t\tvar oneHoleMovements,\n\t\t\t\t\t\tverticesMovements = contourMovements.concat();\n\n\t\t\t\tfor (var _h2 = 0, _hl2 = holes.length; _h2 < _hl2; _h2++) {\n\t\t\t\t\tvar _ahole2 = holes[_h2];\n\t\t\t\t\toneHoleMovements = [];\n\n\t\t\t\t\tfor (var _i2 = 0, _il = _ahole2.length, _j = _il - 1, _k = _i2 + 1; _i2 < _il; _i2++, _j++, _k++) {\n\t\t\t\t\t\tif (_j === _il) _j = 0;\n\t\t\t\t\t\tif (_k === _il) _k = 0; //\t(j)---(i)---(k)\n\n\t\t\t\t\t\toneHoleMovements[_i2] = getBevelVec(_ahole2[_i2], _ahole2[_j], _ahole2[_k]);\n\t\t\t\t\t}\n\n\t\t\t\t\tholesMovements.push(oneHoleMovements);\n\t\t\t\t\tverticesMovements = verticesMovements.concat(oneHoleMovements);\n\t\t\t\t} // Loop bevelSegments, 1 for the front, 1 for the back\n\n\n\t\t\t\tfor (var b = 0; b < bevelSegments; b++) {\n\t\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\t\t\t\t\tvar t = b / bevelSegments;\n\t\t\t\t\tvar z = bevelThickness * Math.cos(t * Math.PI / 2);\n\n\t\t\t\t\tvar _bs = bevelSize * Math.sin(t * Math.PI / 2) + bevelOffset; // contract shape\n\n\n\t\t\t\t\tfor (var _i3 = 0, _il2 = contour.length; _i3 < _il2; _i3++) {\n\t\t\t\t\t\tvar vert = scalePt2(contour[_i3], contourMovements[_i3], _bs);\n\t\t\t\t\t\tv(vert.x, vert.y, -z);\n\t\t\t\t\t} // expand holes\n\n\n\t\t\t\t\tfor (var _h3 = 0, _hl3 = holes.length; _h3 < _hl3; _h3++) {\n\t\t\t\t\t\tvar _ahole3 = holes[_h3];\n\t\t\t\t\t\toneHoleMovements = holesMovements[_h3];\n\n\t\t\t\t\t\tfor (var _i4 = 0, _il3 = _ahole3.length; _i4 < _il3; _i4++) {\n\t\t\t\t\t\t\tvar _vert = scalePt2(_ahole3[_i4], oneHoleMovements[_i4], _bs);\n\n\t\t\t\t\t\t\tv(_vert.x, _vert.y, -z);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar bs = bevelSize + bevelOffset; // Back facing vertices\n\n\t\t\t\tfor (var _i5 = 0; _i5 < vlen; _i5++) {\n\t\t\t\t\tvar _vert2 = bevelEnabled ? scalePt2(vertices[_i5], verticesMovements[_i5], bs) : vertices[_i5];\n\n\t\t\t\t\tif (!extrudeByPath) {\n\t\t\t\t\t\tv(_vert2.x, _vert2.y, 0);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\t\t\t\t\t\tnormal.copy(splineTube.normals[0]).multiplyScalar(_vert2.x);\n\t\t\t\t\t\tbinormal.copy(splineTube.binormals[0]).multiplyScalar(_vert2.y);\n\t\t\t\t\t\tposition2.copy(extrudePts[0]).add(normal).add(binormal);\n\t\t\t\t\t\tv(position2.x, position2.y, position2.z);\n\t\t\t\t\t}\n\t\t\t\t} // Add stepped vertices...\n\t\t\t\t// Including front facing vertices\n\n\n\t\t\t\tfor (var s = 1; s <= steps; s++) {\n\t\t\t\t\tfor (var _i6 = 0; _i6 < vlen; _i6++) {\n\t\t\t\t\t\tvar _vert3 = bevelEnabled ? scalePt2(vertices[_i6], verticesMovements[_i6], bs) : vertices[_i6];\n\n\t\t\t\t\t\tif (!extrudeByPath) {\n\t\t\t\t\t\t\tv(_vert3.x, _vert3.y, depth / steps * s);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\t\t\t\t\t\t\tnormal.copy(splineTube.normals[s]).multiplyScalar(_vert3.x);\n\t\t\t\t\t\t\tbinormal.copy(splineTube.binormals[s]).multiplyScalar(_vert3.y);\n\t\t\t\t\t\t\tposition2.copy(extrudePts[s]).add(normal).add(binormal);\n\t\t\t\t\t\t\tv(position2.x, position2.y, position2.z);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} // Add bevel segments planes\n\t\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\n\n\t\t\t\tfor (var _b = bevelSegments - 1; _b >= 0; _b--) {\n\t\t\t\t\tvar _t = _b / bevelSegments;\n\n\t\t\t\t\tvar _z = bevelThickness * Math.cos(_t * Math.PI / 2);\n\n\t\t\t\t\tvar _bs2 = bevelSize * Math.sin(_t * Math.PI / 2) + bevelOffset; // contract shape\n\n\n\t\t\t\t\tfor (var _i7 = 0, _il4 = contour.length; _i7 < _il4; _i7++) {\n\t\t\t\t\t\tvar _vert4 = scalePt2(contour[_i7], contourMovements[_i7], _bs2);\n\n\t\t\t\t\t\tv(_vert4.x, _vert4.y, depth + _z);\n\t\t\t\t\t} // expand holes\n\n\n\t\t\t\t\tfor (var _h4 = 0, _hl4 = holes.length; _h4 < _hl4; _h4++) {\n\t\t\t\t\t\tvar _ahole4 = holes[_h4];\n\t\t\t\t\t\toneHoleMovements = holesMovements[_h4];\n\n\t\t\t\t\t\tfor (var _i8 = 0, _il5 = _ahole4.length; _i8 < _il5; _i8++) {\n\t\t\t\t\t\t\tvar _vert5 = scalePt2(_ahole4[_i8], oneHoleMovements[_i8], _bs2);\n\n\t\t\t\t\t\t\tif (!extrudeByPath) {\n\t\t\t\t\t\t\t\tv(_vert5.x, _vert5.y, depth + _z);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tv(_vert5.x, _vert5.y + extrudePts[steps - 1].y, extrudePts[steps - 1].x + _z);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* Faces */\n\t\t\t\t// Top and bottom faces\n\n\n\t\t\t\tbuildLidFaces(); // Sides faces\n\n\t\t\t\tbuildSideFaces(); /////\tInternal functions\n\n\t\t\t\tfunction buildLidFaces() {\n\t\t\t\t\tvar start = verticesArray.length / 3;\n\n\t\t\t\t\tif (bevelEnabled) {\n\t\t\t\t\t\tvar layer = 0; // steps + 1\n\n\t\t\t\t\t\tvar offset = vlen * layer; // Bottom faces\n\n\t\t\t\t\t\tfor (var _i9 = 0; _i9 < flen; _i9++) {\n\t\t\t\t\t\t\tvar face = faces[_i9];\n\t\t\t\t\t\t\tf3(face[2] + offset, face[1] + offset, face[0] + offset);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\t\toffset = vlen * layer; // Top faces\n\n\t\t\t\t\t\tfor (var _i10 = 0; _i10 < flen; _i10++) {\n\t\t\t\t\t\t\tvar _face = faces[_i10];\n\t\t\t\t\t\t\tf3(_face[0] + offset, _face[1] + offset, _face[2] + offset);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Bottom faces\n\t\t\t\t\t\tfor (var _i11 = 0; _i11 < flen; _i11++) {\n\t\t\t\t\t\t\tvar _face2 = faces[_i11];\n\t\t\t\t\t\t\tf3(_face2[2], _face2[1], _face2[0]);\n\t\t\t\t\t\t} // Top faces\n\n\n\t\t\t\t\t\tfor (var _i12 = 0; _i12 < flen; _i12++) {\n\t\t\t\t\t\t\tvar _face3 = faces[_i12];\n\t\t\t\t\t\t\tf3(_face3[0] + vlen * steps, _face3[1] + vlen * steps, _face3[2] + vlen * steps);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.addGroup(start, verticesArray.length / 3 - start, 0);\n\t\t\t\t} // Create faces for the z-sides of the shape\n\n\n\t\t\t\tfunction buildSideFaces() {\n\t\t\t\t\tvar start = verticesArray.length / 3;\n\t\t\t\t\tvar layeroffset = 0;\n\t\t\t\t\tsidewalls(contour, layeroffset);\n\t\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\t\tfor (var _h5 = 0, _hl5 = holes.length; _h5 < _hl5; _h5++) {\n\t\t\t\t\t\tvar _ahole5 = holes[_h5];\n\t\t\t\t\t\tsidewalls(_ahole5, layeroffset); //, true\n\n\t\t\t\t\t\tlayeroffset += _ahole5.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.addGroup(start, verticesArray.length / 3 - start, 1);\n\t\t\t\t}\n\n\t\t\t\tfunction sidewalls(contour, layeroffset) {\n\t\t\t\t\tvar i = contour.length;\n\n\t\t\t\t\twhile (--i >= 0) {\n\t\t\t\t\t\tvar _j2 = i;\n\n\t\t\t\t\t\tvar _k2 = i - 1;\n\n\t\t\t\t\t\tif (_k2 < 0) _k2 = contour.length - 1; //console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\t\tfor (var _s = 0, sl = steps + bevelSegments * 2; _s < sl; _s++) {\n\t\t\t\t\t\t\tvar slen1 = vlen * _s;\n\t\t\t\t\t\t\tvar slen2 = vlen * (_s + 1);\n\n\t\t\t\t\t\t\tvar a = layeroffset + _j2 + slen1,\n\t\t\t\t\t\t\t\t\t_b2 = layeroffset + _k2 + slen1,\n\t\t\t\t\t\t\t\t\tc = layeroffset + _k2 + slen2,\n\t\t\t\t\t\t\t\t\td = layeroffset + _j2 + slen2;\n\n\t\t\t\t\t\t\tf4(a, _b2, c, d);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction v(x, y, z) {\n\t\t\t\t\tplaceholder.push(x);\n\t\t\t\t\tplaceholder.push(y);\n\t\t\t\t\tplaceholder.push(z);\n\t\t\t\t}\n\n\t\t\t\tfunction f3(a, b, c) {\n\t\t\t\t\taddVertex(a);\n\t\t\t\t\taddVertex(b);\n\t\t\t\t\taddVertex(c);\n\t\t\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\t\t\tvar uvs = uvgen.generateTopUV(scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1);\n\t\t\t\t\taddUV(uvs[0]);\n\t\t\t\t\taddUV(uvs[1]);\n\t\t\t\t\taddUV(uvs[2]);\n\t\t\t\t}\n\n\t\t\t\tfunction f4(a, b, c, d) {\n\t\t\t\t\taddVertex(a);\n\t\t\t\t\taddVertex(b);\n\t\t\t\t\taddVertex(d);\n\t\t\t\t\taddVertex(b);\n\t\t\t\t\taddVertex(c);\n\t\t\t\t\taddVertex(d);\n\t\t\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\t\t\tvar uvs = uvgen.generateSideWallUV(scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1);\n\t\t\t\t\taddUV(uvs[0]);\n\t\t\t\t\taddUV(uvs[1]);\n\t\t\t\t\taddUV(uvs[3]);\n\t\t\t\t\taddUV(uvs[1]);\n\t\t\t\t\taddUV(uvs[2]);\n\t\t\t\t\taddUV(uvs[3]);\n\t\t\t\t}\n\n\t\t\t\tfunction addVertex(index) {\n\t\t\t\t\tverticesArray.push(placeholder[index * 3 + 0]);\n\t\t\t\t\tverticesArray.push(placeholder[index * 3 + 1]);\n\t\t\t\t\tverticesArray.push(placeholder[index * 3 + 2]);\n\t\t\t\t}\n\n\t\t\t\tfunction addUV(vector2) {\n\t\t\t\t\tuvArray.push(vector2.x);\n\t\t\t\t\tuvArray.push(vector2.y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = ExtrudeBufferGeometry.prototype;\n\n\t\t_proto.toJSON = function toJSON() {\n\t\t\tvar data = BufferGeometry.prototype.toJSON.call(this);\n\t\t\tvar shapes = this.parameters.shapes;\n\t\t\tvar options = this.parameters.options;\n\t\t\treturn _toJSON(shapes, options, data);\n\t\t};\n\n\t\treturn ExtrudeBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar WorldUVGenerator = {\n\t\tgenerateTopUV: function generateTopUV(geometry, vertices, indexA, indexB, indexC) {\n\t\t\tvar a_x = vertices[indexA * 3];\n\t\t\tvar a_y = vertices[indexA * 3 + 1];\n\t\t\tvar b_x = vertices[indexB * 3];\n\t\t\tvar b_y = vertices[indexB * 3 + 1];\n\t\t\tvar c_x = vertices[indexC * 3];\n\t\t\tvar c_y = vertices[indexC * 3 + 1];\n\t\t\treturn [new Vector2(a_x, a_y), new Vector2(b_x, b_y), new Vector2(c_x, c_y)];\n\t\t},\n\t\tgenerateSideWallUV: function generateSideWallUV(geometry, vertices, indexA, indexB, indexC, indexD) {\n\t\t\tvar a_x = vertices[indexA * 3];\n\t\t\tvar a_y = vertices[indexA * 3 + 1];\n\t\t\tvar a_z = vertices[indexA * 3 + 2];\n\t\t\tvar b_x = vertices[indexB * 3];\n\t\t\tvar b_y = vertices[indexB * 3 + 1];\n\t\t\tvar b_z = vertices[indexB * 3 + 2];\n\t\t\tvar c_x = vertices[indexC * 3];\n\t\t\tvar c_y = vertices[indexC * 3 + 1];\n\t\t\tvar c_z = vertices[indexC * 3 + 2];\n\t\t\tvar d_x = vertices[indexD * 3];\n\t\t\tvar d_y = vertices[indexD * 3 + 1];\n\t\t\tvar d_z = vertices[indexD * 3 + 2];\n\n\t\t\tif (Math.abs(a_y - b_y) < 0.01) {\n\t\t\t\treturn [new Vector2(a_x, 1 - a_z), new Vector2(b_x, 1 - b_z), new Vector2(c_x, 1 - c_z), new Vector2(d_x, 1 - d_z)];\n\t\t\t} else {\n\t\t\t\treturn [new Vector2(a_y, 1 - a_z), new Vector2(b_y, 1 - b_z), new Vector2(c_y, 1 - c_z), new Vector2(d_y, 1 - d_z)];\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction _toJSON(shapes, options, data) {\n\t\tdata.shapes = [];\n\n\t\tif (Array.isArray(shapes)) {\n\t\t\tfor (var i = 0, l = shapes.length; i < l; i++) {\n\t\t\t\tvar shape = shapes[i];\n\t\t\t\tdata.shapes.push(shape.uuid);\n\t\t\t}\n\t\t} else {\n\t\t\tdata.shapes.push(shapes.uuid);\n\t\t}\n\n\t\tif (options.extrudePath !== undefined) data.options.extrudePath = options.extrudePath.toJSON();\n\t\treturn data;\n\t}\n\n\tvar ExtrudeGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(ExtrudeGeometry, _Geometry);\n\n\t\tfunction ExtrudeGeometry(shapes, options) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'ExtrudeGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tshapes: shapes,\n\t\t\t\toptions: options\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new ExtrudeBufferGeometry(shapes, options));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = ExtrudeGeometry.prototype;\n\n\t\t_proto.toJSON = function toJSON() {\n\t\t\tvar data = _Geometry.prototype.toJSON.call(this);\n\n\t\t\tvar shapes = this.parameters.shapes;\n\t\t\tvar options = this.parameters.options;\n\t\t\treturn _toJSON$1(shapes, options, data);\n\t\t};\n\n\t\treturn ExtrudeGeometry;\n\t}(Geometry);\n\n\tfunction _toJSON$1(shapes, options, data) {\n\t\tdata.shapes = [];\n\n\t\tif (Array.isArray(shapes)) {\n\t\t\tfor (var i = 0, l = shapes.length; i < l; i++) {\n\t\t\t\tvar shape = shapes[i];\n\t\t\t\tdata.shapes.push(shape.uuid);\n\t\t\t}\n\t\t} else {\n\t\t\tdata.shapes.push(shapes.uuid);\n\t\t}\n\n\t\tif (options.extrudePath !== undefined) data.options.extrudePath = options.extrudePath.toJSON();\n\t\treturn data;\n\t}\n\n\tvar IcosahedronBufferGeometry = /*#__PURE__*/function (_PolyhedronBufferGeom) {\n\t\t_inheritsLoose(IcosahedronBufferGeometry, _PolyhedronBufferGeom);\n\n\t\tfunction IcosahedronBufferGeometry(radius, detail) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (detail === void 0) {\n\t\t\t\tdetail = 0;\n\t\t\t}\n\n\t\t\tvar t = (1 + Math.sqrt(5)) / 2;\n\t\t\tvar vertices = [-1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, 0, 0, -1, t, 0, 1, t, 0, -1, -t, 0, 1, -t, t, 0, -1, t, 0, 1, -t, 0, -1, -t, 0, 1];\n\t\t\tvar indices = [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1];\n\t\t\t_this = _PolyhedronBufferGeom.call(this, vertices, indices, radius, detail) || this;\n\t\t\t_this.type = 'IcosahedronBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn IcosahedronBufferGeometry;\n\t}(PolyhedronBufferGeometry);\n\n\tvar IcosahedronGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(IcosahedronGeometry, _Geometry);\n\n\t\tfunction IcosahedronGeometry(radius, detail) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'IcosahedronGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new IcosahedronBufferGeometry(radius, detail));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn IcosahedronGeometry;\n\t}(Geometry);\n\n\tvar LatheBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(LatheBufferGeometry, _BufferGeometry);\n\n\t\tfunction LatheBufferGeometry(points, segments, phiStart, phiLength) {\n\t\t\tvar _this;\n\n\t\t\tif (segments === void 0) {\n\t\t\t\tsegments = 12;\n\t\t\t}\n\n\t\t\tif (phiStart === void 0) {\n\t\t\t\tphiStart = 0;\n\t\t\t}\n\n\t\t\tif (phiLength === void 0) {\n\t\t\t\tphiLength = Math.PI * 2;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'LatheBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tpoints: points,\n\t\t\t\tsegments: segments,\n\t\t\t\tphiStart: phiStart,\n\t\t\t\tphiLength: phiLength\n\t\t\t};\n\t\t\tsegments = Math.floor(segments); // clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\t\tphiLength = MathUtils.clamp(phiLength, 0, Math.PI * 2); // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar uvs = []; // helper variables\n\n\t\t\tvar inverseSegments = 1.0 / segments;\n\t\t\tvar vertex = new Vector3();\n\t\t\tvar uv = new Vector2(); // generate vertices and uvs\n\n\t\t\tfor (var i = 0; i <= segments; i++) {\n\t\t\t\tvar phi = phiStart + i * inverseSegments * phiLength;\n\t\t\t\tvar sin = Math.sin(phi);\n\t\t\t\tvar cos = Math.cos(phi);\n\n\t\t\t\tfor (var j = 0; j <= points.length - 1; j++) {\n\t\t\t\t\t// vertex\n\t\t\t\t\tvertex.x = points[j].x * sin;\n\t\t\t\t\tvertex.y = points[j].y;\n\t\t\t\t\tvertex.z = points[j].x * cos;\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z); // uv\n\n\t\t\t\t\tuv.x = i / segments;\n\t\t\t\t\tuv.y = j / (points.length - 1);\n\t\t\t\t\tuvs.push(uv.x, uv.y);\n\t\t\t\t}\n\t\t\t} // indices\n\n\n\t\t\tfor (var _i = 0; _i < segments; _i++) {\n\t\t\t\tfor (var _j = 0; _j < points.length - 1; _j++) {\n\t\t\t\t\tvar base = _j + _i * points.length;\n\t\t\t\t\tvar a = base;\n\t\t\t\t\tvar b = base + points.length;\n\t\t\t\t\tvar c = base + points.length + 1;\n\t\t\t\t\tvar d = base + 1; // faces\n\n\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t\tindices.push(b, c, d);\n\t\t\t\t}\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); // generate normals\n\n\n\t\t\t_this.computeVertexNormals(); // if the geometry is closed, we need to average the normals along the seam.\n\t\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\n\t\t\tif (phiLength === Math.PI * 2) {\n\t\t\t\tvar normals = _this.attributes.normal.array;\n\t\t\t\tvar n1 = new Vector3();\n\t\t\t\tvar n2 = new Vector3();\n\t\t\t\tvar n = new Vector3(); // this is the buffer offset for the last line of vertices\n\n\t\t\t\tvar _base = segments * points.length * 3;\n\n\t\t\t\tfor (var _i2 = 0, _j2 = 0; _i2 < points.length; _i2++, _j2 += 3) {\n\t\t\t\t\t// select the normal of the vertex in the first line\n\t\t\t\t\tn1.x = normals[_j2 + 0];\n\t\t\t\t\tn1.y = normals[_j2 + 1];\n\t\t\t\t\tn1.z = normals[_j2 + 2]; // select the normal of the vertex in the last line\n\n\t\t\t\t\tn2.x = normals[_base + _j2 + 0];\n\t\t\t\t\tn2.y = normals[_base + _j2 + 1];\n\t\t\t\t\tn2.z = normals[_base + _j2 + 2]; // average normals\n\n\t\t\t\t\tn.addVectors(n1, n2).normalize(); // assign the new values to both normals\n\n\t\t\t\t\tnormals[_j2 + 0] = normals[_base + _j2 + 0] = n.x;\n\t\t\t\t\tnormals[_j2 + 1] = normals[_base + _j2 + 1] = n.y;\n\t\t\t\t\tnormals[_j2 + 2] = normals[_base + _j2 + 2] = n.z;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn LatheBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar LatheGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(LatheGeometry, _Geometry);\n\n\t\tfunction LatheGeometry(points, segments, phiStart, phiLength) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'LatheGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tpoints: points,\n\t\t\t\tsegments: segments,\n\t\t\t\tphiStart: phiStart,\n\t\t\t\tphiLength: phiLength\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new LatheBufferGeometry(points, segments, phiStart, phiLength));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn LatheGeometry;\n\t}(Geometry);\n\n\tvar OctahedronBufferGeometry = /*#__PURE__*/function (_PolyhedronBufferGeom) {\n\t\t_inheritsLoose(OctahedronBufferGeometry, _PolyhedronBufferGeom);\n\n\t\tfunction OctahedronBufferGeometry(radius, detail) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (detail === void 0) {\n\t\t\t\tdetail = 0;\n\t\t\t}\n\n\t\t\tvar vertices = [1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 1, 0, 0, -1];\n\t\t\tvar indices = [0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2];\n\t\t\t_this = _PolyhedronBufferGeom.call(this, vertices, indices, radius, detail) || this;\n\t\t\t_this.type = 'OctahedronBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn OctahedronBufferGeometry;\n\t}(PolyhedronBufferGeometry);\n\n\tvar OctahedronGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(OctahedronGeometry, _Geometry);\n\n\t\tfunction OctahedronGeometry(radius, detail) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'OctahedronGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new OctahedronBufferGeometry(radius, detail));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn OctahedronGeometry;\n\t}(Geometry);\n\n\t/**\n\t * Parametric Surfaces Geometry\n\t * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n\t */\n\n\tfunction ParametricBufferGeometry(func, slices, stacks) {\n\t\tBufferGeometry.call(this);\n\t\tthis.type = 'ParametricBufferGeometry';\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t}; // buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\t\tvar EPS = 0.00001;\n\t\tvar normal = new Vector3();\n\t\tvar p0 = new Vector3(),\n\t\t\t\tp1 = new Vector3();\n\t\tvar pu = new Vector3(),\n\t\t\t\tpv = new Vector3();\n\n\t\tif (func.length < 3) {\n\t\t\tconsole.error('THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.');\n\t\t} // generate vertices, normals and uvs\n\n\n\t\tvar sliceCount = slices + 1;\n\n\t\tfor (var i = 0; i <= stacks; i++) {\n\t\t\tvar v = i / stacks;\n\n\t\t\tfor (var j = 0; j <= slices; j++) {\n\t\t\t\tvar u = j / slices; // vertex\n\n\t\t\t\tfunc(u, v, p0);\n\t\t\t\tvertices.push(p0.x, p0.y, p0.z); // normal\n\t\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\t\tif (u - EPS >= 0) {\n\t\t\t\t\tfunc(u - EPS, v, p1);\n\t\t\t\t\tpu.subVectors(p0, p1);\n\t\t\t\t} else {\n\t\t\t\t\tfunc(u + EPS, v, p1);\n\t\t\t\t\tpu.subVectors(p1, p0);\n\t\t\t\t}\n\n\t\t\t\tif (v - EPS >= 0) {\n\t\t\t\t\tfunc(u, v - EPS, p1);\n\t\t\t\t\tpv.subVectors(p0, p1);\n\t\t\t\t} else {\n\t\t\t\t\tfunc(u, v + EPS, p1);\n\t\t\t\t\tpv.subVectors(p1, p0);\n\t\t\t\t} // cross product of tangent vectors returns surface normal\n\n\n\t\t\t\tnormal.crossVectors(pu, pv).normalize();\n\t\t\t\tnormals.push(normal.x, normal.y, normal.z); // uv\n\n\t\t\t\tuvs.push(u, v);\n\t\t\t}\n\t\t} // generate indices\n\n\n\t\tfor (var _i = 0; _i < stacks; _i++) {\n\t\t\tfor (var _j = 0; _j < slices; _j++) {\n\t\t\t\tvar a = _i * sliceCount + _j;\n\t\t\t\tvar b = _i * sliceCount + _j + 1;\n\t\t\t\tvar c = (_i + 1) * sliceCount + _j + 1;\n\t\t\t\tvar d = (_i + 1) * sliceCount + _j; // faces one and two\n\n\t\t\t\tindices.push(a, b, d);\n\t\t\t\tindices.push(b, c, d);\n\t\t\t}\n\t\t} // build geometry\n\n\n\t\tthis.setIndex(indices);\n\t\tthis.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\tthis.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\t\tthis.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\t}\n\n\tParametricBufferGeometry.prototype = Object.create(BufferGeometry.prototype);\n\tParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n\t/**\n\t * Parametric Surfaces Geometry\n\t * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n\t */\n\n\tfunction ParametricGeometry(func, slices, stacks) {\n\t\tGeometry.call(this);\n\t\tthis.type = 'ParametricGeometry';\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\n\t\tthis.fromBufferGeometry(new ParametricBufferGeometry(func, slices, stacks));\n\t\tthis.mergeVertices();\n\t}\n\n\tParametricGeometry.prototype = Object.create(Geometry.prototype);\n\tParametricGeometry.prototype.constructor = ParametricGeometry;\n\n\tvar PlaneGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(PlaneGeometry, _Geometry);\n\n\t\tfunction PlaneGeometry(width, height, widthSegments, heightSegments) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'PlaneGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new PlaneBufferGeometry(width, height, widthSegments, heightSegments));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn PlaneGeometry;\n\t}(Geometry);\n\n\tvar PolyhedronGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(PolyhedronGeometry, _Geometry);\n\n\t\tfunction PolyhedronGeometry(vertices, indices, radius, detail) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'PolyhedronGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tvertices: vertices,\n\t\t\t\tindices: indices,\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new PolyhedronBufferGeometry(vertices, indices, radius, detail));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn PolyhedronGeometry;\n\t}(Geometry);\n\n\tvar RingBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(RingBufferGeometry, _BufferGeometry);\n\n\t\tfunction RingBufferGeometry(innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\tif (innerRadius === void 0) {\n\t\t\t\tinnerRadius = 0.5;\n\t\t\t}\n\n\t\t\tif (outerRadius === void 0) {\n\t\t\t\touterRadius = 1;\n\t\t\t}\n\n\t\t\tif (thetaSegments === void 0) {\n\t\t\t\tthetaSegments = 8;\n\t\t\t}\n\n\t\t\tif (phiSegments === void 0) {\n\t\t\t\tphiSegments = 1;\n\t\t\t}\n\n\t\t\tif (thetaStart === void 0) {\n\t\t\t\tthetaStart = 0;\n\t\t\t}\n\n\t\t\tif (thetaLength === void 0) {\n\t\t\t\tthetaLength = Math.PI * 2;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'RingBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tthetaSegments: thetaSegments,\n\t\t\t\tphiSegments: phiSegments,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\t\t\tthetaSegments = Math.max(3, thetaSegments);\n\t\t\tphiSegments = Math.max(1, phiSegments); // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = []; // some helper variables\n\n\t\t\tvar radius = innerRadius;\n\t\t\tvar radiusStep = (outerRadius - innerRadius) / phiSegments;\n\t\t\tvar vertex = new Vector3();\n\t\t\tvar uv = new Vector2(); // generate vertices, normals and uvs\n\n\t\t\tfor (var j = 0; j <= phiSegments; j++) {\n\t\t\t\tfor (var i = 0; i <= thetaSegments; i++) {\n\t\t\t\t\t// values are generate from the inside of the ring to the outside\n\t\t\t\t\tvar segment = thetaStart + i / thetaSegments * thetaLength; // vertex\n\n\t\t\t\t\tvertex.x = radius * Math.cos(segment);\n\t\t\t\t\tvertex.y = radius * Math.sin(segment);\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z); // normal\n\n\t\t\t\t\tnormals.push(0, 0, 1); // uv\n\n\t\t\t\t\tuv.x = (vertex.x / outerRadius + 1) / 2;\n\t\t\t\t\tuv.y = (vertex.y / outerRadius + 1) / 2;\n\t\t\t\t\tuvs.push(uv.x, uv.y);\n\t\t\t\t} // increase the radius for next row of vertices\n\n\n\t\t\t\tradius += radiusStep;\n\t\t\t} // indices\n\n\n\t\t\tfor (var _j = 0; _j < phiSegments; _j++) {\n\t\t\t\tvar thetaSegmentLevel = _j * (thetaSegments + 1);\n\n\t\t\t\tfor (var _i = 0; _i < thetaSegments; _i++) {\n\t\t\t\t\tvar _segment = _i + thetaSegmentLevel;\n\n\t\t\t\t\tvar a = _segment;\n\t\t\t\t\tvar b = _segment + thetaSegments + 1;\n\t\t\t\t\tvar c = _segment + thetaSegments + 2;\n\t\t\t\t\tvar d = _segment + 1; // faces\n\n\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t\tindices.push(b, c, d);\n\t\t\t\t}\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn RingBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar RingGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(RingGeometry, _Geometry);\n\n\t\tfunction RingGeometry(innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'RingGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tthetaSegments: thetaSegments,\n\t\t\t\tphiSegments: phiSegments,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new RingBufferGeometry(innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn RingGeometry;\n\t}(Geometry);\n\n\tvar ShapeBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(ShapeBufferGeometry, _BufferGeometry);\n\n\t\tfunction ShapeBufferGeometry(shapes, curveSegments) {\n\t\t\tvar _this;\n\n\t\t\tif (curveSegments === void 0) {\n\t\t\t\tcurveSegments = 12;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'ShapeBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tshapes: shapes,\n\t\t\t\tcurveSegments: curveSegments\n\t\t\t}; // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = []; // helper variables\n\n\t\t\tvar groupStart = 0;\n\t\t\tvar groupCount = 0; // allow single and array values for \"shapes\" parameter\n\n\t\t\tif (Array.isArray(shapes) === false) {\n\t\t\t\taddShape(shapes);\n\t\t\t} else {\n\t\t\t\tfor (var i = 0; i < shapes.length; i++) {\n\t\t\t\t\taddShape(shapes[i]);\n\n\t\t\t\t\t_this.addGroup(groupStart, groupCount, i); // enables MultiMaterial support\n\n\n\t\t\t\t\tgroupStart += groupCount;\n\t\t\t\t\tgroupCount = 0;\n\t\t\t\t}\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); // helper functions\n\n\n\t\t\tfunction addShape(shape) {\n\t\t\t\tvar indexOffset = vertices.length / 3;\n\t\t\t\tvar points = shape.extractPoints(curveSegments);\n\t\t\t\tvar shapeVertices = points.shape;\n\t\t\t\tvar shapeHoles = points.holes; // check direction of vertices\n\n\t\t\t\tif (ShapeUtils.isClockWise(shapeVertices) === false) {\n\t\t\t\t\tshapeVertices = shapeVertices.reverse();\n\t\t\t\t}\n\n\t\t\t\tfor (var _i = 0, l = shapeHoles.length; _i < l; _i++) {\n\t\t\t\t\tvar shapeHole = shapeHoles[_i];\n\n\t\t\t\t\tif (ShapeUtils.isClockWise(shapeHole) === true) {\n\t\t\t\t\t\tshapeHoles[_i] = shapeHole.reverse();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles); // join vertices of inner and outer paths to a single array\n\n\t\t\t\tfor (var _i2 = 0, _l = shapeHoles.length; _i2 < _l; _i2++) {\n\t\t\t\t\tvar _shapeHole = shapeHoles[_i2];\n\t\t\t\t\tshapeVertices = shapeVertices.concat(_shapeHole);\n\t\t\t\t} // vertices, normals, uvs\n\n\n\t\t\t\tfor (var _i3 = 0, _l2 = shapeVertices.length; _i3 < _l2; _i3++) {\n\t\t\t\t\tvar vertex = shapeVertices[_i3];\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, 0);\n\t\t\t\t\tnormals.push(0, 0, 1);\n\t\t\t\t\tuvs.push(vertex.x, vertex.y); // world uvs\n\t\t\t\t} // incides\n\n\n\t\t\t\tfor (var _i4 = 0, _l3 = faces.length; _i4 < _l3; _i4++) {\n\t\t\t\t\tvar face = faces[_i4];\n\t\t\t\t\tvar a = face[0] + indexOffset;\n\t\t\t\t\tvar b = face[1] + indexOffset;\n\t\t\t\t\tvar c = face[2] + indexOffset;\n\t\t\t\t\tindices.push(a, b, c);\n\t\t\t\t\tgroupCount += 3;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = ShapeBufferGeometry.prototype;\n\n\t\t_proto.toJSON = function toJSON() {\n\t\t\tvar data = BufferGeometry.prototype.toJSON.call(this);\n\t\t\tvar shapes = this.parameters.shapes;\n\t\t\treturn _toJSON$2(shapes, data);\n\t\t};\n\n\t\treturn ShapeBufferGeometry;\n\t}(BufferGeometry);\n\n\tfunction _toJSON$2(shapes, data) {\n\t\tdata.shapes = [];\n\n\t\tif (Array.isArray(shapes)) {\n\t\t\tfor (var i = 0, l = shapes.length; i < l; i++) {\n\t\t\t\tvar shape = shapes[i];\n\t\t\t\tdata.shapes.push(shape.uuid);\n\t\t\t}\n\t\t} else {\n\t\t\tdata.shapes.push(shapes.uuid);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tvar ShapeGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(ShapeGeometry, _Geometry);\n\n\t\tfunction ShapeGeometry(shapes, curveSegments) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'ShapeGeometry';\n\n\t\t\tif (typeof curveSegments === 'object') {\n\t\t\t\tconsole.warn('THREE.ShapeGeometry: Options parameter has been removed.');\n\t\t\t\tcurveSegments = curveSegments.curveSegments;\n\t\t\t}\n\n\t\t\t_this.parameters = {\n\t\t\t\tshapes: shapes,\n\t\t\t\tcurveSegments: curveSegments\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new ShapeBufferGeometry(shapes, curveSegments));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = ShapeGeometry.prototype;\n\n\t\t_proto.toJSON = function toJSON() {\n\t\t\tvar data = Geometry.prototype.toJSON.call(this);\n\t\t\tvar shapes = this.parameters.shapes;\n\t\t\treturn _toJSON$3(shapes, data);\n\t\t};\n\n\t\treturn ShapeGeometry;\n\t}(Geometry);\n\n\tfunction _toJSON$3(shapes, data) {\n\t\tdata.shapes = [];\n\n\t\tif (Array.isArray(shapes)) {\n\t\t\tfor (var i = 0, l = shapes.length; i < l; i++) {\n\t\t\t\tvar shape = shapes[i];\n\t\t\t\tdata.shapes.push(shape.uuid);\n\t\t\t}\n\t\t} else {\n\t\t\tdata.shapes.push(shapes.uuid);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tvar SphereBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(SphereBufferGeometry, _BufferGeometry);\n\n\t\tfunction SphereBufferGeometry(radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (widthSegments === void 0) {\n\t\t\t\twidthSegments = 8;\n\t\t\t}\n\n\t\t\tif (heightSegments === void 0) {\n\t\t\t\theightSegments = 6;\n\t\t\t}\n\n\t\t\tif (phiStart === void 0) {\n\t\t\t\tphiStart = 0;\n\t\t\t}\n\n\t\t\tif (phiLength === void 0) {\n\t\t\t\tphiLength = Math.PI * 2;\n\t\t\t}\n\n\t\t\tif (thetaStart === void 0) {\n\t\t\t\tthetaStart = 0;\n\t\t\t}\n\n\t\t\tif (thetaLength === void 0) {\n\t\t\t\tthetaLength = Math.PI;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'SphereBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\tphiStart: phiStart,\n\t\t\t\tphiLength: phiLength,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\t\t\twidthSegments = Math.max(3, Math.floor(widthSegments));\n\t\t\theightSegments = Math.max(2, Math.floor(heightSegments));\n\t\t\tvar thetaEnd = Math.min(thetaStart + thetaLength, Math.PI);\n\t\t\tvar index = 0;\n\t\t\tvar grid = [];\n\t\t\tvar vertex = new Vector3();\n\t\t\tvar normal = new Vector3(); // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = []; // generate vertices, normals and uvs\n\n\t\t\tfor (var iy = 0; iy <= heightSegments; iy++) {\n\t\t\t\tvar verticesRow = [];\n\t\t\t\tvar v = iy / heightSegments; // special case for the poles\n\n\t\t\t\tvar uOffset = 0;\n\n\t\t\t\tif (iy == 0 && thetaStart == 0) {\n\t\t\t\t\tuOffset = 0.5 / widthSegments;\n\t\t\t\t} else if (iy == heightSegments && thetaEnd == Math.PI) {\n\t\t\t\t\tuOffset = -0.5 / widthSegments;\n\t\t\t\t}\n\n\t\t\t\tfor (var ix = 0; ix <= widthSegments; ix++) {\n\t\t\t\t\tvar u = ix / widthSegments; // vertex\n\n\t\t\t\t\tvertex.x = -radius * Math.cos(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n\t\t\t\t\tvertex.y = radius * Math.cos(thetaStart + v * thetaLength);\n\t\t\t\t\tvertex.z = radius * Math.sin(phiStart + u * phiLength) * Math.sin(thetaStart + v * thetaLength);\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z); // normal\n\n\t\t\t\t\tnormal.copy(vertex).normalize();\n\t\t\t\t\tnormals.push(normal.x, normal.y, normal.z); // uv\n\n\t\t\t\t\tuvs.push(u + uOffset, 1 - v);\n\t\t\t\t\tverticesRow.push(index++);\n\t\t\t\t}\n\n\t\t\t\tgrid.push(verticesRow);\n\t\t\t} // indices\n\n\n\t\t\tfor (var _iy = 0; _iy < heightSegments; _iy++) {\n\t\t\t\tfor (var _ix = 0; _ix < widthSegments; _ix++) {\n\t\t\t\t\tvar a = grid[_iy][_ix + 1];\n\t\t\t\t\tvar b = grid[_iy][_ix];\n\t\t\t\t\tvar c = grid[_iy + 1][_ix];\n\t\t\t\t\tvar d = grid[_iy + 1][_ix + 1];\n\t\t\t\t\tif (_iy !== 0 || thetaStart > 0) indices.push(a, b, d);\n\t\t\t\t\tif (_iy !== heightSegments - 1 || thetaEnd < Math.PI) indices.push(b, c, d);\n\t\t\t\t}\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn SphereBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar SphereGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(SphereGeometry, _Geometry);\n\n\t\tfunction SphereGeometry(radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'SphereGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\twidthSegments: widthSegments,\n\t\t\t\theightSegments: heightSegments,\n\t\t\t\tphiStart: phiStart,\n\t\t\t\tphiLength: phiLength,\n\t\t\t\tthetaStart: thetaStart,\n\t\t\t\tthetaLength: thetaLength\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new SphereBufferGeometry(radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn SphereGeometry;\n\t}(Geometry);\n\n\tvar TetrahedronBufferGeometry = /*#__PURE__*/function (_PolyhedronBufferGeom) {\n\t\t_inheritsLoose(TetrahedronBufferGeometry, _PolyhedronBufferGeom);\n\n\t\tfunction TetrahedronBufferGeometry(radius, detail) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (detail === void 0) {\n\t\t\t\tdetail = 0;\n\t\t\t}\n\n\t\t\tvar vertices = [1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1];\n\t\t\tvar indices = [2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1];\n\t\t\t_this = _PolyhedronBufferGeom.call(this, vertices, indices, radius, detail) || this;\n\t\t\t_this.type = 'TetrahedronBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TetrahedronBufferGeometry;\n\t}(PolyhedronBufferGeometry);\n\n\tvar TetrahedronGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(TetrahedronGeometry, _Geometry);\n\n\t\tfunction TetrahedronGeometry(radius, detail) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'TetrahedronGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\tdetail: detail\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new TetrahedronBufferGeometry(radius, detail));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TetrahedronGeometry;\n\t}(Geometry);\n\n\tvar TextBufferGeometry = /*#__PURE__*/function (_ExtrudeBufferGeometr) {\n\t\t_inheritsLoose(TextBufferGeometry, _ExtrudeBufferGeometr);\n\n\t\tfunction TextBufferGeometry(text, parameters) {\n\t\t\tvar _this;\n\n\t\t\tif (parameters === void 0) {\n\t\t\t\tparameters = {};\n\t\t\t}\n\n\t\t\tvar font = parameters.font;\n\n\t\t\tif (!(font && font.isFont)) {\n\t\t\t\tconsole.error('THREE.TextGeometry: font parameter is not an instance of THREE.Font.');\n\t\t\t\treturn new BufferGeometry() || _assertThisInitialized(_this);\n\t\t\t}\n\n\t\t\tvar shapes = font.generateShapes(text, parameters.size); // translate parameters to ExtrudeGeometry API\n\n\t\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50; // defaults\n\n\t\t\tif (parameters.bevelThickness === undefined) parameters.bevelThickness = 10;\n\t\t\tif (parameters.bevelSize === undefined) parameters.bevelSize = 8;\n\t\t\tif (parameters.bevelEnabled === undefined) parameters.bevelEnabled = false;\n\t\t\t_this = _ExtrudeBufferGeometr.call(this, shapes, parameters) || this;\n\t\t\t_this.type = 'TextBufferGeometry';\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TextBufferGeometry;\n\t}(ExtrudeBufferGeometry);\n\n\tvar TextGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(TextGeometry, _Geometry);\n\n\t\tfunction TextGeometry(text, parameters) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'TextGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\ttext: text,\n\t\t\t\tparameters: parameters\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new TextBufferGeometry(text, parameters));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TextGeometry;\n\t}(Geometry);\n\n\tvar TorusBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(TorusBufferGeometry, _BufferGeometry);\n\n\t\tfunction TorusBufferGeometry(radius, tube, radialSegments, tubularSegments, arc) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (tube === void 0) {\n\t\t\t\ttube = 0.4;\n\t\t\t}\n\n\t\t\tif (radialSegments === void 0) {\n\t\t\t\tradialSegments = 8;\n\t\t\t}\n\n\t\t\tif (tubularSegments === void 0) {\n\t\t\t\ttubularSegments = 6;\n\t\t\t}\n\n\t\t\tif (arc === void 0) {\n\t\t\t\tarc = Math.PI * 2;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'TorusBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\ttube: tube,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tarc: arc\n\t\t\t};\n\t\t\tradialSegments = Math.floor(radialSegments);\n\t\t\ttubularSegments = Math.floor(tubularSegments); // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = []; // helper variables\n\n\t\t\tvar center = new Vector3();\n\t\t\tvar vertex = new Vector3();\n\t\t\tvar normal = new Vector3(); // generate vertices, normals and uvs\n\n\t\t\tfor (var j = 0; j <= radialSegments; j++) {\n\t\t\t\tfor (var i = 0; i <= tubularSegments; i++) {\n\t\t\t\t\tvar u = i / tubularSegments * arc;\n\t\t\t\t\tvar v = j / radialSegments * Math.PI * 2; // vertex\n\n\t\t\t\t\tvertex.x = (radius + tube * Math.cos(v)) * Math.cos(u);\n\t\t\t\t\tvertex.y = (radius + tube * Math.cos(v)) * Math.sin(u);\n\t\t\t\t\tvertex.z = tube * Math.sin(v);\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z); // normal\n\n\t\t\t\t\tcenter.x = radius * Math.cos(u);\n\t\t\t\t\tcenter.y = radius * Math.sin(u);\n\t\t\t\t\tnormal.subVectors(vertex, center).normalize();\n\t\t\t\t\tnormals.push(normal.x, normal.y, normal.z); // uv\n\n\t\t\t\t\tuvs.push(i / tubularSegments);\n\t\t\t\t\tuvs.push(j / radialSegments);\n\t\t\t\t}\n\t\t\t} // generate indices\n\n\n\t\t\tfor (var _j = 1; _j <= radialSegments; _j++) {\n\t\t\t\tfor (var _i = 1; _i <= tubularSegments; _i++) {\n\t\t\t\t\t// indices\n\t\t\t\t\tvar a = (tubularSegments + 1) * _j + _i - 1;\n\t\t\t\t\tvar b = (tubularSegments + 1) * (_j - 1) + _i - 1;\n\t\t\t\t\tvar c = (tubularSegments + 1) * (_j - 1) + _i;\n\t\t\t\t\tvar d = (tubularSegments + 1) * _j + _i; // faces\n\n\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t\tindices.push(b, c, d);\n\t\t\t\t}\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TorusBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar TorusGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(TorusGeometry, _Geometry);\n\n\t\tfunction TorusGeometry(radius, tube, radialSegments, tubularSegments, arc) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'TorusGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\ttube: tube,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tarc: arc\n\t\t\t};\n\n\t\t\t_this.fromBufferGeometry(new TorusBufferGeometry(radius, tube, radialSegments, tubularSegments, arc));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TorusGeometry;\n\t}(Geometry);\n\n\tvar TorusKnotBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(TorusKnotBufferGeometry, _BufferGeometry);\n\n\t\tfunction TorusKnotBufferGeometry(radius, tube, tubularSegments, radialSegments, p, q) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (tube === void 0) {\n\t\t\t\ttube = 0.4;\n\t\t\t}\n\n\t\t\tif (tubularSegments === void 0) {\n\t\t\t\ttubularSegments = 64;\n\t\t\t}\n\n\t\t\tif (radialSegments === void 0) {\n\t\t\t\tradialSegments = 8;\n\t\t\t}\n\n\t\t\tif (p === void 0) {\n\t\t\t\tp = 2;\n\t\t\t}\n\n\t\t\tif (q === void 0) {\n\t\t\t\tq = 3;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'TorusKnotBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\ttube: tube,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\tp: p,\n\t\t\t\tq: q\n\t\t\t};\n\t\t\ttubularSegments = Math.floor(tubularSegments);\n\t\t\tradialSegments = Math.floor(radialSegments); // buffers\n\n\t\t\tvar indices = [];\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = []; // helper variables\n\n\t\t\tvar vertex = new Vector3();\n\t\t\tvar normal = new Vector3();\n\t\t\tvar P1 = new Vector3();\n\t\t\tvar P2 = new Vector3();\n\t\t\tvar B = new Vector3();\n\t\t\tvar T = new Vector3();\n\t\t\tvar N = new Vector3(); // generate vertices, normals and uvs\n\n\t\t\tfor (var i = 0; i <= tubularSegments; ++i) {\n\t\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\t\t\t\tvar u = i / tubularSegments * p * Math.PI * 2; // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\t\tcalculatePositionOnCurve(u, p, q, radius, P1);\n\t\t\t\tcalculatePositionOnCurve(u + 0.01, p, q, radius, P2); // calculate orthonormal basis\n\n\t\t\t\tT.subVectors(P2, P1);\n\t\t\t\tN.addVectors(P2, P1);\n\t\t\t\tB.crossVectors(T, N);\n\t\t\t\tN.crossVectors(B, T); // normalize B, N. T can be ignored, we don't use it\n\n\t\t\t\tB.normalize();\n\t\t\t\tN.normalize();\n\n\t\t\t\tfor (var j = 0; j <= radialSegments; ++j) {\n\t\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\t\t\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\t\t\tvar cx = -tube * Math.cos(v);\n\t\t\t\t\tvar cy = tube * Math.sin(v); // now calculate the final vertex position.\n\t\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\t\tvertex.x = P1.x + (cx * N.x + cy * B.x);\n\t\t\t\t\tvertex.y = P1.y + (cx * N.y + cy * B.y);\n\t\t\t\t\tvertex.z = P1.z + (cx * N.z + cy * B.z);\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z); // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\t\tnormal.subVectors(vertex, P1).normalize();\n\t\t\t\t\tnormals.push(normal.x, normal.y, normal.z); // uv\n\n\t\t\t\t\tuvs.push(i / tubularSegments);\n\t\t\t\t\tuvs.push(j / radialSegments);\n\t\t\t\t}\n\t\t\t} // generate indices\n\n\n\t\t\tfor (var _j = 1; _j <= tubularSegments; _j++) {\n\t\t\t\tfor (var _i = 1; _i <= radialSegments; _i++) {\n\t\t\t\t\t// indices\n\t\t\t\t\tvar a = (radialSegments + 1) * (_j - 1) + (_i - 1);\n\t\t\t\t\tvar b = (radialSegments + 1) * _j + (_i - 1);\n\t\t\t\t\tvar c = (radialSegments + 1) * _j + _i;\n\t\t\t\t\tvar d = (radialSegments + 1) * (_j - 1) + _i; // faces\n\n\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t\tindices.push(b, c, d);\n\t\t\t\t}\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); // this function calculates the current position on the torus curve\n\n\n\t\t\tfunction calculatePositionOnCurve(u, p, q, radius, position) {\n\t\t\t\tvar cu = Math.cos(u);\n\t\t\t\tvar su = Math.sin(u);\n\t\t\t\tvar quOverP = q / p * u;\n\t\t\t\tvar cs = Math.cos(quOverP);\n\t\t\t\tposition.x = radius * (2 + cs) * 0.5 * cu;\n\t\t\t\tposition.y = radius * (2 + cs) * su * 0.5;\n\t\t\t\tposition.z = radius * Math.sin(quOverP) * 0.5;\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TorusKnotBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar TorusKnotGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(TorusKnotGeometry, _Geometry);\n\n\t\tfunction TorusKnotGeometry(radius, tube, tubularSegments, radialSegments, p, q, heightScale) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'TorusKnotGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tradius: radius,\n\t\t\t\ttube: tube,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\tp: p,\n\t\t\t\tq: q\n\t\t\t};\n\t\t\tif (heightScale !== undefined) console.warn('THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.');\n\n\t\t\t_this.fromBufferGeometry(new TorusKnotBufferGeometry(radius, tube, tubularSegments, radialSegments, p, q));\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TorusKnotGeometry;\n\t}(Geometry);\n\n\tvar TubeBufferGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(TubeBufferGeometry, _BufferGeometry);\n\n\t\tfunction TubeBufferGeometry(path, tubularSegments, radius, radialSegments, closed) {\n\t\t\tvar _this;\n\n\t\t\tif (tubularSegments === void 0) {\n\t\t\t\ttubularSegments = 64;\n\t\t\t}\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (radialSegments === void 0) {\n\t\t\t\tradialSegments = 8;\n\t\t\t}\n\n\t\t\tif (closed === void 0) {\n\t\t\t\tclosed = false;\n\t\t\t}\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'TubeBufferGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tpath: path,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tradius: radius,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\tclosed: closed\n\t\t\t};\n\t\t\tvar frames = path.computeFrenetFrames(tubularSegments, closed); // expose internals\n\n\t\t\t_this.tangents = frames.tangents;\n\t\t\t_this.normals = frames.normals;\n\t\t\t_this.binormals = frames.binormals; // helper variables\n\n\t\t\tvar vertex = new Vector3();\n\t\t\tvar normal = new Vector3();\n\t\t\tvar uv = new Vector2();\n\t\t\tvar P = new Vector3(); // buffer\n\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = [];\n\t\t\tvar indices = []; // create buffer data\n\n\t\t\tgenerateBufferData(); // build geometry\n\n\t\t\t_this.setIndex(indices);\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\t_this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\n\n\t\t\t_this.setAttribute('uv', new Float32BufferAttribute(uvs, 2)); // functions\n\n\n\t\t\tfunction generateBufferData() {\n\t\t\t\tfor (var i = 0; i < tubularSegments; i++) {\n\t\t\t\t\tgenerateSegment(i);\n\t\t\t\t} // if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t\t// at the regular position on the given path\n\t\t\t\t//\n\t\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\n\t\t\t\tgenerateSegment(closed === false ? tubularSegments : 0); // uvs are generated in a separate function.\n\t\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\t\tgenerateUVs(); // finally create faces\n\n\t\t\t\tgenerateIndices();\n\t\t\t}\n\n\t\t\tfunction generateSegment(i) {\n\t\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\t\t\t\tP = path.getPointAt(i / tubularSegments, P); // retrieve corresponding normal and binormal\n\n\t\t\t\tvar N = frames.normals[i];\n\t\t\t\tvar B = frames.binormals[i]; // generate normals and vertices for the current segment\n\n\t\t\t\tfor (var j = 0; j <= radialSegments; j++) {\n\t\t\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\t\t\tvar sin = Math.sin(v);\n\t\t\t\t\tvar cos = -Math.cos(v); // normal\n\n\t\t\t\t\tnormal.x = cos * N.x + sin * B.x;\n\t\t\t\t\tnormal.y = cos * N.y + sin * B.y;\n\t\t\t\t\tnormal.z = cos * N.z + sin * B.z;\n\t\t\t\t\tnormal.normalize();\n\t\t\t\t\tnormals.push(normal.x, normal.y, normal.z); // vertex\n\n\t\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\t\tvertex.z = P.z + radius * normal.z;\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction generateIndices() {\n\t\t\t\tfor (var j = 1; j <= tubularSegments; j++) {\n\t\t\t\t\tfor (var i = 1; i <= radialSegments; i++) {\n\t\t\t\t\t\tvar a = (radialSegments + 1) * (j - 1) + (i - 1);\n\t\t\t\t\t\tvar b = (radialSegments + 1) * j + (i - 1);\n\t\t\t\t\t\tvar c = (radialSegments + 1) * j + i;\n\t\t\t\t\t\tvar d = (radialSegments + 1) * (j - 1) + i; // faces\n\n\t\t\t\t\t\tindices.push(a, b, d);\n\t\t\t\t\t\tindices.push(b, c, d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction generateUVs() {\n\t\t\t\tfor (var i = 0; i <= tubularSegments; i++) {\n\t\t\t\t\tfor (var j = 0; j <= radialSegments; j++) {\n\t\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\t\tuv.y = j / radialSegments;\n\t\t\t\t\t\tuvs.push(uv.x, uv.y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = TubeBufferGeometry.prototype;\n\n\t\t_proto.toJSON = function toJSON() {\n\t\t\tvar data = BufferGeometry.prototype.toJSON.call(this);\n\t\t\tdata.path = this.parameters.path.toJSON();\n\t\t\treturn data;\n\t\t};\n\n\t\treturn TubeBufferGeometry;\n\t}(BufferGeometry);\n\n\tvar TubeGeometry = /*#__PURE__*/function (_Geometry) {\n\t\t_inheritsLoose(TubeGeometry, _Geometry);\n\n\t\tfunction TubeGeometry(path, tubularSegments, radius, radialSegments, closed, taper) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Geometry.call(this) || this;\n\t\t\t_this.type = 'TubeGeometry';\n\t\t\t_this.parameters = {\n\t\t\t\tpath: path,\n\t\t\t\ttubularSegments: tubularSegments,\n\t\t\t\tradius: radius,\n\t\t\t\tradialSegments: radialSegments,\n\t\t\t\tclosed: closed\n\t\t\t};\n\t\t\tif (taper !== undefined) console.warn('THREE.TubeGeometry: taper has been removed.');\n\t\t\tvar bufferGeometry = new TubeBufferGeometry(path, tubularSegments, radius, radialSegments, closed); // expose internals\n\n\t\t\t_this.tangents = bufferGeometry.tangents;\n\t\t\t_this.normals = bufferGeometry.normals;\n\t\t\t_this.binormals = bufferGeometry.binormals; // create geometry\n\n\t\t\t_this.fromBufferGeometry(bufferGeometry);\n\n\t\t\t_this.mergeVertices();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn TubeGeometry;\n\t}(Geometry);\n\n\tvar WireframeGeometry = /*#__PURE__*/function (_BufferGeometry) {\n\t\t_inheritsLoose(WireframeGeometry, _BufferGeometry);\n\n\t\tfunction WireframeGeometry(geometry) {\n\t\t\tvar _this;\n\n\t\t\t_this = _BufferGeometry.call(this) || this;\n\t\t\t_this.type = 'WireframeGeometry'; // buffer\n\n\t\t\tvar vertices = []; // helper variables\n\n\t\t\tvar edge = [0, 0],\n\t\t\t\t\tedges = {};\n\t\t\tvar keys = ['a', 'b', 'c']; // different logic for Geometry and BufferGeometry\n\n\t\t\tif (geometry && geometry.isGeometry) {\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\t\t\t\tvar faces = geometry.faces;\n\n\t\t\t\tfor (var i = 0, l = faces.length; i < l; i++) {\n\t\t\t\t\tvar face = faces[i];\n\n\t\t\t\t\tfor (var j = 0; j < 3; j++) {\n\t\t\t\t\t\tvar edge1 = face[keys[j]];\n\t\t\t\t\t\tvar edge2 = face[keys[(j + 1) % 3]];\n\t\t\t\t\t\tedge[0] = Math.min(edge1, edge2); // sorting prevents duplicates\n\n\t\t\t\t\t\tedge[1] = Math.max(edge1, edge2);\n\t\t\t\t\t\tvar key = edge[0] + ',' + edge[1];\n\n\t\t\t\t\t\tif (edges[key] === undefined) {\n\t\t\t\t\t\t\tedges[key] = {\n\t\t\t\t\t\t\t\tindex1: edge[0],\n\t\t\t\t\t\t\t\tindex2: edge[1]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} // generate vertices\n\n\n\t\t\t\tfor (var _key in edges) {\n\t\t\t\t\tvar e = edges[_key];\n\t\t\t\t\tvar vertex = geometry.vertices[e.index1];\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z);\n\t\t\t\t\tvertex = geometry.vertices[e.index2];\n\t\t\t\t\tvertices.push(vertex.x, vertex.y, vertex.z);\n\t\t\t\t}\n\t\t\t} else if (geometry && geometry.isBufferGeometry) {\n\t\t\t\tvar _vertex = new Vector3();\n\n\t\t\t\tif (geometry.index !== null) {\n\t\t\t\t\t// indexed BufferGeometry\n\t\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\t\tvar indices = geometry.index;\n\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\tif (groups.length === 0) {\n\t\t\t\t\t\tgroups = [{\n\t\t\t\t\t\t\tstart: 0,\n\t\t\t\t\t\t\tcount: indices.count,\n\t\t\t\t\t\t\tmaterialIndex: 0\n\t\t\t\t\t\t}];\n\t\t\t\t\t} // create a data structure that contains all eges without duplicates\n\n\n\t\t\t\t\tfor (var o = 0, ol = groups.length; o < ol; ++o) {\n\t\t\t\t\t\tvar group = groups[o];\n\t\t\t\t\t\tvar start = group.start;\n\t\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\t\tfor (var _i = start, _l = start + count; _i < _l; _i += 3) {\n\t\t\t\t\t\t\tfor (var _j = 0; _j < 3; _j++) {\n\t\t\t\t\t\t\t\tvar _edge = indices.getX(_i + _j);\n\n\t\t\t\t\t\t\t\tvar _edge2 = indices.getX(_i + (_j + 1) % 3);\n\n\t\t\t\t\t\t\t\tedge[0] = Math.min(_edge, _edge2); // sorting prevents duplicates\n\n\t\t\t\t\t\t\t\tedge[1] = Math.max(_edge, _edge2);\n\n\t\t\t\t\t\t\t\tvar _key2 = edge[0] + ',' + edge[1];\n\n\t\t\t\t\t\t\t\tif (edges[_key2] === undefined) {\n\t\t\t\t\t\t\t\t\tedges[_key2] = {\n\t\t\t\t\t\t\t\t\t\tindex1: edge[0],\n\t\t\t\t\t\t\t\t\t\tindex2: edge[1]\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} // generate vertices\n\n\n\t\t\t\t\tfor (var _key3 in edges) {\n\t\t\t\t\t\tvar _e = edges[_key3];\n\n\t\t\t\t\t\t_vertex.fromBufferAttribute(position, _e.index1);\n\n\t\t\t\t\t\tvertices.push(_vertex.x, _vertex.y, _vertex.z);\n\n\t\t\t\t\t\t_vertex.fromBufferAttribute(position, _e.index2);\n\n\t\t\t\t\t\tvertices.push(_vertex.x, _vertex.y, _vertex.z);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// non-indexed BufferGeometry\n\t\t\t\t\tvar _position = geometry.attributes.position;\n\n\t\t\t\t\tfor (var _i2 = 0, _l2 = _position.count / 3; _i2 < _l2; _i2++) {\n\t\t\t\t\t\tfor (var _j2 = 0; _j2 < 3; _j2++) {\n\t\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\t\t\t\t\t\t\tvar index1 = 3 * _i2 + _j2;\n\n\t\t\t\t\t\t\t_vertex.fromBufferAttribute(_position, index1);\n\n\t\t\t\t\t\t\tvertices.push(_vertex.x, _vertex.y, _vertex.z);\n\t\t\t\t\t\t\tvar index2 = 3 * _i2 + (_j2 + 1) % 3;\n\n\t\t\t\t\t\t\t_vertex.fromBufferAttribute(_position, index2);\n\n\t\t\t\t\t\t\tvertices.push(_vertex.x, _vertex.y, _vertex.z);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // build geometry\n\n\n\t\t\t_this.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn WireframeGeometry;\n\t}(BufferGeometry);\n\n\tvar Geometries = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tBoxGeometry: BoxGeometry,\n\t\tBoxBufferGeometry: BoxBufferGeometry,\n\t\tCircleGeometry: CircleGeometry,\n\t\tCircleBufferGeometry: CircleBufferGeometry,\n\t\tConeGeometry: ConeGeometry,\n\t\tConeBufferGeometry: ConeBufferGeometry,\n\t\tCylinderGeometry: CylinderGeometry,\n\t\tCylinderBufferGeometry: CylinderBufferGeometry,\n\t\tDodecahedronGeometry: DodecahedronGeometry,\n\t\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\t\tEdgesGeometry: EdgesGeometry,\n\t\tExtrudeGeometry: ExtrudeGeometry,\n\t\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\t\tIcosahedronGeometry: IcosahedronGeometry,\n\t\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\t\tLatheGeometry: LatheGeometry,\n\t\tLatheBufferGeometry: LatheBufferGeometry,\n\t\tOctahedronGeometry: OctahedronGeometry,\n\t\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\t\tParametricGeometry: ParametricGeometry,\n\t\tParametricBufferGeometry: ParametricBufferGeometry,\n\t\tPlaneGeometry: PlaneGeometry,\n\t\tPlaneBufferGeometry: PlaneBufferGeometry,\n\t\tPolyhedronGeometry: PolyhedronGeometry,\n\t\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\t\tRingGeometry: RingGeometry,\n\t\tRingBufferGeometry: RingBufferGeometry,\n\t\tShapeGeometry: ShapeGeometry,\n\t\tShapeBufferGeometry: ShapeBufferGeometry,\n\t\tSphereGeometry: SphereGeometry,\n\t\tSphereBufferGeometry: SphereBufferGeometry,\n\t\tTetrahedronGeometry: TetrahedronGeometry,\n\t\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\t\tTextGeometry: TextGeometry,\n\t\tTextBufferGeometry: TextBufferGeometry,\n\t\tTorusGeometry: TorusGeometry,\n\t\tTorusBufferGeometry: TorusBufferGeometry,\n\t\tTorusKnotGeometry: TorusKnotGeometry,\n\t\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\t\tTubeGeometry: TubeGeometry,\n\t\tTubeBufferGeometry: TubeBufferGeometry,\n\t\tWireframeGeometry: WireframeGeometry\n\t});\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <THREE.Color>\n\t * }\n\t */\n\n\tfunction ShadowMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'ShadowMaterial';\n\t\tthis.color = new Color(0x000000);\n\t\tthis.transparent = true;\n\t\tthis.setValues(parameters);\n\t}\n\n\tShadowMaterial.prototype = Object.create(Material.prototype);\n\tShadowMaterial.prototype.constructor = ShadowMaterial;\n\tShadowMaterial.prototype.isShadowMaterial = true;\n\n\tShadowMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.color.copy(source.color);\n\t\treturn this;\n\t};\n\n\tfunction RawShaderMaterial(parameters) {\n\t\tShaderMaterial.call(this, parameters);\n\t\tthis.type = 'RawShaderMaterial';\n\t}\n\n\tRawShaderMaterial.prototype = Object.create(ShaderMaterial.prototype);\n\tRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\tRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\troughness: <float>,\n\t *\tmetalness: <float>,\n\t *\topacity: <float>,\n\t *\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\n\t *\tlightMap: new THREE.Texture( <Image> ),\n\t *\tlightMapIntensity: <float>\n\t *\n\t *\taoMap: new THREE.Texture( <Image> ),\n\t *\taoMapIntensity: <float>\n\t *\n\t *\temissive: <hex>,\n\t *\temissiveIntensity: <float>\n\t *\temissiveMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tbumpMap: new THREE.Texture( <Image> ),\n\t *\tbumpScale: <float>,\n\t *\n\t *\tnormalMap: new THREE.Texture( <Image> ),\n\t *\tnormalMapType: THREE.TangentSpaceNormalMap,\n\t *\tnormalScale: <Vector2>,\n\t *\n\t *\tdisplacementMap: new THREE.Texture( <Image> ),\n\t *\tdisplacementScale: <float>,\n\t *\tdisplacementBias: <float>,\n\t *\n\t *\troughnessMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tmetalnessMap: new THREE.Texture( <Image> ),\n\t *\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tenvMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t *\tenvMapIntensity: <float>\n\t *\n\t *\trefractionRatio: <float>,\n\t *\n\t *\twireframe: <boolean>,\n\t *\twireframeLinewidth: <float>,\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>,\n\t *\tmorphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshStandardMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.defines = {\n\t\t\t'STANDARD': ''\n\t\t};\n\t\tthis.type = 'MeshStandardMaterial';\n\t\tthis.color = new Color(0xffffff); // diffuse\n\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\t\tthis.map = null;\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\t\tthis.emissive = new Color(0x000000);\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2(1, 1);\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\t\tthis.roughnessMap = null;\n\t\tthis.metalnessMap = null;\n\t\tthis.alphaMap = null;\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\t\tthis.refractionRatio = 0.98;\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\t\tthis.vertexTangents = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshStandardMaterial.prototype = Object.create(Material.prototype);\n\tMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\tMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n\tMeshStandardMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.defines = {\n\t\t\t'STANDARD': ''\n\t\t};\n\t\tthis.color.copy(source.color);\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\t\tthis.map = source.map;\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\t\tthis.emissive.copy(source.emissive);\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy(source.normalScale);\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\t\tthis.roughnessMap = source.roughnessMap;\n\t\tthis.metalnessMap = source.metalnessMap;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\t\tthis.vertexTangents = source.vertexTangents;\n\t\treturn this;\n\t};\n\n\t/**\n\t * parameters = {\n\t *\tclearcoat: <float>,\n\t *\tclearcoatMap: new THREE.Texture( <Image> ),\n\t *\tclearcoatRoughness: <float>,\n\t *\tclearcoatRoughnessMap: new THREE.Texture( <Image> ),\n\t *\tclearcoatNormalScale: <Vector2>,\n\t *\tclearcoatNormalMap: new THREE.Texture( <Image> ),\n\t *\n\t *\treflectivity: <float>,\n\t *\tior: <float>,\n\t *\n\t *\tsheen: <Color>,\n\t *\n\t *\ttransmission: <float>,\n\t *\ttransmissionMap: new THREE.Texture( <Image> )\n\t * }\n\t */\n\n\tfunction MeshPhysicalMaterial(parameters) {\n\t\tMeshStandardMaterial.call(this);\n\t\tthis.defines = {\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\t\t};\n\t\tthis.type = 'MeshPhysicalMaterial';\n\t\tthis.clearcoat = 0.0;\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2(1, 1);\n\t\tthis.clearcoatNormalMap = null;\n\t\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\t\tObject.defineProperty(this, 'ior', {\n\t\t\tget: function get() {\n\t\t\t\treturn (1 + 0.4 * this.reflectivity) / (1 - 0.4 * this.reflectivity);\n\t\t\t},\n\t\t\tset: function set(ior) {\n\t\t\t\tthis.reflectivity = MathUtils.clamp(2.5 * (ior - 1) / (ior + 1), 0, 1);\n\t\t\t}\n\t\t});\n\t\tthis.sheen = null; // null will disable sheen bsdf\n\n\t\tthis.transmission = 0.0;\n\t\tthis.transmissionMap = null;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshPhysicalMaterial.prototype = Object.create(MeshStandardMaterial.prototype);\n\tMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\tMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\n\tMeshPhysicalMaterial.prototype.copy = function (source) {\n\t\tMeshStandardMaterial.prototype.copy.call(this, source);\n\t\tthis.defines = {\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\t\t};\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy(source.clearcoatNormalScale);\n\t\tthis.reflectivity = source.reflectivity;\n\n\t\tif (source.sheen) {\n\t\t\tthis.sheen = (this.sheen || new Color()).copy(source.sheen);\n\t\t} else {\n\t\t\tthis.sheen = null;\n\t\t}\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\t\treturn this;\n\t};\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\tspecular: <hex>,\n\t *\tshininess: <float>,\n\t *\topacity: <float>,\n\t *\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\n\t *\tlightMap: new THREE.Texture( <Image> ),\n\t *\tlightMapIntensity: <float>\n\t *\n\t *\taoMap: new THREE.Texture( <Image> ),\n\t *\taoMapIntensity: <float>\n\t *\n\t *\temissive: <hex>,\n\t *\temissiveIntensity: <float>\n\t *\temissiveMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tbumpMap: new THREE.Texture( <Image> ),\n\t *\tbumpScale: <float>,\n\t *\n\t *\tnormalMap: new THREE.Texture( <Image> ),\n\t *\tnormalMapType: THREE.TangentSpaceNormalMap,\n\t *\tnormalScale: <Vector2>,\n\t *\n\t *\tdisplacementMap: new THREE.Texture( <Image> ),\n\t *\tdisplacementScale: <float>,\n\t *\tdisplacementBias: <float>,\n\t *\n\t *\tspecularMap: new THREE.Texture( <Image> ),\n\t *\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tenvMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t *\tcombine: THREE.MultiplyOperation,\n\t *\treflectivity: <float>,\n\t *\trefractionRatio: <float>,\n\t *\n\t *\twireframe: <boolean>,\n\t *\twireframeLinewidth: <float>,\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>,\n\t *\tmorphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshPhongMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'MeshPhongMaterial';\n\t\tthis.color = new Color(0xffffff); // diffuse\n\n\t\tthis.specular = new Color(0x111111);\n\t\tthis.shininess = 30;\n\t\tthis.map = null;\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\t\tthis.emissive = new Color(0x000000);\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2(1, 1);\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\t\tthis.specularMap = null;\n\t\tthis.alphaMap = null;\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshPhongMaterial.prototype = Object.create(Material.prototype);\n\tMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\tMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\n\tMeshPhongMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.color.copy(source.color);\n\t\tthis.specular.copy(source.specular);\n\t\tthis.shininess = source.shininess;\n\t\tthis.map = source.map;\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\t\tthis.emissive.copy(source.emissive);\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy(source.normalScale);\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\t\tthis.specularMap = source.specularMap;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\t\treturn this;\n\t};\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\tgradientMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tlightMap: new THREE.Texture( <Image> ),\n\t *\tlightMapIntensity: <float>\n\t *\n\t *\taoMap: new THREE.Texture( <Image> ),\n\t *\taoMapIntensity: <float>\n\t *\n\t *\temissive: <hex>,\n\t *\temissiveIntensity: <float>\n\t *\temissiveMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tbumpMap: new THREE.Texture( <Image> ),\n\t *\tbumpScale: <float>,\n\t *\n\t *\tnormalMap: new THREE.Texture( <Image> ),\n\t *\tnormalMapType: THREE.TangentSpaceNormalMap,\n\t *\tnormalScale: <Vector2>,\n\t *\n\t *\tdisplacementMap: new THREE.Texture( <Image> ),\n\t *\tdisplacementScale: <float>,\n\t *\tdisplacementBias: <float>,\n\t *\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\twireframe: <boolean>,\n\t *\twireframeLinewidth: <float>,\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>,\n\t *\tmorphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshToonMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.defines = {\n\t\t\t'TOON': ''\n\t\t};\n\t\tthis.type = 'MeshToonMaterial';\n\t\tthis.color = new Color(0xffffff);\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\t\tthis.emissive = new Color(0x000000);\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2(1, 1);\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\t\tthis.alphaMap = null;\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshToonMaterial.prototype = Object.create(Material.prototype);\n\tMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\tMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\n\tMeshToonMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.color.copy(source.color);\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\t\tthis.emissive.copy(source.emissive);\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy(source.normalScale);\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\t\treturn this;\n\t};\n\n\t/**\n\t * parameters = {\n\t *\topacity: <float>,\n\t *\n\t *\tbumpMap: new THREE.Texture( <Image> ),\n\t *\tbumpScale: <float>,\n\t *\n\t *\tnormalMap: new THREE.Texture( <Image> ),\n\t *\tnormalMapType: THREE.TangentSpaceNormalMap,\n\t *\tnormalScale: <Vector2>,\n\t *\n\t *\tdisplacementMap: new THREE.Texture( <Image> ),\n\t *\tdisplacementScale: <float>,\n\t *\tdisplacementBias: <float>,\n\t *\n\t *\twireframe: <boolean>,\n\t *\twireframeLinewidth: <float>\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>,\n\t *\tmorphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshNormalMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'MeshNormalMaterial';\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2(1, 1);\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.fog = false;\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshNormalMaterial.prototype = Object.create(Material.prototype);\n\tMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\tMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\n\tMeshNormalMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy(source.normalScale);\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\t\treturn this;\n\t};\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\topacity: <float>,\n\t *\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\n\t *\tlightMap: new THREE.Texture( <Image> ),\n\t *\tlightMapIntensity: <float>\n\t *\n\t *\taoMap: new THREE.Texture( <Image> ),\n\t *\taoMapIntensity: <float>\n\t *\n\t *\temissive: <hex>,\n\t *\temissiveIntensity: <float>\n\t *\temissiveMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tspecularMap: new THREE.Texture( <Image> ),\n\t *\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tenvMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t *\tcombine: THREE.Multiply,\n\t *\treflectivity: <float>,\n\t *\trefractionRatio: <float>,\n\t *\n\t *\twireframe: <boolean>,\n\t *\twireframeLinewidth: <float>,\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>,\n\t *\tmorphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshLambertMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.type = 'MeshLambertMaterial';\n\t\tthis.color = new Color(0xffffff); // diffuse\n\n\t\tthis.map = null;\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\t\tthis.emissive = new Color(0x000000);\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\t\tthis.specularMap = null;\n\t\tthis.alphaMap = null;\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshLambertMaterial.prototype = Object.create(Material.prototype);\n\tMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\tMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\n\tMeshLambertMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.color.copy(source.color);\n\t\tthis.map = source.map;\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\t\tthis.emissive.copy(source.emissive);\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\t\tthis.specularMap = source.specularMap;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\t\treturn this;\n\t};\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\topacity: <float>,\n\t *\n\t *\tmatcap: new THREE.Texture( <Image> ),\n\t *\n\t *\tmap: new THREE.Texture( <Image> ),\n\t *\n\t *\tbumpMap: new THREE.Texture( <Image> ),\n\t *\tbumpScale: <float>,\n\t *\n\t *\tnormalMap: new THREE.Texture( <Image> ),\n\t *\tnormalMapType: THREE.TangentSpaceNormalMap,\n\t *\tnormalScale: <Vector2>,\n\t *\n\t *\tdisplacementMap: new THREE.Texture( <Image> ),\n\t *\tdisplacementScale: <float>,\n\t *\tdisplacementBias: <float>,\n\t *\n\t *\talphaMap: new THREE.Texture( <Image> ),\n\t *\n\t *\tskinning: <bool>,\n\t *\tmorphTargets: <bool>,\n\t *\tmorphNormals: <bool>\n\t * }\n\t */\n\n\tfunction MeshMatcapMaterial(parameters) {\n\t\tMaterial.call(this);\n\t\tthis.defines = {\n\t\t\t'MATCAP': ''\n\t\t};\n\t\tthis.type = 'MeshMatcapMaterial';\n\t\tthis.color = new Color(0xffffff); // diffuse\n\n\t\tthis.matcap = null;\n\t\tthis.map = null;\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2(1, 1);\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\t\tthis.alphaMap = null;\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\t\tthis.setValues(parameters);\n\t}\n\n\tMeshMatcapMaterial.prototype = Object.create(Material.prototype);\n\tMeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial;\n\tMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\n\tMeshMatcapMaterial.prototype.copy = function (source) {\n\t\tMaterial.prototype.copy.call(this, source);\n\t\tthis.defines = {\n\t\t\t'MATCAP': ''\n\t\t};\n\t\tthis.color.copy(source.color);\n\t\tthis.matcap = source.matcap;\n\t\tthis.map = source.map;\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy(source.normalScale);\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\t\tthis.alphaMap = source.alphaMap;\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\t\treturn this;\n\t};\n\n\t/**\n\t * parameters = {\n\t *\tcolor: <hex>,\n\t *\topacity: <float>,\n\t *\n\t *\tlinewidth: <float>,\n\t *\n\t *\tscale: <float>,\n\t *\tdashSize: <float>,\n\t *\tgapSize: <float>\n\t * }\n\t */\n\n\tfunction LineDashedMaterial(parameters) {\n\t\tLineBasicMaterial.call(this);\n\t\tthis.type = 'LineDashedMaterial';\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\t\tthis.setValues(parameters);\n\t}\n\n\tLineDashedMaterial.prototype = Object.create(LineBasicMaterial.prototype);\n\tLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\tLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\n\tLineDashedMaterial.prototype.copy = function (source) {\n\t\tLineBasicMaterial.prototype.copy.call(this, source);\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\t\treturn this;\n\t};\n\n\tvar Materials = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tShadowMaterial: ShadowMaterial,\n\t\tSpriteMaterial: SpriteMaterial,\n\t\tRawShaderMaterial: RawShaderMaterial,\n\t\tShaderMaterial: ShaderMaterial,\n\t\tPointsMaterial: PointsMaterial,\n\t\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\t\tMeshStandardMaterial: MeshStandardMaterial,\n\t\tMeshPhongMaterial: MeshPhongMaterial,\n\t\tMeshToonMaterial: MeshToonMaterial,\n\t\tMeshNormalMaterial: MeshNormalMaterial,\n\t\tMeshLambertMaterial: MeshLambertMaterial,\n\t\tMeshDepthMaterial: MeshDepthMaterial,\n\t\tMeshDistanceMaterial: MeshDistanceMaterial,\n\t\tMeshBasicMaterial: MeshBasicMaterial,\n\t\tMeshMatcapMaterial: MeshMatcapMaterial,\n\t\tLineDashedMaterial: LineDashedMaterial,\n\t\tLineBasicMaterial: LineBasicMaterial,\n\t\tMaterial: Material\n\t});\n\n\tvar AnimationUtils = {\n\t\t// same as Array.prototype.slice, but also works on typed arrays\n\t\tarraySlice: function arraySlice(array, from, to) {\n\t\t\tif (AnimationUtils.isTypedArray(array)) {\n\t\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\t\treturn new array.constructor(array.subarray(from, to !== undefined ? to : array.length));\n\t\t\t}\n\n\t\t\treturn array.slice(from, to);\n\t\t},\n\t\t// converts an array to a specific type\n\t\tconvertArray: function convertArray(array, type, forceClone) {\n\t\t\tif (!array || // let 'undefined' and 'null' pass\n\t\t\t!forceClone && array.constructor === type) return array;\n\n\t\t\tif (typeof type.BYTES_PER_ELEMENT === 'number') {\n\t\t\t\treturn new type(array); // create typed array\n\t\t\t}\n\n\t\t\treturn Array.prototype.slice.call(array); // create Array\n\t\t},\n\t\tisTypedArray: function isTypedArray(object) {\n\t\t\treturn ArrayBuffer.isView(object) && !(object instanceof DataView);\n\t\t},\n\t\t// returns an array by which times and values can be sorted\n\t\tgetKeyframeOrder: function getKeyframeOrder(times) {\n\t\t\tfunction compareTime(i, j) {\n\t\t\t\treturn times[i] - times[j];\n\t\t\t}\n\n\t\t\tvar n = times.length;\n\t\t\tvar result = new Array(n);\n\n\t\t\tfor (var i = 0; i !== n; ++i) {\n\t\t\t\tresult[i] = i;\n\t\t\t}\n\n\t\t\tresult.sort(compareTime);\n\t\t\treturn result;\n\t\t},\n\t\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\t\tsortedArray: function sortedArray(values, stride, order) {\n\t\t\tvar nValues = values.length;\n\t\t\tvar result = new values.constructor(nValues);\n\n\t\t\tfor (var i = 0, dstOffset = 0; dstOffset !== nValues; ++i) {\n\t\t\t\tvar srcOffset = order[i] * stride;\n\n\t\t\t\tfor (var j = 0; j !== stride; ++j) {\n\t\t\t\t\tresult[dstOffset++] = values[srcOffset + j];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t\t// function for parsing AOS keyframe formats\n\t\tflattenJSON: function flattenJSON(jsonKeys, times, values, valuePropertyName) {\n\t\t\tvar i = 1,\n\t\t\t\t\tkey = jsonKeys[0];\n\n\t\t\twhile (key !== undefined && key[valuePropertyName] === undefined) {\n\t\t\t\tkey = jsonKeys[i++];\n\t\t\t}\n\n\t\t\tif (key === undefined) return; // no data\n\n\t\t\tvar value = key[valuePropertyName];\n\t\t\tif (value === undefined) return; // no data\n\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tdo {\n\t\t\t\t\tvalue = key[valuePropertyName];\n\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\ttimes.push(key.time);\n\t\t\t\t\t\tvalues.push.apply(values, value); // push all elements\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[i++];\n\t\t\t\t} while (key !== undefined);\n\t\t\t} else if (value.toArray !== undefined) {\n\t\t\t\t// ...assume THREE.Math-ish\n\t\t\t\tdo {\n\t\t\t\t\tvalue = key[valuePropertyName];\n\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\ttimes.push(key.time);\n\t\t\t\t\t\tvalue.toArray(values, values.length);\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[i++];\n\t\t\t\t} while (key !== undefined);\n\t\t\t} else {\n\t\t\t\t// otherwise push as-is\n\t\t\t\tdo {\n\t\t\t\t\tvalue = key[valuePropertyName];\n\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\ttimes.push(key.time);\n\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[i++];\n\t\t\t\t} while (key !== undefined);\n\t\t\t}\n\t\t},\n\t\tsubclip: function subclip(sourceClip, name, startFrame, endFrame, fps) {\n\t\t\tif (fps === void 0) {\n\t\t\t\tfps = 30;\n\t\t\t}\n\n\t\t\tvar clip = sourceClip.clone();\n\t\t\tclip.name = name;\n\t\t\tvar tracks = [];\n\n\t\t\tfor (var i = 0; i < clip.tracks.length; ++i) {\n\t\t\t\tvar track = clip.tracks[i];\n\t\t\t\tvar valueSize = track.getValueSize();\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\tfor (var j = 0; j < track.times.length; ++j) {\n\t\t\t\t\tvar frame = track.times[j] * fps;\n\t\t\t\t\tif (frame < startFrame || frame >= endFrame) continue;\n\t\t\t\t\ttimes.push(track.times[j]);\n\n\t\t\t\t\tfor (var k = 0; k < valueSize; ++k) {\n\t\t\t\t\t\tvalues.push(track.values[j * valueSize + k]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (times.length === 0) continue;\n\t\t\t\ttrack.times = AnimationUtils.convertArray(times, track.times.constructor);\n\t\t\t\ttrack.values = AnimationUtils.convertArray(values, track.values.constructor);\n\t\t\t\ttracks.push(track);\n\t\t\t}\n\n\t\t\tclip.tracks = tracks; // find minimum .times value across all tracks in the trimmed clip\n\n\t\t\tvar minStartTime = Infinity;\n\n\t\t\tfor (var _i = 0; _i < clip.tracks.length; ++_i) {\n\t\t\t\tif (minStartTime > clip.tracks[_i].times[0]) {\n\t\t\t\t\tminStartTime = clip.tracks[_i].times[0];\n\t\t\t\t}\n\t\t\t} // shift all tracks such that clip begins at t=0\n\n\n\t\t\tfor (var _i2 = 0; _i2 < clip.tracks.length; ++_i2) {\n\t\t\t\tclip.tracks[_i2].shift(-1 * minStartTime);\n\t\t\t}\n\n\t\t\tclip.resetDuration();\n\t\t\treturn clip;\n\t\t},\n\t\tmakeClipAdditive: function makeClipAdditive(targetClip, referenceFrame, referenceClip, fps) {\n\t\t\tif (referenceFrame === void 0) {\n\t\t\t\treferenceFrame = 0;\n\t\t\t}\n\n\t\t\tif (referenceClip === void 0) {\n\t\t\t\treferenceClip = targetClip;\n\t\t\t}\n\n\t\t\tif (fps === void 0) {\n\t\t\t\tfps = 30;\n\t\t\t}\n\n\t\t\tif (fps <= 0) fps = 30;\n\t\t\tvar numTracks = referenceClip.tracks.length;\n\t\t\tvar referenceTime = referenceFrame / fps; // Make each track's values relative to the values at the reference frame\n\n\t\t\tvar _loop = function _loop(i) {\n\t\t\t\tvar referenceTrack = referenceClip.tracks[i];\n\t\t\t\tvar referenceTrackType = referenceTrack.ValueTypeName; // Skip this track if it's non-numeric\n\n\t\t\t\tif (referenceTrackType === 'bool' || referenceTrackType === 'string') return \"continue\"; // Find the track in the target clip whose name and type matches the reference track\n\n\t\t\t\tvar targetTrack = targetClip.tracks.find(function (track) {\n\t\t\t\t\treturn track.name === referenceTrack.name && track.ValueTypeName === referenceTrackType;\n\t\t\t\t});\n\t\t\t\tif (targetTrack === undefined) return \"continue\";\n\t\t\t\tvar referenceOffset = 0;\n\t\t\t\tvar referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\t\tif (referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) {\n\t\t\t\t\treferenceOffset = referenceValueSize / 3;\n\t\t\t\t}\n\n\t\t\t\tvar targetOffset = 0;\n\t\t\t\tvar targetValueSize = targetTrack.getValueSize();\n\n\t\t\t\tif (targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) {\n\t\t\t\t\ttargetOffset = targetValueSize / 3;\n\t\t\t\t}\n\n\t\t\t\tvar lastIndex = referenceTrack.times.length - 1;\n\t\t\t\tvar referenceValue = void 0; // Find the value to subtract out of the track\n\n\t\t\t\tif (referenceTime <= referenceTrack.times[0]) {\n\t\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\t\tvar startIndex = referenceOffset;\n\t\t\t\t\tvar endIndex = referenceValueSize - referenceOffset;\n\t\t\t\t\treferenceValue = AnimationUtils.arraySlice(referenceTrack.values, startIndex, endIndex);\n\t\t\t\t} else if (referenceTime >= referenceTrack.times[lastIndex]) {\n\t\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\t\tvar _startIndex = lastIndex * referenceValueSize + referenceOffset;\n\n\t\t\t\t\tvar _endIndex = _startIndex + referenceValueSize - referenceOffset;\n\n\t\t\t\t\treferenceValue = AnimationUtils.arraySlice(referenceTrack.values, _startIndex, _endIndex);\n\t\t\t\t} else {\n\t\t\t\t\t// Interpolate to the reference value\n\t\t\t\t\tvar interpolant = referenceTrack.createInterpolant();\n\t\t\t\t\tvar _startIndex2 = referenceOffset;\n\n\t\t\t\t\tvar _endIndex2 = referenceValueSize - referenceOffset;\n\n\t\t\t\t\tinterpolant.evaluate(referenceTime);\n\t\t\t\t\treferenceValue = AnimationUtils.arraySlice(interpolant.resultBuffer, _startIndex2, _endIndex2);\n\t\t\t\t} // Conjugate the quaternion\n\n\n\t\t\t\tif (referenceTrackType === 'quaternion') {\n\t\t\t\t\tvar referenceQuat = new Quaternion().fromArray(referenceValue).normalize().conjugate();\n\t\t\t\t\treferenceQuat.toArray(referenceValue);\n\t\t\t\t} // Subtract the reference value from all of the track values\n\n\n\t\t\t\tvar numTimes = targetTrack.times.length;\n\n\t\t\t\tfor (var j = 0; j < numTimes; ++j) {\n\t\t\t\t\tvar valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\t\tif (referenceTrackType === 'quaternion') {\n\t\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(targetTrack.values, valueStart, referenceValue, 0, targetTrack.values, valueStart);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar valueEnd = targetValueSize - targetOffset * 2; // Subtract each value for all other numeric track types\n\n\t\t\t\t\t\tfor (var k = 0; k < valueEnd; ++k) {\n\t\t\t\t\t\t\ttargetTrack.values[valueStart + k] -= referenceValue[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor (var i = 0; i < numTracks; ++i) {\n\t\t\t\tvar _ret = _loop(i);\n\n\t\t\t\tif (_ret === \"continue\") continue;\n\t\t\t}\n\n\t\t\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\t\t\treturn targetClip;\n\t\t}\n\t};\n\n\t/**\n\t * Abstract base class of interpolants over parametric samples.\n\t *\n\t * The parameter domain is one dimensional, typically the time or a path\n\t * along a curve defined by the data.\n\t *\n\t * The sample values can have any dimensionality and derived classes may\n\t * apply special interpretations to the data.\n\t *\n\t * This class provides the interval seek in a Template Method, deferring\n\t * the actual interpolation to derived classes.\n\t *\n\t * Time complexity is O(1) for linear access crossing at most two points\n\t * and O(log N) for random access, where N is the number of positions.\n\t *\n\t * References:\n\t *\n\t * \t\thttp://www.oodesign.com/template-method-pattern.html\n\t *\n\t */\n\tfunction Interpolant(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\t\tthis.resultBuffer = resultBuffer !== undefined ? resultBuffer : new sampleValues.constructor(sampleSize);\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\t}\n\n\tObject.assign(Interpolant.prototype, {\n\t\tevaluate: function evaluate(t) {\n\t\t\tvar pp = this.parameterPositions;\n\t\t\tvar i1 = this._cachedIndex,\n\t\t\t\t\tt1 = pp[i1],\n\t\t\t\t\tt0 = pp[i1 - 1];\n\n\t\t\tvalidate_interval: {\n\t\t\t\tseek: {\n\t\t\t\t\tvar right;\n\n\t\t\t\t\tlinear_scan: {\n\t\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t\t//- slower code:\n\t\t\t\t\t\t//-\n\t\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\t\tforward_scan: if (!(t < t1)) {\n\t\t\t\t\t\t\tfor (var giveUpAt = i1 + 2;;) {\n\t\t\t\t\t\t\t\tif (t1 === undefined) {\n\t\t\t\t\t\t\t\t\tif (t < t0) break forward_scan; // after end\n\n\t\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\t\treturn this.afterEnd_(i1 - 1, t, t0);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (i1 === giveUpAt) break; // this loop\n\n\t\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\t\tt1 = pp[++i1];\n\n\t\t\t\t\t\t\t\tif (t < t1) {\n\t\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\t\tbreak seek;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} // prepare binary search on the right side of the index\n\n\n\t\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\t\tbreak linear_scan;\n\t\t\t\t\t\t} //- slower code:\n\t\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\n\n\t\t\t\t\t\tif (!(t >= t0)) {\n\t\t\t\t\t\t\t// looping?\n\t\t\t\t\t\t\tvar t1global = pp[1];\n\n\t\t\t\t\t\t\tif (t < t1global) {\n\t\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\n\t\t\t\t\t\t\t\tt0 = t1global;\n\t\t\t\t\t\t\t} // linear reverse scan\n\n\n\t\t\t\t\t\t\tfor (var _giveUpAt = i1 - 2;;) {\n\t\t\t\t\t\t\t\tif (t0 === undefined) {\n\t\t\t\t\t\t\t\t\t// before start\n\t\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\t\treturn this.beforeStart_(0, t, t1);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (i1 === _giveUpAt) break; // this loop\n\n\t\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\t\tt0 = pp[--i1 - 1];\n\n\t\t\t\t\t\t\t\tif (t >= t0) {\n\t\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\t\tbreak seek;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} // prepare binary search on the left side of the index\n\n\n\t\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\t\tbreak linear_scan;\n\t\t\t\t\t\t} // the interval is valid\n\n\n\t\t\t\t\t\tbreak validate_interval;\n\t\t\t\t\t} // linear scan\n\t\t\t\t\t// binary search\n\n\n\t\t\t\t\twhile (i1 < right) {\n\t\t\t\t\t\tvar mid = i1 + right >>> 1;\n\n\t\t\t\t\t\tif (t < pp[mid]) {\n\t\t\t\t\t\t\tright = mid;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ti1 = mid + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tt1 = pp[i1];\n\t\t\t\t\tt0 = pp[i1 - 1]; // check boundary cases, again\n\n\t\t\t\t\tif (t0 === undefined) {\n\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\treturn this.beforeStart_(0, t, t1);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (t1 === undefined) {\n\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\treturn this.afterEnd_(i1 - 1, t0, t);\n\t\t\t\t\t}\n\t\t\t\t} // seek\n\n\n\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\tthis.intervalChanged_(i1, t0, t1);\n\t\t\t} // validate_interval\n\n\n\t\t\treturn this.interpolate_(i1, t0, t, t1);\n\t\t},\n\t\tsettings: null,\n\t\t// optional, subclass-specific settings structure\n\t\t// Note: The indirection allows central control of many interpolants.\n\t\t// --- Protected interface\n\t\tDefaultSettings_: {},\n\t\tgetSettings_: function getSettings_() {\n\t\t\treturn this.settings || this.DefaultSettings_;\n\t\t},\n\t\tcopySampleValue_: function copySampleValue_(index) {\n\t\t\t// copies a sample value to the result buffer\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\t\tvalues = this.sampleValues,\n\t\t\t\t\tstride = this.valueSize,\n\t\t\t\t\toffset = index * stride;\n\n\t\t\tfor (var i = 0; i !== stride; ++i) {\n\t\t\t\tresult[i] = values[offset + i];\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t\t// Template methods for derived classes:\n\t\tinterpolate_: function interpolate_()\n\t\t/* i1, t0, t, t1 */\n\t\t{\n\t\t\tthrow new Error('call to abstract method'); // implementations shall return this.resultBuffer\n\t\t},\n\t\tintervalChanged_: function intervalChanged_()\n\t\t/* i1, t0, t1 */\n\t\t{// empty\n\t\t}\n\t}); // DECLARE ALIAS AFTER assign prototype\n\n\tObject.assign(Interpolant.prototype, {\n\t\t//( 0, t, t0 ), returns this.resultBuffer\n\t\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\t\t//( N-1, tN-1, t ), returns this.resultBuffer\n\t\tafterEnd_: Interpolant.prototype.copySampleValue_\n\t});\n\n\t/**\n\t * Fast and simple cubic spline interpolant.\n\t *\n\t * It was derived from a Hermitian construction setting the first derivative\n\t * at each sample position to the linear slope between neighboring positions\n\t * over their parameter interval.\n\t */\n\n\tfunction CubicInterpolant(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n\t\tInterpolant.call(this, parameterPositions, sampleValues, sampleSize, resultBuffer);\n\t\tthis._weightPrev = -0;\n\t\tthis._offsetPrev = -0;\n\t\tthis._weightNext = -0;\n\t\tthis._offsetNext = -0;\n\t}\n\n\tCubicInterpolant.prototype = Object.assign(Object.create(Interpolant.prototype), {\n\t\tconstructor: CubicInterpolant,\n\t\tDefaultSettings_: {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t},\n\t\tintervalChanged_: function intervalChanged_(i1, t0, t1) {\n\t\t\tvar pp = this.parameterPositions;\n\t\t\tvar iPrev = i1 - 2,\n\t\t\t\t\tiNext = i1 + 1,\n\t\t\t\t\ttPrev = pp[iPrev],\n\t\t\t\t\ttNext = pp[iNext];\n\n\t\t\tif (tPrev === undefined) {\n\t\t\t\tswitch (this.getSettings_().endingStart) {\n\t\t\t\t\tcase ZeroSlopeEnding:\n\t\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\t\tiPrev = i1;\n\t\t\t\t\t\ttPrev = 2 * t0 - t1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase WrapAroundEnding:\n\t\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\t\ttPrev = t0 + pp[iPrev] - pp[iPrev + 1];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// ZeroCurvatureEnding\n\t\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\t\tiPrev = i1;\n\t\t\t\t\t\ttPrev = t1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tNext === undefined) {\n\t\t\t\tswitch (this.getSettings_().endingEnd) {\n\t\t\t\t\tcase ZeroSlopeEnding:\n\t\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\t\tiNext = i1;\n\t\t\t\t\t\ttNext = 2 * t1 - t0;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase WrapAroundEnding:\n\t\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\t\tiNext = 1;\n\t\t\t\t\t\ttNext = t1 + pp[1] - pp[0];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// ZeroCurvatureEnding\n\t\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\t\ttNext = t0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar halfDt = (t1 - t0) * 0.5,\n\t\t\t\t\tstride = this.valueSize;\n\t\t\tthis._weightPrev = halfDt / (t0 - tPrev);\n\t\t\tthis._weightNext = halfDt / (tNext - t1);\n\t\t\tthis._offsetPrev = iPrev * stride;\n\t\t\tthis._offsetNext = iNext * stride;\n\t\t},\n\t\tinterpolate_: function interpolate_(i1, t0, t, t1) {\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\t\tvalues = this.sampleValues,\n\t\t\t\t\tstride = this.valueSize,\n\t\t\t\t\to1 = i1 * stride,\n\t\t\t\t\to0 = o1 - stride,\n\t\t\t\t\toP = this._offsetPrev,\n\t\t\t\t\toN = this._offsetNext,\n\t\t\t\t\twP = this._weightPrev,\n\t\t\t\t\twN = this._weightNext,\n\t\t\t\t\tp = (t - t0) / (t1 - t0),\n\t\t\t\t\tpp = p * p,\n\t\t\t\t\tppp = pp * p; // evaluate polynomials\n\n\t\t\tvar sP = -wP * ppp + 2 * wP * pp - wP * p;\n\t\t\tvar s0 = (1 + wP) * ppp + (-1.5 - 2 * wP) * pp + (-0.5 + wP) * p + 1;\n\t\t\tvar s1 = (-1 - wN) * ppp + (1.5 + wN) * pp + 0.5 * p;\n\t\t\tvar sN = wN * ppp - wN * pp; // combine data linearly\n\n\t\t\tfor (var i = 0; i !== stride; ++i) {\n\t\t\t\tresult[i] = sP * values[oP + i] + s0 * values[o0 + i] + s1 * values[o1 + i] + sN * values[oN + i];\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t});\n\n\tfunction LinearInterpolant(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n\t\tInterpolant.call(this, parameterPositions, sampleValues, sampleSize, resultBuffer);\n\t}\n\n\tLinearInterpolant.prototype = Object.assign(Object.create(Interpolant.prototype), {\n\t\tconstructor: LinearInterpolant,\n\t\tinterpolate_: function interpolate_(i1, t0, t, t1) {\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\t\tvalues = this.sampleValues,\n\t\t\t\t\tstride = this.valueSize,\n\t\t\t\t\toffset1 = i1 * stride,\n\t\t\t\t\toffset0 = offset1 - stride,\n\t\t\t\t\tweight1 = (t - t0) / (t1 - t0),\n\t\t\t\t\tweight0 = 1 - weight1;\n\n\t\t\tfor (var i = 0; i !== stride; ++i) {\n\t\t\t\tresult[i] = values[offset0 + i] * weight0 + values[offset1 + i] * weight1;\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t});\n\n\t/**\n\t *\n\t * Interpolant that evaluates to the sample value at the position preceeding\n\t * the parameter.\n\t */\n\n\tfunction DiscreteInterpolant(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n\t\tInterpolant.call(this, parameterPositions, sampleValues, sampleSize, resultBuffer);\n\t}\n\n\tDiscreteInterpolant.prototype = Object.assign(Object.create(Interpolant.prototype), {\n\t\tconstructor: DiscreteInterpolant,\n\t\tinterpolate_: function interpolate_(i1\n\t\t/*, t0, t, t1 */\n\t\t) {\n\t\t\treturn this.copySampleValue_(i1 - 1);\n\t\t}\n\t});\n\n\tfunction KeyframeTrack(name, times, values, interpolation) {\n\t\tif (name === undefined) throw new Error('THREE.KeyframeTrack: track name is undefined');\n\t\tif (times === undefined || times.length === 0) throw new Error('THREE.KeyframeTrack: no keyframes in track named ' + name);\n\t\tthis.name = name;\n\t\tthis.times = AnimationUtils.convertArray(times, this.TimeBufferType);\n\t\tthis.values = AnimationUtils.convertArray(values, this.ValueBufferType);\n\t\tthis.setInterpolation(interpolation || this.DefaultInterpolation);\n\t} // Static methods\n\n\n\tObject.assign(KeyframeTrack, {\n\t\t// Serialization (in static context, because of constructor invocation\n\t\t// and automatic invocation of .toJSON):\n\t\ttoJSON: function toJSON(track) {\n\t\t\tvar trackType = track.constructor;\n\t\t\tvar json; // derived classes can define a static toJSON method\n\n\t\t\tif (trackType.toJSON !== undefined) {\n\t\t\t\tjson = trackType.toJSON(track);\n\t\t\t} else {\n\t\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\t\tjson = {\n\t\t\t\t\t'name': track.name,\n\t\t\t\t\t'times': AnimationUtils.convertArray(track.times, Array),\n\t\t\t\t\t'values': AnimationUtils.convertArray(track.values, Array)\n\t\t\t\t};\n\t\t\t\tvar interpolation = track.getInterpolation();\n\n\t\t\t\tif (interpolation !== track.DefaultInterpolation) {\n\t\t\t\t\tjson.interpolation = interpolation;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\t\treturn json;\n\t\t}\n\t});\n\tObject.assign(KeyframeTrack.prototype, {\n\t\tconstructor: KeyframeTrack,\n\t\tTimeBufferType: Float32Array,\n\t\tValueBufferType: Float32Array,\n\t\tDefaultInterpolation: InterpolateLinear,\n\t\tInterpolantFactoryMethodDiscrete: function InterpolantFactoryMethodDiscrete(result) {\n\t\t\treturn new DiscreteInterpolant(this.times, this.values, this.getValueSize(), result);\n\t\t},\n\t\tInterpolantFactoryMethodLinear: function InterpolantFactoryMethodLinear(result) {\n\t\t\treturn new LinearInterpolant(this.times, this.values, this.getValueSize(), result);\n\t\t},\n\t\tInterpolantFactoryMethodSmooth: function InterpolantFactoryMethodSmooth(result) {\n\t\t\treturn new CubicInterpolant(this.times, this.values, this.getValueSize(), result);\n\t\t},\n\t\tsetInterpolation: function setInterpolation(interpolation) {\n\t\t\tvar factoryMethod;\n\n\t\t\tswitch (interpolation) {\n\t\t\t\tcase InterpolateDiscrete:\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase InterpolateLinear:\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase InterpolateSmooth:\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (factoryMethod === undefined) {\n\t\t\t\tvar message = 'unsupported interpolation for ' + this.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\t\tif (this.createInterpolant === undefined) {\n\t\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\t\tif (interpolation !== this.DefaultInterpolation) {\n\t\t\t\t\t\tthis.setInterpolation(this.DefaultInterpolation);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(message); // fatal, in this case\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.warn('THREE.KeyframeTrack:', message);\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tthis.createInterpolant = factoryMethod;\n\t\t\treturn this;\n\t\t},\n\t\tgetInterpolation: function getInterpolation() {\n\t\t\tswitch (this.createInterpolant) {\n\t\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\t\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\t\tcase this.InterpolantFactoryMethodLinear:\n\t\t\t\t\treturn InterpolateLinear;\n\n\t\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\t\t\t\t\treturn InterpolateSmooth;\n\t\t\t}\n\t\t},\n\t\tgetValueSize: function getValueSize() {\n\t\t\treturn this.values.length / this.times.length;\n\t\t},\n\t\t// move all keyframes either forwards or backwards in time\n\t\tshift: function shift(timeOffset) {\n\t\t\tif (timeOffset !== 0.0) {\n\t\t\t\tvar times = this.times;\n\n\t\t\t\tfor (var i = 0, n = times.length; i !== n; ++i) {\n\t\t\t\t\ttimes[i] += timeOffset;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\t\tscale: function scale(timeScale) {\n\t\t\tif (timeScale !== 1.0) {\n\t\t\t\tvar times = this.times;\n\n\t\t\t\tfor (var i = 0, n = times.length; i !== n; ++i) {\n\t\t\t\t\ttimes[i] *= timeScale;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\t\ttrim: function trim(startTime, endTime) {\n\t\t\tvar times = this.times,\n\t\t\t\t\tnKeys = times.length;\n\t\t\tvar from = 0,\n\t\t\t\t\tto = nKeys - 1;\n\n\t\t\twhile (from !== nKeys && times[from] < startTime) {\n\t\t\t\t++from;\n\t\t\t}\n\n\t\t\twhile (to !== -1 && times[to] > endTime) {\n\t\t\t\t--to;\n\t\t\t}\n\n\t\t\t++to; // inclusive -> exclusive bound\n\n\t\t\tif (from !== 0 || to !== nKeys) {\n\t\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\t\tif (from >= to) {\n\t\t\t\t\tto = Math.max(to, 1);\n\t\t\t\t\tfrom = to - 1;\n\t\t\t\t}\n\n\t\t\t\tvar stride = this.getValueSize();\n\t\t\t\tthis.times = AnimationUtils.arraySlice(times, from, to);\n\t\t\t\tthis.values = AnimationUtils.arraySlice(this.values, from * stride, to * stride);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\t\tvalidate: function validate() {\n\t\t\tvar valid = true;\n\t\t\tvar valueSize = this.getValueSize();\n\n\t\t\tif (valueSize - Math.floor(valueSize) !== 0) {\n\t\t\t\tconsole.error('THREE.KeyframeTrack: Invalid value size in track.', this);\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\tvar times = this.times,\n\t\t\t\t\tvalues = this.values,\n\t\t\t\t\tnKeys = times.length;\n\n\t\t\tif (nKeys === 0) {\n\t\t\t\tconsole.error('THREE.KeyframeTrack: Track is empty.', this);\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\tvar prevTime = null;\n\n\t\t\tfor (var i = 0; i !== nKeys; i++) {\n\t\t\t\tvar currTime = times[i];\n\n\t\t\t\tif (typeof currTime === 'number' && isNaN(currTime)) {\n\t\t\t\t\tconsole.error('THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime);\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (prevTime !== null && prevTime > currTime) {\n\t\t\t\t\tconsole.error('THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime);\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tprevTime = currTime;\n\t\t\t}\n\n\t\t\tif (values !== undefined) {\n\t\t\t\tif (AnimationUtils.isTypedArray(values)) {\n\t\t\t\t\tfor (var _i = 0, n = values.length; _i !== n; ++_i) {\n\t\t\t\t\t\tvar value = values[_i];\n\n\t\t\t\t\t\tif (isNaN(value)) {\n\t\t\t\t\t\t\tconsole.error('THREE.KeyframeTrack: Value is not a valid number.', this, _i, value);\n\t\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn valid;\n\t\t},\n\t\t// removes equivalent sequential keys as common in morph target sequences\n\t\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\t\toptimize: function optimize() {\n\t\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\t\tvar times = AnimationUtils.arraySlice(this.times),\n\t\t\t\t\tvalues = AnimationUtils.arraySlice(this.values),\n\t\t\t\t\tstride = this.getValueSize(),\n\t\t\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\t\t\t\t\tlastIndex = times.length - 1;\n\t\t\tvar writeIndex = 1;\n\n\t\t\tfor (var i = 1; i < lastIndex; ++i) {\n\t\t\t\tvar keep = false;\n\t\t\t\tvar time = times[i];\n\t\t\t\tvar timeNext = times[i + 1]; // remove adjacent keyframes scheduled at the same time\n\n\t\t\t\tif (time !== timeNext && (i !== 1 || time !== time[0])) {\n\t\t\t\t\tif (!smoothInterpolation) {\n\t\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\t\t\t\t\t\tvar offset = i * stride,\n\t\t\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\t\tfor (var j = 0; j !== stride; ++j) {\n\t\t\t\t\t\t\tvar value = values[offset + j];\n\n\t\t\t\t\t\t\tif (value !== values[offsetP + j] || value !== values[offsetN + j]) {\n\t\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t}\n\t\t\t\t} // in-place compaction\n\n\n\t\t\t\tif (keep) {\n\t\t\t\t\tif (i !== writeIndex) {\n\t\t\t\t\t\ttimes[writeIndex] = times[i];\n\t\t\t\t\t\tvar readOffset = i * stride,\n\t\t\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\t\tfor (var _j = 0; _j !== stride; ++_j) {\n\t\t\t\t\t\t\tvalues[writeOffset + _j] = values[readOffset + _j];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t++writeIndex;\n\t\t\t\t}\n\t\t\t} // flush last keyframe (compaction looks ahead)\n\n\n\t\t\tif (lastIndex > 0) {\n\t\t\t\ttimes[writeIndex] = times[lastIndex];\n\n\t\t\t\tfor (var _readOffset = lastIndex * stride, _writeOffset = writeIndex * stride, _j2 = 0; _j2 !== stride; ++_j2) {\n\t\t\t\t\tvalues[_writeOffset + _j2] = values[_readOffset + _j2];\n\t\t\t\t}\n\n\t\t\t\t++writeIndex;\n\t\t\t}\n\n\t\t\tif (writeIndex !== times.length) {\n\t\t\t\tthis.times = AnimationUtils.arraySlice(times, 0, writeIndex);\n\t\t\t\tthis.values = AnimationUtils.arraySlice(values, 0, writeIndex * stride);\n\t\t\t} else {\n\t\t\t\tthis.times = times;\n\t\t\t\tthis.values = values;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tclone: function clone() {\n\t\t\tvar times = AnimationUtils.arraySlice(this.times, 0);\n\t\t\tvar values = AnimationUtils.arraySlice(this.values, 0);\n\t\t\tvar TypedKeyframeTrack = this.constructor;\n\t\t\tvar track = new TypedKeyframeTrack(this.name, times, values); // Interpolant argument to constructor is not saved, so copy the factory method directly.\n\n\t\t\ttrack.createInterpolant = this.createInterpolant;\n\t\t\treturn track;\n\t\t}\n\t});\n\n\t/**\n\t * A Track of Boolean keyframe values.\n\t */\n\n\tfunction BooleanKeyframeTrack(name, times, values) {\n\t\tKeyframeTrack.call(this, name, times, values);\n\t}\n\n\tBooleanKeyframeTrack.prototype = Object.assign(Object.create(KeyframeTrack.prototype), {\n\t\tconstructor: BooleanKeyframeTrack,\n\t\tValueTypeName: 'bool',\n\t\tValueBufferType: Array,\n\t\tDefaultInterpolation: InterpolateDiscrete,\n\t\tInterpolantFactoryMethodLinear: undefined,\n\t\tInterpolantFactoryMethodSmooth: undefined // Note: Actually this track could have a optimized / compressed\n\t\t// representation of a single value and a custom interpolant that\n\t\t// computes \"firstValue ^ isOdd( index )\".\n\n\t});\n\n\t/**\n\t * A Track of keyframe values that represent color.\n\t */\n\n\tfunction ColorKeyframeTrack(name, times, values, interpolation) {\n\t\tKeyframeTrack.call(this, name, times, values, interpolation);\n\t}\n\n\tColorKeyframeTrack.prototype = Object.assign(Object.create(KeyframeTrack.prototype), {\n\t\tconstructor: ColorKeyframeTrack,\n\t\tValueTypeName: 'color' // ValueBufferType is inherited\n\t\t// DefaultInterpolation is inherited\n\t\t// Note: Very basic implementation and nothing special yet.\n\t\t// However, this is the place for color space parameterization.\n\n\t});\n\n\t/**\n\t * A Track of numeric keyframe values.\n\t */\n\n\tfunction NumberKeyframeTrack(name, times, values, interpolation) {\n\t\tKeyframeTrack.call(this, name, times, values, interpolation);\n\t}\n\n\tNumberKeyframeTrack.prototype = Object.assign(Object.create(KeyframeTrack.prototype), {\n\t\tconstructor: NumberKeyframeTrack,\n\t\tValueTypeName: 'number' // ValueBufferType is inherited\n\t\t// DefaultInterpolation is inherited\n\n\t});\n\n\t/**\n\t * Spherical linear unit quaternion interpolant.\n\t */\n\n\tfunction QuaternionLinearInterpolant(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n\t\tInterpolant.call(this, parameterPositions, sampleValues, sampleSize, resultBuffer);\n\t}\n\n\tQuaternionLinearInterpolant.prototype = Object.assign(Object.create(Interpolant.prototype), {\n\t\tconstructor: QuaternionLinearInterpolant,\n\t\tinterpolate_: function interpolate_(i1, t0, t, t1) {\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\t\tvalues = this.sampleValues,\n\t\t\t\t\tstride = this.valueSize,\n\t\t\t\t\talpha = (t - t0) / (t1 - t0);\n\t\t\tvar offset = i1 * stride;\n\n\t\t\tfor (var end = offset + stride; offset !== end; offset += 4) {\n\t\t\t\tQuaternion.slerpFlat(result, 0, values, offset - stride, values, offset, alpha);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t});\n\n\t/**\n\t * A Track of quaternion keyframe values.\n\t */\n\n\tfunction QuaternionKeyframeTrack(name, times, values, interpolation) {\n\t\tKeyframeTrack.call(this, name, times, values, interpolation);\n\t}\n\n\tQuaternionKeyframeTrack.prototype = Object.assign(Object.create(KeyframeTrack.prototype), {\n\t\tconstructor: QuaternionKeyframeTrack,\n\t\tValueTypeName: 'quaternion',\n\t\t// ValueBufferType is inherited\n\t\tDefaultInterpolation: InterpolateLinear,\n\t\tInterpolantFactoryMethodLinear: function InterpolantFactoryMethodLinear(result) {\n\t\t\treturn new QuaternionLinearInterpolant(this.times, this.values, this.getValueSize(), result);\n\t\t},\n\t\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n\t});\n\n\t/**\n\t * A Track that interpolates Strings\n\t */\n\n\tfunction StringKeyframeTrack(name, times, values, interpolation) {\n\t\tKeyframeTrack.call(this, name, times, values, interpolation);\n\t}\n\n\tStringKeyframeTrack.prototype = Object.assign(Object.create(KeyframeTrack.prototype), {\n\t\tconstructor: StringKeyframeTrack,\n\t\tValueTypeName: 'string',\n\t\tValueBufferType: Array,\n\t\tDefaultInterpolation: InterpolateDiscrete,\n\t\tInterpolantFactoryMethodLinear: undefined,\n\t\tInterpolantFactoryMethodSmooth: undefined\n\t});\n\n\t/**\n\t * A Track of vectored keyframe values.\n\t */\n\n\tfunction VectorKeyframeTrack(name, times, values, interpolation) {\n\t\tKeyframeTrack.call(this, name, times, values, interpolation);\n\t}\n\n\tVectorKeyframeTrack.prototype = Object.assign(Object.create(KeyframeTrack.prototype), {\n\t\tconstructor: VectorKeyframeTrack,\n\t\tValueTypeName: 'vector' // ValueBufferType is inherited\n\t\t// DefaultInterpolation is inherited\n\n\t});\n\n\tfunction AnimationClip(name, duration, tracks, blendMode) {\n\t\tif (duration === void 0) {\n\t\t\tduration = -1;\n\t\t}\n\n\t\tif (blendMode === void 0) {\n\t\t\tblendMode = NormalAnimationBlendMode;\n\t\t}\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\t\tthis.uuid = MathUtils.generateUUID(); // this means it should figure out its duration by scanning the tracks\n\n\t\tif (this.duration < 0) {\n\t\t\tthis.resetDuration();\n\t\t}\n\t}\n\n\tfunction getTrackTypeForValueTypeName(typeName) {\n\t\tswitch (typeName.toLowerCase()) {\n\t\t\tcase 'scalar':\n\t\t\tcase 'double':\n\t\t\tcase 'float':\n\t\t\tcase 'number':\n\t\t\tcase 'integer':\n\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\tcase 'vector':\n\t\t\tcase 'vector2':\n\t\t\tcase 'vector3':\n\t\t\tcase 'vector4':\n\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\tcase 'color':\n\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\tcase 'quaternion':\n\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\tcase 'bool':\n\t\t\tcase 'boolean':\n\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\tcase 'string':\n\t\t\t\treturn StringKeyframeTrack;\n\t\t}\n\n\t\tthrow new Error('THREE.KeyframeTrack: Unsupported typeName: ' + typeName);\n\t}\n\n\tfunction parseKeyframeTrack(json) {\n\t\tif (json.type === undefined) {\n\t\t\tthrow new Error('THREE.KeyframeTrack: track type undefined, can not parse');\n\t\t}\n\n\t\tvar trackType = getTrackTypeForValueTypeName(json.type);\n\n\t\tif (json.times === undefined) {\n\t\t\tvar times = [],\n\t\t\t\t\tvalues = [];\n\t\t\tAnimationUtils.flattenJSON(json.keys, times, values, 'value');\n\t\t\tjson.times = times;\n\t\t\tjson.values = values;\n\t\t} // derived classes can define a static parse method\n\n\n\t\tif (trackType.parse !== undefined) {\n\t\t\treturn trackType.parse(json);\n\t\t} else {\n\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\treturn new trackType(json.name, json.times, json.values, json.interpolation);\n\t\t}\n\t}\n\n\tObject.assign(AnimationClip, {\n\t\tparse: function parse(json) {\n\t\t\tvar tracks = [],\n\t\t\t\t\tjsonTracks = json.tracks,\n\t\t\t\t\tframeTime = 1.0 / (json.fps || 1.0);\n\n\t\t\tfor (var i = 0, n = jsonTracks.length; i !== n; ++i) {\n\t\t\t\ttracks.push(parseKeyframeTrack(jsonTracks[i]).scale(frameTime));\n\t\t\t}\n\n\t\t\tvar clip = new AnimationClip(json.name, json.duration, tracks, json.blendMode);\n\t\t\tclip.uuid = json.uuid;\n\t\t\treturn clip;\n\t\t},\n\t\ttoJSON: function toJSON(clip) {\n\t\t\tvar tracks = [],\n\t\t\t\t\tclipTracks = clip.tracks;\n\t\t\tvar json = {\n\t\t\t\t'name': clip.name,\n\t\t\t\t'duration': clip.duration,\n\t\t\t\t'tracks': tracks,\n\t\t\t\t'uuid': clip.uuid,\n\t\t\t\t'blendMode': clip.blendMode\n\t\t\t};\n\n\t\t\tfor (var i = 0, n = clipTracks.length; i !== n; ++i) {\n\t\t\t\ttracks.push(KeyframeTrack.toJSON(clipTracks[i]));\n\t\t\t}\n\n\t\t\treturn json;\n\t\t},\n\t\tCreateFromMorphTargetSequence: function CreateFromMorphTargetSequence(name, morphTargetSequence, fps, noLoop) {\n\t\t\tvar numMorphTargets = morphTargetSequence.length;\n\t\t\tvar tracks = [];\n\n\t\t\tfor (var i = 0; i < numMorphTargets; i++) {\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\t\t\t\ttimes.push((i + numMorphTargets - 1) % numMorphTargets, i, (i + 1) % numMorphTargets);\n\t\t\t\tvalues.push(0, 1, 0);\n\t\t\t\tvar order = AnimationUtils.getKeyframeOrder(times);\n\t\t\t\ttimes = AnimationUtils.sortedArray(times, 1, order);\n\t\t\t\tvalues = AnimationUtils.sortedArray(values, 1, order); // if there is a key at the first frame, duplicate it as the\n\t\t\t\t// last frame as well for perfect loop.\n\n\t\t\t\tif (!noLoop && times[0] === 0) {\n\t\t\t\t\ttimes.push(numMorphTargets);\n\t\t\t\t\tvalues.push(values[0]);\n\t\t\t\t}\n\n\t\t\t\ttracks.push(new NumberKeyframeTrack('.morphTargetInfluences[' + morphTargetSequence[i].name + ']', times, values).scale(1.0 / fps));\n\t\t\t}\n\n\t\t\treturn new AnimationClip(name, -1, tracks);\n\t\t},\n\t\tfindByName: function findByName(objectOrClipArray, name) {\n\t\t\tvar clipArray = objectOrClipArray;\n\n\t\t\tif (!Array.isArray(objectOrClipArray)) {\n\t\t\t\tvar o = objectOrClipArray;\n\t\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < clipArray.length; i++) {\n\t\t\t\tif (clipArray[i].name === name) {\n\t\t\t\t\treturn clipArray[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\tCreateClipsFromMorphTargetSequences: function CreateClipsFromMorphTargetSequences(morphTargets, fps, noLoop) {\n\t\t\tvar animationToMorphTargets = {}; // tested with https://regex101.com/ on trick sequences\n\t\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\n\t\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/; // sort morph target names into animation groups based\n\t\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\n\t\t\tfor (var i = 0, il = morphTargets.length; i < il; i++) {\n\t\t\t\tvar morphTarget = morphTargets[i];\n\t\t\t\tvar parts = morphTarget.name.match(pattern);\n\n\t\t\t\tif (parts && parts.length > 1) {\n\t\t\t\t\tvar name = parts[1];\n\t\t\t\t\tvar animationMorphTargets = animationToMorphTargets[name];\n\n\t\t\t\t\tif (!animationMorphTargets) {\n\t\t\t\t\t\tanimationToMorphTargets[name] = animationMorphTargets = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tanimationMorphTargets.push(morphTarget);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar clips = [];\n\n\t\t\tfor (var _name in animationToMorphTargets) {\n\t\t\t\tclips.push(AnimationClip.CreateFromMorphTargetSequence(_name, animationToMorphTargets[_name], fps, noLoop));\n\t\t\t}\n\n\t\t\treturn clips;\n\t\t},\n\t\t// parse the animation.hierarchy format\n\t\tparseAnimation: function parseAnimation(animation, bones) {\n\t\t\tif (!animation) {\n\t\t\t\tconsole.error('THREE.AnimationClip: No animation in JSONLoader data.');\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar addNonemptyTrack = function addNonemptyTrack(trackType, trackName, animationKeys, propertyName, destTracks) {\n\t\t\t\t// only return track if there are actually keys.\n\t\t\t\tif (animationKeys.length !== 0) {\n\t\t\t\t\tvar times = [];\n\t\t\t\t\tvar values = [];\n\t\t\t\t\tAnimationUtils.flattenJSON(animationKeys, times, values, propertyName); // empty keys are filtered out, so check again\n\n\t\t\t\t\tif (times.length !== 0) {\n\t\t\t\t\t\tdestTracks.push(new trackType(trackName, times, values));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar tracks = [];\n\t\t\tvar clipName = animation.name || 'default';\n\t\t\tvar fps = animation.fps || 30;\n\t\t\tvar blendMode = animation.blendMode; // automatic length determination in AnimationClip.\n\n\t\t\tvar duration = animation.length || -1;\n\t\t\tvar hierarchyTracks = animation.hierarchy || [];\n\n\t\t\tfor (var h = 0; h < hierarchyTracks.length; h++) {\n\t\t\t\tvar animationKeys = hierarchyTracks[h].keys; // skip empty tracks\n\n\t\t\t\tif (!animationKeys || animationKeys.length === 0) continue; // process morph targets\n\n\t\t\t\tif (animationKeys[0].morphTargets) {\n\t\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\t\tvar morphTargetNames = {};\n\t\t\t\t\tvar k = void 0;\n\n\t\t\t\t\tfor (k = 0; k < animationKeys.length; k++) {\n\t\t\t\t\t\tif (animationKeys[k].morphTargets) {\n\t\t\t\t\t\t\tfor (var m = 0; m < animationKeys[k].morphTargets.length; m++) {\n\t\t\t\t\t\t\t\tmorphTargetNames[animationKeys[k].morphTargets[m]] = -1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} // create a track for each morph target with all zero\n\t\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t\t// the morphTarget is named.\n\n\n\t\t\t\t\tfor (var morphTargetName in morphTargetNames) {\n\t\t\t\t\t\tvar times = [];\n\t\t\t\t\t\tvar values = [];\n\n\t\t\t\t\t\tfor (var _m = 0; _m !== animationKeys[k].morphTargets.length; ++_m) {\n\t\t\t\t\t\t\tvar animationKey = animationKeys[k];\n\t\t\t\t\t\t\ttimes.push(animationKey.time);\n\t\t\t\t\t\t\tvalues.push(animationKey.morphTarget === morphTargetName ? 1 : 0);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttracks.push(new NumberKeyframeTrack('.morphTargetInfluence[' + morphTargetName + ']', times, values));\n\t\t\t\t\t}\n\n\t\t\t\t\tduration = morphTargetNames.length * (fps || 1.0);\n\t\t\t\t} else {\n\t\t\t\t\t// ...assume skeletal animation\n\t\t\t\t\tvar boneName = '.bones[' + bones[h].name + ']';\n\t\t\t\t\taddNonemptyTrack(VectorKeyframeTrack, boneName + '.position', animationKeys, 'pos', tracks);\n\t\t\t\t\taddNonemptyTrack(QuaternionKeyframeTrack, boneName + '.quaternion', animationKeys, 'rot', tracks);\n\t\t\t\t\taddNonemptyTrack(VectorKeyframeTrack, boneName + '.scale', animationKeys, 'scl', tracks);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tracks.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar clip = new AnimationClip(clipName, duration, tracks, blendMode);\n\t\t\treturn clip;\n\t\t}\n\t});\n\tObject.assign(AnimationClip.prototype, {\n\t\tresetDuration: function resetDuration() {\n\t\t\tvar tracks = this.tracks;\n\t\t\tvar duration = 0;\n\n\t\t\tfor (var i = 0, n = tracks.length; i !== n; ++i) {\n\t\t\t\tvar track = this.tracks[i];\n\t\t\t\tduration = Math.max(duration, track.times[track.times.length - 1]);\n\t\t\t}\n\n\t\t\tthis.duration = duration;\n\t\t\treturn this;\n\t\t},\n\t\ttrim: function trim() {\n\t\t\tfor (var i = 0; i < this.tracks.length; i++) {\n\t\t\t\tthis.tracks[i].trim(0, this.duration);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tvalidate: function validate() {\n\t\t\tvar valid = true;\n\n\t\t\tfor (var i = 0; i < this.tracks.length; i++) {\n\t\t\t\tvalid = valid && this.tracks[i].validate();\n\t\t\t}\n\n\t\t\treturn valid;\n\t\t},\n\t\toptimize: function optimize() {\n\t\t\tfor (var i = 0; i < this.tracks.length; i++) {\n\t\t\t\tthis.tracks[i].optimize();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tclone: function clone() {\n\t\t\tvar tracks = [];\n\n\t\t\tfor (var i = 0; i < this.tracks.length; i++) {\n\t\t\t\ttracks.push(this.tracks[i].clone());\n\t\t\t}\n\n\t\t\treturn new AnimationClip(this.name, this.duration, tracks, this.blendMode);\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\treturn AnimationClip.toJSON(this);\n\t\t}\n\t});\n\n\tvar Cache = {\n\t\tenabled: false,\n\t\tfiles: {},\n\t\tadd: function add(key, file) {\n\t\t\tif (this.enabled === false) return; // console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\t\tthis.files[key] = file;\n\t\t},\n\t\tget: function get(key) {\n\t\t\tif (this.enabled === false) return; // console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\t\treturn this.files[key];\n\t\t},\n\t\tremove: function remove(key) {\n\t\t\tdelete this.files[key];\n\t\t},\n\t\tclear: function clear() {\n\t\t\tthis.files = {};\n\t\t}\n\t};\n\n\tfunction LoadingManager(onLoad, onProgress, onError) {\n\t\tvar scope = this;\n\t\tvar isLoading = false;\n\t\tvar itemsLoaded = 0;\n\t\tvar itemsTotal = 0;\n\t\tvar urlModifier = undefined;\n\t\tvar handlers = []; // Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function (url) {\n\t\t\titemsTotal++;\n\n\t\t\tif (isLoading === false) {\n\t\t\t\tif (scope.onStart !== undefined) {\n\t\t\t\t\tscope.onStart(url, itemsLoaded, itemsTotal);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tisLoading = true;\n\t\t};\n\n\t\tthis.itemEnd = function (url) {\n\t\t\titemsLoaded++;\n\n\t\t\tif (scope.onProgress !== undefined) {\n\t\t\t\tscope.onProgress(url, itemsLoaded, itemsTotal);\n\t\t\t}\n\n\t\t\tif (itemsLoaded === itemsTotal) {\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif (scope.onLoad !== undefined) {\n\t\t\t\t\tscope.onLoad();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.itemError = function (url) {\n\t\t\tif (scope.onError !== undefined) {\n\t\t\t\tscope.onError(url);\n\t\t\t}\n\t\t};\n\n\t\tthis.resolveURL = function (url) {\n\t\t\tif (urlModifier) {\n\t\t\t\treturn urlModifier(url);\n\t\t\t}\n\n\t\t\treturn url;\n\t\t};\n\n\t\tthis.setURLModifier = function (transform) {\n\t\t\turlModifier = transform;\n\t\t\treturn this;\n\t\t};\n\n\t\tthis.addHandler = function (regex, loader) {\n\t\t\thandlers.push(regex, loader);\n\t\t\treturn this;\n\t\t};\n\n\t\tthis.removeHandler = function (regex) {\n\t\t\tvar index = handlers.indexOf(regex);\n\n\t\t\tif (index !== -1) {\n\t\t\t\thandlers.splice(index, 2);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\tthis.getHandler = function (file) {\n\t\t\tfor (var i = 0, l = handlers.length; i < l; i += 2) {\n\t\t\t\tvar regex = handlers[i];\n\t\t\t\tvar loader = handlers[i + 1];\n\t\t\t\tif (regex.global) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif (regex.test(file)) {\n\t\t\t\t\treturn loader;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t};\n\t}\n\n\tvar DefaultLoadingManager = new LoadingManager();\n\n\tfunction Loader(manager) {\n\t\tthis.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\t}\n\n\tObject.assign(Loader.prototype, {\n\t\tload: function load()\n\t\t/* url, onLoad, onProgress, onError */\n\t\t{},\n\t\tloadAsync: function loadAsync(url, onProgress) {\n\t\t\tvar scope = this;\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tscope.load(url, resolve, onProgress, reject);\n\t\t\t});\n\t\t},\n\t\tparse: function parse()\n\t\t/* data */\n\t\t{},\n\t\tsetCrossOrigin: function setCrossOrigin(crossOrigin) {\n\t\t\tthis.crossOrigin = crossOrigin;\n\t\t\treturn this;\n\t\t},\n\t\tsetWithCredentials: function setWithCredentials(value) {\n\t\t\tthis.withCredentials = value;\n\t\t\treturn this;\n\t\t},\n\t\tsetPath: function setPath(path) {\n\t\t\tthis.path = path;\n\t\t\treturn this;\n\t\t},\n\t\tsetResourcePath: function setResourcePath(resourcePath) {\n\t\t\tthis.resourcePath = resourcePath;\n\t\t\treturn this;\n\t\t},\n\t\tsetRequestHeader: function setRequestHeader(requestHeader) {\n\t\t\tthis.requestHeader = requestHeader;\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tvar loading = {};\n\n\tfunction FileLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tFileLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: FileLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tif (url === undefined) url = '';\n\t\t\tif (this.path !== undefined) url = this.path + url;\n\t\t\turl = this.manager.resolveURL(url);\n\t\t\tvar scope = this;\n\t\t\tvar cached = Cache.get(url);\n\n\t\t\tif (cached !== undefined) {\n\t\t\t\tscope.manager.itemStart(url);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (onLoad) onLoad(cached);\n\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t}, 0);\n\t\t\t\treturn cached;\n\t\t\t} // Check if request is duplicate\n\n\n\t\t\tif (loading[url] !== undefined) {\n\t\t\t\tloading[url].push({\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonProgress: onProgress,\n\t\t\t\t\tonError: onError\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t} // Check for data: URI\n\n\n\t\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\t\tvar dataUriRegexResult = url.match(dataUriRegex);\n\t\t\tvar request; // Safari can not handle Data URIs through XMLHttpRequest so process manually\n\n\t\t\tif (dataUriRegexResult) {\n\t\t\t\tvar mimeType = dataUriRegexResult[1];\n\t\t\t\tvar isBase64 = !!dataUriRegexResult[2];\n\t\t\t\tvar data = dataUriRegexResult[3];\n\t\t\t\tdata = decodeURIComponent(data);\n\t\t\t\tif (isBase64) data = atob(data);\n\n\t\t\t\ttry {\n\t\t\t\t\tvar response;\n\t\t\t\t\tvar responseType = (this.responseType || '').toLowerCase();\n\n\t\t\t\t\tswitch (responseType) {\n\t\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\t\tcase 'blob':\n\t\t\t\t\t\t\tvar view = new Uint8Array(data.length);\n\n\t\t\t\t\t\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\t\t\t\t\t\tview[i] = data.charCodeAt(i);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (responseType === 'blob') {\n\t\t\t\t\t\t\t\tresponse = new Blob([view.buffer], {\n\t\t\t\t\t\t\t\t\ttype: mimeType\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresponse = view.buffer;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'document':\n\t\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\t\tresponse = parser.parseFromString(data, mimeType);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'json':\n\t\t\t\t\t\t\tresponse = JSON.parse(data);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// 'text' or other\n\t\t\t\t\t\t\tresponse = data;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t} // Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tif (onLoad) onLoad(response);\n\t\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t\t}, 0);\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tif (onError) onError(error);\n\t\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Initialise array for duplicate requests\n\t\t\t\tloading[url] = [];\n\t\t\t\tloading[url].push({\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonProgress: onProgress,\n\t\t\t\t\tonError: onError\n\t\t\t\t});\n\t\t\t\trequest = new XMLHttpRequest();\n\t\t\t\trequest.open('GET', url, true);\n\t\t\t\trequest.addEventListener('load', function (event) {\n\t\t\t\t\tvar response = this.response;\n\t\t\t\t\tvar callbacks = loading[url];\n\t\t\t\t\tdelete loading[url];\n\n\t\t\t\t\tif (this.status === 200 || this.status === 0) {\n\t\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\t\t\t\t\t\tif (this.status === 0) console.warn('THREE.FileLoader: HTTP Status 0 received.'); // Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t\t// error response bodies as proper responses to requests.\n\n\t\t\t\t\t\tCache.add(url, response);\n\n\t\t\t\t\t\tfor (var _i = 0, il = callbacks.length; _i < il; _i++) {\n\t\t\t\t\t\t\tvar callback = callbacks[_i];\n\t\t\t\t\t\t\tif (callback.onLoad) callback.onLoad(response);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (var _i2 = 0, _il = callbacks.length; _i2 < _il; _i2++) {\n\t\t\t\t\t\t\tvar _callback = callbacks[_i2];\n\t\t\t\t\t\t\tif (_callback.onError) _callback.onError(event);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t\trequest.addEventListener('progress', function (event) {\n\t\t\t\t\tvar callbacks = loading[url];\n\n\t\t\t\t\tfor (var _i3 = 0, il = callbacks.length; _i3 < il; _i3++) {\n\t\t\t\t\t\tvar callback = callbacks[_i3];\n\t\t\t\t\t\tif (callback.onProgress) callback.onProgress(event);\n\t\t\t\t\t}\n\t\t\t\t}, false);\n\t\t\t\trequest.addEventListener('error', function (event) {\n\t\t\t\t\tvar callbacks = loading[url];\n\t\t\t\t\tdelete loading[url];\n\n\t\t\t\t\tfor (var _i4 = 0, il = callbacks.length; _i4 < il; _i4++) {\n\t\t\t\t\t\tvar callback = callbacks[_i4];\n\t\t\t\t\t\tif (callback.onError) callback.onError(event);\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t}, false);\n\t\t\t\trequest.addEventListener('abort', function (event) {\n\t\t\t\t\tvar callbacks = loading[url];\n\t\t\t\t\tdelete loading[url];\n\n\t\t\t\t\tfor (var _i5 = 0, il = callbacks.length; _i5 < il; _i5++) {\n\t\t\t\t\t\tvar callback = callbacks[_i5];\n\t\t\t\t\t\tif (callback.onError) callback.onError(event);\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t}, false);\n\t\t\t\tif (this.responseType !== undefined) request.responseType = this.responseType;\n\t\t\t\tif (this.withCredentials !== undefined) request.withCredentials = this.withCredentials;\n\t\t\t\tif (request.overrideMimeType) request.overrideMimeType(this.mimeType !== undefined ? this.mimeType : 'text/plain');\n\n\t\t\t\tfor (var header in this.requestHeader) {\n\t\t\t\t\trequest.setRequestHeader(header, this.requestHeader[header]);\n\t\t\t\t}\n\n\t\t\t\trequest.send(null);\n\t\t\t}\n\n\t\t\tscope.manager.itemStart(url);\n\t\t\treturn request;\n\t\t},\n\t\tsetResponseType: function setResponseType(value) {\n\t\t\tthis.responseType = value;\n\t\t\treturn this;\n\t\t},\n\t\tsetMimeType: function setMimeType(value) {\n\t\t\tthis.mimeType = value;\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction AnimationLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tAnimationLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: AnimationLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tvar scope = this;\n\t\t\tvar loader = new FileLoader(scope.manager);\n\t\t\tloader.setPath(scope.path);\n\t\t\tloader.setRequestHeader(scope.requestHeader);\n\t\t\tloader.setWithCredentials(scope.withCredentials);\n\t\t\tloader.load(url, function (text) {\n\t\t\t\ttry {\n\t\t\t\t\tonLoad(scope.parse(JSON.parse(text)));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (onError) {\n\t\t\t\t\t\tonError(e);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t}\n\t\t\t}, onProgress, onError);\n\t\t},\n\t\tparse: function parse(json) {\n\t\t\tvar animations = [];\n\n\t\t\tfor (var i = 0; i < json.length; i++) {\n\t\t\t\tvar clip = AnimationClip.parse(json[i]);\n\t\t\t\tanimations.push(clip);\n\t\t\t}\n\n\t\t\treturn animations;\n\t\t}\n\t});\n\n\t/**\n\t * Abstract Base class to block based textures loader (dds, pvr, ...)\n\t *\n\t * Sub classes have to implement the parse() method which will be used in load().\n\t */\n\n\tfunction CompressedTextureLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tCompressedTextureLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: CompressedTextureLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tvar scope = this;\n\t\t\tvar images = [];\n\t\t\tvar texture = new CompressedTexture();\n\t\t\tvar loader = new FileLoader(this.manager);\n\t\t\tloader.setPath(this.path);\n\t\t\tloader.setResponseType('arraybuffer');\n\t\t\tloader.setRequestHeader(this.requestHeader);\n\t\t\tloader.setWithCredentials(scope.withCredentials);\n\t\t\tvar loaded = 0;\n\n\t\t\tfunction loadTexture(i) {\n\t\t\t\tloader.load(url[i], function (buffer) {\n\t\t\t\t\tvar texDatas = scope.parse(buffer, true);\n\t\t\t\t\timages[i] = {\n\t\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t\t};\n\t\t\t\t\tloaded += 1;\n\n\t\t\t\t\tif (loaded === 6) {\n\t\t\t\t\t\tif (texDatas.mipmapCount === 1) texture.minFilter = LinearFilter;\n\t\t\t\t\t\ttexture.image = images;\n\t\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\t\tif (onLoad) onLoad(texture);\n\t\t\t\t\t}\n\t\t\t\t}, onProgress, onError);\n\t\t\t}\n\n\t\t\tif (Array.isArray(url)) {\n\t\t\t\tfor (var i = 0, il = url.length; i < il; ++i) {\n\t\t\t\t\tloadTexture(i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// compressed cubemap texture stored in a single DDS file\n\t\t\t\tloader.load(url, function (buffer) {\n\t\t\t\t\tvar texDatas = scope.parse(buffer, true);\n\n\t\t\t\t\tif (texDatas.isCubemap) {\n\t\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\t\tfor (var f = 0; f < faces; f++) {\n\t\t\t\t\t\t\timages[f] = {\n\t\t\t\t\t\t\t\tmipmaps: []\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var _i = 0; _i < texDatas.mipmapCount; _i++) {\n\t\t\t\t\t\t\t\timages[f].mipmaps.push(texDatas.mipmaps[f * texDatas.mipmapCount + _i]);\n\t\t\t\t\t\t\t\timages[f].format = texDatas.format;\n\t\t\t\t\t\t\t\timages[f].width = texDatas.width;\n\t\t\t\t\t\t\t\timages[f].height = texDatas.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttexture.image = images;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (texDatas.mipmapCount === 1) {\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\tif (onLoad) onLoad(texture);\n\t\t\t\t}, onProgress, onError);\n\t\t\t}\n\n\t\t\treturn texture;\n\t\t}\n\t});\n\n\tfunction ImageLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tImageLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: ImageLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tif (this.path !== undefined) url = this.path + url;\n\t\t\turl = this.manager.resolveURL(url);\n\t\t\tvar scope = this;\n\t\t\tvar cached = Cache.get(url);\n\n\t\t\tif (cached !== undefined) {\n\t\t\t\tscope.manager.itemStart(url);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (onLoad) onLoad(cached);\n\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t}, 0);\n\t\t\t\treturn cached;\n\t\t\t}\n\n\t\t\tvar image = document.createElementNS('http://www.w3.org/1999/xhtml', 'img');\n\n\t\t\tfunction onImageLoad() {\n\t\t\t\timage.removeEventListener('load', onImageLoad, false);\n\t\t\t\timage.removeEventListener('error', onImageError, false);\n\t\t\t\tCache.add(url, this);\n\t\t\t\tif (onLoad) onLoad(this);\n\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t}\n\n\t\t\tfunction onImageError(event) {\n\t\t\t\timage.removeEventListener('load', onImageLoad, false);\n\t\t\t\timage.removeEventListener('error', onImageError, false);\n\t\t\t\tif (onError) onError(event);\n\t\t\t\tscope.manager.itemError(url);\n\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t}\n\n\t\t\timage.addEventListener('load', onImageLoad, false);\n\t\t\timage.addEventListener('error', onImageError, false);\n\n\t\t\tif (url.substr(0, 5) !== 'data:') {\n\t\t\t\tif (this.crossOrigin !== undefined) image.crossOrigin = this.crossOrigin;\n\t\t\t}\n\n\t\t\tscope.manager.itemStart(url);\n\t\t\timage.src = url;\n\t\t\treturn image;\n\t\t}\n\t});\n\n\tfunction CubeTextureLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tCubeTextureLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: CubeTextureLoader,\n\t\tload: function load(urls, onLoad, onProgress, onError) {\n\t\t\tvar texture = new CubeTexture();\n\t\t\tvar loader = new ImageLoader(this.manager);\n\t\t\tloader.setCrossOrigin(this.crossOrigin);\n\t\t\tloader.setPath(this.path);\n\t\t\tvar loaded = 0;\n\n\t\t\tfunction loadTexture(i) {\n\t\t\t\tloader.load(urls[i], function (image) {\n\t\t\t\t\ttexture.images[i] = image;\n\t\t\t\t\tloaded++;\n\n\t\t\t\t\tif (loaded === 6) {\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\t\tif (onLoad) onLoad(texture);\n\t\t\t\t\t}\n\t\t\t\t}, undefined, onError);\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < urls.length; ++i) {\n\t\t\t\tloadTexture(i);\n\t\t\t}\n\n\t\t\treturn texture;\n\t\t}\n\t});\n\n\t/**\n\t * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n\t *\n\t * Sub classes have to implement the parse() method which will be used in load().\n\t */\n\n\tfunction DataTextureLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tDataTextureLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: DataTextureLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tvar scope = this;\n\t\t\tvar texture = new DataTexture();\n\t\t\tvar loader = new FileLoader(this.manager);\n\t\t\tloader.setResponseType('arraybuffer');\n\t\t\tloader.setRequestHeader(this.requestHeader);\n\t\t\tloader.setPath(this.path);\n\t\t\tloader.setWithCredentials(scope.withCredentials);\n\t\t\tloader.load(url, function (buffer) {\n\t\t\t\tvar texData = scope.parse(buffer);\n\t\t\t\tif (!texData) return;\n\n\t\t\t\tif (texData.image !== undefined) {\n\t\t\t\t\ttexture.image = texData.image;\n\t\t\t\t} else if (texData.data !== undefined) {\n\t\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\t\ttexture.image.data = texData.data;\n\t\t\t\t}\n\n\t\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\t\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\t\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\t\tif (texData.format !== undefined) {\n\t\t\t\t\ttexture.format = texData.format;\n\t\t\t\t}\n\n\t\t\t\tif (texData.type !== undefined) {\n\t\t\t\t\ttexture.type = texData.type;\n\t\t\t\t}\n\n\t\t\t\tif (texData.mipmaps !== undefined) {\n\t\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\t\t\t\t}\n\n\t\t\t\tif (texData.mipmapCount === 1) {\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t}\n\n\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\tif (onLoad) onLoad(texture, texData);\n\t\t\t}, onProgress, onError);\n\t\t\treturn texture;\n\t\t}\n\t});\n\n\tfunction TextureLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tTextureLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: TextureLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tvar texture = new Texture();\n\t\t\tvar loader = new ImageLoader(this.manager);\n\t\t\tloader.setCrossOrigin(this.crossOrigin);\n\t\t\tloader.setPath(this.path);\n\t\t\tloader.load(url, function (image) {\n\t\t\t\ttexture.image = image; // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\n\t\t\t\tvar isJPEG = url.search(/\\.jpe?g($|\\?)/i) > 0 || url.search(/^data\\:image\\/jpeg/) === 0;\n\t\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif (onLoad !== undefined) {\n\t\t\t\t\tonLoad(texture);\n\t\t\t\t}\n\t\t\t}, onProgress, onError);\n\t\t\treturn texture;\n\t\t}\n\t});\n\n\t/**\n\t * Extensible curve object.\n\t *\n\t * Some common of curve methods:\n\t * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n\t * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n\t * .getPoints(), .getSpacedPoints()\n\t * .getLength()\n\t * .updateArcLengths()\n\t *\n\t * This following curves inherit from THREE.Curve:\n\t *\n\t * -- 2D curves --\n\t * THREE.ArcCurve\n\t * THREE.CubicBezierCurve\n\t * THREE.EllipseCurve\n\t * THREE.LineCurve\n\t * THREE.QuadraticBezierCurve\n\t * THREE.SplineCurve\n\t *\n\t * -- 3D curves --\n\t * THREE.CatmullRomCurve3\n\t * THREE.CubicBezierCurve3\n\t * THREE.LineCurve3\n\t * THREE.QuadraticBezierCurve3\n\t *\n\t * A series of curves can be represented as a THREE.CurvePath.\n\t *\n\t **/\n\n\tfunction Curve() {\n\t\tthis.type = 'Curve';\n\t\tthis.arcLengthDivisions = 200;\n\t}\n\n\tObject.assign(Curve.prototype, {\n\t\t// Virtual base class method to overwrite and implement in subclasses\n\t\t//\t- t [0 .. 1]\n\t\tgetPoint: function getPoint()\n\t\t/* t, optionalTarget */\n\t\t{\n\t\t\tconsole.warn('THREE.Curve: .getPoint() not implemented.');\n\t\t\treturn null;\n\t\t},\n\t\t// Get point at relative position in curve according to arc length\n\t\t// - u [0 .. 1]\n\t\tgetPointAt: function getPointAt(u, optionalTarget) {\n\t\t\tvar t = this.getUtoTmapping(u);\n\t\t\treturn this.getPoint(t, optionalTarget);\n\t\t},\n\t\t// Get sequence of points using getPoint( t )\n\t\tgetPoints: function getPoints(divisions) {\n\t\t\tif (divisions === void 0) {\n\t\t\t\tdivisions = 5;\n\t\t\t}\n\n\t\t\tvar points = [];\n\n\t\t\tfor (var d = 0; d <= divisions; d++) {\n\t\t\t\tpoints.push(this.getPoint(d / divisions));\n\t\t\t}\n\n\t\t\treturn points;\n\t\t},\n\t\t// Get sequence of points using getPointAt( u )\n\t\tgetSpacedPoints: function getSpacedPoints(divisions) {\n\t\t\tif (divisions === void 0) {\n\t\t\t\tdivisions = 5;\n\t\t\t}\n\n\t\t\tvar points = [];\n\n\t\t\tfor (var d = 0; d <= divisions; d++) {\n\t\t\t\tpoints.push(this.getPointAt(d / divisions));\n\t\t\t}\n\n\t\t\treturn points;\n\t\t},\n\t\t// Get total curve arc length\n\t\tgetLength: function getLength() {\n\t\t\tvar lengths = this.getLengths();\n\t\t\treturn lengths[lengths.length - 1];\n\t\t},\n\t\t// Get list of cumulative segment lengths\n\t\tgetLengths: function getLengths(divisions) {\n\t\t\tif (divisions === undefined) divisions = this.arcLengthDivisions;\n\n\t\t\tif (this.cacheArcLengths && this.cacheArcLengths.length === divisions + 1 && !this.needsUpdate) {\n\t\t\t\treturn this.cacheArcLengths;\n\t\t\t}\n\n\t\t\tthis.needsUpdate = false;\n\t\t\tvar cache = [];\n\t\t\tvar current,\n\t\t\t\t\tlast = this.getPoint(0);\n\t\t\tvar sum = 0;\n\t\t\tcache.push(0);\n\n\t\t\tfor (var p = 1; p <= divisions; p++) {\n\t\t\t\tcurrent = this.getPoint(p / divisions);\n\t\t\t\tsum += current.distanceTo(last);\n\t\t\t\tcache.push(sum);\n\t\t\t\tlast = current;\n\t\t\t}\n\n\t\t\tthis.cacheArcLengths = cache;\n\t\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\t\t},\n\t\tupdateArcLengths: function updateArcLengths() {\n\t\t\tthis.needsUpdate = true;\n\t\t\tthis.getLengths();\n\t\t},\n\t\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\t\tgetUtoTmapping: function getUtoTmapping(u, distance) {\n\t\t\tvar arcLengths = this.getLengths();\n\t\t\tvar i = 0;\n\t\t\tvar il = arcLengths.length;\n\t\t\tvar targetArcLength; // The targeted u distance value to get\n\n\t\t\tif (distance) {\n\t\t\t\ttargetArcLength = distance;\n\t\t\t} else {\n\t\t\t\ttargetArcLength = u * arcLengths[il - 1];\n\t\t\t} // binary search for the index with largest value smaller than target u distance\n\n\n\t\t\tvar low = 0,\n\t\t\t\t\thigh = il - 1,\n\t\t\t\t\tcomparison;\n\n\t\t\twhile (low <= high) {\n\t\t\t\ti = Math.floor(low + (high - low) / 2); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\t\tcomparison = arcLengths[i] - targetArcLength;\n\n\t\t\t\tif (comparison < 0) {\n\t\t\t\t\tlow = i + 1;\n\t\t\t\t} else if (comparison > 0) {\n\t\t\t\t\thigh = i - 1;\n\t\t\t\t} else {\n\t\t\t\t\thigh = i;\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = high;\n\n\t\t\tif (arcLengths[i] === targetArcLength) {\n\t\t\t\treturn i / (il - 1);\n\t\t\t} // we could get finer grain at lengths, or use simple interpolation between two points\n\n\n\t\t\tvar lengthBefore = arcLengths[i];\n\t\t\tvar lengthAfter = arcLengths[i + 1];\n\t\t\tvar segmentLength = lengthAfter - lengthBefore; // determine where we are between the 'before' and 'after' points\n\n\t\t\tvar segmentFraction = (targetArcLength - lengthBefore) / segmentLength; // add that fractional amount to t\n\n\t\t\tvar t = (i + segmentFraction) / (il - 1);\n\t\t\treturn t;\n\t\t},\n\t\t// Returns a unit vector tangent at t\n\t\t// In case any sub curve does not implement its tangent derivation,\n\t\t// 2 points a small delta apart will be used to find its gradient\n\t\t// which seems to give a reasonable approximation\n\t\tgetTangent: function getTangent(t, optionalTarget) {\n\t\t\tvar delta = 0.0001;\n\t\t\tvar t1 = t - delta;\n\t\t\tvar t2 = t + delta; // Capping in case of danger\n\n\t\t\tif (t1 < 0) t1 = 0;\n\t\t\tif (t2 > 1) t2 = 1;\n\t\t\tvar pt1 = this.getPoint(t1);\n\t\t\tvar pt2 = this.getPoint(t2);\n\t\t\tvar tangent = optionalTarget || (pt1.isVector2 ? new Vector2() : new Vector3());\n\t\t\ttangent.copy(pt2).sub(pt1).normalize();\n\t\t\treturn tangent;\n\t\t},\n\t\tgetTangentAt: function getTangentAt(u, optionalTarget) {\n\t\t\tvar t = this.getUtoTmapping(u);\n\t\t\treturn this.getTangent(t, optionalTarget);\n\t\t},\n\t\tcomputeFrenetFrames: function computeFrenetFrames(segments, closed) {\n\t\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\t\t\tvar normal = new Vector3();\n\t\t\tvar tangents = [];\n\t\t\tvar normals = [];\n\t\t\tvar binormals = [];\n\t\t\tvar vec = new Vector3();\n\t\t\tvar mat = new Matrix4(); // compute the tangent vectors for each segment on the curve\n\n\t\t\tfor (var i = 0; i <= segments; i++) {\n\t\t\t\tvar u = i / segments;\n\t\t\t\ttangents[i] = this.getTangentAt(u, new Vector3());\n\t\t\t\ttangents[i].normalize();\n\t\t\t} // select an initial normal vector perpendicular to the first tangent vector,\n\t\t\t// and in the direction of the minimum tangent xyz component\n\n\n\t\t\tnormals[0] = new Vector3();\n\t\t\tbinormals[0] = new Vector3();\n\t\t\tvar min = Number.MAX_VALUE;\n\t\t\tvar tx = Math.abs(tangents[0].x);\n\t\t\tvar ty = Math.abs(tangents[0].y);\n\t\t\tvar tz = Math.abs(tangents[0].z);\n\n\t\t\tif (tx <= min) {\n\t\t\t\tmin = tx;\n\t\t\t\tnormal.set(1, 0, 0);\n\t\t\t}\n\n\t\t\tif (ty <= min) {\n\t\t\t\tmin = ty;\n\t\t\t\tnormal.set(0, 1, 0);\n\t\t\t}\n\n\t\t\tif (tz <= min) {\n\t\t\t\tnormal.set(0, 0, 1);\n\t\t\t}\n\n\t\t\tvec.crossVectors(tangents[0], normal).normalize();\n\t\t\tnormals[0].crossVectors(tangents[0], vec);\n\t\t\tbinormals[0].crossVectors(tangents[0], normals[0]); // compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\t\tfor (var _i = 1; _i <= segments; _i++) {\n\t\t\t\tnormals[_i] = normals[_i - 1].clone();\n\t\t\t\tbinormals[_i] = binormals[_i - 1].clone();\n\t\t\t\tvec.crossVectors(tangents[_i - 1], tangents[_i]);\n\n\t\t\t\tif (vec.length() > Number.EPSILON) {\n\t\t\t\t\tvec.normalize();\n\t\t\t\t\tvar theta = Math.acos(MathUtils.clamp(tangents[_i - 1].dot(tangents[_i]), -1, 1)); // clamp for floating pt errors\n\n\t\t\t\t\tnormals[_i].applyMatrix4(mat.makeRotationAxis(vec, theta));\n\t\t\t\t}\n\n\t\t\t\tbinormals[_i].crossVectors(tangents[_i], normals[_i]);\n\t\t\t} // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\n\t\t\tif (closed === true) {\n\t\t\t\tvar _theta = Math.acos(MathUtils.clamp(normals[0].dot(normals[segments]), -1, 1));\n\n\t\t\t\t_theta /= segments;\n\n\t\t\t\tif (tangents[0].dot(vec.crossVectors(normals[0], normals[segments])) > 0) {\n\t\t\t\t\t_theta = -_theta;\n\t\t\t\t}\n\n\t\t\t\tfor (var _i2 = 1; _i2 <= segments; _i2++) {\n\t\t\t\t\t// twist a little...\n\t\t\t\t\tnormals[_i2].applyMatrix4(mat.makeRotationAxis(tangents[_i2], _theta * _i2));\n\n\t\t\t\t\tbinormals[_i2].crossVectors(tangents[_i2], normals[_i2]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttangents: tangents,\n\t\t\t\tnormals: normals,\n\t\t\t\tbinormals: binormals\n\t\t\t};\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Curve',\n\t\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t\t}\n\t\t\t};\n\t\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\t\tdata.type = this.type;\n\t\t\treturn data;\n\t\t},\n\t\tfromJSON: function fromJSON(json) {\n\t\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) {\n\t\tCurve.call(this);\n\t\tthis.type = 'EllipseCurve';\n\t\tthis.aX = aX || 0;\n\t\tthis.aY = aY || 0;\n\t\tthis.xRadius = xRadius || 1;\n\t\tthis.yRadius = yRadius || 1;\n\t\tthis.aStartAngle = aStartAngle || 0;\n\t\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\t\tthis.aClockwise = aClockwise || false;\n\t\tthis.aRotation = aRotation || 0;\n\t}\n\n\tEllipseCurve.prototype = Object.create(Curve.prototype);\n\tEllipseCurve.prototype.constructor = EllipseCurve;\n\tEllipseCurve.prototype.isEllipseCurve = true;\n\n\tEllipseCurve.prototype.getPoint = function (t, optionalTarget) {\n\t\tvar point = optionalTarget || new Vector2();\n\t\tvar twoPi = Math.PI * 2;\n\t\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tvar samePoints = Math.abs(deltaAngle) < Number.EPSILON; // ensures that deltaAngle is 0 .. 2 PI\n\n\t\twhile (deltaAngle < 0) {\n\t\t\tdeltaAngle += twoPi;\n\t\t}\n\n\t\twhile (deltaAngle > twoPi) {\n\t\t\tdeltaAngle -= twoPi;\n\t\t}\n\n\t\tif (deltaAngle < Number.EPSILON) {\n\t\t\tif (samePoints) {\n\t\t\t\tdeltaAngle = 0;\n\t\t\t} else {\n\t\t\t\tdeltaAngle = twoPi;\n\t\t\t}\n\t\t}\n\n\t\tif (this.aClockwise === true && !samePoints) {\n\t\t\tif (deltaAngle === twoPi) {\n\t\t\t\tdeltaAngle = -twoPi;\n\t\t\t} else {\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\t\t\t}\n\t\t}\n\n\t\tvar angle = this.aStartAngle + t * deltaAngle;\n\t\tvar x = this.aX + this.xRadius * Math.cos(angle);\n\t\tvar y = this.aY + this.yRadius * Math.sin(angle);\n\n\t\tif (this.aRotation !== 0) {\n\t\t\tvar cos = Math.cos(this.aRotation);\n\t\t\tvar sin = Math.sin(this.aRotation);\n\t\t\tvar tx = x - this.aX;\n\t\t\tvar ty = y - this.aY; // Rotate the point about the center of the ellipse.\n\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\t\t}\n\n\t\treturn point.set(x, y);\n\t};\n\n\tEllipseCurve.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\t\tthis.aClockwise = source.aClockwise;\n\t\tthis.aRotation = source.aRotation;\n\t\treturn this;\n\t};\n\n\tEllipseCurve.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\t\tdata.aClockwise = this.aClockwise;\n\t\tdata.aRotation = this.aRotation;\n\t\treturn data;\n\t};\n\n\tEllipseCurve.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\t\tthis.aClockwise = json.aClockwise;\n\t\tthis.aRotation = json.aRotation;\n\t\treturn this;\n\t};\n\n\tfunction ArcCurve(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {\n\t\tEllipseCurve.call(this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise);\n\t\tthis.type = 'ArcCurve';\n\t}\n\n\tArcCurve.prototype = Object.create(EllipseCurve.prototype);\n\tArcCurve.prototype.constructor = ArcCurve;\n\tArcCurve.prototype.isArcCurve = true;\n\n\t/**\n\t * Centripetal CatmullRom Curve - which is useful for avoiding\n\t * cusps and self-intersections in non-uniform catmull rom curves.\n\t * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n\t *\n\t * curve.type accepts centripetal(default), chordal and catmullrom\n\t * curve.tension is used for catmullrom which defaults to 0.5\n\t */\n\n\t/*\n\tBased on an optimized c++ solution in\n\t - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n\t - http://ideone.com/NoEbVM\n\n\tThis CubicPoly class could be used for reusing some variables and calculations,\n\tbut for three.js curve use, it could be possible inlined and flatten into a single function call\n\twhich can be placed in CurveUtils.\n\t*/\n\n\tfunction CubicPoly() {\n\t\tvar c0 = 0,\n\t\t\t\tc1 = 0,\n\t\t\t\tc2 = 0,\n\t\t\t\tc3 = 0;\n\t\t/*\n\t\t * Compute coefficients for a cubic polynomial\n\t\t *\t p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t\t * such that\n\t\t *\t p(0) = x0, p(1) = x1\n\t\t *\tand\n\t\t *\t p'(0) = t0, p'(1) = t1.\n\t\t */\n\n\t\tfunction init(x0, x1, t0, t1) {\n\t\t\tc0 = x0;\n\t\t\tc1 = t0;\n\t\t\tc2 = -3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\t\t}\n\n\t\treturn {\n\t\t\tinitCatmullRom: function initCatmullRom(x0, x1, x2, x3, tension) {\n\t\t\t\tinit(x1, x2, tension * (x2 - x0), tension * (x3 - x1));\n\t\t\t},\n\t\t\tinitNonuniformCatmullRom: function initNonuniformCatmullRom(x0, x1, x2, x3, dt0, dt1, dt2) {\n\t\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\t\tvar t1 = (x1 - x0) / dt0 - (x2 - x0) / (dt0 + dt1) + (x2 - x1) / dt1;\n\t\t\t\tvar t2 = (x2 - x1) / dt1 - (x3 - x1) / (dt1 + dt2) + (x3 - x2) / dt2; // rescale tangents for parametrization in [0,1]\n\n\t\t\t\tt1 *= dt1;\n\t\t\t\tt2 *= dt1;\n\t\t\t\tinit(x1, x2, t1, t2);\n\t\t\t},\n\t\t\tcalc: function calc(t) {\n\t\t\t\tvar t2 = t * t;\n\t\t\t\tvar t3 = t2 * t;\n\t\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\t\t\t}\n\t\t};\n\t} //\n\n\n\tvar tmp = new Vector3();\n\tvar px = new CubicPoly(),\n\t\t\tpy = new CubicPoly(),\n\t\t\tpz = new CubicPoly();\n\n\tfunction CatmullRomCurve3(points, closed, curveType, tension) {\n\t\tif (points === void 0) {\n\t\t\tpoints = [];\n\t\t}\n\n\t\tif (closed === void 0) {\n\t\t\tclosed = false;\n\t\t}\n\n\t\tif (curveType === void 0) {\n\t\t\tcurveType = 'centripetal';\n\t\t}\n\n\t\tif (tension === void 0) {\n\t\t\ttension = 0.5;\n\t\t}\n\n\t\tCurve.call(this);\n\t\tthis.type = 'CatmullRomCurve3';\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\t}\n\n\tCatmullRomCurve3.prototype = Object.create(Curve.prototype);\n\tCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\tCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\n\tCatmullRomCurve3.prototype.getPoint = function (t, optionalTarget) {\n\t\tif (optionalTarget === void 0) {\n\t\t\toptionalTarget = new Vector3();\n\t\t}\n\n\t\tvar point = optionalTarget;\n\t\tvar points = this.points;\n\t\tvar l = points.length;\n\t\tvar p = (l - (this.closed ? 0 : 1)) * t;\n\t\tvar intPoint = Math.floor(p);\n\t\tvar weight = p - intPoint;\n\n\t\tif (this.closed) {\n\t\t\tintPoint += intPoint > 0 ? 0 : (Math.floor(Math.abs(intPoint) / l) + 1) * l;\n\t\t} else if (weight === 0 && intPoint === l - 1) {\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\t\t}\n\n\t\tvar p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif (this.closed || intPoint > 0) {\n\t\t\tp0 = points[(intPoint - 1) % l];\n\t\t} else {\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors(points[0], points[1]).add(points[0]);\n\t\t\tp0 = tmp;\n\t\t}\n\n\t\tvar p1 = points[intPoint % l];\n\t\tvar p2 = points[(intPoint + 1) % l];\n\n\t\tif (this.closed || intPoint + 2 < l) {\n\t\t\tp3 = points[(intPoint + 2) % l];\n\t\t} else {\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors(points[l - 1], points[l - 2]).add(points[l - 1]);\n\t\t\tp3 = tmp;\n\t\t}\n\n\t\tif (this.curveType === 'centripetal' || this.curveType === 'chordal') {\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tvar pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tvar dt0 = Math.pow(p0.distanceToSquared(p1), pow);\n\t\t\tvar dt1 = Math.pow(p1.distanceToSquared(p2), pow);\n\t\t\tvar dt2 = Math.pow(p2.distanceToSquared(p3), pow); // safety check for repeated points\n\n\t\t\tif (dt1 < 1e-4) dt1 = 1.0;\n\t\t\tif (dt0 < 1e-4) dt0 = dt1;\n\t\t\tif (dt2 < 1e-4) dt2 = dt1;\n\t\t\tpx.initNonuniformCatmullRom(p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2);\n\t\t\tpy.initNonuniformCatmullRom(p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2);\n\t\t\tpz.initNonuniformCatmullRom(p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2);\n\t\t} else if (this.curveType === 'catmullrom') {\n\t\t\tpx.initCatmullRom(p0.x, p1.x, p2.x, p3.x, this.tension);\n\t\t\tpy.initCatmullRom(p0.y, p1.y, p2.y, p3.y, this.tension);\n\t\t\tpz.initCatmullRom(p0.z, p1.z, p2.z, p3.z, this.tension);\n\t\t}\n\n\t\tpoint.set(px.calc(weight), py.calc(weight), pz.calc(weight));\n\t\treturn point;\n\t};\n\n\tCatmullRomCurve3.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.points = [];\n\n\t\tfor (var i = 0, l = source.points.length; i < l; i++) {\n\t\t\tvar point = source.points[i];\n\t\t\tthis.points.push(point.clone());\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\t\treturn this;\n\t};\n\n\tCatmullRomCurve3.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.points = [];\n\n\t\tfor (var i = 0, l = this.points.length; i < l; i++) {\n\t\t\tvar point = this.points[i];\n\t\t\tdata.points.push(point.toArray());\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\t\treturn data;\n\t};\n\n\tCatmullRomCurve3.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.points = [];\n\n\t\tfor (var i = 0, l = json.points.length; i < l; i++) {\n\t\t\tvar point = json.points[i];\n\t\t\tthis.points.push(new Vector3().fromArray(point));\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\t\treturn this;\n\t};\n\n\t/**\n\t * Bezier Curves formulas obtained from\n\t * http://en.wikipedia.org/wiki/Bézier_curve\n\t */\n\tfunction CatmullRom(t, p0, p1, p2, p3) {\n\t\tvar v0 = (p2 - p0) * 0.5;\n\t\tvar v1 = (p3 - p1) * 0.5;\n\t\tvar t2 = t * t;\n\t\tvar t3 = t * t2;\n\t\treturn (2 * p1 - 2 * p2 + v0 + v1) * t3 + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n\t} //\n\n\n\tfunction QuadraticBezierP0(t, p) {\n\t\tvar k = 1 - t;\n\t\treturn k * k * p;\n\t}\n\n\tfunction QuadraticBezierP1(t, p) {\n\t\treturn 2 * (1 - t) * t * p;\n\t}\n\n\tfunction QuadraticBezierP2(t, p) {\n\t\treturn t * t * p;\n\t}\n\n\tfunction QuadraticBezier(t, p0, p1, p2) {\n\t\treturn QuadraticBezierP0(t, p0) + QuadraticBezierP1(t, p1) + QuadraticBezierP2(t, p2);\n\t} //\n\n\n\tfunction CubicBezierP0(t, p) {\n\t\tvar k = 1 - t;\n\t\treturn k * k * k * p;\n\t}\n\n\tfunction CubicBezierP1(t, p) {\n\t\tvar k = 1 - t;\n\t\treturn 3 * k * k * t * p;\n\t}\n\n\tfunction CubicBezierP2(t, p) {\n\t\treturn 3 * (1 - t) * t * t * p;\n\t}\n\n\tfunction CubicBezierP3(t, p) {\n\t\treturn t * t * t * p;\n\t}\n\n\tfunction CubicBezier(t, p0, p1, p2, p3) {\n\t\treturn CubicBezierP0(t, p0) + CubicBezierP1(t, p1) + CubicBezierP2(t, p2) + CubicBezierP3(t, p3);\n\t}\n\n\tfunction CubicBezierCurve(v0, v1, v2, v3) {\n\t\tif (v0 === void 0) {\n\t\t\tv0 = new Vector2();\n\t\t}\n\n\t\tif (v1 === void 0) {\n\t\t\tv1 = new Vector2();\n\t\t}\n\n\t\tif (v2 === void 0) {\n\t\t\tv2 = new Vector2();\n\t\t}\n\n\t\tif (v3 === void 0) {\n\t\t\tv3 = new Vector2();\n\t\t}\n\n\t\tCurve.call(this);\n\t\tthis.type = 'CubicBezierCurve';\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\t}\n\n\tCubicBezierCurve.prototype = Object.create(Curve.prototype);\n\tCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\tCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\n\tCubicBezierCurve.prototype.getPoint = function (t, optionalTarget) {\n\t\tif (optionalTarget === void 0) {\n\t\t\toptionalTarget = new Vector2();\n\t\t}\n\n\t\tvar point = optionalTarget;\n\t\tvar v0 = this.v0,\n\t\t\t\tv1 = this.v1,\n\t\t\t\tv2 = this.v2,\n\t\t\t\tv3 = this.v3;\n\t\tpoint.set(CubicBezier(t, v0.x, v1.x, v2.x, v3.x), CubicBezier(t, v0.y, v1.y, v2.y, v3.y));\n\t\treturn point;\n\t};\n\n\tCubicBezierCurve.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.v0.copy(source.v0);\n\t\tthis.v1.copy(source.v1);\n\t\tthis.v2.copy(source.v2);\n\t\tthis.v3.copy(source.v3);\n\t\treturn this;\n\t};\n\n\tCubicBezierCurve.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\t\treturn data;\n\t};\n\n\tCubicBezierCurve.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.v0.fromArray(json.v0);\n\t\tthis.v1.fromArray(json.v1);\n\t\tthis.v2.fromArray(json.v2);\n\t\tthis.v3.fromArray(json.v3);\n\t\treturn this;\n\t};\n\n\tfunction CubicBezierCurve3(v0, v1, v2, v3) {\n\t\tif (v0 === void 0) {\n\t\t\tv0 = new Vector3();\n\t\t}\n\n\t\tif (v1 === void 0) {\n\t\t\tv1 = new Vector3();\n\t\t}\n\n\t\tif (v2 === void 0) {\n\t\t\tv2 = new Vector3();\n\t\t}\n\n\t\tif (v3 === void 0) {\n\t\t\tv3 = new Vector3();\n\t\t}\n\n\t\tCurve.call(this);\n\t\tthis.type = 'CubicBezierCurve3';\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\t}\n\n\tCubicBezierCurve3.prototype = Object.create(Curve.prototype);\n\tCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\tCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\n\tCubicBezierCurve3.prototype.getPoint = function (t, optionalTarget) {\n\t\tif (optionalTarget === void 0) {\n\t\t\toptionalTarget = new Vector3();\n\t\t}\n\n\t\tvar point = optionalTarget;\n\t\tvar v0 = this.v0,\n\t\t\t\tv1 = this.v1,\n\t\t\t\tv2 = this.v2,\n\t\t\t\tv3 = this.v3;\n\t\tpoint.set(CubicBezier(t, v0.x, v1.x, v2.x, v3.x), CubicBezier(t, v0.y, v1.y, v2.y, v3.y), CubicBezier(t, v0.z, v1.z, v2.z, v3.z));\n\t\treturn point;\n\t};\n\n\tCubicBezierCurve3.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.v0.copy(source.v0);\n\t\tthis.v1.copy(source.v1);\n\t\tthis.v2.copy(source.v2);\n\t\tthis.v3.copy(source.v3);\n\t\treturn this;\n\t};\n\n\tCubicBezierCurve3.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\t\treturn data;\n\t};\n\n\tCubicBezierCurve3.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.v0.fromArray(json.v0);\n\t\tthis.v1.fromArray(json.v1);\n\t\tthis.v2.fromArray(json.v2);\n\t\tthis.v3.fromArray(json.v3);\n\t\treturn this;\n\t};\n\n\tfunction LineCurve(v1, v2) {\n\t\tif (v1 === void 0) {\n\t\t\tv1 = new Vector2();\n\t\t}\n\n\t\tif (v2 === void 0) {\n\t\t\tv2 = new Vector2();\n\t\t}\n\n\t\tCurve.call(this);\n\t\tthis.type = 'LineCurve';\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t}\n\n\tLineCurve.prototype = Object.create(Curve.prototype);\n\tLineCurve.prototype.constructor = LineCurve;\n\tLineCurve.prototype.isLineCurve = true;\n\n\tLineCurve.prototype.getPoint = function (t, optionalTarget) {\n\t\tif (optionalTarget === void 0) {\n\t\t\toptionalTarget = new Vector2();\n\t\t}\n\n\t\tvar point = optionalTarget;\n\n\t\tif (t === 1) {\n\t\t\tpoint.copy(this.v2);\n\t\t} else {\n\t\t\tpoint.copy(this.v2).sub(this.v1);\n\t\t\tpoint.multiplyScalar(t).add(this.v1);\n\t\t}\n\n\t\treturn point;\n\t}; // Line curve is linear, so we can overwrite default getPointAt\n\n\n\tLineCurve.prototype.getPointAt = function (u, optionalTarget) {\n\t\treturn this.getPoint(u, optionalTarget);\n\t};\n\n\tLineCurve.prototype.getTangent = function (t, optionalTarget) {\n\t\tvar tangent = optionalTarget || new Vector2();\n\t\ttangent.copy(this.v2).sub(this.v1).normalize();\n\t\treturn tangent;\n\t};\n\n\tLineCurve.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.v1.copy(source.v1);\n\t\tthis.v2.copy(source.v2);\n\t\treturn this;\n\t};\n\n\tLineCurve.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\treturn data;\n\t};\n\n\tLineCurve.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.v1.fromArray(json.v1);\n\t\tthis.v2.fromArray(json.v2);\n\t\treturn this;\n\t};\n\n\tfunction LineCurve3(v1, v2) {\n\t\tif (v1 === void 0) {\n\t\t\tv1 = new Vector3();\n\t\t}\n\n\t\tif (v2 === void 0) {\n\t\t\tv2 = new Vector3();\n\t\t}\n\n\t\tCurve.call(this);\n\t\tthis.type = 'LineCurve3';\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t}\n\n\tLineCurve3.prototype = Object.create(Curve.prototype);\n\tLineCurve3.prototype.constructor = LineCurve3;\n\tLineCurve3.prototype.isLineCurve3 = true;\n\n\tLineCurve3.prototype.getPoint = function (t, optionalTarget) {\n\t\tif (optionalTarget === void 0) {\n\t\t\toptionalTarget = new Vector3();\n\t\t}\n\n\t\tvar point = optionalTarget;\n\n\t\tif (t === 1) {\n\t\t\tpoint.copy(this.v2);\n\t\t} else {\n\t\t\tpoint.copy(this.v2).sub(this.v1);\n\t\t\tpoint.multiplyScalar(t).add(this.v1);\n\t\t}\n\n\t\treturn point;\n\t}; // Line curve is linear, so we can overwrite default getPointAt\n\n\n\tLineCurve3.prototype.getPointAt = function (u, optionalTarget) {\n\t\treturn this.getPoint(u, optionalTarget);\n\t};\n\n\tLineCurve3.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.v1.copy(source.v1);\n\t\tthis.v2.copy(source.v2);\n\t\treturn this;\n\t};\n\n\tLineCurve3.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\treturn data;\n\t};\n\n\tLineCurve3.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.v1.fromArray(json.v1);\n\t\tthis.v2.fromArray(json.v2);\n\t\treturn this;\n\t};\n\n\tfunction QuadraticBezierCurve(v0, v1, v2) {\n\t\tif (v0 === void 0) {\n\t\t\tv0 = new Vector2();\n\t\t}\n\n\t\tif (v1 === void 0) {\n\t\t\tv1 = new Vector2();\n\t\t}\n\n\t\tif (v2 === void 0) {\n\t\t\tv2 = new Vector2();\n\t\t}\n\n\t\tCurve.call(this);\n\t\tthis.type = 'QuadraticBezierCurve';\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t}\n\n\tQuadraticBezierCurve.prototype = Object.create(Curve.prototype);\n\tQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\tQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\n\tQuadraticBezierCurve.prototype.getPoint = function (t, optionalTarget) {\n\t\tif (optionalTarget === void 0) {\n\t\t\toptionalTarget = new Vector2();\n\t\t}\n\n\t\tvar point = optionalTarget;\n\t\tvar v0 = this.v0,\n\t\t\t\tv1 = this.v1,\n\t\t\t\tv2 = this.v2;\n\t\tpoint.set(QuadraticBezier(t, v0.x, v1.x, v2.x), QuadraticBezier(t, v0.y, v1.y, v2.y));\n\t\treturn point;\n\t};\n\n\tQuadraticBezierCurve.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.v0.copy(source.v0);\n\t\tthis.v1.copy(source.v1);\n\t\tthis.v2.copy(source.v2);\n\t\treturn this;\n\t};\n\n\tQuadraticBezierCurve.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\treturn data;\n\t};\n\n\tQuadraticBezierCurve.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.v0.fromArray(json.v0);\n\t\tthis.v1.fromArray(json.v1);\n\t\tthis.v2.fromArray(json.v2);\n\t\treturn this;\n\t};\n\n\tfunction QuadraticBezierCurve3(v0, v1, v2) {\n\t\tif (v0 === void 0) {\n\t\t\tv0 = new Vector3();\n\t\t}\n\n\t\tif (v1 === void 0) {\n\t\t\tv1 = new Vector3();\n\t\t}\n\n\t\tif (v2 === void 0) {\n\t\t\tv2 = new Vector3();\n\t\t}\n\n\t\tCurve.call(this);\n\t\tthis.type = 'QuadraticBezierCurve3';\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t}\n\n\tQuadraticBezierCurve3.prototype = Object.create(Curve.prototype);\n\tQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\tQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\n\tQuadraticBezierCurve3.prototype.getPoint = function (t, optionalTarget) {\n\t\tif (optionalTarget === void 0) {\n\t\t\toptionalTarget = new Vector3();\n\t\t}\n\n\t\tvar point = optionalTarget;\n\t\tvar v0 = this.v0,\n\t\t\t\tv1 = this.v1,\n\t\t\t\tv2 = this.v2;\n\t\tpoint.set(QuadraticBezier(t, v0.x, v1.x, v2.x), QuadraticBezier(t, v0.y, v1.y, v2.y), QuadraticBezier(t, v0.z, v1.z, v2.z));\n\t\treturn point;\n\t};\n\n\tQuadraticBezierCurve3.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.v0.copy(source.v0);\n\t\tthis.v1.copy(source.v1);\n\t\tthis.v2.copy(source.v2);\n\t\treturn this;\n\t};\n\n\tQuadraticBezierCurve3.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\treturn data;\n\t};\n\n\tQuadraticBezierCurve3.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.v0.fromArray(json.v0);\n\t\tthis.v1.fromArray(json.v1);\n\t\tthis.v2.fromArray(json.v2);\n\t\treturn this;\n\t};\n\n\tfunction SplineCurve(points) {\n\t\tif (points === void 0) {\n\t\t\tpoints = [];\n\t\t}\n\n\t\tCurve.call(this);\n\t\tthis.type = 'SplineCurve';\n\t\tthis.points = points;\n\t}\n\n\tSplineCurve.prototype = Object.create(Curve.prototype);\n\tSplineCurve.prototype.constructor = SplineCurve;\n\tSplineCurve.prototype.isSplineCurve = true;\n\n\tSplineCurve.prototype.getPoint = function (t, optionalTarget) {\n\t\tif (optionalTarget === void 0) {\n\t\t\toptionalTarget = new Vector2();\n\t\t}\n\n\t\tvar point = optionalTarget;\n\t\tvar points = this.points;\n\t\tvar p = (points.length - 1) * t;\n\t\tvar intPoint = Math.floor(p);\n\t\tvar weight = p - intPoint;\n\t\tvar p0 = points[intPoint === 0 ? intPoint : intPoint - 1];\n\t\tvar p1 = points[intPoint];\n\t\tvar p2 = points[intPoint > points.length - 2 ? points.length - 1 : intPoint + 1];\n\t\tvar p3 = points[intPoint > points.length - 3 ? points.length - 1 : intPoint + 2];\n\t\tpoint.set(CatmullRom(weight, p0.x, p1.x, p2.x, p3.x), CatmullRom(weight, p0.y, p1.y, p2.y, p3.y));\n\t\treturn point;\n\t};\n\n\tSplineCurve.prototype.copy = function (source) {\n\t\tCurve.prototype.copy.call(this, source);\n\t\tthis.points = [];\n\n\t\tfor (var i = 0, l = source.points.length; i < l; i++) {\n\t\t\tvar point = source.points[i];\n\t\t\tthis.points.push(point.clone());\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tSplineCurve.prototype.toJSON = function () {\n\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\tdata.points = [];\n\n\t\tfor (var i = 0, l = this.points.length; i < l; i++) {\n\t\t\tvar point = this.points[i];\n\t\t\tdata.points.push(point.toArray());\n\t\t}\n\n\t\treturn data;\n\t};\n\n\tSplineCurve.prototype.fromJSON = function (json) {\n\t\tCurve.prototype.fromJSON.call(this, json);\n\t\tthis.points = [];\n\n\t\tfor (var i = 0, l = json.points.length; i < l; i++) {\n\t\t\tvar point = json.points[i];\n\t\t\tthis.points.push(new Vector2().fromArray(point));\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tvar Curves = /*#__PURE__*/Object.freeze({\n\t\t__proto__: null,\n\t\tArcCurve: ArcCurve,\n\t\tCatmullRomCurve3: CatmullRomCurve3,\n\t\tCubicBezierCurve: CubicBezierCurve,\n\t\tCubicBezierCurve3: CubicBezierCurve3,\n\t\tEllipseCurve: EllipseCurve,\n\t\tLineCurve: LineCurve,\n\t\tLineCurve3: LineCurve3,\n\t\tQuadraticBezierCurve: QuadraticBezierCurve,\n\t\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\t\tSplineCurve: SplineCurve\n\t});\n\n\t/**************************************************************\n\t *\tCurved Path - a curve path is simply a array of connected\n\t *\tcurves, but retains the api of a curve\n\t **************************************************************/\n\n\tfunction CurvePath() {\n\t\tCurve.call(this);\n\t\tthis.type = 'CurvePath';\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\t}\n\n\tCurvePath.prototype = Object.assign(Object.create(Curve.prototype), {\n\t\tconstructor: CurvePath,\n\t\tadd: function add(curve) {\n\t\t\tthis.curves.push(curve);\n\t\t},\n\t\tclosePath: function closePath() {\n\t\t\t// Add a line curve if start and end of lines are not connected\n\t\t\tvar startPoint = this.curves[0].getPoint(0);\n\t\t\tvar endPoint = this.curves[this.curves.length - 1].getPoint(1);\n\n\t\t\tif (!startPoint.equals(endPoint)) {\n\t\t\t\tthis.curves.push(new LineCurve(endPoint, startPoint));\n\t\t\t}\n\t\t},\n\t\t// To get accurate point with reference to\n\t\t// entire path distance at time t,\n\t\t// following has to be done:\n\t\t// 1. Length of each sub path have to be known\n\t\t// 2. Locate and identify type of curve\n\t\t// 3. Get t for the curve\n\t\t// 4. Return curve.getPointAt(t')\n\t\tgetPoint: function getPoint(t) {\n\t\t\tvar d = t * this.getLength();\n\t\t\tvar curveLengths = this.getCurveLengths();\n\t\t\tvar i = 0; // To think about boundaries points.\n\n\t\t\twhile (i < curveLengths.length) {\n\t\t\t\tif (curveLengths[i] >= d) {\n\t\t\t\t\tvar diff = curveLengths[i] - d;\n\t\t\t\t\tvar curve = this.curves[i];\n\t\t\t\t\tvar segmentLength = curve.getLength();\n\t\t\t\t\tvar u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\t\t\t\t\treturn curve.getPointAt(u);\n\t\t\t\t}\n\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\treturn null; // loop where sum != 0, sum > d , sum+1 <d\n\t\t},\n\t\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t\t// getPoint() depends on getLength\n\t\tgetLength: function getLength() {\n\t\t\tvar lens = this.getCurveLengths();\n\t\t\treturn lens[lens.length - 1];\n\t\t},\n\t\t// cacheLengths must be recalculated.\n\t\tupdateArcLengths: function updateArcLengths() {\n\t\t\tthis.needsUpdate = true;\n\t\t\tthis.cacheLengths = null;\n\t\t\tthis.getCurveLengths();\n\t\t},\n\t\t// Compute lengths and cache them\n\t\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\t\tgetCurveLengths: function getCurveLengths() {\n\t\t\t// We use cache values if curves and cache array are same length\n\t\t\tif (this.cacheLengths && this.cacheLengths.length === this.curves.length) {\n\t\t\t\treturn this.cacheLengths;\n\t\t\t} // Get length of sub-curve\n\t\t\t// Push sums into cached array\n\n\n\t\t\tvar lengths = [];\n\t\t\tvar sums = 0;\n\n\t\t\tfor (var i = 0, l = this.curves.length; i < l; i++) {\n\t\t\t\tsums += this.curves[i].getLength();\n\t\t\t\tlengths.push(sums);\n\t\t\t}\n\n\t\t\tthis.cacheLengths = lengths;\n\t\t\treturn lengths;\n\t\t},\n\t\tgetSpacedPoints: function getSpacedPoints(divisions) {\n\t\t\tif (divisions === void 0) {\n\t\t\t\tdivisions = 40;\n\t\t\t}\n\n\t\t\tvar points = [];\n\n\t\t\tfor (var i = 0; i <= divisions; i++) {\n\t\t\t\tpoints.push(this.getPoint(i / divisions));\n\t\t\t}\n\n\t\t\tif (this.autoClose) {\n\t\t\t\tpoints.push(points[0]);\n\t\t\t}\n\n\t\t\treturn points;\n\t\t},\n\t\tgetPoints: function getPoints(divisions) {\n\t\t\tif (divisions === void 0) {\n\t\t\t\tdivisions = 12;\n\t\t\t}\n\n\t\t\tvar points = [];\n\t\t\tvar last;\n\n\t\t\tfor (var i = 0, curves = this.curves; i < curves.length; i++) {\n\t\t\t\tvar curve = curves[i];\n\t\t\t\tvar resolution = curve && curve.isEllipseCurve ? divisions * 2 : curve && (curve.isLineCurve || curve.isLineCurve3) ? 1 : curve && curve.isSplineCurve ? divisions * curve.points.length : divisions;\n\t\t\t\tvar pts = curve.getPoints(resolution);\n\n\t\t\t\tfor (var j = 0; j < pts.length; j++) {\n\t\t\t\t\tvar point = pts[j];\n\t\t\t\t\tif (last && last.equals(point)) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\t\tpoints.push(point);\n\t\t\t\t\tlast = point;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.autoClose && points.length > 1 && !points[points.length - 1].equals(points[0])) {\n\t\t\t\tpoints.push(points[0]);\n\t\t\t}\n\n\t\t\treturn points;\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tCurve.prototype.copy.call(this, source);\n\t\t\tthis.curves = [];\n\n\t\t\tfor (var i = 0, l = source.curves.length; i < l; i++) {\n\t\t\t\tvar curve = source.curves[i];\n\t\t\t\tthis.curves.push(curve.clone());\n\t\t\t}\n\n\t\t\tthis.autoClose = source.autoClose;\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = Curve.prototype.toJSON.call(this);\n\t\t\tdata.autoClose = this.autoClose;\n\t\t\tdata.curves = [];\n\n\t\t\tfor (var i = 0, l = this.curves.length; i < l; i++) {\n\t\t\t\tvar curve = this.curves[i];\n\t\t\t\tdata.curves.push(curve.toJSON());\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t\tfromJSON: function fromJSON(json) {\n\t\t\tCurve.prototype.fromJSON.call(this, json);\n\t\t\tthis.autoClose = json.autoClose;\n\t\t\tthis.curves = [];\n\n\t\t\tfor (var i = 0, l = json.curves.length; i < l; i++) {\n\t\t\t\tvar curve = json.curves[i];\n\t\t\t\tthis.curves.push(new Curves[curve.type]().fromJSON(curve));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction Path(points) {\n\t\tCurvePath.call(this);\n\t\tthis.type = 'Path';\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif (points) {\n\t\t\tthis.setFromPoints(points);\n\t\t}\n\t}\n\n\tPath.prototype = Object.assign(Object.create(CurvePath.prototype), {\n\t\tconstructor: Path,\n\t\tsetFromPoints: function setFromPoints(points) {\n\t\t\tthis.moveTo(points[0].x, points[0].y);\n\n\t\t\tfor (var i = 1, l = points.length; i < l; i++) {\n\t\t\t\tthis.lineTo(points[i].x, points[i].y);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\tmoveTo: function moveTo(x, y) {\n\t\t\tthis.currentPoint.set(x, y); // TODO consider referencing vectors instead of copying?\n\n\t\t\treturn this;\n\t\t},\n\t\tlineTo: function lineTo(x, y) {\n\t\t\tvar curve = new LineCurve(this.currentPoint.clone(), new Vector2(x, y));\n\t\t\tthis.curves.push(curve);\n\t\t\tthis.currentPoint.set(x, y);\n\t\t\treturn this;\n\t\t},\n\t\tquadraticCurveTo: function quadraticCurveTo(aCPx, aCPy, aX, aY) {\n\t\t\tvar curve = new QuadraticBezierCurve(this.currentPoint.clone(), new Vector2(aCPx, aCPy), new Vector2(aX, aY));\n\t\t\tthis.curves.push(curve);\n\t\t\tthis.currentPoint.set(aX, aY);\n\t\t\treturn this;\n\t\t},\n\t\tbezierCurveTo: function bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) {\n\t\t\tvar curve = new CubicBezierCurve(this.currentPoint.clone(), new Vector2(aCP1x, aCP1y), new Vector2(aCP2x, aCP2y), new Vector2(aX, aY));\n\t\t\tthis.curves.push(curve);\n\t\t\tthis.currentPoint.set(aX, aY);\n\t\t\treturn this;\n\t\t},\n\t\tsplineThru: function splineThru(pts\n\t\t/*Array of Vector*/\n\t\t) {\n\t\t\tvar npts = [this.currentPoint.clone()].concat(pts);\n\t\t\tvar curve = new SplineCurve(npts);\n\t\t\tthis.curves.push(curve);\n\t\t\tthis.currentPoint.copy(pts[pts.length - 1]);\n\t\t\treturn this;\n\t\t},\n\t\tarc: function arc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {\n\t\t\tvar x0 = this.currentPoint.x;\n\t\t\tvar y0 = this.currentPoint.y;\n\t\t\tthis.absarc(aX + x0, aY + y0, aRadius, aStartAngle, aEndAngle, aClockwise);\n\t\t\treturn this;\n\t\t},\n\t\tabsarc: function absarc(aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {\n\t\t\tthis.absellipse(aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise);\n\t\t\treturn this;\n\t\t},\n\t\tellipse: function ellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) {\n\t\t\tvar x0 = this.currentPoint.x;\n\t\t\tvar y0 = this.currentPoint.y;\n\t\t\tthis.absellipse(aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation);\n\t\t\treturn this;\n\t\t},\n\t\tabsellipse: function absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) {\n\t\t\tvar curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation);\n\n\t\t\tif (this.curves.length > 0) {\n\t\t\t\t// if a previous curve is present, attempt to join\n\t\t\t\tvar firstPoint = curve.getPoint(0);\n\n\t\t\t\tif (!firstPoint.equals(this.currentPoint)) {\n\t\t\t\t\tthis.lineTo(firstPoint.x, firstPoint.y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.curves.push(curve);\n\t\t\tvar lastPoint = curve.getPoint(1);\n\t\t\tthis.currentPoint.copy(lastPoint);\n\t\t\treturn this;\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tCurvePath.prototype.copy.call(this, source);\n\t\t\tthis.currentPoint.copy(source.currentPoint);\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = CurvePath.prototype.toJSON.call(this);\n\t\t\tdata.currentPoint = this.currentPoint.toArray();\n\t\t\treturn data;\n\t\t},\n\t\tfromJSON: function fromJSON(json) {\n\t\t\tCurvePath.prototype.fromJSON.call(this, json);\n\t\t\tthis.currentPoint.fromArray(json.currentPoint);\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction Shape(points) {\n\t\tPath.call(this, points);\n\t\tthis.uuid = MathUtils.generateUUID();\n\t\tthis.type = 'Shape';\n\t\tthis.holes = [];\n\t}\n\n\tShape.prototype = Object.assign(Object.create(Path.prototype), {\n\t\tconstructor: Shape,\n\t\tgetPointsHoles: function getPointsHoles(divisions) {\n\t\t\tvar holesPts = [];\n\n\t\t\tfor (var i = 0, l = this.holes.length; i < l; i++) {\n\t\t\t\tholesPts[i] = this.holes[i].getPoints(divisions);\n\t\t\t}\n\n\t\t\treturn holesPts;\n\t\t},\n\t\t// get points of shape and holes (keypoints based on segments parameter)\n\t\textractPoints: function extractPoints(divisions) {\n\t\t\treturn {\n\t\t\t\tshape: this.getPoints(divisions),\n\t\t\t\tholes: this.getPointsHoles(divisions)\n\t\t\t};\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tPath.prototype.copy.call(this, source);\n\t\t\tthis.holes = [];\n\n\t\t\tfor (var i = 0, l = source.holes.length; i < l; i++) {\n\t\t\t\tvar hole = source.holes[i];\n\t\t\t\tthis.holes.push(hole.clone());\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = Path.prototype.toJSON.call(this);\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.holes = [];\n\n\t\t\tfor (var i = 0, l = this.holes.length; i < l; i++) {\n\t\t\t\tvar hole = this.holes[i];\n\t\t\t\tdata.holes.push(hole.toJSON());\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t\tfromJSON: function fromJSON(json) {\n\t\t\tPath.prototype.fromJSON.call(this, json);\n\t\t\tthis.uuid = json.uuid;\n\t\t\tthis.holes = [];\n\n\t\t\tfor (var i = 0, l = json.holes.length; i < l; i++) {\n\t\t\t\tvar hole = json.holes[i];\n\t\t\t\tthis.holes.push(new Path().fromJSON(hole));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction Light(color, intensity) {\n\t\tif (intensity === void 0) {\n\t\t\tintensity = 1;\n\t\t}\n\n\t\tObject3D.call(this);\n\t\tthis.type = 'Light';\n\t\tthis.color = new Color(color);\n\t\tthis.intensity = intensity;\n\t}\n\n\tLight.prototype = Object.assign(Object.create(Object3D.prototype), {\n\t\tconstructor: Light,\n\t\tisLight: true,\n\t\tcopy: function copy(source) {\n\t\t\tObject3D.prototype.copy.call(this, source);\n\t\t\tthis.color.copy(source.color);\n\t\t\tthis.intensity = source.intensity;\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar data = Object3D.prototype.toJSON.call(this, meta);\n\t\t\tdata.object.color = this.color.getHex();\n\t\t\tdata.object.intensity = this.intensity;\n\t\t\tif (this.groundColor !== undefined) data.object.groundColor = this.groundColor.getHex();\n\t\t\tif (this.distance !== undefined) data.object.distance = this.distance;\n\t\t\tif (this.angle !== undefined) data.object.angle = this.angle;\n\t\t\tif (this.decay !== undefined) data.object.decay = this.decay;\n\t\t\tif (this.penumbra !== undefined) data.object.penumbra = this.penumbra;\n\t\t\tif (this.shadow !== undefined) data.object.shadow = this.shadow.toJSON();\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tfunction HemisphereLight(skyColor, groundColor, intensity) {\n\t\tLight.call(this, skyColor, intensity);\n\t\tthis.type = 'HemisphereLight';\n\t\tthis.position.copy(Object3D.DefaultUp);\n\t\tthis.updateMatrix();\n\t\tthis.groundColor = new Color(groundColor);\n\t}\n\n\tHemisphereLight.prototype = Object.assign(Object.create(Light.prototype), {\n\t\tconstructor: HemisphereLight,\n\t\tisHemisphereLight: true,\n\t\tcopy: function copy(source) {\n\t\t\tLight.prototype.copy.call(this, source);\n\t\t\tthis.groundColor.copy(source.groundColor);\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction LightShadow(camera) {\n\t\tthis.camera = camera;\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.mapSize = new Vector2(512, 512);\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2(1, 1);\n\t\tthis._viewportCount = 1;\n\t\tthis._viewports = [new Vector4(0, 0, 1, 1)];\n\t}\n\n\tObject.assign(LightShadow.prototype, {\n\t\t_projScreenMatrix: new Matrix4(),\n\t\t_lightPositionWorld: new Vector3(),\n\t\t_lookTarget: new Vector3(),\n\t\tgetViewportCount: function getViewportCount() {\n\t\t\treturn this._viewportCount;\n\t\t},\n\t\tgetFrustum: function getFrustum() {\n\t\t\treturn this._frustum;\n\t\t},\n\t\tupdateMatrices: function updateMatrices(light) {\n\t\t\tvar shadowCamera = this.camera,\n\t\t\t\t\tshadowMatrix = this.matrix,\n\t\t\t\t\tprojScreenMatrix = this._projScreenMatrix,\n\t\t\t\t\tlookTarget = this._lookTarget,\n\t\t\t\t\tlightPositionWorld = this._lightPositionWorld;\n\t\t\tlightPositionWorld.setFromMatrixPosition(light.matrixWorld);\n\t\t\tshadowCamera.position.copy(lightPositionWorld);\n\t\t\tlookTarget.setFromMatrixPosition(light.target.matrixWorld);\n\t\t\tshadowCamera.lookAt(lookTarget);\n\t\t\tshadowCamera.updateMatrixWorld();\n\t\t\tprojScreenMatrix.multiplyMatrices(shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse);\n\n\t\t\tthis._frustum.setFromProjectionMatrix(projScreenMatrix);\n\n\t\t\tshadowMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);\n\t\t\tshadowMatrix.multiply(shadowCamera.projectionMatrix);\n\t\t\tshadowMatrix.multiply(shadowCamera.matrixWorldInverse);\n\t\t},\n\t\tgetViewport: function getViewport(viewportIndex) {\n\t\t\treturn this._viewports[viewportIndex];\n\t\t},\n\t\tgetFrameExtents: function getFrameExtents() {\n\t\t\treturn this._frameExtents;\n\t\t},\n\t\tcopy: function copy(source) {\n\t\t\tthis.camera = source.camera.clone();\n\t\t\tthis.bias = source.bias;\n\t\t\tthis.radius = source.radius;\n\t\t\tthis.mapSize.copy(source.mapSize);\n\t\t\treturn this;\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar object = {};\n\t\t\tif (this.bias !== 0) object.bias = this.bias;\n\t\t\tif (this.normalBias !== 0) object.normalBias = this.normalBias;\n\t\t\tif (this.radius !== 1) object.radius = this.radius;\n\t\t\tif (this.mapSize.x !== 512 || this.mapSize.y !== 512) object.mapSize = this.mapSize.toArray();\n\t\t\tobject.camera = this.camera.toJSON(false).object;\n\t\t\tdelete object.camera.matrix;\n\t\t\treturn object;\n\t\t}\n\t});\n\n\tfunction SpotLightShadow() {\n\t\tLightShadow.call(this, new PerspectiveCamera(50, 1, 0.5, 500));\n\t\tthis.focus = 1;\n\t}\n\n\tSpotLightShadow.prototype = Object.assign(Object.create(LightShadow.prototype), {\n\t\tconstructor: SpotLightShadow,\n\t\tisSpotLightShadow: true,\n\t\tupdateMatrices: function updateMatrices(light) {\n\t\t\tvar camera = this.camera;\n\t\t\tvar fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus;\n\t\t\tvar aspect = this.mapSize.width / this.mapSize.height;\n\t\t\tvar far = light.distance || camera.far;\n\n\t\t\tif (fov !== camera.fov || aspect !== camera.aspect || far !== camera.far) {\n\t\t\t\tcamera.fov = fov;\n\t\t\t\tcamera.aspect = aspect;\n\t\t\t\tcamera.far = far;\n\t\t\t\tcamera.updateProjectionMatrix();\n\t\t\t}\n\n\t\t\tLightShadow.prototype.updateMatrices.call(this, light);\n\t\t}\n\t});\n\n\tfunction SpotLight(color, intensity, distance, angle, penumbra, decay) {\n\t\tLight.call(this, color, intensity);\n\t\tthis.type = 'SpotLight';\n\t\tthis.position.copy(Object3D.DefaultUp);\n\t\tthis.updateMatrix();\n\t\tthis.target = new Object3D();\n\t\tObject.defineProperty(this, 'power', {\n\t\t\tget: function get() {\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\treturn this.intensity * Math.PI;\n\t\t\t},\n\t\t\tset: function set(power) {\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\tthis.intensity = power / Math.PI;\n\t\t\t}\n\t\t});\n\t\tthis.distance = distance !== undefined ? distance : 0;\n\t\tthis.angle = angle !== undefined ? angle : Math.PI / 3;\n\t\tthis.penumbra = penumbra !== undefined ? penumbra : 0;\n\t\tthis.decay = decay !== undefined ? decay : 1; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\t}\n\n\tSpotLight.prototype = Object.assign(Object.create(Light.prototype), {\n\t\tconstructor: SpotLight,\n\t\tisSpotLight: true,\n\t\tcopy: function copy(source) {\n\t\t\tLight.prototype.copy.call(this, source);\n\t\t\tthis.distance = source.distance;\n\t\t\tthis.angle = source.angle;\n\t\t\tthis.penumbra = source.penumbra;\n\t\t\tthis.decay = source.decay;\n\t\t\tthis.target = source.target.clone();\n\t\t\tthis.shadow = source.shadow.clone();\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction PointLightShadow() {\n\t\tLightShadow.call(this, new PerspectiveCamera(90, 1, 0.5, 500));\n\t\tthis._frameExtents = new Vector2(4, 2);\n\t\tthis._viewportCount = 6;\n\t\tthis._viewports = [// These viewports map a cube-map onto a 2D texture with the\n\t\t// following orientation:\n\t\t//\n\t\t//\txzXZ\n\t\t//\t y Y\n\t\t//\n\t\t// X - Positive x direction\n\t\t// x - Negative x direction\n\t\t// Y - Positive y direction\n\t\t// y - Negative y direction\n\t\t// Z - Positive z direction\n\t\t// z - Negative z direction\n\t\t// positive X\n\t\tnew Vector4(2, 1, 1, 1), // negative X\n\t\tnew Vector4(0, 1, 1, 1), // positive Z\n\t\tnew Vector4(3, 1, 1, 1), // negative Z\n\t\tnew Vector4(1, 1, 1, 1), // positive Y\n\t\tnew Vector4(3, 0, 1, 1), // negative Y\n\t\tnew Vector4(1, 0, 1, 1)];\n\t\tthis._cubeDirections = [new Vector3(1, 0, 0), new Vector3(-1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, 0, -1), new Vector3(0, 1, 0), new Vector3(0, -1, 0)];\n\t\tthis._cubeUps = [new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1), new Vector3(0, 0, -1)];\n\t}\n\n\tPointLightShadow.prototype = Object.assign(Object.create(LightShadow.prototype), {\n\t\tconstructor: PointLightShadow,\n\t\tisPointLightShadow: true,\n\t\tupdateMatrices: function updateMatrices(light, viewportIndex) {\n\t\t\tif (viewportIndex === void 0) {\n\t\t\t\tviewportIndex = 0;\n\t\t\t}\n\n\t\t\tvar camera = this.camera,\n\t\t\t\t\tshadowMatrix = this.matrix,\n\t\t\t\t\tlightPositionWorld = this._lightPositionWorld,\n\t\t\t\t\tlookTarget = this._lookTarget,\n\t\t\t\t\tprojScreenMatrix = this._projScreenMatrix;\n\t\t\tlightPositionWorld.setFromMatrixPosition(light.matrixWorld);\n\t\t\tcamera.position.copy(lightPositionWorld);\n\t\t\tlookTarget.copy(camera.position);\n\t\t\tlookTarget.add(this._cubeDirections[viewportIndex]);\n\t\t\tcamera.up.copy(this._cubeUps[viewportIndex]);\n\t\t\tcamera.lookAt(lookTarget);\n\t\t\tcamera.updateMatrixWorld();\n\t\t\tshadowMatrix.makeTranslation(-lightPositionWorld.x, -lightPositionWorld.y, -lightPositionWorld.z);\n\t\t\tprojScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\n\n\t\t\tthis._frustum.setFromProjectionMatrix(projScreenMatrix);\n\t\t}\n\t});\n\n\tfunction PointLight(color, intensity, distance, decay) {\n\t\tLight.call(this, color, intensity);\n\t\tthis.type = 'PointLight';\n\t\tObject.defineProperty(this, 'power', {\n\t\t\tget: function get() {\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\treturn this.intensity * 4 * Math.PI;\n\t\t\t},\n\t\t\tset: function set(power) {\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\tthis.intensity = power / (4 * Math.PI);\n\t\t\t}\n\t\t});\n\t\tthis.distance = distance !== undefined ? distance : 0;\n\t\tthis.decay = decay !== undefined ? decay : 1; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new PointLightShadow();\n\t}\n\n\tPointLight.prototype = Object.assign(Object.create(Light.prototype), {\n\t\tconstructor: PointLight,\n\t\tisPointLight: true,\n\t\tcopy: function copy(source) {\n\t\t\tLight.prototype.copy.call(this, source);\n\t\t\tthis.distance = source.distance;\n\t\t\tthis.decay = source.decay;\n\t\t\tthis.shadow = source.shadow.clone();\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction OrthographicCamera(left, right, top, bottom, near, far) {\n\t\tif (left === void 0) {\n\t\t\tleft = -1;\n\t\t}\n\n\t\tif (right === void 0) {\n\t\t\tright = 1;\n\t\t}\n\n\t\tif (top === void 0) {\n\t\t\ttop = 1;\n\t\t}\n\n\t\tif (bottom === void 0) {\n\t\t\tbottom = -1;\n\t\t}\n\n\t\tif (near === void 0) {\n\t\t\tnear = 0.1;\n\t\t}\n\n\t\tif (far === void 0) {\n\t\t\tfar = 2000;\n\t\t}\n\n\t\tCamera.call(this);\n\t\tthis.type = 'OrthographicCamera';\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.updateProjectionMatrix();\n\t}\n\n\tOrthographicCamera.prototype = Object.assign(Object.create(Camera.prototype), {\n\t\tconstructor: OrthographicCamera,\n\t\tisOrthographicCamera: true,\n\t\tcopy: function copy(source, recursive) {\n\t\t\tCamera.prototype.copy.call(this, source, recursive);\n\t\t\tthis.left = source.left;\n\t\t\tthis.right = source.right;\n\t\t\tthis.top = source.top;\n\t\t\tthis.bottom = source.bottom;\n\t\t\tthis.near = source.near;\n\t\t\tthis.far = source.far;\n\t\t\tthis.zoom = source.zoom;\n\t\t\tthis.view = source.view === null ? null : Object.assign({}, source.view);\n\t\t\treturn this;\n\t\t},\n\t\tsetViewOffset: function setViewOffset(fullWidth, fullHeight, x, y, width, height) {\n\t\t\tif (this.view === null) {\n\t\t\t\tthis.view = {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tfullWidth: 1,\n\t\t\t\t\tfullHeight: 1,\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 0,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.view.enabled = true;\n\t\t\tthis.view.fullWidth = fullWidth;\n\t\t\tthis.view.fullHeight = fullHeight;\n\t\t\tthis.view.offsetX = x;\n\t\t\tthis.view.offsetY = y;\n\t\t\tthis.view.width = width;\n\t\t\tthis.view.height = height;\n\t\t\tthis.updateProjectionMatrix();\n\t\t},\n\t\tclearViewOffset: function clearViewOffset() {\n\t\t\tif (this.view !== null) {\n\t\t\t\tthis.view.enabled = false;\n\t\t\t}\n\n\t\t\tthis.updateProjectionMatrix();\n\t\t},\n\t\tupdateProjectionMatrix: function updateProjectionMatrix() {\n\t\t\tvar dx = (this.right - this.left) / (2 * this.zoom);\n\t\t\tvar dy = (this.top - this.bottom) / (2 * this.zoom);\n\t\t\tvar cx = (this.right + this.left) / 2;\n\t\t\tvar cy = (this.top + this.bottom) / 2;\n\t\t\tvar left = cx - dx;\n\t\t\tvar right = cx + dx;\n\t\t\tvar top = cy + dy;\n\t\t\tvar bottom = cy - dy;\n\n\t\t\tif (this.view !== null && this.view.enabled) {\n\t\t\t\tvar scaleW = (this.right - this.left) / this.view.fullWidth / this.zoom;\n\t\t\t\tvar scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom;\n\t\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\t\tright = left + scaleW * this.view.width;\n\t\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\t\tbottom = top - scaleH * this.view.height;\n\t\t\t}\n\n\t\t\tthis.projectionMatrix.makeOrthographic(left, right, top, bottom, this.near, this.far);\n\t\t\tthis.projectionMatrixInverse.copy(this.projectionMatrix).invert();\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar data = Object3D.prototype.toJSON.call(this, meta);\n\t\t\tdata.object.zoom = this.zoom;\n\t\t\tdata.object.left = this.left;\n\t\t\tdata.object.right = this.right;\n\t\t\tdata.object.top = this.top;\n\t\t\tdata.object.bottom = this.bottom;\n\t\t\tdata.object.near = this.near;\n\t\t\tdata.object.far = this.far;\n\t\t\tif (this.view !== null) data.object.view = Object.assign({}, this.view);\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tfunction DirectionalLightShadow() {\n\t\tLightShadow.call(this, new OrthographicCamera(-5, 5, 5, -5, 0.5, 500));\n\t}\n\n\tDirectionalLightShadow.prototype = Object.assign(Object.create(LightShadow.prototype), {\n\t\tconstructor: DirectionalLightShadow,\n\t\tisDirectionalLightShadow: true,\n\t\tupdateMatrices: function updateMatrices(light) {\n\t\t\tLightShadow.prototype.updateMatrices.call(this, light);\n\t\t}\n\t});\n\n\tfunction DirectionalLight(color, intensity) {\n\t\tLight.call(this, color, intensity);\n\t\tthis.type = 'DirectionalLight';\n\t\tthis.position.copy(Object3D.DefaultUp);\n\t\tthis.updateMatrix();\n\t\tthis.target = new Object3D();\n\t\tthis.shadow = new DirectionalLightShadow();\n\t}\n\n\tDirectionalLight.prototype = Object.assign(Object.create(Light.prototype), {\n\t\tconstructor: DirectionalLight,\n\t\tisDirectionalLight: true,\n\t\tcopy: function copy(source) {\n\t\t\tLight.prototype.copy.call(this, source);\n\t\t\tthis.target = source.target.clone();\n\t\t\tthis.shadow = source.shadow.clone();\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction AmbientLight(color, intensity) {\n\t\tLight.call(this, color, intensity);\n\t\tthis.type = 'AmbientLight';\n\t}\n\n\tAmbientLight.prototype = Object.assign(Object.create(Light.prototype), {\n\t\tconstructor: AmbientLight,\n\t\tisAmbientLight: true\n\t});\n\n\tfunction RectAreaLight(color, intensity, width, height) {\n\t\tLight.call(this, color, intensity);\n\t\tthis.type = 'RectAreaLight';\n\t\tthis.width = width !== undefined ? width : 10;\n\t\tthis.height = height !== undefined ? height : 10;\n\t}\n\n\tRectAreaLight.prototype = Object.assign(Object.create(Light.prototype), {\n\t\tconstructor: RectAreaLight,\n\t\tisRectAreaLight: true,\n\t\tcopy: function copy(source) {\n\t\t\tLight.prototype.copy.call(this, source);\n\t\t\tthis.width = source.width;\n\t\t\tthis.height = source.height;\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar data = Light.prototype.toJSON.call(this, meta);\n\t\t\tdata.object.width = this.width;\n\t\t\tdata.object.height = this.height;\n\t\t\treturn data;\n\t\t}\n\t});\n\n\t/**\n\t * Primary reference:\n\t *\t https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\t *\n\t * Secondary reference:\n\t *\t https://www.ppsloan.org/publications/StupidSH36.pdf\n\t */\n\t// 3-band SH defined by 9 coefficients\n\n\tvar SphericalHarmonics3 = /*#__PURE__*/function () {\n\t\tfunction SphericalHarmonics3() {\n\t\t\tObject.defineProperty(this, 'isSphericalHarmonics3', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.coefficients = [];\n\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tthis.coefficients.push(new Vector3());\n\t\t\t}\n\t\t}\n\n\t\tvar _proto = SphericalHarmonics3.prototype;\n\n\t\t_proto.set = function set(coefficients) {\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tthis.coefficients[i].copy(coefficients[i]);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.zero = function zero() {\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tthis.coefficients[i].set(0, 0, 0);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t} // get the radiance in the direction of the normal\n\t\t// target is a Vector3\n\t\t;\n\n\t\t_proto.getAt = function getAt(normal, target) {\n\t\t\t// normal is assumed to be unit length\n\t\t\tvar x = normal.x,\n\t\t\t\t\ty = normal.y,\n\t\t\t\t\tz = normal.z;\n\t\t\tvar coeff = this.coefficients; // band 0\n\n\t\t\ttarget.copy(coeff[0]).multiplyScalar(0.282095); // band 1\n\n\t\t\ttarget.addScaledVector(coeff[1], 0.488603 * y);\n\t\t\ttarget.addScaledVector(coeff[2], 0.488603 * z);\n\t\t\ttarget.addScaledVector(coeff[3], 0.488603 * x); // band 2\n\n\t\t\ttarget.addScaledVector(coeff[4], 1.092548 * (x * y));\n\t\t\ttarget.addScaledVector(coeff[5], 1.092548 * (y * z));\n\t\t\ttarget.addScaledVector(coeff[6], 0.315392 * (3.0 * z * z - 1.0));\n\t\t\ttarget.addScaledVector(coeff[7], 1.092548 * (x * z));\n\t\t\ttarget.addScaledVector(coeff[8], 0.546274 * (x * x - y * y));\n\t\t\treturn target;\n\t\t} // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t\t// target is a Vector3\n\t\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\t\t;\n\n\t\t_proto.getIrradianceAt = function getIrradianceAt(normal, target) {\n\t\t\t// normal is assumed to be unit length\n\t\t\tvar x = normal.x,\n\t\t\t\t\ty = normal.y,\n\t\t\t\t\tz = normal.z;\n\t\t\tvar coeff = this.coefficients; // band 0\n\n\t\t\ttarget.copy(coeff[0]).multiplyScalar(0.886227); // π * 0.282095\n\t\t\t// band 1\n\n\t\t\ttarget.addScaledVector(coeff[1], 2.0 * 0.511664 * y); // ( 2 * π / 3 ) * 0.488603\n\n\t\t\ttarget.addScaledVector(coeff[2], 2.0 * 0.511664 * z);\n\t\t\ttarget.addScaledVector(coeff[3], 2.0 * 0.511664 * x); // band 2\n\n\t\t\ttarget.addScaledVector(coeff[4], 2.0 * 0.429043 * x * y); // ( π / 4 ) * 1.092548\n\n\t\t\ttarget.addScaledVector(coeff[5], 2.0 * 0.429043 * y * z);\n\t\t\ttarget.addScaledVector(coeff[6], 0.743125 * z * z - 0.247708); // ( π / 4 ) * 0.315392 * 3\n\n\t\t\ttarget.addScaledVector(coeff[7], 2.0 * 0.429043 * x * z);\n\t\t\ttarget.addScaledVector(coeff[8], 0.429043 * (x * x - y * y)); // ( π / 4 ) * 0.546274\n\n\t\t\treturn target;\n\t\t};\n\n\t\t_proto.add = function add(sh) {\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tthis.coefficients[i].add(sh.coefficients[i]);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.addScaledSH = function addScaledSH(sh, s) {\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tthis.coefficients[i].addScaledVector(sh.coefficients[i], s);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.scale = function scale(s) {\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tthis.coefficients[i].multiplyScalar(s);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.lerp = function lerp(sh, alpha) {\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tthis.coefficients[i].lerp(sh.coefficients[i], alpha);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(sh) {\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tif (!this.coefficients[i].equals(sh.coefficients[i])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\t_proto.copy = function copy(sh) {\n\t\t\treturn this.set(sh.coefficients);\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.fromArray = function fromArray(array, offset) {\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tvar coefficients = this.coefficients;\n\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tcoefficients[i].fromArray(array, offset + i * 3);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.toArray = function toArray(array, offset) {\n\t\t\tif (array === void 0) {\n\t\t\t\tarray = [];\n\t\t\t}\n\n\t\t\tif (offset === void 0) {\n\t\t\t\toffset = 0;\n\t\t\t}\n\n\t\t\tvar coefficients = this.coefficients;\n\n\t\t\tfor (var i = 0; i < 9; i++) {\n\t\t\t\tcoefficients[i].toArray(array, offset + i * 3);\n\t\t\t}\n\n\t\t\treturn array;\n\t\t} // evaluate the basis functions\n\t\t// shBasis is an Array[ 9 ]\n\t\t;\n\n\t\tSphericalHarmonics3.getBasisAt = function getBasisAt(normal, shBasis) {\n\t\t\t// normal is assumed to be unit length\n\t\t\tvar x = normal.x,\n\t\t\t\t\ty = normal.y,\n\t\t\t\t\tz = normal.z; // band 0\n\n\t\t\tshBasis[0] = 0.282095; // band 1\n\n\t\t\tshBasis[1] = 0.488603 * y;\n\t\t\tshBasis[2] = 0.488603 * z;\n\t\t\tshBasis[3] = 0.488603 * x; // band 2\n\n\t\t\tshBasis[4] = 1.092548 * x * y;\n\t\t\tshBasis[5] = 1.092548 * y * z;\n\t\t\tshBasis[6] = 0.315392 * (3 * z * z - 1);\n\t\t\tshBasis[7] = 1.092548 * x * z;\n\t\t\tshBasis[8] = 0.546274 * (x * x - y * y);\n\t\t};\n\n\t\treturn SphericalHarmonics3;\n\t}();\n\n\tfunction LightProbe(sh, intensity) {\n\t\tLight.call(this, undefined, intensity);\n\t\tthis.type = 'LightProbe';\n\t\tthis.sh = sh !== undefined ? sh : new SphericalHarmonics3();\n\t}\n\n\tLightProbe.prototype = Object.assign(Object.create(Light.prototype), {\n\t\tconstructor: LightProbe,\n\t\tisLightProbe: true,\n\t\tcopy: function copy(source) {\n\t\t\tLight.prototype.copy.call(this, source);\n\t\t\tthis.sh.copy(source.sh);\n\t\t\treturn this;\n\t\t},\n\t\tfromJSON: function fromJSON(json) {\n\t\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\n\t\t\tthis.sh.fromArray(json.sh);\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar data = Light.prototype.toJSON.call(this, meta);\n\t\t\tdata.object.sh = this.sh.toArray();\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tfunction MaterialLoader(manager) {\n\t\tLoader.call(this, manager);\n\t\tthis.textures = {};\n\t}\n\n\tMaterialLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: MaterialLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tvar scope = this;\n\t\t\tvar loader = new FileLoader(scope.manager);\n\t\t\tloader.setPath(scope.path);\n\t\t\tloader.setRequestHeader(scope.requestHeader);\n\t\t\tloader.setWithCredentials(scope.withCredentials);\n\t\t\tloader.load(url, function (text) {\n\t\t\t\ttry {\n\t\t\t\t\tonLoad(scope.parse(JSON.parse(text)));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (onError) {\n\t\t\t\t\t\tonError(e);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t}\n\t\t\t}, onProgress, onError);\n\t\t},\n\t\tparse: function parse(json) {\n\t\t\tvar textures = this.textures;\n\n\t\t\tfunction getTexture(name) {\n\t\t\t\tif (textures[name] === undefined) {\n\t\t\t\t\tconsole.warn('THREE.MaterialLoader: Undefined texture', name);\n\t\t\t\t}\n\n\t\t\t\treturn textures[name];\n\t\t\t}\n\n\t\t\tvar material = new Materials[json.type]();\n\t\t\tif (json.uuid !== undefined) material.uuid = json.uuid;\n\t\t\tif (json.name !== undefined) material.name = json.name;\n\t\t\tif (json.color !== undefined && material.color !== undefined) material.color.setHex(json.color);\n\t\t\tif (json.roughness !== undefined) material.roughness = json.roughness;\n\t\t\tif (json.metalness !== undefined) material.metalness = json.metalness;\n\t\t\tif (json.sheen !== undefined) material.sheen = new Color().setHex(json.sheen);\n\t\t\tif (json.emissive !== undefined && material.emissive !== undefined) material.emissive.setHex(json.emissive);\n\t\t\tif (json.specular !== undefined && material.specular !== undefined) material.specular.setHex(json.specular);\n\t\t\tif (json.shininess !== undefined) material.shininess = json.shininess;\n\t\t\tif (json.clearcoat !== undefined) material.clearcoat = json.clearcoat;\n\t\t\tif (json.clearcoatRoughness !== undefined) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\t\tif (json.fog !== undefined) material.fog = json.fog;\n\t\t\tif (json.flatShading !== undefined) material.flatShading = json.flatShading;\n\t\t\tif (json.blending !== undefined) material.blending = json.blending;\n\t\t\tif (json.combine !== undefined) material.combine = json.combine;\n\t\t\tif (json.side !== undefined) material.side = json.side;\n\t\t\tif (json.opacity !== undefined) material.opacity = json.opacity;\n\t\t\tif (json.transparent !== undefined) material.transparent = json.transparent;\n\t\t\tif (json.alphaTest !== undefined) material.alphaTest = json.alphaTest;\n\t\t\tif (json.depthTest !== undefined) material.depthTest = json.depthTest;\n\t\t\tif (json.depthWrite !== undefined) material.depthWrite = json.depthWrite;\n\t\t\tif (json.colorWrite !== undefined) material.colorWrite = json.colorWrite;\n\t\t\tif (json.stencilWrite !== undefined) material.stencilWrite = json.stencilWrite;\n\t\t\tif (json.stencilWriteMask !== undefined) material.stencilWriteMask = json.stencilWriteMask;\n\t\t\tif (json.stencilFunc !== undefined) material.stencilFunc = json.stencilFunc;\n\t\t\tif (json.stencilRef !== undefined) material.stencilRef = json.stencilRef;\n\t\t\tif (json.stencilFuncMask !== undefined) material.stencilFuncMask = json.stencilFuncMask;\n\t\t\tif (json.stencilFail !== undefined) material.stencilFail = json.stencilFail;\n\t\t\tif (json.stencilZFail !== undefined) material.stencilZFail = json.stencilZFail;\n\t\t\tif (json.stencilZPass !== undefined) material.stencilZPass = json.stencilZPass;\n\t\t\tif (json.wireframe !== undefined) material.wireframe = json.wireframe;\n\t\t\tif (json.wireframeLinewidth !== undefined) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\t\tif (json.wireframeLinecap !== undefined) material.wireframeLinecap = json.wireframeLinecap;\n\t\t\tif (json.wireframeLinejoin !== undefined) material.wireframeLinejoin = json.wireframeLinejoin;\n\t\t\tif (json.rotation !== undefined) material.rotation = json.rotation;\n\t\t\tif (json.linewidth !== 1) material.linewidth = json.linewidth;\n\t\t\tif (json.dashSize !== undefined) material.dashSize = json.dashSize;\n\t\t\tif (json.gapSize !== undefined) material.gapSize = json.gapSize;\n\t\t\tif (json.scale !== undefined) material.scale = json.scale;\n\t\t\tif (json.polygonOffset !== undefined) material.polygonOffset = json.polygonOffset;\n\t\t\tif (json.polygonOffsetFactor !== undefined) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\t\tif (json.polygonOffsetUnits !== undefined) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\t\t\tif (json.skinning !== undefined) material.skinning = json.skinning;\n\t\t\tif (json.morphTargets !== undefined) material.morphTargets = json.morphTargets;\n\t\t\tif (json.morphNormals !== undefined) material.morphNormals = json.morphNormals;\n\t\t\tif (json.dithering !== undefined) material.dithering = json.dithering;\n\t\t\tif (json.vertexTangents !== undefined) material.vertexTangents = json.vertexTangents;\n\t\t\tif (json.visible !== undefined) material.visible = json.visible;\n\t\t\tif (json.toneMapped !== undefined) material.toneMapped = json.toneMapped;\n\t\t\tif (json.userData !== undefined) material.userData = json.userData;\n\n\t\t\tif (json.vertexColors !== undefined) {\n\t\t\t\tif (typeof json.vertexColors === 'number') {\n\t\t\t\t\tmaterial.vertexColors = json.vertexColors > 0 ? true : false;\n\t\t\t\t} else {\n\t\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\t\t\t\t}\n\t\t\t} // Shader Material\n\n\n\t\t\tif (json.uniforms !== undefined) {\n\t\t\t\tfor (var name in json.uniforms) {\n\t\t\t\t\tvar uniform = json.uniforms[name];\n\t\t\t\t\tmaterial.uniforms[name] = {};\n\n\t\t\t\t\tswitch (uniform.type) {\n\t\t\t\t\t\tcase 't':\n\t\t\t\t\t\t\tmaterial.uniforms[name].value = getTexture(uniform.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\tmaterial.uniforms[name].value = new Color().setHex(uniform.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\t\tmaterial.uniforms[name].value = new Vector2().fromArray(uniform.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\t\tmaterial.uniforms[name].value = new Vector3().fromArray(uniform.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\t\tmaterial.uniforms[name].value = new Vector4().fromArray(uniform.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\t\tmaterial.uniforms[name].value = new Matrix3().fromArray(uniform.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\t\tmaterial.uniforms[name].value = new Matrix4().fromArray(uniform.value);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmaterial.uniforms[name].value = uniform.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (json.defines !== undefined) material.defines = json.defines;\n\t\t\tif (json.vertexShader !== undefined) material.vertexShader = json.vertexShader;\n\t\t\tif (json.fragmentShader !== undefined) material.fragmentShader = json.fragmentShader;\n\n\t\t\tif (json.extensions !== undefined) {\n\t\t\t\tfor (var key in json.extensions) {\n\t\t\t\t\tmaterial.extensions[key] = json.extensions[key];\n\t\t\t\t}\n\t\t\t} // Deprecated\n\n\n\t\t\tif (json.shading !== undefined) material.flatShading = json.shading === 1; // THREE.FlatShading\n\t\t\t// for PointsMaterial\n\n\t\t\tif (json.size !== undefined) material.size = json.size;\n\t\t\tif (json.sizeAttenuation !== undefined) material.sizeAttenuation = json.sizeAttenuation; // maps\n\n\t\t\tif (json.map !== undefined) material.map = getTexture(json.map);\n\t\t\tif (json.matcap !== undefined) material.matcap = getTexture(json.matcap);\n\t\t\tif (json.alphaMap !== undefined) material.alphaMap = getTexture(json.alphaMap);\n\t\t\tif (json.bumpMap !== undefined) material.bumpMap = getTexture(json.bumpMap);\n\t\t\tif (json.bumpScale !== undefined) material.bumpScale = json.bumpScale;\n\t\t\tif (json.normalMap !== undefined) material.normalMap = getTexture(json.normalMap);\n\t\t\tif (json.normalMapType !== undefined) material.normalMapType = json.normalMapType;\n\n\t\t\tif (json.normalScale !== undefined) {\n\t\t\t\tvar normalScale = json.normalScale;\n\n\t\t\t\tif (Array.isArray(normalScale) === false) {\n\t\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\t\t\t\t\tnormalScale = [normalScale, normalScale];\n\t\t\t\t}\n\n\t\t\t\tmaterial.normalScale = new Vector2().fromArray(normalScale);\n\t\t\t}\n\n\t\t\tif (json.displacementMap !== undefined) material.displacementMap = getTexture(json.displacementMap);\n\t\t\tif (json.displacementScale !== undefined) material.displacementScale = json.displacementScale;\n\t\t\tif (json.displacementBias !== undefined) material.displacementBias = json.displacementBias;\n\t\t\tif (json.roughnessMap !== undefined) material.roughnessMap = getTexture(json.roughnessMap);\n\t\t\tif (json.metalnessMap !== undefined) material.metalnessMap = getTexture(json.metalnessMap);\n\t\t\tif (json.emissiveMap !== undefined) material.emissiveMap = getTexture(json.emissiveMap);\n\t\t\tif (json.emissiveIntensity !== undefined) material.emissiveIntensity = json.emissiveIntensity;\n\t\t\tif (json.specularMap !== undefined) material.specularMap = getTexture(json.specularMap);\n\t\t\tif (json.envMap !== undefined) material.envMap = getTexture(json.envMap);\n\t\t\tif (json.envMapIntensity !== undefined) material.envMapIntensity = json.envMapIntensity;\n\t\t\tif (json.reflectivity !== undefined) material.reflectivity = json.reflectivity;\n\t\t\tif (json.refractionRatio !== undefined) material.refractionRatio = json.refractionRatio;\n\t\t\tif (json.lightMap !== undefined) material.lightMap = getTexture(json.lightMap);\n\t\t\tif (json.lightMapIntensity !== undefined) material.lightMapIntensity = json.lightMapIntensity;\n\t\t\tif (json.aoMap !== undefined) material.aoMap = getTexture(json.aoMap);\n\t\t\tif (json.aoMapIntensity !== undefined) material.aoMapIntensity = json.aoMapIntensity;\n\t\t\tif (json.gradientMap !== undefined) material.gradientMap = getTexture(json.gradientMap);\n\t\t\tif (json.clearcoatMap !== undefined) material.clearcoatMap = getTexture(json.clearcoatMap);\n\t\t\tif (json.clearcoatRoughnessMap !== undefined) material.clearcoatRoughnessMap = getTexture(json.clearcoatRoughnessMap);\n\t\t\tif (json.clearcoatNormalMap !== undefined) material.clearcoatNormalMap = getTexture(json.clearcoatNormalMap);\n\t\t\tif (json.clearcoatNormalScale !== undefined) material.clearcoatNormalScale = new Vector2().fromArray(json.clearcoatNormalScale);\n\t\t\tif (json.transmission !== undefined) material.transmission = json.transmission;\n\t\t\tif (json.transmissionMap !== undefined) material.transmissionMap = getTexture(json.transmissionMap);\n\t\t\treturn material;\n\t\t},\n\t\tsetTextures: function setTextures(value) {\n\t\t\tthis.textures = value;\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tvar LoaderUtils = {\n\t\tdecodeText: function decodeText(array) {\n\t\t\tif (typeof TextDecoder !== 'undefined') {\n\t\t\t\treturn new TextDecoder().decode(array);\n\t\t\t} // Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\n\t\t\tvar s = '';\n\n\t\t\tfor (var i = 0, il = array.length; i < il; i++) {\n\t\t\t\t// Implicitly assumes little-endian.\n\t\t\t\ts += String.fromCharCode(array[i]);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// merges multi-byte utf-8 characters.\n\t\t\t\treturn decodeURIComponent(escape(s));\n\t\t\t} catch (e) {\n\t\t\t\t// see #16358\n\t\t\t\treturn s;\n\t\t\t}\n\t\t},\n\t\textractUrlBase: function extractUrlBase(url) {\n\t\t\tvar index = url.lastIndexOf('/');\n\t\t\tif (index === -1) return './';\n\t\t\treturn url.substr(0, index + 1);\n\t\t}\n\t};\n\n\tfunction InstancedBufferGeometry() {\n\t\tBufferGeometry.call(this);\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\t}\n\n\tInstancedBufferGeometry.prototype = Object.assign(Object.create(BufferGeometry.prototype), {\n\t\tconstructor: InstancedBufferGeometry,\n\t\tisInstancedBufferGeometry: true,\n\t\tcopy: function copy(source) {\n\t\t\tBufferGeometry.prototype.copy.call(this, source);\n\t\t\tthis.instanceCount = source.instanceCount;\n\t\t\treturn this;\n\t\t},\n\t\tclone: function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = BufferGeometry.prototype.toJSON.call(this);\n\t\t\tdata.instanceCount = this.instanceCount;\n\t\t\tdata.isInstancedBufferGeometry = true;\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tfunction InstancedBufferAttribute(array, itemSize, normalized, meshPerAttribute) {\n\t\tif (typeof normalized === 'number') {\n\t\t\tmeshPerAttribute = normalized;\n\t\t\tnormalized = false;\n\t\t\tconsole.error('THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.');\n\t\t}\n\n\t\tBufferAttribute.call(this, array, itemSize, normalized);\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\t}\n\n\tInstancedBufferAttribute.prototype = Object.assign(Object.create(BufferAttribute.prototype), {\n\t\tconstructor: InstancedBufferAttribute,\n\t\tisInstancedBufferAttribute: true,\n\t\tcopy: function copy(source) {\n\t\t\tBufferAttribute.prototype.copy.call(this, source);\n\t\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON() {\n\t\t\tvar data = BufferAttribute.prototype.toJSON.call(this);\n\t\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\t\t\tdata.isInstancedBufferAttribute = true;\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tfunction BufferGeometryLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tBufferGeometryLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: BufferGeometryLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tvar scope = this;\n\t\t\tvar loader = new FileLoader(scope.manager);\n\t\t\tloader.setPath(scope.path);\n\t\t\tloader.setRequestHeader(scope.requestHeader);\n\t\t\tloader.setWithCredentials(scope.withCredentials);\n\t\t\tloader.load(url, function (text) {\n\t\t\t\ttry {\n\t\t\t\t\tonLoad(scope.parse(JSON.parse(text)));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (onError) {\n\t\t\t\t\t\tonError(e);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t}\n\t\t\t}, onProgress, onError);\n\t\t},\n\t\tparse: function parse(json) {\n\t\t\tvar interleavedBufferMap = {};\n\t\t\tvar arrayBufferMap = {};\n\n\t\t\tfunction getInterleavedBuffer(json, uuid) {\n\t\t\t\tif (interleavedBufferMap[uuid] !== undefined) return interleavedBufferMap[uuid];\n\t\t\t\tvar interleavedBuffers = json.interleavedBuffers;\n\t\t\t\tvar interleavedBuffer = interleavedBuffers[uuid];\n\t\t\t\tvar buffer = getArrayBuffer(json, interleavedBuffer.buffer);\n\t\t\t\tvar array = getTypedArray(interleavedBuffer.type, buffer);\n\t\t\t\tvar ib = new InterleavedBuffer(array, interleavedBuffer.stride);\n\t\t\t\tib.uuid = interleavedBuffer.uuid;\n\t\t\t\tinterleavedBufferMap[uuid] = ib;\n\t\t\t\treturn ib;\n\t\t\t}\n\n\t\t\tfunction getArrayBuffer(json, uuid) {\n\t\t\t\tif (arrayBufferMap[uuid] !== undefined) return arrayBufferMap[uuid];\n\t\t\t\tvar arrayBuffers = json.arrayBuffers;\n\t\t\t\tvar arrayBuffer = arrayBuffers[uuid];\n\t\t\t\tvar ab = new Uint32Array(arrayBuffer).buffer;\n\t\t\t\tarrayBufferMap[uuid] = ab;\n\t\t\t\treturn ab;\n\t\t\t}\n\n\t\t\tvar geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\t\t\tvar index = json.data.index;\n\n\t\t\tif (index !== undefined) {\n\t\t\t\tvar typedArray = getTypedArray(index.type, index.array);\n\t\t\t\tgeometry.setIndex(new BufferAttribute(typedArray, 1));\n\t\t\t}\n\n\t\t\tvar attributes = json.data.attributes;\n\n\t\t\tfor (var key in attributes) {\n\t\t\t\tvar attribute = attributes[key];\n\t\t\t\tvar bufferAttribute = void 0;\n\n\t\t\t\tif (attribute.isInterleavedBufferAttribute) {\n\t\t\t\t\tvar interleavedBuffer = getInterleavedBuffer(json.data, attribute.data);\n\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute(interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized);\n\t\t\t\t} else {\n\t\t\t\t\tvar _typedArray = getTypedArray(attribute.type, attribute.array);\n\n\t\t\t\t\tvar bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\t\tbufferAttribute = new bufferAttributeConstr(_typedArray, attribute.itemSize, attribute.normalized);\n\t\t\t\t}\n\n\t\t\t\tif (attribute.name !== undefined) bufferAttribute.name = attribute.name;\n\t\t\t\tgeometry.setAttribute(key, bufferAttribute);\n\t\t\t}\n\n\t\t\tvar morphAttributes = json.data.morphAttributes;\n\n\t\t\tif (morphAttributes) {\n\t\t\t\tfor (var _key in morphAttributes) {\n\t\t\t\t\tvar attributeArray = morphAttributes[_key];\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor (var i = 0, il = attributeArray.length; i < il; i++) {\n\t\t\t\t\t\tvar _attribute = attributeArray[i];\n\n\t\t\t\t\t\tvar _bufferAttribute = void 0;\n\n\t\t\t\t\t\tif (_attribute.isInterleavedBufferAttribute) {\n\t\t\t\t\t\t\tvar _interleavedBuffer = getInterleavedBuffer(json.data, _attribute.data);\n\n\t\t\t\t\t\t\t_bufferAttribute = new InterleavedBufferAttribute(_interleavedBuffer, _attribute.itemSize, _attribute.offset, _attribute.normalized);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar _typedArray2 = getTypedArray(_attribute.type, _attribute.array);\n\n\t\t\t\t\t\t\t_bufferAttribute = new BufferAttribute(_typedArray2, _attribute.itemSize, _attribute.normalized);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (_attribute.name !== undefined) _bufferAttribute.name = _attribute.name;\n\t\t\t\t\t\tarray.push(_bufferAttribute);\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.morphAttributes[_key] = array;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\t\tif (morphTargetsRelative) {\n\t\t\t\tgeometry.morphTargetsRelative = true;\n\t\t\t}\n\n\t\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\t\tif (groups !== undefined) {\n\t\t\t\tfor (var _i = 0, n = groups.length; _i !== n; ++_i) {\n\t\t\t\t\tvar group = groups[_i];\n\t\t\t\t\tgeometry.addGroup(group.start, group.count, group.materialIndex);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\t\tif (boundingSphere !== undefined) {\n\t\t\t\tvar center = new Vector3();\n\n\t\t\t\tif (boundingSphere.center !== undefined) {\n\t\t\t\t\tcenter.fromArray(boundingSphere.center);\n\t\t\t\t}\n\n\t\t\t\tgeometry.boundingSphere = new Sphere(center, boundingSphere.radius);\n\t\t\t}\n\n\t\t\tif (json.name) geometry.name = json.name;\n\t\t\tif (json.userData) geometry.userData = json.userData;\n\t\t\treturn geometry;\n\t\t}\n\t});\n\n\tvar ObjectLoader = /*#__PURE__*/function (_Loader) {\n\t\t_inheritsLoose(ObjectLoader, _Loader);\n\n\t\tfunction ObjectLoader(manager) {\n\t\t\treturn _Loader.call(this, manager) || this;\n\t\t}\n\n\t\tvar _proto = ObjectLoader.prototype;\n\n\t\t_proto.load = function load(url, onLoad, onProgress, onError) {\n\t\t\tvar scope = this;\n\t\t\tvar path = this.path === '' ? LoaderUtils.extractUrlBase(url) : this.path;\n\t\t\tthis.resourcePath = this.resourcePath || path;\n\t\t\tvar loader = new FileLoader(this.manager);\n\t\t\tloader.setPath(this.path);\n\t\t\tloader.setRequestHeader(this.requestHeader);\n\t\t\tloader.setWithCredentials(this.withCredentials);\n\t\t\tloader.load(url, function (text) {\n\t\t\t\tvar json = null;\n\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(text);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (onError !== undefined) onError(error);\n\t\t\t\t\tconsole.error('THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar metadata = json.metadata;\n\n\t\t\t\tif (metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry') {\n\t\t\t\t\tconsole.error('THREE.ObjectLoader: Can\\'t load ' + url);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tscope.parse(json, onLoad);\n\t\t\t}, onProgress, onError);\n\t\t};\n\n\t\t_proto.parse = function parse(json, onLoad) {\n\t\t\tvar animations = this.parseAnimations(json.animations);\n\t\t\tvar shapes = this.parseShapes(json.shapes);\n\t\t\tvar geometries = this.parseGeometries(json.geometries, shapes);\n\t\t\tvar images = this.parseImages(json.images, function () {\n\t\t\t\tif (onLoad !== undefined) onLoad(object);\n\t\t\t});\n\t\t\tvar textures = this.parseTextures(json.textures, images);\n\t\t\tvar materials = this.parseMaterials(json.materials, textures);\n\t\t\tvar object = this.parseObject(json.object, geometries, materials, animations);\n\t\t\tvar skeletons = this.parseSkeletons(json.skeletons, object);\n\t\t\tthis.bindSkeletons(object, skeletons); //\n\n\t\t\tif (onLoad !== undefined) {\n\t\t\t\tvar hasImages = false;\n\n\t\t\t\tfor (var uuid in images) {\n\t\t\t\t\tif (images[uuid] instanceof HTMLImageElement) {\n\t\t\t\t\t\thasImages = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (hasImages === false) onLoad(object);\n\t\t\t}\n\n\t\t\treturn object;\n\t\t};\n\n\t\t_proto.parseShapes = function parseShapes(json) {\n\t\t\tvar shapes = {};\n\n\t\t\tif (json !== undefined) {\n\t\t\t\tfor (var i = 0, l = json.length; i < l; i++) {\n\t\t\t\t\tvar shape = new Shape().fromJSON(json[i]);\n\t\t\t\t\tshapes[shape.uuid] = shape;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn shapes;\n\t\t};\n\n\t\t_proto.parseSkeletons = function parseSkeletons(json, object) {\n\t\t\tvar skeletons = {};\n\t\t\tvar bones = {}; // generate bone lookup table\n\n\t\t\tobject.traverse(function (child) {\n\t\t\t\tif (child.isBone) bones[child.uuid] = child;\n\t\t\t}); // create skeletons\n\n\t\t\tif (json !== undefined) {\n\t\t\t\tfor (var i = 0, l = json.length; i < l; i++) {\n\t\t\t\t\tvar skeleton = new Skeleton().fromJSON(json[i], bones);\n\t\t\t\t\tskeletons[skeleton.uuid] = skeleton;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn skeletons;\n\t\t};\n\n\t\t_proto.parseGeometries = function parseGeometries(json, shapes) {\n\t\t\tvar geometries = {};\n\t\t\tvar geometryShapes;\n\n\t\t\tif (json !== undefined) {\n\t\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\t\tfor (var i = 0, l = json.length; i < l; i++) {\n\t\t\t\t\tvar geometry = void 0;\n\t\t\t\t\tvar data = json[i];\n\n\t\t\t\t\tswitch (data.type) {\n\t\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\t\tcase 'PlaneBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.width, data.height, data.widthSegments, data.heightSegments);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\t\tcase 'CubeGeometry':\n\t\t\t\t\t\t\t// backwards compatible\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\t\tcase 'CircleBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.radius, data.segments, data.thetaStart, data.thetaLength);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\t\tcase 'CylinderBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\t\tcase 'ConeBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\t\tcase 'SphereBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.radius, data.detail);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\t\tcase 'RingBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\t\tcase 'TorusBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TubeGeometry':\n\t\t\t\t\t\tcase 'TubeBufferGeometry':\n\t\t\t\t\t\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t\t\t\t\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](new Curves[data.path.type]().fromJSON(data.path), data.tubularSegments, data.radius, data.radialSegments, data.closed);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\t\tcase 'LatheBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.points, data.segments, data.phiStart, data.phiLength);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](data.vertices, data.indices, data.radius, data.details);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\t\tcase 'ShapeBufferGeometry':\n\t\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\t\tfor (var j = 0, jl = data.shapes.length; j < jl; j++) {\n\t\t\t\t\t\t\t\tvar shape = shapes[data.shapes[j]];\n\t\t\t\t\t\t\t\tgeometryShapes.push(shape);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](geometryShapes, data.curveSegments);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\t\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\t\tfor (var _j = 0, _jl = data.shapes.length; _j < _jl; _j++) {\n\t\t\t\t\t\t\t\tvar _shape = shapes[data.shapes[_j]];\n\t\t\t\t\t\t\t\tgeometryShapes.push(_shape);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\t\tif (extrudePath !== undefined) {\n\t\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[extrudePath.type]().fromJSON(extrudePath);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgeometry = new Geometries[data.type](geometryShapes, data.options);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\t\tcase 'InstancedBufferGeometry':\n\t\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse(data);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'Geometry':\n\t\t\t\t\t\t\tconsole.error('THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.');\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn('THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"');\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.uuid = data.uuid;\n\t\t\t\t\tif (data.name !== undefined) geometry.name = data.name;\n\t\t\t\t\tif (geometry.isBufferGeometry === true && data.userData !== undefined) geometry.userData = data.userData;\n\t\t\t\t\tgeometries[data.uuid] = geometry;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn geometries;\n\t\t};\n\n\t\t_proto.parseMaterials = function parseMaterials(json, textures) {\n\t\t\tvar cache = {}; // MultiMaterial\n\n\t\t\tvar materials = {};\n\n\t\t\tif (json !== undefined) {\n\t\t\t\tvar loader = new MaterialLoader();\n\t\t\t\tloader.setTextures(textures);\n\n\t\t\t\tfor (var i = 0, l = json.length; i < l; i++) {\n\t\t\t\t\tvar data = json[i];\n\n\t\t\t\t\tif (data.type === 'MultiMaterial') {\n\t\t\t\t\t\t// Deprecated\n\t\t\t\t\t\tvar array = [];\n\n\t\t\t\t\t\tfor (var j = 0; j < data.materials.length; j++) {\n\t\t\t\t\t\t\tvar material = data.materials[j];\n\n\t\t\t\t\t\t\tif (cache[material.uuid] === undefined) {\n\t\t\t\t\t\t\t\tcache[material.uuid] = loader.parse(material);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tarray.push(cache[material.uuid]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterials[data.uuid] = array;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (cache[data.uuid] === undefined) {\n\t\t\t\t\t\t\tcache[data.uuid] = loader.parse(data);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterials[data.uuid] = cache[data.uuid];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn materials;\n\t\t};\n\n\t\t_proto.parseAnimations = function parseAnimations(json) {\n\t\t\tvar animations = {};\n\n\t\t\tif (json !== undefined) {\n\t\t\t\tfor (var i = 0; i < json.length; i++) {\n\t\t\t\t\tvar data = json[i];\n\t\t\t\t\tvar clip = AnimationClip.parse(data);\n\t\t\t\t\tanimations[clip.uuid] = clip;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn animations;\n\t\t};\n\n\t\t_proto.parseImages = function parseImages(json, onLoad) {\n\t\t\tvar scope = this;\n\t\t\tvar images = {};\n\t\t\tvar loader;\n\n\t\t\tfunction loadImage(url) {\n\t\t\t\tscope.manager.itemStart(url);\n\t\t\t\treturn loader.load(url, function () {\n\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t}, undefined, function () {\n\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction deserializeImage(image) {\n\t\t\t\tif (typeof image === 'string') {\n\t\t\t\t\tvar url = image;\n\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test(url) ? url : scope.resourcePath + url;\n\t\t\t\t\treturn loadImage(path);\n\t\t\t\t} else {\n\t\t\t\t\tif (image.data) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tdata: getTypedArray(image.type, image.data),\n\t\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\t\theight: image.height\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (json !== undefined && json.length > 0) {\n\t\t\t\tvar manager = new LoadingManager(onLoad);\n\t\t\t\tloader = new ImageLoader(manager);\n\t\t\t\tloader.setCrossOrigin(this.crossOrigin);\n\n\t\t\t\tfor (var i = 0, il = json.length; i < il; i++) {\n\t\t\t\t\tvar image = json[i];\n\t\t\t\t\tvar url = image.url;\n\n\t\t\t\t\tif (Array.isArray(url)) {\n\t\t\t\t\t\t// load array of images e.g CubeTexture\n\t\t\t\t\t\timages[image.uuid] = [];\n\n\t\t\t\t\t\tfor (var j = 0, jl = url.length; j < jl; j++) {\n\t\t\t\t\t\t\tvar currentUrl = url[j];\n\t\t\t\t\t\t\tvar deserializedImage = deserializeImage(currentUrl);\n\n\t\t\t\t\t\t\tif (deserializedImage !== null) {\n\t\t\t\t\t\t\t\tif (deserializedImage instanceof HTMLImageElement) {\n\t\t\t\t\t\t\t\t\timages[image.uuid].push(deserializedImage);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\t\t\t\t\t\t\t\t\timages[image.uuid].push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// load single image\n\t\t\t\t\t\tvar _deserializedImage = deserializeImage(image.url);\n\n\t\t\t\t\t\tif (_deserializedImage !== null) {\n\t\t\t\t\t\t\timages[image.uuid] = _deserializedImage;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn images;\n\t\t};\n\n\t\t_proto.parseTextures = function parseTextures(json, images) {\n\t\t\tfunction parseConstant(value, type) {\n\t\t\t\tif (typeof value === 'number') return value;\n\t\t\t\tconsole.warn('THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value);\n\t\t\t\treturn type[value];\n\t\t\t}\n\n\t\t\tvar textures = {};\n\n\t\t\tif (json !== undefined) {\n\t\t\t\tfor (var i = 0, l = json.length; i < l; i++) {\n\t\t\t\t\tvar data = json[i];\n\n\t\t\t\t\tif (data.image === undefined) {\n\t\t\t\t\t\tconsole.warn('THREE.ObjectLoader: No \"image\" specified for', data.uuid);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (images[data.image] === undefined) {\n\t\t\t\t\t\tconsole.warn('THREE.ObjectLoader: Undefined image', data.image);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar texture = void 0;\n\t\t\t\t\tvar image = images[data.image];\n\n\t\t\t\t\tif (Array.isArray(image)) {\n\t\t\t\t\t\ttexture = new CubeTexture(image);\n\t\t\t\t\t\tif (image.length === 6) texture.needsUpdate = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (image && image.data) {\n\t\t\t\t\t\t\ttexture = new DataTexture(image.data, image.width, image.height);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttexture = new Texture(image);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (image) texture.needsUpdate = true; // textures can have undefined image data\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.uuid = data.uuid;\n\t\t\t\t\tif (data.name !== undefined) texture.name = data.name;\n\t\t\t\t\tif (data.mapping !== undefined) texture.mapping = parseConstant(data.mapping, TEXTURE_MAPPING);\n\t\t\t\t\tif (data.offset !== undefined) texture.offset.fromArray(data.offset);\n\t\t\t\t\tif (data.repeat !== undefined) texture.repeat.fromArray(data.repeat);\n\t\t\t\t\tif (data.center !== undefined) texture.center.fromArray(data.center);\n\t\t\t\t\tif (data.rotation !== undefined) texture.rotation = data.rotation;\n\n\t\t\t\t\tif (data.wrap !== undefined) {\n\t\t\t\t\t\ttexture.wrapS = parseConstant(data.wrap[0], TEXTURE_WRAPPING);\n\t\t\t\t\t\ttexture.wrapT = parseConstant(data.wrap[1], TEXTURE_WRAPPING);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.format !== undefined) texture.format = data.format;\n\t\t\t\t\tif (data.type !== undefined) texture.type = data.type;\n\t\t\t\t\tif (data.encoding !== undefined) texture.encoding = data.encoding;\n\t\t\t\t\tif (data.minFilter !== undefined) texture.minFilter = parseConstant(data.minFilter, TEXTURE_FILTER);\n\t\t\t\t\tif (data.magFilter !== undefined) texture.magFilter = parseConstant(data.magFilter, TEXTURE_FILTER);\n\t\t\t\t\tif (data.anisotropy !== undefined) texture.anisotropy = data.anisotropy;\n\t\t\t\t\tif (data.flipY !== undefined) texture.flipY = data.flipY;\n\t\t\t\t\tif (data.premultiplyAlpha !== undefined) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\t\tif (data.unpackAlignment !== undefined) texture.unpackAlignment = data.unpackAlignment;\n\t\t\t\t\ttextures[data.uuid] = texture;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn textures;\n\t\t};\n\n\t\t_proto.parseObject = function parseObject(data, geometries, materials, animations) {\n\t\t\tvar object;\n\n\t\t\tfunction getGeometry(name) {\n\t\t\t\tif (geometries[name] === undefined) {\n\t\t\t\t\tconsole.warn('THREE.ObjectLoader: Undefined geometry', name);\n\t\t\t\t}\n\n\t\t\t\treturn geometries[name];\n\t\t\t}\n\n\t\t\tfunction getMaterial(name) {\n\t\t\t\tif (name === undefined) return undefined;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor (var i = 0, l = name.length; i < l; i++) {\n\t\t\t\t\t\tvar uuid = name[i];\n\n\t\t\t\t\t\tif (materials[uuid] === undefined) {\n\t\t\t\t\t\t\tconsole.warn('THREE.ObjectLoader: Undefined material', uuid);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push(materials[uuid]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn array;\n\t\t\t\t}\n\n\t\t\t\tif (materials[name] === undefined) {\n\t\t\t\t\tconsole.warn('THREE.ObjectLoader: Undefined material', name);\n\t\t\t\t}\n\n\t\t\t\treturn materials[name];\n\t\t\t}\n\n\t\t\tvar geometry, material;\n\n\t\t\tswitch (data.type) {\n\t\t\t\tcase 'Scene':\n\t\t\t\t\tobject = new Scene();\n\n\t\t\t\t\tif (data.background !== undefined) {\n\t\t\t\t\t\tif (Number.isInteger(data.background)) {\n\t\t\t\t\t\t\tobject.background = new Color(data.background);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.fog !== undefined) {\n\t\t\t\t\t\tif (data.fog.type === 'Fog') {\n\t\t\t\t\t\t\tobject.fog = new Fog(data.fog.color, data.fog.near, data.fog.far);\n\t\t\t\t\t\t} else if (data.fog.type === 'FogExp2') {\n\t\t\t\t\t\t\tobject.fog = new FogExp2(data.fog.color, data.fog.density);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PerspectiveCamera':\n\t\t\t\t\tobject = new PerspectiveCamera(data.fov, data.aspect, data.near, data.far);\n\t\t\t\t\tif (data.focus !== undefined) object.focus = data.focus;\n\t\t\t\t\tif (data.zoom !== undefined) object.zoom = data.zoom;\n\t\t\t\t\tif (data.filmGauge !== undefined) object.filmGauge = data.filmGauge;\n\t\t\t\t\tif (data.filmOffset !== undefined) object.filmOffset = data.filmOffset;\n\t\t\t\t\tif (data.view !== undefined) object.view = Object.assign({}, data.view);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'OrthographicCamera':\n\t\t\t\t\tobject = new OrthographicCamera(data.left, data.right, data.top, data.bottom, data.near, data.far);\n\t\t\t\t\tif (data.zoom !== undefined) object.zoom = data.zoom;\n\t\t\t\t\tif (data.view !== undefined) object.view = Object.assign({}, data.view);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'AmbientLight':\n\t\t\t\t\tobject = new AmbientLight(data.color, data.intensity);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tobject = new DirectionalLight(data.color, data.intensity);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tobject = new PointLight(data.color, data.intensity, data.distance, data.decay);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tobject = new RectAreaLight(data.color, data.intensity, data.width, data.height);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tobject = new SpotLight(data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tobject = new HemisphereLight(data.color, data.groundColor, data.intensity);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LightProbe':\n\t\t\t\t\tobject = new LightProbe().fromJSON(data);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SkinnedMesh':\n\t\t\t\t\tgeometry = getGeometry(data.geometry);\n\t\t\t\t\tmaterial = getMaterial(data.material);\n\t\t\t\t\tobject = new SkinnedMesh(geometry, material);\n\t\t\t\t\tif (data.bindMode !== undefined) object.bindMode = data.bindMode;\n\t\t\t\t\tif (data.bindMatrix !== undefined) object.bindMatrix.fromArray(data.bindMatrix);\n\t\t\t\t\tif (data.skeleton !== undefined) object.skeleton = data.skeleton;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Mesh':\n\t\t\t\t\tgeometry = getGeometry(data.geometry);\n\t\t\t\t\tmaterial = getMaterial(data.material);\n\t\t\t\t\tobject = new Mesh(geometry, material);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'InstancedMesh':\n\t\t\t\t\tgeometry = getGeometry(data.geometry);\n\t\t\t\t\tmaterial = getMaterial(data.material);\n\t\t\t\t\tvar count = data.count;\n\t\t\t\t\tvar instanceMatrix = data.instanceMatrix;\n\t\t\t\t\tobject = new InstancedMesh(geometry, material, count);\n\t\t\t\t\tobject.instanceMatrix = new BufferAttribute(new Float32Array(instanceMatrix.array), 16);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LOD':\n\t\t\t\t\tobject = new LOD();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Line':\n\t\t\t\t\tobject = new Line(getGeometry(data.geometry), getMaterial(data.material));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LineLoop':\n\t\t\t\t\tobject = new LineLoop(getGeometry(data.geometry), getMaterial(data.material));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LineSegments':\n\t\t\t\t\tobject = new LineSegments(getGeometry(data.geometry), getMaterial(data.material));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointCloud':\n\t\t\t\tcase 'Points':\n\t\t\t\t\tobject = new Points(getGeometry(data.geometry), getMaterial(data.material));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Sprite':\n\t\t\t\t\tobject = new Sprite(getMaterial(data.material));\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Group':\n\t\t\t\t\tobject = new Group();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Bone':\n\t\t\t\t\tobject = new Bone();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tobject = new Object3D();\n\t\t\t}\n\n\t\t\tobject.uuid = data.uuid;\n\t\t\tif (data.name !== undefined) object.name = data.name;\n\n\t\t\tif (data.matrix !== undefined) {\n\t\t\t\tobject.matrix.fromArray(data.matrix);\n\t\t\t\tif (data.matrixAutoUpdate !== undefined) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\t\tif (object.matrixAutoUpdate) object.matrix.decompose(object.position, object.quaternion, object.scale);\n\t\t\t} else {\n\t\t\t\tif (data.position !== undefined) object.position.fromArray(data.position);\n\t\t\t\tif (data.rotation !== undefined) object.rotation.fromArray(data.rotation);\n\t\t\t\tif (data.quaternion !== undefined) object.quaternion.fromArray(data.quaternion);\n\t\t\t\tif (data.scale !== undefined) object.scale.fromArray(data.scale);\n\t\t\t}\n\n\t\t\tif (data.castShadow !== undefined) object.castShadow = data.castShadow;\n\t\t\tif (data.receiveShadow !== undefined) object.receiveShadow = data.receiveShadow;\n\n\t\t\tif (data.shadow) {\n\t\t\t\tif (data.shadow.bias !== undefined) object.shadow.bias = data.shadow.bias;\n\t\t\t\tif (data.shadow.normalBias !== undefined) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\t\tif (data.shadow.radius !== undefined) object.shadow.radius = data.shadow.radius;\n\t\t\t\tif (data.shadow.mapSize !== undefined) object.shadow.mapSize.fromArray(data.shadow.mapSize);\n\t\t\t\tif (data.shadow.camera !== undefined) object.shadow.camera = this.parseObject(data.shadow.camera);\n\t\t\t}\n\n\t\t\tif (data.visible !== undefined) object.visible = data.visible;\n\t\t\tif (data.frustumCulled !== undefined) object.frustumCulled = data.frustumCulled;\n\t\t\tif (data.renderOrder !== undefined) object.renderOrder = data.renderOrder;\n\t\t\tif (data.userData !== undefined) object.userData = data.userData;\n\t\t\tif (data.layers !== undefined) object.layers.mask = data.layers;\n\n\t\t\tif (data.children !== undefined) {\n\t\t\t\tvar children = data.children;\n\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tobject.add(this.parseObject(children[i], geometries, materials, animations));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (data.animations !== undefined) {\n\t\t\t\tvar objectAnimations = data.animations;\n\n\t\t\t\tfor (var _i = 0; _i < objectAnimations.length; _i++) {\n\t\t\t\t\tvar uuid = objectAnimations[_i];\n\t\t\t\t\tobject.animations.push(animations[uuid]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (data.type === 'LOD') {\n\t\t\t\tif (data.autoUpdate !== undefined) object.autoUpdate = data.autoUpdate;\n\t\t\t\tvar levels = data.levels;\n\n\t\t\t\tfor (var l = 0; l < levels.length; l++) {\n\t\t\t\t\tvar level = levels[l];\n\t\t\t\t\tvar child = object.getObjectByProperty('uuid', level.object);\n\n\t\t\t\t\tif (child !== undefined) {\n\t\t\t\t\t\tobject.addLevel(child, level.distance);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn object;\n\t\t};\n\n\t\t_proto.bindSkeletons = function bindSkeletons(object, skeletons) {\n\t\t\tif (Object.keys(skeletons).length === 0) return;\n\t\t\tobject.traverse(function (child) {\n\t\t\t\tif (child.isSkinnedMesh === true && child.skeleton !== undefined) {\n\t\t\t\t\tvar skeleton = skeletons[child.skeleton];\n\n\t\t\t\t\tif (skeleton === undefined) {\n\t\t\t\t\t\tconsole.warn('THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.bind(skeleton, child.bindMatrix);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t/* DEPRECATED */\n\t\t;\n\n\t\t_proto.setTexturePath = function setTexturePath(value) {\n\t\t\tconsole.warn('THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().');\n\t\t\treturn this.setResourcePath(value);\n\t\t};\n\n\t\treturn ObjectLoader;\n\t}(Loader);\n\n\tvar TEXTURE_MAPPING = {\n\t\tUVMapping: UVMapping,\n\t\tCubeReflectionMapping: CubeReflectionMapping,\n\t\tCubeRefractionMapping: CubeRefractionMapping,\n\t\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\t\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\t\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\t\tCubeUVRefractionMapping: CubeUVRefractionMapping\n\t};\n\tvar TEXTURE_WRAPPING = {\n\t\tRepeatWrapping: RepeatWrapping,\n\t\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\t\tMirroredRepeatWrapping: MirroredRepeatWrapping\n\t};\n\tvar TEXTURE_FILTER = {\n\t\tNearestFilter: NearestFilter,\n\t\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\t\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\t\tLinearFilter: LinearFilter,\n\t\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\t\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n\t};\n\n\tfunction ImageBitmapLoader(manager) {\n\t\tif (typeof createImageBitmap === 'undefined') {\n\t\t\tconsole.warn('THREE.ImageBitmapLoader: createImageBitmap() not supported.');\n\t\t}\n\n\t\tif (typeof fetch === 'undefined') {\n\t\t\tconsole.warn('THREE.ImageBitmapLoader: fetch() not supported.');\n\t\t}\n\n\t\tLoader.call(this, manager);\n\t\tthis.options = {\n\t\t\tpremultiplyAlpha: 'none'\n\t\t};\n\t}\n\n\tImageBitmapLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: ImageBitmapLoader,\n\t\tisImageBitmapLoader: true,\n\t\tsetOptions: function setOptions(options) {\n\t\t\tthis.options = options;\n\t\t\treturn this;\n\t\t},\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tif (url === undefined) url = '';\n\t\t\tif (this.path !== undefined) url = this.path + url;\n\t\t\turl = this.manager.resolveURL(url);\n\t\t\tvar scope = this;\n\t\t\tvar cached = Cache.get(url);\n\n\t\t\tif (cached !== undefined) {\n\t\t\t\tscope.manager.itemStart(url);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (onLoad) onLoad(cached);\n\t\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t\t}, 0);\n\t\t\t\treturn cached;\n\t\t\t}\n\n\t\t\tvar fetchOptions = {};\n\t\t\tfetchOptions.credentials = this.crossOrigin === 'anonymous' ? 'same-origin' : 'include';\n\t\t\tfetch(url, fetchOptions).then(function (res) {\n\t\t\t\treturn res.blob();\n\t\t\t}).then(function (blob) {\n\t\t\t\treturn createImageBitmap(blob, scope.options);\n\t\t\t}).then(function (imageBitmap) {\n\t\t\t\tCache.add(url, imageBitmap);\n\t\t\t\tif (onLoad) onLoad(imageBitmap);\n\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t}).catch(function (e) {\n\t\t\t\tif (onError) onError(e);\n\t\t\t\tscope.manager.itemError(url);\n\t\t\t\tscope.manager.itemEnd(url);\n\t\t\t});\n\t\t\tscope.manager.itemStart(url);\n\t\t}\n\t});\n\n\tfunction ShapePath() {\n\t\tthis.type = 'ShapePath';\n\t\tthis.color = new Color();\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\t}\n\n\tObject.assign(ShapePath.prototype, {\n\t\tmoveTo: function moveTo(x, y) {\n\t\t\tthis.currentPath = new Path();\n\t\t\tthis.subPaths.push(this.currentPath);\n\t\t\tthis.currentPath.moveTo(x, y);\n\t\t\treturn this;\n\t\t},\n\t\tlineTo: function lineTo(x, y) {\n\t\t\tthis.currentPath.lineTo(x, y);\n\t\t\treturn this;\n\t\t},\n\t\tquadraticCurveTo: function quadraticCurveTo(aCPx, aCPy, aX, aY) {\n\t\t\tthis.currentPath.quadraticCurveTo(aCPx, aCPy, aX, aY);\n\t\t\treturn this;\n\t\t},\n\t\tbezierCurveTo: function bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) {\n\t\t\tthis.currentPath.bezierCurveTo(aCP1x, aCP1y, aCP2x, aCP2y, aX, aY);\n\t\t\treturn this;\n\t\t},\n\t\tsplineThru: function splineThru(pts) {\n\t\t\tthis.currentPath.splineThru(pts);\n\t\t\treturn this;\n\t\t},\n\t\ttoShapes: function toShapes(isCCW, noHoles) {\n\t\t\tfunction toShapesNoHoles(inSubpaths) {\n\t\t\t\tvar shapes = [];\n\n\t\t\t\tfor (var i = 0, l = inSubpaths.length; i < l; i++) {\n\t\t\t\t\tvar _tmpPath = inSubpaths[i];\n\n\t\t\t\t\tvar _tmpShape = new Shape();\n\n\t\t\t\t\t_tmpShape.curves = _tmpPath.curves;\n\t\t\t\t\tshapes.push(_tmpShape);\n\t\t\t\t}\n\n\t\t\t\treturn shapes;\n\t\t\t}\n\n\t\t\tfunction isPointInsidePolygon(inPt, inPolygon) {\n\t\t\t\tvar polyLen = inPolygon.length; // inPt on polygon contour => immediate success\t\tor\n\t\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t\t//\twith the horizontal line through inPt, left of inPt\n\t\t\t\t//\tnot counting lowerY endpoints of edges and whole edges on that line\n\n\t\t\t\tvar inside = false;\n\n\t\t\t\tfor (var p = polyLen - 1, q = 0; q < polyLen; p = q++) {\n\t\t\t\t\tvar edgeLowPt = inPolygon[p];\n\t\t\t\t\tvar edgeHighPt = inPolygon[q];\n\t\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\t\tif (Math.abs(edgeDy) > Number.EPSILON) {\n\t\t\t\t\t\t// not parallel\n\t\t\t\t\t\tif (edgeDy < 0) {\n\t\t\t\t\t\t\tedgeLowPt = inPolygon[q];\n\t\t\t\t\t\t\tedgeDx = -edgeDx;\n\t\t\t\t\t\t\tedgeHighPt = inPolygon[p];\n\t\t\t\t\t\t\tedgeDy = -edgeDy;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (inPt.y < edgeLowPt.y || inPt.y > edgeHighPt.y) continue;\n\n\t\t\t\t\t\tif (inPt.y === edgeLowPt.y) {\n\t\t\t\t\t\t\tif (inPt.x === edgeLowPt.x) return true; // inPt is on contour ?\n\t\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar perpEdge = edgeDy * (inPt.x - edgeLowPt.x) - edgeDx * (inPt.y - edgeLowPt.y);\n\t\t\t\t\t\t\tif (perpEdge === 0) return true; // inPt is on contour ?\n\n\t\t\t\t\t\t\tif (perpEdge < 0) continue;\n\t\t\t\t\t\t\tinside = !inside; // true intersection left of inPt\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// parallel or collinear\n\t\t\t\t\t\tif (inPt.y !== edgeLowPt.y) continue; // parallel\n\t\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\n\t\t\t\t\t\tif (edgeHighPt.x <= inPt.x && inPt.x <= edgeLowPt.x || edgeLowPt.x <= inPt.x && inPt.x <= edgeHighPt.x) return true; // inPt: Point on contour !\n\t\t\t\t\t\t// continue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn inside;\n\t\t\t}\n\n\t\t\tvar isClockWise = ShapeUtils.isClockWise;\n\t\t\tvar subPaths = this.subPaths;\n\t\t\tif (subPaths.length === 0) return [];\n\t\t\tif (noHoles === true) return toShapesNoHoles(subPaths);\n\t\t\tvar solid, tmpPath, tmpShape;\n\t\t\tvar shapes = [];\n\n\t\t\tif (subPaths.length === 1) {\n\t\t\t\ttmpPath = subPaths[0];\n\t\t\t\ttmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\t\tshapes.push(tmpShape);\n\t\t\t\treturn shapes;\n\t\t\t}\n\n\t\t\tvar holesFirst = !isClockWise(subPaths[0].getPoints());\n\t\t\tholesFirst = isCCW ? !holesFirst : holesFirst; // console.log(\"Holes first\", holesFirst);\n\n\t\t\tvar betterShapeHoles = [];\n\t\t\tvar newShapes = [];\n\t\t\tvar newShapeHoles = [];\n\t\t\tvar mainIdx = 0;\n\t\t\tvar tmpPoints;\n\t\t\tnewShapes[mainIdx] = undefined;\n\t\t\tnewShapeHoles[mainIdx] = [];\n\n\t\t\tfor (var i = 0, l = subPaths.length; i < l; i++) {\n\t\t\t\ttmpPath = subPaths[i];\n\t\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\t\tsolid = isClockWise(tmpPoints);\n\t\t\t\tsolid = isCCW ? !solid : solid;\n\n\t\t\t\tif (solid) {\n\t\t\t\t\tif (!holesFirst && newShapes[mainIdx]) mainIdx++;\n\t\t\t\t\tnewShapes[mainIdx] = {\n\t\t\t\t\t\ts: new Shape(),\n\t\t\t\t\t\tp: tmpPoints\n\t\t\t\t\t};\n\t\t\t\t\tnewShapes[mainIdx].s.curves = tmpPath.curves;\n\t\t\t\t\tif (holesFirst) mainIdx++;\n\t\t\t\t\tnewShapeHoles[mainIdx] = []; //console.log('cw', i);\n\t\t\t\t} else {\n\t\t\t\t\tnewShapeHoles[mainIdx].push({\n\t\t\t\t\t\th: tmpPath,\n\t\t\t\t\t\tp: tmpPoints[0]\n\t\t\t\t\t}); //console.log('ccw', i);\n\t\t\t\t}\n\t\t\t} // only Holes? -> probably all Shapes with wrong orientation\n\n\n\t\t\tif (!newShapes[0]) return toShapesNoHoles(subPaths);\n\n\t\t\tif (newShapes.length > 1) {\n\t\t\t\tvar ambiguous = false;\n\t\t\t\tvar toChange = [];\n\n\t\t\t\tfor (var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx++) {\n\t\t\t\t\tbetterShapeHoles[sIdx] = [];\n\t\t\t\t}\n\n\t\t\t\tfor (var _sIdx = 0, _sLen = newShapes.length; _sIdx < _sLen; _sIdx++) {\n\t\t\t\t\tvar sho = newShapeHoles[_sIdx];\n\n\t\t\t\t\tfor (var hIdx = 0; hIdx < sho.length; hIdx++) {\n\t\t\t\t\t\tvar ho = sho[hIdx];\n\t\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\t\tfor (var s2Idx = 0; s2Idx < newShapes.length; s2Idx++) {\n\t\t\t\t\t\t\tif (isPointInsidePolygon(ho.p, newShapes[s2Idx].p)) {\n\t\t\t\t\t\t\t\tif (_sIdx !== s2Idx) toChange.push({\n\t\t\t\t\t\t\t\t\tfroms: _sIdx,\n\t\t\t\t\t\t\t\t\ttos: s2Idx,\n\t\t\t\t\t\t\t\t\thole: hIdx\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (hole_unassigned) {\n\t\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\t\tbetterShapeHoles[s2Idx].push(ho);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tambiguous = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (hole_unassigned) {\n\t\t\t\t\t\t\tbetterShapeHoles[_sIdx].push(ho);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} // console.log(\"ambiguous: \", ambiguous);\n\n\n\t\t\t\tif (toChange.length > 0) {\n\t\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\t\tif (!ambiguous) newShapeHoles = betterShapeHoles;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar tmpHoles;\n\n\t\t\tfor (var _i = 0, il = newShapes.length; _i < il; _i++) {\n\t\t\t\ttmpShape = newShapes[_i].s;\n\t\t\t\tshapes.push(tmpShape);\n\t\t\t\ttmpHoles = newShapeHoles[_i];\n\n\t\t\t\tfor (var j = 0, jl = tmpHoles.length; j < jl; j++) {\n\t\t\t\t\ttmpShape.holes.push(tmpHoles[j].h);\n\t\t\t\t}\n\t\t\t} //console.log(\"shape\", shapes);\n\n\n\t\t\treturn shapes;\n\t\t}\n\t});\n\n\tfunction Font(data) {\n\t\tthis.type = 'Font';\n\t\tthis.data = data;\n\t}\n\n\tObject.assign(Font.prototype, {\n\t\tisFont: true,\n\t\tgenerateShapes: function generateShapes(text, size) {\n\t\t\tif (size === void 0) {\n\t\t\t\tsize = 100;\n\t\t\t}\n\n\t\t\tvar shapes = [];\n\t\t\tvar paths = createPaths(text, size, this.data);\n\n\t\t\tfor (var p = 0, pl = paths.length; p < pl; p++) {\n\t\t\t\tArray.prototype.push.apply(shapes, paths[p].toShapes());\n\t\t\t}\n\n\t\t\treturn shapes;\n\t\t}\n\t});\n\n\tfunction createPaths(text, size, data) {\n\t\tvar chars = Array.from ? Array.from(text) : String(text).split(''); // workaround for IE11, see #13988\n\n\t\tvar scale = size / data.resolution;\n\t\tvar line_height = (data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness) * scale;\n\t\tvar paths = [];\n\t\tvar offsetX = 0,\n\t\t\t\toffsetY = 0;\n\n\t\tfor (var i = 0; i < chars.length; i++) {\n\t\t\tvar char = chars[i];\n\n\t\t\tif (char === '\\n') {\n\t\t\t\toffsetX = 0;\n\t\t\t\toffsetY -= line_height;\n\t\t\t} else {\n\t\t\t\tvar ret = createPath(char, scale, offsetX, offsetY, data);\n\t\t\t\toffsetX += ret.offsetX;\n\t\t\t\tpaths.push(ret.path);\n\t\t\t}\n\t\t}\n\n\t\treturn paths;\n\t}\n\n\tfunction createPath(char, scale, offsetX, offsetY, data) {\n\t\tvar glyph = data.glyphs[char] || data.glyphs['?'];\n\n\t\tif (!glyph) {\n\t\t\tconsole.error('THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.');\n\t\t\treturn;\n\t\t}\n\n\t\tvar path = new ShapePath();\n\t\tvar x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\t\tif (glyph.o) {\n\t\t\tvar outline = glyph._cachedOutline || (glyph._cachedOutline = glyph.o.split(' '));\n\n\t\t\tfor (var i = 0, l = outline.length; i < l;) {\n\t\t\t\tvar action = outline[i++];\n\n\t\t\t\tswitch (action) {\n\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t// moveTo\n\t\t\t\t\t\tx = outline[i++] * scale + offsetX;\n\t\t\t\t\t\ty = outline[i++] * scale + offsetY;\n\t\t\t\t\t\tpath.moveTo(x, y);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t// lineTo\n\t\t\t\t\t\tx = outline[i++] * scale + offsetX;\n\t\t\t\t\t\ty = outline[i++] * scale + offsetY;\n\t\t\t\t\t\tpath.lineTo(x, y);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\t// quadraticCurveTo\n\t\t\t\t\t\tcpx = outline[i++] * scale + offsetX;\n\t\t\t\t\t\tcpy = outline[i++] * scale + offsetY;\n\t\t\t\t\t\tcpx1 = outline[i++] * scale + offsetX;\n\t\t\t\t\t\tcpy1 = outline[i++] * scale + offsetY;\n\t\t\t\t\t\tpath.quadraticCurveTo(cpx1, cpy1, cpx, cpy);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t// bezierCurveTo\n\t\t\t\t\t\tcpx = outline[i++] * scale + offsetX;\n\t\t\t\t\t\tcpy = outline[i++] * scale + offsetY;\n\t\t\t\t\t\tcpx1 = outline[i++] * scale + offsetX;\n\t\t\t\t\t\tcpy1 = outline[i++] * scale + offsetY;\n\t\t\t\t\t\tcpx2 = outline[i++] * scale + offsetX;\n\t\t\t\t\t\tcpy2 = outline[i++] * scale + offsetY;\n\t\t\t\t\t\tpath.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, cpx, cpy);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\toffsetX: glyph.ha * scale,\n\t\t\tpath: path\n\t\t};\n\t}\n\n\tfunction FontLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tFontLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: FontLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tvar scope = this;\n\t\t\tvar loader = new FileLoader(this.manager);\n\t\t\tloader.setPath(this.path);\n\t\t\tloader.setRequestHeader(this.requestHeader);\n\t\t\tloader.setWithCredentials(scope.withCredentials);\n\t\t\tloader.load(url, function (text) {\n\t\t\t\tvar json;\n\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(text);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn('THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.');\n\t\t\t\t\tjson = JSON.parse(text.substring(65, text.length - 2));\n\t\t\t\t}\n\n\t\t\t\tvar font = scope.parse(json);\n\t\t\t\tif (onLoad) onLoad(font);\n\t\t\t}, onProgress, onError);\n\t\t},\n\t\tparse: function parse(json) {\n\t\t\treturn new Font(json);\n\t\t}\n\t});\n\n\tvar _context;\n\n\tvar AudioContext = {\n\t\tgetContext: function getContext() {\n\t\t\tif (_context === undefined) {\n\t\t\t\t_context = new (window.AudioContext || window.webkitAudioContext)();\n\t\t\t}\n\n\t\t\treturn _context;\n\t\t},\n\t\tsetContext: function setContext(value) {\n\t\t\t_context = value;\n\t\t}\n\t};\n\n\tfunction AudioLoader(manager) {\n\t\tLoader.call(this, manager);\n\t}\n\n\tAudioLoader.prototype = Object.assign(Object.create(Loader.prototype), {\n\t\tconstructor: AudioLoader,\n\t\tload: function load(url, onLoad, onProgress, onError) {\n\t\t\tvar scope = this;\n\t\t\tvar loader = new FileLoader(scope.manager);\n\t\t\tloader.setResponseType('arraybuffer');\n\t\t\tloader.setPath(scope.path);\n\t\t\tloader.setRequestHeader(scope.requestHeader);\n\t\t\tloader.setWithCredentials(scope.withCredentials);\n\t\t\tloader.load(url, function (buffer) {\n\t\t\t\ttry {\n\t\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\t\tvar bufferCopy = buffer.slice(0);\n\t\t\t\t\tvar context = AudioContext.getContext();\n\t\t\t\t\tcontext.decodeAudioData(bufferCopy, function (audioBuffer) {\n\t\t\t\t\t\tonLoad(audioBuffer);\n\t\t\t\t\t});\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (onError) {\n\t\t\t\t\t\tonError(e);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError(url);\n\t\t\t\t}\n\t\t\t}, onProgress, onError);\n\t\t}\n\t});\n\n\tfunction HemisphereLightProbe(skyColor, groundColor, intensity) {\n\t\tLightProbe.call(this, undefined, intensity);\n\t\tvar color1 = new Color().set(skyColor);\n\t\tvar color2 = new Color().set(groundColor);\n\t\tvar sky = new Vector3(color1.r, color1.g, color1.b);\n\t\tvar ground = new Vector3(color2.r, color2.g, color2.b); // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\n\t\tvar c0 = Math.sqrt(Math.PI);\n\t\tvar c1 = c0 * Math.sqrt(0.75);\n\t\tthis.sh.coefficients[0].copy(sky).add(ground).multiplyScalar(c0);\n\t\tthis.sh.coefficients[1].copy(sky).sub(ground).multiplyScalar(c1);\n\t}\n\n\tHemisphereLightProbe.prototype = Object.assign(Object.create(LightProbe.prototype), {\n\t\tconstructor: HemisphereLightProbe,\n\t\tisHemisphereLightProbe: true,\n\t\tcopy: function copy(source) {\n\t\t\t// modifying colors not currently supported\n\t\t\tLightProbe.prototype.copy.call(this, source);\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar data = LightProbe.prototype.toJSON.call(this, meta); // data.sh = this.sh.toArray(); // todo\n\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tfunction AmbientLightProbe(color, intensity) {\n\t\tLightProbe.call(this, undefined, intensity);\n\t\tvar color1 = new Color().set(color); // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\n\t\tthis.sh.coefficients[0].set(color1.r, color1.g, color1.b).multiplyScalar(2 * Math.sqrt(Math.PI));\n\t}\n\n\tAmbientLightProbe.prototype = Object.assign(Object.create(LightProbe.prototype), {\n\t\tconstructor: AmbientLightProbe,\n\t\tisAmbientLightProbe: true,\n\t\tcopy: function copy(source) {\n\t\t\t// modifying color not currently supported\n\t\t\tLightProbe.prototype.copy.call(this, source);\n\t\t\treturn this;\n\t\t},\n\t\ttoJSON: function toJSON(meta) {\n\t\t\tvar data = LightProbe.prototype.toJSON.call(this, meta); // data.sh = this.sh.toArray(); // todo\n\n\t\t\treturn data;\n\t\t}\n\t});\n\n\tvar _eyeRight = new Matrix4();\n\n\tvar _eyeLeft = new Matrix4();\n\n\tfunction StereoCamera() {\n\t\tthis.type = 'StereoCamera';\n\t\tthis.aspect = 1;\n\t\tthis.eyeSep = 0.064;\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable(1);\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable(2);\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\t}\n\n\tObject.assign(StereoCamera.prototype, {\n\t\tupdate: function update(camera) {\n\t\t\tvar cache = this._cache;\n\t\t\tvar needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\t\tif (needsUpdate) {\n\t\t\t\tcache.focus = camera.focus;\n\t\t\t\tcache.fov = camera.fov;\n\t\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\t\tcache.near = camera.near;\n\t\t\t\tcache.far = camera.far;\n\t\t\t\tcache.zoom = camera.zoom;\n\t\t\t\tcache.eyeSep = this.eyeSep; // Off-axis stereoscopic effect based on\n\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\tvar eyeSepHalf = cache.eyeSep / 2;\n\t\t\t\tvar eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\t\tvar ymax = cache.near * Math.tan(MathUtils.DEG2RAD * cache.fov * 0.5) / cache.zoom;\n\t\t\t\tvar xmin, xmax; // translate xOffset\n\n\t\t\t\t_eyeLeft.elements[12] = -eyeSepHalf;\n\t\t\t\t_eyeRight.elements[12] = eyeSepHalf; // for left eye\n\n\t\t\t\txmin = -ymax * cache.aspect + eyeSepOnProjection;\n\t\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\t\t\t\tprojectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin);\n\t\t\t\tprojectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin);\n\t\t\t\tthis.cameraL.projectionMatrix.copy(projectionMatrix); // for right eye\n\n\t\t\t\txmin = -ymax * cache.aspect - eyeSepOnProjection;\n\t\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\t\t\t\tprojectionMatrix.elements[0] = 2 * cache.near / (xmax - xmin);\n\t\t\t\tprojectionMatrix.elements[8] = (xmax + xmin) / (xmax - xmin);\n\t\t\t\tthis.cameraR.projectionMatrix.copy(projectionMatrix);\n\t\t\t}\n\n\t\t\tthis.cameraL.matrixWorld.copy(camera.matrixWorld).multiply(_eyeLeft);\n\t\t\tthis.cameraR.matrixWorld.copy(camera.matrixWorld).multiply(_eyeRight);\n\t\t}\n\t});\n\n\tvar Clock = /*#__PURE__*/function () {\n\t\tfunction Clock(autoStart) {\n\t\t\tthis.autoStart = autoStart !== undefined ? autoStart : true;\n\t\t\tthis.startTime = 0;\n\t\t\tthis.oldTime = 0;\n\t\t\tthis.elapsedTime = 0;\n\t\t\tthis.running = false;\n\t\t}\n\n\t\tvar _proto = Clock.prototype;\n\n\t\t_proto.start = function start() {\n\t\t\tthis.startTime = now();\n\t\t\tthis.oldTime = this.startTime;\n\t\t\tthis.elapsedTime = 0;\n\t\t\tthis.running = true;\n\t\t};\n\n\t\t_proto.stop = function stop() {\n\t\t\tthis.getElapsedTime();\n\t\t\tthis.running = false;\n\t\t\tthis.autoStart = false;\n\t\t};\n\n\t\t_proto.getElapsedTime = function getElapsedTime() {\n\t\t\tthis.getDelta();\n\t\t\treturn this.elapsedTime;\n\t\t};\n\n\t\t_proto.getDelta = function getDelta() {\n\t\t\tvar diff = 0;\n\n\t\t\tif (this.autoStart && !this.running) {\n\t\t\t\tthis.start();\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (this.running) {\n\t\t\t\tvar newTime = now();\n\t\t\t\tdiff = (newTime - this.oldTime) / 1000;\n\t\t\t\tthis.oldTime = newTime;\n\t\t\t\tthis.elapsedTime += diff;\n\t\t\t}\n\n\t\t\treturn diff;\n\t\t};\n\n\t\treturn Clock;\n\t}();\n\n\tfunction now() {\n\t\treturn (typeof performance === 'undefined' ? Date : performance).now(); // see #10732\n\t}\n\n\tvar _position$2 = /*@__PURE__*/new Vector3();\n\n\tvar _quaternion$3 = /*@__PURE__*/new Quaternion();\n\n\tvar _scale$1 = /*@__PURE__*/new Vector3();\n\n\tvar _orientation = /*@__PURE__*/new Vector3();\n\n\tvar AudioListener = /*#__PURE__*/function (_Object3D) {\n\t\t_inheritsLoose(AudioListener, _Object3D);\n\n\t\tfunction AudioListener() {\n\t\t\tvar _this;\n\n\t\t\t_this = _Object3D.call(this) || this;\n\t\t\t_this.type = 'AudioListener';\n\t\t\t_this.context = AudioContext.getContext();\n\t\t\t_this.gain = _this.context.createGain();\n\n\t\t\t_this.gain.connect(_this.context.destination);\n\n\t\t\t_this.filter = null;\n\t\t\t_this.timeDelta = 0; // private\n\n\t\t\t_this._clock = new Clock();\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = AudioListener.prototype;\n\n\t\t_proto.getInput = function getInput() {\n\t\t\treturn this.gain;\n\t\t};\n\n\t\t_proto.removeFilter = function removeFilter() {\n\t\t\tif (this.filter !== null) {\n\t\t\t\tthis.gain.disconnect(this.filter);\n\t\t\t\tthis.filter.disconnect(this.context.destination);\n\t\t\t\tthis.gain.connect(this.context.destination);\n\t\t\t\tthis.filter = null;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getFilter = function getFilter() {\n\t\t\treturn this.filter;\n\t\t};\n\n\t\t_proto.setFilter = function setFilter(value) {\n\t\t\tif (this.filter !== null) {\n\t\t\t\tthis.gain.disconnect(this.filter);\n\t\t\t\tthis.filter.disconnect(this.context.destination);\n\t\t\t} else {\n\t\t\t\tthis.gain.disconnect(this.context.destination);\n\t\t\t}\n\n\t\t\tthis.filter = value;\n\t\t\tthis.gain.connect(this.filter);\n\t\t\tthis.filter.connect(this.context.destination);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getMasterVolume = function getMasterVolume() {\n\t\t\treturn this.gain.gain.value;\n\t\t};\n\n\t\t_proto.setMasterVolume = function setMasterVolume(value) {\n\t\t\tthis.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.updateMatrixWorld = function updateMatrixWorld(force) {\n\t\t\t_Object3D.prototype.updateMatrixWorld.call(this, force);\n\n\t\t\tvar listener = this.context.listener;\n\t\t\tvar up = this.up;\n\t\t\tthis.timeDelta = this._clock.getDelta();\n\t\t\tthis.matrixWorld.decompose(_position$2, _quaternion$3, _scale$1);\n\n\t\t\t_orientation.set(0, 0, -1).applyQuaternion(_quaternion$3);\n\n\t\t\tif (listener.positionX) {\n\t\t\t\t// code path for Chrome (see #14393)\n\t\t\t\tvar endTime = this.context.currentTime + this.timeDelta;\n\t\t\t\tlistener.positionX.linearRampToValueAtTime(_position$2.x, endTime);\n\t\t\t\tlistener.positionY.linearRampToValueAtTime(_position$2.y, endTime);\n\t\t\t\tlistener.positionZ.linearRampToValueAtTime(_position$2.z, endTime);\n\t\t\t\tlistener.forwardX.linearRampToValueAtTime(_orientation.x, endTime);\n\t\t\t\tlistener.forwardY.linearRampToValueAtTime(_orientation.y, endTime);\n\t\t\t\tlistener.forwardZ.linearRampToValueAtTime(_orientation.z, endTime);\n\t\t\t\tlistener.upX.linearRampToValueAtTime(up.x, endTime);\n\t\t\t\tlistener.upY.linearRampToValueAtTime(up.y, endTime);\n\t\t\t\tlistener.upZ.linearRampToValueAtTime(up.z, endTime);\n\t\t\t} else {\n\t\t\t\tlistener.setPosition(_position$2.x, _position$2.y, _position$2.z);\n\t\t\t\tlistener.setOrientation(_orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z);\n\t\t\t}\n\t\t};\n\n\t\treturn AudioListener;\n\t}(Object3D);\n\n\tvar Audio = /*#__PURE__*/function (_Object3D) {\n\t\t_inheritsLoose(Audio, _Object3D);\n\n\t\tfunction Audio(listener) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Object3D.call(this) || this;\n\t\t\t_this.type = 'Audio';\n\t\t\t_this.listener = listener;\n\t\t\t_this.context = listener.context;\n\t\t\t_this.gain = _this.context.createGain();\n\n\t\t\t_this.gain.connect(listener.getInput());\n\n\t\t\t_this.autoplay = false;\n\t\t\t_this.buffer = null;\n\t\t\t_this.detune = 0;\n\t\t\t_this.loop = false;\n\t\t\t_this.loopStart = 0;\n\t\t\t_this.loopEnd = 0;\n\t\t\t_this.offset = 0;\n\t\t\t_this.duration = undefined;\n\t\t\t_this.playbackRate = 1;\n\t\t\t_this.isPlaying = false;\n\t\t\t_this.hasPlaybackControl = true;\n\t\t\t_this.source = null;\n\t\t\t_this.sourceType = 'empty';\n\t\t\t_this._startedAt = 0;\n\t\t\t_this._progress = 0;\n\t\t\t_this._connected = false;\n\t\t\t_this.filters = [];\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = Audio.prototype;\n\n\t\t_proto.getOutput = function getOutput() {\n\t\t\treturn this.gain;\n\t\t};\n\n\t\t_proto.setNodeSource = function setNodeSource(audioNode) {\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'audioNode';\n\t\t\tthis.source = audioNode;\n\t\t\tthis.connect();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setMediaElementSource = function setMediaElementSource(mediaElement) {\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'mediaNode';\n\t\t\tthis.source = this.context.createMediaElementSource(mediaElement);\n\t\t\tthis.connect();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setMediaStreamSource = function setMediaStreamSource(mediaStream) {\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'mediaStreamNode';\n\t\t\tthis.source = this.context.createMediaStreamSource(mediaStream);\n\t\t\tthis.connect();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setBuffer = function setBuffer(audioBuffer) {\n\t\t\tthis.buffer = audioBuffer;\n\t\t\tthis.sourceType = 'buffer';\n\t\t\tif (this.autoplay) this.play();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.play = function play(delay) {\n\t\t\tif (delay === void 0) {\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif (this.isPlaying === true) {\n\t\t\t\tconsole.warn('THREE.Audio: Audio is already playing.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.hasPlaybackControl === false) {\n\t\t\t\tconsole.warn('THREE.Audio: this Audio has no playback control.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._startedAt = this.context.currentTime + delay;\n\t\t\tvar source = this.context.createBufferSource();\n\t\t\tsource.buffer = this.buffer;\n\t\t\tsource.loop = this.loop;\n\t\t\tsource.loopStart = this.loopStart;\n\t\t\tsource.loopEnd = this.loopEnd;\n\t\t\tsource.onended = this.onEnded.bind(this);\n\t\t\tsource.start(this._startedAt, this._progress + this.offset, this.duration);\n\t\t\tthis.isPlaying = true;\n\t\t\tthis.source = source;\n\t\t\tthis.setDetune(this.detune);\n\t\t\tthis.setPlaybackRate(this.playbackRate);\n\t\t\treturn this.connect();\n\t\t};\n\n\t\t_proto.pause = function pause() {\n\t\t\tif (this.hasPlaybackControl === false) {\n\t\t\t\tconsole.warn('THREE.Audio: this Audio has no playback control.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.isPlaying === true) {\n\t\t\t\t// update current progress\n\t\t\t\tthis._progress += Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate;\n\n\t\t\t\tif (this.loop === true) {\n\t\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\t\t\t\t\tthis._progress = this._progress % (this.duration || this.buffer.duration);\n\t\t\t\t}\n\n\t\t\t\tthis.source.stop();\n\t\t\t\tthis.source.onended = null;\n\t\t\t\tthis.isPlaying = false;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.stop = function stop() {\n\t\t\tif (this.hasPlaybackControl === false) {\n\t\t\t\tconsole.warn('THREE.Audio: this Audio has no playback control.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._progress = 0;\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\t\t\tthis.isPlaying = false;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.connect = function connect() {\n\t\t\tif (this.filters.length > 0) {\n\t\t\t\tthis.source.connect(this.filters[0]);\n\n\t\t\t\tfor (var i = 1, l = this.filters.length; i < l; i++) {\n\t\t\t\t\tthis.filters[i - 1].connect(this.filters[i]);\n\t\t\t\t}\n\n\t\t\t\tthis.filters[this.filters.length - 1].connect(this.getOutput());\n\t\t\t} else {\n\t\t\t\tthis.source.connect(this.getOutput());\n\t\t\t}\n\n\t\t\tthis._connected = true;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.disconnect = function disconnect() {\n\t\t\tif (this.filters.length > 0) {\n\t\t\t\tthis.source.disconnect(this.filters[0]);\n\n\t\t\t\tfor (var i = 1, l = this.filters.length; i < l; i++) {\n\t\t\t\t\tthis.filters[i - 1].disconnect(this.filters[i]);\n\t\t\t\t}\n\n\t\t\t\tthis.filters[this.filters.length - 1].disconnect(this.getOutput());\n\t\t\t} else {\n\t\t\t\tthis.source.disconnect(this.getOutput());\n\t\t\t}\n\n\t\t\tthis._connected = false;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getFilters = function getFilters() {\n\t\t\treturn this.filters;\n\t\t};\n\n\t\t_proto.setFilters = function setFilters(value) {\n\t\t\tif (!value) value = [];\n\n\t\t\tif (this._connected === true) {\n\t\t\t\tthis.disconnect();\n\t\t\t\tthis.filters = value.slice();\n\t\t\t\tthis.connect();\n\t\t\t} else {\n\t\t\t\tthis.filters = value.slice();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setDetune = function setDetune(value) {\n\t\t\tthis.detune = value;\n\t\t\tif (this.source.detune === undefined) return; // only set detune when available\n\n\t\t\tif (this.isPlaying === true) {\n\t\t\t\tthis.source.detune.setTargetAtTime(this.detune, this.context.currentTime, 0.01);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getDetune = function getDetune() {\n\t\t\treturn this.detune;\n\t\t};\n\n\t\t_proto.getFilter = function getFilter() {\n\t\t\treturn this.getFilters()[0];\n\t\t};\n\n\t\t_proto.setFilter = function setFilter(filter) {\n\t\t\treturn this.setFilters(filter ? [filter] : []);\n\t\t};\n\n\t\t_proto.setPlaybackRate = function setPlaybackRate(value) {\n\t\t\tif (this.hasPlaybackControl === false) {\n\t\t\t\tconsole.warn('THREE.Audio: this Audio has no playback control.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.playbackRate = value;\n\n\t\t\tif (this.isPlaying === true) {\n\t\t\t\tthis.source.playbackRate.setTargetAtTime(this.playbackRate, this.context.currentTime, 0.01);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getPlaybackRate = function getPlaybackRate() {\n\t\t\treturn this.playbackRate;\n\t\t};\n\n\t\t_proto.onEnded = function onEnded() {\n\t\t\tthis.isPlaying = false;\n\t\t};\n\n\t\t_proto.getLoop = function getLoop() {\n\t\t\tif (this.hasPlaybackControl === false) {\n\t\t\t\tconsole.warn('THREE.Audio: this Audio has no playback control.');\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn this.loop;\n\t\t};\n\n\t\t_proto.setLoop = function setLoop(value) {\n\t\t\tif (this.hasPlaybackControl === false) {\n\t\t\t\tconsole.warn('THREE.Audio: this Audio has no playback control.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.loop = value;\n\n\t\t\tif (this.isPlaying === true) {\n\t\t\t\tthis.source.loop = this.loop;\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setLoopStart = function setLoopStart(value) {\n\t\t\tthis.loopStart = value;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setLoopEnd = function setLoopEnd(value) {\n\t\t\tthis.loopEnd = value;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getVolume = function getVolume() {\n\t\t\treturn this.gain.gain.value;\n\t\t};\n\n\t\t_proto.setVolume = function setVolume(value) {\n\t\t\tthis.gain.gain.setTargetAtTime(value, this.context.currentTime, 0.01);\n\t\t\treturn this;\n\t\t};\n\n\t\treturn Audio;\n\t}(Object3D);\n\n\tvar _position$3 = /*@__PURE__*/new Vector3();\n\n\tvar _quaternion$4 = /*@__PURE__*/new Quaternion();\n\n\tvar _scale$2 = /*@__PURE__*/new Vector3();\n\n\tvar _orientation$1 = /*@__PURE__*/new Vector3();\n\n\tvar PositionalAudio = /*#__PURE__*/function (_Audio) {\n\t\t_inheritsLoose(PositionalAudio, _Audio);\n\n\t\tfunction PositionalAudio(listener) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Audio.call(this, listener) || this;\n\t\t\t_this.panner = _this.context.createPanner();\n\t\t\t_this.panner.panningModel = 'HRTF';\n\n\t\t\t_this.panner.connect(_this.gain);\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = PositionalAudio.prototype;\n\n\t\t_proto.getOutput = function getOutput() {\n\t\t\treturn this.panner;\n\t\t};\n\n\t\t_proto.getRefDistance = function getRefDistance() {\n\t\t\treturn this.panner.refDistance;\n\t\t};\n\n\t\t_proto.setRefDistance = function setRefDistance(value) {\n\t\t\tthis.panner.refDistance = value;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getRolloffFactor = function getRolloffFactor() {\n\t\t\treturn this.panner.rolloffFactor;\n\t\t};\n\n\t\t_proto.setRolloffFactor = function setRolloffFactor(value) {\n\t\t\tthis.panner.rolloffFactor = value;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getDistanceModel = function getDistanceModel() {\n\t\t\treturn this.panner.distanceModel;\n\t\t};\n\n\t\t_proto.setDistanceModel = function setDistanceModel(value) {\n\t\t\tthis.panner.distanceModel = value;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getMaxDistance = function getMaxDistance() {\n\t\t\treturn this.panner.maxDistance;\n\t\t};\n\n\t\t_proto.setMaxDistance = function setMaxDistance(value) {\n\t\t\tthis.panner.maxDistance = value;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setDirectionalCone = function setDirectionalCone(coneInnerAngle, coneOuterAngle, coneOuterGain) {\n\t\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\t\tthis.panner.coneOuterGain = coneOuterGain;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.updateMatrixWorld = function updateMatrixWorld(force) {\n\t\t\t_Audio.prototype.updateMatrixWorld.call(this, force);\n\n\t\t\tif (this.hasPlaybackControl === true && this.isPlaying === false) return;\n\t\t\tthis.matrixWorld.decompose(_position$3, _quaternion$4, _scale$2);\n\n\t\t\t_orientation$1.set(0, 0, 1).applyQuaternion(_quaternion$4);\n\n\t\t\tvar panner = this.panner;\n\n\t\t\tif (panner.positionX) {\n\t\t\t\t// code path for Chrome and Firefox (see #14393)\n\t\t\t\tvar endTime = this.context.currentTime + this.listener.timeDelta;\n\t\t\t\tpanner.positionX.linearRampToValueAtTime(_position$3.x, endTime);\n\t\t\t\tpanner.positionY.linearRampToValueAtTime(_position$3.y, endTime);\n\t\t\t\tpanner.positionZ.linearRampToValueAtTime(_position$3.z, endTime);\n\t\t\t\tpanner.orientationX.linearRampToValueAtTime(_orientation$1.x, endTime);\n\t\t\t\tpanner.orientationY.linearRampToValueAtTime(_orientation$1.y, endTime);\n\t\t\t\tpanner.orientationZ.linearRampToValueAtTime(_orientation$1.z, endTime);\n\t\t\t} else {\n\t\t\t\tpanner.setPosition(_position$3.x, _position$3.y, _position$3.z);\n\t\t\t\tpanner.setOrientation(_orientation$1.x, _orientation$1.y, _orientation$1.z);\n\t\t\t}\n\t\t};\n\n\t\treturn PositionalAudio;\n\t}(Audio);\n\n\tvar AudioAnalyser = /*#__PURE__*/function () {\n\t\tfunction AudioAnalyser(audio, fftSize) {\n\t\t\tif (fftSize === void 0) {\n\t\t\t\tfftSize = 2048;\n\t\t\t}\n\n\t\t\tthis.analyser = audio.context.createAnalyser();\n\t\t\tthis.analyser.fftSize = fftSize;\n\t\t\tthis.data = new Uint8Array(this.analyser.frequencyBinCount);\n\t\t\taudio.getOutput().connect(this.analyser);\n\t\t}\n\n\t\tvar _proto = AudioAnalyser.prototype;\n\n\t\t_proto.getFrequencyData = function getFrequencyData() {\n\t\t\tthis.analyser.getByteFrequencyData(this.data);\n\t\t\treturn this.data;\n\t\t};\n\n\t\t_proto.getAverageFrequency = function getAverageFrequency() {\n\t\t\tvar value = 0;\n\t\t\tvar data = this.getFrequencyData();\n\n\t\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\t\tvalue += data[i];\n\t\t\t}\n\n\t\t\treturn value / data.length;\n\t\t};\n\n\t\treturn AudioAnalyser;\n\t}();\n\n\tfunction PropertyMixer(binding, typeName, valueSize) {\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\t\tvar mixFunction, mixFunctionAdditive, setIdentity; // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch (typeName) {\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\t\t\t\tthis.buffer = new Float64Array(valueSize * 6);\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select; // Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\n\t\t\t\tmixFunctionAdditive = this._select;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\t\t\t\tthis.buffer = new Array(valueSize * 5);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\t\t\t\tthis.buffer = new Float64Array(valueSize * 5);\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\t}\n\n\tObject.assign(PropertyMixer.prototype, {\n\t\t// accumulate data in the 'incoming' region into 'accu<i>'\n\t\taccumulate: function accumulate(accuIndex, weight) {\n\t\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t\t// the weight and shouldn't have made the call in the first place\n\t\t\tvar buffer = this.buffer,\n\t\t\t\t\tstride = this.valueSize,\n\t\t\t\t\toffset = accuIndex * stride + stride;\n\t\t\tvar currentWeight = this.cumulativeWeight;\n\n\t\t\tif (currentWeight === 0) {\n\t\t\t\t// accuN := incoming * weight\n\t\t\t\tfor (var i = 0; i !== stride; ++i) {\n\t\t\t\t\tbuffer[offset + i] = buffer[i];\n\t\t\t\t}\n\n\t\t\t\tcurrentWeight = weight;\n\t\t\t} else {\n\t\t\t\t// accuN := accuN + incoming * weight\n\t\t\t\tcurrentWeight += weight;\n\t\t\t\tvar mix = weight / currentWeight;\n\n\t\t\t\tthis._mixBufferRegion(buffer, offset, 0, mix, stride);\n\t\t\t}\n\n\t\t\tthis.cumulativeWeight = currentWeight;\n\t\t},\n\t\t// accumulate data in the 'incoming' region into 'add'\n\t\taccumulateAdditive: function accumulateAdditive(weight) {\n\t\t\tvar buffer = this.buffer,\n\t\t\t\t\tstride = this.valueSize,\n\t\t\t\t\toffset = stride * this._addIndex;\n\n\t\t\tif (this.cumulativeWeightAdditive === 0) {\n\t\t\t\t// add = identity\n\t\t\t\tthis._setIdentity();\n\t\t\t} // add := add + incoming * weight\n\n\n\t\t\tthis._mixBufferRegionAdditive(buffer, offset, 0, weight, stride);\n\n\t\t\tthis.cumulativeWeightAdditive += weight;\n\t\t},\n\t\t// apply the state of 'accu<i>' to the binding when accus differ\n\t\tapply: function apply(accuIndex) {\n\t\t\tvar stride = this.valueSize,\n\t\t\t\t\tbuffer = this.buffer,\n\t\t\t\t\toffset = accuIndex * stride + stride,\n\t\t\t\t\tweight = this.cumulativeWeight,\n\t\t\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\t\t\t\t\tbinding = this.binding;\n\t\t\tthis.cumulativeWeight = 0;\n\t\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\t\tif (weight < 1) {\n\t\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\t\t\t\tvar originalValueOffset = stride * this._origIndex;\n\n\t\t\t\tthis._mixBufferRegion(buffer, offset, originalValueOffset, 1 - weight, stride);\n\t\t\t}\n\n\t\t\tif (weightAdditive > 0) {\n\t\t\t\t// accuN := accuN + additive accuN\n\t\t\t\tthis._mixBufferRegionAdditive(buffer, offset, this._addIndex * stride, 1, stride);\n\t\t\t}\n\n\t\t\tfor (var i = stride, e = stride + stride; i !== e; ++i) {\n\t\t\t\tif (buffer[i] !== buffer[i + stride]) {\n\t\t\t\t\t// value has changed -> update scene graph\n\t\t\t\t\tbinding.setValue(buffer, offset);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// remember the state of the bound property and copy it to both accus\n\t\tsaveOriginalState: function saveOriginalState() {\n\t\t\tvar binding = this.binding;\n\t\t\tvar buffer = this.buffer,\n\t\t\t\t\tstride = this.valueSize,\n\t\t\t\t\toriginalValueOffset = stride * this._origIndex;\n\t\t\tbinding.getValue(buffer, originalValueOffset); // accu[0..1] := orig -- initially detect changes against the original\n\n\t\t\tfor (var i = stride, e = originalValueOffset; i !== e; ++i) {\n\t\t\t\tbuffer[i] = buffer[originalValueOffset + i % stride];\n\t\t\t} // Add to identity for additive\n\n\n\t\t\tthis._setIdentity();\n\n\t\t\tthis.cumulativeWeight = 0;\n\t\t\tthis.cumulativeWeightAdditive = 0;\n\t\t},\n\t\t// apply the state previously taken via 'saveOriginalState' to the binding\n\t\trestoreOriginalState: function restoreOriginalState() {\n\t\t\tvar originalValueOffset = this.valueSize * 3;\n\t\t\tthis.binding.setValue(this.buffer, originalValueOffset);\n\t\t},\n\t\t_setAdditiveIdentityNumeric: function _setAdditiveIdentityNumeric() {\n\t\t\tvar startIndex = this._addIndex * this.valueSize;\n\t\t\tvar endIndex = startIndex + this.valueSize;\n\n\t\t\tfor (var i = startIndex; i < endIndex; i++) {\n\t\t\t\tthis.buffer[i] = 0;\n\t\t\t}\n\t\t},\n\t\t_setAdditiveIdentityQuaternion: function _setAdditiveIdentityQuaternion() {\n\t\t\tthis._setAdditiveIdentityNumeric();\n\n\t\t\tthis.buffer[this._addIndex * this.valueSize + 3] = 1;\n\t\t},\n\t\t_setAdditiveIdentityOther: function _setAdditiveIdentityOther() {\n\t\t\tvar startIndex = this._origIndex * this.valueSize;\n\t\t\tvar targetIndex = this._addIndex * this.valueSize;\n\n\t\t\tfor (var i = 0; i < this.valueSize; i++) {\n\t\t\t\tthis.buffer[targetIndex + i] = this.buffer[startIndex + i];\n\t\t\t}\n\t\t},\n\t\t// mix functions\n\t\t_select: function _select(buffer, dstOffset, srcOffset, t, stride) {\n\t\t\tif (t >= 0.5) {\n\t\t\t\tfor (var i = 0; i !== stride; ++i) {\n\t\t\t\t\tbuffer[dstOffset + i] = buffer[srcOffset + i];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_slerp: function _slerp(buffer, dstOffset, srcOffset, t) {\n\t\t\tQuaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t);\n\t\t},\n\t\t_slerpAdditive: function _slerpAdditive(buffer, dstOffset, srcOffset, t, stride) {\n\t\t\tvar workOffset = this._workIndex * stride; // Store result in intermediate buffer offset\n\n\t\t\tQuaternion.multiplyQuaternionsFlat(buffer, workOffset, buffer, dstOffset, buffer, srcOffset); // Slerp to the intermediate result\n\n\t\t\tQuaternion.slerpFlat(buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t);\n\t\t},\n\t\t_lerp: function _lerp(buffer, dstOffset, srcOffset, t, stride) {\n\t\t\tvar s = 1 - t;\n\n\t\t\tfor (var i = 0; i !== stride; ++i) {\n\t\t\t\tvar j = dstOffset + i;\n\t\t\t\tbuffer[j] = buffer[j] * s + buffer[srcOffset + i] * t;\n\t\t\t}\n\t\t},\n\t\t_lerpAdditive: function _lerpAdditive(buffer, dstOffset, srcOffset, t, stride) {\n\t\t\tfor (var i = 0; i !== stride; ++i) {\n\t\t\t\tvar j = dstOffset + i;\n\t\t\t\tbuffer[j] = buffer[j] + buffer[srcOffset + i] * t;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Characters [].:/ are reserved for track binding syntax.\n\tvar _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\n\n\tvar _reservedRe = new RegExp('[' + _RESERVED_CHARS_RE + ']', 'g'); // Attempts to allow node names from any language. ES5's `\\w` regexp matches\n\t// only latin characters, and the unicode \\p{L} is not yet supported. So\n\t// instead, we exclude reserved characters and match everything else.\n\n\n\tvar _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\n\n\tvar _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace('\\\\.', '') + ']'; // Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t// be matched to parse the rest of the track name.\n\n\n\tvar _directoryRe = /((?:WC+[\\/:])*)/.source.replace('WC', _wordChar); // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\n\n\tvar _nodeRe = /(WCOD+)?/.source.replace('WCOD', _wordCharOrDot); // Object on target node, and accessor. May not contain reserved\n\t// characters. Accessor may contain any character except closing bracket.\n\n\n\tvar _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace('WC', _wordChar); // Property and accessor. May not contain reserved characters. Accessor may\n\t// contain any non-bracket characters.\n\n\n\tvar _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace('WC', _wordChar);\n\n\tvar _trackRe = new RegExp('' + '^' + _directoryRe + _nodeRe + _objectRe + _propertyRe + '$');\n\n\tvar _supportedObjectNames = ['material', 'materials', 'bones'];\n\n\tfunction Composite(targetGroup, path, optionalParsedPath) {\n\t\tvar parsedPath = optionalParsedPath || PropertyBinding.parseTrackName(path);\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_(path, parsedPath);\n\t}\n\n\tObject.assign(Composite.prototype, {\n\t\tgetValue: function getValue(array, offset) {\n\t\t\tthis.bind(); // bind all binding\n\n\t\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\t\t\tbinding = this._bindings[firstValidIndex]; // and only call .getValue on the first\n\n\t\t\tif (binding !== undefined) binding.getValue(array, offset);\n\t\t},\n\t\tsetValue: function setValue(array, offset) {\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor (var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) {\n\t\t\t\tbindings[i].setValue(array, offset);\n\t\t\t}\n\t\t},\n\t\tbind: function bind() {\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor (var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) {\n\t\t\t\tbindings[i].bind();\n\t\t\t}\n\t\t},\n\t\tunbind: function unbind() {\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor (var i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++i) {\n\t\t\t\tbindings[i].unbind();\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction PropertyBinding(rootNode, path, parsedPath) {\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName(path);\n\t\tthis.node = PropertyBinding.findNode(rootNode, this.parsedPath.nodeName) || rootNode;\n\t\tthis.rootNode = rootNode;\n\t}\n\n\tObject.assign(PropertyBinding, {\n\t\tComposite: Composite,\n\t\tcreate: function create(root, path, parsedPath) {\n\t\t\tif (!(root && root.isAnimationObjectGroup)) {\n\t\t\t\treturn new PropertyBinding(root, path, parsedPath);\n\t\t\t} else {\n\t\t\t\treturn new PropertyBinding.Composite(root, path, parsedPath);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Replaces spaces with underscores and removes unsupported characters from\n\t\t * node names, to ensure compatibility with parseTrackName().\n\t\t *\n\t\t * @param {string} name Node name to be sanitized.\n\t\t * @return {string}\n\t\t */\n\t\tsanitizeNodeName: function sanitizeNodeName(name) {\n\t\t\treturn name.replace(/\\s/g, '_').replace(_reservedRe, '');\n\t\t},\n\t\tparseTrackName: function parseTrackName(trackName) {\n\t\t\tvar matches = _trackRe.exec(trackName);\n\n\t\t\tif (!matches) {\n\t\t\t\tthrow new Error('PropertyBinding: Cannot parse trackName: ' + trackName);\n\t\t\t}\n\n\t\t\tvar results = {\n\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\tnodeName: matches[2],\n\t\t\t\tobjectName: matches[3],\n\t\t\t\tobjectIndex: matches[4],\n\t\t\t\tpropertyName: matches[5],\n\t\t\t\t// required\n\t\t\t\tpropertyIndex: matches[6]\n\t\t\t};\n\t\t\tvar lastDot = results.nodeName && results.nodeName.lastIndexOf('.');\n\n\t\t\tif (lastDot !== undefined && lastDot !== -1) {\n\t\t\t\tvar objectName = results.nodeName.substring(lastDot + 1); // Object names must be checked against an allowlist. Otherwise, there\n\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t// include '.' characters).\n\n\t\t\t\tif (_supportedObjectNames.indexOf(objectName) !== -1) {\n\t\t\t\t\tresults.nodeName = results.nodeName.substring(0, lastDot);\n\t\t\t\t\tresults.objectName = objectName;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (results.propertyName === null || results.propertyName.length === 0) {\n\t\t\t\tthrow new Error('PropertyBinding: can not parse propertyName from trackName: ' + trackName);\n\t\t\t}\n\n\t\t\treturn results;\n\t\t},\n\t\tfindNode: function findNode(root, nodeName) {\n\t\t\tif (!nodeName || nodeName === '' || nodeName === '.' || nodeName === -1 || nodeName === root.name || nodeName === root.uuid) {\n\t\t\t\treturn root;\n\t\t\t} // search into skeleton bones.\n\n\n\t\t\tif (root.skeleton) {\n\t\t\t\tvar bone = root.skeleton.getBoneByName(nodeName);\n\n\t\t\t\tif (bone !== undefined) {\n\t\t\t\t\treturn bone;\n\t\t\t\t}\n\t\t\t} // search into node subtree.\n\n\n\t\t\tif (root.children) {\n\t\t\t\tvar searchNodeSubtree = function searchNodeSubtree(children) {\n\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\tvar childNode = children[i];\n\n\t\t\t\t\t\tif (childNode.name === nodeName || childNode.uuid === nodeName) {\n\t\t\t\t\t\t\treturn childNode;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar result = searchNodeSubtree(childNode.children);\n\t\t\t\t\t\tif (result) return result;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t};\n\n\t\t\t\tvar subTreeNode = searchNodeSubtree(root.children);\n\n\t\t\t\tif (subTreeNode) {\n\t\t\t\t\treturn subTreeNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t});\n\tObject.assign(PropertyBinding.prototype, {\n\t\t// prototype, continued\n\t\t// these are used to \"bind\" a nonexistent property\n\t\t_getValue_unavailable: function _getValue_unavailable() {},\n\t\t_setValue_unavailable: function _setValue_unavailable() {},\n\t\tBindingType: {\n\t\t\tDirect: 0,\n\t\t\tEntireArray: 1,\n\t\t\tArrayElement: 2,\n\t\t\tHasFromToArray: 3\n\t\t},\n\t\tVersioning: {\n\t\t\tNone: 0,\n\t\t\tNeedsUpdate: 1,\n\t\t\tMatrixWorldNeedsUpdate: 2\n\t\t},\n\t\tGetterByBindingType: [function getValue_direct(buffer, offset) {\n\t\t\tbuffer[offset] = this.node[this.propertyName];\n\t\t}, function getValue_array(buffer, offset) {\n\t\t\tvar source = this.resolvedProperty;\n\n\t\t\tfor (var i = 0, n = source.length; i !== n; ++i) {\n\t\t\t\tbuffer[offset++] = source[i];\n\t\t\t}\n\t\t}, function getValue_arrayElement(buffer, offset) {\n\t\t\tbuffer[offset] = this.resolvedProperty[this.propertyIndex];\n\t\t}, function getValue_toArray(buffer, offset) {\n\t\t\tthis.resolvedProperty.toArray(buffer, offset);\n\t\t}],\n\t\tSetterByBindingTypeAndVersioning: [[// Direct\n\t\tfunction setValue_direct(buffer, offset) {\n\t\t\tthis.targetObject[this.propertyName] = buffer[offset];\n\t\t}, function setValue_direct_setNeedsUpdate(buffer, offset) {\n\t\t\tthis.targetObject[this.propertyName] = buffer[offset];\n\t\t\tthis.targetObject.needsUpdate = true;\n\t\t}, function setValue_direct_setMatrixWorldNeedsUpdate(buffer, offset) {\n\t\t\tthis.targetObject[this.propertyName] = buffer[offset];\n\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\t\t}], [// EntireArray\n\t\tfunction setValue_array(buffer, offset) {\n\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\tfor (var i = 0, n = dest.length; i !== n; ++i) {\n\t\t\t\tdest[i] = buffer[offset++];\n\t\t\t}\n\t\t}, function setValue_array_setNeedsUpdate(buffer, offset) {\n\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\tfor (var i = 0, n = dest.length; i !== n; ++i) {\n\t\t\t\tdest[i] = buffer[offset++];\n\t\t\t}\n\n\t\t\tthis.targetObject.needsUpdate = true;\n\t\t}, function setValue_array_setMatrixWorldNeedsUpdate(buffer, offset) {\n\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\tfor (var i = 0, n = dest.length; i !== n; ++i) {\n\t\t\t\tdest[i] = buffer[offset++];\n\t\t\t}\n\n\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\t\t}], [// ArrayElement\n\t\tfunction setValue_arrayElement(buffer, offset) {\n\t\t\tthis.resolvedProperty[this.propertyIndex] = buffer[offset];\n\t\t}, function setValue_arrayElement_setNeedsUpdate(buffer, offset) {\n\t\t\tthis.resolvedProperty[this.propertyIndex] = buffer[offset];\n\t\t\tthis.targetObject.needsUpdate = true;\n\t\t}, function setValue_arrayElement_setMatrixWorldNeedsUpdate(buffer, offset) {\n\t\t\tthis.resolvedProperty[this.propertyIndex] = buffer[offset];\n\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\t\t}], [// HasToFromArray\n\t\tfunction setValue_fromArray(buffer, offset) {\n\t\t\tthis.resolvedProperty.fromArray(buffer, offset);\n\t\t}, function setValue_fromArray_setNeedsUpdate(buffer, offset) {\n\t\t\tthis.resolvedProperty.fromArray(buffer, offset);\n\t\t\tthis.targetObject.needsUpdate = true;\n\t\t}, function setValue_fromArray_setMatrixWorldNeedsUpdate(buffer, offset) {\n\t\t\tthis.resolvedProperty.fromArray(buffer, offset);\n\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\t\t}]],\n\t\tgetValue: function getValue_unbound(targetArray, offset) {\n\t\t\tthis.bind();\n\t\t\tthis.getValue(targetArray, offset); // Note: This class uses a State pattern on a per-method basis:\n\t\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t\t// prototype version of these methods with one that represents\n\t\t\t// the bound state. When the property is not found, the methods\n\t\t\t// become no-ops.\n\t\t},\n\t\tsetValue: function getValue_unbound(sourceArray, offset) {\n\t\t\tthis.bind();\n\t\t\tthis.setValue(sourceArray, offset);\n\t\t},\n\t\t// create getter / setter pair for a property in the scene graph\n\t\tbind: function bind() {\n\t\t\tvar targetObject = this.node;\n\t\t\tvar parsedPath = this.parsedPath;\n\t\t\tvar objectName = parsedPath.objectName;\n\t\t\tvar propertyName = parsedPath.propertyName;\n\t\t\tvar propertyIndex = parsedPath.propertyIndex;\n\n\t\t\tif (!targetObject) {\n\t\t\t\ttargetObject = PropertyBinding.findNode(this.rootNode, parsedPath.nodeName) || this.rootNode;\n\t\t\t\tthis.node = targetObject;\n\t\t\t} // set fail state so we can just 'return' on error\n\n\n\t\t\tthis.getValue = this._getValue_unavailable;\n\t\t\tthis.setValue = this._setValue_unavailable; // ensure there is a value node\n\n\t\t\tif (!targetObject) {\n\t\t\t\tconsole.error('THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.');\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (objectName) {\n\t\t\t\tvar objectIndex = parsedPath.objectIndex; // special cases were we need to reach deeper into the hierarchy to get the face materials....\n\n\t\t\t\tswitch (objectName) {\n\t\t\t\t\tcase 'materials':\n\t\t\t\t\t\tif (!targetObject.material) {\n\t\t\t\t\t\t\tconsole.error('THREE.PropertyBinding: Can not bind to material as node does not have a material.', this);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!targetObject.material.materials) {\n\t\t\t\t\t\t\tconsole.error('THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetObject = targetObject.material.materials;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bones':\n\t\t\t\t\t\tif (!targetObject.skeleton) {\n\t\t\t\t\t\t\tconsole.error('THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} // potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t\t// and convert the integer string to a true integer.\n\n\n\t\t\t\t\t\ttargetObject = targetObject.skeleton.bones; // support resolving morphTarget names into indices.\n\n\t\t\t\t\t\tfor (var i = 0; i < targetObject.length; i++) {\n\t\t\t\t\t\t\tif (targetObject[i].name === objectIndex) {\n\t\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (targetObject[objectName] === undefined) {\n\t\t\t\t\t\t\tconsole.error('THREE.PropertyBinding: Can not bind to objectName of node undefined.', this);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetObject = targetObject[objectName];\n\t\t\t\t}\n\n\t\t\t\tif (objectIndex !== undefined) {\n\t\t\t\t\tif (targetObject[objectIndex] === undefined) {\n\t\t\t\t\t\tconsole.error('THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[objectIndex];\n\t\t\t\t}\n\t\t\t} // resolve property\n\n\n\t\t\tvar nodeProperty = targetObject[propertyName];\n\n\t\t\tif (nodeProperty === undefined) {\n\t\t\t\tvar nodeName = parsedPath.nodeName;\n\t\t\t\tconsole.error('THREE.PropertyBinding: Trying to update property for track: ' + nodeName + '.' + propertyName + ' but it wasn\\'t found.', targetObject);\n\t\t\t\treturn;\n\t\t\t} // determine versioning scheme\n\n\n\t\t\tvar versioning = this.Versioning.None;\n\t\t\tthis.targetObject = targetObject;\n\n\t\t\tif (targetObject.needsUpdate !== undefined) {\n\t\t\t\t// material\n\t\t\t\tversioning = this.Versioning.NeedsUpdate;\n\t\t\t} else if (targetObject.matrixWorldNeedsUpdate !== undefined) {\n\t\t\t\t// node transform\n\t\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\t\t\t} // determine how the property gets bound\n\n\n\t\t\tvar bindingType = this.BindingType.Direct;\n\n\t\t\tif (propertyIndex !== undefined) {\n\t\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\t\t\t\tif (propertyName === 'morphTargetInfluences') {\n\t\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tif (!targetObject.geometry) {\n\t\t\t\t\t\tconsole.error('THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (targetObject.geometry.isBufferGeometry) {\n\t\t\t\t\t\tif (!targetObject.geometry.morphAttributes) {\n\t\t\t\t\t\t\tconsole.error('THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (targetObject.morphTargetDictionary[propertyIndex] !== undefined) {\n\t\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[propertyIndex];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error('THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbindingType = this.BindingType.ArrayElement;\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\t\tthis.propertyIndex = propertyIndex;\n\t\t\t} else if (nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined) {\n\t\t\t\t// must use copy for Object3D.Euler/Quaternion\n\t\t\t\tbindingType = this.BindingType.HasFromToArray;\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\t} else if (Array.isArray(nodeProperty)) {\n\t\t\t\tbindingType = this.BindingType.EntireArray;\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\t} else {\n\t\t\t\tthis.propertyName = propertyName;\n\t\t\t} // select getter / setter\n\n\n\t\t\tthis.getValue = this.GetterByBindingType[bindingType];\n\t\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[bindingType][versioning];\n\t\t},\n\t\tunbind: function unbind() {\n\t\t\tthis.node = null; // back to the prototype version of getValue / setValue\n\t\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\n\t\t\tthis.getValue = this._getValue_unbound;\n\t\t\tthis.setValue = this._setValue_unbound;\n\t\t}\n\t}); // DECLARE ALIAS AFTER assign prototype\n\n\tObject.assign(PropertyBinding.prototype, {\n\t\t// initial state of these methods that calls 'bind'\n\t\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t\t_setValue_unbound: PropertyBinding.prototype.setValue\n\t});\n\n\t/**\n\t *\n\t * A group of objects that receives a shared animation state.\n\t *\n\t * Usage:\n\t *\n\t *\t- Add objects you would otherwise pass as 'root' to the\n\t *\t\tconstructor or the .clipAction method of AnimationMixer.\n\t *\n\t *\t- Instead pass this object as 'root'.\n\t *\n\t *\t- You can also add and remove objects later when the mixer\n\t *\t\tis running.\n\t *\n\t * Note:\n\t *\n\t *\t\tObjects of this class appear as one object to the mixer,\n\t *\t\tso cache control of the individual objects must be done\n\t *\t\ton the group.\n\t *\n\t * Limitation:\n\t *\n\t *\t- The animated properties must be compatible among the\n\t *\t\tall objects in the group.\n\t *\n\t *\t- A single property can either be controlled through a\n\t *\t\ttarget group or directly, but not both.\n\t */\n\n\tfunction AnimationObjectGroup() {\n\t\tthis.uuid = MathUtils.generateUUID(); // cached objects followed by the active ones\n\n\t\tthis._objects = Array.prototype.slice.call(arguments);\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tvar indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor (var i = 0, n = arguments.length; i !== n; ++i) {\n\t\t\tindices[arguments[i].uuid] = i;\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tvar scope = this;\n\t\tthis.stats = {\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\t\t\t\t\treturn scope._objects.length;\n\t\t\t\t},\n\n\t\t\t\tget inUse() {\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tget bindingsPerObject() {\n\t\t\t\treturn scope._bindings.length;\n\t\t\t}\n\n\t\t};\n\t}\n\n\tObject.assign(AnimationObjectGroup.prototype, {\n\t\tisAnimationObjectGroup: true,\n\t\tadd: function add() {\n\t\t\tvar objects = this._objects,\n\t\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\t\tpaths = this._paths,\n\t\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\t\tbindings = this._bindings,\n\t\t\t\t\tnBindings = bindings.length;\n\t\t\tvar knownObject = undefined,\n\t\t\t\t\tnObjects = objects.length,\n\t\t\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\t\tfor (var i = 0, n = arguments.length; i !== n; ++i) {\n\t\t\t\tvar object = arguments[i],\n\t\t\t\t\t\tuuid = object.uuid;\n\t\t\t\tvar index = indicesByUUID[uuid];\n\n\t\t\t\tif (index === undefined) {\n\t\t\t\t\t// unknown object -> add it to the ACTIVE region\n\t\t\t\t\tindex = nObjects++;\n\t\t\t\t\tindicesByUUID[uuid] = index;\n\t\t\t\t\tobjects.push(object); // accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor (var j = 0, m = nBindings; j !== m; ++j) {\n\t\t\t\t\t\tbindings[j].push(new PropertyBinding(object, paths[j], parsedPaths[j]));\n\t\t\t\t\t}\n\t\t\t\t} else if (index < nCachedObjects) {\n\t\t\t\t\tknownObject = objects[index]; // move existing object to the ACTIVE region\n\n\t\t\t\t\tvar firstActiveIndex = --nCachedObjects,\n\t\t\t\t\t\t\tlastCachedObject = objects[firstActiveIndex];\n\t\t\t\t\tindicesByUUID[lastCachedObject.uuid] = index;\n\t\t\t\t\tobjects[index] = lastCachedObject;\n\t\t\t\t\tindicesByUUID[uuid] = firstActiveIndex;\n\t\t\t\t\tobjects[firstActiveIndex] = object; // accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor (var _j = 0, _m = nBindings; _j !== _m; ++_j) {\n\t\t\t\t\t\tvar bindingsForPath = bindings[_j],\n\t\t\t\t\t\t\t\tlastCached = bindingsForPath[firstActiveIndex];\n\t\t\t\t\t\tvar binding = bindingsForPath[index];\n\t\t\t\t\t\tbindingsForPath[index] = lastCached;\n\n\t\t\t\t\t\tif (binding === undefined) {\n\t\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t\t// or may not exist\n\t\t\t\t\t\t\tbinding = new PropertyBinding(object, paths[_j], parsedPaths[_j]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbindingsForPath[firstActiveIndex] = binding;\n\t\t\t\t\t}\n\t\t\t\t} else if (objects[index] !== knownObject) {\n\t\t\t\t\tconsole.error('THREE.AnimationObjectGroup: Different objects with the same UUID ' + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.');\n\t\t\t\t} // else the object is already where we want it to be\n\n\t\t\t} // for arguments\n\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\t\t},\n\t\tremove: function remove() {\n\t\t\tvar objects = this._objects,\n\t\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\t\tbindings = this._bindings,\n\t\t\t\t\tnBindings = bindings.length;\n\t\t\tvar nCachedObjects = this.nCachedObjects_;\n\n\t\t\tfor (var i = 0, n = arguments.length; i !== n; ++i) {\n\t\t\t\tvar object = arguments[i],\n\t\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\t\tindex = indicesByUUID[uuid];\n\n\t\t\t\tif (index !== undefined && index >= nCachedObjects) {\n\t\t\t\t\t// move existing object into the CACHED region\n\t\t\t\t\tvar lastCachedIndex = nCachedObjects++,\n\t\t\t\t\t\t\tfirstActiveObject = objects[lastCachedIndex];\n\t\t\t\t\tindicesByUUID[firstActiveObject.uuid] = index;\n\t\t\t\t\tobjects[index] = firstActiveObject;\n\t\t\t\t\tindicesByUUID[uuid] = lastCachedIndex;\n\t\t\t\t\tobjects[lastCachedIndex] = object; // accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor (var j = 0, m = nBindings; j !== m; ++j) {\n\t\t\t\t\t\tvar bindingsForPath = bindings[j],\n\t\t\t\t\t\t\t\tfirstActive = bindingsForPath[lastCachedIndex],\n\t\t\t\t\t\t\t\tbinding = bindingsForPath[index];\n\t\t\t\t\t\tbindingsForPath[index] = firstActive;\n\t\t\t\t\t\tbindingsForPath[lastCachedIndex] = binding;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} // for arguments\n\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\t\t},\n\t\t// remove & forget\n\t\tuncache: function uncache() {\n\t\t\tvar objects = this._objects,\n\t\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\t\tbindings = this._bindings,\n\t\t\t\t\tnBindings = bindings.length;\n\t\t\tvar nCachedObjects = this.nCachedObjects_,\n\t\t\t\t\tnObjects = objects.length;\n\n\t\t\tfor (var i = 0, n = arguments.length; i !== n; ++i) {\n\t\t\t\tvar object = arguments[i],\n\t\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\t\tindex = indicesByUUID[uuid];\n\n\t\t\t\tif (index !== undefined) {\n\t\t\t\t\tdelete indicesByUUID[uuid];\n\n\t\t\t\t\tif (index < nCachedObjects) {\n\t\t\t\t\t\t// object is cached, shrink the CACHED region\n\t\t\t\t\t\tvar firstActiveIndex = --nCachedObjects,\n\t\t\t\t\t\t\t\tlastCachedObject = objects[firstActiveIndex],\n\t\t\t\t\t\t\t\tlastIndex = --nObjects,\n\t\t\t\t\t\t\t\tlastObject = objects[lastIndex]; // last cached object takes this object's place\n\n\t\t\t\t\t\tindicesByUUID[lastCachedObject.uuid] = index;\n\t\t\t\t\t\tobjects[index] = lastCachedObject; // last object goes to the activated slot and pop\n\n\t\t\t\t\t\tindicesByUUID[lastObject.uuid] = firstActiveIndex;\n\t\t\t\t\t\tobjects[firstActiveIndex] = lastObject;\n\t\t\t\t\t\tobjects.pop(); // accounting is done, now do the same for all bindings\n\n\t\t\t\t\t\tfor (var j = 0, m = nBindings; j !== m; ++j) {\n\t\t\t\t\t\t\tvar bindingsForPath = bindings[j],\n\t\t\t\t\t\t\t\t\tlastCached = bindingsForPath[firstActiveIndex],\n\t\t\t\t\t\t\t\t\tlast = bindingsForPath[lastIndex];\n\t\t\t\t\t\t\tbindingsForPath[index] = lastCached;\n\t\t\t\t\t\t\tbindingsForPath[firstActiveIndex] = last;\n\t\t\t\t\t\t\tbindingsForPath.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// object is active, just swap with the last and pop\n\t\t\t\t\t\tvar _lastIndex = --nObjects,\n\t\t\t\t\t\t\t\t_lastObject = objects[_lastIndex];\n\n\t\t\t\t\t\tif (_lastIndex > 0) {\n\t\t\t\t\t\t\tindicesByUUID[_lastObject.uuid] = index;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobjects[index] = _lastObject;\n\t\t\t\t\t\tobjects.pop(); // accounting is done, now do the same for all bindings\n\n\t\t\t\t\t\tfor (var _j2 = 0, _m2 = nBindings; _j2 !== _m2; ++_j2) {\n\t\t\t\t\t\t\tvar _bindingsForPath = bindings[_j2];\n\t\t\t\t\t\t\t_bindingsForPath[index] = _bindingsForPath[_lastIndex];\n\n\t\t\t\t\t\t\t_bindingsForPath.pop();\n\t\t\t\t\t\t}\n\t\t\t\t\t} // cached or active\n\n\t\t\t\t} // if object is known\n\n\t\t\t} // for arguments\n\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\t\t},\n\t\t// Internal interface used by befriended PropertyBinding.Composite:\n\t\tsubscribe_: function subscribe_(path, parsedPath) {\n\t\t\t// returns an array of bindings for the given path that is changed\n\t\t\t// according to the contained objects in the group\n\t\t\tvar indicesByPath = this._bindingsIndicesByPath;\n\t\t\tvar index = indicesByPath[path];\n\t\t\tvar bindings = this._bindings;\n\t\t\tif (index !== undefined) return bindings[index];\n\t\t\tvar paths = this._paths,\n\t\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\t\tobjects = this._objects,\n\t\t\t\t\tnObjects = objects.length,\n\t\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\t\tbindingsForPath = new Array(nObjects);\n\t\t\tindex = bindings.length;\n\t\t\tindicesByPath[path] = index;\n\t\t\tpaths.push(path);\n\t\t\tparsedPaths.push(parsedPath);\n\t\t\tbindings.push(bindingsForPath);\n\n\t\t\tfor (var i = nCachedObjects, n = objects.length; i !== n; ++i) {\n\t\t\t\tvar object = objects[i];\n\t\t\t\tbindingsForPath[i] = new PropertyBinding(object, path, parsedPath);\n\t\t\t}\n\n\t\t\treturn bindingsForPath;\n\t\t},\n\t\tunsubscribe_: function unsubscribe_(path) {\n\t\t\t// tells the group to forget about a property path and no longer\n\t\t\t// update the array previously obtained with 'subscribe_'\n\t\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\t\t\tindex = indicesByPath[path];\n\n\t\t\tif (index !== undefined) {\n\t\t\t\tvar paths = this._paths,\n\t\t\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\t\t\tbindings = this._bindings,\n\t\t\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\t\t\tlastBindings = bindings[lastBindingsIndex],\n\t\t\t\t\t\tlastBindingsPath = path[lastBindingsIndex];\n\t\t\t\tindicesByPath[lastBindingsPath] = index;\n\t\t\t\tbindings[index] = lastBindings;\n\t\t\t\tbindings.pop();\n\t\t\t\tparsedPaths[index] = parsedPaths[lastBindingsIndex];\n\t\t\t\tparsedPaths.pop();\n\t\t\t\tpaths[index] = paths[lastBindingsIndex];\n\t\t\t\tpaths.pop();\n\t\t\t}\n\t\t}\n\t});\n\n\tvar AnimationAction = /*#__PURE__*/function () {\n\t\tfunction AnimationAction(mixer, clip, localRoot, blendMode) {\n\t\t\tif (localRoot === void 0) {\n\t\t\t\tlocalRoot = null;\n\t\t\t}\n\n\t\t\tif (blendMode === void 0) {\n\t\t\t\tblendMode = clip.blendMode;\n\t\t\t}\n\n\t\t\tthis._mixer = mixer;\n\t\t\tthis._clip = clip;\n\t\t\tthis._localRoot = localRoot;\n\t\t\tthis.blendMode = blendMode;\n\t\t\tvar tracks = clip.tracks,\n\t\t\t\t\tnTracks = tracks.length,\n\t\t\t\t\tinterpolants = new Array(nTracks);\n\t\t\tvar interpolantSettings = {\n\t\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t\t};\n\n\t\t\tfor (var i = 0; i !== nTracks; ++i) {\n\t\t\t\tvar interpolant = tracks[i].createInterpolant(null);\n\t\t\t\tinterpolants[i] = interpolant;\n\t\t\t\tinterpolant.settings = interpolantSettings;\n\t\t\t}\n\n\t\t\tthis._interpolantSettings = interpolantSettings;\n\t\t\tthis._interpolants = interpolants; // bound by the mixer\n\t\t\t// inside: PropertyMixer (managed by the mixer)\n\n\t\t\tthis._propertyBindings = new Array(nTracks);\n\t\t\tthis._cacheIndex = null; // for the memory manager\n\n\t\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis.loop = LoopRepeat;\n\t\t\tthis._loopCount = -1; // global mixer time when the action is to be started\n\t\t\t// it's set back to 'null' upon start of the action\n\n\t\t\tthis._startTime = null; // scaled local time of the action\n\t\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\n\t\t\tthis.time = 0;\n\t\t\tthis.timeScale = 1;\n\t\t\tthis._effectiveTimeScale = 1;\n\t\t\tthis.weight = 1;\n\t\t\tthis._effectiveWeight = 1;\n\t\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\t\tthis.paused = false; // true -> zero effective time scale\n\n\t\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\t\tthis.clampWhenFinished = false; // keep feeding the last frame?\n\n\t\t\tthis.zeroSlopeAtStart = true; // for smooth interpolation w/o separate\n\n\t\t\tthis.zeroSlopeAtEnd = true; // clips for start, loop and end\n\t\t} // State & Scheduling\n\n\n\t\tvar _proto = AnimationAction.prototype;\n\n\t\t_proto.play = function play() {\n\t\t\tthis._mixer._activateAction(this);\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.stop = function stop() {\n\t\t\tthis._mixer._deactivateAction(this);\n\n\t\t\treturn this.reset();\n\t\t};\n\n\t\t_proto.reset = function reset() {\n\t\t\tthis.paused = false;\n\t\t\tthis.enabled = true;\n\t\t\tthis.time = 0; // restart clip\n\n\t\t\tthis._loopCount = -1; // forget previous loops\n\n\t\t\tthis._startTime = null; // forget scheduling\n\n\t\t\treturn this.stopFading().stopWarping();\n\t\t};\n\n\t\t_proto.isRunning = function isRunning() {\n\t\t\treturn this.enabled && !this.paused && this.timeScale !== 0 && this._startTime === null && this._mixer._isActiveAction(this);\n\t\t} // return true when play has been called\n\t\t;\n\n\t\t_proto.isScheduled = function isScheduled() {\n\t\t\treturn this._mixer._isActiveAction(this);\n\t\t};\n\n\t\t_proto.startAt = function startAt(time) {\n\t\t\tthis._startTime = time;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setLoop = function setLoop(mode, repetitions) {\n\t\t\tthis.loop = mode;\n\t\t\tthis.repetitions = repetitions;\n\t\t\treturn this;\n\t\t} // Weight\n\t\t// set the weight stopping any scheduled fading\n\t\t// although .enabled = false yields an effective weight of zero, this\n\t\t// method does *not* change .enabled, because it would be confusing\n\t\t;\n\n\t\t_proto.setEffectiveWeight = function setEffectiveWeight(weight) {\n\t\t\tthis.weight = weight; // note: same logic as when updated at runtime\n\n\t\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\t\t\treturn this.stopFading();\n\t\t} // return the weight considering fading and .enabled\n\t\t;\n\n\t\t_proto.getEffectiveWeight = function getEffectiveWeight() {\n\t\t\treturn this._effectiveWeight;\n\t\t};\n\n\t\t_proto.fadeIn = function fadeIn(duration) {\n\t\t\treturn this._scheduleFading(duration, 0, 1);\n\t\t};\n\n\t\t_proto.fadeOut = function fadeOut(duration) {\n\t\t\treturn this._scheduleFading(duration, 1, 0);\n\t\t};\n\n\t\t_proto.crossFadeFrom = function crossFadeFrom(fadeOutAction, duration, warp) {\n\t\t\tfadeOutAction.fadeOut(duration);\n\t\t\tthis.fadeIn(duration);\n\n\t\t\tif (warp) {\n\t\t\t\tvar fadeInDuration = this._clip.duration,\n\t\t\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\t\t\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\t\t\t\tfadeOutAction.warp(1.0, startEndRatio, duration);\n\t\t\t\tthis.warp(endStartRatio, 1.0, duration);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.crossFadeTo = function crossFadeTo(fadeInAction, duration, warp) {\n\t\t\treturn fadeInAction.crossFadeFrom(this, duration, warp);\n\t\t};\n\n\t\t_proto.stopFading = function stopFading() {\n\t\t\tvar weightInterpolant = this._weightInterpolant;\n\n\t\t\tif (weightInterpolant !== null) {\n\t\t\t\tthis._weightInterpolant = null;\n\n\t\t\t\tthis._mixer._takeBackControlInterpolant(weightInterpolant);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t} // Time Scale Control\n\t\t// set the time scale stopping any scheduled warping\n\t\t// although .paused = true yields an effective time scale of zero, this\n\t\t// method does *not* change .paused, because it would be confusing\n\t\t;\n\n\t\t_proto.setEffectiveTimeScale = function setEffectiveTimeScale(timeScale) {\n\t\t\tthis.timeScale = timeScale;\n\t\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\t\t\treturn this.stopWarping();\n\t\t} // return the time scale considering warping and .paused\n\t\t;\n\n\t\t_proto.getEffectiveTimeScale = function getEffectiveTimeScale() {\n\t\t\treturn this._effectiveTimeScale;\n\t\t};\n\n\t\t_proto.setDuration = function setDuration(duration) {\n\t\t\tthis.timeScale = this._clip.duration / duration;\n\t\t\treturn this.stopWarping();\n\t\t};\n\n\t\t_proto.syncWith = function syncWith(action) {\n\t\t\tthis.time = action.time;\n\t\t\tthis.timeScale = action.timeScale;\n\t\t\treturn this.stopWarping();\n\t\t};\n\n\t\t_proto.halt = function halt(duration) {\n\t\t\treturn this.warp(this._effectiveTimeScale, 0, duration);\n\t\t};\n\n\t\t_proto.warp = function warp(startTimeScale, endTimeScale, duration) {\n\t\t\tvar mixer = this._mixer,\n\t\t\t\t\tnow = mixer.time,\n\t\t\t\t\ttimeScale = this.timeScale;\n\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\tif (interpolant === null) {\n\t\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\t\tthis._timeScaleInterpolant = interpolant;\n\t\t\t}\n\n\t\t\tvar times = interpolant.parameterPositions,\n\t\t\t\t\tvalues = interpolant.sampleValues;\n\t\t\ttimes[0] = now;\n\t\t\ttimes[1] = now + duration;\n\t\t\tvalues[0] = startTimeScale / timeScale;\n\t\t\tvalues[1] = endTimeScale / timeScale;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.stopWarping = function stopWarping() {\n\t\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\t\tif (timeScaleInterpolant !== null) {\n\t\t\t\tthis._timeScaleInterpolant = null;\n\n\t\t\t\tthis._mixer._takeBackControlInterpolant(timeScaleInterpolant);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t} // Object Accessors\n\t\t;\n\n\t\t_proto.getMixer = function getMixer() {\n\t\t\treturn this._mixer;\n\t\t};\n\n\t\t_proto.getClip = function getClip() {\n\t\t\treturn this._clip;\n\t\t};\n\n\t\t_proto.getRoot = function getRoot() {\n\t\t\treturn this._localRoot || this._mixer._root;\n\t\t} // Interna\n\t\t;\n\n\t\t_proto._update = function _update(time, deltaTime, timeDirection, accuIndex) {\n\t\t\t// called by the mixer\n\t\t\tif (!this.enabled) {\n\t\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\t\t\t\tthis._updateWeight(time);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar startTime = this._startTime;\n\n\t\t\tif (startTime !== null) {\n\t\t\t\t// check for scheduled start of action\n\t\t\t\tvar timeRunning = (time - startTime) * timeDirection;\n\n\t\t\t\tif (timeRunning < 0 || timeDirection === 0) {\n\t\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\t\t\t\t} // start\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\t\t\t} // apply time scale and advance time\n\n\n\t\t\tdeltaTime *= this._updateTimeScale(time);\n\n\t\t\tvar clipTime = this._updateTime(deltaTime); // note: _updateTime may disable the action resulting in\n\t\t\t// an effective weight of 0\n\n\n\t\t\tvar weight = this._updateWeight(time);\n\n\t\t\tif (weight > 0) {\n\t\t\t\tvar _interpolants = this._interpolants;\n\t\t\t\tvar propertyMixers = this._propertyBindings;\n\n\t\t\t\tswitch (this.blendMode) {\n\t\t\t\t\tcase AdditiveAnimationBlendMode:\n\t\t\t\t\t\tfor (var j = 0, m = _interpolants.length; j !== m; ++j) {\n\t\t\t\t\t\t\t_interpolants[j].evaluate(clipTime);\n\n\t\t\t\t\t\t\tpropertyMixers[j].accumulateAdditive(weight);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tfor (var _j = 0, _m = _interpolants.length; _j !== _m; ++_j) {\n\t\t\t\t\t\t\t_interpolants[_j].evaluate(clipTime);\n\n\t\t\t\t\t\t\tpropertyMixers[_j].accumulate(accuIndex, weight);\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t_proto._updateWeight = function _updateWeight(time) {\n\t\t\tvar weight = 0;\n\n\t\t\tif (this.enabled) {\n\t\t\t\tweight = this.weight;\n\t\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\t\tif (interpolant !== null) {\n\t\t\t\t\tvar interpolantValue = interpolant.evaluate(time)[0];\n\t\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\t\tif (time > interpolant.parameterPositions[1]) {\n\t\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\t\tif (interpolantValue === 0) {\n\t\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\t\tthis.enabled = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._effectiveWeight = weight;\n\t\t\treturn weight;\n\t\t};\n\n\t\t_proto._updateTimeScale = function _updateTimeScale(time) {\n\t\t\tvar timeScale = 0;\n\n\t\t\tif (!this.paused) {\n\t\t\t\ttimeScale = this.timeScale;\n\t\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\t\tif (interpolant !== null) {\n\t\t\t\t\tvar interpolantValue = interpolant.evaluate(time)[0];\n\t\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\t\tif (time > interpolant.parameterPositions[1]) {\n\t\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\t\tif (timeScale === 0) {\n\t\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\t\tthis.paused = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\t\tthis.timeScale = timeScale;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._effectiveTimeScale = timeScale;\n\t\t\treturn timeScale;\n\t\t};\n\n\t\t_proto._updateTime = function _updateTime(deltaTime) {\n\t\t\tvar duration = this._clip.duration;\n\t\t\tvar loop = this.loop;\n\t\t\tvar time = this.time + deltaTime;\n\t\t\tvar loopCount = this._loopCount;\n\t\t\tvar pingPong = loop === LoopPingPong;\n\n\t\t\tif (deltaTime === 0) {\n\t\t\t\tif (loopCount === -1) return time;\n\t\t\t\treturn pingPong && (loopCount & 1) === 1 ? duration - time : time;\n\t\t\t}\n\n\t\t\tif (loop === LoopOnce) {\n\t\t\t\tif (loopCount === -1) {\n\t\t\t\t\t// just started\n\t\t\t\t\tthis._loopCount = 0;\n\n\t\t\t\t\tthis._setEndings(true, true, false);\n\t\t\t\t}\n\n\t\t\t\thandle_stop: {\n\t\t\t\t\tif (time >= duration) {\n\t\t\t\t\t\ttime = duration;\n\t\t\t\t\t} else if (time < 0) {\n\t\t\t\t\t\ttime = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.time = time;\n\t\t\t\t\t\tbreak handle_stop;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.clampWhenFinished) this.paused = true;else this.enabled = false;\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent({\n\t\t\t\t\t\ttype: 'finished',\n\t\t\t\t\t\taction: this,\n\t\t\t\t\t\tdirection: deltaTime < 0 ? -1 : 1\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// repetitive Repeat or PingPong\n\t\t\t\tif (loopCount === -1) {\n\t\t\t\t\t// just started\n\t\t\t\t\tif (deltaTime >= 0) {\n\t\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\t\tthis._setEndings(true, this.repetitions === 0, pingPong);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t\t// so leave loopCount at -1\n\t\t\t\t\t\tthis._setEndings(this.repetitions === 0, true, pingPong);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (time >= duration || time < 0) {\n\t\t\t\t\t// wrap around\n\t\t\t\t\tvar loopDelta = Math.floor(time / duration); // signed\n\n\t\t\t\t\ttime -= duration * loopDelta;\n\t\t\t\t\tloopCount += Math.abs(loopDelta);\n\t\t\t\t\tvar pending = this.repetitions - loopCount;\n\n\t\t\t\t\tif (pending <= 0) {\n\t\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\t\t\t\t\t\tif (this.clampWhenFinished) this.paused = true;else this.enabled = false;\n\t\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\t\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\t\tthis._mixer.dispatchEvent({\n\t\t\t\t\t\t\ttype: 'finished',\n\t\t\t\t\t\t\taction: this,\n\t\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : -1\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// keep running\n\t\t\t\t\t\tif (pending === 1) {\n\t\t\t\t\t\t\t// entering the last round\n\t\t\t\t\t\t\tvar atStart = deltaTime < 0;\n\n\t\t\t\t\t\t\tthis._setEndings(atStart, !atStart, pingPong);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._setEndings(false, false, pingPong);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._loopCount = loopCount;\n\t\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\t\tthis._mixer.dispatchEvent({\n\t\t\t\t\t\t\ttype: 'loop',\n\t\t\t\t\t\t\taction: this,\n\t\t\t\t\t\t\tloopDelta: loopDelta\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.time = time;\n\t\t\t\t}\n\n\t\t\t\tif (pingPong && (loopCount & 1) === 1) {\n\t\t\t\t\t// invert time for the \"pong round\"\n\t\t\t\t\treturn duration - time;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn time;\n\t\t};\n\n\t\t_proto._setEndings = function _setEndings(atStart, atEnd, pingPong) {\n\t\t\tvar settings = this._interpolantSettings;\n\n\t\t\tif (pingPong) {\n\t\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\t\t\t} else {\n\t\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\t\t\t\tif (atStart) {\n\t\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\t\t\t\t} else {\n\t\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\t\t\t\t}\n\n\t\t\t\tif (atEnd) {\n\t\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\t\t\t\t} else {\n\t\t\t\t\tsettings.endingEnd = WrapAroundEnding;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t_proto._scheduleFading = function _scheduleFading(duration, weightNow, weightThen) {\n\t\t\tvar mixer = this._mixer,\n\t\t\t\t\tnow = mixer.time;\n\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\tif (interpolant === null) {\n\t\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\t\tthis._weightInterpolant = interpolant;\n\t\t\t}\n\n\t\t\tvar times = interpolant.parameterPositions,\n\t\t\t\t\tvalues = interpolant.sampleValues;\n\t\t\ttimes[0] = now;\n\t\t\tvalues[0] = weightNow;\n\t\t\ttimes[1] = now + duration;\n\t\t\tvalues[1] = weightThen;\n\t\t\treturn this;\n\t\t};\n\n\t\treturn AnimationAction;\n\t}();\n\n\tfunction AnimationMixer(root) {\n\t\tthis._root = root;\n\n\t\tthis._initMemoryManager();\n\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\t}\n\n\tAnimationMixer.prototype = Object.assign(Object.create(EventDispatcher.prototype), {\n\t\tconstructor: AnimationMixer,\n\t\t_bindAction: function _bindAction(action, prototypeAction) {\n\t\t\tvar root = action._localRoot || this._root,\n\t\t\t\t\ttracks = action._clip.tracks,\n\t\t\t\t\tnTracks = tracks.length,\n\t\t\t\t\tbindings = action._propertyBindings,\n\t\t\t\t\tinterpolants = action._interpolants,\n\t\t\t\t\trootUuid = root.uuid,\n\t\t\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\t\t\tvar bindingsByName = bindingsByRoot[rootUuid];\n\n\t\t\tif (bindingsByName === undefined) {\n\t\t\t\tbindingsByName = {};\n\t\t\t\tbindingsByRoot[rootUuid] = bindingsByName;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i !== nTracks; ++i) {\n\t\t\t\tvar track = tracks[i],\n\t\t\t\t\t\ttrackName = track.name;\n\t\t\t\tvar binding = bindingsByName[trackName];\n\n\t\t\t\tif (binding !== undefined) {\n\t\t\t\t\tbindings[i] = binding;\n\t\t\t\t} else {\n\t\t\t\t\tbinding = bindings[i];\n\n\t\t\t\t\tif (binding !== undefined) {\n\t\t\t\t\t\t// existing binding, make sure the cache knows\n\t\t\t\t\t\tif (binding._cacheIndex === null) {\n\t\t\t\t\t\t\t++binding.referenceCount;\n\n\t\t\t\t\t\t\tthis._addInactiveBinding(binding, rootUuid, trackName);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar path = prototypeAction && prototypeAction._propertyBindings[i].binding.parsedPath;\n\t\t\t\t\tbinding = new PropertyMixer(PropertyBinding.create(root, trackName, path), track.ValueTypeName, track.getValueSize());\n\t\t\t\t\t++binding.referenceCount;\n\n\t\t\t\t\tthis._addInactiveBinding(binding, rootUuid, trackName);\n\n\t\t\t\t\tbindings[i] = binding;\n\t\t\t\t}\n\n\t\t\t\tinterpolants[i].resultBuffer = binding.buffer;\n\t\t\t}\n\t\t},\n\t\t_activateAction: function _activateAction(action) {\n\t\t\tif (!this._isActiveAction(action)) {\n\t\t\t\tif (action._cacheIndex === null) {\n\t\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t\t// appears to be still using it -> rebind\n\t\t\t\t\tvar rootUuid = (action._localRoot || this._root).uuid,\n\t\t\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\t\t\tactionsForClip = this._actionsByClip[clipUuid];\n\n\t\t\t\t\tthis._bindAction(action, actionsForClip && actionsForClip.knownActions[0]);\n\n\t\t\t\t\tthis._addInactiveAction(action, clipUuid, rootUuid);\n\t\t\t\t}\n\n\t\t\t\tvar bindings = action._propertyBindings; // increment reference counts / sort out state\n\n\t\t\t\tfor (var i = 0, n = bindings.length; i !== n; ++i) {\n\t\t\t\t\tvar binding = bindings[i];\n\n\t\t\t\t\tif (binding.useCount++ === 0) {\n\t\t\t\t\t\tthis._lendBinding(binding);\n\n\t\t\t\t\t\tbinding.saveOriginalState();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._lendAction(action);\n\t\t\t}\n\t\t},\n\t\t_deactivateAction: function _deactivateAction(action) {\n\t\t\tif (this._isActiveAction(action)) {\n\t\t\t\tvar bindings = action._propertyBindings; // decrement reference counts / sort out state\n\n\t\t\t\tfor (var i = 0, n = bindings.length; i !== n; ++i) {\n\t\t\t\t\tvar binding = bindings[i];\n\n\t\t\t\t\tif (--binding.useCount === 0) {\n\t\t\t\t\t\tbinding.restoreOriginalState();\n\n\t\t\t\t\t\tthis._takeBackBinding(binding);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._takeBackAction(action);\n\t\t\t}\n\t\t},\n\t\t// Memory manager\n\t\t_initMemoryManager: function _initMemoryManager() {\n\t\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\n\t\t\tthis._nActiveActions = 0;\n\t\t\tthis._actionsByClip = {}; // inside:\n\t\t\t// {\n\t\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t\t// }\n\n\t\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\n\t\t\tthis._nActiveBindings = 0;\n\t\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\t\t\tthis._controlInterpolants = []; // same game as above\n\n\t\t\tthis._nActiveControlInterpolants = 0;\n\t\t\tvar scope = this;\n\t\t\tthis.stats = {\n\t\t\t\tactions: {\n\t\t\t\t\tget total() {\n\t\t\t\t\t\treturn scope._actions.length;\n\t\t\t\t\t},\n\n\t\t\t\t\tget inUse() {\n\t\t\t\t\t\treturn scope._nActiveActions;\n\t\t\t\t\t}\n\n\t\t\t\t},\n\t\t\t\tbindings: {\n\t\t\t\t\tget total() {\n\t\t\t\t\t\treturn scope._bindings.length;\n\t\t\t\t\t},\n\n\t\t\t\t\tget inUse() {\n\t\t\t\t\t\treturn scope._nActiveBindings;\n\t\t\t\t\t}\n\n\t\t\t\t},\n\t\t\t\tcontrolInterpolants: {\n\t\t\t\t\tget total() {\n\t\t\t\t\t\treturn scope._controlInterpolants.length;\n\t\t\t\t\t},\n\n\t\t\t\t\tget inUse() {\n\t\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\t// Memory management for AnimationAction objects\n\t\t_isActiveAction: function _isActiveAction(action) {\n\t\t\tvar index = action._cacheIndex;\n\t\t\treturn index !== null && index < this._nActiveActions;\n\t\t},\n\t\t_addInactiveAction: function _addInactiveAction(action, clipUuid, rootUuid) {\n\t\t\tvar actions = this._actions,\n\t\t\t\t\tactionsByClip = this._actionsByClip;\n\t\t\tvar actionsForClip = actionsByClip[clipUuid];\n\n\t\t\tif (actionsForClip === undefined) {\n\t\t\t\tactionsForClip = {\n\t\t\t\t\tknownActions: [action],\n\t\t\t\t\tactionByRoot: {}\n\t\t\t\t};\n\t\t\t\taction._byClipCacheIndex = 0;\n\t\t\t\tactionsByClip[clipUuid] = actionsForClip;\n\t\t\t} else {\n\t\t\t\tvar knownActions = actionsForClip.knownActions;\n\t\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\t\tknownActions.push(action);\n\t\t\t}\n\n\t\t\taction._cacheIndex = actions.length;\n\t\t\tactions.push(action);\n\t\t\tactionsForClip.actionByRoot[rootUuid] = action;\n\t\t},\n\t\t_removeInactiveAction: function _removeInactiveAction(action) {\n\t\t\tvar actions = this._actions,\n\t\t\t\t\tlastInactiveAction = actions[actions.length - 1],\n\t\t\t\t\tcacheIndex = action._cacheIndex;\n\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\tactions[cacheIndex] = lastInactiveAction;\n\t\t\tactions.pop();\n\t\t\taction._cacheIndex = null;\n\t\t\tvar clipUuid = action._clip.uuid,\n\t\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\t\tactionsForClip = actionsByClip[clipUuid],\n\t\t\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\t\t\t\t\tlastKnownAction = knownActionsForClip[knownActionsForClip.length - 1],\n\t\t\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\t\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\t\tknownActionsForClip[byClipCacheIndex] = lastKnownAction;\n\t\t\tknownActionsForClip.pop();\n\t\t\taction._byClipCacheIndex = null;\n\t\t\tvar actionByRoot = actionsForClip.actionByRoot,\n\t\t\t\t\trootUuid = (action._localRoot || this._root).uuid;\n\t\t\tdelete actionByRoot[rootUuid];\n\n\t\t\tif (knownActionsForClip.length === 0) {\n\t\t\t\tdelete actionsByClip[clipUuid];\n\t\t\t}\n\n\t\t\tthis._removeInactiveBindingsForAction(action);\n\t\t},\n\t\t_removeInactiveBindingsForAction: function _removeInactiveBindingsForAction(action) {\n\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\tfor (var i = 0, n = bindings.length; i !== n; ++i) {\n\t\t\t\tvar binding = bindings[i];\n\n\t\t\t\tif (--binding.referenceCount === 0) {\n\t\t\t\t\tthis._removeInactiveBinding(binding);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_lendAction: function _lendAction(action) {\n\t\t\t// [ active actions |\tinactive actions\t]\n\t\t\t// [\tactive actions >| inactive actions ]\n\t\t\t//\t\t\t\t\t\t\t\t s\t\t\t\ta\n\t\t\t//\t\t\t\t\t\t\t\t\t<-swap->\n\t\t\t//\t\t\t\t\t\t\t\t a\t\t\t\ts\n\t\t\tvar actions = this._actions,\n\t\t\t\t\tprevIndex = action._cacheIndex,\n\t\t\t\t\tlastActiveIndex = this._nActiveActions++,\n\t\t\t\t\tfirstInactiveAction = actions[lastActiveIndex];\n\t\t\taction._cacheIndex = lastActiveIndex;\n\t\t\tactions[lastActiveIndex] = action;\n\t\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\t\tactions[prevIndex] = firstInactiveAction;\n\t\t},\n\t\t_takeBackAction: function _takeBackAction(action) {\n\t\t\t// [\tactive actions\t| inactive actions ]\n\t\t\t// [ active actions |< inactive actions\t]\n\t\t\t//\t\t\t\ta\t\t\t\ts\n\t\t\t//\t\t\t\t <-swap->\n\t\t\t//\t\t\t\ts\t\t\t\ta\n\t\t\tvar actions = this._actions,\n\t\t\t\t\tprevIndex = action._cacheIndex,\n\t\t\t\t\tfirstInactiveIndex = --this._nActiveActions,\n\t\t\t\t\tlastActiveAction = actions[firstInactiveIndex];\n\t\t\taction._cacheIndex = firstInactiveIndex;\n\t\t\tactions[firstInactiveIndex] = action;\n\t\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\t\tactions[prevIndex] = lastActiveAction;\n\t\t},\n\t\t// Memory management for PropertyMixer objects\n\t\t_addInactiveBinding: function _addInactiveBinding(binding, rootUuid, trackName) {\n\t\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\t\tbindings = this._bindings;\n\t\t\tvar bindingByName = bindingsByRoot[rootUuid];\n\n\t\t\tif (bindingByName === undefined) {\n\t\t\t\tbindingByName = {};\n\t\t\t\tbindingsByRoot[rootUuid] = bindingByName;\n\t\t\t}\n\n\t\t\tbindingByName[trackName] = binding;\n\t\t\tbinding._cacheIndex = bindings.length;\n\t\t\tbindings.push(binding);\n\t\t},\n\t\t_removeInactiveBinding: function _removeInactiveBinding(binding) {\n\t\t\tvar bindings = this._bindings,\n\t\t\t\t\tpropBinding = binding.binding,\n\t\t\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\t\t\ttrackName = propBinding.path,\n\t\t\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\t\tbindingByName = bindingsByRoot[rootUuid],\n\t\t\t\t\tlastInactiveBinding = bindings[bindings.length - 1],\n\t\t\t\t\tcacheIndex = binding._cacheIndex;\n\t\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\t\tbindings[cacheIndex] = lastInactiveBinding;\n\t\t\tbindings.pop();\n\t\t\tdelete bindingByName[trackName];\n\n\t\t\tif (Object.keys(bindingByName).length === 0) {\n\t\t\t\tdelete bindingsByRoot[rootUuid];\n\t\t\t}\n\t\t},\n\t\t_lendBinding: function _lendBinding(binding) {\n\t\t\tvar bindings = this._bindings,\n\t\t\t\t\tprevIndex = binding._cacheIndex,\n\t\t\t\t\tlastActiveIndex = this._nActiveBindings++,\n\t\t\t\t\tfirstInactiveBinding = bindings[lastActiveIndex];\n\t\t\tbinding._cacheIndex = lastActiveIndex;\n\t\t\tbindings[lastActiveIndex] = binding;\n\t\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\t\tbindings[prevIndex] = firstInactiveBinding;\n\t\t},\n\t\t_takeBackBinding: function _takeBackBinding(binding) {\n\t\t\tvar bindings = this._bindings,\n\t\t\t\t\tprevIndex = binding._cacheIndex,\n\t\t\t\t\tfirstInactiveIndex = --this._nActiveBindings,\n\t\t\t\t\tlastActiveBinding = bindings[firstInactiveIndex];\n\t\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\t\tbindings[firstInactiveIndex] = binding;\n\t\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\t\tbindings[prevIndex] = lastActiveBinding;\n\t\t},\n\t\t// Memory management of Interpolants for weight and time scale\n\t\t_lendControlInterpolant: function _lendControlInterpolant() {\n\t\t\tvar interpolants = this._controlInterpolants,\n\t\t\t\t\tlastActiveIndex = this._nActiveControlInterpolants++;\n\t\t\tvar interpolant = interpolants[lastActiveIndex];\n\n\t\t\tif (interpolant === undefined) {\n\t\t\t\tinterpolant = new LinearInterpolant(new Float32Array(2), new Float32Array(2), 1, this._controlInterpolantsResultBuffer);\n\t\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\t\tinterpolants[lastActiveIndex] = interpolant;\n\t\t\t}\n\n\t\t\treturn interpolant;\n\t\t},\n\t\t_takeBackControlInterpolant: function _takeBackControlInterpolant(interpolant) {\n\t\t\tvar interpolants = this._controlInterpolants,\n\t\t\t\t\tprevIndex = interpolant.__cacheIndex,\n\t\t\t\t\tfirstInactiveIndex = --this._nActiveControlInterpolants,\n\t\t\t\t\tlastActiveInterpolant = interpolants[firstInactiveIndex];\n\t\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\t\tinterpolants[firstInactiveIndex] = interpolant;\n\t\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\t\tinterpolants[prevIndex] = lastActiveInterpolant;\n\t\t},\n\t\t_controlInterpolantsResultBuffer: new Float32Array(1),\n\t\t// return an action for a clip optionally using a custom root target\n\t\t// object (this method allocates a lot of dynamic memory in case a\n\t\t// previously unknown clip/root combination is specified)\n\t\tclipAction: function clipAction(clip, optionalRoot, blendMode) {\n\t\t\tvar root = optionalRoot || this._root,\n\t\t\t\t\trootUuid = root.uuid;\n\t\t\tvar clipObject = typeof clip === 'string' ? AnimationClip.findByName(root, clip) : clip;\n\t\t\tvar clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\t\t\tvar actionsForClip = this._actionsByClip[clipUuid];\n\t\t\tvar prototypeAction = null;\n\n\t\t\tif (blendMode === undefined) {\n\t\t\t\tif (clipObject !== null) {\n\t\t\t\t\tblendMode = clipObject.blendMode;\n\t\t\t\t} else {\n\t\t\t\t\tblendMode = NormalAnimationBlendMode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (actionsForClip !== undefined) {\n\t\t\t\tvar existingAction = actionsForClip.actionByRoot[rootUuid];\n\n\t\t\t\tif (existingAction !== undefined && existingAction.blendMode === blendMode) {\n\t\t\t\t\treturn existingAction;\n\t\t\t\t} // we know the clip, so we don't have to parse all\n\t\t\t\t// the bindings again but can just copy\n\n\n\t\t\t\tprototypeAction = actionsForClip.knownActions[0]; // also, take the clip from the prototype action\n\n\t\t\t\tif (clipObject === null) clipObject = prototypeAction._clip;\n\t\t\t} // clip must be known when specified via string\n\n\n\t\t\tif (clipObject === null) return null; // allocate all resources required to run it\n\n\t\t\tvar newAction = new AnimationAction(this, clipObject, optionalRoot, blendMode);\n\n\t\t\tthis._bindAction(newAction, prototypeAction); // and make the action known to the memory manager\n\n\n\t\t\tthis._addInactiveAction(newAction, clipUuid, rootUuid);\n\n\t\t\treturn newAction;\n\t\t},\n\t\t// get an existing action\n\t\texistingAction: function existingAction(clip, optionalRoot) {\n\t\t\tvar root = optionalRoot || this._root,\n\t\t\t\t\trootUuid = root.uuid,\n\t\t\t\t\tclipObject = typeof clip === 'string' ? AnimationClip.findByName(root, clip) : clip,\n\t\t\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\t\t\t\t\tactionsForClip = this._actionsByClip[clipUuid];\n\n\t\t\tif (actionsForClip !== undefined) {\n\t\t\t\treturn actionsForClip.actionByRoot[rootUuid] || null;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\t// deactivates all previously scheduled actions\n\t\tstopAllAction: function stopAllAction() {\n\t\t\tvar actions = this._actions,\n\t\t\t\t\tnActions = this._nActiveActions;\n\n\t\t\tfor (var i = nActions - 1; i >= 0; --i) {\n\t\t\t\tactions[i].stop();\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\t// advance the time and update apply the animation\n\t\tupdate: function update(deltaTime) {\n\t\t\tdeltaTime *= this.timeScale;\n\t\t\tvar actions = this._actions,\n\t\t\t\t\tnActions = this._nActiveActions,\n\t\t\t\t\ttime = this.time += deltaTime,\n\t\t\t\t\ttimeDirection = Math.sign(deltaTime),\n\t\t\t\t\taccuIndex = this._accuIndex ^= 1; // run active actions\n\n\t\t\tfor (var i = 0; i !== nActions; ++i) {\n\t\t\t\tvar action = actions[i];\n\n\t\t\t\taction._update(time, deltaTime, timeDirection, accuIndex);\n\t\t\t} // update scene graph\n\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\t\tnBindings = this._nActiveBindings;\n\n\t\t\tfor (var _i = 0; _i !== nBindings; ++_i) {\n\t\t\t\tbindings[_i].apply(accuIndex);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\t\t// Allows you to seek to a specific time in an animation.\n\t\tsetTime: function setTime(timeInSeconds) {\n\t\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\n\t\t\tfor (var i = 0; i < this._actions.length; i++) {\n\t\t\t\tthis._actions[i].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\t\t\t}\n\n\t\t\treturn this.update(timeInSeconds); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\t\t},\n\t\t// return this mixer's root target object\n\t\tgetRoot: function getRoot() {\n\t\t\treturn this._root;\n\t\t},\n\t\t// free all resources specific to a particular clip\n\t\tuncacheClip: function uncacheClip(clip) {\n\t\t\tvar actions = this._actions,\n\t\t\t\t\tclipUuid = clip.uuid,\n\t\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\t\tactionsForClip = actionsByClip[clipUuid];\n\n\t\t\tif (actionsForClip !== undefined) {\n\t\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t\t// iteration state and also require updating the state we can\n\t\t\t\t// just throw away\n\t\t\t\tvar actionsToRemove = actionsForClip.knownActions;\n\n\t\t\t\tfor (var i = 0, n = actionsToRemove.length; i !== n; ++i) {\n\t\t\t\t\tvar action = actionsToRemove[i];\n\n\t\t\t\t\tthis._deactivateAction(action);\n\n\t\t\t\t\tvar cacheIndex = action._cacheIndex,\n\t\t\t\t\t\t\tlastInactiveAction = actions[actions.length - 1];\n\t\t\t\t\taction._cacheIndex = null;\n\t\t\t\t\taction._byClipCacheIndex = null;\n\t\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\t\tactions[cacheIndex] = lastInactiveAction;\n\t\t\t\t\tactions.pop();\n\n\t\t\t\t\tthis._removeInactiveBindingsForAction(action);\n\t\t\t\t}\n\n\t\t\t\tdelete actionsByClip[clipUuid];\n\t\t\t}\n\t\t},\n\t\t// free all resources specific to a particular root target object\n\t\tuncacheRoot: function uncacheRoot(root) {\n\t\t\tvar rootUuid = root.uuid,\n\t\t\t\t\tactionsByClip = this._actionsByClip;\n\n\t\t\tfor (var clipUuid in actionsByClip) {\n\t\t\t\tvar actionByRoot = actionsByClip[clipUuid].actionByRoot,\n\t\t\t\t\t\taction = actionByRoot[rootUuid];\n\n\t\t\t\tif (action !== undefined) {\n\t\t\t\t\tthis._deactivateAction(action);\n\n\t\t\t\t\tthis._removeInactiveAction(action);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\t\tbindingByName = bindingsByRoot[rootUuid];\n\n\t\t\tif (bindingByName !== undefined) {\n\t\t\t\tfor (var trackName in bindingByName) {\n\t\t\t\t\tvar binding = bindingByName[trackName];\n\t\t\t\t\tbinding.restoreOriginalState();\n\n\t\t\t\t\tthis._removeInactiveBinding(binding);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// remove a targeted clip from the cache\n\t\tuncacheAction: function uncacheAction(clip, optionalRoot) {\n\t\t\tvar action = this.existingAction(clip, optionalRoot);\n\n\t\t\tif (action !== null) {\n\t\t\t\tthis._deactivateAction(action);\n\n\t\t\t\tthis._removeInactiveAction(action);\n\t\t\t}\n\t\t}\n\t});\n\n\tvar Uniform = /*#__PURE__*/function () {\n\t\tfunction Uniform(value) {\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tconsole.warn('THREE.Uniform: Type parameter is no longer needed.');\n\t\t\t\tvalue = arguments[1];\n\t\t\t}\n\n\t\t\tthis.value = value;\n\t\t}\n\n\t\tvar _proto = Uniform.prototype;\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new Uniform(this.value.clone === undefined ? this.value : this.value.clone());\n\t\t};\n\n\t\treturn Uniform;\n\t}();\n\n\tfunction InstancedInterleavedBuffer(array, stride, meshPerAttribute) {\n\t\tInterleavedBuffer.call(this, array, stride);\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\t}\n\n\tInstancedInterleavedBuffer.prototype = Object.assign(Object.create(InterleavedBuffer.prototype), {\n\t\tconstructor: InstancedInterleavedBuffer,\n\t\tisInstancedInterleavedBuffer: true,\n\t\tcopy: function copy(source) {\n\t\t\tInterleavedBuffer.prototype.copy.call(this, source);\n\t\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\t\t\treturn this;\n\t\t},\n\t\tclone: function clone(data) {\n\t\t\tvar ib = InterleavedBuffer.prototype.clone.call(this, data);\n\t\t\tib.meshPerAttribute = this.meshPerAttribute;\n\t\t\treturn ib;\n\t\t},\n\t\ttoJSON: function toJSON(data) {\n\t\t\tvar json = InterleavedBuffer.prototype.toJSON.call(this, data);\n\t\t\tjson.isInstancedInterleavedBuffer = true;\n\t\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\t\t\treturn json;\n\t\t}\n\t});\n\n\tfunction GLBufferAttribute(buffer, type, itemSize, elementSize, count) {\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\t\tthis.version = 0;\n\t}\n\n\tObject.defineProperty(GLBufferAttribute.prototype, 'needsUpdate', {\n\t\tset: function set(value) {\n\t\t\tif (value === true) this.version++;\n\t\t}\n\t});\n\tObject.assign(GLBufferAttribute.prototype, {\n\t\tisGLBufferAttribute: true,\n\t\tsetBuffer: function setBuffer(buffer) {\n\t\t\tthis.buffer = buffer;\n\t\t\treturn this;\n\t\t},\n\t\tsetType: function setType(type, elementSize) {\n\t\t\tthis.type = type;\n\t\t\tthis.elementSize = elementSize;\n\t\t\treturn this;\n\t\t},\n\t\tsetItemSize: function setItemSize(itemSize) {\n\t\t\tthis.itemSize = itemSize;\n\t\t\treturn this;\n\t\t},\n\t\tsetCount: function setCount(count) {\n\t\t\tthis.count = count;\n\t\t\treturn this;\n\t\t}\n\t});\n\n\tfunction Raycaster(origin, direction, near, far) {\n\t\tthis.ray = new Ray(origin, direction); // direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near || 0;\n\t\tthis.far = far || Infinity;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: {\n\t\t\t\tthreshold: 1\n\t\t\t},\n\t\t\tLOD: {},\n\t\t\tPoints: {\n\t\t\t\tthreshold: 1\n\t\t\t},\n\t\t\tSprite: {}\n\t\t};\n\t\tObject.defineProperties(this.params, {\n\t\t\tPointCloud: {\n\t\t\t\tget: function get() {\n\t\t\t\t\tconsole.warn('THREE.Raycaster: params.PointCloud has been renamed to params.Points.');\n\t\t\t\t\treturn this.Points;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction ascSort(a, b) {\n\t\treturn a.distance - b.distance;\n\t}\n\n\tfunction _intersectObject(object, raycaster, intersects, recursive) {\n\t\tif (object.layers.test(raycaster.layers)) {\n\t\t\tobject.raycast(raycaster, intersects);\n\t\t}\n\n\t\tif (recursive === true) {\n\t\t\tvar children = object.children;\n\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t_intersectObject(children[i], raycaster, intersects, true);\n\t\t\t}\n\t\t}\n\t}\n\n\tObject.assign(Raycaster.prototype, {\n\t\tset: function set(origin, direction) {\n\t\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\t\t\tthis.ray.set(origin, direction);\n\t\t},\n\t\tsetFromCamera: function setFromCamera(coords, camera) {\n\t\t\tif (camera && camera.isPerspectiveCamera) {\n\t\t\t\tthis.ray.origin.setFromMatrixPosition(camera.matrixWorld);\n\t\t\t\tthis.ray.direction.set(coords.x, coords.y, 0.5).unproject(camera).sub(this.ray.origin).normalize();\n\t\t\t\tthis.camera = camera;\n\t\t\t} else if (camera && camera.isOrthographicCamera) {\n\t\t\t\tthis.ray.origin.set(coords.x, coords.y, (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera); // set origin in plane of camera\n\n\t\t\t\tthis.ray.direction.set(0, 0, -1).transformDirection(camera.matrixWorld);\n\t\t\t\tthis.camera = camera;\n\t\t\t} else {\n\t\t\t\tconsole.error('THREE.Raycaster: Unsupported camera type: ' + camera.type);\n\t\t\t}\n\t\t},\n\t\tintersectObject: function intersectObject(object, recursive, optionalTarget) {\n\t\t\tvar intersects = optionalTarget || [];\n\n\t\t\t_intersectObject(object, this, intersects, recursive);\n\n\t\t\tintersects.sort(ascSort);\n\t\t\treturn intersects;\n\t\t},\n\t\tintersectObjects: function intersectObjects(objects, recursive, optionalTarget) {\n\t\t\tvar intersects = optionalTarget || [];\n\n\t\t\tif (Array.isArray(objects) === false) {\n\t\t\t\tconsole.warn('THREE.Raycaster.intersectObjects: objects is not an Array.');\n\t\t\t\treturn intersects;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = objects.length; i < l; i++) {\n\t\t\t\t_intersectObject(objects[i], this, intersects, recursive);\n\t\t\t}\n\n\t\t\tintersects.sort(ascSort);\n\t\t\treturn intersects;\n\t\t}\n\t});\n\n\t/**\n\t * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n\t *\n\t * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n\t * The azimuthal angle (theta) is measured from the positive z-axis.\n\t */\n\n\tvar Spherical = /*#__PURE__*/function () {\n\t\tfunction Spherical(radius, phi, theta) {\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 1;\n\t\t\t}\n\n\t\t\tif (phi === void 0) {\n\t\t\t\tphi = 0;\n\t\t\t}\n\n\t\t\tif (theta === void 0) {\n\t\t\t\ttheta = 0;\n\t\t\t}\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.phi = phi; // polar angle\n\n\t\t\tthis.theta = theta; // azimuthal angle\n\n\t\t\treturn this;\n\t\t}\n\n\t\tvar _proto = Spherical.prototype;\n\n\t\t_proto.set = function set(radius, phi, theta) {\n\t\t\tthis.radius = radius;\n\t\t\tthis.phi = phi;\n\t\t\tthis.theta = theta;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(other) {\n\t\t\tthis.radius = other.radius;\n\t\t\tthis.phi = other.phi;\n\t\t\tthis.theta = other.theta;\n\t\t\treturn this;\n\t\t} // restrict phi to be betwee EPS and PI-EPS\n\t\t;\n\n\t\t_proto.makeSafe = function makeSafe() {\n\t\t\tvar EPS = 0.000001;\n\t\t\tthis.phi = Math.max(EPS, Math.min(Math.PI - EPS, this.phi));\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromVector3 = function setFromVector3(v) {\n\t\t\treturn this.setFromCartesianCoords(v.x, v.y, v.z);\n\t\t};\n\n\t\t_proto.setFromCartesianCoords = function setFromCartesianCoords(x, y, z) {\n\t\t\tthis.radius = Math.sqrt(x * x + y * y + z * z);\n\n\t\t\tif (this.radius === 0) {\n\t\t\t\tthis.theta = 0;\n\t\t\t\tthis.phi = 0;\n\t\t\t} else {\n\t\t\t\tthis.theta = Math.atan2(x, z);\n\t\t\t\tthis.phi = Math.acos(MathUtils.clamp(y / this.radius, -1, 1));\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\treturn Spherical;\n\t}();\n\n\t/**\n\t * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n\t */\n\tvar Cylindrical = /*#__PURE__*/function () {\n\t\tfunction Cylindrical(radius, theta, y) {\n\t\t\tthis.radius = radius !== undefined ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\n\t\t\tthis.theta = theta !== undefined ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\n\t\t\tthis.y = y !== undefined ? y : 0; // height above the x-z plane\n\n\t\t\treturn this;\n\t\t}\n\n\t\tvar _proto = Cylindrical.prototype;\n\n\t\t_proto.set = function set(radius, theta, y) {\n\t\t\tthis.radius = radius;\n\t\t\tthis.theta = theta;\n\t\t\tthis.y = y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(other) {\n\t\t\tthis.radius = other.radius;\n\t\t\tthis.theta = other.theta;\n\t\t\tthis.y = other.y;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromVector3 = function setFromVector3(v) {\n\t\t\treturn this.setFromCartesianCoords(v.x, v.y, v.z);\n\t\t};\n\n\t\t_proto.setFromCartesianCoords = function setFromCartesianCoords(x, y, z) {\n\t\t\tthis.radius = Math.sqrt(x * x + z * z);\n\t\t\tthis.theta = Math.atan2(x, z);\n\t\t\tthis.y = y;\n\t\t\treturn this;\n\t\t};\n\n\t\treturn Cylindrical;\n\t}();\n\n\tvar _vector$8 = /*@__PURE__*/new Vector2();\n\n\tvar Box2 = /*#__PURE__*/function () {\n\t\tfunction Box2(min, max) {\n\t\t\tObject.defineProperty(this, 'isBox2', {\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t\tthis.min = min !== undefined ? min : new Vector2(+Infinity, +Infinity);\n\t\t\tthis.max = max !== undefined ? max : new Vector2(-Infinity, -Infinity);\n\t\t}\n\n\t\tvar _proto = Box2.prototype;\n\n\t\t_proto.set = function set(min, max) {\n\t\t\tthis.min.copy(min);\n\t\t\tthis.max.copy(max);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromPoints = function setFromPoints(points) {\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor (var i = 0, il = points.length; i < il; i++) {\n\t\t\t\tthis.expandByPoint(points[i]);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.setFromCenterAndSize = function setFromCenterAndSize(center, size) {\n\t\t\tvar halfSize = _vector$8.copy(size).multiplyScalar(0.5);\n\n\t\t\tthis.min.copy(center).sub(halfSize);\n\t\t\tthis.max.copy(center).add(halfSize);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(box) {\n\t\t\tthis.min.copy(box.min);\n\t\t\tthis.max.copy(box.max);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.makeEmpty = function makeEmpty() {\n\t\t\tthis.min.x = this.min.y = +Infinity;\n\t\t\tthis.max.x = this.max.y = -Infinity;\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.isEmpty = function isEmpty() {\n\t\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\t\t\treturn this.max.x < this.min.x || this.max.y < this.min.y;\n\t\t};\n\n\t\t_proto.getCenter = function getCenter(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Box2: .getCenter() target is now required');\n\t\t\t\ttarget = new Vector2();\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set(0, 0) : target.addVectors(this.min, this.max).multiplyScalar(0.5);\n\t\t};\n\n\t\t_proto.getSize = function getSize(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Box2: .getSize() target is now required');\n\t\t\t\ttarget = new Vector2();\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set(0, 0) : target.subVectors(this.max, this.min);\n\t\t};\n\n\t\t_proto.expandByPoint = function expandByPoint(point) {\n\t\t\tthis.min.min(point);\n\t\t\tthis.max.max(point);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.expandByVector = function expandByVector(vector) {\n\t\t\tthis.min.sub(vector);\n\t\t\tthis.max.add(vector);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.expandByScalar = function expandByScalar(scalar) {\n\t\t\tthis.min.addScalar(-scalar);\n\t\t\tthis.max.addScalar(scalar);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.containsPoint = function containsPoint(point) {\n\t\t\treturn point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y ? false : true;\n\t\t};\n\n\t\t_proto.containsBox = function containsBox(box) {\n\t\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y;\n\t\t};\n\n\t\t_proto.getParameter = function getParameter(point, target) {\n\t\t\t// This can potentially have a divide by zero if the box\n\t\t\t// has a size dimension of 0.\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Box2: .getParameter() target is now required');\n\t\t\t\ttarget = new Vector2();\n\t\t\t}\n\n\t\t\treturn target.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y));\n\t\t};\n\n\t\t_proto.intersectsBox = function intersectsBox(box) {\n\t\t\t// using 4 splitting planes to rule out intersections\n\t\t\treturn box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\t\t};\n\n\t\t_proto.clampPoint = function clampPoint(point, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Box2: .clampPoint() target is now required');\n\t\t\t\ttarget = new Vector2();\n\t\t\t}\n\n\t\t\treturn target.copy(point).clamp(this.min, this.max);\n\t\t};\n\n\t\t_proto.distanceToPoint = function distanceToPoint(point) {\n\t\t\tvar clampedPoint = _vector$8.copy(point).clamp(this.min, this.max);\n\n\t\t\treturn clampedPoint.sub(point).length();\n\t\t};\n\n\t\t_proto.intersect = function intersect(box) {\n\t\t\tthis.min.max(box.min);\n\t\t\tthis.max.min(box.max);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.union = function union(box) {\n\t\t\tthis.min.min(box.min);\n\t\t\tthis.max.max(box.max);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.translate = function translate(offset) {\n\t\t\tthis.min.add(offset);\n\t\t\tthis.max.add(offset);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(box) {\n\t\t\treturn box.min.equals(this.min) && box.max.equals(this.max);\n\t\t};\n\n\t\treturn Box2;\n\t}();\n\n\tvar _startP = /*@__PURE__*/new Vector3();\n\n\tvar _startEnd = /*@__PURE__*/new Vector3();\n\n\tvar Line3 = /*#__PURE__*/function () {\n\t\tfunction Line3(start, end) {\n\t\t\tthis.start = start !== undefined ? start : new Vector3();\n\t\t\tthis.end = end !== undefined ? end : new Vector3();\n\t\t}\n\n\t\tvar _proto = Line3.prototype;\n\n\t\t_proto.set = function set(start, end) {\n\t\t\tthis.start.copy(start);\n\t\t\tthis.end.copy(end);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.clone = function clone() {\n\t\t\treturn new this.constructor().copy(this);\n\t\t};\n\n\t\t_proto.copy = function copy(line) {\n\t\t\tthis.start.copy(line.start);\n\t\t\tthis.end.copy(line.end);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.getCenter = function getCenter(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Line3: .getCenter() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn target.addVectors(this.start, this.end).multiplyScalar(0.5);\n\t\t};\n\n\t\t_proto.delta = function delta(target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Line3: .delta() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn target.subVectors(this.end, this.start);\n\t\t};\n\n\t\t_proto.distanceSq = function distanceSq() {\n\t\t\treturn this.start.distanceToSquared(this.end);\n\t\t};\n\n\t\t_proto.distance = function distance() {\n\t\t\treturn this.start.distanceTo(this.end);\n\t\t};\n\n\t\t_proto.at = function at(t, target) {\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Line3: .at() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn this.delta(target).multiplyScalar(t).add(this.start);\n\t\t};\n\n\t\t_proto.closestPointToPointParameter = function closestPointToPointParameter(point, clampToLine) {\n\t\t\t_startP.subVectors(point, this.start);\n\n\t\t\t_startEnd.subVectors(this.end, this.start);\n\n\t\t\tvar startEnd2 = _startEnd.dot(_startEnd);\n\n\t\t\tvar startEnd_startP = _startEnd.dot(_startP);\n\n\t\t\tvar t = startEnd_startP / startEnd2;\n\n\t\t\tif (clampToLine) {\n\t\t\t\tt = MathUtils.clamp(t, 0, 1);\n\t\t\t}\n\n\t\t\treturn t;\n\t\t};\n\n\t\t_proto.closestPointToPoint = function closestPointToPoint(point, clampToLine, target) {\n\t\t\tvar t = this.closestPointToPointParameter(point, clampToLine);\n\n\t\t\tif (target === undefined) {\n\t\t\t\tconsole.warn('THREE.Line3: .closestPointToPoint() target is now required');\n\t\t\t\ttarget = new Vector3();\n\t\t\t}\n\n\t\t\treturn this.delta(target).multiplyScalar(t).add(this.start);\n\t\t};\n\n\t\t_proto.applyMatrix4 = function applyMatrix4(matrix) {\n\t\t\tthis.start.applyMatrix4(matrix);\n\t\t\tthis.end.applyMatrix4(matrix);\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.equals = function equals(line) {\n\t\t\treturn line.start.equals(this.start) && line.end.equals(this.end);\n\t\t};\n\n\t\treturn Line3;\n\t}();\n\n\tfunction ImmediateRenderObject(material) {\n\t\tObject3D.call(this);\n\t\tthis.material = material;\n\n\t\tthis.render = function ()\n\t\t/* renderCallback */\n\t\t{};\n\n\t\tthis.hasPositions = false;\n\t\tthis.hasNormals = false;\n\t\tthis.hasColors = false;\n\t\tthis.hasUvs = false;\n\t\tthis.positionArray = null;\n\t\tthis.normalArray = null;\n\t\tthis.colorArray = null;\n\t\tthis.uvArray = null;\n\t\tthis.count = 0;\n\t}\n\n\tImmediateRenderObject.prototype = Object.create(Object3D.prototype);\n\tImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\tImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n\tvar _vector$9 = /*@__PURE__*/new Vector3();\n\n\tvar SpotLightHelper = /*#__PURE__*/function (_Object3D) {\n\t\t_inheritsLoose(SpotLightHelper, _Object3D);\n\n\t\tfunction SpotLightHelper(light, color) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Object3D.call(this) || this;\n\t\t\t_this.light = light;\n\n\t\t\t_this.light.updateMatrixWorld();\n\n\t\t\t_this.matrix = light.matrixWorld;\n\t\t\t_this.matrixAutoUpdate = false;\n\t\t\t_this.color = color;\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tvar positions = [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, -1, 1];\n\n\t\t\tfor (var i = 0, j = 1, l = 32; i < l; i++, j++) {\n\t\t\t\tvar p1 = i / l * Math.PI * 2;\n\t\t\t\tvar p2 = j / l * Math.PI * 2;\n\t\t\t\tpositions.push(Math.cos(p1), Math.sin(p1), 1, Math.cos(p2), Math.sin(p2), 1);\n\t\t\t}\n\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\n\t\t\tvar material = new LineBasicMaterial({\n\t\t\t\tfog: false,\n\t\t\t\ttoneMapped: false\n\t\t\t});\n\t\t\t_this.cone = new LineSegments(geometry, material);\n\n\t\t\t_this.add(_this.cone);\n\n\t\t\t_this.update();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = SpotLightHelper.prototype;\n\n\t\t_proto.dispose = function dispose() {\n\t\t\tthis.cone.geometry.dispose();\n\t\t\tthis.cone.material.dispose();\n\t\t};\n\n\t\t_proto.update = function update() {\n\t\t\tthis.light.updateMatrixWorld();\n\t\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\t\tvar coneWidth = coneLength * Math.tan(this.light.angle);\n\t\t\tthis.cone.scale.set(coneWidth, coneWidth, coneLength);\n\n\t\t\t_vector$9.setFromMatrixPosition(this.light.target.matrixWorld);\n\n\t\t\tthis.cone.lookAt(_vector$9);\n\n\t\t\tif (this.color !== undefined) {\n\t\t\t\tthis.cone.material.color.set(this.color);\n\t\t\t} else {\n\t\t\t\tthis.cone.material.color.copy(this.light.color);\n\t\t\t}\n\t\t};\n\n\t\treturn SpotLightHelper;\n\t}(Object3D);\n\n\tvar _vector$a = /*@__PURE__*/new Vector3();\n\n\tvar _boneMatrix = /*@__PURE__*/new Matrix4();\n\n\tvar _matrixWorldInv = /*@__PURE__*/new Matrix4();\n\n\tvar SkeletonHelper = /*#__PURE__*/function (_LineSegments) {\n\t\t_inheritsLoose(SkeletonHelper, _LineSegments);\n\n\t\tfunction SkeletonHelper(object) {\n\t\t\tvar _this;\n\n\t\t\tvar bones = getBoneList(object);\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tvar vertices = [];\n\t\t\tvar colors = [];\n\t\t\tvar color1 = new Color(0, 0, 1);\n\t\t\tvar color2 = new Color(0, 1, 0);\n\n\t\t\tfor (var i = 0; i < bones.length; i++) {\n\t\t\t\tvar bone = bones[i];\n\n\t\t\t\tif (bone.parent && bone.parent.isBone) {\n\t\t\t\t\tvertices.push(0, 0, 0);\n\t\t\t\t\tvertices.push(0, 0, 0);\n\t\t\t\t\tcolors.push(color1.r, color1.g, color1.b);\n\t\t\t\t\tcolors.push(color2.r, color2.g, color2.b);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\t\tgeometry.setAttribute('color', new Float32BufferAttribute(colors, 3));\n\t\t\tvar material = new LineBasicMaterial({\n\t\t\t\tvertexColors: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tdepthWrite: false,\n\t\t\t\ttoneMapped: false,\n\t\t\t\ttransparent: true\n\t\t\t});\n\t\t\t_this = _LineSegments.call(this, geometry, material) || this;\n\t\t\t_this.type = 'SkeletonHelper';\n\t\t\t_this.isSkeletonHelper = true;\n\t\t\t_this.root = object;\n\t\t\t_this.bones = bones;\n\t\t\t_this.matrix = object.matrixWorld;\n\t\t\t_this.matrixAutoUpdate = false;\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = SkeletonHelper.prototype;\n\n\t\t_proto.updateMatrixWorld = function updateMatrixWorld(force) {\n\t\t\tvar bones = this.bones;\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar position = geometry.getAttribute('position');\n\n\t\t\t_matrixWorldInv.copy(this.root.matrixWorld).invert();\n\n\t\t\tfor (var i = 0, j = 0; i < bones.length; i++) {\n\t\t\t\tvar bone = bones[i];\n\n\t\t\t\tif (bone.parent && bone.parent.isBone) {\n\t\t\t\t\t_boneMatrix.multiplyMatrices(_matrixWorldInv, bone.matrixWorld);\n\n\t\t\t\t\t_vector$a.setFromMatrixPosition(_boneMatrix);\n\n\t\t\t\t\tposition.setXYZ(j, _vector$a.x, _vector$a.y, _vector$a.z);\n\n\t\t\t\t\t_boneMatrix.multiplyMatrices(_matrixWorldInv, bone.parent.matrixWorld);\n\n\t\t\t\t\t_vector$a.setFromMatrixPosition(_boneMatrix);\n\n\t\t\t\t\tposition.setXYZ(j + 1, _vector$a.x, _vector$a.y, _vector$a.z);\n\t\t\t\t\tj += 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgeometry.getAttribute('position').needsUpdate = true;\n\n\t\t\t_LineSegments.prototype.updateMatrixWorld.call(this, force);\n\t\t};\n\n\t\treturn SkeletonHelper;\n\t}(LineSegments);\n\n\tfunction getBoneList(object) {\n\t\tvar boneList = [];\n\n\t\tif (object && object.isBone) {\n\t\t\tboneList.push(object);\n\t\t}\n\n\t\tfor (var i = 0; i < object.children.length; i++) {\n\t\t\tboneList.push.apply(boneList, getBoneList(object.children[i]));\n\t\t}\n\n\t\treturn boneList;\n\t}\n\n\tvar PointLightHelper = /*#__PURE__*/function (_Mesh) {\n\t\t_inheritsLoose(PointLightHelper, _Mesh);\n\n\t\tfunction PointLightHelper(light, sphereSize, color) {\n\t\t\tvar _this;\n\n\t\t\tvar geometry = new SphereBufferGeometry(sphereSize, 4, 2);\n\t\t\tvar material = new MeshBasicMaterial({\n\t\t\t\twireframe: true,\n\t\t\t\tfog: false,\n\t\t\t\ttoneMapped: false\n\t\t\t});\n\t\t\t_this = _Mesh.call(this, geometry, material) || this;\n\t\t\t_this.light = light;\n\n\t\t\t_this.light.updateMatrixWorld();\n\n\t\t\t_this.color = color;\n\t\t\t_this.type = 'PointLightHelper';\n\t\t\t_this.matrix = _this.light.matrixWorld;\n\t\t\t_this.matrixAutoUpdate = false;\n\n\t\t\t_this.update();\n\t\t\t/*\n\t\t\t// TODO: delete this comment?\n\t\t\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\t\t\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\t\t\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\t\t\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\t\t\tconst d = light.distance;\n\t\t\tif ( d === 0.0 ) {\n\t\t\t\tthis.lightDistance.visible = false;\n\t\t\t} else {\n\t\t\t\tthis.lightDistance.scale.set( d, d, d );\n\t\t\t}\n\t\t\tthis.add( this.lightDistance );\n\t\t\t*/\n\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = PointLightHelper.prototype;\n\n\t\t_proto.dispose = function dispose() {\n\t\t\tthis.geometry.dispose();\n\t\t\tthis.material.dispose();\n\t\t};\n\n\t\t_proto.update = function update() {\n\t\t\tif (this.color !== undefined) {\n\t\t\t\tthis.material.color.set(this.color);\n\t\t\t} else {\n\t\t\t\tthis.material.color.copy(this.light.color);\n\t\t\t}\n\t\t\t/*\n\t\t\tconst d = this.light.distance;\n\t\t\t\tif ( d === 0.0 ) {\n\t\t\t\t\tthis.lightDistance.visible = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.lightDistance.visible = true;\n\t\t\t\tthis.lightDistance.scale.set( d, d, d );\n\t\t\t\t}\n\t\t\t*/\n\n\t\t};\n\n\t\treturn PointLightHelper;\n\t}(Mesh);\n\n\tvar _vector$b = /*@__PURE__*/new Vector3();\n\n\tvar _color1 = /*@__PURE__*/new Color();\n\n\tvar _color2 = /*@__PURE__*/new Color();\n\n\tvar HemisphereLightHelper = /*#__PURE__*/function (_Object3D) {\n\t\t_inheritsLoose(HemisphereLightHelper, _Object3D);\n\n\t\tfunction HemisphereLightHelper(light, size, color) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Object3D.call(this) || this;\n\t\t\t_this.light = light;\n\n\t\t\t_this.light.updateMatrixWorld();\n\n\t\t\t_this.matrix = light.matrixWorld;\n\t\t\t_this.matrixAutoUpdate = false;\n\t\t\t_this.color = color;\n\t\t\tvar geometry = new OctahedronBufferGeometry(size);\n\t\t\tgeometry.rotateY(Math.PI * 0.5);\n\t\t\t_this.material = new MeshBasicMaterial({\n\t\t\t\twireframe: true,\n\t\t\t\tfog: false,\n\t\t\t\ttoneMapped: false\n\t\t\t});\n\t\t\tif (_this.color === undefined) _this.material.vertexColors = true;\n\t\t\tvar position = geometry.getAttribute('position');\n\t\t\tvar colors = new Float32Array(position.count * 3);\n\t\t\tgeometry.setAttribute('color', new BufferAttribute(colors, 3));\n\n\t\t\t_this.add(new Mesh(geometry, _this.material));\n\n\t\t\t_this.update();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = HemisphereLightHelper.prototype;\n\n\t\t_proto.dispose = function dispose() {\n\t\t\tthis.children[0].geometry.dispose();\n\t\t\tthis.children[0].material.dispose();\n\t\t};\n\n\t\t_proto.update = function update() {\n\t\t\tvar mesh = this.children[0];\n\n\t\t\tif (this.color !== undefined) {\n\t\t\t\tthis.material.color.set(this.color);\n\t\t\t} else {\n\t\t\t\tvar colors = mesh.geometry.getAttribute('color');\n\n\t\t\t\t_color1.copy(this.light.color);\n\n\t\t\t\t_color2.copy(this.light.groundColor);\n\n\t\t\t\tfor (var i = 0, l = colors.count; i < l; i++) {\n\t\t\t\t\tvar color = i < l / 2 ? _color1 : _color2;\n\t\t\t\t\tcolors.setXYZ(i, color.r, color.g, color.b);\n\t\t\t\t}\n\n\t\t\t\tcolors.needsUpdate = true;\n\t\t\t}\n\n\t\t\tmesh.lookAt(_vector$b.setFromMatrixPosition(this.light.matrixWorld).negate());\n\t\t};\n\n\t\treturn HemisphereLightHelper;\n\t}(Object3D);\n\n\tvar GridHelper = /*#__PURE__*/function (_LineSegments) {\n\t\t_inheritsLoose(GridHelper, _LineSegments);\n\n\t\tfunction GridHelper(size, divisions, color1, color2) {\n\t\t\tvar _this;\n\n\t\t\tif (size === void 0) {\n\t\t\t\tsize = 10;\n\t\t\t}\n\n\t\t\tif (divisions === void 0) {\n\t\t\t\tdivisions = 10;\n\t\t\t}\n\n\t\t\tif (color1 === void 0) {\n\t\t\t\tcolor1 = 0x444444;\n\t\t\t}\n\n\t\t\tif (color2 === void 0) {\n\t\t\t\tcolor2 = 0x888888;\n\t\t\t}\n\n\t\t\tcolor1 = new Color(color1);\n\t\t\tcolor2 = new Color(color2);\n\t\t\tvar center = divisions / 2;\n\t\t\tvar step = size / divisions;\n\t\t\tvar halfSize = size / 2;\n\t\t\tvar vertices = [],\n\t\t\t\t\tcolors = [];\n\n\t\t\tfor (var i = 0, j = 0, k = -halfSize; i <= divisions; i++, k += step) {\n\t\t\t\tvertices.push(-halfSize, 0, k, halfSize, 0, k);\n\t\t\t\tvertices.push(k, 0, -halfSize, k, 0, halfSize);\n\t\t\t\tvar color = i === center ? color1 : color2;\n\t\t\t\tcolor.toArray(colors, j);\n\t\t\t\tj += 3;\n\t\t\t\tcolor.toArray(colors, j);\n\t\t\t\tj += 3;\n\t\t\t\tcolor.toArray(colors, j);\n\t\t\t\tj += 3;\n\t\t\t\tcolor.toArray(colors, j);\n\t\t\t\tj += 3;\n\t\t\t}\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\t\tgeometry.setAttribute('color', new Float32BufferAttribute(colors, 3));\n\t\t\tvar material = new LineBasicMaterial({\n\t\t\t\tvertexColors: true,\n\t\t\t\ttoneMapped: false\n\t\t\t});\n\t\t\t_this = _LineSegments.call(this, geometry, material) || this;\n\t\t\t_this.type = 'GridHelper';\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn GridHelper;\n\t}(LineSegments);\n\n\tvar PolarGridHelper = /*#__PURE__*/function (_LineSegments) {\n\t\t_inheritsLoose(PolarGridHelper, _LineSegments);\n\n\t\tfunction PolarGridHelper(radius, radials, circles, divisions, color1, color2) {\n\t\t\tvar _this;\n\n\t\t\tif (radius === void 0) {\n\t\t\t\tradius = 10;\n\t\t\t}\n\n\t\t\tif (radials === void 0) {\n\t\t\t\tradials = 16;\n\t\t\t}\n\n\t\t\tif (circles === void 0) {\n\t\t\t\tcircles = 8;\n\t\t\t}\n\n\t\t\tif (divisions === void 0) {\n\t\t\t\tdivisions = 64;\n\t\t\t}\n\n\t\t\tif (color1 === void 0) {\n\t\t\t\tcolor1 = 0x444444;\n\t\t\t}\n\n\t\t\tif (color2 === void 0) {\n\t\t\t\tcolor2 = 0x888888;\n\t\t\t}\n\n\t\t\tcolor1 = new Color(color1);\n\t\t\tcolor2 = new Color(color2);\n\t\t\tvar vertices = [];\n\t\t\tvar colors = []; // create the radials\n\n\t\t\tfor (var i = 0; i <= radials; i++) {\n\t\t\t\tvar v = i / radials * (Math.PI * 2);\n\t\t\t\tvar x = Math.sin(v) * radius;\n\t\t\t\tvar z = Math.cos(v) * radius;\n\t\t\t\tvertices.push(0, 0, 0);\n\t\t\t\tvertices.push(x, 0, z);\n\t\t\t\tvar color = i & 1 ? color1 : color2;\n\t\t\t\tcolors.push(color.r, color.g, color.b);\n\t\t\t\tcolors.push(color.r, color.g, color.b);\n\t\t\t} // create the circles\n\n\n\t\t\tfor (var _i = 0; _i <= circles; _i++) {\n\t\t\t\tvar _color = _i & 1 ? color1 : color2;\n\n\t\t\t\tvar r = radius - radius / circles * _i;\n\n\t\t\t\tfor (var j = 0; j < divisions; j++) {\n\t\t\t\t\t// first vertex\n\t\t\t\t\tvar _v = j / divisions * (Math.PI * 2);\n\n\t\t\t\t\tvar _x = Math.sin(_v) * r;\n\n\t\t\t\t\tvar _z = Math.cos(_v) * r;\n\n\t\t\t\t\tvertices.push(_x, 0, _z);\n\t\t\t\t\tcolors.push(_color.r, _color.g, _color.b); // second vertex\n\n\t\t\t\t\t_v = (j + 1) / divisions * (Math.PI * 2);\n\t\t\t\t\t_x = Math.sin(_v) * r;\n\t\t\t\t\t_z = Math.cos(_v) * r;\n\t\t\t\t\tvertices.push(_x, 0, _z);\n\t\t\t\t\tcolors.push(_color.r, _color.g, _color.b);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\t\tgeometry.setAttribute('color', new Float32BufferAttribute(colors, 3));\n\t\t\tvar material = new LineBasicMaterial({\n\t\t\t\tvertexColors: true,\n\t\t\t\ttoneMapped: false\n\t\t\t});\n\t\t\t_this = _LineSegments.call(this, geometry, material) || this;\n\t\t\t_this.type = 'PolarGridHelper';\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn PolarGridHelper;\n\t}(LineSegments);\n\n\tvar _v1$6 = /*@__PURE__*/new Vector3();\n\n\tvar _v2$3 = /*@__PURE__*/new Vector3();\n\n\tvar _v3$1 = /*@__PURE__*/new Vector3();\n\n\tvar DirectionalLightHelper = /*#__PURE__*/function (_Object3D) {\n\t\t_inheritsLoose(DirectionalLightHelper, _Object3D);\n\n\t\tfunction DirectionalLightHelper(light, size, color) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Object3D.call(this) || this;\n\t\t\t_this.light = light;\n\n\t\t\t_this.light.updateMatrixWorld();\n\n\t\t\t_this.matrix = light.matrixWorld;\n\t\t\t_this.matrixAutoUpdate = false;\n\t\t\t_this.color = color;\n\t\t\tif (size === undefined) size = 1;\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute([-size, size, 0, size, size, 0, size, -size, 0, -size, -size, 0, -size, size, 0], 3));\n\t\t\tvar material = new LineBasicMaterial({\n\t\t\t\tfog: false,\n\t\t\t\ttoneMapped: false\n\t\t\t});\n\t\t\t_this.lightPlane = new Line(geometry, material);\n\n\t\t\t_this.add(_this.lightPlane);\n\n\t\t\tgeometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 0, 1], 3));\n\t\t\t_this.targetLine = new Line(geometry, material);\n\n\t\t\t_this.add(_this.targetLine);\n\n\t\t\t_this.update();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = DirectionalLightHelper.prototype;\n\n\t\t_proto.dispose = function dispose() {\n\t\t\tthis.lightPlane.geometry.dispose();\n\t\t\tthis.lightPlane.material.dispose();\n\t\t\tthis.targetLine.geometry.dispose();\n\t\t\tthis.targetLine.material.dispose();\n\t\t};\n\n\t\t_proto.update = function update() {\n\t\t\t_v1$6.setFromMatrixPosition(this.light.matrixWorld);\n\n\t\t\t_v2$3.setFromMatrixPosition(this.light.target.matrixWorld);\n\n\t\t\t_v3$1.subVectors(_v2$3, _v1$6);\n\n\t\t\tthis.lightPlane.lookAt(_v2$3);\n\n\t\t\tif (this.color !== undefined) {\n\t\t\t\tthis.lightPlane.material.color.set(this.color);\n\t\t\t\tthis.targetLine.material.color.set(this.color);\n\t\t\t} else {\n\t\t\t\tthis.lightPlane.material.color.copy(this.light.color);\n\t\t\t\tthis.targetLine.material.color.copy(this.light.color);\n\t\t\t}\n\n\t\t\tthis.targetLine.lookAt(_v2$3);\n\t\t\tthis.targetLine.scale.z = _v3$1.length();\n\t\t};\n\n\t\treturn DirectionalLightHelper;\n\t}(Object3D);\n\n\tvar _vector$c = /*@__PURE__*/new Vector3();\n\n\tvar _camera = /*@__PURE__*/new Camera();\n\t/**\n\t *\t- shows frustum, line of sight and up of the camera\n\t *\t- suitable for fast updates\n\t * \t- based on frustum visualization in lightgl.js shadowmap example\n\t *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n\t */\n\n\n\tvar CameraHelper = /*#__PURE__*/function (_LineSegments) {\n\t\t_inheritsLoose(CameraHelper, _LineSegments);\n\n\t\tfunction CameraHelper(camera) {\n\t\t\tvar _this;\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tvar material = new LineBasicMaterial({\n\t\t\t\tcolor: 0xffffff,\n\t\t\t\tvertexColors: true,\n\t\t\t\ttoneMapped: false\n\t\t\t});\n\t\t\tvar vertices = [];\n\t\t\tvar colors = [];\n\t\t\tvar pointMap = {}; // colors\n\n\t\t\tvar colorFrustum = new Color(0xffaa00);\n\t\t\tvar colorCone = new Color(0xff0000);\n\t\t\tvar colorUp = new Color(0x00aaff);\n\t\t\tvar colorTarget = new Color(0xffffff);\n\t\t\tvar colorCross = new Color(0x333333); // near\n\n\t\t\taddLine('n1', 'n2', colorFrustum);\n\t\t\taddLine('n2', 'n4', colorFrustum);\n\t\t\taddLine('n4', 'n3', colorFrustum);\n\t\t\taddLine('n3', 'n1', colorFrustum); // far\n\n\t\t\taddLine('f1', 'f2', colorFrustum);\n\t\t\taddLine('f2', 'f4', colorFrustum);\n\t\t\taddLine('f4', 'f3', colorFrustum);\n\t\t\taddLine('f3', 'f1', colorFrustum); // sides\n\n\t\t\taddLine('n1', 'f1', colorFrustum);\n\t\t\taddLine('n2', 'f2', colorFrustum);\n\t\t\taddLine('n3', 'f3', colorFrustum);\n\t\t\taddLine('n4', 'f4', colorFrustum); // cone\n\n\t\t\taddLine('p', 'n1', colorCone);\n\t\t\taddLine('p', 'n2', colorCone);\n\t\t\taddLine('p', 'n3', colorCone);\n\t\t\taddLine('p', 'n4', colorCone); // up\n\n\t\t\taddLine('u1', 'u2', colorUp);\n\t\t\taddLine('u2', 'u3', colorUp);\n\t\t\taddLine('u3', 'u1', colorUp); // target\n\n\t\t\taddLine('c', 't', colorTarget);\n\t\t\taddLine('p', 'c', colorCross); // cross\n\n\t\t\taddLine('cn1', 'cn2', colorCross);\n\t\t\taddLine('cn3', 'cn4', colorCross);\n\t\t\taddLine('cf1', 'cf2', colorCross);\n\t\t\taddLine('cf3', 'cf4', colorCross);\n\n\t\t\tfunction addLine(a, b, color) {\n\t\t\t\taddPoint(a, color);\n\t\t\t\taddPoint(b, color);\n\t\t\t}\n\n\t\t\tfunction addPoint(id, color) {\n\t\t\t\tvertices.push(0, 0, 0);\n\t\t\t\tcolors.push(color.r, color.g, color.b);\n\n\t\t\t\tif (pointMap[id] === undefined) {\n\t\t\t\t\tpointMap[id] = [];\n\t\t\t\t}\n\n\t\t\t\tpointMap[id].push(vertices.length / 3 - 1);\n\t\t\t}\n\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\t\tgeometry.setAttribute('color', new Float32BufferAttribute(colors, 3));\n\t\t\t_this = _LineSegments.call(this, geometry, material) || this;\n\t\t\t_this.type = 'CameraHelper';\n\t\t\t_this.camera = camera;\n\t\t\tif (_this.camera.updateProjectionMatrix) _this.camera.updateProjectionMatrix();\n\t\t\t_this.matrix = camera.matrixWorld;\n\t\t\t_this.matrixAutoUpdate = false;\n\t\t\t_this.pointMap = pointMap;\n\n\t\t\t_this.update();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = CameraHelper.prototype;\n\n\t\t_proto.update = function update() {\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar pointMap = this.pointMap;\n\t\t\tvar w = 1,\n\t\t\t\t\th = 1; // we need just camera projection matrix inverse\n\t\t\t// world matrix must be identity\n\n\t\t\t_camera.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse); // center / target\n\n\n\t\t\tsetPoint('c', pointMap, geometry, _camera, 0, 0, -1);\n\t\t\tsetPoint('t', pointMap, geometry, _camera, 0, 0, 1); // near\n\n\t\t\tsetPoint('n1', pointMap, geometry, _camera, -w, -h, -1);\n\t\t\tsetPoint('n2', pointMap, geometry, _camera, w, -h, -1);\n\t\t\tsetPoint('n3', pointMap, geometry, _camera, -w, h, -1);\n\t\t\tsetPoint('n4', pointMap, geometry, _camera, w, h, -1); // far\n\n\t\t\tsetPoint('f1', pointMap, geometry, _camera, -w, -h, 1);\n\t\t\tsetPoint('f2', pointMap, geometry, _camera, w, -h, 1);\n\t\t\tsetPoint('f3', pointMap, geometry, _camera, -w, h, 1);\n\t\t\tsetPoint('f4', pointMap, geometry, _camera, w, h, 1); // up\n\n\t\t\tsetPoint('u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, -1);\n\t\t\tsetPoint('u2', pointMap, geometry, _camera, -w * 0.7, h * 1.1, -1);\n\t\t\tsetPoint('u3', pointMap, geometry, _camera, 0, h * 2, -1); // cross\n\n\t\t\tsetPoint('cf1', pointMap, geometry, _camera, -w, 0, 1);\n\t\t\tsetPoint('cf2', pointMap, geometry, _camera, w, 0, 1);\n\t\t\tsetPoint('cf3', pointMap, geometry, _camera, 0, -h, 1);\n\t\t\tsetPoint('cf4', pointMap, geometry, _camera, 0, h, 1);\n\t\t\tsetPoint('cn1', pointMap, geometry, _camera, -w, 0, -1);\n\t\t\tsetPoint('cn2', pointMap, geometry, _camera, w, 0, -1);\n\t\t\tsetPoint('cn3', pointMap, geometry, _camera, 0, -h, -1);\n\t\t\tsetPoint('cn4', pointMap, geometry, _camera, 0, h, -1);\n\t\t\tgeometry.getAttribute('position').needsUpdate = true;\n\t\t};\n\n\t\treturn CameraHelper;\n\t}(LineSegments);\n\n\tfunction setPoint(point, pointMap, geometry, camera, x, y, z) {\n\t\t_vector$c.set(x, y, z).unproject(camera);\n\n\t\tvar points = pointMap[point];\n\n\t\tif (points !== undefined) {\n\t\t\tvar position = geometry.getAttribute('position');\n\n\t\t\tfor (var i = 0, l = points.length; i < l; i++) {\n\t\t\t\tposition.setXYZ(points[i], _vector$c.x, _vector$c.y, _vector$c.z);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar _box$3 = /*@__PURE__*/new Box3();\n\n\tvar BoxHelper = /*#__PURE__*/function (_LineSegments) {\n\t\t_inheritsLoose(BoxHelper, _LineSegments);\n\n\t\tfunction BoxHelper(object, color) {\n\t\t\tvar _this;\n\n\t\t\tif (color === void 0) {\n\t\t\t\tcolor = 0xffff00;\n\t\t\t}\n\n\t\t\tvar indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]);\n\t\t\tvar positions = new Float32Array(8 * 3);\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex(new BufferAttribute(indices, 1));\n\t\t\tgeometry.setAttribute('position', new BufferAttribute(positions, 3));\n\t\t\t_this = _LineSegments.call(this, geometry, new LineBasicMaterial({\n\t\t\t\tcolor: color,\n\t\t\t\ttoneMapped: false\n\t\t\t})) || this;\n\t\t\t_this.object = object;\n\t\t\t_this.type = 'BoxHelper';\n\t\t\t_this.matrixAutoUpdate = false;\n\n\t\t\t_this.update();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = BoxHelper.prototype;\n\n\t\t_proto.update = function update(object) {\n\t\t\tif (object !== undefined) {\n\t\t\t\tconsole.warn('THREE.BoxHelper: .update() has no longer arguments.');\n\t\t\t}\n\n\t\t\tif (this.object !== undefined) {\n\t\t\t\t_box$3.setFromObject(this.object);\n\t\t\t}\n\n\t\t\tif (_box$3.isEmpty()) return;\n\t\t\tvar min = _box$3.min;\n\t\t\tvar max = _box$3.max;\n\t\t\t/*\n\t\t\t\t5____4\n\t\t\t1/___0/|\n\t\t\t| 6__|_7\n\t\t\t2/___3/\n\t\t\t\t0: max.x, max.y, max.z\n\t\t\t1: min.x, max.y, max.z\n\t\t\t2: min.x, min.y, max.z\n\t\t\t3: max.x, min.y, max.z\n\t\t\t4: max.x, max.y, min.z\n\t\t\t5: min.x, max.y, min.z\n\t\t\t6: min.x, min.y, min.z\n\t\t\t7: max.x, min.y, min.z\n\t\t\t*/\n\n\t\t\tvar position = this.geometry.attributes.position;\n\t\t\tvar array = position.array;\n\t\t\tarray[0] = max.x;\n\t\t\tarray[1] = max.y;\n\t\t\tarray[2] = max.z;\n\t\t\tarray[3] = min.x;\n\t\t\tarray[4] = max.y;\n\t\t\tarray[5] = max.z;\n\t\t\tarray[6] = min.x;\n\t\t\tarray[7] = min.y;\n\t\t\tarray[8] = max.z;\n\t\t\tarray[9] = max.x;\n\t\t\tarray[10] = min.y;\n\t\t\tarray[11] = max.z;\n\t\t\tarray[12] = max.x;\n\t\t\tarray[13] = max.y;\n\t\t\tarray[14] = min.z;\n\t\t\tarray[15] = min.x;\n\t\t\tarray[16] = max.y;\n\t\t\tarray[17] = min.z;\n\t\t\tarray[18] = min.x;\n\t\t\tarray[19] = min.y;\n\t\t\tarray[20] = min.z;\n\t\t\tarray[21] = max.x;\n\t\t\tarray[22] = min.y;\n\t\t\tarray[23] = min.z;\n\t\t\tposition.needsUpdate = true;\n\t\t\tthis.geometry.computeBoundingSphere();\n\t\t};\n\n\t\t_proto.setFromObject = function setFromObject(object) {\n\t\t\tthis.object = object;\n\t\t\tthis.update();\n\t\t\treturn this;\n\t\t};\n\n\t\t_proto.copy = function copy(source) {\n\t\t\tLineSegments.prototype.copy.call(this, source);\n\t\t\tthis.object = source.object;\n\t\t\treturn this;\n\t\t};\n\n\t\treturn BoxHelper;\n\t}(LineSegments);\n\n\tvar Box3Helper = /*#__PURE__*/function (_LineSegments) {\n\t\t_inheritsLoose(Box3Helper, _LineSegments);\n\n\t\tfunction Box3Helper(box, color) {\n\t\t\tvar _this;\n\n\t\t\tif (color === void 0) {\n\t\t\t\tcolor = 0xffff00;\n\t\t\t}\n\n\t\t\tvar indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]);\n\t\t\tvar positions = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1];\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex(new BufferAttribute(indices, 1));\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\n\t\t\t_this = _LineSegments.call(this, geometry, new LineBasicMaterial({\n\t\t\t\tcolor: color,\n\t\t\t\ttoneMapped: false\n\t\t\t})) || this;\n\t\t\t_this.box = box;\n\t\t\t_this.type = 'Box3Helper';\n\n\t\t\t_this.geometry.computeBoundingSphere();\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = Box3Helper.prototype;\n\n\t\t_proto.updateMatrixWorld = function updateMatrixWorld(force) {\n\t\t\tvar box = this.box;\n\t\t\tif (box.isEmpty()) return;\n\t\t\tbox.getCenter(this.position);\n\t\t\tbox.getSize(this.scale);\n\t\t\tthis.scale.multiplyScalar(0.5);\n\n\t\t\t_LineSegments.prototype.updateMatrixWorld.call(this, force);\n\t\t};\n\n\t\treturn Box3Helper;\n\t}(LineSegments);\n\n\tvar PlaneHelper = /*#__PURE__*/function (_Line) {\n\t\t_inheritsLoose(PlaneHelper, _Line);\n\n\t\tfunction PlaneHelper(plane, size, hex) {\n\t\t\tvar _this;\n\n\t\t\tif (size === void 0) {\n\t\t\t\tsize = 1;\n\t\t\t}\n\n\t\t\tif (hex === void 0) {\n\t\t\t\thex = 0xffff00;\n\t\t\t}\n\n\t\t\tvar color = hex;\n\t\t\tvar positions = [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, 1, 0, 0, 0];\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\n\t\t\tgeometry.computeBoundingSphere();\n\t\t\t_this = _Line.call(this, geometry, new LineBasicMaterial({\n\t\t\t\tcolor: color,\n\t\t\t\ttoneMapped: false\n\t\t\t})) || this;\n\t\t\t_this.type = 'PlaneHelper';\n\t\t\t_this.plane = plane;\n\t\t\t_this.size = size;\n\t\t\tvar positions2 = [1, 1, 1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1];\n\t\t\tvar geometry2 = new BufferGeometry();\n\t\t\tgeometry2.setAttribute('position', new Float32BufferAttribute(positions2, 3));\n\t\t\tgeometry2.computeBoundingSphere();\n\n\t\t\t_this.add(new Mesh(geometry2, new MeshBasicMaterial({\n\t\t\t\tcolor: color,\n\t\t\t\topacity: 0.2,\n\t\t\t\ttransparent: true,\n\t\t\t\tdepthWrite: false,\n\t\t\t\ttoneMapped: false\n\t\t\t})));\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = PlaneHelper.prototype;\n\n\t\t_proto.updateMatrixWorld = function updateMatrixWorld(force) {\n\t\t\tvar scale = -this.plane.constant;\n\t\t\tif (Math.abs(scale) < 1e-8) scale = 1e-8; // sign does not matter\n\n\t\t\tthis.scale.set(0.5 * this.size, 0.5 * this.size, scale);\n\t\t\tthis.children[0].material.side = scale < 0 ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\t\tthis.lookAt(this.plane.normal);\n\n\t\t\t_Line.prototype.updateMatrixWorld.call(this, force);\n\t\t};\n\n\t\treturn PlaneHelper;\n\t}(Line);\n\n\tvar _axis = /*@__PURE__*/new Vector3();\n\n\tvar _lineGeometry, _coneGeometry;\n\n\tvar ArrowHelper = /*#__PURE__*/function (_Object3D) {\n\t\t_inheritsLoose(ArrowHelper, _Object3D);\n\n\t\tfunction ArrowHelper(dir, origin, length, color, headLength, headWidth) {\n\t\t\tvar _this;\n\n\t\t\t_this = _Object3D.call(this) || this; // dir is assumed to be normalized\n\n\t\t\t_this.type = 'ArrowHelper';\n\t\t\tif (dir === undefined) dir = new Vector3(0, 0, 1);\n\t\t\tif (origin === undefined) origin = new Vector3(0, 0, 0);\n\t\t\tif (length === undefined) length = 1;\n\t\t\tif (color === undefined) color = 0xffff00;\n\t\t\tif (headLength === undefined) headLength = 0.2 * length;\n\t\t\tif (headWidth === undefined) headWidth = 0.2 * headLength;\n\n\t\t\tif (_lineGeometry === undefined) {\n\t\t\t\t_lineGeometry = new BufferGeometry();\n\n\t\t\t\t_lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3));\n\n\t\t\t\t_coneGeometry = new CylinderBufferGeometry(0, 0.5, 1, 5, 1);\n\n\t\t\t\t_coneGeometry.translate(0, -0.5, 0);\n\t\t\t}\n\n\t\t\t_this.position.copy(origin);\n\n\t\t\t_this.line = new Line(_lineGeometry, new LineBasicMaterial({\n\t\t\t\tcolor: color,\n\t\t\t\ttoneMapped: false\n\t\t\t}));\n\t\t\t_this.line.matrixAutoUpdate = false;\n\n\t\t\t_this.add(_this.line);\n\n\t\t\t_this.cone = new Mesh(_coneGeometry, new MeshBasicMaterial({\n\t\t\t\tcolor: color,\n\t\t\t\ttoneMapped: false\n\t\t\t}));\n\t\t\t_this.cone.matrixAutoUpdate = false;\n\n\t\t\t_this.add(_this.cone);\n\n\t\t\t_this.setDirection(dir);\n\n\t\t\t_this.setLength(length, headLength, headWidth);\n\n\t\t\treturn _this;\n\t\t}\n\n\t\tvar _proto = ArrowHelper.prototype;\n\n\t\t_proto.setDirection = function setDirection(dir) {\n\t\t\t// dir is assumed to be normalized\n\t\t\tif (dir.y > 0.99999) {\n\t\t\t\tthis.quaternion.set(0, 0, 0, 1);\n\t\t\t} else if (dir.y < -0.99999) {\n\t\t\t\tthis.quaternion.set(1, 0, 0, 0);\n\t\t\t} else {\n\t\t\t\t_axis.set(dir.z, 0, -dir.x).normalize();\n\n\t\t\t\tvar radians = Math.acos(dir.y);\n\t\t\t\tthis.quaternion.setFromAxisAngle(_axis, radians);\n\t\t\t}\n\t\t};\n\n\t\t_proto.setLength = function setLength(length, headLength, headWidth) {\n\t\t\tif (headLength === undefined) headLength = 0.2 * length;\n\t\t\tif (headWidth === undefined) headWidth = 0.2 * headLength;\n\t\t\tthis.line.scale.set(1, Math.max(0.0001, length - headLength), 1); // see #17458\n\n\t\t\tthis.line.updateMatrix();\n\t\t\tthis.cone.scale.set(headWidth, headLength, headWidth);\n\t\t\tthis.cone.position.y = length;\n\t\t\tthis.cone.updateMatrix();\n\t\t};\n\n\t\t_proto.setColor = function setColor(color) {\n\t\t\tthis.line.material.color.set(color);\n\t\t\tthis.cone.material.color.set(color);\n\t\t};\n\n\t\t_proto.copy = function copy(source) {\n\t\t\t_Object3D.prototype.copy.call(this, source, false);\n\n\t\t\tthis.line.copy(source.line);\n\t\t\tthis.cone.copy(source.cone);\n\t\t\treturn this;\n\t\t};\n\n\t\treturn ArrowHelper;\n\t}(Object3D);\n\n\tvar AxesHelper = /*#__PURE__*/function (_LineSegments) {\n\t\t_inheritsLoose(AxesHelper, _LineSegments);\n\n\t\tfunction AxesHelper(size) {\n\t\t\tvar _this;\n\n\t\t\tif (size === void 0) {\n\t\t\t\tsize = 1;\n\t\t\t}\n\n\t\t\tvar vertices = [0, 0, 0, size, 0, 0, 0, 0, 0, 0, size, 0, 0, 0, 0, 0, 0, size];\n\t\t\tvar colors = [1, 0, 0, 1, 0.6, 0, 0, 1, 0, 0.6, 1, 0, 0, 0, 1, 0, 0.6, 1];\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));\n\t\t\tgeometry.setAttribute('color', new Float32BufferAttribute(colors, 3));\n\t\t\tvar material = new LineBasicMaterial({\n\t\t\t\tvertexColors: true,\n\t\t\t\ttoneMapped: false\n\t\t\t});\n\t\t\t_this = _LineSegments.call(this, geometry, material) || this;\n\t\t\t_this.type = 'AxesHelper';\n\t\t\treturn _this;\n\t\t}\n\n\t\treturn AxesHelper;\n\t}(LineSegments);\n\n\tvar _floatView = new Float32Array(1);\n\n\tvar _int32View = new Int32Array(_floatView.buffer);\n\n\tvar DataUtils = {\n\t\t// Converts float32 to float16 (stored as uint16 value).\n\t\ttoHalfFloat: function toHalfFloat(val) {\n\t\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t\t* by James Tursa?s half-precision code. */\n\t\t\t_floatView[0] = val;\n\t\t\tvar x = _int32View[0];\n\t\t\tvar bits = x >> 16 & 0x8000;\n\t\t\t/* Get the sign */\n\n\t\t\tvar m = x >> 12 & 0x07ff;\n\t\t\t/* Keep one extra bit for rounding */\n\n\t\t\tvar e = x >> 23 & 0xff;\n\t\t\t/* Using int is faster here */\n\n\t\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t\t* half, return signed zero. */\n\n\t\t\tif (e < 103) return bits;\n\t\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\n\t\t\tif (e > 142) {\n\t\t\t\tbits |= 0x7c00;\n\t\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\n\t\t\t\tbits |= (e == 255 ? 0 : 1) && x & 0x007fffff;\n\t\t\t\treturn bits;\n\t\t\t}\n\t\t\t/* If exponent underflows but not too much, return a denormal */\n\n\n\t\t\tif (e < 113) {\n\t\t\t\tm |= 0x0800;\n\t\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t\t* to 1, which is OK. */\n\n\t\t\t\tbits |= (m >> 114 - e) + (m >> 113 - e & 1);\n\t\t\t\treturn bits;\n\t\t\t}\n\n\t\t\tbits |= e - 112 << 10 | m >> 1;\n\t\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t\t* the exponent, which is OK. */\n\n\t\t\tbits += m & 1;\n\t\t\treturn bits;\n\t\t}\n\t};\n\n\tvar _ENCODINGS;\n\tvar LOD_MIN = 4;\n\tvar LOD_MAX = 8;\n\tvar SIZE_MAX = Math.pow(2, LOD_MAX); // The standard deviations (radians) associated with the extra mips. These are\n\t// chosen to approximate a Trowbridge-Reitz distribution function times the\n\t// geometric shadowing function. These sigma values squared must match the\n\t// variance #defines in cube_uv_reflection_fragment.glsl.js.\n\n\tvar EXTRA_LOD_SIGMA = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582];\n\tvar TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; // The maximum length of the blur for loop. Smaller sigmas will use fewer\n\t// samples and exit early, but not recompile the shader.\n\n\tvar MAX_SAMPLES = 20;\n\tvar ENCODINGS = (_ENCODINGS = {}, _ENCODINGS[LinearEncoding] = 0, _ENCODINGS[sRGBEncoding] = 1, _ENCODINGS[RGBEEncoding] = 2, _ENCODINGS[RGBM7Encoding] = 3, _ENCODINGS[RGBM16Encoding] = 4, _ENCODINGS[RGBDEncoding] = 5, _ENCODINGS[GammaEncoding] = 6, _ENCODINGS);\n\n\tvar _flatCamera = /*@__PURE__*/new OrthographicCamera();\n\n\tvar _createPlanes2 = /*@__PURE__*/_createPlanes(),\n\t\t\t_lodPlanes = _createPlanes2._lodPlanes,\n\t\t\t_sizeLods = _createPlanes2._sizeLods,\n\t\t\t_sigmas = _createPlanes2._sigmas;\n\n\tvar _clearColor = /*@__PURE__*/new Color();\n\n\tvar _oldTarget = null; // Golden Ratio\n\n\tvar PHI = (1 + Math.sqrt(5)) / 2;\n\tvar INV_PHI = 1 / PHI; // Vertices of a dodecahedron (except the opposites, which represent the\n\t// same axis), used as axis directions evenly spread on a sphere.\n\n\tvar _axisDirections = [/*@__PURE__*/new Vector3(1, 1, 1), /*@__PURE__*/new Vector3(-1, 1, 1), /*@__PURE__*/new Vector3(1, 1, -1), /*@__PURE__*/new Vector3(-1, 1, -1), /*@__PURE__*/new Vector3(0, PHI, INV_PHI), /*@__PURE__*/new Vector3(0, PHI, -INV_PHI), /*@__PURE__*/new Vector3(INV_PHI, 0, PHI), /*@__PURE__*/new Vector3(-INV_PHI, 0, PHI), /*@__PURE__*/new Vector3(PHI, INV_PHI, 0), /*@__PURE__*/new Vector3(-PHI, INV_PHI, 0)];\n\t/**\n\t * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n\t * (PMREM) from a cubeMap environment texture. This allows different levels of\n\t * blur to be quickly accessed based on material roughness. It is packed into a\n\t * special CubeUV format that allows us to perform custom interpolation so that\n\t * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n\t * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n\t * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n\t * higher roughness levels. In this way we maintain resolution to smoothly\n\t * interpolate diffuse lighting while limiting sampling computation.\n\t */\n\n\tvar PMREMGenerator = /*#__PURE__*/function () {\n\t\tfunction PMREMGenerator(renderer) {\n\t\t\tthis._renderer = renderer;\n\t\t\tthis._pingPongRenderTarget = null;\n\t\t\tthis._blurMaterial = _getBlurShader(MAX_SAMPLES);\n\t\t\tthis._equirectShader = null;\n\t\t\tthis._cubemapShader = null;\n\n\t\t\tthis._compileMaterial(this._blurMaterial);\n\t\t}\n\t\t/**\n\t\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t\t * is placed at the origin).\n\t\t */\n\n\n\t\tvar _proto = PMREMGenerator.prototype;\n\n\t\t_proto.fromScene = function fromScene(scene, sigma, near, far) {\n\t\t\tif (sigma === void 0) {\n\t\t\t\tsigma = 0;\n\t\t\t}\n\n\t\t\tif (near === void 0) {\n\t\t\t\tnear = 0.1;\n\t\t\t}\n\n\t\t\tif (far === void 0) {\n\t\t\t\tfar = 100;\n\t\t\t}\n\n\t\t\t_oldTarget = this._renderer.getRenderTarget();\n\n\t\t\tvar cubeUVRenderTarget = this._allocateTargets();\n\n\t\t\tthis._sceneToCubeUV(scene, near, far, cubeUVRenderTarget);\n\n\t\t\tif (sigma > 0) {\n\t\t\t\tthis._blur(cubeUVRenderTarget, 0, 0, sigma);\n\t\t\t}\n\n\t\t\tthis._applyPMREM(cubeUVRenderTarget);\n\n\t\t\tthis._cleanup(cubeUVRenderTarget);\n\n\t\t\treturn cubeUVRenderTarget;\n\t\t}\n\t\t/**\n\t\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t\t * as this matches best with the 256 x 256 cubemap output.\n\t\t */\n\t\t;\n\n\t\t_proto.fromEquirectangular = function fromEquirectangular(equirectangular) {\n\t\t\treturn this._fromTexture(equirectangular);\n\t\t}\n\t\t/**\n\t\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t\t * as this matches best with the 256 x 256 cubemap output.\n\t\t */\n\t\t;\n\n\t\t_proto.fromCubemap = function fromCubemap(cubemap) {\n\t\t\treturn this._fromTexture(cubemap);\n\t\t}\n\t\t/**\n\t\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t\t * your texture's network fetch for increased concurrency.\n\t\t */\n\t\t;\n\n\t\t_proto.compileCubemapShader = function compileCubemapShader() {\n\t\t\tif (this._cubemapShader === null) {\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t\tthis._compileMaterial(this._cubemapShader);\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t\t * your texture's network fetch for increased concurrency.\n\t\t */\n\t\t;\n\n\t\t_proto.compileEquirectangularShader = function compileEquirectangularShader() {\n\t\t\tif (this._equirectShader === null) {\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t\tthis._compileMaterial(this._equirectShader);\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t\t * one of them will cause any others to also become unusable.\n\t\t */\n\t\t;\n\n\t\t_proto.dispose = function dispose() {\n\t\t\tthis._blurMaterial.dispose();\n\n\t\t\tif (this._cubemapShader !== null) this._cubemapShader.dispose();\n\t\t\tif (this._equirectShader !== null) this._equirectShader.dispose();\n\n\t\t\tfor (var i = 0; i < _lodPlanes.length; i++) {\n\t\t\t\t_lodPlanes[i].dispose();\n\t\t\t}\n\t\t} // private interface\n\t\t;\n\n\t\t_proto._cleanup = function _cleanup(outputTarget) {\n\t\t\tthis._pingPongRenderTarget.dispose();\n\n\t\t\tthis._renderer.setRenderTarget(_oldTarget);\n\n\t\t\toutputTarget.scissorTest = false;\n\n\t\t\t_setViewport(outputTarget, 0, 0, outputTarget.width, outputTarget.height);\n\t\t};\n\n\t\t_proto._fromTexture = function _fromTexture(texture) {\n\t\t\t_oldTarget = this._renderer.getRenderTarget();\n\n\t\t\tvar cubeUVRenderTarget = this._allocateTargets(texture);\n\n\t\t\tthis._textureToCubeUV(texture, cubeUVRenderTarget);\n\n\t\t\tthis._applyPMREM(cubeUVRenderTarget);\n\n\t\t\tthis._cleanup(cubeUVRenderTarget);\n\n\t\t\treturn cubeUVRenderTarget;\n\t\t};\n\n\t\t_proto._allocateTargets = function _allocateTargets(texture) {\n\t\t\t// warning: null texture is valid\n\t\t\tvar params = {\n\t\t\t\tmagFilter: NearestFilter,\n\t\t\t\tminFilter: NearestFilter,\n\t\t\t\tgenerateMipmaps: false,\n\t\t\t\ttype: UnsignedByteType,\n\t\t\t\tformat: RGBEFormat,\n\t\t\t\tencoding: _isLDR(texture) ? texture.encoding : RGBEEncoding,\n\t\t\t\tdepthBuffer: false\n\t\t\t};\n\n\t\t\tvar cubeUVRenderTarget = _createRenderTarget(params);\n\n\t\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget(params);\n\t\t\treturn cubeUVRenderTarget;\n\t\t};\n\n\t\t_proto._compileMaterial = function _compileMaterial(material) {\n\t\t\tvar tmpMesh = new Mesh(_lodPlanes[0], material);\n\n\t\t\tthis._renderer.compile(tmpMesh, _flatCamera);\n\t\t};\n\n\t\t_proto._sceneToCubeUV = function _sceneToCubeUV(scene, near, far, cubeUVRenderTarget) {\n\t\t\tvar fov = 90;\n\t\t\tvar aspect = 1;\n\t\t\tvar cubeCamera = new PerspectiveCamera(fov, aspect, near, far);\n\t\t\tvar upSign = [1, -1, 1, 1, 1, 1];\n\t\t\tvar forwardSign = [1, 1, 1, -1, -1, -1];\n\t\t\tvar renderer = this._renderer;\n\t\t\tvar outputEncoding = renderer.outputEncoding;\n\t\t\tvar toneMapping = renderer.toneMapping;\n\t\t\trenderer.getClearColor(_clearColor);\n\t\t\tvar clearAlpha = renderer.getClearAlpha();\n\t\t\trenderer.toneMapping = NoToneMapping;\n\t\t\trenderer.outputEncoding = LinearEncoding;\n\t\t\tvar background = scene.background;\n\n\t\t\tif (background && background.isColor) {\n\t\t\t\tbackground.convertSRGBToLinear(); // Convert linear to RGBE\n\n\t\t\t\tvar maxComponent = Math.max(background.r, background.g, background.b);\n\t\t\t\tvar fExp = Math.min(Math.max(Math.ceil(Math.log2(maxComponent)), -128.0), 127.0);\n\t\t\t\tbackground = background.multiplyScalar(Math.pow(2.0, -fExp));\n\t\t\t\tvar alpha = (fExp + 128.0) / 255.0;\n\t\t\t\trenderer.setClearColor(background, alpha);\n\t\t\t\tscene.background = null;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < 6; i++) {\n\t\t\t\tvar col = i % 3;\n\n\t\t\t\tif (col == 0) {\n\t\t\t\t\tcubeCamera.up.set(0, upSign[i], 0);\n\t\t\t\t\tcubeCamera.lookAt(forwardSign[i], 0, 0);\n\t\t\t\t} else if (col == 1) {\n\t\t\t\t\tcubeCamera.up.set(0, 0, upSign[i]);\n\t\t\t\t\tcubeCamera.lookAt(0, forwardSign[i], 0);\n\t\t\t\t} else {\n\t\t\t\t\tcubeCamera.up.set(0, upSign[i], 0);\n\t\t\t\t\tcubeCamera.lookAt(0, 0, forwardSign[i]);\n\t\t\t\t}\n\n\t\t\t\t_setViewport(cubeUVRenderTarget, col * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX);\n\n\t\t\t\trenderer.setRenderTarget(cubeUVRenderTarget);\n\t\t\t\trenderer.render(scene, cubeCamera);\n\t\t\t}\n\n\t\t\trenderer.toneMapping = toneMapping;\n\t\t\trenderer.outputEncoding = outputEncoding;\n\t\t\trenderer.setClearColor(_clearColor, clearAlpha);\n\t\t};\n\n\t\t_proto._textureToCubeUV = function _textureToCubeUV(texture, cubeUVRenderTarget) {\n\t\t\tvar renderer = this._renderer;\n\n\t\t\tif (texture.isCubeTexture) {\n\t\t\t\tif (this._cubemapShader == null) {\n\t\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._equirectShader == null) {\n\t\t\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\t\tvar mesh = new Mesh(_lodPlanes[0], material);\n\t\t\tvar uniforms = material.uniforms;\n\t\t\tuniforms['envMap'].value = texture;\n\n\t\t\tif (!texture.isCubeTexture) {\n\t\t\t\tuniforms['texelSize'].value.set(1.0 / texture.image.width, 1.0 / texture.image.height);\n\t\t\t}\n\n\t\t\tuniforms['inputEncoding'].value = ENCODINGS[texture.encoding];\n\t\t\tuniforms['outputEncoding'].value = ENCODINGS[cubeUVRenderTarget.texture.encoding];\n\n\t\t\t_setViewport(cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX);\n\n\t\t\trenderer.setRenderTarget(cubeUVRenderTarget);\n\t\t\trenderer.render(mesh, _flatCamera);\n\t\t};\n\n\t\t_proto._applyPMREM = function _applyPMREM(cubeUVRenderTarget) {\n\t\t\tvar renderer = this._renderer;\n\t\t\tvar autoClear = renderer.autoClear;\n\t\t\trenderer.autoClear = false;\n\n\t\t\tfor (var i = 1; i < TOTAL_LODS; i++) {\n\t\t\t\tvar sigma = Math.sqrt(_sigmas[i] * _sigmas[i] - _sigmas[i - 1] * _sigmas[i - 1]);\n\t\t\t\tvar poleAxis = _axisDirections[(i - 1) % _axisDirections.length];\n\n\t\t\t\tthis._blur(cubeUVRenderTarget, i - 1, i, sigma, poleAxis);\n\t\t\t}\n\n\t\t\trenderer.autoClear = autoClear;\n\t\t}\n\t\t/**\n\t\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t\t * accurate at the poles, but still does a decent job.\n\t\t */\n\t\t;\n\n\t\t_proto._blur = function _blur(cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis) {\n\t\t\tvar pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\t\tthis._halfBlur(cubeUVRenderTarget, pingPongRenderTarget, lodIn, lodOut, sigma, 'latitudinal', poleAxis);\n\n\t\t\tthis._halfBlur(pingPongRenderTarget, cubeUVRenderTarget, lodOut, lodOut, sigma, 'longitudinal', poleAxis);\n\t\t};\n\n\t\t_proto._halfBlur = function _halfBlur(targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis) {\n\t\t\tvar renderer = this._renderer;\n\t\t\tvar blurMaterial = this._blurMaterial;\n\n\t\t\tif (direction !== 'latitudinal' && direction !== 'longitudinal') {\n\t\t\t\tconsole.error('blur direction must be either latitudinal or longitudinal!');\n\t\t\t} // Number of standard deviations at which to cut off the discrete approximation.\n\n\n\t\t\tvar STANDARD_DEVIATIONS = 3;\n\t\t\tvar blurMesh = new Mesh(_lodPlanes[lodOut], blurMaterial);\n\t\t\tvar blurUniforms = blurMaterial.uniforms;\n\t\t\tvar pixels = _sizeLods[lodIn] - 1;\n\t\t\tvar radiansPerPixel = isFinite(sigmaRadians) ? Math.PI / (2 * pixels) : 2 * Math.PI / (2 * MAX_SAMPLES - 1);\n\t\t\tvar sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\t\tvar samples = isFinite(sigmaRadians) ? 1 + Math.floor(STANDARD_DEVIATIONS * sigmaPixels) : MAX_SAMPLES;\n\n\t\t\tif (samples > MAX_SAMPLES) {\n\t\t\t\tconsole.warn(\"sigmaRadians, \" + sigmaRadians + \", is too large and will clip, as it requested \" + samples + \" samples when the maximum is set to \" + MAX_SAMPLES);\n\t\t\t}\n\n\t\t\tvar weights = [];\n\t\t\tvar sum = 0;\n\n\t\t\tfor (var i = 0; i < MAX_SAMPLES; ++i) {\n\t\t\t\tvar _x = i / sigmaPixels;\n\n\t\t\t\tvar weight = Math.exp(-_x * _x / 2);\n\t\t\t\tweights.push(weight);\n\n\t\t\t\tif (i == 0) {\n\t\t\t\t\tsum += weight;\n\t\t\t\t} else if (i < samples) {\n\t\t\t\t\tsum += 2 * weight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (var _i = 0; _i < weights.length; _i++) {\n\t\t\t\tweights[_i] = weights[_i] / sum;\n\t\t\t}\n\n\t\t\tblurUniforms['envMap'].value = targetIn.texture;\n\t\t\tblurUniforms['samples'].value = samples;\n\t\t\tblurUniforms['weights'].value = weights;\n\t\t\tblurUniforms['latitudinal'].value = direction === 'latitudinal';\n\n\t\t\tif (poleAxis) {\n\t\t\t\tblurUniforms['poleAxis'].value = poleAxis;\n\t\t\t}\n\n\t\t\tblurUniforms['dTheta'].value = radiansPerPixel;\n\t\t\tblurUniforms['mipInt'].value = LOD_MAX - lodIn;\n\t\t\tblurUniforms['inputEncoding'].value = ENCODINGS[targetIn.texture.encoding];\n\t\t\tblurUniforms['outputEncoding'].value = ENCODINGS[targetIn.texture.encoding];\n\t\t\tvar outputSize = _sizeLods[lodOut];\n\t\t\tvar x = 3 * Math.max(0, SIZE_MAX - 2 * outputSize);\n\t\t\tvar y = (lodOut === 0 ? 0 : 2 * SIZE_MAX) + 2 * outputSize * (lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0);\n\n\t\t\t_setViewport(targetOut, x, y, 3 * outputSize, 2 * outputSize);\n\n\t\t\trenderer.setRenderTarget(targetOut);\n\t\t\trenderer.render(blurMesh, _flatCamera);\n\t\t};\n\n\t\treturn PMREMGenerator;\n\t}();\n\n\tfunction _isLDR(texture) {\n\t\tif (texture === undefined || texture.type !== UnsignedByteType) return false;\n\t\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\t}\n\n\tfunction _createPlanes() {\n\t\tvar _lodPlanes = [];\n\t\tvar _sizeLods = [];\n\t\tvar _sigmas = [];\n\t\tvar lod = LOD_MAX;\n\n\t\tfor (var i = 0; i < TOTAL_LODS; i++) {\n\t\t\tvar sizeLod = Math.pow(2, lod);\n\n\t\t\t_sizeLods.push(sizeLod);\n\n\t\t\tvar sigma = 1.0 / sizeLod;\n\n\t\t\tif (i > LOD_MAX - LOD_MIN) {\n\t\t\t\tsigma = EXTRA_LOD_SIGMA[i - LOD_MAX + LOD_MIN - 1];\n\t\t\t} else if (i == 0) {\n\t\t\t\tsigma = 0;\n\t\t\t}\n\n\t\t\t_sigmas.push(sigma);\n\n\t\t\tvar texelSize = 1.0 / (sizeLod - 1);\n\t\t\tvar min = -texelSize / 2;\n\t\t\tvar max = 1 + texelSize / 2;\n\t\t\tvar uv1 = [min, min, max, min, max, max, min, min, max, max, min, max];\n\t\t\tvar cubeFaces = 6;\n\t\t\tvar vertices = 6;\n\t\t\tvar positionSize = 3;\n\t\t\tvar uvSize = 2;\n\t\t\tvar faceIndexSize = 1;\n\t\t\tvar position = new Float32Array(positionSize * vertices * cubeFaces);\n\t\t\tvar uv = new Float32Array(uvSize * vertices * cubeFaces);\n\t\t\tvar faceIndex = new Float32Array(faceIndexSize * vertices * cubeFaces);\n\n\t\t\tfor (var face = 0; face < cubeFaces; face++) {\n\t\t\t\tvar x = face % 3 * 2 / 3 - 1;\n\t\t\t\tvar y = face > 2 ? 0 : -1;\n\t\t\t\tvar coordinates = [x, y, 0, x + 2 / 3, y, 0, x + 2 / 3, y + 1, 0, x, y, 0, x + 2 / 3, y + 1, 0, x, y + 1, 0];\n\t\t\t\tposition.set(coordinates, positionSize * vertices * face);\n\t\t\t\tuv.set(uv1, uvSize * vertices * face);\n\t\t\t\tvar fill = [face, face, face, face, face, face];\n\t\t\t\tfaceIndex.set(fill, faceIndexSize * vertices * face);\n\t\t\t}\n\n\t\t\tvar planes = new BufferGeometry();\n\t\t\tplanes.setAttribute('position', new BufferAttribute(position, positionSize));\n\t\t\tplanes.setAttribute('uv', new BufferAttribute(uv, uvSize));\n\t\t\tplanes.setAttribute('faceIndex', new BufferAttribute(faceIndex, faceIndexSize));\n\n\t\t\t_lodPlanes.push(planes);\n\n\t\t\tif (lod > LOD_MIN) {\n\t\t\t\tlod--;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t_lodPlanes: _lodPlanes,\n\t\t\t_sizeLods: _sizeLods,\n\t\t\t_sigmas: _sigmas\n\t\t};\n\t}\n\n\tfunction _createRenderTarget(params) {\n\t\tvar cubeUVRenderTarget = new WebGLRenderTarget(3 * SIZE_MAX, 3 * SIZE_MAX, params);\n\t\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\t\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\t\tcubeUVRenderTarget.scissorTest = true;\n\t\treturn cubeUVRenderTarget;\n\t}\n\n\tfunction _setViewport(target, x, y, width, height) {\n\t\ttarget.viewport.set(x, y, width, height);\n\t\ttarget.scissor.set(x, y, width, height);\n\t}\n\n\tfunction _getBlurShader(maxSamples) {\n\t\tvar weights = new Float32Array(maxSamples);\n\t\tvar poleAxis = new Vector3(0, 1, 0);\n\t\tvar shaderMaterial = new RawShaderMaterial({\n\t\t\tname: 'SphericalGaussianBlur',\n\t\t\tdefines: {\n\t\t\t\t'n': maxSamples\n\t\t\t},\n\t\t\tuniforms: {\n\t\t\t\t'envMap': {\n\t\t\t\t\tvalue: null\n\t\t\t\t},\n\t\t\t\t'samples': {\n\t\t\t\t\tvalue: 1\n\t\t\t\t},\n\t\t\t\t'weights': {\n\t\t\t\t\tvalue: weights\n\t\t\t\t},\n\t\t\t\t'latitudinal': {\n\t\t\t\t\tvalue: false\n\t\t\t\t},\n\t\t\t\t'dTheta': {\n\t\t\t\t\tvalue: 0\n\t\t\t\t},\n\t\t\t\t'mipInt': {\n\t\t\t\t\tvalue: 0\n\t\t\t\t},\n\t\t\t\t'poleAxis': {\n\t\t\t\t\tvalue: poleAxis\n\t\t\t\t},\n\t\t\t\t'inputEncoding': {\n\t\t\t\t\tvalue: ENCODINGS[LinearEncoding]\n\t\t\t\t},\n\t\t\t\t'outputEncoding': {\n\t\t\t\t\tvalue: ENCODINGS[LinearEncoding]\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: _getCommonVertexShader(),\n\t\t\tfragmentShader:\n\t\t\t/* glsl */\n\t\t\t\"\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform sampler2D envMap;\\n\\t\\t\\tuniform int samples;\\n\\t\\t\\tuniform float weights[ n ];\\n\\t\\t\\tuniform bool latitudinal;\\n\\t\\t\\tuniform float dTheta;\\n\\t\\t\\tuniform float mipInt;\\n\\t\\t\\tuniform vec3 poleAxis;\\n\\n\\t\\t\\t\" + _getEncodings() + \"\\n\\n\\t\\t\\t#define ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t#include <cube_uv_reflection_fragment>\\n\\n\\t\\t\\tvec3 getSample( float theta, vec3 axis ) {\\n\\n\\t\\t\\t\\tfloat cosTheta = cos( theta );\\n\\t\\t\\t\\t// Rodrigues' axis-angle rotation\\n\\t\\t\\t\\tvec3 sampleDirection = vOutputDirection * cosTheta\\n\\t\\t\\t\\t\\t+ cross( axis, vOutputDirection ) * sin( theta )\\n\\t\\t\\t\\t\\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\\n\\n\\t\\t\\t\\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\\n\\n\\t\\t\\t}\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\\n\\n\\t\\t\\t\\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\\n\\n\\t\\t\\t\\t\\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\taxis = normalize( axis );\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t\\t\\t\\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\\n\\n\\t\\t\\t\\tfor ( int i = 1; i < n; i++ ) {\\n\\n\\t\\t\\t\\t\\tif ( i >= samples ) {\\n\\n\\t\\t\\t\\t\\t\\tbreak;\\n\\n\\t\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t\\tfloat theta = dTheta * float( i );\\n\\t\\t\\t\\t\\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\\n\\t\\t\\t\\t\\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\\n\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t\",\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\t\t});\n\t\treturn shaderMaterial;\n\t}\n\n\tfunction _getEquirectShader() {\n\t\tvar texelSize = new Vector2(1, 1);\n\t\tvar shaderMaterial = new RawShaderMaterial({\n\t\t\tname: 'EquirectangularToCubeUV',\n\t\t\tuniforms: {\n\t\t\t\t'envMap': {\n\t\t\t\t\tvalue: null\n\t\t\t\t},\n\t\t\t\t'texelSize': {\n\t\t\t\t\tvalue: texelSize\n\t\t\t\t},\n\t\t\t\t'inputEncoding': {\n\t\t\t\t\tvalue: ENCODINGS[LinearEncoding]\n\t\t\t\t},\n\t\t\t\t'outputEncoding': {\n\t\t\t\t\tvalue: ENCODINGS[LinearEncoding]\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: _getCommonVertexShader(),\n\t\t\tfragmentShader:\n\t\t\t/* glsl */\n\t\t\t\"\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform sampler2D envMap;\\n\\t\\t\\tuniform vec2 texelSize;\\n\\n\\t\\t\\t\" + _getEncodings() + \"\\n\\n\\t\\t\\t#include <common>\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\n\\t\\t\\t\\tvec3 outputDirection = normalize( vOutputDirection );\\n\\t\\t\\t\\tvec2 uv = equirectUv( outputDirection );\\n\\n\\t\\t\\t\\tvec2 f = fract( uv / texelSize - 0.5 );\\n\\t\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\t\\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.x += texelSize.x;\\n\\t\\t\\t\\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.y += texelSize.y;\\n\\t\\t\\t\\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.x -= texelSize.x;\\n\\t\\t\\t\\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\n\\t\\t\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\t\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\t\\t\\tgl_FragColor.rgb = mix( tm, bm, f.y );\\n\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t\",\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\t\t});\n\t\treturn shaderMaterial;\n\t}\n\n\tfunction _getCubemapShader() {\n\t\tvar shaderMaterial = new RawShaderMaterial({\n\t\t\tname: 'CubemapToCubeUV',\n\t\t\tuniforms: {\n\t\t\t\t'envMap': {\n\t\t\t\t\tvalue: null\n\t\t\t\t},\n\t\t\t\t'inputEncoding': {\n\t\t\t\t\tvalue: ENCODINGS[LinearEncoding]\n\t\t\t\t},\n\t\t\t\t'outputEncoding': {\n\t\t\t\t\tvalue: ENCODINGS[LinearEncoding]\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexShader: _getCommonVertexShader(),\n\t\t\tfragmentShader:\n\t\t\t/* glsl */\n\t\t\t\"\\n\\n\\t\\t\\tprecision mediump float;\\n\\t\\t\\tprecision mediump int;\\n\\n\\t\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t\\tuniform samplerCube envMap;\\n\\n\\t\\t\\t\" + _getEncodings() + \"\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t\\t\\t\\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t\",\n\t\t\tblending: NoBlending,\n\t\t\tdepthTest: false,\n\t\t\tdepthWrite: false\n\t\t});\n\t\treturn shaderMaterial;\n\t}\n\n\tfunction _getCommonVertexShader() {\n\t\treturn (\n\t\t\t/* glsl */\n\t\t\t\"\\n\\n\\t\\tprecision mediump float;\\n\\t\\tprecision mediump int;\\n\\n\\t\\tattribute vec3 position;\\n\\t\\tattribute vec2 uv;\\n\\t\\tattribute float faceIndex;\\n\\n\\t\\tvarying vec3 vOutputDirection;\\n\\n\\t\\t// RH coordinate system; PMREM face-indexing convention\\n\\t\\tvec3 getDirection( vec2 uv, float face ) {\\n\\n\\t\\t\\tuv = 2.0 * uv - 1.0;\\n\\n\\t\\t\\tvec3 direction = vec3( uv, 1.0 );\\n\\n\\t\\t\\tif ( face == 0.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.zyx; // ( 1, v, u ) pos x\\n\\n\\t\\t\\t} else if ( face == 1.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.xzy;\\n\\t\\t\\t\\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\\n\\n\\t\\t\\t} else if ( face == 2.0 ) {\\n\\n\\t\\t\\t\\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\\n\\n\\t\\t\\t} else if ( face == 3.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.zyx;\\n\\t\\t\\t\\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\\n\\n\\t\\t\\t} else if ( face == 4.0 ) {\\n\\n\\t\\t\\t\\tdirection = direction.xzy;\\n\\t\\t\\t\\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\\n\\n\\t\\t\\t} else if ( face == 5.0 ) {\\n\\n\\t\\t\\t\\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\\n\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn direction;\\n\\n\\t\\t}\\n\\n\\t\\tvoid main() {\\n\\n\\t\\t\\tvOutputDirection = getDirection( uv, faceIndex );\\n\\t\\t\\tgl_Position = vec4( position, 1.0 );\\n\\n\\t\\t}\\n\\t\"\n\t\t);\n\t}\n\n\tfunction _getEncodings() {\n\t\treturn (\n\t\t\t/* glsl */\n\t\t\t\"\\n\\n\\t\\tuniform int inputEncoding;\\n\\t\\tuniform int outputEncoding;\\n\\n\\t\\t#include <encodings_pars_fragment>\\n\\n\\t\\tvec4 inputTexelToLinear( vec4 value ) {\\n\\n\\t\\t\\tif ( inputEncoding == 0 ) {\\n\\n\\t\\t\\t\\treturn value;\\n\\n\\t\\t\\t} else if ( inputEncoding == 1 ) {\\n\\n\\t\\t\\t\\treturn sRGBToLinear( value );\\n\\n\\t\\t\\t} else if ( inputEncoding == 2 ) {\\n\\n\\t\\t\\t\\treturn RGBEToLinear( value );\\n\\n\\t\\t\\t} else if ( inputEncoding == 3 ) {\\n\\n\\t\\t\\t\\treturn RGBMToLinear( value, 7.0 );\\n\\n\\t\\t\\t} else if ( inputEncoding == 4 ) {\\n\\n\\t\\t\\t\\treturn RGBMToLinear( value, 16.0 );\\n\\n\\t\\t\\t} else if ( inputEncoding == 5 ) {\\n\\n\\t\\t\\t\\treturn RGBDToLinear( value, 256.0 );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\treturn GammaToLinear( value, 2.2 );\\n\\n\\t\\t\\t}\\n\\n\\t\\t}\\n\\n\\t\\tvec4 linearToOutputTexel( vec4 value ) {\\n\\n\\t\\t\\tif ( outputEncoding == 0 ) {\\n\\n\\t\\t\\t\\treturn value;\\n\\n\\t\\t\\t} else if ( outputEncoding == 1 ) {\\n\\n\\t\\t\\t\\treturn LinearTosRGB( value );\\n\\n\\t\\t\\t} else if ( outputEncoding == 2 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBE( value );\\n\\n\\t\\t\\t} else if ( outputEncoding == 3 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBM( value, 7.0 );\\n\\n\\t\\t\\t} else if ( outputEncoding == 4 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBM( value, 16.0 );\\n\\n\\t\\t\\t} else if ( outputEncoding == 5 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBD( value, 256.0 );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\treturn LinearToGamma( value, 2.2 );\\n\\n\\t\\t\\t}\\n\\n\\t\\t}\\n\\n\\t\\tvec4 envMapTexelToLinear( vec4 color ) {\\n\\n\\t\\t\\treturn inputTexelToLinear( color );\\n\\n\\t\\t}\\n\\t\"\n\t\t);\n\t}\n\n\tfunction Face4(a, b, c, d, normal, color, materialIndex) {\n\t\tconsole.warn('THREE.Face4 has been removed. A THREE.Face3 will be created instead.');\n\t\treturn new Face3(a, b, c, normal, color, materialIndex);\n\t}\n\tvar LineStrip = 0;\n\tvar LinePieces = 1;\n\tvar NoColors = 0;\n\tvar FaceColors = 1;\n\tvar VertexColors = 2;\n\tfunction MeshFaceMaterial(materials) {\n\t\tconsole.warn('THREE.MeshFaceMaterial has been removed. Use an Array instead.');\n\t\treturn materials;\n\t}\n\tfunction MultiMaterial(materials) {\n\t\tif (materials === void 0) {\n\t\t\tmaterials = [];\n\t\t}\n\n\t\tconsole.warn('THREE.MultiMaterial has been removed. Use an Array instead.');\n\t\tmaterials.isMultiMaterial = true;\n\t\tmaterials.materials = materials;\n\n\t\tmaterials.clone = function () {\n\t\t\treturn materials.slice();\n\t\t};\n\n\t\treturn materials;\n\t}\n\tfunction PointCloud(geometry, material) {\n\t\tconsole.warn('THREE.PointCloud has been renamed to THREE.Points.');\n\t\treturn new Points(geometry, material);\n\t}\n\tfunction Particle(material) {\n\t\tconsole.warn('THREE.Particle has been renamed to THREE.Sprite.');\n\t\treturn new Sprite(material);\n\t}\n\tfunction ParticleSystem(geometry, material) {\n\t\tconsole.warn('THREE.ParticleSystem has been renamed to THREE.Points.');\n\t\treturn new Points(geometry, material);\n\t}\n\tfunction PointCloudMaterial(parameters) {\n\t\tconsole.warn('THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.');\n\t\treturn new PointsMaterial(parameters);\n\t}\n\tfunction ParticleBasicMaterial(parameters) {\n\t\tconsole.warn('THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.');\n\t\treturn new PointsMaterial(parameters);\n\t}\n\tfunction ParticleSystemMaterial(parameters) {\n\t\tconsole.warn('THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.');\n\t\treturn new PointsMaterial(parameters);\n\t}\n\tfunction Vertex(x, y, z) {\n\t\tconsole.warn('THREE.Vertex has been removed. Use THREE.Vector3 instead.');\n\t\treturn new Vector3(x, y, z);\n\t} //\n\n\tfunction DynamicBufferAttribute(array, itemSize) {\n\t\tconsole.warn('THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.');\n\t\treturn new BufferAttribute(array, itemSize).setUsage(DynamicDrawUsage);\n\t}\n\tfunction Int8Attribute(array, itemSize) {\n\t\tconsole.warn('THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.');\n\t\treturn new Int8BufferAttribute(array, itemSize);\n\t}\n\tfunction Uint8Attribute(array, itemSize) {\n\t\tconsole.warn('THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.');\n\t\treturn new Uint8BufferAttribute(array, itemSize);\n\t}\n\tfunction Uint8ClampedAttribute(array, itemSize) {\n\t\tconsole.warn('THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.');\n\t\treturn new Uint8ClampedBufferAttribute(array, itemSize);\n\t}\n\tfunction Int16Attribute(array, itemSize) {\n\t\tconsole.warn('THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.');\n\t\treturn new Int16BufferAttribute(array, itemSize);\n\t}\n\tfunction Uint16Attribute(array, itemSize) {\n\t\tconsole.warn('THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.');\n\t\treturn new Uint16BufferAttribute(array, itemSize);\n\t}\n\tfunction Int32Attribute(array, itemSize) {\n\t\tconsole.warn('THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.');\n\t\treturn new Int32BufferAttribute(array, itemSize);\n\t}\n\tfunction Uint32Attribute(array, itemSize) {\n\t\tconsole.warn('THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.');\n\t\treturn new Uint32BufferAttribute(array, itemSize);\n\t}\n\tfunction Float32Attribute(array, itemSize) {\n\t\tconsole.warn('THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.');\n\t\treturn new Float32BufferAttribute(array, itemSize);\n\t}\n\tfunction Float64Attribute(array, itemSize) {\n\t\tconsole.warn('THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.');\n\t\treturn new Float64BufferAttribute(array, itemSize);\n\t} //\n\n\tCurve.create = function (construct, getPoint) {\n\t\tconsole.log('THREE.Curve.create() has been deprecated');\n\t\tconstruct.prototype = Object.create(Curve.prototype);\n\t\tconstruct.prototype.constructor = construct;\n\t\tconstruct.prototype.getPoint = getPoint;\n\t\treturn construct;\n\t}; //\n\n\n\tObject.assign(CurvePath.prototype, {\n\t\tcreatePointsGeometry: function createPointsGeometry(divisions) {\n\t\t\tconsole.warn('THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.'); // generate geometry from path points (for Line or Points objects)\n\n\t\t\tvar pts = this.getPoints(divisions);\n\t\t\treturn this.createGeometry(pts);\n\t\t},\n\t\tcreateSpacedPointsGeometry: function createSpacedPointsGeometry(divisions) {\n\t\t\tconsole.warn('THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.'); // generate geometry from equidistant sampling along the path\n\n\t\t\tvar pts = this.getSpacedPoints(divisions);\n\t\t\treturn this.createGeometry(pts);\n\t\t},\n\t\tcreateGeometry: function createGeometry(points) {\n\t\t\tconsole.warn('THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.');\n\t\t\tvar geometry = new Geometry();\n\n\t\t\tfor (var i = 0, l = points.length; i < l; i++) {\n\t\t\t\tvar point = points[i];\n\t\t\t\tgeometry.vertices.push(new Vector3(point.x, point.y, point.z || 0));\n\t\t\t}\n\n\t\t\treturn geometry;\n\t\t}\n\t}); //\n\n\tObject.assign(Path.prototype, {\n\t\tfromPoints: function fromPoints(points) {\n\t\t\tconsole.warn('THREE.Path: .fromPoints() has been renamed to .setFromPoints().');\n\t\t\treturn this.setFromPoints(points);\n\t\t}\n\t}); //\n\n\tfunction ClosedSplineCurve3(points) {\n\t\tconsole.warn('THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.');\n\t\tCatmullRomCurve3.call(this, points);\n\t\tthis.type = 'catmullrom';\n\t\tthis.closed = true;\n\t}\n\tClosedSplineCurve3.prototype = Object.create(CatmullRomCurve3.prototype); //\n\n\tfunction SplineCurve3(points) {\n\t\tconsole.warn('THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.');\n\t\tCatmullRomCurve3.call(this, points);\n\t\tthis.type = 'catmullrom';\n\t}\n\tSplineCurve3.prototype = Object.create(CatmullRomCurve3.prototype); //\n\n\tfunction Spline(points) {\n\t\tconsole.warn('THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.');\n\t\tCatmullRomCurve3.call(this, points);\n\t\tthis.type = 'catmullrom';\n\t}\n\tSpline.prototype = Object.create(CatmullRomCurve3.prototype);\n\tObject.assign(Spline.prototype, {\n\t\tinitFromArray: function initFromArray()\n\t\t/* a */\n\t\t{\n\t\t\tconsole.error('THREE.Spline: .initFromArray() has been removed.');\n\t\t},\n\t\tgetControlPointsArray: function getControlPointsArray()\n\t\t/* optionalTarget */\n\t\t{\n\t\t\tconsole.error('THREE.Spline: .getControlPointsArray() has been removed.');\n\t\t},\n\t\treparametrizeByArcLength: function reparametrizeByArcLength()\n\t\t/* samplingCoef */\n\t\t{\n\t\t\tconsole.error('THREE.Spline: .reparametrizeByArcLength() has been removed.');\n\t\t}\n\t}); //\n\n\tfunction AxisHelper(size) {\n\t\tconsole.warn('THREE.AxisHelper has been renamed to THREE.AxesHelper.');\n\t\treturn new AxesHelper(size);\n\t}\n\tfunction BoundingBoxHelper(object, color) {\n\t\tconsole.warn('THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.');\n\t\treturn new BoxHelper(object, color);\n\t}\n\tfunction EdgesHelper(object, hex) {\n\t\tconsole.warn('THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.');\n\t\treturn new LineSegments(new EdgesGeometry(object.geometry), new LineBasicMaterial({\n\t\t\tcolor: hex !== undefined ? hex : 0xffffff\n\t\t}));\n\t}\n\n\tGridHelper.prototype.setColors = function () {\n\t\tconsole.error('THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.');\n\t};\n\n\tSkeletonHelper.prototype.update = function () {\n\t\tconsole.error('THREE.SkeletonHelper: update() no longer needs to be called.');\n\t};\n\n\tfunction WireframeHelper(object, hex) {\n\t\tconsole.warn('THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.');\n\t\treturn new LineSegments(new WireframeGeometry(object.geometry), new LineBasicMaterial({\n\t\t\tcolor: hex !== undefined ? hex : 0xffffff\n\t\t}));\n\t} //\n\n\tObject.assign(Loader.prototype, {\n\t\textractUrlBase: function extractUrlBase(url) {\n\t\t\tconsole.warn('THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.');\n\t\t\treturn LoaderUtils.extractUrlBase(url);\n\t\t}\n\t});\n\tLoader.Handlers = {\n\t\tadd: function add()\n\t\t/* regex, loader */\n\t\t{\n\t\t\tconsole.error('THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.');\n\t\t},\n\t\tget: function get()\n\t\t/* file */\n\t\t{\n\t\t\tconsole.error('THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.');\n\t\t}\n\t};\n\tfunction XHRLoader(manager) {\n\t\tconsole.warn('THREE.XHRLoader has been renamed to THREE.FileLoader.');\n\t\treturn new FileLoader(manager);\n\t}\n\tfunction BinaryTextureLoader(manager) {\n\t\tconsole.warn('THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.');\n\t\treturn new DataTextureLoader(manager);\n\t} //\n\n\tObject.assign(Box2.prototype, {\n\t\tcenter: function center(optionalTarget) {\n\t\t\tconsole.warn('THREE.Box2: .center() has been renamed to .getCenter().');\n\t\t\treturn this.getCenter(optionalTarget);\n\t\t},\n\t\tempty: function empty() {\n\t\t\tconsole.warn('THREE.Box2: .empty() has been renamed to .isEmpty().');\n\t\t\treturn this.isEmpty();\n\t\t},\n\t\tisIntersectionBox: function isIntersectionBox(box) {\n\t\t\tconsole.warn('THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().');\n\t\t\treturn this.intersectsBox(box);\n\t\t},\n\t\tsize: function size(optionalTarget) {\n\t\t\tconsole.warn('THREE.Box2: .size() has been renamed to .getSize().');\n\t\t\treturn this.getSize(optionalTarget);\n\t\t}\n\t});\n\tObject.assign(Box3.prototype, {\n\t\tcenter: function center(optionalTarget) {\n\t\t\tconsole.warn('THREE.Box3: .center() has been renamed to .getCenter().');\n\t\t\treturn this.getCenter(optionalTarget);\n\t\t},\n\t\tempty: function empty() {\n\t\t\tconsole.warn('THREE.Box3: .empty() has been renamed to .isEmpty().');\n\t\t\treturn this.isEmpty();\n\t\t},\n\t\tisIntersectionBox: function isIntersectionBox(box) {\n\t\t\tconsole.warn('THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().');\n\t\t\treturn this.intersectsBox(box);\n\t\t},\n\t\tisIntersectionSphere: function isIntersectionSphere(sphere) {\n\t\t\tconsole.warn('THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().');\n\t\t\treturn this.intersectsSphere(sphere);\n\t\t},\n\t\tsize: function size(optionalTarget) {\n\t\t\tconsole.warn('THREE.Box3: .size() has been renamed to .getSize().');\n\t\t\treturn this.getSize(optionalTarget);\n\t\t}\n\t});\n\tObject.assign(Sphere.prototype, {\n\t\tempty: function empty() {\n\t\t\tconsole.warn('THREE.Sphere: .empty() has been renamed to .isEmpty().');\n\t\t\treturn this.isEmpty();\n\t\t}\n\t});\n\n\tFrustum.prototype.setFromMatrix = function (m) {\n\t\tconsole.warn('THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().');\n\t\treturn this.setFromProjectionMatrix(m);\n\t};\n\n\tLine3.prototype.center = function (optionalTarget) {\n\t\tconsole.warn('THREE.Line3: .center() has been renamed to .getCenter().');\n\t\treturn this.getCenter(optionalTarget);\n\t};\n\n\tObject.assign(MathUtils, {\n\t\trandom16: function random16() {\n\t\t\tconsole.warn('THREE.Math: .random16() has been deprecated. Use Math.random() instead.');\n\t\t\treturn Math.random();\n\t\t},\n\t\tnearestPowerOfTwo: function nearestPowerOfTwo(value) {\n\t\t\tconsole.warn('THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().');\n\t\t\treturn MathUtils.floorPowerOfTwo(value);\n\t\t},\n\t\tnextPowerOfTwo: function nextPowerOfTwo(value) {\n\t\t\tconsole.warn('THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().');\n\t\t\treturn MathUtils.ceilPowerOfTwo(value);\n\t\t}\n\t});\n\tObject.assign(Matrix3.prototype, {\n\t\tflattenToArrayOffset: function flattenToArrayOffset(array, offset) {\n\t\t\tconsole.warn('THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.');\n\t\t\treturn this.toArray(array, offset);\n\t\t},\n\t\tmultiplyVector3: function multiplyVector3(vector) {\n\t\t\tconsole.warn('THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.');\n\t\t\treturn vector.applyMatrix3(this);\n\t\t},\n\t\tmultiplyVector3Array: function multiplyVector3Array()\n\t\t/* a */\n\t\t{\n\t\t\tconsole.error('THREE.Matrix3: .multiplyVector3Array() has been removed.');\n\t\t},\n\t\tapplyToBufferAttribute: function applyToBufferAttribute(attribute) {\n\t\t\tconsole.warn('THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.');\n\t\t\treturn attribute.applyMatrix3(this);\n\t\t},\n\t\tapplyToVector3Array: function applyToVector3Array()\n\t\t/* array, offset, length */\n\t\t{\n\t\t\tconsole.error('THREE.Matrix3: .applyToVector3Array() has been removed.');\n\t\t},\n\t\tgetInverse: function getInverse(matrix) {\n\t\t\tconsole.warn('THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.');\n\t\t\treturn this.copy(matrix).invert();\n\t\t}\n\t});\n\tObject.assign(Matrix4.prototype, {\n\t\textractPosition: function extractPosition(m) {\n\t\t\tconsole.warn('THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().');\n\t\t\treturn this.copyPosition(m);\n\t\t},\n\t\tflattenToArrayOffset: function flattenToArrayOffset(array, offset) {\n\t\t\tconsole.warn('THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.');\n\t\t\treturn this.toArray(array, offset);\n\t\t},\n\t\tgetPosition: function getPosition() {\n\t\t\tconsole.warn('THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.');\n\t\t\treturn new Vector3().setFromMatrixColumn(this, 3);\n\t\t},\n\t\tsetRotationFromQuaternion: function setRotationFromQuaternion(q) {\n\t\t\tconsole.warn('THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().');\n\t\t\treturn this.makeRotationFromQuaternion(q);\n\t\t},\n\t\tmultiplyToArray: function multiplyToArray() {\n\t\t\tconsole.warn('THREE.Matrix4: .multiplyToArray() has been removed.');\n\t\t},\n\t\tmultiplyVector3: function multiplyVector3(vector) {\n\t\t\tconsole.warn('THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.');\n\t\t\treturn vector.applyMatrix4(this);\n\t\t},\n\t\tmultiplyVector4: function multiplyVector4(vector) {\n\t\t\tconsole.warn('THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.');\n\t\t\treturn vector.applyMatrix4(this);\n\t\t},\n\t\tmultiplyVector3Array: function multiplyVector3Array()\n\t\t/* a */\n\t\t{\n\t\t\tconsole.error('THREE.Matrix4: .multiplyVector3Array() has been removed.');\n\t\t},\n\t\trotateAxis: function rotateAxis(v) {\n\t\t\tconsole.warn('THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.');\n\t\t\tv.transformDirection(this);\n\t\t},\n\t\tcrossVector: function crossVector(vector) {\n\t\t\tconsole.warn('THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.');\n\t\t\treturn vector.applyMatrix4(this);\n\t\t},\n\t\ttranslate: function translate() {\n\t\t\tconsole.error('THREE.Matrix4: .translate() has been removed.');\n\t\t},\n\t\trotateX: function rotateX() {\n\t\t\tconsole.error('THREE.Matrix4: .rotateX() has been removed.');\n\t\t},\n\t\trotateY: function rotateY() {\n\t\t\tconsole.error('THREE.Matrix4: .rotateY() has been removed.');\n\t\t},\n\t\trotateZ: function rotateZ() {\n\t\t\tconsole.error('THREE.Matrix4: .rotateZ() has been removed.');\n\t\t},\n\t\trotateByAxis: function rotateByAxis() {\n\t\t\tconsole.error('THREE.Matrix4: .rotateByAxis() has been removed.');\n\t\t},\n\t\tapplyToBufferAttribute: function applyToBufferAttribute(attribute) {\n\t\t\tconsole.warn('THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.');\n\t\t\treturn attribute.applyMatrix4(this);\n\t\t},\n\t\tapplyToVector3Array: function applyToVector3Array()\n\t\t/* array, offset, length */\n\t\t{\n\t\t\tconsole.error('THREE.Matrix4: .applyToVector3Array() has been removed.');\n\t\t},\n\t\tmakeFrustum: function makeFrustum(left, right, bottom, top, near, far) {\n\t\t\tconsole.warn('THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.');\n\t\t\treturn this.makePerspective(left, right, top, bottom, near, far);\n\t\t},\n\t\tgetInverse: function getInverse(matrix) {\n\t\t\tconsole.warn('THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.');\n\t\t\treturn this.copy(matrix).invert();\n\t\t}\n\t});\n\n\tPlane.prototype.isIntersectionLine = function (line) {\n\t\tconsole.warn('THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().');\n\t\treturn this.intersectsLine(line);\n\t};\n\n\tObject.assign(Quaternion.prototype, {\n\t\tmultiplyVector3: function multiplyVector3(vector) {\n\t\t\tconsole.warn('THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.');\n\t\t\treturn vector.applyQuaternion(this);\n\t\t},\n\t\tinverse: function inverse() {\n\t\t\tconsole.warn('THREE.Quaternion: .inverse() has been renamed to invert().');\n\t\t\treturn this.invert();\n\t\t}\n\t});\n\tObject.assign(Ray.prototype, {\n\t\tisIntersectionBox: function isIntersectionBox(box) {\n\t\t\tconsole.warn('THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().');\n\t\t\treturn this.intersectsBox(box);\n\t\t},\n\t\tisIntersectionPlane: function isIntersectionPlane(plane) {\n\t\t\tconsole.warn('THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().');\n\t\t\treturn this.intersectsPlane(plane);\n\t\t},\n\t\tisIntersectionSphere: function isIntersectionSphere(sphere) {\n\t\t\tconsole.warn('THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().');\n\t\t\treturn this.intersectsSphere(sphere);\n\t\t}\n\t});\n\tObject.assign(Triangle.prototype, {\n\t\tarea: function area() {\n\t\t\tconsole.warn('THREE.Triangle: .area() has been renamed to .getArea().');\n\t\t\treturn this.getArea();\n\t\t},\n\t\tbarycoordFromPoint: function barycoordFromPoint(point, target) {\n\t\t\tconsole.warn('THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().');\n\t\t\treturn this.getBarycoord(point, target);\n\t\t},\n\t\tmidpoint: function midpoint(target) {\n\t\t\tconsole.warn('THREE.Triangle: .midpoint() has been renamed to .getMidpoint().');\n\t\t\treturn this.getMidpoint(target);\n\t\t},\n\t\tnormal: function normal(target) {\n\t\t\tconsole.warn('THREE.Triangle: .normal() has been renamed to .getNormal().');\n\t\t\treturn this.getNormal(target);\n\t\t},\n\t\tplane: function plane(target) {\n\t\t\tconsole.warn('THREE.Triangle: .plane() has been renamed to .getPlane().');\n\t\t\treturn this.getPlane(target);\n\t\t}\n\t});\n\tObject.assign(Triangle, {\n\t\tbarycoordFromPoint: function barycoordFromPoint(point, a, b, c, target) {\n\t\t\tconsole.warn('THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().');\n\t\t\treturn Triangle.getBarycoord(point, a, b, c, target);\n\t\t},\n\t\tnormal: function normal(a, b, c, target) {\n\t\t\tconsole.warn('THREE.Triangle: .normal() has been renamed to .getNormal().');\n\t\t\treturn Triangle.getNormal(a, b, c, target);\n\t\t}\n\t});\n\tObject.assign(Shape.prototype, {\n\t\textractAllPoints: function extractAllPoints(divisions) {\n\t\t\tconsole.warn('THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.');\n\t\t\treturn this.extractPoints(divisions);\n\t\t},\n\t\textrude: function extrude(options) {\n\t\t\tconsole.warn('THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.');\n\t\t\treturn new ExtrudeGeometry(this, options);\n\t\t},\n\t\tmakeGeometry: function makeGeometry(options) {\n\t\t\tconsole.warn('THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.');\n\t\t\treturn new ShapeGeometry(this, options);\n\t\t}\n\t});\n\tObject.assign(Vector2.prototype, {\n\t\tfromAttribute: function fromAttribute(attribute, index, offset) {\n\t\t\tconsole.warn('THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().');\n\t\t\treturn this.fromBufferAttribute(attribute, index, offset);\n\t\t},\n\t\tdistanceToManhattan: function distanceToManhattan(v) {\n\t\t\tconsole.warn('THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().');\n\t\t\treturn this.manhattanDistanceTo(v);\n\t\t},\n\t\tlengthManhattan: function lengthManhattan() {\n\t\t\tconsole.warn('THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().');\n\t\t\treturn this.manhattanLength();\n\t\t}\n\t});\n\tObject.assign(Vector3.prototype, {\n\t\tsetEulerFromRotationMatrix: function setEulerFromRotationMatrix() {\n\t\t\tconsole.error('THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.');\n\t\t},\n\t\tsetEulerFromQuaternion: function setEulerFromQuaternion() {\n\t\t\tconsole.error('THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.');\n\t\t},\n\t\tgetPositionFromMatrix: function getPositionFromMatrix(m) {\n\t\t\tconsole.warn('THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().');\n\t\t\treturn this.setFromMatrixPosition(m);\n\t\t},\n\t\tgetScaleFromMatrix: function getScaleFromMatrix(m) {\n\t\t\tconsole.warn('THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().');\n\t\t\treturn this.setFromMatrixScale(m);\n\t\t},\n\t\tgetColumnFromMatrix: function getColumnFromMatrix(index, matrix) {\n\t\t\tconsole.warn('THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().');\n\t\t\treturn this.setFromMatrixColumn(matrix, index);\n\t\t},\n\t\tapplyProjection: function applyProjection(m) {\n\t\t\tconsole.warn('THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.');\n\t\t\treturn this.applyMatrix4(m);\n\t\t},\n\t\tfromAttribute: function fromAttribute(attribute, index, offset) {\n\t\t\tconsole.warn('THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().');\n\t\t\treturn this.fromBufferAttribute(attribute, index, offset);\n\t\t},\n\t\tdistanceToManhattan: function distanceToManhattan(v) {\n\t\t\tconsole.warn('THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().');\n\t\t\treturn this.manhattanDistanceTo(v);\n\t\t},\n\t\tlengthManhattan: function lengthManhattan() {\n\t\t\tconsole.warn('THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().');\n\t\t\treturn this.manhattanLength();\n\t\t}\n\t});\n\tObject.assign(Vector4.prototype, {\n\t\tfromAttribute: function fromAttribute(attribute, index, offset) {\n\t\t\tconsole.warn('THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().');\n\t\t\treturn this.fromBufferAttribute(attribute, index, offset);\n\t\t},\n\t\tlengthManhattan: function lengthManhattan() {\n\t\t\tconsole.warn('THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().');\n\t\t\treturn this.manhattanLength();\n\t\t}\n\t}); //\n\n\tObject.assign(Geometry.prototype, {\n\t\tcomputeTangents: function computeTangents() {\n\t\t\tconsole.error('THREE.Geometry: .computeTangents() has been removed.');\n\t\t},\n\t\tcomputeLineDistances: function computeLineDistances() {\n\t\t\tconsole.error('THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.');\n\t\t},\n\t\tapplyMatrix: function applyMatrix(matrix) {\n\t\t\tconsole.warn('THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().');\n\t\t\treturn this.applyMatrix4(matrix);\n\t\t}\n\t});\n\tObject.assign(Object3D.prototype, {\n\t\tgetChildByName: function getChildByName(name) {\n\t\t\tconsole.warn('THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().');\n\t\t\treturn this.getObjectByName(name);\n\t\t},\n\t\trenderDepth: function renderDepth() {\n\t\t\tconsole.warn('THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.');\n\t\t},\n\t\ttranslate: function translate(distance, axis) {\n\t\t\tconsole.warn('THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.');\n\t\t\treturn this.translateOnAxis(axis, distance);\n\t\t},\n\t\tgetWorldRotation: function getWorldRotation() {\n\t\t\tconsole.error('THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.');\n\t\t},\n\t\tapplyMatrix: function applyMatrix(matrix) {\n\t\t\tconsole.warn('THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().');\n\t\t\treturn this.applyMatrix4(matrix);\n\t\t}\n\t});\n\tObject.defineProperties(Object3D.prototype, {\n\t\teulerOrder: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.Object3D: .eulerOrder is now .rotation.order.');\n\t\t\t\treturn this.rotation.order;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Object3D: .eulerOrder is now .rotation.order.');\n\t\t\t\tthis.rotation.order = value;\n\t\t\t}\n\t\t},\n\t\tuseQuaternion: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.');\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.');\n\t\t\t}\n\t\t}\n\t});\n\tObject.assign(Mesh.prototype, {\n\t\tsetDrawMode: function setDrawMode() {\n\t\t\tconsole.error('THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.');\n\t\t}\n\t});\n\tObject.defineProperties(Mesh.prototype, {\n\t\tdrawMode: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.error('THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.');\n\t\t\t\treturn TrianglesDrawMode;\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.error('THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.');\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperties(LOD.prototype, {\n\t\tobjects: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.LOD: .objects has been renamed to .levels.');\n\t\t\t\treturn this.levels;\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperty(Skeleton.prototype, 'useVertexTexture', {\n\t\tget: function get() {\n\t\t\tconsole.warn('THREE.Skeleton: useVertexTexture has been removed.');\n\t\t},\n\t\tset: function set() {\n\t\t\tconsole.warn('THREE.Skeleton: useVertexTexture has been removed.');\n\t\t}\n\t});\n\n\tSkinnedMesh.prototype.initBones = function () {\n\t\tconsole.error('THREE.SkinnedMesh: initBones() has been removed.');\n\t};\n\n\tObject.defineProperty(Curve.prototype, '__arcLengthDivisions', {\n\t\tget: function get() {\n\t\t\tconsole.warn('THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.');\n\t\t\treturn this.arcLengthDivisions;\n\t\t},\n\t\tset: function set(value) {\n\t\t\tconsole.warn('THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.');\n\t\t\tthis.arcLengthDivisions = value;\n\t\t}\n\t}); //\n\n\tPerspectiveCamera.prototype.setLens = function (focalLength, filmGauge) {\n\t\tconsole.warn('THREE.PerspectiveCamera.setLens is deprecated. ' + 'Use .setFocalLength and .filmGauge for a photographic setup.');\n\t\tif (filmGauge !== undefined) this.filmGauge = filmGauge;\n\t\tthis.setFocalLength(focalLength);\n\t}; //\n\n\n\tObject.defineProperties(Light.prototype, {\n\t\tonlyShadow: {\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.Light: .onlyShadow has been removed.');\n\t\t\t}\n\t\t},\n\t\tshadowCameraFov: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowCameraFov is now .shadow.camera.fov.');\n\t\t\t\tthis.shadow.camera.fov = value;\n\t\t\t}\n\t\t},\n\t\tshadowCameraLeft: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowCameraLeft is now .shadow.camera.left.');\n\t\t\t\tthis.shadow.camera.left = value;\n\t\t\t}\n\t\t},\n\t\tshadowCameraRight: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowCameraRight is now .shadow.camera.right.');\n\t\t\t\tthis.shadow.camera.right = value;\n\t\t\t}\n\t\t},\n\t\tshadowCameraTop: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowCameraTop is now .shadow.camera.top.');\n\t\t\t\tthis.shadow.camera.top = value;\n\t\t\t}\n\t\t},\n\t\tshadowCameraBottom: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.');\n\t\t\t\tthis.shadow.camera.bottom = value;\n\t\t\t}\n\t\t},\n\t\tshadowCameraNear: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowCameraNear is now .shadow.camera.near.');\n\t\t\t\tthis.shadow.camera.near = value;\n\t\t\t}\n\t\t},\n\t\tshadowCameraFar: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowCameraFar is now .shadow.camera.far.');\n\t\t\t\tthis.shadow.camera.far = value;\n\t\t\t}\n\t\t},\n\t\tshadowCameraVisible: {\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.');\n\t\t\t}\n\t\t},\n\t\tshadowBias: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowBias is now .shadow.bias.');\n\t\t\t\tthis.shadow.bias = value;\n\t\t\t}\n\t\t},\n\t\tshadowDarkness: {\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.Light: .shadowDarkness has been removed.');\n\t\t\t}\n\t\t},\n\t\tshadowMapWidth: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.');\n\t\t\t\tthis.shadow.mapSize.width = value;\n\t\t\t}\n\t\t},\n\t\tshadowMapHeight: {\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.');\n\t\t\t\tthis.shadow.mapSize.height = value;\n\t\t\t}\n\t\t}\n\t}); //\n\n\tObject.defineProperties(BufferAttribute.prototype, {\n\t\tlength: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.BufferAttribute: .length has been deprecated. Use .count instead.');\n\t\t\t\treturn this.array.length;\n\t\t\t}\n\t\t},\n\t\tdynamic: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.');\n\t\t\t\treturn this.usage === DynamicDrawUsage;\n\t\t\t},\n\t\t\tset: function set()\n\t\t\t/* value */\n\t\t\t{\n\t\t\t\tconsole.warn('THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.');\n\t\t\t\tthis.setUsage(DynamicDrawUsage);\n\t\t\t}\n\t\t}\n\t});\n\tObject.assign(BufferAttribute.prototype, {\n\t\tsetDynamic: function setDynamic(value) {\n\t\t\tconsole.warn('THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.');\n\t\t\tthis.setUsage(value === true ? DynamicDrawUsage : StaticDrawUsage);\n\t\t\treturn this;\n\t\t},\n\t\tcopyIndicesArray: function copyIndicesArray()\n\t\t/* indices */\n\t\t{\n\t\t\tconsole.error('THREE.BufferAttribute: .copyIndicesArray() has been removed.');\n\t\t},\n\t\tsetArray: function setArray()\n\t\t/* array */\n\t\t{\n\t\t\tconsole.error('THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers');\n\t\t}\n\t});\n\tObject.assign(BufferGeometry.prototype, {\n\t\taddIndex: function addIndex(index) {\n\t\t\tconsole.warn('THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().');\n\t\t\tthis.setIndex(index);\n\t\t},\n\t\taddAttribute: function addAttribute(name, attribute) {\n\t\t\tconsole.warn('THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().');\n\n\t\t\tif (!(attribute && attribute.isBufferAttribute) && !(attribute && attribute.isInterleavedBufferAttribute)) {\n\t\t\t\tconsole.warn('THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).');\n\t\t\t\treturn this.setAttribute(name, new BufferAttribute(arguments[1], arguments[2]));\n\t\t\t}\n\n\t\t\tif (name === 'index') {\n\t\t\t\tconsole.warn('THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.');\n\t\t\t\tthis.setIndex(attribute);\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\treturn this.setAttribute(name, attribute);\n\t\t},\n\t\taddDrawCall: function addDrawCall(start, count, indexOffset) {\n\t\t\tif (indexOffset !== undefined) {\n\t\t\t\tconsole.warn('THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.');\n\t\t\t}\n\n\t\t\tconsole.warn('THREE.BufferGeometry: .addDrawCall() is now .addGroup().');\n\t\t\tthis.addGroup(start, count);\n\t\t},\n\t\tclearDrawCalls: function clearDrawCalls() {\n\t\t\tconsole.warn('THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().');\n\t\t\tthis.clearGroups();\n\t\t},\n\t\tcomputeTangents: function computeTangents() {\n\t\t\tconsole.warn('THREE.BufferGeometry: .computeTangents() has been removed.');\n\t\t},\n\t\tcomputeOffsets: function computeOffsets() {\n\t\t\tconsole.warn('THREE.BufferGeometry: .computeOffsets() has been removed.');\n\t\t},\n\t\tremoveAttribute: function removeAttribute(name) {\n\t\t\tconsole.warn('THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().');\n\t\t\treturn this.deleteAttribute(name);\n\t\t},\n\t\tapplyMatrix: function applyMatrix(matrix) {\n\t\t\tconsole.warn('THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().');\n\t\t\treturn this.applyMatrix4(matrix);\n\t\t}\n\t});\n\tObject.defineProperties(BufferGeometry.prototype, {\n\t\tdrawcalls: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.error('THREE.BufferGeometry: .drawcalls has been renamed to .groups.');\n\t\t\t\treturn this.groups;\n\t\t\t}\n\t\t},\n\t\toffsets: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.BufferGeometry: .offsets has been renamed to .groups.');\n\t\t\t\treturn this.groups;\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperties(InstancedBufferGeometry.prototype, {\n\t\tmaxInstancedCount: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.');\n\t\t\t\treturn this.instanceCount;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.');\n\t\t\t\tthis.instanceCount = value;\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperties(Raycaster.prototype, {\n\t\tlinePrecision: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.');\n\t\t\t\treturn this.params.Line.threshold;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.');\n\t\t\t\tthis.params.Line.threshold = value;\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperties(InterleavedBuffer.prototype, {\n\t\tdynamic: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.');\n\t\t\t\treturn this.usage === DynamicDrawUsage;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.');\n\t\t\t\tthis.setUsage(value);\n\t\t\t}\n\t\t}\n\t});\n\tObject.assign(InterleavedBuffer.prototype, {\n\t\tsetDynamic: function setDynamic(value) {\n\t\t\tconsole.warn('THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.');\n\t\t\tthis.setUsage(value === true ? DynamicDrawUsage : StaticDrawUsage);\n\t\t\treturn this;\n\t\t},\n\t\tsetArray: function setArray()\n\t\t/* array */\n\t\t{\n\t\t\tconsole.error('THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers');\n\t\t}\n\t}); //\n\n\tObject.assign(ExtrudeBufferGeometry.prototype, {\n\t\tgetArrays: function getArrays() {\n\t\t\tconsole.error('THREE.ExtrudeBufferGeometry: .getArrays() has been removed.');\n\t\t},\n\t\taddShapeList: function addShapeList() {\n\t\t\tconsole.error('THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.');\n\t\t},\n\t\taddShape: function addShape() {\n\t\t\tconsole.error('THREE.ExtrudeBufferGeometry: .addShape() has been removed.');\n\t\t}\n\t}); //\n\n\tObject.assign(Scene.prototype, {\n\t\tdispose: function dispose() {\n\t\t\tconsole.error('THREE.Scene: .dispose() has been removed.');\n\t\t}\n\t}); //\n\n\tObject.defineProperties(Uniform.prototype, {\n\t\tdynamic: {\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.');\n\t\t\t}\n\t\t},\n\t\tonUpdate: {\n\t\t\tvalue: function value() {\n\t\t\t\tconsole.warn('THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.');\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t}); //\n\n\tObject.defineProperties(Material.prototype, {\n\t\twrapAround: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.Material: .wrapAround has been removed.');\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.Material: .wrapAround has been removed.');\n\t\t\t}\n\t\t},\n\t\toverdraw: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.Material: .overdraw has been removed.');\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.Material: .overdraw has been removed.');\n\t\t\t}\n\t\t},\n\t\twrapRGB: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.Material: .wrapRGB has been removed.');\n\t\t\t\treturn new Color();\n\t\t\t}\n\t\t},\n\t\tshading: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.error('THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.');\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.');\n\t\t\t\tthis.flatShading = value === FlatShading;\n\t\t\t}\n\t\t},\n\t\tstencilMask: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.');\n\t\t\t\treturn this.stencilFuncMask;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.');\n\t\t\t\tthis.stencilFuncMask = value;\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperties(MeshPhongMaterial.prototype, {\n\t\tmetal: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.');\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead');\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperties(MeshPhysicalMaterial.prototype, {\n\t\ttransparency: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.');\n\t\t\t\treturn this.transmission;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.');\n\t\t\t\tthis.transmission = value;\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperties(ShaderMaterial.prototype, {\n\t\tderivatives: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.');\n\t\t\t\treturn this.extensions.derivatives;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.');\n\t\t\t\tthis.extensions.derivatives = value;\n\t\t\t}\n\t\t}\n\t}); //\n\n\tObject.assign(WebGLRenderer.prototype, {\n\t\tclearTarget: function clearTarget(renderTarget, color, depth, stencil) {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.');\n\t\t\tthis.setRenderTarget(renderTarget);\n\t\t\tthis.clear(color, depth, stencil);\n\t\t},\n\t\tanimate: function animate(callback) {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .animate() is now .setAnimationLoop().');\n\t\t\tthis.setAnimationLoop(callback);\n\t\t},\n\t\tgetCurrentRenderTarget: function getCurrentRenderTarget() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().');\n\t\t\treturn this.getRenderTarget();\n\t\t},\n\t\tgetMaxAnisotropy: function getMaxAnisotropy() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().');\n\t\t\treturn this.capabilities.getMaxAnisotropy();\n\t\t},\n\t\tgetPrecision: function getPrecision() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.');\n\t\t\treturn this.capabilities.precision;\n\t\t},\n\t\tresetGLState: function resetGLState() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .resetGLState() is now .state.reset().');\n\t\t\treturn this.state.reset();\n\t\t},\n\t\tsupportsFloatTextures: function supportsFloatTextures() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).');\n\t\t\treturn this.extensions.get('OES_texture_float');\n\t\t},\n\t\tsupportsHalfFloatTextures: function supportsHalfFloatTextures() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).');\n\t\t\treturn this.extensions.get('OES_texture_half_float');\n\t\t},\n\t\tsupportsStandardDerivatives: function supportsStandardDerivatives() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).');\n\t\t\treturn this.extensions.get('OES_standard_derivatives');\n\t\t},\n\t\tsupportsCompressedTextureS3TC: function supportsCompressedTextureS3TC() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).');\n\t\t\treturn this.extensions.get('WEBGL_compressed_texture_s3tc');\n\t\t},\n\t\tsupportsCompressedTexturePVRTC: function supportsCompressedTexturePVRTC() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).');\n\t\t\treturn this.extensions.get('WEBGL_compressed_texture_pvrtc');\n\t\t},\n\t\tsupportsBlendMinMax: function supportsBlendMinMax() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).');\n\t\t\treturn this.extensions.get('EXT_blend_minmax');\n\t\t},\n\t\tsupportsVertexTextures: function supportsVertexTextures() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.');\n\t\t\treturn this.capabilities.vertexTextures;\n\t\t},\n\t\tsupportsInstancedArrays: function supportsInstancedArrays() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).');\n\t\t\treturn this.extensions.get('ANGLE_instanced_arrays');\n\t\t},\n\t\tenableScissorTest: function enableScissorTest(boolean) {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().');\n\t\t\tthis.setScissorTest(boolean);\n\t\t},\n\t\tinitMaterial: function initMaterial() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .initMaterial() has been removed.');\n\t\t},\n\t\taddPrePlugin: function addPrePlugin() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .addPrePlugin() has been removed.');\n\t\t},\n\t\taddPostPlugin: function addPostPlugin() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .addPostPlugin() has been removed.');\n\t\t},\n\t\tupdateShadowMap: function updateShadowMap() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .updateShadowMap() has been removed.');\n\t\t},\n\t\tsetFaceCulling: function setFaceCulling() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .setFaceCulling() has been removed.');\n\t\t},\n\t\tallocTextureUnit: function allocTextureUnit() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .allocTextureUnit() has been removed.');\n\t\t},\n\t\tsetTexture: function setTexture() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .setTexture() has been removed.');\n\t\t},\n\t\tsetTexture2D: function setTexture2D() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .setTexture2D() has been removed.');\n\t\t},\n\t\tsetTextureCube: function setTextureCube() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .setTextureCube() has been removed.');\n\t\t},\n\t\tgetActiveMipMapLevel: function getActiveMipMapLevel() {\n\t\t\tconsole.warn('THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().');\n\t\t\treturn this.getActiveMipmapLevel();\n\t\t}\n\t});\n\tObject.defineProperties(WebGLRenderer.prototype, {\n\t\tshadowMapEnabled: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.shadowMap.enabled;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.');\n\t\t\t\tthis.shadowMap.enabled = value;\n\t\t\t}\n\t\t},\n\t\tshadowMapType: {\n\t\t\tget: function get() {\n\t\t\t\treturn this.shadowMap.type;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.');\n\t\t\t\tthis.shadowMap.type = value;\n\t\t\t}\n\t\t},\n\t\tshadowMapCullFace: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.');\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\tset: function set()\n\t\t\t/* value */\n\t\t\t{\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.');\n\t\t\t}\n\t\t},\n\t\tcontext: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.');\n\t\t\t\treturn this.getContext();\n\t\t\t}\n\t\t},\n\t\tvr: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .vr has been renamed to .xr');\n\t\t\t\treturn this.xr;\n\t\t\t}\n\t\t},\n\t\tgammaInput: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.');\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.');\n\t\t\t}\n\t\t},\n\t\tgammaOutput: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.');\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.');\n\t\t\t\tthis.outputEncoding = value === true ? sRGBEncoding : LinearEncoding;\n\t\t\t}\n\t\t},\n\t\ttoneMappingWhitePoint: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.');\n\t\t\t\treturn 1.0;\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.');\n\t\t\t}\n\t\t}\n\t});\n\tObject.defineProperties(WebGLShadowMap.prototype, {\n\t\tcullFace: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.');\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\tset: function set()\n\t\t\t/* cullFace */\n\t\t\t{\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.');\n\t\t\t}\n\t\t},\n\t\trenderReverseSided: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.');\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.');\n\t\t\t}\n\t\t},\n\t\trenderSingleSided: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.');\n\t\t\t\treturn undefined;\n\t\t\t},\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.');\n\t\t\t}\n\t\t}\n\t});\n\tfunction WebGLRenderTargetCube(width, height, options) {\n\t\tconsole.warn('THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).');\n\t\treturn new WebGLCubeRenderTarget(width, options);\n\t} //\n\n\tObject.defineProperties(WebGLRenderTarget.prototype, {\n\t\twrapS: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.');\n\t\t\t\treturn this.texture.wrapS;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.');\n\t\t\t\tthis.texture.wrapS = value;\n\t\t\t}\n\t\t},\n\t\twrapT: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.');\n\t\t\t\treturn this.texture.wrapT;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.');\n\t\t\t\tthis.texture.wrapT = value;\n\t\t\t}\n\t\t},\n\t\tmagFilter: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.');\n\t\t\t\treturn this.texture.magFilter;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.');\n\t\t\t\tthis.texture.magFilter = value;\n\t\t\t}\n\t\t},\n\t\tminFilter: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.');\n\t\t\t\treturn this.texture.minFilter;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.');\n\t\t\t\tthis.texture.minFilter = value;\n\t\t\t}\n\t\t},\n\t\tanisotropy: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.');\n\t\t\t\treturn this.texture.anisotropy;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.');\n\t\t\t\tthis.texture.anisotropy = value;\n\t\t\t}\n\t\t},\n\t\toffset: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .offset is now .texture.offset.');\n\t\t\t\treturn this.texture.offset;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .offset is now .texture.offset.');\n\t\t\t\tthis.texture.offset = value;\n\t\t\t}\n\t\t},\n\t\trepeat: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .repeat is now .texture.repeat.');\n\t\t\t\treturn this.texture.repeat;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .repeat is now .texture.repeat.');\n\t\t\t\tthis.texture.repeat = value;\n\t\t\t}\n\t\t},\n\t\tformat: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .format is now .texture.format.');\n\t\t\t\treturn this.texture.format;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .format is now .texture.format.');\n\t\t\t\tthis.texture.format = value;\n\t\t\t}\n\t\t},\n\t\ttype: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .type is now .texture.type.');\n\t\t\t\treturn this.texture.type;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .type is now .texture.type.');\n\t\t\t\tthis.texture.type = value;\n\t\t\t}\n\t\t},\n\t\tgenerateMipmaps: {\n\t\t\tget: function get() {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.');\n\t\t\t\treturn this.texture.generateMipmaps;\n\t\t\t},\n\t\t\tset: function set(value) {\n\t\t\t\tconsole.warn('THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.');\n\t\t\t\tthis.texture.generateMipmaps = value;\n\t\t\t}\n\t\t}\n\t}); //\n\n\tObject.defineProperties(Audio.prototype, {\n\t\tload: {\n\t\t\tvalue: function value(file) {\n\t\t\t\tconsole.warn('THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.');\n\t\t\t\tvar scope = this;\n\t\t\t\tvar audioLoader = new AudioLoader();\n\t\t\t\taudioLoader.load(file, function (buffer) {\n\t\t\t\t\tscope.setBuffer(buffer);\n\t\t\t\t});\n\t\t\t\treturn this;\n\t\t\t}\n\t\t},\n\t\tstartTime: {\n\t\t\tset: function set() {\n\t\t\t\tconsole.warn('THREE.Audio: .startTime is now .play( delay ).');\n\t\t\t}\n\t\t}\n\t});\n\n\tAudioAnalyser.prototype.getData = function () {\n\t\tconsole.warn('THREE.AudioAnalyser: .getData() is now .getFrequencyData().');\n\t\treturn this.getFrequencyData();\n\t}; //\n\n\n\tCubeCamera.prototype.updateCubeMap = function (renderer, scene) {\n\t\tconsole.warn('THREE.CubeCamera: .updateCubeMap() is now .update().');\n\t\treturn this.update(renderer, scene);\n\t};\n\n\tCubeCamera.prototype.clear = function (renderer, color, depth, stencil) {\n\t\tconsole.warn('THREE.CubeCamera: .clear() is now .renderTarget.clear().');\n\t\treturn this.renderTarget.clear(renderer, color, depth, stencil);\n\t}; //\n\n\n\tvar GeometryUtils = {\n\t\tmerge: function merge(geometry1, geometry2, materialIndexOffset) {\n\t\t\tconsole.warn('THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.');\n\t\t\tvar matrix;\n\n\t\t\tif (geometry2.isMesh) {\n\t\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\t\t\t\tmatrix = geometry2.matrix;\n\t\t\t\tgeometry2 = geometry2.geometry;\n\t\t\t}\n\n\t\t\tgeometry1.merge(geometry2, matrix, materialIndexOffset);\n\t\t},\n\t\tcenter: function center(geometry) {\n\t\t\tconsole.warn('THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.');\n\t\t\treturn geometry.center();\n\t\t}\n\t};\n\tImageUtils.crossOrigin = undefined;\n\n\tImageUtils.loadTexture = function (url, mapping, onLoad, onError) {\n\t\tconsole.warn('THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.');\n\t\tvar loader = new TextureLoader();\n\t\tloader.setCrossOrigin(this.crossOrigin);\n\t\tvar texture = loader.load(url, onLoad, undefined, onError);\n\t\tif (mapping) texture.mapping = mapping;\n\t\treturn texture;\n\t};\n\n\tImageUtils.loadTextureCube = function (urls, mapping, onLoad, onError) {\n\t\tconsole.warn('THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.');\n\t\tvar loader = new CubeTextureLoader();\n\t\tloader.setCrossOrigin(this.crossOrigin);\n\t\tvar texture = loader.load(urls, onLoad, undefined, onError);\n\t\tif (mapping) texture.mapping = mapping;\n\t\treturn texture;\n\t};\n\n\tImageUtils.loadCompressedTexture = function () {\n\t\tconsole.error('THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.');\n\t};\n\n\tImageUtils.loadCompressedTextureCube = function () {\n\t\tconsole.error('THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.');\n\t}; //\n\n\n\tfunction CanvasRenderer() {\n\t\tconsole.error('THREE.CanvasRenderer has been removed');\n\t} //\n\n\tfunction JSONLoader() {\n\t\tconsole.error('THREE.JSONLoader has been removed.');\n\t} //\n\n\tvar SceneUtils = {\n\t\tcreateMultiMaterialObject: function createMultiMaterialObject()\n\t\t/* geometry, materials */\n\t\t{\n\t\t\tconsole.error('THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js');\n\t\t},\n\t\tdetach: function detach()\n\t\t/* child, parent, scene */\n\t\t{\n\t\t\tconsole.error('THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js');\n\t\t},\n\t\tattach: function attach()\n\t\t/* child, scene, parent */\n\t\t{\n\t\t\tconsole.error('THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js');\n\t\t}\n\t}; //\n\n\tfunction LensFlare() {\n\t\tconsole.error('THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js');\n\t}\n\n\tif (typeof __THREE_DEVTOOLS__ !== 'undefined') {\n\t\t/* eslint-disable no-undef */\n\t\t__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('register', {\n\t\t\tdetail: {\n\t\t\t\trevision: REVISION\n\t\t\t}\n\t\t}));\n\t\t/* eslint-enable no-undef */\n\n\t}\n\n\texports.ACESFilmicToneMapping = ACESFilmicToneMapping;\n\texports.AddEquation = AddEquation;\n\texports.AddOperation = AddOperation;\n\texports.AdditiveAnimationBlendMode = AdditiveAnimationBlendMode;\n\texports.AdditiveBlending = AdditiveBlending;\n\texports.AlphaFormat = AlphaFormat;\n\texports.AlwaysDepth = AlwaysDepth;\n\texports.AlwaysStencilFunc = AlwaysStencilFunc;\n\texports.AmbientLight = AmbientLight;\n\texports.AmbientLightProbe = AmbientLightProbe;\n\texports.AnimationClip = AnimationClip;\n\texports.AnimationLoader = AnimationLoader;\n\texports.AnimationMixer = AnimationMixer;\n\texports.AnimationObjectGroup = AnimationObjectGroup;\n\texports.AnimationUtils = AnimationUtils;\n\texports.ArcCurve = ArcCurve;\n\texports.ArrayCamera = ArrayCamera;\n\texports.ArrowHelper = ArrowHelper;\n\texports.Audio = Audio;\n\texports.AudioAnalyser = AudioAnalyser;\n\texports.AudioContext = AudioContext;\n\texports.AudioListener = AudioListener;\n\texports.AudioLoader = AudioLoader;\n\texports.AxesHelper = AxesHelper;\n\texports.AxisHelper = AxisHelper;\n\texports.BackSide = BackSide;\n\texports.BasicDepthPacking = BasicDepthPacking;\n\texports.BasicShadowMap = BasicShadowMap;\n\texports.BinaryTextureLoader = BinaryTextureLoader;\n\texports.Bone = Bone;\n\texports.BooleanKeyframeTrack = BooleanKeyframeTrack;\n\texports.BoundingBoxHelper = BoundingBoxHelper;\n\texports.Box2 = Box2;\n\texports.Box3 = Box3;\n\texports.Box3Helper = Box3Helper;\n\texports.BoxBufferGeometry = BoxBufferGeometry;\n\texports.BoxGeometry = BoxGeometry;\n\texports.BoxHelper = BoxHelper;\n\texports.BufferAttribute = BufferAttribute;\n\texports.BufferGeometry = BufferGeometry;\n\texports.BufferGeometryLoader = BufferGeometryLoader;\n\texports.ByteType = ByteType;\n\texports.Cache = Cache;\n\texports.Camera = Camera;\n\texports.CameraHelper = CameraHelper;\n\texports.CanvasRenderer = CanvasRenderer;\n\texports.CanvasTexture = CanvasTexture;\n\texports.CatmullRomCurve3 = CatmullRomCurve3;\n\texports.CineonToneMapping = CineonToneMapping;\n\texports.CircleBufferGeometry = CircleBufferGeometry;\n\texports.CircleGeometry = CircleGeometry;\n\texports.ClampToEdgeWrapping = ClampToEdgeWrapping;\n\texports.Clock = Clock;\n\texports.ClosedSplineCurve3 = ClosedSplineCurve3;\n\texports.Color = Color;\n\texports.ColorKeyframeTrack = ColorKeyframeTrack;\n\texports.CompressedTexture = CompressedTexture;\n\texports.CompressedTextureLoader = CompressedTextureLoader;\n\texports.ConeBufferGeometry = ConeBufferGeometry;\n\texports.ConeGeometry = ConeGeometry;\n\texports.CubeCamera = CubeCamera;\n\texports.CubeGeometry = BoxGeometry;\n\texports.CubeReflectionMapping = CubeReflectionMapping;\n\texports.CubeRefractionMapping = CubeRefractionMapping;\n\texports.CubeTexture = CubeTexture;\n\texports.CubeTextureLoader = CubeTextureLoader;\n\texports.CubeUVReflectionMapping = CubeUVReflectionMapping;\n\texports.CubeUVRefractionMapping = CubeUVRefractionMapping;\n\texports.CubicBezierCurve = CubicBezierCurve;\n\texports.CubicBezierCurve3 = CubicBezierCurve3;\n\texports.CubicInterpolant = CubicInterpolant;\n\texports.CullFaceBack = CullFaceBack;\n\texports.CullFaceFront = CullFaceFront;\n\texports.CullFaceFrontBack = CullFaceFrontBack;\n\texports.CullFaceNone = CullFaceNone;\n\texports.Curve = Curve;\n\texports.CurvePath = CurvePath;\n\texports.CustomBlending = CustomBlending;\n\texports.CustomToneMapping = CustomToneMapping;\n\texports.CylinderBufferGeometry = CylinderBufferGeometry;\n\texports.CylinderGeometry = CylinderGeometry;\n\texports.Cylindrical = Cylindrical;\n\texports.DataTexture = DataTexture;\n\texports.DataTexture2DArray = DataTexture2DArray;\n\texports.DataTexture3D = DataTexture3D;\n\texports.DataTextureLoader = DataTextureLoader;\n\texports.DataUtils = DataUtils;\n\texports.DecrementStencilOp = DecrementStencilOp;\n\texports.DecrementWrapStencilOp = DecrementWrapStencilOp;\n\texports.DefaultLoadingManager = DefaultLoadingManager;\n\texports.DepthFormat = DepthFormat;\n\texports.DepthStencilFormat = DepthStencilFormat;\n\texports.DepthTexture = DepthTexture;\n\texports.DirectionalLight = DirectionalLight;\n\texports.DirectionalLightHelper = DirectionalLightHelper;\n\texports.DiscreteInterpolant = DiscreteInterpolant;\n\texports.DodecahedronBufferGeometry = DodecahedronBufferGeometry;\n\texports.DodecahedronGeometry = DodecahedronGeometry;\n\texports.DoubleSide = DoubleSide;\n\texports.DstAlphaFactor = DstAlphaFactor;\n\texports.DstColorFactor = DstColorFactor;\n\texports.DynamicBufferAttribute = DynamicBufferAttribute;\n\texports.DynamicCopyUsage = DynamicCopyUsage;\n\texports.DynamicDrawUsage = DynamicDrawUsage;\n\texports.DynamicReadUsage = DynamicReadUsage;\n\texports.EdgesGeometry = EdgesGeometry;\n\texports.EdgesHelper = EdgesHelper;\n\texports.EllipseCurve = EllipseCurve;\n\texports.EqualDepth = EqualDepth;\n\texports.EqualStencilFunc = EqualStencilFunc;\n\texports.EquirectangularReflectionMapping = EquirectangularReflectionMapping;\n\texports.EquirectangularRefractionMapping = EquirectangularRefractionMapping;\n\texports.Euler = Euler;\n\texports.EventDispatcher = EventDispatcher;\n\texports.ExtrudeBufferGeometry = ExtrudeBufferGeometry;\n\texports.ExtrudeGeometry = ExtrudeGeometry;\n\texports.Face3 = Face3;\n\texports.Face4 = Face4;\n\texports.FaceColors = FaceColors;\n\texports.FileLoader = FileLoader;\n\texports.FlatShading = FlatShading;\n\texports.Float16BufferAttribute = Float16BufferAttribute;\n\texports.Float32Attribute = Float32Attribute;\n\texports.Float32BufferAttribute = Float32BufferAttribute;\n\texports.Float64Attribute = Float64Attribute;\n\texports.Float64BufferAttribute = Float64BufferAttribute;\n\texports.FloatType = FloatType;\n\texports.Fog = Fog;\n\texports.FogExp2 = FogExp2;\n\texports.Font = Font;\n\texports.FontLoader = FontLoader;\n\texports.FrontSide = FrontSide;\n\texports.Frustum = Frustum;\n\texports.GLBufferAttribute = GLBufferAttribute;\n\texports.GLSL1 = GLSL1;\n\texports.GLSL3 = GLSL3;\n\texports.GammaEncoding = GammaEncoding;\n\texports.Geometry = Geometry;\n\texports.GeometryUtils = GeometryUtils;\n\texports.GreaterDepth = GreaterDepth;\n\texports.GreaterEqualDepth = GreaterEqualDepth;\n\texports.GreaterEqualStencilFunc = GreaterEqualStencilFunc;\n\texports.GreaterStencilFunc = GreaterStencilFunc;\n\texports.GridHelper = GridHelper;\n\texports.Group = Group;\n\texports.HalfFloatType = HalfFloatType;\n\texports.HemisphereLight = HemisphereLight;\n\texports.HemisphereLightHelper = HemisphereLightHelper;\n\texports.HemisphereLightProbe = HemisphereLightProbe;\n\texports.IcosahedronBufferGeometry = IcosahedronBufferGeometry;\n\texports.IcosahedronGeometry = IcosahedronGeometry;\n\texports.ImageBitmapLoader = ImageBitmapLoader;\n\texports.ImageLoader = ImageLoader;\n\texports.ImageUtils = ImageUtils;\n\texports.ImmediateRenderObject = ImmediateRenderObject;\n\texports.IncrementStencilOp = IncrementStencilOp;\n\texports.IncrementWrapStencilOp = IncrementWrapStencilOp;\n\texports.InstancedBufferAttribute = InstancedBufferAttribute;\n\texports.InstancedBufferGeometry = InstancedBufferGeometry;\n\texports.InstancedInterleavedBuffer = InstancedInterleavedBuffer;\n\texports.InstancedMesh = InstancedMesh;\n\texports.Int16Attribute = Int16Attribute;\n\texports.Int16BufferAttribute = Int16BufferAttribute;\n\texports.Int32Attribute = Int32Attribute;\n\texports.Int32BufferAttribute = Int32BufferAttribute;\n\texports.Int8Attribute = Int8Attribute;\n\texports.Int8BufferAttribute = Int8BufferAttribute;\n\texports.IntType = IntType;\n\texports.InterleavedBuffer = InterleavedBuffer;\n\texports.InterleavedBufferAttribute = InterleavedBufferAttribute;\n\texports.Interpolant = Interpolant;\n\texports.InterpolateDiscrete = InterpolateDiscrete;\n\texports.InterpolateLinear = InterpolateLinear;\n\texports.InterpolateSmooth = InterpolateSmooth;\n\texports.InvertStencilOp = InvertStencilOp;\n\texports.JSONLoader = JSONLoader;\n\texports.KeepStencilOp = KeepStencilOp;\n\texports.KeyframeTrack = KeyframeTrack;\n\texports.LOD = LOD;\n\texports.LatheBufferGeometry = LatheBufferGeometry;\n\texports.LatheGeometry = LatheGeometry;\n\texports.Layers = Layers;\n\texports.LensFlare = LensFlare;\n\texports.LessDepth = LessDepth;\n\texports.LessEqualDepth = LessEqualDepth;\n\texports.LessEqualStencilFunc = LessEqualStencilFunc;\n\texports.LessStencilFunc = LessStencilFunc;\n\texports.Light = Light;\n\texports.LightProbe = LightProbe;\n\texports.Line = Line;\n\texports.Line3 = Line3;\n\texports.LineBasicMaterial = LineBasicMaterial;\n\texports.LineCurve = LineCurve;\n\texports.LineCurve3 = LineCurve3;\n\texports.LineDashedMaterial = LineDashedMaterial;\n\texports.LineLoop = LineLoop;\n\texports.LinePieces = LinePieces;\n\texports.LineSegments = LineSegments;\n\texports.LineStrip = LineStrip;\n\texports.LinearEncoding = LinearEncoding;\n\texports.LinearFilter = LinearFilter;\n\texports.LinearInterpolant = LinearInterpolant;\n\texports.LinearMipMapLinearFilter = LinearMipMapLinearFilter;\n\texports.LinearMipMapNearestFilter = LinearMipMapNearestFilter;\n\texports.LinearMipmapLinearFilter = LinearMipmapLinearFilter;\n\texports.LinearMipmapNearestFilter = LinearMipmapNearestFilter;\n\texports.LinearToneMapping = LinearToneMapping;\n\texports.Loader = Loader;\n\texports.LoaderUtils = LoaderUtils;\n\texports.LoadingManager = LoadingManager;\n\texports.LogLuvEncoding = LogLuvEncoding;\n\texports.LoopOnce = LoopOnce;\n\texports.LoopPingPong = LoopPingPong;\n\texports.LoopRepeat = LoopRepeat;\n\texports.LuminanceAlphaFormat = LuminanceAlphaFormat;\n\texports.LuminanceFormat = LuminanceFormat;\n\texports.MOUSE = MOUSE;\n\texports.Material = Material;\n\texports.MaterialLoader = MaterialLoader;\n\texports.Math = MathUtils;\n\texports.MathUtils = MathUtils;\n\texports.Matrix3 = Matrix3;\n\texports.Matrix4 = Matrix4;\n\texports.MaxEquation = MaxEquation;\n\texports.Mesh = Mesh;\n\texports.MeshBasicMaterial = MeshBasicMaterial;\n\texports.MeshDepthMaterial = MeshDepthMaterial;\n\texports.MeshDistanceMaterial = MeshDistanceMaterial;\n\texports.MeshFaceMaterial = MeshFaceMaterial;\n\texports.MeshLambertMaterial = MeshLambertMaterial;\n\texports.MeshMatcapMaterial = MeshMatcapMaterial;\n\texports.MeshNormalMaterial = MeshNormalMaterial;\n\texports.MeshPhongMaterial = MeshPhongMaterial;\n\texports.MeshPhysicalMaterial = MeshPhysicalMaterial;\n\texports.MeshStandardMaterial = MeshStandardMaterial;\n\texports.MeshToonMaterial = MeshToonMaterial;\n\texports.MinEquation = MinEquation;\n\texports.MirroredRepeatWrapping = MirroredRepeatWrapping;\n\texports.MixOperation = MixOperation;\n\texports.MultiMaterial = MultiMaterial;\n\texports.MultiplyBlending = MultiplyBlending;\n\texports.MultiplyOperation = MultiplyOperation;\n\texports.NearestFilter = NearestFilter;\n\texports.NearestMipMapLinearFilter = NearestMipMapLinearFilter;\n\texports.NearestMipMapNearestFilter = NearestMipMapNearestFilter;\n\texports.NearestMipmapLinearFilter = NearestMipmapLinearFilter;\n\texports.NearestMipmapNearestFilter = NearestMipmapNearestFilter;\n\texports.NeverDepth = NeverDepth;\n\texports.NeverStencilFunc = NeverStencilFunc;\n\texports.NoBlending = NoBlending;\n\texports.NoColors = NoColors;\n\texports.NoToneMapping = NoToneMapping;\n\texports.NormalAnimationBlendMode = NormalAnimationBlendMode;\n\texports.NormalBlending = NormalBlending;\n\texports.NotEqualDepth = NotEqualDepth;\n\texports.NotEqualStencilFunc = NotEqualStencilFunc;\n\texports.NumberKeyframeTrack = NumberKeyframeTrack;\n\texports.Object3D = Object3D;\n\texports.ObjectLoader = ObjectLoader;\n\texports.ObjectSpaceNormalMap = ObjectSpaceNormalMap;\n\texports.OctahedronBufferGeometry = OctahedronBufferGeometry;\n\texports.OctahedronGeometry = OctahedronGeometry;\n\texports.OneFactor = OneFactor;\n\texports.OneMinusDstAlphaFactor = OneMinusDstAlphaFactor;\n\texports.OneMinusDstColorFactor = OneMinusDstColorFactor;\n\texports.OneMinusSrcAlphaFactor = OneMinusSrcAlphaFactor;\n\texports.OneMinusSrcColorFactor = OneMinusSrcColorFactor;\n\texports.OrthographicCamera = OrthographicCamera;\n\texports.PCFShadowMap = PCFShadowMap;\n\texports.PCFSoftShadowMap = PCFSoftShadowMap;\n\texports.PMREMGenerator = PMREMGenerator;\n\texports.ParametricBufferGeometry = ParametricBufferGeometry;\n\texports.ParametricGeometry = ParametricGeometry;\n\texports.Particle = Particle;\n\texports.ParticleBasicMaterial = ParticleBasicMaterial;\n\texports.ParticleSystem = ParticleSystem;\n\texports.ParticleSystemMaterial = ParticleSystemMaterial;\n\texports.Path = Path;\n\texports.PerspectiveCamera = PerspectiveCamera;\n\texports.Plane = Plane;\n\texports.PlaneBufferGeometry = PlaneBufferGeometry;\n\texports.PlaneGeometry = PlaneGeometry;\n\texports.PlaneHelper = PlaneHelper;\n\texports.PointCloud = PointCloud;\n\texports.PointCloudMaterial = PointCloudMaterial;\n\texports.PointLight = PointLight;\n\texports.PointLightHelper = PointLightHelper;\n\texports.Points = Points;\n\texports.PointsMaterial = PointsMaterial;\n\texports.PolarGridHelper = PolarGridHelper;\n\texports.PolyhedronBufferGeometry = PolyhedronBufferGeometry;\n\texports.PolyhedronGeometry = PolyhedronGeometry;\n\texports.PositionalAudio = PositionalAudio;\n\texports.PropertyBinding = PropertyBinding;\n\texports.PropertyMixer = PropertyMixer;\n\texports.QuadraticBezierCurve = QuadraticBezierCurve;\n\texports.QuadraticBezierCurve3 = QuadraticBezierCurve3;\n\texports.Quaternion = Quaternion;\n\texports.QuaternionKeyframeTrack = QuaternionKeyframeTrack;\n\texports.QuaternionLinearInterpolant = QuaternionLinearInterpolant;\n\texports.REVISION = REVISION;\n\texports.RGBADepthPacking = RGBADepthPacking;\n\texports.RGBAFormat = RGBAFormat;\n\texports.RGBAIntegerFormat = RGBAIntegerFormat;\n\texports.RGBA_ASTC_10x10_Format = RGBA_ASTC_10x10_Format;\n\texports.RGBA_ASTC_10x5_Format = RGBA_ASTC_10x5_Format;\n\texports.RGBA_ASTC_10x6_Format = RGBA_ASTC_10x6_Format;\n\texports.RGBA_ASTC_10x8_Format = RGBA_ASTC_10x8_Format;\n\texports.RGBA_ASTC_12x10_Format = RGBA_ASTC_12x10_Format;\n\texports.RGBA_ASTC_12x12_Format = RGBA_ASTC_12x12_Format;\n\texports.RGBA_ASTC_4x4_Format = RGBA_ASTC_4x4_Format;\n\texports.RGBA_ASTC_5x4_Format = RGBA_ASTC_5x4_Format;\n\texports.RGBA_ASTC_5x5_Format = RGBA_ASTC_5x5_Format;\n\texports.RGBA_ASTC_6x5_Format = RGBA_ASTC_6x5_Format;\n\texports.RGBA_ASTC_6x6_Format = RGBA_ASTC_6x6_Format;\n\texports.RGBA_ASTC_8x5_Format = RGBA_ASTC_8x5_Format;\n\texports.RGBA_ASTC_8x6_Format = RGBA_ASTC_8x6_Format;\n\texports.RGBA_ASTC_8x8_Format = RGBA_ASTC_8x8_Format;\n\texports.RGBA_BPTC_Format = RGBA_BPTC_Format;\n\texports.RGBA_ETC2_EAC_Format = RGBA_ETC2_EAC_Format;\n\texports.RGBA_PVRTC_2BPPV1_Format = RGBA_PVRTC_2BPPV1_Format;\n\texports.RGBA_PVRTC_4BPPV1_Format = RGBA_PVRTC_4BPPV1_Format;\n\texports.RGBA_S3TC_DXT1_Format = RGBA_S3TC_DXT1_Format;\n\texports.RGBA_S3TC_DXT3_Format = RGBA_S3TC_DXT3_Format;\n\texports.RGBA_S3TC_DXT5_Format = RGBA_S3TC_DXT5_Format;\n\texports.RGBDEncoding = RGBDEncoding;\n\texports.RGBEEncoding = RGBEEncoding;\n\texports.RGBEFormat = RGBEFormat;\n\texports.RGBFormat = RGBFormat;\n\texports.RGBIntegerFormat = RGBIntegerFormat;\n\texports.RGBM16Encoding = RGBM16Encoding;\n\texports.RGBM7Encoding = RGBM7Encoding;\n\texports.RGB_ETC1_Format = RGB_ETC1_Format;\n\texports.RGB_ETC2_Format = RGB_ETC2_Format;\n\texports.RGB_PVRTC_2BPPV1_Format = RGB_PVRTC_2BPPV1_Format;\n\texports.RGB_PVRTC_4BPPV1_Format = RGB_PVRTC_4BPPV1_Format;\n\texports.RGB_S3TC_DXT1_Format = RGB_S3TC_DXT1_Format;\n\texports.RGFormat = RGFormat;\n\texports.RGIntegerFormat = RGIntegerFormat;\n\texports.RawShaderMaterial = RawShaderMaterial;\n\texports.Ray = Ray;\n\texports.Raycaster = Raycaster;\n\texports.RectAreaLight = RectAreaLight;\n\texports.RedFormat = RedFormat;\n\texports.RedIntegerFormat = RedIntegerFormat;\n\texports.ReinhardToneMapping = ReinhardToneMapping;\n\texports.RepeatWrapping = RepeatWrapping;\n\texports.ReplaceStencilOp = ReplaceStencilOp;\n\texports.ReverseSubtractEquation = ReverseSubtractEquation;\n\texports.RingBufferGeometry = RingBufferGeometry;\n\texports.RingGeometry = RingGeometry;\n\texports.SRGB8_ALPHA8_ASTC_10x10_Format = SRGB8_ALPHA8_ASTC_10x10_Format;\n\texports.SRGB8_ALPHA8_ASTC_10x5_Format = SRGB8_ALPHA8_ASTC_10x5_Format;\n\texports.SRGB8_ALPHA8_ASTC_10x6_Format = SRGB8_ALPHA8_ASTC_10x6_Format;\n\texports.SRGB8_ALPHA8_ASTC_10x8_Format = SRGB8_ALPHA8_ASTC_10x8_Format;\n\texports.SRGB8_ALPHA8_ASTC_12x10_Format = SRGB8_ALPHA8_ASTC_12x10_Format;\n\texports.SRGB8_ALPHA8_ASTC_12x12_Format = SRGB8_ALPHA8_ASTC_12x12_Format;\n\texports.SRGB8_ALPHA8_ASTC_4x4_Format = SRGB8_ALPHA8_ASTC_4x4_Format;\n\texports.SRGB8_ALPHA8_ASTC_5x4_Format = SRGB8_ALPHA8_ASTC_5x4_Format;\n\texports.SRGB8_ALPHA8_ASTC_5x5_Format = SRGB8_ALPHA8_ASTC_5x5_Format;\n\texports.SRGB8_ALPHA8_ASTC_6x5_Format = SRGB8_ALPHA8_ASTC_6x5_Format;\n\texports.SRGB8_ALPHA8_ASTC_6x6_Format = SRGB8_ALPHA8_ASTC_6x6_Format;\n\texports.SRGB8_ALPHA8_ASTC_8x5_Format = SRGB8_ALPHA8_ASTC_8x5_Format;\n\texports.SRGB8_ALPHA8_ASTC_8x6_Format = SRGB8_ALPHA8_ASTC_8x6_Format;\n\texports.SRGB8_ALPHA8_ASTC_8x8_Format = SRGB8_ALPHA8_ASTC_8x8_Format;\n\texports.Scene = Scene;\n\texports.SceneUtils = SceneUtils;\n\texports.ShaderChunk = ShaderChunk;\n\texports.ShaderLib = ShaderLib;\n\texports.ShaderMaterial = ShaderMaterial;\n\texports.ShadowMaterial = ShadowMaterial;\n\texports.Shape = Shape;\n\texports.ShapeBufferGeometry = ShapeBufferGeometry;\n\texports.ShapeGeometry = ShapeGeometry;\n\texports.ShapePath = ShapePath;\n\texports.ShapeUtils = ShapeUtils;\n\texports.ShortType = ShortType;\n\texports.Skeleton = Skeleton;\n\texports.SkeletonHelper = SkeletonHelper;\n\texports.SkinnedMesh = SkinnedMesh;\n\texports.SmoothShading = SmoothShading;\n\texports.Sphere = Sphere;\n\texports.SphereBufferGeometry = SphereBufferGeometry;\n\texports.SphereGeometry = SphereGeometry;\n\texports.Spherical = Spherical;\n\texports.SphericalHarmonics3 = SphericalHarmonics3;\n\texports.Spline = Spline;\n\texports.SplineCurve = SplineCurve;\n\texports.SplineCurve3 = SplineCurve3;\n\texports.SpotLight = SpotLight;\n\texports.SpotLightHelper = SpotLightHelper;\n\texports.Sprite = Sprite;\n\texports.SpriteMaterial = SpriteMaterial;\n\texports.SrcAlphaFactor = SrcAlphaFactor;\n\texports.SrcAlphaSaturateFactor = SrcAlphaSaturateFactor;\n\texports.SrcColorFactor = SrcColorFactor;\n\texports.StaticCopyUsage = StaticCopyUsage;\n\texports.StaticDrawUsage = StaticDrawUsage;\n\texports.StaticReadUsage = StaticReadUsage;\n\texports.StereoCamera = StereoCamera;\n\texports.StreamCopyUsage = StreamCopyUsage;\n\texports.StreamDrawUsage = StreamDrawUsage;\n\texports.StreamReadUsage = StreamReadUsage;\n\texports.StringKeyframeTrack = StringKeyframeTrack;\n\texports.SubtractEquation = SubtractEquation;\n\texports.SubtractiveBlending = SubtractiveBlending;\n\texports.TOUCH = TOUCH;\n\texports.TangentSpaceNormalMap = TangentSpaceNormalMap;\n\texports.TetrahedronBufferGeometry = TetrahedronBufferGeometry;\n\texports.TetrahedronGeometry = TetrahedronGeometry;\n\texports.TextBufferGeometry = TextBufferGeometry;\n\texports.TextGeometry = TextGeometry;\n\texports.Texture = Texture;\n\texports.TextureLoader = TextureLoader;\n\texports.TorusBufferGeometry = TorusBufferGeometry;\n\texports.TorusGeometry = TorusGeometry;\n\texports.TorusKnotBufferGeometry = TorusKnotBufferGeometry;\n\texports.TorusKnotGeometry = TorusKnotGeometry;\n\texports.Triangle = Triangle;\n\texports.TriangleFanDrawMode = TriangleFanDrawMode;\n\texports.TriangleStripDrawMode = TriangleStripDrawMode;\n\texports.TrianglesDrawMode = TrianglesDrawMode;\n\texports.TubeBufferGeometry = TubeBufferGeometry;\n\texports.TubeGeometry = TubeGeometry;\n\texports.UVMapping = UVMapping;\n\texports.Uint16Attribute = Uint16Attribute;\n\texports.Uint16BufferAttribute = Uint16BufferAttribute;\n\texports.Uint32Attribute = Uint32Attribute;\n\texports.Uint32BufferAttribute = Uint32BufferAttribute;\n\texports.Uint8Attribute = Uint8Attribute;\n\texports.Uint8BufferAttribute = Uint8BufferAttribute;\n\texports.Uint8ClampedAttribute = Uint8ClampedAttribute;\n\texports.Uint8ClampedBufferAttribute = Uint8ClampedBufferAttribute;\n\texports.Uniform = Uniform;\n\texports.UniformsLib = UniformsLib;\n\texports.UniformsUtils = UniformsUtils;\n\texports.UnsignedByteType = UnsignedByteType;\n\texports.UnsignedInt248Type = UnsignedInt248Type;\n\texports.UnsignedIntType = UnsignedIntType;\n\texports.UnsignedShort4444Type = UnsignedShort4444Type;\n\texports.UnsignedShort5551Type = UnsignedShort5551Type;\n\texports.UnsignedShort565Type = UnsignedShort565Type;\n\texports.UnsignedShortType = UnsignedShortType;\n\texports.VSMShadowMap = VSMShadowMap;\n\texports.Vector2 = Vector2;\n\texports.Vector3 = Vector3;\n\texports.Vector4 = Vector4;\n\texports.VectorKeyframeTrack = VectorKeyframeTrack;\n\texports.Vertex = Vertex;\n\texports.VertexColors = VertexColors;\n\texports.VideoTexture = VideoTexture;\n\texports.WebGL1Renderer = WebGL1Renderer;\n\texports.WebGLCubeRenderTarget = WebGLCubeRenderTarget;\n\texports.WebGLMultisampleRenderTarget = WebGLMultisampleRenderTarget;\n\texports.WebGLRenderTarget = WebGLRenderTarget;\n\texports.WebGLRenderTargetCube = WebGLRenderTargetCube;\n\texports.WebGLRenderer = WebGLRenderer;\n\texports.WebGLUtils = WebGLUtils;\n\texports.WireframeGeometry = WireframeGeometry;\n\texports.WireframeHelper = WireframeHelper;\n\texports.WrapAroundEnding = WrapAroundEnding;\n\texports.XHRLoader = XHRLoader;\n\texports.ZeroCurvatureEnding = ZeroCurvatureEnding;\n\texports.ZeroFactor = ZeroFactor;\n\texports.ZeroSlopeEnding = ZeroSlopeEnding;\n\texports.ZeroStencilOp = ZeroStencilOp;\n\texports.sRGBEncoding = sRGBEncoding;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n"
  },
  {
    "path": "libs/three.js/build/three.module.js",
    "content": "// threejs.org/license\nconst REVISION = '124';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst FlatShading = 1;\nconst SmoothShading = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst CubeUVRefractionMapping = 307;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedShort565Type = 1019;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst RGBEFormat = RGBAFormat;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst SRGB8_ALPHA8_ASTC_4x4_Format = 37840;\nconst SRGB8_ALPHA8_ASTC_5x4_Format = 37841;\nconst SRGB8_ALPHA8_ASTC_5x5_Format = 37842;\nconst SRGB8_ALPHA8_ASTC_6x5_Format = 37843;\nconst SRGB8_ALPHA8_ASTC_6x6_Format = 37844;\nconst SRGB8_ALPHA8_ASTC_8x5_Format = 37845;\nconst SRGB8_ALPHA8_ASTC_8x6_Format = 37846;\nconst SRGB8_ALPHA8_ASTC_8x8_Format = 37847;\nconst SRGB8_ALPHA8_ASTC_10x5_Format = 37848;\nconst SRGB8_ALPHA8_ASTC_10x6_Format = 37849;\nconst SRGB8_ALPHA8_ASTC_10x8_Format = 37850;\nconst SRGB8_ALPHA8_ASTC_10x10_Format = 37851;\nconst SRGB8_ALPHA8_ASTC_12x10_Format = 37852;\nconst SRGB8_ALPHA8_ASTC_12x12_Format = 37853;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst GammaEncoding = 3007;\nconst RGBEEncoding = 3002;\nconst LogLuvEncoding = 3003;\nconst RGBM7Encoding = 3004;\nconst RGBM16Encoding = 3005;\nconst RGBDEncoding = 3006;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nfunction EventDispatcher() {}\n\nObject.assign( EventDispatcher.prototype, {\n\n\taddEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t},\n\n\thasEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t},\n\n\tremoveEventListener: function ( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nconst _lut = [];\n\nfor ( let i = 0; i < 256; i ++ ) {\n\n\t_lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n}\n\nlet _seed = 1234567;\n\nconst MathUtils = {\n\n\tDEG2RAD: Math.PI / 180,\n\tRAD2DEG: 180 / Math.PI,\n\n\tgenerateUUID: function () {\n\n\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\tconst d0 = Math.random() * 0xffffffff | 0;\n\t\tconst d1 = Math.random() * 0xffffffff | 0;\n\t\tconst d2 = Math.random() * 0xffffffff | 0;\n\t\tconst d3 = Math.random() * 0xffffffff | 0;\n\t\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\treturn uuid.toUpperCase();\n\n\t},\n\n\tclamp: function ( value, min, max ) {\n\n\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t},\n\n\t// compute euclidian modulo of m % n\n\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\teuclideanModulo: function ( n, m ) {\n\n\t\treturn ( ( n % m ) + m ) % m;\n\n\t},\n\n\t// Linear mapping from range <a1, a2> to range <b1, b2>\n\n\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t},\n\n\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\tlerp: function ( x, y, t ) {\n\n\t\treturn ( 1 - t ) * x + t * y;\n\n\t},\n\n\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\tsmoothstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * ( 3 - 2 * x );\n\n\t},\n\n\tsmootherstep: function ( x, min, max ) {\n\n\t\tif ( x <= min ) return 0;\n\t\tif ( x >= max ) return 1;\n\n\t\tx = ( x - min ) / ( max - min );\n\n\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t},\n\n\t// Random integer from <low, high> interval\n\n\trandInt: function ( low, high ) {\n\n\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t},\n\n\t// Random float from <low, high> interval\n\n\trandFloat: function ( low, high ) {\n\n\t\treturn low + Math.random() * ( high - low );\n\n\t},\n\n\t// Random float from <-range/2, range/2> interval\n\n\trandFloatSpread: function ( range ) {\n\n\t\treturn range * ( 0.5 - Math.random() );\n\n\t},\n\n\t// Deterministic pseudo-random float in the interval [ 0, 1 ]\n\n\tseededRandom: function ( s ) {\n\n\t\tif ( s !== undefined ) _seed = s % 2147483647;\n\n\t\t// Park-Miller algorithm\n\n\t\t_seed = _seed * 16807 % 2147483647;\n\n\t\treturn ( _seed - 1 ) / 2147483646;\n\n\t},\n\n\tdegToRad: function ( degrees ) {\n\n\t\treturn degrees * MathUtils.DEG2RAD;\n\n\t},\n\n\tradToDeg: function ( radians ) {\n\n\t\treturn radians * MathUtils.RAD2DEG;\n\n\t},\n\n\tisPowerOfTwo: function ( value ) {\n\n\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t},\n\n\tceilPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tfloorPowerOfTwo: function ( value ) {\n\n\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t},\n\n\tsetQuaternionFromProperEuler: function ( q, a, b, c, order ) {\n\n\t\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t\t// rotations are applied to the axes in the order specified by 'order'\n\t\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t\t// angles are in radians\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c2 = cos( b / 2 );\n\t\tconst s2 = sin( b / 2 );\n\n\t\tconst c13 = cos( ( a + c ) / 2 );\n\t\tconst s13 = sin( ( a + c ) / 2 );\n\n\t\tconst c1_3 = cos( ( a - c ) / 2 );\n\t\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\t\tconst c3_1 = cos( ( c - a ) / 2 );\n\t\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYX':\n\t\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZY':\n\t\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXZ':\n\t\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZX':\n\t\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXY':\n\t\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYZ':\n\t\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t}\n\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tObject.defineProperty( this, 'isVector2', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isMatrix3', { value: true } );\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).copy( this ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tscale( sx, sy ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tconst te = this.elements;\n\n\t\tconst a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\tconst a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\tte[ 0 ] = c * a11 + s * a21;\n\t\tte[ 3 ] = c * a12 + s * a22;\n\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nlet _canvas;\n\nconst ImageUtils = {\n\n\tgetDataURL: function ( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n};\n\nlet textureId = 0;\n\nfunction Texture( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) {\n\n\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\n\tthis.image = image;\n\tthis.mipmaps = [];\n\n\tthis.mapping = mapping;\n\n\tthis.wrapS = wrapS;\n\tthis.wrapT = wrapT;\n\n\tthis.magFilter = magFilter;\n\tthis.minFilter = minFilter;\n\n\tthis.anisotropy = anisotropy;\n\n\tthis.format = format;\n\tthis.internalFormat = null;\n\tthis.type = type;\n\n\tthis.offset = new Vector2( 0, 0 );\n\tthis.repeat = new Vector2( 1, 1 );\n\tthis.center = new Vector2( 0, 0 );\n\tthis.rotation = 0;\n\n\tthis.matrixAutoUpdate = true;\n\tthis.matrix = new Matrix3();\n\n\tthis.generateMipmaps = true;\n\tthis.premultiplyAlpha = false;\n\tthis.flipY = true;\n\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t//\n\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\tthis.encoding = encoding;\n\n\tthis.version = 0;\n\tthis.onUpdate = null;\n\n}\n\nTexture.DEFAULT_IMAGE = undefined;\nTexture.DEFAULT_MAPPING = UVMapping;\n\nTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Texture,\n\n\tisTexture: true,\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.image = source.image;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( this.image !== undefined ) {\n\n\t\t\t// TODO: Move to THREE.Image\n\n\t\t\tconst image = this.image;\n\n\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\timage.uuid = MathUtils.generateUUID(); // UGH\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\tlet url;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\t// process array of images e.g. CubeTexture\n\n\t\t\t\t\turl = [];\n\n\t\t\t\t\tfor ( let i = 0, l = image.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t// check cube texture with data textures\n\n\t\t\t\t\t\tif ( image[ i ].isDataTexture ) {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ].image ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\turl.push( serializeImage( image[ i ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// process single image\n\n\t\t\t\t\turl = serializeImage( image );\n\n\t\t\t\t}\n\n\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\turl: url\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\toutput.image = image.uuid;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t},\n\n\ttransformUv: function ( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n} );\n\nObject.defineProperty( Texture.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.prototype.slice.call( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tObject.defineProperty( this, 'isVector4', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t     ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t     ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t     ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nfunction WebGLRenderTarget( width, height, options ) {\n\n\tthis.width = width;\n\tthis.height = height;\n\n\tthis.scissor = new Vector4( 0, 0, width, height );\n\tthis.scissorTest = false;\n\n\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\toptions = options || {};\n\n\tthis.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture.image = {};\n\tthis.texture.image.width = width;\n\tthis.texture.image.height = height;\n\n\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n}\n\nWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: WebGLRenderTarget,\n\n\tisWebGLRenderTarget: true,\n\n\tsetSize: function ( width, height ) {\n\n\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\tthis.depthTexture = source.depthTexture;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nfunction WebGLMultisampleRenderTarget( width, height, options ) {\n\n\tWebGLRenderTarget.call( this, width, height, options );\n\n\tthis.samples = 4;\n\n}\n\nWebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), {\n\n\tconstructor: WebGLMultisampleRenderTarget,\n\n\tisWebGLMultisampleRenderTarget: true,\n\n\tcopy: function ( source ) {\n\n\t\tWebGLRenderTarget.prototype.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tObject.defineProperty( this, 'isQuaternion', { value: true } );\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerp( qa, qb, qm, t ) {\n\n\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tconst EPS = 0.000001;\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < EPS ) {\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q, p ) {\n\n\t\tif ( p !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t}\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tObject.defineProperty( this, 'isVector3', { value: true } );\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\treturn this.addVectors( v, w );\n\n\t\t}\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\treturn this.subVectors( v, w );\n\n\t\t}\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t}\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\treturn this.applyQuaternion( _quaternion.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v, w ) {\n\n\t\tif ( w !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\treturn this.crossVectors( v, w );\n\n\t\t}\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( MathUtils.clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index, offset ) {\n\n\t\tif ( offset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t}\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min, max ) {\n\n\t\tObject.defineProperty( this, 'isBox3', { value: true } );\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$1.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\t_box.copy( geometry.boundingBox );\n\t\t\t_box.applyMatrix4( object.matrixWorld );\n\n\t\t\tthis.union( _box );\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$1 );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$1.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0.subVectors( triangle.a, _center );\n\t\t_v1.subVectors( triangle.b, _center );\n\t\t_v2.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1, _v0 );\n\t\t_f1.subVectors( _v2, _v1 );\n\t\t_f2.subVectors( _v0, _v2 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0, _v1, _v2, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max );\n\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t//target = new Sphere(); // removed to avoid cyclic dependency\n\n\t\t}\n\n\t\tthis.getCenter( target.center );\n\n\t\ttarget.radius = this.getSize( _vector$1 ).length() * 0.5;\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the seperating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is seperating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\n\nconst _box = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nconst _box$1 = /*@__PURE__*/ new Box3();\n\nclass Sphere {\n\n\tconstructor( center, radius ) {\n\n\t\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\t\tthis.radius = ( radius !== undefined ) ? radius : - 1;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$1.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\ttarget = new Box3();\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin, direction ) {\n\n\t\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\t\tthis.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 );\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$2 ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\treturn _vector$2.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$2.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$2.dot( this.direction );\n\t\tconst d2 = _vector$2.dot( _vector$2 ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$2 ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t//   |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t//   |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t//   |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isMatrix4', { value: true } );\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$1.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$1.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m, n ) {\n\n\t\tif ( n !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t}\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, y, z, 0,\n\t\t\tx, 1, z, 0,\n\t\t\tx, y, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1.elements[ 0 ] *= invSX;\n\t\t_m1.elements[ 1 ] *= invSX;\n\t\t_m1.elements[ 2 ] *= invSX;\n\n\t\t_m1.elements[ 4 ] *= invSY;\n\t\t_m1.elements[ 5 ] *= invSY;\n\t\t_m1.elements[ 6 ] *= invSY;\n\n\t\t_m1.elements[ 8 ] *= invSZ;\n\t\t_m1.elements[ 9 ] *= invSZ;\n\t\t_m1.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tif ( far === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t}\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) {\n\n\t\tObject.defineProperty( this, 'isEuler', { value: true } );\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order || this._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order, update ) {\n\n\t\tconst clamp = MathUtils.clamp;\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\torder = order || this._order;\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix, order, update );\n\n\t}\n\n\tsetFromVector3( v, order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$1.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$1, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\ttoVector3( optionalResult ) {\n\n\t\tif ( optionalResult ) {\n\n\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t} else {\n\n\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t}\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n}\n\nEuler.DefaultOrder = 'XYZ';\nEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = 1 << channel | 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$2 = new Vector3();\nconst _q1 = new Quaternion();\nconst _m1$1 = new Matrix4();\nconst _target = new Vector3();\n\nconst _position = new Vector3();\nconst _scale = new Vector3();\nconst _quaternion$2 = new Quaternion();\n\nconst _xAxis = new Vector3( 1, 0, 0 );\nconst _yAxis = new Vector3( 0, 1, 0 );\nconst _zAxis = new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nfunction Object3D() {\n\n\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Object3D';\n\n\tthis.parent = null;\n\tthis.children = [];\n\n\tthis.up = Object3D.DefaultUp.clone();\n\n\tconst position = new Vector3();\n\tconst rotation = new Euler();\n\tconst quaternion = new Quaternion();\n\tconst scale = new Vector3( 1, 1, 1 );\n\n\tfunction onRotationChange() {\n\n\t\tquaternion.setFromEuler( rotation, false );\n\n\t}\n\n\tfunction onQuaternionChange() {\n\n\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t}\n\n\trotation._onChange( onRotationChange );\n\tquaternion._onChange( onQuaternionChange );\n\n\tObject.defineProperties( this, {\n\t\tposition: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: position\n\t\t},\n\t\trotation: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: rotation\n\t\t},\n\t\tquaternion: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: quaternion\n\t\t},\n\t\tscale: {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tvalue: scale\n\t\t},\n\t\tmodelViewMatrix: {\n\t\t\tvalue: new Matrix4()\n\t\t},\n\t\tnormalMatrix: {\n\t\t\tvalue: new Matrix3()\n\t\t}\n\t} );\n\n\tthis.matrix = new Matrix4();\n\tthis.matrixWorld = new Matrix4();\n\n\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\tthis.matrixWorldNeedsUpdate = false;\n\n\tthis.layers = new Layers();\n\tthis.visible = true;\n\n\tthis.castShadow = false;\n\tthis.receiveShadow = false;\n\n\tthis.frustumCulled = true;\n\tthis.renderOrder = 0;\n\n\tthis.animations = [];\n\n\tthis.userData = {};\n\n}\n\nObject3D.DefaultUp = new Vector3( 0, 1, 0 );\nObject3D.DefaultMatrixAutoUpdate = true;\n\nObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Object3D,\n\n\tisObject3D: true,\n\n\tonBeforeRender: function () {},\n\tonAfterRender: function () {},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t},\n\n\tapplyQuaternion: function ( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t},\n\n\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t},\n\n\tsetRotationFromEuler: function ( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t},\n\n\tsetRotationFromMatrix: function ( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t},\n\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t},\n\n\trotateOnAxis: function ( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateOnWorldAxis: function ( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t},\n\n\ttranslateOnAxis: function ( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$2.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$2.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t},\n\n\ttranslateX: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t},\n\n\ttranslateY: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t},\n\n\ttranslateZ: function ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t},\n\n\tlocalToWorld: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t},\n\n\tworldToLocal: function ( vector ) {\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t},\n\n\tlookAt: function ( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t},\n\n\tadd: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tremove: function ( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclear: function () {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t},\n\n\tattach: function ( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t},\n\n\tgetObjectById: function ( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t},\n\n\tgetObjectByName: function ( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t},\n\n\tgetObjectByProperty: function ( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tgetWorldPosition: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t},\n\n\tgetWorldQuaternion: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\ttarget = new Quaternion();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position, target, _scale );\n\n\t\treturn target;\n\n\t},\n\n\tgetWorldScale: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion$2, target );\n\n\t\treturn target;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t},\n\n\traycast: function () {},\n\n\ttraverse: function ( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseVisible: function ( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t},\n\n\ttraverseAncestors: function ( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t},\n\n\tupdateMatrix: function () {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t}\n\n\t},\n\n\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t},\n\n\tclone: function ( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t},\n\n\tcopy: function ( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal, constant ) {\n\n\t\tObject.defineProperty( this, 'isPlane', { value: true } );\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\t\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n}\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a, b, c ) {\n\n\t\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\t\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\t\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$1.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$1 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$1 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3 );\n\n\t\treturn ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3.x );\n\t\ttarget.addScaledVector( uv2, _v3.y );\n\t\ttarget.addScaledVector( uv3, _v3.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\ttarget = new Plane();\n\n\t\t}\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tObject.defineProperty( this, 'isColor', { value: true } );\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = MathUtils.euclideanModulo( h, 1 );\n\t\ts = MathUtils.clamp( s, 0, 1 );\n\t\tl = MathUtils.clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\tconst l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopyGammaToLinear( color, gammaFactor = 2.0 ) {\n\n\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToGamma( color, gammaFactor = 2.0 ) {\n\n\t\tconst safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\treturn this;\n\n\t}\n\n\tconvertGammaToLinear( gammaFactor ) {\n\n\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToGamma( gammaFactor ) {\n\n\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex() {\n\n\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t}\n\n\tgetHexString() {\n\n\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t}\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle() {\n\n\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = MathUtils.lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = MathUtils.lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = MathUtils.lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\tif ( attribute.normalized === true ) {\n\n\t\t\t// assuming Uint8Array\n\n\t\t\tthis.r /= 255;\n\t\t\tthis.g /= 255;\n\t\t\tthis.b /= 255;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n}\n\nColor.NAMES = _colorKeywords;\nColor.prototype.r = 1;\nColor.prototype.g = 1;\nColor.prototype.b = 1;\n\nclass Face3 {\n\n\tconstructor( a, b, c, normal, color, materialIndex = 0 ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\tthis.materialIndex = materialIndex;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.a = source.a;\n\t\tthis.b = source.b;\n\t\tthis.c = source.c;\n\n\t\tthis.normal.copy( source.normal );\n\t\tthis.color.copy( source.color );\n\n\t\tthis.materialIndex = source.materialIndex;\n\n\t\tfor ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t}\n\n\t\tfor ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet materialId = 0;\n\nfunction Material() {\n\n\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Material';\n\n\tthis.fog = true;\n\n\tthis.blending = NormalBlending;\n\tthis.side = FrontSide;\n\tthis.flatShading = false;\n\tthis.vertexColors = false;\n\n\tthis.opacity = 1;\n\tthis.transparent = false;\n\n\tthis.blendSrc = SrcAlphaFactor;\n\tthis.blendDst = OneMinusSrcAlphaFactor;\n\tthis.blendEquation = AddEquation;\n\tthis.blendSrcAlpha = null;\n\tthis.blendDstAlpha = null;\n\tthis.blendEquationAlpha = null;\n\n\tthis.depthFunc = LessEqualDepth;\n\tthis.depthTest = true;\n\tthis.depthWrite = true;\n\n\tthis.stencilWriteMask = 0xff;\n\tthis.stencilFunc = AlwaysStencilFunc;\n\tthis.stencilRef = 0;\n\tthis.stencilFuncMask = 0xff;\n\tthis.stencilFail = KeepStencilOp;\n\tthis.stencilZFail = KeepStencilOp;\n\tthis.stencilZPass = KeepStencilOp;\n\tthis.stencilWrite = false;\n\n\tthis.clippingPlanes = null;\n\tthis.clipIntersection = false;\n\tthis.clipShadows = false;\n\n\tthis.shadowSide = null;\n\n\tthis.colorWrite = true;\n\n\tthis.precision = null; // override the renderer's default precision for this material\n\n\tthis.polygonOffset = false;\n\tthis.polygonOffsetFactor = 0;\n\tthis.polygonOffsetUnits = 0;\n\n\tthis.dithering = false;\n\n\tthis.alphaTest = 0;\n\tthis.premultipliedAlpha = false;\n\n\tthis.visible = true;\n\n\tthis.toneMapped = true;\n\n\tthis.userData = {};\n\n\tthis.version = 0;\n\n}\n\nMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Material,\n\n\tisMaterial: true,\n\n\tonBeforeCompile: function ( /* shaderobject, renderer */ ) {},\n\n\tcustomProgramCacheKey: function () {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t},\n\n\tsetValues: function ( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRoot ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex();\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\t\t\tdata.refractionRatio = this.refractionRatio;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\t\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\n\t\t}\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\tif ( this.morphNormals === true ) data.morphNormals = true;\n\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRoot ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.fog = source.fog;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.flatShading = source.flatShading;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nObject.defineProperty( Material.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  depthTest: <bool>,\n *  depthWrite: <bool>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>\n * }\n */\n\nfunction MeshBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshBasicMaterial';\n\n\tthis.color = new Color( 0xffffff ); // emissive\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshBasicMaterial.prototype = Object.create( Material.prototype );\nMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\nMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\nMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _vector$3 = new Vector3();\nconst _vector2$1 = new Vector2();\n\nfunction BufferAttribute( array, itemSize, normalized ) {\n\n\tif ( Array.isArray( array ) ) {\n\n\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t}\n\n\tthis.name = '';\n\n\tthis.array = array;\n\tthis.itemSize = itemSize;\n\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\tthis.normalized = normalized === true;\n\n\tthis.usage = StaticDrawUsage;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\n\tisBufferAttribute: true,\n\n\tonUploadCallback: function () {},\n\n\tsetUsage: function ( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyArray: function ( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t},\n\n\tcopyColorsArray: function ( colors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\tlet color = colors[ i ];\n\n\t\t\tif ( color === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\tcolor = new Color();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = color.r;\n\t\t\tarray[ offset ++ ] = color.g;\n\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector2sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector2();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector3sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector3();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcopyVector4sArray: function ( vectors ) {\n\n\t\tconst array = this.array;\n\t\tlet offset = 0;\n\n\t\tfor ( let i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\tlet vector = vectors[ i ];\n\n\t\t\tif ( vector === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\tvector = new Vector4();\n\n\t\t\t}\n\n\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix3: function ( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$3.fromBufferAttribute( this, i );\n\t\t\t\t_vector$3.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tapplyNormalMatrix: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttransformDirection: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$3.x = this.getX( i );\n\t\t\t_vector$3.y = this.getY( i );\n\t\t\t_vector$3.z = this.getZ( i );\n\n\t\t\t_vector$3.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize ];\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.prototype.slice.call( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t}\n\n} );\n\n//\n\nfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n}\n\nInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\nfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n}\n\nUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\nfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n}\n\nUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\nfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n}\n\nInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\nfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\nfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n}\n\nInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\nfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n}\n\nUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\nfunction Float16BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n}\n\nFloat16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat16BufferAttribute.prototype.constructor = Float16BufferAttribute;\nFloat16BufferAttribute.prototype.isFloat16BufferAttribute = true;\n\nfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n}\n\nFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\nfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n}\n\nFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\nFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\nclass DirectGeometry {\n\n\tconstructor() {\n\n\t\tthis.vertices = [];\n\t\tthis.normals = [];\n\t\tthis.colors = [];\n\t\tthis.uvs = [];\n\t\tthis.uvs2 = [];\n\n\t\tthis.groups = [];\n\n\t\tthis.morphTargets = {};\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\t// this.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tcomputeGroups( geometry ) {\n\n\t\tconst groups = [];\n\n\t\tlet group, i;\n\t\tlet materialIndex = undefined;\n\n\t\tconst faces = geometry.faces;\n\n\t\tfor ( i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\t// materials\n\n\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tgroup = {\n\t\t\t\t\tstart: i * 3,\n\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( group !== undefined ) {\n\n\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\tgroups.push( group );\n\n\t\t}\n\n\t\tthis.groups = groups;\n\n\t}\n\n\tfromGeometry( geometry ) {\n\n\t\tconst faces = geometry.faces;\n\t\tconst vertices = geometry.vertices;\n\t\tconst faceVertexUvs = geometry.faceVertexUvs;\n\n\t\tconst hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\tconst hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t// morphs\n\n\t\tconst morphTargets = geometry.morphTargets;\n\t\tconst morphTargetsLength = morphTargets.length;\n\n\t\tlet morphTargetsPosition;\n\n\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\tmorphTargetsPosition = [];\n\n\t\t\tfor ( let i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsPosition[ i ] = {\n\t\t\t\t\tname: morphTargets[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t}\n\n\t\tconst morphNormals = geometry.morphNormals;\n\t\tconst morphNormalsLength = morphNormals.length;\n\n\t\tlet morphTargetsNormal;\n\n\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\tmorphTargetsNormal = [];\n\n\t\t\tfor ( let i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\tmorphTargetsNormal[ i ] = {\n\t\t\t\t\tname: morphNormals[ i ].name,\n\t\t\t\t \tdata: []\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t}\n\n\t\t// skins\n\n\t\tconst skinIndices = geometry.skinIndices;\n\t\tconst skinWeights = geometry.skinWeights;\n\n\t\tconst hasSkinIndices = skinIndices.length === vertices.length;\n\t\tconst hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t//\n\n\t\tif ( vertices.length > 0 && faces.length === 0 ) {\n\n\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < faces.length; i ++ ) {\n\n\t\t\tconst face = faces[ i ];\n\n\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst normal = face.normal;\n\n\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t}\n\n\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t} else {\n\n\t\t\t\tconst color = face.color;\n\n\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\tconst vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morphs\n\n\t\t\tfor ( let j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\tmorphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\tconst morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\tmorphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t}\n\n\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeGroups( geometry );\n\n\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction arrayMax( array ) {\n\n\tif ( array.length === 0 ) return - Infinity;\n\n\tlet max = array[ 0 ];\n\n\tfor ( let i = 1, l = array.length; i < l; ++ i ) {\n\n\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t}\n\n\treturn max;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\t// Workaround for IE11 pre KB2929437. See #11440\n\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nlet _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\nconst _m1$2 = new Matrix4();\nconst _obj = new Object3D();\nconst _offset = new Vector3();\nconst _box$2 = new Box3();\nconst _boxMorphTargets = new Box3();\nconst _vector$4 = new Vector3();\n\nfunction BufferGeometry() {\n\n\tObject.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'BufferGeometry';\n\n\tthis.index = null;\n\tthis.attributes = {};\n\n\tthis.morphAttributes = {};\n\tthis.morphTargetsRelative = false;\n\n\tthis.groups = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\tthis.drawRange = { start: 0, count: Infinity };\n\n\tthis.userData = {};\n\n}\n\nBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: BufferGeometry,\n\n\tisBufferGeometry: true,\n\n\tgetIndex: function () {\n\n\t\treturn this.index;\n\n\t},\n\n\tsetIndex: function ( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tgetAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t},\n\n\tsetAttribute: function ( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t},\n\n\tdeleteAttribute: function ( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t},\n\n\thasAttribute: function ( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t},\n\n\taddGroup: function ( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t},\n\n\tclearGroups: function () {\n\n\t\tthis.groups = [];\n\n\t},\n\n\tsetDrawRange: function ( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t},\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t},\n\n\tsetFromObject: function ( object ) {\n\n\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\tconst positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\tconst colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\tthis.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\tthis.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\tconst lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\tthis.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t} else if ( object.isMesh ) {\n\n\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t},\n\n\tupdateFromObject: function ( object ) {\n\n\t\tlet geometry = object.geometry;\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tlet direct = geometry.__directGeometry;\n\n\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\tdirect = undefined;\n\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( direct === undefined ) {\n\n\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t}\n\n\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\tgeometry = direct;\n\n\t\t}\n\n\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.position;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.normal;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\tconst attribute = this.attributes.color;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\tconst attribute = this.attributes.uv;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\tconst attribute = this.attributes.lineDistance;\n\n\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tfromGeometry: function ( geometry ) {\n\n\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t},\n\n\tfromDirectGeometry: function ( geometry ) {\n\n\t\tconst positions = new Float32Array( geometry.vertices.length * 3 );\n\t\tthis.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\tconst normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\tthis.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t}\n\n\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\tconst colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\tthis.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\tconst uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\tthis.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t}\n\n\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\tconst uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\tthis.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t}\n\n\t\t// groups\n\n\t\tthis.groups = geometry.groups;\n\n\t\t// morphs\n\n\t\tfor ( const name in geometry.morphTargets ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphTargets = geometry.morphTargets[ name ];\n\n\t\t\tfor ( let i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\n\t\t\t\tconst attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 );\n\t\t\t\tattribute.name = morphTarget.name;\n\n\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget.data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\t// skinning\n\n\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\tconst skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\tthis.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t}\n\n\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\tconst skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\tthis.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t_vector$4.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$4 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$4.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t\t_vector$4.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$4 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$4.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$4.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$4.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\t// backwards compatibility\n\n\t},\n\n\tcomputeVertexNormals: function () {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tmerge: function ( geometry, offset ) {\n\n\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( offset === undefined ) {\n\n\t\t\toffset = 0;\n\n\t\t\tconsole.warn(\n\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t);\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\tconst attribute1 = attributes[ key ];\n\t\t\tconst attributeArray1 = attribute1.array;\n\n\t\t\tconst attribute2 = geometry.attributes[ key ];\n\t\t\tconst attributeArray2 = attribute2.array;\n\n\t\t\tconst attributeOffset = attribute2.itemSize * offset;\n\t\t\tconst length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset );\n\n\t\t\tfor ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) {\n\n\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tnormalizeNormals: function () {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$4.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$4.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z );\n\n\t\t}\n\n\t},\n\n\ttoNonIndexed: function () {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\tdata.data.attributes[ key ] = attributeData;\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tconst attributeData = attribute.toJSON( data.data );\n\n\t\t\t\tif ( attribute.name !== '' ) attributeData.name = attribute.name;\n\n\t\t\t\tarray.push( attributeData );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new BufferGeometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nconst _inverseMatrix = new Matrix4();\nconst _ray = new Ray();\nconst _sphere = new Sphere();\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _tempA = new Vector3();\nconst _tempB = new Vector3();\nconst _tempC = new Vector3();\n\nconst _morphA = new Vector3();\nconst _morphB = new Vector3();\nconst _morphC = new Vector3();\n\nconst _uvA = new Vector2();\nconst _uvB = new Vector2();\nconst _uvC = new Vector2();\n\nconst _intersectionPoint = new Vector3();\nconst _intersectionPointWorld = new Vector3();\n\nfunction Mesh( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Mesh';\n\n\tthis.geometry = geometry;\n\tthis.material = material;\n\n\tthis.updateMorphTargets();\n\n}\n\nMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Mesh,\n\n\tisMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\t\t\tconst uv = geometry.attributes.uv;\n\t\t\tconst uv2 = geometry.attributes.uv2;\n\t\t\tconst groups = geometry.groups;\n\t\t\tconst drawRange = geometry.drawRange;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\t// indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\t\tconst end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\t\tconst a = i;\n\t\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst isMultiMaterial = Array.isArray( material );\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst faces = geometry.faces;\n\t\t\tlet uvs;\n\n\t\t\tconst faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\tfor ( let f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = faces[ f ];\n\t\t\t\tconst faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\tconst fvA = vertices[ face.a ];\n\t\t\t\tconst fvB = vertices[ face.b ];\n\t\t\t\tconst fvC = vertices[ face.c ];\n\n\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint );\n\n\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\tconst uvs_f = uvs[ f ];\n\t\t\t\t\t\t_uvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t_uvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t_uvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tintersection.face = face;\n\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst morphInfluences = object.morphTargetInfluences;\n\n\tif ( material.morphTargets && morphPosition && morphInfluences ) {\n\n\t\t_morphA.set( 0, 0, 0 );\n\t\t_morphB.set( 0, 0, 0 );\n\t\t_morphC.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\tconst influence = morphInfluences[ i ];\n\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t_tempA.fromBufferAttribute( morphAttribute, a );\n\t\t\t_tempB.fromBufferAttribute( morphAttribute, b );\n\t\t\t_tempC.fromBufferAttribute( morphAttribute, c );\n\n\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t} else {\n\n\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_vA.add( _morphA );\n\t\t_vB.add( _morphB );\n\t\t_vC.add( _morphC );\n\n\t}\n\n\tif ( object.isSkinnedMesh ) {\n\n\t\tobject.boneTransform( a, _vA );\n\t\tobject.boneTransform( b, _vB );\n\t\tobject.boneTransform( c, _vC );\n\n\t}\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv2, a );\n\t\t\t_uvB.fromBufferAttribute( uv2, b );\n\t\t\t_uvC.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tconst face = new Face3( a, b, c );\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxBufferGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\n/**\n * parameters = {\n *  defines: { \"label\" : \"value\" },\n *  uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n *\n *  fragmentShader: <string>,\n *  vertexShader: <string>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  lights: <bool>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction ShaderMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShaderMaterial';\n\n\tthis.defines = {};\n\tthis.uniforms = {};\n\n\tthis.vertexShader = default_vertex;\n\tthis.fragmentShader = default_fragment;\n\n\tthis.linewidth = 1;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false; // set to use scene fog\n\tthis.lights = false; // set to use scene lights\n\tthis.clipping = false; // set to use user-defined clipping planes\n\n\tthis.skinning = false; // set to use skinning attribute streams\n\tthis.morphTargets = false; // set to use morph targets\n\tthis.morphNormals = false; // set to use morph normals\n\n\tthis.extensions = {\n\t\tderivatives: false, // set to use derivatives\n\t\tfragDepth: false, // set to use fragment depth values\n\t\tdrawBuffers: false, // set to use draw buffers\n\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t};\n\n\t// When rendered geometry doesn't include these attributes but the material does,\n\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\tthis.defaultAttributeValues = {\n\t\t'color': [ 1, 1, 1 ],\n\t\t'uv': [ 0, 0 ],\n\t\t'uv2': [ 0, 0 ]\n\t};\n\n\tthis.index0AttributeName = undefined;\n\tthis.uniformsNeedUpdate = false;\n\n\tthis.glslVersion = null;\n\n\tif ( parameters !== undefined ) {\n\n\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t}\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n}\n\nShaderMaterial.prototype = Object.create( Material.prototype );\nShaderMaterial.prototype.constructor = ShaderMaterial;\n\nShaderMaterial.prototype.isShaderMaterial = true;\n\nShaderMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.fragmentShader = source.fragmentShader;\n\tthis.vertexShader = source.vertexShader;\n\n\tthis.uniforms = cloneUniforms( source.uniforms );\n\n\tthis.defines = Object.assign( {}, source.defines );\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.lights = source.lights;\n\tthis.clipping = source.clipping;\n\n\tthis.skinning = source.skinning;\n\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.extensions = Object.assign( {}, source.extensions );\n\n\tthis.glslVersion = source.glslVersion;\n\n\treturn this;\n\n};\n\nShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\tconst data = Material.prototype.toJSON.call( this, meta );\n\n\tdata.glslVersion = this.glslVersion;\n\tdata.uniforms = {};\n\n\tfor ( const name in this.uniforms ) {\n\n\t\tconst uniform = this.uniforms[ name ];\n\t\tconst value = uniform.value;\n\n\t\tif ( value && value.isTexture ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 't',\n\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t};\n\n\t\t} else if ( value && value.isColor ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'c',\n\t\t\t\tvalue: value.getHex()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v2',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'v4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm3',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\ttype: 'm4',\n\t\t\t\tvalue: value.toArray()\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tdata.uniforms[ name ] = {\n\t\t\t\tvalue: value\n\t\t\t};\n\n\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t}\n\n\t}\n\n\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\tdata.vertexShader = this.vertexShader;\n\tdata.fragmentShader = this.fragmentShader;\n\n\tconst extensions = {};\n\n\tfor ( const key in this.extensions ) {\n\n\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t}\n\n\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\treturn data;\n\n};\n\nfunction Camera() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Camera';\n\n\tthis.matrixWorldInverse = new Matrix4();\n\n\tthis.projectionMatrix = new Matrix4();\n\tthis.projectionMatrixInverse = new Matrix4();\n\n}\n\nCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Camera,\n\n\tisCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t},\n\n\tgetWorldDirection: function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t},\n\n\tupdateWorldMatrix: function ( updateParents, updateChildren ) {\n\n\t\tObject3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n} );\n\nfunction PerspectiveCamera( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'PerspectiveCamera';\n\n\tthis.fov = fov;\n\tthis.zoom = 1;\n\n\tthis.near = near;\n\tthis.far = far;\n\tthis.focus = 10;\n\n\tthis.aspect = aspect;\n\tthis.view = null;\n\n\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\tthis.updateProjectionMatrix();\n\n}\n\nPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: PerspectiveCamera,\n\n\tisPerspectiveCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength: function ( focalLength ) {\n\n\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength: function () {\n\n\t\tconst vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t},\n\n\tgetEffectiveFOV: function () {\n\n\t\treturn MathUtils.RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t},\n\n\tgetFilmWidth: function () {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t},\n\n\tgetFilmHeight: function () {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t},\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t *   +---+---+---+\n\t *   | A | B | C |\n\t *   +---+---+---+\n\t *   | D | E | F |\n\t *   +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t *   const w = 1920;\n\t *   const h = 1080;\n\t *   const fullWidth = w * 3;\n\t *   const fullHeight = h * 2;\n\t *\n\t *   --A--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t *   --B--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t *   --C--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t *   --D--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t *   --E--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t *   --F--\n\t *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t *   Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst fov = 90, aspect = 1;\n\nfunction CubeCamera( near, far, renderTarget ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'CubeCamera';\n\n\tif ( renderTarget.isWebGLCubeRenderTarget !== true ) {\n\n\t\tconsole.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' );\n\t\treturn;\n\n\t}\n\n\tthis.renderTarget = renderTarget;\n\n\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPX.layers = this.layers;\n\tcameraPX.up.set( 0, - 1, 0 );\n\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\tthis.add( cameraPX );\n\n\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNX.layers = this.layers;\n\tcameraNX.up.set( 0, - 1, 0 );\n\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\tthis.add( cameraNX );\n\n\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPY.layers = this.layers;\n\tcameraPY.up.set( 0, 0, 1 );\n\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\tthis.add( cameraPY );\n\n\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNY.layers = this.layers;\n\tcameraNY.up.set( 0, 0, - 1 );\n\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\tthis.add( cameraNY );\n\n\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraPZ.layers = this.layers;\n\tcameraPZ.up.set( 0, - 1, 0 );\n\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\tthis.add( cameraPZ );\n\n\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\tcameraNZ.layers = this.layers;\n\tcameraNZ.up.set( 0, - 1, 0 );\n\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\tthis.add( cameraNZ );\n\n\tthis.update = function ( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t};\n\n}\n\nCubeCamera.prototype = Object.create( Object3D.prototype );\nCubeCamera.prototype.constructor = CubeCamera;\n\nfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\timages = images !== undefined ? images : [];\n\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\tformat = format !== undefined ? format : RGBFormat;\n\n\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.flipY = false;\n\n\t// Why CubeTexture._needsFlipEnvMap is necessary:\n\t//\n\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t// and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false)\n\t// when using WebGLCubeRenderTarget.texture as a cube texture.\n\n\tthis._needsFlipEnvMap = true;\n\n}\n\nCubeTexture.prototype = Object.create( Texture.prototype );\nCubeTexture.prototype.constructor = CubeTexture;\n\nCubeTexture.prototype.isCubeTexture = true;\n\nObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\tget: function () {\n\n\t\treturn this.image;\n\n\t},\n\n\tset: function ( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n} );\n\nfunction WebGLCubeRenderTarget( size, options, dummy ) {\n\n\tif ( Number.isInteger( options ) ) {\n\n\t\tconsole.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' );\n\n\t\toptions = dummy;\n\n\t}\n\n\tWebGLRenderTarget.call( this, size, size, options );\n\n\toptions = options || {};\n\n\tthis.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\tthis.texture._needsFlipEnvMap = false;\n\n}\n\nWebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype );\nWebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget;\n\nWebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true;\n\nWebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) {\n\n\tthis.texture.type = texture.type;\n\tthis.texture.format = RGBAFormat; // see #18859\n\tthis.texture.encoding = texture.encoding;\n\n\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\tthis.texture.minFilter = texture.minFilter;\n\tthis.texture.magFilter = texture.magFilter;\n\n\tconst shader = {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: /* glsl */`\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include <begin_vertex>\n\t\t\t\t#include <project_vertex>\n\n\t\t\t}\n\t\t`,\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t`\n\t};\n\n\tconst geometry = new BoxBufferGeometry( 5, 5, 5 );\n\n\tconst material = new ShaderMaterial( {\n\n\t\tname: 'CubemapFromEquirect',\n\n\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\tvertexShader: shader.vertexShader,\n\t\tfragmentShader: shader.fragmentShader,\n\t\tside: BackSide,\n\t\tblending: NoBlending\n\n\t} );\n\n\tmaterial.uniforms.tEquirect.value = texture;\n\n\tconst mesh = new Mesh( geometry, material );\n\n\tconst currentMinFilter = texture.minFilter;\n\n\t// Avoid blurred poles\n\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\tconst camera = new CubeCamera( 1, 10, this );\n\tcamera.update( renderer, mesh );\n\n\ttexture.minFilter = currentMinFilter;\n\n\tmesh.geometry.dispose();\n\tmesh.material.dispose();\n\n\treturn this;\n\n};\n\nWebGLCubeRenderTarget.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\trenderer.setRenderTarget( this, i );\n\n\t\trenderer.clear( color, depth, stencil );\n\n\t}\n\n\trenderer.setRenderTarget( currentRenderTarget );\n\n};\n\nfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { data: data || null, width: width || 1, height: height || 1 };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\tthis.unpackAlignment = 1;\n\n\tthis.needsUpdate = true;\n\n}\n\nDataTexture.prototype = Object.create( Texture.prototype );\nDataTexture.prototype.constructor = DataTexture;\n\nDataTexture.prototype.isDataTexture = true;\n\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tthis.planes = [\n\n\t\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t\t];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$1.center.set( 0, 0, 0 );\n\t\t_sphere$1.radius = 0.7071067811865476;\n\t\t_sphere$1.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$1 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$5 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type = 5126;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\n\n\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneBufferGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\t\tthis.type = 'PlaneBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor.xyz *= color.xyz;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tif ( mipInt < cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness >= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness >= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness >= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3(    0, 1,    0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\";\n\nvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t\\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\n\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t  f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\n\\t\\t\\t\\t\\t\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t  f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3(  1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108,  1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605,  1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmissionmap_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n#endif\";\n\nvar transmissionmap_pars_fragment = \"#ifdef USE_TRANSMISSIONMAP\\n\\tuniform sampler2D transmissionMap;\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nvar background_frag = \"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\nvar background_vert = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nvar cube_frag = \"#include <envmap_common_pars_fragment>\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include <cube_uv_reflection_fragment>\\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\nvar cube_vert = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\";\n\nvar depth_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include <beginnormal_vertex>\\n\\t\\t#include <morphnormal_vertex>\\n\\t\\t#include <skinnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n}\";\n\nvar equirect_vert = \"varying vec3 vWorldDirection;\\n#include <common>\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\";\n\nvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\nvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshbasic_vert = \"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar meshmatcap_frag = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshmatcap_vert = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <color_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nvar meshtoon_frag = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_toon_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_toon_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshtoon_vert = \"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <cube_uv_reflection_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar meshphysical_frag = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n\\t#define TRANSMISSION\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef TRANSMISSION\\n\\tuniform float transmission;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <packing>\\n#include <dithering_pars_fragment>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <transmissionmap_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <envmap_common_pars_fragment>\\n#include <envmap_physical_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <lights_pars_begin>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <clearcoat_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#ifdef TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\n\\t#endif\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\t#include <clearcoat_normal_fragment_begin>\\n\\t#include <clearcoat_normal_fragment_maps>\\n\\t#include <emissivemap_fragment>\\n\\t#include <transmissionmap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_fragment_begin>\\n\\t#include <lights_fragment_maps>\\n\\t#include <lights_fragment_end>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#ifdef TRANSMISSION\\n\\t\\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\\n\\t#endif\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <dithering_fragment>\\n}\";\n\nvar meshphysical_vert = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_fragment_begin>\\n\\t#include <normal_fragment_maps>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\";\n\nvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n\\t#include <premultiplied_alpha_fragment>\\n}\";\n\nvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <project_vertex>\\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars_begin>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\nvar shadow_vert = \"#include <common>\\n#include <fog_pars_vertex>\\n#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <shadowmap_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nvar sprite_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\";\n\nvar sprite_vert = \"uniform float rotation;\\nuniform vec2 center;\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <fog_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <fog_vertex>\\n}\";\n\nconst ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_vertex: lights_lambert_vertex,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmissionmap_fragment: transmissionmap_fragment,\n\ttransmissionmap_pars_fragment: transmissionmap_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_frag: background_frag,\n\tbackground_vert: background_vert,\n\tcube_frag: cube_frag,\n\tcube_vert: cube_vert,\n\tdepth_frag: depth_frag,\n\tdepth_vert: depth_vert,\n\tdistanceRGBA_frag: distanceRGBA_frag,\n\tdistanceRGBA_vert: distanceRGBA_vert,\n\tequirect_frag: equirect_frag,\n\tequirect_vert: equirect_vert,\n\tlinedashed_frag: linedashed_frag,\n\tlinedashed_vert: linedashed_vert,\n\tmeshbasic_frag: meshbasic_frag,\n\tmeshbasic_vert: meshbasic_vert,\n\tmeshlambert_frag: meshlambert_frag,\n\tmeshlambert_vert: meshlambert_vert,\n\tmeshmatcap_frag: meshmatcap_frag,\n\tmeshmatcap_vert: meshmatcap_vert,\n\tmeshtoon_frag: meshtoon_frag,\n\tmeshtoon_vert: meshtoon_vert,\n\tmeshphong_frag: meshphong_frag,\n\tmeshphong_vert: meshphong_vert,\n\tmeshphysical_frag: meshphysical_frag,\n\tmeshphysical_vert: meshphysical_vert,\n\tnormal_frag: normal_frag,\n\tnormal_vert: normal_vert,\n\tpoints_frag: points_frag,\n\tpoints_vert: points_vert,\n\tshadow_frag: shadow_frag,\n\tshadow_vert: shadow_vert,\n\tsprite_frag: sprite_frag,\n\tsprite_vert: sprite_vert\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: new Matrix3() },\n\t\tuv2Transform: { value: new Matrix3() },\n\n\t\talphaMap: { value: null },\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 },\n\t\trefractionRatio: { value: 0.98 },\n\t\tmaxMipLevel: { value: 0 }\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotShadowMap: { value: [] },\n\t\tspotShadowMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\tuvTransform: { value: new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.normal_vert,\n\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\t/* -------------------------------------------------------------------------\n\t//\tCube map shader\n\t ------------------------------------------------------------------------- */\n\n\tcube: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.envmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tsheen: { value: new Color( 0x000000 ) },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nfunction WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = 0;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tbackground = cubemaps.get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.cube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tif ( background.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t// TODO Deprecate\n\n\t\t\t\tbackground = background.texture;\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// enable code injection for non-built-in material\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( geometry, index );\n\n\t\t\tif ( updateBuffers ) saveCache( geometry, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh === true ) {\n\n\t\t\tupdateBuffers = true;\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers ) {\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( geometry, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in geometryAttributes ) {\n\n\t\t\tconst cachedAttribute = cachedAttributes[ key ];\n\t\t\tconst geometryAttribute = geometryAttributes[ key ];\n\n\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\tif ( cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( geometry, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tconst data = {};\n\t\t\tdata.attribute = attribute;\n\n\t\t\tif ( attribute.data ) {\n\n\t\t\t\tdata.data = attribute.data;\n\n\t\t\t}\n\n\t\t\tcache[ key ] = data;\n\n\t\t\tattributesNum ++;\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\tconst geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\tif ( geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tenableAttribute( programAttribute );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\t\t\t\t\t\tvertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( name === 'instanceMatrix' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceMatrix );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 0, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 1, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 2, 1 );\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute + 3, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 );\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 );\n\n\t\t\t\t} else if ( name === 'instanceColor' ) {\n\n\t\t\t\t\tconst attribute = attributes.get( object.instanceColor );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\n\t\t\t\t\tenableAttributeAndDivisor( programAttribute, 1 );\n\n\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\tgl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 );\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatilibity\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\t/* eslint-disable no-undef */\n\tconst isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) ||\n\t\t( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext );\n\t/* eslint-enable no-undef */\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\t\tresetGlobalState();\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst currentRenderList = renderer.getRenderList();\n\t\t\t\t\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\trenderer.setRenderTarget( currentRenderTarget );\n\t\t\t\t\t\trenderer.setRenderList( currentRenderList );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\treturn extensions[ name ] !== null;\n\n\t\t\t}\n\n\t\t\tlet extension;\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t}\n\n\t\t\textensions[ name ] = extension;\n\n\t\t\treturn extension !== null;\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tif ( ! this.has( name ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = new WeakMap();\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\t\tconst buffergeometry = geometries.get( geometry );\n\n\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t}\n\n\t\tfor ( const name in buffergeometry.attributes ) {\n\n\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries.delete( geometry );\n\n\t\tconst attribute = wireframeAttributes.get( buffergeometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( buffergeometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( buffergeometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tlet buffergeometry = geometries.get( geometry );\n\n\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tbuffergeometry = geometry;\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t}\n\n\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t}\n\n\t\tgeometries.set( geometry, buffergeometry );\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, material, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\tlet influences = influencesList[ geometry.id ];\n\n\t\tif ( influences === undefined ) {\n\n\t\t\t// initialise list\n\n\t\t\tinfluences = [];\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t}\n\n\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t}\n\n\t\t// Collect influences\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst influence = influences[ i ];\n\n\t\t\tinfluence[ 0 ] = i;\n\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t}\n\n\t\tinfluences.sort( absNumericalSort );\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tworkInfluences.sort( numericalSort );\n\n\t\tconst morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\tconst morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst influence = workInfluences[ i ];\n\t\t\tconst index = influence[ 0 ];\n\t\t\tconst value = influence[ 1 ];\n\n\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t} else {\n\n\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t}\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nfunction DataTexture2DArray( data = null, width = 1, height = 1, depth = 1 ) {\n\n\tTexture.call( this, null );\n\n\tthis.image = { data, width, height, depth };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.wrapR = ClampToEdgeWrapping;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n\tthis.needsUpdate = true;\n\n}\n\nDataTexture2DArray.prototype = Object.create( Texture.prototype );\nDataTexture2DArray.prototype.constructor = DataTexture2DArray;\nDataTexture2DArray.prototype.isDataTexture2DArray = true;\n\nfunction DataTexture3D( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t// We're going to add .setXXX() methods for setting properties later.\n\t// Users can still set in DataTexture3D directly.\n\t//\n\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t// \ttexture.anisotropy = 16;\n\t//\n\t// See #14839\n\n\tTexture.call( this, null );\n\n\tthis.image = { data, width, height, depth };\n\n\tthis.magFilter = NearestFilter;\n\tthis.minFilter = NearestFilter;\n\n\tthis.wrapR = ClampToEdgeWrapping;\n\n\tthis.generateMipmaps = false;\n\tthis.flipY = false;\n\n\tthis.needsUpdate = true;\n\n\n}\n\nDataTexture3D.prototype = Object.create( Texture.prototype );\nDataTexture3D.prototype.constructor = DataTexture3D;\nDataTexture3D.prototype.isDataTexture3D = true;\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n *  \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with  name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = new Texture();\nconst emptyTexture2dArray = new DataTexture2DArray();\nconst emptyTexture3d = new DataTexture3D();\nconst emptyCubeTexture = new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyTexture2dArray, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || emptyTexture3d, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.safeSetTextureCube( v || emptyCubeTexture, unit );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform2iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform3iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( arraysEqual( cache, v ) ) return;\n\n\tgl.uniform4iv( this.addr, v );\n\n\tcopyArray( cache, v );\n\n}\n\n// uint\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n// Array of scalars\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Integer / Boolean vectors or arrays thereof (always flat arrays)\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n\n// Array of vectors (flat or from THREE classes)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (flat or from THREE clases)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of textures (2D / Cube)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tgl.uniform1iv( this.addr, units );\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nfunction SingleUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\tthis.id = id;\n\tthis.addr = addr;\n\tthis.cache = [];\n\tthis.size = activeInfo.size;\n\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t// this.path = activeInfo.name; // DEBUG\n\n}\n\nPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\tconst cache = this.cache;\n\n\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\tthis.cache = new Float32Array( data.length );\n\n\t}\n\n\tcopyArray( cache, data );\n\n};\n\nfunction StructuredUniform( id ) {\n\n\tthis.id = id;\n\n\tthis.seq = [];\n\tthis.map = {};\n\n}\n\nStructuredUniform.prototype.setValue = function ( gl, value, textures ) {\n\n\tconst seq = this.seq;\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t}\n\n};\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n//  - followed by an optional right bracket (found when array index)\n//  - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nfunction WebGLUniforms( gl, program ) {\n\n\tthis.seq = [];\n\tthis.map = {};\n\n\tconst n = gl.getProgramParameter( program, 35718 );\n\n\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\tparseUniform( info, addr, this );\n\n\t}\n\n}\n\nWebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) {\n\n\tconst u = this.map[ name ];\n\n\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n};\n\nWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\tconst v = object[ name ];\n\n\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n};\n\n\n// Static interface\n\nWebGLUniforms.upload = function ( gl, seq, values, textures ) {\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ],\n\t\t\tv = values[ u.id ];\n\n\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t}\n\n\t}\n\n};\n\nWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\tconst r = [];\n\n\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\tconst u = seq[ i ];\n\t\tif ( u.id in values ) r.push( u );\n\n\t}\n\n\treturn r;\n\n};\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction addLineNumbers( string ) {\n\n\tconst lines = string.split( '\\n' );\n\n\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t}\n\n\treturn lines.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tcase RGBEEncoding:\n\t\t\treturn [ 'RGBE', '( value )' ];\n\t\tcase RGBM7Encoding:\n\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\tcase RGBM16Encoding:\n\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\tcase RGBDEncoding:\n\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\tcase GammaEncoding:\n\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\tcase LogLuvEncoding:\n\t\t\treturn [ 'LogLuv', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst log = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && log === '' ) return '';\n\n\t// --enable-privileged-webgl-extension\n\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\tconst source = gl.getShaderSource( shader );\n\n\treturn 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\\n' + log + addLineNumbers( source );\n\n}\n\nfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst deprecatedUnrollLoopPattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string\n\t\t.replace( unrollLoopPattern, loopReplacer )\n\t\t.replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer );\n\n}\n\nfunction deprecatedLoopReplacer( match, start, end, snippet ) {\n\n\tconsole.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' );\n\treturn loopReplacer( match, start, end, snippet );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\t\t\tcase CubeUVRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\n\n\tconst gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\n\n\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tparameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\tparameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '',\n\t\t\tparameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\tparameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\tparameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors );\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst floatVertexTextures = capabilities.floatVertexTextures;\n\tconst maxVertexUniforms = capabilities.maxVertexUniforms;\n\tconst vertexTextures = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tconst parameterNames = [\n\t\t'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor',\n\t\t'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV',\n\t\t'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap', 'objectSpaceNormalMap', 'tangentSpaceNormalMap', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap', 'displacementMap', 'specularMap',\n\t\t'roughnessMap', 'metalnessMap', 'gradientMap',\n\t\t'alphaMap', 'combine', 'vertexColors', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2',\n\t\t'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning',\n\t\t'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals',\n\t\t'maxMorphTargets', 'maxMorphNormals', 'premultipliedAlpha',\n\t\t'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights',\n\t\t'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows',\n\t\t'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights',\n\t\t'alphaTest', 'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering',\n\t\t'sheen', 'transmissionMap'\n\t];\n\n\tfunction getMaxBones( object ) {\n\n\t\tconst skeleton = object.skeleton;\n\t\tconst bones = skeleton.bones;\n\n\t\tif ( floatVertexTextures ) {\n\n\t\t\treturn 1024;\n\n\t\t} else {\n\n\t\t\t// default for when object is not specified\n\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t//\n\t\t\t//  - leave some extra space for other uniforms\n\t\t\t//  - limit here is ANGLE's 254 max uniform vectors\n\t\t\t//    (up to 54 should be safe)\n\n\t\t\tconst nVertexUniforms = maxVertexUniforms;\n\t\t\tconst nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\tconst maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\treturn maxBones;\n\n\t\t}\n\n\t}\n\n\tfunction getTextureEncodingFromMap( map ) {\n\n\t\tlet encoding;\n\n\t\tif ( map && map.isTexture ) {\n\n\t\t\tencoding = map.encoding;\n\n\t\t} else if ( map && map.isWebGLRenderTarget ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\tencoding = map.texture.encoding;\n\n\t\t} else {\n\n\t\t\tencoding = LinearEncoding;\n\n\t\t}\n\n\t\treturn encoding;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tconst maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0;\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet vertexShader, fragmentShader;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding,\n\t\t\tmap: !! material.map,\n\t\t\tmapEncoding: getTextureEncodingFromMap( material.map ),\n\t\t\tmatcap: !! material.matcap,\n\t\t\tmatcapEncoding: getTextureEncodingFromMap( material.matcap ),\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapEncoding: getTextureEncodingFromMap( envMap ),\n\t\t\tenvMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\tlightMap: !! material.lightMap,\n\t\t\tlightMapEncoding: getTextureEncodingFromMap( material.lightMap ),\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ),\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\t\t\tclearcoatMap: !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: !! material.clearcoatNormalMap,\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: !! material.sheen,\n\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( material.normalMap && material.vertexTangents ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\tmaxBones: maxBones,\n\t\t\tuseVertexTexture: floatVertexTextures,\n\n\t\t\tmorphTargets: material.morphTargets,\n\t\t\tmorphNormals: material.morphNormals,\n\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\talphaTest: material.alphaTest,\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.fragmentShader );\n\t\t\tarray.push( parameters.vertexShader );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tfor ( let i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( renderer.outputEncoding );\n\t\t\tarray.push( renderer.gammaFactor );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.program !== b.program ) {\n\n\t\treturn a.program.id - b.program.id;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList( properties ) {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transparent = [];\n\n\tconst defaultProgram = { id: - 1 };\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tprogram: materialProperties.program || defaultProgram,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.program = materialProperties.program || defaultProgram;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\t( material.transparent === true ? transparent : opaque ).unshift( renderItem );\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.program = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists( properties ) {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, camera ) {\n\n\t\tconst cameras = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( cameras === undefined ) {\n\n\t\t\tlist = new WebGLRenderList( properties );\n\t\t\tlists.set( scene, new WeakMap() );\n\t\t\tlists.get( scene ).set( camera, list );\n\n\t\t} else {\n\n\t\t\tlist = cameras.get( camera );\n\t\t\tif ( list === undefined ) {\n\n\t\t\t\tlist = new WebGLRenderList( properties );\n\t\t\t\tcameras.set( camera, list );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotShadowMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: []\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\n\t\tlights.sort( shadowCastingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotShadowMatrix.length = numSpotShadows;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tlet renderState;\n\n\t\tif ( renderStates.has( scene ) === false ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [] );\n\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStates.get( scene ).length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStates.get( scene ).push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStates.get( scene )[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\n/**\n * parameters = {\n *\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>\n * }\n */\n\nfunction MeshDepthMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDepthMaterial';\n\n\tthis.depthPacking = BasicDepthPacking;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDepthMaterial.prototype = Object.create( Material.prototype );\nMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\nMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\nMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.depthPacking = source.depthPacking;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *\n *  referencePosition: <float>,\n *  nearDistance: <float>,\n *  farDistance: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>\n *\n * }\n */\n\nfunction MeshDistanceMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshDistanceMaterial';\n\n\tthis.referencePosition = new Vector3();\n\tthis.nearDistance = 1;\n\tthis.farDistance = 1000;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.fog = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshDistanceMaterial.prototype = Object.create( Material.prototype );\nMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\nMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\nMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.referencePosition.copy( source.referencePosition );\n\tthis.nearDistance = source.nearDistance;\n\tthis.farDistance = source.farDistance;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\treturn this;\n\n};\n\nvar vsm_frag = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include <packing>\\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nvar vsm_vert = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterials = [],\n\t\t_distanceMaterials = [],\n\n\t\t_materialCache = {};\n\n\tconst shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\n\t\tdefines: {\n\t\t\tSAMPLE_RATE: 2.0 / 8.0,\n\t\t\tHALF_SAMPLE_RATE: 1.0 / 8.0\n\t\t},\n\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vsm_vert,\n\n\t\tfragmentShader: vsm_frag\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tconst pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _depthMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDepthMaterial( {\n\n\t\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_depthMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) {\n\n\t\tconst index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2;\n\n\t\tlet material = _distanceMaterials[ index ];\n\n\t\tif ( material === undefined ) {\n\n\t\t\tmaterial = new MeshDistanceMaterial( {\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_distanceMaterials[ index ] = material;\n\n\t\t}\n\n\t\treturn material;\n\n\t}\n\n\tfunction getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tlet getMaterialVariant = getDepthMaterialVariant;\n\t\tlet customMaterial = object.customDepthMaterial;\n\n\t\tif ( light.isPointLight === true ) {\n\n\t\t\tgetMaterialVariant = getDistanceMaterialVariant;\n\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t}\n\n\t\tif ( customMaterial === undefined ) {\n\n\t\t\tlet useMorphing = false;\n\n\t\t\tif ( material.morphTargets === true ) {\n\n\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t}\n\n\t\t\tlet useSkinning = false;\n\n\t\t\tif ( object.isSkinnedMesh === true ) {\n\n\t\t\t\tif ( material.skinning === true ) {\n\n\t\t\t\t\tuseSkinning = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst useInstancing = object.isInstancedMesh === true;\n\n\t\t\tresult = getMaterialVariant( useMorphing, useSkinning, useInstancing );\n\n\t\t} else {\n\n\t\t\tresult = customMaterial;\n\n\t\t}\n\n\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t// appropriate state\n\n\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t}\n\n\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult = cachedMaterial;\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t     currentStencilRef !== stencilRef ||\n\t\t\t\t     currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t     currentStencilZFail !== stencilZFail ||\n\t\t\t\t     currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = null;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst currentScissor = new Vector4();\n\tconst currentViewport = new Vector4();\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( ! currentBlendingEnabled ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 0, 769, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 769 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = null;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( 32823 );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\tif ( currentTextureSlot === null ) {\n\n\t\t\tactiveTexture();\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = null;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\tnew OffscreenCanvas( width, height ) :\n\t\t\tdocument.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo( image ) {\n\n\t\treturn MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 6407 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34837;\n\t\t\tif ( glType === 5131 ) internalFormat = 34843;\n\t\t\tif ( glType === 5121 ) internalFormat = 32849;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = 32856;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( renderTarget.texture );\n\n\t\tif ( ! renderTarget ) return;\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget.texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\tif ( extension ) {\n\n\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\tif ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return;\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataTexture2DArray ) textureType = 35866;\n\t\tif ( texture.isDataTexture3D ) textureType = 32879;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\n\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false;\n\t\tconst image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\n\t\tconst supportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format );\n\n\t\tlet glType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\tlet mipmap;\n\t\tconst mipmaps = texture.mipmaps;\n\n\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t// populate depth texture with dummy data\n\n\t\t\tglInternalFormat = 6402;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// validation checks for WebGL 1\n\n\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else if ( texture.isDataTexture2DArray ) {\n\n\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else if ( texture.isDataTexture3D ) {\n\n\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t} else {\n\n\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t// use manually created mipmaps if available\n\t\t\t// if there are no manual mipmaps\n\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tgenerateMipmap( textureType, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tinitTexture( textureProperties, texture );\n\n\t\tstate.activeTexture( 33984 + slot );\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\n\t\t_gl.pixelStorei( 37440, texture.flipY );\n\n\t\tconst isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) );\n\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\tconst cubeImage = [];\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t} else {\n\n\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst image = cubeImage[ 0 ],\n\t\t\tsupportsMips = isPowerOfTwo( image ) || isWebGL2,\n\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\tglType = utils.convert( texture.type ),\n\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType );\n\n\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\tlet mipmaps;\n\n\t\tif ( isCompressed ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t} else {\n\n\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttextureProperties.__maxMipLevel = mipmaps.length;\n\n\t\t}\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t// We assume images for cube map have the same size.\n\t\t\tgenerateMipmap( 34067, texture, image.width, image.height );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t_gl.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( renderTarget.texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\tinfo.memory.textures ++;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true );\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\t// Handles WebGL2 RGBFormat fallback - #18858\n\n\t\tif ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) {\n\n\t\t\trenderTarget.texture.format = RGBAFormat;\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' );\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultisample ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer );\n\n\t\t\t\t\tconst glFormat = utils.convert( renderTarget.texture.format );\n\t\t\t\t\tconst glType = utils.convert( renderTarget.texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer );\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, null );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, renderTarget.texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 34067, null );\n\n\t\t} else {\n\n\t\t\tstate.bindTexture( 3553, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 3553, renderTarget.texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( 3553, null );\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\t\tconst supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2;\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\tstate.bindTexture( target, null );\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\t_gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t_gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = 16384;\n\n\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\t_gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ?\n\t\t\tMath.min( maxSamples, renderTarget.samples ) : 0;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\t// backwards compatibility\n\n\tlet warnedTexture2D = false;\n\tlet warnedTextureCube = false;\n\n\tfunction safeSetTexture2D( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\tif ( warnedTexture2D === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\\'t use render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTexture2D = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\t\tsetTexture2D( texture, slot );\n\n\t}\n\n\tfunction safeSetTextureCube( texture, slot ) {\n\n\t\tif ( texture && texture.isWebGLCubeRenderTarget ) {\n\n\t\t\tif ( warnedTextureCube === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\\'t use cube render targets as textures. Use their .texture property instead.' );\n\t\t\t\twarnedTextureCube = true;\n\n\t\t\t}\n\n\t\t\ttexture = texture.texture;\n\n\t\t}\n\n\n\t\tsetTextureCube( texture, slot );\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\n\tthis.safeSetTexture2D = safeSetTexture2D;\n\tthis.safeSetTextureCube = safeSetTextureCube;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\t\tif ( p === UnsignedShort565Type ) return 33635;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBFormat ) return 6407;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\t\tif ( p === RedFormat ) return 6403;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBIntegerFormat ) return 36248;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format ||\n\t\t\tp === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\t// TODO Complete?\n\n\t\t\t\treturn p;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nfunction ArrayCamera( array = [] ) {\n\n\tPerspectiveCamera.call( this );\n\n\tthis.cameras = array;\n\n}\n\nArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\tconstructor: ArrayCamera,\n\n\tisArrayCamera: true\n\n} );\n\nfunction Group() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Group';\n\n}\n\nGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Group,\n\n\tisGroup: true\n\n} );\n\nfunction WebXRController() {\n\n\tthis._targetRay = null;\n\tthis._grip = null;\n\tthis._hand = null;\n\n}\n\nObject.assign( WebXRController.prototype, {\n\n\tconstructor: WebXRController,\n\n\tgetHandSpace: function () {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = [];\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t\tif ( window.XRHand ) {\n\n\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = new Group();\n\t\t\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\t\t\tjoint.visible = false;\n\t\t\t\t\tthis._hand.joints.push( joint );\n\t\t\t\t\t// ??\n\t\t\t\t\tthis._hand.add( joint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t},\n\n\tgetTargetRaySpace: function () {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t},\n\n\tgetGripSpace: function () {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t},\n\n\tdispatchEvent: function ( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tdisconnect: function ( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tupdate: function ( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\t\tif ( inputSource.hand[ i ] ) {\n\n\t\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\t\tconst jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace );\n\t\t\t\t\t\tconst joint = hand.joints[ i ];\n\n\t\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t\t\t// Custom events\n\n\t\t\t\t\t\t// Check pinch\n\t\t\t\t\t\tconst indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ];\n\t\t\t\t\t\tconst thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ];\n\t\t\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\t\t\ttarget: this\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction WebXRManager( renderer, gl ) {\n\n\tconst scope = this;\n\n\tlet session = null;\n\n\tlet framebufferScaleFactor = 1.0;\n\n\tlet referenceSpace = null;\n\tlet referenceSpaceType = 'local-floor';\n\n\tlet pose = null;\n\n\tconst controllers = [];\n\tconst inputSourcesMap = new Map();\n\n\t//\n\n\tconst cameraL = new PerspectiveCamera();\n\tcameraL.layers.enable( 1 );\n\tcameraL.viewport = new Vector4();\n\n\tconst cameraR = new PerspectiveCamera();\n\tcameraR.layers.enable( 2 );\n\tcameraR.viewport = new Vector4();\n\n\tconst cameras = [ cameraL, cameraR ];\n\n\tconst cameraVR = new ArrayCamera();\n\tcameraVR.layers.enable( 1 );\n\tcameraVR.layers.enable( 2 );\n\n\tlet _currentDepthNear = null;\n\tlet _currentDepthFar = null;\n\n\t//\n\n\tthis.enabled = false;\n\n\tthis.isPresenting = false;\n\n\tthis.getController = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getTargetRaySpace();\n\n\t};\n\n\tthis.getControllerGrip = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getGripSpace();\n\n\t};\n\n\tthis.getHand = function ( index ) {\n\n\t\tlet controller = controllers[ index ];\n\n\t\tif ( controller === undefined ) {\n\n\t\t\tcontroller = new WebXRController();\n\t\t\tcontrollers[ index ] = controller;\n\n\t\t}\n\n\t\treturn controller.getHandSpace();\n\n\t};\n\n\t//\n\n\tfunction onSessionEvent( event ) {\n\n\t\tconst controller = inputSourcesMap.get( event.inputSource );\n\n\t\tif ( controller ) {\n\n\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t}\n\n\t}\n\n\tfunction onSessionEnd() {\n\n\t\tinputSourcesMap.forEach( function ( controller, inputSource ) {\n\n\t\t\tcontroller.disconnect( inputSource );\n\n\t\t} );\n\n\t\tinputSourcesMap.clear();\n\n\t\t//\n\n\t\trenderer.setFramebuffer( null );\n\t\trenderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830\n\t\tanimation.stop();\n\n\t\tscope.isPresenting = false;\n\n\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t}\n\n\tfunction onRequestReferenceSpace( value ) {\n\n\t\treferenceSpace = value;\n\n\t\tanimation.setContext( session );\n\t\tanimation.start();\n\n\t\tscope.isPresenting = true;\n\n\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t}\n\n\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\tframebufferScaleFactor = value;\n\n\t\tif ( scope.isPresenting === true ) {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t}\n\n\t};\n\n\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\treferenceSpaceType = value;\n\n\t\tif ( scope.isPresenting === true ) {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t}\n\n\t};\n\n\tthis.getReferenceSpace = function () {\n\n\t\treturn referenceSpace;\n\n\t};\n\n\tthis.getSession = function () {\n\n\t\treturn session;\n\n\t};\n\n\tthis.setSession = function ( value ) {\n\n\t\tsession = value;\n\n\t\tif ( session !== null ) {\n\n\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\n\t\t\tconst attributes = gl.getContextAttributes();\n\n\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\tgl.makeXRCompatible();\n\n\t\t\t}\n\n\t\t\tconst layerInit = {\n\t\t\t\tantialias: attributes.antialias,\n\t\t\t\talpha: attributes.alpha,\n\t\t\t\tdepth: attributes.depth,\n\t\t\t\tstencil: attributes.stencil,\n\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t};\n\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\tconst baseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\tsession.updateRenderState( { baseLayer: baseLayer } );\n\n\t\t\tsession.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace );\n\n\t\t\t//\n\n\t\t\tsession.addEventListener( 'inputsourceschange', updateInputSources );\n\n\t\t}\n\n\t};\n\n\tfunction updateInputSources( event ) {\n\n\t\tconst inputSources = session.inputSources;\n\n\t\t// Assign inputSources to available controllers\n\n\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tinputSourcesMap.set( inputSources[ i ], controllers[ i ] );\n\n\t\t}\n\n\t\t// Notify disconnected\n\n\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\tconst inputSource = event.removed[ i ];\n\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\t\t\t\tinputSourcesMap.delete( inputSource );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Notify connected\n\n\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\tconst inputSource = event.added[ i ];\n\t\t\tconst controller = inputSourcesMap.get( inputSource );\n\n\t\t\tif ( controller ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tconst cameraLPos = new Vector3();\n\tconst cameraRPos = new Vector3();\n\n\t/**\n\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t * the cameras' projection and world matrices have already been set.\n\t * And that near and far planes are identical for both cameras.\n\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t */\n\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t// VR systems will have identical far and near planes, and\n\t\t// most likely identical top and bottom frustum extents.\n\t\t// Use the left camera for these values.\n\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\tconst left = near * leftFov;\n\t\tconst right = near * rightFov;\n\n\t\t// Calculate the new camera's position offset from the\n\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t// TODO: Better way to apply this offset?\n\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\tcamera.translateX( xOffset );\n\t\tcamera.translateZ( zOffset );\n\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t// Find the union of the frustum values of the cameras and scale\n\t\t// the values so that the near plane's position does not change in world space,\n\t\t// although must now be relative to the new union camera.\n\t\tconst near2 = near + zOffset;\n\t\tconst far2 = far + zOffset;\n\t\tconst left2 = left - xOffset;\n\t\tconst right2 = right + ( ipd - xOffset );\n\t\tconst top2 = topFov * far / far2 * near2;\n\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t}\n\n\tfunction updateCamera( camera, parent ) {\n\n\t\tif ( parent === null ) {\n\n\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t} else {\n\n\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t}\n\n\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t}\n\n\tthis.getCamera = function ( camera ) {\n\n\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\tsession.updateRenderState( {\n\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\tdepthFar: cameraVR.far\n\t\t\t} );\n\n\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t}\n\n\t\tconst parent = camera.parent;\n\t\tconst cameras = cameraVR.cameras;\n\n\t\tupdateCamera( cameraVR, parent );\n\n\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t}\n\n\t\t// update camera and its children\n\n\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\tconst children = camera.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t}\n\n\t\t// update projection matrix for proper view frustum culling\n\n\t\tif ( cameras.length === 2 ) {\n\n\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t} else {\n\n\t\t\t// assume single camera setup (AR)\n\n\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t}\n\n\t\treturn cameraVR;\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tpose = frame.getViewerPose( referenceSpace );\n\n\t\tif ( pose !== null ) {\n\n\t\t\tconst views = pose.views;\n\t\t\tconst baseLayer = session.renderState.baseLayer;\n\n\t\t\trenderer.setFramebuffer( baseLayer.framebuffer );\n\n\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\tconst view = views[ i ];\n\t\t\t\tconst viewport = baseLayer.getViewport( view );\n\n\t\t\t\tconst camera = cameras[ i ];\n\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t}\n\n\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst inputSources = session.inputSources;\n\n\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\tconst controller = controllers[ i ];\n\t\t\tconst inputSource = inputSources[ i ];\n\n\t\t\tcontroller.update( inputSource, frame, referenceSpace );\n\n\t\t}\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\n\t};\n\n\tthis.dispose = function () {};\n\n}\n\nObject.assign( WebXRManager.prototype, EventDispatcher.prototype );\n\nfunction WebGLMaterials( properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tuniforms.fogColor.value.copy( fog.color );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsLambert( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material );\n\n\t\t\t} else {\n\n\t\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDepth( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsNormal( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\tconst maxMipLevel = properties.get( envMap ).__maxMipLevel;\n\n\t\t\tif ( maxMipLevel !== undefined ) {\n\n\t\t\t\tuniforms.maxMipLevel.value = maxMipLevel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\trefreshUniformsStandard( uniforms, material );\n\n\t\tuniforms.reflectivity.value = material.reflectivity; // also part of uniforms common\n\n\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\t\tif ( material.sheen ) uniforms.sheen.value.copy( material.sheen );\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.transmission.value = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters ) {\n\n\tparameters = parameters || {};\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// render() can be called from within a callback triggered by another render.\n\t// We track this so that the nested render call gets its state isolated from the parent render call.\n\n\tconst renderStateStack = [];\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\tthis.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.physicallyCorrectLights = false;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// morphs\n\n\tthis.maxMorphTargets = 8;\n\tthis.maxMorphNormals = 4;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _framebuffer = null;\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentFramebuffer = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst contextAttributes = {\n\t\t\talpha: _alpha,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference,\n\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t};\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\tif ( capabilities.isWebGL2 === false ) {\n\n\t\t\textensions.get( 'WEBGL_depth_texture' );\n\t\t\textensions.get( 'OES_texture_float' );\n\t\t\textensions.get( 'OES_texture_half_float' );\n\t\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\t\textensions.get( 'OES_standard_derivatives' );\n\t\t\textensions.get( 'OES_element_index_uint' );\n\t\t\textensions.get( 'OES_vertex_array_object' );\n\t\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t}\n\n\t\textensions.get( 'OES_texture_float_linear' );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t\tinfo = new WebGLInfo( _gl );\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( properties );\n\t\trenderLists = new WebGLRenderLists( properties );\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// shadow map\n\n\tconst shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\tthis.shadowMap = shadowMap;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle !== false ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' );\n\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' );\n\n\t\t\ttarget = new Vector4();\n\n\t\t}\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function ( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'WebGLRenderer: .getClearColor() now requires a Color as an argument' );\n\n\t\t\ttarget = new Color();\n\n\t\t}\n\n\t\treturn target.copy( background.getClearColor() );\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color, depth, stencil ) {\n\n\t\tlet bits = 0;\n\n\t\tif ( color === undefined || color ) bits |= 16384;\n\t\tif ( depth === undefined || depth ) bits |= 256;\n\t\tif ( stencil === undefined || stencil ) bits |= 1024;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tcubemaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\n\t\txr.dispose();\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tinitGLContext();\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReference( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReference( material ) {\n\n\t\tconst programInfo = properties.get( material ).program;\n\n\t\tif ( programInfo !== undefined ) {\n\n\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tfunction renderObjectImmediate( object, program ) {\n\n\t\tobject.render( function ( object ) {\n\n\t\t\t_this.renderBufferImmediate( object, program );\n\n\t\t} );\n\n\t}\n\n\tthis.renderBufferImmediate = function ( object, program ) {\n\n\t\tbindingStates.initAttributes();\n\n\t\tconst buffers = properties.get( object );\n\n\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tif ( object.hasPositions ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.position );\n\t\t\t_gl.bufferData( 34962, object.positionArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.position );\n\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasNormals ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.normal );\n\t\t\t_gl.bufferData( 34962, object.normalArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.normal );\n\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasUvs ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.uv );\n\t\t\t_gl.bufferData( 34962, object.uvArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.uv );\n\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tif ( object.hasColors ) {\n\n\t\t\t_gl.bindBuffer( 34962, buffers.color );\n\t\t\t_gl.bufferData( 34962, object.colorArray, 35048 );\n\n\t\t\tbindingStates.enableAttribute( programAttributes.color );\n\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 );\n\n\t\t}\n\n\t\tbindingStates.disableUnusedAttributes();\n\n\t\t_gl.drawArrays( 4, 0, object.count );\n\n\t\tobject.count = 0;\n\n\t};\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\n\t\t//\n\n\t\tif ( index === null ) {\n\n\t\t\tif ( position === undefined || position.count === 0 ) return;\n\n\t\t} else if ( index.count === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t//\n\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\tif ( material.morphTargets || material.morphNormals ) {\n\n\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t}\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\t//\n\n\t\tconst dataCount = ( index !== null ) ? index.count : position.count;\n\n\t\tconst rangeStart = geometry.drawRange.start * rangeFactor;\n\t\tconst rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\tconst groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\tconst groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\tconst drawStart = Math.max( rangeStart, groupStart );\n\t\tconst drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\tconst drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tcurrentRenderState = renderStates.get( scene );\n\t\tcurrentRenderState.init();\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights();\n\n\t\tconst compiled = new WeakMap();\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tif ( compiled.has( material2 ) === false ) {\n\n\t\t\t\t\t\t\tinitMaterial( material2, scene, object );\n\t\t\t\t\t\t\tcompiled.set( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( compiled.has( material ) === false ) {\n\n\t\t\t\t\tinitMaterial( material, scene, object );\n\t\t\t\t\tcompiled.set( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( xr.isPresenting ) return;\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof window !== 'undefined' ) animation.setContext( window );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tlet renderTarget, forceClear;\n\n\t\tif ( arguments[ 2 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' );\n\t\t\trenderTarget = arguments[ 2 ];\n\n\t\t}\n\n\t\tif ( arguments[ 3 ] !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' );\n\t\t\tforceClear = arguments[ 3 ];\n\n\t\t}\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost === true ) return;\n\n\t\t// reset caching for this frame\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\t// update scene graph\n\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tcamera = xr.getCamera( camera );\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\tcurrentRenderList.init();\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tcurrentRenderState.setupLights();\n\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\tif ( renderTarget !== undefined ) {\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t// render scene\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t}\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t\t// _gl.finish();\n\n\t\trenderStateStack.pop();\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderState = null;\n\n\t\t}\n\n\t\tcurrentRenderList = null;\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null );\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tfor ( let j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ j ];\n\n\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\tcurrentRenderState.setupLightsView( camera2 );\n\n\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\tconst program = setProgram( camera, scene, material, object );\n\n\t\t\tstate.setMaterial( material );\n\n\t\t\tbindingStates.reset();\n\n\t\t\trenderObjectImmediate( object, program );\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t}\n\n\tfunction initMaterial( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet program = materialProperties.program;\n\t\tlet programChange = true;\n\n\t\tif ( program === undefined ) {\n\n\t\t\t// new material\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t} else if ( program.cacheKey !== programCacheKey ) {\n\n\t\t\t// changed glsl or parameters\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t} else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) {\n\n\t\t\tprogramChange = false;\n\n\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t// same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect\n\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || environment );\n\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// only rebuild uniform list\n\t\t\tprogramChange = false;\n\n\t\t}\n\n\t\tif ( programChange ) {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\n\t\t\tmaterialProperties.program = program;\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\t\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ! material.isShaderMaterial &&\n\t\t\t! material.isRawShaderMaterial ||\n\t\t\tmaterial.clipping === true ) {\n\n\t\t\tmaterialProperties.numClippingPlanes = clipping.numPlanes;\n\t\t\tmaterialProperties.numIntersection = clipping.numIntersection;\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tconst progUniforms = materialProperties.program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t}\n\n\tfunction setProgram( camera, scene, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding;\n\t\tconst envMap = cubemaps.get( material.envMap || environment );\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.environment !== environment ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tinitMaterial( material, scene, object );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tinitMaterial( material, scene, object );\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst program = materialProperties.program,\n\t\t\tp_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t// otherwise textures used for skinning can take over texture units reserved for other material textures\n\n\t\tif ( material.skinning ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tconst bones = skeleton.bones;\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) {\n\n\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t//      RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t//  with  8x8  pixel texture max   16 bones * 4 pixels =  (8 * 8)\n\t\t\t\t\t\t//       16x16 pixel texture max   64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t//       32x32 pixel texture max  256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t//       64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\tlet size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\tsize = MathUtils.ceilPowerOfTwo( size );\n\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\n\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\treturn program;\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\t//\n\tthis.setFramebuffer = function ( value ) {\n\n\t\tif ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value );\n\n\t\t_framebuffer = value;\n\n\t};\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderList = function () {\n\n\t\treturn currentRenderList;\n\n\t};\n\n\tthis.setRenderList = function ( renderList ) {\n\n\t\tcurrentRenderList = renderList;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t}\n\n\t\tlet framebuffer = _framebuffer;\n\t\tlet isCube = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( renderTarget.isWebGLMultisampleRenderTarget ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t}\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tlet restore = false;\n\n\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t\trestore = true;\n\n\t\t\t}\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) {\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( 36160, _currentFramebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\t\tconst glFormat = utils.convert( texture.format );\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.resetState = function () {\n\n\t\tstate.reset();\n\t\tbindingStates.reset();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t}\n\n}\n\nfunction WebGL1Renderer( parameters ) {\n\n\tWebGLRenderer.call( this, parameters );\n\n}\n\nWebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), {\n\n\tconstructor: WebGL1Renderer,\n\n\tisWebGL1Renderer: true\n\n} );\n\nclass FogExp2 {\n\n\tconstructor( color, density ) {\n\n\t\tObject.defineProperty( this, 'isFogExp2', { value: true } );\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near, far ) {\n\n\t\tObject.defineProperty( this, 'isFog', { value: true } );\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = ( near !== undefined ) ? near : 1;\n\t\tthis.far = ( far !== undefined ) ? far : 1000;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tObject.defineProperty( this, 'isScene', { value: true } );\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\tif ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta );\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.usage = StaticDrawUsage;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n\tthis.uuid = MathUtils.generateUUID();\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetUsage: function ( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new InterleavedBuffer( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n} );\n\nconst _vector$6 = new Vector3();\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.name = '';\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t},\n\n\tneedsUpdate: {\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.data.needsUpdate = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.x = this.getX( i );\n\t\t\t_vector$6.y = this.getY( i );\n\t\t\t_vector$6.z = this.getZ( i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n} );\n\n/**\n * parameters = {\n *  color: <hex>,\n *  map: new THREE.Texture( <Image> ),\n *  alphaMap: new THREE.Texture( <Image> ),\n *  rotation: <float>,\n *  sizeAttenuation: <bool>\n * }\n */\n\nfunction SpriteMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'SpriteMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.rotation = 0;\n\n\tthis.sizeAttenuation = true;\n\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nSpriteMaterial.prototype = Object.create( Material.prototype );\nSpriteMaterial.prototype.constructor = SpriteMaterial;\nSpriteMaterial.prototype.isSpriteMaterial = true;\n\nSpriteMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.rotation = source.rotation;\n\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\treturn this;\n\n};\n\nlet _geometry;\n\nconst _intersectPoint = new Vector3();\nconst _worldScale = new Vector3();\nconst _mvPosition = new Vector3();\n\nconst _alignedPosition = new Vector2();\nconst _rotatedPosition = new Vector2();\nconst _viewWorldMatrix = new Matrix4();\n\nconst _vA$1 = new Vector3();\nconst _vB$1 = new Vector3();\nconst _vC$1 = new Vector3();\n\nconst _uvA$1 = new Vector2();\nconst _uvB$1 = new Vector2();\nconst _uvC$1 = new Vector2();\n\nfunction Sprite( material ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Sprite';\n\n\tif ( _geometry === undefined ) {\n\n\t\t_geometry = new BufferGeometry();\n\n\t\tconst float32Array = new Float32Array( [\n\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t] );\n\n\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t}\n\n\tthis.geometry = _geometry;\n\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\tthis.center = new Vector2( 0.5, 0.5 );\n\n}\n\nSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Sprite,\n\n\tisSprite: true,\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA$1.set( 0, 0 );\n\t\t_uvB$1.set( 1, 0 );\n\t\t_uvC$1.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB$1.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$4 = new Vector3();\nconst _v2$2 = new Vector3();\n\nfunction LOD() {\n\n\tObject3D.call( this );\n\n\tthis._currentLevel = 0;\n\n\tthis.type = 'LOD';\n\n\tObject.defineProperties( this, {\n\t\tlevels: {\n\t\t\tenumerable: true,\n\t\t\tvalue: []\n\t\t}\n\t} );\n\n\tthis.autoUpdate = true;\n\n}\n\nLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: LOD,\n\n\tisLOD: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t},\n\n\taddLevel: function ( object, distance = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t},\n\n\tgetCurrentLevel: function () {\n\n\t\treturn this._currentLevel;\n\n\t},\n\n\tgetObjectForDistance: function ( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$4.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$4 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t},\n\n\tupdate: function ( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$4.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst _basePosition = new Vector3();\n\nconst _skinIndex = new Vector4();\nconst _skinWeight = new Vector4();\n\nconst _vector$7 = new Vector3();\nconst _matrix$1 = new Matrix4();\n\nfunction SkinnedMesh( geometry, material ) {\n\n\tif ( geometry && geometry.isGeometry ) {\n\n\t\tconsole.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t}\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new Matrix4();\n\tthis.bindMatrixInverse = new Matrix4();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tMesh.prototype.copy.call( this, source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tboneTransform: function ( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix$1.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector$7.copy( _basePosition ).applyMatrix4( _matrix$1 ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n} );\n\nfunction Bone() {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\nconst _offsetMatrix = new Matrix4();\nconst _identityMatrix = new Matrix4();\n\nfunction Skeleton( bones = [], boneInverses = [] ) {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.bones = bones.slice( 0 );\n\tthis.boneInverses = boneInverses;\n\tthis.boneMatrices = null;\n\n\tthis.boneTexture = null;\n\tthis.boneTextureSize = 0;\n\n\tthis.frame = - 1;\n\n\tthis.init();\n\n}\n\nObject.assign( Skeleton.prototype, {\n\n\tinit: function () {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tcalculateInverses: function () {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t},\n\n\tpose: function () {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdate: function () {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t},\n\n\tgetBoneByName: function ( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t},\n\n\tdispose: function ( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t},\n\n\tfromJSON: function ( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst _instanceLocalMatrix = new Matrix4();\nconst _instanceWorldMatrix = new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = new Mesh();\n\nfunction InstancedMesh( geometry, material, count ) {\n\n\tMesh.call( this, geometry, material );\n\n\tthis.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 );\n\tthis.instanceColor = null;\n\n\tthis.count = count;\n\n\tthis.frustumCulled = false;\n\n}\n\nInstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: InstancedMesh,\n\n\tisInstancedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\tMesh.prototype.copy.call( this, source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t},\n\n\tgetColorAt: function ( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t},\n\n\tgetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t},\n\n\tsetColorAt: function ( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t},\n\n\tsetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  linewidth: <float>,\n *  linecap: \"round\",\n *  linejoin: \"round\"\n * }\n */\n\nfunction LineBasicMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'LineBasicMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.linewidth = 1;\n\tthis.linecap = 'round';\n\tthis.linejoin = 'round';\n\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nLineBasicMaterial.prototype = Object.create( Material.prototype );\nLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\nLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\nLineBasicMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\tthis.linecap = source.linecap;\n\tthis.linejoin = source.linejoin;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _start = new Vector3();\nconst _end = new Vector3();\nconst _inverseMatrix$1 = new Matrix4();\nconst _ray$1 = new Ray();\nconst _sphere$2 = new Sphere();\n\nfunction Line( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Line';\n\n\tthis.geometry = geometry;\n\tthis.material = material;\n\n\tthis.updateMorphTargets();\n\n}\n\nLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Line,\n\n\tisLine: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\tcomputeLineDistances: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_start.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t_end.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i ] += _start.distanceTo( _end );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\tfor ( let i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere );\n\t\t_sphere$2.applyMatrix4( matrixWorld );\n\t\t_sphere$2.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst indices = index.array;\n\n\t\t\t\tfor ( let i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\tconst a = indices[ i ];\n\t\t\t\t\tconst b = indices[ i + 1 ];\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count - 1; i < l; i += step ) {\n\n\t\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst nbVertices = vertices.length;\n\n\t\t\tfor ( let i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nconst _start$1 = new Vector3();\nconst _end$1 = new Vector3();\n\nfunction LineSegments( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineSegments';\n\n}\n\nLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineSegments,\n\n\tisLineSegments: true,\n\n\tcomputeLineDistances: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t// we assume non-indexed geometry\n\n\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\t\tconst lineDistances = [];\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t}\n\n\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\tconst vertices = geometry.vertices;\n\t\t\tconst lineDistances = geometry.lineDistances;\n\n\t\t\tfor ( let i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t_start$1.copy( vertices[ i ] );\n\t\t\t\t_end$1.copy( vertices[ i + 1 ] );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction LineLoop( geometry, material ) {\n\n\tLine.call( this, geometry, material );\n\n\tthis.type = 'LineLoop';\n\n}\n\nLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\tconstructor: LineLoop,\n\n\tisLineLoop: true,\n\n} );\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *  map: new THREE.Texture( <Image> ),\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  size: <float>,\n *  sizeAttenuation: <bool>\n *\n *  morphTargets: <bool>\n * }\n */\n\nfunction PointsMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'PointsMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\n\tthis.alphaMap = null;\n\n\tthis.size = 1;\n\tthis.sizeAttenuation = true;\n\n\tthis.morphTargets = false;\n\n\tthis.setValues( parameters );\n\n}\n\nPointsMaterial.prototype = Object.create( Material.prototype );\nPointsMaterial.prototype.constructor = PointsMaterial;\n\nPointsMaterial.prototype.isPointsMaterial = true;\n\nPointsMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.size = source.size;\n\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\tthis.morphTargets = source.morphTargets;\n\n\treturn this;\n\n};\n\nconst _inverseMatrix$2 = new Matrix4();\nconst _ray$2 = new Ray();\nconst _sphere$3 = new Sphere();\nconst _position$1 = new Vector3();\n\nfunction Points( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Points';\n\n\tthis.geometry = geometry;\n\tthis.material = material;\n\n\tthis.updateMorphTargets();\n\n}\n\nPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Points,\n\n\tisPoints: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\t\t_sphere$3.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst attributes = geometry.attributes;\n\t\t\tconst positionAttribute = attributes.position;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tconst indices = index.array;\n\n\t\t\t\tfor ( let i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst a = indices[ i ];\n\n\t\t\t\t\t_position$1.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\t\ttestPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t_position$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\ttestPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst vertices = geometry.vertices;\n\n\t\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\ttestPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\t\t\tconst keys = Object.keys( morphAttributes );\n\n\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst morphTargets = geometry.morphTargets;\n\n\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n} );\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray$2.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray$2.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.format = format !== undefined ? format : RGBFormat;\n\n\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\tthis.generateMipmaps = false;\n\n\tconst scope = this;\n\n\tfunction updateVideo() {\n\n\t\tscope.needsUpdate = true;\n\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t}\n\n\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t}\n\n}\n\nVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\tconstructor: VideoTexture,\n\n\tclone: function () {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t},\n\n\tisVideoTexture: true,\n\n\tupdate: function () {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n} );\n\nfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\tthis.image = { width: width, height: height };\n\tthis.mipmaps = mipmaps;\n\n\t// no flipping for cube textures\n\t// (also flipping doesn't work for compressed textures )\n\n\tthis.flipY = false;\n\n\t// can't generate mipmaps for compressed textures\n\t// mips must be embedded in DDS files\n\n\tthis.generateMipmaps = false;\n\n}\n\nCompressedTexture.prototype = Object.create( Texture.prototype );\nCompressedTexture.prototype.constructor = CompressedTexture;\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\nfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.needsUpdate = true;\n\n}\n\nCanvasTexture.prototype = Object.create( Texture.prototype );\nCanvasTexture.prototype.constructor = CanvasTexture;\nCanvasTexture.prototype.isCanvasTexture = true;\n\nfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\tformat = format !== undefined ? format : DepthFormat;\n\n\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t}\n\n\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\tthis.image = { width: width, height: height };\n\n\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\tthis.flipY = false;\n\tthis.generateMipmaps = false;\n\n}\n\nDepthTexture.prototype = Object.create( Texture.prototype );\nDepthTexture.prototype.constructor = DepthTexture;\nDepthTexture.prototype.isDepthTexture = true;\n\nlet _geometryId = 0; // Geometry uses even numbers as Id\nconst _m1$3 = new Matrix4();\nconst _obj$1 = new Object3D();\nconst _offset$1 = new Vector3();\n\nfunction Geometry() {\n\n\tObject.defineProperty( this, 'id', { value: _geometryId += 2 } );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.name = '';\n\tthis.type = 'Geometry';\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.faces = [];\n\tthis.faceVertexUvs = [[]];\n\n\tthis.morphTargets = [];\n\tthis.morphNormals = [];\n\n\tthis.skinWeights = [];\n\tthis.skinIndices = [];\n\n\tthis.lineDistances = [];\n\n\tthis.boundingBox = null;\n\tthis.boundingSphere = null;\n\n\t// update flags\n\n\tthis.elementsNeedUpdate = false;\n\tthis.verticesNeedUpdate = false;\n\tthis.uvsNeedUpdate = false;\n\tthis.normalsNeedUpdate = false;\n\tthis.colorsNeedUpdate = false;\n\tthis.lineDistancesNeedUpdate = false;\n\tthis.groupsNeedUpdate = false;\n\n}\n\nGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: Geometry,\n\n\tisGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\tfor ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.verticesNeedUpdate = true;\n\t\tthis.normalsNeedUpdate = true;\n\n\t\treturn this;\n\n\t},\n\n\trotateX: function ( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$3.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\trotateY: function ( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$3.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\trotateZ: function ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$3.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\ttranslate: function ( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$3.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\tscale: function ( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$3.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$3 );\n\n\t\treturn this;\n\n\t},\n\n\tlookAt: function ( vector ) {\n\n\t\t_obj$1.lookAt( vector );\n\n\t\t_obj$1.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj$1.matrix );\n\n\t\treturn this;\n\n\t},\n\n\tfromBufferGeometry: function ( geometry ) {\n\n\t\tconst scope = this;\n\n\t\tconst index = geometry.index !== null ? geometry.index : undefined;\n\t\tconst attributes = geometry.attributes;\n\n\t\tif ( attributes.position === undefined ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst position = attributes.position;\n\t\tconst normal = attributes.normal;\n\t\tconst color = attributes.color;\n\t\tconst uv = attributes.uv;\n\t\tconst uv2 = attributes.uv2;\n\n\t\tif ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\tscope.vertices.push( new Vector3().fromBufferAttribute( position, i ) );\n\n\t\t\tif ( color !== undefined ) {\n\n\t\t\t\tscope.colors.push( new Color().fromBufferAttribute( color, i ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\tconst vertexColors = ( color === undefined ) ? [] : [\n\t\t\t\tscope.colors[ a ].clone(),\n\t\t\t\tscope.colors[ b ].clone(),\n\t\t\t\tscope.colors[ c ].clone()\n\t\t\t];\n\n\t\t\tconst vertexNormals = ( normal === undefined ) ? [] : [\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, a ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, b ),\n\t\t\t\tnew Vector3().fromBufferAttribute( normal, c )\n\t\t\t];\n\n\t\t\tconst face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\tscope.faces.push( face );\n\n\t\t\tif ( uv !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 0 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t\tif ( uv2 !== undefined ) {\n\n\t\t\t\tscope.faceVertexUvs[ 1 ].push( [\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, a ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, b ),\n\t\t\t\t\tnew Vector2().fromBufferAttribute( uv2, c )\n\t\t\t\t] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst groups = geometry.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\t\taddFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < index.count; i += 3 ) {\n\n\t\t\t\t\taddFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i += 3 ) {\n\n\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.computeFaceNormals();\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tcenter: function () {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset$1 ).negate();\n\n\t\tthis.translate( _offset$1.x, _offset$1.y, _offset$1.z );\n\n\t\treturn this;\n\n\t},\n\n\tnormalize: function () {\n\n\t\tthis.computeBoundingSphere();\n\n\t\tconst center = this.boundingSphere.center;\n\t\tconst radius = this.boundingSphere.radius;\n\n\t\tconst s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\tconst matrix = new Matrix4();\n\t\tmatrix.set(\n\t\t\ts, 0, 0, - s * center.x,\n\t\t\t0, s, 0, - s * center.y,\n\t\t\t0, 0, s, - s * center.z,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\tthis.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t},\n\n\tcomputeFaceNormals: function () {\n\n\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\tcb.subVectors( vC, vB );\n\t\t\tab.subVectors( vA, vB );\n\t\t\tcb.cross( ab );\n\n\t\t\tcb.normalize();\n\n\t\t\tface.normal.copy( cb );\n\n\t\t}\n\n\t},\n\n\tcomputeVertexNormals: function ( areaWeighted = true ) {\n\n\t\tconst vertices = new Array( this.vertices.length );\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ] = new Vector3();\n\n\t\t}\n\n\t\tif ( areaWeighted ) {\n\n\t\t\t// vertex normals weighted by triangle areas\n\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst vA = this.vertices[ face.a ];\n\t\t\t\tconst vB = this.vertices[ face.b ];\n\t\t\t\tconst vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\tvertices[ v ].normalize();\n\n\t\t}\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeFlatVertexNormals: function () {\n\n\t\tthis.computeFaceNormals();\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t} else {\n\n\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.faces.length > 0 ) {\n\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t}\n\n\t},\n\n\tcomputeMorphNormals: function () {\n\n\t\t// save original normals\n\t\t// - create temp variables on first access\n\t\t//   otherwise just copy (for faster repeated calls)\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t} else {\n\n\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t}\n\n\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\tfor ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\tconst tmpGeo = new Geometry();\n\t\ttmpGeo.faces = this.faces;\n\n\t\tfor ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t// create on first access\n\n\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\tconst dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\tconst dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tconst faceNormal = new Vector3();\n\t\t\t\t\tconst vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphNormals = this.morphNormals[ i ];\n\n\t\t\t// set vertices to morph target\n\n\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t// compute morph normals\n\n\t\t\ttmpGeo.computeFaceNormals();\n\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t// store morph normals\n\n\t\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tconst face = this.faces[ f ];\n\n\t\t\t\tconst faceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\tconst vertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restore original normals\n\n\t\tfor ( let f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\tconst face = this.faces[ f ];\n\n\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t}\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t},\n\n\tcomputeBoundingSphere: function () {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t},\n\n\tmerge: function ( geometry, matrix, materialIndexOffset = 0 ) {\n\n\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet normalMatrix;\n\t\tconst vertexOffset = this.vertices.length,\n\t\t\tvertices1 = this.vertices,\n\t\t\tvertices2 = geometry.vertices,\n\t\t\tfaces1 = this.faces,\n\t\t\tfaces2 = geometry.faces,\n\t\t\tcolors1 = this.colors,\n\t\t\tcolors2 = geometry.colors;\n\n\t\tif ( matrix !== undefined ) {\n\n\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t}\n\n\t\t// vertices\n\n\t\tfor ( let i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\tconst vertex = vertices2[ i ];\n\n\t\t\tconst vertexCopy = vertex.clone();\n\n\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\tvertices1.push( vertexCopy );\n\n\t\t}\n\n\t\t// colors\n\n\t\tfor ( let i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tfor ( let i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\tconst face = faces2[ i ];\n\t\t\tlet normal, color;\n\t\t\tconst faceVertexNormals = face.vertexNormals,\n\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\tconst faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t}\n\n\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\tfor ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t}\n\n\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\tfaces1.push( faceCopy );\n\n\t\t}\n\n\t\t// uvs\n\n\t\tfor ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs2 = geometry.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = [];\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs2 = faceVertexUvs2[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs2.length; k < kl; k ++ ) {\n\n\t\t\t\t\tuvsCopy.push( uvs2[ k ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tmergeMesh: function ( mesh ) {\n\n\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t},\n\n\t/*\n\t * Checks for duplicate vertices with hashmap.\n\t * Duplicated vertices are removed\n\t * and faces' vertices are updated.\n\t */\n\n\tmergeVertices: function ( precisionPoints = 4 ) {\n\n\t\tconst verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\tconst unique = [], changes = [];\n\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\n\t\tfor ( let i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\tconst v = this.vertices[ i ];\n\t\t\tconst key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t}\n\n\t\t}\n\n\n\t\t// if faces are completely degenerate after merging vertices, we\n\t\t// have to remove them from the geometry.\n\t\tconst faceIndicesToRemove = [];\n\n\t\tfor ( let i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tface.a = changes[ face.a ];\n\t\t\tface.b = changes[ face.b ];\n\t\t\tface.c = changes[ face.c ];\n\n\t\t\tconst indices = [ face.a, face.b, face.c ];\n\n\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t// we have to remove the face as nothing can be saved\n\t\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\tconst idx = faceIndicesToRemove[ i ];\n\n\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\tfor ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Use unique set of vertices\n\n\t\tconst diff = this.vertices.length - unique.length;\n\t\tthis.vertices = unique;\n\t\treturn diff;\n\n\t},\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.vertices = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsortFacesByMaterialIndex: function () {\n\n\t\tconst faces = this.faces;\n\t\tconst length = faces.length;\n\n\t\t// tag faces\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tfaces[ i ]._id = i;\n\n\t\t}\n\n\t\t// sort faces\n\n\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t}\n\n\t\tfaces.sort( materialIndexSort );\n\n\t\t// sort uvs\n\n\t\tconst uvs1 = this.faceVertexUvs[ 0 ];\n\t\tconst uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\tlet newUvs1, newUvs2;\n\n\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tconst id = faces[ i ]._id;\n\n\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t}\n\n\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Geometry',\n\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Geometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tconst vertices = [];\n\n\t\tfor ( let i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\tconst vertex = this.vertices[ i ];\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tconst faces = [];\n\t\tconst normals = [];\n\t\tconst normalsHash = {};\n\t\tconst colors = [];\n\t\tconst colorsHash = {};\n\t\tconst uvs = [];\n\t\tconst uvsHash = {};\n\n\t\tfor ( let i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\tconst face = this.faces[ i ];\n\n\t\t\tconst hasMaterial = true;\n\t\t\tconst hasFaceUv = false; // deprecated\n\t\t\tconst hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\tconst hasFaceNormal = face.normal.length() > 0;\n\t\t\tconst hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\tconst hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\tconst hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\tlet faceType = 0;\n\n\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\tfaces.push( faceType );\n\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\tfaces.push( face.materialIndex );\n\n\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\tconst faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\tconst vertexNormals = face.vertexNormals;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t}\n\n\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\tconst vertexColors = face.vertexColors;\n\n\t\t\t\tfaces.push(\n\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t}\n\n\t\tfunction getNormalIndex( normal ) {\n\n\t\t\tconst hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\treturn normalsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getColorIndex( color ) {\n\n\t\t\tconst hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\tcolors.push( color.getHex() );\n\n\t\t\treturn colorsHash[ hash ];\n\n\t\t}\n\n\t\tfunction getUvIndex( uv ) {\n\n\t\t\tconst hash = uv.x.toString() + uv.y.toString();\n\n\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\treturn uvsHash[ hash ];\n\n\t\t}\n\n\t\tdata.data = {};\n\n\t\tdata.data.vertices = vertices;\n\t\tdata.data.normals = normals;\n\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\tdata.data.faces = faces;\n\n\t\treturn data;\n\n\t},\n\n\tclone: function () {\n\n\t\t/*\n\t\t // Handle primitives\n\n\t\t const parameters = this.parameters;\n\n\t\t if ( parameters !== undefined ) {\n\n\t\t const values = [];\n\n\t\t for ( const key in parameters ) {\n\n\t\t values.push( parameters[ key ] );\n\n\t\t }\n\n\t\t const geometry = Object.create( this.constructor.prototype );\n\t\t this.constructor.apply( geometry, values );\n\t\t return geometry;\n\n\t\t }\n\n\t\t return new this.constructor().copy( this );\n\t\t */\n\n\t\treturn new Geometry().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\t// reset\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\t\tthis.lineDistances = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// vertices\n\n\t\tconst vertices = source.vertices;\n\n\t\tfor ( let i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t}\n\n\t\t// colors\n\n\t\tconst colors = source.colors;\n\n\t\tfor ( let i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t}\n\n\t\t// faces\n\n\t\tconst faces = source.faces;\n\n\t\tfor ( let i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t}\n\n\t\t// face vertex uvs\n\n\t\tfor ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\tconst faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\tfor ( let k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst uv = uvs[ k ];\n\n\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphTargets = source.morphTargets;\n\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = {};\n\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t// vertices\n\n\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t}\n\n\t\t// morph normals\n\n\t\tconst morphNormals = source.morphNormals;\n\n\t\tfor ( let i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\tconst morphNormal = {};\n\n\t\t\t// vertex normals\n\n\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\tconst destVertexNormal = {};\n\n\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// face normals\n\n\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\tfor ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t}\n\n\t\t// skin weights\n\n\t\tconst skinWeights = source.skinWeights;\n\n\t\tfor ( let i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t}\n\n\t\t// skin indices\n\n\t\tconst skinIndices = source.skinIndices;\n\n\t\tfor ( let i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t}\n\n\t\t// line distances\n\n\t\tconst lineDistances = source.lineDistances;\n\n\t\tfor ( let i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\treturn this;\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\nclass BoxGeometry extends Geometry {\n\n\tconstructor( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass CircleBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass CircleGeometry extends Geometry {\n\n\tconstructor( radius, segments, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass CylinderBufferGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n}\n\nclass CylinderGeometry extends Geometry {\n\n\tconstructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\nclass ConeBufferGeometry extends CylinderBufferGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\nclass PolyhedronBufferGeometry extends BufferGeometry {\n\n\tconstructor( vertices, indices, radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n}\n\nclass DodecahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nconst _v0$2 = new Vector3();\nconst _v1$5 = new Vector3();\nconst _normal$1 = new Vector3();\nconst _triangle = new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry, thresholdAngle ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t\tif ( geometry.isGeometry ) {\n\n\t\t\tgeometry = new BufferGeometry().fromGeometry( geometry );\n\n\t\t}\n\n\t\tconst precisionPoints = 4;\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\tconst thresholdDot = Math.cos( MathUtils.DEG2RAD * thresholdAngle );\n\n\t\tconst indexAttr = geometry.getIndex();\n\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\tconst indexArr = [ 0, 0, 0 ];\n\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\tconst hashes = new Array( 3 );\n\n\t\tconst edgeData = {};\n\t\tconst vertices = [];\n\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\tif ( indexAttr ) {\n\n\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t} else {\n\n\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t}\n\n\t\t\tconst { a, b, c } = _triangle;\n\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t_triangle.getNormal( _normal$1 );\n\n\t\t\t// create hashes for the edge from the vertices\n\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t// skip degenerate triangles\n\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// iterate over every edge\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\tif ( _normal$1.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\tnormal: _normal$1.clone(),\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\tfor ( const key in edgeData ) {\n\n\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t_v0$2.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t_v1$5.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\tvertices.push( _v0$2.x, _v0$2.y, _v0$2.z );\n\t\t\t\tvertices.push( _v1$5.x, _v1$5.y, _v1$5.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tlet p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode;\n\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nconst ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n *  curveSegments: <int>, // number of points on the curves\n *  steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n *  depth: <float>, // Depth to extrude the shape\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into the original shape bevel goes\n *  bevelSize: <float>, // how far from shape outline (including bevelOffset) is bevel\n *  bevelOffset: <float>, // how far from shape outline does bevel start\n *  bevelSegments: <int>, // number of bevel layers\n *\n *  extrudePath: <THREE.Curve> // curve to extrude shape along\n *\n *  UVGenerator: <Object> // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeBufferGeometry extends BufferGeometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tlet depth = options.depth !== undefined ? options.depth : 100;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t//   shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t//  adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t//  but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t//  (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t//  (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t/////  Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON( shapes, options, data );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n *  curveSegments: <int>, // number of points on the curves\n *  steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n *  depth: <float>, // Depth to extrude the shape\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into the original shape bevel goes\n *  bevelSize: <float>, // how far from shape outline (including bevelOffset) is bevel\n *  bevelOffset: <float>, // how far from shape outline does bevel start\n *  bevelSegments: <int>, // number of bevel layers\n *\n *  extrudePath: <THREE.Curve> // curve to extrude shape along\n *\n *  UVGenerator: <Object> // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends Geometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n}\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass IcosahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass LatheBufferGeometry extends BufferGeometry {\n\n\tconstructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = MathUtils.clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tconst normals = this.attributes.normal.array;\n\t\t\tconst n1 = new Vector3();\n\t\t\tconst n2 = new Vector3();\n\t\t\tconst n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tconst base = segments * points.length * 3;\n\n\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nclass LatheGeometry extends Geometry {\n\n\tconstructor( points, segments, phiStart, phiLength ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass OctahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass OctahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'ParametricBufferGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\tconst EPS = 0.00001;\n\n\tconst normal = new Vector3();\n\n\tconst p0 = new Vector3(), p1 = new Vector3();\n\tconst pu = new Vector3(), pv = new Vector3();\n\n\tif ( func.length < 3 ) {\n\n\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t}\n\n\t// generate vertices, normals and uvs\n\n\tconst sliceCount = slices + 1;\n\n\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\tconst v = i / stacks;\n\n\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\tconst u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\tconst a = i * sliceCount + j;\n\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\nParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\tGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\tthis.mergeVertices();\n\n}\n\nParametricGeometry.prototype = Object.create( Geometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\nclass PlaneGeometry extends Geometry {\n\n\tconstructor( width, height, widthSegments, heightSegments ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends Geometry {\n\n\tconstructor( vertices, indices, radius, detail ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass RingBufferGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass RingGeometry extends Geometry {\n\n\tconstructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass ShapeBufferGeometry extends BufferGeometry {\n\n\tconstructor( shapes, curveSegments = 12 ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON$2( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON$2( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass ShapeGeometry extends Geometry {\n\n\tconstructor( shapes, curveSegments ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tif ( typeof curveSegments === 'object' ) {\n\n\t\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\t\tcurveSegments = curveSegments.curveSegments;\n\n\t\t}\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = Geometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON$3( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON$3( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass SphereGeometry extends Geometry {\n\n\tconstructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TetrahedronBufferGeometry extends PolyhedronBufferGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends Geometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tsuper();\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\n/**\n * Text = 3D Text\n *\n * parameters = {\n *  font: <THREE.Font>, // font\n *\n *  size: <float>, // size of the text\n *  height: <float>, // thickness to extrude text\n *  curveSegments: <int>, // number of points on the curves\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into text bevel goes\n *  bevelSize: <float>, // how far from text outline (including bevelOffset) is bevel\n *  bevelOffset: <float> // how far from text outline does bevel start\n * }\n */\n\nclass TextBufferGeometry extends ExtrudeBufferGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( ! ( font && font.isFont ) ) {\n\n\t\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t// translate parameters to ExtrudeGeometry API\n\n\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t\t// defaults\n\n\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\tsuper( shapes, parameters );\n\n\t\tthis.type = 'TextBufferGeometry';\n\n\t}\n\n}\n\n/**\n * Text = 3D Text\n *\n * parameters = {\n *  font: <THREE.Font>, // font\n *\n *  size: <float>, // size of the text\n *  height: <float>, // thickness to extrude text\n *  curveSegments: <int>, // number of points on the curves\n *\n *  bevelEnabled: <bool>, // turn on bevel\n *  bevelThickness: <float>, // how deep into text bevel goes\n *  bevelSize: <float>, // how far from text outline (including bevelOffset) is bevel\n *  bevelOffset: <float> // how far from text outline does bevel start\n * }\n */\n\nclass TextGeometry extends Geometry {\n\n\tconstructor( text, parameters ) {\n\n\t\tsuper();\n\t\tthis.type = 'TextGeometry';\n\n\t\tthis.parameters = {\n\t\t\ttext: text,\n\t\t\tparameters: parameters\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TorusBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\nclass TorusGeometry extends Geometry {\n\n\tconstructor( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TorusKnotBufferGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends Geometry {\n\n\tconstructor( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\t\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass TubeBufferGeometry extends BufferGeometry {\n\n\tconstructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass TubeGeometry extends Geometry {\n\n\tconstructor( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\t\tconst bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = bufferGeometry.tangents;\n\t\tthis.normals = bufferGeometry.normals;\n\t\tthis.binormals = bufferGeometry.binormals;\n\n\t\t// create geometry\n\n\t\tthis.fromBufferGeometry( bufferGeometry );\n\t\tthis.mergeVertices();\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry ) {\n\n\t\tsuper();\n\t\tthis.type = 'WireframeGeometry';\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\n\t\t// helper variables\n\n\t\tconst edge = [ 0, 0 ], edges = {};\n\t\tconst keys = [ 'a', 'b', 'c' ];\n\n\t\t// different logic for Geometry and BufferGeometry\n\n\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\tconst faces = geometry.faces;\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tconst edge1 = face[ keys[ j ] ];\n\t\t\t\t\tconst edge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( const key in edges ) {\n\n\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\tlet vertex = geometry.vertices[ e.index1 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst start = group.start;\n\t\t\t\t\tconst count = group.count;\n\n\t\t\t\t\tfor ( let i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst edge1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst edge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// generate vertices\n\n\t\t\t\tfor ( const key in edges ) {\n\n\t\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tBoxBufferGeometry: BoxBufferGeometry,\n\tCircleGeometry: CircleGeometry,\n\tCircleBufferGeometry: CircleBufferGeometry,\n\tConeGeometry: ConeGeometry,\n\tConeBufferGeometry: ConeBufferGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tCylinderBufferGeometry: CylinderBufferGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\tLatheGeometry: LatheGeometry,\n\tLatheBufferGeometry: LatheBufferGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\tParametricGeometry: ParametricGeometry,\n\tParametricBufferGeometry: ParametricBufferGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPlaneBufferGeometry: PlaneBufferGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\tRingGeometry: RingGeometry,\n\tRingBufferGeometry: RingBufferGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tShapeBufferGeometry: ShapeBufferGeometry,\n\tSphereGeometry: SphereGeometry,\n\tSphereBufferGeometry: SphereBufferGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\tTextGeometry: TextGeometry,\n\tTextBufferGeometry: TextBufferGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusBufferGeometry: TorusBufferGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\tTubeGeometry: TubeGeometry,\n\tTubeBufferGeometry: TubeBufferGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\n/**\n * parameters = {\n *  color: <THREE.Color>\n * }\n */\n\nfunction ShadowMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'ShadowMaterial';\n\n\tthis.color = new Color( 0x000000 );\n\tthis.transparent = true;\n\n\tthis.setValues( parameters );\n\n}\n\nShadowMaterial.prototype = Object.create( Material.prototype );\nShadowMaterial.prototype.constructor = ShadowMaterial;\n\nShadowMaterial.prototype.isShadowMaterial = true;\n\nShadowMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\treturn this;\n\n};\n\nfunction RawShaderMaterial( parameters ) {\n\n\tShaderMaterial.call( this, parameters );\n\n\tthis.type = 'RawShaderMaterial';\n\n}\n\nRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\nRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\nRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n/**\n * parameters = {\n *  color: <hex>,\n *  roughness: <float>,\n *  metalness: <float>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  roughnessMap: new THREE.Texture( <Image> ),\n *\n *  metalnessMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  envMapIntensity: <float>\n *\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshStandardMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.type = 'MeshStandardMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.roughness = 1.0;\n\tthis.metalness = 0.0;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.roughnessMap = null;\n\n\tthis.metalnessMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.envMapIntensity = 1.0;\n\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.vertexTangents = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshStandardMaterial.prototype = Object.create( Material.prototype );\nMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\nMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\nMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'STANDARD': '' };\n\n\tthis.color.copy( source.color );\n\tthis.roughness = source.roughness;\n\tthis.metalness = source.metalness;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.roughnessMap = source.roughnessMap;\n\n\tthis.metalnessMap = source.metalnessMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.envMapIntensity = source.envMapIntensity;\n\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\tthis.vertexTangents = source.vertexTangents;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *  clearcoat: <float>,\n *  clearcoatMap: new THREE.Texture( <Image> ),\n *  clearcoatRoughness: <float>,\n *  clearcoatRoughnessMap: new THREE.Texture( <Image> ),\n *  clearcoatNormalScale: <Vector2>,\n *  clearcoatNormalMap: new THREE.Texture( <Image> ),\n *\n *  reflectivity: <float>,\n *  ior: <float>,\n *\n *  sheen: <Color>,\n *\n *  transmission: <float>,\n *  transmissionMap: new THREE.Texture( <Image> )\n * }\n */\n\nfunction MeshPhysicalMaterial( parameters ) {\n\n\tMeshStandardMaterial.call( this );\n\n\tthis.defines = {\n\n\t\t'STANDARD': '',\n\t\t'PHYSICAL': ''\n\n\t};\n\n\tthis.type = 'MeshPhysicalMaterial';\n\n\tthis.clearcoat = 0.0;\n\tthis.clearcoatMap = null;\n\tthis.clearcoatRoughness = 0.0;\n\tthis.clearcoatRoughnessMap = null;\n\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\tthis.clearcoatNormalMap = null;\n\n\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\tObject.defineProperty( this, 'ior', {\n\t\tget: function () {\n\n\t\t\treturn ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity );\n\n\t\t},\n\t\tset: function ( ior ) {\n\n\t\t\tthis.reflectivity = MathUtils.clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 );\n\n\t\t}\n\t} );\n\n\tthis.sheen = null; // null will disable sheen bsdf\n\n\tthis.transmission = 0.0;\n\tthis.transmissionMap = null;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\nMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\nMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\nMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = {\n\n\t\t'STANDARD': '',\n\t\t'PHYSICAL': ''\n\n\t};\n\n\tthis.clearcoat = source.clearcoat;\n\tthis.clearcoatMap = source.clearcoatMap;\n\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\tthis.reflectivity = source.reflectivity;\n\n\tif ( source.sheen ) {\n\n\t\tthis.sheen = ( this.sheen || new Color() ).copy( source.sheen );\n\n\t} else {\n\n\t\tthis.sheen = null;\n\n\t}\n\n\tthis.transmission = source.transmission;\n\tthis.transmissionMap = source.transmissionMap;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *  color: <hex>,\n *  specular: <hex>,\n *  shininess: <float>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.MultiplyOperation,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshPhongMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshPhongMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\tthis.specular = new Color( 0x111111 );\n\tthis.shininess = 30;\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshPhongMaterial.prototype = Object.create( Material.prototype );\nMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\nMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\nMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\tthis.specular.copy( source.specular );\n\tthis.shininess = source.shininess;\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *  color: <hex>,\n *\n *  map: new THREE.Texture( <Image> ),\n *  gradientMap: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshToonMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'TOON': '' };\n\n\tthis.type = 'MeshToonMaterial';\n\n\tthis.color = new Color( 0xffffff );\n\n\tthis.map = null;\n\tthis.gradientMap = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshToonMaterial.prototype = Object.create( Material.prototype );\nMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\nMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\nMeshToonMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\tthis.gradientMap = source.gradientMap;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *  opacity: <float>,\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshNormalMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshNormalMaterial';\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\n\tthis.fog = false;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshNormalMaterial.prototype = Object.create( Material.prototype );\nMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\nMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\nMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  lightMap: new THREE.Texture( <Image> ),\n *  lightMapIntensity: <float>\n *\n *  aoMap: new THREE.Texture( <Image> ),\n *  aoMapIntensity: <float>\n *\n *  emissive: <hex>,\n *  emissiveIntensity: <float>\n *  emissiveMap: new THREE.Texture( <Image> ),\n *\n *  specularMap: new THREE.Texture( <Image> ),\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n *  combine: THREE.Multiply,\n *  reflectivity: <float>,\n *  refractionRatio: <float>,\n *\n *  wireframe: <boolean>,\n *  wireframeLinewidth: <float>,\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshLambertMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.type = 'MeshLambertMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.map = null;\n\n\tthis.lightMap = null;\n\tthis.lightMapIntensity = 1.0;\n\n\tthis.aoMap = null;\n\tthis.aoMapIntensity = 1.0;\n\n\tthis.emissive = new Color( 0x000000 );\n\tthis.emissiveIntensity = 1.0;\n\tthis.emissiveMap = null;\n\n\tthis.specularMap = null;\n\n\tthis.alphaMap = null;\n\n\tthis.envMap = null;\n\tthis.combine = MultiplyOperation;\n\tthis.reflectivity = 1;\n\tthis.refractionRatio = 0.98;\n\n\tthis.wireframe = false;\n\tthis.wireframeLinewidth = 1;\n\tthis.wireframeLinecap = 'round';\n\tthis.wireframeLinejoin = 'round';\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshLambertMaterial.prototype = Object.create( Material.prototype );\nMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\nMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\nMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.map = source.map;\n\n\tthis.lightMap = source.lightMap;\n\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\tthis.aoMap = source.aoMap;\n\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\tthis.emissive.copy( source.emissive );\n\tthis.emissiveMap = source.emissiveMap;\n\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\tthis.specularMap = source.specularMap;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.envMap = source.envMap;\n\tthis.combine = source.combine;\n\tthis.reflectivity = source.reflectivity;\n\tthis.refractionRatio = source.refractionRatio;\n\n\tthis.wireframe = source.wireframe;\n\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\tthis.wireframeLinecap = source.wireframeLinecap;\n\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  matcap: new THREE.Texture( <Image> ),\n *\n *  map: new THREE.Texture( <Image> ),\n *\n *  bumpMap: new THREE.Texture( <Image> ),\n *  bumpScale: <float>,\n *\n *  normalMap: new THREE.Texture( <Image> ),\n *  normalMapType: THREE.TangentSpaceNormalMap,\n *  normalScale: <Vector2>,\n *\n *  displacementMap: new THREE.Texture( <Image> ),\n *  displacementScale: <float>,\n *  displacementBias: <float>,\n *\n *  alphaMap: new THREE.Texture( <Image> ),\n *\n *  skinning: <bool>,\n *  morphTargets: <bool>,\n *  morphNormals: <bool>\n * }\n */\n\nfunction MeshMatcapMaterial( parameters ) {\n\n\tMaterial.call( this );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.type = 'MeshMatcapMaterial';\n\n\tthis.color = new Color( 0xffffff ); // diffuse\n\n\tthis.matcap = null;\n\n\tthis.map = null;\n\n\tthis.bumpMap = null;\n\tthis.bumpScale = 1;\n\n\tthis.normalMap = null;\n\tthis.normalMapType = TangentSpaceNormalMap;\n\tthis.normalScale = new Vector2( 1, 1 );\n\n\tthis.displacementMap = null;\n\tthis.displacementScale = 1;\n\tthis.displacementBias = 0;\n\n\tthis.alphaMap = null;\n\n\tthis.skinning = false;\n\tthis.morphTargets = false;\n\tthis.morphNormals = false;\n\n\tthis.setValues( parameters );\n\n}\n\nMeshMatcapMaterial.prototype = Object.create( Material.prototype );\nMeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial;\n\nMeshMatcapMaterial.prototype.isMeshMatcapMaterial = true;\n\nMeshMatcapMaterial.prototype.copy = function ( source ) {\n\n\tMaterial.prototype.copy.call( this, source );\n\n\tthis.defines = { 'MATCAP': '' };\n\n\tthis.color.copy( source.color );\n\n\tthis.matcap = source.matcap;\n\n\tthis.map = source.map;\n\n\tthis.bumpMap = source.bumpMap;\n\tthis.bumpScale = source.bumpScale;\n\n\tthis.normalMap = source.normalMap;\n\tthis.normalMapType = source.normalMapType;\n\tthis.normalScale.copy( source.normalScale );\n\n\tthis.displacementMap = source.displacementMap;\n\tthis.displacementScale = source.displacementScale;\n\tthis.displacementBias = source.displacementBias;\n\n\tthis.alphaMap = source.alphaMap;\n\n\tthis.skinning = source.skinning;\n\tthis.morphTargets = source.morphTargets;\n\tthis.morphNormals = source.morphNormals;\n\n\treturn this;\n\n};\n\n/**\n * parameters = {\n *  color: <hex>,\n *  opacity: <float>,\n *\n *  linewidth: <float>,\n *\n *  scale: <float>,\n *  dashSize: <float>,\n *  gapSize: <float>\n * }\n */\n\nfunction LineDashedMaterial( parameters ) {\n\n\tLineBasicMaterial.call( this );\n\n\tthis.type = 'LineDashedMaterial';\n\n\tthis.scale = 1;\n\tthis.dashSize = 3;\n\tthis.gapSize = 1;\n\n\tthis.setValues( parameters );\n\n}\n\nLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\nLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\nLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\nLineDashedMaterial.prototype.copy = function ( source ) {\n\n\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\tthis.scale = source.scale;\n\tthis.dashSize = source.dashSize;\n\tthis.gapSize = source.gapSize;\n\n\treturn this;\n\n};\n\nvar Materials = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tShadowMaterial: ShadowMaterial,\n\tSpriteMaterial: SpriteMaterial,\n\tRawShaderMaterial: RawShaderMaterial,\n\tShaderMaterial: ShaderMaterial,\n\tPointsMaterial: PointsMaterial,\n\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\tMeshStandardMaterial: MeshStandardMaterial,\n\tMeshPhongMaterial: MeshPhongMaterial,\n\tMeshToonMaterial: MeshToonMaterial,\n\tMeshNormalMaterial: MeshNormalMaterial,\n\tMeshLambertMaterial: MeshLambertMaterial,\n\tMeshDepthMaterial: MeshDepthMaterial,\n\tMeshDistanceMaterial: MeshDistanceMaterial,\n\tMeshBasicMaterial: MeshBasicMaterial,\n\tMeshMatcapMaterial: MeshMatcapMaterial,\n\tLineDashedMaterial: LineDashedMaterial,\n\tLineBasicMaterial: LineBasicMaterial,\n\tMaterial: Material\n});\n\nconst AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tlet i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tlet value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t},\n\n\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\n\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n// DECLARE ALIAS AFTER assign prototype\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: ZeroCurvatureEnding,\n\t\tendingEnd: ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\nfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\tthis.name = name;\n\n\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n}\n\n// Static methods\n\nObject.assign( KeyframeTrack, {\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\ttoJSON: function ( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n} );\n\nObject.assign( KeyframeTrack.prototype, {\n\n\tconstructor: KeyframeTrack,\n\n\tTimeBufferType: Float32Array,\n\n\tValueBufferType: Float32Array,\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tsetInterpolation: function ( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t},\n\n\tgetInterpolation: function () {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t},\n\n\tgetValueSize: function () {\n\n\t\treturn this.values.length / this.times.length;\n\n\t},\n\n\t// move all keyframes either forwards or backwards in time\n\tshift: function ( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale: function ( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim: function ( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate: function () {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize: function () {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\tconst times = AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n} );\n\n/**\n * A Track of Boolean keyframe values.\n */\n\nfunction BooleanKeyframeTrack( name, times, values ) {\n\n\tKeyframeTrack.call( this, name, times, values );\n\n}\n\nBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: BooleanKeyframeTrack,\n\n\tValueTypeName: 'bool',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\tInterpolantFactoryMethodSmooth: undefined\n\n\t// Note: Actually this track could have a optimized / compressed\n\t// representation of a single value and a custom interpolant that\n\t// computes \"firstValue ^ isOdd( index )\".\n\n} );\n\n/**\n * A Track of keyframe values that represent color.\n */\n\nfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: ColorKeyframeTrack,\n\n\tValueTypeName: 'color'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n\t// Note: Very basic implementation and nothing special yet.\n\t// However, this is the place for color space parameterization.\n\n} );\n\n/**\n * A Track of numeric keyframe values.\n */\n\nfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: NumberKeyframeTrack,\n\n\tValueTypeName: 'number'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n/**\n * A Track of quaternion keyframe values.\n */\n\nfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: QuaternionKeyframeTrack,\n\n\tValueTypeName: 'quaternion',\n\n\t// ValueBufferType is inherited\n\n\tDefaultInterpolation: InterpolateLinear,\n\n\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t},\n\n\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n} );\n\n/**\n * A Track that interpolates Strings\n */\n\nfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: StringKeyframeTrack,\n\n\tValueTypeName: 'string',\n\tValueBufferType: Array,\n\n\tDefaultInterpolation: InterpolateDiscrete,\n\n\tInterpolantFactoryMethodLinear: undefined,\n\n\tInterpolantFactoryMethodSmooth: undefined\n\n} );\n\n/**\n * A Track of vectored keyframe values.\n */\n\nfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n}\n\nVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\tconstructor: VectorKeyframeTrack,\n\n\tValueTypeName: 'vector'\n\n\t// ValueBufferType is inherited\n\n\t// DefaultInterpolation is inherited\n\n} );\n\nfunction AnimationClip( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\tthis.name = name;\n\tthis.tracks = tracks;\n\tthis.duration = duration;\n\tthis.blendMode = blendMode;\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\t// this means it should figure out its duration by scanning the tracks\n\tif ( this.duration < 0 ) {\n\n\t\tthis.resetDuration();\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nObject.assign( AnimationClip, {\n\n\tparse: function ( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new AnimationClip( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t},\n\n\ttoJSON: function ( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t},\n\n\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t},\n\n\t// parse the animation.hierarchy format\n\tparseAnimation: function ( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new AnimationClip( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n} );\n\nObject.assign( AnimationClip.prototype, {\n\n\tresetDuration: function () {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t},\n\n\ttrim: function () {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tvalidate: function () {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t},\n\n\toptimize: function () {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new AnimationClip( this.name, this.duration, tracks, this.blendMode );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\treturn AnimationClip.toJSON( this );\n\n\t}\n\n} );\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tconst scope = this;\n\n\tlet isLoading = false;\n\tlet itemsLoaded = 0;\n\tlet itemsTotal = 0;\n\tlet urlModifier = undefined;\n\tconst handlers = [];\n\n\t// Refer to #5689 for the reason why we don't set .onStart\n\t// in the constructor\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\n\t\treturn this;\n\n\t};\n\n\tthis.addHandler = function ( regex, loader ) {\n\n\t\thandlers.push( regex, loader );\n\n\t\treturn this;\n\n\t};\n\n\tthis.removeHandler = function ( regex ) {\n\n\t\tconst index = handlers.indexOf( regex );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\thandlers.splice( index, 2 );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tthis.getHandler = function ( file ) {\n\n\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tconst regex = handlers[ i ];\n\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t};\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\nfunction Loader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.crossOrigin = 'anonymous';\n\tthis.withCredentials = false;\n\tthis.path = '';\n\tthis.resourcePath = '';\n\tthis.requestHeader = {};\n\n}\n\nObject.assign( Loader.prototype, {\n\n\tload: function ( /* url, onLoad, onProgress, onError */ ) {},\n\n\tloadAsync: function ( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t},\n\n\tparse: function ( /* data */ ) {},\n\n\tsetCrossOrigin: function ( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t},\n\n\tsetResourcePath: function ( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n} );\n\nconst loading = {};\n\nfunction FileLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nFileLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: FileLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\tlet request;\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\tdata = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tlet response;\n\t\t\t\tconst responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\trequest = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tconst response = this.response;\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( const header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction AnimationLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nAnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AnimationLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n} );\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nCompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: CompressedTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n} );\n\nfunction ImageLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ImageLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n} );\n\nfunction CubeTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nCubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: CubeTextureLoader,\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction DataTextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nDataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: DataTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\nfunction TextureLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: TextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tconst isJPEG = url.search( /\\.jpe?g($|\\?)/i ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t},\n\n\tgetTangentAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'EllipseCurve';\n\n\tthis.aX = aX || 0;\n\tthis.aY = aY || 0;\n\n\tthis.xRadius = xRadius || 1;\n\tthis.yRadius = yRadius || 1;\n\n\tthis.aStartAngle = aStartAngle || 0;\n\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\tthis.aClockwise = aClockwise || false;\n\n\tthis.aRotation = aRotation || 0;\n\n}\n\nEllipseCurve.prototype = Object.create( Curve.prototype );\nEllipseCurve.prototype.constructor = EllipseCurve;\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\nEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\tconst point = optionalTarget || new Vector2();\n\n\tconst twoPi = Math.PI * 2;\n\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t// ensures that deltaAngle is 0 .. 2 PI\n\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\tif ( samePoints ) {\n\n\t\t\tdeltaAngle = 0;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = twoPi;\n\n\t\t}\n\n\t}\n\n\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\tdeltaAngle = - twoPi;\n\n\t\t} else {\n\n\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t}\n\n\t}\n\n\tconst angle = this.aStartAngle + t * deltaAngle;\n\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\tif ( this.aRotation !== 0 ) {\n\n\t\tconst cos = Math.cos( this.aRotation );\n\t\tconst sin = Math.sin( this.aRotation );\n\n\t\tconst tx = x - this.aX;\n\t\tconst ty = y - this.aY;\n\n\t\t// Rotate the point about the center of the ellipse.\n\t\tx = tx * cos - ty * sin + this.aX;\n\t\ty = tx * sin + ty * cos + this.aY;\n\n\t}\n\n\treturn point.set( x, y );\n\n};\n\nEllipseCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.aX = source.aX;\n\tthis.aY = source.aY;\n\n\tthis.xRadius = source.xRadius;\n\tthis.yRadius = source.yRadius;\n\n\tthis.aStartAngle = source.aStartAngle;\n\tthis.aEndAngle = source.aEndAngle;\n\n\tthis.aClockwise = source.aClockwise;\n\n\tthis.aRotation = source.aRotation;\n\n\treturn this;\n\n};\n\n\nEllipseCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.aX = this.aX;\n\tdata.aY = this.aY;\n\n\tdata.xRadius = this.xRadius;\n\tdata.yRadius = this.yRadius;\n\n\tdata.aStartAngle = this.aStartAngle;\n\tdata.aEndAngle = this.aEndAngle;\n\n\tdata.aClockwise = this.aClockwise;\n\n\tdata.aRotation = this.aRotation;\n\n\treturn data;\n\n};\n\nEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.aX = json.aX;\n\tthis.aY = json.aY;\n\n\tthis.xRadius = json.xRadius;\n\tthis.yRadius = json.yRadius;\n\n\tthis.aStartAngle = json.aStartAngle;\n\tthis.aEndAngle = json.aEndAngle;\n\n\tthis.aClockwise = json.aClockwise;\n\n\tthis.aRotation = json.aRotation;\n\n\treturn this;\n\n};\n\nfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\tthis.type = 'ArcCurve';\n\n}\n\nArcCurve.prototype = Object.create( EllipseCurve.prototype );\nArcCurve.prototype.constructor = ArcCurve;\n\nArcCurve.prototype.isArcCurve = true;\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t *   p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t *   p(0) = x0, p(1) = x1\n\t *  and\n\t *   p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = new Vector3();\nconst px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nfunction CatmullRomCurve3( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CatmullRomCurve3';\n\n\tthis.points = points;\n\tthis.closed = closed;\n\tthis.curveType = curveType;\n\tthis.tension = tension;\n\n}\n\nCatmullRomCurve3.prototype = Object.create( Curve.prototype );\nCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\nCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst points = this.points;\n\tconst l = points.length;\n\n\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\tlet intPoint = Math.floor( p );\n\tlet weight = p - intPoint;\n\n\tif ( this.closed ) {\n\n\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\tintPoint = l - 2;\n\t\tweight = 1;\n\n\t}\n\n\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\tif ( this.closed || intPoint > 0 ) {\n\n\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate first point\n\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\tp0 = tmp;\n\n\t}\n\n\tconst p1 = points[ intPoint % l ];\n\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t} else {\n\n\t\t// extrapolate last point\n\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\tp3 = tmp;\n\n\t}\n\n\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t// init Centripetal / Chordal Catmull-Rom\n\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t// safety check for repeated points\n\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t}\n\n\tpoint.set(\n\t\tpx.calc( weight ),\n\t\tpy.calc( weight ),\n\t\tpz.calc( weight )\n\t);\n\n\treturn point;\n\n};\n\nCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tconst point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\tthis.closed = source.closed;\n\tthis.curveType = source.curveType;\n\tthis.tension = source.tension;\n\n\treturn this;\n\n};\n\nCatmullRomCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tconst point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\tdata.closed = this.closed;\n\tdata.curveType = this.curveType;\n\tdata.tension = this.tension;\n\n\treturn data;\n\n};\n\nCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tconst point = json.points[ i ];\n\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t}\n\n\tthis.closed = json.closed;\n\tthis.curveType = json.curveType;\n\tthis.tension = json.tension;\n\n\treturn this;\n\n};\n\n/**\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nfunction CubicBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\tthis.v3 = v3;\n\n}\n\nCubicBezierCurve.prototype = Object.create( Curve.prototype );\nCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\nCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction CubicBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'CubicBezierCurve3';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\tthis.v3 = v3;\n\n}\n\nCubicBezierCurve3.prototype = Object.create( Curve.prototype );\nCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\nCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\tpoint.set(\n\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t);\n\n\treturn point;\n\n};\n\nCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\tthis.v3.copy( source.v3 );\n\n\treturn this;\n\n};\n\nCubicBezierCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\tdata.v3 = this.v3.toArray();\n\n\treturn data;\n\n};\n\nCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\tthis.v3.fromArray( json.v3 );\n\n\treturn this;\n\n};\n\nfunction LineCurve( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve';\n\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nLineCurve.prototype = Object.create( Curve.prototype );\nLineCurve.prototype.constructor = LineCurve;\n\nLineCurve.prototype.isLineCurve = true;\n\nLineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve.prototype.getTangent = function ( t, optionalTarget ) {\n\n\tconst tangent = optionalTarget || new Vector2();\n\n\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\treturn tangent;\n\n};\n\nLineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction LineCurve3( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'LineCurve3';\n\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nLineCurve3.prototype = Object.create( Curve.prototype );\nLineCurve3.prototype.constructor = LineCurve3;\n\nLineCurve3.prototype.isLineCurve3 = true;\n\nLineCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tif ( t === 1 ) {\n\n\t\tpoint.copy( this.v2 );\n\n\t} else {\n\n\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t}\n\n\treturn point;\n\n};\n\n// Line curve is linear, so we can overwrite default getPointAt\n\nLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\treturn this.getPoint( u, optionalTarget );\n\n};\n\nLineCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nLineCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nLineCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\nQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction QuadraticBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'QuadraticBezierCurve3';\n\n\tthis.v0 = v0;\n\tthis.v1 = v1;\n\tthis.v2 = v2;\n\n}\n\nQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\nQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\nQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) {\n\n\tconst point = optionalTarget;\n\n\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\tpoint.set(\n\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t);\n\n\treturn point;\n\n};\n\nQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.v0.copy( source.v0 );\n\tthis.v1.copy( source.v1 );\n\tthis.v2.copy( source.v2 );\n\n\treturn this;\n\n};\n\nQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.v0 = this.v0.toArray();\n\tdata.v1 = this.v1.toArray();\n\tdata.v2 = this.v2.toArray();\n\n\treturn data;\n\n};\n\nQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.v0.fromArray( json.v0 );\n\tthis.v1.fromArray( json.v1 );\n\tthis.v2.fromArray( json.v2 );\n\n\treturn this;\n\n};\n\nfunction SplineCurve( points = [] ) {\n\n\tCurve.call( this );\n\n\tthis.type = 'SplineCurve';\n\n\tthis.points = points;\n\n}\n\nSplineCurve.prototype = Object.create( Curve.prototype );\nSplineCurve.prototype.constructor = SplineCurve;\n\nSplineCurve.prototype.isSplineCurve = true;\n\nSplineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) {\n\n\tconst point = optionalTarget;\n\n\tconst points = this.points;\n\tconst p = ( points.length - 1 ) * t;\n\n\tconst intPoint = Math.floor( p );\n\tconst weight = p - intPoint;\n\n\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\tconst p1 = points[ intPoint ];\n\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\tpoint.set(\n\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t);\n\n\treturn point;\n\n};\n\nSplineCurve.prototype.copy = function ( source ) {\n\n\tCurve.prototype.copy.call( this, source );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\tconst point = source.points[ i ];\n\n\t\tthis.points.push( point.clone() );\n\n\t}\n\n\treturn this;\n\n};\n\nSplineCurve.prototype.toJSON = function () {\n\n\tconst data = Curve.prototype.toJSON.call( this );\n\n\tdata.points = [];\n\n\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\tconst point = this.points[ i ];\n\t\tdata.points.push( point.toArray() );\n\n\t}\n\n\treturn data;\n\n};\n\nSplineCurve.prototype.fromJSON = function ( json ) {\n\n\tCurve.prototype.fromJSON.call( this, json );\n\n\tthis.points = [];\n\n\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\tconst point = json.points[ i ];\n\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t}\n\n\treturn this;\n\n};\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n *  curves, but retains the api of a curve\n **************************************************************/\n\nfunction CurvePath() {\n\n\tCurve.call( this );\n\n\tthis.type = 'CurvePath';\n\n\tthis.curves = [];\n\tthis.autoClose = false; // Automatically closes the path\n\n}\n\nCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\tconstructor: CurvePath,\n\n\tadd: function ( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t},\n\n\tclosePath: function () {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t},\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint: function ( t ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 <d\n\n\t},\n\n\t// We cannot use the default THREE.Curve getPoint() with getLength() because in\n\t// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath\n\t// getPoint() depends on getLength\n\n\tgetLength: function () {\n\n\t\tconst lens = this.getCurveLengths();\n\t\treturn lens[ lens.length - 1 ];\n\n\t},\n\n\t// cacheLengths must be recalculated.\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.cacheLengths = null;\n\t\tthis.getCurveLengths();\n\n\t},\n\n\t// Compute lengths and cache them\n\t// We cannot overwrite getLengths() because UtoT mapping uses it.\n\n\tgetCurveLengths: function () {\n\n\t\t// We use cache values if curves and cache array are same length\n\n\t\tif ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {\n\n\t\t\treturn this.cacheLengths;\n\n\t\t}\n\n\t\t// Get length of sub-curve\n\t\t// Push sums into cached array\n\n\t\tconst lengths = [];\n\t\tlet sums = 0;\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tsums += this.curves[ i ].getLength();\n\t\t\tlengths.push( sums );\n\n\t\t}\n\n\t\tthis.cacheLengths = lengths;\n\n\t\treturn lengths;\n\n\t},\n\n\tgetSpacedPoints: function ( divisions = 40 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let i = 0; i <= divisions; i ++ ) {\n\n\t\t\tpoints.push( this.getPoint( i / divisions ) );\n\n\t\t}\n\n\t\tif ( this.autoClose ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tgetPoints: function ( divisions = 12 ) {\n\n\t\tconst points = [];\n\t\tlet last;\n\n\t\tfor ( let i = 0, curves = this.curves; i < curves.length; i ++ ) {\n\n\t\t\tconst curve = curves[ i ];\n\t\t\tconst resolution = ( curve && curve.isEllipseCurve ) ? divisions * 2\n\t\t\t\t: ( curve && ( curve.isLineCurve || curve.isLineCurve3 ) ) ? 1\n\t\t\t\t\t: ( curve && curve.isSplineCurve ) ? divisions * curve.points.length\n\t\t\t\t\t\t: divisions;\n\n\t\t\tconst pts = curve.getPoints( resolution );\n\n\t\t\tfor ( let j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\tconst point = pts[ j ];\n\n\t\t\t\tif ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates\n\n\t\t\t\tpoints.push( point );\n\t\t\t\tlast = point;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.autoClose && points.length > 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Path( points ) {\n\n\tCurvePath.call( this );\n\n\tthis.type = 'Path';\n\n\tthis.currentPoint = new Vector2();\n\n\tif ( points ) {\n\n\t\tthis.setFromPoints( points );\n\n\t}\n\n}\n\nPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\tconstructor: Path,\n\n\tsetFromPoints: function ( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t},\n\n\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t},\n\n\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t},\n\n\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t},\n\n\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = CurvePath.prototype.toJSON.call( this );\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Shape( points ) {\n\n\tPath.call( this, points );\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\tthis.type = 'Shape';\n\n\tthis.holes = [];\n\n}\n\nShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\tconstructor: Shape,\n\n\tgetPointsHoles: function ( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t},\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints: function ( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tPath.prototype.copy.call( this, source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = Path.prototype.toJSON.call( this );\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction Light( color, intensity = 1 ) {\n\n\tObject3D.call( this );\n\n\tthis.type = 'Light';\n\n\tthis.color = new Color( color );\n\tthis.intensity = intensity;\n\n}\n\nLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: Light,\n\n\tisLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tObject3D.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\tLight.call( this, skyColor, intensity );\n\n\tthis.type = 'HemisphereLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.groundColor = new Color( groundColor );\n\n}\n\nHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: HemisphereLight,\n\n\tisHemisphereLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction LightShadow( camera ) {\n\n\tthis.camera = camera;\n\n\tthis.bias = 0;\n\tthis.normalBias = 0;\n\tthis.radius = 1;\n\n\tthis.mapSize = new Vector2( 512, 512 );\n\n\tthis.map = null;\n\tthis.mapPass = null;\n\tthis.matrix = new Matrix4();\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis._frustum = new Frustum();\n\tthis._frameExtents = new Vector2( 1, 1 );\n\n\tthis._viewportCount = 1;\n\n\tthis._viewports = [\n\n\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t];\n\n}\n\nObject.assign( LightShadow.prototype, {\n\n\t_projScreenMatrix: new Matrix4(),\n\n\t_lightPositionWorld: new Vector3(),\n\n\t_lookTarget: new Vector3(),\n\n\tgetViewportCount: function () {\n\n\t\treturn this._viewportCount;\n\n\t},\n\n\tgetFrustum: function () {\n\n\t\treturn this._frustum;\n\n\t},\n\n\tupdateMatrices: function ( light ) {\n\n\t\tconst shadowCamera = this.camera,\n\t\t\tshadowMatrix = this.matrix,\n\t\t\tprojScreenMatrix = this._projScreenMatrix,\n\t\t\tlookTarget = this._lookTarget,\n\t\t\tlightPositionWorld = this._lightPositionWorld;\n\n\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( lightPositionWorld );\n\n\t\tlookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( lookTarget );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\tprojScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t},\n\n\tgetViewport: function ( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t},\n\n\tgetFrameExtents: function () {\n\n\t\treturn this._frameExtents;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n} );\n\nfunction SpotLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\tthis.focus = 1;\n\n}\n\nSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: SpotLightShadow,\n\n\tisSpotLightShadow: true,\n\n\tupdateMatrices: function ( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t}\n\n} );\n\nfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'SpotLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / Math.PI;\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new SpotLightShadow();\n\n}\n\nSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: SpotLight,\n\n\tisSpotLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction PointLightShadow() {\n\n\tLightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\tthis._frameExtents = new Vector2( 4, 2 );\n\n\tthis._viewportCount = 6;\n\n\tthis._viewports = [\n\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t// following orientation:\n\t\t//\n\t\t//  xzXZ\n\t\t//   y Y\n\t\t//\n\t\t// X - Positive x direction\n\t\t// x - Negative x direction\n\t\t// Y - Positive y direction\n\t\t// y - Negative y direction\n\t\t// Z - Positive z direction\n\t\t// z - Negative z direction\n\n\t\t// positive X\n\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t// negative X\n\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t// positive Z\n\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t// negative Z\n\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t// positive Y\n\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t// negative Y\n\t\tnew Vector4( 1, 0, 1, 1 )\n\t];\n\n\tthis._cubeDirections = [\n\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t];\n\n\tthis._cubeUps = [\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t];\n\n}\n\nPointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: PointLightShadow,\n\n\tisPointLightShadow: true,\n\n\tupdateMatrices: function ( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera,\n\t\t\tshadowMatrix = this.matrix,\n\t\t\tlightPositionWorld = this._lightPositionWorld,\n\t\t\tlookTarget = this._lookTarget,\n\t\t\tprojScreenMatrix = this._projScreenMatrix;\n\n\t\tlightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( lightPositionWorld );\n\n\t\tlookTarget.copy( camera.position );\n\t\tlookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z );\n\n\t\tprojScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( projScreenMatrix );\n\n\t}\n\n} );\n\nfunction PointLight( color, intensity, distance, decay ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'PointLight';\n\n\tObject.defineProperty( this, 'power', {\n\t\tget: function () {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t},\n\t\tset: function ( power ) {\n\n\t\t\t// intensity = power per solid angle.\n\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t}\n\t} );\n\n\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\tthis.shadow = new PointLightShadow();\n\n}\n\nPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: PointLight,\n\n\tisPointLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction OrthographicCamera( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\tCamera.call( this );\n\n\tthis.type = 'OrthographicCamera';\n\n\tthis.zoom = 1;\n\tthis.view = null;\n\n\tthis.left = left;\n\tthis.right = right;\n\tthis.top = top;\n\tthis.bottom = bottom;\n\n\tthis.near = near;\n\tthis.far = far;\n\n\tthis.updateProjectionMatrix();\n\n}\n\nOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\tconstructor: OrthographicCamera,\n\n\tisOrthographicCamera: true,\n\n\tcopy: function ( source, recursive ) {\n\n\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t},\n\n\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tclearViewOffset: function () {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t},\n\n\tupdateProjectionMatrix: function () {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction DirectionalLightShadow() {\n\n\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n}\n\nDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\tconstructor: DirectionalLightShadow,\n\n\tisDirectionalLightShadow: true,\n\n\tupdateMatrices: function ( light ) {\n\n\t\tLightShadow.prototype.updateMatrices.call( this, light );\n\n\t}\n\n} );\n\nfunction DirectionalLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'DirectionalLight';\n\n\tthis.position.copy( Object3D.DefaultUp );\n\tthis.updateMatrix();\n\n\tthis.target = new Object3D();\n\n\tthis.shadow = new DirectionalLightShadow();\n\n}\n\nDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: DirectionalLight,\n\n\tisDirectionalLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n} );\n\nfunction AmbientLight( color, intensity ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'AmbientLight';\n\n}\n\nAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: AmbientLight,\n\n\tisAmbientLight: true\n\n} );\n\nfunction RectAreaLight( color, intensity, width, height ) {\n\n\tLight.call( this, color, intensity );\n\n\tthis.type = 'RectAreaLight';\n\n\tthis.width = ( width !== undefined ) ? width : 10;\n\tthis.height = ( height !== undefined ) ? height : 10;\n\n}\n\nRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: RectAreaLight,\n\n\tisRectAreaLight: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n/**\n * Primary reference:\n *   https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n *   https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tObject.defineProperty( this, 'isSphericalHarmonics3', { value: true } );\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nfunction LightProbe( sh, intensity ) {\n\n\tLight.call( this, undefined, intensity );\n\n\tthis.type = 'LightProbe';\n\n\tthis.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3();\n\n}\n\nLightProbe.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\tconstructor: LightProbe,\n\n\tisLightProbe: true,\n\n\tcopy: function ( source ) {\n\n\t\tLight.prototype.copy.call( this, source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = Light.prototype.toJSON.call( this, meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction MaterialLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.textures = {};\n\n}\n\nMaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: MaterialLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = new Materials[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen );\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\n\t\treturn material;\n\n\t},\n\n\tsetTextures: function ( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n} );\n\nconst LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\nfunction InstancedBufferGeometry() {\n\n\tBufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.instanceCount = Infinity;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) {\n\n\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\tmeshPerAttribute = normalized;\n\n\t\tnormalized = false;\n\n\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t}\n\n\tBufferAttribute.call( this, array, itemSize, normalized );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ()\t{\n\n\t\tconst data = BufferAttribute.prototype.toJSON.call( this );\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction BufferGeometryLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nBufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: BufferGeometryLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\t\tlet geometryShapes;\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TubeGeometry':\n\t\t\t\t\tcase 'TubeBufferGeometry':\n\n\t\t\t\t\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t\t\t\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.closed\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.' );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tlet texture;\n\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture( image );\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/* DEPRECATED */\n\n\tsetTexturePath( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: CubeUVRefractionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\tLoader.call( this, manager );\n\n\tthis.options = { premultiplyAlpha: 'none' };\n\n}\n\nImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ImageBitmapLoader,\n\n\tisImageBitmapLoader: true,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n} );\n\nfunction ShapePath() {\n\n\tthis.type = 'ShapePath';\n\n\tthis.color = new Color();\n\n\tthis.subPaths = [];\n\tthis.currentPath = null;\n\n}\n\nObject.assign( ShapePath.prototype, {\n\n\tmoveTo: function ( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tlineTo: function ( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t},\n\n\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t},\n\n\tsplineThru: function ( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t},\n\n\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success    or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t//  with the horizontal line through inPt, left of inPt\n\t\t\t//  not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tconst toChange = [];\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction Font( data ) {\n\n\tthis.type = 'Font';\n\n\tthis.data = data;\n\n}\n\nObject.assign( Font.prototype, {\n\n\tisFont: true,\n\n\tgenerateShapes: function ( text, size = 100 ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n} );\n\nfunction createPaths( text, size, data ) {\n\n\tconst chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nfunction FontLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nFontLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: FontLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tconst font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n} );\n\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\t_context = value;\n\n\t}\n\n};\n\nfunction AudioLoader( manager ) {\n\n\tLoader.call( this, manager );\n\n}\n\nAudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AudioLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n} );\n\nfunction HemisphereLightProbe( skyColor, groundColor, intensity ) {\n\n\tLightProbe.call( this, undefined, intensity );\n\n\tconst color1 = new Color().set( skyColor );\n\tconst color2 = new Color().set( groundColor );\n\n\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\tconst c0 = Math.sqrt( Math.PI );\n\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n}\n\nHemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\tconstructor: HemisphereLightProbe,\n\n\tisHemisphereLightProbe: true,\n\n\tcopy: function ( source ) { // modifying colors not currently supported\n\n\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\treturn data;\n\n\t}\n\n} );\n\nfunction AmbientLightProbe( color, intensity ) {\n\n\tLightProbe.call( this, undefined, intensity );\n\n\tconst color1 = new Color().set( color );\n\n\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n}\n\nAmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), {\n\n\tconstructor: AmbientLightProbe,\n\n\tisAmbientLightProbe: true,\n\n\tcopy: function ( source ) { // modifying color not currently supported\n\n\t\tLightProbe.prototype.copy.call( this, source );\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( meta ) {\n\n\t\tconst data = LightProbe.prototype.toJSON.call( this, meta );\n\n\t\t// data.sh = this.sh.toArray(); // todo\n\n\t\treturn data;\n\n\t}\n\n} );\n\nconst _eyeRight = new Matrix4();\nconst _eyeLeft = new Matrix4();\n\nfunction StereoCamera() {\n\n\tthis.type = 'StereoCamera';\n\n\tthis.aspect = 1;\n\n\tthis.eyeSep = 0.064;\n\n\tthis.cameraL = new PerspectiveCamera();\n\tthis.cameraL.layers.enable( 1 );\n\tthis.cameraL.matrixAutoUpdate = false;\n\n\tthis.cameraR = new PerspectiveCamera();\n\tthis.cameraR.layers.enable( 2 );\n\tthis.cameraR.matrixAutoUpdate = false;\n\n\tthis._cache = {\n\t\tfocus: null,\n\t\tfov: null,\n\t\taspect: null,\n\t\tnear: null,\n\t\tfar: null,\n\t\tzoom: null,\n\t\teyeSep: null\n\t};\n\n}\n\nObject.assign( StereoCamera.prototype, {\n\n\tupdate: function ( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n} );\n\nclass Clock {\n\n\tconstructor( autoStart ) {\n\n\t\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$2, _quaternion$3, _scale$1 );\n\n\t\t_orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion$3 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$2.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$2.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$2.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$2.x, _position$2.y, _position$2.z );\n\t\t\tlistener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$4, _scale$2 );\n\n\t\t_orientation$1.set( 0, 0, 1 ).applyQuaternion( _quaternion$4 );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position$3.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position$3.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position$3.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position$3.x, _position$3.y, _position$3.z );\n\t\t\tpanner.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\tthis.binding = binding;\n\tthis.valueSize = valueSize;\n\n\tlet mixFunction,\n\t\tmixFunctionAdditive,\n\t\tsetIdentity;\n\n\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t//\n\t// interpolators can use .buffer as their .result\n\t// the data then goes to 'incoming'\n\t//\n\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t// the cumulative result and are compared to detect\n\t// changes\n\t//\n\t// 'orig' stores the original state of the property\n\t//\n\t// 'add' is used for additive cumulative results\n\t//\n\t// 'work' is optional and is only present for quaternion types. It is used\n\t// to store intermediate quaternion multiplication results\n\n\tswitch ( typeName ) {\n\n\t\tcase 'quaternion':\n\t\t\tmixFunction = this._slerp;\n\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\tthis._workIndex = 5;\n\t\t\tbreak;\n\n\t\tcase 'string':\n\t\tcase 'bool':\n\t\t\tmixFunction = this._select;\n\n\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t// additive is not relevant for non-numeric types\n\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmixFunction = this._lerp;\n\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t}\n\n\tthis._mixBufferRegion = mixFunction;\n\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\tthis._setIdentity = setIdentity;\n\tthis._origIndex = 3;\n\tthis._addIndex = 4;\n\n\tthis.cumulativeWeight = 0;\n\tthis.cumulativeWeightAdditive = 0;\n\n\tthis.useCount = 0;\n\tthis.referenceCount = 0;\n\n}\n\nObject.assign( PropertyMixer.prototype, {\n\n\t// accumulate data in the 'incoming' region into 'accu<i>'\n\taccumulate: function ( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t},\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive: function ( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t},\n\n\t// apply the state of 'accu<i>' to the binding when accus differ\n\tapply: function ( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState: function () {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t},\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState: function () {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t},\n\n\t_setAdditiveIdentityNumeric: function () {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t},\n\n\t_setAdditiveIdentityQuaternion: function () {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t},\n\n\t_setAdditiveIdentityOther: function () {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t},\n\n\n\t// mix functions\n\n\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t},\n\n\t_slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t},\n\n\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t},\n\n\t_lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n} );\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: function ( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t},\n\n\tparseTrackName: function ( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t},\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tconst source = this.resolvedProperty;\n\n\t\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n// DECLARE ALIAS AFTER assign prototype\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n *  - Add objects you would otherwise pass as 'root' to the\n *    constructor or the .clipAction method of AnimationMixer.\n *\n *  - Instead pass this object as 'root'.\n *\n *  - You can also add and remove objects later when the mixer\n *    is running.\n *\n * Note:\n *\n *    Objects of this class appear as one object to the mixer,\n *    so cache control of the individual objects must be done\n *    on the group.\n *\n * Limitation:\n *\n *  - The animated properties must be compatible among the\n *    all objects in the group.\n *\n *  - A single property can either be controlled through a\n *    target group or directly, but not both.\n */\n\nfunction AnimationObjectGroup() {\n\n\tthis.uuid = MathUtils.generateUUID();\n\n\t// cached objects followed by the active ones\n\tthis._objects = Array.prototype.slice.call( arguments );\n\n\tthis.nCachedObjects_ = 0; // threshold\n\t// note: read by PropertyBinding.Composite\n\n\tconst indices = {};\n\tthis._indicesByUUID = indices; // for bookkeeping\n\n\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t}\n\n\tthis._paths = []; // inside: string\n\tthis._parsedPaths = []; // inside: { we don't care, here }\n\tthis._bindings = []; // inside: Array< PropertyBinding >\n\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\tconst scope = this;\n\n\tthis.stats = {\n\n\t\tobjects: {\n\t\t\tget total() {\n\n\t\t\t\treturn scope._objects.length;\n\n\t\t\t},\n\t\t\tget inUse() {\n\n\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t}\n\t\t},\n\t\tget bindingsPerObject() {\n\n\t\t\treturn scope._bindings.length;\n\n\t\t}\n\n\t};\n\n}\n\nObject.assign( AnimationObjectGroup.prototype, {\n\n\tisAnimationObjectGroup: true,\n\n\tadd: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\tremove: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// remove & forget\n\tuncache: function () {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t},\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t},\n\n\tunsubscribe_: function ( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n} );\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction AnimationMixer( root ) {\n\n\tthis._root = root;\n\tthis._initMemoryManager();\n\tthis._accuIndex = 0;\n\n\tthis.time = 0;\n\n\tthis.timeScale = 1.0;\n\n}\n\nAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\tconstructor: AnimationMixer,\n\n\t_bindAction: function ( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t},\n\n\t_activateAction: function ( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t},\n\n\t_deactivateAction: function ( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t},\n\n\t// Memory manager\n\n\t_initMemoryManager: function () {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t},\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction: function ( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t},\n\n\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t},\n\n\t_removeInactiveAction: function ( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t},\n\n\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_lendAction: function ( action ) {\n\n\t\t// [ active actions |  inactive actions  ]\n\t\t// [  active actions >| inactive actions ]\n\t\t//                 s        a\n\t\t//                  <-swap->\n\t\t//                 a        s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t},\n\n\t_takeBackAction: function ( action ) {\n\n\t\t// [  active actions  | inactive actions ]\n\t\t// [ active actions |< inactive actions  ]\n\t\t//        a        s\n\t\t//         <-swap->\n\t\t//        s        a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t},\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t},\n\n\t_removeInactiveBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t},\n\n\t_lendBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t},\n\n\t_takeBackBinding: function ( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t},\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant: function () {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t},\n\n\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t},\n\n\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction: function ( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t},\n\n\t// get an existing action\n\texistingAction: function ( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction: function () {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// advance the time and update apply the animation\n\tupdate: function ( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime: function ( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t},\n\n\t// return this mixer's root target object\n\tgetRoot: function () {\n\n\t\treturn this._root;\n\n\t},\n\n\t// free all resources specific to a particular clip\n\tuncacheClip: function ( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t},\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot: function ( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t// remove a targeted clip from the cache\n\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n} );\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\tInterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tconst ib = InterleavedBuffer.prototype.clone.call( this, data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tconst json = InterleavedBuffer.prototype.toJSON.call( this, data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n} );\n\nfunction GLBufferAttribute( buffer, type, itemSize, elementSize, count ) {\n\n\tthis.buffer = buffer;\n\tthis.type = type;\n\tthis.itemSize = itemSize;\n\tthis.elementSize = elementSize;\n\tthis.count = count;\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( GLBufferAttribute.prototype, {\n\n\tisGLBufferAttribute: true,\n\n\tsetBuffer: function ( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t},\n\n\tsetType: function ( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t},\n\n\tsetItemSize: function ( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t},\n\n\tsetCount: function ( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t},\n\n} );\n\nfunction Raycaster( origin, direction, near, far ) {\n\n\tthis.ray = new Ray( origin, direction );\n\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\tthis.near = near || 0;\n\tthis.far = far || Infinity;\n\tthis.camera = null;\n\tthis.layers = new Layers();\n\n\tthis.params = {\n\t\tMesh: {},\n\t\tLine: { threshold: 1 },\n\t\tLOD: {},\n\t\tPoints: { threshold: 1 },\n\t\tSprite: {}\n\t};\n\n\tObject.defineProperties( this.params, {\n\t\tPointCloud: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\treturn this.Points;\n\n\t\t\t}\n\t\t}\n\t} );\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\nObject.assign( Raycaster.prototype, {\n\n\tset: function ( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t},\n\n\tsetFromCamera: function ( coords, camera ) {\n\n\t\tif ( camera && camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera && camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t},\n\n\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\tconst intersects = optionalTarget || [];\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t},\n\n\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\tconst intersects = optionalTarget || [];\n\n\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\treturn intersects;\n\n\t\t}\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n} );\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be betwee EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius, theta, y ) {\n\n\t\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$8 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min, max ) {\n\n\t\tObject.defineProperty( this, 'isBox2', { value: true } );\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$8.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector$8.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start, end ) {\n\n\t\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\t\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = MathUtils.clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n}\n\nfunction ImmediateRenderObject( material ) {\n\n\tObject3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n\tthis.hasPositions = false;\n\tthis.hasNormals = false;\n\tthis.hasColors = false;\n\tthis.hasUvs = false;\n\n\tthis.positionArray = null;\n\tthis.normalArray = null;\n\tthis.colorArray = null;\n\tthis.uvArray = null;\n\n\tthis.count = 0;\n\n}\n\nImmediateRenderObject.prototype = Object.create( Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$9.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$9 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$a.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$a.x, _vector$a.y, _vector$a.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$a.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$a.x, _vector$a.y, _vector$a.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new OctahedronBufferGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector$b.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the radials\n\n\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1$6.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3$1.subVectors( _v2$3, _v1$6 );\n\n\t\tthis.lightPlane.lookAt( _v2$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2$3 );\n\t\tthis.targetLine.scale.z = _v3$1.length();\n\n\t}\n\n}\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1', colorCone );\n\t\taddLine( 'p', 'n2', colorCone );\n\t\taddLine( 'p', 'n3', colorCone );\n\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2', colorUp );\n\t\taddLine( 'u2', 'u3', colorUp );\n\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t// target\n\n\t\taddLine( 'c', 't', colorTarget );\n\t\taddLine( 'p', 'c', colorCross );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\tfunction addLine( a, b, color ) {\n\n\t\t\taddPoint( a, color );\n\t\t\taddPoint( b, color );\n\n\t\t}\n\n\t\tfunction addPoint( id, color ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector$c.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector$c.x, _vector$c.y, _vector$c.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box$3.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box$3.isEmpty() ) return;\n\n\t\tconst min = _box$3.min;\n\t\tconst max = _box$3.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tLineSegments.prototype.copy.call( this, source );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 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, 1, 0, 0, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tlet scale = - this.plane.constant;\n\n\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\tconstructor( dir, origin, length, color, headLength, headWidth ) {\n\n\t\tsuper();\n\t\t// dir is assumed to be normalized\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( dir === undefined ) dir = new Vector3( 0, 0, 1 );\n\t\tif ( origin === undefined ) origin = new Vector3( 0, 0, 0 );\n\t\tif ( length === undefined ) length = 1;\n\t\tif ( color === undefined ) color = 0xffff00;\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength, headWidth ) {\n\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n}\n\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nconst DataUtils = {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\ttoHalfFloat: function ( val ) {\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n};\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ LinearEncoding ]: 0,\n\t[ sRGBEncoding ]: 1,\n\t[ RGBEEncoding ]: 2,\n\t[ RGBM7Encoding ]: 3,\n\t[ RGBM16Encoding ]: 4,\n\t[ RGBDEncoding ]: 5,\n\t[ GammaEncoding ]: 6\n};\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n */\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: NearestFilter,\n\t\t\tminFilter: NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: UnsignedByteType,\n\t\t\tformat: RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\t\tconst clearAlpha = renderer.getClearAlpha();\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.outputEncoding = LinearEncoding;\n\n\t\tlet background = scene.background;\n\t\tif ( background && background.isColor ) {\n\n\t\t\tbackground.convertSRGBToLinear();\n\t\t\t// Convert linear to RGBE\n\t\t\tconst maxComponent = Math.max( background.r, background.g, background.b );\n\t\t\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\t\t\tbackground = background.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\t\t\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\t\t\trenderer.setClearColor( background, alpha );\n\t\t\tscene.background = null;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.setClearColor( _clearColor, clearAlpha );\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tuniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ];\n\t\tuniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ];\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\t\tblurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\t\tblurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== UnsignedByteType ) return false;\n\n\treturn texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new Vector2( 1, 1 );\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include <common>\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include <encodings_pars_fragment>\n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n}\n\nfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n}\n\nconst LineStrip = 0;\nconst LinePieces = 1;\nconst NoColors = 0;\nconst FaceColors = 1;\nconst VertexColors = 2;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials = [] ) {\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\treturn new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\nCurve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\nObject.assign( CurvePath.prototype, {\n\n\tcreatePointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\tconst pts = this.getPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t// generate geometry from equidistant sampling along the path\n\n\t\tconst pts = this.getSpacedPoints( divisions );\n\t\treturn this.createGeometry( pts );\n\n\t},\n\n\tcreateGeometry: function ( points ) {\n\n\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\tconst geometry = new Geometry();\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\n//\n\nObject.assign( Path.prototype, {\n\n\tfromPoints: function ( points ) {\n\n\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\treturn this.setFromPoints( points );\n\n\t}\n\n} );\n\n//\n\nfunction ClosedSplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\tthis.closed = true;\n\n}\n\nClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction SplineCurve3( points ) {\n\n\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n//\n\nfunction Spline( points ) {\n\n\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\tCatmullRomCurve3.call( this, points );\n\tthis.type = 'catmullrom';\n\n}\n\nSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\nObject.assign( Spline.prototype, {\n\n\tinitFromArray: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t},\n\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t},\n\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\nGridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\nSkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\nObject.assign( Loader.prototype, {\n\n\textractUrlBase: function ( url ) {\n\n\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t}\n\n} );\n\nLoader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t}\n\n};\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new DataTextureLoader( manager );\n\n}\n\n//\n\nObject.assign( Box2.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Box3.prototype, {\n\n\tcenter: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t},\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t},\n\tsize: function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\treturn this.getSize( optionalTarget );\n\n\t}\n} );\n\nObject.assign( Sphere.prototype, {\n\n\tempty: function () {\n\n\t\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\t\treturn this.isEmpty();\n\n\t},\n\n} );\n\nFrustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\n};\n\nLine3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\nObject.assign( MathUtils, {\n\n\trandom16: function () {\n\n\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\treturn Math.random();\n\n\t},\n\n\tnearestPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\treturn MathUtils.floorPowerOfTwo( value );\n\n\t},\n\n\tnextPowerOfTwo: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\treturn MathUtils.ceilPowerOfTwo( value );\n\n\t}\n\n} );\n\nObject.assign( Matrix3.prototype, {\n\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\treturn vector.applyMatrix3( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t},\n\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\t\treturn attribute.applyMatrix3( this );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t},\n\tgetInverse: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\t\treturn this.copy( matrix ).invert();\n\n\t}\n\n} );\n\nObject.assign( Matrix4.prototype, {\n\n\textractPosition: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\treturn this.copyPosition( m );\n\n\t},\n\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\t\treturn this.toArray( array, offset );\n\n\t},\n\tgetPosition: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\treturn new Vector3().setFromMatrixColumn( this, 3 );\n\n\t},\n\tsetRotationFromQuaternion: function ( q ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\treturn this.makeRotationFromQuaternion( q );\n\n\t},\n\tmultiplyToArray: function () {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t},\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector4: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t},\n\trotateAxis: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\tv.transformDirection( this );\n\n\t},\n\tcrossVector: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\treturn vector.applyMatrix4( this );\n\n\t},\n\ttranslate: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t},\n\trotateX: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t},\n\trotateY: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t},\n\trotateZ: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t},\n\trotateByAxis: function () {\n\n\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t},\n\tapplyToBufferAttribute: function ( attribute ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\t\treturn attribute.applyMatrix4( this );\n\n\t},\n\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t},\n\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t},\n\tgetInverse: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\t\treturn this.copy( matrix ).invert();\n\n\t}\n\n} );\n\nPlane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\nObject.assign( Quaternion.prototype, {\n\n\tmultiplyVector3: function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\t\treturn vector.applyQuaternion( this );\n\n\t},\n\tinverse: function ( ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\t\treturn this.invert();\n\n\t}\n\n} );\n\nObject.assign( Ray.prototype, {\n\n\tisIntersectionBox: function ( box ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\treturn this.intersectsBox( box );\n\n\t},\n\tisIntersectionPlane: function ( plane ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\treturn this.intersectsPlane( plane );\n\n\t},\n\tisIntersectionSphere: function ( sphere ) {\n\n\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\treturn this.intersectsSphere( sphere );\n\n\t}\n\n} );\n\nObject.assign( Triangle.prototype, {\n\n\tarea: function () {\n\n\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\treturn this.getArea();\n\n\t},\n\tbarycoordFromPoint: function ( point, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn this.getBarycoord( point, target );\n\n\t},\n\tmidpoint: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\treturn this.getMidpoint( target );\n\n\t},\n\tnormal: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn this.getNormal( target );\n\n\t},\n\tplane: function ( target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\treturn this.getPlane( target );\n\n\t}\n\n} );\n\nObject.assign( Triangle, {\n\n\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t},\n\tnormal: function ( a, b, c, target ) {\n\n\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t}\n\n} );\n\nObject.assign( Shape.prototype, {\n\n\textractAllPoints: function ( divisions ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\treturn this.extractPoints( divisions );\n\n\t},\n\textrude: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\treturn new ExtrudeGeometry( this, options );\n\n\t},\n\tmakeGeometry: function ( options ) {\n\n\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\treturn new ShapeGeometry( this, options );\n\n\t}\n\n} );\n\nObject.assign( Vector2.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector3.prototype, {\n\n\tsetEulerFromRotationMatrix: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t},\n\tsetEulerFromQuaternion: function () {\n\n\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t},\n\tgetPositionFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\treturn this.setFromMatrixPosition( m );\n\n\t},\n\tgetScaleFromMatrix: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\treturn this.setFromMatrixScale( m );\n\n\t},\n\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t},\n\tapplyProjection: function ( m ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\treturn this.applyMatrix4( m );\n\n\t},\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tdistanceToManhattan: function ( v ) {\n\n\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\treturn this.manhattanDistanceTo( v );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\nObject.assign( Vector4.prototype, {\n\n\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t},\n\tlengthManhattan: function () {\n\n\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\treturn this.manhattanLength();\n\n\t}\n\n} );\n\n//\n\nObject.assign( Geometry.prototype, {\n\n\tcomputeTangents: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeLineDistances: function () {\n\n\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.assign( Object3D.prototype, {\n\n\tgetChildByName: function ( name ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\treturn this.getObjectByName( name );\n\n\t},\n\trenderDepth: function () {\n\n\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t},\n\ttranslate: function ( distance, axis ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\treturn this.translateOnAxis( axis, distance );\n\n\t},\n\tgetWorldRotation: function () {\n\n\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.defineProperties( Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( Mesh.prototype, {\n\n\tsetDrawMode: function () {\n\n\t\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t},\n\n} );\n\nObject.defineProperties( Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\nSkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\n\n};\n\nObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\nPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' +\n\t\t\t'Use .setFocalLength and .filmGauge for a photographic setup.' );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( BufferAttribute.prototype, {\n\tsetDynamic: function ( value ) {\n\n\t\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\treturn this;\n\n\t},\n\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t},\n\tsetArray: function ( /* array */ ) {\n\n\t\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t}\n} );\n\nObject.assign( BufferGeometry.prototype, {\n\n\taddIndex: function ( index ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\tthis.setIndex( index );\n\n\t},\n\taddAttribute: function ( name, attribute ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\treturn this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t}\n\n\t\tif ( name === 'index' ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\tthis.setIndex( attribute );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\treturn this.setAttribute( name, attribute );\n\n\t},\n\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\tif ( indexOffset !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\tthis.addGroup( start, count );\n\n\t},\n\tclearDrawCalls: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\tthis.clearGroups();\n\n\t},\n\tcomputeTangents: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t},\n\tcomputeOffsets: function () {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t},\n\tremoveAttribute: function ( name ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\t\treturn this.deleteAttribute( name );\n\n\t},\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nObject.defineProperties( BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( InstancedBufferGeometry.prototype, {\n\n\tmaxInstancedCount: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\treturn this.instanceCount;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\tthis.instanceCount = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( Raycaster.prototype, {\n\n\tlinePrecision: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\treturn this.params.Line.threshold;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\tthis.params.Line.threshold = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( InterleavedBuffer.prototype, {\n\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( value );\n\n\t\t}\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\tsetDynamic: function ( value ) {\n\n\t\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\t\tthis.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage );\n\t\treturn this;\n\n\t},\n\tsetArray: function ( /* array */ ) {\n\n\t\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n\t}\n} );\n\n//\n\nObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\tgetArrays: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t},\n\n\taddShapeList: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t},\n\n\taddShape: function () {\n\n\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.assign( Scene.prototype, {\n\n\tdispose: function () {\n\n\t\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t}\n\t},\n\n\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( MeshPhysicalMaterial.prototype, {\n\n\ttransparency: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\treturn this.transmission;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\tthis.transmission = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.assign( WebGLRenderer.prototype, {\n\n\tclearTarget: function ( renderTarget, color, depth, stencil ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\t\tthis.setRenderTarget( renderTarget );\n\t\tthis.clear( color, depth, stencil );\n\n\t},\n\tanimate: function ( callback ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\t\tthis.setAnimationLoop( callback );\n\n\t},\n\tgetCurrentRenderTarget: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\treturn this.getRenderTarget();\n\n\t},\n\tgetMaxAnisotropy: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t},\n\tgetPrecision: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\treturn this.capabilities.precision;\n\n\t},\n\tresetGLState: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\treturn this.state.reset();\n\n\t},\n\tsupportsFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t},\n\tsupportsHalfFloatTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t},\n\tsupportsStandardDerivatives: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t},\n\tsupportsCompressedTextureS3TC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t},\n\tsupportsCompressedTexturePVRTC: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t},\n\tsupportsBlendMinMax: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t},\n\tsupportsVertexTextures: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\treturn this.capabilities.vertexTextures;\n\n\t},\n\tsupportsInstancedArrays: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t},\n\tenableScissorTest: function ( boolean ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\tthis.setScissorTest( boolean );\n\n\t},\n\tinitMaterial: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t},\n\taddPrePlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t},\n\taddPostPlugin: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t},\n\tupdateShadowMap: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t},\n\tsetFaceCulling: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t},\n\tallocTextureUnit: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n\t},\n\tsetTexture: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n\t},\n\tsetTexture2D: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n\t},\n\tsetTextureCube: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n\t},\n\tgetActiveMipMapLevel: function () {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\t\treturn this.getActiveMipmapLevel();\n\n\t}\n\n} );\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\treturn new WebGLCubeRenderTarget( width, options );\n\n}\n\n//\n\nObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( Audio.prototype, {\n\n\tload: {\n\t\tvalue: function ( file ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\t\t\tconst scope = this;\n\t\t\tconst audioLoader = new AudioLoader();\n\t\t\taudioLoader.load( file, function ( buffer ) {\n\n\t\t\t\tscope.setBuffer( buffer );\n\n\t\t\t} );\n\t\t\treturn this;\n\n\t\t}\n\t},\n\tstartTime: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Audio: .startTime is now .play( delay ).' );\n\n\t\t}\n\t}\n\n} );\n\nAudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\nCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\nCubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n};\n\n//\n\nconst GeometryUtils = {\n\n\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\tlet matrix;\n\n\t\tif ( geometry2.isMesh ) {\n\n\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\tmatrix = geometry2.matrix;\n\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t}\n\n\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t},\n\n\tcenter: function ( geometry ) {\n\n\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\treturn geometry.center();\n\n\t}\n\n};\n\nImageUtils.crossOrigin = undefined;\n\nImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\nImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\nImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n}\n\n//\n\nfunction JSONLoader() {\n\n\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n}\n\n//\n\nconst SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, AxisHelper, BackSide, BasicDepthPacking, BasicShadowMap, BinaryTextureLoader, Bone, BooleanKeyframeTrack, BoundingBoxHelper, Box2, Box3, Box3Helper, BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasRenderer, CanvasTexture, CatmullRomCurve3, CineonToneMapping, CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, ClosedSplineCurve3, Color, ColorKeyframeTrack, CompressedTexture, CompressedTextureLoader, ConeBufferGeometry, ConeGeometry, CubeCamera, BoxGeometry as CubeGeometry, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubeUVRefractionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderBufferGeometry, CylinderGeometry, Cylindrical, DataTexture, DataTexture2DArray, DataTexture3D, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicBufferAttribute, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EdgesHelper, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeBufferGeometry, ExtrudeGeometry, Face3, Face4, FaceColors, FileLoader, FlatShading, Float16BufferAttribute, Float32Attribute, Float32BufferAttribute, Float64Attribute, Float64BufferAttribute, FloatType, Fog, FogExp2, Font, FontLoader, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GammaEncoding, Geometry, GeometryUtils, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, ImmediateRenderObject, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16Attribute, Int16BufferAttribute, Int32Attribute, Int32BufferAttribute, Int8Attribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, JSONLoader, KeepStencilOp, KeyframeTrack, LOD, LatheBufferGeometry, LatheGeometry, Layers, LensFlare, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LinePieces, LineSegments, LineStrip, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LogLuvEncoding, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils as Math, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshFaceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiMaterial, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColors, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, ParametricBufferGeometry, ParametricGeometry, Particle, ParticleBasicMaterial, ParticleSystem, ParticleSystemMaterial, Path, PerspectiveCamera, Plane, PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointCloud, PointCloudMaterial, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDEncoding, RGBEEncoding, RGBEFormat, RGBFormat, RGBIntegerFormat, RGBM16Encoding, RGBM7Encoding, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingBufferGeometry, RingGeometry, SRGB8_ALPHA8_ASTC_10x10_Format, SRGB8_ALPHA8_ASTC_10x5_Format, SRGB8_ALPHA8_ASTC_10x6_Format, SRGB8_ALPHA8_ASTC_10x8_Format, SRGB8_ALPHA8_ASTC_12x10_Format, SRGB8_ALPHA8_ASTC_12x12_Format, SRGB8_ALPHA8_ASTC_4x4_Format, SRGB8_ALPHA8_ASTC_5x4_Format, SRGB8_ALPHA8_ASTC_5x5_Format, SRGB8_ALPHA8_ASTC_6x5_Format, SRGB8_ALPHA8_ASTC_6x6_Format, SRGB8_ALPHA8_ASTC_8x5_Format, SRGB8_ALPHA8_ASTC_8x6_Format, SRGB8_ALPHA8_ASTC_8x8_Format, Scene, SceneUtils, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, SmoothShading, Sphere, SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, Spline, SplineCurve, SplineCurve3, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronBufferGeometry, TetrahedronGeometry, TextBufferGeometry, TextGeometry, Texture, TextureLoader, TorusBufferGeometry, TorusGeometry, TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeBufferGeometry, TubeGeometry, UVMapping, Uint16Attribute, Uint16BufferAttribute, Uint32Attribute, Uint32BufferAttribute, Uint8Attribute, Uint8BufferAttribute, Uint8ClampedAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShort565Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, Vertex, VertexColors, VideoTexture, WebGL1Renderer, WebGLCubeRenderTarget, WebGLMultisampleRenderTarget, WebGLRenderTarget, WebGLRenderTargetCube, WebGLRenderer, WebGLUtils, WireframeGeometry, WireframeHelper, WrapAroundEnding, XHRLoader, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, sRGBEncoding };\n"
  },
  {
    "path": "libs/three.js/extra/GLTFLoader.js",
    "content": "import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tCanvasTexture,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternionKeyframeTrack,\n\tRGBFormat,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTangentSpaceNormalMap,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tsRGBEncoding\n} from '../../../build/three.module.js';\n\nvar GLTFLoader = ( function () {\n\n\tfunction GLTFLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ddsLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t}\n\n\tGLTFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: GLTFLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar resourcePath;\n\n\t\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\t\tresourcePath = this.resourcePath;\n\n\t\t\t} else if ( this.path !== '' ) {\n\n\t\t\t\tresourcePath = this.path;\n\n\t\t\t} else {\n\n\t\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t\t}\n\n\t\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tvar _onError = function ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t};\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\t\tloader.load( url, function ( data ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t}, _onError );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t_onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, _onError );\n\n\t\t},\n\n\t\tsetDRACOLoader: function ( dracoLoader ) {\n\n\t\t\tthis.dracoLoader = dracoLoader;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetDDSLoader: function ( ddsLoader ) {\n\n\t\t\tthis.ddsLoader = ddsLoader;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetKTX2Loader: function ( ktx2Loader ) {\n\n\t\t\tthis.ktx2Loader = ktx2Loader;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetMeshoptDecoder: function ( meshoptDecoder ) {\n\n\t\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tregister: function ( callback ) {\n\n\t\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tunregister: function ( callback ) {\n\n\t\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tparse: function ( data, path, onLoad, onError ) {\n\n\t\t\tvar content;\n\t\t\tvar extensions = {};\n\t\t\tvar plugins = {};\n\n\t\t\tif ( typeof data === 'string' ) {\n\n\t\t\t\tcontent = data;\n\n\t\t\t} else {\n\n\t\t\t\tvar magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\n\n\t\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontent = LoaderUtils.decodeText( new Uint8Array( data ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar json = JSON.parse( content );\n\n\t\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar parser = new GLTFParser( json, {\n\n\t\t\t\tpath: path || this.resourcePath || '',\n\t\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\t\tmanager: this.manager,\n\t\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t\t} );\n\n\t\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\t\tfor ( var i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\t\tvar plugin = this.pluginCallbacks[ i ]( parser );\n\t\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t\t// Remove this workaround if we move all the existing\n\t\t\t\t// extension handlers to plugin system\n\t\t\t\textensions[ plugin.name ] = true;\n\n\t\t\t}\n\n\t\t\tif ( json.extensionsUsed ) {\n\n\t\t\t\tfor ( var i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\t\tvar extensionName = json.extensionsUsed[ i ];\n\t\t\t\t\tvar extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.MSFT_TEXTURE_DDS:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureDDSExtension( this.ddsLoader );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tparser.setExtensions( extensions );\n\t\t\tparser.setPlugins( plugins );\n\t\t\tparser.parse( onLoad, onError );\n\n\t\t}\n\n\t} );\n\n\t/* GLTFREGISTRY */\n\n\tfunction GLTFRegistry() {\n\n\t\tvar objects = {};\n\n\t\treturn\t{\n\n\t\t\tget: function ( key ) {\n\n\t\t\t\treturn objects[ key ];\n\n\t\t\t},\n\n\t\t\tadd: function ( key, object ) {\n\n\t\t\t\tobjects[ key ] = object;\n\n\t\t\t},\n\n\t\t\tremove: function ( key ) {\n\n\t\t\t\tdelete objects[ key ];\n\n\t\t\t},\n\n\t\t\tremoveAll: function () {\n\n\t\t\t\tobjects = {};\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/*********************************/\n\t/********** EXTENSIONS ***********/\n\t/*********************************/\n\n\tvar EXTENSIONS = {\n\t\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\t\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\t\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\t\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\n\t\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\t\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\t\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\t\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\t\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\t\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\t\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\t\tMSFT_TEXTURE_DDS: 'MSFT_texture_dds'\n\t};\n\n\t/**\n\t * DDS Texture Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds\n\t *\n\t */\n\tfunction GLTFTextureDDSExtension( ddsLoader ) {\n\n\t\tif ( ! ddsLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.MSFT_TEXTURE_DDS;\n\t\tthis.ddsLoader = ddsLoader;\n\n\t}\n\n\t/**\n\t * Punctual Lights Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n\t */\n\tfunction GLTFLightsExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\tGLTFLightsExtension.prototype._markDefs = function () {\n\n\t\tvar parser = this.parser;\n\t\tvar nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tGLTFLightsExtension.prototype._loadLight = function ( lightIndex ) {\n\n\t\tvar parser = this.parser;\n\t\tvar cacheKey = 'light:' + lightIndex;\n\t\tvar dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tvar json = parser.json;\n\t\tvar extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tvar lightDefs = extensions.lights || [];\n\t\tvar lightDef = lightDefs[ lightIndex ];\n\t\tvar lightNode;\n\n\t\tvar color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.fromArray( lightDef.color );\n\n\t\tvar range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t};\n\n\tGLTFLightsExtension.prototype.createNodeAttachment = function ( nodeIndex ) {\n\n\t\tvar self = this;\n\t\tvar parser = this.parser;\n\t\tvar json = parser.json;\n\t\tvar nodeDef = json.nodes[ nodeIndex ];\n\t\tvar lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tvar lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Unlit Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n\t */\n\tfunction GLTFMaterialsUnlitExtension() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tGLTFMaterialsUnlitExtension.prototype.getMaterialType = function () {\n\n\t\treturn MeshBasicMaterial;\n\n\t};\n\n\tGLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, materialDef, parser ) {\n\n\t\tvar pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/**\n\t * Clearcoat Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n\t */\n\tfunction GLTFMaterialsClearcoatExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tGLTFMaterialsClearcoatExtension.prototype.getMaterialType = function ( materialIndex ) {\n\n\t\tvar parser = this.parser;\n\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t};\n\n\tGLTFMaterialsClearcoatExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) {\n\n\t\tvar parser = this.parser;\n\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tvar pending = [];\n\n\t\tvar extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tvar scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/**\n\t * Transmission Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n\t * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n\t */\n\tfunction GLTFMaterialsTransmissionExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tGLTFMaterialsTransmissionExtension.prototype.getMaterialType = function ( materialIndex ) {\n\n\t\tvar parser = this.parser;\n\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t};\n\n\tGLTFMaterialsTransmissionExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) {\n\n\t\tvar parser = this.parser;\n\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tvar pending = [];\n\n\t\tvar extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/**\n\t * BasisU Texture Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n\t */\n\tfunction GLTFTextureBasisUExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tGLTFTextureBasisUExtension.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar parser = this.parser;\n\t\tvar json = parser.json;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar extension = textureDef.extensions[ this.name ];\n\t\tvar source = json.images[ extension.source ];\n\t\tvar loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, source, loader );\n\n\t};\n\n\t/**\n\t * WebP Texture Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n\t */\n\tfunction GLTFTextureWebPExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tGLTFTextureWebPExtension.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar name = this.name;\n\t\tvar parser = this.parser;\n\t\tvar json = parser.json;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar extension = textureDef.extensions[ name ];\n\t\tvar source = json.images[ extension.source ];\n\t\tvar loader = source.uri ? parser.options.manager.getHandler( source.uri ) : parser.textureLoader;\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t};\n\n\tGLTFTextureWebPExtension.prototype.detectSupport = function () {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tvar image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t};\n\n\t/**\n\t* meshopt BufferView Compression Extension\n\t*\n\t* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n\t*/\n\tfunction GLTFMeshoptCompression( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tGLTFMeshoptCompression.prototype.loadBufferView = function ( index ) {\n\n\t\tvar json = this.parser.json;\n\t\tvar bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tvar extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tvar buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tvar decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( [ buffer, decoder.ready ] ).then( function ( res ) {\n\n\t\t\t\tvar byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tvar byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tvar count = extensionDef.count;\n\t\t\t\tvar stride = extensionDef.byteStride;\n\n\t\t\t\tvar result = new ArrayBuffer( count * stride );\n\t\t\t\tvar source = new Uint8Array( res[ 0 ], byteOffset, byteLength );\n\n\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\treturn result;\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t};\n\n\t/* BINARY EXTENSION */\n\tvar BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\n\tvar BINARY_EXTENSION_HEADER_LENGTH = 12;\n\tvar BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\n\tfunction GLTFBinaryExtension( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tvar headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\tthis.header = {\n\t\t\tmagic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tvar chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tvar chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkView.byteLength ) {\n\n\t\t\tvar chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tvar chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tvar contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = LoaderUtils.decodeText( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tvar byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * DRACO Mesh Compression Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n\t */\n\tfunction GLTFDracoMeshCompressionExtension( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tGLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) {\n\n\t\tvar json = this.json;\n\t\tvar dracoLoader = this.dracoLoader;\n\t\tvar bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tvar gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tvar threeAttributeMap = {};\n\t\tvar attributeNormalizedMap = {};\n\t\tvar attributeTypeMap = {};\n\n\t\tfor ( var attributeName in gltfAttributeMap ) {\n\n\t\t\tvar threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( attributeName in primitive.attributes ) {\n\n\t\t\tvar threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tvar accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tvar componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( var attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tvar attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tvar normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Texture Transform Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n\t */\n\tfunction GLTFTextureTransformExtension() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\tGLTFTextureTransformExtension.prototype.extendTexture = function ( texture, transform ) {\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV sets in \"' + this.name + '\" extension not yet supported.' );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t};\n\n\t/**\n\t * Specular-Glossiness Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n\t */\n\n\t/**\n\t * A sub class of StandardMaterial with some of the functionality\n\t * changed via the `onBeforeCompile` callback\n\t * @pailhead\n\t */\n\n\tfunction GLTFMeshStandardSGMaterial( params ) {\n\n\t\tMeshStandardMaterial.call( this );\n\n\t\tthis.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t//various chunks that need replacing\n\t\tvar specularMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tvar glossinessMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tvar specularMapFragmentChunk = [\n\t\t\t'vec3 specularFactor = specular;',\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t'\ttexelSpecular = sRGBToLinear( texelSpecular );',\n\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tvar glossinessMapFragmentChunk = [\n\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tvar lightPhysicalFragmentChunk = [\n\t\t\t'PhysicalMaterial material;',\n\t\t\t'material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );',\n\t\t\t'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );',\n\t\t\t'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );',\n\t\t\t'material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.',\n\t\t\t'material.specularRoughness += geometryRoughness;',\n\t\t\t'material.specularRoughness = min( material.specularRoughness, 1.0 );',\n\t\t\t'material.specularColor = specularFactor;',\n\t\t].join( '\\n' );\n\n\t\tvar uniforms = {\n\t\t\tspecular: { value: new Color().setHex( 0xffffff ) },\n\t\t\tglossiness: { value: 1 },\n\t\t\tspecularMap: { value: null },\n\t\t\tglossinessMap: { value: null }\n\t\t};\n\n\t\tthis._extraUniforms = uniforms;\n\n\t\tthis.onBeforeCompile = function ( shader ) {\n\n\t\t\tfor ( var uniformName in uniforms ) {\n\n\t\t\t\tshader.uniforms[ uniformName ] = uniforms[ uniformName ];\n\n\t\t\t}\n\n\t\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t.replace( '#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk )\n\t\t\t\t.replace( '#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk )\n\t\t\t\t.replace( '#include <roughnessmap_fragment>', specularMapFragmentChunk )\n\t\t\t\t.replace( '#include <metalnessmap_fragment>', glossinessMapFragmentChunk )\n\t\t\t\t.replace( '#include <lights_physical_fragment>', lightPhysicalFragmentChunk );\n\n\t\t};\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tspecular: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specular.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specular.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tspecularMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specularMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specularMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_SPECULARMAP = ''; // USE_UV is set by the renderer for specular maps\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_SPECULARMAP;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossiness: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossiness.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossiness.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossinessMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossinessMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossinessMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t\tthis.defines.USE_UV = '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_GLOSSINESSMAP;\n\t\t\t\t\t\tdelete this.defines.USE_UV;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\n\t\tthis.setValues( params );\n\n\t}\n\n\tGLTFMeshStandardSGMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\n\tGLTFMeshStandardSGMaterial.prototype.constructor = GLTFMeshStandardSGMaterial;\n\n\tGLTFMeshStandardSGMaterial.prototype.copy = function ( source ) {\n\n\t\tMeshStandardMaterial.prototype.copy.call( this, source );\n\t\tthis.specularMap = source.specularMap;\n\t\tthis.specular.copy( source.specular );\n\t\tthis.glossinessMap = source.glossinessMap;\n\t\tthis.glossiness = source.glossiness;\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\t\treturn this;\n\n\t};\n\n\tfunction GLTFMaterialsPbrSpecularGlossinessExtension() {\n\n\t\treturn {\n\n\t\t\tname: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,\n\n\t\t\tspecularGlossinessParams: [\n\t\t\t\t'color',\n\t\t\t\t'map',\n\t\t\t\t'lightMap',\n\t\t\t\t'lightMapIntensity',\n\t\t\t\t'aoMap',\n\t\t\t\t'aoMapIntensity',\n\t\t\t\t'emissive',\n\t\t\t\t'emissiveIntensity',\n\t\t\t\t'emissiveMap',\n\t\t\t\t'bumpMap',\n\t\t\t\t'bumpScale',\n\t\t\t\t'normalMap',\n\t\t\t\t'normalMapType',\n\t\t\t\t'displacementMap',\n\t\t\t\t'displacementScale',\n\t\t\t\t'displacementBias',\n\t\t\t\t'specularMap',\n\t\t\t\t'specular',\n\t\t\t\t'glossinessMap',\n\t\t\t\t'glossiness',\n\t\t\t\t'alphaMap',\n\t\t\t\t'envMap',\n\t\t\t\t'envMapIntensity',\n\t\t\t\t'refractionRatio',\n\t\t\t],\n\n\t\t\tgetMaterialType: function () {\n\n\t\t\t\treturn GLTFMeshStandardSGMaterial;\n\n\t\t\t},\n\n\t\t\textendParams: function ( materialParams, materialDef, parser ) {\n\n\t\t\t\tvar pbrSpecularGlossiness = materialDef.extensions[ this.name ];\n\n\t\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\t\t\tvar array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture ) );\n\n\t\t\t\t}\n\n\t\t\t\tmaterialParams.emissive = new Color( 0.0, 0.0, 0.0 );\n\t\t\t\tmaterialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\t\t\tmaterialParams.specular = new Color( 1.0, 1.0, 1.0 );\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\t\t\tmaterialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\t\t\tvar specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) );\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( pending );\n\n\t\t\t},\n\n\t\t\tcreateMaterial: function ( materialParams ) {\n\n\t\t\t\tvar material = new GLTFMeshStandardSGMaterial( materialParams );\n\t\t\t\tmaterial.fog = true;\n\n\t\t\t\tmaterial.color = materialParams.color;\n\n\t\t\t\tmaterial.map = materialParams.map === undefined ? null : materialParams.map;\n\n\t\t\t\tmaterial.lightMap = null;\n\t\t\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\t\t\tmaterial.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap;\n\t\t\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\t\t\tmaterial.emissive = materialParams.emissive;\n\t\t\t\tmaterial.emissiveIntensity = 1.0;\n\t\t\t\tmaterial.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap;\n\n\t\t\t\tmaterial.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap;\n\t\t\t\tmaterial.bumpScale = 1;\n\n\t\t\t\tmaterial.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap;\n\t\t\t\tmaterial.normalMapType = TangentSpaceNormalMap;\n\n\t\t\t\tif ( materialParams.normalScale ) material.normalScale = materialParams.normalScale;\n\n\t\t\t\tmaterial.displacementMap = null;\n\t\t\t\tmaterial.displacementScale = 1;\n\t\t\t\tmaterial.displacementBias = 0;\n\n\t\t\t\tmaterial.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap;\n\t\t\t\tmaterial.specular = materialParams.specular;\n\n\t\t\t\tmaterial.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap;\n\t\t\t\tmaterial.glossiness = materialParams.glossiness;\n\n\t\t\t\tmaterial.alphaMap = null;\n\n\t\t\t\tmaterial.envMap = materialParams.envMap === undefined ? null : materialParams.envMap;\n\t\t\t\tmaterial.envMapIntensity = 1.0;\n\n\t\t\t\tmaterial.refractionRatio = 0.98;\n\n\t\t\t\treturn material;\n\n\t\t\t},\n\n\t\t};\n\n\t}\n\n\t/**\n\t * Mesh Quantization Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n\t */\n\tfunction GLTFMeshQuantizationExtension() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n\t/*********************************/\n\t/********** INTERPOLATION ********/\n\t/*********************************/\n\n\t// Spline Interpolation\n\t// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\n\tfunction GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tGLTFCubicSplineInterpolant.prototype = Object.create( Interpolant.prototype );\n\tGLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;\n\n\tGLTFCubicSplineInterpolant.prototype.copySampleValue_ = function ( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( var i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t};\n\n\tGLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;\n\n\tGLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;\n\n\tGLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer;\n\t\tvar values = this.sampleValues;\n\t\tvar stride = this.valueSize;\n\n\t\tvar stride2 = stride * 2;\n\t\tvar stride3 = stride * 3;\n\n\t\tvar td = t1 - t0;\n\n\t\tvar p = ( t - t0 ) / td;\n\t\tvar pp = p * p;\n\t\tvar ppp = pp * p;\n\n\t\tvar offset1 = i1 * stride3;\n\t\tvar offset0 = offset1 - stride3;\n\n\t\tvar s2 = - 2 * ppp + 3 * pp;\n\t\tvar s3 = ppp - pp;\n\t\tvar s0 = 1 - s2;\n\t\tvar s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t//   [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( var i = 0; i !== stride; i ++ ) {\n\n\t\t\tvar p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tvar m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tvar p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tvar m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t};\n\n\t/*********************************/\n\t/********** INTERNALS ************/\n\t/*********************************/\n\n\t/* CONSTANTS */\n\n\tvar WEBGL_CONSTANTS = {\n\t\tFLOAT: 5126,\n\t\t//FLOAT_MAT2: 35674,\n\t\tFLOAT_MAT3: 35675,\n\t\tFLOAT_MAT4: 35676,\n\t\tFLOAT_VEC2: 35664,\n\t\tFLOAT_VEC3: 35665,\n\t\tFLOAT_VEC4: 35666,\n\t\tLINEAR: 9729,\n\t\tREPEAT: 10497,\n\t\tSAMPLER_2D: 35678,\n\t\tPOINTS: 0,\n\t\tLINES: 1,\n\t\tLINE_LOOP: 2,\n\t\tLINE_STRIP: 3,\n\t\tTRIANGLES: 4,\n\t\tTRIANGLE_STRIP: 5,\n\t\tTRIANGLE_FAN: 6,\n\t\tUNSIGNED_BYTE: 5121,\n\t\tUNSIGNED_SHORT: 5123\n\t};\n\n\tvar WEBGL_COMPONENT_TYPES = {\n\t\t5120: Int8Array,\n\t\t5121: Uint8Array,\n\t\t5122: Int16Array,\n\t\t5123: Uint16Array,\n\t\t5125: Uint32Array,\n\t\t5126: Float32Array\n\t};\n\n\tvar WEBGL_FILTERS = {\n\t\t9728: NearestFilter,\n\t\t9729: LinearFilter,\n\t\t9984: NearestMipmapNearestFilter,\n\t\t9985: LinearMipmapNearestFilter,\n\t\t9986: NearestMipmapLinearFilter,\n\t\t9987: LinearMipmapLinearFilter\n\t};\n\n\tvar WEBGL_WRAPPINGS = {\n\t\t33071: ClampToEdgeWrapping,\n\t\t33648: MirroredRepeatWrapping,\n\t\t10497: RepeatWrapping\n\t};\n\n\tvar WEBGL_TYPE_SIZES = {\n\t\t'SCALAR': 1,\n\t\t'VEC2': 2,\n\t\t'VEC3': 3,\n\t\t'VEC4': 4,\n\t\t'MAT2': 4,\n\t\t'MAT3': 9,\n\t\t'MAT4': 16\n\t};\n\n\tvar ATTRIBUTES = {\n\t\tPOSITION: 'position',\n\t\tNORMAL: 'normal',\n\t\tTANGENT: 'tangent',\n\t\tTEXCOORD_0: 'uv',\n\t\tTEXCOORD_1: 'uv2',\n\t\tCOLOR_0: 'color',\n\t\tWEIGHTS_0: 'skinWeight',\n\t\tJOINTS_0: 'skinIndex',\n\t};\n\n\tvar PATH_PROPERTIES = {\n\t\tscale: 'scale',\n\t\ttranslation: 'position',\n\t\trotation: 'quaternion',\n\t\tweights: 'morphTargetInfluences'\n\t};\n\n\tvar INTERPOLATION = {\n\t\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t                        // keyframe track will be initialized with a default interpolation type, then modified.\n\t\tLINEAR: InterpolateLinear,\n\t\tSTEP: InterpolateDiscrete\n\t};\n\n\tvar ALPHA_MODES = {\n\t\tOPAQUE: 'OPAQUE',\n\t\tMASK: 'MASK',\n\t\tBLEND: 'BLEND'\n\t};\n\n\t/* UTILITY FUNCTIONS */\n\n\tfunction resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n\t */\n\tfunction createDefaultMaterial( cache ) {\n\n\t\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\t\tcolor: 0xFFFFFF,\n\t\t\t\temissive: 0x000000,\n\t\t\t\tmetalness: 1,\n\t\t\t\troughness: 1,\n\t\t\t\ttransparent: false,\n\t\t\t\tdepthTest: true,\n\t\t\t\tside: FrontSide\n\t\t\t} );\n\n\t\t}\n\n\t\treturn cache[ 'DefaultMaterial' ];\n\n\t}\n\n\tfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t\t// Add unknown glTF extensions to an object's userData.\n\n\t\tfor ( var name in objectDef.extensions ) {\n\n\t\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @param {Object3D|Material|BufferGeometry} object\n\t * @param {GLTF.definition} gltfDef\n\t */\n\tfunction assignExtrasToUserData( object, gltfDef ) {\n\n\t\tif ( gltfDef.extras !== undefined ) {\n\n\t\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n\t *\n\t * @param {BufferGeometry} geometry\n\t * @param {Array<GLTF.Target>} targets\n\t * @param {GLTFParser} parser\n\t * @return {Promise<BufferGeometry>}\n\t */\n\tfunction addMorphTargets( geometry, targets, parser ) {\n\n\t\tvar hasMorphPosition = false;\n\t\tvar hasMorphNormal = false;\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\n\t\t\tif ( hasMorphPosition && hasMorphNormal ) break;\n\n\t\t}\n\n\t\tif ( ! hasMorphPosition && ! hasMorphNormal ) return Promise.resolve( geometry );\n\n\t\tvar pendingPositionAccessors = [];\n\t\tvar pendingNormalAccessors = [];\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\n\t\t\tif ( hasMorphPosition ) {\n\n\t\t\t\tvar pendingAccessor = target.POSITION !== undefined\n\t\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t\t: geometry.attributes.position;\n\n\t\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t\t}\n\n\t\t\tif ( hasMorphNormal ) {\n\n\t\t\t\tvar pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t\t: geometry.attributes.normal;\n\n\t\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( [\n\t\t\tPromise.all( pendingPositionAccessors ),\n\t\t\tPromise.all( pendingNormalAccessors )\n\t\t] ).then( function ( accessors ) {\n\n\t\t\tvar morphPositions = accessors[ 0 ];\n\t\t\tvar morphNormals = accessors[ 1 ];\n\n\t\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t\treturn geometry;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * @param {Mesh} mesh\n\t * @param {GLTF.Mesh} meshDef\n\t */\n\tfunction updateMorphTargets( mesh, meshDef ) {\n\n\t\tmesh.updateMorphTargets();\n\n\t\tif ( meshDef.weights !== undefined ) {\n\n\t\t\tfor ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\t\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\t\tvar targetNames = meshDef.extras.targetNames;\n\n\t\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\t\tfor ( var i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createPrimitiveKey( primitiveDef ) {\n\n\t\tvar dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\t\tvar geometryKey;\n\n\t\tif ( dracoExtension ) {\n\n\t\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t\t} else {\n\n\t\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t\t}\n\n\t\treturn geometryKey;\n\n\t}\n\n\tfunction createAttributesKey( attributes ) {\n\n\t\tvar attributesKey = '';\n\n\t\tvar keys = Object.keys( attributes ).sort();\n\n\t\tfor ( var i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t\t}\n\n\t\treturn attributesKey;\n\n\t}\n\n\t/* GLTF PARSER */\n\n\tfunction GLTFParser( json, options ) {\n\n\t\tthis.json = json || {};\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options || {};\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\t\tif ( typeof createImageBitmap !== 'undefined' && /Firefox/.test( navigator.userAgent ) === false ) {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tGLTFParser.prototype.setExtensions = function ( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t};\n\n\tGLTFParser.prototype.setPlugins = function ( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t};\n\n\tGLTFParser.prototype.parse = function ( onLoad, onError ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( [\n\n\t\t\tthis.getDependencies( 'scene' ),\n\t\t\tthis.getDependencies( 'animation' ),\n\t\t\tthis.getDependencies( 'camera' ),\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\tonLoad( result );\n\n\t\t} ).catch( onError );\n\n\t};\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\tGLTFParser.prototype._markDefs = function () {\n\n\t\tvar nodeDefs = this.json.nodes || [];\n\t\tvar skinDefs = this.json.skins || [];\n\t\tvar meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tvar joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( var i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\tGLTFParser.prototype._addNodeRef = function ( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t};\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\tGLTFParser.prototype._getNodeRef = function ( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tvar ref = object.clone();\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t};\n\n\tGLTFParser.prototype._invokeOne = function ( func ) {\n\n\t\tvar extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( var i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tvar result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t};\n\n\tGLTFParser.prototype._invokeAll = function ( func ) {\n\n\t\tvar extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tvar pending = [];\n\n\t\tfor ( var i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tvar result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t};\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}\n\t */\n\tGLTFParser.prototype.getDependency = function ( type, index ) {\n\n\t\tvar cacheKey = type + ':' + index;\n\t\tvar dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this.loadNode( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this.loadAnimation( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t};\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise<Array<Object>>}\n\t */\n\tGLTFParser.prototype.getDependencies = function ( type ) {\n\n\t\tvar dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tGLTFParser.prototype.loadBuffer = function ( bufferIndex ) {\n\n\t\tvar bufferDef = this.json.buffers[ bufferIndex ];\n\t\tvar loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tvar options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tGLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {\n\n\t\tvar bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tvar byteLength = bufferViewDef.byteLength || 0;\n\t\t\tvar byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n\t */\n\tGLTFParser.prototype.loadAccessor = function ( accessorIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\n\t\tvar accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\t// Ignore empty accessors, which may be used to declare runtime\n\t\t\t// information about attributes coming from another source (e.g. Draco\n\t\t\t// compression extension).\n\t\t\treturn Promise.resolve( null );\n\n\t\t}\n\n\t\tvar pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tvar bufferView = bufferViews[ 0 ];\n\n\t\t\tvar itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tvar TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tvar elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tvar itemBytes = elementBytes * itemSize;\n\t\t\tvar byteOffset = accessorDef.byteOffset || 0;\n\t\t\tvar byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tvar normalized = accessorDef.normalized === true;\n\t\t\tvar array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tvar ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tvar ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tvar ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tvar itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tvar TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tvar byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tvar byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tvar sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tvar sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise<THREE.Texture>}\n\t */\n\tGLTFParser.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar options = this.options;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tvar textureExtensions = textureDef.extensions || {};\n\n\t\tvar source;\n\n\t\tif ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\n\n\t\t\tsource = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];\n\n\t\t} else {\n\n\t\t\tsource = json.images[ textureDef.source ];\n\n\t\t}\n\n\t\tvar loader;\n\n\t\tif ( source.uri ) {\n\n\t\t\tloader = options.manager.getHandler( source.uri );\n\n\t\t}\n\n\t\tif ( ! loader ) {\n\n\t\t\tloader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]\n\t\t\t\t? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader\n\t\t\t\t: this.textureLoader;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, source, loader );\n\n\t};\n\n\tGLTFParser.prototype.loadTextureImage = function ( textureIndex, source, loader ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar options = this.options;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tvar URL = self.URL || self.webkitURL;\n\n\t\tvar sourceURI = source.uri;\n\t\tvar isObjectURL = false;\n\t\tvar hasAlpha = true;\n\n\t\tif ( source.mimeType === 'image/jpeg' ) hasAlpha = false;\n\n\t\tif ( source.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tif ( source.mimeType === 'image/png' ) {\n\n\t\t\t\t\t// Inspect the PNG 'IHDR' chunk to determine whether the image could have an\n\t\t\t\t\t// alpha channel. This check is conservative — the image could have an alpha\n\t\t\t\t\t// channel with all values == 1, and the indexed type (colorType == 3) only\n\t\t\t\t\t// sometimes contains alpha.\n\t\t\t\t\t//\n\t\t\t\t\t// https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header\n\t\t\t\t\tvar colorType = new DataView( bufferView, 25, 1 ).getUint8( 0, false );\n\t\t\t\t\thasAlpha = colorType === 6 || colorType === 4 || colorType === 3;\n\n\t\t\t\t}\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tvar blob = new Blob( [ bufferView ], { type: source.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tvar onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tresolve( new CanvasTexture( imageBitmap ) );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( textureDef.name ) texture.name = textureDef.name;\n\n\t\t\t// When there is definitely no alpha channel in the texture, set RGBFormat to save space.\n\t\t\tif ( ! hasAlpha ) texture.format = RGBFormat;\n\n\t\t\tvar samplers = json.samplers || {};\n\t\t\tvar sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, {\n\t\t\t\ttype: 'textures',\n\t\t\t\tindex: textureIndex\n\t\t\t} );\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.assignTexture = function ( materialParams, mapName, mapDef ) {\n\n\t\tvar parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\t// Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured\n\t\t\t// However, we will copy UV set 0 to UV set 1 on demand for aoMap\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' );\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tvar transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tvar gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accomodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param  {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tGLTFParser.prototype.assignFinalMaterial = function ( mesh ) {\n\n\t\tvar geometry = mesh.geometry;\n\t\tvar material = mesh.material;\n\n\t\tvar useVertexTangents = geometry.attributes.tangent !== undefined;\n\t\tvar useVertexColors = geometry.attributes.color !== undefined;\n\t\tvar useFlatShading = geometry.attributes.normal === undefined;\n\t\tvar useSkinning = mesh.isSkinnedMesh === true;\n\t\tvar useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;\n\t\tvar useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tvar cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tvar pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tvar cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tvar lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {\n\n\t\t\tvar cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\n\t\t\tif ( useSkinning ) cacheKey += 'skinning:';\n\t\t\tif ( useVertexTangents ) cacheKey += 'vertex-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\t\t\tif ( useMorphTargets ) cacheKey += 'morph-targets:';\n\t\t\tif ( useMorphNormals ) cacheKey += 'morph-normals:';\n\n\t\t\tvar cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useSkinning ) cachedMaterial.skinning = true;\n\t\t\t\tif ( useVertexTangents ) cachedMaterial.vertexTangents = true;\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\t\t\t\tif ( useMorphTargets ) cachedMaterial.morphTargets = true;\n\t\t\t\tif ( useMorphNormals ) cachedMaterial.morphNormals = true;\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\t// workarounds for mesh and geometry\n\n\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\n\n\t\t\tgeometry.setAttribute( 'uv2', geometry.attributes.uv );\n\n\t\t}\n\n\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\tif ( material.normalScale && ! useVertexTangents ) {\n\n\t\t\tmaterial.normalScale.y = - material.normalScale.y;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalScale && ! useVertexTangents ) {\n\n\t\t\tmaterial.clearcoatNormalScale.y = - material.clearcoatNormalScale.y;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t};\n\n\tGLTFParser.prototype.getMaterialType = function ( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise<Material>}\n\t */\n\tGLTFParser.prototype.loadMaterial = function ( materialIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\t\tvar materialDef = json.materials[ materialIndex ];\n\n\t\tvar materialType;\n\t\tvar materialParams = {};\n\t\tvar materialExtensions = materialDef.extensions || {};\n\n\t\tvar pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\tvar sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\tmaterialType = sgExtension.getMaterialType();\n\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tvar kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tvar alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tmaterialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tmaterialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tvar material;\n\n\t\t\tif ( materialType === GLTFMeshStandardSGMaterial ) {\n\n\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t} else {\n\n\t\t\t\tmaterial = new materialType( materialParams );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\t// baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.\n\t\t\tif ( material.map ) material.map.encoding = sRGBEncoding;\n\t\t\tif ( material.emissiveMap ) material.emissiveMap.encoding = sRGBEncoding;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { type: 'materials', index: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t};\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tGLTFParser.prototype.createUniqueName = function ( originalName ) {\n\n\t\tvar sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tvar name = sanitizedName;\n\n\t\tfor ( var i = 1; this.nodeNamesUsed[ name ]; ++ i ) {\n\n\t\t\tname = sanitizedName + '_' + i;\n\n\t\t}\n\n\t\tthis.nodeNamesUsed[ name ] = true;\n\n\t\treturn name;\n\n\t};\n\n\t/**\n\t * @param {BufferGeometry} geometry\n\t * @param {GLTF.Primitive} primitiveDef\n\t * @param {GLTFParser} parser\n\t */\n\tfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\t\tvar attributes = primitiveDef.attributes;\n\n\t\tvar box = new Box3();\n\n\t\tif ( attributes.POSITION !== undefined ) {\n\n\t\t\tvar accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\t\tvar min = accessor.min;\n\t\t\tvar max = accessor.max;\n\n\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\tbox.set(\n\t\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar targets = primitiveDef.targets;\n\n\t\tif ( targets !== undefined ) {\n\n\t\t\tvar maxDisplacement = new Vector3();\n\t\t\tvar vector = new Vector3();\n\n\t\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\t\tvar target = targets[ i ];\n\n\t\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\t\tvar accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\t\tvar min = accessor.min;\n\t\t\t\t\tvar max = accessor.max;\n\n\t\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\t\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\t\tbox.expandByVector( maxDisplacement );\n\n\t\t}\n\n\t\tgeometry.boundingBox = box;\n\n\t\tvar sphere = new Sphere();\n\n\t\tbox.getCenter( sphere.center );\n\t\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\t\tgeometry.boundingSphere = sphere;\n\n\t}\n\n\t/**\n\t * @param {BufferGeometry} geometry\n\t * @param {GLTF.Primitive} primitiveDef\n\t * @param {GLTFParser} parser\n\t * @return {Promise<BufferGeometry>}\n\t */\n\tfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\t\tvar attributes = primitiveDef.attributes;\n\n\t\tvar pending = [];\n\n\t\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t\t.then( function ( accessor ) {\n\n\t\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tfor ( var gltfAttributeName in attributes ) {\n\n\t\t\tvar threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t\t}\n\n\t\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\t\tvar accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\t\tgeometry.setIndex( accessor );\n\n\t\t\t} );\n\n\t\t\tpending.push( accessor );\n\n\t\t}\n\n\t\tassignExtrasToUserData( geometry, primitiveDef );\n\n\t\tcomputeBounds( geometry, primitiveDef, parser );\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\treturn primitiveDef.targets !== undefined\n\t\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t\t: geometry;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * @param {BufferGeometry} geometry\n\t * @param {Number} drawMode\n\t * @return {BufferGeometry}\n\t */\n\tfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\t\tvar index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tvar indices = [];\n\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( var i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar numberOfTriangles = index.count - 2;\n\t\tvar newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( var i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( var i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tvar newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\n\t\treturn newGeometry;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array<GLTF.Primitive>} primitives\n\t * @return {Promise<Array<BufferGeometry>>}\n\t */\n\tGLTFParser.prototype.loadGeometries = function ( primitives ) {\n\n\t\tvar parser = this;\n\t\tvar extensions = this.extensions;\n\t\tvar cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tvar pending = [];\n\n\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tvar primitive = primitives[ i ];\n\t\t\tvar cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tvar cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tvar geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise<Group|Mesh|SkinnedMesh>}\n\t */\n\tGLTFParser.prototype.loadMesh = function ( meshIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\tvar meshDef = json.meshes[ meshIndex ];\n\t\tvar primitives = meshDef.primitives;\n\n\t\tvar pending = [];\n\n\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tvar material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tvar materials = results.slice( 0, results.length - 1 );\n\t\t\tvar geometries = results[ results.length - 1 ];\n\n\t\t\tvar meshes = [];\n\n\t\t\tfor ( var i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tvar geometry = geometries[ i ];\n\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tvar mesh;\n\n\t\t\t\tvar material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) {\n\n\t\t\t\t\t\t// we normalize floating point skin weight array to fix malformed assets (see #15319)\n\t\t\t\t\t\t// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tvar group = new Group();\n\n\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise<THREE.Camera>}\n\t */\n\tGLTFParser.prototype.loadCamera = function ( cameraIndex ) {\n\n\t\tvar camera;\n\t\tvar cameraDef = this.json.cameras[ cameraIndex ];\n\t\tvar params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise<Object>}\n\t */\n\tGLTFParser.prototype.loadSkin = function ( skinIndex ) {\n\n\t\tvar skinDef = this.json.skins[ skinIndex ];\n\n\t\tvar skinEntry = { joints: skinDef.joints };\n\n\t\tif ( skinDef.inverseBindMatrices === undefined ) {\n\n\t\t\treturn Promise.resolve( skinEntry );\n\n\t\t}\n\n\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\n\n\t\t\tskinEntry.inverseBindMatrices = accessor;\n\n\t\t\treturn skinEntry;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise<AnimationClip>}\n\t */\n\tGLTFParser.prototype.loadAnimation = function ( animationIndex ) {\n\n\t\tvar json = this.json;\n\n\t\tvar animationDef = json.animations[ animationIndex ];\n\n\t\tvar pendingNodes = [];\n\t\tvar pendingInputAccessors = [];\n\t\tvar pendingOutputAccessors = [];\n\t\tvar pendingSamplers = [];\n\t\tvar pendingTargets = [];\n\n\t\tfor ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tvar channel = animationDef.channels[ i ];\n\t\t\tvar sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tvar target = channel.target;\n\t\t\tvar name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.\n\t\t\tvar input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tvar output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar nodes = dependencies[ 0 ];\n\t\t\tvar inputAccessors = dependencies[ 1 ];\n\t\t\tvar outputAccessors = dependencies[ 2 ];\n\t\t\tvar samplers = dependencies[ 3 ];\n\t\t\tvar targets = dependencies[ 4 ];\n\n\t\t\tvar tracks = [];\n\n\t\t\tfor ( var i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tvar node = nodes[ i ];\n\t\t\t\tvar inputAccessor = inputAccessors[ i ];\n\t\t\t\tvar outputAccessor = outputAccessors[ i ];\n\t\t\t\tvar sampler = samplers[ i ];\n\t\t\t\tvar target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tnode.updateMatrix();\n\t\t\t\tnode.matrixAutoUpdate = true;\n\n\t\t\t\tvar TypedKeyframeTrack;\n\n\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES.position:\n\t\t\t\t\tcase PATH_PROPERTIES.scale:\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tvar targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\tvar interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\t\t\t\tvar targetNames = [];\n\n\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\t\t\t// Node may be a Group (glTF mesh with several primitives) or a Mesh.\n\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\tif ( object.isMesh === true && object.morphTargetInfluences ) {\n\n\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetNames.push( targetName );\n\n\t\t\t\t}\n\n\t\t\t\tvar outputArray = outputAccessor.array;\n\n\t\t\t\tif ( outputAccessor.normalized ) {\n\n\t\t\t\t\tvar scale;\n\n\t\t\t\t\tif ( outputArray.constructor === Int8Array ) {\n\n\t\t\t\t\t\tscale = 1 / 127;\n\n\t\t\t\t\t} else if ( outputArray.constructor === Uint8Array ) {\n\n\t\t\t\t\t\tscale = 1 / 255;\n\n\t\t\t\t\t} else if ( outputArray.constructor == Int16Array ) {\n\n\t\t\t\t\t\tscale = 1 / 32767;\n\n\t\t\t\t\t} else if ( outputArray.constructor === Uint16Array ) {\n\n\t\t\t\t\t\tscale = 1 / 65535;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported output accessor component type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar scaled = new Float32Array( outputArray.length );\n\n\t\t\t\t\tfor ( var j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutputArray = scaled;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar track = new TypedKeyframeTrack(\n\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\t\t\tinputAccessor.array,\n\t\t\t\t\t\toutputArray,\n\t\t\t\t\t\tinterpolation\n\t\t\t\t\t);\n\n\t\t\t\t\t// Override interpolation with custom factory method.\n\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\t\t\t\t\treturn new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( track );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar name = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\t\treturn new AnimationClip( name, undefined, tracks );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise<Object3D>}\n\t */\n\tGLTFParser.prototype.loadNode = function ( nodeIndex ) {\n\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\t\tvar parser = this;\n\n\t\tvar nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tvar nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\treturn ( function () {\n\n\t\t\tvar pending = [];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tpending.push( parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\t\t\tvar node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\t\t\tfor ( var i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} ) );\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t\t} ) );\n\n\t\t\t}\n\n\t\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t\t} ).forEach( function ( promise ) {\n\n\t\t\t\tpending.push( promise );\n\n\t\t\t} );\n\n\t\t\treturn Promise.all( pending );\n\n\t\t}() ).then( function ( objects ) {\n\n\t\t\tvar node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( var i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tvar matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tparser.associations.set( node, { type: 'nodes', index: nodeIndex } );\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise<Group>}\n\t */\n\tGLTFParser.prototype.loadScene = function () {\n\n\t\t// scene node hierachy builder\n\n\t\tfunction buildNodeHierachy( nodeId, parentObject, json, parser ) {\n\n\t\t\tvar nodeDef = json.nodes[ nodeId ];\n\n\t\t\treturn parser.getDependency( 'node', nodeId ).then( function ( node ) {\n\n\t\t\t\tif ( nodeDef.skin === undefined ) return node;\n\n\t\t\t\t// build skeleton here as well\n\n\t\t\t\tvar skinEntry;\n\n\t\t\t\treturn parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) {\n\n\t\t\t\t\tskinEntry = skin;\n\n\t\t\t\t\tvar pendingJoints = [];\n\n\t\t\t\t\tfor ( var i = 0, il = skinEntry.joints.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tpendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.all( pendingJoints );\n\n\t\t\t\t} ).then( function ( jointNodes ) {\n\n\t\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\t\tif ( ! mesh.isMesh ) return;\n\n\t\t\t\t\t\tvar bones = [];\n\t\t\t\t\t\tvar boneInverses = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = jointNodes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar jointNode = jointNodes[ j ];\n\n\t\t\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\t\t\tvar mat = new Matrix4();\n\n\t\t\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\n\n\t\t\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinEntry.joints[ j ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} );\n\n\t\t\t} ).then( function ( node ) {\n\n\t\t\t\t// build node hierachy\n\n\t\t\t\tparentObject.add( node );\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tif ( nodeDef.children ) {\n\n\t\t\t\t\tvar children = nodeDef.children;\n\n\t\t\t\t\tfor ( var i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar child = children[ i ];\n\t\t\t\t\t\tpending.push( buildNodeHierachy( child, node, json, parser ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( pending );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn function loadScene( sceneIndex ) {\n\n\t\t\tvar json = this.json;\n\t\t\tvar extensions = this.extensions;\n\t\t\tvar sceneDef = this.json.scenes[ sceneIndex ];\n\t\t\tvar parser = this;\n\n\t\t\t// Loader returns Group, not Scene.\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\t\tvar scene = new Group();\n\t\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\t\tvar nodeIds = sceneDef.nodes || [];\n\n\t\t\tvar pending = [];\n\n\t\t\tfor ( var i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\t\tpending.push( buildNodeHierachy( nodeIds[ i ], scene, json, parser ) );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\t\treturn scene;\n\n\t\t\t} );\n\n\t\t};\n\n\t}();\n\n\treturn GLTFLoader;\n\n} )();\n\nexport { GLTFLoader };\n"
  },
  {
    "path": "libs/three.js/extra/VRButton.js",
    "content": "\n// Adapted from three.js VRButton\n\n\nclass VRButton {\n\n\tconstructor(){\n\t\tthis.onStartListeners = [];\n\t\tthis.onEndListeners = [];\n\t\tthis.element = null;\n\t}\n\n\tonStart(callback){\n\t\tthis.onStartListeners.push(callback);\n\t}\n\n\tonEnd(callback){\n\t\tthis.onEndListeners.push(callback);\n\t}\n\n\tstatic async createButton( renderer, options ) {\n\n\t\tif ( options ) {\n\n\t\t\tconsole.error( 'THREE.VRButton: The \"options\" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.' );\n\n\t\t}\n\n\t\tconst button = new VRButton();\n\t\tconst element = document.createElement( 'button' );\n\n\t\tbutton.element = element;\n\n\t\tfunction setEnter(){\n\t\t\tbutton.element.innerHTML = `\n\t\t\t\t<div style=\"font-size: 0.5em;\">ENTER</div>\n\t\t\t\t<div style=\"font-weight: bold;\">VR</div>\n\t\t\t`;\n\t\t}\n\n\t\tfunction setExit(){\n\t\t\tbutton.element.innerHTML = `\n\t\t\t\t<div style=\"font-size: 0.5em;\">EXIT</div>\n\t\t\t\t<div style=\"font-weight: bold;\">VR</div>\n\t\t\t`;\n\t\t}\n\n\t\tfunction showEnterVR( /*device*/ ) {\n\n\t\t\tlet currentSession = null;\n\n\t\t\tfunction onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\tfor(let listener of button.onStartListeners){\n\t\t\t\t\tlistener();\n\t\t\t\t}\n\n\n\t\t\t\trenderer.xr.setSession( session );\n\t\t\t\tsetExit();\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tfor(let listener of button.onEndListeners){\n\t\t\t\t\tlistener();\n\t\t\t\t}\n\n\t\t\t\tsetEnter();\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.element.style.display = '';\n\n\t\t\tbutton.element.style.cursor = 'pointer';\n\n\t\t\tsetEnter();\n\n\t\t\tbutton.element.onmouseenter = function () {\n\n\t\t\t\tbutton.element.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.element.onmouseleave = function () {\n\n\t\t\t\tbutton.element.style.opacity = '0.7';\n\n\t\t\t};\n\n\t\t\tbutton.element.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\t// WebXR's requestReferenceSpace only works if the corresponding feature\n\t\t\t\t\t// was requested at session creation time. For simplicity, just ask for\n\t\t\t\t\t// the interesting ones as optional features, but be aware that the\n\t\t\t\t\t// requestReferenceSpace call will fail if it turns out to be unavailable.\n\t\t\t\t\t// ('local' is always available for immersive sessions and doesn't need to\n\t\t\t\t\t// be requested separately.)\n\n\t\t\t\t\tconst sessionInit = { optionalFeatures: [ 'local-floor', 'bounded-floor', 'hand-tracking' ] };\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-vr', sessionInit ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.7';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.element.id = 'VRButton';\n\t\t\tbutton.element.style.display = 'none';\n\n\t\t\tstylizeElement( button.element );\n\n\t\t\tlet supported = await navigator.xr.isSessionSupported( 'immersive-vr' );\n\n\t\t\tif(supported){\n\t\t\t\tshowEnterVR();\n\n\t\t\t\treturn button;\n\t\t\t}else{\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tconsole.log(\"WEBXR NEEDS HTTPS\");\n\n\t\t\t} else {\n\n\t\t\t\tconsole.log(\"WEBXR not available\");\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\n\n\t\t}\n\n\t}\n\n}\n\nexport { VRButton };\n"
  },
  {
    "path": "libs/three.js/extra/XRControllerModelFactory.js",
    "content": "import {\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tQuaternion,\n\tSphereBufferGeometry,\n} from '../build/three.module.js';\n\nimport { GLTFLoader } from '../loaders/GLTFLoader.js';\n\nimport {\n\tConstants as MotionControllerConstants,\n\tfetchProfile,\n\tMotionController\n} from '../libs/motion-controllers.module.js';\n\nconst DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles';\nconst DEFAULT_PROFILE = 'generic-trigger';\n\nfunction XRControllerModel( ) {\n\n\tObject3D.call( this );\n\n\tthis.motionController = null;\n\tthis.envMap = null;\n\n}\n\nXRControllerModel.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: XRControllerModel,\n\n\tsetEnvironmentMap: function ( envMap ) {\n\n\t\tif ( this.envMap == envMap ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.envMap = envMap;\n\t\tthis.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = this.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Polls data from the XRInputSource and updates the model's components to match\n\t * the real world data\n\t */\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( ! this.motionController ) return;\n\n\t\t// Cause the MotionController to poll the Gamepad for data\n\t\tthis.motionController.updateFromGamepad();\n\n\t\t// Update the 3D model to reflect the button, thumbstick, and touchpad state\n\t\tObject.values( this.motionController.components ).forEach( ( component ) => {\n\n\t\t\t// Update node data based on the visual responses' current states\n\t\t\tObject.values( component.visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\t\tconst { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse;\n\n\t\t\t\t// Skip if the visual response node is not found. No error is needed,\n\t\t\t\t// because it will have been reported at load time.\n\t\t\t\tif ( ! valueNode ) return;\n\n\t\t\t\t// Calculate the new properties based on the weight supplied\n\t\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY ) {\n\n\t\t\t\t\tvalueNode.visible = value;\n\n\t\t\t\t} else if ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\t\tQuaternion.slerp(\n\t\t\t\t\t\tminNode.quaternion,\n\t\t\t\t\t\tmaxNode.quaternion,\n\t\t\t\t\t\tvalueNode.quaternion,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t\tvalueNode.position.lerpVectors(\n\t\t\t\t\t\tminNode.position,\n\t\t\t\t\t\tmaxNode.position,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n} );\n\n/**\n * Walks the model's tree to find the nodes needed to animate the components and\n * saves them to the motionContoller components for use in the frame loop. When\n * touchpads are found, attaches a touch dot to them.\n */\nfunction findNodes( motionController, scene ) {\n\n\t// Loop through the components and find the nodes needed for each components' visual responses\n\tObject.values( motionController.components ).forEach( ( component ) => {\n\n\t\tconst { type, touchPointNodeName, visualResponses } = component;\n\n\t\tif ( type === MotionControllerConstants.ComponentType.TOUCHPAD ) {\n\n\t\t\tcomponent.touchPointNode = scene.getObjectByName( touchPointNodeName );\n\t\t\tif ( component.touchPointNode ) {\n\n\t\t\t\t// Attach a touch dot to the touchpad.\n\t\t\t\tconst sphereGeometry = new SphereBufferGeometry( 0.001 );\n\t\t\t\tconst material = new MeshBasicMaterial( { color: 0x0000FF } );\n\t\t\t\tconst sphere = new Mesh( sphereGeometry, material );\n\t\t\t\tcomponent.touchPointNode.add( sphere );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( `Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Loop through all the visual responses to be applied to this component\n\t\tObject.values( visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\tconst { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse;\n\n\t\t\t// If animating a transform, find the two nodes to be interpolated between.\n\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\tvisualResponse.minNode = scene.getObjectByName( minNodeName );\n\t\t\t\tvisualResponse.maxNode = scene.getObjectByName( maxNodeName );\n\n\t\t\t\t// If the extents cannot be found, skip this animation\n\t\t\t\tif ( ! visualResponse.minNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${minNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! visualResponse.maxNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${maxNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// If the target node cannot be found, skip this animation\n\t\t\tvisualResponse.valueNode = scene.getObjectByName( valueNodeName );\n\t\t\tif ( ! visualResponse.valueNode ) {\n\n\t\t\t\tconsole.warn( `Could not find ${valueNodeName} in the model` );\n\n\t\t\t}\n\n\t\t} );\n\n\t} );\n\n}\n\nfunction addAssetSceneToControllerModel( controllerModel, scene ) {\n\n\t// Find the nodes needed for animation and cache them on the motionController.\n\tfindNodes( controllerModel.motionController, scene );\n\n\t// Apply any environment map that the mesh already has set.\n\tif ( controllerModel.envMap ) {\n\n\t\tscene.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = controllerModel.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t// Add the glTF scene to the controllerModel.\n\tcontrollerModel.add( scene );\n\n}\n\nvar XRControllerModelFactory = ( function () {\n\n\tfunction XRControllerModelFactory( gltfLoader = null ) {\n\n\t\tthis.gltfLoader = gltfLoader;\n\t\tthis.path = DEFAULT_PROFILES_PATH;\n\t\tthis._assetCache = {};\n\n\t\t// If a GLTFLoader wasn't supplied to the constructor create a new one.\n\t\tif ( ! this.gltfLoader ) {\n\n\t\t\tthis.gltfLoader = new GLTFLoader();\n\n\t\t}\n\n\t}\n\n\tXRControllerModelFactory.prototype = {\n\n\t\tconstructor: XRControllerModelFactory,\n\n\t\tcreateControllerModel: function ( controller ) {\n\n\t\t\tconst controllerModel = new XRControllerModel();\n\t\t\tlet scene = null;\n\n\t\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\t\tconst xrInputSource = event.data;\n\n\t\t\t\tif ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad ) return;\n\n\t\t\t\tfetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => {\n\n\t\t\t\t\tcontrollerModel.motionController = new MotionController(\n\t\t\t\t\t\txrInputSource,\n\t\t\t\t\t\tprofile,\n\t\t\t\t\t\tassetPath\n\t\t\t\t\t);\n\n\t\t\t\t\tconst cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ];\n\t\t\t\t\tif ( cachedAsset ) {\n\n\t\t\t\t\t\tscene = cachedAsset.scene.clone();\n\n\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ! this.gltfLoader ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'GLTFLoader not set.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.gltfLoader.setPath( '' );\n\t\t\t\t\t\tthis.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => {\n\n\t\t\t\t\t\t\tthis._assetCache[ controllerModel.motionController.assetUrl ] = asset;\n\n\t\t\t\t\t\t\tscene = asset.scene.clone();\n\n\t\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t() => {\n\n\t\t\t\t\t\t\tthrow new Error( `Asset ${controllerModel.motionController.assetUrl} missing or malformed.` );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} ).catch( ( err ) => {\n\n\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\t\tcontrollerModel.motionController = null;\n\t\t\t\tcontrollerModel.remove( scene );\n\t\t\t\tscene = null;\n\n\t\t\t} );\n\n\t\t\treturn controllerModel;\n\n\t\t}\n\n\t};\n\n\treturn XRControllerModelFactory;\n\n} )();\n\nexport { XRControllerModelFactory };\n"
  },
  {
    "path": "libs/three.js/extra/lines/Line2.js",
    "content": "/**\n * @author WestLangley / http://github.com/WestLangley\n *\n */\n\nTHREE.Line2 = function ( geometry, material ) {\n\n\tTHREE.LineSegments2.call( this );\n\n\tthis.type = 'Line2';\n\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.LineGeometry();\n\tthis.material = material !== undefined ? material : new THREE.LineMaterial( { color: Math.random() * 0xffffff } );\n\n};\n\nTHREE.Line2.prototype = Object.assign( Object.create( THREE.LineSegments2.prototype ), {\n\n\tconstructor: THREE.Line2,\n\n\tisLine2: true,\n\n\tcopy: function ( /* source */ ) {\n\n\t\t// todo\n\n\t\treturn this;\n\n\t}\n\n} );\n"
  },
  {
    "path": "libs/three.js/extra/lines/LineGeometry.js",
    "content": "/**\n * @author WestLangley / http://github.com/WestLangley\n *\n */\n\nTHREE.LineGeometry = function () {\n\n\tTHREE.LineSegmentsGeometry.call( this );\n\n\tthis.type = 'LineGeometry';\n\n};\n\nTHREE.LineGeometry.prototype = Object.assign( Object.create( THREE.LineSegmentsGeometry.prototype ), {\n\n\tconstructor: THREE.LineGeometry,\n\n\tisLineGeometry: true,\n\n\tsetPositions: function ( array ) {\n\n\t\t// converts [ x1, y1, z1,  x2, y2, z2, ... ] to pairs format\n\n\t\tvar length = array.length - 3;\n\t\tvar points = new Float32Array( 2 * length );\n\n\t\tfor ( var i = 0; i < length; i += 3 ) {\n\n\t\t\tpoints[ 2 * i ] = array[ i ];\n\t\t\tpoints[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tpoints[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tpoints[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tpoints[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tpoints[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tTHREE.LineSegmentsGeometry.prototype.setPositions.call( this, points );\n\n\t\treturn this;\n\n\t},\n\n\tsetColors: function ( array ) {\n\n\t\t// converts [ r1, g1, b1,  r2, g2, b2, ... ] to pairs format\n\n\t\tvar length = array.length - 3;\n\t\tvar colors = new Float32Array( 2 * length );\n\n\t\tfor ( var i = 0; i < length; i += 3 ) {\n\n\t\t\tcolors[ 2 * i ] = array[ i ];\n\t\t\tcolors[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tcolors[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tcolors[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tcolors[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tcolors[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tTHREE.LineSegmentsGeometry.prototype.setColors.call( this, colors );\n\n\t\treturn this;\n\n\t},\n\n\tfromLine: function ( line ) {\n\n\t\tvar geometry = line.geometry;\n\n\t\tif ( geometry.isGeometry ) {\n\n\t\t\tthis.setPositions( geometry.vertices );\n\n\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\tthis.setPositions( geometry.position.array ); // assumes non-indexed\n\n\t\t}\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( /* source */ ) {\n\n\t\t// todo\n\n\t\treturn this;\n\n\t}\n\n} );\n"
  },
  {
    "path": "libs/three.js/extra/lines/LineMaterial.js",
    "content": "/**\n * @author WestLangley / http://github.com/WestLangley\n *\n * parameters = {\n *  color: <hex>,\n *  linewidth: <float>,\n *  dashed: <boolean>,\n *  dashScale: <float>,\n *  dashSize: <float>,\n *  gapSize: <float>,\n *  resolution: <Vector2>, // to be set by renderer\n * }\n */\n\nTHREE.UniformsLib.line = {\n\n\tlinewidth: { value: 1 },\n\tresolution: { value: new THREE.Vector2( 1, 1 ) },\n\tdashScale: { value: 1 },\n\tdashSize: { value: 1 },\n\tgapSize: { value: 1 } // todo FIX - maybe change to totalSize\n\n};\n\nTHREE.ShaderLib[ 'line' ] = {\n\n\tuniforms: THREE.UniformsUtils.merge( [\n\t\tTHREE.UniformsLib.common,\n\t\tTHREE.UniformsLib.fog,\n\t\tTHREE.UniformsLib.line\n\t] ),\n\n\tvertexShader:\n\t\t`\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\tvarying vec2 vUv;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\tvUv = uv;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec2 ndcStart = clipStart.xy / clipStart.w;\n\t\t\tvec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd - ndcStart;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t// perpendicular to dir\n\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\n\t\t\t// undo aspect ratio adjustment\n\t\t\tdir.x /= aspect;\n\t\t\toffset.x /= aspect;\n\n\t\t\t// sign flip\n\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t// endcaps\n\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\toffset += - dir;\n\n\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\toffset += dir;\n\n\t\t\t}\n\n\t\t\t// adjust for linewidth\n\t\t\toffset *= linewidth;\n\n\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\toffset /= resolution.y;\n\n\t\t\t// select end\n\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t// back to clip space\n\t\t\toffset *= clip.w;\n\n\t\t\tclip.xy += offset;\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t`,\n\n\tfragmentShader:\n\t\t`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashSize;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\tfloat a = vUv.x;\n\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t}\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n\t\t\t#include <premultiplied_alpha_fragment>\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <encodings_fragment>\n\t\t\t#include <fog_fragment>\n\n\t\t}\n\t\t`\n};\n\nTHREE.LineMaterial = function ( parameters ) {\n\n\tTHREE.ShaderMaterial.call( this, {\n\n\t\ttype: 'LineMaterial',\n\n\t\tuniforms: THREE.UniformsUtils.clone( THREE.ShaderLib[ 'line' ].uniforms ),\n\n\t\tvertexShader: THREE.ShaderLib[ 'line' ].vertexShader,\n\t\tfragmentShader: THREE.ShaderLib[ 'line' ].fragmentShader\n\n\t} );\n\n\tthis.dashed = false;\n\n\tObject.defineProperties( this, {\n\n\t\tcolor: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.diffuse.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.diffuse.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tlinewidth: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.linewidth.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.linewidth.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tdashScale: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.dashScale.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.dashScale.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tdashSize: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.dashSize.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.dashSize.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tgapSize: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.gapSize.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.gapSize.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tresolution: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.resolution.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.resolution.value.copy( value );\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tthis.setValues( parameters );\n\n};\n\nTHREE.LineMaterial.prototype = Object.create( THREE.ShaderMaterial.prototype );\nTHREE.LineMaterial.prototype.constructor = THREE.LineMaterial;\n\nTHREE.LineMaterial.prototype.isLineMaterial = true;\n\nTHREE.LineMaterial.prototype.copy = function ( source ) {\n\n\tTHREE.ShaderMaterial.prototype.copy.call( this, source );\n\n\tthis.color.copy( source.color );\n\n\tthis.linewidth = source.linewidth;\n\n\tthis.resolution = source.resolution;\n\n\t// todo\n\n\treturn this;\n\n};\n\n"
  },
  {
    "path": "libs/three.js/extra/lines/LineSegments2.js",
    "content": "/**\n * @author WestLangley / http://github.com/WestLangley\n *\n */\n\nTHREE.LineSegments2 = function ( geometry, material ) {\n\n\tTHREE.Mesh.call( this );\n\n\tthis.type = 'LineSegments2';\n\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.LineSegmentsGeometry();\n\tthis.material = material !== undefined ? material : new THREE.LineMaterial( { color: Math.random() * 0xffffff } );\n\n};\n\nTHREE.LineSegments2.prototype = Object.assign( Object.create( THREE.Mesh.prototype ), {\n\n\tconstructor: THREE.LineSegments2,\n\n\tisLineSegments2: true,\n\n\tcomputeLineDistances: ( function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry...\n\n\t\tvar start = new THREE.Vector3();\n\t\tvar end = new THREE.Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tvar instanceStart = geometry.attributes.instanceStart;\n\t\t\tvar instanceEnd = geometry.attributes.instanceEnd;\n\t\t\tvar lineDistances = new Float32Array( 2 * instanceStart.data.count );\n\n\t\t\tfor ( var i = 0, j = 0, l = instanceStart.data.count; i < l; i ++, j += 2 ) {\n\n\t\t\t\tstart.fromBufferAttribute( instanceStart, i );\n\t\t\t\tend.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + start.distanceTo( end );\n\n\t\t\t}\n\n\t\t\tvar instanceDistanceBuffer = new THREE.InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\t\tgeometry.setAttribute( 'instanceDistanceStart', new THREE.InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\t\tgeometry.setAttribute( 'instanceDistanceEnd', new THREE.InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() ),\n\n\tcopy: function ( /* source */ ) {\n\n\t\t// todo\n\n\t\treturn this;\n\n\t}\n\n} );\n"
  },
  {
    "path": "libs/three.js/extra/lines/LineSegmentsGeometry.js",
    "content": "/**\n * @author WestLangley / http://github.com/WestLangley\n *\n */\n\nTHREE.LineSegmentsGeometry = function () {\n\n\tTHREE.InstancedBufferGeometry.call( this );\n\n\tthis.type = 'LineSegmentsGeometry';\n\n\tvar positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\tvar uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\tvar index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\tthis.setIndex( index );\n\tthis.setAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );\n\tthis.setAttribute( 'uv', new THREE.Float32BufferAttribute( uvs, 2 ) );\n\n};\n\nTHREE.LineSegmentsGeometry.prototype = Object.assign( Object.create( THREE.InstancedBufferGeometry.prototype ), {\n\n\tconstructor: THREE.LineSegmentsGeometry,\n\n\tisLineSegmentsGeometry: true,\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tvar start = this.attributes.instanceStart;\n\t\tvar end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined ) {\n\n\t\t\tmatrix.applyToBufferAttribute( start );\n\n\t\t\tmatrix.applyToBufferAttribute( end );\n\n\t\t\tstart.data.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetPositions: function ( array ) {\n\n\t\tvar lineSegments;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tlineSegments = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tlineSegments = new Float32Array( array );\n\n\t\t}\n\n\t\tvar instanceBuffer = new THREE.InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\tthis.setAttribute( 'instanceStart', new THREE.InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\tthis.setAttribute( 'instanceEnd', new THREE.InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\t//\n\n\t\tthis.computeBoundingBox();\n\t\tthis.computeBoundingSphere();\n\n\t\treturn this;\n\n\t},\n\n\tsetColors: function ( array ) {\n\n\t\tvar colors;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tcolors = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tcolors = new Float32Array( array );\n\n\t\t}\n\n\t\tvar instanceColorBuffer = new THREE.InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\tthis.setAttribute( 'instanceColorStart', new THREE.InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\tthis.setAttribute( 'instanceColorEnd', new THREE.InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\treturn this;\n\n\t},\n\n\tfromWireframeGeometry: function ( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t},\n\n\tfromEdgesGeometry: function ( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t},\n\n\tfromMesh: function ( mesh ) {\n\n\t\tthis.fromWireframeGeometry( new THREE.WireframeGeometry( mesh.geometry ) );\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t},\n\n\tfromLineSegements: function ( lineSegments ) {\n\n\t\tvar geometry = lineSegments.geometry;\n\n\t\tif ( geometry.isGeometry ) {\n\n\t\t\tthis.setPositions( geometry.vertices );\n\n\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\tthis.setPositions( geometry.position.array ); // assumes non-indexed\n\n\t\t}\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tvar box = new THREE.Box3();\n\n\t\treturn function computeBoundingBox() {\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.boundingBox = new THREE.Box3();\n\n\t\t\t}\n\n\t\t\tvar start = this.attributes.instanceStart;\n\t\t\tvar end = this.attributes.instanceEnd;\n\n\t\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t\tbox.setFromBufferAttribute( end );\n\n\t\t\t\tthis.boundingBox.union( box );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\tcomputeBoundingSphere: function () {\n\n\t\tvar vector = new THREE.Vector3();\n\n\t\treturn function computeBoundingSphere() {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new THREE.Sphere();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tvar start = this.attributes.instanceStart;\n\t\t\tvar end = this.attributes.instanceEnd;\n\n\t\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.fromBufferAttribute( start, i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t\tvector.fromBufferAttribute( end, i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoJSON: function () {\n\n\t\t// todo\n\n\t},\n\n\tclone: function () {\n\n\t\t// todo\n\n\t},\n\n\tcopy: function ( /* source */ ) {\n\n\t\t// todo\n\n\t\treturn this;\n\n\t}\n\n} );\n"
  },
  {
    "path": "libs/three.js/extra/lines/Wireframe.js",
    "content": "/**\n * @author WestLangley / http://github.com/WestLangley\n *\n */\n\nTHREE.Wireframe = function ( geometry, material ) {\n\n\tTHREE.Mesh.call( this );\n\n\tthis.type = 'Wireframe';\n\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.LineSegmentsGeometry();\n\tthis.material = material !== undefined ? material : new THREE.LineMaterial( { color: Math.random() * 0xffffff } );\n\n};\n\nTHREE.Wireframe.prototype = Object.assign( Object.create( THREE.Mesh.prototype ), {\n\n\tconstructor: THREE.Wireframe,\n\n\tisWireframe: true,\n\n\tcomputeLineDistances: ( function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry...\n\n\t\tvar start = new THREE.Vector3();\n\t\tvar end = new THREE.Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tvar instanceStart = geometry.attributes.instanceStart;\n\t\t\tvar instanceEnd = geometry.attributes.instanceEnd;\n\t\t\tvar lineDistances = new Float32Array( 2 * instanceStart.data.count );\n\n\t\t\tfor ( var i = 0, j = 0, l = instanceStart.data.count; i < l; i ++, j += 2 ) {\n\n\t\t\t\tstart.fromBufferAttribute( instanceStart, i );\n\t\t\t\tend.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + start.distanceTo( end );\n\n\t\t\t}\n\n\t\t\tvar instanceDistanceBuffer = new THREE.InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\t\tgeometry.setAttribute( 'instanceDistanceStart', new THREE.InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\t\tgeometry.setAttribute( 'instanceDistanceEnd', new THREE.InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() ),\n\n\tcopy: function ( /* source */ ) {\n\n\t\t// todo\n\n\t\treturn this;\n\n\t}\n\n} );\n"
  },
  {
    "path": "libs/three.js/extra/lines/WireframeGeometry2.js",
    "content": "/**\n * @author WestLangley / http://github.com/WestLangley\n *\n */\n\nTHREE.WireframeGeometry2 = function ( geometry ) {\n\n\tTHREE.LineSegmentsGeometry.call( this );\n\n\tthis.type = 'WireframeGeometry2';\n\n\tthis.fromWireframeGeometry( new THREE.WireframeGeometry( geometry ) );\n\n\t// set colors, maybe\n\n};\n\nTHREE.WireframeGeometry2.prototype = Object.assign( Object.create( THREE.LineSegmentsGeometry.prototype ), {\n\n\tconstructor: THREE.WireframeGeometry2,\n\n\tisWireframeGeometry2: true,\n\n\tcopy: function ( /* source */ ) {\n\n\t\t// todo\n\n\t\treturn this;\n\n\t}\n\n} );\n"
  },
  {
    "path": "libs/three.js/extra/lines.js",
    "content": "\r\n\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n */\r\n\r\nTHREE.LineSegmentsGeometry = function () {\r\n\r\n\tTHREE.InstancedBufferGeometry.call( this );\r\n\r\n\tthis.type = 'LineSegmentsGeometry';\r\n\r\n\tvar positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\r\n\tvar uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\r\n\tvar index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\r\n\r\n\tthis.setIndex( index );\r\n\tthis.setAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );\r\n\tthis.setAttribute( 'uv', new THREE.Float32BufferAttribute( uvs, 2 ) );\r\n\r\n};\r\n\r\nTHREE.LineSegmentsGeometry.prototype = Object.assign( Object.create( THREE.InstancedBufferGeometry.prototype ), {\r\n\r\n\tconstructor: THREE.LineSegmentsGeometry,\r\n\r\n\tisLineSegmentsGeometry: true,\r\n\r\n\tapplyMatrix: function ( matrix ) {\r\n\r\n\t\tvar start = this.attributes.instanceStart;\r\n\t\tvar end = this.attributes.instanceEnd;\r\n\r\n\t\tif ( start !== undefined ) {\r\n\r\n\t\t\tmatrix.applyToBufferAttribute( start );\r\n\r\n\t\t\tmatrix.applyToBufferAttribute( end );\r\n\r\n\t\t\tstart.data.needsUpdate = true;\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.boundingBox !== null ) {\r\n\r\n\t\t\tthis.computeBoundingBox();\r\n\r\n\t\t}\r\n\r\n\t\tif ( this.boundingSphere !== null ) {\r\n\r\n\t\t\tthis.computeBoundingSphere();\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetPositions: function ( array ) {\r\n\r\n\t\tvar lineSegments;\r\n\r\n\t\tif ( array instanceof Float32Array ) {\r\n\r\n\t\t\tlineSegments = array;\r\n\r\n\t\t} else if ( Array.isArray( array ) ) {\r\n\r\n\t\t\tlineSegments = new Float32Array( array );\r\n\r\n\t\t}\r\n\r\n\t\tvar instanceBuffer = new THREE.InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\r\n\r\n\t\tthis.setAttribute( 'instanceStart', new THREE.InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\r\n\t\tthis.setAttribute( 'instanceEnd', new THREE.InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\r\n\r\n\t\t//\r\n\r\n\t\tthis.computeBoundingBox();\r\n\t\tthis.computeBoundingSphere();\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetColors: function ( array ) {\r\n\r\n\t\tvar colors;\r\n\r\n\t\tif ( array instanceof Float32Array ) {\r\n\r\n\t\t\tcolors = array;\r\n\r\n\t\t} else if ( Array.isArray( array ) ) {\r\n\r\n\t\t\tcolors = new Float32Array( array );\r\n\r\n\t\t}\r\n\r\n\t\tvar instanceColorBuffer = new THREE.InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\r\n\r\n\t\tthis.setAttribute( 'instanceColorStart', new THREE.InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\r\n\t\tthis.setAttribute( 'instanceColorEnd', new THREE.InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromWireframeGeometry: function ( geometry ) {\r\n\r\n\t\tthis.setPositions( geometry.attributes.position.array );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromEdgesGeometry: function ( geometry ) {\r\n\r\n\t\tthis.setPositions( geometry.attributes.position.array );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromMesh: function ( mesh ) {\r\n\r\n\t\tthis.fromWireframeGeometry( new THREE.WireframeGeometry( mesh.geometry ) );\r\n\r\n\t\t// set colors, maybe\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromLineSegements: function ( lineSegments ) {\r\n\r\n\t\tvar geometry = lineSegments.geometry;\r\n\r\n\t\tif ( geometry.isGeometry ) {\r\n\r\n\t\t\tthis.setPositions( geometry.vertices );\r\n\r\n\t\t} else if ( geometry.isBufferGeometry ) {\r\n\r\n\t\t\tthis.setPositions( geometry.position.array ); // assumes non-indexed\r\n\r\n\t\t}\r\n\r\n\t\t// set colors, maybe\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcomputeBoundingBox: function () {\r\n\r\n\t\tvar box = new THREE.Box3();\r\n\r\n\t\treturn function computeBoundingBox() {\r\n\r\n\t\t\tif ( this.boundingBox === null ) {\r\n\r\n\t\t\t\tthis.boundingBox = new THREE.Box3();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar start = this.attributes.instanceStart;\r\n\t\t\tvar end = this.attributes.instanceEnd;\r\n\r\n\t\t\tif ( start !== undefined && end !== undefined ) {\r\n\r\n\t\t\t\tthis.boundingBox.setFromBufferAttribute( start );\r\n\r\n\t\t\t\tbox.setFromBufferAttribute( end );\r\n\r\n\t\t\t\tthis.boundingBox.union( box );\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\tcomputeBoundingSphere: function () {\r\n\r\n\t\tvar vector = new THREE.Vector3();\r\n\r\n\t\treturn function computeBoundingSphere() {\r\n\r\n\t\t\tif ( this.boundingSphere === null ) {\r\n\r\n\t\t\t\tthis.boundingSphere = new THREE.Sphere();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( this.boundingBox === null ) {\r\n\r\n\t\t\t\tthis.computeBoundingBox();\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar start = this.attributes.instanceStart;\r\n\t\t\tvar end = this.attributes.instanceEnd;\r\n\r\n\t\t\tif ( start !== undefined && end !== undefined ) {\r\n\r\n\t\t\t\tvar center = this.boundingSphere.center;\r\n\r\n\t\t\t\tthis.boundingBox.getCenter( center );\r\n\r\n\t\t\t\tvar maxRadiusSq = 0;\r\n\r\n\t\t\t\tfor ( var i = 0, il = start.count; i < il; i ++ ) {\r\n\r\n\t\t\t\t\tvector.fromBufferAttribute( start, i );\r\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\r\n\r\n\t\t\t\t\tvector.fromBufferAttribute( end, i );\r\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\r\n\r\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\r\n\r\n\t\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t}(),\r\n\r\n\ttoJSON: function () {\r\n\r\n\t\t// todo\r\n\r\n\t},\r\n\r\n\tclone: function () {\r\n\r\n\t\t// todo\r\n\r\n\t},\r\n\r\n\tcopy: function ( /* source */ ) {\r\n\r\n\t\t// todo\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n */\r\n\r\nTHREE.LineSegments2 = function ( geometry, material ) {\r\n\r\n\tTHREE.Mesh.call( this );\r\n\r\n\tthis.type = 'LineSegments2';\r\n\r\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.LineSegmentsGeometry();\r\n\tthis.material = material !== undefined ? material : new THREE.LineMaterial( { color: Math.random() * 0xffffff } );\r\n\r\n};\r\n\r\nTHREE.LineSegments2.prototype = Object.assign( Object.create( THREE.Mesh.prototype ), {\r\n\r\n\tconstructor: THREE.LineSegments2,\r\n\r\n\tisLineSegments2: true,\r\n\r\n\tcomputeLineDistances: ( function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry...\r\n\r\n\t\tvar start = new THREE.Vector3();\r\n\t\tvar end = new THREE.Vector3();\r\n\r\n\t\treturn function computeLineDistances() {\r\n\r\n\t\t\tvar geometry = this.geometry;\r\n\r\n\t\t\tvar instanceStart = geometry.attributes.instanceStart;\r\n\t\t\tvar instanceEnd = geometry.attributes.instanceEnd;\r\n\t\t\tvar lineDistances = new Float32Array( 2 * instanceStart.data.count );\r\n\r\n\t\t\tfor ( var i = 0, j = 0, l = instanceStart.data.count; i < l; i ++, j += 2 ) {\r\n\r\n\t\t\t\tstart.fromBufferAttribute( instanceStart, i );\r\n\t\t\t\tend.fromBufferAttribute( instanceEnd, i );\r\n\r\n\t\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\r\n\t\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + start.distanceTo( end );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar instanceDistanceBuffer = new THREE.InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\r\n\r\n\t\t\tgeometry.setAttribute( 'instanceDistanceStart', new THREE.InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\r\n\t\t\tgeometry.setAttribute( 'instanceDistanceEnd', new THREE.InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\r\n\r\n\t\t\treturn this;\r\n\r\n\t\t};\r\n\r\n\t}() ),\r\n\r\n\tcopy: function ( /* source */ ) {\r\n\r\n\t\t// todo\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n * parameters = {\r\n *  color: <hex>,\r\n *  linewidth: <float>,\r\n *  dashed: <boolean>,\r\n *  dashScale: <float>,\r\n *  dashSize: <float>,\r\n *  gapSize: <float>,\r\n *  resolution: <Vector2>, // to be set by renderer\r\n * }\r\n */\r\n\r\nTHREE.UniformsLib.line = {\r\n\r\n\tlinewidth: { value: 1 },\r\n\tresolution: { value: new THREE.Vector2( 1, 1 ) },\r\n\tdashScale: { value: 1 },\r\n\tdashSize: { value: 1 },\r\n\tgapSize: { value: 1 } // todo FIX - maybe change to totalSize\r\n\r\n};\r\n\r\nTHREE.ShaderLib[ 'line' ] = {\r\n\r\n\tuniforms: THREE.UniformsUtils.merge( [\r\n\t\tTHREE.UniformsLib.common,\r\n\t\tTHREE.UniformsLib.fog,\r\n\t\tTHREE.UniformsLib.line\r\n\t] ),\r\n\r\n\tvertexShader:\r\n\t\t`\r\n\t\t#include <common>\r\n\t\t#include <color_pars_vertex>\r\n\t\t#include <fog_pars_vertex>\r\n\t\t#include <logdepthbuf_pars_vertex>\r\n\t\t#include <clipping_planes_pars_vertex>\r\n\r\n\t\tuniform float linewidth;\r\n\t\tuniform vec2 resolution;\r\n\r\n\t\tattribute vec3 instanceStart;\r\n\t\tattribute vec3 instanceEnd;\r\n\r\n\t\tattribute vec3 instanceColorStart;\r\n\t\tattribute vec3 instanceColorEnd;\r\n\r\n\t\tvarying vec2 vUv;\r\n\r\n\t\t#ifdef USE_DASH\r\n\r\n\t\t\tuniform float dashScale;\r\n\t\t\tattribute float instanceDistanceStart;\r\n\t\t\tattribute float instanceDistanceEnd;\r\n\t\t\tvarying float vLineDistance;\r\n\r\n\t\t#endif\r\n\r\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\r\n\r\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\r\n\r\n\t\t\t// conservative estimate of the near plane\r\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\r\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\r\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\r\n\r\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\r\n\r\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\r\n\r\n\t\t}\r\n\r\n\t\tvoid main() {\r\n\r\n\t\t\t#ifdef USE_COLOR\r\n\r\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\r\n\r\n\t\t\t#endif\r\n\r\n\t\t\t#ifdef USE_DASH\r\n\r\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\r\n\r\n\t\t\t#endif\r\n\r\n\t\t\tfloat aspect = resolution.x / resolution.y;\r\n\r\n\t\t\tvUv = uv;\r\n\r\n\t\t\t// camera space\r\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\r\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\r\n\r\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\r\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\r\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\r\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\r\n\r\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\r\n\r\n\t\t\tif ( perspective ) {\r\n\r\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\r\n\r\n\t\t\t\t\ttrimSegment( start, end );\r\n\r\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\r\n\r\n\t\t\t\t\ttrimSegment( end, start );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// clip space\r\n\t\t\tvec4 clipStart = projectionMatrix * start;\r\n\t\t\tvec4 clipEnd = projectionMatrix * end;\r\n\r\n\t\t\t// ndc space\r\n\t\t\tvec2 ndcStart = clipStart.xy / clipStart.w;\r\n\t\t\tvec2 ndcEnd = clipEnd.xy / clipEnd.w;\r\n\r\n\t\t\t// direction\r\n\t\t\tvec2 dir = ndcEnd - ndcStart;\r\n\r\n\t\t\t// account for clip-space aspect ratio\r\n\t\t\tdir.x *= aspect;\r\n\t\t\tdir = normalize( dir );\r\n\r\n\t\t\t// perpendicular to dir\r\n\t\t\tvec2 offset = vec2( dir.y, - dir.x );\r\n\r\n\t\t\t// undo aspect ratio adjustment\r\n\t\t\tdir.x /= aspect;\r\n\t\t\toffset.x /= aspect;\r\n\r\n\t\t\t// sign flip\r\n\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\r\n\r\n\t\t\t// endcaps\r\n\t\t\tif ( position.y < 0.0 ) {\r\n\r\n\t\t\t\toffset += - dir;\r\n\r\n\t\t\t} else if ( position.y > 1.0 ) {\r\n\r\n\t\t\t\toffset += dir;\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// adjust for linewidth\r\n\t\t\toffset *= linewidth;\r\n\r\n\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\r\n\t\t\toffset /= resolution.y;\r\n\r\n\t\t\t// select end\r\n\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\r\n\r\n\t\t\t// back to clip space\r\n\t\t\toffset *= clip.w;\r\n\r\n\t\t\tclip.xy += offset;\r\n\r\n\t\t\tgl_Position = clip;\r\n\r\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\r\n\r\n\t\t\t#include <logdepthbuf_vertex>\r\n\t\t\t#include <clipping_planes_vertex>\r\n\t\t\t#include <fog_vertex>\r\n\r\n\t\t}\r\n\t\t`,\r\n\r\n\tfragmentShader:\r\n\t\t`\r\n\t\tuniform vec3 diffuse;\r\n\t\tuniform float opacity;\r\n\r\n\t\t#ifdef USE_DASH\r\n\r\n\t\t\tuniform float dashSize;\r\n\t\t\tuniform float gapSize;\r\n\r\n\t\t#endif\r\n\r\n\t\tvarying float vLineDistance;\r\n\r\n\t\t#include <common>\r\n\t\t#include <color_pars_fragment>\r\n\t\t#include <fog_pars_fragment>\r\n\t\t#include <logdepthbuf_pars_fragment>\r\n\t\t#include <clipping_planes_pars_fragment>\r\n\r\n\t\tvarying vec2 vUv;\r\n\r\n\t\tvoid main() {\r\n\r\n\t\t\t#include <clipping_planes_fragment>\r\n\r\n\t\t\t#ifdef USE_DASH\r\n\r\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\r\n\r\n\t\t\t\tif ( mod( vLineDistance, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\r\n\r\n\t\t\t#endif\r\n\r\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\r\n\r\n\t\t\t\tfloat a = vUv.x;\r\n\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\r\n\t\t\t\tfloat len2 = a * a + b * b;\r\n\r\n\t\t\t\tif ( len2 > 1.0 ) discard;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\r\n\r\n\t\t\t#include <logdepthbuf_fragment>\r\n\t\t\t#include <color_fragment>\r\n\r\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\r\n\r\n\t\t\t#include <premultiplied_alpha_fragment>\r\n\t\t\t#include <tonemapping_fragment>\r\n\t\t\t#include <encodings_fragment>\r\n\t\t\t#include <fog_fragment>\r\n\r\n\t\t}\r\n\t\t`\r\n};\r\n\r\nTHREE.LineMaterial = function ( parameters ) {\r\n\r\n\tTHREE.ShaderMaterial.call( this, {\r\n\r\n\t\ttype: 'LineMaterial',\r\n\r\n\t\tuniforms: THREE.UniformsUtils.clone( THREE.ShaderLib[ 'line' ].uniforms ),\r\n\r\n\t\tvertexShader: THREE.ShaderLib[ 'line' ].vertexShader,\r\n\t\tfragmentShader: THREE.ShaderLib[ 'line' ].fragmentShader\r\n\r\n\t} );\r\n\r\n\tthis.dashed = false;\r\n\r\n\tObject.defineProperties( this, {\r\n\r\n\t\tcolor: {\r\n\r\n\t\t\tenumerable: true,\r\n\r\n\t\t\tget: function () {\r\n\r\n\t\t\t\treturn this.uniforms.diffuse.value;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tset: function ( value ) {\r\n\r\n\t\t\t\tthis.uniforms.diffuse.value = value;\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tlinewidth: {\r\n\r\n\t\t\tenumerable: true,\r\n\r\n\t\t\tget: function () {\r\n\r\n\t\t\t\treturn this.uniforms.linewidth.value;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tset: function ( value ) {\r\n\r\n\t\t\t\tthis.uniforms.linewidth.value = value;\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tdashScale: {\r\n\r\n\t\t\tenumerable: true,\r\n\r\n\t\t\tget: function () {\r\n\r\n\t\t\t\treturn this.uniforms.dashScale.value;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tset: function ( value ) {\r\n\r\n\t\t\t\tthis.uniforms.dashScale.value = value;\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tdashSize: {\r\n\r\n\t\t\tenumerable: true,\r\n\r\n\t\t\tget: function () {\r\n\r\n\t\t\t\treturn this.uniforms.dashSize.value;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tset: function ( value ) {\r\n\r\n\t\t\t\tthis.uniforms.dashSize.value = value;\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tgapSize: {\r\n\r\n\t\t\tenumerable: true,\r\n\r\n\t\t\tget: function () {\r\n\r\n\t\t\t\treturn this.uniforms.gapSize.value;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tset: function ( value ) {\r\n\r\n\t\t\t\tthis.uniforms.gapSize.value = value;\r\n\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tresolution: {\r\n\r\n\t\t\tenumerable: true,\r\n\r\n\t\t\tget: function () {\r\n\r\n\t\t\t\treturn this.uniforms.resolution.value;\r\n\r\n\t\t\t},\r\n\r\n\t\t\tset: function ( value ) {\r\n\r\n\t\t\t\tthis.uniforms.resolution.value.copy( value );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t} );\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.LineMaterial.prototype = Object.create( THREE.ShaderMaterial.prototype );\r\nTHREE.LineMaterial.prototype.constructor = THREE.LineMaterial;\r\n\r\nTHREE.LineMaterial.prototype.isLineMaterial = true;\r\n\r\nTHREE.LineMaterial.prototype.copy = function ( source ) {\r\n\r\n\tTHREE.ShaderMaterial.prototype.copy.call( this, source );\r\n\r\n\tthis.color.copy( source.color );\r\n\r\n\tthis.linewidth = source.linewidth;\r\n\r\n\tthis.resolution = source.resolution;\r\n\r\n\t// todo\r\n\r\n\treturn this;\r\n\r\n};\r\n\r\n\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n */\r\n\r\nTHREE.LineGeometry = function () {\r\n\r\n\tTHREE.LineSegmentsGeometry.call( this );\r\n\r\n\tthis.type = 'LineGeometry';\r\n\r\n};\r\n\r\nTHREE.LineGeometry.prototype = Object.assign( Object.create( THREE.LineSegmentsGeometry.prototype ), {\r\n\r\n\tconstructor: THREE.LineGeometry,\r\n\r\n\tisLineGeometry: true,\r\n\r\n\tsetPositions: function ( array ) {\r\n\r\n\t\t// converts [ x1, y1, z1,  x2, y2, z2, ... ] to pairs format\r\n\r\n\t\tvar length = array.length - 3;\r\n\t\tvar points = new Float32Array( 2 * length );\r\n\r\n\t\tfor ( var i = 0; i < length; i += 3 ) {\r\n\r\n\t\t\tpoints[ 2 * i ] = array[ i ];\r\n\t\t\tpoints[ 2 * i + 1 ] = array[ i + 1 ];\r\n\t\t\tpoints[ 2 * i + 2 ] = array[ i + 2 ];\r\n\r\n\t\t\tpoints[ 2 * i + 3 ] = array[ i + 3 ];\r\n\t\t\tpoints[ 2 * i + 4 ] = array[ i + 4 ];\r\n\t\t\tpoints[ 2 * i + 5 ] = array[ i + 5 ];\r\n\r\n\t\t}\r\n\r\n\t\tTHREE.LineSegmentsGeometry.prototype.setPositions.call( this, points );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tsetColors: function ( array ) {\r\n\r\n\t\t// converts [ r1, g1, b1,  r2, g2, b2, ... ] to pairs format\r\n\r\n\t\tvar length = array.length - 3;\r\n\t\tvar colors = new Float32Array( 2 * length );\r\n\r\n\t\tfor ( var i = 0; i < length; i += 3 ) {\r\n\r\n\t\t\tcolors[ 2 * i ] = array[ i ];\r\n\t\t\tcolors[ 2 * i + 1 ] = array[ i + 1 ];\r\n\t\t\tcolors[ 2 * i + 2 ] = array[ i + 2 ];\r\n\r\n\t\t\tcolors[ 2 * i + 3 ] = array[ i + 3 ];\r\n\t\t\tcolors[ 2 * i + 4 ] = array[ i + 4 ];\r\n\t\t\tcolors[ 2 * i + 5 ] = array[ i + 5 ];\r\n\r\n\t\t}\r\n\r\n\t\tTHREE.LineSegmentsGeometry.prototype.setColors.call( this, colors );\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tfromLine: function ( line ) {\r\n\r\n\t\tvar geometry = line.geometry;\r\n\r\n\t\tif ( geometry.isGeometry ) {\r\n\r\n\t\t\tthis.setPositions( geometry.vertices );\r\n\r\n\t\t} else if ( geometry.isBufferGeometry ) {\r\n\r\n\t\t\tthis.setPositions( geometry.position.array ); // assumes non-indexed\r\n\r\n\t\t}\r\n\r\n\t\t// set colors, maybe\r\n\r\n\t\treturn this;\r\n\r\n\t},\r\n\r\n\tcopy: function ( /* source */ ) {\r\n\r\n\t\t// todo\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n\r\n/**\r\n * @author WestLangley / http://github.com/WestLangley\r\n *\r\n */\r\n\r\nTHREE.Line2 = function ( geometry, material ) {\r\n\r\n\tTHREE.LineSegments2.call( this );\r\n\r\n\tthis.type = 'Line2';\r\n\r\n\tthis.geometry = geometry !== undefined ? geometry : new THREE.LineGeometry();\r\n\tthis.material = material !== undefined ? material : new THREE.LineMaterial( { color: Math.random() * 0xffffff } );\r\n\r\n};\r\n\r\nTHREE.Line2.prototype = Object.assign( Object.create( THREE.LineSegments2.prototype ), {\r\n\r\n\tconstructor: THREE.Line2,\r\n\r\n\tisLine2: true,\r\n\r\n\tcopy: function ( /* source */ ) {\r\n\r\n\t\t// todo\r\n\r\n\t\treturn this;\r\n\r\n\t}\r\n\r\n} );\r\n\r\n\r\n"
  },
  {
    "path": "libs/three.js/libs/dat.gui.module.js",
    "content": "/**\n * dat-gui JavaScript Controller Library\n * http://code.google.com/p/dat-gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle( css ) {\n\n\tif ( ! css ) {\n\n\t\treturn;\n\n\t}\n\tif ( typeof window === 'undefined' ) {\n\n\t\treturn;\n\n\t}\n\n\tvar style = document.createElement( 'style' );\n\n\tstyle.setAttribute( 'type', 'text/css' );\n\tstyle.innerHTML = css;\n\tdocument.head.appendChild( style );\n\n\treturn css;\n\n}\n\nfunction colorToString( color, forceCSSHex ) {\n\n\tvar colorFormat = color.__state.conversionName.toString();\n\tvar r = Math.round( color.r );\n\tvar g = Math.round( color.g );\n\tvar b = Math.round( color.b );\n\tvar a = color.a;\n\tvar h = Math.round( color.h );\n\tvar s = color.s.toFixed( 1 );\n\tvar v = color.v.toFixed( 1 );\n\tif ( forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX' ) {\n\n\t\tvar str = color.hex.toString( 16 );\n\t\twhile ( str.length < 6 ) {\n\n\t\t\tstr = '0' + str;\n\n\t\t}\n\t\treturn '#' + str;\n\n\t} else if ( colorFormat === 'CSS_RGB' ) {\n\n\t\treturn 'rgb(' + r + ',' + g + ',' + b + ')';\n\n\t} else if ( colorFormat === 'CSS_RGBA' ) {\n\n\t\treturn 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n\n\t} else if ( colorFormat === 'HEX' ) {\n\n\t\treturn '0x' + color.hex.toString( 16 );\n\n\t} else if ( colorFormat === 'RGB_ARRAY' ) {\n\n\t\treturn '[' + r + ',' + g + ',' + b + ']';\n\n\t} else if ( colorFormat === 'RGBA_ARRAY' ) {\n\n\t\treturn '[' + r + ',' + g + ',' + b + ',' + a + ']';\n\n\t} else if ( colorFormat === 'RGB_OBJ' ) {\n\n\t\treturn '{r:' + r + ',g:' + g + ',b:' + b + '}';\n\n\t} else if ( colorFormat === 'RGBA_OBJ' ) {\n\n\t\treturn '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n\n\t} else if ( colorFormat === 'HSV_OBJ' ) {\n\n\t\treturn '{h:' + h + ',s:' + s + ',v:' + v + '}';\n\n\t} else if ( colorFormat === 'HSVA_OBJ' ) {\n\n\t\treturn '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n\n\t}\n\treturn 'unknown format';\n\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n\tBREAK: {},\n\textend: function extend( target ) {\n\n\t\tthis.each( ARR_SLICE.call( arguments, 1 ), function ( obj ) {\n\n\t\t\tvar keys = this.isObject( obj ) ? Object.keys( obj ) : [];\n\t\t\tkeys.forEach( function ( key ) {\n\n\t\t\t\tif ( ! this.isUndefined( obj[ key ] ) ) {\n\n\t\t\t\t\ttarget[ key ] = obj[ key ];\n\n\t\t\t\t}\n\n\t\t\t}.bind( this ) );\n\n\t\t}, this );\n\t\treturn target;\n\n\t},\n\tdefaults: function defaults( target ) {\n\n\t\tthis.each( ARR_SLICE.call( arguments, 1 ), function ( obj ) {\n\n\t\t\tvar keys = this.isObject( obj ) ? Object.keys( obj ) : [];\n\t\t\tkeys.forEach( function ( key ) {\n\n\t\t\t\tif ( this.isUndefined( target[ key ] ) ) {\n\n\t\t\t\t\ttarget[ key ] = obj[ key ];\n\n\t\t\t\t}\n\n\t\t\t}.bind( this ) );\n\n\t\t}, this );\n\t\treturn target;\n\n\t},\n\tcompose: function compose() {\n\n\t\tvar toCall = ARR_SLICE.call( arguments );\n\t\treturn function () {\n\n\t\t\tvar args = ARR_SLICE.call( arguments );\n\t\t\tfor ( var i = toCall.length - 1; i >= 0; i -- ) {\n\n\t\t\t\targs = [ toCall[ i ].apply( this, args ) ];\n\n\t\t\t}\n\t\t\treturn args[ 0 ];\n\n\t\t};\n\n\t},\n\teach: function each( obj, itr, scope ) {\n\n\t\tif ( ! obj ) {\n\n\t\t\treturn;\n\n\t\t}\n\t\tif ( ARR_EACH && obj.forEach && obj.forEach === ARR_EACH ) {\n\n\t\t\tobj.forEach( itr, scope );\n\n\t\t} else if ( obj.length === obj.length + 0 ) {\n\n\t\t\tvar key = void 0;\n\t\t\tvar l = void 0;\n\t\t\tfor ( key = 0, l = obj.length; key < l; key ++ ) {\n\n\t\t\t\tif ( key in obj && itr.call( scope, obj[ key ], key ) === this.BREAK ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfor ( var _key in obj ) {\n\n\t\t\t\tif ( itr.call( scope, obj[ _key ], _key ) === this.BREAK ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\tdefer: function defer( fnc ) {\n\n\t\tsetTimeout( fnc, 0 );\n\n\t},\n\tdebounce: function debounce( func, threshold, callImmediately ) {\n\n\t\tvar timeout = void 0;\n\t\treturn function () {\n\n\t\t\tvar obj = this;\n\t\t\tvar args = arguments;\n\t\t\tfunction delayed() {\n\n\t\t\t\ttimeout = null;\n\t\t\t\tif ( ! callImmediately ) func.apply( obj, args );\n\n\t\t\t}\n\t\t\tvar callNow = callImmediately || ! timeout;\n\t\t\tclearTimeout( timeout );\n\t\t\ttimeout = setTimeout( delayed, threshold );\n\t\t\tif ( callNow ) {\n\n\t\t\t\tfunc.apply( obj, args );\n\n\t\t\t}\n\n\t\t};\n\n\t},\n\ttoArray: function toArray( obj ) {\n\n\t\tif ( obj.toArray ) return obj.toArray();\n\t\treturn ARR_SLICE.call( obj );\n\n\t},\n\tisUndefined: function isUndefined( obj ) {\n\n\t\treturn obj === undefined;\n\n\t},\n\tisNull: function isNull( obj ) {\n\n\t\treturn obj === null;\n\n\t},\n\tisNaN: function ( _isNaN ) {\n\n\t\tfunction isNaN() {\n\n\t\t\treturn _isNaN.apply( this, arguments );\n\n\t\t}\n\t\tisNaN.toString = function () {\n\n\t\t\treturn _isNaN.toString();\n\n\t\t};\n\t\treturn isNaN;\n\n\t}( function ( obj ) {\n\n\t\treturn isNaN( obj );\n\n\t} ),\n\tisArray: Array.isArray || function ( obj ) {\n\n\t\treturn obj.constructor === Array;\n\n\t},\n\tisObject: function isObject( obj ) {\n\n\t\treturn obj === Object( obj );\n\n\t},\n\tisNumber: function isNumber( obj ) {\n\n\t\treturn obj === obj + 0;\n\n\t},\n\tisString: function isString( obj ) {\n\n\t\treturn obj === obj + '';\n\n\t},\n\tisBoolean: function isBoolean( obj ) {\n\n\t\treturn obj === false || obj === true;\n\n\t},\n\tisFunction: function isFunction( obj ) {\n\n\t\treturn obj instanceof Function;\n\n\t}\n};\n\nvar INTERPRETATIONS = [\n\t{\n\t\tlitmus: Common.isString,\n\t\tconversions: {\n\t\t\tTHREE_CHAR_HEX: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tvar test = original.match( /^#([A-F0-9])([A-F0-9])([A-F0-9])$/i );\n\t\t\t\t\tif ( test === null ) {\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspace: 'HEX',\n\t\t\t\t\t\thex: parseInt( '0x' + test[ 1 ].toString() + test[ 1 ].toString() + test[ 2 ].toString() + test[ 2 ].toString() + test[ 3 ].toString() + test[ 3 ].toString(), 0 )\n\t\t\t\t\t};\n\n\t\t\t\t},\n\t\t\t\twrite: colorToString\n\t\t\t},\n\t\t\tSIX_CHAR_HEX: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tvar test = original.match( /^#([A-F0-9]{6})$/i );\n\t\t\t\t\tif ( test === null ) {\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspace: 'HEX',\n\t\t\t\t\t\thex: parseInt( '0x' + test[ 1 ].toString(), 0 )\n\t\t\t\t\t};\n\n\t\t\t\t},\n\t\t\t\twrite: colorToString\n\t\t\t},\n\t\t\tCSS_RGB: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tvar test = original.match( /^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/ );\n\t\t\t\t\tif ( test === null ) {\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspace: 'RGB',\n\t\t\t\t\t\tr: parseFloat( test[ 1 ] ),\n\t\t\t\t\t\tg: parseFloat( test[ 2 ] ),\n\t\t\t\t\t\tb: parseFloat( test[ 3 ] )\n\t\t\t\t\t};\n\n\t\t\t\t},\n\t\t\t\twrite: colorToString\n\t\t\t},\n\t\t\tCSS_RGBA: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tvar test = original.match( /^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/ );\n\t\t\t\t\tif ( test === null ) {\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspace: 'RGB',\n\t\t\t\t\t\tr: parseFloat( test[ 1 ] ),\n\t\t\t\t\t\tg: parseFloat( test[ 2 ] ),\n\t\t\t\t\t\tb: parseFloat( test[ 3 ] ),\n\t\t\t\t\t\ta: parseFloat( test[ 4 ] )\n\t\t\t\t\t};\n\n\t\t\t\t},\n\t\t\t\twrite: colorToString\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tlitmus: Common.isNumber,\n\t\tconversions: {\n\t\t\tHEX: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspace: 'HEX',\n\t\t\t\t\t\thex: original,\n\t\t\t\t\t\tconversionName: 'HEX'\n\t\t\t\t\t};\n\n\t\t\t\t},\n\t\t\t\twrite: function write( color ) {\n\n\t\t\t\t\treturn color.hex;\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tlitmus: Common.isArray,\n\t\tconversions: {\n\t\t\tRGB_ARRAY: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tif ( original.length !== 3 ) {\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspace: 'RGB',\n\t\t\t\t\t\tr: original[ 0 ],\n\t\t\t\t\t\tg: original[ 1 ],\n\t\t\t\t\t\tb: original[ 2 ]\n\t\t\t\t\t};\n\n\t\t\t\t},\n\t\t\t\twrite: function write( color ) {\n\n\t\t\t\t\treturn [ color.r, color.g, color.b ];\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tRGBA_ARRAY: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tif ( original.length !== 4 ) return false;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tspace: 'RGB',\n\t\t\t\t\t\tr: original[ 0 ],\n\t\t\t\t\t\tg: original[ 1 ],\n\t\t\t\t\t\tb: original[ 2 ],\n\t\t\t\t\t\ta: original[ 3 ]\n\t\t\t\t\t};\n\n\t\t\t\t},\n\t\t\t\twrite: function write( color ) {\n\n\t\t\t\t\treturn [ color.r, color.g, color.b, color.a ];\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tlitmus: Common.isObject,\n\t\tconversions: {\n\t\t\tRGBA_OBJ: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tif ( Common.isNumber( original.r ) && Common.isNumber( original.g ) && Common.isNumber( original.b ) && Common.isNumber( original.a ) ) {\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tspace: 'RGB',\n\t\t\t\t\t\t\tr: original.r,\n\t\t\t\t\t\t\tg: original.g,\n\t\t\t\t\t\t\tb: original.b,\n\t\t\t\t\t\t\ta: original.a\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\n\t\t\t\t},\n\t\t\t\twrite: function write( color ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tr: color.r,\n\t\t\t\t\t\tg: color.g,\n\t\t\t\t\t\tb: color.b,\n\t\t\t\t\t\ta: color.a\n\t\t\t\t\t};\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tRGB_OBJ: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tif ( Common.isNumber( original.r ) && Common.isNumber( original.g ) && Common.isNumber( original.b ) ) {\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tspace: 'RGB',\n\t\t\t\t\t\t\tr: original.r,\n\t\t\t\t\t\t\tg: original.g,\n\t\t\t\t\t\t\tb: original.b\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\n\t\t\t\t},\n\t\t\t\twrite: function write( color ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tr: color.r,\n\t\t\t\t\t\tg: color.g,\n\t\t\t\t\t\tb: color.b\n\t\t\t\t\t};\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tHSVA_OBJ: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tif ( Common.isNumber( original.h ) && Common.isNumber( original.s ) && Common.isNumber( original.v ) && Common.isNumber( original.a ) ) {\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tspace: 'HSV',\n\t\t\t\t\t\t\th: original.h,\n\t\t\t\t\t\t\ts: original.s,\n\t\t\t\t\t\t\tv: original.v,\n\t\t\t\t\t\t\ta: original.a\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\n\t\t\t\t},\n\t\t\t\twrite: function write( color ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\th: color.h,\n\t\t\t\t\t\ts: color.s,\n\t\t\t\t\t\tv: color.v,\n\t\t\t\t\t\ta: color.a\n\t\t\t\t\t};\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tHSV_OBJ: {\n\t\t\t\tread: function read( original ) {\n\n\t\t\t\t\tif ( Common.isNumber( original.h ) && Common.isNumber( original.s ) && Common.isNumber( original.v ) ) {\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tspace: 'HSV',\n\t\t\t\t\t\t\th: original.h,\n\t\t\t\t\t\t\ts: original.s,\n\t\t\t\t\t\t\tv: original.v\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\n\t\t\t\t},\n\t\t\t\twrite: function write( color ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\th: color.h,\n\t\t\t\t\t\ts: color.s,\n\t\t\t\t\t\tv: color.v\n\t\t\t\t\t};\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} ];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n\n\ttoReturn = false;\n\tvar original = arguments.length > 1 ? Common.toArray( arguments ) : arguments[ 0 ];\n\tCommon.each( INTERPRETATIONS, function ( family ) {\n\n\t\tif ( family.litmus( original ) ) {\n\n\t\t\tCommon.each( family.conversions, function ( conversion, conversionName ) {\n\n\t\t\t\tresult = conversion.read( original );\n\t\t\t\tif ( toReturn === false && result !== false ) {\n\n\t\t\t\t\ttoReturn = result;\n\t\t\t\t\tresult.conversionName = conversionName;\n\t\t\t\t\tresult.conversion = conversion;\n\t\t\t\t\treturn Common.BREAK;\n\n\t\t\t\t}\n\n\t\t\t} );\n\t\t\treturn Common.BREAK;\n\n\t\t}\n\n\t} );\n\treturn toReturn;\n\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n\thsv_to_rgb: function hsv_to_rgb( h, s, v ) {\n\n\t\tvar hi = Math.floor( h / 60 ) % 6;\n\t\tvar f = h / 60 - Math.floor( h / 60 );\n\t\tvar p = v * ( 1.0 - s );\n\t\tvar q = v * ( 1.0 - f * s );\n\t\tvar t = v * ( 1.0 - ( 1.0 - f ) * s );\n\t\tvar c = [[ v, t, p ], [ q, v, p ], [ p, v, t ], [ p, q, v ], [ t, p, v ], [ v, p, q ]][ hi ];\n\t\treturn {\n\t\t\tr: c[ 0 ] * 255,\n\t\t\tg: c[ 1 ] * 255,\n\t\t\tb: c[ 2 ] * 255\n\t\t};\n\n\t},\n\trgb_to_hsv: function rgb_to_hsv( r, g, b ) {\n\n\t\tvar min = Math.min( r, g, b );\n\t\tvar max = Math.max( r, g, b );\n\t\tvar delta = max - min;\n\t\tvar h = void 0;\n\t\tvar s = void 0;\n\t\tif ( max !== 0 ) {\n\n\t\t\ts = delta / max;\n\n\t\t} else {\n\n\t\t\treturn {\n\t\t\t\th: NaN,\n\t\t\t\ts: 0,\n\t\t\t\tv: 0\n\t\t\t};\n\n\t\t}\n\t\tif ( r === max ) {\n\n\t\t\th = ( g - b ) / delta;\n\n\t\t} else if ( g === max ) {\n\n\t\t\th = 2 + ( b - r ) / delta;\n\n\t\t} else {\n\n\t\t\th = 4 + ( r - g ) / delta;\n\n\t\t}\n\t\th /= 6;\n\t\tif ( h < 0 ) {\n\n\t\t\th += 1;\n\n\t\t}\n\t\treturn {\n\t\t\th: h * 360,\n\t\t\ts: s,\n\t\t\tv: max / 255\n\t\t};\n\n\t},\n\trgb_to_hex: function rgb_to_hex( r, g, b ) {\n\n\t\tvar hex = this.hex_with_component( 0, 2, r );\n\t\thex = this.hex_with_component( hex, 1, g );\n\t\thex = this.hex_with_component( hex, 0, b );\n\t\treturn hex;\n\n\t},\n\tcomponent_from_hex: function component_from_hex( hex, componentIndex ) {\n\n\t\treturn hex >> componentIndex * 8 & 0xFF;\n\n\t},\n\thex_with_component: function hex_with_component( hex, componentIndex, value ) {\n\n\t\treturn value << ( tmpComponent = componentIndex * 8 ) | hex & ~ ( 0xFF << tmpComponent );\n\n\t}\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function ( obj ) {\n\n\treturn typeof obj;\n\n} : function ( obj ) {\n\n\treturn obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function ( instance, Constructor ) {\n\n\tif ( ! ( instance instanceof Constructor ) ) {\n\n\t\tthrow new TypeError( \"Cannot call a class as a function\" );\n\n\t}\n\n};\n\nvar createClass = function () {\n\n\tfunction defineProperties( target, props ) {\n\n\t\tfor ( var i = 0; i < props.length; i ++ ) {\n\n\t\t\tvar descriptor = props[ i ];\n\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\tdescriptor.configurable = true;\n\t\t\tif ( \"value\" in descriptor ) descriptor.writable = true;\n\t\t\tObject.defineProperty( target, descriptor.key, descriptor );\n\n\t\t}\n\n\t}\n\n\treturn function ( Constructor, protoProps, staticProps ) {\n\n\t\tif ( protoProps ) defineProperties( Constructor.prototype, protoProps );\n\t\tif ( staticProps ) defineProperties( Constructor, staticProps );\n\t\treturn Constructor;\n\n\t};\n\n}();\n\n\n\n\n\n\n\nvar get = function get( object, property, receiver ) {\n\n\tif ( object === null ) object = Function.prototype;\n\tvar desc = Object.getOwnPropertyDescriptor( object, property );\n\n\tif ( desc === undefined ) {\n\n\t\tvar parent = Object.getPrototypeOf( object );\n\n\t\tif ( parent === null ) {\n\n\t\t\treturn undefined;\n\n\t\t} else {\n\n\t\t\treturn get( parent, property, receiver );\n\n\t\t}\n\n\t} else if ( \"value\" in desc ) {\n\n\t\treturn desc.value;\n\n\t} else {\n\n\t\tvar getter = desc.get;\n\n\t\tif ( getter === undefined ) {\n\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\treturn getter.call( receiver );\n\n\t}\n\n};\n\nvar inherits = function ( subClass, superClass ) {\n\n\tif ( typeof superClass !== \"function\" && superClass !== null ) {\n\n\t\tthrow new TypeError( \"Super expression must either be null or a function, not \" + typeof superClass );\n\n\t}\n\n\tsubClass.prototype = Object.create( superClass && superClass.prototype, {\n\t\tconstructor: {\n\t\t\tvalue: subClass,\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true\n\t\t}\n\t} );\n\tif ( superClass ) Object.setPrototypeOf ? Object.setPrototypeOf( subClass, superClass ) : subClass.__proto__ = superClass;\n\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function ( self, call ) {\n\n\tif ( ! self ) {\n\n\t\tthrow new ReferenceError( \"this hasn't been initialised - super() hasn't been called\" );\n\n\t}\n\n\treturn call && ( typeof call === \"object\" || typeof call === \"function\" ) ? call : self;\n\n};\n\nvar Color = function () {\n\n\tfunction Color() {\n\n\t\tclassCallCheck( this, Color );\n\t\tthis.__state = interpret.apply( this, arguments );\n\t\tif ( this.__state === false ) {\n\n\t\t\tthrow new Error( 'Failed to interpret color arguments' );\n\n\t\t}\n\t\tthis.__state.a = this.__state.a || 1;\n\n\t}\n\tcreateClass( Color, [ {\n\t\tkey: 'toString',\n\t\tvalue: function toString() {\n\n\t\t\treturn colorToString( this );\n\n\t\t}\n\t}, {\n\t\tkey: 'toHexString',\n\t\tvalue: function toHexString() {\n\n\t\t\treturn colorToString( this, true );\n\n\t\t}\n\t}, {\n\t\tkey: 'toOriginal',\n\t\tvalue: function toOriginal() {\n\n\t\t\treturn this.__state.conversion.write( this );\n\n\t\t}\n\t} ] );\n\treturn Color;\n\n}();\nfunction defineRGBComponent( target, component, componentHexIndex ) {\n\n\tObject.defineProperty( target, component, {\n\t\tget: function get$$1() {\n\n\t\t\tif ( this.__state.space === 'RGB' ) {\n\n\t\t\t\treturn this.__state[ component ];\n\n\t\t\t}\n\t\t\tColor.recalculateRGB( this, component, componentHexIndex );\n\t\t\treturn this.__state[ component ];\n\n\t\t},\n\t\tset: function set$$1( v ) {\n\n\t\t\tif ( this.__state.space !== 'RGB' ) {\n\n\t\t\t\tColor.recalculateRGB( this, component, componentHexIndex );\n\t\t\t\tthis.__state.space = 'RGB';\n\n\t\t\t}\n\t\t\tthis.__state[ component ] = v;\n\n\t\t}\n\t} );\n\n}\nfunction defineHSVComponent( target, component ) {\n\n\tObject.defineProperty( target, component, {\n\t\tget: function get$$1() {\n\n\t\t\tif ( this.__state.space === 'HSV' ) {\n\n\t\t\t\treturn this.__state[ component ];\n\n\t\t\t}\n\t\t\tColor.recalculateHSV( this );\n\t\t\treturn this.__state[ component ];\n\n\t\t},\n\t\tset: function set$$1( v ) {\n\n\t\t\tif ( this.__state.space !== 'HSV' ) {\n\n\t\t\t\tColor.recalculateHSV( this );\n\t\t\t\tthis.__state.space = 'HSV';\n\n\t\t\t}\n\t\t\tthis.__state[ component ] = v;\n\n\t\t}\n\t} );\n\n}\nColor.recalculateRGB = function ( color, component, componentHexIndex ) {\n\n\tif ( color.__state.space === 'HEX' ) {\n\n\t\tcolor.__state[ component ] = ColorMath.component_from_hex( color.__state.hex, componentHexIndex );\n\n\t} else if ( color.__state.space === 'HSV' ) {\n\n\t\tCommon.extend( color.__state, ColorMath.hsv_to_rgb( color.__state.h, color.__state.s, color.__state.v ) );\n\n\t} else {\n\n\t\tthrow new Error( 'Corrupted color state' );\n\n\t}\n\n};\nColor.recalculateHSV = function ( color ) {\n\n\tvar result = ColorMath.rgb_to_hsv( color.r, color.g, color.b );\n\tCommon.extend( color.__state, {\n\t\ts: result.s,\n\t\tv: result.v\n\t} );\n\tif ( ! Common.isNaN( result.h ) ) {\n\n\t\tcolor.__state.h = result.h;\n\n\t} else if ( Common.isUndefined( color.__state.h ) ) {\n\n\t\tcolor.__state.h = 0;\n\n\t}\n\n};\nColor.COMPONENTS = [ 'r', 'g', 'b', 'h', 's', 'v', 'hex', 'a' ];\ndefineRGBComponent( Color.prototype, 'r', 2 );\ndefineRGBComponent( Color.prototype, 'g', 1 );\ndefineRGBComponent( Color.prototype, 'b', 0 );\ndefineHSVComponent( Color.prototype, 'h' );\ndefineHSVComponent( Color.prototype, 's' );\ndefineHSVComponent( Color.prototype, 'v' );\nObject.defineProperty( Color.prototype, 'a', {\n\tget: function get$$1() {\n\n\t\treturn this.__state.a;\n\n\t},\n\tset: function set$$1( v ) {\n\n\t\tthis.__state.a = v;\n\n\t}\n} );\nObject.defineProperty( Color.prototype, 'hex', {\n\tget: function get$$1() {\n\n\t\tif ( this.__state.space !== 'HEX' ) {\n\n\t\t\tthis.__state.hex = ColorMath.rgb_to_hex( this.r, this.g, this.b );\n\t\t\tthis.__state.space = 'HEX';\n\n\t\t}\n\t\treturn this.__state.hex;\n\n\t},\n\tset: function set$$1( v ) {\n\n\t\tthis.__state.space = 'HEX';\n\t\tthis.__state.hex = v;\n\n\t}\n} );\n\nvar Controller = function () {\n\n\tfunction Controller( object, property ) {\n\n\t\tclassCallCheck( this, Controller );\n\t\tthis.initialValue = object[ property ];\n\t\tthis.domElement = document.createElement( 'div' );\n\t\tthis.object = object;\n\t\tthis.property = property;\n\t\tthis.__onChange = undefined;\n\t\tthis.__onFinishChange = undefined;\n\n\t}\n\tcreateClass( Controller, [ {\n\t\tkey: 'onChange',\n\t\tvalue: function onChange( fnc ) {\n\n\t\t\tthis.__onChange = fnc;\n\t\t\treturn this;\n\n\t\t}\n\t}, {\n\t\tkey: 'onFinishChange',\n\t\tvalue: function onFinishChange( fnc ) {\n\n\t\t\tthis.__onFinishChange = fnc;\n\t\t\treturn this;\n\n\t\t}\n\t}, {\n\t\tkey: 'setValue',\n\t\tvalue: function setValue( newValue ) {\n\n\t\t\tthis.object[ this.property ] = newValue;\n\t\t\tif ( this.__onChange ) {\n\n\t\t\t\tthis.__onChange.call( this, newValue );\n\n\t\t\t}\n\t\t\tthis.updateDisplay();\n\t\t\treturn this;\n\n\t\t}\n\t}, {\n\t\tkey: 'getValue',\n\t\tvalue: function getValue() {\n\n\t\t\treturn this.object[ this.property ];\n\n\t\t}\n\t}, {\n\t\tkey: 'updateDisplay',\n\t\tvalue: function updateDisplay() {\n\n\t\t\treturn this;\n\n\t\t}\n\t}, {\n\t\tkey: 'isModified',\n\t\tvalue: function isModified() {\n\n\t\t\treturn this.initialValue !== this.getValue();\n\n\t\t}\n\t} ] );\n\treturn Controller;\n\n}();\n\nvar EVENT_MAP = {\n\tHTMLEvents: [ 'change' ],\n\tMouseEvents: [ 'click', 'mousemove', 'mousedown', 'mouseup', 'mouseover' ],\n\tKeyboardEvents: [ 'keydown' ]\n};\nvar EVENT_MAP_INV = {};\nCommon.each( EVENT_MAP, function ( v, k ) {\n\n\tCommon.each( v, function ( e ) {\n\n\t\tEVENT_MAP_INV[ e ] = k;\n\n\t} );\n\n} );\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels( val ) {\n\n\tif ( val === '0' || Common.isUndefined( val ) ) {\n\n\t\treturn 0;\n\n\t}\n\tvar match = val.match( CSS_VALUE_PIXELS );\n\tif ( ! Common.isNull( match ) ) {\n\n\t\treturn parseFloat( match[ 1 ] );\n\n\t}\n\treturn 0;\n\n}\nvar dom = {\n\tmakeSelectable: function makeSelectable( elem, selectable ) {\n\n\t\tif ( elem === undefined || elem.style === undefined ) return;\n\t\telem.onselectstart = selectable ? function () {\n\n\t\t\treturn false;\n\n\t\t} : function () {};\n\t\telem.style.MozUserSelect = selectable ? 'auto' : 'none';\n\t\telem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n\t\telem.unselectable = selectable ? 'on' : 'off';\n\n\t},\n\tmakeFullscreen: function makeFullscreen( elem, hor, vert ) {\n\n\t\tvar vertical = vert;\n\t\tvar horizontal = hor;\n\t\tif ( Common.isUndefined( horizontal ) ) {\n\n\t\t\thorizontal = true;\n\n\t\t}\n\t\tif ( Common.isUndefined( vertical ) ) {\n\n\t\t\tvertical = true;\n\n\t\t}\n\t\telem.style.position = 'absolute';\n\t\tif ( horizontal ) {\n\n\t\t\telem.style.left = 0;\n\t\t\telem.style.right = 0;\n\n\t\t}\n\t\tif ( vertical ) {\n\n\t\t\telem.style.top = 0;\n\t\t\telem.style.bottom = 0;\n\n\t\t}\n\n\t},\n\tfakeEvent: function fakeEvent( elem, eventType, pars, aux ) {\n\n\t\tvar params = pars || {};\n\t\tvar className = EVENT_MAP_INV[ eventType ];\n\t\tif ( ! className ) {\n\n\t\t\tthrow new Error( 'Event type ' + eventType + ' not supported.' );\n\n\t\t}\n\t\tvar evt = document.createEvent( className );\n\t\tswitch ( className ) {\n\n\t\t\tcase 'MouseEvents':\n\t\t\t{\n\n\t\t\t\tvar clientX = params.x || params.clientX || 0;\n\t\t\t\tvar clientY = params.y || params.clientY || 0;\n\t\t\t\tevt.initMouseEvent( eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n\t\t\t\t\t0,\n\t\t\t\t\tclientX,\n\t\t\t\t\tclientY,\n\t\t\t\t\tfalse, false, false, false, 0, null );\n\t\t\t\tbreak;\n\n\t\t\t}\n\t\t\tcase 'KeyboardEvents':\n\t\t\t{\n\n\t\t\t\tvar init = evt.initKeyboardEvent || evt.initKeyEvent;\n\t\t\t\tCommon.defaults( params, {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tctrlKey: false,\n\t\t\t\t\taltKey: false,\n\t\t\t\t\tshiftKey: false,\n\t\t\t\t\tmetaKey: false,\n\t\t\t\t\tkeyCode: undefined,\n\t\t\t\t\tcharCode: undefined\n\t\t\t\t} );\n\t\t\t\tinit( eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode );\n\t\t\t\tbreak;\n\n\t\t\t}\n\t\t\tdefault:\n\t\t\t{\n\n\t\t\t\tevt.initEvent( eventType, params.bubbles || false, params.cancelable || true );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\t\tCommon.defaults( evt, aux );\n\t\telem.dispatchEvent( evt );\n\n\t},\n\tbind: function bind( elem, event, func, newBool ) {\n\n\t\tvar bool = newBool || false;\n\t\tif ( elem.addEventListener ) {\n\n\t\t\telem.addEventListener( event, func, bool );\n\n\t\t} else if ( elem.attachEvent ) {\n\n\t\t\telem.attachEvent( 'on' + event, func );\n\n\t\t}\n\t\treturn dom;\n\n\t},\n\tunbind: function unbind( elem, event, func, newBool ) {\n\n\t\tvar bool = newBool || false;\n\t\tif ( elem.removeEventListener ) {\n\n\t\t\telem.removeEventListener( event, func, bool );\n\n\t\t} else if ( elem.detachEvent ) {\n\n\t\t\telem.detachEvent( 'on' + event, func );\n\n\t\t}\n\t\treturn dom;\n\n\t},\n\taddClass: function addClass( elem, className ) {\n\n\t\tif ( elem.className === undefined ) {\n\n\t\t\telem.className = className;\n\n\t\t} else if ( elem.className !== className ) {\n\n\t\t\tvar classes = elem.className.split( / +/ );\n\t\t\tif ( classes.indexOf( className ) === - 1 ) {\n\n\t\t\t\tclasses.push( className );\n\t\t\t\telem.className = classes.join( ' ' ).replace( /^\\s+/, '' ).replace( /\\s+$/, '' );\n\n\t\t\t}\n\n\t\t}\n\t\treturn dom;\n\n\t},\n\tremoveClass: function removeClass( elem, className ) {\n\n\t\tif ( className ) {\n\n\t\t\tif ( elem.className === className ) {\n\n\t\t\t\telem.removeAttribute( 'class' );\n\n\t\t\t} else {\n\n\t\t\t\tvar classes = elem.className.split( / +/ );\n\t\t\t\tvar index = classes.indexOf( className );\n\t\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\t\tclasses.splice( index, 1 );\n\t\t\t\t\telem.className = classes.join( ' ' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\telem.className = undefined;\n\n\t\t}\n\t\treturn dom;\n\n\t},\n\thasClass: function hasClass( elem, className ) {\n\n\t\treturn new RegExp( '(?:^|\\\\s+)' + className + '(?:\\\\s+|$)' ).test( elem.className ) || false;\n\n\t},\n\tgetWidth: function getWidth( elem ) {\n\n\t\tvar style = getComputedStyle( elem );\n\t\treturn cssValueToPixels( style[ 'border-left-width' ] ) + cssValueToPixels( style[ 'border-right-width' ] ) + cssValueToPixels( style[ 'padding-left' ] ) + cssValueToPixels( style[ 'padding-right' ] ) + cssValueToPixels( style.width );\n\n\t},\n\tgetHeight: function getHeight( elem ) {\n\n\t\tvar style = getComputedStyle( elem );\n\t\treturn cssValueToPixels( style[ 'border-top-width' ] ) + cssValueToPixels( style[ 'border-bottom-width' ] ) + cssValueToPixels( style[ 'padding-top' ] ) + cssValueToPixels( style[ 'padding-bottom' ] ) + cssValueToPixels( style.height );\n\n\t},\n\tgetOffset: function getOffset( el ) {\n\n\t\tvar elem = el;\n\t\tvar offset = { left: 0, top: 0 };\n\t\tif ( elem.offsetParent ) {\n\n\t\t\tdo {\n\n\t\t\t\toffset.left += elem.offsetLeft;\n\t\t\t\toffset.top += elem.offsetTop;\n\t\t\t\telem = elem.offsetParent;\n\n\t\t\t} while ( elem );\n\n\t\t}\n\t\treturn offset;\n\n\t},\n\tisActive: function isActive( elem ) {\n\n\t\treturn elem === document.activeElement && ( elem.type || elem.href );\n\n\t}\n};\n\nvar BooleanController = function ( _Controller ) {\n\n\tinherits( BooleanController, _Controller );\n\tfunction BooleanController( object, property ) {\n\n\t\tclassCallCheck( this, BooleanController );\n\t\tvar _this2 = possibleConstructorReturn( this, ( BooleanController.__proto__ || Object.getPrototypeOf( BooleanController ) ).call( this, object, property ) );\n\t\tvar _this = _this2;\n\t\t_this2.__prev = _this2.getValue();\n\t\t_this2.__checkbox = document.createElement( 'input' );\n\t\t_this2.__checkbox.setAttribute( 'type', 'checkbox' );\n\t\tfunction onChange() {\n\n\t\t\t_this.setValue( ! _this.__prev );\n\n\t\t}\n\t\tdom.bind( _this2.__checkbox, 'change', onChange, false );\n\t\t_this2.domElement.appendChild( _this2.__checkbox );\n\t\t_this2.updateDisplay();\n\t\treturn _this2;\n\n\t}\n\tcreateClass( BooleanController, [ {\n\t\tkey: 'setValue',\n\t\tvalue: function setValue( v ) {\n\n\t\t\tvar toReturn = get( BooleanController.prototype.__proto__ || Object.getPrototypeOf( BooleanController.prototype ), 'setValue', this ).call( this, v );\n\t\t\tif ( this.__onFinishChange ) {\n\n\t\t\t\tthis.__onFinishChange.call( this, this.getValue() );\n\n\t\t\t}\n\t\t\tthis.__prev = this.getValue();\n\t\t\treturn toReturn;\n\n\t\t}\n\t}, {\n\t\tkey: 'updateDisplay',\n\t\tvalue: function updateDisplay() {\n\n\t\t\tif ( this.getValue() === true ) {\n\n\t\t\t\tthis.__checkbox.setAttribute( 'checked', 'checked' );\n\t\t\t\tthis.__checkbox.checked = true;\n\t\t\t\tthis.__prev = true;\n\n\t\t\t} else {\n\n\t\t\t\tthis.__checkbox.checked = false;\n\t\t\t\tthis.__prev = false;\n\n\t\t\t}\n\t\t\treturn get( BooleanController.prototype.__proto__ || Object.getPrototypeOf( BooleanController.prototype ), 'updateDisplay', this ).call( this );\n\n\t\t}\n\t} ] );\n\treturn BooleanController;\n\n}( Controller );\n\nvar OptionController = function ( _Controller ) {\n\n\tinherits( OptionController, _Controller );\n\tfunction OptionController( object, property, opts ) {\n\n\t\tclassCallCheck( this, OptionController );\n\t\tvar _this2 = possibleConstructorReturn( this, ( OptionController.__proto__ || Object.getPrototypeOf( OptionController ) ).call( this, object, property ) );\n\t\tvar options = opts;\n\t\tvar _this = _this2;\n\t\t_this2.__select = document.createElement( 'select' );\n\t\tif ( Common.isArray( options ) ) {\n\n\t\t\tvar map = {};\n\t\t\tCommon.each( options, function ( element ) {\n\n\t\t\t\tmap[ element ] = element;\n\n\t\t\t} );\n\t\t\toptions = map;\n\n\t\t}\n\t\tCommon.each( options, function ( value, key ) {\n\n\t\t\tvar opt = document.createElement( 'option' );\n\t\t\topt.innerHTML = key;\n\t\t\topt.setAttribute( 'value', value );\n\t\t\t_this.__select.appendChild( opt );\n\n\t\t} );\n\t\t_this2.updateDisplay();\n\t\tdom.bind( _this2.__select, 'change', function () {\n\n\t\t\tvar desiredValue = this.options[ this.selectedIndex ].value;\n\t\t\t_this.setValue( desiredValue );\n\n\t\t} );\n\t\t_this2.domElement.appendChild( _this2.__select );\n\t\treturn _this2;\n\n\t}\n\tcreateClass( OptionController, [ {\n\t\tkey: 'setValue',\n\t\tvalue: function setValue( v ) {\n\n\t\t\tvar toReturn = get( OptionController.prototype.__proto__ || Object.getPrototypeOf( OptionController.prototype ), 'setValue', this ).call( this, v );\n\t\t\tif ( this.__onFinishChange ) {\n\n\t\t\t\tthis.__onFinishChange.call( this, this.getValue() );\n\n\t\t\t}\n\t\t\treturn toReturn;\n\n\t\t}\n\t}, {\n\t\tkey: 'updateDisplay',\n\t\tvalue: function updateDisplay() {\n\n\t\t\tif ( dom.isActive( this.__select ) ) return this;\n\t\t\tthis.__select.value = this.getValue();\n\t\t\treturn get( OptionController.prototype.__proto__ || Object.getPrototypeOf( OptionController.prototype ), 'updateDisplay', this ).call( this );\n\n\t\t}\n\t} ] );\n\treturn OptionController;\n\n}( Controller );\n\nvar StringController = function ( _Controller ) {\n\n\tinherits( StringController, _Controller );\n\tfunction StringController( object, property ) {\n\n\t\tclassCallCheck( this, StringController );\n\t\tvar _this2 = possibleConstructorReturn( this, ( StringController.__proto__ || Object.getPrototypeOf( StringController ) ).call( this, object, property ) );\n\t\tvar _this = _this2;\n\t\tfunction onChange() {\n\n\t\t\t_this.setValue( _this.__input.value );\n\n\t\t}\n\t\tfunction onBlur() {\n\n\t\t\tif ( _this.__onFinishChange ) {\n\n\t\t\t\t_this.__onFinishChange.call( _this, _this.getValue() );\n\n\t\t\t}\n\n\t\t}\n\t\t_this2.__input = document.createElement( 'input' );\n\t\t_this2.__input.setAttribute( 'type', 'text' );\n\t\tdom.bind( _this2.__input, 'keyup', onChange );\n\t\tdom.bind( _this2.__input, 'change', onChange );\n\t\tdom.bind( _this2.__input, 'blur', onBlur );\n\t\tdom.bind( _this2.__input, 'keydown', function ( e ) {\n\n\t\t\tif ( e.keyCode === 13 ) {\n\n\t\t\t\tthis.blur();\n\n\t\t\t}\n\n\t\t} );\n\t\t_this2.updateDisplay();\n\t\t_this2.domElement.appendChild( _this2.__input );\n\t\treturn _this2;\n\n\t}\n\tcreateClass( StringController, [ {\n\t\tkey: 'updateDisplay',\n\t\tvalue: function updateDisplay() {\n\n\t\t\tif ( ! dom.isActive( this.__input ) ) {\n\n\t\t\t\tthis.__input.value = this.getValue();\n\n\t\t\t}\n\t\t\treturn get( StringController.prototype.__proto__ || Object.getPrototypeOf( StringController.prototype ), 'updateDisplay', this ).call( this );\n\n\t\t}\n\t} ] );\n\treturn StringController;\n\n}( Controller );\n\nfunction numDecimals( x ) {\n\n\tvar _x = x.toString();\n\tif ( _x.indexOf( '.' ) > - 1 ) {\n\n\t\treturn _x.length - _x.indexOf( '.' ) - 1;\n\n\t}\n\treturn 0;\n\n}\nvar NumberController = function ( _Controller ) {\n\n\tinherits( NumberController, _Controller );\n\tfunction NumberController( object, property, params ) {\n\n\t\tclassCallCheck( this, NumberController );\n\t\tvar _this = possibleConstructorReturn( this, ( NumberController.__proto__ || Object.getPrototypeOf( NumberController ) ).call( this, object, property ) );\n\t\tvar _params = params || {};\n\t\t_this.__min = _params.min;\n\t\t_this.__max = _params.max;\n\t\t_this.__step = _params.step;\n\t\tif ( Common.isUndefined( _this.__step ) ) {\n\n\t\t\tif ( _this.initialValue === 0 ) {\n\n\t\t\t\t_this.__impliedStep = 1;\n\n\t\t\t} else {\n\n\t\t\t\t_this.__impliedStep = Math.pow( 10, Math.floor( Math.log( Math.abs( _this.initialValue ) ) / Math.LN10 ) ) / 10;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_this.__impliedStep = _this.__step;\n\n\t\t}\n\t\t_this.__precision = numDecimals( _this.__impliedStep );\n\t\treturn _this;\n\n\t}\n\tcreateClass( NumberController, [ {\n\t\tkey: 'setValue',\n\t\tvalue: function setValue( v ) {\n\n\t\t\tvar _v = v;\n\t\t\tif ( this.__min !== undefined && _v < this.__min ) {\n\n\t\t\t\t_v = this.__min;\n\n\t\t\t} else if ( this.__max !== undefined && _v > this.__max ) {\n\n\t\t\t\t_v = this.__max;\n\n\t\t\t}\n\t\t\tif ( this.__step !== undefined && _v % this.__step !== 0 ) {\n\n\t\t\t\t_v = Math.round( _v / this.__step ) * this.__step;\n\n\t\t\t}\n\t\t\treturn get( NumberController.prototype.__proto__ || Object.getPrototypeOf( NumberController.prototype ), 'setValue', this ).call( this, _v );\n\n\t\t}\n\t}, {\n\t\tkey: 'min',\n\t\tvalue: function min( minValue ) {\n\n\t\t\tthis.__min = minValue;\n\t\t\treturn this;\n\n\t\t}\n\t}, {\n\t\tkey: 'max',\n\t\tvalue: function max( maxValue ) {\n\n\t\t\tthis.__max = maxValue;\n\t\t\treturn this;\n\n\t\t}\n\t}, {\n\t\tkey: 'step',\n\t\tvalue: function step( stepValue ) {\n\n\t\t\tthis.__step = stepValue;\n\t\t\tthis.__impliedStep = stepValue;\n\t\t\tthis.__precision = numDecimals( stepValue );\n\t\t\treturn this;\n\n\t\t}\n\t} ] );\n\treturn NumberController;\n\n}( Controller );\n\nfunction roundToDecimal( value, decimals ) {\n\n\tvar tenTo = Math.pow( 10, decimals );\n\treturn Math.round( value * tenTo ) / tenTo;\n\n}\nvar NumberControllerBox = function ( _NumberController ) {\n\n\tinherits( NumberControllerBox, _NumberController );\n\tfunction NumberControllerBox( object, property, params ) {\n\n\t\tclassCallCheck( this, NumberControllerBox );\n\t\tvar _this2 = possibleConstructorReturn( this, ( NumberControllerBox.__proto__ || Object.getPrototypeOf( NumberControllerBox ) ).call( this, object, property, params ) );\n\t\t_this2.__truncationSuspended = false;\n\t\tvar _this = _this2;\n\t\tvar prevY = void 0;\n\t\tfunction onChange() {\n\n\t\t\tvar attempted = parseFloat( _this.__input.value );\n\t\t\tif ( ! Common.isNaN( attempted ) ) {\n\n\t\t\t\t_this.setValue( attempted );\n\n\t\t\t}\n\n\t\t}\n\t\tfunction onFinish() {\n\n\t\t\tif ( _this.__onFinishChange ) {\n\n\t\t\t\t_this.__onFinishChange.call( _this, _this.getValue() );\n\n\t\t\t}\n\n\t\t}\n\t\tfunction onBlur() {\n\n\t\t\tonFinish();\n\n\t\t}\n\t\tfunction onMouseDrag( e ) {\n\n\t\t\tvar diff = prevY - e.clientY;\n\t\t\t_this.setValue( _this.getValue() + diff * _this.__impliedStep );\n\t\t\tprevY = e.clientY;\n\n\t\t}\n\t\tfunction onMouseUp() {\n\n\t\t\tdom.unbind( window, 'mousemove', onMouseDrag );\n\t\t\tdom.unbind( window, 'mouseup', onMouseUp );\n\t\t\tonFinish();\n\n\t\t}\n\t\tfunction onMouseDown( e ) {\n\n\t\t\tdom.bind( window, 'mousemove', onMouseDrag );\n\t\t\tdom.bind( window, 'mouseup', onMouseUp );\n\t\t\tprevY = e.clientY;\n\n\t\t}\n\t\t_this2.__input = document.createElement( 'input' );\n\t\t_this2.__input.setAttribute( 'type', 'text' );\n\t\tdom.bind( _this2.__input, 'change', onChange );\n\t\tdom.bind( _this2.__input, 'blur', onBlur );\n\t\tdom.bind( _this2.__input, 'mousedown', onMouseDown );\n\t\tdom.bind( _this2.__input, 'keydown', function ( e ) {\n\n\t\t\tif ( e.keyCode === 13 ) {\n\n\t\t\t\t_this.__truncationSuspended = true;\n\t\t\t\tthis.blur();\n\t\t\t\t_this.__truncationSuspended = false;\n\t\t\t\tonFinish();\n\n\t\t\t}\n\n\t\t} );\n\t\t_this2.updateDisplay();\n\t\t_this2.domElement.appendChild( _this2.__input );\n\t\treturn _this2;\n\n\t}\n\tcreateClass( NumberControllerBox, [ {\n\t\tkey: 'updateDisplay',\n\t\tvalue: function updateDisplay() {\n\n\t\t\tthis.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal( this.getValue(), this.__precision );\n\t\t\treturn get( NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf( NumberControllerBox.prototype ), 'updateDisplay', this ).call( this );\n\n\t\t}\n\t} ] );\n\treturn NumberControllerBox;\n\n}( NumberController );\n\nfunction map( v, i1, i2, o1, o2 ) {\n\n\treturn o1 + ( o2 - o1 ) * ( ( v - i1 ) / ( i2 - i1 ) );\n\n}\nvar NumberControllerSlider = function ( _NumberController ) {\n\n\tinherits( NumberControllerSlider, _NumberController );\n\tfunction NumberControllerSlider( object, property, min, max, step ) {\n\n\t\tclassCallCheck( this, NumberControllerSlider );\n\t\tvar _this2 = possibleConstructorReturn( this, ( NumberControllerSlider.__proto__ || Object.getPrototypeOf( NumberControllerSlider ) ).call( this, object, property, { min: min, max: max, step: step } ) );\n\t\tvar _this = _this2;\n\t\t_this2.__background = document.createElement( 'div' );\n\t\t_this2.__foreground = document.createElement( 'div' );\n\t\tdom.bind( _this2.__background, 'mousedown', onMouseDown );\n\t\tdom.bind( _this2.__background, 'touchstart', onTouchStart );\n\t\tdom.addClass( _this2.__background, 'slider' );\n\t\tdom.addClass( _this2.__foreground, 'slider-fg' );\n\t\tfunction onMouseDown( e ) {\n\n\t\t\tdocument.activeElement.blur();\n\t\t\tdom.bind( window, 'mousemove', onMouseDrag );\n\t\t\tdom.bind( window, 'mouseup', onMouseUp );\n\t\t\tonMouseDrag( e );\n\n\t\t}\n\t\tfunction onMouseDrag( e ) {\n\n\t\t\te.preventDefault();\n\t\t\tvar bgRect = _this.__background.getBoundingClientRect();\n\t\t\t_this.setValue( map( e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max ) );\n\t\t\treturn false;\n\n\t\t}\n\t\tfunction onMouseUp() {\n\n\t\t\tdom.unbind( window, 'mousemove', onMouseDrag );\n\t\t\tdom.unbind( window, 'mouseup', onMouseUp );\n\t\t\tif ( _this.__onFinishChange ) {\n\n\t\t\t\t_this.__onFinishChange.call( _this, _this.getValue() );\n\n\t\t\t}\n\n\t\t}\n\t\tfunction onTouchStart( e ) {\n\n\t\t\tif ( e.touches.length !== 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\t\t\tdom.bind( window, 'touchmove', onTouchMove );\n\t\t\tdom.bind( window, 'touchend', onTouchEnd );\n\t\t\tonTouchMove( e );\n\n\t\t}\n\t\tfunction onTouchMove( e ) {\n\n\t\t\tvar clientX = e.touches[ 0 ].clientX;\n\t\t\tvar bgRect = _this.__background.getBoundingClientRect();\n\t\t\t_this.setValue( map( clientX, bgRect.left, bgRect.right, _this.__min, _this.__max ) );\n\n\t\t}\n\t\tfunction onTouchEnd() {\n\n\t\t\tdom.unbind( window, 'touchmove', onTouchMove );\n\t\t\tdom.unbind( window, 'touchend', onTouchEnd );\n\t\t\tif ( _this.__onFinishChange ) {\n\n\t\t\t\t_this.__onFinishChange.call( _this, _this.getValue() );\n\n\t\t\t}\n\n\t\t}\n\t\t_this2.updateDisplay();\n\t\t_this2.__background.appendChild( _this2.__foreground );\n\t\t_this2.domElement.appendChild( _this2.__background );\n\t\treturn _this2;\n\n\t}\n\tcreateClass( NumberControllerSlider, [ {\n\t\tkey: 'updateDisplay',\n\t\tvalue: function updateDisplay() {\n\n\t\t\tvar pct = ( this.getValue() - this.__min ) / ( this.__max - this.__min );\n\t\t\tthis.__foreground.style.width = pct * 100 + '%';\n\t\t\treturn get( NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf( NumberControllerSlider.prototype ), 'updateDisplay', this ).call( this );\n\n\t\t}\n\t} ] );\n\treturn NumberControllerSlider;\n\n}( NumberController );\n\nvar FunctionController = function ( _Controller ) {\n\n\tinherits( FunctionController, _Controller );\n\tfunction FunctionController( object, property, text ) {\n\n\t\tclassCallCheck( this, FunctionController );\n\t\tvar _this2 = possibleConstructorReturn( this, ( FunctionController.__proto__ || Object.getPrototypeOf( FunctionController ) ).call( this, object, property ) );\n\t\tvar _this = _this2;\n\t\t_this2.__button = document.createElement( 'div' );\n\t\t_this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n\t\tdom.bind( _this2.__button, 'click', function ( e ) {\n\n\t\t\te.preventDefault();\n\t\t\t_this.fire();\n\t\t\treturn false;\n\n\t\t} );\n\t\tdom.addClass( _this2.__button, 'button' );\n\t\t_this2.domElement.appendChild( _this2.__button );\n\t\treturn _this2;\n\n\t}\n\tcreateClass( FunctionController, [ {\n\t\tkey: 'fire',\n\t\tvalue: function fire() {\n\n\t\t\tif ( this.__onChange ) {\n\n\t\t\t\tthis.__onChange.call( this );\n\n\t\t\t}\n\t\t\tthis.getValue().call( this.object );\n\t\t\tif ( this.__onFinishChange ) {\n\n\t\t\t\tthis.__onFinishChange.call( this, this.getValue() );\n\n\t\t\t}\n\n\t\t}\n\t} ] );\n\treturn FunctionController;\n\n}( Controller );\n\nvar ColorController = function ( _Controller ) {\n\n\tinherits( ColorController, _Controller );\n\tfunction ColorController( object, property ) {\n\n\t\tclassCallCheck( this, ColorController );\n\t\tvar _this2 = possibleConstructorReturn( this, ( ColorController.__proto__ || Object.getPrototypeOf( ColorController ) ).call( this, object, property ) );\n\t\t_this2.__color = new Color( _this2.getValue() );\n\t\t_this2.__temp = new Color( 0 );\n\t\tvar _this = _this2;\n\t\t_this2.domElement = document.createElement( 'div' );\n\t\tdom.makeSelectable( _this2.domElement, false );\n\t\t_this2.__selector = document.createElement( 'div' );\n\t\t_this2.__selector.className = 'selector';\n\t\t_this2.__saturation_field = document.createElement( 'div' );\n\t\t_this2.__saturation_field.className = 'saturation-field';\n\t\t_this2.__field_knob = document.createElement( 'div' );\n\t\t_this2.__field_knob.className = 'field-knob';\n\t\t_this2.__field_knob_border = '2px solid ';\n\t\t_this2.__hue_knob = document.createElement( 'div' );\n\t\t_this2.__hue_knob.className = 'hue-knob';\n\t\t_this2.__hue_field = document.createElement( 'div' );\n\t\t_this2.__hue_field.className = 'hue-field';\n\t\t_this2.__input = document.createElement( 'input' );\n\t\t_this2.__input.type = 'text';\n\t\t_this2.__input_textShadow = '0 1px 1px ';\n\t\tdom.bind( _this2.__input, 'keydown', function ( e ) {\n\n\t\t\tif ( e.keyCode === 13 ) {\n\n\t\t\t\tonBlur.call( this );\n\n\t\t\t}\n\n\t\t} );\n\t\tdom.bind( _this2.__input, 'blur', onBlur );\n\t\tdom.bind( _this2.__selector, 'mousedown', function () {\n\n\t\t\tdom.addClass( this, 'drag' ).bind( window, 'mouseup', function () {\n\n\t\t\t\tdom.removeClass( _this.__selector, 'drag' );\n\n\t\t\t} );\n\n\t\t} );\n\t\tdom.bind( _this2.__selector, 'touchstart', function () {\n\n\t\t\tdom.addClass( this, 'drag' ).bind( window, 'touchend', function () {\n\n\t\t\t\tdom.removeClass( _this.__selector, 'drag' );\n\n\t\t\t} );\n\n\t\t} );\n\t\tvar valueField = document.createElement( 'div' );\n\t\tCommon.extend( _this2.__selector.style, {\n\t\t\twidth: '122px',\n\t\t\theight: '102px',\n\t\t\tpadding: '3px',\n\t\t\tbackgroundColor: '#222',\n\t\t\tboxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n\t\t} );\n\t\tCommon.extend( _this2.__field_knob.style, {\n\t\t\tposition: 'absolute',\n\t\t\twidth: '12px',\n\t\t\theight: '12px',\n\t\t\tborder: _this2.__field_knob_border + ( _this2.__color.v < 0.5 ? '#fff' : '#000' ),\n\t\t\tboxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n\t\t\tborderRadius: '12px',\n\t\t\tzIndex: 1\n\t\t} );\n\t\tCommon.extend( _this2.__hue_knob.style, {\n\t\t\tposition: 'absolute',\n\t\t\twidth: '15px',\n\t\t\theight: '2px',\n\t\t\tborderRight: '4px solid #fff',\n\t\t\tzIndex: 1\n\t\t} );\n\t\tCommon.extend( _this2.__saturation_field.style, {\n\t\t\twidth: '100px',\n\t\t\theight: '100px',\n\t\t\tborder: '1px solid #555',\n\t\t\tmarginRight: '3px',\n\t\t\tdisplay: 'inline-block',\n\t\t\tcursor: 'pointer'\n\t\t} );\n\t\tCommon.extend( valueField.style, {\n\t\t\twidth: '100%',\n\t\t\theight: '100%',\n\t\t\tbackground: 'none'\n\t\t} );\n\t\tlinearGradient( valueField, 'top', 'rgba(0,0,0,0)', '#000' );\n\t\tCommon.extend( _this2.__hue_field.style, {\n\t\t\twidth: '15px',\n\t\t\theight: '100px',\n\t\t\tborder: '1px solid #555',\n\t\t\tcursor: 'ns-resize',\n\t\t\tposition: 'absolute',\n\t\t\ttop: '3px',\n\t\t\tright: '3px'\n\t\t} );\n\t\thueGradient( _this2.__hue_field );\n\t\tCommon.extend( _this2.__input.style, {\n\t\t\toutline: 'none',\n\t\t\ttextAlign: 'center',\n\t\t\tcolor: '#fff',\n\t\t\tborder: 0,\n\t\t\tfontWeight: 'bold',\n\t\t\ttextShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n\t\t} );\n\t\tdom.bind( _this2.__saturation_field, 'mousedown', fieldDown );\n\t\tdom.bind( _this2.__saturation_field, 'touchstart', fieldDown );\n\t\tdom.bind( _this2.__field_knob, 'mousedown', fieldDown );\n\t\tdom.bind( _this2.__field_knob, 'touchstart', fieldDown );\n\t\tdom.bind( _this2.__hue_field, 'mousedown', fieldDownH );\n\t\tdom.bind( _this2.__hue_field, 'touchstart', fieldDownH );\n\t\tfunction fieldDown( e ) {\n\n\t\t\tsetSV( e );\n\t\t\tdom.bind( window, 'mousemove', setSV );\n\t\t\tdom.bind( window, 'touchmove', setSV );\n\t\t\tdom.bind( window, 'mouseup', fieldUpSV );\n\t\t\tdom.bind( window, 'touchend', fieldUpSV );\n\n\t\t}\n\t\tfunction fieldDownH( e ) {\n\n\t\t\tsetH( e );\n\t\t\tdom.bind( window, 'mousemove', setH );\n\t\t\tdom.bind( window, 'touchmove', setH );\n\t\t\tdom.bind( window, 'mouseup', fieldUpH );\n\t\t\tdom.bind( window, 'touchend', fieldUpH );\n\n\t\t}\n\t\tfunction fieldUpSV() {\n\n\t\t\tdom.unbind( window, 'mousemove', setSV );\n\t\t\tdom.unbind( window, 'touchmove', setSV );\n\t\t\tdom.unbind( window, 'mouseup', fieldUpSV );\n\t\t\tdom.unbind( window, 'touchend', fieldUpSV );\n\t\t\tonFinish();\n\n\t\t}\n\t\tfunction fieldUpH() {\n\n\t\t\tdom.unbind( window, 'mousemove', setH );\n\t\t\tdom.unbind( window, 'touchmove', setH );\n\t\t\tdom.unbind( window, 'mouseup', fieldUpH );\n\t\t\tdom.unbind( window, 'touchend', fieldUpH );\n\t\t\tonFinish();\n\n\t\t}\n\t\tfunction onBlur() {\n\n\t\t\tvar i = interpret( this.value );\n\t\t\tif ( i !== false ) {\n\n\t\t\t\t_this.__color.__state = i;\n\t\t\t\t_this.setValue( _this.__color.toOriginal() );\n\n\t\t\t} else {\n\n\t\t\t\tthis.value = _this.__color.toString();\n\n\t\t\t}\n\n\t\t}\n\t\tfunction onFinish() {\n\n\t\t\tif ( _this.__onFinishChange ) {\n\n\t\t\t\t_this.__onFinishChange.call( _this, _this.__color.toOriginal() );\n\n\t\t\t}\n\n\t\t}\n\t\t_this2.__saturation_field.appendChild( valueField );\n\t\t_this2.__selector.appendChild( _this2.__field_knob );\n\t\t_this2.__selector.appendChild( _this2.__saturation_field );\n\t\t_this2.__selector.appendChild( _this2.__hue_field );\n\t\t_this2.__hue_field.appendChild( _this2.__hue_knob );\n\t\t_this2.domElement.appendChild( _this2.__input );\n\t\t_this2.domElement.appendChild( _this2.__selector );\n\t\t_this2.updateDisplay();\n\t\tfunction setSV( e ) {\n\n\t\t\tif ( e.type.indexOf( 'touch' ) === - 1 ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t}\n\t\t\tvar fieldRect = _this.__saturation_field.getBoundingClientRect();\n\t\t\tvar _ref = e.touches && e.touches[ 0 ] || e,\n\t\t\t\tclientX = _ref.clientX,\n\t\t\t\tclientY = _ref.clientY;\n\t\t\tvar s = ( clientX - fieldRect.left ) / ( fieldRect.right - fieldRect.left );\n\t\t\tvar v = 1 - ( clientY - fieldRect.top ) / ( fieldRect.bottom - fieldRect.top );\n\t\t\tif ( v > 1 ) {\n\n\t\t\t\tv = 1;\n\n\t\t\t} else if ( v < 0 ) {\n\n\t\t\t\tv = 0;\n\n\t\t\t}\n\t\t\tif ( s > 1 ) {\n\n\t\t\t\ts = 1;\n\n\t\t\t} else if ( s < 0 ) {\n\n\t\t\t\ts = 0;\n\n\t\t\t}\n\t\t\t_this.__color.v = v;\n\t\t\t_this.__color.s = s;\n\t\t\t_this.setValue( _this.__color.toOriginal() );\n\t\t\treturn false;\n\n\t\t}\n\t\tfunction setH( e ) {\n\n\t\t\tif ( e.type.indexOf( 'touch' ) === - 1 ) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t}\n\t\t\tvar fieldRect = _this.__hue_field.getBoundingClientRect();\n\t\t\tvar _ref2 = e.touches && e.touches[ 0 ] || e,\n\t\t\t\tclientY = _ref2.clientY;\n\t\t\tvar h = 1 - ( clientY - fieldRect.top ) / ( fieldRect.bottom - fieldRect.top );\n\t\t\tif ( h > 1 ) {\n\n\t\t\t\th = 1;\n\n\t\t\t} else if ( h < 0 ) {\n\n\t\t\t\th = 0;\n\n\t\t\t}\n\t\t\t_this.__color.h = h * 360;\n\t\t\t_this.setValue( _this.__color.toOriginal() );\n\t\t\treturn false;\n\n\t\t}\n\t\treturn _this2;\n\n\t}\n\tcreateClass( ColorController, [ {\n\t\tkey: 'updateDisplay',\n\t\tvalue: function updateDisplay() {\n\n\t\t\tvar i = interpret( this.getValue() );\n\t\t\tif ( i !== false ) {\n\n\t\t\t\tvar mismatch = false;\n\t\t\t\tCommon.each( Color.COMPONENTS, function ( component ) {\n\n\t\t\t\t\tif ( ! Common.isUndefined( i[ component ] ) && ! Common.isUndefined( this.__color.__state[ component ] ) && i[ component ] !== this.__color.__state[ component ] ) {\n\n\t\t\t\t\t\tmismatch = true;\n\t\t\t\t\t\treturn {};\n\n\t\t\t\t\t}\n\n\t\t\t\t}, this );\n\t\t\t\tif ( mismatch ) {\n\n\t\t\t\t\tCommon.extend( this.__color.__state, i );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tCommon.extend( this.__temp.__state, this.__color.__state );\n\t\t\tthis.__temp.a = 1;\n\t\t\tvar flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n\t\t\tvar _flip = 255 - flip;\n\t\t\tCommon.extend( this.__field_knob.style, {\n\t\t\t\tmarginLeft: 100 * this.__color.s - 7 + 'px',\n\t\t\t\tmarginTop: 100 * ( 1 - this.__color.v ) - 7 + 'px',\n\t\t\t\tbackgroundColor: this.__temp.toHexString(),\n\t\t\t\tborder: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n\t\t\t} );\n\t\t\tthis.__hue_knob.style.marginTop = ( 1 - this.__color.h / 360 ) * 100 + 'px';\n\t\t\tthis.__temp.s = 1;\n\t\t\tthis.__temp.v = 1;\n\t\t\tlinearGradient( this.__saturation_field, 'left', '#fff', this.__temp.toHexString() );\n\t\t\tthis.__input.value = this.__color.toString();\n\t\t\tCommon.extend( this.__input.style, {\n\t\t\t\tbackgroundColor: this.__color.toHexString(),\n\t\t\t\tcolor: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n\t\t\t\ttextShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n\t\t\t} );\n\n\t\t}\n\t} ] );\n\treturn ColorController;\n\n}( Controller );\nvar vendors = [ '-moz-', '-o-', '-webkit-', '-ms-', '' ];\nfunction linearGradient( elem, x, a, b ) {\n\n\telem.style.background = '';\n\tCommon.each( vendors, function ( vendor ) {\n\n\t\telem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n\n\t} );\n\n}\nfunction hueGradient( elem ) {\n\n\telem.style.background = '';\n\telem.style.cssText += 'background: -moz-linear-gradient(top,  #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n\telem.style.cssText += 'background: -webkit-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n\telem.style.cssText += 'background: -o-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n\telem.style.cssText += 'background: -ms-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n\telem.style.cssText += 'background: linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n\n}\n\nvar css = {\n\tload: function load( url, indoc ) {\n\n\t\tvar doc = indoc || document;\n\t\tvar link = doc.createElement( 'link' );\n\t\tlink.type = 'text/css';\n\t\tlink.rel = 'stylesheet';\n\t\tlink.href = url;\n\t\tdoc.getElementsByTagName( 'head' )[ 0 ].appendChild( link );\n\n\t},\n\tinject: function inject( cssContent, indoc ) {\n\n\t\tvar doc = indoc || document;\n\t\tvar injected = document.createElement( 'style' );\n\t\tinjected.type = 'text/css';\n\t\tinjected.innerHTML = cssContent;\n\t\tvar head = doc.getElementsByTagName( 'head' )[ 0 ];\n\t\ttry {\n\n\t\t\thead.appendChild( injected );\n\n\t\t} catch ( e ) {\n\t\t}\n\n\t}\n};\n\nvar saveDialogContents = \"<div id=\\\"dg-save\\\" class=\\\"dg dialogue\\\">\\n\\n  Here's the new load parameter for your <code>GUI</code>'s constructor:\\n\\n  <textarea id=\\\"dg-new-constructor\\\"></textarea>\\n\\n  <div id=\\\"dg-save-locally\\\">\\n\\n    <input id=\\\"dg-local-storage\\\" type=\\\"checkbox\\\"/> Automatically save\\n    values to <code>localStorage</code> on exit.\\n\\n    <div id=\\\"dg-local-explain\\\">The values saved to <code>localStorage</code> will\\n      override those passed to <code>dat.GUI</code>'s constructor. This makes it\\n      easier to work incrementally, but <code>localStorage</code> is fragile,\\n      and your friends may not see the same values you do.\\n\\n    </div>\\n\\n  </div>\\n\\n</div>\";\n\nvar ControllerFactory = function ControllerFactory( object, property ) {\n\n\tvar initialValue = object[ property ];\n\tif ( Common.isArray( arguments[ 2 ] ) || Common.isObject( arguments[ 2 ] ) ) {\n\n\t\treturn new OptionController( object, property, arguments[ 2 ] );\n\n\t}\n\tif ( Common.isNumber( initialValue ) ) {\n\n\t\tif ( Common.isNumber( arguments[ 2 ] ) && Common.isNumber( arguments[ 3 ] ) ) {\n\n\t\t\tif ( Common.isNumber( arguments[ 4 ] ) ) {\n\n\t\t\t\treturn new NumberControllerSlider( object, property, arguments[ 2 ], arguments[ 3 ], arguments[ 4 ] );\n\n\t\t\t}\n\t\t\treturn new NumberControllerSlider( object, property, arguments[ 2 ], arguments[ 3 ] );\n\n\t\t}\n\t\tif ( Common.isNumber( arguments[ 4 ] ) ) {\n\n\t\t\treturn new NumberControllerBox( object, property, { min: arguments[ 2 ], max: arguments[ 3 ], step: arguments[ 4 ] } );\n\n\t\t}\n\t\treturn new NumberControllerBox( object, property, { min: arguments[ 2 ], max: arguments[ 3 ] } );\n\n\t}\n\tif ( Common.isString( initialValue ) ) {\n\n\t\treturn new StringController( object, property );\n\n\t}\n\tif ( Common.isFunction( initialValue ) ) {\n\n\t\treturn new FunctionController( object, property, '' );\n\n\t}\n\tif ( Common.isBoolean( initialValue ) ) {\n\n\t\treturn new BooleanController( object, property );\n\n\t}\n\treturn null;\n\n};\n\nfunction requestAnimationFrame( callback ) {\n\n\tsetTimeout( callback, 1000 / 60 );\n\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n\n\tfunction CenteredDiv() {\n\n\t\tclassCallCheck( this, CenteredDiv );\n\t\tthis.backgroundElement = document.createElement( 'div' );\n\t\tCommon.extend( this.backgroundElement.style, {\n\t\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\tdisplay: 'none',\n\t\t\tzIndex: '1000',\n\t\t\topacity: 0,\n\t\t\tWebkitTransition: 'opacity 0.2s linear',\n\t\t\ttransition: 'opacity 0.2s linear'\n\t\t} );\n\t\tdom.makeFullscreen( this.backgroundElement );\n\t\tthis.backgroundElement.style.position = 'fixed';\n\t\tthis.domElement = document.createElement( 'div' );\n\t\tCommon.extend( this.domElement.style, {\n\t\t\tposition: 'fixed',\n\t\t\tdisplay: 'none',\n\t\t\tzIndex: '1001',\n\t\t\topacity: 0,\n\t\t\tWebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n\t\t\ttransition: 'transform 0.2s ease-out, opacity 0.2s linear'\n\t\t} );\n\t\tdocument.body.appendChild( this.backgroundElement );\n\t\tdocument.body.appendChild( this.domElement );\n\t\tvar _this = this;\n\t\tdom.bind( this.backgroundElement, 'click', function () {\n\n\t\t\t_this.hide();\n\n\t\t} );\n\n\t}\n\tcreateClass( CenteredDiv, [ {\n\t\tkey: 'show',\n\t\tvalue: function show() {\n\n\t\t\tvar _this = this;\n\t\t\tthis.backgroundElement.style.display = 'block';\n\t\t\tthis.domElement.style.display = 'block';\n\t\t\tthis.domElement.style.opacity = 0;\n\t\t\tthis.domElement.style.webkitTransform = 'scale(1.1)';\n\t\t\tthis.layout();\n\t\t\tCommon.defer( function () {\n\n\t\t\t\t_this.backgroundElement.style.opacity = 1;\n\t\t\t\t_this.domElement.style.opacity = 1;\n\t\t\t\t_this.domElement.style.webkitTransform = 'scale(1)';\n\n\t\t\t} );\n\n\t\t}\n\t}, {\n\t\tkey: 'hide',\n\t\tvalue: function hide() {\n\n\t\t\tvar _this = this;\n\t\t\tvar hide = function hide() {\n\n\t\t\t\t_this.domElement.style.display = 'none';\n\t\t\t\t_this.backgroundElement.style.display = 'none';\n\t\t\t\tdom.unbind( _this.domElement, 'webkitTransitionEnd', hide );\n\t\t\t\tdom.unbind( _this.domElement, 'transitionend', hide );\n\t\t\t\tdom.unbind( _this.domElement, 'oTransitionEnd', hide );\n\n\t\t\t};\n\t\t\tdom.bind( this.domElement, 'webkitTransitionEnd', hide );\n\t\t\tdom.bind( this.domElement, 'transitionend', hide );\n\t\t\tdom.bind( this.domElement, 'oTransitionEnd', hide );\n\t\t\tthis.backgroundElement.style.opacity = 0;\n\t\t\tthis.domElement.style.opacity = 0;\n\t\t\tthis.domElement.style.webkitTransform = 'scale(1.1)';\n\n\t\t}\n\t}, {\n\t\tkey: 'layout',\n\t\tvalue: function layout() {\n\n\t\t\tthis.domElement.style.left = window.innerWidth / 2 - dom.getWidth( this.domElement ) / 2 + 'px';\n\t\t\tthis.domElement.style.top = window.innerHeight / 2 - dom.getHeight( this.domElement ) / 2 + 'px';\n\n\t\t}\n\t} ] );\n\treturn CenteredDiv;\n\n}();\n\nvar styleSheet = ___$insertStyle( \".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\" );\n\ncss.inject( styleSheet );\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n\n\ttry {\n\n\t\treturn !! window.localStorage;\n\n\t} catch ( e ) {\n\n\t\treturn false;\n\n\t}\n\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI( pars ) {\n\n\tvar _this = this;\n\tvar params = pars || {};\n\tthis.domElement = document.createElement( 'div' );\n\tthis.__ul = document.createElement( 'ul' );\n\tthis.domElement.appendChild( this.__ul );\n\tdom.addClass( this.domElement, CSS_NAMESPACE );\n\tthis.__folders = {};\n\tthis.__controllers = [];\n\tthis.__rememberedObjects = [];\n\tthis.__rememberedObjectIndecesToControllers = [];\n\tthis.__listening = [];\n\tparams = Common.defaults( params, {\n\t\tcloseOnTop: false,\n\t\tautoPlace: true,\n\t\twidth: GUI.DEFAULT_WIDTH\n\t} );\n\tparams = Common.defaults( params, {\n\t\tresizable: params.autoPlace,\n\t\thideable: params.autoPlace\n\t} );\n\tif ( ! Common.isUndefined( params.load ) ) {\n\n\t\tif ( params.preset ) {\n\n\t\t\tparams.load.preset = params.preset;\n\n\t\t}\n\n\t} else {\n\n\t\tparams.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n\n\t}\n\tif ( Common.isUndefined( params.parent ) && params.hideable ) {\n\n\t\thideableGuis.push( this );\n\n\t}\n\tparams.resizable = Common.isUndefined( params.parent ) && params.resizable;\n\tif ( params.autoPlace && Common.isUndefined( params.scrollable ) ) {\n\n\t\tparams.scrollable = true;\n\n\t}\n\tvar useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem( getLocalStorageHash( this, 'isLocal' ) ) === 'true';\n\tvar saveToLocalStorage = void 0;\n\tvar titleRow = void 0;\n\tObject.defineProperties( this,\n\t\t{\n\t\t\tparent: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn params.parent;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tscrollable: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn params.scrollable;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tautoPlace: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn params.autoPlace;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcloseOnTop: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn params.closeOnTop;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tpreset: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\tif ( _this.parent ) {\n\n\t\t\t\t\t\treturn _this.getRoot().preset;\n\n\t\t\t\t\t}\n\t\t\t\t\treturn params.load.preset;\n\n\t\t\t\t},\n\t\t\t\tset: function set$$1( v ) {\n\n\t\t\t\t\tif ( _this.parent ) {\n\n\t\t\t\t\t\t_this.getRoot().preset = v;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tparams.load.preset = v;\n\n\t\t\t\t\t}\n\t\t\t\t\tsetPresetSelectIndex( this );\n\t\t\t\t\t_this.revert();\n\n\t\t\t\t}\n\t\t\t},\n\t\t\twidth: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn params.width;\n\n\t\t\t\t},\n\t\t\t\tset: function set$$1( v ) {\n\n\t\t\t\t\tparams.width = v;\n\t\t\t\t\tsetWidth( _this, v );\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tname: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn params.name;\n\n\t\t\t\t},\n\t\t\t\tset: function set$$1( v ) {\n\n\t\t\t\t\tparams.name = v;\n\t\t\t\t\tif ( titleRow ) {\n\n\t\t\t\t\t\ttitleRow.innerHTML = params.name;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tclosed: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn params.closed;\n\n\t\t\t\t},\n\t\t\t\tset: function set$$1( v ) {\n\n\t\t\t\t\tparams.closed = v;\n\t\t\t\t\tif ( params.closed ) {\n\n\t\t\t\t\t\tdom.addClass( _this.__ul, GUI.CLASS_CLOSED );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdom.removeClass( _this.__ul, GUI.CLASS_CLOSED );\n\n\t\t\t\t\t}\n\t\t\t\t\tthis.onResize();\n\t\t\t\t\tif ( _this.__closeButton ) {\n\n\t\t\t\t\t\t_this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tload: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn params.load;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tuseLocalStorage: {\n\t\t\t\tget: function get$$1() {\n\n\t\t\t\t\treturn useLocalStorage;\n\n\t\t\t\t},\n\t\t\t\tset: function set$$1( bool ) {\n\n\t\t\t\t\tif ( SUPPORTS_LOCAL_STORAGE ) {\n\n\t\t\t\t\t\tuseLocalStorage = bool;\n\t\t\t\t\t\tif ( bool ) {\n\n\t\t\t\t\t\t\tdom.bind( window, 'unload', saveToLocalStorage );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdom.unbind( window, 'unload', saveToLocalStorage );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlocalStorage.setItem( getLocalStorageHash( _this, 'isLocal' ), bool );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\tif ( Common.isUndefined( params.parent ) ) {\n\n\t\tthis.closed = params.closed || false;\n\t\tdom.addClass( this.domElement, GUI.CLASS_MAIN );\n\t\tdom.makeSelectable( this.domElement, false );\n\t\tif ( SUPPORTS_LOCAL_STORAGE ) {\n\n\t\t\tif ( useLocalStorage ) {\n\n\t\t\t\t_this.useLocalStorage = true;\n\t\t\t\tvar savedGui = localStorage.getItem( getLocalStorageHash( this, 'gui' ) );\n\t\t\t\tif ( savedGui ) {\n\n\t\t\t\t\tparams.load = JSON.parse( savedGui );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t\tthis.__closeButton = document.createElement( 'div' );\n\t\tthis.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n\t\tdom.addClass( this.__closeButton, GUI.CLASS_CLOSE_BUTTON );\n\t\tif ( params.closeOnTop ) {\n\n\t\t\tdom.addClass( this.__closeButton, GUI.CLASS_CLOSE_TOP );\n\t\t\tthis.domElement.insertBefore( this.__closeButton, this.domElement.childNodes[ 0 ] );\n\n\t\t} else {\n\n\t\t\tdom.addClass( this.__closeButton, GUI.CLASS_CLOSE_BOTTOM );\n\t\t\tthis.domElement.appendChild( this.__closeButton );\n\n\t\t}\n\t\tdom.bind( this.__closeButton, 'click', function () {\n\n\t\t\t_this.closed = ! _this.closed;\n\n\t\t} );\n\n\t} else {\n\n\t\tif ( params.closed === undefined ) {\n\n\t\t\tparams.closed = true;\n\n\t\t}\n\t\tvar titleRowName = document.createTextNode( params.name );\n\t\tdom.addClass( titleRowName, 'controller-name' );\n\t\ttitleRow = addRow( _this, titleRowName );\n\t\tvar onClickTitle = function onClickTitle( e ) {\n\n\t\t\te.preventDefault();\n\t\t\t_this.closed = ! _this.closed;\n\t\t\treturn false;\n\n\t\t};\n\t\tdom.addClass( this.__ul, GUI.CLASS_CLOSED );\n\t\tdom.addClass( titleRow, 'title' );\n\t\tdom.bind( titleRow, 'click', onClickTitle );\n\t\tif ( ! params.closed ) {\n\n\t\t\tthis.closed = false;\n\n\t\t}\n\n\t}\n\tif ( params.autoPlace ) {\n\n\t\tif ( Common.isUndefined( params.parent ) ) {\n\n\t\t\tif ( autoPlaceVirgin ) {\n\n\t\t\t\tautoPlaceContainer = document.createElement( 'div' );\n\t\t\t\tdom.addClass( autoPlaceContainer, CSS_NAMESPACE );\n\t\t\t\tdom.addClass( autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER );\n\t\t\t\tdocument.body.appendChild( autoPlaceContainer );\n\t\t\t\tautoPlaceVirgin = false;\n\n\t\t\t}\n\t\t\tautoPlaceContainer.appendChild( this.domElement );\n\t\t\tdom.addClass( this.domElement, GUI.CLASS_AUTO_PLACE );\n\n\t\t}\n\t\tif ( ! this.parent ) {\n\n\t\t\tsetWidth( _this, params.width );\n\n\t\t}\n\n\t}\n\tthis.__resizeHandler = function () {\n\n\t\t_this.onResizeDebounced();\n\n\t};\n\tdom.bind( window, 'resize', this.__resizeHandler );\n\tdom.bind( this.__ul, 'webkitTransitionEnd', this.__resizeHandler );\n\tdom.bind( this.__ul, 'transitionend', this.__resizeHandler );\n\tdom.bind( this.__ul, 'oTransitionEnd', this.__resizeHandler );\n\tthis.onResize();\n\tif ( params.resizable ) {\n\n\t\taddResizeHandle( this );\n\n\t}\n\tsaveToLocalStorage = function saveToLocalStorage() {\n\n\t\tif ( SUPPORTS_LOCAL_STORAGE && localStorage.getItem( getLocalStorageHash( _this, 'isLocal' ) ) === 'true' ) {\n\n\t\t\tlocalStorage.setItem( getLocalStorageHash( _this, 'gui' ), JSON.stringify( _this.getSaveObject() ) );\n\n\t\t}\n\n\t};\n\tthis.saveToLocalStorageIfPossible = saveToLocalStorage;\n\tfunction resetWidth() {\n\n\t\tvar root = _this.getRoot();\n\t\troot.width += 1;\n\t\tCommon.defer( function () {\n\n\t\t\troot.width -= 1;\n\n\t\t} );\n\n\t}\n\tif ( ! params.parent ) {\n\n\t\tresetWidth();\n\n\t}\n\n};\nGUI.toggleHide = function () {\n\n\thide = ! hide;\n\tCommon.each( hideableGuis, function ( gui ) {\n\n\t\tgui.domElement.style.display = hide ? 'none' : '';\n\n\t} );\n\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function ( e ) {\n\n\tif ( document.activeElement.type !== 'text' && ( e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE ) ) {\n\n\t\tGUI.toggleHide();\n\n\t}\n\n};\ndom.bind( window, 'keydown', GUI._keydownHandler, false );\nCommon.extend( GUI.prototype,\n\t{\n\t\tadd: function add( object, property ) {\n\n\t\t\treturn _add( this, object, property, {\n\t\t\t\tfactoryArgs: Array.prototype.slice.call( arguments, 2 )\n\t\t\t} );\n\n\t\t},\n\t\taddColor: function addColor( object, property ) {\n\n\t\t\treturn _add( this, object, property, {\n\t\t\t\tcolor: true\n\t\t\t} );\n\n\t\t},\n\t\tremove: function remove( controller ) {\n\n\t\t\tthis.__ul.removeChild( controller.__li );\n\t\t\tthis.__controllers.splice( this.__controllers.indexOf( controller ), 1 );\n\t\t\tvar _this = this;\n\t\t\tCommon.defer( function () {\n\n\t\t\t\t_this.onResize();\n\n\t\t\t} );\n\n\t\t},\n\t\tdestroy: function destroy() {\n\n\t\t\tif ( this.parent ) {\n\n\t\t\t\tthrow new Error( 'Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.' );\n\n\t\t\t}\n\t\t\tif ( this.autoPlace ) {\n\n\t\t\t\tautoPlaceContainer.removeChild( this.domElement );\n\n\t\t\t}\n\t\t\tvar _this = this;\n\t\t\tCommon.each( this.__folders, function ( subfolder ) {\n\n\t\t\t\t_this.removeFolder( subfolder );\n\n\t\t\t} );\n\t\t\tdom.unbind( window, 'keydown', GUI._keydownHandler, false );\n\t\t\tremoveListeners( this );\n\n\t\t},\n\t\taddFolder: function addFolder( name ) {\n\n\t\t\tif ( this.__folders[ name ] !== undefined ) {\n\n\t\t\t\tthrow new Error( 'You already have a folder in this GUI by the' + ' name \"' + name + '\"' );\n\n\t\t\t}\n\t\t\tvar newGuiParams = { name: name, parent: this };\n\t\t\tnewGuiParams.autoPlace = this.autoPlace;\n\t\t\tif ( this.load &&\n    this.load.folders &&\n    this.load.folders[ name ] ) {\n\n\t\t\t\tnewGuiParams.closed = this.load.folders[ name ].closed;\n\t\t\t\tnewGuiParams.load = this.load.folders[ name ];\n\n\t\t\t}\n\t\t\tvar gui = new GUI( newGuiParams );\n\t\t\tthis.__folders[ name ] = gui;\n\t\t\tvar li = addRow( this, gui.domElement );\n\t\t\tdom.addClass( li, 'folder' );\n\t\t\treturn gui;\n\n\t\t},\n\t\tremoveFolder: function removeFolder( folder ) {\n\n\t\t\tthis.__ul.removeChild( folder.domElement.parentElement );\n\t\t\tdelete this.__folders[ folder.name ];\n\t\t\tif ( this.load &&\n    this.load.folders &&\n    this.load.folders[ folder.name ] ) {\n\n\t\t\t\tdelete this.load.folders[ folder.name ];\n\n\t\t\t}\n\t\t\tremoveListeners( folder );\n\t\t\tvar _this = this;\n\t\t\tCommon.each( folder.__folders, function ( subfolder ) {\n\n\t\t\t\tfolder.removeFolder( subfolder );\n\n\t\t\t} );\n\t\t\tCommon.defer( function () {\n\n\t\t\t\t_this.onResize();\n\n\t\t\t} );\n\n\t\t},\n\t\topen: function open() {\n\n\t\t\tthis.closed = false;\n\n\t\t},\n\t\tclose: function close() {\n\n\t\t\tthis.closed = true;\n\n\t\t},\n\t\thide: function hide() {\n\n\t\t\tthis.domElement.style.display = 'none';\n\n\t\t},\n\t\tshow: function show() {\n\n\t\t\tthis.domElement.style.display = '';\n\n\t\t},\n\t\tonResize: function onResize() {\n\n\t\t\tvar root = this.getRoot();\n\t\t\tif ( root.scrollable ) {\n\n\t\t\t\tvar top = dom.getOffset( root.__ul ).top;\n\t\t\t\tvar h = 0;\n\t\t\t\tCommon.each( root.__ul.childNodes, function ( node ) {\n\n\t\t\t\t\tif ( ! ( root.autoPlace && node === root.__save_row ) ) {\n\n\t\t\t\t\t\th += dom.getHeight( node );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tif ( window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h ) {\n\n\t\t\t\t\tdom.addClass( root.domElement, GUI.CLASS_TOO_TALL );\n\t\t\t\t\troot.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdom.removeClass( root.domElement, GUI.CLASS_TOO_TALL );\n\t\t\t\t\troot.__ul.style.height = 'auto';\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tif ( root.__resize_handle ) {\n\n\t\t\t\tCommon.defer( function () {\n\n\t\t\t\t\troot.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n\n\t\t\t\t} );\n\n\t\t\t}\n\t\t\tif ( root.__closeButton ) {\n\n\t\t\t\troot.__closeButton.style.width = root.width + 'px';\n\n\t\t\t}\n\n\t\t},\n\t\tonResizeDebounced: Common.debounce( function () {\n\n\t\t\tthis.onResize();\n\n\t\t}, 50 ),\n\t\tremember: function remember() {\n\n\t\t\tif ( Common.isUndefined( SAVE_DIALOGUE ) ) {\n\n\t\t\t\tSAVE_DIALOGUE = new CenteredDiv();\n\t\t\t\tSAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n\n\t\t\t}\n\t\t\tif ( this.parent ) {\n\n\t\t\t\tthrow new Error( 'You can only call remember on a top level GUI.' );\n\n\t\t\t}\n\t\t\tvar _this = this;\n\t\t\tCommon.each( Array.prototype.slice.call( arguments ), function ( object ) {\n\n\t\t\t\tif ( _this.__rememberedObjects.length === 0 ) {\n\n\t\t\t\t\taddSaveMenu( _this );\n\n\t\t\t\t}\n\t\t\t\tif ( _this.__rememberedObjects.indexOf( object ) === - 1 ) {\n\n\t\t\t\t\t_this.__rememberedObjects.push( object );\n\n\t\t\t\t}\n\n\t\t\t} );\n\t\t\tif ( this.autoPlace ) {\n\n\t\t\t\tsetWidth( this, this.width );\n\n\t\t\t}\n\n\t\t},\n\t\tgetRoot: function getRoot() {\n\n\t\t\tvar gui = this;\n\t\t\twhile ( gui.parent ) {\n\n\t\t\t\tgui = gui.parent;\n\n\t\t\t}\n\t\t\treturn gui;\n\n\t\t},\n\t\tgetSaveObject: function getSaveObject() {\n\n\t\t\tvar toReturn = this.load;\n\t\t\ttoReturn.closed = this.closed;\n\t\t\tif ( this.__rememberedObjects.length > 0 ) {\n\n\t\t\t\ttoReturn.preset = this.preset;\n\t\t\t\tif ( ! toReturn.remembered ) {\n\n\t\t\t\t\ttoReturn.remembered = {};\n\n\t\t\t\t}\n\t\t\t\ttoReturn.remembered[ this.preset ] = getCurrentPreset( this );\n\n\t\t\t}\n\t\t\ttoReturn.folders = {};\n\t\t\tCommon.each( this.__folders, function ( element, key ) {\n\n\t\t\t\ttoReturn.folders[ key ] = element.getSaveObject();\n\n\t\t\t} );\n\t\t\treturn toReturn;\n\n\t\t},\n\t\tsave: function save() {\n\n\t\t\tif ( ! this.load.remembered ) {\n\n\t\t\t\tthis.load.remembered = {};\n\n\t\t\t}\n\t\t\tthis.load.remembered[ this.preset ] = getCurrentPreset( this );\n\t\t\tmarkPresetModified( this, false );\n\t\t\tthis.saveToLocalStorageIfPossible();\n\n\t\t},\n\t\tsaveAs: function saveAs( presetName ) {\n\n\t\t\tif ( ! this.load.remembered ) {\n\n\t\t\t\tthis.load.remembered = {};\n\t\t\t\tthis.load.remembered[ DEFAULT_DEFAULT_PRESET_NAME ] = getCurrentPreset( this, true );\n\n\t\t\t}\n\t\t\tthis.load.remembered[ presetName ] = getCurrentPreset( this );\n\t\t\tthis.preset = presetName;\n\t\t\taddPresetOption( this, presetName, true );\n\t\t\tthis.saveToLocalStorageIfPossible();\n\n\t\t},\n\t\trevert: function revert( gui ) {\n\n\t\t\tCommon.each( this.__controllers, function ( controller ) {\n\n\t\t\t\tif ( ! this.getRoot().load.remembered ) {\n\n\t\t\t\t\tcontroller.setValue( controller.initialValue );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trecallSavedValue( gui || this.getRoot(), controller );\n\n\t\t\t\t}\n\t\t\t\tif ( controller.__onFinishChange ) {\n\n\t\t\t\t\tcontroller.__onFinishChange.call( controller, controller.getValue() );\n\n\t\t\t\t}\n\n\t\t\t}, this );\n\t\t\tCommon.each( this.__folders, function ( folder ) {\n\n\t\t\t\tfolder.revert( folder );\n\n\t\t\t} );\n\t\t\tif ( ! gui ) {\n\n\t\t\t\tmarkPresetModified( this.getRoot(), false );\n\n\t\t\t}\n\n\t\t},\n\t\tlisten: function listen( controller ) {\n\n\t\t\tvar init = this.__listening.length === 0;\n\t\t\tthis.__listening.push( controller );\n\t\t\tif ( init ) {\n\n\t\t\t\tupdateDisplays( this.__listening );\n\n\t\t\t}\n\n\t\t},\n\t\tupdateDisplay: function updateDisplay() {\n\n\t\t\tCommon.each( this.__controllers, function ( controller ) {\n\n\t\t\t\tcontroller.updateDisplay();\n\n\t\t\t} );\n\t\t\tCommon.each( this.__folders, function ( folder ) {\n\n\t\t\t\tfolder.updateDisplay();\n\n\t\t\t} );\n\n\t\t}\n\t} );\nfunction addRow( gui, newDom, liBefore ) {\n\n\tvar li = document.createElement( 'li' );\n\tif ( newDom ) {\n\n\t\tli.appendChild( newDom );\n\n\t}\n\tif ( liBefore ) {\n\n\t\tgui.__ul.insertBefore( li, liBefore );\n\n\t} else {\n\n\t\tgui.__ul.appendChild( li );\n\n\t}\n\tgui.onResize();\n\treturn li;\n\n}\nfunction removeListeners( gui ) {\n\n\tdom.unbind( window, 'resize', gui.__resizeHandler );\n\tif ( gui.saveToLocalStorageIfPossible ) {\n\n\t\tdom.unbind( window, 'unload', gui.saveToLocalStorageIfPossible );\n\n\t}\n\n}\nfunction markPresetModified( gui, modified ) {\n\n\tvar opt = gui.__preset_select[ gui.__preset_select.selectedIndex ];\n\tif ( modified ) {\n\n\t\topt.innerHTML = opt.value + '*';\n\n\t} else {\n\n\t\topt.innerHTML = opt.value;\n\n\t}\n\n}\nfunction augmentController( gui, li, controller ) {\n\n\tcontroller.__li = li;\n\tcontroller.__gui = gui;\n\tCommon.extend( controller, {\n\t\toptions: function options( _options ) {\n\n\t\t\tif ( arguments.length > 1 ) {\n\n\t\t\t\tvar nextSibling = controller.__li.nextElementSibling;\n\t\t\t\tcontroller.remove();\n\t\t\t\treturn _add( gui, controller.object, controller.property, {\n\t\t\t\t\tbefore: nextSibling,\n\t\t\t\t\tfactoryArgs: [ Common.toArray( arguments ) ]\n\t\t\t\t} );\n\n\t\t\t}\n\t\t\tif ( Common.isArray( _options ) || Common.isObject( _options ) ) {\n\n\t\t\t\tvar _nextSibling = controller.__li.nextElementSibling;\n\t\t\t\tcontroller.remove();\n\t\t\t\treturn _add( gui, controller.object, controller.property, {\n\t\t\t\t\tbefore: _nextSibling,\n\t\t\t\t\tfactoryArgs: [ _options ]\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t},\n\t\tname: function name( _name ) {\n\n\t\t\tcontroller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n\t\t\treturn controller;\n\n\t\t},\n\t\tlisten: function listen() {\n\n\t\t\tcontroller.__gui.listen( controller );\n\t\t\treturn controller;\n\n\t\t},\n\t\tremove: function remove() {\n\n\t\t\tcontroller.__gui.remove( controller );\n\t\t\treturn controller;\n\n\t\t}\n\t} );\n\tif ( controller instanceof NumberControllerSlider ) {\n\n\t\tvar box = new NumberControllerBox( controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step } );\n\t\tCommon.each( [ 'updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max' ], function ( method ) {\n\n\t\t\tvar pc = controller[ method ];\n\t\t\tvar pb = box[ method ];\n\t\t\tcontroller[ method ] = box[ method ] = function () {\n\n\t\t\t\tvar args = Array.prototype.slice.call( arguments );\n\t\t\t\tpb.apply( box, args );\n\t\t\t\treturn pc.apply( controller, args );\n\n\t\t\t};\n\n\t\t} );\n\t\tdom.addClass( li, 'has-slider' );\n\t\tcontroller.domElement.insertBefore( box.domElement, controller.domElement.firstElementChild );\n\n\t} else if ( controller instanceof NumberControllerBox ) {\n\n\t\tvar r = function r( returned ) {\n\n\t\t\tif ( Common.isNumber( controller.__min ) && Common.isNumber( controller.__max ) ) {\n\n\t\t\t\tvar oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n\t\t\t\tvar wasListening = controller.__gui.__listening.indexOf( controller ) > - 1;\n\t\t\t\tcontroller.remove();\n\t\t\t\tvar newController = _add( gui, controller.object, controller.property, {\n\t\t\t\t\tbefore: controller.__li.nextElementSibling,\n\t\t\t\t\tfactoryArgs: [ controller.__min, controller.__max, controller.__step ]\n\t\t\t\t} );\n\t\t\t\tnewController.name( oldName );\n\t\t\t\tif ( wasListening ) newController.listen();\n\t\t\t\treturn newController;\n\n\t\t\t}\n\t\t\treturn returned;\n\n\t\t};\n\t\tcontroller.min = Common.compose( r, controller.min );\n\t\tcontroller.max = Common.compose( r, controller.max );\n\n\t} else if ( controller instanceof BooleanController ) {\n\n\t\tdom.bind( li, 'click', function () {\n\n\t\t\tdom.fakeEvent( controller.__checkbox, 'click' );\n\n\t\t} );\n\t\tdom.bind( controller.__checkbox, 'click', function ( e ) {\n\n\t\t\te.stopPropagation();\n\n\t\t} );\n\n\t} else if ( controller instanceof FunctionController ) {\n\n\t\tdom.bind( li, 'click', function () {\n\n\t\t\tdom.fakeEvent( controller.__button, 'click' );\n\n\t\t} );\n\t\tdom.bind( li, 'mouseover', function () {\n\n\t\t\tdom.addClass( controller.__button, 'hover' );\n\n\t\t} );\n\t\tdom.bind( li, 'mouseout', function () {\n\n\t\t\tdom.removeClass( controller.__button, 'hover' );\n\n\t\t} );\n\n\t} else if ( controller instanceof ColorController ) {\n\n\t\tdom.addClass( li, 'color' );\n\t\tcontroller.updateDisplay = Common.compose( function ( val ) {\n\n\t\t\tli.style.borderLeftColor = controller.__color.toString();\n\t\t\treturn val;\n\n\t\t}, controller.updateDisplay );\n\t\tcontroller.updateDisplay();\n\n\t}\n\tcontroller.setValue = Common.compose( function ( val ) {\n\n\t\tif ( gui.getRoot().__preset_select && controller.isModified() ) {\n\n\t\t\tmarkPresetModified( gui.getRoot(), true );\n\n\t\t}\n\t\treturn val;\n\n\t}, controller.setValue );\n\n}\nfunction recallSavedValue( gui, controller ) {\n\n\tvar root = gui.getRoot();\n\tvar matchedIndex = root.__rememberedObjects.indexOf( controller.object );\n\tif ( matchedIndex !== - 1 ) {\n\n\t\tvar controllerMap = root.__rememberedObjectIndecesToControllers[ matchedIndex ];\n\t\tif ( controllerMap === undefined ) {\n\n\t\t\tcontrollerMap = {};\n\t\t\troot.__rememberedObjectIndecesToControllers[ matchedIndex ] = controllerMap;\n\n\t\t}\n\t\tcontrollerMap[ controller.property ] = controller;\n\t\tif ( root.load && root.load.remembered ) {\n\n\t\t\tvar presetMap = root.load.remembered;\n\t\t\tvar preset = void 0;\n\t\t\tif ( presetMap[ gui.preset ] ) {\n\n\t\t\t\tpreset = presetMap[ gui.preset ];\n\n\t\t\t} else if ( presetMap[ DEFAULT_DEFAULT_PRESET_NAME ] ) {\n\n\t\t\t\tpreset = presetMap[ DEFAULT_DEFAULT_PRESET_NAME ];\n\n\t\t\t} else {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\t\t\tif ( preset[ matchedIndex ] && preset[ matchedIndex ][ controller.property ] !== undefined ) {\n\n\t\t\t\tvar value = preset[ matchedIndex ][ controller.property ];\n\t\t\t\tcontroller.initialValue = value;\n\t\t\t\tcontroller.setValue( value );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\nfunction _add( gui, object, property, params ) {\n\n\tif ( object[ property ] === undefined ) {\n\n\t\tthrow new Error( 'Object \"' + object + '\" has no property \"' + property + '\"' );\n\n\t}\n\tvar controller = void 0;\n\tif ( params.color ) {\n\n\t\tcontroller = new ColorController( object, property );\n\n\t} else {\n\n\t\tvar factoryArgs = [ object, property ].concat( params.factoryArgs );\n\t\tcontroller = ControllerFactory.apply( gui, factoryArgs );\n\n\t}\n\tif ( params.before instanceof Controller ) {\n\n\t\tparams.before = params.before.__li;\n\n\t}\n\trecallSavedValue( gui, controller );\n\tdom.addClass( controller.domElement, 'c' );\n\tvar name = document.createElement( 'span' );\n\tdom.addClass( name, 'property-name' );\n\tname.innerHTML = controller.property;\n\tvar container = document.createElement( 'div' );\n\tcontainer.appendChild( name );\n\tcontainer.appendChild( controller.domElement );\n\tvar li = addRow( gui, container, params.before );\n\tdom.addClass( li, GUI.CLASS_CONTROLLER_ROW );\n\tif ( controller instanceof ColorController ) {\n\n\t\tdom.addClass( li, 'color' );\n\n\t} else {\n\n\t\tdom.addClass( li, _typeof( controller.getValue() ) );\n\n\t}\n\taugmentController( gui, li, controller );\n\tgui.__controllers.push( controller );\n\treturn controller;\n\n}\nfunction getLocalStorageHash( gui, key ) {\n\n\treturn document.location.href + '.' + key;\n\n}\nfunction addPresetOption( gui, name, setSelected ) {\n\n\tvar opt = document.createElement( 'option' );\n\topt.innerHTML = name;\n\topt.value = name;\n\tgui.__preset_select.appendChild( opt );\n\tif ( setSelected ) {\n\n\t\tgui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n\n\t}\n\n}\nfunction showHideExplain( gui, explain ) {\n\n\texplain.style.display = gui.useLocalStorage ? 'block' : 'none';\n\n}\nfunction addSaveMenu( gui ) {\n\n\tvar div = gui.__save_row = document.createElement( 'li' );\n\tdom.addClass( gui.domElement, 'has-save' );\n\tgui.__ul.insertBefore( div, gui.__ul.firstChild );\n\tdom.addClass( div, 'save-row' );\n\tvar gears = document.createElement( 'span' );\n\tgears.innerHTML = '&nbsp;';\n\tdom.addClass( gears, 'button gears' );\n\tvar button = document.createElement( 'span' );\n\tbutton.innerHTML = 'Save';\n\tdom.addClass( button, 'button' );\n\tdom.addClass( button, 'save' );\n\tvar button2 = document.createElement( 'span' );\n\tbutton2.innerHTML = 'New';\n\tdom.addClass( button2, 'button' );\n\tdom.addClass( button2, 'save-as' );\n\tvar button3 = document.createElement( 'span' );\n\tbutton3.innerHTML = 'Revert';\n\tdom.addClass( button3, 'button' );\n\tdom.addClass( button3, 'revert' );\n\tvar select = gui.__preset_select = document.createElement( 'select' );\n\tif ( gui.load && gui.load.remembered ) {\n\n\t\tCommon.each( gui.load.remembered, function ( value, key ) {\n\n\t\t\taddPresetOption( gui, key, key === gui.preset );\n\n\t\t} );\n\n\t} else {\n\n\t\taddPresetOption( gui, DEFAULT_DEFAULT_PRESET_NAME, false );\n\n\t}\n\tdom.bind( select, 'change', function () {\n\n\t\tfor ( var index = 0; index < gui.__preset_select.length; index ++ ) {\n\n\t\t\tgui.__preset_select[ index ].innerHTML = gui.__preset_select[ index ].value;\n\n\t\t}\n\t\tgui.preset = this.value;\n\n\t} );\n\tdiv.appendChild( select );\n\tdiv.appendChild( gears );\n\tdiv.appendChild( button );\n\tdiv.appendChild( button2 );\n\tdiv.appendChild( button3 );\n\tif ( SUPPORTS_LOCAL_STORAGE ) {\n\n\t\tvar explain = document.getElementById( 'dg-local-explain' );\n\t\tvar localStorageCheckBox = document.getElementById( 'dg-local-storage' );\n\t\tvar saveLocally = document.getElementById( 'dg-save-locally' );\n\t\tsaveLocally.style.display = 'block';\n\t\tif ( localStorage.getItem( getLocalStorageHash( gui, 'isLocal' ) ) === 'true' ) {\n\n\t\t\tlocalStorageCheckBox.setAttribute( 'checked', 'checked' );\n\n\t\t}\n\t\tshowHideExplain( gui, explain );\n\t\tdom.bind( localStorageCheckBox, 'change', function () {\n\n\t\t\tgui.useLocalStorage = ! gui.useLocalStorage;\n\t\t\tshowHideExplain( gui, explain );\n\n\t\t} );\n\n\t}\n\tvar newConstructorTextArea = document.getElementById( 'dg-new-constructor' );\n\tdom.bind( newConstructorTextArea, 'keydown', function ( e ) {\n\n\t\tif ( e.metaKey && ( e.which === 67 || e.keyCode === 67 ) ) {\n\n\t\t\tSAVE_DIALOGUE.hide();\n\n\t\t}\n\n\t} );\n\tdom.bind( gears, 'click', function () {\n\n\t\tnewConstructorTextArea.innerHTML = JSON.stringify( gui.getSaveObject(), undefined, 2 );\n\t\tSAVE_DIALOGUE.show();\n\t\tnewConstructorTextArea.focus();\n\t\tnewConstructorTextArea.select();\n\n\t} );\n\tdom.bind( button, 'click', function () {\n\n\t\tgui.save();\n\n\t} );\n\tdom.bind( button2, 'click', function () {\n\n\t\tvar presetName = prompt( 'Enter a new preset name.' );\n\t\tif ( presetName ) {\n\n\t\t\tgui.saveAs( presetName );\n\n\t\t}\n\n\t} );\n\tdom.bind( button3, 'click', function () {\n\n\t\tgui.revert();\n\n\t} );\n\n}\nfunction addResizeHandle( gui ) {\n\n\tvar pmouseX = void 0;\n\tgui.__resize_handle = document.createElement( 'div' );\n\tCommon.extend( gui.__resize_handle.style, {\n\t\twidth: '6px',\n\t\tmarginLeft: '-3px',\n\t\theight: '200px',\n\t\tcursor: 'ew-resize',\n\t\tposition: 'absolute'\n\t} );\n\tfunction drag( e ) {\n\n\t\te.preventDefault();\n\t\tgui.width += pmouseX - e.clientX;\n\t\tgui.onResize();\n\t\tpmouseX = e.clientX;\n\t\treturn false;\n\n\t}\n\tfunction dragStop() {\n\n\t\tdom.removeClass( gui.__closeButton, GUI.CLASS_DRAG );\n\t\tdom.unbind( window, 'mousemove', drag );\n\t\tdom.unbind( window, 'mouseup', dragStop );\n\n\t}\n\tfunction dragStart( e ) {\n\n\t\te.preventDefault();\n\t\tpmouseX = e.clientX;\n\t\tdom.addClass( gui.__closeButton, GUI.CLASS_DRAG );\n\t\tdom.bind( window, 'mousemove', drag );\n\t\tdom.bind( window, 'mouseup', dragStop );\n\t\treturn false;\n\n\t}\n\tdom.bind( gui.__resize_handle, 'mousedown', dragStart );\n\tdom.bind( gui.__closeButton, 'mousedown', dragStart );\n\tgui.domElement.insertBefore( gui.__resize_handle, gui.domElement.firstElementChild );\n\n}\nfunction setWidth( gui, w ) {\n\n\tgui.domElement.style.width = w + 'px';\n\tif ( gui.__save_row && gui.autoPlace ) {\n\n\t\tgui.__save_row.style.width = w + 'px';\n\n\t}\n\tif ( gui.__closeButton ) {\n\n\t\tgui.__closeButton.style.width = w + 'px';\n\n\t}\n\n}\nfunction getCurrentPreset( gui, useInitialValues ) {\n\n\tvar toReturn = {};\n\tCommon.each( gui.__rememberedObjects, function ( val, index ) {\n\n\t\tvar savedValues = {};\n\t\tvar controllerMap = gui.__rememberedObjectIndecesToControllers[ index ];\n\t\tCommon.each( controllerMap, function ( controller, property ) {\n\n\t\t\tsavedValues[ property ] = useInitialValues ? controller.initialValue : controller.getValue();\n\n\t\t} );\n\t\ttoReturn[ index ] = savedValues;\n\n\t} );\n\treturn toReturn;\n\n}\nfunction setPresetSelectIndex( gui ) {\n\n\tfor ( var index = 0; index < gui.__preset_select.length; index ++ ) {\n\n\t\tif ( gui.__preset_select[ index ].value === gui.preset ) {\n\n\t\t\tgui.__preset_select.selectedIndex = index;\n\n\t\t}\n\n\t}\n\n}\nfunction updateDisplays( controllerArray ) {\n\n\tif ( controllerArray.length !== 0 ) {\n\n\t\trequestAnimationFrame$1.call( window, function () {\n\n\t\t\tupdateDisplays( controllerArray );\n\n\t\t} );\n\n\t}\n\tCommon.each( controllerArray, function ( c ) {\n\n\t\tc.updateDisplay();\n\n\t} );\n\n}\n\nvar color = {\n\tColor: Color,\n\tmath: ColorMath,\n\tinterpret: interpret\n};\nvar controllers = {\n\tController: Controller,\n\tBooleanController: BooleanController,\n\tOptionController: OptionController,\n\tStringController: StringController,\n\tNumberController: NumberController,\n\tNumberControllerBox: NumberControllerBox,\n\tNumberControllerSlider: NumberControllerSlider,\n\tFunctionController: FunctionController,\n\tColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n\tcolor: color,\n\tcontrollers: controllers,\n\tdom: dom$1,\n\tgui: gui,\n\tGUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n"
  },
  {
    "path": "libs/three.js/libs/meshopt_decoder.module.js",
    "content": "// This file is part of meshoptimizer library and is distributed under the terms of MIT License.\n// Copyright (C) 2016-2020, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)\nvar MeshoptDecoder = (function() {\n\t\"use strict\";\n\n\t// Built with clang version 11.0.0 (https://github.com/llvm/llvm-project.git 0160ad802e899c2922bc9b29564080c22eb0908c)\n\t// Built from meshoptimizer 0.14\n\tvar wasm_base = \"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\";\n\tvar wasm_simd = \"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\";\n\n\t// Uses bulk-memory and simd extensions\n\tvar detector = new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]);\n\n\t// Used to unpack wasm\n\tvar wasmpack = new Uint8Array([32,0,65,253,3,1,2,34,4,106,6,5,11,8,7,20,13,33,12,16,128,9,116,64,19,113,127,15,10,21,22,14,255,66,24,54,136,107,18,23,192,26,114,118,132,17,77,101,130,144,27,87,131,44,45,74,156,154,70,167]);\n\n\tif (typeof WebAssembly !== 'object') {\n\t\t// This module requires WebAssembly to function\n\t\treturn {\n\t\t\tsupported: false,\n\t\t};\n\t}\n\n\tvar wasm = wasm_base;\n\n\tif (WebAssembly.validate(detector)) {\n\t\twasm = wasm_simd;\n\t\tconsole.log(\"Warning: meshopt_decoder is using experimental SIMD support\");\n\t}\n\n\tvar instance;\n\n\tvar promise =\n\t\tWebAssembly.instantiate(unpack(wasm), {})\n\t\t.then(function(result) {\n\t\t\tinstance = result.instance;\n\t\t\tinstance.exports.__wasm_call_ctors();\n\t\t});\n\n\tfunction unpack(data) {\n\t\tvar result = new Uint8Array(data.length);\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tvar ch = data.charCodeAt(i);\n\t\t\tresult[i] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62;\n\t\t}\n\t\tvar write = 0;\n\t\tfor (var i = 0; i < data.length; ++i) {\n\t\t\tresult[write++] = (result[i] < 60) ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n\t\t}\n\t\treturn result.buffer.slice(0, write);\n\t}\n\n\tfunction decode(fun, target, count, size, source, filter) {\n\t\tvar sbrk = instance.exports.sbrk;\n\t\tvar count4 = (count + 3) & ~3; // pad for SIMD filter\n\t\tvar tp = sbrk(count4 * size);\n\t\tvar sp = sbrk(source.length);\n\t\tvar heap = new Uint8Array(instance.exports.memory.buffer);\n\t\theap.set(source, sp);\n\t\tvar res = fun(tp, count, size, sp, source.length);\n\t\tif (res == 0 && filter) {\n\t\t\tfilter(tp, count4, size);\n\t\t}\n\t\ttarget.set(heap.subarray(tp, tp + count * size));\n\t\tsbrk(tp - sbrk(0));\n\t\tif (res != 0) {\n\t\t\tthrow new Error(\"Malformed buffer data: \" + res);\n\t\t}\n\t};\n\n\tvar filters = {\n\t\t// legacy index-based enums for glTF\n\t\t0: \"\",\n\t\t1: \"meshopt_decodeFilterOct\",\n\t\t2: \"meshopt_decodeFilterQuat\",\n\t\t3: \"meshopt_decodeFilterExp\",\n\t\t// string-based enums for glTF\n\t\tNONE: \"\",\n\t\tOCTAHEDRAL: \"meshopt_decodeFilterOct\",\n\t\tQUATERNION: \"meshopt_decodeFilterQuat\",\n\t\tEXPONENTIAL: \"meshopt_decodeFilterExp\",\n\t};\n\n\tvar decoders = {\n\t\t// legacy index-based enums for glTF\n\t\t0: \"meshopt_decodeVertexBuffer\",\n\t\t1: \"meshopt_decodeIndexBuffer\",\n\t\t2: \"meshopt_decodeIndexSequence\",\n\t\t// string-based enums for glTF\n\t\tATTRIBUTES: \"meshopt_decodeVertexBuffer\",\n\t\tTRIANGLES: \"meshopt_decodeIndexBuffer\",\n\t\tINDICES: \"meshopt_decodeIndexSequence\",\n\t};\n\n\treturn {\n\t\tready: promise,\n\t\tsupported: true,\n\t\tdecodeVertexBuffer: function(target, count, size, source, filter) {\n\t\t\tdecode(instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[filters[filter]]);\n\t\t},\n\t\tdecodeIndexBuffer: function(target, count, size, source) {\n\t\t\tdecode(instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);\n\t\t},\n\t\tdecodeIndexSequence: function(target, count, size, source) {\n\t\t\tdecode(instance.exports.meshopt_decodeIndexSequence, target, count, size, source);\n\t\t},\n\t\tdecodeGltfBuffer: function(target, count, size, source, mode, filter) {\n\t\t\tdecode(instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);\n\t\t}\n\t};\n})();\n\nexport { MeshoptDecoder };\n"
  },
  {
    "path": "libs/three.js/libs/mmdparser.module.js",
    "content": "/**\n * @author Takahiro / https://github.com/takahirox\n *\n * Simple CharsetEncoder.\n */\n\nfunction CharsetEncoder() {\n}\n\n/*\n * Converts from Shift_JIS Uint8Array data to Unicode strings.\n */\nCharsetEncoder.prototype.s2u = function ( uint8Array ) {\n\n\tvar t = this.s2uTable;\n\tvar str = '';\n\tvar p = 0;\n\n\twhile ( p < uint8Array.length ) {\n\n\t\tvar key = uint8Array[ p ++ ];\n\n\t\tif ( ! ( ( key >= 0x00 && key <= 0x7e ) ||\n          ( key >= 0xa1 && key <= 0xdf ) ) &&\n       p < uint8Array.length ) {\n\n\t\t\tkey = ( key << 8 ) | uint8Array[ p ++ ];\n\n\t\t}\n\n\t\tif ( t[ key ] === undefined ) {\n\n\t\t\tthrow 'unknown char code ' + key + '.';\n\n\t\t}\n\n\t\tstr += String.fromCharCode( t[ key ] );\n\n\t}\n\n\treturn str;\n\n};\n\nCharsetEncoder.prototype.s2uTable = {\n\t0: 0,\n\t1: 1,\n\t2: 2,\n\t3: 3,\n\t4: 4,\n\t5: 5,\n\t6: 6,\n\t7: 7,\n\t8: 8,\n\t9: 9,\n\t10: 10,\n\t11: 11,\n\t12: 12,\n\t13: 13,\n\t14: 14,\n\t15: 15,\n\t16: 16,\n\t17: 17,\n\t18: 18,\n\t19: 19,\n\t20: 20,\n\t21: 21,\n\t22: 22,\n\t23: 23,\n\t24: 24,\n\t25: 25,\n\t26: 26,\n\t27: 27,\n\t28: 28,\n\t29: 29,\n\t30: 30,\n\t31: 31,\n\t32: 32,\n\t33: 33,\n\t34: 34,\n\t35: 35,\n\t36: 36,\n\t37: 37,\n\t38: 38,\n\t39: 39,\n\t40: 40,\n\t41: 41,\n\t42: 42,\n\t43: 43,\n\t44: 44,\n\t45: 45,\n\t46: 46,\n\t47: 47,\n\t48: 48,\n\t49: 49,\n\t50: 50,\n\t51: 51,\n\t52: 52,\n\t53: 53,\n\t54: 54,\n\t55: 55,\n\t56: 56,\n\t57: 57,\n\t58: 58,\n\t59: 59,\n\t60: 60,\n\t61: 61,\n\t62: 62,\n\t63: 63,\n\t64: 64,\n\t65: 65,\n\t66: 66,\n\t67: 67,\n\t68: 68,\n\t69: 69,\n\t70: 70,\n\t71: 71,\n\t72: 72,\n\t73: 73,\n\t74: 74,\n\t75: 75,\n\t76: 76,\n\t77: 77,\n\t78: 78,\n\t79: 79,\n\t80: 80,\n\t81: 81,\n\t82: 82,\n\t83: 83,\n\t84: 84,\n\t85: 85,\n\t86: 86,\n\t87: 87,\n\t88: 88,\n\t89: 89,\n\t90: 90,\n\t91: 91,\n\t92: 92,\n\t93: 93,\n\t94: 94,\n\t95: 95,\n\t96: 96,\n\t97: 97,\n\t98: 98,\n\t99: 99,\n\t100: 100,\n\t101: 101,\n\t102: 102,\n\t103: 103,\n\t104: 104,\n\t105: 105,\n\t106: 106,\n\t107: 107,\n\t108: 108,\n\t109: 109,\n\t110: 110,\n\t111: 111,\n\t112: 112,\n\t113: 113,\n\t114: 114,\n\t115: 115,\n\t116: 116,\n\t117: 117,\n\t118: 118,\n\t119: 119,\n\t120: 120,\n\t121: 121,\n\t122: 122,\n\t123: 123,\n\t124: 124,\n\t125: 125,\n\t126: 126,\n\t161: 65377,\n\t162: 65378,\n\t163: 65379,\n\t164: 65380,\n\t165: 65381,\n\t166: 65382,\n\t167: 65383,\n\t168: 65384,\n\t169: 65385,\n\t170: 65386,\n\t171: 65387,\n\t172: 65388,\n\t173: 65389,\n\t174: 65390,\n\t175: 65391,\n\t176: 65392,\n\t177: 65393,\n\t178: 65394,\n\t179: 65395,\n\t180: 65396,\n\t181: 65397,\n\t182: 65398,\n\t183: 65399,\n\t184: 65400,\n\t185: 65401,\n\t186: 65402,\n\t187: 65403,\n\t188: 65404,\n\t189: 65405,\n\t190: 65406,\n\t191: 65407,\n\t192: 65408,\n\t193: 65409,\n\t194: 65410,\n\t195: 65411,\n\t196: 65412,\n\t197: 65413,\n\t198: 65414,\n\t199: 65415,\n\t200: 65416,\n\t201: 65417,\n\t202: 65418,\n\t203: 65419,\n\t204: 65420,\n\t205: 65421,\n\t206: 65422,\n\t207: 65423,\n\t208: 65424,\n\t209: 65425,\n\t210: 65426,\n\t211: 65427,\n\t212: 65428,\n\t213: 65429,\n\t214: 65430,\n\t215: 65431,\n\t216: 65432,\n\t217: 65433,\n\t218: 65434,\n\t219: 65435,\n\t220: 65436,\n\t221: 65437,\n\t222: 65438,\n\t223: 65439,\n\t33088: 12288,\n\t33089: 12289,\n\t33090: 12290,\n\t33091: 65292,\n\t33092: 65294,\n\t33093: 12539,\n\t33094: 65306,\n\t33095: 65307,\n\t33096: 65311,\n\t33097: 65281,\n\t33098: 12443,\n\t33099: 12444,\n\t33100: 180,\n\t33101: 65344,\n\t33102: 168,\n\t33103: 65342,\n\t33104: 65507,\n\t33105: 65343,\n\t33106: 12541,\n\t33107: 12542,\n\t33108: 12445,\n\t33109: 12446,\n\t33110: 12291,\n\t33111: 20189,\n\t33112: 12293,\n\t33113: 12294,\n\t33114: 12295,\n\t33115: 12540,\n\t33116: 8213,\n\t33117: 8208,\n\t33118: 65295,\n\t33119: 65340,\n\t33120: 65374,\n\t33121: 8741,\n\t33122: 65372,\n\t33123: 8230,\n\t33124: 8229,\n\t33125: 8216,\n\t33126: 8217,\n\t33127: 8220,\n\t33128: 8221,\n\t33129: 65288,\n\t33130: 65289,\n\t33131: 12308,\n\t33132: 12309,\n\t33133: 65339,\n\t33134: 65341,\n\t33135: 65371,\n\t33136: 65373,\n\t33137: 12296,\n\t33138: 12297,\n\t33139: 12298,\n\t33140: 12299,\n\t33141: 12300,\n\t33142: 12301,\n\t33143: 12302,\n\t33144: 12303,\n\t33145: 12304,\n\t33146: 12305,\n\t33147: 65291,\n\t33148: 65293,\n\t33149: 177,\n\t33150: 215,\n\t33152: 247,\n\t33153: 65309,\n\t33154: 8800,\n\t33155: 65308,\n\t33156: 65310,\n\t33157: 8806,\n\t33158: 8807,\n\t33159: 8734,\n\t33160: 8756,\n\t33161: 9794,\n\t33162: 9792,\n\t33163: 176,\n\t33164: 8242,\n\t33165: 8243,\n\t33166: 8451,\n\t33167: 65509,\n\t33168: 65284,\n\t33169: 65504,\n\t33170: 65505,\n\t33171: 65285,\n\t33172: 65283,\n\t33173: 65286,\n\t33174: 65290,\n\t33175: 65312,\n\t33176: 167,\n\t33177: 9734,\n\t33178: 9733,\n\t33179: 9675,\n\t33180: 9679,\n\t33181: 9678,\n\t33182: 9671,\n\t33183: 9670,\n\t33184: 9633,\n\t33185: 9632,\n\t33186: 9651,\n\t33187: 9650,\n\t33188: 9661,\n\t33189: 9660,\n\t33190: 8251,\n\t33191: 12306,\n\t33192: 8594,\n\t33193: 8592,\n\t33194: 8593,\n\t33195: 8595,\n\t33196: 12307,\n\t33208: 8712,\n\t33209: 8715,\n\t33210: 8838,\n\t33211: 8839,\n\t33212: 8834,\n\t33213: 8835,\n\t33214: 8746,\n\t33215: 8745,\n\t33224: 8743,\n\t33225: 8744,\n\t33226: 65506,\n\t33227: 8658,\n\t33228: 8660,\n\t33229: 8704,\n\t33230: 8707,\n\t33242: 8736,\n\t33243: 8869,\n\t33244: 8978,\n\t33245: 8706,\n\t33246: 8711,\n\t33247: 8801,\n\t33248: 8786,\n\t33249: 8810,\n\t33250: 8811,\n\t33251: 8730,\n\t33252: 8765,\n\t33253: 8733,\n\t33254: 8757,\n\t33255: 8747,\n\t33256: 8748,\n\t33264: 8491,\n\t33265: 8240,\n\t33266: 9839,\n\t33267: 9837,\n\t33268: 9834,\n\t33269: 8224,\n\t33270: 8225,\n\t33271: 182,\n\t33276: 9711,\n\t33359: 65296,\n\t33360: 65297,\n\t33361: 65298,\n\t33362: 65299,\n\t33363: 65300,\n\t33364: 65301,\n\t33365: 65302,\n\t33366: 65303,\n\t33367: 65304,\n\t33368: 65305,\n\t33376: 65313,\n\t33377: 65314,\n\t33378: 65315,\n\t33379: 65316,\n\t33380: 65317,\n\t33381: 65318,\n\t33382: 65319,\n\t33383: 65320,\n\t33384: 65321,\n\t33385: 65322,\n\t33386: 65323,\n\t33387: 65324,\n\t33388: 65325,\n\t33389: 65326,\n\t33390: 65327,\n\t33391: 65328,\n\t33392: 65329,\n\t33393: 65330,\n\t33394: 65331,\n\t33395: 65332,\n\t33396: 65333,\n\t33397: 65334,\n\t33398: 65335,\n\t33399: 65336,\n\t33400: 65337,\n\t33401: 65338,\n\t33409: 65345,\n\t33410: 65346,\n\t33411: 65347,\n\t33412: 65348,\n\t33413: 65349,\n\t33414: 65350,\n\t33415: 65351,\n\t33416: 65352,\n\t33417: 65353,\n\t33418: 65354,\n\t33419: 65355,\n\t33420: 65356,\n\t33421: 65357,\n\t33422: 65358,\n\t33423: 65359,\n\t33424: 65360,\n\t33425: 65361,\n\t33426: 65362,\n\t33427: 65363,\n\t33428: 65364,\n\t33429: 65365,\n\t33430: 65366,\n\t33431: 65367,\n\t33432: 65368,\n\t33433: 65369,\n\t33434: 65370,\n\t33439: 12353,\n\t33440: 12354,\n\t33441: 12355,\n\t33442: 12356,\n\t33443: 12357,\n\t33444: 12358,\n\t33445: 12359,\n\t33446: 12360,\n\t33447: 12361,\n\t33448: 12362,\n\t33449: 12363,\n\t33450: 12364,\n\t33451: 12365,\n\t33452: 12366,\n\t33453: 12367,\n\t33454: 12368,\n\t33455: 12369,\n\t33456: 12370,\n\t33457: 12371,\n\t33458: 12372,\n\t33459: 12373,\n\t33460: 12374,\n\t33461: 12375,\n\t33462: 12376,\n\t33463: 12377,\n\t33464: 12378,\n\t33465: 12379,\n\t33466: 12380,\n\t33467: 12381,\n\t33468: 12382,\n\t33469: 12383,\n\t33470: 12384,\n\t33471: 12385,\n\t33472: 12386,\n\t33473: 12387,\n\t33474: 12388,\n\t33475: 12389,\n\t33476: 12390,\n\t33477: 12391,\n\t33478: 12392,\n\t33479: 12393,\n\t33480: 12394,\n\t33481: 12395,\n\t33482: 12396,\n\t33483: 12397,\n\t33484: 12398,\n\t33485: 12399,\n\t33486: 12400,\n\t33487: 12401,\n\t33488: 12402,\n\t33489: 12403,\n\t33490: 12404,\n\t33491: 12405,\n\t33492: 12406,\n\t33493: 12407,\n\t33494: 12408,\n\t33495: 12409,\n\t33496: 12410,\n\t33497: 12411,\n\t33498: 12412,\n\t33499: 12413,\n\t33500: 12414,\n\t33501: 12415,\n\t33502: 12416,\n\t33503: 12417,\n\t33504: 12418,\n\t33505: 12419,\n\t33506: 12420,\n\t33507: 12421,\n\t33508: 12422,\n\t33509: 12423,\n\t33510: 12424,\n\t33511: 12425,\n\t33512: 12426,\n\t33513: 12427,\n\t33514: 12428,\n\t33515: 12429,\n\t33516: 12430,\n\t33517: 12431,\n\t33518: 12432,\n\t33519: 12433,\n\t33520: 12434,\n\t33521: 12435,\n\t33600: 12449,\n\t33601: 12450,\n\t33602: 12451,\n\t33603: 12452,\n\t33604: 12453,\n\t33605: 12454,\n\t33606: 12455,\n\t33607: 12456,\n\t33608: 12457,\n\t33609: 12458,\n\t33610: 12459,\n\t33611: 12460,\n\t33612: 12461,\n\t33613: 12462,\n\t33614: 12463,\n\t33615: 12464,\n\t33616: 12465,\n\t33617: 12466,\n\t33618: 12467,\n\t33619: 12468,\n\t33620: 12469,\n\t33621: 12470,\n\t33622: 12471,\n\t33623: 12472,\n\t33624: 12473,\n\t33625: 12474,\n\t33626: 12475,\n\t33627: 12476,\n\t33628: 12477,\n\t33629: 12478,\n\t33630: 12479,\n\t33631: 12480,\n\t33632: 12481,\n\t33633: 12482,\n\t33634: 12483,\n\t33635: 12484,\n\t33636: 12485,\n\t33637: 12486,\n\t33638: 12487,\n\t33639: 12488,\n\t33640: 12489,\n\t33641: 12490,\n\t33642: 12491,\n\t33643: 12492,\n\t33644: 12493,\n\t33645: 12494,\n\t33646: 12495,\n\t33647: 12496,\n\t33648: 12497,\n\t33649: 12498,\n\t33650: 12499,\n\t33651: 12500,\n\t33652: 12501,\n\t33653: 12502,\n\t33654: 12503,\n\t33655: 12504,\n\t33656: 12505,\n\t33657: 12506,\n\t33658: 12507,\n\t33659: 12508,\n\t33660: 12509,\n\t33661: 12510,\n\t33662: 12511,\n\t33664: 12512,\n\t33665: 12513,\n\t33666: 12514,\n\t33667: 12515,\n\t33668: 12516,\n\t33669: 12517,\n\t33670: 12518,\n\t33671: 12519,\n\t33672: 12520,\n\t33673: 12521,\n\t33674: 12522,\n\t33675: 12523,\n\t33676: 12524,\n\t33677: 12525,\n\t33678: 12526,\n\t33679: 12527,\n\t33680: 12528,\n\t33681: 12529,\n\t33682: 12530,\n\t33683: 12531,\n\t33684: 12532,\n\t33685: 12533,\n\t33686: 12534,\n\t33695: 913,\n\t33696: 914,\n\t33697: 915,\n\t33698: 916,\n\t33699: 917,\n\t33700: 918,\n\t33701: 919,\n\t33702: 920,\n\t33703: 921,\n\t33704: 922,\n\t33705: 923,\n\t33706: 924,\n\t33707: 925,\n\t33708: 926,\n\t33709: 927,\n\t33710: 928,\n\t33711: 929,\n\t33712: 931,\n\t33713: 932,\n\t33714: 933,\n\t33715: 934,\n\t33716: 935,\n\t33717: 936,\n\t33718: 937,\n\t33727: 945,\n\t33728: 946,\n\t33729: 947,\n\t33730: 948,\n\t33731: 949,\n\t33732: 950,\n\t33733: 951,\n\t33734: 952,\n\t33735: 953,\n\t33736: 954,\n\t33737: 955,\n\t33738: 956,\n\t33739: 957,\n\t33740: 958,\n\t33741: 959,\n\t33742: 960,\n\t33743: 961,\n\t33744: 963,\n\t33745: 964,\n\t33746: 965,\n\t33747: 966,\n\t33748: 967,\n\t33749: 968,\n\t33750: 969,\n\t33856: 1040,\n\t33857: 1041,\n\t33858: 1042,\n\t33859: 1043,\n\t33860: 1044,\n\t33861: 1045,\n\t33862: 1025,\n\t33863: 1046,\n\t33864: 1047,\n\t33865: 1048,\n\t33866: 1049,\n\t33867: 1050,\n\t33868: 1051,\n\t33869: 1052,\n\t33870: 1053,\n\t33871: 1054,\n\t33872: 1055,\n\t33873: 1056,\n\t33874: 1057,\n\t33875: 1058,\n\t33876: 1059,\n\t33877: 1060,\n\t33878: 1061,\n\t33879: 1062,\n\t33880: 1063,\n\t33881: 1064,\n\t33882: 1065,\n\t33883: 1066,\n\t33884: 1067,\n\t33885: 1068,\n\t33886: 1069,\n\t33887: 1070,\n\t33888: 1071,\n\t33904: 1072,\n\t33905: 1073,\n\t33906: 1074,\n\t33907: 1075,\n\t33908: 1076,\n\t33909: 1077,\n\t33910: 1105,\n\t33911: 1078,\n\t33912: 1079,\n\t33913: 1080,\n\t33914: 1081,\n\t33915: 1082,\n\t33916: 1083,\n\t33917: 1084,\n\t33918: 1085,\n\t33920: 1086,\n\t33921: 1087,\n\t33922: 1088,\n\t33923: 1089,\n\t33924: 1090,\n\t33925: 1091,\n\t33926: 1092,\n\t33927: 1093,\n\t33928: 1094,\n\t33929: 1095,\n\t33930: 1096,\n\t33931: 1097,\n\t33932: 1098,\n\t33933: 1099,\n\t33934: 1100,\n\t33935: 1101,\n\t33936: 1102,\n\t33937: 1103,\n\t33951: 9472,\n\t33952: 9474,\n\t33953: 9484,\n\t33954: 9488,\n\t33955: 9496,\n\t33956: 9492,\n\t33957: 9500,\n\t33958: 9516,\n\t33959: 9508,\n\t33960: 9524,\n\t33961: 9532,\n\t33962: 9473,\n\t33963: 9475,\n\t33964: 9487,\n\t33965: 9491,\n\t33966: 9499,\n\t33967: 9495,\n\t33968: 9507,\n\t33969: 9523,\n\t33970: 9515,\n\t33971: 9531,\n\t33972: 9547,\n\t33973: 9504,\n\t33974: 9519,\n\t33975: 9512,\n\t33976: 9527,\n\t33977: 9535,\n\t33978: 9501,\n\t33979: 9520,\n\t33980: 9509,\n\t33981: 9528,\n\t33982: 9538,\n\t34624: 9312,\n\t34625: 9313,\n\t34626: 9314,\n\t34627: 9315,\n\t34628: 9316,\n\t34629: 9317,\n\t34630: 9318,\n\t34631: 9319,\n\t34632: 9320,\n\t34633: 9321,\n\t34634: 9322,\n\t34635: 9323,\n\t34636: 9324,\n\t34637: 9325,\n\t34638: 9326,\n\t34639: 9327,\n\t34640: 9328,\n\t34641: 9329,\n\t34642: 9330,\n\t34643: 9331,\n\t34644: 8544,\n\t34645: 8545,\n\t34646: 8546,\n\t34647: 8547,\n\t34648: 8548,\n\t34649: 8549,\n\t34650: 8550,\n\t34651: 8551,\n\t34652: 8552,\n\t34653: 8553,\n\t34655: 13129,\n\t34656: 13076,\n\t34657: 13090,\n\t34658: 13133,\n\t34659: 13080,\n\t34660: 13095,\n\t34661: 13059,\n\t34662: 13110,\n\t34663: 13137,\n\t34664: 13143,\n\t34665: 13069,\n\t34666: 13094,\n\t34667: 13091,\n\t34668: 13099,\n\t34669: 13130,\n\t34670: 13115,\n\t34671: 13212,\n\t34672: 13213,\n\t34673: 13214,\n\t34674: 13198,\n\t34675: 13199,\n\t34676: 13252,\n\t34677: 13217,\n\t34686: 13179,\n\t34688: 12317,\n\t34689: 12319,\n\t34690: 8470,\n\t34691: 13261,\n\t34692: 8481,\n\t34693: 12964,\n\t34694: 12965,\n\t34695: 12966,\n\t34696: 12967,\n\t34697: 12968,\n\t34698: 12849,\n\t34699: 12850,\n\t34700: 12857,\n\t34701: 13182,\n\t34702: 13181,\n\t34703: 13180,\n\t34704: 8786,\n\t34705: 8801,\n\t34706: 8747,\n\t34707: 8750,\n\t34708: 8721,\n\t34709: 8730,\n\t34710: 8869,\n\t34711: 8736,\n\t34712: 8735,\n\t34713: 8895,\n\t34714: 8757,\n\t34715: 8745,\n\t34716: 8746,\n\t34975: 20124,\n\t34976: 21782,\n\t34977: 23043,\n\t34978: 38463,\n\t34979: 21696,\n\t34980: 24859,\n\t34981: 25384,\n\t34982: 23030,\n\t34983: 36898,\n\t34984: 33909,\n\t34985: 33564,\n\t34986: 31312,\n\t34987: 24746,\n\t34988: 25569,\n\t34989: 28197,\n\t34990: 26093,\n\t34991: 33894,\n\t34992: 33446,\n\t34993: 39925,\n\t34994: 26771,\n\t34995: 22311,\n\t34996: 26017,\n\t34997: 25201,\n\t34998: 23451,\n\t34999: 22992,\n\t35000: 34427,\n\t35001: 39156,\n\t35002: 32098,\n\t35003: 32190,\n\t35004: 39822,\n\t35005: 25110,\n\t35006: 31903,\n\t35007: 34999,\n\t35008: 23433,\n\t35009: 24245,\n\t35010: 25353,\n\t35011: 26263,\n\t35012: 26696,\n\t35013: 38343,\n\t35014: 38797,\n\t35015: 26447,\n\t35016: 20197,\n\t35017: 20234,\n\t35018: 20301,\n\t35019: 20381,\n\t35020: 20553,\n\t35021: 22258,\n\t35022: 22839,\n\t35023: 22996,\n\t35024: 23041,\n\t35025: 23561,\n\t35026: 24799,\n\t35027: 24847,\n\t35028: 24944,\n\t35029: 26131,\n\t35030: 26885,\n\t35031: 28858,\n\t35032: 30031,\n\t35033: 30064,\n\t35034: 31227,\n\t35035: 32173,\n\t35036: 32239,\n\t35037: 32963,\n\t35038: 33806,\n\t35039: 34915,\n\t35040: 35586,\n\t35041: 36949,\n\t35042: 36986,\n\t35043: 21307,\n\t35044: 20117,\n\t35045: 20133,\n\t35046: 22495,\n\t35047: 32946,\n\t35048: 37057,\n\t35049: 30959,\n\t35050: 19968,\n\t35051: 22769,\n\t35052: 28322,\n\t35053: 36920,\n\t35054: 31282,\n\t35055: 33576,\n\t35056: 33419,\n\t35057: 39983,\n\t35058: 20801,\n\t35059: 21360,\n\t35060: 21693,\n\t35061: 21729,\n\t35062: 22240,\n\t35063: 23035,\n\t35064: 24341,\n\t35065: 39154,\n\t35066: 28139,\n\t35067: 32996,\n\t35068: 34093,\n\t35136: 38498,\n\t35137: 38512,\n\t35138: 38560,\n\t35139: 38907,\n\t35140: 21515,\n\t35141: 21491,\n\t35142: 23431,\n\t35143: 28879,\n\t35144: 32701,\n\t35145: 36802,\n\t35146: 38632,\n\t35147: 21359,\n\t35148: 40284,\n\t35149: 31418,\n\t35150: 19985,\n\t35151: 30867,\n\t35152: 33276,\n\t35153: 28198,\n\t35154: 22040,\n\t35155: 21764,\n\t35156: 27421,\n\t35157: 34074,\n\t35158: 39995,\n\t35159: 23013,\n\t35160: 21417,\n\t35161: 28006,\n\t35162: 29916,\n\t35163: 38287,\n\t35164: 22082,\n\t35165: 20113,\n\t35166: 36939,\n\t35167: 38642,\n\t35168: 33615,\n\t35169: 39180,\n\t35170: 21473,\n\t35171: 21942,\n\t35172: 23344,\n\t35173: 24433,\n\t35174: 26144,\n\t35175: 26355,\n\t35176: 26628,\n\t35177: 27704,\n\t35178: 27891,\n\t35179: 27945,\n\t35180: 29787,\n\t35181: 30408,\n\t35182: 31310,\n\t35183: 38964,\n\t35184: 33521,\n\t35185: 34907,\n\t35186: 35424,\n\t35187: 37613,\n\t35188: 28082,\n\t35189: 30123,\n\t35190: 30410,\n\t35191: 39365,\n\t35192: 24742,\n\t35193: 35585,\n\t35194: 36234,\n\t35195: 38322,\n\t35196: 27022,\n\t35197: 21421,\n\t35198: 20870,\n\t35200: 22290,\n\t35201: 22576,\n\t35202: 22852,\n\t35203: 23476,\n\t35204: 24310,\n\t35205: 24616,\n\t35206: 25513,\n\t35207: 25588,\n\t35208: 27839,\n\t35209: 28436,\n\t35210: 28814,\n\t35211: 28948,\n\t35212: 29017,\n\t35213: 29141,\n\t35214: 29503,\n\t35215: 32257,\n\t35216: 33398,\n\t35217: 33489,\n\t35218: 34199,\n\t35219: 36960,\n\t35220: 37467,\n\t35221: 40219,\n\t35222: 22633,\n\t35223: 26044,\n\t35224: 27738,\n\t35225: 29989,\n\t35226: 20985,\n\t35227: 22830,\n\t35228: 22885,\n\t35229: 24448,\n\t35230: 24540,\n\t35231: 25276,\n\t35232: 26106,\n\t35233: 27178,\n\t35234: 27431,\n\t35235: 27572,\n\t35236: 29579,\n\t35237: 32705,\n\t35238: 35158,\n\t35239: 40236,\n\t35240: 40206,\n\t35241: 40644,\n\t35242: 23713,\n\t35243: 27798,\n\t35244: 33659,\n\t35245: 20740,\n\t35246: 23627,\n\t35247: 25014,\n\t35248: 33222,\n\t35249: 26742,\n\t35250: 29281,\n\t35251: 20057,\n\t35252: 20474,\n\t35253: 21368,\n\t35254: 24681,\n\t35255: 28201,\n\t35256: 31311,\n\t35257: 38899,\n\t35258: 19979,\n\t35259: 21270,\n\t35260: 20206,\n\t35261: 20309,\n\t35262: 20285,\n\t35263: 20385,\n\t35264: 20339,\n\t35265: 21152,\n\t35266: 21487,\n\t35267: 22025,\n\t35268: 22799,\n\t35269: 23233,\n\t35270: 23478,\n\t35271: 23521,\n\t35272: 31185,\n\t35273: 26247,\n\t35274: 26524,\n\t35275: 26550,\n\t35276: 27468,\n\t35277: 27827,\n\t35278: 28779,\n\t35279: 29634,\n\t35280: 31117,\n\t35281: 31166,\n\t35282: 31292,\n\t35283: 31623,\n\t35284: 33457,\n\t35285: 33499,\n\t35286: 33540,\n\t35287: 33655,\n\t35288: 33775,\n\t35289: 33747,\n\t35290: 34662,\n\t35291: 35506,\n\t35292: 22057,\n\t35293: 36008,\n\t35294: 36838,\n\t35295: 36942,\n\t35296: 38686,\n\t35297: 34442,\n\t35298: 20420,\n\t35299: 23784,\n\t35300: 25105,\n\t35301: 29273,\n\t35302: 30011,\n\t35303: 33253,\n\t35304: 33469,\n\t35305: 34558,\n\t35306: 36032,\n\t35307: 38597,\n\t35308: 39187,\n\t35309: 39381,\n\t35310: 20171,\n\t35311: 20250,\n\t35312: 35299,\n\t35313: 22238,\n\t35314: 22602,\n\t35315: 22730,\n\t35316: 24315,\n\t35317: 24555,\n\t35318: 24618,\n\t35319: 24724,\n\t35320: 24674,\n\t35321: 25040,\n\t35322: 25106,\n\t35323: 25296,\n\t35324: 25913,\n\t35392: 39745,\n\t35393: 26214,\n\t35394: 26800,\n\t35395: 28023,\n\t35396: 28784,\n\t35397: 30028,\n\t35398: 30342,\n\t35399: 32117,\n\t35400: 33445,\n\t35401: 34809,\n\t35402: 38283,\n\t35403: 38542,\n\t35404: 35997,\n\t35405: 20977,\n\t35406: 21182,\n\t35407: 22806,\n\t35408: 21683,\n\t35409: 23475,\n\t35410: 23830,\n\t35411: 24936,\n\t35412: 27010,\n\t35413: 28079,\n\t35414: 30861,\n\t35415: 33995,\n\t35416: 34903,\n\t35417: 35442,\n\t35418: 37799,\n\t35419: 39608,\n\t35420: 28012,\n\t35421: 39336,\n\t35422: 34521,\n\t35423: 22435,\n\t35424: 26623,\n\t35425: 34510,\n\t35426: 37390,\n\t35427: 21123,\n\t35428: 22151,\n\t35429: 21508,\n\t35430: 24275,\n\t35431: 25313,\n\t35432: 25785,\n\t35433: 26684,\n\t35434: 26680,\n\t35435: 27579,\n\t35436: 29554,\n\t35437: 30906,\n\t35438: 31339,\n\t35439: 35226,\n\t35440: 35282,\n\t35441: 36203,\n\t35442: 36611,\n\t35443: 37101,\n\t35444: 38307,\n\t35445: 38548,\n\t35446: 38761,\n\t35447: 23398,\n\t35448: 23731,\n\t35449: 27005,\n\t35450: 38989,\n\t35451: 38990,\n\t35452: 25499,\n\t35453: 31520,\n\t35454: 27179,\n\t35456: 27263,\n\t35457: 26806,\n\t35458: 39949,\n\t35459: 28511,\n\t35460: 21106,\n\t35461: 21917,\n\t35462: 24688,\n\t35463: 25324,\n\t35464: 27963,\n\t35465: 28167,\n\t35466: 28369,\n\t35467: 33883,\n\t35468: 35088,\n\t35469: 36676,\n\t35470: 19988,\n\t35471: 39993,\n\t35472: 21494,\n\t35473: 26907,\n\t35474: 27194,\n\t35475: 38788,\n\t35476: 26666,\n\t35477: 20828,\n\t35478: 31427,\n\t35479: 33970,\n\t35480: 37340,\n\t35481: 37772,\n\t35482: 22107,\n\t35483: 40232,\n\t35484: 26658,\n\t35485: 33541,\n\t35486: 33841,\n\t35487: 31909,\n\t35488: 21000,\n\t35489: 33477,\n\t35490: 29926,\n\t35491: 20094,\n\t35492: 20355,\n\t35493: 20896,\n\t35494: 23506,\n\t35495: 21002,\n\t35496: 21208,\n\t35497: 21223,\n\t35498: 24059,\n\t35499: 21914,\n\t35500: 22570,\n\t35501: 23014,\n\t35502: 23436,\n\t35503: 23448,\n\t35504: 23515,\n\t35505: 24178,\n\t35506: 24185,\n\t35507: 24739,\n\t35508: 24863,\n\t35509: 24931,\n\t35510: 25022,\n\t35511: 25563,\n\t35512: 25954,\n\t35513: 26577,\n\t35514: 26707,\n\t35515: 26874,\n\t35516: 27454,\n\t35517: 27475,\n\t35518: 27735,\n\t35519: 28450,\n\t35520: 28567,\n\t35521: 28485,\n\t35522: 29872,\n\t35523: 29976,\n\t35524: 30435,\n\t35525: 30475,\n\t35526: 31487,\n\t35527: 31649,\n\t35528: 31777,\n\t35529: 32233,\n\t35530: 32566,\n\t35531: 32752,\n\t35532: 32925,\n\t35533: 33382,\n\t35534: 33694,\n\t35535: 35251,\n\t35536: 35532,\n\t35537: 36011,\n\t35538: 36996,\n\t35539: 37969,\n\t35540: 38291,\n\t35541: 38289,\n\t35542: 38306,\n\t35543: 38501,\n\t35544: 38867,\n\t35545: 39208,\n\t35546: 33304,\n\t35547: 20024,\n\t35548: 21547,\n\t35549: 23736,\n\t35550: 24012,\n\t35551: 29609,\n\t35552: 30284,\n\t35553: 30524,\n\t35554: 23721,\n\t35555: 32747,\n\t35556: 36107,\n\t35557: 38593,\n\t35558: 38929,\n\t35559: 38996,\n\t35560: 39000,\n\t35561: 20225,\n\t35562: 20238,\n\t35563: 21361,\n\t35564: 21916,\n\t35565: 22120,\n\t35566: 22522,\n\t35567: 22855,\n\t35568: 23305,\n\t35569: 23492,\n\t35570: 23696,\n\t35571: 24076,\n\t35572: 24190,\n\t35573: 24524,\n\t35574: 25582,\n\t35575: 26426,\n\t35576: 26071,\n\t35577: 26082,\n\t35578: 26399,\n\t35579: 26827,\n\t35580: 26820,\n\t35648: 27231,\n\t35649: 24112,\n\t35650: 27589,\n\t35651: 27671,\n\t35652: 27773,\n\t35653: 30079,\n\t35654: 31048,\n\t35655: 23395,\n\t35656: 31232,\n\t35657: 32000,\n\t35658: 24509,\n\t35659: 35215,\n\t35660: 35352,\n\t35661: 36020,\n\t35662: 36215,\n\t35663: 36556,\n\t35664: 36637,\n\t35665: 39138,\n\t35666: 39438,\n\t35667: 39740,\n\t35668: 20096,\n\t35669: 20605,\n\t35670: 20736,\n\t35671: 22931,\n\t35672: 23452,\n\t35673: 25135,\n\t35674: 25216,\n\t35675: 25836,\n\t35676: 27450,\n\t35677: 29344,\n\t35678: 30097,\n\t35679: 31047,\n\t35680: 32681,\n\t35681: 34811,\n\t35682: 35516,\n\t35683: 35696,\n\t35684: 25516,\n\t35685: 33738,\n\t35686: 38816,\n\t35687: 21513,\n\t35688: 21507,\n\t35689: 21931,\n\t35690: 26708,\n\t35691: 27224,\n\t35692: 35440,\n\t35693: 30759,\n\t35694: 26485,\n\t35695: 40653,\n\t35696: 21364,\n\t35697: 23458,\n\t35698: 33050,\n\t35699: 34384,\n\t35700: 36870,\n\t35701: 19992,\n\t35702: 20037,\n\t35703: 20167,\n\t35704: 20241,\n\t35705: 21450,\n\t35706: 21560,\n\t35707: 23470,\n\t35708: 24339,\n\t35709: 24613,\n\t35710: 25937,\n\t35712: 26429,\n\t35713: 27714,\n\t35714: 27762,\n\t35715: 27875,\n\t35716: 28792,\n\t35717: 29699,\n\t35718: 31350,\n\t35719: 31406,\n\t35720: 31496,\n\t35721: 32026,\n\t35722: 31998,\n\t35723: 32102,\n\t35724: 26087,\n\t35725: 29275,\n\t35726: 21435,\n\t35727: 23621,\n\t35728: 24040,\n\t35729: 25298,\n\t35730: 25312,\n\t35731: 25369,\n\t35732: 28192,\n\t35733: 34394,\n\t35734: 35377,\n\t35735: 36317,\n\t35736: 37624,\n\t35737: 28417,\n\t35738: 31142,\n\t35739: 39770,\n\t35740: 20136,\n\t35741: 20139,\n\t35742: 20140,\n\t35743: 20379,\n\t35744: 20384,\n\t35745: 20689,\n\t35746: 20807,\n\t35747: 31478,\n\t35748: 20849,\n\t35749: 20982,\n\t35750: 21332,\n\t35751: 21281,\n\t35752: 21375,\n\t35753: 21483,\n\t35754: 21932,\n\t35755: 22659,\n\t35756: 23777,\n\t35757: 24375,\n\t35758: 24394,\n\t35759: 24623,\n\t35760: 24656,\n\t35761: 24685,\n\t35762: 25375,\n\t35763: 25945,\n\t35764: 27211,\n\t35765: 27841,\n\t35766: 29378,\n\t35767: 29421,\n\t35768: 30703,\n\t35769: 33016,\n\t35770: 33029,\n\t35771: 33288,\n\t35772: 34126,\n\t35773: 37111,\n\t35774: 37857,\n\t35775: 38911,\n\t35776: 39255,\n\t35777: 39514,\n\t35778: 20208,\n\t35779: 20957,\n\t35780: 23597,\n\t35781: 26241,\n\t35782: 26989,\n\t35783: 23616,\n\t35784: 26354,\n\t35785: 26997,\n\t35786: 29577,\n\t35787: 26704,\n\t35788: 31873,\n\t35789: 20677,\n\t35790: 21220,\n\t35791: 22343,\n\t35792: 24062,\n\t35793: 37670,\n\t35794: 26020,\n\t35795: 27427,\n\t35796: 27453,\n\t35797: 29748,\n\t35798: 31105,\n\t35799: 31165,\n\t35800: 31563,\n\t35801: 32202,\n\t35802: 33465,\n\t35803: 33740,\n\t35804: 34943,\n\t35805: 35167,\n\t35806: 35641,\n\t35807: 36817,\n\t35808: 37329,\n\t35809: 21535,\n\t35810: 37504,\n\t35811: 20061,\n\t35812: 20534,\n\t35813: 21477,\n\t35814: 21306,\n\t35815: 29399,\n\t35816: 29590,\n\t35817: 30697,\n\t35818: 33510,\n\t35819: 36527,\n\t35820: 39366,\n\t35821: 39368,\n\t35822: 39378,\n\t35823: 20855,\n\t35824: 24858,\n\t35825: 34398,\n\t35826: 21936,\n\t35827: 31354,\n\t35828: 20598,\n\t35829: 23507,\n\t35830: 36935,\n\t35831: 38533,\n\t35832: 20018,\n\t35833: 27355,\n\t35834: 37351,\n\t35835: 23633,\n\t35836: 23624,\n\t35904: 25496,\n\t35905: 31391,\n\t35906: 27795,\n\t35907: 38772,\n\t35908: 36705,\n\t35909: 31402,\n\t35910: 29066,\n\t35911: 38536,\n\t35912: 31874,\n\t35913: 26647,\n\t35914: 32368,\n\t35915: 26705,\n\t35916: 37740,\n\t35917: 21234,\n\t35918: 21531,\n\t35919: 34219,\n\t35920: 35347,\n\t35921: 32676,\n\t35922: 36557,\n\t35923: 37089,\n\t35924: 21350,\n\t35925: 34952,\n\t35926: 31041,\n\t35927: 20418,\n\t35928: 20670,\n\t35929: 21009,\n\t35930: 20804,\n\t35931: 21843,\n\t35932: 22317,\n\t35933: 29674,\n\t35934: 22411,\n\t35935: 22865,\n\t35936: 24418,\n\t35937: 24452,\n\t35938: 24693,\n\t35939: 24950,\n\t35940: 24935,\n\t35941: 25001,\n\t35942: 25522,\n\t35943: 25658,\n\t35944: 25964,\n\t35945: 26223,\n\t35946: 26690,\n\t35947: 28179,\n\t35948: 30054,\n\t35949: 31293,\n\t35950: 31995,\n\t35951: 32076,\n\t35952: 32153,\n\t35953: 32331,\n\t35954: 32619,\n\t35955: 33550,\n\t35956: 33610,\n\t35957: 34509,\n\t35958: 35336,\n\t35959: 35427,\n\t35960: 35686,\n\t35961: 36605,\n\t35962: 38938,\n\t35963: 40335,\n\t35964: 33464,\n\t35965: 36814,\n\t35966: 39912,\n\t35968: 21127,\n\t35969: 25119,\n\t35970: 25731,\n\t35971: 28608,\n\t35972: 38553,\n\t35973: 26689,\n\t35974: 20625,\n\t35975: 27424,\n\t35976: 27770,\n\t35977: 28500,\n\t35978: 31348,\n\t35979: 32080,\n\t35980: 34880,\n\t35981: 35363,\n\t35982: 26376,\n\t35983: 20214,\n\t35984: 20537,\n\t35985: 20518,\n\t35986: 20581,\n\t35987: 20860,\n\t35988: 21048,\n\t35989: 21091,\n\t35990: 21927,\n\t35991: 22287,\n\t35992: 22533,\n\t35993: 23244,\n\t35994: 24314,\n\t35995: 25010,\n\t35996: 25080,\n\t35997: 25331,\n\t35998: 25458,\n\t35999: 26908,\n\t36000: 27177,\n\t36001: 29309,\n\t36002: 29356,\n\t36003: 29486,\n\t36004: 30740,\n\t36005: 30831,\n\t36006: 32121,\n\t36007: 30476,\n\t36008: 32937,\n\t36009: 35211,\n\t36010: 35609,\n\t36011: 36066,\n\t36012: 36562,\n\t36013: 36963,\n\t36014: 37749,\n\t36015: 38522,\n\t36016: 38997,\n\t36017: 39443,\n\t36018: 40568,\n\t36019: 20803,\n\t36020: 21407,\n\t36021: 21427,\n\t36022: 24187,\n\t36023: 24358,\n\t36024: 28187,\n\t36025: 28304,\n\t36026: 29572,\n\t36027: 29694,\n\t36028: 32067,\n\t36029: 33335,\n\t36030: 35328,\n\t36031: 35578,\n\t36032: 38480,\n\t36033: 20046,\n\t36034: 20491,\n\t36035: 21476,\n\t36036: 21628,\n\t36037: 22266,\n\t36038: 22993,\n\t36039: 23396,\n\t36040: 24049,\n\t36041: 24235,\n\t36042: 24359,\n\t36043: 25144,\n\t36044: 25925,\n\t36045: 26543,\n\t36046: 28246,\n\t36047: 29392,\n\t36048: 31946,\n\t36049: 34996,\n\t36050: 32929,\n\t36051: 32993,\n\t36052: 33776,\n\t36053: 34382,\n\t36054: 35463,\n\t36055: 36328,\n\t36056: 37431,\n\t36057: 38599,\n\t36058: 39015,\n\t36059: 40723,\n\t36060: 20116,\n\t36061: 20114,\n\t36062: 20237,\n\t36063: 21320,\n\t36064: 21577,\n\t36065: 21566,\n\t36066: 23087,\n\t36067: 24460,\n\t36068: 24481,\n\t36069: 24735,\n\t36070: 26791,\n\t36071: 27278,\n\t36072: 29786,\n\t36073: 30849,\n\t36074: 35486,\n\t36075: 35492,\n\t36076: 35703,\n\t36077: 37264,\n\t36078: 20062,\n\t36079: 39881,\n\t36080: 20132,\n\t36081: 20348,\n\t36082: 20399,\n\t36083: 20505,\n\t36084: 20502,\n\t36085: 20809,\n\t36086: 20844,\n\t36087: 21151,\n\t36088: 21177,\n\t36089: 21246,\n\t36090: 21402,\n\t36091: 21475,\n\t36092: 21521,\n\t36160: 21518,\n\t36161: 21897,\n\t36162: 22353,\n\t36163: 22434,\n\t36164: 22909,\n\t36165: 23380,\n\t36166: 23389,\n\t36167: 23439,\n\t36168: 24037,\n\t36169: 24039,\n\t36170: 24055,\n\t36171: 24184,\n\t36172: 24195,\n\t36173: 24218,\n\t36174: 24247,\n\t36175: 24344,\n\t36176: 24658,\n\t36177: 24908,\n\t36178: 25239,\n\t36179: 25304,\n\t36180: 25511,\n\t36181: 25915,\n\t36182: 26114,\n\t36183: 26179,\n\t36184: 26356,\n\t36185: 26477,\n\t36186: 26657,\n\t36187: 26775,\n\t36188: 27083,\n\t36189: 27743,\n\t36190: 27946,\n\t36191: 28009,\n\t36192: 28207,\n\t36193: 28317,\n\t36194: 30002,\n\t36195: 30343,\n\t36196: 30828,\n\t36197: 31295,\n\t36198: 31968,\n\t36199: 32005,\n\t36200: 32024,\n\t36201: 32094,\n\t36202: 32177,\n\t36203: 32789,\n\t36204: 32771,\n\t36205: 32943,\n\t36206: 32945,\n\t36207: 33108,\n\t36208: 33167,\n\t36209: 33322,\n\t36210: 33618,\n\t36211: 34892,\n\t36212: 34913,\n\t36213: 35611,\n\t36214: 36002,\n\t36215: 36092,\n\t36216: 37066,\n\t36217: 37237,\n\t36218: 37489,\n\t36219: 30783,\n\t36220: 37628,\n\t36221: 38308,\n\t36222: 38477,\n\t36224: 38917,\n\t36225: 39321,\n\t36226: 39640,\n\t36227: 40251,\n\t36228: 21083,\n\t36229: 21163,\n\t36230: 21495,\n\t36231: 21512,\n\t36232: 22741,\n\t36233: 25335,\n\t36234: 28640,\n\t36235: 35946,\n\t36236: 36703,\n\t36237: 40633,\n\t36238: 20811,\n\t36239: 21051,\n\t36240: 21578,\n\t36241: 22269,\n\t36242: 31296,\n\t36243: 37239,\n\t36244: 40288,\n\t36245: 40658,\n\t36246: 29508,\n\t36247: 28425,\n\t36248: 33136,\n\t36249: 29969,\n\t36250: 24573,\n\t36251: 24794,\n\t36252: 39592,\n\t36253: 29403,\n\t36254: 36796,\n\t36255: 27492,\n\t36256: 38915,\n\t36257: 20170,\n\t36258: 22256,\n\t36259: 22372,\n\t36260: 22718,\n\t36261: 23130,\n\t36262: 24680,\n\t36263: 25031,\n\t36264: 26127,\n\t36265: 26118,\n\t36266: 26681,\n\t36267: 26801,\n\t36268: 28151,\n\t36269: 30165,\n\t36270: 32058,\n\t36271: 33390,\n\t36272: 39746,\n\t36273: 20123,\n\t36274: 20304,\n\t36275: 21449,\n\t36276: 21766,\n\t36277: 23919,\n\t36278: 24038,\n\t36279: 24046,\n\t36280: 26619,\n\t36281: 27801,\n\t36282: 29811,\n\t36283: 30722,\n\t36284: 35408,\n\t36285: 37782,\n\t36286: 35039,\n\t36287: 22352,\n\t36288: 24231,\n\t36289: 25387,\n\t36290: 20661,\n\t36291: 20652,\n\t36292: 20877,\n\t36293: 26368,\n\t36294: 21705,\n\t36295: 22622,\n\t36296: 22971,\n\t36297: 23472,\n\t36298: 24425,\n\t36299: 25165,\n\t36300: 25505,\n\t36301: 26685,\n\t36302: 27507,\n\t36303: 28168,\n\t36304: 28797,\n\t36305: 37319,\n\t36306: 29312,\n\t36307: 30741,\n\t36308: 30758,\n\t36309: 31085,\n\t36310: 25998,\n\t36311: 32048,\n\t36312: 33756,\n\t36313: 35009,\n\t36314: 36617,\n\t36315: 38555,\n\t36316: 21092,\n\t36317: 22312,\n\t36318: 26448,\n\t36319: 32618,\n\t36320: 36001,\n\t36321: 20916,\n\t36322: 22338,\n\t36323: 38442,\n\t36324: 22586,\n\t36325: 27018,\n\t36326: 32948,\n\t36327: 21682,\n\t36328: 23822,\n\t36329: 22524,\n\t36330: 30869,\n\t36331: 40442,\n\t36332: 20316,\n\t36333: 21066,\n\t36334: 21643,\n\t36335: 25662,\n\t36336: 26152,\n\t36337: 26388,\n\t36338: 26613,\n\t36339: 31364,\n\t36340: 31574,\n\t36341: 32034,\n\t36342: 37679,\n\t36343: 26716,\n\t36344: 39853,\n\t36345: 31545,\n\t36346: 21273,\n\t36347: 20874,\n\t36348: 21047,\n\t36416: 23519,\n\t36417: 25334,\n\t36418: 25774,\n\t36419: 25830,\n\t36420: 26413,\n\t36421: 27578,\n\t36422: 34217,\n\t36423: 38609,\n\t36424: 30352,\n\t36425: 39894,\n\t36426: 25420,\n\t36427: 37638,\n\t36428: 39851,\n\t36429: 30399,\n\t36430: 26194,\n\t36431: 19977,\n\t36432: 20632,\n\t36433: 21442,\n\t36434: 23665,\n\t36435: 24808,\n\t36436: 25746,\n\t36437: 25955,\n\t36438: 26719,\n\t36439: 29158,\n\t36440: 29642,\n\t36441: 29987,\n\t36442: 31639,\n\t36443: 32386,\n\t36444: 34453,\n\t36445: 35715,\n\t36446: 36059,\n\t36447: 37240,\n\t36448: 39184,\n\t36449: 26028,\n\t36450: 26283,\n\t36451: 27531,\n\t36452: 20181,\n\t36453: 20180,\n\t36454: 20282,\n\t36455: 20351,\n\t36456: 21050,\n\t36457: 21496,\n\t36458: 21490,\n\t36459: 21987,\n\t36460: 22235,\n\t36461: 22763,\n\t36462: 22987,\n\t36463: 22985,\n\t36464: 23039,\n\t36465: 23376,\n\t36466: 23629,\n\t36467: 24066,\n\t36468: 24107,\n\t36469: 24535,\n\t36470: 24605,\n\t36471: 25351,\n\t36472: 25903,\n\t36473: 23388,\n\t36474: 26031,\n\t36475: 26045,\n\t36476: 26088,\n\t36477: 26525,\n\t36478: 27490,\n\t36480: 27515,\n\t36481: 27663,\n\t36482: 29509,\n\t36483: 31049,\n\t36484: 31169,\n\t36485: 31992,\n\t36486: 32025,\n\t36487: 32043,\n\t36488: 32930,\n\t36489: 33026,\n\t36490: 33267,\n\t36491: 35222,\n\t36492: 35422,\n\t36493: 35433,\n\t36494: 35430,\n\t36495: 35468,\n\t36496: 35566,\n\t36497: 36039,\n\t36498: 36060,\n\t36499: 38604,\n\t36500: 39164,\n\t36501: 27503,\n\t36502: 20107,\n\t36503: 20284,\n\t36504: 20365,\n\t36505: 20816,\n\t36506: 23383,\n\t36507: 23546,\n\t36508: 24904,\n\t36509: 25345,\n\t36510: 26178,\n\t36511: 27425,\n\t36512: 28363,\n\t36513: 27835,\n\t36514: 29246,\n\t36515: 29885,\n\t36516: 30164,\n\t36517: 30913,\n\t36518: 31034,\n\t36519: 32780,\n\t36520: 32819,\n\t36521: 33258,\n\t36522: 33940,\n\t36523: 36766,\n\t36524: 27728,\n\t36525: 40575,\n\t36526: 24335,\n\t36527: 35672,\n\t36528: 40235,\n\t36529: 31482,\n\t36530: 36600,\n\t36531: 23437,\n\t36532: 38635,\n\t36533: 19971,\n\t36534: 21489,\n\t36535: 22519,\n\t36536: 22833,\n\t36537: 23241,\n\t36538: 23460,\n\t36539: 24713,\n\t36540: 28287,\n\t36541: 28422,\n\t36542: 30142,\n\t36543: 36074,\n\t36544: 23455,\n\t36545: 34048,\n\t36546: 31712,\n\t36547: 20594,\n\t36548: 26612,\n\t36549: 33437,\n\t36550: 23649,\n\t36551: 34122,\n\t36552: 32286,\n\t36553: 33294,\n\t36554: 20889,\n\t36555: 23556,\n\t36556: 25448,\n\t36557: 36198,\n\t36558: 26012,\n\t36559: 29038,\n\t36560: 31038,\n\t36561: 32023,\n\t36562: 32773,\n\t36563: 35613,\n\t36564: 36554,\n\t36565: 36974,\n\t36566: 34503,\n\t36567: 37034,\n\t36568: 20511,\n\t36569: 21242,\n\t36570: 23610,\n\t36571: 26451,\n\t36572: 28796,\n\t36573: 29237,\n\t36574: 37196,\n\t36575: 37320,\n\t36576: 37675,\n\t36577: 33509,\n\t36578: 23490,\n\t36579: 24369,\n\t36580: 24825,\n\t36581: 20027,\n\t36582: 21462,\n\t36583: 23432,\n\t36584: 25163,\n\t36585: 26417,\n\t36586: 27530,\n\t36587: 29417,\n\t36588: 29664,\n\t36589: 31278,\n\t36590: 33131,\n\t36591: 36259,\n\t36592: 37202,\n\t36593: 39318,\n\t36594: 20754,\n\t36595: 21463,\n\t36596: 21610,\n\t36597: 23551,\n\t36598: 25480,\n\t36599: 27193,\n\t36600: 32172,\n\t36601: 38656,\n\t36602: 22234,\n\t36603: 21454,\n\t36604: 21608,\n\t36672: 23447,\n\t36673: 23601,\n\t36674: 24030,\n\t36675: 20462,\n\t36676: 24833,\n\t36677: 25342,\n\t36678: 27954,\n\t36679: 31168,\n\t36680: 31179,\n\t36681: 32066,\n\t36682: 32333,\n\t36683: 32722,\n\t36684: 33261,\n\t36685: 33311,\n\t36686: 33936,\n\t36687: 34886,\n\t36688: 35186,\n\t36689: 35728,\n\t36690: 36468,\n\t36691: 36655,\n\t36692: 36913,\n\t36693: 37195,\n\t36694: 37228,\n\t36695: 38598,\n\t36696: 37276,\n\t36697: 20160,\n\t36698: 20303,\n\t36699: 20805,\n\t36700: 21313,\n\t36701: 24467,\n\t36702: 25102,\n\t36703: 26580,\n\t36704: 27713,\n\t36705: 28171,\n\t36706: 29539,\n\t36707: 32294,\n\t36708: 37325,\n\t36709: 37507,\n\t36710: 21460,\n\t36711: 22809,\n\t36712: 23487,\n\t36713: 28113,\n\t36714: 31069,\n\t36715: 32302,\n\t36716: 31899,\n\t36717: 22654,\n\t36718: 29087,\n\t36719: 20986,\n\t36720: 34899,\n\t36721: 36848,\n\t36722: 20426,\n\t36723: 23803,\n\t36724: 26149,\n\t36725: 30636,\n\t36726: 31459,\n\t36727: 33308,\n\t36728: 39423,\n\t36729: 20934,\n\t36730: 24490,\n\t36731: 26092,\n\t36732: 26991,\n\t36733: 27529,\n\t36734: 28147,\n\t36736: 28310,\n\t36737: 28516,\n\t36738: 30462,\n\t36739: 32020,\n\t36740: 24033,\n\t36741: 36981,\n\t36742: 37255,\n\t36743: 38918,\n\t36744: 20966,\n\t36745: 21021,\n\t36746: 25152,\n\t36747: 26257,\n\t36748: 26329,\n\t36749: 28186,\n\t36750: 24246,\n\t36751: 32210,\n\t36752: 32626,\n\t36753: 26360,\n\t36754: 34223,\n\t36755: 34295,\n\t36756: 35576,\n\t36757: 21161,\n\t36758: 21465,\n\t36759: 22899,\n\t36760: 24207,\n\t36761: 24464,\n\t36762: 24661,\n\t36763: 37604,\n\t36764: 38500,\n\t36765: 20663,\n\t36766: 20767,\n\t36767: 21213,\n\t36768: 21280,\n\t36769: 21319,\n\t36770: 21484,\n\t36771: 21736,\n\t36772: 21830,\n\t36773: 21809,\n\t36774: 22039,\n\t36775: 22888,\n\t36776: 22974,\n\t36777: 23100,\n\t36778: 23477,\n\t36779: 23558,\n\t36780: 23567,\n\t36781: 23569,\n\t36782: 23578,\n\t36783: 24196,\n\t36784: 24202,\n\t36785: 24288,\n\t36786: 24432,\n\t36787: 25215,\n\t36788: 25220,\n\t36789: 25307,\n\t36790: 25484,\n\t36791: 25463,\n\t36792: 26119,\n\t36793: 26124,\n\t36794: 26157,\n\t36795: 26230,\n\t36796: 26494,\n\t36797: 26786,\n\t36798: 27167,\n\t36799: 27189,\n\t36800: 27836,\n\t36801: 28040,\n\t36802: 28169,\n\t36803: 28248,\n\t36804: 28988,\n\t36805: 28966,\n\t36806: 29031,\n\t36807: 30151,\n\t36808: 30465,\n\t36809: 30813,\n\t36810: 30977,\n\t36811: 31077,\n\t36812: 31216,\n\t36813: 31456,\n\t36814: 31505,\n\t36815: 31911,\n\t36816: 32057,\n\t36817: 32918,\n\t36818: 33750,\n\t36819: 33931,\n\t36820: 34121,\n\t36821: 34909,\n\t36822: 35059,\n\t36823: 35359,\n\t36824: 35388,\n\t36825: 35412,\n\t36826: 35443,\n\t36827: 35937,\n\t36828: 36062,\n\t36829: 37284,\n\t36830: 37478,\n\t36831: 37758,\n\t36832: 37912,\n\t36833: 38556,\n\t36834: 38808,\n\t36835: 19978,\n\t36836: 19976,\n\t36837: 19998,\n\t36838: 20055,\n\t36839: 20887,\n\t36840: 21104,\n\t36841: 22478,\n\t36842: 22580,\n\t36843: 22732,\n\t36844: 23330,\n\t36845: 24120,\n\t36846: 24773,\n\t36847: 25854,\n\t36848: 26465,\n\t36849: 26454,\n\t36850: 27972,\n\t36851: 29366,\n\t36852: 30067,\n\t36853: 31331,\n\t36854: 33976,\n\t36855: 35698,\n\t36856: 37304,\n\t36857: 37664,\n\t36858: 22065,\n\t36859: 22516,\n\t36860: 39166,\n\t36928: 25325,\n\t36929: 26893,\n\t36930: 27542,\n\t36931: 29165,\n\t36932: 32340,\n\t36933: 32887,\n\t36934: 33394,\n\t36935: 35302,\n\t36936: 39135,\n\t36937: 34645,\n\t36938: 36785,\n\t36939: 23611,\n\t36940: 20280,\n\t36941: 20449,\n\t36942: 20405,\n\t36943: 21767,\n\t36944: 23072,\n\t36945: 23517,\n\t36946: 23529,\n\t36947: 24515,\n\t36948: 24910,\n\t36949: 25391,\n\t36950: 26032,\n\t36951: 26187,\n\t36952: 26862,\n\t36953: 27035,\n\t36954: 28024,\n\t36955: 28145,\n\t36956: 30003,\n\t36957: 30137,\n\t36958: 30495,\n\t36959: 31070,\n\t36960: 31206,\n\t36961: 32051,\n\t36962: 33251,\n\t36963: 33455,\n\t36964: 34218,\n\t36965: 35242,\n\t36966: 35386,\n\t36967: 36523,\n\t36968: 36763,\n\t36969: 36914,\n\t36970: 37341,\n\t36971: 38663,\n\t36972: 20154,\n\t36973: 20161,\n\t36974: 20995,\n\t36975: 22645,\n\t36976: 22764,\n\t36977: 23563,\n\t36978: 29978,\n\t36979: 23613,\n\t36980: 33102,\n\t36981: 35338,\n\t36982: 36805,\n\t36983: 38499,\n\t36984: 38765,\n\t36985: 31525,\n\t36986: 35535,\n\t36987: 38920,\n\t36988: 37218,\n\t36989: 22259,\n\t36990: 21416,\n\t36992: 36887,\n\t36993: 21561,\n\t36994: 22402,\n\t36995: 24101,\n\t36996: 25512,\n\t36997: 27700,\n\t36998: 28810,\n\t36999: 30561,\n\t37000: 31883,\n\t37001: 32736,\n\t37002: 34928,\n\t37003: 36930,\n\t37004: 37204,\n\t37005: 37648,\n\t37006: 37656,\n\t37007: 38543,\n\t37008: 29790,\n\t37009: 39620,\n\t37010: 23815,\n\t37011: 23913,\n\t37012: 25968,\n\t37013: 26530,\n\t37014: 36264,\n\t37015: 38619,\n\t37016: 25454,\n\t37017: 26441,\n\t37018: 26905,\n\t37019: 33733,\n\t37020: 38935,\n\t37021: 38592,\n\t37022: 35070,\n\t37023: 28548,\n\t37024: 25722,\n\t37025: 23544,\n\t37026: 19990,\n\t37027: 28716,\n\t37028: 30045,\n\t37029: 26159,\n\t37030: 20932,\n\t37031: 21046,\n\t37032: 21218,\n\t37033: 22995,\n\t37034: 24449,\n\t37035: 24615,\n\t37036: 25104,\n\t37037: 25919,\n\t37038: 25972,\n\t37039: 26143,\n\t37040: 26228,\n\t37041: 26866,\n\t37042: 26646,\n\t37043: 27491,\n\t37044: 28165,\n\t37045: 29298,\n\t37046: 29983,\n\t37047: 30427,\n\t37048: 31934,\n\t37049: 32854,\n\t37050: 22768,\n\t37051: 35069,\n\t37052: 35199,\n\t37053: 35488,\n\t37054: 35475,\n\t37055: 35531,\n\t37056: 36893,\n\t37057: 37266,\n\t37058: 38738,\n\t37059: 38745,\n\t37060: 25993,\n\t37061: 31246,\n\t37062: 33030,\n\t37063: 38587,\n\t37064: 24109,\n\t37065: 24796,\n\t37066: 25114,\n\t37067: 26021,\n\t37068: 26132,\n\t37069: 26512,\n\t37070: 30707,\n\t37071: 31309,\n\t37072: 31821,\n\t37073: 32318,\n\t37074: 33034,\n\t37075: 36012,\n\t37076: 36196,\n\t37077: 36321,\n\t37078: 36447,\n\t37079: 30889,\n\t37080: 20999,\n\t37081: 25305,\n\t37082: 25509,\n\t37083: 25666,\n\t37084: 25240,\n\t37085: 35373,\n\t37086: 31363,\n\t37087: 31680,\n\t37088: 35500,\n\t37089: 38634,\n\t37090: 32118,\n\t37091: 33292,\n\t37092: 34633,\n\t37093: 20185,\n\t37094: 20808,\n\t37095: 21315,\n\t37096: 21344,\n\t37097: 23459,\n\t37098: 23554,\n\t37099: 23574,\n\t37100: 24029,\n\t37101: 25126,\n\t37102: 25159,\n\t37103: 25776,\n\t37104: 26643,\n\t37105: 26676,\n\t37106: 27849,\n\t37107: 27973,\n\t37108: 27927,\n\t37109: 26579,\n\t37110: 28508,\n\t37111: 29006,\n\t37112: 29053,\n\t37113: 26059,\n\t37114: 31359,\n\t37115: 31661,\n\t37116: 32218,\n\t37184: 32330,\n\t37185: 32680,\n\t37186: 33146,\n\t37187: 33307,\n\t37188: 33337,\n\t37189: 34214,\n\t37190: 35438,\n\t37191: 36046,\n\t37192: 36341,\n\t37193: 36984,\n\t37194: 36983,\n\t37195: 37549,\n\t37196: 37521,\n\t37197: 38275,\n\t37198: 39854,\n\t37199: 21069,\n\t37200: 21892,\n\t37201: 28472,\n\t37202: 28982,\n\t37203: 20840,\n\t37204: 31109,\n\t37205: 32341,\n\t37206: 33203,\n\t37207: 31950,\n\t37208: 22092,\n\t37209: 22609,\n\t37210: 23720,\n\t37211: 25514,\n\t37212: 26366,\n\t37213: 26365,\n\t37214: 26970,\n\t37215: 29401,\n\t37216: 30095,\n\t37217: 30094,\n\t37218: 30990,\n\t37219: 31062,\n\t37220: 31199,\n\t37221: 31895,\n\t37222: 32032,\n\t37223: 32068,\n\t37224: 34311,\n\t37225: 35380,\n\t37226: 38459,\n\t37227: 36961,\n\t37228: 40736,\n\t37229: 20711,\n\t37230: 21109,\n\t37231: 21452,\n\t37232: 21474,\n\t37233: 20489,\n\t37234: 21930,\n\t37235: 22766,\n\t37236: 22863,\n\t37237: 29245,\n\t37238: 23435,\n\t37239: 23652,\n\t37240: 21277,\n\t37241: 24803,\n\t37242: 24819,\n\t37243: 25436,\n\t37244: 25475,\n\t37245: 25407,\n\t37246: 25531,\n\t37248: 25805,\n\t37249: 26089,\n\t37250: 26361,\n\t37251: 24035,\n\t37252: 27085,\n\t37253: 27133,\n\t37254: 28437,\n\t37255: 29157,\n\t37256: 20105,\n\t37257: 30185,\n\t37258: 30456,\n\t37259: 31379,\n\t37260: 31967,\n\t37261: 32207,\n\t37262: 32156,\n\t37263: 32865,\n\t37264: 33609,\n\t37265: 33624,\n\t37266: 33900,\n\t37267: 33980,\n\t37268: 34299,\n\t37269: 35013,\n\t37270: 36208,\n\t37271: 36865,\n\t37272: 36973,\n\t37273: 37783,\n\t37274: 38684,\n\t37275: 39442,\n\t37276: 20687,\n\t37277: 22679,\n\t37278: 24974,\n\t37279: 33235,\n\t37280: 34101,\n\t37281: 36104,\n\t37282: 36896,\n\t37283: 20419,\n\t37284: 20596,\n\t37285: 21063,\n\t37286: 21363,\n\t37287: 24687,\n\t37288: 25417,\n\t37289: 26463,\n\t37290: 28204,\n\t37291: 36275,\n\t37292: 36895,\n\t37293: 20439,\n\t37294: 23646,\n\t37295: 36042,\n\t37296: 26063,\n\t37297: 32154,\n\t37298: 21330,\n\t37299: 34966,\n\t37300: 20854,\n\t37301: 25539,\n\t37302: 23384,\n\t37303: 23403,\n\t37304: 23562,\n\t37305: 25613,\n\t37306: 26449,\n\t37307: 36956,\n\t37308: 20182,\n\t37309: 22810,\n\t37310: 22826,\n\t37311: 27760,\n\t37312: 35409,\n\t37313: 21822,\n\t37314: 22549,\n\t37315: 22949,\n\t37316: 24816,\n\t37317: 25171,\n\t37318: 26561,\n\t37319: 33333,\n\t37320: 26965,\n\t37321: 38464,\n\t37322: 39364,\n\t37323: 39464,\n\t37324: 20307,\n\t37325: 22534,\n\t37326: 23550,\n\t37327: 32784,\n\t37328: 23729,\n\t37329: 24111,\n\t37330: 24453,\n\t37331: 24608,\n\t37332: 24907,\n\t37333: 25140,\n\t37334: 26367,\n\t37335: 27888,\n\t37336: 28382,\n\t37337: 32974,\n\t37338: 33151,\n\t37339: 33492,\n\t37340: 34955,\n\t37341: 36024,\n\t37342: 36864,\n\t37343: 36910,\n\t37344: 38538,\n\t37345: 40667,\n\t37346: 39899,\n\t37347: 20195,\n\t37348: 21488,\n\t37349: 22823,\n\t37350: 31532,\n\t37351: 37261,\n\t37352: 38988,\n\t37353: 40441,\n\t37354: 28381,\n\t37355: 28711,\n\t37356: 21331,\n\t37357: 21828,\n\t37358: 23429,\n\t37359: 25176,\n\t37360: 25246,\n\t37361: 25299,\n\t37362: 27810,\n\t37363: 28655,\n\t37364: 29730,\n\t37365: 35351,\n\t37366: 37944,\n\t37367: 28609,\n\t37368: 35582,\n\t37369: 33592,\n\t37370: 20967,\n\t37371: 34552,\n\t37372: 21482,\n\t37440: 21481,\n\t37441: 20294,\n\t37442: 36948,\n\t37443: 36784,\n\t37444: 22890,\n\t37445: 33073,\n\t37446: 24061,\n\t37447: 31466,\n\t37448: 36799,\n\t37449: 26842,\n\t37450: 35895,\n\t37451: 29432,\n\t37452: 40008,\n\t37453: 27197,\n\t37454: 35504,\n\t37455: 20025,\n\t37456: 21336,\n\t37457: 22022,\n\t37458: 22374,\n\t37459: 25285,\n\t37460: 25506,\n\t37461: 26086,\n\t37462: 27470,\n\t37463: 28129,\n\t37464: 28251,\n\t37465: 28845,\n\t37466: 30701,\n\t37467: 31471,\n\t37468: 31658,\n\t37469: 32187,\n\t37470: 32829,\n\t37471: 32966,\n\t37472: 34507,\n\t37473: 35477,\n\t37474: 37723,\n\t37475: 22243,\n\t37476: 22727,\n\t37477: 24382,\n\t37478: 26029,\n\t37479: 26262,\n\t37480: 27264,\n\t37481: 27573,\n\t37482: 30007,\n\t37483: 35527,\n\t37484: 20516,\n\t37485: 30693,\n\t37486: 22320,\n\t37487: 24347,\n\t37488: 24677,\n\t37489: 26234,\n\t37490: 27744,\n\t37491: 30196,\n\t37492: 31258,\n\t37493: 32622,\n\t37494: 33268,\n\t37495: 34584,\n\t37496: 36933,\n\t37497: 39347,\n\t37498: 31689,\n\t37499: 30044,\n\t37500: 31481,\n\t37501: 31569,\n\t37502: 33988,\n\t37504: 36880,\n\t37505: 31209,\n\t37506: 31378,\n\t37507: 33590,\n\t37508: 23265,\n\t37509: 30528,\n\t37510: 20013,\n\t37511: 20210,\n\t37512: 23449,\n\t37513: 24544,\n\t37514: 25277,\n\t37515: 26172,\n\t37516: 26609,\n\t37517: 27880,\n\t37518: 34411,\n\t37519: 34935,\n\t37520: 35387,\n\t37521: 37198,\n\t37522: 37619,\n\t37523: 39376,\n\t37524: 27159,\n\t37525: 28710,\n\t37526: 29482,\n\t37527: 33511,\n\t37528: 33879,\n\t37529: 36015,\n\t37530: 19969,\n\t37531: 20806,\n\t37532: 20939,\n\t37533: 21899,\n\t37534: 23541,\n\t37535: 24086,\n\t37536: 24115,\n\t37537: 24193,\n\t37538: 24340,\n\t37539: 24373,\n\t37540: 24427,\n\t37541: 24500,\n\t37542: 25074,\n\t37543: 25361,\n\t37544: 26274,\n\t37545: 26397,\n\t37546: 28526,\n\t37547: 29266,\n\t37548: 30010,\n\t37549: 30522,\n\t37550: 32884,\n\t37551: 33081,\n\t37552: 33144,\n\t37553: 34678,\n\t37554: 35519,\n\t37555: 35548,\n\t37556: 36229,\n\t37557: 36339,\n\t37558: 37530,\n\t37559: 38263,\n\t37560: 38914,\n\t37561: 40165,\n\t37562: 21189,\n\t37563: 25431,\n\t37564: 30452,\n\t37565: 26389,\n\t37566: 27784,\n\t37567: 29645,\n\t37568: 36035,\n\t37569: 37806,\n\t37570: 38515,\n\t37571: 27941,\n\t37572: 22684,\n\t37573: 26894,\n\t37574: 27084,\n\t37575: 36861,\n\t37576: 37786,\n\t37577: 30171,\n\t37578: 36890,\n\t37579: 22618,\n\t37580: 26626,\n\t37581: 25524,\n\t37582: 27131,\n\t37583: 20291,\n\t37584: 28460,\n\t37585: 26584,\n\t37586: 36795,\n\t37587: 34086,\n\t37588: 32180,\n\t37589: 37716,\n\t37590: 26943,\n\t37591: 28528,\n\t37592: 22378,\n\t37593: 22775,\n\t37594: 23340,\n\t37595: 32044,\n\t37596: 29226,\n\t37597: 21514,\n\t37598: 37347,\n\t37599: 40372,\n\t37600: 20141,\n\t37601: 20302,\n\t37602: 20572,\n\t37603: 20597,\n\t37604: 21059,\n\t37605: 35998,\n\t37606: 21576,\n\t37607: 22564,\n\t37608: 23450,\n\t37609: 24093,\n\t37610: 24213,\n\t37611: 24237,\n\t37612: 24311,\n\t37613: 24351,\n\t37614: 24716,\n\t37615: 25269,\n\t37616: 25402,\n\t37617: 25552,\n\t37618: 26799,\n\t37619: 27712,\n\t37620: 30855,\n\t37621: 31118,\n\t37622: 31243,\n\t37623: 32224,\n\t37624: 33351,\n\t37625: 35330,\n\t37626: 35558,\n\t37627: 36420,\n\t37628: 36883,\n\t37696: 37048,\n\t37697: 37165,\n\t37698: 37336,\n\t37699: 40718,\n\t37700: 27877,\n\t37701: 25688,\n\t37702: 25826,\n\t37703: 25973,\n\t37704: 28404,\n\t37705: 30340,\n\t37706: 31515,\n\t37707: 36969,\n\t37708: 37841,\n\t37709: 28346,\n\t37710: 21746,\n\t37711: 24505,\n\t37712: 25764,\n\t37713: 36685,\n\t37714: 36845,\n\t37715: 37444,\n\t37716: 20856,\n\t37717: 22635,\n\t37718: 22825,\n\t37719: 23637,\n\t37720: 24215,\n\t37721: 28155,\n\t37722: 32399,\n\t37723: 29980,\n\t37724: 36028,\n\t37725: 36578,\n\t37726: 39003,\n\t37727: 28857,\n\t37728: 20253,\n\t37729: 27583,\n\t37730: 28593,\n\t37731: 30000,\n\t37732: 38651,\n\t37733: 20814,\n\t37734: 21520,\n\t37735: 22581,\n\t37736: 22615,\n\t37737: 22956,\n\t37738: 23648,\n\t37739: 24466,\n\t37740: 26007,\n\t37741: 26460,\n\t37742: 28193,\n\t37743: 30331,\n\t37744: 33759,\n\t37745: 36077,\n\t37746: 36884,\n\t37747: 37117,\n\t37748: 37709,\n\t37749: 30757,\n\t37750: 30778,\n\t37751: 21162,\n\t37752: 24230,\n\t37753: 22303,\n\t37754: 22900,\n\t37755: 24594,\n\t37756: 20498,\n\t37757: 20826,\n\t37758: 20908,\n\t37760: 20941,\n\t37761: 20992,\n\t37762: 21776,\n\t37763: 22612,\n\t37764: 22616,\n\t37765: 22871,\n\t37766: 23445,\n\t37767: 23798,\n\t37768: 23947,\n\t37769: 24764,\n\t37770: 25237,\n\t37771: 25645,\n\t37772: 26481,\n\t37773: 26691,\n\t37774: 26812,\n\t37775: 26847,\n\t37776: 30423,\n\t37777: 28120,\n\t37778: 28271,\n\t37779: 28059,\n\t37780: 28783,\n\t37781: 29128,\n\t37782: 24403,\n\t37783: 30168,\n\t37784: 31095,\n\t37785: 31561,\n\t37786: 31572,\n\t37787: 31570,\n\t37788: 31958,\n\t37789: 32113,\n\t37790: 21040,\n\t37791: 33891,\n\t37792: 34153,\n\t37793: 34276,\n\t37794: 35342,\n\t37795: 35588,\n\t37796: 35910,\n\t37797: 36367,\n\t37798: 36867,\n\t37799: 36879,\n\t37800: 37913,\n\t37801: 38518,\n\t37802: 38957,\n\t37803: 39472,\n\t37804: 38360,\n\t37805: 20685,\n\t37806: 21205,\n\t37807: 21516,\n\t37808: 22530,\n\t37809: 23566,\n\t37810: 24999,\n\t37811: 25758,\n\t37812: 27934,\n\t37813: 30643,\n\t37814: 31461,\n\t37815: 33012,\n\t37816: 33796,\n\t37817: 36947,\n\t37818: 37509,\n\t37819: 23776,\n\t37820: 40199,\n\t37821: 21311,\n\t37822: 24471,\n\t37823: 24499,\n\t37824: 28060,\n\t37825: 29305,\n\t37826: 30563,\n\t37827: 31167,\n\t37828: 31716,\n\t37829: 27602,\n\t37830: 29420,\n\t37831: 35501,\n\t37832: 26627,\n\t37833: 27233,\n\t37834: 20984,\n\t37835: 31361,\n\t37836: 26932,\n\t37837: 23626,\n\t37838: 40182,\n\t37839: 33515,\n\t37840: 23493,\n\t37841: 37193,\n\t37842: 28702,\n\t37843: 22136,\n\t37844: 23663,\n\t37845: 24775,\n\t37846: 25958,\n\t37847: 27788,\n\t37848: 35930,\n\t37849: 36929,\n\t37850: 38931,\n\t37851: 21585,\n\t37852: 26311,\n\t37853: 37389,\n\t37854: 22856,\n\t37855: 37027,\n\t37856: 20869,\n\t37857: 20045,\n\t37858: 20970,\n\t37859: 34201,\n\t37860: 35598,\n\t37861: 28760,\n\t37862: 25466,\n\t37863: 37707,\n\t37864: 26978,\n\t37865: 39348,\n\t37866: 32260,\n\t37867: 30071,\n\t37868: 21335,\n\t37869: 26976,\n\t37870: 36575,\n\t37871: 38627,\n\t37872: 27741,\n\t37873: 20108,\n\t37874: 23612,\n\t37875: 24336,\n\t37876: 36841,\n\t37877: 21250,\n\t37878: 36049,\n\t37879: 32905,\n\t37880: 34425,\n\t37881: 24319,\n\t37882: 26085,\n\t37883: 20083,\n\t37884: 20837,\n\t37952: 22914,\n\t37953: 23615,\n\t37954: 38894,\n\t37955: 20219,\n\t37956: 22922,\n\t37957: 24525,\n\t37958: 35469,\n\t37959: 28641,\n\t37960: 31152,\n\t37961: 31074,\n\t37962: 23527,\n\t37963: 33905,\n\t37964: 29483,\n\t37965: 29105,\n\t37966: 24180,\n\t37967: 24565,\n\t37968: 25467,\n\t37969: 25754,\n\t37970: 29123,\n\t37971: 31896,\n\t37972: 20035,\n\t37973: 24316,\n\t37974: 20043,\n\t37975: 22492,\n\t37976: 22178,\n\t37977: 24745,\n\t37978: 28611,\n\t37979: 32013,\n\t37980: 33021,\n\t37981: 33075,\n\t37982: 33215,\n\t37983: 36786,\n\t37984: 35223,\n\t37985: 34468,\n\t37986: 24052,\n\t37987: 25226,\n\t37988: 25773,\n\t37989: 35207,\n\t37990: 26487,\n\t37991: 27874,\n\t37992: 27966,\n\t37993: 29750,\n\t37994: 30772,\n\t37995: 23110,\n\t37996: 32629,\n\t37997: 33453,\n\t37998: 39340,\n\t37999: 20467,\n\t38000: 24259,\n\t38001: 25309,\n\t38002: 25490,\n\t38003: 25943,\n\t38004: 26479,\n\t38005: 30403,\n\t38006: 29260,\n\t38007: 32972,\n\t38008: 32954,\n\t38009: 36649,\n\t38010: 37197,\n\t38011: 20493,\n\t38012: 22521,\n\t38013: 23186,\n\t38014: 26757,\n\t38016: 26995,\n\t38017: 29028,\n\t38018: 29437,\n\t38019: 36023,\n\t38020: 22770,\n\t38021: 36064,\n\t38022: 38506,\n\t38023: 36889,\n\t38024: 34687,\n\t38025: 31204,\n\t38026: 30695,\n\t38027: 33833,\n\t38028: 20271,\n\t38029: 21093,\n\t38030: 21338,\n\t38031: 25293,\n\t38032: 26575,\n\t38033: 27850,\n\t38034: 30333,\n\t38035: 31636,\n\t38036: 31893,\n\t38037: 33334,\n\t38038: 34180,\n\t38039: 36843,\n\t38040: 26333,\n\t38041: 28448,\n\t38042: 29190,\n\t38043: 32283,\n\t38044: 33707,\n\t38045: 39361,\n\t38046: 40614,\n\t38047: 20989,\n\t38048: 31665,\n\t38049: 30834,\n\t38050: 31672,\n\t38051: 32903,\n\t38052: 31560,\n\t38053: 27368,\n\t38054: 24161,\n\t38055: 32908,\n\t38056: 30033,\n\t38057: 30048,\n\t38058: 20843,\n\t38059: 37474,\n\t38060: 28300,\n\t38061: 30330,\n\t38062: 37271,\n\t38063: 39658,\n\t38064: 20240,\n\t38065: 32624,\n\t38066: 25244,\n\t38067: 31567,\n\t38068: 38309,\n\t38069: 40169,\n\t38070: 22138,\n\t38071: 22617,\n\t38072: 34532,\n\t38073: 38588,\n\t38074: 20276,\n\t38075: 21028,\n\t38076: 21322,\n\t38077: 21453,\n\t38078: 21467,\n\t38079: 24070,\n\t38080: 25644,\n\t38081: 26001,\n\t38082: 26495,\n\t38083: 27710,\n\t38084: 27726,\n\t38085: 29256,\n\t38086: 29359,\n\t38087: 29677,\n\t38088: 30036,\n\t38089: 32321,\n\t38090: 33324,\n\t38091: 34281,\n\t38092: 36009,\n\t38093: 31684,\n\t38094: 37318,\n\t38095: 29033,\n\t38096: 38930,\n\t38097: 39151,\n\t38098: 25405,\n\t38099: 26217,\n\t38100: 30058,\n\t38101: 30436,\n\t38102: 30928,\n\t38103: 34115,\n\t38104: 34542,\n\t38105: 21290,\n\t38106: 21329,\n\t38107: 21542,\n\t38108: 22915,\n\t38109: 24199,\n\t38110: 24444,\n\t38111: 24754,\n\t38112: 25161,\n\t38113: 25209,\n\t38114: 25259,\n\t38115: 26000,\n\t38116: 27604,\n\t38117: 27852,\n\t38118: 30130,\n\t38119: 30382,\n\t38120: 30865,\n\t38121: 31192,\n\t38122: 32203,\n\t38123: 32631,\n\t38124: 32933,\n\t38125: 34987,\n\t38126: 35513,\n\t38127: 36027,\n\t38128: 36991,\n\t38129: 38750,\n\t38130: 39131,\n\t38131: 27147,\n\t38132: 31800,\n\t38133: 20633,\n\t38134: 23614,\n\t38135: 24494,\n\t38136: 26503,\n\t38137: 27608,\n\t38138: 29749,\n\t38139: 30473,\n\t38140: 32654,\n\t38208: 40763,\n\t38209: 26570,\n\t38210: 31255,\n\t38211: 21305,\n\t38212: 30091,\n\t38213: 39661,\n\t38214: 24422,\n\t38215: 33181,\n\t38216: 33777,\n\t38217: 32920,\n\t38218: 24380,\n\t38219: 24517,\n\t38220: 30050,\n\t38221: 31558,\n\t38222: 36924,\n\t38223: 26727,\n\t38224: 23019,\n\t38225: 23195,\n\t38226: 32016,\n\t38227: 30334,\n\t38228: 35628,\n\t38229: 20469,\n\t38230: 24426,\n\t38231: 27161,\n\t38232: 27703,\n\t38233: 28418,\n\t38234: 29922,\n\t38235: 31080,\n\t38236: 34920,\n\t38237: 35413,\n\t38238: 35961,\n\t38239: 24287,\n\t38240: 25551,\n\t38241: 30149,\n\t38242: 31186,\n\t38243: 33495,\n\t38244: 37672,\n\t38245: 37618,\n\t38246: 33948,\n\t38247: 34541,\n\t38248: 39981,\n\t38249: 21697,\n\t38250: 24428,\n\t38251: 25996,\n\t38252: 27996,\n\t38253: 28693,\n\t38254: 36007,\n\t38255: 36051,\n\t38256: 38971,\n\t38257: 25935,\n\t38258: 29942,\n\t38259: 19981,\n\t38260: 20184,\n\t38261: 22496,\n\t38262: 22827,\n\t38263: 23142,\n\t38264: 23500,\n\t38265: 20904,\n\t38266: 24067,\n\t38267: 24220,\n\t38268: 24598,\n\t38269: 25206,\n\t38270: 25975,\n\t38272: 26023,\n\t38273: 26222,\n\t38274: 28014,\n\t38275: 29238,\n\t38276: 31526,\n\t38277: 33104,\n\t38278: 33178,\n\t38279: 33433,\n\t38280: 35676,\n\t38281: 36000,\n\t38282: 36070,\n\t38283: 36212,\n\t38284: 38428,\n\t38285: 38468,\n\t38286: 20398,\n\t38287: 25771,\n\t38288: 27494,\n\t38289: 33310,\n\t38290: 33889,\n\t38291: 34154,\n\t38292: 37096,\n\t38293: 23553,\n\t38294: 26963,\n\t38295: 39080,\n\t38296: 33914,\n\t38297: 34135,\n\t38298: 20239,\n\t38299: 21103,\n\t38300: 24489,\n\t38301: 24133,\n\t38302: 26381,\n\t38303: 31119,\n\t38304: 33145,\n\t38305: 35079,\n\t38306: 35206,\n\t38307: 28149,\n\t38308: 24343,\n\t38309: 25173,\n\t38310: 27832,\n\t38311: 20175,\n\t38312: 29289,\n\t38313: 39826,\n\t38314: 20998,\n\t38315: 21563,\n\t38316: 22132,\n\t38317: 22707,\n\t38318: 24996,\n\t38319: 25198,\n\t38320: 28954,\n\t38321: 22894,\n\t38322: 31881,\n\t38323: 31966,\n\t38324: 32027,\n\t38325: 38640,\n\t38326: 25991,\n\t38327: 32862,\n\t38328: 19993,\n\t38329: 20341,\n\t38330: 20853,\n\t38331: 22592,\n\t38332: 24163,\n\t38333: 24179,\n\t38334: 24330,\n\t38335: 26564,\n\t38336: 20006,\n\t38337: 34109,\n\t38338: 38281,\n\t38339: 38491,\n\t38340: 31859,\n\t38341: 38913,\n\t38342: 20731,\n\t38343: 22721,\n\t38344: 30294,\n\t38345: 30887,\n\t38346: 21029,\n\t38347: 30629,\n\t38348: 34065,\n\t38349: 31622,\n\t38350: 20559,\n\t38351: 22793,\n\t38352: 29255,\n\t38353: 31687,\n\t38354: 32232,\n\t38355: 36794,\n\t38356: 36820,\n\t38357: 36941,\n\t38358: 20415,\n\t38359: 21193,\n\t38360: 23081,\n\t38361: 24321,\n\t38362: 38829,\n\t38363: 20445,\n\t38364: 33303,\n\t38365: 37610,\n\t38366: 22275,\n\t38367: 25429,\n\t38368: 27497,\n\t38369: 29995,\n\t38370: 35036,\n\t38371: 36628,\n\t38372: 31298,\n\t38373: 21215,\n\t38374: 22675,\n\t38375: 24917,\n\t38376: 25098,\n\t38377: 26286,\n\t38378: 27597,\n\t38379: 31807,\n\t38380: 33769,\n\t38381: 20515,\n\t38382: 20472,\n\t38383: 21253,\n\t38384: 21574,\n\t38385: 22577,\n\t38386: 22857,\n\t38387: 23453,\n\t38388: 23792,\n\t38389: 23791,\n\t38390: 23849,\n\t38391: 24214,\n\t38392: 25265,\n\t38393: 25447,\n\t38394: 25918,\n\t38395: 26041,\n\t38396: 26379,\n\t38464: 27861,\n\t38465: 27873,\n\t38466: 28921,\n\t38467: 30770,\n\t38468: 32299,\n\t38469: 32990,\n\t38470: 33459,\n\t38471: 33804,\n\t38472: 34028,\n\t38473: 34562,\n\t38474: 35090,\n\t38475: 35370,\n\t38476: 35914,\n\t38477: 37030,\n\t38478: 37586,\n\t38479: 39165,\n\t38480: 40179,\n\t38481: 40300,\n\t38482: 20047,\n\t38483: 20129,\n\t38484: 20621,\n\t38485: 21078,\n\t38486: 22346,\n\t38487: 22952,\n\t38488: 24125,\n\t38489: 24536,\n\t38490: 24537,\n\t38491: 25151,\n\t38492: 26292,\n\t38493: 26395,\n\t38494: 26576,\n\t38495: 26834,\n\t38496: 20882,\n\t38497: 32033,\n\t38498: 32938,\n\t38499: 33192,\n\t38500: 35584,\n\t38501: 35980,\n\t38502: 36031,\n\t38503: 37502,\n\t38504: 38450,\n\t38505: 21536,\n\t38506: 38956,\n\t38507: 21271,\n\t38508: 20693,\n\t38509: 21340,\n\t38510: 22696,\n\t38511: 25778,\n\t38512: 26420,\n\t38513: 29287,\n\t38514: 30566,\n\t38515: 31302,\n\t38516: 37350,\n\t38517: 21187,\n\t38518: 27809,\n\t38519: 27526,\n\t38520: 22528,\n\t38521: 24140,\n\t38522: 22868,\n\t38523: 26412,\n\t38524: 32763,\n\t38525: 20961,\n\t38526: 30406,\n\t38528: 25705,\n\t38529: 30952,\n\t38530: 39764,\n\t38531: 40635,\n\t38532: 22475,\n\t38533: 22969,\n\t38534: 26151,\n\t38535: 26522,\n\t38536: 27598,\n\t38537: 21737,\n\t38538: 27097,\n\t38539: 24149,\n\t38540: 33180,\n\t38541: 26517,\n\t38542: 39850,\n\t38543: 26622,\n\t38544: 40018,\n\t38545: 26717,\n\t38546: 20134,\n\t38547: 20451,\n\t38548: 21448,\n\t38549: 25273,\n\t38550: 26411,\n\t38551: 27819,\n\t38552: 36804,\n\t38553: 20397,\n\t38554: 32365,\n\t38555: 40639,\n\t38556: 19975,\n\t38557: 24930,\n\t38558: 28288,\n\t38559: 28459,\n\t38560: 34067,\n\t38561: 21619,\n\t38562: 26410,\n\t38563: 39749,\n\t38564: 24051,\n\t38565: 31637,\n\t38566: 23724,\n\t38567: 23494,\n\t38568: 34588,\n\t38569: 28234,\n\t38570: 34001,\n\t38571: 31252,\n\t38572: 33032,\n\t38573: 22937,\n\t38574: 31885,\n\t38575: 27665,\n\t38576: 30496,\n\t38577: 21209,\n\t38578: 22818,\n\t38579: 28961,\n\t38580: 29279,\n\t38581: 30683,\n\t38582: 38695,\n\t38583: 40289,\n\t38584: 26891,\n\t38585: 23167,\n\t38586: 23064,\n\t38587: 20901,\n\t38588: 21517,\n\t38589: 21629,\n\t38590: 26126,\n\t38591: 30431,\n\t38592: 36855,\n\t38593: 37528,\n\t38594: 40180,\n\t38595: 23018,\n\t38596: 29277,\n\t38597: 28357,\n\t38598: 20813,\n\t38599: 26825,\n\t38600: 32191,\n\t38601: 32236,\n\t38602: 38754,\n\t38603: 40634,\n\t38604: 25720,\n\t38605: 27169,\n\t38606: 33538,\n\t38607: 22916,\n\t38608: 23391,\n\t38609: 27611,\n\t38610: 29467,\n\t38611: 30450,\n\t38612: 32178,\n\t38613: 32791,\n\t38614: 33945,\n\t38615: 20786,\n\t38616: 26408,\n\t38617: 40665,\n\t38618: 30446,\n\t38619: 26466,\n\t38620: 21247,\n\t38621: 39173,\n\t38622: 23588,\n\t38623: 25147,\n\t38624: 31870,\n\t38625: 36016,\n\t38626: 21839,\n\t38627: 24758,\n\t38628: 32011,\n\t38629: 38272,\n\t38630: 21249,\n\t38631: 20063,\n\t38632: 20918,\n\t38633: 22812,\n\t38634: 29242,\n\t38635: 32822,\n\t38636: 37326,\n\t38637: 24357,\n\t38638: 30690,\n\t38639: 21380,\n\t38640: 24441,\n\t38641: 32004,\n\t38642: 34220,\n\t38643: 35379,\n\t38644: 36493,\n\t38645: 38742,\n\t38646: 26611,\n\t38647: 34222,\n\t38648: 37971,\n\t38649: 24841,\n\t38650: 24840,\n\t38651: 27833,\n\t38652: 30290,\n\t38720: 35565,\n\t38721: 36664,\n\t38722: 21807,\n\t38723: 20305,\n\t38724: 20778,\n\t38725: 21191,\n\t38726: 21451,\n\t38727: 23461,\n\t38728: 24189,\n\t38729: 24736,\n\t38730: 24962,\n\t38731: 25558,\n\t38732: 26377,\n\t38733: 26586,\n\t38734: 28263,\n\t38735: 28044,\n\t38736: 29494,\n\t38737: 29495,\n\t38738: 30001,\n\t38739: 31056,\n\t38740: 35029,\n\t38741: 35480,\n\t38742: 36938,\n\t38743: 37009,\n\t38744: 37109,\n\t38745: 38596,\n\t38746: 34701,\n\t38747: 22805,\n\t38748: 20104,\n\t38749: 20313,\n\t38750: 19982,\n\t38751: 35465,\n\t38752: 36671,\n\t38753: 38928,\n\t38754: 20653,\n\t38755: 24188,\n\t38756: 22934,\n\t38757: 23481,\n\t38758: 24248,\n\t38759: 25562,\n\t38760: 25594,\n\t38761: 25793,\n\t38762: 26332,\n\t38763: 26954,\n\t38764: 27096,\n\t38765: 27915,\n\t38766: 28342,\n\t38767: 29076,\n\t38768: 29992,\n\t38769: 31407,\n\t38770: 32650,\n\t38771: 32768,\n\t38772: 33865,\n\t38773: 33993,\n\t38774: 35201,\n\t38775: 35617,\n\t38776: 36362,\n\t38777: 36965,\n\t38778: 38525,\n\t38779: 39178,\n\t38780: 24958,\n\t38781: 25233,\n\t38782: 27442,\n\t38784: 27779,\n\t38785: 28020,\n\t38786: 32716,\n\t38787: 32764,\n\t38788: 28096,\n\t38789: 32645,\n\t38790: 34746,\n\t38791: 35064,\n\t38792: 26469,\n\t38793: 33713,\n\t38794: 38972,\n\t38795: 38647,\n\t38796: 27931,\n\t38797: 32097,\n\t38798: 33853,\n\t38799: 37226,\n\t38800: 20081,\n\t38801: 21365,\n\t38802: 23888,\n\t38803: 27396,\n\t38804: 28651,\n\t38805: 34253,\n\t38806: 34349,\n\t38807: 35239,\n\t38808: 21033,\n\t38809: 21519,\n\t38810: 23653,\n\t38811: 26446,\n\t38812: 26792,\n\t38813: 29702,\n\t38814: 29827,\n\t38815: 30178,\n\t38816: 35023,\n\t38817: 35041,\n\t38818: 37324,\n\t38819: 38626,\n\t38820: 38520,\n\t38821: 24459,\n\t38822: 29575,\n\t38823: 31435,\n\t38824: 33870,\n\t38825: 25504,\n\t38826: 30053,\n\t38827: 21129,\n\t38828: 27969,\n\t38829: 28316,\n\t38830: 29705,\n\t38831: 30041,\n\t38832: 30827,\n\t38833: 31890,\n\t38834: 38534,\n\t38835: 31452,\n\t38836: 40845,\n\t38837: 20406,\n\t38838: 24942,\n\t38839: 26053,\n\t38840: 34396,\n\t38841: 20102,\n\t38842: 20142,\n\t38843: 20698,\n\t38844: 20001,\n\t38845: 20940,\n\t38846: 23534,\n\t38847: 26009,\n\t38848: 26753,\n\t38849: 28092,\n\t38850: 29471,\n\t38851: 30274,\n\t38852: 30637,\n\t38853: 31260,\n\t38854: 31975,\n\t38855: 33391,\n\t38856: 35538,\n\t38857: 36988,\n\t38858: 37327,\n\t38859: 38517,\n\t38860: 38936,\n\t38861: 21147,\n\t38862: 32209,\n\t38863: 20523,\n\t38864: 21400,\n\t38865: 26519,\n\t38866: 28107,\n\t38867: 29136,\n\t38868: 29747,\n\t38869: 33256,\n\t38870: 36650,\n\t38871: 38563,\n\t38872: 40023,\n\t38873: 40607,\n\t38874: 29792,\n\t38875: 22593,\n\t38876: 28057,\n\t38877: 32047,\n\t38878: 39006,\n\t38879: 20196,\n\t38880: 20278,\n\t38881: 20363,\n\t38882: 20919,\n\t38883: 21169,\n\t38884: 23994,\n\t38885: 24604,\n\t38886: 29618,\n\t38887: 31036,\n\t38888: 33491,\n\t38889: 37428,\n\t38890: 38583,\n\t38891: 38646,\n\t38892: 38666,\n\t38893: 40599,\n\t38894: 40802,\n\t38895: 26278,\n\t38896: 27508,\n\t38897: 21015,\n\t38898: 21155,\n\t38899: 28872,\n\t38900: 35010,\n\t38901: 24265,\n\t38902: 24651,\n\t38903: 24976,\n\t38904: 28451,\n\t38905: 29001,\n\t38906: 31806,\n\t38907: 32244,\n\t38908: 32879,\n\t38976: 34030,\n\t38977: 36899,\n\t38978: 37676,\n\t38979: 21570,\n\t38980: 39791,\n\t38981: 27347,\n\t38982: 28809,\n\t38983: 36034,\n\t38984: 36335,\n\t38985: 38706,\n\t38986: 21172,\n\t38987: 23105,\n\t38988: 24266,\n\t38989: 24324,\n\t38990: 26391,\n\t38991: 27004,\n\t38992: 27028,\n\t38993: 28010,\n\t38994: 28431,\n\t38995: 29282,\n\t38996: 29436,\n\t38997: 31725,\n\t38998: 32769,\n\t38999: 32894,\n\t39000: 34635,\n\t39001: 37070,\n\t39002: 20845,\n\t39003: 40595,\n\t39004: 31108,\n\t39005: 32907,\n\t39006: 37682,\n\t39007: 35542,\n\t39008: 20525,\n\t39009: 21644,\n\t39010: 35441,\n\t39011: 27498,\n\t39012: 36036,\n\t39013: 33031,\n\t39014: 24785,\n\t39015: 26528,\n\t39016: 40434,\n\t39017: 20121,\n\t39018: 20120,\n\t39019: 39952,\n\t39020: 35435,\n\t39021: 34241,\n\t39022: 34152,\n\t39023: 26880,\n\t39024: 28286,\n\t39025: 30871,\n\t39026: 33109,\n\t39071: 24332,\n\t39072: 19984,\n\t39073: 19989,\n\t39074: 20010,\n\t39075: 20017,\n\t39076: 20022,\n\t39077: 20028,\n\t39078: 20031,\n\t39079: 20034,\n\t39080: 20054,\n\t39081: 20056,\n\t39082: 20098,\n\t39083: 20101,\n\t39084: 35947,\n\t39085: 20106,\n\t39086: 33298,\n\t39087: 24333,\n\t39088: 20110,\n\t39089: 20126,\n\t39090: 20127,\n\t39091: 20128,\n\t39092: 20130,\n\t39093: 20144,\n\t39094: 20147,\n\t39095: 20150,\n\t39096: 20174,\n\t39097: 20173,\n\t39098: 20164,\n\t39099: 20166,\n\t39100: 20162,\n\t39101: 20183,\n\t39102: 20190,\n\t39103: 20205,\n\t39104: 20191,\n\t39105: 20215,\n\t39106: 20233,\n\t39107: 20314,\n\t39108: 20272,\n\t39109: 20315,\n\t39110: 20317,\n\t39111: 20311,\n\t39112: 20295,\n\t39113: 20342,\n\t39114: 20360,\n\t39115: 20367,\n\t39116: 20376,\n\t39117: 20347,\n\t39118: 20329,\n\t39119: 20336,\n\t39120: 20369,\n\t39121: 20335,\n\t39122: 20358,\n\t39123: 20374,\n\t39124: 20760,\n\t39125: 20436,\n\t39126: 20447,\n\t39127: 20430,\n\t39128: 20440,\n\t39129: 20443,\n\t39130: 20433,\n\t39131: 20442,\n\t39132: 20432,\n\t39133: 20452,\n\t39134: 20453,\n\t39135: 20506,\n\t39136: 20520,\n\t39137: 20500,\n\t39138: 20522,\n\t39139: 20517,\n\t39140: 20485,\n\t39141: 20252,\n\t39142: 20470,\n\t39143: 20513,\n\t39144: 20521,\n\t39145: 20524,\n\t39146: 20478,\n\t39147: 20463,\n\t39148: 20497,\n\t39149: 20486,\n\t39150: 20547,\n\t39151: 20551,\n\t39152: 26371,\n\t39153: 20565,\n\t39154: 20560,\n\t39155: 20552,\n\t39156: 20570,\n\t39157: 20566,\n\t39158: 20588,\n\t39159: 20600,\n\t39160: 20608,\n\t39161: 20634,\n\t39162: 20613,\n\t39163: 20660,\n\t39164: 20658,\n\t39232: 20681,\n\t39233: 20682,\n\t39234: 20659,\n\t39235: 20674,\n\t39236: 20694,\n\t39237: 20702,\n\t39238: 20709,\n\t39239: 20717,\n\t39240: 20707,\n\t39241: 20718,\n\t39242: 20729,\n\t39243: 20725,\n\t39244: 20745,\n\t39245: 20737,\n\t39246: 20738,\n\t39247: 20758,\n\t39248: 20757,\n\t39249: 20756,\n\t39250: 20762,\n\t39251: 20769,\n\t39252: 20794,\n\t39253: 20791,\n\t39254: 20796,\n\t39255: 20795,\n\t39256: 20799,\n\t39257: 20800,\n\t39258: 20818,\n\t39259: 20812,\n\t39260: 20820,\n\t39261: 20834,\n\t39262: 31480,\n\t39263: 20841,\n\t39264: 20842,\n\t39265: 20846,\n\t39266: 20864,\n\t39267: 20866,\n\t39268: 22232,\n\t39269: 20876,\n\t39270: 20873,\n\t39271: 20879,\n\t39272: 20881,\n\t39273: 20883,\n\t39274: 20885,\n\t39275: 20886,\n\t39276: 20900,\n\t39277: 20902,\n\t39278: 20898,\n\t39279: 20905,\n\t39280: 20906,\n\t39281: 20907,\n\t39282: 20915,\n\t39283: 20913,\n\t39284: 20914,\n\t39285: 20912,\n\t39286: 20917,\n\t39287: 20925,\n\t39288: 20933,\n\t39289: 20937,\n\t39290: 20955,\n\t39291: 20960,\n\t39292: 34389,\n\t39293: 20969,\n\t39294: 20973,\n\t39296: 20976,\n\t39297: 20981,\n\t39298: 20990,\n\t39299: 20996,\n\t39300: 21003,\n\t39301: 21012,\n\t39302: 21006,\n\t39303: 21031,\n\t39304: 21034,\n\t39305: 21038,\n\t39306: 21043,\n\t39307: 21049,\n\t39308: 21071,\n\t39309: 21060,\n\t39310: 21067,\n\t39311: 21068,\n\t39312: 21086,\n\t39313: 21076,\n\t39314: 21098,\n\t39315: 21108,\n\t39316: 21097,\n\t39317: 21107,\n\t39318: 21119,\n\t39319: 21117,\n\t39320: 21133,\n\t39321: 21140,\n\t39322: 21138,\n\t39323: 21105,\n\t39324: 21128,\n\t39325: 21137,\n\t39326: 36776,\n\t39327: 36775,\n\t39328: 21164,\n\t39329: 21165,\n\t39330: 21180,\n\t39331: 21173,\n\t39332: 21185,\n\t39333: 21197,\n\t39334: 21207,\n\t39335: 21214,\n\t39336: 21219,\n\t39337: 21222,\n\t39338: 39149,\n\t39339: 21216,\n\t39340: 21235,\n\t39341: 21237,\n\t39342: 21240,\n\t39343: 21241,\n\t39344: 21254,\n\t39345: 21256,\n\t39346: 30008,\n\t39347: 21261,\n\t39348: 21264,\n\t39349: 21263,\n\t39350: 21269,\n\t39351: 21274,\n\t39352: 21283,\n\t39353: 21295,\n\t39354: 21297,\n\t39355: 21299,\n\t39356: 21304,\n\t39357: 21312,\n\t39358: 21318,\n\t39359: 21317,\n\t39360: 19991,\n\t39361: 21321,\n\t39362: 21325,\n\t39363: 20950,\n\t39364: 21342,\n\t39365: 21353,\n\t39366: 21358,\n\t39367: 22808,\n\t39368: 21371,\n\t39369: 21367,\n\t39370: 21378,\n\t39371: 21398,\n\t39372: 21408,\n\t39373: 21414,\n\t39374: 21413,\n\t39375: 21422,\n\t39376: 21424,\n\t39377: 21430,\n\t39378: 21443,\n\t39379: 31762,\n\t39380: 38617,\n\t39381: 21471,\n\t39382: 26364,\n\t39383: 29166,\n\t39384: 21486,\n\t39385: 21480,\n\t39386: 21485,\n\t39387: 21498,\n\t39388: 21505,\n\t39389: 21565,\n\t39390: 21568,\n\t39391: 21548,\n\t39392: 21549,\n\t39393: 21564,\n\t39394: 21550,\n\t39395: 21558,\n\t39396: 21545,\n\t39397: 21533,\n\t39398: 21582,\n\t39399: 21647,\n\t39400: 21621,\n\t39401: 21646,\n\t39402: 21599,\n\t39403: 21617,\n\t39404: 21623,\n\t39405: 21616,\n\t39406: 21650,\n\t39407: 21627,\n\t39408: 21632,\n\t39409: 21622,\n\t39410: 21636,\n\t39411: 21648,\n\t39412: 21638,\n\t39413: 21703,\n\t39414: 21666,\n\t39415: 21688,\n\t39416: 21669,\n\t39417: 21676,\n\t39418: 21700,\n\t39419: 21704,\n\t39420: 21672,\n\t39488: 21675,\n\t39489: 21698,\n\t39490: 21668,\n\t39491: 21694,\n\t39492: 21692,\n\t39493: 21720,\n\t39494: 21733,\n\t39495: 21734,\n\t39496: 21775,\n\t39497: 21780,\n\t39498: 21757,\n\t39499: 21742,\n\t39500: 21741,\n\t39501: 21754,\n\t39502: 21730,\n\t39503: 21817,\n\t39504: 21824,\n\t39505: 21859,\n\t39506: 21836,\n\t39507: 21806,\n\t39508: 21852,\n\t39509: 21829,\n\t39510: 21846,\n\t39511: 21847,\n\t39512: 21816,\n\t39513: 21811,\n\t39514: 21853,\n\t39515: 21913,\n\t39516: 21888,\n\t39517: 21679,\n\t39518: 21898,\n\t39519: 21919,\n\t39520: 21883,\n\t39521: 21886,\n\t39522: 21912,\n\t39523: 21918,\n\t39524: 21934,\n\t39525: 21884,\n\t39526: 21891,\n\t39527: 21929,\n\t39528: 21895,\n\t39529: 21928,\n\t39530: 21978,\n\t39531: 21957,\n\t39532: 21983,\n\t39533: 21956,\n\t39534: 21980,\n\t39535: 21988,\n\t39536: 21972,\n\t39537: 22036,\n\t39538: 22007,\n\t39539: 22038,\n\t39540: 22014,\n\t39541: 22013,\n\t39542: 22043,\n\t39543: 22009,\n\t39544: 22094,\n\t39545: 22096,\n\t39546: 29151,\n\t39547: 22068,\n\t39548: 22070,\n\t39549: 22066,\n\t39550: 22072,\n\t39552: 22123,\n\t39553: 22116,\n\t39554: 22063,\n\t39555: 22124,\n\t39556: 22122,\n\t39557: 22150,\n\t39558: 22144,\n\t39559: 22154,\n\t39560: 22176,\n\t39561: 22164,\n\t39562: 22159,\n\t39563: 22181,\n\t39564: 22190,\n\t39565: 22198,\n\t39566: 22196,\n\t39567: 22210,\n\t39568: 22204,\n\t39569: 22209,\n\t39570: 22211,\n\t39571: 22208,\n\t39572: 22216,\n\t39573: 22222,\n\t39574: 22225,\n\t39575: 22227,\n\t39576: 22231,\n\t39577: 22254,\n\t39578: 22265,\n\t39579: 22272,\n\t39580: 22271,\n\t39581: 22276,\n\t39582: 22281,\n\t39583: 22280,\n\t39584: 22283,\n\t39585: 22285,\n\t39586: 22291,\n\t39587: 22296,\n\t39588: 22294,\n\t39589: 21959,\n\t39590: 22300,\n\t39591: 22310,\n\t39592: 22327,\n\t39593: 22328,\n\t39594: 22350,\n\t39595: 22331,\n\t39596: 22336,\n\t39597: 22351,\n\t39598: 22377,\n\t39599: 22464,\n\t39600: 22408,\n\t39601: 22369,\n\t39602: 22399,\n\t39603: 22409,\n\t39604: 22419,\n\t39605: 22432,\n\t39606: 22451,\n\t39607: 22436,\n\t39608: 22442,\n\t39609: 22448,\n\t39610: 22467,\n\t39611: 22470,\n\t39612: 22484,\n\t39613: 22482,\n\t39614: 22483,\n\t39615: 22538,\n\t39616: 22486,\n\t39617: 22499,\n\t39618: 22539,\n\t39619: 22553,\n\t39620: 22557,\n\t39621: 22642,\n\t39622: 22561,\n\t39623: 22626,\n\t39624: 22603,\n\t39625: 22640,\n\t39626: 27584,\n\t39627: 22610,\n\t39628: 22589,\n\t39629: 22649,\n\t39630: 22661,\n\t39631: 22713,\n\t39632: 22687,\n\t39633: 22699,\n\t39634: 22714,\n\t39635: 22750,\n\t39636: 22715,\n\t39637: 22712,\n\t39638: 22702,\n\t39639: 22725,\n\t39640: 22739,\n\t39641: 22737,\n\t39642: 22743,\n\t39643: 22745,\n\t39644: 22744,\n\t39645: 22757,\n\t39646: 22748,\n\t39647: 22756,\n\t39648: 22751,\n\t39649: 22767,\n\t39650: 22778,\n\t39651: 22777,\n\t39652: 22779,\n\t39653: 22780,\n\t39654: 22781,\n\t39655: 22786,\n\t39656: 22794,\n\t39657: 22800,\n\t39658: 22811,\n\t39659: 26790,\n\t39660: 22821,\n\t39661: 22828,\n\t39662: 22829,\n\t39663: 22834,\n\t39664: 22840,\n\t39665: 22846,\n\t39666: 31442,\n\t39667: 22869,\n\t39668: 22864,\n\t39669: 22862,\n\t39670: 22874,\n\t39671: 22872,\n\t39672: 22882,\n\t39673: 22880,\n\t39674: 22887,\n\t39675: 22892,\n\t39676: 22889,\n\t39744: 22904,\n\t39745: 22913,\n\t39746: 22941,\n\t39747: 20318,\n\t39748: 20395,\n\t39749: 22947,\n\t39750: 22962,\n\t39751: 22982,\n\t39752: 23016,\n\t39753: 23004,\n\t39754: 22925,\n\t39755: 23001,\n\t39756: 23002,\n\t39757: 23077,\n\t39758: 23071,\n\t39759: 23057,\n\t39760: 23068,\n\t39761: 23049,\n\t39762: 23066,\n\t39763: 23104,\n\t39764: 23148,\n\t39765: 23113,\n\t39766: 23093,\n\t39767: 23094,\n\t39768: 23138,\n\t39769: 23146,\n\t39770: 23194,\n\t39771: 23228,\n\t39772: 23230,\n\t39773: 23243,\n\t39774: 23234,\n\t39775: 23229,\n\t39776: 23267,\n\t39777: 23255,\n\t39778: 23270,\n\t39779: 23273,\n\t39780: 23254,\n\t39781: 23290,\n\t39782: 23291,\n\t39783: 23308,\n\t39784: 23307,\n\t39785: 23318,\n\t39786: 23346,\n\t39787: 23248,\n\t39788: 23338,\n\t39789: 23350,\n\t39790: 23358,\n\t39791: 23363,\n\t39792: 23365,\n\t39793: 23360,\n\t39794: 23377,\n\t39795: 23381,\n\t39796: 23386,\n\t39797: 23387,\n\t39798: 23397,\n\t39799: 23401,\n\t39800: 23408,\n\t39801: 23411,\n\t39802: 23413,\n\t39803: 23416,\n\t39804: 25992,\n\t39805: 23418,\n\t39806: 23424,\n\t39808: 23427,\n\t39809: 23462,\n\t39810: 23480,\n\t39811: 23491,\n\t39812: 23495,\n\t39813: 23497,\n\t39814: 23508,\n\t39815: 23504,\n\t39816: 23524,\n\t39817: 23526,\n\t39818: 23522,\n\t39819: 23518,\n\t39820: 23525,\n\t39821: 23531,\n\t39822: 23536,\n\t39823: 23542,\n\t39824: 23539,\n\t39825: 23557,\n\t39826: 23559,\n\t39827: 23560,\n\t39828: 23565,\n\t39829: 23571,\n\t39830: 23584,\n\t39831: 23586,\n\t39832: 23592,\n\t39833: 23608,\n\t39834: 23609,\n\t39835: 23617,\n\t39836: 23622,\n\t39837: 23630,\n\t39838: 23635,\n\t39839: 23632,\n\t39840: 23631,\n\t39841: 23409,\n\t39842: 23660,\n\t39843: 23662,\n\t39844: 20066,\n\t39845: 23670,\n\t39846: 23673,\n\t39847: 23692,\n\t39848: 23697,\n\t39849: 23700,\n\t39850: 22939,\n\t39851: 23723,\n\t39852: 23739,\n\t39853: 23734,\n\t39854: 23740,\n\t39855: 23735,\n\t39856: 23749,\n\t39857: 23742,\n\t39858: 23751,\n\t39859: 23769,\n\t39860: 23785,\n\t39861: 23805,\n\t39862: 23802,\n\t39863: 23789,\n\t39864: 23948,\n\t39865: 23786,\n\t39866: 23819,\n\t39867: 23829,\n\t39868: 23831,\n\t39869: 23900,\n\t39870: 23839,\n\t39871: 23835,\n\t39872: 23825,\n\t39873: 23828,\n\t39874: 23842,\n\t39875: 23834,\n\t39876: 23833,\n\t39877: 23832,\n\t39878: 23884,\n\t39879: 23890,\n\t39880: 23886,\n\t39881: 23883,\n\t39882: 23916,\n\t39883: 23923,\n\t39884: 23926,\n\t39885: 23943,\n\t39886: 23940,\n\t39887: 23938,\n\t39888: 23970,\n\t39889: 23965,\n\t39890: 23980,\n\t39891: 23982,\n\t39892: 23997,\n\t39893: 23952,\n\t39894: 23991,\n\t39895: 23996,\n\t39896: 24009,\n\t39897: 24013,\n\t39898: 24019,\n\t39899: 24018,\n\t39900: 24022,\n\t39901: 24027,\n\t39902: 24043,\n\t39903: 24050,\n\t39904: 24053,\n\t39905: 24075,\n\t39906: 24090,\n\t39907: 24089,\n\t39908: 24081,\n\t39909: 24091,\n\t39910: 24118,\n\t39911: 24119,\n\t39912: 24132,\n\t39913: 24131,\n\t39914: 24128,\n\t39915: 24142,\n\t39916: 24151,\n\t39917: 24148,\n\t39918: 24159,\n\t39919: 24162,\n\t39920: 24164,\n\t39921: 24135,\n\t39922: 24181,\n\t39923: 24182,\n\t39924: 24186,\n\t39925: 40636,\n\t39926: 24191,\n\t39927: 24224,\n\t39928: 24257,\n\t39929: 24258,\n\t39930: 24264,\n\t39931: 24272,\n\t39932: 24271,\n\t40000: 24278,\n\t40001: 24291,\n\t40002: 24285,\n\t40003: 24282,\n\t40004: 24283,\n\t40005: 24290,\n\t40006: 24289,\n\t40007: 24296,\n\t40008: 24297,\n\t40009: 24300,\n\t40010: 24305,\n\t40011: 24307,\n\t40012: 24304,\n\t40013: 24308,\n\t40014: 24312,\n\t40015: 24318,\n\t40016: 24323,\n\t40017: 24329,\n\t40018: 24413,\n\t40019: 24412,\n\t40020: 24331,\n\t40021: 24337,\n\t40022: 24342,\n\t40023: 24361,\n\t40024: 24365,\n\t40025: 24376,\n\t40026: 24385,\n\t40027: 24392,\n\t40028: 24396,\n\t40029: 24398,\n\t40030: 24367,\n\t40031: 24401,\n\t40032: 24406,\n\t40033: 24407,\n\t40034: 24409,\n\t40035: 24417,\n\t40036: 24429,\n\t40037: 24435,\n\t40038: 24439,\n\t40039: 24451,\n\t40040: 24450,\n\t40041: 24447,\n\t40042: 24458,\n\t40043: 24456,\n\t40044: 24465,\n\t40045: 24455,\n\t40046: 24478,\n\t40047: 24473,\n\t40048: 24472,\n\t40049: 24480,\n\t40050: 24488,\n\t40051: 24493,\n\t40052: 24508,\n\t40053: 24534,\n\t40054: 24571,\n\t40055: 24548,\n\t40056: 24568,\n\t40057: 24561,\n\t40058: 24541,\n\t40059: 24755,\n\t40060: 24575,\n\t40061: 24609,\n\t40062: 24672,\n\t40064: 24601,\n\t40065: 24592,\n\t40066: 24617,\n\t40067: 24590,\n\t40068: 24625,\n\t40069: 24603,\n\t40070: 24597,\n\t40071: 24619,\n\t40072: 24614,\n\t40073: 24591,\n\t40074: 24634,\n\t40075: 24666,\n\t40076: 24641,\n\t40077: 24682,\n\t40078: 24695,\n\t40079: 24671,\n\t40080: 24650,\n\t40081: 24646,\n\t40082: 24653,\n\t40083: 24675,\n\t40084: 24643,\n\t40085: 24676,\n\t40086: 24642,\n\t40087: 24684,\n\t40088: 24683,\n\t40089: 24665,\n\t40090: 24705,\n\t40091: 24717,\n\t40092: 24807,\n\t40093: 24707,\n\t40094: 24730,\n\t40095: 24708,\n\t40096: 24731,\n\t40097: 24726,\n\t40098: 24727,\n\t40099: 24722,\n\t40100: 24743,\n\t40101: 24715,\n\t40102: 24801,\n\t40103: 24760,\n\t40104: 24800,\n\t40105: 24787,\n\t40106: 24756,\n\t40107: 24560,\n\t40108: 24765,\n\t40109: 24774,\n\t40110: 24757,\n\t40111: 24792,\n\t40112: 24909,\n\t40113: 24853,\n\t40114: 24838,\n\t40115: 24822,\n\t40116: 24823,\n\t40117: 24832,\n\t40118: 24820,\n\t40119: 24826,\n\t40120: 24835,\n\t40121: 24865,\n\t40122: 24827,\n\t40123: 24817,\n\t40124: 24845,\n\t40125: 24846,\n\t40126: 24903,\n\t40127: 24894,\n\t40128: 24872,\n\t40129: 24871,\n\t40130: 24906,\n\t40131: 24895,\n\t40132: 24892,\n\t40133: 24876,\n\t40134: 24884,\n\t40135: 24893,\n\t40136: 24898,\n\t40137: 24900,\n\t40138: 24947,\n\t40139: 24951,\n\t40140: 24920,\n\t40141: 24921,\n\t40142: 24922,\n\t40143: 24939,\n\t40144: 24948,\n\t40145: 24943,\n\t40146: 24933,\n\t40147: 24945,\n\t40148: 24927,\n\t40149: 24925,\n\t40150: 24915,\n\t40151: 24949,\n\t40152: 24985,\n\t40153: 24982,\n\t40154: 24967,\n\t40155: 25004,\n\t40156: 24980,\n\t40157: 24986,\n\t40158: 24970,\n\t40159: 24977,\n\t40160: 25003,\n\t40161: 25006,\n\t40162: 25036,\n\t40163: 25034,\n\t40164: 25033,\n\t40165: 25079,\n\t40166: 25032,\n\t40167: 25027,\n\t40168: 25030,\n\t40169: 25018,\n\t40170: 25035,\n\t40171: 32633,\n\t40172: 25037,\n\t40173: 25062,\n\t40174: 25059,\n\t40175: 25078,\n\t40176: 25082,\n\t40177: 25076,\n\t40178: 25087,\n\t40179: 25085,\n\t40180: 25084,\n\t40181: 25086,\n\t40182: 25088,\n\t40183: 25096,\n\t40184: 25097,\n\t40185: 25101,\n\t40186: 25100,\n\t40187: 25108,\n\t40188: 25115,\n\t40256: 25118,\n\t40257: 25121,\n\t40258: 25130,\n\t40259: 25134,\n\t40260: 25136,\n\t40261: 25138,\n\t40262: 25139,\n\t40263: 25153,\n\t40264: 25166,\n\t40265: 25182,\n\t40266: 25187,\n\t40267: 25179,\n\t40268: 25184,\n\t40269: 25192,\n\t40270: 25212,\n\t40271: 25218,\n\t40272: 25225,\n\t40273: 25214,\n\t40274: 25234,\n\t40275: 25235,\n\t40276: 25238,\n\t40277: 25300,\n\t40278: 25219,\n\t40279: 25236,\n\t40280: 25303,\n\t40281: 25297,\n\t40282: 25275,\n\t40283: 25295,\n\t40284: 25343,\n\t40285: 25286,\n\t40286: 25812,\n\t40287: 25288,\n\t40288: 25308,\n\t40289: 25292,\n\t40290: 25290,\n\t40291: 25282,\n\t40292: 25287,\n\t40293: 25243,\n\t40294: 25289,\n\t40295: 25356,\n\t40296: 25326,\n\t40297: 25329,\n\t40298: 25383,\n\t40299: 25346,\n\t40300: 25352,\n\t40301: 25327,\n\t40302: 25333,\n\t40303: 25424,\n\t40304: 25406,\n\t40305: 25421,\n\t40306: 25628,\n\t40307: 25423,\n\t40308: 25494,\n\t40309: 25486,\n\t40310: 25472,\n\t40311: 25515,\n\t40312: 25462,\n\t40313: 25507,\n\t40314: 25487,\n\t40315: 25481,\n\t40316: 25503,\n\t40317: 25525,\n\t40318: 25451,\n\t40320: 25449,\n\t40321: 25534,\n\t40322: 25577,\n\t40323: 25536,\n\t40324: 25542,\n\t40325: 25571,\n\t40326: 25545,\n\t40327: 25554,\n\t40328: 25590,\n\t40329: 25540,\n\t40330: 25622,\n\t40331: 25652,\n\t40332: 25606,\n\t40333: 25619,\n\t40334: 25638,\n\t40335: 25654,\n\t40336: 25885,\n\t40337: 25623,\n\t40338: 25640,\n\t40339: 25615,\n\t40340: 25703,\n\t40341: 25711,\n\t40342: 25718,\n\t40343: 25678,\n\t40344: 25898,\n\t40345: 25749,\n\t40346: 25747,\n\t40347: 25765,\n\t40348: 25769,\n\t40349: 25736,\n\t40350: 25788,\n\t40351: 25818,\n\t40352: 25810,\n\t40353: 25797,\n\t40354: 25799,\n\t40355: 25787,\n\t40356: 25816,\n\t40357: 25794,\n\t40358: 25841,\n\t40359: 25831,\n\t40360: 33289,\n\t40361: 25824,\n\t40362: 25825,\n\t40363: 25260,\n\t40364: 25827,\n\t40365: 25839,\n\t40366: 25900,\n\t40367: 25846,\n\t40368: 25844,\n\t40369: 25842,\n\t40370: 25850,\n\t40371: 25856,\n\t40372: 25853,\n\t40373: 25880,\n\t40374: 25884,\n\t40375: 25861,\n\t40376: 25892,\n\t40377: 25891,\n\t40378: 25899,\n\t40379: 25908,\n\t40380: 25909,\n\t40381: 25911,\n\t40382: 25910,\n\t40383: 25912,\n\t40384: 30027,\n\t40385: 25928,\n\t40386: 25942,\n\t40387: 25941,\n\t40388: 25933,\n\t40389: 25944,\n\t40390: 25950,\n\t40391: 25949,\n\t40392: 25970,\n\t40393: 25976,\n\t40394: 25986,\n\t40395: 25987,\n\t40396: 35722,\n\t40397: 26011,\n\t40398: 26015,\n\t40399: 26027,\n\t40400: 26039,\n\t40401: 26051,\n\t40402: 26054,\n\t40403: 26049,\n\t40404: 26052,\n\t40405: 26060,\n\t40406: 26066,\n\t40407: 26075,\n\t40408: 26073,\n\t40409: 26080,\n\t40410: 26081,\n\t40411: 26097,\n\t40412: 26482,\n\t40413: 26122,\n\t40414: 26115,\n\t40415: 26107,\n\t40416: 26483,\n\t40417: 26165,\n\t40418: 26166,\n\t40419: 26164,\n\t40420: 26140,\n\t40421: 26191,\n\t40422: 26180,\n\t40423: 26185,\n\t40424: 26177,\n\t40425: 26206,\n\t40426: 26205,\n\t40427: 26212,\n\t40428: 26215,\n\t40429: 26216,\n\t40430: 26207,\n\t40431: 26210,\n\t40432: 26224,\n\t40433: 26243,\n\t40434: 26248,\n\t40435: 26254,\n\t40436: 26249,\n\t40437: 26244,\n\t40438: 26264,\n\t40439: 26269,\n\t40440: 26305,\n\t40441: 26297,\n\t40442: 26313,\n\t40443: 26302,\n\t40444: 26300,\n\t40512: 26308,\n\t40513: 26296,\n\t40514: 26326,\n\t40515: 26330,\n\t40516: 26336,\n\t40517: 26175,\n\t40518: 26342,\n\t40519: 26345,\n\t40520: 26352,\n\t40521: 26357,\n\t40522: 26359,\n\t40523: 26383,\n\t40524: 26390,\n\t40525: 26398,\n\t40526: 26406,\n\t40527: 26407,\n\t40528: 38712,\n\t40529: 26414,\n\t40530: 26431,\n\t40531: 26422,\n\t40532: 26433,\n\t40533: 26424,\n\t40534: 26423,\n\t40535: 26438,\n\t40536: 26462,\n\t40537: 26464,\n\t40538: 26457,\n\t40539: 26467,\n\t40540: 26468,\n\t40541: 26505,\n\t40542: 26480,\n\t40543: 26537,\n\t40544: 26492,\n\t40545: 26474,\n\t40546: 26508,\n\t40547: 26507,\n\t40548: 26534,\n\t40549: 26529,\n\t40550: 26501,\n\t40551: 26551,\n\t40552: 26607,\n\t40553: 26548,\n\t40554: 26604,\n\t40555: 26547,\n\t40556: 26601,\n\t40557: 26552,\n\t40558: 26596,\n\t40559: 26590,\n\t40560: 26589,\n\t40561: 26594,\n\t40562: 26606,\n\t40563: 26553,\n\t40564: 26574,\n\t40565: 26566,\n\t40566: 26599,\n\t40567: 27292,\n\t40568: 26654,\n\t40569: 26694,\n\t40570: 26665,\n\t40571: 26688,\n\t40572: 26701,\n\t40573: 26674,\n\t40574: 26702,\n\t40576: 26803,\n\t40577: 26667,\n\t40578: 26713,\n\t40579: 26723,\n\t40580: 26743,\n\t40581: 26751,\n\t40582: 26783,\n\t40583: 26767,\n\t40584: 26797,\n\t40585: 26772,\n\t40586: 26781,\n\t40587: 26779,\n\t40588: 26755,\n\t40589: 27310,\n\t40590: 26809,\n\t40591: 26740,\n\t40592: 26805,\n\t40593: 26784,\n\t40594: 26810,\n\t40595: 26895,\n\t40596: 26765,\n\t40597: 26750,\n\t40598: 26881,\n\t40599: 26826,\n\t40600: 26888,\n\t40601: 26840,\n\t40602: 26914,\n\t40603: 26918,\n\t40604: 26849,\n\t40605: 26892,\n\t40606: 26829,\n\t40607: 26836,\n\t40608: 26855,\n\t40609: 26837,\n\t40610: 26934,\n\t40611: 26898,\n\t40612: 26884,\n\t40613: 26839,\n\t40614: 26851,\n\t40615: 26917,\n\t40616: 26873,\n\t40617: 26848,\n\t40618: 26863,\n\t40619: 26920,\n\t40620: 26922,\n\t40621: 26906,\n\t40622: 26915,\n\t40623: 26913,\n\t40624: 26822,\n\t40625: 27001,\n\t40626: 26999,\n\t40627: 26972,\n\t40628: 27000,\n\t40629: 26987,\n\t40630: 26964,\n\t40631: 27006,\n\t40632: 26990,\n\t40633: 26937,\n\t40634: 26996,\n\t40635: 26941,\n\t40636: 26969,\n\t40637: 26928,\n\t40638: 26977,\n\t40639: 26974,\n\t40640: 26973,\n\t40641: 27009,\n\t40642: 26986,\n\t40643: 27058,\n\t40644: 27054,\n\t40645: 27088,\n\t40646: 27071,\n\t40647: 27073,\n\t40648: 27091,\n\t40649: 27070,\n\t40650: 27086,\n\t40651: 23528,\n\t40652: 27082,\n\t40653: 27101,\n\t40654: 27067,\n\t40655: 27075,\n\t40656: 27047,\n\t40657: 27182,\n\t40658: 27025,\n\t40659: 27040,\n\t40660: 27036,\n\t40661: 27029,\n\t40662: 27060,\n\t40663: 27102,\n\t40664: 27112,\n\t40665: 27138,\n\t40666: 27163,\n\t40667: 27135,\n\t40668: 27402,\n\t40669: 27129,\n\t40670: 27122,\n\t40671: 27111,\n\t40672: 27141,\n\t40673: 27057,\n\t40674: 27166,\n\t40675: 27117,\n\t40676: 27156,\n\t40677: 27115,\n\t40678: 27146,\n\t40679: 27154,\n\t40680: 27329,\n\t40681: 27171,\n\t40682: 27155,\n\t40683: 27204,\n\t40684: 27148,\n\t40685: 27250,\n\t40686: 27190,\n\t40687: 27256,\n\t40688: 27207,\n\t40689: 27234,\n\t40690: 27225,\n\t40691: 27238,\n\t40692: 27208,\n\t40693: 27192,\n\t40694: 27170,\n\t40695: 27280,\n\t40696: 27277,\n\t40697: 27296,\n\t40698: 27268,\n\t40699: 27298,\n\t40700: 27299,\n\t40768: 27287,\n\t40769: 34327,\n\t40770: 27323,\n\t40771: 27331,\n\t40772: 27330,\n\t40773: 27320,\n\t40774: 27315,\n\t40775: 27308,\n\t40776: 27358,\n\t40777: 27345,\n\t40778: 27359,\n\t40779: 27306,\n\t40780: 27354,\n\t40781: 27370,\n\t40782: 27387,\n\t40783: 27397,\n\t40784: 34326,\n\t40785: 27386,\n\t40786: 27410,\n\t40787: 27414,\n\t40788: 39729,\n\t40789: 27423,\n\t40790: 27448,\n\t40791: 27447,\n\t40792: 30428,\n\t40793: 27449,\n\t40794: 39150,\n\t40795: 27463,\n\t40796: 27459,\n\t40797: 27465,\n\t40798: 27472,\n\t40799: 27481,\n\t40800: 27476,\n\t40801: 27483,\n\t40802: 27487,\n\t40803: 27489,\n\t40804: 27512,\n\t40805: 27513,\n\t40806: 27519,\n\t40807: 27520,\n\t40808: 27524,\n\t40809: 27523,\n\t40810: 27533,\n\t40811: 27544,\n\t40812: 27541,\n\t40813: 27550,\n\t40814: 27556,\n\t40815: 27562,\n\t40816: 27563,\n\t40817: 27567,\n\t40818: 27570,\n\t40819: 27569,\n\t40820: 27571,\n\t40821: 27575,\n\t40822: 27580,\n\t40823: 27590,\n\t40824: 27595,\n\t40825: 27603,\n\t40826: 27615,\n\t40827: 27628,\n\t40828: 27627,\n\t40829: 27635,\n\t40830: 27631,\n\t40832: 40638,\n\t40833: 27656,\n\t40834: 27667,\n\t40835: 27668,\n\t40836: 27675,\n\t40837: 27684,\n\t40838: 27683,\n\t40839: 27742,\n\t40840: 27733,\n\t40841: 27746,\n\t40842: 27754,\n\t40843: 27778,\n\t40844: 27789,\n\t40845: 27802,\n\t40846: 27777,\n\t40847: 27803,\n\t40848: 27774,\n\t40849: 27752,\n\t40850: 27763,\n\t40851: 27794,\n\t40852: 27792,\n\t40853: 27844,\n\t40854: 27889,\n\t40855: 27859,\n\t40856: 27837,\n\t40857: 27863,\n\t40858: 27845,\n\t40859: 27869,\n\t40860: 27822,\n\t40861: 27825,\n\t40862: 27838,\n\t40863: 27834,\n\t40864: 27867,\n\t40865: 27887,\n\t40866: 27865,\n\t40867: 27882,\n\t40868: 27935,\n\t40869: 34893,\n\t40870: 27958,\n\t40871: 27947,\n\t40872: 27965,\n\t40873: 27960,\n\t40874: 27929,\n\t40875: 27957,\n\t40876: 27955,\n\t40877: 27922,\n\t40878: 27916,\n\t40879: 28003,\n\t40880: 28051,\n\t40881: 28004,\n\t40882: 27994,\n\t40883: 28025,\n\t40884: 27993,\n\t40885: 28046,\n\t40886: 28053,\n\t40887: 28644,\n\t40888: 28037,\n\t40889: 28153,\n\t40890: 28181,\n\t40891: 28170,\n\t40892: 28085,\n\t40893: 28103,\n\t40894: 28134,\n\t40895: 28088,\n\t40896: 28102,\n\t40897: 28140,\n\t40898: 28126,\n\t40899: 28108,\n\t40900: 28136,\n\t40901: 28114,\n\t40902: 28101,\n\t40903: 28154,\n\t40904: 28121,\n\t40905: 28132,\n\t40906: 28117,\n\t40907: 28138,\n\t40908: 28142,\n\t40909: 28205,\n\t40910: 28270,\n\t40911: 28206,\n\t40912: 28185,\n\t40913: 28274,\n\t40914: 28255,\n\t40915: 28222,\n\t40916: 28195,\n\t40917: 28267,\n\t40918: 28203,\n\t40919: 28278,\n\t40920: 28237,\n\t40921: 28191,\n\t40922: 28227,\n\t40923: 28218,\n\t40924: 28238,\n\t40925: 28196,\n\t40926: 28415,\n\t40927: 28189,\n\t40928: 28216,\n\t40929: 28290,\n\t40930: 28330,\n\t40931: 28312,\n\t40932: 28361,\n\t40933: 28343,\n\t40934: 28371,\n\t40935: 28349,\n\t40936: 28335,\n\t40937: 28356,\n\t40938: 28338,\n\t40939: 28372,\n\t40940: 28373,\n\t40941: 28303,\n\t40942: 28325,\n\t40943: 28354,\n\t40944: 28319,\n\t40945: 28481,\n\t40946: 28433,\n\t40947: 28748,\n\t40948: 28396,\n\t40949: 28408,\n\t40950: 28414,\n\t40951: 28479,\n\t40952: 28402,\n\t40953: 28465,\n\t40954: 28399,\n\t40955: 28466,\n\t40956: 28364,\n\t57408: 28478,\n\t57409: 28435,\n\t57410: 28407,\n\t57411: 28550,\n\t57412: 28538,\n\t57413: 28536,\n\t57414: 28545,\n\t57415: 28544,\n\t57416: 28527,\n\t57417: 28507,\n\t57418: 28659,\n\t57419: 28525,\n\t57420: 28546,\n\t57421: 28540,\n\t57422: 28504,\n\t57423: 28558,\n\t57424: 28561,\n\t57425: 28610,\n\t57426: 28518,\n\t57427: 28595,\n\t57428: 28579,\n\t57429: 28577,\n\t57430: 28580,\n\t57431: 28601,\n\t57432: 28614,\n\t57433: 28586,\n\t57434: 28639,\n\t57435: 28629,\n\t57436: 28652,\n\t57437: 28628,\n\t57438: 28632,\n\t57439: 28657,\n\t57440: 28654,\n\t57441: 28635,\n\t57442: 28681,\n\t57443: 28683,\n\t57444: 28666,\n\t57445: 28689,\n\t57446: 28673,\n\t57447: 28687,\n\t57448: 28670,\n\t57449: 28699,\n\t57450: 28698,\n\t57451: 28532,\n\t57452: 28701,\n\t57453: 28696,\n\t57454: 28703,\n\t57455: 28720,\n\t57456: 28734,\n\t57457: 28722,\n\t57458: 28753,\n\t57459: 28771,\n\t57460: 28825,\n\t57461: 28818,\n\t57462: 28847,\n\t57463: 28913,\n\t57464: 28844,\n\t57465: 28856,\n\t57466: 28851,\n\t57467: 28846,\n\t57468: 28895,\n\t57469: 28875,\n\t57470: 28893,\n\t57472: 28889,\n\t57473: 28937,\n\t57474: 28925,\n\t57475: 28956,\n\t57476: 28953,\n\t57477: 29029,\n\t57478: 29013,\n\t57479: 29064,\n\t57480: 29030,\n\t57481: 29026,\n\t57482: 29004,\n\t57483: 29014,\n\t57484: 29036,\n\t57485: 29071,\n\t57486: 29179,\n\t57487: 29060,\n\t57488: 29077,\n\t57489: 29096,\n\t57490: 29100,\n\t57491: 29143,\n\t57492: 29113,\n\t57493: 29118,\n\t57494: 29138,\n\t57495: 29129,\n\t57496: 29140,\n\t57497: 29134,\n\t57498: 29152,\n\t57499: 29164,\n\t57500: 29159,\n\t57501: 29173,\n\t57502: 29180,\n\t57503: 29177,\n\t57504: 29183,\n\t57505: 29197,\n\t57506: 29200,\n\t57507: 29211,\n\t57508: 29224,\n\t57509: 29229,\n\t57510: 29228,\n\t57511: 29232,\n\t57512: 29234,\n\t57513: 29243,\n\t57514: 29244,\n\t57515: 29247,\n\t57516: 29248,\n\t57517: 29254,\n\t57518: 29259,\n\t57519: 29272,\n\t57520: 29300,\n\t57521: 29310,\n\t57522: 29314,\n\t57523: 29313,\n\t57524: 29319,\n\t57525: 29330,\n\t57526: 29334,\n\t57527: 29346,\n\t57528: 29351,\n\t57529: 29369,\n\t57530: 29362,\n\t57531: 29379,\n\t57532: 29382,\n\t57533: 29380,\n\t57534: 29390,\n\t57535: 29394,\n\t57536: 29410,\n\t57537: 29408,\n\t57538: 29409,\n\t57539: 29433,\n\t57540: 29431,\n\t57541: 20495,\n\t57542: 29463,\n\t57543: 29450,\n\t57544: 29468,\n\t57545: 29462,\n\t57546: 29469,\n\t57547: 29492,\n\t57548: 29487,\n\t57549: 29481,\n\t57550: 29477,\n\t57551: 29502,\n\t57552: 29518,\n\t57553: 29519,\n\t57554: 40664,\n\t57555: 29527,\n\t57556: 29546,\n\t57557: 29544,\n\t57558: 29552,\n\t57559: 29560,\n\t57560: 29557,\n\t57561: 29563,\n\t57562: 29562,\n\t57563: 29640,\n\t57564: 29619,\n\t57565: 29646,\n\t57566: 29627,\n\t57567: 29632,\n\t57568: 29669,\n\t57569: 29678,\n\t57570: 29662,\n\t57571: 29858,\n\t57572: 29701,\n\t57573: 29807,\n\t57574: 29733,\n\t57575: 29688,\n\t57576: 29746,\n\t57577: 29754,\n\t57578: 29781,\n\t57579: 29759,\n\t57580: 29791,\n\t57581: 29785,\n\t57582: 29761,\n\t57583: 29788,\n\t57584: 29801,\n\t57585: 29808,\n\t57586: 29795,\n\t57587: 29802,\n\t57588: 29814,\n\t57589: 29822,\n\t57590: 29835,\n\t57591: 29854,\n\t57592: 29863,\n\t57593: 29898,\n\t57594: 29903,\n\t57595: 29908,\n\t57596: 29681,\n\t57664: 29920,\n\t57665: 29923,\n\t57666: 29927,\n\t57667: 29929,\n\t57668: 29934,\n\t57669: 29938,\n\t57670: 29936,\n\t57671: 29937,\n\t57672: 29944,\n\t57673: 29943,\n\t57674: 29956,\n\t57675: 29955,\n\t57676: 29957,\n\t57677: 29964,\n\t57678: 29966,\n\t57679: 29965,\n\t57680: 29973,\n\t57681: 29971,\n\t57682: 29982,\n\t57683: 29990,\n\t57684: 29996,\n\t57685: 30012,\n\t57686: 30020,\n\t57687: 30029,\n\t57688: 30026,\n\t57689: 30025,\n\t57690: 30043,\n\t57691: 30022,\n\t57692: 30042,\n\t57693: 30057,\n\t57694: 30052,\n\t57695: 30055,\n\t57696: 30059,\n\t57697: 30061,\n\t57698: 30072,\n\t57699: 30070,\n\t57700: 30086,\n\t57701: 30087,\n\t57702: 30068,\n\t57703: 30090,\n\t57704: 30089,\n\t57705: 30082,\n\t57706: 30100,\n\t57707: 30106,\n\t57708: 30109,\n\t57709: 30117,\n\t57710: 30115,\n\t57711: 30146,\n\t57712: 30131,\n\t57713: 30147,\n\t57714: 30133,\n\t57715: 30141,\n\t57716: 30136,\n\t57717: 30140,\n\t57718: 30129,\n\t57719: 30157,\n\t57720: 30154,\n\t57721: 30162,\n\t57722: 30169,\n\t57723: 30179,\n\t57724: 30174,\n\t57725: 30206,\n\t57726: 30207,\n\t57728: 30204,\n\t57729: 30209,\n\t57730: 30192,\n\t57731: 30202,\n\t57732: 30194,\n\t57733: 30195,\n\t57734: 30219,\n\t57735: 30221,\n\t57736: 30217,\n\t57737: 30239,\n\t57738: 30247,\n\t57739: 30240,\n\t57740: 30241,\n\t57741: 30242,\n\t57742: 30244,\n\t57743: 30260,\n\t57744: 30256,\n\t57745: 30267,\n\t57746: 30279,\n\t57747: 30280,\n\t57748: 30278,\n\t57749: 30300,\n\t57750: 30296,\n\t57751: 30305,\n\t57752: 30306,\n\t57753: 30312,\n\t57754: 30313,\n\t57755: 30314,\n\t57756: 30311,\n\t57757: 30316,\n\t57758: 30320,\n\t57759: 30322,\n\t57760: 30326,\n\t57761: 30328,\n\t57762: 30332,\n\t57763: 30336,\n\t57764: 30339,\n\t57765: 30344,\n\t57766: 30347,\n\t57767: 30350,\n\t57768: 30358,\n\t57769: 30355,\n\t57770: 30361,\n\t57771: 30362,\n\t57772: 30384,\n\t57773: 30388,\n\t57774: 30392,\n\t57775: 30393,\n\t57776: 30394,\n\t57777: 30402,\n\t57778: 30413,\n\t57779: 30422,\n\t57780: 30418,\n\t57781: 30430,\n\t57782: 30433,\n\t57783: 30437,\n\t57784: 30439,\n\t57785: 30442,\n\t57786: 34351,\n\t57787: 30459,\n\t57788: 30472,\n\t57789: 30471,\n\t57790: 30468,\n\t57791: 30505,\n\t57792: 30500,\n\t57793: 30494,\n\t57794: 30501,\n\t57795: 30502,\n\t57796: 30491,\n\t57797: 30519,\n\t57798: 30520,\n\t57799: 30535,\n\t57800: 30554,\n\t57801: 30568,\n\t57802: 30571,\n\t57803: 30555,\n\t57804: 30565,\n\t57805: 30591,\n\t57806: 30590,\n\t57807: 30585,\n\t57808: 30606,\n\t57809: 30603,\n\t57810: 30609,\n\t57811: 30624,\n\t57812: 30622,\n\t57813: 30640,\n\t57814: 30646,\n\t57815: 30649,\n\t57816: 30655,\n\t57817: 30652,\n\t57818: 30653,\n\t57819: 30651,\n\t57820: 30663,\n\t57821: 30669,\n\t57822: 30679,\n\t57823: 30682,\n\t57824: 30684,\n\t57825: 30691,\n\t57826: 30702,\n\t57827: 30716,\n\t57828: 30732,\n\t57829: 30738,\n\t57830: 31014,\n\t57831: 30752,\n\t57832: 31018,\n\t57833: 30789,\n\t57834: 30862,\n\t57835: 30836,\n\t57836: 30854,\n\t57837: 30844,\n\t57838: 30874,\n\t57839: 30860,\n\t57840: 30883,\n\t57841: 30901,\n\t57842: 30890,\n\t57843: 30895,\n\t57844: 30929,\n\t57845: 30918,\n\t57846: 30923,\n\t57847: 30932,\n\t57848: 30910,\n\t57849: 30908,\n\t57850: 30917,\n\t57851: 30922,\n\t57852: 30956,\n\t57920: 30951,\n\t57921: 30938,\n\t57922: 30973,\n\t57923: 30964,\n\t57924: 30983,\n\t57925: 30994,\n\t57926: 30993,\n\t57927: 31001,\n\t57928: 31020,\n\t57929: 31019,\n\t57930: 31040,\n\t57931: 31072,\n\t57932: 31063,\n\t57933: 31071,\n\t57934: 31066,\n\t57935: 31061,\n\t57936: 31059,\n\t57937: 31098,\n\t57938: 31103,\n\t57939: 31114,\n\t57940: 31133,\n\t57941: 31143,\n\t57942: 40779,\n\t57943: 31146,\n\t57944: 31150,\n\t57945: 31155,\n\t57946: 31161,\n\t57947: 31162,\n\t57948: 31177,\n\t57949: 31189,\n\t57950: 31207,\n\t57951: 31212,\n\t57952: 31201,\n\t57953: 31203,\n\t57954: 31240,\n\t57955: 31245,\n\t57956: 31256,\n\t57957: 31257,\n\t57958: 31264,\n\t57959: 31263,\n\t57960: 31104,\n\t57961: 31281,\n\t57962: 31291,\n\t57963: 31294,\n\t57964: 31287,\n\t57965: 31299,\n\t57966: 31319,\n\t57967: 31305,\n\t57968: 31329,\n\t57969: 31330,\n\t57970: 31337,\n\t57971: 40861,\n\t57972: 31344,\n\t57973: 31353,\n\t57974: 31357,\n\t57975: 31368,\n\t57976: 31383,\n\t57977: 31381,\n\t57978: 31384,\n\t57979: 31382,\n\t57980: 31401,\n\t57981: 31432,\n\t57982: 31408,\n\t57984: 31414,\n\t57985: 31429,\n\t57986: 31428,\n\t57987: 31423,\n\t57988: 36995,\n\t57989: 31431,\n\t57990: 31434,\n\t57991: 31437,\n\t57992: 31439,\n\t57993: 31445,\n\t57994: 31443,\n\t57995: 31449,\n\t57996: 31450,\n\t57997: 31453,\n\t57998: 31457,\n\t57999: 31458,\n\t58000: 31462,\n\t58001: 31469,\n\t58002: 31472,\n\t58003: 31490,\n\t58004: 31503,\n\t58005: 31498,\n\t58006: 31494,\n\t58007: 31539,\n\t58008: 31512,\n\t58009: 31513,\n\t58010: 31518,\n\t58011: 31541,\n\t58012: 31528,\n\t58013: 31542,\n\t58014: 31568,\n\t58015: 31610,\n\t58016: 31492,\n\t58017: 31565,\n\t58018: 31499,\n\t58019: 31564,\n\t58020: 31557,\n\t58021: 31605,\n\t58022: 31589,\n\t58023: 31604,\n\t58024: 31591,\n\t58025: 31600,\n\t58026: 31601,\n\t58027: 31596,\n\t58028: 31598,\n\t58029: 31645,\n\t58030: 31640,\n\t58031: 31647,\n\t58032: 31629,\n\t58033: 31644,\n\t58034: 31642,\n\t58035: 31627,\n\t58036: 31634,\n\t58037: 31631,\n\t58038: 31581,\n\t58039: 31641,\n\t58040: 31691,\n\t58041: 31681,\n\t58042: 31692,\n\t58043: 31695,\n\t58044: 31668,\n\t58045: 31686,\n\t58046: 31709,\n\t58047: 31721,\n\t58048: 31761,\n\t58049: 31764,\n\t58050: 31718,\n\t58051: 31717,\n\t58052: 31840,\n\t58053: 31744,\n\t58054: 31751,\n\t58055: 31763,\n\t58056: 31731,\n\t58057: 31735,\n\t58058: 31767,\n\t58059: 31757,\n\t58060: 31734,\n\t58061: 31779,\n\t58062: 31783,\n\t58063: 31786,\n\t58064: 31775,\n\t58065: 31799,\n\t58066: 31787,\n\t58067: 31805,\n\t58068: 31820,\n\t58069: 31811,\n\t58070: 31828,\n\t58071: 31823,\n\t58072: 31808,\n\t58073: 31824,\n\t58074: 31832,\n\t58075: 31839,\n\t58076: 31844,\n\t58077: 31830,\n\t58078: 31845,\n\t58079: 31852,\n\t58080: 31861,\n\t58081: 31875,\n\t58082: 31888,\n\t58083: 31908,\n\t58084: 31917,\n\t58085: 31906,\n\t58086: 31915,\n\t58087: 31905,\n\t58088: 31912,\n\t58089: 31923,\n\t58090: 31922,\n\t58091: 31921,\n\t58092: 31918,\n\t58093: 31929,\n\t58094: 31933,\n\t58095: 31936,\n\t58096: 31941,\n\t58097: 31938,\n\t58098: 31960,\n\t58099: 31954,\n\t58100: 31964,\n\t58101: 31970,\n\t58102: 39739,\n\t58103: 31983,\n\t58104: 31986,\n\t58105: 31988,\n\t58106: 31990,\n\t58107: 31994,\n\t58108: 32006,\n\t58176: 32002,\n\t58177: 32028,\n\t58178: 32021,\n\t58179: 32010,\n\t58180: 32069,\n\t58181: 32075,\n\t58182: 32046,\n\t58183: 32050,\n\t58184: 32063,\n\t58185: 32053,\n\t58186: 32070,\n\t58187: 32115,\n\t58188: 32086,\n\t58189: 32078,\n\t58190: 32114,\n\t58191: 32104,\n\t58192: 32110,\n\t58193: 32079,\n\t58194: 32099,\n\t58195: 32147,\n\t58196: 32137,\n\t58197: 32091,\n\t58198: 32143,\n\t58199: 32125,\n\t58200: 32155,\n\t58201: 32186,\n\t58202: 32174,\n\t58203: 32163,\n\t58204: 32181,\n\t58205: 32199,\n\t58206: 32189,\n\t58207: 32171,\n\t58208: 32317,\n\t58209: 32162,\n\t58210: 32175,\n\t58211: 32220,\n\t58212: 32184,\n\t58213: 32159,\n\t58214: 32176,\n\t58215: 32216,\n\t58216: 32221,\n\t58217: 32228,\n\t58218: 32222,\n\t58219: 32251,\n\t58220: 32242,\n\t58221: 32225,\n\t58222: 32261,\n\t58223: 32266,\n\t58224: 32291,\n\t58225: 32289,\n\t58226: 32274,\n\t58227: 32305,\n\t58228: 32287,\n\t58229: 32265,\n\t58230: 32267,\n\t58231: 32290,\n\t58232: 32326,\n\t58233: 32358,\n\t58234: 32315,\n\t58235: 32309,\n\t58236: 32313,\n\t58237: 32323,\n\t58238: 32311,\n\t58240: 32306,\n\t58241: 32314,\n\t58242: 32359,\n\t58243: 32349,\n\t58244: 32342,\n\t58245: 32350,\n\t58246: 32345,\n\t58247: 32346,\n\t58248: 32377,\n\t58249: 32362,\n\t58250: 32361,\n\t58251: 32380,\n\t58252: 32379,\n\t58253: 32387,\n\t58254: 32213,\n\t58255: 32381,\n\t58256: 36782,\n\t58257: 32383,\n\t58258: 32392,\n\t58259: 32393,\n\t58260: 32396,\n\t58261: 32402,\n\t58262: 32400,\n\t58263: 32403,\n\t58264: 32404,\n\t58265: 32406,\n\t58266: 32398,\n\t58267: 32411,\n\t58268: 32412,\n\t58269: 32568,\n\t58270: 32570,\n\t58271: 32581,\n\t58272: 32588,\n\t58273: 32589,\n\t58274: 32590,\n\t58275: 32592,\n\t58276: 32593,\n\t58277: 32597,\n\t58278: 32596,\n\t58279: 32600,\n\t58280: 32607,\n\t58281: 32608,\n\t58282: 32616,\n\t58283: 32617,\n\t58284: 32615,\n\t58285: 32632,\n\t58286: 32642,\n\t58287: 32646,\n\t58288: 32643,\n\t58289: 32648,\n\t58290: 32647,\n\t58291: 32652,\n\t58292: 32660,\n\t58293: 32670,\n\t58294: 32669,\n\t58295: 32666,\n\t58296: 32675,\n\t58297: 32687,\n\t58298: 32690,\n\t58299: 32697,\n\t58300: 32686,\n\t58301: 32694,\n\t58302: 32696,\n\t58303: 35697,\n\t58304: 32709,\n\t58305: 32710,\n\t58306: 32714,\n\t58307: 32725,\n\t58308: 32724,\n\t58309: 32737,\n\t58310: 32742,\n\t58311: 32745,\n\t58312: 32755,\n\t58313: 32761,\n\t58314: 39132,\n\t58315: 32774,\n\t58316: 32772,\n\t58317: 32779,\n\t58318: 32786,\n\t58319: 32792,\n\t58320: 32793,\n\t58321: 32796,\n\t58322: 32801,\n\t58323: 32808,\n\t58324: 32831,\n\t58325: 32827,\n\t58326: 32842,\n\t58327: 32838,\n\t58328: 32850,\n\t58329: 32856,\n\t58330: 32858,\n\t58331: 32863,\n\t58332: 32866,\n\t58333: 32872,\n\t58334: 32883,\n\t58335: 32882,\n\t58336: 32880,\n\t58337: 32886,\n\t58338: 32889,\n\t58339: 32893,\n\t58340: 32895,\n\t58341: 32900,\n\t58342: 32902,\n\t58343: 32901,\n\t58344: 32923,\n\t58345: 32915,\n\t58346: 32922,\n\t58347: 32941,\n\t58348: 20880,\n\t58349: 32940,\n\t58350: 32987,\n\t58351: 32997,\n\t58352: 32985,\n\t58353: 32989,\n\t58354: 32964,\n\t58355: 32986,\n\t58356: 32982,\n\t58357: 33033,\n\t58358: 33007,\n\t58359: 33009,\n\t58360: 33051,\n\t58361: 33065,\n\t58362: 33059,\n\t58363: 33071,\n\t58364: 33099,\n\t58432: 38539,\n\t58433: 33094,\n\t58434: 33086,\n\t58435: 33107,\n\t58436: 33105,\n\t58437: 33020,\n\t58438: 33137,\n\t58439: 33134,\n\t58440: 33125,\n\t58441: 33126,\n\t58442: 33140,\n\t58443: 33155,\n\t58444: 33160,\n\t58445: 33162,\n\t58446: 33152,\n\t58447: 33154,\n\t58448: 33184,\n\t58449: 33173,\n\t58450: 33188,\n\t58451: 33187,\n\t58452: 33119,\n\t58453: 33171,\n\t58454: 33193,\n\t58455: 33200,\n\t58456: 33205,\n\t58457: 33214,\n\t58458: 33208,\n\t58459: 33213,\n\t58460: 33216,\n\t58461: 33218,\n\t58462: 33210,\n\t58463: 33225,\n\t58464: 33229,\n\t58465: 33233,\n\t58466: 33241,\n\t58467: 33240,\n\t58468: 33224,\n\t58469: 33242,\n\t58470: 33247,\n\t58471: 33248,\n\t58472: 33255,\n\t58473: 33274,\n\t58474: 33275,\n\t58475: 33278,\n\t58476: 33281,\n\t58477: 33282,\n\t58478: 33285,\n\t58479: 33287,\n\t58480: 33290,\n\t58481: 33293,\n\t58482: 33296,\n\t58483: 33302,\n\t58484: 33321,\n\t58485: 33323,\n\t58486: 33336,\n\t58487: 33331,\n\t58488: 33344,\n\t58489: 33369,\n\t58490: 33368,\n\t58491: 33373,\n\t58492: 33370,\n\t58493: 33375,\n\t58494: 33380,\n\t58496: 33378,\n\t58497: 33384,\n\t58498: 33386,\n\t58499: 33387,\n\t58500: 33326,\n\t58501: 33393,\n\t58502: 33399,\n\t58503: 33400,\n\t58504: 33406,\n\t58505: 33421,\n\t58506: 33426,\n\t58507: 33451,\n\t58508: 33439,\n\t58509: 33467,\n\t58510: 33452,\n\t58511: 33505,\n\t58512: 33507,\n\t58513: 33503,\n\t58514: 33490,\n\t58515: 33524,\n\t58516: 33523,\n\t58517: 33530,\n\t58518: 33683,\n\t58519: 33539,\n\t58520: 33531,\n\t58521: 33529,\n\t58522: 33502,\n\t58523: 33542,\n\t58524: 33500,\n\t58525: 33545,\n\t58526: 33497,\n\t58527: 33589,\n\t58528: 33588,\n\t58529: 33558,\n\t58530: 33586,\n\t58531: 33585,\n\t58532: 33600,\n\t58533: 33593,\n\t58534: 33616,\n\t58535: 33605,\n\t58536: 33583,\n\t58537: 33579,\n\t58538: 33559,\n\t58539: 33560,\n\t58540: 33669,\n\t58541: 33690,\n\t58542: 33706,\n\t58543: 33695,\n\t58544: 33698,\n\t58545: 33686,\n\t58546: 33571,\n\t58547: 33678,\n\t58548: 33671,\n\t58549: 33674,\n\t58550: 33660,\n\t58551: 33717,\n\t58552: 33651,\n\t58553: 33653,\n\t58554: 33696,\n\t58555: 33673,\n\t58556: 33704,\n\t58557: 33780,\n\t58558: 33811,\n\t58559: 33771,\n\t58560: 33742,\n\t58561: 33789,\n\t58562: 33795,\n\t58563: 33752,\n\t58564: 33803,\n\t58565: 33729,\n\t58566: 33783,\n\t58567: 33799,\n\t58568: 33760,\n\t58569: 33778,\n\t58570: 33805,\n\t58571: 33826,\n\t58572: 33824,\n\t58573: 33725,\n\t58574: 33848,\n\t58575: 34054,\n\t58576: 33787,\n\t58577: 33901,\n\t58578: 33834,\n\t58579: 33852,\n\t58580: 34138,\n\t58581: 33924,\n\t58582: 33911,\n\t58583: 33899,\n\t58584: 33965,\n\t58585: 33902,\n\t58586: 33922,\n\t58587: 33897,\n\t58588: 33862,\n\t58589: 33836,\n\t58590: 33903,\n\t58591: 33913,\n\t58592: 33845,\n\t58593: 33994,\n\t58594: 33890,\n\t58595: 33977,\n\t58596: 33983,\n\t58597: 33951,\n\t58598: 34009,\n\t58599: 33997,\n\t58600: 33979,\n\t58601: 34010,\n\t58602: 34000,\n\t58603: 33985,\n\t58604: 33990,\n\t58605: 34006,\n\t58606: 33953,\n\t58607: 34081,\n\t58608: 34047,\n\t58609: 34036,\n\t58610: 34071,\n\t58611: 34072,\n\t58612: 34092,\n\t58613: 34079,\n\t58614: 34069,\n\t58615: 34068,\n\t58616: 34044,\n\t58617: 34112,\n\t58618: 34147,\n\t58619: 34136,\n\t58620: 34120,\n\t58688: 34113,\n\t58689: 34306,\n\t58690: 34123,\n\t58691: 34133,\n\t58692: 34176,\n\t58693: 34212,\n\t58694: 34184,\n\t58695: 34193,\n\t58696: 34186,\n\t58697: 34216,\n\t58698: 34157,\n\t58699: 34196,\n\t58700: 34203,\n\t58701: 34282,\n\t58702: 34183,\n\t58703: 34204,\n\t58704: 34167,\n\t58705: 34174,\n\t58706: 34192,\n\t58707: 34249,\n\t58708: 34234,\n\t58709: 34255,\n\t58710: 34233,\n\t58711: 34256,\n\t58712: 34261,\n\t58713: 34269,\n\t58714: 34277,\n\t58715: 34268,\n\t58716: 34297,\n\t58717: 34314,\n\t58718: 34323,\n\t58719: 34315,\n\t58720: 34302,\n\t58721: 34298,\n\t58722: 34310,\n\t58723: 34338,\n\t58724: 34330,\n\t58725: 34352,\n\t58726: 34367,\n\t58727: 34381,\n\t58728: 20053,\n\t58729: 34388,\n\t58730: 34399,\n\t58731: 34407,\n\t58732: 34417,\n\t58733: 34451,\n\t58734: 34467,\n\t58735: 34473,\n\t58736: 34474,\n\t58737: 34443,\n\t58738: 34444,\n\t58739: 34486,\n\t58740: 34479,\n\t58741: 34500,\n\t58742: 34502,\n\t58743: 34480,\n\t58744: 34505,\n\t58745: 34851,\n\t58746: 34475,\n\t58747: 34516,\n\t58748: 34526,\n\t58749: 34537,\n\t58750: 34540,\n\t58752: 34527,\n\t58753: 34523,\n\t58754: 34543,\n\t58755: 34578,\n\t58756: 34566,\n\t58757: 34568,\n\t58758: 34560,\n\t58759: 34563,\n\t58760: 34555,\n\t58761: 34577,\n\t58762: 34569,\n\t58763: 34573,\n\t58764: 34553,\n\t58765: 34570,\n\t58766: 34612,\n\t58767: 34623,\n\t58768: 34615,\n\t58769: 34619,\n\t58770: 34597,\n\t58771: 34601,\n\t58772: 34586,\n\t58773: 34656,\n\t58774: 34655,\n\t58775: 34680,\n\t58776: 34636,\n\t58777: 34638,\n\t58778: 34676,\n\t58779: 34647,\n\t58780: 34664,\n\t58781: 34670,\n\t58782: 34649,\n\t58783: 34643,\n\t58784: 34659,\n\t58785: 34666,\n\t58786: 34821,\n\t58787: 34722,\n\t58788: 34719,\n\t58789: 34690,\n\t58790: 34735,\n\t58791: 34763,\n\t58792: 34749,\n\t58793: 34752,\n\t58794: 34768,\n\t58795: 38614,\n\t58796: 34731,\n\t58797: 34756,\n\t58798: 34739,\n\t58799: 34759,\n\t58800: 34758,\n\t58801: 34747,\n\t58802: 34799,\n\t58803: 34802,\n\t58804: 34784,\n\t58805: 34831,\n\t58806: 34829,\n\t58807: 34814,\n\t58808: 34806,\n\t58809: 34807,\n\t58810: 34830,\n\t58811: 34770,\n\t58812: 34833,\n\t58813: 34838,\n\t58814: 34837,\n\t58815: 34850,\n\t58816: 34849,\n\t58817: 34865,\n\t58818: 34870,\n\t58819: 34873,\n\t58820: 34855,\n\t58821: 34875,\n\t58822: 34884,\n\t58823: 34882,\n\t58824: 34898,\n\t58825: 34905,\n\t58826: 34910,\n\t58827: 34914,\n\t58828: 34923,\n\t58829: 34945,\n\t58830: 34942,\n\t58831: 34974,\n\t58832: 34933,\n\t58833: 34941,\n\t58834: 34997,\n\t58835: 34930,\n\t58836: 34946,\n\t58837: 34967,\n\t58838: 34962,\n\t58839: 34990,\n\t58840: 34969,\n\t58841: 34978,\n\t58842: 34957,\n\t58843: 34980,\n\t58844: 34992,\n\t58845: 35007,\n\t58846: 34993,\n\t58847: 35011,\n\t58848: 35012,\n\t58849: 35028,\n\t58850: 35032,\n\t58851: 35033,\n\t58852: 35037,\n\t58853: 35065,\n\t58854: 35074,\n\t58855: 35068,\n\t58856: 35060,\n\t58857: 35048,\n\t58858: 35058,\n\t58859: 35076,\n\t58860: 35084,\n\t58861: 35082,\n\t58862: 35091,\n\t58863: 35139,\n\t58864: 35102,\n\t58865: 35109,\n\t58866: 35114,\n\t58867: 35115,\n\t58868: 35137,\n\t58869: 35140,\n\t58870: 35131,\n\t58871: 35126,\n\t58872: 35128,\n\t58873: 35148,\n\t58874: 35101,\n\t58875: 35168,\n\t58876: 35166,\n\t58944: 35174,\n\t58945: 35172,\n\t58946: 35181,\n\t58947: 35178,\n\t58948: 35183,\n\t58949: 35188,\n\t58950: 35191,\n\t58951: 35198,\n\t58952: 35203,\n\t58953: 35208,\n\t58954: 35210,\n\t58955: 35219,\n\t58956: 35224,\n\t58957: 35233,\n\t58958: 35241,\n\t58959: 35238,\n\t58960: 35244,\n\t58961: 35247,\n\t58962: 35250,\n\t58963: 35258,\n\t58964: 35261,\n\t58965: 35263,\n\t58966: 35264,\n\t58967: 35290,\n\t58968: 35292,\n\t58969: 35293,\n\t58970: 35303,\n\t58971: 35316,\n\t58972: 35320,\n\t58973: 35331,\n\t58974: 35350,\n\t58975: 35344,\n\t58976: 35340,\n\t58977: 35355,\n\t58978: 35357,\n\t58979: 35365,\n\t58980: 35382,\n\t58981: 35393,\n\t58982: 35419,\n\t58983: 35410,\n\t58984: 35398,\n\t58985: 35400,\n\t58986: 35452,\n\t58987: 35437,\n\t58988: 35436,\n\t58989: 35426,\n\t58990: 35461,\n\t58991: 35458,\n\t58992: 35460,\n\t58993: 35496,\n\t58994: 35489,\n\t58995: 35473,\n\t58996: 35493,\n\t58997: 35494,\n\t58998: 35482,\n\t58999: 35491,\n\t59000: 35524,\n\t59001: 35533,\n\t59002: 35522,\n\t59003: 35546,\n\t59004: 35563,\n\t59005: 35571,\n\t59006: 35559,\n\t59008: 35556,\n\t59009: 35569,\n\t59010: 35604,\n\t59011: 35552,\n\t59012: 35554,\n\t59013: 35575,\n\t59014: 35550,\n\t59015: 35547,\n\t59016: 35596,\n\t59017: 35591,\n\t59018: 35610,\n\t59019: 35553,\n\t59020: 35606,\n\t59021: 35600,\n\t59022: 35607,\n\t59023: 35616,\n\t59024: 35635,\n\t59025: 38827,\n\t59026: 35622,\n\t59027: 35627,\n\t59028: 35646,\n\t59029: 35624,\n\t59030: 35649,\n\t59031: 35660,\n\t59032: 35663,\n\t59033: 35662,\n\t59034: 35657,\n\t59035: 35670,\n\t59036: 35675,\n\t59037: 35674,\n\t59038: 35691,\n\t59039: 35679,\n\t59040: 35692,\n\t59041: 35695,\n\t59042: 35700,\n\t59043: 35709,\n\t59044: 35712,\n\t59045: 35724,\n\t59046: 35726,\n\t59047: 35730,\n\t59048: 35731,\n\t59049: 35734,\n\t59050: 35737,\n\t59051: 35738,\n\t59052: 35898,\n\t59053: 35905,\n\t59054: 35903,\n\t59055: 35912,\n\t59056: 35916,\n\t59057: 35918,\n\t59058: 35920,\n\t59059: 35925,\n\t59060: 35938,\n\t59061: 35948,\n\t59062: 35960,\n\t59063: 35962,\n\t59064: 35970,\n\t59065: 35977,\n\t59066: 35973,\n\t59067: 35978,\n\t59068: 35981,\n\t59069: 35982,\n\t59070: 35988,\n\t59071: 35964,\n\t59072: 35992,\n\t59073: 25117,\n\t59074: 36013,\n\t59075: 36010,\n\t59076: 36029,\n\t59077: 36018,\n\t59078: 36019,\n\t59079: 36014,\n\t59080: 36022,\n\t59081: 36040,\n\t59082: 36033,\n\t59083: 36068,\n\t59084: 36067,\n\t59085: 36058,\n\t59086: 36093,\n\t59087: 36090,\n\t59088: 36091,\n\t59089: 36100,\n\t59090: 36101,\n\t59091: 36106,\n\t59092: 36103,\n\t59093: 36111,\n\t59094: 36109,\n\t59095: 36112,\n\t59096: 40782,\n\t59097: 36115,\n\t59098: 36045,\n\t59099: 36116,\n\t59100: 36118,\n\t59101: 36199,\n\t59102: 36205,\n\t59103: 36209,\n\t59104: 36211,\n\t59105: 36225,\n\t59106: 36249,\n\t59107: 36290,\n\t59108: 36286,\n\t59109: 36282,\n\t59110: 36303,\n\t59111: 36314,\n\t59112: 36310,\n\t59113: 36300,\n\t59114: 36315,\n\t59115: 36299,\n\t59116: 36330,\n\t59117: 36331,\n\t59118: 36319,\n\t59119: 36323,\n\t59120: 36348,\n\t59121: 36360,\n\t59122: 36361,\n\t59123: 36351,\n\t59124: 36381,\n\t59125: 36382,\n\t59126: 36368,\n\t59127: 36383,\n\t59128: 36418,\n\t59129: 36405,\n\t59130: 36400,\n\t59131: 36404,\n\t59132: 36426,\n\t59200: 36423,\n\t59201: 36425,\n\t59202: 36428,\n\t59203: 36432,\n\t59204: 36424,\n\t59205: 36441,\n\t59206: 36452,\n\t59207: 36448,\n\t59208: 36394,\n\t59209: 36451,\n\t59210: 36437,\n\t59211: 36470,\n\t59212: 36466,\n\t59213: 36476,\n\t59214: 36481,\n\t59215: 36487,\n\t59216: 36485,\n\t59217: 36484,\n\t59218: 36491,\n\t59219: 36490,\n\t59220: 36499,\n\t59221: 36497,\n\t59222: 36500,\n\t59223: 36505,\n\t59224: 36522,\n\t59225: 36513,\n\t59226: 36524,\n\t59227: 36528,\n\t59228: 36550,\n\t59229: 36529,\n\t59230: 36542,\n\t59231: 36549,\n\t59232: 36552,\n\t59233: 36555,\n\t59234: 36571,\n\t59235: 36579,\n\t59236: 36604,\n\t59237: 36603,\n\t59238: 36587,\n\t59239: 36606,\n\t59240: 36618,\n\t59241: 36613,\n\t59242: 36629,\n\t59243: 36626,\n\t59244: 36633,\n\t59245: 36627,\n\t59246: 36636,\n\t59247: 36639,\n\t59248: 36635,\n\t59249: 36620,\n\t59250: 36646,\n\t59251: 36659,\n\t59252: 36667,\n\t59253: 36665,\n\t59254: 36677,\n\t59255: 36674,\n\t59256: 36670,\n\t59257: 36684,\n\t59258: 36681,\n\t59259: 36678,\n\t59260: 36686,\n\t59261: 36695,\n\t59262: 36700,\n\t59264: 36706,\n\t59265: 36707,\n\t59266: 36708,\n\t59267: 36764,\n\t59268: 36767,\n\t59269: 36771,\n\t59270: 36781,\n\t59271: 36783,\n\t59272: 36791,\n\t59273: 36826,\n\t59274: 36837,\n\t59275: 36834,\n\t59276: 36842,\n\t59277: 36847,\n\t59278: 36999,\n\t59279: 36852,\n\t59280: 36869,\n\t59281: 36857,\n\t59282: 36858,\n\t59283: 36881,\n\t59284: 36885,\n\t59285: 36897,\n\t59286: 36877,\n\t59287: 36894,\n\t59288: 36886,\n\t59289: 36875,\n\t59290: 36903,\n\t59291: 36918,\n\t59292: 36917,\n\t59293: 36921,\n\t59294: 36856,\n\t59295: 36943,\n\t59296: 36944,\n\t59297: 36945,\n\t59298: 36946,\n\t59299: 36878,\n\t59300: 36937,\n\t59301: 36926,\n\t59302: 36950,\n\t59303: 36952,\n\t59304: 36958,\n\t59305: 36968,\n\t59306: 36975,\n\t59307: 36982,\n\t59308: 38568,\n\t59309: 36978,\n\t59310: 36994,\n\t59311: 36989,\n\t59312: 36993,\n\t59313: 36992,\n\t59314: 37002,\n\t59315: 37001,\n\t59316: 37007,\n\t59317: 37032,\n\t59318: 37039,\n\t59319: 37041,\n\t59320: 37045,\n\t59321: 37090,\n\t59322: 37092,\n\t59323: 25160,\n\t59324: 37083,\n\t59325: 37122,\n\t59326: 37138,\n\t59327: 37145,\n\t59328: 37170,\n\t59329: 37168,\n\t59330: 37194,\n\t59331: 37206,\n\t59332: 37208,\n\t59333: 37219,\n\t59334: 37221,\n\t59335: 37225,\n\t59336: 37235,\n\t59337: 37234,\n\t59338: 37259,\n\t59339: 37257,\n\t59340: 37250,\n\t59341: 37282,\n\t59342: 37291,\n\t59343: 37295,\n\t59344: 37290,\n\t59345: 37301,\n\t59346: 37300,\n\t59347: 37306,\n\t59348: 37312,\n\t59349: 37313,\n\t59350: 37321,\n\t59351: 37323,\n\t59352: 37328,\n\t59353: 37334,\n\t59354: 37343,\n\t59355: 37345,\n\t59356: 37339,\n\t59357: 37372,\n\t59358: 37365,\n\t59359: 37366,\n\t59360: 37406,\n\t59361: 37375,\n\t59362: 37396,\n\t59363: 37420,\n\t59364: 37397,\n\t59365: 37393,\n\t59366: 37470,\n\t59367: 37463,\n\t59368: 37445,\n\t59369: 37449,\n\t59370: 37476,\n\t59371: 37448,\n\t59372: 37525,\n\t59373: 37439,\n\t59374: 37451,\n\t59375: 37456,\n\t59376: 37532,\n\t59377: 37526,\n\t59378: 37523,\n\t59379: 37531,\n\t59380: 37466,\n\t59381: 37583,\n\t59382: 37561,\n\t59383: 37559,\n\t59384: 37609,\n\t59385: 37647,\n\t59386: 37626,\n\t59387: 37700,\n\t59388: 37678,\n\t59456: 37657,\n\t59457: 37666,\n\t59458: 37658,\n\t59459: 37667,\n\t59460: 37690,\n\t59461: 37685,\n\t59462: 37691,\n\t59463: 37724,\n\t59464: 37728,\n\t59465: 37756,\n\t59466: 37742,\n\t59467: 37718,\n\t59468: 37808,\n\t59469: 37804,\n\t59470: 37805,\n\t59471: 37780,\n\t59472: 37817,\n\t59473: 37846,\n\t59474: 37847,\n\t59475: 37864,\n\t59476: 37861,\n\t59477: 37848,\n\t59478: 37827,\n\t59479: 37853,\n\t59480: 37840,\n\t59481: 37832,\n\t59482: 37860,\n\t59483: 37914,\n\t59484: 37908,\n\t59485: 37907,\n\t59486: 37891,\n\t59487: 37895,\n\t59488: 37904,\n\t59489: 37942,\n\t59490: 37931,\n\t59491: 37941,\n\t59492: 37921,\n\t59493: 37946,\n\t59494: 37953,\n\t59495: 37970,\n\t59496: 37956,\n\t59497: 37979,\n\t59498: 37984,\n\t59499: 37986,\n\t59500: 37982,\n\t59501: 37994,\n\t59502: 37417,\n\t59503: 38000,\n\t59504: 38005,\n\t59505: 38007,\n\t59506: 38013,\n\t59507: 37978,\n\t59508: 38012,\n\t59509: 38014,\n\t59510: 38017,\n\t59511: 38015,\n\t59512: 38274,\n\t59513: 38279,\n\t59514: 38282,\n\t59515: 38292,\n\t59516: 38294,\n\t59517: 38296,\n\t59518: 38297,\n\t59520: 38304,\n\t59521: 38312,\n\t59522: 38311,\n\t59523: 38317,\n\t59524: 38332,\n\t59525: 38331,\n\t59526: 38329,\n\t59527: 38334,\n\t59528: 38346,\n\t59529: 28662,\n\t59530: 38339,\n\t59531: 38349,\n\t59532: 38348,\n\t59533: 38357,\n\t59534: 38356,\n\t59535: 38358,\n\t59536: 38364,\n\t59537: 38369,\n\t59538: 38373,\n\t59539: 38370,\n\t59540: 38433,\n\t59541: 38440,\n\t59542: 38446,\n\t59543: 38447,\n\t59544: 38466,\n\t59545: 38476,\n\t59546: 38479,\n\t59547: 38475,\n\t59548: 38519,\n\t59549: 38492,\n\t59550: 38494,\n\t59551: 38493,\n\t59552: 38495,\n\t59553: 38502,\n\t59554: 38514,\n\t59555: 38508,\n\t59556: 38541,\n\t59557: 38552,\n\t59558: 38549,\n\t59559: 38551,\n\t59560: 38570,\n\t59561: 38567,\n\t59562: 38577,\n\t59563: 38578,\n\t59564: 38576,\n\t59565: 38580,\n\t59566: 38582,\n\t59567: 38584,\n\t59568: 38585,\n\t59569: 38606,\n\t59570: 38603,\n\t59571: 38601,\n\t59572: 38605,\n\t59573: 35149,\n\t59574: 38620,\n\t59575: 38669,\n\t59576: 38613,\n\t59577: 38649,\n\t59578: 38660,\n\t59579: 38662,\n\t59580: 38664,\n\t59581: 38675,\n\t59582: 38670,\n\t59583: 38673,\n\t59584: 38671,\n\t59585: 38678,\n\t59586: 38681,\n\t59587: 38692,\n\t59588: 38698,\n\t59589: 38704,\n\t59590: 38713,\n\t59591: 38717,\n\t59592: 38718,\n\t59593: 38724,\n\t59594: 38726,\n\t59595: 38728,\n\t59596: 38722,\n\t59597: 38729,\n\t59598: 38748,\n\t59599: 38752,\n\t59600: 38756,\n\t59601: 38758,\n\t59602: 38760,\n\t59603: 21202,\n\t59604: 38763,\n\t59605: 38769,\n\t59606: 38777,\n\t59607: 38789,\n\t59608: 38780,\n\t59609: 38785,\n\t59610: 38778,\n\t59611: 38790,\n\t59612: 38795,\n\t59613: 38799,\n\t59614: 38800,\n\t59615: 38812,\n\t59616: 38824,\n\t59617: 38822,\n\t59618: 38819,\n\t59619: 38835,\n\t59620: 38836,\n\t59621: 38851,\n\t59622: 38854,\n\t59623: 38856,\n\t59624: 38859,\n\t59625: 38876,\n\t59626: 38893,\n\t59627: 40783,\n\t59628: 38898,\n\t59629: 31455,\n\t59630: 38902,\n\t59631: 38901,\n\t59632: 38927,\n\t59633: 38924,\n\t59634: 38968,\n\t59635: 38948,\n\t59636: 38945,\n\t59637: 38967,\n\t59638: 38973,\n\t59639: 38982,\n\t59640: 38991,\n\t59641: 38987,\n\t59642: 39019,\n\t59643: 39023,\n\t59644: 39024,\n\t59712: 39025,\n\t59713: 39028,\n\t59714: 39027,\n\t59715: 39082,\n\t59716: 39087,\n\t59717: 39089,\n\t59718: 39094,\n\t59719: 39108,\n\t59720: 39107,\n\t59721: 39110,\n\t59722: 39145,\n\t59723: 39147,\n\t59724: 39171,\n\t59725: 39177,\n\t59726: 39186,\n\t59727: 39188,\n\t59728: 39192,\n\t59729: 39201,\n\t59730: 39197,\n\t59731: 39198,\n\t59732: 39204,\n\t59733: 39200,\n\t59734: 39212,\n\t59735: 39214,\n\t59736: 39229,\n\t59737: 39230,\n\t59738: 39234,\n\t59739: 39241,\n\t59740: 39237,\n\t59741: 39248,\n\t59742: 39243,\n\t59743: 39249,\n\t59744: 39250,\n\t59745: 39244,\n\t59746: 39253,\n\t59747: 39319,\n\t59748: 39320,\n\t59749: 39333,\n\t59750: 39341,\n\t59751: 39342,\n\t59752: 39356,\n\t59753: 39391,\n\t59754: 39387,\n\t59755: 39389,\n\t59756: 39384,\n\t59757: 39377,\n\t59758: 39405,\n\t59759: 39406,\n\t59760: 39409,\n\t59761: 39410,\n\t59762: 39419,\n\t59763: 39416,\n\t59764: 39425,\n\t59765: 39439,\n\t59766: 39429,\n\t59767: 39394,\n\t59768: 39449,\n\t59769: 39467,\n\t59770: 39479,\n\t59771: 39493,\n\t59772: 39490,\n\t59773: 39488,\n\t59774: 39491,\n\t59776: 39486,\n\t59777: 39509,\n\t59778: 39501,\n\t59779: 39515,\n\t59780: 39511,\n\t59781: 39519,\n\t59782: 39522,\n\t59783: 39525,\n\t59784: 39524,\n\t59785: 39529,\n\t59786: 39531,\n\t59787: 39530,\n\t59788: 39597,\n\t59789: 39600,\n\t59790: 39612,\n\t59791: 39616,\n\t59792: 39631,\n\t59793: 39633,\n\t59794: 39635,\n\t59795: 39636,\n\t59796: 39646,\n\t59797: 39647,\n\t59798: 39650,\n\t59799: 39651,\n\t59800: 39654,\n\t59801: 39663,\n\t59802: 39659,\n\t59803: 39662,\n\t59804: 39668,\n\t59805: 39665,\n\t59806: 39671,\n\t59807: 39675,\n\t59808: 39686,\n\t59809: 39704,\n\t59810: 39706,\n\t59811: 39711,\n\t59812: 39714,\n\t59813: 39715,\n\t59814: 39717,\n\t59815: 39719,\n\t59816: 39720,\n\t59817: 39721,\n\t59818: 39722,\n\t59819: 39726,\n\t59820: 39727,\n\t59821: 39730,\n\t59822: 39748,\n\t59823: 39747,\n\t59824: 39759,\n\t59825: 39757,\n\t59826: 39758,\n\t59827: 39761,\n\t59828: 39768,\n\t59829: 39796,\n\t59830: 39827,\n\t59831: 39811,\n\t59832: 39825,\n\t59833: 39830,\n\t59834: 39831,\n\t59835: 39839,\n\t59836: 39840,\n\t59837: 39848,\n\t59838: 39860,\n\t59839: 39872,\n\t59840: 39882,\n\t59841: 39865,\n\t59842: 39878,\n\t59843: 39887,\n\t59844: 39889,\n\t59845: 39890,\n\t59846: 39907,\n\t59847: 39906,\n\t59848: 39908,\n\t59849: 39892,\n\t59850: 39905,\n\t59851: 39994,\n\t59852: 39922,\n\t59853: 39921,\n\t59854: 39920,\n\t59855: 39957,\n\t59856: 39956,\n\t59857: 39945,\n\t59858: 39955,\n\t59859: 39948,\n\t59860: 39942,\n\t59861: 39944,\n\t59862: 39954,\n\t59863: 39946,\n\t59864: 39940,\n\t59865: 39982,\n\t59866: 39963,\n\t59867: 39973,\n\t59868: 39972,\n\t59869: 39969,\n\t59870: 39984,\n\t59871: 40007,\n\t59872: 39986,\n\t59873: 40006,\n\t59874: 39998,\n\t59875: 40026,\n\t59876: 40032,\n\t59877: 40039,\n\t59878: 40054,\n\t59879: 40056,\n\t59880: 40167,\n\t59881: 40172,\n\t59882: 40176,\n\t59883: 40201,\n\t59884: 40200,\n\t59885: 40171,\n\t59886: 40195,\n\t59887: 40198,\n\t59888: 40234,\n\t59889: 40230,\n\t59890: 40367,\n\t59891: 40227,\n\t59892: 40223,\n\t59893: 40260,\n\t59894: 40213,\n\t59895: 40210,\n\t59896: 40257,\n\t59897: 40255,\n\t59898: 40254,\n\t59899: 40262,\n\t59900: 40264,\n\t59968: 40285,\n\t59969: 40286,\n\t59970: 40292,\n\t59971: 40273,\n\t59972: 40272,\n\t59973: 40281,\n\t59974: 40306,\n\t59975: 40329,\n\t59976: 40327,\n\t59977: 40363,\n\t59978: 40303,\n\t59979: 40314,\n\t59980: 40346,\n\t59981: 40356,\n\t59982: 40361,\n\t59983: 40370,\n\t59984: 40388,\n\t59985: 40385,\n\t59986: 40379,\n\t59987: 40376,\n\t59988: 40378,\n\t59989: 40390,\n\t59990: 40399,\n\t59991: 40386,\n\t59992: 40409,\n\t59993: 40403,\n\t59994: 40440,\n\t59995: 40422,\n\t59996: 40429,\n\t59997: 40431,\n\t59998: 40445,\n\t59999: 40474,\n\t60000: 40475,\n\t60001: 40478,\n\t60002: 40565,\n\t60003: 40569,\n\t60004: 40573,\n\t60005: 40577,\n\t60006: 40584,\n\t60007: 40587,\n\t60008: 40588,\n\t60009: 40594,\n\t60010: 40597,\n\t60011: 40593,\n\t60012: 40605,\n\t60013: 40613,\n\t60014: 40617,\n\t60015: 40632,\n\t60016: 40618,\n\t60017: 40621,\n\t60018: 38753,\n\t60019: 40652,\n\t60020: 40654,\n\t60021: 40655,\n\t60022: 40656,\n\t60023: 40660,\n\t60024: 40668,\n\t60025: 40670,\n\t60026: 40669,\n\t60027: 40672,\n\t60028: 40677,\n\t60029: 40680,\n\t60030: 40687,\n\t60032: 40692,\n\t60033: 40694,\n\t60034: 40695,\n\t60035: 40697,\n\t60036: 40699,\n\t60037: 40700,\n\t60038: 40701,\n\t60039: 40711,\n\t60040: 40712,\n\t60041: 30391,\n\t60042: 40725,\n\t60043: 40737,\n\t60044: 40748,\n\t60045: 40766,\n\t60046: 40778,\n\t60047: 40786,\n\t60048: 40788,\n\t60049: 40803,\n\t60050: 40799,\n\t60051: 40800,\n\t60052: 40801,\n\t60053: 40806,\n\t60054: 40807,\n\t60055: 40812,\n\t60056: 40810,\n\t60057: 40823,\n\t60058: 40818,\n\t60059: 40822,\n\t60060: 40853,\n\t60061: 40860,\n\t60062: 40864,\n\t60063: 22575,\n\t60064: 27079,\n\t60065: 36953,\n\t60066: 29796,\n\t60067: 20956,\n\t60068: 29081,\n\t60736: 32394,\n\t60737: 35100,\n\t60738: 37704,\n\t60739: 37512,\n\t60740: 34012,\n\t60741: 20425,\n\t60742: 28859,\n\t60743: 26161,\n\t60744: 26824,\n\t60745: 37625,\n\t60746: 26363,\n\t60747: 24389,\n\t60748: 20008,\n\t60749: 20193,\n\t60750: 20220,\n\t60751: 20224,\n\t60752: 20227,\n\t60753: 20281,\n\t60754: 20310,\n\t60755: 20370,\n\t60756: 20362,\n\t60757: 20378,\n\t60758: 20372,\n\t60759: 20429,\n\t60760: 20544,\n\t60761: 20514,\n\t60762: 20479,\n\t60763: 20510,\n\t60764: 20550,\n\t60765: 20592,\n\t60766: 20546,\n\t60767: 20628,\n\t60768: 20724,\n\t60769: 20696,\n\t60770: 20810,\n\t60771: 20836,\n\t60772: 20893,\n\t60773: 20926,\n\t60774: 20972,\n\t60775: 21013,\n\t60776: 21148,\n\t60777: 21158,\n\t60778: 21184,\n\t60779: 21211,\n\t60780: 21248,\n\t60781: 21255,\n\t60782: 21284,\n\t60783: 21362,\n\t60784: 21395,\n\t60785: 21426,\n\t60786: 21469,\n\t60787: 64014,\n\t60788: 21660,\n\t60789: 21642,\n\t60790: 21673,\n\t60791: 21759,\n\t60792: 21894,\n\t60793: 22361,\n\t60794: 22373,\n\t60795: 22444,\n\t60796: 22472,\n\t60797: 22471,\n\t60798: 64015,\n\t60800: 64016,\n\t60801: 22686,\n\t60802: 22706,\n\t60803: 22795,\n\t60804: 22867,\n\t60805: 22875,\n\t60806: 22877,\n\t60807: 22883,\n\t60808: 22948,\n\t60809: 22970,\n\t60810: 23382,\n\t60811: 23488,\n\t60812: 29999,\n\t60813: 23512,\n\t60814: 23532,\n\t60815: 23582,\n\t60816: 23718,\n\t60817: 23738,\n\t60818: 23797,\n\t60819: 23847,\n\t60820: 23891,\n\t60821: 64017,\n\t60822: 23874,\n\t60823: 23917,\n\t60824: 23992,\n\t60825: 23993,\n\t60826: 24016,\n\t60827: 24353,\n\t60828: 24372,\n\t60829: 24423,\n\t60830: 24503,\n\t60831: 24542,\n\t60832: 24669,\n\t60833: 24709,\n\t60834: 24714,\n\t60835: 24798,\n\t60836: 24789,\n\t60837: 24864,\n\t60838: 24818,\n\t60839: 24849,\n\t60840: 24887,\n\t60841: 24880,\n\t60842: 24984,\n\t60843: 25107,\n\t60844: 25254,\n\t60845: 25589,\n\t60846: 25696,\n\t60847: 25757,\n\t60848: 25806,\n\t60849: 25934,\n\t60850: 26112,\n\t60851: 26133,\n\t60852: 26171,\n\t60853: 26121,\n\t60854: 26158,\n\t60855: 26142,\n\t60856: 26148,\n\t60857: 26213,\n\t60858: 26199,\n\t60859: 26201,\n\t60860: 64018,\n\t60861: 26227,\n\t60862: 26265,\n\t60863: 26272,\n\t60864: 26290,\n\t60865: 26303,\n\t60866: 26362,\n\t60867: 26382,\n\t60868: 63785,\n\t60869: 26470,\n\t60870: 26555,\n\t60871: 26706,\n\t60872: 26560,\n\t60873: 26625,\n\t60874: 26692,\n\t60875: 26831,\n\t60876: 64019,\n\t60877: 26984,\n\t60878: 64020,\n\t60879: 27032,\n\t60880: 27106,\n\t60881: 27184,\n\t60882: 27243,\n\t60883: 27206,\n\t60884: 27251,\n\t60885: 27262,\n\t60886: 27362,\n\t60887: 27364,\n\t60888: 27606,\n\t60889: 27711,\n\t60890: 27740,\n\t60891: 27782,\n\t60892: 27759,\n\t60893: 27866,\n\t60894: 27908,\n\t60895: 28039,\n\t60896: 28015,\n\t60897: 28054,\n\t60898: 28076,\n\t60899: 28111,\n\t60900: 28152,\n\t60901: 28146,\n\t60902: 28156,\n\t60903: 28217,\n\t60904: 28252,\n\t60905: 28199,\n\t60906: 28220,\n\t60907: 28351,\n\t60908: 28552,\n\t60909: 28597,\n\t60910: 28661,\n\t60911: 28677,\n\t60912: 28679,\n\t60913: 28712,\n\t60914: 28805,\n\t60915: 28843,\n\t60916: 28943,\n\t60917: 28932,\n\t60918: 29020,\n\t60919: 28998,\n\t60920: 28999,\n\t60921: 64021,\n\t60922: 29121,\n\t60923: 29182,\n\t60924: 29361,\n\t60992: 29374,\n\t60993: 29476,\n\t60994: 64022,\n\t60995: 29559,\n\t60996: 29629,\n\t60997: 29641,\n\t60998: 29654,\n\t60999: 29667,\n\t61000: 29650,\n\t61001: 29703,\n\t61002: 29685,\n\t61003: 29734,\n\t61004: 29738,\n\t61005: 29737,\n\t61006: 29742,\n\t61007: 29794,\n\t61008: 29833,\n\t61009: 29855,\n\t61010: 29953,\n\t61011: 30063,\n\t61012: 30338,\n\t61013: 30364,\n\t61014: 30366,\n\t61015: 30363,\n\t61016: 30374,\n\t61017: 64023,\n\t61018: 30534,\n\t61019: 21167,\n\t61020: 30753,\n\t61021: 30798,\n\t61022: 30820,\n\t61023: 30842,\n\t61024: 31024,\n\t61025: 64024,\n\t61026: 64025,\n\t61027: 64026,\n\t61028: 31124,\n\t61029: 64027,\n\t61030: 31131,\n\t61031: 31441,\n\t61032: 31463,\n\t61033: 64028,\n\t61034: 31467,\n\t61035: 31646,\n\t61036: 64029,\n\t61037: 32072,\n\t61038: 32092,\n\t61039: 32183,\n\t61040: 32160,\n\t61041: 32214,\n\t61042: 32338,\n\t61043: 32583,\n\t61044: 32673,\n\t61045: 64030,\n\t61046: 33537,\n\t61047: 33634,\n\t61048: 33663,\n\t61049: 33735,\n\t61050: 33782,\n\t61051: 33864,\n\t61052: 33972,\n\t61053: 34131,\n\t61054: 34137,\n\t61056: 34155,\n\t61057: 64031,\n\t61058: 34224,\n\t61059: 64032,\n\t61060: 64033,\n\t61061: 34823,\n\t61062: 35061,\n\t61063: 35346,\n\t61064: 35383,\n\t61065: 35449,\n\t61066: 35495,\n\t61067: 35518,\n\t61068: 35551,\n\t61069: 64034,\n\t61070: 35574,\n\t61071: 35667,\n\t61072: 35711,\n\t61073: 36080,\n\t61074: 36084,\n\t61075: 36114,\n\t61076: 36214,\n\t61077: 64035,\n\t61078: 36559,\n\t61079: 64036,\n\t61080: 64037,\n\t61081: 36967,\n\t61082: 37086,\n\t61083: 64038,\n\t61084: 37141,\n\t61085: 37159,\n\t61086: 37338,\n\t61087: 37335,\n\t61088: 37342,\n\t61089: 37357,\n\t61090: 37358,\n\t61091: 37348,\n\t61092: 37349,\n\t61093: 37382,\n\t61094: 37392,\n\t61095: 37386,\n\t61096: 37434,\n\t61097: 37440,\n\t61098: 37436,\n\t61099: 37454,\n\t61100: 37465,\n\t61101: 37457,\n\t61102: 37433,\n\t61103: 37479,\n\t61104: 37543,\n\t61105: 37495,\n\t61106: 37496,\n\t61107: 37607,\n\t61108: 37591,\n\t61109: 37593,\n\t61110: 37584,\n\t61111: 64039,\n\t61112: 37589,\n\t61113: 37600,\n\t61114: 37587,\n\t61115: 37669,\n\t61116: 37665,\n\t61117: 37627,\n\t61118: 64040,\n\t61119: 37662,\n\t61120: 37631,\n\t61121: 37661,\n\t61122: 37634,\n\t61123: 37744,\n\t61124: 37719,\n\t61125: 37796,\n\t61126: 37830,\n\t61127: 37854,\n\t61128: 37880,\n\t61129: 37937,\n\t61130: 37957,\n\t61131: 37960,\n\t61132: 38290,\n\t61133: 63964,\n\t61134: 64041,\n\t61135: 38557,\n\t61136: 38575,\n\t61137: 38707,\n\t61138: 38715,\n\t61139: 38723,\n\t61140: 38733,\n\t61141: 38735,\n\t61142: 38737,\n\t61143: 38741,\n\t61144: 38999,\n\t61145: 39013,\n\t61146: 64042,\n\t61147: 64043,\n\t61148: 39207,\n\t61149: 64044,\n\t61150: 39326,\n\t61151: 39502,\n\t61152: 39641,\n\t61153: 39644,\n\t61154: 39797,\n\t61155: 39794,\n\t61156: 39823,\n\t61157: 39857,\n\t61158: 39867,\n\t61159: 39936,\n\t61160: 40304,\n\t61161: 40299,\n\t61162: 64045,\n\t61163: 40473,\n\t61164: 40657,\n\t61167: 8560,\n\t61168: 8561,\n\t61169: 8562,\n\t61170: 8563,\n\t61171: 8564,\n\t61172: 8565,\n\t61173: 8566,\n\t61174: 8567,\n\t61175: 8568,\n\t61176: 8569,\n\t61177: 65506,\n\t61178: 65508,\n\t61179: 65287,\n\t61180: 65282,\n\t61504: 57344,\n\t61505: 57345,\n\t61506: 57346,\n\t61507: 57347,\n\t61508: 57348,\n\t61509: 57349,\n\t61510: 57350,\n\t61511: 57351,\n\t61512: 57352,\n\t61513: 57353,\n\t61514: 57354,\n\t61515: 57355,\n\t61516: 57356,\n\t61517: 57357,\n\t61518: 57358,\n\t61519: 57359,\n\t61520: 57360,\n\t61521: 57361,\n\t61522: 57362,\n\t61523: 57363,\n\t61524: 57364,\n\t61525: 57365,\n\t61526: 57366,\n\t61527: 57367,\n\t61528: 57368,\n\t61529: 57369,\n\t61530: 57370,\n\t61531: 57371,\n\t61532: 57372,\n\t61533: 57373,\n\t61534: 57374,\n\t61535: 57375,\n\t61536: 57376,\n\t61537: 57377,\n\t61538: 57378,\n\t61539: 57379,\n\t61540: 57380,\n\t61541: 57381,\n\t61542: 57382,\n\t61543: 57383,\n\t61544: 57384,\n\t61545: 57385,\n\t61546: 57386,\n\t61547: 57387,\n\t61548: 57388,\n\t61549: 57389,\n\t61550: 57390,\n\t61551: 57391,\n\t61552: 57392,\n\t61553: 57393,\n\t61554: 57394,\n\t61555: 57395,\n\t61556: 57396,\n\t61557: 57397,\n\t61558: 57398,\n\t61559: 57399,\n\t61560: 57400,\n\t61561: 57401,\n\t61562: 57402,\n\t61563: 57403,\n\t61564: 57404,\n\t61565: 57405,\n\t61566: 57406,\n\t61568: 57407,\n\t61569: 57408,\n\t61570: 57409,\n\t61571: 57410,\n\t61572: 57411,\n\t61573: 57412,\n\t61574: 57413,\n\t61575: 57414,\n\t61576: 57415,\n\t61577: 57416,\n\t61578: 57417,\n\t61579: 57418,\n\t61580: 57419,\n\t61581: 57420,\n\t61582: 57421,\n\t61583: 57422,\n\t61584: 57423,\n\t61585: 57424,\n\t61586: 57425,\n\t61587: 57426,\n\t61588: 57427,\n\t61589: 57428,\n\t61590: 57429,\n\t61591: 57430,\n\t61592: 57431,\n\t61593: 57432,\n\t61594: 57433,\n\t61595: 57434,\n\t61596: 57435,\n\t61597: 57436,\n\t61598: 57437,\n\t61599: 57438,\n\t61600: 57439,\n\t61601: 57440,\n\t61602: 57441,\n\t61603: 57442,\n\t61604: 57443,\n\t61605: 57444,\n\t61606: 57445,\n\t61607: 57446,\n\t61608: 57447,\n\t61609: 57448,\n\t61610: 57449,\n\t61611: 57450,\n\t61612: 57451,\n\t61613: 57452,\n\t61614: 57453,\n\t61615: 57454,\n\t61616: 57455,\n\t61617: 57456,\n\t61618: 57457,\n\t61619: 57458,\n\t61620: 57459,\n\t61621: 57460,\n\t61622: 57461,\n\t61623: 57462,\n\t61624: 57463,\n\t61625: 57464,\n\t61626: 57465,\n\t61627: 57466,\n\t61628: 57467,\n\t61629: 57468,\n\t61630: 57469,\n\t61631: 57470,\n\t61632: 57471,\n\t61633: 57472,\n\t61634: 57473,\n\t61635: 57474,\n\t61636: 57475,\n\t61637: 57476,\n\t61638: 57477,\n\t61639: 57478,\n\t61640: 57479,\n\t61641: 57480,\n\t61642: 57481,\n\t61643: 57482,\n\t61644: 57483,\n\t61645: 57484,\n\t61646: 57485,\n\t61647: 57486,\n\t61648: 57487,\n\t61649: 57488,\n\t61650: 57489,\n\t61651: 57490,\n\t61652: 57491,\n\t61653: 57492,\n\t61654: 57493,\n\t61655: 57494,\n\t61656: 57495,\n\t61657: 57496,\n\t61658: 57497,\n\t61659: 57498,\n\t61660: 57499,\n\t61661: 57500,\n\t61662: 57501,\n\t61663: 57502,\n\t61664: 57503,\n\t61665: 57504,\n\t61666: 57505,\n\t61667: 57506,\n\t61668: 57507,\n\t61669: 57508,\n\t61670: 57509,\n\t61671: 57510,\n\t61672: 57511,\n\t61673: 57512,\n\t61674: 57513,\n\t61675: 57514,\n\t61676: 57515,\n\t61677: 57516,\n\t61678: 57517,\n\t61679: 57518,\n\t61680: 57519,\n\t61681: 57520,\n\t61682: 57521,\n\t61683: 57522,\n\t61684: 57523,\n\t61685: 57524,\n\t61686: 57525,\n\t61687: 57526,\n\t61688: 57527,\n\t61689: 57528,\n\t61690: 57529,\n\t61691: 57530,\n\t61692: 57531,\n\t61760: 57532,\n\t61761: 57533,\n\t61762: 57534,\n\t61763: 57535,\n\t61764: 57536,\n\t61765: 57537,\n\t61766: 57538,\n\t61767: 57539,\n\t61768: 57540,\n\t61769: 57541,\n\t61770: 57542,\n\t61771: 57543,\n\t61772: 57544,\n\t61773: 57545,\n\t61774: 57546,\n\t61775: 57547,\n\t61776: 57548,\n\t61777: 57549,\n\t61778: 57550,\n\t61779: 57551,\n\t61780: 57552,\n\t61781: 57553,\n\t61782: 57554,\n\t61783: 57555,\n\t61784: 57556,\n\t61785: 57557,\n\t61786: 57558,\n\t61787: 57559,\n\t61788: 57560,\n\t61789: 57561,\n\t61790: 57562,\n\t61791: 57563,\n\t61792: 57564,\n\t61793: 57565,\n\t61794: 57566,\n\t61795: 57567,\n\t61796: 57568,\n\t61797: 57569,\n\t61798: 57570,\n\t61799: 57571,\n\t61800: 57572,\n\t61801: 57573,\n\t61802: 57574,\n\t61803: 57575,\n\t61804: 57576,\n\t61805: 57577,\n\t61806: 57578,\n\t61807: 57579,\n\t61808: 57580,\n\t61809: 57581,\n\t61810: 57582,\n\t61811: 57583,\n\t61812: 57584,\n\t61813: 57585,\n\t61814: 57586,\n\t61815: 57587,\n\t61816: 57588,\n\t61817: 57589,\n\t61818: 57590,\n\t61819: 57591,\n\t61820: 57592,\n\t61821: 57593,\n\t61822: 57594,\n\t61824: 57595,\n\t61825: 57596,\n\t61826: 57597,\n\t61827: 57598,\n\t61828: 57599,\n\t61829: 57600,\n\t61830: 57601,\n\t61831: 57602,\n\t61832: 57603,\n\t61833: 57604,\n\t61834: 57605,\n\t61835: 57606,\n\t61836: 57607,\n\t61837: 57608,\n\t61838: 57609,\n\t61839: 57610,\n\t61840: 57611,\n\t61841: 57612,\n\t61842: 57613,\n\t61843: 57614,\n\t61844: 57615,\n\t61845: 57616,\n\t61846: 57617,\n\t61847: 57618,\n\t61848: 57619,\n\t61849: 57620,\n\t61850: 57621,\n\t61851: 57622,\n\t61852: 57623,\n\t61853: 57624,\n\t61854: 57625,\n\t61855: 57626,\n\t61856: 57627,\n\t61857: 57628,\n\t61858: 57629,\n\t61859: 57630,\n\t61860: 57631,\n\t61861: 57632,\n\t61862: 57633,\n\t61863: 57634,\n\t61864: 57635,\n\t61865: 57636,\n\t61866: 57637,\n\t61867: 57638,\n\t61868: 57639,\n\t61869: 57640,\n\t61870: 57641,\n\t61871: 57642,\n\t61872: 57643,\n\t61873: 57644,\n\t61874: 57645,\n\t61875: 57646,\n\t61876: 57647,\n\t61877: 57648,\n\t61878: 57649,\n\t61879: 57650,\n\t61880: 57651,\n\t61881: 57652,\n\t61882: 57653,\n\t61883: 57654,\n\t61884: 57655,\n\t61885: 57656,\n\t61886: 57657,\n\t61887: 57658,\n\t61888: 57659,\n\t61889: 57660,\n\t61890: 57661,\n\t61891: 57662,\n\t61892: 57663,\n\t61893: 57664,\n\t61894: 57665,\n\t61895: 57666,\n\t61896: 57667,\n\t61897: 57668,\n\t61898: 57669,\n\t61899: 57670,\n\t61900: 57671,\n\t61901: 57672,\n\t61902: 57673,\n\t61903: 57674,\n\t61904: 57675,\n\t61905: 57676,\n\t61906: 57677,\n\t61907: 57678,\n\t61908: 57679,\n\t61909: 57680,\n\t61910: 57681,\n\t61911: 57682,\n\t61912: 57683,\n\t61913: 57684,\n\t61914: 57685,\n\t61915: 57686,\n\t61916: 57687,\n\t61917: 57688,\n\t61918: 57689,\n\t61919: 57690,\n\t61920: 57691,\n\t61921: 57692,\n\t61922: 57693,\n\t61923: 57694,\n\t61924: 57695,\n\t61925: 57696,\n\t61926: 57697,\n\t61927: 57698,\n\t61928: 57699,\n\t61929: 57700,\n\t61930: 57701,\n\t61931: 57702,\n\t61932: 57703,\n\t61933: 57704,\n\t61934: 57705,\n\t61935: 57706,\n\t61936: 57707,\n\t61937: 57708,\n\t61938: 57709,\n\t61939: 57710,\n\t61940: 57711,\n\t61941: 57712,\n\t61942: 57713,\n\t61943: 57714,\n\t61944: 57715,\n\t61945: 57716,\n\t61946: 57717,\n\t61947: 57718,\n\t61948: 57719,\n\t62016: 57720,\n\t62017: 57721,\n\t62018: 57722,\n\t62019: 57723,\n\t62020: 57724,\n\t62021: 57725,\n\t62022: 57726,\n\t62023: 57727,\n\t62024: 57728,\n\t62025: 57729,\n\t62026: 57730,\n\t62027: 57731,\n\t62028: 57732,\n\t62029: 57733,\n\t62030: 57734,\n\t62031: 57735,\n\t62032: 57736,\n\t62033: 57737,\n\t62034: 57738,\n\t62035: 57739,\n\t62036: 57740,\n\t62037: 57741,\n\t62038: 57742,\n\t62039: 57743,\n\t62040: 57744,\n\t62041: 57745,\n\t62042: 57746,\n\t62043: 57747,\n\t62044: 57748,\n\t62045: 57749,\n\t62046: 57750,\n\t62047: 57751,\n\t62048: 57752,\n\t62049: 57753,\n\t62050: 57754,\n\t62051: 57755,\n\t62052: 57756,\n\t62053: 57757,\n\t62054: 57758,\n\t62055: 57759,\n\t62056: 57760,\n\t62057: 57761,\n\t62058: 57762,\n\t62059: 57763,\n\t62060: 57764,\n\t62061: 57765,\n\t62062: 57766,\n\t62063: 57767,\n\t62064: 57768,\n\t62065: 57769,\n\t62066: 57770,\n\t62067: 57771,\n\t62068: 57772,\n\t62069: 57773,\n\t62070: 57774,\n\t62071: 57775,\n\t62072: 57776,\n\t62073: 57777,\n\t62074: 57778,\n\t62075: 57779,\n\t62076: 57780,\n\t62077: 57781,\n\t62078: 57782,\n\t62080: 57783,\n\t62081: 57784,\n\t62082: 57785,\n\t62083: 57786,\n\t62084: 57787,\n\t62085: 57788,\n\t62086: 57789,\n\t62087: 57790,\n\t62088: 57791,\n\t62089: 57792,\n\t62090: 57793,\n\t62091: 57794,\n\t62092: 57795,\n\t62093: 57796,\n\t62094: 57797,\n\t62095: 57798,\n\t62096: 57799,\n\t62097: 57800,\n\t62098: 57801,\n\t62099: 57802,\n\t62100: 57803,\n\t62101: 57804,\n\t62102: 57805,\n\t62103: 57806,\n\t62104: 57807,\n\t62105: 57808,\n\t62106: 57809,\n\t62107: 57810,\n\t62108: 57811,\n\t62109: 57812,\n\t62110: 57813,\n\t62111: 57814,\n\t62112: 57815,\n\t62113: 57816,\n\t62114: 57817,\n\t62115: 57818,\n\t62116: 57819,\n\t62117: 57820,\n\t62118: 57821,\n\t62119: 57822,\n\t62120: 57823,\n\t62121: 57824,\n\t62122: 57825,\n\t62123: 57826,\n\t62124: 57827,\n\t62125: 57828,\n\t62126: 57829,\n\t62127: 57830,\n\t62128: 57831,\n\t62129: 57832,\n\t62130: 57833,\n\t62131: 57834,\n\t62132: 57835,\n\t62133: 57836,\n\t62134: 57837,\n\t62135: 57838,\n\t62136: 57839,\n\t62137: 57840,\n\t62138: 57841,\n\t62139: 57842,\n\t62140: 57843,\n\t62141: 57844,\n\t62142: 57845,\n\t62143: 57846,\n\t62144: 57847,\n\t62145: 57848,\n\t62146: 57849,\n\t62147: 57850,\n\t62148: 57851,\n\t62149: 57852,\n\t62150: 57853,\n\t62151: 57854,\n\t62152: 57855,\n\t62153: 57856,\n\t62154: 57857,\n\t62155: 57858,\n\t62156: 57859,\n\t62157: 57860,\n\t62158: 57861,\n\t62159: 57862,\n\t62160: 57863,\n\t62161: 57864,\n\t62162: 57865,\n\t62163: 57866,\n\t62164: 57867,\n\t62165: 57868,\n\t62166: 57869,\n\t62167: 57870,\n\t62168: 57871,\n\t62169: 57872,\n\t62170: 57873,\n\t62171: 57874,\n\t62172: 57875,\n\t62173: 57876,\n\t62174: 57877,\n\t62175: 57878,\n\t62176: 57879,\n\t62177: 57880,\n\t62178: 57881,\n\t62179: 57882,\n\t62180: 57883,\n\t62181: 57884,\n\t62182: 57885,\n\t62183: 57886,\n\t62184: 57887,\n\t62185: 57888,\n\t62186: 57889,\n\t62187: 57890,\n\t62188: 57891,\n\t62189: 57892,\n\t62190: 57893,\n\t62191: 57894,\n\t62192: 57895,\n\t62193: 57896,\n\t62194: 57897,\n\t62195: 57898,\n\t62196: 57899,\n\t62197: 57900,\n\t62198: 57901,\n\t62199: 57902,\n\t62200: 57903,\n\t62201: 57904,\n\t62202: 57905,\n\t62203: 57906,\n\t62204: 57907,\n\t62272: 57908,\n\t62273: 57909,\n\t62274: 57910,\n\t62275: 57911,\n\t62276: 57912,\n\t62277: 57913,\n\t62278: 57914,\n\t62279: 57915,\n\t62280: 57916,\n\t62281: 57917,\n\t62282: 57918,\n\t62283: 57919,\n\t62284: 57920,\n\t62285: 57921,\n\t62286: 57922,\n\t62287: 57923,\n\t62288: 57924,\n\t62289: 57925,\n\t62290: 57926,\n\t62291: 57927,\n\t62292: 57928,\n\t62293: 57929,\n\t62294: 57930,\n\t62295: 57931,\n\t62296: 57932,\n\t62297: 57933,\n\t62298: 57934,\n\t62299: 57935,\n\t62300: 57936,\n\t62301: 57937,\n\t62302: 57938,\n\t62303: 57939,\n\t62304: 57940,\n\t62305: 57941,\n\t62306: 57942,\n\t62307: 57943,\n\t62308: 57944,\n\t62309: 57945,\n\t62310: 57946,\n\t62311: 57947,\n\t62312: 57948,\n\t62313: 57949,\n\t62314: 57950,\n\t62315: 57951,\n\t62316: 57952,\n\t62317: 57953,\n\t62318: 57954,\n\t62319: 57955,\n\t62320: 57956,\n\t62321: 57957,\n\t62322: 57958,\n\t62323: 57959,\n\t62324: 57960,\n\t62325: 57961,\n\t62326: 57962,\n\t62327: 57963,\n\t62328: 57964,\n\t62329: 57965,\n\t62330: 57966,\n\t62331: 57967,\n\t62332: 57968,\n\t62333: 57969,\n\t62334: 57970,\n\t62336: 57971,\n\t62337: 57972,\n\t62338: 57973,\n\t62339: 57974,\n\t62340: 57975,\n\t62341: 57976,\n\t62342: 57977,\n\t62343: 57978,\n\t62344: 57979,\n\t62345: 57980,\n\t62346: 57981,\n\t62347: 57982,\n\t62348: 57983,\n\t62349: 57984,\n\t62350: 57985,\n\t62351: 57986,\n\t62352: 57987,\n\t62353: 57988,\n\t62354: 57989,\n\t62355: 57990,\n\t62356: 57991,\n\t62357: 57992,\n\t62358: 57993,\n\t62359: 57994,\n\t62360: 57995,\n\t62361: 57996,\n\t62362: 57997,\n\t62363: 57998,\n\t62364: 57999,\n\t62365: 58000,\n\t62366: 58001,\n\t62367: 58002,\n\t62368: 58003,\n\t62369: 58004,\n\t62370: 58005,\n\t62371: 58006,\n\t62372: 58007,\n\t62373: 58008,\n\t62374: 58009,\n\t62375: 58010,\n\t62376: 58011,\n\t62377: 58012,\n\t62378: 58013,\n\t62379: 58014,\n\t62380: 58015,\n\t62381: 58016,\n\t62382: 58017,\n\t62383: 58018,\n\t62384: 58019,\n\t62385: 58020,\n\t62386: 58021,\n\t62387: 58022,\n\t62388: 58023,\n\t62389: 58024,\n\t62390: 58025,\n\t62391: 58026,\n\t62392: 58027,\n\t62393: 58028,\n\t62394: 58029,\n\t62395: 58030,\n\t62396: 58031,\n\t62397: 58032,\n\t62398: 58033,\n\t62399: 58034,\n\t62400: 58035,\n\t62401: 58036,\n\t62402: 58037,\n\t62403: 58038,\n\t62404: 58039,\n\t62405: 58040,\n\t62406: 58041,\n\t62407: 58042,\n\t62408: 58043,\n\t62409: 58044,\n\t62410: 58045,\n\t62411: 58046,\n\t62412: 58047,\n\t62413: 58048,\n\t62414: 58049,\n\t62415: 58050,\n\t62416: 58051,\n\t62417: 58052,\n\t62418: 58053,\n\t62419: 58054,\n\t62420: 58055,\n\t62421: 58056,\n\t62422: 58057,\n\t62423: 58058,\n\t62424: 58059,\n\t62425: 58060,\n\t62426: 58061,\n\t62427: 58062,\n\t62428: 58063,\n\t62429: 58064,\n\t62430: 58065,\n\t62431: 58066,\n\t62432: 58067,\n\t62433: 58068,\n\t62434: 58069,\n\t62435: 58070,\n\t62436: 58071,\n\t62437: 58072,\n\t62438: 58073,\n\t62439: 58074,\n\t62440: 58075,\n\t62441: 58076,\n\t62442: 58077,\n\t62443: 58078,\n\t62444: 58079,\n\t62445: 58080,\n\t62446: 58081,\n\t62447: 58082,\n\t62448: 58083,\n\t62449: 58084,\n\t62450: 58085,\n\t62451: 58086,\n\t62452: 58087,\n\t62453: 58088,\n\t62454: 58089,\n\t62455: 58090,\n\t62456: 58091,\n\t62457: 58092,\n\t62458: 58093,\n\t62459: 58094,\n\t62460: 58095,\n\t62528: 58096,\n\t62529: 58097,\n\t62530: 58098,\n\t62531: 58099,\n\t62532: 58100,\n\t62533: 58101,\n\t62534: 58102,\n\t62535: 58103,\n\t62536: 58104,\n\t62537: 58105,\n\t62538: 58106,\n\t62539: 58107,\n\t62540: 58108,\n\t62541: 58109,\n\t62542: 58110,\n\t62543: 58111,\n\t62544: 58112,\n\t62545: 58113,\n\t62546: 58114,\n\t62547: 58115,\n\t62548: 58116,\n\t62549: 58117,\n\t62550: 58118,\n\t62551: 58119,\n\t62552: 58120,\n\t62553: 58121,\n\t62554: 58122,\n\t62555: 58123,\n\t62556: 58124,\n\t62557: 58125,\n\t62558: 58126,\n\t62559: 58127,\n\t62560: 58128,\n\t62561: 58129,\n\t62562: 58130,\n\t62563: 58131,\n\t62564: 58132,\n\t62565: 58133,\n\t62566: 58134,\n\t62567: 58135,\n\t62568: 58136,\n\t62569: 58137,\n\t62570: 58138,\n\t62571: 58139,\n\t62572: 58140,\n\t62573: 58141,\n\t62574: 58142,\n\t62575: 58143,\n\t62576: 58144,\n\t62577: 58145,\n\t62578: 58146,\n\t62579: 58147,\n\t62580: 58148,\n\t62581: 58149,\n\t62582: 58150,\n\t62583: 58151,\n\t62584: 58152,\n\t62585: 58153,\n\t62586: 58154,\n\t62587: 58155,\n\t62588: 58156,\n\t62589: 58157,\n\t62590: 58158,\n\t62592: 58159,\n\t62593: 58160,\n\t62594: 58161,\n\t62595: 58162,\n\t62596: 58163,\n\t62597: 58164,\n\t62598: 58165,\n\t62599: 58166,\n\t62600: 58167,\n\t62601: 58168,\n\t62602: 58169,\n\t62603: 58170,\n\t62604: 58171,\n\t62605: 58172,\n\t62606: 58173,\n\t62607: 58174,\n\t62608: 58175,\n\t62609: 58176,\n\t62610: 58177,\n\t62611: 58178,\n\t62612: 58179,\n\t62613: 58180,\n\t62614: 58181,\n\t62615: 58182,\n\t62616: 58183,\n\t62617: 58184,\n\t62618: 58185,\n\t62619: 58186,\n\t62620: 58187,\n\t62621: 58188,\n\t62622: 58189,\n\t62623: 58190,\n\t62624: 58191,\n\t62625: 58192,\n\t62626: 58193,\n\t62627: 58194,\n\t62628: 58195,\n\t62629: 58196,\n\t62630: 58197,\n\t62631: 58198,\n\t62632: 58199,\n\t62633: 58200,\n\t62634: 58201,\n\t62635: 58202,\n\t62636: 58203,\n\t62637: 58204,\n\t62638: 58205,\n\t62639: 58206,\n\t62640: 58207,\n\t62641: 58208,\n\t62642: 58209,\n\t62643: 58210,\n\t62644: 58211,\n\t62645: 58212,\n\t62646: 58213,\n\t62647: 58214,\n\t62648: 58215,\n\t62649: 58216,\n\t62650: 58217,\n\t62651: 58218,\n\t62652: 58219,\n\t62653: 58220,\n\t62654: 58221,\n\t62655: 58222,\n\t62656: 58223,\n\t62657: 58224,\n\t62658: 58225,\n\t62659: 58226,\n\t62660: 58227,\n\t62661: 58228,\n\t62662: 58229,\n\t62663: 58230,\n\t62664: 58231,\n\t62665: 58232,\n\t62666: 58233,\n\t62667: 58234,\n\t62668: 58235,\n\t62669: 58236,\n\t62670: 58237,\n\t62671: 58238,\n\t62672: 58239,\n\t62673: 58240,\n\t62674: 58241,\n\t62675: 58242,\n\t62676: 58243,\n\t62677: 58244,\n\t62678: 58245,\n\t62679: 58246,\n\t62680: 58247,\n\t62681: 58248,\n\t62682: 58249,\n\t62683: 58250,\n\t62684: 58251,\n\t62685: 58252,\n\t62686: 58253,\n\t62687: 58254,\n\t62688: 58255,\n\t62689: 58256,\n\t62690: 58257,\n\t62691: 58258,\n\t62692: 58259,\n\t62693: 58260,\n\t62694: 58261,\n\t62695: 58262,\n\t62696: 58263,\n\t62697: 58264,\n\t62698: 58265,\n\t62699: 58266,\n\t62700: 58267,\n\t62701: 58268,\n\t62702: 58269,\n\t62703: 58270,\n\t62704: 58271,\n\t62705: 58272,\n\t62706: 58273,\n\t62707: 58274,\n\t62708: 58275,\n\t62709: 58276,\n\t62710: 58277,\n\t62711: 58278,\n\t62712: 58279,\n\t62713: 58280,\n\t62714: 58281,\n\t62715: 58282,\n\t62716: 58283,\n\t62784: 58284,\n\t62785: 58285,\n\t62786: 58286,\n\t62787: 58287,\n\t62788: 58288,\n\t62789: 58289,\n\t62790: 58290,\n\t62791: 58291,\n\t62792: 58292,\n\t62793: 58293,\n\t62794: 58294,\n\t62795: 58295,\n\t62796: 58296,\n\t62797: 58297,\n\t62798: 58298,\n\t62799: 58299,\n\t62800: 58300,\n\t62801: 58301,\n\t62802: 58302,\n\t62803: 58303,\n\t62804: 58304,\n\t62805: 58305,\n\t62806: 58306,\n\t62807: 58307,\n\t62808: 58308,\n\t62809: 58309,\n\t62810: 58310,\n\t62811: 58311,\n\t62812: 58312,\n\t62813: 58313,\n\t62814: 58314,\n\t62815: 58315,\n\t62816: 58316,\n\t62817: 58317,\n\t62818: 58318,\n\t62819: 58319,\n\t62820: 58320,\n\t62821: 58321,\n\t62822: 58322,\n\t62823: 58323,\n\t62824: 58324,\n\t62825: 58325,\n\t62826: 58326,\n\t62827: 58327,\n\t62828: 58328,\n\t62829: 58329,\n\t62830: 58330,\n\t62831: 58331,\n\t62832: 58332,\n\t62833: 58333,\n\t62834: 58334,\n\t62835: 58335,\n\t62836: 58336,\n\t62837: 58337,\n\t62838: 58338,\n\t62839: 58339,\n\t62840: 58340,\n\t62841: 58341,\n\t62842: 58342,\n\t62843: 58343,\n\t62844: 58344,\n\t62845: 58345,\n\t62846: 58346,\n\t62848: 58347,\n\t62849: 58348,\n\t62850: 58349,\n\t62851: 58350,\n\t62852: 58351,\n\t62853: 58352,\n\t62854: 58353,\n\t62855: 58354,\n\t62856: 58355,\n\t62857: 58356,\n\t62858: 58357,\n\t62859: 58358,\n\t62860: 58359,\n\t62861: 58360,\n\t62862: 58361,\n\t62863: 58362,\n\t62864: 58363,\n\t62865: 58364,\n\t62866: 58365,\n\t62867: 58366,\n\t62868: 58367,\n\t62869: 58368,\n\t62870: 58369,\n\t62871: 58370,\n\t62872: 58371,\n\t62873: 58372,\n\t62874: 58373,\n\t62875: 58374,\n\t62876: 58375,\n\t62877: 58376,\n\t62878: 58377,\n\t62879: 58378,\n\t62880: 58379,\n\t62881: 58380,\n\t62882: 58381,\n\t62883: 58382,\n\t62884: 58383,\n\t62885: 58384,\n\t62886: 58385,\n\t62887: 58386,\n\t62888: 58387,\n\t62889: 58388,\n\t62890: 58389,\n\t62891: 58390,\n\t62892: 58391,\n\t62893: 58392,\n\t62894: 58393,\n\t62895: 58394,\n\t62896: 58395,\n\t62897: 58396,\n\t62898: 58397,\n\t62899: 58398,\n\t62900: 58399,\n\t62901: 58400,\n\t62902: 58401,\n\t62903: 58402,\n\t62904: 58403,\n\t62905: 58404,\n\t62906: 58405,\n\t62907: 58406,\n\t62908: 58407,\n\t62909: 58408,\n\t62910: 58409,\n\t62911: 58410,\n\t62912: 58411,\n\t62913: 58412,\n\t62914: 58413,\n\t62915: 58414,\n\t62916: 58415,\n\t62917: 58416,\n\t62918: 58417,\n\t62919: 58418,\n\t62920: 58419,\n\t62921: 58420,\n\t62922: 58421,\n\t62923: 58422,\n\t62924: 58423,\n\t62925: 58424,\n\t62926: 58425,\n\t62927: 58426,\n\t62928: 58427,\n\t62929: 58428,\n\t62930: 58429,\n\t62931: 58430,\n\t62932: 58431,\n\t62933: 58432,\n\t62934: 58433,\n\t62935: 58434,\n\t62936: 58435,\n\t62937: 58436,\n\t62938: 58437,\n\t62939: 58438,\n\t62940: 58439,\n\t62941: 58440,\n\t62942: 58441,\n\t62943: 58442,\n\t62944: 58443,\n\t62945: 58444,\n\t62946: 58445,\n\t62947: 58446,\n\t62948: 58447,\n\t62949: 58448,\n\t62950: 58449,\n\t62951: 58450,\n\t62952: 58451,\n\t62953: 58452,\n\t62954: 58453,\n\t62955: 58454,\n\t62956: 58455,\n\t62957: 58456,\n\t62958: 58457,\n\t62959: 58458,\n\t62960: 58459,\n\t62961: 58460,\n\t62962: 58461,\n\t62963: 58462,\n\t62964: 58463,\n\t62965: 58464,\n\t62966: 58465,\n\t62967: 58466,\n\t62968: 58467,\n\t62969: 58468,\n\t62970: 58469,\n\t62971: 58470,\n\t62972: 58471,\n\t63040: 58472,\n\t63041: 58473,\n\t63042: 58474,\n\t63043: 58475,\n\t63044: 58476,\n\t63045: 58477,\n\t63046: 58478,\n\t63047: 58479,\n\t63048: 58480,\n\t63049: 58481,\n\t63050: 58482,\n\t63051: 58483,\n\t63052: 58484,\n\t63053: 58485,\n\t63054: 58486,\n\t63055: 58487,\n\t63056: 58488,\n\t63057: 58489,\n\t63058: 58490,\n\t63059: 58491,\n\t63060: 58492,\n\t63061: 58493,\n\t63062: 58494,\n\t63063: 58495,\n\t63064: 58496,\n\t63065: 58497,\n\t63066: 58498,\n\t63067: 58499,\n\t63068: 58500,\n\t63069: 58501,\n\t63070: 58502,\n\t63071: 58503,\n\t63072: 58504,\n\t63073: 58505,\n\t63074: 58506,\n\t63075: 58507,\n\t63076: 58508,\n\t63077: 58509,\n\t63078: 58510,\n\t63079: 58511,\n\t63080: 58512,\n\t63081: 58513,\n\t63082: 58514,\n\t63083: 58515,\n\t63084: 58516,\n\t63085: 58517,\n\t63086: 58518,\n\t63087: 58519,\n\t63088: 58520,\n\t63089: 58521,\n\t63090: 58522,\n\t63091: 58523,\n\t63092: 58524,\n\t63093: 58525,\n\t63094: 58526,\n\t63095: 58527,\n\t63096: 58528,\n\t63097: 58529,\n\t63098: 58530,\n\t63099: 58531,\n\t63100: 58532,\n\t63101: 58533,\n\t63102: 58534,\n\t63104: 58535,\n\t63105: 58536,\n\t63106: 58537,\n\t63107: 58538,\n\t63108: 58539,\n\t63109: 58540,\n\t63110: 58541,\n\t63111: 58542,\n\t63112: 58543,\n\t63113: 58544,\n\t63114: 58545,\n\t63115: 58546,\n\t63116: 58547,\n\t63117: 58548,\n\t63118: 58549,\n\t63119: 58550,\n\t63120: 58551,\n\t63121: 58552,\n\t63122: 58553,\n\t63123: 58554,\n\t63124: 58555,\n\t63125: 58556,\n\t63126: 58557,\n\t63127: 58558,\n\t63128: 58559,\n\t63129: 58560,\n\t63130: 58561,\n\t63131: 58562,\n\t63132: 58563,\n\t63133: 58564,\n\t63134: 58565,\n\t63135: 58566,\n\t63136: 58567,\n\t63137: 58568,\n\t63138: 58569,\n\t63139: 58570,\n\t63140: 58571,\n\t63141: 58572,\n\t63142: 58573,\n\t63143: 58574,\n\t63144: 58575,\n\t63145: 58576,\n\t63146: 58577,\n\t63147: 58578,\n\t63148: 58579,\n\t63149: 58580,\n\t63150: 58581,\n\t63151: 58582,\n\t63152: 58583,\n\t63153: 58584,\n\t63154: 58585,\n\t63155: 58586,\n\t63156: 58587,\n\t63157: 58588,\n\t63158: 58589,\n\t63159: 58590,\n\t63160: 58591,\n\t63161: 58592,\n\t63162: 58593,\n\t63163: 58594,\n\t63164: 58595,\n\t63165: 58596,\n\t63166: 58597,\n\t63167: 58598,\n\t63168: 58599,\n\t63169: 58600,\n\t63170: 58601,\n\t63171: 58602,\n\t63172: 58603,\n\t63173: 58604,\n\t63174: 58605,\n\t63175: 58606,\n\t63176: 58607,\n\t63177: 58608,\n\t63178: 58609,\n\t63179: 58610,\n\t63180: 58611,\n\t63181: 58612,\n\t63182: 58613,\n\t63183: 58614,\n\t63184: 58615,\n\t63185: 58616,\n\t63186: 58617,\n\t63187: 58618,\n\t63188: 58619,\n\t63189: 58620,\n\t63190: 58621,\n\t63191: 58622,\n\t63192: 58623,\n\t63193: 58624,\n\t63194: 58625,\n\t63195: 58626,\n\t63196: 58627,\n\t63197: 58628,\n\t63198: 58629,\n\t63199: 58630,\n\t63200: 58631,\n\t63201: 58632,\n\t63202: 58633,\n\t63203: 58634,\n\t63204: 58635,\n\t63205: 58636,\n\t63206: 58637,\n\t63207: 58638,\n\t63208: 58639,\n\t63209: 58640,\n\t63210: 58641,\n\t63211: 58642,\n\t63212: 58643,\n\t63213: 58644,\n\t63214: 58645,\n\t63215: 58646,\n\t63216: 58647,\n\t63217: 58648,\n\t63218: 58649,\n\t63219: 58650,\n\t63220: 58651,\n\t63221: 58652,\n\t63222: 58653,\n\t63223: 58654,\n\t63224: 58655,\n\t63225: 58656,\n\t63226: 58657,\n\t63227: 58658,\n\t63228: 58659,\n\t63296: 58660,\n\t63297: 58661,\n\t63298: 58662,\n\t63299: 58663,\n\t63300: 58664,\n\t63301: 58665,\n\t63302: 58666,\n\t63303: 58667,\n\t63304: 58668,\n\t63305: 58669,\n\t63306: 58670,\n\t63307: 58671,\n\t63308: 58672,\n\t63309: 58673,\n\t63310: 58674,\n\t63311: 58675,\n\t63312: 58676,\n\t63313: 58677,\n\t63314: 58678,\n\t63315: 58679,\n\t63316: 58680,\n\t63317: 58681,\n\t63318: 58682,\n\t63319: 58683,\n\t63320: 58684,\n\t63321: 58685,\n\t63322: 58686,\n\t63323: 58687,\n\t63324: 58688,\n\t63325: 58689,\n\t63326: 58690,\n\t63327: 58691,\n\t63328: 58692,\n\t63329: 58693,\n\t63330: 58694,\n\t63331: 58695,\n\t63332: 58696,\n\t63333: 58697,\n\t63334: 58698,\n\t63335: 58699,\n\t63336: 58700,\n\t63337: 58701,\n\t63338: 58702,\n\t63339: 58703,\n\t63340: 58704,\n\t63341: 58705,\n\t63342: 58706,\n\t63343: 58707,\n\t63344: 58708,\n\t63345: 58709,\n\t63346: 58710,\n\t63347: 58711,\n\t63348: 58712,\n\t63349: 58713,\n\t63350: 58714,\n\t63351: 58715,\n\t63352: 58716,\n\t63353: 58717,\n\t63354: 58718,\n\t63355: 58719,\n\t63356: 58720,\n\t63357: 58721,\n\t63358: 58722,\n\t63360: 58723,\n\t63361: 58724,\n\t63362: 58725,\n\t63363: 58726,\n\t63364: 58727,\n\t63365: 58728,\n\t63366: 58729,\n\t63367: 58730,\n\t63368: 58731,\n\t63369: 58732,\n\t63370: 58733,\n\t63371: 58734,\n\t63372: 58735,\n\t63373: 58736,\n\t63374: 58737,\n\t63375: 58738,\n\t63376: 58739,\n\t63377: 58740,\n\t63378: 58741,\n\t63379: 58742,\n\t63380: 58743,\n\t63381: 58744,\n\t63382: 58745,\n\t63383: 58746,\n\t63384: 58747,\n\t63385: 58748,\n\t63386: 58749,\n\t63387: 58750,\n\t63388: 58751,\n\t63389: 58752,\n\t63390: 58753,\n\t63391: 58754,\n\t63392: 58755,\n\t63393: 58756,\n\t63394: 58757,\n\t63395: 58758,\n\t63396: 58759,\n\t63397: 58760,\n\t63398: 58761,\n\t63399: 58762,\n\t63400: 58763,\n\t63401: 58764,\n\t63402: 58765,\n\t63403: 58766,\n\t63404: 58767,\n\t63405: 58768,\n\t63406: 58769,\n\t63407: 58770,\n\t63408: 58771,\n\t63409: 58772,\n\t63410: 58773,\n\t63411: 58774,\n\t63412: 58775,\n\t63413: 58776,\n\t63414: 58777,\n\t63415: 58778,\n\t63416: 58779,\n\t63417: 58780,\n\t63418: 58781,\n\t63419: 58782,\n\t63420: 58783,\n\t63421: 58784,\n\t63422: 58785,\n\t63423: 58786,\n\t63424: 58787,\n\t63425: 58788,\n\t63426: 58789,\n\t63427: 58790,\n\t63428: 58791,\n\t63429: 58792,\n\t63430: 58793,\n\t63431: 58794,\n\t63432: 58795,\n\t63433: 58796,\n\t63434: 58797,\n\t63435: 58798,\n\t63436: 58799,\n\t63437: 58800,\n\t63438: 58801,\n\t63439: 58802,\n\t63440: 58803,\n\t63441: 58804,\n\t63442: 58805,\n\t63443: 58806,\n\t63444: 58807,\n\t63445: 58808,\n\t63446: 58809,\n\t63447: 58810,\n\t63448: 58811,\n\t63449: 58812,\n\t63450: 58813,\n\t63451: 58814,\n\t63452: 58815,\n\t63453: 58816,\n\t63454: 58817,\n\t63455: 58818,\n\t63456: 58819,\n\t63457: 58820,\n\t63458: 58821,\n\t63459: 58822,\n\t63460: 58823,\n\t63461: 58824,\n\t63462: 58825,\n\t63463: 58826,\n\t63464: 58827,\n\t63465: 58828,\n\t63466: 58829,\n\t63467: 58830,\n\t63468: 58831,\n\t63469: 58832,\n\t63470: 58833,\n\t63471: 58834,\n\t63472: 58835,\n\t63473: 58836,\n\t63474: 58837,\n\t63475: 58838,\n\t63476: 58839,\n\t63477: 58840,\n\t63478: 58841,\n\t63479: 58842,\n\t63480: 58843,\n\t63481: 58844,\n\t63482: 58845,\n\t63483: 58846,\n\t63484: 58847,\n\t63552: 58848,\n\t63553: 58849,\n\t63554: 58850,\n\t63555: 58851,\n\t63556: 58852,\n\t63557: 58853,\n\t63558: 58854,\n\t63559: 58855,\n\t63560: 58856,\n\t63561: 58857,\n\t63562: 58858,\n\t63563: 58859,\n\t63564: 58860,\n\t63565: 58861,\n\t63566: 58862,\n\t63567: 58863,\n\t63568: 58864,\n\t63569: 58865,\n\t63570: 58866,\n\t63571: 58867,\n\t63572: 58868,\n\t63573: 58869,\n\t63574: 58870,\n\t63575: 58871,\n\t63576: 58872,\n\t63577: 58873,\n\t63578: 58874,\n\t63579: 58875,\n\t63580: 58876,\n\t63581: 58877,\n\t63582: 58878,\n\t63583: 58879,\n\t63584: 58880,\n\t63585: 58881,\n\t63586: 58882,\n\t63587: 58883,\n\t63588: 58884,\n\t63589: 58885,\n\t63590: 58886,\n\t63591: 58887,\n\t63592: 58888,\n\t63593: 58889,\n\t63594: 58890,\n\t63595: 58891,\n\t63596: 58892,\n\t63597: 58893,\n\t63598: 58894,\n\t63599: 58895,\n\t63600: 58896,\n\t63601: 58897,\n\t63602: 58898,\n\t63603: 58899,\n\t63604: 58900,\n\t63605: 58901,\n\t63606: 58902,\n\t63607: 58903,\n\t63608: 58904,\n\t63609: 58905,\n\t63610: 58906,\n\t63611: 58907,\n\t63612: 58908,\n\t63613: 58909,\n\t63614: 58910,\n\t63616: 58911,\n\t63617: 58912,\n\t63618: 58913,\n\t63619: 58914,\n\t63620: 58915,\n\t63621: 58916,\n\t63622: 58917,\n\t63623: 58918,\n\t63624: 58919,\n\t63625: 58920,\n\t63626: 58921,\n\t63627: 58922,\n\t63628: 58923,\n\t63629: 58924,\n\t63630: 58925,\n\t63631: 58926,\n\t63632: 58927,\n\t63633: 58928,\n\t63634: 58929,\n\t63635: 58930,\n\t63636: 58931,\n\t63637: 58932,\n\t63638: 58933,\n\t63639: 58934,\n\t63640: 58935,\n\t63641: 58936,\n\t63642: 58937,\n\t63643: 58938,\n\t63644: 58939,\n\t63645: 58940,\n\t63646: 58941,\n\t63647: 58942,\n\t63648: 58943,\n\t63649: 58944,\n\t63650: 58945,\n\t63651: 58946,\n\t63652: 58947,\n\t63653: 58948,\n\t63654: 58949,\n\t63655: 58950,\n\t63656: 58951,\n\t63657: 58952,\n\t63658: 58953,\n\t63659: 58954,\n\t63660: 58955,\n\t63661: 58956,\n\t63662: 58957,\n\t63663: 58958,\n\t63664: 58959,\n\t63665: 58960,\n\t63666: 58961,\n\t63667: 58962,\n\t63668: 58963,\n\t63669: 58964,\n\t63670: 58965,\n\t63671: 58966,\n\t63672: 58967,\n\t63673: 58968,\n\t63674: 58969,\n\t63675: 58970,\n\t63676: 58971,\n\t63677: 58972,\n\t63678: 58973,\n\t63679: 58974,\n\t63680: 58975,\n\t63681: 58976,\n\t63682: 58977,\n\t63683: 58978,\n\t63684: 58979,\n\t63685: 58980,\n\t63686: 58981,\n\t63687: 58982,\n\t63688: 58983,\n\t63689: 58984,\n\t63690: 58985,\n\t63691: 58986,\n\t63692: 58987,\n\t63693: 58988,\n\t63694: 58989,\n\t63695: 58990,\n\t63696: 58991,\n\t63697: 58992,\n\t63698: 58993,\n\t63699: 58994,\n\t63700: 58995,\n\t63701: 58996,\n\t63702: 58997,\n\t63703: 58998,\n\t63704: 58999,\n\t63705: 59000,\n\t63706: 59001,\n\t63707: 59002,\n\t63708: 59003,\n\t63709: 59004,\n\t63710: 59005,\n\t63711: 59006,\n\t63712: 59007,\n\t63713: 59008,\n\t63714: 59009,\n\t63715: 59010,\n\t63716: 59011,\n\t63717: 59012,\n\t63718: 59013,\n\t63719: 59014,\n\t63720: 59015,\n\t63721: 59016,\n\t63722: 59017,\n\t63723: 59018,\n\t63724: 59019,\n\t63725: 59020,\n\t63726: 59021,\n\t63727: 59022,\n\t63728: 59023,\n\t63729: 59024,\n\t63730: 59025,\n\t63731: 59026,\n\t63732: 59027,\n\t63733: 59028,\n\t63734: 59029,\n\t63735: 59030,\n\t63736: 59031,\n\t63737: 59032,\n\t63738: 59033,\n\t63739: 59034,\n\t63740: 59035,\n\t64064: 8560,\n\t64065: 8561,\n\t64066: 8562,\n\t64067: 8563,\n\t64068: 8564,\n\t64069: 8565,\n\t64070: 8566,\n\t64071: 8567,\n\t64072: 8568,\n\t64073: 8569,\n\t64074: 8544,\n\t64075: 8545,\n\t64076: 8546,\n\t64077: 8547,\n\t64078: 8548,\n\t64079: 8549,\n\t64080: 8550,\n\t64081: 8551,\n\t64082: 8552,\n\t64083: 8553,\n\t64084: 65506,\n\t64085: 65508,\n\t64086: 65287,\n\t64087: 65282,\n\t64088: 12849,\n\t64089: 8470,\n\t64090: 8481,\n\t64091: 8757,\n\t64092: 32394,\n\t64093: 35100,\n\t64094: 37704,\n\t64095: 37512,\n\t64096: 34012,\n\t64097: 20425,\n\t64098: 28859,\n\t64099: 26161,\n\t64100: 26824,\n\t64101: 37625,\n\t64102: 26363,\n\t64103: 24389,\n\t64104: 20008,\n\t64105: 20193,\n\t64106: 20220,\n\t64107: 20224,\n\t64108: 20227,\n\t64109: 20281,\n\t64110: 20310,\n\t64111: 20370,\n\t64112: 20362,\n\t64113: 20378,\n\t64114: 20372,\n\t64115: 20429,\n\t64116: 20544,\n\t64117: 20514,\n\t64118: 20479,\n\t64119: 20510,\n\t64120: 20550,\n\t64121: 20592,\n\t64122: 20546,\n\t64123: 20628,\n\t64124: 20724,\n\t64125: 20696,\n\t64126: 20810,\n\t64128: 20836,\n\t64129: 20893,\n\t64130: 20926,\n\t64131: 20972,\n\t64132: 21013,\n\t64133: 21148,\n\t64134: 21158,\n\t64135: 21184,\n\t64136: 21211,\n\t64137: 21248,\n\t64138: 21255,\n\t64139: 21284,\n\t64140: 21362,\n\t64141: 21395,\n\t64142: 21426,\n\t64143: 21469,\n\t64144: 64014,\n\t64145: 21660,\n\t64146: 21642,\n\t64147: 21673,\n\t64148: 21759,\n\t64149: 21894,\n\t64150: 22361,\n\t64151: 22373,\n\t64152: 22444,\n\t64153: 22472,\n\t64154: 22471,\n\t64155: 64015,\n\t64156: 64016,\n\t64157: 22686,\n\t64158: 22706,\n\t64159: 22795,\n\t64160: 22867,\n\t64161: 22875,\n\t64162: 22877,\n\t64163: 22883,\n\t64164: 22948,\n\t64165: 22970,\n\t64166: 23382,\n\t64167: 23488,\n\t64168: 29999,\n\t64169: 23512,\n\t64170: 23532,\n\t64171: 23582,\n\t64172: 23718,\n\t64173: 23738,\n\t64174: 23797,\n\t64175: 23847,\n\t64176: 23891,\n\t64177: 64017,\n\t64178: 23874,\n\t64179: 23917,\n\t64180: 23992,\n\t64181: 23993,\n\t64182: 24016,\n\t64183: 24353,\n\t64184: 24372,\n\t64185: 24423,\n\t64186: 24503,\n\t64187: 24542,\n\t64188: 24669,\n\t64189: 24709,\n\t64190: 24714,\n\t64191: 24798,\n\t64192: 24789,\n\t64193: 24864,\n\t64194: 24818,\n\t64195: 24849,\n\t64196: 24887,\n\t64197: 24880,\n\t64198: 24984,\n\t64199: 25107,\n\t64200: 25254,\n\t64201: 25589,\n\t64202: 25696,\n\t64203: 25757,\n\t64204: 25806,\n\t64205: 25934,\n\t64206: 26112,\n\t64207: 26133,\n\t64208: 26171,\n\t64209: 26121,\n\t64210: 26158,\n\t64211: 26142,\n\t64212: 26148,\n\t64213: 26213,\n\t64214: 26199,\n\t64215: 26201,\n\t64216: 64018,\n\t64217: 26227,\n\t64218: 26265,\n\t64219: 26272,\n\t64220: 26290,\n\t64221: 26303,\n\t64222: 26362,\n\t64223: 26382,\n\t64224: 63785,\n\t64225: 26470,\n\t64226: 26555,\n\t64227: 26706,\n\t64228: 26560,\n\t64229: 26625,\n\t64230: 26692,\n\t64231: 26831,\n\t64232: 64019,\n\t64233: 26984,\n\t64234: 64020,\n\t64235: 27032,\n\t64236: 27106,\n\t64237: 27184,\n\t64238: 27243,\n\t64239: 27206,\n\t64240: 27251,\n\t64241: 27262,\n\t64242: 27362,\n\t64243: 27364,\n\t64244: 27606,\n\t64245: 27711,\n\t64246: 27740,\n\t64247: 27782,\n\t64248: 27759,\n\t64249: 27866,\n\t64250: 27908,\n\t64251: 28039,\n\t64252: 28015,\n\t64320: 28054,\n\t64321: 28076,\n\t64322: 28111,\n\t64323: 28152,\n\t64324: 28146,\n\t64325: 28156,\n\t64326: 28217,\n\t64327: 28252,\n\t64328: 28199,\n\t64329: 28220,\n\t64330: 28351,\n\t64331: 28552,\n\t64332: 28597,\n\t64333: 28661,\n\t64334: 28677,\n\t64335: 28679,\n\t64336: 28712,\n\t64337: 28805,\n\t64338: 28843,\n\t64339: 28943,\n\t64340: 28932,\n\t64341: 29020,\n\t64342: 28998,\n\t64343: 28999,\n\t64344: 64021,\n\t64345: 29121,\n\t64346: 29182,\n\t64347: 29361,\n\t64348: 29374,\n\t64349: 29476,\n\t64350: 64022,\n\t64351: 29559,\n\t64352: 29629,\n\t64353: 29641,\n\t64354: 29654,\n\t64355: 29667,\n\t64356: 29650,\n\t64357: 29703,\n\t64358: 29685,\n\t64359: 29734,\n\t64360: 29738,\n\t64361: 29737,\n\t64362: 29742,\n\t64363: 29794,\n\t64364: 29833,\n\t64365: 29855,\n\t64366: 29953,\n\t64367: 30063,\n\t64368: 30338,\n\t64369: 30364,\n\t64370: 30366,\n\t64371: 30363,\n\t64372: 30374,\n\t64373: 64023,\n\t64374: 30534,\n\t64375: 21167,\n\t64376: 30753,\n\t64377: 30798,\n\t64378: 30820,\n\t64379: 30842,\n\t64380: 31024,\n\t64381: 64024,\n\t64382: 64025,\n\t64384: 64026,\n\t64385: 31124,\n\t64386: 64027,\n\t64387: 31131,\n\t64388: 31441,\n\t64389: 31463,\n\t64390: 64028,\n\t64391: 31467,\n\t64392: 31646,\n\t64393: 64029,\n\t64394: 32072,\n\t64395: 32092,\n\t64396: 32183,\n\t64397: 32160,\n\t64398: 32214,\n\t64399: 32338,\n\t64400: 32583,\n\t64401: 32673,\n\t64402: 64030,\n\t64403: 33537,\n\t64404: 33634,\n\t64405: 33663,\n\t64406: 33735,\n\t64407: 33782,\n\t64408: 33864,\n\t64409: 33972,\n\t64410: 34131,\n\t64411: 34137,\n\t64412: 34155,\n\t64413: 64031,\n\t64414: 34224,\n\t64415: 64032,\n\t64416: 64033,\n\t64417: 34823,\n\t64418: 35061,\n\t64419: 35346,\n\t64420: 35383,\n\t64421: 35449,\n\t64422: 35495,\n\t64423: 35518,\n\t64424: 35551,\n\t64425: 64034,\n\t64426: 35574,\n\t64427: 35667,\n\t64428: 35711,\n\t64429: 36080,\n\t64430: 36084,\n\t64431: 36114,\n\t64432: 36214,\n\t64433: 64035,\n\t64434: 36559,\n\t64435: 64036,\n\t64436: 64037,\n\t64437: 36967,\n\t64438: 37086,\n\t64439: 64038,\n\t64440: 37141,\n\t64441: 37159,\n\t64442: 37338,\n\t64443: 37335,\n\t64444: 37342,\n\t64445: 37357,\n\t64446: 37358,\n\t64447: 37348,\n\t64448: 37349,\n\t64449: 37382,\n\t64450: 37392,\n\t64451: 37386,\n\t64452: 37434,\n\t64453: 37440,\n\t64454: 37436,\n\t64455: 37454,\n\t64456: 37465,\n\t64457: 37457,\n\t64458: 37433,\n\t64459: 37479,\n\t64460: 37543,\n\t64461: 37495,\n\t64462: 37496,\n\t64463: 37607,\n\t64464: 37591,\n\t64465: 37593,\n\t64466: 37584,\n\t64467: 64039,\n\t64468: 37589,\n\t64469: 37600,\n\t64470: 37587,\n\t64471: 37669,\n\t64472: 37665,\n\t64473: 37627,\n\t64474: 64040,\n\t64475: 37662,\n\t64476: 37631,\n\t64477: 37661,\n\t64478: 37634,\n\t64479: 37744,\n\t64480: 37719,\n\t64481: 37796,\n\t64482: 37830,\n\t64483: 37854,\n\t64484: 37880,\n\t64485: 37937,\n\t64486: 37957,\n\t64487: 37960,\n\t64488: 38290,\n\t64489: 63964,\n\t64490: 64041,\n\t64491: 38557,\n\t64492: 38575,\n\t64493: 38707,\n\t64494: 38715,\n\t64495: 38723,\n\t64496: 38733,\n\t64497: 38735,\n\t64498: 38737,\n\t64499: 38741,\n\t64500: 38999,\n\t64501: 39013,\n\t64502: 64042,\n\t64503: 64043,\n\t64504: 39207,\n\t64505: 64044,\n\t64506: 39326,\n\t64507: 39502,\n\t64508: 39641,\n\t64576: 39644,\n\t64577: 39797,\n\t64578: 39794,\n\t64579: 39823,\n\t64580: 39857,\n\t64581: 39867,\n\t64582: 39936,\n\t64583: 40304,\n\t64584: 40299,\n\t64585: 64045,\n\t64586: 40473,\n\t64587: 40657\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction DataViewEx( buffer, littleEndian ) {\n\n\tthis.dv = new DataView( buffer );\n\tthis.offset = 0;\n\tthis.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;\n\tthis.encoder = new CharsetEncoder();\n\n}\n\nDataViewEx.prototype = {\n\n\tconstructor: DataViewEx,\n\n\tgetInt8: function () {\n\n\t\tvar value = this.dv.getInt8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t},\n\n\tgetInt8Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt8() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint8: function () {\n\n\t\tvar value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t},\n\n\tgetUint8Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getUint8() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\n\tgetInt16: function () {\n\n\t\tvar value = this.dv.getInt16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t},\n\n\tgetInt16Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt16() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint16: function () {\n\n\t\tvar value = this.dv.getUint16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t},\n\n\tgetUint16Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getUint16() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetInt32: function () {\n\n\t\tvar value = this.dv.getInt32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetInt32Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetUint32: function () {\n\n\t\tvar value = this.dv.getUint32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetUint32Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getUint32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetFloat32: function () {\n\n\t\tvar value = this.dv.getFloat32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetFloat32Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetFloat64: function () {\n\n\t\tvar value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t},\n\n\tgetFloat64Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetIndex: function ( type, isUnsigned ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 1:\n\t\t\t\treturn ( isUnsigned === true ) ? this.getUint8() : this.getInt8();\n\n\t\t\tcase 2:\n\t\t\t\treturn ( isUnsigned === true ) ? this.getUint16() : this.getInt16();\n\n\t\t\tcase 4:\n\t\t\t\treturn this.getInt32(); // No Uint32\n\n\t\t\tdefault:\n\t\t\t\tthrow 'unknown number type ' + type + ' exception.';\n\n\t\t}\n\n\t},\n\n\tgetIndexArray: function ( type, size, isUnsigned ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getIndex( type, isUnsigned ) );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetChars: function ( size ) {\n\n\t\tvar str = '';\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint8();\n\t\t\tsize --;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tstr += String.fromCharCode( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize --;\n\n\t\t}\n\n\t\treturn str;\n\n\t},\n\n\tgetSjisStringsAsUnicode: function ( size ) {\n\n\t\tvar a = [];\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint8();\n\t\t\tsize --;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\ta.push( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize --;\n\n\t\t}\n\n\t\treturn this.encoder.s2u( new Uint8Array( a ) );\n\n\t},\n\n\tgetUnicodeStrings: function ( size ) {\n\n\t\tvar str = '';\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tvar value = this.getUint16();\n\t\t\tsize -= 2;\n\n\t\t\tif ( value === 0 ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tstr += String.fromCharCode( value );\n\n\t\t}\n\n\t\twhile ( size > 0 ) {\n\n\t\t\tthis.getUint8();\n\t\t\tsize --;\n\n\t\t}\n\n\t\treturn str;\n\n\t},\n\n\tgetTextBuffer: function () {\n\n\t\tvar size = this.getUint32();\n\t\treturn this.getUnicodeStrings( size );\n\n\t}\n\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction DataCreationHelper() {\n}\n\nDataCreationHelper.prototype = {\n\n\tconstructor: DataCreationHelper,\n\n\tleftToRightVector3: function ( v ) {\n\n\t\tv[ 2 ] = - v[ 2 ];\n\n\t},\n\n\tleftToRightQuaternion: function ( q ) {\n\n\t\tq[ 0 ] = - q[ 0 ];\n\t\tq[ 1 ] = - q[ 1 ];\n\n\t},\n\n\tleftToRightEuler: function ( r ) {\n\n\t\tr[ 0 ] = - r[ 0 ];\n\t\tr[ 1 ] = - r[ 1 ];\n\n\t},\n\n\tleftToRightIndexOrder: function ( p ) {\n\n\t\tvar tmp = p[ 2 ];\n\t\tp[ 2 ] = p[ 0 ];\n\t\tp[ 0 ] = tmp;\n\n\t},\n\n\tleftToRightVector3Range: function ( v1, v2 ) {\n\n\t\tvar tmp = - v2[ 2 ];\n\t\tv2[ 2 ] = - v1[ 2 ];\n\t\tv1[ 2 ] = tmp;\n\n\t},\n\n\tleftToRightEulerRange: function ( r1, r2 ) {\n\n\t\tvar tmp1 = - r2[ 0 ];\n\t\tvar tmp2 = - r2[ 1 ];\n\t\tr2[ 0 ] = - r1[ 0 ];\n\t\tr2[ 1 ] = - r1[ 1 ];\n\t\tr1[ 0 ] = tmp1;\n\t\tr1[ 1 ] = tmp2;\n\n\t}\n\n};\n\n/**\n * @author takahiro / https://github.com/takahirox\n */\n\nfunction Parser() {\n}\n\nParser.prototype.parsePmd = function ( buffer, leftToRight ) {\n\n\tvar pmd = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tpmd.metadata = {};\n\tpmd.metadata.format = 'pmd';\n\tpmd.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.magic = dv.getChars( 3 );\n\n\t\tif ( metadata.magic !== 'Pmd' ) {\n\n\t\t\tthrow 'PMD file magic is not Pmd, but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.version = dv.getFloat32();\n\t\tmetadata.modelName = dv.getSjisStringsAsUnicode( 20 );\n\t\tmetadata.comment = dv.getSjisStringsAsUnicode( 256 );\n\n\t};\n\n\tvar parseVertices = function () {\n\n\t\tvar parseVertex = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.normal = dv.getFloat32Array( 3 );\n\t\t\tp.uv = dv.getFloat32Array( 2 );\n\t\t\tp.skinIndices = dv.getUint16Array( 2 );\n\t\t\tp.skinWeights = [ dv.getUint8() / 100 ];\n\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\t\t\tp.edgeFlag = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.vertexCount = dv.getUint32();\n\n\t\tpmd.vertices = [];\n\n\t\tfor ( var i = 0; i < metadata.vertexCount; i ++ ) {\n\n\t\t\tpmd.vertices.push( parseVertex() );\n\n\t\t}\n\n\t};\n\n\tvar parseFaces = function () {\n\n\t\tvar parseFace = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.indices = dv.getUint16Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.faceCount = dv.getUint32() / 3;\n\n\t\tpmd.faces = [];\n\n\t\tfor ( var i = 0; i < metadata.faceCount; i ++ ) {\n\n\t\t\tpmd.faces.push( parseFace() );\n\n\t\t}\n\n\t};\n\n\tvar parseMaterials = function () {\n\n\t\tvar parseMaterial = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.diffuse = dv.getFloat32Array( 4 );\n\t\t\tp.shininess = dv.getFloat32();\n\t\t\tp.specular = dv.getFloat32Array( 3 );\n\t\t\tp.ambient = dv.getFloat32Array( 3 );\n\t\t\tp.toonIndex = dv.getInt8();\n\t\t\tp.edgeFlag = dv.getUint8();\n\t\t\tp.faceCount = dv.getUint32() / 3;\n\t\t\tp.fileName = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.materialCount = dv.getUint32();\n\n\t\tpmd.materials = [];\n\n\t\tfor ( var i = 0; i < metadata.materialCount; i ++ ) {\n\n\t\t\tpmd.materials.push( parseMaterial() );\n\n\t\t}\n\n\t};\n\n\tvar parseBones = function () {\n\n\t\tvar parseBone = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.parentIndex = dv.getInt16();\n\t\t\tp.tailIndex = dv.getInt16();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.ikIndex = dv.getInt16();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneCount = dv.getUint16();\n\n\t\tpmd.bones = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i ++ ) {\n\n\t\t\tpmd.bones.push( parseBone() );\n\n\t\t}\n\n\t};\n\n\tvar parseIks = function () {\n\n\t\tvar parseIk = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.target = dv.getUint16();\n\t\t\tp.effector = dv.getUint16();\n\t\t\tp.linkCount = dv.getUint8();\n\t\t\tp.iteration = dv.getUint16();\n\t\t\tp.maxAngle = dv.getFloat32();\n\n\t\t\tp.links = [];\n\t\t\tfor ( var i = 0; i < p.linkCount; i ++ ) {\n\n\t\t\t\tvar link = {};\n\t\t\t\tlink.index = dv.getUint16();\n\t\t\t\tp.links.push( link );\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.ikCount = dv.getUint16();\n\n\t\tpmd.iks = [];\n\n\t\tfor ( var i = 0; i < metadata.ikCount; i ++ ) {\n\n\t\t\tpmd.iks.push( parseIk() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.type = dv.getUint8();\n\n\t\t\tp.elements = [];\n\t\t\tfor ( var i = 0; i < p.elementCount; i ++ ) {\n\n\t\t\t\tp.elements.push( {\n\t\t\t\t\tindex: dv.getUint32(),\n\t\t\t\t\tposition: dv.getFloat32Array( 3 )\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.morphCount = dv.getUint16();\n\n\t\tpmd.morphs = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount; i ++ ) {\n\n\t\t\tpmd.morphs.push( parseMorph() );\n\n\t\t}\n\n\n\t};\n\n\tvar parseMorphFrames = function () {\n\n\t\tvar parseMorphFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.index = dv.getUint16();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.morphFrameCount = dv.getUint8();\n\n\t\tpmd.morphFrames = [];\n\n\t\tfor ( var i = 0; i < metadata.morphFrameCount; i ++ ) {\n\n\t\t\tpmd.morphFrames.push( parseMorphFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseBoneFrameNames = function () {\n\n\t\tvar parseBoneFrameName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 50 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneFrameNameCount = dv.getUint8();\n\n\t\tpmd.boneFrameNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameNameCount; i ++ ) {\n\n\t\t\tpmd.boneFrameNames.push( parseBoneFrameName() );\n\n\t\t}\n\n\t};\n\n\tvar parseBoneFrames = function () {\n\n\t\tvar parseBoneFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.boneIndex = dv.getInt16();\n\t\t\tp.frameIndex = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.boneFrameCount = dv.getUint32();\n\n\t\tpmd.boneFrames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameCount; i ++ ) {\n\n\t\t\tpmd.boneFrames.push( parseBoneFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishHeader = function () {\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.englishCompatibility = dv.getUint8();\n\n\t\tif ( metadata.englishCompatibility > 0 ) {\n\n\t\t\tmetadata.englishModelName = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tmetadata.englishComment = dv.getSjisStringsAsUnicode( 256 );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishBoneNames = function () {\n\n\t\tvar parseEnglishBoneName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishBoneNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i ++ ) {\n\n\t\t\tpmd.englishBoneNames.push( parseEnglishBoneName() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishMorphNames = function () {\n\n\t\tvar parseEnglishMorphName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishMorphNames = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount - 1; i ++ ) {\n\n\t\t\tpmd.englishMorphNames.push( parseEnglishMorphName() );\n\n\t\t}\n\n\t};\n\n\tvar parseEnglishBoneFrameNames = function () {\n\n\t\tvar parseEnglishBoneFrameName = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 50 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\n\t\tif ( metadata.englishCompatibility === 0 ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tpmd.englishBoneFrameNames = [];\n\n\t\tfor ( var i = 0; i < metadata.boneFrameNameCount; i ++ ) {\n\n\t\t\tpmd.englishBoneFrameNames.push( parseEnglishBoneFrameName() );\n\n\t\t}\n\n\t};\n\n\tvar parseToonTextures = function () {\n\n\t\tvar parseToonTexture = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.fileName = dv.getSjisStringsAsUnicode( 100 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tpmd.toonTextures = [];\n\n\t\tfor ( var i = 0; i < 10; i ++ ) {\n\n\t\t\tpmd.toonTextures.push( parseToonTexture() );\n\n\t\t}\n\n\t};\n\n\tvar parseRigidBodies = function () {\n\n\t\tvar parseRigidBody = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.boneIndex = dv.getInt16();\n\t\t\tp.groupIndex = dv.getUint8();\n\t\t\tp.groupTarget = dv.getUint16();\n\t\t\tp.shapeType = dv.getUint8();\n\t\t\tp.width = dv.getFloat32();\n\t\t\tp.height = dv.getFloat32();\n\t\t\tp.depth = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.weight = dv.getFloat32();\n\t\t\tp.positionDamping = dv.getFloat32();\n\t\t\tp.rotationDamping = dv.getFloat32();\n\t\t\tp.restitution = dv.getFloat32();\n\t\t\tp.friction = dv.getFloat32();\n\t\t\tp.type = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.rigidBodyCount = dv.getUint32();\n\n\t\tpmd.rigidBodies = [];\n\n\t\tfor ( var i = 0; i < metadata.rigidBodyCount; i ++ ) {\n\n\t\t\tpmd.rigidBodies.push( parseRigidBody() );\n\n\t\t}\n\n\t};\n\n\tvar parseConstraints = function () {\n\n\t\tvar parseConstraint = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getSjisStringsAsUnicode( 20 );\n\t\t\tp.rigidBodyIndex1 = dv.getUint32();\n\t\t\tp.rigidBodyIndex2 = dv.getUint32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.springPosition = dv.getFloat32Array( 3 );\n\t\t\tp.springRotation = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmd.metadata;\n\t\tmetadata.constraintCount = dv.getUint32();\n\n\t\tpmd.constraints = [];\n\n\t\tfor ( var i = 0; i < metadata.constraintCount; i ++ ) {\n\n\t\t\tpmd.constraints.push( parseConstraint() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseVertices();\n\tparseFaces();\n\tparseMaterials();\n\tparseBones();\n\tparseIks();\n\tparseMorphs();\n\tparseMorphFrames();\n\tparseBoneFrameNames();\n\tparseBoneFrames();\n\tparseEnglishHeader();\n\tparseEnglishBoneNames();\n\tparseEnglishMorphNames();\n\tparseEnglishBoneFrameNames();\n\tparseToonTextures();\n\tparseRigidBodies();\n\tparseConstraints();\n\n\tif ( leftToRight === true ) this.leftToRightModel( pmd );\n\n\t// console.log( pmd ); // for console debug\n\n\treturn pmd;\n\n};\n\nParser.prototype.parsePmx = function ( buffer, leftToRight ) {\n\n\tvar pmx = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tpmx.metadata = {};\n\tpmx.metadata.format = 'pmx';\n\tpmx.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.magic = dv.getChars( 4 );\n\n\t\t// Note: don't remove the last blank space.\n\t\tif ( metadata.magic !== 'PMX ' ) {\n\n\t\t\tthrow 'PMX file magic is not PMX , but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.version = dv.getFloat32();\n\n\t\tif ( metadata.version !== 2.0 && metadata.version !== 2.1 ) {\n\n\t\t\tthrow 'PMX version ' + metadata.version + ' is not supported.';\n\n\t\t}\n\n\t\tmetadata.headerSize = dv.getUint8();\n\t\tmetadata.encoding = dv.getUint8();\n\t\tmetadata.additionalUvNum = dv.getUint8();\n\t\tmetadata.vertexIndexSize = dv.getUint8();\n\t\tmetadata.textureIndexSize = dv.getUint8();\n\t\tmetadata.materialIndexSize = dv.getUint8();\n\t\tmetadata.boneIndexSize = dv.getUint8();\n\t\tmetadata.morphIndexSize = dv.getUint8();\n\t\tmetadata.rigidBodyIndexSize = dv.getUint8();\n\t\tmetadata.modelName = dv.getTextBuffer();\n\t\tmetadata.englishModelName = dv.getTextBuffer();\n\t\tmetadata.comment = dv.getTextBuffer();\n\t\tmetadata.englishComment = dv.getTextBuffer();\n\n\t};\n\n\tvar parseVertices = function () {\n\n\t\tvar parseVertex = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.normal = dv.getFloat32Array( 3 );\n\t\t\tp.uv = dv.getFloat32Array( 2 );\n\n\t\t\tp.auvs = [];\n\n\t\t\tfor ( var i = 0; i < pmx.metadata.additionalUvNum; i ++ ) {\n\n\t\t\t\tp.auvs.push( dv.getFloat32Array( 4 ) );\n\n\t\t\t}\n\n\t\t\tp.type = dv.getUint8();\n\n\t\t\tvar indexSize = metadata.boneIndexSize;\n\n\t\t\tif ( p.type === 0 ) { // BDEF1\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 1 );\n\t\t\t\tp.skinWeights = [ 1.0 ];\n\n\t\t\t} else if ( p.type === 1 ) { // BDEF2\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 2 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 1 );\n\t\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\n\t\t\t} else if ( p.type === 2 ) { // BDEF4\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 4 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 4 );\n\n\t\t\t} else if ( p.type === 3 ) { // SDEF\n\n\t\t\t\tp.skinIndices = dv.getIndexArray( indexSize, 2 );\n\t\t\t\tp.skinWeights = dv.getFloat32Array( 1 );\n\t\t\t\tp.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );\n\n\t\t\t\tp.skinC = dv.getFloat32Array( 3 );\n\t\t\t\tp.skinR0 = dv.getFloat32Array( 3 );\n\t\t\t\tp.skinR1 = dv.getFloat32Array( 3 );\n\n\t\t\t\t// SDEF is not supported yet and is handled as BDEF2 so far.\n\t\t\t\t// TODO: SDEF support\n\t\t\t\tp.type = 1;\n\n\t\t\t} else {\n\n\t\t\t\tthrow 'unsupport bone type ' + p.type + ' exception.';\n\n\t\t\t}\n\n\t\t\tp.edgeRatio = dv.getFloat32();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.vertexCount = dv.getUint32();\n\n\t\tpmx.vertices = [];\n\n\t\tfor ( var i = 0; i < metadata.vertexCount; i ++ ) {\n\n\t\t\tpmx.vertices.push( parseVertex() );\n\n\t\t}\n\n\t};\n\n\tvar parseFaces = function () {\n\n\t\tvar parseFace = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.indices = dv.getIndexArray( metadata.vertexIndexSize, 3, true );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.faceCount = dv.getUint32() / 3;\n\n\t\tpmx.faces = [];\n\n\t\tfor ( var i = 0; i < metadata.faceCount; i ++ ) {\n\n\t\t\tpmx.faces.push( parseFace() );\n\n\t\t}\n\n\t};\n\n\tvar parseTextures = function () {\n\n\t\tvar parseTexture = function () {\n\n\t\t\treturn dv.getTextBuffer();\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.textureCount = dv.getUint32();\n\n\t\tpmx.textures = [];\n\n\t\tfor ( var i = 0; i < metadata.textureCount; i ++ ) {\n\n\t\t\tpmx.textures.push( parseTexture() );\n\n\t\t}\n\n\t};\n\n\tvar parseMaterials = function () {\n\n\t\tvar parseMaterial = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.diffuse = dv.getFloat32Array( 4 );\n\t\t\tp.specular = dv.getFloat32Array( 3 );\n\t\t\tp.shininess = dv.getFloat32();\n\t\t\tp.ambient = dv.getFloat32Array( 3 );\n\t\t\tp.flag = dv.getUint8();\n\t\t\tp.edgeColor = dv.getFloat32Array( 4 );\n\t\t\tp.edgeSize = dv.getFloat32();\n\t\t\tp.textureIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\t\t\tp.envTextureIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\t\t\tp.envFlag = dv.getUint8();\n\t\t\tp.toonFlag = dv.getUint8();\n\n\t\t\tif ( p.toonFlag === 0 ) {\n\n\t\t\t\tp.toonIndex = dv.getIndex( pmx.metadata.textureIndexSize );\n\n\t\t\t} else if ( p.toonFlag === 1 ) {\n\n\t\t\t\tp.toonIndex = dv.getInt8();\n\n\t\t\t} else {\n\n\t\t\t\tthrow 'unknown toon flag ' + p.toonFlag + ' exception.';\n\n\t\t\t}\n\n\t\t\tp.comment = dv.getTextBuffer();\n\t\t\tp.faceCount = dv.getUint32() / 3;\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.materialCount = dv.getUint32();\n\n\t\tpmx.materials = [];\n\n\t\tfor ( var i = 0; i < metadata.materialCount; i ++ ) {\n\n\t\t\tpmx.materials.push( parseMaterial() );\n\n\t\t}\n\n\t};\n\n\tvar parseBones = function () {\n\n\t\tvar parseBone = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.parentIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\tp.transformationClass = dv.getUint32();\n\t\t\tp.flag = dv.getUint16();\n\n\t\t\tif ( p.flag & 0x1 ) {\n\n\t\t\t\tp.connectIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\n\t\t\t} else {\n\n\t\t\t\tp.offsetPosition = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x100 || p.flag & 0x200 ) {\n\n\t\t\t\t// Note: I don't think Grant is an appropriate name\n\t\t\t\t//       but I found that some English translated MMD tools use this term\n\t\t\t\t//       so I've named it Grant so far.\n\t\t\t\t//       I'd rename to more appropriate name from Grant later.\n\t\t\t\tvar grant = {};\n\n\t\t\t\tgrant.isLocal = ( p.flag & 0x80 ) !== 0 ? true : false;\n\t\t\t\tgrant.affectRotation = ( p.flag & 0x100 ) !== 0 ? true : false;\n\t\t\t\tgrant.affectPosition = ( p.flag & 0x200 ) !== 0 ? true : false;\n\t\t\t\tgrant.parentIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\tgrant.ratio = dv.getFloat32();\n\n\t\t\t\tp.grant = grant;\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x400 ) {\n\n\t\t\t\tp.fixAxis = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x800 ) {\n\n\t\t\t\tp.localXVector = dv.getFloat32Array( 3 );\n\t\t\t\tp.localZVector = dv.getFloat32Array( 3 );\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x2000 ) {\n\n\t\t\t\tp.key = dv.getUint32();\n\n\t\t\t}\n\n\t\t\tif ( p.flag & 0x20 ) {\n\n\t\t\t\tvar ik = {};\n\n\t\t\t\tik.effector = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\tik.target = null;\n\t\t\t\tik.iteration = dv.getUint32();\n\t\t\t\tik.maxAngle = dv.getFloat32();\n\t\t\t\tik.linkCount = dv.getUint32();\n\t\t\t\tik.links = [];\n\n\t\t\t\tfor ( var i = 0; i < ik.linkCount; i ++ ) {\n\n\t\t\t\t\tvar link = {};\n\t\t\t\t\tlink.index = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\t\tlink.angleLimitation = dv.getUint8();\n\n\t\t\t\t\tif ( link.angleLimitation === 1 ) {\n\n\t\t\t\t\t\tlink.lowerLimitationAngle = dv.getFloat32Array( 3 );\n\t\t\t\t\t\tlink.upperLimitationAngle = dv.getFloat32Array( 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tik.links.push( link );\n\n\t\t\t\t}\n\n\t\t\t\tp.ik = ik;\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.boneCount = dv.getUint32();\n\n\t\tpmx.bones = [];\n\n\t\tfor ( var i = 0; i < metadata.boneCount; i ++ ) {\n\n\t\t\tpmx.bones.push( parseBone() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.panel = dv.getUint8();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.elements = [];\n\n\t\t\tfor ( var i = 0; i < p.elementCount; i ++ ) {\n\n\t\t\t\tif ( p.type === 0 ) { // group morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.morphIndexSize );\n\t\t\t\t\tm.ratio = dv.getFloat32();\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 1 ) { // vertex morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.vertexIndexSize, true );\n\t\t\t\t\tm.position = dv.getFloat32Array( 3 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 2 ) { // bone morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\t\t\tm.position = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.rotation = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 3 ) { // uv morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.vertexIndexSize, true );\n\t\t\t\t\tm.uv = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t} else if ( p.type === 4 ) { // additional uv1\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 5 ) { // additional uv2\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 6 ) { // additional uv3\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 7 ) { // additional uv4\n\n\t\t\t\t\t// TODO: implement\n\n\t\t\t\t} else if ( p.type === 8 ) { // material morph\n\n\t\t\t\t\tvar m = {};\n\t\t\t\t\tm.index = dv.getIndex( pmx.metadata.materialIndexSize );\n\t\t\t\t\tm.type = dv.getUint8();\n\t\t\t\t\tm.diffuse = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.specular = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.shininess = dv.getFloat32();\n\t\t\t\t\tm.ambient = dv.getFloat32Array( 3 );\n\t\t\t\t\tm.edgeColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.edgeSize = dv.getFloat32();\n\t\t\t\t\tm.textureColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.sphereTextureColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tm.toonColor = dv.getFloat32Array( 4 );\n\t\t\t\t\tp.elements.push( m );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.morphCount = dv.getUint32();\n\n\t\tpmx.morphs = [];\n\n\t\tfor ( var i = 0; i < metadata.morphCount; i ++ ) {\n\n\t\t\tpmx.morphs.push( parseMorph() );\n\n\t\t}\n\n\t};\n\n\tvar parseFrames = function () {\n\n\t\tvar parseFrame = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.elementCount = dv.getUint32();\n\t\t\tp.elements = [];\n\n\t\t\tfor ( var i = 0; i < p.elementCount; i ++ ) {\n\n\t\t\t\tvar e = {};\n\t\t\t\te.target = dv.getUint8();\n\t\t\t\te.index = ( e.target === 0 ) ? dv.getIndex( pmx.metadata.boneIndexSize ) : dv.getIndex( pmx.metadata.morphIndexSize );\n\t\t\t\tp.elements.push( e );\n\n\t\t\t}\n\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.frameCount = dv.getUint32();\n\n\t\tpmx.frames = [];\n\n\t\tfor ( var i = 0; i < metadata.frameCount; i ++ ) {\n\n\t\t\tpmx.frames.push( parseFrame() );\n\n\t\t}\n\n\t};\n\n\tvar parseRigidBodies = function () {\n\n\t\tvar parseRigidBody = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.boneIndex = dv.getIndex( pmx.metadata.boneIndexSize );\n\t\t\tp.groupIndex = dv.getUint8();\n\t\t\tp.groupTarget = dv.getUint16();\n\t\t\tp.shapeType = dv.getUint8();\n\t\t\tp.width = dv.getFloat32();\n\t\t\tp.height = dv.getFloat32();\n\t\t\tp.depth = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.weight = dv.getFloat32();\n\t\t\tp.positionDamping = dv.getFloat32();\n\t\t\tp.rotationDamping = dv.getFloat32();\n\t\t\tp.restitution = dv.getFloat32();\n\t\t\tp.friction = dv.getFloat32();\n\t\t\tp.type = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.rigidBodyCount = dv.getUint32();\n\n\t\tpmx.rigidBodies = [];\n\n\t\tfor ( var i = 0; i < metadata.rigidBodyCount; i ++ ) {\n\n\t\t\tpmx.rigidBodies.push( parseRigidBody() );\n\n\t\t}\n\n\t};\n\n\tvar parseConstraints = function () {\n\n\t\tvar parseConstraint = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.name = dv.getTextBuffer();\n\t\t\tp.englishName = dv.getTextBuffer();\n\t\t\tp.type = dv.getUint8();\n\t\t\tp.rigidBodyIndex1 = dv.getIndex( pmx.metadata.rigidBodyIndexSize );\n\t\t\tp.rigidBodyIndex2 = dv.getIndex( pmx.metadata.rigidBodyIndexSize );\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.translationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation1 = dv.getFloat32Array( 3 );\n\t\t\tp.rotationLimitation2 = dv.getFloat32Array( 3 );\n\t\t\tp.springPosition = dv.getFloat32Array( 3 );\n\t\t\tp.springRotation = dv.getFloat32Array( 3 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = pmx.metadata;\n\t\tmetadata.constraintCount = dv.getUint32();\n\n\t\tpmx.constraints = [];\n\n\t\tfor ( var i = 0; i < metadata.constraintCount; i ++ ) {\n\n\t\t\tpmx.constraints.push( parseConstraint() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseVertices();\n\tparseFaces();\n\tparseTextures();\n\tparseMaterials();\n\tparseBones();\n\tparseMorphs();\n\tparseFrames();\n\tparseRigidBodies();\n\tparseConstraints();\n\n\tif ( leftToRight === true ) this.leftToRightModel( pmx );\n\n\t// console.log( pmx ); // for console debug\n\n\treturn pmx;\n\n};\n\nParser.prototype.parseVmd = function ( buffer, leftToRight ) {\n\n\tvar vmd = {};\n\tvar dv = new DataViewEx( buffer );\n\n\tvmd.metadata = {};\n\tvmd.metadata.coordinateSystem = 'left';\n\n\tvar parseHeader = function () {\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.magic = dv.getChars( 30 );\n\n\t\tif ( metadata.magic !== 'Vocaloid Motion Data 0002' ) {\n\n\t\t\tthrow 'VMD file magic is not Vocaloid Motion Data 0002, but ' + metadata.magic;\n\n\t\t}\n\n\t\tmetadata.name = dv.getSjisStringsAsUnicode( 20 );\n\n\t};\n\n\tvar parseMotions = function () {\n\n\t\tvar parseMotion = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.boneName = dv.getSjisStringsAsUnicode( 15 );\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 4 );\n\t\t\tp.interpolation = dv.getUint8Array( 64 );\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.motionCount = dv.getUint32();\n\n\t\tvmd.motions = [];\n\t\tfor ( var i = 0; i < metadata.motionCount; i ++ ) {\n\n\t\t\tvmd.motions.push( parseMotion() );\n\n\t\t}\n\n\t};\n\n\tvar parseMorphs = function () {\n\n\t\tvar parseMorph = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.morphName = dv.getSjisStringsAsUnicode( 15 );\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.weight = dv.getFloat32();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.morphCount = dv.getUint32();\n\n\t\tvmd.morphs = [];\n\t\tfor ( var i = 0; i < metadata.morphCount; i ++ ) {\n\n\t\t\tvmd.morphs.push( parseMorph() );\n\n\t\t}\n\n\t};\n\n\tvar parseCameras = function () {\n\n\t\tvar parseCamera = function () {\n\n\t\t\tvar p = {};\n\t\t\tp.frameNum = dv.getUint32();\n\t\t\tp.distance = dv.getFloat32();\n\t\t\tp.position = dv.getFloat32Array( 3 );\n\t\t\tp.rotation = dv.getFloat32Array( 3 );\n\t\t\tp.interpolation = dv.getUint8Array( 24 );\n\t\t\tp.fov = dv.getUint32();\n\t\t\tp.perspective = dv.getUint8();\n\t\t\treturn p;\n\n\t\t};\n\n\t\tvar metadata = vmd.metadata;\n\t\tmetadata.cameraCount = dv.getUint32();\n\n\t\tvmd.cameras = [];\n\t\tfor ( var i = 0; i < metadata.cameraCount; i ++ ) {\n\n\t\t\tvmd.cameras.push( parseCamera() );\n\n\t\t}\n\n\t};\n\n\tparseHeader();\n\tparseMotions();\n\tparseMorphs();\n\tparseCameras();\n\n\tif ( leftToRight === true ) this.leftToRightVmd( vmd );\n\n\t// console.log( vmd ); // for console debug\n\n\treturn vmd;\n\n};\n\nParser.prototype.parseVpd = function ( text, leftToRight ) {\n\n\tvar vpd = {};\n\n\tvpd.metadata = {};\n\tvpd.metadata.coordinateSystem = 'left';\n\n\tvpd.bones = [];\n\n\tvar commentPatternG = /\\/\\/\\w*(\\r|\\n|\\r\\n)/g;\n\tvar newlinePattern = /\\r|\\n|\\r\\n/;\n\n\tvar lines = text.replace( commentPatternG, '' ).split( newlinePattern );\n\n\tfunction throwError() {\n\n\t\tthrow 'the file seems not vpd file.';\n\n\t}\n\n\tfunction checkMagic() {\n\n\t\tif ( lines[ 0 ] !== 'Vocaloid Pose Data file' ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t}\n\n\tfunction parseHeader() {\n\n\t\tif ( lines.length < 4 ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t\tvpd.metadata.parentFile = lines[ 2 ];\n\t\tvpd.metadata.boneCount = parseInt( lines[ 3 ] );\n\n\t}\n\n\tfunction parseBones() {\n\n\t\tvar boneHeaderPattern = /^\\s*(Bone[0-9]+)\\s*\\{\\s*(.*)$/;\n\t\tvar boneVectorPattern = /^\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*;/;\n\t\tvar boneQuaternionPattern = /^\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*;/;\n\t\tvar boneFooterPattern = /^\\s*}/;\n\n\t\tvar bones = vpd.bones;\n\t\tvar n = null;\n\t\tvar v = null;\n\t\tvar q = null;\n\n\t\tfor ( var i = 4; i < lines.length; i ++ ) {\n\n\t\t\tvar line = lines[ i ];\n\n\t\t\tvar result;\n\n\t\t\tresult = line.match( boneHeaderPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( n !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tn = result[ 2 ];\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneVectorPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( v !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tv = [\n\n\t\t\t\t\tparseFloat( result[ 1 ] ),\n\t\t\t\t\tparseFloat( result[ 2 ] ),\n\t\t\t\t\tparseFloat( result[ 3 ] )\n\n\t\t\t\t];\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneQuaternionPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( q !== null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tq = [\n\n\t\t\t\t\tparseFloat( result[ 1 ] ),\n\t\t\t\t\tparseFloat( result[ 2 ] ),\n\t\t\t\t\tparseFloat( result[ 3 ] ),\n\t\t\t\t\tparseFloat( result[ 4 ] )\n\n\t\t\t\t];\n\n\n\t\t\t}\n\n\t\t\tresult = line.match( boneFooterPattern );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\tif ( n === null || v === null || q === null ) {\n\n\t\t\t\t\tthrowError();\n\n\t\t\t\t}\n\n\t\t\t\tbones.push( {\n\n\t\t\t\t\tname: n,\n\t\t\t\t\ttranslation: v,\n\t\t\t\t\tquaternion: q\n\n\t\t\t\t} );\n\n\t\t\t\tn = null;\n\t\t\t\tv = null;\n\t\t\t\tq = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( n !== null || v !== null || q !== null ) {\n\n\t\t\tthrowError();\n\n\t\t}\n\n\t}\n\n\tcheckMagic();\n\tparseHeader();\n\tparseBones();\n\n\tif ( leftToRight === true ) this.leftToRightVpd( vpd );\n\n\t// console.log( vpd );  // for console debug\n\n\treturn vpd;\n\n};\n\nParser.prototype.mergeVmds = function ( vmds ) {\n\n\tvar v = {};\n\tv.metadata = {};\n\tv.metadata.name = vmds[ 0 ].metadata.name;\n\tv.metadata.coordinateSystem = vmds[ 0 ].metadata.coordinateSystem;\n\tv.metadata.motionCount = 0;\n\tv.metadata.morphCount = 0;\n\tv.metadata.cameraCount = 0;\n\tv.motions = [];\n\tv.morphs = [];\n\tv.cameras = [];\n\n\tfor ( var i = 0; i < vmds.length; i ++ ) {\n\n\t\tvar v2 = vmds[ i ];\n\n\t\tv.metadata.motionCount += v2.metadata.motionCount;\n\t\tv.metadata.morphCount += v2.metadata.morphCount;\n\t\tv.metadata.cameraCount += v2.metadata.cameraCount;\n\n\t\tfor ( var j = 0; j < v2.metadata.motionCount; j ++ ) {\n\n\t\t\tv.motions.push( v2.motions[ j ] );\n\n\t\t}\n\n\t\tfor ( var j = 0; j < v2.metadata.morphCount; j ++ ) {\n\n\t\t\tv.morphs.push( v2.morphs[ j ] );\n\n\t\t}\n\n\t\tfor ( var j = 0; j < v2.metadata.cameraCount; j ++ ) {\n\n\t\t\tv.cameras.push( v2.cameras[ j ] );\n\n\t\t}\n\n\t}\n\n\treturn v;\n\n};\n\nParser.prototype.leftToRightModel = function ( model ) {\n\n\tif ( model.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tmodel.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < model.metadata.vertexCount; i ++ ) {\n\n\t\thelper.leftToRightVector3( model.vertices[ i ].position );\n\t\thelper.leftToRightVector3( model.vertices[ i ].normal );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.faceCount; i ++ ) {\n\n\t\thelper.leftToRightIndexOrder( model.faces[ i ].indices );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.boneCount; i ++ ) {\n\n\t\thelper.leftToRightVector3( model.bones[ i ].position );\n\n\t}\n\n\t// TODO: support other morph for PMX\n\tfor ( var i = 0; i < model.metadata.morphCount; i ++ ) {\n\n\t\tvar m = model.morphs[ i ];\n\n\t\tif ( model.metadata.format === 'pmx' && m.type !== 1 ) {\n\n\t\t\t// TODO: implement\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tfor ( var j = 0; j < m.elements.length; j ++ ) {\n\n\t\t\thelper.leftToRightVector3( m.elements[ j ].position );\n\n\t\t}\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.rigidBodyCount; i ++ ) {\n\n\t\thelper.leftToRightVector3( model.rigidBodies[ i ].position );\n\t\thelper.leftToRightEuler( model.rigidBodies[ i ].rotation );\n\n\t}\n\n\tfor ( var i = 0; i < model.metadata.constraintCount; i ++ ) {\n\n\t\thelper.leftToRightVector3( model.constraints[ i ].position );\n\t\thelper.leftToRightEuler( model.constraints[ i ].rotation );\n\t\thelper.leftToRightVector3Range( model.constraints[ i ].translationLimitation1, model.constraints[ i ].translationLimitation2 );\n\t\thelper.leftToRightEulerRange( model.constraints[ i ].rotationLimitation1, model.constraints[ i ].rotationLimitation2 );\n\n\t}\n\n};\n\nParser.prototype.leftToRightVmd = function ( vmd ) {\n\n\tif ( vmd.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tvmd.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < vmd.metadata.motionCount; i ++ ) {\n\n\t\thelper.leftToRightVector3( vmd.motions[ i ].position );\n\t\thelper.leftToRightQuaternion( vmd.motions[ i ].rotation );\n\n\t}\n\n\tfor ( var i = 0; i < vmd.metadata.cameraCount; i ++ ) {\n\n\t\thelper.leftToRightVector3( vmd.cameras[ i ].position );\n\t\thelper.leftToRightEuler( vmd.cameras[ i ].rotation );\n\n\t}\n\n};\n\nParser.prototype.leftToRightVpd = function ( vpd ) {\n\n\tif ( vpd.metadata.coordinateSystem === 'right' ) {\n\n\t\treturn;\n\n\t}\n\n\tvpd.metadata.coordinateSystem = 'right';\n\n\tvar helper = new DataCreationHelper();\n\n\tfor ( var i = 0; i < vpd.bones.length; i ++ ) {\n\n\t\thelper.leftToRightVector3( vpd.bones[ i ].translation );\n\t\thelper.leftToRightQuaternion( vpd.bones[ i ].quaternion );\n\n\t}\n\n};\n\nvar MMDParser = { CharsetEncoder, Parser };\n\nexport { MMDParser };\n"
  },
  {
    "path": "libs/three.js/libs/motion-controllers.module.js",
    "content": "/**\n * @webxr-input-profiles/motion-controllers 1.0.0 https://github.com/immersive-web/webxr-input-profiles\n */\n\nconst Constants = {\n  Handedness: Object.freeze({\n    NONE: 'none',\n    LEFT: 'left',\n    RIGHT: 'right'\n  }),\n\n  ComponentState: Object.freeze({\n    DEFAULT: 'default',\n    TOUCHED: 'touched',\n    PRESSED: 'pressed'\n  }),\n\n  ComponentProperty: Object.freeze({\n    BUTTON: 'button',\n    X_AXIS: 'xAxis',\n    Y_AXIS: 'yAxis',\n    STATE: 'state'\n  }),\n\n  ComponentType: Object.freeze({\n    TRIGGER: 'trigger',\n    SQUEEZE: 'squeeze',\n    TOUCHPAD: 'touchpad',\n    THUMBSTICK: 'thumbstick',\n    BUTTON: 'button'\n  }),\n\n  ButtonTouchThreshold: 0.05,\n\n  AxisTouchThreshold: 0.1,\n\n  VisualResponseProperty: Object.freeze({\n    TRANSFORM: 'transform',\n    VISIBILITY: 'visibility'\n  })\n};\n\n/**\n * @description Static helper function to fetch a JSON file and turn it into a JS object\n * @param {string} path - Path to JSON file to be fetched\n */\nasync function fetchJsonFile(path) {\n  const response = await fetch(path);\n  if (!response.ok) {\n    throw new Error(response.statusText);\n  } else {\n    return response.json();\n  }\n}\n\nasync function fetchProfilesList(basePath) {\n  if (!basePath) {\n    throw new Error('No basePath supplied');\n  }\n\n  const profileListFileName = 'profilesList.json';\n  const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`);\n  return profilesList;\n}\n\nasync function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) {\n  if (!xrInputSource) {\n    throw new Error('No xrInputSource supplied');\n  }\n\n  if (!basePath) {\n    throw new Error('No basePath supplied');\n  }\n\n  // Get the list of profiles\n  const supportedProfilesList = await fetchProfilesList(basePath);\n\n  // Find the relative path to the first requested profile that is recognized\n  let match;\n  xrInputSource.profiles.some((profileId) => {\n    const supportedProfile = supportedProfilesList[profileId];\n    if (supportedProfile) {\n      match = {\n        profileId,\n        profilePath: `${basePath}/${supportedProfile.path}`,\n        deprecated: !!supportedProfile.deprecated\n      };\n    }\n    return !!match;\n  });\n\n  if (!match) {\n    if (!defaultProfile) {\n      throw new Error('No matching profile name found');\n    }\n\n    const supportedProfile = supportedProfilesList[defaultProfile];\n    if (!supportedProfile) {\n      throw new Error(`No matching profile name found and default profile \"${defaultProfile}\" missing.`);\n    }\n\n    match = {\n      profileId: defaultProfile,\n      profilePath: `${basePath}/${supportedProfile.path}`,\n      deprecated: !!supportedProfile.deprecated\n    };\n  }\n\n  const profile = await fetchJsonFile(match.profilePath);\n\n  let assetPath;\n  if (getAssetPath) {\n    let layout;\n    if (xrInputSource.handedness === 'any') {\n      layout = profile.layouts[Object.keys(profile.layouts)[0]];\n    } else {\n      layout = profile.layouts[xrInputSource.handedness];\n    }\n    if (!layout) {\n      throw new Error(\n        `No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}`\n      );\n    }\n\n    if (layout.assetPath) {\n      assetPath = match.profilePath.replace('profile.json', layout.assetPath);\n    }\n  }\n\n  return { profile, assetPath };\n}\n\n/** @constant {Object} */\nconst defaultComponentValues = {\n  xAxis: 0,\n  yAxis: 0,\n  button: 0,\n  state: Constants.ComponentState.DEFAULT\n};\n\n/**\n * @description Converts an X, Y coordinate from the range -1 to 1 (as reported by the Gamepad\n * API) to the range 0 to 1 (for interpolation). Also caps the X, Y values to be bounded within\n * a circle. This ensures that thumbsticks are not animated outside the bounds of their physical\n * range of motion and touchpads do not report touch locations off their physical bounds.\n * @param {number} x The original x coordinate in the range -1 to 1\n * @param {number} y The original y coordinate in the range -1 to 1\n */\nfunction normalizeAxes(x = 0, y = 0) {\n  let xAxis = x;\n  let yAxis = y;\n\n  // Determine if the point is outside the bounds of the circle\n  // and, if so, place it on the edge of the circle\n  const hypotenuse = Math.sqrt((x * x) + (y * y));\n  if (hypotenuse > 1) {\n    const theta = Math.atan2(y, x);\n    xAxis = Math.cos(theta);\n    yAxis = Math.sin(theta);\n  }\n\n  // Scale and move the circle so values are in the interpolation range.  The circle's origin moves\n  // from (0, 0) to (0.5, 0.5). The circle's radius scales from 1 to be 0.5.\n  const result = {\n    normalizedXAxis: (xAxis * 0.5) + 0.5,\n    normalizedYAxis: (yAxis * 0.5) + 0.5\n  };\n  return result;\n}\n\n/**\n * Contains the description of how the 3D model should visually respond to a specific user input.\n * This is accomplished by initializing the object with the name of a node in the 3D model and\n * property that need to be modified in response to user input, the name of the nodes representing\n * the allowable range of motion, and the name of the input which triggers the change. In response\n * to the named input changing, this object computes the appropriate weighting to use for\n * interpolating between the range of motion nodes.\n */\nclass VisualResponse {\n  constructor(visualResponseDescription) {\n    this.componentProperty = visualResponseDescription.componentProperty;\n    this.states = visualResponseDescription.states;\n    this.valueNodeName = visualResponseDescription.valueNodeName;\n    this.valueNodeProperty = visualResponseDescription.valueNodeProperty;\n\n    if (this.valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM) {\n      this.minNodeName = visualResponseDescription.minNodeName;\n      this.maxNodeName = visualResponseDescription.maxNodeName;\n    }\n\n    // Initializes the response's current value based on default data\n    this.value = 0;\n    this.updateFromComponent(defaultComponentValues);\n  }\n\n  /**\n   * Computes the visual response's interpolation weight based on component state\n   * @param {Object} componentValues - The component from which to update\n   * @param {number} xAxis - The reported X axis value of the component\n   * @param {number} yAxis - The reported Y axis value of the component\n   * @param {number} button - The reported value of the component's button\n   * @param {string} state - The component's active state\n   */\n  updateFromComponent({\n    xAxis, yAxis, button, state\n  }) {\n    const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis);\n    switch (this.componentProperty) {\n      case Constants.ComponentProperty.X_AXIS:\n        this.value = (this.states.includes(state)) ? normalizedXAxis : 0.5;\n        break;\n      case Constants.ComponentProperty.Y_AXIS:\n        this.value = (this.states.includes(state)) ? normalizedYAxis : 0.5;\n        break;\n      case Constants.ComponentProperty.BUTTON:\n        this.value = (this.states.includes(state)) ? button : 0;\n        break;\n      case Constants.ComponentProperty.STATE:\n        if (this.valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY) {\n          this.value = (this.states.includes(state));\n        } else {\n          this.value = this.states.includes(state) ? 1.0 : 0.0;\n        }\n        break;\n      default:\n        throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);\n    }\n  }\n}\n\nclass Component {\n  /**\n   * @param {Object} componentId - Id of the component\n   * @param {Object} componentDescription - Description of the component to be created\n   */\n  constructor(componentId, componentDescription) {\n    if (!componentId\n     || !componentDescription\n     || !componentDescription.visualResponses\n     || !componentDescription.gamepadIndices\n     || Object.keys(componentDescription.gamepadIndices).length === 0) {\n      throw new Error('Invalid arguments supplied');\n    }\n\n    this.id = componentId;\n    this.type = componentDescription.type;\n    this.rootNodeName = componentDescription.rootNodeName;\n    this.touchPointNodeName = componentDescription.touchPointNodeName;\n\n    // Build all the visual responses for this component\n    this.visualResponses = {};\n    Object.keys(componentDescription.visualResponses).forEach((responseName) => {\n      const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]);\n      this.visualResponses[responseName] = visualResponse;\n    });\n\n    // Set default values\n    this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices);\n\n    this.values = {\n      state: Constants.ComponentState.DEFAULT,\n      button: (this.gamepadIndices.button !== undefined) ? 0 : undefined,\n      xAxis: (this.gamepadIndices.xAxis !== undefined) ? 0 : undefined,\n      yAxis: (this.gamepadIndices.yAxis !== undefined) ? 0 : undefined\n    };\n  }\n\n  get data() {\n    const data = { id: this.id, ...this.values };\n    return data;\n  }\n\n  /**\n   * @description Poll for updated data based on current gamepad state\n   * @param {Object} gamepad - The gamepad object from which the component data should be polled\n   */\n  updateFromGamepad(gamepad) {\n    // Set the state to default before processing other data sources\n    this.values.state = Constants.ComponentState.DEFAULT;\n\n    // Get and normalize button\n    if (this.gamepadIndices.button !== undefined\n        && gamepad.buttons.length > this.gamepadIndices.button) {\n      const gamepadButton = gamepad.buttons[this.gamepadIndices.button];\n      this.values.button = gamepadButton.value;\n      this.values.button = (this.values.button < 0) ? 0 : this.values.button;\n      this.values.button = (this.values.button > 1) ? 1 : this.values.button;\n\n      // Set the state based on the button\n      if (gamepadButton.pressed || this.values.button === 1) {\n        this.values.state = Constants.ComponentState.PRESSED;\n      } else if (gamepadButton.touched || this.values.button > Constants.ButtonTouchThreshold) {\n        this.values.state = Constants.ComponentState.TOUCHED;\n      }\n    }\n\n    // Get and normalize x axis value\n    if (this.gamepadIndices.xAxis !== undefined\n        && gamepad.axes.length > this.gamepadIndices.xAxis) {\n      this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis];\n      this.values.xAxis = (this.values.xAxis < -1) ? -1 : this.values.xAxis;\n      this.values.xAxis = (this.values.xAxis > 1) ? 1 : this.values.xAxis;\n\n      // If the state is still default, check if the xAxis makes it touched\n      if (this.values.state === Constants.ComponentState.DEFAULT\n        && Math.abs(this.values.xAxis) > Constants.AxisTouchThreshold) {\n        this.values.state = Constants.ComponentState.TOUCHED;\n      }\n    }\n\n    // Get and normalize Y axis value\n    if (this.gamepadIndices.yAxis !== undefined\n        && gamepad.axes.length > this.gamepadIndices.yAxis) {\n      this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis];\n      this.values.yAxis = (this.values.yAxis < -1) ? -1 : this.values.yAxis;\n      this.values.yAxis = (this.values.yAxis > 1) ? 1 : this.values.yAxis;\n\n      // If the state is still default, check if the yAxis makes it touched\n      if (this.values.state === Constants.ComponentState.DEFAULT\n        && Math.abs(this.values.yAxis) > Constants.AxisTouchThreshold) {\n        this.values.state = Constants.ComponentState.TOUCHED;\n      }\n    }\n\n    // Update the visual response weights based on the current component data\n    Object.values(this.visualResponses).forEach((visualResponse) => {\n      visualResponse.updateFromComponent(this.values);\n    });\n  }\n}\n\n/**\n  * @description Builds a motion controller with components and visual responses based on the\n  * supplied profile description. Data is polled from the xrInputSource's gamepad.\n  * @author Nell Waliczek / https://github.com/NellWaliczek\n*/\nclass MotionController {\n  /**\n   * @param {Object} xrInputSource - The XRInputSource to build the MotionController around\n   * @param {Object} profile - The best matched profile description for the supplied xrInputSource\n   * @param {Object} assetUrl\n   */\n  constructor(xrInputSource, profile, assetUrl) {\n    if (!xrInputSource) {\n      throw new Error('No xrInputSource supplied');\n    }\n\n    if (!profile) {\n      throw new Error('No profile supplied');\n    }\n\n    this.xrInputSource = xrInputSource;\n    this.assetUrl = assetUrl;\n    this.id = profile.profileId;\n\n    // Build child components as described in the profile description\n    this.layoutDescription = profile.layouts[xrInputSource.handedness];\n    this.components = {};\n    Object.keys(this.layoutDescription.components).forEach((componentId) => {\n      const componentDescription = this.layoutDescription.components[componentId];\n      this.components[componentId] = new Component(componentId, componentDescription);\n    });\n\n    // Initialize components based on current gamepad state\n    this.updateFromGamepad();\n  }\n\n  get gripSpace() {\n    return this.xrInputSource.gripSpace;\n  }\n\n  get targetRaySpace() {\n    return this.xrInputSource.targetRaySpace;\n  }\n\n  /**\n   * @description Returns a subset of component data for simplified debugging\n   */\n  get data() {\n    const data = [];\n    Object.values(this.components).forEach((component) => {\n      data.push(component.data);\n    });\n    return data;\n  }\n\n  /**\n   * @description Poll for updated data based on current gamepad state\n   */\n  updateFromGamepad() {\n    Object.values(this.components).forEach((component) => {\n      component.updateFromGamepad(this.xrInputSource.gamepad);\n    });\n  }\n}\n\nexport { Constants, MotionController, fetchProfile, fetchProfilesList };\n"
  },
  {
    "path": "libs/three.js/libs/stats.module.js",
    "content": "var Stats = function () {\n\n\tvar mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';\n\tcontainer.addEventListener( 'click', function ( event ) {\n\n\t\tevent.preventDefault();\n\t\tshowPanel( ++ mode % container.children.length );\n\n\t}, false );\n\n\t//\n\n\tfunction addPanel( panel ) {\n\n\t\tcontainer.appendChild( panel.dom );\n\t\treturn panel;\n\n\t}\n\n\tfunction showPanel( id ) {\n\n\t\tfor ( var i = 0; i < container.children.length; i ++ ) {\n\n\t\t\tcontainer.children[ i ].style.display = i === id ? 'block' : 'none';\n\n\t\t}\n\n\t\tmode = id;\n\n\t}\n\n\t//\n\n\tvar beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;\n\n\tvar fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );\n\tvar msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );\n\n\tif ( self.performance && self.performance.memory ) {\n\n\t\tvar memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );\n\n\t}\n\n\tshowPanel( 0 );\n\n\treturn {\n\n\t\tREVISION: 16,\n\n\t\tdom: container,\n\n\t\taddPanel: addPanel,\n\t\tshowPanel: showPanel,\n\n\t\tbegin: function () {\n\n\t\t\tbeginTime = ( performance || Date ).now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tframes ++;\n\n\t\t\tvar time = ( performance || Date ).now();\n\n\t\t\tmsPanel.update( time - beginTime, 200 );\n\n\t\t\tif ( time >= prevTime + 1000 ) {\n\n\t\t\t\tfpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 100 );\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t\tif ( memPanel ) {\n\n\t\t\t\t\tvar memory = performance.memory;\n\t\t\t\t\tmemPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tbeginTime = this.end();\n\n\t\t},\n\n\t\t// Backwards Compatibility\n\n\t\tdomElement: container,\n\t\tsetMode: showPanel\n\n\t};\n\n};\n\nStats.Panel = function ( name, fg, bg ) {\n\n\tvar min = Infinity, max = 0, round = Math.round;\n\tvar PR = round( window.devicePixelRatio || 1 );\n\n\tvar WIDTH = 80 * PR, HEIGHT = 48 * PR,\n\t\tTEXT_X = 3 * PR, TEXT_Y = 2 * PR,\n\t\tGRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,\n\t\tGRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;\n\n\tvar canvas = document.createElement( 'canvas' );\n\tcanvas.width = WIDTH;\n\tcanvas.height = HEIGHT;\n\tcanvas.style.cssText = 'width:80px;height:48px';\n\n\tvar context = canvas.getContext( '2d' );\n\tcontext.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';\n\tcontext.textBaseline = 'top';\n\n\tcontext.fillStyle = bg;\n\tcontext.fillRect( 0, 0, WIDTH, HEIGHT );\n\n\tcontext.fillStyle = fg;\n\tcontext.fillText( name, TEXT_X, TEXT_Y );\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\tcontext.fillStyle = bg;\n\tcontext.globalAlpha = 0.9;\n\tcontext.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );\n\n\treturn {\n\n\t\tdom: canvas,\n\n\t\tupdate: function ( value, maxValue ) {\n\n\t\t\tmin = Math.min( min, value );\n\t\t\tmax = Math.max( max, value );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 1;\n\t\t\tcontext.fillRect( 0, 0, WIDTH, GRAPH_Y );\n\t\t\tcontext.fillStyle = fg;\n\t\t\tcontext.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );\n\n\t\t\tcontext.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );\n\n\t\t\tcontext.fillStyle = bg;\n\t\t\tcontext.globalAlpha = 0.9;\n\t\t\tcontext.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );\n\n\t\t}\n\n\t};\n\n};\n\nexport default Stats;\n"
  },
  {
    "path": "libs/three.js/libs/zstddec.module.js",
    "content": "/**\n * @author Don McCurdy / https://www.donmccurdy.com\n */\n\nlet init, instance, heap;\n\nconst importObject = {\n\n\tenv: {\n\n\t\temscripten_notify_memory_growth: function ( index ) {\n\n\t\t\theap = new Uint8Array( instance.exports.memory.buffer );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * ZSTD (Zstandard) decoder.\n *\n * Compiled from https://github.com/facebook/zstd/tree/dev/contrib/single_file_libs, with the\n * following steps:\n *\n * ```\n * ./combine.sh -r ../../lib -o zstddeclib.c zstddeclib-in.c\n * emcc zstddeclib.c -Oz -s EXPORTED_FUNCTIONS=\"['_ZSTD_decompress', '_ZSTD_findDecompressedSize', '_ZSTD_isError', '_malloc', '_free']\" -s ALLOW_MEMORY_GROWTH=1 -s MALLOC=emmalloc -o zstddec.wasm\n * base64 zstddec.wasm > zstddec.txt\n * ```\n *\n * The base64 string written to `zstddec.txt` is embedded as the `wasm` variable at the bottom\n * of this file. The rest of this file is written by hand, in order to avoid an additional JS\n * wrapper generated by Emscripten.\n */\nexport class ZSTDDecoder {\n\n\tinit () {\n\n\t\tif ( ! init ) {\n\n\t\t\tinit = fetch( 'data:application/wasm;base64,' + wasm )\n\t\t\t\t.then( ( response ) => response.arrayBuffer() )\n\t\t\t\t.then( ( arrayBuffer ) => WebAssembly.instantiate( arrayBuffer, importObject ) )\n\t\t\t\t.then( ( result ) => {\n\n\t\t\t\t\tinstance = result.instance;\n\n\t\t\t\t\timportObject.env.emscripten_notify_memory_growth( 0 ); // initialize heap.\n\n\t\t\t\t});\n\n\t\t}\n\n\t\treturn init;\n\n\t}\n\n\tdecode ( array, uncompressedSize = 0 ) {\n\n\t\t// Write compressed data into WASM memory.\n\t\tconst compressedSize = array.byteLength;\n\t\tconst compressedPtr = instance.exports.malloc( compressedSize );\n\t\theap.set( array, compressedPtr );\n\n\t\t// Decompress into WASM memory.\n\t\tuncompressedSize = uncompressedSize || Number( instance.exports.ZSTD_findDecompressedSize( compressedPtr, compressedSize ) );\n\t\tconst uncompressedPtr = instance.exports.malloc( uncompressedSize );\n\t\tconst actualSize = instance.exports.ZSTD_decompress( uncompressedPtr, uncompressedSize, compressedPtr, compressedSize );\n\n\t\t// Read decompressed data and free WASM memory.\n\t\tconst dec = heap.slice( uncompressedPtr, uncompressedPtr + actualSize );\n\t\tinstance.exports.free( compressedPtr );\n\t\tinstance.exports.free( uncompressedPtr );\n\n\t\treturn dec;\n\n\t}\n\n}\n\n/**\n * BSD License\n *\n * For Zstandard software\n *\n * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n *  * Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n *\n *  * Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n *  * Neither the name Facebook nor the names of its contributors may be used to\n *    endorse or promote products derived from this software without specific\n *    prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nconst wasm = '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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdBKGogACgCBBATQQAhBCAHQeAAaiEMIAdB5ABqIQoDQCAHQShqEARBAksgBCAXTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEJIAcoAkggBygCREEDdGopAgAiH0IgiKchCCAeQiCIISAgHUIgiKchAgJAIB9CEIinQf8BcSIDQQJPBEACQCAGRSADQRlJckUEQCAIIAdBKGogA0EgIAcoAixrIg0gDSADSxsiDRAFIAMgDWsiA3RqIQggB0EoahAEGiADRQ0BIAdBKGogAxAFIAhqIQgMAQsgB0EoaiADEAUgCGohCCAHQShqEAQaCyAHKQJUISEgByAINgJUIAcgITcDWAwBCwJAIANFBEAgAgRAIAcoAlQhCAwDCyAHKAJYIQgMAQsCQAJAIAdBKGpBARAFIAggAkVqaiIDQQNGBEAgBygCVEF/aiIDIANFaiEIDAELIANBAnQgB2ooAlQiCCAIRWohCCADQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAg2AlQLICCnIQMgCQRAIAdBKGogCRAFIANqIQMLIAkgC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgAmohAgsgB0EoahAEGiAHIAcoAmggAmoiCSADajYCaCAKIAwgCCAJSxsoAgAhDSAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogB0EoaiAfQhiIp0H/AXEQCCEOIAdB8ABqIARBBHRqIgsgCSANaiAIazYCDCALIAg2AgggCyADNgIEIAsgAjYCACAHIA4gH6dB//8DcWo2AkQgBEEBaiEEDAELCyAEIBdIDQEgEkFgaiEYIAdB4ABqIRogB0HkAGohGyABIQMDQCAHQShqEARBAksgBCAFTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEIIAcoAkggBygCREEDdGopAgAiH0IgiKchCSAeQiCIISAgHUIgiKchDAJAIB9CEIinQf8BcSICQQJPBEACQCAGRSACQRlJckUEQCAJIAdBKGogAkEgIAcoAixrIgogCiACSxsiChAFIAIgCmsiAnRqIQkgB0EoahAEGiACRQ0BIAdBKGogAhAFIAlqIQkMAQsgB0EoaiACEAUgCWohCSAHQShqEAQaCyAHKQJUISEgByAJNgJUIAcgITcDWAwBCwJAIAJFBEAgDARAIAcoAlQhCQwDCyAHKAJYIQkMAQsCQAJAIAdBKGpBARAFIAkgDEVqaiICQQNGBEAgBygCVEF/aiICIAJFaiEJDAELIAJBAnQgB2ooAlQiCSAJRWohCSACQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAk2AlQLICCnIRQgCARAIAdBKGogCBAFIBRqIRQLIAggC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgDGohDAsgB0EoahAEGiAHIAcoAmggDGoiGSAUajYCaCAbIBogCSAZSxsoAgAhHCAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogByAHQShqIB9CGIinQf8BcRAIIB+nQf//A3FqNgJEIAcgB0HwAGogBEEDcUEEdGoiDSkDCCIdNwPIASAHIA0pAwAiHjcDwAECQAJAAkAgBygCvAEiDiAepyICaiIWIBNLDQAgAyAHKALEASIKIAJqIgtqIBhLDQAgEiADayALQSBqTw0BCyAHIAcpA8gBNwMQIAcgBykDwAE3AwggAyASIAdBCGogB0G8AWogEyAPIBUgERAeIQsMAQsgAiADaiEIIAMgDhAHIAJBEU8EQCADQRBqIQIDQCACIA5BEGoiDhAHIAJBEGoiAiAISQ0ACwsgCCAdpyIOayECIAcgFjYCvAEgDiAIIA9rSwRAIA4gCCAVa0sEQEFsIQsMAgsgESACIA9rIgJqIhYgCmogEU0EQCAIIBYgChAPGgwCCyAIIBZBACACaxAPIQggByACIApqIgo2AsQBIAggAmshCCAPIQILIA5BEE8EQCAIIApqIQoDQCAIIAIQByACQRBqIQIgCEEQaiIIIApJDQALDAELAkAgDkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgDkECdCIKQcAeaigCAGoiAhAXIAIgCkHgHmooAgBrIQIgBygCxAEhCgwBCyAIIAIQDAsgCkEJSQ0AIAggCmohCiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAKSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAKSQ0ACwsgCxADBEAgCyEQDAQFIA0gDDYCACANIBkgHGogCWs2AgwgDSAJNgIIIA0gFDYCBCAEQQFqIQQgAyALaiEDDAILAAsLIAQgBUgNASAEIBdrIQtBACEEA0AgCyAFSARAIAcgB0HwAGogC0EDcUEEdGoiAikDCCIdNwPIASAHIAIpAwAiHjcDwAECQAJAAkAgBygCvAEiDCAepyICaiIKIBNLDQAgAyAHKALEASIJIAJqIhBqIBhLDQAgEiADayAQQSBqTw0BCyAHIAcpA8gBNwMgIAcgBykDwAE3AxggAyASIAdBGGogB0G8AWogEyAPIBUgERAeIRAMAQsgAiADaiEIIAMgDBAHIAJBEU8EQCADQRBqIQIDQCACIAxBEGoiDBAHIAJBEGoiAiAISQ0ACwsgCCAdpyIGayECIAcgCjYCvAEgBiAIIA9rSwRAIAYgCCAVa0sEQEFsIRAMAgsgESACIA9rIgJqIgwgCWogEU0EQCAIIAwgCRAPGgwCCyAIIAxBACACaxAPIQggByACIAlqIgk2AsQBIAggAmshCCAPIQILIAZBEE8EQCAIIAlqIQYDQCAIIAIQByACQRBqIQIgCEEQaiIIIAZJDQALDAELAkAgBkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgBkECdCIGQcAeaigCAGoiAhAXIAIgBkHgHmooAgBrIQIgBygCxAEhCQwBCyAIIAIQDAsgCUEJSQ0AIAggCWohBiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAGSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAGSQ0ACwsgEBADDQMgC0EBaiELIAMgEGohAwwBCwsDQCAEQQNHBEAgACAEQQJ0IgJqQazQAWogAiAHaigCVDYCACAEQQFqIQQMAQsLIAcoArwBIQgLQbp/IRAgEyAIayIAIBIgA2tLDQAgAwR/IAMgCCAAEAsgAGoFQQALIAFrIRALIAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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';\n"
  },
  {
    "path": "libs/three.js/lines/Line2.js",
    "content": "import { LineSegments2 } from '../lines/LineSegments2.js';\nimport { LineGeometry } from '../lines/LineGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nvar Line2 = function ( geometry, material ) {\n\n\tif ( geometry === undefined ) geometry = new LineGeometry();\n\tif ( material === undefined ) material = new LineMaterial( { color: Math.random() * 0xffffff } );\n\n\tLineSegments2.call( this, geometry, material );\n\n\tthis.type = 'Line2';\n\n};\n\nLine2.prototype = Object.assign( Object.create( LineSegments2.prototype ), {\n\n\tconstructor: Line2,\n\n\tisLine2: true\n\n} );\n\nexport { Line2 };\n"
  },
  {
    "path": "libs/three.js/lines/LineGeometry.js",
    "content": "import { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\n\nvar LineGeometry = function () {\n\n\tLineSegmentsGeometry.call( this );\n\n\tthis.type = 'LineGeometry';\n\n};\n\nLineGeometry.prototype = Object.assign( Object.create( LineSegmentsGeometry.prototype ), {\n\n\tconstructor: LineGeometry,\n\n\tisLineGeometry: true,\n\n\tsetPositions: function ( array ) {\n\n\t\t// converts [ x1, y1, z1,  x2, y2, z2, ... ] to pairs format\n\n\t\tvar length = array.length - 3;\n\t\tvar points = new Float32Array( 2 * length );\n\n\t\tfor ( var i = 0; i < length; i += 3 ) {\n\n\t\t\tpoints[ 2 * i ] = array[ i ];\n\t\t\tpoints[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tpoints[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tpoints[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tpoints[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tpoints[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tLineSegmentsGeometry.prototype.setPositions.call( this, points );\n\n\t\treturn this;\n\n\t},\n\n\tsetColors: function ( array ) {\n\n\t\t// converts [ r1, g1, b1,  r2, g2, b2, ... ] to pairs format\n\n\t\tvar length = array.length - 3;\n\t\tvar colors = new Float32Array( 2 * length );\n\n\t\tfor ( var i = 0; i < length; i += 3 ) {\n\n\t\t\tcolors[ 2 * i ] = array[ i ];\n\t\t\tcolors[ 2 * i + 1 ] = array[ i + 1 ];\n\t\t\tcolors[ 2 * i + 2 ] = array[ i + 2 ];\n\n\t\t\tcolors[ 2 * i + 3 ] = array[ i + 3 ];\n\t\t\tcolors[ 2 * i + 4 ] = array[ i + 4 ];\n\t\t\tcolors[ 2 * i + 5 ] = array[ i + 5 ];\n\n\t\t}\n\n\t\tLineSegmentsGeometry.prototype.setColors.call( this, colors );\n\n\t\treturn this;\n\n\t},\n\n\tfromLine: function ( line ) {\n\n\t\tvar geometry = line.geometry;\n\n\t\tif ( geometry.isGeometry ) {\n\n\t\t\tthis.setPositions( geometry.vertices );\n\n\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t}\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( /* source */ ) {\n\n\t\t// todo\n\n\t\treturn this;\n\n\t}\n\n} );\n\nexport { LineGeometry };\n"
  },
  {
    "path": "libs/three.js/lines/LineMaterial.js",
    "content": "import {\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2\n} from '../build/three.module.js';\n\n/**\n * parameters = {\n *  color: <hex>,\n *  linewidth: <float>,\n *  dashed: <boolean>,\n *  dashScale: <float>,\n *  dashSize: <float>,\n *  dashOffset: <float>,\n *  gapSize: <float>,\n *  resolution: <Vector2>, // to be set by renderer\n * }\n */\n\nUniformsLib.line = {\n\n\tlinewidth: { value: 1 },\n\tresolution: { value: new Vector2( 1, 1 ) },\n\tdashScale: { value: 1 },\n\tdashSize: { value: 1 },\n\tdashOffset: { value: 0 },\n\tgapSize: { value: 1 }, // todo FIX - maybe change to totalSize\n\topacity: { value: 1 }\n\n};\n\nShaderLib[ 'line' ] = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.line\n\t] ),\n\n\tvertexShader:\n\t\t`\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\tvarying vec2 vUv;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\tvUv = uv;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec2 ndcStart = clipStart.xy / clipStart.w;\n\t\t\tvec2 ndcEnd = clipEnd.xy / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd - ndcStart;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t// perpendicular to dir\n\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\n\t\t\t// undo aspect ratio adjustment\n\t\t\tdir.x /= aspect;\n\t\t\toffset.x /= aspect;\n\n\t\t\t// sign flip\n\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t// endcaps\n\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\toffset += - dir;\n\n\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\toffset += dir;\n\n\t\t\t}\n\n\t\t\t// adjust for linewidth\n\t\t\toffset *= linewidth;\n\n\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\toffset /= resolution.y;\n\n\t\t\t// select end\n\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t// back to clip space\n\t\t\toffset *= clip.w;\n\n\t\t\tclip.xy += offset;\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t`,\n\n\tfragmentShader:\n\t\t`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashSize;\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\tfloat a = vUv.x;\n\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t}\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <encodings_fragment>\n\t\t\t#include <fog_fragment>\n\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t}\n\t\t`\n};\n\nvar LineMaterial = function ( parameters ) {\n\n\tShaderMaterial.call( this, {\n\n\t\ttype: 'LineMaterial',\n\n\t\tuniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ),\n\n\t\tvertexShader: ShaderLib[ 'line' ].vertexShader,\n\t\tfragmentShader: ShaderLib[ 'line' ].fragmentShader,\n\n\t\tclipping: true // required for clipping support\n\n\t} );\n\n\tthis.dashed = false;\n\n\tObject.defineProperties( this, {\n\n\t\tcolor: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.diffuse.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.diffuse.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tlinewidth: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.linewidth.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.linewidth.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tdashScale: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.dashScale.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.dashScale.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tdashSize: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.dashSize.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.dashSize.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tdashOffset: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.dashOffset.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.dashOffset.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tgapSize: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.gapSize.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.gapSize.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\topacity: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.opacity.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.opacity.value = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\tresolution: {\n\n\t\t\tenumerable: true,\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.uniforms.resolution.value;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.uniforms.resolution.value.copy( value );\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tthis.setValues( parameters );\n\n};\n\nLineMaterial.prototype = Object.create( ShaderMaterial.prototype );\nLineMaterial.prototype.constructor = LineMaterial;\n\nLineMaterial.prototype.isLineMaterial = true;\n\nexport { LineMaterial };\n"
  },
  {
    "path": "libs/three.js/lines/LineSegments2.js",
    "content": "import {\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tLine3,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tVector3,\n\tVector4\n} from '../build/three.module.js';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nvar LineSegments2 = function ( geometry, material ) {\n\n\tif ( geometry === undefined ) geometry = new LineSegmentsGeometry();\n\tif ( material === undefined ) material = new LineMaterial( { color: Math.random() * 0xffffff } );\n\n\tMesh.call( this, geometry, material );\n\n\tthis.type = 'LineSegments2';\n\n};\n\nLineSegments2.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: LineSegments2,\n\n\tisLineSegments2: true,\n\n\tcomputeLineDistances: ( function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry...\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tvar instanceStart = geometry.attributes.instanceStart;\n\t\t\tvar instanceEnd = geometry.attributes.instanceEnd;\n\t\t\tvar lineDistances = new Float32Array( 2 * instanceStart.data.count );\n\n\t\t\tfor ( var i = 0, j = 0, l = instanceStart.data.count; i < l; i ++, j += 2 ) {\n\n\t\t\t\tstart.fromBufferAttribute( instanceStart, i );\n\t\t\t\tend.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + start.distanceTo( end );\n\n\t\t\t}\n\n\t\t\tvar instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() ),\n\n\traycast: ( function () {\n\n\t\tvar start = new Vector4();\n\t\tvar end = new Vector4();\n\n\t\tvar ssOrigin = new Vector4();\n\t\tvar ssOrigin3 = new Vector3();\n\t\tvar mvMatrix = new Matrix4();\n\t\tvar line = new Line3();\n\t\tvar closestPoint = new Vector3();\n\n\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\tif ( raycaster.camera === null ) {\n\n\t\t\t\tconsole.error( 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2.' );\n\n\t\t\t}\n\n\t\t\tvar threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;\n\n\t\t\tvar ray = raycaster.ray;\n\t\t\tvar camera = raycaster.camera;\n\t\t\tvar projectionMatrix = camera.projectionMatrix;\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar material = this.material;\n\t\t\tvar resolution = material.resolution;\n\t\t\tvar lineWidth = material.linewidth + threshold;\n\n\t\t\tvar instanceStart = geometry.attributes.instanceStart;\n\t\t\tvar instanceEnd = geometry.attributes.instanceEnd;\n\n\t\t\t// pick a point 1 unit out along the ray to avoid the ray origin\n\t\t\t// sitting at the camera origin which will cause \"w\" to be 0 when\n\t\t\t// applying the projection matrix.\n\t\t\tray.at( 1, ssOrigin );\n\n\t\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t\tssOrigin.w = 1;\n\t\t\tssOrigin.applyMatrix4( camera.matrixWorldInverse );\n\t\t\tssOrigin.applyMatrix4( projectionMatrix );\n\t\t\tssOrigin.multiplyScalar( 1 / ssOrigin.w );\n\n\t\t\t// screen space\n\t\t\tssOrigin.x *= resolution.x / 2;\n\t\t\tssOrigin.y *= resolution.y / 2;\n\t\t\tssOrigin.z = 0;\n\n\t\t\tssOrigin3.copy( ssOrigin );\n\n\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\tmvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );\n\n\t\t\tfor ( var i = 0, l = instanceStart.count; i < l; i ++ ) {\n\n\t\t\t\tstart.fromBufferAttribute( instanceStart, i );\n\t\t\t\tend.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\tstart.w = 1;\n\t\t\t\tend.w = 1;\n\n\t\t\t\t// camera space\n\t\t\t\tstart.applyMatrix4( mvMatrix );\n\t\t\t\tend.applyMatrix4( mvMatrix );\n\n\t\t\t\t// clip space\n\t\t\t\tstart.applyMatrix4( projectionMatrix );\n\t\t\t\tend.applyMatrix4( projectionMatrix );\n\n\t\t\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t\t\tstart.multiplyScalar( 1 / start.w );\n\t\t\t\tend.multiplyScalar( 1 / end.w );\n\n\t\t\t\t// skip the segment if it's outside the camera near and far planes\n\t\t\t\tvar isBehindCameraNear = start.z < - 1 && end.z < - 1;\n\t\t\t\tvar isPastCameraFar = start.z > 1 && end.z > 1;\n\t\t\t\tif ( isBehindCameraNear || isPastCameraFar ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// screen space\n\t\t\t\tstart.x *= resolution.x / 2;\n\t\t\t\tstart.y *= resolution.y / 2;\n\n\t\t\t\tend.x *= resolution.x / 2;\n\t\t\t\tend.y *= resolution.y / 2;\n\n\t\t\t\t// create 2d segment\n\t\t\t\tline.start.copy( start );\n\t\t\t\tline.start.z = 0;\n\n\t\t\t\tline.end.copy( end );\n\t\t\t\tline.end.z = 0;\n\n\t\t\t\t// get closest point on ray to segment\n\t\t\t\tvar param = line.closestPointToPointParameter( ssOrigin3, true );\n\t\t\t\tline.at( param, closestPoint );\n\n\t\t\t\t// check if the intersection point is within clip space\n\t\t\t\tvar zPos = MathUtils.lerp( start.z, end.z, param );\n\t\t\t\tvar isInClipSpace = zPos >= - 1 && zPos <= 1;\n\n\t\t\t\tvar isInside = ssOrigin3.distanceTo( closestPoint ) < lineWidth * 0.5;\n\n\t\t\t\tif ( isInClipSpace && isInside ) {\n\n\t\t\t\t\tline.start.fromBufferAttribute( instanceStart, i );\n\t\t\t\t\tline.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\t\tline.start.applyMatrix4( matrixWorld );\n\t\t\t\t\tline.end.applyMatrix4( matrixWorld );\n\n\t\t\t\t\tvar pointOnLine = new Vector3();\n\t\t\t\t\tvar point = new Vector3();\n\n\t\t\t\t\tray.distanceSqToSegment( line.start, line.end, point, pointOnLine );\n\n\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\tpoint: point,\n\t\t\t\t\t\tpointOnLine: pointOnLine,\n\t\t\t\t\t\tdistance: ray.origin.distanceTo( point ),\n\n\t\t\t\t\t\tobject: this,\n\t\t\t\t\t\tface: null,\n\t\t\t\t\t\tfaceIndex: i,\n\t\t\t\t\t\tuv: null,\n\t\t\t\t\t\tuv2: null,\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() )\n\n} );\n\nexport { LineSegments2 };\n"
  },
  {
    "path": "libs/three.js/lines/LineSegmentsGeometry.js",
    "content": "import {\n\tBox3,\n\tFloat32BufferAttribute,\n\tInstancedBufferGeometry,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tSphere,\n\tVector3,\n\tWireframeGeometry\n} from '../build/three.module.js';\n\nvar LineSegmentsGeometry = function () {\n\n\tInstancedBufferGeometry.call( this );\n\n\tthis.type = 'LineSegmentsGeometry';\n\n\tvar positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\tvar uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\tvar index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\tthis.setIndex( index );\n\tthis.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n};\n\nLineSegmentsGeometry.prototype = Object.assign( Object.create( InstancedBufferGeometry.prototype ), {\n\n\tconstructor: LineSegmentsGeometry,\n\n\tisLineSegmentsGeometry: true,\n\n\tapplyMatrix4: function ( matrix ) {\n\n\t\tvar start = this.attributes.instanceStart;\n\t\tvar end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined ) {\n\n\t\t\tstart.applyMatrix4( matrix );\n\n\t\t\tend.applyMatrix4( matrix );\n\n\t\t\tstart.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetPositions: function ( array ) {\n\n\t\tvar lineSegments;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tlineSegments = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tlineSegments = new Float32Array( array );\n\n\t\t}\n\n\t\tvar instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\tthis.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\tthis.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\t//\n\n\t\tthis.computeBoundingBox();\n\t\tthis.computeBoundingSphere();\n\n\t\treturn this;\n\n\t},\n\n\tsetColors: function ( array ) {\n\n\t\tvar colors;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tcolors = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tcolors = new Float32Array( array );\n\n\t\t}\n\n\t\tvar instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\tthis.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\tthis.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\treturn this;\n\n\t},\n\n\tfromWireframeGeometry: function ( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t},\n\n\tfromEdgesGeometry: function ( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t},\n\n\tfromMesh: function ( mesh ) {\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t},\n\n\tfromLineSegments: function ( lineSegments ) {\n\n\t\tvar geometry = lineSegments.geometry;\n\n\t\tif ( geometry.isGeometry ) {\n\n\t\t\tthis.setPositions( geometry.vertices );\n\n\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t}\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t},\n\n\tcomputeBoundingBox: function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function computeBoundingBox() {\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.boundingBox = new Box3();\n\n\t\t\t}\n\n\t\t\tvar start = this.attributes.instanceStart;\n\t\t\tvar end = this.attributes.instanceEnd;\n\n\t\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t\tbox.setFromBufferAttribute( end );\n\n\t\t\t\tthis.boundingBox.union( box );\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\tcomputeBoundingSphere: function () {\n\n\t\tvar vector = new Vector3();\n\n\t\treturn function computeBoundingSphere() {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tvar start = this.attributes.instanceStart;\n\t\t\tvar end = this.attributes.instanceEnd;\n\n\t\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.fromBufferAttribute( start, i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t\tvector.fromBufferAttribute( end, i );\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}(),\n\n\ttoJSON: function () {\n\n\t\t// todo\n\n\t},\n\n\tapplyMatrix: function ( matrix ) {\n\n\t\tconsole.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' );\n\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n} );\n\nexport { LineSegmentsGeometry };\n"
  },
  {
    "path": "libs/three.js/lines/Wireframe.js",
    "content": "import {\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tMesh,\n\tVector3\n} from '../build/three.module.js';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nvar Wireframe = function ( geometry, material ) {\n\n\tMesh.call( this );\n\n\tthis.type = 'Wireframe';\n\n\tthis.geometry = geometry !== undefined ? geometry : new LineSegmentsGeometry();\n\tthis.material = material !== undefined ? material : new LineMaterial( { color: Math.random() * 0xffffff } );\n\n};\n\nWireframe.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\tconstructor: Wireframe,\n\n\tisWireframe: true,\n\n\tcomputeLineDistances: ( function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry...\n\n\t\tvar start = new Vector3();\n\t\tvar end = new Vector3();\n\n\t\treturn function computeLineDistances() {\n\n\t\t\tvar geometry = this.geometry;\n\n\t\t\tvar instanceStart = geometry.attributes.instanceStart;\n\t\t\tvar instanceEnd = geometry.attributes.instanceEnd;\n\t\t\tvar lineDistances = new Float32Array( 2 * instanceStart.data.count );\n\n\t\t\tfor ( var i = 0, j = 0, l = instanceStart.data.count; i < l; i ++, j += 2 ) {\n\n\t\t\t\tstart.fromBufferAttribute( instanceStart, i );\n\t\t\t\tend.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + start.distanceTo( end );\n\n\t\t\t}\n\n\t\t\tvar instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\t\treturn this;\n\n\t\t};\n\n\t}() )\n\n} );\n\nexport { Wireframe };\n"
  },
  {
    "path": "libs/three.js/lines/WireframeGeometry2.js",
    "content": "import {\n\tWireframeGeometry\n} from '../build/three.module.js';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\n\nvar WireframeGeometry2 = function ( geometry ) {\n\n\tLineSegmentsGeometry.call( this );\n\n\tthis.type = 'WireframeGeometry2';\n\n\tthis.fromWireframeGeometry( new WireframeGeometry( geometry ) );\n\n\t// set colors, maybe\n\n};\n\nWireframeGeometry2.prototype = Object.assign( Object.create( LineSegmentsGeometry.prototype ), {\n\n\tconstructor: WireframeGeometry2,\n\n\tisWireframeGeometry2: true\n\n} );\n\nexport { WireframeGeometry2 };\n"
  },
  {
    "path": "libs/three.js/loaders/3DMLoader.js",
    "content": "import {\n\tBufferGeometryLoader,\n\tFileLoader,\n\tLoader,\n\tObject3D,\n\tMeshStandardMaterial,\n\tMesh,\n\tColor,\n\tPoints,\n\tPointsMaterial,\n\tLine,\n\tLineBasicMaterial,\n\tMatrix4,\n\tDirectionalLight,\n\tPointLight,\n\tSpotLight,\n\tRectAreaLight,\n\tVector3,\n\tSprite,\n\tSpriteMaterial,\n\tCanvasTexture,\n\tLinearFilter,\n\tClampToEdgeWrapping,\n\tTextureLoader\n} from '../../../build/three.module.js';\n\nvar Rhino3dmLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.libraryPath = '';\n\tthis.libraryPending = null;\n\tthis.libraryBinary = null;\n\tthis.libraryConfig = {};\n\n\tthis.workerLimit = 4;\n\tthis.workerPool = [];\n\tthis.workerNextTaskID = 1;\n\tthis.workerSourceURL = '';\n\tthis.workerConfig = {};\n\n\tthis.materials = [];\n\n};\n\nRhino3dmLoader.taskCache = new WeakMap();\n\nRhino3dmLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: Rhino3dmLoader,\n\n\tsetLibraryPath: function ( path ) {\n\n\t\tthis.libraryPath = path;\n\n\t\treturn this;\n\n\t},\n\n\tsetWorkerLimit: function ( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t\t// again from this thread.\n\t\t\tif ( Rhino3dmLoader.taskCache.has( buffer ) ) {\n\n\t\t\t\tvar cachedTask = Rhino3dmLoader.taskCache.get( buffer );\n\n\t\t\t\treturn cachedTask.promise.then( onLoad ).catch( onError );\n\n\t\t\t}\n\n\t\t\tthis.decodeObjects( buffer, url )\n\t\t\t\t.then( onLoad )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\n\t},\n\n\tdebug: function () {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t},\n\n\tdecodeObjects: function ( buffer, url ) {\n\n\t\tvar worker;\n\t\tvar taskID;\n\n\t\tvar taskCost = buffer.byteLength;\n\n\t\tvar objectPending = this._getWorker( taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\t\t\t\ttaskID = this.workerNextTaskID ++; //hmmm\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, buffer }, [ buffer ] );\n\n\t\t\t\t\t//this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.data ) );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tobjectPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t//this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\tRhino3dmLoader.taskCache.set( buffer, {\n\n\t\t\turl: url,\n\t\t\tpromise: objectPending\n\n\t\t} );\n\n\t\treturn objectPending;\n\n\t},\n\n\tparse: function ( data, onLoad, onError ) {\n\n\t\tthis.decodeObjects( data, '' )\n\t\t\t.then( onLoad )\n\t\t\t.catch( onError );\n\n\t},\n\n\t_compareMaterials: function ( material ) {\n\n\t\tvar mat = {};\n\t\tmat.name = material.name;\n\t\tmat.color = {};\n\t\tmat.color.r = material.color.r;\n\t\tmat.color.g = material.color.g;\n\t\tmat.color.b = material.color.b;\n\t\tmat.type = material.type;\n\n\t\tfor ( var i = 0; i < this.materials.length; i ++ ) {\n\n\t\t\tvar m = this.materials[ i ];\n\t\t\tvar _mat = {};\n\t\t\t_mat.name = m.name;\n\t\t\t_mat.color = {};\n\t\t\t_mat.color.r = m.color.r;\n\t\t\t_mat.color.g = m.color.g;\n\t\t\t_mat.color.b = m.color.b;\n\t\t\t_mat.type = m.type;\n\n\t\t\tif ( JSON.stringify( mat ) === JSON.stringify( _mat ) ) {\n\n\t\t\t\treturn m;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials.push( material );\n\n\t\treturn material;\n\n\t},\n\n\t_createMaterial: function ( material ) {\n\n\t\tif ( material === undefined ) {\n\n\t\t\treturn new MeshStandardMaterial( {\n\t\t\t\tcolor: new Color( 1, 1, 1 ),\n\t\t\t\tmetalness: 0.8,\n\t\t\t\tname: 'default',\n\t\t\t\tside: 2\n\t\t\t} );\n\n\t\t}\n\n\t\tvar _diffuseColor = material.diffuseColor;\n\n\t\tvar diffusecolor = new Color( _diffuseColor.r / 255.0, _diffuseColor.g / 255.0, _diffuseColor.b / 255.0 );\n\n\t\tif ( _diffuseColor.r === 0 && _diffuseColor.g === 0 && _diffuseColor.b === 0 ) {\n\n\t\t\tdiffusecolor.r = 1;\n\t\t\tdiffusecolor.g = 1;\n\t\t\tdiffusecolor.b = 1;\n\n\t\t}\n\n\t\t// console.log( material );\n\n\t\tvar mat = new MeshStandardMaterial( {\n\t\t\tcolor: diffusecolor,\n\t\t\tname: material.name,\n\t\t\tside: 2,\n\t\t\ttransparent: material.transparency > 0 ? true : false,\n\t\t\topacity: 1.0 - material.transparency\n\t\t} );\n\n\t\tvar textureLoader = new TextureLoader();\n\n\t\tfor ( var i = 0; i < material.textures.length; i ++ ) {\n\n\t\t\tvar texture = material.textures[ i ];\n\n\t\t\tif ( texture.image !== null ) {\n\n\t\t\t\tvar map = textureLoader.load( texture.image );\n\n\t\t\t\tswitch ( texture.type ) {\n\n\t\t\t\t\tcase 'Diffuse':\n\n\t\t\t\t\t\tmat.map = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Bump':\n\n\t\t\t\t\t\tmat.bumpMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Transparency':\n\n\t\t\t\t\t\tmat.alphaMap = map;\n\t\t\t\t\t\tmat.transparent = true;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Emap':\n\n\t\t\t\t\t\tmat.envMap = map;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn mat;\n\n\t},\n\n\t_createGeometry: function ( data ) {\n\n\t\t// console.log(data);\n\n\t\tvar object = new Object3D();\n\t\tvar instanceDefinitionObjects = [];\n\t\tvar instanceDefinitions = [];\n\t\tvar instanceReferences = [];\n\n\t\tobject.userData[ 'layers' ] = data.layers;\n\t\tobject.userData[ 'groups' ] = data.groups;\n\t\tobject.userData[ 'settings' ] = data.settings;\n\n\t\tvar objects = data.objects;\n\t\tvar materials = data.materials;\n\n\t\tfor ( var i = 0; i < objects.length; i ++ ) {\n\n\t\t\tvar obj = objects[ i ];\n\t\t\tvar attributes = obj.attributes;\n\n\t\t\tswitch ( obj.objectType ) {\n\n\t\t\t\tcase 'InstanceDefinition':\n\n\t\t\t\t\tinstanceDefinitions.push( obj );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'InstanceReference':\n\n\t\t\t\t\tinstanceReferences.push( obj );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( attributes.hasOwnProperty( 'materialUUID' ) ) {\n\n\t\t\t\t\t\tvar rMaterial = materials.find( m => m.id === attributes.materialUUID );\n\t\t\t\t\t\tvar material = this._createMaterial( rMaterial );\n\t\t\t\t\t\tmaterial = this._compareMaterials( material );\n\t\t\t\t\t\tvar _object = this._createObject( obj, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar material = this._createMaterial( );\n\t\t\t\t\t\tvar _object = this._createObject( obj, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( _object === undefined ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar layer = data.layers[ attributes.layerIndex ];\n\n\t\t\t\t\t_object.visible = layer ? data.layers[ attributes.layerIndex ].visible : true;\n\n\t\t\t\t\tif ( attributes.isInstanceDefinitionObject ) {\n\n\t\t\t\t\t\tinstanceDefinitionObjects.push( _object );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.add( _object );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( var i = 0; i < instanceDefinitions.length; i ++ ) {\n\n\t\t\tvar iDef = instanceDefinitions[ i ];\n\n\t\t\tvar objects = [];\n\n\t\t\tfor ( var j = 0; j < iDef.attributes.objectIds.length; j ++ ) {\n\n\t\t\t\tvar objId = iDef.attributes.objectIds[ j ];\n\n\t\t\t\tfor ( var p = 0; p < instanceDefinitionObjects.length; p ++ ) {\n\n\t\t\t\t\tvar idoId = instanceDefinitionObjects[ p ].userData.attributes.id;\n\n\t\t\t\t\tif ( objId === idoId ) {\n\n\t\t\t\t\t\tobjects.push( instanceDefinitionObjects[ p ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Currently clones geometry and does not take advantage of instancing\n\n\t\t\tfor ( var j = 0; j < instanceReferences.length; j ++ ) {\n\n\t\t\t\tvar iRef = instanceReferences[ j ];\n\n\t\t\t\tif ( iRef.geometry.parentIdefId === iDef.attributes.id ) {\n\n\t\t\t\t\tvar iRefObject = new Object3D();\n\t\t\t\t\tvar xf = iRef.geometry.xform.array;\n\n\t\t\t\t\tvar matrix = new Matrix4();\n          \t\t\tmatrix.set( xf[ 0 ], xf[ 1 ], xf[ 2 ], xf[ 3 ], xf[ 4 ], xf[ 5 ], xf[ 6 ], xf[ 7 ], xf[ 8 ], xf[ 9 ], xf[ 10 ], xf[ 11 ], xf[ 12 ], xf[ 13 ], xf[ 14 ], xf[ 15 ] );\n\n\t\t\t\t\tiRefObject.applyMatrix4( matrix );\n\n\t\t\t\t\tfor ( var p = 0; p < objects.length; p ++ ) {\n\n\t\t\t\t\t\tiRefObject.add( objects[ p ].clone( true ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.add( iRefObject );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials = [];\n\n\t\treturn object;\n\n\t},\n\n\t_createObject: function ( obj, mat ) {\n\n\t\tvar loader = new BufferGeometryLoader();\n\n\t\tvar attributes = obj.attributes;\n\n\t\tswitch ( obj.objectType ) {\n\n\t\t\tcase 'Point':\n\t\t\tcase 'PointSet':\n\n\t\t\t\tvar geometry = loader.parse( obj.geometry );\n\t\t\t\tvar _color = attributes.drawColor;\n\t\t\t\tvar color = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\t\t\t\tvar material = new PointsMaterial( { color: color, sizeAttenuation: false, size: 2 } );\n\n\t\t\t\tif ( geometry.attributes.hasOwnProperty( 'color' ) ) {\n\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tmaterial = this._compareMaterials( material );\n\n\t\t\t\tvar points = new Points( geometry, material );\n\t\t\t\tpoints.userData[ 'attributes' ] = attributes;\n\t\t\t\tpoints.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tpoints.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn points;\n\n\t\t\tcase 'Mesh':\n\t\t\tcase 'Extrusion':\n\t\t\tcase 'SubD':\n\n\t\t\t\tvar geometry = loader.parse( obj.geometry );\n\n\t\t\t\tif ( geometry.attributes.hasOwnProperty( 'color' ) ) {\n\n\t\t\t\t\tmat.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tif ( mat === null ) {\n\n\t\t\t\t\tmat = this._createMaterial();\n\t\t\t\t\tmat = this._compareMaterials( mat );\n\n\t\t\t\t}\n\n\t\t\t\tvar mesh = new Mesh( geometry, mat );\n\t\t\t\tmesh.castShadow = attributes.castsShadows;\n\t\t\t\tmesh.receiveShadow = attributes.receivesShadows;\n\t\t\t\tmesh.userData[ 'attributes' ] = attributes;\n\t\t\t\tmesh.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tmesh.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn mesh;\n\n\t\t\tcase 'Brep':\n\n\t\t\t\tvar brepObject = new Object3D();\n\n\t\t\t\tfor ( var j = 0; j < obj.geometry.length; j ++ ) {\n\n\t\t\t\t\tgeometry = loader.parse( obj.geometry[ j ] );\n\t\t\t\t\tvar mesh = new Mesh( geometry, mat );\n\t\t\t\t\tmesh.castShadow = attributes.castsShadows;\n\t\t\t\t\tmesh.receiveShadow = attributes.receivesShadows;\n\n\t\t\t\t\tbrepObject.add( mesh );\n\n\t\t\t\t}\n\n\t\t\t\tbrepObject.userData[ 'attributes' ] = attributes;\n\t\t\t\tbrepObject.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tbrepObject.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn brepObject;\n\n\t\t\tcase 'Curve':\n\n\t\t\t\tgeometry = loader.parse( obj.geometry );\n\n\t\t\t\tvar _color = attributes.drawColor;\n\t\t\t\tvar color = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\n\t\t\t\tvar material = new LineBasicMaterial( { color: color } );\n\t\t\t\tmaterial = this._compareMaterials( material );\n\n\t\t\t\tvar lines = new Line( geometry, material );\n\t\t\t\tlines.userData[ 'attributes' ] = attributes;\n\t\t\t\tlines.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tlines.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn lines;\n\n\t\t\tcase 'TextDot':\n\n\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\tvar ctx = document.createElement( 'canvas' ).getContext( '2d' );\n\t\t\t\tvar font = `${geometry.fontHeight}px ${geometry.fontFace}`;\n\t\t\t\tctx.font = font;\n\t\t\t\tvar width = ctx.measureText( geometry.text ).width + 10;\n\t\t\t\tvar height = geometry.fontHeight + 10;\n\n\t\t\t\tvar r = window.devicePixelRatio;\n\n\t\t\t\tctx.canvas.width = width * r;\n\t\t\t\tctx.canvas.height = height * r;\n\t\t\t\tctx.canvas.style.width = width + 'px';\n\t\t\t\tctx.canvas.style.height = height + 'px';\n\t\t\t\tctx.setTransform( r, 0, 0, r, 0, 0 );\n\n\t\t\t\tctx.font = font;\n\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\tctx.textAlign = 'center';\n\t\t\t\tvar color = attributes.drawColor;\n\t\t\t\tctx.fillStyle = `rgba(${color.r},${color.g},${color.b},${color.a})`;\n\t\t\t\tctx.fillRect( 0, 0, width, height );\n\t\t\t\tctx.fillStyle = 'white';\n\t\t\t\tctx.fillText( geometry.text, width / 2, height / 2 );\n\n\t\t\t\tvar texture = new CanvasTexture( ctx.canvas );\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\t\t\ttexture.wrapT = ClampToEdgeWrapping;\n\n\t\t\t\tvar material = new SpriteMaterial( { map: texture, depthTest: false } );\n\t\t\t\tvar sprite = new Sprite( material );\n\t\t\t\tsprite.position.set( geometry.point[ 0 ], geometry.point[ 1 ], geometry.point[ 2 ] );\n\t\t\t\tsprite.scale.set( width / 10, height / 10, 1.0 );\n\n\t\t\t\tsprite.userData[ 'attributes' ] = attributes;\n\t\t\t\tsprite.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\tif ( attributes.name ) {\n\n\t\t\t\t\tsprite.name = attributes.name;\n\n\t\t\t\t}\n\n\t\t\t\treturn sprite;\n\n\t\t\tcase 'Light':\n\n\t\t\t\tgeometry = obj.geometry;\n\n\t\t\t\tvar light;\n\n\t\t\t\tif ( geometry.isDirectionalLight ) {\n\n\t\t\t\t\tlight = new DirectionalLight();\n\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\tlight.target.position.set( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] );\n\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t} else if ( geometry.isPointLight ) {\n\n\t\t\t\t\tlight = new PointLight();\n\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t} else if ( geometry.isRectangularLight ) {\n\n\t\t\t\t\tlight = new RectAreaLight();\n\n\t\t\t\t\tvar width = Math.abs( geometry.width[ 2 ] );\n\t\t\t\t\tvar height = Math.abs( geometry.length[ 0 ] );\n\n\t\t\t\t\tlight.position.set( geometry.location[ 0 ] - ( height / 2 ), geometry.location[ 1 ], geometry.location[ 2 ] - ( width / 2 ) );\n\n\t\t\t\t\tlight.height = height;\n\t\t\t\t\tlight.width = width;\n\n\t\t\t\t\tlight.lookAt( new Vector3( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] ) );\n\n\t\t\t\t} else if ( geometry.isSpotLight ) {\n\n\t\t\t\t\tlight = new SpotLight();\n\t\t\t\t\tlight.castShadow = attributes.castsShadows;\n\t\t\t\t\tlight.position.set( geometry.location[ 0 ], geometry.location[ 1 ], geometry.location[ 2 ] );\n\t\t\t\t\tlight.target.position.set( geometry.direction[ 0 ], geometry.direction[ 1 ], geometry.direction[ 2 ] );\n\t\t\t\t\tlight.angle = geometry.spotAngleRadians;\n\t\t\t\t\tlight.shadow.normalBias = 0.1;\n\n\t\t\t\t} else if ( geometry.isLinearLight ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.3DMLoader:  No conversion exists for linear lights.' );\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( light ) {\n\n\t\t\t\t\tlight.intensity = geometry.intensity;\n\t\t\t\t\tvar _color = geometry.diffuse;\n\t\t\t\t\tvar color = new Color( _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 );\n\t\t\t\t\tlight.color = color;\n\t\t\t\t\tlight.userData[ 'attributes' ] = attributes;\n\t\t\t\t\tlight.userData[ 'objectType' ] = obj.objectType;\n\n\t\t\t\t}\n\n\t\t\t\treturn light;\n\n\t\t}\n\n\t},\n\n\t_initLibrary: function () {\n\n\t\tif ( ! this.libraryPending ) {\n\n\t\t\t// Load rhino3dm wrapper.\n\t\t\tvar jsLoader = new FileLoader( this.manager );\n\t\t\tjsLoader.setPath( this.libraryPath );\n\t\t\tvar jsContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tjsLoader.load( 'rhino3dm.js', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\t// Load rhino3dm WASM binary.\n\t\t\tvar binaryLoader = new FileLoader( this.manager );\n\t\t\tbinaryLoader.setPath( this.libraryPath );\n\t\t\tbinaryLoader.setResponseType( 'arraybuffer' );\n\t\t\tvar binaryContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tbinaryLoader.load( 'rhino3dm.wasm', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\tthis.libraryPending = Promise.all( [ jsContent, binaryContent ] )\n\t\t\t\t.then( ( [ jsContent, binaryContent ] ) => {\n\n\t\t\t\t\t//this.libraryBinary = binaryContent;\n\t\t\t\t\tthis.libraryConfig.wasmBinary = binaryContent;\n\n\t\t\t\t\tvar fn = Rhino3dmLoader.Rhino3dmWorker.toString();\n\n\t\t\t\t\tvar body = [\n\t\t\t\t\t\t'/* rhino3dm.js */',\n\t\t\t\t\t\tjsContent,\n\t\t\t\t\t\t'/* worker */',\n\t\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t\t].join( '\\n' );\n\n\t\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\treturn this.libraryPending;\n\n\t},\n\n\t_getWorker: function ( taskCost ) {\n\n\t\treturn this._initLibrary().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tvar worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( {\n\t\t\t\t\ttype: 'init',\n\t\t\t\t\tlibraryConfig: this.libraryConfig\n\t\t\t\t} );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tvar message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.Rhino3dmLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tvar worker = this.workerPool[ this.workerPool.length - 1 ];\n\n\t\t\tworker._taskLoad += taskCost;\n\n\t\t\treturn worker;\n\n\t\t} );\n\n\t},\n\n\t_releaseTask: function ( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t},\n\n\tdispose: function () {\n\n\t\tfor ( var i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/* WEB WORKER */\n\nRhino3dmLoader.Rhino3dmWorker = function () {\n\n\tvar libraryPending;\n\tvar libraryConfig;\n\tvar rhino;\n\n\tonmessage = function ( e ) {\n\n\t\tvar message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\n\t\t\t\tlibraryConfig = message.libraryConfig;\n\t\t\t\tvar wasmBinary = libraryConfig.wasmBinary;\n\t\t\t\tvar RhinoModule;\n\t\t\t\tlibraryPending = new Promise( function ( resolve ) {\n\n\t\t\t\t\t/* Like Basis Loader */\n\t\t\t\t\tRhinoModule = { wasmBinary, onRuntimeInitialized: resolve };\n\n\t\t\t\t\trhino3dm( RhinoModule ); // eslint-disable-line no-undef\n\n\t\t\t\t } ).then( () => {\n\n\t\t\t\t\trhino = RhinoModule;\n\n\t\t\t\t } );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\n\t\t\t\tvar buffer = message.buffer;\n\t\t\t\tlibraryPending.then( () => {\n\n\t\t\t\t\tvar data = decodeObjects( rhino, buffer );\n\n\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, data } );\n\n\t\t\t\t} );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeObjects( rhino, buffer ) {\n\n\t\tvar arr = new Uint8Array( buffer );\n\t\tvar doc = rhino.File3dm.fromByteArray( arr );\n\n\t\tvar objects = [];\n\t\tvar materials = [];\n\t\tvar layers = [];\n\t\tvar views = [];\n\t\tvar namedViews = [];\n\t\tvar groups = [];\n\n\t\t//Handle objects\n\n\t\tvar objs = doc.objects();\n\t\tvar cnt = objs.count;\n\n\t\tfor ( var i = 0; i < cnt; i ++ ) {\n\n\t\t\tvar _object = objs.get( i );\n\n\t\t\tvar object = extractObjectData( _object, doc );\n\n\t\t\t_object.delete();\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\tif ( object.attributes.materialIndex >= 0 ) {\n\n\t\t\t\t\tvar mId = doc.materials().findIndex( object.attributes.materialIndex ).id;\n\t\t\t\t\tobject.attributes.materialUUID = mId;\n\n\t\t\t\t}\n\n\t\t\t\tobjects.push( object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Handle instance definitions\n\t\t// console.log( `Instance Definitions Count: ${doc.instanceDefinitions().count()}` );\n\n\t\tfor ( var i = 0; i < doc.instanceDefinitions().count(); i ++ ) {\n\n\t\t\tvar idef = doc.instanceDefinitions().get( i );\n\t\t\tvar idefAttributes = extractProperties( idef );\n\t\t\tidefAttributes.objectIds = idef.getObjectIds();\n\n\t\t\tobjects.push( { geometry: null, attributes: idefAttributes, objectType: 'InstanceDefinition' } );\n\n\t\t}\n\n\t\t// Handle materials\n\n\t\tvar textureTypes = [\n\t\t\t// rhino.TextureType.Bitmap,\n\t\t\trhino.TextureType.Diffuse,\n\t\t\trhino.TextureType.Bump,\n\t\t\trhino.TextureType.Transparency,\n\t\t\trhino.TextureType.Opacity,\n\t\t\trhino.TextureType.Emap\n\t\t];\n\n\t\tvar pbrTextureTypes = [\n\t\t\trhino.TextureType.PBR_BaseColor,\n\t\t\trhino.TextureType.PBR_Subsurface,\n\t\t\trhino.TextureType.PBR_SubsurfaceScattering,\n\t\t\trhino.TextureType.PBR_SubsurfaceScatteringRadius,\n\t\t\trhino.TextureType.PBR_Metallic,\n\t\t\trhino.TextureType.PBR_Specular,\n\t\t\trhino.TextureType.PBR_SpecularTint,\n\t\t\trhino.TextureType.PBR_Roughness,\n\t\t\trhino.TextureType.PBR_Anisotropic,\n\t\t\trhino.TextureType.PBR_Anisotropic_Rotation,\n\t\t\trhino.TextureType.PBR_Sheen,\n\t\t\trhino.TextureType.PBR_SheenTint,\n\t\t\trhino.TextureType.PBR_Clearcoat,\n\t\t\trhino.TextureType.PBR_ClearcoatBump,\n\t\t\trhino.TextureType.PBR_ClearcoatRoughness,\n\t\t\trhino.TextureType.PBR_OpacityIor,\n\t\t\trhino.TextureType.PBR_OpacityRoughness,\n\t\t\trhino.TextureType.PBR_Emission,\n\t\t\trhino.TextureType.PBR_AmbientOcclusion,\n\t\t\trhino.TextureType.PBR_Displacement\n\t\t];\n\n\t\tfor ( var i = 0; i < doc.materials().count(); i ++ ) {\n\n\t\t\tvar _material = doc.materials().get( i );\n\t\t\tvar _pbrMaterial = _material.physicallyBased();\n\n\t\t\tvar material = extractProperties( _material );\n\n\t\t\tvar textures = [];\n\n\t\t\tfor ( var j = 0; j < textureTypes.length; j ++ ) {\n\n\t\t\t\tvar _texture = _material.getTexture( textureTypes[ j ] );\n\t\t\t\tif ( _texture ) {\n\n\t\t\t\t\tvar textureType = textureTypes[ j ].constructor.name;\n\t\t\t\t\ttextureType = textureType.substring( 12, textureType.length );\n\t\t\t\t\tvar texture = { type: textureType };\n\n\t\t\t\t\tvar image = doc.getEmbeddedFileAsBase64( _texture.fileName );\n\n\t\t\t\t\tif ( image ) {\n\n\t\t\t\t\t\ttexture.image = 'data:image/png;base64,' + image;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( `THREE.3DMLoader: Image for ${textureType} texture not embedded in file.` );\n\t\t\t\t\t\ttexture.image = null;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttextures.push( texture );\n\n\t\t\t\t\t_texture.delete();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmaterial.textures = textures;\n\n\t\t\tif ( _pbrMaterial.supported ) {\n\n\t\t\t\tconsole.log( 'pbr true' );\n\n\t\t\t\tfor ( var j = 0; j < pbrTextureTypes.length; j ++ ) {\n\n\t\t\t\t\tvar _texture = _material.getTexture( textureTypes[ j ] );\n\t\t\t\t\tif ( _texture ) {\n\n\t\t\t\t\t\tvar image = doc.getEmbeddedFileAsBase64( _texture.fileName );\n\t\t\t\t\t\tvar textureType = textureTypes[ j ].constructor.name;\n\t\t\t\t\t\ttextureType = textureType.substring( 12, textureType.length );\n\t\t\t\t\t\tvar texture = { type: textureType, image: 'data:image/png;base64,' + image };\n\t\t\t\t\t\ttextures.push( texture );\n\n\t\t\t\t\t\t_texture.delete();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar pbMaterialProperties = extractProperties( _material.physicallyBased() );\n\n\t\t\t\tmaterial = Object.assign( pbMaterialProperties, material );\n\n\t\t\t}\n\n\t\t\tmaterials.push( material );\n\n\t\t\t_material.delete();\n\t\t\t_pbrMaterial.delete();\n\n\t\t}\n\n\t\t// Handle layers\n\n\t\tfor ( var i = 0; i < doc.layers().count(); i ++ ) {\n\n\t\t\tvar _layer = doc.layers().get( i );\n\t\t\tvar layer = extractProperties( _layer );\n\n\t\t\tlayers.push( layer );\n\n\t\t\t_layer.delete();\n\n\t\t}\n\n\t\t// Handle views\n\n\t\tfor ( var i = 0; i < doc.views().count(); i ++ ) {\n\n\t\t\tvar _view = doc.views().get( i );\n\t\t\tvar view = extractProperties( _view );\n\n\t\t\tviews.push( view );\n\n\t\t\t_view.delete();\n\n\t\t}\n\n\t\t// Handle named views\n\n\t\tfor ( var i = 0; i < doc.namedViews().count(); i ++ ) {\n\n\t\t\tvar _namedView = doc.namedViews().get( i );\n\t\t\tvar namedView = extractProperties( _namedView );\n\n\t\t\tnamedViews.push( namedView );\n\n\t\t\t_namedView.delete();\n\n\t\t}\n\n\t\t// Handle groups\n\n\t\tfor ( var i = 0; i < doc.groups().count(); i ++ ) {\n\n\t\t\tvar _group = doc.groups().get( i );\n\t\t\tvar group = extractProperties( _group );\n\n\t\t\tgroups.push( group );\n\n\t\t\t_group.delete();\n\n\t\t}\n\n\t\t// Handle settings\n\n\t\tvar settings = extractProperties( doc.settings() );\n\n\t\t//TODO: Handle other document stuff like dimstyles, instance definitions, bitmaps etc.\n\n\t\t// Handle dimstyles\n\t\t// console.log( `Dimstyle Count: ${doc.dimstyles().count()}` );\n\n\t\t// Handle bitmaps\n\t\t// console.log( `Bitmap Count: ${doc.bitmaps().count()}` );\n\n\t\t// Handle strings -- this seems to be broken at the moment in rhino3dm\n\t\t// console.log( `Document Strings Count: ${doc.strings().count()}` );\n\n\t\t/*\n\t\tfor( var i = 0; i < doc.strings().count(); i++ ){\n\n\t\t\tvar _string= doc.strings().get( i );\n\n\t\t\tconsole.log(_string);\n\t\t\tvar string = extractProperties( _group );\n\n\t\t\tstrings.push( string );\n\n\t\t\t_string.delete();\n\n\t\t}\n\t\t*/\n\n\t\tdoc.delete();\n\n\t\treturn { objects, materials, layers, views, namedViews, groups, settings };\n\n\t}\n\n\tfunction extractObjectData( object, doc ) {\n\n\t\tvar _geometry = object.geometry();\n\t\tvar _attributes = object.attributes();\n\t\tvar objectType = _geometry.objectType;\n\t\tvar geometry = null;\n\t\tvar attributes = null;\n\n\t\t// skip instance definition objects\n\t\t//if( _attributes.isInstanceDefinitionObject ) { continue; }\n\n\t\t// TODO: handle other geometry types\n\t\tswitch ( objectType ) {\n\n\t\t\tcase rhino.ObjectType.Curve:\n\n\t\t\t\tvar pts = curveToPoints( _geometry, 100 );\n\n\t\t\t\tvar position = {};\n\t\t\t\tvar attributes = {};\n\t\t\t\tvar data = {};\n\n\t\t\t\tposition.itemSize = 3;\n\t\t\t\tposition.type = 'Float32Array';\n\t\t\t\tposition.array = [];\n\n\t\t\t\tfor ( var j = 0; j < pts.length; j ++ ) {\n\n\t\t\t\t\tposition.array.push( pts[ j ][ 0 ] );\n\t\t\t\t\tposition.array.push( pts[ j ][ 1 ] );\n\t\t\t\t\tposition.array.push( pts[ j ][ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\tattributes.position = position;\n\t\t\t\tdata.attributes = attributes;\n\n\t\t\t\tgeometry = { data };\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Point:\n\n\t\t\t\tvar pt = _geometry.location;\n\n\t\t\t\tvar position = {};\n\t\t\t\tvar color = {};\n\t\t\t\tvar attributes = {};\n\t\t\t\tvar data = {};\n\n\t\t\t\tposition.itemSize = 3;\n\t\t\t\tposition.type = 'Float32Array';\n\t\t\t\tposition.array = [ pt[ 0 ], pt[ 1 ], pt[ 2 ] ];\n\n\t\t\t\tvar _color = _attributes.drawColor( doc );\n\n\t\t\t\tcolor.itemSize = 3;\n\t\t\t\tcolor.type = 'Float32Array';\n\t\t\t\tcolor.array = [ _color.r / 255.0, _color.g / 255.0, _color.b / 255.0 ];\n\n\t\t\t\tattributes.position = position;\n\t\t\t\tattributes.color = color;\n\t\t\t\tdata.attributes = attributes;\n\n\t\t\t\tgeometry = { data };\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.PointSet:\n\t\t\tcase rhino.ObjectType.Mesh:\n\n\t\t\t\tgeometry = _geometry.toThreejsJSON();\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Brep:\n\n\t\t\t\tvar faces = _geometry.faces();\n\t\t\t\tgeometry = [];\n\n\t\t\t\tfor ( var faceIndex = 0; faceIndex < faces.count; faceIndex ++ ) {\n\n\t\t\t\t\tvar face = faces.get( faceIndex );\n\t\t\t\t\tvar mesh = face.getMesh( rhino.MeshType.Any );\n\n\t\t\t\t\tif ( mesh ) {\n\n\t\t\t\t\t\tgeometry.push( mesh.toThreejsJSON() );\n\t\t\t\t\t\tmesh.delete();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tface.delete();\n\n\t\t\t\t}\n\n\t\t\t\tfaces.delete();\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Extrusion:\n\n\t\t\t\tvar mesh = _geometry.getMesh( rhino.MeshType.Any );\n\n\t\t\t\tif ( mesh ) {\n\n\t\t\t\t\tgeometry = mesh.toThreejsJSON();\n\t\t\t\t\tmesh.delete();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.TextDot:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.Light:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.InstanceReference:\n\n\t\t\t\tgeometry = extractProperties( _geometry );\n\t\t\t\tgeometry.xform = extractProperties( _geometry.xform );\n\t\t\t\tgeometry.xform.array = _geometry.xform.toFloatArray( true );\n\n\t\t\t\tbreak;\n\n\t\t\tcase rhino.ObjectType.SubD:\n\n\t\t\t\t// TODO: precalculate resulting vertices and faces and warn on excessive results\n\t\t\t\t_geometry.subdivide( 3 );\n\t\t\t\tvar mesh = rhino.Mesh.createFromSubDControlNet( _geometry );\n\t\t\t\tif ( mesh ) {\n\n\t\t\t\t\tgeometry = mesh.toThreejsJSON();\n\t\t\t\t\tmesh.delete();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t\t/*\n\t\t\t\tcase rhino.ObjectType.Annotation:\n\t\t\t\tcase rhino.ObjectType.Hatch:\n\t\t\t\tcase rhino.ObjectType.ClipPlane:\n\t\t\t\t*/\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( `THREE.3DMLoader: TODO: Implement ${objectType.constructor.name}` );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( Array.isArray( geometry ) === false || geometry.length > 0 ) {\n\n\t\t\tvar attributes = extractProperties( _attributes );\n\t\t\tattributes.geometry = extractProperties( _geometry );\n\n\t\t\tif ( _attributes.groupCount > 0 ) {\n\n\t\t\t\tattributes.groupIds = _attributes.getGroupList();\n\n\t\t\t}\n\n\t\t\tif ( _attributes.userStringCount > 0 ) {\n\n\t\t\t\tattributes.userStrings = _attributes.getUserStrings();\n\n\t\t\t}\n\n\t\t\tattributes.drawColor = _attributes.drawColor( doc );\n\n\t\t\tobjectType = objectType.constructor.name;\n\t\t\tobjectType = objectType.substring( 11, objectType.length );\n\t\t\tattributes.geometry.objectType = objectType;\n\n\t\t\treturn { geometry, attributes, objectType };\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.3DMLoader: Object has no mesh geometry. Consider opening this in Rhino, using a shaded display mode, and exporting again.' );\n\n\t\t}\n\n\t}\n\n\tfunction extractProperties( object ) {\n\n\t\tvar result = {};\n\n\t\tfor ( var property in object ) {\n\n\t\t\tif ( typeof object[ property ] !== 'function' ) {\n\n\t\t\t\tresult[ property ] = object[ property ];\n\n\t\t\t} else {\n\n\t\t\t\t// console.log( `${property}: ${object[ property ]}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction curveToPoints( curve, pointLimit ) {\n\n\t\tvar pointCount = pointLimit;\n\t\tvar rc = [];\n\t\tvar ts = [];\n\n\t\tif ( curve instanceof rhino.LineCurve ) {\n\n\t\t\treturn [ curve.pointAtStart, curve.pointAtEnd ];\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.PolylineCurve ) {\n\n\t\t\tpointCount = curve.pointCount;\n\t\t\tfor ( var i = 0; i < pointCount; i ++ ) {\n\n\t\t\t\trc.push( curve.point( i ) );\n\n\t\t\t}\n\n\t\t\treturn rc;\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.PolyCurve ) {\n\n\t\t\tvar segmentCount = curve.segmentCount;\n\n\t\t\tfor ( var i = 0; i < segmentCount; i ++ ) {\n\n\t\t\t\tvar segment = curve.segmentCurve( i );\n\t\t\t\tvar segmentArray = curveToPoints( segment, pointCount );\n\t\t\t\trc = rc.concat( segmentArray );\n\t\t\t\tsegment.delete();\n\n\t\t\t}\n\n\t\t\treturn rc;\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.ArcCurve ) {\n\n\t\t\tpointCount = Math.floor( curve.angleDegrees / 5 );\n\t\t\tpointCount = pointCount < 2 ? 2 : pointCount;\n\t\t\t// alternative to this hardcoded version: https://stackoverflow.com/a/18499923/2179399\n\n\t\t}\n\n\t\tif ( curve instanceof rhino.NurbsCurve && curve.degree === 1 ) {\n\n\t\t\tif ( curve.segmentCount === undefined || curve.segmentCount === 1 ) {\n\n\t\t\t\treturn [ curve.pointAtStart, curve.pointAtEnd ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar domain = curve.domain;\n\t\tvar divisions = pointCount - 1.0;\n\n\t\tfor ( var j = 0; j < pointCount; j ++ ) {\n\n\t\t\tvar t = domain[ 0 ] + ( j / divisions ) * ( domain[ 1 ] - domain[ 0 ] );\n\n\t\t\tif ( t === domain[ 0 ] || t === domain[ 1 ] ) {\n\n\t\t\t\tts.push( t );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar tan = curve.tangentAt( t );\n\t\t\tvar prevTan = curve.tangentAt( ts.slice( - 1 )[ 0 ] );\n\n\t\t\t// Duplicaated from THREE.Vector3\n\t\t\t// How to pass imports to worker?\n\n\t\t\tvar tS = tan[ 0 ] * tan[ 0 ] + tan[ 1 ] * tan[ 1 ] + tan[ 2 ] * tan[ 2 ];\n\t\t\tvar ptS = prevTan[ 0 ] * prevTan[ 0 ] + prevTan[ 1 ] * prevTan[ 1 ] + prevTan[ 2 ] * prevTan[ 2 ];\n\n\t\t\tvar denominator = Math.sqrt( tS * ptS );\n\n\t\t\tvar angle;\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\tangle = Math.PI / 2;\n\n\t\t\t} else {\n\n\t\t\t\tvar theta = ( tan.x * prevTan.x + tan.y * prevTan.y + tan.z * prevTan.z ) / denominator;\n\t\t\t\tangle = Math.acos( Math.max( - 1, Math.min( 1, theta ) ) );\n\n\t\t\t}\n\n\t\t\tif ( angle < 0.1 ) continue;\n\n\t\t\tts.push( t );\n\n\t\t}\n\n\t\trc = ts.map( t => curve.pointAt( t ) );\n\t\treturn rc;\n\n\t}\n\n};\n\nexport { Rhino3dmLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/3MFLoader.js",
    "content": "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLoader,\n\tLoaderUtils,\n\tMatrix4,\n\tMesh,\n\tMeshPhongMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tRepeatWrapping,\n\tTextureLoader,\n\tsRGBEncoding\n} from '../../../build/three.module.js';\nimport { JSZip } from '../libs/jszip.module.min.js';\n\n/**\n *\n * 3D Manufacturing Format (3MF) specification: https://3mf.io/specification/\n *\n * The following features from the core specification are supported:\n *\n * - 3D Models\n * - Object Resources (Meshes and Components)\n * - Material Resources (Base Materials)\n *\n * 3MF Materials and Properties Extension are only partially supported.\n *\n * - Texture 2D\n * - Texture 2D Groups\n * - Color Groups (Vertex Colors)\n * - Metallic Display Properties (PBR)\n */\n\nvar ThreeMFLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.availableExtensions = [];\n\n};\n\nThreeMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ThreeMFLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\tvar scope = this;\n\t\tvar textureLoader = new TextureLoader( this.manager );\n\n\t\tfunction loadDocument( data ) {\n\n\t\t\tvar zip = null;\n\t\t\tvar file = null;\n\n\t\t\tvar relsName;\n\t\t\tvar modelRelsName;\n\t\t\tvar modelPartNames = [];\n\t\t\tvar printTicketPartNames = [];\n\t\t\tvar texturesPartNames = [];\n\t\t\tvar otherPartNames = [];\n\n\t\t\tvar rels;\n\t\t\tvar modelRels;\n\t\t\tvar modelParts = {};\n\t\t\tvar printTicketParts = {};\n\t\t\tvar texturesParts = {};\n\t\t\tvar otherParts = {};\n\n\t\t\ttry {\n\n\t\t\t\tzip = new JSZip( data ); // eslint-disable-line no-undef\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( e instanceof ReferenceError ) {\n\n\t\t\t\t\tconsole.error( 'THREE.3MFLoader: jszip missing and file is compressed.' );\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( file in zip.files ) {\n\n\t\t\t\tif ( file.match( /\\_rels\\/.rels$/ ) ) {\n\n\t\t\t\t\trelsName = file;\n\n\t\t\t\t} else if ( file.match( /3D\\/_rels\\/.*\\.model\\.rels$/ ) ) {\n\n\t\t\t\t\tmodelRelsName = file;\n\n\t\t\t\t} else if ( file.match( /^3D\\/.*\\.model$/ ) ) {\n\n\t\t\t\t\tmodelPartNames.push( file );\n\n\t\t\t\t} else if ( file.match( /^3D\\/Metadata\\/.*\\.xml$/ ) ) {\n\n\t\t\t\t\tprintTicketPartNames.push( file );\n\n\t\t\t\t} else if ( file.match( /^3D\\/Textures?\\/.*/ ) ) {\n\n\t\t\t\t\ttexturesPartNames.push( file );\n\n\t\t\t\t} else if ( file.match( /^3D\\/Other\\/.*/ ) ) {\n\n\t\t\t\t\totherPartNames.push( file );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar relsView = new Uint8Array( zip.file( relsName ).asArrayBuffer() );\n\t\t\tvar relsFileText = LoaderUtils.decodeText( relsView );\n\t\t\trels = parseRelsXml( relsFileText );\n\n\t\t\t//\n\n\t\t\tif ( modelRelsName ) {\n\n\t\t\t\tvar relsView = new Uint8Array( zip.file( modelRelsName ).asArrayBuffer() );\n\t\t\t\tvar relsFileText = LoaderUtils.decodeText( relsView );\n\t\t\t\tmodelRels = parseRelsXml( relsFileText );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( var i = 0; i < modelPartNames.length; i ++ ) {\n\n\t\t\t\tvar modelPart = modelPartNames[ i ];\n\t\t\t\tvar view = new Uint8Array( zip.file( modelPart ).asArrayBuffer() );\n\n\t\t\t\tvar fileText = LoaderUtils.decodeText( view );\n\t\t\t\tvar xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );\n\n\t\t\t\tif ( xmlData.documentElement.nodeName.toLowerCase() !== 'model' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.3MFLoader: Error loading 3MF - no 3MF document found: ', modelPart );\n\n\t\t\t\t}\n\n\t\t\t\tvar modelNode = xmlData.querySelector( 'model' );\n\t\t\t\tvar extensions = {};\n\n\t\t\t\tfor ( var i = 0; i < modelNode.attributes.length; i ++ ) {\n\n\t\t\t\t\tvar attr = modelNode.attributes[ i ];\n\t\t\t\t\tif ( attr.name.match( /^xmlns:(.+)$/ ) ) {\n\n\t\t\t\t\t\textensions[ attr.value ] = RegExp.$1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar modelData = parseModelNode( modelNode );\n\t\t\t\tmodelData[ 'xml' ] = modelNode;\n\n\t\t\t\tif ( 0 < Object.keys( extensions ).length ) {\n\n\t\t\t\t\tmodelData[ 'extensions' ] = extensions;\n\n\t\t\t\t}\n\n\t\t\t\tmodelParts[ modelPart ] = modelData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( var i = 0; i < texturesPartNames.length; i ++ ) {\n\n\t\t\t\tvar texturesPartName = texturesPartNames[ i ];\n\t\t\t\ttexturesParts[ texturesPartName ] = zip.file( texturesPartName ).asArrayBuffer();\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trels: rels,\n\t\t\t\tmodelRels: modelRels,\n\t\t\t\tmodel: modelParts,\n\t\t\t\tprintTicket: printTicketParts,\n\t\t\t\ttexture: texturesParts,\n\t\t\t\tother: otherParts\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseRelsXml( relsFileText ) {\n\n\t\t\tvar relationships = [];\n\n\t\t\tvar relsXmlData = new DOMParser().parseFromString( relsFileText, 'application/xml' );\n\n\t\t\tvar relsNodes = relsXmlData.querySelectorAll( 'Relationship' );\n\n\t\t\tfor ( var i = 0; i < relsNodes.length; i ++ ) {\n\n\t\t\t\tvar relsNode = relsNodes[ i ];\n\n\t\t\t\tvar relationship = {\n\t\t\t\t\ttarget: relsNode.getAttribute( 'Target' ), //required\n\t\t\t\t\tid: relsNode.getAttribute( 'Id' ), //required\n\t\t\t\t\ttype: relsNode.getAttribute( 'Type' ) //required\n\t\t\t\t};\n\n\t\t\t\trelationships.push( relationship );\n\n\t\t\t}\n\n\t\t\treturn relationships;\n\n\t\t}\n\n\t\tfunction parseMetadataNodes( metadataNodes ) {\n\n\t\t\tvar metadataData = {};\n\n\t\t\tfor ( var i = 0; i < metadataNodes.length; i ++ ) {\n\n\t\t\t\tvar metadataNode = metadataNodes[ i ];\n\t\t\t\tvar name = metadataNode.getAttribute( 'name' );\n\t\t\t\tvar validNames = [\n\t\t\t\t\t'Title',\n\t\t\t\t\t'Designer',\n\t\t\t\t\t'Description',\n\t\t\t\t\t'Copyright',\n\t\t\t\t\t'LicenseTerms',\n\t\t\t\t\t'Rating',\n\t\t\t\t\t'CreationDate',\n\t\t\t\t\t'ModificationDate'\n\t\t\t\t];\n\n\t\t\t\tif ( 0 <= validNames.indexOf( name ) ) {\n\n\t\t\t\t\tmetadataData[ name ] = metadataNode.textContent;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn metadataData;\n\n\t\t}\n\n\t\tfunction parseBasematerialsNode( basematerialsNode ) {\n\n\t\t\tvar basematerialsData = {\n\t\t\t\tid: basematerialsNode.getAttribute( 'id' ), // required\n\t\t\t\tbasematerials: []\n\t\t\t};\n\n\t\t\tvar basematerialNodes = basematerialsNode.querySelectorAll( 'base' );\n\n\t\t\tfor ( var i = 0; i < basematerialNodes.length; i ++ ) {\n\n\t\t\t\tvar basematerialNode = basematerialNodes[ i ];\n\t\t\t\tvar basematerialData = parseBasematerialNode( basematerialNode );\n\t\t\t\tbasematerialData.index = i; // the order and count of the material nodes form an implicit 0-based index\n\t\t\t\tbasematerialsData.basematerials.push( basematerialData );\n\n\t\t\t}\n\n\t\t\treturn basematerialsData;\n\n\t\t}\n\n\t\tfunction parseTexture2DNode( texture2DNode ) {\n\n\t\t\tvar texture2dData = {\n\t\t\t\tid: texture2DNode.getAttribute( 'id' ), // required\n\t\t\t\tpath: texture2DNode.getAttribute( 'path' ), // required\n\t\t\t\tcontenttype: texture2DNode.getAttribute( 'contenttype' ), // required\n\t\t\t\ttilestyleu: texture2DNode.getAttribute( 'tilestyleu' ),\n\t\t\t\ttilestylev: texture2DNode.getAttribute( 'tilestylev' ),\n\t\t\t\tfilter: texture2DNode.getAttribute( 'filter' ),\n\t\t\t};\n\n\t\t\treturn texture2dData;\n\n\t\t}\n\n\t\tfunction parseTextures2DGroupNode( texture2DGroupNode ) {\n\n\t\t\tvar texture2DGroupData = {\n\t\t\t\tid: texture2DGroupNode.getAttribute( 'id' ), // required\n\t\t\t\ttexid: texture2DGroupNode.getAttribute( 'texid' ), // required\n\t\t\t\tdisplaypropertiesid: texture2DGroupNode.getAttribute( 'displaypropertiesid' )\n\t\t\t};\n\n\t\t\tvar tex2coordNodes = texture2DGroupNode.querySelectorAll( 'tex2coord' );\n\n\t\t\tvar uvs = [];\n\n\t\t\tfor ( var i = 0; i < tex2coordNodes.length; i ++ ) {\n\n\t\t\t\tvar tex2coordNode = tex2coordNodes[ i ];\n\t\t\t\tvar u = tex2coordNode.getAttribute( 'u' );\n\t\t\t\tvar v = tex2coordNode.getAttribute( 'v' );\n\n\t\t\t\tuvs.push( parseFloat( u ), parseFloat( v ) );\n\n\t\t\t}\n\n\t\t\ttexture2DGroupData[ 'uvs' ] = new Float32Array( uvs );\n\n\t\t\treturn texture2DGroupData;\n\n\t\t}\n\n\t\tfunction parseColorGroupNode( colorGroupNode ) {\n\n\t\t\tvar colorGroupData = {\n\t\t\t\tid: colorGroupNode.getAttribute( 'id' ), // required\n\t\t\t\tdisplaypropertiesid: colorGroupNode.getAttribute( 'displaypropertiesid' )\n\t\t\t};\n\n\t\t\tvar colorNodes = colorGroupNode.querySelectorAll( 'color' );\n\n\t\t\tvar colors = [];\n\t\t\tvar colorObject = new Color();\n\n\t\t\tfor ( var i = 0; i < colorNodes.length; i ++ ) {\n\n\t\t\t\tvar colorNode = colorNodes[ i ];\n\t\t\t\tvar color = colorNode.getAttribute( 'color' );\n\n\t\t\t\tcolorObject.setStyle( color.substring( 0, 7 ) );\n\t\t\t\tcolorObject.convertSRGBToLinear(); // color is in sRGB\n\n\t\t\t\tcolors.push( colorObject.r, colorObject.g, colorObject.b );\n\n\t\t\t}\n\n\t\t\tcolorGroupData[ 'colors' ] = new Float32Array( colors );\n\n\t\t\treturn colorGroupData;\n\n\t\t}\n\n\t\tfunction parseMetallicDisplaypropertiesNode( metallicDisplaypropetiesNode ) {\n\n\t\t\tvar metallicDisplaypropertiesData = {\n\t\t\t\tid: metallicDisplaypropetiesNode.getAttribute( 'id' ) // required\n\t\t\t};\n\n\t\t\tvar metallicNodes = metallicDisplaypropetiesNode.querySelectorAll( 'pbmetallic' );\n\n\t\t\tvar metallicData = [];\n\n\t\t\tfor ( var i = 0; i < metallicNodes.length; i ++ ) {\n\n\t\t\t\tvar metallicNode = metallicNodes[ i ];\n\n\t\t\t\tmetallicData.push( {\n\t\t\t\t\tname: metallicNode.getAttribute( 'name' ), // required\n\t\t\t\t\tmetallicness: parseFloat( metallicNode.getAttribute( 'metallicness' ) ), // required\n\t\t\t\t\troughness: parseFloat( metallicNode.getAttribute( 'roughness' ) ) // required\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tmetallicDisplaypropertiesData.data = metallicData;\n\n\t\t\treturn metallicDisplaypropertiesData;\n\n\t\t}\n\n\t\tfunction parseBasematerialNode( basematerialNode ) {\n\n\t\t\tvar basematerialData = {};\n\n\t\t\tbasematerialData[ 'name' ] = basematerialNode.getAttribute( 'name' ); // required\n\t\t\tbasematerialData[ 'displaycolor' ] = basematerialNode.getAttribute( 'displaycolor' ); // required\n\t\t\tbasematerialData[ 'displaypropertiesid' ] = basematerialNode.getAttribute( 'displaypropertiesid' );\n\n\t\t\treturn basematerialData;\n\n\t\t}\n\n\t\tfunction parseMeshNode( meshNode ) {\n\n\t\t\tvar meshData = {};\n\n\t\t\tvar vertices = [];\n\t\t\tvar vertexNodes = meshNode.querySelectorAll( 'vertices vertex' );\n\n\t\t\tfor ( var i = 0; i < vertexNodes.length; i ++ ) {\n\n\t\t\t\tvar vertexNode = vertexNodes[ i ];\n\t\t\t\tvar x = vertexNode.getAttribute( 'x' );\n\t\t\t\tvar y = vertexNode.getAttribute( 'y' );\n\t\t\t\tvar z = vertexNode.getAttribute( 'z' );\n\n\t\t\t\tvertices.push( parseFloat( x ), parseFloat( y ), parseFloat( z ) );\n\n\t\t\t}\n\n\t\t\tmeshData[ 'vertices' ] = new Float32Array( vertices );\n\n\t\t\tvar triangleProperties = [];\n\t\t\tvar triangles = [];\n\t\t\tvar triangleNodes = meshNode.querySelectorAll( 'triangles triangle' );\n\n\t\t\tfor ( var i = 0; i < triangleNodes.length; i ++ ) {\n\n\t\t\t\tvar triangleNode = triangleNodes[ i ];\n\t\t\t\tvar v1 = triangleNode.getAttribute( 'v1' );\n\t\t\t\tvar v2 = triangleNode.getAttribute( 'v2' );\n\t\t\t\tvar v3 = triangleNode.getAttribute( 'v3' );\n\t\t\t\tvar p1 = triangleNode.getAttribute( 'p1' );\n\t\t\t\tvar p2 = triangleNode.getAttribute( 'p2' );\n\t\t\t\tvar p3 = triangleNode.getAttribute( 'p3' );\n\t\t\t\tvar pid = triangleNode.getAttribute( 'pid' );\n\n\t\t\t\tvar triangleProperty = {};\n\n\t\t\t\ttriangleProperty[ 'v1' ] = parseInt( v1, 10 );\n\t\t\t\ttriangleProperty[ 'v2' ] = parseInt( v2, 10 );\n\t\t\t\ttriangleProperty[ 'v3' ] = parseInt( v3, 10 );\n\n\t\t\t\ttriangles.push( triangleProperty[ 'v1' ], triangleProperty[ 'v2' ], triangleProperty[ 'v3' ] );\n\n\t\t\t\t// optional\n\n\t\t\t\tif ( p1 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p1' ] = parseInt( p1, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( p2 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p2' ] = parseInt( p2, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( p3 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p3' ] = parseInt( p3, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pid ) {\n\n\t\t\t\t\ttriangleProperty[ 'pid' ] = pid;\n\n\t\t\t\t}\n\n\t\t\t\tif ( 0 < Object.keys( triangleProperty ).length ) {\n\n\t\t\t\t\ttriangleProperties.push( triangleProperty );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmeshData[ 'triangleProperties' ] = triangleProperties;\n\t\t\tmeshData[ 'triangles' ] = new Uint32Array( triangles );\n\n\t\t\treturn meshData;\n\n\t\t}\n\n\t\tfunction parseComponentsNode( componentsNode ) {\n\n\t\t\tvar components = [];\n\n\t\t\tvar componentNodes = componentsNode.querySelectorAll( 'component' );\n\n\t\t\tfor ( var i = 0; i < componentNodes.length; i ++ ) {\n\n\t\t\t\tvar componentNode = componentNodes[ i ];\n\t\t\t\tvar componentData = parseComponentNode( componentNode );\n\t\t\t\tcomponents.push( componentData );\n\n\t\t\t}\n\n\t\t\treturn components;\n\n\t\t}\n\n\t\tfunction parseComponentNode( componentNode ) {\n\n\t\t\tvar componentData = {};\n\n\t\t\tcomponentData[ 'objectId' ] = componentNode.getAttribute( 'objectid' ); // required\n\n\t\t\tvar transform = componentNode.getAttribute( 'transform' );\n\n\t\t\tif ( transform ) {\n\n\t\t\t\tcomponentData[ 'transform' ] = parseTransform( transform );\n\n\t\t\t}\n\n\t\t\treturn componentData;\n\n\t\t}\n\n\t\tfunction parseTransform( transform ) {\n\n\t\t\tvar t = [];\n\t\t\ttransform.split( ' ' ).forEach( function ( s ) {\n\n\t\t\t\tt.push( parseFloat( s ) );\n\n\t\t\t} );\n\n\t\t\tvar matrix = new Matrix4();\n\t\t\tmatrix.set(\n\t\t\t\tt[ 0 ], t[ 3 ], t[ 6 ], t[ 9 ],\n\t\t\t\tt[ 1 ], t[ 4 ], t[ 7 ], t[ 10 ],\n\t\t\t\tt[ 2 ], t[ 5 ], t[ 8 ], t[ 11 ],\n\t\t\t\t 0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\treturn matrix;\n\n\t\t}\n\n\t\tfunction parseObjectNode( objectNode ) {\n\n\t\t\tvar objectData = {\n\t\t\t\ttype: objectNode.getAttribute( 'type' )\n\t\t\t};\n\n\t\t\tvar id = objectNode.getAttribute( 'id' );\n\n\t\t\tif ( id ) {\n\n\t\t\t\tobjectData[ 'id' ] = id;\n\n\t\t\t}\n\n\t\t\tvar pid = objectNode.getAttribute( 'pid' );\n\n\t\t\tif ( pid ) {\n\n\t\t\t\tobjectData[ 'pid' ] = pid;\n\n\t\t\t}\n\n\t\t\tvar pindex = objectNode.getAttribute( 'pindex' );\n\n\t\t\tif ( pindex ) {\n\n\t\t\t\tobjectData[ 'pindex' ] = pindex;\n\n\t\t\t}\n\n\t\t\tvar thumbnail = objectNode.getAttribute( 'thumbnail' );\n\n\t\t\tif ( thumbnail ) {\n\n\t\t\t\tobjectData[ 'thumbnail' ] = thumbnail;\n\n\t\t\t}\n\n\t\t\tvar partnumber = objectNode.getAttribute( 'partnumber' );\n\n\t\t\tif ( partnumber ) {\n\n\t\t\t\tobjectData[ 'partnumber' ] = partnumber;\n\n\t\t\t}\n\n\t\t\tvar name = objectNode.getAttribute( 'name' );\n\n\t\t\tif ( name ) {\n\n\t\t\t\tobjectData[ 'name' ] = name;\n\n\t\t\t}\n\n\t\t\tvar meshNode = objectNode.querySelector( 'mesh' );\n\n\t\t\tif ( meshNode ) {\n\n\t\t\t\tobjectData[ 'mesh' ] = parseMeshNode( meshNode );\n\n\t\t\t}\n\n\t\t\tvar componentsNode = objectNode.querySelector( 'components' );\n\n\t\t\tif ( componentsNode ) {\n\n\t\t\t\tobjectData[ 'components' ] = parseComponentsNode( componentsNode );\n\n\t\t\t}\n\n\t\t\treturn objectData;\n\n\t\t}\n\n\t\tfunction parseResourcesNode( resourcesNode ) {\n\n\t\t\tvar resourcesData = {};\n\n\t\t\tresourcesData[ 'basematerials' ] = {};\n\t\t\tvar basematerialsNodes = resourcesNode.querySelectorAll( 'basematerials' );\n\n\t\t\tfor ( var i = 0; i < basematerialsNodes.length; i ++ ) {\n\n\t\t\t\tvar basematerialsNode = basematerialsNodes[ i ];\n\t\t\t\tvar basematerialsData = parseBasematerialsNode( basematerialsNode );\n\t\t\t\tresourcesData[ 'basematerials' ][ basematerialsData[ 'id' ] ] = basematerialsData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'texture2d' ] = {};\n\t\t\tvar textures2DNodes = resourcesNode.querySelectorAll( 'texture2d' );\n\n\t\t\tfor ( var i = 0; i < textures2DNodes.length; i ++ ) {\n\n\t\t\t\tvar textures2DNode = textures2DNodes[ i ];\n\t\t\t\tvar texture2DData = parseTexture2DNode( textures2DNode );\n\t\t\t\tresourcesData[ 'texture2d' ][ texture2DData[ 'id' ] ] = texture2DData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'colorgroup' ] = {};\n\t\t\tvar colorGroupNodes = resourcesNode.querySelectorAll( 'colorgroup' );\n\n\t\t\tfor ( var i = 0; i < colorGroupNodes.length; i ++ ) {\n\n\t\t\t\tvar colorGroupNode = colorGroupNodes[ i ];\n\t\t\t\tvar colorGroupData = parseColorGroupNode( colorGroupNode );\n\t\t\t\tresourcesData[ 'colorgroup' ][ colorGroupData[ 'id' ] ] = colorGroupData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'pbmetallicdisplayproperties' ] = {};\n\t\t\tvar pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll( 'pbmetallicdisplayproperties' );\n\n\t\t\tfor ( var i = 0; i < pbmetallicdisplaypropertiesNodes.length; i ++ ) {\n\n\t\t\t\tvar pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[ i ];\n\t\t\t\tvar pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode( pbmetallicdisplaypropertiesNode );\n\t\t\t\tresourcesData[ 'pbmetallicdisplayproperties' ][ pbmetallicdisplaypropertiesData[ 'id' ] ] = pbmetallicdisplaypropertiesData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'texture2dgroup' ] = {};\n\t\t\tvar textures2DGroupNodes = resourcesNode.querySelectorAll( 'texture2dgroup' );\n\n\t\t\tfor ( var i = 0; i < textures2DGroupNodes.length; i ++ ) {\n\n\t\t\t\tvar textures2DGroupNode = textures2DGroupNodes[ i ];\n\t\t\t\tvar textures2DGroupData = parseTextures2DGroupNode( textures2DGroupNode );\n\t\t\t\tresourcesData[ 'texture2dgroup' ][ textures2DGroupData[ 'id' ] ] = textures2DGroupData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'object' ] = {};\n\t\t\tvar objectNodes = resourcesNode.querySelectorAll( 'object' );\n\n\t\t\tfor ( var i = 0; i < objectNodes.length; i ++ ) {\n\n\t\t\t\tvar objectNode = objectNodes[ i ];\n\t\t\t\tvar objectData = parseObjectNode( objectNode );\n\t\t\t\tresourcesData[ 'object' ][ objectData[ 'id' ] ] = objectData;\n\n\t\t\t}\n\n\t\t\treturn resourcesData;\n\n\t\t}\n\n\t\tfunction parseBuildNode( buildNode ) {\n\n\t\t\tvar buildData = [];\n\t\t\tvar itemNodes = buildNode.querySelectorAll( 'item' );\n\n\t\t\tfor ( var i = 0; i < itemNodes.length; i ++ ) {\n\n\t\t\t\tvar itemNode = itemNodes[ i ];\n\t\t\t\tvar buildItem = {\n\t\t\t\t\tobjectId: itemNode.getAttribute( 'objectid' )\n\t\t\t\t};\n\t\t\t\tvar transform = itemNode.getAttribute( 'transform' );\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tbuildItem[ 'transform' ] = parseTransform( transform );\n\n\t\t\t\t}\n\n\t\t\t\tbuildData.push( buildItem );\n\n\t\t\t}\n\n\t\t\treturn buildData;\n\n\t\t}\n\n\t\tfunction parseModelNode( modelNode ) {\n\n\t\t\tvar modelData = { unit: modelNode.getAttribute( 'unit' ) || 'millimeter' };\n\t\t\tvar metadataNodes = modelNode.querySelectorAll( 'metadata' );\n\n\t\t\tif ( metadataNodes ) {\n\n\t\t\t\tmodelData[ 'metadata' ] = parseMetadataNodes( metadataNodes );\n\n\t\t\t}\n\n\t\t\tvar resourcesNode = modelNode.querySelector( 'resources' );\n\n\t\t\tif ( resourcesNode ) {\n\n\t\t\t\tmodelData[ 'resources' ] = parseResourcesNode( resourcesNode );\n\n\t\t\t}\n\n\t\t\tvar buildNode = modelNode.querySelector( 'build' );\n\n\t\t\tif ( buildNode ) {\n\n\t\t\t\tmodelData[ 'build' ] = parseBuildNode( buildNode );\n\n\t\t\t}\n\n\t\t\treturn modelData;\n\n\t\t}\n\n\t\tfunction buildTexture( texture2dgroup, objects, modelData, textureData ) {\n\n\t\t\tvar texid = texture2dgroup.texid;\n\t\t\tvar texture2ds = modelData.resources.texture2d;\n\t\t\tvar texture2d = texture2ds[ texid ];\n\n\t\t\tif ( texture2d ) {\n\n\t\t\t\tvar data = textureData[ texture2d.path ];\n\t\t\t\tvar type = texture2d.contenttype;\n\n\t\t\t\tvar blob = new Blob( [ data ], { type: type } );\n\t\t\t\tvar sourceURI = URL.createObjectURL( blob );\n\n\t\t\t\tvar texture = textureLoader.load( sourceURI, function () {\n\n\t\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t\t} );\n\n\t\t\t\ttexture.encoding = sRGBEncoding;\n\n\t\t\t\t// texture parameters\n\n\t\t\t\tswitch ( texture2d.tilestyleu ) {\n\n\t\t\t\t\tcase 'wrap':\n\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mirror':\n\t\t\t\t\t\ttexture.wrapS = MirroredRepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'clamp':\n\t\t\t\t\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( texture2d.tilestylev ) {\n\n\t\t\t\t\tcase 'wrap':\n\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mirror':\n\t\t\t\t\t\ttexture.wrapT = MirroredRepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'clamp':\n\t\t\t\t\t\ttexture.wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( texture2d.filter ) {\n\n\t\t\t\t\tcase 'auto':\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linear':\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'nearest':\n\t\t\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\t\t\ttexture.minFilter = NearestFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\treturn texture;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildBasematerialsMeshes( basematerials, triangleProperties, modelData, meshData, textureData, objectData ) {\n\n\t\t\tvar objectPindex = objectData.pindex;\n\n\t\t\tvar materialMap = {};\n\n\t\t\tfor ( var i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tvar triangleProperty = triangleProperties[ i ];\n\t\t\t\tvar pindex = ( triangleProperty.p1 !== undefined ) ? triangleProperty.p1 : objectPindex;\n\n\t\t\t\tif ( materialMap[ pindex ] === undefined ) materialMap[ pindex ] = [];\n\n\t\t\t\tmaterialMap[ pindex ].push( triangleProperty );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar keys = Object.keys( materialMap );\n\t\t\tvar meshes = [];\n\n\t\t\tfor ( var i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tvar materialIndex = keys[ i ];\n\t\t\t\tvar trianglePropertiesProps = materialMap[ materialIndex ];\n\t\t\t\tvar basematerialData = basematerials.basematerials[ materialIndex ];\n\t\t\t\tvar material = getBuild( basematerialData, objects, modelData, textureData, objectData, buildBasematerial );\n\n\t\t\t\t//\n\n\t\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\t\tvar positionData = [];\n\n\t\t\t\tvar vertices = meshData.vertices;\n\n\t\t\t\tfor ( var j = 0, jl = trianglePropertiesProps.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar triangleProperty = trianglePropertiesProps[ j ];\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 2 ] );\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 2 ] );\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 2 ] );\n\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\n\t\t\t\t//\n\n\t\t\t\tvar mesh = new Mesh( geometry, material );\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\treturn meshes;\n\n\t\t}\n\n\t\tfunction buildTexturedMesh( texture2dgroup, triangleProperties, modelData, meshData, textureData, objectData ) {\n\n\t\t\t// geometry\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\tvar positionData = [];\n\t\t\tvar uvData = [];\n\n\t\t\tvar vertices = meshData.vertices;\n\t\t\tvar uvs = texture2dgroup.uvs;\n\n\t\t\tfor ( var i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tvar triangleProperty = triangleProperties[ i ];\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 2 ] );\n\n\t\t\t\t//\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p1 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p1 * 2 ) + 1 ] );\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p2 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p2 * 2 ) + 1 ] );\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p3 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p3 * 2 ) + 1 ] );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvData, 2 ) );\n\n\t\t\t// material\n\n\t\t\tvar texture = getBuild( texture2dgroup, objects, modelData, textureData, objectData, buildTexture );\n\n\t\t\tvar material = new MeshPhongMaterial( { map: texture, flatShading: true } );\n\n\t\t\t// mesh\n\n\t\t\tvar mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildVertexColorMesh( colorgroup, triangleProperties, modelData, meshData, objectData ) {\n\n\t\t\t// geometry\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\tvar positionData = [];\n\t\t\tvar colorData = [];\n\n\t\t\tvar vertices = meshData.vertices;\n\t\t\tvar colors = colorgroup.colors;\n\n\t\t\tfor ( var i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tvar triangleProperty = triangleProperties[ i ];\n\n\t\t\t\tvar v1 = triangleProperty.v1;\n\t\t\t\tvar v2 = triangleProperty.v2;\n\t\t\t\tvar v3 = triangleProperty.v3;\n\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 2 ] );\n\n\t\t\t\t//\n\n\t\t\t\tvar p1 = ( triangleProperty.p1 !== undefined ) ? triangleProperty.p1 : objectData.pindex;\n\t\t\t\tvar p2 = ( triangleProperty.p2 !== undefined ) ? triangleProperty.p2 : p1;\n\t\t\t\tvar p3 = ( triangleProperty.p3 !== undefined ) ? triangleProperty.p3 : p1;\n\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 2 ] );\n\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 2 ] );\n\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 2 ] );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colorData, 3 ) );\n\n\t\t\t// material\n\n\t\t\tvar material = new MeshPhongMaterial( { vertexColors: true, flatShading: true } );\n\n\t\t\t// mesh\n\n\t\t\tvar mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildDefaultMesh( meshData ) {\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( meshData[ 'triangles' ], 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( meshData[ 'vertices' ], 3 ) );\n\n\t\t\tvar material = new MeshPhongMaterial( { color: 0xaaaaff, flatShading: true } );\n\n\t\t\tvar mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildMeshes( resourceMap, modelData, meshData, textureData, objectData ) {\n\n\t\t\tvar keys = Object.keys( resourceMap );\n\t\t\tvar meshes = [];\n\n\t\t\tfor ( var i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\tvar resourceId = keys[ i ];\n\t\t\t\tvar triangleProperties = resourceMap[ resourceId ];\n\t\t\t\tvar resourceType = getResourceType( resourceId, modelData );\n\n\t\t\t\tswitch ( resourceType ) {\n\n\t\t\t\t\tcase 'material':\n\t\t\t\t\t\tvar basematerials = modelData.resources.basematerials[ resourceId ];\n\t\t\t\t\t\tvar newMeshes = buildBasematerialsMeshes( basematerials, triangleProperties, modelData, meshData, textureData, objectData );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = newMeshes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmeshes.push( newMeshes[ j ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tvar texture2dgroup = modelData.resources.texture2dgroup[ resourceId ];\n\t\t\t\t\t\tmeshes.push( buildTexturedMesh( texture2dgroup, triangleProperties, modelData, meshData, textureData, objectData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tvar colorgroup = modelData.resources.colorgroup[ resourceId ];\n\t\t\t\t\t\tmeshes.push( buildVertexColorMesh( colorgroup, triangleProperties, modelData, meshData, objectData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'default':\n\t\t\t\t\t\tmeshes.push( buildDefaultMesh( meshData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.3MFLoader: Unsupported resource type.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn meshes;\n\n\t\t}\n\n\t\tfunction getResourceType( pid, modelData ) {\n\n\t\t\tif ( modelData.resources.texture2dgroup[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'texture';\n\n\t\t\t} else if ( modelData.resources.basematerials[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'material';\n\n\t\t\t} else if ( modelData.resources.colorgroup[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'vertexColors';\n\n\t\t\t} else if ( pid === 'default' ) {\n\n\t\t\t\treturn 'default';\n\n\t\t\t} else {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction analyzeObject( modelData, meshData, objectData ) {\n\n\t\t\tvar resourceMap = {};\n\n\t\t\tvar triangleProperties = meshData[ 'triangleProperties' ];\n\n\t\t\tvar objectPid = objectData.pid;\n\n\t\t\tfor ( var i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tvar triangleProperty = triangleProperties[ i ];\n\t\t\t\tvar pid = ( triangleProperty.pid !== undefined ) ? triangleProperty.pid : objectPid;\n\n\t\t\t\tif ( pid === undefined ) pid = 'default';\n\n\t\t\t\tif ( resourceMap[ pid ] === undefined ) resourceMap[ pid ] = [];\n\n\t\t\t\tresourceMap[ pid ].push( triangleProperty );\n\n\t\t\t}\n\n\t\t\treturn resourceMap;\n\n\t\t}\n\n\t\tfunction buildGroup( meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tvar group = new Group();\n\n\t\t\tvar resourceMap = analyzeObject( modelData, meshData, objectData );\n\t\t\tvar meshes = buildMeshes( resourceMap, modelData, meshData, textureData, objectData );\n\n\t\t\tfor ( var i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction applyExtensions( extensions, meshData, modelXml ) {\n\n\t\t\tif ( ! extensions ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar availableExtensions = [];\n\t\t\tvar keys = Object.keys( extensions );\n\n\t\t\tfor ( var i = 0; i < keys.length; i ++ ) {\n\n\t\t\t\tvar ns = keys[ i ];\n\n\t\t\t\tfor ( var j = 0; j < scope.availableExtensions.length; j ++ ) {\n\n\t\t\t\t\tvar extension = scope.availableExtensions[ j ];\n\n\t\t\t\t\tif ( extension.ns === ns ) {\n\n\t\t\t\t\t\tavailableExtensions.push( extension );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < availableExtensions.length; i ++ ) {\n\n\t\t\t\tvar extension = availableExtensions[ i ];\n\t\t\t\textension.apply( modelXml, extensions[ extension[ 'ns' ] ], meshData );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getBuild( data, objects, modelData, textureData, objectData, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data, objects, modelData, textureData, objectData );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\tfunction buildBasematerial( materialData, objects, modelData ) {\n\n\t\t\tvar material;\n\n\t\t\tvar displaypropertiesid = materialData.displaypropertiesid;\n\t\t\tvar pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties;\n\n\t\t\tif ( displaypropertiesid !== null && pbmetallicdisplayproperties[ displaypropertiesid ] !== undefined ) {\n\n\t\t\t\t// metallic display property, use StandardMaterial\n\n\t\t\t\tvar pbmetallicdisplayproperty = pbmetallicdisplayproperties[ displaypropertiesid ];\n\t\t\t\tvar metallicData = pbmetallicdisplayproperty.data[ materialData.index ];\n\n\t\t\t\tmaterial = new MeshStandardMaterial( { flatShading: true, roughness: metallicData.roughness, metalness: metallicData.metallicness } );\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise use PhongMaterial\n\n\t\t\t\tmaterial = new MeshPhongMaterial( { flatShading: true } );\n\n\t\t\t}\n\n\t\t\tmaterial.name = materialData.name;\n\n\t\t\t// displaycolor MUST be specified with a value of a 6 or 8 digit hexadecimal number, e.g. \"#RRGGBB\" or \"#RRGGBBAA\"\n\n\t\t\tvar displaycolor = materialData.displaycolor;\n\n\t\t\tvar color = displaycolor.substring( 0, 7 );\n\t\t\tmaterial.color.setStyle( color );\n\t\t\tmaterial.color.convertSRGBToLinear(); // displaycolor is in sRGB\n\n\t\t\t// process alpha if set\n\n\t\t\tif ( displaycolor.length === 9 ) {\n\n\t\t\t\tmaterial.opacity = parseInt( displaycolor.charAt( 7 ) + displaycolor.charAt( 8 ), 16 ) / 255;\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction buildComposite( compositeData, objects, modelData, textureData ) {\n\n\t\t\tvar composite = new Group();\n\n\t\t\tfor ( var j = 0; j < compositeData.length; j ++ ) {\n\n\t\t\t\tvar component = compositeData[ j ];\n\t\t\t\tvar build = objects[ component.objectId ];\n\n\t\t\t\tif ( build === undefined ) {\n\n\t\t\t\t\tbuildObject( component.objectId, objects, modelData, textureData );\n\t\t\t\t\tbuild = objects[ component.objectId ];\n\n\t\t\t\t}\n\n\t\t\t\tvar object3D = build.clone();\n\n\t\t\t\t// apply component transform\n\n\t\t\t\tvar transform = component.transform;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tobject3D.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t\tcomposite.add( object3D );\n\n\t\t\t}\n\n\t\t\treturn composite;\n\n\t\t}\n\n\t\tfunction buildObject( objectId, objects, modelData, textureData ) {\n\n\t\t\tvar objectData = modelData[ 'resources' ][ 'object' ][ objectId ];\n\n\t\t\tif ( objectData[ 'mesh' ] ) {\n\n\t\t\t\tvar meshData = objectData[ 'mesh' ];\n\n\t\t\t\tvar extensions = modelData[ 'extensions' ];\n\t\t\t\tvar modelXml = modelData[ 'xml' ];\n\n\t\t\t\tapplyExtensions( extensions, meshData, modelXml );\n\n\t\t\t\tobjects[ objectData.id ] = getBuild( meshData, objects, modelData, textureData, objectData, buildGroup );\n\n\t\t\t} else {\n\n\t\t\t\tvar compositeData = objectData[ 'components' ];\n\n\t\t\t\tobjects[ objectData.id ] = getBuild( compositeData, objects, modelData, textureData, objectData, buildComposite );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildObjects( data3mf ) {\n\n\t\t\tvar modelsData = data3mf.model;\n\t\t\tvar modelRels = data3mf.modelRels;\n\t\t\tvar objects = {};\n\t\t\tvar modelsKeys = Object.keys( modelsData );\n\t\t\tvar textureData = {};\n\n\t\t\t// evaluate model relationships to textures\n\n\t\t\tif ( modelRels ) {\n\n\t\t\t\tfor ( var i = 0, l = modelRels.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar modelRel = modelRels[ i ];\n\t\t\t\t\tvar textureKey = modelRel.target.substring( 1 );\n\n\t\t\t\t\tif ( data3mf.texture[ textureKey ] ) {\n\n\t\t\t\t\t\ttextureData[ modelRel.target ] = data3mf.texture[ textureKey ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// start build\n\n\t\t\tfor ( var i = 0; i < modelsKeys.length; i ++ ) {\n\n\t\t\t\tvar modelsKey = modelsKeys[ i ];\n\t\t\t\tvar modelData = modelsData[ modelsKey ];\n\n\t\t\t\tvar objectIds = Object.keys( modelData[ 'resources' ][ 'object' ] );\n\n\t\t\t\tfor ( var j = 0; j < objectIds.length; j ++ ) {\n\n\t\t\t\t\tvar objectId = objectIds[ j ];\n\n\t\t\t\t\tbuildObject( objectId, objects, modelData, textureData );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction fetch3DModelPart( rels ) {\n\n\t\t\tfor ( var i = 0; i < rels.length; i ++ ) {\n\n\t\t\t\tvar rel = rels[ i ];\n\t\t\t\tvar extension = rel.target.split( '.' ).pop();\n\n\t\t\t\tif ( extension.toLowerCase() === 'model' ) return rel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction build( objects, data3mf ) {\n\n\t\t\tvar group = new Group();\n\n\t\t\tvar relationship = fetch3DModelPart( data3mf[ 'rels' ] );\n\t\t\tvar buildData = data3mf.model[ relationship[ 'target' ].substring( 1 ) ][ 'build' ];\n\n\t\t\tfor ( var i = 0; i < buildData.length; i ++ ) {\n\n\t\t\t\tvar buildItem = buildData[ i ];\n\t\t\t\tvar object3D = objects[ buildItem[ 'objectId' ] ];\n\n\t\t\t\t// apply transform\n\n\t\t\t\tvar transform = buildItem[ 'transform' ];\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tobject3D.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t\tgroup.add( object3D );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tvar data3mf = loadDocument( data );\n\t\tvar objects = buildObjects( data3mf );\n\n\t\treturn build( objects, data3mf );\n\n\t},\n\n\taddExtension: function ( extension ) {\n\n\t\tthis.availableExtensions.push( extension );\n\n\t}\n\n} );\n\nexport { ThreeMFLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/AMFLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLoader,\n\tLoaderUtils,\n\tMesh,\n\tMeshPhongMaterial\n} from '../../../build/three.module.js';\nimport { JSZip } from '../libs/jszip.module.min.js';\n\n/**\n * Description: Early release of an AMF Loader following the pattern of the\n * example loaders in the three.js project.\n *\n * More information about the AMF format: http://amf.wikispaces.com\n *\n * Usage:\n *\tvar loader = new AMFLoader();\n *\tloader.load('/path/to/project.amf', function(objecttree) {\n *\t\tscene.add(objecttree);\n *\t});\n *\n * Materials now supported, material colors supported\n * Zip support, requires jszip\n * No constellation support (yet)!\n *\n */\n\nvar AMFLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nAMFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AMFLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\tfunction loadDocument( data ) {\n\n\t\t\tvar view = new DataView( data );\n\t\t\tvar magic = String.fromCharCode( view.getUint8( 0 ), view.getUint8( 1 ) );\n\n\t\t\tif ( magic === 'PK' ) {\n\n\t\t\t\tvar zip = null;\n\t\t\t\tvar file = null;\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Loading Zip' );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tzip = new JSZip( data ); // eslint-disable-line no-undef\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( e instanceof ReferenceError ) {\n\n\t\t\t\t\t\tconsole.log( 'THREE.AMFLoader: jszip missing and file is compressed.' );\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( file in zip.files ) {\n\n\t\t\t\t\tif ( file.toLowerCase().substr( - 4 ) === '.amf' ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Trying to load file asset: ' + file );\n\t\t\t\tview = new DataView( zip.file( file ).asArrayBuffer() );\n\n\t\t\t}\n\n\t\t\tvar fileText = LoaderUtils.decodeText( view );\n\t\t\tvar xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );\n\n\t\t\tif ( xmlData.documentElement.nodeName.toLowerCase() !== 'amf' ) {\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Error loading AMF - no AMF document found.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn xmlData;\n\n\t\t}\n\n\t\tfunction loadDocumentScale( node ) {\n\n\t\t\tvar scale = 1.0;\n\t\t\tvar unit = 'millimeter';\n\n\t\t\tif ( node.documentElement.attributes.unit !== undefined ) {\n\n\t\t\t\tunit = node.documentElement.attributes.unit.value.toLowerCase();\n\n\t\t\t}\n\n\t\t\tvar scaleUnits = {\n\t\t\t\tmillimeter: 1.0,\n\t\t\t\tinch: 25.4,\n\t\t\t\tfeet: 304.8,\n\t\t\t\tmeter: 1000.0,\n\t\t\t\tmicron: 0.001\n\t\t\t};\n\n\t\t\tif ( scaleUnits[ unit ] !== undefined ) {\n\n\t\t\t\tscale = scaleUnits[ unit ];\n\n\t\t\t}\n\n\t\t\tconsole.log( 'THREE.AMFLoader: Unit scale: ' + scale );\n\t\t\treturn scale;\n\n\t\t}\n\n\t\tfunction loadMaterials( node ) {\n\n\t\t\tvar matName = 'AMF Material';\n\t\t\tvar matId = node.attributes.id.textContent;\n\t\t\tvar color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\n\n\t\t\tvar loadedMaterial = null;\n\n\t\t\tfor ( var i = 0; i < node.childNodes.length; i ++ ) {\n\n\t\t\t\tvar matChildEl = node.childNodes[ i ];\n\n\t\t\t\tif ( matChildEl.nodeName === 'metadata' && matChildEl.attributes.type !== undefined ) {\n\n\t\t\t\t\tif ( matChildEl.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\tmatName = matChildEl.textContent;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( matChildEl.nodeName === 'color' ) {\n\n\t\t\t\t\tcolor = loadColor( matChildEl );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tloadedMaterial = new MeshPhongMaterial( {\n\t\t\t\tflatShading: true,\n\t\t\t\tcolor: new Color( color.r, color.g, color.b ),\n\t\t\t\tname: matName\n\t\t\t} );\n\n\t\t\tif ( color.a !== 1.0 ) {\n\n\t\t\t\tloadedMaterial.transparent = true;\n\t\t\t\tloadedMaterial.opacity = color.a;\n\n\t\t\t}\n\n\t\t\treturn { id: matId, material: loadedMaterial };\n\n\t\t}\n\n\t\tfunction loadColor( node ) {\n\n\t\t\tvar color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\n\n\t\t\tfor ( var i = 0; i < node.childNodes.length; i ++ ) {\n\n\t\t\t\tvar matColor = node.childNodes[ i ];\n\n\t\t\t\tif ( matColor.nodeName === 'r' ) {\n\n\t\t\t\t\tcolor.r = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'g' ) {\n\n\t\t\t\t\tcolor.g = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'b' ) {\n\n\t\t\t\t\tcolor.b = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'a' ) {\n\n\t\t\t\t\tcolor.a = matColor.textContent;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tfunction loadMeshVolume( node ) {\n\n\t\t\tvar volume = { name: '', triangles: [], materialid: null };\n\n\t\t\tvar currVolumeNode = node.firstElementChild;\n\n\t\t\tif ( node.attributes.materialid !== undefined ) {\n\n\t\t\t\tvolume.materialId = node.attributes.materialid.nodeValue;\n\n\t\t\t}\n\n\t\t\twhile ( currVolumeNode ) {\n\n\t\t\t\tif ( currVolumeNode.nodeName === 'metadata' ) {\n\n\t\t\t\t\tif ( currVolumeNode.attributes.type !== undefined ) {\n\n\t\t\t\t\t\tif ( currVolumeNode.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\t\tvolume.name = currVolumeNode.textContent;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( currVolumeNode.nodeName === 'triangle' ) {\n\n\t\t\t\t\tvar v1 = currVolumeNode.getElementsByTagName( 'v1' )[ 0 ].textContent;\n\t\t\t\t\tvar v2 = currVolumeNode.getElementsByTagName( 'v2' )[ 0 ].textContent;\n\t\t\t\t\tvar v3 = currVolumeNode.getElementsByTagName( 'v3' )[ 0 ].textContent;\n\n\t\t\t\t\tvolume.triangles.push( v1, v2, v3 );\n\n\t\t\t\t}\n\n\t\t\t\tcurrVolumeNode = currVolumeNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn volume;\n\n\t\t}\n\n\t\tfunction loadMeshVertices( node ) {\n\n\t\t\tvar vertArray = [];\n\t\t\tvar normalArray = [];\n\t\t\tvar currVerticesNode = node.firstElementChild;\n\n\t\t\twhile ( currVerticesNode ) {\n\n\t\t\t\tif ( currVerticesNode.nodeName === 'vertex' ) {\n\n\t\t\t\t\tvar vNode = currVerticesNode.firstElementChild;\n\n\t\t\t\t\twhile ( vNode ) {\n\n\t\t\t\t\t\tif ( vNode.nodeName === 'coordinates' ) {\n\n\t\t\t\t\t\t\tvar x = vNode.getElementsByTagName( 'x' )[ 0 ].textContent;\n\t\t\t\t\t\t\tvar y = vNode.getElementsByTagName( 'y' )[ 0 ].textContent;\n\t\t\t\t\t\t\tvar z = vNode.getElementsByTagName( 'z' )[ 0 ].textContent;\n\n\t\t\t\t\t\t\tvertArray.push( x, y, z );\n\n\t\t\t\t\t\t} else if ( vNode.nodeName === 'normal' ) {\n\n\t\t\t\t\t\t\tvar nx = vNode.getElementsByTagName( 'nx' )[ 0 ].textContent;\n\t\t\t\t\t\t\tvar ny = vNode.getElementsByTagName( 'ny' )[ 0 ].textContent;\n\t\t\t\t\t\t\tvar nz = vNode.getElementsByTagName( 'nz' )[ 0 ].textContent;\n\n\t\t\t\t\t\t\tnormalArray.push( nx, ny, nz );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvNode = vNode.nextElementSibling;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrVerticesNode = currVerticesNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn { 'vertices': vertArray, 'normals': normalArray };\n\n\t\t}\n\n\t\tfunction loadObject( node ) {\n\n\t\t\tvar objId = node.attributes.id.textContent;\n\t\t\tvar loadedObject = { name: 'amfobject', meshes: [] };\n\t\t\tvar currColor = null;\n\t\t\tvar currObjNode = node.firstElementChild;\n\n\t\t\twhile ( currObjNode ) {\n\n\t\t\t\tif ( currObjNode.nodeName === 'metadata' ) {\n\n\t\t\t\t\tif ( currObjNode.attributes.type !== undefined ) {\n\n\t\t\t\t\t\tif ( currObjNode.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\t\tloadedObject.name = currObjNode.textContent;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( currObjNode.nodeName === 'color' ) {\n\n\t\t\t\t\tcurrColor = loadColor( currObjNode );\n\n\t\t\t\t} else if ( currObjNode.nodeName === 'mesh' ) {\n\n\t\t\t\t\tvar currMeshNode = currObjNode.firstElementChild;\n\t\t\t\t\tvar mesh = { vertices: [], normals: [], volumes: [], color: currColor };\n\n\t\t\t\t\twhile ( currMeshNode ) {\n\n\t\t\t\t\t\tif ( currMeshNode.nodeName === 'vertices' ) {\n\n\t\t\t\t\t\t\tvar loadedVertices = loadMeshVertices( currMeshNode );\n\n\t\t\t\t\t\t\tmesh.normals = mesh.normals.concat( loadedVertices.normals );\n\t\t\t\t\t\t\tmesh.vertices = mesh.vertices.concat( loadedVertices.vertices );\n\n\t\t\t\t\t\t} else if ( currMeshNode.nodeName === 'volume' ) {\n\n\t\t\t\t\t\t\tmesh.volumes.push( loadMeshVolume( currMeshNode ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrMeshNode = currMeshNode.nextElementSibling;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tloadedObject.meshes.push( mesh );\n\n\t\t\t\t}\n\n\t\t\t\tcurrObjNode = currObjNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn { 'id': objId, 'obj': loadedObject };\n\n\t\t}\n\n\t\tvar xmlData = loadDocument( data );\n\t\tvar amfName = '';\n\t\tvar amfAuthor = '';\n\t\tvar amfScale = loadDocumentScale( xmlData );\n\t\tvar amfMaterials = {};\n\t\tvar amfObjects = {};\n\t\tvar childNodes = xmlData.documentElement.childNodes;\n\n\t\tvar i, j;\n\n\t\tfor ( i = 0; i < childNodes.length; i ++ ) {\n\n\t\t\tvar child = childNodes[ i ];\n\n\t\t\tif ( child.nodeName === 'metadata' ) {\n\n\t\t\t\tif ( child.attributes.type !== undefined ) {\n\n\t\t\t\t\tif ( child.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\tamfName = child.textContent;\n\n\t\t\t\t\t} else if ( child.attributes.type.value === 'author' ) {\n\n\t\t\t\t\t\tamfAuthor = child.textContent;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( child.nodeName === 'material' ) {\n\n\t\t\t\tvar loadedMaterial = loadMaterials( child );\n\n\t\t\t\tamfMaterials[ loadedMaterial.id ] = loadedMaterial.material;\n\n\t\t\t} else if ( child.nodeName === 'object' ) {\n\n\t\t\t\tvar loadedObject = loadObject( child );\n\n\t\t\t\tamfObjects[ loadedObject.id ] = loadedObject.obj;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar sceneObject = new Group();\n\t\tvar defaultMaterial = new MeshPhongMaterial( { color: 0xaaaaff, flatShading: true } );\n\n\t\tsceneObject.name = amfName;\n\t\tsceneObject.userData.author = amfAuthor;\n\t\tsceneObject.userData.loader = 'AMF';\n\n\t\tfor ( var id in amfObjects ) {\n\n\t\t\tvar part = amfObjects[ id ];\n\t\t\tvar meshes = part.meshes;\n\t\t\tvar newObject = new Group();\n\t\t\tnewObject.name = part.name || '';\n\n\t\t\tfor ( i = 0; i < meshes.length; i ++ ) {\n\n\t\t\t\tvar objDefaultMaterial = defaultMaterial;\n\t\t\t\tvar mesh = meshes[ i ];\n\t\t\t\tvar vertices = new Float32BufferAttribute( mesh.vertices, 3 );\n\t\t\t\tvar normals = null;\n\n\t\t\t\tif ( mesh.normals.length ) {\n\n\t\t\t\t\tnormals = new Float32BufferAttribute( mesh.normals, 3 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( mesh.color ) {\n\n\t\t\t\t\tvar color = mesh.color;\n\n\t\t\t\t\tobjDefaultMaterial = defaultMaterial.clone();\n\t\t\t\t\tobjDefaultMaterial.color = new Color( color.r, color.g, color.b );\n\n\t\t\t\t\tif ( color.a !== 1.0 ) {\n\n\t\t\t\t\t\tobjDefaultMaterial.transparent = true;\n\t\t\t\t\t\tobjDefaultMaterial.opacity = color.a;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar volumes = mesh.volumes;\n\n\t\t\t\tfor ( j = 0; j < volumes.length; j ++ ) {\n\n\t\t\t\t\tvar volume = volumes[ j ];\n\t\t\t\t\tvar newGeometry = new BufferGeometry();\n\t\t\t\t\tvar material = objDefaultMaterial;\n\n\t\t\t\t\tnewGeometry.setIndex( volume.triangles );\n\t\t\t\t\tnewGeometry.setAttribute( 'position', vertices.clone() );\n\n\t\t\t\t\tif ( normals ) {\n\n\t\t\t\t\t\tnewGeometry.setAttribute( 'normal', normals.clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( amfMaterials[ volume.materialId ] !== undefined ) {\n\n\t\t\t\t\t\tmaterial = amfMaterials[ volume.materialId ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnewGeometry.scale( amfScale, amfScale, amfScale );\n\t\t\t\t\tnewObject.add( new Mesh( newGeometry, material.clone() ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tsceneObject.add( newObject );\n\n\t\t}\n\n\t\treturn sceneObject;\n\n\t}\n\n} );\n\nexport { AMFLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/AssimpLoader.js",
    "content": "import {\n\tBone,\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tLoader,\n\tLoaderUtils,\n\tMatrix4,\n\tMesh,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tObject3D,\n\tQuaternion,\n\tSkeleton,\n\tSkinnedMesh,\n\tTextureLoader,\n\tVector3\n} from '../../../build/three.module.js';\n\nvar AssimpLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nAssimpLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: AssimpLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( buffer, path ) {\n\n\t\tvar textureLoader = new TextureLoader( this.manager );\n\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\tvar Virtulous = {};\n\n\t\tVirtulous.KeyFrame = function ( time, matrix ) {\n\n\t\t\tthis.time = time;\n\t\t\tthis.matrix = matrix.clone();\n\t\t\tthis.position = new Vector3();\n\t\t\tthis.quaternion = new Quaternion();\n\t\t\tthis.scale = new Vector3( 1, 1, 1 );\n\t\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\t\t\tthis.clone = function () {\n\n\t\t\t\tvar n = new Virtulous.KeyFrame( this.time, this.matrix );\n\t\t\t\treturn n;\n\n\t\t\t};\n\n\t\t\tthis.lerp = function ( nextKey, time ) {\n\n\t\t\t\ttime -= this.time;\n\t\t\t\tvar dist = ( nextKey.time - this.time );\n\t\t\t\tvar l = time / dist;\n\t\t\t\tvar l2 = 1 - l;\n\t\t\t\tvar keypos = this.position;\n\t\t\t\tvar keyrot = this.quaternion;\n\t\t\t\t//      var keyscl =  key.parentspaceScl || key.scl;\n\t\t\t\tvar key2pos = nextKey.position;\n\t\t\t\tvar key2rot = nextKey.quaternion;\n\t\t\t\t//  var key2scl =  key2.parentspaceScl || key2.scl;\n\t\t\t\tVirtulous.KeyFrame.tempAniPos.x = keypos.x * l2 + key2pos.x * l;\n\t\t\t\tVirtulous.KeyFrame.tempAniPos.y = keypos.y * l2 + key2pos.y * l;\n\t\t\t\tVirtulous.KeyFrame.tempAniPos.z = keypos.z * l2 + key2pos.z * l;\n\t\t\t\t//     tempAniScale.x = keyscl[0] * l2 + key2scl[0] * l;\n\t\t\t\t//     tempAniScale.y = keyscl[1] * l2 + key2scl[1] * l;\n\t\t\t\t//     tempAniScale.z = keyscl[2] * l2 + key2scl[2] * l;\n\t\t\t\tVirtulous.KeyFrame.tempAniQuat.set( keyrot.x, keyrot.y, keyrot.z, keyrot.w );\n\t\t\t\tVirtulous.KeyFrame.tempAniQuat.slerp( key2rot, l );\n\t\t\t\treturn Virtulous.KeyFrame.tempAniMatrix.compose( Virtulous.KeyFrame.tempAniPos, Virtulous.KeyFrame.tempAniQuat, Virtulous.KeyFrame.tempAniScale );\n\n\t\t\t};\n\n\t\t};\n\n\t\tVirtulous.KeyFrame.tempAniPos = new Vector3();\n\t\tVirtulous.KeyFrame.tempAniQuat = new Quaternion();\n\t\tVirtulous.KeyFrame.tempAniScale = new Vector3( 1, 1, 1 );\n\t\tVirtulous.KeyFrame.tempAniMatrix = new Matrix4();\n\t\tVirtulous.KeyFrameTrack = function () {\n\n\t\t\tthis.keys = [];\n\t\t\tthis.target = null;\n\t\t\tthis.time = 0;\n\t\t\tthis.length = 0;\n\t\t\tthis._accelTable = {};\n\t\t\tthis.fps = 20;\n\t\t\tthis.addKey = function ( key ) {\n\n\t\t\t\tthis.keys.push( key );\n\n\t\t\t};\n\n\t\t\tthis.init = function () {\n\n\t\t\t\tthis.sortKeys();\n\n\t\t\t\tif ( this.keys.length > 0 )\n\t\t\t\t\tthis.length = this.keys[ this.keys.length - 1 ].time;\n\t\t\t\telse\n\t\t\t\t\tthis.length = 0;\n\n\t\t\t\tif ( ! this.fps ) return;\n\n\t\t\t\tfor ( var j = 0; j < this.length * this.fps; j ++ ) {\n\n\t\t\t\t\tfor ( var i = 0; i < this.keys.length; i ++ ) {\n\n\t\t\t\t\t\tif ( this.keys[ i ].time == j ) {\n\n\t\t\t\t\t\t\tthis._accelTable[ j ] = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( this.keys[ i ].time < j / this.fps && this.keys[ i + 1 ] && this.keys[ i + 1 ].time >= j / this.fps ) {\n\n\t\t\t\t\t\t\tthis._accelTable[ j ] = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tthis.parseFromThree = function ( data ) {\n\n\t\t\t\tvar fps = data.fps;\n\t\t\t\tthis.target = data.node;\n\t\t\t\tvar track = data.hierarchy[ 0 ].keys;\n\t\t\t\tfor ( var i = 0; i < track.length; i ++ ) {\n\n\t\t\t\t\tthis.addKey( new Virtulous.KeyFrame( i / fps || track[ i ].time, track[ i ].targets[ 0 ].data ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.init();\n\n\t\t\t};\n\n\t\t\tthis.parseFromCollada = function ( data ) {\n\n\t\t\t\tvar track = data.keys;\n\t\t\t\tvar fps = this.fps;\n\n\t\t\t\tfor ( var i = 0; i < track.length; i ++ ) {\n\n\t\t\t\t\tthis.addKey( new Virtulous.KeyFrame( i / fps || track[ i ].time, track[ i ].matrix ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.init();\n\n\t\t\t};\n\n\t\t\tthis.sortKeys = function () {\n\n\t\t\t\tthis.keys.sort( this.keySortFunc );\n\n\t\t\t};\n\n\t\t\tthis.keySortFunc = function ( a, b ) {\n\n\t\t\t\treturn a.time - b.time;\n\n\t\t\t};\n\n\t\t\tthis.clone = function () {\n\n\t\t\t\tvar t = new Virtulous.KeyFrameTrack();\n\t\t\t\tt.target = this.target;\n\t\t\t\tt.time = this.time;\n\t\t\t\tt.length = this.length;\n\n\t\t\t\tfor ( var i = 0; i < this.keys.length; i ++ ) {\n\n\t\t\t\t\tt.addKey( this.keys[ i ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tt.init();\n\t\t\t\treturn t;\n\n\t\t\t};\n\n\t\t\tthis.reTarget = function ( root, compareitor ) {\n\n\t\t\t\tif ( ! compareitor ) compareitor = Virtulous.TrackTargetNodeNameCompare;\n\t\t\t\tthis.target = compareitor( root, this.target );\n\n\t\t\t};\n\n\t\t\tthis.keySearchAccel = function ( time ) {\n\n\t\t\t\ttime *= this.fps;\n\t\t\t\ttime = Math.floor( time );\n\t\t\t\treturn this._accelTable[ time ] || 0;\n\n\t\t\t};\n\n\t\t\tthis.setTime = function ( time ) {\n\n\t\t\t\ttime = Math.abs( time );\n\t\t\t\tif ( this.length )\n\t\t\t\t\ttime = time % this.length + .05;\n\t\t\t\tvar key0 = null;\n\t\t\t\tvar key1 = null;\n\n\t\t\t\tfor ( var i = this.keySearchAccel( time ); i < this.keys.length; i ++ ) {\n\n\t\t\t\t\tif ( this.keys[ i ].time == time ) {\n\n\t\t\t\t\t\tkey0 = this.keys[ i ];\n\t\t\t\t\t\tkey1 = this.keys[ i ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t} else if ( this.keys[ i ].time < time && this.keys[ i + 1 ] && this.keys[ i + 1 ].time > time ) {\n\n\t\t\t\t\t\tkey0 = this.keys[ i ];\n\t\t\t\t\t\tkey1 = this.keys[ i + 1 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t} else if ( this.keys[ i ].time < time && i == this.keys.length - 1 ) {\n\n\t\t\t\t\t\tkey0 = this.keys[ i ];\n\t\t\t\t\t\tkey1 = this.keys[ 0 ].clone();\n\t\t\t\t\t\tkey1.time += this.length + .05;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( key0 && key1 && key0 !== key1 ) {\n\n\t\t\t\t\tthis.target.matrixAutoUpdate = false;\n\t\t\t\t\tthis.target.matrix.copy( key0.lerp( key1, time ) );\n\t\t\t\t\tthis.target.matrixWorldNeedsUpdate = true;\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( key0 && key1 && key0 == key1 ) {\n\n\t\t\t\t\tthis.target.matrixAutoUpdate = false;\n\t\t\t\t\tthis.target.matrix.copy( key0.matrix );\n\t\t\t\t\tthis.target.matrixWorldNeedsUpdate = true;\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t};\n\n\t\tVirtulous.TrackTargetNodeNameCompare = function ( root, target ) {\n\n\t\t\tfunction find( node, name ) {\n\n\t\t\t\tif ( node.name == name )\n\t\t\t\t\treturn node;\n\n\t\t\t\tfor ( var i = 0; i < node.children.length; i ++ ) {\n\n\t\t\t\t\tvar r = find( node.children[ i ], name );\n\t\t\t\t\tif ( r ) return r;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn find( root, target.name );\n\n\t\t};\n\n\t\tVirtulous.Animation = function () {\n\n\t\t\tthis.tracks = [];\n\t\t\tthis.length = 0;\n\n\t\t\tthis.addTrack = function ( track ) {\n\n\t\t\t\tthis.tracks.push( track );\n\t\t\t\tthis.length = Math.max( track.length, this.length );\n\n\t\t\t};\n\n\t\t\tthis.setTime = function ( time ) {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tfor ( var i = 0; i < this.tracks.length; i ++ )\n\t\t\t\t\tthis.tracks[ i ].setTime( time );\n\n\t\t\t};\n\n\t\t\tthis.clone = function ( target, compareitor ) {\n\n\t\t\t\tif ( ! compareitor ) compareitor = Virtulous.TrackTargetNodeNameCompare;\n\t\t\t\tvar n = new Virtulous.Animation();\n\t\t\t\tn.target = target;\n\t\t\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\t\tvar track = this.tracks[ i ].clone();\n\t\t\t\t\ttrack.reTarget( target, compareitor );\n\t\t\t\t\tn.addTrack( track );\n\n\t\t\t\t}\n\n\t\t\t\treturn n;\n\n\t\t\t};\n\n\t\t};\n\n\t\tvar ASSBIN_CHUNK_AICAMERA = 0x1234;\n\t\tvar ASSBIN_CHUNK_AILIGHT = 0x1235;\n\t\tvar ASSBIN_CHUNK_AITEXTURE = 0x1236;\n\t\tvar ASSBIN_CHUNK_AIMESH = 0x1237;\n\t\tvar ASSBIN_CHUNK_AINODEANIM = 0x1238;\n\t\tvar ASSBIN_CHUNK_AISCENE = 0x1239;\n\t\tvar ASSBIN_CHUNK_AIBONE = 0x123a;\n\t\tvar ASSBIN_CHUNK_AIANIMATION = 0x123b;\n\t\tvar ASSBIN_CHUNK_AINODE = 0x123c;\n\t\tvar ASSBIN_CHUNK_AIMATERIAL = 0x123d;\n\t\tvar ASSBIN_CHUNK_AIMATERIALPROPERTY = 0x123e;\n\t\tvar ASSBIN_MESH_HAS_POSITIONS = 0x1;\n\t\tvar ASSBIN_MESH_HAS_NORMALS = 0x2;\n\t\tvar ASSBIN_MESH_HAS_TANGENTS_AND_BITANGENTS = 0x4;\n\t\tvar ASSBIN_MESH_HAS_TEXCOORD_BASE = 0x100;\n\t\tvar ASSBIN_MESH_HAS_COLOR_BASE = 0x10000;\n\t\tvar AI_MAX_NUMBER_OF_COLOR_SETS = 1;\n\t\tvar AI_MAX_NUMBER_OF_TEXTURECOORDS = 4;\n\t\t//var aiLightSource_UNDEFINED = 0x0;\n\t\t//! A directional light source has a well-defined direction\n\t\t//! but is infinitely far away. That's quite a good\n\t\t//! approximation for sun light.\n\t\tvar aiLightSource_DIRECTIONAL = 0x1;\n\t\t//! A point light source has a well-defined position\n\t\t//! in space but no direction - it emits light in all\n\t\t//! directions. A normal bulb is a point light.\n\t\t//var aiLightSource_POINT = 0x2;\n\t\t//! A spot light source emits light in a specific\n\t\t//! angle. It has a position and a direction it is pointing to.\n\t\t//! A good example for a spot light is a light spot in\n\t\t//! sport arenas.\n\t\tvar aiLightSource_SPOT = 0x3;\n\t\t//! The generic light level of the world, including the bounces\n\t\t//! of all other lightsources.\n\t\t//! Typically, there's at most one ambient light in a scene.\n\t\t//! This light type doesn't have a valid position, direction, or\n\t\t//! other properties, just a color.\n\t\t//var aiLightSource_AMBIENT = 0x4;\n\t\t/** Flat shading. Shading is done on per-face base,\n\t\t *  diffuse only. Also known as 'faceted shading'.\n\t\t */\n\t\t//var aiShadingMode_Flat = 0x1;\n\t\t/** Simple Gouraud shading.\n\t\t */\n\t\t//var aiShadingMode_Gouraud = 0x2;\n\t\t/** Phong-Shading -\n\t\t */\n\t\t//var aiShadingMode_Phong = 0x3;\n\t\t/** Phong-Blinn-Shading\n\t\t */\n\t\t//var aiShadingMode_Blinn = 0x4;\n\t\t/** Toon-Shading per pixel\n\t\t *\n\t\t *  Also known as 'comic' shader.\n\t\t */\n\t\t//var aiShadingMode_Toon = 0x5;\n\t\t/** OrenNayar-Shading per pixel\n\t\t *\n\t\t *  Extension to standard Lambertian shading, taking the\n\t\t *  roughness of the material into account\n\t\t */\n\t\t//var aiShadingMode_OrenNayar = 0x6;\n\t\t/** Minnaert-Shading per pixel\n\t\t *\n\t\t *  Extension to standard Lambertian shading, taking the\n\t\t *  \"darkness\" of the material into account\n\t\t */\n\t\t//var aiShadingMode_Minnaert = 0x7;\n\t\t/** CookTorrance-Shading per pixel\n\t\t *\n\t\t *  Special shader for metallic surfaces.\n\t\t */\n\t\t//var aiShadingMode_CookTorrance = 0x8;\n\t\t/** No shading at all. Constant light influence of 1.0.\n\t\t */\n\t\t//var aiShadingMode_NoShading = 0x9;\n\t\t/** Fresnel shading\n\t\t */\n\t\t//var aiShadingMode_Fresnel = 0xa;\n\t\t//var aiTextureType_NONE = 0x0;\n\t\t/** The texture is combined with the result of the diffuse\n\t\t *  lighting equation.\n\t\t */\n\t\tvar aiTextureType_DIFFUSE = 0x1;\n\t\t/** The texture is combined with the result of the specular\n\t\t *  lighting equation.\n\t\t */\n\t\t//var aiTextureType_SPECULAR = 0x2;\n\t\t/** The texture is combined with the result of the ambient\n\t\t *  lighting equation.\n\t\t */\n\t\t//var aiTextureType_AMBIENT = 0x3;\n\t\t/** The texture is added to the result of the lighting\n\t\t *  calculation. It isn't influenced by incoming light.\n\t\t */\n\t\t//var aiTextureType_EMISSIVE = 0x4;\n\t\t/** The texture is a height map.\n\t\t *\n\t\t *  By convention, higher gray-scale values stand for\n\t\t *  higher elevations from the base height.\n\t\t */\n\t\t//var aiTextureType_HEIGHT = 0x5;\n\t\t/** The texture is a (tangent space) normal-map.\n\t\t *\n\t\t *  Again, there are several conventions for tangent-space\n\t\t *  normal maps. Assimp does (intentionally) not\n\t\t *  distinguish here.\n\t\t */\n\t\tvar aiTextureType_NORMALS = 0x6;\n\t\t/** The texture defines the glossiness of the material.\n\t\t *\n\t\t *  The glossiness is in fact the exponent of the specular\n\t\t *  (phong) lighting equation. Usually there is a conversion\n\t\t *  function defined to map the linear color values in the\n\t\t *  texture to a suitable exponent. Have fun.\n\t\t */\n\t\t//var aiTextureType_SHININESS = 0x7;\n\t\t/** The texture defines per-pixel opacity.\n\t\t *\n\t\t *  Usually 'white' means opaque and 'black' means\n\t\t *  'transparency'. Or quite the opposite. Have fun.\n\t\t */\n\t\tvar aiTextureType_OPACITY = 0x8;\n\t\t/** Displacement texture\n\t\t *\n\t\t *  The exact purpose and format is application-dependent.\n\t\t *  Higher color values stand for higher vertex displacements.\n\t\t */\n\t\t//var aiTextureType_DISPLACEMENT = 0x9;\n\t\t/** Lightmap texture (aka Ambient Occlusion)\n\t\t *\n\t\t *  Both 'Lightmaps' and dedicated 'ambient occlusion maps' are\n\t\t *  covered by this material property. The texture contains a\n\t\t *  scaling value for the final color value of a pixel. Its\n\t\t *  intensity is not affected by incoming light.\n\t\t */\n\t\tvar aiTextureType_LIGHTMAP = 0xA;\n\t\t/** Reflection texture\n\t\t *\n\t\t * Contains the color of a perfect mirror reflection.\n\t\t * Rarely used, almost never for real-time applications.\n\t\t */\n\t\t//var aiTextureType_REFLECTION = 0xB;\n\t\t/** Unknown texture\n\t\t *\n\t\t *  A texture reference that does not match any of the definitions\n\t\t *  above is considered to be 'unknown'. It is still imported,\n\t\t *  but is excluded from any further postprocessing.\n\t\t */\n\t\t//var aiTextureType_UNKNOWN = 0xC;\n\t\tvar BONESPERVERT = 4;\n\n\t\tfunction ASSBIN_MESH_HAS_TEXCOORD( n ) {\n\n\t\t\treturn ASSBIN_MESH_HAS_TEXCOORD_BASE << n;\n\n\t\t}\n\n\t\tfunction ASSBIN_MESH_HAS_COLOR( n ) {\n\n\t\t\treturn ASSBIN_MESH_HAS_COLOR_BASE << n;\n\n\t\t}\n\n\t\tfunction markBones( scene ) {\n\n\t\t\tfor ( var i in scene.mMeshes ) {\n\n\t\t\t\tvar mesh = scene.mMeshes[ i ];\n\t\t\t\tfor ( var k in mesh.mBones ) {\n\n\t\t\t\t\tvar boneNode = scene.findNode( mesh.mBones[ k ].mName );\n\t\t\t\t\tif ( boneNode )\n\t\t\t\t\t\tboneNode.isBone = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction cloneTreeToBones( root, scene ) {\n\n\t\t\tvar rootBone = new Bone();\n\t\t\trootBone.matrix.copy( root.matrix );\n\t\t\trootBone.matrixWorld.copy( root.matrixWorld );\n\t\t\trootBone.position.copy( root.position );\n\t\t\trootBone.quaternion.copy( root.quaternion );\n\t\t\trootBone.scale.copy( root.scale );\n\t\t\tscene.nodeCount ++;\n\t\t\trootBone.name = 'bone_' + root.name + scene.nodeCount.toString();\n\n\t\t\tif ( ! scene.nodeToBoneMap[ root.name ] )\n\t\t\t\tscene.nodeToBoneMap[ root.name ] = [];\n\t\t\tscene.nodeToBoneMap[ root.name ].push( rootBone );\n\t\t\tfor ( var i in root.children ) {\n\n\t\t\t\tvar child = cloneTreeToBones( root.children[ i ], scene );\n\t\t\t\trootBone.add( child );\n\n\t\t\t}\n\n\t\t\treturn rootBone;\n\n\t\t}\n\n\t\tfunction sortWeights( indexes, weights ) {\n\n\t\t\tvar pairs = [];\n\n\t\t\tfor ( var i = 0; i < indexes.length; i ++ ) {\n\n\t\t\t\tpairs.push( {\n\t\t\t\t\ti: indexes[ i ],\n\t\t\t\t\tw: weights[ i ]\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tpairs.sort( function ( a, b ) {\n\n\t\t\t\treturn b.w - a.w;\n\n\t\t\t } );\n\n\t\t\twhile ( pairs.length < 4 ) {\n\n\t\t\t\tpairs.push( {\n\t\t\t\t\ti: 0,\n\t\t\t\t\tw: 0\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( pairs.length > 4 )\n\t\t\t\tpairs.length = 4;\n\t\t\tvar sum = 0;\n\n\t\t\tfor ( var i = 0; i < 4; i ++ ) {\n\n\t\t\t\tsum += pairs[ i ].w * pairs[ i ].w;\n\n\t\t\t}\n\n\t\t\tsum = Math.sqrt( sum );\n\n\t\t\tfor ( var i = 0; i < 4; i ++ ) {\n\n\t\t\t\tpairs[ i ].w = pairs[ i ].w / sum;\n\t\t\t\tindexes[ i ] = pairs[ i ].i;\n\t\t\t\tweights[ i ] = pairs[ i ].w;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction findMatchingBone( root, name ) {\n\n\t\t\tif ( root.name.indexOf( 'bone_' + name ) == 0 )\n\t\t\t\treturn root;\n\n\t\t\tfor ( var i in root.children ) {\n\n\t\t\t\tvar ret = findMatchingBone( root.children[ i ], name );\n\n\t\t\t\tif ( ret )\n\t\t\t\t\treturn ret;\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t}\n\n\t\tfunction aiMesh() {\n\n\t\t\tthis.mPrimitiveTypes = 0;\n\t\t\tthis.mNumVertices = 0;\n\t\t\tthis.mNumFaces = 0;\n\t\t\tthis.mNumBones = 0;\n\t\t\tthis.mMaterialIndex = 0;\n\t\t\tthis.mVertices = [];\n\t\t\tthis.mNormals = [];\n\t\t\tthis.mTangents = [];\n\t\t\tthis.mBitangents = [];\n\t\t\tthis.mColors = [\n\t\t\t\t[]\n\t\t\t];\n\t\t\tthis.mTextureCoords = [\n\t\t\t\t[]\n\t\t\t];\n\t\t\tthis.mFaces = [];\n\t\t\tthis.mBones = [];\n\t\t\tthis.hookupSkeletons = function ( scene ) {\n\n\t\t\t\tif ( this.mBones.length == 0 ) return;\n\n\t\t\t\tvar allBones = [];\n\t\t\t\tvar offsetMatrix = [];\n\t\t\t\tvar skeletonRoot = scene.findNode( this.mBones[ 0 ].mName );\n\n\t\t\t\twhile ( skeletonRoot.mParent && skeletonRoot.mParent.isBone ) {\n\n\t\t\t\t\tskeletonRoot = skeletonRoot.mParent;\n\n\t\t\t\t}\n\n\t\t\t\tvar threeSkeletonRoot = skeletonRoot.toTHREE( scene );\n\t\t\t\tvar threeSkeletonRootBone = cloneTreeToBones( threeSkeletonRoot, scene );\n\t\t\t\tthis.threeNode.add( threeSkeletonRootBone );\n\n\t\t\t\tfor ( var i = 0; i < this.mBones.length; i ++ ) {\n\n\t\t\t\t\tvar bone = findMatchingBone( threeSkeletonRootBone, this.mBones[ i ].mName );\n\n\t\t\t\t\tif ( bone ) {\n\n\t\t\t\t\t\tvar tbone = bone;\n\t\t\t\t\t\tallBones.push( tbone );\n\t\t\t\t\t\t//tbone.matrixAutoUpdate = false;\n\t\t\t\t\t\toffsetMatrix.push( this.mBones[ i ].mOffsetMatrix.toTHREE() );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar skeletonRoot = scene.findNode( this.mBones[ i ].mName );\n\t\t\t\t\t\tif ( ! skeletonRoot ) return;\n\t\t\t\t\t\tvar threeSkeletonRoot = skeletonRoot.toTHREE( scene );\n\t\t\t\t\t\tvar threeSkeletonRootBone = cloneTreeToBones( threeSkeletonRoot, scene );\n\t\t\t\t\t\tthis.threeNode.add( threeSkeletonRootBone );\n\t\t\t\t\t\tvar bone = findMatchingBone( threeSkeletonRootBone, this.mBones[ i ].mName );\n\t\t\t\t\t\tvar tbone = bone;\n\t\t\t\t\t\tallBones.push( tbone );\n\t\t\t\t\t\t//tbone.matrixAutoUpdate = false;\n\t\t\t\t\t\toffsetMatrix.push( this.mBones[ i ].mOffsetMatrix.toTHREE() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar skeleton = new Skeleton( allBones, offsetMatrix );\n\n\t\t\t\tthis.threeNode.bind( skeleton, new Matrix4() );\n\t\t\t\tthis.threeNode.material.skinning = true;\n\n\t\t\t};\n\n\t\t\tthis.toTHREE = function ( scene ) {\n\n\t\t\t\tif ( this.threeNode ) return this.threeNode;\n\t\t\t\tvar geometry = new BufferGeometry();\n\t\t\t\tvar mat;\n\t\t\t\tif ( scene.mMaterials[ this.mMaterialIndex ] )\n\t\t\t\t\tmat = scene.mMaterials[ this.mMaterialIndex ].toTHREE( scene );\n\t\t\t\telse\n\t\t\t\t\tmat = new MeshLambertMaterial();\n\t\t\t\tgeometry.setIndex( new BufferAttribute( new Uint32Array( this.mIndexArray ), 1 ) );\n\t\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( this.mVertexBuffer, 3 ) );\n\t\t\t\tif ( this.mNormalBuffer && this.mNormalBuffer.length > 0 )\n\t\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( this.mNormalBuffer, 3 ) );\n\t\t\t\tif ( this.mColorBuffer && this.mColorBuffer.length > 0 )\n\t\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( this.mColorBuffer, 4 ) );\n\t\t\t\tif ( this.mTexCoordsBuffers[ 0 ] && this.mTexCoordsBuffers[ 0 ].length > 0 )\n\t\t\t\t\tgeometry.setAttribute( 'uv', new BufferAttribute( new Float32Array( this.mTexCoordsBuffers[ 0 ] ), 2 ) );\n\t\t\t\tif ( this.mTexCoordsBuffers[ 1 ] && this.mTexCoordsBuffers[ 1 ].length > 0 )\n\t\t\t\t\tgeometry.setAttribute( 'uv1', new BufferAttribute( new Float32Array( this.mTexCoordsBuffers[ 1 ] ), 2 ) );\n\t\t\t\tif ( this.mTangentBuffer && this.mTangentBuffer.length > 0 )\n\t\t\t\t\tgeometry.setAttribute( 'tangents', new BufferAttribute( this.mTangentBuffer, 3 ) );\n\t\t\t\tif ( this.mBitangentBuffer && this.mBitangentBuffer.length > 0 )\n\t\t\t\t\tgeometry.setAttribute( 'bitangents', new BufferAttribute( this.mBitangentBuffer, 3 ) );\n\t\t\t\tif ( this.mBones.length > 0 ) {\n\n\t\t\t\t\tvar weights = [];\n\t\t\t\t\tvar bones = [];\n\n\t\t\t\t\tfor ( var i = 0; i < this.mBones.length; i ++ ) {\n\n\t\t\t\t\t\tfor ( var j = 0; j < this.mBones[ i ].mWeights.length; j ++ ) {\n\n\t\t\t\t\t\t\tvar weight = this.mBones[ i ].mWeights[ j ];\n\t\t\t\t\t\t\tif ( weight ) {\n\n\t\t\t\t\t\t\t\tif ( ! weights[ weight.mVertexId ] ) weights[ weight.mVertexId ] = [];\n\t\t\t\t\t\t\t\tif ( ! bones[ weight.mVertexId ] ) bones[ weight.mVertexId ] = [];\n\t\t\t\t\t\t\t\tweights[ weight.mVertexId ].push( weight.mWeight );\n\t\t\t\t\t\t\t\tbones[ weight.mVertexId ].push( parseInt( i ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i in bones ) {\n\n\t\t\t\t\t\tsortWeights( bones[ i ], weights[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar _weights = [];\n\t\t\t\t\tvar _bones = [];\n\n\t\t\t\t\tfor ( var i = 0; i < weights.length; i ++ ) {\n\n\t\t\t\t\t\tfor ( var j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\tif ( weights[ i ] && bones[ i ] ) {\n\n\t\t\t\t\t\t\t\t_weights.push( weights[ i ][ j ] );\n\t\t\t\t\t\t\t\t_bones.push( bones[ i ][ j ] );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t_weights.push( 0 );\n\t\t\t\t\t\t\t\t_bones.push( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute( 'skinWeight', new BufferAttribute( new Float32Array( _weights ), BONESPERVERT ) );\n\t\t\t\t\tgeometry.setAttribute( 'skinIndex', new BufferAttribute( new Float32Array( _bones ), BONESPERVERT ) );\n\n\t\t\t\t}\n\n\t\t\t\tvar mesh;\n\n\t\t\t\tif ( this.mBones.length == 0 )\n\t\t\t\t\tmesh = new Mesh( geometry, mat );\n\n\t\t\t\tif ( this.mBones.length > 0 ) {\n\n\t\t\t\t\tmesh = new SkinnedMesh( geometry, mat );\n\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t}\n\n\t\t\t\tthis.threeNode = mesh;\n\t\t\t\t//mesh.matrixAutoUpdate = false;\n\t\t\t\treturn mesh;\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiFace() {\n\n\t\t\tthis.mNumIndices = 0;\n\t\t\tthis.mIndices = [];\n\n\t\t}\n\n\t\tfunction aiVector3D() {\n\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t\tthis.toTHREE = function () {\n\n\t\t\t\treturn new Vector3( this.x, this.y, this.z );\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiColor3D() {\n\n\t\t\tthis.r = 0;\n\t\t\tthis.g = 0;\n\t\t\tthis.b = 0;\n\t\t\tthis.a = 0;\n\t\t\tthis.toTHREE = function () {\n\n\t\t\t\treturn new Color( this.r, this.g, this.b );\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiQuaternion() {\n\n\t\t\tthis.x = 0;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\t\t\tthis.w = 0;\n\t\t\tthis.toTHREE = function () {\n\n\t\t\t\treturn new Quaternion( this.x, this.y, this.z, this.w );\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiVertexWeight() {\n\n\t\t\tthis.mVertexId = 0;\n\t\t\tthis.mWeight = 0;\n\n\t\t}\n\n\t\tfunction aiString() {\n\n\t\t\tthis.data = [];\n\t\t\tthis.toString = function () {\n\n\t\t\t\tvar str = '';\n\t\t\t\tthis.data.forEach( function ( i ) {\n\n\t\t\t\t\tstr += ( String.fromCharCode( i ) );\n\n\t\t\t\t} );\n\t\t\t\treturn str.replace( /[^\\x20-\\x7E]+/g, '' );\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiVectorKey() {\n\n\t\t\tthis.mTime = 0;\n\t\t\tthis.mValue = null;\n\n\t\t}\n\n\t\tfunction aiQuatKey() {\n\n\t\t\tthis.mTime = 0;\n\t\t\tthis.mValue = null;\n\n\t\t}\n\n\t\tfunction aiNode() {\n\n\t\t\tthis.mName = '';\n\t\t\tthis.mTransformation = [];\n\t\t\tthis.mNumChildren = 0;\n\t\t\tthis.mNumMeshes = 0;\n\t\t\tthis.mMeshes = [];\n\t\t\tthis.mChildren = [];\n\t\t\tthis.toTHREE = function ( scene ) {\n\n\t\t\t\tif ( this.threeNode ) return this.threeNode;\n\t\t\t\tvar o = new Object3D();\n\t\t\t\to.name = this.mName;\n\t\t\t\to.matrix = this.mTransformation.toTHREE();\n\n\t\t\t\tfor ( var i = 0; i < this.mChildren.length; i ++ ) {\n\n\t\t\t\t\to.add( this.mChildren[ i ].toTHREE( scene ) );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0; i < this.mMeshes.length; i ++ ) {\n\n\t\t\t\t\to.add( scene.mMeshes[ this.mMeshes[ i ] ].toTHREE( scene ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.threeNode = o;\n\t\t\t\t//o.matrixAutoUpdate = false;\n\t\t\t\to.matrix.decompose( o.position, o.quaternion, o.scale );\n\t\t\t\treturn o;\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiBone() {\n\n\t\t\tthis.mName = '';\n\t\t\tthis.mNumWeights = 0;\n\t\t\tthis.mOffsetMatrix = 0;\n\n\t\t}\n\n\t\tfunction aiMaterialProperty() {\n\n\t\t\tthis.mKey = '';\n\t\t\tthis.mSemantic = 0;\n\t\t\tthis.mIndex = 0;\n\t\t\tthis.mData = [];\n\t\t\tthis.mDataLength = 0;\n\t\t\tthis.mType = 0;\n\t\t\tthis.dataAsColor = function () {\n\n\t\t\t\tvar array = ( new Uint8Array( this.mData ) ).buffer;\n\t\t\t\tvar reader = new DataView( array );\n\t\t\t\tvar r = reader.getFloat32( 0, true );\n\t\t\t\tvar g = reader.getFloat32( 4, true );\n\t\t\t\tvar b = reader.getFloat32( 8, true );\n\t\t\t\t//var a = reader.getFloat32(12, true);\n\t\t\t\treturn new Color( r, g, b );\n\n\t\t\t};\n\n\t\t\tthis.dataAsFloat = function () {\n\n\t\t\t\tvar array = ( new Uint8Array( this.mData ) ).buffer;\n\t\t\t\tvar reader = new DataView( array );\n\t\t\t\tvar r = reader.getFloat32( 0, true );\n\t\t\t\treturn r;\n\n\t\t\t};\n\n\t\t\tthis.dataAsBool = function () {\n\n\t\t\t\tvar array = ( new Uint8Array( this.mData ) ).buffer;\n\t\t\t\tvar reader = new DataView( array );\n\t\t\t\tvar r = reader.getFloat32( 0, true );\n\t\t\t\treturn !! r;\n\n\t\t\t};\n\n\t\t\tthis.dataAsString = function () {\n\n\t\t\t\tvar s = new aiString();\n\t\t\t\ts.data = this.mData;\n\t\t\t\treturn s.toString();\n\n\t\t\t};\n\n\t\t\tthis.dataAsMap = function () {\n\n\t\t\t\tvar s = new aiString();\n\t\t\t\ts.data = this.mData;\n\t\t\t\tvar path = s.toString();\n\t\t\t\tpath = path.replace( /\\\\/g, '/' );\n\n\t\t\t\tif ( path.indexOf( '/' ) != - 1 ) {\n\n\t\t\t\t\tpath = path.substr( path.lastIndexOf( '/' ) + 1 );\n\n\t\t\t\t}\n\n\t\t\t\treturn textureLoader.load( path );\n\n\t\t\t};\n\n\t\t}\n\n\t\tvar namePropMapping = {\n\n\t\t\t'?mat.name': 'name',\n\t\t\t'$mat.shadingm': 'shading',\n\t\t\t'$mat.twosided': 'twoSided',\n\t\t\t'$mat.wireframe': 'wireframe',\n\t\t\t'$clr.ambient': 'ambient',\n\t\t\t'$clr.diffuse': 'color',\n\t\t\t'$clr.specular': 'specular',\n\t\t\t'$clr.emissive': 'emissive',\n\t\t\t'$clr.transparent': 'transparent',\n\t\t\t'$clr.reflective': 'reflect',\n\t\t\t'$mat.shininess': 'shininess',\n\t\t\t'$mat.reflectivity': 'reflectivity',\n\t\t\t'$mat.refracti': 'refraction',\n\t\t\t'$tex.file': 'map'\n\n\t\t};\n\n\t\tvar nameTypeMapping = {\n\n\t\t\t'?mat.name': 'string',\n\t\t\t'$mat.shadingm': 'bool',\n\t\t\t'$mat.twosided': 'bool',\n\t\t\t'$mat.wireframe': 'bool',\n\t\t\t'$clr.ambient': 'color',\n\t\t\t'$clr.diffuse': 'color',\n\t\t\t'$clr.specular': 'color',\n\t\t\t'$clr.emissive': 'color',\n\t\t\t'$clr.transparent': 'color',\n\t\t\t'$clr.reflective': 'color',\n\t\t\t'$mat.shininess': 'float',\n\t\t\t'$mat.reflectivity': 'float',\n\t\t\t'$mat.refracti': 'float',\n\t\t\t'$tex.file': 'map'\n\n\t\t};\n\n\t\tfunction aiMaterial() {\n\n\t\t\tthis.mNumAllocated = 0;\n\t\t\tthis.mNumProperties = 0;\n\t\t\tthis.mProperties = [];\n\t\t\tthis.toTHREE = function () {\n\n\t\t\t\tvar mat = new MeshPhongMaterial();\n\n\t\t\t\tfor ( var i = 0; i < this.mProperties.length; i ++ ) {\n\n\t\t\t\t\tif ( nameTypeMapping[ this.mProperties[ i ].mKey ] == 'float' )\n\t\t\t\t\t\tmat[ namePropMapping[ this.mProperties[ i ].mKey ] ] = this.mProperties[ i ].dataAsFloat();\n\t\t\t\t\tif ( nameTypeMapping[ this.mProperties[ i ].mKey ] == 'color' )\n\t\t\t\t\t\tmat[ namePropMapping[ this.mProperties[ i ].mKey ] ] = this.mProperties[ i ].dataAsColor();\n\t\t\t\t\tif ( nameTypeMapping[ this.mProperties[ i ].mKey ] == 'bool' )\n\t\t\t\t\t\tmat[ namePropMapping[ this.mProperties[ i ].mKey ] ] = this.mProperties[ i ].dataAsBool();\n\t\t\t\t\tif ( nameTypeMapping[ this.mProperties[ i ].mKey ] == 'string' )\n\t\t\t\t\t\tmat[ namePropMapping[ this.mProperties[ i ].mKey ] ] = this.mProperties[ i ].dataAsString();\n\t\t\t\t\tif ( nameTypeMapping[ this.mProperties[ i ].mKey ] == 'map' ) {\n\n\t\t\t\t\t\tvar prop = this.mProperties[ i ];\n\t\t\t\t\t\tif ( prop.mSemantic == aiTextureType_DIFFUSE )\n\t\t\t\t\t\t\tmat.map = this.mProperties[ i ].dataAsMap();\n\t\t\t\t\t\tif ( prop.mSemantic == aiTextureType_NORMALS )\n\t\t\t\t\t\t\tmat.normalMap = this.mProperties[ i ].dataAsMap();\n\t\t\t\t\t\tif ( prop.mSemantic == aiTextureType_LIGHTMAP )\n\t\t\t\t\t\t\tmat.lightMap = this.mProperties[ i ].dataAsMap();\n\t\t\t\t\t\tif ( prop.mSemantic == aiTextureType_OPACITY )\n\t\t\t\t\t\t\tmat.alphaMap = this.mProperties[ i ].dataAsMap();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmat.ambient.r = .53;\n\t\t\t\tmat.ambient.g = .53;\n\t\t\t\tmat.ambient.b = .53;\n\t\t\t\tmat.color.r = 1;\n\t\t\t\tmat.color.g = 1;\n\t\t\t\tmat.color.b = 1;\n\t\t\t\treturn mat;\n\n\t\t\t};\n\n\t\t}\n\n\n\t\tfunction veclerp( v1, v2, l ) {\n\n\t\t\tvar v = new Vector3();\n\t\t\tvar lm1 = 1 - l;\n\t\t\tv.x = v1.x * l + v2.x * lm1;\n\t\t\tv.y = v1.y * l + v2.y * lm1;\n\t\t\tv.z = v1.z * l + v2.z * lm1;\n\t\t\treturn v;\n\n\t\t}\n\n\t\tfunction quatlerp( q1, q2, l ) {\n\n\t\t\treturn q1.clone().slerp( q2, 1 - l );\n\n\t\t}\n\n\t\tfunction sampleTrack( keys, time, lne, lerp ) {\n\n\t\t\tif ( keys.length == 1 ) return keys[ 0 ].mValue.toTHREE();\n\n\t\t\tvar dist = Infinity;\n\t\t\tvar key = null;\n\t\t\tvar nextKey = null;\n\n\t\t\tfor ( var i = 0; i < keys.length; i ++ ) {\n\n\t\t\t\tvar timeDist = Math.abs( keys[ i ].mTime - time );\n\n\t\t\t\tif ( timeDist < dist && keys[ i ].mTime <= time ) {\n\n\t\t\t\t\tdist = timeDist;\n\t\t\t\t\tkey = keys[ i ];\n\t\t\t\t\tnextKey = keys[ i + 1 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! key ) {\n\n\t\t\t\treturn null;\n\n\t\t\t} else if ( nextKey ) {\n\n\t\t\t\tvar dT = nextKey.mTime - key.mTime;\n\t\t\t\tvar T = key.mTime - time;\n\t\t\t\tvar l = T / dT;\n\n\t\t\t\treturn lerp( key.mValue.toTHREE(), nextKey.mValue.toTHREE(), l );\n\n\t\t\t} else {\n\n\t\t\t\tnextKey = keys[ 0 ].clone();\n\t\t\t\tnextKey.mTime += lne;\n\n\t\t\t\tvar dT = nextKey.mTime - key.mTime;\n\t\t\t\tvar T = key.mTime - time;\n\t\t\t\tvar l = T / dT;\n\n\t\t\t\treturn lerp( key.mValue.toTHREE(), nextKey.mValue.toTHREE(), l );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction aiNodeAnim() {\n\n\t\t\tthis.mNodeName = '';\n\t\t\tthis.mNumPositionKeys = 0;\n\t\t\tthis.mNumRotationKeys = 0;\n\t\t\tthis.mNumScalingKeys = 0;\n\t\t\tthis.mPositionKeys = [];\n\t\t\tthis.mRotationKeys = [];\n\t\t\tthis.mScalingKeys = [];\n\t\t\tthis.mPreState = '';\n\t\t\tthis.mPostState = '';\n\t\t\tthis.init = function ( tps ) {\n\n\t\t\t\tif ( ! tps ) tps = 1;\n\n\t\t\t\tfunction t( t ) {\n\n\t\t\t\t\tt.mTime /= tps;\n\n\t\t\t\t}\n\n\t\t\t\tthis.mPositionKeys.forEach( t );\n\t\t\t\tthis.mRotationKeys.forEach( t );\n\t\t\t\tthis.mScalingKeys.forEach( t );\n\n\t\t\t};\n\n\t\t\tthis.sortKeys = function () {\n\n\t\t\t\tfunction comp( a, b ) {\n\n\t\t\t\t\treturn a.mTime - b.mTime;\n\n\t\t\t\t}\n\n\t\t\t\tthis.mPositionKeys.sort( comp );\n\t\t\t\tthis.mRotationKeys.sort( comp );\n\t\t\t\tthis.mScalingKeys.sort( comp );\n\n\t\t\t};\n\n\t\t\tthis.getLength = function () {\n\n\t\t\t\treturn Math.max(\n\t\t\t\t\tMath.max.apply( null, this.mPositionKeys.map( function ( a ) {\n\n\t\t\t\t\t\treturn a.mTime;\n\n\t\t\t\t\t} ) ),\n\t\t\t\t\tMath.max.apply( null, this.mRotationKeys.map( function ( a ) {\n\n\t\t\t\t\t\treturn a.mTime;\n\n\t\t\t\t\t} ) ),\n\t\t\t\t\tMath.max.apply( null, this.mScalingKeys.map( function ( a ) {\n\n\t\t\t\t\t\treturn a.mTime;\n\n\t\t\t\t } ) )\n\t\t\t\t);\n\n\t\t\t};\n\n\t\t\tthis.toTHREE = function ( o ) {\n\n\t\t\t\tthis.sortKeys();\n\t\t\t\tvar length = this.getLength();\n\t\t\t\tvar track = new Virtulous.KeyFrameTrack();\n\n\t\t\t\tfor ( var i = 0; i < length; i += .05 ) {\n\n\t\t\t\t\tvar matrix = new Matrix4();\n\t\t\t\t\tvar time = i;\n\t\t\t\t\tvar pos = sampleTrack( this.mPositionKeys, time, length, veclerp );\n\t\t\t\t\tvar scale = sampleTrack( this.mScalingKeys, time, length, veclerp );\n\t\t\t\t\tvar rotation = sampleTrack( this.mRotationKeys, time, length, quatlerp );\n\t\t\t\t\tmatrix.compose( pos, rotation, scale );\n\n\t\t\t\t\tvar key = new Virtulous.KeyFrame( time, matrix );\n\t\t\t\t\ttrack.addKey( key );\n\n\t\t\t\t}\n\n\t\t\t\ttrack.target = o.findNode( this.mNodeName ).toTHREE();\n\n\t\t\t\tvar tracks = [ track ];\n\n\t\t\t\tif ( o.nodeToBoneMap[ this.mNodeName ] ) {\n\n\t\t\t\t\tfor ( var i = 0; i < o.nodeToBoneMap[ this.mNodeName ].length; i ++ ) {\n\n\t\t\t\t\t\tvar t2 = track.clone();\n\t\t\t\t\t\tt2.target = o.nodeToBoneMap[ this.mNodeName ][ i ];\n\t\t\t\t\t\ttracks.push( t2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn tracks;\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiAnimation() {\n\n\t\t\tthis.mName = '';\n\t\t\tthis.mDuration = 0;\n\t\t\tthis.mTicksPerSecond = 0;\n\t\t\tthis.mNumChannels = 0;\n\t\t\tthis.mChannels = [];\n\t\t\tthis.toTHREE = function ( root ) {\n\n\t\t\t\tvar animationHandle = new Virtulous.Animation();\n\n\t\t\t\tfor ( var i in this.mChannels ) {\n\n\t\t\t\t\tthis.mChannels[ i ].init( this.mTicksPerSecond );\n\n\t\t\t\t\tvar tracks = this.mChannels[ i ].toTHREE( root );\n\n\t\t\t\t\tfor ( var j in tracks ) {\n\n\t\t\t\t\t\ttracks[ j ].init();\n\t\t\t\t\t\tanimationHandle.addTrack( tracks[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tanimationHandle.length = Math.max.apply( null, animationHandle.tracks.map( function ( e ) {\n\n\t\t\t\t\treturn e.length;\n\n\t\t\t\t} ) );\n\t\t\t\treturn animationHandle;\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiTexture() {\n\n\t\t\tthis.mWidth = 0;\n\t\t\tthis.mHeight = 0;\n\t\t\tthis.texAchFormatHint = [];\n\t\t\tthis.pcData = [];\n\n\t\t}\n\n\t\tfunction aiLight() {\n\n\t\t\tthis.mName = '';\n\t\t\tthis.mType = 0;\n\t\t\tthis.mAttenuationConstant = 0;\n\t\t\tthis.mAttenuationLinear = 0;\n\t\t\tthis.mAttenuationQuadratic = 0;\n\t\t\tthis.mAngleInnerCone = 0;\n\t\t\tthis.mAngleOuterCone = 0;\n\t\t\tthis.mColorDiffuse = null;\n\t\t\tthis.mColorSpecular = null;\n\t\t\tthis.mColorAmbient = null;\n\n\t\t}\n\n\t\tfunction aiCamera() {\n\n\t\t\tthis.mName = '';\n\t\t\tthis.mPosition = null;\n\t\t\tthis.mLookAt = null;\n\t\t\tthis.mUp = null;\n\t\t\tthis.mHorizontalFOV = 0;\n\t\t\tthis.mClipPlaneNear = 0;\n\t\t\tthis.mClipPlaneFar = 0;\n\t\t\tthis.mAspect = 0;\n\n\t\t}\n\n\t\tfunction aiScene() {\n\n\t\t\tthis.versionMajor = 0;\n\t\t\tthis.versionMinor = 0;\n\t\t\tthis.versionRevision = 0;\n\t\t\tthis.compileFlags = 0;\n\t\t\tthis.mFlags = 0;\n\t\t\tthis.mNumMeshes = 0;\n\t\t\tthis.mNumMaterials = 0;\n\t\t\tthis.mNumAnimations = 0;\n\t\t\tthis.mNumTextures = 0;\n\t\t\tthis.mNumLights = 0;\n\t\t\tthis.mNumCameras = 0;\n\t\t\tthis.mRootNode = null;\n\t\t\tthis.mMeshes = [];\n\t\t\tthis.mMaterials = [];\n\t\t\tthis.mAnimations = [];\n\t\t\tthis.mLights = [];\n\t\t\tthis.mCameras = [];\n\t\t\tthis.nodeToBoneMap = {};\n\t\t\tthis.findNode = function ( name, root ) {\n\n\t\t\t\tif ( ! root ) {\n\n\t\t\t\t\troot = this.mRootNode;\n\n\t\t\t\t}\n\n\t\t\t\tif ( root.mName == name ) {\n\n\t\t\t\t\treturn root;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0; i < root.mChildren.length; i ++ ) {\n\n\t\t\t\t\tvar ret = this.findNode( name, root.mChildren[ i ] );\n\t\t\t\t\tif ( ret ) return ret;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tthis.toTHREE = function () {\n\n\t\t\t\tthis.nodeCount = 0;\n\n\t\t\t\tmarkBones( this );\n\n\t\t\t\tvar o = this.mRootNode.toTHREE( this );\n\n\t\t\t\tfor ( var i in this.mMeshes )\n\t\t\t\t\tthis.mMeshes[ i ].hookupSkeletons( this );\n\n\t\t\t\tif ( this.mAnimations.length > 0 ) {\n\n\t\t\t\t\tvar a = this.mAnimations[ 0 ].toTHREE( this );\n\n\t\t\t\t}\n\n\t\t\t\treturn { object: o, animation: a };\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction aiMatrix4() {\n\n\t\t\tthis.elements = [\n\t\t\t\t[],\n\t\t\t\t[],\n\t\t\t\t[],\n\t\t\t\t[]\n\t\t\t];\n\t\t\tthis.toTHREE = function () {\n\n\t\t\t\tvar m = new Matrix4();\n\n\t\t\t\tfor ( var i = 0; i < 4; ++ i ) {\n\n\t\t\t\t\tfor ( var i2 = 0; i2 < 4; ++ i2 ) {\n\n\t\t\t\t\t\tm.elements[ i * 4 + i2 ] = this.elements[ i2 ][ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn m;\n\n\t\t\t};\n\n\t\t}\n\n\t\tvar littleEndian = true;\n\n\t\tfunction readFloat( dataview ) {\n\n\t\t\tvar val = dataview.getFloat32( dataview.readOffset, littleEndian );\n\t\t\tdataview.readOffset += 4;\n\t\t\treturn val;\n\n\t\t}\n\n\t\tfunction Read_double( dataview ) {\n\n\t\t\tvar val = dataview.getFloat64( dataview.readOffset, littleEndian );\n\t\t\tdataview.readOffset += 8;\n\t\t\treturn val;\n\n\t\t}\n\n\t\tfunction Read_uint8_t( dataview ) {\n\n\t\t\tvar val = dataview.getUint8( dataview.readOffset );\n\t\t\tdataview.readOffset += 1;\n\t\t\treturn val;\n\n\t\t}\n\n\t\tfunction Read_uint16_t( dataview ) {\n\n\t\t\tvar val = dataview.getUint16( dataview.readOffset, littleEndian );\n\t\t\tdataview.readOffset += 2;\n\t\t\treturn val;\n\n\t\t}\n\n\t\tfunction Read_unsigned_int( dataview ) {\n\n\t\t\tvar val = dataview.getUint32( dataview.readOffset, littleEndian );\n\t\t\tdataview.readOffset += 4;\n\t\t\treturn val;\n\n\t\t}\n\n\t\tfunction Read_uint32_t( dataview ) {\n\n\t\t\tvar val = dataview.getUint32( dataview.readOffset, littleEndian );\n\t\t\tdataview.readOffset += 4;\n\t\t\treturn val;\n\n\t\t}\n\n\t\tfunction Read_aiVector3D( stream ) {\n\n\t\t\tvar v = new aiVector3D();\n\t\t\tv.x = readFloat( stream );\n\t\t\tv.y = readFloat( stream );\n\t\t\tv.z = readFloat( stream );\n\t\t\treturn v;\n\n\t\t}\n\n\t\tfunction Read_aiColor3D( stream ) {\n\n\t\t\tvar c = new aiColor3D();\n\t\t\tc.r = readFloat( stream );\n\t\t\tc.g = readFloat( stream );\n\t\t\tc.b = readFloat( stream );\n\t\t\treturn c;\n\n\t\t}\n\n\t\tfunction Read_aiQuaternion( stream ) {\n\n\t\t\tvar v = new aiQuaternion();\n\t\t\tv.w = readFloat( stream );\n\t\t\tv.x = readFloat( stream );\n\t\t\tv.y = readFloat( stream );\n\t\t\tv.z = readFloat( stream );\n\t\t\treturn v;\n\n\t\t}\n\n\t\tfunction Read_aiString( stream ) {\n\n\t\t\tvar s = new aiString();\n\t\t\tvar stringlengthbytes = Read_unsigned_int( stream );\n\t\t\tstream.ReadBytes( s.data, 1, stringlengthbytes );\n\t\t\treturn s.toString();\n\n\t\t}\n\n\t\tfunction Read_aiVertexWeight( stream ) {\n\n\t\t\tvar w = new aiVertexWeight();\n\t\t\tw.mVertexId = Read_unsigned_int( stream );\n\t\t\tw.mWeight = readFloat( stream );\n\t\t\treturn w;\n\n\t\t}\n\n\t\tfunction Read_aiMatrix4x4( stream ) {\n\n\t\t\tvar m = new aiMatrix4();\n\n\t\t\tfor ( var i = 0; i < 4; ++ i ) {\n\n\t\t\t\tfor ( var i2 = 0; i2 < 4; ++ i2 ) {\n\n\t\t\t\t\tm.elements[ i ][ i2 ] = readFloat( stream );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn m;\n\n\t\t}\n\n\t\tfunction Read_aiVectorKey( stream ) {\n\n\t\t\tvar v = new aiVectorKey();\n\t\t\tv.mTime = Read_double( stream );\n\t\t\tv.mValue = Read_aiVector3D( stream );\n\t\t\treturn v;\n\n\t\t}\n\n\t\tfunction Read_aiQuatKey( stream ) {\n\n\t\t\tvar v = new aiQuatKey();\n\t\t\tv.mTime = Read_double( stream );\n\t\t\tv.mValue = Read_aiQuaternion( stream );\n\t\t\treturn v;\n\n\t\t}\n\n\t\tfunction ReadArray_aiVertexWeight( stream, data, size ) {\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) data[ i ] = Read_aiVertexWeight( stream );\n\n\t\t}\n\n\t\tfunction ReadArray_aiVectorKey( stream, data, size ) {\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) data[ i ] = Read_aiVectorKey( stream );\n\n\t\t}\n\n\t\tfunction ReadArray_aiQuatKey( stream, data, size ) {\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) data[ i ] = Read_aiQuatKey( stream );\n\n\t\t}\n\n\t\tfunction ReadBounds( stream, T /*p*/, n ) {\n\n\t\t\t// not sure what to do here, the data isn't really useful.\n\t\t\treturn stream.Seek( sizeof( T ) * n, aiOrigin_CUR ); // eslint-disable-line no-undef\n\n\t\t}\n\n\t\tfunction ai_assert( bool ) {\n\n\t\t\tif ( ! bool )\n\t\t\t\tthrow ( 'asset failed' );\n\n\t\t}\n\n\t\tfunction ReadBinaryNode( stream, parent, depth ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AINODE );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tvar node = new aiNode();\n\t\t\tnode.mParent = parent;\n\t\t\tnode.mDepth = depth;\n\t\t\tnode.mName = Read_aiString( stream );\n\t\t\tnode.mTransformation = Read_aiMatrix4x4( stream );\n\t\t\tnode.mNumChildren = Read_unsigned_int( stream );\n\t\t\tnode.mNumMeshes = Read_unsigned_int( stream );\n\n\t\t\tif ( node.mNumMeshes ) {\n\n\t\t\t\tnode.mMeshes = [];\n\n\t\t\t\tfor ( var i = 0; i < node.mNumMeshes; ++ i ) {\n\n\t\t\t\t\tnode.mMeshes[ i ] = Read_unsigned_int( stream );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( node.mNumChildren ) {\n\n\t\t\t\tnode.mChildren = [];\n\n\t\t\t\tfor ( var i = 0; i < node.mNumChildren; ++ i ) {\n\n\t\t\t\t\tvar node2 = ReadBinaryNode( stream, node, depth ++ );\n\t\t\t\t\tnode.mChildren[ i ] = node2;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t}\n\n\t\t// -----------------------------------------------------------------------------------\n\n\t\tfunction ReadBinaryBone( stream, b ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AIBONE );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tb.mName = Read_aiString( stream );\n\t\t\tb.mNumWeights = Read_unsigned_int( stream );\n\t\t\tb.mOffsetMatrix = Read_aiMatrix4x4( stream );\n\t\t\t// for the moment we write dumb min/max values for the bones, too.\n\t\t\t// maybe I'll add a better, hash-like solution later\n\t\t\tif ( shortened ) {\n\n\t\t\t\tReadBounds( stream, b.mWeights, b.mNumWeights );\n\n\t\t\t} else {\n\n\t\t\t\t// else write as usual\n\n\t\t\t\tb.mWeights = [];\n\t\t\t\tReadArray_aiVertexWeight( stream, b.mWeights, b.mNumWeights );\n\n\t\t\t}\n\n\t\t\treturn b;\n\n\t\t}\n\n\t\tfunction ReadBinaryMesh( stream, mesh ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AIMESH );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tmesh.mPrimitiveTypes = Read_unsigned_int( stream );\n\t\t\tmesh.mNumVertices = Read_unsigned_int( stream );\n\t\t\tmesh.mNumFaces = Read_unsigned_int( stream );\n\t\t\tmesh.mNumBones = Read_unsigned_int( stream );\n\t\t\tmesh.mMaterialIndex = Read_unsigned_int( stream );\n\t\t\tmesh.mNumUVComponents = [];\n\t\t\t// first of all, write bits for all existent vertex components\n\t\t\tvar c = Read_unsigned_int( stream );\n\n\t\t\tif ( c & ASSBIN_MESH_HAS_POSITIONS ) {\n\n\t\t\t\tif ( shortened ) {\n\n\t\t\t\t\tReadBounds( stream, mesh.mVertices, mesh.mNumVertices );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// else write as usual\n\n\t\t\t\t\tmesh.mVertices = [];\n\t\t\t\t\tmesh.mVertexBuffer = stream.subArray32( stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4 );\n\t\t\t\t\tstream.Seek( mesh.mNumVertices * 3 * 4, aiOrigin_CUR );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( c & ASSBIN_MESH_HAS_NORMALS ) {\n\n\t\t\t\tif ( shortened ) {\n\n\t\t\t\t\tReadBounds( stream, mesh.mNormals, mesh.mNumVertices );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// else write as usual\n\n\t\t\t\t\tmesh.mNormals = [];\n\t\t\t\t\tmesh.mNormalBuffer = stream.subArray32( stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4 );\n\t\t\t\t\tstream.Seek( mesh.mNumVertices * 3 * 4, aiOrigin_CUR );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( c & ASSBIN_MESH_HAS_TANGENTS_AND_BITANGENTS ) {\n\n\t\t\t\tif ( shortened ) {\n\n\t\t\t\t\tReadBounds( stream, mesh.mTangents, mesh.mNumVertices );\n\t\t\t\t\tReadBounds( stream, mesh.mBitangents, mesh.mNumVertices );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// else write as usual\n\n\t\t\t\t\tmesh.mTangents = [];\n\t\t\t\t\tmesh.mTangentBuffer = stream.subArray32( stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4 );\n\t\t\t\t\tstream.Seek( mesh.mNumVertices * 3 * 4, aiOrigin_CUR );\n\t\t\t\t\tmesh.mBitangents = [];\n\t\t\t\t\tmesh.mBitangentBuffer = stream.subArray32( stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4 );\n\t\t\t\t\tstream.Seek( mesh.mNumVertices * 3 * 4, aiOrigin_CUR );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var n = 0; n < AI_MAX_NUMBER_OF_COLOR_SETS; ++ n ) {\n\n\t\t\t\tif ( ! ( c & ASSBIN_MESH_HAS_COLOR( n ) ) ) break;\n\n\t\t\t\tif ( shortened ) {\n\n\t\t\t\t\tReadBounds( stream, mesh.mColors[ n ], mesh.mNumVertices );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// else write as usual\n\n\t\t\t\t\tmesh.mColors[ n ] = [];\n\t\t\t\t\tmesh.mColorBuffer = stream.subArray32( stream.readOffset, stream.readOffset + mesh.mNumVertices * 4 * 4 );\n\t\t\t\t\tstream.Seek( mesh.mNumVertices * 4 * 4, aiOrigin_CUR );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmesh.mTexCoordsBuffers = [];\n\n\t\t\tfor ( var n = 0; n < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++ n ) {\n\n\t\t\t\tif ( ! ( c & ASSBIN_MESH_HAS_TEXCOORD( n ) ) ) break;\n\n\t\t\t\t// write number of UV components\n\t\t\t\tmesh.mNumUVComponents[ n ] = Read_unsigned_int( stream );\n\n\t\t\t\tif ( shortened ) {\n\n\t\t\t\t\tReadBounds( stream, mesh.mTextureCoords[ n ], mesh.mNumVertices );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// else write as usual\n\n\t\t\t\t\tmesh.mTextureCoords[ n ] = [];\n\t\t\t\t\t//note that assbin always writes 3d texcoords\n\t\t\t\t\tmesh.mTexCoordsBuffers[ n ] = [];\n\n\t\t\t\t\tfor ( var uv = 0; uv < mesh.mNumVertices; uv ++ ) {\n\n\t\t\t\t\t\tmesh.mTexCoordsBuffers[ n ].push( readFloat( stream ) );\n\t\t\t\t\t\tmesh.mTexCoordsBuffers[ n ].push( readFloat( stream ) );\n\t\t\t\t\t\treadFloat( stream );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// write faces. There are no floating-point calculations involved\n\t\t\t// in these, so we can write a simple hash over the face data\n\t\t\t// to the dump file. We generate a single 32 Bit hash for 512 faces\n\t\t\t// using Assimp's standard hashing function.\n\t\t\tif ( shortened ) {\n\n\t\t\t\tRead_unsigned_int( stream );\n\n\t\t\t} else {\n\n\t\t\t\t// else write as usual\n\n\t\t\t\t// if there are less than 2^16 vertices, we can simply use 16 bit integers ...\n\t\t\t\tmesh.mFaces = [];\n\t\t\t\tmesh.mIndexArray = [];\n\n\t\t\t\tfor ( var i = 0; i < mesh.mNumFaces; ++ i ) {\n\n\t\t\t\t\tvar f = mesh.mFaces[ i ] = new aiFace();\n\t\t\t\t\t// BOOST_STATIC_ASSERT(AI_MAX_FACE_INDICES <= 0xffff);\n\t\t\t\t\tf.mNumIndices = Read_uint16_t( stream );\n\t\t\t\t\tf.mIndices = [];\n\n\t\t\t\t\tfor ( var a = 0; a < f.mNumIndices; ++ a ) {\n\n\t\t\t\t\t\tif ( mesh.mNumVertices < ( 1 << 16 ) ) {\n\n\t\t\t\t\t\t\tf.mIndices[ a ] = Read_uint16_t( stream );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tf.mIndices[ a ] = Read_unsigned_int( stream );\n\n\t\t\t\t\t\t}\n\n\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( f.mNumIndices === 3 ) {\n\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 0 ] );\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 1 ] );\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 2 ] );\n\n\t\t\t\t\t} else if ( f.mNumIndices === 4 ) {\n\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 0 ] );\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 1 ] );\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 2 ] );\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 2 ] );\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 3 ] );\n\t\t\t\t\t\tmesh.mIndexArray.push( f.mIndices[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow ( new Error( 'Sorry, can\\'t currently triangulate polys. Use the triangulate preprocessor in Assimp.' ) );\n\n\t\t\t\t\t}\n\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// write bones\n\t\t\tif ( mesh.mNumBones ) {\n\n\t\t\t\tmesh.mBones = [];\n\n\t\t\t\tfor ( var a = 0; a < mesh.mNumBones; ++ a ) {\n\n\t\t\t\t\tmesh.mBones[ a ] = new aiBone();\n\t\t\t\t\tReadBinaryBone( stream, mesh.mBones[ a ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction ReadBinaryMaterialProperty( stream, prop ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AIMATERIALPROPERTY );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tprop.mKey = Read_aiString( stream );\n\t\t\tprop.mSemantic = Read_unsigned_int( stream );\n\t\t\tprop.mIndex = Read_unsigned_int( stream );\n\t\t\tprop.mDataLength = Read_unsigned_int( stream );\n\t\t\tprop.mType = Read_unsigned_int( stream );\n\t\t\tprop.mData = [];\n\t\t\tstream.ReadBytes( prop.mData, 1, prop.mDataLength );\n\n\t\t}\n\n\t\t// -----------------------------------------------------------------------------------\n\n\t\tfunction ReadBinaryMaterial( stream, mat ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AIMATERIAL );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tmat.mNumAllocated = mat.mNumProperties = Read_unsigned_int( stream );\n\n\t\t\tif ( mat.mNumProperties ) {\n\n\t\t\t\tif ( mat.mProperties ) {\n\n\t\t\t\t\tdelete mat.mProperties;\n\n\t\t\t\t}\n\n\t\t\t\tmat.mProperties = [];\n\n\t\t\t\tfor ( var i = 0; i < mat.mNumProperties; ++ i ) {\n\n\t\t\t\t\tmat.mProperties[ i ] = new aiMaterialProperty();\n\t\t\t\t\tReadBinaryMaterialProperty( stream, mat.mProperties[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction ReadBinaryNodeAnim( stream, nd ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AINODEANIM );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tnd.mNodeName = Read_aiString( stream );\n\t\t\tnd.mNumPositionKeys = Read_unsigned_int( stream );\n\t\t\tnd.mNumRotationKeys = Read_unsigned_int( stream );\n\t\t\tnd.mNumScalingKeys = Read_unsigned_int( stream );\n\t\t\tnd.mPreState = Read_unsigned_int( stream );\n\t\t\tnd.mPostState = Read_unsigned_int( stream );\n\n\t\t\tif ( nd.mNumPositionKeys ) {\n\n\t\t\t\tif ( shortened ) {\n\n\t\t\t\t\tReadBounds( stream, nd.mPositionKeys, nd.mNumPositionKeys );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// else write as usual\n\n\t\t\t\t\tnd.mPositionKeys = [];\n\t\t\t\t\tReadArray_aiVectorKey( stream, nd.mPositionKeys, nd.mNumPositionKeys );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nd.mNumRotationKeys ) {\n\n\t\t\t\tif ( shortened ) {\n\n\t\t\t\t\tReadBounds( stream, nd.mRotationKeys, nd.mNumRotationKeys );\n\n\t\t\t\t} else {\n\n\t\t \t\t\t// else write as usual\n\n\t\t\t\t\tnd.mRotationKeys = [];\n\t\t\t\t\tReadArray_aiQuatKey( stream, nd.mRotationKeys, nd.mNumRotationKeys );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nd.mNumScalingKeys ) {\n\n\t\t\t\tif ( shortened ) {\n\n\t\t\t\t\tReadBounds( stream, nd.mScalingKeys, nd.mNumScalingKeys );\n\n\t\t\t\t} else {\n\n\t \t\t\t\t// else write as usual\n\n\t\t\t\t\tnd.mScalingKeys = [];\n\t\t\t\t\tReadArray_aiVectorKey( stream, nd.mScalingKeys, nd.mNumScalingKeys );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction ReadBinaryAnim( stream, anim ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AIANIMATION );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tanim.mName = Read_aiString( stream );\n\t\t\tanim.mDuration = Read_double( stream );\n\t\t\tanim.mTicksPerSecond = Read_double( stream );\n\t\t\tanim.mNumChannels = Read_unsigned_int( stream );\n\n\t\t\tif ( anim.mNumChannels ) {\n\n\t\t\t\tanim.mChannels = [];\n\n\t\t\t\tfor ( var a = 0; a < anim.mNumChannels; ++ a ) {\n\n\t\t\t\t\tanim.mChannels[ a ] = new aiNodeAnim();\n\t\t\t\t\tReadBinaryNodeAnim( stream, anim.mChannels[ a ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction ReadBinaryTexture( stream, tex ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AITEXTURE );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\ttex.mWidth = Read_unsigned_int( stream );\n\t\t\ttex.mHeight = Read_unsigned_int( stream );\n\t\t\tstream.ReadBytes( tex.achFormatHint, 1, 4 );\n\n\t\t\tif ( ! shortened ) {\n\n\t\t\t\tif ( ! tex.mHeight ) {\n\n\t\t\t\t\ttex.pcData = [];\n\t\t\t\t\tstream.ReadBytes( tex.pcData, 1, tex.mWidth );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttex.pcData = [];\n\t\t\t\t\tstream.ReadBytes( tex.pcData, 1, tex.mWidth * tex.mHeight * 4 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction ReadBinaryLight( stream, l ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AILIGHT );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tl.mName = Read_aiString( stream );\n\t\t\tl.mType = Read_unsigned_int( stream );\n\n\t\t\tif ( l.mType != aiLightSource_DIRECTIONAL ) {\n\n\t\t\t\tl.mAttenuationConstant = readFloat( stream );\n\t\t\t\tl.mAttenuationLinear = readFloat( stream );\n\t\t\t\tl.mAttenuationQuadratic = readFloat( stream );\n\n\t\t\t}\n\n\t\t\tl.mColorDiffuse = Read_aiColor3D( stream );\n\t\t\tl.mColorSpecular = Read_aiColor3D( stream );\n\t\t\tl.mColorAmbient = Read_aiColor3D( stream );\n\n\t\t\tif ( l.mType == aiLightSource_SPOT ) {\n\n\t\t\t\tl.mAngleInnerCone = readFloat( stream );\n\t\t\t\tl.mAngleOuterCone = readFloat( stream );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction ReadBinaryCamera( stream, cam ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AICAMERA );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tcam.mName = Read_aiString( stream );\n\t\t\tcam.mPosition = Read_aiVector3D( stream );\n\t\t\tcam.mLookAt = Read_aiVector3D( stream );\n\t\t\tcam.mUp = Read_aiVector3D( stream );\n\t\t\tcam.mHorizontalFOV = readFloat( stream );\n\t\t\tcam.mClipPlaneNear = readFloat( stream );\n\t\t\tcam.mClipPlaneFar = readFloat( stream );\n\t\t\tcam.mAspect = readFloat( stream );\n\n\t\t}\n\n\t\tfunction ReadBinaryScene( stream, scene ) {\n\n\t\t\tvar chunkID = Read_uint32_t( stream );\n\t\t\tai_assert( chunkID == ASSBIN_CHUNK_AISCENE );\n\t\t\t/*uint32_t size =*/\n\t\t\tRead_uint32_t( stream );\n\t\t\tscene.mFlags = Read_unsigned_int( stream );\n\t\t\tscene.mNumMeshes = Read_unsigned_int( stream );\n\t\t\tscene.mNumMaterials = Read_unsigned_int( stream );\n\t\t\tscene.mNumAnimations = Read_unsigned_int( stream );\n\t\t\tscene.mNumTextures = Read_unsigned_int( stream );\n\t\t\tscene.mNumLights = Read_unsigned_int( stream );\n\t\t\tscene.mNumCameras = Read_unsigned_int( stream );\n\t\t\t// Read node graph\n\t\t\tscene.mRootNode = new aiNode();\n\t\t\tscene.mRootNode = ReadBinaryNode( stream, null, 0 );\n\t\t\t// Read all meshes\n\t\t\tif ( scene.mNumMeshes ) {\n\n\t\t\t\tscene.mMeshes = [];\n\n\t\t\t\tfor ( var i = 0; i < scene.mNumMeshes; ++ i ) {\n\n\t\t\t\t\tscene.mMeshes[ i ] = new aiMesh();\n\t\t\t\t\tReadBinaryMesh( stream, scene.mMeshes[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Read materials\n\t\t\tif ( scene.mNumMaterials ) {\n\n\t\t\t\tscene.mMaterials = [];\n\n\t\t\t\tfor ( var i = 0; i < scene.mNumMaterials; ++ i ) {\n\n\t\t\t\t\tscene.mMaterials[ i ] = new aiMaterial();\n\t\t\t\t\tReadBinaryMaterial( stream, scene.mMaterials[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Read all animations\n\t\t\tif ( scene.mNumAnimations ) {\n\n\t\t\t\tscene.mAnimations = [];\n\n\t\t\t\tfor ( var i = 0; i < scene.mNumAnimations; ++ i ) {\n\n\t\t\t\t\tscene.mAnimations[ i ] = new aiAnimation();\n\t\t\t\t\tReadBinaryAnim( stream, scene.mAnimations[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Read all textures\n\t\t\tif ( scene.mNumTextures ) {\n\n\t\t\t\tscene.mTextures = [];\n\n\t\t\t\tfor ( var i = 0; i < scene.mNumTextures; ++ i ) {\n\n\t\t\t\t\tscene.mTextures[ i ] = new aiTexture();\n\t\t\t\t\tReadBinaryTexture( stream, scene.mTextures[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Read lights\n\t\t\tif ( scene.mNumLights ) {\n\n\t\t\t\tscene.mLights = [];\n\n\t\t\t\tfor ( var i = 0; i < scene.mNumLights; ++ i ) {\n\n\t\t\t\t\tscene.mLights[ i ] = new aiLight();\n\t\t\t\t\tReadBinaryLight( stream, scene.mLights[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Read cameras\n\t\t\tif ( scene.mNumCameras ) {\n\n\t\t\t\tscene.mCameras = [];\n\n\t\t\t\tfor ( var i = 0; i < scene.mNumCameras; ++ i ) {\n\n\t\t\t\t\tscene.mCameras[ i ] = new aiCamera();\n\t\t\t\t\tReadBinaryCamera( stream, scene.mCameras[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar aiOrigin_CUR = 0;\n\t\tvar aiOrigin_BEG = 1;\n\n\t\tfunction extendStream( stream ) {\n\n\t\t\tstream.readOffset = 0;\n\t\t\tstream.Seek = function ( off, ori ) {\n\n\t\t\t\tif ( ori == aiOrigin_CUR ) {\n\n\t\t\t\t\tstream.readOffset += off;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ori == aiOrigin_BEG ) {\n\n\t\t\t\t\tstream.readOffset = off;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tstream.ReadBytes = function ( buff, size, n ) {\n\n\t\t\t\tvar bytes = size * n;\n\t\t\t\tfor ( var i = 0; i < bytes; i ++ )\n\t\t\t\t\tbuff[ i ] = Read_uint8_t( this );\n\n\t\t\t};\n\n\t\t\tstream.subArray32 = function ( start, end ) {\n\n\t\t\t\tvar buff = this.buffer;\n\t\t\t\tvar newbuff = buff.slice( start, end );\n\t\t\t\treturn new Float32Array( newbuff );\n\n\t\t\t};\n\n\t\t\tstream.subArrayUint16 = function ( start, end ) {\n\n\t\t\t\tvar buff = this.buffer;\n\t\t\t\tvar newbuff = buff.slice( start, end );\n\t\t\t\treturn new Uint16Array( newbuff );\n\n\t\t\t};\n\n\t\t\tstream.subArrayUint8 = function ( start, end ) {\n\n\t\t\t\tvar buff = this.buffer;\n\t\t\t\tvar newbuff = buff.slice( start, end );\n\t\t\t\treturn new Uint8Array( newbuff );\n\n\t\t\t};\n\n\t\t\tstream.subArrayUint32 = function ( start, end ) {\n\n\t\t\t\tvar buff = this.buffer;\n\t\t\t\tvar newbuff = buff.slice( start, end );\n\t\t\t\treturn new Uint32Array( newbuff );\n\n\t\t\t};\n\n\t\t}\n\n\t\tvar shortened, compressed;\n\n\t\tfunction InternReadFile( pFiledata ) {\n\n\t\t\tvar pScene = new aiScene();\n\t\t\tvar stream = new DataView( pFiledata );\n\t\t\textendStream( stream );\n\t\t\tstream.Seek( 44, aiOrigin_CUR ); // signature\n\t\t\t/*unsigned int versionMajor =*/\n\t\t\tpScene.versionMajor = Read_unsigned_int( stream );\n\t\t\t/*unsigned int versionMinor =*/\n\t\t\tpScene.versionMinor = Read_unsigned_int( stream );\n\t\t\t/*unsigned int versionRevision =*/\n\t\t\tpScene.versionRevision = Read_unsigned_int( stream );\n\t\t\t/*unsigned int compileFlags =*/\n\t\t\tpScene.compileFlags = Read_unsigned_int( stream );\n\t\t\tshortened = Read_uint16_t( stream ) > 0;\n\t\t\tcompressed = Read_uint16_t( stream ) > 0;\n\t\t\tif ( shortened )\n\t\t\t\tthrow 'Shortened binaries are not supported!';\n\t\t\tstream.Seek( 256, aiOrigin_CUR ); // original filename\n\t\t\tstream.Seek( 128, aiOrigin_CUR ); // options\n\t\t\tstream.Seek( 64, aiOrigin_CUR ); // padding\n\t\t\tif ( compressed ) {\n\n\t\t\t\tvar uncompressedSize = Read_uint32_t( stream );\n\t\t\t\tvar compressedSize = stream.FileSize() - stream.Tell();\n\t\t\t\tvar compressedData = [];\n\t\t\t\tstream.Read( compressedData, 1, compressedSize );\n\t\t\t\tvar uncompressedData = [];\n\t\t\t\tuncompress( uncompressedData, uncompressedSize, compressedData, compressedSize ); // eslint-disable-line no-undef\n\t\t\t\tvar buff = new ArrayBuffer( uncompressedData );\n\t\t\t\tReadBinaryScene( buff, pScene );\n\n\t\t\t} else {\n\n\t\t\t\tReadBinaryScene( stream, pScene );\n\n\t\t\t}\n\n\t\t\treturn pScene.toTHREE();\n\n\t\t}\n\n\t\treturn InternReadFile( buffer );\n\n\t}\n\n} );\n\nexport { AssimpLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/BVHLoader.js",
    "content": "import {\n\tAnimationClip,\n\tBone,\n\tFileLoader,\n\tLoader,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tSkeleton,\n\tVector3,\n\tVectorKeyframeTrack\n} from '../../../build/three.module.js';\n\n/**\n * Description: reads BVH files and outputs a single Skeleton and an AnimationClip\n *\n * Currently only supports bvh files containing a single root.\n *\n */\n\nvar BVHLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.animateBonePositions = true;\n\tthis.animateBoneRotations = true;\n\n};\n\nBVHLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: BVHLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( text ) {\n\n\t\t/*\n\t\t\treads a string array (lines) from a BVH file\n\t\t\tand outputs a skeleton structure including motion data\n\n\t\t\treturns thee root node:\n\t\t\t{ name: '', channels: [], children: [] }\n\t\t*/\n\t\tfunction readBvh( lines ) {\n\n\t\t\t// read model structure\n\n\t\t\tif ( nextLine( lines ) !== 'HIERARCHY' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: HIERARCHY expected.' );\n\n\t\t\t}\n\n\t\t\tvar list = []; // collects flat array of all bones\n\t\t\tvar root = readNode( lines, nextLine( lines ), list );\n\n\t\t\t// read motion data\n\n\t\t\tif ( nextLine( lines ) !== 'MOTION' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: MOTION expected.' );\n\n\t\t\t}\n\n\t\t\t// number of frames\n\n\t\t\tvar tokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\tvar numFrames = parseInt( tokens[ 1 ] );\n\n\t\t\tif ( isNaN( numFrames ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Failed to read number of frames.' );\n\n\t\t\t}\n\n\t\t\t// frame time\n\n\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\tvar frameTime = parseFloat( tokens[ 2 ] );\n\n\t\t\tif ( isNaN( frameTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Failed to read frame time.' );\n\n\t\t\t}\n\n\t\t\t// read frame data line by line\n\n\t\t\tfor ( var i = 0; i < numFrames; i ++ ) {\n\n\t\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\t\treadFrameData( tokens, i * frameTime, root );\n\n\t\t\t}\n\n\t\t\treturn list;\n\n\t\t}\n\n\t\t/*\n\t\t\tRecursively reads data from a single frame into the bone hierarchy.\n\t\t\tThe passed bone hierarchy has to be structured in the same order as the BVH file.\n\t\t\tkeyframe data is stored in bone.frames.\n\n\t\t\t- data: splitted string array (frame values), values are shift()ed so\n\t\t\tthis should be empty after parsing the whole hierarchy.\n\t\t\t- frameTime: playback time for this keyframe.\n\t\t\t- bone: the bone to read frame data from.\n\t\t*/\n\t\tfunction readFrameData( data, frameTime, bone ) {\n\n\t\t\t// end sites have no motion data\n\n\t\t\tif ( bone.type === 'ENDSITE' ) return;\n\n\t\t\t// add keyframe\n\n\t\t\tvar keyframe = {\n\t\t\t\ttime: frameTime,\n\t\t\t\tposition: new Vector3(),\n\t\t\t\trotation: new Quaternion()\n\t\t\t};\n\n\t\t\tbone.frames.push( keyframe );\n\n\t\t\tvar quat = new Quaternion();\n\n\t\t\tvar vx = new Vector3( 1, 0, 0 );\n\t\t\tvar vy = new Vector3( 0, 1, 0 );\n\t\t\tvar vz = new Vector3( 0, 0, 1 );\n\n\t\t\t// parse values for each channel in node\n\n\t\t\tfor ( var i = 0; i < bone.channels.length; i ++ ) {\n\n\t\t\t\tswitch ( bone.channels[ i ] ) {\n\n\t\t\t\t\tcase 'Xposition':\n\t\t\t\t\t\tkeyframe.position.x = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Yposition':\n\t\t\t\t\t\tkeyframe.position.y = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Zposition':\n\t\t\t\t\t\tkeyframe.position.z = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Xrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vx, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Yrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vy, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Zrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vz, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.BVHLoader: Invalid channel type.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// parse child nodes\n\n\t\t\tfor ( var i = 0; i < bone.children.length; i ++ ) {\n\n\t\t\t\treadFrameData( data, frameTime, bone.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t Recursively parses the HIERACHY section of the BVH file\n\n\t\t - lines: all lines of the file. lines are consumed as we go along.\n\t\t - firstline: line containing the node type and name e.g. 'JOINT hip'\n\t\t - list: collects a flat list of nodes\n\n\t\t returns: a BVH node including children\n\t\t*/\n\t\tfunction readNode( lines, firstline, list ) {\n\n\t\t\tvar node = { name: '', type: '', frames: [] };\n\t\t\tlist.push( node );\n\n\t\t\t// parse node type and name\n\n\t\t\tvar tokens = firstline.split( /[\\s]+/ );\n\n\t\t\tif ( tokens[ 0 ].toUpperCase() === 'END' && tokens[ 1 ].toUpperCase() === 'SITE' ) {\n\n\t\t\t\tnode.type = 'ENDSITE';\n\t\t\t\tnode.name = 'ENDSITE'; // bvh end sites have no name\n\n\t\t\t} else {\n\n\t\t\t\tnode.name = tokens[ 1 ];\n\t\t\t\tnode.type = tokens[ 0 ].toUpperCase();\n\n\t\t\t}\n\n\t\t\tif ( nextLine( lines ) !== '{' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected opening { after type & name' );\n\n\t\t\t}\n\n\t\t\t// parse OFFSET\n\n\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\n\t\t\tif ( tokens[ 0 ] !== 'OFFSET' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected OFFSET but got: ' + tokens[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( tokens.length !== 4 ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Invalid number of values for OFFSET.' );\n\n\t\t\t}\n\n\t\t\tvar offset = new Vector3(\n\t\t\t\tparseFloat( tokens[ 1 ] ),\n\t\t\t\tparseFloat( tokens[ 2 ] ),\n\t\t\t\tparseFloat( tokens[ 3 ] )\n\t\t\t);\n\n\t\t\tif ( isNaN( offset.x ) || isNaN( offset.y ) || isNaN( offset.z ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Invalid values of OFFSET.' );\n\n\t\t\t}\n\n\t\t\tnode.offset = offset;\n\n\t\t\t// parse CHANNELS definitions\n\n\t\t\tif ( node.type !== 'ENDSITE' ) {\n\n\t\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\n\t\t\t\tif ( tokens[ 0 ] !== 'CHANNELS' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected CHANNELS definition.' );\n\n\t\t\t\t}\n\n\t\t\t\tvar numChannels = parseInt( tokens[ 1 ] );\n\t\t\t\tnode.channels = tokens.splice( 2, numChannels );\n\t\t\t\tnode.children = [];\n\n\t\t\t}\n\n\t\t\t// read children\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tvar line = nextLine( lines );\n\n\t\t\t\tif ( line === '}' ) {\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnode.children.push( readNode( lines, line, list ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t\trecursively converts the internal bvh node structure to a Bone hierarchy\n\n\t\t\tsource: the bvh root node\n\t\t\tlist: pass an empty array, collects a flat list of all converted THREE.Bones\n\n\t\t\treturns the root Bone\n\t\t*/\n\t\tfunction toTHREEBone( source, list ) {\n\n\t\t\tvar bone = new Bone();\n\t\t\tlist.push( bone );\n\n\t\t\tbone.position.add( source.offset );\n\t\t\tbone.name = source.name;\n\n\t\t\tif ( source.type !== 'ENDSITE' ) {\n\n\t\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\t\tbone.add( toTHREEBone( source.children[ i ], list ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bone;\n\n\t\t}\n\n\t\t/*\n\t\t\tbuilds a AnimationClip from the keyframe data saved in each bone.\n\n\t\t\tbone: bvh root node\n\n\t\t\treturns: a AnimationClip containing position and quaternion tracks\n\t\t*/\n\t\tfunction toTHREEAnimation( bones ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\t// create a position and quaternion animation track for each node\n\n\t\t\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tvar bone = bones[ i ];\n\n\t\t\t\tif ( bone.type === 'ENDSITE' )\n\t\t\t\t\tcontinue;\n\n\t\t\t\t// track data\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar positions = [];\n\t\t\t\tvar rotations = [];\n\n\t\t\t\tfor ( var j = 0; j < bone.frames.length; j ++ ) {\n\n\t\t\t\t\tvar frame = bone.frames[ j ];\n\n\t\t\t\t\ttimes.push( frame.time );\n\n\t\t\t\t\t// the animation system animates the position property,\n\t\t\t\t\t// so we have to add the joint offset to all values\n\n\t\t\t\t\tpositions.push( frame.position.x + bone.offset.x );\n\t\t\t\t\tpositions.push( frame.position.y + bone.offset.y );\n\t\t\t\t\tpositions.push( frame.position.z + bone.offset.z );\n\n\t\t\t\t\trotations.push( frame.rotation.x );\n\t\t\t\t\trotations.push( frame.rotation.y );\n\t\t\t\t\trotations.push( frame.rotation.z );\n\t\t\t\t\trotations.push( frame.rotation.w );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.animateBonePositions ) {\n\n\t\t\t\t\ttracks.push( new VectorKeyframeTrack( '.bones[' + bone.name + '].position', times, positions ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.animateBoneRotations ) {\n\n\t\t\t\t\ttracks.push( new QuaternionKeyframeTrack( '.bones[' + bone.name + '].quaternion', times, rotations ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( 'animation', - 1, tracks );\n\n\t\t}\n\n\t\t/*\n\t\t\treturns the next non-empty line in lines\n\t\t*/\n\t\tfunction nextLine( lines ) {\n\n\t\t\tvar line;\n\t\t\t// skip empty lines\n\t\t\twhile ( ( line = lines.shift().trim() ).length === 0 ) { }\n\n\t\t\treturn line;\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\tvar lines = text.split( /[\\r\\n]+/g );\n\n\t\tvar bones = readBvh( lines );\n\n\t\tvar threeBones = [];\n\t\ttoTHREEBone( bones[ 0 ], threeBones );\n\n\t\tvar threeClip = toTHREEAnimation( bones );\n\n\t\treturn {\n\t\t\tskeleton: new Skeleton( threeBones ),\n\t\t\tclip: threeClip\n\t\t};\n\n\t}\n\n} );\n\nexport { BVHLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/BasisTextureLoader.js",
    "content": "import {\n\tCompressedTexture,\n\tFileLoader,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLoader,\n\tRGBA_ASTC_4x4_Format,\n\tRGBA_BPTC_Format,\n\tRGBA_PVRTC_4BPPV1_Format,\n\tRGB_ETC1_Format,\n\tRGB_PVRTC_4BPPV1_Format,\n\tUnsignedByteType\n} from '../../../build/three.module.js';\n\n/**\n * Loader for Basis Universal GPU Texture Codec.\n *\n * Basis Universal is a \"supercompressed\" GPU texture and texture video\n * compression system that outputs a highly compressed intermediate file format\n * (.basis) that can be quickly transcoded to a wide variety of GPU texture\n * compression formats.\n *\n * This loader parallelizes the transcoding process across a configurable number\n * of web workers, before transferring the transcoded compressed texture back\n * to the main thread.\n */\nvar BasisTextureLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.transcoderPath = '';\n\tthis.transcoderBinary = null;\n\tthis.transcoderPending = null;\n\n\tthis.workerLimit = 4;\n\tthis.workerPool = [];\n\tthis.workerNextTaskID = 1;\n\tthis.workerSourceURL = '';\n\tthis.workerConfig = {\n\t\tformat: null,\n\t\tastcSupported: false,\n\t\tbptcSupported: false,\n\t\tetcSupported: false,\n\t\tdxtSupported: false,\n\t\tpvrtcSupported: false,\n\t};\n\n};\n\nBasisTextureLoader.taskCache = new WeakMap();\n\nBasisTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: BasisTextureLoader,\n\n\tsetTranscoderPath: function ( path ) {\n\n\t\tthis.transcoderPath = path;\n\n\t\treturn this;\n\n\t},\n\n\tsetWorkerLimit: function ( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t},\n\n\tdetectSupport: function ( renderer ) {\n\n\t\tvar config = this.workerConfig;\n\n\t\tconfig.astcSupported = renderer.extensions.has( 'WEBGL_compressed_texture_astc' );\n\t\tconfig.bptcSupported = renderer.extensions.has( 'EXT_texture_compression_bptc' );\n\t\tconfig.etcSupported = renderer.extensions.has( 'WEBGL_compressed_texture_etc1' );\n\t\tconfig.dxtSupported = renderer.extensions.has( 'WEBGL_compressed_texture_s3tc' );\n\t\tconfig.pvrtcSupported = renderer.extensions.has( 'WEBGL_compressed_texture_pvrtc' )\n\t\t\t|| renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\n\t\tif ( config.astcSupported ) {\n\n\t\t\tconfig.format = BasisTextureLoader.BASIS_FORMAT.cTFASTC_4x4;\n\n\t\t} else if ( config.bptcSupported ) {\n\n\t\t\tconfig.format = BasisTextureLoader.BASIS_FORMAT.cTFBC7_M5;\n\n\t\t} else if ( config.dxtSupported ) {\n\n\t\t\tconfig.format = BasisTextureLoader.BASIS_FORMAT.cTFBC3;\n\n\t\t} else if ( config.pvrtcSupported ) {\n\n\t\t\tconfig.format = BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA;\n\n\t\t} else if ( config.etcSupported ) {\n\n\t\t\tconfig.format = BasisTextureLoader.BASIS_FORMAT.cTFETC1;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.BasisTextureLoader: No suitable compressed texture format found.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t\t// again from this thread.\n\t\t\tif ( BasisTextureLoader.taskCache.has( buffer ) ) {\n\n\t\t\t\tvar cachedTask = BasisTextureLoader.taskCache.get( buffer );\n\n\t\t\t\treturn cachedTask.promise.then( onLoad ).catch( onError );\n\n\t\t\t}\n\n\t\t\tthis._createTexture( buffer, url )\n\t\t\t\t.then( onLoad )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\t/**\n\t * @param\t{ArrayBuffer} buffer\n\t * @param\t{string} url\n\t * @return {Promise<CompressedTexture>}\n\t */\n\t_createTexture: function ( buffer, url ) {\n\n\t\tvar worker;\n\t\tvar taskID;\n\n\t\tvar taskCost = buffer.byteLength;\n\n\t\tvar texturePending = this._allocateWorker( taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\t\t\t\ttaskID = this.workerNextTaskID ++;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'transcode', id: taskID, buffer }, [ buffer ] );\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => {\n\n\t\t\t\tvar config = this.workerConfig;\n\n\t\t\t\tvar { width, height, mipmaps, format } = message;\n\n\t\t\t\tvar texture;\n\n\t\t\t\tswitch ( format ) {\n\n\t\t\t\t\tcase BasisTextureLoader.BASIS_FORMAT.cTFASTC_4x4:\n\t\t\t\t\t\ttexture = new CompressedTexture( mipmaps, width, height, RGBA_ASTC_4x4_Format );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BasisTextureLoader.BASIS_FORMAT.cTFBC7_M5:\n\t\t\t\t\t\ttexture = new CompressedTexture( mipmaps, width, height, RGBA_BPTC_Format );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BasisTextureLoader.BASIS_FORMAT.cTFBC1:\n\t\t\t\t\tcase BasisTextureLoader.BASIS_FORMAT.cTFBC3:\n\t\t\t\t\t\ttexture = new CompressedTexture( mipmaps, width, height, BasisTextureLoader.DXT_FORMAT_MAP[ config.format ], UnsignedByteType );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BasisTextureLoader.BASIS_FORMAT.cTFETC1:\n\t\t\t\t\t\ttexture = new CompressedTexture( mipmaps, width, height, RGB_ETC1_Format );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGB:\n\t\t\t\t\t\ttexture = new CompressedTexture( mipmaps, width, height, RGB_PVRTC_4BPPV1_Format );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA:\n\t\t\t\t\t\ttexture = new CompressedTexture( mipmaps, width, height, RGBA_PVRTC_4BPPV1_Format );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'THREE.BasisTextureLoader: No supported format available.' );\n\n\t\t\t\t}\n\n\t\t\t\ttexture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;\n\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\treturn texture;\n\n\t\t\t} );\n\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\ttexturePending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tworker._taskLoad -= taskCost;\n\t\t\t\t\tdelete worker._callbacks[ taskID ];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\tBasisTextureLoader.taskCache.set( buffer, {\n\n\t\t\turl: url,\n\t\t\tpromise: texturePending\n\n\t\t} );\n\n\t\treturn texturePending;\n\n\t},\n\n\t_initTranscoder: function () {\n\n\t\tif ( ! this.transcoderPending ) {\n\n\t\t\t// Load transcoder wrapper.\n\t\t\tvar jsLoader = new FileLoader( this.manager );\n\t\t\tjsLoader.setPath( this.transcoderPath );\n\t\t\tjsLoader.setWithCredentials( this.withCredentials );\n\t\t\tvar jsContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tjsLoader.load( 'basis_transcoder.js', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\t// Load transcoder WASM binary.\n\t\t\tvar binaryLoader = new FileLoader( this.manager );\n\t\t\tbinaryLoader.setPath( this.transcoderPath );\n\t\t\tbinaryLoader.setResponseType( 'arraybuffer' );\n\t\t\tbinaryLoader.setWithCredentials( this.withCredentials );\n\t\t\tvar binaryContent = new Promise( ( resolve, reject ) => {\n\n\t\t\t\tbinaryLoader.load( 'basis_transcoder.wasm', resolve, undefined, reject );\n\n\t\t\t} );\n\n\t\t\tthis.transcoderPending = Promise.all( [ jsContent, binaryContent ] )\n\t\t\t\t.then( ( [ jsContent, binaryContent ] ) => {\n\n\t\t\t\t\tvar fn = BasisTextureLoader.BasisWorker.toString();\n\n\t\t\t\t\tvar body = [\n\t\t\t\t\t\t'/* basis_transcoder.js */',\n\t\t\t\t\t\tjsContent,\n\t\t\t\t\t\t'/* worker */',\n\t\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t\t].join( '\\n' );\n\n\t\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\t\t\t\t\tthis.transcoderBinary = binaryContent;\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\treturn this.transcoderPending;\n\n\t},\n\n\t_allocateWorker: function ( taskCost ) {\n\n\t\treturn this._initTranscoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tvar worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( {\n\t\t\t\t\ttype: 'init',\n\t\t\t\t\tconfig: this.workerConfig,\n\t\t\t\t\ttranscoderBinary: this.transcoderBinary,\n\t\t\t\t} );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tvar message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'transcode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.BasisTextureLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tvar worker = this.workerPool[ this.workerPool.length - 1 ];\n\n\t\t\tworker._taskLoad += taskCost;\n\n\t\t\treturn worker;\n\n\t\t} );\n\n\t},\n\n\tdispose: function () {\n\n\t\tfor ( var i = 0; i < this.workerPool.length; i ++ ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/* CONSTANTS */\n\nBasisTextureLoader.BASIS_FORMAT = {\n\tcTFETC1: 0,\n\tcTFETC2: 1,\n\tcTFBC1: 2,\n\tcTFBC3: 3,\n\tcTFBC4: 4,\n\tcTFBC5: 5,\n\tcTFBC7_M6_OPAQUE_ONLY: 6,\n\tcTFBC7_M5: 7,\n\tcTFPVRTC1_4_RGB: 8,\n\tcTFPVRTC1_4_RGBA: 9,\n\tcTFASTC_4x4: 10,\n\tcTFATC_RGB: 11,\n\tcTFATC_RGBA_INTERPOLATED_ALPHA: 12,\n\tcTFRGBA32: 13,\n\tcTFRGB565: 14,\n\tcTFBGR565: 15,\n\tcTFRGBA4444: 16,\n};\n\n// DXT formats, from:\n// http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\nBasisTextureLoader.DXT_FORMAT = {\n\tCOMPRESSED_RGB_S3TC_DXT1_EXT: 0x83F0,\n\tCOMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83F1,\n\tCOMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83F2,\n\tCOMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83F3,\n};\nBasisTextureLoader.DXT_FORMAT_MAP = {};\nBasisTextureLoader.DXT_FORMAT_MAP[ BasisTextureLoader.BASIS_FORMAT.cTFBC1 ] =\n\tBasisTextureLoader.DXT_FORMAT.COMPRESSED_RGB_S3TC_DXT1_EXT;\nBasisTextureLoader.DXT_FORMAT_MAP[ BasisTextureLoader.BASIS_FORMAT.cTFBC3 ] =\n\tBasisTextureLoader.DXT_FORMAT.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n/* WEB WORKER */\n\nBasisTextureLoader.BasisWorker = function () {\n\n\tvar config;\n\tvar transcoderPending;\n\tvar _BasisFile;\n\n\tonmessage = function ( e ) {\n\n\t\tvar message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tconfig = message.config;\n\t\t\t\tinit( message.transcoderBinary );\n\t\t\t\tbreak;\n\n\t\t\tcase 'transcode':\n\t\t\t\ttranscoderPending.then( () => {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tvar { width, height, hasAlpha, mipmaps, format } = transcode( message.buffer );\n\n\t\t\t\t\t\tvar buffers = [];\n\n\t\t\t\t\t\tfor ( var i = 0; i < mipmaps.length; ++ i ) {\n\n\t\t\t\t\t\t\tbuffers.push( mipmaps[ i ].data.buffer );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.postMessage( { type: 'transcode', id: message.id, width, height, hasAlpha, mipmaps, format }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction init( wasmBinary ) {\n\n\t\tvar BasisModule;\n\t\ttranscoderPending = new Promise( ( resolve ) => {\n\n\t\t\tBasisModule = { wasmBinary, onRuntimeInitialized: resolve };\n\t\t\tBASIS( BasisModule ); // eslint-disable-line no-undef\n\n\t\t} ).then( () => {\n\n\t\t\tvar { BasisFile, initializeBasis } = BasisModule;\n\n\t\t\t_BasisFile = BasisFile;\n\n\t\t\tinitializeBasis();\n\n\t\t} );\n\n\t}\n\n\tfunction transcode( buffer ) {\n\n\t\tvar basisFile = new _BasisFile( new Uint8Array( buffer ) );\n\n\t\tvar width = basisFile.getImageWidth( 0, 0 );\n\t\tvar height = basisFile.getImageHeight( 0, 0 );\n\t\tvar levels = basisFile.getNumLevels( 0 );\n\t\tvar hasAlpha = basisFile.getHasAlpha();\n\n\t\tfunction cleanup() {\n\n\t\t\tbasisFile.close();\n\t\t\tbasisFile.delete();\n\n\t\t}\n\n\t\tif ( ! hasAlpha ) {\n\n\t\t\tswitch ( config.format ) {\n\n\t\t\t\tcase 9: // Hardcoded: BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA\n\t\t\t\t\tconfig.format = 8; // Hardcoded: BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGB;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ! width || ! height || ! levels ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.BasisTextureLoader:\tInvalid .basis file' );\n\n\t\t}\n\n\t\tif ( ! basisFile.startTranscoding() ) {\n\n\t\t\tcleanup();\n\t\t\tthrow new Error( 'THREE.BasisTextureLoader: .startTranscoding failed' );\n\n\t\t}\n\n\t\tvar mipmaps = [];\n\n\t\tfor ( var mip = 0; mip < levels; mip ++ ) {\n\n\t\t\tvar mipWidth = basisFile.getImageWidth( 0, mip );\n\t\t\tvar mipHeight = basisFile.getImageHeight( 0, mip );\n\t\t\tvar dst = new Uint8Array( basisFile.getImageTranscodedSizeInBytes( 0, mip, config.format ) );\n\n\t\t\tvar status = basisFile.transcodeImage(\n\t\t\t\tdst,\n\t\t\t\t0,\n\t\t\t\tmip,\n\t\t\t\tconfig.format,\n\t\t\t\t0,\n\t\t\t\thasAlpha\n\t\t\t);\n\n\t\t\tif ( ! status ) {\n\n\t\t\t\tcleanup();\n\t\t\t\tthrow new Error( 'THREE.BasisTextureLoader: .transcodeImage failed.' );\n\n\t\t\t}\n\n\t\t\tmipmaps.push( { data: dst, width: mipWidth, height: mipHeight } );\n\n\t\t}\n\n\t\tcleanup();\n\n\t\treturn { width, height, hasAlpha, mipmaps, format: config.format };\n\n\t}\n\n};\n\nexport { BasisTextureLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/ColladaLoader.js",
    "content": "import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tScene,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTextureLoader,\n\tVector3,\n\tVectorKeyframeTrack\n} from '../../../build/three.module.js';\nimport { TGALoader } from '../loaders/TGALoader.js';\n\nvar ColladaLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nColladaLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: ColladaLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\toptions: {\n\n\t\tset convertUpAxis( value ) {\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: options.convertUpAxis() has been removed. Up axis is converted automatically.' );\n\n\t\t}\n\n\t},\n\n\tparse: function ( text, path ) {\n\n\t\tfunction getElementsByTagName( xml, name ) {\n\n\t\t\t// Non recursive xml.getElementsByTagName() ...\n\n\t\t\tvar array = [];\n\t\t\tvar childNodes = xml.childNodes;\n\n\t\t\tfor ( var i = 0, l = childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = childNodes[ i ];\n\n\t\t\t\tif ( child.nodeName === name ) {\n\n\t\t\t\t\tarray.push( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseStrings( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tvar parts = text.trim().split( /\\s+/ );\n\t\t\tvar array = new Array( parts.length );\n\n\t\t\tfor ( var i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parts[ i ];\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseFloats( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tvar parts = text.trim().split( /\\s+/ );\n\t\t\tvar array = new Array( parts.length );\n\n\t\t\tfor ( var i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseFloat( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseInts( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tvar parts = text.trim().split( /\\s+/ );\n\t\t\tvar array = new Array( parts.length );\n\n\t\t\tfor ( var i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseInt( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseId( text ) {\n\n\t\t\treturn text.substring( 1 );\n\n\t\t}\n\n\t\tfunction generateId() {\n\n\t\t\treturn 'three_default_' + ( count ++ );\n\n\t\t}\n\n\t\tfunction isEmpty( object ) {\n\n\t\t\treturn Object.keys( object ).length === 0;\n\n\t\t}\n\n\t\t// asset\n\n\t\tfunction parseAsset( xml ) {\n\n\t\t\treturn {\n\t\t\t\tunit: parseAssetUnit( getElementsByTagName( xml, 'unit' )[ 0 ] ),\n\t\t\t\tupAxis: parseAssetUpAxis( getElementsByTagName( xml, 'up_axis' )[ 0 ] )\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseAssetUnit( xml ) {\n\n\t\t\tif ( ( xml !== undefined ) && ( xml.hasAttribute( 'meter' ) === true ) ) {\n\n\t\t\t\treturn parseFloat( xml.getAttribute( 'meter' ) );\n\n\t\t\t} else {\n\n\t\t\t\treturn 1; // default 1 meter\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAssetUpAxis( xml ) {\n\n\t\t\treturn xml !== undefined ? xml.textContent : 'Y_UP';\n\n\t\t}\n\n\t\t// library\n\n\t\tfunction parseLibrary( xml, libraryName, nodeName, parser ) {\n\n\t\t\tvar library = getElementsByTagName( xml, libraryName )[ 0 ];\n\n\t\t\tif ( library !== undefined ) {\n\n\t\t\t\tvar elements = getElementsByTagName( library, nodeName );\n\n\t\t\t\tfor ( var i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\t\tparser( elements[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildLibrary( data, builder ) {\n\n\t\t\tfor ( var name in data ) {\n\n\t\t\t\tvar object = data[ name ];\n\t\t\t\tobject.build = builder( data[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// get\n\n\t\tfunction getBuild( data, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\t// animation\n\n\t\tfunction parseAnimation( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tsources: {},\n\t\t\t\tsamplers: {},\n\t\t\t\tchannels: {}\n\t\t\t};\n\n\t\t\tvar hasChildren = false;\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tvar id;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.samplers[ id ] = parseAnimationSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'channel':\n\t\t\t\t\t\tid = child.getAttribute( 'target' );\n\t\t\t\t\t\tdata.channels[ id ] = parseAnimationChannel( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'animation':\n\t\t\t\t\t\t// hierarchy of related animations\n\t\t\t\t\t\tparseAnimation( child );\n\t\t\t\t\t\thasChildren = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasChildren === false ) {\n\n\t\t\t\t// since 'id' attributes can be optional, it's necessary to generate a UUID for unqiue assignment\n\n\t\t\t\tlibrary.animations[ xml.getAttribute( 'id' ) || MathUtils.generateUUID() ] = data;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimationSampler( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tinputs: {},\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tvar id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tvar semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseAnimationChannel( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tvar target = xml.getAttribute( 'target' );\n\n\t\t\t// parsing SID Addressing Syntax\n\n\t\t\tvar parts = target.split( '/' );\n\n\t\t\tvar id = parts.shift();\n\t\t\tvar sid = parts.shift();\n\n\t\t\t// check selection syntax\n\n\t\t\tvar arraySyntax = ( sid.indexOf( '(' ) !== - 1 );\n\t\t\tvar memberSyntax = ( sid.indexOf( '.' ) !== - 1 );\n\n\t\t\tif ( memberSyntax ) {\n\n\t\t\t\t//  member selection access\n\n\t\t\t\tparts = sid.split( '.' );\n\t\t\t\tsid = parts.shift();\n\t\t\t\tdata.member = parts.shift();\n\n\t\t\t} else if ( arraySyntax ) {\n\n\t\t\t\t// array-access syntax. can be used to express fields in one-dimensional vectors or two-dimensional matrices.\n\n\t\t\t\tvar indices = sid.split( '(' );\n\t\t\t\tsid = indices.shift();\n\n\t\t\t\tfor ( var i = 0; i < indices.length; i ++ ) {\n\n\t\t\t\t\tindices[ i ] = parseInt( indices[ i ].replace( /\\)/, '' ) );\n\n\t\t\t\t}\n\n\t\t\t\tdata.indices = indices;\n\n\t\t\t}\n\n\t\t\tdata.id = id;\n\t\t\tdata.sid = sid;\n\n\t\t\tdata.arraySyntax = arraySyntax;\n\t\t\tdata.memberSyntax = memberSyntax;\n\n\t\t\tdata.sampler = parseId( xml.getAttribute( 'source' ) );\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildAnimation( data ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar channels = data.channels;\n\t\t\tvar samplers = data.samplers;\n\t\t\tvar sources = data.sources;\n\n\t\t\tfor ( var target in channels ) {\n\n\t\t\t\tif ( channels.hasOwnProperty( target ) ) {\n\n\t\t\t\t\tvar channel = channels[ target ];\n\t\t\t\t\tvar sampler = samplers[ channel.sampler ];\n\n\t\t\t\t\tvar inputId = sampler.inputs.INPUT;\n\t\t\t\t\tvar outputId = sampler.inputs.OUTPUT;\n\n\t\t\t\t\tvar inputSource = sources[ inputId ];\n\t\t\t\t\tvar outputSource = sources[ outputId ];\n\n\t\t\t\t\tvar animation = buildAnimationChannel( channel, inputSource, outputSource );\n\n\t\t\t\t\tcreateKeyframeTracks( animation, tracks );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction getAnimation( id ) {\n\n\t\t\treturn getBuild( library.animations[ id ], buildAnimation );\n\n\t\t}\n\n\t\tfunction buildAnimationChannel( channel, inputSource, outputSource ) {\n\n\t\t\tvar node = library.nodes[ channel.id ];\n\t\t\tvar object3D = getNode( node.id );\n\n\t\t\tvar transform = node.transforms[ channel.sid ];\n\t\t\tvar defaultMatrix = node.matrix.clone().transpose();\n\n\t\t\tvar time, stride;\n\t\t\tvar i, il, j, jl;\n\n\t\t\tvar data = {};\n\n\t\t\t// the collada spec allows the animation of data in various ways.\n\t\t\t// depending on the transform type (matrix, translate, rotate, scale), we execute different logic\n\n\t\t\tswitch ( transform ) {\n\n\t\t\t\tcase 'matrix':\n\n\t\t\t\t\tfor ( i = 0, il = inputSource.array.length; i < il; i ++ ) {\n\n\t\t\t\t\t\ttime = inputSource.array[ i ];\n\t\t\t\t\t\tstride = i * outputSource.stride;\n\n\t\t\t\t\t\tif ( data[ time ] === undefined ) data[ time ] = {};\n\n\t\t\t\t\t\tif ( channel.arraySyntax === true ) {\n\n\t\t\t\t\t\t\tvar value = outputSource.array[ stride ];\n\t\t\t\t\t\t\tvar index = channel.indices[ 0 ] + 4 * channel.indices[ 1 ];\n\n\t\t\t\t\t\t\tdata[ time ][ index ] = value;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( j = 0, jl = outputSource.stride; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tdata[ time ][ j ] = outputSource.array[ stride + j ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'scale':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tvar keyframes = prepareAnimationData( data, defaultMatrix );\n\n\t\t\tvar animation = {\n\t\t\t\tname: object3D.uuid,\n\t\t\t\tkeyframes: keyframes\n\t\t\t};\n\n\t\t\treturn animation;\n\n\t\t}\n\n\t\tfunction prepareAnimationData( data, defaultMatrix ) {\n\n\t\t\tvar keyframes = [];\n\n\t\t\t// transfer data into a sortable array\n\n\t\t\tfor ( var time in data ) {\n\n\t\t\t\tkeyframes.push( { time: parseFloat( time ), value: data[ time ] } );\n\n\t\t\t}\n\n\t\t\t// ensure keyframes are sorted by time\n\n\t\t\tkeyframes.sort( ascending );\n\n\t\t\t// now we clean up all animation data, so we can use them for keyframe tracks\n\n\t\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\t\ttransformAnimationData( keyframes, i, defaultMatrix.elements[ i ] );\n\n\t\t\t}\n\n\t\t\treturn keyframes;\n\n\t\t\t// array sort function\n\n\t\t\tfunction ascending( a, b ) {\n\n\t\t\t\treturn a.time - b.time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar position = new Vector3();\n\t\tvar scale = new Vector3();\n\t\tvar quaternion = new Quaternion();\n\n\t\tfunction createKeyframeTracks( animation, tracks ) {\n\n\t\t\tvar keyframes = animation.keyframes;\n\t\t\tvar name = animation.name;\n\n\t\t\tvar times = [];\n\t\t\tvar positionData = [];\n\t\t\tvar quaternionData = [];\n\t\t\tvar scaleData = [];\n\n\t\t\tfor ( var i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tvar keyframe = keyframes[ i ];\n\n\t\t\t\tvar time = keyframe.time;\n\t\t\t\tvar value = keyframe.value;\n\n\t\t\t\tmatrix.fromArray( value ).transpose();\n\t\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\t\ttimes.push( time );\n\t\t\t\tpositionData.push( position.x, position.y, position.z );\n\t\t\t\tquaternionData.push( quaternion.x, quaternion.y, quaternion.z, quaternion.w );\n\t\t\t\tscaleData.push( scale.x, scale.y, scale.z );\n\n\t\t\t}\n\n\t\t\tif ( positionData.length > 0 ) tracks.push( new VectorKeyframeTrack( name + '.position', times, positionData ) );\n\t\t\tif ( quaternionData.length > 0 ) tracks.push( new QuaternionKeyframeTrack( name + '.quaternion', times, quaternionData ) );\n\t\t\tif ( scaleData.length > 0 ) tracks.push( new VectorKeyframeTrack( name + '.scale', times, scaleData ) );\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction transformAnimationData( keyframes, property, defaultValue ) {\n\n\t\t\tvar keyframe;\n\n\t\t\tvar empty = true;\n\t\t\tvar i, l;\n\n\t\t\t// check, if values of a property are missing in our keyframes\n\n\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === undefined ) {\n\n\t\t\t\t\tkeyframe.value[ property ] = null; // mark as missing\n\n\t\t\t\t} else {\n\n\t\t\t\t\tempty = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( empty === true ) {\n\n\t\t\t\t// no values at all, so we set a default value\n\n\t\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\t\tkeyframe.value[ property ] = defaultValue;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// filling gaps\n\n\t\t\t\tcreateMissingKeyframes( keyframes, property );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction createMissingKeyframes( keyframes, property ) {\n\n\t\t\tvar prev, next;\n\n\t\t\tfor ( var i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tvar keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === null ) {\n\n\t\t\t\t\tprev = getPrev( keyframes, i, property );\n\t\t\t\t\tnext = getNext( keyframes, i, property );\n\n\t\t\t\t\tif ( prev === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = next.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( next === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = prev.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinterpolate( keyframe, prev, next, property );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getPrev( keyframes, i, property ) {\n\n\t\t\twhile ( i >= 0 ) {\n\n\t\t\t\tvar keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti --;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction getNext( keyframes, i, property ) {\n\n\t\t\twhile ( i < keyframes.length ) {\n\n\t\t\t\tvar keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction interpolate( key, prev, next, property ) {\n\n\t\t\tif ( ( next.time - prev.time ) === 0 ) {\n\n\t\t\t\tkey.value[ property ] = prev.value[ property ];\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tkey.value[ property ] = ( ( key.time - prev.time ) * ( next.value[ property ] - prev.value[ property ] ) / ( next.time - prev.time ) ) + prev.value[ property ];\n\n\t\t}\n\n\t\t// animation clips\n\n\t\tfunction parseAnimationClip( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'id' ) || 'default',\n\t\t\t\tstart: parseFloat( xml.getAttribute( 'start' ) || 0 ),\n\t\t\t\tend: parseFloat( xml.getAttribute( 'end' ) || 0 ),\n\t\t\t\tanimations: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_animation':\n\t\t\t\t\t\tdata.animations.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.clips[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildAnimationClip( data ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar name = data.name;\n\t\t\tvar duration = ( data.end - data.start ) || - 1;\n\t\t\tvar animations = data.animations;\n\n\t\t\tfor ( var i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\t\tvar animationTracks = getAnimation( animations[ i ] );\n\n\t\t\t\tfor ( var j = 0, jl = animationTracks.length; j < jl; j ++ ) {\n\n\t\t\t\t\ttracks.push( animationTracks[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( name, duration, tracks );\n\n\t\t}\n\n\t\tfunction getAnimationClip( id ) {\n\n\t\t\treturn getBuild( library.clips[ id ], buildAnimationClip );\n\n\t\t}\n\n\t\t// controller\n\n\t\tfunction parseController( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'skin':\n\t\t\t\t\t\t// there is exactly one skin per controller\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.skin = parseSkin( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'morph':\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Morph target animation not supported yet.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.controllers[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSkin( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tsources: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_shape_matrix':\n\t\t\t\t\t\tdata.bindShapeMatrix = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tvar id = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'joints':\n\t\t\t\t\t\tdata.joints = parseJoints( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertex_weights':\n\t\t\t\t\t\tdata.vertexWeights = parseVertexWeights( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseJoints( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tvar semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tvar id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseVertexWeights( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tvar semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tvar id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tvar offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = { id: id, offset: offset };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tdata.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tdata.v = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildController( data ) {\n\n\t\t\tvar build = {\n\t\t\t\tid: data.id\n\t\t\t};\n\n\t\t\tvar geometry = library.geometries[ build.id ];\n\n\t\t\tif ( data.skin !== undefined ) {\n\n\t\t\t\tbuild.skin = buildSkin( data.skin );\n\n\t\t\t\t// we enhance the 'sources' property of the corresponding geometry with our skin data\n\n\t\t\t\tgeometry.sources.skinIndices = build.skin.indices;\n\t\t\t\tgeometry.sources.skinWeights = build.skin.weights;\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildSkin( data ) {\n\n\t\t\tvar BONE_LIMIT = 4;\n\n\t\t\tvar build = {\n\t\t\t\tjoints: [], // this must be an array to preserve the joint order\n\t\t\t\tindices: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t},\n\t\t\t\tweights: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar sources = data.sources;\n\t\t\tvar vertexWeights = data.vertexWeights;\n\n\t\t\tvar vcount = vertexWeights.vcount;\n\t\t\tvar v = vertexWeights.v;\n\t\t\tvar jointOffset = vertexWeights.inputs.JOINT.offset;\n\t\t\tvar weightOffset = vertexWeights.inputs.WEIGHT.offset;\n\n\t\t\tvar jointSource = data.sources[ data.joints.inputs.JOINT ];\n\t\t\tvar inverseSource = data.sources[ data.joints.inputs.INV_BIND_MATRIX ];\n\n\t\t\tvar weights = sources[ vertexWeights.inputs.WEIGHT.id ].array;\n\t\t\tvar stride = 0;\n\n\t\t\tvar i, j, l;\n\n\t\t\t// procces skin data for each vertex\n\n\t\t\tfor ( i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\tvar jointCount = vcount[ i ]; // this is the amount of joints that affect a single vertex\n\t\t\t\tvar vertexSkinData = [];\n\n\t\t\t\tfor ( j = 0; j < jointCount; j ++ ) {\n\n\t\t\t\t\tvar skinIndex = v[ stride + jointOffset ];\n\t\t\t\t\tvar weightId = v[ stride + weightOffset ];\n\t\t\t\t\tvar skinWeight = weights[ weightId ];\n\n\t\t\t\t\tvertexSkinData.push( { index: skinIndex, weight: skinWeight } );\n\n\t\t\t\t\tstride += 2;\n\n\t\t\t\t}\n\n\t\t\t\t// we sort the joints in descending order based on the weights.\n\t\t\t\t// this ensures, we only procced the most important joints of the vertex\n\n\t\t\t\tvertexSkinData.sort( descending );\n\n\t\t\t\t// now we provide for each vertex a set of four index and weight values.\n\t\t\t\t// the order of the skin data matches the order of vertices\n\n\t\t\t\tfor ( j = 0; j < BONE_LIMIT; j ++ ) {\n\n\t\t\t\t\tvar d = vertexSkinData[ j ];\n\n\t\t\t\t\tif ( d !== undefined ) {\n\n\t\t\t\t\t\tbuild.indices.array.push( d.index );\n\t\t\t\t\t\tbuild.weights.array.push( d.weight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbuild.indices.array.push( 0 );\n\t\t\t\t\t\tbuild.weights.array.push( 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup bind matrix\n\n\t\t\tif ( data.bindShapeMatrix ) {\n\n\t\t\t\tbuild.bindMatrix = new Matrix4().fromArray( data.bindShapeMatrix ).transpose();\n\n\t\t\t} else {\n\n\t\t\t\tbuild.bindMatrix = new Matrix4().identity();\n\n\t\t\t}\n\n\t\t\t// process bones and inverse bind matrix data\n\n\t\t\tfor ( i = 0, l = jointSource.array.length; i < l; i ++ ) {\n\n\t\t\t\tvar name = jointSource.array[ i ];\n\t\t\t\tvar boneInverse = new Matrix4().fromArray( inverseSource.array, i * inverseSource.stride ).transpose();\n\n\t\t\t\tbuild.joints.push( { name: name, boneInverse: boneInverse } );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t\t// array sort function\n\n\t\t\tfunction descending( a, b ) {\n\n\t\t\t\treturn b.weight - a.weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getController( id ) {\n\n\t\t\treturn getBuild( library.controllers[ id ], buildController );\n\n\t\t}\n\n\t\t// image\n\n\t\tfunction parseImage( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tinit_from: getElementsByTagName( xml, 'init_from' )[ 0 ].textContent\n\t\t\t};\n\n\t\t\tlibrary.images[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildImage( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data.init_from;\n\n\t\t}\n\n\t\tfunction getImage( id ) {\n\n\t\t\tvar data = library.images[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildImage );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find image with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// effect\n\n\t\tfunction parseEffect( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'profile_COMMON':\n\t\t\t\t\t\tdata.profile = parseEffectProfileCOMMON( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.effects[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseEffectProfileCOMMON( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tsurfaces: {},\n\t\t\t\tsamplers: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'newparam':\n\t\t\t\t\t\tparseEffectNewparam( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tdata.extra = parseEffectExtra( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectNewparam( xml, data ) {\n\n\t\t\tvar sid = xml.getAttribute( 'sid' );\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'surface':\n\t\t\t\t\t\tdata.surfaces[ sid ] = parseEffectSurface( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler2D':\n\t\t\t\t\t\tdata.samplers[ sid ] = parseEffectSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectSurface( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'init_from':\n\t\t\t\t\t\tdata.init_from = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectSampler( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.source = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectTechnique( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'constant':\n\t\t\t\t\tcase 'lambert':\n\t\t\t\t\tcase 'blinn':\n\t\t\t\t\tcase 'phong':\n\t\t\t\t\t\tdata.type = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseEffectParameters( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameters( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\tcase 'ambient':\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectParameter( child );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\t\tdata[ child.nodeName ] = {\n\t\t\t\t\t\t\topaque: child.getAttribute( 'opaque' ),\n\t\t\t\t\t\t\tdata: parseEffectParameter( child )\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameter( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'float':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdata[ child.nodeName ] = { id: child.getAttribute( 'texture' ), extra: parseEffectParameterTexture( child ) };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTexture( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\ttechnique: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tparseEffectParameterTextureExtra( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtra( xml, data ) {\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tparseEffectParameterTextureExtraTechnique( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtraTechnique( xml, data ) {\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'repeatU':\n\t\t\t\t\tcase 'repeatV':\n\t\t\t\t\tcase 'offsetU':\n\t\t\t\t\tcase 'offsetV':\n\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'wrapU':\n\t\t\t\t\tcase 'wrapV':\n\n\t\t\t\t\t\t// some files have values for wrapU/wrapV which become NaN via parseInt\n\n\t\t\t\t\t\tif ( child.textContent.toUpperCase() === 'TRUE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 1;\n\n\t\t\t\t\t\t} else if ( child.textContent.toUpperCase() === 'FALSE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseInt( child.textContent );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectExtra( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectExtraTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectExtraTechnique( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'double_sided':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseInt( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildEffect( data ) {\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getEffect( id ) {\n\n\t\t\treturn getBuild( library.effects[ id ], buildEffect );\n\n\t\t}\n\n\t\t// material\n\n\t\tfunction parseMaterial( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_effect':\n\t\t\t\t\t\tdata.url = parseId( child.getAttribute( 'url' ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.materials[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction getTextureLoader( image ) {\n\n\t\t\tvar loader;\n\n\t\t\tvar extension = image.slice( ( image.lastIndexOf( '.' ) - 1 >>> 0 ) + 2 ); // http://www.jstips.co/en/javascript/get-file-extension/\n\t\t\textension = extension.toLowerCase();\n\n\t\t\tswitch ( extension ) {\n\n\t\t\t\tcase 'tga':\n\t\t\t\t\tloader = tgaLoader;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tloader = textureLoader;\n\n\t\t\t}\n\n\t\t\treturn loader;\n\n\t\t}\n\n\t\tfunction buildMaterial( data ) {\n\n\t\t\tvar effect = getEffect( data.url );\n\t\t\tvar technique = effect.profile.technique;\n\t\t\tvar extra = effect.profile.extra;\n\n\t\t\tvar material;\n\n\t\t\tswitch ( technique.type ) {\n\n\t\t\t\tcase 'phong':\n\t\t\t\tcase 'blinn':\n\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'lambert':\n\t\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tmaterial = new MeshBasicMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tmaterial.name = data.name || '';\n\n\t\t\tfunction getTexture( textureObject ) {\n\n\t\t\t\tvar sampler = effect.profile.samplers[ textureObject.id ];\n\t\t\t\tvar image = null;\n\n\t\t\t\t// get image\n\n\t\t\t\tif ( sampler !== undefined ) {\n\n\t\t\t\t\tvar surface = effect.profile.surfaces[ sampler.source ];\n\t\t\t\t\timage = getImage( surface.init_from );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530).' );\n\t\t\t\t\timage = getImage( textureObject.id );\n\n\t\t\t\t}\n\n\t\t\t\t// create texture if image is avaiable\n\n\t\t\t\tif ( image !== null ) {\n\n\t\t\t\t\tvar loader = getTextureLoader( image );\n\n\t\t\t\t\tif ( loader !== undefined ) {\n\n\t\t\t\t\t\tvar texture = loader.load( image );\n\n\t\t\t\t\t\tvar extra = textureObject.extra;\n\n\t\t\t\t\t\tif ( extra !== undefined && extra.technique !== undefined && isEmpty( extra.technique ) === false ) {\n\n\t\t\t\t\t\t\tvar technique = extra.technique;\n\n\t\t\t\t\t\t\ttexture.wrapS = technique.wrapU ? RepeatWrapping : ClampToEdgeWrapping;\n\t\t\t\t\t\t\ttexture.wrapT = technique.wrapV ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\t\t\t\t\t\ttexture.offset.set( technique.offsetU || 0, technique.offsetV || 0 );\n\t\t\t\t\t\t\ttexture.repeat.set( technique.repeatU || 1, technique.repeatV || 1 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\t\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Loader for texture %s not found.', image );\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t create texture with ID:', textureObject.id );\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar parameters = technique.parameters;\n\n\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\tvar parameter = parameters[ key ];\n\n\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\t\tif ( parameter.color ) material.color.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.map = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\t\tif ( parameter.color && material.specular ) material.specular.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.specularMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tif ( parameter.texture ) material.normalMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'ambient':\n\t\t\t\t\t\tif ( parameter.texture ) material.lightMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\tif ( parameter.float && material.shininess ) material.shininess = parameter.float;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\t\tif ( parameter.color && material.emissive ) material.emissive.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.emissiveMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar transparent = parameters[ 'transparent' ];\n\t\t\tvar transparency = parameters[ 'transparency' ];\n\n\t\t\t// <transparency> does not exist but <transparent>\n\n\t\t\tif ( transparency === undefined && transparent ) {\n\n\t\t\t\ttransparency = {\n\t\t\t\t\tfloat: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\t// <transparent> does not exist but <transparency>\n\n\t\t\tif ( transparent === undefined && transparency ) {\n\n\t\t\t\ttransparent = {\n\t\t\t\t\topaque: 'A_ONE',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcolor: [ 1, 1, 1, 1 ]\n\t\t\t\t\t} };\n\n\t\t\t}\n\n\t\t\tif ( transparent && transparency ) {\n\n\t\t\t\t// handle case if a texture exists but no color\n\n\t\t\t\tif ( transparent.data.texture ) {\n\n\t\t\t\t\t// we do not set an alpha map (see #13792)\n\n\t\t\t\t\tmaterial.transparent = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar color = transparent.data.color;\n\n\t\t\t\t\tswitch ( transparent.opaque ) {\n\n\t\t\t\t\t\tcase 'A_ONE':\n\t\t\t\t\t\t\tmaterial.opacity = color[ 3 ] * transparency.float;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'RGB_ZERO':\n\t\t\t\t\t\t\tmaterial.opacity = 1 - ( color[ 0 ] * transparency.float );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'A_ZERO':\n\t\t\t\t\t\t\tmaterial.opacity = 1 - ( color[ 3 ] * transparency.float );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'RGB_ONE':\n\t\t\t\t\t\t\tmaterial.opacity = color[ 0 ] * transparency.float;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Invalid opaque type \"%s\" of transparent tag.', transparent.opaque );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material.opacity < 1 ) material.transparent = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( extra !== undefined && extra.technique !== undefined && extra.technique.double_sided === 1 ) {\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction getMaterial( id ) {\n\n\t\t\treturn getBuild( library.materials[ id ], buildMaterial );\n\n\t\t}\n\n\t\t// camera\n\n\t\tfunction parseCamera( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'optics':\n\t\t\t\t\t\tdata.optics = parseCameraOptics( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.cameras[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseCameraOptics( xml ) {\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\treturn parseCameraTechnique( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {};\n\n\t\t}\n\n\t\tfunction parseCameraTechnique( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'perspective':\n\t\t\t\t\tcase 'orthographic':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseCameraParameters( child );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseCameraParameters( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'xfov':\n\t\t\t\t\tcase 'yfov':\n\t\t\t\t\tcase 'xmag':\n\t\t\t\t\tcase 'ymag':\n\t\t\t\t\tcase 'znear':\n\t\t\t\t\tcase 'zfar':\n\t\t\t\t\tcase 'aspect_ratio':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildCamera( data ) {\n\n\t\t\tvar camera;\n\n\t\t\tswitch ( data.optics.technique ) {\n\n\t\t\t\tcase 'perspective':\n\t\t\t\t\tcamera = new PerspectiveCamera(\n\t\t\t\t\t\tdata.optics.parameters.yfov,\n\t\t\t\t\t\tdata.optics.parameters.aspect_ratio,\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'orthographic':\n\t\t\t\t\tvar ymag = data.optics.parameters.ymag;\n\t\t\t\t\tvar xmag = data.optics.parameters.xmag;\n\t\t\t\t\tvar aspectRatio = data.optics.parameters.aspect_ratio;\n\n\t\t\t\t\txmag = ( xmag === undefined ) ? ( ymag * aspectRatio ) : xmag;\n\t\t\t\t\tymag = ( ymag === undefined ) ? ( xmag / aspectRatio ) : ymag;\n\n\t\t\t\t\txmag *= 0.5;\n\t\t\t\t\tymag *= 0.5;\n\n\t\t\t\t\tcamera = new OrthographicCamera(\n\t\t\t\t\t\t- xmag, xmag, ymag, - ymag, // left, right, top, bottom\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcamera.name = data.name || '';\n\n\t\t\treturn camera;\n\n\t\t}\n\n\t\tfunction getCamera( id ) {\n\n\t\t\tvar data = library.cameras[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildCamera );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find camera with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// light\n\n\t\tfunction parseLight( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tdata = parseLightTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.lights[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseLightTechnique( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'directional':\n\t\t\t\t\tcase 'point':\n\t\t\t\t\tcase 'spot':\n\t\t\t\t\tcase 'ambient':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseLightParameters( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseLightParameters( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.color = new Color().fromArray( array );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'falloff_angle':\n\t\t\t\t\t\tdata.falloffAngle = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'quadratic_attenuation':\n\t\t\t\t\t\tvar f = parseFloat( child.textContent );\n\t\t\t\t\t\tdata.distance = f ? Math.sqrt( 1 / f ) : 0;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildLight( data ) {\n\n\t\t\tvar light;\n\n\t\t\tswitch ( data.technique ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlight = new DirectionalLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlight = new PointLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlight = new SpotLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ambient':\n\t\t\t\t\tlight = new AmbientLight();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( data.parameters.color ) light.color.copy( data.parameters.color );\n\t\t\tif ( data.parameters.distance ) light.distance = data.parameters.distance;\n\n\t\t\treturn light;\n\n\t\t}\n\n\t\tfunction getLight( id ) {\n\n\t\t\tvar data = library.lights[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildLight );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find light with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// geometry\n\n\t\tfunction parseGeometry( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tsources: {},\n\t\t\t\tvertices: {},\n\t\t\t\tprimitives: []\n\t\t\t};\n\n\t\t\tvar mesh = getElementsByTagName( xml, 'mesh' )[ 0 ];\n\n\t\t\t// the following tags inside geometry are not supported yet (see https://github.com/mrdoob/three.js/pull/12606): convex_mesh, spline, brep\n\t\t\tif ( mesh === undefined ) return;\n\n\t\t\tfor ( var i = 0; i < mesh.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = mesh.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tvar id = child.getAttribute( 'id' );\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertices':\n\t\t\t\t\t\t// data.sources[ id ] = data.sources[ parseId( getElementsByTagName( child, 'input' )[ 0 ].getAttribute( 'source' ) ) ];\n\t\t\t\t\t\tdata.vertices = parseGeometryVertices( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polygons':\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unsupported primitive type: ', child.nodeName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tdata.primitives.push( parseGeometryPrimitive( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.geometries[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSource( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tarray: [],\n\t\t\t\tstride: 3\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'float_array':\n\t\t\t\t\t\tdata.array = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Name_array':\n\t\t\t\t\t\tdata.array = parseStrings( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tvar accessor = getElementsByTagName( child, 'accessor' )[ 0 ];\n\n\t\t\t\t\t\tif ( accessor !== undefined ) {\n\n\t\t\t\t\t\t\tdata.stride = parseInt( accessor.getAttribute( 'stride' ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryVertices( xml ) {\n\n\t\t\tvar data = {};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tdata[ child.getAttribute( 'semantic' ) ] = parseId( child.getAttribute( 'source' ) );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryPrimitive( xml ) {\n\n\t\t\tvar primitive = {\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tmaterial: xml.getAttribute( 'material' ),\n\t\t\t\tcount: parseInt( xml.getAttribute( 'count' ) ),\n\t\t\t\tinputs: {},\n\t\t\t\tstride: 0,\n\t\t\t\thasUV: false\n\t\t\t};\n\n\t\t\tfor ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tvar id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tvar semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tvar offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tvar set = parseInt( child.getAttribute( 'set' ) );\n\t\t\t\t\t\tvar inputname = ( set > 0 ? semantic + set : semantic );\n\t\t\t\t\t\tprimitive.inputs[ inputname ] = { id: id, offset: offset };\n\t\t\t\t\t\tprimitive.stride = Math.max( primitive.stride, offset + 1 );\n\t\t\t\t\t\tif ( semantic === 'TEXCOORD' ) primitive.hasUV = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tprimitive.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'p':\n\t\t\t\t\t\tprimitive.p = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn primitive;\n\n\t\t}\n\n\t\tfunction groupPrimitives( primitives ) {\n\n\t\t\tvar build = {};\n\n\t\t\tfor ( var i = 0; i < primitives.length; i ++ ) {\n\n\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\tif ( build[ primitive.type ] === undefined ) build[ primitive.type ] = [];\n\n\t\t\t\tbuild[ primitive.type ].push( primitive );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction checkUVCoordinates( primitives ) {\n\n\t\t\tvar count = 0;\n\n\t\t\tfor ( var i = 0, l = primitives.length; i < l; i ++ ) {\n\n\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\tif ( primitive.hasUV === true ) {\n\n\t\t\t\t\tcount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( count > 0 && count < primitives.length ) {\n\n\t\t\t\tprimitives.uvsNeedsFix = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildGeometry( data ) {\n\n\t\t\tvar build = {};\n\n\t\t\tvar sources = data.sources;\n\t\t\tvar vertices = data.vertices;\n\t\t\tvar primitives = data.primitives;\n\n\t\t\tif ( primitives.length === 0 ) return {};\n\n\t\t\t// our goal is to create one buffer geometry for a single type of primitives\n\t\t\t// first, we group all primitives by their type\n\n\t\t\tvar groupedPrimitives = groupPrimitives( primitives );\n\n\t\t\tfor ( var type in groupedPrimitives ) {\n\n\t\t\t\tvar primitiveType = groupedPrimitives[ type ];\n\n\t\t\t\t// second, ensure consistent uv coordinates for each type of primitives (polylist,triangles or lines)\n\n\t\t\t\tcheckUVCoordinates( primitiveType );\n\n\t\t\t\t// third, create a buffer geometry for each type of primitives\n\n\t\t\t\tbuild[ type ] = buildGeometryType( primitiveType, sources, vertices );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryType( primitives, sources, vertices ) {\n\n\t\t\tvar build = {};\n\n\t\t\tvar position = { array: [], stride: 0 };\n\t\t\tvar normal = { array: [], stride: 0 };\n\t\t\tvar uv = { array: [], stride: 0 };\n\t\t\tvar uv2 = { array: [], stride: 0 };\n\t\t\tvar color = { array: [], stride: 0 };\n\n\t\t\tvar skinIndex = { array: [], stride: 4 };\n\t\t\tvar skinWeight = { array: [], stride: 4 };\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\tvar materialKeys = [];\n\n\t\t\tvar start = 0;\n\n\t\t\tfor ( var p = 0; p < primitives.length; p ++ ) {\n\n\t\t\t\tvar primitive = primitives[ p ];\n\t\t\t\tvar inputs = primitive.inputs;\n\n\t\t\t\t// groups\n\n\t\t\t\tvar count = 0;\n\n\t\t\t\tswitch ( primitive.type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tcount = primitive.count * 2;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tcount = primitive.count * 3;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polylist':\n\n\t\t\t\t\t\tfor ( var g = 0; g < primitive.count; g ++ ) {\n\n\t\t\t\t\t\t\tvar vc = primitive.vcount[ g ];\n\n\t\t\t\t\t\t\tswitch ( vc ) {\n\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tcount += 3; // single triangle\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t\tcount += 6; // quad, subdivided into two triangles\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tcount += ( vc - 2 ) * 3; // polylist with more than four vertices\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknow primitive type:', primitive.type );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addGroup( start, count, p );\n\t\t\t\tstart += count;\n\n\t\t\t\t// material\n\n\t\t\t\tif ( primitive.material ) {\n\n\t\t\t\t\tmaterialKeys.push( primitive.material );\n\n\t\t\t\t}\n\n\t\t\t\t// geometry data\n\n\t\t\t\tfor ( var name in inputs ) {\n\n\t\t\t\t\tvar input = inputs[ name ];\n\n\t\t\t\t\tswitch ( name )\t{\n\n\t\t\t\t\t\tcase 'VERTEX':\n\t\t\t\t\t\t\tfor ( var key in vertices ) {\n\n\t\t\t\t\t\t\t\tvar id = vertices[ key ];\n\n\t\t\t\t\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\t\t\t\t\tcase 'POSITION':\n\t\t\t\t\t\t\t\t\t\tvar prevLength = position.array.length;\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, position.array );\n\t\t\t\t\t\t\t\t\t\tposition.stride = sources[ id ].stride;\n\n\t\t\t\t\t\t\t\t\t\tif ( sources.skinWeights && sources.skinIndices ) {\n\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinIndices, input.offset, skinIndex.array );\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinWeights, input.offset, skinWeight.array );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// see #3803\n\n\t\t\t\t\t\t\t\t\t\tif ( primitive.hasUV === false && primitives.uvsNeedsFix === true ) {\n\n\t\t\t\t\t\t\t\t\t\t\tvar count = ( position.array.length - prevLength ) / position.stride;\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// fill missing uv coordinates\n\n\t\t\t\t\t\t\t\t\t\t\t\tuv.array.push( 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, normal.array );\n\t\t\t\t\t\t\t\t\t\tnormal.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, color.array );\n\t\t\t\t\t\t\t\t\t\tcolor.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD1':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv2.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Semantic \"%s\" not handled in geometry build process.', key );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, normal.array );\n\t\t\t\t\t\t\tnormal.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, color.array );\n\t\t\t\t\t\t\tcolor.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv.array );\n\t\t\t\t\t\t\tuv.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD1':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv2.array );\n\t\t\t\t\t\t\tuv2.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tif ( position.array.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position.array, position.stride ) );\n\t\t\tif ( normal.array.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal.array, normal.stride ) );\n\t\t\tif ( color.array.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color.array, color.stride ) );\n\t\t\tif ( uv.array.length > 0 ) geometry.setAttribute( 'uv', new Float32BufferAttribute( uv.array, uv.stride ) );\n\t\t\tif ( uv2.array.length > 0 ) geometry.setAttribute( 'uv2', new Float32BufferAttribute( uv2.array, uv2.stride ) );\n\n\t\t\tif ( skinIndex.array.length > 0 ) geometry.setAttribute( 'skinIndex', new Float32BufferAttribute( skinIndex.array, skinIndex.stride ) );\n\t\t\tif ( skinWeight.array.length > 0 ) geometry.setAttribute( 'skinWeight', new Float32BufferAttribute( skinWeight.array, skinWeight.stride ) );\n\n\t\t\tbuild.data = geometry;\n\t\t\tbuild.type = primitives[ 0 ].type;\n\t\t\tbuild.materialKeys = materialKeys;\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryData( primitive, source, offset, array ) {\n\n\t\t\tvar indices = primitive.p;\n\t\t\tvar stride = primitive.stride;\n\t\t\tvar vcount = primitive.vcount;\n\n\t\t\tfunction pushVector( i ) {\n\n\t\t\t\tvar index = indices[ i + offset ] * sourceStride;\n\t\t\t\tvar length = index + sourceStride;\n\n\t\t\t\tfor ( ; index < length; index ++ ) {\n\n\t\t\t\t\tarray.push( sourceArray[ index ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar sourceArray = source.array;\n\t\t\tvar sourceStride = source.stride;\n\n\t\t\tif ( primitive.vcount !== undefined ) {\n\n\t\t\t\tvar index = 0;\n\n\t\t\t\tfor ( var i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar count = vcount[ i ];\n\n\t\t\t\t\tif ( count === 4 ) {\n\n\t\t\t\t\t\tvar a = index + stride * 0;\n\t\t\t\t\t\tvar b = index + stride * 1;\n\t\t\t\t\t\tvar c = index + stride * 2;\n\t\t\t\t\t\tvar d = index + stride * 3;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( d );\n\t\t\t\t\t\tpushVector( b ); pushVector( c ); pushVector( d );\n\n\t\t\t\t\t} else if ( count === 3 ) {\n\n\t\t\t\t\t\tvar a = index + stride * 0;\n\t\t\t\t\t\tvar b = index + stride * 1;\n\t\t\t\t\t\tvar c = index + stride * 2;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t} else if ( count > 4 ) {\n\n\t\t\t\t\t\tfor ( var k = 1, kl = ( count - 2 ); k <= kl; k ++ ) {\n\n\t\t\t\t\t\t\tvar a = index + stride * 0;\n\t\t\t\t\t\t\tvar b = index + stride * k;\n\t\t\t\t\t\t\tvar c = index + stride * ( k + 1 );\n\n\t\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tindex += stride * count;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i += stride ) {\n\n\t\t\t\t\tpushVector( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getGeometry( id ) {\n\n\t\t\treturn getBuild( library.geometries[ id ], buildGeometry );\n\n\t\t}\n\n\t\t// kinematics\n\n\t\tfunction parseKinematicsModel( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tjoints: {},\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparseKinematicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildKinematicsModel( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsModel( id ) {\n\n\t\t\treturn getBuild( library.kinematicsModels[ id ], buildKinematicsModel );\n\n\t\t}\n\n\t\tfunction parseKinematicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'joint':\n\t\t\t\t\t\tdata.joints[ child.getAttribute( 'sid' ) ] = parseKinematicsJoint( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseKinematicsJoint( xml ) {\n\n\t\t\tvar data;\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\tdata = parseKinematicsJointParameter( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsJointParameter( xml, data ) {\n\n\t\t\tvar data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\taxis: new Vector3(),\n\t\t\t\tlimits: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 0\n\t\t\t\t},\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tstatic: false,\n\t\t\t\tzeroPosition: 0,\n\t\t\t\tmiddlePosition: 0\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.axis.fromArray( array );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'limits':\n\t\t\t\t\t\tvar max = child.getElementsByTagName( 'max' )[ 0 ];\n\t\t\t\t\t\tvar min = child.getElementsByTagName( 'min' )[ 0 ];\n\n\t\t\t\t\t\tdata.limits.max = parseFloat( max.textContent );\n\t\t\t\t\t\tdata.limits.min = parseFloat( min.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// if min is equal to or greater than max, consider the joint static\n\n\t\t\tif ( data.limits.min >= data.limits.max ) {\n\n\t\t\t\tdata.static = true;\n\n\t\t\t}\n\n\t\t\t// calculate middle position\n\n\t\t\tdata.middlePosition = ( data.limits.min + data.limits.max ) / 2.0;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsLink( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tattachments: [],\n\t\t\t\ttransforms: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'attachment_full':\n\t\t\t\t\t\tdata.attachments.push( parseKinematicsAttachment( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsAttachment( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tjoint: xml.getAttribute( 'joint' ).split( '/' ).pop(),\n\t\t\t\ttransforms: [],\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsTransform( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\ttype: xml.nodeName\n\t\t\t};\n\n\t\t\tvar array = parseFloats( xml.textContent );\n\n\t\t\tswitch ( data.type ) {\n\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tdata.obj = new Matrix4();\n\t\t\t\t\tdata.obj.fromArray( array ).transpose();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tdata.obj = new Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tdata.obj = new Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tdata.angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// physics\n\n\t\tfunction parsePhysicsModel( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\trigidBodies: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'rigid_body':\n\t\t\t\t\t\tdata.rigidBodies[ child.getAttribute( 'name' ) ] = {};\n\t\t\t\t\t\tparsePhysicsRigidBody( child, data.rigidBodies[ child.getAttribute( 'name' ) ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.physicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parsePhysicsRigidBody( xml, data ) {\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparsePhysicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parsePhysicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'inertia':\n\t\t\t\t\t\tdata.inertia = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mass':\n\t\t\t\t\t\tdata.mass = parseFloats( child.textContent )[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// scene\n\n\t\tfunction parseKinematicsScene( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tbindJointAxis: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_joint_axis':\n\t\t\t\t\t\tdata.bindJointAxis.push( parseKinematicsBindJointAxis( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsScenes[ parseId( xml.getAttribute( 'url' ) ) ] = data;\n\n\t\t}\n\n\t\tfunction parseKinematicsBindJointAxis( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\ttarget: xml.getAttribute( 'target' ).split( '/' ).pop()\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tvar param = child.getElementsByTagName( 'param' )[ 0 ];\n\t\t\t\t\t\tdata.axis = param.textContent;\n\t\t\t\t\t\tvar tmpJointIndex = data.axis.split( 'inst_' ).pop().split( 'axis' )[ 0 ];\n\t\t\t\t\t\tdata.jointIndex = tmpJointIndex.substr( 0, tmpJointIndex.length - 1 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildKinematicsScene( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsScene( id ) {\n\n\t\t\treturn getBuild( library.kinematicsScenes[ id ], buildKinematicsScene );\n\n\t\t}\n\n\t\tfunction setupKinematics() {\n\n\t\t\tvar kinematicsModelId = Object.keys( library.kinematicsModels )[ 0 ];\n\t\t\tvar kinematicsSceneId = Object.keys( library.kinematicsScenes )[ 0 ];\n\t\t\tvar visualSceneId = Object.keys( library.visualScenes )[ 0 ];\n\n\t\t\tif ( kinematicsModelId === undefined || kinematicsSceneId === undefined ) return;\n\n\t\t\tvar kinematicsModel = getKinematicsModel( kinematicsModelId );\n\t\t\tvar kinematicsScene = getKinematicsScene( kinematicsSceneId );\n\t\t\tvar visualScene = getVisualScene( visualSceneId );\n\n\t\t\tvar bindJointAxis = kinematicsScene.bindJointAxis;\n\t\t\tvar jointMap = {};\n\n\t\t\tfor ( var i = 0, l = bindJointAxis.length; i < l; i ++ ) {\n\n\t\t\t\tvar axis = bindJointAxis[ i ];\n\n\t\t\t\t// the result of the following query is an element of type 'translate', 'rotate','scale' or 'matrix'\n\n\t\t\t\tvar targetElement = collada.querySelector( '[sid=\"' + axis.target + '\"]' );\n\n\t\t\t\tif ( targetElement ) {\n\n\t\t\t\t\t// get the parent of the transform element\n\n\t\t\t\t\tvar parentVisualElement = targetElement.parentElement;\n\n\t\t\t\t\t// connect the joint of the kinematics model with the element in the visual scene\n\n\t\t\t\t\tconnect( axis.jointIndex, parentVisualElement );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction connect( jointIndex, visualElement ) {\n\n\t\t\t\tvar visualElementName = visualElement.getAttribute( 'name' );\n\t\t\t\tvar joint = kinematicsModel.joints[ jointIndex ];\n\n\t\t\t\tvisualScene.traverse( function ( object ) {\n\n\t\t\t\t\tif ( object.name === visualElementName ) {\n\n\t\t\t\t\t\tjointMap[ jointIndex ] = {\n\t\t\t\t\t\t\tobject: object,\n\t\t\t\t\t\t\ttransforms: buildTransformList( visualElement ),\n\t\t\t\t\t\t\tjoint: joint,\n\t\t\t\t\t\t\tposition: joint.zeroPosition\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tvar m0 = new Matrix4();\n\n\t\t\tkinematics = {\n\n\t\t\t\tjoints: kinematicsModel && kinematicsModel.joints,\n\n\t\t\t\tgetJointValue: function ( jointIndex ) {\n\n\t\t\t\t\tvar jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\treturn jointData.position;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' doesn\\'t exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetJointValue: function ( jointIndex, value ) {\n\n\t\t\t\t\tvar jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\tvar joint = jointData.joint;\n\n\t\t\t\t\t\tif ( value > joint.limits.max || value < joint.limits.min ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' value ' + value + ' outside of limits (min: ' + joint.limits.min + ', max: ' + joint.limits.max + ').' );\n\n\t\t\t\t\t\t} else if ( joint.static ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' is static.' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar object = jointData.object;\n\t\t\t\t\t\t\tvar axis = joint.axis;\n\t\t\t\t\t\t\tvar transforms = jointData.transforms;\n\n\t\t\t\t\t\t\tmatrix.identity();\n\n\t\t\t\t\t\t\t// each update, we have to apply all transforms in the correct order\n\n\t\t\t\t\t\t\tfor ( var i = 0; i < transforms.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tvar transform = transforms[ i ];\n\n\t\t\t\t\t\t\t\t// if there is a connection of the transform node with a joint, apply the joint value\n\n\t\t\t\t\t\t\t\tif ( transform.sid && transform.sid.indexOf( jointIndex ) !== - 1 ) {\n\n\t\t\t\t\t\t\t\t\tswitch ( joint.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( axis, MathUtils.degToRad( value ) ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( axis.x * value, axis.y * value, axis.z * value ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknown joint type: ' + joint.type );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tswitch ( transform.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( transform.obj.x, transform.obj.y, transform.obj.z ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.scale( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( transform.obj, transform.angle ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tobject.matrix.copy( matrix );\n\t\t\t\t\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\t\t\t\t\tjointMap[ jointIndex ].position = value;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.log( 'THREE.ColladaLoader: ' + jointIndex + ' does not exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction buildTransformList( node ) {\n\n\t\t\tvar transforms = [];\n\n\t\t\tvar xml = collada.querySelector( '[id=\"' + node.id + '\"]' );\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvar matrix = new Matrix4().fromArray( array ).transpose();\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: matrix\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvar vector = new Vector3().fromArray( array );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvar vector = new Vector3().fromArray( array );\n\t\t\t\t\t\tvar angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector,\n\t\t\t\t\t\t\tangle: angle\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transforms;\n\n\t\t}\n\n\t\t// nodes\n\n\t\tfunction prepareNodes( xml ) {\n\n\t\t\tvar elements = xml.getElementsByTagName( 'node' );\n\n\t\t\t// ensure all node elements have id attributes\n\n\t\t\tfor ( var i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tvar element = elements[ i ];\n\n\t\t\t\tif ( element.hasAttribute( 'id' ) === false ) {\n\n\t\t\t\t\telement.setAttribute( 'id', generateId() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar matrix = new Matrix4();\n\t\tvar vector = new Vector3();\n\n\t\tfunction parseNode( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\ttype: xml.getAttribute( 'type' ),\n\t\t\t\tid: xml.getAttribute( 'id' ),\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tmatrix: new Matrix4(),\n\t\t\t\tnodes: [],\n\t\t\t\tinstanceCameras: [],\n\t\t\t\tinstanceControllers: [],\n\t\t\t\tinstanceLights: [],\n\t\t\t\tinstanceGeometries: [],\n\t\t\t\tinstanceNodes: [],\n\t\t\t\ttransforms: {}\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'node':\n\t\t\t\t\t\tdata.nodes.push( child.getAttribute( 'id' ) );\n\t\t\t\t\t\tparseNode( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_camera':\n\t\t\t\t\t\tdata.instanceCameras.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_controller':\n\t\t\t\t\t\tdata.instanceControllers.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_light':\n\t\t\t\t\t\tdata.instanceLights.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_geometry':\n\t\t\t\t\t\tdata.instanceGeometries.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_node':\n\t\t\t\t\t\tdata.instanceNodes.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.fromArray( array ).transpose() );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvector.fromArray( array );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeTranslation( vector.x, vector.y, vector.z ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tvar angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeRotationAxis( vector.fromArray( array ), angle ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tvar array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.scale( vector.fromArray( array ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasNode( data.id ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.', data.id );\n\n\t\t\t} else {\n\n\t\t\t\tlibrary.nodes[ data.id ] = data;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseNodeInstance( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tid: parseId( xml.getAttribute( 'url' ) ),\n\t\t\t\tmaterials: {},\n\t\t\t\tskeletons: []\n\t\t\t};\n\n\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tvar child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_material':\n\t\t\t\t\t\tvar instances = child.getElementsByTagName( 'instance_material' );\n\n\t\t\t\t\t\tfor ( var j = 0; j < instances.length; j ++ ) {\n\n\t\t\t\t\t\t\tvar instance = instances[ j ];\n\t\t\t\t\t\t\tvar symbol = instance.getAttribute( 'symbol' );\n\t\t\t\t\t\t\tvar target = instance.getAttribute( 'target' );\n\n\t\t\t\t\t\t\tdata.materials[ symbol ] = parseId( target );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skeleton':\n\t\t\t\t\t\tdata.skeletons.push( parseId( child.textContent ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildSkeleton( skeletons, joints ) {\n\n\t\t\tvar boneData = [];\n\t\t\tvar sortedBoneData = [];\n\n\t\t\tvar i, j, data;\n\n\t\t\t// a skeleton can have multiple root bones. collada expresses this\n\t\t\t// situtation with multiple \"skeleton\" tags per controller instance\n\n\t\t\tfor ( i = 0; i < skeletons.length; i ++ ) {\n\n\t\t\t\tvar skeleton = skeletons[ i ];\n\n\t\t\t\tvar root;\n\n\t\t\t\tif ( hasNode( skeleton ) ) {\n\n\t\t\t\t\troot = getNode( skeleton );\n\t\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t\t} else if ( hasVisualScene( skeleton ) ) {\n\n\t\t\t\t\t// handle case where the skeleton refers to the visual scene (#13335)\n\n\t\t\t\t\tvar visualScene = library.visualScenes[ skeleton ];\n\t\t\t\t\tvar children = visualScene.children;\n\n\t\t\t\t\tfor ( var j = 0; j < children.length; j ++ ) {\n\n\t\t\t\t\t\tvar child = children[ j ];\n\n\t\t\t\t\t\tif ( child.type === 'JOINT' ) {\n\n\t\t\t\t\t\t\tvar root = getNode( child.id );\n\t\t\t\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.ColladaLoader: Unable to find root bone of skeleton with ID:', skeleton );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// sort bone data (the order is defined in the corresponding controller)\n\n\t\t\tfor ( i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < boneData.length; j ++ ) {\n\n\t\t\t\t\tdata = boneData[ j ];\n\n\t\t\t\t\tif ( data.bone.name === joints[ i ].name ) {\n\n\t\t\t\t\t\tsortedBoneData[ i ] = data;\n\t\t\t\t\t\tdata.processed = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add unprocessed bone data at the end of the list\n\n\t\t\tfor ( i = 0; i < boneData.length; i ++ ) {\n\n\t\t\t\tdata = boneData[ i ];\n\n\t\t\t\tif ( data.processed === false ) {\n\n\t\t\t\t\tsortedBoneData.push( data );\n\t\t\t\t\tdata.processed = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup arrays for skeleton creation\n\n\t\t\tvar bones = [];\n\t\t\tvar boneInverses = [];\n\n\t\t\tfor ( i = 0; i < sortedBoneData.length; i ++ ) {\n\n\t\t\t\tdata = sortedBoneData[ i ];\n\n\t\t\t\tbones.push( data.bone );\n\t\t\t\tboneInverses.push( data.boneInverse );\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t}\n\n\t\tfunction buildBoneHierarchy( root, joints, boneData ) {\n\n\t\t\t// setup bone data from visual scene\n\n\t\t\troot.traverse( function ( object ) {\n\n\t\t\t\tif ( object.isBone === true ) {\n\n\t\t\t\t\tvar boneInverse;\n\n\t\t\t\t\t// retrieve the boneInverse from the controller data\n\n\t\t\t\t\tfor ( var i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\t\t\tvar joint = joints[ i ];\n\n\t\t\t\t\t\tif ( joint.name === object.name ) {\n\n\t\t\t\t\t\t\tboneInverse = joint.boneInverse;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( boneInverse === undefined ) {\n\n\t\t\t\t\t\t// Unfortunately, there can be joints in the visual scene that are not part of the\n\t\t\t\t\t\t// corresponding controller. In this case, we have to create a dummy boneInverse matrix\n\t\t\t\t\t\t// for the respective bone. This bone won't affect any vertices, because there are no skin indices\n\t\t\t\t\t\t// and weights defined for it. But we still have to add the bone to the sorted bone list in order to\n\t\t\t\t\t\t// ensure a correct animation of the model.\n\n\t\t\t\t\t\tboneInverse = new Matrix4();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.push( { bone: object, boneInverse: boneInverse, processed: false } );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction buildNode( data ) {\n\n\t\t\tvar objects = [];\n\n\t\t\tvar matrix = data.matrix;\n\t\t\tvar nodes = data.nodes;\n\t\t\tvar type = data.type;\n\t\t\tvar instanceCameras = data.instanceCameras;\n\t\t\tvar instanceControllers = data.instanceControllers;\n\t\t\tvar instanceLights = data.instanceLights;\n\t\t\tvar instanceGeometries = data.instanceGeometries;\n\t\t\tvar instanceNodes = data.instanceNodes;\n\n\t\t\t// nodes\n\n\t\t\tfor ( var i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( nodes[ i ] ) );\n\n\t\t\t}\n\n\t\t\t// instance cameras\n\n\t\t\tfor ( var i = 0, l = instanceCameras.length; i < l; i ++ ) {\n\n\t\t\t\tvar instanceCamera = getCamera( instanceCameras[ i ] );\n\n\t\t\t\tif ( instanceCamera !== null ) {\n\n\t\t\t\t\tobjects.push( instanceCamera.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance controllers\n\n\t\t\tfor ( var i = 0, l = instanceControllers.length; i < l; i ++ ) {\n\n\t\t\t\tvar instance = instanceControllers[ i ];\n\t\t\t\tvar controller = getController( instance.id );\n\t\t\t\tvar geometries = getGeometry( controller.id );\n\t\t\t\tvar newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tvar skeletons = instance.skeletons;\n\t\t\t\tvar joints = controller.skin.joints;\n\n\t\t\t\tvar skeleton = buildSkeleton( skeletons, joints );\n\n\t\t\t\tfor ( var j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar object = newObjects[ j ];\n\n\t\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t\tobject.bind( skeleton, controller.skin.bindMatrix );\n\t\t\t\t\t\tobject.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects.push( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance lights\n\n\t\t\tfor ( var i = 0, l = instanceLights.length; i < l; i ++ ) {\n\n\t\t\t\tvar instanceLight = getLight( instanceLights[ i ] );\n\n\t\t\t\tif ( instanceLight !== null ) {\n\n\t\t\t\t\tobjects.push( instanceLight.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance geometries\n\n\t\t\tfor ( var i = 0, l = instanceGeometries.length; i < l; i ++ ) {\n\n\t\t\t\tvar instance = instanceGeometries[ i ];\n\n\t\t\t\t// a single geometry instance in collada can lead to multiple object3Ds.\n\t\t\t\t// this is the case when primitives are combined like triangles and lines\n\n\t\t\t\tvar geometries = getGeometry( instance.id );\n\t\t\t\tvar newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tfor ( var j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tobjects.push( newObjects[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance nodes\n\n\t\t\tfor ( var i = 0, l = instanceNodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( instanceNodes[ i ] ).clone() );\n\n\t\t\t}\n\n\t\t\tvar object;\n\n\t\t\tif ( nodes.length === 0 && objects.length === 1 ) {\n\n\t\t\t\tobject = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tobject = ( type === 'JOINT' ) ? new Bone() : new Group();\n\n\t\t\t\tfor ( var i = 0; i < objects.length; i ++ ) {\n\n\t\t\t\t\tobject.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tobject.name = ( type === 'JOINT' ) ? data.sid : data.name;\n\t\t\tobject.matrix.copy( matrix );\n\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tvar fallbackMaterial = new MeshBasicMaterial( { color: 0xff00ff } );\n\n\t\tfunction resolveMaterialBinding( keys, instanceMaterials ) {\n\n\t\t\tvar materials = [];\n\n\t\t\tfor ( var i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tvar id = instanceMaterials[ keys[ i ] ];\n\n\t\t\t\tif ( id === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Material with key %s not found. Apply fallback material.', keys[ i ] );\n\t\t\t\t\tmaterials.push( fallbackMaterial );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials.push( getMaterial( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t}\n\n\t\tfunction buildObjects( geometries, instanceMaterials ) {\n\n\t\t\tvar objects = [];\n\n\t\t\tfor ( var type in geometries ) {\n\n\t\t\t\tvar geometry = geometries[ type ];\n\n\t\t\t\tvar materials = resolveMaterialBinding( geometry.materialKeys, instanceMaterials );\n\n\t\t\t\t// handle case if no materials are defined\n\n\t\t\t\tif ( materials.length === 0 ) {\n\n\t\t\t\t\tif ( type === 'lines' || type === 'linestrips' ) {\n\n\t\t\t\t\t\tmaterials.push( new LineBasicMaterial() );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials.push( new MeshPhongMaterial() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// regard skinning\n\n\t\t\t\tvar skinning = ( geometry.data.attributes.skinIndex !== undefined );\n\n\t\t\t\tif ( skinning ) {\n\n\t\t\t\t\tfor ( var i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tmaterials[ i ].skinning = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// choose between a single or multi materials (material array)\n\n\t\t\t\tvar material = ( materials.length === 1 ) ? materials[ 0 ] : materials;\n\n\t\t\t\t// now create a specific 3D object\n\n\t\t\t\tvar object;\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\t\tobject = new LineSegments( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tobject = new Line( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\t\tif ( skinning ) {\n\n\t\t\t\t\t\t\tobject = new SkinnedMesh( geometry.data, material );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tobject = new Mesh( geometry.data, material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tobjects.push( object );\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction hasNode( id ) {\n\n\t\t\treturn library.nodes[ id ] !== undefined;\n\n\t\t}\n\n\t\tfunction getNode( id ) {\n\n\t\t\treturn getBuild( library.nodes[ id ], buildNode );\n\n\t\t}\n\n\t\t// visual scenes\n\n\t\tfunction parseVisualScene( xml ) {\n\n\t\t\tvar data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tchildren: []\n\t\t\t};\n\n\t\t\tprepareNodes( xml );\n\n\t\t\tvar elements = getElementsByTagName( xml, 'node' );\n\n\t\t\tfor ( var i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tdata.children.push( parseNode( elements[ i ] ) );\n\n\t\t\t}\n\n\t\t\tlibrary.visualScenes[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildVisualScene( data ) {\n\n\t\t\tvar group = new Group();\n\t\t\tgroup.name = data.name;\n\n\t\t\tvar children = data.children;\n\n\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tvar child = children[ i ];\n\n\t\t\t\tgroup.add( getNode( child.id ) );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction hasVisualScene( id ) {\n\n\t\t\treturn library.visualScenes[ id ] !== undefined;\n\n\t\t}\n\n\t\tfunction getVisualScene( id ) {\n\n\t\t\treturn getBuild( library.visualScenes[ id ], buildVisualScene );\n\n\t\t}\n\n\t\t// scenes\n\n\t\tfunction parseScene( xml ) {\n\n\t\t\tvar instance = getElementsByTagName( xml, 'instance_visual_scene' )[ 0 ];\n\t\t\treturn getVisualScene( parseId( instance.getAttribute( 'url' ) ) );\n\n\t\t}\n\n\t\tfunction setupAnimations() {\n\n\t\t\tvar clips = library.clips;\n\n\t\t\tif ( isEmpty( clips ) === true ) {\n\n\t\t\t\tif ( isEmpty( library.animations ) === false ) {\n\n\t\t\t\t\t// if there are animations but no clips, we create a default clip for playback\n\n\t\t\t\t\tvar tracks = [];\n\n\t\t\t\t\tfor ( var id in library.animations ) {\n\n\t\t\t\t\t\tvar animationTracks = getAnimation( id );\n\n\t\t\t\t\t\tfor ( var i = 0, l = animationTracks.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\ttracks.push( animationTracks[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tanimations.push( new AnimationClip( 'default', - 1, tracks ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var id in clips ) {\n\n\t\t\t\t\tanimations.push( getAnimationClip( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// convert the parser error element into text with each child elements text\n\t\t// separated by new lines.\n\n\t\tfunction parserErrorToText( parserError ) {\n\n\t\t\tvar result = '';\n\t\t\tvar stack = [ parserError ];\n\n\t\t\twhile ( stack.length ) {\n\n\t\t\t\tvar node = stack.shift();\n\n\t\t\t\tif ( node.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t\t\tresult += node.textContent;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresult += '\\n';\n\t\t\t\t\tstack.push.apply( stack, node.childNodes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result.trim();\n\n\t\t}\n\n\t\tif ( text.length === 0 ) {\n\n\t\t\treturn { scene: new Scene() };\n\n\t\t}\n\n\t\tvar xml = new DOMParser().parseFromString( text, 'application/xml' );\n\n\t\tvar collada = getElementsByTagName( xml, 'COLLADA' )[ 0 ];\n\n\t\tvar parserError = xml.getElementsByTagName( 'parsererror' )[ 0 ];\n\t\tif ( parserError !== undefined ) {\n\n\t\t\t// Chrome will return parser error with a div in it\n\n\t\t\tvar errorElement = getElementsByTagName( parserError, 'div' )[ 0 ];\n\t\t\tvar errorText;\n\n\t\t\tif ( errorElement ) {\n\n\t\t\t\terrorText = errorElement.textContent;\n\n\t\t\t} else {\n\n\t\t\t\terrorText = parserErrorToText( parserError );\n\n\t\t\t}\n\n\t\t\tconsole.error( 'THREE.ColladaLoader: Failed to parse collada file.\\n', errorText );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// metadata\n\n\t\tvar version = collada.getAttribute( 'version' );\n\t\tconsole.log( 'THREE.ColladaLoader: File version', version );\n\n\t\tvar asset = parseAsset( getElementsByTagName( collada, 'asset' )[ 0 ] );\n\t\tvar textureLoader = new TextureLoader( this.manager );\n\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\tvar tgaLoader;\n\n\t\tif ( TGALoader ) {\n\n\t\t\ttgaLoader = new TGALoader( this.manager );\n\t\t\ttgaLoader.setPath( this.resourcePath || path );\n\n\t\t}\n\n\t\t//\n\n\t\tvar animations = [];\n\t\tvar kinematics = {};\n\t\tvar count = 0;\n\n\t\t//\n\n\t\tvar library = {\n\t\t\tanimations: {},\n\t\t\tclips: {},\n\t\t\tcontrollers: {},\n\t\t\timages: {},\n\t\t\teffects: {},\n\t\t\tmaterials: {},\n\t\t\tcameras: {},\n\t\t\tlights: {},\n\t\t\tgeometries: {},\n\t\t\tnodes: {},\n\t\t\tvisualScenes: {},\n\t\t\tkinematicsModels: {},\n\t\t\tphysicsModels: {},\n\t\t\tkinematicsScenes: {}\n\t\t};\n\n\t\tparseLibrary( collada, 'library_animations', 'animation', parseAnimation );\n\t\tparseLibrary( collada, 'library_animation_clips', 'animation_clip', parseAnimationClip );\n\t\tparseLibrary( collada, 'library_controllers', 'controller', parseController );\n\t\tparseLibrary( collada, 'library_images', 'image', parseImage );\n\t\tparseLibrary( collada, 'library_effects', 'effect', parseEffect );\n\t\tparseLibrary( collada, 'library_materials', 'material', parseMaterial );\n\t\tparseLibrary( collada, 'library_cameras', 'camera', parseCamera );\n\t\tparseLibrary( collada, 'library_lights', 'light', parseLight );\n\t\tparseLibrary( collada, 'library_geometries', 'geometry', parseGeometry );\n\t\tparseLibrary( collada, 'library_nodes', 'node', parseNode );\n\t\tparseLibrary( collada, 'library_visual_scenes', 'visual_scene', parseVisualScene );\n\t\tparseLibrary( collada, 'library_kinematics_models', 'kinematics_model', parseKinematicsModel );\n\t\tparseLibrary( collada, 'library_physics_models', 'physics_model', parsePhysicsModel );\n\t\tparseLibrary( collada, 'scene', 'instance_kinematics_scene', parseKinematicsScene );\n\n\t\tbuildLibrary( library.animations, buildAnimation );\n\t\tbuildLibrary( library.clips, buildAnimationClip );\n\t\tbuildLibrary( library.controllers, buildController );\n\t\tbuildLibrary( library.images, buildImage );\n\t\tbuildLibrary( library.effects, buildEffect );\n\t\tbuildLibrary( library.materials, buildMaterial );\n\t\tbuildLibrary( library.cameras, buildCamera );\n\t\tbuildLibrary( library.lights, buildLight );\n\t\tbuildLibrary( library.geometries, buildGeometry );\n\t\tbuildLibrary( library.visualScenes, buildVisualScene );\n\n\t\tsetupAnimations();\n\t\tsetupKinematics();\n\n\t\tvar scene = parseScene( getElementsByTagName( collada, 'scene' )[ 0 ] );\n\t\tscene.animations = animations;\n\n\t\tif ( asset.upAxis === 'Z_UP' ) {\n\n\t\t\tscene.quaternion.setFromEuler( new Euler( - Math.PI / 2, 0, 0 ) );\n\n\t\t}\n\n\t\tscene.scale.multiplyScalar( asset.unit );\n\n\t\treturn {\n\t\t\tget animations() {\n\n\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Please access animations over scene.animations now.' );\n\t\t\t\treturn animations;\n\n\t\t\t},\n\t\t\tkinematics: kinematics,\n\t\t\tlibrary: library,\n\t\t\tscene: scene\n\t\t};\n\n\t}\n\n} );\n\nexport { ColladaLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/DDSLoader.js",
    "content": "import {\n\tCompressedTextureLoader,\n\tRGBAFormat,\n\tRGBA_S3TC_DXT3_Format,\n\tRGBA_S3TC_DXT5_Format,\n\tRGB_ETC1_Format,\n\tRGB_S3TC_DXT1_Format\n} from '../../../build/three.module.js';\n\nvar DDSLoader = function ( manager ) {\n\n\tCompressedTextureLoader.call( this, manager );\n\n};\n\nDDSLoader.prototype = Object.assign( Object.create( CompressedTextureLoader.prototype ), {\n\n\tconstructor: DDSLoader,\n\n\tparse: function ( buffer, loadMipmaps ) {\n\n\t\tvar dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1 };\n\n\t\t// Adapted from @toji's DDS utils\n\t\t// https://github.com/toji/webgl-texture-utils/blob/master/texture-util/dds.js\n\n\t\t// All values and structures referenced from:\n\t\t// http://msdn.microsoft.com/en-us/library/bb943991.aspx/\n\n\t\tvar DDS_MAGIC = 0x20534444;\n\n\t\t// var DDSD_CAPS = 0x1;\n\t\t// var DDSD_HEIGHT = 0x2;\n\t\t// var DDSD_WIDTH = 0x4;\n\t\t// var DDSD_PITCH = 0x8;\n\t\t// var DDSD_PIXELFORMAT = 0x1000;\n\t\tvar DDSD_MIPMAPCOUNT = 0x20000;\n\t\t// var DDSD_LINEARSIZE = 0x80000;\n\t\t// var DDSD_DEPTH = 0x800000;\n\n\t\t// var DDSCAPS_COMPLEX = 0x8;\n\t\t// var DDSCAPS_MIPMAP = 0x400000;\n\t\t// var DDSCAPS_TEXTURE = 0x1000;\n\n\t\tvar DDSCAPS2_CUBEMAP = 0x200;\n\t\tvar DDSCAPS2_CUBEMAP_POSITIVEX = 0x400;\n\t\tvar DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800;\n\t\tvar DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000;\n\t\tvar DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000;\n\t\tvar DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000;\n\t\tvar DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000;\n\t\t// var DDSCAPS2_VOLUME = 0x200000;\n\n\t\t// var DDPF_ALPHAPIXELS = 0x1;\n\t\t// var DDPF_ALPHA = 0x2;\n\t\tvar DDPF_FOURCC = 0x4;\n\t\t// var DDPF_RGB = 0x40;\n\t\t// var DDPF_YUV = 0x200;\n\t\t// var DDPF_LUMINANCE = 0x20000;\n\n\t\tfunction fourCCToInt32( value ) {\n\n\t\t\treturn value.charCodeAt( 0 ) +\n\t\t\t\t( value.charCodeAt( 1 ) << 8 ) +\n\t\t\t\t( value.charCodeAt( 2 ) << 16 ) +\n\t\t\t\t( value.charCodeAt( 3 ) << 24 );\n\n\t\t}\n\n\t\tfunction int32ToFourCC( value ) {\n\n\t\t\treturn String.fromCharCode(\n\t\t\t\tvalue & 0xff,\n\t\t\t\t( value >> 8 ) & 0xff,\n\t\t\t\t( value >> 16 ) & 0xff,\n\t\t\t\t( value >> 24 ) & 0xff\n\t\t\t);\n\n\t\t}\n\n\t\tfunction loadARGBMip( buffer, dataOffset, width, height ) {\n\n\t\t\tvar dataLength = width * height * 4;\n\t\t\tvar srcBuffer = new Uint8Array( buffer, dataOffset, dataLength );\n\t\t\tvar byteArray = new Uint8Array( dataLength );\n\t\t\tvar dst = 0;\n\t\t\tvar src = 0;\n\t\t\tfor ( var y = 0; y < height; y ++ ) {\n\n\t\t\t\tfor ( var x = 0; x < width; x ++ ) {\n\n\t\t\t\t\tvar b = srcBuffer[ src ]; src ++;\n\t\t\t\t\tvar g = srcBuffer[ src ]; src ++;\n\t\t\t\t\tvar r = srcBuffer[ src ]; src ++;\n\t\t\t\t\tvar a = srcBuffer[ src ]; src ++;\n\t\t\t\t\tbyteArray[ dst ] = r; dst ++;\t//r\n\t\t\t\t\tbyteArray[ dst ] = g; dst ++;\t//g\n\t\t\t\t\tbyteArray[ dst ] = b; dst ++;\t//b\n\t\t\t\t\tbyteArray[ dst ] = a; dst ++;\t//a\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn byteArray;\n\n\t\t}\n\n\t\tvar FOURCC_DXT1 = fourCCToInt32( 'DXT1' );\n\t\tvar FOURCC_DXT3 = fourCCToInt32( 'DXT3' );\n\t\tvar FOURCC_DXT5 = fourCCToInt32( 'DXT5' );\n\t\tvar FOURCC_ETC1 = fourCCToInt32( 'ETC1' );\n\n\t\tvar headerLengthInt = 31; // The header length in 32 bit ints\n\n\t\t// Offsets into the header array\n\n\t\tvar off_magic = 0;\n\n\t\tvar off_size = 1;\n\t\tvar off_flags = 2;\n\t\tvar off_height = 3;\n\t\tvar off_width = 4;\n\n\t\tvar off_mipmapCount = 7;\n\n\t\tvar off_pfFlags = 20;\n\t\tvar off_pfFourCC = 21;\n\t\tvar off_RGBBitCount = 22;\n\t\tvar off_RBitMask = 23;\n\t\tvar off_GBitMask = 24;\n\t\tvar off_BBitMask = 25;\n\t\tvar off_ABitMask = 26;\n\n\t\t// var off_caps = 27;\n\t\tvar off_caps2 = 28;\n\t\t// var off_caps3 = 29;\n\t\t// var off_caps4 = 30;\n\n\t\t// Parse header\n\n\t\tvar header = new Int32Array( buffer, 0, headerLengthInt );\n\n\t\tif ( header[ off_magic ] !== DDS_MAGIC ) {\n\n\t\t\tconsole.error( 'THREE.DDSLoader.parse: Invalid magic number in DDS header.' );\n\t\t\treturn dds;\n\n\t\t}\n\n\t\tif ( ! header[ off_pfFlags ] & DDPF_FOURCC ) {\n\n\t\t\tconsole.error( 'THREE.DDSLoader.parse: Unsupported format, must contain a FourCC code.' );\n\t\t\treturn dds;\n\n\t\t}\n\n\t\tvar blockBytes;\n\n\t\tvar fourCC = header[ off_pfFourCC ];\n\n\t\tvar isRGBAUncompressed = false;\n\n\t\tswitch ( fourCC ) {\n\n\t\t\tcase FOURCC_DXT1:\n\n\t\t\t\tblockBytes = 8;\n\t\t\t\tdds.format = RGB_S3TC_DXT1_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_DXT3:\n\n\t\t\t\tblockBytes = 16;\n\t\t\t\tdds.format = RGBA_S3TC_DXT3_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_DXT5:\n\n\t\t\t\tblockBytes = 16;\n\t\t\t\tdds.format = RGBA_S3TC_DXT5_Format;\n\t\t\t\tbreak;\n\n\t\t\tcase FOURCC_ETC1:\n\n\t\t\t\tblockBytes = 8;\n\t\t\t\tdds.format = RGB_ETC1_Format;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tif ( header[ off_RGBBitCount ] === 32\n\t\t\t\t\t&& header[ off_RBitMask ] & 0xff0000\n\t\t\t\t\t&& header[ off_GBitMask ] & 0xff00\n\t\t\t\t\t&& header[ off_BBitMask ] & 0xff\n\t\t\t\t\t&& header[ off_ABitMask ] & 0xff000000 ) {\n\n\t\t\t\t\tisRGBAUncompressed = true;\n\t\t\t\t\tblockBytes = 64;\n\t\t\t\t\tdds.format = RGBAFormat;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.DDSLoader.parse: Unsupported FourCC code ', int32ToFourCC( fourCC ) );\n\t\t\t\t\treturn dds;\n\n\t\t\t\t}\n\n\t\t}\n\n\t\tdds.mipmapCount = 1;\n\n\t\tif ( header[ off_flags ] & DDSD_MIPMAPCOUNT && loadMipmaps !== false ) {\n\n\t\t\tdds.mipmapCount = Math.max( 1, header[ off_mipmapCount ] );\n\n\t\t}\n\n\t\tvar caps2 = header[ off_caps2 ];\n\t\tdds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false;\n\t\tif ( dds.isCubemap && (\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEX ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEY ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ ) ||\n\t\t\t! ( caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ )\n\t\t) ) {\n\n\t\t\tconsole.error( 'THREE.DDSLoader.parse: Incomplete cubemap faces' );\n\t\t\treturn dds;\n\n\t\t}\n\n\t\tdds.width = header[ off_width ];\n\t\tdds.height = header[ off_height ];\n\n\t\tvar dataOffset = header[ off_size ] + 4;\n\n\t\t// Extract mipmaps buffers\n\n\t\tvar faces = dds.isCubemap ? 6 : 1;\n\n\t\tfor ( var face = 0; face < faces; face ++ ) {\n\n\t\t\tvar width = dds.width;\n\t\t\tvar height = dds.height;\n\n\t\t\tfor ( var i = 0; i < dds.mipmapCount; i ++ ) {\n\n\t\t\t\tif ( isRGBAUncompressed ) {\n\n\t\t\t\t\tvar byteArray = loadARGBMip( buffer, dataOffset, width, height );\n\t\t\t\t\tvar dataLength = byteArray.length;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar dataLength = Math.max( 4, width ) / 4 * Math.max( 4, height ) / 4 * blockBytes;\n\t\t\t\t\tvar byteArray = new Uint8Array( buffer, dataOffset, dataLength );\n\n\t\t\t\t}\n\n\t\t\t\tvar mipmap = { 'data': byteArray, 'width': width, 'height': height };\n\t\t\t\tdds.mipmaps.push( mipmap );\n\n\t\t\t\tdataOffset += dataLength;\n\n\t\t\t\twidth = Math.max( width >> 1, 1 );\n\t\t\t\theight = Math.max( height >> 1, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn dds;\n\n\t}\n\n} );\n\nexport { DDSLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/DRACOLoader.js",
    "content": "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tLoader\n} from '../../../build/three.module.js';\n\nvar DRACOLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.decoderPath = '';\n\tthis.decoderConfig = {};\n\tthis.decoderBinary = null;\n\tthis.decoderPending = null;\n\n\tthis.workerLimit = 4;\n\tthis.workerPool = [];\n\tthis.workerNextTaskID = 1;\n\tthis.workerSourceURL = '';\n\n\tthis.defaultAttributeIDs = {\n\t\tposition: 'POSITION',\n\t\tnormal: 'NORMAL',\n\t\tcolor: 'COLOR',\n\t\tuv: 'TEX_COORD'\n\t};\n\tthis.defaultAttributeTypes = {\n\t\tposition: 'Float32Array',\n\t\tnormal: 'Float32Array',\n\t\tcolor: 'Float32Array',\n\t\tuv: 'Float32Array'\n\t};\n\n};\n\nDRACOLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: DRACOLoader,\n\n\tsetDecoderPath: function ( path ) {\n\n\t\tthis.decoderPath = path;\n\n\t\treturn this;\n\n\t},\n\n\tsetDecoderConfig: function ( config ) {\n\n\t\tthis.decoderConfig = config;\n\n\t\treturn this;\n\n\t},\n\n\tsetWorkerLimit: function ( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t},\n\n\t/** @deprecated */\n\tsetVerbosity: function () {\n\n\t\tconsole.warn( 'THREE.DRACOLoader: The .setVerbosity() method has been removed.' );\n\n\t},\n\n\t/** @deprecated */\n\tsetDrawMode: function () {\n\n\t\tconsole.warn( 'THREE.DRACOLoader: The .setDrawMode() method has been removed.' );\n\n\t},\n\n\t/** @deprecated */\n\tsetSkipDequantization: function () {\n\n\t\tconsole.warn( 'THREE.DRACOLoader: The .setSkipDequantization() method has been removed.' );\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\tvar taskConfig = {\n\t\t\t\tattributeIDs: this.defaultAttributeIDs,\n\t\t\t\tattributeTypes: this.defaultAttributeTypes,\n\t\t\t\tuseUniqueIDs: false\n\t\t\t};\n\n\t\t\tthis.decodeGeometry( buffer, taskConfig )\n\t\t\t\t.then( onLoad )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\t/** @deprecated Kept for backward-compatibility with previous DRACOLoader versions. */\n\tdecodeDracoFile: function ( buffer, callback, attributeIDs, attributeTypes ) {\n\n\t\tvar taskConfig = {\n\t\t\tattributeIDs: attributeIDs || this.defaultAttributeIDs,\n\t\t\tattributeTypes: attributeTypes || this.defaultAttributeTypes,\n\t\t\tuseUniqueIDs: !! attributeIDs\n\t\t};\n\n\t\tthis.decodeGeometry( buffer, taskConfig ).then( callback );\n\n\t},\n\n\tdecodeGeometry: function ( buffer, taskConfig ) {\n\n\t\t// TODO: For backward-compatibility, support 'attributeTypes' objects containing\n\t\t// references (rather than names) to typed array constructors. These must be\n\t\t// serialized before sending them to the worker.\n\t\tfor ( var attribute in taskConfig.attributeTypes ) {\n\n\t\t\tvar type = taskConfig.attributeTypes[ attribute ];\n\n\t\t\tif ( type.BYTES_PER_ELEMENT !== undefined ) {\n\n\t\t\t\ttaskConfig.attributeTypes[ attribute ] = type.name;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar taskKey = JSON.stringify( taskConfig );\n\n\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t// again from this thread.\n\t\tif ( DRACOLoader.taskCache.has( buffer ) ) {\n\n\t\t\tvar cachedTask = DRACOLoader.taskCache.get( buffer );\n\n\t\t\tif ( cachedTask.key === taskKey ) {\n\n\t\t\t\treturn cachedTask.promise;\n\n\t\t\t} else if ( buffer.byteLength === 0 ) {\n\n\t\t\t\t// Technically, it would be possible to wait for the previous task to complete,\n\t\t\t\t// transfer the buffer back, and decode again with the second configuration. That\n\t\t\t\t// is complex, and I don't know of any reason to decode a Draco buffer twice in\n\t\t\t\t// different ways, so this is left unimplemented.\n\t\t\t\tthrow new Error(\n\n\t\t\t\t\t'THREE.DRACOLoader: Unable to re-decode a buffer with different ' +\n\t\t\t\t\t'settings. Buffer has already been transferred.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar worker;\n\t\tvar taskID = this.workerNextTaskID ++;\n\t\tvar taskCost = buffer.byteLength;\n\n\t\t// Obtain a worker and assign a task, and construct a geometry instance\n\t\t// when the task completes.\n\t\tvar geometryPending = this._getWorker( taskID, taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, taskConfig, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.geometry ) );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tgeometryPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\tDRACOLoader.taskCache.set( buffer, {\n\n\t\t\tkey: taskKey,\n\t\t\tpromise: geometryPending\n\n\t\t} );\n\n\t\treturn geometryPending;\n\n\t},\n\n\t_createGeometry: function ( geometryData ) {\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tif ( geometryData.index ) {\n\n\t\t\tgeometry.setIndex( new BufferAttribute( geometryData.index.array, 1 ) );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < geometryData.attributes.length; i ++ ) {\n\n\t\t\tvar attribute = geometryData.attributes[ i ];\n\t\t\tvar name = attribute.name;\n\t\t\tvar array = attribute.array;\n\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\tgeometry.setAttribute( name, new BufferAttribute( array, itemSize ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t},\n\n\t_loadLibrary: function ( url, responseType ) {\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.decoderPath );\n\t\tloader.setResponseType( responseType );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tloader.load( url, resolve, undefined, reject );\n\n\t\t} );\n\n\t},\n\n\tpreload: function () {\n\n\t\tthis._initDecoder();\n\n\t\treturn this;\n\n\t},\n\n\t_initDecoder: function () {\n\n\t\tif ( this.decoderPending ) return this.decoderPending;\n\n\t\tvar useJS = typeof WebAssembly !== 'object' || this.decoderConfig.type === 'js';\n\t\tvar librariesPending = [];\n\n\t\tif ( useJS ) {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.js', 'text' ) );\n\n\t\t} else {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_wasm_wrapper.js', 'text' ) );\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.wasm', 'arraybuffer' ) );\n\n\t\t}\n\n\t\tthis.decoderPending = Promise.all( librariesPending )\n\t\t\t.then( ( libraries ) => {\n\n\t\t\t\tvar jsContent = libraries[ 0 ];\n\n\t\t\t\tif ( ! useJS ) {\n\n\t\t\t\t\tthis.decoderConfig.wasmBinary = libraries[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tvar fn = DRACOLoader.DRACOWorker.toString();\n\n\t\t\t\tvar body = [\n\t\t\t\t\t'/* draco decoder */',\n\t\t\t\t\tjsContent,\n\t\t\t\t\t'',\n\t\t\t\t\t'/* worker */',\n\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t} );\n\n\t\treturn this.decoderPending;\n\n\t},\n\n\t_getWorker: function ( taskID, taskCost ) {\n\n\t\treturn this._initDecoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tvar worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( { type: 'init', decoderConfig: this.decoderConfig } );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tvar message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tvar worker = this.workerPool[ this.workerPool.length - 1 ];\n\t\t\tworker._taskCosts[ taskID ] = taskCost;\n\t\t\tworker._taskLoad += taskCost;\n\t\t\treturn worker;\n\n\t\t} );\n\n\t},\n\n\t_releaseTask: function ( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t},\n\n\tdebug: function () {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t},\n\n\tdispose: function () {\n\n\t\tfor ( var i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n/* WEB WORKER */\n\nDRACOLoader.DRACOWorker = function () {\n\n\tvar decoderConfig;\n\tvar decoderPending;\n\n\tonmessage = function ( e ) {\n\n\t\tvar message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tdecoderConfig = message.decoderConfig;\n\t\t\t\tdecoderPending = new Promise( function ( resolve/*, reject*/ ) {\n\n\t\t\t\t\tdecoderConfig.onModuleLoaded = function ( draco ) {\n\n\t\t\t\t\t\t// Module is Promise-like. Wrap before resolving to avoid loop.\n\t\t\t\t\t\tresolve( { draco: draco } );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tDracoDecoderModule( decoderConfig ); // eslint-disable-line no-undef\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\t\t\t\tvar buffer = message.buffer;\n\t\t\t\tvar taskConfig = message.taskConfig;\n\t\t\t\tdecoderPending.then( ( module ) => {\n\n\t\t\t\t\tvar draco = module.draco;\n\t\t\t\t\tvar decoder = new draco.Decoder();\n\t\t\t\t\tvar decoderBuffer = new draco.DecoderBuffer();\n\t\t\t\t\tdecoderBuffer.Init( new Int8Array( buffer ), buffer.byteLength );\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tvar geometry = decodeGeometry( draco, decoder, decoderBuffer, taskConfig );\n\n\t\t\t\t\t\tvar buffers = geometry.attributes.map( ( attr ) => attr.array.buffer );\n\n\t\t\t\t\t\tif ( geometry.index ) buffers.push( geometry.index.array.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, geometry }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t} finally {\n\n\t\t\t\t\t\tdraco.destroy( decoderBuffer );\n\t\t\t\t\t\tdraco.destroy( decoder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeGeometry( draco, decoder, decoderBuffer, taskConfig ) {\n\n\t\tvar attributeIDs = taskConfig.attributeIDs;\n\t\tvar attributeTypes = taskConfig.attributeTypes;\n\n\t\tvar dracoGeometry;\n\t\tvar decodingStatus;\n\n\t\tvar geometryType = decoder.GetEncodedGeometryType( decoderBuffer );\n\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tdracoGeometry = new draco.Mesh();\n\t\t\tdecodingStatus = decoder.DecodeBufferToMesh( decoderBuffer, dracoGeometry );\n\n\t\t} else if ( geometryType === draco.POINT_CLOUD ) {\n\n\t\t\tdracoGeometry = new draco.PointCloud();\n\t\t\tdecodingStatus = decoder.DecodeBufferToPointCloud( decoderBuffer, dracoGeometry );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Unexpected geometry type.' );\n\n\t\t}\n\n\t\tif ( ! decodingStatus.ok() || dracoGeometry.ptr === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Decoding failed: ' + decodingStatus.error_msg() );\n\n\t\t}\n\n\t\tvar geometry = { index: null, attributes: [] };\n\n\t\t// Gather all vertex attributes.\n\t\tfor ( var attributeName in attributeIDs ) {\n\n\t\t\tvar attributeType = self[ attributeTypes[ attributeName ] ];\n\n\t\t\tvar attribute;\n\t\t\tvar attributeID;\n\n\t\t\t// A Draco file may be created with default vertex attributes, whose attribute IDs\n\t\t\t// are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively,\n\t\t\t// a Draco file may contain a custom set of attributes, identified by known unique\n\t\t\t// IDs. glTF files always do the latter, and `.drc` files typically do the former.\n\t\t\tif ( taskConfig.useUniqueIDs ) {\n\n\t\t\t\tattributeID = attributeIDs[ attributeName ];\n\t\t\t\tattribute = decoder.GetAttributeByUniqueId( dracoGeometry, attributeID );\n\n\t\t\t} else {\n\n\t\t\t\tattributeID = decoder.GetAttributeId( dracoGeometry, draco[ attributeIDs[ attributeName ] ] );\n\n\t\t\t\tif ( attributeID === - 1 ) continue;\n\n\t\t\t\tattribute = decoder.GetAttribute( dracoGeometry, attributeID );\n\n\t\t\t}\n\n\t\t\tgeometry.attributes.push( decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) );\n\n\t\t}\n\n\t\t// Add index.\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tgeometry.index = decodeIndex( draco, decoder, dracoGeometry );\n\n\t\t}\n\n\t\tdraco.destroy( dracoGeometry );\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction decodeIndex( draco, decoder, dracoGeometry ) {\n\n\t\tvar numFaces = dracoGeometry.num_faces();\n\t\tvar numIndices = numFaces * 3;\n\t\tvar byteLength = numIndices * 4;\n\n\t\tvar ptr = draco._malloc( byteLength );\n\t\tdecoder.GetTrianglesUInt32Array( dracoGeometry, byteLength, ptr );\n\t\tvar index = new Uint32Array( draco.HEAPF32.buffer, ptr, numIndices ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn { array: index, itemSize: 1 };\n\n\t}\n\n\tfunction decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) {\n\n\t\tvar numComponents = attribute.num_components();\n\t\tvar numPoints = dracoGeometry.num_points();\n\t\tvar numValues = numPoints * numComponents;\n\t\tvar byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n\t\tvar dataType = getDracoDataType( draco, attributeType );\n\n\t\tvar ptr = draco._malloc( byteLength );\n\t\tdecoder.GetAttributeDataArrayForAllPoints( dracoGeometry, attribute, dataType, byteLength, ptr );\n\t\tvar array = new attributeType( draco.HEAPF32.buffer, ptr, numValues ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn {\n\t\t\tname: attributeName,\n\t\t\tarray: array,\n\t\t\titemSize: numComponents\n\t\t};\n\n\t}\n\n\tfunction getDracoDataType( draco, attributeType ) {\n\n\t\tswitch ( attributeType ) {\n\n\t\t\tcase Float32Array: return draco.DT_FLOAT32;\n\t\t\tcase Int8Array: return draco.DT_INT8;\n\t\t\tcase Int16Array: return draco.DT_INT16;\n\t\t\tcase Int32Array: return draco.DT_INT32;\n\t\t\tcase Uint8Array: return draco.DT_UINT8;\n\t\t\tcase Uint16Array: return draco.DT_UINT16;\n\t\t\tcase Uint32Array: return draco.DT_UINT32;\n\n\t\t}\n\n\t}\n\n};\n\nDRACOLoader.taskCache = new WeakMap();\n\n/** Deprecated static methods */\n\n/** @deprecated */\nDRACOLoader.setDecoderPath = function () {\n\n\tconsole.warn( 'THREE.DRACOLoader: The .setDecoderPath() method has been removed. Use instance methods.' );\n\n};\n\n/** @deprecated */\nDRACOLoader.setDecoderConfig = function () {\n\n\tconsole.warn( 'THREE.DRACOLoader: The .setDecoderConfig() method has been removed. Use instance methods.' );\n\n};\n\n/** @deprecated */\nDRACOLoader.releaseDecoderModule = function () {\n\n\tconsole.warn( 'THREE.DRACOLoader: The .releaseDecoderModule() method has been removed. Use instance methods.' );\n\n};\n\n/** @deprecated */\nDRACOLoader.getDecoderModule = function () {\n\n\tconsole.warn( 'THREE.DRACOLoader: The .getDecoderModule() method has been removed. Use instance methods.' );\n\n};\n\nexport { DRACOLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/EXRLoader.js",
    "content": "import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearEncoding,\n\tLinearFilter,\n\tNearestFilter,\n\tRGBAFormat,\n\tRGBEEncoding,\n\tRGBEFormat,\n\tRGBFormat,\n\tUnsignedByteType\n} from '../../../build/three.module.js';\nimport { Inflate } from '../libs/inflate.module.min.js';\n\n/**\n * OpenEXR loader currently supports uncompressed, ZIP(S), RLE, PIZ and DWA/B compression.\n * Supports reading as UnsignedByte, HalfFloat and Float type data texture.\n *\n * Referred to the original Industrial Light & Magic OpenEXR implementation and the TinyEXR / Syoyo Fujita\n * implementation, so I have preserved their copyright notices.\n */\n\n// /*\n// Copyright (c) 2014 - 2017, Syoyo Fujita\n// All rights reserved.\n\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//     * Redistributions of source code must retain the above copyright\n//       notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above copyright\n//       notice, this list of conditions and the following disclaimer in the\n//       documentation and/or other materials provided with the distribution.\n//     * Neither the name of the Syoyo Fujita nor the\n//       names of its contributors may be used to endorse or promote products\n//       derived from this software without specific prior written permission.\n\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n// DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// */\n\n// // TinyEXR contains some OpenEXR code, which is licensed under ------------\n\n// ///////////////////////////////////////////////////////////////////////////\n// //\n// // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas\n// // Digital Ltd. LLC\n// //\n// // All rights reserved.\n// //\n// // Redistribution and use in source and binary forms, with or without\n// // modification, are permitted provided that the following conditions are\n// // met:\n// // *       Redistributions of source code must retain the above copyright\n// // notice, this list of conditions and the following disclaimer.\n// // *       Redistributions in binary form must reproduce the above\n// // copyright notice, this list of conditions and the following disclaimer\n// // in the documentation and/or other materials provided with the\n// // distribution.\n// // *       Neither the name of Industrial Light & Magic nor the names of\n// // its contributors may be used to endorse or promote products derived\n// // from this software without specific prior written permission.\n// //\n// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// // \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n// //\n// ///////////////////////////////////////////////////////////////////////////\n\n// // End of OpenEXR license -------------------------------------------------\n\nvar EXRLoader = function ( manager ) {\n\n\tDataTextureLoader.call( this, manager );\n\n\tthis.type = FloatType;\n\n};\n\nEXRLoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype ), {\n\n\tconstructor: EXRLoader,\n\n\tparse: function ( buffer ) {\n\n\t\tconst USHORT_RANGE = ( 1 << 16 );\n\t\tconst BITMAP_SIZE = ( USHORT_RANGE >> 3 );\n\n\t\tconst HUF_ENCBITS = 16; // literal (value) bit length\n\t\tconst HUF_DECBITS = 14; // decoding bit size (>= 8)\n\n\t\tconst HUF_ENCSIZE = ( 1 << HUF_ENCBITS ) + 1; // encoding table size\n\t\tconst HUF_DECSIZE = 1 << HUF_DECBITS; // decoding table size\n\t\tconst HUF_DECMASK = HUF_DECSIZE - 1;\n\n\t\tconst NBITS = 16;\n\t\tconst A_OFFSET = 1 << ( NBITS - 1 );\n\t\tconst MOD_MASK = ( 1 << NBITS ) - 1;\n\n\t\tconst SHORT_ZEROCODE_RUN = 59;\n\t\tconst LONG_ZEROCODE_RUN = 63;\n\t\tconst SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;\n\n\t\tconst ULONG_SIZE = 8;\n\t\tconst FLOAT32_SIZE = 4;\n\t\tconst INT32_SIZE = 4;\n\t\tconst INT16_SIZE = 2;\n\t\tconst INT8_SIZE = 1;\n\n\t\tconst STATIC_HUFFMAN = 0;\n\t\tconst DEFLATE = 1;\n\n\t\tconst UNKNOWN = 0;\n\t\tconst LOSSY_DCT = 1;\n\t\tconst RLE = 2;\n\n\t\tconst logBase = Math.pow( 2.7182818, 2.2 );\n\n\t\tvar tmpDataView = new DataView( new ArrayBuffer( 8 ) );\n\n\t\tfunction frexp( value ) {\n\n\t\t\tif ( value === 0 ) return [ value, 0 ];\n\n\t\t\ttmpDataView.setFloat64( 0, value );\n\n\t\t\tvar bits = ( tmpDataView.getUint32( 0 ) >>> 20 ) & 0x7FF;\n\t\t\tif ( bits === 0 ) { // denormal\n\n\t\t\t\ttmpDataView.setFloat64( 0, value * Math.pow( 2, 64 ) ); // exp + 64\n\t\t\t\tbits = ( ( tmpDataView.getUint32( 0 ) >>> 20 ) & 0x7FF ) - 64;\n\n\t\t\t}\n\n\t\t\tvar exponent = bits - 1022;\n\t\t\tvar mantissa = ldexp( value, - exponent );\n\n\t\t\treturn [ mantissa, exponent ];\n\n\t\t}\n\n\t\tfunction ldexp( mantissa, exponent ) {\n\n\t\t\tvar steps = Math.min( 3, Math.ceil( Math.abs( exponent ) / 1023 ) );\n\t\t\tvar result = mantissa;\n\n\t\t\tfor ( var i = 0; i < steps; i ++ )\n\t\t\t\tresult *= Math.pow( 2, Math.floor( ( exponent + i ) / steps ) );\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction reverseLutFromBitmap( bitmap, lut ) {\n\n\t\t\tvar k = 0;\n\n\t\t\tfor ( var i = 0; i < USHORT_RANGE; ++ i ) {\n\n\t\t\t\tif ( ( i == 0 ) || ( bitmap[ i >> 3 ] & ( 1 << ( i & 7 ) ) ) ) {\n\n\t\t\t\t\tlut[ k ++ ] = i;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar n = k - 1;\n\n\t\t\twhile ( k < USHORT_RANGE ) lut[ k ++ ] = 0;\n\n\t\t\treturn n;\n\n\t\t}\n\n\t\tfunction hufClearDecTable( hdec ) {\n\n\t\t\tfor ( var i = 0; i < HUF_DECSIZE; i ++ ) {\n\n\t\t\t\thdec[ i ] = {};\n\t\t\t\thdec[ i ].len = 0;\n\t\t\t\thdec[ i ].lit = 0;\n\t\t\t\thdec[ i ].p = null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst getBitsReturn = { l: 0, c: 0, lc: 0 };\n\n\t\tfunction getBits( nBits, c, lc, uInt8Array, inOffset ) {\n\n\t\t\twhile ( lc < nBits ) {\n\n\t\t\t\tc = ( c << 8 ) | parseUint8Array( uInt8Array, inOffset );\n\t\t\t\tlc += 8;\n\n\t\t\t}\n\n\t\t\tlc -= nBits;\n\n\t\t\tgetBitsReturn.l = ( c >> lc ) & ( ( 1 << nBits ) - 1 );\n\t\t\tgetBitsReturn.c = c;\n\t\t\tgetBitsReturn.lc = lc;\n\n\t\t}\n\n\t\tconst hufTableBuffer = new Array( 59 );\n\n\t\tfunction hufCanonicalCodeTable( hcode ) {\n\n\t\t\tfor ( var i = 0; i <= 58; ++ i ) hufTableBuffer[ i ] = 0;\n\t\t\tfor ( var i = 0; i < HUF_ENCSIZE; ++ i ) hufTableBuffer[ hcode[ i ] ] += 1;\n\n\t\t\tvar c = 0;\n\n\t\t\tfor ( var i = 58; i > 0; -- i ) {\n\n\t\t\t\tvar nc = ( ( c + hufTableBuffer[ i ] ) >> 1 );\n\t\t\t\thufTableBuffer[ i ] = c;\n\t\t\t\tc = nc;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < HUF_ENCSIZE; ++ i ) {\n\n\t\t\t\tvar l = hcode[ i ];\n\t\t\t\tif ( l > 0 ) hcode[ i ] = l | ( hufTableBuffer[ l ] ++ << 6 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction hufUnpackEncTable( uInt8Array, inDataView, inOffset, ni, im, iM, hcode ) {\n\n\t\t\tvar p = inOffset;\n\t\t\tvar c = 0;\n\t\t\tvar lc = 0;\n\n\t\t\tfor ( ; im <= iM; im ++ ) {\n\n\t\t\t\tif ( p.value - inOffset.value > ni ) return false;\n\n\t\t\t\tgetBits( 6, c, lc, uInt8Array, p );\n\n\t\t\t\tvar l = getBitsReturn.l;\n\t\t\t\tc = getBitsReturn.c;\n\t\t\t\tlc = getBitsReturn.lc;\n\n\t\t\t\thcode[ im ] = l;\n\n\t\t\t\tif ( l == LONG_ZEROCODE_RUN ) {\n\n\t\t\t\t\tif ( p.value - inOffset.value > ni ) {\n\n\t\t\t\t\t\tthrow 'Something wrong with hufUnpackEncTable';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgetBits( 8, c, lc, uInt8Array, p );\n\n\t\t\t\t\tvar zerun = getBitsReturn.l + SHORTEST_LONG_RUN;\n\t\t\t\t\tc = getBitsReturn.c;\n\t\t\t\t\tlc = getBitsReturn.lc;\n\n\t\t\t\t\tif ( im + zerun > iM + 1 ) {\n\n\t\t\t\t\t\tthrow 'Something wrong with hufUnpackEncTable';\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( zerun -- ) hcode[ im ++ ] = 0;\n\n\t\t\t\t\tim --;\n\n\t\t\t\t} else if ( l >= SHORT_ZEROCODE_RUN ) {\n\n\t\t\t\t\tvar zerun = l - SHORT_ZEROCODE_RUN + 2;\n\n\t\t\t\t\tif ( im + zerun > iM + 1 ) {\n\n\t\t\t\t\t\tthrow 'Something wrong with hufUnpackEncTable';\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( zerun -- ) hcode[ im ++ ] = 0;\n\n\t\t\t\t\tim --;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thufCanonicalCodeTable( hcode );\n\n\t\t}\n\n\t\tfunction hufLength( code ) {\n\n\t\t\treturn code & 63;\n\n\t\t}\n\n\t\tfunction hufCode( code ) {\n\n\t\t\treturn code >> 6;\n\n\t\t}\n\n\t\tfunction hufBuildDecTable( hcode, im, iM, hdecod ) {\n\n\t\t\tfor ( ; im <= iM; im ++ ) {\n\n\t\t\t\tvar c = hufCode( hcode[ im ] );\n\t\t\t\tvar l = hufLength( hcode[ im ] );\n\n\t\t\t\tif ( c >> l ) {\n\n\t\t\t\t\tthrow 'Invalid table entry';\n\n\t\t\t\t}\n\n\t\t\t\tif ( l > HUF_DECBITS ) {\n\n\t\t\t\t\tvar pl = hdecod[ ( c >> ( l - HUF_DECBITS ) ) ];\n\n\t\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\t\tthrow 'Invalid table entry';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpl.lit ++;\n\n\t\t\t\t\tif ( pl.p ) {\n\n\t\t\t\t\t\tvar p = pl.p;\n\t\t\t\t\t\tpl.p = new Array( pl.lit );\n\n\t\t\t\t\t\tfor ( var i = 0; i < pl.lit - 1; ++ i ) {\n\n\t\t\t\t\t\t\tpl.p[ i ] = p[ i ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpl.p = new Array( 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tpl.p[ pl.lit - 1 ] = im;\n\n\t\t\t\t} else if ( l ) {\n\n\t\t\t\t\tvar plOffset = 0;\n\n\t\t\t\t\tfor ( var i = 1 << ( HUF_DECBITS - l ); i > 0; i -- ) {\n\n\t\t\t\t\t\tvar pl = hdecod[ ( c << ( HUF_DECBITS - l ) ) + plOffset ];\n\n\t\t\t\t\t\tif ( pl.len || pl.p ) {\n\n\t\t\t\t\t\t\tthrow 'Invalid table entry';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpl.len = l;\n\t\t\t\t\t\tpl.lit = im;\n\n\t\t\t\t\t\tplOffset ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst getCharReturn = { c: 0, lc: 0 };\n\n\t\tfunction getChar( c, lc, uInt8Array, inOffset ) {\n\n\t\t\tc = ( c << 8 ) | parseUint8Array( uInt8Array, inOffset );\n\t\t\tlc += 8;\n\n\t\t\tgetCharReturn.c = c;\n\t\t\tgetCharReturn.lc = lc;\n\n\t\t}\n\n\t\tconst getCodeReturn = { c: 0, lc: 0 };\n\n\t\tfunction getCode( po, rlc, c, lc, uInt8Array, inDataView, inOffset, outBuffer, outBufferOffset, outBufferEndOffset ) {\n\n\t\t\tif ( po == rlc ) {\n\n\t\t\t\tif ( lc < 8 ) {\n\n\t\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\t\t\t\t\tc = getCharReturn.c;\n\t\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\t}\n\n\t\t\t\tlc -= 8;\n\n\t\t\t\tvar cs = ( c >> lc );\n\t\t\t\tvar cs = new Uint8Array( [ cs ] )[ 0 ];\n\n\t\t\t\tif ( outBufferOffset.value + cs > outBufferEndOffset ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\tvar s = outBuffer[ outBufferOffset.value - 1 ];\n\n\t\t\t\twhile ( cs -- > 0 ) {\n\n\t\t\t\t\toutBuffer[ outBufferOffset.value ++ ] = s;\n\n\t\t\t\t}\n\n\t\t\t} else if ( outBufferOffset.value < outBufferEndOffset ) {\n\n\t\t\t\toutBuffer[ outBufferOffset.value ++ ] = po;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\tgetCodeReturn.c = c;\n\t\t\tgetCodeReturn.lc = lc;\n\n\t\t}\n\n\t\tfunction UInt16( value ) {\n\n\t\t\treturn ( value & 0xFFFF );\n\n\t\t}\n\n\t\tfunction Int16( value ) {\n\n\t\t\tvar ref = UInt16( value );\n\t\t\treturn ( ref > 0x7FFF ) ? ref - 0x10000 : ref;\n\n\t\t}\n\n\t\tconst wdec14Return = { a: 0, b: 0 };\n\n\t\tfunction wdec14( l, h ) {\n\n\t\t\tvar ls = Int16( l );\n\t\t\tvar hs = Int16( h );\n\n\t\t\tvar hi = hs;\n\t\t\tvar ai = ls + ( hi & 1 ) + ( hi >> 1 );\n\n\t\t\tvar as = ai;\n\t\t\tvar bs = ai - hi;\n\n\t\t\twdec14Return.a = as;\n\t\t\twdec14Return.b = bs;\n\n\t\t}\n\n\t\tfunction wdec16( l, h ) {\n\n\t\t\tvar m = UInt16( l );\n\t\t\tvar d = UInt16( h );\n\n\t\t\tvar bb = ( m - ( d >> 1 ) ) & MOD_MASK;\n\t\t\tvar aa = ( d + bb - A_OFFSET ) & MOD_MASK;\n\n\t\t\twdec14Return.a = aa;\n\t\t\twdec14Return.b = bb;\n\n\t\t}\n\n\t\tfunction wav2Decode( buffer, j, nx, ox, ny, oy, mx ) {\n\n\t\t\tvar w14 = mx < ( 1 << 14 );\n\t\t\tvar n = ( nx > ny ) ? ny : nx;\n\t\t\tvar p = 1;\n\t\t\tvar p2;\n\n\t\t\twhile ( p <= n ) p <<= 1;\n\n\t\t\tp >>= 1;\n\t\t\tp2 = p;\n\t\t\tp >>= 1;\n\n\t\t\twhile ( p >= 1 ) {\n\n\t\t\t\tvar py = 0;\n\t\t\t\tvar ey = py + oy * ( ny - p2 );\n\t\t\t\tvar oy1 = oy * p;\n\t\t\t\tvar oy2 = oy * p2;\n\t\t\t\tvar ox1 = ox * p;\n\t\t\t\tvar ox2 = ox * p2;\n\t\t\t\tvar i00, i01, i10, i11;\n\n\t\t\t\tfor ( ; py <= ey; py += oy2 ) {\n\n\t\t\t\t\tvar px = py;\n\t\t\t\t\tvar ex = py + ox * ( nx - p2 );\n\n\t\t\t\t\tfor ( ; px <= ex; px += ox2 ) {\n\n\t\t\t\t\t\tvar p01 = px + ox1;\n\t\t\t\t\t\tvar p10 = px + oy1;\n\t\t\t\t\t\tvar p11 = p10 + ox1;\n\n\t\t\t\t\t\tif ( w14 ) {\n\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\t\ti10 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( buffer[ p01 + j ], buffer[ p11 + j ] );\n\n\t\t\t\t\t\t\ti01 = wdec14Return.a;\n\t\t\t\t\t\t\ti11 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( i00, i01 );\n\n\t\t\t\t\t\t\tbuffer[ px + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec14( i10, i11 );\n\n\t\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p11 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\t\ti10 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( buffer[ p01 + j ], buffer[ p11 + j ] );\n\n\t\t\t\t\t\t\ti01 = wdec14Return.a;\n\t\t\t\t\t\t\ti11 = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( i00, i01 );\n\n\t\t\t\t\t\t\tbuffer[ px + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\t\twdec16( i10, i11 );\n\n\t\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.a;\n\t\t\t\t\t\t\tbuffer[ p11 + j ] = wdec14Return.b;\n\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( nx & p ) {\n\n\t\t\t\t\t\tvar p10 = px + oy1;\n\n\t\t\t\t\t\tif ( w14 )\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p10 + j ] );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p10 + j ] );\n\n\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\tbuffer[ p10 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\tbuffer[ px + j ] = i00;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ny & p ) {\n\n\t\t\t\t\tvar px = py;\n\t\t\t\t\tvar ex = py + ox * ( nx - p2 );\n\n\t\t\t\t\tfor ( ; px <= ex; px += ox2 ) {\n\n\t\t\t\t\t\tvar p01 = px + ox1;\n\n\t\t\t\t\t\tif ( w14 )\n\t\t\t\t\t\t\twdec14( buffer[ px + j ], buffer[ p01 + j ] );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\twdec16( buffer[ px + j ], buffer[ p01 + j ] );\n\n\t\t\t\t\t\ti00 = wdec14Return.a;\n\t\t\t\t\t\tbuffer[ p01 + j ] = wdec14Return.b;\n\n\t\t\t\t\t\tbuffer[ px + j ] = i00;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tp2 = p;\n\t\t\t\tp >>= 1;\n\n\t\t\t}\n\n\t\t\treturn py;\n\n\t\t}\n\n\t\tfunction hufDecode( encodingTable, decodingTable, uInt8Array, inDataView, inOffset, ni, rlc, no, outBuffer, outOffset ) {\n\n\t\t\tvar c = 0;\n\t\t\tvar lc = 0;\n\t\t\tvar outBufferEndOffset = no;\n\t\t\tvar inOffsetEnd = Math.trunc( inOffset.value + ( ni + 7 ) / 8 );\n\n\t\t\twhile ( inOffset.value < inOffsetEnd ) {\n\n\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\n\t\t\t\tc = getCharReturn.c;\n\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\twhile ( lc >= HUF_DECBITS ) {\n\n\t\t\t\t\tvar index = ( c >> ( lc - HUF_DECBITS ) ) & HUF_DECMASK;\n\t\t\t\t\tvar pl = decodingTable[ index ];\n\n\t\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\t\tlc -= pl.len;\n\n\t\t\t\t\t\tgetCode( pl.lit, rlc, c, lc, uInt8Array, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ! pl.p ) {\n\n\t\t\t\t\t\t\tthrow 'hufDecode issues';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar j;\n\n\t\t\t\t\t\tfor ( j = 0; j < pl.lit; j ++ ) {\n\n\t\t\t\t\t\t\tvar l = hufLength( encodingTable[ pl.p[ j ] ] );\n\n\t\t\t\t\t\t\twhile ( lc < l && inOffset.value < inOffsetEnd ) {\n\n\t\t\t\t\t\t\t\tgetChar( c, lc, uInt8Array, inOffset );\n\n\t\t\t\t\t\t\t\tc = getCharReturn.c;\n\t\t\t\t\t\t\t\tlc = getCharReturn.lc;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( lc >= l ) {\n\n\t\t\t\t\t\t\t\tif ( hufCode( encodingTable[ pl.p[ j ] ] ) == ( ( c >> ( lc - l ) ) & ( ( 1 << l ) - 1 ) ) ) {\n\n\t\t\t\t\t\t\t\t\tlc -= l;\n\n\t\t\t\t\t\t\t\t\tgetCode( pl.p[ j ], rlc, c, lc, uInt8Array, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( j == pl.lit ) {\n\n\t\t\t\t\t\t\tthrow 'hufDecode issues';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar i = ( 8 - ni ) & 7;\n\n\t\t\tc >>= i;\n\t\t\tlc -= i;\n\n\t\t\twhile ( lc > 0 ) {\n\n\t\t\t\tvar pl = decodingTable[ ( c << ( HUF_DECBITS - lc ) ) & HUF_DECMASK ];\n\n\t\t\t\tif ( pl.len ) {\n\n\t\t\t\t\tlc -= pl.len;\n\n\t\t\t\t\tgetCode( pl.lit, rlc, c, lc, uInt8Array, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset );\n\n\t\t\t\t\tc = getCodeReturn.c;\n\t\t\t\t\tlc = getCodeReturn.lc;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow 'hufDecode issues';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction hufUncompress( uInt8Array, inDataView, inOffset, nCompressed, outBuffer, nRaw ) {\n\n\t\t\tvar outOffset = { value: 0 };\n\t\t\tvar initialInOffset = inOffset.value;\n\n\t\t\tvar im = parseUint32( inDataView, inOffset );\n\t\t\tvar iM = parseUint32( inDataView, inOffset );\n\n\t\t\tinOffset.value += 4;\n\n\t\t\tvar nBits = parseUint32( inDataView, inOffset );\n\n\t\t\tinOffset.value += 4;\n\n\t\t\tif ( im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE ) {\n\n\t\t\t\tthrow 'Something wrong with HUF_ENCSIZE';\n\n\t\t\t}\n\n\t\t\tvar freq = new Array( HUF_ENCSIZE );\n\t\t\tvar hdec = new Array( HUF_DECSIZE );\n\n\t\t\thufClearDecTable( hdec );\n\n\t\t\tvar ni = nCompressed - ( inOffset.value - initialInOffset );\n\n\t\t\thufUnpackEncTable( uInt8Array, inDataView, inOffset, ni, im, iM, freq );\n\n\t\t\tif ( nBits > 8 * ( nCompressed - ( inOffset.value - initialInOffset ) ) ) {\n\n\t\t\t\tthrow 'Something wrong with hufUncompress';\n\n\t\t\t}\n\n\t\t\thufBuildDecTable( freq, im, iM, hdec );\n\n\t\t\thufDecode( freq, hdec, uInt8Array, inDataView, inOffset, nBits, iM, nRaw, outBuffer, outOffset );\n\n\t\t}\n\n\t\tfunction applyLut( lut, data, nData ) {\n\n\t\t\tfor ( var i = 0; i < nData; ++ i ) {\n\n\t\t\t\tdata[ i ] = lut[ data[ i ] ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction predictor( source ) {\n\n\t\t\tfor ( var t = 1; t < source.length; t ++ ) {\n\n\t\t\t\tvar d = source[ t - 1 ] + source[ t ] - 128;\n\t\t\t\tsource[ t ] = d;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction interleaveScalar( source, out ) {\n\n\t\t\tvar t1 = 0;\n\t\t\tvar t2 = Math.floor( ( source.length + 1 ) / 2 );\n\t\t\tvar s = 0;\n\t\t\tvar stop = source.length - 1;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tif ( s > stop ) break;\n\t\t\t\tout[ s ++ ] = source[ t1 ++ ];\n\n\t\t\t\tif ( s > stop ) break;\n\t\t\t\tout[ s ++ ] = source[ t2 ++ ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction decodeRunLength( source ) {\n\n\t\t\tvar size = source.byteLength;\n\t\t\tvar out = new Array();\n\t\t\tvar p = 0;\n\n\t\t\tvar reader = new DataView( source );\n\n\t\t\twhile ( size > 0 ) {\n\n\t\t\t\tvar l = reader.getInt8( p ++ );\n\n\t\t\t\tif ( l < 0 ) {\n\n\t\t\t\t\tvar count = - l;\n\t\t\t\t\tsize -= count + 1;\n\n\t\t\t\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\tout.push( reader.getUint8( p ++ ) );\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar count = l;\n\t\t\t\t\tsize -= 2;\n\n\t\t\t\t\tvar value = reader.getUint8( p ++ );\n\n\t\t\t\t\tfor ( var i = 0; i < count + 1; i ++ ) {\n\n\t\t\t\t\t\tout.push( value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn out;\n\n\t\t}\n\n\t\tfunction lossyDctDecode( cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer ) {\n\n\t\t\tvar dataView = new DataView( outBuffer.buffer );\n\n\t\t\tvar width = channelData[ cscSet.idx[ 0 ] ].width;\n\t\t\tvar height = channelData[ cscSet.idx[ 0 ] ].height;\n\n\t\t\tvar numComp = 3;\n\n\t\t\tvar numFullBlocksX = Math.floor( width / 8.0 );\n\t\t\tvar numBlocksX = Math.ceil( width / 8.0 );\n\t\t\tvar numBlocksY = Math.ceil( height / 8.0 );\n\t\t\tvar leftoverX = width - ( numBlocksX - 1 ) * 8;\n\t\t\tvar leftoverY = height - ( numBlocksY - 1 ) * 8;\n\n\t\t\tvar currAcComp = { value: 0 };\n\t\t\tvar currDcComp = new Array( numComp );\n\t\t\tvar dctData = new Array( numComp );\n\t\t\tvar halfZigBlock = new Array( numComp );\n\t\t\tvar rowBlock = new Array( numComp );\n\t\t\tvar rowOffsets = new Array( numComp );\n\n\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\trowOffsets[ comp ] = rowPtrs[ cscSet.idx[ comp ] ];\n\t\t\t\tcurrDcComp[ comp ] = ( comp < 1 ) ? 0 : currDcComp[ comp - 1 ] + numBlocksX * numBlocksY;\n\t\t\t\tdctData[ comp ] = new Float32Array( 64 );\n\t\t\t\thalfZigBlock[ comp ] = new Uint16Array( 64 );\n\t\t\t\trowBlock[ comp ] = new Uint16Array( numBlocksX * 64 );\n\n\t\t\t}\n\n\t\t\tfor ( let blocky = 0; blocky < numBlocksY; ++ blocky ) {\n\n\t\t\t\tvar maxY = 8;\n\n\t\t\t\tif ( blocky == numBlocksY - 1 )\n\t\t\t\t\tmaxY = leftoverY;\n\n\t\t\t\tvar maxX = 8;\n\n\t\t\t\tfor ( let blockx = 0; blockx < numBlocksX; ++ blockx ) {\n\n\t\t\t\t\tif ( blockx == numBlocksX - 1 )\n\t\t\t\t\t\tmaxX = leftoverX;\n\n\t\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\t\thalfZigBlock[ comp ].fill( 0 );\n\n\t\t\t\t\t\t// set block DC component\n\t\t\t\t\t\thalfZigBlock[ comp ][ 0 ] = dcBuffer[ currDcComp[ comp ] ++ ];\n\t\t\t\t\t\t// set block AC components\n\t\t\t\t\t\tunRleAC( currAcComp, acBuffer, halfZigBlock[ comp ] );\n\n\t\t\t\t\t\t// UnZigZag block to float\n\t\t\t\t\t\tunZigZag( halfZigBlock[ comp ], dctData[ comp ] );\n\t\t\t\t\t\t// decode float dct\n\t\t\t\t\t\tdctInverse( dctData[ comp ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( numComp == 3 ) {\n\n\t\t\t\t\t\tcsc709Inverse( dctData );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\t\tconvertToHalf( dctData[ comp ], rowBlock[ comp ], blockx * 64 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} // blockx\n\n\t\t\t\tlet offset = 0;\n\n\t\t\t\tfor ( let comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\t\tconst type = channelData[ cscSet.idx[ comp ] ].type;\n\n\t\t\t\t\tfor ( let y = 8 * blocky; y < 8 * blocky + maxY; ++ y ) {\n\n\t\t\t\t\t\toffset = rowOffsets[ comp ][ y ];\n\n\t\t\t\t\t\tfor ( let blockx = 0; blockx < numFullBlocksX; ++ blockx ) {\n\n\t\t\t\t\t\t\tconst src = blockx * 64 + ( ( y & 0x7 ) * 8 );\n\n\t\t\t\t\t\t\tdataView.setUint16( offset + 0 * INT16_SIZE * type, rowBlock[ comp ][ src + 0 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 1 * INT16_SIZE * type, rowBlock[ comp ][ src + 1 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 2 * INT16_SIZE * type, rowBlock[ comp ][ src + 2 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 3 * INT16_SIZE * type, rowBlock[ comp ][ src + 3 ], true );\n\n\t\t\t\t\t\t\tdataView.setUint16( offset + 4 * INT16_SIZE * type, rowBlock[ comp ][ src + 4 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 5 * INT16_SIZE * type, rowBlock[ comp ][ src + 5 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 6 * INT16_SIZE * type, rowBlock[ comp ][ src + 6 ], true );\n\t\t\t\t\t\t\tdataView.setUint16( offset + 7 * INT16_SIZE * type, rowBlock[ comp ][ src + 7 ], true );\n\n\t\t\t\t\t\t\toffset += 8 * INT16_SIZE * type;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// handle partial X blocks\n\t\t\t\t\tif ( numFullBlocksX != numBlocksX ) {\n\n\t\t\t\t\t\tfor ( let y = 8 * blocky; y < 8 * blocky + maxY; ++ y ) {\n\n\t\t\t\t\t\t\tconst offset = rowOffsets[ comp ][ y ] + 8 * numFullBlocksX * INT16_SIZE * type;\n\t\t\t\t\t\t\tconst src = numFullBlocksX * 64 + ( ( y & 0x7 ) * 8 );\n\n\t\t\t\t\t\t\tfor ( let x = 0; x < maxX; ++ x ) {\n\n\t\t\t\t\t\t\t\tdataView.setUint16( offset + x * INT16_SIZE * type, rowBlock[ comp ][ src + x ], true );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} // comp\n\n\t\t\t} // blocky\n\n\t\t\tvar halfRow = new Uint16Array( width );\n\t\t\tvar dataView = new DataView( outBuffer.buffer );\n\n\t\t\t// convert channels back to float, if needed\n\t\t\tfor ( var comp = 0; comp < numComp; ++ comp ) {\n\n\t\t\t\tchannelData[ cscSet.idx[ comp ] ].decoded = true;\n\t\t\t\tvar type = channelData[ cscSet.idx[ comp ] ].type;\n\n\t\t\t\tif ( channelData[ comp ].type != 2 ) continue;\n\n\t\t\t\tfor ( var y = 0; y < height; ++ y ) {\n\n\t\t\t\t\tconst offset = rowOffsets[ comp ][ y ];\n\n\t\t\t\t\tfor ( var x = 0; x < width; ++ x ) {\n\n\t\t\t\t\t\thalfRow[ x ] = dataView.getUint16( offset + x * INT16_SIZE * type, true );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var x = 0; x < width; ++ x ) {\n\n\t\t\t\t\t\tdataView.setFloat32( offset + x * INT16_SIZE * type, decodeFloat16( halfRow[ x ] ), true );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction unRleAC( currAcComp, acBuffer, halfZigBlock ) {\n\n\t\t\tvar acValue;\n\t\t\tvar dctComp = 1;\n\n\t\t\twhile ( dctComp < 64 ) {\n\n\t\t\t\tacValue = acBuffer[ currAcComp.value ];\n\n\t\t\t\tif ( acValue == 0xff00 ) {\n\n\t\t\t\t\tdctComp = 64;\n\n\t\t\t\t} else if ( acValue >> 8 == 0xff ) {\n\n\t\t\t\t\tdctComp += acValue & 0xff;\n\n\t\t\t\t} else {\n\n\t\t\t\t\thalfZigBlock[ dctComp ] = acValue;\n\t\t\t\t\tdctComp ++;\n\n\t\t\t\t}\n\n\t\t\t\tcurrAcComp.value ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction unZigZag( src, dst ) {\n\n\t\t\tdst[ 0 ] = decodeFloat16( src[ 0 ] );\n\t\t\tdst[ 1 ] = decodeFloat16( src[ 1 ] );\n\t\t\tdst[ 2 ] = decodeFloat16( src[ 5 ] );\n\t\t\tdst[ 3 ] = decodeFloat16( src[ 6 ] );\n\t\t\tdst[ 4 ] = decodeFloat16( src[ 14 ] );\n\t\t\tdst[ 5 ] = decodeFloat16( src[ 15 ] );\n\t\t\tdst[ 6 ] = decodeFloat16( src[ 27 ] );\n\t\t\tdst[ 7 ] = decodeFloat16( src[ 28 ] );\n\t\t\tdst[ 8 ] = decodeFloat16( src[ 2 ] );\n\t\t\tdst[ 9 ] = decodeFloat16( src[ 4 ] );\n\n\t\t\tdst[ 10 ] = decodeFloat16( src[ 7 ] );\n\t\t\tdst[ 11 ] = decodeFloat16( src[ 13 ] );\n\t\t\tdst[ 12 ] = decodeFloat16( src[ 16 ] );\n\t\t\tdst[ 13 ] = decodeFloat16( src[ 26 ] );\n\t\t\tdst[ 14 ] = decodeFloat16( src[ 29 ] );\n\t\t\tdst[ 15 ] = decodeFloat16( src[ 42 ] );\n\t\t\tdst[ 16 ] = decodeFloat16( src[ 3 ] );\n\t\t\tdst[ 17 ] = decodeFloat16( src[ 8 ] );\n\t\t\tdst[ 18 ] = decodeFloat16( src[ 12 ] );\n\t\t\tdst[ 19 ] = decodeFloat16( src[ 17 ] );\n\n\t\t\tdst[ 20 ] = decodeFloat16( src[ 25 ] );\n\t\t\tdst[ 21 ] = decodeFloat16( src[ 30 ] );\n\t\t\tdst[ 22 ] = decodeFloat16( src[ 41 ] );\n\t\t\tdst[ 23 ] = decodeFloat16( src[ 43 ] );\n\t\t\tdst[ 24 ] = decodeFloat16( src[ 9 ] );\n\t\t\tdst[ 25 ] = decodeFloat16( src[ 11 ] );\n\t\t\tdst[ 26 ] = decodeFloat16( src[ 18 ] );\n\t\t\tdst[ 27 ] = decodeFloat16( src[ 24 ] );\n\t\t\tdst[ 28 ] = decodeFloat16( src[ 31 ] );\n\t\t\tdst[ 29 ] = decodeFloat16( src[ 40 ] );\n\n\t\t\tdst[ 30 ] = decodeFloat16( src[ 44 ] );\n\t\t\tdst[ 31 ] = decodeFloat16( src[ 53 ] );\n\t\t\tdst[ 32 ] = decodeFloat16( src[ 10 ] );\n\t\t\tdst[ 33 ] = decodeFloat16( src[ 19 ] );\n\t\t\tdst[ 34 ] = decodeFloat16( src[ 23 ] );\n\t\t\tdst[ 35 ] = decodeFloat16( src[ 32 ] );\n\t\t\tdst[ 36 ] = decodeFloat16( src[ 39 ] );\n\t\t\tdst[ 37 ] = decodeFloat16( src[ 45 ] );\n\t\t\tdst[ 38 ] = decodeFloat16( src[ 52 ] );\n\t\t\tdst[ 39 ] = decodeFloat16( src[ 54 ] );\n\n\t\t\tdst[ 40 ] = decodeFloat16( src[ 20 ] );\n\t\t\tdst[ 41 ] = decodeFloat16( src[ 22 ] );\n\t\t\tdst[ 42 ] = decodeFloat16( src[ 33 ] );\n\t\t\tdst[ 43 ] = decodeFloat16( src[ 38 ] );\n\t\t\tdst[ 44 ] = decodeFloat16( src[ 46 ] );\n\t\t\tdst[ 45 ] = decodeFloat16( src[ 51 ] );\n\t\t\tdst[ 46 ] = decodeFloat16( src[ 55 ] );\n\t\t\tdst[ 47 ] = decodeFloat16( src[ 60 ] );\n\t\t\tdst[ 48 ] = decodeFloat16( src[ 21 ] );\n\t\t\tdst[ 49 ] = decodeFloat16( src[ 34 ] );\n\n\t\t\tdst[ 50 ] = decodeFloat16( src[ 37 ] );\n\t\t\tdst[ 51 ] = decodeFloat16( src[ 47 ] );\n\t\t\tdst[ 52 ] = decodeFloat16( src[ 50 ] );\n\t\t\tdst[ 53 ] = decodeFloat16( src[ 56 ] );\n\t\t\tdst[ 54 ] = decodeFloat16( src[ 59 ] );\n\t\t\tdst[ 55 ] = decodeFloat16( src[ 61 ] );\n\t\t\tdst[ 56 ] = decodeFloat16( src[ 35 ] );\n\t\t\tdst[ 57 ] = decodeFloat16( src[ 36 ] );\n\t\t\tdst[ 58 ] = decodeFloat16( src[ 48 ] );\n\t\t\tdst[ 59 ] = decodeFloat16( src[ 49 ] );\n\n\t\t\tdst[ 60 ] = decodeFloat16( src[ 57 ] );\n\t\t\tdst[ 61 ] = decodeFloat16( src[ 58 ] );\n\t\t\tdst[ 62 ] = decodeFloat16( src[ 62 ] );\n\t\t\tdst[ 63 ] = decodeFloat16( src[ 63 ] );\n\n\t\t}\n\n\t\tfunction dctInverse( data ) {\n\n\t\t\tconst a = 0.5 * Math.cos( 3.14159 / 4.0 );\n\t\t\tconst b = 0.5 * Math.cos( 3.14159 / 16.0 );\n\t\t\tconst c = 0.5 * Math.cos( 3.14159 / 8.0 );\n\t\t\tconst d = 0.5 * Math.cos( 3.0 * 3.14159 / 16.0 );\n\t\t\tconst e = 0.5 * Math.cos( 5.0 * 3.14159 / 16.0 );\n\t\t\tconst f = 0.5 * Math.cos( 3.0 * 3.14159 / 8.0 );\n\t\t\tconst g = 0.5 * Math.cos( 7.0 * 3.14159 / 16.0 );\n\n\t\t\tvar alpha = new Array( 4 );\n\t\t\tvar beta = new Array( 4 );\n\t\t\tvar theta = new Array( 4 );\n\t\t\tvar gamma = new Array( 4 );\n\n\t\t\tfor ( var row = 0; row < 8; ++ row ) {\n\n\t\t\t\tvar rowPtr = row * 8;\n\n\t\t\t\talpha[ 0 ] = c * data[ rowPtr + 2 ];\n\t\t\t\talpha[ 1 ] = f * data[ rowPtr + 2 ];\n\t\t\t\talpha[ 2 ] = c * data[ rowPtr + 6 ];\n\t\t\t\talpha[ 3 ] = f * data[ rowPtr + 6 ];\n\n\t\t\t\tbeta[ 0 ] = b * data[ rowPtr + 1 ] + d * data[ rowPtr + 3 ] + e * data[ rowPtr + 5 ] + g * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 1 ] = d * data[ rowPtr + 1 ] - g * data[ rowPtr + 3 ] - b * data[ rowPtr + 5 ] - e * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 2 ] = e * data[ rowPtr + 1 ] - b * data[ rowPtr + 3 ] + g * data[ rowPtr + 5 ] + d * data[ rowPtr + 7 ];\n\t\t\t\tbeta[ 3 ] = g * data[ rowPtr + 1 ] - e * data[ rowPtr + 3 ] + d * data[ rowPtr + 5 ] - b * data[ rowPtr + 7 ];\n\n\t\t\t\ttheta[ 0 ] = a * ( data[ rowPtr + 0 ] + data[ rowPtr + 4 ] );\n\t\t\t\ttheta[ 3 ] = a * ( data[ rowPtr + 0 ] - data[ rowPtr + 4 ] );\n\t\t\t\ttheta[ 1 ] = alpha[ 0 ] + alpha[ 3 ];\n\t\t\t\ttheta[ 2 ] = alpha[ 1 ] - alpha[ 2 ];\n\n\t\t\t\tgamma[ 0 ] = theta[ 0 ] + theta[ 1 ];\n\t\t\t\tgamma[ 1 ] = theta[ 3 ] + theta[ 2 ];\n\t\t\t\tgamma[ 2 ] = theta[ 3 ] - theta[ 2 ];\n\t\t\t\tgamma[ 3 ] = theta[ 0 ] - theta[ 1 ];\n\n\t\t\t\tdata[ rowPtr + 0 ] = gamma[ 0 ] + beta[ 0 ];\n\t\t\t\tdata[ rowPtr + 1 ] = gamma[ 1 ] + beta[ 1 ];\n\t\t\t\tdata[ rowPtr + 2 ] = gamma[ 2 ] + beta[ 2 ];\n\t\t\t\tdata[ rowPtr + 3 ] = gamma[ 3 ] + beta[ 3 ];\n\n\t\t\t\tdata[ rowPtr + 4 ] = gamma[ 3 ] - beta[ 3 ];\n\t\t\t\tdata[ rowPtr + 5 ] = gamma[ 2 ] - beta[ 2 ];\n\t\t\t\tdata[ rowPtr + 6 ] = gamma[ 1 ] - beta[ 1 ];\n\t\t\t\tdata[ rowPtr + 7 ] = gamma[ 0 ] - beta[ 0 ];\n\n\t\t\t}\n\n\t\t\tfor ( var column = 0; column < 8; ++ column ) {\n\n\t\t\t\talpha[ 0 ] = c * data[ 16 + column ];\n\t\t\t\talpha[ 1 ] = f * data[ 16 + column ];\n\t\t\t\talpha[ 2 ] = c * data[ 48 + column ];\n\t\t\t\talpha[ 3 ] = f * data[ 48 + column ];\n\n\t\t\t\tbeta[ 0 ] = b * data[ 8 + column ] + d * data[ 24 + column ] + e * data[ 40 + column ] + g * data[ 56 + column ];\n\t\t\t\tbeta[ 1 ] = d * data[ 8 + column ] - g * data[ 24 + column ] - b * data[ 40 + column ] - e * data[ 56 + column ];\n\t\t\t\tbeta[ 2 ] = e * data[ 8 + column ] - b * data[ 24 + column ] + g * data[ 40 + column ] + d * data[ 56 + column ];\n\t\t\t\tbeta[ 3 ] = g * data[ 8 + column ] - e * data[ 24 + column ] + d * data[ 40 + column ] - b * data[ 56 + column ];\n\n\t\t\t\ttheta[ 0 ] = a * ( data[ column ] + data[ 32 + column ] );\n\t\t\t\ttheta[ 3 ] = a * ( data[ column ] - data[ 32 + column ] );\n\n\t\t\t\ttheta[ 1 ] = alpha[ 0 ] + alpha[ 3 ];\n\t\t\t\ttheta[ 2 ] = alpha[ 1 ] - alpha[ 2 ];\n\n\t\t\t\tgamma[ 0 ] = theta[ 0 ] + theta[ 1 ];\n\t\t\t\tgamma[ 1 ] = theta[ 3 ] + theta[ 2 ];\n\t\t\t\tgamma[ 2 ] = theta[ 3 ] - theta[ 2 ];\n\t\t\t\tgamma[ 3 ] = theta[ 0 ] - theta[ 1 ];\n\n\t\t\t\tdata[ 0 + column ] = gamma[ 0 ] + beta[ 0 ];\n\t\t\t\tdata[ 8 + column ] = gamma[ 1 ] + beta[ 1 ];\n\t\t\t\tdata[ 16 + column ] = gamma[ 2 ] + beta[ 2 ];\n\t\t\t\tdata[ 24 + column ] = gamma[ 3 ] + beta[ 3 ];\n\n\t\t\t\tdata[ 32 + column ] = gamma[ 3 ] - beta[ 3 ];\n\t\t\t\tdata[ 40 + column ] = gamma[ 2 ] - beta[ 2 ];\n\t\t\t\tdata[ 48 + column ] = gamma[ 1 ] - beta[ 1 ];\n\t\t\t\tdata[ 56 + column ] = gamma[ 0 ] - beta[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction csc709Inverse( data ) {\n\n\t\t\tfor ( var i = 0; i < 64; ++ i ) {\n\n\t\t\t\tvar y = data[ 0 ][ i ];\n\t\t\t\tvar cb = data[ 1 ][ i ];\n\t\t\t\tvar cr = data[ 2 ][ i ];\n\n\t\t\t\tdata[ 0 ][ i ] = y + 1.5747 * cr;\n\t\t\t\tdata[ 1 ][ i ] = y - 0.1873 * cb - 0.4682 * cr;\n\t\t\t\tdata[ 2 ][ i ] = y + 1.8556 * cb;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction convertToHalf( src, dst, idx ) {\n\n\t\t\tfor ( var i = 0; i < 64; ++ i ) {\n\n\t\t\t\tdst[ idx + i ] = DataUtils.toHalfFloat( toLinear( src[ i ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction toLinear( float ) {\n\n\t\t\tif ( float <= 1 ) {\n\n\t\t\t\treturn Math.sign( float ) * Math.pow( Math.abs( float ), 2.2 );\n\n\t\t\t} else {\n\n\t\t\t\treturn Math.sign( float ) * Math.pow( logBase, Math.abs( float ) - 1.0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction uncompressRAW( info ) {\n\n\t\t\treturn new DataView( info.array.buffer, info.offset.value, info.size );\n\n\t\t}\n\n\t\tfunction uncompressRLE( info ) {\n\n\t\t\tvar compressed = info.viewer.buffer.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tvar rawBuffer = new Uint8Array( decodeRunLength( compressed ) );\n\t\t\tvar tmpBuffer = new Uint8Array( rawBuffer.length );\n\n\t\t\tpredictor( rawBuffer ); // revert predictor\n\n\t\t\tinterleaveScalar( rawBuffer, tmpBuffer ); // interleave pixels\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressZIP( info ) {\n\n\t\t\tvar compressed = info.array.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tif ( typeof Inflate === 'undefined' ) {\n\n\t\t\t\tconsole.error( 'THREE.EXRLoader: External library Inflate.min.js required, obtain or import from https://github.com/imaya/zlib.js' );\n\n\t\t\t}\n\n\t\t\tvar inflate = new Inflate( compressed, { resize: true, verify: true } ); // eslint-disable-line no-undef\n\n\t\t\tvar rawBuffer = new Uint8Array( inflate.decompress().buffer );\n\t\t\tvar tmpBuffer = new Uint8Array( rawBuffer.length );\n\n\t\t\tpredictor( rawBuffer ); // revert predictor\n\n\t\t\tinterleaveScalar( rawBuffer, tmpBuffer ); // interleave pixels\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressPIZ( info ) {\n\n\t\t\tvar inDataView = info.viewer;\n\t\t\tvar inOffset = { value: info.offset.value };\n\n\t\t\tvar tmpBufSize = info.width * scanlineBlockSize * ( EXRHeader.channels.length * info.type );\n\t\t\tvar outBuffer = new Uint16Array( tmpBufSize );\n\t\t\tvar bitmap = new Uint8Array( BITMAP_SIZE );\n\n\t\t\t// Setup channel info\n\t\t\tvar outBufferEnd = 0;\n\t\t\tvar pizChannelData = new Array( info.channels );\n\t\t\tfor ( var i = 0; i < info.channels; i ++ ) {\n\n\t\t\t\tpizChannelData[ i ] = {};\n\t\t\t\tpizChannelData[ i ][ 'start' ] = outBufferEnd;\n\t\t\t\tpizChannelData[ i ][ 'end' ] = pizChannelData[ i ][ 'start' ];\n\t\t\t\tpizChannelData[ i ][ 'nx' ] = info.width;\n\t\t\t\tpizChannelData[ i ][ 'ny' ] = info.lines;\n\t\t\t\tpizChannelData[ i ][ 'size' ] = info.type;\n\n\t\t\t\toutBufferEnd += pizChannelData[ i ].nx * pizChannelData[ i ].ny * pizChannelData[ i ].size;\n\n\t\t\t}\n\n\t\t\t// Read range compression data\n\t\t\tvar minNonZero = parseUint16( inDataView, inOffset );\n\t\t\tvar maxNonZero = parseUint16( inDataView, inOffset );\n\n\t\t\tif ( maxNonZero >= BITMAP_SIZE ) {\n\n\t\t\t\tthrow 'Something is wrong with PIZ_COMPRESSION BITMAP_SIZE';\n\n\t\t\t}\n\n\t\t\tif ( minNonZero <= maxNonZero ) {\n\n\t\t\t\tfor ( var i = 0; i < maxNonZero - minNonZero + 1; i ++ ) {\n\n\t\t\t\t\tbitmap[ i + minNonZero ] = parseUint8( inDataView, inOffset );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Reverse LUT\n\t\t\tvar lut = new Uint16Array( USHORT_RANGE );\n\t\t\tvar maxValue = reverseLutFromBitmap( bitmap, lut );\n\n\t\t\tvar length = parseUint32( inDataView, inOffset );\n\n\t\t\t// Huffman decoding\n\t\t\thufUncompress( info.array, inDataView, inOffset, length, outBuffer, outBufferEnd );\n\n\t\t\t// Wavelet decoding\n\t\t\tfor ( var i = 0; i < info.channels; ++ i ) {\n\n\t\t\t\tvar cd = pizChannelData[ i ];\n\n\t\t\t\tfor ( var j = 0; j < pizChannelData[ i ].size; ++ j ) {\n\n\t\t\t\t\twav2Decode(\n\t\t\t\t\t\toutBuffer,\n\t\t\t\t\t\tcd.start + j,\n\t\t\t\t\t\tcd.nx,\n\t\t\t\t\t\tcd.size,\n\t\t\t\t\t\tcd.ny,\n\t\t\t\t\t\tcd.nx * cd.size,\n\t\t\t\t\t\tmaxValue\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Expand the pixel data to their original range\n\t\t\tapplyLut( lut, outBuffer, outBufferEnd );\n\n\t\t\t// Rearrange the pixel data into the format expected by the caller.\n\t\t\tvar tmpOffset = 0;\n\t\t\tvar tmpBuffer = new Uint8Array( outBuffer.buffer.byteLength );\n\t\t\tfor ( var y = 0; y < info.lines; y ++ ) {\n\n\t\t\t\tfor ( var c = 0; c < info.channels; c ++ ) {\n\n\t\t\t\t\tvar cd = pizChannelData[ c ];\n\n\t\t\t\t\tvar n = cd.nx * cd.size;\n\t\t\t\t\tvar cp = new Uint8Array( outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE );\n\n\t\t\t\t\ttmpBuffer.set( cp, tmpOffset );\n\t\t\t\t\ttmpOffset += n * INT16_SIZE;\n\t\t\t\t\tcd.end += n;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressPXR( info ) {\n\n\t\t\tvar compressed = info.array.slice( info.offset.value, info.offset.value + info.size );\n\n\t\t\tif ( typeof Inflate === 'undefined' ) {\n\n\t\t\t\tconsole.error( 'THREE.EXRLoader: External library Inflate.min.js required, obtain or import from https://github.com/imaya/zlib.js' );\n\n\t\t\t}\n\n\t\t\tconst inflate = new Inflate( compressed, { resize: true, verify: true } ); // eslint-disable-line no-undef\n\t\t\tconst rawBuffer = new Uint8Array( inflate.decompress().buffer );\n\n\t\t\tconst sz = info.lines * info.channels * info.width;\n\t\t\tconst tmpBuffer = ( info.type == 1 ) ? new Uint16Array( sz ) : new Uint32Array( sz );\n\n\t\t\tlet tmpBufferEnd = 0;\n\t\t\tlet writePtr = 0;\n\t\t\tconst ptr = new Array( 4 );\n\n\t\t\tfor ( let y = 0; y < info.lines; y ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < info.channels; c ++ ) {\n\n\t\t\t\t\tlet pixel = 0;\n\n\t\t\t\t\tswitch ( info.type ) {\n\n\t\t\t\t\t\tcase 1:\n\n\t\t\t\t\t\t\tptr[ 0 ] = tmpBufferEnd;\n\t\t\t\t\t\t\tptr[ 1 ] = ptr[ 0 ] + info.width;\n\t\t\t\t\t\t\ttmpBufferEnd = ptr[ 1 ] + info.width;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < info.width; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 8 ) | rawBuffer[ ptr[ 1 ] ++ ];\n\n\t\t\t\t\t\t\t\tpixel += diff;\n\n\t\t\t\t\t\t\t\ttmpBuffer[ writePtr ] = pixel;\n\t\t\t\t\t\t\t\twritePtr ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 2:\n\n\t\t\t\t\t\t\tptr[ 0 ] = tmpBufferEnd;\n\t\t\t\t\t\t\tptr[ 1 ] = ptr[ 0 ] + info.width;\n\t\t\t\t\t\t\tptr[ 2 ] = ptr[ 1 ] + info.width;\n\t\t\t\t\t\t\ttmpBufferEnd = ptr[ 2 ] + info.width;\n\n\t\t\t\t\t\t\tfor ( let j = 0; j < info.width; ++ j ) {\n\n\t\t\t\t\t\t\t\tconst diff = ( rawBuffer[ ptr[ 0 ] ++ ] << 24 ) | ( rawBuffer[ ptr[ 1 ] ++ ] << 16 ) | ( rawBuffer[ ptr[ 2 ] ++ ] << 8 );\n\n\t\t\t\t\t\t\t\tpixel += diff;\n\n\t\t\t\t\t\t\t\ttmpBuffer[ writePtr ] = pixel;\n\t\t\t\t\t\t\t\twritePtr ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new DataView( tmpBuffer.buffer );\n\n\t\t}\n\n\t\tfunction uncompressDWA( info ) {\n\n\t\t\tvar inDataView = info.viewer;\n\t\t\tvar inOffset = { value: info.offset.value };\n\t\t\tvar outBuffer = new Uint8Array( info.width * info.lines * ( EXRHeader.channels.length * info.type * INT16_SIZE ) );\n\n\t\t\t// Read compression header information\n\t\t\tvar dwaHeader = {\n\n\t\t\t\tversion: parseInt64( inDataView, inOffset ),\n\t\t\t\tunknownUncompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tunknownCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tacCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\tdcCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleCompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleUncompressedSize: parseInt64( inDataView, inOffset ),\n\t\t\t\trleRawSize: parseInt64( inDataView, inOffset ),\n\t\t\t\ttotalAcUncompressedCount: parseInt64( inDataView, inOffset ),\n\t\t\t\ttotalDcUncompressedCount: parseInt64( inDataView, inOffset ),\n\t\t\t\tacCompression: parseInt64( inDataView, inOffset )\n\n\t\t\t};\n\n\t\t\tif ( dwaHeader.version < 2 )\n\t\t\t\tthrow 'EXRLoader.parse: ' + EXRHeader.compression + ' version ' + dwaHeader.version + ' is unsupported';\n\n\t\t\t// Read channel ruleset information\n\t\t\tvar channelRules = new Array();\n\t\t\tvar ruleSize = parseUint16( inDataView, inOffset ) - INT16_SIZE;\n\n\t\t\twhile ( ruleSize > 0 ) {\n\n\t\t\t\tvar name = parseNullTerminatedString( inDataView.buffer, inOffset );\n\t\t\t\tvar value = parseUint8( inDataView, inOffset );\n\t\t\t\tvar compression = ( value >> 2 ) & 3;\n\t\t\t\tvar csc = ( value >> 4 ) - 1;\n\t\t\t\tvar index = new Int8Array( [ csc ] )[ 0 ];\n\t\t\t\tvar type = parseUint8( inDataView, inOffset );\n\n\t\t\t\tchannelRules.push( {\n\t\t\t\t\tname: name,\n\t\t\t\t\tindex: index,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tcompression: compression,\n\t\t\t\t} );\n\n\t\t\t\truleSize -= name.length + 3;\n\n\t\t\t}\n\n\t\t\t// Classify channels\n\t\t\tvar channels = EXRHeader.channels;\n\t\t\tvar channelData = new Array( info.channels );\n\n\t\t\tfor ( var i = 0; i < info.channels; ++ i ) {\n\n\t\t\t\tvar cd = channelData[ i ] = {};\n\t\t\t\tvar channel = channels[ i ];\n\n\t\t\t\tcd.name = channel.name;\n\t\t\t\tcd.compression = UNKNOWN;\n\t\t\t\tcd.decoded = false;\n\t\t\t\tcd.type = channel.pixelType;\n\t\t\t\tcd.pLinear = channel.pLinear;\n\t\t\t\tcd.width = info.width;\n\t\t\t\tcd.height = info.lines;\n\n\t\t\t}\n\n\t\t\tvar cscSet = {\n\t\t\t\tidx: new Array( 3 )\n\t\t\t};\n\n\t\t\tfor ( var offset = 0; offset < info.channels; ++ offset ) {\n\n\t\t\t\tvar cd = channelData[ offset ];\n\n\t\t\t\tfor ( var i = 0; i < channelRules.length; ++ i ) {\n\n\t\t\t\t\tvar rule = channelRules[ i ];\n\n\t\t\t\t\tif ( cd.name == rule.name ) {\n\n\t\t\t\t\t\tcd.compression = rule.compression;\n\n\t\t\t\t\t\tif ( rule.index >= 0 ) {\n\n\t\t\t\t\t\t\tcscSet.idx[ rule.index ] = offset;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcd.offset = offset;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Read DCT - AC component data\n\t\t\tif ( dwaHeader.acCompressedSize > 0 ) {\n\n\t\t\t\tswitch ( dwaHeader.acCompression ) {\n\n\t\t\t\t\tcase STATIC_HUFFMAN:\n\n\t\t\t\t\t\tvar acBuffer = new Uint16Array( dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\thufUncompress( info.array, inDataView, inOffset, dwaHeader.acCompressedSize, acBuffer, dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase DEFLATE:\n\n\t\t\t\t\t\tvar compressed = info.array.slice( inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount );\n\t\t\t\t\t\tvar inflate = new Inflate( compressed, { resize: true, verify: true } ); // eslint-disable-line no-undef\n\t\t\t\t\t\tvar acBuffer = new Uint16Array( inflate.decompress().buffer );\n\t\t\t\t\t\tinOffset.value += dwaHeader.totalAcUncompressedCount;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\t// Read DCT - DC component data\n\t\t\tif ( dwaHeader.dcCompressedSize > 0 ) {\n\n\t\t\t\tvar zlibInfo = {\n\t\t\t\t\tarray: info.array,\n\t\t\t\t\toffset: inOffset,\n\t\t\t\t\tsize: dwaHeader.dcCompressedSize\n\t\t\t\t};\n\t\t\t\tvar dcBuffer = new Uint16Array( uncompressZIP( zlibInfo ).buffer );\n\t\t\t\tinOffset.value += dwaHeader.dcCompressedSize;\n\n\t\t\t}\n\n\t\t\t// Read RLE compressed data\n\t\t\tif ( dwaHeader.rleRawSize > 0 ) {\n\n\t\t\t\tvar compressed = info.array.slice( inOffset.value, inOffset.value + dwaHeader.rleCompressedSize );\n\t\t\t\tvar inflate = new Inflate( compressed, { resize: true, verify: true } ); // eslint-disable-line no-undef\n\t\t\t\tvar rleBuffer = decodeRunLength( inflate.decompress().buffer );\n\n\t\t\t\tinOffset.value += dwaHeader.rleCompressedSize;\n\n\t\t\t}\n\n\t\t\t// Prepare outbuffer data offset\n\t\t\tvar outBufferEnd = 0;\n\t\t\tvar rowOffsets = new Array( channelData.length );\n\t\t\tfor ( var i = 0; i < rowOffsets.length; ++ i ) {\n\n\t\t\t\trowOffsets[ i ] = new Array();\n\n\t\t\t}\n\n\t\t\tfor ( var y = 0; y < info.lines; ++ y ) {\n\n\t\t\t\tfor ( var chan = 0; chan < channelData.length; ++ chan ) {\n\n\t\t\t\t\trowOffsets[ chan ].push( outBufferEnd );\n\t\t\t\t\toutBufferEnd += channelData[ chan ].width * info.type * INT16_SIZE;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Lossy DCT decode RGB channels\n\t\t\tlossyDctDecode( cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer );\n\n\t\t\t// Decode other channels\n\t\t\tfor ( var i = 0; i < channelData.length; ++ i ) {\n\n\t\t\t\tvar cd = channelData[ i ];\n\n\t\t\t\tif ( cd.decoded ) continue;\n\n\t\t\t\tswitch ( cd.compression ) {\n\n\t\t\t\t\tcase RLE:\n\n\t\t\t\t\t\tvar row = 0;\n\t\t\t\t\t\tvar rleOffset = 0;\n\n\t\t\t\t\t\tfor ( var y = 0; y < info.lines; ++ y ) {\n\n\t\t\t\t\t\t\tvar rowOffsetBytes = rowOffsets[ i ][ row ];\n\n\t\t\t\t\t\t\tfor ( var x = 0; x < cd.width; ++ x ) {\n\n\t\t\t\t\t\t\t\tfor ( var byte = 0; byte < INT16_SIZE * cd.type; ++ byte ) {\n\n\t\t\t\t\t\t\t\t\toutBuffer[ rowOffsetBytes ++ ] = rleBuffer[ rleOffset + byte * cd.width * cd.height ];\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\trleOffset ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trow ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LOSSY_DCT: // skip\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow 'EXRLoader.parse: unsupported channel compression';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new DataView( outBuffer.buffer );\n\n\t\t}\n\n\t\tfunction parseNullTerminatedString( buffer, offset ) {\n\n\t\t\tvar uintBuffer = new Uint8Array( buffer );\n\t\t\tvar endOffset = 0;\n\n\t\t\twhile ( uintBuffer[ offset.value + endOffset ] != 0 ) {\n\n\t\t\t\tendOffset += 1;\n\n\t\t\t}\n\n\t\t\tvar stringValue = new TextDecoder().decode(\n\t\t\t\tuintBuffer.slice( offset.value, offset.value + endOffset )\n\t\t\t);\n\n\t\t\toffset.value = offset.value + endOffset + 1;\n\n\t\t\treturn stringValue;\n\n\t\t}\n\n\t\tfunction parseFixedLengthString( buffer, offset, size ) {\n\n\t\t\tvar stringValue = new TextDecoder().decode(\n\t\t\t\tnew Uint8Array( buffer ).slice( offset.value, offset.value + size )\n\t\t\t);\n\n\t\t\toffset.value = offset.value + size;\n\n\t\t\treturn stringValue;\n\n\t\t}\n\n\t\tfunction parseUlong( dataView, offset ) {\n\n\t\t\tvar uLong = dataView.getUint32( 0, true );\n\n\t\t\toffset.value = offset.value + ULONG_SIZE;\n\n\t\t\treturn uLong;\n\n\t\t}\n\n\t\tfunction parseRational( dataView, offset ) {\n\n\t\t\tvar x = parseInt32( dataView, offset );\n\t\t\tvar y = parseUint32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseTimecode( dataView, offset ) {\n\n\t\t\tvar x = parseUint32( dataView, offset );\n\t\t\tvar y = parseUint32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseInt32( dataView, offset ) {\n\n\t\t\tvar Int32 = dataView.getInt32( offset.value, true );\n\n\t\t\toffset.value = offset.value + INT32_SIZE;\n\n\t\t\treturn Int32;\n\n\t\t}\n\n\t\tfunction parseUint32( dataView, offset ) {\n\n\t\t\tvar Uint32 = dataView.getUint32( offset.value, true );\n\n\t\t\toffset.value = offset.value + INT32_SIZE;\n\n\t\t\treturn Uint32;\n\n\t\t}\n\n\t\tfunction parseUint8Array( uInt8Array, offset ) {\n\n\t\t\tvar Uint8 = uInt8Array[ offset.value ];\n\n\t\t\toffset.value = offset.value + INT8_SIZE;\n\n\t\t\treturn Uint8;\n\n\t\t}\n\n\t\tfunction parseUint8( dataView, offset ) {\n\n\t\t\tvar Uint8 = dataView.getUint8( offset.value );\n\n\t\t\toffset.value = offset.value + INT8_SIZE;\n\n\t\t\treturn Uint8;\n\n\t\t}\n\n\t\tfunction parseInt64( dataView, offset ) {\n\n\t\t\tvar int = Number( dataView.getBigInt64( offset.value, true ) );\n\n\t\t\toffset.value += ULONG_SIZE;\n\n\t\t\treturn int;\n\n\t\t}\n\n\t\tfunction parseFloat32( dataView, offset ) {\n\n\t\t\tvar float = dataView.getFloat32( offset.value, true );\n\n\t\t\toffset.value += FLOAT32_SIZE;\n\n\t\t\treturn float;\n\n\t\t}\n\n\t\tfunction decodeFloat32( dataView, offset ) {\n\n\t\t\treturn DataUtils.toHalfFloat( parseFloat32( dataView, offset ) );\n\n\t\t}\n\n\t\t// https://stackoverflow.com/questions/5678432/decompressing-half-precision-floats-in-javascript\n\t\tfunction decodeFloat16( binary ) {\n\n\t\t\tvar exponent = ( binary & 0x7C00 ) >> 10,\n\t\t\t\tfraction = binary & 0x03FF;\n\n\t\t\treturn ( binary >> 15 ? - 1 : 1 ) * (\n\t\t\t\texponent ?\n\t\t\t\t\t(\n\t\t\t\t\t\texponent === 0x1F ?\n\t\t\t\t\t\t\tfraction ? NaN : Infinity :\n\t\t\t\t\t\t\tMath.pow( 2, exponent - 15 ) * ( 1 + fraction / 0x400 )\n\t\t\t\t\t) :\n\t\t\t\t\t6.103515625e-5 * ( fraction / 0x400 )\n\t\t\t);\n\n\t\t}\n\n\t\tfunction parseUint16( dataView, offset ) {\n\n\t\t\tvar Uint16 = dataView.getUint16( offset.value, true );\n\n\t\t\toffset.value += INT16_SIZE;\n\n\t\t\treturn Uint16;\n\n\t\t}\n\n\t\tfunction parseFloat16( buffer, offset ) {\n\n\t\t\treturn decodeFloat16( parseUint16( buffer, offset ) );\n\n\t\t}\n\n\t\tfunction parseChlist( dataView, buffer, offset, size ) {\n\n\t\t\tvar startOffset = offset.value;\n\t\t\tvar channels = [];\n\n\t\t\twhile ( offset.value < ( startOffset + size - 1 ) ) {\n\n\t\t\t\tvar name = parseNullTerminatedString( buffer, offset );\n\t\t\t\tvar pixelType = parseInt32( dataView, offset );\n\t\t\t\tvar pLinear = parseUint8( dataView, offset );\n\t\t\t\toffset.value += 3; // reserved, three chars\n\t\t\t\tvar xSampling = parseInt32( dataView, offset );\n\t\t\t\tvar ySampling = parseInt32( dataView, offset );\n\n\t\t\t\tchannels.push( {\n\t\t\t\t\tname: name,\n\t\t\t\t\tpixelType: pixelType,\n\t\t\t\t\tpLinear: pLinear,\n\t\t\t\t\txSampling: xSampling,\n\t\t\t\t\tySampling: ySampling\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\toffset.value += 1;\n\n\t\t\treturn channels;\n\n\t\t}\n\n\t\tfunction parseChromaticities( dataView, offset ) {\n\n\t\t\tvar redX = parseFloat32( dataView, offset );\n\t\t\tvar redY = parseFloat32( dataView, offset );\n\t\t\tvar greenX = parseFloat32( dataView, offset );\n\t\t\tvar greenY = parseFloat32( dataView, offset );\n\t\t\tvar blueX = parseFloat32( dataView, offset );\n\t\t\tvar blueY = parseFloat32( dataView, offset );\n\t\t\tvar whiteX = parseFloat32( dataView, offset );\n\t\t\tvar whiteY = parseFloat32( dataView, offset );\n\n\t\t\treturn { redX: redX, redY: redY, greenX: greenX, greenY: greenY, blueX: blueX, blueY: blueY, whiteX: whiteX, whiteY: whiteY };\n\n\t\t}\n\n\t\tfunction parseCompression( dataView, offset ) {\n\n\t\t\tvar compressionCodes = [\n\t\t\t\t'NO_COMPRESSION',\n\t\t\t\t'RLE_COMPRESSION',\n\t\t\t\t'ZIPS_COMPRESSION',\n\t\t\t\t'ZIP_COMPRESSION',\n\t\t\t\t'PIZ_COMPRESSION',\n\t\t\t\t'PXR24_COMPRESSION',\n\t\t\t\t'B44_COMPRESSION',\n\t\t\t\t'B44A_COMPRESSION',\n\t\t\t\t'DWAA_COMPRESSION',\n\t\t\t\t'DWAB_COMPRESSION'\n\t\t\t];\n\n\t\t\tvar compression = parseUint8( dataView, offset );\n\n\t\t\treturn compressionCodes[ compression ];\n\n\t\t}\n\n\t\tfunction parseBox2i( dataView, offset ) {\n\n\t\t\tvar xMin = parseUint32( dataView, offset );\n\t\t\tvar yMin = parseUint32( dataView, offset );\n\t\t\tvar xMax = parseUint32( dataView, offset );\n\t\t\tvar yMax = parseUint32( dataView, offset );\n\n\t\t\treturn { xMin: xMin, yMin: yMin, xMax: xMax, yMax: yMax };\n\n\t\t}\n\n\t\tfunction parseLineOrder( dataView, offset ) {\n\n\t\t\tvar lineOrders = [\n\t\t\t\t'INCREASING_Y'\n\t\t\t];\n\n\t\t\tvar lineOrder = parseUint8( dataView, offset );\n\n\t\t\treturn lineOrders[ lineOrder ];\n\n\t\t}\n\n\t\tfunction parseV2f( dataView, offset ) {\n\n\t\t\tvar x = parseFloat32( dataView, offset );\n\t\t\tvar y = parseFloat32( dataView, offset );\n\n\t\t\treturn [ x, y ];\n\n\t\t}\n\n\t\tfunction parseV3f( dataView, offset ) {\n\n\t\t\tvar x = parseFloat32( dataView, offset );\n\t\t\tvar y = parseFloat32( dataView, offset );\n\t\t\tvar z = parseFloat32( dataView, offset );\n\n\t\t\treturn [ x, y, z ];\n\n\t\t}\n\n\t\tfunction parseValue( dataView, buffer, offset, type, size ) {\n\n\t\t\tif ( type === 'string' || type === 'stringvector' || type === 'iccProfile' ) {\n\n\t\t\t\treturn parseFixedLengthString( buffer, offset, size );\n\n\t\t\t} else if ( type === 'chlist' ) {\n\n\t\t\t\treturn parseChlist( dataView, buffer, offset, size );\n\n\t\t\t} else if ( type === 'chromaticities' ) {\n\n\t\t\t\treturn parseChromaticities( dataView, offset );\n\n\t\t\t} else if ( type === 'compression' ) {\n\n\t\t\t\treturn parseCompression( dataView, offset );\n\n\t\t\t} else if ( type === 'box2i' ) {\n\n\t\t\t\treturn parseBox2i( dataView, offset );\n\n\t\t\t} else if ( type === 'lineOrder' ) {\n\n\t\t\t\treturn parseLineOrder( dataView, offset );\n\n\t\t\t} else if ( type === 'float' ) {\n\n\t\t\t\treturn parseFloat32( dataView, offset );\n\n\t\t\t} else if ( type === 'v2f' ) {\n\n\t\t\t\treturn parseV2f( dataView, offset );\n\n\t\t\t} else if ( type === 'v3f' ) {\n\n\t\t\t\treturn parseV3f( dataView, offset );\n\n\t\t\t} else if ( type === 'int' ) {\n\n\t\t\t\treturn parseInt32( dataView, offset );\n\n\t\t\t} else if ( type === 'rational' ) {\n\n\t\t\t\treturn parseRational( dataView, offset );\n\n\t\t\t} else if ( type === 'timecode' ) {\n\n\t\t\t\treturn parseTimecode( dataView, offset );\n\n\t\t\t} else if ( type === 'preview' ) {\n\n\t\t\t\toffset.value += size;\n\t\t\t\treturn 'skipped';\n\n\t\t\t} else {\n\n\t\t\t\toffset.value += size;\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar bufferDataView = new DataView( buffer );\n\t\tvar uInt8Array = new Uint8Array( buffer );\n\n\t\tvar EXRHeader = {};\n\n\t\tbufferDataView.getUint32( 0, true ); // magic\n\t\tbufferDataView.getUint8( 4, true ); // versionByteZero\n\t\tbufferDataView.getUint8( 5, true ); // fullMask\n\n\t\t// start of header\n\n\t\tvar offset = { value: 8 }; // start at 8, after magic stuff\n\n\t\tvar keepReading = true;\n\n\t\twhile ( keepReading ) {\n\n\t\t\tvar attributeName = parseNullTerminatedString( buffer, offset );\n\n\t\t\tif ( attributeName == 0 ) {\n\n\t\t\t\tkeepReading = false;\n\n\t\t\t} else {\n\n\t\t\t\tvar attributeType = parseNullTerminatedString( buffer, offset );\n\t\t\t\tvar attributeSize = parseUint32( bufferDataView, offset );\n\t\t\t\tvar attributeValue = parseValue( bufferDataView, buffer, offset, attributeType, attributeSize );\n\n\t\t\t\tif ( attributeValue === undefined ) {\n\n\t\t\t\t\tconsole.warn( `EXRLoader.parse: skipped unknown header attribute type \\'${ attributeType }\\'.` );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tEXRHeader[ attributeName ] = attributeValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// offsets\n\t\tvar dataWindowHeight = EXRHeader.dataWindow.yMax + 1;\n\n\t\tvar uncompress;\n\t\tvar scanlineBlockSize;\n\n\t\tswitch ( EXRHeader.compression ) {\n\n\t\t\tcase 'NO_COMPRESSION':\n\n\t\t\t\tscanlineBlockSize = 1;\n\t\t\t\tuncompress = uncompressRAW;\n\t\t\t\tbreak;\n\n\t\t\tcase 'RLE_COMPRESSION':\n\n\t\t\t\tscanlineBlockSize = 1;\n\t\t\t\tuncompress = uncompressRLE;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZIPS_COMPRESSION':\n\n\t\t\t\tscanlineBlockSize = 1;\n\t\t\t\tuncompress = uncompressZIP;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZIP_COMPRESSION':\n\n\t\t\t\tscanlineBlockSize = 16;\n\t\t\t\tuncompress = uncompressZIP;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PIZ_COMPRESSION':\n\n\t\t\t\tscanlineBlockSize = 32;\n\t\t\t\tuncompress = uncompressPIZ;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PXR24_COMPRESSION':\n\n\t\t\t\tscanlineBlockSize = 16;\n\t\t\t\tuncompress = uncompressPXR;\n\t\t\t\tbreak;\n\n\t\t\tcase 'DWAA_COMPRESSION':\n\n\t\t\t\tscanlineBlockSize = 32;\n\t\t\t\tuncompress = uncompressDWA;\n\t\t\t\tbreak;\n\n\t\t\tcase 'DWAB_COMPRESSION':\n\n\t\t\t\tscanlineBlockSize = 256;\n\t\t\t\tuncompress = uncompressDWA;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthrow 'EXRLoader.parse: ' + EXRHeader.compression + ' is unsupported';\n\n\t\t}\n\n\t\tvar size_t;\n\t\tvar getValue;\n\n\t\t// mixed pixelType not supported\n\t\tvar pixelType = EXRHeader.channels[ 0 ].pixelType;\n\n\t\tif ( pixelType === 1 ) { // half\n\n\t\t\tswitch ( this.type ) {\n\n\t\t\t\tcase UnsignedByteType:\n\t\t\t\tcase FloatType:\n\n\t\t\t\t\tgetValue = parseFloat16;\n\t\t\t\t\tsize_t = INT16_SIZE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\tgetValue = parseUint16;\n\t\t\t\t\tsize_t = INT16_SIZE;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} else if ( pixelType === 2 ) { // float\n\n\t\t\tswitch ( this.type ) {\n\n\t\t\t\tcase UnsignedByteType:\n\t\t\t\tcase FloatType:\n\n\t\t\t\t\tgetValue = parseFloat32;\n\t\t\t\t\tsize_t = FLOAT32_SIZE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\tgetValue = decodeFloat32;\n\t\t\t\t\tsize_t = FLOAT32_SIZE;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow 'EXRLoader.parse: unsupported pixelType ' + pixelType + ' for ' + EXRHeader.compression + '.';\n\n\t\t}\n\n\t\tvar numBlocks = dataWindowHeight / scanlineBlockSize;\n\n\t\tfor ( var i = 0; i < numBlocks; i ++ ) {\n\n\t\t\tparseUlong( bufferDataView, offset ); // scanlineOffset\n\n\t\t}\n\n\t\t// we should be passed the scanline offset table, start reading pixel data\n\n\t\tvar width = EXRHeader.dataWindow.xMax - EXRHeader.dataWindow.xMin + 1;\n\t\tvar height = EXRHeader.dataWindow.yMax - EXRHeader.dataWindow.yMin + 1;\n\t\t// Firefox only supports RGBA (half) float textures\n\t\t// var numChannels = EXRHeader.channels.length;\n\t\tvar numChannels = 4;\n\t\tvar size = width * height * numChannels;\n\n\t\t// Fill initially with 1s for the alpha value if the texture is not RGBA, RGB values will be overwritten\n\t\tswitch ( this.type ) {\n\n\t\t\tcase UnsignedByteType:\n\t\t\tcase FloatType:\n\n\t\t\t\tvar byteArray = new Float32Array( size );\n\n\t\t\t\tif ( EXRHeader.channels.length < numChannels ) {\n\n\t\t\t\t\tbyteArray.fill( 1, 0, size );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\tvar byteArray = new Uint16Array( size );\n\n\t\t\t\tif ( EXRHeader.channels.length < numChannels ) {\n\n\t\t\t\t\tbyteArray.fill( 0x3C00, 0, size ); // Uint16Array holds half float data, 0x3C00 is 1\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.error( 'THREE.EXRLoader: unsupported type: ', this.type );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tvar channelOffsets = {\n\t\t\tR: 0,\n\t\t\tG: 1,\n\t\t\tB: 2,\n\t\t\tA: 3\n\t\t};\n\n\t\tvar compressionInfo = {\n\n\t\t\tsize: 0,\n\t\t\twidth: width,\n\t\t\tlines: scanlineBlockSize,\n\n\t\t\toffset: offset,\n\t\t\tarray: uInt8Array,\n\t\t\tviewer: bufferDataView,\n\n\t\t\ttype: pixelType,\n\t\t\tchannels: EXRHeader.channels.length,\n\n\t\t};\n\n\t\tvar line;\n\t\tvar size;\n\t\tvar viewer;\n\t\tvar tmpOffset = { value: 0 };\n\n\t\tfor ( var scanlineBlockIdx = 0; scanlineBlockIdx < height / scanlineBlockSize; scanlineBlockIdx ++ ) {\n\n\t\t\tline = parseUint32( bufferDataView, offset ); // line_no\n\t\t\tsize = parseUint32( bufferDataView, offset ); // data_len\n\n\t\t\tcompressionInfo.lines = ( line + scanlineBlockSize > height ) ? height - line : scanlineBlockSize;\n\t\t\tcompressionInfo.offset = offset;\n\t\t\tcompressionInfo.size = size;\n\n\t\t\tviewer = uncompress( compressionInfo );\n\n\t\t\toffset.value += size;\n\n\t\t\tfor ( var line_y = 0; line_y < scanlineBlockSize; line_y ++ ) {\n\n\t\t\t\tvar true_y = line_y + ( scanlineBlockIdx * scanlineBlockSize );\n\n\t\t\t\tif ( true_y >= height ) break;\n\n\t\t\t\tfor ( var channelID = 0; channelID < EXRHeader.channels.length; channelID ++ ) {\n\n\t\t\t\t\tvar cOff = channelOffsets[ EXRHeader.channels[ channelID ].name ];\n\n\t\t\t\t\tfor ( var x = 0; x < width; x ++ ) {\n\n\t\t\t\t\t\tvar idx = ( line_y * ( EXRHeader.channels.length * width ) ) + ( channelID * width ) + x;\n\t\t\t\t\t\ttmpOffset.value = idx * size_t;\n\n\t\t\t\t\t\tvar val = getValue( viewer, tmpOffset );\n\n\t\t\t\t\t\tbyteArray[ ( ( ( height - 1 - true_y ) * ( width * numChannels ) ) + ( x * numChannels ) ) + cOff ] = val;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.type === UnsignedByteType ) {\n\n\t\t\tlet v, i;\n\t\t\tconst size = byteArray.length;\n\t\t\tconst RGBEArray = new Uint8Array( size );\n\n\t\t\tfor ( let h = 0; h < height; ++ h ) {\n\n\t\t\t\tfor ( let w = 0; w < width; ++ w ) {\n\n\t\t\t\t\ti = h * width * 4 + w * 4;\n\n\t\t\t\t\tconst red = byteArray[ i ];\n\t\t\t\t\tconst green = byteArray[ i + 1 ];\n\t\t\t\t\tconst blue = byteArray[ i + 2 ];\n\n\t\t\t\t\tv = ( red > green ) ? red : green;\n\t\t\t\t\tv = ( blue > v ) ? blue : v;\n\n\t\t\t\t\tif ( v < 1e-32 ) {\n\n\t\t\t\t\t\tRGBEArray[ i ] = RGBEArray[ i + 1 ] = RGBEArray[ i + 2 ] = RGBEArray[ i + 3 ] = 0;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst res = frexp( v );\n\t\t\t\t\t\tv = res[ 0 ] * 256 / v;\n\n\t\t\t\t\t\tRGBEArray[ i ] = red * v;\n\t\t\t\t\t\tRGBEArray[ i + 1 ] = green * v;\n\t\t\t\t\t\tRGBEArray[ i + 2 ] = blue * v;\n\t\t\t\t\t\tRGBEArray[ i + 3 ] = res[ 1 ] + 128;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbyteArray = RGBEArray;\n\n\t\t}\n\n\t\tconst format = ( this.type === UnsignedByteType ) ? RGBEFormat : ( numChannels === 4 ) ? RGBAFormat : RGBFormat;\n\n\t\treturn {\n\t\t\theader: EXRHeader,\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdata: byteArray,\n\t\t\tformat: format,\n\t\t\ttype: this.type\n\t\t};\n\n\t},\n\n\tsetDataType: function ( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase UnsignedByteType:\n\n\t\t\t\t\ttexture.encoding = RGBEEncoding;\n\t\t\t\t\ttexture.minFilter = NearestFilter;\n\t\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FloatType:\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.encoding = LinearEncoding;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = false;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn DataTextureLoader.prototype.load.call( this, url, onLoadCallback, onProgress, onError );\n\n\t}\n\n} );\n\nexport { EXRLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/FBXLoader.js",
    "content": "import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tEquirectangularReflectionMapping,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix3,\n\tMatrix4,\n\tMesh,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector3,\n\tVector4,\n\tVectorKeyframeTrack,\n\tsRGBEncoding\n} from '../../../build/three.module.js';\nimport { Inflate } from '../libs/inflate.module.min.js';\nimport { NURBSCurve } from '../curves/NURBSCurve.js';\n\n/**\n * Loader loads FBX file and generates Group representing FBX scene.\n * Requires FBX file to be >= 7.0 and in ASCII or >= 6400 in Binary format\n * Versions lower than this may load but will probably have errors\n *\n * Needs Support:\n *  Morph normals / blend shape normals\n *\n * FBX format references:\n * \thttps://wiki.blender.org/index.php/User:Mont29/Foundation/FBX_File_Structure\n * \thttp://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html (C++ SDK reference)\n *\n * \tBinary format specification:\n *\t\thttps://code.blender.org/2013/08/fbx-binary-file-format-specification/\n */\n\n\nvar FBXLoader = ( function () {\n\n\tvar fbxTree;\n\tvar connections;\n\tvar sceneGraph;\n\n\tfunction FBXLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tFBXLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: FBXLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( scope.path );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.setRequestHeader( scope.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( scope.parse( buffer, path ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( FBXBuffer, path ) {\n\n\t\t\tif ( isFbxFormatBinary( FBXBuffer ) ) {\n\n\t\t\t\tfbxTree = new BinaryParser().parse( FBXBuffer );\n\n\t\t\t} else {\n\n\t\t\t\tvar FBXText = convertArrayBufferToString( FBXBuffer );\n\n\t\t\t\tif ( ! isFbxFormatASCII( FBXText ) ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown format.' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( getFbxVersion( FBXText ) < 7000 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + getFbxVersion( FBXText ) );\n\n\t\t\t\t}\n\n\t\t\t\tfbxTree = new TextParser().parse( FBXText );\n\n\t\t\t}\n\n\t\t\t// console.log( fbxTree );\n\n\t\t\tvar textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\t\treturn new FBXTreeParser( textureLoader, this.manager ).parse( fbxTree );\n\n\t\t}\n\n\t} );\n\n\t// Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group\n\tfunction FBXTreeParser( textureLoader, manager ) {\n\n\t\tthis.textureLoader = textureLoader;\n\t\tthis.manager = manager;\n\n\t}\n\n\tFBXTreeParser.prototype = {\n\n\t\tconstructor: FBXTreeParser,\n\n\t\tparse: function () {\n\n\t\t\tconnections = this.parseConnections();\n\n\t\t\tvar images = this.parseImages();\n\t\t\tvar textures = this.parseTextures( images );\n\t\t\tvar materials = this.parseMaterials( textures );\n\t\t\tvar deformers = this.parseDeformers();\n\t\t\tvar geometryMap = new GeometryParser().parse( deformers );\n\n\t\t\tthis.parseScene( deformers, geometryMap, materials );\n\n\t\t\treturn sceneGraph;\n\n\t\t},\n\n\t\t// Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )\n\t\t// and details the connection type\n\t\tparseConnections: function () {\n\n\t\t\tvar connectionMap = new Map();\n\n\t\t\tif ( 'Connections' in fbxTree ) {\n\n\t\t\t\tvar rawConnections = fbxTree.Connections.connections;\n\n\t\t\t\trawConnections.forEach( function ( rawConnection ) {\n\n\t\t\t\t\tvar fromID = rawConnection[ 0 ];\n\t\t\t\t\tvar toID = rawConnection[ 1 ];\n\t\t\t\t\tvar relationship = rawConnection[ 2 ];\n\n\t\t\t\t\tif ( ! connectionMap.has( fromID ) ) {\n\n\t\t\t\t\t\tconnectionMap.set( fromID, {\n\t\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\t\tchildren: []\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar parentRelationship = { ID: toID, relationship: relationship };\n\t\t\t\t\tconnectionMap.get( fromID ).parents.push( parentRelationship );\n\n\t\t\t\t\tif ( ! connectionMap.has( toID ) ) {\n\n\t\t\t\t\t\tconnectionMap.set( toID, {\n\t\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\t\tchildren: []\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar childRelationship = { ID: fromID, relationship: relationship };\n\t\t\t\t\tconnectionMap.get( toID ).children.push( childRelationship );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn connectionMap;\n\n\t\t},\n\n\t\t// Parse FBXTree.Objects.Video for embedded image data\n\t\t// These images are connected to textures in FBXTree.Objects.Textures\n\t\t// via FBXTree.Connections.\n\t\tparseImages: function () {\n\n\t\t\tvar images = {};\n\t\t\tvar blobs = {};\n\n\t\t\tif ( 'Video' in fbxTree.Objects ) {\n\n\t\t\t\tvar videoNodes = fbxTree.Objects.Video;\n\n\t\t\t\tfor ( var nodeID in videoNodes ) {\n\n\t\t\t\t\tvar videoNode = videoNodes[ nodeID ];\n\n\t\t\t\t\tvar id = parseInt( nodeID );\n\n\t\t\t\t\timages[ id ] = videoNode.RelativeFilename || videoNode.Filename;\n\n\t\t\t\t\t// raw image data is in videoNode.Content\n\t\t\t\t\tif ( 'Content' in videoNode ) {\n\n\t\t\t\t\t\tvar arrayBufferContent = ( videoNode.Content instanceof ArrayBuffer ) && ( videoNode.Content.byteLength > 0 );\n\t\t\t\t\t\tvar base64Content = ( typeof videoNode.Content === 'string' ) && ( videoNode.Content !== '' );\n\n\t\t\t\t\t\tif ( arrayBufferContent || base64Content ) {\n\n\t\t\t\t\t\t\tvar image = this.parseImage( videoNodes[ nodeID ] );\n\n\t\t\t\t\t\t\tblobs[ videoNode.RelativeFilename || videoNode.Filename ] = image;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var id in images ) {\n\n\t\t\t\tvar filename = images[ id ];\n\n\t\t\t\tif ( blobs[ filename ] !== undefined ) images[ id ] = blobs[ filename ];\n\t\t\t\telse images[ id ] = images[ id ].split( '\\\\' ).pop();\n\n\t\t\t}\n\n\t\t\treturn images;\n\n\t\t},\n\n\t\t// Parse embedded image data in FBXTree.Video.Content\n\t\tparseImage: function ( videoNode ) {\n\n\t\t\tvar content = videoNode.Content;\n\t\t\tvar fileName = videoNode.RelativeFilename || videoNode.Filename;\n\t\t\tvar extension = fileName.slice( fileName.lastIndexOf( '.' ) + 1 ).toLowerCase();\n\n\t\t\tvar type;\n\n\t\t\tswitch ( extension ) {\n\n\t\t\t\tcase 'bmp':\n\n\t\t\t\t\ttype = 'image/bmp';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'jpg':\n\t\t\t\tcase 'jpeg':\n\n\t\t\t\t\ttype = 'image/jpeg';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'png':\n\n\t\t\t\t\ttype = 'image/png';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'tif':\n\n\t\t\t\t\ttype = 'image/tiff';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'tga':\n\n\t\t\t\t\tif ( this.manager.getHandler( '.tga' ) === null ) {\n\n\t\t\t\t\t\tconsole.warn( 'FBXLoader: TGA loader not found, skipping ', fileName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttype = 'image/tga';\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'FBXLoader: Image type \"' + extension + '\" is not supported.' );\n\t\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( typeof content === 'string' ) { // ASCII format\n\n\t\t\t\treturn 'data:' + type + ';base64,' + content;\n\n\t\t\t} else { // Binary Format\n\n\t\t\t\tvar array = new Uint8Array( content );\n\t\t\t\treturn window.URL.createObjectURL( new Blob( [ array ], { type: type } ) );\n\n\t\t\t}\n\n\t\t},\n\n\t\t// Parse nodes in FBXTree.Objects.Texture\n\t\t// These contain details such as UV scaling, cropping, rotation etc and are connected\n\t\t// to images in FBXTree.Objects.Video\n\t\tparseTextures: function ( images ) {\n\n\t\t\tvar textureMap = new Map();\n\n\t\t\tif ( 'Texture' in fbxTree.Objects ) {\n\n\t\t\t\tvar textureNodes = fbxTree.Objects.Texture;\n\t\t\t\tfor ( var nodeID in textureNodes ) {\n\n\t\t\t\t\tvar texture = this.parseTexture( textureNodes[ nodeID ], images );\n\t\t\t\t\ttextureMap.set( parseInt( nodeID ), texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn textureMap;\n\n\t\t},\n\n\t\t// Parse individual node in FBXTree.Objects.Texture\n\t\tparseTexture: function ( textureNode, images ) {\n\n\t\t\tvar texture = this.loadTexture( textureNode, images );\n\n\t\t\ttexture.ID = textureNode.id;\n\n\t\t\ttexture.name = textureNode.attrName;\n\n\t\t\tvar wrapModeU = textureNode.WrapModeU;\n\t\t\tvar wrapModeV = textureNode.WrapModeV;\n\n\t\t\tvar valueU = wrapModeU !== undefined ? wrapModeU.value : 0;\n\t\t\tvar valueV = wrapModeV !== undefined ? wrapModeV.value : 0;\n\n\t\t\t// http://download.autodesk.com/us/fbx/SDKdocs/FBX_SDK_Help/files/fbxsdkref/class_k_fbx_texture.html#889640e63e2e681259ea81061b85143a\n\t\t\t// 0: repeat(default), 1: clamp\n\n\t\t\ttexture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\t\tif ( 'Scaling' in textureNode ) {\n\n\t\t\t\tvar values = textureNode.Scaling.value;\n\n\t\t\t\ttexture.repeat.x = values[ 0 ];\n\t\t\t\ttexture.repeat.y = values[ 1 ];\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\t// load a texture specified as a blob or data URI, or via an external URL using TextureLoader\n\t\tloadTexture: function ( textureNode, images ) {\n\n\t\t\tvar fileName;\n\n\t\t\tvar currentPath = this.textureLoader.path;\n\n\t\t\tvar children = connections.get( textureNode.id ).children;\n\n\t\t\tif ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {\n\n\t\t\t\tfileName = images[ children[ 0 ].ID ];\n\n\t\t\t\tif ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {\n\n\t\t\t\t\tthis.textureLoader.setPath( undefined );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar texture;\n\n\t\t\tvar extension = textureNode.FileName.slice( - 3 ).toLowerCase();\n\n\t\t\tif ( extension === 'tga' ) {\n\n\t\t\t\tvar loader = this.manager.getHandler( '.tga' );\n\n\t\t\t\tif ( loader === null ) {\n\n\t\t\t\t\tconsole.warn( 'FBXLoader: TGA loader not found, creating placeholder texture for', textureNode.RelativeFilename );\n\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture = loader.load( fileName );\n\n\t\t\t\t}\n\n\t\t\t} else if ( extension === 'psd' ) {\n\n\t\t\t\tconsole.warn( 'FBXLoader: PSD textures are not supported, creating placeholder texture for', textureNode.RelativeFilename );\n\t\t\t\ttexture = new Texture();\n\n\t\t\t} else {\n\n\t\t\t\ttexture = this.textureLoader.load( fileName );\n\n\t\t\t}\n\n\t\t\tthis.textureLoader.setPath( currentPath );\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\t// Parse nodes in FBXTree.Objects.Material\n\t\tparseMaterials: function ( textureMap ) {\n\n\t\t\tvar materialMap = new Map();\n\n\t\t\tif ( 'Material' in fbxTree.Objects ) {\n\n\t\t\t\tvar materialNodes = fbxTree.Objects.Material;\n\n\t\t\t\tfor ( var nodeID in materialNodes ) {\n\n\t\t\t\t\tvar material = this.parseMaterial( materialNodes[ nodeID ], textureMap );\n\n\t\t\t\t\tif ( material !== null ) materialMap.set( parseInt( nodeID ), material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materialMap;\n\n\t\t},\n\n\t\t// Parse single node in FBXTree.Objects.Material\n\t\t// Materials are connected to texture maps in FBXTree.Objects.Textures\n\t\t// FBX format currently only supports Lambert and Phong shading models\n\t\tparseMaterial: function ( materialNode, textureMap ) {\n\n\t\t\tvar ID = materialNode.id;\n\t\t\tvar name = materialNode.attrName;\n\t\t\tvar type = materialNode.ShadingModel;\n\n\t\t\t// Case where FBX wraps shading model in property object.\n\t\t\tif ( typeof type === 'object' ) {\n\n\t\t\t\ttype = type.value;\n\n\t\t\t}\n\n\t\t\t// Ignore unused materials which don't have any connections.\n\t\t\tif ( ! connections.has( ID ) ) return null;\n\n\t\t\tvar parameters = this.parseParameters( materialNode, textureMap, ID );\n\n\t\t\tvar material;\n\n\t\t\tswitch ( type.toLowerCase() ) {\n\n\t\t\t\tcase 'phong':\n\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'lambert':\n\t\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.', type );\n\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tmaterial.setValues( parameters );\n\t\t\tmaterial.name = name;\n\n\t\t\treturn material;\n\n\t\t},\n\n\t\t// Parse FBX material and return parameters suitable for a three.js material\n\t\t// Also parse the texture map and return any textures associated with the material\n\t\tparseParameters: function ( materialNode, textureMap, ID ) {\n\n\t\t\tvar parameters = {};\n\n\t\t\tif ( materialNode.BumpFactor ) {\n\n\t\t\t\tparameters.bumpScale = materialNode.BumpFactor.value;\n\n\t\t\t}\n\n\t\t\tif ( materialNode.Diffuse ) {\n\n\t\t\t\tparameters.color = new Color().fromArray( materialNode.Diffuse.value );\n\n\t\t\t} else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) {\n\n\t\t\t\t// The blender exporter exports diffuse here instead of in materialNode.Diffuse\n\t\t\t\tparameters.color = new Color().fromArray( materialNode.DiffuseColor.value );\n\n\t\t\t}\n\n\t\t\tif ( materialNode.DisplacementFactor ) {\n\n\t\t\t\tparameters.displacementScale = materialNode.DisplacementFactor.value;\n\n\t\t\t}\n\n\t\t\tif ( materialNode.Emissive ) {\n\n\t\t\t\tparameters.emissive = new Color().fromArray( materialNode.Emissive.value );\n\n\t\t\t} else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) {\n\n\t\t\t\t// The blender exporter exports emissive color here instead of in materialNode.Emissive\n\t\t\t\tparameters.emissive = new Color().fromArray( materialNode.EmissiveColor.value );\n\n\t\t\t}\n\n\t\t\tif ( materialNode.EmissiveFactor ) {\n\n\t\t\t\tparameters.emissiveIntensity = parseFloat( materialNode.EmissiveFactor.value );\n\n\t\t\t}\n\n\t\t\tif ( materialNode.Opacity ) {\n\n\t\t\t\tparameters.opacity = parseFloat( materialNode.Opacity.value );\n\n\t\t\t}\n\n\t\t\tif ( parameters.opacity < 1.0 ) {\n\n\t\t\t\tparameters.transparent = true;\n\n\t\t\t}\n\n\t\t\tif ( materialNode.ReflectionFactor ) {\n\n\t\t\t\tparameters.reflectivity = materialNode.ReflectionFactor.value;\n\n\t\t\t}\n\n\t\t\tif ( materialNode.Shininess ) {\n\n\t\t\t\tparameters.shininess = materialNode.Shininess.value;\n\n\t\t\t}\n\n\t\t\tif ( materialNode.Specular ) {\n\n\t\t\t\tparameters.specular = new Color().fromArray( materialNode.Specular.value );\n\n\t\t\t} else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) {\n\n\t\t\t\t// The blender exporter exports specular color here instead of in materialNode.Specular\n\t\t\t\tparameters.specular = new Color().fromArray( materialNode.SpecularColor.value );\n\n\t\t\t}\n\n\t\t\tvar scope = this;\n\t\t\tconnections.get( ID ).children.forEach( function ( child ) {\n\n\t\t\t\tvar type = child.relationship;\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'Bump':\n\t\t\t\t\t\tparameters.bumpMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Maya|TEX_ao_map':\n\t\t\t\t\t\tparameters.aoMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DiffuseColor':\n\t\t\t\t\tcase 'Maya|TEX_color_map':\n\t\t\t\t\t\tparameters.map = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tparameters.map.encoding = sRGBEncoding;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DisplacementColor':\n\t\t\t\t\t\tparameters.displacementMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EmissiveColor':\n\t\t\t\t\t\tparameters.emissiveMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tparameters.emissiveMap.encoding = sRGBEncoding;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'NormalMap':\n\t\t\t\t\tcase 'Maya|TEX_normal_map':\n\t\t\t\t\t\tparameters.normalMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ReflectionColor':\n\t\t\t\t\t\tparameters.envMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tparameters.envMap.mapping = EquirectangularReflectionMapping;\n\t\t\t\t\t\tparameters.envMap.encoding = sRGBEncoding;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SpecularColor':\n\t\t\t\t\t\tparameters.specularMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tparameters.specularMap.encoding = sRGBEncoding;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TransparentColor':\n\t\t\t\t\tcase 'TransparencyFactor':\n\t\t\t\t\t\tparameters.alphaMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\t\tparameters.transparent = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'AmbientColor':\n\t\t\t\t\tcase 'ShininessExponent': // AKA glossiness map\n\t\t\t\t\tcase 'SpecularFactor': // AKA specularLevel\n\t\t\t\t\tcase 'VectorDisplacementColor': // NOTE: Seems to be a copy of DisplacementColor\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: %s map is not supported in three.js, skipping texture.', type );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn parameters;\n\n\t\t},\n\n\t\t// get a texture from the textureMap for use by a material.\n\t\tgetTexture: function ( textureMap, id ) {\n\n\t\t\t// if the texture is a layered texture, just use the first layer and issue a warning\n\t\t\tif ( 'LayeredTexture' in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture ) {\n\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.' );\n\t\t\t\tid = connections.get( id ).children[ 0 ].ID;\n\n\t\t\t}\n\n\t\t\treturn textureMap.get( id );\n\n\t\t},\n\n\t\t// Parse nodes in FBXTree.Objects.Deformer\n\t\t// Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here\n\t\t// Generates map of Skeleton-like objects for use later when generating and binding skeletons.\n\t\tparseDeformers: function () {\n\n\t\t\tvar skeletons = {};\n\t\t\tvar morphTargets = {};\n\n\t\t\tif ( 'Deformer' in fbxTree.Objects ) {\n\n\t\t\t\tvar DeformerNodes = fbxTree.Objects.Deformer;\n\n\t\t\t\tfor ( var nodeID in DeformerNodes ) {\n\n\t\t\t\t\tvar deformerNode = DeformerNodes[ nodeID ];\n\n\t\t\t\t\tvar relationships = connections.get( parseInt( nodeID ) );\n\n\t\t\t\t\tif ( deformerNode.attrType === 'Skin' ) {\n\n\t\t\t\t\t\tvar skeleton = this.parseSkeleton( relationships, DeformerNodes );\n\t\t\t\t\t\tskeleton.ID = nodeID;\n\n\t\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: skeleton attached to more than one geometry is not supported.' );\n\t\t\t\t\t\tskeleton.geometryID = relationships.parents[ 0 ].ID;\n\n\t\t\t\t\t\tskeletons[ nodeID ] = skeleton;\n\n\t\t\t\t\t} else if ( deformerNode.attrType === 'BlendShape' ) {\n\n\t\t\t\t\t\tvar morphTarget = {\n\t\t\t\t\t\t\tid: nodeID,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tmorphTarget.rawTargets = this.parseMorphTargets( relationships, DeformerNodes );\n\t\t\t\t\t\tmorphTarget.id = nodeID;\n\n\t\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: morph target attached to more than one geometry is not supported.' );\n\n\t\t\t\t\t\tmorphTargets[ nodeID ] = morphTarget;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\n\t\t\t\tskeletons: skeletons,\n\t\t\t\tmorphTargets: morphTargets,\n\n\t\t\t};\n\n\t\t},\n\n\t\t// Parse single nodes in FBXTree.Objects.Deformer\n\t\t// The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'\n\t\t// Each skin node represents a skeleton and each cluster node represents a bone\n\t\tparseSkeleton: function ( relationships, deformerNodes ) {\n\n\t\t\tvar rawBones = [];\n\n\t\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\t\tvar boneNode = deformerNodes[ child.ID ];\n\n\t\t\t\tif ( boneNode.attrType !== 'Cluster' ) return;\n\n\t\t\t\tvar rawBone = {\n\n\t\t\t\t\tID: child.ID,\n\t\t\t\t\tindices: [],\n\t\t\t\t\tweights: [],\n\t\t\t\t\ttransformLink: new Matrix4().fromArray( boneNode.TransformLink.a ),\n\t\t\t\t\t// transform: new Matrix4().fromArray( boneNode.Transform.a ),\n\t\t\t\t\t// linkMode: boneNode.Mode,\n\n\t\t\t\t};\n\n\t\t\t\tif ( 'Indexes' in boneNode ) {\n\n\t\t\t\t\trawBone.indices = boneNode.Indexes.a;\n\t\t\t\t\trawBone.weights = boneNode.Weights.a;\n\n\t\t\t\t}\n\n\t\t\t\trawBones.push( rawBone );\n\n\t\t\t} );\n\n\t\t\treturn {\n\n\t\t\t\trawBones: rawBones,\n\t\t\t\tbones: []\n\n\t\t\t};\n\n\t\t},\n\n\t\t// The top level morph deformer node has type \"BlendShape\" and sub nodes have type \"BlendShapeChannel\"\n\t\tparseMorphTargets: function ( relationships, deformerNodes ) {\n\n\t\t\tvar rawMorphTargets = [];\n\n\t\t\tfor ( var i = 0; i < relationships.children.length; i ++ ) {\n\n\t\t\t\tvar child = relationships.children[ i ];\n\n\t\t\t\tvar morphTargetNode = deformerNodes[ child.ID ];\n\n\t\t\t\tvar rawMorphTarget = {\n\n\t\t\t\t\tname: morphTargetNode.attrName,\n\t\t\t\t\tinitialWeight: morphTargetNode.DeformPercent,\n\t\t\t\t\tid: morphTargetNode.id,\n\t\t\t\t\tfullWeights: morphTargetNode.FullWeights.a\n\n\t\t\t\t};\n\n\t\t\t\tif ( morphTargetNode.attrType !== 'BlendShapeChannel' ) return;\n\n\t\t\t\trawMorphTarget.geoID = connections.get( parseInt( child.ID ) ).children.filter( function ( child ) {\n\n\t\t\t\t\treturn child.relationship === undefined;\n\n\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\trawMorphTargets.push( rawMorphTarget );\n\n\t\t\t}\n\n\t\t\treturn rawMorphTargets;\n\n\t\t},\n\n\t\t// create the main Group() to be returned by the loader\n\t\tparseScene: function ( deformers, geometryMap, materialMap ) {\n\n\t\t\tsceneGraph = new Group();\n\n\t\t\tvar modelMap = this.parseModels( deformers.skeletons, geometryMap, materialMap );\n\n\t\t\tvar modelNodes = fbxTree.Objects.Model;\n\n\t\t\tvar scope = this;\n\t\t\tmodelMap.forEach( function ( model ) {\n\n\t\t\t\tvar modelNode = modelNodes[ model.ID ];\n\t\t\t\tscope.setLookAtProperties( model, modelNode );\n\n\t\t\t\tvar parentConnections = connections.get( model.ID ).parents;\n\n\t\t\t\tparentConnections.forEach( function ( connection ) {\n\n\t\t\t\t\tvar parent = modelMap.get( connection.ID );\n\t\t\t\t\tif ( parent !== undefined ) parent.add( model );\n\n\t\t\t\t} );\n\n\t\t\t\tif ( model.parent === null ) {\n\n\t\t\t\t\tsceneGraph.add( model );\n\n\t\t\t\t}\n\n\n\t\t\t} );\n\n\t\t\tthis.bindSkeleton( deformers.skeletons, geometryMap, modelMap );\n\n\t\t\tthis.createAmbientLight();\n\n\t\t\tthis.setupMorphMaterials();\n\n\t\t\tsceneGraph.traverse( function ( node ) {\n\n\t\t\t\tif ( node.userData.transformData ) {\n\n\t\t\t\t\tif ( node.parent ) node.userData.transformData.parentMatrixWorld = node.parent.matrix;\n\n\t\t\t\t\tvar transform = generateTransform( node.userData.transformData );\n\n\t\t\t\t\tnode.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tvar animations = new AnimationParser().parse();\n\n\t\t\t// if all the models where already combined in a single group, just return that\n\t\t\tif ( sceneGraph.children.length === 1 && sceneGraph.children[ 0 ].isGroup ) {\n\n\t\t\t\tsceneGraph.children[ 0 ].animations = animations;\n\t\t\t\tsceneGraph = sceneGraph.children[ 0 ];\n\n\t\t\t}\n\n\t\t\tsceneGraph.animations = animations;\n\n\t\t},\n\n\t\t// parse nodes in FBXTree.Objects.Model\n\t\tparseModels: function ( skeletons, geometryMap, materialMap ) {\n\n\t\t\tvar modelMap = new Map();\n\t\t\tvar modelNodes = fbxTree.Objects.Model;\n\n\t\t\tfor ( var nodeID in modelNodes ) {\n\n\t\t\t\tvar id = parseInt( nodeID );\n\t\t\t\tvar node = modelNodes[ nodeID ];\n\t\t\t\tvar relationships = connections.get( id );\n\n\t\t\t\tvar model = this.buildSkeleton( relationships, skeletons, id, node.attrName );\n\n\t\t\t\tif ( ! model ) {\n\n\t\t\t\t\tswitch ( node.attrType ) {\n\n\t\t\t\t\t\tcase 'Camera':\n\t\t\t\t\t\t\tmodel = this.createCamera( relationships );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Light':\n\t\t\t\t\t\t\tmodel = this.createLight( relationships );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Mesh':\n\t\t\t\t\t\t\tmodel = this.createMesh( relationships, geometryMap, materialMap );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'NurbsCurve':\n\t\t\t\t\t\t\tmodel = this.createCurve( relationships, geometryMap );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'LimbNode':\n\t\t\t\t\t\tcase 'Root':\n\t\t\t\t\t\t\tmodel = new Bone();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Null':\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmodel = new Group();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmodel.name = node.attrName ? PropertyBinding.sanitizeNodeName( node.attrName ) : '';\n\n\t\t\t\t\tmodel.ID = id;\n\n\t\t\t\t}\n\n\t\t\t\tthis.getTransformData( model, node );\n\t\t\t\tmodelMap.set( id, model );\n\n\t\t\t}\n\n\t\t\treturn modelMap;\n\n\t\t},\n\n\t\tbuildSkeleton: function ( relationships, skeletons, id, name ) {\n\n\t\t\tvar bone = null;\n\n\t\t\trelationships.parents.forEach( function ( parent ) {\n\n\t\t\t\tfor ( var ID in skeletons ) {\n\n\t\t\t\t\tvar skeleton = skeletons[ ID ];\n\n\t\t\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t\t\tif ( rawBone.ID === parent.ID ) {\n\n\t\t\t\t\t\t\tvar subBone = bone;\n\t\t\t\t\t\t\tbone = new Bone();\n\n\t\t\t\t\t\t\tbone.matrixWorld.copy( rawBone.transformLink );\n\n\t\t\t\t\t\t\t// set name and id here - otherwise in cases where \"subBone\" is created it will not have a name / id\n\n\t\t\t\t\t\t\tbone.name = name ? PropertyBinding.sanitizeNodeName( name ) : '';\n\t\t\t\t\t\t\tbone.ID = id;\n\n\t\t\t\t\t\t\tskeleton.bones[ i ] = bone;\n\n\t\t\t\t\t\t\t// In cases where a bone is shared between multiple meshes\n\t\t\t\t\t\t\t// duplicate the bone here and and it as a child of the first bone\n\t\t\t\t\t\t\tif ( subBone !== null ) {\n\n\t\t\t\t\t\t\t\tbone.add( subBone );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn bone;\n\n\t\t},\n\n\t\t// create a PerspectiveCamera or OrthographicCamera\n\t\tcreateCamera: function ( relationships ) {\n\n\t\t\tvar model;\n\t\t\tvar cameraAttribute;\n\n\t\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\t\tvar attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\t\tcameraAttribute = attr;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( cameraAttribute === undefined ) {\n\n\t\t\t\tmodel = new Object3D();\n\n\t\t\t} else {\n\n\t\t\t\tvar type = 0;\n\t\t\t\tif ( cameraAttribute.CameraProjectionType !== undefined && cameraAttribute.CameraProjectionType.value === 1 ) {\n\n\t\t\t\t\ttype = 1;\n\n\t\t\t\t}\n\n\t\t\t\tvar nearClippingPlane = 1;\n\t\t\t\tif ( cameraAttribute.NearPlane !== undefined ) {\n\n\t\t\t\t\tnearClippingPlane = cameraAttribute.NearPlane.value / 1000;\n\n\t\t\t\t}\n\n\t\t\t\tvar farClippingPlane = 1000;\n\t\t\t\tif ( cameraAttribute.FarPlane !== undefined ) {\n\n\t\t\t\t\tfarClippingPlane = cameraAttribute.FarPlane.value / 1000;\n\n\t\t\t\t}\n\n\n\t\t\t\tvar width = window.innerWidth;\n\t\t\t\tvar height = window.innerHeight;\n\n\t\t\t\tif ( cameraAttribute.AspectWidth !== undefined && cameraAttribute.AspectHeight !== undefined ) {\n\n\t\t\t\t\twidth = cameraAttribute.AspectWidth.value;\n\t\t\t\t\theight = cameraAttribute.AspectHeight.value;\n\n\t\t\t\t}\n\n\t\t\t\tvar aspect = width / height;\n\n\t\t\t\tvar fov = 45;\n\t\t\t\tif ( cameraAttribute.FieldOfView !== undefined ) {\n\n\t\t\t\t\tfov = cameraAttribute.FieldOfView.value;\n\n\t\t\t\t}\n\n\t\t\t\tvar focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 0: // Perspective\n\t\t\t\t\t\tmodel = new PerspectiveCamera( fov, aspect, nearClippingPlane, farClippingPlane );\n\t\t\t\t\t\tif ( focalLength !== null ) model.setFocalLength( focalLength );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 1: // Orthographic\n\t\t\t\t\t\tmodel = new OrthographicCamera( - width / 2, width / 2, height / 2, - height / 2, nearClippingPlane, farClippingPlane );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown camera type ' + type + '.' );\n\t\t\t\t\t\tmodel = new Object3D();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn model;\n\n\t\t},\n\n\t\t// Create a DirectionalLight, PointLight or SpotLight\n\t\tcreateLight: function ( relationships ) {\n\n\t\t\tvar model;\n\t\t\tvar lightAttribute;\n\n\t\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\t\tvar attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\t\tlightAttribute = attr;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( lightAttribute === undefined ) {\n\n\t\t\t\tmodel = new Object3D();\n\n\t\t\t} else {\n\n\t\t\t\tvar type;\n\n\t\t\t\t// LightType can be undefined for Point lights\n\t\t\t\tif ( lightAttribute.LightType === undefined ) {\n\n\t\t\t\t\ttype = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttype = lightAttribute.LightType.value;\n\n\t\t\t\t}\n\n\t\t\t\tvar color = 0xffffff;\n\n\t\t\t\tif ( lightAttribute.Color !== undefined ) {\n\n\t\t\t\t\tcolor = new Color().fromArray( lightAttribute.Color.value );\n\n\t\t\t\t}\n\n\t\t\t\tvar intensity = ( lightAttribute.Intensity === undefined ) ? 1 : lightAttribute.Intensity.value / 100;\n\n\t\t\t\t// light disabled\n\t\t\t\tif ( lightAttribute.CastLightOnObject !== undefined && lightAttribute.CastLightOnObject.value === 0 ) {\n\n\t\t\t\t\tintensity = 0;\n\n\t\t\t\t}\n\n\t\t\t\tvar distance = 0;\n\t\t\t\tif ( lightAttribute.FarAttenuationEnd !== undefined ) {\n\n\t\t\t\t\tif ( lightAttribute.EnableFarAttenuation !== undefined && lightAttribute.EnableFarAttenuation.value === 0 ) {\n\n\t\t\t\t\t\tdistance = 0;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdistance = lightAttribute.FarAttenuationEnd.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// TODO: could this be calculated linearly from FarAttenuationStart to FarAttenuationEnd?\n\t\t\t\tvar decay = 1;\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 0: // Point\n\t\t\t\t\t\tmodel = new PointLight( color, intensity, distance, decay );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 1: // Directional\n\t\t\t\t\t\tmodel = new DirectionalLight( color, intensity );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 2: // Spot\n\t\t\t\t\t\tvar angle = Math.PI / 3;\n\n\t\t\t\t\t\tif ( lightAttribute.InnerAngle !== undefined ) {\n\n\t\t\t\t\t\t\tangle = MathUtils.degToRad( lightAttribute.InnerAngle.value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar penumbra = 0;\n\t\t\t\t\t\tif ( lightAttribute.OuterAngle !== undefined ) {\n\n\t\t\t\t\t\t\t// TODO: this is not correct - FBX calculates outer and inner angle in degrees\n\t\t\t\t\t\t\t// with OuterAngle > InnerAngle && OuterAngle <= Math.PI\n\t\t\t\t\t\t\t// while three.js uses a penumbra between (0, 1) to attenuate the inner angle\n\t\t\t\t\t\t\tpenumbra = MathUtils.degToRad( lightAttribute.OuterAngle.value );\n\t\t\t\t\t\t\tpenumbra = Math.max( penumbra, 1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmodel = new SpotLight( color, intensity, distance, angle, penumbra, decay );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown light type ' + lightAttribute.LightType.value + ', defaulting to a PointLight.' );\n\t\t\t\t\t\tmodel = new PointLight( color, intensity );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( lightAttribute.CastShadows !== undefined && lightAttribute.CastShadows.value === 1 ) {\n\n\t\t\t\t\tmodel.castShadow = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn model;\n\n\t\t},\n\n\t\tcreateMesh: function ( relationships, geometryMap, materialMap ) {\n\n\t\t\tvar model;\n\t\t\tvar geometry = null;\n\t\t\tvar material = null;\n\t\t\tvar materials = [];\n\n\t\t\t// get geometry and materials(s) from connections\n\t\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\t\tif ( geometryMap.has( child.ID ) ) {\n\n\t\t\t\t\tgeometry = geometryMap.get( child.ID );\n\n\t\t\t\t}\n\n\t\t\t\tif ( materialMap.has( child.ID ) ) {\n\n\t\t\t\t\tmaterials.push( materialMap.get( child.ID ) );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( materials.length > 1 ) {\n\n\t\t\t\tmaterial = materials;\n\n\t\t\t} else if ( materials.length > 0 ) {\n\n\t\t\t\tmaterial = materials[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tmaterial = new MeshPhongMaterial( { color: 0xcccccc } );\n\t\t\t\tmaterials.push( material );\n\n\t\t\t}\n\n\t\t\tif ( 'color' in geometry.attributes ) {\n\n\t\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( geometry.FBX_Deformer ) {\n\n\t\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\t\tmaterial.skinning = true;\n\n\t\t\t\t} );\n\n\t\t\t\tmodel = new SkinnedMesh( geometry, material );\n\t\t\t\tmodel.normalizeSkinWeights();\n\n\t\t\t} else {\n\n\t\t\t\tmodel = new Mesh( geometry, material );\n\n\t\t\t}\n\n\t\t\treturn model;\n\n\t\t},\n\n\t\tcreateCurve: function ( relationships, geometryMap ) {\n\n\t\t\tvar geometry = relationships.children.reduce( function ( geo, child ) {\n\n\t\t\t\tif ( geometryMap.has( child.ID ) ) geo = geometryMap.get( child.ID );\n\n\t\t\t\treturn geo;\n\n\t\t\t}, null );\n\n\t\t\t// FBX does not list materials for Nurbs lines, so we'll just put our own in here.\n\t\t\tvar material = new LineBasicMaterial( { color: 0x3300ff, linewidth: 1 } );\n\t\t\treturn new Line( geometry, material );\n\n\t\t},\n\n\t\t// parse the model node for transform data\n\t\tgetTransformData: function ( model, modelNode ) {\n\n\t\t\tvar transformData = {};\n\n\t\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\t\telse transformData.eulerOrder = 'ZYX';\n\n\t\t\tif ( 'Lcl_Translation' in modelNode ) transformData.translation = modelNode.Lcl_Translation.value;\n\n\t\t\tif ( 'PreRotation' in modelNode ) transformData.preRotation = modelNode.PreRotation.value;\n\t\t\tif ( 'Lcl_Rotation' in modelNode ) transformData.rotation = modelNode.Lcl_Rotation.value;\n\t\t\tif ( 'PostRotation' in modelNode ) transformData.postRotation = modelNode.PostRotation.value;\n\n\t\t\tif ( 'Lcl_Scaling' in modelNode ) transformData.scale = modelNode.Lcl_Scaling.value;\n\n\t\t\tif ( 'ScalingOffset' in modelNode ) transformData.scalingOffset = modelNode.ScalingOffset.value;\n\t\t\tif ( 'ScalingPivot' in modelNode ) transformData.scalingPivot = modelNode.ScalingPivot.value;\n\n\t\t\tif ( 'RotationOffset' in modelNode ) transformData.rotationOffset = modelNode.RotationOffset.value;\n\t\t\tif ( 'RotationPivot' in modelNode ) transformData.rotationPivot = modelNode.RotationPivot.value;\n\n\t\t\tmodel.userData.transformData = transformData;\n\n\t\t},\n\n\t\tsetLookAtProperties: function ( model, modelNode ) {\n\n\t\t\tif ( 'LookAtProperty' in modelNode ) {\n\n\t\t\t\tvar children = connections.get( model.ID ).children;\n\n\t\t\t\tchildren.forEach( function ( child ) {\n\n\t\t\t\t\tif ( child.relationship === 'LookAtProperty' ) {\n\n\t\t\t\t\t\tvar lookAtTarget = fbxTree.Objects.Model[ child.ID ];\n\n\t\t\t\t\t\tif ( 'Lcl_Translation' in lookAtTarget ) {\n\n\t\t\t\t\t\t\tvar pos = lookAtTarget.Lcl_Translation.value;\n\n\t\t\t\t\t\t\t// DirectionalLight, SpotLight\n\t\t\t\t\t\t\tif ( model.target !== undefined ) {\n\n\t\t\t\t\t\t\t\tmodel.target.position.fromArray( pos );\n\t\t\t\t\t\t\t\tsceneGraph.add( model.target );\n\n\t\t\t\t\t\t\t} else { // Cameras and other Object3Ds\n\n\t\t\t\t\t\t\t\tmodel.lookAt( new Vector3().fromArray( pos ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t},\n\n\t\tbindSkeleton: function ( skeletons, geometryMap, modelMap ) {\n\n\t\t\tvar bindMatrices = this.parsePoseNodes();\n\n\t\t\tfor ( var ID in skeletons ) {\n\n\t\t\t\tvar skeleton = skeletons[ ID ];\n\n\t\t\t\tvar parents = connections.get( parseInt( skeleton.ID ) ).parents;\n\n\t\t\t\tparents.forEach( function ( parent ) {\n\n\t\t\t\t\tif ( geometryMap.has( parent.ID ) ) {\n\n\t\t\t\t\t\tvar geoID = parent.ID;\n\t\t\t\t\t\tvar geoRelationships = connections.get( geoID );\n\n\t\t\t\t\t\tgeoRelationships.parents.forEach( function ( geoConnParent ) {\n\n\t\t\t\t\t\t\tif ( modelMap.has( geoConnParent.ID ) ) {\n\n\t\t\t\t\t\t\t\tvar model = modelMap.get( geoConnParent.ID );\n\n\t\t\t\t\t\t\t\tmodel.bind( new Skeleton( skeleton.bones ), bindMatrices[ geoConnParent.ID ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparsePoseNodes: function () {\n\n\t\t\tvar bindMatrices = {};\n\n\t\t\tif ( 'Pose' in fbxTree.Objects ) {\n\n\t\t\t\tvar BindPoseNode = fbxTree.Objects.Pose;\n\n\t\t\t\tfor ( var nodeID in BindPoseNode ) {\n\n\t\t\t\t\tif ( BindPoseNode[ nodeID ].attrType === 'BindPose' ) {\n\n\t\t\t\t\t\tvar poseNodes = BindPoseNode[ nodeID ].PoseNode;\n\n\t\t\t\t\t\tif ( Array.isArray( poseNodes ) ) {\n\n\t\t\t\t\t\t\tposeNodes.forEach( function ( poseNode ) {\n\n\t\t\t\t\t\t\t\tbindMatrices[ poseNode.Node ] = new Matrix4().fromArray( poseNode.Matrix.a );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbindMatrices[ poseNodes.Node ] = new Matrix4().fromArray( poseNodes.Matrix.a );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bindMatrices;\n\n\t\t},\n\n\t\t// Parse ambient color in FBXTree.GlobalSettings - if it's not set to black (default), create an ambient light\n\t\tcreateAmbientLight: function () {\n\n\t\t\tif ( 'GlobalSettings' in fbxTree && 'AmbientColor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\tvar ambientColor = fbxTree.GlobalSettings.AmbientColor.value;\n\t\t\t\tvar r = ambientColor[ 0 ];\n\t\t\t\tvar g = ambientColor[ 1 ];\n\t\t\t\tvar b = ambientColor[ 2 ];\n\n\t\t\t\tif ( r !== 0 || g !== 0 || b !== 0 ) {\n\n\t\t\t\t\tvar color = new Color( r, g, b );\n\t\t\t\t\tsceneGraph.add( new AmbientLight( color, 1 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tsetupMorphMaterials: function () {\n\n\t\t\tvar scope = this;\n\t\t\tsceneGraph.traverse( function ( child ) {\n\n\t\t\t\tif ( child.isMesh ) {\n\n\t\t\t\t\tif ( child.geometry.morphAttributes.position && child.geometry.morphAttributes.position.length ) {\n\n\t\t\t\t\t\tif ( Array.isArray( child.material ) ) {\n\n\t\t\t\t\t\t\tchild.material.forEach( function ( material, i ) {\n\n\t\t\t\t\t\t\t\tscope.setupMorphMaterial( child, material, i );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tscope.setupMorphMaterial( child, child.material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t},\n\n\t\tsetupMorphMaterial: function ( child, material, index ) {\n\n\t\t\tvar uuid = child.uuid;\n\t\t\tvar matUuid = material.uuid;\n\n\t\t\t// if a geometry has morph targets, it cannot share the material with other geometries\n\t\t\tvar sharedMat = false;\n\n\t\t\tsceneGraph.traverse( function ( node ) {\n\n\t\t\t\tif ( node.isMesh ) {\n\n\t\t\t\t\tif ( Array.isArray( node.material ) ) {\n\n\t\t\t\t\t\tnode.material.forEach( function ( mat ) {\n\n\t\t\t\t\t\t\tif ( mat.uuid === matUuid && node.uuid !== uuid ) sharedMat = true;\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else if ( node.material.uuid === matUuid && node.uuid !== uuid ) sharedMat = true;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( sharedMat === true ) {\n\n\t\t\t\tvar clonedMat = material.clone();\n\t\t\t\tclonedMat.morphTargets = true;\n\n\t\t\t\tif ( index === undefined ) child.material = clonedMat;\n\t\t\t\telse child.material[ index ] = clonedMat;\n\n\t\t\t} else material.morphTargets = true;\n\n\t\t}\n\n\t};\n\n\t// parse Geometry data from FBXTree and return map of BufferGeometries\n\tfunction GeometryParser() {}\n\n\tGeometryParser.prototype = {\n\n\t\tconstructor: GeometryParser,\n\n\t\t// Parse nodes in FBXTree.Objects.Geometry\n\t\tparse: function ( deformers ) {\n\n\t\t\tvar geometryMap = new Map();\n\n\t\t\tif ( 'Geometry' in fbxTree.Objects ) {\n\n\t\t\t\tvar geoNodes = fbxTree.Objects.Geometry;\n\n\t\t\t\tfor ( var nodeID in geoNodes ) {\n\n\t\t\t\t\tvar relationships = connections.get( parseInt( nodeID ) );\n\t\t\t\t\tvar geo = this.parseGeometry( relationships, geoNodes[ nodeID ], deformers );\n\n\t\t\t\t\tgeometryMap.set( parseInt( nodeID ), geo );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn geometryMap;\n\n\t\t},\n\n\t\t// Parse single node in FBXTree.Objects.Geometry\n\t\tparseGeometry: function ( relationships, geoNode, deformers ) {\n\n\t\t\tswitch ( geoNode.attrType ) {\n\n\t\t\t\tcase 'Mesh':\n\t\t\t\t\treturn this.parseMeshGeometry( relationships, geoNode, deformers );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'NurbsCurve':\n\t\t\t\t\treturn this.parseNurbsGeometry( geoNode );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t},\n\n\n\t\t// Parse single node mesh geometry in FBXTree.Objects.Geometry\n\t\tparseMeshGeometry: function ( relationships, geoNode, deformers ) {\n\n\t\t\tvar skeletons = deformers.skeletons;\n\t\t\tvar morphTargets = [];\n\n\t\t\tvar modelNodes = relationships.parents.map( function ( parent ) {\n\n\t\t\t\treturn fbxTree.Objects.Model[ parent.ID ];\n\n\t\t\t} );\n\n\t\t\t// don't create geometry if it is not associated with any models\n\t\t\tif ( modelNodes.length === 0 ) return;\n\n\t\t\tvar skeleton = relationships.children.reduce( function ( skeleton, child ) {\n\n\t\t\t\tif ( skeletons[ child.ID ] !== undefined ) skeleton = skeletons[ child.ID ];\n\n\t\t\t\treturn skeleton;\n\n\t\t\t}, null );\n\n\t\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\t\tif ( deformers.morphTargets[ child.ID ] !== undefined ) {\n\n\t\t\t\t\tmorphTargets.push( deformers.morphTargets[ child.ID ] );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// Assume one model and get the preRotation from that\n\t\t\t// if there is more than one model associated with the geometry this may cause problems\n\t\t\tvar modelNode = modelNodes[ 0 ];\n\n\t\t\tvar transformData = {};\n\n\t\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\t\tif ( 'GeometricTranslation' in modelNode ) transformData.translation = modelNode.GeometricTranslation.value;\n\t\t\tif ( 'GeometricRotation' in modelNode ) transformData.rotation = modelNode.GeometricRotation.value;\n\t\t\tif ( 'GeometricScaling' in modelNode ) transformData.scale = modelNode.GeometricScaling.value;\n\n\t\t\tvar transform = generateTransform( transformData );\n\n\t\t\treturn this.genGeometry( geoNode, skeleton, morphTargets, transform );\n\n\t\t},\n\n\t\t// Generate a BufferGeometry from a node in FBXTree.Objects.Geometry\n\t\tgenGeometry: function ( geoNode, skeleton, morphTargets, preTransform ) {\n\n\t\t\tvar geo = new BufferGeometry();\n\t\t\tif ( geoNode.attrName ) geo.name = geoNode.attrName;\n\n\t\t\tvar geoInfo = this.parseGeoNode( geoNode, skeleton );\n\t\t\tvar buffers = this.genBuffers( geoInfo );\n\n\t\t\tvar positionAttribute = new Float32BufferAttribute( buffers.vertex, 3 );\n\n\t\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\t\tgeo.setAttribute( 'position', positionAttribute );\n\n\t\t\tif ( buffers.colors.length > 0 ) {\n\n\t\t\t\tgeo.setAttribute( 'color', new Float32BufferAttribute( buffers.colors, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tgeo.setAttribute( 'skinIndex', new Uint16BufferAttribute( buffers.weightsIndices, 4 ) );\n\n\t\t\t\tgeo.setAttribute( 'skinWeight', new Float32BufferAttribute( buffers.vertexWeights, 4 ) );\n\n\t\t\t\t// used later to bind the skeleton to the model\n\t\t\t\tgeo.FBX_Deformer = skeleton;\n\n\t\t\t}\n\n\t\t\tif ( buffers.normal.length > 0 ) {\n\n\t\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( preTransform );\n\n\t\t\t\tvar normalAttribute = new Float32BufferAttribute( buffers.normal, 3 );\n\t\t\t\tnormalAttribute.applyNormalMatrix( normalMatrix );\n\n\t\t\t\tgeo.setAttribute( 'normal', normalAttribute );\n\n\t\t\t}\n\n\t\t\tbuffers.uvs.forEach( function ( uvBuffer, i ) {\n\n\t\t\t\t// subsequent uv buffers are called 'uv1', 'uv2', ...\n\t\t\t\tvar name = 'uv' + ( i + 1 ).toString();\n\n\t\t\t\t// the first uv buffer is just called 'uv'\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tname = 'uv';\n\n\t\t\t\t}\n\n\t\t\t\tgeo.setAttribute( name, new Float32BufferAttribute( buffers.uvs[ i ], 2 ) );\n\n\t\t\t} );\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\t// Convert the material indices of each vertex into rendering groups on the geometry.\n\t\t\t\tvar prevMaterialIndex = buffers.materialIndex[ 0 ];\n\t\t\t\tvar startIndex = 0;\n\n\t\t\t\tbuffers.materialIndex.forEach( function ( currentIndex, i ) {\n\n\t\t\t\t\tif ( currentIndex !== prevMaterialIndex ) {\n\n\t\t\t\t\t\tgeo.addGroup( startIndex, i - startIndex, prevMaterialIndex );\n\n\t\t\t\t\t\tprevMaterialIndex = currentIndex;\n\t\t\t\t\t\tstartIndex = i;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t// the loop above doesn't add the last group, do that here.\n\t\t\t\tif ( geo.groups.length > 0 ) {\n\n\t\t\t\t\tvar lastGroup = geo.groups[ geo.groups.length - 1 ];\n\t\t\t\t\tvar lastIndex = lastGroup.start + lastGroup.count;\n\n\t\t\t\t\tif ( lastIndex !== buffers.materialIndex.length ) {\n\n\t\t\t\t\t\tgeo.addGroup( lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// case where there are multiple materials but the whole geometry is only\n\t\t\t\t// using one of them\n\t\t\t\tif ( geo.groups.length === 0 ) {\n\n\t\t\t\t\tgeo.addGroup( 0, buffers.materialIndex.length, buffers.materialIndex[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.addMorphTargets( geo, geoNode, morphTargets, preTransform );\n\n\t\t\treturn geo;\n\n\t\t},\n\n\t\tparseGeoNode: function ( geoNode, skeleton ) {\n\n\t\t\tvar geoInfo = {};\n\n\t\t\tgeoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : [];\n\t\t\tgeoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : [];\n\n\t\t\tif ( geoNode.LayerElementColor ) {\n\n\t\t\t\tgeoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoNode.LayerElementMaterial ) {\n\n\t\t\t\tgeoInfo.material = this.parseMaterialIndices( geoNode.LayerElementMaterial[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoNode.LayerElementNormal ) {\n\n\t\t\t\tgeoInfo.normal = this.parseNormals( geoNode.LayerElementNormal[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoNode.LayerElementUV ) {\n\n\t\t\t\tgeoInfo.uv = [];\n\n\t\t\t\tvar i = 0;\n\t\t\t\twhile ( geoNode.LayerElementUV[ i ] ) {\n\n\t\t\t\t\tif ( geoNode.LayerElementUV[ i ].UV ) {\n\n\t\t\t\t\t\tgeoInfo.uv.push( this.parseUVs( geoNode.LayerElementUV[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ti ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeoInfo.weightTable = {};\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\tgeoInfo.skeleton = skeleton;\n\n\t\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t\t// loop over the bone's vertex indices and weights\n\t\t\t\t\trawBone.indices.forEach( function ( index, j ) {\n\n\t\t\t\t\t\tif ( geoInfo.weightTable[ index ] === undefined ) geoInfo.weightTable[ index ] = [];\n\n\t\t\t\t\t\tgeoInfo.weightTable[ index ].push( {\n\n\t\t\t\t\t\t\tid: i,\n\t\t\t\t\t\t\tweight: rawBone.weights[ j ],\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn geoInfo;\n\n\t\t},\n\n\t\tgenBuffers: function ( geoInfo ) {\n\n\t\t\tvar buffers = {\n\t\t\t\tvertex: [],\n\t\t\t\tnormal: [],\n\t\t\t\tcolors: [],\n\t\t\t\tuvs: [],\n\t\t\t\tmaterialIndex: [],\n\t\t\t\tvertexWeights: [],\n\t\t\t\tweightsIndices: [],\n\t\t\t};\n\n\t\t\tvar polygonIndex = 0;\n\t\t\tvar faceLength = 0;\n\t\t\tvar displayedWeightsWarning = false;\n\n\t\t\t// these will hold data for a single face\n\t\t\tvar facePositionIndexes = [];\n\t\t\tvar faceNormals = [];\n\t\t\tvar faceColors = [];\n\t\t\tvar faceUVs = [];\n\t\t\tvar faceWeights = [];\n\t\t\tvar faceWeightIndices = [];\n\n\t\t\tvar scope = this;\n\t\t\tgeoInfo.vertexIndices.forEach( function ( vertexIndex, polygonVertexIndex ) {\n\n\t\t\t\tvar endOfFace = false;\n\n\t\t\t\t// Face index and vertex index arrays are combined in a single array\n\t\t\t\t// A cube with quad faces looks like this:\n\t\t\t\t// PolygonVertexIndex: *24 {\n\t\t\t\t//  a: 0, 1, 3, -3, 2, 3, 5, -5, 4, 5, 7, -7, 6, 7, 1, -1, 1, 7, 5, -4, 6, 0, 2, -5\n\t\t\t\t//  }\n\t\t\t\t// Negative numbers mark the end of a face - first face here is 0, 1, 3, -3\n\t\t\t\t// to find index of last vertex bit shift the index: ^ - 1\n\t\t\t\tif ( vertexIndex < 0 ) {\n\n\t\t\t\t\tvertexIndex = vertexIndex ^ - 1; // equivalent to ( x * -1 ) - 1\n\t\t\t\t\tendOfFace = true;\n\n\t\t\t\t}\n\n\t\t\t\tvar weightIndices = [];\n\t\t\t\tvar weights = [];\n\n\t\t\t\tfacePositionIndexes.push( vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2 );\n\n\t\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\t\tvar data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color );\n\n\t\t\t\t\tfaceColors.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\t\tif ( geoInfo.weightTable[ vertexIndex ] !== undefined ) {\n\n\t\t\t\t\t\tgeoInfo.weightTable[ vertexIndex ].forEach( function ( wt ) {\n\n\t\t\t\t\t\t\tweights.push( wt.weight );\n\t\t\t\t\t\t\tweightIndices.push( wt.id );\n\n\t\t\t\t\t\t} );\n\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( weights.length > 4 ) {\n\n\t\t\t\t\t\tif ( ! displayedWeightsWarning ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.' );\n\t\t\t\t\t\t\tdisplayedWeightsWarning = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar wIndex = [ 0, 0, 0, 0 ];\n\t\t\t\t\t\tvar Weight = [ 0, 0, 0, 0 ];\n\n\t\t\t\t\t\tweights.forEach( function ( weight, weightIndex ) {\n\n\t\t\t\t\t\t\tvar currentWeight = weight;\n\t\t\t\t\t\t\tvar currentIndex = weightIndices[ weightIndex ];\n\n\t\t\t\t\t\t\tWeight.forEach( function ( comparedWeight, comparedWeightIndex, comparedWeightArray ) {\n\n\t\t\t\t\t\t\t\tif ( currentWeight > comparedWeight ) {\n\n\t\t\t\t\t\t\t\t\tcomparedWeightArray[ comparedWeightIndex ] = currentWeight;\n\t\t\t\t\t\t\t\t\tcurrentWeight = comparedWeight;\n\n\t\t\t\t\t\t\t\t\tvar tmp = wIndex[ comparedWeightIndex ];\n\t\t\t\t\t\t\t\t\twIndex[ comparedWeightIndex ] = currentIndex;\n\t\t\t\t\t\t\t\t\tcurrentIndex = tmp;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tweightIndices = wIndex;\n\t\t\t\t\t\tweights = Weight;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if the weight array is shorter than 4 pad with 0s\n\t\t\t\t\twhile ( weights.length < 4 ) {\n\n\t\t\t\t\t\tweights.push( 0 );\n\t\t\t\t\t\tweightIndices.push( 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < 4; ++ i ) {\n\n\t\t\t\t\t\tfaceWeights.push( weights[ i ] );\n\t\t\t\t\t\tfaceWeightIndices.push( weightIndices[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\t\tvar data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal );\n\n\t\t\t\t\tfaceNormals.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\t\tvar materialIndex = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material )[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\t\tgeoInfo.uv.forEach( function ( uv, i ) {\n\n\t\t\t\t\t\tvar data = getData( polygonVertexIndex, polygonIndex, vertexIndex, uv );\n\n\t\t\t\t\t\tif ( faceUVs[ i ] === undefined ) {\n\n\t\t\t\t\t\t\tfaceUVs[ i ] = [];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfaceUVs[ i ].push( data[ 0 ] );\n\t\t\t\t\t\tfaceUVs[ i ].push( data[ 1 ] );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tfaceLength ++;\n\n\t\t\t\tif ( endOfFace ) {\n\n\t\t\t\t\tscope.genFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength );\n\n\t\t\t\t\tpolygonIndex ++;\n\t\t\t\t\tfaceLength = 0;\n\n\t\t\t\t\t// reset arrays for the next face\n\t\t\t\t\tfacePositionIndexes = [];\n\t\t\t\t\tfaceNormals = [];\n\t\t\t\t\tfaceColors = [];\n\t\t\t\t\tfaceUVs = [];\n\t\t\t\t\tfaceWeights = [];\n\t\t\t\t\tfaceWeightIndices = [];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn buffers;\n\n\t\t},\n\n\t\t// Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris\n\t\tgenFace: function ( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ) {\n\n\t\t\tfor ( var i = 2; i < faceLength; i ++ ) {\n\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 0 ] ] );\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 1 ] ] );\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ 2 ] ] );\n\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 ] ] );\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 + 1 ] ] );\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ ( i - 1 ) * 3 + 2 ] ] );\n\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 ] ] );\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 + 1 ] ] );\n\t\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i * 3 + 2 ] ] );\n\n\t\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ 0 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ 1 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ 2 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ 3 ] );\n\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 1 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 2 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ ( i - 1 ) * 4 + 3 ] );\n\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i * 4 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i * 4 + 1 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i * 4 + 2 ] );\n\t\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i * 4 + 3 ] );\n\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ 0 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ 1 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ 2 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ 3 ] );\n\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 1 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 2 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ ( i - 1 ) * 4 + 3 ] );\n\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i * 4 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i * 4 + 1 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i * 4 + 2 ] );\n\t\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i * 4 + 3 ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\t\tbuffers.colors.push( faceColors[ 0 ] );\n\t\t\t\t\tbuffers.colors.push( faceColors[ 1 ] );\n\t\t\t\t\tbuffers.colors.push( faceColors[ 2 ] );\n\n\t\t\t\t\tbuffers.colors.push( faceColors[ ( i - 1 ) * 3 ] );\n\t\t\t\t\tbuffers.colors.push( faceColors[ ( i - 1 ) * 3 + 1 ] );\n\t\t\t\t\tbuffers.colors.push( faceColors[ ( i - 1 ) * 3 + 2 ] );\n\n\t\t\t\t\tbuffers.colors.push( faceColors[ i * 3 ] );\n\t\t\t\t\tbuffers.colors.push( faceColors[ i * 3 + 1 ] );\n\t\t\t\t\tbuffers.colors.push( faceColors[ i * 3 + 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\t\tbuffers.normal.push( faceNormals[ 0 ] );\n\t\t\t\t\tbuffers.normal.push( faceNormals[ 1 ] );\n\t\t\t\t\tbuffers.normal.push( faceNormals[ 2 ] );\n\n\t\t\t\t\tbuffers.normal.push( faceNormals[ ( i - 1 ) * 3 ] );\n\t\t\t\t\tbuffers.normal.push( faceNormals[ ( i - 1 ) * 3 + 1 ] );\n\t\t\t\t\tbuffers.normal.push( faceNormals[ ( i - 1 ) * 3 + 2 ] );\n\n\t\t\t\t\tbuffers.normal.push( faceNormals[ i * 3 ] );\n\t\t\t\t\tbuffers.normal.push( faceNormals[ i * 3 + 1 ] );\n\t\t\t\t\tbuffers.normal.push( faceNormals[ i * 3 + 2 ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\t\tgeoInfo.uv.forEach( function ( uv, j ) {\n\n\t\t\t\t\t\tif ( buffers.uvs[ j ] === undefined ) buffers.uvs[ j ] = [];\n\n\t\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ 0 ] );\n\t\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ 1 ] );\n\n\t\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ ( i - 1 ) * 2 ] );\n\t\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ ( i - 1 ) * 2 + 1 ] );\n\n\t\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i * 2 ] );\n\t\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i * 2 + 1 ] );\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\taddMorphTargets: function ( parentGeo, parentGeoNode, morphTargets, preTransform ) {\n\n\t\t\tif ( morphTargets.length === 0 ) return;\n\n\t\t\tparentGeo.morphTargetsRelative = true;\n\n\t\t\tparentGeo.morphAttributes.position = [];\n\t\t\t// parentGeo.morphAttributes.normal = []; // not implemented\n\n\t\t\tvar scope = this;\n\t\t\tmorphTargets.forEach( function ( morphTarget ) {\n\n\t\t\t\tmorphTarget.rawTargets.forEach( function ( rawTarget ) {\n\n\t\t\t\t\tvar morphGeoNode = fbxTree.Objects.Geometry[ rawTarget.geoID ];\n\n\t\t\t\t\tif ( morphGeoNode !== undefined ) {\n\n\t\t\t\t\t\tscope.genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t},\n\n\t\t// a morph geometry node is similar to a standard  node, and the node is also contained\n\t\t// in FBXTree.Objects.Geometry, however it can only have attributes for position, normal\n\t\t// and a special attribute Index defining which vertices of the original geometry are affected\n\t\t// Normal and position attributes only have data for the vertices that are affected by the morph\n\t\tgenMorphGeometry: function ( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) {\n\n\t\t\tvar vertexIndices = ( parentGeoNode.PolygonVertexIndex !== undefined ) ? parentGeoNode.PolygonVertexIndex.a : [];\n\n\t\t\tvar morphPositionsSparse = ( morphGeoNode.Vertices !== undefined ) ? morphGeoNode.Vertices.a : [];\n\t\t\tvar indices = ( morphGeoNode.Indexes !== undefined ) ? morphGeoNode.Indexes.a : [];\n\n\t\t\tvar length = parentGeo.attributes.position.count * 3;\n\t\t\tvar morphPositions = new Float32Array( length );\n\n\t\t\tfor ( var i = 0; i < indices.length; i ++ ) {\n\n\t\t\t\tvar morphIndex = indices[ i ] * 3;\n\n\t\t\t\tmorphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ];\n\t\t\t\tmorphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ];\n\t\t\t\tmorphPositions[ morphIndex + 2 ] = morphPositionsSparse[ i * 3 + 2 ];\n\n\t\t\t}\n\n\t\t\t// TODO: add morph normal support\n\t\t\tvar morphGeoInfo = {\n\t\t\t\tvertexIndices: vertexIndices,\n\t\t\t\tvertexPositions: morphPositions,\n\n\t\t\t};\n\n\t\t\tvar morphBuffers = this.genBuffers( morphGeoInfo );\n\n\t\t\tvar positionAttribute = new Float32BufferAttribute( morphBuffers.vertex, 3 );\n\t\t\tpositionAttribute.name = name || morphGeoNode.attrName;\n\n\t\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\t\tparentGeo.morphAttributes.position.push( positionAttribute );\n\n\t\t},\n\n\t\t// Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists\n\t\tparseNormals: function ( NormalNode ) {\n\n\t\t\tvar mappingType = NormalNode.MappingInformationType;\n\t\t\tvar referenceType = NormalNode.ReferenceInformationType;\n\t\t\tvar buffer = NormalNode.Normals.a;\n\t\t\tvar indexBuffer = [];\n\t\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\t\tif ( 'NormalIndex' in NormalNode ) {\n\n\t\t\t\t\tindexBuffer = NormalNode.NormalIndex.a;\n\n\t\t\t\t} else if ( 'NormalsIndex' in NormalNode ) {\n\n\t\t\t\t\tindexBuffer = NormalNode.NormalsIndex.a;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdataSize: 3,\n\t\t\t\tbuffer: buffer,\n\t\t\t\tindices: indexBuffer,\n\t\t\t\tmappingType: mappingType,\n\t\t\t\treferenceType: referenceType\n\t\t\t};\n\n\t\t},\n\n\t\t// Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists\n\t\tparseUVs: function ( UVNode ) {\n\n\t\t\tvar mappingType = UVNode.MappingInformationType;\n\t\t\tvar referenceType = UVNode.ReferenceInformationType;\n\t\t\tvar buffer = UVNode.UV.a;\n\t\t\tvar indexBuffer = [];\n\t\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\t\tindexBuffer = UVNode.UVIndex.a;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdataSize: 2,\n\t\t\t\tbuffer: buffer,\n\t\t\t\tindices: indexBuffer,\n\t\t\t\tmappingType: mappingType,\n\t\t\t\treferenceType: referenceType\n\t\t\t};\n\n\t\t},\n\n\t\t// Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists\n\t\tparseVertexColors: function ( ColorNode ) {\n\n\t\t\tvar mappingType = ColorNode.MappingInformationType;\n\t\t\tvar referenceType = ColorNode.ReferenceInformationType;\n\t\t\tvar buffer = ColorNode.Colors.a;\n\t\t\tvar indexBuffer = [];\n\t\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\t\tindexBuffer = ColorNode.ColorIndex.a;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdataSize: 4,\n\t\t\t\tbuffer: buffer,\n\t\t\t\tindices: indexBuffer,\n\t\t\t\tmappingType: mappingType,\n\t\t\t\treferenceType: referenceType\n\t\t\t};\n\n\t\t},\n\n\t\t// Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists\n\t\tparseMaterialIndices: function ( MaterialNode ) {\n\n\t\t\tvar mappingType = MaterialNode.MappingInformationType;\n\t\t\tvar referenceType = MaterialNode.ReferenceInformationType;\n\n\t\t\tif ( mappingType === 'NoMappingInformation' ) {\n\n\t\t\t\treturn {\n\t\t\t\t\tdataSize: 1,\n\t\t\t\t\tbuffer: [ 0 ],\n\t\t\t\t\tindices: [ 0 ],\n\t\t\t\t\tmappingType: 'AllSame',\n\t\t\t\t\treferenceType: referenceType\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tvar materialIndexBuffer = MaterialNode.Materials.a;\n\n\t\t\t// Since materials are stored as indices, there's a bit of a mismatch between FBX and what\n\t\t\t// we expect.So we create an intermediate buffer that points to the index in the buffer,\n\t\t\t// for conforming with the other functions we've written for other data.\n\t\t\tvar materialIndices = [];\n\n\t\t\tfor ( var i = 0; i < materialIndexBuffer.length; ++ i ) {\n\n\t\t\t\tmaterialIndices.push( i );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdataSize: 1,\n\t\t\t\tbuffer: materialIndexBuffer,\n\t\t\t\tindices: materialIndices,\n\t\t\t\tmappingType: mappingType,\n\t\t\t\treferenceType: referenceType\n\t\t\t};\n\n\t\t},\n\n\t\t// Generate a NurbGeometry from a node in FBXTree.Objects.Geometry\n\t\tparseNurbsGeometry: function ( geoNode ) {\n\n\t\t\tif ( NURBSCurve === undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry.' );\n\t\t\t\treturn new BufferGeometry();\n\n\t\t\t}\n\n\t\t\tvar order = parseInt( geoNode.Order );\n\n\t\t\tif ( isNaN( order ) ) {\n\n\t\t\t\tconsole.error( 'THREE.FBXLoader: Invalid Order %s given for geometry ID: %s', geoNode.Order, geoNode.id );\n\t\t\t\treturn new BufferGeometry();\n\n\t\t\t}\n\n\t\t\tvar degree = order - 1;\n\n\t\t\tvar knots = geoNode.KnotVector.a;\n\t\t\tvar controlPoints = [];\n\t\t\tvar pointsValues = geoNode.Points.a;\n\n\t\t\tfor ( var i = 0, l = pointsValues.length; i < l; i += 4 ) {\n\n\t\t\t\tcontrolPoints.push( new Vector4().fromArray( pointsValues, i ) );\n\n\t\t\t}\n\n\t\t\tvar startKnot, endKnot;\n\n\t\t\tif ( geoNode.Form === 'Closed' ) {\n\n\t\t\t\tcontrolPoints.push( controlPoints[ 0 ] );\n\n\t\t\t} else if ( geoNode.Form === 'Periodic' ) {\n\n\t\t\t\tstartKnot = degree;\n\t\t\t\tendKnot = knots.length - 1 - startKnot;\n\n\t\t\t\tfor ( var i = 0; i < degree; ++ i ) {\n\n\t\t\t\t\tcontrolPoints.push( controlPoints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar curve = new NURBSCurve( degree, knots, controlPoints, startKnot, endKnot );\n\t\t\tvar vertices = curve.getPoints( controlPoints.length * 7 );\n\n\t\t\tvar positions = new Float32Array( vertices.length * 3 );\n\n\t\t\tvertices.forEach( function ( vertex, i ) {\n\n\t\t\t\tvertex.toArray( positions, i * 3 );\n\n\t\t\t} );\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t},\n\n\t};\n\n\t// parse animation data from FBXTree\n\tfunction AnimationParser() {}\n\n\tAnimationParser.prototype = {\n\n\t\tconstructor: AnimationParser,\n\n\t\t// take raw animation clips and turn them into three.js animation clips\n\t\tparse: function () {\n\n\t\t\tvar animationClips = [];\n\n\t\t\tvar rawClips = this.parseClips();\n\n\t\t\tif ( rawClips !== undefined ) {\n\n\t\t\t\tfor ( var key in rawClips ) {\n\n\t\t\t\t\tvar rawClip = rawClips[ key ];\n\n\t\t\t\t\tvar clip = this.addClip( rawClip );\n\n\t\t\t\t\tanimationClips.push( clip );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn animationClips;\n\n\t\t},\n\n\t\tparseClips: function () {\n\n\t\t\t// since the actual transformation data is stored in FBXTree.Objects.AnimationCurve,\n\t\t\t// if this is undefined we can safely assume there are no animations\n\t\t\tif ( fbxTree.Objects.AnimationCurve === undefined ) return undefined;\n\n\t\t\tvar curveNodesMap = this.parseAnimationCurveNodes();\n\n\t\t\tthis.parseAnimationCurves( curveNodesMap );\n\n\t\t\tvar layersMap = this.parseAnimationLayers( curveNodesMap );\n\t\t\tvar rawClips = this.parseAnimStacks( layersMap );\n\n\t\t\treturn rawClips;\n\n\t\t},\n\n\t\t// parse nodes in FBXTree.Objects.AnimationCurveNode\n\t\t// each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )\n\t\t// and is referenced by an AnimationLayer\n\t\tparseAnimationCurveNodes: function () {\n\n\t\t\tvar rawCurveNodes = fbxTree.Objects.AnimationCurveNode;\n\n\t\t\tvar curveNodesMap = new Map();\n\n\t\t\tfor ( var nodeID in rawCurveNodes ) {\n\n\t\t\t\tvar rawCurveNode = rawCurveNodes[ nodeID ];\n\n\t\t\t\tif ( rawCurveNode.attrName.match( /S|R|T|DeformPercent/ ) !== null ) {\n\n\t\t\t\t\tvar curveNode = {\n\n\t\t\t\t\t\tid: rawCurveNode.id,\n\t\t\t\t\t\tattr: rawCurveNode.attrName,\n\t\t\t\t\t\tcurves: {},\n\n\t\t\t\t\t};\n\n\t\t\t\t\tcurveNodesMap.set( curveNode.id, curveNode );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn curveNodesMap;\n\n\t\t},\n\n\t\t// parse nodes in FBXTree.Objects.AnimationCurve and connect them up to\n\t\t// previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated\n\t\t// axis ( e.g. times and values of x rotation)\n\t\tparseAnimationCurves: function ( curveNodesMap ) {\n\n\t\t\tvar rawCurves = fbxTree.Objects.AnimationCurve;\n\n\t\t\t// TODO: Many values are identical up to roundoff error, but won't be optimised\n\t\t\t// e.g. position times: [0, 0.4, 0. 8]\n\t\t\t// position values: [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.235384487103147e-7, 93.67520904541016, -0.9982695579528809]\n\t\t\t// clearly, this should be optimised to\n\t\t\t// times: [0], positions [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809]\n\t\t\t// this shows up in nearly every FBX file, and generally time array is length > 100\n\n\t\t\tfor ( var nodeID in rawCurves ) {\n\n\t\t\t\tvar animationCurve = {\n\n\t\t\t\t\tid: rawCurves[ nodeID ].id,\n\t\t\t\t\ttimes: rawCurves[ nodeID ].KeyTime.a.map( convertFBXTimeToSeconds ),\n\t\t\t\t\tvalues: rawCurves[ nodeID ].KeyValueFloat.a,\n\n\t\t\t\t};\n\n\t\t\t\tvar relationships = connections.get( animationCurve.id );\n\n\t\t\t\tif ( relationships !== undefined ) {\n\n\t\t\t\t\tvar animationCurveID = relationships.parents[ 0 ].ID;\n\t\t\t\t\tvar animationCurveRelationship = relationships.parents[ 0 ].relationship;\n\n\t\t\t\t\tif ( animationCurveRelationship.match( /X/ ) ) {\n\n\t\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'x' ] = animationCurve;\n\n\t\t\t\t\t} else if ( animationCurveRelationship.match( /Y/ ) ) {\n\n\t\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'y' ] = animationCurve;\n\n\t\t\t\t\t} else if ( animationCurveRelationship.match( /Z/ ) ) {\n\n\t\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'z' ] = animationCurve;\n\n\t\t\t\t\t} else if ( animationCurveRelationship.match( /d|DeformPercent/ ) && curveNodesMap.has( animationCurveID ) ) {\n\n\t\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'morph' ] = animationCurve;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t// parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references\n\t\t// to various AnimationCurveNodes and is referenced by an AnimationStack node\n\t\t// note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack\n\t\tparseAnimationLayers: function ( curveNodesMap ) {\n\n\t\t\tvar rawLayers = fbxTree.Objects.AnimationLayer;\n\n\t\t\tvar layersMap = new Map();\n\n\t\t\tfor ( var nodeID in rawLayers ) {\n\n\t\t\t\tvar layerCurveNodes = [];\n\n\t\t\t\tvar connection = connections.get( parseInt( nodeID ) );\n\n\t\t\t\tif ( connection !== undefined ) {\n\n\t\t\t\t\t// all the animationCurveNodes used in the layer\n\t\t\t\t\tvar children = connection.children;\n\n\t\t\t\t\tchildren.forEach( function ( child, i ) {\n\n\t\t\t\t\t\tif ( curveNodesMap.has( child.ID ) ) {\n\n\t\t\t\t\t\t\tvar curveNode = curveNodesMap.get( child.ID );\n\n\t\t\t\t\t\t\t// check that the curves are defined for at least one axis, otherwise ignore the curveNode\n\t\t\t\t\t\t\tif ( curveNode.curves.x !== undefined || curveNode.curves.y !== undefined || curveNode.curves.z !== undefined ) {\n\n\t\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\t\tvar modelID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\t\tif ( modelID !== undefined ) {\n\n\t\t\t\t\t\t\t\t\t\tvar rawModel = fbxTree.Objects.Model[ modelID.toString() ];\n\n\t\t\t\t\t\t\t\t\t\tif ( rawModel === undefined ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered a unused curve.', child );\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar node = {\n\n\t\t\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\t\t\tID: rawModel.id,\n\t\t\t\t\t\t\t\t\t\t\tinitialPosition: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\t\tinitialRotation: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\t\tinitialScale: [ 1, 1, 1 ],\n\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\t\tsceneGraph.traverse( function ( child ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( child.ID === rawModel.id ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tnode.transform = child.matrix;\n\n\t\t\t\t\t\t\t\t\t\t\t\tif ( child.userData.transformData ) node.eulerOrder = child.userData.transformData.eulerOrder;\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t\t\tif ( ! node.transform ) node.transform = new Matrix4();\n\n\t\t\t\t\t\t\t\t\t\t// if the animated model is pre rotated, we'll have to apply the pre rotations to every\n\t\t\t\t\t\t\t\t\t\t// animation value as well\n\t\t\t\t\t\t\t\t\t\tif ( 'PreRotation' in rawModel ) node.preRotation = rawModel.PreRotation.value;\n\t\t\t\t\t\t\t\t\t\tif ( 'PostRotation' in rawModel ) node.postRotation = rawModel.PostRotation.value;\n\n\t\t\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] ) layerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t\t} else if ( curveNode.curves.morph !== undefined ) {\n\n\t\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\t\tvar deformerID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\t\tvar morpherID = connections.get( deformerID ).parents[ 0 ].ID;\n\t\t\t\t\t\t\t\t\tvar geoID = connections.get( morpherID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\t\t// assuming geometry is not used in more than one model\n\t\t\t\t\t\t\t\t\tvar modelID = connections.get( geoID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\t\tvar rawModel = fbxTree.Objects.Model[ modelID ];\n\n\t\t\t\t\t\t\t\t\tvar node = {\n\n\t\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\t\tmorphName: fbxTree.Objects.Deformer[ deformerID ].attrName,\n\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlayerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tlayersMap.set( parseInt( nodeID ), layerCurveNodes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn layersMap;\n\n\t\t},\n\n\t\t// parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation\n\t\t// hierarchy. Each Stack node will be used to create a AnimationClip\n\t\tparseAnimStacks: function ( layersMap ) {\n\n\t\t\tvar rawStacks = fbxTree.Objects.AnimationStack;\n\n\t\t\t// connect the stacks (clips) up to the layers\n\t\t\tvar rawClips = {};\n\n\t\t\tfor ( var nodeID in rawStacks ) {\n\n\t\t\t\tvar children = connections.get( parseInt( nodeID ) ).children;\n\n\t\t\t\tif ( children.length > 1 ) {\n\n\t\t\t\t\t// it seems like stacks will always be associated with a single layer. But just in case there are files\n\t\t\t\t\t// where there are multiple layers per stack, we'll display a warning\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.' );\n\n\t\t\t\t}\n\n\t\t\t\tvar layer = layersMap.get( children[ 0 ].ID );\n\n\t\t\t\trawClips[ nodeID ] = {\n\n\t\t\t\t\tname: rawStacks[ nodeID ].attrName,\n\t\t\t\t\tlayer: layer,\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\treturn rawClips;\n\n\t\t},\n\n\t\taddClip: function ( rawClip ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar scope = this;\n\t\t\trawClip.layer.forEach( function ( rawTracks ) {\n\n\t\t\t\ttracks = tracks.concat( scope.generateTracks( rawTracks ) );\n\n\t\t\t} );\n\n\t\t\treturn new AnimationClip( rawClip.name, - 1, tracks );\n\n\t\t},\n\n\t\tgenerateTracks: function ( rawTracks ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar initialPosition = new Vector3();\n\t\t\tvar initialRotation = new Quaternion();\n\t\t\tvar initialScale = new Vector3();\n\n\t\t\tif ( rawTracks.transform ) rawTracks.transform.decompose( initialPosition, initialRotation, initialScale );\n\n\t\t\tinitialPosition = initialPosition.toArray();\n\t\t\tinitialRotation = new Euler().setFromQuaternion( initialRotation, rawTracks.eulerOrder ).toArray();\n\t\t\tinitialScale = initialScale.toArray();\n\n\t\t\tif ( rawTracks.T !== undefined && Object.keys( rawTracks.T.curves ).length > 0 ) {\n\n\t\t\t\tvar positionTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.T.curves, initialPosition, 'position' );\n\t\t\t\tif ( positionTrack !== undefined ) tracks.push( positionTrack );\n\n\t\t\t}\n\n\t\t\tif ( rawTracks.R !== undefined && Object.keys( rawTracks.R.curves ).length > 0 ) {\n\n\t\t\t\tvar rotationTrack = this.generateRotationTrack( rawTracks.modelName, rawTracks.R.curves, initialRotation, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder );\n\t\t\t\tif ( rotationTrack !== undefined ) tracks.push( rotationTrack );\n\n\t\t\t}\n\n\t\t\tif ( rawTracks.S !== undefined && Object.keys( rawTracks.S.curves ).length > 0 ) {\n\n\t\t\t\tvar scaleTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.S.curves, initialScale, 'scale' );\n\t\t\t\tif ( scaleTrack !== undefined ) tracks.push( scaleTrack );\n\n\t\t\t}\n\n\t\t\tif ( rawTracks.DeformPercent !== undefined ) {\n\n\t\t\t\tvar morphTrack = this.generateMorphTrack( rawTracks );\n\t\t\t\tif ( morphTrack !== undefined ) tracks.push( morphTrack );\n\n\t\t\t}\n\n\t\t\treturn tracks;\n\n\t\t},\n\n\t\tgenerateVectorTrack: function ( modelName, curves, initialValue, type ) {\n\n\t\t\tvar times = this.getTimesForAllAxes( curves );\n\t\t\tvar values = this.getKeyframeTrackValues( times, curves, initialValue );\n\n\t\t\treturn new VectorKeyframeTrack( modelName + '.' + type, times, values );\n\n\t\t},\n\n\t\tgenerateRotationTrack: function ( modelName, curves, initialValue, preRotation, postRotation, eulerOrder ) {\n\n\t\t\tif ( curves.x !== undefined ) {\n\n\t\t\t\tthis.interpolateRotations( curves.x );\n\t\t\t\tcurves.x.values = curves.x.values.map( MathUtils.degToRad );\n\n\t\t\t}\n\n\t\t\tif ( curves.y !== undefined ) {\n\n\t\t\t\tthis.interpolateRotations( curves.y );\n\t\t\t\tcurves.y.values = curves.y.values.map( MathUtils.degToRad );\n\n\t\t\t}\n\n\t\t\tif ( curves.z !== undefined ) {\n\n\t\t\t\tthis.interpolateRotations( curves.z );\n\t\t\t\tcurves.z.values = curves.z.values.map( MathUtils.degToRad );\n\n\t\t\t}\n\n\t\t\tvar times = this.getTimesForAllAxes( curves );\n\t\t\tvar values = this.getKeyframeTrackValues( times, curves, initialValue );\n\n\t\t\tif ( preRotation !== undefined ) {\n\n\t\t\t\tpreRotation = preRotation.map( MathUtils.degToRad );\n\t\t\t\tpreRotation.push( eulerOrder );\n\n\t\t\t\tpreRotation = new Euler().fromArray( preRotation );\n\t\t\t\tpreRotation = new Quaternion().setFromEuler( preRotation );\n\n\t\t\t}\n\n\t\t\tif ( postRotation !== undefined ) {\n\n\t\t\t\tpostRotation = postRotation.map( MathUtils.degToRad );\n\t\t\t\tpostRotation.push( eulerOrder );\n\n\t\t\t\tpostRotation = new Euler().fromArray( postRotation );\n\t\t\t\tpostRotation = new Quaternion().setFromEuler( postRotation ).invert();\n\n\t\t\t}\n\n\t\t\tvar quaternion = new Quaternion();\n\t\t\tvar euler = new Euler();\n\n\t\t\tvar quaternionValues = [];\n\n\t\t\tfor ( var i = 0; i < values.length; i += 3 ) {\n\n\t\t\t\teuler.set( values[ i ], values[ i + 1 ], values[ i + 2 ], eulerOrder );\n\n\t\t\t\tquaternion.setFromEuler( euler );\n\n\t\t\t\tif ( preRotation !== undefined ) quaternion.premultiply( preRotation );\n\t\t\t\tif ( postRotation !== undefined ) quaternion.multiply( postRotation );\n\n\t\t\t\tquaternion.toArray( quaternionValues, ( i / 3 ) * 4 );\n\n\t\t\t}\n\n\t\t\treturn new QuaternionKeyframeTrack( modelName + '.quaternion', times, quaternionValues );\n\n\t\t},\n\n\t\tgenerateMorphTrack: function ( rawTracks ) {\n\n\t\t\tvar curves = rawTracks.DeformPercent.curves.morph;\n\t\t\tvar values = curves.values.map( function ( val ) {\n\n\t\t\t\treturn val / 100;\n\n\t\t\t} );\n\n\t\t\tvar morphNum = sceneGraph.getObjectByName( rawTracks.modelName ).morphTargetDictionary[ rawTracks.morphName ];\n\n\t\t\treturn new NumberKeyframeTrack( rawTracks.modelName + '.morphTargetInfluences[' + morphNum + ']', curves.times, values );\n\n\t\t},\n\n\t\t// For all animated objects, times are defined separately for each axis\n\t\t// Here we'll combine the times into one sorted array without duplicates\n\t\tgetTimesForAllAxes: function ( curves ) {\n\n\t\t\tvar times = [];\n\n\t\t\t// first join together the times for each axis, if defined\n\t\t\tif ( curves.x !== undefined ) times = times.concat( curves.x.times );\n\t\t\tif ( curves.y !== undefined ) times = times.concat( curves.y.times );\n\t\t\tif ( curves.z !== undefined ) times = times.concat( curves.z.times );\n\n\t\t\t// then sort them\n\t\t\ttimes = times.sort( function ( a, b ) {\n\n\t\t\t\treturn a - b;\n\n\t\t\t} );\n\n\t\t\t// and remove duplicates\n\t\t\tif ( times.length > 1 ) {\n\n\t\t\t\tvar targetIndex = 1;\n\t\t\t\tvar lastValue = times[ 0 ];\n\t\t\t\tfor ( var i = 1; i < times.length; i ++ ) {\n\n\t\t\t\t\tvar currentValue = times[ i ];\n\t\t\t\t\tif ( currentValue !== lastValue ) {\n\n\t\t\t\t\t\ttimes[ targetIndex ] = currentValue;\n\t\t\t\t\t\tlastValue = currentValue;\n\t\t\t\t\t\ttargetIndex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\ttimes = times.slice( 0, targetIndex );\n\n\t\t\t}\n\n\t\t\treturn times;\n\n\t\t},\n\n\t\tgetKeyframeTrackValues: function ( times, curves, initialValue ) {\n\n\t\t\tvar prevValue = initialValue;\n\n\t\t\tvar values = [];\n\n\t\t\tvar xIndex = - 1;\n\t\t\tvar yIndex = - 1;\n\t\t\tvar zIndex = - 1;\n\n\t\t\ttimes.forEach( function ( time ) {\n\n\t\t\t\tif ( curves.x ) xIndex = curves.x.times.indexOf( time );\n\t\t\t\tif ( curves.y ) yIndex = curves.y.times.indexOf( time );\n\t\t\t\tif ( curves.z ) zIndex = curves.z.times.indexOf( time );\n\n\t\t\t\t// if there is an x value defined for this frame, use that\n\t\t\t\tif ( xIndex !== - 1 ) {\n\n\t\t\t\t\tvar xValue = curves.x.values[ xIndex ];\n\t\t\t\t\tvalues.push( xValue );\n\t\t\t\t\tprevValue[ 0 ] = xValue;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// otherwise use the x value from the previous frame\n\t\t\t\t\tvalues.push( prevValue[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( yIndex !== - 1 ) {\n\n\t\t\t\t\tvar yValue = curves.y.values[ yIndex ];\n\t\t\t\t\tvalues.push( yValue );\n\t\t\t\t\tprevValue[ 1 ] = yValue;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvalues.push( prevValue[ 1 ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( zIndex !== - 1 ) {\n\n\t\t\t\t\tvar zValue = curves.z.values[ zIndex ];\n\t\t\t\t\tvalues.push( zValue );\n\t\t\t\t\tprevValue[ 2 ] = zValue;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvalues.push( prevValue[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn values;\n\n\t\t},\n\n\t\t// Rotations are defined as Euler angles which can have values  of any size\n\t\t// These will be converted to quaternions which don't support values greater than\n\t\t// PI, so we'll interpolate large rotations\n\t\tinterpolateRotations: function ( curve ) {\n\n\t\t\tfor ( var i = 1; i < curve.values.length; i ++ ) {\n\n\t\t\t\tvar initialValue = curve.values[ i - 1 ];\n\t\t\t\tvar valuesSpan = curve.values[ i ] - initialValue;\n\n\t\t\t\tvar absoluteSpan = Math.abs( valuesSpan );\n\n\t\t\t\tif ( absoluteSpan >= 180 ) {\n\n\t\t\t\t\tvar numSubIntervals = absoluteSpan / 180;\n\n\t\t\t\t\tvar step = valuesSpan / numSubIntervals;\n\t\t\t\t\tvar nextValue = initialValue + step;\n\n\t\t\t\t\tvar initialTime = curve.times[ i - 1 ];\n\t\t\t\t\tvar timeSpan = curve.times[ i ] - initialTime;\n\t\t\t\t\tvar interval = timeSpan / numSubIntervals;\n\t\t\t\t\tvar nextTime = initialTime + interval;\n\n\t\t\t\t\tvar interpolatedTimes = [];\n\t\t\t\t\tvar interpolatedValues = [];\n\n\t\t\t\t\twhile ( nextTime < curve.times[ i ] ) {\n\n\t\t\t\t\t\tinterpolatedTimes.push( nextTime );\n\t\t\t\t\t\tnextTime += interval;\n\n\t\t\t\t\t\tinterpolatedValues.push( nextValue );\n\t\t\t\t\t\tnextValue += step;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurve.times = inject( curve.times, i, interpolatedTimes );\n\t\t\t\t\tcurve.values = inject( curve.values, i, interpolatedValues );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t};\n\n\t// parse an FBX file in ASCII format\n\tfunction TextParser() {}\n\n\tTextParser.prototype = {\n\n\t\tconstructor: TextParser,\n\n\t\tgetPrevNode: function () {\n\n\t\t\treturn this.nodeStack[ this.currentIndent - 2 ];\n\n\t\t},\n\n\t\tgetCurrentNode: function () {\n\n\t\t\treturn this.nodeStack[ this.currentIndent - 1 ];\n\n\t\t},\n\n\t\tgetCurrentProp: function () {\n\n\t\t\treturn this.currentProp;\n\n\t\t},\n\n\t\tpushStack: function ( node ) {\n\n\t\t\tthis.nodeStack.push( node );\n\t\t\tthis.currentIndent += 1;\n\n\t\t},\n\n\t\tpopStack: function () {\n\n\t\t\tthis.nodeStack.pop();\n\t\t\tthis.currentIndent -= 1;\n\n\t\t},\n\n\t\tsetCurrentProp: function ( val, name ) {\n\n\t\t\tthis.currentProp = val;\n\t\t\tthis.currentPropName = name;\n\n\t\t},\n\n\t\tparse: function ( text ) {\n\n\t\t\tthis.currentIndent = 0;\n\n\t\t\tthis.allNodes = new FBXTree();\n\t\t\tthis.nodeStack = [];\n\t\t\tthis.currentProp = [];\n\t\t\tthis.currentPropName = '';\n\n\t\t\tvar scope = this;\n\n\t\t\tvar split = text.split( /[\\r\\n]+/ );\n\n\t\t\tsplit.forEach( function ( line, i ) {\n\n\t\t\t\tvar matchComment = line.match( /^[\\s\\t]*;/ );\n\t\t\t\tvar matchEmpty = line.match( /^[\\s\\t]*$/ );\n\n\t\t\t\tif ( matchComment || matchEmpty ) return;\n\n\t\t\t\tvar matchBeginning = line.match( '^\\\\t{' + scope.currentIndent + '}(\\\\w+):(.*){', '' );\n\t\t\t\tvar matchProperty = line.match( '^\\\\t{' + ( scope.currentIndent ) + '}(\\\\w+):[\\\\s\\\\t\\\\r\\\\n](.*)' );\n\t\t\t\tvar matchEnd = line.match( '^\\\\t{' + ( scope.currentIndent - 1 ) + '}}' );\n\n\t\t\t\tif ( matchBeginning ) {\n\n\t\t\t\t\tscope.parseNodeBegin( line, matchBeginning );\n\n\t\t\t\t} else if ( matchProperty ) {\n\n\t\t\t\t\tscope.parseNodeProperty( line, matchProperty, split[ ++ i ] );\n\n\t\t\t\t} else if ( matchEnd ) {\n\n\t\t\t\t\tscope.popStack();\n\n\t\t\t\t} else if ( line.match( /^[^\\s\\t}]/ ) ) {\n\n\t\t\t\t\t// large arrays are split over multiple lines terminated with a ',' character\n\t\t\t\t\t// if this is encountered the line needs to be joined to the previous line\n\t\t\t\t\tscope.parseNodePropertyContinued( line );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn this.allNodes;\n\n\t\t},\n\n\t\tparseNodeBegin: function ( line, property ) {\n\n\t\t\tvar nodeName = property[ 1 ].trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\t\tvar nodeAttrs = property[ 2 ].split( ',' ).map( function ( attr ) {\n\n\t\t\t\treturn attr.trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\t\t} );\n\n\t\t\tvar node = { name: nodeName };\n\t\t\tvar attrs = this.parseNodeAttr( nodeAttrs );\n\n\t\t\tvar currentNode = this.getCurrentNode();\n\n\t\t\t// a top node\n\t\t\tif ( this.currentIndent === 0 ) {\n\n\t\t\t\tthis.allNodes.add( nodeName, node );\n\n\t\t\t} else { // a subnode\n\n\t\t\t\t// if the subnode already exists, append it\n\t\t\t\tif ( nodeName in currentNode ) {\n\n\t\t\t\t\t// special case Pose needs PoseNodes as an array\n\t\t\t\t\tif ( nodeName === 'PoseNode' ) {\n\n\t\t\t\t\t\tcurrentNode.PoseNode.push( node );\n\n\t\t\t\t\t} else if ( currentNode[ nodeName ].id !== undefined ) {\n\n\t\t\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\t\t\tcurrentNode[ nodeName ][ currentNode[ nodeName ].id ] = currentNode[ nodeName ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attrs.id !== '' ) currentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t\t} else if ( typeof attrs.id === 'number' ) {\n\n\t\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\t\tcurrentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t\t} else if ( nodeName !== 'Properties70' ) {\n\n\t\t\t\t\tif ( nodeName === 'PoseNode' )\tcurrentNode[ nodeName ] = [ node ];\n\t\t\t\t\telse currentNode[ nodeName ] = node;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( typeof attrs.id === 'number' ) node.id = attrs.id;\n\t\t\tif ( attrs.name !== '' ) node.attrName = attrs.name;\n\t\t\tif ( attrs.type !== '' ) node.attrType = attrs.type;\n\n\t\t\tthis.pushStack( node );\n\n\t\t},\n\n\t\tparseNodeAttr: function ( attrs ) {\n\n\t\t\tvar id = attrs[ 0 ];\n\n\t\t\tif ( attrs[ 0 ] !== '' ) {\n\n\t\t\t\tid = parseInt( attrs[ 0 ] );\n\n\t\t\t\tif ( isNaN( id ) ) {\n\n\t\t\t\t\tid = attrs[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar name = '', type = '';\n\n\t\t\tif ( attrs.length > 1 ) {\n\n\t\t\t\tname = attrs[ 1 ].replace( /^(\\w+)::/, '' );\n\t\t\t\ttype = attrs[ 2 ];\n\n\t\t\t}\n\n\t\t\treturn { id: id, name: name, type: type };\n\n\t\t},\n\n\t\tparseNodeProperty: function ( line, property, contentLine ) {\n\n\t\t\tvar propName = property[ 1 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\t\t\tvar propValue = property[ 2 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\n\t\t\t// for special case: base64 image data follows \"Content: ,\" line\n\t\t\t//\tContent: ,\n\t\t\t//\t \"/9j/4RDaRXhpZgAATU0A...\"\n\t\t\tif ( propName === 'Content' && propValue === ',' ) {\n\n\t\t\t\tpropValue = contentLine.replace( /\"/g, '' ).replace( /,$/, '' ).trim();\n\n\t\t\t}\n\n\t\t\tvar currentNode = this.getCurrentNode();\n\t\t\tvar parentName = currentNode.name;\n\n\t\t\tif ( parentName === 'Properties70' ) {\n\n\t\t\t\tthis.parseNodeSpecialProperty( line, propName, propValue );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Connections\n\t\t\tif ( propName === 'C' ) {\n\n\t\t\t\tvar connProps = propValue.split( ',' ).slice( 1 );\n\t\t\t\tvar from = parseInt( connProps[ 0 ] );\n\t\t\t\tvar to = parseInt( connProps[ 1 ] );\n\n\t\t\t\tvar rest = propValue.split( ',' ).slice( 3 );\n\n\t\t\t\trest = rest.map( function ( elem ) {\n\n\t\t\t\t\treturn elem.trim().replace( /^\"/, '' );\n\n\t\t\t\t} );\n\n\t\t\t\tpropName = 'connections';\n\t\t\t\tpropValue = [ from, to ];\n\t\t\t\tappend( propValue, rest );\n\n\t\t\t\tif ( currentNode[ propName ] === undefined ) {\n\n\t\t\t\t\tcurrentNode[ propName ] = [];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Node\n\t\t\tif ( propName === 'Node' ) currentNode.id = propValue;\n\n\t\t\t// connections\n\t\t\tif ( propName in currentNode && Array.isArray( currentNode[ propName ] ) ) {\n\n\t\t\t\tcurrentNode[ propName ].push( propValue );\n\n\t\t\t} else {\n\n\t\t\t\tif ( propName !== 'a' ) currentNode[ propName ] = propValue;\n\t\t\t\telse currentNode.a = propValue;\n\n\t\t\t}\n\n\t\t\tthis.setCurrentProp( currentNode, propName );\n\n\t\t\t// convert string to array, unless it ends in ',' in which case more will be added to it\n\t\t\tif ( propName === 'a' && propValue.slice( - 1 ) !== ',' ) {\n\n\t\t\t\tcurrentNode.a = parseNumberArray( propValue );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseNodePropertyContinued: function ( line ) {\n\n\t\t\tvar currentNode = this.getCurrentNode();\n\n\t\t\tcurrentNode.a += line;\n\n\t\t\t// if the line doesn't end in ',' we have reached the end of the property value\n\t\t\t// so convert the string to an array\n\t\t\tif ( line.slice( - 1 ) !== ',' ) {\n\n\t\t\t\tcurrentNode.a = parseNumberArray( currentNode.a );\n\n\t\t\t}\n\n\t\t},\n\n\t\t// parse \"Property70\"\n\t\tparseNodeSpecialProperty: function ( line, propName, propValue ) {\n\n\t\t\t// split this\n\t\t\t// P: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\",1,1,1\n\t\t\t// into array like below\n\t\t\t// [\"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\", \"1,1,1\" ]\n\t\t\tvar props = propValue.split( '\",' ).map( function ( prop ) {\n\n\t\t\t\treturn prop.trim().replace( /^\\\"/, '' ).replace( /\\s/, '_' );\n\n\t\t\t} );\n\n\t\t\tvar innerPropName = props[ 0 ];\n\t\t\tvar innerPropType1 = props[ 1 ];\n\t\t\tvar innerPropType2 = props[ 2 ];\n\t\t\tvar innerPropFlag = props[ 3 ];\n\t\t\tvar innerPropValue = props[ 4 ];\n\n\t\t\t// cast values where needed, otherwise leave as strings\n\t\t\tswitch ( innerPropType1 ) {\n\n\t\t\t\tcase 'int':\n\t\t\t\tcase 'enum':\n\t\t\t\tcase 'bool':\n\t\t\t\tcase 'ULongLong':\n\t\t\t\tcase 'double':\n\t\t\t\tcase 'Number':\n\t\t\t\tcase 'FieldOfView':\n\t\t\t\t\tinnerPropValue = parseFloat( innerPropValue );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Color':\n\t\t\t\tcase 'ColorRGB':\n\t\t\t\tcase 'Vector3D':\n\t\t\t\tcase 'Lcl_Translation':\n\t\t\t\tcase 'Lcl_Rotation':\n\t\t\t\tcase 'Lcl_Scaling':\n\t\t\t\t\tinnerPropValue = parseNumberArray( innerPropValue );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// CAUTION: these props must append to parent's parent\n\t\t\tthis.getPrevNode()[ innerPropName ] = {\n\n\t\t\t\t'type': innerPropType1,\n\t\t\t\t'type2': innerPropType2,\n\t\t\t\t'flag': innerPropFlag,\n\t\t\t\t'value': innerPropValue\n\n\t\t\t};\n\n\t\t\tthis.setCurrentProp( this.getPrevNode(), innerPropName );\n\n\t\t},\n\n\t};\n\n\t// Parse an FBX file in Binary format\n\tfunction BinaryParser() {}\n\n\tBinaryParser.prototype = {\n\n\t\tconstructor: BinaryParser,\n\n\t\tparse: function ( buffer ) {\n\n\t\t\tvar reader = new BinaryReader( buffer );\n\t\t\treader.skip( 23 ); // skip magic 23 bytes\n\n\t\t\tvar version = reader.getUint32();\n\n\t\t\tif ( version < 6400 ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + version );\n\n\t\t\t}\n\n\t\t\tvar allNodes = new FBXTree();\n\n\t\t\twhile ( ! this.endOfContent( reader ) ) {\n\n\t\t\t\tvar node = this.parseNode( reader, version );\n\t\t\t\tif ( node !== null ) allNodes.add( node.name, node );\n\n\t\t\t}\n\n\t\t\treturn allNodes;\n\n\t\t},\n\n\t\t// Check if reader has reached the end of content.\n\t\tendOfContent: function ( reader ) {\n\n\t\t\t// footer size: 160bytes + 16-byte alignment padding\n\t\t\t// - 16bytes: magic\n\t\t\t// - padding til 16-byte alignment (at least 1byte?)\n\t\t\t//\t(seems like some exporters embed fixed 15 or 16bytes?)\n\t\t\t// - 4bytes: magic\n\t\t\t// - 4bytes: version\n\t\t\t// - 120bytes: zero\n\t\t\t// - 16bytes: magic\n\t\t\tif ( reader.size() % 16 === 0 ) {\n\n\t\t\t\treturn ( ( reader.getOffset() + 160 + 16 ) & ~ 0xf ) >= reader.size();\n\n\t\t\t} else {\n\n\t\t\t\treturn reader.getOffset() + 160 + 16 >= reader.size();\n\n\t\t\t}\n\n\t\t},\n\n\t\t// recursively parse nodes until the end of the file is reached\n\t\tparseNode: function ( reader, version ) {\n\n\t\t\tvar node = {};\n\n\t\t\t// The first three data sizes depends on version.\n\t\t\tvar endOffset = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\t\t\tvar numProperties = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\n\t\t\t( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); // the returned propertyListLen is not used\n\n\t\t\tvar nameLen = reader.getUint8();\n\t\t\tvar name = reader.getString( nameLen );\n\n\t\t\t// Regards this node as NULL-record if endOffset is zero\n\t\t\tif ( endOffset === 0 ) return null;\n\n\t\t\tvar propertyList = [];\n\n\t\t\tfor ( var i = 0; i < numProperties; i ++ ) {\n\n\t\t\t\tpropertyList.push( this.parseProperty( reader ) );\n\n\t\t\t}\n\n\t\t\t// Regards the first three elements in propertyList as id, attrName, and attrType\n\t\t\tvar id = propertyList.length > 0 ? propertyList[ 0 ] : '';\n\t\t\tvar attrName = propertyList.length > 1 ? propertyList[ 1 ] : '';\n\t\t\tvar attrType = propertyList.length > 2 ? propertyList[ 2 ] : '';\n\n\t\t\t// check if this node represents just a single property\n\t\t\t// like (name, 0) set or (name2, [0, 1, 2]) set of {name: 0, name2: [0, 1, 2]}\n\t\t\tnode.singleProperty = ( numProperties === 1 && reader.getOffset() === endOffset ) ? true : false;\n\n\t\t\twhile ( endOffset > reader.getOffset() ) {\n\n\t\t\t\tvar subNode = this.parseNode( reader, version );\n\n\t\t\t\tif ( subNode !== null ) this.parseSubNode( name, node, subNode );\n\n\t\t\t}\n\n\t\t\tnode.propertyList = propertyList; // raw property list used by parent\n\n\t\t\tif ( typeof id === 'number' ) node.id = id;\n\t\t\tif ( attrName !== '' ) node.attrName = attrName;\n\t\t\tif ( attrType !== '' ) node.attrType = attrType;\n\t\t\tif ( name !== '' ) node.name = name;\n\n\t\t\treturn node;\n\n\t\t},\n\n\t\tparseSubNode: function ( name, node, subNode ) {\n\n\t\t\t// special case: child node is single property\n\t\t\tif ( subNode.singleProperty === true ) {\n\n\t\t\t\tvar value = subNode.propertyList[ 0 ];\n\n\t\t\t\tif ( Array.isArray( value ) ) {\n\n\t\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t\t\tsubNode.a = value;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnode[ subNode.name ] = value;\n\n\t\t\t\t}\n\n\t\t\t} else if ( name === 'Connections' && subNode.name === 'C' ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tsubNode.propertyList.forEach( function ( property, i ) {\n\n\t\t\t\t\t// first Connection is FBX type (OO, OP, etc.). We'll discard these\n\t\t\t\t\tif ( i !== 0 ) array.push( property );\n\n\t\t\t\t} );\n\n\t\t\t\tif ( node.connections === undefined ) {\n\n\t\t\t\t\tnode.connections = [];\n\n\t\t\t\t}\n\n\t\t\t\tnode.connections.push( array );\n\n\t\t\t} else if ( subNode.name === 'Properties70' ) {\n\n\t\t\t\tvar keys = Object.keys( subNode );\n\n\t\t\t\tkeys.forEach( function ( key ) {\n\n\t\t\t\t\tnode[ key ] = subNode[ key ];\n\n\t\t\t\t} );\n\n\t\t\t} else if ( name === 'Properties70' && subNode.name === 'P' ) {\n\n\t\t\t\tvar innerPropName = subNode.propertyList[ 0 ];\n\t\t\t\tvar innerPropType1 = subNode.propertyList[ 1 ];\n\t\t\t\tvar innerPropType2 = subNode.propertyList[ 2 ];\n\t\t\t\tvar innerPropFlag = subNode.propertyList[ 3 ];\n\t\t\t\tvar innerPropValue;\n\n\t\t\t\tif ( innerPropName.indexOf( 'Lcl ' ) === 0 ) innerPropName = innerPropName.replace( 'Lcl ', 'Lcl_' );\n\t\t\t\tif ( innerPropType1.indexOf( 'Lcl ' ) === 0 ) innerPropType1 = innerPropType1.replace( 'Lcl ', 'Lcl_' );\n\n\t\t\t\tif ( innerPropType1 === 'Color' || innerPropType1 === 'ColorRGB' || innerPropType1 === 'Vector' || innerPropType1 === 'Vector3D' || innerPropType1.indexOf( 'Lcl_' ) === 0 ) {\n\n\t\t\t\t\tinnerPropValue = [\n\t\t\t\t\t\tsubNode.propertyList[ 4 ],\n\t\t\t\t\t\tsubNode.propertyList[ 5 ],\n\t\t\t\t\t\tsubNode.propertyList[ 6 ]\n\t\t\t\t\t];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinnerPropValue = subNode.propertyList[ 4 ];\n\n\t\t\t\t}\n\n\t\t\t\t// this will be copied to parent, see above\n\t\t\t\tnode[ innerPropName ] = {\n\n\t\t\t\t\t'type': innerPropType1,\n\t\t\t\t\t'type2': innerPropType2,\n\t\t\t\t\t'flag': innerPropFlag,\n\t\t\t\t\t'value': innerPropValue\n\n\t\t\t\t};\n\n\t\t\t} else if ( node[ subNode.name ] === undefined ) {\n\n\t\t\t\tif ( typeof subNode.id === 'number' ) {\n\n\t\t\t\t\tnode[ subNode.name ] = {};\n\t\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( subNode.name === 'PoseNode' ) {\n\n\t\t\t\t\tif ( ! Array.isArray( node[ subNode.name ] ) ) {\n\n\t\t\t\t\t\tnode[ subNode.name ] = [ node[ subNode.name ] ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnode[ subNode.name ].push( subNode );\n\n\t\t\t\t} else if ( node[ subNode.name ][ subNode.id ] === undefined ) {\n\n\t\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseProperty: function ( reader ) {\n\n\t\t\tvar type = reader.getString( 1 );\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'C':\n\t\t\t\t\treturn reader.getBoolean();\n\n\t\t\t\tcase 'D':\n\t\t\t\t\treturn reader.getFloat64();\n\n\t\t\t\tcase 'F':\n\t\t\t\t\treturn reader.getFloat32();\n\n\t\t\t\tcase 'I':\n\t\t\t\t\treturn reader.getInt32();\n\n\t\t\t\tcase 'L':\n\t\t\t\t\treturn reader.getInt64();\n\n\t\t\t\tcase 'R':\n\t\t\t\t\tvar length = reader.getUint32();\n\t\t\t\t\treturn reader.getArrayBuffer( length );\n\n\t\t\t\tcase 'S':\n\t\t\t\t\tvar length = reader.getUint32();\n\t\t\t\t\treturn reader.getString( length );\n\n\t\t\t\tcase 'Y':\n\t\t\t\t\treturn reader.getInt16();\n\n\t\t\t\tcase 'b':\n\t\t\t\tcase 'c':\n\t\t\t\tcase 'd':\n\t\t\t\tcase 'f':\n\t\t\t\tcase 'i':\n\t\t\t\tcase 'l':\n\n\t\t\t\t\tvar arrayLength = reader.getUint32();\n\t\t\t\t\tvar encoding = reader.getUint32(); // 0: non-compressed, 1: compressed\n\t\t\t\t\tvar compressedLength = reader.getUint32();\n\n\t\t\t\t\tif ( encoding === 0 ) {\n\n\t\t\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\t\treturn reader.getBooleanArray( arrayLength );\n\n\t\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\t\treturn reader.getFloat64Array( arrayLength );\n\n\t\t\t\t\t\t\tcase 'f':\n\t\t\t\t\t\t\t\treturn reader.getFloat32Array( arrayLength );\n\n\t\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\t\treturn reader.getInt32Array( arrayLength );\n\n\t\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\t\treturn reader.getInt64Array( arrayLength );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof Inflate === 'undefined' ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.FBXLoader: External library Inflate.min.js required, obtain or import from https://github.com/imaya/zlib.js' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar inflate = new Inflate( new Uint8Array( reader.getArrayBuffer( compressedLength ) ) ); // eslint-disable-line no-undef\n\t\t\t\t\tvar reader2 = new BinaryReader( inflate.decompress().buffer );\n\n\t\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\treturn reader2.getBooleanArray( arrayLength );\n\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\treturn reader2.getFloat64Array( arrayLength );\n\n\t\t\t\t\t\tcase 'f':\n\t\t\t\t\t\t\treturn reader2.getFloat32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\treturn reader2.getInt32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\treturn reader2.getInt64Array( arrayLength );\n\n\t\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown property type ' + type );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tfunction BinaryReader( buffer, littleEndian ) {\n\n\t\tthis.dv = new DataView( buffer );\n\t\tthis.offset = 0;\n\t\tthis.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;\n\n\t}\n\n\tBinaryReader.prototype = {\n\n\t\tconstructor: BinaryReader,\n\n\t\tgetOffset: function () {\n\n\t\t\treturn this.offset;\n\n\t\t},\n\n\t\tsize: function () {\n\n\t\t\treturn this.dv.buffer.byteLength;\n\n\t\t},\n\n\t\tskip: function ( length ) {\n\n\t\t\tthis.offset += length;\n\n\t\t},\n\n\t\t// seems like true/false representation depends on exporter.\n\t\t// true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)\n\t\t// then sees LSB.\n\t\tgetBoolean: function () {\n\n\t\t\treturn ( this.getUint8() & 1 ) === 1;\n\n\t\t},\n\n\t\tgetBooleanArray: function ( size ) {\n\n\t\t\tvar a = [];\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\t\ta.push( this.getBoolean() );\n\n\t\t\t}\n\n\t\t\treturn a;\n\n\t\t},\n\n\t\tgetUint8: function () {\n\n\t\t\tvar value = this.dv.getUint8( this.offset );\n\t\t\tthis.offset += 1;\n\t\t\treturn value;\n\n\t\t},\n\n\t\tgetInt16: function () {\n\n\t\t\tvar value = this.dv.getInt16( this.offset, this.littleEndian );\n\t\t\tthis.offset += 2;\n\t\t\treturn value;\n\n\t\t},\n\n\t\tgetInt32: function () {\n\n\t\t\tvar value = this.dv.getInt32( this.offset, this.littleEndian );\n\t\t\tthis.offset += 4;\n\t\t\treturn value;\n\n\t\t},\n\n\t\tgetInt32Array: function ( size ) {\n\n\t\t\tvar a = [];\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\t\ta.push( this.getInt32() );\n\n\t\t\t}\n\n\t\t\treturn a;\n\n\t\t},\n\n\t\tgetUint32: function () {\n\n\t\t\tvar value = this.dv.getUint32( this.offset, this.littleEndian );\n\t\t\tthis.offset += 4;\n\t\t\treturn value;\n\n\t\t},\n\n\t\t// JavaScript doesn't support 64-bit integer so calculate this here\n\t\t// 1 << 32 will return 1 so using multiply operation instead here.\n\t\t// There's a possibility that this method returns wrong value if the value\n\t\t// is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n\t\t// TODO: safely handle 64-bit integer\n\t\tgetInt64: function () {\n\n\t\t\tvar low, high;\n\n\t\t\tif ( this.littleEndian ) {\n\n\t\t\t\tlow = this.getUint32();\n\t\t\t\thigh = this.getUint32();\n\n\t\t\t} else {\n\n\t\t\t\thigh = this.getUint32();\n\t\t\t\tlow = this.getUint32();\n\n\t\t\t}\n\n\t\t\t// calculate negative value\n\t\t\tif ( high & 0x80000000 ) {\n\n\t\t\t\thigh = ~ high & 0xFFFFFFFF;\n\t\t\t\tlow = ~ low & 0xFFFFFFFF;\n\n\t\t\t\tif ( low === 0xFFFFFFFF ) high = ( high + 1 ) & 0xFFFFFFFF;\n\n\t\t\t\tlow = ( low + 1 ) & 0xFFFFFFFF;\n\n\t\t\t\treturn - ( high * 0x100000000 + low );\n\n\t\t\t}\n\n\t\t\treturn high * 0x100000000 + low;\n\n\t\t},\n\n\t\tgetInt64Array: function ( size ) {\n\n\t\t\tvar a = [];\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\t\ta.push( this.getInt64() );\n\n\t\t\t}\n\n\t\t\treturn a;\n\n\t\t},\n\n\t\t// Note: see getInt64() comment\n\t\tgetUint64: function () {\n\n\t\t\tvar low, high;\n\n\t\t\tif ( this.littleEndian ) {\n\n\t\t\t\tlow = this.getUint32();\n\t\t\t\thigh = this.getUint32();\n\n\t\t\t} else {\n\n\t\t\t\thigh = this.getUint32();\n\t\t\t\tlow = this.getUint32();\n\n\t\t\t}\n\n\t\t\treturn high * 0x100000000 + low;\n\n\t\t},\n\n\t\tgetFloat32: function () {\n\n\t\t\tvar value = this.dv.getFloat32( this.offset, this.littleEndian );\n\t\t\tthis.offset += 4;\n\t\t\treturn value;\n\n\t\t},\n\n\t\tgetFloat32Array: function ( size ) {\n\n\t\t\tvar a = [];\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\t\ta.push( this.getFloat32() );\n\n\t\t\t}\n\n\t\t\treturn a;\n\n\t\t},\n\n\t\tgetFloat64: function () {\n\n\t\t\tvar value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\t\tthis.offset += 8;\n\t\t\treturn value;\n\n\t\t},\n\n\t\tgetFloat64Array: function ( size ) {\n\n\t\t\tvar a = [];\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\t\ta.push( this.getFloat64() );\n\n\t\t\t}\n\n\t\t\treturn a;\n\n\t\t},\n\n\t\tgetArrayBuffer: function ( size ) {\n\n\t\t\tvar value = this.dv.buffer.slice( this.offset, this.offset + size );\n\t\t\tthis.offset += size;\n\t\t\treturn value;\n\n\t\t},\n\n\t\tgetString: function ( size ) {\n\n\t\t\t// note: safari 9 doesn't support Uint8Array.indexOf; create intermediate array instead\n\t\t\tvar a = [];\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\t\ta[ i ] = this.getUint8();\n\n\t\t\t}\n\n\t\t\tvar nullByte = a.indexOf( 0 );\n\t\t\tif ( nullByte >= 0 ) a = a.slice( 0, nullByte );\n\n\t\t\treturn LoaderUtils.decodeText( new Uint8Array( a ) );\n\n\t\t}\n\n\t};\n\n\t// FBXTree holds a representation of the FBX data, returned by the TextParser ( FBX ASCII format)\n\t// and BinaryParser( FBX Binary format)\n\tfunction FBXTree() {}\n\n\tFBXTree.prototype = {\n\n\t\tconstructor: FBXTree,\n\n\t\tadd: function ( key, val ) {\n\n\t\t\tthis[ key ] = val;\n\n\t\t},\n\n\t};\n\n\t// ************** UTILITY FUNCTIONS **************\n\n\tfunction isFbxFormatBinary( buffer ) {\n\n\t\tvar CORRECT = 'Kaydara FBX Binary  \\0';\n\n\t\treturn buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString( buffer, 0, CORRECT.length );\n\n\t}\n\n\tfunction isFbxFormatASCII( text ) {\n\n\t\tvar CORRECT = [ 'K', 'a', 'y', 'd', 'a', 'r', 'a', '\\\\', 'F', 'B', 'X', '\\\\', 'B', 'i', 'n', 'a', 'r', 'y', '\\\\', '\\\\' ];\n\n\t\tvar cursor = 0;\n\n\t\tfunction read( offset ) {\n\n\t\t\tvar result = text[ offset - 1 ];\n\t\t\ttext = text.slice( cursor + offset );\n\t\t\tcursor ++;\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfor ( var i = 0; i < CORRECT.length; ++ i ) {\n\n\t\t\tvar num = read( 1 );\n\t\t\tif ( num === CORRECT[ i ] ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getFbxVersion( text ) {\n\n\t\tvar versionRegExp = /FBXVersion: (\\d+)/;\n\t\tvar match = text.match( versionRegExp );\n\n\t\tif ( match ) {\n\n\t\t\tvar version = parseInt( match[ 1 ] );\n\t\t\treturn version;\n\n\t\t}\n\n\t\tthrow new Error( 'THREE.FBXLoader: Cannot find the version number for the file given.' );\n\n\t}\n\n\t// Converts FBX ticks into real time seconds.\n\tfunction convertFBXTimeToSeconds( time ) {\n\n\t\treturn time / 46186158000;\n\n\t}\n\n\tvar dataArray = [];\n\n\t// extracts the data from the correct position in the FBX array based on indexing type\n\tfunction getData( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {\n\n\t\tvar index;\n\n\t\tswitch ( infoObject.mappingType ) {\n\n\t\t\tcase 'ByPolygonVertex' :\n\t\t\t\tindex = polygonVertexIndex;\n\t\t\t\tbreak;\n\t\t\tcase 'ByPolygon' :\n\t\t\t\tindex = polygonIndex;\n\t\t\t\tbreak;\n\t\t\tcase 'ByVertice' :\n\t\t\t\tindex = vertexIndex;\n\t\t\t\tbreak;\n\t\t\tcase 'AllSame' :\n\t\t\t\tindex = infoObject.indices[ 0 ];\n\t\t\t\tbreak;\n\t\t\tdefault :\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: unknown attribute mapping type ' + infoObject.mappingType );\n\n\t\t}\n\n\t\tif ( infoObject.referenceType === 'IndexToDirect' ) index = infoObject.indices[ index ];\n\n\t\tvar from = index * infoObject.dataSize;\n\t\tvar to = from + infoObject.dataSize;\n\n\t\treturn slice( dataArray, infoObject.buffer, from, to );\n\n\t}\n\n\tvar tempEuler = new Euler();\n\tvar tempVec = new Vector3();\n\n\t// generate transformation from FBX transform data\n\t// ref: https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm\n\t// ref: http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/index.html?url=cpp_ref/_transformations_2main_8cxx-example.html,topicNumber=cpp_ref__transformations_2main_8cxx_example_htmlfc10a1e1-b18d-4e72-9dc0-70d0f1959f5e\n\tfunction generateTransform( transformData ) {\n\n\t\tvar lTranslationM = new Matrix4();\n\t\tvar lPreRotationM = new Matrix4();\n\t\tvar lRotationM = new Matrix4();\n\t\tvar lPostRotationM = new Matrix4();\n\n\t\tvar lScalingM = new Matrix4();\n\t\tvar lScalingPivotM = new Matrix4();\n\t\tvar lScalingOffsetM = new Matrix4();\n\t\tvar lRotationOffsetM = new Matrix4();\n\t\tvar lRotationPivotM = new Matrix4();\n\n\t\tvar lParentGX = new Matrix4();\n\t\tvar lGlobalT = new Matrix4();\n\n\t\tvar inheritType = ( transformData.inheritType ) ? transformData.inheritType : 0;\n\n\t\tif ( transformData.translation ) lTranslationM.setPosition( tempVec.fromArray( transformData.translation ) );\n\n\t\tif ( transformData.preRotation ) {\n\n\t\t\tvar array = transformData.preRotation.map( MathUtils.degToRad );\n\t\t\tarray.push( transformData.eulerOrder );\n\t\t\tlPreRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t\t}\n\n\t\tif ( transformData.rotation ) {\n\n\t\t\tvar array = transformData.rotation.map( MathUtils.degToRad );\n\t\t\tarray.push( transformData.eulerOrder );\n\t\t\tlRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t\t}\n\n\t\tif ( transformData.postRotation ) {\n\n\t\t\tvar array = transformData.postRotation.map( MathUtils.degToRad );\n\t\t\tarray.push( transformData.eulerOrder );\n\t\t\tlPostRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t\t}\n\n\t\tif ( transformData.scale ) lScalingM.scale( tempVec.fromArray( transformData.scale ) );\n\n\t\t// Pivots and offsets\n\t\tif ( transformData.scalingOffset ) lScalingOffsetM.setPosition( tempVec.fromArray( transformData.scalingOffset ) );\n\t\tif ( transformData.scalingPivot ) lScalingPivotM.setPosition( tempVec.fromArray( transformData.scalingPivot ) );\n\t\tif ( transformData.rotationOffset ) lRotationOffsetM.setPosition( tempVec.fromArray( transformData.rotationOffset ) );\n\t\tif ( transformData.rotationPivot ) lRotationPivotM.setPosition( tempVec.fromArray( transformData.rotationPivot ) );\n\n\t\t// parent transform\n\t\tif ( transformData.parentMatrixWorld ) lParentGX = transformData.parentMatrixWorld;\n\n\t\t// Global Rotation\n\t\tvar lLRM = lPreRotationM.multiply( lRotationM ).multiply( lPostRotationM );\n\t\tvar lParentGRM = new Matrix4();\n\t\tlParentGX.extractRotation( lParentGRM );\n\n\t\t// Global Shear*Scaling\n\t\tvar lParentTM = new Matrix4();\n\t\tlParentTM.copyPosition( lParentGX );\n\n\t\tvar lParentGSM = new Matrix4();\n\t\tlParentGSM.copy( lParentGRM ).invert().multiply( lParentGX );\n\n\t\tvar lGlobalRS = new Matrix4();\n\n\t\tif ( inheritType === 0 ) {\n\n\t\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lScalingM );\n\n\t\t} else if ( inheritType === 1 ) {\n\n\t\t\tlGlobalRS.copy( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lScalingM );\n\n\t\t} else {\n\n\t\t\tvar lParentLSM_inv = new Matrix4();\n\t\t\tlParentLSM_inv.copy( lScalingM ).invert();\n\t\t\tvar lParentGSM_noLocal = new Matrix4().multiply( lParentGSM ).multiply( lParentLSM_inv );\n\n\t\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lScalingM );\n\n\t\t}\n\n\t\tvar lRotationPivotM_inv = new Matrix4();\n\t\tlRotationPivotM_inv.copy( lRotationPivotM ).invert();\n\t\tvar lScalingPivotM_inv = new Matrix4();\n\t\tlScalingPivotM_inv.copy( lScalingPivotM ).invert();\n\t\t// Calculate the local transform matrix\n\t\tvar lTransform = new Matrix4();\n\t\tlTransform.copy( lTranslationM ).multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv );\n\n\t\tvar lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform );\n\n\t\tvar lGlobalTranslation = new Matrix4().copy( lParentGX ).multiply( lLocalTWithAllPivotAndOffsetInfo );\n\t\tlGlobalT.copyPosition( lGlobalTranslation );\n\n\t\tlTransform = new Matrix4().multiply( lGlobalT ).multiply( lGlobalRS );\n\n\t\treturn lTransform;\n\n\t}\n\n\t// Returns the three.js intrinsic Euler order corresponding to FBX extrinsic Euler order\n\t// ref: http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_euler_html\n\tfunction getEulerOrder( order ) {\n\n\t\torder = order || 0;\n\n\t\tvar enums = [\n\t\t\t'ZYX', // -> XYZ extrinsic\n\t\t\t'YZX', // -> XZY extrinsic\n\t\t\t'XZY', // -> YZX extrinsic\n\t\t\t'ZXY', // -> YXZ extrinsic\n\t\t\t'YXZ', // -> ZXY extrinsic\n\t\t\t'XYZ', // -> ZYX extrinsic\n\t\t\t//'SphericXYZ', // not possible to support\n\t\t];\n\n\t\tif ( order === 6 ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.' );\n\t\t\treturn enums[ 0 ];\n\n\t\t}\n\n\t\treturn enums[ order ];\n\n\t}\n\n\t// Parses comma separated list of numbers and returns them an array.\n\t// Used internally by the TextParser\n\tfunction parseNumberArray( value ) {\n\n\t\tvar array = value.split( ',' ).map( function ( val ) {\n\n\t\t\treturn parseFloat( val );\n\n\t\t} );\n\n\t\treturn array;\n\n\t}\n\n\tfunction convertArrayBufferToString( buffer, from, to ) {\n\n\t\tif ( from === undefined ) from = 0;\n\t\tif ( to === undefined ) to = buffer.byteLength;\n\n\t\treturn LoaderUtils.decodeText( new Uint8Array( buffer, from, to ) );\n\n\t}\n\n\tfunction append( a, b ) {\n\n\t\tfor ( var i = 0, j = a.length, l = b.length; i < l; i ++, j ++ ) {\n\n\t\t\ta[ j ] = b[ i ];\n\n\t\t}\n\n\t}\n\n\tfunction slice( a, b, from, to ) {\n\n\t\tfor ( var i = from, j = 0; i < to; i ++, j ++ ) {\n\n\t\t\ta[ j ] = b[ i ];\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\t// inject array a2 into array a1 at index\n\tfunction inject( a1, index, a2 ) {\n\n\t\treturn a1.slice( 0, index ).concat( a2 ).concat( a1.slice( index ) );\n\n\t}\n\n\treturn FBXLoader;\n\n} )();\n\nexport { FBXLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/GCodeLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader\n} from '../../../build/three.module.js';\n\n/**\n * GCodeLoader is used to load gcode files usually used for 3D printing or CNC applications.\n *\n * Gcode files are composed by commands used by machines to create objects.\n *\n * @class GCodeLoader\n * @param {Manager} manager Loading manager.\n */\n\nvar GCodeLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.splitLayer = false;\n\n};\n\nGCodeLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: GCodeLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\tvar state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false };\n\t\tvar layers = [];\n\n\t\tvar currentLayer = undefined;\n\n\t\tvar pathMaterial = new LineBasicMaterial( { color: 0xFF0000 } );\n\t\tpathMaterial.name = 'path';\n\n\t\tvar extrudingMaterial = new LineBasicMaterial( { color: 0x00FF00 } );\n\t\textrudingMaterial.name = 'extruded';\n\n\t\tfunction newLayer( line ) {\n\n\t\t\tcurrentLayer = { vertex: [], pathVertex: [], z: line.z };\n\t\t\tlayers.push( currentLayer );\n\n\t\t}\n\n\t\t//Create lie segment between p1 and p2\n\t\tfunction addSegment( p1, p2 ) {\n\n\t\t\tif ( currentLayer === undefined ) {\n\n\t\t\t\tnewLayer( p1 );\n\n\t\t\t}\n\n\t\t\tif ( line.extruding ) {\n\n\t\t\t\tcurrentLayer.vertex.push( p1.x, p1.y, p1.z );\n\t\t\t\tcurrentLayer.vertex.push( p2.x, p2.y, p2.z );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentLayer.pathVertex.push( p1.x, p1.y, p1.z );\n\t\t\t\tcurrentLayer.pathVertex.push( p2.x, p2.y, p2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction delta( v1, v2 ) {\n\n\t\t\treturn state.relative ? v2 : v2 - v1;\n\n\t\t}\n\n\t\tfunction absolute( v1, v2 ) {\n\n\t\t\treturn state.relative ? v1 + v2 : v2;\n\n\t\t}\n\n\t\tvar lines = data.replace( /;.+/g, '' ).split( '\\n' );\n\n\t\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\t\tvar tokens = lines[ i ].split( ' ' );\n\t\t\tvar cmd = tokens[ 0 ].toUpperCase();\n\n\t\t\t//Argumments\n\t\t\tvar args = {};\n\t\t\ttokens.splice( 1 ).forEach( function ( token ) {\n\n\t\t\t\tif ( token[ 0 ] !== undefined ) {\n\n\t\t\t\t\tvar key = token[ 0 ].toLowerCase();\n\t\t\t\t\tvar value = parseFloat( token.substring( 1 ) );\n\t\t\t\t\targs[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t//Process commands\n\t\t\t//G0/G1 – Linear Movement\n\t\t\tif ( cmd === 'G0' || cmd === 'G1' ) {\n\n\t\t\t\tvar line = {\n\t\t\t\t\tx: args.x !== undefined ? absolute( state.x, args.x ) : state.x,\n\t\t\t\t\ty: args.y !== undefined ? absolute( state.y, args.y ) : state.y,\n\t\t\t\t\tz: args.z !== undefined ? absolute( state.z, args.z ) : state.z,\n\t\t\t\t\te: args.e !== undefined ? absolute( state.e, args.e ) : state.e,\n\t\t\t\t\tf: args.f !== undefined ? absolute( state.f, args.f ) : state.f,\n\t\t\t\t};\n\n\t\t\t\t//Layer change detection is or made by watching Z, it's made by watching when we extrude at a new Z position\n\t\t\t\tif ( delta( state.e, line.e ) > 0 ) {\n\n\t\t\t\t\tline.extruding = delta( state.e, line.e ) > 0;\n\n\t\t\t\t\tif ( currentLayer == undefined || line.z != currentLayer.z ) {\n\n\t\t\t\t\t\tnewLayer( line );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\taddSegment( state, line );\n\t\t\t\tstate = line;\n\n\t\t\t} else if ( cmd === 'G2' || cmd === 'G3' ) {\n\n\t\t\t\t//G2/G3 - Arc Movement ( G2 clock wise and G3 counter clock wise )\n\t\t\t\t//console.warn( 'THREE.GCodeLoader: Arc command not supported' );\n\n\t\t\t} else if ( cmd === 'G90' ) {\n\n\t\t\t\t//G90: Set to Absolute Positioning\n\t\t\t\tstate.relative = false;\n\n\t\t\t} else if ( cmd === 'G91' ) {\n\n\t\t\t\t//G91: Set to state.relative Positioning\n\t\t\t\tstate.relative = true;\n\n\t\t\t} else if ( cmd === 'G92' ) {\n\n\t\t\t\t//G92: Set Position\n\t\t\t\tvar line = state;\n\t\t\t\tline.x = args.x !== undefined ? args.x : line.x;\n\t\t\t\tline.y = args.y !== undefined ? args.y : line.y;\n\t\t\t\tline.z = args.z !== undefined ? args.z : line.z;\n\t\t\t\tline.e = args.e !== undefined ? args.e : line.e;\n\t\t\t\tstate = line;\n\n\t\t\t} else {\n\n\t\t\t\t//console.warn( 'THREE.GCodeLoader: Command not supported:' + cmd );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addObject( vertex, extruding ) {\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertex, 3 ) );\n\n\t\t\tvar segments = new LineSegments( geometry, extruding ? extrudingMaterial : pathMaterial );\n\t\t\tsegments.name = 'layer' + i;\n\t\t\tobject.add( segments );\n\n\t\t}\n\n\t\tvar object = new Group();\n\t\tobject.name = 'gcode';\n\n\t\tif ( this.splitLayer ) {\n\n\t\t\tfor ( var i = 0; i < layers.length; i ++ ) {\n\n\t\t\t\tvar layer = layers[ i ];\n\t\t\t\taddObject( layer.vertex, true );\n\t\t\t\taddObject( layer.pathVertex, false );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar vertex = [], pathVertex = [];\n\n\t\t\tfor ( var i = 0; i < layers.length; i ++ ) {\n\n\t\t\t\tvar layer = layers[ i ];\n\t\t\t\tvar layerVertex = layer.vertex;\n\t\t\t\tvar layerPathVertex = layer.pathVertex;\n\n\t\t\t\tfor ( var j = 0; j < layerVertex.length; j ++ ) {\n\n\t\t\t\t\tvertex.push( layerVertex[ j ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0; j < layerPathVertex.length; j ++ ) {\n\n\t\t\t\t\tpathVertex.push( layerPathVertex[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\taddObject( vertex, true );\n\t\t\taddObject( pathVertex, false );\n\n\t\t}\n\n\t\tobject.quaternion.setFromEuler( new Euler( - Math.PI / 2, 0, 0 ) );\n\n\t\treturn object;\n\n\t}\n\n} );\n\nexport { GCodeLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/GLTFLoader.js",
    "content": "import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tCanvasTexture,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternionKeyframeTrack,\n\tRGBFormat,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTangentSpaceNormalMap,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tsRGBEncoding\n} from '../build/three.module.js';\n\nvar GLTFLoader = ( function () {\n\n\tfunction GLTFLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ddsLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t}\n\n\tGLTFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: GLTFLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar resourcePath;\n\n\t\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\t\tresourcePath = this.resourcePath;\n\n\t\t\t} else if ( this.path !== '' ) {\n\n\t\t\t\tresourcePath = this.path;\n\n\t\t\t} else {\n\n\t\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t\t}\n\n\t\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tvar _onError = function ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t};\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\t\tloader.load( url, function ( data ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t}, _onError );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t_onError( e );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, _onError );\n\n\t\t},\n\n\t\tsetDRACOLoader: function ( dracoLoader ) {\n\n\t\t\tthis.dracoLoader = dracoLoader;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetDDSLoader: function ( ddsLoader ) {\n\n\t\t\tthis.ddsLoader = ddsLoader;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetKTX2Loader: function ( ktx2Loader ) {\n\n\t\t\tthis.ktx2Loader = ktx2Loader;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetMeshoptDecoder: function ( meshoptDecoder ) {\n\n\t\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tregister: function ( callback ) {\n\n\t\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tunregister: function ( callback ) {\n\n\t\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tparse: function ( data, path, onLoad, onError ) {\n\n\t\t\tvar content;\n\t\t\tvar extensions = {};\n\t\t\tvar plugins = {};\n\n\t\t\tif ( typeof data === 'string' ) {\n\n\t\t\t\tcontent = data;\n\n\t\t\t} else {\n\n\t\t\t\tvar magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );\n\n\t\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcontent = LoaderUtils.decodeText( new Uint8Array( data ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar json = JSON.parse( content );\n\n\t\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar parser = new GLTFParser( json, {\n\n\t\t\t\tpath: path || this.resourcePath || '',\n\t\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\t\tmanager: this.manager,\n\t\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t\t} );\n\n\t\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\t\tfor ( var i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\t\tvar plugin = this.pluginCallbacks[ i ]( parser );\n\t\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t\t// Remove this workaround if we move all the existing\n\t\t\t\t// extension handlers to plugin system\n\t\t\t\textensions[ plugin.name ] = true;\n\n\t\t\t}\n\n\t\t\tif ( json.extensionsUsed ) {\n\n\t\t\t\tfor ( var i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\t\tvar extensionName = json.extensionsUsed[ i ];\n\t\t\t\t\tvar extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.MSFT_TEXTURE_DDS:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureDDSExtension( this.ddsLoader );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tparser.setExtensions( extensions );\n\t\t\tparser.setPlugins( plugins );\n\t\t\tparser.parse( onLoad, onError );\n\n\t\t}\n\n\t} );\n\n\t/* GLTFREGISTRY */\n\n\tfunction GLTFRegistry() {\n\n\t\tvar objects = {};\n\n\t\treturn\t{\n\n\t\t\tget: function ( key ) {\n\n\t\t\t\treturn objects[ key ];\n\n\t\t\t},\n\n\t\t\tadd: function ( key, object ) {\n\n\t\t\t\tobjects[ key ] = object;\n\n\t\t\t},\n\n\t\t\tremove: function ( key ) {\n\n\t\t\t\tdelete objects[ key ];\n\n\t\t\t},\n\n\t\t\tremoveAll: function () {\n\n\t\t\t\tobjects = {};\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/*********************************/\n\t/********** EXTENSIONS ***********/\n\t/*********************************/\n\n\tvar EXTENSIONS = {\n\t\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\t\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\t\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\t\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',\n\t\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\t\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\t\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\t\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\t\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\t\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\t\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\t\tMSFT_TEXTURE_DDS: 'MSFT_texture_dds'\n\t};\n\n\t/**\n\t * DDS Texture Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds\n\t *\n\t */\n\tfunction GLTFTextureDDSExtension( ddsLoader ) {\n\n\t\tif ( ! ddsLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.MSFT_TEXTURE_DDS;\n\t\tthis.ddsLoader = ddsLoader;\n\n\t}\n\n\t/**\n\t * Punctual Lights Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n\t */\n\tfunction GLTFLightsExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\tGLTFLightsExtension.prototype._markDefs = function () {\n\n\t\tvar parser = this.parser;\n\t\tvar nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tGLTFLightsExtension.prototype._loadLight = function ( lightIndex ) {\n\n\t\tvar parser = this.parser;\n\t\tvar cacheKey = 'light:' + lightIndex;\n\t\tvar dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tvar json = parser.json;\n\t\tvar extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tvar lightDefs = extensions.lights || [];\n\t\tvar lightDef = lightDefs[ lightIndex ];\n\t\tvar lightNode;\n\n\t\tvar color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.fromArray( lightDef.color );\n\n\t\tvar range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t};\n\n\tGLTFLightsExtension.prototype.createNodeAttachment = function ( nodeIndex ) {\n\n\t\tvar self = this;\n\t\tvar parser = this.parser;\n\t\tvar json = parser.json;\n\t\tvar nodeDef = json.nodes[ nodeIndex ];\n\t\tvar lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tvar lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Unlit Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n\t */\n\tfunction GLTFMaterialsUnlitExtension() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tGLTFMaterialsUnlitExtension.prototype.getMaterialType = function () {\n\n\t\treturn MeshBasicMaterial;\n\n\t};\n\n\tGLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, materialDef, parser ) {\n\n\t\tvar pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/**\n\t * Clearcoat Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n\t */\n\tfunction GLTFMaterialsClearcoatExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tGLTFMaterialsClearcoatExtension.prototype.getMaterialType = function ( materialIndex ) {\n\n\t\tvar parser = this.parser;\n\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t};\n\n\tGLTFMaterialsClearcoatExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) {\n\n\t\tvar parser = this.parser;\n\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tvar pending = [];\n\n\t\tvar extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tvar scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/**\n\t * Transmission Materials Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n\t * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n\t */\n\tfunction GLTFMaterialsTransmissionExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tGLTFMaterialsTransmissionExtension.prototype.getMaterialType = function ( materialIndex ) {\n\n\t\tvar parser = this.parser;\n\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t};\n\n\tGLTFMaterialsTransmissionExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) {\n\n\t\tvar parser = this.parser;\n\t\tvar materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tvar pending = [];\n\n\t\tvar extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/**\n\t * BasisU Texture Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n\t */\n\tfunction GLTFTextureBasisUExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tGLTFTextureBasisUExtension.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar parser = this.parser;\n\t\tvar json = parser.json;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar extension = textureDef.extensions[ this.name ];\n\t\tvar source = json.images[ extension.source ];\n\t\tvar loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, source, loader );\n\n\t};\n\n\t/**\n\t * WebP Texture Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n\t */\n\tfunction GLTFTextureWebPExtension( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tGLTFTextureWebPExtension.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar name = this.name;\n\t\tvar parser = this.parser;\n\t\tvar json = parser.json;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tvar extension = textureDef.extensions[ name ];\n\t\tvar source = json.images[ extension.source ];\n\t\tvar loader = source.uri ? parser.options.manager.getHandler( source.uri ) : parser.textureLoader;\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t};\n\n\tGLTFTextureWebPExtension.prototype.detectSupport = function () {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tvar image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t};\n\n\t/**\n\t* meshopt BufferView Compression Extension\n\t*\n\t* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n\t*/\n\tfunction GLTFMeshoptCompression( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tGLTFMeshoptCompression.prototype.loadBufferView = function ( index ) {\n\n\t\tvar json = this.parser.json;\n\t\tvar bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tvar extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tvar buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tvar decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn Promise.all( [ buffer, decoder.ready ] ).then( function ( res ) {\n\n\t\t\t\tvar byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tvar byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tvar count = extensionDef.count;\n\t\t\t\tvar stride = extensionDef.byteStride;\n\n\t\t\t\tvar result = new ArrayBuffer( count * stride );\n\t\t\t\tvar source = new Uint8Array( res[ 0 ], byteOffset, byteLength );\n\n\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\treturn result;\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t};\n\n\t/* BINARY EXTENSION */\n\tvar BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\n\tvar BINARY_EXTENSION_HEADER_LENGTH = 12;\n\tvar BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\n\tfunction GLTFBinaryExtension( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tvar headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\n\t\tthis.header = {\n\t\t\tmagic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tvar chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tvar chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkView.byteLength ) {\n\n\t\t\tvar chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tvar chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tvar contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = LoaderUtils.decodeText( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tvar byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * DRACO Mesh Compression Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n\t */\n\tfunction GLTFDracoMeshCompressionExtension( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tGLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) {\n\n\t\tvar json = this.json;\n\t\tvar dracoLoader = this.dracoLoader;\n\t\tvar bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tvar gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tvar threeAttributeMap = {};\n\t\tvar attributeNormalizedMap = {};\n\t\tvar attributeTypeMap = {};\n\n\t\tfor ( var attributeName in gltfAttributeMap ) {\n\n\t\t\tvar threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( attributeName in primitive.attributes ) {\n\n\t\t\tvar threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tvar accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tvar componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( var attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tvar attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tvar normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Texture Transform Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n\t */\n\tfunction GLTFTextureTransformExtension() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\tGLTFTextureTransformExtension.prototype.extendTexture = function ( texture, transform ) {\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV sets in \"' + this.name + '\" extension not yet supported.' );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t};\n\n\t/**\n\t * Specular-Glossiness Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness\n\t */\n\n\t/**\n\t * A sub class of StandardMaterial with some of the functionality\n\t * changed via the `onBeforeCompile` callback\n\t * @pailhead\n\t */\n\n\tfunction GLTFMeshStandardSGMaterial( params ) {\n\n\t\tMeshStandardMaterial.call( this );\n\n\t\tthis.isGLTFSpecularGlossinessMaterial = true;\n\n\t\t//various chunks that need replacing\n\t\tvar specularMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tuniform sampler2D specularMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tvar glossinessMapParsFragmentChunk = [\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tuniform sampler2D glossinessMap;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tvar specularMapFragmentChunk = [\n\t\t\t'vec3 specularFactor = specular;',\n\t\t\t'#ifdef USE_SPECULARMAP',\n\t\t\t'\tvec4 texelSpecular = texture2D( specularMap, vUv );',\n\t\t\t'\ttexelSpecular = sRGBToLinear( texelSpecular );',\n\t\t\t'\t// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tspecularFactor *= texelSpecular.rgb;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tvar glossinessMapFragmentChunk = [\n\t\t\t'float glossinessFactor = glossiness;',\n\t\t\t'#ifdef USE_GLOSSINESSMAP',\n\t\t\t'\tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',\n\t\t\t'\t// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',\n\t\t\t'\tglossinessFactor *= texelGlossiness.a;',\n\t\t\t'#endif'\n\t\t].join( '\\n' );\n\n\t\tvar lightPhysicalFragmentChunk = [\n\t\t\t'PhysicalMaterial material;',\n\t\t\t'material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );',\n\t\t\t'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );',\n\t\t\t'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );',\n\t\t\t'material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.',\n\t\t\t'material.specularRoughness += geometryRoughness;',\n\t\t\t'material.specularRoughness = min( material.specularRoughness, 1.0 );',\n\t\t\t'material.specularColor = specularFactor;',\n\t\t].join( '\\n' );\n\n\t\tvar uniforms = {\n\t\t\tspecular: { value: new Color().setHex( 0xffffff ) },\n\t\t\tglossiness: { value: 1 },\n\t\t\tspecularMap: { value: null },\n\t\t\tglossinessMap: { value: null }\n\t\t};\n\n\t\tthis._extraUniforms = uniforms;\n\n\t\tthis.onBeforeCompile = function ( shader ) {\n\n\t\t\tfor ( var uniformName in uniforms ) {\n\n\t\t\t\tshader.uniforms[ uniformName ] = uniforms[ uniformName ];\n\n\t\t\t}\n\n\t\t\tshader.fragmentShader = shader.fragmentShader\n\t\t\t\t.replace( 'uniform float roughness;', 'uniform vec3 specular;' )\n\t\t\t\t.replace( 'uniform float metalness;', 'uniform float glossiness;' )\n\t\t\t\t.replace( '#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk )\n\t\t\t\t.replace( '#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk )\n\t\t\t\t.replace( '#include <roughnessmap_fragment>', specularMapFragmentChunk )\n\t\t\t\t.replace( '#include <metalnessmap_fragment>', glossinessMapFragmentChunk )\n\t\t\t\t.replace( '#include <lights_physical_fragment>', lightPhysicalFragmentChunk );\n\n\t\t};\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tspecular: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specular.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specular.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tspecularMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.specularMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.specularMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_SPECULARMAP = ''; // USE_UV is set by the renderer for specular maps\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_SPECULARMAP;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossiness: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossiness.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossiness.value = v;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tglossinessMap: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn uniforms.glossinessMap.value;\n\n\t\t\t\t},\n\t\t\t\tset: function ( v ) {\n\n\t\t\t\t\tuniforms.glossinessMap.value = v;\n\n\t\t\t\t\tif ( v ) {\n\n\t\t\t\t\t\tthis.defines.USE_GLOSSINESSMAP = '';\n\t\t\t\t\t\tthis.defines.USE_UV = '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdelete this.defines.USE_GLOSSINESSMAP;\n\t\t\t\t\t\tdelete this.defines.USE_UV;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\n\t\tthis.setValues( params );\n\n\t}\n\n\tGLTFMeshStandardSGMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\n\tGLTFMeshStandardSGMaterial.prototype.constructor = GLTFMeshStandardSGMaterial;\n\n\tGLTFMeshStandardSGMaterial.prototype.copy = function ( source ) {\n\n\t\tMeshStandardMaterial.prototype.copy.call( this, source );\n\t\tthis.specularMap = source.specularMap;\n\t\tthis.specular.copy( source.specular );\n\t\tthis.glossinessMap = source.glossinessMap;\n\t\tthis.glossiness = source.glossiness;\n\t\tdelete this.metalness;\n\t\tdelete this.roughness;\n\t\tdelete this.metalnessMap;\n\t\tdelete this.roughnessMap;\n\t\treturn this;\n\n\t};\n\n\tfunction GLTFMaterialsPbrSpecularGlossinessExtension() {\n\n\t\treturn {\n\n\t\t\tname: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,\n\n\t\t\tspecularGlossinessParams: [\n\t\t\t\t'color',\n\t\t\t\t'map',\n\t\t\t\t'lightMap',\n\t\t\t\t'lightMapIntensity',\n\t\t\t\t'aoMap',\n\t\t\t\t'aoMapIntensity',\n\t\t\t\t'emissive',\n\t\t\t\t'emissiveIntensity',\n\t\t\t\t'emissiveMap',\n\t\t\t\t'bumpMap',\n\t\t\t\t'bumpScale',\n\t\t\t\t'normalMap',\n\t\t\t\t'normalMapType',\n\t\t\t\t'displacementMap',\n\t\t\t\t'displacementScale',\n\t\t\t\t'displacementBias',\n\t\t\t\t'specularMap',\n\t\t\t\t'specular',\n\t\t\t\t'glossinessMap',\n\t\t\t\t'glossiness',\n\t\t\t\t'alphaMap',\n\t\t\t\t'envMap',\n\t\t\t\t'envMapIntensity',\n\t\t\t\t'refractionRatio',\n\t\t\t],\n\n\t\t\tgetMaterialType: function () {\n\n\t\t\t\treturn GLTFMeshStandardSGMaterial;\n\n\t\t\t},\n\n\t\t\textendParams: function ( materialParams, materialDef, parser ) {\n\n\t\t\t\tvar pbrSpecularGlossiness = materialDef.extensions[ this.name ];\n\n\t\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {\n\n\t\t\t\t\tvar array = pbrSpecularGlossiness.diffuseFactor;\n\n\t\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {\n\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture ) );\n\n\t\t\t\t}\n\n\t\t\t\tmaterialParams.emissive = new Color( 0.0, 0.0, 0.0 );\n\t\t\t\tmaterialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;\n\t\t\t\tmaterialParams.specular = new Color( 1.0, 1.0, 1.0 );\n\n\t\t\t\tif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {\n\n\t\t\t\t\tmaterialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {\n\n\t\t\t\t\tvar specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) );\n\t\t\t\t\tpending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( pending );\n\n\t\t\t},\n\n\t\t\tcreateMaterial: function ( materialParams ) {\n\n\t\t\t\tvar material = new GLTFMeshStandardSGMaterial( materialParams );\n\t\t\t\tmaterial.fog = true;\n\n\t\t\t\tmaterial.color = materialParams.color;\n\n\t\t\t\tmaterial.map = materialParams.map === undefined ? null : materialParams.map;\n\n\t\t\t\tmaterial.lightMap = null;\n\t\t\t\tmaterial.lightMapIntensity = 1.0;\n\n\t\t\t\tmaterial.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap;\n\t\t\t\tmaterial.aoMapIntensity = 1.0;\n\n\t\t\t\tmaterial.emissive = materialParams.emissive;\n\t\t\t\tmaterial.emissiveIntensity = 1.0;\n\t\t\t\tmaterial.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap;\n\n\t\t\t\tmaterial.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap;\n\t\t\t\tmaterial.bumpScale = 1;\n\n\t\t\t\tmaterial.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap;\n\t\t\t\tmaterial.normalMapType = TangentSpaceNormalMap;\n\n\t\t\t\tif ( materialParams.normalScale ) material.normalScale = materialParams.normalScale;\n\n\t\t\t\tmaterial.displacementMap = null;\n\t\t\t\tmaterial.displacementScale = 1;\n\t\t\t\tmaterial.displacementBias = 0;\n\n\t\t\t\tmaterial.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap;\n\t\t\t\tmaterial.specular = materialParams.specular;\n\n\t\t\t\tmaterial.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap;\n\t\t\t\tmaterial.glossiness = materialParams.glossiness;\n\n\t\t\t\tmaterial.alphaMap = null;\n\n\t\t\t\tmaterial.envMap = materialParams.envMap === undefined ? null : materialParams.envMap;\n\t\t\t\tmaterial.envMapIntensity = 1.0;\n\n\t\t\t\tmaterial.refractionRatio = 0.98;\n\n\t\t\t\treturn material;\n\n\t\t\t},\n\n\t\t};\n\n\t}\n\n\t/**\n\t * Mesh Quantization Extension\n\t *\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n\t */\n\tfunction GLTFMeshQuantizationExtension() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n\t/*********************************/\n\t/********** INTERPOLATION ********/\n\t/*********************************/\n\n\t// Spline Interpolation\n\t// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\n\tfunction GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tGLTFCubicSplineInterpolant.prototype = Object.create( Interpolant.prototype );\n\tGLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;\n\n\tGLTFCubicSplineInterpolant.prototype.copySampleValue_ = function ( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tvar result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( var i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t};\n\n\tGLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;\n\n\tGLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;\n\n\tGLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {\n\n\t\tvar result = this.resultBuffer;\n\t\tvar values = this.sampleValues;\n\t\tvar stride = this.valueSize;\n\n\t\tvar stride2 = stride * 2;\n\t\tvar stride3 = stride * 3;\n\n\t\tvar td = t1 - t0;\n\n\t\tvar p = ( t - t0 ) / td;\n\t\tvar pp = p * p;\n\t\tvar ppp = pp * p;\n\n\t\tvar offset1 = i1 * stride3;\n\t\tvar offset0 = offset1 - stride3;\n\n\t\tvar s2 = - 2 * ppp + 3 * pp;\n\t\tvar s3 = ppp - pp;\n\t\tvar s0 = 1 - s2;\n\t\tvar s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t//   [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( var i = 0; i !== stride; i ++ ) {\n\n\t\t\tvar p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tvar m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tvar p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tvar m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t};\n\n\t/*********************************/\n\t/********** INTERNALS ************/\n\t/*********************************/\n\n\t/* CONSTANTS */\n\n\tvar WEBGL_CONSTANTS = {\n\t\tFLOAT: 5126,\n\t\t//FLOAT_MAT2: 35674,\n\t\tFLOAT_MAT3: 35675,\n\t\tFLOAT_MAT4: 35676,\n\t\tFLOAT_VEC2: 35664,\n\t\tFLOAT_VEC3: 35665,\n\t\tFLOAT_VEC4: 35666,\n\t\tLINEAR: 9729,\n\t\tREPEAT: 10497,\n\t\tSAMPLER_2D: 35678,\n\t\tPOINTS: 0,\n\t\tLINES: 1,\n\t\tLINE_LOOP: 2,\n\t\tLINE_STRIP: 3,\n\t\tTRIANGLES: 4,\n\t\tTRIANGLE_STRIP: 5,\n\t\tTRIANGLE_FAN: 6,\n\t\tUNSIGNED_BYTE: 5121,\n\t\tUNSIGNED_SHORT: 5123\n\t};\n\n\tvar WEBGL_COMPONENT_TYPES = {\n\t\t5120: Int8Array,\n\t\t5121: Uint8Array,\n\t\t5122: Int16Array,\n\t\t5123: Uint16Array,\n\t\t5125: Uint32Array,\n\t\t5126: Float32Array\n\t};\n\n\tvar WEBGL_FILTERS = {\n\t\t9728: NearestFilter,\n\t\t9729: LinearFilter,\n\t\t9984: NearestMipmapNearestFilter,\n\t\t9985: LinearMipmapNearestFilter,\n\t\t9986: NearestMipmapLinearFilter,\n\t\t9987: LinearMipmapLinearFilter\n\t};\n\n\tvar WEBGL_WRAPPINGS = {\n\t\t33071: ClampToEdgeWrapping,\n\t\t33648: MirroredRepeatWrapping,\n\t\t10497: RepeatWrapping\n\t};\n\n\tvar WEBGL_TYPE_SIZES = {\n\t\t'SCALAR': 1,\n\t\t'VEC2': 2,\n\t\t'VEC3': 3,\n\t\t'VEC4': 4,\n\t\t'MAT2': 4,\n\t\t'MAT3': 9,\n\t\t'MAT4': 16\n\t};\n\n\tvar ATTRIBUTES = {\n\t\tPOSITION: 'position',\n\t\tNORMAL: 'normal',\n\t\tTANGENT: 'tangent',\n\t\tTEXCOORD_0: 'uv',\n\t\tTEXCOORD_1: 'uv2',\n\t\tCOLOR_0: 'color',\n\t\tWEIGHTS_0: 'skinWeight',\n\t\tJOINTS_0: 'skinIndex',\n\t};\n\n\tvar PATH_PROPERTIES = {\n\t\tscale: 'scale',\n\t\ttranslation: 'position',\n\t\trotation: 'quaternion',\n\t\tweights: 'morphTargetInfluences'\n\t};\n\n\tvar INTERPOLATION = {\n\t\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t                        // keyframe track will be initialized with a default interpolation type, then modified.\n\t\tLINEAR: InterpolateLinear,\n\t\tSTEP: InterpolateDiscrete\n\t};\n\n\tvar ALPHA_MODES = {\n\t\tOPAQUE: 'OPAQUE',\n\t\tMASK: 'MASK',\n\t\tBLEND: 'BLEND'\n\t};\n\n\t/* UTILITY FUNCTIONS */\n\n\tfunction resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n\t */\n\tfunction createDefaultMaterial( cache ) {\n\n\t\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\t\tcolor: 0xFFFFFF,\n\t\t\t\temissive: 0x000000,\n\t\t\t\tmetalness: 1,\n\t\t\t\troughness: 1,\n\t\t\t\ttransparent: false,\n\t\t\t\tdepthTest: true,\n\t\t\t\tside: FrontSide\n\t\t\t} );\n\n\t\t}\n\n\t\treturn cache[ 'DefaultMaterial' ];\n\n\t}\n\n\tfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t\t// Add unknown glTF extensions to an object's userData.\n\n\t\tfor ( var name in objectDef.extensions ) {\n\n\t\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @param {Object3D|Material|BufferGeometry} object\n\t * @param {GLTF.definition} gltfDef\n\t */\n\tfunction assignExtrasToUserData( object, gltfDef ) {\n\n\t\tif ( gltfDef.extras !== undefined ) {\n\n\t\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n\t *\n\t * @param {BufferGeometry} geometry\n\t * @param {Array<GLTF.Target>} targets\n\t * @param {GLTFParser} parser\n\t * @return {Promise<BufferGeometry>}\n\t */\n\tfunction addMorphTargets( geometry, targets, parser ) {\n\n\t\tvar hasMorphPosition = false;\n\t\tvar hasMorphNormal = false;\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\n\t\t\tif ( hasMorphPosition && hasMorphNormal ) break;\n\n\t\t}\n\n\t\tif ( ! hasMorphPosition && ! hasMorphNormal ) return Promise.resolve( geometry );\n\n\t\tvar pendingPositionAccessors = [];\n\t\tvar pendingNormalAccessors = [];\n\n\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tvar target = targets[ i ];\n\n\t\t\tif ( hasMorphPosition ) {\n\n\t\t\t\tvar pendingAccessor = target.POSITION !== undefined\n\t\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t\t: geometry.attributes.position;\n\n\t\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t\t}\n\n\t\t\tif ( hasMorphNormal ) {\n\n\t\t\t\tvar pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t\t: geometry.attributes.normal;\n\n\t\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( [\n\t\t\tPromise.all( pendingPositionAccessors ),\n\t\t\tPromise.all( pendingNormalAccessors )\n\t\t] ).then( function ( accessors ) {\n\n\t\t\tvar morphPositions = accessors[ 0 ];\n\t\t\tvar morphNormals = accessors[ 1 ];\n\n\t\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t\treturn geometry;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * @param {Mesh} mesh\n\t * @param {GLTF.Mesh} meshDef\n\t */\n\tfunction updateMorphTargets( mesh, meshDef ) {\n\n\t\tmesh.updateMorphTargets();\n\n\t\tif ( meshDef.weights !== undefined ) {\n\n\t\t\tfor ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\t\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\t\tvar targetNames = meshDef.extras.targetNames;\n\n\t\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\t\tfor ( var i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createPrimitiveKey( primitiveDef ) {\n\n\t\tvar dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\t\tvar geometryKey;\n\n\t\tif ( dracoExtension ) {\n\n\t\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t\t} else {\n\n\t\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t\t}\n\n\t\treturn geometryKey;\n\n\t}\n\n\tfunction createAttributesKey( attributes ) {\n\n\t\tvar attributesKey = '';\n\n\t\tvar keys = Object.keys( attributes ).sort();\n\n\t\tfor ( var i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t\t}\n\n\t\treturn attributesKey;\n\n\t}\n\n\t/* GLTF PARSER */\n\n\tfunction GLTFParser( json, options ) {\n\n\t\tthis.json = json || {};\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options || {};\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\t\tif ( typeof createImageBitmap !== 'undefined' && /Firefox/.test( navigator.userAgent ) === false ) {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tGLTFParser.prototype.setExtensions = function ( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t};\n\n\tGLTFParser.prototype.setPlugins = function ( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t};\n\n\tGLTFParser.prototype.parse = function ( onLoad, onError ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( [\n\n\t\t\tthis.getDependencies( 'scene' ),\n\t\t\tthis.getDependencies( 'animation' ),\n\t\t\tthis.getDependencies( 'camera' ),\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\tonLoad( result );\n\n\t\t} ).catch( onError );\n\n\t};\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\tGLTFParser.prototype._markDefs = function () {\n\n\t\tvar nodeDefs = this.json.nodes || [];\n\t\tvar skinDefs = this.json.skins || [];\n\t\tvar meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tvar joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( var i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tvar nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\tGLTFParser.prototype._addNodeRef = function ( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t};\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\tGLTFParser.prototype._getNodeRef = function ( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tvar ref = object.clone();\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t};\n\n\tGLTFParser.prototype._invokeOne = function ( func ) {\n\n\t\tvar extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( var i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tvar result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t};\n\n\tGLTFParser.prototype._invokeAll = function ( func ) {\n\n\t\tvar extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tvar pending = [];\n\n\t\tfor ( var i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tvar result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t};\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}\n\t */\n\tGLTFParser.prototype.getDependency = function ( type, index ) {\n\n\t\tvar cacheKey = type + ':' + index;\n\t\tvar dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this.loadNode( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this.loadAnimation( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t};\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise<Array<Object>>}\n\t */\n\tGLTFParser.prototype.getDependencies = function ( type ) {\n\n\t\tvar dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tvar parser = this;\n\t\t\tvar defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tGLTFParser.prototype.loadBuffer = function ( bufferIndex ) {\n\n\t\tvar bufferDef = this.json.buffers[ bufferIndex ];\n\t\tvar loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tvar options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tGLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {\n\n\t\tvar bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tvar byteLength = bufferViewDef.byteLength || 0;\n\t\t\tvar byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n\t */\n\tGLTFParser.prototype.loadAccessor = function ( accessorIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\n\t\tvar accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\t// Ignore empty accessors, which may be used to declare runtime\n\t\t\t// information about attributes coming from another source (e.g. Draco\n\t\t\t// compression extension).\n\t\t\treturn Promise.resolve( null );\n\n\t\t}\n\n\t\tvar pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tvar bufferView = bufferViews[ 0 ];\n\n\t\t\tvar itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tvar TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tvar elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tvar itemBytes = elementBytes * itemSize;\n\t\t\tvar byteOffset = accessorDef.byteOffset || 0;\n\t\t\tvar byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tvar normalized = accessorDef.normalized === true;\n\t\t\tvar array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tvar ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tvar ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tvar ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tvar itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tvar TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tvar byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tvar byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tvar sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tvar sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise<THREE.Texture>}\n\t */\n\tGLTFParser.prototype.loadTexture = function ( textureIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar options = this.options;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tvar textureExtensions = textureDef.extensions || {};\n\n\t\tvar source;\n\n\t\tif ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {\n\n\t\t\tsource = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];\n\n\t\t} else {\n\n\t\t\tsource = json.images[ textureDef.source ];\n\n\t\t}\n\n\t\tvar loader;\n\n\t\tif ( source.uri ) {\n\n\t\t\tloader = options.manager.getHandler( source.uri );\n\n\t\t}\n\n\t\tif ( ! loader ) {\n\n\t\t\tloader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]\n\t\t\t\t? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader\n\t\t\t\t: this.textureLoader;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, source, loader );\n\n\t};\n\n\tGLTFParser.prototype.loadTextureImage = function ( textureIndex, source, loader ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar options = this.options;\n\n\t\tvar textureDef = json.textures[ textureIndex ];\n\n\t\tvar URL = self.URL || self.webkitURL;\n\n\t\tvar sourceURI = source.uri;\n\t\tvar isObjectURL = false;\n\t\tvar hasAlpha = true;\n\n\t\tif ( source.mimeType === 'image/jpeg' ) hasAlpha = false;\n\n\t\tif ( source.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tif ( source.mimeType === 'image/png' ) {\n\n\t\t\t\t\t// Inspect the PNG 'IHDR' chunk to determine whether the image could have an\n\t\t\t\t\t// alpha channel. This check is conservative — the image could have an alpha\n\t\t\t\t\t// channel with all values == 1, and the indexed type (colorType == 3) only\n\t\t\t\t\t// sometimes contains alpha.\n\t\t\t\t\t//\n\t\t\t\t\t// https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header\n\t\t\t\t\tvar colorType = new DataView( bufferView, 25, 1 ).getUint8( 0, false );\n\t\t\t\t\thasAlpha = colorType === 6 || colorType === 4 || colorType === 3;\n\n\t\t\t\t}\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tvar blob = new Blob( [ bufferView ], { type: source.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tvar onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tresolve( new CanvasTexture( imageBitmap ) );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\ttexture.flipY = false;\n\n\t\t\tif ( textureDef.name ) texture.name = textureDef.name;\n\n\t\t\t// When there is definitely no alpha channel in the texture, set RGBFormat to save space.\n\t\t\tif ( ! hasAlpha ) texture.format = RGBFormat;\n\n\t\t\tvar samplers = json.samplers || {};\n\t\t\tvar sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, {\n\t\t\t\ttype: 'textures',\n\t\t\t\tindex: textureIndex\n\t\t\t} );\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tGLTFParser.prototype.assignTexture = function ( materialParams, mapName, mapDef ) {\n\n\t\tvar parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\t// Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured\n\t\t\t// However, we will copy UV set 0 to UV set 1 on demand for aoMap\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' );\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tvar transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tvar gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accomodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param  {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tGLTFParser.prototype.assignFinalMaterial = function ( mesh ) {\n\n\t\tvar geometry = mesh.geometry;\n\t\tvar material = mesh.material;\n\n\t\tvar useVertexTangents = geometry.attributes.tangent !== undefined;\n\t\tvar useVertexColors = geometry.attributes.color !== undefined;\n\t\tvar useFlatShading = geometry.attributes.normal === undefined;\n\t\tvar useSkinning = mesh.isSkinnedMesh === true;\n\t\tvar useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;\n\t\tvar useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tvar cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tvar pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tvar cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tvar lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {\n\n\t\t\tvar cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';\n\t\t\tif ( useSkinning ) cacheKey += 'skinning:';\n\t\t\tif ( useVertexTangents ) cacheKey += 'vertex-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\t\t\tif ( useMorphTargets ) cacheKey += 'morph-targets:';\n\t\t\tif ( useMorphNormals ) cacheKey += 'morph-normals:';\n\n\t\t\tvar cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useSkinning ) cachedMaterial.skinning = true;\n\t\t\t\tif ( useVertexTangents ) cachedMaterial.vertexTangents = true;\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\t\t\t\tif ( useMorphTargets ) cachedMaterial.morphTargets = true;\n\t\t\t\tif ( useMorphNormals ) cachedMaterial.morphNormals = true;\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\t// workarounds for mesh and geometry\n\n\t\tif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {\n\n\t\t\tgeometry.setAttribute( 'uv2', geometry.attributes.uv );\n\n\t\t}\n\n\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\tif ( material.normalScale && ! useVertexTangents ) {\n\n\t\t\tmaterial.normalScale.y = - material.normalScale.y;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalScale && ! useVertexTangents ) {\n\n\t\t\tmaterial.clearcoatNormalScale.y = - material.clearcoatNormalScale.y;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t};\n\n\tGLTFParser.prototype.getMaterialType = function ( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise<Material>}\n\t */\n\tGLTFParser.prototype.loadMaterial = function ( materialIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\t\tvar materialDef = json.materials[ materialIndex ];\n\n\t\tvar materialType;\n\t\tvar materialParams = {};\n\t\tvar materialExtensions = materialDef.extensions || {};\n\n\t\tvar pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {\n\n\t\t\tvar sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];\n\t\t\tmaterialType = sgExtension.getMaterialType();\n\t\t\tpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tvar kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tvar metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tvar array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.fromArray( array );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tvar alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tmaterialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tmaterialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tvar material;\n\n\t\t\tif ( materialType === GLTFMeshStandardSGMaterial ) {\n\n\t\t\t\tmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );\n\n\t\t\t} else {\n\n\t\t\t\tmaterial = new materialType( materialParams );\n\n\t\t\t}\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\t// baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.\n\t\t\tif ( material.map ) material.map.encoding = sRGBEncoding;\n\t\t\tif ( material.emissiveMap ) material.emissiveMap.encoding = sRGBEncoding;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { type: 'materials', index: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t};\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tGLTFParser.prototype.createUniqueName = function ( originalName ) {\n\n\t\tvar sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tvar name = sanitizedName;\n\n\t\tfor ( var i = 1; this.nodeNamesUsed[ name ]; ++ i ) {\n\n\t\t\tname = sanitizedName + '_' + i;\n\n\t\t}\n\n\t\tthis.nodeNamesUsed[ name ] = true;\n\n\t\treturn name;\n\n\t};\n\n\t/**\n\t * @param {BufferGeometry} geometry\n\t * @param {GLTF.Primitive} primitiveDef\n\t * @param {GLTFParser} parser\n\t */\n\tfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\t\tvar attributes = primitiveDef.attributes;\n\n\t\tvar box = new Box3();\n\n\t\tif ( attributes.POSITION !== undefined ) {\n\n\t\t\tvar accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\t\tvar min = accessor.min;\n\t\t\tvar max = accessor.max;\n\n\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\tbox.set(\n\t\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] ) );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar targets = primitiveDef.targets;\n\n\t\tif ( targets !== undefined ) {\n\n\t\t\tvar maxDisplacement = new Vector3();\n\t\t\tvar vector = new Vector3();\n\n\t\t\tfor ( var i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\t\tvar target = targets[ i ];\n\n\t\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\t\tvar accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\t\tvar min = accessor.min;\n\t\t\t\t\tvar max = accessor.max;\n\n\t\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\t\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\t\tbox.expandByVector( maxDisplacement );\n\n\t\t}\n\n\t\tgeometry.boundingBox = box;\n\n\t\tvar sphere = new Sphere();\n\n\t\tbox.getCenter( sphere.center );\n\t\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\t\tgeometry.boundingSphere = sphere;\n\n\t}\n\n\t/**\n\t * @param {BufferGeometry} geometry\n\t * @param {GLTF.Primitive} primitiveDef\n\t * @param {GLTFParser} parser\n\t * @return {Promise<BufferGeometry>}\n\t */\n\tfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\t\tvar attributes = primitiveDef.attributes;\n\n\t\tvar pending = [];\n\n\t\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t\t.then( function ( accessor ) {\n\n\t\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tfor ( var gltfAttributeName in attributes ) {\n\n\t\t\tvar threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t\t}\n\n\t\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\t\tvar accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\t\tgeometry.setIndex( accessor );\n\n\t\t\t} );\n\n\t\t\tpending.push( accessor );\n\n\t\t}\n\n\t\tassignExtrasToUserData( geometry, primitiveDef );\n\n\t\tcomputeBounds( geometry, primitiveDef, parser );\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\treturn primitiveDef.targets !== undefined\n\t\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t\t: geometry;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * @param {BufferGeometry} geometry\n\t * @param {Number} drawMode\n\t * @return {BufferGeometry}\n\t */\n\tfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\t\tvar index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tvar indices = [];\n\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( var i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tvar numberOfTriangles = index.count - 2;\n\t\tvar newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( var i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( var i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tvar newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\n\t\treturn newGeometry;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array<GLTF.Primitive>} primitives\n\t * @return {Promise<Array<BufferGeometry>>}\n\t */\n\tGLTFParser.prototype.loadGeometries = function ( primitives ) {\n\n\t\tvar parser = this;\n\t\tvar extensions = this.extensions;\n\t\tvar cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tvar pending = [];\n\n\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tvar primitive = primitives[ i ];\n\t\t\tvar cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tvar cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tvar geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise<Group|Mesh|SkinnedMesh>}\n\t */\n\tGLTFParser.prototype.loadMesh = function ( meshIndex ) {\n\n\t\tvar parser = this;\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\n\t\tvar meshDef = json.meshes[ meshIndex ];\n\t\tvar primitives = meshDef.primitives;\n\n\t\tvar pending = [];\n\n\t\tfor ( var i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tvar material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tvar materials = results.slice( 0, results.length - 1 );\n\t\t\tvar geometries = results[ results.length - 1 ];\n\n\t\t\tvar meshes = [];\n\n\t\t\tfor ( var i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tvar geometry = geometries[ i ];\n\t\t\t\tvar primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tvar mesh;\n\n\t\t\t\tvar material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) {\n\n\t\t\t\t\t\t// we normalize floating point skin weight array to fix malformed assets (see #15319)\n\t\t\t\t\t\t// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tvar group = new Group();\n\n\t\t\tfor ( var i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise<THREE.Camera>}\n\t */\n\tGLTFParser.prototype.loadCamera = function ( cameraIndex ) {\n\n\t\tvar camera;\n\t\tvar cameraDef = this.json.cameras[ cameraIndex ];\n\t\tvar params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise<Object>}\n\t */\n\tGLTFParser.prototype.loadSkin = function ( skinIndex ) {\n\n\t\tvar skinDef = this.json.skins[ skinIndex ];\n\n\t\tvar skinEntry = { joints: skinDef.joints };\n\n\t\tif ( skinDef.inverseBindMatrices === undefined ) {\n\n\t\t\treturn Promise.resolve( skinEntry );\n\n\t\t}\n\n\t\treturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {\n\n\t\t\tskinEntry.inverseBindMatrices = accessor;\n\n\t\t\treturn skinEntry;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise<AnimationClip>}\n\t */\n\tGLTFParser.prototype.loadAnimation = function ( animationIndex ) {\n\n\t\tvar json = this.json;\n\n\t\tvar animationDef = json.animations[ animationIndex ];\n\n\t\tvar pendingNodes = [];\n\t\tvar pendingInputAccessors = [];\n\t\tvar pendingOutputAccessors = [];\n\t\tvar pendingSamplers = [];\n\t\tvar pendingTargets = [];\n\n\t\tfor ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tvar channel = animationDef.channels[ i ];\n\t\t\tvar sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tvar target = channel.target;\n\t\t\tvar name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.\n\t\t\tvar input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tvar output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tvar nodes = dependencies[ 0 ];\n\t\t\tvar inputAccessors = dependencies[ 1 ];\n\t\t\tvar outputAccessors = dependencies[ 2 ];\n\t\t\tvar samplers = dependencies[ 3 ];\n\t\t\tvar targets = dependencies[ 4 ];\n\n\t\t\tvar tracks = [];\n\n\t\t\tfor ( var i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tvar node = nodes[ i ];\n\t\t\t\tvar inputAccessor = inputAccessors[ i ];\n\t\t\t\tvar outputAccessor = outputAccessors[ i ];\n\t\t\t\tvar sampler = samplers[ i ];\n\t\t\t\tvar target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tnode.updateMatrix();\n\t\t\t\tnode.matrixAutoUpdate = true;\n\n\t\t\t\tvar TypedKeyframeTrack;\n\n\t\t\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase PATH_PROPERTIES.position:\n\t\t\t\t\tcase PATH_PROPERTIES.scale:\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tvar targetName = node.name ? node.name : node.uuid;\n\n\t\t\t\tvar interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\t\t\t\tvar targetNames = [];\n\n\t\t\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\t\t\t// Node may be a Group (glTF mesh with several primitives) or a Mesh.\n\t\t\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\t\t\tif ( object.isMesh === true && object.morphTargetInfluences ) {\n\n\t\t\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetNames.push( targetName );\n\n\t\t\t\t}\n\n\t\t\t\tvar outputArray = outputAccessor.array;\n\n\t\t\t\tif ( outputAccessor.normalized ) {\n\n\t\t\t\t\tvar scale;\n\n\t\t\t\t\tif ( outputArray.constructor === Int8Array ) {\n\n\t\t\t\t\t\tscale = 1 / 127;\n\n\t\t\t\t\t} else if ( outputArray.constructor === Uint8Array ) {\n\n\t\t\t\t\t\tscale = 1 / 255;\n\n\t\t\t\t\t} else if ( outputArray.constructor == Int16Array ) {\n\n\t\t\t\t\t\tscale = 1 / 32767;\n\n\t\t\t\t\t} else if ( outputArray.constructor === Uint16Array ) {\n\n\t\t\t\t\t\tscale = 1 / 65535;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported output accessor component type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar scaled = new Float32Array( outputArray.length );\n\n\t\t\t\t\tfor ( var j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutputArray = scaled;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar track = new TypedKeyframeTrack(\n\t\t\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\t\t\tinputAccessor.array,\n\t\t\t\t\t\toutputArray,\n\t\t\t\t\t\tinterpolation\n\t\t\t\t\t);\n\n\t\t\t\t\t// Override interpolation with custom factory method.\n\t\t\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t\t\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t\t\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t\t\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\t\t\t\t\treturn new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\t\t\t\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( track );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar name = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\t\treturn new AnimationClip( name, undefined, tracks );\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise<Object3D>}\n\t */\n\tGLTFParser.prototype.loadNode = function ( nodeIndex ) {\n\n\t\tvar json = this.json;\n\t\tvar extensions = this.extensions;\n\t\tvar parser = this;\n\n\t\tvar nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tvar nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\treturn ( function () {\n\n\t\t\tvar pending = [];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tpending.push( parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\t\t\tvar node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\t\t\tfor ( var i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} ) );\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t\t} ) );\n\n\t\t\t}\n\n\t\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t\t} ).forEach( function ( promise ) {\n\n\t\t\t\tpending.push( promise );\n\n\t\t\t} );\n\n\t\t\treturn Promise.all( pending );\n\n\t\t}() ).then( function ( objects ) {\n\n\t\t\tvar node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( var i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tvar matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tparser.associations.set( node, { type: 'nodes', index: nodeIndex } );\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise<Group>}\n\t */\n\tGLTFParser.prototype.loadScene = function () {\n\n\t\t// scene node hierachy builder\n\n\t\tfunction buildNodeHierachy( nodeId, parentObject, json, parser ) {\n\n\t\t\tvar nodeDef = json.nodes[ nodeId ];\n\n\t\t\treturn parser.getDependency( 'node', nodeId ).then( function ( node ) {\n\n\t\t\t\tif ( nodeDef.skin === undefined ) return node;\n\n\t\t\t\t// build skeleton here as well\n\n\t\t\t\tvar skinEntry;\n\n\t\t\t\treturn parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) {\n\n\t\t\t\t\tskinEntry = skin;\n\n\t\t\t\t\tvar pendingJoints = [];\n\n\t\t\t\t\tfor ( var i = 0, il = skinEntry.joints.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tpendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.all( pendingJoints );\n\n\t\t\t\t} ).then( function ( jointNodes ) {\n\n\t\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\t\tif ( ! mesh.isMesh ) return;\n\n\t\t\t\t\t\tvar bones = [];\n\t\t\t\t\t\tvar boneInverses = [];\n\n\t\t\t\t\t\tfor ( var j = 0, jl = jointNodes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar jointNode = jointNodes[ j ];\n\n\t\t\t\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\t\t\t\tvar mat = new Matrix4();\n\n\t\t\t\t\t\t\t\tif ( skinEntry.inverseBindMatrices !== undefined ) {\n\n\t\t\t\t\t\t\t\t\tmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinEntry.joints[ j ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} );\n\n\t\t\t} ).then( function ( node ) {\n\n\t\t\t\t// build node hierachy\n\n\t\t\t\tparentObject.add( node );\n\n\t\t\t\tvar pending = [];\n\n\t\t\t\tif ( nodeDef.children ) {\n\n\t\t\t\t\tvar children = nodeDef.children;\n\n\t\t\t\t\tfor ( var i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar child = children[ i ];\n\t\t\t\t\t\tpending.push( buildNodeHierachy( child, node, json, parser ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn Promise.all( pending );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn function loadScene( sceneIndex ) {\n\n\t\t\tvar json = this.json;\n\t\t\tvar extensions = this.extensions;\n\t\t\tvar sceneDef = this.json.scenes[ sceneIndex ];\n\t\t\tvar parser = this;\n\n\t\t\t// Loader returns Group, not Scene.\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\t\tvar scene = new Group();\n\t\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\t\tvar nodeIds = sceneDef.nodes || [];\n\n\t\t\tvar pending = [];\n\n\t\t\tfor ( var i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\t\tpending.push( buildNodeHierachy( nodeIds[ i ], scene, json, parser ) );\n\n\t\t\t}\n\n\t\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\t\treturn scene;\n\n\t\t\t} );\n\n\t\t};\n\n\t}();\n\n\treturn GLTFLoader;\n\n} )();\n\nexport { GLTFLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/HDRCubeTextureLoader.js",
    "content": "import {\n\tCubeTexture,\n\tDataTexture,\n\tFileLoader,\n\tFloatType,\n\tHalfFloatType,\n\tLinearEncoding,\n\tLinearFilter,\n\tLoader,\n\tNearestFilter,\n\tRGBAFormat,\n\tRGBEEncoding,\n\tRGBFormat,\n\tUnsignedByteType\n} from '../../../build/three.module.js';\nimport { RGBELoader } from '../loaders/RGBELoader.js';\n\nvar HDRCubeTextureLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.hdrLoader = new RGBELoader();\n\tthis.type = UnsignedByteType;\n\n};\n\nHDRCubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: HDRCubeTextureLoader,\n\n\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\tif ( ! Array.isArray( urls ) ) {\n\n\t\t\tconsole.warn( 'THREE.HDRCubeTextureLoader signature has changed. Use .setDataType() instead.' );\n\n\t\t\tthis.setDataType( urls );\n\n\t\t\turls = onLoad;\n\t\t\tonLoad = onProgress;\n\t\t\tonProgress = onError;\n\t\t\tonError = arguments[ 4 ];\n\n\t\t}\n\n\t\tvar texture = new CubeTexture();\n\n\t\ttexture.type = this.type;\n\n\t\tswitch ( texture.type ) {\n\n\t\t\tcase UnsignedByteType:\n\n\t\t\t\ttexture.encoding = RGBEEncoding;\n\t\t\t\ttexture.format = RGBAFormat;\n\t\t\t\ttexture.minFilter = NearestFilter;\n\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\tbreak;\n\n\t\t\tcase FloatType:\n\n\t\t\t\ttexture.encoding = LinearEncoding;\n\t\t\t\ttexture.format = RGBFormat;\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\ttexture.encoding = LinearEncoding;\n\t\t\t\ttexture.format = RGBFormat;\n\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\tvar loaded = 0;\n\n\t\tfunction loadHDRData( i, onLoad, onProgress, onError ) {\n\n\t\t\tnew FileLoader( scope.manager )\n\t\t\t\t.setPath( scope.path )\n\t\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t\t.setWithCredentials( scope.withCredentials )\n\t\t\t\t.load( urls[ i ], function ( buffer ) {\n\n\t\t\t\t\tloaded ++;\n\n\t\t\t\t\tvar texData = scope.hdrLoader.parse( buffer );\n\n\t\t\t\t\tif ( ! texData ) return;\n\n\t\t\t\t\tif ( texData.data !== undefined ) {\n\n\t\t\t\t\t\tvar dataTexture = new DataTexture( texData.data, texData.width, texData.height );\n\n\t\t\t\t\t\tdataTexture.type = texture.type;\n\t\t\t\t\t\tdataTexture.encoding = texture.encoding;\n\t\t\t\t\t\tdataTexture.format = texture.format;\n\t\t\t\t\t\tdataTexture.minFilter = texture.minFilter;\n\t\t\t\t\t\tdataTexture.magFilter = texture.magFilter;\n\t\t\t\t\t\tdataTexture.generateMipmaps = texture.generateMipmaps;\n\n\t\t\t\t\t\ttexture.images[ i ] = dataTexture;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < urls.length; i ++ ) {\n\n\t\t\tloadHDRData( i, onLoad, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t},\n\n\tsetDataType: function ( value ) {\n\n\t\tthis.type = value;\n\t\tthis.hdrLoader.setDataType( value );\n\n\t\treturn this;\n\n\t}\n\n} );\n\nexport { HDRCubeTextureLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/KMZLoader.js",
    "content": "import {\n\tFileLoader,\n\tGroup,\n\tLoader,\n\tLoadingManager\n} from '../../../build/three.module.js';\nimport { ColladaLoader } from '../loaders/ColladaLoader.js';\nimport { JSZip } from '../libs/jszip.module.min.js';\n\nvar KMZLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nKMZLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: KMZLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\tfunction findFile( url ) {\n\n\t\t\tfor ( var path in zip.files ) {\n\n\t\t\t\tif ( path.substr( - url.length ) === url ) {\n\n\t\t\t\t\treturn zip.files[ path ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar manager = new LoadingManager();\n\t\tmanager.setURLModifier( function ( url ) {\n\n\t\t\tvar image = findFile( url );\n\n\t\t\tif ( image ) {\n\n\t\t\t\tconsole.log( 'Loading', url );\n\n\t\t\t\tvar blob = new Blob( [ image.asArrayBuffer() ], { type: 'application/octet-stream' } );\n\t\t\t\treturn URL.createObjectURL( blob );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t} );\n\n\t\t//\n\n\t\tvar zip = new JSZip( data ); // eslint-disable-line no-undef\n\n\t\tif ( zip.files[ 'doc.kml' ] ) {\n\n\t\t\tvar xml = new DOMParser().parseFromString( zip.files[ 'doc.kml' ].asText(), 'application/xml' );\n\n\t\t\tvar model = xml.querySelector( 'Placemark Model Link href' );\n\n\t\t\tif ( model ) {\n\n\t\t\t\tvar loader = new ColladaLoader( manager );\n\t\t\t\treturn loader.parse( zip.files[ model.textContent ].asText() );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'KMZLoader: Missing doc.kml file.' );\n\n\t\t\tfor ( var path in zip.files ) {\n\n\t\t\t\tvar extension = path.split( '.' ).pop().toLowerCase();\n\n\t\t\t\tif ( extension === 'dae' ) {\n\n\t\t\t\t\tvar loader = new ColladaLoader( manager );\n\t\t\t\t\treturn loader.parse( zip.files[ path ].asText() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'KMZLoader: Couldn\\'t find .dae file.' );\n\t\treturn { scene: new Group() };\n\n\t}\n\n} );\n\nexport { KMZLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/KTX2Loader.js",
    "content": "/**\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n *\n * To do:\n * - [ ] High-quality demo\n * - [ ] Documentation\n * - [ ] (Optional) Include BC5\n * - [ ] (Optional) Include EAC RG on mobile (WEBGL_compressed_texture_etc)\n * - [ ] (Optional) Include two-texture output mode (see: clearcoat + clearcoatRoughness)\n * - [ ] (Optional) Support Web Workers, after #18234\n */\n\nimport {\n\tCompressedTexture,\n\tCompressedTextureLoader,\n\tFileLoader,\n\tLinearEncoding,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tMathUtils,\n\tRGBAFormat,\n\tRGBA_ASTC_4x4_Format,\n\tRGBA_BPTC_Format,\n\tRGBA_ETC2_EAC_Format,\n\tRGBA_PVRTC_4BPPV1_Format,\n\tRGBA_S3TC_DXT5_Format,\n\tRGB_ETC1_Format,\n\tRGB_ETC2_Format,\n\tRGB_PVRTC_4BPPV1_Format,\n\tRGB_S3TC_DXT1_Format,\n\tUnsignedByteType,\n\tsRGBEncoding,\n} from '../../../build/three.module.js';\n\nimport { ZSTDDecoder } from '../libs/zstddec.module.js';\n\n// Data Format Descriptor (DFD) constants.\n\nconst DFDModel = {\n\tETC1S: 163,\n\tUASTC: 166,\n};\n\nconst DFDChannel = {\n\tETC1S: {\n\t\tRGB: 0,\n\t\tRRR: 3,\n\t\tGGG: 4,\n\t\tAAA: 15,\n\t},\n\tUASTC: {\n\t\tRGB: 0,\n\t\tRGBA: 3,\n\t\tRRR: 4,\n\t\tRRRG: 5\n\t},\n};\n\n//\n\nclass KTX2Loader extends CompressedTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.basisModule = null;\n\t\tthis.basisModulePending = null;\n\n\t\tthis.transcoderConfig = {};\n\n\t}\n\n\tdetectSupport( renderer ) {\n\n\t\tthis.transcoderConfig = {\n\t\t\tastcSupported: renderer.extensions.has( 'WEBGL_compressed_texture_astc' ),\n\t\t\tetc1Supported: renderer.extensions.has( 'WEBGL_compressed_texture_etc1' ),\n\t\t\tetc2Supported: renderer.extensions.has( 'WEBGL_compressed_texture_etc' ),\n\t\t\tdxtSupported: renderer.extensions.has( 'WEBGL_compressed_texture_s3tc' ),\n\t\t\tbptcSupported: renderer.extensions.has( 'EXT_texture_compression_bptc' ),\n\t\t\tpvrtcSupported: renderer.extensions.has( 'WEBGL_compressed_texture_pvrtc' )\n\t\t\t\t|| renderer.extensions.has( 'WEBKIT_WEBGL_compressed_texture_pvrtc' )\n\t\t};\n\n\t\treturn this;\n\n\t}\n\n\tinitModule() {\n\n\t\tif ( this.basisModulePending ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar scope = this;\n\n\t\t// The Emscripten wrapper returns a fake Promise, which can cause\n\t\t// infinite recursion when mixed with native Promises. Wrap the module\n\t\t// initialization to return a native Promise.\n\t\tscope.basisModulePending = new Promise( function ( resolve ) {\n\n\t\t\tMSC_TRANSCODER().then( function ( basisModule ) { // eslint-disable-line no-undef\n\n\t\t\t\tscope.basisModule = basisModule;\n\n\t\t\t\tbasisModule.initTranscoders();\n\n\t\t\t\tresolve();\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new CompressedTexture();\n\n\t\tvar bufferPending = new Promise( function ( resolve, reject ) {\n\n\t\t\tnew FileLoader( scope.manager )\n\t\t\t\t.setPath( scope.path )\n\t\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t\t.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t\t// parse() will call initModule() again, but starting the process early\n\t\t// should allow the WASM to load in parallel with the texture.\n\t\tthis.initModule();\n\n\t\tPromise.all( [ bufferPending, this.basisModulePending ] )\n\t\t\t.then( function ( [ buffer ] ) {\n\n\t\t\t\tscope.parse( buffer, function ( _texture ) {\n\n\t\t\t\t\ttexture.copy( _texture );\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}, onError );\n\n\t\t\t} )\n\t\t\t.catch( onError );\n\n\t\treturn texture;\n\n\t}\n\n\tparse( buffer, onLoad, onError ) {\n\n\t\tvar scope = this;\n\n\t\t// load() may have already called initModule(), but call it again here\n\t\t// in case the user called parse() directly. Method is idempotent.\n\t\tthis.initModule();\n\n\t\tthis.basisModulePending.then( function () {\n\n\t\t\tvar BasisLzEtc1sImageTranscoder = scope.basisModule.BasisLzEtc1sImageTranscoder;\n\t\t\tvar UastcImageTranscoder = scope.basisModule.UastcImageTranscoder;\n\t\t\tvar TextureFormat = scope.basisModule.TextureFormat;\n\n\t\t\tvar ktx = new KTX2Container( scope.basisModule, buffer );\n\n\t\t\t// TODO(donmccurdy): Should test if texture is transcodable before attempting\n\t\t\t// any transcoding. If supercompressionScheme is KTX_SS_BASIS_LZ and dfd\n\t\t\t// colorModel is ETC1S (163) or if dfd colorModel is UASTCF (166)\n\t\t\t// then texture must be transcoded.\n\t\t\tvar transcoder = ktx.getTexFormat() === TextureFormat.UASTC4x4\n\t\t\t\t? new UastcImageTranscoder()\n\t\t\t\t: new BasisLzEtc1sImageTranscoder();\n\n\t\t\tktx.initMipmaps( transcoder, scope.transcoderConfig )\n\t\t\t\t.then( function () {\n\n\t\t\t\t\tvar texture = new CompressedTexture(\n\t\t\t\t\t\tktx.mipmaps,\n\t\t\t\t\t\tktx.getWidth(),\n\t\t\t\t\t\tktx.getHeight(),\n\t\t\t\t\t\tktx.transcodedFormat,\n\t\t\t\t\t\tUnsignedByteType\n\t\t\t\t\t);\n\n\t\t\t\t\ttexture.encoding = ktx.getEncoding();\n\t\t\t\t\ttexture.premultiplyAlpha = ktx.getPremultiplyAlpha();\n\t\t\t\t\ttexture.minFilter = ktx.mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\n\t\t\t\t\tonLoad( texture );\n\n\t\t\t\t} )\n\t\t\t\t.catch( onError );\n\n\t\t} );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass KTX2Container {\n\n\tconstructor( basisModule, arrayBuffer ) {\n\n\t\tthis.basisModule = basisModule;\n\t\tthis.arrayBuffer = arrayBuffer;\n\n\t\tthis.zstd = new ZSTDDecoder();\n\t\tthis.zstd.init();\n\n\t\tthis.mipmaps = null;\n\t\tthis.transcodedFormat = null;\n\n\t\t// Confirm this is a KTX 2.0 file, based on the identifier in the first 12 bytes.\n\t\tvar idByteLength = 12;\n\t\tvar id = new Uint8Array( this.arrayBuffer, 0, idByteLength );\n\t\tif ( id[ 0 ] !== 0xAB || // '´'\n\t\t\t\tid[ 1 ] !== 0x4B || // 'K'\n\t\t\t\tid[ 2 ] !== 0x54 || // 'T'\n\t\t\t\tid[ 3 ] !== 0x58 || // 'X'\n\t\t\t\tid[ 4 ] !== 0x20 || // ' '\n\t\t\t\tid[ 5 ] !== 0x32 || // '2'\n\t\t\t\tid[ 6 ] !== 0x30 || // '0'\n\t\t\t\tid[ 7 ] !== 0xBB || // 'ª'\n\t\t\t\tid[ 8 ] !== 0x0D || // '\\r'\n\t\t\t\tid[ 9 ] !== 0x0A || // '\\n'\n\t\t\t\tid[ 10 ] !== 0x1A || // '\\x1A'\n\t\t\t\tid[ 11 ] !== 0x0A // '\\n'\n\t\t) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Missing KTX 2.0 identifier.' );\n\n\t\t}\n\n\t\t// TODO(donmccurdy): If we need to support BE, derive this from typeSize.\n\t\tvar littleEndian = true;\n\n\n\t\t///////////////////////////////////////////////////\n\t\t// Header.\n\t\t///////////////////////////////////////////////////\n\n\t\tvar headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT;\n\t\tvar headerReader = new KTX2BufferReader( this.arrayBuffer, idByteLength, headerByteLength, littleEndian );\n\n\t\tthis.header = {\n\n\t\t\tvkFormat: headerReader.nextUint32(),\n\t\t\ttypeSize: headerReader.nextUint32(),\n\t\t\tpixelWidth: headerReader.nextUint32(),\n\t\t\tpixelHeight: headerReader.nextUint32(),\n\t\t\tpixelDepth: headerReader.nextUint32(),\n\t\t\tarrayElementCount: headerReader.nextUint32(),\n\t\t\tfaceCount: headerReader.nextUint32(),\n\t\t\tlevelCount: headerReader.nextUint32(),\n\n\t\t\tsupercompressionScheme: headerReader.nextUint32(),\n\n\t\t\tdfdByteOffset: headerReader.nextUint32(),\n\t\t\tdfdByteLength: headerReader.nextUint32(),\n\t\t\tkvdByteOffset: headerReader.nextUint32(),\n\t\t\tkvdByteLength: headerReader.nextUint32(),\n\t\t\tsgdByteOffset: headerReader.nextUint64(),\n\t\t\tsgdByteLength: headerReader.nextUint64(),\n\n\t\t};\n\n\t\tif ( this.header.pixelDepth > 0 ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Only 2D textures are currently supported.' );\n\n\t\t}\n\n\t\tif ( this.header.arrayElementCount > 1 ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Array textures are not currently supported.' );\n\n\t\t}\n\n\t\tif ( this.header.faceCount > 1 ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Cube textures are not currently supported.' );\n\n\t\t}\n\n\n\t\t///////////////////////////////////////////////////\n\t\t// Level index\n\t\t///////////////////////////////////////////////////\n\n\t\tvar levelByteLength = this.header.levelCount * 3 * 8;\n\t\tvar levelReader = new KTX2BufferReader( this.arrayBuffer, idByteLength + headerByteLength, levelByteLength, littleEndian );\n\n\t\tthis.levels = [];\n\n\t\tfor ( var i = 0; i < this.header.levelCount; i ++ ) {\n\n\t\t\tthis.levels.push( {\n\n\t\t\t\tbyteOffset: levelReader.nextUint64(),\n\t\t\t\tbyteLength: levelReader.nextUint64(),\n\t\t\t\tuncompressedByteLength: levelReader.nextUint64(),\n\n\t\t\t} );\n\n\t\t}\n\n\n\t\t///////////////////////////////////////////////////\n\t\t// Data Format Descriptor (DFD)\n\t\t///////////////////////////////////////////////////\n\n\t\tvar dfdReader = new KTX2BufferReader(\n\t\t\tthis.arrayBuffer,\n\t\t\tthis.header.dfdByteOffset,\n\t\t\tthis.header.dfdByteLength,\n\t\t\tlittleEndian\n\t\t);\n\n\t\tconst sampleStart = 6;\n\t\tconst sampleWords = 4;\n\n\t\tthis.dfd = {\n\n\t\t\tvendorId: dfdReader.skip( 4 /* totalSize */ ).nextUint16(),\n\t\t\tversionNumber: dfdReader.skip( 2 /* descriptorType */ ).nextUint16(),\n\t\t\tdescriptorBlockSize: dfdReader.nextUint16(),\n\t\t\tcolorModel: dfdReader.nextUint8(),\n\t\t\tcolorPrimaries: dfdReader.nextUint8(),\n\t\t\ttransferFunction: dfdReader.nextUint8(),\n\t\t\tflags: dfdReader.nextUint8(),\n\t\t\ttexelBlockDimension: {\n\t\t\t\tx: dfdReader.nextUint8() + 1,\n\t\t\t\ty: dfdReader.nextUint8() + 1,\n\t\t\t\tz: dfdReader.nextUint8() + 1,\n\t\t\t\tw: dfdReader.nextUint8() + 1,\n\t\t\t},\n\t\t\tbytesPlane0: dfdReader.nextUint8(),\n\t\t\tnumSamples: 0,\n\t\t\tsamples: [],\n\n\t\t};\n\n\t\tthis.dfd.numSamples = ( this.dfd.descriptorBlockSize / 4 - sampleStart ) / sampleWords;\n\n\t\tdfdReader.skip( 7 /* bytesPlane[1-7] */ );\n\n\t\tfor ( var i = 0; i < this.dfd.numSamples; i ++ ) {\n\n\t\t\tthis.dfd.samples[ i ] = {\n\n\t\t\t\tchannelID: dfdReader.skip( 3 /* bitOffset + bitLength */ ).nextUint8(),\n\t\t\t\t// ... remainder not implemented.\n\n\t\t\t};\n\n\t\t\tdfdReader.skip( 12 /* samplePosition[0-3], lower, upper */ );\n\n\t\t}\n\n\t\tif ( this.header.vkFormat !== 0x00 /* VK_FORMAT_UNDEFINED */ &&\n\t\t\t ! ( this.header.supercompressionScheme === 1 /* BasisLZ */ ||\n\t\t\t\tthis.dfd.colorModel === DFDModel.UASTC ) ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Only Basis Universal supercompression is currently supported.' );\n\n\t\t}\n\n\n\t\t///////////////////////////////////////////////////\n\t\t// Key/Value Data (KVD)\n\t\t///////////////////////////////////////////////////\n\n\t\t// Not implemented.\n\t\tthis.kvd = {};\n\n\n\t\t///////////////////////////////////////////////////\n\t\t// Supercompression Global Data (SGD)\n\t\t///////////////////////////////////////////////////\n\n\t\tthis.sgd = {};\n\n\t\tif ( this.header.sgdByteLength <= 0 ) return;\n\n\t\tvar sgdReader = new KTX2BufferReader(\n\t\t\tthis.arrayBuffer,\n\t\t\tthis.header.sgdByteOffset,\n\t\t\tthis.header.sgdByteLength,\n\t\t\tlittleEndian\n\t\t);\n\n\t\tthis.sgd.endpointCount = sgdReader.nextUint16();\n\t\tthis.sgd.selectorCount = sgdReader.nextUint16();\n\t\tthis.sgd.endpointsByteLength = sgdReader.nextUint32();\n\t\tthis.sgd.selectorsByteLength = sgdReader.nextUint32();\n\t\tthis.sgd.tablesByteLength = sgdReader.nextUint32();\n\t\tthis.sgd.extendedByteLength = sgdReader.nextUint32();\n\t\tthis.sgd.imageDescs = [];\n\t\tthis.sgd.endpointsData = null;\n\t\tthis.sgd.selectorsData = null;\n\t\tthis.sgd.tablesData = null;\n\t\tthis.sgd.extendedData = null;\n\n\t\tfor ( var i = 0; i < this.header.levelCount; i ++ ) {\n\n\t\t\tthis.sgd.imageDescs.push( {\n\n\t\t\t\timageFlags: sgdReader.nextUint32(),\n\t\t\t\trgbSliceByteOffset: sgdReader.nextUint32(),\n\t\t\t\trgbSliceByteLength: sgdReader.nextUint32(),\n\t\t\t\talphaSliceByteOffset: sgdReader.nextUint32(),\n\t\t\t\talphaSliceByteLength: sgdReader.nextUint32(),\n\n\t\t\t} );\n\n\t\t}\n\n\t\tvar endpointsByteOffset = this.header.sgdByteOffset + sgdReader.offset;\n\t\tvar selectorsByteOffset = endpointsByteOffset + this.sgd.endpointsByteLength;\n\t\tvar tablesByteOffset = selectorsByteOffset + this.sgd.selectorsByteLength;\n\t\tvar extendedByteOffset = tablesByteOffset + this.sgd.tablesByteLength;\n\n\t\tthis.sgd.endpointsData = new Uint8Array( this.arrayBuffer, endpointsByteOffset, this.sgd.endpointsByteLength );\n\t\tthis.sgd.selectorsData = new Uint8Array( this.arrayBuffer, selectorsByteOffset, this.sgd.selectorsByteLength );\n\t\tthis.sgd.tablesData = new Uint8Array( this.arrayBuffer, tablesByteOffset, this.sgd.tablesByteLength );\n\t\tthis.sgd.extendedData = new Uint8Array( this.arrayBuffer, extendedByteOffset, this.sgd.extendedByteLength );\n\n\t}\n\n\tasync initMipmaps( transcoder, config ) {\n\n\t\tawait this.zstd.init();\n\n\t\tvar TranscodeTarget = this.basisModule.TranscodeTarget;\n\t\tvar TextureFormat = this.basisModule.TextureFormat;\n\t\tvar ImageInfo = this.basisModule.ImageInfo;\n\n\t\tvar scope = this;\n\n\t\tvar mipmaps = [];\n\t\tvar width = this.getWidth();\n\t\tvar height = this.getHeight();\n\t\tvar texFormat = this.getTexFormat();\n\t\tvar hasAlpha = this.getAlpha();\n\t\tvar isVideo = false;\n\n\t\t// PVRTC1 transcoders (from both ETC1S and UASTC) only support power of 2 dimensions.\n\t\tvar pvrtcTranscodable = MathUtils.isPowerOfTwo( width ) && MathUtils.isPowerOfTwo( height );\n\n\t\tif ( texFormat === TextureFormat.ETC1S ) {\n\n\t\t\tvar numEndpoints = this.sgd.endpointCount;\n\t\t\tvar numSelectors = this.sgd.selectorCount;\n\t\t\tvar endpoints = this.sgd.endpointsData;\n\t\t\tvar selectors = this.sgd.selectorsData;\n\t\t\tvar tables = this.sgd.tablesData;\n\n\t\t\ttranscoder.decodePalettes( numEndpoints, endpoints, numSelectors, selectors );\n\t\t\ttranscoder.decodeTables( tables );\n\n\t\t}\n\n\n\t\tvar targetFormat;\n\n\t\tif ( config.astcSupported ) {\n\n\t\t\ttargetFormat = TranscodeTarget.ASTC_4x4_RGBA;\n\t\t\tthis.transcodedFormat = RGBA_ASTC_4x4_Format;\n\n\t\t} else if ( config.bptcSupported && texFormat === TextureFormat.UASTC4x4 ) {\n\n\t\t\ttargetFormat = TranscodeTarget.BC7_M5_RGBA;\n\t\t\tthis.transcodedFormat = RGBA_BPTC_Format;\n\n\t\t} else if ( config.dxtSupported ) {\n\n\t\t\ttargetFormat = hasAlpha ? TranscodeTarget.BC3_RGBA : TranscodeTarget.BC1_RGB;\n\t\t\tthis.transcodedFormat = hasAlpha ? RGBA_S3TC_DXT5_Format : RGB_S3TC_DXT1_Format;\n\n\t\t} else if ( config.pvrtcSupported && pvrtcTranscodable ) {\n\n\t\t\ttargetFormat = hasAlpha ? TranscodeTarget.PVRTC1_4_RGBA : TranscodeTarget.PVRTC1_4_RGB;\n\t\t\tthis.transcodedFormat = hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format;\n\n\t\t} else if ( config.etc2Supported ) {\n\n\t\t\ttargetFormat = hasAlpha ? TranscodeTarget.ETC2_RGBA : TranscodeTarget.ETC1_RGB/* subset of ETC2 */;\n\t\t\tthis.transcodedFormat = hasAlpha ? RGBA_ETC2_EAC_Format : RGB_ETC2_Format;\n\n\t\t} else if ( config.etc1Supported ) {\n\n\t\t\ttargetFormat = TranscodeTarget.ETC1_RGB;\n\t\t\tthis.transcodedFormat = RGB_ETC1_Format;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.' );\n\n\t\t\ttargetFormat = TranscodeTarget.RGBA32;\n\t\t\tthis.transcodedFormat = RGBAFormat;\n\n\t\t}\n\n\t\tif ( ! this.basisModule.isFormatSupported( targetFormat, texFormat ) ) {\n\n\t\t\tthrow new Error( 'THREE.KTX2Loader: Selected texture format not supported by current transcoder build.' );\n\n\t\t}\n\n\t\tvar imageDescIndex = 0;\n\n\t\tfor ( var level = 0; level < this.header.levelCount; level ++ ) {\n\n\t\t\tvar levelWidth = Math.ceil( width / Math.pow( 2, level ) );\n\t\t\tvar levelHeight = Math.ceil( height / Math.pow( 2, level ) );\n\n\t\t\tvar numImagesInLevel = 1; // TODO(donmccurdy): Support cubemaps, arrays and 3D.\n\t\t\tvar imageOffsetInLevel = 0;\n\t\t\tvar imageInfo = new ImageInfo( texFormat, levelWidth, levelHeight, level );\n\t\t\tvar levelByteLength = this.levels[ level ].byteLength;\n\t\t\tvar levelUncompressedByteLength = this.levels[ level ].uncompressedByteLength;\n\n\t\t\tfor ( var imageIndex = 0; imageIndex < numImagesInLevel; imageIndex ++ ) {\n\n\t\t\t\tvar result;\n\t\t\t\tvar encodedData;\n\n\t\t\t\tif ( texFormat === TextureFormat.UASTC4x4 ) {\n\n\t\t\t\t\t// UASTC\n\n\t\t\t\t\timageInfo.flags = 0;\n\t\t\t\t\timageInfo.rgbByteOffset = 0;\n\t\t\t\t\timageInfo.rgbByteLength = levelUncompressedByteLength;\n\t\t\t\t\timageInfo.alphaByteOffset = 0;\n\t\t\t\t\timageInfo.alphaByteLength = 0;\n\n\t\t\t\t\tencodedData = new Uint8Array( this.arrayBuffer, this.levels[ level ].byteOffset + imageOffsetInLevel, levelByteLength );\n\n\t\t\t\t\tif ( this.header.supercompressionScheme === 2 /* ZSTD */ ) {\n\n\t\t\t\t\t\tencodedData = this.zstd.decode( encodedData, levelUncompressedByteLength );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = transcoder.transcodeImage( targetFormat, encodedData, imageInfo, 0, hasAlpha, isVideo );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ETC1S\n\n\t\t\t\t\tvar imageDesc = this.sgd.imageDescs[ imageDescIndex ++ ];\n\n\t\t\t\t\timageInfo.flags = imageDesc.imageFlags;\n\t\t\t\t\timageInfo.rgbByteOffset = 0;\n\t\t\t\t\timageInfo.rgbByteLength = imageDesc.rgbSliceByteLength;\n\t\t\t\t\timageInfo.alphaByteOffset = imageDesc.alphaSliceByteOffset > 0 ? imageDesc.rgbSliceByteLength : 0;\n\t\t\t\t\timageInfo.alphaByteLength = imageDesc.alphaSliceByteLength;\n\n\t\t\t\t\tencodedData = new Uint8Array( this.arrayBuffer, this.levels[ level ].byteOffset + imageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength );\n\n\t\t\t\t\tresult = transcoder.transcodeImage( targetFormat, encodedData, imageInfo, 0, isVideo );\n\n\t\t\t\t}\n\n\t\t\t\tif ( result.transcodedImage === undefined ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.KTX2Loader: Unable to transcode image.' );\n\n\t\t\t\t}\n\n\t\t\t\t// Transcoded image is written in memory allocated by WASM. We could avoid copying\n\t\t\t\t// the image by waiting until the image is uploaded to the GPU, then calling\n\t\t\t\t// delete(). However, (1) we don't know if the user will later need to re-upload it\n\t\t\t\t// e.g. after calling texture.clone(), and (2) this code will eventually be in a\n\t\t\t\t// Web Worker, and transferring WASM's memory seems like a very bad idea.\n\t\t\t\tvar levelData = result.transcodedImage.get_typed_memory_view().slice();\n\t\t\t\tresult.transcodedImage.delete();\n\n\t\t\t\tmipmaps.push( { data: levelData, width: levelWidth, height: levelHeight } );\n\t\t\t\timageOffsetInLevel += levelByteLength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tscope.mipmaps = mipmaps;\n\n\t}\n\n\tgetWidth() {\n\n\t\treturn this.header.pixelWidth;\n\n\t}\n\n\tgetHeight() {\n\n\t\treturn this.header.pixelHeight;\n\n\t}\n\n\tgetEncoding() {\n\n\t\treturn this.dfd.transferFunction === 2 /* KHR_DF_TRANSFER_SRGB */\n\t\t\t? sRGBEncoding\n\t\t\t: LinearEncoding;\n\n\t}\n\n\tgetTexFormat() {\n\n\t\tvar TextureFormat = this.basisModule.TextureFormat;\n\n\t\treturn this.dfd.colorModel === DFDModel.UASTC ? TextureFormat.UASTC4x4 : TextureFormat.ETC1S;\n\n\t}\n\n\tgetAlpha() {\n\n\t\tvar TextureFormat = this.basisModule.TextureFormat;\n\n\t\t// TODO(donmccurdy): Handle all channelIDs (i.e. the R & R+G cases),\n\t\t// choosing appropriate transcode target formats or providing queries\n\t\t// for applications so they know what to do with the content.\n\n\t\tif ( this.getTexFormat() === TextureFormat.UASTC4x4 ) {\n\n\t\t\t// UASTC\n\n\t\t\tif ( ( this.dfd.samples[ 0 ].channelID & 0xF ) === DFDChannel.UASTC.RGBA ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// ETC1S\n\n\t\tif ( this.dfd.numSamples === 2 && ( this.dfd.samples[ 1 ].channelID & 0xF ) === DFDChannel.ETC1S.AAA ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tgetPremultiplyAlpha() {\n\n\t\treturn !! ( this.dfd.flags & 1 /* KHR_DF_FLAG_ALPHA_PREMULTIPLIED */ );\n\n\t}\n\n}\n\nclass KTX2BufferReader {\n\n\tconstructor( arrayBuffer, byteOffset, byteLength, littleEndian ) {\n\n\t\tthis.dataView = new DataView( arrayBuffer, byteOffset, byteLength );\n\t\tthis.littleEndian = littleEndian;\n\t\tthis.offset = 0;\n\n\t}\n\n\tnextUint8() {\n\n\t\tvar value = this.dataView.getUint8( this.offset, this.littleEndian );\n\n\t\tthis.offset += 1;\n\n\t\treturn value;\n\n\t}\n\n\tnextUint16() {\n\n\t\tvar value = this.dataView.getUint16( this.offset, this.littleEndian );\n\n\t\tthis.offset += 2;\n\n\t\treturn value;\n\n\t}\n\n\tnextUint32() {\n\n\t\tvar value = this.dataView.getUint32( this.offset, this.littleEndian );\n\n\t\tthis.offset += 4;\n\n\t\treturn value;\n\n\t}\n\n\tnextUint64() {\n\n\t\t// https://stackoverflow.com/questions/53103695/\n\t\tvar left = this.dataView.getUint32( this.offset, this.littleEndian );\n\t\tvar right = this.dataView.getUint32( this.offset + 4, this.littleEndian );\n\t\tvar value = this.littleEndian ? left + ( 2 ** 32 * right ) : ( 2 ** 32 * left ) + right;\n\n\t\tif ( ! Number.isSafeInteger( value ) ) {\n\n\t\t\tconsole.warn( 'THREE.KTX2Loader: ' + value + ' exceeds MAX_SAFE_INTEGER. Precision may be lost.' );\n\n\t\t}\n\n\t\tthis.offset += 8;\n\n\t\treturn value;\n\n\t}\n\n\tskip( bytes ) {\n\n\t\tthis.offset += bytes;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { KTX2Loader };\n"
  },
  {
    "path": "libs/three.js/loaders/KTXLoader.js",
    "content": "import {\n\tCompressedTextureLoader\n} from '../../../build/three.module.js';\n\n/**\n * for description see https://www.khronos.org/opengles/sdk/tools/KTX/\n * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/\n *\n * ported from https://github.com/BabylonJS/Babylon.js/blob/master/src/Tools/babylon.khronosTextureContainer.ts\n */\n\n\nvar KTXLoader = function ( manager ) {\n\n\tCompressedTextureLoader.call( this, manager );\n\n};\n\nKTXLoader.prototype = Object.assign( Object.create( CompressedTextureLoader.prototype ), {\n\n\tconstructor: KTXLoader,\n\n\tparse: function ( buffer, loadMipmaps ) {\n\n\t\tvar ktx = new KhronosTextureContainer( buffer, 1 );\n\n\t\treturn {\n\t\t\tmipmaps: ktx.mipmaps( loadMipmaps ),\n\t\t\twidth: ktx.pixelWidth,\n\t\t\theight: ktx.pixelHeight,\n\t\t\tformat: ktx.glInternalFormat,\n\t\t\tisCubemap: ktx.numberOfFaces === 6,\n\t\t\tmipmapCount: ktx.numberOfMipmapLevels\n\t\t};\n\n\t}\n\n} );\n\nvar KhronosTextureContainer = ( function () {\n\n\t/**\n\t * @param {ArrayBuffer} arrayBuffer- contents of the KTX container file\n\t * @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or\n\t * @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented\n\t * @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented\n\t */\n\tfunction KhronosTextureContainer( arrayBuffer, facesExpected /*, threeDExpected, textureArrayExpected */ ) {\n\n\t\tthis.arrayBuffer = arrayBuffer;\n\n\t\t// Test that it is a ktx formatted file, based on the first 12 bytes, character representation is:\n\t\t// '´', 'K', 'T', 'X', ' ', '1', '1', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n\t\t// 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A\n\t\tvar identifier = new Uint8Array( this.arrayBuffer, 0, 12 );\n\t\tif ( identifier[ 0 ] !== 0xAB ||\n\t\t\tidentifier[ 1 ] !== 0x4B ||\n\t\t\tidentifier[ 2 ] !== 0x54 ||\n\t\t\tidentifier[ 3 ] !== 0x58 ||\n\t\t\tidentifier[ 4 ] !== 0x20 ||\n\t\t\tidentifier[ 5 ] !== 0x31 ||\n\t\t\tidentifier[ 6 ] !== 0x31 ||\n\t\t\tidentifier[ 7 ] !== 0xBB ||\n\t\t\tidentifier[ 8 ] !== 0x0D ||\n\t\t\tidentifier[ 9 ] !== 0x0A ||\n\t\t\tidentifier[ 10 ] !== 0x1A ||\n\t\t\tidentifier[ 11 ] !== 0x0A ) {\n\n\t\t\tconsole.error( 'texture missing KTX identifier' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// load the reset of the header in native 32 bit uint\n\t\tvar dataSize = Uint32Array.BYTES_PER_ELEMENT;\n\t\tvar headerDataView = new DataView( this.arrayBuffer, 12, 13 * dataSize );\n\t\tvar endianness = headerDataView.getUint32( 0, true );\n\t\tvar littleEndian = endianness === 0x04030201;\n\n\t\tthis.glType = headerDataView.getUint32( 1 * dataSize, littleEndian ); // must be 0 for compressed textures\n\t\tthis.glTypeSize = headerDataView.getUint32( 2 * dataSize, littleEndian ); // must be 1 for compressed textures\n\t\tthis.glFormat = headerDataView.getUint32( 3 * dataSize, littleEndian ); // must be 0 for compressed textures\n\t\tthis.glInternalFormat = headerDataView.getUint32( 4 * dataSize, littleEndian ); // the value of arg passed to gl.compressedTexImage2D(,,x,,,,)\n\t\tthis.glBaseInternalFormat = headerDataView.getUint32( 5 * dataSize, littleEndian ); // specify GL_RGB, GL_RGBA, GL_ALPHA, etc (un-compressed only)\n\t\tthis.pixelWidth = headerDataView.getUint32( 6 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage2D(,,,x,,,)\n\t\tthis.pixelHeight = headerDataView.getUint32( 7 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage2D(,,,,x,,)\n\t\tthis.pixelDepth = headerDataView.getUint32( 8 * dataSize, littleEndian ); // level 0 value of arg passed to gl.compressedTexImage3D(,,,,,x,,)\n\t\tthis.numberOfArrayElements = headerDataView.getUint32( 9 * dataSize, littleEndian ); // used for texture arrays\n\t\tthis.numberOfFaces = headerDataView.getUint32( 10 * dataSize, littleEndian ); // used for cubemap textures, should either be 1 or 6\n\t\tthis.numberOfMipmapLevels = headerDataView.getUint32( 11 * dataSize, littleEndian ); // number of levels; disregard possibility of 0 for compressed textures\n\t\tthis.bytesOfKeyValueData = headerDataView.getUint32( 12 * dataSize, littleEndian ); // the amount of space after the header for meta-data\n\n\t\t// Make sure we have a compressed type.  Not only reduces work, but probably better to let dev know they are not compressing.\n\t\tif ( this.glType !== 0 ) {\n\n\t\t\tconsole.warn( 'only compressed formats currently supported' );\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// value of zero is an indication to generate mipmaps @ runtime.  Not usually allowed for compressed, so disregard.\n\t\t\tthis.numberOfMipmapLevels = Math.max( 1, this.numberOfMipmapLevels );\n\n\t\t}\n\n\t\tif ( this.pixelHeight === 0 || this.pixelDepth !== 0 ) {\n\n\t\t\tconsole.warn( 'only 2D textures currently supported' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.numberOfArrayElements !== 0 ) {\n\n\t\t\tconsole.warn( 'texture arrays not currently supported' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.numberOfFaces !== facesExpected ) {\n\n\t\t\tconsole.warn( 'number of faces expected' + facesExpected + ', but found ' + this.numberOfFaces );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// we now have a completely validated file, so could use existence of loadType as success\n\t\t// would need to make this more elaborate & adjust checks above to support more than one load type\n\t\tthis.loadType = KhronosTextureContainer.COMPRESSED_2D;\n\n\t}\n\n\t// return mipmaps for js\n\tKhronosTextureContainer.prototype.mipmaps = function ( loadMipmaps ) {\n\n\t\tvar mipmaps = [];\n\n\t\t// initialize width & height for level 1\n\t\tvar dataOffset = KhronosTextureContainer.HEADER_LEN + this.bytesOfKeyValueData;\n\t\tvar width = this.pixelWidth;\n\t\tvar height = this.pixelHeight;\n\t\tvar mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;\n\n\t\tfor ( var level = 0; level < mipmapCount; level ++ ) {\n\n\t\t\tvar imageSize = new Int32Array( this.arrayBuffer, dataOffset, 1 )[ 0 ]; // size per face, since not supporting array cubemaps\n\t\t\tdataOffset += 4; // size of the image + 4 for the imageSize field\n\n\t\t\tfor ( var face = 0; face < this.numberOfFaces; face ++ ) {\n\n\t\t\t\tvar byteArray = new Uint8Array( this.arrayBuffer, dataOffset, imageSize );\n\n\t\t\t\tmipmaps.push( { 'data': byteArray, 'width': width, 'height': height } );\n\n\t\t\t\tdataOffset += imageSize;\n\t\t\t\tdataOffset += 3 - ( ( imageSize + 3 ) % 4 ); // add padding for odd sized image\n\n\t\t\t}\n\n\t\t\twidth = Math.max( 1.0, width * 0.5 );\n\t\t\theight = Math.max( 1.0, height * 0.5 );\n\n\t\t}\n\n\t\treturn mipmaps;\n\n\t};\n\n\tKhronosTextureContainer.HEADER_LEN = 12 + ( 13 * 4 ); // identifier + header elements (not including key value meta-data pairs)\n\t// load types\n\tKhronosTextureContainer.COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()\n\tKhronosTextureContainer.COMPRESSED_3D = 1; // uses a gl.compressedTexImage3D()\n\tKhronosTextureContainer.TEX_2D = 2; // uses a gl.texImage2D()\n\tKhronosTextureContainer.TEX_3D = 3; // uses a gl.texImage3D()\n\n\treturn KhronosTextureContainer;\n\n}() );\n\nexport { KTXLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/LDrawLoader.js",
    "content": "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshPhongMaterial,\n\tMeshStandardMaterial,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector3\n} from '../../../build/three.module.js';\n\nvar LDrawLoader = ( function () {\n\n\tvar conditionalLineVertShader = /* glsl */`\n\tattribute vec3 control0;\n\tattribute vec3 control1;\n\tattribute vec3 direction;\n\tvarying float discardFlag;\n\n\t#include <common>\n\t#include <color_pars_vertex>\n\t#include <fog_pars_vertex>\n\t#include <logdepthbuf_pars_vertex>\n\t#include <clipping_planes_pars_vertex>\n\tvoid main() {\n\t\t#include <color_vertex>\n\n\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t// Transform the line segment ends and control points into camera clip space\n\t\tvec4 c0 = projectionMatrix * modelViewMatrix * vec4( control0, 1.0 );\n\t\tvec4 c1 = projectionMatrix * modelViewMatrix * vec4( control1, 1.0 );\n\t\tvec4 p0 = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\tvec4 p1 = projectionMatrix * modelViewMatrix * vec4( position + direction, 1.0 );\n\n\t\tc0.xy /= c0.w;\n\t\tc1.xy /= c1.w;\n\t\tp0.xy /= p0.w;\n\t\tp1.xy /= p1.w;\n\n\t\t// Get the direction of the segment and an orthogonal vector\n\t\tvec2 dir = p1.xy - p0.xy;\n\t\tvec2 norm = vec2( -dir.y, dir.x );\n\n\t\t// Get control point directions from the line\n\t\tvec2 c0dir = c0.xy - p1.xy;\n\t\tvec2 c1dir = c1.xy - p1.xy;\n\n\t\t// If the vectors to the controls points are pointed in different directions away\n\t\t// from the line segment then the line should not be drawn.\n\t\tfloat d0 = dot( normalize( norm ), normalize( c0dir ) );\n\t\tfloat d1 = dot( normalize( norm ), normalize( c1dir ) );\n\t\tdiscardFlag = float( sign( d0 ) != sign( d1 ) );\n\n\t\t#include <logdepthbuf_vertex>\n\t\t#include <clipping_planes_vertex>\n\t\t#include <fog_vertex>\n\t}\n\t`;\n\n\tvar conditionalLineFragShader = /* glsl */`\n\tuniform vec3 diffuse;\n\tuniform float opacity;\n\tvarying float discardFlag;\n\n\t#include <common>\n\t#include <color_pars_fragment>\n\t#include <fog_pars_fragment>\n\t#include <logdepthbuf_pars_fragment>\n\t#include <clipping_planes_pars_fragment>\n\tvoid main() {\n\n\t\tif ( discardFlag > 0.5 ) discard;\n\n\t\t#include <clipping_planes_fragment>\n\t\tvec3 outgoingLight = vec3( 0.0 );\n\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\t#include <logdepthbuf_fragment>\n\t\t#include <color_fragment>\n\t\toutgoingLight = diffuseColor.rgb; // simple shader\n\t\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t\t#include <tonemapping_fragment>\n\t\t#include <encodings_fragment>\n\t\t#include <fog_fragment>\n\t\t#include <premultiplied_alpha_fragment>\n\t}\n\t`;\n\n\n\n\tvar tempVec0 = new Vector3();\n\tvar tempVec1 = new Vector3();\n\tfunction smoothNormals( triangles, lineSegments ) {\n\n\t\tfunction hashVertex( v ) {\n\n\t\t\t// NOTE: 1e2 is pretty coarse but was chosen because it allows edges\n\t\t\t// to be smoothed as expected (see minifig arms). The errors between edges\n\t\t\t// could be due to matrix multiplication.\n\t\t\tvar x = ~ ~ ( v.x * 1e2 );\n\t\t\tvar y = ~ ~ ( v.y * 1e2 );\n\t\t\tvar z = ~ ~ ( v.z * 1e2 );\n\t\t\treturn `${ x },${ y },${ z }`;\n\n\t\t}\n\n\t\tfunction hashEdge( v0, v1 ) {\n\n\t\t\treturn `${ hashVertex( v0 ) }_${ hashVertex( v1 ) }`;\n\n\t\t}\n\n\t\tvar hardEdges = new Set();\n\t\tvar halfEdgeList = {};\n\t\tvar fullHalfEdgeList = {};\n\t\tvar normals = [];\n\n\t\t// Save the list of hard edges by hash\n\t\tfor ( var i = 0, l = lineSegments.length; i < l; i ++ ) {\n\n\t\t\tvar ls = lineSegments[ i ];\n\t\t\tvar v0 = ls.v0;\n\t\t\tvar v1 = ls.v1;\n\t\t\thardEdges.add( hashEdge( v0, v1 ) );\n\t\t\thardEdges.add( hashEdge( v1, v0 ) );\n\n\t\t}\n\n\t\t// track the half edges associated with each triangle\n\t\tfor ( var i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\tvar tri = triangles[ i ];\n\t\t\tfor ( var i2 = 0, l2 = 3; i2 < l2; i2 ++ ) {\n\n\t\t\t\tvar index = i2;\n\t\t\t\tvar next = ( i2 + 1 ) % 3;\n\t\t\t\tvar v0 = tri[ `v${ index }` ];\n\t\t\t\tvar v1 = tri[ `v${ next }` ];\n\t\t\t\tvar hash = hashEdge( v0, v1 );\n\n\t\t\t\t// don't add the triangle if the edge is supposed to be hard\n\t\t\t\tif ( hardEdges.has( hash ) ) continue;\n\t\t\t\thalfEdgeList[ hash ] = tri;\n\t\t\t\tfullHalfEdgeList[ hash ] = tri;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// NOTE: Some of the normals wind up being skewed in an unexpected way because\n\t\t// quads provide more \"influence\" to some vertex normals than a triangle due to\n\t\t// the fact that a quad is made up of two triangles and all triangles are weighted\n\t\t// equally. To fix this quads could be tracked separately so their vertex normals\n\t\t// are weighted appropriately or we could try only adding a normal direction\n\t\t// once per normal.\n\n\t\t// Iterate until we've tried to connect all triangles to share normals\n\t\twhile ( true ) {\n\n\t\t\t// Stop if there are no more triangles left\n\t\t\tvar halfEdges = Object.keys( halfEdgeList );\n\t\t\tif ( halfEdges.length === 0 ) break;\n\n\t\t\t// Exhaustively find all connected triangles\n\t\t\tvar i = 0;\n\t\t\tvar queue = [ fullHalfEdgeList[ halfEdges[ 0 ] ] ];\n\t\t\twhile ( i < queue.length ) {\n\n\t\t\t\t// initialize all vertex normals in this triangle\n\t\t\t\tvar tri = queue[ i ];\n\t\t\t\ti ++;\n\n\t\t\t\tvar faceNormal = tri.faceNormal;\n\t\t\t\tif ( tri.n0 === null ) {\n\n\t\t\t\t\ttri.n0 = faceNormal.clone();\n\t\t\t\t\tnormals.push( tri.n0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( tri.n1 === null ) {\n\n\t\t\t\t\ttri.n1 = faceNormal.clone();\n\t\t\t\t\tnormals.push( tri.n1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( tri.n2 === null ) {\n\n\t\t\t\t\ttri.n2 = faceNormal.clone();\n\t\t\t\t\tnormals.push( tri.n2 );\n\n\t\t\t\t}\n\n\t\t\t\t// Check if any edge is connected to another triangle edge\n\t\t\t\tfor ( var i2 = 0, l2 = 3; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\tvar index = i2;\n\t\t\t\t\tvar next = ( i2 + 1 ) % 3;\n\t\t\t\t\tvar v0 = tri[ `v${ index }` ];\n\t\t\t\t\tvar v1 = tri[ `v${ next }` ];\n\n\t\t\t\t\t// delete this triangle from the list so it won't be found again\n\t\t\t\t\tvar hash = hashEdge( v0, v1 );\n\t\t\t\t\tdelete halfEdgeList[ hash ];\n\n\t\t\t\t\tvar reverseHash = hashEdge( v1, v0 );\n\t\t\t\t\tvar otherTri = fullHalfEdgeList[ reverseHash ];\n\t\t\t\t\tif ( otherTri ) {\n\n\t\t\t\t\t\t// NOTE: If the angle between triangles is > 67.5 degrees then assume it's\n\t\t\t\t\t\t// hard edge. There are some cases where the line segments do not line up exactly\n\t\t\t\t\t\t// with or span multiple triangle edges (see Lunar Vehicle wheels).\n\t\t\t\t\t\tif ( Math.abs( otherTri.faceNormal.dot( tri.faceNormal ) ) < 0.25 ) {\n\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if this triangle has already been traversed then it won't be in\n\t\t\t\t\t\t// the halfEdgeList. If it has not then add it to the queue and delete\n\t\t\t\t\t\t// it so it won't be found again.\n\t\t\t\t\t\tif ( reverseHash in halfEdgeList ) {\n\n\t\t\t\t\t\t\tqueue.push( otherTri );\n\t\t\t\t\t\t\tdelete halfEdgeList[ reverseHash ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Find the matching edge in this triangle and copy the normal vector over\n\t\t\t\t\t\tfor ( var i3 = 0, l3 = 3; i3 < l3; i3 ++ ) {\n\n\t\t\t\t\t\t\tvar otherIndex = i3;\n\t\t\t\t\t\t\tvar otherNext = ( i3 + 1 ) % 3;\n\t\t\t\t\t\t\tvar otherV0 = otherTri[ `v${ otherIndex }` ];\n\t\t\t\t\t\t\tvar otherV1 = otherTri[ `v${ otherNext }` ];\n\n\t\t\t\t\t\t\tvar otherHash = hashEdge( otherV0, otherV1 );\n\t\t\t\t\t\t\tif ( otherHash === reverseHash ) {\n\n\t\t\t\t\t\t\t\tif ( otherTri[ `n${ otherIndex }` ] === null ) {\n\n\t\t\t\t\t\t\t\t\tvar norm = tri[ `n${ next }` ];\n\t\t\t\t\t\t\t\t\totherTri[ `n${ otherIndex }` ] = norm;\n\t\t\t\t\t\t\t\t\tnorm.add( otherTri.faceNormal );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ( otherTri[ `n${ otherNext }` ] === null ) {\n\n\t\t\t\t\t\t\t\t\tvar norm = tri[ `n${ index }` ];\n\t\t\t\t\t\t\t\t\totherTri[ `n${ otherNext }` ] = norm;\n\t\t\t\t\t\t\t\t\tnorm.add( otherTri.faceNormal );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// The normals of each face have been added up so now we average them by normalizing the vector.\n\t\tfor ( var i = 0, l = normals.length; i < l; i ++ ) {\n\n\t\t\tnormals[ i ].normalize();\n\n\t\t}\n\n\t}\n\n\tfunction isPrimitiveType( type ) {\n\n\t\treturn /primitive/i.test( type ) || type === 'Subpart';\n\n\t}\n\n\tfunction LineParser( line, lineNumber ) {\n\n\t\tthis.line = line;\n\t\tthis.lineLength = line.length;\n\t\tthis.currentCharIndex = 0;\n\t\tthis.currentChar = ' ';\n\t\tthis.lineNumber = lineNumber;\n\n\t}\n\n\tLineParser.prototype = {\n\n\t\tconstructor: LineParser,\n\n\t\tseekNonSpace: function () {\n\n\t\t\twhile ( this.currentCharIndex < this.lineLength ) {\n\n\t\t\t\tthis.currentChar = this.line.charAt( this.currentCharIndex );\n\n\t\t\t\tif ( this.currentChar !== ' ' && this.currentChar !== '\\t' ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tthis.currentCharIndex ++;\n\n\t\t\t}\n\n\t\t},\n\n\t\tgetToken: function () {\n\n\t\t\tvar pos0 = this.currentCharIndex ++;\n\n\t\t\t// Seek space\n\t\t\twhile ( this.currentCharIndex < this.lineLength ) {\n\n\t\t\t\tthis.currentChar = this.line.charAt( this.currentCharIndex );\n\n\t\t\t\tif ( this.currentChar === ' ' || this.currentChar === '\\t' ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tthis.currentCharIndex ++;\n\n\t\t\t}\n\n\t\t\tvar pos1 = this.currentCharIndex;\n\n\t\t\tthis.seekNonSpace();\n\n\t\t\treturn this.line.substring( pos0, pos1 );\n\n\t\t},\n\n\t\tgetRemainingString: function () {\n\n\t\t\treturn this.line.substring( this.currentCharIndex, this.lineLength );\n\n\t\t},\n\n\t\tisAtTheEnd: function () {\n\n\t\t\treturn this.currentCharIndex >= this.lineLength;\n\n\t\t},\n\n\t\tsetToEnd: function () {\n\n\t\t\tthis.currentCharIndex = this.lineLength;\n\n\t\t},\n\n\t\tgetLineNumberString: function () {\n\n\t\t\treturn this.lineNumber >= 0 ? ' at line ' + this.lineNumber : '';\n\n\t\t}\n\n\n\t};\n\n\tfunction sortByMaterial( a, b ) {\n\n\t\tif ( a.colourCode === b.colourCode ) {\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( a.colourCode < b.colourCode ) {\n\n\t\t\treturn - 1;\n\n\t\t}\n\n\t\treturn 1;\n\n\t}\n\n\tfunction createObject( elements, elementSize, isConditionalSegments ) {\n\n\t\t// Creates a LineSegments (elementSize = 2) or a Mesh (elementSize = 3 )\n\t\t// With per face / segment material, implemented with mesh groups and materials array\n\n\t\t// Sort the triangles or line segments by colour code to make later the mesh groups\n\t\telements.sort( sortByMaterial );\n\n\t\tvar positions = [];\n\t\tvar normals = [];\n\t\tvar materials = [];\n\n\t\tvar bufferGeometry = new BufferGeometry();\n\t\tvar prevMaterial = null;\n\t\tvar index0 = 0;\n\t\tvar numGroupVerts = 0;\n\n\t\tfor ( var iElem = 0, nElem = elements.length; iElem < nElem; iElem ++ ) {\n\n\t\t\tvar elem = elements[ iElem ];\n\t\t\tvar v0 = elem.v0;\n\t\t\tvar v1 = elem.v1;\n\t\t\t// Note that LDraw coordinate system is rotated 180 deg. in the X axis w.r.t. Three.js's one\n\t\t\tpositions.push( v0.x, v0.y, v0.z, v1.x, v1.y, v1.z );\n\t\t\tif ( elementSize === 3 ) {\n\n\t\t\t\tpositions.push( elem.v2.x, elem.v2.y, elem.v2.z );\n\n\t\t\t\tvar n0 = elem.n0 || elem.faceNormal;\n\t\t\t\tvar n1 = elem.n1 || elem.faceNormal;\n\t\t\t\tvar n2 = elem.n2 || elem.faceNormal;\n\t\t\t\tnormals.push( n0.x, n0.y, n0.z );\n\t\t\t\tnormals.push( n1.x, n1.y, n1.z );\n\t\t\t\tnormals.push( n2.x, n2.y, n2.z );\n\n\t\t\t}\n\n\t\t\tif ( prevMaterial !== elem.material ) {\n\n\t\t\t\tif ( prevMaterial !== null ) {\n\n\t\t\t\t\tbufferGeometry.addGroup( index0, numGroupVerts, materials.length - 1 );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.push( elem.material );\n\n\t\t\t\tprevMaterial = elem.material;\n\t\t\t\tindex0 = iElem * elementSize;\n\t\t\t\tnumGroupVerts = elementSize;\n\n\t\t\t} else {\n\n\t\t\t\tnumGroupVerts += elementSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( numGroupVerts > 0 ) {\n\n\t\t\tbufferGeometry.addGroup( index0, Infinity, materials.length - 1 );\n\n\t\t}\n\n\t\tbufferGeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tif ( elementSize === 3 ) {\n\n\t\t\tbufferGeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t}\n\n\t\tvar object3d = null;\n\n\t\tif ( elementSize === 2 ) {\n\n\t\t\tobject3d = new LineSegments( bufferGeometry, materials );\n\n\t\t} else if ( elementSize === 3 ) {\n\n\t\t\tobject3d = new Mesh( bufferGeometry, materials );\n\n\t\t}\n\n\t\tif ( isConditionalSegments ) {\n\n\t\t\tobject3d.isConditionalLine = true;\n\n\t\t\tvar controlArray0 = new Float32Array( elements.length * 3 * 2 );\n\t\t\tvar controlArray1 = new Float32Array( elements.length * 3 * 2 );\n\t\t\tvar directionArray = new Float32Array( elements.length * 3 * 2 );\n\t\t\tfor ( var i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\t\tvar os = elements[ i ];\n\t\t\t\tvar c0 = os.c0;\n\t\t\t\tvar c1 = os.c1;\n\t\t\t\tvar v0 = os.v0;\n\t\t\t\tvar v1 = os.v1;\n\t\t\t\tvar index = i * 3 * 2;\n\t\t\t\tcontrolArray0[ index + 0 ] = c0.x;\n\t\t\t\tcontrolArray0[ index + 1 ] = c0.y;\n\t\t\t\tcontrolArray0[ index + 2 ] = c0.z;\n\t\t\t\tcontrolArray0[ index + 3 ] = c0.x;\n\t\t\t\tcontrolArray0[ index + 4 ] = c0.y;\n\t\t\t\tcontrolArray0[ index + 5 ] = c0.z;\n\n\t\t\t\tcontrolArray1[ index + 0 ] = c1.x;\n\t\t\t\tcontrolArray1[ index + 1 ] = c1.y;\n\t\t\t\tcontrolArray1[ index + 2 ] = c1.z;\n\t\t\t\tcontrolArray1[ index + 3 ] = c1.x;\n\t\t\t\tcontrolArray1[ index + 4 ] = c1.y;\n\t\t\t\tcontrolArray1[ index + 5 ] = c1.z;\n\n\t\t\t\tdirectionArray[ index + 0 ] = v1.x - v0.x;\n\t\t\t\tdirectionArray[ index + 1 ] = v1.y - v0.y;\n\t\t\t\tdirectionArray[ index + 2 ] = v1.z - v0.z;\n\t\t\t\tdirectionArray[ index + 3 ] = v1.x - v0.x;\n\t\t\t\tdirectionArray[ index + 4 ] = v1.y - v0.y;\n\t\t\t\tdirectionArray[ index + 5 ] = v1.z - v0.z;\n\n\t\t\t}\n\n\t\t\tbufferGeometry.setAttribute( 'control0', new BufferAttribute( controlArray0, 3, false ) );\n\t\t\tbufferGeometry.setAttribute( 'control1', new BufferAttribute( controlArray1, 3, false ) );\n\t\t\tbufferGeometry.setAttribute( 'direction', new BufferAttribute( directionArray, 3, false ) );\n\n\t\t}\n\n\t\treturn object3d;\n\n\t}\n\n\t//\n\n\tfunction LDrawLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t\t// This is a stack of 'parse scopes' with one level per subobject loaded file.\n\t\t// Each level contains a material lib and also other runtime variables passed between parent and child subobjects\n\t\t// When searching for a material code, the stack is read from top of the stack to bottom\n\t\t// Each material library is an object map keyed by colour codes.\n\t\tthis.parseScopesStack = null;\n\n\t\t// Array of THREE.Material\n\t\tthis.materials = [];\n\n\t\t// Not using THREE.Cache here because it returns the previous HTML error response instead of calling onError()\n\t\t// This also allows to handle the embedded text files (\"0 FILE\" lines)\n\t\tthis.subobjectCache = {};\n\n\t\t// This object is a map from file names to paths. It agilizes the paths search. If it is not set then files will be searched by trial and error.\n\t\tthis.fileMap = null;\n\n\t\t// Add default main triangle and line edge materials (used in piecess that can be coloured with a main color)\n\t\tthis.setMaterials( [\n\t\t\tthis.parseColourMetaDirective( new LineParser( 'Main_Colour CODE 16 VALUE #FF8080 EDGE #333333' ) ),\n\t\t\tthis.parseColourMetaDirective( new LineParser( 'Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333' ) )\n\t\t] );\n\n\t\t// If this flag is set to true, each subobject will be a Object.\n\t\t// If not (the default), only one object which contains all the merged primitives will be created.\n\t\tthis.separateObjects = false;\n\n\t\t// If this flag is set to true the vertex normals will be smoothed.\n\t\tthis.smoothNormals = true;\n\n\t}\n\n\t// Special surface finish tag types.\n\t// Note: \"MATERIAL\" tag (e.g. GLITTER, SPECKLE) is not implemented\n\tLDrawLoader.FINISH_TYPE_DEFAULT = 0;\n\tLDrawLoader.FINISH_TYPE_CHROME = 1;\n\tLDrawLoader.FINISH_TYPE_PEARLESCENT = 2;\n\tLDrawLoader.FINISH_TYPE_RUBBER = 3;\n\tLDrawLoader.FINISH_TYPE_MATTE_METALLIC = 4;\n\tLDrawLoader.FINISH_TYPE_METAL = 5;\n\n\t// State machine to search a subobject path.\n\t// The LDraw standard establishes these various possible subfolders.\n\tLDrawLoader.FILE_LOCATION_AS_IS = 0;\n\tLDrawLoader.FILE_LOCATION_TRY_PARTS = 1;\n\tLDrawLoader.FILE_LOCATION_TRY_P = 2;\n\tLDrawLoader.FILE_LOCATION_TRY_MODELS = 3;\n\tLDrawLoader.FILE_LOCATION_TRY_RELATIVE = 4;\n\tLDrawLoader.FILE_LOCATION_TRY_ABSOLUTE = 5;\n\tLDrawLoader.FILE_LOCATION_NOT_FOUND = 6;\n\n\tLDrawLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: LDrawLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( ! this.fileMap ) {\n\n\t\t\t\tthis.fileMap = {};\n\n\t\t\t}\n\n\t\t\tvar scope = this;\n\n\t\t\tvar fileLoader = new FileLoader( this.manager );\n\t\t\tfileLoader.setPath( this.path );\n\t\t\tfileLoader.setRequestHeader( this.requestHeader );\n\t\t\tfileLoader.setWithCredentials( this.withCredentials );\n\t\t\tfileLoader.load( url, function ( text ) {\n\n\t\t\t\tscope.processObject( text, onLoad, null, url );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( text, path, onLoad ) {\n\n\t\t\t// Async parse.  This function calls onParse with the parsed THREE.Object3D as parameter\n\n\t\t\tthis.processObject( text, onLoad, null, path );\n\n\t\t},\n\n\t\tsetMaterials: function ( materials ) {\n\n\t\t\t// Clears parse scopes stack, adds new scope with material library\n\n\t\t\tthis.parseScopesStack = [];\n\n\t\t\tthis.newParseScopeLevel( materials );\n\n\t\t\tthis.getCurrentParseScope().isFromParse = false;\n\n\t\t\tthis.materials = materials;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFileMap: function ( fileMap ) {\n\n\t\t\tthis.fileMap = fileMap;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnewParseScopeLevel: function ( materials ) {\n\n\t\t\t// Adds a new scope level, assign materials to it and returns it\n\n\t\t\tvar matLib = {};\n\n\t\t\tif ( materials ) {\n\n\t\t\t\tfor ( var i = 0, n = materials.length; i < n; i ++ ) {\n\n\t\t\t\t\tvar material = materials[ i ];\n\t\t\t\t\tmatLib[ material.userData.code ] = material;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar topParseScope = this.getCurrentParseScope();\n\t\t\tvar newParseScope = {\n\n\t\t\t\tlib: matLib,\n\t\t\t\turl: null,\n\n\t\t\t\t// Subobjects\n\t\t\t\tsubobjects: null,\n\t\t\t\tnumSubobjects: 0,\n\t\t\t\tsubobjectIndex: 0,\n\t\t\t\tinverted: false,\n\t\t\t\tcategory: null,\n\t\t\t\tkeywords: null,\n\n\t\t\t\t// Current subobject\n\t\t\t\tcurrentFileName: null,\n\t\t\t\tmainColourCode: topParseScope ? topParseScope.mainColourCode : '16',\n\t\t\t\tmainEdgeColourCode: topParseScope ? topParseScope.mainEdgeColourCode : '24',\n\t\t\t\tcurrentMatrix: new Matrix4(),\n\t\t\t\tmatrix: new Matrix4(),\n\n\t\t\t\t// If false, it is a root material scope previous to parse\n\t\t\t\tisFromParse: true,\n\n\t\t\t\ttriangles: null,\n\t\t\t\tlineSegments: null,\n\t\t\t\tconditionalSegments: null,\n\n\t\t\t\t// If true, this object is the start of a construction step\n\t\t\t\tstartingConstructionStep: false\n\t\t\t};\n\n\t\t\tthis.parseScopesStack.push( newParseScope );\n\n\t\t\treturn newParseScope;\n\n\t\t},\n\n\t\tremoveScopeLevel: function () {\n\n\t\t\tthis.parseScopesStack.pop();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddMaterial: function ( material ) {\n\n\t\t\t// Adds a material to the material library which is on top of the parse scopes stack. And also to the materials array\n\n\t\t\tvar matLib = this.getCurrentParseScope().lib;\n\n\t\t\tif ( ! matLib[ material.userData.code ] ) {\n\n\t\t\t\tthis.materials.push( material );\n\n\t\t\t}\n\n\t\t\tmatLib[ material.userData.code ] = material;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetMaterial: function ( colourCode ) {\n\n\t\t\t// Given a colour code search its material in the parse scopes stack\n\n\t\t\tif ( colourCode.startsWith( '0x2' ) ) {\n\n\t\t\t\t// Special 'direct' material value (RGB colour)\n\n\t\t\t\tvar colour = colourCode.substring( 3 );\n\n\t\t\t\treturn this.parseColourMetaDirective( new LineParser( 'Direct_Color_' + colour + ' CODE -1 VALUE #' + colour + ' EDGE #' + colour + '' ) );\n\n\t\t\t}\n\n\t\t\tfor ( var i = this.parseScopesStack.length - 1; i >= 0; i -- ) {\n\n\t\t\t\tvar material = this.parseScopesStack[ i ].lib[ colourCode ];\n\n\t\t\t\tif ( material ) {\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Material was not found\n\t\t\treturn null;\n\n\t\t},\n\n\t\tgetParentParseScope: function () {\n\n\t\t\tif ( this.parseScopesStack.length > 1 ) {\n\n\t\t\t\treturn this.parseScopesStack[ this.parseScopesStack.length - 2 ];\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\tgetCurrentParseScope: function () {\n\n\t\t\tif ( this.parseScopesStack.length > 0 ) {\n\n\t\t\t\treturn this.parseScopesStack[ this.parseScopesStack.length - 1 ];\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\tparseColourMetaDirective: function ( lineParser ) {\n\n\t\t\t// Parses a colour definition and returns a THREE.Material or null if error\n\n\t\t\tvar code = null;\n\n\t\t\t// Triangle and line colours\n\t\t\tvar colour = 0xFF00FF;\n\t\t\tvar edgeColour = 0xFF00FF;\n\n\t\t\t// Transparency\n\t\t\tvar alpha = 1;\n\t\t\tvar isTransparent = false;\n\t\t\t// Self-illumination:\n\t\t\tvar luminance = 0;\n\n\t\t\tvar finishType = LDrawLoader.FINISH_TYPE_DEFAULT;\n\t\t\tvar canHaveEnvMap = true;\n\n\t\t\tvar edgeMaterial = null;\n\n\t\t\tvar name = lineParser.getToken();\n\t\t\tif ( ! name ) {\n\n\t\t\t\tthrow 'LDrawLoader: Material name was expected after \"!COLOUR tag' + lineParser.getLineNumberString() + '.';\n\n\t\t\t}\n\n\t\t\t// Parse tag tokens and their parameters\n\t\t\tvar token = null;\n\t\t\twhile ( true ) {\n\n\t\t\t\ttoken = lineParser.getToken();\n\n\t\t\t\tif ( ! token ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( token.toUpperCase() ) {\n\n\t\t\t\t\tcase 'CODE':\n\n\t\t\t\t\t\tcode = lineParser.getToken();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'VALUE':\n\n\t\t\t\t\t\tcolour = lineParser.getToken();\n\t\t\t\t\t\tif ( colour.startsWith( '0x' ) ) {\n\n\t\t\t\t\t\t\tcolour = '#' + colour.substring( 2 );\n\n\t\t\t\t\t\t} else if ( ! colour.startsWith( '#' ) ) {\n\n\t\t\t\t\t\t\tthrow 'LDrawLoader: Invalid colour while parsing material' + lineParser.getLineNumberString() + '.';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EDGE':\n\n\t\t\t\t\t\tedgeColour = lineParser.getToken();\n\t\t\t\t\t\tif ( edgeColour.startsWith( '0x' ) ) {\n\n\t\t\t\t\t\t\tedgeColour = '#' + edgeColour.substring( 2 );\n\n\t\t\t\t\t\t} else if ( ! edgeColour.startsWith( '#' ) ) {\n\n\t\t\t\t\t\t\t// Try to see if edge colour is a colour code\n\t\t\t\t\t\t\tedgeMaterial = this.getMaterial( edgeColour );\n\t\t\t\t\t\t\tif ( ! edgeMaterial ) {\n\n\t\t\t\t\t\t\t\tthrow 'LDrawLoader: Invalid edge colour while parsing material' + lineParser.getLineNumberString() + '.';\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Get the edge material for this triangle material\n\t\t\t\t\t\t\tedgeMaterial = edgeMaterial.userData.edgeMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ALPHA':\n\n\t\t\t\t\t\talpha = parseInt( lineParser.getToken() );\n\n\t\t\t\t\t\tif ( isNaN( alpha ) ) {\n\n\t\t\t\t\t\t\tthrow 'LDrawLoader: Invalid alpha value in material definition' + lineParser.getLineNumberString() + '.';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\talpha = Math.max( 0, Math.min( 1, alpha / 255 ) );\n\n\t\t\t\t\t\tif ( alpha < 1 ) {\n\n\t\t\t\t\t\t\tisTransparent = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LUMINANCE':\n\n\t\t\t\t\t\tluminance = parseInt( lineParser.getToken() );\n\n\t\t\t\t\t\tif ( isNaN( luminance ) ) {\n\n\t\t\t\t\t\t\tthrow 'LDrawLoader: Invalid luminance value in material definition' + LineParser.getLineNumberString() + '.';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tluminance = Math.max( 0, Math.min( 1, luminance / 255 ) );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CHROME':\n\t\t\t\t\t\tfinishType = LDrawLoader.FINISH_TYPE_CHROME;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PEARLESCENT':\n\t\t\t\t\t\tfinishType = LDrawLoader.FINISH_TYPE_PEARLESCENT;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RUBBER':\n\t\t\t\t\t\tfinishType = LDrawLoader.FINISH_TYPE_RUBBER;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'MATTE_METALLIC':\n\t\t\t\t\t\tfinishType = LDrawLoader.FINISH_TYPE_MATTE_METALLIC;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'METAL':\n\t\t\t\t\t\tfinishType = LDrawLoader.FINISH_TYPE_METAL;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'MATERIAL':\n\t\t\t\t\t\t// Not implemented\n\t\t\t\t\t\tlineParser.setToEnd();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow 'LDrawLoader: Unknown token \"' + token + '\" while parsing material' + lineParser.getLineNumberString() + '.';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar material = null;\n\n\t\t\tswitch ( finishType ) {\n\n\t\t\t\tcase LDrawLoader.FINISH_TYPE_DEFAULT:\n\n\t\t\t\t\tmaterial = new MeshStandardMaterial( { color: colour, roughness: 0.3, envMapIntensity: 0.3, metalness: 0 } );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LDrawLoader.FINISH_TYPE_PEARLESCENT:\n\n\t\t\t\t\t// Try to imitate pearlescency by setting the specular to the complementary of the color, and low shininess\n\t\t\t\t\tvar specular = new Color( colour );\n\t\t\t\t\tvar hsl = specular.getHSL( { h: 0, s: 0, l: 0 } );\n\t\t\t\t\thsl.h = ( hsl.h + 0.5 ) % 1;\n\t\t\t\t\thsl.l = Math.min( 1, hsl.l + ( 1 - hsl.l ) * 0.7 );\n\t\t\t\t\tspecular.setHSL( hsl.h, hsl.s, hsl.l );\n\n\t\t\t\t\tmaterial = new MeshPhongMaterial( { color: colour, specular: specular, shininess: 10, reflectivity: 0.3 } );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LDrawLoader.FINISH_TYPE_CHROME:\n\n\t\t\t\t\t// Mirror finish surface\n\t\t\t\t\tmaterial = new MeshStandardMaterial( { color: colour, roughness: 0, metalness: 1 } );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LDrawLoader.FINISH_TYPE_RUBBER:\n\n\t\t\t\t\t// Rubber finish\n\t\t\t\t\tmaterial = new MeshStandardMaterial( { color: colour, roughness: 0.9, metalness: 0 } );\n\t\t\t\t\tcanHaveEnvMap = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LDrawLoader.FINISH_TYPE_MATTE_METALLIC:\n\n\t\t\t\t\t// Brushed metal finish\n\t\t\t\t\tmaterial = new MeshStandardMaterial( { color: colour, roughness: 0.8, metalness: 0.4 } );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase LDrawLoader.FINISH_TYPE_METAL:\n\n\t\t\t\t\t// Average metal finish\n\t\t\t\t\tmaterial = new MeshStandardMaterial( { color: colour, roughness: 0.2, metalness: 0.85 } );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t// Should not happen\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tmaterial.transparent = isTransparent;\n\t\t\tmaterial.premultipliedAlpha = true;\n\t\t\tmaterial.opacity = alpha;\n\t\t\tmaterial.depthWrite = ! isTransparent;\n\n\t\t\tmaterial.polygonOffset = true;\n\t\t\tmaterial.polygonOffsetFactor = 1;\n\n\t\t\tmaterial.userData.canHaveEnvMap = canHaveEnvMap;\n\n\t\t\tif ( luminance !== 0 ) {\n\n\t\t\t\tmaterial.emissive.set( material.color ).multiplyScalar( luminance );\n\n\t\t\t}\n\n\t\t\tif ( ! edgeMaterial ) {\n\n\t\t\t\t// This is the material used for edges\n\t\t\t\tedgeMaterial = new LineBasicMaterial( {\n\t\t\t\t\tcolor: edgeColour,\n\t\t\t\t\ttransparent: isTransparent,\n\t\t\t\t\topacity: alpha,\n\t\t\t\t\tdepthWrite: ! isTransparent\n\t\t\t\t} );\n\t\t\t\tedgeMaterial.userData.code = code;\n\t\t\t\tedgeMaterial.name = name + ' - Edge';\n\t\t\t\tedgeMaterial.userData.canHaveEnvMap = false;\n\n\t\t\t\t// This is the material used for conditional edges\n\t\t\t\tedgeMaterial.userData.conditionalEdgeMaterial = new ShaderMaterial( {\n\t\t\t\t\tvertexShader: conditionalLineVertShader,\n\t\t\t\t\tfragmentShader: conditionalLineFragShader,\n\t\t\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\t\t\tUniformsLib.fog,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdiffuse: {\n\t\t\t\t\t\t\t\tvalue: new Color( edgeColour )\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\topacity: {\n\t\t\t\t\t\t\t\tvalue: alpha\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t] ),\n\t\t\t\t\tfog: true,\n\t\t\t\t\ttransparent: isTransparent,\n\t\t\t\t\tdepthWrite: ! isTransparent\n\t\t\t\t} );\n\t\t\t\tedgeMaterial.userData.conditionalEdgeMaterial.userData.canHaveEnvMap = false;\n\n\t\t\t}\n\n\t\t\tmaterial.userData.code = code;\n\t\t\tmaterial.name = name;\n\n\t\t\tmaterial.userData.edgeMaterial = edgeMaterial;\n\n\t\t\treturn material;\n\n\t\t},\n\n\t\t//\n\n\t\tobjectParse: function ( text ) {\n\n\t\t\t// Retrieve data from the parent parse scope\n\t\t\tvar parentParseScope = this.getParentParseScope();\n\n\t\t\t// Main colour codes passed to this subobject (or default codes 16 and 24 if it is the root object)\n\t\t\tvar mainColourCode = parentParseScope.mainColourCode;\n\t\t\tvar mainEdgeColourCode = parentParseScope.mainEdgeColourCode;\n\n\t\t\tvar currentParseScope = this.getCurrentParseScope();\n\n\t\t\t// Parse result variables\n\t\t\tvar triangles;\n\t\t\tvar lineSegments;\n\t\t\tvar conditionalSegments;\n\n\t\t\tvar subobjects = [];\n\n\t\t\tvar category = null;\n\t\t\tvar keywords = null;\n\n\t\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t\t}\n\n\t\t\tvar lines = text.split( '\\n' );\n\t\t\tvar numLines = lines.length;\n\t\t\tvar lineIndex = 0;\n\n\t\t\tvar parsingEmbeddedFiles = false;\n\t\t\tvar currentEmbeddedFileName = null;\n\t\t\tvar currentEmbeddedText = null;\n\n\t\t\tvar bfcCertified = false;\n\t\t\tvar bfcCCW = true;\n\t\t\tvar bfcInverted = false;\n\t\t\tvar bfcCull = true;\n\t\t\tvar type = '';\n\n\t\t\tvar startingConstructionStep = false;\n\n\t\t\tvar scope = this;\n\t\t\tfunction parseColourCode( lineParser, forEdge ) {\n\n\t\t\t\t// Parses next colour code and returns a THREE.Material\n\n\t\t\t\tvar colourCode = lineParser.getToken();\n\n\t\t\t\tif ( ! forEdge && colourCode === '16' ) {\n\n\t\t\t\t\tcolourCode = mainColourCode;\n\n\t\t\t\t}\n\n\t\t\t\tif ( forEdge && colourCode === '24' ) {\n\n\t\t\t\t\tcolourCode = mainEdgeColourCode;\n\n\t\t\t\t}\n\n\t\t\t\tvar material = scope.getMaterial( colourCode );\n\n\t\t\t\tif ( ! material ) {\n\n\t\t\t\t\tthrow 'LDrawLoader: Unknown colour code \"' + colourCode + '\" is used' + lineParser.getLineNumberString() + ' but it was not defined previously.';\n\n\t\t\t\t}\n\n\t\t\t\treturn material;\n\n\t\t\t}\n\n\t\t\tfunction parseVector( lp ) {\n\n\t\t\t\tvar v = new Vector3( parseFloat( lp.getToken() ), parseFloat( lp.getToken() ), parseFloat( lp.getToken() ) );\n\n\t\t\t\tif ( ! scope.separateObjects ) {\n\n\t\t\t\t\tv.applyMatrix4( currentParseScope.currentMatrix );\n\n\t\t\t\t}\n\n\t\t\t\treturn v;\n\n\t\t\t}\n\n\t\t\t// Parse all line commands\n\t\t\tfor ( lineIndex = 0; lineIndex < numLines; lineIndex ++ ) {\n\n\t\t\t\tvar line = lines[ lineIndex ];\n\n\t\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\t\tif ( parsingEmbeddedFiles ) {\n\n\t\t\t\t\tif ( line.startsWith( '0 FILE ' ) ) {\n\n\t\t\t\t\t\t// Save previous embedded file in the cache\n\t\t\t\t\t\tthis.subobjectCache[ currentEmbeddedFileName.toLowerCase() ] = currentEmbeddedText;\n\n\t\t\t\t\t\t// New embedded text file\n\t\t\t\t\t\tcurrentEmbeddedFileName = line.substring( 7 );\n\t\t\t\t\t\tcurrentEmbeddedText = '';\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcurrentEmbeddedText += line + '\\n';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar lp = new LineParser( line, lineIndex + 1 );\n\n\t\t\t\tlp.seekNonSpace();\n\n\t\t\t\tif ( lp.isAtTheEnd() ) {\n\n\t\t\t\t\t// Empty line\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// Parse the line type\n\t\t\t\tvar lineType = lp.getToken();\n\n\t\t\t\tswitch ( lineType ) {\n\n\t\t\t\t\t// Line type 0: Comment or META\n\t\t\t\t\tcase '0':\n\n\t\t\t\t\t\t// Parse meta directive\n\t\t\t\t\t\tvar meta = lp.getToken();\n\n\t\t\t\t\t\tif ( meta ) {\n\n\t\t\t\t\t\t\tswitch ( meta ) {\n\n\t\t\t\t\t\t\t\tcase '!LDRAW_ORG':\n\n\t\t\t\t\t\t\t\t\ttype = lp.getToken();\n\n\t\t\t\t\t\t\t\t\tcurrentParseScope.triangles = [];\n\t\t\t\t\t\t\t\t\tcurrentParseScope.lineSegments = [];\n\t\t\t\t\t\t\t\t\tcurrentParseScope.conditionalSegments = [];\n\t\t\t\t\t\t\t\t\tcurrentParseScope.type = type;\n\n\t\t\t\t\t\t\t\t\tvar isRoot = ! parentParseScope.isFromParse;\n\t\t\t\t\t\t\t\t\tif ( isRoot || scope.separateObjects && ! isPrimitiveType( type ) ) {\n\n\t\t\t\t\t\t\t\t\t\tcurrentParseScope.groupObject = new Group();\n\n\t\t\t\t\t\t\t\t\t\tcurrentParseScope.groupObject.userData.startingConstructionStep = currentParseScope.startingConstructionStep;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// If the scale of the object is negated then the triangle winding order\n\t\t\t\t\t\t\t\t\t// needs to be flipped.\n\t\t\t\t\t\t\t\t\tvar matrix = currentParseScope.matrix;\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tmatrix.determinant() < 0 && (\n\t\t\t\t\t\t\t\t\t\t\tscope.separateObjects && isPrimitiveType( type ) ||\n\t\t\t\t\t\t\t\t\t\t\t! scope.separateObjects\n\t\t\t\t\t\t\t\t\t\t) ) {\n\n\t\t\t\t\t\t\t\t\t\tcurrentParseScope.inverted = ! currentParseScope.inverted;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttriangles = currentParseScope.triangles;\n\t\t\t\t\t\t\t\t\tlineSegments = currentParseScope.lineSegments;\n\t\t\t\t\t\t\t\t\tconditionalSegments = currentParseScope.conditionalSegments;\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase '!COLOUR':\n\n\t\t\t\t\t\t\t\t\tvar material = this.parseColourMetaDirective( lp );\n\t\t\t\t\t\t\t\t\tif ( material ) {\n\n\t\t\t\t\t\t\t\t\t\tthis.addMaterial( material );\n\n\t\t\t\t\t\t\t\t\t}\telse {\n\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'LDrawLoader: Error parsing material' + lp.getLineNumberString() );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase '!CATEGORY':\n\n\t\t\t\t\t\t\t\t\tcategory = lp.getToken();\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase '!KEYWORDS':\n\n\t\t\t\t\t\t\t\t\tvar newKeywords = lp.getRemainingString().split( ',' );\n\t\t\t\t\t\t\t\t\tif ( newKeywords.length > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( ! keywords ) {\n\n\t\t\t\t\t\t\t\t\t\t\tkeywords = [];\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tnewKeywords.forEach( function ( keyword ) {\n\n\t\t\t\t\t\t\t\t\t\t\tkeywords.push( keyword.trim() );\n\n\t\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 'FILE':\n\n\t\t\t\t\t\t\t\t\tif ( lineIndex > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\t// Start embedded text files parsing\n\t\t\t\t\t\t\t\t\t\tparsingEmbeddedFiles = true;\n\t\t\t\t\t\t\t\t\t\tcurrentEmbeddedFileName = lp.getRemainingString();\n\t\t\t\t\t\t\t\t\t\tcurrentEmbeddedText = '';\n\n\t\t\t\t\t\t\t\t\t\tbfcCertified = false;\n\t\t\t\t\t\t\t\t\t\tbfcCCW = true;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 'BFC':\n\n\t\t\t\t\t\t\t\t\t// Changes to the backface culling state\n\t\t\t\t\t\t\t\t\twhile ( ! lp.isAtTheEnd() ) {\n\n\t\t\t\t\t\t\t\t\t\tvar token = lp.getToken();\n\n\t\t\t\t\t\t\t\t\t\tswitch ( token ) {\n\n\t\t\t\t\t\t\t\t\t\t\tcase 'CERTIFY':\n\t\t\t\t\t\t\t\t\t\t\tcase 'NOCERTIFY':\n\n\t\t\t\t\t\t\t\t\t\t\t\tbfcCertified = token === 'CERTIFY';\n\t\t\t\t\t\t\t\t\t\t\t\tbfcCCW = true;\n\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\t\tcase 'CW':\n\t\t\t\t\t\t\t\t\t\t\tcase 'CCW':\n\n\t\t\t\t\t\t\t\t\t\t\t\tbfcCCW = token === 'CCW';\n\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\t\tcase 'INVERTNEXT':\n\n\t\t\t\t\t\t\t\t\t\t\t\tbfcInverted = true;\n\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\t\tcase 'CLIP':\n\t\t\t\t\t\t\t\t\t\t\tcase 'NOCLIP':\n\n\t\t\t\t\t\t\t\t\t\t\t  bfcCull = token === 'CLIP';\n\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.LDrawLoader: BFC directive \"' + token + '\" is unknown.' );\n\n\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 'STEP':\n\n\t\t\t\t\t\t\t\t\tstartingConstructionStep = true;\n\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t// Other meta directives are not implemented\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 1: Sub-object file\n\t\t\t\t\tcase '1':\n\n\t\t\t\t\t\tvar material = parseColourCode( lp );\n\n\t\t\t\t\t\tvar posX = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar posY = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar posZ = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m0 = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m1 = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m2 = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m3 = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m4 = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m5 = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m6 = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m7 = parseFloat( lp.getToken() );\n\t\t\t\t\t\tvar m8 = parseFloat( lp.getToken() );\n\n\t\t\t\t\t\tvar matrix = new Matrix4().set(\n\t\t\t\t\t\t\tm0, m1, m2, posX,\n\t\t\t\t\t\t\tm3, m4, m5, posY,\n\t\t\t\t\t\t\tm6, m7, m8, posZ,\n\t\t\t\t\t\t\t0, 0, 0, 1\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar fileName = lp.getRemainingString().trim().replace( /\\\\/g, '/' );\n\n\t\t\t\t\t\tif ( scope.fileMap[ fileName ] ) {\n\n\t\t\t\t\t\t\t// Found the subobject path in the preloaded file path map\n\t\t\t\t\t\t\tfileName = scope.fileMap[ fileName ];\n\n\t\t\t\t\t\t}\telse {\n\n\t\t\t\t\t\t\t// Standardized subfolders\n\t\t\t\t\t\t\tif ( fileName.startsWith( 's/' ) ) {\n\n\t\t\t\t\t\t\t\tfileName = 'parts/' + fileName;\n\n\t\t\t\t\t\t\t} else if ( fileName.startsWith( '48/' ) ) {\n\n\t\t\t\t\t\t\t\tfileName = 'p/' + fileName;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsubobjects.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tmatrix: matrix,\n\t\t\t\t\t\t\tfileName: fileName,\n\t\t\t\t\t\t\toriginalFileName: fileName,\n\t\t\t\t\t\t\tlocationState: LDrawLoader.FILE_LOCATION_AS_IS,\n\t\t\t\t\t\t\turl: null,\n\t\t\t\t\t\t\ttriedLowerCase: false,\n\t\t\t\t\t\t\tinverted: bfcInverted !== currentParseScope.inverted,\n\t\t\t\t\t\t\tstartingConstructionStep: startingConstructionStep\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tbfcInverted = false;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 2: Line segment\n\t\t\t\t\tcase '2':\n\n\t\t\t\t\t\tvar material = parseColourCode( lp, true );\n\n\t\t\t\t\t\tvar segment = {\n\t\t\t\t\t\t\tmaterial: material.userData.edgeMaterial,\n\t\t\t\t\t\t\tcolourCode: material.userData.code,\n\t\t\t\t\t\t\tv0: parseVector( lp ),\n\t\t\t\t\t\t\tv1: parseVector( lp )\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tlineSegments.push( segment );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 5: Conditional Line segment\n\t\t\t\t\tcase '5':\n\n\t\t\t\t\t\tvar material = parseColourCode( lp, true );\n\n\t\t\t\t\t\tvar segment = {\n\t\t\t\t\t\t\tmaterial: material.userData.edgeMaterial.userData.conditionalEdgeMaterial,\n\t\t\t\t\t\t\tcolourCode: material.userData.code,\n\t\t\t\t\t\t\tv0: parseVector( lp ),\n\t\t\t\t\t\t\tv1: parseVector( lp ),\n\t\t\t\t\t\t\tc0: parseVector( lp ),\n\t\t\t\t\t\t\tc1: parseVector( lp )\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconditionalSegments.push( segment );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 3: Triangle\n\t\t\t\t\tcase '3':\n\n\t\t\t\t\t\tvar material = parseColourCode( lp );\n\n\t\t\t\t\t\tvar inverted = currentParseScope.inverted;\n\t\t\t\t\t\tvar ccw = bfcCCW !== inverted;\n\t\t\t\t\t\tvar doubleSided = ! bfcCertified || ! bfcCull;\n\t\t\t\t\t\tvar v0, v1, v2, faceNormal;\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tv0 = parseVector( lp );\n\t\t\t\t\t\t\tv1 = parseVector( lp );\n\t\t\t\t\t\t\tv2 = parseVector( lp );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv2 = parseVector( lp );\n\t\t\t\t\t\t\tv1 = parseVector( lp );\n\t\t\t\t\t\t\tv0 = parseVector( lp );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttempVec0.subVectors( v1, v0 );\n\t\t\t\t\t\ttempVec1.subVectors( v2, v1 );\n\t\t\t\t\t\tfaceNormal = new Vector3()\n\t\t\t\t\t\t\t.crossVectors( tempVec0, tempVec1 )\n\t\t\t\t\t\t\t.normalize();\n\n\t\t\t\t\t\ttriangles.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolourCode: material.userData.code,\n\t\t\t\t\t\t\tv0: v0,\n\t\t\t\t\t\t\tv1: v1,\n\t\t\t\t\t\t\tv2: v2,\n\t\t\t\t\t\t\tfaceNormal: faceNormal,\n\t\t\t\t\t\t\tn0: null,\n\t\t\t\t\t\t\tn1: null,\n\t\t\t\t\t\t\tn2: null\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tif ( doubleSided === true ) {\n\n\t\t\t\t\t\t\ttriangles.push( {\n\t\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\t\tcolourCode: material.userData.code,\n\t\t\t\t\t\t\t\tv0: v0,\n\t\t\t\t\t\t\t\tv1: v2,\n\t\t\t\t\t\t\t\tv2: v1,\n\t\t\t\t\t\t\t\tfaceNormal: faceNormal,\n\t\t\t\t\t\t\t\tn0: null,\n\t\t\t\t\t\t\t\tn1: null,\n\t\t\t\t\t\t\t\tn2: null\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 4: Quadrilateral\n\t\t\t\t\tcase '4':\n\n\t\t\t\t\t\tvar material = parseColourCode( lp );\n\n\t\t\t\t\t\tvar inverted = currentParseScope.inverted;\n\t\t\t\t\t\tvar ccw = bfcCCW !== inverted;\n\t\t\t\t\t\tvar doubleSided = ! bfcCertified || ! bfcCull;\n\t\t\t\t\t\tvar v0, v1, v2, v3, faceNormal;\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tv0 = parseVector( lp );\n\t\t\t\t\t\t\tv1 = parseVector( lp );\n\t\t\t\t\t\t\tv2 = parseVector( lp );\n\t\t\t\t\t\t\tv3 = parseVector( lp );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv3 = parseVector( lp );\n\t\t\t\t\t\t\tv2 = parseVector( lp );\n\t\t\t\t\t\t\tv1 = parseVector( lp );\n\t\t\t\t\t\t\tv0 = parseVector( lp );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttempVec0.subVectors( v1, v0 );\n\t\t\t\t\t\ttempVec1.subVectors( v2, v1 );\n\t\t\t\t\t\tfaceNormal = new Vector3()\n\t\t\t\t\t\t\t.crossVectors( tempVec0, tempVec1 )\n\t\t\t\t\t\t\t.normalize();\n\n\t\t\t\t\t\ttriangles.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolourCode: material.userData.code,\n\t\t\t\t\t\t\tv0: v0,\n\t\t\t\t\t\t\tv1: v1,\n\t\t\t\t\t\t\tv2: v2,\n\t\t\t\t\t\t\tfaceNormal: faceNormal,\n\t\t\t\t\t\t\tn0: null,\n\t\t\t\t\t\t\tn1: null,\n\t\t\t\t\t\t\tn2: null\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\ttriangles.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolourCode: material.userData.code,\n\t\t\t\t\t\t\tv0: v0,\n\t\t\t\t\t\t\tv1: v2,\n\t\t\t\t\t\t\tv2: v3,\n\t\t\t\t\t\t\tfaceNormal: faceNormal,\n\t\t\t\t\t\t\tn0: null,\n\t\t\t\t\t\t\tn1: null,\n\t\t\t\t\t\t\tn2: null\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tif ( doubleSided === true ) {\n\n\t\t\t\t\t\t\ttriangles.push( {\n\t\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\t\tcolourCode: material.userData.code,\n\t\t\t\t\t\t\t\tv0: v0,\n\t\t\t\t\t\t\t\tv1: v2,\n\t\t\t\t\t\t\t\tv2: v1,\n\t\t\t\t\t\t\t\tfaceNormal: faceNormal,\n\t\t\t\t\t\t\t\tn0: null,\n\t\t\t\t\t\t\t\tn1: null,\n\t\t\t\t\t\t\t\tn2: null\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\ttriangles.push( {\n\t\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\t\tcolourCode: material.userData.code,\n\t\t\t\t\t\t\t\tv0: v0,\n\t\t\t\t\t\t\t\tv1: v3,\n\t\t\t\t\t\t\t\tv2: v2,\n\t\t\t\t\t\t\t\tfaceNormal: faceNormal,\n\t\t\t\t\t\t\t\tn0: null,\n\t\t\t\t\t\t\t\tn1: null,\n\t\t\t\t\t\t\t\tn2: null\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow 'LDrawLoader: Unknown line type \"' + lineType + '\"' + lp.getLineNumberString() + '.';\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( parsingEmbeddedFiles ) {\n\n\t\t\t\tthis.subobjectCache[ currentEmbeddedFileName.toLowerCase() ] = currentEmbeddedText;\n\n\t\t\t}\n\n\t\t\tcurrentParseScope.category = category;\n\t\t\tcurrentParseScope.keywords = keywords;\n\t\t\tcurrentParseScope.subobjects = subobjects;\n\t\t\tcurrentParseScope.numSubobjects = subobjects.length;\n\t\t\tcurrentParseScope.subobjectIndex = 0;\n\n\t\t},\n\n\t\tcomputeConstructionSteps: function ( model ) {\n\n\t\t\t// Sets userdata.constructionStep number in Group objects and userData.numConstructionSteps number in the root Group object.\n\n\t\t\tvar stepNumber = 0;\n\n\t\t\tmodel.traverse( c => {\n\n\t\t\t\tif ( c.isGroup ) {\n\n\t\t\t\t\tif ( c.userData.startingConstructionStep ) {\n\n\t\t\t\t\t\tstepNumber ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tc.userData.constructionStep = stepNumber;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tmodel.userData.numConstructionSteps = stepNumber + 1;\n\n\t\t},\n\n\t\tprocessObject: function ( text, onProcessed, subobject, url ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar parseScope = scope.newParseScopeLevel();\n\t\t\tparseScope.url = url;\n\n\t\t\tvar parentParseScope = scope.getParentParseScope();\n\n\t\t\t// Set current matrix\n\t\t\tif ( subobject ) {\n\n\t\t\t\tparseScope.currentMatrix.multiplyMatrices( parentParseScope.currentMatrix, subobject.matrix );\n\t\t\t\tparseScope.matrix.copy( subobject.matrix );\n\t\t\t\tparseScope.inverted = subobject.inverted;\n\t\t\t\tparseScope.startingConstructionStep = subobject.startingConstructionStep;\n\n\t\t\t}\n\n\t\t\t// Add to cache\n\t\t\tvar currentFileName = parentParseScope.currentFileName;\n\t\t\tif ( currentFileName !== null ) {\n\n\t\t\t\tcurrentFileName = parentParseScope.currentFileName.toLowerCase();\n\n\t\t\t}\n\n\t\t\tif ( scope.subobjectCache[ currentFileName ] === undefined ) {\n\n\t\t\t\tscope.subobjectCache[ currentFileName ] = text;\n\n\t\t\t}\n\n\n\t\t\t// Parse the object (returns a Group)\n\t\t\tscope.objectParse( text );\n\t\t\tvar finishedCount = 0;\n\t\t\tonSubobjectFinish();\n\n\t\t\tfunction onSubobjectFinish() {\n\n\t\t\t\tfinishedCount ++;\n\n\t\t\t\tif ( finishedCount === parseScope.subobjects.length + 1 ) {\n\n\t\t\t\t\tfinalizeObject();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Once the previous subobject has finished we can start processing the next one in the list.\n\t\t\t\t\t// The subobject processing shares scope in processing so it's important that they be loaded serially\n\t\t\t\t\t// to avoid race conditions.\n\t\t\t\t\t// Promise.resolve is used as an approach to asynchronously schedule a task _before_ this frame ends to\n\t\t\t\t\t// avoid stack overflow exceptions when loading many subobjects from the cache. RequestAnimationFrame\n\t\t\t\t\t// will work but causes the load to happen after the next frame which causes the load to take significantly longer.\n\t\t\t\t\tvar subobject = parseScope.subobjects[ parseScope.subobjectIndex ];\n\t\t\t\t\tPromise.resolve().then( function () {\n\n\t\t\t\t\t\tloadSubobject( subobject );\n\n\t\t\t\t\t} );\n\t\t\t\t\tparseScope.subobjectIndex ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction finalizeObject() {\n\n\t\t\t\tif ( scope.smoothNormals && parseScope.type === 'Part' ) {\n\n\t\t\t\t\tsmoothNormals( parseScope.triangles, parseScope.lineSegments );\n\n\t\t\t\t}\n\n\t\t\t\tvar isRoot = ! parentParseScope.isFromParse;\n\t\t\t\tif ( scope.separateObjects && ! isPrimitiveType( parseScope.type ) || isRoot ) {\n\n\t\t\t\t\tconst objGroup = parseScope.groupObject;\n\n\t\t\t\t\tif ( parseScope.triangles.length > 0 ) {\n\n\t\t\t\t\t\tobjGroup.add( createObject( parseScope.triangles, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( parseScope.lineSegments.length > 0 ) {\n\n\t\t\t\t\t\tobjGroup.add( createObject( parseScope.lineSegments, 2 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( parseScope.conditionalSegments.length > 0 ) {\n\n\t\t\t\t\t\tobjGroup.add( createObject( parseScope.conditionalSegments, 2, true ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( parentParseScope.groupObject ) {\n\n\t\t\t\t\t\tobjGroup.name = parseScope.fileName;\n\t\t\t\t\t\tobjGroup.userData.category = parseScope.category;\n\t\t\t\t\t\tobjGroup.userData.keywords = parseScope.keywords;\n\t\t\t\t\t\tparseScope.matrix.decompose( objGroup.position, objGroup.quaternion, objGroup.scale );\n\n\t\t\t\t\t\tparentParseScope.groupObject.add( objGroup );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar separateObjects = scope.separateObjects;\n\t\t\t\t\tvar parentLineSegments = parentParseScope.lineSegments;\n\t\t\t\t\tvar parentConditionalSegments = parentParseScope.conditionalSegments;\n\t\t\t\t\tvar parentTriangles = parentParseScope.triangles;\n\n\t\t\t\t\tvar lineSegments = parseScope.lineSegments;\n\t\t\t\t\tvar conditionalSegments = parseScope.conditionalSegments;\n\t\t\t\t\tvar triangles = parseScope.triangles;\n\n\t\t\t\t\tfor ( var i = 0, l = lineSegments.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar ls = lineSegments[ i ];\n\n\t\t\t\t\t\tif ( separateObjects ) {\n\n\t\t\t\t\t\t\tls.v0.applyMatrix4( parseScope.matrix );\n\t\t\t\t\t\t\tls.v1.applyMatrix4( parseScope.matrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparentLineSegments.push( ls );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0, l = conditionalSegments.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar os = conditionalSegments[ i ];\n\n\t\t\t\t\t\tif ( separateObjects ) {\n\n\t\t\t\t\t\t\tos.v0.applyMatrix4( parseScope.matrix );\n\t\t\t\t\t\t\tos.v1.applyMatrix4( parseScope.matrix );\n\t\t\t\t\t\t\tos.c0.applyMatrix4( parseScope.matrix );\n\t\t\t\t\t\t\tos.c1.applyMatrix4( parseScope.matrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparentConditionalSegments.push( os );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0, l = triangles.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar tri = triangles[ i ];\n\n\t\t\t\t\t\tif ( separateObjects ) {\n\n\t\t\t\t\t\t\ttri.v0 = tri.v0.clone().applyMatrix4( parseScope.matrix );\n\t\t\t\t\t\t\ttri.v1 = tri.v1.clone().applyMatrix4( parseScope.matrix );\n\t\t\t\t\t\t\ttri.v2 = tri.v2.clone().applyMatrix4( parseScope.matrix );\n\n\t\t\t\t\t\t\ttempVec0.subVectors( tri.v1, tri.v0 );\n\t\t\t\t\t\t\ttempVec1.subVectors( tri.v2, tri.v1 );\n\t\t\t\t\t\t\ttri.faceNormal.crossVectors( tempVec0, tempVec1 ).normalize();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparentTriangles.push( tri );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.removeScopeLevel();\n\n\t\t\t\t// If it is root object, compute construction steps\n\t\t\t\tif ( ! parentParseScope.isFromParse ) {\n\n\t\t\t\t\tscope.computeConstructionSteps( parseScope.groupObject );\n\n\t\t\t\t}\n\n\t\t\t\tif ( onProcessed ) {\n\n\t\t\t\t\tonProcessed( parseScope.groupObject );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction loadSubobject( subobject ) {\n\n\t\t\t\tparseScope.mainColourCode = subobject.material.userData.code;\n\t\t\t\tparseScope.mainEdgeColourCode = subobject.material.userData.edgeMaterial.userData.code;\n\t\t\t\tparseScope.currentFileName = subobject.originalFileName;\n\n\n\t\t\t\t// If subobject was cached previously, use the cached one\n\t\t\t\tvar cached = scope.subobjectCache[ subobject.originalFileName.toLowerCase() ];\n\t\t\t\tif ( cached ) {\n\n\t\t\t\t\tscope.processObject( cached, function ( subobjectGroup ) {\n\n\t\t\t\t\t\tonSubobjectLoaded( subobjectGroup, subobject );\n\t\t\t\t\t\tonSubobjectFinish();\n\n\t\t\t\t\t}, subobject, url );\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\t// Adjust file name to locate the subobject file path in standard locations (always under directory scope.path)\n\t\t\t\t// Update also subobject.locationState for the next try if this load fails.\n\t\t\t\tvar subobjectURL = subobject.fileName;\n\t\t\t\tvar newLocationState = LDrawLoader.FILE_LOCATION_NOT_FOUND;\n\n\t\t\t\tswitch ( subobject.locationState ) {\n\n\t\t\t\t\tcase LDrawLoader.FILE_LOCATION_AS_IS:\n\t\t\t\t\t\tnewLocationState = subobject.locationState + 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LDrawLoader.FILE_LOCATION_TRY_PARTS:\n\t\t\t\t\t\tsubobjectURL = 'parts/' + subobjectURL;\n\t\t\t\t\t\tnewLocationState = subobject.locationState + 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LDrawLoader.FILE_LOCATION_TRY_P:\n\t\t\t\t\t\tsubobjectURL = 'p/' + subobjectURL;\n\t\t\t\t\t\tnewLocationState = subobject.locationState + 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LDrawLoader.FILE_LOCATION_TRY_MODELS:\n\t\t\t\t\t\tsubobjectURL = 'models/' + subobjectURL;\n\t\t\t\t\t\tnewLocationState = subobject.locationState + 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LDrawLoader.FILE_LOCATION_TRY_RELATIVE:\n\t\t\t\t\t\tsubobjectURL = url.substring( 0, url.lastIndexOf( '/' ) + 1 ) + subobjectURL;\n\t\t\t\t\t\tnewLocationState = subobject.locationState + 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LDrawLoader.FILE_LOCATION_TRY_ABSOLUTE:\n\n\t\t\t\t\t\tif ( subobject.triedLowerCase ) {\n\n\t\t\t\t\t\t\t// Try absolute path\n\t\t\t\t\t\t\tnewLocationState = LDrawLoader.FILE_LOCATION_NOT_FOUND;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Next attempt is lower case\n\t\t\t\t\t\t\tsubobject.fileName = subobject.fileName.toLowerCase();\n\t\t\t\t\t\t\tsubobjectURL = subobject.fileName;\n\t\t\t\t\t\t\tsubobject.triedLowerCase = true;\n\t\t\t\t\t\t\tnewLocationState = LDrawLoader.FILE_LOCATION_AS_IS;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase LDrawLoader.FILE_LOCATION_NOT_FOUND:\n\n\t\t\t\t\t\t// All location possibilities have been tried, give up loading this object\n\t\t\t\t\t\tconsole.warn( 'LDrawLoader: Subobject \"' + subobject.originalFileName + '\" could not be found.' );\n\n\t\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tsubobject.locationState = newLocationState;\n\t\t\t\tsubobject.url = subobjectURL;\n\n\t\t\t\t// Load the subobject\n\t\t\t\t// Use another file loader here so we can keep track of the subobject information\n\t\t\t\t// and use it when processing the next model.\n\t\t\t\tvar fileLoader = new FileLoader( scope.manager );\n\t\t\t\tfileLoader.setPath( scope.path );\n\t\t\t\tfileLoader.setRequestHeader( scope.requestHeader );\n\t\t\t\tfileLoader.setWithCredentials( scope.withCredentials );\n\t\t\t\tfileLoader.load( subobjectURL, function ( text ) {\n\n\t\t\t\t\tscope.processObject( text, function ( subobjectGroup ) {\n\n\t\t\t\t\t\tonSubobjectLoaded( subobjectGroup, subobject );\n\t\t\t\t\t\tonSubobjectFinish();\n\n\t\t\t\t\t}, subobject, url );\n\n\t\t\t\t}, undefined, function ( err ) {\n\n\t\t\t\t\tonSubobjectError( err, subobject );\n\n\t\t\t\t}, subobject );\n\n\t\t\t}\n\n\t\t\tfunction onSubobjectLoaded( subobjectGroup, subobject ) {\n\n\t\t\t\tif ( subobjectGroup === null ) {\n\n\t\t\t\t\t// Try to reload\n\t\t\t\t\tloadSubobject( subobject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tscope.fileMap[ subobject.originalFileName ] = subobject.url;\n\n\t\t\t}\n\n\t\t\tfunction onSubobjectError( err, subobject ) {\n\n\t\t\t\t// Retry download from a different default possible location\n\t\t\t\tloadSubobject( subobject );\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\treturn LDrawLoader;\n\n} )();\n\nexport { LDrawLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/LUT3dlLoader.js",
    "content": "// http://download.autodesk.com/us/systemdocs/help/2011/lustre/index.html?url=./files/WSc4e151a45a3b785a24c3d9a411df9298473-7ffd.htm,topicNumber=d0e9492\n\nimport {\n\tLoader,\n\tFileLoader,\n\tDataTexture,\n\tDataTexture3D,\n\tRGBFormat,\n\tUnsignedByteType,\n\tClampToEdgeWrapping,\n\tLinearFilter,\n} from '../../../build/three.module.js';\n\nexport class LUT3dlLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'text' );\n\t\tloader.load( url, text => {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( this.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( str ) {\n\n\t\t// remove empty lines and comment lints\n\t\tstr = str\n\t\t\t.replace( /^#.*?(\\n|\\r)/gm, '' )\n\t\t\t.replace( /^\\s*?(\\n|\\r)/gm, '' )\n\t\t\t.trim();\n\n\t\tconst lines = str.split( /[\\n\\r]+/g );\n\n\t\t// first line is the positions on the grid that are provided by the LUT\n\t\tconst gridLines = lines[ 0 ].trim().split( /\\s+/g ).map( e => parseFloat( e ) );\n\t\tconst gridStep = gridLines[ 1 ] - gridLines[ 0 ];\n\t\tconst size = gridLines.length;\n\n\t\tfor ( let i = 1, l = gridLines.length; i < l; i ++ ) {\n\n\t\t\tif ( gridStep !== ( gridLines[ i ] - gridLines[ i - 1 ] ) ) {\n\n\t\t\t\tthrow new Error( 'LUT3dlLoader: Inconsistent grid size not supported.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst dataArray = new Array( size * size * size * 3 );\n\t\tlet index = 0;\n\t\tlet maxOutputValue = 0.0;\n\t\tfor ( let i = 1, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ].trim();\n\t\t\tconst split = line.split( /\\s/g );\n\n\t\t\tconst r = parseFloat( split[ 0 ] );\n\t\t\tconst g = parseFloat( split[ 1 ] );\n\t\t\tconst b = parseFloat( split[ 2 ] );\n\t\t\tmaxOutputValue = Math.max( maxOutputValue, r, g, b );\n\n\t\t\tconst bLayer = index % size;\n\t\t\tconst gLayer = Math.floor( index / size ) % size;\n\t\t\tconst rLayer = Math.floor( index / ( size * size ) ) % size;\n\n\t\t\t// b grows first, then g, then r\n\t\t\tconst pixelIndex = bLayer * size * size + gLayer * size + rLayer;\n\t\t\tdataArray[ 3 * pixelIndex + 0 ] = r;\n\t\t\tdataArray[ 3 * pixelIndex + 1 ] = g;\n\t\t\tdataArray[ 3 * pixelIndex + 2 ] = b;\n\t\t\tindex += 1;\n\n\t\t}\n\n\t\t// Find the apparent bit depth of the stored RGB values and scale the\n\t\t// values to [ 0, 255 ].\n\t\tconst bits = Math.ceil( Math.log2( maxOutputValue ) );\n\t\tconst maxBitValue = Math.pow( 2.0, bits );\n\t\tfor ( let i = 0, l = dataArray.length; i < l; i ++ ) {\n\n\t\t\tconst val = dataArray[ i ];\n\t\t\tdataArray[ i ] = 255 * val / maxBitValue;\n\n\t\t}\n\n\t\tconst data = new Uint8Array( dataArray );\n\t\tconst texture = new DataTexture();\n\t\ttexture.image.data = data;\n\t\ttexture.image.width = size;\n\t\ttexture.image.height = size * size;\n\t\ttexture.format = RGBFormat;\n\t\ttexture.type = UnsignedByteType;\n\t\ttexture.magFilter = LinearFilter;\n\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\ttexture.wrapT = ClampToEdgeWrapping;\n\t\ttexture.generateMipmaps = false;\n\n\t\tconst texture3D = new DataTexture3D();\n\t\ttexture3D.image.data = data;\n\t\ttexture3D.image.width = size;\n\t\ttexture3D.image.height = size;\n\t\ttexture3D.image.depth = size;\n\t\ttexture3D.format = RGBFormat;\n\t\ttexture3D.type = UnsignedByteType;\n\t\ttexture3D.magFilter = LinearFilter;\n\t\ttexture3D.wrapS = ClampToEdgeWrapping;\n\t\ttexture3D.wrapT = ClampToEdgeWrapping;\n\t\ttexture3D.wrapR = ClampToEdgeWrapping;\n\t\ttexture3D.generateMipmaps = false;\n\n\t\treturn {\n\t\t\tsize,\n\t\t\ttexture,\n\t\t\ttexture3D,\n\t\t};\n\n\t}\n\n}\n"
  },
  {
    "path": "libs/three.js/loaders/LUTCubeLoader.js",
    "content": "// https://wwwimages2.adobe.com/content/dam/acom/en/products/speedgrade/cc/pdfs/cube-lut-specification-1.0.pdf\n\nimport {\n\tLoader,\n\tFileLoader,\n\tVector3,\n\tDataTexture,\n\tDataTexture3D,\n\tRGBFormat,\n\tUnsignedByteType,\n\tClampToEdgeWrapping,\n\tLinearFilter,\n} from '../../../build/three.module.js';\n\nexport class LUTCubeLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'text' );\n\t\tloader.load( url, text => {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( this.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( str ) {\n\n\t\t// Remove empty lines and comments\n\t\tstr = str\n\t\t\t.replace( /^#.*?(\\n|\\r)/gm, '' )\n\t\t\t.replace( /^\\s*?(\\n|\\r)/gm, '' )\n\t\t\t.trim();\n\n\t\tlet title = null;\n\t\tlet size = null;\n\t\tconst domainMin = new Vector3( 0, 0, 0 );\n\t\tconst domainMax = new Vector3( 1, 1, 1 );\n\n\t\tconst lines = str.split( /[\\n\\r]+/g );\n\t\tlet data = null;\n\n\t\tlet currIndex = 0;\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ].trim();\n\t\t\tconst split = line.split( /\\s/g );\n\n\t\t\tswitch ( split[ 0 ] ) {\n\n\t\t\t\tcase 'TITLE':\n\t\t\t\t\ttitle = line.substring( 7, line.length - 1 );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'LUT_3D_SIZE':\n\t\t\t\t\t// TODO: A .CUBE LUT file specifies floating point values and could be represented with\n\t\t\t\t\t// more precision than can be captured with Uint8Array.\n\t\t\t\t\tconst sizeToken = split[ 1 ];\n\t\t\t\t\tsize = parseFloat( sizeToken );\n\t\t\t\t\tdata = new Uint8Array( size * size * size * 3 );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DOMAIN_MIN':\n\t\t\t\t\tdomainMin.x = parseFloat( split[ 1 ] );\n\t\t\t\t\tdomainMin.y = parseFloat( split[ 2 ] );\n\t\t\t\t\tdomainMin.z = parseFloat( split[ 3 ] );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'DOMAIN_MAX':\n\t\t\t\t\tdomainMax.x = parseFloat( split[ 1 ] );\n\t\t\t\t\tdomainMax.y = parseFloat( split[ 2 ] );\n\t\t\t\t\tdomainMax.z = parseFloat( split[ 3 ] );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconst r = parseFloat( split[ 0 ] );\n\t\t\t\t\tconst g = parseFloat( split[ 1 ] );\n\t\t\t\t\tconst b = parseFloat( split[ 2 ] );\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tr > 1.0 || r < 0.0 ||\n\t\t\t\t\t\tg > 1.0 || g < 0.0 ||\n\t\t\t\t\t\tb > 1.0 || b < 0.0\n\t\t\t\t\t) {\n\n\t\t\t\t\t\tthrow new Error( 'LUTCubeLoader : Non normalized values not supported.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdata[ currIndex + 0 ] = r * 255;\n\t\t\t\t\tdata[ currIndex + 1 ] = g * 255;\n\t\t\t\t\tdata[ currIndex + 2 ] = b * 255;\n\t\t\t\t\tcurrIndex += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst texture = new DataTexture();\n\t\ttexture.image.data = data;\n\t\ttexture.image.width = size;\n\t\ttexture.image.height = size * size;\n\t\ttexture.format = RGBFormat;\n\t\ttexture.type = UnsignedByteType;\n\t\ttexture.magFilter = LinearFilter;\n\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\ttexture.wrapT = ClampToEdgeWrapping;\n\t\ttexture.generateMipmaps = false;\n\n\t\tconst texture3D = new DataTexture3D();\n\t\ttexture3D.image.data = data;\n\t\ttexture3D.image.width = size;\n\t\ttexture3D.image.height = size;\n\t\ttexture3D.image.depth = size;\n\t\ttexture3D.format = RGBFormat;\n\t\ttexture3D.type = UnsignedByteType;\n\t\ttexture3D.magFilter = LinearFilter;\n\t\ttexture3D.wrapS = ClampToEdgeWrapping;\n\t\ttexture3D.wrapT = ClampToEdgeWrapping;\n\t\ttexture3D.wrapR = ClampToEdgeWrapping;\n\t\ttexture3D.generateMipmaps = false;\n\n\t\treturn {\n\t\t\ttitle,\n\t\t\tsize,\n\t\t\tdomainMin,\n\t\t\tdomainMax,\n\t\t\ttexture,\n\t\t\ttexture3D,\n\t\t};\n\n\t}\n\n}\n"
  },
  {
    "path": "libs/three.js/loaders/LWOLoader.js",
    "content": "/**\n * @version 1.1.1\n *\n * @desc Load files in LWO3 and LWO2 format on Three.js\n *\n * LWO3 format specification:\n * \thttp://static.lightwave3d.com/sdk/2018/html/filefmts/lwo3.html\n *\n * LWO2 format specification:\n * \thttp://static.lightwave3d.com/sdk/2018/html/filefmts/lwo2.html\n *\n **/\n\nimport {\n\tAddOperation,\n\tBackSide,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDoubleSide,\n\tEquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMesh,\n\tMeshPhongMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tPoints,\n\tPointsMaterial,\n\tRepeatWrapping,\n\tTextureLoader,\n\tVector2\n} from '../../../build/three.module.js';\n\nimport { IFFParser } from './lwo/IFFParser.js';\n\nvar lwoTree;\n\nvar LWOLoader = function ( manager, parameters ) {\n\n\tLoader.call( this, manager );\n\n\tparameters = parameters || {};\n\n\tthis.resourcePath = ( parameters.resourcePath !== undefined ) ? parameters.resourcePath : '';\n\n};\n\nLWOLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: LWOLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar path = ( scope.path === '' ) ? extractParentUrl( url, 'Objects' ) : scope.path;\n\n\t\t// give the mesh a default name based on the filename\n\t\tvar modelName = url.split( path ).pop().split( '.' )[ 0 ];\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t// console.time( 'Total parsing: ' );\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer, path, modelName ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t\t// console.timeEnd( 'Total parsing: ' );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( iffBuffer, path, modelName ) {\n\n\t\tlwoTree = new IFFParser().parse( iffBuffer );\n\n\t\t// console.log( 'lwoTree', lwoTree );\n\n\t\tvar textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\treturn new LWOTreeParser( textureLoader ).parse( modelName );\n\n\t}\n\n} );\n\n// Parse the lwoTree object\nfunction LWOTreeParser( textureLoader ) {\n\n\tthis.textureLoader = textureLoader;\n\n}\n\nLWOTreeParser.prototype = {\n\n\tconstructor: LWOTreeParser,\n\n\tparse: function ( modelName ) {\n\n\t\tthis.materials = new MaterialParser( this.textureLoader ).parse();\n\t\tthis.defaultLayerName = modelName;\n\n\t\tthis.meshes = this.parseLayers();\n\n\t\treturn {\n\t\t\tmaterials: this.materials,\n\t\t\tmeshes: this.meshes,\n\t\t};\n\n\t},\n\n\tparseLayers() {\n\n\t\t// array of all meshes for building hierarchy\n\t\tvar meshes = [];\n\n\t\t// final array containing meshes with scene graph hierarchy set up\n\t\tvar finalMeshes = [];\n\n\t\tvar geometryParser = new GeometryParser();\n\n\t\tvar scope = this;\n\t\tlwoTree.layers.forEach( function ( layer ) {\n\n\t\t\tvar geometry = geometryParser.parse( layer.geometry, layer );\n\n\t\t\tvar mesh = scope.parseMesh( geometry, layer );\n\n\t\t\tmeshes[ layer.number ] = mesh;\n\n\t\t\tif ( layer.parent === - 1 ) finalMeshes.push( mesh );\n\t\t\telse meshes[ layer.parent ].add( mesh );\n\n\n\t\t} );\n\n\t\tthis.applyPivots( finalMeshes );\n\n\t\treturn finalMeshes;\n\n\t},\n\n\tparseMesh( geometry, layer ) {\n\n\t\tvar mesh;\n\n\t\tvar materials = this.getMaterials( geometry.userData.matNames, layer.geometry.type );\n\n\t\tthis.duplicateUVs( geometry, materials );\n\n\t\tif ( layer.geometry.type === 'points' ) mesh = new Points( geometry, materials );\n\t\telse if ( layer.geometry.type === 'lines' ) mesh = new LineSegments( geometry, materials );\n\t\telse mesh = new Mesh( geometry, materials );\n\n\t\tif ( layer.name ) mesh.name = layer.name;\n\t\telse mesh.name = this.defaultLayerName + '_layer_' + layer.number;\n\n\t\tmesh.userData.pivot = layer.pivot;\n\n\t\treturn mesh;\n\n\t},\n\n\t// TODO: may need to be reversed in z to convert LWO to three.js coordinates\n\tapplyPivots( meshes ) {\n\n\t\tmeshes.forEach( function ( mesh ) {\n\n\t\t\tmesh.traverse( function ( child ) {\n\n\t\t\t\tvar pivot = child.userData.pivot;\n\n\t\t\t\tchild.position.x += pivot[ 0 ];\n\t\t\t\tchild.position.y += pivot[ 1 ];\n\t\t\t\tchild.position.z += pivot[ 2 ];\n\n\t\t\t\tif ( child.parent ) {\n\n\t\t\t\t\tvar parentPivot = child.parent.userData.pivot;\n\n\t\t\t\t\tchild.position.x -= parentPivot[ 0 ];\n\t\t\t\t\tchild.position.y -= parentPivot[ 1 ];\n\t\t\t\t\tchild.position.z -= parentPivot[ 2 ];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t},\n\n\tgetMaterials( namesArray, type ) {\n\n\t\tvar materials = [];\n\n\t\tvar scope = this;\n\n\t\tnamesArray.forEach( function ( name, i ) {\n\n\t\t\tmaterials[ i ] = scope.getMaterialByName( name );\n\n\t\t} );\n\n\t\t// convert materials to line or point mats if required\n\t\tif ( type === 'points' || type === 'lines' ) {\n\n\t\t\tmaterials.forEach( function ( mat, i ) {\n\n\t\t\t\tvar spec = {\n\t\t\t\t\tcolor: mat.color,\n\t\t\t\t};\n\n\t\t\t\tif ( type === 'points' ) {\n\n\t\t\t\t\tspec.size = 0.1;\n\t\t\t\t\tspec.map = mat.map;\n\t\t\t\t\tspec.morphTargets = mat.morphTargets;\n\t\t\t\t\tmaterials[ i ] = new PointsMaterial( spec );\n\n\t\t\t\t} else if ( type === 'lines' ) {\n\n\t\t\t\t\tmaterials[ i ] = new LineBasicMaterial( spec );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// if there is only one material, return that directly instead of array\n\t\tvar filtered = materials.filter( Boolean );\n\t\tif ( filtered.length === 1 ) return filtered[ 0 ];\n\n\t\treturn materials;\n\n\t},\n\n\tgetMaterialByName( name ) {\n\n\t\treturn this.materials.filter( function ( m ) {\n\n\t\t\treturn m.name === name;\n\n\t\t} )[ 0 ];\n\n\t},\n\n\t// If the material has an aoMap, duplicate UVs\n\tduplicateUVs( geometry, materials ) {\n\n\t\tvar duplicateUVs = false;\n\n\t\tif ( ! Array.isArray( materials ) ) {\n\n\t\t\tif ( materials.aoMap ) duplicateUVs = true;\n\n\t\t} else {\n\n\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\tif ( material.aoMap ) duplicateUVs = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tif ( ! duplicateUVs ) return;\n\n\t\tgeometry.setAttribute( 'uv2', new BufferAttribute( geometry.attributes.uv.array, 2 ) );\n\n\t},\n\n};\n\nfunction MaterialParser( textureLoader ) {\n\n\tthis.textureLoader = textureLoader;\n\n}\n\nMaterialParser.prototype = {\n\n\tconstructor: MaterialParser,\n\n\tparse: function () {\n\n\t\tvar materials = [];\n\t\tthis.textures = {};\n\n\t\tfor ( var name in lwoTree.materials ) {\n\n\t\t\tif ( lwoTree.format === 'LWO3' ) {\n\n\t\t\t\tmaterials.push( this.parseMaterial( lwoTree.materials[ name ], name, lwoTree.textures ) );\n\n\t\t\t} else if ( lwoTree.format === 'LWO2' ) {\n\n\t\t\t\tmaterials.push( this.parseMaterialLwo2( lwoTree.materials[ name ], name, lwoTree.textures ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t},\n\n\tparseMaterial( materialData, name, textures ) {\n\n\t\tvar params = {\n\t\t\tname: name,\n\t\t\tside: this.getSide( materialData.attributes ),\n\t\t\tflatShading: this.getSmooth( materialData.attributes ),\n\t\t};\n\n\t\tvar connections = this.parseConnections( materialData.connections, materialData.nodes );\n\n\t\tvar maps = this.parseTextureNodes( connections.maps );\n\n\t\tthis.parseAttributeImageMaps( connections.attributes, textures, maps, materialData.maps );\n\n\t\tvar attributes = this.parseAttributes( connections.attributes, maps );\n\n\t\tthis.parseEnvMap( connections, maps, attributes );\n\n\t\tparams = Object.assign( maps, params );\n\t\tparams = Object.assign( params, attributes );\n\n\t\tvar materialType = this.getMaterialType( connections.attributes );\n\n\t\treturn new materialType( params );\n\n\t},\n\n\tparseMaterialLwo2( materialData, name/*, textures*/ ) {\n\n\t\tvar params = {\n\t\t\tname: name,\n\t\t\tside: this.getSide( materialData.attributes ),\n\t\t\tflatShading: this.getSmooth( materialData.attributes ),\n\t\t};\n\n\t\tvar attributes = this.parseAttributes( materialData.attributes, {} );\n\t\tparams = Object.assign( params, attributes );\n\t\treturn new MeshPhongMaterial( params );\n\n\t},\n\n\t// Note: converting from left to right handed coords by switching x -> -x in vertices, and\n\t// then switching mat FrontSide -> BackSide\n\t// NB: this means that FrontSide and BackSide have been switched!\n\tgetSide( attributes ) {\n\n\t\tif ( ! attributes.side ) return BackSide;\n\n\t\tswitch ( attributes.side ) {\n\n\t\t\tcase 0:\n\t\t\tcase 1:\n\t\t\t\treturn BackSide;\n\t\t\tcase 2: return FrontSide;\n\t\t\tcase 3: return DoubleSide;\n\n\t\t}\n\n\t},\n\n\tgetSmooth( attributes ) {\n\n\t\tif ( ! attributes.smooth ) return true;\n\t\treturn ! attributes.smooth;\n\n\t},\n\n\tparseConnections( connections, nodes ) {\n\n\t\tvar materialConnections = {\n\t\t\tmaps: {}\n\t\t};\n\n\t\tvar inputName = connections.inputName;\n\t\tvar inputNodeName = connections.inputNodeName;\n\t\tvar nodeName = connections.nodeName;\n\n\t\tvar scope = this;\n\t\tinputName.forEach( function ( name, index ) {\n\n\t\t\tif ( name === 'Material' ) {\n\n\t\t\t\tvar matNode = scope.getNodeByRefName( inputNodeName[ index ], nodes );\n\t\t\t\tmaterialConnections.attributes = matNode.attributes;\n\t\t\t\tmaterialConnections.envMap = matNode.fileName;\n\t\t\t\tmaterialConnections.name = inputNodeName[ index ];\n\n\t\t\t}\n\n\t\t} );\n\n\t\tnodeName.forEach( function ( name, index ) {\n\n\t\t\tif ( name === materialConnections.name ) {\n\n\t\t\t\tmaterialConnections.maps[ inputName[ index ] ] = scope.getNodeByRefName( inputNodeName[ index ], nodes );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn materialConnections;\n\n\t},\n\n\tgetNodeByRefName( refName, nodes ) {\n\n\t\tfor ( var name in nodes ) {\n\n\t\t\tif ( nodes[ name ].refName === refName ) return nodes[ name ];\n\n\t\t}\n\n\t},\n\n\tparseTextureNodes( textureNodes ) {\n\n\t\tvar maps = {};\n\n\t\tfor ( var name in textureNodes ) {\n\n\t\t\tvar node = textureNodes[ name ];\n\t\t\tvar path = node.fileName;\n\n\t\t\tif ( ! path ) return;\n\n\t\t\tvar texture = this.loadTexture( path );\n\n\t\t\tif ( node.widthWrappingMode !== undefined ) texture.wrapS = this.getWrappingType( node.widthWrappingMode );\n\t\t\tif ( node.heightWrappingMode !== undefined ) texture.wrapT = this.getWrappingType( node.heightWrappingMode );\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'Color':\n\t\t\t\t\tmaps.map = texture;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Roughness':\n\t\t\t\t\tmaps.roughnessMap = texture;\n\t\t\t\t\tmaps.roughness = 0.5;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Specular':\n\t\t\t\t\tmaps.specularMap = texture;\n\t\t\t\t\tmaps.specular = 0xffffff;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Luminous':\n\t\t\t\t\tmaps.emissiveMap = texture;\n\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Luminous Color':\n\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Metallic':\n\t\t\t\t\tmaps.metalnessMap = texture;\n\t\t\t\t\tmaps.metalness = 0.5;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Transparency':\n\t\t\t\tcase 'Alpha':\n\t\t\t\t\tmaps.alphaMap = texture;\n\t\t\t\t\tmaps.transparent = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Normal':\n\t\t\t\t\tmaps.normalMap = texture;\n\t\t\t\t\tif ( node.amplitude !== undefined ) maps.normalScale = new Vector2( node.amplitude, node.amplitude );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Bump':\n\t\t\t\t\tmaps.bumpMap = texture;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// LWO BSDF materials can have both spec and rough, but this is not valid in three\n\t\tif ( maps.roughnessMap && maps.specularMap ) delete maps.specularMap;\n\n\t\treturn maps;\n\n\t},\n\n\t// maps can also be defined on individual material attributes, parse those here\n\t// This occurs on Standard (Phong) surfaces\n\tparseAttributeImageMaps( attributes, textures, maps ) {\n\n\t\tfor ( var name in attributes ) {\n\n\t\t\tvar attribute = attributes[ name ];\n\n\t\t\tif ( attribute.maps ) {\n\n\t\t\t\tvar mapData = attribute.maps[ 0 ];\n\n\t\t\t\tvar path = this.getTexturePathByIndex( mapData.imageIndex, textures );\n\t\t\t\tif ( ! path ) return;\n\n\t\t\t\tvar texture = this.loadTexture( path );\n\n\t\t\t\tif ( mapData.wrap !== undefined ) texture.wrapS = this.getWrappingType( mapData.wrap.w );\n\t\t\t\tif ( mapData.wrap !== undefined ) texture.wrapT = this.getWrappingType( mapData.wrap.h );\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'Color':\n\t\t\t\t\t\tmaps.map = texture;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Diffuse':\n\t\t\t\t\t\tmaps.aoMap = texture;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Roughness':\n\t\t\t\t\t\tmaps.roughnessMap = texture;\n\t\t\t\t\t\tmaps.roughness = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Specular':\n\t\t\t\t\t\tmaps.specularMap = texture;\n\t\t\t\t\t\tmaps.specular = 0xffffff;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Luminosity':\n\t\t\t\t\t\tmaps.emissiveMap = texture;\n\t\t\t\t\t\tmaps.emissive = 0x808080;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Metallic':\n\t\t\t\t\t\tmaps.metalnessMap = texture;\n\t\t\t\t\t\tmaps.metalness = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Transparency':\n\t\t\t\t\tcase 'Alpha':\n\t\t\t\t\t\tmaps.alphaMap = texture;\n\t\t\t\t\t\tmaps.transparent = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Normal':\n\t\t\t\t\t\tmaps.normalMap = texture;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Bump':\n\t\t\t\t\t\tmaps.bumpMap = texture;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tparseAttributes( attributes, maps ) {\n\n\t\tvar params = {};\n\n\t\t// don't use color data if color map is present\n\t\tif ( attributes.Color && ! maps.map ) {\n\n\t\t\tparams.color = new Color().fromArray( attributes.Color.value );\n\n\t\t} else params.color = new Color();\n\n\n\t\tif ( attributes.Transparency && attributes.Transparency.value !== 0 ) {\n\n\t\t\tparams.opacity = 1 - attributes.Transparency.value;\n\t\t\tparams.transparent = true;\n\n\t\t}\n\n\t\tif ( attributes[ 'Bump Height' ] ) params.bumpScale = attributes[ 'Bump Height' ].value * 0.1;\n\n\t\tif ( attributes[ 'Refraction Index' ] ) params.refractionRatio = 1 / attributes[ 'Refraction Index' ].value;\n\n\t\tthis.parsePhysicalAttributes( params, attributes, maps );\n\t\tthis.parseStandardAttributes( params, attributes, maps );\n\t\tthis.parsePhongAttributes( params, attributes, maps );\n\n\t\treturn params;\n\n\t},\n\n\tparsePhysicalAttributes( params, attributes/*, maps*/ ) {\n\n\t\tif ( attributes.Clearcoat && attributes.Clearcoat.value > 0 ) {\n\n\t\t\tparams.clearcoat = attributes.Clearcoat.value;\n\n\t\t\tif ( attributes[ 'Clearcoat Gloss' ] ) {\n\n\t\t\t\tparams.clearcoatRoughness = 0.5 * ( 1 - attributes[ 'Clearcoat Gloss' ].value );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\tparseStandardAttributes( params, attributes, maps ) {\n\n\n\t\tif ( attributes.Luminous ) {\n\n\t\t\tparams.emissiveIntensity = attributes.Luminous.value;\n\n\t\t\tif ( attributes[ 'Luminous Color' ] && ! maps.emissive ) {\n\n\t\t\t\tparams.emissive = new Color().fromArray( attributes[ 'Luminous Color' ].value );\n\n\t\t\t} else {\n\n\t\t\t\tparams.emissive = new Color( 0x808080 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( attributes.Roughness && ! maps.roughnessMap ) params.roughness = attributes.Roughness.value;\n\t\tif ( attributes.Metallic && ! maps.metalnessMap ) params.metalness = attributes.Metallic.value;\n\n\t},\n\n\tparsePhongAttributes( params, attributes, maps ) {\n\n\t\tif ( attributes.Diffuse ) params.color.multiplyScalar( attributes.Diffuse.value );\n\n\t\tif ( attributes.Reflection ) {\n\n\t\t\tparams.reflectivity = attributes.Reflection.value;\n\t\t\tparams.combine = AddOperation;\n\n\t\t}\n\n\t\tif ( attributes.Luminosity ) {\n\n\t\t\tparams.emissiveIntensity = attributes.Luminosity.value;\n\n\t\t\tif ( ! maps.emissiveMap && ! maps.map ) {\n\n\t\t\t\tparams.emissive = params.color;\n\n\t\t\t} else {\n\n\t\t\t\tparams.emissive = new Color( 0x808080 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse specular if there is no roughness - we will interpret the material as 'Phong' in this case\n\t\tif ( ! attributes.Roughness && attributes.Specular && ! maps.specularMap ) {\n\n\t\t\tif ( attributes[ 'Color Highlight' ] ) {\n\n\t\t\t\tparams.specular = new Color().setScalar( attributes.Specular.value ).lerp( params.color.clone().multiplyScalar( attributes.Specular.value ), attributes[ 'Color Highlight' ].value );\n\n\t\t\t} else {\n\n\t\t\t\tparams.specular = new Color().setScalar( attributes.Specular.value );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( params.specular && attributes.Glossiness ) params.shininess = 7 + Math.pow( 2, attributes.Glossiness.value * 12 + 2 );\n\n\t},\n\n\tparseEnvMap( connections, maps, attributes ) {\n\n\t\tif ( connections.envMap ) {\n\n\t\t\tvar envMap = this.loadTexture( connections.envMap );\n\n\t\t\tif ( attributes.transparent && attributes.opacity < 0.999 ) {\n\n\t\t\t\tenvMap.mapping = EquirectangularRefractionMapping;\n\n\t\t\t\t// Reflectivity and refraction mapping don't work well together in Phong materials\n\t\t\t\tif ( attributes.reflectivity !== undefined ) {\n\n\t\t\t\t\tdelete attributes.reflectivity;\n\t\t\t\t\tdelete attributes.combine;\n\n\t\t\t\t}\n\n\t\t\t\tif ( attributes.metalness !== undefined ) {\n\n\t\t\t\t\tdelete attributes.metalness;\n\n\t\t\t\t}\n\n\t\t\t} else envMap.mapping = EquirectangularReflectionMapping;\n\n\t\t\tmaps.envMap = envMap;\n\n\t\t}\n\n\t},\n\n\t// get texture defined at top level by its index\n\tgetTexturePathByIndex( index ) {\n\n\t\tvar fileName = '';\n\n\t\tif ( ! lwoTree.textures ) return fileName;\n\n\t\tlwoTree.textures.forEach( function ( texture ) {\n\n\t\t\tif ( texture.index === index ) fileName = texture.fileName;\n\n\t\t} );\n\n\t\treturn fileName;\n\n\t},\n\n\tloadTexture( path ) {\n\n\t\tif ( ! path ) return null;\n\n\t\tvar texture;\n\n\t\ttexture = this.textureLoader.load(\n\t\t\tpath,\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\tfunction () {\n\n\t\t\t\tconsole.warn( 'LWOLoader: non-standard resource hierarchy. Use \\`resourcePath\\` parameter to specify root content directory.' );\n\n\t\t\t}\n\t\t);\n\n\t\treturn texture;\n\n\t},\n\n\t// 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\tgetWrappingType( num ) {\n\n\t\tswitch ( num ) {\n\n\t\t\tcase 0:\n\t\t\t\tconsole.warn( 'LWOLoader: \"Reset\" texture wrapping type is not supported in three.js' );\n\t\t\t\treturn ClampToEdgeWrapping;\n\t\t\tcase 1: return RepeatWrapping;\n\t\t\tcase 2: return MirroredRepeatWrapping;\n\t\t\tcase 3: return ClampToEdgeWrapping;\n\n\t\t}\n\n\t},\n\n\tgetMaterialType( nodeData ) {\n\n\t\tif ( nodeData.Clearcoat && nodeData.Clearcoat.value > 0 ) return MeshPhysicalMaterial;\n\t\tif ( nodeData.Roughness ) return MeshStandardMaterial;\n\t\treturn MeshPhongMaterial;\n\n\t}\n\n};\n\nfunction GeometryParser() {}\n\nGeometryParser.prototype = {\n\n\tconstructor: GeometryParser,\n\n\tparse( geoData, layer ) {\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( geoData.points, 3 ) );\n\n\t\tvar indices = this.splitIndices( geoData.vertexIndices, geoData.polygonDimensions );\n\t\tgeometry.setIndex( indices );\n\n\t\tthis.parseGroups( geometry, geoData );\n\n\t\tgeometry.computeVertexNormals();\n\n\t\tthis.parseUVs( geometry, layer, indices );\n\t\tthis.parseMorphTargets( geometry, layer, indices );\n\n\t\t// TODO: z may need to be reversed to account for coordinate system change\n\t\tgeometry.translate( - layer.pivot[ 0 ], - layer.pivot[ 1 ], - layer.pivot[ 2 ] );\n\n\t\t// var userData = geometry.userData;\n\t\t// geometry = geometry.toNonIndexed()\n\t\t// geometry.userData = userData;\n\n\t\treturn geometry;\n\n\t},\n\n\t// split quads into tris\n\tsplitIndices( indices, polygonDimensions ) {\n\n\t\tvar remappedIndices = [];\n\n\t\tvar i = 0;\n\t\tpolygonDimensions.forEach( function ( dim ) {\n\n\t\t\tif ( dim < 4 ) {\n\n\t\t\t\tfor ( var k = 0; k < dim; k ++ ) remappedIndices.push( indices[ i + k ] );\n\n\t\t\t} else if ( dim === 4 ) {\n\n\t\t\t\tremappedIndices.push(\n\t\t\t\t\tindices[ i ],\n\t\t\t\t\tindices[ i + 1 ],\n\t\t\t\t\tindices[ i + 2 ],\n\n\t\t\t\t\tindices[ i ],\n\t\t\t\t\tindices[ i + 2 ],\n\t\t\t\t\tindices[ i + 3 ]\n\n\t\t\t\t);\n\n\t\t\t} else if ( dim > 4 ) {\n\n\t\t\t\tfor ( var k = 1; k < dim - 1; k ++ ) {\n\n\t\t\t\t\tremappedIndices.push( indices[ i ], indices[ i + k ], indices[ i + k + 1 ] );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'LWOLoader: polygons with greater than 4 sides are not supported' );\n\n\t\t\t}\n\n\t\t\ti += dim;\n\n\t\t} );\n\n\t\treturn remappedIndices;\n\n\t},\n\n\t// NOTE: currently ignoring poly indices and assuming that they are intelligently ordered\n\tparseGroups( geometry, geoData ) {\n\n\t\tvar tags = lwoTree.tags;\n\t\tvar matNames = [];\n\n\t\tvar elemSize = 3;\n\t\tif ( geoData.type === 'lines' ) elemSize = 2;\n\t\tif ( geoData.type === 'points' ) elemSize = 1;\n\n\t\tvar remappedIndices = this.splitMaterialIndices( geoData.polygonDimensions, geoData.materialIndices );\n\n\t\tvar indexNum = 0; // create new indices in numerical order\n\t\tvar indexPairs = {}; // original indices mapped to numerical indices\n\n\t\tvar prevMaterialIndex;\n\n\t\tvar prevStart = 0;\n\t\tvar currentCount = 0;\n\n\t\tfor ( var i = 0; i < remappedIndices.length; i += 2 ) {\n\n\t\t\tvar materialIndex = remappedIndices[ i + 1 ];\n\n\t\t\tif ( i === 0 ) matNames[ indexNum ] = tags[ materialIndex ];\n\n\t\t\tif ( prevMaterialIndex === undefined ) prevMaterialIndex = materialIndex;\n\n\t\t\tif ( materialIndex !== prevMaterialIndex ) {\n\n\t\t\t\tvar currentIndex;\n\t\t\t\tif ( indexPairs[ tags[ prevMaterialIndex ] ] ) {\n\n\t\t\t\t\tcurrentIndex = indexPairs[ tags[ prevMaterialIndex ] ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentIndex = indexNum;\n\t\t\t\t\tindexPairs[ tags[ prevMaterialIndex ] ] = indexNum;\n\t\t\t\t\tmatNames[ indexNum ] = tags[ prevMaterialIndex ];\n\t\t\t\t\tindexNum ++;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addGroup( prevStart, currentCount, currentIndex );\n\n\t\t\t\tprevStart += currentCount;\n\n\t\t\t\tprevMaterialIndex = materialIndex;\n\t\t\t\tcurrentCount = 0;\n\n\t\t\t}\n\n\t\t\tcurrentCount += elemSize;\n\n\t\t}\n\n\t\t// the loop above doesn't add the last group, do that here.\n\t\tif ( geometry.groups.length > 0 ) {\n\n\t\t\tvar currentIndex;\n\t\t\tif ( indexPairs[ tags[ materialIndex ] ] ) {\n\n\t\t\t\tcurrentIndex = indexPairs[ tags[ materialIndex ] ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentIndex = indexNum;\n\t\t\t\tindexPairs[ tags[ materialIndex ] ] = indexNum;\n\t\t\t\tmatNames[ indexNum ] = tags[ materialIndex ];\n\n\t\t\t}\n\n\t\t\tgeometry.addGroup( prevStart, currentCount, currentIndex );\n\n\t\t}\n\n\t\t// Mat names from TAGS chunk, used to build up an array of materials for this geometry\n\t\tgeometry.userData.matNames = matNames;\n\n\t},\n\n\tsplitMaterialIndices( polygonDimensions, indices ) {\n\n\t\tvar remappedIndices = [];\n\n\t\tpolygonDimensions.forEach( function ( dim, i ) {\n\n\t\t\tif ( dim <= 3 ) {\n\n\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t} else if ( dim === 4 ) {\n\n\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ], indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t} else {\n\n\t\t\t\t // ignore > 4 for now\n\t\t\t\tfor ( var k = 0; k < dim - 2; k ++ ) {\n\n\t\t\t\t\tremappedIndices.push( indices[ i * 2 ], indices[ i * 2 + 1 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn remappedIndices;\n\n\t},\n\n\t// UV maps:\n\t// 1: are defined via index into an array of points, not into a geometry\n\t// - the geometry is also defined by an index into this array, but the indexes may not match\n\t// 2: there can be any number of UV maps for a single geometry. Here these are combined,\n\t// \twith preference given to the first map encountered\n\t// 3: UV maps can be partial - that is, defined for only a part of the geometry\n\t// 4: UV maps can be VMAP or VMAD (discontinuous, to allow for seams). In practice, most\n\t// UV maps are defined as partially VMAP and partially VMAD\n\t// VMADs are currently not supported\n\tparseUVs( geometry, layer ) {\n\n\t\t// start by creating a UV map set to zero for the whole geometry\n\t\tvar remappedUVs = Array.from( Array( geometry.attributes.position.count * 2 ), function () {\n\n\t\t\treturn 0;\n\n\t\t} );\n\n\t\tfor ( var name in layer.uvs ) {\n\n\t\t\tvar uvs = layer.uvs[ name ].uvs;\n\t\t\tvar uvIndices = layer.uvs[ name ].uvIndices;\n\n\t\t\tuvIndices.forEach( function ( i, j ) {\n\n\t\t\t\tremappedUVs[ i * 2 ] = uvs[ j * 2 ];\n\t\t\t\tremappedUVs[ i * 2 + 1 ] = uvs[ j * 2 + 1 ];\n\n\t\t\t} );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( remappedUVs, 2 ) );\n\n\t},\n\n\tparseMorphTargets( geometry, layer ) {\n\n\t\tvar num = 0;\n\t\tfor ( var name in layer.morphTargets ) {\n\n\t\t\tvar remappedPoints = geometry.attributes.position.array.slice();\n\n\t\t\tif ( ! geometry.morphAttributes.position ) geometry.morphAttributes.position = [];\n\n\t\t\tvar morphPoints = layer.morphTargets[ name ].points;\n\t\t\tvar morphIndices = layer.morphTargets[ name ].indices;\n\t\t\tvar type = layer.morphTargets[ name ].type;\n\n\t\t\tmorphIndices.forEach( function ( i, j ) {\n\n\t\t\t\tif ( type === 'relative' ) {\n\n\t\t\t\t\tremappedPoints[ i * 3 ] += morphPoints[ j * 3 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 1 ] += morphPoints[ j * 3 + 1 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 2 ] += morphPoints[ j * 3 + 2 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tremappedPoints[ i * 3 ] = morphPoints[ j * 3 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 1 ] = morphPoints[ j * 3 + 1 ];\n\t\t\t\t\tremappedPoints[ i * 3 + 2 ] = morphPoints[ j * 3 + 2 ];\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tgeometry.morphAttributes.position[ num ] = new Float32BufferAttribute( remappedPoints, 3 );\n\t\t\tgeometry.morphAttributes.position[ num ].name = name;\n\n\t\t\tnum ++;\n\n\t\t}\n\n\t\tgeometry.morphTargetsRelative = false;\n\n\t},\n\n};\n\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction extractParentUrl( url, dir ) {\n\n\tvar index = url.indexOf( dir );\n\n\tif ( index === - 1 ) return './';\n\n\treturn url.substr( 0, index );\n\n}\n\nexport { LWOLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/LottieLoader.js",
    "content": "import {\n\tFileLoader,\n\tLoader,\n\tCanvasTexture,\n\tNearestFilter\n} from '../../../build/three.module.js';\n\nclass LottieLoader extends Loader {\n\n\tsetQuality( value ) {\n\n\t\tthis._quality = value;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst quality = this._quality || 1;\n\n\t\tconst texture = new CanvasTexture();\n\t\ttexture.minFilter = NearestFilter;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tconst data = JSON.parse( text );\n\n\t\t\t// bodymoving uses container.offetWidth and offsetHeight\n\t\t\t// to define width/height\n\n\t\t\tconst container = document.createElement( 'div' );\n\t\t\tcontainer.style.width = data.w + 'px';\n\t\t\tcontainer.style.height = data.h + 'px';\n\t\t\tdocument.body.appendChild( container );\n\n\t\t\t// eslint-disable-next-line no-undef\n\t\t\tconst animation = bodymovin.loadAnimation( {\n\t\t\t\tcontainer: container,\n\t\t\t\tanimType: 'canvas',\n\t\t\t\tloop: true,\n\t\t\t\tautoplay: true,\n\t\t\t\tanimationData: data,\n\t\t\t\trendererSettings: { dpr: quality }\n\t\t\t} );\n\n\t\t\ttexture.animation = animation;\n\t\t\ttexture.image = animation.container;\n\n\t\t\tanimation.addEventListener( 'enterFrame', function () {\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t} );\n\n\t\t\tcontainer.style.display = 'none';\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nexport { LottieLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/MD2Loader.js",
    "content": "import {\n\tAnimationClip,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tVector3\n} from '../../../build/three.module.js';\n\nvar MD2Loader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nMD2Loader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: MD2Loader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: ( function () {\n\n\t\tvar normalData = [\n\t\t\t[ - 0.525731, 0.000000, 0.850651 ], [ - 0.442863, 0.238856, 0.864188 ],\n\t\t\t[ - 0.295242, 0.000000, 0.955423 ], [ - 0.309017, 0.500000, 0.809017 ],\n\t\t\t[ - 0.162460, 0.262866, 0.951056 ], [ 0.000000, 0.000000, 1.000000 ],\n\t\t\t[ 0.000000, 0.850651, 0.525731 ], [ - 0.147621, 0.716567, 0.681718 ],\n\t\t\t[ 0.147621, 0.716567, 0.681718 ], [ 0.000000, 0.525731, 0.850651 ],\n\t\t\t[ 0.309017, 0.500000, 0.809017 ], [ 0.525731, 0.000000, 0.850651 ],\n\t\t\t[ 0.295242, 0.000000, 0.955423 ], [ 0.442863, 0.238856, 0.864188 ],\n\t\t\t[ 0.162460, 0.262866, 0.951056 ], [ - 0.681718, 0.147621, 0.716567 ],\n\t\t\t[ - 0.809017, 0.309017, 0.500000 ], [ - 0.587785, 0.425325, 0.688191 ],\n\t\t\t[ - 0.850651, 0.525731, 0.000000 ], [ - 0.864188, 0.442863, 0.238856 ],\n\t\t\t[ - 0.716567, 0.681718, 0.147621 ], [ - 0.688191, 0.587785, 0.425325 ],\n\t\t\t[ - 0.500000, 0.809017, 0.309017 ], [ - 0.238856, 0.864188, 0.442863 ],\n\t\t\t[ - 0.425325, 0.688191, 0.587785 ], [ - 0.716567, 0.681718, - 0.147621 ],\n\t\t\t[ - 0.500000, 0.809017, - 0.309017 ], [ - 0.525731, 0.850651, 0.000000 ],\n\t\t\t[ 0.000000, 0.850651, - 0.525731 ], [ - 0.238856, 0.864188, - 0.442863 ],\n\t\t\t[ 0.000000, 0.955423, - 0.295242 ], [ - 0.262866, 0.951056, - 0.162460 ],\n\t\t\t[ 0.000000, 1.000000, 0.000000 ], [ 0.000000, 0.955423, 0.295242 ],\n\t\t\t[ - 0.262866, 0.951056, 0.162460 ], [ 0.238856, 0.864188, 0.442863 ],\n\t\t\t[ 0.262866, 0.951056, 0.162460 ], [ 0.500000, 0.809017, 0.309017 ],\n\t\t\t[ 0.238856, 0.864188, - 0.442863 ], [ 0.262866, 0.951056, - 0.162460 ],\n\t\t\t[ 0.500000, 0.809017, - 0.309017 ], [ 0.850651, 0.525731, 0.000000 ],\n\t\t\t[ 0.716567, 0.681718, 0.147621 ], [ 0.716567, 0.681718, - 0.147621 ],\n\t\t\t[ 0.525731, 0.850651, 0.000000 ], [ 0.425325, 0.688191, 0.587785 ],\n\t\t\t[ 0.864188, 0.442863, 0.238856 ], [ 0.688191, 0.587785, 0.425325 ],\n\t\t\t[ 0.809017, 0.309017, 0.500000 ], [ 0.681718, 0.147621, 0.716567 ],\n\t\t\t[ 0.587785, 0.425325, 0.688191 ], [ 0.955423, 0.295242, 0.000000 ],\n\t\t\t[ 1.000000, 0.000000, 0.000000 ], [ 0.951056, 0.162460, 0.262866 ],\n\t\t\t[ 0.850651, - 0.525731, 0.000000 ], [ 0.955423, - 0.295242, 0.000000 ],\n\t\t\t[ 0.864188, - 0.442863, 0.238856 ], [ 0.951056, - 0.162460, 0.262866 ],\n\t\t\t[ 0.809017, - 0.309017, 0.500000 ], [ 0.681718, - 0.147621, 0.716567 ],\n\t\t\t[ 0.850651, 0.000000, 0.525731 ], [ 0.864188, 0.442863, - 0.238856 ],\n\t\t\t[ 0.809017, 0.309017, - 0.500000 ], [ 0.951056, 0.162460, - 0.262866 ],\n\t\t\t[ 0.525731, 0.000000, - 0.850651 ], [ 0.681718, 0.147621, - 0.716567 ],\n\t\t\t[ 0.681718, - 0.147621, - 0.716567 ], [ 0.850651, 0.000000, - 0.525731 ],\n\t\t\t[ 0.809017, - 0.309017, - 0.500000 ], [ 0.864188, - 0.442863, - 0.238856 ],\n\t\t\t[ 0.951056, - 0.162460, - 0.262866 ], [ 0.147621, 0.716567, - 0.681718 ],\n\t\t\t[ 0.309017, 0.500000, - 0.809017 ], [ 0.425325, 0.688191, - 0.587785 ],\n\t\t\t[ 0.442863, 0.238856, - 0.864188 ], [ 0.587785, 0.425325, - 0.688191 ],\n\t\t\t[ 0.688191, 0.587785, - 0.425325 ], [ - 0.147621, 0.716567, - 0.681718 ],\n\t\t\t[ - 0.309017, 0.500000, - 0.809017 ], [ 0.000000, 0.525731, - 0.850651 ],\n\t\t\t[ - 0.525731, 0.000000, - 0.850651 ], [ - 0.442863, 0.238856, - 0.864188 ],\n\t\t\t[ - 0.295242, 0.000000, - 0.955423 ], [ - 0.162460, 0.262866, - 0.951056 ],\n\t\t\t[ 0.000000, 0.000000, - 1.000000 ], [ 0.295242, 0.000000, - 0.955423 ],\n\t\t\t[ 0.162460, 0.262866, - 0.951056 ], [ - 0.442863, - 0.238856, - 0.864188 ],\n\t\t\t[ - 0.309017, - 0.500000, - 0.809017 ], [ - 0.162460, - 0.262866, - 0.951056 ],\n\t\t\t[ 0.000000, - 0.850651, - 0.525731 ], [ - 0.147621, - 0.716567, - 0.681718 ],\n\t\t\t[ 0.147621, - 0.716567, - 0.681718 ], [ 0.000000, - 0.525731, - 0.850651 ],\n\t\t\t[ 0.309017, - 0.500000, - 0.809017 ], [ 0.442863, - 0.238856, - 0.864188 ],\n\t\t\t[ 0.162460, - 0.262866, - 0.951056 ], [ 0.238856, - 0.864188, - 0.442863 ],\n\t\t\t[ 0.500000, - 0.809017, - 0.309017 ], [ 0.425325, - 0.688191, - 0.587785 ],\n\t\t\t[ 0.716567, - 0.681718, - 0.147621 ], [ 0.688191, - 0.587785, - 0.425325 ],\n\t\t\t[ 0.587785, - 0.425325, - 0.688191 ], [ 0.000000, - 0.955423, - 0.295242 ],\n\t\t\t[ 0.000000, - 1.000000, 0.000000 ], [ 0.262866, - 0.951056, - 0.162460 ],\n\t\t\t[ 0.000000, - 0.850651, 0.525731 ], [ 0.000000, - 0.955423, 0.295242 ],\n\t\t\t[ 0.238856, - 0.864188, 0.442863 ], [ 0.262866, - 0.951056, 0.162460 ],\n\t\t\t[ 0.500000, - 0.809017, 0.309017 ], [ 0.716567, - 0.681718, 0.147621 ],\n\t\t\t[ 0.525731, - 0.850651, 0.000000 ], [ - 0.238856, - 0.864188, - 0.442863 ],\n\t\t\t[ - 0.500000, - 0.809017, - 0.309017 ], [ - 0.262866, - 0.951056, - 0.162460 ],\n\t\t\t[ - 0.850651, - 0.525731, 0.000000 ], [ - 0.716567, - 0.681718, - 0.147621 ],\n\t\t\t[ - 0.716567, - 0.681718, 0.147621 ], [ - 0.525731, - 0.850651, 0.000000 ],\n\t\t\t[ - 0.500000, - 0.809017, 0.309017 ], [ - 0.238856, - 0.864188, 0.442863 ],\n\t\t\t[ - 0.262866, - 0.951056, 0.162460 ], [ - 0.864188, - 0.442863, 0.238856 ],\n\t\t\t[ - 0.809017, - 0.309017, 0.500000 ], [ - 0.688191, - 0.587785, 0.425325 ],\n\t\t\t[ - 0.681718, - 0.147621, 0.716567 ], [ - 0.442863, - 0.238856, 0.864188 ],\n\t\t\t[ - 0.587785, - 0.425325, 0.688191 ], [ - 0.309017, - 0.500000, 0.809017 ],\n\t\t\t[ - 0.147621, - 0.716567, 0.681718 ], [ - 0.425325, - 0.688191, 0.587785 ],\n\t\t\t[ - 0.162460, - 0.262866, 0.951056 ], [ 0.442863, - 0.238856, 0.864188 ],\n\t\t\t[ 0.162460, - 0.262866, 0.951056 ], [ 0.309017, - 0.500000, 0.809017 ],\n\t\t\t[ 0.147621, - 0.716567, 0.681718 ], [ 0.000000, - 0.525731, 0.850651 ],\n\t\t\t[ 0.425325, - 0.688191, 0.587785 ], [ 0.587785, - 0.425325, 0.688191 ],\n\t\t\t[ 0.688191, - 0.587785, 0.425325 ], [ - 0.955423, 0.295242, 0.000000 ],\n\t\t\t[ - 0.951056, 0.162460, 0.262866 ], [ - 1.000000, 0.000000, 0.000000 ],\n\t\t\t[ - 0.850651, 0.000000, 0.525731 ], [ - 0.955423, - 0.295242, 0.000000 ],\n\t\t\t[ - 0.951056, - 0.162460, 0.262866 ], [ - 0.864188, 0.442863, - 0.238856 ],\n\t\t\t[ - 0.951056, 0.162460, - 0.262866 ], [ - 0.809017, 0.309017, - 0.500000 ],\n\t\t\t[ - 0.864188, - 0.442863, - 0.238856 ], [ - 0.951056, - 0.162460, - 0.262866 ],\n\t\t\t[ - 0.809017, - 0.309017, - 0.500000 ], [ - 0.681718, 0.147621, - 0.716567 ],\n\t\t\t[ - 0.681718, - 0.147621, - 0.716567 ], [ - 0.850651, 0.000000, - 0.525731 ],\n\t\t\t[ - 0.688191, 0.587785, - 0.425325 ], [ - 0.587785, 0.425325, - 0.688191 ],\n\t\t\t[ - 0.425325, 0.688191, - 0.587785 ], [ - 0.425325, - 0.688191, - 0.587785 ],\n\t\t\t[ - 0.587785, - 0.425325, - 0.688191 ], [ - 0.688191, - 0.587785, - 0.425325 ]\n\t\t];\n\n\t\treturn function ( buffer ) {\n\n\t\t\tvar data = new DataView( buffer );\n\n\t\t\t// http://tfc.duke.free.fr/coding/md2-specs-en.html\n\n\t\t\tvar header = {};\n\t\t\tvar headerNames = [\n\t\t\t\t'ident', 'version',\n\t\t\t\t'skinwidth', 'skinheight',\n\t\t\t\t'framesize',\n\t\t\t\t'num_skins', 'num_vertices', 'num_st', 'num_tris', 'num_glcmds', 'num_frames',\n\t\t\t\t'offset_skins', 'offset_st', 'offset_tris', 'offset_frames', 'offset_glcmds', 'offset_end'\n\t\t\t];\n\n\t\t\tfor ( var i = 0; i < headerNames.length; i ++ ) {\n\n\t\t\t\theader[ headerNames[ i ] ] = data.getInt32( i * 4, true );\n\n\t\t\t}\n\n\t\t\tif ( header.ident !== 844121161 || header.version !== 8 ) {\n\n\t\t\t\tconsole.error( 'Not a valid MD2 file' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( header.offset_end !== data.byteLength ) {\n\n\t\t\t\tconsole.error( 'Corrupted MD2 file' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\t// uvs\n\n\t\t\tvar uvsTemp = [];\n\t\t\tvar offset = header.offset_st;\n\n\t\t\tfor ( var i = 0, l = header.num_st; i < l; i ++ ) {\n\n\t\t\t\tvar u = data.getInt16( offset + 0, true );\n\t\t\t\tvar v = data.getInt16( offset + 2, true );\n\n\t\t\t\tuvsTemp.push( u / header.skinwidth, 1 - ( v / header.skinheight ) );\n\n\t\t\t\toffset += 4;\n\n\t\t\t}\n\n\t\t\t// triangles\n\n\t\t\toffset = header.offset_tris;\n\n\t\t\tvar vertexIndices = [];\n\t\t\tvar uvIndices = [];\n\n\t\t\tfor ( var i = 0, l = header.num_tris; i < l; i ++ ) {\n\n\t\t\t\tvertexIndices.push(\n\t\t\t\t\tdata.getUint16( offset + 0, true ),\n\t\t\t\t\tdata.getUint16( offset + 2, true ),\n\t\t\t\t\tdata.getUint16( offset + 4, true )\n\t\t\t\t);\n\n\t\t\t\tuvIndices.push(\n\t\t\t\t\tdata.getUint16( offset + 6, true ),\n\t\t\t\t\tdata.getUint16( offset + 8, true ),\n\t\t\t\t\tdata.getUint16( offset + 10, true )\n\t\t\t\t);\n\n\t\t\t\toffset += 12;\n\n\t\t\t}\n\n\t\t\t// frames\n\n\t\t\tvar translation = new Vector3();\n\t\t\tvar scale = new Vector3();\n\t\t\tvar string = [];\n\n\t\t\tvar frames = [];\n\n\t\t\toffset = header.offset_frames;\n\n\t\t\tfor ( var i = 0, l = header.num_frames; i < l; i ++ ) {\n\n\t\t\t\tscale.set(\n\t\t\t\t\tdata.getFloat32( offset + 0, true ),\n\t\t\t\t\tdata.getFloat32( offset + 4, true ),\n\t\t\t\t\tdata.getFloat32( offset + 8, true )\n\t\t\t\t);\n\n\t\t\t\ttranslation.set(\n\t\t\t\t\tdata.getFloat32( offset + 12, true ),\n\t\t\t\t\tdata.getFloat32( offset + 16, true ),\n\t\t\t\t\tdata.getFloat32( offset + 20, true )\n\t\t\t\t);\n\n\t\t\t\toffset += 24;\n\n\t\t\t\tfor ( var j = 0; j < 16; j ++ ) {\n\n\t\t\t\t\tvar character = data.getUint8( offset + j, true );\n\t\t\t\t\tif ( character === 0 ) break;\n\n\t\t\t\t\tstring[ j ] = character;\n\n\t\t\t\t}\n\n\t\t\t\tvar frame = {\n\t\t\t\t\tname: String.fromCharCode.apply( null, string ),\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: []\n\t\t\t\t};\n\n\t\t\t\toffset += 16;\n\n\t\t\t\tfor ( var j = 0; j < header.num_vertices; j ++ ) {\n\n\t\t\t\t\tvar x = data.getUint8( offset ++, true );\n\t\t\t\t\tvar y = data.getUint8( offset ++, true );\n\t\t\t\t\tvar z = data.getUint8( offset ++, true );\n\t\t\t\t\tvar n = normalData[ data.getUint8( offset ++, true ) ];\n\n\t\t\t\t\tx = x * scale.x + translation.x;\n\t\t\t\t\ty = y * scale.y + translation.y;\n\t\t\t\t\tz = z * scale.z + translation.z;\n\n\t\t\t\t\tframe.vertices.push( x, z, y ); // convert to Y-up\n\t\t\t\t\tframe.normals.push( n[ 0 ], n[ 2 ], n[ 1 ] ); // convert to Y-up\n\n\t\t\t\t}\n\n\t\t\t\tframes.push( frame );\n\n\t\t\t}\n\n\t\t\t// static\n\n\t\t\tvar positions = [];\n\t\t\tvar normals = [];\n\t\t\tvar uvs = [];\n\n\t\t\tvar verticesTemp = frames[ 0 ].vertices;\n\t\t\tvar normalsTemp = frames[ 0 ].normals;\n\n\t\t\tfor ( var i = 0, l = vertexIndices.length; i < l; i ++ ) {\n\n\t\t\t\tvar vertexIndex = vertexIndices[ i ];\n\t\t\t\tvar stride = vertexIndex * 3;\n\n\t\t\t\t//\n\n\t\t\t\tvar x = verticesTemp[ stride ];\n\t\t\t\tvar y = verticesTemp[ stride + 1 ];\n\t\t\t\tvar z = verticesTemp[ stride + 2 ];\n\n\t\t\t\tpositions.push( x, y, z );\n\n\t\t\t\t//\n\n\t\t\t\tvar nx = normalsTemp[ stride ];\n\t\t\t\tvar ny = normalsTemp[ stride + 1 ];\n\t\t\t\tvar nz = normalsTemp[ stride + 2 ];\n\n\t\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t\t//\n\n\t\t\t\tvar uvIndex = uvIndices[ i ];\n\t\t\t\tstride = uvIndex * 2;\n\n\t\t\t\tvar u = uvsTemp[ stride ];\n\t\t\t\tvar v = uvsTemp[ stride + 1 ];\n\n\t\t\t\tuvs.push( u, v );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t\t// animation\n\n\t\t\tvar morphPositions = [];\n\t\t\tvar morphNormals = [];\n\n\t\t\tfor ( var i = 0, l = frames.length; i < l; i ++ ) {\n\n\t\t\t\tvar frame = frames[ i ];\n\t\t\t\tvar attributeName = frame.name;\n\n\t\t\t\tif ( frame.vertices.length > 0 ) {\n\n\t\t\t\t\tvar positions = [];\n\n\t\t\t\t\tfor ( var j = 0, jl = vertexIndices.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar vertexIndex = vertexIndices[ j ];\n\t\t\t\t\t\tvar stride = vertexIndex * 3;\n\n\t\t\t\t\t\tvar x = frame.vertices[ stride ];\n\t\t\t\t\t\tvar y = frame.vertices[ stride + 1 ];\n\t\t\t\t\t\tvar z = frame.vertices[ stride + 2 ];\n\n\t\t\t\t\t\tpositions.push( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar positionAttribute = new Float32BufferAttribute( positions, 3 );\n\t\t\t\t\tpositionAttribute.name = attributeName;\n\n\t\t\t\t\tmorphPositions.push( positionAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tif ( frame.normals.length > 0 ) {\n\n\t\t\t\t\tvar normals = [];\n\n\t\t\t\t\tfor ( var j = 0, jl = vertexIndices.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar vertexIndex = vertexIndices[ j ];\n\t\t\t\t\t\tvar stride = vertexIndex * 3;\n\n\t\t\t\t\t\tvar nx = frame.normals[ stride ];\n\t\t\t\t\t\tvar ny = frame.normals[ stride + 1 ];\n\t\t\t\t\t\tvar nz = frame.normals[ stride + 2 ];\n\n\t\t\t\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar normalAttribute = new Float32BufferAttribute( normals, 3 );\n\t\t\t\t\tnormalAttribute.name = attributeName;\n\n\t\t\t\t\tmorphNormals.push( normalAttribute );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.morphAttributes.position = morphPositions;\n\t\t\tgeometry.morphAttributes.normal = morphNormals;\n\t\t\tgeometry.morphTargetsRelative = false;\n\n\t\t\tgeometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences( frames, 10 );\n\n\t\t\treturn geometry;\n\n\t\t};\n\n\t} )()\n\n} );\n\nexport { MD2Loader };\n"
  },
  {
    "path": "libs/three.js/loaders/MDDLoader.js",
    "content": "/**\n * MDD is a special format that stores a position for every vertex in a model for every frame in an animation.\n * Similar to BVH, it can be used to transfer animation data between different 3D applications or engines.\n *\n * MDD stores its data in binary format (big endian) in the following way:\n *\n * number of frames (a single uint32)\n * number of vertices (a single uint32)\n * time values for each frame (sequence of float32)\n * vertex data for each frame (sequence of float32)\n */\n\nimport {\n\tAnimationClip,\n\tBufferAttribute,\n\tFileLoader,\n\tLoader,\n\tNumberKeyframeTrack\n} from '../../../build/three.module.js';\n\nvar MDDLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nMDDLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: MDDLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\tonLoad( scope.parse( data ) );\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\tvar view = new DataView( data );\n\n\t\tvar totalFrames = view.getUint32( 0 );\n\t\tvar totalPoints = view.getUint32( 4 );\n\n\t\tvar offset = 8;\n\n\t\t// animation clip\n\n\t\tvar times = new Float32Array( totalFrames );\n\t\tvar values = new Float32Array( totalFrames * totalFrames ).fill( 0 );\n\n\t\tfor ( var i = 0; i < totalFrames; i ++ ) {\n\n\t\t\ttimes[ i ] = view.getFloat32( offset ); offset += 4;\n\t\t\tvalues[ ( totalFrames * i ) + i ] = 1;\n\n\t\t}\n\n\t\tvar track = new NumberKeyframeTrack( '.morphTargetInfluences', times, values );\n\t\tvar clip = new AnimationClip( 'default', times[ times.length - 1 ], [ track ] );\n\n\t\t// morph targets\n\n\t\tvar morphTargets = [];\n\n\t\tfor ( var i = 0; i < totalFrames; i ++ ) {\n\n\t\t\tvar morphTarget = new Float32Array( totalPoints * 3 );\n\n\t\t\tfor ( var j = 0; j < totalPoints; j ++ ) {\n\n\t\t\t\tvar stride = ( j * 3 );\n\n\t\t\t\tmorphTarget[ stride + 0 ] = view.getFloat32( offset ); offset += 4; // x\n\t\t\t\tmorphTarget[ stride + 1 ] = view.getFloat32( offset ); offset += 4; // y\n\t\t\t\tmorphTarget[ stride + 2 ] = view.getFloat32( offset ); offset += 4; // z\n\n\t\t\t}\n\n\t\t\tvar attribute = new BufferAttribute( morphTarget, 3 );\n\t\t\tattribute.name = 'morph_' + i;\n\n\t\t\tmorphTargets.push( attribute );\n\n\t\t}\n\n\t\treturn {\n\t\t\tmorphTargets: morphTargets,\n\t\t\tclip: clip\n\t\t};\n\n\t}\n\n} );\n\nexport { MDDLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/MMDLoader.js",
    "content": "import {\n\tAddOperation,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tColor,\n\tCustomBlending,\n\tDoubleSide,\n\tDstAlphaFactor,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tInterpolant,\n\tLoader,\n\tLoaderUtils,\n\tMeshToonMaterial,\n\tMultiplyOperation,\n\tNearestFilter,\n\tNumberKeyframeTrack,\n\tOneMinusSrcAlphaFactor,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSrcAlphaFactor,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector3,\n\tVectorKeyframeTrack\n} from '../../../build/three.module.js';\nimport { TGALoader } from '../loaders/TGALoader.js';\nimport { MMDParser } from '../libs/mmdparser.module.js';\n\n/**\n * Dependencies\n *  - mmd-parser https://github.com/takahirox/mmd-parser\n *  - TGALoader\n *  - OutlineEffect\n *\n * MMDLoader creates Three.js Objects from MMD resources as\n * PMD, PMX, VMD, and VPD files.\n *\n * PMD/PMX is a model data format, VMD is a motion data format\n * VPD is a posing data format used in MMD(Miku Miku Dance).\n *\n * MMD official site\n *  - https://sites.google.com/view/evpvp/\n *\n * PMD, VMD format (in Japanese)\n *  - http://blog.goo.ne.jp/torisu_tetosuki/e/209ad341d3ece2b1b4df24abf619d6e4\n *\n * PMX format\n *  - https://gist.github.com/felixjones/f8a06bd48f9da9a4539f\n *\n * TODO\n *  - light motion in vmd support.\n *  - SDEF support.\n *  - uv/material/bone morphing support.\n *  - more precise grant skinning support.\n *  - shadow support.\n */\n\nvar MMDLoader = ( function () {\n\n\t/**\n\t * @param {THREE.LoadingManager} manager\n\t */\n\tfunction MMDLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t\tthis.loader = new FileLoader( this.manager );\n\n\t\tthis.parser = null; // lazy generation\n\t\tthis.meshBuilder = new MeshBuilder( this.manager );\n\t\tthis.animationBuilder = new AnimationBuilder();\n\n\t}\n\n\tMMDLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: MMDLoader,\n\n\t\t/**\n\t\t * @param {string} animationPath\n\t\t * @return {MMDLoader}\n\t\t */\n\t\tsetAnimationPath: function ( animationPath ) {\n\n\t\t\tthis.animationPath = animationPath;\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// Load MMD assets as Three.js Object\n\n\t\t/**\n\t\t * Loads Model file (.pmd or .pmx) as a SkinnedMesh.\n\t\t *\n\t\t * @param {string} url - url to Model(.pmd or .pmx) file\n\t\t * @param {function} onLoad\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t */\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar builder = this.meshBuilder.setCrossOrigin( this.crossOrigin );\n\n\t\t\t// resource path\n\n\t\t\tvar resourcePath;\n\n\t\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\t\tresourcePath = this.resourcePath;\n\n\t\t\t} else if ( this.path !== '' ) {\n\n\t\t\t\tresourcePath = this.path;\n\n\t\t\t} else {\n\n\t\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t\t}\n\n\t\t\tvar modelExtension = this._extractExtension( url ).toLowerCase();\n\n\t\t\t// Should I detect by seeing header?\n\t\t\tif ( modelExtension !== 'pmd' && modelExtension !== 'pmx' ) {\n\n\t\t\t\tif ( onError ) onError( new Error( 'THREE.MMDLoader: Unknown model file extension .' + modelExtension + '.' ) );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis[ modelExtension === 'pmd' ? 'loadPMD' : 'loadPMX' ]( url, function ( data ) {\n\n\t\t\t\tonLoad(\tbuilder.build( data, resourcePath, onProgress, onError )\t);\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\t/**\n\t\t * Loads Motion file(s) (.vmd) as a AnimationClip.\n\t\t * If two or more files are specified, they'll be merged.\n\t\t *\n\t\t * @param {string|Array<string>} url - url(s) to animation(.vmd) file(s)\n\t\t * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object\n\t\t * @param {function} onLoad\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t */\n\t\tloadAnimation: function ( url, object, onLoad, onProgress, onError ) {\n\n\t\t\tvar builder = this.animationBuilder;\n\n\t\t\tthis.loadVMD( url, function ( vmd ) {\n\n\t\t\t\tonLoad( object.isCamera\n\t\t\t\t\t? builder.buildCameraAnimation( vmd )\n\t\t\t\t\t: builder.build( vmd, object ) );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\t/**\n\t\t * Loads mode file and motion file(s) as an object containing\n\t\t * a SkinnedMesh and a AnimationClip.\n\t\t * Tracks of AnimationClip are fitting to the model.\n\t\t *\n\t\t * @param {string} modelUrl - url to Model(.pmd or .pmx) file\n\t\t * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file\n\t\t * @param {function} onLoad\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t */\n\t\tloadWithAnimation: function ( modelUrl, vmdUrl, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tthis.load( modelUrl, function ( mesh ) {\n\n\t\t\t\tscope.loadAnimation( vmdUrl, mesh, function ( animation ) {\n\n\t\t\t\t\tonLoad( {\n\t\t\t\t\t\tmesh: mesh,\n\t\t\t\t\t\tanimation: animation\n\t\t\t\t\t} );\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\t// Load MMD assets as Object data parsed by MMDParser\n\n\t\t/**\n\t\t * Loads .pmd file as an Object.\n\t\t *\n\t\t * @param {string} url - url to .pmd file\n\t\t * @param {function} onLoad\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t */\n\t\tloadPMD: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar parser = this._getParser();\n\n\t\t\tthis.loader\n\t\t\t\t.setMimeType( undefined )\n\t\t\t\t.setPath( this.path )\n\t\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t\t.load( url, function ( buffer ) {\n\n\t\t\t\t\tonLoad( parser.parsePmd( buffer, true ) );\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\t/**\n\t\t * Loads .pmx file as an Object.\n\t\t *\n\t\t * @param {string} url - url to .pmx file\n\t\t * @param {function} onLoad\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t */\n\t\tloadPMX: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar parser = this._getParser();\n\n\t\t\tthis.loader\n\t\t\t\t.setMimeType( undefined )\n\t\t\t\t.setPath( this.path )\n\t\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t\t.load( url, function ( buffer ) {\n\n\t\t\t\t\tonLoad( parser.parsePmx( buffer, true ) );\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\t/**\n\t\t * Loads .vmd file as an Object. If two or more files are specified\n\t\t * they'll be merged.\n\t\t *\n\t\t * @param {string|Array<string>} url - url(s) to .vmd file(s)\n\t\t * @param {function} onLoad\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t */\n\t\tloadVMD: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar urls = Array.isArray( url ) ? url : [ url ];\n\n\t\t\tvar vmds = [];\n\t\t\tvar vmdNum = urls.length;\n\n\t\t\tvar parser = this._getParser();\n\n\t\t\tthis.loader\n\t\t\t\t.setMimeType( undefined )\n\t\t\t\t.setPath( this.animationPath )\n\t\t\t\t.setResponseType( 'arraybuffer' )\n\t\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t\t.setWithCredentials( this.withCredentials );\n\n\t\t\tfor ( var i = 0, il = urls.length; i < il; i ++ ) {\n\n\t\t\t\tthis.loader.load( urls[ i ], function ( buffer ) {\n\n\t\t\t\t\tvmds.push( parser.parseVmd( buffer, true ) );\n\n\t\t\t\t\tif ( vmds.length === vmdNum ) onLoad( parser.mergeVmds( vmds ) );\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Loads .vpd file as an Object.\n\t\t *\n\t\t * @param {string} url - url to .vpd file\n\t\t * @param {boolean} isUnicode\n\t\t * @param {function} onLoad\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t */\n\t\tloadVPD: function ( url, isUnicode, onLoad, onProgress, onError ) {\n\n\t\t\tvar parser = this._getParser();\n\n\t\t\tthis.loader\n\t\t\t\t.setMimeType( isUnicode ? undefined : 'text/plain; charset=shift_jis' )\n\t\t\t\t.setPath( this.animationPath )\n\t\t\t\t.setResponseType( 'text' )\n\t\t\t\t.setRequestHeader( this.requestHeader )\n\t\t\t\t.setWithCredentials( this.withCredentials )\n\t\t\t\t.load( url, function ( text ) {\n\n\t\t\t\t\tonLoad( parser.parseVpd( text, true ) );\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\t// private methods\n\n\t\t_extractExtension: function ( url ) {\n\n\t\t\tvar index = url.lastIndexOf( '.' );\n\t\t\treturn index < 0 ? '' : url.slice( index + 1 );\n\n\t\t},\n\n\t\t_getParser: function () {\n\n\t\t\tif ( this.parser === null ) {\n\n\t\t\t\tif ( typeof MMDParser === 'undefined' ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.MMDLoader: Import MMDParser https://github.com/takahirox/mmd-parser' );\n\n\t\t\t\t}\n\n\t\t\t\tthis.parser = new MMDParser.Parser(); // eslint-disable-line no-undef\n\n\t\t\t}\n\n\t\t\treturn this.parser;\n\n\t\t}\n\n\t} );\n\n\t// Utilities\n\n\t/*\n\t * base64 encoded defalut toon textures toon00.bmp - toon10.bmp.\n\t * We don't need to request external toon image files.\n\t * This idea is from http://www20.atpages.jp/katwat/three.js_r58/examples/mytest37/mmd.three.js\n\t */\n\tvar DEFAULT_TOON_TEXTURES = [\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=',\n\t\t'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII='\n\t];\n\n\t// Builders. They build Three.js object from Object data parsed by MMDParser.\n\n\t/**\n\t * @param {THREE.LoadingManager} manager\n\t */\n\tfunction MeshBuilder( manager ) {\n\n\t\tthis.geometryBuilder = new GeometryBuilder();\n\t\tthis.materialBuilder = new MaterialBuilder( manager );\n\n\t}\n\n\tMeshBuilder.prototype = {\n\n\t\tconstructor: MeshBuilder,\n\n\t\tcrossOrigin: 'anonymous',\n\n\t\t/**\n\t\t * @param {string} crossOrigin\n\t\t * @return {MeshBuilder}\n\t\t */\n\t\tsetCrossOrigin: function ( crossOrigin ) {\n\n\t\t\tthis.crossOrigin = crossOrigin;\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * @param {Object} data - parsed PMD/PMX data\n\t\t * @param {string} resourcePath\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t * @return {SkinnedMesh}\n\t\t */\n\t\tbuild: function ( data, resourcePath, onProgress, onError ) {\n\n\t\t\tvar geometry = this.geometryBuilder.build( data );\n\t\t\tvar material = this.materialBuilder\n\t\t\t\t.setCrossOrigin( this.crossOrigin )\n\t\t\t\t.setResourcePath( resourcePath )\n\t\t\t\t.build( data, geometry, onProgress, onError );\n\n\t\t\tvar mesh = new SkinnedMesh( geometry, material );\n\n\t\t\tvar skeleton = new Skeleton( initBones( mesh ) );\n\t\t\tmesh.bind( skeleton );\n\n\t\t\t// console.log( mesh ); // for console debug\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t};\n\n\t// TODO: Try to remove this function\n\n\tfunction initBones( mesh ) {\n\n\t\tvar geometry = mesh.geometry;\n\n\t\tvar bones = [], bone, gbone;\n\t\tvar i, il;\n\n\t\tif ( geometry && geometry.bones !== undefined ) {\n\n\t\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\t\tfor ( i = 0, il = geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = geometry.bones[ i ];\n\n\t\t\t\t// create new 'Bone' object\n\n\t\t\t\tbone = new Bone();\n\t\t\t\tbones.push( bone );\n\n\t\t\t\t// apply values\n\n\t\t\t\tbone.name = gbone.name;\n\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t}\n\n\t\t\t// second, create bone hierarchy\n\n\t\t\tfor ( i = 0, il = geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\tgbone = geometry.bones[ i ];\n\n\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\t\tmesh.add( bones[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t\t// let's update the corresponding matrices\n\n\t\tmesh.updateMatrixWorld( true );\n\n\t\treturn bones;\n\n\t}\n\n\t//\n\n\tfunction GeometryBuilder() {\n\n\t}\n\n\tGeometryBuilder.prototype = {\n\n\t\tconstructor: GeometryBuilder,\n\n\t\t/**\n\t\t * @param {Object} data - parsed PMD/PMX data\n\t\t * @return {BufferGeometry}\n\t\t */\n\t\tbuild: function ( data ) {\n\n\t\t\t// for geometry\n\t\t\tvar positions = [];\n\t\t\tvar uvs = [];\n\t\t\tvar normals = [];\n\n\t\t\tvar indices = [];\n\n\t\t\tvar groups = [];\n\n\t\t\tvar bones = [];\n\t\t\tvar skinIndices = [];\n\t\t\tvar skinWeights = [];\n\n\t\t\tvar morphTargets = [];\n\t\t\tvar morphPositions = [];\n\n\t\t\tvar iks = [];\n\t\t\tvar grants = [];\n\n\t\t\tvar rigidBodies = [];\n\t\t\tvar constraints = [];\n\n\t\t\t// for work\n\t\t\tvar offset = 0;\n\t\t\tvar boneTypeTable = {};\n\n\t\t\t// positions, normals, uvs, skinIndices, skinWeights\n\n\t\t\tfor ( var i = 0; i < data.metadata.vertexCount; i ++ ) {\n\n\t\t\t\tvar v = data.vertices[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = v.position.length; j < jl; j ++ ) {\n\n\t\t\t\t\tpositions.push( v.position[ j ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = v.normal.length; j < jl; j ++ ) {\n\n\t\t\t\t\tnormals.push( v.normal[ j ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = v.uv.length; j < jl; j ++ ) {\n\n\t\t\t\t\tuvs.push( v.uv[ j ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tskinIndices.push( v.skinIndices.length - 1 >= j ? v.skinIndices[ j ] : 0.0 );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\tskinWeights.push( v.skinWeights.length - 1 >= j ? v.skinWeights[ j ] : 0.0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( var i = 0; i < data.metadata.faceCount; i ++ ) {\n\n\t\t\t\tvar face = data.faces[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = face.indices.length; j < jl; j ++ ) {\n\n\t\t\t\t\tindices.push( face.indices[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// groups\n\n\t\t\tfor ( var i = 0; i < data.metadata.materialCount; i ++ ) {\n\n\t\t\t\tvar material = data.materials[ i ];\n\n\t\t\t\tgroups.push( {\n\t\t\t\t\toffset: offset * 3,\n\t\t\t\t\tcount: material.faceCount * 3\n\t\t\t\t} );\n\n\t\t\t\toffset += material.faceCount;\n\n\t\t\t}\n\n\t\t\t// bones\n\n\t\t\tfor ( var i = 0; i < data.metadata.rigidBodyCount; i ++ ) {\n\n\t\t\t\tvar body = data.rigidBodies[ i ];\n\t\t\t\tvar value = boneTypeTable[ body.boneIndex ];\n\n\t\t\t\t// keeps greater number if already value is set without any special reasons\n\t\t\t\tvalue = value === undefined ? body.type : Math.max( body.type, value );\n\n\t\t\t\tboneTypeTable[ body.boneIndex ] = value;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\t\tvar boneData = data.bones[ i ];\n\n\t\t\t\tvar bone = {\n\t\t\t\t\tparent: boneData.parentIndex,\n\t\t\t\t\tname: boneData.name,\n\t\t\t\t\tpos: boneData.position.slice( 0, 3 ),\n\t\t\t\t\trotq: [ 0, 0, 0, 1 ],\n\t\t\t\t\tscl: [ 1, 1, 1 ],\n\t\t\t\t\trigidBodyType: boneTypeTable[ i ] !== undefined ? boneTypeTable[ i ] : - 1\n\t\t\t\t};\n\n\t\t\t\tif ( bone.parent !== - 1 ) {\n\n\t\t\t\t\tbone.pos[ 0 ] -= data.bones[ bone.parent ].position[ 0 ];\n\t\t\t\t\tbone.pos[ 1 ] -= data.bones[ bone.parent ].position[ 1 ];\n\t\t\t\t\tbone.pos[ 2 ] -= data.bones[ bone.parent ].position[ 2 ];\n\n\t\t\t\t}\n\n\t\t\t\tbones.push( bone );\n\n\t\t\t}\n\n\t\t\t// iks\n\n\t\t\t// TODO: remove duplicated codes between PMD and PMX\n\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\tfor ( var i = 0; i < data.metadata.ikCount; i ++ ) {\n\n\t\t\t\t\tvar ik = data.iks[ i ];\n\n\t\t\t\t\tvar param = {\n\t\t\t\t\t\ttarget: ik.target,\n\t\t\t\t\t\teffector: ik.effector,\n\t\t\t\t\t\titeration: ik.iteration,\n\t\t\t\t\t\tmaxAngle: ik.maxAngle * 4,\n\t\t\t\t\t\tlinks: []\n\t\t\t\t\t};\n\n\t\t\t\t\tfor ( var j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar link = {};\n\t\t\t\t\t\tlink.index = ik.links[ j ].index;\n\t\t\t\t\t\tlink.enabled = true;\n\n\t\t\t\t\t\tif ( data.bones[ link.index ].name.indexOf( 'ひざ' ) >= 0 ) {\n\n\t\t\t\t\t\t\tlink.limitation = new Vector3( 1.0, 0.0, 0.0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparam.links.push( link );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tiks.push( param );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( var i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\t\t\tvar ik = data.bones[ i ].ik;\n\n\t\t\t\t\tif ( ik === undefined ) continue;\n\n\t\t\t\t\tvar param = {\n\t\t\t\t\t\ttarget: i,\n\t\t\t\t\t\teffector: ik.effector,\n\t\t\t\t\t\titeration: ik.iteration,\n\t\t\t\t\t\tmaxAngle: ik.maxAngle,\n\t\t\t\t\t\tlinks: []\n\t\t\t\t\t};\n\n\t\t\t\t\tfor ( var j = 0, jl = ik.links.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar link = {};\n\t\t\t\t\t\tlink.index = ik.links[ j ].index;\n\t\t\t\t\t\tlink.enabled = true;\n\n\t\t\t\t\t\tif ( ik.links[ j ].angleLimitation === 1 ) {\n\n\t\t\t\t\t\t\t// Revert if rotationMin/Max doesn't work well\n\t\t\t\t\t\t\t// link.limitation = new Vector3( 1.0, 0.0, 0.0 );\n\n\t\t\t\t\t\t\tvar rotationMin = ik.links[ j ].lowerLimitationAngle;\n\t\t\t\t\t\t\tvar rotationMax = ik.links[ j ].upperLimitationAngle;\n\n\t\t\t\t\t\t\t// Convert Left to Right coordinate by myself because\n\t\t\t\t\t\t\t// MMDParser doesn't convert. It's a MMDParser's bug\n\n\t\t\t\t\t\t\tvar tmp1 = - rotationMax[ 0 ];\n\t\t\t\t\t\t\tvar tmp2 = - rotationMax[ 1 ];\n\t\t\t\t\t\t\trotationMax[ 0 ] = - rotationMin[ 0 ];\n\t\t\t\t\t\t\trotationMax[ 1 ] = - rotationMin[ 1 ];\n\t\t\t\t\t\t\trotationMin[ 0 ] = tmp1;\n\t\t\t\t\t\t\trotationMin[ 1 ] = tmp2;\n\n\t\t\t\t\t\t\tlink.rotationMin = new Vector3().fromArray( rotationMin );\n\t\t\t\t\t\t\tlink.rotationMax = new Vector3().fromArray( rotationMax );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparam.links.push( link );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tiks.push( param );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// grants\n\n\t\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t\tfor ( var i = 0; i < data.metadata.boneCount; i ++ ) {\n\n\t\t\t\t\tvar boneData = data.bones[ i ];\n\t\t\t\t\tvar grant = boneData.grant;\n\n\t\t\t\t\tif ( grant === undefined ) continue;\n\n\t\t\t\t\tvar param = {\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tparentIndex: grant.parentIndex,\n\t\t\t\t\t\tratio: grant.ratio,\n\t\t\t\t\t\tisLocal: grant.isLocal,\n\t\t\t\t\t\taffectRotation: grant.affectRotation,\n\t\t\t\t\t\taffectPosition: grant.affectPosition,\n\t\t\t\t\t\ttransformationClass: boneData.transformationClass\n\t\t\t\t\t};\n\n\t\t\t\t\tgrants.push( param );\n\n\t\t\t\t}\n\n\t\t\t\tgrants.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a.transformationClass - b.transformationClass;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\t// morph\n\n\t\t\tfunction updateAttributes( attribute, morph, ratio ) {\n\n\t\t\t\tfor ( var i = 0; i < morph.elementCount; i ++ ) {\n\n\t\t\t\t\tvar element = morph.elements[ i ];\n\n\t\t\t\t\tvar index;\n\n\t\t\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\t\t\tindex = data.morphs[ 0 ].elements[ element.index ].index;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tindex = element.index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tattribute.array[ index * 3 + 0 ] += element.position[ 0 ] * ratio;\n\t\t\t\t\tattribute.array[ index * 3 + 1 ] += element.position[ 1 ] * ratio;\n\t\t\t\t\tattribute.array[ index * 3 + 2 ] += element.position[ 2 ] * ratio;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < data.metadata.morphCount; i ++ ) {\n\n\t\t\t\tvar morph = data.morphs[ i ];\n\t\t\t\tvar params = { name: morph.name };\n\n\t\t\t\tvar attribute = new Float32BufferAttribute( data.metadata.vertexCount * 3, 3 );\n\t\t\t\tattribute.name = morph.name;\n\n\t\t\t\tfor ( var j = 0; j < data.metadata.vertexCount * 3; j ++ ) {\n\n\t\t\t\t\tattribute.array[ j ] = positions[ j ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\t\tif ( i !== 0 ) {\n\n\t\t\t\t\t\tupdateAttributes( attribute, morph, 1.0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( morph.type === 0 ) { // group\n\n\t\t\t\t\t\tfor ( var j = 0; j < morph.elementCount; j ++ ) {\n\n\t\t\t\t\t\t\tvar morph2 = data.morphs[ morph.elements[ j ].index ];\n\t\t\t\t\t\t\tvar ratio = morph.elements[ j ].ratio;\n\n\t\t\t\t\t\t\tif ( morph2.type === 1 ) {\n\n\t\t\t\t\t\t\t\tupdateAttributes( attribute, morph2, ratio );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( morph.type === 1 ) { // vertex\n\n\t\t\t\t\t\tupdateAttributes( attribute, morph, 1.0 );\n\n\t\t\t\t\t} else if ( morph.type === 2 ) { // bone\n\n\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t} else if ( morph.type === 3 ) { // uv\n\n\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t} else if ( morph.type === 4 ) { // additional uv1\n\n\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t} else if ( morph.type === 5 ) { // additional uv2\n\n\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t} else if ( morph.type === 6 ) { // additional uv3\n\n\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t} else if ( morph.type === 7 ) { // additional uv4\n\n\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t} else if ( morph.type === 8 ) { // material\n\n\t\t\t\t\t\t// TODO: implement\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmorphTargets.push( params );\n\t\t\t\tmorphPositions.push( attribute );\n\n\t\t\t}\n\n\t\t\t// rigid bodies from rigidBodies field.\n\n\t\t\tfor ( var i = 0; i < data.metadata.rigidBodyCount; i ++ ) {\n\n\t\t\t\tvar rigidBody = data.rigidBodies[ i ];\n\t\t\t\tvar params = {};\n\n\t\t\t\tfor ( var key in rigidBody ) {\n\n\t\t\t\t\tparams[ key ] = rigidBody[ key ];\n\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * RigidBody position parameter in PMX seems global position\n\t\t\t\t * while the one in PMD seems offset from corresponding bone.\n\t\t\t\t * So unify being offset.\n\t\t\t\t */\n\t\t\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t\t\tif ( params.boneIndex !== - 1 ) {\n\n\t\t\t\t\t\tvar bone = data.bones[ params.boneIndex ];\n\t\t\t\t\t\tparams.position[ 0 ] -= bone.position[ 0 ];\n\t\t\t\t\t\tparams.position[ 1 ] -= bone.position[ 1 ];\n\t\t\t\t\t\tparams.position[ 2 ] -= bone.position[ 2 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\trigidBodies.push( params );\n\n\t\t\t}\n\n\t\t\t// constraints from constraints field.\n\n\t\t\tfor ( var i = 0; i < data.metadata.constraintCount; i ++ ) {\n\n\t\t\t\tvar constraint = data.constraints[ i ];\n\t\t\t\tvar params = {};\n\n\t\t\t\tfor ( var key in constraint ) {\n\n\t\t\t\t\tparams[ key ] = constraint[ key ];\n\n\t\t\t\t}\n\n\t\t\t\tvar bodyA = rigidBodies[ params.rigidBodyIndex1 ];\n\t\t\t\tvar bodyB = rigidBodies[ params.rigidBodyIndex2 ];\n\n\t\t\t\t// Refer to http://www20.atpages.jp/katwat/wp/?p=4135\n\t\t\t\tif ( bodyA.type !== 0 && bodyB.type === 2 ) {\n\n\t\t\t\t\tif ( bodyA.boneIndex !== - 1 && bodyB.boneIndex !== - 1 &&\n\t\t\t\t\t     data.bones[ bodyB.boneIndex ].parentIndex === bodyA.boneIndex ) {\n\n\t\t\t\t\t\tbodyB.type = 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconstraints.push( params );\n\n\t\t\t}\n\n\t\t\t// build BufferGeometry.\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\t\tgeometry.setAttribute( 'skinIndex', new Uint16BufferAttribute( skinIndices, 4 ) );\n\t\t\tgeometry.setAttribute( 'skinWeight', new Float32BufferAttribute( skinWeights, 4 ) );\n\t\t\tgeometry.setIndex( indices );\n\n\t\t\tfor ( var i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgeometry.addGroup( groups[ i ].offset, groups[ i ].count, i );\n\n\t\t\t}\n\n\t\t\tgeometry.bones = bones;\n\n\t\t\tgeometry.morphTargets = morphTargets;\n\t\t\tgeometry.morphAttributes.position = morphPositions;\n\t\t\tgeometry.morphTargetsRelative = false;\n\n\t\t\tgeometry.userData.MMD = {\n\t\t\t\tbones: bones,\n\t\t\t\tiks: iks,\n\t\t\t\tgrants: grants,\n\t\t\t\trigidBodies: rigidBodies,\n\t\t\t\tconstraints: constraints,\n\t\t\t\tformat: data.metadata.format\n\t\t\t};\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t};\n\n\t//\n\n\t/**\n\t * @param {THREE.LoadingManager} manager\n\t */\n\tfunction MaterialBuilder( manager ) {\n\n\t\tthis.manager = manager;\n\n\t\tthis.textureLoader = new TextureLoader( this.manager );\n\t\tthis.tgaLoader = null; // lazy generation\n\n\t}\n\n\tMaterialBuilder.prototype = {\n\n\t\tconstructor: MaterialBuilder,\n\n\t\tcrossOrigin: 'anonymous',\n\n\t\tresourcePath: undefined,\n\n\t\t/**\n\t\t * @param {string} crossOrigin\n\t\t * @return {MaterialBuilder}\n\t\t */\n\t\tsetCrossOrigin: function ( crossOrigin ) {\n\n\t\t\tthis.crossOrigin = crossOrigin;\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * @param {string} resourcePath\n\t\t * @return {MaterialBuilder}\n\t\t */\n\t\tsetResourcePath: function ( resourcePath ) {\n\n\t\t\tthis.resourcePath = resourcePath;\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * @param {Object} data - parsed PMD/PMX data\n\t\t * @param {BufferGeometry} geometry - some properties are dependend on geometry\n\t\t * @param {function} onProgress\n\t\t * @param {function} onError\n\t\t * @return {Array<MeshToonMaterial>}\n\t\t */\n\t\tbuild: function ( data, geometry /*, onProgress, onError */ ) {\n\n\t\t\tvar materials = [];\n\n\t\t\tvar textures = {};\n\n\t\t\tthis.textureLoader.setCrossOrigin( this.crossOrigin );\n\n\t\t\t// materials\n\n\t\t\tfor ( var i = 0; i < data.metadata.materialCount; i ++ ) {\n\n\t\t\t\tvar material = data.materials[ i ];\n\n\t\t\t\tvar params = { userData: {} };\n\n\t\t\t\tif ( material.name !== undefined ) params.name = material.name;\n\n\t\t\t\t/*\n\t\t\t\t * Color\n\t\t\t\t *\n\t\t\t\t * MMD         MeshToonMaterial\n\t\t\t\t * diffuse  -  color\n\t\t\t\t * ambient  -  emissive * a\n\t\t\t\t *               (a = 1.0 without map texture or 0.2 with map texture)\n\t\t\t\t *\n\t\t\t\t * MeshToonMaterial doesn't have ambient. Set it to emissive instead.\n\t\t\t\t * It'll be too bright if material has map texture so using coef 0.2.\n\t\t\t\t */\n\t\t\t\tparams.color = new Color().fromArray( material.diffuse );\n\t\t\t\tparams.opacity = material.diffuse[ 3 ];\n\t\t\t\tparams.emissive = new Color().fromArray( material.ambient );\n\t\t\t\tparams.transparent = params.opacity !== 1.0;\n\n\t\t\t\t//\n\n\t\t\t\tparams.skinning = geometry.bones.length > 0 ? true : false;\n\t\t\t\tparams.morphTargets = geometry.morphTargets.length > 0 ? true : false;\n\t\t\t\tparams.fog = true;\n\n\t\t\t\t// blend\n\n\t\t\t\tparams.blending = CustomBlending;\n\t\t\t\tparams.blendSrc = SrcAlphaFactor;\n\t\t\t\tparams.blendDst = OneMinusSrcAlphaFactor;\n\t\t\t\tparams.blendSrcAlpha = SrcAlphaFactor;\n\t\t\t\tparams.blendDstAlpha = DstAlphaFactor;\n\n\t\t\t\t// side\n\n\t\t\t\tif ( data.metadata.format === 'pmx' && ( material.flag & 0x1 ) === 1 ) {\n\n\t\t\t\t\tparams.side = DoubleSide;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tparams.side = params.opacity === 1.0 ? FrontSide : DoubleSide;\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.metadata.format === 'pmd' ) {\n\n\t\t\t\t\t// map, envMap\n\n\t\t\t\t\tif ( material.fileName ) {\n\n\t\t\t\t\t\tvar fileName = material.fileName;\n\t\t\t\t\t\tvar fileNames = fileName.split( '*' );\n\n\t\t\t\t\t\t// fileNames[ 0 ]: mapFileName\n\t\t\t\t\t\t// fileNames[ 1 ]: envMapFileName( optional )\n\n\t\t\t\t\t\tparams.map = this._loadTexture( fileNames[ 0 ], textures );\n\n\t\t\t\t\t\tif ( fileNames.length > 1 ) {\n\n\t\t\t\t\t\t\tvar extension = fileNames[ 1 ].slice( - 4 ).toLowerCase();\n\n\t\t\t\t\t\t\tparams.envMap = this._loadTexture(\n\t\t\t\t\t\t\t\tfileNames[ 1 ],\n\t\t\t\t\t\t\t\ttextures\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tparams.combine = extension === '.sph'\n\t\t\t\t\t\t\t\t? MultiplyOperation\n\t\t\t\t\t\t\t\t: AddOperation;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// gradientMap\n\n\t\t\t\t\tvar toonFileName = ( material.toonIndex === - 1 )\n\t\t\t\t\t\t? 'toon00.bmp'\n\t\t\t\t\t\t: data.toonTextures[ material.toonIndex ].fileName;\n\n\t\t\t\t\tparams.gradientMap = this._loadTexture(\n\t\t\t\t\t\ttoonFileName,\n\t\t\t\t\t\ttextures,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisToonTexture: true,\n\t\t\t\t\t\t\tisDefaultToonTexture: this._isDefaultToonTexture( toonFileName )\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\t// parameters for OutlineEffect\n\n\t\t\t\t\tparams.userData.outlineParameters = {\n\t\t\t\t\t\tthickness: material.edgeFlag === 1 ? 0.003 : 0.0,\n\t\t\t\t\t\tcolor: [ 0, 0, 0 ],\n\t\t\t\t\t\talpha: 1.0,\n\t\t\t\t\t\tvisible: material.edgeFlag === 1\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// map\n\n\t\t\t\t\tif ( material.textureIndex !== - 1 ) {\n\n\t\t\t\t\t\tparams.map = this._loadTexture( data.textures[ material.textureIndex ], textures );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// envMap TODO: support m.envFlag === 3\n\n\t\t\t\t\tif ( material.envTextureIndex !== - 1 && ( material.envFlag === 1 || material.envFlag == 2 ) ) {\n\n\t\t\t\t\t\tparams.envMap = this._loadTexture(\n\t\t\t\t\t\t\tdata.textures[ material.envTextureIndex ],\n\t\t\t\t\t\t\ttextures\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tparams.combine = material.envFlag === 1\n\t\t\t\t\t\t\t? MultiplyOperation\n\t\t\t\t\t\t\t: AddOperation;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// gradientMap\n\n\t\t\t\t\tvar toonFileName, isDefaultToon;\n\n\t\t\t\t\tif ( material.toonIndex === - 1 || material.toonFlag !== 0 ) {\n\n\t\t\t\t\t\ttoonFileName = 'toon' + ( '0' + ( material.toonIndex + 1 ) ).slice( - 2 ) + '.bmp';\n\t\t\t\t\t\tisDefaultToon = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttoonFileName = data.textures[ material.toonIndex ];\n\t\t\t\t\t\tisDefaultToon = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparams.gradientMap = this._loadTexture(\n\t\t\t\t\t\ttoonFileName,\n\t\t\t\t\t\ttextures,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisToonTexture: true,\n\t\t\t\t\t\t\tisDefaultToonTexture: isDefaultToon\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\t// parameters for OutlineEffect\n\t\t\t\t\tparams.userData.outlineParameters = {\n\t\t\t\t\t\tthickness: material.edgeSize / 300, // TODO: better calculation?\n\t\t\t\t\t\tcolor: material.edgeColor.slice( 0, 3 ),\n\t\t\t\t\t\talpha: material.edgeColor[ 3 ],\n\t\t\t\t\t\tvisible: ( material.flag & 0x10 ) !== 0 && material.edgeSize > 0.0\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tif ( params.map !== undefined ) {\n\n\t\t\t\t\tif ( ! params.transparent ) {\n\n\t\t\t\t\t\tthis._checkImageTransparency( params.map, geometry, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparams.emissive.multiplyScalar( 0.2 );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.push( new MeshToonMaterial( params ) );\n\n\t\t\t}\n\n\t\t\tif ( data.metadata.format === 'pmx' ) {\n\n\t\t\t\t// set transparent true if alpha morph is defined.\n\n\t\t\t\tfunction checkAlphaMorph( elements, materials ) {\n\n\t\t\t\t\tfor ( var i = 0, il = elements.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar element = elements[ i ];\n\n\t\t\t\t\t\tif ( element.index === - 1 ) continue;\n\n\t\t\t\t\t\tvar material = materials[ element.index ];\n\n\t\t\t\t\t\tif ( material.opacity !== element.diffuse[ 3 ] ) {\n\n\t\t\t\t\t\t\tmaterial.transparent = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0, il = data.morphs.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar morph = data.morphs[ i ];\n\t\t\t\t\tvar elements = morph.elements;\n\n\t\t\t\t\tif ( morph.type === 0 ) {\n\n\t\t\t\t\t\tfor ( var j = 0, jl = elements.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tvar morph2 = data.morphs[ elements[ j ].index ];\n\n\t\t\t\t\t\t\tif ( morph2.type !== 8 ) continue;\n\n\t\t\t\t\t\t\tcheckAlphaMorph( morph2.elements, materials );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( morph.type === 8 ) {\n\n\t\t\t\t\t\tcheckAlphaMorph( elements, materials );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t},\n\n\t\t// private methods\n\n\t\t_getTGALoader: function () {\n\n\t\t\tif ( this.tgaLoader === null ) {\n\n\t\t\t\tif ( TGALoader === undefined ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.MMDLoader: Import TGALoader' );\n\n\t\t\t\t}\n\n\t\t\t\tthis.tgaLoader = new TGALoader( this.manager );\n\n\t\t\t}\n\n\t\t\treturn this.tgaLoader;\n\n\t\t},\n\n\t\t_isDefaultToonTexture: function ( name ) {\n\n\t\t\tif ( name.length !== 10 ) return false;\n\n\t\t\treturn /toon(10|0[0-9])\\.bmp/.test( name );\n\n\t\t},\n\n\t\t_loadTexture: function ( filePath, textures, params, onProgress, onError ) {\n\n\t\t\tparams = params || {};\n\n\t\t\tvar scope = this;\n\n\t\t\tvar fullPath;\n\n\t\t\tif ( params.isDefaultToonTexture === true ) {\n\n\t\t\t\tvar index;\n\n\t\t\t\ttry {\n\n\t\t\t\t\tindex = parseInt( filePath.match( /toon([0-9]{2})\\.bmp$/ )[ 1 ] );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.MMDLoader: ' + filePath + ' seems like a '\n\t\t\t\t\t\t+ 'not right default texture path. Using toon00.bmp instead.' );\n\n\t\t\t\t\tindex = 0;\n\n\t\t\t\t}\n\n\t\t\t\tfullPath = DEFAULT_TOON_TEXTURES[ index ];\n\n\t\t\t} else {\n\n\t\t\t\tfullPath = this.resourcePath + filePath;\n\n\t\t\t}\n\n\t\t\tif ( textures[ fullPath ] !== undefined ) return textures[ fullPath ];\n\n\t\t\tvar loader = this.manager.getHandler( fullPath );\n\n\t\t\tif ( loader === null ) {\n\n\t\t\t\tloader = ( filePath.slice( - 4 ).toLowerCase() === '.tga' )\n\t\t\t\t\t? this._getTGALoader()\n\t\t\t\t\t: this.textureLoader;\n\n\t\t\t}\n\n\t\t\tvar texture = loader.load( fullPath, function ( t ) {\n\n\t\t\t\t// MMD toon texture is Axis-Y oriented\n\t\t\t\t// but Three.js gradient map is Axis-X oriented.\n\t\t\t\t// So here replaces the toon texture image with the rotated one.\n\t\t\t\tif ( params.isToonTexture === true ) {\n\n\t\t\t\t\tt.image = scope._getRotatedImage( t.image );\n\n\t\t\t\t\tt.magFilter = NearestFilter;\n\t\t\t\t\tt.minFilter = NearestFilter;\n\n\t\t\t\t}\n\n\t\t\t\tt.flipY = false;\n\t\t\t\tt.wrapS = RepeatWrapping;\n\t\t\t\tt.wrapT = RepeatWrapping;\n\n\t\t\t\tfor ( var i = 0; i < texture.readyCallbacks.length; i ++ ) {\n\n\t\t\t\t\ttexture.readyCallbacks[ i ]( texture );\n\n\t\t\t\t}\n\n\t\t\t\tdelete texture.readyCallbacks;\n\n\t\t\t}, onProgress, onError );\n\n\t\t\ttexture.readyCallbacks = [];\n\n\t\t\ttextures[ fullPath ] = texture;\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\t_getRotatedImage: function ( image ) {\n\n\t\t\tvar canvas = document.createElement( 'canvas' );\n\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\tvar width = image.width;\n\t\t\tvar height = image.height;\n\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\n\t\t\tcontext.clearRect( 0, 0, width, height );\n\t\t\tcontext.translate( width / 2.0, height / 2.0 );\n\t\t\tcontext.rotate( 0.5 * Math.PI ); // 90.0 * Math.PI / 180.0\n\t\t\tcontext.translate( - width / 2.0, - height / 2.0 );\n\t\t\tcontext.drawImage( image, 0, 0 );\n\n\t\t\treturn context.getImageData( 0, 0, width, height );\n\n\t\t},\n\n\t\t// Check if the partial image area used by the texture is transparent.\n\t\t_checkImageTransparency: function ( map, geometry, groupIndex ) {\n\n\t\t\tmap.readyCallbacks.push( function ( texture ) {\n\n\t\t\t\t// Is there any efficient ways?\n\t\t\t\tfunction createImageData( image ) {\n\n\t\t\t\t\tvar canvas = document.createElement( 'canvas' );\n\t\t\t\t\tcanvas.width = image.width;\n\t\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\t\t\tcontext.drawImage( image, 0, 0 );\n\n\t\t\t\t\treturn context.getImageData( 0, 0, canvas.width, canvas.height );\n\n\t\t\t\t}\n\n\t\t\t\tfunction detectImageTransparency( image, uvs, indices ) {\n\n\t\t\t\t\tvar width = image.width;\n\t\t\t\t\tvar height = image.height;\n\t\t\t\t\tvar data = image.data;\n\t\t\t\t\tvar threshold = 253;\n\n\t\t\t\t\tif ( data.length / ( width * height ) !== 4 ) return false;\n\n\t\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\t\tvar centerUV = { x: 0.0, y: 0.0 };\n\n\t\t\t\t\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tvar index = indices[ i * 3 + j ];\n\t\t\t\t\t\t\tvar uv = { x: uvs[ index * 2 + 0 ], y: uvs[ index * 2 + 1 ] };\n\n\t\t\t\t\t\t\tif ( getAlphaByUv( image, uv ) < threshold ) return true;\n\n\t\t\t\t\t\t\tcenterUV.x += uv.x;\n\t\t\t\t\t\t\tcenterUV.y += uv.y;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcenterUV.x /= 3;\n\t\t\t\t\t\tcenterUV.y /= 3;\n\n\t\t\t\t\t\tif ( getAlphaByUv( image, centerUV ) < threshold ) return true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * This method expects\n\t\t\t\t *   texture.flipY = false\n\t\t\t\t *   texture.wrapS = RepeatWrapping\n\t\t\t\t *   texture.wrapT = RepeatWrapping\n\t\t\t\t * TODO: more precise\n\t\t\t\t */\n\t\t\t\tfunction getAlphaByUv( image, uv ) {\n\n\t\t\t\t\tvar width = image.width;\n\t\t\t\t\tvar height = image.height;\n\n\t\t\t\t\tvar x = Math.round( uv.x * width ) % width;\n\t\t\t\t\tvar y = Math.round( uv.y * height ) % height;\n\n\t\t\t\t\tif ( x < 0 ) x += width;\n\t\t\t\t\tif ( y < 0 ) y += height;\n\n\t\t\t\t\tvar index = y * width + x;\n\n\t\t\t\t\treturn image.data[ index * 4 + 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tvar imageData = texture.image.data !== undefined\n\t\t\t\t\t? texture.image\n\t\t\t\t\t: createImageData( texture.image );\n\n\t\t\t\tvar group = geometry.groups[ groupIndex ];\n\n\t\t\t\tif ( detectImageTransparency(\n\t\t\t\t\timageData,\n\t\t\t\t\tgeometry.attributes.uv.array,\n\t\t\t\t\tgeometry.index.array.slice( group.start, group.start + group.count ) ) ) {\n\n\t\t\t\t\tmap.transparent = true;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t};\n\n\t//\n\n\tfunction AnimationBuilder() {\n\n\t}\n\n\tAnimationBuilder.prototype = {\n\n\t\tconstructor: AnimationBuilder,\n\n\t\t/**\n\t\t * @param {Object} vmd - parsed VMD data\n\t\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t\t * @return {AnimationClip}\n\t\t */\n\t\tbuild: function ( vmd, mesh ) {\n\n\t\t\t// combine skeletal and morph animations\n\n\t\t\tvar tracks = this.buildSkeletalAnimation( vmd, mesh ).tracks;\n\t\t\tvar tracks2 = this.buildMorphAnimation( vmd, mesh ).tracks;\n\n\t\t\tfor ( var i = 0, il = tracks2.length; i < il; i ++ ) {\n\n\t\t\t\ttracks.push( tracks2[ i ] );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t\t},\n\n\t\t/**\n\t\t * @param {Object} vmd - parsed VMD data\n\t\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t\t * @return {AnimationClip}\n\t\t */\n\t\tbuildSkeletalAnimation: function ( vmd, mesh ) {\n\n\t\t\tfunction pushInterpolation( array, interpolation, index ) {\n\n\t\t\t\tarray.push( interpolation[ index + 0 ] / 127 ); // x1\n\t\t\t\tarray.push( interpolation[ index + 8 ] / 127 ); // x2\n\t\t\t\tarray.push( interpolation[ index + 4 ] / 127 ); // y1\n\t\t\t\tarray.push( interpolation[ index + 12 ] / 127 ); // y2\n\n\t\t\t}\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar motions = {};\n\t\t\tvar bones = mesh.skeleton.bones;\n\t\t\tvar boneNameDictionary = {};\n\n\t\t\tfor ( var i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\tboneNameDictionary[ bones[ i ].name ] = true;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < vmd.metadata.motionCount; i ++ ) {\n\n\t\t\t\tvar motion = vmd.motions[ i ];\n\t\t\t\tvar boneName = motion.boneName;\n\n\t\t\t\tif ( boneNameDictionary[ boneName ] === undefined ) continue;\n\n\t\t\t\tmotions[ boneName ] = motions[ boneName ] || [];\n\t\t\t\tmotions[ boneName ].push( motion );\n\n\t\t\t}\n\n\t\t\tfor ( var key in motions ) {\n\n\t\t\t\tvar array = motions[ key ];\n\n\t\t\t\tarray.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t\t\t} );\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar positions = [];\n\t\t\t\tvar rotations = [];\n\t\t\t\tvar pInterpolations = [];\n\t\t\t\tvar rInterpolations = [];\n\n\t\t\t\tvar basePosition = mesh.skeleton.getBoneByName( key ).position.toArray();\n\n\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\tvar time = array[ i ].frameNum / 30;\n\t\t\t\t\tvar position = array[ i ].position;\n\t\t\t\t\tvar rotation = array[ i ].rotation;\n\t\t\t\t\tvar interpolation = array[ i ].interpolation;\n\n\t\t\t\t\ttimes.push( time );\n\n\t\t\t\t\tfor ( var j = 0; j < 3; j ++ ) positions.push( basePosition[ j ] + position[ j ] );\n\t\t\t\t\tfor ( var j = 0; j < 4; j ++ ) rotations.push( rotation[ j ] );\n\t\t\t\t\tfor ( var j = 0; j < 3; j ++ ) pushInterpolation( pInterpolations, interpolation, j );\n\n\t\t\t\t\tpushInterpolation( rInterpolations, interpolation, 3 );\n\n\t\t\t\t}\n\n\t\t\t\tvar targetName = '.bones[' + key + ']';\n\n\t\t\t\ttracks.push( this._createTrack( targetName + '.position', VectorKeyframeTrack, times, positions, pInterpolations ) );\n\t\t\t\ttracks.push( this._createTrack( targetName + '.quaternion', QuaternionKeyframeTrack, times, rotations, rInterpolations ) );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t\t},\n\n\t\t/**\n\t\t * @param {Object} vmd - parsed VMD data\n\t\t * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n\t\t * @return {AnimationClip}\n\t\t */\n\t\tbuildMorphAnimation: function ( vmd, mesh ) {\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar morphs = {};\n\t\t\tvar morphTargetDictionary = mesh.morphTargetDictionary;\n\n\t\t\tfor ( var i = 0; i < vmd.metadata.morphCount; i ++ ) {\n\n\t\t\t\tvar morph = vmd.morphs[ i ];\n\t\t\t\tvar morphName = morph.morphName;\n\n\t\t\t\tif ( morphTargetDictionary[ morphName ] === undefined ) continue;\n\n\t\t\t\tmorphs[ morphName ] = morphs[ morphName ] || [];\n\t\t\t\tmorphs[ morphName ].push( morph );\n\n\t\t\t}\n\n\t\t\tfor ( var key in morphs ) {\n\n\t\t\t\tvar array = morphs[ key ];\n\n\t\t\t\tarray.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t\t\t} );\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\ttimes.push( array[ i ].frameNum / 30 );\n\t\t\t\t\tvalues.push( array[ i ].weight );\n\n\t\t\t\t}\n\n\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluences[' + morphTargetDictionary[ key ] + ']', times, values ) );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t\t},\n\n\t\t/**\n\t\t * @param {Object} vmd - parsed VMD data\n\t\t * @return {AnimationClip}\n\t\t */\n\t\tbuildCameraAnimation: function ( vmd ) {\n\n\t\t\tfunction pushVector3( array, vec ) {\n\n\t\t\t\tarray.push( vec.x );\n\t\t\t\tarray.push( vec.y );\n\t\t\t\tarray.push( vec.z );\n\n\t\t\t}\n\n\t\t\tfunction pushQuaternion( array, q ) {\n\n\t\t\t\tarray.push( q.x );\n\t\t\t\tarray.push( q.y );\n\t\t\t\tarray.push( q.z );\n\t\t\t\tarray.push( q.w );\n\n\t\t\t}\n\n\t\t\tfunction pushInterpolation( array, interpolation, index ) {\n\n\t\t\t\tarray.push( interpolation[ index * 4 + 0 ] / 127 ); // x1\n\t\t\t\tarray.push( interpolation[ index * 4 + 1 ] / 127 ); // x2\n\t\t\t\tarray.push( interpolation[ index * 4 + 2 ] / 127 ); // y1\n\t\t\t\tarray.push( interpolation[ index * 4 + 3 ] / 127 ); // y2\n\n\t\t\t}\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar cameras = vmd.cameras === undefined ? [] : vmd.cameras.slice();\n\n\t\t\tcameras.sort( function ( a, b ) {\n\n\t\t\t\treturn a.frameNum - b.frameNum;\n\n\t\t\t} );\n\n\t\t\tvar times = [];\n\t\t\tvar centers = [];\n\t\t\tvar quaternions = [];\n\t\t\tvar positions = [];\n\t\t\tvar fovs = [];\n\n\t\t\tvar cInterpolations = [];\n\t\t\tvar qInterpolations = [];\n\t\t\tvar pInterpolations = [];\n\t\t\tvar fInterpolations = [];\n\n\t\t\tvar quaternion = new Quaternion();\n\t\t\tvar euler = new Euler();\n\t\t\tvar position = new Vector3();\n\t\t\tvar center = new Vector3();\n\n\t\t\tfor ( var i = 0, il = cameras.length; i < il; i ++ ) {\n\n\t\t\t\tvar motion = cameras[ i ];\n\n\t\t\t\tvar time = motion.frameNum / 30;\n\t\t\t\tvar pos = motion.position;\n\t\t\t\tvar rot = motion.rotation;\n\t\t\t\tvar distance = motion.distance;\n\t\t\t\tvar fov = motion.fov;\n\t\t\t\tvar interpolation = motion.interpolation;\n\n\t\t\t\ttimes.push( time );\n\n\t\t\t\tposition.set( 0, 0, - distance );\n\t\t\t\tcenter.set( pos[ 0 ], pos[ 1 ], pos[ 2 ] );\n\n\t\t\t\teuler.set( - rot[ 0 ], - rot[ 1 ], - rot[ 2 ] );\n\t\t\t\tquaternion.setFromEuler( euler );\n\n\t\t\t\tposition.add( center );\n\t\t\t\tposition.applyQuaternion( quaternion );\n\n\t\t\t\tpushVector3( centers, center );\n\t\t\t\tpushQuaternion( quaternions, quaternion );\n\t\t\t\tpushVector3( positions, position );\n\n\t\t\t\tfovs.push( fov );\n\n\t\t\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tpushInterpolation( cInterpolations, interpolation, j );\n\n\t\t\t\t}\n\n\t\t\t\tpushInterpolation( qInterpolations, interpolation, 3 );\n\n\t\t\t\t// use the same parameter for x, y, z axis.\n\t\t\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tpushInterpolation( pInterpolations, interpolation, 4 );\n\n\t\t\t\t}\n\n\t\t\t\tpushInterpolation( fInterpolations, interpolation, 5 );\n\n\t\t\t}\n\n\t\t\tvar tracks = [];\n\n\t\t\t// I expect an object whose name 'target' exists under THREE.Camera\n\t\t\ttracks.push( this._createTrack( 'target.position', VectorKeyframeTrack, times, centers, cInterpolations ) );\n\n\t\t\ttracks.push( this._createTrack( '.quaternion', QuaternionKeyframeTrack, times, quaternions, qInterpolations ) );\n\t\t\ttracks.push( this._createTrack( '.position', VectorKeyframeTrack, times, positions, pInterpolations ) );\n\t\t\ttracks.push( this._createTrack( '.fov', NumberKeyframeTrack, times, fovs, fInterpolations ) );\n\n\t\t\treturn new AnimationClip( '', - 1, tracks );\n\n\t\t},\n\n\t\t// private method\n\n\t\t_createTrack: function ( node, typedKeyframeTrack, times, values, interpolations ) {\n\n\t\t\t/*\n\t\t\t * optimizes here not to let KeyframeTrackPrototype optimize\n\t\t\t * because KeyframeTrackPrototype optimizes times and values but\n\t\t\t * doesn't optimize interpolations.\n\t\t\t */\n\t\t\tif ( times.length > 2 ) {\n\n\t\t\t\ttimes = times.slice();\n\t\t\t\tvalues = values.slice();\n\t\t\t\tinterpolations = interpolations.slice();\n\n\t\t\t\tvar stride = values.length / times.length;\n\t\t\t\tvar interpolateStride = interpolations.length / times.length;\n\n\t\t\t\tvar index = 1;\n\n\t\t\t\tfor ( var aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex ++ ) {\n\n\t\t\t\t\tfor ( var i = 0; i < stride; i ++ ) {\n\n\t\t\t\t\t\tif ( values[ index * stride + i ] !== values[ ( index - 1 ) * stride + i ] ||\n\t\t\t\t\t\t\tvalues[ index * stride + i ] !== values[ aheadIndex * stride + i ] ) {\n\n\t\t\t\t\t\t\tindex ++;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( aheadIndex > index ) {\n\n\t\t\t\t\t\ttimes[ index ] = times[ aheadIndex ];\n\n\t\t\t\t\t\tfor ( var i = 0; i < stride; i ++ ) {\n\n\t\t\t\t\t\t\tvalues[ index * stride + i ] = values[ aheadIndex * stride + i ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( var i = 0; i < interpolateStride; i ++ ) {\n\n\t\t\t\t\t\t\tinterpolations[ index * interpolateStride + i ] = interpolations[ aheadIndex * interpolateStride + i ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\ttimes.length = index + 1;\n\t\t\t\tvalues.length = ( index + 1 ) * stride;\n\t\t\t\tinterpolations.length = ( index + 1 ) * interpolateStride;\n\n\t\t\t}\n\n\t\t\tvar track = new typedKeyframeTrack( node, times, values );\n\n\t\t\ttrack.createInterpolant = function InterpolantFactoryMethodCubicBezier( result ) {\n\n\t\t\t\treturn new CubicBezierInterpolation( this.times, this.values, this.getValueSize(), result, new Float32Array( interpolations ) );\n\n\t\t\t};\n\n\t\t\treturn track;\n\n\t\t}\n\n\t};\n\n\t// interpolation\n\n\tfunction CubicBezierInterpolation( parameterPositions, sampleValues, sampleSize, resultBuffer, params ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis.interpolationParams = params;\n\n\t}\n\n\tCubicBezierInterpolation.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: CubicBezierInterpolation,\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tvar result = this.resultBuffer;\n\t\t\tvar values = this.sampleValues;\n\t\t\tvar stride = this.valueSize;\n\t\t\tvar params = this.interpolationParams;\n\n\t\t\tvar offset1 = i1 * stride;\n\t\t\tvar offset0 = offset1 - stride;\n\n\t\t\t// No interpolation if next key frame is in one frame in 30fps.\n\t\t\t// This is from MMD animation spec.\n\t\t\t// '1.5' is for precision loss. times are Float32 in Three.js Animation system.\n\t\t\tvar weight1 = ( ( t1 - t0 ) < 1 / 30 * 1.5 ) ? 0.0 : ( t - t0 ) / ( t1 - t0 );\n\n\t\t\tif ( stride === 4 ) { // Quaternion\n\n\t\t\t\tvar x1 = params[ i1 * 4 + 0 ];\n\t\t\t\tvar x2 = params[ i1 * 4 + 1 ];\n\t\t\t\tvar y1 = params[ i1 * 4 + 2 ];\n\t\t\t\tvar y2 = params[ i1 * 4 + 3 ];\n\n\t\t\t\tvar ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\t\tQuaternion.slerpFlat( result, 0, values, offset0, values, offset1, ratio );\n\n\t\t\t} else if ( stride === 3 ) { // Vector3\n\n\t\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\t\tvar x1 = params[ i1 * 12 + i * 4 + 0 ];\n\t\t\t\t\tvar x2 = params[ i1 * 12 + i * 4 + 1 ];\n\t\t\t\t\tvar y1 = params[ i1 * 12 + i * 4 + 2 ];\n\t\t\t\t\tvar y2 = params[ i1 * 12 + i * 4 + 3 ];\n\n\t\t\t\t\tvar ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\t\t\tresult[ i ] = values[ offset0 + i ] * ( 1 - ratio ) + values[ offset1 + i ] * ratio;\n\n\t\t\t\t}\n\n\t\t\t} else { // Number\n\n\t\t\t\tvar x1 = params[ i1 * 4 + 0 ];\n\t\t\t\tvar x2 = params[ i1 * 4 + 1 ];\n\t\t\t\tvar y1 = params[ i1 * 4 + 2 ];\n\t\t\t\tvar y2 = params[ i1 * 4 + 3 ];\n\n\t\t\t\tvar ratio = this._calculate( x1, x2, y1, y2, weight1 );\n\n\t\t\t\tresult[ 0 ] = values[ offset0 ] * ( 1 - ratio ) + values[ offset1 ] * ratio;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t_calculate: function ( x1, x2, y1, y2, x ) {\n\n\t\t\t/*\n\t\t\t * Cubic Bezier curves\n\t\t\t *   https://en.wikipedia.org/wiki/B%C3%A9zier_curve#Cubic_B.C3.A9zier_curves\n\t\t\t *\n\t\t\t * B(t) = ( 1 - t ) ^ 3 * P0\n\t\t\t *      + 3 * ( 1 - t ) ^ 2 * t * P1\n\t\t\t *      + 3 * ( 1 - t ) * t^2 * P2\n\t\t\t *      + t ^ 3 * P3\n\t\t\t *      ( 0 <= t <= 1 )\n\t\t\t *\n\t\t\t * MMD uses Cubic Bezier curves for bone and camera animation interpolation.\n\t\t\t *   http://d.hatena.ne.jp/edvakf/20111016/1318716097\n\t\t\t *\n\t\t\t *    x = ( 1 - t ) ^ 3 * x0\n\t\t\t *      + 3 * ( 1 - t ) ^ 2 * t * x1\n\t\t\t *      + 3 * ( 1 - t ) * t^2 * x2\n\t\t\t *      + t ^ 3 * x3\n\t\t\t *    y = ( 1 - t ) ^ 3 * y0\n\t\t\t *      + 3 * ( 1 - t ) ^ 2 * t * y1\n\t\t\t *      + 3 * ( 1 - t ) * t^2 * y2\n\t\t\t *      + t ^ 3 * y3\n\t\t\t *      ( x0 = 0, y0 = 0 )\n\t\t\t *      ( x3 = 1, y3 = 1 )\n\t\t\t *      ( 0 <= t, x1, x2, y1, y2 <= 1 )\n\t\t\t *\n\t\t\t * Here solves this equation with Bisection method,\n\t\t\t *   https://en.wikipedia.org/wiki/Bisection_method\n\t\t\t * gets t, and then calculate y.\n\t\t\t *\n\t\t\t * f(t) = 3 * ( 1 - t ) ^ 2 * t * x1\n\t\t\t *      + 3 * ( 1 - t ) * t^2 * x2\n\t\t\t *      + t ^ 3 - x = 0\n\t\t\t *\n\t\t\t * (Another option: Newton's method\n\t\t\t *    https://en.wikipedia.org/wiki/Newton%27s_method)\n\t\t\t */\n\n\t\t\tvar c = 0.5;\n\t\t\tvar t = c;\n\t\t\tvar s = 1.0 - t;\n\t\t\tvar loop = 15;\n\t\t\tvar eps = 1e-5;\n\t\t\tvar math = Math;\n\n\t\t\tvar sst3, stt3, ttt;\n\n\t\t\tfor ( var i = 0; i < loop; i ++ ) {\n\n\t\t\t\tsst3 = 3.0 * s * s * t;\n\t\t\t\tstt3 = 3.0 * s * t * t;\n\t\t\t\tttt = t * t * t;\n\n\t\t\t\tvar ft = ( sst3 * x1 ) + ( stt3 * x2 ) + ( ttt ) - x;\n\n\t\t\t\tif ( math.abs( ft ) < eps ) break;\n\n\t\t\t\tc /= 2.0;\n\n\t\t\t\tt += ( ft < 0 ) ? c : - c;\n\t\t\t\ts = 1.0 - t;\n\n\t\t\t}\n\n\t\t\treturn ( sst3 * y1 ) + ( stt3 * y2 ) + ttt;\n\n\t\t}\n\n\t} );\n\n\treturn MMDLoader;\n\n} )();\n\nexport { MMDLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/MTLLoader.js",
    "content": "import {\n\tColor,\n\tDefaultLoadingManager,\n\tFileLoader,\n\tFrontSide,\n\tLoader,\n\tLoaderUtils,\n\tMeshPhongMaterial,\n\tRepeatWrapping,\n\tTextureLoader,\n\tVector2\n} from '../../../build/three.module.js';\n\n/**\n * Loads a Wavefront .mtl file specifying materials\n */\n\nvar MTLLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nMTLLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: MTLLoader,\n\n\t/**\n\t * Loads and parses a MTL asset from a URL.\n\t *\n\t * @param {String} url - URL to the MTL file.\n\t * @param {Function} [onLoad] - Callback invoked with the loaded object.\n\t * @param {Function} [onProgress] - Callback for download progress.\n\t * @param {Function} [onError] - Callback for download errors.\n\t *\n\t * @see setPath setResourcePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setResourcePath() explicitly prior to load.\n\t */\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetMaterialOptions: function ( value ) {\n\n\t\tthis.materialOptions = value;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Parses a MTL file.\n\t *\n\t * @param {String} text - Content of MTL file\n\t * @return {MTLLoader.MaterialCreator}\n\t *\n\t * @see setPath setResourcePath\n\t *\n\t * @note In order for relative texture references to resolve correctly\n\t * you must call setResourcePath() explicitly prior to parse.\n\t */\n\tparse: function ( text, path ) {\n\n\t\tvar lines = text.split( '\\n' );\n\t\tvar info = {};\n\t\tvar delimiter_pattern = /\\s+/;\n\t\tvar materialsInfo = {};\n\n\t\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\t\tvar line = lines[ i ];\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.length === 0 || line.charAt( 0 ) === '#' ) {\n\n\t\t\t\t// Blank line or comment ignore\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tvar pos = line.indexOf( ' ' );\n\n\t\t\tvar key = ( pos >= 0 ) ? line.substring( 0, pos ) : line;\n\t\t\tkey = key.toLowerCase();\n\n\t\t\tvar value = ( pos >= 0 ) ? line.substring( pos + 1 ) : '';\n\t\t\tvalue = value.trim();\n\n\t\t\tif ( key === 'newmtl' ) {\n\n\t\t\t\t// New material\n\n\t\t\t\tinfo = { name: value };\n\t\t\t\tmaterialsInfo[ value ] = info;\n\n\t\t\t} else {\n\n\t\t\t\tif ( key === 'ka' || key === 'kd' || key === 'ks' || key === 'ke' ) {\n\n\t\t\t\t\tvar ss = value.split( delimiter_pattern, 3 );\n\t\t\t\t\tinfo[ key ] = [ parseFloat( ss[ 0 ] ), parseFloat( ss[ 1 ] ), parseFloat( ss[ 2 ] ) ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinfo[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar materialCreator = new MTLLoader.MaterialCreator( this.resourcePath || path, this.materialOptions );\n\t\tmaterialCreator.setCrossOrigin( this.crossOrigin );\n\t\tmaterialCreator.setManager( this.manager );\n\t\tmaterialCreator.setMaterials( materialsInfo );\n\t\treturn materialCreator;\n\n\t}\n\n} );\n\n/**\n * Create a new MTLLoader.MaterialCreator\n * @param baseUrl - Url relative to which textures are loaded\n * @param options - Set of options on how to construct the materials\n *                  side: Which side to apply the material\n *                        FrontSide (default), THREE.BackSide, THREE.DoubleSide\n *                  wrap: What type of wrapping to apply for textures\n *                        RepeatWrapping (default), THREE.ClampToEdgeWrapping, THREE.MirroredRepeatWrapping\n *                  normalizeRGB: RGBs need to be normalized to 0-1 from 0-255\n *                                Default: false, assumed to be already normalized\n *                  ignoreZeroRGBs: Ignore values of RGBs (Ka,Kd,Ks) that are all 0's\n *                                  Default: false\n * @constructor\n */\n\nMTLLoader.MaterialCreator = function ( baseUrl, options ) {\n\n\tthis.baseUrl = baseUrl || '';\n\tthis.options = options;\n\tthis.materialsInfo = {};\n\tthis.materials = {};\n\tthis.materialsArray = [];\n\tthis.nameLookup = {};\n\n\tthis.side = ( this.options && this.options.side ) ? this.options.side : FrontSide;\n\tthis.wrap = ( this.options && this.options.wrap ) ? this.options.wrap : RepeatWrapping;\n\n};\n\nMTLLoader.MaterialCreator.prototype = {\n\n\tconstructor: MTLLoader.MaterialCreator,\n\n\tcrossOrigin: 'anonymous',\n\n\tsetCrossOrigin: function ( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t},\n\n\tsetManager: function ( value ) {\n\n\t\tthis.manager = value;\n\n\t},\n\n\tsetMaterials: function ( materialsInfo ) {\n\n\t\tthis.materialsInfo = this.convert( materialsInfo );\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t},\n\n\tconvert: function ( materialsInfo ) {\n\n\t\tif ( ! this.options ) return materialsInfo;\n\n\t\tvar converted = {};\n\n\t\tfor ( var mn in materialsInfo ) {\n\n\t\t\t// Convert materials info into normalized form based on options\n\n\t\t\tvar mat = materialsInfo[ mn ];\n\n\t\t\tvar covmat = {};\n\n\t\t\tconverted[ mn ] = covmat;\n\n\t\t\tfor ( var prop in mat ) {\n\n\t\t\t\tvar save = true;\n\t\t\t\tvar value = mat[ prop ];\n\t\t\t\tvar lprop = prop.toLowerCase();\n\n\t\t\t\tswitch ( lprop ) {\n\n\t\t\t\t\tcase 'kd':\n\t\t\t\t\tcase 'ka':\n\t\t\t\t\tcase 'ks':\n\n\t\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\t\tif ( this.options && this.options.normalizeRGB ) {\n\n\t\t\t\t\t\t\tvalue = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this.options && this.options.ignoreZeroRGBs ) {\n\n\t\t\t\t\t\t\tif ( value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0 ) {\n\n\t\t\t\t\t\t\t\t// ignore\n\n\t\t\t\t\t\t\t\tsave = false;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( save ) {\n\n\t\t\t\t\tcovmat[ lprop ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn converted;\n\n\t},\n\n\tpreload: function () {\n\n\t\tfor ( var mn in this.materialsInfo ) {\n\n\t\t\tthis.create( mn );\n\n\t\t}\n\n\t},\n\n\tgetIndex: function ( materialName ) {\n\n\t\treturn this.nameLookup[ materialName ];\n\n\t},\n\n\tgetAsArray: function () {\n\n\t\tvar index = 0;\n\n\t\tfor ( var mn in this.materialsInfo ) {\n\n\t\t\tthis.materialsArray[ index ] = this.create( mn );\n\t\t\tthis.nameLookup[ mn ] = index;\n\t\t\tindex ++;\n\n\t\t}\n\n\t\treturn this.materialsArray;\n\n\t},\n\n\tcreate: function ( materialName ) {\n\n\t\tif ( this.materials[ materialName ] === undefined ) {\n\n\t\t\tthis.createMaterial_( materialName );\n\n\t\t}\n\n\t\treturn this.materials[ materialName ];\n\n\t},\n\n\tcreateMaterial_: function ( materialName ) {\n\n\t\t// Create material\n\n\t\tvar scope = this;\n\t\tvar mat = this.materialsInfo[ materialName ];\n\t\tvar params = {\n\n\t\t\tname: materialName,\n\t\t\tside: this.side\n\n\t\t};\n\n\t\tfunction resolveURL( baseUrl, url ) {\n\n\t\t\tif ( typeof url !== 'string' || url === '' )\n\t\t\t\treturn '';\n\n\t\t\t// Absolute URL\n\t\t\tif ( /^https?:\\/\\//i.test( url ) ) return url;\n\n\t\t\treturn baseUrl + url;\n\n\t\t}\n\n\t\tfunction setMapForType( mapType, value ) {\n\n\t\t\tif ( params[ mapType ] ) return; // Keep the first encountered texture\n\n\t\t\tvar texParams = scope.getTextureParams( value, params );\n\t\t\tvar map = scope.loadTexture( resolveURL( scope.baseUrl, texParams.url ) );\n\n\t\t\tmap.repeat.copy( texParams.scale );\n\t\t\tmap.offset.copy( texParams.offset );\n\n\t\t\tmap.wrapS = scope.wrap;\n\t\t\tmap.wrapT = scope.wrap;\n\n\t\t\tparams[ mapType ] = map;\n\n\t\t}\n\n\t\tfor ( var prop in mat ) {\n\n\t\t\tvar value = mat[ prop ];\n\t\t\tvar n;\n\n\t\t\tif ( value === '' ) continue;\n\n\t\t\tswitch ( prop.toLowerCase() ) {\n\n\t\t\t\t// Ns is material specular exponent\n\n\t\t\t\tcase 'kd':\n\n\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\tparams.color = new Color().fromArray( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ks':\n\n\t\t\t\t\t// Specular color (color when light is reflected from shiny surface) using RGB values\n\t\t\t\t\tparams.specular = new Color().fromArray( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ke':\n\n\t\t\t\t\t// Emissive using RGB values\n\t\t\t\t\tparams.emissive = new Color().fromArray( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_kd':\n\n\t\t\t\t\t// Diffuse texture map\n\n\t\t\t\t\tsetMapForType( 'map', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ks':\n\n\t\t\t\t\t// Specular map\n\n\t\t\t\t\tsetMapForType( 'specularMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ke':\n\n\t\t\t\t\t// Emissive map\n\n\t\t\t\t\tsetMapForType( 'emissiveMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'norm':\n\n\t\t\t\t\tsetMapForType( 'normalMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_bump':\n\t\t\t\tcase 'bump':\n\n\t\t\t\t\t// Bump texture map\n\n\t\t\t\t\tsetMapForType( 'bumpMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_d':\n\n\t\t\t\t\t// Alpha map\n\n\t\t\t\t\tsetMapForType( 'alphaMap', value );\n\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ns':\n\n\t\t\t\t\t// The specular exponent (defines the focus of the specular highlight)\n\t\t\t\t\t// A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n\n\t\t\t\t\tparams.shininess = parseFloat( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'd':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( n < 1 ) {\n\n\t\t\t\t\t\tparams.opacity = n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'tr':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( this.options && this.options.invertTrProperty ) n = 1 - n;\n\n\t\t\t\t\tif ( n > 0 ) {\n\n\t\t\t\t\t\tparams.opacity = 1 - n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials[ materialName ] = new MeshPhongMaterial( params );\n\t\treturn this.materials[ materialName ];\n\n\t},\n\n\tgetTextureParams: function ( value, matParams ) {\n\n\t\tvar texParams = {\n\n\t\t\tscale: new Vector2( 1, 1 ),\n\t\t\toffset: new Vector2( 0, 0 )\n\n\t\t };\n\n\t\tvar items = value.split( /\\s+/ );\n\t\tvar pos;\n\n\t\tpos = items.indexOf( '-bm' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\tmatParams.bumpScale = parseFloat( items[ pos + 1 ] );\n\t\t\titems.splice( pos, 2 );\n\n\t\t}\n\n\t\tpos = items.indexOf( '-s' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.scale.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\tpos = items.indexOf( '-o' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.offset.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\ttexParams.url = items.join( ' ' ).trim();\n\t\treturn texParams;\n\n\t},\n\n\tloadTexture: function ( url, mapping, onLoad, onProgress, onError ) {\n\n\t\tvar texture;\n\t\tvar manager = ( this.manager !== undefined ) ? this.manager : DefaultLoadingManager;\n\t\tvar loader = manager.getHandler( url );\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new TextureLoader( manager );\n\n\t\t}\n\n\t\tif ( loader.setCrossOrigin ) loader.setCrossOrigin( this.crossOrigin );\n\t\ttexture = loader.load( url, onLoad, onProgress, onError );\n\n\t\tif ( mapping !== undefined ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t}\n\n};\n\nexport { MTLLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/NRRDLoader.js",
    "content": "import {\n\tFileLoader,\n\tLoader,\n\tMatrix4,\n\tVector3\n} from '../../../build/three.module.js';\nimport { Zlib } from '../libs/gunzip.module.min.js';\nimport { Volume } from '../misc/Volume.js';\n\nvar NRRDLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nNRRDLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: NRRDLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\t// this parser is largely inspired from the XTK NRRD parser : https://github.com/xtk/X\n\n\t\tvar _data = data;\n\n\t\tvar _dataPointer = 0;\n\n\t\tvar _nativeLittleEndian = new Int8Array( new Int16Array( [ 1 ] ).buffer )[ 0 ] > 0;\n\n\t\tvar _littleEndian = true;\n\n\t\tvar headerObject = {};\n\n\t\tfunction scan( type, chunks ) {\n\n\t\t\tif ( chunks === undefined || chunks === null ) {\n\n\t\t\t\tchunks = 1;\n\n\t\t\t}\n\n\t\t\tvar _chunkSize = 1;\n\t\t\tvar _array_type = Uint8Array;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\t// 1 byte data types\n\t\t\t\tcase 'uchar':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'schar':\n\t\t\t\t\t_array_type = Int8Array;\n\t\t\t\t\tbreak;\n\t\t\t\t\t// 2 byte data types\n\t\t\t\tcase 'ushort':\n\t\t\t\t\t_array_type = Uint16Array;\n\t\t\t\t\t_chunkSize = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'sshort':\n\t\t\t\t\t_array_type = Int16Array;\n\t\t\t\t\t_chunkSize = 2;\n\t\t\t\t\tbreak;\n\t\t\t\t\t// 4 byte data types\n\t\t\t\tcase 'uint':\n\t\t\t\t\t_array_type = Uint32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'sint':\n\t\t\t\t\t_array_type = Int32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'float':\n\t\t\t\t\t_array_type = Float32Array;\n\t\t\t\t\t_chunkSize = 4;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'complex':\n\t\t\t\t\t_array_type = Float64Array;\n\t\t\t\t\t_chunkSize = 8;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'double':\n\t\t\t\t\t_array_type = Float64Array;\n\t\t\t\t\t_chunkSize = 8;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// increase the data pointer in-place\n\t\t\tvar _bytes = new _array_type( _data.slice( _dataPointer,\n\t\t\t\t_dataPointer += chunks * _chunkSize ) );\n\n\t\t\t// if required, flip the endianness of the bytes\n\t\t\tif ( _nativeLittleEndian != _littleEndian ) {\n\n\t\t\t\t// we need to flip here since the format doesn't match the native endianness\n\t\t\t\t_bytes = flipEndianness( _bytes, _chunkSize );\n\n\t\t\t}\n\n\t\t\tif ( chunks == 1 ) {\n\n\t\t\t\t// if only one chunk was requested, just return one value\n\t\t\t\treturn _bytes[ 0 ];\n\n\t\t\t}\n\n\t\t\t// return the byte array\n\t\t\treturn _bytes;\n\n\t\t}\n\n\t\t//Flips typed array endianness in-place. Based on https://github.com/kig/DataStream.js/blob/master/DataStream.js.\n\n\t\tfunction flipEndianness( array, chunkSize ) {\n\n\t\t\tvar u8 = new Uint8Array( array.buffer, array.byteOffset, array.byteLength );\n\t\t\tfor ( var i = 0; i < array.byteLength; i += chunkSize ) {\n\n\t\t\t\tfor ( var j = i + chunkSize - 1, k = i; j > k; j --, k ++ ) {\n\n\t\t\t\t\tvar tmp = u8[ k ];\n\t\t\t\t\tu8[ k ] = u8[ j ];\n\t\t\t\t\tu8[ j ] = tmp;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\t//parse the header\n\t\tfunction parseHeader( header ) {\n\n\t\t\tvar data, field, fn, i, l, lines, m, _i, _len;\n\t\t\tlines = header.split( /\\r?\\n/ );\n\t\t\tfor ( _i = 0, _len = lines.length; _i < _len; _i ++ ) {\n\n\t\t\t\tl = lines[ _i ];\n\t\t\t\tif ( l.match( /NRRD\\d+/ ) ) {\n\n\t\t\t\t\theaderObject.isNrrd = true;\n\n\t\t\t\t} else if ( l.match( /^#/ ) ) {\n\t\t\t\t} else if ( m = l.match( /(.*):(.*)/ ) ) {\n\n\t\t\t\t\tfield = m[ 1 ].trim();\n\t\t\t\t\tdata = m[ 2 ].trim();\n\t\t\t\t\tfn = NRRDLoader.prototype.fieldFunctions[ field ];\n\t\t\t\t\tif ( fn ) {\n\n\t\t\t\t\t\tfn.call( headerObject, data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\theaderObject[ field ] = data;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! headerObject.isNrrd ) {\n\n\t\t\t\tthrow new Error( 'Not an NRRD file' );\n\n\t\t\t}\n\n\t\t\tif ( headerObject.encoding === 'bz2' || headerObject.encoding === 'bzip2' ) {\n\n\t\t\t\tthrow new Error( 'Bzip is not supported' );\n\n\t\t\t}\n\n\t\t\tif ( ! headerObject.vectors ) {\n\n\t\t\t\t//if no space direction is set, let's use the identity\n\t\t\t\theaderObject.vectors = [ new Vector3( 1, 0, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ) ];\n\t\t\t\t//apply spacing if defined\n\t\t\t\tif ( headerObject.spacings ) {\n\n\t\t\t\t\tfor ( i = 0; i <= 2; i ++ ) {\n\n\t\t\t\t\t\tif ( ! isNaN( headerObject.spacings[ i ] ) ) {\n\n\t\t\t\t\t\t\theaderObject.vectors[ i ].multiplyScalar( headerObject.spacings[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//parse the data when registred as one of this type : 'text', 'ascii', 'txt'\n\t\tfunction parseDataAsText( data, start, end ) {\n\n\t\t\tvar number = '';\n\t\t\tstart = start || 0;\n\t\t\tend = end || data.length;\n\t\t\tvar value;\n\t\t\t//length of the result is the product of the sizes\n\t\t\tvar lengthOfTheResult = headerObject.sizes.reduce( function ( previous, current ) {\n\n\t\t\t\treturn previous * current;\n\n\t\t\t}, 1 );\n\n\t\t\tvar base = 10;\n\t\t\tif ( headerObject.encoding === 'hex' ) {\n\n\t\t\t\tbase = 16;\n\n\t\t\t}\n\n\t\t\tvar result = new headerObject.__array( lengthOfTheResult );\n\t\t\tvar resultIndex = 0;\n\t\t\tvar parsingFunction = parseInt;\n\t\t\tif ( headerObject.__array === Float32Array || headerObject.__array === Float64Array ) {\n\n\t\t\t\tparsingFunction = parseFloat;\n\n\t\t\t}\n\n\t\t\tfor ( var i = start; i < end; i ++ ) {\n\n\t\t\t\tvalue = data[ i ];\n\t\t\t\t//if value is not a space\n\t\t\t\tif ( ( value < 9 || value > 13 ) && value !== 32 ) {\n\n\t\t\t\t\tnumber += String.fromCharCode( value );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( number !== '' ) {\n\n\t\t\t\t\t\tresult[ resultIndex ] = parsingFunction( number, base );\n\t\t\t\t\t\tresultIndex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnumber = '';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( number !== '' ) {\n\n\t\t\t\tresult[ resultIndex ] = parsingFunction( number, base );\n\t\t\t\tresultIndex ++;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tvar _bytes = scan( 'uchar', data.byteLength );\n\t\tvar _length = _bytes.length;\n\t\tvar _header = null;\n\t\tvar _data_start = 0;\n\t\tvar i;\n\t\tfor ( i = 1; i < _length; i ++ ) {\n\n\t\t\tif ( _bytes[ i - 1 ] == 10 && _bytes[ i ] == 10 ) {\n\n\t\t\t\t// we found two line breaks in a row\n\t\t\t\t// now we know what the header is\n\t\t\t\t_header = this.parseChars( _bytes, 0, i - 2 );\n\t\t\t\t// this is were the data starts\n\t\t\t\t_data_start = i + 1;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse the header\n\t\tparseHeader( _header );\n\n\t\tvar _data = _bytes.subarray( _data_start ); // the data without header\n\t\tif ( headerObject.encoding === 'gzip' || headerObject.encoding === 'gz' ) {\n\n\t\t\t// we need to decompress the datastream\n\t\t\t// here we start the unzipping and get a typed Uint8Array back\n\t\t\tvar inflate = new Zlib.Gunzip( new Uint8Array( _data ) ); // eslint-disable-line no-undef\n\t\t\t_data = inflate.decompress();\n\n\t\t} else if ( headerObject.encoding === 'ascii' || headerObject.encoding === 'text' || headerObject.encoding === 'txt' || headerObject.encoding === 'hex' ) {\n\n\t\t\t_data = parseDataAsText( _data );\n\n\t\t} else if ( headerObject.encoding === 'raw' ) {\n\n\t\t\t//we need to copy the array to create a new array buffer, else we retrieve the original arraybuffer with the header\n\t\t\tvar _copy = new Uint8Array( _data.length );\n\n\t\t\tfor ( var i = 0; i < _data.length; i ++ ) {\n\n\t\t\t\t_copy[ i ] = _data[ i ];\n\n\t\t\t}\n\n\t\t\t_data = _copy;\n\n\t\t}\n\n\t\t// .. let's use the underlying array buffer\n\t\t_data = _data.buffer;\n\n\t\tvar volume = new Volume();\n\t\tvolume.header = headerObject;\n\t\t//\n\t\t// parse the (unzipped) data to a datastream of the correct type\n\t\t//\n\t\tvolume.data = new headerObject.__array( _data );\n\t\t// get the min and max intensities\n\t\tvar min_max = volume.computeMinMax();\n\t\tvar min = min_max[ 0 ];\n\t\tvar max = min_max[ 1 ];\n\t\t// attach the scalar range to the volume\n\t\tvolume.windowLow = min;\n\t\tvolume.windowHigh = max;\n\n\t\t// get the image dimensions\n\t\tvolume.dimensions = [ headerObject.sizes[ 0 ], headerObject.sizes[ 1 ], headerObject.sizes[ 2 ] ];\n\t\tvolume.xLength = volume.dimensions[ 0 ];\n\t\tvolume.yLength = volume.dimensions[ 1 ];\n\t\tvolume.zLength = volume.dimensions[ 2 ];\n\t\t// spacing\n\t\tvar spacingX = ( new Vector3( headerObject.vectors[ 0 ][ 0 ], headerObject.vectors[ 0 ][ 1 ],\n\t\t\theaderObject.vectors[ 0 ][ 2 ] ) ).length();\n\t\tvar spacingY = ( new Vector3( headerObject.vectors[ 1 ][ 0 ], headerObject.vectors[ 1 ][ 1 ],\n\t\t\theaderObject.vectors[ 1 ][ 2 ] ) ).length();\n\t\tvar spacingZ = ( new Vector3( headerObject.vectors[ 2 ][ 0 ], headerObject.vectors[ 2 ][ 1 ],\n\t\t\theaderObject.vectors[ 2 ][ 2 ] ) ).length();\n\t\tvolume.spacing = [ spacingX, spacingY, spacingZ ];\n\n\n\t\t// Create IJKtoRAS matrix\n\t\tvolume.matrix = new Matrix4();\n\n\t\tvar _spaceX = 1;\n\t\tvar _spaceY = 1;\n\t\tvar _spaceZ = 1;\n\n\t\tif ( headerObject.space == 'left-posterior-superior' ) {\n\n\t\t\t_spaceX = - 1;\n\t\t\t_spaceY = - 1;\n\n\t\t} else if ( headerObject.space === 'left-anterior-superior' ) {\n\n\t\t\t_spaceX = - 1;\n\n\t\t}\n\n\n\t\tif ( ! headerObject.vectors ) {\n\n\t\t\tvolume.matrix.set(\n\t\t\t\t_spaceX, 0, 0, 0,\n\t\t\t\t0, _spaceY, 0, 0,\n\t\t\t\t0, 0, _spaceZ, 0,\n\t\t\t\t0, 0, 0, 1 );\n\n\t\t} else {\n\n\t\t\tvar v = headerObject.vectors;\n\n\t\t\tvolume.matrix.set(\n\t\t\t\t_spaceX * v[ 0 ][ 0 ], _spaceX * v[ 1 ][ 0 ], _spaceX * v[ 2 ][ 0 ], 0,\n\t\t\t\t_spaceY * v[ 0 ][ 1 ], _spaceY * v[ 1 ][ 1 ], _spaceY * v[ 2 ][ 1 ], 0,\n\t\t\t\t_spaceZ * v[ 0 ][ 2 ], _spaceZ * v[ 1 ][ 2 ], _spaceZ * v[ 2 ][ 2 ], 0,\n\t\t\t\t0, 0, 0, 1 );\n\n\t\t}\n\n\t\tvolume.inverseMatrix = new Matrix4();\n\t\tvolume.inverseMatrix.copy( volume.matrix ).invert();\n\t\tvolume.RASDimensions = ( new Vector3( volume.xLength, volume.yLength, volume.zLength ) ).applyMatrix4( volume.matrix ).round().toArray().map( Math.abs );\n\n\t\t// .. and set the default threshold\n\t\t// only if the threshold was not already set\n\t\tif ( volume.lowerThreshold === - Infinity ) {\n\n\t\t\tvolume.lowerThreshold = min;\n\n\t\t}\n\n\t\tif ( volume.upperThreshold === Infinity ) {\n\n\t\t\tvolume.upperThreshold = max;\n\n\t\t}\n\n\t\treturn volume;\n\n\t},\n\n\tparseChars: function ( array, start, end ) {\n\n\t\t// without borders, use the whole array\n\t\tif ( start === undefined ) {\n\n\t\t\tstart = 0;\n\n\t\t}\n\n\t\tif ( end === undefined ) {\n\n\t\t\tend = array.length;\n\n\t\t}\n\n\t\tvar output = '';\n\t\t// create and append the chars\n\t\tvar i = 0;\n\t\tfor ( i = start; i < end; ++ i ) {\n\n\t\t\toutput += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\treturn output;\n\n\t},\n\n\tfieldFunctions: {\n\n\t\ttype: function ( data ) {\n\n\t\t\tswitch ( data ) {\n\n\t\t\t\tcase 'uchar':\n\t\t\t\tcase 'unsigned char':\n\t\t\t\tcase 'uint8':\n\t\t\t\tcase 'uint8_t':\n\t\t\t\t\tthis.__array = Uint8Array;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'signed char':\n\t\t\t\tcase 'int8':\n\t\t\t\tcase 'int8_t':\n\t\t\t\t\tthis.__array = Int8Array;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'short':\n\t\t\t\tcase 'short int':\n\t\t\t\tcase 'signed short':\n\t\t\t\tcase 'signed short int':\n\t\t\t\tcase 'int16':\n\t\t\t\tcase 'int16_t':\n\t\t\t\t\tthis.__array = Int16Array;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ushort':\n\t\t\t\tcase 'unsigned short':\n\t\t\t\tcase 'unsigned short int':\n\t\t\t\tcase 'uint16':\n\t\t\t\tcase 'uint16_t':\n\t\t\t\t\tthis.__array = Uint16Array;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'int':\n\t\t\t\tcase 'signed int':\n\t\t\t\tcase 'int32':\n\t\t\t\tcase 'int32_t':\n\t\t\t\t\tthis.__array = Int32Array;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'uint':\n\t\t\t\tcase 'unsigned int':\n\t\t\t\tcase 'uint32':\n\t\t\t\tcase 'uint32_t':\n\t\t\t\t\tthis.__array = Uint32Array;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'float':\n\t\t\t\t\tthis.__array = Float32Array;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'double':\n\t\t\t\t\tthis.__array = Float64Array;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'Unsupported NRRD data type: ' + data );\n\n\t\t\t}\n\n\t\t\treturn this.type = data;\n\n\t\t},\n\n\t\tendian: function ( data ) {\n\n\t\t\treturn this.endian = data;\n\n\t\t},\n\n\t\tencoding: function ( data ) {\n\n\t\t\treturn this.encoding = data;\n\n\t\t},\n\n\t\tdimension: function ( data ) {\n\n\t\t\treturn this.dim = parseInt( data, 10 );\n\n\t\t},\n\n\t\tsizes: function ( data ) {\n\n\t\t\tvar i;\n\t\t\treturn this.sizes = ( function () {\n\n\t\t\t\tvar _i, _len, _ref, _results;\n\t\t\t\t_ref = data.split( /\\s+/ );\n\t\t\t\t_results = [];\n\n\t\t\t\tfor ( _i = 0, _len = _ref.length; _i < _len; _i ++ ) {\n\n\t\t\t\t\ti = _ref[ _i ];\n\t\t\t\t\t_results.push( parseInt( i, 10 ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn _results;\n\n\t\t\t} )();\n\n\t\t},\n\n\t\tspace: function ( data ) {\n\n\t\t\treturn this.space = data;\n\n\t\t},\n\n\t\t'space origin': function ( data ) {\n\n\t\t\treturn this.space_origin = data.split( '(' )[ 1 ].split( ')' )[ 0 ].split( ',' );\n\n\t\t},\n\n\t\t'space directions': function ( data ) {\n\n\t\t\tvar f, parts, v;\n\t\t\tparts = data.match( /\\(.*?\\)/g );\n\t\t\treturn this.vectors = ( function () {\n\n\t\t\t\tvar _i, _len, _results;\n\t\t\t\t_results = [];\n\n\t\t\t\tfor ( _i = 0, _len = parts.length; _i < _len; _i ++ ) {\n\n\t\t\t\t\tv = parts[ _i ];\n\t\t\t\t\t_results.push( ( function () {\n\n\t\t\t\t\t\tvar _j, _len2, _ref, _results2;\n\t\t\t\t\t\t_ref = v.slice( 1, - 1 ).split( /,/ );\n\t\t\t\t\t\t_results2 = [];\n\n\t\t\t\t\t\tfor ( _j = 0, _len2 = _ref.length; _j < _len2; _j ++ ) {\n\n\t\t\t\t\t\t\tf = _ref[ _j ];\n\t\t\t\t\t\t\t_results2.push( parseFloat( f ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn _results2;\n\n\t\t\t\t\t} )() );\n\n\t\t\t\t}\n\n\t\t\t\treturn _results;\n\n\t\t\t} )();\n\n\t\t},\n\n\t\tspacings: function ( data ) {\n\n\t\t\tvar f, parts;\n\t\t\tparts = data.split( /\\s+/ );\n\t\t\treturn this.spacings = ( function () {\n\n\t\t\t\tvar _i, _len, _results = [];\n\n\t\t\t\tfor ( _i = 0, _len = parts.length; _i < _len; _i ++ ) {\n\n\t\t\t\t\tf = parts[ _i ];\n\t\t\t\t\t_results.push( parseFloat( f ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn _results;\n\n\t\t\t} )();\n\n\t\t}\n\t}\n\n} );\n\nexport { NRRDLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/NodeMaterialLoader.js",
    "content": "import {\n\tDefaultLoadingManager,\n\tFileLoader\n} from '../../../build/three.module.js';\n\nimport * as Nodes from '../nodes/Nodes.js';\n\nvar NodeMaterialLoader = function ( manager, library ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\tthis.nodes = {};\n\tthis.materials = {};\n\tthis.passes = {};\n\tthis.names = {};\n\tthis.library = library || {};\n\n};\n\nvar NodeMaterialLoaderUtils = {\n\n\treplaceUUIDObject: function ( object, uuid, value, recursive ) {\n\n\t\trecursive = recursive !== undefined ? recursive : true;\n\n\t\tif ( typeof uuid === 'object' ) uuid = uuid.uuid;\n\n\t\tif ( typeof object === 'object' ) {\n\n\t\t\tvar keys = Object.keys( object );\n\n\t\t\tfor ( var i = 0; i < keys.length; i ++ ) {\n\n\t\t\t\tvar key = keys[ i ];\n\n\t\t\t\tif ( recursive ) {\n\n\t\t\t\t\tobject[ key ] = this.replaceUUIDObject( object[ key ], uuid, value );\n\n\t\t\t\t}\n\n\t\t\t\tif ( key === uuid ) {\n\n\t\t\t\t\tobject[ uuid ] = object[ key ];\n\n\t\t\t\t\tdelete object[ key ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object === uuid ? value : object;\n\n\t},\n\n\treplaceUUID: function ( json, uuid, value ) {\n\n\t\tthis.replaceUUIDObject( json, uuid, value, false );\n\t\tthis.replaceUUIDObject( json.nodes, uuid, value );\n\t\tthis.replaceUUIDObject( json.materials, uuid, value );\n\t\tthis.replaceUUIDObject( json.passes, uuid, value );\n\t\tthis.replaceUUIDObject( json.library, uuid, value, false );\n\n\t\treturn json;\n\n\t}\n\n};\n\nObject.assign( NodeMaterialLoader.prototype, {\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t}, onProgress, onError );\n\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( value ) {\n\n\t\tthis.path = value;\n\t\treturn this;\n\n\t},\n\n\tgetObjectByName: function ( uuid ) {\n\n\t\treturn this.names[ uuid ];\n\n\t},\n\n\tgetObjectById: function ( uuid ) {\n\n\t\treturn this.library[ uuid ] ||\n\t\t\tthis.nodes[ uuid ] ||\n\t\t\tthis.materials[ uuid ] ||\n\t\t\tthis.passes[ uuid ] ||\n\t\t\tthis.names[ uuid ];\n\n\t},\n\n\tgetNode: function ( uuid ) {\n\n\t\tvar object = this.getObjectById( uuid );\n\n\t\tif ( ! object ) {\n\n\t\t\tconsole.warn( 'Node \"' + uuid + '\" not found.' );\n\n\t\t}\n\n\t\treturn object;\n\n\t},\n\n\tresolve: function ( json ) {\n\n\t\tswitch ( typeof json ) {\n\n\t\t\tcase 'boolean':\n\t\t\tcase 'number':\n\n\t\t\t\treturn json;\n\n\t\t\tcase 'string':\n\n\t\t\t\tif ( /^\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}$/i.test( json ) || this.library[ json ] ) {\n\n\t\t\t\t\treturn this.getNode( json );\n\n\t\t\t\t}\n\n\t\t\t\treturn json;\n\n\t\t\tdefault:\n\n\t\t\t\tif ( Array.isArray( json ) ) {\n\n\t\t\t\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\t\t\t\tjson[ i ] = this.resolve( json[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var prop in json ) {\n\n\t\t\t\t\t\tif ( prop === 'uuid' ) continue;\n\n\t\t\t\t\t\tjson[ prop ] = this.resolve( json[ prop ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t}\n\n\t\treturn json;\n\n\t},\n\n\tdeclare: function ( json ) {\n\n\t\tvar uuid, node, object;\n\n\t\tfor ( uuid in json.nodes ) {\n\n\t\t\tnode = json.nodes[ uuid ];\n\n\t\t\tobject = new Nodes[ node.nodeType + 'Node' ]();\n\n\t\t\tif ( node.name ) {\n\n\t\t\t\tobject.name = node.name;\n\n\t\t\t\tthis.names[ object.name ] = object;\n\n\t\t\t}\n\n\t\t\tthis.nodes[ uuid ] = object;\n\n\t\t}\n\n\t\tfor ( uuid in json.materials ) {\n\n\t\t\tnode = json.materials[ uuid ];\n\n\t\t\tobject = new Nodes[ node.type ]();\n\n\t\t\tif ( node.name ) {\n\n\t\t\t\tobject.name = node.name;\n\n\t\t\t\tthis.names[ object.name ] = object;\n\n\t\t\t}\n\n\t\t\tthis.materials[ uuid ] = object;\n\n\t\t}\n\n\t\tfor ( uuid in json.passes ) {\n\n\t\t\tnode = json.passes[ uuid ];\n\n\t\t\tobject = new Nodes[ node.type ]();\n\n\t\t\tif ( node.name ) {\n\n\t\t\t\tobject.name = node.name;\n\n\t\t\t\tthis.names[ object.name ] = object;\n\n\t\t\t}\n\n\t\t\tthis.passes[ uuid ] = object;\n\n\t\t}\n\n\t\tif ( json.material ) this.material = this.materials[ json.material ];\n\n\t\tif ( json.pass ) this.pass = this.passes[ json.pass ];\n\n\t\treturn json;\n\n\t},\n\n\tparse: function ( json ) {\n\n\t\tvar uuid;\n\n\t\tjson = this.resolve( this.declare( json ) );\n\n\t\tfor ( uuid in json.nodes ) {\n\n\t\t\tthis.nodes[ uuid ].copy( json.nodes[ uuid ] );\n\n\t\t}\n\n\t\tfor ( uuid in json.materials ) {\n\n\t\t\tthis.materials[ uuid ].copy( json.materials[ uuid ] );\n\n\t\t}\n\n\t\tfor ( uuid in json.passes ) {\n\n\t\t\tthis.passes[ uuid ].copy( json.passes[ uuid ] );\n\n\t\t}\n\n\t\treturn this.material || this.pass || this;\n\n\t}\n\n} );\n\nexport { NodeMaterialLoader, NodeMaterialLoaderUtils };\n"
  },
  {
    "path": "libs/three.js/loaders/OBJLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3\n} from '../build/three.module.js';\n\nvar OBJLoader = ( function () {\n\n\t// o object_name | g group_name\n\tvar object_pattern = /^[og]\\s*(.+)?/;\n\t// mtllib file_reference\n\tvar material_library_pattern = /^mtllib /;\n\t// usemtl material_name\n\tvar material_use_pattern = /^usemtl /;\n\t// usemap map_name\n\tvar map_use_pattern = /^usemap /;\n\n\tvar vA = new Vector3();\n\tvar vB = new Vector3();\n\tvar vC = new Vector3();\n\n\tvar ab = new Vector3();\n\tvar cb = new Vector3();\n\n\tfunction ParserState() {\n\n\t\tvar state = {\n\t\t\tobjects: [],\n\t\t\tobject: {},\n\n\t\t\tvertices: [],\n\t\t\tnormals: [],\n\t\t\tcolors: [],\n\t\t\tuvs: [],\n\n\t\t\tmaterials: {},\n\t\t\tmaterialLibraries: [],\n\n\t\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\t\tthis.object.name = name;\n\t\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\t\tthis.object._finalize( true );\n\n\t\t\t\t}\n\n\t\t\t\tthis.object = {\n\t\t\t\t\tname: name || '',\n\t\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\t\tgeometry: {\n\t\t\t\t\t\tvertices: [],\n\t\t\t\t\t\tnormals: [],\n\t\t\t\t\t\tcolors: [],\n\t\t\t\t\t\tuvs: [],\n\t\t\t\t\t\thasUVIndices: false\n\t\t\t\t\t},\n\t\t\t\t\tmaterials: [],\n\t\t\t\t\tsmooth: true,\n\n\t\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\t\tvar previous = this._finalize( false );\n\n\t\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar material = {\n\t\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\t\tvar cloned = {\n\t\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\t\treturn material;\n\n\t\t\t\t\t},\n\n\t\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn undefined;\n\n\t\t\t\t\t},\n\n\t\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\t\tvar lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\t\tfor ( var mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Inherit previous objects material.\n\t\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\t\tvar declared = previousMaterial.clone( 0 );\n\t\t\t\t\tdeclared.inherited = true;\n\t\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t\t}\n\n\t\t\t\tthis.objects.push( this.object );\n\n\t\t\t},\n\n\t\t\tfinalize: function () {\n\n\t\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\t\tthis.object._finalize( true );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\t\tvar index = parseInt( value, 10 );\n\t\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t\t},\n\n\t\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\t\tvar index = parseInt( value, 10 );\n\t\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t\t},\n\n\t\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\t\tvar index = parseInt( value, 10 );\n\t\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t\t},\n\n\t\t\taddVertex: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.vertices;\n\t\t\t\tvar dst = this.object.geometry.vertices;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t\t},\n\n\t\t\taddVertexPoint: function ( a ) {\n\n\t\t\t\tvar src = this.vertices;\n\t\t\t\tvar dst = this.object.geometry.vertices;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t\t},\n\n\t\t\taddVertexLine: function ( a ) {\n\n\t\t\t\tvar src = this.vertices;\n\t\t\t\tvar dst = this.object.geometry.vertices;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t\t},\n\n\t\t\taddNormal: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.normals;\n\t\t\t\tvar dst = this.object.geometry.normals;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t\t},\n\n\t\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.vertices;\n\t\t\t\tvar dst = this.object.geometry.normals;\n\n\t\t\t\tvA.fromArray( src, a );\n\t\t\t\tvB.fromArray( src, b );\n\t\t\t\tvC.fromArray( src, c );\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tcb.normalize();\n\n\t\t\t\tdst.push( cb.x, cb.y, cb.z );\n\t\t\t\tdst.push( cb.x, cb.y, cb.z );\n\t\t\t\tdst.push( cb.x, cb.y, cb.z );\n\n\t\t\t},\n\n\t\t\taddColor: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.colors;\n\t\t\t\tvar dst = this.object.geometry.colors;\n\n\t\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t\t},\n\n\t\t\taddUV: function ( a, b, c ) {\n\n\t\t\t\tvar src = this.uvs;\n\t\t\t\tvar dst = this.object.geometry.uvs;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t\t},\n\n\t\t\taddDefaultUV: function () {\n\n\t\t\t\tvar dst = this.object.geometry.uvs;\n\n\t\t\t\tdst.push( 0, 0 );\n\t\t\t\tdst.push( 0, 0 );\n\t\t\t\tdst.push( 0, 0 );\n\n\t\t\t},\n\n\t\t\taddUVLine: function ( a ) {\n\n\t\t\t\tvar src = this.uvs;\n\t\t\t\tvar dst = this.object.geometry.uvs;\n\n\t\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t\t},\n\n\t\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\t\tvar vLen = this.vertices.length;\n\n\t\t\t\tvar ia = this.parseVertexIndex( a, vLen );\n\t\t\t\tvar ib = this.parseVertexIndex( b, vLen );\n\t\t\t\tvar ic = this.parseVertexIndex( c, vLen );\n\n\t\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t\t// normals\n\n\t\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\t\tvar nLen = this.normals.length;\n\n\t\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t\t}\n\n\t\t\t\t// uvs\n\n\t\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\t\tvar uvLen = this.uvs.length;\n\n\t\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\t\tthis.addDefaultUV();\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\t\tvar vLen = this.vertices.length;\n\n\t\t\t\tfor ( var vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\t\tvar index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\t\tthis.addColor( index );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\t\tvar vLen = this.vertices.length;\n\t\t\t\tvar uvLen = this.uvs.length;\n\n\t\t\t\tfor ( var vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tstate.startObject( '', false );\n\n\t\treturn state;\n\n\t}\n\n\t//\n\n\tfunction OBJLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tOBJLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: OBJLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\tloader.setWithCredentials( this.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetMaterials: function ( materials ) {\n\n\t\t\tthis.materials = materials;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tparse: function ( text ) {\n\n\t\t\tvar state = new ParserState();\n\n\t\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t\t}\n\n\t\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t\t}\n\n\t\t\tvar lines = text.split( '\\n' );\n\t\t\tvar line = '', lineFirstChar = '';\n\t\t\tvar lineLength = 0;\n\t\t\tvar result = [];\n\n\t\t\t// Faster to just trim left side of the line. Use if available.\n\t\t\tvar trimLeft = ( typeof ''.trimLeft === 'function' );\n\n\t\t\tfor ( var i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tline = lines[ i ];\n\n\t\t\t\tline = trimLeft ? line.trimLeft() : line.trim();\n\n\t\t\t\tlineLength = line.length;\n\n\t\t\t\tif ( lineLength === 0 ) continue;\n\n\t\t\t\tlineFirstChar = line.charAt( 0 );\n\n\t\t\t\t// @todo invoke passed in handler if any\n\t\t\t\tif ( lineFirstChar === '#' ) continue;\n\n\t\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\t\tvar data = line.split( /\\s+/ );\n\n\t\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\t\tcase 'v':\n\t\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\t\tstate.colors.push(\n\t\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\n\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\t\tvar lineData = line.substr( 1 ).trim();\n\t\t\t\t\tvar vertexData = lineData.split( /\\s+/ );\n\t\t\t\t\tvar faceVertices = [];\n\n\t\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\t\tfor ( var j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar vertex = vertexData[ j ];\n\n\t\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\t\tvar vertexParts = vertex.split( '/' );\n\t\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\t\tvar v1 = faceVertices[ 0 ];\n\n\t\t\t\t\tfor ( var j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar v2 = faceVertices[ j ];\n\t\t\t\t\t\tvar v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\t\tvar lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\t\tvar lineVertices = [], lineUVs = [];\n\n\t\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( var li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\t\tvar parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\t\tvar lineData = line.substr( 1 ).trim();\n\t\t\t\t\tvar pointData = lineData.split( ' ' );\n\n\t\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t\t} else if ( ( result = object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t\t// o object_name\n\t\t\t\t\t// or\n\t\t\t\t\t// g group_name\n\n\t\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t\t// var name = result[ 0 ].substr( 1 ).trim();\n\t\t\t\t\tvar name = ( ' ' + result[ 0 ].substr( 1 ).trim() ).substr( 1 );\n\n\t\t\t\t\tstate.startObject( name );\n\n\t\t\t\t} else if ( material_use_pattern.test( line ) ) {\n\n\t\t\t\t\t// material\n\n\t\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t\t} else if ( material_library_pattern.test( line ) ) {\n\n\t\t\t\t\t// mtl file\n\n\t\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t\t} else if ( map_use_pattern.test( line ) ) {\n\n\t\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t\t// smooth shading\n\n\t\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t * or\n\t\t\t\t\t * http://www.cs.utah.edu/~boulos/cs3505/obj_spec.pdf\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\t\tvar value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar material = state.object.currentMaterial();\n\t\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Handle null terminated files without exception\n\t\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.finalize();\n\n\t\t\tvar container = new Group();\n\t\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\t\tvar hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\t\tif ( hasPrimitives === true ) {\n\n\t\t\t\tfor ( var i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar object = state.objects[ i ];\n\t\t\t\t\tvar geometry = object.geometry;\n\t\t\t\t\tvar materials = object.materials;\n\t\t\t\t\tvar isLine = ( geometry.type === 'Line' );\n\t\t\t\t\tvar isPoints = ( geometry.type === 'Points' );\n\t\t\t\t\tvar hasVertexColors = false;\n\n\t\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\t\tvar buffergeometry = new BufferGeometry();\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create materials\n\n\t\t\t\t\tvar createdMaterials = [];\n\n\t\t\t\t\tfor ( var mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tvar sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tvar materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\t\tvar material = state.materials[ materialHash ];\n\n\t\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\t\tvar materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\t\tvar materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create mesh\n\n\t\t\t\t\tvar mesh;\n\n\t\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( var mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\t\tvar sourceMaterial = materials[ mi ];\n\t\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.name = object.name;\n\n\t\t\t\t\tcontainer.add( mesh );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\t\tvar material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\tvar buffergeometry = new BufferGeometry();\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar points = new Points( buffergeometry, material );\n\t\t\t\t\tcontainer.add( points );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn container;\n\n\t\t}\n\n\t} );\n\n\treturn OBJLoader;\n\n} )();\n\nexport { OBJLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/OBJLoader2.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\nimport {\n\tFileLoader,\n\tObject3D,\n\tLoader\n} from '../../../build/three.module.js';\n\nimport { OBJLoader2Parser } from './obj2/OBJLoader2Parser.js';\nimport { MeshReceiver } from './obj2/shared/MeshReceiver.js';\nimport { MaterialHandler } from './obj2/shared/MaterialHandler.js';\n\n/**\n * Creates a new OBJLoader2. Use it to load OBJ data from files or to parse OBJ data from arraybuffer or text.\n *\n * @param {LoadingManager} [manager] The loadingManager for the loader to use. Default is {@link LoadingManager}\n * @constructor\n */\nconst OBJLoader2 = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.parser = new OBJLoader2Parser();\n\n\tthis.modelName = '';\n\tthis.instanceNo = 0;\n\tthis.baseObject3d = new Object3D();\n\n\tthis.materialHandler = new MaterialHandler();\n\tthis.meshReceiver = new MeshReceiver( this.materialHandler );\n\n\t// as OBJLoader2 is no longer derived from OBJLoader2Parser, we need to override the default onAssetAvailable callback\n\tconst scope = this;\n\tconst defaultOnAssetAvailable = function ( payload ) {\n\n\t\tscope._onAssetAvailable( payload );\n\n\t};\n\n\tthis.parser.setCallbackOnAssetAvailable( defaultOnAssetAvailable );\n\n};\n\nOBJLoader2.OBJLOADER2_VERSION = '3.2.0';\nconsole.info( 'Using OBJLoader2 version: ' + OBJLoader2.OBJLOADER2_VERSION );\n\n\nOBJLoader2.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: OBJLoader2,\n\n\t/**\n\t * See {@link OBJLoader2Parser.setLogging}\n\t * @return {OBJLoader2}\n\t */\n\tsetLogging: function ( enabled, debug ) {\n\n\t\tthis.parser.setLogging( enabled, debug );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2Parser.setMaterialPerSmoothingGroup}\n\t * @return {OBJLoader2}\n\t */\n\tsetMaterialPerSmoothingGroup: function ( materialPerSmoothingGroup ) {\n\n\t\tthis.parser.setMaterialPerSmoothingGroup( materialPerSmoothingGroup );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2Parser.setUseOAsMesh}\n\t * @return {OBJLoader2}\n\t */\n\tsetUseOAsMesh: function ( useOAsMesh ) {\n\n\t\tthis.parser.setUseOAsMesh( useOAsMesh );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2Parser.setUseIndices}\n\t * @return {OBJLoader2}\n\t */\n\tsetUseIndices: function ( useIndices ) {\n\n\t\tthis.parser.setUseIndices( useIndices );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2Parser.setDisregardNormals}\n\t * @return {OBJLoader2}\n\t */\n\tsetDisregardNormals: function ( disregardNormals ) {\n\n\t\tthis.parser.setDisregardNormals( disregardNormals );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Set the name of the model.\n\t *\n\t * @param {string} modelName\n\t * @return {OBJLoader2}\n\t */\n\tsetModelName: function ( modelName ) {\n\n\t\tthis.modelName = modelName ? modelName : this.modelName;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Set the node where the loaded objects will be attached directly.\n\t *\n\t * @param {Object3D} baseObject3d Object already attached to scenegraph where new meshes will be attached to\n\t * @return {OBJLoader2}\n\t */\n\tsetBaseObject3d: function ( baseObject3d ) {\n\n\t\tthis.baseObject3d = ( baseObject3d === undefined || baseObject3d === null ) ? this.baseObject3d : baseObject3d;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Add materials as associated array.\n\t *\n\t * @param {Object} materials Object with named {@link Material}\n\t * @param overrideExisting boolean Override existing material\n\t * @return {OBJLoader2}\n\t */\n\taddMaterials: function ( materials, overrideExisting ) {\n\n\t\tthis.materialHandler.addMaterials( materials, overrideExisting );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2Parser.setCallbackOnAssetAvailable}\n\t * @return {OBJLoader2}\n\t */\n\tsetCallbackOnAssetAvailable: function ( onAssetAvailable ) {\n\n\t\tthis.parser.setCallbackOnAssetAvailable( onAssetAvailable );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2Parser.setCallbackOnProgress}\n\t * @return {OBJLoader2}\n\t */\n\tsetCallbackOnProgress: function ( onProgress ) {\n\n\t\tthis.parser.setCallbackOnProgress( onProgress );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2Parser.setCallbackOnError}\n\t * @return {OBJLoader2}\n\t */\n\tsetCallbackOnError: function ( onError ) {\n\n\t\tthis.parser.setCallbackOnError( onError );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2Parser.setCallbackOnLoad}\n\t * @return {OBJLoader2}\n\t */\n\tsetCallbackOnLoad: function ( onLoad ) {\n\n\t\tthis.parser.setCallbackOnLoad( onLoad );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Register a function that is called once a single mesh is available and it could be altered by the supplied function.\n\t *\n\t * @param {Function} [onMeshAlter]\n\t * @return {OBJLoader2}\n\t */\n\tsetCallbackOnMeshAlter: function ( onMeshAlter ) {\n\n\t\tthis.meshReceiver._setCallbacks( this.parser.callbacks.onProgress, onMeshAlter );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Register a function that is called once all materials have been loaded and they could be altered by the supplied function.\n\t *\n\t * @param {Function} [onLoadMaterials]\n\t * @return {OBJLoader2}\n\t */\n\tsetCallbackOnLoadMaterials: function ( onLoadMaterials ) {\n\n\t\tthis.materialHandler._setCallbacks( onLoadMaterials );\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Use this convenient method to load a file at the given URL. By default the fileLoader uses an ArrayBuffer.\n\t *\n\t * @param {string}  url A string containing the path/URL of the file to be loaded.\n\t * @param {function} onLoad A function to be called after loading is successfully completed. The function receives loaded Object3D as an argument.\n\t * @param {function} [onFileLoadProgress] A function to be called while the loading is in progress. The argument will be the XMLHttpRequest instance, which contains total and Integer bytes.\n\t * @param {function} [onError] A function to be called if an error occurs during loading. The function receives the error as an argument.\n\t * @param {function} [onMeshAlter] Called after every single mesh is made available by the parser\n\t */\n\tload: function ( url, onLoad, onFileLoadProgress, onError, onMeshAlter ) {\n\n\t\tconst scope = this;\n\t\tif ( onLoad === null || onLoad === undefined || ! ( onLoad instanceof Function ) ) {\n\n\t\t\tconst errorMessage = 'onLoad is not a function! Aborting...';\n\t\t\tscope.parser.callbacks.onError( errorMessage );\n\t\t\tthrow errorMessage;\n\n\t\t} else {\n\n\t\t\tthis.parser.setCallbackOnLoad( onLoad );\n\n\t\t}\n\n\t\tif ( onError === null || onError === undefined || ! ( onError instanceof Function ) ) {\n\n\t\t\tonError = function ( event ) {\n\n\t\t\t\tlet errorMessage = event;\n\n\t\t\t\tif ( event.currentTarget && event.currentTarget.statusText !== null ) {\n\n\t\t\t\t\terrorMessage = 'Error occurred while downloading!\\nurl: ' + event.currentTarget.responseURL + '\\nstatus: ' + event.currentTarget.statusText;\n\n\t\t\t\t}\n\n\t\t\t\tscope.parser.callbacks.onError( errorMessage );\n\n\t\t\t};\n\n\t\t}\n\n\t\tif ( ! url ) {\n\n\t\t\tonError( 'An invalid url was provided. Unable to continue!' );\n\n\t\t}\n\n\t\tconst urlFull = new URL( url, window.location.href ).href;\n\t\tlet filename = urlFull;\n\t\tconst urlParts = urlFull.split( '/' );\n\t\tif ( urlParts.length > 2 ) {\n\n\t\t\tfilename = urlParts[ urlParts.length - 1 ];\n\t\t\tthis.path = urlParts.slice( 0, urlParts.length - 1 ).join( '/' ) + '/';\n\n\t\t}\n\n\t\tif ( onFileLoadProgress === null || onFileLoadProgress === undefined || ! ( onFileLoadProgress instanceof Function ) ) {\n\n\t\t\tlet numericalValueRef = 0;\n\t\t\tlet numericalValue = 0;\n\t\t\tonFileLoadProgress = function ( event ) {\n\n\t\t\t\tif ( ! event.lengthComputable ) return;\n\n\t\t\t\tnumericalValue = event.loaded / event.total;\n\n\t\t\t\tif ( numericalValue > numericalValueRef ) {\n\n\t\t\t\t\tnumericalValueRef = numericalValue;\n\t\t\t\t\tconst output = 'Download of \"' + url + '\": ' + ( numericalValue * 100 ).toFixed( 2 ) + '%';\n\t\t\t\t\tscope.parser.callbacks.onProgress( 'progressLoad', output, numericalValue );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tthis.setCallbackOnMeshAlter( onMeshAlter );\n\t\tconst fileLoaderOnLoad = function ( content ) {\n\n\t\t\tscope.parser.callbacks.onLoad( scope.parse( content ), 'OBJLoader2#load: Parsing completed' );\n\n\t\t};\n\n\t\tconst fileLoader = new FileLoader( this.manager );\n\t\tfileLoader.setPath( this.path || this.resourcePath );\n\t\tfileLoader.setResponseType( 'arraybuffer' );\n\t\tfileLoader.load( filename, fileLoaderOnLoad, onFileLoadProgress, onError );\n\n\t},\n\n\t/**\n\t * Parses OBJ data synchronously from arraybuffer or string and returns the {@link Object3D}.\n\t *\n\t * @param {arraybuffer|string} content OBJ data as Uint8Array or String\n\t * @return {Object3D}\n\t */\n\tparse: function ( content ) {\n\n\t\t// fast-fail in case of illegal data\n\t\tif ( content === null || content === undefined ) {\n\n\t\t\tthrow 'Provided content is not a valid ArrayBuffer or String. Unable to continue parsing';\n\n\t\t}\n\n\t\tif ( this.parser.logging.enabled ) {\n\n\t\t\tconsole.time( 'OBJLoader parse: ' + this.modelName );\n\n\t\t}\n\n\t\t// Create default materials beforehand, but do not override previously set materials (e.g. during init)\n\t\tthis.materialHandler.createDefaultMaterials( false );\n\n\t\t// code works directly on the material references, parser clear its materials before updating\n\t\tthis.parser.setMaterials( this.materialHandler.getMaterials() );\n\n\t\tif ( content instanceof ArrayBuffer || content instanceof Uint8Array ) {\n\n\t\t\tif ( this.parser.logging.enabled ) console.info( 'Parsing arrayBuffer...' );\n\t\t\tthis.parser.execute( content );\n\n\t\t} else if ( typeof ( content ) === 'string' || content instanceof String ) {\n\n\t\t\tif ( this.parser.logging.enabled ) console.info( 'Parsing text...' );\n\t\t\tthis.parser.executeLegacy( content );\n\n\t\t} else {\n\n\t\t\tthis.parser.callbacks.onError( 'Provided content was neither of type String nor Uint8Array! Aborting...' );\n\n\t\t}\n\n\t\tif ( this.parser.logging.enabled ) {\n\n\t\t\tconsole.timeEnd( 'OBJLoader parse: ' + this.modelName );\n\n\t\t}\n\n\t\treturn this.baseObject3d;\n\n\t},\n\n\t_onAssetAvailable: function ( payload ) {\n\n\t\tif ( payload.cmd !== 'assetAvailable' ) return;\n\n\t\tif ( payload.type === 'mesh' ) {\n\n\t\t\tconst meshes = this.meshReceiver.buildMeshes( payload );\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\tthis.baseObject3d.add( mesh );\n\n\t\t\t}\n\n\t\t} else if ( payload.type === 'material' ) {\n\n\t\t\tthis.materialHandler.addPayloadMaterials( payload );\n\n\t\t}\n\n\t}\n\n} );\n\nexport { OBJLoader2 };\n"
  },
  {
    "path": "libs/three.js/loaders/OBJLoader2Parallel.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\n// Imports only related to wrapper\nimport {\n\tObject3D\n} from '../../../build/three.module.js';\nimport {\n\tCodeBuilderInstructions,\n\tWorkerExecutionSupport\n} from './obj2/worker/main/WorkerExecutionSupport.js';\nimport { CodeSerializer } from './obj2/utils/CodeSerializer.js';\nimport { OBJLoader2 } from './OBJLoader2.js';\n\n// Imports only related to worker (when standard workers (modules aren't supported) are used)\nimport { OBJLoader2Parser } from './obj2/OBJLoader2Parser.js';\nimport {\n\tWorkerRunner,\n\tDefaultWorkerPayloadHandler,\n\tObjectManipulator\n} from './obj2/worker/parallel/WorkerRunner.js';\n\n\n/**\n * Creates a new OBJLoader2Parallel. Use it to load OBJ data from files or to parse OBJ data from arraybuffer.\n * It extends {@link OBJLoader2} with the capability to run the parser in a web worker.\n *\n * @param [LoadingManager] manager The loadingManager for the loader to use. Default is {@link LoadingManager}\n * @constructor\n */\nconst OBJLoader2Parallel = function ( manager ) {\n\n\tOBJLoader2.call( this, manager );\n\tthis.preferJsmWorker = false;\n\tthis.jsmWorkerUrl = null;\n\n\tthis.executeParallel = true;\n\tthis.workerExecutionSupport = new WorkerExecutionSupport();\n\n};\n\nOBJLoader2Parallel.OBJLOADER2_PARALLEL_VERSION = '3.2.0';\nconsole.info( 'Using OBJLoader2Parallel version: ' + OBJLoader2Parallel.OBJLOADER2_PARALLEL_VERSION );\nOBJLoader2Parallel.DEFAULT_JSM_WORKER_PATH = './jsm/loaders/obj2/worker/parallel/OBJLoader2JsmWorker.js';\n\nOBJLoader2Parallel.prototype = Object.assign( Object.create( OBJLoader2.prototype ), {\n\n\tconstructor: OBJLoader2Parallel,\n\n\t/**\n\t * Execution of parse in parallel via Worker is default, but normal {OBJLoader2} parsing can be enforced via false here.\n\t *\n\t * @param {boolean} executeParallel True or False\n\t * @return {OBJLoader2Parallel}\n\t */\n\tsetExecuteParallel: function ( executeParallel ) {\n\n\t\tthis.executeParallel = executeParallel === true;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Set whether jsm modules in workers should be used. This requires browser support which is currently only experimental.\n\t * @param {boolean} preferJsmWorker True or False\n\t * @param {URL} jsmWorkerUrl Provide complete jsm worker URL otherwise relative path to this module may not be correct\n\t * @return {OBJLoader2Parallel}\n\t */\n\tsetJsmWorker: function ( preferJsmWorker, jsmWorkerUrl ) {\n\n\t\tthis.preferJsmWorker = preferJsmWorker === true;\n\n\t\tif ( jsmWorkerUrl === undefined || jsmWorkerUrl === null ) {\n\n\t\t\tthrow 'The url to the jsm worker is not valid. Aborting...';\n\n\t\t}\n\n\t\tthis.jsmWorkerUrl = jsmWorkerUrl;\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Allow to get hold of {@link WorkerExecutionSupport} for configuration purposes.\n\t * @return {WorkerExecutionSupport}\n\t */\n\tgetWorkerExecutionSupport: function () {\n\n\t\treturn this.workerExecutionSupport;\n\n\t},\n\n\t/**\n\t * Provide instructions on what is to be contained in the worker.\n\t * @return {CodeBuilderInstructions}\n\t */\n\tbuildWorkerCode: function () {\n\n\t\tconst codeBuilderInstructions = new CodeBuilderInstructions( true, true, this.preferJsmWorker );\n\n\t\tif ( codeBuilderInstructions.isSupportsJsmWorker() ) {\n\n\t\t\tcodeBuilderInstructions.setJsmWorkerUrl( this.jsmWorkerUrl );\n\n\t\t}\n\n\t\tif ( codeBuilderInstructions.isSupportsStandardWorker() ) {\n\n\t\t\tconst objectManipulator = new ObjectManipulator();\n\t\t\tconst defaultWorkerPayloadHandler = new DefaultWorkerPayloadHandler( this.parser );\n\t\t\tconst workerRunner = new WorkerRunner( {} );\n\t\t\tcodeBuilderInstructions.addCodeFragment( CodeSerializer.serializeClass( OBJLoader2Parser, this.parser ) );\n\t\t\tcodeBuilderInstructions.addCodeFragment( CodeSerializer.serializeClass( ObjectManipulator, objectManipulator ) );\n\t\t\tcodeBuilderInstructions.addCodeFragment( CodeSerializer.serializeClass( DefaultWorkerPayloadHandler, defaultWorkerPayloadHandler ) );\n\t\t\tcodeBuilderInstructions.addCodeFragment( CodeSerializer.serializeClass( WorkerRunner, workerRunner ) );\n\n\t\t\tconst startCode = 'new ' + workerRunner.constructor.name + '( new ' + defaultWorkerPayloadHandler.constructor.name + '( new ' + this.parser.constructor.name + '() ) );';\n\t\t\tcodeBuilderInstructions.addStartCode( startCode );\n\n\t\t}\n\n\t\treturn codeBuilderInstructions;\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2.load}\n\t */\n\tload: function ( content, onLoad, onFileLoadProgress, onError, onMeshAlter ) {\n\n \t\tconst scope = this;\n\t\tfunction interceptOnLoad( object3d, message ) {\n\n\t\t\tif ( object3d.name === 'OBJLoader2ParallelDummy' ) {\n\n\t\t\t\tif ( scope.parser.logging.enabled && scope.parser.logging.debug ) {\n\n\t\t\t\t\tconsole.debug( 'Received dummy answer from OBJLoader2Parallel#parse' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tonLoad( object3d, message );\n\n\t\t\t}\n\n\t\t}\n\n\t\tOBJLoader2.prototype.load.call( this, content, interceptOnLoad, onFileLoadProgress, onError, onMeshAlter );\n\n\t},\n\n\t/**\n\t * See {@link OBJLoader2.parse}\n\t * The callback onLoad needs to be set to be able to receive the content if used in parallel mode.\n\t * Fallback is possible via {@link OBJLoader2Parallel#setExecuteParallel}.\n\t */\n\tparse: function ( content ) {\n\n\t\tif ( this.executeParallel ) {\n\n\t\t\tif ( this.parser.callbacks.onLoad === this.parser._onLoad ) {\n\n\t\t\t\tthrow 'No callback other than the default callback was provided! Aborting!';\n\n\t\t\t}\n\n\t\t\t// check if worker has been initialize before. If yes, skip init\n\t\t\tif ( ! this.workerExecutionSupport.isWorkerLoaded( this.preferJsmWorker ) ) {\n\n\t\t\t\tthis.workerExecutionSupport.buildWorker( this.buildWorkerCode() );\n\n\t\t\t\tconst scope = this;\n\t\t\t\tconst scopedOnAssetAvailable = function ( payload ) {\n\n\t\t\t\t\tscope._onAssetAvailable( payload );\n\n\t\t\t\t};\n\n\t\t\t\tfunction scopedOnLoad( message ) {\n\n\t\t\t\t\tscope.parser.callbacks.onLoad( scope.baseObject3d, message );\n\n\t\t\t\t}\n\n\t\t\t\tthis.workerExecutionSupport.updateCallbacks( scopedOnAssetAvailable, scopedOnLoad );\n\n\t\t\t}\n\n\t\t\t// Create default materials beforehand, but do not override previously set materials (e.g. during init)\n\t\t\tthis.materialHandler.createDefaultMaterials( false );\n\n\t\t\tthis.workerExecutionSupport.executeParallel(\n\t\t\t\t{\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tmodelName: this.modelName,\n\t\t\t\t\t\tinstanceNo: this.instanceNo,\n\t\t\t\t\t\tuseIndices: this.parser.useIndices,\n\t\t\t\t\t\tdisregardNormals: this.parser.disregardNormals,\n\t\t\t\t\t\tmaterialPerSmoothingGroup: this.parser.materialPerSmoothingGroup,\n\t\t\t\t\t\tuseOAsMesh: this.parser.useOAsMesh,\n\t\t\t\t\t\tmaterials: this.materialHandler.getMaterialsJSON()\n\t\t\t\t\t},\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tinput: content,\n\t\t\t\t\t\toptions: null\n\t\t\t\t\t},\n\t\t\t\t\tlogging: {\n\t\t\t\t\t\tenabled: this.parser.logging.enabled,\n\t\t\t\t\t\tdebug: this.parser.logging.debug\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tconst dummy = new Object3D();\n\t\t\tdummy.name = 'OBJLoader2ParallelDummy';\n\t\t\treturn dummy;\n\n\t\t} else {\n\n\t\t\treturn OBJLoader2.prototype.parse.call( this, content );\n\n\t\t}\n\n\t},\n\n} );\n\nexport { OBJLoader2Parallel };\n"
  },
  {
    "path": "libs/three.js/loaders/PCDLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils,\n\tPoints,\n\tPointsMaterial\n} from '../../../build/three.module.js';\n\nvar PCDLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.littleEndian = true;\n\n};\n\n\nPCDLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: PCDLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data, url ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data, url ) {\n\n\t\t// from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n\t\tfunction decompressLZF( inData, outLength ) {\n\n\t\t\tvar inLength = inData.length;\n\t\t\tvar outData = new Uint8Array( outLength );\n\t\t\tvar inPtr = 0;\n\t\t\tvar outPtr = 0;\n\t\t\tvar ctrl;\n\t\t\tvar len;\n\t\t\tvar ref;\n\t\t\tdo {\n\n\t\t\t\tctrl = inData[ inPtr ++ ];\n\t\t\t\tif ( ctrl < ( 1 << 5 ) ) {\n\n\t\t\t\t\tctrl ++;\n\t\t\t\t\tif ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = inData[ inPtr ++ ];\n\n\t\t\t\t\t} while ( -- ctrl );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlen = ctrl >> 5;\n\t\t\t\t\tref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;\n\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( len === 7 ) {\n\n\t\t\t\t\t\tlen += inData[ inPtr ++ ];\n\t\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tref -= inData[ inPtr ++ ];\n\t\t\t\t\tif ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( ref < 0 ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = outData[ ref ++ ];\n\n\t\t\t\t\t} while ( -- len + 2 );\n\n\t\t\t\t}\n\n\t\t\t} while ( inPtr < inLength );\n\n\t\t\treturn outData;\n\n\t\t}\n\n\t\tfunction parseHeader( data ) {\n\n\t\t\tvar PCDheader = {};\n\t\t\tvar result1 = data.search( /[\\r\\n]DATA\\s(\\S*)\\s/i );\n\t\t\tvar result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec( data.substr( result1 - 1 ) );\n\n\t\t\tPCDheader.data = result2[ 1 ];\n\t\t\tPCDheader.headerLen = result2[ 0 ].length + result1;\n\t\t\tPCDheader.str = data.substr( 0, PCDheader.headerLen );\n\n\t\t\t// remove comments\n\n\t\t\tPCDheader.str = PCDheader.str.replace( /\\#.*/gi, '' );\n\n\t\t\t// parse\n\n\t\t\tPCDheader.version = /VERSION (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.fields = /FIELDS (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.size = /SIZE (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.type = /TYPE (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.count = /COUNT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.width = /WIDTH (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.height = /HEIGHT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.viewpoint = /VIEWPOINT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );\n\n\t\t\t// evaluate\n\n\t\t\tif ( PCDheader.version !== null )\n\t\t\t\tPCDheader.version = parseFloat( PCDheader.version[ 1 ] );\n\n\t\t\tif ( PCDheader.fields !== null )\n\t\t\t\tPCDheader.fields = PCDheader.fields[ 1 ].split( ' ' );\n\n\t\t\tif ( PCDheader.type !== null )\n\t\t\t\tPCDheader.type = PCDheader.type[ 1 ].split( ' ' );\n\n\t\t\tif ( PCDheader.width !== null )\n\t\t\t\tPCDheader.width = parseInt( PCDheader.width[ 1 ] );\n\n\t\t\tif ( PCDheader.height !== null )\n\t\t\t\tPCDheader.height = parseInt( PCDheader.height[ 1 ] );\n\n\t\t\tif ( PCDheader.viewpoint !== null )\n\t\t\t\tPCDheader.viewpoint = PCDheader.viewpoint[ 1 ];\n\n\t\t\tif ( PCDheader.points !== null )\n\t\t\t\tPCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );\n\n\t\t\tif ( PCDheader.points === null )\n\t\t\t\tPCDheader.points = PCDheader.width * PCDheader.height;\n\n\t\t\tif ( PCDheader.size !== null ) {\n\n\t\t\t\tPCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( PCDheader.count !== null ) {\n\n\t\t\t\tPCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tPCDheader.count = [];\n\n\t\t\t\tfor ( var i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tPCDheader.count.push( 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tPCDheader.offset = {};\n\n\t\t\tvar sizeSum = 0;\n\n\t\t\tfor ( var i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = i;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;\n\t\t\t\t\tsizeSum += PCDheader.size[ i ] * PCDheader.count[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// for binary only\n\n\t\t\tPCDheader.rowSize = sizeSum;\n\n\t\t\treturn PCDheader;\n\n\t\t}\n\n\t\tvar textData = LoaderUtils.decodeText( new Uint8Array( data ) );\n\n\t\t// parse header (always ascii format)\n\n\t\tvar PCDheader = parseHeader( textData );\n\n\t\t// parse data\n\n\t\tvar position = [];\n\t\tvar normal = [];\n\t\tvar color = [];\n\n\t\t// ascii\n\n\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\tvar offset = PCDheader.offset;\n\t\t\tvar pcdData = textData.substr( PCDheader.headerLen );\n\t\t\tvar lines = pcdData.split( '\\n' );\n\n\t\t\tfor ( var i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tif ( lines[ i ] === '' ) continue;\n\n\t\t\t\tvar line = lines[ i ].split( ' ' );\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( parseFloat( line[ offset.x ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.y ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tvar rgb = parseFloat( line[ offset.rgb ] );\n\t\t\t\t\tvar r = ( rgb >> 16 ) & 0x0000ff;\n\t\t\t\t\tvar g = ( rgb >> 8 ) & 0x0000ff;\n\t\t\t\t\tvar b = ( rgb >> 0 ) & 0x0000ff;\n\t\t\t\t\tcolor.push( r / 255, g / 255, b / 255 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_x ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_y ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_z ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary-compressed\n\n\t\t// normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n\t\t// binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n\t\t// that requires a totally different parsing approach compared to non-compressed data\n\n\t\tif ( PCDheader.data === 'binary_compressed' ) {\n\n\t\t\tvar sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );\n\t\t\tvar compressedSize = sizes[ 0 ];\n\t\t\tvar decompressedSize = sizes[ 1 ];\n\t\t\tvar decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );\n\t\t\tvar dataview = new DataView( decompressed.buffer );\n\n\t\t\tvar offset = PCDheader.offset;\n\n\t\t\tfor ( var i = 0; i < PCDheader.points; i ++ ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.x ) + PCDheader.size[ 0 ] * i, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.y ) + PCDheader.size[ 1 ] * i, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.z ) + PCDheader.size[ 2 ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tcolor.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 0 ) / 255.0 );\n\t\t\t\t\tcolor.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 1 ) / 255.0 );\n\t\t\t\t\tcolor.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ 3 ] * i + 2 ) / 255.0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_x ) + PCDheader.size[ 4 ] * i, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_y ) + PCDheader.size[ 5 ] * i, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_z ) + PCDheader.size[ 6 ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary\n\n\t\tif ( PCDheader.data === 'binary' ) {\n\n\t\t\tvar dataview = new DataView( data, PCDheader.headerLen );\n\t\t\tvar offset = PCDheader.offset;\n\n\t\t\tfor ( var i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.x, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.y, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.z, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tcolor.push( dataview.getUint8( row + offset.rgb + 2 ) / 255.0 );\n\t\t\t\t\tcolor.push( dataview.getUint8( row + offset.rgb + 1 ) / 255.0 );\n\t\t\t\t\tcolor.push( dataview.getUint8( row + offset.rgb + 0 ) / 255.0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_x, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_y, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_z, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tif ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\t// build material\n\n\t\tvar material = new PointsMaterial( { size: 0.005 } );\n\n\t\tif ( color.length > 0 ) {\n\n\t\t\tmaterial.vertexColors = true;\n\n\t\t} else {\n\n\t\t\tmaterial.color.setHex( Math.random() * 0xffffff );\n\n\t\t}\n\n\t\t// build point cloud\n\n\t\tvar mesh = new Points( geometry, material );\n\t\tvar name = url.split( '' ).reverse().join( '' );\n\t\tname = /([^\\/]*)/.exec( name );\n\t\tname = name[ 1 ].split( '' ).reverse().join( '' );\n\t\tmesh.name = name;\n\n\t\treturn mesh;\n\n\t}\n\n} );\n\nexport { PCDLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/PDBLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader\n} from '../../../build/three.module.js';\n\nvar PDBLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nPDBLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: PDBLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\t// Based on CanvasMol PDB parser\n\n\tparse: function ( text ) {\n\n\t\tfunction trim( text ) {\n\n\t\t\treturn text.replace( /^\\s\\s*/, '' ).replace( /\\s\\s*$/, '' );\n\n\t\t}\n\n\t\tfunction capitalize( text ) {\n\n\t\t\treturn text.charAt( 0 ).toUpperCase() + text.substr( 1 ).toLowerCase();\n\n\t\t}\n\n\t\tfunction hash( s, e ) {\n\n\t\t\treturn 's' + Math.min( s, e ) + 'e' + Math.max( s, e );\n\n\t\t}\n\n\t\tfunction parseBond( start, length ) {\n\n\t\t\tvar eatom = parseInt( lines[ i ].substr( start, length ) );\n\n\t\t\tif ( eatom ) {\n\n\t\t\t\tvar h = hash( satom, eatom );\n\n\t\t\t\tif ( _bhash[ h ] === undefined ) {\n\n\t\t\t\t\t_bonds.push( [ satom - 1, eatom - 1, 1 ] );\n\t\t\t\t\t_bhash[ h ] = _bonds.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// doesn't really work as almost all PDBs\n\t\t\t\t\t// have just normal bonds appearing multiple\n\t\t\t\t\t// times instead of being double/triple bonds\n\t\t\t\t\t// bonds[bhash[h]][2] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildGeometry() {\n\n\t\t\tvar build = {\n\t\t\t\tgeometryAtoms: new BufferGeometry(),\n\t\t\t\tgeometryBonds: new BufferGeometry(),\n\t\t\t\tjson: {\n\t\t\t\t\tatoms: atoms\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar geometryAtoms = build.geometryAtoms;\n\t\t\tvar geometryBonds = build.geometryBonds;\n\n\t\t\tvar i, l;\n\t\t\tvar x, y, z;\n\n\t\t\tvar verticesAtoms = [];\n\t\t\tvar colorsAtoms = [];\n\t\t\tvar verticesBonds = [];\n\n\t\t\t// atoms\n\n\t\t\tfor ( i = 0, l = atoms.length; i < l; i ++ ) {\n\n\t\t\t\tvar atom = atoms[ i ];\n\n\t\t\t\tx = atom[ 0 ];\n\t\t\t\ty = atom[ 1 ];\n\t\t\t\tz = atom[ 2 ];\n\n\t\t\t\tverticesAtoms.push( x, y, z );\n\n\t\t\t\tvar r = atom[ 3 ][ 0 ] / 255;\n\t\t\t\tvar g = atom[ 3 ][ 1 ] / 255;\n\t\t\t\tvar b = atom[ 3 ][ 2 ] / 255;\n\n\t\t\t\tcolorsAtoms.push( r, g, b );\n\n\t\t\t}\n\n\t\t\t// bonds\n\n\t\t\tfor ( i = 0, l = _bonds.length; i < l; i ++ ) {\n\n\t\t\t\tvar bond = _bonds[ i ];\n\n\t\t\t\tvar start = bond[ 0 ];\n\t\t\t\tvar end = bond[ 1 ];\n\n\t\t\t\tvar startAtom = _atomMap[ start ];\n\t\t\t\tvar endAtom = _atomMap[ end ];\n\n\t\t\t\tx = startAtom[ 0 ];\n\t\t\t\ty = startAtom[ 1 ];\n\t\t\t\tz = startAtom[ 2 ];\n\n\t\t\t\tverticesBonds.push( x, y, z );\n\n\t\t\t\tx = endAtom[ 0 ];\n\t\t\t\ty = endAtom[ 1 ];\n\t\t\t\tz = endAtom[ 2 ];\n\n\t\t\t\tverticesBonds.push( x, y, z );\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tgeometryAtoms.setAttribute( 'position', new Float32BufferAttribute( verticesAtoms, 3 ) );\n\t\t\tgeometryAtoms.setAttribute( 'color', new Float32BufferAttribute( colorsAtoms, 3 ) );\n\n\t\t\tgeometryBonds.setAttribute( 'position', new Float32BufferAttribute( verticesBonds, 3 ) );\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tvar CPK = { h: [ 255, 255, 255 ], he: [ 217, 255, 255 ], li: [ 204, 128, 255 ], be: [ 194, 255, 0 ], b: [ 255, 181, 181 ], c: [ 144, 144, 144 ], n: [ 48, 80, 248 ], o: [ 255, 13, 13 ], f: [ 144, 224, 80 ], ne: [ 179, 227, 245 ], na: [ 171, 92, 242 ], mg: [ 138, 255, 0 ], al: [ 191, 166, 166 ], si: [ 240, 200, 160 ], p: [ 255, 128, 0 ], s: [ 255, 255, 48 ], cl: [ 31, 240, 31 ], ar: [ 128, 209, 227 ], k: [ 143, 64, 212 ], ca: [ 61, 255, 0 ], sc: [ 230, 230, 230 ], ti: [ 191, 194, 199 ], v: [ 166, 166, 171 ], cr: [ 138, 153, 199 ], mn: [ 156, 122, 199 ], fe: [ 224, 102, 51 ], co: [ 240, 144, 160 ], ni: [ 80, 208, 80 ], cu: [ 200, 128, 51 ], zn: [ 125, 128, 176 ], ga: [ 194, 143, 143 ], ge: [ 102, 143, 143 ], as: [ 189, 128, 227 ], se: [ 255, 161, 0 ], br: [ 166, 41, 41 ], kr: [ 92, 184, 209 ], rb: [ 112, 46, 176 ], sr: [ 0, 255, 0 ], y: [ 148, 255, 255 ], zr: [ 148, 224, 224 ], nb: [ 115, 194, 201 ], mo: [ 84, 181, 181 ], tc: [ 59, 158, 158 ], ru: [ 36, 143, 143 ], rh: [ 10, 125, 140 ], pd: [ 0, 105, 133 ], ag: [ 192, 192, 192 ], cd: [ 255, 217, 143 ], in: [ 166, 117, 115 ], sn: [ 102, 128, 128 ], sb: [ 158, 99, 181 ], te: [ 212, 122, 0 ], i: [ 148, 0, 148 ], xe: [ 66, 158, 176 ], cs: [ 87, 23, 143 ], ba: [ 0, 201, 0 ], la: [ 112, 212, 255 ], ce: [ 255, 255, 199 ], pr: [ 217, 255, 199 ], nd: [ 199, 255, 199 ], pm: [ 163, 255, 199 ], sm: [ 143, 255, 199 ], eu: [ 97, 255, 199 ], gd: [ 69, 255, 199 ], tb: [ 48, 255, 199 ], dy: [ 31, 255, 199 ], ho: [ 0, 255, 156 ], er: [ 0, 230, 117 ], tm: [ 0, 212, 82 ], yb: [ 0, 191, 56 ], lu: [ 0, 171, 36 ], hf: [ 77, 194, 255 ], ta: [ 77, 166, 255 ], w: [ 33, 148, 214 ], re: [ 38, 125, 171 ], os: [ 38, 102, 150 ], ir: [ 23, 84, 135 ], pt: [ 208, 208, 224 ], au: [ 255, 209, 35 ], hg: [ 184, 184, 208 ], tl: [ 166, 84, 77 ], pb: [ 87, 89, 97 ], bi: [ 158, 79, 181 ], po: [ 171, 92, 0 ], at: [ 117, 79, 69 ], rn: [ 66, 130, 150 ], fr: [ 66, 0, 102 ], ra: [ 0, 125, 0 ], ac: [ 112, 171, 250 ], th: [ 0, 186, 255 ], pa: [ 0, 161, 255 ], u: [ 0, 143, 255 ], np: [ 0, 128, 255 ], pu: [ 0, 107, 255 ], am: [ 84, 92, 242 ], cm: [ 120, 92, 227 ], bk: [ 138, 79, 227 ], cf: [ 161, 54, 212 ], es: [ 179, 31, 212 ], fm: [ 179, 31, 186 ], md: [ 179, 13, 166 ], no: [ 189, 13, 135 ], lr: [ 199, 0, 102 ], rf: [ 204, 0, 89 ], db: [ 209, 0, 79 ], sg: [ 217, 0, 69 ], bh: [ 224, 0, 56 ], hs: [ 230, 0, 46 ], mt: [ 235, 0, 38 ], ds: [ 235, 0, 38 ], rg: [ 235, 0, 38 ], cn: [ 235, 0, 38 ], uut: [ 235, 0, 38 ], uuq: [ 235, 0, 38 ], uup: [ 235, 0, 38 ], uuh: [ 235, 0, 38 ], uus: [ 235, 0, 38 ], uuo: [ 235, 0, 38 ] };\n\n\t\tvar atoms = [];\n\n\t\tvar _bonds = [];\n\t\tvar _bhash = {};\n\t\tvar _atomMap = {};\n\n\t\tvar x, y, z, index, e;\n\n\t\t// parse\n\n\t\tvar lines = text.split( '\\n' );\n\n\t\tfor ( var i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tif ( lines[ i ].substr( 0, 4 ) === 'ATOM' || lines[ i ].substr( 0, 6 ) === 'HETATM' ) {\n\n\t\t\t\tx = parseFloat( lines[ i ].substr( 30, 7 ) );\n\t\t\t\ty = parseFloat( lines[ i ].substr( 38, 7 ) );\n\t\t\t\tz = parseFloat( lines[ i ].substr( 46, 7 ) );\n\t\t\t\tindex = parseInt( lines[ i ].substr( 6, 5 ) ) - 1;\n\n\t\t\t\te = trim( lines[ i ].substr( 76, 2 ) ).toLowerCase();\n\n\t\t\t\tif ( e === '' ) {\n\n\t\t\t\t\te = trim( lines[ i ].substr( 12, 2 ) ).toLowerCase();\n\n\t\t\t\t}\n\n\t\t\t\tvar atomData = [ x, y, z, CPK[ e ], capitalize( e ) ];\n\n\t\t\t\tatoms.push( atomData );\n\t\t\t\t_atomMap[ index ] = atomData;\n\n\t\t\t} else if ( lines[ i ].substr( 0, 6 ) === 'CONECT' ) {\n\n\t\t\t\tvar satom = parseInt( lines[ i ].substr( 6, 5 ) );\n\n\t\t\t\tparseBond( 11, 5 );\n\t\t\t\tparseBond( 16, 5 );\n\t\t\t\tparseBond( 21, 5 );\n\t\t\t\tparseBond( 26, 5 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build and return geometry\n\n\t\treturn buildGeometry();\n\n\t}\n\n} );\n\nexport { PDBLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/PLYLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils\n} from '../build/three.module.js';\n\n/**\n * Description: A THREE loader for PLY ASCII files (known as the Polygon\n * File Format or the Stanford Triangle Format).\n *\n * Limitations: ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n *\tvar loader = new PLYLoader();\n *\tloader.load('./models/ply/ascii/dolphins.ply', function (geometry) {\n *\n *\t\tscene.add( new THREE.Mesh( geometry ) );\n *\n *\t} );\n *\n * If the PLY file uses non standard property names, they can be mapped while\n * loading. For example, the following maps the properties\n * “diffuse_(red|green|blue)” in the file to standard color names.\n *\n * loader.setPropertyNameMapping( {\n *\tdiffuse_red: 'red',\n *\tdiffuse_green: 'green',\n *\tdiffuse_blue: 'blue'\n * } );\n *\n */\n\n\nvar PLYLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.propertyNameMapping = {};\n\n};\n\nPLYLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: PLYLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tsetPropertyNameMapping: function ( mapping ) {\n\n\t\tthis.propertyNameMapping = mapping;\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\tfunction parseHeader( data ) {\n\n\t\t\tvar patternHeader = /ply([\\s\\S]*)end_header\\r?\\n/;\n\t\t\tvar headerText = '';\n\t\t\tvar headerLength = 0;\n\t\t\tvar result = patternHeader.exec( data );\n\n\t\t\tif ( result !== null ) {\n\n\t\t\t\theaderText = result[ 1 ];\n\t\t\t\theaderLength = new Blob( [ result[ 0 ] ] ).size;\n\n\t\t\t}\n\n\t\t\tvar header = {\n\t\t\t\tcomments: [],\n\t\t\t\telements: [],\n\t\t\t\theaderLength: headerLength,\n\t\t\t\tobjInfo: ''\n\t\t\t};\n\n\t\t\tvar lines = headerText.split( '\\n' );\n\t\t\tvar currentElement;\n\t\t\tvar lineType, lineValues;\n\n\t\t\tfunction make_ply_element_property( propertValues, propertyNameMapping ) {\n\n\t\t\t\tvar property = { type: propertValues[ 0 ] };\n\n\t\t\t\tif ( property.type === 'list' ) {\n\n\t\t\t\t\tproperty.name = propertValues[ 3 ];\n\t\t\t\t\tproperty.countType = propertValues[ 1 ];\n\t\t\t\t\tproperty.itemType = propertValues[ 2 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tproperty.name = propertValues[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( property.name in propertyNameMapping ) {\n\n\t\t\t\t\tproperty.name = propertyNameMapping[ property.name ];\n\n\t\t\t\t}\n\n\t\t\t\treturn property;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\t\t\tvar line = lines[ i ];\n\t\t\t\tline = line.trim();\n\n\t\t\t\tif ( line === '' ) continue;\n\n\t\t\t\tlineValues = line.split( /\\s+/ );\n\t\t\t\tlineType = lineValues.shift();\n\t\t\t\tline = lineValues.join( ' ' );\n\n\t\t\t\tswitch ( lineType ) {\n\n\t\t\t\t\tcase 'format':\n\n\t\t\t\t\t\theader.format = lineValues[ 0 ];\n\t\t\t\t\t\theader.version = lineValues[ 1 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'comment':\n\n\t\t\t\t\t\theader.comments.push( line );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'element':\n\n\t\t\t\t\t\tif ( currentElement !== undefined ) {\n\n\t\t\t\t\t\t\theader.elements.push( currentElement );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentElement = {};\n\t\t\t\t\t\tcurrentElement.name = lineValues[ 0 ];\n\t\t\t\t\t\tcurrentElement.count = parseInt( lineValues[ 1 ] );\n\t\t\t\t\t\tcurrentElement.properties = [];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'property':\n\n\t\t\t\t\t\tcurrentElement.properties.push( make_ply_element_property( lineValues, scope.propertyNameMapping ) );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'obj_info':\n\n\t\t\t\t\t\theader.objInfo = line;\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.log( 'unhandled', lineType, lineValues );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( currentElement !== undefined ) {\n\n\t\t\t\theader.elements.push( currentElement );\n\n\t\t\t}\n\n\t\t\treturn header;\n\n\t\t}\n\n\t\tfunction parseASCIINumber( n, type ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'char': case 'uchar': case 'short': case 'ushort': case 'int': case 'uint':\n\t\t\t\tcase 'int8': case 'uint8': case 'int16': case 'uint16': case 'int32': case 'uint32':\n\n\t\t\t\t\treturn parseInt( n );\n\n\t\t\t\tcase 'float': case 'double': case 'float32': case 'float64':\n\n\t\t\t\t\treturn parseFloat( n );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseASCIIElement( properties, line ) {\n\n\t\t\tvar values = line.split( /\\s+/ );\n\n\t\t\tvar element = {};\n\n\t\t\tfor ( var i = 0; i < properties.length; i ++ ) {\n\n\t\t\t\tif ( properties[ i ].type === 'list' ) {\n\n\t\t\t\t\tvar list = [];\n\t\t\t\t\tvar n = parseASCIINumber( values.shift(), properties[ i ].countType );\n\n\t\t\t\t\tfor ( var j = 0; j < n; j ++ ) {\n\n\t\t\t\t\t\tlist.push( parseASCIINumber( values.shift(), properties[ i ].itemType ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\telement[ properties[ i ].name ] = list;\n\n\t\t\t\t} else {\n\n\t\t\t\t\telement[ properties[ i ].name ] = parseASCIINumber( values.shift(), properties[ i ].type );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn element;\n\n\t\t}\n\n\t\tfunction parseASCII( data, header ) {\n\n\t\t\t// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)\n\n\t\t\tvar buffer = {\n\t\t\t\tindices: [],\n\t\t\t\tvertices: [],\n\t\t\t\tnormals: [],\n\t\t\t\tuvs: [],\n\t\t\t\tfaceVertexUvs: [],\n\t\t\t\tcolors: []\n\t\t\t};\n\n\t\t\tvar result;\n\n\t\t\tvar patternBody = /end_header\\s([\\s\\S]*)$/;\n\t\t\tvar body = '';\n\t\t\tif ( ( result = patternBody.exec( data ) ) !== null ) {\n\n\t\t\t\tbody = result[ 1 ];\n\n\t\t\t}\n\n\t\t\tvar lines = body.split( '\\n' );\n\t\t\tvar currentElement = 0;\n\t\t\tvar currentElementCount = 0;\n\n\t\t\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\t\t\tvar line = lines[ i ];\n\t\t\t\tline = line.trim();\n\t\t\t\tif ( line === '' ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tif ( currentElementCount >= header.elements[ currentElement ].count ) {\n\n\t\t\t\t\tcurrentElement ++;\n\t\t\t\t\tcurrentElementCount = 0;\n\n\t\t\t\t}\n\n\t\t\t\tvar element = parseASCIIElement( header.elements[ currentElement ].properties, line );\n\n\t\t\t\thandleElement( buffer, header.elements[ currentElement ].name, element );\n\n\t\t\t\tcurrentElementCount ++;\n\n\t\t\t}\n\n\t\t\treturn postProcess( buffer );\n\n\t\t}\n\n\t\tfunction postProcess( buffer ) {\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\t// mandatory buffer data\n\n\t\t\tif ( buffer.indices.length > 0 ) {\n\n\t\t\t\tgeometry.setIndex( buffer.indices );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( buffer.vertices, 3 ) );\n\n\t\t\t// optional buffer data\n\n\t\t\tif ( buffer.normals.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( buffer.normals, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.uvs.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( buffer.uvs, 2 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.colors.length > 0 ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( buffer.colors, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( buffer.faceVertexUvs.length > 0 ) {\n\n\t\t\t\tgeometry = geometry.toNonIndexed();\n\t\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( buffer.faceVertexUvs, 2 ) );\n\n\t\t\t}\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction handleElement( buffer, elementName, element ) {\n\n\t\t\tif ( elementName === 'vertex' ) {\n\n\t\t\t\tbuffer.vertices.push( element.x, element.y, element.z );\n\n\t\t\t\tif ( 'nx' in element && 'ny' in element && 'nz' in element ) {\n\n\t\t\t\t\tbuffer.normals.push( element.nx, element.ny, element.nz );\n\n\t\t\t\t}\n\n\t\t\t\tif ( 's' in element && 't' in element ) {\n\n\t\t\t\t\tbuffer.uvs.push( element.s, element.t );\n\n\t\t\t\t}\n\n\t\t\t\tif ( 'red' in element && 'green' in element && 'blue' in element ) {\n\n\t\t\t\t\tbuffer.colors.push( element.red / 255.0, element.green / 255.0, element.blue / 255.0 );\n\n\t\t\t\t}\n\n\t\t\t} else if ( elementName === 'face' ) {\n\n\t\t\t\tvar vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338\n\t\t\t\tvar texcoord = element.texcoord;\n\n\t\t\t\tif ( vertex_indices.length === 3 ) {\n\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 2 ] );\n\n\t\t\t\t\tif ( texcoord && texcoord.length === 6 ) {\n\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 0 ], texcoord[ 1 ] );\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 2 ], texcoord[ 3 ] );\n\t\t\t\t\t\tbuffer.faceVertexUvs.push( texcoord[ 4 ], texcoord[ 5 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( vertex_indices.length === 4 ) {\n\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 0 ], vertex_indices[ 1 ], vertex_indices[ 3 ] );\n\t\t\t\t\tbuffer.indices.push( vertex_indices[ 1 ], vertex_indices[ 2 ], vertex_indices[ 3 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction binaryRead( dataview, at, type, little_endian ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\t// corespondences for non-specific length types here match rply:\n\t\t\t\tcase 'int8':\t\tcase 'char':\t return [ dataview.getInt8( at ), 1 ];\n\t\t\t\tcase 'uint8':\t\tcase 'uchar':\t return [ dataview.getUint8( at ), 1 ];\n\t\t\t\tcase 'int16':\t\tcase 'short':\t return [ dataview.getInt16( at, little_endian ), 2 ];\n\t\t\t\tcase 'uint16':\tcase 'ushort': return [ dataview.getUint16( at, little_endian ), 2 ];\n\t\t\t\tcase 'int32':\t\tcase 'int':\t\t return [ dataview.getInt32( at, little_endian ), 4 ];\n\t\t\t\tcase 'uint32':\tcase 'uint':\t return [ dataview.getUint32( at, little_endian ), 4 ];\n\t\t\t\tcase 'float32': case 'float':\t return [ dataview.getFloat32( at, little_endian ), 4 ];\n\t\t\t\tcase 'float64': case 'double': return [ dataview.getFloat64( at, little_endian ), 8 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction binaryReadElement( dataview, at, properties, little_endian ) {\n\n\t\t\tvar element = {};\n\t\t\tvar result, read = 0;\n\n\t\t\tfor ( var i = 0; i < properties.length; i ++ ) {\n\n\t\t\t\tif ( properties[ i ].type === 'list' ) {\n\n\t\t\t\t\tvar list = [];\n\n\t\t\t\t\tresult = binaryRead( dataview, at + read, properties[ i ].countType, little_endian );\n\t\t\t\t\tvar n = result[ 0 ];\n\t\t\t\t\tread += result[ 1 ];\n\n\t\t\t\t\tfor ( var j = 0; j < n; j ++ ) {\n\n\t\t\t\t\t\tresult = binaryRead( dataview, at + read, properties[ i ].itemType, little_endian );\n\t\t\t\t\t\tlist.push( result[ 0 ] );\n\t\t\t\t\t\tread += result[ 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\telement[ properties[ i ].name ] = list;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresult = binaryRead( dataview, at + read, properties[ i ].type, little_endian );\n\t\t\t\t\telement[ properties[ i ].name ] = result[ 0 ];\n\t\t\t\t\tread += result[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn [ element, read ];\n\n\t\t}\n\n\t\tfunction parseBinary( data, header ) {\n\n\t\t\tvar buffer = {\n\t\t\t\tindices: [],\n\t\t\t\tvertices: [],\n\t\t\t\tnormals: [],\n\t\t\t\tuvs: [],\n\t\t\t\tfaceVertexUvs: [],\n\t\t\t\tcolors: []\n\t\t\t};\n\n\t\t\tvar little_endian = ( header.format === 'binary_little_endian' );\n\t\t\tvar body = new DataView( data, header.headerLength );\n\t\t\tvar result, loc = 0;\n\n\t\t\tfor ( var currentElement = 0; currentElement < header.elements.length; currentElement ++ ) {\n\n\t\t\t\tfor ( var currentElementCount = 0; currentElementCount < header.elements[ currentElement ].count; currentElementCount ++ ) {\n\n\t\t\t\t\tresult = binaryReadElement( body, loc, header.elements[ currentElement ].properties, little_endian );\n\t\t\t\t\tloc += result[ 1 ];\n\t\t\t\t\tvar element = result[ 0 ];\n\n\t\t\t\t\thandleElement( buffer, header.elements[ currentElement ].name, element );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn postProcess( buffer );\n\n\t\t}\n\n\t\t//\n\n\t\tvar geometry;\n\t\tvar scope = this;\n\n\t\tif ( data instanceof ArrayBuffer ) {\n\n\t\t\tvar text = LoaderUtils.decodeText( new Uint8Array( data ) );\n\t\t\tvar header = parseHeader( text );\n\n\t\t\tgeometry = header.format === 'ascii' ? parseASCII( text, header ) : parseBinary( data, header );\n\n\t\t} else {\n\n\t\t\tgeometry = parseASCII( data, parseHeader( data ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n} );\n\nexport { PLYLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/PRWMLoader.js",
    "content": "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tLoader\n} from '../../../build/three.module.js';\n\n/**\n * See https://github.com/kchapelier/PRWM for more informations about this file format\n */\n\nvar PRWMLoader = ( function () {\n\n\tvar bigEndianPlatform = null;\n\n\t/**\n\t * Check if the endianness of the platform is big-endian (most significant bit first)\n\t * @returns {boolean} True if big-endian, false if little-endian\n\t */\n\tfunction isBigEndianPlatform() {\n\n\t\tif ( bigEndianPlatform === null ) {\n\n\t\t\tvar buffer = new ArrayBuffer( 2 ),\n\t\t\t\tuint8Array = new Uint8Array( buffer ),\n\t\t\t\tuint16Array = new Uint16Array( buffer );\n\n\t\t\tuint8Array[ 0 ] = 0xAA; // set first byte\n\t\t\tuint8Array[ 1 ] = 0xBB; // set second byte\n\t\t\tbigEndianPlatform = ( uint16Array[ 0 ] === 0xAABB );\n\n\t\t}\n\n\t\treturn bigEndianPlatform;\n\n\t}\n\n\t// match the values defined in the spec to the TypedArray types\n\tvar InvertedEncodingTypes = [\n\t\tnull,\n\t\tFloat32Array,\n\t\tnull,\n\t\tInt8Array,\n\t\tInt16Array,\n\t\tnull,\n\t\tInt32Array,\n\t\tUint8Array,\n\t\tUint16Array,\n\t\tnull,\n\t\tUint32Array\n\t];\n\n\t// define the method to use on a DataView, corresponding the TypedArray type\n\tvar getMethods = {\n\t\tUint16Array: 'getUint16',\n\t\tUint32Array: 'getUint32',\n\t\tInt16Array: 'getInt16',\n\t\tInt32Array: 'getInt32',\n\t\tFloat32Array: 'getFloat32',\n\t\tFloat64Array: 'getFloat64'\n\t};\n\n\n\tfunction copyFromBuffer( sourceArrayBuffer, viewType, position, length, fromBigEndian ) {\n\n\t\tvar bytesPerElement = viewType.BYTES_PER_ELEMENT,\n\t\t\tresult;\n\n\t\tif ( fromBigEndian === isBigEndianPlatform() || bytesPerElement === 1 ) {\n\n\t\t\tresult = new viewType( sourceArrayBuffer, position, length );\n\n\t\t} else {\n\n\t\t\tvar readView = new DataView( sourceArrayBuffer, position, length * bytesPerElement ),\n\t\t\t\tgetMethod = getMethods[ viewType.name ],\n\t\t\t\tlittleEndian = ! fromBigEndian,\n\t\t\t\ti = 0;\n\n\t\t\tresult = new viewType( length );\n\n\t\t\tfor ( ; i < length; i ++ ) {\n\n\t\t\t\tresult[ i ] = readView[ getMethod ]( i * bytesPerElement, littleEndian );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\n\tfunction decodePrwm( buffer ) {\n\n\t\tvar array = new Uint8Array( buffer ),\n\t\t\tversion = array[ 0 ],\n\t\t\tflags = array[ 1 ],\n\t\t\tindexedGeometry = !! ( flags >> 7 & 0x01 ),\n\t\t\tindicesType = flags >> 6 & 0x01,\n\t\t\tbigEndian = ( flags >> 5 & 0x01 ) === 1,\n\t\t\tattributesNumber = flags & 0x1F,\n\t\t\tvaluesNumber = 0,\n\t\t\tindicesNumber = 0;\n\n\t\tif ( bigEndian ) {\n\n\t\t\tvaluesNumber = ( array[ 2 ] << 16 ) + ( array[ 3 ] << 8 ) + array[ 4 ];\n\t\t\tindicesNumber = ( array[ 5 ] << 16 ) + ( array[ 6 ] << 8 ) + array[ 7 ];\n\n\t\t} else {\n\n\t\t\tvaluesNumber = array[ 2 ] + ( array[ 3 ] << 8 ) + ( array[ 4 ] << 16 );\n\t\t\tindicesNumber = array[ 5 ] + ( array[ 6 ] << 8 ) + ( array[ 7 ] << 16 );\n\n\t\t}\n\n\t\t/** PRELIMINARY CHECKS **/\n\n\t\tif ( version === 0 ) {\n\n\t\t\tthrow new Error( 'PRWM decoder: Invalid format version: 0' );\n\n\t\t} else if ( version !== 1 ) {\n\n\t\t\tthrow new Error( 'PRWM decoder: Unsupported format version: ' + version );\n\n\t\t}\n\n\t\tif ( ! indexedGeometry ) {\n\n\t\t\tif ( indicesType !== 0 ) {\n\n\t\t\t\tthrow new Error( 'PRWM decoder: Indices type must be set to 0 for non-indexed geometries' );\n\n\t\t\t} else if ( indicesNumber !== 0 ) {\n\n\t\t\t\tthrow new Error( 'PRWM decoder: Number of indices must be set to 0 for non-indexed geometries' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/** PARSING **/\n\n\t\tvar pos = 8;\n\n\t\tvar attributes = {},\n\t\t\tattributeName,\n\t\t\tchar,\n\t\t\tattributeType,\n\t\t\tcardinality,\n\t\t\tencodingType,\n\t\t\tarrayType,\n\t\t\tvalues,\n\t\t\tindices,\n\t\t\ti;\n\n\t\tfor ( i = 0; i < attributesNumber; i ++ ) {\n\n\t\t\tattributeName = '';\n\n\t\t\twhile ( pos < array.length ) {\n\n\t\t\t\tchar = array[ pos ];\n\t\t\t\tpos ++;\n\n\t\t\t\tif ( char === 0 ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tattributeName += String.fromCharCode( char );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tflags = array[ pos ];\n\n\t\t\tattributeType = flags >> 7 & 0x01;\n\t\t\tcardinality = ( flags >> 4 & 0x03 ) + 1;\n\t\t\tencodingType = flags & 0x0F;\n\t\t\tarrayType = InvertedEncodingTypes[ encodingType ];\n\n\t\t\tpos ++;\n\n\t\t\t// padding to next multiple of 4\n\t\t\tpos = Math.ceil( pos / 4 ) * 4;\n\n\t\t\tvalues = copyFromBuffer( buffer, arrayType, pos, cardinality * valuesNumber, bigEndian );\n\n\t\t\tpos += arrayType.BYTES_PER_ELEMENT * cardinality * valuesNumber;\n\n\t\t\tattributes[ attributeName ] = {\n\t\t\t\ttype: attributeType,\n\t\t\t\tcardinality: cardinality,\n\t\t\t\tvalues: values\n\t\t\t};\n\n\t\t}\n\n\t\tpos = Math.ceil( pos / 4 ) * 4;\n\n\t\tindices = null;\n\n\t\tif ( indexedGeometry ) {\n\n\t\t\tindices = copyFromBuffer(\n\t\t\t\tbuffer,\n\t\t\t\tindicesType === 1 ? Uint32Array : Uint16Array,\n\t\t\t\tpos,\n\t\t\t\tindicesNumber,\n\t\t\t\tbigEndian\n\t\t\t);\n\n\t\t}\n\n\t\treturn {\n\t\t\tversion: version,\n\t\t\tattributes: attributes,\n\t\t\tindices: indices\n\t\t};\n\n\t}\n\n\t// Define the public interface\n\n\tfunction PRWMLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tPRWMLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: PRWMLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( scope.manager );\n\t\t\tloader.setPath( scope.path );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.setRequestHeader( scope.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\t\turl = url.replace( /\\*/g, isBigEndianPlatform() ? 'be' : 'le' );\n\n\t\t\tloader.load( url, function ( arrayBuffer ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( scope.parse( arrayBuffer ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( arrayBuffer ) {\n\n\t\t\tvar data = decodePrwm( arrayBuffer ),\n\t\t\t\tattributesKey = Object.keys( data.attributes ),\n\t\t\t\tbufferGeometry = new BufferGeometry(),\n\t\t\t\tattribute,\n\t\t\t\ti;\n\n\t\t\tfor ( i = 0; i < attributesKey.length; i ++ ) {\n\n\t\t\t\tattribute = data.attributes[ attributesKey[ i ] ];\n\t\t\t\tbufferGeometry.setAttribute( attributesKey[ i ], new BufferAttribute( attribute.values, attribute.cardinality, attribute.normalized ) );\n\n\t\t\t}\n\n\t\t\tif ( data.indices !== null ) {\n\n\t\t\t\tbufferGeometry.setIndex( new BufferAttribute( data.indices, 1 ) );\n\n\t\t\t}\n\n\t\t\treturn bufferGeometry;\n\n\t\t}\n\n\t} );\n\n\tPRWMLoader.isBigEndianPlatform = function () {\n\n\t\treturn isBigEndianPlatform();\n\n\t};\n\n\treturn PRWMLoader;\n\n} )();\n\nexport { PRWMLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/PVRLoader.js",
    "content": "import {\n\tCompressedTextureLoader,\n\tRGBA_PVRTC_2BPPV1_Format,\n\tRGBA_PVRTC_4BPPV1_Format,\n\tRGB_PVRTC_2BPPV1_Format,\n\tRGB_PVRTC_4BPPV1_Format\n} from '../../../build/three.module.js';\n\n/*\n *\t PVR v2 (legacy) parser\n *   TODO : Add Support for PVR v3 format\n *   TODO : implement loadMipmaps option\n */\n\nvar PVRLoader = function ( manager ) {\n\n\tCompressedTextureLoader.call( this, manager );\n\n};\n\nPVRLoader.prototype = Object.assign( Object.create( CompressedTextureLoader.prototype ), {\n\n\tconstructor: PVRLoader,\n\n\tparse: function ( buffer, loadMipmaps ) {\n\n\t\tvar headerLengthInt = 13;\n\t\tvar header = new Uint32Array( buffer, 0, headerLengthInt );\n\n\t\tvar pvrDatas = {\n\t\t\tbuffer: buffer,\n\t\t\theader: header,\n\t\t\tloadMipmaps: loadMipmaps\n\t\t};\n\n\t\tif ( header[ 0 ] === 0x03525650 ) {\n\n\t\t\t// PVR v3\n\n\t\t\treturn PVRLoader._parseV3( pvrDatas );\n\n\t\t} else if ( header[ 11 ] === 0x21525650 ) {\n\n\t\t\t// PVR v2\n\n\t\t\treturn PVRLoader._parseV2( pvrDatas );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.PVRLoader: Unknown PVR format.' );\n\n\t\t}\n\n\t}\n\n} );\n\nPVRLoader._parseV3 = function ( pvrDatas ) {\n\n\tvar header = pvrDatas.header;\n\tvar bpp, format;\n\n\n\tvar metaLen = header[ 12 ],\n\t\tpixelFormat = header[ 2 ],\n\t\theight = header[ 6 ],\n\t\twidth = header[ 7 ],\n\t\t// numSurfs = header[ 9 ],\n\t\tnumFaces = header[ 10 ],\n\t\tnumMipmaps = header[ 11 ];\n\n\tswitch ( pixelFormat ) {\n\n\t\tcase 0 : // PVRTC 2bpp RGB\n\t\t\tbpp = 2;\n\t\t\tformat = RGB_PVRTC_2BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 1 : // PVRTC 2bpp RGBA\n\t\t\tbpp = 2;\n\t\t\tformat = RGBA_PVRTC_2BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 2 : // PVRTC 4bpp RGB\n\t\t\tbpp = 4;\n\t\t\tformat = RGB_PVRTC_4BPPV1_Format;\n\t\t\tbreak;\n\n\t\tcase 3 : // PVRTC 4bpp RGBA\n\t\t\tbpp = 4;\n\t\t\tformat = RGBA_PVRTC_4BPPV1_Format;\n\t\t\tbreak;\n\n\t\tdefault :\n\t\t\tconsole.error( 'THREE.PVRLoader: Unsupported PVR format:', pixelFormat );\n\n\t}\n\n\tpvrDatas.dataPtr = 52 + metaLen;\n\tpvrDatas.bpp = bpp;\n\tpvrDatas.format = format;\n\tpvrDatas.width = width;\n\tpvrDatas.height = height;\n\tpvrDatas.numSurfaces = numFaces;\n\tpvrDatas.numMipmaps = numMipmaps;\n\tpvrDatas.isCubemap \t= ( numFaces === 6 );\n\n\treturn PVRLoader._extract( pvrDatas );\n\n};\n\nPVRLoader._parseV2 = function ( pvrDatas ) {\n\n\tvar header = pvrDatas.header;\n\n\tvar headerLength = header[ 0 ],\n\t\theight = header[ 1 ],\n\t\twidth = header[ 2 ],\n\t\tnumMipmaps = header[ 3 ],\n\t\tflags = header[ 4 ],\n\t\t// dataLength = header[ 5 ],\n\t\t// bpp =  header[ 6 ],\n\t\t// bitmaskRed = header[ 7 ],\n\t\t// bitmaskGreen = header[ 8 ],\n\t\t// bitmaskBlue = header[ 9 ],\n\t\tbitmaskAlpha = header[ 10 ],\n\t\t// pvrTag = header[ 11 ],\n\t\tnumSurfs = header[ 12 ];\n\n\n\tvar TYPE_MASK = 0xff;\n\tvar PVRTC_2 = 24,\n\t\tPVRTC_4 = 25;\n\n\tvar formatFlags = flags & TYPE_MASK;\n\n\tvar bpp, format;\n\tvar _hasAlpha = bitmaskAlpha > 0;\n\n\tif ( formatFlags === PVRTC_4 ) {\n\n\t\tformat = _hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format;\n\t\tbpp = 4;\n\n\t} else if ( formatFlags === PVRTC_2 ) {\n\n\t\tformat = _hasAlpha ? RGBA_PVRTC_2BPPV1_Format : RGB_PVRTC_2BPPV1_Format;\n\t\tbpp = 2;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.PVRLoader: Unknown PVR format:', formatFlags );\n\n\t}\n\n\tpvrDatas.dataPtr = headerLength;\n\tpvrDatas.bpp = bpp;\n\tpvrDatas.format = format;\n\tpvrDatas.width = width;\n\tpvrDatas.height = height;\n\tpvrDatas.numSurfaces = numSurfs;\n\tpvrDatas.numMipmaps = numMipmaps + 1;\n\n\t// guess cubemap type seems tricky in v2\n\t// it juste a pvr containing 6 surface (no explicit cubemap type)\n\tpvrDatas.isCubemap \t= ( numSurfs === 6 );\n\n\treturn PVRLoader._extract( pvrDatas );\n\n};\n\n\nPVRLoader._extract = function ( pvrDatas ) {\n\n\tvar pvr = {\n\t\tmipmaps: [],\n\t\twidth: pvrDatas.width,\n\t\theight: pvrDatas.height,\n\t\tformat: pvrDatas.format,\n\t\tmipmapCount: pvrDatas.numMipmaps,\n\t\tisCubemap: pvrDatas.isCubemap\n\t};\n\n\tvar buffer = pvrDatas.buffer;\n\n\tvar dataOffset = pvrDatas.dataPtr,\n\t\tbpp = pvrDatas.bpp,\n\t\tnumSurfs = pvrDatas.numSurfaces,\n\t\tdataSize = 0,\n\t\tblockSize = 0,\n\t\tblockWidth = 0,\n\t\tblockHeight = 0,\n\t\twidthBlocks = 0,\n\t\theightBlocks = 0;\n\n\tif ( bpp === 2 ) {\n\n\t\tblockWidth = 8;\n\t\tblockHeight = 4;\n\n\t} else {\n\n\t\tblockWidth = 4;\n\t\tblockHeight = 4;\n\n\t}\n\n\tblockSize = ( blockWidth * blockHeight ) * bpp / 8;\n\n\tpvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs;\n\n\tvar mipLevel = 0;\n\n\twhile ( mipLevel < pvrDatas.numMipmaps ) {\n\n\t\tvar sWidth = pvrDatas.width >> mipLevel,\n\t\t\tsHeight = pvrDatas.height >> mipLevel;\n\n\t\twidthBlocks = sWidth / blockWidth;\n\t\theightBlocks = sHeight / blockHeight;\n\n\t\t// Clamp to minimum number of blocks\n\t\tif ( widthBlocks < 2 ) widthBlocks = 2;\n\t\tif ( heightBlocks < 2 ) heightBlocks = 2;\n\n\t\tdataSize = widthBlocks * heightBlocks * blockSize;\n\n\t\tfor ( var surfIndex = 0; surfIndex < numSurfs; surfIndex ++ ) {\n\n\t\t\tvar byteArray = new Uint8Array( buffer, dataOffset, dataSize );\n\n\t\t\tvar mipmap = {\n\t\t\t\tdata: byteArray,\n\t\t\t\twidth: sWidth,\n\t\t\t\theight: sHeight\n\t\t\t};\n\n\t\t\tpvr.mipmaps[ surfIndex * pvrDatas.numMipmaps + mipLevel ] = mipmap;\n\n\t\t\tdataOffset += dataSize;\n\n\t\t}\n\n\t\tmipLevel ++;\n\n\t}\n\n\treturn pvr;\n\n};\n\nexport { PVRLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/RGBELoader.js",
    "content": "import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearEncoding,\n\tLinearFilter,\n\tNearestFilter,\n\tRGBEEncoding,\n\tRGBEFormat,\n\tRGBFormat,\n\tUnsignedByteType\n} from '../../../build/three.module.js';\n\n// https://github.com/mrdoob/three.js/issues/5552\n// http://en.wikipedia.org/wiki/RGBE_image_format\n\nvar RGBELoader = function ( manager ) {\n\n\tDataTextureLoader.call( this, manager );\n\n\tthis.type = UnsignedByteType;\n\n};\n\nRGBELoader.prototype = Object.assign( Object.create( DataTextureLoader.prototype ), {\n\n\tconstructor: RGBELoader,\n\n\t// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n\tparse: function ( buffer ) {\n\n\t\tvar\n\t\t\t/* return codes for rgbe routines */\n\t\t\t//RGBE_RETURN_SUCCESS = 0,\n\t\t\tRGBE_RETURN_FAILURE = - 1,\n\n\t\t\t/* default error routine.  change this to change error handling */\n\t\t\trgbe_read_error = 1,\n\t\t\trgbe_write_error = 2,\n\t\t\trgbe_format_error = 3,\n\t\t\trgbe_memory_error = 4,\n\t\t\trgbe_error = function ( rgbe_error_code, msg ) {\n\n\t\t\t\tswitch ( rgbe_error_code ) {\n\n\t\t\t\t\tcase rgbe_read_error: console.error( 'THREE.RGBELoader Read Error: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase rgbe_write_error: console.error( 'THREE.RGBELoader Write Error: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase rgbe_format_error: console.error( 'THREE.RGBELoader Bad File Format: ' + ( msg || '' ) );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase rgbe_memory_error: console.error( 'THREE.RGBELoader: Error: ' + ( msg || '' ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn RGBE_RETURN_FAILURE;\n\n\t\t\t},\n\n\t\t\t/* offsets to red, green, and blue components in a data (float) pixel */\n\t\t\t//RGBE_DATA_RED = 0,\n\t\t\t//RGBE_DATA_GREEN = 1,\n\t\t\t//RGBE_DATA_BLUE = 2,\n\n\t\t\t/* number of floats per pixel, use 4 since stored in rgba image format */\n\t\t\t//RGBE_DATA_SIZE = 4,\n\n\t\t\t/* flags indicating which fields in an rgbe_header_info are valid */\n\t\t\tRGBE_VALID_PROGRAMTYPE = 1,\n\t\t\tRGBE_VALID_FORMAT = 2,\n\t\t\tRGBE_VALID_DIMENSIONS = 4,\n\n\t\t\tNEWLINE = '\\n',\n\n\t\t\tfgets = function ( buffer, lineLimit, consume ) {\n\n\t\t\t\tlineLimit = ! lineLimit ? 1024 : lineLimit;\n\t\t\t\tvar p = buffer.pos,\n\t\t\t\t\ti = - 1, len = 0, s = '', chunkSize = 128,\n\t\t\t\t\tchunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) )\n\t\t\t\t;\n\t\t\t\twhile ( ( 0 > ( i = chunk.indexOf( NEWLINE ) ) ) && ( len < lineLimit ) && ( p < buffer.byteLength ) ) {\n\n\t\t\t\t\ts += chunk; len += chunk.length;\n\t\t\t\t\tp += chunkSize;\n\t\t\t\t\tchunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( - 1 < i ) {\n\n\t\t\t\t\t/*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n\t\t\t\t\tif ( false !== consume ) buffer.pos += len + i + 1;\n\t\t\t\t\treturn s + chunk.slice( 0, i );\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/* minimal header reading.  modify if you want to parse more information */\n\t\t\tRGBE_ReadHeader = function ( buffer ) {\n\n\t\t\t\tvar line, match,\n\n\t\t\t\t\t// regexes to parse header info fields\n\t\t\t\t\tmagic_token_re = /^#\\?(\\S+)/,\n\t\t\t\t\tgamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\texposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\tformat_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n\t\t\t\t\tdimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n\n\t\t\t\t\t// RGBE format header struct\n\t\t\t\t\theader = {\n\n\t\t\t\t\t\tvalid: 0, /* indicate which fields are valid */\n\n\t\t\t\t\t\tstring: '', /* the actual header string */\n\n\t\t\t\t\t\tcomments: '', /* comments found in header */\n\n\t\t\t\t\t\tprogramtype: 'RGBE', /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */\n\n\t\t\t\t\t\tformat: '', /* RGBE format, default 32-bit_rle_rgbe */\n\n\t\t\t\t\t\tgamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */\n\n\t\t\t\t\t\texposure: 1.0, /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */\n\n\t\t\t\t\t\twidth: 0, height: 0 /* image dimensions, width/height */\n\n\t\t\t\t\t};\n\n\t\t\t\tif ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_read_error, 'no header found' );\n\n\t\t\t\t}\n\n\t\t\t\t/* if you want to require the magic token then uncomment the next line */\n\t\t\t\tif ( ! ( match = line.match( magic_token_re ) ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad initial token' );\n\n\t\t\t\t}\n\n\t\t\t\theader.valid |= RGBE_VALID_PROGRAMTYPE;\n\t\t\t\theader.programtype = match[ 1 ];\n\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tline = fgets( buffer );\n\t\t\t\t\tif ( false === line ) break;\n\t\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\t\tif ( '#' === line.charAt( 0 ) ) {\n\n\t\t\t\t\t\theader.comments += line + '\\n';\n\t\t\t\t\t\tcontinue; // comment line\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( gamma_re ) ) {\n\n\t\t\t\t\t\theader.gamma = parseFloat( match[ 1 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( exposure_re ) ) {\n\n\t\t\t\t\t\theader.exposure = parseFloat( match[ 1 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( format_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_FORMAT;\n\t\t\t\t\t\theader.format = match[ 1 ];//'32-bit_rle_rgbe';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( dimensions_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_DIMENSIONS;\n\t\t\t\t\t\theader.height = parseInt( match[ 1 ], 10 );\n\t\t\t\t\t\theader.width = parseInt( match[ 2 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( header.valid & RGBE_VALID_FORMAT ) && ( header.valid & RGBE_VALID_DIMENSIONS ) ) break;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'missing format specifier' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'missing image size specifier' );\n\n\t\t\t\t}\n\n\t\t\t\treturn header;\n\n\t\t\t},\n\n\t\t\tRGBE_ReadPixels_RLE = function ( buffer, w, h ) {\n\n\t\t\t\tvar data_rgba, offset, pos, count, byteValue,\n\t\t\t\t\tscanline_buffer, ptr, ptr_end, i, l, off, isEncodedRun,\n\t\t\t\t\tscanline_width = w, num_scanlines = h, rgbeStart\n\t\t\t\t;\n\n\t\t\t\tif (\n\t\t\t\t\t// run length encoding is not allowed so read flat\n\t\t\t\t\t( ( scanline_width < 8 ) || ( scanline_width > 0x7fff ) ) ||\n\t\t\t\t\t// this file is not run length encoded\n\t\t\t\t\t( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] & 0x80 ) )\n\t\t\t\t) {\n\n\t\t\t\t\t// return the flat buffer\n\t\t\t\t\treturn new Uint8Array( buffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'wrong scanline width' );\n\n\t\t\t\t}\n\n\t\t\t\tdata_rgba = new Uint8Array( 4 * w * h );\n\n\t\t\t\tif ( ! data_rgba.length ) {\n\n\t\t\t\t\treturn rgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );\n\n\t\t\t\t}\n\n\t\t\t\toffset = 0; pos = 0; ptr_end = 4 * scanline_width;\n\t\t\t\trgbeStart = new Uint8Array( 4 );\n\t\t\t\tscanline_buffer = new Uint8Array( ptr_end );\n\n\t\t\t\t// read in each successive scanline\n\t\t\t\twhile ( ( num_scanlines > 0 ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\tif ( pos + 4 > buffer.byteLength ) {\n\n\t\t\t\t\t\treturn rgbe_error( rgbe_read_error );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trgbeStart[ 0 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 1 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 2 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 3 ] = buffer[ pos ++ ];\n\n\t\t\t\t\tif ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {\n\n\t\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad rgbe scanline format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// read each of the four channels for the scanline into the buffer\n\t\t\t\t\t// first red, then green, then blue, then exponent\n\t\t\t\t\tptr = 0;\n\t\t\t\t\twhile ( ( ptr < ptr_end ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\t\tcount = buffer[ pos ++ ];\n\t\t\t\t\t\tisEncodedRun = count > 128;\n\t\t\t\t\t\tif ( isEncodedRun ) count -= 128;\n\n\t\t\t\t\t\tif ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {\n\n\t\t\t\t\t\t\treturn rgbe_error( rgbe_format_error, 'bad scanline data' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isEncodedRun ) {\n\n\t\t\t\t\t\t\t// a (encoded) run of the same value\n\t\t\t\t\t\t\tbyteValue = buffer[ pos ++ ];\n\t\t\t\t\t\t\tfor ( i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\tscanline_buffer[ ptr ++ ] = byteValue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//ptr += count;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// a literal-run\n\t\t\t\t\t\t\tscanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );\n\t\t\t\t\t\t\tptr += count; pos += count;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// now convert data from buffer into rgba\n\t\t\t\t\t// first red, then green, then blue, then exponent (alpha)\n\t\t\t\t\tl = scanline_width; //scanline_buffer.byteLength;\n\t\t\t\t\tfor ( i = 0; i < l; i ++ ) {\n\n\t\t\t\t\t\toff = 0;\n\t\t\t\t\t\tdata_rgba[ offset ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 1 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 2 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 3 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnum_scanlines --;\n\n\t\t\t\t}\n\n\t\t\t\treturn data_rgba;\n\n\t\t\t};\n\n\t\tvar RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tvar e = sourceArray[ sourceOffset + 3 ];\n\t\t\tvar scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;\n\t\t\tdestArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;\n\t\t\tdestArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;\n\n\t\t};\n\n\t\tvar RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tvar e = sourceArray[ sourceOffset + 3 ];\n\t\t\tvar scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = DataUtils.toHalfFloat( sourceArray[ sourceOffset + 0 ] * scale );\n\t\t\tdestArray[ destOffset + 1 ] = DataUtils.toHalfFloat( sourceArray[ sourceOffset + 1 ] * scale );\n\t\t\tdestArray[ destOffset + 2 ] = DataUtils.toHalfFloat( sourceArray[ sourceOffset + 2 ] * scale );\n\n\t\t};\n\n\t\tvar byteArray = new Uint8Array( buffer );\n\t\tbyteArray.pos = 0;\n\t\tvar rgbe_header_info = RGBE_ReadHeader( byteArray );\n\n\t\tif ( RGBE_RETURN_FAILURE !== rgbe_header_info ) {\n\n\t\t\tvar w = rgbe_header_info.width,\n\t\t\t\th = rgbe_header_info.height,\n\t\t\t\timage_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );\n\n\t\t\tif ( RGBE_RETURN_FAILURE !== image_rgba_data ) {\n\n\t\t\t\tswitch ( this.type ) {\n\n\t\t\t\t\tcase UnsignedByteType:\n\n\t\t\t\t\t\tvar data = image_rgba_data;\n\t\t\t\t\t\tvar format = RGBEFormat; // handled as THREE.RGBAFormat in shaders\n\t\t\t\t\t\tvar type = UnsignedByteType;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase FloatType:\n\n\t\t\t\t\t\tvar numElements = ( image_rgba_data.length / 4 ) * 3;\n\t\t\t\t\t\tvar floatArray = new Float32Array( numElements );\n\n\t\t\t\t\t\tfor ( var j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\t\t\tRGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar data = floatArray;\n\t\t\t\t\t\tvar format = RGBFormat;\n\t\t\t\t\t\tvar type = FloatType;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\t\tvar numElements = ( image_rgba_data.length / 4 ) * 3;\n\t\t\t\t\t\tvar halfArray = new Uint16Array( numElements );\n\n\t\t\t\t\t\tfor ( var j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\t\t\tRGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar data = halfArray;\n\t\t\t\t\t\tvar format = RGBFormat;\n\t\t\t\t\t\tvar type = HalfFloatType;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.error( 'THREE.RGBELoader: unsupported type: ', this.type );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\twidth: w, height: h,\n\t\t\t\t\tdata: data,\n\t\t\t\t\theader: rgbe_header_info.string,\n\t\t\t\t\tgamma: rgbe_header_info.gamma,\n\t\t\t\t\texposure: rgbe_header_info.exposure,\n\t\t\t\t\tformat: format,\n\t\t\t\t\ttype: type\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t},\n\n\tsetDataType: function ( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase UnsignedByteType:\n\n\t\t\t\t\ttexture.encoding = RGBEEncoding;\n\t\t\t\t\ttexture.minFilter = NearestFilter;\n\t\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FloatType:\n\n\t\t\t\t\ttexture.encoding = LinearEncoding;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.encoding = LinearEncoding;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn DataTextureLoader.prototype.load.call( this, url, onLoadCallback, onProgress, onError );\n\n\t}\n\n} );\n\nexport { RGBELoader };\n"
  },
  {
    "path": "libs/three.js/loaders/STLLoader.js",
    "content": "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils,\n\tVector3\n} from '../../../build/three.module.js';\n\n/**\n * Description: A THREE loader for STL ASCII files, as created by Solidworks and other CAD programs.\n *\n * Supports both binary and ASCII encoded files, with automatic detection of type.\n *\n * The loader returns a non-indexed buffer geometry.\n *\n * Limitations:\n *  Binary decoding supports \"Magics\" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).\n *  There is perhaps some question as to how valid it is to always assume little-endian-ness.\n *  ASCII decoding assumes file is UTF-8.\n *\n * Usage:\n *  var loader = new STLLoader();\n *  loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {\n *    scene.add( new THREE.Mesh( geometry ) );\n *  });\n *\n * For binary STLs geometry might contain colors for vertices. To use it:\n *  // use the same code to load STL as above\n *  if (geometry.hasColors) {\n *    material = new THREE.MeshPhongMaterial({ opacity: geometry.alpha, vertexColors: true });\n *  } else { .... }\n *  var mesh = new THREE.Mesh( geometry, material );\n *\n * For ASCII STLs containing multiple solids, each solid is assigned to a different group.\n * Groups can be used to assign a different color by defining an array of materials with the same length of\n * geometry.groups and passing it to the Mesh constructor:\n *\n * var mesh = new THREE.Mesh( geometry, material );\n *\n * For example:\n *\n *  var materials = [];\n *  var nGeometryGroups = geometry.groups.length;\n *\n *  var colorMap = ...; // Some logic to index colors.\n *\n *  for (var i = 0; i < nGeometryGroups; i++) {\n *\n *\t\tvar material = new THREE.MeshPhongMaterial({\n *\t\t\tcolor: colorMap[i],\n *\t\t\twireframe: false\n *\t\t});\n *\n *  }\n *\n *  materials.push(material);\n *  var mesh = new THREE.Mesh(geometry, materials);\n */\n\n\nvar STLLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nSTLLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: STLLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\tfunction isBinary( data ) {\n\n\t\t\tvar expect, face_size, n_faces, reader;\n\t\t\treader = new DataView( data );\n\t\t\tface_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );\n\t\t\tn_faces = reader.getUint32( 80, true );\n\t\t\texpect = 80 + ( 32 / 8 ) + ( n_faces * face_size );\n\n\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// An ASCII STL data must begin with 'solid ' as the first six bytes.\n\t\t\t// However, ASCII STLs lacking the SPACE after the 'd' are known to be\n\t\t\t// plentiful.  So, check the first 5 bytes for 'solid'.\n\n\t\t\t// Several encodings, such as UTF-8, precede the text with up to 5 bytes:\n\t\t\t// https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding\n\t\t\t// Search for \"solid\" to start anywhere after those prefixes.\n\n\t\t\t// US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'\n\n\t\t\tvar solid = [ 115, 111, 108, 105, 100 ];\n\n\t\t\tfor ( var off = 0; off < 5; off ++ ) {\n\n\t\t\t\t// If \"solid\" text is matched to the current offset, declare it to be an ASCII STL.\n\n\t\t\t\tif ( matchDataViewAt( solid, reader, off ) ) return false;\n\n\t\t\t}\n\n\t\t\t// Couldn't find \"solid\" text at the beginning; it is binary STL.\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction matchDataViewAt( query, reader, offset ) {\n\n\t\t\t// Check if each byte in query matches the corresponding byte from the current offset\n\n\t\t\tfor ( var i = 0, il = query.length; i < il; i ++ ) {\n\n\t\t\t\tif ( query[ i ] !== reader.getUint8( offset + i, false ) ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tvar reader = new DataView( data );\n\t\t\tvar faces = reader.getUint32( 80, true );\n\n\t\t\tvar r, g, b, hasColors = false, colors;\n\t\t\tvar defaultR, defaultG, defaultB, alpha;\n\n\t\t\t// process STL header\n\t\t\t// check for default color in header (\"COLOR=rgba\" sequence).\n\n\t\t\tfor ( var index = 0; index < 80 - 10; index ++ ) {\n\n\t\t\t\tif ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&\n\t\t\t\t\t( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {\n\n\t\t\t\t\thasColors = true;\n\t\t\t\t\tcolors = new Float32Array( faces * 3 * 3 );\n\n\t\t\t\t\tdefaultR = reader.getUint8( index + 6 ) / 255;\n\t\t\t\t\tdefaultG = reader.getUint8( index + 7 ) / 255;\n\t\t\t\t\tdefaultB = reader.getUint8( index + 8 ) / 255;\n\t\t\t\t\talpha = reader.getUint8( index + 9 ) / 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar dataOffset = 84;\n\t\t\tvar faceLength = 12 * 4 + 2;\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\tvar vertices = new Float32Array( faces * 3 * 3 );\n\t\t\tvar normals = new Float32Array( faces * 3 * 3 );\n\n\t\t\tfor ( var face = 0; face < faces; face ++ ) {\n\n\t\t\t\tvar start = dataOffset + face * faceLength;\n\t\t\t\tvar normalX = reader.getFloat32( start, true );\n\t\t\t\tvar normalY = reader.getFloat32( start + 4, true );\n\t\t\t\tvar normalZ = reader.getFloat32( start + 8, true );\n\n\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\tvar packedColor = reader.getUint16( start + 48, true );\n\n\t\t\t\t\tif ( ( packedColor & 0x8000 ) === 0 ) {\n\n\t\t\t\t\t\t// facet has its own unique color\n\n\t\t\t\t\t\tr = ( packedColor & 0x1F ) / 31;\n\t\t\t\t\t\tg = ( ( packedColor >> 5 ) & 0x1F ) / 31;\n\t\t\t\t\t\tb = ( ( packedColor >> 10 ) & 0x1F ) / 31;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tr = defaultR;\n\t\t\t\t\t\tg = defaultG;\n\t\t\t\t\t\tb = defaultB;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 1; i <= 3; i ++ ) {\n\n\t\t\t\t\tvar vertexstart = start + i * 12;\n\t\t\t\t\tvar componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );\n\n\t\t\t\t\tvertices[ componentIdx ] = reader.getFloat32( vertexstart, true );\n\t\t\t\t\tvertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );\n\t\t\t\t\tvertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );\n\n\t\t\t\t\tnormals[ componentIdx ] = normalX;\n\t\t\t\t\tnormals[ componentIdx + 1 ] = normalY;\n\t\t\t\t\tnormals[ componentIdx + 2 ] = normalZ;\n\n\t\t\t\t\tif ( hasColors ) {\n\n\t\t\t\t\t\tcolors[ componentIdx ] = r;\n\t\t\t\t\t\tcolors[ componentIdx + 1 ] = g;\n\t\t\t\t\t\tcolors[ componentIdx + 2 ] = b;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\tif ( hasColors ) {\n\n\t\t\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\t\t\t\tgeometry.hasColors = true;\n\t\t\t\tgeometry.alpha = alpha;\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tvar patternSolid = /solid([\\s\\S]*?)endsolid/g;\n\t\t\tvar patternFace = /facet([\\s\\S]*?)endfacet/g;\n\t\t\tvar faceCounter = 0;\n\n\t\t\tvar patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n\t\t\tvar patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );\n\t\t\tvar patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );\n\n\t\t\tvar vertices = [];\n\t\t\tvar normals = [];\n\n\t\t\tvar normal = new Vector3();\n\n\t\t\tvar result;\n\n\t\t\tvar groupCount = 0;\n\t\t\tvar startVertex = 0;\n\t\t\tvar endVertex = 0;\n\n\t\t\twhile ( ( result = patternSolid.exec( data ) ) !== null ) {\n\n\t\t\t\tstartVertex = endVertex;\n\n\t\t\t\tvar solid = result[ 0 ];\n\n\t\t\t\twhile ( ( result = patternFace.exec( solid ) ) !== null ) {\n\n\t\t\t\t\tvar vertexCountPerFace = 0;\n\t\t\t\t\tvar normalCountPerFace = 0;\n\n\t\t\t\t\tvar text = result[ 0 ];\n\n\t\t\t\t\twhile ( ( result = patternNormal.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tnormal.x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tnormal.y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tnormal.z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tnormalCountPerFace ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\twhile ( ( result = patternVertex.exec( text ) ) !== null ) {\n\n\t\t\t\t\t\tvertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );\n\t\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\t\t\t\t\t\tvertexCountPerFace ++;\n\t\t\t\t\t\tendVertex ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// every face have to own ONE valid normal\n\n\t\t\t\t\tif ( normalCountPerFace !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the normal of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// each face have to own THREE valid vertices\n\n\t\t\t\t\tif ( vertexCountPerFace !== 3 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.STLLoader: Something isn\\'t right with the vertices of face number ' + faceCounter );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCounter ++;\n\n\t\t\t\t}\n\n\t\t\t\tvar start = startVertex;\n\t\t\t\tvar count = endVertex - startVertex;\n\n\t\t\t\tgeometry.addGroup( start, count, groupCount );\n\t\t\t\tgroupCount ++;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction ensureString( buffer ) {\n\n\t\t\tif ( typeof buffer !== 'string' ) {\n\n\t\t\t\treturn LoaderUtils.decodeText( new Uint8Array( buffer ) );\n\n\t\t\t}\n\n\t\t\treturn buffer;\n\n\t\t}\n\n\t\tfunction ensureBinary( buffer ) {\n\n\t\t\tif ( typeof buffer === 'string' ) {\n\n\t\t\t\tvar array_buffer = new Uint8Array( buffer.length );\n\t\t\t\tfor ( var i = 0; i < buffer.length; i ++ ) {\n\n\t\t\t\t\tarray_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian\n\n\t\t\t\t}\n\n\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t} else {\n\n\t\t\t\treturn buffer;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// start\n\n\t\tvar binData = ensureBinary( data );\n\n\t\treturn isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );\n\n\t}\n\n} );\n\nexport { STLLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/SVGLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tMatrix3,\n\tPath,\n\tShapePath,\n\tVector2,\n\tVector3\n} from '../../../build/three.module.js';\n\nvar SVGLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\t// Default dots per inch\n\tthis.defaultDPI = 90;\n\n\t// Accepted units: 'mm', 'cm', 'in', 'pt', 'pc', 'px'\n\tthis.defaultUnit = 'px';\n\n};\n\nSVGLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: SVGLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( text ) {\n\n\t\tvar scope = this;\n\n\t\tfunction parseNode( node, style ) {\n\n\t\t\tif ( node.nodeType !== 1 ) return;\n\n\t\t\tvar transform = getNodeTransform( node );\n\n\t\t\tvar traverseChildNodes = true;\n\n\t\t\tvar path = null;\n\n\t\t\tswitch ( node.nodeName ) {\n\n\t\t\t\tcase 'svg':\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'style':\n\t\t\t\t\tparseCSSStylesheet( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'g':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'path':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tif ( node.hasAttribute( 'd' ) ) path = parsePathNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rect':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseRectNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'polygon':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parsePolygonNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'polyline':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parsePolylineNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'circle':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseCircleNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ellipse':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseEllipseNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'line':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tpath = parseLineNode( node );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'defs':\n\t\t\t\t\ttraverseChildNodes = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'use':\n\t\t\t\t\tstyle = parseStyle( node, style );\n\t\t\t\t\tvar usedNodeId = node.href.baseVal.substring( 1 );\n\t\t\t\t\tvar usedNode = node.viewportElement.getElementById( usedNodeId );\n\t\t\t\t\tif ( usedNode ) {\n\n\t\t\t\t\t\tparseNode( usedNode, style );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'SVGLoader: \\'use node\\' references non-existent node id: ' + usedNodeId );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t// console.log( node );\n\n\t\t\t}\n\n\t\t\tif ( path ) {\n\n\t\t\t\tif ( style.fill !== undefined && style.fill !== 'none' ) {\n\n\t\t\t\t\tpath.color.setStyle( style.fill );\n\n\t\t\t\t}\n\n\t\t\t\ttransformPath( path, currentTransform );\n\n\t\t\t\tpaths.push( path );\n\n\t\t\t\tpath.userData = { node: node, style: style };\n\n\t\t\t}\n\n\t\t\tif ( traverseChildNodes ) {\n\n\t\t\t\tvar nodes = node.childNodes;\n\n\t\t\t\tfor ( var i = 0; i < nodes.length; i ++ ) {\n\n\t\t\t\t\tparseNode( nodes[ i ], style );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( transform ) {\n\n\t\t\t\ttransformStack.pop();\n\n\t\t\t\tif ( transformStack.length > 0 ) {\n\n\t\t\t\t\tcurrentTransform.copy( transformStack[ transformStack.length - 1 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentTransform.identity();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parsePathNode( node ) {\n\n\t\t\tvar path = new ShapePath();\n\n\t\t\tvar point = new Vector2();\n\t\t\tvar control = new Vector2();\n\n\t\t\tvar firstPoint = new Vector2();\n\t\t\tvar isFirstPoint = true;\n\t\t\tvar doSetFirstPoint = false;\n\n\t\t\tvar d = node.getAttribute( 'd' );\n\n\t\t\t// console.log( d );\n\n\t\t\tvar commands = d.match( /[a-df-z][^a-df-z]*/ig );\n\n\t\t\tfor ( var i = 0, l = commands.length; i < l; i ++ ) {\n\n\t\t\t\tvar command = commands[ i ];\n\n\t\t\t\tvar type = command.charAt( 0 );\n\t\t\t\tvar data = command.substr( 1 ).trim();\n\n\t\t\t\tif ( isFirstPoint === true ) {\n\n\t\t\t\t\tdoSetFirstPoint = true;\n\t\t\t\t\tisFirstPoint = false;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'M':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 2 ) {\n\n\t\t\t\t\t\t\tpoint.x = numbers[ j + 0 ];\n\t\t\t\t\t\t\tpoint.y = numbers[ j + 1 ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\n\t\t\t\t\t\t\tif ( j === 0 ) {\n\n\t\t\t\t\t\t\t\tpath.moveTo( point.x, point.y );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tpath.lineTo( point.x, point.y );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'H':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tpoint.x = numbers[ j ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\t\t\t\t\t\t\tpath.lineTo( point.x, point.y );\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'V':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tpoint.y = numbers[ j ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\t\t\t\t\t\t\tpath.lineTo( point.x, point.y );\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'L':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 2 ) {\n\n\t\t\t\t\t\t\tpoint.x = numbers[ j + 0 ];\n\t\t\t\t\t\t\tpoint.y = numbers[ j + 1 ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\t\t\t\t\t\t\tpath.lineTo( point.x, point.y );\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'C':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 6 ) {\n\n\t\t\t\t\t\t\tpath.bezierCurveTo(\n\t\t\t\t\t\t\t\tnumbers[ j + 0 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 1 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 2 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 3 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 4 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 5 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontrol.x = numbers[ j + 2 ];\n\t\t\t\t\t\t\tcontrol.y = numbers[ j + 3 ];\n\t\t\t\t\t\t\tpoint.x = numbers[ j + 4 ];\n\t\t\t\t\t\t\tpoint.y = numbers[ j + 5 ];\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'S':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 4 ) {\n\n\t\t\t\t\t\t\tpath.bezierCurveTo(\n\t\t\t\t\t\t\t\tgetReflection( point.x, control.x ),\n\t\t\t\t\t\t\t\tgetReflection( point.y, control.y ),\n\t\t\t\t\t\t\t\tnumbers[ j + 0 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 1 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 2 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 3 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontrol.x = numbers[ j + 0 ];\n\t\t\t\t\t\t\tcontrol.y = numbers[ j + 1 ];\n\t\t\t\t\t\t\tpoint.x = numbers[ j + 2 ];\n\t\t\t\t\t\t\tpoint.y = numbers[ j + 3 ];\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Q':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 4 ) {\n\n\t\t\t\t\t\t\tpath.quadraticCurveTo(\n\t\t\t\t\t\t\t\tnumbers[ j + 0 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 1 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 2 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 3 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontrol.x = numbers[ j + 0 ];\n\t\t\t\t\t\t\tcontrol.y = numbers[ j + 1 ];\n\t\t\t\t\t\t\tpoint.x = numbers[ j + 2 ];\n\t\t\t\t\t\t\tpoint.y = numbers[ j + 3 ];\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'T':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 2 ) {\n\n\t\t\t\t\t\t\tvar rx = getReflection( point.x, control.x );\n\t\t\t\t\t\t\tvar ry = getReflection( point.y, control.y );\n\t\t\t\t\t\t\tpath.quadraticCurveTo(\n\t\t\t\t\t\t\t\trx,\n\t\t\t\t\t\t\t\try,\n\t\t\t\t\t\t\t\tnumbers[ j + 0 ],\n\t\t\t\t\t\t\t\tnumbers[ j + 1 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontrol.x = rx;\n\t\t\t\t\t\t\tcontrol.y = ry;\n\t\t\t\t\t\t\tpoint.x = numbers[ j + 0 ];\n\t\t\t\t\t\t\tpoint.y = numbers[ j + 1 ];\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'A':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 7 ) {\n\n\t\t\t\t\t\t\t// skip command if start point == end point\n\t\t\t\t\t\t\tif ( numbers[ j + 5 ] == point.x && numbers[ j + 6 ] == point.y ) continue;\n\n\t\t\t\t\t\t\tvar start = point.clone();\n\t\t\t\t\t\t\tpoint.x = numbers[ j + 5 ];\n\t\t\t\t\t\t\tpoint.y = numbers[ j + 6 ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\t\t\t\t\t\t\tparseArcCommand(\n\t\t\t\t\t\t\t\tpath, numbers[ j ], numbers[ j + 1 ], numbers[ j + 2 ], numbers[ j + 3 ], numbers[ j + 4 ], start, point\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 2 ) {\n\n\t\t\t\t\t\t\tpoint.x += numbers[ j + 0 ];\n\t\t\t\t\t\t\tpoint.y += numbers[ j + 1 ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\n\t\t\t\t\t\t\tif ( j === 0 ) {\n\n\t\t\t\t\t\t\t\tpath.moveTo( point.x, point.y );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tpath.lineTo( point.x, point.y );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'h':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tpoint.x += numbers[ j ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\t\t\t\t\t\t\tpath.lineTo( point.x, point.y );\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tpoint.y += numbers[ j ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\t\t\t\t\t\t\tpath.lineTo( point.x, point.y );\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'l':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 2 ) {\n\n\t\t\t\t\t\t\tpoint.x += numbers[ j + 0 ];\n\t\t\t\t\t\t\tpoint.y += numbers[ j + 1 ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\t\t\t\t\t\t\tpath.lineTo( point.x, point.y );\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 6 ) {\n\n\t\t\t\t\t\t\tpath.bezierCurveTo(\n\t\t\t\t\t\t\t\tpoint.x + numbers[ j + 0 ],\n\t\t\t\t\t\t\t\tpoint.y + numbers[ j + 1 ],\n\t\t\t\t\t\t\t\tpoint.x + numbers[ j + 2 ],\n\t\t\t\t\t\t\t\tpoint.y + numbers[ j + 3 ],\n\t\t\t\t\t\t\t\tpoint.x + numbers[ j + 4 ],\n\t\t\t\t\t\t\t\tpoint.y + numbers[ j + 5 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontrol.x = point.x + numbers[ j + 2 ];\n\t\t\t\t\t\t\tcontrol.y = point.y + numbers[ j + 3 ];\n\t\t\t\t\t\t\tpoint.x += numbers[ j + 4 ];\n\t\t\t\t\t\t\tpoint.y += numbers[ j + 5 ];\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 's':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 4 ) {\n\n\t\t\t\t\t\t\tpath.bezierCurveTo(\n\t\t\t\t\t\t\t\tgetReflection( point.x, control.x ),\n\t\t\t\t\t\t\t\tgetReflection( point.y, control.y ),\n\t\t\t\t\t\t\t\tpoint.x + numbers[ j + 0 ],\n\t\t\t\t\t\t\t\tpoint.y + numbers[ j + 1 ],\n\t\t\t\t\t\t\t\tpoint.x + numbers[ j + 2 ],\n\t\t\t\t\t\t\t\tpoint.y + numbers[ j + 3 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontrol.x = point.x + numbers[ j + 0 ];\n\t\t\t\t\t\t\tcontrol.y = point.y + numbers[ j + 1 ];\n\t\t\t\t\t\t\tpoint.x += numbers[ j + 2 ];\n\t\t\t\t\t\t\tpoint.y += numbers[ j + 3 ];\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'q':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 4 ) {\n\n\t\t\t\t\t\t\tpath.quadraticCurveTo(\n\t\t\t\t\t\t\t\tpoint.x + numbers[ j + 0 ],\n\t\t\t\t\t\t\t\tpoint.y + numbers[ j + 1 ],\n\t\t\t\t\t\t\t\tpoint.x + numbers[ j + 2 ],\n\t\t\t\t\t\t\t\tpoint.y + numbers[ j + 3 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontrol.x = point.x + numbers[ j + 0 ];\n\t\t\t\t\t\t\tcontrol.y = point.y + numbers[ j + 1 ];\n\t\t\t\t\t\t\tpoint.x += numbers[ j + 2 ];\n\t\t\t\t\t\t\tpoint.y += numbers[ j + 3 ];\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 2 ) {\n\n\t\t\t\t\t\t\tvar rx = getReflection( point.x, control.x );\n\t\t\t\t\t\t\tvar ry = getReflection( point.y, control.y );\n\t\t\t\t\t\t\tpath.quadraticCurveTo(\n\t\t\t\t\t\t\t\trx,\n\t\t\t\t\t\t\t\try,\n\t\t\t\t\t\t\t\tpoint.x + numbers[ j + 0 ],\n\t\t\t\t\t\t\t\tpoint.y + numbers[ j + 1 ]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontrol.x = rx;\n\t\t\t\t\t\t\tcontrol.y = ry;\n\t\t\t\t\t\t\tpoint.x = point.x + numbers[ j + 0 ];\n\t\t\t\t\t\t\tpoint.y = point.y + numbers[ j + 1 ];\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'a':\n\t\t\t\t\t\tvar numbers = parseFloats( data );\n\n\t\t\t\t\t\tfor ( var j = 0, jl = numbers.length; j < jl; j += 7 ) {\n\n\t\t\t\t\t\t\t// skip command if no displacement\n\t\t\t\t\t\t\tif ( numbers[ j + 5 ] == 0 && numbers[ j + 6 ] == 0 ) continue;\n\n\t\t\t\t\t\t\tvar start = point.clone();\n\t\t\t\t\t\t\tpoint.x += numbers[ j + 5 ];\n\t\t\t\t\t\t\tpoint.y += numbers[ j + 6 ];\n\t\t\t\t\t\t\tcontrol.x = point.x;\n\t\t\t\t\t\t\tcontrol.y = point.y;\n\t\t\t\t\t\t\tparseArcCommand(\n\t\t\t\t\t\t\t\tpath, numbers[ j ], numbers[ j + 1 ], numbers[ j + 2 ], numbers[ j + 3 ], numbers[ j + 4 ], start, point\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( j === 0 && doSetFirstPoint === true ) firstPoint.copy( point );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Z':\n\t\t\t\t\tcase 'z':\n\t\t\t\t\t\tpath.currentPath.autoClose = true;\n\n\t\t\t\t\t\tif ( path.currentPath.curves.length > 0 ) {\n\n\t\t\t\t\t\t\t// Reset point to beginning of Path\n\t\t\t\t\t\t\tpoint.copy( firstPoint );\n\t\t\t\t\t\t\tpath.currentPath.currentPoint.copy( point );\n\t\t\t\t\t\t\tisFirstPoint = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( command );\n\n\t\t\t\t}\n\n\t\t\t\t// console.log( type, parseFloats( data ), parseFloats( data ).length  )\n\n\t\t\t\tdoSetFirstPoint = false;\n\n\t\t\t}\n\n\t\t\treturn path;\n\n\t\t}\n\n\t\tfunction parseCSSStylesheet( node ) {\n\n\t\t\tif ( ! node.sheet || ! node.sheet.cssRules || ! node.sheet.cssRules.length ) return;\n\n\t\t\tfor ( var i = 0; i < node.sheet.cssRules.length; i ++ ) {\n\n\t\t\t\tvar stylesheet = node.sheet.cssRules[ i ];\n\n\t\t\t\tif ( stylesheet.type !== 1 ) continue;\n\n\t\t\t\tvar selectorList = stylesheet.selectorText\n\t\t\t\t\t.split( /,/gm )\n\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t.map( i => i.trim() );\n\n\t\t\t\tfor ( var j = 0; j < selectorList.length; j ++ ) {\n\n\t\t\t\t\tstylesheets[ selectorList[ j ] ] = Object.assign(\n\t\t\t\t\t\tstylesheets[ selectorList[ j ] ] || {},\n\t\t\t\t\t\tstylesheet.style\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/**\n\t\t * https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes\n\t\t * https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ Appendix: Endpoint to center arc conversion\n\t\t * From\n\t\t * rx ry x-axis-rotation large-arc-flag sweep-flag x y\n\t\t * To\n\t\t * aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation\n\t\t */\n\n\t\tfunction parseArcCommand( path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end ) {\n\n\t\t\tif ( rx == 0 || ry == 0 ) {\n\n\t\t\t\t// draw a line if either of the radii == 0\n\t\t\t\tpath.lineTo( end.x, end.y );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tx_axis_rotation = x_axis_rotation * Math.PI / 180;\n\n\t\t\t// Ensure radii are positive\n\t\t\trx = Math.abs( rx );\n\t\t\try = Math.abs( ry );\n\n\t\t\t// Compute (x1', y1')\n\t\t\tvar dx2 = ( start.x - end.x ) / 2.0;\n\t\t\tvar dy2 = ( start.y - end.y ) / 2.0;\n\t\t\tvar x1p = Math.cos( x_axis_rotation ) * dx2 + Math.sin( x_axis_rotation ) * dy2;\n\t\t\tvar y1p = - Math.sin( x_axis_rotation ) * dx2 + Math.cos( x_axis_rotation ) * dy2;\n\n\t\t\t// Compute (cx', cy')\n\t\t\tvar rxs = rx * rx;\n\t\t\tvar rys = ry * ry;\n\t\t\tvar x1ps = x1p * x1p;\n\t\t\tvar y1ps = y1p * y1p;\n\n\t\t\t// Ensure radii are large enough\n\t\t\tvar cr = x1ps / rxs + y1ps / rys;\n\n\t\t\tif ( cr > 1 ) {\n\n\t\t\t\t// scale up rx,ry equally so cr == 1\n\t\t\t\tvar s = Math.sqrt( cr );\n\t\t\t\trx = s * rx;\n\t\t\t\try = s * ry;\n\t\t\t\trxs = rx * rx;\n\t\t\t\trys = ry * ry;\n\n\t\t\t}\n\n\t\t\tvar dq = ( rxs * y1ps + rys * x1ps );\n\t\t\tvar pq = ( rxs * rys - dq ) / dq;\n\t\t\tvar q = Math.sqrt( Math.max( 0, pq ) );\n\t\t\tif ( large_arc_flag === sweep_flag ) q = - q;\n\t\t\tvar cxp = q * rx * y1p / ry;\n\t\t\tvar cyp = - q * ry * x1p / rx;\n\n\t\t\t// Step 3: Compute (cx, cy) from (cx', cy')\n\t\t\tvar cx = Math.cos( x_axis_rotation ) * cxp - Math.sin( x_axis_rotation ) * cyp + ( start.x + end.x ) / 2;\n\t\t\tvar cy = Math.sin( x_axis_rotation ) * cxp + Math.cos( x_axis_rotation ) * cyp + ( start.y + end.y ) / 2;\n\n\t\t\t// Step 4: Compute θ1 and Δθ\n\t\t\tvar theta = svgAngle( 1, 0, ( x1p - cxp ) / rx, ( y1p - cyp ) / ry );\n\t\t\tvar delta = svgAngle( ( x1p - cxp ) / rx, ( y1p - cyp ) / ry, ( - x1p - cxp ) / rx, ( - y1p - cyp ) / ry ) % ( Math.PI * 2 );\n\n\t\t\tpath.currentPath.absellipse( cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation );\n\n\t\t}\n\n\t\tfunction svgAngle( ux, uy, vx, vy ) {\n\n\t\t\tvar dot = ux * vx + uy * vy;\n\t\t\tvar len = Math.sqrt( ux * ux + uy * uy ) * Math.sqrt( vx * vx + vy * vy );\n\t\t\tvar ang = Math.acos( Math.max( - 1, Math.min( 1, dot / len ) ) ); // floating point precision, slightly over values appear\n\t\t\tif ( ( ux * vy - uy * vx ) < 0 ) ang = - ang;\n\t\t\treturn ang;\n\n\t\t}\n\n\t\t/*\n\t\t* According to https://www.w3.org/TR/SVG/shapes.html#RectElementRXAttribute\n\t\t* rounded corner should be rendered to elliptical arc, but bezier curve does the job well enough\n\t\t*/\n\t\tfunction parseRectNode( node ) {\n\n\t\t\tvar x = parseFloatWithUnits( node.getAttribute( 'x' ) || 0 );\n\t\t\tvar y = parseFloatWithUnits( node.getAttribute( 'y' ) || 0 );\n\t\t\tvar rx = parseFloatWithUnits( node.getAttribute( 'rx' ) || 0 );\n\t\t\tvar ry = parseFloatWithUnits( node.getAttribute( 'ry' ) || 0 );\n\t\t\tvar w = parseFloatWithUnits( node.getAttribute( 'width' ) );\n\t\t\tvar h = parseFloatWithUnits( node.getAttribute( 'height' ) );\n\n\t\t\tvar path = new ShapePath();\n\t\t\tpath.moveTo( x + 2 * rx, y );\n\t\t\tpath.lineTo( x + w - 2 * rx, y );\n\t\t\tif ( rx !== 0 || ry !== 0 ) path.bezierCurveTo( x + w, y, x + w, y, x + w, y + 2 * ry );\n\t\t\tpath.lineTo( x + w, y + h - 2 * ry );\n\t\t\tif ( rx !== 0 || ry !== 0 ) path.bezierCurveTo( x + w, y + h, x + w, y + h, x + w - 2 * rx, y + h );\n\t\t\tpath.lineTo( x + 2 * rx, y + h );\n\n\t\t\tif ( rx !== 0 || ry !== 0 ) {\n\n\t\t\t\tpath.bezierCurveTo( x, y + h, x, y + h, x, y + h - 2 * ry );\n\n\t\t\t}\n\n\t\t\tpath.lineTo( x, y + 2 * ry );\n\n\t\t\tif ( rx !== 0 || ry !== 0 ) {\n\n\t\t\t\tpath.bezierCurveTo( x, y, x, y, x + 2 * rx, y );\n\n\t\t\t}\n\n\t\t\treturn path;\n\n\t\t}\n\n\t\tfunction parsePolygonNode( node ) {\n\n\t\t\tfunction iterator( match, a, b ) {\n\n\t\t\t\tvar x = parseFloatWithUnits( a );\n\t\t\t\tvar y = parseFloatWithUnits( b );\n\n\t\t\t\tif ( index === 0 ) {\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t}\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\tvar regex = /(-?[\\d\\.?]+)[,|\\s](-?[\\d\\.?]+)/g;\n\n\t\t\tvar path = new ShapePath();\n\n\t\t\tvar index = 0;\n\n\t\t\tnode.getAttribute( 'points' ).replace( regex, iterator );\n\n\t\t\tpath.currentPath.autoClose = true;\n\n\t\t\treturn path;\n\n\t\t}\n\n\t\tfunction parsePolylineNode( node ) {\n\n\t\t\tfunction iterator( match, a, b ) {\n\n\t\t\t\tvar x = parseFloatWithUnits( a );\n\t\t\t\tvar y = parseFloatWithUnits( b );\n\n\t\t\t\tif ( index === 0 ) {\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t}\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\tvar regex = /(-?[\\d\\.?]+)[,|\\s](-?[\\d\\.?]+)/g;\n\n\t\t\tvar path = new ShapePath();\n\n\t\t\tvar index = 0;\n\n\t\t\tnode.getAttribute( 'points' ).replace( regex, iterator );\n\n\t\t\tpath.currentPath.autoClose = false;\n\n\t\t\treturn path;\n\n\t\t}\n\n\t\tfunction parseCircleNode( node ) {\n\n\t\t\tvar x = parseFloatWithUnits( node.getAttribute( 'cx' ) );\n\t\t\tvar y = parseFloatWithUnits( node.getAttribute( 'cy' ) );\n\t\t\tvar r = parseFloatWithUnits( node.getAttribute( 'r' ) );\n\n\t\t\tvar subpath = new Path();\n\t\t\tsubpath.absarc( x, y, r, 0, Math.PI * 2 );\n\n\t\t\tvar path = new ShapePath();\n\t\t\tpath.subPaths.push( subpath );\n\n\t\t\treturn path;\n\n\t\t}\n\n\t\tfunction parseEllipseNode( node ) {\n\n\t\t\tvar x = parseFloatWithUnits( node.getAttribute( 'cx' ) );\n\t\t\tvar y = parseFloatWithUnits( node.getAttribute( 'cy' ) );\n\t\t\tvar rx = parseFloatWithUnits( node.getAttribute( 'rx' ) );\n\t\t\tvar ry = parseFloatWithUnits( node.getAttribute( 'ry' ) );\n\n\t\t\tvar subpath = new Path();\n\t\t\tsubpath.absellipse( x, y, rx, ry, 0, Math.PI * 2 );\n\n\t\t\tvar path = new ShapePath();\n\t\t\tpath.subPaths.push( subpath );\n\n\t\t\treturn path;\n\n\t\t}\n\n\t\tfunction parseLineNode( node ) {\n\n\t\t\tvar x1 = parseFloatWithUnits( node.getAttribute( 'x1' ) );\n\t\t\tvar y1 = parseFloatWithUnits( node.getAttribute( 'y1' ) );\n\t\t\tvar x2 = parseFloatWithUnits( node.getAttribute( 'x2' ) );\n\t\t\tvar y2 = parseFloatWithUnits( node.getAttribute( 'y2' ) );\n\n\t\t\tvar path = new ShapePath();\n\t\t\tpath.moveTo( x1, y1 );\n\t\t\tpath.lineTo( x2, y2 );\n\t\t\tpath.currentPath.autoClose = false;\n\n\t\t\treturn path;\n\n\t\t}\n\n\t\t//\n\n\t\tfunction parseStyle( node, style ) {\n\n\t\t\tstyle = Object.assign( {}, style ); // clone style\n\n\t\t\tvar stylesheetStyles = {};\n\n\t\t\tif ( node.hasAttribute( 'class' ) ) {\n\n\t\t\t\tvar classSelectors = node.getAttribute( 'class' )\n\t\t\t\t\t.split( /\\s/ )\n\t\t\t\t\t.filter( Boolean )\n\t\t\t\t\t.map( i => i.trim() );\n\n\t\t\t\tfor ( var i = 0; i < classSelectors.length; i ++ ) {\n\n\t\t\t\t\tstylesheetStyles = Object.assign( stylesheetStyles, stylesheets[ '.' + classSelectors[ i ] ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( node.hasAttribute( 'id' ) ) {\n\n\t\t\t\tstylesheetStyles = Object.assign( stylesheetStyles, stylesheets[ '#' + node.getAttribute( 'id' ) ] );\n\n\t\t\t}\n\n\t\t\tfunction addStyle( svgName, jsName, adjustFunction ) {\n\n\t\t\t\tif ( adjustFunction === undefined ) adjustFunction = function copy( v ) {\n\n\t\t\t\t\tif ( v.startsWith( 'url' ) ) console.warn( 'SVGLoader: url access in attributes is not implemented.' );\n\n\t\t\t\t\treturn v;\n\n\t\t\t\t};\n\n\t\t\t\tif ( node.hasAttribute( svgName ) ) style[ jsName ] = adjustFunction( node.getAttribute( svgName ) );\n\t\t\t\tif ( stylesheetStyles[ svgName ] ) style[ jsName ] = adjustFunction( stylesheetStyles[ svgName ] );\n\t\t\t\tif ( node.style && node.style[ svgName ] !== '' ) style[ jsName ] = adjustFunction( node.style[ svgName ] );\n\n\t\t\t}\n\n\t\t\tfunction clamp( v ) {\n\n\t\t\t\treturn Math.max( 0, Math.min( 1, parseFloatWithUnits( v ) ) );\n\n\t\t\t}\n\n\t\t\tfunction positive( v ) {\n\n\t\t\t\treturn Math.max( 0, parseFloatWithUnits( v ) );\n\n\t\t\t}\n\n\t\t\taddStyle( 'fill', 'fill' );\n\t\t\taddStyle( 'fill-opacity', 'fillOpacity', clamp );\n\t\t\taddStyle( 'opacity', 'opacity', clamp );\n\t\t\taddStyle( 'stroke', 'stroke' );\n\t\t\taddStyle( 'stroke-opacity', 'strokeOpacity', clamp );\n\t\t\taddStyle( 'stroke-width', 'strokeWidth', positive );\n\t\t\taddStyle( 'stroke-linejoin', 'strokeLineJoin' );\n\t\t\taddStyle( 'stroke-linecap', 'strokeLineCap' );\n\t\t\taddStyle( 'stroke-miterlimit', 'strokeMiterLimit', positive );\n\t\t\taddStyle( 'visibility', 'visibility' );\n\n\t\t\treturn style;\n\n\t\t}\n\n\t\t// http://www.w3.org/TR/SVG11/implnote.html#PathElementImplementationNotes\n\n\t\tfunction getReflection( a, b ) {\n\n\t\t\treturn a - ( b - a );\n\n\t\t}\n\n\t\tfunction parseFloats( string ) {\n\n\t\t\tvar array = string.split( /[\\s,]+|(?=\\s?[+\\-])/ );\n\n\t\t\tfor ( var i = 0; i < array.length; i ++ ) {\n\n\t\t\t\tvar number = array[ i ];\n\n\t\t\t\t// Handle values like 48.6037.7.8\n\t\t\t\t// TODO Find a regex for this\n\n\t\t\t\tif ( number.indexOf( '.' ) !== number.lastIndexOf( '.' ) ) {\n\n\t\t\t\t\tvar split = number.split( '.' );\n\n\t\t\t\t\tfor ( var s = 2; s < split.length; s ++ ) {\n\n\t\t\t\t\t\tarray.splice( i + s - 1, 0, '0.' + split[ s ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tarray[ i ] = parseFloatWithUnits( number );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\n\t\t}\n\n\t\t// Units\n\n\t\tvar units = [ 'mm', 'cm', 'in', 'pt', 'pc', 'px' ];\n\n\t\t// Conversion: [ fromUnit ][ toUnit ] (-1 means dpi dependent)\n\t\tvar unitConversion = {\n\n\t\t\t'mm': {\n\t\t\t\t'mm': 1,\n\t\t\t\t'cm': 0.1,\n\t\t\t\t'in': 1 / 25.4,\n\t\t\t\t'pt': 72 / 25.4,\n\t\t\t\t'pc': 6 / 25.4,\n\t\t\t\t'px': - 1\n\t\t\t},\n\t\t\t'cm': {\n\t\t\t\t'mm': 10,\n\t\t\t\t'cm': 1,\n\t\t\t\t'in': 1 / 2.54,\n\t\t\t\t'pt': 72 / 2.54,\n\t\t\t\t'pc': 6 / 2.54,\n\t\t\t\t'px': - 1\n\t\t\t},\n\t\t\t'in': {\n\t\t\t\t'mm': 25.4,\n\t\t\t\t'cm': 2.54,\n\t\t\t\t'in': 1,\n\t\t\t\t'pt': 72,\n\t\t\t\t'pc': 6,\n\t\t\t\t'px': - 1\n\t\t\t},\n\t\t\t'pt': {\n\t\t\t\t'mm': 25.4 / 72,\n\t\t\t\t'cm': 2.54 / 72,\n\t\t\t\t'in': 1 / 72,\n\t\t\t\t'pt': 1,\n\t\t\t\t'pc': 6 / 72,\n\t\t\t\t'px': - 1\n\t\t\t},\n\t\t\t'pc': {\n\t\t\t\t'mm': 25.4 / 6,\n\t\t\t\t'cm': 2.54 / 6,\n\t\t\t\t'in': 1 / 6,\n\t\t\t\t'pt': 72 / 6,\n\t\t\t\t'pc': 1,\n\t\t\t\t'px': - 1\n\t\t\t},\n\t\t\t'px': {\n\t\t\t\t'px': 1\n\t\t\t}\n\n\t\t};\n\n\t\tfunction parseFloatWithUnits( string ) {\n\n\t\t\tvar theUnit = 'px';\n\n\t\t\tif ( typeof string === 'string' || string instanceof String ) {\n\n\t\t\t\tfor ( var i = 0, n = units.length; i < n; i ++ ) {\n\n\t\t\t\t\tvar u = units[ i ];\n\n\t\t\t\t\tif ( string.endsWith( u ) ) {\n\n\t\t\t\t\t\ttheUnit = u;\n\t\t\t\t\t\tstring = string.substring( 0, string.length - u.length );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar scale = undefined;\n\n\t\t\tif ( theUnit === 'px' && scope.defaultUnit !== 'px' ) {\n\n\t\t\t\t// Conversion scale from  pixels to inches, then to default units\n\n\t\t\t\tscale = unitConversion[ 'in' ][ scope.defaultUnit ] / scope.defaultDPI;\n\n\t\t\t} else {\n\n\t\t\t\tscale = unitConversion[ theUnit ][ scope.defaultUnit ];\n\n\t\t\t\tif ( scale < 0 ) {\n\n\t\t\t\t\t// Conversion scale to pixels\n\n\t\t\t\t\tscale = unitConversion[ theUnit ][ 'in' ] * scope.defaultDPI;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn scale * parseFloat( string );\n\n\t\t}\n\n\t\t// Transforms\n\n\t\tfunction getNodeTransform( node ) {\n\n\t\t\tif ( ! ( node.hasAttribute( 'transform' ) || ( node.nodeName === 'use' && ( node.hasAttribute( 'x' ) || node.hasAttribute( 'y' ) ) ) ) ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar transform = parseNodeTransform( node );\n\n\t\t\tif ( transformStack.length > 0 ) {\n\n\t\t\t\ttransform.premultiply( transformStack[ transformStack.length - 1 ] );\n\n\t\t\t}\n\n\t\t\tcurrentTransform.copy( transform );\n\t\t\ttransformStack.push( transform );\n\n\t\t\treturn transform;\n\n\t\t}\n\n\t\tfunction parseNodeTransform( node ) {\n\n\t\t\tvar transform = new Matrix3();\n\t\t\tvar currentTransform = tempTransform0;\n\n\t\t\tif ( node.nodeName === 'use' && ( node.hasAttribute( 'x' ) || node.hasAttribute( 'y' ) ) ) {\n\n\t\t\t\tvar tx = parseFloatWithUnits( node.getAttribute( 'x' ) );\n\t\t\t\tvar ty = parseFloatWithUnits( node.getAttribute( 'y' ) );\n\n\t\t\t\ttransform.translate( tx, ty );\n\n\t\t\t}\n\n\t\t\tif ( node.hasAttribute( 'transform' ) ) {\n\n\t\t\t\tvar transformsTexts = node.getAttribute( 'transform' ).split( ')' );\n\n\t\t\t\tfor ( var tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex -- ) {\n\n\t\t\t\t\tvar transformText = transformsTexts[ tIndex ].trim();\n\n\t\t\t\t\tif ( transformText === '' ) continue;\n\n\t\t\t\t\tvar openParPos = transformText.indexOf( '(' );\n\t\t\t\t\tvar closeParPos = transformText.length;\n\n\t\t\t\t\tif ( openParPos > 0 && openParPos < closeParPos ) {\n\n\t\t\t\t\t\tvar transformType = transformText.substr( 0, openParPos );\n\n\t\t\t\t\t\tvar array = parseFloats( transformText.substr( openParPos + 1, closeParPos - openParPos - 1 ) );\n\n\t\t\t\t\t\tcurrentTransform.identity();\n\n\t\t\t\t\t\tswitch ( transformType ) {\n\n\t\t\t\t\t\t\tcase 'translate':\n\n\t\t\t\t\t\t\t\tif ( array.length >= 1 ) {\n\n\t\t\t\t\t\t\t\t\tvar tx = array[ 0 ];\n\t\t\t\t\t\t\t\t\tvar ty = tx;\n\n\t\t\t\t\t\t\t\t\tif ( array.length >= 2 ) {\n\n\t\t\t\t\t\t\t\t\t\tty = array[ 1 ];\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tcurrentTransform.translate( tx, ty );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'rotate':\n\n\t\t\t\t\t\t\t\tif ( array.length >= 1 ) {\n\n\t\t\t\t\t\t\t\t\tvar angle = 0;\n\t\t\t\t\t\t\t\t\tvar cx = 0;\n\t\t\t\t\t\t\t\t\tvar cy = 0;\n\n\t\t\t\t\t\t\t\t\t// Angle\n\t\t\t\t\t\t\t\t\tangle = - array[ 0 ] * Math.PI / 180;\n\n\t\t\t\t\t\t\t\t\tif ( array.length >= 3 ) {\n\n\t\t\t\t\t\t\t\t\t\t// Center x, y\n\t\t\t\t\t\t\t\t\t\tcx = array[ 1 ];\n\t\t\t\t\t\t\t\t\t\tcy = array[ 2 ];\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Rotate around center (cx, cy)\n\t\t\t\t\t\t\t\t\ttempTransform1.identity().translate( - cx, - cy );\n\t\t\t\t\t\t\t\t\ttempTransform2.identity().rotate( angle );\n\t\t\t\t\t\t\t\t\ttempTransform3.multiplyMatrices( tempTransform2, tempTransform1 );\n\t\t\t\t\t\t\t\t\ttempTransform1.identity().translate( cx, cy );\n\t\t\t\t\t\t\t\t\tcurrentTransform.multiplyMatrices( tempTransform1, tempTransform3 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'scale':\n\n\t\t\t\t\t\t\t\tif ( array.length >= 1 ) {\n\n\t\t\t\t\t\t\t\t\tvar scaleX = array[ 0 ];\n\t\t\t\t\t\t\t\t\tvar scaleY = scaleX;\n\n\t\t\t\t\t\t\t\t\tif ( array.length >= 2 ) {\n\n\t\t\t\t\t\t\t\t\t\tscaleY = array[ 1 ];\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tcurrentTransform.scale( scaleX, scaleY );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'skewX':\n\n\t\t\t\t\t\t\t\tif ( array.length === 1 ) {\n\n\t\t\t\t\t\t\t\t\tcurrentTransform.set(\n\t\t\t\t\t\t\t\t\t\t1, Math.tan( array[ 0 ] * Math.PI / 180 ), 0,\n\t\t\t\t\t\t\t\t\t\t0, 1, 0,\n\t\t\t\t\t\t\t\t\t\t0, 0, 1\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'skewY':\n\n\t\t\t\t\t\t\t\tif ( array.length === 1 ) {\n\n\t\t\t\t\t\t\t\t\tcurrentTransform.set(\n\t\t\t\t\t\t\t\t\t\t1, 0, 0,\n\t\t\t\t\t\t\t\t\t\tMath.tan( array[ 0 ] * Math.PI / 180 ), 1, 0,\n\t\t\t\t\t\t\t\t\t\t0, 0, 1\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'matrix':\n\n\t\t\t\t\t\t\t\tif ( array.length === 6 ) {\n\n\t\t\t\t\t\t\t\t\tcurrentTransform.set(\n\t\t\t\t\t\t\t\t\t\tarray[ 0 ], array[ 2 ], array[ 4 ],\n\t\t\t\t\t\t\t\t\t\tarray[ 1 ], array[ 3 ], array[ 5 ],\n\t\t\t\t\t\t\t\t\t\t0, 0, 1\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttransform.premultiply( currentTransform );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transform;\n\n\t\t}\n\n\t\tfunction transformPath( path, m ) {\n\n\t\t\tfunction transfVec2( v2 ) {\n\n\t\t\t\ttempV3.set( v2.x, v2.y, 1 ).applyMatrix3( m );\n\n\t\t\t\tv2.set( tempV3.x, tempV3.y );\n\n\t\t\t}\n\n\t\t\tvar isRotated = isTransformRotated( m );\n\n\t\t\tvar subPaths = path.subPaths;\n\n\t\t\tfor ( var i = 0, n = subPaths.length; i < n; i ++ ) {\n\n\t\t\t\tvar subPath = subPaths[ i ];\n\t\t\t\tvar curves = subPath.curves;\n\n\t\t\t\tfor ( var j = 0; j < curves.length; j ++ ) {\n\n\t\t\t\t\tvar curve = curves[ j ];\n\n\t\t\t\t\tif ( curve.isLineCurve ) {\n\n\t\t\t\t\t\ttransfVec2( curve.v1 );\n\t\t\t\t\t\ttransfVec2( curve.v2 );\n\n\t\t\t\t\t} else if ( curve.isCubicBezierCurve ) {\n\n\t\t\t\t\t\ttransfVec2( curve.v0 );\n\t\t\t\t\t\ttransfVec2( curve.v1 );\n\t\t\t\t\t\ttransfVec2( curve.v2 );\n\t\t\t\t\t\ttransfVec2( curve.v3 );\n\n\t\t\t\t\t} else if ( curve.isQuadraticBezierCurve ) {\n\n\t\t\t\t\t\ttransfVec2( curve.v0 );\n\t\t\t\t\t\ttransfVec2( curve.v1 );\n\t\t\t\t\t\ttransfVec2( curve.v2 );\n\n\t\t\t\t\t} else if ( curve.isEllipseCurve ) {\n\n\t\t\t\t\t\tif ( isRotated ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttempV2.set( curve.aX, curve.aY );\n\t\t\t\t\t\ttransfVec2( tempV2 );\n\t\t\t\t\t\tcurve.aX = tempV2.x;\n\t\t\t\t\t\tcurve.aY = tempV2.y;\n\n\t\t\t\t\t\tcurve.xRadius *= getTransformScaleX( m );\n\t\t\t\t\t\tcurve.yRadius *= getTransformScaleY( m );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction isTransformRotated( m ) {\n\n\t\t\treturn m.elements[ 1 ] !== 0 || m.elements[ 3 ] !== 0;\n\n\t\t}\n\n\t\tfunction getTransformScaleX( m ) {\n\n\t\t\tvar te = m.elements;\n\t\t\treturn Math.sqrt( te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] );\n\n\t\t}\n\n\t\tfunction getTransformScaleY( m ) {\n\n\t\t\tvar te = m.elements;\n\t\t\treturn Math.sqrt( te[ 3 ] * te[ 3 ] + te[ 4 ] * te[ 4 ] );\n\n\t\t}\n\n\t\t//\n\n\t\tvar paths = [];\n\t\tvar stylesheets = {};\n\n\t\tvar transformStack = [];\n\n\t\tvar tempTransform0 = new Matrix3();\n\t\tvar tempTransform1 = new Matrix3();\n\t\tvar tempTransform2 = new Matrix3();\n\t\tvar tempTransform3 = new Matrix3();\n\t\tvar tempV2 = new Vector2();\n\t\tvar tempV3 = new Vector3();\n\n\t\tvar currentTransform = new Matrix3();\n\n\t\tvar xml = new DOMParser().parseFromString( text, 'image/svg+xml' ); // application/xml\n\n\t\tparseNode( xml.documentElement, {\n\t\t\tfill: '#000',\n\t\t\tfillOpacity: 1,\n\t\t\tstrokeOpacity: 1,\n\t\t\tstrokeWidth: 1,\n\t\t\tstrokeLineJoin: 'miter',\n\t\t\tstrokeLineCap: 'butt',\n\t\t\tstrokeMiterLimit: 4\n\t\t} );\n\n\t\tvar data = { paths: paths, xml: xml.documentElement };\n\n\t\t// console.log( paths );\n\t\treturn data;\n\n\t}\n\n} );\n\nSVGLoader.getStrokeStyle = function ( width, color, lineJoin, lineCap, miterLimit ) {\n\n\t// Param width: Stroke width\n\t// Param color: As returned by THREE.Color.getStyle()\n\t// Param lineJoin: One of \"round\", \"bevel\", \"miter\" or \"miter-limit\"\n\t// Param lineCap: One of \"round\", \"square\" or \"butt\"\n\t// Param miterLimit: Maximum join length, in multiples of the \"width\" parameter (join is truncated if it exceeds that distance)\n\t// Returns style object\n\n\twidth = width !== undefined ? width : 1;\n\tcolor = color !== undefined ? color : '#000';\n\tlineJoin = lineJoin !== undefined ? lineJoin : 'miter';\n\tlineCap = lineCap !== undefined ? lineCap : 'butt';\n\tmiterLimit = miterLimit !== undefined ? miterLimit : 4;\n\n\treturn {\n\t\tstrokeColor: color,\n\t\tstrokeWidth: width,\n\t\tstrokeLineJoin: lineJoin,\n\t\tstrokeLineCap: lineCap,\n\t\tstrokeMiterLimit: miterLimit\n\t};\n\n};\n\nSVGLoader.pointsToStroke = function ( points, style, arcDivisions, minDistance ) {\n\n\t// Generates a stroke with some witdh around the given path.\n\t// The path can be open or closed (last point equals to first point)\n\t// Param points: Array of Vector2D (the path). Minimum 2 points.\n\t// Param style: Object with SVG properties as returned by SVGLoader.getStrokeStyle(), or SVGLoader.parse() in the path.userData.style object\n\t// Params arcDivisions: Arc divisions for round joins and endcaps. (Optional)\n\t// Param minDistance: Points closer to this distance will be merged. (Optional)\n\t// Returns BufferGeometry with stroke triangles (In plane z = 0). UV coordinates are generated ('u' along path. 'v' across it, from left to right)\n\n\tvar vertices = [];\n\tvar normals = [];\n\tvar uvs = [];\n\n\tif ( SVGLoader.pointsToStrokeWithBuffers( points, style, arcDivisions, minDistance, vertices, normals, uvs ) === 0 ) {\n\n\t\treturn null;\n\n\t}\n\n\tvar geometry = new BufferGeometry();\n\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\treturn geometry;\n\n};\n\nSVGLoader.pointsToStrokeWithBuffers = function () {\n\n\tvar tempV2_1 = new Vector2();\n\tvar tempV2_2 = new Vector2();\n\tvar tempV2_3 = new Vector2();\n\tvar tempV2_4 = new Vector2();\n\tvar tempV2_5 = new Vector2();\n\tvar tempV2_6 = new Vector2();\n\tvar tempV2_7 = new Vector2();\n\tvar lastPointL = new Vector2();\n\tvar lastPointR = new Vector2();\n\tvar point0L = new Vector2();\n\tvar point0R = new Vector2();\n\tvar currentPointL = new Vector2();\n\tvar currentPointR = new Vector2();\n\tvar nextPointL = new Vector2();\n\tvar nextPointR = new Vector2();\n\tvar innerPoint = new Vector2();\n\tvar outerPoint = new Vector2();\n\n\treturn function ( points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset ) {\n\n\t\t// This function can be called to update existing arrays or buffers.\n\t\t// Accepts same parameters as pointsToStroke, plus the buffers and optional offset.\n\t\t// Param vertexOffset: Offset vertices to start writing in the buffers (3 elements/vertex for vertices and normals, and 2 elements/vertex for uvs)\n\t\t// Returns number of written vertices / normals / uvs pairs\n\t\t// if 'vertices' parameter is undefined no triangles will be generated, but the returned vertices count will still be valid (useful to preallocate the buffers)\n\t\t// 'normals' and 'uvs' buffers are optional\n\n\t\tarcDivisions = arcDivisions !== undefined ? arcDivisions : 12;\n\t\tminDistance = minDistance !== undefined ? minDistance : 0.001;\n\t\tvertexOffset = vertexOffset !== undefined ? vertexOffset : 0;\n\n\t\t// First ensure there are no duplicated points\n\t\tpoints = removeDuplicatedPoints( points );\n\n\t\tvar numPoints = points.length;\n\n\t\tif ( numPoints < 2 ) return 0;\n\n\t\tvar isClosed = points[ 0 ].equals( points[ numPoints - 1 ] );\n\n\t\tvar currentPoint;\n\t\tvar previousPoint = points[ 0 ];\n\t\tvar nextPoint;\n\n\t\tvar strokeWidth2 = style.strokeWidth / 2;\n\n\t\tvar deltaU = 1 / ( numPoints - 1 );\n\t\tvar u0 = 0;\n\n\t\tvar innerSideModified;\n\t\tvar joinIsOnLeftSide;\n\t\tvar isMiter;\n\t\tvar initialJoinIsOnLeftSide = false;\n\n\t\tvar numVertices = 0;\n\t\tvar currentCoordinate = vertexOffset * 3;\n\t\tvar currentCoordinateUV = vertexOffset * 2;\n\n\t\t// Get initial left and right stroke points\n\t\tgetNormal( points[ 0 ], points[ 1 ], tempV2_1 ).multiplyScalar( strokeWidth2 );\n\t\tlastPointL.copy( points[ 0 ] ).sub( tempV2_1 );\n\t\tlastPointR.copy( points[ 0 ] ).add( tempV2_1 );\n\t\tpoint0L.copy( lastPointL );\n\t\tpoint0R.copy( lastPointR );\n\n\t\tfor ( var iPoint = 1; iPoint < numPoints; iPoint ++ ) {\n\n\t\t\tcurrentPoint = points[ iPoint ];\n\n\t\t\t// Get next point\n\t\t\tif ( iPoint === numPoints - 1 ) {\n\n\t\t\t\tif ( isClosed ) {\n\n\t\t\t\t\t// Skip duplicated initial point\n\t\t\t\t\tnextPoint = points[ 1 ];\n\n\t\t\t\t} else nextPoint = undefined;\n\n\t\t\t} else {\n\n\t\t\t\tnextPoint = points[ iPoint + 1 ];\n\n\t\t\t}\n\n\t\t\t// Normal of previous segment in tempV2_1\n\t\t\tvar normal1 = tempV2_1;\n\t\t\tgetNormal( previousPoint, currentPoint, normal1 );\n\n\t\t\ttempV2_3.copy( normal1 ).multiplyScalar( strokeWidth2 );\n\t\t\tcurrentPointL.copy( currentPoint ).sub( tempV2_3 );\n\t\t\tcurrentPointR.copy( currentPoint ).add( tempV2_3 );\n\n\t\t\tvar u1 = u0 + deltaU;\n\n\t\t\tinnerSideModified = false;\n\n\t\t\tif ( nextPoint !== undefined ) {\n\n\t\t\t\t// Normal of next segment in tempV2_2\n\t\t\t\tgetNormal( currentPoint, nextPoint, tempV2_2 );\n\n\t\t\t\ttempV2_3.copy( tempV2_2 ).multiplyScalar( strokeWidth2 );\n\t\t\t\tnextPointL.copy( currentPoint ).sub( tempV2_3 );\n\t\t\t\tnextPointR.copy( currentPoint ).add( tempV2_3 );\n\n\t\t\t\tjoinIsOnLeftSide = true;\n\t\t\t\ttempV2_3.subVectors( nextPoint, previousPoint );\n\t\t\t\tif ( normal1.dot( tempV2_3 ) < 0 ) {\n\n\t\t\t\t\tjoinIsOnLeftSide = false;\n\n\t\t\t\t}\n\n\t\t\t\tif ( iPoint === 1 ) initialJoinIsOnLeftSide = joinIsOnLeftSide;\n\n\t\t\t\ttempV2_3.subVectors( nextPoint, currentPoint );\n\t\t\t\ttempV2_3.normalize();\n\t\t\t\tvar dot = Math.abs( normal1.dot( tempV2_3 ) );\n\n\t\t\t\t// If path is straight, don't create join\n\t\t\t\tif ( dot !== 0 ) {\n\n\t\t\t\t\t// Compute inner and outer segment intersections\n\t\t\t\t\tvar miterSide = strokeWidth2 / dot;\n\t\t\t\t\ttempV2_3.multiplyScalar( - miterSide );\n\t\t\t\t\ttempV2_4.subVectors( currentPoint, previousPoint );\n\t\t\t\t\ttempV2_5.copy( tempV2_4 ).setLength( miterSide ).add( tempV2_3 );\n\t\t\t\t\tinnerPoint.copy( tempV2_5 ).negate();\n\t\t\t\t\tvar miterLength2 = tempV2_5.length();\n\t\t\t\t\tvar segmentLengthPrev = tempV2_4.length();\n\t\t\t\t\ttempV2_4.divideScalar( segmentLengthPrev );\n\t\t\t\t\ttempV2_6.subVectors( nextPoint, currentPoint );\n\t\t\t\t\tvar segmentLengthNext = tempV2_6.length();\n\t\t\t\t\ttempV2_6.divideScalar( segmentLengthNext );\n\t\t\t\t\t// Check that previous and next segments doesn't overlap with the innerPoint of intersection\n\t\t\t\t\tif ( tempV2_4.dot( innerPoint ) < segmentLengthPrev && tempV2_6.dot( innerPoint ) < segmentLengthNext ) {\n\n\t\t\t\t\t\tinnerSideModified = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\touterPoint.copy( tempV2_5 ).add( currentPoint );\n\t\t\t\t\tinnerPoint.add( currentPoint );\n\n\t\t\t\t\tisMiter = false;\n\n\t\t\t\t\tif ( innerSideModified ) {\n\n\t\t\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t\t\tnextPointR.copy( innerPoint );\n\t\t\t\t\t\t\tcurrentPointR.copy( innerPoint );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tnextPointL.copy( innerPoint );\n\t\t\t\t\t\t\tcurrentPointL.copy( innerPoint );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// The segment triangles are generated here if there was overlapping\n\n\t\t\t\t\t\tmakeSegmentTriangles();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch ( style.strokeLineJoin ) {\n\n\t\t\t\t\t\tcase 'bevel':\n\n\t\t\t\t\t\t\tmakeSegmentWithBevelJoin( joinIsOnLeftSide, innerSideModified, u1 );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'round':\n\n\t\t\t\t\t\t\t// Segment triangles\n\n\t\t\t\t\t\t\tcreateSegmentTrianglesWithMiddleSection( joinIsOnLeftSide, innerSideModified );\n\n\t\t\t\t\t\t\t// Join triangles\n\n\t\t\t\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t\t\t\tmakeCircularSector( currentPoint, currentPointL, nextPointL, u1, 0 );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tmakeCircularSector( currentPoint, nextPointR, currentPointR, u1, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'miter':\n\t\t\t\t\t\tcase 'miter-clip':\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tvar miterFraction = ( strokeWidth2 * style.strokeMiterLimit ) / miterLength2;\n\n\t\t\t\t\t\t\tif ( miterFraction < 1 ) {\n\n\t\t\t\t\t\t\t\t// The join miter length exceeds the miter limit\n\n\t\t\t\t\t\t\t\tif ( style.strokeLineJoin !== 'miter-clip' ) {\n\n\t\t\t\t\t\t\t\t\tmakeSegmentWithBevelJoin( joinIsOnLeftSide, innerSideModified, u1 );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Segment triangles\n\n\t\t\t\t\t\t\t\t\tcreateSegmentTrianglesWithMiddleSection( joinIsOnLeftSide, innerSideModified );\n\n\t\t\t\t\t\t\t\t\t// Miter-clip join triangles\n\n\t\t\t\t\t\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t\t\t\t\t\ttempV2_6.subVectors( outerPoint, currentPointL ).multiplyScalar( miterFraction ).add( currentPointL );\n\t\t\t\t\t\t\t\t\t\ttempV2_7.subVectors( outerPoint, nextPointL ).multiplyScalar( miterFraction ).add( nextPointL );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPointL, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( tempV2_6, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\t\t\t\t\t\taddVertex( tempV2_6, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( tempV2_7, u1, 0 );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\t\t\t\t\t\taddVertex( tempV2_7, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( nextPointL, u1, 0 );\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\ttempV2_6.subVectors( outerPoint, currentPointR ).multiplyScalar( miterFraction ).add( currentPointR );\n\t\t\t\t\t\t\t\t\t\ttempV2_7.subVectors( outerPoint, nextPointR ).multiplyScalar( miterFraction ).add( nextPointR );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPointR, u1, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( tempV2_6, u1, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\t\t\t\t\t\taddVertex( tempV2_6, u1, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( tempV2_7, u1, 1 );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\t\t\t\t\t\taddVertex( tempV2_7, u1, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( nextPointR, u1, 1 );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Miter join segment triangles\n\n\t\t\t\t\t\t\t\tif ( innerSideModified ) {\n\n\t\t\t\t\t\t\t\t\t// Optimized segment + join triangles\n\n\t\t\t\t\t\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( outerPoint, u1, 0 );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( outerPoint, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( innerPoint, u1, 1 );\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( outerPoint, u1, 1 );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( innerPoint, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( outerPoint, u1, 1 );\n\n\t\t\t\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t\t\t\t\t\tnextPointL.copy( outerPoint );\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tnextPointR.copy( outerPoint );\n\n\t\t\t\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Add extra miter join triangles\n\n\t\t\t\t\t\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPointL, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( outerPoint, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\t\t\t\t\t\taddVertex( outerPoint, u1, 0 );\n\t\t\t\t\t\t\t\t\t\taddVertex( nextPointL, u1, 0 );\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPointR, u1, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( outerPoint, u1, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\n\t\t\t\t\t\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\t\t\t\t\t\taddVertex( outerPoint, u1, 1 );\n\t\t\t\t\t\t\t\t\t\taddVertex( nextPointR, u1, 1 );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tisMiter = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// The segment triangles are generated here when two consecutive points are collinear\n\n\t\t\t\t\tmakeSegmentTriangles();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// The segment triangles are generated here if it is the ending segment\n\n\t\t\t\tmakeSegmentTriangles();\n\n\t\t\t}\n\n\t\t\tif ( ! isClosed && iPoint === numPoints - 1 ) {\n\n\t\t\t\t// Start line endcap\n\t\t\t\taddCapGeometry( points[ 0 ], point0L, point0R, joinIsOnLeftSide, true, u0 );\n\n\t\t\t}\n\n\t\t\t// Increment loop variables\n\n\t\t\tu0 = u1;\n\n\t\t\tpreviousPoint = currentPoint;\n\n\t\t\tlastPointL.copy( nextPointL );\n\t\t\tlastPointR.copy( nextPointR );\n\n\t\t}\n\n\t\tif ( ! isClosed ) {\n\n\t\t\t// Ending line endcap\n\t\t\taddCapGeometry( currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1 );\n\n\t\t} else if ( innerSideModified && vertices ) {\n\n\t\t\t// Modify path first segment vertices to adjust to the segments inner and outer intersections\n\n\t\t\tvar lastOuter = outerPoint;\n\t\t\tvar lastInner = innerPoint;\n\n\t\t\tif ( initialJoinIsOnLeftSide !== joinIsOnLeftSide ) {\n\n\t\t\t\tlastOuter = innerPoint;\n\t\t\t\tlastInner = outerPoint;\n\n\t\t\t}\n\n\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\tif ( isMiter || initialJoinIsOnLeftSide ) {\n\n\t\t\t\t\tlastInner.toArray( vertices, 0 * 3 );\n\t\t\t\t\tlastInner.toArray( vertices, 3 * 3 );\n\n\t\t\t\t\tif ( isMiter ) {\n\n\t\t\t\t\t\tlastOuter.toArray( vertices, 1 * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( isMiter || ! initialJoinIsOnLeftSide ) {\n\n\t\t\t\t\tlastInner.toArray( vertices, 1 * 3 );\n\t\t\t\t\tlastInner.toArray( vertices, 3 * 3 );\n\n\t\t\t\t\tif ( isMiter ) {\n\n\t\t\t\t\t\tlastOuter.toArray( vertices, 0 * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn numVertices;\n\n\t\t// -- End of algorithm\n\n\t\t// -- Functions\n\n\t\tfunction getNormal( p1, p2, result ) {\n\n\t\t\tresult.subVectors( p2, p1 );\n\t\t\treturn result.set( - result.y, result.x ).normalize();\n\n\t\t}\n\n\t\tfunction addVertex( position, u, v ) {\n\n\t\t\tif ( vertices ) {\n\n\t\t\t\tvertices[ currentCoordinate ] = position.x;\n\t\t\t\tvertices[ currentCoordinate + 1 ] = position.y;\n\t\t\t\tvertices[ currentCoordinate + 2 ] = 0;\n\n\t\t\t\tif ( normals ) {\n\n\t\t\t\t\tnormals[ currentCoordinate ] = 0;\n\t\t\t\t\tnormals[ currentCoordinate + 1 ] = 0;\n\t\t\t\t\tnormals[ currentCoordinate + 2 ] = 1;\n\n\t\t\t\t}\n\n\t\t\t\tcurrentCoordinate += 3;\n\n\t\t\t\tif ( uvs ) {\n\n\t\t\t\t\tuvs[ currentCoordinateUV ] = u;\n\t\t\t\t\tuvs[ currentCoordinateUV + 1 ] = v;\n\n\t\t\t\t\tcurrentCoordinateUV += 2;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tnumVertices += 3;\n\n\t\t}\n\n\t\tfunction makeCircularSector( center, p1, p2, u, v ) {\n\n\t\t\t// param p1, p2: Points in the circle arc.\n\t\t\t// p1 and p2 are in clockwise direction.\n\n\t\t\ttempV2_1.copy( p1 ).sub( center ).normalize();\n\t\t\ttempV2_2.copy( p2 ).sub( center ).normalize();\n\n\t\t\tvar angle = Math.PI;\n\t\t\tvar dot = tempV2_1.dot( tempV2_2 );\n\t\t\tif ( Math.abs( dot ) < 1 ) angle = Math.abs( Math.acos( dot ) );\n\n\t\t\tangle /= arcDivisions;\n\n\t\t\ttempV2_3.copy( p1 );\n\n\t\t\tfor ( var i = 0, il = arcDivisions - 1; i < il; i ++ ) {\n\n\t\t\t\ttempV2_4.copy( tempV2_3 ).rotateAround( center, angle );\n\n\t\t\t\taddVertex( tempV2_3, u, v );\n\t\t\t\taddVertex( tempV2_4, u, v );\n\t\t\t\taddVertex( center, u, 0.5 );\n\n\t\t\t\ttempV2_3.copy( tempV2_4 );\n\n\t\t\t}\n\n\t\t\taddVertex( tempV2_4, u, v );\n\t\t\taddVertex( p2, u, v );\n\t\t\taddVertex( center, u, 0.5 );\n\n\t\t}\n\n\t\tfunction makeSegmentTriangles() {\n\n\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\taddVertex( currentPointL, u1, 0 );\n\n\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\taddVertex( currentPointL, u1, 1 );\n\t\t\taddVertex( currentPointR, u1, 0 );\n\n\t\t}\n\n\t\tfunction makeSegmentWithBevelJoin( joinIsOnLeftSide, innerSideModified, u ) {\n\n\t\t\tif ( innerSideModified ) {\n\n\t\t\t\t// Optimized segment + bevel triangles\n\n\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t// Path segments triangles\n\n\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\taddVertex( currentPointL, u1, 0 );\n\n\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\taddVertex( currentPointL, u1, 0 );\n\t\t\t\t\taddVertex( innerPoint, u1, 1 );\n\n\t\t\t\t\t// Bevel join triangle\n\n\t\t\t\t\taddVertex( currentPointL, u, 0 );\n\t\t\t\t\taddVertex( nextPointL, u, 0 );\n\t\t\t\t\taddVertex( innerPoint, u, 0.5 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Path segments triangles\n\n\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\taddVertex( currentPointR, u1, 1 );\n\n\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\taddVertex( innerPoint, u1, 0 );\n\t\t\t\t\taddVertex( currentPointR, u1, 1 );\n\n\t\t\t\t\t// Bevel join triangle\n\n\t\t\t\t\taddVertex( currentPointR, u, 1 );\n\t\t\t\t\taddVertex( nextPointR, u, 0 );\n\t\t\t\t\taddVertex( innerPoint, u, 0.5 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Bevel join triangle. The segment triangles are done in the main loop\n\n\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\taddVertex( currentPointL, u, 0 );\n\t\t\t\t\taddVertex( nextPointL, u, 0 );\n\t\t\t\t\taddVertex( currentPoint, u, 0.5 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\taddVertex( currentPointR, u, 1 );\n\t\t\t\t\taddVertex( nextPointR, u, 0 );\n\t\t\t\t\taddVertex( currentPoint, u, 0.5 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction createSegmentTrianglesWithMiddleSection( joinIsOnLeftSide, innerSideModified ) {\n\n\t\t\tif ( innerSideModified ) {\n\n\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\taddVertex( currentPointL, u1, 0 );\n\n\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\taddVertex( currentPointL, u1, 0 );\n\t\t\t\t\taddVertex( innerPoint, u1, 1 );\n\n\t\t\t\t\taddVertex( currentPointL, u0, 0 );\n\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\taddVertex( innerPoint, u1, 1 );\n\n\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\taddVertex( nextPointL, u0, 0 );\n\t\t\t\t\taddVertex( innerPoint, u1, 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\taddVertex( lastPointR, u0, 1 );\n\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\taddVertex( currentPointR, u1, 1 );\n\n\t\t\t\t\taddVertex( lastPointL, u0, 0 );\n\t\t\t\t\taddVertex( innerPoint, u1, 0 );\n\t\t\t\t\taddVertex( currentPointR, u1, 1 );\n\n\t\t\t\t\taddVertex( currentPointR, u0, 1 );\n\t\t\t\t\taddVertex( innerPoint, u1, 0 );\n\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\n\t\t\t\t\taddVertex( currentPoint, u1, 0.5 );\n\t\t\t\t\taddVertex( innerPoint, u1, 0 );\n\t\t\t\t\taddVertex( nextPointR, u0, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addCapGeometry( center, p1, p2, joinIsOnLeftSide, start, u ) {\n\n\t\t\t// param center: End point of the path\n\t\t\t// param p1, p2: Left and right cap points\n\n\t\t\tswitch ( style.strokeLineCap ) {\n\n\t\t\t\tcase 'round':\n\n\t\t\t\t\tif ( start ) {\n\n\t\t\t\t\t\tmakeCircularSector( center, p2, p1, u, 0.5 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmakeCircularSector( center, p1, p2, u, 0.5 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'square':\n\n\t\t\t\t\tif ( start ) {\n\n\t\t\t\t\t\ttempV2_1.subVectors( p1, center );\n\t\t\t\t\t\ttempV2_2.set( tempV2_1.y, - tempV2_1.x );\n\n\t\t\t\t\t\ttempV2_3.addVectors( tempV2_1, tempV2_2 ).add( center );\n\t\t\t\t\t\ttempV2_4.subVectors( tempV2_2, tempV2_1 ).add( center );\n\n\t\t\t\t\t\t// Modify already existing vertices\n\t\t\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t\t\ttempV2_3.toArray( vertices, 1 * 3 );\n\t\t\t\t\t\t\ttempV2_4.toArray( vertices, 0 * 3 );\n\t\t\t\t\t\t\ttempV2_4.toArray( vertices, 3 * 3 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttempV2_3.toArray( vertices, 1 * 3 );\n\t\t\t\t\t\t\ttempV2_3.toArray( vertices, 3 * 3 );\n\t\t\t\t\t\t\ttempV2_4.toArray( vertices, 0 * 3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttempV2_1.subVectors( p2, center );\n\t\t\t\t\t\ttempV2_2.set( tempV2_1.y, - tempV2_1.x );\n\n\t\t\t\t\t\ttempV2_3.addVectors( tempV2_1, tempV2_2 ).add( center );\n\t\t\t\t\t\ttempV2_4.subVectors( tempV2_2, tempV2_1 ).add( center );\n\n\t\t\t\t\t\tvar vl = vertices.length;\n\n\t\t\t\t\t\t// Modify already existing vertices\n\t\t\t\t\t\tif ( joinIsOnLeftSide ) {\n\n\t\t\t\t\t\t\ttempV2_3.toArray( vertices, vl - 1 * 3 );\n\t\t\t\t\t\t\ttempV2_4.toArray( vertices, vl - 2 * 3 );\n\t\t\t\t\t\t\ttempV2_4.toArray( vertices, vl - 4 * 3 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttempV2_3.toArray( vertices, vl - 2 * 3 );\n\t\t\t\t\t\t\ttempV2_4.toArray( vertices, vl - 1 * 3 );\n\t\t\t\t\t\t\ttempV2_4.toArray( vertices, vl - 4 * 3 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'butt':\n\t\t\t\tdefault:\n\n\t\t\t\t\t// Nothing to do here\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction removeDuplicatedPoints( points ) {\n\n\t\t\t// Creates a new array if necessary with duplicated points removed.\n\t\t\t// This does not remove duplicated initial and ending points of a closed path.\n\n\t\t\tvar dupPoints = false;\n\t\t\tfor ( var i = 1, n = points.length - 1; i < n; i ++ ) {\n\n\t\t\t\tif ( points[ i ].distanceTo( points[ i + 1 ] ) < minDistance ) {\n\n\t\t\t\t\tdupPoints = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! dupPoints ) return points;\n\n\t\t\tvar newPoints = [];\n\t\t\tnewPoints.push( points[ 0 ] );\n\n\t\t\tfor ( var i = 1, n = points.length - 1; i < n; i ++ ) {\n\n\t\t\t\tif ( points[ i ].distanceTo( points[ i + 1 ] ) >= minDistance ) {\n\n\t\t\t\t\tnewPoints.push( points[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tnewPoints.push( points[ points.length - 1 ] );\n\n\t\t\treturn newPoints;\n\n\t\t}\n\n\t};\n\n}();\n\nexport { SVGLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/TDSLoader.js",
    "content": "import {\n\tAdditiveBlending,\n\tBufferGeometry,\n\tColor,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLoader,\n\tLoaderUtils,\n\tMatrix4,\n\tMesh,\n\tMeshPhongMaterial,\n\tTextureLoader\n} from '../../../build/three.module.js';\n\n/**\n * Autodesk 3DS three.js file loader, based on lib3ds.\n *\n * Loads geometry with uv and materials basic properties with texture support.\n *\n * @class TDSLoader\n * @constructor\n */\n\nvar TDSLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.debug = false;\n\n\tthis.group = null;\n\tthis.position = 0;\n\n\tthis.materials = [];\n\tthis.meshes = [];\n\n};\n\nTDSLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: TDSLoader,\n\n\t/**\n\t * Load 3ds file from url.\n\t *\n\t * @method load\n\t * @param {[type]} url URL for the file.\n\t * @param {Function} onLoad onLoad callback, receives group Object3D as argument.\n\t * @param {Function} onProgress onProgress callback.\n\t * @param {Function} onError onError callback.\n\t */\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\t/**\n\t * Parse arraybuffer data and load 3ds file.\n\t *\n\t * @method parse\n\t * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded.\n\t * @param {String} path Path for external resources.\n\t * @return {Group} Group loaded from 3ds file.\n\t */\n\tparse: function ( arraybuffer, path ) {\n\n\t\tthis.group = new Group();\n\t\tthis.position = 0;\n\t\tthis.materials = [];\n\t\tthis.meshes = [];\n\n\t\tthis.readFile( arraybuffer, path );\n\n\t\tfor ( var i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis.group.add( this.meshes[ i ] );\n\n\t\t}\n\n\t\treturn this.group;\n\n\t},\n\n\t/**\n\t * Decode file content to read 3ds data.\n\t *\n\t * @method readFile\n\t * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded.\n\t * @param {String} path Path for external resources.\n\t */\n\treadFile: function ( arraybuffer, path ) {\n\n\t\tvar data = new DataView( arraybuffer );\n\t\tvar chunk = this.readChunk( data );\n\n\t\tif ( chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC ) {\n\n\t\t\tvar next = this.nextChunk( data, chunk );\n\n\t\t\twhile ( next !== 0 ) {\n\n\t\t\t\tif ( next === M3D_VERSION ) {\n\n\t\t\t\t\tvar version = this.readDWord( data );\n\t\t\t\t\tthis.debugMessage( '3DS file version: ' + version );\n\n\t\t\t\t} else if ( next === MDATA ) {\n\n\t\t\t\t\tthis.resetPosition( data );\n\t\t\t\t\tthis.readMeshData( data, path );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.debugMessage( 'Unknown main chunk: ' + next.toString( 16 ) );\n\n\t\t\t\t}\n\n\t\t\t\tnext = this.nextChunk( data, chunk );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.debugMessage( 'Parsed ' + this.meshes.length + ' meshes' );\n\n\t},\n\n\t/**\n\t * Read mesh data chunk.\n\t *\n\t * @method readMeshData\n\t * @param {Dataview} data Dataview in use.\n\t * @param {String} path Path for external resources.\n\t */\n\treadMeshData: function ( data, path ) {\n\n\t\tvar chunk = this.readChunk( data );\n\t\tvar next = this.nextChunk( data, chunk );\n\n\t\twhile ( next !== 0 ) {\n\n\t\t\tif ( next === MESH_VERSION ) {\n\n\t\t\t\tvar version = + this.readDWord( data );\n\t\t\t\tthis.debugMessage( 'Mesh Version: ' + version );\n\n\t\t\t} else if ( next === MASTER_SCALE ) {\n\n\t\t\t\tvar scale = this.readFloat( data );\n\t\t\t\tthis.debugMessage( 'Master scale: ' + scale );\n\t\t\t\tthis.group.scale.set( scale, scale, scale );\n\n\t\t\t} else if ( next === NAMED_OBJECT ) {\n\n\t\t\t\tthis.debugMessage( 'Named Object' );\n\t\t\t\tthis.resetPosition( data );\n\t\t\t\tthis.readNamedObject( data );\n\n\t\t\t} else if ( next === MAT_ENTRY ) {\n\n\t\t\t\tthis.debugMessage( 'Material' );\n\t\t\t\tthis.resetPosition( data );\n\t\t\t\tthis.readMaterialEntry( data, path );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( 'Unknown MDATA chunk: ' + next.toString( 16 ) );\n\n\t\t\t}\n\n\t\t\tnext = this.nextChunk( data, chunk );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Read named object chunk.\n\t *\n\t * @method readNamedObject\n\t * @param {Dataview} data Dataview in use.\n\t */\n\treadNamedObject: function ( data ) {\n\n\t\tvar chunk = this.readChunk( data );\n\t\tvar name = this.readString( data, 64 );\n\t\tchunk.cur = this.position;\n\n\t\tvar next = this.nextChunk( data, chunk );\n\t\twhile ( next !== 0 ) {\n\n\t\t\tif ( next === N_TRI_OBJECT ) {\n\n\t\t\t\tthis.resetPosition( data );\n\t\t\t\tvar mesh = this.readMesh( data );\n\t\t\t\tmesh.name = name;\n\t\t\t\tthis.meshes.push( mesh );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( 'Unknown named object chunk: ' + next.toString( 16 ) );\n\n\t\t\t}\n\n\t\t\tnext = this.nextChunk( data, chunk );\n\n\t\t}\n\n\t\tthis.endChunk( chunk );\n\n\t},\n\n\t/**\n\t * Read material data chunk and add it to the material list.\n\t *\n\t * @method readMaterialEntry\n\t * @param {Dataview} data Dataview in use.\n\t * @param {String} path Path for external resources.\n\t */\n\treadMaterialEntry: function ( data, path ) {\n\n\t\tvar chunk = this.readChunk( data );\n\t\tvar next = this.nextChunk( data, chunk );\n\t\tvar material = new MeshPhongMaterial();\n\n\t\twhile ( next !== 0 ) {\n\n\t\t\tif ( next === MAT_NAME ) {\n\n\t\t\t\tmaterial.name = this.readString( data, 64 );\n\t\t\t\tthis.debugMessage( '   Name: ' + material.name );\n\n\t\t\t} else if ( next === MAT_WIRE ) {\n\n\t\t\t\tthis.debugMessage( '   Wireframe' );\n\t\t\t\tmaterial.wireframe = true;\n\n\t\t\t} else if ( next === MAT_WIRE_SIZE ) {\n\n\t\t\t\tvar value = this.readByte( data );\n\t\t\t\tmaterial.wireframeLinewidth = value;\n\t\t\t\tthis.debugMessage( '   Wireframe Thickness: ' + value );\n\n\t\t\t} else if ( next === MAT_TWO_SIDE ) {\n\n\t\t\t\tmaterial.side = DoubleSide;\n\t\t\t\tthis.debugMessage( '   DoubleSided' );\n\n\t\t\t} else if ( next === MAT_ADDITIVE ) {\n\n\t\t\t\tthis.debugMessage( '   Additive Blending' );\n\t\t\t\tmaterial.blending = AdditiveBlending;\n\n\t\t\t} else if ( next === MAT_DIFFUSE ) {\n\n\t\t\t\tthis.debugMessage( '   Diffuse Color' );\n\t\t\t\tmaterial.color = this.readColor( data );\n\n\t\t\t} else if ( next === MAT_SPECULAR ) {\n\n\t\t\t\tthis.debugMessage( '   Specular Color' );\n\t\t\t\tmaterial.specular = this.readColor( data );\n\n\t\t\t} else if ( next === MAT_AMBIENT ) {\n\n\t\t\t\tthis.debugMessage( '   Ambient color' );\n\t\t\t\tmaterial.color = this.readColor( data );\n\n\t\t\t} else if ( next === MAT_SHININESS ) {\n\n\t\t\t\tvar shininess = this.readPercentage( data );\n\t\t\t\tmaterial.shininess = shininess * 100;\n\t\t\t\tthis.debugMessage( '   Shininess : ' + shininess );\n\n\t\t\t} else if ( next === MAT_TRANSPARENCY ) {\n\n\t\t\t\tvar transparency = this.readPercentage( data );\n\t\t\t\tmaterial.opacity = 1 - transparency;\n\t\t\t\tthis.debugMessage( '  Transparency : ' + transparency );\n\t\t\t\tmaterial.transparent = material.opacity < 1 ? true : false;\n\n\t\t\t} else if ( next === MAT_TEXMAP ) {\n\n\t\t\t\tthis.debugMessage( '   ColorMap' );\n\t\t\t\tthis.resetPosition( data );\n\t\t\t\tmaterial.map = this.readMap( data, path );\n\n\t\t\t} else if ( next === MAT_BUMPMAP ) {\n\n\t\t\t\tthis.debugMessage( '   BumpMap' );\n\t\t\t\tthis.resetPosition( data );\n\t\t\t\tmaterial.bumpMap = this.readMap( data, path );\n\n\t\t\t} else if ( next === MAT_OPACMAP ) {\n\n\t\t\t\tthis.debugMessage( '   OpacityMap' );\n\t\t\t\tthis.resetPosition( data );\n\t\t\t\tmaterial.alphaMap = this.readMap( data, path );\n\n\t\t\t} else if ( next === MAT_SPECMAP ) {\n\n\t\t\t\tthis.debugMessage( '   SpecularMap' );\n\t\t\t\tthis.resetPosition( data );\n\t\t\t\tmaterial.specularMap = this.readMap( data, path );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( '   Unknown material chunk: ' + next.toString( 16 ) );\n\n\t\t\t}\n\n\t\t\tnext = this.nextChunk( data, chunk );\n\n\t\t}\n\n\t\tthis.endChunk( chunk );\n\n\t\tthis.materials[ material.name ] = material;\n\n\t},\n\n\t/**\n\t * Read mesh data chunk.\n\t *\n\t * @method readMesh\n\t * @param {Dataview} data Dataview in use.\n\t * @return {Mesh} The parsed mesh.\n\t */\n\treadMesh: function ( data ) {\n\n\t\tvar chunk = this.readChunk( data );\n\t\tvar next = this.nextChunk( data, chunk );\n\n\t\tvar geometry = new BufferGeometry();\n\t\tvar uvs = [];\n\n\t\tvar material = new MeshPhongMaterial();\n\t\tvar mesh = new Mesh( geometry, material );\n\t\tmesh.name = 'mesh';\n\n\t\twhile ( next !== 0 ) {\n\n\t\t\tif ( next === POINT_ARRAY ) {\n\n\t\t\t\tvar points = this.readWord( data );\n\n\t\t\t\tthis.debugMessage( '   Vertex: ' + points );\n\n\t\t\t\t//BufferGeometry\n\n\t\t\t\tvar vertices = [];\n\n\t\t\t\tfor ( var i = 0; i < points; i ++ )\t\t{\n\n\t\t\t\t\tvertices.push( this.readFloat( data ) );\n\t\t\t\t\tvertices.push( this.readFloat( data ) );\n\t\t\t\t\tvertices.push( this.readFloat( data ) );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t\t} else if ( next === FACE_ARRAY ) {\n\n\t\t\t\tthis.resetPosition( data );\n\t\t\t\tthis.readFaceArray( data, mesh );\n\n\t\t\t} else if ( next === TEX_VERTS ) {\n\n\t\t\t\tvar texels = this.readWord( data );\n\n\t\t\t\tthis.debugMessage( '   UV: ' + texels );\n\n\t\t\t\t//BufferGeometry\n\n\t\t\t\tvar uvs = [];\n\n\t\t\t\tfor ( var i = 0; i < texels; i ++ )\t\t{\n\n\t\t\t\t\tuvs.push( this.readFloat( data ) );\n\t\t\t\t\tuvs.push( this.readFloat( data ) );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t\t} else if ( next === MESH_MATRIX ) {\n\n\t\t\t\tthis.debugMessage( '   Tranformation Matrix (TODO)' );\n\n\t\t\t\tvar values = [];\n\t\t\t\tfor ( var i = 0; i < 12; i ++ ) {\n\n\t\t\t\t\tvalues[ i ] = this.readFloat( data );\n\n\t\t\t\t}\n\n\t\t\t\tvar matrix = new Matrix4();\n\n\t\t\t\t//X Line\n\t\t\t\tmatrix.elements[ 0 ] = values[ 0 ];\n\t\t\t\tmatrix.elements[ 1 ] = values[ 6 ];\n\t\t\t\tmatrix.elements[ 2 ] = values[ 3 ];\n\t\t\t\tmatrix.elements[ 3 ] = values[ 9 ];\n\n\t\t\t\t//Y Line\n\t\t\t\tmatrix.elements[ 4 ] = values[ 2 ];\n\t\t\t\tmatrix.elements[ 5 ] = values[ 8 ];\n\t\t\t\tmatrix.elements[ 6 ] = values[ 5 ];\n\t\t\t\tmatrix.elements[ 7 ] = values[ 11 ];\n\n\t\t\t\t//Z Line\n\t\t\t\tmatrix.elements[ 8 ] = values[ 1 ];\n\t\t\t\tmatrix.elements[ 9 ] = values[ 7 ];\n\t\t\t\tmatrix.elements[ 10 ] = values[ 4 ];\n\t\t\t\tmatrix.elements[ 11 ] = values[ 10 ];\n\n\t\t\t\t//W Line\n\t\t\t\tmatrix.elements[ 12 ] = 0;\n\t\t\t\tmatrix.elements[ 13 ] = 0;\n\t\t\t\tmatrix.elements[ 14 ] = 0;\n\t\t\t\tmatrix.elements[ 15 ] = 1;\n\n\t\t\t\tmatrix.transpose();\n\n\t\t\t\tvar inverse = new Matrix4();\n\t\t\t\tinverse.copy( matrix ).invert();\n\t\t\t\tgeometry.applyMatrix4( inverse );\n\n\t\t\t\tmatrix.decompose( mesh.position, mesh.quaternion, mesh.scale );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( '   Unknown mesh chunk: ' + next.toString( 16 ) );\n\n\t\t\t}\n\n\t\t\tnext = this.nextChunk( data, chunk );\n\n\t\t}\n\n\t\tthis.endChunk( chunk );\n\n\t\tgeometry.computeVertexNormals();\n\n\t\treturn mesh;\n\n\t},\n\n\t/**\n\t * Read face array data chunk.\n\t *\n\t * @method readFaceArray\n\t * @param {Dataview} data Dataview in use.\n\t * @param {Mesh} mesh Mesh to be filled with the data read.\n\t */\n\treadFaceArray: function ( data, mesh ) {\n\n\t\tvar chunk = this.readChunk( data );\n\t\tvar faces = this.readWord( data );\n\n\t\tthis.debugMessage( '   Faces: ' + faces );\n\n\t\tvar index = [];\n\n\t\tfor ( var i = 0; i < faces; ++ i ) {\n\n\t\t\tindex.push( this.readWord( data ), this.readWord( data ), this.readWord( data ) );\n\n\t\t\tthis.readWord( data ); // visibility\n\n\t\t}\n\n\t\tmesh.geometry.setIndex( index );\n\n\t\t//The rest of the FACE_ARRAY chunk is subchunks\n\n\t\tvar materialIndex = 0;\n\t\tvar start = 0;\n\n\t\twhile ( this.position < chunk.end ) {\n\n\t\t\tvar subchunk = this.readChunk( data );\n\n\t\t\tif ( subchunk.id === MSH_MAT_GROUP ) {\n\n\t\t\t\tthis.debugMessage( '      Material Group' );\n\n\t\t\t\tthis.resetPosition( data );\n\n\t\t\t\tvar group = this.readMaterialGroup( data );\n\t\t\t\tvar count = group.index.length * 3; // assuming successive indices\n\n\t\t\t\tmesh.geometry.addGroup( start, count, materialIndex );\n\n\t\t\t\tstart += count;\n\t\t\t\tmaterialIndex ++;\n\n\t\t\t\tvar material = this.materials[ group.name ];\n\n\t\t\t\tif ( Array.isArray( mesh.material ) === false ) mesh.material = [];\n\n\t\t\t\tif ( material !== undefined )\t{\n\n\t\t\t\t\tmesh.material.push( material );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( '      Unknown face array chunk: ' + subchunk.toString( 16 ) );\n\n\t\t\t}\n\n\t\t\tthis.endChunk( subchunk );\n\n\t\t}\n\n\t\tif ( mesh.material.length === 1 ) mesh.material = mesh.material[ 0 ]; // for backwards compatibility\n\n\t\tthis.endChunk( chunk );\n\n\t},\n\n\t/**\n\t * Read texture map data chunk.\n\t *\n\t * @method readMap\n\t * @param {Dataview} data Dataview in use.\n\t * @param {String} path Path for external resources.\n\t * @return {Texture} Texture read from this data chunk.\n\t */\n\treadMap: function ( data, path ) {\n\n\t\tvar chunk = this.readChunk( data );\n\t\tvar next = this.nextChunk( data, chunk );\n\t\tvar texture = {};\n\n\t\tvar loader = new TextureLoader( this.manager );\n\t\tloader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\twhile ( next !== 0 ) {\n\n\t\t\tif ( next === MAT_MAPNAME ) {\n\n\t\t\t\tvar name = this.readString( data, 128 );\n\t\t\t\ttexture = loader.load( name );\n\n\t\t\t\tthis.debugMessage( '      File: ' + path + name );\n\n\t\t\t} else if ( next === MAT_MAP_UOFFSET ) {\n\n\t\t\t\ttexture.offset.x = this.readFloat( data );\n\t\t\t\tthis.debugMessage( '      OffsetX: ' + texture.offset.x );\n\n\t\t\t} else if ( next === MAT_MAP_VOFFSET ) {\n\n\t\t\t\ttexture.offset.y = this.readFloat( data );\n\t\t\t\tthis.debugMessage( '      OffsetY: ' + texture.offset.y );\n\n\t\t\t} else if ( next === MAT_MAP_USCALE ) {\n\n\t\t\t\ttexture.repeat.x = this.readFloat( data );\n\t\t\t\tthis.debugMessage( '      RepeatX: ' + texture.repeat.x );\n\n\t\t\t} else if ( next === MAT_MAP_VSCALE ) {\n\n\t\t\t\ttexture.repeat.y = this.readFloat( data );\n\t\t\t\tthis.debugMessage( '      RepeatY: ' + texture.repeat.y );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( '      Unknown map chunk: ' + next.toString( 16 ) );\n\n\t\t\t}\n\n\t\t\tnext = this.nextChunk( data, chunk );\n\n\t\t}\n\n\t\tthis.endChunk( chunk );\n\n\t\treturn texture;\n\n\t},\n\n\t/**\n\t * Read material group data chunk.\n\t *\n\t * @method readMaterialGroup\n\t * @param {Dataview} data Dataview in use.\n\t * @return {Object} Object with name and index of the object.\n\t */\n\treadMaterialGroup: function ( data ) {\n\n\t\tthis.readChunk( data );\n\t\tvar name = this.readString( data, 64 );\n\t\tvar numFaces = this.readWord( data );\n\n\t\tthis.debugMessage( '         Name: ' + name );\n\t\tthis.debugMessage( '         Faces: ' + numFaces );\n\n\t\tvar index = [];\n\t\tfor ( var i = 0; i < numFaces; ++ i ) {\n\n\t\t\tindex.push( this.readWord( data ) );\n\n\t\t}\n\n\t\treturn { name: name, index: index };\n\n\t},\n\n\t/**\n\t * Read a color value.\n\t *\n\t * @method readColor\n\t * @param {DataView} data Dataview.\n\t * @return {Color} Color value read..\n\t */\n\treadColor: function ( data ) {\n\n\t\tvar chunk = this.readChunk( data );\n\t\tvar color = new Color();\n\n\t\tif ( chunk.id === COLOR_24 || chunk.id === LIN_COLOR_24 ) {\n\n\t\t\tvar r = this.readByte( data );\n\t\t\tvar g = this.readByte( data );\n\t\t\tvar b = this.readByte( data );\n\n\t\t\tcolor.setRGB( r / 255, g / 255, b / 255 );\n\n\t\t\tthis.debugMessage( '      Color: ' + color.r + ', ' + color.g + ', ' + color.b );\n\n\t\t}\telse if ( chunk.id === COLOR_F || chunk.id === LIN_COLOR_F ) {\n\n\t\t\tvar r = this.readFloat( data );\n\t\t\tvar g = this.readFloat( data );\n\t\t\tvar b = this.readFloat( data );\n\n\t\t\tcolor.setRGB( r, g, b );\n\n\t\t\tthis.debugMessage( '      Color: ' + color.r + ', ' + color.g + ', ' + color.b );\n\n\t\t}\telse {\n\n\t\t\tthis.debugMessage( '      Unknown color chunk: ' + chunk.toString( 16 ) );\n\n\t\t}\n\n\t\tthis.endChunk( chunk );\n\t\treturn color;\n\n\t},\n\n\t/**\n\t * Read next chunk of data.\n\t *\n\t * @method readChunk\n\t * @param {DataView} data Dataview.\n\t * @return {Object} Chunk of data read.\n\t */\n\treadChunk: function ( data ) {\n\n\t\tvar chunk = {};\n\n\t\tchunk.cur = this.position;\n\t\tchunk.id = this.readWord( data );\n\t\tchunk.size = this.readDWord( data );\n\t\tchunk.end = chunk.cur + chunk.size;\n\t\tchunk.cur += 6;\n\n\t\treturn chunk;\n\n\t},\n\n\t/**\n\t * Set position to the end of the current chunk of data.\n\t *\n\t * @method endChunk\n\t * @param {Object} chunk Data chunk.\n\t */\n\tendChunk: function ( chunk ) {\n\n\t\tthis.position = chunk.end;\n\n\t},\n\n\t/**\n\t * Move to the next data chunk.\n\t *\n\t * @method nextChunk\n\t * @param {DataView} data Dataview.\n\t * @param {Object} chunk Data chunk.\n\t */\n\tnextChunk: function ( data, chunk ) {\n\n\t\tif ( chunk.cur >= chunk.end ) {\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tthis.position = chunk.cur;\n\n\t\ttry {\n\n\t\t\tvar next = this.readChunk( data );\n\t\t\tchunk.cur += next.size;\n\t\t\treturn next.id;\n\n\t\t}\tcatch ( e ) {\n\n\t\t\tthis.debugMessage( 'Unable to read chunk at ' + this.position );\n\t\t\treturn 0;\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Reset dataview position.\n\t *\n\t * @method resetPosition\n\t */\n\tresetPosition: function () {\n\n\t\tthis.position -= 6;\n\n\t},\n\n\t/**\n\t * Read byte value.\n\t *\n\t * @method readByte\n\t * @param {DataView} data Dataview to read data from.\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadByte: function ( data ) {\n\n\t\tvar v = data.getUint8( this.position, true );\n\t\tthis.position += 1;\n\t\treturn v;\n\n\t},\n\n\t/**\n\t * Read 32 bit float value.\n\t *\n\t * @method readFloat\n\t * @param {DataView} data Dataview to read data from.\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadFloat: function ( data ) {\n\n\t\ttry {\n\n\t\t\tvar v = data.getFloat32( this.position, true );\n\t\t\tthis.position += 4;\n\t\t\treturn v;\n\n\t\t}\tcatch ( e ) {\n\n\t\t\tthis.debugMessage( e + ' ' + this.position + ' ' + data.byteLength );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Read 32 bit signed integer value.\n\t *\n\t * @method readInt\n\t * @param {DataView} data Dataview to read data from.\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadInt: function ( data ) {\n\n\t\tvar v = data.getInt32( this.position, true );\n\t\tthis.position += 4;\n\t\treturn v;\n\n\t},\n\n\t/**\n\t * Read 16 bit signed integer value.\n\t *\n\t * @method readShort\n\t * @param {DataView} data Dataview to read data from.\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadShort: function ( data ) {\n\n\t\tvar v = data.getInt16( this.position, true );\n\t\tthis.position += 2;\n\t\treturn v;\n\n\t},\n\n\t/**\n\t * Read 64 bit unsigned integer value.\n\t *\n\t * @method readDWord\n\t * @param {DataView} data Dataview to read data from.\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadDWord: function ( data ) {\n\n\t\tvar v = data.getUint32( this.position, true );\n\t\tthis.position += 4;\n\t\treturn v;\n\n\t},\n\n\t/**\n\t * Read 32 bit unsigned integer value.\n\t *\n\t * @method readWord\n\t * @param {DataView} data Dataview to read data from.\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadWord: function ( data ) {\n\n\t\tvar v = data.getUint16( this.position, true );\n\t\tthis.position += 2;\n\t\treturn v;\n\n\t},\n\n\t/**\n\t * Read string value.\n\t *\n\t * @method readString\n\t * @param {DataView} data Dataview to read data from.\n\t * @param {Number} maxLength Max size of the string to be read.\n\t * @return {String} Data read from the dataview.\n\t */\n\treadString: function ( data, maxLength ) {\n\n\t\tvar s = '';\n\n\t\tfor ( var i = 0; i < maxLength; i ++ ) {\n\n\t\t\tvar c = this.readByte( data );\n\t\t\tif ( ! c ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\ts += String.fromCharCode( c );\n\n\t\t}\n\n\t\treturn s;\n\n\t},\n\n\t/**\n\t * Read percentage value.\n\t *\n\t * @method readPercentage\n\t * @param {DataView} data Dataview to read data from.\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadPercentage: function ( data ) {\n\n\t\tvar chunk = this.readChunk( data );\n\t\tvar value;\n\n\t\tswitch ( chunk.id ) {\n\n\t\t\tcase INT_PERCENTAGE:\n\t\t\t\tvalue = ( this.readShort( data ) / 100 );\n\t\t\t\tbreak;\n\n\t\t\tcase FLOAT_PERCENTAGE:\n\t\t\t\tvalue = this.readFloat( data );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.debugMessage( '      Unknown percentage chunk: ' + chunk.toString( 16 ) );\n\n\t\t}\n\n\t\tthis.endChunk( chunk );\n\n\t\treturn value;\n\n\t},\n\n\t/**\n\t * Print debug message to the console.\n\t *\n\t * Is controlled by a flag to show or hide debug messages.\n\t *\n\t * @method debugMessage\n\t * @param {Object} message Debug message to print to the console.\n\t */\n\tdebugMessage: function ( message ) {\n\n\t\tif ( this.debug ) {\n\n\t\t\tconsole.log( message );\n\n\t\t}\n\n\t}\n\n} );\n\n// var NULL_CHUNK = 0x0000;\nvar M3DMAGIC = 0x4D4D;\n// var SMAGIC = 0x2D2D;\n// var LMAGIC = 0x2D3D;\nvar MLIBMAGIC = 0x3DAA;\n// var MATMAGIC = 0x3DFF;\nvar CMAGIC = 0xC23D;\nvar M3D_VERSION = 0x0002;\n// var M3D_KFVERSION = 0x0005;\nvar COLOR_F = 0x0010;\nvar COLOR_24 = 0x0011;\nvar LIN_COLOR_24 = 0x0012;\nvar LIN_COLOR_F = 0x0013;\nvar INT_PERCENTAGE = 0x0030;\nvar FLOAT_PERCENTAGE = 0x0031;\nvar MDATA = 0x3D3D;\nvar MESH_VERSION = 0x3D3E;\nvar MASTER_SCALE = 0x0100;\n// var LO_SHADOW_BIAS = 0x1400;\n// var HI_SHADOW_BIAS = 0x1410;\n// var SHADOW_MAP_SIZE = 0x1420;\n// var SHADOW_SAMPLES = 0x1430;\n// var SHADOW_RANGE = 0x1440;\n// var SHADOW_FILTER = 0x1450;\n// var RAY_BIAS = 0x1460;\n// var O_CONSTS = 0x1500;\n// var AMBIENT_LIGHT = 0x2100;\n// var BIT_MAP = 0x1100;\n// var SOLID_BGND = 0x1200;\n// var V_GRADIENT = 0x1300;\n// var USE_BIT_MAP = 0x1101;\n// var USE_SOLID_BGND = 0x1201;\n// var USE_V_GRADIENT = 0x1301;\n// var FOG = 0x2200;\n// var FOG_BGND = 0x2210;\n// var LAYER_FOG = 0x2302;\n// var DISTANCE_CUE = 0x2300;\n// var DCUE_BGND = 0x2310;\n// var USE_FOG = 0x2201;\n// var USE_LAYER_FOG = 0x2303;\n// var USE_DISTANCE_CUE = 0x2301;\nvar MAT_ENTRY = 0xAFFF;\nvar MAT_NAME = 0xA000;\nvar MAT_AMBIENT = 0xA010;\nvar MAT_DIFFUSE = 0xA020;\nvar MAT_SPECULAR = 0xA030;\nvar MAT_SHININESS = 0xA040;\n// var MAT_SHIN2PCT = 0xA041;\nvar MAT_TRANSPARENCY = 0xA050;\n// var MAT_XPFALL = 0xA052;\n// var MAT_USE_XPFALL = 0xA240;\n// var MAT_REFBLUR = 0xA053;\n// var MAT_SHADING = 0xA100;\n// var MAT_USE_REFBLUR = 0xA250;\n// var MAT_SELF_ILLUM = 0xA084;\nvar MAT_TWO_SIDE = 0xA081;\n// var MAT_DECAL = 0xA082;\nvar MAT_ADDITIVE = 0xA083;\nvar MAT_WIRE = 0xA085;\n// var MAT_FACEMAP = 0xA088;\n// var MAT_TRANSFALLOFF_IN = 0xA08A;\n// var MAT_PHONGSOFT = 0xA08C;\n// var MAT_WIREABS = 0xA08E;\nvar MAT_WIRE_SIZE = 0xA087;\nvar MAT_TEXMAP = 0xA200;\n// var MAT_SXP_TEXT_DATA = 0xA320;\n// var MAT_TEXMASK = 0xA33E;\n// var MAT_SXP_TEXTMASK_DATA = 0xA32A;\n// var MAT_TEX2MAP = 0xA33A;\n// var MAT_SXP_TEXT2_DATA = 0xA321;\n// var MAT_TEX2MASK = 0xA340;\n// var MAT_SXP_TEXT2MASK_DATA = 0xA32C;\nvar MAT_OPACMAP = 0xA210;\n// var MAT_SXP_OPAC_DATA = 0xA322;\n// var MAT_OPACMASK = 0xA342;\n// var MAT_SXP_OPACMASK_DATA = 0xA32E;\nvar MAT_BUMPMAP = 0xA230;\n// var MAT_SXP_BUMP_DATA = 0xA324;\n// var MAT_BUMPMASK = 0xA344;\n// var MAT_SXP_BUMPMASK_DATA = 0xA330;\nvar MAT_SPECMAP = 0xA204;\n// var MAT_SXP_SPEC_DATA = 0xA325;\n// var MAT_SPECMASK = 0xA348;\n// var MAT_SXP_SPECMASK_DATA = 0xA332;\n// var MAT_SHINMAP = 0xA33C;\n// var MAT_SXP_SHIN_DATA = 0xA326;\n// var MAT_SHINMASK = 0xA346;\n// var MAT_SXP_SHINMASK_DATA = 0xA334;\n// var MAT_SELFIMAP = 0xA33D;\n// var MAT_SXP_SELFI_DATA = 0xA328;\n// var MAT_SELFIMASK = 0xA34A;\n// var MAT_SXP_SELFIMASK_DATA = 0xA336;\n// var MAT_REFLMAP = 0xA220;\n// var MAT_REFLMASK = 0xA34C;\n// var MAT_SXP_REFLMASK_DATA = 0xA338;\n// var MAT_ACUBIC = 0xA310;\nvar MAT_MAPNAME = 0xA300;\n// var MAT_MAP_TILING = 0xA351;\n// var MAT_MAP_TEXBLUR = 0xA353;\nvar MAT_MAP_USCALE = 0xA354;\nvar MAT_MAP_VSCALE = 0xA356;\nvar MAT_MAP_UOFFSET = 0xA358;\nvar MAT_MAP_VOFFSET = 0xA35A;\n// var MAT_MAP_ANG = 0xA35C;\n// var MAT_MAP_COL1 = 0xA360;\n// var MAT_MAP_COL2 = 0xA362;\n// var MAT_MAP_RCOL = 0xA364;\n// var MAT_MAP_GCOL = 0xA366;\n// var MAT_MAP_BCOL = 0xA368;\nvar NAMED_OBJECT = 0x4000;\n// var N_DIRECT_LIGHT = 0x4600;\n// var DL_OFF = 0x4620;\n// var DL_OUTER_RANGE = 0x465A;\n// var DL_INNER_RANGE = 0x4659;\n// var DL_MULTIPLIER = 0x465B;\n// var DL_EXCLUDE = 0x4654;\n// var DL_ATTENUATE = 0x4625;\n// var DL_SPOTLIGHT = 0x4610;\n// var DL_SPOT_ROLL = 0x4656;\n// var DL_SHADOWED = 0x4630;\n// var DL_LOCAL_SHADOW2 = 0x4641;\n// var DL_SEE_CONE = 0x4650;\n// var DL_SPOT_RECTANGULAR = 0x4651;\n// var DL_SPOT_ASPECT = 0x4657;\n// var DL_SPOT_PROJECTOR = 0x4653;\n// var DL_SPOT_OVERSHOOT = 0x4652;\n// var DL_RAY_BIAS = 0x4658;\n// var DL_RAYSHAD = 0x4627;\n// var N_CAMERA = 0x4700;\n// var CAM_SEE_CONE = 0x4710;\n// var CAM_RANGES = 0x4720;\n// var OBJ_HIDDEN = 0x4010;\n// var OBJ_VIS_LOFTER = 0x4011;\n// var OBJ_DOESNT_CAST = 0x4012;\n// var OBJ_DONT_RECVSHADOW = 0x4017;\n// var OBJ_MATTE = 0x4013;\n// var OBJ_FAST = 0x4014;\n// var OBJ_PROCEDURAL = 0x4015;\n// var OBJ_FROZEN = 0x4016;\nvar N_TRI_OBJECT = 0x4100;\nvar POINT_ARRAY = 0x4110;\n// var POINT_FLAG_ARRAY = 0x4111;\nvar FACE_ARRAY = 0x4120;\nvar MSH_MAT_GROUP = 0x4130;\n// var SMOOTH_GROUP = 0x4150;\n// var MSH_BOXMAP = 0x4190;\nvar TEX_VERTS = 0x4140;\nvar MESH_MATRIX = 0x4160;\n// var MESH_COLOR = 0x4165;\n// var MESH_TEXTURE_INFO = 0x4170;\n// var KFDATA = 0xB000;\n// var KFHDR = 0xB00A;\n// var KFSEG = 0xB008;\n// var KFCURTIME = 0xB009;\n// var AMBIENT_NODE_TAG = 0xB001;\n// var OBJECT_NODE_TAG = 0xB002;\n// var CAMERA_NODE_TAG = 0xB003;\n// var TARGET_NODE_TAG = 0xB004;\n// var LIGHT_NODE_TAG = 0xB005;\n// var L_TARGET_NODE_TAG = 0xB006;\n// var SPOTLIGHT_NODE_TAG = 0xB007;\n// var NODE_ID = 0xB030;\n// var NODE_HDR = 0xB010;\n// var PIVOT = 0xB013;\n// var INSTANCE_NAME = 0xB011;\n// var MORPH_SMOOTH = 0xB015;\n// var BOUNDBOX = 0xB014;\n// var POS_TRACK_TAG = 0xB020;\n// var COL_TRACK_TAG = 0xB025;\n// var ROT_TRACK_TAG = 0xB021;\n// var SCL_TRACK_TAG = 0xB022;\n// var MORPH_TRACK_TAG = 0xB026;\n// var FOV_TRACK_TAG = 0xB023;\n// var ROLL_TRACK_TAG = 0xB024;\n// var HOT_TRACK_TAG = 0xB027;\n// var FALL_TRACK_TAG = 0xB028;\n// var HIDE_TRACK_TAG = 0xB029;\n// var POLY_2D = 0x5000;\n// var SHAPE_OK = 0x5010;\n// var SHAPE_NOT_OK = 0x5011;\n// var SHAPE_HOOK = 0x5020;\n// var PATH_3D = 0x6000;\n// var PATH_MATRIX = 0x6005;\n// var SHAPE_2D = 0x6010;\n// var M_SCALE = 0x6020;\n// var M_TWIST = 0x6030;\n// var M_TEETER = 0x6040;\n// var M_FIT = 0x6050;\n// var M_BEVEL = 0x6060;\n// var XZ_CURVE = 0x6070;\n// var YZ_CURVE = 0x6080;\n// var INTERPCT = 0x6090;\n// var DEFORM_LIMIT = 0x60A0;\n// var USE_CONTOUR = 0x6100;\n// var USE_TWEEN = 0x6110;\n// var USE_SCALE = 0x6120;\n// var USE_TWIST = 0x6130;\n// var USE_TEETER = 0x6140;\n// var USE_FIT = 0x6150;\n// var USE_BEVEL = 0x6160;\n// var DEFAULT_VIEW = 0x3000;\n// var VIEW_TOP = 0x3010;\n// var VIEW_BOTTOM = 0x3020;\n// var VIEW_LEFT = 0x3030;\n// var VIEW_RIGHT = 0x3040;\n// var VIEW_FRONT = 0x3050;\n// var VIEW_BACK = 0x3060;\n// var VIEW_USER = 0x3070;\n// var VIEW_CAMERA = 0x3080;\n// var VIEW_WINDOW = 0x3090;\n// var VIEWPORT_LAYOUT_OLD = 0x7000;\n// var VIEWPORT_DATA_OLD = 0x7010;\n// var VIEWPORT_LAYOUT = 0x7001;\n// var VIEWPORT_DATA = 0x7011;\n// var VIEWPORT_DATA_3 = 0x7012;\n// var VIEWPORT_SIZE = 0x7020;\n// var NETWORK_VIEW = 0x7030;\n\nexport { TDSLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/TGALoader.js",
    "content": "import {\n\tFileLoader,\n\tLoader,\n\tTexture\n} from '../../../build/three.module.js';\n\nvar TGALoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nTGALoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: TGALoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar texture = new Texture();\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttexture.image = scope.parse( buffer );\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t},\n\n\tparse: function ( buffer ) {\n\n\t\t// reference from vthibault, https://github.com/vthibault/roBrowser/blob/master/src/Loaders/Targa.js\n\n\t\tfunction tgaCheckHeader( header ) {\n\n\t\t\tswitch ( header.image_type ) {\n\n\t\t\t\t// check indexed type\n\n\t\t\t\tcase TGA_TYPE_INDEXED:\n\t\t\t\tcase TGA_TYPE_RLE_INDEXED:\n\t\t\t\t\tif ( header.colormap_length > 256 || header.colormap_size !== 24 || header.colormap_type !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid type colormap data for indexed type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// check colormap type\n\n\t\t\t\tcase TGA_TYPE_RGB:\n\t\t\t\tcase TGA_TYPE_GREY:\n\t\t\t\tcase TGA_TYPE_RLE_RGB:\n\t\t\t\tcase TGA_TYPE_RLE_GREY:\n\t\t\t\t\tif ( header.colormap_type ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid type colormap data for colormap type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// What the need of a file without data ?\n\n\t\t\t\tcase TGA_TYPE_NO_DATA:\n\t\t\t\t\tconsole.error( 'THREE.TGALoader: No data.' );\n\n\t\t\t\t\t// Invalid type ?\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid type \"%s\".', header.image_type );\n\n\t\t\t}\n\n\t\t\t// check image width and height\n\n\t\t\tif ( header.width <= 0 || header.height <= 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid image size.' );\n\n\t\t\t}\n\n\t\t\t// check image pixel size\n\n\t\t\tif ( header.pixel_size !== 8 && header.pixel_size !== 16 &&\n\t\t\t\theader.pixel_size !== 24 && header.pixel_size !== 32 ) {\n\n\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid pixel size \"%s\".', header.pixel_size );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse tga image buffer\n\n\t\tfunction tgaParse( use_rle, use_pal, header, offset, data ) {\n\n\t\t\tvar pixel_data,\n\t\t\t\tpixel_size,\n\t\t\t\tpixel_total,\n\t\t\t\tpalettes;\n\n\t\t\tpixel_size = header.pixel_size >> 3;\n\t\t\tpixel_total = header.width * header.height * pixel_size;\n\n\t\t\t // read palettes\n\n\t\t\t if ( use_pal ) {\n\n\t\t\t\t palettes = data.subarray( offset, offset += header.colormap_length * ( header.colormap_size >> 3 ) );\n\n\t\t\t }\n\n\t\t\t // read RLE\n\n\t\t\t if ( use_rle ) {\n\n\t\t\t\t pixel_data = new Uint8Array( pixel_total );\n\n\t\t\t\tvar c, count, i;\n\t\t\t\tvar shift = 0;\n\t\t\t\tvar pixels = new Uint8Array( pixel_size );\n\n\t\t\t\twhile ( shift < pixel_total ) {\n\n\t\t\t\t\tc = data[ offset ++ ];\n\t\t\t\t\tcount = ( c & 0x7f ) + 1;\n\n\t\t\t\t\t// RLE pixels\n\n\t\t\t\t\tif ( c & 0x80 ) {\n\n\t\t\t\t\t\t// bind pixel tmp array\n\n\t\t\t\t\t\tfor ( i = 0; i < pixel_size; ++ i ) {\n\n\t\t\t\t\t\t\tpixels[ i ] = data[ offset ++ ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// copy pixel array\n\n\t\t\t\t\t\tfor ( i = 0; i < count; ++ i ) {\n\n\t\t\t\t\t\t\tpixel_data.set( pixels, shift + i * pixel_size );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshift += pixel_size * count;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// raw pixels\n\n\t\t\t\t\t\tcount *= pixel_size;\n\n\t\t\t\t\t\tfor ( i = 0; i < count; ++ i ) {\n\n\t\t\t\t\t\t\tpixel_data[ shift + i ] = data[ offset ++ ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshift += count;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t } else {\n\n\t\t\t\t// raw pixels\n\n\t\t\t\tpixel_data = data.subarray(\n\t\t\t\t\t offset, offset += ( use_pal ? header.width * header.height : pixel_total )\n\t\t\t\t);\n\n\t\t\t }\n\n\t\t\t return {\n\t\t\t\tpixel_data: pixel_data,\n\t\t\t\tpalettes: palettes\n\t\t\t };\n\n\t\t}\n\n\t\tfunction tgaGetImageData8bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes ) {\n\n\t\t\tvar colormap = palettes;\n\t\t\tvar color, i = 0, x, y;\n\t\t\tvar width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i ++ ) {\n\n\t\t\t\t\tcolor = image[ i ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = colormap[ ( color * 3 ) + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = colormap[ ( color * 3 ) + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = colormap[ ( color * 3 ) + 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData16bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tvar color, i = 0, x, y;\n\t\t\tvar width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 2 ) {\n\n\t\t\t\t\tcolor = image[ i + 0 ] + ( image[ i + 1 ] << 8 ); // Inversed ?\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = ( color & 0x7C00 ) >> 7;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = ( color & 0x03E0 ) >> 2;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = ( color & 0x001F ) >> 3;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = ( color & 0x8000 ) ? 0 : 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData24bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tvar i = 0, x, y;\n\t\t\tvar width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 3 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData32bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tvar i = 0, x, y;\n\t\t\tvar width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 4 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 2 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = image[ i + 3 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageDataGrey8bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tvar color, i = 0, x, y;\n\t\t\tvar width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i ++ ) {\n\n\t\t\t\t\tcolor = image[ i ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageDataGrey16bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tvar i = 0, x, y;\n\t\t\tvar width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 2 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = image[ i + 1 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction getTgaRGBA( data, width, height, image, palette ) {\n\n\t\t\tvar x_start,\n\t\t\t\ty_start,\n\t\t\t\tx_step,\n\t\t\t\ty_step,\n\t\t\t\tx_end,\n\t\t\t\ty_end;\n\n\t\t\tswitch ( ( header.flags & TGA_ORIGIN_MASK ) >> TGA_ORIGIN_SHIFT ) {\n\n\t\t\t\tdefault:\n\t\t\t\tcase TGA_ORIGIN_UL:\n\t\t\t\t\tx_start = 0;\n\t\t\t\t\tx_step = 1;\n\t\t\t\t\tx_end = width;\n\t\t\t\t\ty_start = 0;\n\t\t\t\t\ty_step = 1;\n\t\t\t\t\ty_end = height;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_BL:\n\t\t\t\t\tx_start = 0;\n\t\t\t\t\tx_step = 1;\n\t\t\t\t\tx_end = width;\n\t\t\t\t\ty_start = height - 1;\n\t\t\t\t\ty_step = - 1;\n\t\t\t\t\ty_end = - 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_UR:\n\t\t\t\t\tx_start = width - 1;\n\t\t\t\t\tx_step = - 1;\n\t\t\t\t\tx_end = - 1;\n\t\t\t\t\ty_start = 0;\n\t\t\t\t\ty_step = 1;\n\t\t\t\t\ty_end = height;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_BR:\n\t\t\t\t\tx_start = width - 1;\n\t\t\t\t\tx_step = - 1;\n\t\t\t\t\tx_end = - 1;\n\t\t\t\t\ty_start = height - 1;\n\t\t\t\t\ty_step = - 1;\n\t\t\t\t\ty_end = - 1;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( use_grey ) {\n\n\t\t\t\tswitch ( header.pixel_size ) {\n\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\ttgaGetImageDataGrey8bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\ttgaGetImageDataGrey16bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.TGALoader: Format not supported.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( header.pixel_size ) {\n\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\ttgaGetImageData8bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image, palette );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\ttgaGetImageData16bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 24:\n\t\t\t\t\t\ttgaGetImageData24bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 32:\n\t\t\t\t\t\ttgaGetImageData32bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.TGALoader: Format not supported.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Load image data according to specific method\n\t\t\t// var func = 'tgaGetImageData' + (use_grey ? 'Grey' : '') + (header.pixel_size) + 'bits';\n\t\t\t// func(data, y_start, y_step, y_end, x_start, x_step, x_end, width, image, palette );\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// TGA constants\n\n\t\tvar TGA_TYPE_NO_DATA = 0,\n\t\t\tTGA_TYPE_INDEXED = 1,\n\t\t\tTGA_TYPE_RGB = 2,\n\t\t\tTGA_TYPE_GREY = 3,\n\t\t\tTGA_TYPE_RLE_INDEXED = 9,\n\t\t\tTGA_TYPE_RLE_RGB = 10,\n\t\t\tTGA_TYPE_RLE_GREY = 11,\n\n\t\t\tTGA_ORIGIN_MASK = 0x30,\n\t\t\tTGA_ORIGIN_SHIFT = 0x04,\n\t\t\tTGA_ORIGIN_BL = 0x00,\n\t\t\tTGA_ORIGIN_BR = 0x01,\n\t\t\tTGA_ORIGIN_UL = 0x02,\n\t\t\tTGA_ORIGIN_UR = 0x03;\n\n\t\tif ( buffer.length < 19 ) console.error( 'THREE.TGALoader: Not enough data to contain header.' );\n\n\t\tvar content = new Uint8Array( buffer ),\n\t\t\toffset = 0,\n\t\t\theader = {\n\t\t\t\tid_length: content[ offset ++ ],\n\t\t\t\tcolormap_type: content[ offset ++ ],\n\t\t\t\timage_type: content[ offset ++ ],\n\t\t\t\tcolormap_index: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tcolormap_length: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tcolormap_size: content[ offset ++ ],\n\t\t\t\torigin: [\n\t\t\t\t\tcontent[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\t\tcontent[ offset ++ ] | content[ offset ++ ] << 8\n\t\t\t\t],\n\t\t\t\twidth: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\theight: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tpixel_size: content[ offset ++ ],\n\t\t\t\tflags: content[ offset ++ ]\n\t\t\t};\n\n\t\t// check tga if it is valid format\n\n\t\ttgaCheckHeader( header );\n\n\t\tif ( header.id_length + offset > buffer.length ) {\n\n\t\t\tconsole.error( 'THREE.TGALoader: No data.' );\n\n\t\t}\n\n\t\t// skip the needn't data\n\n\t\toffset += header.id_length;\n\n\t\t// get targa information about RLE compression and palette\n\n\t\tvar use_rle = false,\n\t\t\tuse_pal = false,\n\t\t\tuse_grey = false;\n\n\t\tswitch ( header.image_type ) {\n\n\t\t\tcase TGA_TYPE_RLE_INDEXED:\n\t\t\t\tuse_rle = true;\n\t\t\t\tuse_pal = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_INDEXED:\n\t\t\t\tuse_pal = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RLE_RGB:\n\t\t\t\tuse_rle = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RGB:\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RLE_GREY:\n\t\t\t\tuse_rle = true;\n\t\t\t\tuse_grey = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_GREY:\n\t\t\t\tuse_grey = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t//\n\n\t\tvar useOffscreen = typeof OffscreenCanvas !== 'undefined';\n\n\t\tvar canvas = useOffscreen ? new OffscreenCanvas( header.width, header.height ) : document.createElement( 'canvas' );\n\t\tcanvas.width = header.width;\n\t\tcanvas.height = header.height;\n\n\t\tvar context = canvas.getContext( '2d' );\n\t\tvar imageData = context.createImageData( header.width, header.height );\n\n\t\tvar result = tgaParse( use_rle, use_pal, header, offset, content );\n\t\tgetTgaRGBA( imageData.data, header.width, header.height, result.pixel_data, result.palettes );\n\n\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\treturn canvas;\n\n\t}\n\n} );\n\nexport { TGALoader };\n"
  },
  {
    "path": "libs/three.js/loaders/TTFLoader.js",
    "content": "import {\n\tFileLoader,\n\tLoader\n} from '../../../build/three.module.js';\nimport { opentype } from '../libs/opentype.module.min.js';\n\n/**\n * Requires opentype.js to be included in the project.\n * Loads TTF files and converts them into typeface JSON that can be used directly\n * to create THREE.Font objects.\n */\n\nvar TTFLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n\tthis.reversed = false;\n\n};\n\n\nTTFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: TTFLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( arraybuffer ) {\n\n\t\tfunction convert( font, reversed ) {\n\n\t\t\tvar round = Math.round;\n\n\t\t\tvar glyphs = {};\n\t\t\tvar scale = ( 100000 ) / ( ( font.unitsPerEm || 2048 ) * 72 );\n\n\t\t\tvar glyphIndexMap = font.encoding.cmap.glyphIndexMap;\n\t\t\tvar unicodes = Object.keys( glyphIndexMap );\n\n\t\t\tfor ( var i = 0; i < unicodes.length; i ++ ) {\n\n\t\t\t\tvar unicode = unicodes[ i ];\n\t\t\t\tvar glyph = font.glyphs.glyphs[ glyphIndexMap[ unicode ] ];\n\n\t\t\t\tif ( unicode !== undefined ) {\n\n\t\t\t\t\tvar token = {\n\t\t\t\t\t\tha: round( glyph.advanceWidth * scale ),\n\t\t\t\t\t\tx_min: round( glyph.xMin * scale ),\n\t\t\t\t\t\tx_max: round( glyph.xMax * scale ),\n\t\t\t\t\t\to: ''\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( reversed ) {\n\n\t\t\t\t\t\tglyph.path.commands = reverseCommands( glyph.path.commands );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tglyph.path.commands.forEach( function ( command ) {\n\n\t\t\t\t\t\tif ( command.type.toLowerCase() === 'c' ) {\n\n\t\t\t\t\t\t\tcommand.type = 'b';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttoken.o += command.type.toLowerCase() + ' ';\n\n\t\t\t\t\t\tif ( command.x !== undefined && command.y !== undefined ) {\n\n\t\t\t\t\t\t\ttoken.o += round( command.x * scale ) + ' ' + round( command.y * scale ) + ' ';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( command.x1 !== undefined && command.y1 !== undefined ) {\n\n\t\t\t\t\t\t\ttoken.o += round( command.x1 * scale ) + ' ' + round( command.y1 * scale ) + ' ';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( command.x2 !== undefined && command.y2 !== undefined ) {\n\n\t\t\t\t\t\t\ttoken.o += round( command.x2 * scale ) + ' ' + round( command.y2 * scale ) + ' ';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tglyphs[ String.fromCodePoint( glyph.unicode ) ] = token;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tglyphs: glyphs,\n\t\t\t\tfamilyName: font.getEnglishName( 'fullName' ),\n\t\t\t\tascender: round( font.ascender * scale ),\n\t\t\t\tdescender: round( font.descender * scale ),\n\t\t\t\tunderlinePosition: font.tables.post.underlinePosition,\n\t\t\t\tunderlineThickness: font.tables.post.underlineThickness,\n\t\t\t\tboundingBox: {\n\t\t\t\t\txMin: font.tables.head.xMin,\n\t\t\t\t\txMax: font.tables.head.xMax,\n\t\t\t\t\tyMin: font.tables.head.yMin,\n\t\t\t\t\tyMax: font.tables.head.yMax\n\t\t\t\t},\n\t\t\t\tresolution: 1000,\n\t\t\t\toriginal_font_information: font.tables.name\n\t\t\t};\n\n\t\t}\n\n\t\tfunction reverseCommands( commands ) {\n\n\t\t\tvar paths = [];\n\t\t\tvar path;\n\n\t\t\tcommands.forEach( function ( c ) {\n\n\t\t\t\tif ( c.type.toLowerCase() === 'm' ) {\n\n\t\t\t\t\tpath = [ c ];\n\t\t\t\t\tpaths.push( path );\n\n\t\t\t\t} else if ( c.type.toLowerCase() !== 'z' ) {\n\n\t\t\t\t\tpath.push( c );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tvar reversed = [];\n\n\t\t\tpaths.forEach( function ( p ) {\n\n\t\t\t\tvar result = {\n\t\t\t\t\ttype: 'm',\n\t\t\t\t\tx: p[ p.length - 1 ].x,\n\t\t\t\t\ty: p[ p.length - 1 ].y\n\t\t\t\t};\n\n\t\t\t\treversed.push( result );\n\n\t\t\t\tfor ( var i = p.length - 1; i > 0; i -- ) {\n\n\t\t\t\t\tvar command = p[ i ];\n\t\t\t\t\tvar result = { type: command.type };\n\n\t\t\t\t\tif ( command.x2 !== undefined && command.y2 !== undefined ) {\n\n\t\t\t\t\t\tresult.x1 = command.x2;\n\t\t\t\t\t\tresult.y1 = command.y2;\n\t\t\t\t\t\tresult.x2 = command.x1;\n\t\t\t\t\t\tresult.y2 = command.y1;\n\n\t\t\t\t\t} else if ( command.x1 !== undefined && command.y1 !== undefined ) {\n\n\t\t\t\t\t\tresult.x1 = command.x1;\n\t\t\t\t\t\tresult.y1 = command.y1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresult.x = p[ i - 1 ].x;\n\t\t\t\t\tresult.y = p[ i - 1 ].y;\n\t\t\t\t\treversed.push( result );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn reversed;\n\n\t\t}\n\n\t\tif ( typeof opentype === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.TTFLoader: The loader requires opentype.js. Make sure it\\'s included before using the loader.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn convert( opentype.parse( arraybuffer ), this.reversed ); // eslint-disable-line no-undef\n\n\t}\n\n} );\n\nexport { TTFLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/TiltLoader.js",
    "content": "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tDoubleSide,\n\tFileLoader,\n\tGroup,\n\tLoader,\n\tMesh,\n\tMeshBasicMaterial,\n\tRawShaderMaterial,\n\tTextureLoader,\n\tQuaternion,\n\tVector3\n} from '../../../build/three.module.js';\nimport { JSZip } from '../libs/jszip.module.min.js';\n\nclass TiltLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst group = new Group();\n\t\t// https://docs.google.com/document/d/11ZsHozYn9FnWG7y3s3WAyKIACfbfwb4PbaS8cZ_xjvo/edit#\n\n\t\tconst zip = new JSZip( buffer.slice( 16 ) ); // eslint-disable-line no-undef\n\n\t\t/*\n\t\tconst thumbnail = zip.files[ 'thumbnail.png' ].asArrayBuffer();\n\t\tconst img = document.createElement( 'img' );\n\t\timg.src = URL.createObjectURL( new Blob( [ thumbnail ] ) );\n\t\tdocument.body.appendChild( img );\n\t\t*/\n\n\t\tconst metadata = JSON.parse( zip.files[ 'metadata.json' ].asText() );\n\n\t\t/*\n\t\tconst blob = new Blob( [ zip.files[ 'data.sketch' ].asArrayBuffer() ], { type: 'application/octet-stream' } );\n\t\twindow.open( URL.createObjectURL( blob ) );\n\t\t*/\n\n\t\tconst data = new DataView( zip.files[ 'data.sketch' ].asArrayBuffer() );\n\n\t\tconst num_strokes = data.getInt32( 16, true );\n\n\t\tconst brushes = {};\n\n\t\tlet offset = 20;\n\n\t\tfor ( let i = 0; i < num_strokes; i ++ ) {\n\n\t\t\tconst brush_index = data.getInt32( offset, true );\n\n\t\t\tconst brush_color = [\n\t\t\t\tdata.getFloat32( offset + 4, true ),\n\t\t\t\tdata.getFloat32( offset + 8, true ),\n\t\t\t\tdata.getFloat32( offset + 12, true ),\n\t\t\t\tdata.getFloat32( offset + 16, true )\n\t\t\t];\n\t\t\tconst brush_size = data.getFloat32( offset + 20, true );\n\t\t\tconst stroke_mask = data.getUint32( offset + 24, true );\n\t\t\tconst controlpoint_mask = data.getUint32( offset + 28, true );\n\n\t\t\tlet offset_stroke_mask = 0;\n\t\t\tlet offset_controlpoint_mask = 0;\n\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t// TOFIX: I don't understand these masks yet\n\n\t\t\t\tconst byte = 1 << j;\n\t\t\t\tif ( ( stroke_mask & byte ) > 0 ) offset_stroke_mask += 4;\n\t\t\t\tif ( ( controlpoint_mask & byte ) > 0 ) offset_controlpoint_mask += 4;\n\n\t\t\t}\n\n\t\t\t// console.log( { brush_index, brush_color, brush_size, stroke_mask, controlpoint_mask } );\n\t\t\t// console.log( offset_stroke_mask, offset_controlpoint_mask );\n\n\t\t\toffset = offset + 28 + offset_stroke_mask + 4; // TOFIX: This is wrong\n\n\t\t\tconst num_control_points = data.getInt32( offset, true );\n\n\t\t\t// console.log( { num_control_points } );\n\n\t\t\tconst positions = new Float32Array( num_control_points * 3 );\n\t\t\tconst quaternions = new Float32Array( num_control_points * 4 );\n\n\t\t\toffset = offset + 4;\n\n\t\t\tfor ( let j = 0, k = 0; j < positions.length; j += 3, k += 4 ) {\n\n\t\t\t\tpositions[ j + 0 ] = data.getFloat32( offset + 0, true );\n\t\t\t\tpositions[ j + 1 ] = data.getFloat32( offset + 4, true );\n\t\t\t\tpositions[ j + 2 ] = data.getFloat32( offset + 8, true );\n\n\t\t\t\tquaternions[ k + 0 ] = data.getFloat32( offset + 12, true );\n\t\t\t\tquaternions[ k + 1 ] = data.getFloat32( offset + 16, true );\n\t\t\t\tquaternions[ k + 2 ] = data.getFloat32( offset + 20, true );\n\t\t\t\tquaternions[ k + 3 ] = data.getFloat32( offset + 24, true );\n\n\t\t\t\toffset = offset + 28 + offset_controlpoint_mask; // TOFIX: This is wrong\n\n\t\t\t}\n\n\t\t\tif ( brush_index in brushes === false ) {\n\n\t\t\t\tbrushes[ brush_index ] = [];\n\n\t\t\t}\n\n\t\t\tbrushes[ brush_index ].push( [ positions, quaternions, brush_size, brush_color ] );\n\n\t\t}\n\n\t\tfor ( const brush_index in brushes ) {\n\n\t\t\tconst geometry = new StrokeGeometry( brushes[ brush_index ] );\n\t\t\tconst material = getMaterial( metadata.BrushIndex[ brush_index ] );\n\n\t\t\tgroup.add( new Mesh( geometry, material ) );\n\n\t\t}\n\n\t\treturn group;\n\n\t}\n\n}\n\nclass StrokeGeometry extends BufferGeometry {\n\n\tconstructor( strokes ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\t\tconst uvs = [];\n\n\t\tconst position = new Vector3();\n\t\tconst prevPosition = new Vector3();\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst prevQuaternion = new Quaternion();\n\n\t\tconst vector1 = new Vector3();\n\t\tconst vector2 = new Vector3();\n\t\tconst vector3 = new Vector3();\n\t\tconst vector4 = new Vector3();\n\n\t\t// size = size / 2;\n\n\t\tfor ( const k in strokes ) {\n\n\t\t\tconst stroke = strokes[ k ];\n\t\t\tconst positions = stroke[ 0 ];\n\t\t\tconst quaternions = stroke[ 1 ];\n\t\t\tconst size = stroke[ 2 ];\n\t\t\tconst color = stroke[ 3 ];\n\n\t\t\tprevPosition.fromArray( positions, 0 );\n\t\t\tprevQuaternion.fromArray( quaternions, 0 );\n\n\t\t\tfor ( let i = 3, j = 4, l = positions.length; i < l; i += 3, j += 4 ) {\n\n\t\t\t\tposition.fromArray( positions, i );\n\t\t\t\tquaternion.fromArray( quaternions, j );\n\n\t\t\t\tvector1.set( - size, 0, 0 );\n\t\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\t\tvector1.add( position );\n\n\t\t\t\tvector2.set( size, 0, 0 );\n\t\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\t\tvector2.add( position );\n\n\t\t\t\tvector3.set( size, 0, 0 );\n\t\t\t\tvector3.applyQuaternion( prevQuaternion );\n\t\t\t\tvector3.add( prevPosition );\n\n\t\t\t\tvector4.set( - size, 0, 0 );\n\t\t\t\tvector4.applyQuaternion( prevQuaternion );\n\t\t\t\tvector4.add( prevPosition );\n\n\t\t\t\tvertices.push( vector1.x, vector1.y, - vector1.z );\n\t\t\t\tvertices.push( vector2.x, vector2.y, - vector2.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, - vector4.z );\n\n\t\t\t\tvertices.push( vector2.x, vector2.y, - vector2.z );\n\t\t\t\tvertices.push( vector3.x, vector3.y, - vector3.z );\n\t\t\t\tvertices.push( vector4.x, vector4.y, - vector4.z );\n\n\t\t\t\tprevPosition.copy( position );\n\t\t\t\tprevQuaternion.copy( quaternion );\n\n\t\t\t\tcolors.push( ...color );\n\t\t\t\tcolors.push( ...color );\n\t\t\t\tcolors.push( ...color );\n\n\t\t\t\tcolors.push( ...color );\n\t\t\t\tcolors.push( ...color );\n\t\t\t\tcolors.push( ...color );\n\n\t\t\t\tconst p1 = i / l;\n\t\t\t\tconst p2 = ( i - 3 ) / l;\n\n\t\t\t\tuvs.push( p1, 0 );\n\t\t\t\tuvs.push( p1, 1 );\n\t\t\t\tuvs.push( p2, 0 );\n\n\t\t\t\tuvs.push( p1, 1 );\n\t\t\t\tuvs.push( p2, 1 );\n\t\t\t\tuvs.push( p2, 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new BufferAttribute( new Float32Array( vertices ), 3 ) );\n\t\tthis.setAttribute( 'color', new BufferAttribute( new Float32Array( colors ), 4 ) );\n\t\tthis.setAttribute( 'uv', new BufferAttribute( new Float32Array( uvs ), 2 ) );\n\n\t}\n\n}\n\nconst BRUSH_LIST_ARRAY = {\n\t'89d104cd-d012-426b-b5b3-bbaee63ac43c': 'Bubbles',\n\t'700f3aa8-9a7c-2384-8b8a-ea028905dd8c': 'CelVinyl',\n\t'0f0ff7b2-a677-45eb-a7d6-0cd7206f4816': 'ChromaticWave',\n\t'1161af82-50cf-47db-9706-0c3576d43c43': 'CoarseBristles',\n\t'79168f10-6961-464a-8be1-57ed364c5600': 'CoarseBristlesSingleSided',\n\t'1caa6d7d-f015-3f54-3a4b-8b5354d39f81': 'Comet',\n\t'c8313697-2563-47fc-832e-290f4c04b901': 'DiamondHull',\n\t'4391aaaa-df73-4396-9e33-31e4e4930b27': 'Disco',\n\t'd1d991f2-e7a0-4cf1-b328-f57e915e6260': 'DotMarker',\n\t'6a1cf9f9-032c-45ec-9b1d-a6680bee30f7': 'Dots',\n\t'0d3889f3-3ede-470c-8af4-f44813306126': 'DoubleTaperedFlat',\n\t'0d3889f3-3ede-470c-8af4-de4813306126': 'DoubleTaperedMarker',\n\t'd0262945-853c-4481-9cbd-88586bed93cb': 'DuctTape',\n\t'3ca16e2f-bdcd-4da2-8631-dcef342f40f1': 'DuctTapeSingleSided',\n\t'f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51': 'Electricity',\n\t'02ffb866-7fb2-4d15-b761-1012cefb1360': 'Embers',\n\t'cb92b597-94ca-4255-b017-0e3f42f12f9e': 'Fire',\n\t'2d35bcf0-e4d8-452c-97b1-3311be063130': 'Flat',\n\t'55303bc4-c749-4a72-98d9-d23e68e76e18': 'FlatDeprecated',\n\t'280c0a7a-aad8-416c-a7d2-df63d129ca70': 'FlatSingleSided',\n\t'cf019139-d41c-4eb0-a1d0-5cf54b0a42f3': 'Highlighter',\n\t'6a1cf9f9-032c-45ec-9b6e-a6680bee32e9': 'HyperGrid',\n\t'dce872c2-7b49-4684-b59b-c45387949c5c': 'Hypercolor',\n\t'e8ef32b1-baa8-460a-9c2c-9cf8506794f5': 'HypercolorSingleSided',\n\t'2f212815-f4d3-c1a4-681a-feeaf9c6dc37': 'Icing',\n\t'f5c336cf-5108-4b40-ade9-c687504385ab': 'Ink',\n\t'c0012095-3ffd-4040-8ee1-fc180d346eaa': 'InkSingleSided',\n\t'4a76a27a-44d8-4bfe-9a8c-713749a499b0': 'Leaves',\n\t'ea19de07-d0c0-4484-9198-18489a3c1487': 'LeavesSingleSided',\n\t'2241cd32-8ba2-48a5-9ee7-2caef7e9ed62': 'Light',\n\t'4391aaaa-df81-4396-9e33-31e4e4930b27': 'LightWire',\n\t'd381e0f5-3def-4a0d-8853-31e9200bcbda': 'Lofted',\n\t'429ed64a-4e97-4466-84d3-145a861ef684': 'Marker',\n\t'79348357-432d-4746-8e29-0e25c112e3aa': 'MatteHull',\n\t'b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6': 'NeonPulse',\n\t'f72ec0e7-a844-4e38-82e3-140c44772699': 'OilPaint',\n\t'c515dad7-4393-4681-81ad-162ef052241b': 'OilPaintSingleSided',\n\t'f1114e2e-eb8d-4fde-915a-6e653b54e9f5': 'Paper',\n\t'759f1ebd-20cd-4720-8d41-234e0da63716': 'PaperSingleSided',\n\t'e0abbc80-0f80-e854-4970-8924a0863dcc': 'Petal',\n\t'c33714d1-b2f9-412e-bd50-1884c9d46336': 'Plasma',\n\t'ad1ad437-76e2-450d-a23a-e17f8310b960': 'Rainbow',\n\t'faaa4d44-fcfb-4177-96be-753ac0421ba3': 'ShinyHull',\n\t'70d79cca-b159-4f35-990c-f02193947fe8': 'Smoke',\n\t'd902ed8b-d0d1-476c-a8de-878a79e3a34c': 'Snow',\n\t'accb32f5-4509-454f-93f8-1df3fd31df1b': 'SoftHighlighter',\n\t'cf7f0059-7aeb-53a4-2b67-c83d863a9ffa': 'Spikes',\n\t'8dc4a70c-d558-4efd-a5ed-d4e860f40dc3': 'Splatter',\n\t'7a1c8107-50c5-4b70-9a39-421576d6617e': 'SplatterSingleSided',\n\t'0eb4db27-3f82-408d-b5a1-19ebd7d5b711': 'Stars',\n\t'44bb800a-fbc3-4592-8426-94ecb05ddec3': 'Streamers',\n\t'0077f88c-d93a-42f3-b59b-b31c50cdb414': 'Taffy',\n\t'b468c1fb-f254-41ed-8ec9-57030bc5660c': 'TaperedFlat',\n\t'c8ccb53d-ae13-45ef-8afb-b730d81394eb': 'TaperedFlatSingleSided',\n\t'd90c6ad8-af0f-4b54-b422-e0f92abe1b3c': 'TaperedMarker',\n\t'1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0': 'TaperedMarker_Flat',\n\t'75b32cf0-fdd6-4d89-a64b-e2a00b247b0f': 'ThickPaint',\n\t'fdf0326a-c0d1-4fed-b101-9db0ff6d071f': 'ThickPaintSingleSided',\n\t'4391385a-df73-4396-9e33-31e4e4930b27': 'Toon',\n\t'a8fea537-da7c-4d4b-817f-24f074725d6d': 'UnlitHull',\n\t'd229d335-c334-495a-a801-660ac8a87360': 'VelvetInk',\n\t'10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab': 'Waveform',\n\t'b67c0e81-ce6d-40a8-aeb0-ef036b081aa3': 'WetPaint',\n\t'dea67637-cd1a-27e4-c9b1-52f4bbcb84e5': 'WetPaintSingleSided',\n\t'5347acf0-a8e2-47b6-8346-30c70719d763': 'WigglyGraphite',\n\t'e814fef1-97fd-7194-4a2f-50c2bb918be2': 'WigglyGraphiteSingleSided',\n\t'4391385a-cf83-4396-9e33-31e4e4930b27': 'Wire'\n};\n\nconst common = {\n\n\t'colors': {\n\n\t\t'BloomColor': `\n\t\t\tvec3 BloomColor(vec3 color, float gain) {\n\t\t\t\t// Guarantee that there's at least a little bit of all 3 channels.\n\t\t\t\t// This makes fully-saturated strokes (which only have 2 non-zero\n\t\t\t\t// color channels) eventually clip to white rather than to a secondary.\n\t\t\t\tfloat cmin = length(color.rgb) * .05;\n\t\t\t\tcolor.rgb = max(color.rgb, vec3(cmin, cmin, cmin));\n\t\t\t\t// If we try to remove this pow() from .a, it brightens up\n\t\t\t\t// pressure-sensitive strokes; looks better as-is.\n\t\t\t\tcolor = pow(color, vec3(2.2));\n\t\t\t\tcolor.rgb *= 2. * exp(gain * 10.);\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`,\n\n\t\t'LinearToSrgb': `\n\t\t\tvec3 LinearToSrgb(vec3 color) {\n\t\t\t\t// Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html\n\t\t\t\tvec3 linearColor = color.rgb;\n\t\t\t\tvec3 S1 = sqrt(linearColor);\n\t\t\t\tvec3 S2 = sqrt(S1);\n\t\t\t\tvec3 S3 = sqrt(S2);\n\t\t\t\tcolor.rgb = 0.662002687 * S1 + 0.684122060 * S2 - 0.323583601 * S3 - 0.0225411470 * linearColor;\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`,\n\n\t\t'hsv': `\n\t\t\t// uniform sampler2D lookupTex;\n\t\t\tvec4 lookup(vec4 textureColor) {\n\t\t\t\treturn textureColor;\n\t\t\t}\n\n\t\t\tvec3 lookup(vec3 textureColor) {\n\t\t\t\treturn textureColor;\n\t\t\t}\n\n\t\t\tvec3 hsv2rgb( vec3 hsv ) {\n\t\t\t\tvec3 rgb = clamp( abs(mod(hsv.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 );\n\t\t\t\treturn hsv.z * mix( vec3(1.0), rgb, hsv.y);\n\t\t\t}\n\n\t\t\tvec3 rgb2hsv( vec3 rgb ) {\n\t\t\t\tvec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n\t\t\t\tvec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g));\n\t\t\t\tvec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\n\t\t\t\tfloat d = q.x - min(q.w, q.y);\n\t\t\t\tfloat e = 1.0e-10;\n\n\t\t\t\treturn vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n\t\t\t}\n\t\t`,\n\n\t\t'SrgbToLinear': `\n\t\t\tvec3 SrgbToLinear(vec3 color) {\n\t\t\t\t// Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html\n\t\t\t\tvec3 sRGB = color.rgb;\n\t\t\t\tcolor.rgb = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`\n\n\t}\n\n};\n\nconst loader = new TextureLoader().setPath( './textures/tiltbrush/' );\n\nconst shaders = {\n\t'Light': {\n\t\tuniforms: {\n\t\t\tmainTex: { value: loader.load( 'Light.webp' ) },\n\t\t\talphaTest: { value: 0.067 },\n\t\t\temission_gain: { value: 0.45 },\n\t\t\talpha: { value: 1 },\n\t\t},\n\t\tvertexShader: `\n\t\t\tprecision highp float;\n\t\t\tprecision highp int;\n\n\t\t\tattribute vec2 uv;\n\t\t\tattribute vec4 color;\n\t\t\tattribute vec3 position;\n\n\t\t\tuniform mat4 modelMatrix;\n\t\t\tuniform mat4 modelViewMatrix;\n\t\t\tuniform mat4 projectionMatrix;\n\t\t\tuniform mat4 viewMatrix;\n\t\t\tuniform mat3 normalMatrix;\n\t\t\tuniform vec3 cameraPosition;\n\n\t\t\tvarying vec2 vUv;\n\t\t\tvarying vec3 vColor;\n\n\t\t\t${ common.colors.LinearToSrgb }\n\t\t\t${ common.colors.hsv }\n\n\t\t\tvoid main() {\n\n\t\t\t\tvUv = uv;\n\n\t\t\t\tvColor = lookup(color.rgb);\n\n\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t}\n\t\t`,\n\t\tfragmentShader: `\n\t\t\tprecision highp float;\n\t\t\tprecision highp int;\n\n\t\t\tuniform float emission_gain;\n\n\t\t\tuniform sampler2D mainTex;\n\t\t\tuniform float alphaTest;\n\n\t\t\tvarying vec2 vUv;\n\t\t\tvarying vec3 vColor;\n\n\t\t\t${ common.colors.BloomColor }\n\t\t\t${ common.colors.SrgbToLinear }\n\n\t\t\tvoid main(){\n\t\t\t\tvec4 col = texture2D(mainTex, vUv);\n\t\t\t\tvec3 color = vColor;\n\t\t\t\tcolor = BloomColor(color, emission_gain);\n\t\t\t\tcolor = color * col.rgb;\n\t\t\t\tcolor = color * col.a;\n\t\t\t\tcolor = SrgbToLinear(color);\n\t\t\t\tgl_FragColor = vec4(color, 1.0);\n\t\t\t}\n\t\t`,\n\t\tside: 2,\n\t\ttransparent: true,\n\t\tdepthFunc: 2,\n\t\tdepthWrite: true,\n\t\tdepthTest: false,\n\t\tblending: 5,\n\t\tblendDst: 201,\n\t\tblendDstAlpha: 201,\n\t\tblendEquation: 100,\n\t\tblendEquationAlpha: 100,\n\t\tblendSrc: 201,\n\t\tblendSrcAlpha: 201,\n\t}\n\n};\n\nfunction getMaterial( GUID ) {\n\n\tconst name = BRUSH_LIST_ARRAY[ GUID ];\n\n\tswitch ( name ) {\n\n\t\tcase 'Light':\n\t\t\treturn new RawShaderMaterial( shaders.Light );\n\n\t\tdefault:\n\t\t\treturn new MeshBasicMaterial( { vertexColors: true, side: DoubleSide } );\n\n\t}\n\n}\n\nexport { TiltLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/VOXLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tMesh,\n\tMeshStandardMaterial\n} from '../../../build/three.module.js';\n\nclass VOXLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst data = new DataView( buffer );\n\n\t\tconst id = data.getInt32( 0, true );\n\t\tconst version = data.getUint32( 4, true );\n\n\t\tif ( id !== 542658390 || version !== 150 ) {\n\n\t\t\tconsole.error( 'Not a valid VOX file' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst DEFAULT_PALETTE = [\n\t\t\t0x00000000, 0xffffffff, 0xffccffff, 0xff99ffff, 0xff66ffff, 0xff33ffff, 0xff00ffff, 0xffffccff,\n\t\t\t0xffccccff, 0xff99ccff, 0xff66ccff, 0xff33ccff, 0xff00ccff, 0xffff99ff, 0xffcc99ff, 0xff9999ff,\n\t\t\t0xff6699ff, 0xff3399ff, 0xff0099ff, 0xffff66ff, 0xffcc66ff, 0xff9966ff, 0xff6666ff, 0xff3366ff,\n\t\t\t0xff0066ff, 0xffff33ff, 0xffcc33ff, 0xff9933ff, 0xff6633ff, 0xff3333ff, 0xff0033ff, 0xffff00ff,\n\t\t\t0xffcc00ff, 0xff9900ff, 0xff6600ff, 0xff3300ff, 0xff0000ff, 0xffffffcc, 0xffccffcc, 0xff99ffcc,\n\t\t\t0xff66ffcc, 0xff33ffcc, 0xff00ffcc, 0xffffcccc, 0xffcccccc, 0xff99cccc, 0xff66cccc, 0xff33cccc,\n\t\t\t0xff00cccc, 0xffff99cc, 0xffcc99cc, 0xff9999cc, 0xff6699cc, 0xff3399cc, 0xff0099cc, 0xffff66cc,\n\t\t\t0xffcc66cc, 0xff9966cc, 0xff6666cc, 0xff3366cc, 0xff0066cc, 0xffff33cc, 0xffcc33cc, 0xff9933cc,\n\t\t\t0xff6633cc, 0xff3333cc, 0xff0033cc, 0xffff00cc, 0xffcc00cc, 0xff9900cc, 0xff6600cc, 0xff3300cc,\n\t\t\t0xff0000cc, 0xffffff99, 0xffccff99, 0xff99ff99, 0xff66ff99, 0xff33ff99, 0xff00ff99, 0xffffcc99,\n\t\t\t0xffcccc99, 0xff99cc99, 0xff66cc99, 0xff33cc99, 0xff00cc99, 0xffff9999, 0xffcc9999, 0xff999999,\n\t\t\t0xff669999, 0xff339999, 0xff009999, 0xffff6699, 0xffcc6699, 0xff996699, 0xff666699, 0xff336699,\n\t\t\t0xff006699, 0xffff3399, 0xffcc3399, 0xff993399, 0xff663399, 0xff333399, 0xff003399, 0xffff0099,\n\t\t\t0xffcc0099, 0xff990099, 0xff660099, 0xff330099, 0xff000099, 0xffffff66, 0xffccff66, 0xff99ff66,\n\t\t\t0xff66ff66, 0xff33ff66, 0xff00ff66, 0xffffcc66, 0xffcccc66, 0xff99cc66, 0xff66cc66, 0xff33cc66,\n\t\t\t0xff00cc66, 0xffff9966, 0xffcc9966, 0xff999966, 0xff669966, 0xff339966, 0xff009966, 0xffff6666,\n\t\t\t0xffcc6666, 0xff996666, 0xff666666, 0xff336666, 0xff006666, 0xffff3366, 0xffcc3366, 0xff993366,\n\t\t\t0xff663366, 0xff333366, 0xff003366, 0xffff0066, 0xffcc0066, 0xff990066, 0xff660066, 0xff330066,\n\t\t\t0xff000066, 0xffffff33, 0xffccff33, 0xff99ff33, 0xff66ff33, 0xff33ff33, 0xff00ff33, 0xffffcc33,\n\t\t\t0xffcccc33, 0xff99cc33, 0xff66cc33, 0xff33cc33, 0xff00cc33, 0xffff9933, 0xffcc9933, 0xff999933,\n\t\t\t0xff669933, 0xff339933, 0xff009933, 0xffff6633, 0xffcc6633, 0xff996633, 0xff666633, 0xff336633,\n\t\t\t0xff006633, 0xffff3333, 0xffcc3333, 0xff993333, 0xff663333, 0xff333333, 0xff003333, 0xffff0033,\n\t\t\t0xffcc0033, 0xff990033, 0xff660033, 0xff330033, 0xff000033, 0xffffff00, 0xffccff00, 0xff99ff00,\n\t\t\t0xff66ff00, 0xff33ff00, 0xff00ff00, 0xffffcc00, 0xffcccc00, 0xff99cc00, 0xff66cc00, 0xff33cc00,\n\t\t\t0xff00cc00, 0xffff9900, 0xffcc9900, 0xff999900, 0xff669900, 0xff339900, 0xff009900, 0xffff6600,\n\t\t\t0xffcc6600, 0xff996600, 0xff666600, 0xff336600, 0xff006600, 0xffff3300, 0xffcc3300, 0xff993300,\n\t\t\t0xff663300, 0xff333300, 0xff003300, 0xffff0000, 0xffcc0000, 0xff990000, 0xff660000, 0xff330000,\n\t\t\t0xff0000ee, 0xff0000dd, 0xff0000bb, 0xff0000aa, 0xff000088, 0xff000077, 0xff000055, 0xff000044,\n\t\t\t0xff000022, 0xff000011, 0xff00ee00, 0xff00dd00, 0xff00bb00, 0xff00aa00, 0xff008800, 0xff007700,\n\t\t\t0xff005500, 0xff004400, 0xff002200, 0xff001100, 0xffee0000, 0xffdd0000, 0xffbb0000, 0xffaa0000,\n\t\t\t0xff880000, 0xff770000, 0xff550000, 0xff440000, 0xff220000, 0xff110000, 0xffeeeeee, 0xffdddddd,\n\t\t\t0xffbbbbbb, 0xffaaaaaa, 0xff888888, 0xff777777, 0xff555555, 0xff444444, 0xff222222, 0xff111111\n\t\t];\n\n\t\tlet i = 8;\n\n\t\tlet chunk;\n\t\tconst chunks = [];\n\n\t\twhile ( i < data.byteLength ) {\n\n\t\t\tlet id = '';\n\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\tid += String.fromCharCode( data.getInt8( i ++, true ) );\n\n\t\t\t}\n\n\t\t\tconst chunkSize = data.getInt32( i, true ); i += 4;\n\t\t\tdata.getInt32( i, true ); i += 4; // childChunks\n\n\t\t\tif ( id === 'SIZE' ) {\n\n\t\t\t\tconst x = data.getInt32( i, true ); i += 4;\n\t\t\t\tconst y = data.getInt32( i, true ); i += 4;\n\t\t\t\tconst z = data.getInt32( i, true ); i += 4;\n\n\t\t\t\tchunk = {\n\t\t\t\t\tpalette: DEFAULT_PALETTE,\n\t\t\t\t\tsize: { x: x, y: y, z: z },\n\t\t\t\t};\n\n\t\t\t\tchunks.push( chunk );\n\n\t\t\t\ti += chunkSize - ( 3 * 4 );\n\n\t\t\t} else if ( id === 'XYZI' ) {\n\n\t\t\t\tconst numVoxels = data.getInt32( i, true ); i += 4;\n\t\t\t\tchunk.data = new Int8Array( buffer, i, numVoxels * 4 );\n\n\t\t\t\ti += numVoxels * 4;\n\n\t\t\t} else if ( id === 'RGBA' ) {\n\n\t\t\t\tconst palette = [ 0 ];\n\n\t\t\t\tfor ( let j = 0; j < 256; j ++ ) {\n\n\t\t\t\t\tpalette[ j + 1 ] = data.getInt32( i, true ); i += 4;\n\n\t\t\t\t}\n\n\t\t\t\tchunk.palette = palette;\n\n\t\t\t} else {\n\n\t\t\t\t// console.log( id, chunkSize, childChunks );\n\n\t\t\t\ti += chunkSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn chunks;\n\n\t}\n\n}\n\nclass VOXMesh extends Mesh {\n\n\tconstructor( chunk ) {\n\n\t\tconst data = chunk.data;\n\t\tconst size = chunk.size;\n\t\tconst palette = chunk.palette;\n\n\t\t//\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst nx = [ 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1 ];\n\t\tconst px = [ 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0 ];\n\t\tconst py = [ 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1 ];\n\t\tconst ny = [ 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0 ];\n\t\tconst nz = [ 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0 ];\n\t\tconst pz = [ 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1 ];\n\n\t\tfunction add( tile, x, y, z, r, g, b ) {\n\n\t\t\tx -= size.x / 2;\n\t\t\ty -= size.z / 2;\n\t\t\tz += size.y / 2;\n\n\t\t\tfor ( let i = 0; i < 18; i += 3 ) {\n\n\t\t\t\tvertices.push( tile[ i + 0 ] + x, tile[ i + 1 ] + y, tile[ i + 2 ] + z );\n\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Store data in a volume for sampling\n\n\t\tconst offsety = size.x;\n\t\tconst offsetz = size.x * size.y;\n\n\t\tconst array = new Uint8Array( size.x * size.y * size.z );\n\n\t\tfor ( let j = 0; j < data.length; j += 4 ) {\n\n\t\t\tconst x = data[ j + 0 ];\n\t\t\tconst y = data[ j + 1 ];\n\t\t\tconst z = data[ j + 2 ];\n\n\t\t\tconst index = x + ( y * offsety ) + ( z * offsetz );\n\n\t\t\tarray[ index ] = 255;\n\n\t\t}\n\n\t\t// Construct geometry\n\n\t\tlet hasColors = false;\n\n\t\tfor ( let j = 0; j < data.length; j += 4 ) {\n\n\t\t\tconst x = data[ j + 0 ];\n\t\t\tconst y = data[ j + 1 ];\n\t\t\tconst z = data[ j + 2 ];\n\t\t\tconst c = data[ j + 3 ];\n\n\t\t\tconst hex = palette[ c ];\n\t\t\tconst r = ( hex >> 0 & 0xff ) / 0xff;\n\t\t\tconst g = ( hex >> 8 & 0xff ) / 0xff;\n\t\t\tconst b = ( hex >> 16 & 0xff ) / 0xff;\n\n\t\t\tif ( r > 0 || g > 0 || b > 0 ) hasColors = true;\n\n\t\t\tconst index = x + ( y * offsety ) + ( z * offsetz );\n\n\t\t\tif ( array[ index + 1 ] === 0 || x === size.x - 1 ) add( px, x, z, - y, r, g, b );\n\t\t\tif ( array[ index - 1 ] === 0 || x === 0 ) add( nx, x, z, - y, r, g, b );\n\t\t\tif ( array[ index + offsety ] === 0 || y === size.y - 1 ) add( ny, x, z, - y, r, g, b );\n\t\t\tif ( array[ index - offsety ] === 0 || y === 0 ) add( py, x, z, - y, r, g, b );\n\t\t\tif ( array[ index + offsetz ] === 0 || z === size.z - 1 ) add( pz, x, z, - y, r, g, b );\n\t\t\tif ( array[ index - offsetz ] === 0 || z === 0 ) add( nz, x, z, - y, r, g, b );\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.computeVertexNormals();\n\n\t\tif ( hasColors ) geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new MeshStandardMaterial( { vertexColors: hasColors } );\n\n\t\tsuper( geometry, material );\n\n\t}\n\n}\n\nexport { VOXLoader, VOXMesh };\n"
  },
  {
    "path": "libs/three.js/loaders/VRMLLoader.js",
    "content": "import {\n\tBackSide,\n\tBoxBufferGeometry,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tConeBufferGeometry,\n\tCylinderBufferGeometry,\n\tDataTexture,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tLoaderUtils,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhongMaterial,\n\tObject3D,\n\tPoints,\n\tPointsMaterial,\n\tQuaternion,\n\tRGBAFormat,\n\tRGBFormat,\n\tRepeatWrapping,\n\tScene,\n\tShapeUtils,\n\tSphereBufferGeometry,\n\tTextureLoader,\n\tVector2,\n\tVector3\n} from '../../../build/three.module.js';\nimport { chevrotain } from '../libs/chevrotain.module.min.js';\n\nvar VRMLLoader = ( function () {\n\n\t// dependency check\n\n\tif ( typeof chevrotain === 'undefined' ) { // eslint-disable-line no-undef\n\n\t\tthrow Error( 'THREE.VRMLLoader: External library chevrotain.min.js required.' );\n\n\t}\n\n\t// class definitions\n\n\tfunction VRMLLoader( manager ) {\n\n\t\tLoader.call( this, manager );\n\n\t}\n\n\tVRMLLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: VRMLLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\t\tvar loader = new FileLoader( scope.manager );\n\t\t\tloader.setPath( scope.path );\n\t\t\tloader.setRequestHeader( scope.requestHeader );\n\t\t\tloader.setWithCredentials( scope.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( data, path ) {\n\n\t\t\tvar nodeMap = {};\n\n\t\t\tfunction generateVRMLTree( data ) {\n\n\t\t\t\t// create lexer, parser and visitor\n\n\t\t\t\tvar tokenData = createTokens();\n\n\t\t\t\tvar lexer = new VRMLLexer( tokenData.tokens );\n\t\t\t\tvar parser = new VRMLParser( tokenData.tokenVocabulary );\n\t\t\t\tvar visitor = createVisitor( parser.getBaseCstVisitorConstructor() );\n\n\t\t\t\t// lexing\n\n\t\t\t\tvar lexingResult = lexer.lex( data );\n\t\t\t\tparser.input = lexingResult.tokens;\n\n\t\t\t\t// parsing\n\n\t\t\t\tvar cstOutput = parser.vrml();\n\n\t\t\t\tif ( parser.errors.length > 0 ) {\n\n\t\t\t\t\tconsole.error( parser.errors );\n\n\t\t\t\t\tthrow Error( 'THREE.VRMLLoader: Parsing errors detected.' );\n\n\t\t\t\t}\n\n\t\t\t\t// actions\n\n\t\t\t\tvar ast = visitor.visit( cstOutput );\n\n\t\t\t\treturn ast;\n\n\t\t\t}\n\n\t\t\tfunction createTokens() {\n\n\t\t\t\tvar createToken = chevrotain.createToken; // eslint-disable-line no-undef\n\n\t\t\t\t// from http://gun.teipir.gr/VRML-amgem/spec/part1/concepts.html#SyntaxBasics\n\n\t\t\t\tvar RouteIdentifier = createToken( { name: 'RouteIdentifier', pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*[\\.][^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*/ } );\n\t\t\t\tvar Identifier = createToken( { name: 'Identifier', pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*/, longer_alt: RouteIdentifier } );\n\n\t\t\t\t// from http://gun.teipir.gr/VRML-amgem/spec/part1/nodesRef.html\n\n\t\t\t\tvar nodeTypes = [\n\t\t\t\t\t'Anchor', 'Billboard', 'Collision', 'Group', 'Transform', // grouping nodes\n\t\t\t\t\t'Inline', 'LOD', 'Switch', // special groups\n\t\t\t\t\t'AudioClip', 'DirectionalLight', 'PointLight', 'Script', 'Shape', 'Sound', 'SpotLight', 'WorldInfo', // common nodes\n\t\t\t\t\t'CylinderSensor', 'PlaneSensor', 'ProximitySensor', 'SphereSensor', 'TimeSensor', 'TouchSensor', 'VisibilitySensor', // sensors\n\t\t\t\t\t'Box', 'Cone', 'Cylinder', 'ElevationGrid', 'Extrusion', 'IndexedFaceSet', 'IndexedLineSet', 'PointSet', 'Sphere', // geometries\n\t\t\t\t\t'Color', 'Coordinate', 'Normal', 'TextureCoordinate', // geometric properties\n\t\t\t\t\t'Appearance', 'FontStyle', 'ImageTexture', 'Material', 'MovieTexture', 'PixelTexture', 'TextureTransform', // appearance\n\t\t\t\t\t'ColorInterpolator', 'CoordinateInterpolator', 'NormalInterpolator', 'OrientationInterpolator', 'PositionInterpolator', 'ScalarInterpolator', // interpolators\n\t\t\t\t\t'Background', 'Fog', 'NavigationInfo', 'Viewpoint', // bindable nodes\n\t\t\t\t\t'Text' // Text must be placed at the end of the regex so there are no matches for TextureTransform and TextureCoordinate\n\t\t\t\t];\n\n\t\t\t\t//\n\n\t\t\t\tvar Version = createToken( {\n\t\t\t\t\tname: 'Version',\n\t\t\t\t\tpattern: /#VRML.*/,\n\t\t\t\t\tlonger_alt: Identifier\n\t\t\t\t} );\n\n\t\t\t\tvar NodeName = createToken( {\n\t\t\t\t\tname: 'NodeName',\n\t\t\t\t\tpattern: new RegExp( nodeTypes.join( '|' ) ),\n\t\t\t\t\tlonger_alt: Identifier\n\t\t\t\t} );\n\n\t\t\t\tvar DEF = createToken( {\n\t\t\t\t\tname: 'DEF',\n\t\t\t\t\tpattern: /DEF/,\n\t\t\t\t\tlonger_alt: Identifier\n\t\t\t\t} );\n\n\t\t\t\tvar USE = createToken( {\n\t\t\t\t\tname: 'USE',\n\t\t\t\t\tpattern: /USE/,\n\t\t\t\t\tlonger_alt: Identifier\n\t\t\t\t} );\n\n\t\t\t\tvar ROUTE = createToken( {\n\t\t\t\t\tname: 'ROUTE',\n\t\t\t\t\tpattern: /ROUTE/,\n\t\t\t\t\tlonger_alt: Identifier\n\t\t\t\t} );\n\n\t\t\t\tvar TO = createToken( {\n\t\t\t\t\tname: 'TO',\n\t\t\t\t\tpattern: /TO/,\n\t\t\t\t\tlonger_alt: Identifier\n\t\t\t\t} );\n\n\t\t\t\t//\n\n\t\t\t\tvar StringLiteral = createToken( { name: 'StringLiteral', pattern: /\"(:?[^\\\\\"\\n\\r]+|\\\\(:?[bfnrtv\"\\\\/]|u[0-9a-fA-F]{4}))*\"/ } );\n\t\t\t\tvar HexLiteral = createToken( { name: 'HexLiteral', pattern: /0[xX][0-9a-fA-F]+/ } );\n\t\t\t\tvar NumberLiteral = createToken( { name: 'NumberLiteral', pattern: /[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?/ } );\n\t\t\t\tvar TrueLiteral = createToken( { name: 'TrueLiteral', pattern: /TRUE/ } );\n\t\t\t\tvar FalseLiteral = createToken( { name: 'FalseLiteral', pattern: /FALSE/ } );\n\t\t\t\tvar NullLiteral = createToken( { name: 'NullLiteral', pattern: /NULL/ } );\n\t\t\t\tvar LSquare = createToken( { name: 'LSquare', pattern: /\\[/ } );\n\t\t\t\tvar RSquare = createToken( { name: 'RSquare', pattern: /]/ } );\n\t\t\t\tvar LCurly = createToken( { name: 'LCurly', pattern: /{/ } );\n\t\t\t\tvar RCurly = createToken( { name: 'RCurly', pattern: /}/ } );\n\t\t\t\tvar Comment = createToken( {\n\t\t\t\t\tname: 'Comment',\n\t\t\t\t\tpattern: /#.*/,\n\t\t\t\t\tgroup: chevrotain.Lexer.SKIPPED // eslint-disable-line no-undef\n\t\t\t\t} );\n\n\t\t\t\t// commas, blanks, tabs, newlines and carriage returns are whitespace characters wherever they appear outside of string fields\n\n\t\t\t\tvar WhiteSpace = createToken( {\n\t\t\t\t\tname: 'WhiteSpace',\n\t\t\t\t\tpattern: /[ ,\\s]/,\n\t\t\t\t\tgroup: chevrotain.Lexer.SKIPPED // eslint-disable-line no-undef\n\t\t\t\t} );\n\n\t\t\t\tvar tokens = [\n\t\t\t\t\tWhiteSpace,\n\t\t\t\t\t// keywords appear before the Identifier\n\t\t\t\t\tNodeName,\n\t\t\t\t\tDEF,\n\t\t\t\t\tUSE,\n\t\t\t\t\tROUTE,\n\t\t\t\t\tTO,\n\t\t\t\t\tTrueLiteral,\n\t\t\t\t\tFalseLiteral,\n\t\t\t\t\tNullLiteral,\n\t\t\t\t\t// the Identifier must appear after the keywords because all keywords are valid identifiers\n\t\t\t\t\tVersion,\n\t\t\t\t\tIdentifier,\n\t\t\t\t\tRouteIdentifier,\n\t\t\t\t\tStringLiteral,\n\t\t\t\t\tHexLiteral,\n\t\t\t\t\tNumberLiteral,\n\t\t\t\t\tLSquare,\n\t\t\t\t\tRSquare,\n\t\t\t\t\tLCurly,\n\t\t\t\t\tRCurly,\n\t\t\t\t\tComment\n\t\t\t\t];\n\n\t\t\t\tvar tokenVocabulary = {};\n\n\t\t\t\tfor ( var i = 0, l = tokens.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar token = tokens[ i ];\n\n\t\t\t\t\ttokenVocabulary[ token.name ] = token;\n\n\t\t\t\t}\n\n\t\t\t\treturn { tokens: tokens, tokenVocabulary: tokenVocabulary };\n\n\t\t\t}\n\n\n\t\t\tfunction createVisitor( BaseVRMLVisitor ) {\n\n\t\t\t\t// the visitor is created dynmaically based on the given base class\n\n\t\t\t\tfunction VRMLToASTVisitor() {\n\n\t\t\t\t\tBaseVRMLVisitor.call( this );\n\n\t\t\t\t\tthis.validateVisitor();\n\n\t\t\t\t}\n\n\t\t\t\tVRMLToASTVisitor.prototype = Object.assign( Object.create( BaseVRMLVisitor.prototype ), {\n\n\t\t\t\t\tconstructor: VRMLToASTVisitor,\n\n\t\t\t\t\tvrml: function ( ctx ) {\n\n\t\t\t\t\t\tvar data = {\n\t\t\t\t\t\t\tversion: this.visit( ctx.version ),\n\t\t\t\t\t\t\tnodes: [],\n\t\t\t\t\t\t\troutes: []\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tfor ( var i = 0, l = ctx.node.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar node = ctx.node[ i ];\n\n\t\t\t\t\t\t\tdata.nodes.push( this.visit( node ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ctx.route ) {\n\n\t\t\t\t\t\t\tfor ( var i = 0, l = ctx.route.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tvar route = ctx.route[ i ];\n\n\t\t\t\t\t\t\t\tdata.routes.push( this.visit( route ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn data;\n\n\t\t\t\t\t},\n\n\t\t\t\t\tversion: function ( ctx ) {\n\n\t\t\t\t\t\treturn ctx.Version[ 0 ].image;\n\n\t\t\t\t\t},\n\n\t\t\t\t\tnode: function ( ctx ) {\n\n\t\t\t\t\t\tvar data = {\n\t\t\t\t\t\t\tname: ctx.NodeName[ 0 ].image,\n\t\t\t\t\t\t\tfields: []\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif ( ctx.field ) {\n\n\t\t\t\t\t\t\tfor ( var i = 0, l = ctx.field.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tvar field = ctx.field[ i ];\n\n\t\t\t\t\t\t\t\tdata.fields.push( this.visit( field ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// DEF\n\n\t\t\t\t\t\tif ( ctx.def ) {\n\n\t\t\t\t\t\t\tdata.DEF = this.visit( ctx.def[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn data;\n\n\t\t\t\t\t},\n\n\t\t\t\t\tfield: function ( ctx ) {\n\n\t\t\t\t\t\tvar data = {\n\t\t\t\t\t\t\tname: ctx.Identifier[ 0 ].image,\n\t\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\t\tvalues: null\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tvar result;\n\n\t\t\t\t\t\t// SFValue\n\n\t\t\t\t\t\tif ( ctx.singleFieldValue ) {\n\n\t\t\t\t\t\t\tresult = this.visit( ctx.singleFieldValue[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// MFValue\n\n\t\t\t\t\t\tif ( ctx.multiFieldValue ) {\n\n\t\t\t\t\t\t\tresult = this.visit( ctx.multiFieldValue[ 0 ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata.type = result.type;\n\t\t\t\t\t\tdata.values = result.values;\n\n\t\t\t\t\t\treturn data;\n\n\t\t\t\t\t},\n\n\t\t\t\t\tdef: function ( ctx ) {\n\n\t\t\t\t\t\treturn ( ctx.Identifier || ctx.NodeName )[ 0 ].image;\n\n\t\t\t\t\t},\n\n\t\t\t\t\tuse: function ( ctx ) {\n\n\t\t\t\t\t\treturn { USE: ( ctx.Identifier || ctx.NodeName )[ 0 ].image };\n\n\t\t\t\t\t},\n\n\t\t\t\t\tsingleFieldValue: function ( ctx ) {\n\n\t\t\t\t\t\treturn processField( this, ctx );\n\n\t\t\t\t\t},\n\n\t\t\t\t\tmultiFieldValue: function ( ctx ) {\n\n\t\t\t\t\t\treturn processField( this, ctx );\n\n\t\t\t\t\t},\n\n\t\t\t\t\troute: function ( ctx ) {\n\n\t\t\t\t\t\tvar data = {\n\t\t\t\t\t\t\tFROM: ctx.RouteIdentifier[ 0 ].image,\n\t\t\t\t\t\t\tTO: ctx.RouteIdentifier[ 1 ].image\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn data;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tfunction processField( scope, ctx ) {\n\n\t\t\t\t\tvar field = {\n\t\t\t\t\t\ttype: null,\n\t\t\t\t\t\tvalues: []\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( ctx.node ) {\n\n\t\t\t\t\t\tfield.type = 'node';\n\n\t\t\t\t\t\tfor ( var i = 0, l = ctx.node.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar node = ctx.node[ i ];\n\n\t\t\t\t\t\t\tfield.values.push( scope.visit( node ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.use ) {\n\n\t\t\t\t\t\tfield.type = 'use';\n\n\t\t\t\t\t\tfor ( var i = 0, l = ctx.use.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar use = ctx.use[ i ];\n\n\t\t\t\t\t\t\tfield.values.push( scope.visit( use ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.StringLiteral ) {\n\n\t\t\t\t\t\tfield.type = 'string';\n\n\t\t\t\t\t\tfor ( var i = 0, l = ctx.StringLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar stringLiteral = ctx.StringLiteral[ i ];\n\n\t\t\t\t\t\t\tfield.values.push( stringLiteral.image.replace( /'|\"/g, '' ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.NumberLiteral ) {\n\n\t\t\t\t\t\tfield.type = 'number';\n\n\t\t\t\t\t\tfor ( var i = 0, l = ctx.NumberLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar numberLiteral = ctx.NumberLiteral[ i ];\n\n\t\t\t\t\t\t\tfield.values.push( parseFloat( numberLiteral.image ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.HexLiteral ) {\n\n\t\t\t\t\t\tfield.type = 'hex';\n\n\t\t\t\t\t\tfor ( var i = 0, l = ctx.HexLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar hexLiteral = ctx.HexLiteral[ i ];\n\n\t\t\t\t\t\t\tfield.values.push( hexLiteral.image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.TrueLiteral ) {\n\n\t\t\t\t\t\tfield.type = 'boolean';\n\n\t\t\t\t\t\tfor ( var i = 0, l = ctx.TrueLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar trueLiteral = ctx.TrueLiteral[ i ];\n\n\t\t\t\t\t\t\tif ( trueLiteral.image === 'TRUE' ) field.values.push( true );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.FalseLiteral ) {\n\n\t\t\t\t\t\tfield.type = 'boolean';\n\n\t\t\t\t\t\tfor ( var i = 0, l = ctx.FalseLiteral.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar falseLiteral = ctx.FalseLiteral[ i ];\n\n\t\t\t\t\t\t\tif ( falseLiteral.image === 'FALSE' ) field.values.push( false );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ctx.NullLiteral ) {\n\n\t\t\t\t\t\tfield.type = 'null';\n\n\t\t\t\t\t\tctx.NullLiteral.forEach( function () {\n\n\t\t\t\t\t\t\tfield.values.push( null );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn field;\n\n\t\t\t\t}\n\n\t\t\t\treturn new VRMLToASTVisitor();\n\n\t\t\t}\n\n\t\t\tfunction parseTree( tree ) {\n\n\t\t\t\t// console.log( JSON.stringify( tree, null, 2 ) );\n\n\t\t\t\tvar nodes = tree.nodes;\n\t\t\t\tvar scene = new Scene();\n\n\t\t\t\t// first iteration: build nodemap based on DEF statements\n\n\t\t\t\tfor ( var i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar node = nodes[ i ];\n\n\t\t\t\t\tbuildNodeMap( node );\n\n\t\t\t\t}\n\n\t\t\t\t// second iteration: build nodes\n\n\t\t\t\tfor ( var i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar node = nodes[ i ];\n\t\t\t\t\tvar object = getNode( node );\n\n\t\t\t\t\tif ( object instanceof Object3D ) scene.add( object );\n\n\t\t\t\t\tif ( node.name === 'WorldInfo' ) scene.userData.worldInfo = object;\n\n\t\t\t\t}\n\n\t\t\t\treturn scene;\n\n\t\t\t}\n\n\t\t\tfunction buildNodeMap( node ) {\n\n\t\t\t\tif ( node.DEF ) {\n\n\t\t\t\t\tnodeMap[ node.DEF ] = node;\n\n\t\t\t\t}\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\n\t\t\t\t\tif ( field.type === 'node' ) {\n\n\t\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\t\tfor ( var j = 0, jl = fieldValues.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tbuildNodeMap( fieldValues[ j ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tfunction getNode( node ) {\n\n\t\t\t\t// handle case where a node refers to a different one\n\n\t\t\t\tif ( node.USE ) {\n\n\t\t\t\t\treturn resolveUSE( node.USE );\n\n\t\t\t\t}\n\n\t\t\t\tif ( node.build !== undefined ) return node.build;\n\n\t\t\t\tnode.build = buildNode( node );\n\n\t\t\t\treturn node.build;\n\n\t\t\t}\n\n\t\t\t// node builder\n\n\t\t\tfunction buildNode( node ) {\n\n\t\t\t\tvar nodeName = node.name;\n\t\t\t\tvar build;\n\n\t\t\t\tswitch ( nodeName ) {\n\n\t\t\t\t\tcase 'Group':\n\t\t\t\t\tcase 'Transform':\n\t\t\t\t\tcase 'Collision':\n\t\t\t\t\t\tbuild = buildGroupingNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Background':\n\t\t\t\t\t\tbuild = buildBackgroundNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Shape':\n\t\t\t\t\t\tbuild = buildShapeNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Appearance':\n\t\t\t\t\t\tbuild = buildAppearanceNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Material':\n\t\t\t\t\t\tbuild = buildMaterialNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ImageTexture':\n\t\t\t\t\t\tbuild = buildImageTextureNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PixelTexture':\n\t\t\t\t\t\tbuild = buildPixelTextureNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TextureTransform':\n\t\t\t\t\t\tbuild = buildTextureTransformNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'IndexedFaceSet':\n\t\t\t\t\t\tbuild = buildIndexedFaceSetNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'IndexedLineSet':\n\t\t\t\t\t\tbuild = buildIndexedLineSetNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointSet':\n\t\t\t\t\t\tbuild = buildPointSetNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Box':\n\t\t\t\t\t\tbuild = buildBoxNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Cone':\n\t\t\t\t\t\tbuild = buildConeNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Cylinder':\n\t\t\t\t\t\tbuild = buildCylinderNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Sphere':\n\t\t\t\t\t\tbuild = buildSphereNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ElevationGrid':\n\t\t\t\t\t\tbuild = buildElevationGridNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Extrusion':\n\t\t\t\t\t\tbuild = buildExtrusionNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Color':\n\t\t\t\t\tcase 'Coordinate':\n\t\t\t\t\tcase 'Normal':\n\t\t\t\t\tcase 'TextureCoordinate':\n\t\t\t\t\t\tbuild = buildGeometricNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WorldInfo':\n\t\t\t\t\t\tbuild = buildWorldInfoNode( node );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Anchor':\n\t\t\t\t\tcase 'Billboard':\n\n\t\t\t\t\tcase 'Inline':\n\t\t\t\t\tcase 'LOD':\n\t\t\t\t\tcase 'Switch':\n\n\t\t\t\t\tcase 'AudioClip':\n\t\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tcase 'PointLight':\n\t\t\t\t\tcase 'Script':\n\t\t\t\t\tcase 'Sound':\n\t\t\t\t\tcase 'SpotLight':\n\n\t\t\t\t\tcase 'CylinderSensor':\n\t\t\t\t\tcase 'PlaneSensor':\n\t\t\t\t\tcase 'ProximitySensor':\n\t\t\t\t\tcase 'SphereSensor':\n\t\t\t\t\tcase 'TimeSensor':\n\t\t\t\t\tcase 'TouchSensor':\n\t\t\t\t\tcase 'VisibilitySensor':\n\n\t\t\t\t\tcase 'Text':\n\n\t\t\t\t\tcase 'FontStyle':\n\t\t\t\t\tcase 'MovieTexture':\n\n\t\t\t\t\tcase 'ColorInterpolator':\n\t\t\t\t\tcase 'CoordinateInterpolator':\n\t\t\t\t\tcase 'NormalInterpolator':\n\t\t\t\t\tcase 'OrientationInterpolator':\n\t\t\t\t\tcase 'PositionInterpolator':\n\t\t\t\t\tcase 'ScalarInterpolator':\n\n\t\t\t\t\tcase 'Fog':\n\t\t\t\t\tcase 'NavigationInfo':\n\t\t\t\t\tcase 'Viewpoint':\n\t\t\t\t\t\t// node not supported yet\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown node:', nodeName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\treturn build;\n\n\t\t\t}\n\n\t\t\tfunction buildGroupingNode( node ) {\n\n\t\t\t\tvar object = new Group();\n\n\t\t\t\t//\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'bboxCenter':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'bboxSize':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'center':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'children':\n\t\t\t\t\t\t\tparseFieldChildren( fieldValues, object );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'collide':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'rotation':\n\t\t\t\t\t\t\tvar axis = new Vector3( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\t\tvar angle = fieldValues[ 3 ];\n\t\t\t\t\t\t\tobject.quaternion.setFromAxisAngle( axis, angle );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\tobject.scale.set( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'scaleOrientation':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'translation':\n\t\t\t\t\t\t\tobject.position.set( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'proxy':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t\tfunction buildBackgroundNode( node ) {\n\n\t\t\t\tvar group = new Group();\n\n\t\t\t\tvar groundAngle, groundColor;\n\t\t\t\tvar skyAngle, skyColor;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'groundAngle':\n\t\t\t\t\t\t\tgroundAngle = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'groundColor':\n\t\t\t\t\t\t\tgroundColor = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'backUrl':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'bottomUrl':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'frontUrl':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'leftUrl':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'rightUrl':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'topUrl':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'skyAngle':\n\t\t\t\t\t\t\tskyAngle = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'skyColor':\n\t\t\t\t\t\t\tskyColor = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar radius = 10000;\n\n\t\t\t\t// sky\n\n\t\t\t\tif ( skyColor ) {\n\n\t\t\t\t\tvar skyGeometry = new SphereBufferGeometry( radius, 32, 16 );\n\t\t\t\t\tvar skyMaterial = new MeshBasicMaterial( { fog: false, side: BackSide, depthWrite: false, depthTest: false } );\n\n\t\t\t\t\tif ( skyColor.length > 3 ) {\n\n\t\t\t\t\t\tpaintFaces( skyGeometry, radius, skyAngle, toColorArray( skyColor ), true );\n\t\t\t\t\t\tskyMaterial.vertexColors = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tskyMaterial.color.setRGB( skyColor[ 0 ], skyColor[ 1 ], skyColor[ 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar sky = new Mesh( skyGeometry, skyMaterial );\n\t\t\t\t\tgroup.add( sky );\n\n\t\t\t\t}\n\n\t\t\t\t// ground\n\n\t\t\t\tif ( groundColor ) {\n\n\t\t\t\t\tif ( groundColor.length > 0 ) {\n\n\t\t\t\t\t\tvar groundGeometry = new SphereBufferGeometry( radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI );\n\t\t\t\t\t\tvar groundMaterial = new MeshBasicMaterial( { fog: false, side: BackSide, vertexColors: true, depthWrite: false, depthTest: false } );\n\n\t\t\t\t\t\tpaintFaces( groundGeometry, radius, groundAngle, toColorArray( groundColor ), false );\n\n\t\t\t\t\t\tvar ground = new Mesh( groundGeometry, groundMaterial );\n\t\t\t\t\t\tgroup.add( ground );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// render background group first\n\n\t\t\t\tgroup.renderOrder = - Infinity;\n\n\t\t\t\treturn group;\n\n\t\t\t}\n\n\t\t\tfunction buildShapeNode( node ) {\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\t// if the appearance field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)\n\n\t\t\t\tvar material = new MeshBasicMaterial( { color: 0x000000 } );\n\t\t\t\tvar geometry;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'appearance':\n\t\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\t\tmaterial = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'geometry':\n\t\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\t\tgeometry = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// build 3D object\n\n\t\t\t\tvar object;\n\n\t\t\t\tif ( geometry && geometry.attributes.position ) {\n\n\t\t\t\t\tvar type = geometry._type;\n\n\t\t\t\t\tif ( type === 'points' ) { // points\n\n\t\t\t\t\t\tvar pointsMaterial = new PointsMaterial( { color: 0xffffff } );\n\n\t\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\t\tpointsMaterial.vertexColors = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the color field is NULL and there is a material defined for the appearance affecting this PointSet, then use the emissiveColor of the material to draw the points\n\n\t\t\t\t\t\t\tif ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\t\t\t\tpointsMaterial.color.copy( material.emissive );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobject = new Points( geometry, pointsMaterial );\n\n\t\t\t\t\t} else if ( type === 'line' ) { // lines\n\n\t\t\t\t\t\tvar lineMaterial = new LineBasicMaterial( { color: 0xffffff } );\n\n\t\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\t\tlineMaterial.vertexColors = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the color field is NULL and there is a material defined for the appearance affecting this IndexedLineSet, then use the emissiveColor of the material to draw the lines\n\n\t\t\t\t\t\t\tif ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\t\t\t\tlineMaterial.color.copy( material.emissive );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobject = new LineSegments( geometry, lineMaterial );\n\n\t\t\t\t\t} else { // consider meshes\n\n\t\t\t\t\t\t// check \"solid\" hint (it's placed in the geometry but affects the material)\n\n\t\t\t\t\t\tif ( geometry._solid !== undefined ) {\n\n\t\t\t\t\t\t\tmaterial.side = ( geometry._solid ) ? FrontSide : DoubleSide;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// check for vertex colors\n\n\t\t\t\t\t\tif ( geometry.attributes.color !== undefined ) {\n\n\t\t\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject = new Object3D();\n\n\t\t\t\t\t// if the geometry field is NULL or no vertices are defined the object is not drawn\n\n\t\t\t\t\tobject.visible = false;\n\n\t\t\t\t}\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t\tfunction buildAppearanceNode( node ) {\n\n\t\t\t\tvar material = new MeshPhongMaterial();\n\t\t\t\tvar transformData;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'material':\n\t\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\t\tvar materialData = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t\t\tif ( materialData.diffuseColor ) material.color.copy( materialData.diffuseColor );\n\t\t\t\t\t\t\t\tif ( materialData.emissiveColor ) material.emissive.copy( materialData.emissiveColor );\n\t\t\t\t\t\t\t\tif ( materialData.shininess ) material.shininess = materialData.shininess;\n\t\t\t\t\t\t\t\tif ( materialData.specularColor ) material.specular.copy( materialData.specularColor );\n\t\t\t\t\t\t\t\tif ( materialData.transparency ) material.opacity = 1 - materialData.transparency;\n\t\t\t\t\t\t\t\tif ( materialData.transparency > 0 ) material.transparent = true;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// if the material field is NULL or unspecified, lighting is off and the unlit object color is (0, 0, 0)\n\n\t\t\t\t\t\t\t\tmaterial = new MeshBasicMaterial( { color: 0x000000 } );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\t\tvar textureNode = fieldValues[ 0 ];\n\t\t\t\t\t\t\tif ( textureNode !== null ) {\n\n\t\t\t\t\t\t\t\tif ( textureNode.name === 'ImageTexture' || textureNode.name === 'PixelTexture' ) {\n\n\t\t\t\t\t\t\t\t\tmaterial.map = getNode( textureNode );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// MovieTexture not supported yet\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'textureTransform':\n\t\t\t\t\t\t\tif ( fieldValues[ 0 ] !== null ) {\n\n\t\t\t\t\t\t\t\ttransformData = getNode( fieldValues[ 0 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// only apply texture transform data if a texture was defined\n\n\t\t\t\tif ( material.map ) {\n\n\t\t\t\t\t// respect VRML lighting model\n\n\t\t\t\t\tif ( material.map.__type ) {\n\n\t\t\t\t\t\tswitch ( material.map.__type ) {\n\n\t\t\t\t\t\t\tcase TEXTURE_TYPE.INTENSITY_ALPHA:\n\t\t\t\t\t\t\t\tmaterial.opacity = 1; // ignore transparency\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TEXTURE_TYPE.RGB:\n\t\t\t\t\t\t\t\tmaterial.color.set( 0xffffff ); // ignore material color\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase TEXTURE_TYPE.RGBA:\n\t\t\t\t\t\t\t\tmaterial.color.set( 0xffffff ); // ignore material color\n\t\t\t\t\t\t\t\tmaterial.opacity = 1; // ignore transparency\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelete material.map.__type;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// apply texture transform\n\n\t\t\t\t\tif ( transformData ) {\n\n\t\t\t\t\t\tmaterial.map.center.copy( transformData.center );\n\t\t\t\t\t\tmaterial.map.rotation = transformData.rotation;\n\t\t\t\t\t\tmaterial.map.repeat.copy( transformData.scale );\n\t\t\t\t\t\tmaterial.map.offset.copy( transformData.translation );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn material;\n\n\t\t\t}\n\n\t\t\tfunction buildMaterialNode( node ) {\n\n\t\t\t\tvar materialData = {};\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'ambientIntensity':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'diffuseColor':\n\t\t\t\t\t\t\tmaterialData.diffuseColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'emissiveColor':\n\t\t\t\t\t\t\tmaterialData.emissiveColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\t\tmaterialData.shininess = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'specularColor':\n\t\t\t\t\t\t\tmaterialData.emissiveColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\t\tmaterialData.transparency = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn materialData;\n\n\t\t\t}\n\n\t\t\tfunction parseHexColor( hex, textureType, color ) {\n\n\t\t\t\tswitch ( textureType ) {\n\n\t\t\t\t\tcase TEXTURE_TYPE.INTENSITY:\n\t\t\t\t\t\t// Intensity texture: A one-component image specifies one-byte hexadecimal or integer values representing the intensity of the image\n\t\t\t\t\t\tvar value = parseInt( hex );\n\t\t\t\t\t\tcolor.r = value;\n\t\t\t\t\t\tcolor.g = value;\n\t\t\t\t\t\tcolor.b = value;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TEXTURE_TYPE.INTENSITY_ALPHA:\n\t\t\t\t\t\t// Intensity+Alpha texture: A two-component image specifies the intensity in the first (high) byte and the alpha opacity in the second (low) byte.\n\t\t\t\t\t\tvar value = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\t\tcolor.r = value;\n\t\t\t\t\t\tcolor.g = value;\n\t\t\t\t\t\tcolor.b = value;\n\t\t\t\t\t\tcolor.a = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TEXTURE_TYPE.RGB:\n\t\t\t\t\t\t// RGB texture: Pixels in a three-component image specify the red component in the first (high) byte, followed by the green and blue components\n\t\t\t\t\t\tcolor.r = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\t\tcolor.g = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\t\tcolor.b = parseInt( '0x' + hex.substring( 6, 8 ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase TEXTURE_TYPE.RGBA:\n\t\t\t\t\t\t// RGBA texture: Four-component images specify the alpha opacity byte after red/green/blue\n\t\t\t\t\t\tcolor.r = parseInt( '0x' + hex.substring( 2, 4 ) );\n\t\t\t\t\t\tcolor.g = parseInt( '0x' + hex.substring( 4, 6 ) );\n\t\t\t\t\t\tcolor.b = parseInt( '0x' + hex.substring( 6, 8 ) );\n\t\t\t\t\t\tcolor.a = parseInt( '0x' + hex.substring( 8, 10 ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction getTextureType( num_components ) {\n\n\t\t\t\tvar type;\n\n\t\t\t\tswitch ( num_components ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\ttype = TEXTURE_TYPE.INTENSITY;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\ttype = TEXTURE_TYPE.INTENSITY_ALPHA;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\ttype = TEXTURE_TYPE.RGB;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\ttype = TEXTURE_TYPE.RGBA;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t}\n\n\t\t\t\treturn type;\n\n\t\t\t}\n\n\t\t\tfunction buildPixelTextureNode( node ) {\n\n\t\t\t\tvar texture;\n\t\t\t\tvar wrapS = RepeatWrapping;\n\t\t\t\tvar wrapT = RepeatWrapping;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'image':\n\t\t\t\t\t\t\tvar width = fieldValues[ 0 ];\n\t\t\t\t\t\t\tvar height = fieldValues[ 1 ];\n\t\t\t\t\t\t\tvar num_components = fieldValues[ 2 ];\n\n\t\t\t\t\t\t\tvar useAlpha = ( num_components === 2 || num_components === 4 );\n\t\t\t\t\t\t\tvar textureType = getTextureType( num_components );\n\n\t\t\t\t\t\t\tvar size = ( ( useAlpha === true ) ? 4 : 3 ) * ( width * height );\n\t\t\t\t\t\t\tvar data = new Uint8Array( size );\n\n\t\t\t\t\t\t\tvar color = { r: 0, g: 0, b: 0, a: 0 };\n\n\t\t\t\t\t\t\tfor ( var j = 3, k = 0, jl = fieldValues.length; j < jl; j ++, k ++ ) {\n\n\t\t\t\t\t\t\t\tparseHexColor( fieldValues[ j ], textureType, color );\n\n\t\t\t\t\t\t\t\tif ( useAlpha === true ) {\n\n\t\t\t\t\t\t\t\t\tvar stride = k * 4;\n\n\t\t\t\t\t\t\t\t\tdata[ stride + 0 ] = color.r;\n\t\t\t\t\t\t\t\t\tdata[ stride + 1 ] = color.g;\n\t\t\t\t\t\t\t\t\tdata[ stride + 2 ] = color.b;\n\t\t\t\t\t\t\t\t\tdata[ stride + 3 ] = color.a;\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tvar stride = k * 3;\n\n\t\t\t\t\t\t\t\t\tdata[ stride + 0 ] = color.r;\n\t\t\t\t\t\t\t\t\tdata[ stride + 1 ] = color.g;\n\t\t\t\t\t\t\t\t\tdata[ stride + 2 ] = color.b;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttexture = new DataTexture( data, width, height, ( useAlpha === true ) ? RGBAFormat : RGBFormat );\n\t\t\t\t\t\t\ttexture.__type = textureType; // needed for material modifications\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'repeatS':\n\t\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'repeatT':\n\t\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture ) {\n\n\t\t\t\t\ttexture.wrapS = wrapS;\n\t\t\t\t\ttexture.wrapT = wrapT;\n\n\t\t\t\t}\n\n\t\t\t\treturn texture;\n\n\t\t\t}\n\n\t\t\tfunction buildImageTextureNode( node ) {\n\n\t\t\t\tvar texture;\n\t\t\t\tvar wrapS = RepeatWrapping;\n\t\t\t\tvar wrapT = RepeatWrapping;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'url':\n\t\t\t\t\t\t\tvar url = fieldValues[ 0 ];\n\t\t\t\t\t\t\tif ( url ) texture = textureLoader.load( url );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'repeatS':\n\t\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'repeatT':\n\t\t\t\t\t\t\tif ( fieldValues[ 0 ] === false ) wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture ) {\n\n\t\t\t\t\ttexture.wrapS = wrapS;\n\t\t\t\t\ttexture.wrapT = wrapT;\n\n\t\t\t\t}\n\n\t\t\t\treturn texture;\n\n\t\t\t}\n\n\t\t\tfunction buildTextureTransformNode( node ) {\n\n\t\t\t\tvar transformData = {\n\t\t\t\t\tcenter: new Vector2(),\n\t\t\t\t\trotation: new Vector2(),\n\t\t\t\t\tscale: new Vector2(),\n\t\t\t\t\ttranslation: new Vector2()\n\t\t\t\t};\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'center':\n\t\t\t\t\t\t\ttransformData.center.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'rotation':\n\t\t\t\t\t\t\ttransformData.rotation = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\ttransformData.scale.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'translation':\n\t\t\t\t\t\t\ttransformData.translation.set( fieldValues[ 0 ], fieldValues[ 1 ] );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn transformData;\n\n\t\t\t}\n\n\t\t\tfunction buildGeometricNode( node ) {\n\n\t\t\t\treturn node.fields[ 0 ].values;\n\n\t\t\t}\n\n\t\t\tfunction buildWorldInfoNode( node ) {\n\n\t\t\t\tvar worldInfo = {};\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'title':\n\t\t\t\t\t\t\tworldInfo.title = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'info':\n\t\t\t\t\t\t\tworldInfo.info = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn worldInfo;\n\n\t\t\t}\n\n\t\t\tfunction buildIndexedFaceSetNode( node ) {\n\n\t\t\t\tvar color, coord, normal, texCoord;\n\t\t\t\tvar ccw = true, solid = true, creaseAngle = 0;\n\t\t\t\tvar colorIndex, coordIndex, normalIndex, texCoordIndex;\n\t\t\t\tvar colorPerVertex = true, normalPerVertex = true;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'color':\n\t\t\t\t\t\t\tvar colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\t\tvar coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'normal':\n\t\t\t\t\t\t\tvar normalNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( normalNode !== null ) {\n\n\t\t\t\t\t\t\t\tnormal = getNode( normalNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'texCoord':\n\t\t\t\t\t\t\tvar texCoordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( texCoordNode !== null ) {\n\n\t\t\t\t\t\t\t\ttexCoord = getNode( texCoordNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'colorIndex':\n\t\t\t\t\t\t\tcolorIndex = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'convex':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'coordIndex':\n\t\t\t\t\t\t\tcoordIndex = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'normalIndex':\n\t\t\t\t\t\t\tnormalIndex = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'normalPerVertex':\n\t\t\t\t\t\t\tnormalPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'texCoordIndex':\n\t\t\t\t\t\t\ttexCoordIndex = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( coordIndex === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Missing coordIndex.' );\n\n\t\t\t\t\treturn new BufferGeometry(); // handle VRML files with incomplete geometry definition\n\n\t\t\t\t}\n\n\t\t\t\tvar triangulatedCoordIndex = triangulateFaceIndex( coordIndex, ccw );\n\n\t\t\t\tvar positionAttribute;\n\t\t\t\tvar colorAttribute;\n\t\t\t\tvar normalAttribute;\n\t\t\t\tvar uvAttribute;\n\n\t\t\t\tif ( color ) {\n\n\t\t\t\t\tif ( colorPerVertex === true ) {\n\n\t\t\t\t\t\tif ( colorIndex && colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t\t// if the colorIndex field is not empty, then it is used to choose colors for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\t\tvar triangulatedColorIndex = triangulateFaceIndex( colorIndex, ccw );\n\t\t\t\t\t\t\tcolorAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedColorIndex, color, 3 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node\n\n\t\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( colorIndex && colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t\t// if the colorIndex field is not empty, then they are used to choose one color for each face of the IndexedFaceSet\n\n\t\t\t\t\t\t\tvar flattenFaceColors = flattenData( color, colorIndex );\n\t\t\t\t\t\t\tvar triangulatedFaceColors = triangulateFaceData( flattenFaceColors, coordIndex );\n\t\t\t\t\t\t\tcolorAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceColors );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the colorIndex field is empty, then the color are applied to each face of the IndexedFaceSet in order\n\n\t\t\t\t\t\t\tvar triangulatedFaceColors = triangulateFaceData( color, coordIndex );\n\t\t\t\t\t\t\tcolorAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceColors );\n\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( normal ) {\n\n\t\t\t\t\tif ( normalPerVertex === true ) {\n\n\t\t\t\t\t\t// consider vertex normals\n\n\t\t\t\t\t\tif ( normalIndex && normalIndex.length > 0 ) {\n\n\t\t\t\t\t\t\t// if the normalIndex field is not empty, then it is used to choose normals for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\t\tvar triangulatedNormalIndex = triangulateFaceIndex( normalIndex, ccw );\n\t\t\t\t\t\t\tnormalAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedNormalIndex, normal, 3 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the normalIndex field is empty, then the coordIndex field is used to choose normals from the Normal node\n\n\t\t\t\t\t\t\tnormalAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( normal, 3 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// consider face normals\n\n\t\t\t\t\t\tif ( normalIndex && normalIndex.length > 0 ) {\n\n\t\t\t\t\t\t\t// if the normalIndex field is not empty, then they are used to choose one normal for each face of the IndexedFaceSet\n\n\t\t\t\t\t\t\tvar flattenFaceNormals = flattenData( normal, normalIndex );\n\t\t\t\t\t\t\tvar triangulatedFaceNormals = triangulateFaceData( flattenFaceNormals, coordIndex );\n\t\t\t\t\t\t\tnormalAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceNormals );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the normalIndex field is empty, then the normals are applied to each face of the IndexedFaceSet in order\n\n\t\t\t\t\t\t\tvar triangulatedFaceNormals = triangulateFaceData( normal, coordIndex );\n\t\t\t\t\t\t\tnormalAttribute = computeAttributeFromFaceData( triangulatedCoordIndex, triangulatedFaceNormals );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// if the normal field is NULL, then the loader should automatically generate normals, using creaseAngle to determine if and how normals are smoothed across shared vertices\n\n\t\t\t\t\tnormalAttribute = computeNormalAttribute( triangulatedCoordIndex, coord, creaseAngle );\n\n\t\t\t\t}\n\n\t\t\t\tif ( texCoord ) {\n\n\t\t\t\t\t// texture coordinates are always defined on vertex level\n\n\t\t\t\t\tif ( texCoordIndex && texCoordIndex.length > 0 ) {\n\n\t\t\t\t\t\t// if the texCoordIndex field is not empty, then it is used to choose texture coordinates for each vertex of the IndexedFaceSet.\n\n\t\t\t\t\t\tvar triangulatedTexCoordIndex = triangulateFaceIndex( texCoordIndex, ccw );\n\t\t\t\t\t\tuvAttribute = computeAttributeFromIndexedData( triangulatedCoordIndex, triangulatedTexCoordIndex, texCoord, 2 );\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// if the texCoordIndex field is empty, then the coordIndex array is used to choose texture coordinates from the TextureCoordinate node\n\n\t\t\t\t\t\tuvAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( texCoord, 2 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new BufferGeometry();\n\t\t\t\tpositionAttribute = toNonIndexedAttribute( triangulatedCoordIndex, new Float32BufferAttribute( coord, 3 ) );\n\n\t\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\n\t\t\t\t// optional attributes\n\n\t\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\t\t\t\tif ( uvAttribute ) geometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\t\tgeometry._solid = solid;\n\t\t\t\tgeometry._type = 'mesh';\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\tfunction buildIndexedLineSetNode( node ) {\n\n\t\t\t\tvar color, coord;\n\t\t\t\tvar colorIndex, coordIndex;\n\t\t\t\tvar colorPerVertex = true;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'color':\n\t\t\t\t\t\t\tvar colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\t\tvar coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'colorIndex':\n\t\t\t\t\t\t\tcolorIndex = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'coordIndex':\n\t\t\t\t\t\t\tcoordIndex = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// build lines\n\n\t\t\t\tvar colorAttribute;\n\n\t\t\t\tvar expandedLineIndex = expandLineIndex( coordIndex ); // create an index for three.js's linesegment primitive\n\n\t\t\t\tif ( color ) {\n\n\t\t\t\t\tif ( colorPerVertex === true ) {\n\n\t\t\t\t\t\tif ( colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t\t// if the colorIndex field is not empty, then one color is used for each polyline of the IndexedLineSet.\n\n\t\t\t\t\t\t\tvar expandedColorIndex = expandLineIndex( colorIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\t\tcolorAttribute = computeAttributeFromIndexedData( expandedLineIndex, expandedColorIndex, color, 3 ); // compute data on vertex level\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the colorIndex field is empty, then the colors are applied to each polyline of the IndexedLineSet in order.\n\n\t\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( expandedLineIndex, new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( colorIndex.length > 0 ) {\n\n\t\t\t\t\t\t\t// if the colorIndex field is not empty, then colors are applied to each vertex of the IndexedLineSet\n\n\t\t\t\t\t\t\tvar flattenLineColors = flattenData( color, colorIndex ); // compute colors for each VRML primitve\n\t\t\t\t\t\t\tvar expandedLineColors = expandLineData( flattenLineColors, coordIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\t\tcolorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level\n\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if the colorIndex field is empty, then the coordIndex field is used to choose colors from the Color node\n\n\t\t\t\t\t\t\tvar expandedLineColors = expandLineData( color, coordIndex ); // compute colors for each line segment (rendering primitve)\n\t\t\t\t\t\t\tcolorAttribute = computeAttributeFromLineData( expandedLineIndex, expandedLineColors ); // compute data on vertex level\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\t\tvar positionAttribute = toNonIndexedAttribute( expandedLineIndex, new Float32BufferAttribute( coord, 3 ) );\n\t\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\n\t\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t\tgeometry._type = 'line';\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\tfunction buildPointSetNode( node ) {\n\n\t\t\t\tvar geometry;\n\t\t\t\tvar color, coord;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'color':\n\t\t\t\t\t\t\tvar colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'coord':\n\t\t\t\t\t\t\tvar coordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( coordNode !== null ) {\n\n\t\t\t\t\t\t\t\tcoord = getNode( coordNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( coord, 3 ) );\n\t\t\t\tif ( color ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\n\t\t\t\tgeometry._type = 'points';\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\tfunction buildBoxNode( node ) {\n\n\t\t\t\tvar size = new Vector3( 2, 2, 2 );\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'size':\n\t\t\t\t\t\t\tsize.x = fieldValues[ 0 ];\n\t\t\t\t\t\t\tsize.y = fieldValues[ 1 ];\n\t\t\t\t\t\t\tsize.z = fieldValues[ 2 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new BoxBufferGeometry( size.x, size.y, size.z );\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\tfunction buildConeNode( node ) {\n\n\t\t\t\tvar radius = 1, height = 2, openEnded = false;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\t\topenEnded = ! fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'bottomRadius':\n\t\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'height':\n\t\t\t\t\t\t\theight = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'side':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new ConeBufferGeometry( radius, height, 16, 1, openEnded );\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\tfunction buildCylinderNode( node ) {\n\n\t\t\t\tvar radius = 1, height = 2;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'radius':\n\t\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'height':\n\t\t\t\t\t\t\theight = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'side':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'top':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new CylinderBufferGeometry( radius, radius, height, 16, 1 );\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\tfunction buildSphereNode( node ) {\n\n\t\t\t\tvar radius = 1;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'radius':\n\t\t\t\t\t\t\tradius = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new SphereBufferGeometry( radius, 16, 16 );\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\tfunction buildElevationGridNode( node ) {\n\n\t\t\t\tvar color;\n\t\t\t\tvar normal;\n\t\t\t\tvar texCoord;\n\t\t\t\tvar height;\n\n\t\t\t\tvar colorPerVertex = true;\n\t\t\t\tvar normalPerVertex = true;\n\t\t\t\tvar solid = true;\n\t\t\t\tvar ccw = true;\n\t\t\t\tvar creaseAngle = 0;\n\t\t\t\tvar xDimension = 2;\n\t\t\t\tvar zDimension = 2;\n\t\t\t\tvar xSpacing = 1;\n\t\t\t\tvar zSpacing = 1;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'color':\n\t\t\t\t\t\t\tvar colorNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( colorNode !== null ) {\n\n\t\t\t\t\t\t\t\tcolor = getNode( colorNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'normal':\n\t\t\t\t\t\t\tvar normalNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( normalNode !== null ) {\n\n\t\t\t\t\t\t\t\tnormal = getNode( normalNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'texCoord':\n\t\t\t\t\t\t\tvar texCoordNode = fieldValues[ 0 ];\n\n\t\t\t\t\t\t\tif ( texCoordNode !== null ) {\n\n\t\t\t\t\t\t\t\ttexCoord = getNode( texCoordNode );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'height':\n\t\t\t\t\t\t\theight = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'colorPerVertex':\n\t\t\t\t\t\t\tcolorPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'normalPerVertex':\n\t\t\t\t\t\t\tnormalPerVertex = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'xDimension':\n\t\t\t\t\t\t\txDimension = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'xSpacing':\n\t\t\t\t\t\t\txSpacing = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'zDimension':\n\t\t\t\t\t\t\tzDimension = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'zSpacing':\n\t\t\t\t\t\t\tzSpacing = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// vertex data\n\n\t\t\t\tvar vertices = [];\n\t\t\t\tvar normals = [];\n\t\t\t\tvar colors = [];\n\t\t\t\tvar uvs = [];\n\n\t\t\t\tfor ( var i = 0; i < zDimension; i ++ ) {\n\n\t\t\t\t\tfor ( var j = 0; j < xDimension; j ++ ) {\n\n\t\t\t\t\t\t// compute a row major index\n\n\t\t\t\t\t\tvar index = ( i * xDimension ) + j;\n\n\t\t\t\t\t\t// vertices\n\n\t\t\t\t\t\tvar x = xSpacing * i;\n\t\t\t\t\t\tvar y = height[ index ];\n\t\t\t\t\t\tvar z = zSpacing * j;\n\n\t\t\t\t\t\tvertices.push( x, y, z );\n\n\t\t\t\t\t\t// colors\n\n\t\t\t\t\t\tif ( color && colorPerVertex === true ) {\n\n\t\t\t\t\t\t\tvar r = color[ index * 3 + 0 ];\n\t\t\t\t\t\t\tvar g = color[ index * 3 + 1 ];\n\t\t\t\t\t\t\tvar b = color[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// normals\n\n\t\t\t\t\t\tif ( normal && normalPerVertex === true ) {\n\n\t\t\t\t\t\t\tvar xn = normal[ index * 3 + 0 ];\n\t\t\t\t\t\t\tvar yn = normal[ index * 3 + 1 ];\n\t\t\t\t\t\t\tvar zn = normal[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\tnormals.push( xn, yn, zn );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// uvs\n\n\t\t\t\t\t\tif ( texCoord ) {\n\n\t\t\t\t\t\t\tvar s = texCoord[ index * 2 + 0 ];\n\t\t\t\t\t\t\tvar t = texCoord[ index * 2 + 1 ];\n\n\t\t\t\t\t\t\tuvs.push( s, t );\n\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tuvs.push( i / ( xDimension - 1 ), j / ( zDimension - 1 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// indices\n\n\t\t\t\tvar indices = [];\n\n\t\t\t\tfor ( var i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\tfor ( var j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t// from https://tecfa.unige.ch/guides/vrml/vrml97/spec/part1/nodesRef.html#ElevationGrid\n\n\t\t\t\t\t\tvar a = i + j * xDimension;\n\t\t\t\t\t\tvar b = i + ( j + 1 ) * xDimension;\n\t\t\t\t\t\tvar c = ( i + 1 ) + ( j + 1 ) * xDimension;\n\t\t\t\t\t\tvar d = ( i + 1 ) + j * xDimension;\n\n\t\t\t\t\t\t// faces\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tindices.push( a, c, b );\n\t\t\t\t\t\t\tindices.push( c, a, d );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\t\t\tindices.push( c, d, a );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tvar positionAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( vertices, 3 ) );\n\t\t\t\tvar uvAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( uvs, 2 ) );\n\t\t\t\tvar colorAttribute;\n\t\t\t\tvar normalAttribute;\n\n\t\t\t\t// color attribute\n\n\t\t\t\tif ( color ) {\n\n\t\t\t\t\tif ( colorPerVertex === false ) {\n\n\t\t\t\t\t\tfor ( var i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\t\t\tfor ( var j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t\t\tvar index = i + j * ( xDimension - 1 );\n\n\t\t\t\t\t\t\t\tvar r = color[ index * 3 + 0 ];\n\t\t\t\t\t\t\t\tvar g = color[ index * 3 + 1 ];\n\t\t\t\t\t\t\t\tvar b = color[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\t\t// one color per quad\n\n\t\t\t\t\t\t\t\tcolors.push( r, g, b ); colors.push( r, g, b ); colors.push( r, g, b );\n\t\t\t\t\t\t\t\tcolors.push( r, g, b ); colors.push( r, g, b ); colors.push( r, g, b );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcolorAttribute = new Float32BufferAttribute( colors, 3 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcolorAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// normal attribute\n\n\t\t\t\tif ( normal ) {\n\n\t\t\t\t\tif ( normalPerVertex === false ) {\n\n\t\t\t\t\t\tfor ( var i = 0; i < xDimension - 1; i ++ ) {\n\n\t\t\t\t\t\t\tfor ( var j = 0; j < zDimension - 1; j ++ ) {\n\n\t\t\t\t\t\t\t\tvar index = i + j * ( xDimension - 1 );\n\n\t\t\t\t\t\t\t\tvar xn = normal[ index * 3 + 0 ];\n\t\t\t\t\t\t\t\tvar yn = normal[ index * 3 + 1 ];\n\t\t\t\t\t\t\t\tvar zn = normal[ index * 3 + 2 ];\n\n\t\t\t\t\t\t\t\t// one normal per quad\n\n\t\t\t\t\t\t\t\tnormals.push( xn, yn, zn ); normals.push( xn, yn, zn ); normals.push( xn, yn, zn );\n\t\t\t\t\t\t\t\tnormals.push( xn, yn, zn ); normals.push( xn, yn, zn ); normals.push( xn, yn, zn );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnormalAttribute = new Float32BufferAttribute( normals, 3 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tnormalAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnormalAttribute = computeNormalAttribute( indices, vertices, creaseAngle );\n\n\t\t\t\t}\n\n\t\t\t\t// build geometry\n\n\t\t\t\tvar geometry = new BufferGeometry();\n\t\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\t\t\t\tgeometry.setAttribute( 'uv', uvAttribute );\n\n\t\t\t\tif ( colorAttribute ) geometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\t\tgeometry._solid = solid;\n\t\t\t\tgeometry._type = 'mesh';\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\tfunction buildExtrusionNode( node ) {\n\n\t\t\t\tvar crossSection = [ 1, 1, 1, - 1, - 1, - 1, - 1, 1, 1, 1 ];\n\t\t\t\tvar spine = [ 0, 0, 0, 0, 1, 0 ];\n\t\t\t\tvar scale;\n\t\t\t\tvar orientation;\n\n\t\t\t\tvar beginCap = true;\n\t\t\t\tvar ccw = true;\n\t\t\t\tvar creaseAngle = 0;\n\t\t\t\tvar endCap = true;\n\t\t\t\tvar solid = true;\n\n\t\t\t\tvar fields = node.fields;\n\n\t\t\t\tfor ( var i = 0, l = fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar field = fields[ i ];\n\t\t\t\t\tvar fieldName = field.name;\n\t\t\t\t\tvar fieldValues = field.values;\n\n\t\t\t\t\tswitch ( fieldName ) {\n\n\t\t\t\t\t\tcase 'beginCap':\n\t\t\t\t\t\t\tbeginCap = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ccw':\n\t\t\t\t\t\t\tccw = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'convex':\n\t\t\t\t\t\t\t// field not supported\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'creaseAngle':\n\t\t\t\t\t\t\tcreaseAngle = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'crossSection':\n\t\t\t\t\t\t\tcrossSection = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'endCap':\n\t\t\t\t\t\t\tendCap = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'orientation':\n\t\t\t\t\t\t\torientation = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\tscale = fieldValues;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\t\tsolid = fieldValues[ 0 ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'spine':\n\t\t\t\t\t\t\tspine = fieldValues; // only extrusion along the Y-axis are supported so far\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.VRMLLoader: Unknown field:', fieldName );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar crossSectionClosed = ( crossSection[ 0 ] === crossSection[ crossSection.length - 2 ] && crossSection[ 1 ] === crossSection[ crossSection.length - 1 ] );\n\n\t\t\t\t// vertices\n\n\t\t\t\tvar vertices = [];\n\t\t\t\tvar spineVector = new Vector3();\n\t\t\t\tvar scaling = new Vector3();\n\n\t\t\t\tvar axis = new Vector3();\n\t\t\t\tvar vertex = new Vector3();\n\t\t\t\tvar quaternion = new Quaternion();\n\n\t\t\t\tfor ( var i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4 ) {\n\n\t\t\t\t\tspineVector.fromArray( spine, i );\n\n\t\t\t\t\tscaling.x = scale ? scale[ j + 0 ] : 1;\n\t\t\t\t\tscaling.y = 1;\n\t\t\t\t\tscaling.z = scale ? scale[ j + 1 ] : 1;\n\n\t\t\t\t\taxis.x = orientation ? orientation[ o + 0 ] : 0;\n\t\t\t\t\taxis.y = orientation ? orientation[ o + 1 ] : 0;\n\t\t\t\t\taxis.z = orientation ? orientation[ o + 2 ] : 1;\n\t\t\t\t\tvar angle = orientation ? orientation[ o + 3 ] : 0;\n\n\t\t\t\t\tfor ( var k = 0, kl = crossSection.length; k < kl; k += 2 ) {\n\n\t\t\t\t\t\tvertex.x = crossSection[ k + 0 ];\n\t\t\t\t\t\tvertex.y = 0;\n\t\t\t\t\t\tvertex.z = crossSection[ k + 1 ];\n\n\t\t\t\t\t\t// scale\n\n\t\t\t\t\t\tvertex.multiply( scaling );\n\n\t\t\t\t\t\t// rotate\n\n\t\t\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\t\t\t\t\t\tvertex.applyQuaternion( quaternion );\n\n\t\t\t\t\t\t// translate\n\n\t\t\t\t\t\tvertex.add( spineVector );\n\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// indices\n\n\t\t\t\tvar indices = [];\n\n\t\t\t\tvar spineCount = spine.length / 3;\n\t\t\t\tvar crossSectionCount = crossSection.length / 2;\n\n\t\t\t\tfor ( var i = 0; i < spineCount - 1; i ++ ) {\n\n\t\t\t\t\tfor ( var j = 0; j < crossSectionCount - 1; j ++ ) {\n\n\t\t\t\t\t\tvar a = j + i * crossSectionCount;\n\t\t\t\t\t\tvar b = ( j + 1 ) + i * crossSectionCount;\n\t\t\t\t\t\tvar c = j + ( i + 1 ) * crossSectionCount;\n\t\t\t\t\t\tvar d = ( j + 1 ) + ( i + 1 ) * crossSectionCount;\n\n\t\t\t\t\t\tif ( ( j === crossSectionCount - 2 ) && ( crossSectionClosed === true ) ) {\n\n\t\t\t\t\t\t\tb = i * crossSectionCount;\n\t\t\t\t\t\t\td = ( i + 1 ) * crossSectionCount;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\tindices.push( a, b, c );\n\t\t\t\t\t\t\tindices.push( c, b, d );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tindices.push( a, c, b );\n\t\t\t\t\t\t\tindices.push( c, d, b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// triangulate cap\n\n\t\t\t\tif ( beginCap === true || endCap === true ) {\n\n\t\t\t\t\tvar contour = [];\n\n\t\t\t\t\tfor ( var i = 0, l = crossSection.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\tcontour.push( new Vector2( crossSection[ i ], crossSection[ i + 1 ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar faces = ShapeUtils.triangulateShape( contour, [] );\n\t\t\t\t\tvar capIndices = [];\n\n\t\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\t\t\tcapIndices.push( face[ 0 ], face[ 1 ], face[ 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// begin cap\n\n\t\t\t\t\tif ( beginCap === true ) {\n\n\t\t\t\t\t\tfor ( var i = 0, l = capIndices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\t\tindices.push( capIndices[ i + 0 ], capIndices[ i + 1 ], capIndices[ i + 2 ] );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tindices.push( capIndices[ i + 0 ], capIndices[ i + 2 ], capIndices[ i + 1 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// end cap\n\n\t\t\t\t\tif ( endCap === true ) {\n\n\t\t\t\t\t\tvar indexOffset = crossSectionCount * ( spineCount - 1 ); // references to the first vertex of the last cross section\n\n\t\t\t\t\t\tfor ( var i = 0, l = capIndices.length; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\t\t\tindices.push( indexOffset + capIndices[ i + 0 ], indexOffset + capIndices[ i + 2 ], indexOffset + capIndices[ i + 1 ] );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tindices.push( indexOffset + capIndices[ i + 0 ], indexOffset + capIndices[ i + 1 ], indexOffset + capIndices[ i + 2 ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar positionAttribute = toNonIndexedAttribute( indices, new Float32BufferAttribute( vertices, 3 ) );\n\t\t\t\tvar normalAttribute = computeNormalAttribute( indices, vertices, creaseAngle );\n\n\t\t\t\tvar geometry = new BufferGeometry();\n\t\t\t\tgeometry.setAttribute( 'position', positionAttribute );\n\t\t\t\tgeometry.setAttribute( 'normal', normalAttribute );\n\t\t\t\t// no uvs yet\n\n\t\t\t\t// \"solid\" influences the material so let's store it for later use\n\n\t\t\t\tgeometry._solid = solid;\n\t\t\t\tgeometry._type = 'mesh';\n\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t\t// helper functions\n\n\t\t\tfunction resolveUSE( identifier ) {\n\n\t\t\t\tvar node = nodeMap[ identifier ];\n\t\t\t\tvar build = getNode( node );\n\n\t\t\t\t// because the same 3D objects can have different transformations, it's necessary to clone them.\n\t\t\t\t// materials can be influenced by the geometry (e.g. vertex normals). cloning is necessary to avoid\n\t\t\t\t// any side effects\n\n\t\t\t\treturn ( build.isObject3D || build.isMaterial ) ? build.clone() : build;\n\n\t\t\t}\n\n\t\t\tfunction parseFieldChildren( children, owner ) {\n\n\t\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar object = getNode( children[ i ] );\n\n\t\t\t\t\tif ( object instanceof Object3D ) owner.add( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction triangulateFaceIndex( index, ccw ) {\n\n\t\t\t\tvar indices = [];\n\n\t\t\t\t// since face defintions can have more than three vertices, it's necessary to\n\t\t\t\t// perform a simple triangulation\n\n\t\t\t\tvar start = 0;\n\n\t\t\t\tfor ( var i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar i1 = index[ start ];\n\t\t\t\t\tvar i2 = index[ i + ( ccw ? 1 : 2 ) ];\n\t\t\t\t\tvar i3 = index[ i + ( ccw ? 2 : 1 ) ];\n\n\t\t\t\t\tindices.push( i1, i2, i3 );\n\n\t\t\t\t\t// an index of -1 indicates that the current face has ended and the next one begins\n\n\t\t\t\t\tif ( index[ i + 3 ] === - 1 || i + 3 >= l ) {\n\n\t\t\t\t\t\ti += 3;\n\t\t\t\t\t\tstart = i + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn indices;\n\n\t\t\t}\n\n\t\t\tfunction triangulateFaceData( data, index ) {\n\n\t\t\t\tvar triangulatedData = [];\n\n\t\t\t\tvar start = 0;\n\n\t\t\t\tfor ( var i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar stride = start * 3;\n\n\t\t\t\t\tvar x = data[ stride ];\n\t\t\t\t\tvar y = data[ stride + 1 ];\n\t\t\t\t\tvar z = data[ stride + 2 ];\n\n\t\t\t\t\ttriangulatedData.push( x, y, z );\n\n\t\t\t\t\t// an index of -1 indicates that the current face has ended and the next one begins\n\n\t\t\t\t\tif ( index[ i + 3 ] === - 1 || i + 3 >= l ) {\n\n\t\t\t\t\t\ti += 3;\n\t\t\t\t\t\tstart ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn triangulatedData;\n\n\t\t\t}\n\n\t\t\tfunction flattenData( data, index ) {\n\n\t\t\t\tvar flattenData = [];\n\n\t\t\t\tfor ( var i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar i1 = index[ i ];\n\n\t\t\t\t\tvar stride = i1 * 3;\n\n\t\t\t\t\tvar x = data[ stride ];\n\t\t\t\t\tvar y = data[ stride + 1 ];\n\t\t\t\t\tvar z = data[ stride + 2 ];\n\n\t\t\t\t\tflattenData.push( x, y, z );\n\n\t\t\t\t}\n\n\t\t\t\treturn flattenData;\n\n\t\t\t}\n\n\t\t\tfunction expandLineIndex( index ) {\n\n\t\t\t\tvar indices = [];\n\n\t\t\t\tfor ( var i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar i1 = index[ i ];\n\t\t\t\t\tvar i2 = index[ i + 1 ];\n\n\t\t\t\t\tindices.push( i1, i2 );\n\n\t\t\t\t\t// an index of -1 indicates that the current line has ended and the next one begins\n\n\t\t\t\t\tif ( index[ i + 2 ] === - 1 || i + 2 >= l ) {\n\n\t\t\t\t\t\ti += 2;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn indices;\n\n\t\t\t}\n\n\t\t\tfunction expandLineData( data, index ) {\n\n\t\t\t\tvar triangulatedData = [];\n\n\t\t\t\tvar start = 0;\n\n\t\t\t\tfor ( var i = 0, l = index.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar stride = start * 3;\n\n\t\t\t\t\tvar x = data[ stride ];\n\t\t\t\t\tvar y = data[ stride + 1 ];\n\t\t\t\t\tvar z = data[ stride + 2 ];\n\n\t\t\t\t\ttriangulatedData.push( x, y, z );\n\n\t\t\t\t\t// an index of -1 indicates that the current line has ended and the next one begins\n\n\t\t\t\t\tif ( index[ i + 2 ] === - 1 || i + 2 >= l ) {\n\n\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\tstart ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn triangulatedData;\n\n\t\t\t}\n\n\t\t\tvar vA = new Vector3();\n\t\t\tvar vB = new Vector3();\n\t\t\tvar vC = new Vector3();\n\n\t\t\tvar uvA = new Vector2();\n\t\t\tvar uvB = new Vector2();\n\t\t\tvar uvC = new Vector2();\n\n\t\t\tfunction computeAttributeFromIndexedData( coordIndex, index, data, itemSize ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\t// we use the coordIndex.length as delimiter since normalIndex must contain at least as many indices\n\n\t\t\t\tfor ( var i = 0, l = coordIndex.length; i < l; i += 3 ) {\n\n\t\t\t\t\tvar a = index[ i ];\n\t\t\t\t\tvar b = index[ i + 1 ];\n\t\t\t\t\tvar c = index[ i + 2 ];\n\n\t\t\t\t\tif ( itemSize === 2 ) {\n\n\t\t\t\t\t\tuvA.fromArray( data, a * itemSize );\n\t\t\t\t\t\tuvB.fromArray( data, b * itemSize );\n\t\t\t\t\t\tuvC.fromArray( data, c * itemSize );\n\n\t\t\t\t\t\tarray.push( uvA.x, uvA.y );\n\t\t\t\t\t\tarray.push( uvB.x, uvB.y );\n\t\t\t\t\t\tarray.push( uvC.x, uvC.y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvA.fromArray( data, a * itemSize );\n\t\t\t\t\t\tvB.fromArray( data, b * itemSize );\n\t\t\t\t\t\tvC.fromArray( data, c * itemSize );\n\n\t\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\t\t\tarray.push( vB.x, vB.y, vB.z );\n\t\t\t\t\t\tarray.push( vC.x, vC.y, vC.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Float32BufferAttribute( array, itemSize );\n\n\t\t\t}\n\n\t\t\tfunction computeAttributeFromFaceData( index, faceData ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, j = 0, l = index.length; i < l; i += 3, j ++ ) {\n\n\t\t\t\t\tvA.fromArray( faceData, j * 3 );\n\n\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\n\t\t\t\t}\n\n\t\t\t\treturn new Float32BufferAttribute( array, 3 );\n\n\t\t\t}\n\n\t\t\tfunction computeAttributeFromLineData( index, lineData ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, j = 0, l = index.length; i < l; i += 2, j ++ ) {\n\n\t\t\t\t\tvA.fromArray( lineData, j * 3 );\n\n\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\t\t\t\t\tarray.push( vA.x, vA.y, vA.z );\n\n\t\t\t\t}\n\n\t\t\t\treturn new Float32BufferAttribute( array, 3 );\n\n\t\t\t}\n\n\t\t\tfunction toNonIndexedAttribute( indices, attribute ) {\n\n\t\t\t\tvar array = attribute.array;\n\t\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\t\tvar index = 0, index2 = 0;\n\n\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Float32BufferAttribute( array2, itemSize );\n\n\t\t\t}\n\n\t\t\tvar ab = new Vector3();\n\t\t\tvar cb = new Vector3();\n\n\t\t\tfunction computeNormalAttribute( index, coord, creaseAngle ) {\n\n\t\t\t\tvar faces = [];\n\t\t\t\tvar vertexNormals = {};\n\n\t\t\t\t// prepare face and raw vertex normals\n\n\t\t\t\tfor ( var i = 0, l = index.length; i < l; i += 3 ) {\n\n\t\t\t\t\tvar a = index[ i ];\n\t\t\t\t\tvar b = index[ i + 1 ];\n\t\t\t\t\tvar c = index[ i + 2 ];\n\n\t\t\t\t\tvar face = new Face( a, b, c );\n\n\t\t\t\t\tvA.fromArray( coord, a * 3 );\n\t\t\t\t\tvB.fromArray( coord, b * 3 );\n\t\t\t\t\tvC.fromArray( coord, c * 3 );\n\n\t\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tcb.normalize();\n\n\t\t\t\t\tface.normal.copy( cb );\n\n\t\t\t\t\tif ( vertexNormals[ a ] === undefined ) vertexNormals[ a ] = [];\n\t\t\t\t\tif ( vertexNormals[ b ] === undefined ) vertexNormals[ b ] = [];\n\t\t\t\t\tif ( vertexNormals[ c ] === undefined ) vertexNormals[ c ] = [];\n\n\t\t\t\t\tvertexNormals[ a ].push( face.normal );\n\t\t\t\t\tvertexNormals[ b ].push( face.normal );\n\t\t\t\t\tvertexNormals[ c ].push( face.normal );\n\n\t\t\t\t\tfaces.push( face );\n\n\t\t\t\t}\n\n\t\t\t\t// compute vertex normals and build final geometry\n\n\t\t\t\tvar normals = [];\n\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\t\tvar nA = weightedNormal( vertexNormals[ face.a ], face.normal, creaseAngle );\n\t\t\t\t\tvar nB = weightedNormal( vertexNormals[ face.b ], face.normal, creaseAngle );\n\t\t\t\t\tvar nC = weightedNormal( vertexNormals[ face.c ], face.normal, creaseAngle );\n\n\t\t\t\t\tvA.fromArray( coord, face.a * 3 );\n\t\t\t\t\tvB.fromArray( coord, face.b * 3 );\n\t\t\t\t\tvC.fromArray( coord, face.c * 3 );\n\n\t\t\t\t\tnormals.push( nA.x, nA.y, nA.z );\n\t\t\t\t\tnormals.push( nB.x, nB.y, nB.z );\n\t\t\t\t\tnormals.push( nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t\treturn new Float32BufferAttribute( normals, 3 );\n\n\t\t\t}\n\n\t\t\tfunction weightedNormal( normals, vector, creaseAngle ) {\n\n\t\t\t\tvar normal = new Vector3();\n\n\t\t\t\tif ( creaseAngle === 0 ) {\n\n\t\t\t\t\tnormal.copy( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0, l = normals.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tif ( normals[ i ].angleTo( vector ) < creaseAngle ) {\n\n\t\t\t\t\t\t\tnormal.add( normals[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn normal.normalize();\n\n\t\t\t}\n\n\t\t\tfunction toColorArray( colors ) {\n\n\t\t\t\tvar array = [];\n\n\t\t\t\tfor ( var i = 0, l = colors.length; i < l; i += 3 ) {\n\n\t\t\t\t\tarray.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Vertically paints the faces interpolating between the\n\t\t\t * specified colors at the specified angels. This is used for the Background\n\t\t\t * node, but could be applied to other nodes with multiple faces as well.\n\t\t\t *\n\t\t\t * When used with the Background node, default is directionIsDown is true if\n\t\t\t * interpolating the skyColor down from the Zenith. When interpolationg up from\n\t\t\t * the Nadir i.e. interpolating the groundColor, the directionIsDown is false.\n\t\t\t *\n\t\t\t * The first angle is never specified, it is the Zenith (0 rad). Angles are specified\n\t\t\t * in radians. The geometry is thought a sphere, but could be anything. The color interpolation\n\t\t\t * is linear along the Y axis in any case.\n\t\t\t *\n\t\t\t * You must specify one more color than you have angles at the beginning of the colors array.\n\t\t\t * This is the color of the Zenith (the top of the shape).\n\t\t\t *\n\t\t\t * @param {BufferGeometry} geometry\n\t\t\t * @param {number} radius\n\t\t\t * @param {array} angles\n\t\t\t * @param {array} colors\n\t\t\t * @param {boolean} topDown - Whether to work top down or bottom up.\n\t\t\t */\n\t\t\tfunction paintFaces( geometry, radius, angles, colors, topDown ) {\n\n\t\t\t\t// compute threshold values\n\n\t\t\t\tvar thresholds = [];\n\t\t\t\tvar startAngle = ( topDown === true ) ? 0 : Math.PI;\n\n\t\t\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar angle = ( i === 0 ) ? 0 : angles[ i - 1 ];\n\t\t\t\t\tangle = ( topDown === true ) ? angle : ( startAngle - angle );\n\n\t\t\t\t\tvar point = new Vector3();\n\t\t\t\t\tpoint.setFromSphericalCoords( radius, angle, 0 );\n\n\t\t\t\t\tthresholds.push( point );\n\n\t\t\t\t}\n\n\t\t\t\t// generate vertex colors\n\n\t\t\t\tvar indices = geometry.index;\n\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\tvar colorAttribute = new BufferAttribute( new Float32Array( geometry.attributes.position.count * 3 ), 3 );\n\n\t\t\t\tvar position = new Vector3();\n\t\t\t\tvar color = new Color();\n\n\t\t\t\tfor ( var i = 0; i < indices.count; i ++ ) {\n\n\t\t\t\t\tvar index = indices.getX( i );\n\t\t\t\t\tposition.fromBufferAttribute( positionAttribute, index );\n\n\t\t\t\t\tvar thresholdIndexA, thresholdIndexB;\n\t\t\t\t\tvar t = 1;\n\n\t\t\t\t\tfor ( var j = 1; j < thresholds.length; j ++ ) {\n\n\t\t\t\t\t\tthresholdIndexA = j - 1;\n\t\t\t\t\t\tthresholdIndexB = j;\n\n\t\t\t\t\t\tvar thresholdA = thresholds[ thresholdIndexA ];\n\t\t\t\t\t\tvar thresholdB = thresholds[ thresholdIndexB ];\n\n\t\t\t\t\t\tif ( topDown === true ) {\n\n\t\t\t\t\t\t\t// interpolation for sky color\n\n\t\t\t\t\t\t\tif ( position.y <= thresholdA.y && position.y > thresholdB.y ) {\n\n\t\t\t\t\t\t\t\tt = Math.abs( thresholdA.y - position.y ) / Math.abs( thresholdA.y - thresholdB.y );\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// interpolation for ground color\n\n\t\t\t\t\t\t\tif ( position.y >= thresholdA.y && position.y < thresholdB.y ) {\n\n\t\t\t\t\t\t\t\tt = Math.abs( thresholdA.y - position.y ) / Math.abs( thresholdA.y - thresholdB.y );\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar colorA = colors[ thresholdIndexA ];\n\t\t\t\t\tvar colorB = colors[ thresholdIndexB ];\n\n\t\t\t\t\tcolor.copy( colorA ).lerp( colorB, t );\n\n\t\t\t\t\tcolorAttribute.setXYZ( index, color.r, color.g, color.b );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'color', colorAttribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar textureLoader = new TextureLoader( this.manager );\n\t\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\t\t// check version (only 2.0 is supported)\n\n\t\t\tif ( data.indexOf( '#VRML V2.0' ) === - 1 ) {\n\n\t\t\t\tthrow Error( 'THREE.VRMLLexer: Version of VRML asset not supported.' );\n\n\t\t\t}\n\n\t\t\t// create JSON representing the tree structure of the VRML asset\n\n\t\t\tvar tree = generateVRMLTree( data );\n\n\t\t\t// parse the tree structure to a three.js scene\n\n\t\t\tvar scene = parseTree( tree );\n\n\t\t\treturn scene;\n\n\t\t}\n\n\t} );\n\n\tfunction VRMLLexer( tokens ) {\n\n\t\tthis.lexer = new chevrotain.Lexer( tokens ); // eslint-disable-line no-undef\n\n\t}\n\n\tVRMLLexer.prototype = {\n\n\t\tconstructor: VRMLLexer,\n\n\t\tlex: function ( inputText ) {\n\n\t\t\tvar lexingResult = this.lexer.tokenize( inputText );\n\n\t\t\tif ( lexingResult.errors.length > 0 ) {\n\n\t\t\t\tconsole.error( lexingResult.errors );\n\n\t\t\t\tthrow Error( 'THREE.VRMLLexer: Lexing errors detected.' );\n\n\t\t\t}\n\n\t\t\treturn lexingResult;\n\n\t\t}\n\n\t};\n\n\tfunction VRMLParser( tokenVocabulary ) {\n\n\t\tchevrotain.Parser.call( this, tokenVocabulary ); // eslint-disable-line no-undef\n\n\t\tvar $ = this;\n\n\t\tvar Version = tokenVocabulary[ 'Version' ];\n\t\tvar LCurly = tokenVocabulary[ 'LCurly' ];\n\t\tvar RCurly = tokenVocabulary[ 'RCurly' ];\n\t\tvar LSquare = tokenVocabulary[ 'LSquare' ];\n\t\tvar RSquare = tokenVocabulary[ 'RSquare' ];\n\t\tvar Identifier = tokenVocabulary[ 'Identifier' ];\n\t\tvar RouteIdentifier = tokenVocabulary[ 'RouteIdentifier' ];\n\t\tvar StringLiteral = tokenVocabulary[ 'StringLiteral' ];\n\t\tvar HexLiteral = tokenVocabulary[ 'HexLiteral' ];\n\t\tvar NumberLiteral = tokenVocabulary[ 'NumberLiteral' ];\n\t\tvar TrueLiteral = tokenVocabulary[ 'TrueLiteral' ];\n\t\tvar FalseLiteral = tokenVocabulary[ 'FalseLiteral' ];\n\t\tvar NullLiteral = tokenVocabulary[ 'NullLiteral' ];\n\t\tvar DEF = tokenVocabulary[ 'DEF' ];\n\t\tvar USE = tokenVocabulary[ 'USE' ];\n\t\tvar ROUTE = tokenVocabulary[ 'ROUTE' ];\n\t\tvar TO = tokenVocabulary[ 'TO' ];\n\t\tvar NodeName = tokenVocabulary[ 'NodeName' ];\n\n\t\t$.RULE( 'vrml', function () {\n\n\t\t\t$.SUBRULE( $.version );\n\t\t\t$.AT_LEAST_ONE( function () {\n\n\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t} );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.SUBRULE( $.route );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t$.RULE( 'version', function () {\n\n\t\t\t$.CONSUME( Version );\n\n\t\t} );\n\n\t\t$.RULE( 'node', function () {\n\n\t\t\t$.OPTION( function () {\n\n\t\t\t\t$.SUBRULE( $.def );\n\n\t\t\t} );\n\n\t\t\t$.CONSUME( NodeName );\n\t\t\t$.CONSUME( LCurly );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.SUBRULE( $.field );\n\n\t\t\t} );\n\t\t\t$.CONSUME( RCurly );\n\n\t\t} );\n\n\t\t$.RULE( 'field', function () {\n\n\t\t\t$.CONSUME( Identifier );\n\n\t\t\t$.OR2( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.SUBRULE( $.singleFieldValue );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.SUBRULE( $.multiFieldValue );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'def', function () {\n\n\t\t\t$.CONSUME( DEF );\n\t\t\t$.OR( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( Identifier );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( NodeName );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'use', function () {\n\n\t\t\t$.CONSUME( USE );\n\t\t\t$.OR( [\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( Identifier );\n\n\t\t\t\t} },\n\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t$.CONSUME( NodeName );\n\n\t\t\t\t} }\n\t\t\t] );\n\n\t\t} );\n\n\t\t$.RULE( 'singleFieldValue', function () {\n\n\t\t\t$.AT_LEAST_ONE( function () {\n\n\t\t\t\t$.OR( [\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.use );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( StringLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( HexLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NumberLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( TrueLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( FalseLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NullLiteral );\n\n\t\t\t\t\t} }\n\t\t\t\t] );\n\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t$.RULE( 'multiFieldValue', function () {\n\n\t\t\t$.CONSUME( LSquare );\n\t\t\t$.MANY( function () {\n\n\t\t\t\t$.OR( [\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.node );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.SUBRULE( $.use );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( StringLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( HexLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NumberLiteral );\n\n\t\t\t\t\t} },\n\t\t\t\t\t{ ALT: function () {\n\n\t\t\t\t\t\t$.CONSUME( NullLiteral );\n\n\t\t\t\t\t} }\n\t\t\t\t] );\n\n\t\t\t} );\n\t\t\t$.CONSUME( RSquare );\n\n\t\t} );\n\n\t\t$.RULE( 'route', function () {\n\n\t\t\t$.CONSUME( ROUTE );\n\t\t\t$.CONSUME( RouteIdentifier );\n\t\t\t$.CONSUME( TO );\n\t\t\t$.CONSUME2( RouteIdentifier );\n\n\t\t} );\n\n\t\tthis.performSelfAnalysis();\n\n\t}\n\n\tVRMLParser.prototype = Object.create( chevrotain.Parser.prototype ); // eslint-disable-line no-undef\n\tVRMLParser.prototype.constructor = VRMLParser;\n\n\tfunction Face( a, b, c ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\t\tthis.normal = new Vector3();\n\n\t}\n\n\tvar TEXTURE_TYPE = {\n\t\tINTENSITY: 1,\n\t\tINTENSITY_ALPHA: 2,\n\t\tRGB: 3,\n\t\tRGBA: 4\n\t};\n\n\treturn VRMLLoader;\n\n} )();\n\nexport { VRMLLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/VRMLoader.js",
    "content": "import {\n\tLoader\n} from '../../../build/three.module.js';\nimport { GLTFLoader } from '../loaders/GLTFLoader.js';\n\n// VRM Specification: https://dwango.github.io/vrm/vrm_spec/\n//\n// VRM is based on glTF 2.0 and VRM extension is defined\n// in top-level json.extensions.VRM\n\nvar VRMLoader = ( function () {\n\n\tfunction VRMLoader( manager ) {\n\n\t\tif ( GLTFLoader === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.VRMLoader: Import GLTFLoader.' );\n\n\t\t}\n\n\t\tLoader.call( this, manager );\n\n\t\tthis.gltfLoader = new GLTFLoader( this.manager );\n\n\t}\n\n\tVRMLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\t\tconstructor: VRMLoader,\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tthis.gltfLoader.load( url, function ( gltf ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tscope.parse( gltf, onLoad );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetDRACOLoader: function ( dracoLoader ) {\n\n\t\t\tthis.gltfLoader.setDRACOLoader( dracoLoader );\n\t\t\treturn this;\n\n\t\t},\n\n\t\tparse: function ( gltf, onLoad ) {\n\n\t\t\t// var gltfParser = gltf.parser;\n\t\t\t// var gltfExtensions = gltf.userData.gltfExtensions || {};\n\t\t\t// var vrmExtension = gltfExtensions.VRM || {};\n\n\t\t\t// handle VRM Extension here\n\n\t\t\tonLoad( gltf );\n\n\t\t}\n\n\t} );\n\n\treturn VRMLoader;\n\n} )();\n\nexport { VRMLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/VTKLoader.js",
    "content": "import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLoaderUtils\n} from '../../../build/three.module.js';\nimport { Inflate } from '../libs/inflate.module.min.js';\n\nvar VTKLoader = function ( manager ) {\n\n\tLoader.call( this, manager );\n\n};\n\nVTKLoader.prototype = Object.assign( Object.create( Loader.prototype ), {\n\n\tconstructor: VTKLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t},\n\n\tparse: function ( data ) {\n\n\t\tfunction parseASCII( data ) {\n\n\t\t\t// connectivity of the triangles\n\t\t\tvar indices = [];\n\n\t\t\t// triangles vertices\n\t\t\tvar positions = [];\n\n\t\t\t// red, green, blue colors in the range 0 to 1\n\t\t\tvar colors = [];\n\n\t\t\t// normal vector, one per vertex\n\t\t\tvar normals = [];\n\n\t\t\tvar result;\n\n\t\t\t// pattern for detecting the end of a number sequence\n\t\t\tvar patWord = /^[^\\d.\\s-]+/;\n\n\t\t\t// pattern for reading vertices, 3 floats or integers\n\t\t\tvar pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g;\n\n\t\t\t// pattern for connectivity, an integer followed by any number of ints\n\t\t\t// the first integer is the number of polygon nodes\n\t\t\tvar patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/;\n\n\t\t\t// indicates start of vertex data section\n\t\t\tvar patPOINTS = /^POINTS /;\n\n\t\t\t// indicates start of polygon connectivity section\n\t\t\tvar patPOLYGONS = /^POLYGONS /;\n\n\t\t\t// indicates start of triangle strips section\n\t\t\tvar patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /;\n\n\t\t\t// POINT_DATA number_of_values\n\t\t\tvar patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/;\n\n\t\t\t// CELL_DATA number_of_polys\n\t\t\tvar patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/;\n\n\t\t\t// Start of color section\n\t\t\tvar patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/;\n\n\t\t\t// NORMALS Normals float\n\t\t\tvar patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/;\n\n\t\t\tvar inPointsSection = false;\n\t\t\tvar inPolygonsSection = false;\n\t\t\tvar inTriangleStripSection = false;\n\t\t\tvar inPointDataSection = false;\n\t\t\tvar inCellDataSection = false;\n\t\t\tvar inColorSection = false;\n\t\t\tvar inNormalsSection = false;\n\n\t\t\tvar lines = data.split( '\\n' );\n\n\t\t\tfor ( var i in lines ) {\n\n\t\t\t\tvar line = lines[ i ].trim();\n\n\t\t\t\tif ( line.indexOf( 'DATASET' ) === 0 ) {\n\n\t\t\t\t\tvar dataset = line.split( ' ' )[ 1 ];\n\n\t\t\t\t\tif ( dataset !== 'POLYDATA' ) throw new Error( 'Unsupported DATASET type: ' + dataset );\n\n\t\t\t\t} else if ( inPointsSection ) {\n\n\t\t\t\t\t// get the vertices\n\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\tvar x = parseFloat( result[ 1 ] );\n\t\t\t\t\t\tvar y = parseFloat( result[ 2 ] );\n\t\t\t\t\t\tvar z = parseFloat( result[ 3 ] );\n\t\t\t\t\t\tpositions.push( x, y, z );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inPolygonsSection ) {\n\n\t\t\t\t\tif ( ( result = patConnectivity.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t// numVertices i0 i1 i2 ...\n\t\t\t\t\t\tvar numVertices = parseInt( result[ 1 ] );\n\t\t\t\t\t\tvar inds = result[ 2 ].split( /\\s+/ );\n\n\t\t\t\t\t\tif ( numVertices >= 3 ) {\n\n\t\t\t\t\t\t\tvar i0 = parseInt( inds[ 0 ] );\n\t\t\t\t\t\t\tvar i1, i2;\n\t\t\t\t\t\t\tvar k = 1;\n\t\t\t\t\t\t\t// split the polygon in numVertices - 2 triangles\n\t\t\t\t\t\t\tfor ( var j = 0; j < numVertices - 2; ++ j ) {\n\n\t\t\t\t\t\t\t\ti1 = parseInt( inds[ k ] );\n\t\t\t\t\t\t\t\ti2 = parseInt( inds[ k + 1 ] );\n\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\t\t\t\t\t\t\t\tk ++;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inTriangleStripSection ) {\n\n\t\t\t\t\tif ( ( result = patConnectivity.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t// numVertices i0 i1 i2 ...\n\t\t\t\t\t\tvar numVertices = parseInt( result[ 1 ] );\n\t\t\t\t\t\tvar inds = result[ 2 ].split( /\\s+/ );\n\n\t\t\t\t\t\tif ( numVertices >= 3 ) {\n\n\t\t\t\t\t\t\tvar i0, i1, i2;\n\t\t\t\t\t\t\t// split the polygon in numVertices - 2 triangles\n\t\t\t\t\t\t\tfor ( var j = 0; j < numVertices - 2; j ++ ) {\n\n\t\t\t\t\t\t\t\tif ( j % 2 === 1 ) {\n\n\t\t\t\t\t\t\t\t\ti0 = parseInt( inds[ j ] );\n\t\t\t\t\t\t\t\t\ti1 = parseInt( inds[ j + 2 ] );\n\t\t\t\t\t\t\t\t\ti2 = parseInt( inds[ j + 1 ] );\n\t\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\ti0 = parseInt( inds[ j ] );\n\t\t\t\t\t\t\t\t\ti1 = parseInt( inds[ j + 1 ] );\n\t\t\t\t\t\t\t\t\ti2 = parseInt( inds[ j + 2 ] );\n\t\t\t\t\t\t\t\t\tindices.push( i0, i1, i2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( inPointDataSection || inCellDataSection ) {\n\n\t\t\t\t\tif ( inColorSection ) {\n\n\t\t\t\t\t\t// Get the colors\n\n\t\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\t\tvar r = parseFloat( result[ 1 ] );\n\t\t\t\t\t\t\tvar g = parseFloat( result[ 2 ] );\n\t\t\t\t\t\t\tvar b = parseFloat( result[ 3 ] );\n\t\t\t\t\t\t\tcolors.push( r, g, b );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( inNormalsSection ) {\n\n\t\t\t\t\t\t// Get the normal vectors\n\n\t\t\t\t\t\twhile ( ( result = pat3Floats.exec( line ) ) !== null ) {\n\n\t\t\t\t\t\t\tif ( patWord.exec( line ) !== null ) break;\n\n\t\t\t\t\t\t\tvar nx = parseFloat( result[ 1 ] );\n\t\t\t\t\t\t\tvar ny = parseFloat( result[ 2 ] );\n\t\t\t\t\t\t\tvar nz = parseFloat( result[ 3 ] );\n\t\t\t\t\t\t\tnormals.push( nx, ny, nz );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( patPOLYGONS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patPOINTS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinPointsSection = true;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patTRIANGLE_STRIPS.exec( line ) !== null ) {\n\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinTriangleStripSection = true;\n\n\t\t\t\t} else if ( patPOINT_DATA.exec( line ) !== null ) {\n\n\t\t\t\t\tinPointDataSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patCELL_DATA.exec( line ) !== null ) {\n\n\t\t\t\t\tinCellDataSection = true;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patCOLOR_SCALARS.exec( line ) !== null ) {\n\n\t\t\t\t\tinColorSection = true;\n\t\t\t\t\tinNormalsSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t} else if ( patNORMALS.exec( line ) !== null ) {\n\n\t\t\t\t\tinNormalsSection = true;\n\t\t\t\t\tinColorSection = false;\n\t\t\t\t\tinPointsSection = false;\n\t\t\t\t\tinPolygonsSection = false;\n\t\t\t\t\tinTriangleStripSection = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( indices );\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\t\tif ( normals.length === positions.length ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t\t\t}\n\n\t\t\tif ( colors.length !== indices.length ) {\n\n\t\t\t\t// stagger\n\n\t\t\t\tif ( colors.length === positions.length ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// cell\n\n\t\t\t\tgeometry = geometry.toNonIndexed();\n\t\t\t\tvar numTriangles = geometry.attributes.position.count / 3;\n\n\t\t\t\tif ( colors.length === ( numTriangles * 3 ) ) {\n\n\t\t\t\t\tvar newColors = [];\n\n\t\t\t\t\tfor ( var i = 0; i < numTriangles; i ++ ) {\n\n\t\t\t\t\t\tvar r = colors[ 3 * i + 0 ];\n\t\t\t\t\t\tvar g = colors[ 3 * i + 1 ];\n\t\t\t\t\t\tvar b = colors[ 3 * i + 2 ];\n\n\t\t\t\t\t\tnewColors.push( r, g, b );\n\t\t\t\t\t\tnewColors.push( r, g, b );\n\t\t\t\t\t\tnewColors.push( r, g, b );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( newColors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction parseBinary( data ) {\n\n\t\t\tvar count, pointIndex, i, numberOfPoints, s;\n\t\t\tvar buffer = new Uint8Array( data );\n\t\t\tvar dataView = new DataView( data );\n\n\t\t\t// Points and normals, by default, are empty\n\t\t\tvar points = [];\n\t\t\tvar normals = [];\n\t\t\tvar indices = [];\n\n\t\t\t// Going to make a big array of strings\n\t\t\tvar vtk = [];\n\t\t\tvar index = 0;\n\n\t\t\tfunction findString( buffer, start ) {\n\n\t\t\t\tvar index = start;\n\t\t\t\tvar c = buffer[ index ];\n\t\t\t\tvar s = [];\n\t\t\t\twhile ( c !== 10 ) {\n\n\t\t\t\t\ts.push( String.fromCharCode( c ) );\n\t\t\t\t\tindex ++;\n\t\t\t\t\tc = buffer[ index ];\n\n\t\t\t\t}\n\n\t\t\t\treturn { start: start,\n\t\t\t\t\tend: index,\n\t\t\t\t\tnext: index + 1,\n\t\t\t\t\tparsedString: s.join( '' ) };\n\n\t\t\t}\n\n\t\t\tvar state, line;\n\n\t\t\twhile ( true ) {\n\n\t\t\t\t// Get a string\n\t\t\t\tstate = findString( buffer, index );\n\t\t\t\tline = state.parsedString;\n\n\t\t\t\tif ( line.indexOf( 'DATASET' ) === 0 ) {\n\n\t\t\t\t\tvar dataset = line.split( ' ' )[ 1 ];\n\n\t\t\t\t\tif ( dataset !== 'POLYDATA' ) throw new Error( 'Unsupported DATASET type: ' + dataset );\n\n\t\t\t\t} else if ( line.indexOf( 'POINTS' ) === 0 ) {\n\n\t\t\t\t\tvtk.push( line );\n\t\t\t\t\t// Add the points\n\t\t\t\t\tnumberOfPoints = parseInt( line.split( ' ' )[ 1 ], 10 );\n\n\t\t\t\t\t// Each point is 3 4-byte floats\n\t\t\t\t\tcount = numberOfPoints * 4 * 3;\n\n\t\t\t\t\tpoints = new Float32Array( numberOfPoints * 3 );\n\n\t\t\t\t\tpointIndex = state.next;\n\t\t\t\t\tfor ( i = 0; i < numberOfPoints; i ++ ) {\n\n\t\t\t\t\t\tpoints[ 3 * i ] = dataView.getFloat32( pointIndex, false );\n\t\t\t\t\t\tpoints[ 3 * i + 1 ] = dataView.getFloat32( pointIndex + 4, false );\n\t\t\t\t\t\tpoints[ 3 * i + 2 ] = dataView.getFloat32( pointIndex + 8, false );\n\t\t\t\t\t\tpointIndex = pointIndex + 12;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'TRIANGLE_STRIPS' ) === 0 ) {\n\n\t\t\t\t\tvar numberOfStrips = parseInt( line.split( ' ' )[ 1 ], 10 );\n\t\t\t\t\tvar size = parseInt( line.split( ' ' )[ 2 ], 10 );\n\t\t\t\t\t// 4 byte integers\n\t\t\t\t\tcount = size * 4;\n\n\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\t\t\t\t\tvar indicesIndex = 0;\n\n\t\t\t\t\tpointIndex = state.next;\n\t\t\t\t\tfor ( i = 0; i < numberOfStrips; i ++ ) {\n\n\t\t\t\t\t\t// For each strip, read the first value, then record that many more points\n\t\t\t\t\t\tvar indexCount = dataView.getInt32( pointIndex, false );\n\t\t\t\t\t\tvar strip = [];\n\t\t\t\t\t\tpointIndex += 4;\n\t\t\t\t\t\tfor ( s = 0; s < indexCount; s ++ ) {\n\n\t\t\t\t\t\t\tstrip.push( dataView.getInt32( pointIndex, false ) );\n\t\t\t\t\t\t\tpointIndex += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// retrieves the n-2 triangles from the triangle strip\n\t\t\t\t\t\tfor ( var j = 0; j < indexCount - 2; j ++ ) {\n\n\t\t\t\t\t\t\tif ( j % 2 ) {\n\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t\t} else {\n\n\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'POLYGONS' ) === 0 ) {\n\n\t\t\t\t\tvar numberOfStrips = parseInt( line.split( ' ' )[ 1 ], 10 );\n\t\t\t\t\tvar size = parseInt( line.split( ' ' )[ 2 ], 10 );\n\t\t\t\t\t// 4 byte integers\n\t\t\t\t\tcount = size * 4;\n\n\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\t\t\t\t\tvar indicesIndex = 0;\n\n\t\t\t\t\tpointIndex = state.next;\n\t\t\t\t\tfor ( i = 0; i < numberOfStrips; i ++ ) {\n\n\t\t\t\t\t\t// For each strip, read the first value, then record that many more points\n\t\t\t\t\t\tvar indexCount = dataView.getInt32( pointIndex, false );\n\t\t\t\t\t\tvar strip = [];\n\t\t\t\t\t\tpointIndex += 4;\n\t\t\t\t\t\tfor ( s = 0; s < indexCount; s ++ ) {\n\n\t\t\t\t\t\t\tstrip.push( dataView.getInt32( pointIndex, false ) );\n\t\t\t\t\t\t\tpointIndex += 4;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// divide the polygon in n-2 triangle\n\t\t\t\t\t\tfor ( var j = 1; j < indexCount - 1; j ++ ) {\n\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ 0 ];\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// increment our next pointer\n\t\t\t\t\tstate.next = state.next + count + 1;\n\n\t\t\t\t} else if ( line.indexOf( 'POINT_DATA' ) === 0 ) {\n\n\t\t\t\t\tnumberOfPoints = parseInt( line.split( ' ' )[ 1 ], 10 );\n\n\t\t\t\t\t// Grab the next line\n\t\t\t\t\tstate = findString( buffer, state.next );\n\n\t\t\t\t\t// Now grab the binary data\n\t\t\t\t\tcount = numberOfPoints * 4 * 3;\n\n\t\t\t\t\tnormals = new Float32Array( numberOfPoints * 3 );\n\t\t\t\t\tpointIndex = state.next;\n\t\t\t\t\tfor ( i = 0; i < numberOfPoints; i ++ ) {\n\n\t\t\t\t\t\tnormals[ 3 * i ] = dataView.getFloat32( pointIndex, false );\n\t\t\t\t\t\tnormals[ 3 * i + 1 ] = dataView.getFloat32( pointIndex + 4, false );\n\t\t\t\t\t\tnormals[ 3 * i + 2 ] = dataView.getFloat32( pointIndex + 8, false );\n\t\t\t\t\t\tpointIndex += 12;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Increment past our data\n\t\t\t\t\tstate.next = state.next + count;\n\n\t\t\t\t}\n\n\t\t\t\t// Increment index\n\t\t\t\tindex = state.next;\n\n\t\t\t\tif ( index >= buffer.byteLength ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( points, 3 ) );\n\n\t\t\tif ( normals.length === points.length ) {\n\n\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t\tfunction Float32Concat( first, second ) {\n\n\t\t    var firstLength = first.length, result = new Float32Array( firstLength + second.length );\n\n\t\t    result.set( first );\n\t\t    result.set( second, firstLength );\n\n\t\t    return result;\n\n\t\t}\n\n\t\tfunction Int32Concat( first, second ) {\n\n\t\t    var firstLength = first.length, result = new Int32Array( firstLength + second.length );\n\n\t\t    result.set( first );\n\t\t    result.set( second, firstLength );\n\n\t\t    return result;\n\n\t\t}\n\n\t\tfunction parseXML( stringFile ) {\n\n\t\t\t// Changes XML to JSON, based on https://davidwalsh.name/convert-xml-json\n\n\t\t\tfunction xmlToJson( xml ) {\n\n\t\t\t\t// Create the return object\n\t\t\t\tvar obj = {};\n\n\t\t\t\tif ( xml.nodeType === 1 ) { // element\n\n\t\t\t\t\t// do attributes\n\n\t\t\t\t\tif ( xml.attributes ) {\n\n\t\t\t\t\t\tif ( xml.attributes.length > 0 ) {\n\n\t\t\t\t\t\t\tobj[ 'attributes' ] = {};\n\n\t\t\t\t\t\t\tfor ( var j = 0; j < xml.attributes.length; j ++ ) {\n\n\t\t\t\t\t\t\t\tvar attribute = xml.attributes.item( j );\n\t\t\t\t\t\t\t\tobj[ 'attributes' ][ attribute.nodeName ] = attribute.nodeValue.trim();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( xml.nodeType === 3 ) { // text\n\n\t\t\t\t\tobj = xml.nodeValue.trim();\n\n\t\t\t\t}\n\n\t\t\t\t// do children\n\t\t\t\tif ( xml.hasChildNodes() ) {\n\n\t\t\t\t\tfor ( var i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\t\t\tvar item = xml.childNodes.item( i );\n\t\t\t\t\t\tvar nodeName = item.nodeName;\n\n\t\t\t\t\t\tif ( typeof obj[ nodeName ] === 'undefined' ) {\n\n\t\t\t\t\t\t\tvar tmp = xmlToJson( item );\n\n\t\t\t\t\t\t\tif ( tmp !== '' ) obj[ nodeName ] = tmp;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( typeof obj[ nodeName ].push === 'undefined' ) {\n\n\t\t\t\t\t\t\t\tvar old = obj[ nodeName ];\n\t\t\t\t\t\t\t\tobj[ nodeName ] = [ old ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar tmp = xmlToJson( item );\n\n\t\t\t\t\t\t\tif ( tmp !== '' ) obj[ nodeName ].push( tmp );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn obj;\n\n\t\t\t}\n\n\t\t\t// Taken from Base64-js\n\t\t\tfunction Base64toByteArray( b64 ) {\n\n\t\t\t\tvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\n\t\t\t\tvar i;\n\t\t\t\tvar lookup = [];\n\t\t\t\tvar revLookup = [];\n\t\t\t\tvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\t\tvar len = code.length;\n\n\t\t\t\tfor ( i = 0; i < len; i ++ ) {\n\n\t\t\t\t\tlookup[ i ] = code[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0; i < len; ++ i ) {\n\n\t\t\t\t\trevLookup[ code.charCodeAt( i ) ] = i;\n\n\t\t\t\t}\n\n\t\t\t\trevLookup[ '-'.charCodeAt( 0 ) ] = 62;\n\t\t\t\trevLookup[ '_'.charCodeAt( 0 ) ] = 63;\n\n\t\t\t\tvar j, l, tmp, placeHolders, arr;\n\t\t\t\tvar len = b64.length;\n\n\t\t\t\tif ( len % 4 > 0 ) {\n\n\t\t\t\t\tthrow new Error( 'Invalid string. Length must be a multiple of 4' );\n\n\t\t\t\t}\n\n\t\t\t\tplaceHolders = b64[ len - 2 ] === '=' ? 2 : b64[ len - 1 ] === '=' ? 1 : 0;\n\t\t\t\tarr = new Arr( len * 3 / 4 - placeHolders );\n\t\t\t\tl = placeHolders > 0 ? len - 4 : len;\n\n\t\t\t\tvar L = 0;\n\n\t\t\t\tfor ( i = 0, j = 0; i < l; i += 4, j += 3 ) {\n\n\t\t\t\t\ttmp = ( revLookup[ b64.charCodeAt( i ) ] << 18 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] << 12 ) | ( revLookup[ b64.charCodeAt( i + 2 ) ] << 6 ) | revLookup[ b64.charCodeAt( i + 3 ) ];\n\t\t\t\t\tarr[ L ++ ] = ( tmp & 0xFF0000 ) >> 16;\n\t\t\t\t\tarr[ L ++ ] = ( tmp & 0xFF00 ) >> 8;\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t}\n\n\t\t\t\tif ( placeHolders === 2 ) {\n\n\t\t\t\t\ttmp = ( revLookup[ b64.charCodeAt( i ) ] << 2 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] >> 4 );\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t} else if ( placeHolders === 1 ) {\n\n\t\t\t\t\ttmp = ( revLookup[ b64.charCodeAt( i ) ] << 10 ) | ( revLookup[ b64.charCodeAt( i + 1 ) ] << 4 ) | ( revLookup[ b64.charCodeAt( i + 2 ) ] >> 2 );\n\t\t\t\t\tarr[ L ++ ] = ( tmp >> 8 ) & 0xFF;\n\t\t\t\t\tarr[ L ++ ] = tmp & 0xFF;\n\n\t\t\t\t}\n\n\t\t\t\treturn arr;\n\n\t\t\t}\n\n\t\t\tfunction parseDataArray( ele, compressed ) {\n\n\t\t\t\tvar numBytes = 0;\n\n\t\t\t\tif ( json.attributes.header_type === 'UInt64' ) {\n\n\t\t\t\t\tnumBytes = 8;\n\n\t\t\t\t}\telse if ( json.attributes.header_type === 'UInt32' ) {\n\n\t\t\t\t\tnumBytes = 4;\n\n\t\t\t\t}\n\n\n\t\t\t\t// Check the format\n\t\t\t\tif ( ele.attributes.format === 'binary' && compressed ) {\n\n\t\t\t\t\tvar rawData, content, byteData, blocks, cSizeStart, headerSize, padding, dataOffsets, currentOffset;\n\n\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\tvar txt = new Float32Array( );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\tvar txt = new Int32Array( );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// VTP data with the header has the following structure:\n\t\t\t\t\t// [#blocks][#u-size][#p-size][#c-size-1][#c-size-2]...[#c-size-#blocks][DATA]\n\t\t\t\t\t//\n\t\t\t\t\t// Each token is an integer value whose type is specified by \"header_type\" at the top of the file (UInt32 if no type specified). The token meanings are:\n\t\t\t\t\t// [#blocks] = Number of blocks\n\t\t\t\t\t// [#u-size] = Block size before compression\n\t\t\t\t\t// [#p-size] = Size of last partial block (zero if it not needed)\n\t\t\t\t\t// [#c-size-i] = Size in bytes of block i after compression\n\t\t\t\t\t//\n\t\t\t\t\t// The [DATA] portion stores contiguously every block appended together. The offset from the beginning of the data section to the beginning of a block is\n\t\t\t\t\t// computed by summing the compressed block sizes from preceding blocks according to the header.\n\n\t\t\t\t\trawData = ele[ '#text' ];\n\n\t\t\t\t\tbyteData = Base64toByteArray( rawData );\n\n\t\t\t\t\tblocks = byteData[ 0 ];\n\t\t\t\t\tfor ( var i = 1; i < numBytes - 1; i ++ ) {\n\n\t\t\t\t\t\tblocks = blocks | ( byteData[ i ] << ( i * numBytes ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\theaderSize = ( blocks + 3 ) * numBytes;\n\t\t\t\t\tpadding = ( ( headerSize % 3 ) > 0 ) ? 3 - ( headerSize % 3 ) : 0;\n\t\t\t\t\theaderSize = headerSize + padding;\n\n\t\t\t\t\tdataOffsets = [];\n\t\t\t\t\tcurrentOffset = headerSize;\n\t\t\t\t\tdataOffsets.push( currentOffset );\n\n\t\t\t\t\t// Get the blocks sizes after the compression.\n\t\t\t\t\t// There are three blocks before c-size-i, so we skip 3*numBytes\n\t\t\t\t\tcSizeStart = 3 * numBytes;\n\n\t\t\t\t\tfor ( var i = 0; i < blocks; i ++ ) {\n\n\t\t\t\t\t\tvar currentBlockSize = byteData[ i * numBytes + cSizeStart ];\n\n\t\t\t\t\t\tfor ( var j = 1; j < numBytes - 1; j ++ ) {\n\n\t\t\t\t\t\t\t// Each data point consists of 8 bytes regardless of the header type\n\t\t\t\t\t\t\tcurrentBlockSize = currentBlockSize | ( byteData[ i * numBytes + cSizeStart + j ] << ( j * 8 ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentOffset = currentOffset + currentBlockSize;\n\t\t\t\t\t\tdataOffsets.push( currentOffset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0; i < dataOffsets.length - 1; i ++ ) {\n\n\t\t\t\t\t\tvar inflate = new Inflate( byteData.slice( dataOffsets[ i ], dataOffsets[ i + 1 ] ), { resize: true, verify: true } ); // eslint-disable-line no-undef\n\t\t\t\t\t\tcontent = inflate.decompress();\n\t\t\t\t\t\tcontent = content.buffer;\n\n\t\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\t\tcontent = new Float32Array( content );\n\t\t\t\t\t\t\ttxt = Float32Concat( txt, content );\n\n\t\t\t\t\t\t} else if ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\t\tcontent = new Int32Array( content );\n\t\t\t\t\t\t\ttxt = Int32Concat( txt, content );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete ele[ '#text' ];\n\n\t\t\t\t\tif ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\tif ( ele.attributes.format === 'binary' ) {\n\n\t\t\t\t\t\t\ttxt = txt.filter( function ( el, idx ) {\n\n\t\t\t\t\t\t\t\tif ( idx % 2 !== 1 ) return true;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ele.attributes.format === 'binary' && ! compressed ) {\n\n\t\t\t\t\t\tvar content = Base64toByteArray( ele[ '#text' ] );\n\n\t\t\t\t\t\t//  VTP data for the uncompressed case has the following structure:\n\t\t\t\t\t\t// [#bytes][DATA]\n\t\t\t\t\t\t// where \"[#bytes]\" is an integer value specifying the number of bytes in the block of data following it.\n\t\t\t\t\t\tcontent = content.slice( numBytes ).buffer;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ele[ '#text' ] ) {\n\n\t\t\t\t\t\t\tvar content = ele[ '#text' ].split( /\\s+/ ).filter( function ( el ) {\n\n\t\t\t\t\t\t\t\tif ( el !== '' ) return el;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar content = new Int32Array( 0 ).buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete ele[ '#text' ];\n\n\t\t\t\t\t// Get the content and optimize it\n\t\t\t\t\tif ( ele.attributes.type === 'Float32' ) {\n\n\t\t\t\t\t\tvar txt = new Float32Array( content );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int32' ) {\n\n\t\t\t\t\t\tvar txt = new Int32Array( content );\n\n\t\t\t\t\t} else if ( ele.attributes.type === 'Int64' ) {\n\n\t\t\t\t\t\tvar txt = new Int32Array( content );\n\n\t\t\t\t\t\tif ( ele.attributes.format === 'binary' ) {\n\n\t\t\t\t\t\t\ttxt = txt.filter( function ( el, idx ) {\n\n\t\t\t\t\t\t\t\tif ( idx % 2 !== 1 ) return true;\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} // endif ( ele.attributes.format === 'binary' && compressed )\n\n\t\t\t\treturn txt;\n\n\t\t\t}\n\n\t\t\t// Main part\n\t\t\t// Get Dom\n\t\t\tvar dom = null;\n\n\t\t\tif ( window.DOMParser ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tdom = ( new DOMParser() ).parseFromString( stringFile, 'text/xml' );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tdom = null;\n\n\t\t\t\t}\n\n\t\t\t} else if ( window.ActiveXObject ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tdom = new ActiveXObject( 'Microsoft.XMLDOM' ); // eslint-disable-line no-undef\n\t\t\t\t\tdom.async = false;\n\n\t\t\t\t\tif ( ! dom.loadXML( /* xml */ ) ) {\n\n\t\t\t\t\t\tthrow new Error( dom.parseError.reason + dom.parseError.srcText );\n\n\t\t\t\t\t}\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tdom = null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Cannot parse xml string!' );\n\n\t\t\t}\n\n\t\t\t// Get the doc\n\t\t\tvar doc = dom.documentElement;\n\t\t\t// Convert to json\n\t\t\tvar json = xmlToJson( doc );\n\t\t\tvar points = [];\n\t\t\tvar normals = [];\n\t\t\tvar indices = [];\n\n\t\t\tif ( json.PolyData ) {\n\n\t\t\t\tvar piece = json.PolyData.Piece;\n\t\t\t\tvar compressed = json.attributes.hasOwnProperty( 'compressor' );\n\n\t\t\t\t// Can be optimized\n\t\t\t\t// Loop through the sections\n\t\t\t\tvar sections = [ 'PointData', 'Points', 'Strips', 'Polys' ];// +['CellData', 'Verts', 'Lines'];\n\t\t\t\tvar sectionIndex = 0, numberOfSections = sections.length;\n\n\t\t\t\twhile ( sectionIndex < numberOfSections ) {\n\n\t\t\t\t\tvar section = piece[ sections[ sectionIndex ] ];\n\n\t\t\t\t\t// If it has a DataArray in it\n\n\t\t\t\t\tif ( section && section.DataArray ) {\n\n\t\t\t\t\t\t// Depending on the number of DataArrays\n\n\t\t\t\t\t\tif ( Object.prototype.toString.call( section.DataArray ) === '[object Array]' ) {\n\n\t\t\t\t\t\t\tvar arr = section.DataArray;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar arr = [ section.DataArray ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar dataArrayIndex = 0, numberOfDataArrays = arr.length;\n\n\t\t\t\t\t\twhile ( dataArrayIndex < numberOfDataArrays ) {\n\n\t\t\t\t\t\t\t// Parse the DataArray\n\t\t\t\t\t\t\tif ( ( '#text' in arr[ dataArrayIndex ] ) && ( arr[ dataArrayIndex ][ '#text' ].length > 0 ) ) {\n\n\t\t\t\t\t\t\t\tarr[ dataArrayIndex ].text = parseDataArray( arr[ dataArrayIndex ], compressed );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdataArrayIndex ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch ( sections[ sectionIndex ] ) {\n\n\t\t\t\t\t\t\t// if iti is point data\n\t\t\t\t\t\t\tcase 'PointData':\n\n\t\t\t\t\t\t\t\tvar numberOfPoints = parseInt( piece.attributes.NumberOfPoints );\n\t\t\t\t\t\t\t\tvar normalsName = section.attributes.Normals;\n\n\t\t\t\t\t\t\t\tif ( numberOfPoints > 0 ) {\n\n\t\t\t\t\t\t\t\t\tfor ( var i = 0, len = arr.length; i < len; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( normalsName === arr[ i ].attributes.Name ) {\n\n\t\t\t\t\t\t\t\t\t\t\tvar components = arr[ i ].attributes.NumberOfComponents;\n\t\t\t\t\t\t\t\t\t\t\tnormals = new Float32Array( numberOfPoints * components );\n\t\t\t\t\t\t\t\t\t\t\tnormals.set( arr[ i ].text, 0 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is points\n\t\t\t\t\t\t\tcase 'Points':\n\n\t\t\t\t\t\t\t\tvar numberOfPoints = parseInt( piece.attributes.NumberOfPoints );\n\n\t\t\t\t\t\t\t\tif ( numberOfPoints > 0 ) {\n\n\t\t\t\t\t\t\t\t\tvar components = section.DataArray.attributes.NumberOfComponents;\n\t\t\t\t\t\t\t\t\tpoints = new Float32Array( numberOfPoints * components );\n\t\t\t\t\t\t\t\t\tpoints.set( section.DataArray.text, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is strips\n\t\t\t\t\t\t\tcase 'Strips':\n\n\t\t\t\t\t\t\t\tvar numberOfStrips = parseInt( piece.attributes.NumberOfStrips );\n\n\t\t\t\t\t\t\t\tif ( numberOfStrips > 0 ) {\n\n\t\t\t\t\t\t\t\t\tvar connectivity = new Int32Array( section.DataArray[ 0 ].text.length );\n\t\t\t\t\t\t\t\t\tvar offset = new Int32Array( section.DataArray[ 1 ].text.length );\n\t\t\t\t\t\t\t\t\tconnectivity.set( section.DataArray[ 0 ].text, 0 );\n\t\t\t\t\t\t\t\t\toffset.set( section.DataArray[ 1 ].text, 0 );\n\n\t\t\t\t\t\t\t\t\tvar size = numberOfStrips + connectivity.length;\n\t\t\t\t\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfStrips );\n\n\t\t\t\t\t\t\t\t\tvar indicesIndex = 0;\n\n\t\t\t\t\t\t\t\t\tfor ( var i = 0, len = numberOfStrips; i < len; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\tvar strip = [];\n\n\t\t\t\t\t\t\t\t\t\tfor ( var s = 0, len1 = offset[ i ], len0 = 0; s < len1 - len0; s ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tstrip.push( connectivity[ s ] );\n\n\t\t\t\t\t\t\t\t\t\t\tif ( i > 0 ) len0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tfor ( var j = 0, len1 = offset[ i ], len0 = 0; j < len1 - len0 - 2; j ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( j % 2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 1 ];\n\t\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = strip[ j + 2 ];\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif ( i > 0 ) len0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t// if it is polys\n\t\t\t\t\t\t\tcase 'Polys':\n\n\t\t\t\t\t\t\t\tvar numberOfPolys = parseInt( piece.attributes.NumberOfPolys );\n\n\t\t\t\t\t\t\t\tif ( numberOfPolys > 0 ) {\n\n\t\t\t\t\t\t\t\t\tvar connectivity = new Int32Array( section.DataArray[ 0 ].text.length );\n\t\t\t\t\t\t\t\t\tvar offset = new Int32Array( section.DataArray[ 1 ].text.length );\n\t\t\t\t\t\t\t\t\tconnectivity.set( section.DataArray[ 0 ].text, 0 );\n\t\t\t\t\t\t\t\t\toffset.set( section.DataArray[ 1 ].text, 0 );\n\n\t\t\t\t\t\t\t\t\tvar size = numberOfPolys + connectivity.length;\n\t\t\t\t\t\t\t\t\tindices = new Uint32Array( 3 * size - 9 * numberOfPolys );\n\t\t\t\t\t\t\t\t\tvar indicesIndex = 0, connectivityIndex = 0;\n\t\t\t\t\t\t\t\t\tvar i = 0, len = numberOfPolys, len0 = 0;\n\n\t\t\t\t\t\t\t\t\twhile ( i < len ) {\n\n\t\t\t\t\t\t\t\t\t\tvar poly = [];\n\t\t\t\t\t\t\t\t\t\tvar s = 0, len1 = offset[ i ];\n\n\t\t\t\t\t\t\t\t\t\twhile ( s < len1 - len0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tpoly.push( connectivity[ connectivityIndex ++ ] );\n\t\t\t\t\t\t\t\t\t\t\ts ++;\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tvar j = 1;\n\n\t\t\t\t\t\t\t\t\t\twhile ( j < len1 - len0 - 1 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ 0 ];\n\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ j ];\n\t\t\t\t\t\t\t\t\t\t\tindices[ indicesIndex ++ ] = poly[ j + 1 ];\n\t\t\t\t\t\t\t\t\t\t\tj ++;\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\ti ++;\n\t\t\t\t\t\t\t\t\t\tlen0 = offset[ i - 1 ];\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsectionIndex ++;\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new BufferGeometry();\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( points, 3 ) );\n\n\t\t\t\tif ( normals.length === points.length ) {\n\n\t\t\t\t\tgeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn geometry;\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Unsupported DATASET type' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// get the 5 first lines of the files to check if there is the key word binary\n\t\tvar meta = LoaderUtils.decodeText( new Uint8Array( data, 0, 250 ) ).split( '\\n' );\n\n\t\tif ( meta[ 0 ].indexOf( 'xml' ) !== - 1 ) {\n\n\t\t\treturn parseXML( LoaderUtils.decodeText( data ) );\n\n\t\t} else if ( meta[ 2 ].includes( 'ASCII' ) ) {\n\n\t\t\treturn parseASCII( LoaderUtils.decodeText( data ) );\n\n\t\t} else {\n\n\t\t\treturn parseBinary( data );\n\n\t\t}\n\n\t}\n\n} );\n\nexport { VTKLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/XLoader.js",
    "content": "import {\n\tAnimationClip,\n\tAnimationMixer,\n\tBone,\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tLoader,\n\tLoaderUtils,\n\tMatrix4,\n\tMesh,\n\tMeshPhongMaterial,\n\tQuaternion,\n\tSkeleton,\n\tSkinnedMesh,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector2,\n\tVector3\n} from '../../../build/three.module.js';\n\nvar XLoader = ( function () {\n\n\tvar classCallCheck = function ( instance, Constructor ) {\n\n\t\tif ( ! ( instance instanceof Constructor ) ) {\n\n\t\t\tthrow new TypeError( 'Cannot call a class as a function' );\n\n\t\t}\n\n\t};\n\n\tvar createClass = function () {\n\n\t\tfunction defineProperties( target, props ) {\n\n\t\t\tfor ( var i = 0; i < props.length; i ++ ) {\n\n\t\t\t\tvar descriptor = props[ i ];\n\t\t\t\tdescriptor.enumerable = descriptor.enumerable || false;\n\t\t\t\tdescriptor.configurable = true;\n\t\t\t\tif ( 'value' in descriptor ) descriptor.writable = true;\n\t\t\t\tObject.defineProperty( target, descriptor.key, descriptor );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function ( Constructor, protoProps, staticProps ) {\n\n\t\t\tif ( protoProps ) defineProperties( Constructor.prototype, protoProps );\n\t\t\tif ( staticProps ) defineProperties( Constructor, staticProps );\n\t\t\treturn Constructor;\n\n\t\t};\n\n\t}();\n\n\tvar XboneInf = function XboneInf() {\n\n\t\tclassCallCheck( this, XboneInf );\n\n\t\tthis.boneName = '';\n\t\tthis.BoneIndex = 0;\n\t\tthis.Indeces = [];\n\t\tthis.Weights = [];\n\t\tthis.initMatrix = null;\n\t\tthis.OffsetMatrix = null;\n\n\t};\n\n\tvar XAnimationInfo = function XAnimationInfo() {\n\n\t\tclassCallCheck( this, XAnimationInfo );\n\n\t\tthis.animeName = '';\n\t\tthis.boneName = '';\n\t\tthis.targetBone = null;\n\t\tthis.keyType = 4;\n\t\tthis.frameStartLv = 0;\n\t\tthis.keyFrames = [];\n\t\tthis.InverseMx = null;\n\n\t};\n\n\tvar XAnimationObj = function () {\n\n\t\tfunction XAnimationObj( _flags ) {\n\n\t\t\tclassCallCheck( this, XAnimationObj );\n\n\t\t\tthis.fps = 30;\n\t\t\tthis.name = 'xanimation';\n\t\t\tthis.length = 0;\n\t\t\tthis.hierarchy = [];\n\t\t\tthis.putFlags = _flags;\n\t\t\tif ( this.putFlags.putPos === undefined ) {\n\n\t\t\t\tthis.putFlags.putPos = true;\n\n\t\t\t}\n\n\t\t\tif ( this.putFlags.putRot === undefined ) {\n\n\t\t\t\tthis.putFlags.putRot = true;\n\n\t\t\t}\n\n\t\t\tif ( this.putFlags.putScl === undefined ) {\n\n\t\t\t\tthis.putFlags.putScl = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcreateClass( XAnimationObj, [ {\n\t\t\tkey: 'make',\n\t\t\tvalue: function make( XAnimationInfoArray ) {\n\n\t\t\t\tfor ( var i = 0; i < XAnimationInfoArray.length; i ++ ) {\n\n\t\t\t\t\tthis.hierarchy.push( this.makeBonekeys( XAnimationInfoArray[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.length = this.hierarchy[ 0 ].keys[ this.hierarchy[ 0 ].keys.length - 1 ].time;\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'clone',\n\t\t\tvalue: function clone() {\n\n\t\t\t\treturn Object.assign( {}, this );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'makeBonekeys',\n\t\t\tvalue: function makeBonekeys( XAnimationInfo ) {\n\n\t\t\t\tvar refObj = {};\n\t\t\t\trefObj.name = XAnimationInfo.boneName;\n\t\t\t\trefObj.parent = '';\n\t\t\t\trefObj.keys = this.keyFrameRefactor( XAnimationInfo );\n\t\t\t\trefObj.copy = function () {\n\n\t\t\t\t\treturn Object.assign( {}, this );\n\n\t\t\t\t};\n\n\t\t\t\treturn refObj;\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'keyFrameRefactor',\n\t\t\tvalue: function keyFrameRefactor( XAnimationInfo ) {\n\n\t\t\t\tvar keys = [];\n\t\t\t\tfor ( var i = 0; i < XAnimationInfo.keyFrames.length; i ++ ) {\n\n\t\t\t\t\tvar keyframe = {};\n\t\t\t\t\tkeyframe.time = XAnimationInfo.keyFrames[ i ].time * this.fps;\n\t\t\t\t\tif ( XAnimationInfo.keyFrames[ i ].pos && this.putFlags.putPos ) {\n\n\t\t\t\t\t\tkeyframe.pos = XAnimationInfo.keyFrames[ i ].pos;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( XAnimationInfo.keyFrames[ i ].rot && this.putFlags.putRot ) {\n\n\t\t\t\t\t\tkeyframe.rot = XAnimationInfo.keyFrames[ i ].rot;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( XAnimationInfo.keyFrames[ i ].scl && this.putFlags.putScl ) {\n\n\t\t\t\t\t\tkeyframe.scl = XAnimationInfo.keyFrames[ i ].scl;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( XAnimationInfo.keyFrames[ i ].matrix ) {\n\n\t\t\t\t\t\tkeyframe.matrix = XAnimationInfo.keyFrames[ i ].matrix;\n\t\t\t\t\t\tif ( this.putFlags.putPos ) {\n\n\t\t\t\t\t\t\tkeyframe.pos = new Vector3().setFromMatrixPosition( keyframe.matrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this.putFlags.putRot ) {\n\n\t\t\t\t\t\t\tkeyframe.rot = new Quaternion().setFromRotationMatrix( keyframe.matrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this.putFlags.putScl ) {\n\n\t\t\t\t\t\t\tkeyframe.scl = new Vector3().setFromMatrixScale( keyframe.matrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkeys.push( keyframe );\n\n\t\t\t\t}\n\n\t\t\t\treturn keys;\n\n\t\t\t}\n\t\t} ] );\n\t\treturn XAnimationObj;\n\n\t}();\n\n\tvar XKeyFrameInfo = function XKeyFrameInfo() {\n\n\t\tclassCallCheck( this, XKeyFrameInfo );\n\n\t\tthis.index = 0;\n\t\tthis.Frame = 0;\n\t\tthis.time = 0.0;\n\t\tthis.matrix = null;\n\n\t};\n\n\tvar XLoader = function () {\n\n\t\tfunction XLoader( manager ) {\n\n\t\t\tLoader.call( this, manager );\n\n\t\t\tclassCallCheck( this, XLoader );\n\n\t\t\tthis.debug = false;\n\t\t\tthis.texloader = new TextureLoader( this.manager );\n\t\t\tthis.url = '';\n\t\t\tthis._putMatLength = 0;\n\t\t\tthis._nowMat = null;\n\t\t\tthis._nowFrameName = '';\n\t\t\tthis.frameHierarchie = [];\n\t\t\tthis.Hierarchies = {};\n\t\t\tthis.HieStack = [];\n\t\t\tthis._currentObject = {};\n\t\t\tthis._currentFrame = {};\n\t\t\tthis._data = null;\n\t\t\tthis.onLoad = null;\n\t\t\tthis.IsUvYReverse = true;\n\t\t\tthis.Meshes = [];\n\t\t\tthis.animations = [];\n\t\t\tthis.animTicksPerSecond = 30;\n\t\t\tthis._currentGeo = null;\n\t\t\tthis._currentAnime = null;\n\t\t\tthis._currentAnimeFrames = null;\n\n\t\t}\n\n\t\tcreateClass( XLoader, [ {\n\t\t\tkey: '_setArgOption',\n\t\t\tvalue: function _setArgOption( _arg ) {\n\n\t\t\t\tvar _start = arguments.length > 1 && arguments[ 1 ] !== undefined ? arguments[ 1 ] : 0;\n\n\t\t\t\tif ( ! _arg ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = _start; i < _arg.length; i ++ ) {\n\n\t\t\t\t\tswitch ( i ) {\n\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\tthis.url = _arg[ i ];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\tthis.options = _arg[ i ];\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.options === undefined ) {\n\n\t\t\t\t\tthis.options = {};\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'load',\n\t\t\tvalue: function load( _arg, onLoad, onProgress, onError ) {\n\n\t\t\t\tvar _this = this;\n\n\t\t\t\tthis._setArgOption( _arg );\n\t\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\t\tloader.setPath( this.path );\n\t\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\t\tloader.setRequestHeader( this.requestHeader );\n\t\t\t\tloader.setWithCredentials( this.withCredentials );\n\t\t\t\tloader.load( this.url, function ( response ) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t_this.parse( response, onLoad );\n\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\tif ( onError ) {\n\n\t\t\t\t\t\t\tonError( e );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this.manager.itemError( _this.url );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_readLine',\n\t\t\tvalue: function _readLine( line ) {\n\n\t\t\t\tvar readed = 0;\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tvar find = - 1;\n\t\t\t\t\tfind = line.indexOf( '//', readed );\n\t\t\t\t\tif ( find === - 1 ) {\n\n\t\t\t\t\t\tfind = line.indexOf( '#', readed );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( find > - 1 && find < 2 ) {\n\n\t\t\t\t\t\tvar foundNewLine = - 1;\n\t\t\t\t\t\tfoundNewLine = line.indexOf( '\\r\\n', readed );\n\t\t\t\t\t\tif ( foundNewLine > 0 ) {\n\n\t\t\t\t\t\t\treaded = foundNewLine + 2;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfoundNewLine = line.indexOf( '\\r', readed );\n\t\t\t\t\t\t\tif ( foundNewLine > 0 ) {\n\n\t\t\t\t\t\t\t\treaded = foundNewLine + 1;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\treaded = line.indexOf( '\\n', readed ) + 1;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn line.substr( readed );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_readLine',\n\t\t\tvalue: function _readLine( line ) {\n\n\t\t\t\tvar readed = 0;\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tvar find = - 1;\n\t\t\t\t\tfind = line.indexOf( '//', readed );\n\t\t\t\t\tif ( find === - 1 ) {\n\n\t\t\t\t\t\tfind = line.indexOf( '#', readed );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( find > - 1 && find < 2 ) {\n\n\t\t\t\t\t\tvar foundNewLine = - 1;\n\t\t\t\t\t\tfoundNewLine = line.indexOf( '\\r\\n', readed );\n\t\t\t\t\t\tif ( foundNewLine > 0 ) {\n\n\t\t\t\t\t\t\treaded = foundNewLine + 2;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfoundNewLine = line.indexOf( '\\r', readed );\n\t\t\t\t\t\t\tif ( foundNewLine > 0 ) {\n\n\t\t\t\t\t\t\t\treaded = foundNewLine + 1;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\treaded = line.indexOf( '\\n', readed ) + 1;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn line.substr( readed );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_isBinary',\n\t\t\tvalue: function _isBinary( binData ) {\n\n\t\t\t\tvar reader = new DataView( binData );\n\t\t\t\tvar face_size = 32 / 8 * 3 + 32 / 8 * 3 * 3 + 16 / 8;\n\t\t\t\tvar n_faces = reader.getUint32( 80, true );\n\t\t\t\tvar expect = 80 + 32 / 8 + n_faces * face_size;\n\t\t\t\tif ( expect === reader.byteLength ) {\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\tvar fileLength = reader.byteLength;\n\t\t\t\tfor ( var index = 0; index < fileLength; index ++ ) {\n\n\t\t\t\t\tif ( reader.getUint8( index, false ) > 127 ) {\n\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_ensureBinary',\n\t\t\tvalue: function _ensureBinary( buf ) {\n\n\t\t\t\tif ( typeof buf === 'string' ) {\n\n\t\t\t\t\tvar array_buffer = new Uint8Array( buf.length );\n\t\t\t\t\tfor ( var i = 0; i < buf.length; i ++ ) {\n\n\t\t\t\t\t\tarray_buffer[ i ] = buf.charCodeAt( i ) & 0xff;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn array_buffer.buffer || array_buffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn buf;\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_ensureString',\n\t\t\tvalue: function _ensureString( buf ) {\n\n\t\t\t\tif ( typeof buf !== 'string' ) {\n\n\t\t\t\t\treturn LoaderUtils.decodeText( new Uint8Array( buf ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn buf;\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'parse',\n\t\t\tvalue: function _parse( data, onLoad ) {\n\n\t\t\t\tvar binData = this._ensureBinary( data );\n\t\t\t\tthis._data = this._ensureString( data );\n\t\t\t\tthis.onLoad = onLoad;\n\t\t\t\treturn this._isBinary( binData ) ? this._parseBinary( binData ) : this._parseASCII();\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_parseBinary',\n\t\t\tvalue: function _parseBinary( data ) {\n\n\t\t\t\treturn this._parseASCII( LoaderUtils.decodeText( new Uint8Array( data ) ) );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_parseASCII',\n\t\t\tvalue: function _parseASCII() {\n\n\t\t\t\tvar path;\n\n\t\t\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\t\t\tpath = this.resourcePath;\n\n\t\t\t\t} else if ( this.path !== '' ) {\n\n\t\t\t\t\tpath = this.path;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpath = LoaderUtils.extractUrlBase( this.url );\n\n\t\t\t\t}\n\n\t\t\t\tthis.texloader.setPath( path ).setCrossOrigin( this.crossOrigin );\n\n\t\t\t\tvar endRead = 16;\n\t\t\t\tthis.Hierarchies.children = [];\n\t\t\t\tthis._hierarchieParse( this.Hierarchies, endRead );\n\t\t\t\tthis._changeRoot();\n\t\t\t\tthis._currentObject = this.Hierarchies.children.shift();\n\t\t\t\tthis._mainloop();\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_hierarchieParse',\n\t\t\tvalue: function _hierarchieParse( _parent, _end ) {\n\n\t\t\t\tvar endRead = _end;\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tvar find1 = this._data.indexOf( '{', endRead ) + 1;\n\t\t\t\t\tvar findEnd = this._data.indexOf( '}', endRead );\n\t\t\t\t\tvar findNext = this._data.indexOf( '{', find1 ) + 1;\n\t\t\t\t\tif ( find1 > 0 && findEnd > find1 ) {\n\n\t\t\t\t\t\tvar _currentObject = {};\n\t\t\t\t\t\t_currentObject.children = [];\n\t\t\t\t\t\tvar nameData = this._readLine( this._data.substr( endRead, find1 - endRead - 1 ) ).trim();\n\t\t\t\t\t\tvar word = nameData.split( / /g );\n\t\t\t\t\t\tif ( word.length > 0 ) {\n\n\t\t\t\t\t\t\t_currentObject.type = word[ 0 ];\n\t\t\t\t\t\t\tif ( word.length >= 2 ) {\n\n\t\t\t\t\t\t\t\t_currentObject.name = word[ 1 ];\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t_currentObject.name = word[ 0 ] + this.Hierarchies.children.length;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t_currentObject.name = nameData;\n\t\t\t\t\t\t\t_currentObject.type = '';\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( _currentObject.type === 'Animation' ) {\n\n\t\t\t\t\t\t\t_currentObject.data = this._data.substr( findNext, findEnd - findNext ).trim();\n\t\t\t\t\t\t\tvar refs = this._hierarchieParse( _currentObject, findEnd + 1 );\n\t\t\t\t\t\t\tendRead = refs.end;\n\t\t\t\t\t\t\t_currentObject.children = refs.parent.children;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar DataEnder = this._data.lastIndexOf( ';', findNext > 0 ? Math.min( findNext, findEnd ) : findEnd );\n\t\t\t\t\t\t\t_currentObject.data = this._data.substr( find1, DataEnder - find1 ).trim();\n\t\t\t\t\t\t\tif ( findNext <= 0 || findEnd < findNext ) {\n\n\t\t\t\t\t\t\t\tendRead = findEnd + 1;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar nextStart = Math.max( DataEnder + 1, find1 );\n\t\t\t\t\t\t\t\tvar _refs = this._hierarchieParse( _currentObject, nextStart );\n\t\t\t\t\t\t\t\tendRead = _refs.end;\n\t\t\t\t\t\t\t\t_currentObject.children = _refs.parent.children;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_currentObject.parent = _parent;\n\t\t\t\t\t\tif ( _currentObject.type != 'template' ) {\n\n\t\t\t\t\t\t\t_parent.children.push( _currentObject );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tendRead = find1 === - 1 ? this._data.length : findEnd + 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tparent: _parent,\n\t\t\t\t\tend: endRead\n\t\t\t\t};\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_mainloop',\n\t\t\tvalue: function _mainloop() {\n\n\t\t\t\tvar _this2 = this;\n\n\t\t\t\tthis._mainProc();\n\t\t\t\tif ( this._currentObject.parent || this._currentObject.children.length > 0 || ! this._currentObject.worked ) {\n\n\t\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\t\t_this2._mainloop();\n\n\t\t\t\t\t}, 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\t\t_this2.onLoad( {\n\t\t\t\t\t\t\tmodels: _this2.Meshes,\n\t\t\t\t\t\t\tanimations: _this2.animations\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_mainProc',\n\t\t\tvalue: function _mainProc() {\n\n\t\t\t\tvar breakFlag = false;\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tif ( ! this._currentObject.worked ) {\n\n\t\t\t\t\t\tswitch ( this._currentObject.type ) {\n\n\t\t\t\t\t\t\tcase 'template':\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'AnimTicksPerSecond':\n\t\t\t\t\t\t\t\tthis.animTicksPerSecond = parseInt( this._currentObject.data );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Frame':\n\t\t\t\t\t\t\t\tthis._setFrame();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'FrameTransformMatrix':\n\t\t\t\t\t\t\t\tthis._setFrameTransformMatrix();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Mesh':\n\t\t\t\t\t\t\t\tthis._changeRoot();\n\t\t\t\t\t\t\t\tthis._currentGeo = {};\n\t\t\t\t\t\t\t\tthis._currentGeo.name = this._currentObject.name.trim();\n\t\t\t\t\t\t\t\tthis._currentGeo.parentName = this._getParentName( this._currentObject ).trim();\n\t\t\t\t\t\t\t\tthis._currentGeo.VertexSetedBoneCount = [];\n\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData = {\n\t\t\t\t\t\t\t\t\tvertices: [],\n\t\t\t\t\t\t\t\t\tnormals: [],\n\t\t\t\t\t\t\t\t\tuvs: [],\n\t\t\t\t\t\t\t\t\tskinIndices: [],\n\t\t\t\t\t\t\t\t\tskinWeights: [],\n\t\t\t\t\t\t\t\t\tindices: [],\n\t\t\t\t\t\t\t\t\tmaterialIndices: []\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tthis._currentGeo.Materials = [];\n\t\t\t\t\t\t\t\tthis._currentGeo.normalVectors = [];\n\t\t\t\t\t\t\t\tthis._currentGeo.BoneInfs = [];\n\t\t\t\t\t\t\t\tthis._currentGeo.baseFrame = this._currentFrame;\n\t\t\t\t\t\t\t\tthis._makeBoneFrom_CurrentFrame();\n\t\t\t\t\t\t\t\tthis._readVertexDatas();\n\t\t\t\t\t\t\t\tbreakFlag = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'MeshNormals':\n\t\t\t\t\t\t\t\tthis._readVertexDatas();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'MeshTextureCoords':\n\t\t\t\t\t\t\t\tthis._setMeshTextureCoords();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'VertexDuplicationIndices':\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'MeshMaterialList':\n\t\t\t\t\t\t\t\tthis._setMeshMaterialList();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Material':\n\t\t\t\t\t\t\t\tthis._setMaterial();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'SkinWeights':\n\t\t\t\t\t\t\t\tthis._setSkinWeights();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'AnimationSet':\n\t\t\t\t\t\t\t\tthis._changeRoot();\n\t\t\t\t\t\t\t\tthis._currentAnime = {};\n\t\t\t\t\t\t\t\tthis._currentAnime.name = this._currentObject.name.trim();\n\t\t\t\t\t\t\t\tthis._currentAnime.AnimeFrames = [];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Animation':\n\t\t\t\t\t\t\t\tif ( this._currentAnimeFrames ) {\n\n\t\t\t\t\t\t\t\t\tthis._currentAnime.AnimeFrames.push( this._currentAnimeFrames );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis._currentAnimeFrames = new XAnimationInfo();\n\t\t\t\t\t\t\t\tthis._currentAnimeFrames.boneName = this._currentObject.data.trim();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'AnimationKey':\n\t\t\t\t\t\t\t\tthis._readAnimationKey();\n\t\t\t\t\t\t\t\tbreakFlag = true;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._currentObject.worked = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( this._currentObject.children.length > 0 ) {\n\n\t\t\t\t\t\tthis._currentObject = this._currentObject.children.shift();\n\t\t\t\t\t\tif ( this.debug ) {\n\n\t\t\t\t\t\t\tconsole.log( 'processing ' + this._currentObject.name );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( breakFlag ) break;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( this._currentObject.worked ) {\n\n\t\t\t\t\t\t\tif ( this._currentObject.parent && ! this._currentObject.parent.parent ) {\n\n\t\t\t\t\t\t\t\tthis._changeRoot();\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this._currentObject.parent ) {\n\n\t\t\t\t\t\t\tthis._currentObject = this._currentObject.parent;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbreakFlag = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( breakFlag ) break;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_changeRoot',\n\t\t\tvalue: function _changeRoot() {\n\n\t\t\t\tif ( this._currentGeo != null && this._currentGeo.name ) {\n\n\t\t\t\t\tthis._makeOutputGeometry();\n\n\t\t\t\t}\n\n\t\t\t\tthis._currentGeo = {};\n\t\t\t\tif ( this._currentAnime != null && this._currentAnime.name ) {\n\n\t\t\t\t\tif ( this._currentAnimeFrames ) {\n\n\t\t\t\t\t\tthis._currentAnime.AnimeFrames.push( this._currentAnimeFrames );\n\t\t\t\t\t\tthis._currentAnimeFrames = null;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._makeOutputAnimation();\n\n\t\t\t\t}\n\n\t\t\t\tthis._currentAnime = {};\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_getParentName',\n\t\t\tvalue: function _getParentName( _obj ) {\n\n\t\t\t\tif ( _obj.parent ) {\n\n\t\t\t\t\tif ( _obj.parent.name ) {\n\n\t\t\t\t\t\treturn _obj.parent.name;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\treturn this._getParentName( _obj.parent );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn '';\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_setFrame',\n\t\t\tvalue: function _setFrame() {\n\n\t\t\t\tthis._nowFrameName = this._currentObject.name.trim();\n\t\t\t\tthis._currentFrame = {};\n\t\t\t\tthis._currentFrame.name = this._nowFrameName;\n\t\t\t\tthis._currentFrame.children = [];\n\t\t\t\tif ( this._currentObject.parent && this._currentObject.parent.name ) {\n\n\t\t\t\t\tthis._currentFrame.parentName = this._currentObject.parent.name;\n\n\t\t\t\t}\n\n\t\t\t\tthis.frameHierarchie.push( this._nowFrameName );\n\t\t\t\tthis.HieStack[ this._nowFrameName ] = this._currentFrame;\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_setFrameTransformMatrix',\n\t\t\tvalue: function _setFrameTransformMatrix() {\n\n\t\t\t\tthis._currentFrame.FrameTransformMatrix = new Matrix4();\n\t\t\t\tvar data = this._currentObject.data.split( ',' );\n\t\t\t\tthis._ParseMatrixData( this._currentFrame.FrameTransformMatrix, data );\n\t\t\t\tthis._makeBoneFrom_CurrentFrame();\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_makeBoneFrom_CurrentFrame',\n\t\t\tvalue: function _makeBoneFrom_CurrentFrame() {\n\n\t\t\t\tif ( ! this._currentFrame.FrameTransformMatrix ) {\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar b = new Bone();\n\t\t\t\tb.name = this._currentFrame.name;\n\t\t\t\tb.applyMatrix4( this._currentFrame.FrameTransformMatrix );\n\t\t\t\tb.matrixWorld = b.matrix;\n\t\t\t\tb.FrameTransformMatrix = this._currentFrame.FrameTransformMatrix;\n\t\t\t\tthis._currentFrame.putBone = b;\n\t\t\t\tif ( this._currentFrame.parentName ) {\n\n\t\t\t\t\tfor ( var frame in this.HieStack ) {\n\n\t\t\t\t\t\tif ( this.HieStack[ frame ].name === this._currentFrame.parentName ) {\n\n\t\t\t\t\t\t\tthis.HieStack[ frame ].putBone.add( this._currentFrame.putBone );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_readVertexDatas',\n\t\t\tvalue: function _readVertexDatas() {\n\n\t\t\t\tvar endRead = 0;\n\t\t\t\tvar mode = 0;\n\t\t\t\tvar mode_local = 0;\n\t\t\t\tvar maxLength = 0;\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tvar changeMode = false;\n\t\t\t\t\tif ( mode_local === 0 ) {\n\n\t\t\t\t\t\tvar refO = this._readInt1( endRead );\n\t\t\t\t\t\tendRead = refO.endRead;\n\t\t\t\t\t\tmode_local = 1;\n\t\t\t\t\t\tmaxLength = this._currentObject.data.indexOf( ';;', endRead ) + 1;\n\t\t\t\t\t\tif ( maxLength <= 0 ) {\n\n\t\t\t\t\t\t\tmaxLength = this._currentObject.data.length;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar find = 0;\n\t\t\t\t\t\tswitch ( mode ) {\n\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\tfind = this._currentObject.data.indexOf( ',', endRead ) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\tfind = this._currentObject.data.indexOf( ';,', endRead ) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( find === 0 || find > maxLength ) {\n\n\t\t\t\t\t\t\tfind = maxLength;\n\t\t\t\t\t\t\tmode_local = 0;\n\t\t\t\t\t\t\tchangeMode = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tswitch ( this._currentObject.type ) {\n\n\t\t\t\t\t\t\tcase 'Mesh':\n\t\t\t\t\t\t\t\tswitch ( mode ) {\n\n\t\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\t\tthis._readVertex1( this._currentObject.data.substr( endRead, find - endRead ) );\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\t\tthis._readFace1( this._currentObject.data.substr( endRead, find - endRead ) );\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'MeshNormals':\n\t\t\t\t\t\t\t\tswitch ( mode ) {\n\n\t\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\t\tthis._readNormalVector1( this._currentObject.data.substr( endRead, find - endRead ) );\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tendRead = find + 1;\n\t\t\t\t\t\tif ( changeMode ) {\n\n\t\t\t\t\t\t\tmode ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( endRead >= this._currentObject.data.length ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_readInt1',\n\t\t\tvalue: function _readInt1( start ) {\n\n\t\t\t\tvar find = this._currentObject.data.indexOf( ';', start );\n\t\t\t\treturn {\n\t\t\t\t\trefI: parseInt( this._currentObject.data.substr( start, find - start ) ),\n\t\t\t\t\tendRead: find + 1\n\t\t\t\t};\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_readVertex1',\n\t\t\tvalue: function _readVertex1( line ) {\n\n\t\t\t\tvar data = this._readLine( line.trim() ).substr( 0, line.length - 2 ).split( ';' );\n\t\t\t\tthis._currentGeo.GeometryData.vertices.push( parseFloat( data[ 0 ] ), parseFloat( data[ 1 ] ), parseFloat( data[ 2 ] ) );\n\t\t\t\tthis._currentGeo.GeometryData.skinIndices.push( 0, 0, 0, 0 );\n\t\t\t\tthis._currentGeo.GeometryData.skinWeights.push( 1, 0, 0, 0 );\n\t\t\t\tthis._currentGeo.VertexSetedBoneCount.push( 0 );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_readFace1',\n\t\t\tvalue: function _readFace1( line ) {\n\n\t\t\t\tvar data = this._readLine( line.trim() ).substr( 2, line.length - 4 ).split( ',' );\n\t\t\t\tthis._currentGeo.GeometryData.indices.push( parseInt( data[ 0 ], 10 ), parseInt( data[ 1 ], 10 ), parseInt( data[ 2 ], 10 ) );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_readNormalVector1',\n\t\t\tvalue: function _readNormalVector1( line ) {\n\n\t\t\t\tvar data = this._readLine( line.trim() ).substr( 0, line.length - 2 ).split( ';' );\n\t\t\t\tthis._currentGeo.GeometryData.normals.push( parseFloat( data[ 0 ] ), parseFloat( data[ 1 ] ), parseFloat( data[ 2 ] ) );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_buildGeometry',\n\t\t\tvalue: function _buildGeometry() {\n\n\t\t\t\tvar bufferGeometry = new BufferGeometry();\n\t\t\t\tvar position = [];\n\t\t\t\tvar normals = [];\n\t\t\t\tvar uvs = [];\n\t\t\t\tvar skinIndices = [];\n\t\t\t\tvar skinWeights = [];\n\n\t\t\t\t//\n\n\t\t\t\tvar data = this._currentGeo.GeometryData;\n\n\t\t\t\tfor ( var i = 0, l = data.indices.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar stride2 = data.indices[ i ] * 2;\n\t\t\t\t\tvar stride3 = data.indices[ i ] * 3;\n\t\t\t\t\tvar stride4 = data.indices[ i ] * 4;\n\n\t\t\t\t\tposition.push( data.vertices[ stride3 ], data.vertices[ stride3 + 1 ], data.vertices[ stride3 + 2 ] );\n\t\t\t\t\tnormals.push( data.normals[ stride3 ], data.normals[ stride3 + 1 ], data.normals[ stride3 + 2 ] );\n\t\t\t\t\tskinIndices.push( data.skinIndices[ stride4 ], data.skinIndices[ stride4 + 1 ], data.skinIndices[ stride4 + 2 ], data.skinIndices[ stride4 + 3 ] );\n\t\t\t\t\tskinWeights.push( data.skinWeights[ stride4 ], data.skinWeights[ stride4 + 1 ], data.skinWeights[ stride4 + 2 ], data.skinWeights[ stride4 + 3 ] );\n\t\t\t\t\tuvs.push( data.uvs[ stride2 ], data.uvs[ stride2 + 1 ] );\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tbufferGeometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\t\t\tbufferGeometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\t\t\tbufferGeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\t\t\tbufferGeometry.setAttribute( 'skinIndex', new Uint16BufferAttribute( skinIndices, 4 ) );\n\t\t\t\tbufferGeometry.setAttribute( 'skinWeight', new Float32BufferAttribute( skinWeights, 4 ) );\n\n\t\t\t\tthis._computeGroups( bufferGeometry, data.materialIndices );\n\n\t\t\t\treturn bufferGeometry;\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_computeGroups',\n\t\t\tvalue: function _computeGroups( bufferGeometry, materialIndices ) {\n\n\t\t\t\tvar group;\n\t\t\t\tvar groups = [];\n\t\t\t\tvar materialIndex = undefined;\n\n\t\t\t\tfor ( var i = 0; i < materialIndices.length; i ++ ) {\n\n\t\t\t\t\tvar currentMaterialIndex = materialIndices[ i ];\n\n\t\t\t\t\tif ( currentMaterialIndex !== materialIndex ) {\n\n\t\t\t\t\t\tmaterialIndex = currentMaterialIndex;\n\n\t\t\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgroup = {\n\t\t\t\t\t\t\tstart: i * 3,\n\t\t\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t}\n\n\t\t\t\tbufferGeometry.groups = groups;\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_setMeshTextureCoords',\n\t\t\tvalue: function _setMeshTextureCoords() {\n\n\t\t\t\tvar endRead = 0;\n\t\t\t\tvar mode = 0;\n\t\t\t\tvar mode_local = 0;\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tswitch ( mode ) {\n\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\tif ( mode_local === 0 ) {\n\n\t\t\t\t\t\t\t\tvar refO = this._readInt1( 0 );\n\t\t\t\t\t\t\t\tendRead = refO.endRead;\n\t\t\t\t\t\t\t\tmode_local = 1;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar find = this._currentObject.data.indexOf( ',', endRead ) + 1;\n\t\t\t\t\t\t\t\tif ( find === 0 ) {\n\n\t\t\t\t\t\t\t\t\tfind = this._currentObject.data.length;\n\t\t\t\t\t\t\t\t\tmode = 2;\n\t\t\t\t\t\t\t\t\tmode_local = 0;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar line = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\t\t\t\t\tvar data = this._readLine( line.trim() ).split( ';' );\n\t\t\t\t\t\t\t\tif ( this.IsUvYReverse ) {\n\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.uvs.push( parseFloat( data[ 0 ] ), 1 - parseFloat( data[ 1 ] ) );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.uvs.push( parseFloat( data[ 0 ] ), parseFloat( data[ 1 ] ) );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tendRead = find + 1;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( endRead >= this._currentObject.data.length ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_setMeshMaterialList',\n\t\t\tvalue: function _setMeshMaterialList() {\n\n\t\t\t\tvar endRead = 0;\n\t\t\t\tvar mode = 0;\n\t\t\t\tvar mode_local = 0;\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tif ( mode_local < 2 ) {\n\n\t\t\t\t\t\tvar refO = this._readInt1( endRead );\n\t\t\t\t\t\tendRead = refO.endRead;\n\t\t\t\t\t\tmode_local ++;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvar find = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\t\t\tif ( find === - 1 ) {\n\n\t\t\t\t\t\t\tfind = this._currentObject.data.length;\n\t\t\t\t\t\t\tmode = 3;\n\t\t\t\t\t\t\tmode_local = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar line = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\t\t\tvar data = this._readLine( line.trim() ).split( ',' );\n\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tthis._currentGeo.GeometryData.materialIndices[ i ] = parseInt( data[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tendRead = this._currentObject.data.length;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( endRead >= this._currentObject.data.length || mode >= 3 ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_setMaterial',\n\t\t\tvalue: function _setMaterial() {\n\n\t\t\t\tvar _nowMat = new MeshPhongMaterial( {\n\t\t\t\t\tcolor: Math.random() * 0xffffff\n\t\t\t\t} );\n\t\t\t\t_nowMat.side = FrontSide;\n\t\t\t\t_nowMat.name = this._currentObject.name;\n\t\t\t\tvar endRead = 0;\n\t\t\t\tvar find = this._currentObject.data.indexOf( ';;', endRead );\n\t\t\t\tvar line = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\tvar data = this._readLine( line.trim() ).split( ';' );\n\t\t\t\t_nowMat.color.r = parseFloat( data[ 0 ] );\n\t\t\t\t_nowMat.color.g = parseFloat( data[ 1 ] );\n\t\t\t\t_nowMat.color.b = parseFloat( data[ 2 ] );\n\t\t\t\tendRead = find + 2;\n\t\t\t\tfind = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\tline = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\t_nowMat.shininess = parseFloat( this._readLine( line ) );\n\t\t\t\tendRead = find + 1;\n\t\t\t\tfind = this._currentObject.data.indexOf( ';;', endRead );\n\t\t\t\tline = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\tvar data2 = this._readLine( line.trim() ).split( ';' );\n\t\t\t\t_nowMat.specular.r = parseFloat( data2[ 0 ] );\n\t\t\t\t_nowMat.specular.g = parseFloat( data2[ 1 ] );\n\t\t\t\t_nowMat.specular.b = parseFloat( data2[ 2 ] );\n\t\t\t\tendRead = find + 2;\n\t\t\t\tfind = this._currentObject.data.indexOf( ';;', endRead );\n\t\t\t\tif ( find === - 1 ) {\n\n\t\t\t\t\tfind = this._currentObject.data.length;\n\n\t\t\t\t}\n\n\t\t\t\tline = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\tvar data3 = this._readLine( line.trim() ).split( ';' );\n\t\t\t\t_nowMat.emissive.r = parseFloat( data3[ 0 ] );\n\t\t\t\t_nowMat.emissive.g = parseFloat( data3[ 1 ] );\n\t\t\t\t_nowMat.emissive.b = parseFloat( data3[ 2 ] );\n\t\t\t\tvar localObject = null;\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tif ( this._currentObject.children.length > 0 ) {\n\n\t\t\t\t\t\tlocalObject = this._currentObject.children.shift();\n\t\t\t\t\t\tif ( this.debug ) {\n\n\t\t\t\t\t\t\tconsole.log( 'processing ' + localObject.name );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar fileName = localObject.data.substr( 1, localObject.data.length - 2 );\n\t\t\t\t\t\tswitch ( localObject.type ) {\n\n\t\t\t\t\t\t\tcase 'TextureFilename':\n\t\t\t\t\t\t\t\t_nowMat.map = this.texloader.load( fileName );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'BumpMapFilename':\n\t\t\t\t\t\t\t\t_nowMat.bumpMap = this.texloader.load( fileName );\n\t\t\t\t\t\t\t\t_nowMat.bumpScale = 0.05;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'NormalMapFilename':\n\t\t\t\t\t\t\t\t_nowMat.normalMap = this.texloader.load( fileName );\n\t\t\t\t\t\t\t\t_nowMat.normalScale = new Vector2( 2, 2 );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'EmissiveMapFilename':\n\t\t\t\t\t\t\t\t_nowMat.emissiveMap = this.texloader.load( fileName );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'LightMapFilename':\n\t\t\t\t\t\t\t\t_nowMat.lightMap = this.texloader.load( fileName );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._currentGeo.Materials.push( _nowMat );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_setSkinWeights',\n\t\t\tvalue: function _setSkinWeights() {\n\n\t\t\t\tvar boneInf = new XboneInf();\n\t\t\t\tvar endRead = 0;\n\t\t\t\tvar find = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\tvar line = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\tendRead = find + 1;\n\t\t\t\tboneInf.boneName = line.substr( 1, line.length - 2 );\n\t\t\t\tboneInf.BoneIndex = this._currentGeo.BoneInfs.length;\n\t\t\t\tfind = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\tendRead = find + 1;\n\t\t\t\tfind = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\tline = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\tvar data = this._readLine( line.trim() ).split( ',' );\n\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\tboneInf.Indeces.push( parseInt( data[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tendRead = find + 1;\n\t\t\t\tfind = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\tline = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\tvar data2 = this._readLine( line.trim() ).split( ',' );\n\t\t\t\tfor ( var _i = 0; _i < data2.length; _i ++ ) {\n\n\t\t\t\t\tboneInf.Weights.push( parseFloat( data2[ _i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tendRead = find + 1;\n\t\t\t\tfind = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\tif ( find <= 0 ) {\n\n\t\t\t\t\tfind = this._currentObject.data.length;\n\n\t\t\t\t}\n\n\t\t\t\tline = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\tvar data3 = this._readLine( line.trim() ).split( ',' );\n\t\t\t\tboneInf.OffsetMatrix = new Matrix4();\n\t\t\t\tthis._ParseMatrixData( boneInf.OffsetMatrix, data3 );\n\t\t\t\tthis._currentGeo.BoneInfs.push( boneInf );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_makePutBoneList',\n\t\t\tvalue: function _makePutBoneList( _RootName, _bones ) {\n\n\t\t\t\tvar putting = false;\n\t\t\t\tfor ( var frame in this.HieStack ) {\n\n\t\t\t\t\tif ( this.HieStack[ frame ].name === _RootName || putting ) {\n\n\t\t\t\t\t\tputting = true;\n\t\t\t\t\t\tvar b = new Bone();\n\t\t\t\t\t\tb.name = this.HieStack[ frame ].name;\n\t\t\t\t\t\tb.applyMatrix4( this.HieStack[ frame ].FrameTransformMatrix );\n\t\t\t\t\t\tb.matrixWorld = b.matrix;\n\t\t\t\t\t\tb.FrameTransformMatrix = this.HieStack[ frame ].FrameTransformMatrix;\n\t\t\t\t\t\tb.pos = new Vector3().setFromMatrixPosition( b.FrameTransformMatrix ).toArray();\n\t\t\t\t\t\tb.rotq = new Quaternion().setFromRotationMatrix( b.FrameTransformMatrix ).toArray();\n\t\t\t\t\t\tb.scl = new Vector3().setFromMatrixScale( b.FrameTransformMatrix ).toArray();\n\t\t\t\t\t\tif ( this.HieStack[ frame ].parentName && this.HieStack[ frame ].parentName.length > 0 ) {\n\n\t\t\t\t\t\t\tfor ( var i = 0; i < _bones.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tif ( this.HieStack[ frame ].parentName === _bones[ i ].name ) {\n\n\t\t\t\t\t\t\t\t\t_bones[ i ].add( b );\n\t\t\t\t\t\t\t\t\tb.parent = i;\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_bones.push( b );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_makeOutputGeometry',\n\t\t\tvalue: function _makeOutputGeometry() {\n\n\t\t\t\tvar mesh = null;\n\t\t\t\tif ( this._currentGeo.BoneInfs.length > 0 ) {\n\n\t\t\t\t\tvar putBones = [];\n\t\t\t\t\tthis._makePutBoneList( this._currentGeo.baseFrame.parentName, putBones );\n\t\t\t\t\tfor ( var bi = 0; bi < this._currentGeo.BoneInfs.length; bi ++ ) {\n\n\t\t\t\t\t\tvar boneIndex = 0;\n\t\t\t\t\t\tfor ( var bb = 0; bb < putBones.length; bb ++ ) {\n\n\t\t\t\t\t\t\tif ( putBones[ bb ].name === this._currentGeo.BoneInfs[ bi ].boneName ) {\n\n\t\t\t\t\t\t\t\tboneIndex = bb;\n\t\t\t\t\t\t\t\tputBones[ bb ].OffsetMatrix = new Matrix4();\n\t\t\t\t\t\t\t\tputBones[ bb ].OffsetMatrix.copy( this._currentGeo.BoneInfs[ bi ].OffsetMatrix );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( var vi = 0; vi < this._currentGeo.BoneInfs[ bi ].Indeces.length; vi ++ ) {\n\n\t\t\t\t\t\t\tvar nowVertexID = this._currentGeo.BoneInfs[ bi ].Indeces[ vi ];\n\t\t\t\t\t\t\tvar nowVal = this._currentGeo.BoneInfs[ bi ].Weights[ vi ];\n\n\t\t\t\t\t\t\tvar stride = nowVertexID * 4;\n\n\t\t\t\t\t\t\tswitch ( this._currentGeo.VertexSetedBoneCount[ nowVertexID ] ) {\n\n\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.skinIndices[ stride ] = boneIndex;\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.skinWeights[ stride ] = nowVal;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.skinIndices[ stride + 1 ] = boneIndex;\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.skinWeights[ stride + 1 ] = nowVal;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.skinIndices[ stride + 2 ] = boneIndex;\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.skinWeights[ stride + 2 ] = nowVal;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.skinIndices[ stride + 3 ] = boneIndex;\n\t\t\t\t\t\t\t\t\tthis._currentGeo.GeometryData.skinWeights[ stride + 3 ] = nowVal;\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tthis._currentGeo.VertexSetedBoneCount[ nowVertexID ] ++;\n\t\t\t\t\t\t\tif ( this._currentGeo.VertexSetedBoneCount[ nowVertexID ] > 4 ) {\n\n\t\t\t\t\t\t\t\tconsole.log( 'warn! over 4 bone weight! :' + nowVertexID );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var sk = 0; sk < this._currentGeo.Materials.length; sk ++ ) {\n\n\t\t\t\t\t\tthis._currentGeo.Materials[ sk ].skinning = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar offsetList = [];\n\t\t\t\t\tfor ( var _bi = 0; _bi < putBones.length; _bi ++ ) {\n\n\t\t\t\t\t\tif ( putBones[ _bi ].OffsetMatrix ) {\n\n\t\t\t\t\t\t\toffsetList.push( putBones[ _bi ].OffsetMatrix );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toffsetList.push( new Matrix4() );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar bufferGeometry = this._buildGeometry();\n\t\t\t\t\tmesh = new SkinnedMesh( bufferGeometry, this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[ 0 ] : this._currentGeo.Materials );\n\n\t\t\t\t\tthis._initSkeleton( mesh, putBones, offsetList );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar _bufferGeometry = this._buildGeometry();\n\t\t\t\t\tmesh = new Mesh( _bufferGeometry, this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[ 0 ] : this._currentGeo.Materials );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = this._currentGeo.name;\n\t\t\t\tvar worldBaseMx = new Matrix4();\n\t\t\t\tvar currentMxFrame = this._currentGeo.baseFrame.putBone;\n\t\t\t\tif ( currentMxFrame && currentMxFrame.parent ) {\n\n\t\t\t\t\twhile ( true ) {\n\n\t\t\t\t\t\tcurrentMxFrame = currentMxFrame.parent;\n\t\t\t\t\t\tif ( currentMxFrame ) {\n\n\t\t\t\t\t\t\tworldBaseMx.multiply( currentMxFrame.FrameTransformMatrix );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmesh.applyMatrix4( worldBaseMx );\n\n\t\t\t\t}\n\n\t\t\t\tthis.Meshes.push( mesh );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_initSkeleton',\n\t\t\tvalue: function _initSkeleton( mesh, boneList, boneInverses ) {\n\n\t\t\t\tvar bones = [], bone, gbone;\n\t\t\t\tvar i, il;\n\n\t\t\t\tfor ( i = 0, il = boneList.length; i < il; i ++ ) {\n\n\t\t\t\t\tgbone = boneList[ i ];\n\n\t\t\t\t\tbone = new Bone();\n\t\t\t\t\tbones.push( bone );\n\n\t\t\t\t\tbone.name = gbone.name;\n\t\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 0, il = boneList.length; i < il; i ++ ) {\n\n\t\t\t\t\tgbone = boneList[ i ];\n\n\t\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh.add( bones[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.updateMatrixWorld( true );\n\n\t\t\t\tvar skeleton = new Skeleton( bones, boneInverses );\n\t\t\t\tmesh.bind( skeleton, mesh.matrixWorld );\n\n\t\t\t}\n\n\t\t}, {\n\t\t\tkey: '_readAnimationKey',\n\t\t\tvalue: function _readAnimationKey() {\n\n\t\t\t\tvar endRead = 0;\n\t\t\t\tvar find = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\tvar line = this._currentObject.data.substr( endRead, find - endRead );\n\t\t\t\tendRead = find + 1;\n\t\t\t\tvar nowKeyType = parseInt( this._readLine( line ) );\n\t\t\t\tfind = this._currentObject.data.indexOf( ';', endRead );\n\t\t\t\tendRead = find + 1;\n\t\t\t\tline = this._currentObject.data.substr( endRead );\n\t\t\t\tvar data = this._readLine( line.trim() ).split( ';;,' );\n\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\tvar data2 = data[ i ].split( ';' );\n\t\t\t\t\tvar keyInfo = new XKeyFrameInfo();\n\t\t\t\t\tkeyInfo.type = nowKeyType;\n\t\t\t\t\tkeyInfo.Frame = parseInt( data2[ 0 ] );\n\t\t\t\t\tkeyInfo.index = this._currentAnimeFrames.keyFrames.length;\n\t\t\t\t\tkeyInfo.time = keyInfo.Frame;\n\t\t\t\t\tif ( nowKeyType != 4 ) {\n\n\t\t\t\t\t\tvar frameFound = false;\n\t\t\t\t\t\tfor ( var mm = 0; mm < this._currentAnimeFrames.keyFrames.length; mm ++ ) {\n\n\t\t\t\t\t\t\tif ( this._currentAnimeFrames.keyFrames[ mm ].Frame === keyInfo.Frame ) {\n\n\t\t\t\t\t\t\t\tkeyInfo = this._currentAnimeFrames.keyFrames[ mm ];\n\t\t\t\t\t\t\t\tframeFound = true;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar frameValue = data2[ 2 ].split( ',' );\n\t\t\t\t\t\tswitch ( nowKeyType ) {\n\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\tkeyInfo.rot = new Quaternion( parseFloat( frameValue[ 1 ] ), parseFloat( frameValue[ 2 ] ), parseFloat( frameValue[ 3 ] ), parseFloat( frameValue[ 0 ] ) * - 1 );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\tkeyInfo.scl = new Vector3( parseFloat( frameValue[ 0 ] ), parseFloat( frameValue[ 1 ] ), parseFloat( frameValue[ 2 ] ) );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tkeyInfo.pos = new Vector3( parseFloat( frameValue[ 0 ] ), parseFloat( frameValue[ 1 ] ), parseFloat( frameValue[ 2 ] ) );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! frameFound ) {\n\n\t\t\t\t\t\t\tthis._currentAnimeFrames.keyFrames.push( keyInfo );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tkeyInfo.matrix = new Matrix4();\n\t\t\t\t\t\tthis._ParseMatrixData( keyInfo.matrix, data2[ 2 ].split( ',' ) );\n\t\t\t\t\t\tthis._currentAnimeFrames.keyFrames.push( keyInfo );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_makeOutputAnimation',\n\t\t\tvalue: function _makeOutputAnimation() {\n\n\t\t\t\tvar animationObj = new XAnimationObj( this.options );\n\t\t\t\tanimationObj.fps = this.animTicksPerSecond;\n\t\t\t\tanimationObj.name = this._currentAnime.name;\n\t\t\t\tanimationObj.make( this._currentAnime.AnimeFrames );\n\t\t\t\tthis.animations.push( animationObj );\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: 'assignAnimation',\n\t\t\tvalue: function assignAnimation( _model, _animation ) {\n\n\t\t\t\tvar model = _model;\n\t\t\t\tvar animation = _animation;\n\t\t\t\tif ( ! model ) {\n\n\t\t\t\t\tmodel = this.Meshes[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! animation ) {\n\n\t\t\t\t\tanimation = this.animations[ 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! model || ! animation ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\tvar put = {};\n\t\t\t\tput.fps = animation.fps;\n\t\t\t\tput.name = animation.name;\n\t\t\t\tput.length = animation.length;\n\t\t\t\tput.hierarchy = [];\n\t\t\t\tfor ( var b = 0; b < model.skeleton.bones.length; b ++ ) {\n\n\t\t\t\t\tvar findAnimation = false;\n\t\t\t\t\tfor ( var i = 0; i < animation.hierarchy.length; i ++ ) {\n\n\t\t\t\t\t\tif ( model.skeleton.bones[ b ].name === animation.hierarchy[ i ].name ) {\n\n\t\t\t\t\t\t\tfindAnimation = true;\n\t\t\t\t\t\t\tvar c_key = animation.hierarchy[ i ].copy();\n\t\t\t\t\t\t\tc_key.parent = - 1;\n\t\t\t\t\t\t\tif ( model.skeleton.bones[ b ].parent && model.skeleton.bones[ b ].parent.type === 'Bone' ) {\n\n\t\t\t\t\t\t\t\tfor ( var bb = 0; bb < put.hierarchy.length; bb ++ ) {\n\n\t\t\t\t\t\t\t\t\tif ( put.hierarchy[ bb ].name === model.skeleton.bones[ b ].parent.name ) {\n\n\t\t\t\t\t\t\t\t\t\tc_key.parent = bb;\n\t\t\t\t\t\t\t\t\t\tc_key.parentName = model.skeleton.bones[ b ].parent.name;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tput.hierarchy.push( c_key );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! findAnimation ) {\n\n\t\t\t\t\t\tvar _c_key = animation.hierarchy[ 0 ].copy();\n\t\t\t\t\t\t_c_key.name = model.skeleton.bones[ b ].name;\n\t\t\t\t\t\t_c_key.parent = - 1;\n\t\t\t\t\t\tfor ( var k = 0; k < _c_key.keys.length; k ++ ) {\n\n\t\t\t\t\t\t\tif ( _c_key.keys[ k ].pos ) {\n\n\t\t\t\t\t\t\t\t_c_key.keys[ k ].pos.set( 0, 0, 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( _c_key.keys[ k ].scl ) {\n\n\t\t\t\t\t\t\t\t_c_key.keys[ k ].scl.set( 1, 1, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( _c_key.keys[ k ].rot ) {\n\n\t\t\t\t\t\t\t\t_c_key.keys[ k ].rot.set( 0, 0, 0, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tput.hierarchy.push( _c_key );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! model.geometry.animations ) {\n\n\t\t\t\t\tmodel.geometry.animations = [];\n\n\t\t\t\t}\n\n\t\t\t\tmodel.geometry.animations.push( AnimationClip.parseAnimation( put, model.skeleton.bones ) );\n\t\t\t\tif ( ! model.animationMixer ) {\n\n\t\t\t\t\tmodel.animationMixer = new AnimationMixer( model );\n\n\t\t\t\t}\n\n\t\t\t\treturn put;\n\n\t\t\t}\n\t\t}, {\n\t\t\tkey: '_ParseMatrixData',\n\t\t\tvalue: function _ParseMatrixData( targetMatrix, data ) {\n\n\t\t\t\ttargetMatrix.set( parseFloat( data[ 0 ] ), parseFloat( data[ 4 ] ), parseFloat( data[ 8 ] ), parseFloat( data[ 12 ] ), parseFloat( data[ 1 ] ), parseFloat( data[ 5 ] ), parseFloat( data[ 9 ] ), parseFloat( data[ 13 ] ), parseFloat( data[ 2 ] ), parseFloat( data[ 6 ] ), parseFloat( data[ 10 ] ), parseFloat( data[ 14 ] ), parseFloat( data[ 3 ] ), parseFloat( data[ 7 ] ), parseFloat( data[ 11 ] ), parseFloat( data[ 15 ] ) );\n\n\t\t\t}\n\t\t} ] );\n\t\treturn XLoader;\n\n\t}();\n\n\treturn XLoader;\n\n} )();\n\nexport { XLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/XYZLoader.js",
    "content": "import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader\n} from '../../../build/three.module.js';\n\nclass XYZLoader extends Loader {\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst lines = text.split( '\\n' );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tfor ( let line of lines ) {\n\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.charAt( 0 ) === '#' ) continue; // skip comments\n\n\t\t\tconst lineValues = line.split( /\\s+/ );\n\n\t\t\tif ( lineValues.length === 3 ) {\n\n\t\t\t\t// XYZ\n\n\t\t\t\tvertices.push( parseFloat( lineValues[ 0 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 1 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( lineValues.length === 6 ) {\n\n\t\t\t\t// XYZRGB\n\n\t\t\t\tvertices.push( parseFloat( lineValues[ 0 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 1 ] ) );\n\t\t\t\tvertices.push( parseFloat( lineValues[ 2 ] ) );\n\n\t\t\t\tcolors.push( parseFloat( lineValues[ 3 ] ) / 255 );\n\t\t\t\tcolors.push( parseFloat( lineValues[ 4 ] ) / 255 );\n\t\t\t\tcolors.push( parseFloat( lineValues[ 5 ] ) / 255 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\tif ( colors.length > 0 ) {\n\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nexport { XYZLoader };\n"
  },
  {
    "path": "libs/three.js/loaders/lwo/IFFParser.js",
    "content": "/**\n * === IFFParser ===\n * - Parses data from the IFF buffer.\n * - LWO3 files are in IFF format and can contain the following data types, referred to by shorthand codes\n *\n * ATOMIC DATA TYPES\n *  ID Tag - 4x 7 bit uppercase ASCII chars: ID4\n *  signed integer, 1, 2, or 4 byte length: I1, I2, I4\n *  unsigned integer, 1, 2, or 4 byte length: U1, U2, U4\n *  float, 4 byte length: F4\n *  string, series of ASCII chars followed by null byte (If the length of the string including the null terminating byte is odd, an extra null is added so that the data that follows will begin on an even byte boundary): S0\n *\n * COMPOUND DATA TYPES\n *  Variable-length Index (index into an array or collection): U2 or U4 : VX\n *  Color (RGB): F4 + F4 + F4: COL12\n *  Coordinate (x, y, z): F4 + F4 + F4: VEC12\n *  Percentage F4 data type from 0->1 with 1 = 100%: FP4\n *  Angle in radian F4: ANG4\n *  Filename (string) S0: FNAM0\n *  XValue F4 + index (VX) + optional envelope( ENVL ): XVAL\n *  XValue vector VEC12 + index (VX) + optional envelope( ENVL ): XVAL3\n *\n *  The IFF file is arranged in chunks:\n *  CHUNK = ID4 + length (U4) + length X bytes of data + optional 0 pad byte\n *  optional 0 pad byte is there to ensure chunk ends on even boundary, not counted in size\n *\n * COMPOUND DATA TYPES\n * - Chunks are combined in Forms (collections of chunks)\n * - FORM = string 'FORM' (ID4) + length (U4) + type (ID4) + optional ( CHUNK | FORM )\n * - CHUNKS and FORMS are collectively referred to as blocks\n * - The entire file is contained in one top level FORM\n *\n **/\n\nimport { LoaderUtils } from '../../../../build/three.module.js';\nimport { LWO2Parser } from './LWO2Parser.js';\nimport { LWO3Parser } from './LWO3Parser.js';\n\nfunction IFFParser( ) {\n\n\tthis.debugger = new Debugger();\n\t// this.debugger.enable(); // un-comment to log IFF hierarchy.\n\n}\n\nIFFParser.prototype = {\n\n\tconstructor: IFFParser,\n\n\tparse: function ( buffer ) {\n\n\t\tthis.reader = new DataViewReader( buffer );\n\n\t\tthis.tree = {\n\t\t\tmaterials: {},\n\t\t\tlayers: [],\n\t\t\ttags: [],\n\t\t\ttextures: [],\n\t\t};\n\n\t\t// start out at the top level to add any data before first layer is encountered\n\t\tthis.currentLayer = this.tree;\n\t\tthis.currentForm = this.tree;\n\n\t\tthis.parseTopForm();\n\n\t\tif ( this.tree.format === undefined ) return;\n\n\t\tif ( this.tree.format === 'LWO2' ) {\n\n\t\t\tthis.parser = new LWO2Parser( this );\n\t\t\twhile ( ! this.reader.endOfFile() ) this.parser.parseBlock();\n\n\t\t} else if ( this.tree.format === 'LWO3' ) {\n\n\t\t\tthis.parser = new LWO3Parser( this );\n\t\t\twhile ( ! this.reader.endOfFile() ) this.parser.parseBlock();\n\n\t\t}\n\n\t\tthis.debugger.offset = this.reader.offset;\n\t\tthis.debugger.closeForms();\n\n\t\treturn this.tree;\n\n\t},\n\n\tparseTopForm() {\n\n\t\tthis.debugger.offset = this.reader.offset;\n\n\t\tvar topForm = this.reader.getIDTag();\n\n\t\tif ( topForm !== 'FORM' ) {\n\n\t\t\tconsole.warn( 'LWOLoader: Top-level FORM missing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tvar length = this.reader.getUint32();\n\n\t\tthis.debugger.dataOffset = this.reader.offset;\n\t\tthis.debugger.length = length;\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tif ( type === 'LWO2' ) {\n\n\t\t\tthis.tree.format = type;\n\n\t\t} else if ( type === 'LWO3' ) {\n\n\t\t\tthis.tree.format = type;\n\n\t\t}\n\n\t\tthis.debugger.node = 0;\n\t\tthis.debugger.nodeID = type;\n\t\tthis.debugger.log();\n\n\t\treturn;\n\n\t},\n\n\n\t///\n\t// FORM PARSING METHODS\n\t///\n\n\t// Forms are organisational and can contain any number of sub chunks and sub forms\n\t// FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * }\n\tparseForm( length ) {\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tswitch ( type ) {\n\n\t\t\t// SKIPPED FORMS\n\t\t\t// if skipForm( length ) is called, the entire form and any sub forms and chunks are skipped\n\n\t\t\tcase 'ISEQ': // Image sequence\n\t\t\tcase 'ANIM': // plug in animation\n\t\t\tcase 'STCC': // Color-cycling Still\n\t\t\tcase 'VPVL':\n\t\t\tcase 'VPRM':\n\t\t\tcase 'NROT':\n\t\t\tcase 'WRPW': // image wrap w ( for cylindrical and spherical projections)\n\t\t\tcase 'WRPH': // image wrap h\n\t\t\tcase 'FUNC':\n\t\t\tcase 'FALL':\n\t\t\tcase 'OPAC':\n\t\t\tcase 'GRAD': // gradient texture\n\t\t\tcase 'ENVS':\n\t\t\tcase 'VMOP':\n\t\t\tcase 'VMBG':\n\n\t\t\t// Car Material FORMS\n\t\t\tcase 'OMAX':\n\t\t\tcase 'STEX':\n\t\t\tcase 'CKBG':\n\t\t\tcase 'CKEY':\n\t\t\tcase 'VMLA':\n\t\t\tcase 'VMLB':\n\t\t\t\tthis.debugger.skipped = true;\n\t\t\t\tthis.skipForm( length ); // not currently supported\n\t\t\t\tbreak;\n\n\t\t\t// if break; is called directly, the position in the lwoTree is not created\n\t\t\t// any sub chunks and forms are added to the parent form instead\n\t\t\tcase 'META':\n\t\t\tcase 'NNDS':\n\t\t\tcase 'NODS':\n\t\t\tcase 'NDTA':\n\t\t\tcase 'ADAT':\n\t\t\tcase 'AOVS':\n\t\t\tcase 'BLOK':\n\n\t\t\t// used by texture nodes\n\t\t\tcase 'IBGC': // imageBackgroundColor\n\t\t\tcase 'IOPC': // imageOpacity\n\t\t\tcase 'IIMG': // hold reference to image path\n\t\t\tcase 'TXTR':\n\t\t\t\t// this.setupForm( type, length );\n\t\t\t\tthis.debugger.length = 4;\n\t\t\t\tthis.debugger.skipped = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 'IFAL': // imageFallof\n\t\t\tcase 'ISCL': // imageScale\n\t\t\tcase 'IPOS': // imagePosition\n\t\t\tcase 'IROT': // imageRotation\n\t\t\tcase 'IBMP':\n\t\t\tcase 'IUTD':\n\t\t\tcase 'IVTD':\n\t\t\t\tthis.parseTextureNodeAttribute( type );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ENVL':\n\t\t\t\tthis.parseEnvelope( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// CLIP FORM AND SUB FORMS\n\n\t\t\tcase 'CLIP':\n\t\t\t\tif ( this.tree.format === 'LWO2' ) {\n\n\t\t\t\t\tthis.parseForm( length );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.parseClip( length );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'STIL':\n\t\t\t\tthis.parseImage();\n\t\t\t\tbreak;\n\n\t\t\tcase 'XREF': // clone of another STIL\n\t\t\t\tthis.reader.skip( 8 ); // unknown\n\t\t\t\tthis.currentForm.referenceTexture = {\n\t\t\t\t\tindex: this.reader.getUint32(),\n\t\t\t\t\trefName: this.reader.getString() // internal unique ref\n\t\t\t\t};\n\t\t\t\tbreak;\n\n\t\t\t\t// Not in spec, used by texture nodes\n\n\t\t\tcase 'IMST':\n\t\t\t\tthis.parseImageStateForm( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// SURF FORM AND SUB FORMS\n\n\t\t\tcase 'SURF':\n\t\t\t\tthis.parseSurfaceForm( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VALU': // Not in spec\n\t\t\t\tthis.parseValueForm( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NTAG':\n\t\t\t\tthis.parseSubNode( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ATTR': // BSDF Node Attributes\n\t\t\tcase 'SATR': // Standard Node Attributes\n\t\t\t\tthis.setupForm( 'attributes', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NCON':\n\t\t\t\tthis.parseConnections( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SSHA':\n\t\t\t\tthis.parentForm = this.currentForm;\n\t\t\t\tthis.currentForm = this.currentSurface;\n\t\t\t\tthis.setupForm( 'surfaceShader', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SSHD':\n\t\t\t\tthis.setupForm( 'surfaceShaderData', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ENTR': // Not in spec\n\t\t\t\tthis.parseEntryForm( length );\n\t\t\t\tbreak;\n\n\t\t\t\t// Image Map Layer\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.parseImageMap( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAMP':\n\t\t\t\tthis.parseXVAL( 'amplitude', length );\n\t\t\t\tbreak;\n\n\t\t\t\t//Texture Mapping Form\n\n\t\t\tcase 'TMAP':\n\t\t\t\tthis.setupForm( 'textureMap', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'CNTR':\n\t\t\t\tthis.parseXVAL3( 'center', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIZE':\n\t\t\t\tthis.parseXVAL3( 'scale', length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROTA':\n\t\t\t\tthis.parseXVAL3( 'rotation', length );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.parseUnknownForm( type, length );\n\n\t\t}\n\n\t\tthis.debugger.node = 0;\n\t\tthis.debugger.nodeID = type;\n\t\tthis.debugger.log();\n\n\t},\n\n\tsetupForm( type, length ) {\n\n\t\tif ( ! this.currentForm ) this.currentForm = this.currentNode;\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tif ( ! this.currentForm[ type ] ) {\n\n\t\t\tthis.currentForm[ type ] = {};\n\t\t\tthis.currentForm = this.currentForm[ type ];\n\n\n\t\t} else {\n\n\t\t\t// should never see this unless there's a bug in the reader\n\t\t\tconsole.warn( 'LWOLoader: form already exists on parent: ', type, this.currentForm );\n\n\t\t\tthis.currentForm = this.currentForm[ type ];\n\n\t\t}\n\n\n\t},\n\n\tskipForm( length ) {\n\n\t\tthis.reader.skip( length - 4 );\n\n\t},\n\n\tparseUnknownForm( type, length ) {\n\n\t\tconsole.warn( 'LWOLoader: unknown FORM encountered: ' + type, length );\n\n\t\tprintBuffer( this.reader.dv.buffer, this.reader.offset, length - 4 );\n\t\tthis.reader.skip( length - 4 );\n\n\t},\n\n\tparseSurfaceForm( length ) {\n\n\t\tthis.reader.skip( 8 ); // unknown Uint32 x2\n\n\t\tvar name = this.reader.getString();\n\n\t\tvar surface = {\n\t\t\tattributes: {}, // LWO2 style non-node attributes will go here\n\t\t\tconnections: {},\n\t\t\tname: name,\n\t\t\tinputName: name,\n\t\t\tnodes: {},\n\t\t\tsource: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.materials[ name ] = surface;\n\t\tthis.currentSurface = surface;\n\n\t\tthis.parentForm = this.tree.materials;\n\t\tthis.currentForm = surface;\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\t},\n\n\tparseSurfaceLwo2( length ) {\n\n\t\tvar name = this.reader.getString();\n\n\t\tvar surface = {\n\t\t\tattributes: {}, // LWO2 style non-node attributes will go here\n\t\t\tconnections: {},\n\t\t\tname: name,\n\t\t\tnodes: {},\n\t\t\tsource: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.materials[ name ] = surface;\n\t\tthis.currentSurface = surface;\n\n\t\tthis.parentForm = this.tree.materials;\n\t\tthis.currentForm = surface;\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\t},\n\n\tparseSubNode( length ) {\n\n\t\t// parse the NRNM CHUNK of the subnode FORM to get\n\t\t// a meaningful name for the subNode\n\t\t// some subnodes can be renamed, but Input and Surface cannot\n\n\t\tthis.reader.skip( 8 ); // NRNM + length\n\t\tvar name = this.reader.getString();\n\n\t\tvar node = {\n\t\t\tname: name\n\t\t};\n\t\tthis.currentForm = node;\n\t\tthis.currentNode = node;\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\n\n\t},\n\n\t// collect attributes from all nodes at the top level of a surface\n\tparseConnections( length ) {\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tthis.currentForm = this.currentSurface.connections;\n\n\t},\n\n\t// surface node attribute data, e.g. specular, roughness etc\n\tparseEntryForm( length ) {\n\n\t\tthis.reader.skip( 8 ); // NAME + length\n\t\tvar name = this.reader.getString();\n\t\tthis.currentForm = this.currentNode.attributes;\n\n\t\tthis.setupForm( name, length );\n\n\t},\n\n\t// parse values from material - doesn't match up to other LWO3 data types\n\t// sub form of entry form\n\tparseValueForm() {\n\n\t\tthis.reader.skip( 8 ); // unknown + length\n\n\t\tvar valueType = this.reader.getString();\n\n\t\tif ( valueType === 'double' ) {\n\n\t\t\tthis.currentForm.value = this.reader.getUint64();\n\n\t\t} else if ( valueType === 'int' ) {\n\n\t\t\tthis.currentForm.value = this.reader.getUint32();\n\n\t\t} else if ( valueType === 'vparam' ) {\n\n\t\t\tthis.reader.skip( 24 );\n\t\t\tthis.currentForm.value = this.reader.getFloat64();\n\n\t\t} else if ( valueType === 'vparam3' ) {\n\n\t\t\tthis.reader.skip( 24 );\n\t\t\tthis.currentForm.value = this.reader.getFloat64Array( 3 );\n\n\t\t}\n\n\t},\n\n\t// holds various data about texture node image state\n\t// Data other thanmipMapLevel unknown\n\tparseImageStateForm() {\n\n\t\tthis.reader.skip( 8 ); // unknown\n\n\t\tthis.currentForm.mipMapLevel = this.reader.getFloat32();\n\n\t},\n\n\t// LWO2 style image data node OR LWO3 textures defined at top level in editor (not as SURF node)\n\tparseImageMap( length ) {\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tif ( ! this.currentForm.maps ) this.currentForm.maps = [];\n\n\t\tvar map = {};\n\t\tthis.currentForm.maps.push( map );\n\t\tthis.currentForm = map;\n\n\t\tthis.reader.skip( 10 ); // unknown, could be an issue if it contains a VX\n\n\t},\n\n\tparseTextureNodeAttribute( type ) {\n\n\t\tthis.reader.skip( 28 ); // FORM + length + VPRM + unknown + Uint32 x2 + float32\n\n\t\tthis.reader.skip( 20 ); // FORM + length + VPVL + float32 + Uint32\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'ISCL':\n\t\t\t\tthis.currentNode.scale = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IPOS':\n\t\t\t\tthis.currentNode.position = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IROT':\n\t\t\t\tthis.currentNode.rotation = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\t\t\tcase 'IFAL':\n\t\t\t\tthis.currentNode.falloff = this.reader.getFloat32Array( 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IBMP':\n\t\t\t\tthis.currentNode.amplitude = this.reader.getFloat32();\n\t\t\t\tbreak;\n\t\t\tcase 'IUTD':\n\t\t\t\tthis.currentNode.uTiles = this.reader.getFloat32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTD':\n\t\t\t\tthis.currentNode.vTiles = this.reader.getFloat32();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tthis.reader.skip( 2 ); // unknown\n\n\n\t},\n\n\t// ENVL forms are currently ignored\n\tparseEnvelope( length ) {\n\n\t\tthis.reader.skip( length - 4 ); // skipping  entirely for now\n\n\t},\n\n\t///\n\t// CHUNK PARSING METHODS\n\t///\n\n\t// clips can either be defined inside a surface node, or at the top\n\t// level and they have a different format in each case\n\tparseClip( length ) {\n\n\t\tvar tag = this.reader.getIDTag();\n\n\t\t// inside surface node\n\t\tif ( tag === 'FORM' ) {\n\n\t\t\tthis.reader.skip( 16 );\n\n\t\t\tthis.currentNode.fileName = this.reader.getString();\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// otherwise top level\n\t\tthis.reader.setOffset( this.reader.offset - 4 );\n\n\t\tthis.currentFormEnd = this.reader.offset + length;\n\t\tthis.parentForm = this.currentForm;\n\n\t\tthis.reader.skip( 8 ); // unknown\n\n\t\tvar texture = {\n\t\t\tindex: this.reader.getUint32()\n\t\t};\n\t\tthis.tree.textures.push( texture );\n\t\tthis.currentForm = texture;\n\n\t},\n\n\tparseClipLwo2( length ) {\n\n\t\tvar texture = {\n\t\t\tindex: this.reader.getUint32(),\n\t\t\tfileName: ''\n\t\t};\n\n\t\t// seach STIL block\n\t\twhile ( true ) {\n\n\t\t\tvar tag = this.reader.getIDTag();\n\t\t\tvar n_length = this.reader.getUint16();\n\t\t\tif ( tag === 'STIL' ) {\n\n\t\t\t\ttexture.fileName = this.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( n_length >= length ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.tree.textures.push( texture );\n\t\tthis.currentForm = texture;\n\n\t},\n\n\tparseImage() {\n\n\t\tthis.reader.skip( 8 ); // unknown\n\t\tthis.currentForm.fileName = this.reader.getString();\n\n\t},\n\n\tparseXVAL( type, length ) {\n\n\t\tvar endOffset = this.reader.offset + length - 4;\n\t\tthis.reader.skip( 8 );\n\n\t\tthis.currentForm[ type ] = this.reader.getFloat32();\n\n\t\tthis.reader.setOffset( endOffset ); // set end offset directly to skip optional envelope\n\n\t},\n\n\tparseXVAL3( type, length ) {\n\n\t\tvar endOffset = this.reader.offset + length - 4;\n\t\tthis.reader.skip( 8 );\n\n\t\tthis.currentForm[ type ] = {\n\t\t\tx: this.reader.getFloat32(),\n\t\t\ty: this.reader.getFloat32(),\n\t\t\tz: this.reader.getFloat32(),\n\t\t};\n\n\t\tthis.reader.setOffset( endOffset );\n\n\t},\n\n\t// Tags associated with an object\n\t// OTAG { type[ID4], tag-string[S0] }\n\tparseObjectTag() {\n\n\t\tif ( ! this.tree.objectTags ) this.tree.objectTags = {};\n\n\t\tthis.tree.objectTags[ this.reader.getIDTag() ] = {\n\t\t\ttagString: this.reader.getString()\n\t\t};\n\n\t},\n\n\t// Signals the start of a new layer. All the data chunks which follow will be included in this layer until another layer chunk is encountered.\n\t// LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2]\n\tparseLayer( length ) {\n\n\t\tvar layer = {\n\t\t\tnumber: this.reader.getUint16(),\n\t\t\tflags: this.reader.getUint16(), // If the least significant bit of flags is set, the layer is hidden.\n\t\t\tpivot: this.reader.getFloat32Array( 3 ), // Note: this seems to be superflous, as the geometry is translated when pivot is present\n\t\t\tname: this.reader.getString(),\n\t\t};\n\n\t\tthis.tree.layers.push( layer );\n\t\tthis.currentLayer = layer;\n\n\t\tvar parsedLength = 16 + stringOffset( this.currentLayer.name ); // index ( 2 ) + flags( 2 ) + pivot( 12 ) + stringlength\n\n\t\t// if we have not reached then end of the layer block, there must be a parent defined\n\t\tthis.currentLayer.parent = ( parsedLength < length ) ? this.reader.getUint16() : - 1; // omitted or -1 for no parent\n\n\t},\n\n\t// VEC12 * ( F4 + F4 + F4 ) array of x,y,z vectors\n\t// Converting from left to right handed coordinate system:\n\t// x -> -x and switch material FrontSide -> BackSide\n\tparsePoints( length ) {\n\n\t\tthis.currentPoints = [];\n\t\tfor ( var i = 0; i < length / 4; i += 3 ) {\n\n\t\t\t// z -> -z to match three.js right handed coords\n\t\t\tthis.currentPoints.push( this.reader.getFloat32(), this.reader.getFloat32(), - this.reader.getFloat32() );\n\n\t\t}\n\n\t},\n\n\t// parse VMAP or VMAD\n\t// Associates a set of floating-point vectors with a set of points.\n\t// VMAP: { type[ID4], dimension[U2], name[S0], ( vert[VX], value[F4] # dimension ) * }\n\n\t// VMAD Associates a set of floating-point vectors with the vertices of specific polygons.\n\t// Similar to VMAP UVs, but associates with polygon vertices rather than points\n\t// to solve to problem of UV seams:  VMAD chunks are paired with VMAPs of the same name,\n\t// if they exist. The vector values in the VMAD will then replace those in the\n\t// corresponding VMAP, but only for calculations involving the specified polygons.\n\t// VMAD { type[ID4], dimension[U2], name[S0], ( vert[VX], poly[VX], value[F4] # dimension ) * }\n\tparseVertexMapping( length, discontinuous ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\n\t\tvar channelName = this.reader.getString();\n\n\t\tif ( this.reader.offset === finalOffset ) {\n\n\t\t\t// then we are in a texture node and the VMAP chunk is just a reference to a UV channel name\n\t\t\tthis.currentForm.UVChannel = channelName;\n\t\t\treturn;\n\n\t\t}\n\n\t\t// otherwise reset to initial length and parse normal VMAP CHUNK\n\t\tthis.reader.setOffset( this.reader.offset - stringOffset( channelName ) );\n\n\t\tvar type = this.reader.getIDTag();\n\n\t\tthis.reader.getUint16(); // dimension\n\t\tvar name = this.reader.getString();\n\n\t\tvar remainingLength = length - 6 - stringOffset( name );\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'TXUV':\n\t\t\t\tthis.parseUVMapping( name, finalOffset, discontinuous );\n\t\t\t\tbreak;\n\t\t\tcase 'MORF':\n\t\t\tcase 'SPOT':\n\t\t\t\tthis.parseMorphTargets( name, finalOffset, type ); // can't be discontinuous\n\t\t\t\tbreak;\n\t\t\t// unsupported VMAPs\n\t\t\tcase 'APSL':\n\t\t\tcase 'NORM':\n\t\t\tcase 'WGHT':\n\t\t\tcase 'MNVW':\n\t\t\tcase 'PICK':\n\t\t\tcase 'RGB ':\n\t\t\tcase 'RGBA':\n\t\t\t\tthis.reader.skip( remainingLength );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'LWOLoader: unknown vertex map type: ' + type );\n\t\t\t\tthis.reader.skip( remainingLength );\n\n\t\t}\n\n\t},\n\n\tparseUVMapping( name, finalOffset, discontinuous ) {\n\n\t\tvar uvIndices = [];\n\t\tvar polyIndices = [];\n\t\tvar uvs = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tuvIndices.push( this.reader.getVariableLengthIndex() );\n\n\t\t\tif ( discontinuous ) polyIndices.push( this.reader.getVariableLengthIndex() );\n\n\t\t\tuvs.push( this.reader.getFloat32(), this.reader.getFloat32() );\n\n\t\t}\n\n\t\tif ( discontinuous ) {\n\n\t\t\tif ( ! this.currentLayer.discontinuousUVs ) this.currentLayer.discontinuousUVs = {};\n\n\t\t\tthis.currentLayer.discontinuousUVs[ name ] = {\n\t\t\t\tuvIndices: uvIndices,\n\t\t\t\tpolyIndices: polyIndices,\n\t\t\t\tuvs: uvs,\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tif ( ! this.currentLayer.uvs ) this.currentLayer.uvs = {};\n\n\t\t\tthis.currentLayer.uvs[ name ] = {\n\t\t\t\tuvIndices: uvIndices,\n\t\t\t\tuvs: uvs,\n\t\t\t};\n\n\t\t}\n\n\t},\n\n\tparseMorphTargets( name, finalOffset, type ) {\n\n\t\tvar indices = [];\n\t\tvar points = [];\n\n\t\ttype = ( type === 'MORF' ) ? 'relative' : 'absolute';\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tindices.push( this.reader.getVariableLengthIndex() );\n\t\t\t// z -> -z to match three.js right handed coords\n\t\t\tpoints.push( this.reader.getFloat32(), this.reader.getFloat32(), - this.reader.getFloat32() );\n\n\t\t}\n\n\t\tif ( ! this.currentLayer.morphTargets ) this.currentLayer.morphTargets = {};\n\n\t\tthis.currentLayer.morphTargets[ name ] = {\n\t\t\tindices: indices,\n\t\t\tpoints: points,\n\t\t\ttype: type,\n\t\t};\n\n\t},\n\n\t// A list of polygons for the current layer.\n\t// POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * }\n\tparsePolygonList( length ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\t\tvar type = this.reader.getIDTag();\n\n\t\tvar indices = [];\n\n\t\t// hold a list of polygon sizes, to be split up later\n\t\tvar polygonDimensions = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tvar numverts = this.reader.getUint16();\n\n\t\t\t//var flags = numverts & 64512; // 6 high order bits are flags - ignoring for now\n\t\t\tnumverts = numverts & 1023; // remaining ten low order bits are vertex num\n\t\t\tpolygonDimensions.push( numverts );\n\n\t\t\tfor ( var j = 0; j < numverts; j ++ ) indices.push( this.reader.getVariableLengthIndex() );\n\n\t\t}\n\n\t\tvar geometryData = {\n\t\t\ttype: type,\n\t\t\tvertexIndices: indices,\n\t\t\tpolygonDimensions: polygonDimensions,\n\t\t\tpoints: this.currentPoints\n\t\t};\n\n\t\t// Note: assuming that all polys will be lines or points if the first is\n\t\tif ( polygonDimensions[ 0 ] === 1 ) geometryData.type = 'points';\n\t\telse if ( polygonDimensions[ 0 ] === 2 ) geometryData.type = 'lines';\n\n\t\tthis.currentLayer.geometry = geometryData;\n\n\t},\n\n\t// Lists the tag strings that can be associated with polygons by the PTAG chunk.\n\t// TAGS { tag-string[S0] * }\n\tparseTagStrings( length ) {\n\n\t\tthis.tree.tags = this.reader.getStringArray( length );\n\n\t},\n\n\t// Associates tags of a given type with polygons in the most recent POLS chunk.\n\t// PTAG { type[ID4], ( poly[VX], tag[U2] ) * }\n\tparsePolygonTagMapping( length ) {\n\n\t\tvar finalOffset = this.reader.offset + length;\n\t\tvar type = this.reader.getIDTag();\n\t\tif ( type === 'SURF' ) this.parseMaterialIndices( finalOffset );\n\t\telse { //PART, SMGP, COLR not supported\n\n\t\t\tthis.reader.skip( length - 4 );\n\n\t\t}\n\n\t},\n\n\tparseMaterialIndices( finalOffset ) {\n\n\t\t// array holds polygon index followed by material index\n\t\tthis.currentLayer.geometry.materialIndices = [];\n\n\t\twhile ( this.reader.offset < finalOffset ) {\n\n\t\t\tvar polygonIndex = this.reader.getVariableLengthIndex();\n\t\t\tvar materialIndex = this.reader.getUint16();\n\n\t\t\tthis.currentLayer.geometry.materialIndices.push( polygonIndex, materialIndex );\n\n\t\t}\n\n\t},\n\n\tparseUnknownCHUNK( blockID, length ) {\n\n\t\tconsole.warn( 'LWOLoader: unknown chunk type: ' + blockID + ' length: ' + length );\n\n\t\t// print the chunk plus some bytes padding either side\n\t\t// printBuffer( this.reader.dv.buffer, this.reader.offset - 20, length + 40 );\n\n\t\tvar data = this.reader.getString( length );\n\n\t\tthis.currentForm[ blockID ] = data;\n\n\t}\n\n};\n\nfunction DataViewReader( buffer ) {\n\n\tthis.dv = new DataView( buffer );\n\tthis.offset = 0;\n\n}\n\nDataViewReader.prototype = {\n\n\tconstructor: DataViewReader,\n\n\tsize: function () {\n\n\t\treturn this.dv.buffer.byteLength;\n\n\t},\n\n\tsetOffset( offset ) {\n\n\t\tif ( offset > 0 && offset < this.dv.buffer.byteLength ) {\n\n\t\t\tthis.offset = offset;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'LWOLoader: invalid buffer offset' );\n\n\t\t}\n\n\t},\n\n\tendOfFile: function () {\n\n\t\tif ( this.offset >= this.size() ) return true;\n\t\treturn false;\n\n\t},\n\n\tskip: function ( length ) {\n\n\t\tthis.offset += length;\n\n\t},\n\n\tgetUint8: function () {\n\n\t\tvar value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t},\n\n\tgetUint16: function () {\n\n\t\tvar value = this.dv.getUint16( this.offset );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t},\n\n\tgetInt32: function () {\n\n\t\tvar value = this.dv.getInt32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetUint32: function () {\n\n\t\tvar value = this.dv.getUint32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetUint64: function () {\n\n\t\tvar low, high;\n\n\t\thigh = this.getUint32();\n\t\tlow = this.getUint32();\n\t\treturn high * 0x100000000 + low;\n\n\t},\n\n\tgetFloat32: function () {\n\n\t\tvar value = this.dv.getFloat32( this.offset, false );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t},\n\n\tgetFloat32Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\tgetFloat64: function () {\n\n\t\tvar value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t},\n\n\tgetFloat64Array: function ( size ) {\n\n\t\tvar a = [];\n\n\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t},\n\n\t// get variable-length index data type\n\t// VX ::= index[U2] | (index + 0xFF000000)[U4]\n\t// If the index value is less than 65,280 (0xFF00),then VX === U2\n\t// otherwise VX === U4 with bits 24-31 set\n\t// When reading an index, if the first byte encountered is 255 (0xFF), then\n\t// the four-byte form is being used and the first byte should be discarded or masked out.\n\tgetVariableLengthIndex() {\n\n\t\tvar firstByte = this.getUint8();\n\n\t\tif ( firstByte === 255 ) {\n\n\t\t\treturn this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8();\n\n\t\t}\n\n\t\treturn firstByte * 256 + this.getUint8();\n\n\t},\n\n\t// An ID tag is a sequence of 4 bytes containing 7-bit ASCII values\n\tgetIDTag() {\n\n\t\treturn this.getString( 4 );\n\n\t},\n\n\tgetString: function ( size ) {\n\n\t\tif ( size === 0 ) return;\n\n\t\t// note: safari 9 doesn't support Uint8Array.indexOf; create intermediate array instead\n\t\tvar a = [];\n\n\t\tif ( size ) {\n\n\t\t\tfor ( var i = 0; i < size; i ++ ) {\n\n\t\t\t\ta[ i ] = this.getUint8();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tvar currentChar;\n\t\t\tvar len = 0;\n\n\t\t\twhile ( currentChar !== 0 ) {\n\n\t\t\t\tcurrentChar = this.getUint8();\n\t\t\t\tif ( currentChar !== 0 ) a.push( currentChar );\n\t\t\t\tlen ++;\n\n\t\t\t}\n\n\t\t\tif ( ! isEven( len + 1 ) ) this.getUint8(); // if string with terminating nullbyte is uneven, extra nullbyte is added\n\n\t\t}\n\n\t\treturn LoaderUtils.decodeText( new Uint8Array( a ) );\n\n\t},\n\n\tgetStringArray: function ( size ) {\n\n\t\tvar a = this.getString( size );\n\t\ta = a.split( '\\0' );\n\n\t\treturn a.filter( Boolean ); // return array with any empty strings removed\n\n\t}\n\n};\n\n// ************** DEBUGGER  **************\n\nfunction Debugger( ) {\n\n\tthis.active = false;\n\tthis.depth = 0;\n\tthis.formList = [];\n\n}\n\nDebugger.prototype = {\n\n\tconstructor: Debugger,\n\n\tenable: function () {\n\n\t\tthis.active = true;\n\n\t},\n\n\tlog: function () {\n\n\t\tif ( ! this.active ) return;\n\n\t\tvar nodeType;\n\n\t\tswitch ( this.node ) {\n\n\t\t\tcase 0:\n\t\t\t\tnodeType = 'FORM';\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\tnodeType = 'CHK';\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\tnodeType = 'S-CHK';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconsole.log(\n\t\t\t'| '.repeat( this.depth ) +\n\t\t\tnodeType,\n\t\t\tthis.nodeID,\n\t\t\t`( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`,\n\t\t\t( ( this.node == 0 ) ? ' {' : '' ),\n\t\t\t( ( this.skipped ) ? 'SKIPPED' : '' ),\n\t\t\t( ( this.node == 0 && this.skipped ) ? '}' : '' )\n\t\t);\n\n\t\tif ( this.node == 0 && ! this.skipped ) {\n\n\t\t\tthis.depth += 1;\n\t\t\tthis.formList.push( this.dataOffset + this.length );\n\n\t\t}\n\n\t\tthis.skipped = false;\n\n\t},\n\n\tcloseForms: function () {\n\n\t\tif ( ! this.active ) return;\n\n\t\tfor ( var i = this.formList.length - 1; i >= 0; i -- ) {\n\n\t\t\tif ( this.offset >= this.formList[ i ] ) {\n\n\t\t\t\tthis.depth -= 1;\n\t\t\t\tconsole.log( '| '.repeat( this.depth ) + '}' );\n\t\t\t\tthis.formList.splice( - 1, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n};\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction isEven( num ) {\n\n\treturn num % 2;\n\n}\n\n// calculate the length of the string in the buffer\n// this will be string.length + nullbyte + optional padbyte to make the length even\nfunction stringOffset( string ) {\n\n\treturn string.length + 1 + ( isEven( string.length + 1 ) ? 1 : 0 );\n\n}\n\n// for testing purposes, dump buffer to console\n// printBuffer( this.reader.dv.buffer, this.reader.offset, length );\nfunction printBuffer( buffer, from, to ) {\n\n\tconsole.log( LoaderUtils.decodeText( new Uint8Array( buffer, from, to ) ) );\n\n}\n\nexport { IFFParser };\n"
  },
  {
    "path": "libs/three.js/loaders/lwo/LWO2Parser.js",
    "content": "function LWO2Parser( IFFParser ) {\n\n\tthis.IFF = IFFParser;\n\n}\n\nLWO2Parser.prototype = {\n\n\tconstructor: LWO2Parser,\n\n\tparseBlock: function () {\n\n\t\tthis.IFF.debugger.offset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.closeForms();\n\n\t\tvar blockID = this.IFF.reader.getIDTag();\n\t\tvar length = this.IFF.reader.getUint32(); // size of data in bytes\n\t\tif ( length > this.IFF.reader.dv.byteLength - this.IFF.reader.offset ) {\n\n\t\t\tthis.IFF.reader.offset -= 4;\n\t\t\tlength = this.IFF.reader.getUint16();\n\n\t\t}\n\n\t\tthis.IFF.debugger.dataOffset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.length = length;\n\n\t\t// Data types may be found in either LWO2 OR LWO3 spec\n\t\tswitch ( blockID ) {\n\n\t\t\tcase 'FORM': // form blocks may consist of sub -chunks or sub-forms\n\t\t\t\tthis.IFF.parseForm( length );\n\t\t\t\tbreak;\n\n\t\t\t// SKIPPED CHUNKS\n\t\t\t// if break; is called directly, the position in the lwoTree is not created\n\t\t\t// any sub chunks and forms are added to the parent form instead\n\t\t\t// MISC skipped\n\t\t\tcase 'ICON': // Thumbnail Icon Image\n\t\t\tcase 'VMPA': // Vertex Map Parameter\n\t\t\tcase 'BBOX': // bounding box\n\t\t\t// case 'VMMD':\n\t\t\t// case 'VTYP':\n\n\t\t\t// normal maps can be specified, normally on models imported from other applications. Currently ignored\n\t\t\tcase 'NORM':\n\n\t\t\t// ENVL FORM skipped\n\t\t\tcase 'PRE ':\n\t\t\tcase 'POST':\n\t\t\tcase 'KEY ':\n\t\t\tcase 'SPAN':\n\n\t\t\t// CLIP FORM skipped\n\t\t\tcase 'TIME':\n\t\t\tcase 'CLRS':\n\t\t\tcase 'CLRA':\n\t\t\tcase 'FILT':\n\t\t\tcase 'DITH':\n\t\t\tcase 'CONT':\n\t\t\tcase 'BRIT':\n\t\t\tcase 'SATR':\n\t\t\tcase 'HUE ':\n\t\t\tcase 'GAMM':\n\t\t\tcase 'NEGA':\n\t\t\tcase 'IFLT':\n\t\t\tcase 'PFLT':\n\n\t\t\t// Image Map Layer skipped\n\t\t\tcase 'PROJ':\n\t\t\tcase 'AXIS':\n\t\t\tcase 'AAST':\n\t\t\tcase 'PIXB':\n\t\t\tcase 'AUVO':\n\t\t\tcase 'STCK':\n\n\t\t\t// Procedural Textures skipped\n\t\t\tcase 'PROC':\n\t\t\tcase 'VALU':\n\t\t\tcase 'FUNC':\n\n\t\t\t// Gradient Textures skipped\n\t\t\tcase 'PNAM':\n\t\t\tcase 'INAM':\n\t\t\tcase 'GRST':\n\t\t\tcase 'GREN':\n\t\t\tcase 'GRPT':\n\t\t\tcase 'FKEY':\n\t\t\tcase 'IKEY':\n\n\t\t\t// Texture Mapping Form skipped\n\t\t\tcase 'CSYS':\n\n\t\t\t// Surface CHUNKs skipped\n\t\t\tcase 'OPAQ': // top level 'opacity' checkbox\n\t\t\tcase 'CMAP': // clip map\n\n\t\t\t// Surface node CHUNKS skipped\n\t\t\t// These mainly specify the node editor setup in LW\n\t\t\tcase 'NLOC':\n\t\t\tcase 'NZOM':\n\t\t\tcase 'NVER':\n\t\t\tcase 'NSRV':\n\t\t\tcase 'NVSK': // unknown\n\t\t\tcase 'NCRD':\n\t\t\tcase 'WRPW': // image wrap w ( for cylindrical and spherical projections)\n\t\t\tcase 'WRPH': // image wrap h\n\t\t\tcase 'NMOD':\n\t\t\tcase 'NPRW':\n\t\t\tcase 'NPLA':\n\t\t\tcase 'NODS':\n\t\t\tcase 'VERS':\n\t\t\tcase 'ENUM':\n\t\t\tcase 'TAG ':\n\t\t\tcase 'OPAC':\n\n\t\t\t// Car Material CHUNKS\n\t\t\tcase 'CGMD':\n\t\t\tcase 'CGTY':\n\t\t\tcase 'CGST':\n\t\t\tcase 'CGEN':\n\t\t\tcase 'CGTS':\n\t\t\tcase 'CGTE':\n\t\t\tcase 'OSMP':\n\t\t\tcase 'OMDE':\n\t\t\tcase 'OUTR':\n\t\t\tcase 'FLAG':\n\n\t\t\tcase 'TRNL':\n\t\t\tcase 'GLOW':\n\t\t\tcase 'GVAL': // glow intensity\n\t\t\tcase 'SHRP':\n\t\t\tcase 'RFOP':\n\t\t\tcase 'RSAN':\n\t\t\tcase 'TROP':\n\t\t\tcase 'RBLR':\n\t\t\tcase 'TBLR':\n\t\t\tcase 'CLRH':\n\t\t\tcase 'CLRF':\n\t\t\tcase 'ADTR':\n\t\t\tcase 'LINE':\n\t\t\tcase 'ALPH':\n\t\t\tcase 'VCOL':\n\t\t\tcase 'ENAB':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SURF':\n\t\t\t\tthis.IFF.parseSurfaceLwo2( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'CLIP':\n\t\t\t\tthis.IFF.parseClipLwo2( length );\n\t\t\t\tbreak;\n\n\t\t\t// Texture node chunks (not in spec)\n\t\t\tcase 'IPIX': // usePixelBlending\n\t\t\tcase 'IMIP': // useMipMaps\n\t\t\tcase 'IMOD': // imageBlendingMode\n\t\t\tcase 'AMOD': // unknown\n\t\t\tcase 'IINV': // imageInvertAlpha\n\t\t\tcase 'INCR': // imageInvertColor\n\t\t\tcase 'IAXS': // imageAxis ( for non-UV maps)\n\t\t\tcase 'IFOT': // imageFallofType\n\t\t\tcase 'ITIM': // timing for animated textures\n\t\t\tcase 'IWRL':\n\t\t\tcase 'IUTI':\n\t\t\tcase 'IINX':\n\t\t\tcase 'IINY':\n\t\t\tcase 'IINZ':\n\t\t\tcase 'IREF': // possibly a VX for reused texture nodes\n\t\t\t\tif ( length === 4 ) this.IFF.currentNode[ blockID ] = this.IFF.reader.getInt32();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'OTAG':\n\t\t\t\tthis.IFF.parseObjectTag();\n\t\t\t\tbreak;\n\n\t\t\tcase 'LAYR':\n\t\t\t\tthis.IFF.parseLayer( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PNTS':\n\t\t\t\tthis.IFF.parsePoints( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAP':\n\t\t\t\tthis.IFF.parseVertexMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'AUVU':\n\t\t\tcase 'AUVN':\n\t\t\t\tthis.IFF.reader.skip( length - 1 );\n\t\t\t\tthis.IFF.reader.getVariableLengthIndex(); // VX\n\t\t\t\tbreak;\n\n\t\t\tcase 'POLS':\n\t\t\t\tthis.IFF.parsePolygonList( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAGS':\n\t\t\t\tthis.IFF.parseTagStrings( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PTAG':\n\t\t\t\tthis.IFF.parsePolygonTagMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAD':\n\t\t\t\tthis.IFF.parseVertexMapping( length, true );\n\t\t\t\tbreak;\n\n\t\t\t// Misc CHUNKS\n\t\t\tcase 'DESC': // Description Line\n\t\t\t\tthis.IFF.currentForm.description = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'TEXT':\n\t\t\tcase 'CMNT':\n\t\t\tcase 'NCOM':\n\t\t\t\tthis.IFF.currentForm.comment = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Envelope Form\n\t\t\tcase 'NAME':\n\t\t\t\tthis.IFF.currentForm.channelName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Image Map Layer\n\t\t\tcase 'WRAP':\n\t\t\t\tthis.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAG':\n\t\t\t\tvar index = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tthis.IFF.currentForm.imageIndex = index;\n\t\t\t\tbreak;\n\n\t\t\t// Texture Mapping Form\n\t\t\tcase 'OREF':\n\t\t\t\tthis.IFF.currentForm.referenceObject = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROID':\n\t\t\t\tthis.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// Surface Blocks\n\t\t\tcase 'SSHN':\n\t\t\t\tthis.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'AOVN':\n\t\t\t\tthis.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks\n\t\t\tcase 'NSTA':\n\t\t\t\tthis.IFF.currentForm.disabled = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NRNM':\n\t\t\t\tthis.IFF.currentForm.realName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NNME':\n\t\t\t\tthis.IFF.currentForm.refName = this.IFF.reader.getString();\n\t\t\t\tthis.IFF.currentSurface.nodes[ this.IFF.currentForm.refName ] = this.IFF.currentForm;\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks : connections\n\t\t\tcase 'INME':\n\t\t\t\tif ( ! this.IFF.currentForm.nodeName ) this.IFF.currentForm.nodeName = [];\n\t\t\t\tthis.IFF.currentForm.nodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINN':\n\t\t\t\tif ( ! this.IFF.currentForm.inputNodeName ) this.IFF.currentForm.inputNodeName = [];\n\t\t\t\tthis.IFF.currentForm.inputNodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputName ) this.IFF.currentForm.inputName = [];\n\t\t\t\tthis.IFF.currentForm.inputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IONM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputOutputName ) this.IFF.currentForm.inputOutputName = [];\n\t\t\t\tthis.IFF.currentForm.inputOutputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'FNAM':\n\t\t\t\tthis.IFF.currentForm.fileName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'CHAN': // NOTE: ENVL Forms may also have CHAN chunk, however ENVL is currently ignored\n\t\t\t\tif ( length === 4 ) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format\n\t\t\tcase 'SMAN':\n\t\t\t\tvar maxSmoothingAngle = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.currentSurface.attributes.smooth = ( maxSmoothingAngle < 0 ) ? false : true;\n\t\t\t\tbreak;\n\n\t\t\t// LWO2: Basic Surface Parameters\n\t\t\tcase 'COLR':\n\t\t\t\tthis.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array( 3 ) };\n\t\t\t\tthis.IFF.reader.skip( 2 ); // VX: envelope\n\t\t\t\tbreak;\n\n\t\t\tcase 'LUMI':\n\t\t\t\tthis.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SPEC':\n\t\t\t\tthis.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'DIFF':\n\t\t\t\tthis.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'REFL':\n\t\t\t\tthis.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'GLOS':\n\t\t\t\tthis.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TRAN':\n\t\t\t\tthis.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'BUMP':\n\t\t\t\tthis.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIDE':\n\t\t\t\tthis.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIND':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TMAP':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length ); // needs implementing\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUVI': // uv channel name\n\t\t\t\tthis.IFF.currentNode.UVChannel = this.IFF.reader.getString( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUTL': // widthWrappingMode: 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\t\t\t\tthis.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTL': // heightWrappingMode\n\t\t\t\tthis.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 USE\n\t\t\tcase 'BLOK':\n\t\t\t\t// skip\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.IFF.parseUnknownCHUNK( blockID, length );\n\n\t\t}\n\n\t\tif ( blockID != 'FORM' ) {\n\n\t\t\tthis.IFF.debugger.node = 1;\n\t\t\tthis.IFF.debugger.nodeID = blockID;\n\t\t\tthis.IFF.debugger.log();\n\n\t\t}\n\n\t\tif ( this.IFF.reader.offset >= this.IFF.currentFormEnd ) {\n\n\t\t\tthis.IFF.currentForm = this.IFF.parentForm;\n\n\t\t}\n\n\t}\n\n};\n\nexport { LWO2Parser };\n"
  },
  {
    "path": "libs/three.js/loaders/lwo/LWO3Parser.js",
    "content": "function LWO3Parser( IFFParser ) {\n\n\tthis.IFF = IFFParser;\n\n}\n\nLWO3Parser.prototype = {\n\n\tconstructor: LWO3Parser,\n\n\tparseBlock: function () {\n\n\t\tthis.IFF.debugger.offset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.closeForms();\n\n\t\tvar blockID = this.IFF.reader.getIDTag();\n\t\tvar length = this.IFF.reader.getUint32(); // size of data in bytes\n\n\t\tthis.IFF.debugger.dataOffset = this.IFF.reader.offset;\n\t\tthis.IFF.debugger.length = length;\n\n\t\t// Data types may be found in either LWO2 OR LWO3 spec\n\t\tswitch ( blockID ) {\n\n\t\t\tcase 'FORM': // form blocks may consist of sub -chunks or sub-forms\n\t\t\t\tthis.IFF.parseForm( length );\n\t\t\t\tbreak;\n\n\t\t\t// SKIPPED CHUNKS\n\t\t\t// MISC skipped\n\t\t\tcase 'ICON': // Thumbnail Icon Image\n\t\t\tcase 'VMPA': // Vertex Map Parameter\n\t\t\tcase 'BBOX': // bounding box\n\t\t\t// case 'VMMD':\n\t\t\t// case 'VTYP':\n\n\t\t\t// normal maps can be specified, normally on models imported from other applications. Currently ignored\n\t\t\tcase 'NORM':\n\n\t\t\t// ENVL FORM skipped\n\t\t\tcase 'PRE ':\n\t\t\tcase 'POST':\n\t\t\tcase 'KEY ':\n\t\t\tcase 'SPAN':\n\n\t\t\t// CLIP FORM skipped\n\t\t\tcase 'TIME':\n\t\t\tcase 'CLRS':\n\t\t\tcase 'CLRA':\n\t\t\tcase 'FILT':\n\t\t\tcase 'DITH':\n\t\t\tcase 'CONT':\n\t\t\tcase 'BRIT':\n\t\t\tcase 'SATR':\n\t\t\tcase 'HUE ':\n\t\t\tcase 'GAMM':\n\t\t\tcase 'NEGA':\n\t\t\tcase 'IFLT':\n\t\t\tcase 'PFLT':\n\n\t\t\t// Image Map Layer skipped\n\t\t\tcase 'PROJ':\n\t\t\tcase 'AXIS':\n\t\t\tcase 'AAST':\n\t\t\tcase 'PIXB':\n\t\t\tcase 'STCK':\n\n\t\t\t// Procedural Textures skipped\n\t\t\tcase 'VALU':\n\n\t\t\t// Gradient Textures skipped\n\t\t\tcase 'PNAM':\n\t\t\tcase 'INAM':\n\t\t\tcase 'GRST':\n\t\t\tcase 'GREN':\n\t\t\tcase 'GRPT':\n\t\t\tcase 'FKEY':\n\t\t\tcase 'IKEY':\n\n\t\t\t// Texture Mapping Form skipped\n\t\t\tcase 'CSYS':\n\n\t\t\t\t// Surface CHUNKs skipped\n\t\t\tcase 'OPAQ': // top level 'opacity' checkbox\n\t\t\tcase 'CMAP': // clip map\n\n\t\t\t// Surface node CHUNKS skipped\n\t\t\t// These mainly specify the node editor setup in LW\n\t\t\tcase 'NLOC':\n\t\t\tcase 'NZOM':\n\t\t\tcase 'NVER':\n\t\t\tcase 'NSRV':\n\t\t\tcase 'NCRD':\n\t\t\tcase 'NMOD':\n\t\t\tcase 'NSEL':\n\t\t\tcase 'NPRW':\n\t\t\tcase 'NPLA':\n\t\t\tcase 'VERS':\n\t\t\tcase 'ENUM':\n\t\t\tcase 'TAG ':\n\n\t\t\t// Car Material CHUNKS\n\t\t\tcase 'CGMD':\n\t\t\tcase 'CGTY':\n\t\t\tcase 'CGST':\n\t\t\tcase 'CGEN':\n\t\t\tcase 'CGTS':\n\t\t\tcase 'CGTE':\n\t\t\tcase 'OSMP':\n\t\t\tcase 'OMDE':\n\t\t\tcase 'OUTR':\n\t\t\tcase 'FLAG':\n\n\t\t\tcase 'TRNL':\n\t\t\tcase 'SHRP':\n\t\t\tcase 'RFOP':\n\t\t\tcase 'RSAN':\n\t\t\tcase 'TROP':\n\t\t\tcase 'RBLR':\n\t\t\tcase 'TBLR':\n\t\t\tcase 'CLRH':\n\t\t\tcase 'CLRF':\n\t\t\tcase 'ADTR':\n\t\t\tcase 'GLOW':\n\t\t\tcase 'LINE':\n\t\t\tcase 'ALPH':\n\t\t\tcase 'VCOL':\n\t\t\tcase 'ENAB':\n\t\t\t\tthis.IFF.debugger.skipped = true;\n\t\t\t\tthis.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// Texture node chunks (not in spec)\n\t\t\tcase 'IPIX': // usePixelBlending\n\t\t\tcase 'IMIP': // useMipMaps\n\t\t\tcase 'IMOD': // imageBlendingMode\n\t\t\tcase 'AMOD': // unknown\n\t\t\tcase 'IINV': // imageInvertAlpha\n\t\t\tcase 'INCR': // imageInvertColor\n\t\t\tcase 'IAXS': // imageAxis ( for non-UV maps)\n\t\t\tcase 'IFOT': // imageFallofType\n\t\t\tcase 'ITIM': // timing for animated textures\n\t\t\tcase 'IWRL':\n\t\t\tcase 'IUTI':\n\t\t\tcase 'IINX':\n\t\t\tcase 'IINY':\n\t\t\tcase 'IINZ':\n\t\t\tcase 'IREF': // possibly a VX for reused texture nodes\n\t\t\t\tif ( length === 4 ) this.IFF.currentNode[ blockID ] = this.IFF.reader.getInt32();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'OTAG':\n\t\t\t\tthis.IFF.parseObjectTag();\n\t\t\t\tbreak;\n\n\t\t\tcase 'LAYR':\n\t\t\t\tthis.IFF.parseLayer( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PNTS':\n\t\t\t\tthis.IFF.parsePoints( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAP':\n\t\t\t\tthis.IFF.parseVertexMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'POLS':\n\t\t\t\tthis.IFF.parsePolygonList( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TAGS':\n\t\t\t\tthis.IFF.parseTagStrings( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'PTAG':\n\t\t\t\tthis.IFF.parsePolygonTagMapping( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'VMAD':\n\t\t\t\tthis.IFF.parseVertexMapping( length, true );\n\t\t\t\tbreak;\n\n\t\t\t// Misc CHUNKS\n\t\t\tcase 'DESC': // Description Line\n\t\t\t\tthis.IFF.currentForm.description = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'TEXT':\n\t\t\tcase 'CMNT':\n\t\t\tcase 'NCOM':\n\t\t\t\tthis.IFF.currentForm.comment = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Envelope Form\n\t\t\tcase 'NAME':\n\t\t\t\tthis.IFF.currentForm.channelName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Image Map Layer\n\t\t\tcase 'WRAP':\n\t\t\t\tthis.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAG':\n\t\t\t\tvar index = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tthis.IFF.currentForm.imageIndex = index;\n\t\t\t\tbreak;\n\n\t\t\t// Texture Mapping Form\n\t\t\tcase 'OREF':\n\t\t\t\tthis.IFF.currentForm.referenceObject = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'ROID':\n\t\t\t\tthis.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\t// Surface Blocks\n\t\t\tcase 'SSHN':\n\t\t\t\tthis.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'AOVN':\n\t\t\t\tthis.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks\n\t\t\tcase 'NSTA':\n\t\t\t\tthis.IFF.currentForm.disabled = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NRNM':\n\t\t\t\tthis.IFF.currentForm.realName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'NNME':\n\t\t\t\tthis.IFF.currentForm.refName = this.IFF.reader.getString();\n\t\t\t\tthis.IFF.currentSurface.nodes[ this.IFF.currentForm.refName ] = this.IFF.currentForm;\n\t\t\t\tbreak;\n\n\t\t\t// Nodal Blocks : connections\n\t\t\tcase 'INME':\n\t\t\t\tif ( ! this.IFF.currentForm.nodeName ) this.IFF.currentForm.nodeName = [];\n\t\t\t\tthis.IFF.currentForm.nodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINN':\n\t\t\t\tif ( ! this.IFF.currentForm.inputNodeName ) this.IFF.currentForm.inputNodeName = [];\n\t\t\t\tthis.IFF.currentForm.inputNodeName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IINM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputName ) this.IFF.currentForm.inputName = [];\n\t\t\t\tthis.IFF.currentForm.inputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IONM':\n\t\t\t\tif ( ! this.IFF.currentForm.inputOutputName ) this.IFF.currentForm.inputOutputName = [];\n\t\t\t\tthis.IFF.currentForm.inputOutputName.push( this.IFF.reader.getString() );\n\t\t\t\tbreak;\n\n\t\t\tcase 'FNAM':\n\t\t\t\tthis.IFF.currentForm.fileName = this.IFF.reader.getString();\n\t\t\t\tbreak;\n\n\t\t\tcase 'CHAN': // NOTE: ENVL Forms may also have CHAN chunk, however ENVL is currently ignored\n\t\t\t\tif ( length === 4 ) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();\n\t\t\t\telse this.IFF.reader.skip( length );\n\t\t\t\tbreak;\n\n\t\t\t// LWO2 Spec chunks: these are needed since the SURF FORMs are often in LWO2 format\n\t\t\tcase 'SMAN':\n\t\t\t\tvar maxSmoothingAngle = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.currentSurface.attributes.smooth = ( maxSmoothingAngle < 0 ) ? false : true;\n\t\t\t\tbreak;\n\n\t\t\t// LWO2: Basic Surface Parameters\n\t\t\tcase 'COLR':\n\t\t\t\tthis.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array( 3 ) };\n\t\t\t\tthis.IFF.reader.skip( 2 ); // VX: envelope\n\t\t\t\tbreak;\n\n\t\t\tcase 'LUMI':\n\t\t\t\tthis.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SPEC':\n\t\t\t\tthis.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'DIFF':\n\t\t\t\tthis.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'REFL':\n\t\t\t\tthis.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'GLOS':\n\t\t\t\tthis.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TRAN':\n\t\t\t\tthis.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'BUMP':\n\t\t\t\tthis.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'SIDE':\n\t\t\t\tthis.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'RIND':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();\n\t\t\t\tthis.IFF.reader.skip( 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 'TIMG':\n\t\t\t\tthis.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IMAP':\n\t\t\t\tthis.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUVI': // uv channel name\n\t\t\t\tthis.IFF.currentNode.UVChannel = this.IFF.reader.getString( length );\n\t\t\t\tbreak;\n\n\t\t\tcase 'IUTL': // widthWrappingMode: 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n\t\t\t\tthis.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\t\t\tcase 'IVTL': // heightWrappingMode\n\t\t\t\tthis.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.IFF.parseUnknownCHUNK( blockID, length );\n\n\t\t}\n\n\t\tif ( blockID != 'FORM' ) {\n\n\t\t\tthis.IFF.debugger.node = 1;\n\t\t\tthis.IFF.debugger.nodeID = blockID;\n\t\t\tthis.IFF.debugger.log();\n\n\t\t}\n\n\t\tif ( this.IFF.reader.offset >= this.IFF.currentFormEnd ) {\n\n\t\t\tthis.IFF.currentForm = this.IFF.parentForm;\n\n\t\t}\n\n\t}\n\n};\n\nexport { LWO3Parser };\n"
  },
  {
    "path": "libs/three.js/loaders/obj2/OBJLoader2Parser.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\n/**\n * Parse OBJ data either from ArrayBuffer or string\n */\nconst OBJLoader2Parser = function () {\n\n\tthis.logging = {\n\t\tenabled: false,\n\t\tdebug: false\n\t};\n\n\tconst scope = this;\n\tthis.callbacks = {\n\t\tonProgress: function ( text ) {\n\n\t\t\tscope._onProgress( text );\n\n\t\t},\n\t\tonAssetAvailable: function ( payload ) {\n\n\t\t\tscope._onAssetAvailable( payload );\n\n\t\t},\n\t\tonError: function ( errorMessage ) {\n\n\t\t\tscope._onError( errorMessage );\n\n\t\t},\n\t\tonLoad: function ( object3d, message ) {\n\n\t\t\tscope._onLoad( object3d, message );\n\n\t\t},\n\t};\n\tthis.contentRef = null;\n\tthis.legacyMode = false;\n\n\tthis.materials = {};\n\tthis.materialPerSmoothingGroup = false;\n\tthis.useOAsMesh = false;\n\tthis.useIndices = false;\n\tthis.disregardNormals = false;\n\n\tthis.vertices = [];\n\tthis.colors = [];\n\tthis.normals = [];\n\tthis.uvs = [];\n\n\tthis.rawMesh = {\n\t\tobjectName: '',\n\t\tgroupName: '',\n\t\tactiveMtlName: '',\n\t\tmtllibName: '',\n\n\t\t// reset with new mesh\n\t\tfaceType: - 1,\n\t\tsubGroups: [],\n\t\tsubGroupInUse: null,\n\t\tsmoothingGroup: {\n\t\t\tsplitMaterials: false,\n\t\t\tnormalized: - 1,\n\t\t\treal: - 1\n\t\t},\n\t\tcounts: {\n\t\t\tdoubleIndicesCount: 0,\n\t\t\tfaceCount: 0,\n\t\t\tmtlCount: 0,\n\t\t\tsmoothingGroupCount: 0\n\t\t}\n\t};\n\n\tthis.inputObjectCount = 1;\n\tthis.outputObjectCount = 1;\n\tthis.globalCounts = {\n\t\tvertices: 0,\n\t\tfaces: 0,\n\t\tdoubleIndicesCount: 0,\n\t\tlineByte: 0,\n\t\tcurrentByte: 0,\n\t\ttotalBytes: 0\n\t};\n\n};\n\nOBJLoader2Parser.prototype = {\n\n\tconstructor: OBJLoader2Parser,\n\n\t_resetRawMesh: function () {\n\n\t\t// faces are stored according combined index of group, material and smoothingGroup (0 or not)\n\t\tthis.rawMesh.subGroups = [];\n\t\tthis.rawMesh.subGroupInUse = null;\n\t\tthis.rawMesh.smoothingGroup.normalized = - 1;\n\t\tthis.rawMesh.smoothingGroup.real = - 1;\n\n\t\t// this default index is required as it is possible to define faces without 'g' or 'usemtl'\n\t\tthis._pushSmoothingGroup( 1 );\n\n\t\tthis.rawMesh.counts.doubleIndicesCount = 0;\n\t\tthis.rawMesh.counts.faceCount = 0;\n\t\tthis.rawMesh.counts.mtlCount = 0;\n\t\tthis.rawMesh.counts.smoothingGroupCount = 0;\n\n\t},\n\n\t/**\n\t * Tells whether a material shall be created per smoothing group.\n\t *\n\t * @param {boolean} materialPerSmoothingGroup=false\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetMaterialPerSmoothingGroup: function ( materialPerSmoothingGroup ) {\n\n\t\tthis.materialPerSmoothingGroup = materialPerSmoothingGroup === true;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Usually 'o' is meta-information and does not result in creation of new meshes, but mesh creation on occurrence of \"o\" can be enforced.\n\t *\n\t * @param {boolean} useOAsMesh=false\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetUseOAsMesh: function ( useOAsMesh ) {\n\n\t\tthis.useOAsMesh = useOAsMesh === true;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Instructs loaders to create indexed {@link BufferGeometry}.\n\t *\n\t * @param {boolean} useIndices=false\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetUseIndices: function ( useIndices ) {\n\n\t\tthis.useIndices = useIndices === true;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Tells whether normals should be completely disregarded and regenerated.\n\t *\n\t * @param {boolean} disregardNormals=false\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetDisregardNormals: function ( disregardNormals ) {\n\n\t\tthis.disregardNormals = disregardNormals === true;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Clears materials object and sets the new ones.\n\t *\n\t * @param {Object} materials Object with named materials\n\t */\n\tsetMaterials: function ( materials ) {\n\n \t\tthis.materials = Object.assign( {}, materials );\n\n\t},\n\n\t/**\n\t * Register a function that is called once an asset (mesh/material) becomes available.\n\t *\n\t * @param onAssetAvailable\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetCallbackOnAssetAvailable: function ( onAssetAvailable ) {\n\n\t\tif ( onAssetAvailable !== null && onAssetAvailable !== undefined && onAssetAvailable instanceof Function ) {\n\n\t\t\tthis.callbacks.onAssetAvailable = onAssetAvailable;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Register a function that is used to report overall processing progress.\n\t *\n\t * @param {Function} onProgress\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetCallbackOnProgress: function ( onProgress ) {\n\n\t\tif ( onProgress !== null && onProgress !== undefined && onProgress instanceof Function ) {\n\n\t\t\tthis.callbacks.onProgress = onProgress;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Register an error handler function that is called if errors occur. It can decide to just log or to throw an exception.\n\t *\n\t * @param {Function} onError\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetCallbackOnError: function ( onError ) {\n\n\t\tif ( onError !== null && onError !== undefined && onError instanceof Function ) {\n\n\t\t\tthis.callbacks.onError = onError;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Register a function that is called when parsing was completed.\n\t *\n\t * @param {Function} onLoad\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetCallbackOnLoad: function ( onLoad ) {\n\n\t\tif ( onLoad !== null && onLoad !== undefined && onLoad instanceof Function ) {\n\n\t\t\tthis.callbacks.onLoad = onLoad;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Announce parse progress feedback which is logged to the console.\n\t * @private\n\t *\n\t * @param {string} text Textual description of the event\n\t */\n\t_onProgress: function ( text ) {\n\n\t\tconst message = text ? text : '';\n\t\tif ( this.logging.enabled && this.logging.debug ) {\n\n\t\t\tconsole.log( message );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Announce error feedback which is logged as error message.\n\t * @private\n\t *\n\t * @param {String} errorMessage The event containing the error\n\t */\n\t_onError: function ( errorMessage ) {\n\n\t\tif ( this.logging.enabled && this.logging.debug ) {\n\n\t\t\tconsole.error( errorMessage );\n\n\t\t}\n\n\t},\n\n\t_onAssetAvailable: function ( /*payload*/ ) {\n\n\t\tconst errorMessage = 'OBJLoader2Parser does not provide implementation for onAssetAvailable. Aborting...';\n\t\tthis.callbacks.onError( errorMessage );\n\t\tthrow errorMessage;\n\n\t},\n\n\t_onLoad: function ( object3d, message ) {\n\n\t\tconsole.log( 'You reached parser default onLoad callback: ' + message );\n\n\t},\n\n\t/**\n\t * Enable or disable logging in general (except warn and error), plus enable or disable debug logging.\n\t *\n\t * @param {boolean} enabled True or false.\n\t * @param {boolean} debug True or false.\n\t *\n\t * @return {OBJLoader2Parser}\n\t */\n\tsetLogging: function ( enabled, debug ) {\n\n\t\tthis.logging.enabled = enabled === true;\n\t\tthis.logging.debug = debug === true;\n\t\treturn this;\n\n\t},\n\n\t_configure: function () {\n\n\t\tthis._pushSmoothingGroup( 1 );\n\t\tif ( this.logging.enabled ) {\n\n\t\t\tconst matKeys = Object.keys( this.materials );\n\t\t\tconst matNames = ( matKeys.length > 0 ) ? '\\n\\tmaterialNames:\\n\\t\\t- ' + matKeys.join( '\\n\\t\\t- ' ) : '\\n\\tmaterialNames: None';\n\t\t\tlet printedConfig = 'OBJLoader.Parser configuration:'\n\t\t\t\t+ matNames\n\t\t\t\t+ '\\n\\tmaterialPerSmoothingGroup: ' + this.materialPerSmoothingGroup\n\t\t\t\t+ '\\n\\tuseOAsMesh: ' + this.useOAsMesh\n\t\t\t\t+ '\\n\\tuseIndices: ' + this.useIndices\n\t\t\t\t+ '\\n\\tdisregardNormals: ' + this.disregardNormals;\n\t\t\tprintedConfig += '\\n\\tcallbacks.onProgress: ' + this.callbacks.onProgress.name;\n\t\t\tprintedConfig += '\\n\\tcallbacks.onAssetAvailable: ' + this.callbacks.onAssetAvailable.name;\n\t\t\tprintedConfig += '\\n\\tcallbacks.onError: ' + this.callbacks.onError.name;\n\t\t\tconsole.info( printedConfig );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Parse the provided arraybuffer\n\t *\n\t * @param {Uint8Array} arrayBuffer OBJ data as Uint8Array\n\t */\n\texecute: function ( arrayBuffer ) {\n\n\t\tif ( this.logging.enabled ) console.time( 'OBJLoader2Parser.execute' );\n\t\tthis._configure();\n\n\t\tconst arrayBufferView = new Uint8Array( arrayBuffer );\n\t\tthis.contentRef = arrayBufferView;\n\t\tconst length = arrayBufferView.byteLength;\n\t\tthis.globalCounts.totalBytes = length;\n\t\tconst buffer = new Array( 128 );\n\n\t\tlet bufferPointer = 0;\n\t\tlet slashesCount = 0;\n\t\tlet word = '';\n\t\tlet currentByte = 0;\n\t\tfor ( let code; currentByte < length; currentByte ++ ) {\n\n\t\t\tcode = arrayBufferView[ currentByte ];\n\t\t\tswitch ( code ) {\n\n\t\t\t\t// space\n\t\t\t\tcase 32:\n\t\t\t\t\tif ( word.length > 0 ) buffer[ bufferPointer ++ ] = word;\n\t\t\t\t\tword = '';\n\t\t\t\t\tbreak;\n\t\t\t\t// slash\n\t\t\t\tcase 47:\n\t\t\t\t\tif ( word.length > 0 ) buffer[ bufferPointer ++ ] = word;\n\t\t\t\t\tslashesCount ++;\n\t\t\t\t\tword = '';\n\t\t\t\t\tbreak;\n\n\t\t\t\t// LF\n\t\t\t\tcase 10:\n\t\t\t\t\tthis._processLine( buffer, bufferPointer, slashesCount, word, currentByte );\n\t\t\t\t\tword = '';\n\t\t\t\t\tbufferPointer = 0;\n\t\t\t\t\tslashesCount = 0;\n\t\t\t\t\tbreak;\n\n\t\t\t\t// CR\n\t\t\t\tcase 13:\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tword += String.fromCharCode( code );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._processLine( buffer, bufferPointer, slashesCount, word, currentByte );\n\t\tthis._finalizeParsing();\n\t\tif ( this.logging.enabled ) console.timeEnd( 'OBJLoader2Parser.execute' );\n\n\t},\n\n\t/**\n\t * Parse the provided text\n\t *\n\t * @param {string} text OBJ data as string\n\t */\n\texecuteLegacy: function ( text ) {\n\n\t\tif ( this.logging.enabled ) console.time( 'OBJLoader2Parser.executeLegacy' );\n\t\tthis._configure();\n\t\tthis.legacyMode = true;\n\t\tthis.contentRef = text;\n\t\tconst length = text.length;\n\t\tthis.globalCounts.totalBytes = length;\n\t\tconst buffer = new Array( 128 );\n\n\t\tlet bufferPointer = 0;\n\t\tlet slashesCount = 0;\n\t\tlet word = '';\n\t\tlet currentByte = 0;\n\t\tfor ( let char; currentByte < length; currentByte ++ ) {\n\n\t\t\tchar = text[ currentByte ];\n\t\t\tswitch ( char ) {\n\n\t\t\t\tcase ' ':\n\t\t\t\t\tif ( word.length > 0 ) buffer[ bufferPointer ++ ] = word;\n\t\t\t\t\tword = '';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase '/':\n\t\t\t\t\tif ( word.length > 0 ) buffer[ bufferPointer ++ ] = word;\n\t\t\t\t\tslashesCount ++;\n\t\t\t\t\tword = '';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase '\\n':\n\t\t\t\t\tthis._processLine( buffer, bufferPointer, slashesCount, word, currentByte );\n\t\t\t\t\tword = '';\n\t\t\t\t\tbufferPointer = 0;\n\t\t\t\t\tslashesCount = 0;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase '\\r':\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tword += char;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._processLine( buffer, bufferPointer, word, slashesCount );\n\t\tthis._finalizeParsing();\n\t\tif ( this.logging.enabled ) console.timeEnd( 'OBJLoader2Parser.executeLegacy' );\n\n\t},\n\n\t_processLine: function ( buffer, bufferPointer, slashesCount, word, currentByte ) {\n\n\t\tthis.globalCounts.lineByte = this.globalCounts.currentByte;\n\t\tthis.globalCounts.currentByte = currentByte;\n\t\tif ( bufferPointer < 1 ) return;\n\n\t\tif ( word.length > 0 ) buffer[ bufferPointer ++ ] = word;\n\n\t\tconst reconstructString = function ( content, legacyMode, start, stop ) {\n\n\t\t\tlet line = '';\n\t\t\tif ( stop > start ) {\n\n\t\t\t\tlet i;\n\t\t\t\tif ( legacyMode ) {\n\n\t\t\t\t\tfor ( i = start; i < stop; i ++ ) line += content[ i ];\n\n\t\t\t\t} else {\n\n\n\t\t\t\t\tfor ( i = start; i < stop; i ++ ) line += String.fromCharCode( content[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tline = line.trim();\n\n\t\t\t}\n\n\t\t\treturn line;\n\n\t\t};\n\n\t\tlet bufferLength, length, i;\n\t\tconst lineDesignation = buffer[ 0 ];\n\t\tswitch ( lineDesignation ) {\n\n\t\t\tcase 'v':\n\t\t\t\tthis.vertices.push( parseFloat( buffer[ 1 ] ) );\n\t\t\t\tthis.vertices.push( parseFloat( buffer[ 2 ] ) );\n\t\t\t\tthis.vertices.push( parseFloat( buffer[ 3 ] ) );\n\t\t\t\tif ( bufferPointer > 4 ) {\n\n\t\t\t\t\tthis.colors.push( parseFloat( buffer[ 4 ] ) );\n\t\t\t\t\tthis.colors.push( parseFloat( buffer[ 5 ] ) );\n\t\t\t\t\tthis.colors.push( parseFloat( buffer[ 6 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'vt':\n\t\t\t\tthis.uvs.push( parseFloat( buffer[ 1 ] ) );\n\t\t\t\tthis.uvs.push( parseFloat( buffer[ 2 ] ) );\n\t\t\t\tbreak;\n\n\t\t\tcase 'vn':\n\t\t\t\tthis.normals.push( parseFloat( buffer[ 1 ] ) );\n\t\t\t\tthis.normals.push( parseFloat( buffer[ 2 ] ) );\n\t\t\t\tthis.normals.push( parseFloat( buffer[ 3 ] ) );\n\t\t\t\tbreak;\n\n\t\t\tcase 'f':\n\t\t\t\tbufferLength = bufferPointer - 1;\n\n\t\t\t\t// \"f vertex ...\"\n\t\t\t\tif ( slashesCount === 0 ) {\n\n\t\t\t\t\tthis._checkFaceType( 0 );\n\t\t\t\t\tfor ( i = 2, length = bufferLength; i < length; i ++ ) {\n\n\t\t\t\t\t\tthis._buildFace( buffer[ 1 ] );\n\t\t\t\t\t\tthis._buildFace( buffer[ i ] );\n\t\t\t\t\t\tthis._buildFace( buffer[ i + 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// \"f vertex/uv ...\"\n\n\t\t\t\t} else if ( bufferLength === slashesCount * 2 ) {\n\n\t\t\t\t\tthis._checkFaceType( 1 );\n\t\t\t\t\tfor ( i = 3, length = bufferLength - 2; i < length; i += 2 ) {\n\n\t\t\t\t\t\tthis._buildFace( buffer[ 1 ], buffer[ 2 ] );\n\t\t\t\t\t\tthis._buildFace( buffer[ i ], buffer[ i + 1 ] );\n\t\t\t\t\t\tthis._buildFace( buffer[ i + 2 ], buffer[ i + 3 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// \"f vertex/uv/normal ...\"\n\n\t\t\t\t} else if ( bufferLength * 2 === slashesCount * 3 ) {\n\n\t\t\t\t\tthis._checkFaceType( 2 );\n\t\t\t\t\tfor ( i = 4, length = bufferLength - 3; i < length; i += 3 ) {\n\n\t\t\t\t\t\tthis._buildFace( buffer[ 1 ], buffer[ 2 ], buffer[ 3 ] );\n\t\t\t\t\t\tthis._buildFace( buffer[ i ], buffer[ i + 1 ], buffer[ i + 2 ] );\n\t\t\t\t\t\tthis._buildFace( buffer[ i + 3 ], buffer[ i + 4 ], buffer[ i + 5 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// \"f vertex//normal ...\"\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._checkFaceType( 3 );\n\t\t\t\t\tfor ( i = 3, length = bufferLength - 2; i < length; i += 2 ) {\n\n\t\t\t\t\t\tthis._buildFace( buffer[ 1 ], undefined, buffer[ 2 ] );\n\t\t\t\t\t\tthis._buildFace( buffer[ i ], undefined, buffer[ i + 1 ] );\n\t\t\t\t\t\tthis._buildFace( buffer[ i + 2 ], undefined, buffer[ i + 3 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'l':\n\t\t\tcase 'p':\n\t\t\t\tbufferLength = bufferPointer - 1;\n\t\t\t\tif ( bufferLength === slashesCount * 2 ) {\n\n\t\t\t\t\tthis._checkFaceType( 4 );\n\t\t\t\t\tfor ( i = 1, length = bufferLength + 1; i < length; i += 2 ) this._buildFace( buffer[ i ], buffer[ i + 1 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._checkFaceType( ( lineDesignation === 'l' ) ? 5 : 6 );\n\t\t\t\t\tfor ( i = 1, length = bufferLength + 1; i < length; i ++ ) this._buildFace( buffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 's':\n\t\t\t\tthis._pushSmoothingGroup( buffer[ 1 ] );\n\t\t\t\tbreak;\n\n\t\t\tcase 'g':\n\t\t\t\t// 'g' leads to creation of mesh if valid data (faces declaration was done before), otherwise only groupName gets set\n\t\t\t\tthis._processCompletedMesh();\n\t\t\t\tthis.rawMesh.groupName = reconstructString( this.contentRef, this.legacyMode, this.globalCounts.lineByte + 2, this.globalCounts.currentByte );\n\t\t\t\tbreak;\n\n\t\t\tcase 'o':\n\t\t\t\t// 'o' is meta-information and usually does not result in creation of new meshes, but can be enforced with \"useOAsMesh\"\n\t\t\t\tif ( this.useOAsMesh ) this._processCompletedMesh();\n\t\t\t\tthis.rawMesh.objectName = reconstructString( this.contentRef, this.legacyMode, this.globalCounts.lineByte + 2, this.globalCounts.currentByte );\n\t\t\t\tbreak;\n\n\t\t\tcase 'mtllib':\n\t\t\t\tthis.rawMesh.mtllibName = reconstructString( this.contentRef, this.legacyMode, this.globalCounts.lineByte + 7, this.globalCounts.currentByte );\n\t\t\t\tbreak;\n\n\t\t\tcase 'usemtl':\n\t\t\t\tconst mtlName = reconstructString( this.contentRef, this.legacyMode, this.globalCounts.lineByte + 7, this.globalCounts.currentByte );\n\t\t\t\tif ( mtlName !== '' && this.rawMesh.activeMtlName !== mtlName ) {\n\n\t\t\t\t\tthis.rawMesh.activeMtlName = mtlName;\n\t\t\t\t\tthis.rawMesh.counts.mtlCount ++;\n\t\t\t\t\tthis._checkSubGroup();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tbreak;\n\n\t\t}\n\n\t},\n\n\t_pushSmoothingGroup: function ( smoothingGroup ) {\n\n\t\tlet smoothingGroupInt = parseInt( smoothingGroup );\n\t\tif ( isNaN( smoothingGroupInt ) ) {\n\n\t\t\tsmoothingGroupInt = smoothingGroup === 'off' ? 0 : 1;\n\n\t\t}\n\n\t\tconst smoothCheck = this.rawMesh.smoothingGroup.normalized;\n\t\tthis.rawMesh.smoothingGroup.normalized = this.rawMesh.smoothingGroup.splitMaterials ? smoothingGroupInt : ( smoothingGroupInt === 0 ) ? 0 : 1;\n\t\tthis.rawMesh.smoothingGroup.real = smoothingGroupInt;\n\n\t\tif ( smoothCheck !== smoothingGroupInt ) {\n\n\t\t\tthis.rawMesh.counts.smoothingGroupCount ++;\n\t\t\tthis._checkSubGroup();\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Expanded faceTypes include all four face types, both line types and the point type\n\t * faceType = 0: \"f vertex ...\"\n\t * faceType = 1: \"f vertex/uv ...\"\n\t * faceType = 2: \"f vertex/uv/normal ...\"\n\t * faceType = 3: \"f vertex//normal ...\"\n\t * faceType = 4: \"l vertex/uv ...\" or \"l vertex ...\"\n\t * faceType = 5: \"l vertex ...\"\n\t * faceType = 6: \"p vertex ...\"\n\t */\n\t_checkFaceType: function ( faceType ) {\n\n\t\tif ( this.rawMesh.faceType !== faceType ) {\n\n\t\t\tthis._processCompletedMesh();\n\t\t\tthis.rawMesh.faceType = faceType;\n\t\t\tthis._checkSubGroup();\n\n\t\t}\n\n\t},\n\n\t_checkSubGroup: function () {\n\n\t\tconst index = this.rawMesh.activeMtlName + '|' + this.rawMesh.smoothingGroup.normalized;\n\t\tthis.rawMesh.subGroupInUse = this.rawMesh.subGroups[ index ];\n\n\t\tif ( this.rawMesh.subGroupInUse === undefined || this.rawMesh.subGroupInUse === null ) {\n\n\t\t\tthis.rawMesh.subGroupInUse = {\n\t\t\t\tindex: index,\n\t\t\t\tobjectName: this.rawMesh.objectName,\n\t\t\t\tgroupName: this.rawMesh.groupName,\n\t\t\t\tmaterialName: this.rawMesh.activeMtlName,\n\t\t\t\tsmoothingGroup: this.rawMesh.smoothingGroup.normalized,\n\t\t\t\tvertices: [],\n\t\t\t\tindexMappingsCount: 0,\n\t\t\t\tindexMappings: [],\n\t\t\t\tindices: [],\n\t\t\t\tcolors: [],\n\t\t\t\tuvs: [],\n\t\t\t\tnormals: []\n\t\t\t};\n\t\t\tthis.rawMesh.subGroups[ index ] = this.rawMesh.subGroupInUse;\n\n\t\t}\n\n\t},\n\n\t_buildFace: function ( faceIndexV, faceIndexU, faceIndexN ) {\n\n\t\tconst subGroupInUse = this.rawMesh.subGroupInUse;\n\t\tconst scope = this;\n\t\tconst updateSubGroupInUse = function () {\n\n\t\t\tconst faceIndexVi = parseInt( faceIndexV );\n\t\t\tlet indexPointerV = 3 * ( faceIndexVi > 0 ? faceIndexVi - 1 : faceIndexVi + scope.vertices.length / 3 );\n\t\t\tlet indexPointerC = scope.colors.length > 0 ? indexPointerV : null;\n\n\t\t\tconst vertices = subGroupInUse.vertices;\n\t\t\tvertices.push( scope.vertices[ indexPointerV ++ ] );\n\t\t\tvertices.push( scope.vertices[ indexPointerV ++ ] );\n\t\t\tvertices.push( scope.vertices[ indexPointerV ] );\n\n\t\t\tif ( indexPointerC !== null ) {\n\n\t\t\t\tconst colors = subGroupInUse.colors;\n\t\t\t\tcolors.push( scope.colors[ indexPointerC ++ ] );\n\t\t\t\tcolors.push( scope.colors[ indexPointerC ++ ] );\n\t\t\t\tcolors.push( scope.colors[ indexPointerC ] );\n\n\t\t\t}\n\n\t\t\tif ( faceIndexU ) {\n\n\t\t\t\tconst faceIndexUi = parseInt( faceIndexU );\n\t\t\t\tlet indexPointerU = 2 * ( faceIndexUi > 0 ? faceIndexUi - 1 : faceIndexUi + scope.uvs.length / 2 );\n\t\t\t\tconst uvs = subGroupInUse.uvs;\n\t\t\t\tuvs.push( scope.uvs[ indexPointerU ++ ] );\n\t\t\t\tuvs.push( scope.uvs[ indexPointerU ] );\n\n\t\t\t}\n\n\t\t\tif ( faceIndexN && ! scope.disregardNormals ) {\n\n\t\t\t\tconst faceIndexNi = parseInt( faceIndexN );\n\t\t\t\tlet indexPointerN = 3 * ( faceIndexNi > 0 ? faceIndexNi - 1 : faceIndexNi + scope.normals.length / 3 );\n\t\t\t\tconst normals = subGroupInUse.normals;\n\t\t\t\tnormals.push( scope.normals[ indexPointerN ++ ] );\n\t\t\t\tnormals.push( scope.normals[ indexPointerN ++ ] );\n\t\t\t\tnormals.push( scope.normals[ indexPointerN ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tif ( this.useIndices ) {\n\n\t\t\tif ( this.disregardNormals ) faceIndexN = undefined;\n\t\t\tconst mappingName = faceIndexV + ( faceIndexU ? '_' + faceIndexU : '_n' ) + ( faceIndexN ? '_' + faceIndexN : '_n' );\n\t\t\tlet indicesPointer = subGroupInUse.indexMappings[ mappingName ];\n\t\t\tif ( indicesPointer === undefined || indicesPointer === null ) {\n\n\t\t\t\tindicesPointer = this.rawMesh.subGroupInUse.vertices.length / 3;\n\t\t\t\tupdateSubGroupInUse();\n\t\t\t\tsubGroupInUse.indexMappings[ mappingName ] = indicesPointer;\n\t\t\t\tsubGroupInUse.indexMappingsCount ++;\n\n\t\t\t} else {\n\n\t\t\t\tthis.rawMesh.counts.doubleIndicesCount ++;\n\n\t\t\t}\n\n\t\t\tsubGroupInUse.indices.push( indicesPointer );\n\n\t\t} else {\n\n\t\t\tupdateSubGroupInUse();\n\n\t\t}\n\n\t\tthis.rawMesh.counts.faceCount ++;\n\n\t},\n\n\t_createRawMeshReport: function ( inputObjectCount ) {\n\n\t\treturn 'Input Object number: ' + inputObjectCount +\n\t\t\t'\\n\\tObject name: ' + this.rawMesh.objectName +\n\t\t\t'\\n\\tGroup name: ' + this.rawMesh.groupName +\n\t\t\t'\\n\\tMtllib name: ' + this.rawMesh.mtllibName +\n\t\t\t'\\n\\tVertex count: ' + this.vertices.length / 3 +\n\t\t\t'\\n\\tNormal count: ' + this.normals.length / 3 +\n\t\t\t'\\n\\tUV count: ' + this.uvs.length / 2 +\n\t\t\t'\\n\\tSmoothingGroup count: ' + this.rawMesh.counts.smoothingGroupCount +\n\t\t\t'\\n\\tMaterial count: ' + this.rawMesh.counts.mtlCount +\n\t\t\t'\\n\\tReal MeshOutputGroup count: ' + this.rawMesh.subGroups.length;\n\n\t},\n\n\t/**\n\t * Clear any empty subGroup and calculate absolute vertex, normal and uv counts\n\t */\n\t_finalizeRawMesh: function () {\n\n\t\tconst meshOutputGroupTemp = [];\n\t\tlet meshOutputGroup;\n\t\tlet absoluteVertexCount = 0;\n\t\tlet absoluteIndexMappingsCount = 0;\n\t\tlet absoluteIndexCount = 0;\n\t\tlet absoluteColorCount = 0;\n\t\tlet absoluteNormalCount = 0;\n\t\tlet absoluteUvCount = 0;\n\t\tlet indices;\n\t\tfor ( const name in this.rawMesh.subGroups ) {\n\n\t\t\tmeshOutputGroup = this.rawMesh.subGroups[ name ];\n\t\t\tif ( meshOutputGroup.vertices.length > 0 ) {\n\n\t\t\t\tindices = meshOutputGroup.indices;\n\t\t\t\tif ( indices.length > 0 && absoluteIndexMappingsCount > 0 ) {\n\n\t\t\t\t\tfor ( let i = 0; i < indices.length; i ++ ) {\n\n\t\t\t\t\t\tindices[ i ] = indices[ i ] + absoluteIndexMappingsCount;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmeshOutputGroupTemp.push( meshOutputGroup );\n\t\t\t\tabsoluteVertexCount += meshOutputGroup.vertices.length;\n\t\t\t\tabsoluteIndexMappingsCount += meshOutputGroup.indexMappingsCount;\n\t\t\t\tabsoluteIndexCount += meshOutputGroup.indices.length;\n\t\t\t\tabsoluteColorCount += meshOutputGroup.colors.length;\n\t\t\t\tabsoluteUvCount += meshOutputGroup.uvs.length;\n\t\t\t\tabsoluteNormalCount += meshOutputGroup.normals.length;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// do not continue if no result\n\t\tlet result = null;\n\t\tif ( meshOutputGroupTemp.length > 0 ) {\n\n\t\t\tresult = {\n\t\t\t\tname: this.rawMesh.groupName !== '' ? this.rawMesh.groupName : this.rawMesh.objectName,\n\t\t\t\tsubGroups: meshOutputGroupTemp,\n\t\t\t\tabsoluteVertexCount: absoluteVertexCount,\n\t\t\t\tabsoluteIndexCount: absoluteIndexCount,\n\t\t\t\tabsoluteColorCount: absoluteColorCount,\n\t\t\t\tabsoluteNormalCount: absoluteNormalCount,\n\t\t\t\tabsoluteUvCount: absoluteUvCount,\n\t\t\t\tfaceCount: this.rawMesh.counts.faceCount,\n\t\t\t\tdoubleIndicesCount: this.rawMesh.counts.doubleIndicesCount\n\t\t\t};\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t_processCompletedMesh: function () {\n\n\t\tconst result = this._finalizeRawMesh();\n\t\tconst haveMesh = result !== null;\n\t\tif ( haveMesh ) {\n\n\t\t\tif ( this.colors.length > 0 && this.colors.length !== this.vertices.length ) {\n\n\t\t\t\tthis.callbacks.onError( 'Vertex Colors were detected, but vertex count and color count do not match!' );\n\n\t\t\t}\n\n\t\t\tif ( this.logging.enabled && this.logging.debug ) console.debug( this._createRawMeshReport( this.inputObjectCount ) );\n\t\t\tthis.inputObjectCount ++;\n\n\t\t\tthis._buildMesh( result );\n\t\t\tconst progressBytesPercent = this.globalCounts.currentByte / this.globalCounts.totalBytes;\n\t\t\tthis._onProgress( 'Completed [o: ' + this.rawMesh.objectName + ' g:' + this.rawMesh.groupName + '' +\n\t\t\t\t'] Total progress: ' + ( progressBytesPercent * 100 ).toFixed( 2 ) + '%' );\n\t\t\tthis._resetRawMesh();\n\n\t\t}\n\n\t\treturn haveMesh;\n\n\t},\n\n\t/**\n\t * SubGroups are transformed to too intermediate format that is forwarded to the MeshReceiver.\n\t * It is ensured that SubGroups only contain objects with vertices (no need to check).\n\t *\n\t * @param result\n\t */\n\t_buildMesh: function ( result ) {\n\n\t\tconst meshOutputGroups = result.subGroups;\n\n\t\tconst vertexFA = new Float32Array( result.absoluteVertexCount );\n\t\tthis.globalCounts.vertices += result.absoluteVertexCount / 3;\n\t\tthis.globalCounts.faces += result.faceCount;\n\t\tthis.globalCounts.doubleIndicesCount += result.doubleIndicesCount;\n\t\tconst indexUA = ( result.absoluteIndexCount > 0 ) ? new Uint32Array( result.absoluteIndexCount ) : null;\n\t\tconst colorFA = ( result.absoluteColorCount > 0 ) ? new Float32Array( result.absoluteColorCount ) : null;\n\t\tconst normalFA = ( result.absoluteNormalCount > 0 ) ? new Float32Array( result.absoluteNormalCount ) : null;\n\t\tconst uvFA = ( result.absoluteUvCount > 0 ) ? new Float32Array( result.absoluteUvCount ) : null;\n\t\tconst haveVertexColors = colorFA !== null;\n\n\t\tlet meshOutputGroup;\n\t\tconst materialNames = [];\n\n\t\tconst createMultiMaterial = ( meshOutputGroups.length > 1 );\n\t\tlet materialIndex = 0;\n\t\tconst materialIndexMapping = [];\n\t\tlet selectedMaterialIndex;\n\t\tlet materialGroup;\n\t\tconst materialGroups = [];\n\n\t\tlet vertexFAOffset = 0;\n\t\tlet indexUAOffset = 0;\n\t\tlet colorFAOffset = 0;\n\t\tlet normalFAOffset = 0;\n\t\tlet uvFAOffset = 0;\n\t\tlet materialGroupOffset = 0;\n\t\tlet materialGroupLength = 0;\n\n\t\tlet materialOrg, material, materialName, materialNameOrg;\n\t\t// only one specific face type\n\t\tfor ( const oodIndex in meshOutputGroups ) {\n\n\t\t\tif ( ! meshOutputGroups.hasOwnProperty( oodIndex ) ) continue;\n\t\t\tmeshOutputGroup = meshOutputGroups[ oodIndex ];\n\n\t\t\tmaterialNameOrg = meshOutputGroup.materialName;\n\t\t\tif ( this.rawMesh.faceType < 4 ) {\n\n\t\t\t\tmaterialName = materialNameOrg + ( haveVertexColors ? '_vertexColor' : '' ) + ( meshOutputGroup.smoothingGroup === 0 ? '_flat' : '' );\n\n\n\t\t\t} else {\n\n\t\t\t\tmaterialName = this.rawMesh.faceType === 6 ? 'defaultPointMaterial' : 'defaultLineMaterial';\n\n\t\t\t}\n\n\t\t\tmaterialOrg = this.materials[ materialNameOrg ];\n\t\t\tmaterial = this.materials[ materialName ];\n\n\t\t\t// both original and derived names do not lead to an existing material => need to use a default material\n\t\t\tif ( ( materialOrg === undefined || materialOrg === null ) && ( material === undefined || material === null ) ) {\n\n\t\t\t\tmaterialName = haveVertexColors ? 'defaultVertexColorMaterial' : 'defaultMaterial';\n\t\t\t\tmaterial = this.materials[ materialName ];\n\t\t\t\tif ( this.logging.enabled ) {\n\n\t\t\t\t\tconsole.info( 'object_group \"' + meshOutputGroup.objectName + '_' +\n\t\t\t\t\t\tmeshOutputGroup.groupName + '\" was defined with unresolvable material \"' +\n\t\t\t\t\t\tmaterialNameOrg + '\"! Assigning \"' + materialName + '\".' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material === undefined || material === null ) {\n\n\t\t\t\tconst materialCloneInstructions = {\n\t\t\t\t\tmaterialNameOrg: materialNameOrg,\n\t\t\t\t\tmaterialName: materialName,\n\t\t\t\t\tmaterialProperties: {\n\t\t\t\t\t\tvertexColors: haveVertexColors ? 2 : 0,\n\t\t\t\t\t\tflatShading: meshOutputGroup.smoothingGroup === 0\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tconst payload = {\n\t\t\t\t\tcmd: 'assetAvailable',\n\t\t\t\t\ttype: 'material',\n\t\t\t\t\tmaterials: {\n\t\t\t\t\t\tmaterialCloneInstructions: materialCloneInstructions\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis.callbacks.onAssetAvailable( payload );\n\n\t\t\t\t// only set materials if they don't exist, yet\n\t\t\t\tconst matCheck = this.materials[ materialName ];\n\t\t\t\tif ( matCheck === undefined || matCheck === null ) {\n\n\t\t\t\t\tthis.materials[ materialName ] = materialCloneInstructions;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( createMultiMaterial ) {\n\n\t\t\t\t// re-use material if already used before. Reduces materials array size and eliminates duplicates\n\t\t\t\tselectedMaterialIndex = materialIndexMapping[ materialName ];\n\t\t\t\tif ( ! selectedMaterialIndex ) {\n\n\t\t\t\t\tselectedMaterialIndex = materialIndex;\n\t\t\t\t\tmaterialIndexMapping[ materialName ] = materialIndex;\n\t\t\t\t\tmaterialNames.push( materialName );\n\t\t\t\t\tmaterialIndex ++;\n\n\t\t\t\t}\n\n\t\t\t\tmaterialGroupLength = this.useIndices ? meshOutputGroup.indices.length : meshOutputGroup.vertices.length / 3;\n\t\t\t\tmaterialGroup = {\n\t\t\t\t\tstart: materialGroupOffset,\n\t\t\t\t\tcount: materialGroupLength,\n\t\t\t\t\tindex: selectedMaterialIndex\n\t\t\t\t};\n\t\t\t\tmaterialGroups.push( materialGroup );\n\t\t\t\tmaterialGroupOffset += materialGroupLength;\n\n\t\t\t} else {\n\n\t\t\t\tmaterialNames.push( materialName );\n\n\t\t\t}\n\n\t\t\tvertexFA.set( meshOutputGroup.vertices, vertexFAOffset );\n\t\t\tvertexFAOffset += meshOutputGroup.vertices.length;\n\n\t\t\tif ( indexUA ) {\n\n\t\t\t\tindexUA.set( meshOutputGroup.indices, indexUAOffset );\n\t\t\t\tindexUAOffset += meshOutputGroup.indices.length;\n\n\t\t\t}\n\n\t\t\tif ( colorFA ) {\n\n\t\t\t\tcolorFA.set( meshOutputGroup.colors, colorFAOffset );\n\t\t\t\tcolorFAOffset += meshOutputGroup.colors.length;\n\n\t\t\t}\n\n\t\t\tif ( normalFA ) {\n\n\t\t\t\tnormalFA.set( meshOutputGroup.normals, normalFAOffset );\n\t\t\t\tnormalFAOffset += meshOutputGroup.normals.length;\n\n\t\t\t}\n\n\t\t\tif ( uvFA ) {\n\n\t\t\t\tuvFA.set( meshOutputGroup.uvs, uvFAOffset );\n\t\t\t\tuvFAOffset += meshOutputGroup.uvs.length;\n\n\t\t\t}\n\n\t\t\tif ( this.logging.enabled && this.logging.debug ) {\n\n\t\t\t\tlet materialIndexLine = '';\n\t\t\t\tif ( selectedMaterialIndex ) {\n\n\t\t\t\t\tmaterialIndexLine = '\\n\\t\\tmaterialIndex: ' + selectedMaterialIndex;\n\n\t\t\t\t}\n\n\t\t\t\tconst createdReport = '\\tOutput Object no.: ' + this.outputObjectCount +\n\t\t\t\t\t'\\n\\t\\tgroupName: ' + meshOutputGroup.groupName +\n\t\t\t\t\t'\\n\\t\\tIndex: ' + meshOutputGroup.index +\n\t\t\t\t\t'\\n\\t\\tfaceType: ' + this.rawMesh.faceType +\n\t\t\t\t\t'\\n\\t\\tmaterialName: ' + meshOutputGroup.materialName +\n\t\t\t\t\t'\\n\\t\\tsmoothingGroup: ' + meshOutputGroup.smoothingGroup +\n\t\t\t\t\tmaterialIndexLine +\n\t\t\t\t\t'\\n\\t\\tobjectName: ' + meshOutputGroup.objectName +\n\t\t\t\t\t'\\n\\t\\t#vertices: ' + meshOutputGroup.vertices.length / 3 +\n\t\t\t\t\t'\\n\\t\\t#indices: ' + meshOutputGroup.indices.length +\n\t\t\t\t\t'\\n\\t\\t#colors: ' + meshOutputGroup.colors.length / 3 +\n\t\t\t\t\t'\\n\\t\\t#uvs: ' + meshOutputGroup.uvs.length / 2 +\n\t\t\t\t\t'\\n\\t\\t#normals: ' + meshOutputGroup.normals.length / 3;\n\t\t\t\tconsole.debug( createdReport );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.outputObjectCount ++;\n\t\tthis.callbacks.onAssetAvailable(\n\t\t\t{\n\t\t\t\tcmd: 'assetAvailable',\n\t\t\t\ttype: 'mesh',\n\t\t\t\tprogress: {\n\t\t\t\t\tnumericalValue: this.globalCounts.currentByte / this.globalCounts.totalBytes\n\t\t\t\t},\n\t\t\t\tparams: {\n\t\t\t\t\tmeshName: result.name\n\t\t\t\t},\n\t\t\t\tmaterials: {\n\t\t\t\t\tmultiMaterial: createMultiMaterial,\n\t\t\t\t\tmaterialNames: materialNames,\n\t\t\t\t\tmaterialGroups: materialGroups\n\t\t\t\t},\n\t\t\t\tbuffers: {\n\t\t\t\t\tvertices: vertexFA,\n\t\t\t\t\tindices: indexUA,\n\t\t\t\t\tcolors: colorFA,\n\t\t\t\t\tnormals: normalFA,\n\t\t\t\t\tuvs: uvFA\n\t\t\t\t},\n\t\t\t\t// 0: mesh, 1: line, 2: point\n\t\t\t\tgeometryType: this.rawMesh.faceType < 4 ? 0 : ( this.rawMesh.faceType === 6 ) ? 2 : 1\n\t\t\t},\n\t\t\t[ vertexFA.buffer ],\n\t\t\tindexUA !== null ? [ indexUA.buffer ] : null,\n\t\t\tcolorFA !== null ? [ colorFA.buffer ] : null,\n\t\t\tnormalFA !== null ? [ normalFA.buffer ] : null,\n\t\t\tuvFA !== null ? [ uvFA.buffer ] : null\n\t\t);\n\n\t},\n\n\t_finalizeParsing: function () {\n\n\t\tif ( this.logging.enabled ) console.info( 'Global output object count: ' + this.outputObjectCount );\n\t\tif ( this._processCompletedMesh() && this.logging.enabled ) {\n\n\t\t\tconst parserFinalReport = 'Overall counts: ' +\n\t\t\t\t'\\n\\tVertices: ' + this.globalCounts.vertices +\n\t\t\t\t'\\n\\tFaces: ' + this.globalCounts.faces +\n\t\t\t\t'\\n\\tMultiple definitions: ' + this.globalCounts.doubleIndicesCount;\n\t\t\tconsole.info( parserFinalReport );\n\n\t\t}\n\n\t}\n};\n\nexport { OBJLoader2Parser };\n"
  },
  {
    "path": "libs/three.js/loaders/obj2/bridge/MtlObjBridge.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\nimport { MTLLoader } from '../../../../jsm/loaders/MTLLoader.js';\n\n\nconst MtlObjBridge = {\n\n\t/**\n\t *\n\t * @param processResult\n\t * @param assetLoader\n\t */\n\tlink: function ( processResult, assetLoader ) {\n\n\t\tif ( typeof assetLoader.addMaterials === 'function' ) {\n\n\t\t\tassetLoader.addMaterials( this.addMaterialsFromMtlLoader( processResult ), true );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Returns the array instance of {@link MTLLoader.MaterialCreator}.\n\t *\n\t * @param Instance of {@link MTLLoader.MaterialCreator}\n\t */\n\taddMaterialsFromMtlLoader: function ( materialCreator ) {\n\n\t\tlet newMaterials = {};\n\n\t\tif ( materialCreator instanceof MTLLoader.MaterialCreator ) {\n\n\t\t\tmaterialCreator.preload();\n\t\t\tnewMaterials = materialCreator.materials;\n\n\t\t}\n\n\t\treturn newMaterials;\n\n\t}\n};\n\nexport { MtlObjBridge };\n"
  },
  {
    "path": "libs/three.js/loaders/obj2/shared/MaterialHandler.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\nimport {\n\tLineBasicMaterial,\n\tMaterialLoader,\n\tMeshStandardMaterial,\n\tPointsMaterial\n} from '../../../../../build/three.module.js';\n\n\nconst MaterialHandler = function () {\n\n\tthis.logging = {\n\t\tenabled: false,\n\t\tdebug: false\n\t};\n\n\tthis.callbacks = {\n\t\tonLoadMaterials: null\n\t};\n\tthis.materials = {};\n\n};\n\nMaterialHandler.prototype = {\n\n\tconstructor: MaterialHandler,\n\n\t/**\n\t * Enable or disable logging in general (except warn and error), plus enable or disable debug logging.\n\t *\n\t * @param {boolean} enabled True or false.\n\t * @param {boolean} debug True or false.\n\t */\n\tsetLogging:\tfunction ( enabled, debug ) {\n\n\t\tthis.logging.enabled = enabled === true;\n\t\tthis.logging.debug = debug === true;\n\n\t},\n\n\t_setCallbacks: function ( onLoadMaterials ) {\n\n\t\tif ( onLoadMaterials !== undefined && onLoadMaterials !== null && onLoadMaterials instanceof Function ) {\n\n\t\t\tthis.callbacks.onLoadMaterials = onLoadMaterials;\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Creates default materials and adds them to the materials object.\n\t *\n\t * @param overrideExisting boolean Override existing material\n\t */\n\tcreateDefaultMaterials: function ( overrideExisting ) {\n\n\t\tconst defaultMaterial = new MeshStandardMaterial( { color: 0xDCF1FF } );\n\t\tdefaultMaterial.name = 'defaultMaterial';\n\n\t\tconst defaultVertexColorMaterial = new MeshStandardMaterial( { color: 0xDCF1FF } );\n\t\tdefaultVertexColorMaterial.name = 'defaultVertexColorMaterial';\n\t\tdefaultVertexColorMaterial.vertexColors = true;\n\n\t\tconst defaultLineMaterial = new LineBasicMaterial();\n\t\tdefaultLineMaterial.name = 'defaultLineMaterial';\n\n\t\tconst defaultPointMaterial = new PointsMaterial( { size: 0.1 } );\n\t\tdefaultPointMaterial.name = 'defaultPointMaterial';\n\n\t\tconst runtimeMaterials = {};\n\t\truntimeMaterials[ defaultMaterial.name ] = defaultMaterial;\n\t\truntimeMaterials[ defaultVertexColorMaterial.name ] = defaultVertexColorMaterial;\n\t\truntimeMaterials[ defaultLineMaterial.name ] = defaultLineMaterial;\n\t\truntimeMaterials[ defaultPointMaterial.name ] = defaultPointMaterial;\n\n\t\tthis.addMaterials( runtimeMaterials, overrideExisting );\n\n\t},\n\n\t/**\n\t * Updates the materials with contained material objects (sync) or from alteration instructions (async).\n\t *\n\t * @param {Object} materialPayload Material update instructions\n\t * @returns {Object} Map of {@link Material}\n\t */\n\taddPayloadMaterials: function ( materialPayload ) {\n\n\t\tlet material, materialName;\n\t\tconst materialCloneInstructions = materialPayload.materials.materialCloneInstructions;\n\t\tlet newMaterials = {};\n\n\t\tif ( materialCloneInstructions !== undefined && materialCloneInstructions !== null ) {\n\n\t\t\tlet materialNameOrg = materialCloneInstructions.materialNameOrg;\n\t\t\tmaterialNameOrg = ( materialNameOrg !== undefined && materialNameOrg !== null ) ? materialNameOrg : '';\n\t\t\tconst materialOrg = this.materials[ materialNameOrg ];\n\t\t\tif ( materialOrg ) {\n\n\t\t\t\tmaterial = materialOrg.clone();\n\n\t\t\t\tmaterialName = materialCloneInstructions.materialName;\n\t\t\t\tmaterial.name = materialName;\n\n\t\t\t\tObject.assign( material, materialCloneInstructions.materialProperties );\n\n\t\t\t\tthis.materials[ materialName ] = material;\n\t\t\t\tnewMaterials[ materialName ] = material;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.logging.enabled ) {\n\n\t\t\t\t\tconsole.info( 'Requested material \"' + materialNameOrg + '\" is not available!' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet materials = materialPayload.materials.serializedMaterials;\n\n\t\tif ( materials !== undefined && materials !== null && Object.keys( materials ).length > 0 ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tlet materialJson;\n\n\t\t\tfor ( materialName in materials ) {\n\n\t\t\t\tmaterialJson = materials[ materialName ];\n\n\t\t\t\tif ( materialJson !== undefined && materialJson !== null ) {\n\n\t\t\t\t\tmaterial = loader.parse( materialJson );\n\n\t\t\t\t\tif ( this.logging.enabled ) {\n\n\t\t\t\t\t\tconsole.info( 'De-serialized material with name \"' + materialName + '\" will be added.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.materials[ materialName ] = material;\n\t\t\t\t\tnewMaterials[ materialName ] = material;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tmaterials = materialPayload.materials.runtimeMaterials;\n\t\tnewMaterials = this.addMaterials( materials, true, newMaterials );\n\n\t\treturn newMaterials;\n\n\t},\n\n\t/**\n\t * Set materials loaded by any supplier of an Array of {@link Material}.\n\t *\n\t * @param materials Object with named {@link Material}\n\t * @param overrideExisting boolean Override existing material\n\t * @param newMaterials [Object] with named {@link Material}\n\t */\n\taddMaterials: function ( materials, overrideExisting, newMaterials ) {\n\n\t\tif ( newMaterials === undefined || newMaterials === null ) {\n\n\t\t\tnewMaterials = {};\n\n\t\t}\n\n\t\tif ( materials !== undefined && materials !== null && Object.keys( materials ).length > 0 ) {\n\n\t\t\tlet material;\n\t\t\tlet existingMaterial;\n\t\t\tlet add;\n\n\t\t\tfor ( const materialName in materials ) {\n\n\t\t\t\tmaterial = materials[ materialName ];\n\t\t\t\tadd = overrideExisting === true;\n\n\t\t\t\tif ( ! add ) {\n\n\t\t\t\t\texistingMaterial = this.materials[ materialName ];\n\t\t\t\t\tadd = ( existingMaterial === null || existingMaterial === undefined );\n\n\t\t\t\t}\n\n\t\t\t\tif ( add ) {\n\n\t\t\t\t\tthis.materials[ materialName ] = material;\n\t\t\t\t\tnewMaterials[ materialName ] = material;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.logging.enabled && this.logging.debug ) {\n\n\t\t\t\t\tconsole.info( 'Material with name \"' + materialName + '\" was added.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.callbacks.onLoadMaterials ) {\n\n\t\t\tthis.callbacks.onLoadMaterials( newMaterials );\n\n\t\t}\n\n\t\treturn newMaterials;\n\n\t},\n\n\t/**\n\t * Returns the mapping object of material name and corresponding material.\n\t *\n\t * @returns {Object} Map of {@link Material}\n\t */\n\tgetMaterials: function () {\n\n\t\treturn this.materials;\n\n\t},\n\n\t/**\n\t *\n\t * @param {String} materialName\n\t * @returns {Material}\n\t */\n\tgetMaterial: function ( materialName ) {\n\n\t\treturn this.materials[ materialName ];\n\n\t},\n\n\t/**\n\t * Returns the mapping object of material name and corresponding jsonified material.\n\t *\n\t * @returns {Object} Map of Materials in JSON representation\n\t */\n\tgetMaterialsJSON: function () {\n\n\t\tconst materialsJSON = {};\n\t\tlet material;\n\n\t\tfor ( const materialName in this.materials ) {\n\n\t\t\tmaterial = this.materials[ materialName ];\n\t\t\tmaterialsJSON[ materialName ] = material.toJSON();\n\n\t\t}\n\n\t\treturn materialsJSON;\n\n\t},\n\n\t/**\n\t * Removes all materials\n\t */\n\tclearMaterials: function () {\n\n\t\tthis.materials = {};\n\n\t}\n\n};\n\nexport { MaterialHandler };\n"
  },
  {
    "path": "libs/three.js/loaders/obj2/shared/MeshReceiver.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\nimport {\n\tBufferAttribute,\n\tBufferGeometry,\n\tLineSegments,\n\tMesh,\n\tPoints\n} from '../../../../../build/three.module.js';\n\n\n/**\n *\n * @param {MaterialHandler} materialHandler\n * @constructor\n */\nconst MeshReceiver = function ( materialHandler ) {\n\n\tthis.logging = {\n\t\tenabled: false,\n\t\tdebug: false\n\t};\n\n\tthis.callbacks = {\n\t\tonProgress: null,\n\t\tonMeshAlter: null\n\t};\n\tthis.materialHandler = materialHandler;\n\n};\n\nMeshReceiver.prototype = {\n\n\tconstructor: MeshReceiver,\n\n\t/**\n\t * Enable or disable logging in general (except warn and error), plus enable or disable debug logging.\n\t *\n\t * @param {boolean} enabled True or false.\n\t * @param {boolean} debug True or false.\n\t */\n\tsetLogging:\tfunction ( enabled, debug ) {\n\n\t\tthis.logging.enabled = enabled === true;\n\t\tthis.logging.debug = debug === true;\n\n\t},\n\n\t/**\n\t *\n\t * @param {Function} onProgress\n\t * @param {Function} onMeshAlter\n\t * @private\n\t */\n\t_setCallbacks: function ( onProgress, onMeshAlter ) {\n\n\t\tif ( onProgress !== null && onProgress !== undefined && onProgress instanceof Function ) {\n\n\t\t\tthis.callbacks.onProgress = onProgress;\n\n\t\t}\n\n\t\tif ( onMeshAlter !== null && onMeshAlter !== undefined && onMeshAlter instanceof Function ) {\n\n\t\t\tthis.callbacks.onMeshAlter = onMeshAlter;\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Builds one or multiple meshes from the data described in the payload (buffers, params, material info).\n\t *\n\t * @param {Object} meshPayload Raw mesh description (buffers, params, materials) used to build one to many meshes.\n\t * @returns {Mesh[]} mesh Array of {@link Mesh}\n\t */\n\tbuildMeshes: function ( meshPayload ) {\n\n\t\tconst meshName = meshPayload.params.meshName;\n\t\tconst buffers = meshPayload.buffers;\n\n\t\tconst bufferGeometry = new BufferGeometry();\n\t\tif ( buffers.vertices !== undefined && buffers.vertices !== null ) {\n\n\t\t\tbufferGeometry.setAttribute( 'position', new BufferAttribute( new Float32Array( buffers.vertices ), 3 ) );\n\n\t\t}\n\n\t\tif ( buffers.indices !== undefined && buffers.indices !== null ) {\n\n\t\t\tbufferGeometry.setIndex( new BufferAttribute( new Uint32Array( buffers.indices ), 1 ) );\n\n\t\t}\n\n\t\tif ( buffers.colors !== undefined && buffers.colors !== null ) {\n\n\t\t\tbufferGeometry.setAttribute( 'color', new BufferAttribute( new Float32Array( buffers.colors ), 3 ) );\n\n\t\t}\n\n\t\tif ( buffers.normals !== undefined && buffers.normals !== null ) {\n\n\t\t\tbufferGeometry.setAttribute( 'normal', new BufferAttribute( new Float32Array( buffers.normals ), 3 ) );\n\n\t\t} else {\n\n\t\t\tbufferGeometry.computeVertexNormals();\n\n\t\t}\n\n\t\tif ( buffers.uvs !== undefined && buffers.uvs !== null ) {\n\n\t\t\tbufferGeometry.setAttribute( 'uv', new BufferAttribute( new Float32Array( buffers.uvs ), 2 ) );\n\n\t\t}\n\n\t\tif ( buffers.skinIndex !== undefined && buffers.skinIndex !== null ) {\n\n\t\t\tbufferGeometry.setAttribute( 'skinIndex', new BufferAttribute( new Uint16Array( buffers.skinIndex ), 4 ) );\n\n\t\t}\n\n\t\tif ( buffers.skinWeight !== undefined && buffers.skinWeight !== null ) {\n\n\t\t\tbufferGeometry.setAttribute( 'skinWeight', new BufferAttribute( new Float32Array( buffers.skinWeight ), 4 ) );\n\n\t\t}\n\n\t\tlet material, materialName, key;\n\t\tconst materialNames = meshPayload.materials.materialNames;\n\t\tconst createMultiMaterial = meshPayload.materials.multiMaterial;\n\t\tconst multiMaterials = [];\n\n\t\tfor ( key in materialNames ) {\n\n\t\t\tmaterialName = materialNames[ key ];\n\t\t\tmaterial = this.materialHandler.getMaterial( materialName );\n\t\t\tif ( createMultiMaterial ) multiMaterials.push( material );\n\n\t\t}\n\n\t\tif ( createMultiMaterial ) {\n\n\t\t\tmaterial = multiMaterials;\n\t\t\tconst materialGroups = meshPayload.materials.materialGroups;\n\t\t\tlet materialGroup;\n\t\t\tfor ( key in materialGroups ) {\n\n\t\t\t\tmaterialGroup = materialGroups[ key ];\n\t\t\t\tbufferGeometry.addGroup( materialGroup.start, materialGroup.count, materialGroup.index );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst meshes = [];\n\t\tlet mesh;\n\t\tlet callbackOnMeshAlterResult;\n\t\tlet useOrgMesh = true;\n\t\tconst geometryType = meshPayload.geometryType === null ? 0 : meshPayload.geometryType;\n\n\t\tif ( this.callbacks.onMeshAlter ) {\n\n\t\t\tcallbackOnMeshAlterResult = this.callbacks.onMeshAlter(\n\t\t\t\t{\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tmeshName: meshName,\n\t\t\t\t\t\tbufferGeometry: bufferGeometry,\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tgeometryType: geometryType\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t}\n\n\t\t// here LoadedMeshUserOverride is required to be provided by the callback used to alter the results\n\t\tif ( callbackOnMeshAlterResult ) {\n\n\t\t\tif ( callbackOnMeshAlterResult.isDisregardMesh() ) {\n\n\t\t\t\tuseOrgMesh = false;\n\n\t\t\t} else if ( callbackOnMeshAlterResult.providesAlteredMeshes() ) {\n\n\t\t\t\tfor ( const i in callbackOnMeshAlterResult.meshes ) {\n\n\t\t\t\t\tmeshes.push( callbackOnMeshAlterResult.meshes[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tuseOrgMesh = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( useOrgMesh ) {\n\n\t\t\tif ( meshPayload.computeBoundingSphere ) bufferGeometry.computeBoundingSphere();\n\t\t\tif ( geometryType === 0 ) {\n\n\t\t\t\tmesh = new Mesh( bufferGeometry, material );\n\n\t\t\t} else if ( geometryType === 1 ) {\n\n\t\t\t\tmesh = new LineSegments( bufferGeometry, material );\n\n\t\t\t} else {\n\n\t\t\t\tmesh = new Points( bufferGeometry, material );\n\n\t\t\t}\n\n\t\t\tmesh.name = meshName;\n\t\t\tmeshes.push( mesh );\n\n\t\t}\n\n\t\tlet progressMessage = meshPayload.params.meshName;\n\t\tif ( meshes.length > 0 ) {\n\n\t\t\tconst meshNames = [];\n\t\t\tfor ( const i in meshes ) {\n\n\t\t\t\tmesh = meshes[ i ];\n\t\t\t\tmeshNames[ i ] = mesh.name;\n\n\t\t\t}\n\n\t\t\tprogressMessage += ': Adding mesh(es) (' + meshNames.length + ': ' + meshNames + ') from input mesh: ' + meshName;\n\t\t\tprogressMessage += ' (' + ( meshPayload.progress.numericalValue * 100 ).toFixed( 2 ) + '%)';\n\n\t\t} else {\n\n\t\t\tprogressMessage += ': Not adding mesh: ' + meshName;\n\t\t\tprogressMessage += ' (' + ( meshPayload.progress.numericalValue * 100 ).toFixed( 2 ) + '%)';\n\n\t\t}\n\n\t\tif ( this.callbacks.onProgress ) {\n\n\t\t\tthis.callbacks.onProgress( 'progress', progressMessage, meshPayload.progress.numericalValue );\n\n\t\t}\n\n\t\treturn meshes;\n\n\t}\n\n};\n\n/**\n * Object to return by callback onMeshAlter. Used to disregard a certain mesh or to return one to many meshes.\n * @class\n *\n * @param {boolean} disregardMesh=false Tell implementation to completely disregard this mesh\n * @param {boolean} disregardMesh=false Tell implementation that mesh(es) have been altered or added\n */\nconst LoadedMeshUserOverride = function ( disregardMesh, alteredMesh ) {\n\n\tthis.disregardMesh = disregardMesh === true;\n\tthis.alteredMesh = alteredMesh === true;\n\tthis.meshes = [];\n\n};\n\n\nLoadedMeshUserOverride.prototype = {\n\n\tconstructor: LoadedMeshUserOverride,\n\n\t/**\n\t * Add a mesh created within callback.\n\t *\n\t * @param {Mesh} mesh\n\t */\n\taddMesh: function ( mesh ) {\n\n\t\tthis.meshes.push( mesh );\n\t\tthis.alteredMesh = true;\n\n\t},\n\n\t/**\n\t * Answers if mesh shall be disregarded completely.\n\t *\n\t * @returns {boolean}\n\t */\n\tisDisregardMesh: function () {\n\n\t\treturn this.disregardMesh;\n\n\t},\n\n\t/**\n\t * Answers if new mesh(es) were created.\n\t *\n\t * @returns {boolean}\n\t */\n\tprovidesAlteredMeshes: function () {\n\n\t\treturn this.alteredMesh;\n\n\t}\n};\n\nexport {\n\tMeshReceiver,\n\tLoadedMeshUserOverride\n};\n"
  },
  {
    "path": "libs/three.js/loaders/obj2/utils/CodeSerializer.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\nconst CodeSerializer = {\n\n\t/**\n\t * Serialize an object with specific prototype definition.\n\t *\n\t * @param {Object} targetPrototype The object that should be serialized\n\t * @param {Object} targetPrototypeInstance An instance of the oriobject that should be serialized\n\t * @param {String} [basePrototypeName] Name of the prototype\n\t * @param {Object} [overrideFunctions} Array of {@Link CodeSerializationInstruction} allows to replace or remove function with provided content\n\t *\n\t * @returns {String}\n\t */\n\tserializeClass: function ( targetPrototype, targetPrototypeInstance, basePrototypeName, overrideFunctions ) {\n\n\t\tlet objectPart, constructorString, i, funcInstructions, funcTemp;\n\t\tconst fullObjectName = targetPrototypeInstance.constructor.name;\n\t\tconst prototypeFunctions = [];\n\t\tconst objectProperties = [];\n\t\tconst objectFunctions = [];\n\t\tconst isExtended = ( basePrototypeName !== null && basePrototypeName !== undefined );\n\n\t\tif ( ! Array.isArray( overrideFunctions ) ) overrideFunctions = [];\n\n\t\tfor ( const name in targetPrototype.prototype ) {\n\n\t\t\tobjectPart = targetPrototype.prototype[ name ];\n\t\t\tfuncInstructions = new CodeSerializationInstruction( name, fullObjectName + '.prototype.' + name );\n\t\t\tfuncInstructions.setCode( objectPart.toString() );\n\n\t\t\tif ( name === 'constructor' ) {\n\n\t\t\t\tif ( ! funcInstructions.isRemoveCode() ) {\n\n\t\t\t\t\tconstructorString = fullObjectName + ' = ' + funcInstructions.getCode() + ';\\n\\n';\n\n\t\t\t\t}\n\n\t\t\t} else if ( typeof objectPart === 'function' ) {\n\n\t\t\t\tfuncTemp = overrideFunctions[ name ];\n\n\t\t\t\tif ( funcTemp instanceof CodeSerializationInstruction && funcTemp.getName() === funcInstructions.getName() ) {\n\n\t\t\t\t\tfuncInstructions = funcTemp;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! funcInstructions.isRemoveCode() ) {\n\n\t\t\t\t\tif ( isExtended ) {\n\n\t\t\t\t\t\tprototypeFunctions.push( funcInstructions.getFullName() + ' = ' + funcInstructions.getCode() + ';\\n\\n' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tprototypeFunctions.push( '\\t' + funcInstructions.getName() + ': ' + funcInstructions.getCode() + ',\\n\\n' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const name in targetPrototype ) {\n\n\t\t\tobjectPart = targetPrototype[ name ];\n\t\t\tfuncInstructions = new CodeSerializationInstruction( name, fullObjectName + '.' + name );\n\n\t\t\tif ( typeof objectPart === 'function' ) {\n\n\t\t\t\tfuncTemp = overrideFunctions[ name ];\n\t\t\t\tif ( funcTemp instanceof CodeSerializationInstruction && funcTemp.getName() === funcInstructions.getName() ) {\n\n\t\t\t\t\tfuncInstructions = funcTemp;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfuncInstructions.setCode( objectPart.toString() );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! funcInstructions.isRemoveCode() ) {\n\n\t\t\t\t\tobjectFunctions.push( funcInstructions.getFullName() + ' = ' + funcInstructions.getCode() + ';\\n\\n' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( typeof ( objectPart ) === 'string' || objectPart instanceof String ) {\n\n\t\t\t\t\tfuncInstructions.setCode( '\\\"' + objectPart.toString() + '\\\"' );\n\n\t\t\t\t} else if ( typeof objectPart === 'object' ) {\n\n\t\t\t\t\tconsole.log( 'Omitting object \"' + funcInstructions.getName() + '\" and replace it with empty object.' );\n\t\t\t\t\tfuncInstructions.setCode( '{}' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfuncInstructions.setCode( objectPart );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! funcInstructions.isRemoveCode() ) {\n\n\t\t\t\t\tobjectProperties.push( funcInstructions.getFullName() + ' = ' + funcInstructions.getCode() + ';\\n' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet objectString = constructorString + '\\n\\n';\n\n\t\tif ( isExtended ) {\n\n\t\t\tobjectString += fullObjectName + '.prototype = Object.create( ' + basePrototypeName + '.prototype );\\n';\n\n\t\t}\n\n\t\tobjectString += fullObjectName + '.prototype.constructor = ' + fullObjectName + ';\\n';\n\t\tobjectString += '\\n\\n';\n\n\t\tfor ( i = 0; i < objectProperties.length; i ++ ) {\n\n\t\t\tobjectString += objectProperties[ i ];\n\n\t\t}\n\n\t\tobjectString += '\\n\\n';\n\n\t\tfor ( i = 0; i < objectFunctions.length; i ++ ) {\n\n\t\t\tobjectString += objectFunctions[ i ];\n\n\t\t}\n\n\t\tobjectString += '\\n\\n';\n\n\t\tif ( isExtended ) {\n\n\t\t\tfor ( i = 0; i < prototypeFunctions.length; i ++ ) {\n\n\t\t\t\tobjectString += prototypeFunctions[ i ];\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tobjectString += fullObjectName + '.prototype = {\\n\\n';\n\t\t\tfor ( i = 0; i < prototypeFunctions.length; i ++ ) {\n\n\t\t\t\tobjectString += prototypeFunctions[ i ];\n\n\t\t\t}\n\n\t\t\tobjectString += '\\n};';\n\n\t\t}\n\n\t\tobjectString += '\\n\\n';\n\n\t\treturn objectString;\n\n\t},\n};\n\n/**\n * Allows to define instructions to override or remove\n * @param {String} name Usually the name of a function\n * @param {String} fullName The name plus full object description\n * @constructor\n */\nconst CodeSerializationInstruction = function ( name, fullName ) {\n\n\tthis.name = name;\n\tthis.fullName = fullName;\n\tthis.code = null;\n\tthis.removeCode = false;\n\n};\n\nCodeSerializationInstruction.prototype = {\n\n\tconstructor: CodeSerializationInstruction,\n\n\t/**\n\t * Returns the name of the function\n\t * @return {String}\n\t */\n\tgetName: function () {\n\n\t\treturn this.name;\n\n\t},\n\n\t/**\n\t * Returns the full name of the function\n\t * @return {String}\n\t */\n\tgetFullName: function () {\n\n\t\treturn this.fullName;\n\n\t},\n\n\t/**\n\t * Set the string containing the serialized function\n\t * @param {String} code\n\t * @return {CodeSerializationInstruction}\n\t */\n\tsetCode: function ( code ) {\n\n\t\tthis.code = code;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Returns the serialized function code\n\t * @return {String}\n\t */\n\tgetCode: function () {\n\n\t\treturn this.code;\n\n\t},\n\n\t/**\n\t * Set if function should be removed\n\t * @param {boolean} removeCode\n\t * @return {CodeSerializationInstruction}\n\t */\n\tsetRemoveCode: function ( removeCode ) {\n\n\t\tthis.removeCode = removeCode;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * If function should be completely removed\n\t * @return {boolean}\n\t */\n\tisRemoveCode: function () {\n\n\t\treturn this.removeCode;\n\n\t}\n\n};\n\nexport {\n\tCodeSerializer,\n\tCodeSerializationInstruction\n};\n"
  },
  {
    "path": "libs/three.js/loaders/obj2/worker/main/WorkerExecutionSupport.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\n/**\n * These instructions are used by {WorkerExecutionSupport} to build code for the web worker or to assign code\n *\n * @param {boolean} supportsStandardWorker\n * @param {boolean} supportsJsmWorker\n * @constructor\n */\nconst CodeBuilderInstructions = function ( supportsStandardWorker, supportsJsmWorker, preferJsmWorker ) {\n\n\tthis.supportsStandardWorker = supportsStandardWorker;\n\tthis.supportsJsmWorker = supportsJsmWorker;\n\tthis.preferJsmWorker = preferJsmWorker;\n\tthis.startCode = '';\n\tthis.codeFragments = [];\n\tthis.importStatements = [];\n\n\tthis.jsmWorkerUrl = null;\n\tthis.defaultGeometryType = 0;\n\n};\n\nCodeBuilderInstructions.prototype = {\n\n\tconstructor: CodeBuilderInstructions,\n\n\tisSupportsStandardWorker: function () {\n\n\t\treturn this.supportsStandardWorker;\n\n\t},\n\n\tisSupportsJsmWorker: function () {\n\n\t\treturn this.supportsJsmWorker;\n\n\t},\n\n\tisPreferJsmWorker: function () {\n\n\t\treturn this.preferJsmWorker;\n\n\t},\n\n\t/**\n\t * Set the full path to the module that contains the worker code.\n\t *\n\t * @param {String} jsmWorkerUrl\n\t */\n\tsetJsmWorkerUrl: function ( jsmWorkerUrl ) {\n\n\t\tif ( jsmWorkerUrl !== undefined && jsmWorkerUrl !== null ) {\n\n\t\t\tthis.jsmWorkerUrl = jsmWorkerUrl;\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Add code that is contained in addition to fragments and libraries\n\t * @param {String} startCode\n\t */\n\taddStartCode: function ( startCode ) {\n\n\t\tthis.startCode = startCode;\n\n\t},\n\n\t/**\n\t * Add code fragment that is included in the provided order\n\t * @param {String} code\n\t */\n\taddCodeFragment: function ( code ) {\n\n\t\tthis.codeFragments.push( code );\n\n\t},\n\n\t/**\n\t * Add full path to a library that is contained at the start of the worker via \"importScripts\"\n\t * @param {String} libraryPath\n\t */\n\taddLibraryImport: function ( libraryPath ) {\n\n\t\tconst libraryUrl = new URL( libraryPath, window.location.href ).href;\n\t\tconst code = 'importScripts( \"' + libraryUrl + '\" );';\n\t\tthis.importStatements.push(\tcode );\n\n\t},\n\n\tgetImportStatements: function () {\n\n\t\treturn this.importStatements;\n\n\t},\n\n\tgetCodeFragments: function () {\n\n\t\treturn this.codeFragments;\n\n\t},\n\n\tgetStartCode: function () {\n\n\t\treturn this.startCode;\n\n\t}\n\n};\n/**\n * This class provides means to transform existing parser code into a web worker. It defines a simple communication protocol\n * which allows to configure the worker and receive raw mesh data during execution.\n * @class\n */\nconst WorkerExecutionSupport = function () {\n\n\t// check worker support first\n\tif ( window.Worker === undefined ) throw 'This browser does not support web workers!';\n\tif ( window.Blob === undefined ) throw 'This browser does not support Blob!';\n\tif ( typeof window.URL.createObjectURL !== 'function' ) throw 'This browser does not support Object creation from URL!';\n\n\tthis._reset();\n\n};\n\nWorkerExecutionSupport.WORKER_SUPPORT_VERSION = '3.2.0';\nconsole.info( 'Using WorkerSupport version: ' + WorkerExecutionSupport.WORKER_SUPPORT_VERSION );\n\n\nWorkerExecutionSupport.prototype = {\n\n\tconstructor: WorkerExecutionSupport,\n\n\t_reset: function () {\n\n\t\tthis.logging = {\n\t\t\tenabled: false,\n\t\t\tdebug: false\n\t\t};\n\n\t\tconst scope = this;\n\t\tconst scopeTerminate = function ( ) {\n\n\t\t\tscope._terminate();\n\n\t\t};\n\n\t\tthis.worker = {\n\t\t\tnative: null,\n\t\t\tjsmWorker: false,\n\t\t\tlogging: true,\n\t\t\tworkerRunner: {\n\t\t\t\tname: 'WorkerRunner',\n\t\t\t\tusesMeshDisassembler: false,\n\t\t\t\tdefaultGeometryType: 0\n\t\t\t},\n\t\t\tterminateWorkerOnLoad: true,\n\t\t\tforceWorkerDataCopy: false,\n\t\t\tstarted: false,\n\t\t\tqueuedMessage: null,\n\t\t\tcallbacks: {\n\t\t\t\tonAssetAvailable: null,\n\t\t\t\tonLoad: null,\n\t\t\t\tterminate: scopeTerminate\n\t\t\t}\n\t\t};\n\n\t},\n\n\t/**\n\t * Enable or disable logging in general (except warn and error), plus enable or disable debug logging.\n\t *\n\t * @param {boolean} enabled True or false.\n\t * @param {boolean} debug True or false.\n\t */\n\tsetLogging: function ( enabled, debug ) {\n\n\t\tthis.logging.enabled = enabled === true;\n\t\tthis.logging.debug = debug === true;\n\t\tthis.worker.logging = enabled === true;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Forces all ArrayBuffers to be transferred to worker to be copied.\n\t *\n\t * @param {boolean} forceWorkerDataCopy True or false.\n\t */\n\tsetForceWorkerDataCopy: function ( forceWorkerDataCopy ) {\n\n\t\tthis.worker.forceWorkerDataCopy = forceWorkerDataCopy === true;\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Request termination of worker once parser is finished.\n\t *\n\t * @param {boolean} terminateWorkerOnLoad True or false.\n\t */\n\tsetTerminateWorkerOnLoad: function ( terminateWorkerOnLoad ) {\n\n\t\tthis.worker.terminateWorkerOnLoad = terminateWorkerOnLoad === true;\n\t\tif ( this.worker.terminateWorkerOnLoad && this.isWorkerLoaded( this.worker.jsmWorker ) &&\n\t\t\t\tthis.worker.queuedMessage === null && this.worker.started ) {\n\n\t\t\tif ( this.logging.enabled ) {\n\n\t\t\t\tconsole.info( 'Worker is terminated immediately as it is not running!' );\n\n\t\t\t}\n\n\t\t\tthis._terminate();\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Update all callbacks.\n\t *\n\t * @param {Function} onAssetAvailable The function for processing the data, e.g. {@link MeshReceiver}.\n\t * @param {Function} [onLoad] The function that is called when parsing is complete.\n\t */\n\tupdateCallbacks: function ( onAssetAvailable, onLoad ) {\n\n\t\tif ( onAssetAvailable !== undefined && onAssetAvailable !== null ) {\n\n\t\t\tthis.worker.callbacks.onAssetAvailable = onAssetAvailable;\n\n\t\t}\n\n\t\tif ( onLoad !== undefined && onLoad !== null ) {\n\n\t\t\tthis.worker.callbacks.onLoad = onLoad;\n\n\t\t}\n\n\t\tthis._verifyCallbacks();\n\n\t},\n\n\t_verifyCallbacks: function () {\n\n\t\tif ( this.worker.callbacks.onAssetAvailable === undefined || this.worker.callbacks.onAssetAvailable === null ) {\n\n\t\t\tthrow 'Unable to run as no \"onAssetAvailable\" callback is set.';\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Builds the worker code according the provided Instructions.\n\t * If jsm worker code shall be built, then function may fall back to standard if lag is set\n\t *\n \t * @param {CodeBuilderInstructions} codeBuilderInstructions\n\t */\n\tbuildWorker: function ( codeBuilderInstructions ) {\n\n\t\tlet jsmSuccess = false;\n\n\t\tif ( codeBuilderInstructions.isSupportsJsmWorker() && codeBuilderInstructions.isPreferJsmWorker() ) {\n\n\t\t\tjsmSuccess = this._buildWorkerJsm( codeBuilderInstructions );\n\n\t\t}\n\n\t\tif ( ! jsmSuccess && codeBuilderInstructions.isSupportsStandardWorker() ) {\n\n\t\t\tthis._buildWorkerStandard( codeBuilderInstructions );\n\n\t\t}\n\n\t},\n\n\t/**\n\t *\n\t * @param {CodeBuilderInstructions} codeBuilderInstructions\n\t * @return {boolean} Whether loading of jsm worker was successful\n\t * @private\n\t */\n\t_buildWorkerJsm: function ( codeBuilderInstructions ) {\n\n\t\tlet jsmSuccess = true;\n\t\tconst timeLabel = 'buildWorkerJsm';\n\t\tconst workerAvailable = this._buildWorkerCheckPreconditions( true, timeLabel );\n\t\tif ( ! workerAvailable ) {\n\n\t\t\ttry {\n\n\t\t\t\tconst worker = new Worker( codeBuilderInstructions.jsmWorkerUrl.href, { type: 'module' } );\n\t\t\t\tthis._configureWorkerCommunication( worker, true, codeBuilderInstructions.defaultGeometryType, timeLabel );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tjsmSuccess = false;\n\t\t\t\t// Chrome throws this exception, but Firefox currently does not complain, but can't execute the worker afterwards\n\t\t\t\tif ( e instanceof TypeError || e instanceof SyntaxError ) {\n\n\t\t\t\t\tconsole.error( 'Modules are not supported in workers.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn jsmSuccess;\n\n\t},\n\n\t/**\n\t * Validate the status of worker code and the derived worker and specify functions that should be build when new raw mesh data becomes available and when the parser is finished.\n\t *\n\t * @param {CodeBuilderIns} buildWorkerCode The function that is invoked to create the worker code of the parser.\n\t */\n\n\t/**\n\t *\n\t * @param {CodeBuilderInstructions} codeBuilderInstructions\n\t * @private\n\t */\n\t_buildWorkerStandard: function ( codeBuilderInstructions ) {\n\n\t\tconst timeLabel = 'buildWorkerStandard';\n\t\tconst workerAvailable = this._buildWorkerCheckPreconditions( false, timeLabel );\n\t\tif ( ! workerAvailable ) {\n\n\t\t\tlet concatenateCode = '';\n\t\t\tcodeBuilderInstructions.getImportStatements().forEach( function ( element ) {\n\n\t\t\t\tconcatenateCode += element + '\\n';\n\n\t\t\t} );\n\t\t\tconcatenateCode += '\\n';\n\t\t\tcodeBuilderInstructions.getCodeFragments().forEach( function ( element ) {\n\n\t\t\t\tconcatenateCode += element + '\\n';\n\n\t\t\t} );\n\t\t\tconcatenateCode += '\\n';\n\t\t\tconcatenateCode += codeBuilderInstructions.getStartCode();\n\n\t\t\tconst blob = new Blob( [ concatenateCode ], { type: 'application/javascript' } );\n\t\t\tconst worker = new Worker( window.URL.createObjectURL( blob ) );\n\n\t\t\tthis._configureWorkerCommunication( worker, false, codeBuilderInstructions.defaultGeometryType, timeLabel );\n\n\t\t}\n\n\t},\n\n\t_buildWorkerCheckPreconditions: function ( requireJsmWorker, timeLabel ) {\n\n\t\tlet workerAvailable = false;\n\t\tif ( this.isWorkerLoaded( requireJsmWorker ) ) {\n\n\t\t\tworkerAvailable = true;\n\n\t\t} else {\n\n\t\t\tif ( this.logging.enabled ) {\n\n\t\t\t\tconsole.info( 'WorkerExecutionSupport: Building ' + ( requireJsmWorker ? 'jsm' : 'standard' ) + ' worker code...' );\n\t\t\t\tconsole.time( timeLabel );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn workerAvailable;\n\n\t},\n\n\t_configureWorkerCommunication: function ( worker, haveJsmWorker, defaultGeometryType, timeLabel ) {\n\n\t\tthis.worker.native = worker;\n\t\tthis.worker.jsmWorker = haveJsmWorker;\n\n\t\tconst scope = this;\n\t\tconst scopedReceiveWorkerMessage = function ( event ) {\n\n\t\t\tscope._receiveWorkerMessage( event );\n\n\t\t};\n\n\t\tthis.worker.native.onmessage = scopedReceiveWorkerMessage;\n\t\tthis.worker.native.onerror = scopedReceiveWorkerMessage;\n\t\tif ( defaultGeometryType !== undefined && defaultGeometryType !== null ) {\n\n\t\t\tthis.worker.workerRunner.defaultGeometryType = defaultGeometryType;\n\n\t\t}\n\n\t\tif ( this.logging.enabled ) {\n\n\t\t\tconsole.timeEnd( timeLabel );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Returns if Worker code is available and complies with expectation.\n\t * @param {boolean} requireJsmWorker\n\t * @return {boolean|*}\n\t */\n\tisWorkerLoaded: function ( requireJsmWorker ) {\n\n\t\treturn this.worker.native !== null &&\n\t\t\t( ( requireJsmWorker && this.worker.jsmWorker ) || ( ! requireJsmWorker && ! this.worker.jsmWorker ) );\n\n\t},\n\n\t/**\n\t * Executed in worker scope\n\t */\n\t_receiveWorkerMessage: function ( event ) {\n\n\t\t// fast-fail in case of error\n\t\tif ( event.type === 'error' ) {\n\n\t\t\tconsole.error( event );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst payload = event.data;\n\t\tconst workerRunnerName = this.worker.workerRunner.name;\n\t\tswitch ( payload.cmd ) {\n\n\t\t\tcase 'assetAvailable':\n\t\t\t\tthis.worker.callbacks.onAssetAvailable( payload );\n\t\t\t\tbreak;\n\n\t\t\tcase 'completeOverall':\n\t\t\t\tthis.worker.queuedMessage = null;\n\t\t\t\tthis.worker.started = false;\n\t\t\t\tif ( this.worker.callbacks.onLoad !== null ) {\n\n\t\t\t\t\tthis.worker.callbacks.onLoad( payload.msg );\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.worker.terminateWorkerOnLoad ) {\n\n\t\t\t\t\tif ( this.worker.logging.enabled ) {\n\n\t\t\t\t\t\tconsole.info( 'WorkerSupport [' + workerRunnerName + ']: Run is complete. Terminating application on request!' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.worker.callbacks.terminate();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'error':\n\t\t\t\tconsole.error( 'WorkerSupport [' + workerRunnerName + ']: Reported error: ' + payload.msg );\n\t\t\t\tthis.worker.queuedMessage = null;\n\t\t\t\tthis.worker.started = false;\n\t\t\t\tif ( this.worker.callbacks.onLoad !== null ) {\n\n\t\t\t\t\tthis.worker.callbacks.onLoad( payload.msg );\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.worker.terminateWorkerOnLoad ) {\n\n\t\t\t\t\tif ( this.worker.logging.enabled ) {\n\n\t\t\t\t\t\tconsole.info( 'WorkerSupport [' + workerRunnerName + ']: Run reported error. Terminating application on request!' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.worker.callbacks.terminate();\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'WorkerSupport [' + workerRunnerName + ']: Received unknown command: ' + payload.cmd );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Runs the parser with the provided configuration.\n\t *\n\t * @param {Object} payload Raw mesh description (buffers, params, materials) used to build one to many meshes.\n\t */\n\texecuteParallel: function ( payload, transferables ) {\n\n\t\tpayload.cmd = 'parse';\n\t\tpayload.usesMeshDisassembler = this.worker.workerRunner.usesMeshDisassembler;\n\t\tpayload.defaultGeometryType = this.worker.workerRunner.defaultGeometryType;\n\t\tif ( ! this._verifyWorkerIsAvailable( payload, transferables ) ) return;\n\n\t\tthis._postMessage();\n\n\t},\n\n\t_verifyWorkerIsAvailable: function ( payload, transferables ) {\n\n\t\tthis._verifyCallbacks();\n\t\tlet ready = true;\n\t\tif ( this.worker.queuedMessage !== null ) {\n\n\t\t\tconsole.warn( 'Already processing message. Rejecting new run instruction' );\n\t\t\tready = false;\n\n\t\t} else {\n\n\t\t\tthis.worker.queuedMessage = {\n\t\t\t\tpayload: payload,\n\t\t\t\ttransferables: ( transferables === undefined || transferables === null ) ? [] : transferables\n\t\t\t};\n\t\t\tthis.worker.started = true;\n\n\t\t}\n\n\t\treturn ready;\n\n\t},\n\n\t_postMessage: function () {\n\n\t\tif ( this.worker.queuedMessage !== null ) {\n\n\t\t\tif ( this.worker.queuedMessage.payload.data.input instanceof ArrayBuffer ) {\n\n\t\t\t\tlet transferables = [];\n\t\t\t\tif ( this.worker.forceWorkerDataCopy ) {\n\n\t\t\t\t\ttransferables.push( this.worker.queuedMessage.payload.data.input.slice( 0 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttransferables.push( this.worker.queuedMessage.payload.data.input );\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.worker.queuedMessage.transferables.length > 0 ) {\n\n\t\t\t\t\ttransferables = transferables.concat( this.worker.queuedMessage.transferables );\n\n\t\t\t\t}\n\n\t\t\t\tthis.worker.native.postMessage( this.worker.queuedMessage.payload, transferables );\n\n\t\t\t} else {\n\n\t\t\t\tthis.worker.native.postMessage( this.worker.queuedMessage.payload );\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\t_terminate: function () {\n\n\t\tthis.worker.native.terminate();\n\t\tthis._reset();\n\n\t}\n};\n\nexport {\n\tCodeBuilderInstructions,\n\tWorkerExecutionSupport\n};\n"
  },
  {
    "path": "libs/three.js/loaders/obj2/worker/parallel/OBJLoader2JsmWorker.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\nimport { OBJLoader2Parser } from '../../OBJLoader2Parser.js';\n\nimport {\n\tWorkerRunner,\n\tDefaultWorkerPayloadHandler\n} from './WorkerRunner.js';\n\nnew WorkerRunner( new DefaultWorkerPayloadHandler( new OBJLoader2Parser() ) );\n"
  },
  {
    "path": "libs/three.js/loaders/obj2/worker/parallel/WorkerRunner.js",
    "content": "/**\n * Development repository: https://github.com/kaisalmen/WWOBJLoader\n */\n\nconst ObjectManipulator = function () {\n};\n\nObjectManipulator.prototype = {\n\n\tconstructor: ObjectManipulator,\n\n\t/**\n\t * Applies values from parameter object via set functions or via direct assignment.\n\t *\n\t * @param {Object} objToAlter The objToAlter instance\n\t * @param {Object} params The parameter object\n\t * @param {boolean} forceCreation Force the creation of a property\n\t */\n\tapplyProperties: function ( objToAlter, params, forceCreation ) {\n\n\t\t// fast-fail\n\t\tif ( objToAlter === undefined || objToAlter === null || params === undefined || params === null ) return;\n\n\t\tlet property, funcName, values;\n\t\tfor ( property in params ) {\n\n\t\t\tfuncName = 'set' + property.substring( 0, 1 ).toLocaleUpperCase() + property.substring( 1 );\n\t\t\tvalues = params[ property ];\n\n\t\t\tif ( typeof objToAlter[ funcName ] === 'function' ) {\n\n\t\t\t\tobjToAlter[ funcName ]( values );\n\n\t\t\t} else if ( objToAlter.hasOwnProperty( property ) || forceCreation ) {\n\n\t\t\t\tobjToAlter[ property ] = values;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n};\n\nconst DefaultWorkerPayloadHandler = function ( parser ) {\n\n\tthis.parser = parser;\n\tthis.logging = {\n\t\tenabled: false,\n\t\tdebug: false\n\t};\n\n};\n\nDefaultWorkerPayloadHandler.prototype = {\n\n\tconstructor: DefaultWorkerPayloadHandler,\n\n\thandlePayload: function ( payload ) {\n\n\t\tif ( payload.logging ) {\n\n\t\t\tthis.logging.enabled = payload.logging.enabled === true;\n\t\t\tthis.logging.debug = payload.logging.debug === true;\n\n\t\t}\n\n\t\tif ( payload.cmd === 'parse' ) {\n\n\t\t\tconst scope = this;\n\t\t\tconst callbacks = {\n\t\t\t\tcallbackOnAssetAvailable: function ( payload ) {\n\n\t\t\t\t\tself.postMessage( payload );\n\n\t\t\t\t},\n\t\t\t\tcallbackOnProgress: function ( text ) {\n\n\t\t\t\t\tif ( scope.logging.enabled && scope.logging.debug ) console.debug( 'WorkerRunner: progress: ' + text );\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst parser = this.parser;\n\t\t\tif ( typeof parser[ 'setLogging' ] === 'function' ) {\n\n\t\t\t\tparser.setLogging( this.logging.enabled, this.logging.debug );\n\n\t\t\t}\n\n\t\t\tconst objectManipulator = new ObjectManipulator();\n\t\t\tobjectManipulator.applyProperties( parser, payload.params, false );\n\t\t\tobjectManipulator.applyProperties( parser, callbacks, false );\n\n\t\t\tconst arraybuffer = payload.data.input;\n\t\t\tlet executeFunctionName = 'execute';\n\t\t\tif ( typeof parser.getParseFunctionName === 'function' ) executeFunctionName = parser.getParseFunctionName();\n\t\t\tif ( payload.usesMeshDisassembler ) {\n\n\t\t\t\t// TODO: Allow to plug and use generic MeshDisassembler\n\n\t\t\t} else {\n\n\t\t\t\tparser[ executeFunctionName ]( arraybuffer, payload.data.options );\n\n\t\t\t}\n\n\t\t\tif ( this.logging.enabled ) console.log( 'WorkerRunner: Run complete!' );\n\n\t\t\tself.postMessage( {\n\t\t\t\tcmd: 'completeOverall',\n\t\t\t\tmsg: 'WorkerRunner completed run.'\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'WorkerRunner: Received unknown command: ' + payload.cmd );\n\n\t\t}\n\n\t}\n};\n\n\n/**\n * Default implementation of the WorkerRunner responsible for creation and configuration of the parser within the worker.\n * @constructor\n */\nconst WorkerRunner = function ( payloadHandler ) {\n\n\tthis.payloadHandler = payloadHandler;\n\n\tconst scope = this;\n\tconst scopedRunner = function ( event ) {\n\n\t\tscope.processMessage( event.data );\n\n\t};\n\n\tself.addEventListener( 'message', scopedRunner, false );\n\n};\n\nWorkerRunner.prototype = {\n\n\tconstructor: WorkerRunner,\n\n\t/**\n\t * Configures the Parser implementation according the supplied configuration object.\n\t *\n\t * @param {Object} payload Raw mesh description (buffers, params, materials) used to build one to many meshes.\n\t */\n\tprocessMessage: function ( payload ) {\n\n\t\tthis.payloadHandler.handlePayload( payload );\n\n\t}\n\n};\n\nexport {\n\tWorkerRunner,\n\tDefaultWorkerPayloadHandler,\n\tObjectManipulator\n};\n"
  },
  {
    "path": "libs/three.js/webxr/ARButton.js",
    "content": "class ARButton {\n\n\tstatic createButton( renderer, sessionInit = {} ) {\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showStartAR( /*device*/ ) {\n\n\t\t\tif ( sessionInit.domOverlay === undefined ) {\n\n\t\t\t\tvar overlay = document.createElement( 'div' );\n\t\t\t\toverlay.style.display = 'none';\n\t\t\t\tdocument.body.appendChild( overlay );\n\n\t\t\t\tvar svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );\n\t\t\t\tsvg.setAttribute( 'width', 38 );\n\t\t\t\tsvg.setAttribute( 'height', 38 );\n\t\t\t\tsvg.style.position = 'absolute';\n\t\t\t\tsvg.style.right = '20px';\n\t\t\t\tsvg.style.top = '20px';\n\t\t\t\tsvg.addEventListener( 'click', function () {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t} );\n\t\t\t\toverlay.appendChild( svg );\n\n\t\t\t\tvar path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );\n\t\t\t\tpath.setAttribute( 'd', 'M 12,12 L 28,28 M 28,12 12,28' );\n\t\t\t\tpath.setAttribute( 'stroke', '#fff' );\n\t\t\t\tpath.setAttribute( 'stroke-width', 2 );\n\t\t\t\tsvg.appendChild( path );\n\n\t\t\t\tsessionInit.optionalFeatures = [ 'dom-overlay' ];\n\t\t\t\tsessionInit.domOverlay = { root: overlay };\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet currentSession = null;\n\n\t\t\tfunction onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\trenderer.xr.setReferenceSpaceType( 'local' );\n\t\t\t\trenderer.xr.setSession( session );\n\n\t\t\t\tbutton.textContent = 'STOP AR';\n\t\t\t\tsessionInit.domOverlay.root.style.display = '';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'START AR';\n\t\t\t\tsessionInit.domOverlay.root.style.display = 'none';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START AR';\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-ar', sessionInit ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showARNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'AR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'ARButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-ar' ).then( function ( supported ) {\n\n\t\t\t\tsupported ? showStartAR() : showARNotSupported();\n\n\t\t\t} ).catch( showARNotSupported );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n}\n\nexport { ARButton };\n"
  },
  {
    "path": "libs/three.js/webxr/VRButton.js",
    "content": "class VRButton {\n\n\tstatic createButton( renderer, options ) {\n\n\t\tif ( options ) {\n\n\t\t\tconsole.error( 'THREE.VRButton: The \"options\" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.' );\n\n\t\t}\n\n\t\tconst button = document.createElement( 'button' );\n\n\t\tfunction showEnterVR( /*device*/ ) {\n\n\t\t\tlet currentSession = null;\n\n\t\t\tfunction onSessionStarted( session ) {\n\n\t\t\t\tsession.addEventListener( 'end', onSessionEnded );\n\n\t\t\t\trenderer.xr.setSession( session );\n\t\t\t\tbutton.textContent = 'EXIT VR';\n\n\t\t\t\tcurrentSession = session;\n\n\t\t\t}\n\n\t\t\tfunction onSessionEnded( /*event*/ ) {\n\n\t\t\t\tcurrentSession.removeEventListener( 'end', onSessionEnded );\n\n\t\t\t\tbutton.textContent = 'ENTER VR';\n\n\t\t\t\tcurrentSession = null;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'ENTER VR';\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif ( currentSession === null ) {\n\n\t\t\t\t\t// WebXR's requestReferenceSpace only works if the corresponding feature\n\t\t\t\t\t// was requested at session creation time. For simplicity, just ask for\n\t\t\t\t\t// the interesting ones as optional features, but be aware that the\n\t\t\t\t\t// requestReferenceSpace call will fail if it turns out to be unavailable.\n\t\t\t\t\t// ('local' is always available for immersive sessions and doesn't need to\n\t\t\t\t\t// be requested separately.)\n\n\t\t\t\t\tconst sessionInit = { optionalFeatures: [ 'local-floor', 'bounded-floor', 'hand-tracking' ] };\n\t\t\t\t\tnavigator.xr.requestSession( 'immersive-vr', sessionInit ).then( onSessionStarted );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\n\t\t}\n\n\t\tfunction showWebXRNotFound() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'VR NOT SUPPORTED';\n\n\t\t}\n\n\t\tfunction stylizeElement( element ) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\n\t\t}\n\n\t\tif ( 'xr' in navigator ) {\n\n\t\t\tbutton.id = 'VRButton';\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement( button );\n\n\t\t\tnavigator.xr.isSessionSupported( 'immersive-vr' ).then( function ( supported ) {\n\n\t\t\t\tsupported ? showEnterVR() : showWebXRNotFound();\n\n\t\t\t} );\n\n\t\t\treturn button;\n\n\t\t} else {\n\n\t\t\tconst message = document.createElement( 'a' );\n\n\t\t\tif ( window.isSecureContext === false ) {\n\n\t\t\t\tmessage.href = document.location.href.replace( /^http:/, 'https:' );\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement( message );\n\n\t\t\treturn message;\n\n\t\t}\n\n\t}\n\n}\n\nexport { VRButton };\n"
  },
  {
    "path": "libs/three.js/webxr/XRControllerModelFactory.js",
    "content": "import {\n\tMesh,\n\tMeshBasicMaterial,\n\tObject3D,\n\tQuaternion,\n\tSphereBufferGeometry,\n} from '../build/three.module.js';\n\nimport { GLTFLoader } from '../loaders/GLTFLoader.js';\n\nimport {\n\tConstants as MotionControllerConstants,\n\tfetchProfile,\n\tMotionController\n} from '../libs/motion-controllers.module.js';\n\nconst DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles';\nconst DEFAULT_PROFILE = 'generic-trigger';\n\nfunction XRControllerModel( ) {\n\n\tObject3D.call( this );\n\n\tthis.motionController = null;\n\tthis.envMap = null;\n\n}\n\nXRControllerModel.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: XRControllerModel,\n\n\tsetEnvironmentMap: function ( envMap ) {\n\n\t\tif ( this.envMap == envMap ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.envMap = envMap;\n\t\tthis.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = this.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this;\n\n\t},\n\n\t/**\n\t * Polls data from the XRInputSource and updates the model's components to match\n\t * the real world data\n\t */\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( ! this.motionController ) return;\n\n\t\t// Cause the MotionController to poll the Gamepad for data\n\t\tthis.motionController.updateFromGamepad();\n\n\t\t// Update the 3D model to reflect the button, thumbstick, and touchpad state\n\t\tObject.values( this.motionController.components ).forEach( ( component ) => {\n\n\t\t\t// Update node data based on the visual responses' current states\n\t\t\tObject.values( component.visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\t\tconst { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse;\n\n\t\t\t\t// Skip if the visual response node is not found. No error is needed,\n\t\t\t\t// because it will have been reported at load time.\n\t\t\t\tif ( ! valueNode ) return;\n\n\t\t\t\t// Calculate the new properties based on the weight supplied\n\t\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY ) {\n\n\t\t\t\t\tvalueNode.visible = value;\n\n\t\t\t\t} else if ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\t\tQuaternion.slerp(\n\t\t\t\t\t\tminNode.quaternion,\n\t\t\t\t\t\tmaxNode.quaternion,\n\t\t\t\t\t\tvalueNode.quaternion,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t\tvalueNode.position.lerpVectors(\n\t\t\t\t\t\tminNode.position,\n\t\t\t\t\t\tmaxNode.position,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n} );\n\n/**\n * Walks the model's tree to find the nodes needed to animate the components and\n * saves them to the motionContoller components for use in the frame loop. When\n * touchpads are found, attaches a touch dot to them.\n */\nfunction findNodes( motionController, scene ) {\n\n\t// Loop through the components and find the nodes needed for each components' visual responses\n\tObject.values( motionController.components ).forEach( ( component ) => {\n\n\t\tconst { type, touchPointNodeName, visualResponses } = component;\n\n\t\tif ( type === MotionControllerConstants.ComponentType.TOUCHPAD ) {\n\n\t\t\tcomponent.touchPointNode = scene.getObjectByName( touchPointNodeName );\n\t\t\tif ( component.touchPointNode ) {\n\n\t\t\t\t// Attach a touch dot to the touchpad.\n\t\t\t\tconst sphereGeometry = new SphereBufferGeometry( 0.001 );\n\t\t\t\tconst material = new MeshBasicMaterial( { color: 0x0000FF } );\n\t\t\t\tconst sphere = new Mesh( sphereGeometry, material );\n\t\t\t\tcomponent.touchPointNode.add( sphere );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( `Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}` );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Loop through all the visual responses to be applied to this component\n\t\tObject.values( visualResponses ).forEach( ( visualResponse ) => {\n\n\t\t\tconst { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse;\n\n\t\t\t// If animating a transform, find the two nodes to be interpolated between.\n\t\t\tif ( valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM ) {\n\n\t\t\t\tvisualResponse.minNode = scene.getObjectByName( minNodeName );\n\t\t\t\tvisualResponse.maxNode = scene.getObjectByName( maxNodeName );\n\n\t\t\t\t// If the extents cannot be found, skip this animation\n\t\t\t\tif ( ! visualResponse.minNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${minNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! visualResponse.maxNode ) {\n\n\t\t\t\t\tconsole.warn( `Could not find ${maxNodeName} in the model` );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// If the target node cannot be found, skip this animation\n\t\t\tvisualResponse.valueNode = scene.getObjectByName( valueNodeName );\n\t\t\tif ( ! visualResponse.valueNode ) {\n\n\t\t\t\tconsole.warn( `Could not find ${valueNodeName} in the model` );\n\n\t\t\t}\n\n\t\t} );\n\n\t} );\n\n}\n\nfunction addAssetSceneToControllerModel( controllerModel, scene ) {\n\n\t// Find the nodes needed for animation and cache them on the motionController.\n\tfindNodes( controllerModel.motionController, scene );\n\n\t// Apply any environment map that the mesh already has set.\n\tif ( controllerModel.envMap ) {\n\n\t\tscene.traverse( ( child ) => {\n\n\t\t\tif ( child.isMesh ) {\n\n\t\t\t\tchild.material.envMap = controllerModel.envMap;\n\t\t\t\tchild.material.needsUpdate = true;\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t// Add the glTF scene to the controllerModel.\n\tcontrollerModel.add( scene );\n\n}\n\nvar XRControllerModelFactory = ( function () {\n\n\tfunction XRControllerModelFactory( gltfLoader = null ) {\n\n\t\tthis.gltfLoader = gltfLoader;\n\t\tthis.path = DEFAULT_PROFILES_PATH;\n\t\tthis._assetCache = {};\n\n\t\t// If a GLTFLoader wasn't supplied to the constructor create a new one.\n\t\tif ( ! this.gltfLoader ) {\n\n\t\t\tthis.gltfLoader = new GLTFLoader();\n\n\t\t}\n\n\t}\n\n\tXRControllerModelFactory.prototype = {\n\n\t\tconstructor: XRControllerModelFactory,\n\n\t\tcreateControllerModel: function ( controller ) {\n\n\t\t\tconst controllerModel = new XRControllerModel();\n\t\t\tlet scene = null;\n\n\t\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\t\tconst xrInputSource = event.data;\n\n\t\t\t\tif ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad ) return;\n\n\t\t\t\tfetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => {\n\n\t\t\t\t\tcontrollerModel.motionController = new MotionController(\n\t\t\t\t\t\txrInputSource,\n\t\t\t\t\t\tprofile,\n\t\t\t\t\t\tassetPath\n\t\t\t\t\t);\n\n\t\t\t\t\tconst cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ];\n\t\t\t\t\tif ( cachedAsset ) {\n\n\t\t\t\t\t\tscene = cachedAsset.scene.clone();\n\n\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ! this.gltfLoader ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'GLTFLoader not set.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.gltfLoader.setPath( '' );\n\t\t\t\t\t\tthis.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => {\n\n\t\t\t\t\t\t\tthis._assetCache[ controllerModel.motionController.assetUrl ] = asset;\n\n\t\t\t\t\t\t\tscene = asset.scene.clone();\n\n\t\t\t\t\t\t\taddAssetSceneToControllerModel( controllerModel, scene );\n\n\t\t\t\t\t\t},\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t() => {\n\n\t\t\t\t\t\t\tthrow new Error( `Asset ${controllerModel.motionController.assetUrl} missing or malformed.` );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t} ).catch( ( err ) => {\n\n\t\t\t\t\tconsole.warn( err );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\t\tcontrollerModel.motionController = null;\n\t\t\t\tcontrollerModel.remove( scene );\n\t\t\t\tscene = null;\n\n\t\t\t} );\n\n\t\t\treturn controllerModel;\n\n\t\t}\n\n\t};\n\n\treturn XRControllerModelFactory;\n\n} )();\n\nexport { XRControllerModelFactory };\n"
  },
  {
    "path": "libs/three.js/webxr/XRHandModelFactory.js",
    "content": "import {\n\tObject3D\n} from '../../../build/three.module.js';\n\nimport {\n\tXRHandPrimitiveModel\n} from './XRHandPrimitiveModel.js';\n\nimport {\n\tXRHandOculusMeshModel\n} from './XRHandOculusMeshModel.js';\n\nfunction XRHandModel( controller ) {\n\n\tObject3D.call( this );\n\n\tthis.controller = controller;\n\tthis.motionController = null;\n\tthis.envMap = null;\n\n\tthis.mesh = null;\n\n}\n\nXRHandModel.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\tconstructor: XRHandModel,\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.motionController ) {\n\n\t\t\tthis.motionController.updateMesh();\n\n\t\t}\n\n\t},\n} );\n\n\nconst XRHandModelFactory = ( function () {\n\n\tfunction XRHandModelFactory() {\n\n\t\tthis.path = '';\n\n\t}\n\n\tXRHandModelFactory.prototype = {\n\n\t\tconstructor: XRHandModelFactory,\n\n\t\tsetPath: function ( path ) {\n\n\t\t\tthis.path = path;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcreateHandModel: function ( controller, profile, options ) {\n\n\t\t\tconst handModel = new XRHandModel( controller );\n\n\t\t\tcontroller.addEventListener( 'connected', ( event ) => {\n\n\t\t\t\tconst xrInputSource = event.data;\n\n\t\t\t\tif ( xrInputSource.hand && ! handModel.motionController ) {\n\n\t\t\t\t\thandModel.visible = true;\n\t\t\t\t\thandModel.xrInputSource = xrInputSource;\n\n\t\t\t\t\t// @todo Detect profile if not provided\n\t\t\t\t\tif ( profile === undefined || profile === 'spheres' ) {\n\n\t\t\t\t\t\thandModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'sphere' } );\n\n\t\t\t\t\t} else if ( profile === 'boxes' ) {\n\n\t\t\t\t\t\thandModel.motionController = new XRHandPrimitiveModel( handModel, controller, this.path, xrInputSource.handedness, { primitive: 'box' } );\n\n\t\t\t\t\t} else if ( profile === 'oculus' ) {\n\n\t\t\t\t\t\thandModel.motionController = new XRHandOculusMeshModel( handModel, controller, this.path, xrInputSource.handedness, options );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tcontroller.addEventListener( 'disconnected', () => {\n\n\t\t\t\t// handModel.motionController = null;\n\t\t\t\t// handModel.remove( scene );\n\t\t\t\t// scene = null;\n\n\t\t\t} );\n\n\t\t\treturn handModel;\n\n\t\t}\n\n\t};\n\n\treturn XRHandModelFactory;\n\n} )();\n\n\nexport { XRHandModelFactory };\n"
  },
  {
    "path": "libs/three.js/webxr/XRHandOculusMeshModel.js",
    "content": "import { FBXLoader } from '../loaders/FBXLoader.js';\n\nclass XRHandOculusMeshModel {\n\n\tconstructor( handModel, controller, path, handedness, options ) {\n\n\t\tthis.controller = controller;\n\t\tthis.handModel = handModel;\n\n\t\tthis.bones = [];\n\t\tconst loader = new FBXLoader();\n\t\tconst low = options && options.model === 'lowpoly' ? '_low' : '';\n\n\t\tloader.setPath( path );\n\t\tloader.load( `OculusHand_${handedness === 'right' ? 'R' : 'L'}${low}.fbx`, object => {\n\n\t\t\tthis.handModel.add( object );\n\t\t\t// Hack because of the scale of the skinnedmesh\n\t\t\tobject.scale.setScalar( 0.01 );\n\n\t\t\tconst mesh = object.getObjectByProperty( 'type', 'SkinnedMesh' );\n\t\t\tmesh.frustumCulled = false;\n\t\t\tmesh.castShadow = true;\n\t\t\tmesh.receiveShadow = true;\n\n\t\t\tconst bonesMapping = [\n\t\t\t\t'b_%_wrist', // XRHand.WRIST,\n\n\t\t\t\t'b_%_thumb1', // XRHand.THUMB_METACARPAL,\n\t\t\t\t'b_%_thumb2', // XRHand.THUMB_PHALANX_PROXIMAL,\n\t\t\t\t'b_%_thumb3', // XRHand.THUMB_PHALANX_DISTAL,\n\t\t\t\t'b_%_thumb_null', // XRHand.THUMB_PHALANX_TIP,\n\n\t\t\t\tnull, //'b_%_index1', // XRHand.INDEX_METACARPAL,\n\t\t\t\t'b_%_index1', // XRHand.INDEX_PHALANX_PROXIMAL,\n\t\t\t\t'b_%_index2', // XRHand.INDEX_PHALANX_INTERMEDIATE,\n\t\t\t\t'b_%_index3', // XRHand.INDEX_PHALANX_DISTAL,\n\t\t\t\t'b_%_index_null', // XRHand.INDEX_PHALANX_TIP,\n\n\t\t\t\tnull, //'b_%_middle1', // XRHand.MIDDLE_METACARPAL,\n\t\t\t\t'b_%_middle1', // XRHand.MIDDLE_PHALANX_PROXIMAL,\n\t\t\t\t'b_%_middle2', // XRHand.MIDDLE_PHALANX_INTERMEDIATE,\n\t\t\t\t'b_%_middle3', // XRHand.MIDDLE_PHALANX_DISTAL,\n\t\t\t\t'b_%_middlenull', // XRHand.MIDDLE_PHALANX_TIP,\n\n\t\t\t\tnull, //'b_%_ring1', // XRHand.RING_METACARPAL,\n\t\t\t\t'b_%_ring1', // XRHand.RING_PHALANX_PROXIMAL,\n\t\t\t\t'b_%_ring2', // XRHand.RING_PHALANX_INTERMEDIATE,\n\t\t\t\t'b_%_ring3', // XRHand.RING_PHALANX_DISTAL,\n\t\t\t\t'b_%_ring_inull', // XRHand.RING_PHALANX_TIP,\n\n\t\t\t\t'b_%_pinky0', // XRHand.LITTLE_METACARPAL,\n\t\t\t\t'b_%_pinky1', // XRHand.LITTLE_PHALANX_PROXIMAL,\n\t\t\t\t'b_%_pinky2', // XRHand.LITTLE_PHALANX_INTERMEDIATE,\n\t\t\t\t'b_%_pinky3', // XRHand.LITTLE_PHALANX_DISTAL,\n\t\t\t\t'b_%_pinkynull', // XRHand.LITTLE_PHALANX_TIP\n\t\t\t];\n\t\t\tbonesMapping.forEach( boneName => {\n\n\t\t\t\tif ( boneName ) {\n\n\t\t\t\t\tconst bone = object.getObjectByName( boneName.replace( /%/g, handedness === 'right' ? 'r' : 'l' ) );\n\t\t\t\t\tthis.bones.push( bone );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.bones.push( null );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tupdateMesh() {\n\n\t\t// XR Joints\n\t\tconst XRJoints = this.controller.joints;\n\t\tfor ( let i = 0; i < this.bones.length; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\t\t\tconst XRJoint = XRJoints[ i ];\n\n\t\t\tif ( XRJoint ) {\n\n\t\t\t\tif ( XRJoint.visible ) {\n\n\t\t\t\t\tconst position = XRJoint.position;\n\n\t\t\t\t\tif ( bone ) {\n\n\t\t\t\t\t\tbone.position.copy( position.clone().multiplyScalar( 100 ) );\n\t\t\t\t\t\tbone.quaternion.copy( XRJoint.quaternion );\n\t\t\t\t\t\t// bone.scale.setScalar( XRJoint.jointRadius || defaultRadius );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nexport { XRHandOculusMeshModel };\n"
  },
  {
    "path": "libs/three.js/webxr/XRHandPrimitiveModel.js",
    "content": "import {\n\tSphereBufferGeometry,\n\tBoxBufferGeometry,\n\tMeshStandardMaterial,\n\tMesh,\n\tGroup\n} from '../../../build/three.module.js';\n\nclass XRHandPrimitiveModel {\n\n\tconstructor( handModel, controller, path, handedness, options ) {\n\n\t\tthis.controller = controller;\n\t\tthis.handModel = handModel;\n\n\t  this.envMap = null;\n\n\t\tthis.handMesh = new Group();\n\t\tthis.handModel.add( this.handMesh );\n\n\t\tif ( window.XRHand ) {\n\n\t\t\tlet geometry;\n\n\t\t\tif ( ! options || ! options.primitive || options.primitive === 'sphere' ) {\n\n\t\t\t\tgeometry = new SphereBufferGeometry( 1, 10, 10 );\n\n\t\t\t} else if ( options.primitive === 'box' ) {\n\n\t\t\t\tgeometry = new BoxBufferGeometry( 1, 1, 1 );\n\n\t\t\t}\n\n\t\t\tconst jointMaterial = new MeshStandardMaterial( { color: 0xffffff, roughness: 1, metalness: 0 } );\n\t\t\tconst tipMaterial = new MeshStandardMaterial( { color: 0x999999, roughness: 1, metalness: 0 } );\n\n\t\t\tconst tipIndexes = [\n\t\t\t\twindow.XRHand.THUMB_PHALANX_TIP,\n\t\t\t\twindow.XRHand.INDEX_PHALANX_TIP,\n\t\t\t\twindow.XRHand.MIDDLE_PHALANX_TIP,\n\t\t\t\twindow.XRHand.RING_PHALANX_TIP,\n\t\t\t\twindow.XRHand.LITTLE_PHALANX_TIP\n\t\t\t];\n\t\t\tfor ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) {\n\n\t\t\t\tvar cube = new Mesh( geometry, tipIndexes.indexOf( i ) !== - 1 ? tipMaterial : jointMaterial );\n\t\t\t\tcube.castShadow = true;\n\t\t\t\tcube.receiveShadow = true;\n\t\t\t\tthis.handMesh.add( cube );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMesh() {\n\n\t\tconst defaultRadius = 0.008;\n\t\tconst objects = this.handMesh.children;\n\n\t\t// XR Joints\n\t\tconst XRJoints = this.controller.joints;\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\tconst jointMesh = objects[ i ];\n\t\t\tconst XRJoint = XRJoints[ i ];\n\n\t\t\tif ( XRJoint.visible ) {\n\n\t\t\t\tjointMesh.position.copy( XRJoint.position );\n\t\t\t\tjointMesh.quaternion.copy( XRJoint.quaternion );\n\t\t\t\tjointMesh.scale.setScalar( XRJoint.jointRadius || defaultRadius );\n\n\t\t\t}\n\n\t\t\tjointMesh.visible = XRJoint.visible;\n\n\t\t}\n\n\t}\n\n}\n\nexport { XRHandPrimitiveModel };\n"
  },
  {
    "path": "libs/tween/LICENSE.txt",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 gskinner.com, inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "libs/tween/README.txt",
    "content": "This directory contains a compressed version of the TweenJS library.\n\nIt also includes a minified version of EaselJS, and is included for the Ticker class, which TweenJS uses by default. If you don't wish to use EaselJS, you can  implement your own ticking mechanism, or download the Ticker class on its own from http://github.com/createjs/easeljs/\n\nIt is recommended that you use this version in almost all cases, unless you need to modify the original code. It is much smaller, results in less http requests, and you don't have to worry about the order in which you include the js files.\n\ntween.js is a single file that contains compacted versions of all of the TweenJS classes (comments and white space stripped).\n\nYou can also gzip the file to further reduce its size (by about 75%). Many servers do this automatically.\n"
  },
  {
    "path": "libs/tween/Tween.js",
    "content": "/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\n\n\nvar _Group = function () {\n\tthis._tweens = {};\n\tthis._tweensAddedDuringUpdate = {};\n};\n\n_Group.prototype = {\n\tgetAll: function () {\n\n\t\treturn Object.keys(this._tweens).map(function (tweenId) {\n\t\t\treturn this._tweens[tweenId];\n\t\t}.bind(this));\n\n\t},\n\n\tremoveAll: function () {\n\n\t\tthis._tweens = {};\n\n\t},\n\n\tadd: function (tween) {\n\n\t\tthis._tweens[tween.getId()] = tween;\n\t\tthis._tweensAddedDuringUpdate[tween.getId()] = tween;\n\n\t},\n\n\tremove: function (tween) {\n\n\t\tdelete this._tweens[tween.getId()];\n\t\tdelete this._tweensAddedDuringUpdate[tween.getId()];\n\n\t},\n\n\tupdate: function (time, preserve) {\n\n\t\tvar tweenIds = Object.keys(this._tweens);\n\n\t\tif (tweenIds.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttime = time !== undefined ? time : TWEEN.now();\n\n\t\t// Tweens are updated in \"batches\". If you add a new tween during an update, then the\n\t\t// new tween will be updated in the next batch.\n\t\t// If you remove a tween during an update, it may or may not be updated. However,\n\t\t// if the removed tween was added during the current batch, then it will not be updated.\n\t\twhile (tweenIds.length > 0) {\n\t\t\tthis._tweensAddedDuringUpdate = {};\n\n\t\t\tfor (var i = 0; i < tweenIds.length; i++) {\n\n\t\t\t\tvar tween = this._tweens[tweenIds[i]];\n\n\t\t\t\tif (tween && tween.update(time) === false) {\n\t\t\t\t\ttween._isPlaying = false;\n\n\t\t\t\t\tif (!preserve) {\n\t\t\t\t\t\tdelete this._tweens[tweenIds[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttweenIds = Object.keys(this._tweensAddedDuringUpdate);\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\nvar TWEEN = new _Group();\n\nTWEEN.Group = _Group;\nTWEEN._nextId = 0;\nTWEEN.nextId = function () {\n\treturn TWEEN._nextId++;\n};\n\n\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\nif (typeof (window) === 'undefined' && typeof (process) !== 'undefined') {\n\tTWEEN.now = function () {\n\t\tvar time = process.hrtime();\n\n\t\t// Convert [seconds, nanoseconds] to milliseconds.\n\t\treturn time[0] * 1000 + time[1] / 1000000;\n\t};\n}\n// In a browser, use window.performance.now if it is available.\nelse if (typeof (window) !== 'undefined' &&\n         window.performance !== undefined &&\n\t\t window.performance.now !== undefined) {\n\t// This must be bound, because directly assigning this function\n\t// leads to an invocation exception in Chrome.\n\tTWEEN.now = window.performance.now.bind(window.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n\tTWEEN.now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n\tTWEEN.now = function () {\n\t\treturn new Date().getTime();\n\t};\n}\n\n\nTWEEN.Tween = function (object, group) {\n\tthis._object = object;\n\tthis._valuesStart = {};\n\tthis._valuesEnd = {};\n\tthis._valuesStartRepeat = {};\n\tthis._duration = 1000;\n\tthis._repeat = 0;\n\tthis._repeatDelayTime = undefined;\n\tthis._yoyo = false;\n\tthis._isPlaying = false;\n\tthis._reversed = false;\n\tthis._delayTime = 0;\n\tthis._startTime = null;\n\tthis._easingFunction = TWEEN.Easing.Linear.None;\n\tthis._interpolationFunction = TWEEN.Interpolation.Linear;\n\tthis._chainedTweens = [];\n\tthis._onStartCallback = null;\n\tthis._onStartCallbackFired = false;\n\tthis._onUpdateCallback = null;\n\tthis._onCompleteCallback = null;\n\tthis._onStopCallback = null;\n\tthis._group = group || TWEEN;\n\tthis._id = TWEEN.nextId();\n\n};\n\nTWEEN.Tween.prototype = {\n\tgetId: function getId() {\n\t\treturn this._id;\n\t},\n\n\tisPlaying: function isPlaying() {\n\t\treturn this._isPlaying;\n\t},\n\n\tto: function to(properties, duration) {\n\n\t\tthis._valuesEnd = properties;\n\n\t\tif (duration !== undefined) {\n\t\t\tthis._duration = duration;\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstart: function start(time) {\n\n\t\tthis._group.add(this);\n\n\t\tthis._isPlaying = true;\n\n\t\tthis._onStartCallbackFired = false;\n\n\t\tthis._startTime = time !== undefined ? typeof time === 'string' ? TWEEN.now() + parseFloat(time) : time : TWEEN.now();\n\t\tthis._startTime += this._delayTime;\n\n\t\tfor (var property in this._valuesEnd) {\n\n\t\t\t// Check if an Array was provided as property value\n\t\t\tif (this._valuesEnd[property] instanceof Array) {\n\n\t\t\t\tif (this._valuesEnd[property].length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Create a local copy of the Array with the start value at the front\n\t\t\t\tthis._valuesEnd[property] = [this._object[property]].concat(this._valuesEnd[property]);\n\n\t\t\t}\n\n\t\t\t// If `to()` specifies a property that doesn't exist in the source object,\n\t\t\t// we should not set that property in the object\n\t\t\tif (this._object[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Save the starting value.\n\t\t\tthis._valuesStart[property] = this._object[property];\n\n\t\t\tif ((this._valuesStart[property] instanceof Array) === false) {\n\t\t\t\tthis._valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n\t\t\t}\n\n\t\t\tthis._valuesStartRepeat[property] = this._valuesStart[property] || 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function stop() {\n\n\t\tif (!this._isPlaying) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._group.remove(this);\n\t\tthis._isPlaying = false;\n\n\t\tif (this._onStopCallback !== null) {\n\t\t\tthis._onStopCallback(this._object);\n\t\t}\n\n\t\tthis.stopChainedTweens();\n\t\treturn this;\n\n\t},\n\n\tend: function end() {\n\n\t\tthis.update(this._startTime + this._duration);\n\t\treturn this;\n\n\t},\n\n\tstopChainedTweens: function stopChainedTweens() {\n\n\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\tthis._chainedTweens[i].stop();\n\t\t}\n\n\t},\n\n\tdelay: function delay(amount) {\n\n\t\tthis._delayTime = amount;\n\t\treturn this;\n\n\t},\n\n\trepeat: function repeat(times) {\n\n\t\tthis._repeat = times;\n\t\treturn this;\n\n\t},\n\n\trepeatDelay: function repeatDelay(amount) {\n\n\t\tthis._repeatDelayTime = amount;\n\t\treturn this;\n\n\t},\n\n\tyoyo: function yoyo(yoyo) {\n\n\t\tthis._yoyo = yoyo;\n\t\treturn this;\n\n\t},\n\n\teasing: function easing(easing) {\n\n\t\tthis._easingFunction = easing;\n\t\treturn this;\n\n\t},\n\n\tinterpolation: function interpolation(interpolation) {\n\n\t\tthis._interpolationFunction = interpolation;\n\t\treturn this;\n\n\t},\n\n\tchain: function chain() {\n\n\t\tthis._chainedTweens = arguments;\n\t\treturn this;\n\n\t},\n\n\tonStart: function onStart(callback) {\n\n\t\tthis._onStartCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonUpdate: function onUpdate(callback) {\n\n\t\tthis._onUpdateCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonComplete: function onComplete(callback) {\n\n\t\tthis._onCompleteCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonStop: function onStop(callback) {\n\n\t\tthis._onStopCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tupdate: function update(time) {\n\n\t\tvar property;\n\t\tvar elapsed;\n\t\tvar value;\n\n\t\tif (time < this._startTime) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._onStartCallbackFired === false) {\n\n\t\t\tif (this._onStartCallback !== null) {\n\t\t\t\tthis._onStartCallback(this._object);\n\t\t\t}\n\n\t\t\tthis._onStartCallbackFired = true;\n\t\t}\n\n\t\telapsed = (time - this._startTime) / this._duration;\n\t\telapsed = elapsed > 1 ? 1 : elapsed;\n\n\t\tvalue = this._easingFunction(elapsed);\n\n\t\tfor (property in this._valuesEnd) {\n\n\t\t\t// Don't update properties that do not exist in the source object\n\t\t\tif (this._valuesStart[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar start = this._valuesStart[property] || 0;\n\t\t\tvar end = this._valuesEnd[property];\n\n\t\t\tif (end instanceof Array) {\n\n\t\t\t\tthis._object[property] = this._interpolationFunction(end, value);\n\n\t\t\t} else {\n\n\t\t\t\t// Parses relative end values with start as base (e.g.: +10, -3)\n\t\t\t\tif (typeof (end) === 'string') {\n\n\t\t\t\t\tif (end.charAt(0) === '+' || end.charAt(0) === '-') {\n\t\t\t\t\t\tend = start + parseFloat(end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tend = parseFloat(end);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Protect against non numeric properties.\n\t\t\t\tif (typeof (end) === 'number') {\n\t\t\t\t\tthis._object[property] = start + (end - start) * value;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (this._onUpdateCallback !== null) {\n\t\t\tthis._onUpdateCallback(this._object);\n\t\t}\n\n\t\tif (elapsed === 1) {\n\n\t\t\tif (this._repeat > 0) {\n\n\t\t\t\tif (isFinite(this._repeat)) {\n\t\t\t\t\tthis._repeat--;\n\t\t\t\t}\n\n\t\t\t\t// Reassign starting values, restart by making startTime = now\n\t\t\t\tfor (property in this._valuesStartRepeat) {\n\n\t\t\t\t\tif (typeof (this._valuesEnd[property]) === 'string') {\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._yoyo) {\n\t\t\t\t\t\tvar tmp = this._valuesStartRepeat[property];\n\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesEnd[property];\n\t\t\t\t\t\tthis._valuesEnd[property] = tmp;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._valuesStart[property] = this._valuesStartRepeat[property];\n\n\t\t\t\t}\n\n\t\t\t\tif (this._yoyo) {\n\t\t\t\t\tthis._reversed = !this._reversed;\n\t\t\t\t}\n\n\t\t\t\tif (this._repeatDelayTime !== undefined) {\n\t\t\t\t\tthis._startTime = time + this._repeatDelayTime;\n\t\t\t\t} else {\n\t\t\t\t\tthis._startTime = time + this._delayTime;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\tif (this._onCompleteCallback !== null) {\n\n\t\t\t\t\tthis._onCompleteCallback(this._object);\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\t\t\t// Make the chained tweens start exactly at the time they should,\n\t\t\t\t\t// even if the `update()` method was called way past the duration of the tween\n\t\t\t\t\tthis._chainedTweens[i].start(this._startTime + this._duration);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\n\nTWEEN.Easing = {\n\n\tLinear: {\n\n\t\tNone: function (k) {\n\n\t\t\treturn k;\n\n\t\t}\n\n\t},\n\n\tQuadratic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k * (2 - k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * (--k * (k - 2) - 1);\n\n\t\t}\n\n\t},\n\n\tCubic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tQuartic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn 1 - (--k * k * k * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * ((k -= 2) * k * k * k - 2);\n\n\t\t}\n\n\t},\n\n\tQuintic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tSinusoidal: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.cos(k * Math.PI / 2);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sin(k * Math.PI / 2);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\treturn 0.5 * (1 - Math.cos(Math.PI * k));\n\n\t\t}\n\n\t},\n\n\tExponential: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k === 0 ? 0 : Math.pow(1024, k - 1);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k === 1 ? 1 : 1 - Math.pow(2, - 10 * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * Math.pow(1024, k - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (- Math.pow(2, - 10 * (k - 1)) + 2);\n\n\t\t}\n\n\t},\n\n\tCircular: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.sqrt(1 - k * k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sqrt(1 - (--k * k));\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn - 0.5 * (Math.sqrt(1 - k * k) - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n\n\t\t}\n\n\t},\n\n\tElastic: {\n\n\t\tIn: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tk *= 2;\n\n\t\t\tif (k < 1) {\n\t\t\t\treturn -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\t\t\t}\n\n\t\t\treturn 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;\n\n\t\t}\n\n\t},\n\n\tBack: {\n\n\t\tIn: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn k * k * ((s + 1) * k - s);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn --k * k * ((s + 1) * k + s) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tvar s = 1.70158 * 1.525;\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * (k * k * ((s + 1) * k - s));\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n\n\t\t}\n\n\t},\n\n\tBounce: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - TWEEN.Easing.Bounce.Out(1 - k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k < (1 / 2.75)) {\n\t\t\t\treturn 7.5625 * k * k;\n\t\t\t} else if (k < (2 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n\t\t\t} else if (k < (2.5 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n\t\t\t} else {\n\t\t\t\treturn 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n\t\t\t}\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k < 0.5) {\n\t\t\t\treturn TWEEN.Easing.Bounce.In(k * 2) * 0.5;\n\t\t\t}\n\n\t\t\treturn TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n\n\t\t}\n\n\t}\n\n};\n\nTWEEN.Interpolation = {\n\n\tLinear: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.Linear;\n\n\t\tif (k < 0) {\n\t\t\treturn fn(v[0], v[1], f);\n\t\t}\n\n\t\tif (k > 1) {\n\t\t\treturn fn(v[m], v[m - 1], m - f);\n\t\t}\n\n\t\treturn fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n\n\t},\n\n\tBezier: function (v, k) {\n\n\t\tvar b = 0;\n\t\tvar n = v.length - 1;\n\t\tvar pw = Math.pow;\n\t\tvar bn = TWEEN.Interpolation.Utils.Bernstein;\n\n\t\tfor (var i = 0; i <= n; i++) {\n\t\t\tb += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n\t\t}\n\n\t\treturn b;\n\n\t},\n\n\tCatmullRom: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n\t\tif (v[0] === v[m]) {\n\n\t\t\tif (k < 0) {\n\t\t\t\ti = Math.floor(f = m * (1 + k));\n\t\t\t}\n\n\t\t\treturn fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n\n\t\t} else {\n\n\t\t\tif (k < 0) {\n\t\t\t\treturn v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n\t\t\t}\n\n\t\t\tif (k > 1) {\n\t\t\t\treturn v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n\t\t\t}\n\n\t\t\treturn fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n\n\t\t}\n\n\t},\n\n\tUtils: {\n\n\t\tLinear: function (p0, p1, t) {\n\n\t\t\treturn (p1 - p0) * t + p0;\n\n\t\t},\n\n\t\tBernstein: function (n, i) {\n\n\t\t\tvar fc = TWEEN.Interpolation.Utils.Factorial;\n\n\t\t\treturn fc(n) / fc(i) / fc(n - i);\n\n\t\t},\n\n\t\tFactorial: (function () {\n\n\t\t\tvar a = [1];\n\n\t\t\treturn function (n) {\n\n\t\t\t\tvar s = 1;\n\n\t\t\t\tif (a[n]) {\n\t\t\t\t\treturn a[n];\n\t\t\t\t}\n\n\t\t\t\tfor (var i = n; i > 1; i--) {\n\t\t\t\t\ts *= i;\n\t\t\t\t}\n\n\t\t\t\ta[n] = s;\n\t\t\t\treturn s;\n\n\t\t\t};\n\n\t\t})(),\n\n\t\tCatmullRom: function (p0, p1, p2, p3, t) {\n\n\t\t\tvar v0 = (p2 - p0) * 0.5;\n\t\t\tvar v1 = (p3 - p1) * 0.5;\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t * t2;\n\n\t\t\treturn (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n\n\t\t}\n\n\t}\n\n};\n\n// UMD (Universal Module Definition)\n(function (root) {\n\n\tif (typeof define === 'function' && define.amd) {\n\n\t\t// AMD\n\t\tdefine([], function () {\n\t\t\treturn TWEEN;\n\t\t});\n\n\t} else if (typeof module !== 'undefined' && typeof exports === 'object') {\n\n\t\t// Node.js\n\t\tmodule.exports = TWEEN;\n\n\t} else if (root !== undefined) {\n\n\t\t// Global variable\n\t\troot.TWEEN = TWEEN;\n\n\t}\n\n})(this);\n"
  },
  {
    "path": "libs/zstd-codec/bundle.js",
    "content": "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n'use strict';window.ZstdCodec=require('./lib/zstd-codec.js');window.ZstdStream=require('./lib/zstd-stream.js');\n\n},{\"./lib/zstd-codec.js\":7,\"./lib/zstd-stream.js\":8}],2:[function(require,module,exports){\n\"use strict\";exports.DEFAULT_COMPRESSION_LEVEL=3;exports.STREAMING_DEFAULT_BUFFER_SIZE=512*1024;\n\n},{}],3:[function(require,module,exports){\n(function (Buffer){\n'use strict';var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var ArrayBufferHelper=function(){function ArrayBufferHelper(){_classCallCheck(this,ArrayBufferHelper);}_createClass(ArrayBufferHelper,null,[{key:'transfer',value:function transfer(old_buffer,new_capacity){var bytes=new Uint8Array(new ArrayBuffer(new_capacity));bytes.set(new Uint8Array(old_buffer.slice(0,new_capacity)));return bytes.buffer;}}]);return ArrayBufferHelper;}();var getClassName=function getClassName(obj){if(!obj||(typeof obj==='undefined'?'undefined':_typeof(obj))!='object')return null;// Object.prototype.toString returns '[object ClassName]',\n// remove prefix '[object ' and suffix ']'\nreturn Object.prototype.toString.call(obj).slice('[object '.length,-1);};var isUint8Array=function isUint8Array(obj){return getClassName(obj)=='Uint8Array';};var isString=function isString(obj){return typeof obj=='string'||getClassName(obj)=='String';};var toTypedArray=function toTypedArray(chunk,encoding,string_decoder){if(isString(chunk)){chunk=string_decoder(encoding);}if(isUint8Array(chunk)){// NOTE: Buffer is recognized as Uint8Array object.\nreturn chunk;}else if(getClassName(chunk)=='ArrayBuffer'){return new Uint8Array(chunk);}else if(Array.isArray(chunk)){return new Uint8Array(chunk);}return null;};// NOTE: only available on Node.js environment\nvar fromTypedArrayToBuffer=function fromTypedArrayToBuffer(typedArray){return Buffer.from(typedArray.buffer);};exports.ArrayBufferHelper=ArrayBufferHelper;exports.getClassName=getClassName;exports.isUint8Array=isUint8Array;exports.isString=isString;exports.toTypedArray=toTypedArray;exports.fromTypedArrayToBuffer=fromTypedArrayToBuffer;\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],4:[function(require,module,exports){\n\"use strict\";var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};// REF: https://stackoverflow.com/a/47880734\nvar wasmSupported=function(){try{if((typeof WebAssembly===\"undefined\"?\"undefined\":_typeof(WebAssembly))===\"object\"&&typeof WebAssembly.instantiate===\"function\"){var module=new WebAssembly.Module(Uint8Array.of(0x0,0x61,0x73,0x6d,0x01,0x00,0x00,0x00));if(module instanceof WebAssembly.Module)return new WebAssembly.Instance(module)instanceof WebAssembly.Instance;}}catch(e){}return false;}();exports.run=function(f){var Module={};Module.onRuntimeInitialized=function(){f(Module);};if(wasmSupported){require('./zstd-codec-binding-wasm.js')(Module);}else{require('./zstd-codec-binding.js')(Module);}};\n\n},{\"./zstd-codec-binding-wasm.js\":5,\"./zstd-codec-binding.js\":6}],5:[function(require,module,exports){\n(function (process,Buffer,__dirname){\n'use strict';var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var Module=function(){var _scriptDir=typeof document!=='undefined'&&document.currentScript?document.currentScript.src:undefined;return function(Module){Module=Module||{};var Module;if(!Module)Module=typeof Module!=='undefined'?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key];}}Module[\"arguments\"]=[];Module[\"thisProgram\"]=\"./this.program\";Module[\"quit\"]=function(status,toThrow){throw toThrow;};Module[\"preRun\"]=[];Module[\"postRun\"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=(typeof window==='undefined'?'undefined':_typeof(window))===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=(typeof process==='undefined'?'undefined':_typeof(process))===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory);}else{return scriptDirectory+path;}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+\"/\";var nodeFS;var nodePath;Module[\"read\"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename);}return binary?ret:ret.toString();};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret);}assert(ret.buffer);return ret;};if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\");}Module[\"arguments\"]=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex;}});process[\"on\"](\"unhandledRejection\",function(reason,p){process[\"exit\"](1);});Module[\"quit\"]=function(status){process[\"exit\"](status);};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\";};}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){Module[\"read\"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data);}return read(f);};}Module[\"readBinary\"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data;}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f));}data=read(f,\"binary\");assert((typeof data==='undefined'?'undefined':_typeof(data))===\"object\");return data;};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs;}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments;}if(typeof quit===\"function\"){Module[\"quit\"]=function(status){quit(status);};}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WEB){if(document.currentScript){scriptDirectory=document.currentScript.src;}}else{scriptDirectory=self.location.href;}if(_scriptDir){scriptDirectory=_scriptDir;}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.split(\"/\").slice(0,-1).join(\"/\")+\"/\";}else{scriptDirectory=\"\";}Module[\"read\"]=function shell_read(url){try{var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText;}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data);}throw err;}};if(ENVIRONMENT_IS_WORKER){Module[\"readBinary\"]=function readBinary(url){try{var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response);}catch(err){var data=tryParseAsDataURI(url);if(data){return data;}throw err;}};}Module[\"readAsync\"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return;}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return;}onerror();};xhr.onerror=onerror;xhr.send(null);};Module[\"setWindowTitle\"]=function(title){document.title=title;};}else{}var out=Module[\"print\"]||(typeof console!==\"undefined\"?console.log.bind(console):typeof print!==\"undefined\"?print:null);var err=Module[\"printErr\"]||(typeof printErr!==\"undefined\"?printErr:typeof console!==\"undefined\"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key];}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret;}function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0;}}return ret;}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret;}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4;}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8;}else{return 0;}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text);}}var asm2wasmImports={\"f64-rem\":function f64Rem(x,y){return x%y;},\"debugger\":function _debugger(){debugger;}};var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args));}else{return Module[\"dynCall_\"+sig].call(null,ptr);}}var GLOBAL_BASE=1024;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text);}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func;}var JSfuncs={\"stackSave\":function stackSave(){_stackSave();},\"stackRestore\":function stackRestore(){_stackRestore();},\"arrayToC\":function arrayToC(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret;},\"stringToC\":function stringToC(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len);}return ret;}};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};function ccall(ident,returnType,argTypes,args,opts){function convertReturnValue(ret){if(returnType===\"string\")return Pointer_stringify(ret);if(returnType===\"boolean\")return Boolean(ret);return ret;}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=_stackSave();cArgs[i]=converter(args[i]);}else{cArgs[i]=args[i];}}}var ret=func.apply(null,cArgs);ret=convertReturnValue(ret);if(stack!==0)_stackRestore(stack);return ret;}function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type);}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function Pointer_stringify(ptr,length){if(length===0||!ptr)return\"\";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break;}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK;}return ret;}return UTF8ToString(ptr);}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr]){++endPtr;}if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr));}else{var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue;}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue;}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2;}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3;}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4;}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5;}}}if(u0<65536){str+=String.fromCharCode(u0);}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023);}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr);}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023;}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u;}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63;}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}}outU8Array[outIdx]=0;return outIdx-startIdx;}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len;}else if(u<=2047){len+=2;}else if(u<=65535){len+=3;}else if(u<=2097151){len+=4;}else if(u<=67108863){len+=5;}else{len+=6;}}return len;}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function demangle(func){var __cxa_demangle_func=Module[\"___cxa_demangle\"]||Module[\"__cxa_demangle\"];assert(__cxa_demangle_func);try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(HEAP32[status>>2]===0&&ret){return Pointer_stringify(ret);}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret);}return func;}function demangleAll(text){var regex=/__Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\";});}function jsStackTrace(){var err=new Error();if(!err.stack){try{throw new Error(0);}catch(e){err=e;}if(!err.stack){return\"(no stack trace available)\";}}return err.stack.toString();}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js);}var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple;}return x;}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module[\"buffer\"]=buffer=buf;}function updateGlobalBufferViews(){Module[\"HEAP8\"]=HEAP8=new Int8Array(buffer);Module[\"HEAP16\"]=HEAP16=new Int16Array(buffer);Module[\"HEAP32\"]=HEAP32=new Int32Array(buffer);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buffer);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buffer);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buffer);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buffer);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buffer);}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){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  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 \");}function enlargeMemory(){abortOnCannotGrowMemory();}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)err(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+TOTAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\");if(Module[\"buffer\"]){buffer=Module[\"buffer\"];}else{if((typeof WebAssembly==='undefined'?'undefined':_typeof(WebAssembly))===\"object\"&&typeof WebAssembly.Memory===\"function\"){Module[\"wasmMemory\"]=new WebAssembly.Memory({\"initial\":TOTAL_MEMORY/WASM_PAGE_SIZE,\"maximum\":TOTAL_MEMORY/WASM_PAGE_SIZE});buffer=Module[\"wasmMemory\"].buffer;}else{buffer=new ArrayBuffer(TOTAL_MEMORY);}Module[\"buffer\"]=buffer;}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY;}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue;}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func);}else{Module[\"dynCall_vi\"](func,callback.arg);}}else{func(callback.arg===undefined?null:callback.arg);}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift());}}callRuntimeCallbacks(__ATPRERUN__);}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__);}function preMain(){callRuntimeCallbacks(__ATMAIN__);}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true;}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift());}}callRuntimeCallbacks(__ATPOSTRUN__);}function addOnPreRun(cb){__ATPRERUN__.unshift(cb);}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb);}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer);}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i);}if(!dontAddNull)HEAP8[buffer>>0]=0;}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var Math_clz32=Math.clz32;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id;}function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies);}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies);}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null;}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback();}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0;}function integrateWasmJS(){var wasmTextFile=\"\";var wasmBinaryFile=\"data:application/octet-stream;base64,AGFzbQEAAAABxQMzYAF/AGAAAX9gAn9/AGADf39/AGABfwF/YAN/f38Bf2AAAGACf38Bf2AEf39/fwF/YAV/f39/fwF/YAZ/f39/f38Bf2AEf39/fwBgBn9/f39/fwBgBX9/f39/AGANf39/f39/f39/f39/fwBgCH9/f39/f39/AGADf39/AXxgB39/f39/f38Bf2ABfwF+YAF+AX5gAn5+AX5gAn9+AX9gAn9+AGANf39/f39/f39/f39/fwF/YAh/f39/f39/fwF/YAx/f39/f39/f39/f38Bf2AEf39+fwBgAn5/AX9gBX9/fn9/AX9gBn9/f39/fgF/YAN/f34Bf2AFf39/f34Bf2ALf39/f39/f39/f38Bf2AHf39/f39/fwBgBX9/f35/AX9gCX9/f39/f39/fwF/YAp/f39/f39/f39/AX9gEH9/f39/f39/f39/f39/f38Bf2AEfn9/fgF+YAJ/fwF+YAN+f38Bf2AFf35/f38AYAd/fn9/f39/AX5gCH9/f39/f35/AX9gBn9/f39+fwF/YAR/f39+AX9gB39/f39/f34Bf2AJf39/f39/f39/AGACfn4Bf2AGf3x/f39/AX9gAnx/AXwC9Ak0A2VudgZtZW1vcnkCAYACgAIDZW52BXRhYmxlAXABnAOcAwNlbnYJdGFibGVCYXNlA38AA2Vudg5EWU5BTUlDVE9QX1BUUgN/AANlbnYIU1RBQ0tUT1ADfwADZW52CVNUQUNLX01BWAN/AANlbnYFYWJvcnQAAANlbnYNZW5sYXJnZU1lbW9yeQABA2Vudg5nZXRUb3RhbE1lbW9yeQABA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQABA2VudhlfX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uAAQDZW52DF9fX2N4YV90aHJvdwADA2VudgdfX19sb2NrAAADZW52C19fX3NldEVyck5vAAADZW52DV9fX3N5c2NhbGwxNDAABwNlbnYNX19fc3lzY2FsbDE0NQAHA2Vudg1fX19zeXNjYWxsMTQ2AAcDZW52DV9fX3N5c2NhbGwyMjEABwNlbnYLX19fc3lzY2FsbDUABwNlbnYMX19fc3lzY2FsbDU0AAcDZW52C19fX3N5c2NhbGw2AAcDZW52CV9fX3VubG9jawAAA2VudhZfX2VtYmluZF9yZWdpc3Rlcl9ib29sAA0DZW52F19fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzAA4DZW52I19fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NvbnN0cnVjdG9yAAwDZW52IF9fZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2Z1bmN0aW9uAA8DZW52F19fZW1iaW5kX3JlZ2lzdGVyX2VtdmFsAAIDZW52F19fZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0AAMDZW52Gl9fZW1iaW5kX3JlZ2lzdGVyX2Z1bmN0aW9uAAwDZW52GV9fZW1iaW5kX3JlZ2lzdGVyX2ludGVnZXIADQNlbnYdX19lbWJpbmRfcmVnaXN0ZXJfbWVtb3J5X3ZpZXcAAwNlbnYcX19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZwACA2Vudh1fX2VtYmluZF9yZWdpc3Rlcl9zdGRfd3N0cmluZwADA2VudhZfX2VtYmluZF9yZWdpc3Rlcl92b2lkAAIDZW52Cl9fZW12YWxfYXMAEANlbnYMX19lbXZhbF9jYWxsAAgDZW52GF9fZW12YWxfY2FsbF92b2lkX21ldGhvZAALA2Vudg5fX2VtdmFsX2RlY3JlZgAAA2VudhlfX2VtdmFsX2dldF9tZXRob2RfY2FsbGVyAAcDZW52G19fZW12YWxfZ2V0X21vZHVsZV9wcm9wZXJ0eQAEA2VudhRfX2VtdmFsX2dldF9wcm9wZXJ0eQAHA2Vudg5fX2VtdmFsX2luY3JlZgAAA2VudgtfX2VtdmFsX25ldwAIA2VudhNfX2VtdmFsX25ld19jc3RyaW5nAAQDZW52F19fZW12YWxfcnVuX2Rlc3RydWN0b3JzAAADZW52El9fZW12YWxfdGFrZV92YWx1ZQAHA2VudgZfYWJvcnQABgNlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA2VudhRfcHRocmVhZF9nZXRzcGVjaWZpYwAEA2VudhNfcHRocmVhZF9rZXlfY3JlYXRlAAcDZW52DV9wdGhyZWFkX29uY2UABwNlbnYUX3B0aHJlYWRfc2V0c3BlY2lmaWMABwPmB+QHBAEAAgIAAQYCAgQCBwIEBwcFBwcEBwUHBwAAAwMABAIAAgcEBAIHBAQCBwQEAgcEBAIHBAQCBwQCAwMFAwQAAQQDCwcFCAADBwQAAAUEBwQAAQUJCAQAAQgFBAEGBwcIBQgABAICBwQIAAQCBwQDAAQCBwQCAAQCBwQAAAcHAgQCBwcEBwQCBwcEBQcHAAQHBAIHBwQHBAIHBwQFBwcEBAkEBAQRCgQICQUDBAcHBwcCBwcEEhITBBIUFBUFBRIHBwIKBwkKCAkKCQgHBQkJBwkKBQMDAAACBAMDAgIWFgICBAUICQgKAwUKCQoCAhcYBQUZGQQBBAAEBBoaBwUKBwoACREICgUFAwMFCwoFBQkEBwcHBwcbGxsbBwgAAAAEBxwdHgISBRQHBx8CAAQEGSAHCgoKCgoKCgoKCgoKCgoKCgMHBwgLBQgFDQ0AAwIFBwgHBwcJCQoNESERGAkJCgkRIgoJAwAYCQMjGAQkCSUICAcIAwsJJicoGwUbCCkqCwsCBQIDAyssAxoJBRgYCgkFAi0RCgEEBC4dLQceBwgIBQcJAgoJBAoJBBgJDy8KCQoJGAcKGAoYAAQBBAQHBAQEBAQEBAcHBQQFCCcnBQUFBAcEEgQHBwcFBAcHBwcFBQcEBQggAwwCCgQREREDGAIRERgEBAoHBQkFCAgEBQUFCAERAREBEQUCCQUJBQkRBQMEAhgEAgQjBwgJBAkJCQkJCAgHCQkFCQUJEQgJBQkPLwICCQQFBQUEBwIFCQUJBQkRBQIYCAgJCAgFCREICQUJCQQFAwUFAgkFBQkFCSMFAwQCGAcJCAQICAkJCAgFCREPLwgJBAUJCQkEBQMFAQkRBAMFBQkFCRgFAwQCGAQJCAgICAUJCREPLwgJBQkJBQkIBAQJCQkJBwcKAQQECQUFBAcEMAUICQQIBAUBBQEFAQUEBQQBCQkJCQQJBAkECQkECQIGAAQEAAcHBwIEBQUEAQUFBQcEBAUHBQcHCAgFCQMEAygbGw0HMTIFBwUEBQcHBwQHBAEEBAAEBwQEBAQGAQIFDA0LBQsLDQgMDQsGAAUFBQwNCwsMDQgCAgILAAAEBQAAAwMEBQIPAwAFBQUFBQIFBwICBQUDAgUFAwUFBQIFAwICAgIFBQUFBwMFAAMLBQUICAUFBQUFBQUFBQUFBQUFBQUFBQUFAgUCAwUFBQUFBQUFBQICAgACAgIDAggFAwwCAgUAAAsCAAcHCAIFBQUCBQUFBwIAAgIFCwIAAAIIAAAAAAIAAgACBQAHBAUEBgQFBQUFBAcFCAkKEQIDCw0MIQEEBwUICQoGAAIDCw0MBh8GfwEjAQt/ASMCC38BIwMLfwFBAAt/AUEAC38BQQALB94EJRhfX0dMT0JBTF9fc3ViX0lfYmluZF9jcHAAgwYfX19HTE9CQUxfX3N1Yl9JX3pzdGRfYmluZGluZ19jYwCKARBfX19jeGFfY2FuX2NhdGNoAO8HD19fX2N4YV9kZW1hbmdsZQDZBhZfX19jeGFfaXNfcG9pbnRlcl90eXBlAPAHEV9fX2Vycm5vX2xvY2F0aW9uAJAGDl9fX2dldFR5cGVOYW1lAIUGBV9mcmVlAIcGD19sbHZtX2Jzd2FwX2kzMgDyBw5fbGx2bV9jdGx6X2k2NADzBwdfbWFsbG9jAIYGB19tZW1jcHkA9AcIX21lbW1vdmUA9QcHX21lbXNldAD2BwVfc2JyawD3BwlkeW5DYWxsX2kAbgpkeW5DYWxsX2lpAPgHC2R5bkNhbGxfaWlpAPkHDGR5bkNhbGxfaWlpaQD6Bw1keW5DYWxsX2lpaWlpAPsHDmR5bkNhbGxfaWlpaWlpAPwHD2R5bkNhbGxfaWlpaWlpaQD9BwlkeW5DYWxsX3YAdApkeW5DYWxsX3ZpAP4HC2R5bkNhbGxfdmlpAP8HDGR5bkNhbGxfdmlpaQCACA1keW5DYWxsX3ZpaWlpAIEIDmR5bkNhbGxfdmlpaWlpAIIID2R5bkNhbGxfdmlpaWlpaQCDCBNlc3RhYmxpc2hTdGFja1NwYWNlADELZ2V0VGVtcFJldDAANAtydW5Qb3N0U2V0cwDxBwtzZXRUZW1wUmV0MAAzCHNldFRocmV3ADIKc3RhY2tBbGxvYwAuDHN0YWNrUmVzdG9yZQAwCXN0YWNrU2F2ZQAvCbcFAQAjAAucA4QIf4UBiQFthAiECIQIhQhMUVJVVllaXV5hYmWRAZUBmAGbAZ4BoQGkAacBrQGxAbMBtwG+AcIBxAHIAYwGvQZ3ezx9boMBbogBbkJrbjjGA9wFhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhQiFCIUIhghQVFhcYGSUAZoBoAGmAa8BsAG1AbYBwAHBAcYBxwHoBHY6fIsBjAE9PkBBcUNFRnGGCIYIhgiGCIYIhgiGCIYIhgiGCIYIhgiGCIYIhgiGCIYIhgiGCIYIhgiG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ACAEJAUgAA8LIARBEWohASAEQRBqIQIgAygCACAFKAIANgIMIAMoAgAgAygCACgCDEEEajYCEAJAIAAoAgBBBE8EQCADKAIAIAUoAgAgACgCAGpBfGo2AgggAygCACgCCBDhASECIAMoAgAgAjYCACABIAUoAgAgACgCAEEBa2osAAA6AAAgAS0AAAR/QQggAS0AABDUAWsFQQALIQIgAygCACACNgIEIAEtAABFBEAgBkF/NgIAIAYoAgAhACAEJAUgAA8LBSADKAIAIAMoAgAoAgw2AgggAygCACADKAIAKAIMLQAANgIAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCAEECaw4GBQQDAgEABgsgAygCACIBIAEoAgAgBSgCAC0ABkEQdGo2AgAMBgsMBQsMBQsMBQsMBQsMBQsMBQsgAygCACIBIAEoAgAgBSgCAC0ABUEIdGo2AgALIAMoAgAiASABKAIAIAUoAgAtAARqNgIACyADKAIAIgEgASgCACAFKAIALQADQRh0ajYCAAsgAygCACIBIAEoAgAgBSgCAC0AAkEQdGo2AgALIAMoAgAiASABKAIAIAUoAgAtAAFBCHRqNgIACyACIAUoAgAgACgCAEEBa2osAAA6AAAgAi0AAAR/QQggAi0AABDUAWsFQQALIQEgAygCACABNgIEIAItAAAEQCADKAIAQQRqIgEgASgCAEEEIAAoAgBrQQN0ajYCAAwCCyAGQWw2AgAgBigCACEAIAQkBSAADwsLIAYgACgCADYCACAGKAIAIQAgBCQFIAALhQEBAn8jBSEDIwVBIGokBSADQRBqIgQgADYCACADQQxqIgAgATYCACADQQhqIgEgAjYCACADQQRqIgIgASgCADYCACADIAIoAgA2AgAgACgCACADKAIALwEAENwBIQIgBCgCACACNgIAIAAoAgAQ2QEaIAQoAgAgASgCAEEEajYCBCADJAULvQMBBn8jBSEDIwVBEGokBSADQQxqIQIgA0EIaiIBIAA2AgAgASgCACgCBEEgSwRAIAJBAzYCACACKAIAIQAgAyQFIAAPCyABKAIAIQUgASgCACgCCCABKAIAKAIQTwRAIAEoAgBBCGoiACAAKAIAIAUoAgRBA3ZrNgIAIAEoAgBBBGoiACAAKAIAQQdxNgIAIAEoAgAoAggQ4QEhACAB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AzAgAkIANwM4IAJBQGtCADcDACACQgA3A0ggAiAAKQMAQoeVr6+Ytt6bnn98Qs/W077Sx6vZQnw3AwggAiAAKQMAQs/W077Sx6vZQnw3AxAgAiAAKQMAQgB8NwMYIAIgACkDAEKHla+vmLbem55/fTcDICADKAIAIgAgAikDADcDACAAIAIpAwg3AwggACACKQMQNwMQIAAgAikDGDcDGCAAIAIpAyA3AyAgACACKQMoNwMoIAAgAikDMDcDMCAAIAIpAzg3AzggAEFAayACQUBrKQMANwMAIAAgAikDSDcDSCAAIAIpA1A3A1AgAiQFQQALSQECfyMFIQMjBUEQaiQFIANBCGoiBCAANgIAIANBBGoiACABNgIAIAMgAjYCACAEKAIAIgEgACgCACADKAIAEPQHGiADJAUgAQvcJQJ8fwJ+IwUhAyMFQeAEaiQFIANBuAFqIRogA0HQBGohLCADQcwEaiEtIANByARqIS4gA0HEBGohLyADQcAEaiEwIANBsAFqIRsgA0G8BGohMSADQbgEaiEyIANBtARqITMgA0GwBGohNCADQawEaiE1IANBqAFqIRwgA0GoBGohNiADQaQEaiE3IANBoARqITggA0GcBGohOSADQZgEaiE6IANBoAFqIR0gA0GUBGohOyADQZAEaiE8IANBjARqIT0gA0GIBGohPiADQYQEaiE/IANBmAFqIR4gA0GABGohQCADQfwDaiFBIANB+ANqIUIgA0H0A2ohQyADQfADaiFEIANBkAFqIR8gA0HsA2ohRSADQegDaiFGIANB5ANqIUcgA0HgA2ohSCADQdwDaiFJIANBiAFqISAgA0HYA2ohSiADQdQDaiFLIANB0ANqIUwgA0HMA2ohTSADQcgDaiFOIANBgAFqISEgA0HEA2ohTyADQcADaiFQIANBvANqIVEgA0G4A2ohUiADQbQDaiFTIANBsANqISIgA0GsA2ohBCADQagDaiEOIANBpANqIQogA0GgA2ohCCADQZwDaiEGIANBmANqIQsgA0GUA2ohVCADQfgAaiEPIANB8ABqIRAgA0HoAGohESADQeAAaiESIANB2ABqISMgA0GQA2ohVSADQYwDaiFWIANBiANqIVcgA0GEA2ohWCADQYADaiFZIANB0ABqISQgA0H8AmohWiADQfgCaiFbIANB9AJqIVwgA0HwAmohXSADQewCaiFeIANByABqISUgA0HoAmohXyADQeQCaiFgIANB4AJqIWEgA0HcAmohYiADQdgCaiFjIANBQGshJiADQdQCaiFkIANB0AJqIWUgA0HMAmohZiADQcgCaiFnIANBxAJqIWggA0E4aiEnIANBwAJqIWkgA0G8AmohaiADQbgCaiFrIANBtAJqIWwgA0GwAmohbSADQTBqISggA0GsAmohbiADQagCaiFvIANBpAJqIXAgA0GgAmohcSADQZwCaiFyIANBKGohKSADQZgCaiFzIANBlAJqIXQgA0GQAmohdSADQYwCaiF2IANBiAJqIXcgA0EgaiEqIANBhAJqIXggA0GAAmoheSADQfwBaiF6IANB+AFqIXsgA0H0AWohfCADQfABaiErIANB7AFqIQUgA0HoAWohEyADQeQBaiEMIANB4AFqIQkgA0HcAWohByADQdgBaiENIANB1AFqIX0gA0EYaiEUIANBEGohFSADQQhqIRYgAyEXIANB0AFqIRggA0HMAWoiGSAANgIAIANByAFqIn4gATYCACADQcQBaiIBIAI2AgAgA0HAAWoiAEGA5QAsAAA2AgAgGSgCACEZIH4oAgAhAiABKAIAIQEgACgCAEEBRgR/IAUgGTYCACATIAI2AgAgDCABNgIAIAlBATYCACAHIBMoAgA2AgAgDSAHKAIAIAwoAgBqNgIAIAUoAgAiACAAKQMAIAwoAgCtfDcDACAFKAIAIQAgBSgCACgCSCAMKAIAakEgSQRAIABBKGogBSgCACgCSGogEygCACAMKAIAEOoBGiAFKAIAQcgAaiIAIAAoAgAgDCgCAGo2AgAgK0EANgIABSAAKAJIBEAgBSgCAEEoaiAFKAIAKAJIaiATKAIAQSAgBSgCACgCSGsQ6gEaIAUoAgApAwghgAEgCSgCACEAIHsgBSgCAEEoajYCACB8IAA2AgAgfCgCACEAIHggeygCADYCACB5IAA2AgAgekEBNgIAIHkoAgBBAUYhASB4KAIAIQAgeigCAEEBRgRAIAAQ5gEhfyABRQRAIH8Q5AEhfwsgKiB/NwMABSAAKQMAIX8gAUUEQCB/EOQBIX8LICogfzcDAAsggAEgKikDABDnASF/IAUoAgAgfzcDCCAFKAIAKQMQIYABIAkoAgAhACB2IAUoAgBBMGo2AgAgdyAANgIA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AgAgGyAANgIAIBxBATYCACAbKAIAQQFGIQQgGigCACEAIBwoAgBBAUYEQCAAEOUBIQAgBEUEQCAAENEBIQALIBQgADYCAAUgACgCACEAIARFBEAgABDRASEACyAUIAA2AgALIAIgAikDACAUKAIArUKHla+vmLbem55/foU3AwAgAiACKQMAQheGIAIpAwBCKYiEQs/W077Sx6vZQn5C+fPd8Zn2masWfDcDACAFIAUoAgBBBGo2AgALA0AgBSgCACAJKAIASQRAIAIgAikDACAFKAIALQAArULFz9my8eW66id+hTcDACACIAIpAwBCC4YgAikDAEI1iIRCh5Wvr5i23puef343AwAgBSAFKAIAQQFqNgIADAELCyACIAIpAwAgAikDAEIhiIU3AwAgAiACKQMAQs/W077Sx6vZQn43AwAgAiACKQMAIAIpAwBCHYiFNwMAIAIgAikDAEL5893xmfaZqxZ+NwMAIAIgAikDACACKQMAQiCIhTcDACATIAIpAwA3AwAgEykDACEwIAEkBSAwCwttAQN/IwUhAiMFQRBqJAUgAkEEaiEDIAIiBCAANgIAIAEoAgAEfyADIAEoAgggBCgCACABKAIAQT9xQcgAahEHADYCACADKAIAIQAgAiQFIAAFIAMgBCgCABCGBjYCACADKAIAIQAgAiQFIAALC5ABAQR/IwUhAiMFQRBqJAUgAkEIaiEDIAIhBCACQQRqIgUgADYCACABKAIABH8gBCABKAIIIAUoAgAgASgCAEE/cUHIAGoRBwA2AgAgBCgCAEEAIAUoAgAQ9gcaIAMgBCgCADYCACADKAIAIQAgAiQFIAAFIANBASAFKAIAEIgGNgIAIAMoAgAhACACJAUgAAsLWAECfyMFIQIjBUEQaiQFIAIiAyAANgIAIAIoAgBFBEAgAiQFDwsgASgCBARAIAEoAgggAygCACABKAIEQR9xQeQCahECACACJAUFIAMoAgAQhwYgAiQFCwvLCgEOfyMFIQYjBUHwCGokBSAGQeQIaiEKIAZBtAhqIQ0gBkGwCGohCyAGQawIaiERIAZBqAhqIQggBkHgCGoiDiAANgIAIAZB3AhqIgcgATYCACAGQdgIaiIPIAI2AgAgBkHUCGoiCSADNgIAIAZB0AhqIgEgBDYCACAGQcwIaiIDIAU2AgAgBkHICGoiAkEBIAko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AgAoAhBLBEAgASgCACABKAIAKAIQNgIMCyABKAIAQQRqIgMgAygCAEEHcTYCACABKAIAIgEgASgCACAAKAIAQQN0djYCACACJAULRgECfyMFIQIjBUEQaiQFIAJBBGoiAyAANgIAIAIgATYCACADKAIAIAIoAgAoAgAgAigCACgCDBCIAiADKAIAEIQCIAIkBQuLAQEDfyMFIQIjBUEQaiQFIAJBBGohAyACIgEgADYCACABKAIAQQFBARCHAiABKAIAEIQCIAEoAgAoAgwgASgCACgCEE8EfyADQQA2AgAgAygCACEAIAIkBSAABSADIAEoAgAoAgwgASgCACgCCGsgASgCACgCBEEAS2o2AgAgAygCACEAIAIkBSAACwtoAQJ/IwUhAyMFQRBqJAUgA0EIaiIEIAA2AgAgA0EEaiIAIAE2AgAgAyACNgIAIAQoAgAiASABKAIAIAAoAgAgBCgCACgCBHRyNgIAIAQoAgBBBGoiACAAKAIAIAMoAgBqNgIAIAMkBQt4AQJ/IwUhAyMFQRBqJAUgA0EIaiIEIAA2AgAgA0EEaiIAIAE2AgAgAyACNgIAIAQoAgAiASABKAIAIAAoAgAgAygCAEECdEHgHWooAgBxIAQoAgAoAgR0cjYCACAEKAIAQQRqIgAgACgCACADKAIAajYCACADJAULNwECfyMFIQIjBUEQaiQFIAJBBGoiAyAANgIAIAIgATYCACADKAIAIgMgAigCACIBEIoCIAIkBQtUAQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAMoAgAhAyACKAIAIQFBkOUALQAABEAgAyABEI0CIAIkBQUgAyABENEBEI0CIAIkBQsLVAECfyMFIQIjBUEQaiQFIAJBCGoiAyAANgIAIAIgATcDACADKAIAIQMgAikDACEBQZDlAC0AAARAIAMgARCMAiACJAUFIAMgARDkARCMAiACJAULCzMBAn8jBSECIwVBEGokBSACQQhqIgMgADYCACACIAE3AwAgAygCACACKQMANwAAIAIkBQszAQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAMoAgAgAigCADYAACACJAULuAEBBH8jBSECIwVBIGokBSACQRBqIgMgADYCACACQQxqIgQgATYCACACQQhqIgEgBCgCADYCACACQQRqIgUgASgCADYCACACIgAgASgCABCPAkH//wNxNgIAIAMoAgBBASACKAIAdDYCACADKAIAIAUoAgBBBGo2AgQgAygCACAEKAIAIgRBBGogAigCAAR/QQEgACgCAEEBa3QFQQELIgFBAnRqNgIIIAMoAgAgACgCADYCDCACJAULJgEBfyMFIQEjBUEQaiQFIAEgADYCACABKAIALgAAIQAgASQFIAALSgECfyMFIQMjBUEQaiQFIANBCGoiBCAANgIAIANBBGoiACABNgIAIAMgAjYCACAEKAIAIAAoAgAgAygCAEEBEPgBIQAgAyQFIAAL+gUBCX8jBSEEIwVB0ANqJAUgBEHEA2ohBSAEQcADaiIHIAA2AgAgBEG8A2oiACABNgIAIARBuANqIgogAjYCACAEQbQDaiICIAM2AgAgBEGwA2oiCSAHKAIANgIAIARBrANqIgEgCSgCADYCACAEQagDaiILIAkoAgAgACgCAGo2AgAgBEGkA2oiA0EMNgIAIARBoANqIgdBBjYCACACKAIAQQFNBEAgBUEANgIAIAUoAgAhACAEJAUgAA8LIARBnANqIgAgBEEgaiIIIAMgCigCACACKAIAEPQBNgIAIAAoAgAQzQFBAEchDCAAKAIAIQYgDARAIAUgBjYCACAFKAIAIQAgBCQFIAAPCyAGIAIoAgBGBEAgBUEBNgIAIAUoAgAhACAEJAUgAA8LIAAoAgBBAUYEQCAFQQA2AgAgBSgCACEAIAQkBSAADwsgByAHKAIAIAIoAgAgAygCABD6ATYCACAEQZgDaiIGIAQiACAHKAIAIAggAigCACADKAIAEPsBNgIAIAYoAgAQzQEEQCAFIAYoAgA2AgAgBSgCACEAIAQkBSAADwsgBEGUA2oiBiABKAIAIAsoAgAgASgCAGsgACADKAIAIAcoAgAQ8gE2AgAgBigCABDNAUEARyEIIAYoAgAhBiAIBEAgBSAGNgIAIAUoAgAhACAEJAUgAA8LIAEgASgCACAGajYCACAEQZADaiIGIARBoAFqIgggACADKAIAIAcoAgAgBEHgAGpBwAAQ8AE2AgAgBigCABDNAQRAIAUgBigCADYCACAFKAIAIQAgBCQFIAAPCyAEQYwDaiIAIAEoAgAgCygCACABKAIAayAKKAIAIAIoAgAgCBD+ATYCACAAKAIAEM0BQQBHIQMgACgCACECIAMEQCAFIAI2AgAgBSgCACEAIAQkBSAADwsgAgR/IAEgASgCACAAKAIAajYCACAFIAEoAgAgCSgCAGs2AgAgBSgCACEAIAQkBSAABSAFQQA2AgAgBSgCACEAIAQkBSAACwulBQEGfyMFIQUjBUHAAmokBSAFQaACaiEGIAVBnAJqIgcgADYCACAFQZgCaiIJIAE2AgAgBUGUAmoiCiACNgIAIAVBkAJqIgIgAzYCACAFQYwCaiIIIAQ2AgAgBUGIAmoiBCAHKAIANgIAIAIoAgBB/wFLBEAgBkFSNgIAIAYoAgAhACAFJAUgAA8LIAUhACAFQYACaiEDIAVBpAJqIgdBADoAACAFQYQCaiIBQQE2AgADQCABKAIAIAgoAgBBAWpJBEAgByABKAIAaiAIKAIAQQFqIAEoAgBrOgAAIAEgASgCAEEBajYCAAwBCwsgAUEANgIAA0AgASgCACACKAIASQRAIAAgASgCAGogByAKKAIAIAEoAgBBAnRqLQACaiwAADoAACABIAEoAgBBAWo2AgAMAQsLIAMgBCgCAEEBaiAJKAIAQQFrIAAgAigCABCRAjYCACADKAIAEM0BQQBHIQcgAygCACEIIAcEQCAGIAg2AgAgBigCACEAIAUkBSAADwsgCEEBSyADKAIAIAIoAgBBAm5JcQRAIAQoAgAgAygCADoAACAGIAMoAgBBAWo2AgAgBigCACEAIAUkBSAADwsgAigCAEGAAUsEQCAGQX82AgAgBigCACEAIAUkBSAADwsgAigCAEEBakECbkEBaiAJKAIASwRAIAZBun82AgAgBigCACEAIAUkBSAADwsgBCgCACACKAIAQf8AajoAACAAIAIoAgBqQQA6AAAgAUEANgIAA0AgASgCACACKAIASQRAIAQoAgAgASgCAEECbkEBamogACABKAIAai0AAEEEdCAAIAEoAgBBAWpqLQAAajoAACABIAEoAgBBAmo2AgAMAQsLIAYgAigCAEEBakECbkEBajYCACAGKAIAIQAgBSQFIAALmAcBEH8jBSEEIwVB0ANqJAUgBEG8A2ohBSAEQbgDaiIMIAA2AgAgBEG0A2oiDyABNgIAIARBsANqIgAgAjYCACAEQawDaiIGIAM2AgAgBEGoA2oiAUEANgIAIARBpANqIgJBADYCACAEQaADaiINIARB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akEAQfwHIAMoAgBBAnRrEPYHGiANQQhqIgggBygCACARKAIAIAEoAgBBgAhqIAMoAgAgACgCABCSAjYCACAIKAIAEM0BBEAgDiAIKAIANgIAIA4oAgAhACANJAUgAA8LIA1BBGohCyANIQACQCAEKAIABEAgBCgCACgCAARAIAsgBSgCACABKAIAIAMoAgAQnwI2AgAgACABKAIAQYAIaiABKAIAIAMoAgAQnwI2AgAgCygCACAIKAIAIAAoAgBqSwRAIAgoAgBBDGogAigCAEkNAwsgDiAGKAIAIAcoAgAgCigCACAPKAIAIAIoAgAgECgCACAFKAIAIAkoAgAQnQI2AgAgDigCACEAIA0kBSAADwsLCyAIKAIAQQxqIAIoAgBPBEAgDkEANgIAIA4oAgAhACANJAUgAA8LIAcgBygCACAIKAIAajYCACAEKAIABEAgBCgCAEEANgIACyAFKAIABEAgBSgCACABKAIAQYAIakGACBD0BxoLIA4gBigCACAHKAIAIAooAgAgDygCACACKAIAIBAoAgAgASgCAEGACGogCSgCABCdAjYCACAOKAIAIQAgDSQFIAAL+gIBBX8jBSEIIwVBMGokBSAIQSBqIgogADYCACAIQRxqIgkgATYCACAIQRhqIgEgAjYCACAIQRRqIgsgAzYCACAIQRBqIgIgBDYCACAIQQxqIgwgBTYCACAIQQhqIgUgBjYCACAIQQRqIgYgBzYCACAJKAIAIQAgASgCACAJKAIAayEBIAsoAgAhAyACKAIAIQQgBSgCACEFIAYoAgAhBiAMKAIABH8gACABIAMgBCAFIAYQlwIFIAAgASADIAQgBSAGEJkCCyEDIAhBJGohASAIIgAgAzYCACAIKAIAEM0BQQBHIQQgCCgCACEDIAQEQCABIAM2AgAgASgCACEAIAgkBSAADwsgA0UEQCABQQA2AgAgASgCACEAIAgkBSAADwsgCSAJKAIAIAAoAgBqNgIAIAkoAgAgCigCAGsgAigCAEEBa08EfyABQQA2AgAgASgCACEAIAgkBSAABSABIAkoAgAgCigCAGs2AgAgASgCACEAIAgkBSAACwutAQEDfyMFIQMjBUEgaiQFIANBEGoiBCAANgIAIANBDGoiBSABNgIAIANBCGoiASACNgIAIANBBGoiAkEANgIAIAMiAEEANgIAA0Ag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AiQFIAALnRIBBH8jBSEGIwVBIGokBSAGQRBqIQQgBiIFQQxqIgMgADYCACAFQQhqIgAgATYCACAFQQRqIgEgAjYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIAQQprDsMIABYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAQIDBAUGBwgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWERITFBUWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgoLDBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWDg8QFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCRYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFg0WCyABKAIAQQFLBEAgBEFYNgIADBcFIAMoAgAgASgCADYCACAEIAMoAgAoAgA2AgAMFwsACyAFIAEoAgA2AgAgBSgCAEEWSgRAIAVBFjYCAAsgBSgCAARAIAMoAgAgBSgCAEEASDYCMCADKAIAIAUoAgA2AiwLIAMoAgAoAixBAE4EQCAEIAMoAgAoAiw2AgAMFgUgBEEANgIADBYLAAsgASgCAEEASwRAIAEoAgBBCkkgASgCAEEeS3IEQCAEQVY2AgAMFgsLIAMoAgAgASgCADYCBCAEIAMoAgAoAgQ2AgAMFAsgASgCAEEASwRAIAEoAgBBBkkgASgCAEEeS3IEQCAEQVY2AgAMFQsLIAMoAgAgASgCADYCDCAEIAMoAgAoAgw2AgAMEwsgASgCAEEASwRAIAEoAgBBBkkgASgCAEEdS3IEQCAEQVY2AgAMFAsLIAMoAgAgASgCADYCCCAEIAMoAgAoAgg2AgAMEgsgASgCAEEASwRAIAEoAgBBAUkgASgCAEEdS3IEQCAEQVY2AgAMEwsLIAMoAgAgASgCADYCECAEIAEoAgA2AgAMEQsgASgCAEEASwRAIAEoAgBBA0kgASgCAEEHS3IEQCAEQVY2AgAMEgsLIAMoAgAgASgCADYCFCAEIAMoAgAoAhQ2AgAMEAsgAygCACABKAIANgIYIAQgAygCACgCGDYCAAwPCyABKAIAQQBLBEAgASgCAEEBSSABKAIAQQhLcgRAIARBVjYCAAwQCwsgAygCACABKAIANgIc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BiQFIAALC8kBAQN/IwUhAyMFQSBqJAUgA0EQaiEEIANBDGoiBSAANgIAIANBCGoiACABNgIAIANBBGoiASACNgIAIAAoAgAgASgCAEkEQCAEQWI2AgAgBCgCACEAIAMkBSAADwsgAyIAQQA2AgACQAJAA0AgACgCACABKAIASw0CIAUoAgAgACgCAEEBdGouAQBFDQEgACAAKAIAQQFqNgIADAALAAsgBEFiNgIAIAQoAgAhACADJAUgAA8LIARBADYCACAEKAIAIQAgAyQFIAALogMBBH8jBSEEIwVBIGokBSAEQQhqIQUgBEEcaiIDIAA2AgAgBEEYaiIGIAE2AgAgBEEUaiIBIAI2AgAgBEEQaiIAIAYoAgA2AgAgBEEMaiICQQE2AgAgBigCACADKAIAKAIARwRAIAUgAygCACgCACADKAIAKAIEazYCACADKAIAIAMoAgAoAgw2AhAgAygCACAFKAIANgIMIAMoAgAgAygCACgCBDYCCCADKAIAIAAoAgAgBSgCAGs2AgQgAygCACgCDCADKAIAKAIQa0EISQRAIAMoAgAgAygCACgCDDYCEAsgAkEANgIACyADKAIAIAAoAgAgASgCAGo2AgAgACgCACABKAIAaiADKAIAKAIIIAMoAgAoAhBqSyAAKAIAIAMoAgAoAgggAygCACgCDGpJcUUEQCACKAIAIQAgBCQFIAAPCyAEQQRqIgUgACgCACABKAIAaiADKAIAKAIIazYCACAEIAUoAgAgAygCACgCDEoEfyADKAIAKAIMBSAFKAIACyIANgIAIAMoAgAgBCgCADYCECACKAIAIQAgBCQFIAAL9wIBCX8jBSEDIwVBQGskBSADQQhqIQkgA0EEaiEEIAMhByADQTBqIgggADYCACADQSxqIgAgATYCACADQShqIgUgAjYCACADQSRqIgogCCgCACgCJDYCACADQSBqIgIgACgCACgCCDYCACADQRxqIgEgACgCACgCEDYCACADQRhqIgsgCCgCACgCBDYCACADQRRqIgYgCygCACAIKAIAKAIYajYCACADQRBqIgAgBSgCAEF4ajYCACADQQM2AgwDQCAGKAIAQQJqIAAoAgBNBEAgCSAGKAIAIAsoAgBrNgIAIARBADYCAANAIAYoAgAhBSAEKAIAQQNJBEAgByAFIAQoAgBqIAIoAgAgASgCABC7AjYCAAJAAkAgBCgCAEUNACAKKAIAIAcoAgBBAnRqKAIARQ0ADAELIAooAgAgBygCAEECdGogCSgCACAEKAIAajYCAAsgBCAEKAIAQQFqNgIADAELCyAGIAVBA2o2AgAMAQsLIAMkBQvjAwEMfyMFIQMjBUFAayQFIANBDGohCCADQQhqIQQgA0EEaiEKIAMhCSADQTxqIgYgADYCACADQThqIgAgATYCACADQTRqIgcgAjYCACADQTBqIgsgBigCACgCJDYCACADQSxqIg0gACgCACgCCDYCACADQShqIg4gACgCACgCEDYCACADQSRqIgIgBigCACgCLDYCACADQSBqIgEgACgCACgCBDYCACADQRxqIgwgBigCACgCBDYCACADQRhqIgUgDCgCACAGKAIAKAIYajYCACADQRRqIgAgBygCAEF4ajYCACADQQM2AhADQCAFKAIAQQJqIAAoAgBNBEAgCCAFKAIAIAwoAgBrNgIAIARBADYCAANAAkAgBSgCACEHIAQoAgBBA08NACAKIAcgBCgCAGogASgCACAOKAIAELsCNgIAIAkgBSgCACAEKAIAaiANKAIAQQgQuwI2AgAgBCgCAEUEQCACKAIAIAooAgBBAnRqIAgoAgAgBCgCAGo2AgALAkACQCAEKAIARQ0AIAsoAgAgCSgCAEECdGooAgBFDQAMAQsgCygCACAJKAIAQQJ0aiAIKAIAIAQoAgBqNgIACyAEIAQoAgBBAWo2AgAMAQsLIAUgB0EDajYCAAwBCwsgAyQFC1ABAn8jBSEDIwVBEGokBSADQQhqIgQgADYCACADQQRqIgAgATYCACADIAI2AgAgBCgCACAAKAIAIAMoAgAgACgCACgCEBDJAiEAIAMkBSAAC7cCAQZ/IwUhBCMFQUBrJAUgBEEMaiIFIAA2AgAgBEEIaiIAIAE2AgAgBEEEaiIBIAI2AgAgBCADNgIAIAAoAgAhAiABKAIAIQEgBCgCACEDIAAoAgAoAhAhBiAEQTBqIgAgBSgCADYCACAEQSxqIgUgAjYCACAEQShqIgcgATYCACAEQSRqIgggAzYCACAEQSBqIgkgBjYCACAEQRxqIgZBADYCACAEQRhqIgIgACgCACgCBDYCACAEQRRqIgMgBygCACACKAIAazYCACAEQRBqIgEgACgCACgCGDYCAANAIAEo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IAQ2AgAgDEEYaiIEIAU2AgAgDEEUaiIFIAY2AgAgDEEQaiIGIAc2AgAgDEEMaiIHIAg2AgAgDEEIaiIIIAk2AgAgDEEEaiIJIAo2AgAgDCALNgIAIAwoAgAEfyANIA4oAgAgACgCACABKAIAIAIoAgAgAygCACAEKAIAIAUoAgAgBigCACAHKAIAIAgoAgAgCSgCABDeAjYCACANKAIAIQAgDCQFIAAFIA0gDigCACAAKAIAIAEoAgAgAigCACADKAIAIAQoAgAgBSgCACAGKAIAIAcoAgAgCCgCACAJKAIAEN4CNgIAIA0oAgAhACAMJAUgAAsLlwsBCn8jBSELIwVB0AFqJAUgC0HAAWohDSALQShqIgwgADYCACALQSRqIgAgATYCACALQSBqIgEgAjYCACALQRxqIgIgAzYCACALQRhqIgMgBDYCACALQRRqIgQgBTYCACALQRBqIgUgBjYCACALQQxqIgYgBzYCACALQQhqIgcgCDYCACALQQRqIgggCTYCACALIAo2AgAgACgCACEAIAEoAgAhASACKAIAIQIgAygCACEDIAQoAgAhBCAFKAIAIQUgBigCACEGIAcoAgAhByAIKAIAIQ4gCygCACEPIAtBvAFqIhAgDCgCADYCACALQbgBaiIMIAA2AgAgC0G0AWoiESABNgIAIAtBsAFqIgkgAjYCACALQawBaiICIAM2AgAgC0GoAWoiCCAENgIAIAtBpAFqIgQgBTYCACALQaABaiIKIAY2AgAgC0GcAWoiAyAHNgIAIAtBmAFqIgEgDjYCACALQZQBaiISIA82AgAgC0HMAGoiBSALQYABaiIAIBAoAgAgDCgCABCAAjYCACAFKAIAEM0BBEAgDUG6fzYCACANKAIAIQAgCyQFIAAPCyALQfAAaiITIBEoAgAgCSgCACABKAIAQQFrai0AABCBAiALQeAAaiIRIAIoAgAgCCgCACABKAIAQQFrai0AABCBAiALQdAAaiIUIAQoAgAgCigCACABKAIAQQFrai0AABCBAiAAIAMoAgAgASgCAEEDdGpBfGovAQAgCigCACABKAIAQQFrai0AAEECdEGwNGooAgAQiAIgABCEAiAAIAMoAgAgASgCAEEDdGpBfmovAQAgCSgCACABKAIAQQFrai0AAEECdEHANWooAgAQiAIgABCEAiALQcgAaiECIAtBxABqIQQgEigCAARAIAIgCCgCACABKAIAQQFrai0AADYCACAEIAIoAgAgAigCAEEYSQR/IAIoAgAFQRgLazYCACAEKAIABEAgACADKAIAIAEoAgBBAWtBA3RqKAIAIAQoAgAQiAIgABCEAgsgACADKAIAIAEoAgBBAWtBA3RqKAIAIAQoAgB2IAIoAgAgBCgCAGsQiAIFIAAgAygCACABKAIAQQFrQQN0aigCACAIKAIAIAEoAgBBAWtqLQAAEIgCCyALQcYBaiEMIAtBxQFqIQ4gC0HEAWohDyALQTxqIQUgC0E4aiEEIAtBNGohBiALQTBqIQcgC0EsaiEQIAAQhAIgC0FAayICIAEoAgBBAms2AgADQCACKAIAIAEoAgBJBEAgDCAKKAIAIAIoAgBqLAAAOgAAIA4gCCgCACACKAIAaiwAADoAACAPIAkoAgAgAigCAGosAAA6AAAgBSAMLQAAQQJ0QbA0aigCADYCACAEIA4tAAA2AgAgBiAPLQAAQQJ0QcA1aigCADYCACAAIBEgDi0AABCCAiAAIBMgDy0AABCCAiAAEIQCIAAgFCAMLQAAEIICIAAQhAIgACADKAIAIAIoAgBBA3RqLwEEIAUoAgAQiAIgBSgCACAGKAIAakEYSwRAIAAQhAILIAAgAygCACACKAIAQQN0ai8BBiAGKAIAEIgCIAAQhAIgEigCAARAIAcgBCgCACAEKAIAQRhJBH8gBCgCAAVBGAtrNgIAIAcoAgAEQCAAIAMoAgAgAigCAEEDdGooAgAgBygCABCIAiAAEIQCCyAAIAMoAgAgAigCAEEDdGooAgAgBygCAHYgBCgCACAHKAIAaxCIAgUgACADKAIAIAIoAgBBA3RqKAIAIAQoAgAQiAILIAAQhAIgAiACKAIAQX9qNgIADAELCyAAIBMQhQIgACAREIUCIAAgFBCFAiAQIAAQhgI2AgAgECgCAAR/IA0gECgCADYCACANKAIAIQAgCyQFIAAFIA1Bun82AgAgDSgCACEAIAskBSAACwtFAQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAIoAgBBAEdBJGxB4B5qIAMoAgBBAnRqKAIAIQAgAiQFIAALnDIBeX8jBSEGIwVBgARqJAUgBkH0A2ohPCAGQfADaiE9IAZB7ANqISwgBkHoA2ohbyAGQeQDaiFwIAZB4ANqIS0gBkHcA2ohcSAGQdgDaiEuIAZB1ANqISQgBkHQA2ohHCAGQcwDaiE+IAZByANqIQcgBkHEA2ohEyAGQcADaiFWIAZBvANqIT8gBkG4A2ohJSAGQbQDaiFAIAZBsANqIQsgBkGsA2ohDyAGQagDaiEvIAZBpANqIVcgBkGgA2ohHSAGQZwDaiFYIAZBmANqIUEgBkGUA2ohWSAGQZADaiEXIAZBjANqIVogBkGIA2ohWyAGQYQDaiFyIAZBgANqIUIgBkH8AmohQyAGQfgCaiEwIAZB9AJqIXMgBkHwAmohdCAGQewCaiExIAZB6AJqIXUgBkHkAmohMiAGQeACaiEmIAZB3AJqIR4gBkHYAmohRCAGQdQCaiEIIAZB0AJqIRQgBkHMAmohXCAGQcgCaiFFIAZBxAJqIScgBkHAAmohRiAGQbwCaiEMIAZBuAJqIRAgBkG0AmohMyAGQbACaiFdIAZBrAJqIR8gBkGoAmohXiAGQaQCaiFHIAZBoAJqIV8gBkGcAmohGCAGQZgCaiFgIAZBlAJqIWEgBkGQAmohdiAGQYwCaiFIIAZBiAJqIUkgBkGEAmohNCAGQYACaiF3IAZB/AFqIXggBkH4AWohNSAGQfQBaiF5IAZB8AFqITYgBkHsAWohKCAGQegBaiEgIAZB5AFqIUogBkHgAWohCSAGQdwBaiEVIAZB2AFqIWIgBkHUAWohSyAGQdABaiEpIAZBzAFqIUwgBkHIAWohDSAGQcQBaiERIAZBwAFqITcgBkG8AWohYyAGQbgBaiEhIAZBtAFqIWQgBkGwAWohTSAGQawBaiFlIAZBqAFqIRkgBkGkAWohZiAGQaABaiFnIAZBnAFqIXogBkGYAWohTiAGQZQBaiFPIAZBkAFqITggBkGMAWoheyAGQYgBaiF8IAZBhAFqITkgBkGAAWohfSAGQfwAaiE6IAZB+ABqISogBkH0AGohIiAGQfAAaiFQIAZB7ABqIQogBkHoAGohFiAGQeQAaiFoIAZB4ABqIVEgBkHcAGohKyAGQdgAaiFSIAZB1ABqIQ4gBkHQAGohEiAGQcwAaiE7IAZByABqIWkgBkHEAGohIyAGQUBrIWogBkE8aiFTIAZBOGohayAGQTRqIRogBkEwaiFsIAZBLGohbSAGQShqIX4gBkEkaiEbIAZBIGoi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IFIoAgBJBEAgaiAKKAIAIDkoAgAgOigCABC7AjYCACBTIAooAgAgIigCAGs2AgAgayAqKAIAIGooAgBBAnRqKAIANgIAIBogIigCACBrKAIAajYCACAqKAIAIGooAgBBAnRqIFMoAgA2AgACQCAOKAIAQQBLIAooAgBBAWogDigCAGsQ0AEgCigCAEEBahDQAUZxBEAgIyAKKAIAQQVqIAooAgBBBWogDigCAGsgKygCABC8AkEEajYCACAKIAooAgBBAWo2AgAgTygCACAKKAIAIBYoAgBrIBYoAgBBACAjKAIAQQNrEPkCBSBrKAIAIGgoAgBLBEAgGigCABDQASAKKAIAENABRgRAICMgCigCAEEEaiAaKAIAQQRqICsoAgAQvAJBBGo2AgAgbCAKKAIAIBooAgBrNgIAA0ACQCAKKAIAIBYoAgBLIBooAgAgUSgCAEtxRQ0AIAooAgBBf2otAAAgGigCAEF/ai0AAEcNACAKIAooAgBBf2o2AgAgGiAaKAIAQX9qNgIAICMgIygCAEEBajYCAAwBCwsgEiAOKAIANgIAIA4gbCgCADYCACBPKAIAIAooAgAgFigCAGsgFigCACBsKAIAQQJqICMoAgBBA2sQ+QIMAwsLIAogCigCACAKKAIAIBYoAgBrQQh1IH0oAgBqajYCAAwDCwsgCiAKKAIAICMoAgBqNgIAIBYgCigCADYCAAJAIAooAgAgUigCAE0EQCBTKAIAQQJqIQAgKigCACAiKAIAIFMoAgBqQQJqIDkoAgAgOigCABC7AkECdGogADYCACAKKAIAQX5qICIoAgBrIQAgKigCACAKKAIAQX5qIDkoAgAgOigCABC7AkECdGogADYCAANAIAooAgAgUigCAEsNAiASKAIAQQBLIAooAgAQ0AEgCigCACASKAIAaxDQAUZxRQ0CIG0gCigCAEEEaiAKKAIAQQRqIBIoAgBrICsoAgAQvAJBBGo2AgAgfiASKAIANgIAIBIgDigCADYCACAOIH4oAgA2AgAgCigCACAiKAIAayEAICooAgAgCigCACA5KAIAIDooAgAQuwJBAnRqIAA2AgAgTygCAEEAIBYoAgBBACBtKAIAQQNrEPkCIAogCigCACBtKAIAajYCACAWIAooAgA2AgAMAAsACwsMAQsLIA4oAgAhACA7KAIAIQEgOCgCACAO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ai0AAEcNAyAHIAcoAgBBf2o2AgAgIiAiKAIAQX9qNgIAIA0gDSgCAEEBajYCAAwACwALCyAHIAcoAgAgBygCACALKAIAa0EIdUEBamo2AgAMAwsgFyAMKAIANgIAIAwgSigCADYCACBgKAIAIAcoAgAgCygCAGsgCygCACBKKAIAQQJqIA0oAgBBA2sQ+QILIAcgBygCACANKAIAajYCACALIAcoAgA2AgACQCAHKAIAIGIoAgBNBEAgNygCAEECaiEAIDUoAgAgGygCACA3KAIAakECaiBHKAIAIEYoAgAQuwJBAnRqIAA2AgAgHygCACAbKAIAIDcoAgBqQQJqIDQoAgBBCBC7AkECdGogADYCACAHKAIAQX5qIBsoAgBrIQAgNSgCACAHKAIAQX5qIEcoAgAgRigCABC7AkECdGogADYCACAfKAIAIAcoAgBBfmogNCgCAEEIELsCQQJ0aiAANgIAA0AgBygCACBiKAIASw0CIBcoAgBBAEsgBygCABDQASAHKAIAIBcoAgBrENABRnFFDQIgdiAHKAIAQQRqIAcoAgBBBGogFygCAGsgICgCABC8AkEEajYCACCUASAXKAIANgIAIBcgDCgCADYCACAMIJQBKAIANgIAIAcoAgAgGygCAGshACA1KAIAIAcoAgAgRygCACBGKAIAELsCQQJ0aiAANgIAIAcoAgAgGygCAGshACAfKAIAIAcoAgAgNCgCAEEIELsCQQJ0aiAANgIAIGAoAgBBACALKAIAQQAgdigCAEEDaxD5AiAHIAcoAgAgdigCAGo2AgAgCyAHKAIANgIADAALAAsLDAELCyAMKAIAIQAgSSgCACEBIEUoAgAgDCgCAAR/IAAFIAELNgIAIBcoAgAhACBJKAIAIQEgRSgCACAXKAIABH8gAAUgAQs2AgQgMyAgKAIAIAsoAgBrNgIAIDMoAgAhACAGJAUgAA8LIG0oAgAhBCABKAIAIQEgACgCACEAIAIoAgAhAiADKAIAIQMgUiBsKAIANgIAIGYgBDYCACBTIAE2AgAggAEgADYCACCYASACNgIAIJkBIAM2AgAgVEEFNgIAICkgUigCACgCJDYCACA8IIABKAIAKAIINgIAID0gUigCACgCLDYCACBVIIABKAIAKAIENgIAIB0gUigCACgCBDYCACBnIJgBKAIANgIAIAkgZygC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BE8EQCAcKAIAIB0oAgBKBEAgASAPKAIANgIAIAIgDigCADYCACADIAAoAgA2AgAMAgsLIBQoAgBBAkcNAiAAKAIAIA0oAgBPDQIgACAAKAIAQQFqNgIAAkAgAigCAARAIAcoAgBBAEsgACgCABDQASAAKAIAIAcoAgBrENABRnEEQCAQIAAoAgBBBGogACgCAEEEaiAHKAIAayAEKAIAELwCQQRqNgIAIB4gECgCAEECdDYCACAfIAEoAgBBAnQgAigCAEEBahDUAWtBAWo2AgAgECgCAEEETwRAIB4oAgAgHygCAEwNAyABIBAoAgA2AgAgAkEANgIAIAMgACgCADYCAAsLCwsgEUH/wdcvNgIAIBIgCigCACATKAIAIAAoAgAgBCgCACARIBYoAgBBB3FBuAFqEQkANgIAICAgEigCAEECdCARKAIAQQFqENQBazYCACAhIAEoAgBBAnQgAigCAEEBahDUAWtBB2o2AgAgEigCAEEESQ0CICAoAgAgISgCAEwNAiABIBIoAgA2AgAgAiARKAIANgIAIAMgACgCADYCAAwACwALCyACKAIABEADQAJAIAMoAgAgBSgCAEsgAygCACACKAIAQQJrayAVKAIAS3FFDQAgAygCAEF/ai0AACADKAIAIAIoAgBrLQABRw0AIAMgAygCAEF/ajYCACABIAEoAgBBAWo2AgAMAQsLIAggBygCADYCACAHIAIoAgBBAms2AgALCyAiIAMoAgAgBSgCAGs2AgAgGSgCACAiKAIAIAUoAgAgAigCACABKAIAQQNrEPkCIAAgAygCACABKAIAaiIjNgIAIAUgIzYCAANAAkAgACgCACANKAIATSAIKAIAQQBLcUUNACAAKAIAENABIAAoAgAgCCgCAGsQ0AFHDQAgASAAKAIAQQRqIAAoAgBBBGogCCgCAGsgBCgCABC8AkEEajYCACACIAgoAgA2AgAgCCAHKAIANgIAIAcgAigCADYCACAZKAIAQQAgBSgCAEEAIAEoAgBBA2sQ+QIgACAAKAIAIAEoAgBqNgIAIAUgACgCADYCAAwBCwsMAQsLIAcoAgAhACAMKAIAIQEgCygCACAHKAIABH8gAAUgAQs2AgAgCCgCACEAIAwoAgAhASALKAIAIAgoAgAEfyAABSABCzYCBCAEKAIAIAUoAgBrIQAgBiQFIAALjREB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IRwgBkHoD2ohkQIgBkHkD2ohugMgBkHgD2ohnQEgBkHcD2ohkgIgBkHYD2ohkwIgBkHUD2oh2QEgBkHQD2ohUyAGQcwPaiGUAiAGQcgPaiGVAiAGQcQPaiHsAiAGQcAPaiGWAiAGQbwPaiHaASAGQbgPaiHbASAGQbQPaiGXAiAGQbAPaiG7AyAGQawPaiEvIAZBqA9qIe0CIAZBpA9qIWogBkGgD2ohvAMgBkGcD2ohayAGQZgPaiGeASAGQZQPaiHuAiAGQZAPaiFUIAZBjA9qIe8CIAZBiA9qIWwgBkGED2ohbSAGQYAPaiG9AyAGQfwOaiG+AyAGQfgOaiHcASAGQfQOaiECIAZB8A5qIZ8BIAZB7A5qIZgCIAZB6A5qIUMgBkHkDmohoAEgBkHgDmohFCAGQdwOaiFEIAZB2A5qIZkCIAZB1A5qIb8DIAZB0A5qIZoCIAZBzA5qIW4gBkHIDmohwAMgBkHEDmohoQEgBkHADmoh8AIgBkG8DmohogEgBkG4DmohKCAGQbQOaiHBAyAGQbAOaiE6IAZBrA5qIfECIAZBqA5qIfICIAZBpA5qIR0gBkGgDmohmwIgBkGcDmohwgMgBkGYDmohowEgBkGUDmohnAIgBkGQDmohnQIgBkGMDmoh3QEgBkGIDmohVSAGQYQOaiGeAiAGQYAOaiGfAiAGQfwNaiHzAiAGQfgNaiGgAiAGQfQNaiHeASAGQfANaiHfASAGQewNaiGhAiAGQegNaiHDAyAGQeQNaiEwIAZB4A1qIfQCIAZB3A1qIW8gBkHYDWohxAMgBkHUDWohcCAGQdANaiGkASAGQcwNaiH1AiAGQcgNaiFWIAZBxA1qIfYCIAZBwA1qIXEgBkG8DWohciAGQbgNaiHFAyAGQbQNaiHGAyAGQbANaiHgASAGQawNaiEDIAZBqA1qIaUBIAZBpA1qIaICIAZBoA1qIUUgBkGcDWohpgEgBkGYDWohFSAGQZQNaiFGIAZBkA1qIaMCIAZBjA1qIccDIAZBiA1qIaQCIAZBhA1qIXMgBkGADWohyAMgBkH8DGohpwEgBkH4DGoh9wIgBkH0DGohqAEgBkHwDGohKSAGQewMaiHJAyAGQegMaiE7IAZB5AxqIfgCIAZB4AxqIfkCIAZB3AxqIR4gBkHYDGohpQIgBkHUDGohygMgBkHQDGohqQEg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NgIAIJIBKAIAIKADKAIASyAaKAIAIJIBKAIAaiBQKAIARnIEQCBPKAIAIC4oAgBBAWo2Ahgg1AJBATYCAAwFCwsLCwsgoQMoAgAgogMoAgBBAnRqIC4oAgA2AgACQAJAAkADQAJAIKQDIKQDKAIAIgdBf2o2AgAgB0UNACAjKAIAINwCKAIATQ0AIP4BINcCKAIAICMoAgAgzQEoAgBxQQN0ajYCACDYAigCACEHINkCKAIAIQggDyDYAigCACDZAigCAEkEfyAHBSAICzYCAAJAAkAg1QIoAgBFDQAgIygCACAPKAIAaiBiKAIATw0AIM8BIPsBKAIAICMoAgBqNgIAIBooAgAgDygCAGogzwEoAgAgDygCAGogUCgCACDaAigCACDbAigCABC9AiEHIA8gDygCACAHajYCACAjKAIAIA8oAgBqIGIoAgBPBEAgzwEgzAEoAgAgIygCAGo2AgALDAELIM8BIMwBKAIAICMoAgBqNgIAIBooAgAgDygCAGogzwEoAgAgDygCAGogUCgCABC8AiEHIA8gDygCACAHajYCAAsgDygCACCPASgCAEsEQCAPKAIAIN0CKAIAICMoAgBrSwRAIN0CICMoAgAgDygCAGo2AgALII8BIA8oAgA2AgAgjgEoAgAgNigCAEEDdGogLigCACAjKAIAa0ECajYCACCOASgCACA2KAIAQQN0aiAPKAIANgIEIDYgNigCAEEBajYCACAPKAIAQYAgSw0BIBooAgAgDygCAGogUCgCAEYNAQsgIygCACEHIM8BKAIAIA8oAgBqLQAAIBooAgAgDygCAGotAABIBEAg/AEoAgAgBzYCACDYAiAPKAIANgIAICMoAgAgowMoAgBNDQMg/AEg/gEoAgBBBGo2AgAgIyD+ASgCACgCBDYCAAUg/QEoAgAgBzYCACDZAiAPKAIANgIAICMoAgAgowMoAgBNDQQg/QEg/gEoAgA2AgAgIyD+ASgCACgCADYCAAsMAQsLDAILIPwBIPsDNgIADAELIP0BIPsDNgIACyD9ASgCAEEANgIAIPwBKAIAQQA2AgAgTygCACDdAigCAEEIazYCGCDUAiA2KAIANgIACyDQASDUAigCADYCAAwECyCTASgCACEHIJQBKAIAIQgg0QEoAgAhCSDSASgCACEKIIECKAIAIQwgggIoAgAhECCDAigCACERIIQCKAIAIRIgSSBkKAIANgIAILgBIAc2AgAgFyAINgIAIEogCTYCACC3AiAKNgIAIN8DIAw2AgAguAIgEDYCACB/IBE2AgAg4AMgEjYCACC5AUEGNgIAIIsDILgBKAIAKAIUQf8fSQR/ILgBKAIAKAIUBUH/HwsiBzYCACC6ASBJKAIAKAIENgIAICsgFygCACC6ASgCAGs2AgAg4QMguAEoAgAoAgg2AgAgPSC5ASgCAEEDRgR/QQMFQQQLNgIAIIwDIEkoAgAoAiQ2AgAgjQMgFygCACDhAygCACC5ASgCABC7AjYCACAgIIwDKAIAII0DKAIAQQJ0aigCADYCACC5AiBJKAIAKAIsNgIAIOIDILgBKAIAKAIEQQFrNgIAILsBQQEg4gMoAgB0QQFrNgIAILoCQQA2AgAguwJBADYCACDvASBJKAIAKAIINgIAIFwgSSgCACgCDDYCACC8AiDvASgCACBcKAIAajYCACC9AiC6ASgCACBcKAIAajYCACCOAyC7ASgCACArKAIATwR/QQAFICsoAgAguwEoAgBrCyIHNgIAIL4CIEkoAgAoAhA2AgAg8AEguQIoAgAgKygCACC7ASgCAHFBA3RqNgIAIPEBILkCKAIAICsoAgAguwEoAgBxQQN0akEEajYCACC/AiArKAIAQQlqNgIAIDNBADYCACCPA0EBILgBKAIAKAIMdDYCACCAASDgAygCAEEBazYCACDkAyC4AigCAEEDajYCACCBASC4AigCADYCAAJAAkACQANAIIEBKAIAIOQDKAIATw0CIN8DKAIAIQcgvAEggQEoAgBBA0YEfyAHKAIAQQFrBSAHIIEBKAIAQQJ0aigCAAsiBzYCACCQAyArKAIAILwBKAIAazYCACBdQQA2AgAgvAEoAgBBAWsgKygCACBcKAIAa0kEQCAXKAIAID0oAgAQ8QIgFygCACC8ASgCAGsgPSgCABDxAkYEQCBdIBcoAgAgPSgCAGogFygCACA9KAIAaiC8ASgCAGsgSigCABC8AiA9KAIAajYCAAsFIJEDIO8BKAIAIJADKAIAajYCACC3AigCAARAILwBKAIAQQFrICsoAgAgvgIoAgBrSSBcKAIAQQFrIJADKAIAa0EDT3EEQCAXKAIAID0oAgAQ8QIgkQMoAgAgPSgCABDxAkYEQCBdIBcoAgAgPSgCAGogkQMoAgAgPSgCAGogSigCACC8AigCACC9AigCABC9AiA9KAIAajYCAAsLCwsgXSgCACCAASgCAEsEQCCAASBdKAIANgIAIH8oAgAgMygCAEEDdGoggQEoAgAguAIoAgBrNgIAIH8oAgAgMygCAEEDdGogXSgCADYCBCAzIDMoAgBBAWo2AgAgXSgCACCLAygCAEsgFygCACBdKAIAaiBKKAIARnINAgsggQEggQEoAgBBAWo2AgAMAAsACyC2AiAzKAIANgIADAELILkBKAIAQQNGBEAggAEoAgAguQEoAgBJBEAgggEgSSgCACAXKAIAEPICNgIAIIIBKAIAIL4CKAIASyArKAIAIIIBKAIAa0GAgBBJcQRAAkACQCC3AigCAEUNACCCASgCACBcKAIATw0AIOYDIO8BKAIAIIIBKAIAajYCACCDASAXKAIAIOYDKAIAIEooAgAgvAIoAgAgvQIoAgAQvQI2AgAMAQsg5QMgugEoAgAgggEoAgBqNgIAIIMBIBcoAgAg5QMoAgAgSigCABC8AjYCAAsggwEoAgAguQEoAgBPBEAggAEggwEoAgA2AgAgfygCACArKAIAIIIBKAIAa0ECajYCACB/KAIAIIMBKAIANgIEIDNBATYCACCDASgCACCLAygCAEsgFygCACCDASgCAGogSigCAEZyBEAgSSgCACArKAIAQQFqNgIYILYCQQE2AgAMBQsLCwsLIIwDKAIAII0DKAIAQQJ0aiArKAIANgIAAkACQAJAA0ACQCCPAyCPAygCACIHQX9qNgIAIAdFDQAgICgCACC+AigCAE0NACDyASC5AigCACAgKAIAILsBKAIAcUEDdGo2AgAgugIoAgAhByC7AigCACEIIAsgugIoAgAguwIoAgBJBH8gBwUgCAs2AgACQAJAILcCKAIARQ0AICAoAgAgCygCAGogXCgCAE8NACC9ASDvASgCACAgKAIAajYCACAXKAIAIAsoAgBqIL0BKAIAIAsoAgBqIEooAgAgvAIoAgAgvQIoAgAQvQIhByALIAsoAgAgB2o2AgAgICgCACALKAIAaiBcKAIATwRAIL0BILoBKAIAICAoAgBqNgIACwwBCyC9ASC6ASgCACAgKAIAajYCACAXKAIAIAsoAgBqIL0BKAIAIAsoAgBqIEooAgAQvAIhByALIAsoAgAgB2o2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ASAlKAIAIIUCKAIAazYCAAsLILADIIUCKAIANgIAILEDIN8CKAIANgIAIGYgASgCADYCAANAIOQCIAAoAgAgZigCAEEcbGooAgg2AgAgiwQgACgCACBmKAIAQRxsaigCBDYCACAAKAIAIGYoAgBBHGxqILADKAIANgIIIAAoAgAgZigCAEEcbGogsQMoAgA2AgQgsAMg5AIoAgA2AgAgsQMgiwQoAgA2AgAg5AIoAgAgZigCAE0EQCBmIGYoAgAg5AIoAgBrNgIADAELCyBnQQA2AgADQCBnKAIAICUoAgBJBEAg5QIgJCgCACBSKAIAazYCACDWASAAKAIAIGcoAgBBHGxqKAIINgIAINcBIAAoAgAgZygCAEEcbGooAgQ2AgAg1gEoAgBBAUYEQCAkICQoAgBBAWo2AgAgZyBnKAIAQQFqNgIADAILIGcgZygCACDWASgCAGo2AgAgJCAkKAIAINYBKAIAajYCACDXASgCAEEDTwRAICYoAgAgJigCACgCBDYCCCAmKAIAICYoAgAoAgA2AgQgJigCACDXASgCAEECazYCAAUgigIg1wEoAgAg5QIoAgBFajYCACCKAigCAARAICYoAgAhByCMBCCKAigCAEEDRgR/IAcoAgBBAWsFIAcgigIoAgBBAnRqKAIACyIHNgIAIIoCKAIAQQJPBEAgJigCACAmKAIAKAIENgIICyAmKAIAICYoAgAoAgA2AgQgJigCACCMBCgCADYCAAsLIDgoAgAg5QIoAgAgUigCACDXASgCACDWASgCABD4AiCOBCgCACDlAigCACBSKAIAINcBKAIAINYBKAIAQQNrEPkCIFIgJCgCADYCAAwBCwsgOCgCABD6AgwBCwsgjQIoAgAgUigCAGshACAGJAUgAAuM1gEBiQR/IwUhBiMFQeAQaiQFIAZBFGoiCyAANgIAIAZBEGoiACABNgIAIAZBDGoiASACNgIAIAZBCGoiAiADNgIAIAZBBGoiAyAENgIAIAYgBTYCACAAKAIAIQAgASgCACEBIAIoAgAhAiADKAIAIQMgBigCACEEIAZBsAJqImggCygCADYCACAGQawCaiKOBCAANgIAIAZBqAJqIiYgATYCACAGQaQCaiLYASACNgIAIAZBoAJqIgcgAzYCACAGQZwCaiIIIAQ2AgAgBkGYAmoijAJBAjYCACAGQZQCaiKyA0EANgIAIAZBkAJqIjggaCgCAEEwajYCACAGQYwCaiIAIAcoAgA2AgAgBkGIAmoiJCAAKAIANgIAIAZBhAJqIlIgACgCADYCACAGQYACaiKNAiAAKAIAIAgoAgBqNgIAIAZB/AFqIrMDII0CKAIAQXhqNgIAIAZB+AFqIgAgaCgCACgCBDYCACAGQfQBaiIJIAAoAgAgaCgCACgCDGo2AgAgBkHYEGoh5gIgBkHUEGohtAMgBkHQEGohtQMgBkHMEGohlwEgBkHIEGohtgMgBkHEEGohmAEgBkHAEGohmQEgBkG8EGoh5wIgBkG4EGoh6AIgBkG0EGohjgIgBkGwEGohQSAGQawQaiGaASAGQagQaiETIAZBpBBqIUIgBkGgEGohjwIgBkGcEGohtwMgBkGYEGohkAIgBkGUEGohaSAGQZAQaiG4AyAGQYwQaiGbASAGQYgQaiHpAiAGQYQQaiGcASAGQYAQaiEnIAZB/A9qIbkDIAZB+A9qITkgBkH0D2oh6gIgBkHwD2oh6wIgBkHsD2ohHCAGQegPaiGRAiAGQeQPaiG6AyAGQeAPaiGdASAGQdwPaiGSAiAGQdgPaiGTAiAGQdQPaiHZASAGQdAPaiFTIAZBzA9qIZQCIAZByA9qIZUCIAZBxA9qIewCIAZBwA9qIZYCIAZBvA9qIdoBIAZBuA9qIdsBIAZBtA9qIZcCIAZBsA9qIbsDIAZBrA9qIS8gBkGoD2oh7QIgBkGkD2ohaiAGQaAPaiG8AyAGQZwPaiFrIAZBmA9qIZ4BIAZBlA9qIe4CIAZBkA9qIVQgBkGMD2oh7wIgBkGID2ohbCAGQYQPaiFtIAZBgA9qIb0DIAZB/A5qIb4DIAZB+A5qIdwBIAZB9A5qIQIgBkHwDmohnwEgBkHsDmohmAIgBkHoDmohQyAGQeQOaiGgASAGQeAOaiEUIAZB3A5qIUQgBkHYDmohmQIgBkHUDmohvwMgBkHQDmohmgIgBkHMDmohbiAGQcgOaiHAAyAGQcQOaiGhASAGQcAOaiHwAiAGQbwOaiGiASAGQbgOaiEoIAZBtA5qIcEDIAZBsA5qITogBkGsDmoh8QIgBkGoDmoh8gIgBkGkDmohHSAGQaAOaiGbAiAGQZwOaiHCAyAGQZgOaiGjASAGQZQOaiGcAiAGQZAOaiGdAiAGQYwOaiHdASAGQYgOaiFVIAZBhA5qIZ4CIAZBgA5qIZ8CIAZB/A1qIfMCIAZB+A1qIaACIAZB9A1qId4BIAZB8A1qId8BIAZB7A1qIaECIAZB6A1qIcMDIAZB5A1qITAgBkHgDWoh9AIgBkHcDWohbyAGQdgNaiHEAyAGQdQNaiFwIAZB0A1qIaQBIAZBzA1qIfUCIAZByA1qIVYgBkHEDWoh9gIgBkHADWohcSAGQbwNaiFyIAZBuA1qIcUDIAZBtA1qIcYDIAZBsA1qIeABIAZBrA1qIQMgBkGoDWohpQEgBkGkDWohogIgBkGgDWohRSAGQZwNaiGmASAGQZgNaiEVIAZBlA1qIUYgBkGQDWohowIgBkGMDWohxwMgBkGIDWohpAIgBkGEDWohcyAGQYANaiHIAyAGQfwMaiGnASAGQfgMaiH3AiAGQfQMaiGoASAGQfAMaiEpIAZB7AxqIckDIAZB6AxqITsgBkHkDGoh+AIgBkHgDGoh+QIgBkHcDGohHiAGQdgMaiGlAiAGQdQMaiHKAyAGQdAMaiGpASAGQcwMaiGmAiAGQcgMaiGnAiAGQcQMaiHhASAGQcAMaiFXIAZBvAxqIagCIAZBuAxqIakCIAZBtAxqIfoCIAZBsAxqIaoCIAZBrAxqIeIBIAZBqAxqIeMBIAZBpAxqIasCIAZBoAxqIcsDIAZBnAxqITEgBkGYDGoh+wIgBkGUDGohdCAGQZAMaiHMAyAGQYwMaiF1IAZBiAxqIaoBIAZBhAxqIfwCIAZBgAxqIVggBkH8C2oh/QIgBkH4C2ohdiAGQfQLaiF3IAZB8AtqIc0DIAZB7AtqIc4DIAZB6AtqIeQBIAZB5AtqIQQgBkHgC2ohqwEgBkHcC2ohrAIgBkHYC2ohRyAGQdQLaiGsASAGQdALaiEWIAZBzAtqIUggBkHIC2ohrQIgBkHEC2ohzwMgBkHAC2ohrgIgBkG8C2oheCAGQbgLaiHQAyAGQbQLaiGtASAGQbALaiH+AiAGQawLaiGuASAGQagLaiEqIAZBpAtqIdEDIAZBoAtqITwgBkGcC2oh/wIgBkGYC2ohgAMgBkGUC2ohHyAGQZALaiGvAiAGQYwLaiHSAyAGQYgLaiGvASAGQYQLaiGwAiAGQYALaiGxAiAGQfwKaiHlASAGQfgKaiFZIAZB9ApqIbICIAZB8ApqIbMCIAZB7ApqIYEDIAZB6ApqIbQCIAZB5ApqIeYBIAZB4ApqIecBIAZB3ApqIbUCIAZB2ApqIdMDIAZB1ApqITIgBkHQCmohggMgBkHMCmoheSAGQcgKaiHUAyAGQcQKaiF6IAZBwApqIbABIAZBvApqIYMDIAZBuApqIVogBkG0CmohhAMgBkGwCmoheyAGQawKaiF8IAZBqApqIdUDIAZBpApqIdYDIAZBoApqIegBIAZBnApqIQUgBkGYCmohsQEgBkGUCmoh6QEgBkGQCmoh1wMgBkGMCmoh2AMgBkGICmoh2QMgBkGECmoh2gMgBkGACmoh2wMgBkH8CWohhQMgBkH4CWohhgMgBkH0CWoh6gEgBkHwCWohsgEgBkHsCWohWyAGQegJaiF9IAZB5AlqIX4gBkHgCWohswEgBkHcCWohtAEgBkHYCWoh6wEgBkHUCWoh7AEgBkHQCWoh7QEgBkHMCWoh7gEgBkHICWohhwMgBkHECWohiAMgBkHACWoh3AMgBkG8CWoh3QMgBkG4CWohtQEgBkG0CWoh3gMgBkGwCWohtgEgBkGsCWohtwEgBkGoCWohiQMgBkGkCWohigMgBkGgCWohtgIgBkGcCWohSSAGQZgJaiG4ASAGQZQJaiEXIAZBkAlqIUogBkGMCWohtwIgBkGICWoh3wMgBkGECWohuAIgBkGACWohfyAGQfwIaiHgAyAGQfgIaiG5ASAGQfQIaiGLAyAGQfAIaiG6ASAGQewIaiErIAZB6AhqIeEDIAZB5AhqIT0gBkHgCGohjAMgBkHcCGohjQMgBkHYCGohICAGQdQIaiG5AiAGQdAIaiHiAyAGQcwIaiG7ASAGQcgIaiG6AiAGQcQIaiG7AiAGQcAIaiHvASAGQbwIaiFcIAZBuAhqIbwCIAZBtAhqIb0CIAZBsAhqIY4DIAZBrAhqIb4CIAZBqAhqIfABIAZBpAhqIfEBIAZBoAhqIb8CIAZBnAhqIeMDIAZBmAhqITMgBkGUCGohjwMgBkGQCGohgAEgBkGMCGoh5AMgBkGICGohgQEgBkGECGohvAEgBkGACGohkAMgBkH8B2ohXSAGQfgHaiGRAyAGQfQHaiGCASAGQfAHaiGDASAGQewHaiHlAyAGQegHaiHmAyAGQeQHaiHyASAGQeAHaiELIAZB3AdqIb0BIAZB2AdqIcACIAZB1AdqIUsgBkHQB2ohvgEgBkHMB2ohGCAGQcgHaiFMIAZBxAdqIcECIAZBwAdqIecDIAZBvAdqIcICIAZBuAdqIYQBIAZBtAdqIegDIAZBsAdqIb8BIAZBrAdqIZIDIAZBqAdqIcABIAZBpAdqISwgBkGgB2oh6QMgBkGcB2ohPiAGQZgHaiGTAyAGQZQHaiGUAyAGQZAHaiEhIAZBjAdqIcMCIAZBiAdqIeoDIAZBhAdqIcEBIAZBgAdqIcQCIAZB/AZqIcUCIAZB+AZqIfMBIAZB9AZqIV4gBkHwBmohxgIgBkHsBmohxwIgBkHoBmohlQMgBkHkBmohyAIgBkHgBmoh9AEgBkHcBmoh9QEgBkHYBmohyQIgBkHUBmoh6wMgBkHQBmohNCAGQcwGaiGWAyAGQcgGaiGFASAGQcQGaiHsAyAGQcAGaiGGASAGQbwGaiHCASAGQbgGaiGXAyAGQbQGaiFfIAZBsAZqIZgDIAZBrAZqIYcBIAZBqAZqIYgBIAZBpAZqIe0DIAZBoAZqIe4DIAZBnAZqIfYBIAZBmAZqIQ0gBkGUBmohwwEgBkGQBmohygIgBkGMBmohTSAGQYgGaiHEASAGQYQGaiEZIAZBgAZqIU4gBkH8BWohywIgBkH4BWoh7wMgBkH0BWohzAIgBkHwBWohiQEgBkHsBWoh8AMgBkHoBWohxQEgBkHkBWohmQMgBkHgBWohxgEgBkHcBWohLSAGQdgFaiHxAyAGQdQFaiE/IAZB0AVqIZoDIAZBzAVqIZsDIAZByAVqISIgBkHEBWohzQIgBkHABWoh8gMgBkG8BWohxwEgBkG4BWohzgIgBkG0BWohzwIgBkGwBWoh9wEgBkGsBWohYCAGQagFaiHQAiAGQaQFaiHRAiAGQaAFaiGcAyAGQZwFaiHSAiAGQZgFaiH4ASAGQZQFaiH5ASAGQZAFaiHTAiAGQYwFaiHzAyAGQYgFaiE1IAZBhAVqIZ0DIAZBgAVqIYoBIAZB/ARqIfQDIAZB+ARqIYsBIAZB9ARqIcgBIAZB8ARqIZ4DIAZB7ARqIWEgBkHoBGohnwMgBkHkBGohjAEgBkHgBGohjQEgBkHcBGoh9QMgBkHYBGoh9gMgBkHUBGoh+gEgBkHQBGohDiAGQcwEaiHJASAGQcgEaiHUAiAGQcQEaiFPIAZBwARqIcoBIAZBvARqIRogBkG4BGohUCAGQbQEaiHVAiAGQbAEaiH3AyAGQawEaiHWAiAGQagEaiGOASAGQaQEaiH4AyAGQaAEaiHLASAGQZwEaiGgAyAGQZgEaiHMASAGQZQEaiEuIAZBkARqIfkDIAZBjARqIUAgBkGIBGohoQMgBkGEBGohogMgBkGABGohIyAGQfwDaiHXAiAGQfgDaiH6AyAGQfQDaiHNASAGQfADaiHYAiAGQewDaiHZAiAGQegDaiH7ASAGQeQDaiFiIAZB4ANqIdoCIAZB3ANqIdsCIAZB2ANqIaMDIAZB1ANqIdwCIAZB0ANqIfwBIAZBzANqIf0BIAZByANqId0CIAZBxANqIfsDIAZBwANqITYgBkG8A2ohpAMgBkG4A2ohjwEgBkG0A2oh/AMgBkGwA2ohkAEgBkGsA2ohzgEgBkGoA2ohpQMgBkGkA2ohYyAGQaADaiGmAyAGQZwDaiGRASAGQZgDaiGSASAGQZQDaiH9AyAGQZADaiH+AyAGQYwDaiH+ASAGQYgDaiEPIAZBhANqIc8BIAZBgANqIf8BIAZB/AJqIf8DIAZB+AJqIYAEIAZB9AJqIYEEIAZB8AJqIYIEIAZB7AJqIYMEIAZB6AJqIacDIAZB5AJqIagDIAZB4AJqIYACIAZB3AJqIdABIAZB2AJqIWQgBkHUAmohkwEgBkHQAmohlAEgBkHMAmoh0QEgBkHIAmoh0gEgBkHEAmohgQIgBkHAAmohggIgBkG8AmohgwIgBkG4AmohhAIgBkG0AmohqQMgBkHoAWohACAGQeQBaiE3IAZB2AFqId4CIAZB1AFqIQEgBkHQAWohJSAGQcwBaiGFAiAGQcgBaiHfAiAGQcQBaiGGAiAGQcABaiGqAyAGQbwBaiGHAiAGQbgBaiHTASAGQbQBaiGrAyAGQbABaiGEBCAGQawBaiEbIAZBqAFqIdQBIAZBpAFqIeACIAZBoAFqIYUEIAZBlAFqIawDIAZBkAFqIYYEIAZBjAFqIYgCIAZBiAFqIZUBIAZBhAFqIeECIAZBgAFqIa0DIAZB/ABqIdUBIAZB+ABqIYcEIAZB9ABqIYgEIAZB8ABqIYkCIAZB7ABqIWUgBkHoAGoh4gIgBkHkAGoh4wIgBkHYAGohrgMgBkHUAGohiQQgBkHQAGohigQgBkHMAGohlgEgBkHIAGohUSAGQcQAaiGvAyAGQUBrIbADIAZBPGohsQMgBkE4aiFmIAZBNGoh5AIgBkEwaiGLBCAGQSxqIWcgBkEoaiHlAiAGQSRqIdYBIAZBIGoh1wEgBkEcaiGKAiAGQRhqIYwEIAZB8AFqIo0EINgBKAIAKAIUQf8fSQR/INgBKAIAKAIUBUH/HwsiiwI2AgAgBkHsAWoiiwIg2AEoAgAoAhBBA0YEf0EDBUEECzYCACAAIDgoAgAoAhQ2AgAgNyA4KAIAKAIQNgIAIGgoAgAgaCgCACgCGDYCHCA4KAIAIAcoAgAgCCgCABDwAiAkICQoAgAgJCgCACAJKAIARmo2AgAg3gJCADcCACDeAkEANgIIA0AgJCgCACCzAygCAEkEQCAlQQA2AgAghgIgJCgCACBSKAIAazYCACCqAyCGAigCAEEAR0EBczYCACDYASgCACEHICQoAgAhCCCNAigCACEJILIDKAIAIQogJigCACEMIKoDKAIAIRAgNygCACERIIsCKAIAIRIgZCBoKAIANgIAIJMBIAc2AgAglAEgCDYCACDRASAJNgIAINIBIAo2AgAggQIgDDYCACCCAiAQNgIAIIMCIBE2AgAghAIgEjYCACCpAyCTASgCACgCEDYCAAJAIJQBKAIAIGQoAgAoAgQgZCgCACgCGGpJBEAg0AFBADYCAAUgkwEoAgAhByCUASgCACEIINEBKAIAIQkgqQMoAgAhCiDSASgCACEMIP8BIGQoAgA2AgAg/wMgBzYCACCABCAINgIAIIEEIAk2AgAgggQgCjYCACCDBCAMNgIAIKcDIP8BKAIAKAIENgIAIKgDIIAEKAIAIKcDKAIAazYCACCAAiD/ASgCACgCGDYCAANAIIACKAIAIKgDKAIASQRAIP8BKAIAIP8DKAIAIKcDKAIAIIACKAIAaiCBBCgCACCCBCgCACCDBCgCABC6AiEHIIACIIACKAIAIAdqNgIADAELCyD/ASgCACCoAygCADYCGAJAAkACQAJAIKkDKAIAQQNrDgUAAwIBAQMLIJMBKAIAIQcglAEoAgAhCCDRASgCACEJINIBKAIAIQoggQIoAgAhDCCCAigCACEQIIMCKAIAIREghAIoAgAhEiBPIGQoAgA2AgAgygEgBzYCACAaIAg2AgAgUCAJNgIAINUCIAo2AgAg9wMgDDYCACDWAiAQNgIAII4BIBE2AgAg+AMgEjYCACDLAUEDNgIAIKADIMoBKAIAKAIUQf8fSQR/IMoBKAIAKAIUBUH/HwsiBzYCACDMASBPKAIAKAIENgIAIC4gGigCACDMASgCAGs2AgAg+QMgygEoAgAoAgg2AgAgQCDLASgCAEEDRgR/QQMFQQQLNgIAIKEDIE8oAgAoAiQ2AgAgogMgGigCACD5AygCACDLASgCABC7AjYCACAjIKEDKAIAIKIDKAIAQQJ0aigCADYCACDXAiBPKAIAKAIsNgIAIPoDIMoBKAIAKAIEQQFrNgIAIM0BQQEg+gMoAgB0QQFrNgIAINgCQQA2AgAg2QJBADYCACD7ASBPKAIAKAIINgIAIGIgTygCACgCDDYCACDaAiD7ASgCACBiKAIAajYCACDbAiDMASgCACBiKAIAajYCACCjAyDNASgCACAuKAIATwR/QQAFIC4oAgAgzQEoAgBrCyIHNgIAINwCIE8oAgAoAhA2AgAg/AEg1wIoAgAgLigCACDNASgCAHFBA3RqNgIAIP0BINcCKAIAIC4oAgAgzQEoAgBxQQN0akEEajYCACDdAiAuKAIAQQlqNgIAIDZBADYCACCkA0EBIMoBKAIAKAIMdDYCACCPASD4AygCAEEBazYCACD8AyDWAigCAEEDajYCACCQASDWAigCADYCAAJAAkACQANAIJABKAIAIPwDKAIATw0CIPcDKAIAIQcgzgEgkAEoAgBBA0YEfyAHKAIAQQFrBSAHIJABKAIAQQJ0aigCAAsiBzYCACClAyAuKAIAIM4BKAIAazYCACBjQQA2AgAgzgEoAgBBAWsgLigCACBiKAIAa0kEQCAaKAIAIEAoAgAQ8QIgGigCACDOASgCAGsgQCgCABDxAkYEQCBjIBooAgAgQCgCAGogGigCACBAKAIAaiDOASgCAGsgUCgCABC8AiBAKAIAajYCAAsFIKYDIPsBKAIAIKUDKAIAajYCACDVAigCAARAIM4BKAIAQQFrIC4oAgAg3AIoAgBrSSBiKAIAQQFrIKUDKAIAa0EDT3EEQCAaKAIAIEAoAgAQ8QIgpgMoAgAgQCgCABDxAkYEQCBjIBooAgAgQCgCAGogpgMoAgAgQCgCAGogUCgCACDaAigCACDbAigCABC9AiBAKAIAajYCAAsLCwsgYygCACCPASgCAEsEQCCPASBjKAIANgIAII4BKAIAIDYoAgBBA3RqIJABKAIAINYCKAIAazYCACCOASgCACA2KAIAQQN0aiBjKAIANgIEIDYgNigCAEEBajYCACBjKAIAIKADKAIASyAaKAIAIGMoAgBqIFAoAgBGcg0CCyCQASCQASgCAEEBajYCAAwACwALINQCIDYoAgA2AgAMAQsgywEoAgBBA0YEQCCPASgCACDLASgCAEkEQCCRASBPKAIAIBooAgAQ8gI2AgAgkQEoAgAg3AIoAgBLIC4oAgAgkQEoAgBrQYCAEElxBEACQAJAINUCKAIARQ0AIJEBKAIAIGIoAgBPDQAg/gMg+wEoAgAgkQEoAgBqNgIAIJIBIBooAgAg/gMoAgAgUCgCACDaAigCACDbAigCABC9AjYCAAwBCyD9AyDMASgCACCRASgCAGo2AgAgkgEgGigCACD9AygCACBQKAIAELwCNgIACyCSASgCACDLASgCAE8EQCCPASCSASgCADYCACCOASgCACAuKAIAIJEBKAIAa0ECajYCACCOASgCACCSASgCADYCBCA2QQE2AgAgkgEoAgAgoAMoAgBLIBooAgAgkgEoAgBqIFAoAgBGcgRAIE8oAgAgLigCAEEBajYCGCDUAkEBNgIADAULCwsLCyChAygCACCiAygCAEECdGogLigCADYCAAJAAkACQANAAkAgpAMgpAMoAgAiB0F/ajYCACAHRQ0AICMoAgAg3AIoAgBNDQAg/gEg1wIoAgAgIygCACDNASgCAHFBA3RqNgIAINgCKAIAIQcg2QIoAgAhCCAPINgCKAIAINkCKAIASQR/IAcFIAgLNgIAAkACQCDVAigCAEUNACAjKAIAIA8oAgBqIGIoAgBPDQAgzwEg+wEoAgAgIygCAGo2AgAgGigCACAPKAIAaiDPASgCACAPKAIAaiBQKAIAINoCKAIAINsCKAIAEL0CIQcgDyAPKAIAIAdqNgIAICMoAgAgDygCAGogYigCAE8EQCDPASDMASgCACAjKAIAajYCAAsMAQsgzwEgzAEoAgAgIygCAGo2AgAgGigCACAPKAIAaiDPASgCACAPKAIAaiBQKAIAELwCIQcgDyAPKAIAIAdqNgIACyAPKAIAII8BKAIASwRAIA8oAgAg3QIoAgAgIygCAGtLBEAg3QIgIygCACAPKAIAajYCAAsgjwEgDygCADYCACCOASgCACA2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KAIASyAXKAIAIIMBKAIAaiBKKAIARnIEQCBJKAIAICsoAgBBAWo2AhggtgJBATYCAAwFCwsLCwsgjAMoAgAgjQMoAgBBAnRqICsoAgA2AgACQAJAAkADQAJAII8DII8DKAIAIgdBf2o2AgAgB0UNACAgKAIAIL4CKAIATQ0AIPIBILkCKAIAICAoAgAguwEoAgBxQQN0ajYCACC6AigCACEHILsCKAIAIQggCyC6AigCACC7AigCAEkEfyAHBSAICzYCAAJAAkAgtwIoAgBFDQAgICgCACALKAIAaiBcKAIATw0AIL0BIO8BKAIAICAoAgBqNgIAIBcoAgAgCygCAGogvQEoAgAgCygCAGogSigCACC8AigCACC9AigCABC9AiEHIAsgCygCACAHajYCACAgKAIAIAsoAgBqIFwoAgBPBEAgvQEgugEoAgAgICgCAGo2AgALDAELIL0BILoBKAIAICAoAgBqNgIAIBcoAgAgCygCAGogvQEoAgAgCygCAGogSigCABC8AiEHIAsgCygCACAHajYCAAsgCygCACCAASgCAEsEQCALKAIAIL8CKAIAICAoAgBrSwRAIL8CICAoAgAgCygCAGo2AgALIIABIAsoAgA2AgAgfygCACAzKAIAQQN0aiArKAIAICAoAgBrQQJqNgIAIH8oAgAgMygCAEEDdGogCygCADYCBCAzIDMoAgBBAWo2AgAgCygCAEGAIEsNASAXKAIAIAsoAgBqIEooAgBGDQELICAoAgAhByC9ASgCACALKAIAai0AACAXKAIAIAsoAgBqLQAASARAIPABKAIAIAc2AgAgugIgCygCADYCACAgKAIAII4DKAIATQ0DIPABIPIBKAIAQQRqNgIAICAg8gEoAgAoAgQ2AgAFIPEBKAIAIAc2AgAguwIgCygCADYCACAgKAIAII4DKAIATQ0EIPEBIPIBKAIANgIAICAg8gEoAgAoAgA2AgALDAELCwwCCyDwASDjAzYCAAwBCyDxASDjAzYCAAsg8QEoAgBBADYCACDwASgCAEEANgIAIEkoAgAgvwIoAgBBCGs2AhggtgIgMygCADYCAAsg0AEgtgIoAgA2AgAMAwsgkwEoAgAhByCUASgCACEIINEBKAIAIQkg0gEoAgAhCiCBAigCACEMIIICKAIAIRAggwIoAgAhESCEAigCACESIEsg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sgFBADYCAAUgfSgCACEHIH4oAgAhCCCzASgCACEJIIcDKAIAIQogtAEoAgAhDCDpASBbKAIANgIAINcDIAc2AgAg2AMgCDYCACDZAyAJNgIAINoDIAo2AgAg2wMgDDYCACCFAyDpASgCACgCBDYCACCGAyDYAygCACCFAygCAGs2AgAg6gEg6QEoAgAoAhg2AgADQCDqASgCACCGAygCAEkEQCDpASgCACDXAygCACCFAygCACDqASgCAGog2QMoAgAg2gMoAgAg2wMoAgAQugIhByDqASDqASgCACAHajYCAAwBCwsg6QEoAgAghgMoAgA2AhgCQAJAAkACQCCHAygCAEEDaw4FAAMCAQEDCyB9KAIAIQcgfigCACEIILMBKAIAIQkgtAEoAgAhCiDrASgCACEMIOwBKAIAIRAg7QEoAgAhESDuASgCACESIEcgWygCADYCACCsASAHNgIAIBYgCDYCACBIIAk2AgAgrQIgCjYCACDPAyAMNgIAIK4CIBA2AgAgeCARNgIAINADIBI2AgAgrQFBAzYCACD+AiCsASgCACgCFEH/H0kEfyCsASgCACgCFAVB/x8LIgc2AgAgrgEgRygCACgCBDYCACAqIBYoAgAgrgEoAgBrNgIAINEDIKwBKAIAKAIINgIAIDwgrQEoAgBBA0YEf0EDBUEECzYCACD/AiBHKAIAKAIkNgIAIIADIBYoAgAg0QMoAgAgrQEoAgAQuwI2AgAgHyD/AigCACCAAygCAEECdGooAgA2AgAgrwIgRygCACgCLDYCACDSAyCsASgCACgCBEEBazYCACCvAUEBINIDKAIAdEEBazYCACCwAkEANgIAILECQQA2AgAg5QEgRygCACgCCDYCACBZIEcoAgAoAgw2AgAgsgIg5QEoAgAgWSgCAGo2AgAgswIgrgEoAgAgWSgCAGo2AgAggQMgrwEoAgAgKigCAE8Ef0EABSAqKAIAIK8BKAIAawsiBzYCACC0AiBHKAIAKAIQNgIAIOYBIK8CKAIAICooAgAgrwEoAgBxQQN0ajYCACDnASCvAigCACAqKAIAIK8BKAIAcUEDdGpBBGo2AgAgtQIgKigCAEEJajYCACAyQQA2AgAgggNBASCsASgCACgCDHQ2AgAgeSDQAygCAEEBazYCACDUAyCuAigCAEEDajYCACB6IK4CKAIANgIA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NgIAAkACQCBRKAIAICUoAgBLDQAgrwMoAgAgACgCACBRKAIAQRxsaigCAEgNACCMAigCAEUNAgwBCwNAICUoAgAgUSgCAEkEQCAAKAIAICUoAgBBAWpBHGxqQYCAgIAENgIAICUgJSgCAEEBajYCAAwBCwsgACgCACBRKAIAQRxsaiCWASgCADYCCCAAKAIAIFEoAgBBHGxqIOMCKAIANgIEIAAoAgAgUSgCAEEcbGog1QEoAgA2AgwgACgCACBRKAIAQRxsaiCvAygCADYCACAAKAIAIFEoAgBBHGxqQRBqIgcgrgMpAgA3AgAgByCuAygCCDYCCAsglgEglgEoAgBBf2o2AgAMAQsLIGUgZSgCAEEBajYCAAwACwALCwsgASABKAIAQQFqNgIADAALAAsghQIg4gIoAgA2AgAg3wIgNygCACCJAigCAEEBa0EDdGooAgA2AgAgJSABKAIAQQFqNgIADAILIIUCIAAoAgAgJSgCAEEcbGooAgg2AgAg3wIgACgCACAlKAIAQRxsaigCBDYCACABICUoAgAghQIoAgBrNgIACwsgsAMghQIoAgA2AgAgsQMg3wIoAgA2AgAgZiABKAIANgIAA0Ag5AIgACgCACBmKAIAQRxsaigCCDYCACCLBCAAKAIAIGYoAgBBHGxqKAIENgIAIAAoAgAgZigCAEEcbGogsAMoAgA2AgggACgCACBmKAIAQRxsaiCxAygCADYCBCCwAyDkAigCADYCACCxAyCLBCgCADYCACDkAigCACBmKAIATQRAIGYgZigCACDkAigCAGs2AgAMAQsLIGdBADYCAANAIGcoAgAgJSgCAEkEQCDlAiAkKAIAIFIoAgBrNgIAINYBIAAoAgAgZygCAEEcbGooAgg2AgAg1wEgACgCACBnKAIAQRxsaigCBDYCACDWASgCAEEBRgRAICQgJCgCAEEBajYCACBnIGcoAgBBAWo2AgAMAgsgZyBnKAIAINYBKAIAajYCACAkICQoAgAg1gEoAgBqNgIAINcBKAIAQQNPBEAgJigCACAmKAIAKAIENgIIICYoAgAgJigCACgCADYCBCAmKAIAINcBKAIAQQJrNgIABSCKAiDXASgCACDlAigCAEVqNgIAIIoCKAIABEAgJigCACEHIIwEIIoCKAIAQQNGBH8gBygCAEEBawUgByCKAigCAEECdGooAgALIgc2AgAgigIoAgBBAk8EQCAmKAIAICYoAgAoAgQ2AggLICYoAgAgJigCACgCADYCBCAmKAIAIIwEKAIANgIACwsgOCgCACDlAigCACBSKAIAINcBKAIAINYBKAIAEPgCII4EKAIAIOUCKAIAIFIoAgAg1wEoAgAg1gEoAgBBA2sQ+QIgUiAkKAIANgIADAELCyA4KAIAEPoCDAELCyCNAigCACBSKAIAayEAIAYkBSAAC5YDAQV/IwUhBiMFQTBqJAUgBkEkaiEHIAZBIGoiCCAANgIAIAZBHGoiCSABNgIAIAZBGGoiASACNgIAIAZBFGoiCiADNgIAIAZBEGoiAiAENgIAIAZBDGoiAyAFNgIAIAZBCGoiBCAKKAIAKAIINgIAIAZBBGoiBSAKKAIAKAIQNgIAIAYiACAKKAIAKAIUNgIAAkACQAJAAkAgBSgCAEEFaw4DAQIAAwsgByAIKAIAIAkoAgAgASgCACACKAIAIAMoAgAgBCgCACAAKAIAQQcQigM2AgAgBygCACEAIAYkBSAADwsgByAIKAIAIAkoAgAgASgCACACKAIAIAMoAgAgBCgCACAAKAIAQQUQigM2AgAgBygCACEAIAYkBSAADwsgByAIKAIAIAkoAgAgASgCACACKAIAIAMoAgAgBCgCACAAKAIAQQYQigM2AgAgBygCACEAIAYkBSAADwsgByAIKAIAIAkoAgAgASgCACACKAIAIAMoAgAgBCgCACAAKAIAQQQQigM2AgAgBygCACEAIAYkBSAAC9wCAQR/IwUhBiMFQSBqJAUgBkEcaiEHIAZBGGoiCCAANgIAIAZBFGoiCSABNgIAIAZBEGoiASACNgIAIAZBDGoiACADNgIAIAZBCGoiAiAENgIAIAZBBGoiAyAFNgIAIAYgACgCACgCEDYCAAJAAkACQAJAIAYoAgBBBWsOAwECAAMLIAcgCCgCACAJKAIAIAEoAgAgACgCACACKAIAIAMoAgBBBxCJAzYCACAHKAIAIQAgBiQFIAAPCyAHIAgoAgAgCSgCACABKAIAIAAoAgAgAigCACADKAIAQQUQiQM2AgAgBygCACEAIAYkBSAADwsgByAIKAIAIAkoAgAgASgCACAAKAIAIAIoAgAgAygCAEEGEIkDNgIAIAcoAgAhACAGJAUgAA8LIAcgCCgCACAJKAIAIAEoAgAgACgCACACKAIAIAMoAgBBBBCJAzYCACAHKAIAIQAgBiQFIAALsBcBOH8jBSEGIwVBoAJqJAUgBkG8AWohDCAGQbgBaiEPIAZBtAFqIQggBkGwAWohCiAGQawBaiELIAZBqAFqIQ4gBkGkAWohECAGQaABaiEqIAZBnAFqISEgBkGYAWohKyAGQZQBaiEiIAZBkAFqISMgBkGMAWohESAGQYgBaiEsIAZBhAFqISQgBkGAAWohLSAGQfwAaiEYIAZB+ABqIS4gBkH0AGohLyAGQfAAaiEZIAZB7ABqIRogBkHoAGohMCAGQeQAaiExIAZB4ABqIRIgBkHcAGohMiAGQdgAaiElIAZB1ABqITMgBkHQAGohGyAGQcwAaiE0IAZByABqITUgBkHEAGohHCAGQUBrIR0gBkE8aiE2IAZBOGohNyAGQTRqIRUgBkEwaiEWIAZBLGohOCAGQShqITkgBkEkaiETIAZBIGohOiAGQRxqISYgBkEYaiE7IAZBFGoiDSAANgIAIAZBEGoiACABNgIAIAZBDGoiASACNgIAIAZBCGoiAiADNgIAIAZBBGoiAyAENgIAIAYgBTYCACAAKAIAIQAgASgCACEBIAIoAgAhAiADKAIAIQQgBigCACEFIAZBkAJqIgMgDSgCADYCACAGQYwCaiI8IAA2AgAgBkGIAmoiHiABNgIAIAZBhAJqIicgAjYCACAGQYACaiIAIAQ2AgAgBkH8AWoiBCAFNgIAIAZB+AFqIgdBADYCACAGQfQBaiIoQQA2AgAgBkHwAWoiASAAKAIANgIAIAZB7AFqIgAgASgCADYCACAGQegBaiIFIAEoAgA2AgAgBkHkAWoiAiABKAIAIAQoAgBqNgIAIAZB4AFqIh8gAigCAEF4ajYCACAGQdwBaiIEIAMoAgAoAgQ2AgAgBkHYAWoiASADKAIAKAIMNgIAIAZB1AFqIhcgAygCACgCEDYCACAGQdABaiIUIAQoAgAgASgCAGo2AgAgBkHMAWoiDSADKAIAKAIINgIAIAZByAFqIiAgDSgCACABKAIAajYCACAGQcQBaiI9IA0oAgAgFygCAGo2AgAgBkHAAWoiKSAHKAIABH9BBwVBBgs2AgAgDCAeKAIAKAIANgIAIA8gHigCACgCBDYCACADKAIAIAMoAgAoAhg2AhwgACAAKAIAIAAoAgAgFCgCAEZqNgIAA0AgACgCACAfKAIASQRAIAhBADYCACAKQQA2AgAgCyAAKAIAQQFqNgIAIA4gACgCACAEKAIAazYCACAQIA4oAgBBAWogDCgCAGs2AgAgDSgCACEHIAQoAgAhCSAqIBAoAgAgASgCAEkEfyAHBSAJCzYCACAhICooAgAgECgCAGo2AgACQAJAIAEoAgBBAWsgECgCAGtBA08gECgCACAXKAIAS3FFDQAgACgCAEEBahDQASAhKAIAENABRw0AICAoAgAhByACKAIAIQkgKyAQKAIAIAEoAgBJBH8gBwUgCQs2AgAgCCAAKAIAQQVqICEoAgBBBGogAigCACArKAIAIBQoAgAQvQJBBGo2AgAgKCgCAA0ADAELICJB/8HXLzYCACAjIAMoAgAgJygCACAAKAIAIAIoAgAgIiApKAIAQQdxQbgBahEJADYCACAjKAIAIAgoAgBLBEAgCCAjKAIANgIAIAsgACgCADYCACAKICIoAgA2AgALIAgoAgBBBEkEQCAAIAAoAgAgACgCACAFKAIAa0EIdUEBamo2AgAMAwsCQCAoKAIAQQFPBEADQCAAKAIAIB8oAgBPDQIgACAAKAIAQQFqNgIAIA4gDigCAEEBajYCACAKKAIABEAgESAOKAIAIAwoAgBrNgIAIA0oAgAhByAEKAIAIQkgLCARKAIAIAEoAgBJBH8gBwUgCQs2AgAgJCAsKAIAIBEoAgBqNgIAIAEoAgBBAWsgESgCAGtBA08gESgCACAXKAIAS3EEQCAAKAIAENABICQoAgAQ0AFGBEAgICgCACEHIAIoAgAhCSAtIBEoAgAgASgCAEkEfyAHBSAJCzYCACAYIAAoAgBBBGogJCgCAEEEaiACKAIAIC0oAgAgFCgCABC9AkEEajYCACAuIBgoAgBBA2w2AgAgLyAIKAIAQQNsIAooAgBBAWoQ1AFrQQFqNgIAIBgoAgBBBE8EQCAuKAIAIC8oAgBKBEAgCCAYKAIANgIAIApBADYCACALIAAoAgA2AgALCwsLCyAZQf/B1y82AgAgGiADKAIAICcoAgAgACgCACACKAIAIBkgKSgCAEEHcUG4AWoRCQA2AgAgMCAaKAIAQQJ0IBkoAgBBAWoQ1AFrNgIAIDEgCCgCAEECdCAKKAIAQQFqENQBa0EEajYCACAaKAIAQQRPBEAgMCgCACAxKAIASgRAIAggGigCADYCACAKIBkoAgA2AgAgCyAAKAIANgIADAILCyAoKAIAQQJHDQIgACgCACAfKAIATw0CIAAgACgCAEEBajYCACAOIA4oAgBBAWo2AgAgCigCAARAIBIgDigCACAMKAIAazYCACANKAIAIQcgBCgCACEJIDIgEigCACABKAIASQR/IAcFIAkLNgIAICUgMigCACASKAIAajYCACABKAIAQQFrIBIoAgBrQQNPIBIoAgAgFygCAEtxBEAgACgCABDQASAlKAIAENABRgRAICAoAgAhByACKAIAIQkgMyASKAIAIAEoAgBJBH8gBwUgCQs2AgAgGyAAKAIAQQRqICUoAgBBBGogAigCACAzKAIAIBQoAgAQvQJBBGo2AgAgNCAbKAIAQQJ0NgIAIDUgCCgCAEECdCAKKAIAQQFqENQBa0EBajYCACAbKAIAQQRPBEAgNCgCACA1KAIASgRAIAggGygCADYCACAKQQA2AgAgCyAAKAIANgIACwsLCwsgHEH/wdcvNgIAIB0gAygCACAnKAIAIAAoAgAgAigCACAcICkoAgBBB3FBuAFqEQkANgIAIDYgHSgCAEECdCAcKAIAQQFqENQBazYCACA3IAgoAgBBAnQgCigCAEEBahDUAWtBB2o2AgAgHSgCAEEESQ0CIDYoAgAgNygCAEwNAiAIIB0oAgA2AgAgCiAcKAIANgIAIAsgACgCADYCAAwACwALCyAKKAIABEAgFSALKAIAIAQoAgBrIAooAgBBAmtrNgIAIA0oAgAgFSgCAGohByAEKAIAIBUoAgBqIQkgFiAVKAIAIAEoAgBJBH8gBwUgCQs2AgAgPSgCACEHIBQoAgAhCSA4IBUoAgAgASgCAEkEfyAHBSAJCzYCAANAAkAgCygCACAFKAIATQ0AIBYoAgAgOCgCAE0NACALKAIAQX9qLQAAIBYoAgBBf2otAABHDQAgCyALKAIAQX9qNgIAIBYgFigCAEF/ajYCACAIIAgoAgBBAWo2AgAMAQsLIA8gDCgCADYCACAMIAooAgBBAms2AgALCyA5IAsoAgAgBSgCAGs2AgAgPCgCACA5KAIAIAUoAgAgCigCACAIKAIAQQNrEPkCIAAgCygCACAIKAIAaiIHNgIAIAUgBzYCAANAAkAgACgCACAfKAIASw0AIBMgACgCACAEKAIAayAPKAIAazYCACANKAIAIQcgBCgCACEJIDogEygCACABKAIASQR/IAcFIAkLNgIAICYgOigCACATKAIAajYCACABKAIAQQFrIBMoAgBrQQNPIBMoAgAgFygCAEtxRQ0AIAAoAgAQ0AEgJigCABDQAUcNACAgKAIAIQcgAigCACEJIDsgEygCACABKAIASQR/IAcFIAkLNgIAIAggACgCAEEEaiAmKAIAQQRqIAIoAgAgOygCACAUKAIAEL0CQQRqNgIAIAogDygCADYCACAPIAwoAgA2AgAgDCAKKAIANgIAIDwoAgBBACAFKAIAQQAgCCgCAEEDaxD5AiAAIAAoAgAgCCgCAGo2AgAgBSAAKAIANgIADAELCwwBCwsgHigCACAMKAIANgIAIB4oAgAgDygCADYCBCACKAIAIAUoAgBrIQAgBiQFIAALsBcBOH8jBSEGIwVBoAJqJAUgBkG8AWohDCAGQbgBaiEPIAZBtAFqIQggBkGwAWohCiAGQawBaiELIAZBqAFqIQ4gBkGkAWohECAGQaABaiEqIAZBnAFqISEgBkGYAWohKyAGQZQBaiEiIAZBkAFqISMgBkGMAWohESAGQYgBaiEsIAZBhAFqISQgBkGAAWohLSAGQfwAaiEYIAZB+ABqIS4gBkH0AGohLyAGQfAAaiEZIAZB7ABqIRogBkHoAGohMCAGQeQAaiExIAZB4ABqIRIgBkHcAGohMiAGQdgAaiElIAZB1ABqITMgBkHQAGohGyAGQcwAaiE0IAZByABqITUgBkHEAGohHCAGQUBrIR0gBkE8aiE2IAZBOGohNyAGQTRqIRUgBkEwaiEWIAZBLGohOCAGQShqITkgBkEkaiETIAZBIGohOiAGQRxqISYgBkEYaiE7IAZBFGoiDSAANgIAIAZBEGoiACABNgIAIAZBDGoiASACNgIAIAZBCGoiAiADNgIAIAZBBGoiAyAENgIAIAYgBTYCACAAKAIAIQAgASgCACEBIAIoAgAhAiADKAIAIQQgBigCACEFIAZBkAJqIgMgDSgCADYCACAGQYwCaiI8IAA2AgAgBkGIAmoiHiABNgIAIAZBhAJqIicgAjYCACAGQYACaiIAIAQ2AgAgBkH8AWoiBCAFNgIAIAZB+AFqIgdBADYCACAGQfQBaiIoQQE2AgAgBkHwAWoiASAAKAIANgIAIAZB7AFqIgAgASgCADYCACAGQegBaiIFIAEoAgA2AgAgBkHkAWoiAiABKAIAIAQoAgBqNgIAIAZB4AFqIh8gAigCAEF4ajYCACAGQdwBaiIEIAMoAgAoAgQ2AgAgBkHYAWoiASADKAIAKAIMNgIAIAZB1AFqIhcgAygCACgCEDYCACAGQdABaiIUIAQoAgAgASgCAGo2AgAgBkHMAWoiDSADKAIAKAIINgIAIAZByAFqIiAgDSgCACABKAIAajYCACAGQcQBaiI9IA0oAgAgFygCAGo2AgAgBkHAAWoiKSAHKAIABH9BBwVBBgs2AgAgDCAeKAIAKAIANgIAIA8gHigCACgCBDYCACADKAIAIAMoAgAoAhg2AhwgACAAKAIAIAAoAgAgFCgCAEZqNgIAA0AgACgCACAfKAIASQRAIAhBADYCACAKQQA2AgAgCyAAKAIAQQFqNgIAIA4gACgCACAEKAIAazYCACAQIA4oAgBBAWogDCgCAGs2AgAgDSgCACEHIAQoAgAhCSAqIBAoAgAgASgCAEkEfyAHBSAJCzYCACAhICooAgAgECgCAGo2AgACQAJAIAEoAgBBAWsgECgCAGtBA08gECgCACAXKAIAS3FFDQAgACgCAEEBahDQASAhKAIAENABRw0AICAoAgAhByACKAIAIQkgKyAQKAIAIAEoAgBJBH8gBwUgCQs2AgAgCCAAKAIAQQVqICEoAgBBBGogAigCACArKAIAIBQoAgAQvQJBBGo2AgAgKCgCAA0ADAELICJB/8HXLzYCACAjIAMoAgAgJygCACAAKAIAIAIoAgAgIiApKAIAQQdxQbgBahEJADYCACAjKAIAIAgoAgBLBEAgCCAjKAIANgIAIAsgACgCADYCACAKICIoAgA2AgALIAgoAgBBBEkEQCAAIAAoAgAgACgCACAFKAIAa0EIdUEBamo2AgAMAwsCQCAoKAIAQQFPBEADQCAAKAIAIB8oAgBPDQIgACAAKAIAQQFqNgIAIA4gDigCAEEBajYCACAKKAIABEAgESAOKAIAIAwoAgBrNgIAIA0oAgAhByAEKAIAIQkgLCARKAIAIAEoAgBJBH8gBwUgCQs2AgAgJCAsKAIAIBEoAgBqNgIAIAEoAgBBAWsgESgCAGtBA08gESgCACAXKAIAS3EEQCAAKAIAENABICQoAgAQ0AFGBEAgICgCACEHIAIoAgAhCSAtIBEoAgAgASgCAEkEfyAHBSAJCzYCACAYIAAoAgBBBGogJCgCAEEEaiACKAIAIC0oAgAgFCgCABC9AkEEajYCACAuIBgoAgBBA2w2AgAgLyAIKAIAQQNsIAooAgBBAWoQ1AFrQQFqNgIAIBgoAgBBBE8EQCAuKAIAIC8oAgBKBEAgCCAYKAIANgIAIApBADYCACALIAAoAgA2AgALCwsLCyAZQf/B1y82AgAgGiADKAIAICcoAgAgACgCACACKAIAIBkgKSgCAEEHcUG4AWoRCQA2AgAgMCAaKAIAQQJ0IBkoAgBBAWoQ1AFrNgIAIDEgCCgCAEECdCAKKAIAQQFqENQBa0EEajYCACAaKAIAQQRPBEAgMCgCACAxKAIASgRAIAggGigCADYCACAKIBkoAgA2AgAgCyAAKAIANgIADAILCyAoKAIAQQJHDQIgACgCACAfKAIATw0CIAAgACgCAEEBajYCACAOIA4oAgBBAWo2AgAgCigCAARAIBIgDigCACAMKAIAazYCACANKAIAIQcgBCgCACEJIDIgEigCACABKAIASQR/IAcFIAkLNgIAICUgMigCACASKAIAajYCACABKAIAQQFrIBIoAgBrQQNPIBIoAgAgFygCAEtxBEAgACgCABDQASAlKAIAENABRgRAICAoAgAhByACKAIAIQkgMyASKAIAIAEoAgBJBH8gBwUgCQs2AgAgGyAAKAIAQQRqICUoAgBBBGogAigCACAzKAIAIBQoAgAQvQJBBGo2AgAgNCAbKAIAQQJ0NgIAIDUgCCgCAEECdCAKKAIAQQFqENQBa0EBajYCACAbKAIAQQRPBEAgNCgCACA1KAIASgRAIAggGygCADYCACAKQQA2AgAgCyAAKAIANgIACwsLCwsgHEH/wdcvNgIAIB0gAygCACAnKAIAIAAoAgAgAigCACAcICkoAgBBB3FBuAFqEQkANgIAIDYgHSgCAEECdCAcKAIAQQFqENQBazYCACA3IAgoAgBBAnQgCigCAEEBahDUAWtBB2o2AgAgHSgCAEEESQ0CIDYoAgAgNygCAEwNAiAIIB0oAgA2AgAgCiAcKAIANgIAIAsgACgCADYCAAwACwALCyAKKAIABEAgFSALKAIAIAQoAgBrIAooAgBBAmtrNgIAIA0oAgAgFSgCAGohByAEKAIAIBUoAgBqIQkgFiAVKAIAIAEoAgBJBH8gBwUgCQs2AgAgPSgCACEHIBQoAgAhCSA4IBUoAgAgASgCAEkEfyAHBSAJCzYCAANAAkAgCygCACAFKAIATQ0AIBYoAgAgOCgCAE0NACALKAIAQX9qLQAAIBYoAgBBf2otAABHDQAgCyALKAIAQX9qNgIAIBYgFigCAEF/ajYCACAIIAgoAgBBAWo2AgAMAQsLIA8gDCgCADYCACAMIAooAgBBAms2AgALCyA5IAsoAgAgBSgCAGs2AgAgPCgCACA5KAIAIAUoAgAgCigCACAIKAIAQQNrEPkCIAAgCygCACAIKAIAaiIHNgIAIAUgBzYCAANAAkAgACgCACAfKAIASw0AIBMgACgCACAEKAIAayAPKAIAazYCACANKAIAIQcgBCgCACEJIDogEygCACABKAIASQR/IAcFIAkLNgIAICYgOigCACATKAIAajYCACABKAIAQQFrIBMoAgBrQQNPIBMoAgAgFygCAEtxRQ0AIAAoAgAQ0AEgJigCABDQAUcNACAgKAIAIQcgAigCACEJIDsgEygCACABKAIASQR/IAcFIAkLNgIAIAggACgCAEEEaiAmKAIAQQRqIAIoAgAgOygCACAUKAIAEL0CQQRqNgIAIAogDygCADYCACAPIAwoAgA2AgAgDCAKKAIANgIAIDwoAgBBACAFKAIAQQAgCCgCAEEDaxD5AiAAIAAoAgAgCCgCAGo2AgAgBSAAKAIANgIADAELCwwBCwsgHigCACAMKAIANgIAIB4oAgAgDygCADYCBCACKAIAIAUoAgBrIQAgBiQFIAALsBcBOH8jBSEGIwVBoAJqJAUgBkG8AWohDCAGQbgBaiEPIAZBtAFqIQggBkGwAWohCiAGQawBaiELIAZBqAFqIQ4gBkGkAWohECAGQaABaiEqIAZBnAFqISEgBkGYAWohKyAGQZQBaiEiIAZBkAFqISMgBkGMAWohESAGQYgBaiEsIAZBhAFqISQgBkGAAWohLSAGQfwAaiEYIAZB+ABqIS4gBkH0AGohLyAGQfAAaiEZIAZB7ABqIRogBkHoAGohMCAGQeQAaiExIAZB4ABqIRIgBkHcAGohMiAGQdgAaiElIAZB1ABqITMgBkHQAGohGyAGQcwAaiE0IAZByABqITUgBkHEAGohHCAGQUBrIR0gBkE8aiE2IAZBOGohNyAGQTRqIRUgBkEwaiEWIAZBLGohOCAGQShqITkgBkEkaiETIAZBIGohOiAGQRxqISYgBkEYaiE7IAZBFGoiDSAANgIAIAZBEGoiACABNgIAIAZBDGoiASACNgIAIAZBCGoiAiADNgIAIAZBBGoiAyAENgIAIAYgBTYCACAAKAIAIQAgASgCACEBIAIoAgAhAiADKAIAIQQgBigCACEFIAZBkAJqIgMgDSgCADYCACAGQYwCaiI8IAA2AgAgBkGIAmoiHiABNgIAIAZBhAJqIicgAjYCACAGQYACaiIAIAQ2AgAgBkH8AWoiBCAFNgIAIAZB+AFqIgdBADYCACAGQfQBaiIoQQI2AgAgBkHwAWoiASAAKAIANgIAIAZB7AFqIgAgASgCADYCACAGQegBaiIFIAEoAgA2AgAgBkHkAWoiAiABKAIAIAQoAgBqNgIAIAZB4AFqIh8gAigCAEF4ajYCACAGQdwBaiIEIAMoAgAoAgQ2AgAgBkHYAWoiASADKAIAKAIMNgIAIAZB1AFqIhcgAygCACgCEDYCACAGQdABaiIUIAQoAgAgASgCAGo2AgAgBkHMAWoiDSADKAIAKAIINgIAIAZByAFqIiAgDSgCACABKAIAajYCACAGQcQBaiI9IA0oAgAgFygCAGo2AgAgBkHAAWoiKSAHKAIABH9BBwVBBgs2AgAgDCAeKAIAKAIANgIAIA8gHigCACgCBDYCACADKAIAIAMoAgAoAhg2AhwgACAAKAIAIAAoAgAgFCgCAEZqNgIAA0AgACgCACAfKAIASQRAIAhBADYCACAKQQA2AgAgCyAAKAIAQQFqNgIAIA4gACgCACAEKAIAazYCACAQIA4oAgBBAWogDCgCAGs2AgAgDSgCACEHIAQoAgAhCSAqIBAoAgAgASgCAEkEfyAHBSAJCzYCACAhICooAgAgECgCAGo2AgACQAJAIAEoAgBBAWsgECgCAGtBA08gECgCACAXKAIAS3FFDQAgACgCAEEBahDQASAhKAIAENABRw0AICAoAgAhByACKAIAIQkgKyAQKAIAIAEoAgBJBH8gBwUgCQs2AgAgCCAAKAIAQQVqICEoAgBBBGogAigCACArKAIAIBQoAgAQvQJBBGo2AgAgKCgCAA0ADAELICJB/8HXLzYCACAjIAMoAgAgJygCACAAKAIAIAIoAgAgIiApKAIAQQdxQbgBahEJADYCACAjKAIAIAgoAgBLBEAgCCAjKAIANgIAIAsgACgCADYCACAKICIoAgA2AgALIAgoAgBBBEkEQCAAIAAoAgAgACgCACAFKAIAa0EIdUEBamo2AgAMAwsCQCAoKAIAQQFPBEADQCAAKAIAIB8oAgBPDQIgACAAKAIAQQFqNgIAIA4gDigCAEEBajYCACAKKAIABEAgESAOKAIAIAwoAgBrNgIAIA0oAgAhByAEKAIAIQkgLCARKAIAIAEoAgBJBH8gBwUgCQs2AgAgJCAsKAIAIBEoAgBqNgIAIAEoAgBBAWsgESgCAGtBA08gESgCACAXKAIAS3EEQCAAKAIAENABICQoAgAQ0AFGBEAgICgCACEHIAIoAgAhCSAtIBEoAgAgASgCAEkEfyAHBSAJCzYCACAYIAAoAgBBBGogJCgCAEEEaiACKAIAIC0oAgAgFCgCABC9AkEEajYCACAuIBgoAgBBA2w2AgAgLyAIKAIAQQNsIAooAgBBAWoQ1AFrQQFqNgIAIBgoAgBBBE8EQCAuKAIAIC8oAgBKBEAgCCAYKAIANgIAIApBADYCACALIAAoAgA2AgALCwsLCyAZQf/B1y82AgAgGiADKAIAICcoAgAgACgCACACKAIAIBkgKSgCAEEHcUG4AWoRCQA2AgAgMCAaKAIAQQJ0IBkoAgBBAWoQ1AFrNgIAIDEgCCgCAEECdCAKKAIAQQFqENQBa0EEajYCACAaKAIAQQRPBEAgMCgCACAxKAIASgRAIAggGigCADYCACAKIBkoAgA2AgAgCyAAKAIANgIADAILCyAoKAIAQQJHDQIgACgCACAfKAIATw0CIAAgACgCAEEBajYCACAOIA4oAgBBAWo2AgAgCigCAARAIBIgDigCACAMKAIAazYCACANKAIAIQcgBCgCACEJIDIgEigCACABKAIASQR/IAcFIAkLNgIAICUgMigCACASKAIAajYCACABKAIAQQFrIBIoAgBrQQNPIBIoAgAgFygCAEtxBEAgACgCABDQASAlKAIAENABRgRAICAoAgAhByACKAIAIQkgMyASKAIAIAEoAgBJBH8gBwUgCQs2AgAgGyAAKAIAQQRqICUoAgBBBGogAigCACAzKAIAIBQoAgAQvQJBBGo2AgAgNCAbKAIAQQJ0NgIAIDUgCCgCAEECdCAKKAIAQQFqENQBa0EBajYCACAbKAIAQQRPBEAgNCgCACA1KAIASgRAIAggGygCADYCACAKQQA2AgAgCyAAKAIANgIACwsLCwsgHEH/wdcvNgIAIB0gAygCACAnKAIAIAAoAgAgAigCACAcICkoAgBBB3FBuAFqEQkANgIAIDYgHSgCAEECdCAcKAIAQQFqENQBazYCACA3IAgoAgBBAnQgCigCAEEBahDUAWtBB2o2AgAgHSgCAEEESQ0CIDYoAgAgNygCAEwNAiAIIB0oAgA2AgAgCiAcKAIANgIAIAsgACgCADYCAAwACwALCyAKKAIABEAgFSALKAIAIAQoAgBrIAooAgBBAmtrNgIAIA0oAgAgFSgCAGohByAEKAIAIBUoAgBqIQkgFiAVKAIAIAEoAgBJBH8gBwUgCQs2AgAgPSgCACEHIBQoAgAhCSA4IBUoAgAgASgCAEkEfyAHBSAJCzYCAANAAkAgCygCACAFKAIATQ0AIBYoAgAgOCgCAE0NACALKAIAQX9qLQAAIBYoAgBBf2otAABHDQAgCyALKAIAQX9qNgIAIBYgFigCAEF/ajYCACAIIAgoAgBBAWo2AgAMAQsLIA8gDCgCADYCACAMIAooAgBBAms2AgALCyA5IAsoAgAgBSgCAGs2AgAgPCgCACA5KAIAIAUoAgAgCigCACAIKAIAQQNrEPkCIAAgCygCACAIKAIAaiIHNgIAIAUgBzYCAANAAkAgACgCACAfKAIASw0AIBMgACgCACAEKAIAayAPKAIAazYCACANKAIAIQcgBCgCACEJIDogEygCACABKAIASQR/IAcFIAkLNgIAICYgOigCACATKAIAajYCACABKAIAQQFrIBMoAgBrQQNPIBMoAgAgFygCAEtxRQ0AIAAoAgAQ0AEgJigCABDQAUcNACAgKAIAIQcgAigCACEJIDsgEygCACABKAIASQR/IAcFIAkLNgIAIAggACgCAEEEaiAmKAIAQQRqIAIoAgAgOygCACAUKAIAEL0CQQRqNgIAIAogDygCADYCACAPIAwoAgA2AgAgDCAKKAIANgIAIDwoAgBBACAFKAIAQQAgCCgCAEEDaxD5AiAAIAAoAgAgCCgCAGo2AgAgBSAAKAIANgIADAELCwwBCwsgHigCACAMKAIANgIAIB4oAgAgDygCADYCBCACKAIAIAUoAgBrIQAgBiQFIAALsBcBOH8jBSEGIwVBoAJqJAUgBkG8AWohDCAGQbgBaiEPIAZBtAFqIQggBkGwAWohCiAGQawBaiELIAZBqAFqIQ4gBkGkAWohECAGQaABaiEqIAZBnAFqISEgBkGYAWohKyAGQZQBaiEiIAZBkAFqISMgBkGMAWohESAGQYgBaiEsIAZBhAFqISQgBkGAAWohLSAGQfwAaiEYIAZB+ABqIS4gBkH0AGohLyAGQfAAaiEZIAZB7ABqIRogBkHoAGohMCAGQeQAaiExIAZB4ABqIRIgBkHcAGohMiAGQdgAaiElIAZB1ABqITMgBkHQAGohGyAGQcwAaiE0IAZByABqITUgBkHEAGohHCAGQUBrIR0gBkE8aiE2IAZBOGohNyAGQTRqIRUgBkEwaiEWIAZBLGohOCAGQShqITkgBkEkaiETIAZBIGohOiAGQRxqISYgBkEYaiE7IAZBFGoiDSAANgIAIAZBEGoiACABNgIAIAZBDGoiASACNgIAIAZBCGoiAiADNgIAIAZBBGoiAyAENgIAIAYgBTYCACAAKAIAIQAgASgCACEBIAIoAgAhAiADKAIAIQQgBigCACEFIAZBkAJqIgMgDSgCADYCACAGQYwCaiI8IAA2AgAgBkGIAmoiHiABNgIAIAZBhAJqIicgAjYCACAGQYACaiIAIAQ2AgAgBkH8AWoiBCAFNgIAIAZB+AFqIgdBATYCACAGQfQBaiIoQQI2AgAgBkHwAWoiASAAKAIANgIAIAZB7AFqIgAgASgCADYCACAGQegBaiIFIAEoAgA2AgAgBkHkAWoiAiABKAIAIAQoAgBqNgIAIAZB4AFqIh8gAigCAEF4ajYCACAGQdwBaiIEIAMoAgAoAgQ2AgAgBkHYAWoiASADKAIAKAIMNgIAIAZB1AFqIhcgAygCACgCEDYCACAGQdABaiIUIAQoAgAgASgCAGo2AgAgBkHMAWoiDSADKAIAKAIINgIAIAZByAFqIiAgDSgCACABKAIAajYCACAGQcQBaiI9IA0oAgAgFygCAGo2AgAgBkHAAWoiKSAHKAIABH9BBwVBBgs2AgAgDCAeKAIAKAIANgIAIA8gHigCACgCBDYCACADKAIAIAMoAgAoAhg2AhwgACAAKAIAIAAoAgAgFCgCAEZqNgIAA0AgACgCACAfKAIASQRAIAhBADYCACAKQQA2AgAgCyAAKAIAQQFqNgIAIA4gACgCACAEKAIAazYCACAQIA4oAgBBAWogDCgCAGs2AgAgDSgCACEHIAQoAgAhCSAqIBAoAgAgASgCAEkEfyAHBSAJCzYCACAhICooAgAgECgCAGo2AgACQAJAIAEoAgBBAWsgECgCAGtBA08gECgCACAXKAIAS3FFDQAgACgCAEEBahDQASAhKAIAENABRw0AICAoAgAhByACKAIAIQkgKyAQKAIAIAEoAgBJBH8gBwUgCQs2AgAgCCAAKAIAQQVqICEoAgBBBGogAigCACArKAIAIBQoAgAQvQJBBGo2AgAgKCgCAA0ADAELICJB/8HXLzYCACAjIAMoAgAgJygCACAAKAIAIAIoAgAgIiApKAIAQQdxQbgBahEJADYCACAjKAIAIAgoAgBLBEAgCCAjKAIANgIAIAsgACgCADYCACAKICIoAgA2AgALIAgoAgBBBEkEQCAAIAAoAgAgACgCACAFKAIAa0EIdUEBamo2AgAMAwsCQCAoKAIAQQFPBEADQCAAKAIAIB8oAgBPDQIgACAAKAIAQQFqNgIAIA4gDigCAEEBajYCACAKKAIABEAgESAOKAIAIAwoAgBrNgIAIA0oAgAhByAEKAIAIQkgLCARKAIAIAEoAgBJBH8gBwUgCQs2AgAgJCAsKAIAIBEoAgBqNgIAIAEoAgBBAWsgESgCAGtBA08gESgCACAXKAIAS3EEQCAAKAIAENABICQoAgAQ0AFGBEAgICgCACEHIAIoAgAhCSAtIBEoAgAgASgCAEkEfyAHBSAJCzYCACAYIAAoAgBBBGogJCgCAEEEaiACKAIAIC0oAgAgFCgCABC9AkEEajYCACAuIBgoAgBBA2w2AgAgLyAIKAIAQQNsIAooAgBBAWoQ1AFrQQFqNgIAIBgoAgBBBE8EQCAuKAIAIC8oAgBKBEAgCCAYKAIANgIAIApBADYCACALIAAoAgA2AgALCwsLCyAZQf/B1y82AgAgGiADKAIAICcoAgAgACgCACACKAIAIBkgKSgCAEEHcUG4AWoRCQA2AgAgMCAaKAIAQQJ0IBkoAgBBAWoQ1AFrNgIAIDEgCCgCAEECdCAKKAIAQQFqENQBa0EEajYCACAaKAIAQQRPBEAgMCgCACAxKAIASgRAIAggGigCADYCACAKIBkoAgA2AgAgCyAAKAIANgIADAILCyAoKAIAQQJHDQIgACgCACAfKAIATw0CIAAgACgCAEEBajYCACAOIA4oAgBBAWo2AgAgCigCAARAIBIgDigCACAMKAIAazYCACANKAIAIQcgBCgCACEJIDIgEigCACABKAIASQR/IAcFIAkLNgIAICUgMigCACASKAIAajYCACABKAIAQQFrIBIoAgBrQQNPIBIoAgAgFygCAEtxBEAgACgCABDQASAlKAIAENABRgRAICAoAgAhByACKAIAIQkgMyASKAIAIAEoAgBJBH8gBwUgCQs2AgAgGyAAKAIAQQRqICUoAgBBBGogAigCACAzKAIAIBQoAgAQvQJBBGo2AgAgNCAbKAIAQQJ0NgIAIDUgCCgCAEECdCAKKAIAQQFqENQBa0EBajYCACAbKAIAQQRPBEAgNCgCACA1KAIASgRAIAggGygCADYCACAKQQA2AgAgCyAAKAIANgIACwsLCwsgHEH/wdcvNgIAIB0gAygCACAnKAIAIAAoAgAgAigCACAcICkoAgBBB3FBuAFqEQkANgIAIDYgHSgCAEECdCAcKAIAQQFqENQBazYCACA3IAgoAgBBAnQgCigCAEEBahDUAWtBB2o2AgAgHSgCAEEESQ0CIDYoAgAgNygCAEwNAiAIIB0oAgA2AgAgCiAcKAIANgIAIAsgACgCADYCAAwACwALCyAKKAIABEAgFSALKAIAIAQoAgBrIAooAgBBAmtrNgIAIA0oAgAgFSgCAGohByAEKAIAIBUoAgBqIQkgFiAVKAIAIAEoAgBJBH8gBwUgCQs2AgAgPSgCACEHIBQoAgAhCSA4IBUoAgAgASgCAEkEfyAHBSAJCzYCAANAAkAgCygCACAFKAIATQ0AIBYoAgAgOCgCAE0NACALKAIAQX9qLQAAIBYoAgBBf2otAABHDQAgCyALKAIAQX9qNgIAIBYgFigCAEF/ajYCACAIIAgoAgBBAWo2AgAMAQsLIA8gDCgCADYCACAMIAooAgBBAms2AgALCyA5IAsoAgAgBSgCAGs2AgAgPCgCACA5KAIAIAUoAgAgCigCACAIKAIAQQNrEPkCIAAgCygCACAIKAIAaiIHNgIAIAUgBzYCAANAAkAgACgCACAfKAIASw0AIBMgACgCACAEKAIAayAPKAIAazYCACANKAIAIQcgBCgCACEJIDogEygCACABKAIASQR/IAcFIAkLNgIAICYgOigCACATKAIAajYCACABKAIAQQFrIBMoAgBrQQNPIBMoAgAgFygCAEtxRQ0AIAAoAgAQ0AEgJigCABDQAUcNACAgKAIAIQcgAigCACEJIDsgEygCACABKAIASQR/IAcFIAkLNgIAIAggACgCAEEEaiAmKAIAQQRqIAIoAgAgOygCACAUKAIAEL0CQQRqNgIAIAogDygCADYCACAPIAwoAgA2AgAgDCAKKAIANgIAIDwoAgBBACAFKAIAQQAgCCgCAEEDaxD5AiAAIAAoAgAgCCgCAGo2AgAgBSAAKAIANgIADAELCwwBCwsgHigCACAMKAIANgIAIB4oAgAgDygCADYCBCACKAIAIAUoAgBrIQAgBiQFIAALjNYBAYkEfyMFIQYjBUHgEGokBSAGQRRqIgsgADYCACAGQRBqIgAgATYCACAGQQxqIgEgAjYCACAGQQhqIgIgAzYCACAGQQRqIgMgBDYCACAGIAU2AgAgACgCACEAIAEoAgAhASACKAIAIQIgAygCACEDIAYoAgAhBCAGQbACaiJoIAsoAgA2AgAgBkGsAmoijgQgADYCACAGQagCaiImIAE2AgAgBkGkAmoi2AEgAjYCACAGQaACaiIHIAM2AgAgBkGcAmoiCCAENgIAIAZBmAJqIowCQQA2AgAgBkGUAmoisgNBATYCACAGQZACaiI4IGgoAgBBMGo2AgAgBkGMAmoiACAHKAIANgIAIAZBiAJqIiQgACgCADYCACAGQYQCaiJSIAAoAgA2AgAgBkGAAmoijQIgACgCACAIKAIAajYCACAGQfwBaiKzAyCNAigCAEF4ajYCACAGQfgBaiIAIGgoAgAoAgQ2AgAgBkH0AWoiCSAAKAIAIGgoAgAoAgxqNgIAIAZB2BBqIeYCIAZB1BBqIbQDIAZB0BBqIbUDIAZBzBBqIZcBIAZByBBqIbYDIAZBxBBqIZgBIAZBwBBqIZkBIAZBvBBqIecCIAZBuBBqIegCIAZBtBBqIY4CIAZBsBBqIUEgBkGsEGohmgEgBkGoEGohEyAGQaQQaiFCIAZBoBBqIY8CIAZBnBBqIbcDIAZBmBBqIZACIAZBlBBqIWkgBkGQEGohuAMgBkGMEGohmwEgBkGIEGoh6QIgBkGEEGohnAEgBkGAEGohJyAGQfwPaiG5AyAGQfgPaiE5IAZB9A9qIeoCIAZB8A9qIesCIAZB7A9qIRwgBkHoD2ohkQIgBkHkD2ohugMgBkHgD2ohnQEgBkHcD2ohkgIgBkHYD2ohkwIgBkHUD2oh2QEgBkHQD2ohUyAGQcwPaiGUAiAGQcgPaiGVAiAGQcQPaiHsAiAGQcAPaiGWAiAGQbwPaiHaASAGQbgPaiHbASAGQbQPaiGXAiAGQbAPaiG7AyAGQawPaiEvIAZBqA9qIe0CIAZBpA9qIWogBkGgD2ohvAMgBkGcD2ohayAGQZgPaiGeASAGQZQPaiHuAiAGQZAPaiFUIAZBjA9qIe8CIAZBiA9qIWwgBkGED2ohbSAGQYAPaiG9AyAGQfwOaiG+AyAGQfgOaiHcASAGQfQOaiECIAZB8A5qIZ8BIAZB7A5qIZgCIAZB6A5qIUMgBkHkDmohoAEgBkHgDmohFCAGQdwOaiFEIAZB2A5qIZkCIAZB1A5qIb8DIAZB0A5qIZoCIAZBzA5qIW4gBkHIDmohwAMgBkHEDmohoQEgBkHADmoh8AIgBkG8DmohogEgBkG4DmohKCAGQbQOaiHBAyAGQbAOaiE6IAZBrA5qIfECIAZBqA5qIfICIAZBpA5qIR0gBkGgDmohmwIgBkGcDmohwgMgBkGYDmohowEgBkGUDmohnAIgBkGQDmohnQIgBkGMDmoh3QEgBkGIDmohVSAGQYQOaiGeAiAGQYAOaiGfAiAGQfwNaiHzAiAGQfgNaiGgAiAGQfQNaiHeASAGQfANaiHfASAGQewNaiGhAiAGQegNaiHDAyAGQeQNaiEwIAZB4A1qIfQCIAZB3A1qIW8gBkHYDWohxAMgBkHUDWohcCAGQdANaiGkASAGQcwNaiH1AiAGQcgNaiFWIAZBxA1qIfYCIAZBwA1qIXEgBkG8DWohciAGQbgNaiHFAyAGQbQNaiHGAyAGQbANaiHgASAGQawNaiEDIAZBqA1qIaUBIAZBpA1qIaICIAZBoA1qIUUgBkGcDWohpgEgBkGYDWohFSAGQZQNaiFGIAZBkA1qIaMCIAZBjA1qIccDIAZBiA1qIaQCIAZBhA1qIXMgBkGADWohyAMgBkH8DGohpwEgBkH4DGoh9wIgBkH0DGohqAEgBkHwDGohKSAGQewMaiHJAyAGQegMaiE7IAZB5AxqIfgCIAZB4AxqIfkCIAZB3AxqIR4gBkHYDGohpQIgBkHUDGohygMgBkHQDGohqQEgBkHMDGohpgIgBkHIDGohpwIgBkHEDGoh4QEgBkHADGohVyAGQbwMaiGoAiAGQbgMaiGpAiAGQbQMaiH6AiAGQbAMaiGqAiAGQawMaiHiASAGQagMaiHjASAGQaQMaiGrAiAGQaAMaiHLAyAGQZwMaiExIAZBmAxqIfsCIAZBlAxqIXQgBkGQDGohzAMgBkGMDGohdSAGQYgMaiGqASAGQYQMaiH8AiAGQYAMaiFYIAZB/AtqIf0CIAZB+AtqIXYgBkH0C2ohdyAGQfALaiHNAyAGQewLaiHOAyAGQegLaiHkASAGQeQLaiEEIAZB4AtqIasBIAZB3AtqIawCIAZB2AtqIUcgBkHUC2ohrAEgBkHQC2ohFiAGQcwLaiFIIAZByAtqIa0CIAZBxAtqIc8DIAZBwAtqIa4CIAZBvAtqIXggBkG4C2oh0AMgBkG0C2ohrQEgBkGwC2oh/gIgBkGsC2ohrgEgBkGoC2ohKiAGQaQLaiHRAyAGQaALaiE8IAZBnAtqIf8CIAZBmAtqIYADIAZBlAtqIR8gBkGQC2ohrwIgBkGMC2oh0gMgBkGIC2ohrwEgBkGEC2ohsAIgBkGAC2ohsQIgBkH8Cmoh5QEgBkH4CmohWSAGQfQKaiGyAiAGQfAKaiGzAiAGQewKaiGBAyAGQegKaiG0AiAGQeQKaiHmASAGQeAKaiHnASAGQdwKaiG1AiAGQdgKaiHTAyAGQdQKaiEyIAZB0ApqIYIDIAZBzApqIXkgBkHICmoh1AMgBkHECmoheiAGQcAKaiGwASAGQbwKaiGDAyAGQbgKaiFaIAZBtApqIYQDIAZBsApqIXsgBkGsCmohfCAGQagKaiHVAyAGQaQKaiHWAyAGQaAKaiHoASAGQZwKaiEFIAZBmApqIbEBIAZBlApqIekBIAZBkApqIdcDIAZBjApqIdgDIAZBiApqIdkDIAZBhApqIdoDIAZBgApqIdsDIAZB/AlqIYUDIAZB+AlqIYYDIAZB9AlqIeoBIAZB8AlqIbIBIAZB7AlqIVsgBkHoCWohfSAGQeQJaiF+IAZB4AlqIbMBIAZB3AlqIbQBIAZB2AlqIesBIAZB1AlqIewBIAZB0AlqIe0BIAZBzAlqIe4BIAZByAlqIYcDIAZBxAlqIYgDIAZBwAlqIdwDIAZBvAlqId0DIAZBuAlqIbUBIAZBtAlqId4DIAZBsAlqIbYBIAZBrAlqIbcBIAZBqAlqIYkDIAZBpAlqIYoDIAZBoAlqIbYCIAZBnAlqIUkgBkGYCWohuAEgBkGUCWohFyAGQZAJaiFKIAZBjAlqIbcCIAZBiAlqId8DIAZBhAlqIbgCIAZBgAlqIX8gBkH8CGoh4AMgBkH4CGohuQEgBkH0CGohiwMgBkHwCGohugEgBkHsCGohKyAGQegIaiHhAyAGQeQIaiE9IAZB4AhqIYwDIAZB3AhqIY0DIAZB2AhqISAgBkHUCGohuQIgBkHQCGoh4gMgBkHMCGohuwEgBkHICGohugIgBkHECGohuwIgBkHACGoh7wEgBkG8CGohXCAGQbgIaiG8AiAGQbQIaiG9AiAGQbAIaiGOAyAGQawIaiG+AiAGQagIaiHwASAGQaQIaiHxASAGQaAIaiG/AiAGQZwIaiHjAyAGQZgIaiEzIAZBlAhqIY8DIAZBkAhqIYABIAZBjAhqIeQDIAZBiAhqIYEBIAZBhAhqIbwBIAZBgAhqIZADIAZB/AdqIV0gBkH4B2ohkQMgBkH0B2ohggEgBkHwB2ohgwEgBkHsB2oh5QMgBkHoB2oh5gMgBkHkB2oh8gEgBkHgB2ohCyAGQdwHaiG9ASAGQdgHaiHAAiAGQdQHaiFLIAZB0AdqIb4BIAZBzAdqIRggBkHIB2ohTCAGQcQHaiHBAiAGQcAHaiHnAyAGQbwHaiHCAiAGQbgHaiGEASAGQbQHaiHoAyAGQbAHaiG/ASAGQawHaiGSAyAGQagHaiHAASAGQaQHaiEsIAZBoAdqIekDIAZBnAdqIT4gBkGYB2ohkwMgBkGUB2ohlAMgBkGQB2ohISAGQYwHaiHDAiAGQYgHaiHqAyAGQYQHaiHBASAGQYAHaiHEAiAGQfwGaiHFAiAGQfgGaiHzASAGQfQGaiFeIAZB8AZqIcYCIAZB7AZqIccCIAZB6AZqIZUDIAZB5AZqIcgCIAZB4AZqIfQBIAZB3AZqIfUBIAZB2AZqIckCIAZB1AZqIesDIAZB0AZqITQgBkHMBmohlgMgBkHIBmohhQEgBkHEBmoh7AMgBkHABmohhgEgBkG8BmohwgEgBkG4BmohlwMgBkG0BmohXyAGQbAGaiGYAyAGQawGaiGHASAGQagGaiGIASAGQaQGaiHtAyAGQaAGaiHuAyAGQZwGaiH2ASAGQZgGaiENIAZBlAZqIcMBIAZBkAZqIcoCIAZBjAZqIU0gBkGIBmohxAEgBkGEBmohGSAGQYAGaiFOIAZB/AVqIcsCIAZB+AVqIe8DIAZB9AVqIcwCIAZB8AVqIYkBIAZB7AVqIfADIAZB6AVqIcUBIAZB5AVqIZkDIAZB4AVqIcYBIAZB3AVqIS0gBkHYBWoh8QMgBkHUBWohPyAGQdAFaiGaAyAGQcwFaiGbAyAGQcgFaiEiIAZBxAVqIc0CIAZBwAVqIfIDIAZBvAVqIccBIAZBuAVqIc4CIAZBtAVqIc8CIAZBsAVqIfcBIAZBrAVqIWAgBkGoBWoh0AIgBkGkBWoh0QIgBkGgBWohnAMgBkGcBWoh0gIgBkGYBWoh+AEgBkGUBWoh+QEgBkGQBWoh0wIgBkGMBWoh8wMgBkGIBWohNSAGQYQFaiGdAyAGQYAFaiGKASAGQfwEaiH0AyAGQfgEaiGLASAGQfQEaiHIASAGQfAEaiGeAyAGQewEaiFhIAZB6ARqIZ8DIAZB5ARqIYwBIAZB4ARqIY0BIAZB3ARqIfUDIAZB2ARqIfYDIAZB1ARqIfoBIAZB0ARqIQ4gBkHMBGohyQEgBkHIBGoh1AIgBkHEBGohTyAGQcAEaiHKASAGQbwEaiEaIAZBuARqIVAgBkG0BGoh1QIgBkGwBGoh9wMgBkGsBGoh1gIgBkGoBGohjgEgBkGkBGoh+AMgBkGgBGohywEgBkGcBGohoAMgBkGYBGohzAEgBkGUBGohLiAGQZAEaiH5AyAGQYwEaiFAIAZBiARqIaEDIAZBhARqIaIDIAZBgARqISMgBkH8A2oh1wIgBkH4A2oh+gMgBkH0A2ohzQEgBkHwA2oh2AIgBkHsA2oh2QIgBkHoA2oh+wEgBkHkA2ohYiAGQeADaiHaAiAGQdwDaiHbAiAGQdgDaiGjAyAGQdQDaiHcAiAGQdADaiH8ASAGQcwDaiH9ASAGQcgDaiHdAiAGQcQDaiH7AyAGQcADaiE2IAZBvANqIaQDIAZBuANqIY8BIAZBtANqIfwDIAZBsANqIZABIAZBrANqIc4BIAZBqANqIaUDIAZBpANqIWMgBkGgA2ohpgMgBkGcA2ohkQEgBkGYA2ohkgEgBkGUA2oh/QMgBkGQA2oh/gMgBkGMA2oh/gEgBkGIA2ohDyAGQYQDaiHPASAGQYADaiH/ASAGQfwCaiH/AyAGQfgCaiGABCAGQfQCaiGBBCAGQfACaiGCBCAGQewCaiGDBCAGQegCaiGnAyAGQeQCaiGoAyAGQeACaiGAAiAGQdwCaiHQASAGQdgCaiFkIAZB1AJqIZMBIAZB0AJqIZQBIAZBzAJqIdEBIAZByAJqIdIBIAZBxAJqIYECIAZBwAJqIYICIAZBvAJqIYMCIAZBuAJqIYQCIAZBtAJqIakDIAZB6AFqIQAgBkHkAWohNyAGQdgBaiHeAiAGQdQBaiEBIAZB0AFqISUgBkHMAWohhQIgBkHIAWoh3wIgBkHEAWohhgIgBkHAAWohqgMgBkG8AWohhwIgBkG4AWoh0wEgBkG0AWohqwMgBkGwAWohhAQgBkGsAWohGyAGQagBaiHUASAGQaQBaiHgAiAGQaABaiGFBCAGQZQBaiGsAyAGQZABaiGGBCAGQYwBaiGIAiAGQYgBaiGVASAGQYQBaiHhAiAGQYABaiGtAyAGQfwAaiHVASAGQfgAaiGHBCAGQfQAaiGIBCAGQfAAaiGJAiAGQewAaiFlIAZB6ABqIeICIAZB5ABqIeMCIAZB2ABqIa4DIAZB1ABqIYkEIAZB0ABqIYoEIAZBzABqIZYBIAZByABqIVEgBkHEAGohrwMgBkFAayGwAyAGQTxqIbEDIAZBOGohZiAGQTRqIeQCIAZBMGohiwQgBkEsaiFnIAZBKGoh5QIgBkEkaiHWASAGQSBqIdcBIAZBHGohigIgBkEYaiGMBCAGQfABaiKNBCDYASgCACgCFEH/H0kEfyDYASgCACgCFAVB/x8LIosCNgIAIAZB7AFqIosCINgBKAIAKAIQQQNGBH9BAwVBBAs2AgAgACA4KAIAKAIUNgIAIDcgOCgCACgCEDYCACBoKAIAIGgoAgAoAhg2AhwgOCgCACAHKAIAIAgoAgAQ8AIgJCAkKAIAICQoAgAgCSgCAEZqNgIAIN4CQgA3AgAg3gJBADYCCANAICQoAgAgswMoAgBJBEAgJUEANgIAIIYCICQoAgAgUigCAGs2AgAgqgMghgIoAgBBAEdBAXM2AgAg2AEoAgAhByAkKAIAIQggjQIoAgAhCSCyAygCACEKICYoAgAhDCCqAygCACEQIDcoAgAhESCLAigCACESIGQgaCgCADYCACCTASAHNgIAIJQBIAg2AgAg0QEgCTYCACDSASAKNgIAIIECIAw2AgAgggIgEDYCACCDAiARNgIAIIQCIBI2AgAgqQMgkwEoAgAoAhA2AgACQCCUASgCACBkKAIAKAIEIGQoAgAoAhhqSQRAINABQQA2AgAFIJMBKAIAIQcglAEoAgAhCCDRASgCACEJIKkDKAIAIQog0gEoAgAhDCD/ASBkKAIANgIAIP8DIAc2AgAggAQgCDYCACCBBCAJNgIAIIIEIAo2AgAggwQgDDYCACCnAyD/ASgCACgCBDYCACCoAyCABCgCACCnAygCAGs2AgAggAIg/wEoAgAoAhg2AgADQCCAAigCACCoAygCAEkEQCD/ASgCACD/AygCACCnAygCACCAAigCAGoggQQoAgAgggQoAgAggwQoAgAQugIhByCAAiCAAigCACAHajYCAAwBCwsg/wEoAgAgqAMoAgA2AhgCQAJAAkACQCCpAygCAEEDaw4FAAMCAQEDCyCTASgCACEHIJQBKAIAIQgg0QEoAgAhCSDSASgCACEKIIECKAIAIQwgggIoAgAhECCDAigCACERIIQCKAIAIRIgTyBkKAIANgIAIMoBIAc2AgAgGiAINgIAIFAgCTYCACDVAiAKNgIAIPcDIAw2AgAg1gIgEDYCACCOASARNgIAIPgDIBI2AgAgywFBAzYCACCgAyDKASgCACgCFEH/H0kEfyDKASgCACgCFAVB/x8LIgc2AgAgzAEgTygCACgCBDYCACAuIBooAgAgzAEoAgBrNgIAIPkDIMoBKAIAKAIINgIAIEAgywEoAgBBA0YEf0EDBUEECzYCACChAyBPKAIAKAIkNgIAIKIDIBooAgAg+QMoAgAgywEoAgAQuwI2AgAgIyChAygCACCiAygCAEECdGooAgA2AgAg1wIgTygCACgCLDYCACD6AyDKASgCACgCBEEBazYCACDNAUEBIPoDKAIAdEEBazYCACDYAkEANgIAINkCQQA2AgAg+wEgTygCACgCCDYCACBiIE8oAgAoAgw2AgAg2gIg+wEoAgAgYigCAGo2AgAg2wIgzAEoAgAgYigCAGo2AgAgowMgzQEoAgAgLigCAE8Ef0EABSAuKAIAIM0BKAIAawsiBzYCACDcAiBPKAIAKAIQNgIAIPwBINcCKAIAIC4oAgAgzQEoAgBxQQN0ajYCACD9ASDXAigCACAuKAIAIM0BKAIAcUEDdGpBBGo2AgAg3QIgLigCAEEJajYCACA2QQA2AgAgpANBASDKASgCACgCDHQ2AgAgjwEg+AMoAgBBAWs2AgAg/AMg1gIoAgBBA2o2AgAgkAEg1gIoAgA2AgACQAJAAkADQCCQASgCACD8AygCAE8NAiD3AygCACEHIM4BIJABKAIAQQNGBH8gBygCAEEBawUgByCQASgCAEECdGooAgALIgc2AgAgpQMgLigCACDOASgCAGs2AgAgY0EANgIAIM4BKAIAQQFrIC4oAgAgYigCAGtJBEAgGigCACBAKAIAEPECIBooAgAgzgEoAgBrIEAoAgAQ8QJGBEAgYyAaKAIAIEAoAgBqIBooAgAgQCgCAGogzgEoAgBrIFAoAgAQvAIgQCgCAGo2AgALBSCmAyD7ASgCACClAygCAGo2AgAg1QIoAgAEQCDOASgCAEEBayAuKAIAINwCKAIAa0kgYigCAEEBayClAygCAGtBA09xBEAgGigCACBAKAIAEPECIKYDKAIAIEAoAgAQ8QJGBEAgYyAaKAIAIEAoAgBqIKYDKAIAIEAoAgBqIFAoAgAg2gIoAgAg2wIoAgAQvQIgQCgCAGo2AgALCwsLIGMoAgAgjwEoAgBLBEAgjwEgYygCADYCACCOASgCACA2KAIAQQN0aiCQASgCACDWAigCAGs2AgAgjgEoAgAgNigCAEEDdGogYygCADYCBCA2IDYoAgBBAWo2AgAgYygCACCgAygCAEsgGigCACBjKAIAaiBQKAIARnINAgsgkAEgkAEoAgBBAWo2AgAMAAsACyDUAiA2KAIANgIADAELIMsBKAIAQQNGBEAgjwEoAgAgywEoAgBJBEAgkQEgTygCACAaKAIAEPICNgIAIJEBKAIAINwCKAIASyAuKAIAIJEBKAIAa0GAgBBJcQRAAkACQCDVAigCAEUNACCRASgCACBiKAIATw0AIP4DIPsBKAIAIJEBKAIAajYCACCSASAaKAIAIP4DKAIAIFAoAgAg2gIoAgAg2wIoAgAQvQI2AgAMAQsg/QMgzAEoAgAgkQEoAgBqNgIAIJIBIBooAgAg/QMoAgAgUCgCABC8AjYCAAsgkgEoAgAgywEoAgBPBEAgjwEgkgEoAgA2AgAgjgEoAgAgLigCACCRASgCAGtBAmo2AgAgjgEoAgAgkgEoAgA2AgQgNkEBNgIAIJIBKAIAIKADKAIASyAaKAIAIJIBKAIAaiBQKAIARnIEQCBPKAIAIC4oAgBBAWo2Ahgg1AJBATYCAAwFCwsLCwsgoQMoAgAgogMoAgBBAnRqIC4oAgA2AgACQAJAAkADQAJAIKQDIKQDKAIAIgdBf2o2AgAgB0UNACAjKAIAINwCKAIATQ0AIP4BINcCKAIAICMoAgAgzQEoAgBxQQN0ajYCACDYAigCACEHINkCKAIAIQggDyDYAigCACDZAigCAEkEfyAHBSAICzYCAAJAAkAg1QIoAgBFDQAgIygCACAPKAIAaiBiKAIATw0AIM8BIPsBKAIAICMoAgBqNgIAIBooAgAgDygCAGogzwEoAgAgDygCAGogUCgCACDaAigCACDbAigCABC9AiEHIA8gDygCACAHajYCACAjKAIAIA8oAgBqIGIoAgBPBEAgzwEgzAEoAgAgIygCAGo2AgALDAELIM8BIMwBKAIAICMoAgBqNgIAIBooAgAgDygCAGogzwEoAgAgDygCAGogUCgCABC8AiEHIA8gDygCACAHajYCAAsgDygCACCPASgCAEsEQCAPKAIAIN0CKAIAICMoAgBrSwRAIN0CICMoAgAgDygCAGo2AgALII8BIA8oAgA2AgAgjgEoAgAgNigCAEEDdGogLigCACAjKAIAa0ECajYCACCOASgCACA2KAIAQQN0aiAPKAIANgIEIDYgNigCAEEBajYCACAPKAIAQYAgSw0BIBooAgAgDygCAGogUCgCAEYNAQsgIygCACEHIM8BKAIAIA8oAgBqLQAAIBooAgAgDygCAGotAABIBEAg/AEoAgAgBzYCACDYAiAPKAIANgIAICMoAgAgowMoAgBNDQMg/AEg/gEoAgBBBGo2AgAgIyD+ASgCACgCBDYCAAUg/QEoAgAgBzYCACDZAiAPKAIANgIAICMoAgAgowMoAgBNDQQg/QEg/gEoAgA2AgAgIyD+ASgCACgCADYCAAsMAQsLDAILIPwBIPsDNgIADAELIP0BIPsDNgIACyD9ASgCAEEANgIAIPwBKAIAQQA2AgAgTygCACDdAigCAEEIazYCGCDUAiA2KAIANgIACyDQASDUAigCADYCAAwECyCTASgCACEHIJQBKAIAIQgg0QEoAgAhCSDSASgCACEKIIECKAIAIQwgggIoAgAhECCDAigCACERIIQCKAIAIRIgSSBkKAIANgIAILgBIAc2AgAgFyAINgIAIEogCTYCACC3AiAKNgIAIN8DIAw2AgAguAIgEDYCACB/IBE2AgAg4AMgEjYCACC5AUEGNgIAIIsDILgBKAIAKAIUQf8fSQR/ILgBKAIAKAIUBUH/HwsiBzYCACC6ASBJKAIAKAIENgIAICsgFygCACC6ASgCAGs2AgAg4QMguAEoAgAoAgg2AgAgPSC5ASgCAEEDRgR/QQMFQQQLNgIAIIwDIEkoAgAoAiQ2AgAgjQMgFygCACDhAygCACC5ASgCABC7AjYCACAgIIwDKAIAII0DKAIAQQJ0aigCADYCACC5AiBJKAIAKAIsNgIAIOIDILgBKAIAKAIEQQFrNgIAILsBQQEg4gMoAgB0QQFrNgIAILoCQQA2AgAguwJBADYCACDvASBJKAIAKAIINgIAIFwgSSgCACgCDDYCACC8AiDvASgCACBcKAIAajYCACC9AiC6ASgCACBcKAIAajYCACCOAyC7ASgCACArKAIATwR/QQAFICsoAgAguwEoAgBrCyIHNgIAIL4CIEkoAgAoAhA2AgAg8AEguQIoAgAgKygCACC7ASgCAHFBA3RqNgIAIPEBILkCKAIAICsoAgAguwEoAgBxQQN0akEEajYCACC/AiArKAIAQQlqNgIAIDNBADYCACCPA0EBILgBKAIAKAIMdDYCACCAASDgAygCAEEBazYCACDkAyC4AigCAEEDajYCACCBASC4AigCADYCAAJAAkACQANAIIEBKAIAIOQDKAIATw0CIN8DKAIAIQcgvAEggQEoAgBBA0YEfyAHKAIAQQFrBSAHIIEBKAIAQQJ0aigCAAsiBzYCACCQAyArKAIAILwBKAIAazYCACBdQQA2AgAgvAEoAgBBAWsgKygCACBcKAIAa0kEQCAXKAIAID0oAgAQ8QIgFygCACC8ASgCAGsgPSgCABDxAkYEQCBdIBcoAgAgPSgCAGogFygCACA9KAIAaiC8ASgCAGsgSigCABC8AiA9KAIAajYCAAsFIJEDIO8BKAIAIJADKAIAajYCACC3AigCAARAILwBKAIAQQFrICsoAgAgvgIoAgBrSSBcKAIAQQFrIJADKAIAa0EDT3EEQCAXKAIAID0oAgAQ8QIgkQMoAgAgPSgCABDxAkYEQCBdIBcoAgAgPSgCAGogkQMoAgAgPSgCAGogSigCACC8AigCACC9AigCABC9AiA9KAIAajYCAAsLCwsgXSgCACCAASgCAEsEQCCAASBdKAIANgIAIH8oAgAgMygCAEEDdGoggQEoAgAguAIoAgBrNgIAIH8oAgAgMygCAEEDdGogXSgCADYCBCAzIDMoAgBBAWo2AgAgXSgCACCLAygCAEsgFygCACBdKAIAaiBKKAIARnINAgsggQEggQEoAgBBAWo2AgAMAAsACyC2AiAzKAIANgIADAELILkBKAIAQQNGBEAggAEoAgAguQEoAgBJBEAgggEgSSgCACAXKAIAEPICNgIAIIIBKAIAIL4CKAIASyArKAIAIIIBKAIAa0GAgBBJcQRAAkACQCC3AigCAEUNACCCASgCACBcKAIATw0AIOYDIO8BKAIAIIIBKAIAajYCACCDASAXKAIAIOYDKAIAIEooAgAgvAIoAgAgvQIoAgAQvQI2AgAMAQsg5QMgugEoAgAgggEoAgBqNgIAIIMBIBcoAgAg5QMoAgAgSigCABC8AjYCAAsggwEoAgAguQEoAgBPBEAggAEggwEoAgA2AgAgfygCACArKAIAIIIBKAIAa0ECajYCACB/KAIAIIMBKAIANgIEIDNBATYCACCDASgCACCLAygCAEsgFygCACCDASgCAGogSigCAEZyBEAgSSgCACArKAIAQQFqNgIYILYCQQE2AgAMBQsLCwsLIIwDKAIAII0DKAIAQQJ0aiArKAIANgIAAkACQAJAA0ACQCCPAyCPAygCACIHQX9qNgIAIAdFDQAgICgCACC+AigCAE0NACDyASC5AigCACAgKAIAILsBKAIAcUEDdGo2AgAgugIoAgAhByC7AigCACEIIAsgugIoAgAguwIoAgBJBH8gBwUgCAs2AgACQAJAILcCKAIARQ0AICAoAgAgCygCAGogXCgCAE8NACC9ASDvASgCACAgKAIAajYCACAXKAIAIAsoAgBqIL0BKAIAIAsoAgBqIEooAgAgvAIoAgAgvQIoAgAQvQIhByALIAsoAgAgB2o2AgAgICgCACALKAIAaiBcKAIATwRAIL0BILoBKAIAICAoAgBqNgIACwwBCyC9ASC6ASgCACAgKAIA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CyCFAiAAKAIAICUoAgBBHGxqKAIINgIAIN8CIAAoAgAgJSgCAEEcbGooAgQ2AgAgASAlKAIAIIUCKAIAazYCAAsLILADIIUCKAIANgIAILEDIN8CKAIANgIAIGYgASgCADYCAANAIOQCIAAoAgAgZigCAEEcbGooAgg2AgAgiwQgACgCACBmKAIAQRxsaigCBDYCACAAKAIAIGYoAgBBHGxqILADKAIANgIIIAAoAgAgZigCAEEcbGogsQMoAgA2AgQgsAMg5AIoAgA2AgAgsQMgiwQoAgA2AgAg5AIoAgAgZigCAE0EQCBmIGYoAgAg5AIoAgBrNgIADAELCyBnQQA2AgADQCBnKAIAICUoAgBJBEAg5QIgJCgCACBSKAIAazYCACDWASAAKAIAIGcoAgBBHGxqKAIINgIAINcBIAAoAgAgZygCAEEcbGooAgQ2AgAg1gEoAgBBAUYEQCAkICQoAgBBAWo2AgAgZyBnKAIAQQFqNgIADAILIGcgZygCACDWASgCAGo2AgAgJCAkKAIAINYBKAIAajYCACDXASgCAEEDTwRAICYoAgAgJigCACgCBDYCCCAmKAIAICYoAgAoAgA2AgQgJigCACDXASgCAEECazYCAAUgigIg1wEoAgAg5QIoAgBFajYCACCKAigCAARAICYoAgAhByCMBCCKAigCAEEDRgR/IAcoAgBBAWsFIAcgigIoAgBBAnRqKAIACyIHNgIAIIoCKAIAQQJPBEAgJigCACAmKAIAKAIENgIICyAmKAIAICYoAgAoAgA2AgQgJigCACCMBCgCADYCAAsLIDgoAgAg5QIoAgAgUigCACDXASgCACDWASgCABD4AiCOBCgCACDlAigCACBSKAIAINcBKAIAINYBKAIAQQNrEPkCIFIgJCgCADYCAAwBCwsgOCgCABD6AgwBCwsgjQIoAgAgUigCAGshACAGJAUgAAuM1gEBiQR/IwUhBiMFQeAQaiQFIAZBFGoiCyAANgIAIAZBEGoiACABNgIAIAZBDGoiASACNgIAIAZBCGoiAiADNgIAIAZBBGoiAyAENgIAIAYgBTYCACAAKAIAIQAgASgCACEBIAIoAgAhAiADKAIAIQMgBigCACEEIAZBsAJqImggCygCADYCACAGQawCaiKOBCAANgIAIAZBqAJqIiYgATYCACAGQaQCaiLYASAC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ABC9AiBAKAIAajYCAAsLCwsgYygCACCPASgCAEsEQCCPASBjKAIANgIAII4BKAIAIDYoAgBBA3RqIJABKAIAINYCKAIAazYCACCOASgCACA2KAIAQQN0aiBjKAIANgIEIDYgNigCAEEBajYCACBjKAIAIKADKAIASyAaKAIAIGMoAgBqIFAoAgBGcg0CCyCQASCQASgCAEEBajYCAAwACwALINQCIDYoAgA2AgAMAQsgywEoAgBBA0YEQCCPASgCACDLASgCAEkEQCCRASBPKAIAIBooAgAQ8gI2AgAgkQEoAgAg3AIoAgBLIC4oAgAgkQEoAgBrQYCAEElxBEACQAJAINUCKAIARQ0AIJEBKAIAIGIoAgBPDQAg/gMg+wEoAgAgkQEoAgBqNgIAIJIBIBooAgAg/gMoAgAgUCgCACDaAigCACDbAigCABC9AjYCAAwBCyD9AyDMASgCACCRASgCAGo2AgAgkgEgGigCACD9AygCACBQKAIAELwCNgIACyCSASgCACDLASgCAE8EQCCPASCSASgCADYCACCOASgCACAuKAIAIJEBKAIAa0ECajYCACCOASgCACCSASgCADYCBCA2QQE2AgAgkgEoAgAgoAMoAgBLIBooAgAgkgEoAgBqIFAoAgBGcgRAIE8oAgAgLigCAEEBajYCGCDUAkEBNgIADAULCwsLCyChAygCACCiAygCAEECdGogLigCADYCAAJAAkACQANAAkAgpAMgpAMoAgAiB0F/ajYCACAHRQ0AICMoAgAg3AIoAgBNDQAg/gEg1wIoAgAgIygCACDNASgCAHFBA3RqNgIAINgCKAIAIQcg2QIoAgAhCCAPINgCKAIAINkCKAIASQR/IAcFIAgLNgIAAkACQCDVAigCAEUNACAjKAIAIA8oAgBqIGIoAgBPDQAgzwEg+wEoAgAgIygCAGo2AgAgGigCACAPKAIAaiDPASgCACAPKAIAaiBQKAIAINoCKAIAINsCKAIAEL0CIQcgDyAPKAIAIAdqNgIAICMoAgAgDygCAGogYigCAE8EQCDPASDMASgCACAjKAIAajYCAAsMAQsgzwEgzAEoAgAgIygCAGo2AgAgGigCACAPKAIAaiDPASgCACAPKAIAaiBQKAIAELwCIQcgDyAPKAIAIAdqNgIACyAPKAIAII8BKAIASwRAIA8oAgAg3QIo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ICsoAgAgggEoAgBrQQJqNgIAIH8oAgAggwEoAgA2AgQgM0EBNgIAIIMBKAIAIIsDKAIASyAXKAIAIIMBKAIAaiBKKAIARnIEQCBJKAIAICsoAgBBAWo2AhggtgJBATYCAAwFCwsLCwsgjAMoAgAgjQMoAgBBAnRqICsoAgA2AgACQAJAAkADQAJAII8DII8DKAIAIgdBf2o2AgAgB0UNACAgKAIAIL4CKAIATQ0AIPIBILkCKAIAICAoAgAguwEoAgBxQQN0ajYCACC6AigCACEHILsCKAIAIQggCyC6AigCACC7AigCAEkEfyAHBSAICzYCAAJAAkAgtwIoAgBFDQAgICgCACALKAIAaiBcKAIATw0AIL0BIO8BKAIAICAoAgBqNgIAIBcoAgAgCygCAGogvQEoAgAgCygCAGogSigCACC8AigCACC9AigCABC9AiEHIAsgCygCACAHajYCACAgKAIAIAsoAgBqIFwoAgBPBEAgvQEgugEoAgAgICgCAGo2AgALDAELIL0BILoBKAIAICAoAgBqNgIAIBcoAgAgCygCAGogvQEoAgAgCygCAGogSigCABC8AiEHIAsgCygCACAHajYCAAsgCygCACCAASgCAEsEQCALKAIAIL8CKAIAICAoAgBrSwRAIL8CICAoAgAgCygCAGo2AgALIIABIAsoAgA2AgAgfygCACAzKAIAQQN0aiArKAIAICAoAgBrQQJqNgIAIH8oAgAgMygCAEEDdGogCygCADYCBCAzIDMoAgBBAWo2AgAgCygCAEGAIEsNASAXKAIAIAsoAgBqIEooAgBGDQELICAoAgAhByC9ASgCACALKAIAai0AACAXKAIAIAsoAgBqLQAASARAIPABKAIAIAc2AgAgugIgCygCADYCACAgKAIAII4DKAIATQ0DIPABIPIBKAIAQQRqNgIAICAg8gEoAgAoAgQ2AgAFIPEBKAIAIAc2AgAguwIgCygCADYCACAgKAIAII4DKAIATQ0EIPEBIPIBKAIANgIAICAg8gEoAgAoAgA2AgALDAELCwwCCyDwASDjAzYCAAwBCyDxASDjAzYCAAsg8QEoAgBBADYCACDwASgCAEEANgIAIEkoAgAgvwIoAgBBCGs2AhggtgIgMygCADYCAAsg0AEgtgIoAgA2AgAMAwsgkwEoAgAhByCUASgCACEIINEB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ASASNgIAIIcDIH0oAgAoAhA2AgACQCB+KAIAIFsoAgAoAgQgWygCACgCGGpJBEAgsgFBADYCAAUgfSgCACEHIH4oAgAhCCCzASgCACEJIIcDKAIAIQogtAEoAgAhDCDpASBbKAIANgIAINcDIAc2AgAg2AMgCDYCACDZAyAJNgIAINoDIAo2AgAg2wMgDDYCACCFAyDpASgCACgCBDYCACCGAyDYAygCACCFAygCAGs2AgAg6gEg6QEoAgAoAhg2AgADQCDqASgCACCGAygCAEkEQCDpASgCACDXAygCACCFAygCACDqASgCAGog2QMoAgAg2gMoAgAg2wMoAgAQugIhByDqASDqASgCACAHajYCAAwBCwsg6QEoAgAghgMoAgA2AhgCQAJAAkACQCCHAygCAEEDaw4FAAMCAQEDCyB9KAIAIQcgfigCACEIILMBKAIAIQkgtAEoAgAhCiDrASgCACEMIOwBKAIAIRAg7QEoAgAhESDuASgCACESIEcgWygCADYCACCsASAHNgIAIBYgCDYCACBIIAk2AgAgrQIgCjYCACDPAyAMNgIAIK4CIBA2AgAgeCARNgIAINADIBI2AgAgrQFBAzYCACD+AiCsASgCACgCFEH/H0kEfyCsASgCACgCFAVB/x8LIgc2AgAgrgEgRygCACgCBDYCACAqIBYoAgAgrgEoAgBrNgIAINEDIKwBKAIAKAIINgIAIDwgrQEoAgBBA0YEf0EDBUEECzYCACD/AiBHKAIAKAIkNgIAIIADIBYoAgAg0QMoAgAgrQEoAgAQuwI2AgAgHyD/AigCACCAAygCAEECdGooAgA2AgAgrwIgRygCACgCLDYCACDSAyCsASgCACgCBEEBazYCACCvAUEBINIDKAIAdEEBazYCACCwAkEANgIAILECQQA2AgAg5QEgRygCACgCCDYCACBZIEcoAgAoAgw2AgAgsgIg5QEoAgAgWSgCAGo2AgAgswIgrgEoAgAgWSgCAGo2AgAggQMgrwEoAgAgKigCAE8Ef0EABSAqKAIAIK8BKAIAawsiBzYCACC0AiBHKAIAKAIQNgIAIOYBIK8CKAIAICooAgAgrwEoAgBxQQN0ajYCACDnASCvAigCACAqKAIAIK8BKAIAcUEDdGpBBGo2AgAgtQIgKigCAEEJajYCACAyQQA2AgAgggNBASCsASgCACgCDHQ2AgAgeSDQAygCAEEBazYCACDUAyCuAigCAEEDajYCACB6IK4CKAIANgIAAkACQAJAA0AgeigCACDUAygCAE8NAiDPAygCACEHILABIHooAgBBA0YEfyAHKAIAQQFrBSAHIHooAgBBAnRqKAIACyIHNgIAIIMDICooAgAgsAEoAgBrNgIAIFpBADYCAAJAILABKAIAQQFrICooAgAgWSgCAGtJBEAgFigCACA8KAIAEPECIBYoAgAgsAEoAgBrIDwoAgAQ8QJHDQEgWiAWKAIAIDwoAgBqIBYoAgAgPCgCAGogsAEoAgBrIEgoAgAQvAIgPCgCAGo2AgAFIIQDIOUBKAIAIIMDKAIAajYCACCtAigCAEUNASCwASgCAEEBayAqKAIAILQCKAIAa0kgWSgCAEEBayCDAygCAGtBA09xRQ0BIBYoAgAgPCgCABDxAiCEAygCACA8KAIAEPECRw0BIFogFigCACA8KAIAaiCEAygCACA8KAIAaiBIKAIAILICKAIAILMCKAIAEL0CIDwoAgBqNgIACwsgWigCACB5KAIASwRAIHkgWigCADYCACB4KAIAIDIoAgBBA3RqIHooAgAgrgIoAgBrNgIAIHgoAgAgMigCAEEDdGogWigCADYCBCAyIDIoAgBBAWo2AgAgWigCACD+AigCAEsgFigCACBaKAIAaiBIKAIARnINAgsgeiB6KAIAQQFqNgIADAALAAsgrAIgMigCADYCAAwBCwJAIK0BKAIAQQNGBEAgeSgCACCtASgCAE8NASB7IEcoAgAgFigCABDyAjYCACB7KAIAILQCKAIASyAqKAIAIHsoAgBrQYCAEElxRQ0BAkACQCCtAigCAEUNACB7KAIAIFkoAgBPDQAg1gMg5QEoAgAgeygCAGo2AgAgfCAWKAIAINYDKAIAIEgoAgAgsgIoAgAgswIoAgAQvQI2AgAMAQsg1QMgrgEoAgAgeygCAGo2AgAgfCAWKAIAINUDKAIAIEgoAgAQvAI2AgALIHwoAgAgrQEoAgBJDQEgeSB8KAIANgIAIHgoAgAgKigCACB7KAIAa0ECajYCACB4KAIAIHwoAgA2AgQgMkEBNgIAIHwoAgAg/gIoAgBLIBYoAgAgfCgCAGogSCgCAEZyRQ0BIEcoAgAgKigCAEEBajYCGCCsAkEBNgIADAILCyD/AigCACCAAygCAEECdGogKigCADYCAAJAAkACQANAAkAgggMgggMoAgAiB0F/ajYCACAHRQ0AIB8oAgAgtAIoAgBNDQAg6AEgrwIoAgAgHygCACCvASgCAHFBA3RqNgIAILACKAIAIQcgsQIoAgAhCCAFILACKAIAILECKAIASQR/IAcFIAgLNgIAAkACQCCtAigCAEUNACAfKAIAIAUoAgBqIFkoAgBPDQAgsQEg5QEoAgAgHygCAGo2AgAgFigCACAFKAIAaiCxASgCACAFKAIAaiBIKAIAILICKAIAILMCKAIAEL0CIQcgBSAFKAIAIAdqNgIAIB8oAgAgBSgCAGogWSgCAEkNASCxASCuASgCACAfKAIAajYCAAwBCyCxASCuASgCACAfKAIAajYCACAWKAIAIAUoAgBqILEBKAIAIAUoAgBqIEgoAgAQvAIhByAFIAUoAgAgB2o2AgALIAUoAgAgeSgCAEsEQCAFKAIAILUCKAIAIB8oAgBrSwRAILUCIB8oAgAgBSgCAGo2AgALIHkgBSgCADYCACB4KAIAIDIoAgBBA3RqICooAgAgHygCAGtBAmo2AgAgeCgCACAyKAIAQQN0aiAFKAIANgIEIDIgMigCAEEBajYCACAFKAIAQYAgSw0BIBYoAgAgBSgCAGogSCgCAEYNAQsgHygCACEHILEBKAIAIAUoAgBqLQAAIBYoAgAgBSgCAGotAABIBEAg5gEoAgAgBzYCACCwAiAFKAIANgIAIB8oAgAggQMoAgBNDQMg5gEg6AEoAgBBBGo2AgAgHyDoASgCACgCBDYCAAUg5wEoAgAgBzYCACCxAiAFKAIANgIAIB8oAgAggQMoAgBNDQQg5wEg6AEoAgA2AgAgHyDoASgCACgCADYCAAsMAQsLDAILIOYBINMDNgIADAELIOcBINMDNgIACyDnASgCAEEANgIAIOYBKAIAQQA2AgAgRygCACC1AigCAEEIazYCGCCsAiAyKAIANgIACyCyASCsAigCADYCAAwECyB9KAIAIQcgfigCACEIILMBKAIAIQkgtAEoAgAhCiDrASgCACEMIOwBKAIAIRAg7QEoAgAhESDuASgCACESIEEgWygCADYCACCaASAHNgIAIBMgCDYCACBCIAk2AgAgjwIgCjYCACC3AyAMNgIAIJACIBA2AgAgaSARNgIAILgDIBI2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CyAHQUBrIR8gB0E8aiEgIAdBOGohFSAHQTRqIRYgB0EwaiEdIAdBLGohCiAHQShqISEgB0EkaiEiIAdBIGohDSAHQRxqIQ4gB0EYaiEXIAdBFGohIyAHQRBqIQYgB0EMaiEPIAdBCGohASAHQQRqIQggACATKAIANgIAA0AgACgCAARAIB8gBCgCACAAKAIAIAIoAgBxQQN0akEEajYCACAgIB8oAgAoAgA2AgAgCSgCACALKAIAIAAoAgAgECgCACAFKAIAIBwoAgAgHigCABCIAyAAICAoAgA2AgAgBSAFKAIAQQFqNgIADAELCyAVQQA2AgAgFkEANgIAIB0gCSgCACgCCDYCACAKIAkoAgAoAgw2AgAgISAdKAIAIAooAgBqNgIAICIgESgCACAKKAIAajYCACANIAQoAgAgAygCACACKAIAcUEDdGo2AgAgDiAEKAIAIAMoAgAgAigCAHFBA3RqQQRqNgIAIBcgAygCAEEJajYCACAGQQA2AgAgACAZKAIAIBooAgBBAnRqKAIANgIAIBkoAgAgGigCAEECdGogAygCADYCAAJAAkACQANAAkAgEiASKAIAIgVBf2o2AgAgBUUNACAAKAIAIBsoAgBNDQAgDyAEKAIAIAAoAgAgAigCAHFBA3RqNgIAIBUoAgAhBSAWKAIAIQsgASAVKAIAIBYoAgBJBH8gBQUgCws2AgACQAJAIB4oAgBFDQAgACgCACABKAIAaiAKKAIATw0AIAggHSgCACAAKAIAajYCACAMKAIAIAEoAgBqIAgoAgAgASgCAGogECgCACAhKAIAICIoAgAQvQIhBSABIAEoAgAgBWo2AgAgACgCACABKAIAaiAKKAIATwRAIAggESgCACAAKAIAajYCAAsMAQsgCCARKAIAIAAoAgBqNgIAIAwoAgAgASgCAGogCCgCACABKAIAaiAQKAIAELwCIQUgASABKAIAIAVqNgIACyABKAIAIAYoAgBLBEAgASgCACAXKAIAIAAoAgBrSwRAIBcgACgCACABKAIAajYCAAsgASgCACAGKAIAa0ECdCADKAIAIAAoAgBrQQFqENQBIBgoAgAoAgBBAWoQ1AFrSgRAIAYgASgCADYCACAYKAIAIAMoAgBBAmogACgCAGs2AgALIAwoAgAgASgCAGogECgCAEYNAQsgACgCACEFIAgoAgAg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ACEAIAUkBSAADwsgAigCAEUEQCAIKAIAQajqvmkQigIgAUEENgIACyAPLAAAIQIgBCgCACEHIAEgASgCACIIQQFqNgIAIAcgCGogAjoAACAKKAIARQRAIA4sAAAhAiAEKAIAIQcgASABKAIAIghBAWo2AgAgByAIaiACOgAACwJAAkACQAJAIAsoAgBBAWsOAwECAAMLIAQoAgAgASgCAGogCSgCABCKAiABIAEoAgBBBGo2AgAMAgsgBCgCACABKAIAaiAJKAIAOgAAIAEgASgCAEEBajYCAAwBCyAEKAIAIAEoAgBqIAkoAgBB//8DcRCaAiABIAEoAgBBAmo2AgALAkACQAJAAkACQCAMKAIAQQFrDgMBAgADCyAEKAIAIAEoAgBqIAApAwAQiwIgASABKAIAQQhqNgIADAMLIAQoAgAgASgCAGogACkDAEKAAn2nQf//A3EQmgIgASABKAIAQQJqNgIADAILIAQoAgAgASgCAGogACkDAKcQigIgASABKAIAQQRqNgIADAELIAooAgAEQCAAKQMAp0H/AXEhACAEKAIAIQIgASABKAIAIgRBAWo2AgAgAiAEaiAAOgAACwsgBiABKAIANgIAIAYoAgAhACAFJAUgAAuQCAEPfyMFIQYjBUHwAGokBSAGQcgAaiIHIAA2AgAgBkHEAGoiCiABNgIAIAZBQGsiDSACNgIAIAZBPGoiASADNgIAIAZBOGoiACAENgIAIAZBNGoiECAFNgIAIAZBMGoiAiAHKAIAKALoATYCACAGQSxqIgsgACgCADYCACAGQShqIgggASgCADYCACAGQSRqIg8gCigCADYCACAGQSBqIgQgDygCADYCACAGQRxqIhFBASAHKAIAKAJ4dDYCACAHKAIAKAKYAUEARyAAKAIAQQBHcQRAIAcoAgBBiAJqIAEoAgAgACgCABDrARoLIAZB0ABqIQogBkHMAGohBSAGQRhqIQEgBkEUaiESIAZBEGohEyAGQQxqIQ4gBkEIaiEDIAZBBGohFCAGIQACQAJAAkACQANAIAsoAgBFDQQgASAHKAIAQeADajYCACASIBAoAgAgAigCACALKAIAT3E2AgAgDSgCAEEGSQ0BIAsoAgAgAigCAEkEQCACIAsoAgA2AgALIAgoAgAgAigCAGohDCAKIAEoAgAiCSkCADcCACAKIAkpAgg3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KAIAIgYpAgA3AgAgAiAGKQIINwIIIAIgBikCEDcCECAhIAcgCiACEKkDNgIAICJBADYCACAoIAApAwAgDSgCABCqAzYCACADICEoAgA2AgADQCADKAIAICEoAgAgLygCAEEDdGpJBEACQCADKAIAKAIEICgoAgBGBEAgAygCACgCACAmKAIASwRAIBQoAgAEQCAlKAIAIQYgDygCACEHICkgAygCACgCACAOKAIASQR/IAYFIAcLNgIAICMgKSgCACADKAIAKAIAajYCACAnKAIAIQYgECgCACEHICogAygCACgCACAOKAIASQR/IAYFIAcLNgIAIDIoAgAhBiAZKAIAIQcgKyADKAIAKAIAIA4oAgBJBH8gBgUgBws2AgAgCyABKAIAICMoAgAgECgCACAqKAIAIBkoAgAQvQI2AgAgCygCACAMKAIASQ0DIBYgASgCACARKAIAICMoAgAgKygCABCrAzYCACAcIAsoAgAgFigCAGo2AgAFICQgDygCACADKAIAKAIAajYCACALIAEoAgAgJCgCACAQKAIAELwCNgIAIAsoAgAgDCgCAEkNAyAWIAEoAgAgESgCACAkKAIAIBkoAgAQqwM2AgAgHCALKAIAIBYoAgBqNgIACyAcKAIAICIoAgBLBEAgIiAcKAIANgIAICAgCygCADYCACAaIBYoAgA2AgAgGyADKAIANgIACwsLCyADIAMoAgBBCGo2AgAMAQsLIBsoAgBFBEAgCCgCACEHIAApAwAhNSANKAIAIQogHygCACEXIAIgCSgCACIGKQIANwIAIAIgBikCCDcCCCACIAYpAhA3AhAgByA1IAogFyACEKwDIAEgASgCAEEBajYCAAwBCyASICAoAgAgGigCAGo2AgAgASABKAIAIBooAgBrNgIAICwgGygCACgCADYCACAtIB8oAgAgLCgCAGs2AgAgHSATKAIAKAIAIBMoAgAoAghBDGxqNgIAIBMoAgAoAgggEygCACgCDEYNASAdKAIAIAEoAgAgESgCAGs2AgQgHSgCACASKAIANgIIIB0oAgAgLSgCADYCACATKAIAQQhqIgYgBigCAEEBajYCACAIKAIAIQcgACkDACE1IA0oAgAhCiAEKAIAIA8oAgBrIRcgAiAJKAIAIgYpAgA3AgAgAiAGKQIINwIIIAIgBikCEDcCECAHIDUgCiAXIAIQrAMgASgCACASKAIAaiAeKAIATQRAIAgoAgAhByAAKQMAITUgBCgCACEKIAEoAgAgEigCAGohFyAPKAIAITMgDSgCACE0IAIgCSgCACIGKQIANwIAIAIgBikCCDcCCCACIAYpAhA3AhAgACAHIDUgCiAXIDMgNCACEK0DNwMAIAQgASgCACASKAIAakF/ajYCAAsgASABKAIAIBIoAgBqNgIAIBEgASgCADYCAAwACwALIBhBun82AgAgGCgCACEAIAUkBSAADwsgGCAQKAIAIBEoAgBrNgIAIBgoAgAhACAFJAUgAAuKAQEDfyMFIQUjBUEgaiQFIAVBCGoiBCAANwMAIAVBEWoiBiABOgAAIAVBEGoiASACOgAAIAUgAzcDACAEIAQpAwAgBi0AAEEKaqwgBSkDAH59NwMAIAQgBCkDAELjyJW9y5vvjU9+NwMAIAQgBCkDACABLQAAQQpqrHw3AwAgBCkDACEAIAUkBSAAC5oBAgN/AX4jBSECIwVBIGokBSACQRBqIgMgADYCACACQQxqIgQgATYCACACIgBCADcDACAAQQhqIgFBADYCAANAIAApAwAhBSABKAIAIAQoAgBJBEAgACAFQuPIlb3Lm++NT343AwAgACAAKQMAIAMoAgAgASgCAGotAABBCmqsfDcDACABIAEoAgBBAWo2AgAMAQsLIAIkBSAFC6ABAQN/IwUhAyMFQSBqJAUgA0EQaiEEIAMgADcDACADQQxqIgUgATYCACADQQhqIgEgAjYCACADKQMAIQBBICAFKAIAayABKAIASQR/IAQgAEEBIAEoAgB0QQFrrYM+AgAgBCgCACEBIAMkBSABBSAEIABBICAFKAIAayABKAIAa62IQQEgASgCAHRBAWutgz4CACAEKAIAIQEgAyQFIAELC00BA38jBSECIwVBEGokBSACIgQgADcDACACQQhqIgMgATYCACADKAIARQRAIAIkBUEADwsgBCkDAEHAACADKAIAa62IpyEBIAIkBSABC0EBAn8jBSEDIwVBEGokBSADQQRqIgQgADYCACADIAE2AgAgBCgCACgCFCADKAIAIAIoAgh0QQN0aiEAIAMkBSAAC0EBAn8jBSECIwVBEGokBSACIAA3AwAgAkEIaiIDIAE2AgAgAikDAEEgIAMoAgBrrYhC/////w+DpyEBIAIkBSAB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CyAANgIAIAlBIGoiDCABNgIAIAlBHGoiASACNgIAIAlBGGoiDSADNgIAIAlBFGoiAiAENgIAIAkiACAGNwMAIAlBEGoiAyAHNgIAIAIoAgAEQCACKAIAKAIIQQBLBEAgCygCAEEMaiIBIAUpAgA3AgAgASAFKQIINwIIIAEgBSkCEDcCECABIAUpAhg3AhggASAFKQIgNwIgIAEgBSkCKDcCKCABIAUpAjA3AjAgASAFKQI4NwI4IAFBQGsgBUFAaykCADcCACABIAUpAkg3AkggASAFKQJQNwJQIAEgBSkCWDcCWCABIAUpAmA3AmAgCygCACEBIAIoAgAhAiAFKAIEIQQgACkDACEGIAMoAgAhACAIIAVBIGoiAykCADcCACAIIAMoAgg2AgggCiABIAIgBCAIIAYgABC2AzYCACAKKAIAIQAgCSQFIAAPCwsgCygCACECIAApAwAhBiADKAIAIQMgCCAFKQIANwIAIAggBSkCCDcCCCAIIAUpAhA3AhAgCCAFKQIYNwIYIAggBSkCIDcCICAIIAUpAig3AiggCCAFKQIwNwIwIAggBSkCODcCOCAIQUBrIAVBQGspAgA3AgAgCCAFKQJINwJIIAggBSkCUDcCUCAIIAUpAlg3AlggCCAFKQJgNwJgIAlBDGoiACACIAggBkEAIAMQzwI2AgAgACgCABDNAQRAIAogACgCADYCACAKKAIAIQAgCSQFIAAPCyAJQQhqIgAgCygCACgC2AMgCygCAEHgA2ogBSAMKAIAIAEoAgAgDSgCACALKAIAKALMBBCxAjYCACAAKAIAEMwBQQBHIQEgACgCACEAIAEEfyAKIAA2AgAgCigCACEAIAkkBSAABSALKAIAIAA2AtwBIApBADYCACAKKAIAIQAgCSQFIAALC80GAQV/IwUhBiMFQYACaiQFIAZBlAFqIgcgADYCACAGQZABaiIIIAE2AgAgBkGMAWoiCSACNgIAIAYiACAENwMAIABBiAFqIgogBTYCACAAQSBqIgEgBygCAEEMaiICKQIANwIAIAEgAikCCDcCCCABIAIpAhA3AhAgASACKQIYNwIYIAEgAikCIDcCICABIAIpAig3AiggASACKQIwNwIwIAEgAikCODcCOCABQUBrIAJBQGspAgA3AgAgASACKQJINwJIIAEgAikCUDcCUCABIAIpAlg3AlggASACKQJgNwJgIAFBBGoiAiAIKAIAQfAkaiIFKQIANwIAIAIgBSkCCDcCCCACIAUpAhA3AhAgAiAFKAIYNgIYIAkoAgAEQCABIAkoAgA2AgQLIAFBIGoiAiADKQIANwIAIAIgAygCCDYCCCAHKAIAIQIgACkDACEEIAooAgAhAyAGQZgBaiIAIAEpAgA3AgAgACABKQIINwIIIAAgASkCEDcCECAAIAEpAhg3AhggACABKQIgNwIgIAAgASkCKDcCKCAAIAEpAjA3AjAgACABKQI4NwI4IABBQGsgAUFAaykCADcCACAAIAEpAkg3AkggACABKQJQNwJQIAAgASkCWDcCWCAAIAEpAmA3AmAgAiAAIARBASADEM8CGiAGQRxqIgEgCCgCAEGIJWooAgBBAUYEf0EABUEBIAgoAgBB9CRqKAIAdAsiADYCACAGQRhqIgBBASAIKAIAQfgkaigCAHQ2AgAgBkEUaiICIAEoAgAgACgCAGpBAnQ2AgAgBygCACgChAQgCCgCACgCOCACKAIAEPQHGiAGQRBqIgBBASAHKAIAKAKABHQ2AgAgBygCACgCiARBACAAKAIAQQJ0EPYHGiAGQQxqIgAgCCgCAEEUajYCACAGQQhqIgEgBygCAEHgA2o2AgAgASgCACICIAAoAgAiAykCADcCACACIAMpAgg3AgggAiADKAIQNgIQIAEoAgAgACgCACgCGDYCGCABKAIAIAAoAgAoAhw2AhwgASgCACAAKAIAKAIUNgIUIAcoAgAgCCgCAEGYJWooAgA2AtwBIAcoAgAoAtgDIAgoAgBBgAFqQfAjEPQHGiAGJAVBAAv2AgECfyMFIQMjBUHwAGokBSADIAEpAgA3AgAgAyABKQIINwIIIAMgASkCEDcCECADIAEpAhg3AhggAyABKQIgNwIgIAMgASkCKDcCKCADIAEpAjA3AjAgAyABKQI4NwI4IANBQGsgAUFAaykCADcCACADIAEpAkg3AkggAyABKQJQNwJQIAMgASkCWDcCWCADIAEpAmA3AmAgA0EEaiIBIAIpAgA3AgAgASACKQIINwIIIAEgAikCEDcCECABIAIoAhg2AhggA0EgaiIEIAJBHGoiASkCADcCACAEIAEoAgg2AgggA0EDNgIsIAAgAykCADcCACAAIAMpAgg3AgggACADKQIQNwIQIAAgAykCGDcCGCAAIAMpAiA3AiAgACADKQIoNwIoIAAgAykCMDcCMCAAIAMpAjg3AjggAEFAayADQUBrKQIANwIAIAAgAykCSDcCSCAAIAMpAlA3AlAgACADKQJYNwJYIAAgAykCYDcCYCADJAUL1wEBAn8jBSEEIwVB4ABqJAUgBEHUAGoiBSABNgIAIAQgAjcDACAEQdAAaiIBIAM2AgAgBEEIaiIDIAUoAgAgBCkDACABKAIAEKgCIARBKGoiAUIANwIAIAFCADcCCCABQgA3AhAgAUIANwIYIAFCADcCICABIAMpAgA3AgAgASADKQIINwIIIAEgAykCEDcCECABIAMoAhg2AhggAUEBNgIcIAAgASkCADcCACAAIAEpAgg3AgggACABKQIQNwIQIAAgASkCGDcCGCAAIAEpAiA3AiAgBCQFC78CAQV/IwUhBSMFQSBqJAUgBUEcaiEGIAVBGGoiByAANgIAIAVBFGoiCCABNgIAIAVBEGoiCSACNgIAIAVBDGoiASADNgIAIAVBCGoiAiAENgIAIAUiACAHKAIAIAgoAgAgCSgCACABKAIAIAIoAgBBAUEBEI8DNgIAIAUoAgAQzAEEQCAGIAAoAgA2AgAgBigCACEAIAUkBSAADwsgBUEEaiIBIAcoAgAgCCgCACAAKAIAaiAJKAIAIAAoAgBrELoDNgIAIAEoAgAQzAEEQCAGIAEoAgA2AgAgBigCACEAIAUkBSAADwsgBygCACgClAEEQCAHKAIAKQPwASAHKAIAKQP4AUIBfFIEQCAGQbh/NgIAIAYoAgAhACAFJAUgAA8LCyAGIAAoAgAgASgCAGo2AgAgBigCACEAIAUkBSAAC5UFAQp/IwUhAyMFQZABaiQFIANBIGohBCADQRxqIgYgADYCACADQRhqIgggATYCACADQRRqIgcgAjYCACADQRBqIgogCCgCADYCACADQQxqIgUgCigCADYCACADQQhqIglBADYCACAGKAIAKAIARQRAIARBRDYCACAEKAIAIQAgAyQFIAAPCyADQShqIQEgA0EEaiELIAMhAAJAIAYoAgAoAgBBAUYEQCAIKAIAIQggBygCACEMIAEgBigCAEH0AGoiAikCADcCACABIAIpAgg3AgggASACKQIQNwIQIAEgAikCGDcCGCABIAIpAiA3AiAgASACKQIoNwIoIAEg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AgAiBkEBajYCACAGIAQ6AAAgGSgCACEEIBooAgAhBiBHIAwoAgA2AgAgSCAENgIAIGEgBjYCACBJIEcoAgAgYSgCABDgATYCACBiIEgoAgAgSSgCAEEBdGosAAA6AAAgRygCACBIKAIAIEkoAgBBAXRqLQABEN4BIGIsAAAhBCADIAMoAgAiBkEBajYCACAGIAQ6AAAMAQsLAkADQCAMKAIAENkBRSADKAIAIB4oAgBJcUUNASAZKAIAIQQgGigCACEGIEQgDCgCADYCACBFIAQ2AgAgXyAGNgIAIEYgRCgCACBfKAIAEOABNgIAIGAgRSgCACBGKAIAQQF0aiwAADoAACBEKAIAIEUoAgAgRigCAEEBdGotAAEQ3gEgYCwAACEEIAMgAygCACIGQQFqNgIAIAYgBDoAAAwACwALA0AgAygCACAeKAIASQRAIBkoAgAhBCAaKAIAIQYgJSAMKAIANgIAIEIgBDYCACBdIAY2AgAgQyAlKAIAIF0oAgAQ4AE2AgAgXiBCKAIAIEMoAgBBAXRqLAAAOgAAICUoAgAgQigCACBDKAIAQQF0ai0AARDeASBeLAAAIQQgAyADKAIAIgZBAWo2AgAgBiAEOgAADAELCyBUKAIAIQMgACgCACEAIAEoAgAhASACICgoAgA2AgAgCyAYNgIAIB0gAzYCACAOIAA2AgAgDyABNgIAIHYgAigCADYCAANAIAsoAgAQ2QFFIAIoAgAgHSgCAEF9aklxBEAgDigCACEAIA8oAgAhASAiIAsoAgA2AgAgIyAANgIAIFsgATYCACAkICIoAgAgWygCABDgATYCACBcICMoAgAgJCgCAEEBdGosAAA6AAAgIigCACAjKAIAICQoAgBBAXRqLQABEN4BIFwsAAAhACACIAIoAgAiAUEBajYCACABIAA6AAAgDigCACEAIA8oAgAhASBBIAsoAgA2AgAgICAANgIAIFkgATYCACAhIEEoAgAgWSgCABDgATYCACBaICAoAgAgISgCAEEBdGosAAA6AAAgQSgCACAgKAIAICEoAgBBAXRqLQABEN4BIFosAAAhACACIAIoAgAiAUEBajYCACABIAA6AAAMAQsLAkADQCALKAIAENkBRSACKAIAIB0oAgBJcUUNASAOKAIAIQAgDygCACEBID4gCygCADYCACA/IAA2AgAgVyABNgIA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BzYCACAlICEoAgAgOigCABDgATYCACA5KAIAIB0oAgAgJSgCAEECdGouAAA7AAAgISgCACAdKAIAICUoAgBBAnRqLQACEN4BIAMgAygCACAdKAIAICUoAgBBAnRqLQADajYCACABKAIAIQggAigCACEHIDcgBCgCADYCACAcICo2AgAgFCAINgIAIDggBzYCACAXIBwoAgAgOCgCABDgATYCACA3KAIAIBQoAgAgFygCAEECdGouAAA7AAAgHCgCACAUKAIAIBcoAgBBAnRqLQACEN4BIAQgBCgCACAUKAIAIBcoAgBBAnRqLQADajYCACABKAIAIQggAigCACEHIDUgECgCADYCACAbICs2AgAgICAINgIAIDYgBzYCACAWIBsoAgAgNigCABDgATYCACA1KAIAICAoAgAgFigCAEECdGouAAA7AAAgGygCACAgKAIAIBYoAgBBAnRqLQACEN4BIBAgECgCACAgKAIAIBYoAgBBAnRqLQADajYCACABKAIAIQggAigCACEHIDMgJCgCADYCACAuICw2AgAgGSAINgIAIDQgBzYCACAaIC4oAgAgNCgCABDgATYCACAzKAIAIBkoAgAgGigCAEECdGouAAA7AAAgLigCACAZKAIAIBooAgBBAnRqLQACEN4BICQgJCgCACAZKAIAIBooAgBBAnRqLQADajYCACABKAIAIQggAigCACEHIDEgAygCADYCACAVICk2AgAgDiAINgIAIDIgBzYCACAPIBUoAgAgMigCABDgATYCACAxKAIAIA4oAgAgDygCAEECdGouAAA7AAAgFSgCACAOKAIAIA8oAgBBAnRqLQACEN4BIAMgAygCACAOKAIAIA8oAgBBAnRqLQADajYCACABKAIAIQggAigCACEHICggBCgCADYCACAeICo2AgAgDSAINgIAIC0gBzYCACALIB4oAgAgLSgCABDgATYCACAoKAIAIA0oAgAgCygCAEECdGouAAA7AAAgHigCACANKAIAIAsoAgBBAnRqLQACEN4BIAQgBCgCACANKAIAIAsoAgBBAnRqLQADajYCACABKAIAIQggAigCACEHICYgECgCADYCACASICs2AgAgDCAINgIAICcgBzYCACAKIBIoAgAgJygCABDgATYCACAmKAIAIAwoAgAgCigCAEECdGouAAA7AAAgEigCACAM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IQAgASQFIAALegEDfyMFIQIjBUEQaiQFIAJBBGohAyACIgEgADYCACABKAIABH8gASgCACgCABDyAxogASgCACgCMBCHBiABKAIAKAI8EIcGIAEoAgAQhwYgA0EANgIAIAMoAgAhACACJAUgAAUgA0EANgIAIAMoAgAhACACJAUgAAsLegEDfyMFIQIjBUEQaiQFIAJBBGohAyACIgEgADYCACABKAIABH8gASgCACgCABDyAxogASgCACgCHBCHBiABKAIAKAIoEIcGIAEoAgAQhwYgA0EANgIAIAMoAgAhACACJAUgAAUgA0EANgIAIAMoAgAhACACJAUgAAsL1gEBA38jBSECIwVBEGokBSACQQRqIQMgAiIBIAA2AgAgASgCAEUEQCADQQA2AgAgAygCACEAIAIkBSAADwsgASgCACgCABDxAxogASgCACgCJARAIAEoAgAoAmQgASgCACgCJCABKAIAKAJgQR9xQeQCahECAAsgASgCACgCMARAIAEoAgAoAmQgASgCACgCMCABKAIAKAJgQR9xQeQCahECAAsgASgCACgCZCABKAIAIAEoAgAoAmBBH3FB5AJqEQIAIANBADYCACADKAIAIQAgAiQFIAALeQEDfyMFIQEjBUEQaiQFIAFBBGohAiABIgMgADYCACABKAIABH8gAygCAEHEqQFqKAIAIAMoAgAgAygCAEHAqQFqKAIAQR9xQeQCahECACACQQA2AgAgAigCACEAIAEkBSAABSACQQA2AgAgAigCACEAIAEkBSAACwskAQF/IwUhASMFQRBqJAUgASAANgIAIAEoAgAQhwYgASQFQQALegEDfyMFIQIjBUEQaiQFIAJBBGohAyACIgEgADYCACABKAIABH8gASgCACgCABDyAxogASgCACgCKBCHBiABKAIAKAI0EIcGIAEoAgAQhwYgA0EANgIAIAMoAgAhACACJAUgAAUgA0EANgIAIAMoAgAhACACJAUgAAsLrgEBBH8jBSEDIwVBEGokBSADQQxqIQIgAyEEIANBCGoiBSAANgIAIANBBGoiACABNgIAAkAgACgCAEEESQRAIAJBADYCAAUgBCAFKAIAEM8BNgIAAkACQAJAAkACQCAEKAIAQaTqvmlrDgQAAQIDBAsgAkEENgIADAULIAJBBTYCAAwECyACQQY2AgAMAwsgAkEHNgIADAILIAJBADYCAAsLIAIoAgAhACADJAUgAAs5AQJ/IwUhAiMFQRBqJAUgAkEEaiIDIAA2AgAgAiABNgIAIAMoAgAgAigCAEEAEPYDIQAgAiQFIAALpgIBBH8jBSEDIwVBMGokBSADQRxqIQQgA0EYaiIFIAA2AgAgA0EUaiIAIAE2AgAgA0EQaiIGIAI2AgAgA0EMaiIBIAYoAgAQ9wM2AgAgACgCACABKAIASQRAIARBuH82AgAgBCgCACEAIAMkBSAADwsgA0EgaiICIAUoAgAgASgCAEEBa2osAAA6AAAgA0EIaiIGIAItAABBA3E2AgAgA0EEaiIFIAItAABBBXVBAXE2AgAgAyIAIAItAABBBnU2AgAgBCABKAIAIgEgBSgCACICQQBHQQFzaiAGKAIAQQJ0QfAiaigCACIGaiADKAIAQQJ0QYAjaigCAGogBSgCAAR/IAAoAgBBAEdBAXMFQQALIgBBAXFqNgIAIAQoAgAhACADJAUgAAs/AQJ/IwUhASMFQRBqJAUgAUEEaiICIAA2AgAgASIAIAIoAgBBAUYEf0EBBUEFCzYCACAAKAIAIQAgASQFIAALSgECfyMFIQMjBUEQaiQFIANBCGoiBCAANgIAIANBBGoiACABNgIAIAMgAjYCACAEKAIAIAAoAgAgAygCAEEAEPkDIQAgAyQFIAALiwkCDH8BfiMFIQQjBUHQAGokBSAEQcgAaiEFIARBxABqIgcgADYCACAEQUBrIgAgATYCACAEQTxqIgEgAjYCACAEQThqIgYgAzYCACAEQTRqIgIgACgCADYCACAEQTBqIgMgBigCABD3AzYCACABKAIAIAMoAgBJBEAgBSADKAIANgIAIAUoAgAhACAEJAUgAA8LIAYoAgBBAUcEQCAAKAIAEM8BQajqvmlHBEAgACgCABDPAUFwcUHQ1LTCAUcEQCAFQXY2AgAgBSgCACEAIAQkBSAADwsgASgCAEEISQRAIAVBCDYCACAFKAIAIQAgBCQFIAAPBSAHKAIAIgFCADcDACABQgA3AwggAUIANwMQIAFCADcDGCABQgA3AyAgACgCAEEEahDPAa0hECAHKAIAIBA3AwAgBygCAEEBNgIUIAVBADYCACAFKAIAIQAgBCQFIAAPCwALCyAEQSxqIgggACgCACABKAIAIAYoAgAQ9gM2AgAgCCgCACEAIAEoAgAgCCgCAEkEQCAFIAA2AgAgBSgCACEAIAQkBSAADwsgBygCACAANgIYIARBzQBqIgYgAigCACADKAIAQQFraiwAADoAACAEQShqIgEgAygCADYCACAEQSRqIgsgBi0AAEEDcTYCACAEQSBqIgwgBi0AAEECdUEBcTYCACAEQRxqIgkgBi0AAEEFdUEBcTYCACAEQRhqIg0gBi0AAEEGdTYCACAEQQhqIgNCADcDACAEQRRqIghBADYCACAEIgBCfzcDACAGLQAAQQhxBEAgBUFyNgIAIAUoAgAhACAEJAUgAA8LIARBzABqIQYgBEEQaiEKAkAgCSgCAEUEQCACKAIAIQ4gASABKAIAIg9BAWo2AgAgBiAOIA9qLAAAOgAAIAogBi0AAEEDdUEKajYCACAKKAIAQR5NBEAgA0IBIAooAgCthjcDACADIAMpAwAgAykDAEIDiCAGLQAAQQdxrH58NwMADAILIAVBcDYCACAFKAIAIQAgBCQFIAAPCwsCQAJAAkACQCALKAIAQQFrDgMBAgADCyAIIAIoAgAgASgCAGoQzwE2AgAgASABKAIAQQRqNgIADAILIAggAigCACABKAIAai0AADYCACABIAEoAgBBAWo2AgAMAQsgCCACKAIAIAEoAgBqENgDQf//A3E2AgAgASABKAIAQQJqNgIACwJAAkACQAJAAkAgDSgCAEEBaw4DAQIAAwsgACACKAIAIAEoAgBqEOIBNwMADAMLIAAgAigCACABKAIAahDYA0H//wNxQYACaqw3AwAMAgsgACACKAIAIAEoAgBqEM8BrTcDAAwBCyAJKAIABEAgACACKAIAIAEoAgBqLQAArTcDAAsLIAkoAgAEQCADIAApAwA3AwALIAcoAgBBADYCFCAHKAIAIAApAwA3AwAgBygCACADKQMANwMIIAMpAwAhECAHKAIAIAMpAwBCgIAIVAR+IBAFQoCACAs+AhAgBygCACAIKAIANgIcIAcoAgAgDCgCADYCICAFQQA2AgAgBSgCACEAIAQkBSAAC8sBAgZ/AX4jBSECIwVBQGskBSACQTBqIQMgAkEoaiEFIAIhBiACQTxqIgQgADYCACACQThqIgcgATYCACAEKAIAIAcoAgAQ9ANBAEchACAEKAIAIQQgBygCACEBAkAgAARAIAUgBCABEPsDNwMAIAUp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AiQFIAALxQEBA38jBSECIwVBEGokBSACQQxqIQMgAkEIaiIEIAA2AgAgAkEEaiIAIAE2AgAgAiAEKAIAIAAoAgAQ9AM2AgACQAJAAkACQAJAAkAgAigCAEEEaw4EAAECAwQLIAMgBCgCACAAKAIAEIkENgIADAQLIAMgBCgCACAAKAIAEIoENgIADAMLIAMgBCgCACAAKAIAEIsENgIADAILIAMgBCgCACAAKAIAEIwENgIADAELIANBdjYCAAsgAygCACEAIAIkBSAAC4kCAQN/IwUhAyMFQSBqJAUgA0EUaiEEIANBEGoiBSAANgIAIANBDGoiACABNgIAIANBCGoiASACNgIAIAAoAgBBA0kEQCAEQbh/NgIAIAQoAgAhACADJAUgAA8LIANBBGoiAiAFKAIAEIgENgIAIAMiACACKAIAQQN2NgIAIAEoAgAgAigCAEEBcTYCBCABKAIAIAIoAgBBAXZBA3E2AgAgASgCACADKAIANgIIIAEoAgAoAgBBAUYEQCAEQQE2AgAgBCgCACEAIAMkBSAADwsgASgCACgCAEEDRgR/IARBbDYCACAEKAIAIQAgAyQFIAAFIAQgACgCADYCACAEKAIAIQAgAyQFIAALCzcBAX8jBSEBIwVBEGokBSABIAA2AgAgASgCABDYA0H//wNxIAEoAgAtAAJBEHRqIQAgASQFIAALNwECfyMFIQIjBUEQaiQFIAJBBGoiAyAANgIAIAIgATYCACADKAIAIAIoAgAQjwQhACACJAUgAAv/AgEFfyMFIQIjBUEwaiQFIAJBIGohAyACQRxqIgUgADYCACACQRhqIgAgATYCACACQRRqIgEgBSgCADYCACACQRBqIgQgACgCADYCACAAKAIAQQVJBEAgA0G4fzYCACADKAIAIQAgAiQFIAAPCyAFKAIAEM8BQaXqvmlHBEAgA0F2NgIAIAMoAgAhACACJAUgAA8LIAJBCGohBiACIQAgASABKAIAQQVqNgIAIAQgBCgCAEEFazYCAAJAAkACQANAIAAgASgCACAEKAIAIAYQjgQ2AgAgACgCABDMAQ0BIAEgASgCAEEDajYCACAEIAQoAgBBA2s2AgAgACgCACAEKAIASw0CIAAoAgBFDQMgASABKAIAIAAoAgBqNgIAIAQgBCgCACAAKAIAazYCAAwACwALIAMgACgCADYC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IBEoAgAgLigCAGtLBEAgEkFsNgIADAQLIAkgGygCACAJKAIAIBooAgBrajYCACAJKAIAIAsoAgRqIBsoAgBNBEAgESgCACAJKAIAIAsoAgQQ9QcaIBIgHCgCADYCAAwECyAkIBsoAgAgCSgCAGs2AgAgESgCACAJKAIAICQoAgAQ9QcaIAogESgCACAkKAIAajYCACALQQRqIgAgACgCACAkKAIAazYCACAJIBooAgA2AgAgCigCACAUKAIATQRAIAsoAgRBA08NAgsgFkEANgIAA0AgFigCACALKAIESQRAIAooAgAgFigCAGogCSgCACAWKAIAaiwAADoAACAWIBYoAgBBAWo2AgAMAQsLIBIgHCgCADYCAAwDCwsgCygCCEEISQRAIDogCygCCEECdEGQPWooAgA2AgAgCigCACAJKAIALAAAOgAAIAooAgAgCSgCACwAAToAASAKKAIAIAkoAgAsAAI6AAIgCigCACAJKAIALAADOgADIAkgCSgCACALKAIIQQJ0QbA9aigCAGo2AgAgCigCAEEEaiAJKAIAEJ4EIAkgCSgCACA6KAIAazYCAAUgCigCACAJKAIAEPwCCyAKIAooAgBBCGo2AgAgCSAJKAIAQQhqNgIAIAooAgAhAAJAICMoAgAgGSgCAEFzaksEQCAAIBQoAgBJBEAgCigCACAJKAIAIBQoAgAgCigCAGsQ+wIgCSAJKAIAIBQoAgAgCigCAGtqNgIAIAogFCgCADYCAAsDQCAKKAIAICMoAgBPDQIgCSAJKAIAIgBBAWo2AgAgACwAACEBIAogCigCACIAQQFqNgIAIAAgAToAAAwACwAFIAAgCSgCACALKAIEQQhrEPsCCwsgEiAcKAIANgIACwsgNSASKAIANgIAIDUoAgAQzQFBAEchACA1KAIAIQEgAA0CIBMgEygCACABajYCAAwBCwsMAQsgECABNgIAIBAoAgAhACAHJAUgAA8LIAIEQCAQQWw2AgAgECgCACEAIAckBSAADwsgGEEANgIAA0AgGCgCAEEDTw0CIA4oAgBBrOABaiAYKAIAQQJ0aiANQSxqIBgoAgBBAnRqKAIANgIAIBggGCgCAEEBajYCAAwACwALCyApIEgoAgAgKygCAGs2AgAgKSgCACBHKAIAIBMoAgBrSwR/IBBBun82AgAgECgCACEAIAckBSAA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IAAoAgAgOygCAGs2AgAgCyA4KAIANgIAIAooAgAgHygCAE0EQCAOKAIEQQNPDQILICNBADYCAANAICMoAgAgDigCBEkEQCAKKAIAICMoAgBqIAsoAgAgIygCAGosAAA6AAAgIyAjKAIAQQFqNgIADAELCyAbICwoAgA2AgAMAwsLIA4oAghBCEkEQCBkIA4oAghBAnRBkD1qKAIANgIAIAooAgAgCygCACwAADoAACAKKAIAIAsoAgAsAAE6AAEgCigCACALKAIALAACOgACIAooAgAgCygCACwAAzoAAyALIAsoAgAgDigCCEECdEGwPWooAgBqNgIAIAooAgBBBGogCygCABCeBCALIAsoAgAgZCgCAGs2AgAFIAooAgAgCygCABD8AgsgCiAKKAIAQQhqNgIAIAsgCygCAEEIajYCACAKKAIAIQACQCA6KAIAICsoAgBBc2pLBEAgACAfKAIASQRAIAooAgAgCygCACAfKAIAIAooAgBrEPsCIAsgCygCACAfKAIAIAooAgBrajYCACAKIB8oAgA2AgALA0AgCigCACA6KAIATw0CIAsgCygCACIAQQFqNgIAIAAsAAAhASAKIAooAgAiAEEBajYCACAAIAE6AAAMAAsABSAAIAsoAgAgDigCBEEIaxD7AgsLIBsgLCgCADYCAAsLIGAgGygCADYCACBgKAIAEM0BQQBHIQAgYCgCACEBIAANAiAVIBUoAgAgAWo2AgAgECAQKAIAQQFqNgIADAELCwwBCyAUIAE2AgAgFCgCACEAIAckBSAADwsgKUEANgIAA0AgKSgCAEEDTw0CIBYoAgBBrOABaiApKAIAQQJ0aiARQSxqICkoAgBBAnRqKAIANgIAICkgKSgCAEEBajYCAAwACwALCyBMIGMoAgAgNygCAGs2AgAgTCgCACBiKAIAIBUoAgBrSwR/IBRBun82AgAgFCgCACEAIAckBSAABSAVKAIAIDcoAgAgTCgCABD0BxogFSAVKAIAIEwoAgBqNgIAIBQgFSgCACBhKAIAazYCACAUKAIAIQAgByQFIAALC44BAQJ/IwUhByMFQSBqJAUgB0EYaiIIIAA2AgAgB0EUaiIAIAE2AgAgB0EQaiIBIAI2AgAgB0EMaiICIAM2AgAgB0EIaiIDIAQ2AgAgB0EEaiIEIAU2AgAgByAGNgIAIAgoAgAg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IAMoAgAoAgQ2AgAgAigCAEHA4AFqIAMoAgAoAgQ2AgAgAigCAEHE4AFqIAMoAgAoAgQgAygCACgCCGo2AgAgAigCAEG44AFqIAIoAgBBxOABaigCADYCACACKAIAQYjhAWohACADKAIAQbjgAWooAgAEQCAAQQE2AgAgAigCAEGM4QFqQQE2AgAgAigCACADKAIAQQxqNgIAIAIoAgAgAygCAEGcMGo2AgQgAigCACADKAIAQZQgajYCCCACKAIAIAMoAgBBpNAAajYCDCACKAIAQazgAWogAygCAEGo4AFqKAIANgIAIAIoAgBBsOABaiADKAIAQazgAWooAgA2AgAgAigCAEG04AFqIAMoAgBBsOABaigCADYCAAUgAEEANgIAIAIoAgBBjOEBakEANgIACwsgBUEANgIAIAUoAgAhACAEJAUgAAvSAQEEfyMFIQMjBUEgaiQFIANBFGohBCADQRBqIgUgADYCACADQQxqIgYgATYCACADQQhqIgEgAjYCACADQQRqIgAgBSgCABCrBDYCACAAKAIAEM0BBEAgBCAAKAIANgIAIAQoAgAhACADJAUgAA8LIAMhACAGKAIAQQBHIAEoAgBBAEdxBEAgACAFKAIAIAYoAgAgASgCABCsBDYCACAAKAIAEM0BBEAgBEFiNgIAIAQoAgAhACADJAUgAA8LCyAEQQA2AgAgBCgCACEAIAMkBSAAC+gIAQt/IwUhBSMFQdAAaiQFIAVBzABqIQYgBUHIAGoiCCAANgIAIAVBxABqIgAgATYCACAFQUBrIgcgAjYCACAFQTxqIg0gAzYCACAFQThqIg4gBDYCACAFQTRqIgEgDSgCACgCADYCACAFQTBqIgogACgCADYCACAFQSxqIgwgCigCACAHKAIAajYCACAFQShqIgMgCigCADYCACAFQSRqIgIgDigCACgCADYCACACKAIAQQlJBEAgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyAFQSBqIgkgASgCAEEFEPUDNgIAIAkoAgAQzQEEQCAGIAkoAgA2AgAgBigCACEAIAUkBSAADwsgAigCACAJKAIAQQNqSQRAIAZBuH82AgAgBigCACEAIAUkBSAADwsgBUEcaiIAIAgoAgAgASgCACAJKAIAEKgENgIAIAAoAgAQzQEEQCAGIAAoAgA2AgAgBigCACEAIAUk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ACANKAIAQQJ0aigCADYCACAOIBEoAgA2AgAgFCARKAIAIBAoAgBqNgIAIAogBC8BACATKAIAQQh0akH//wNxEOAEIAogDygCACAWKAIAajoAAiAKQQI6AAMDQCAVKAIAIQEgDiAOKAIAIgJBAWo2AgAgASACQQJ0aiAKKAEANgEAIA4oAgAgFCgCAEkNAAsgACANKAIAQQJ0aiIBIAEoAgAgECgCAGo2AgAgCyALKAIAQQFqNgIADAELCyAJJAULcwEDfyMFIQIjBUEQaiQFIAIhAyACQQRqIgQgADYCACACQQhqIgAgATsBACAEKAIAIQFBkOUALQAABEAgASAALgEAEOEEIAIkBQUgAyABNgIAIAMoAgAgAC4BADoAACADKAIAIAAvAQBBCHU6AAEgAiQFCwszAQF/IwUhAiMFQRBqJAUgAiAANgIAIAJBBGoiACABOwEAIAIoAgAgAC4AADsAACACJAULwgIBBn8jBSEFIwVB0ABqJAUgBUE8aiEGIAVBOGoiByAANgIAIAVBNGoiCCABNgIAIAVBMGoiCSACNgIAIAVBLGoiCiADNgIAIAVBKGoiACAENgIAIAVBJGoiASAHKAIANgIAIAVBIGoiAyABKAIAIAgoAgBqNgIAIAVBHGoiAiAAKAIAQQRqNgIAIAVBGGoiBCACKAIANgIAIAVBQGsiAiAAKAIAENIDIAVBBGoiByACLQACNgIAIAUiACAFQQhqIgIgCSgCACAKKAIAEL4ENgIAIAUoAgAQzAEEQCAGIAAoAgA2AgAgBigCACEAIAUkBSAADwsgASgCACACIAMoAgAgBCgCACAHKAIAENgEGiACENUDBH8gBiAIKAIANgIAIAYoAgAhACAFJAUgAAUgBkFsNgIAIAYoAgAhACAFJAUgAAsLhgIBAn8jBSECIwVBEGokBSACQQRqIgEgADYCACABKAIAQaCoAWpBBTYCACABKAIAQcyoAWpBADYCACABKAIAQZCoAWpBADYCACABKAIAQZSoAWpBADYCACABKAIAQZioAWpBADYCACABKAIAQZyoAWpBADYCACABKAIAQYwoakGMgIDgADYCACABKAIAQdSoAWpBADYCACABKAIAQdCoAWpBADYCACABKAIAQbSpAWpBADYCACACIgBBADYCAANAIAAoAgBBA0gEQCABKAIAQaSoAWogACgC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ACIBIAEoAgAgBSgCAC0AAUEIdGo2AgALIAIgBSgCACAAKAIAQQFraiwAADoAACACLQAABEBBCCACLQAAENQBayEBIAMoAgAgATYCBCADKAIAQQRqIgEgASgCAEEEIAAoAgBrQQN0ajYCAAwCCyAGQX82AgAgBigCACEAIAQkBSAADwsACyAGIAAoAgA2AgAgBigCACEAIAQkBSAAC+MFAQl/IwUhBCMFQTBqJAUgBEEEaiEDIARBKGoiBiAANgIAIARBJGoiAiABNgIAIARBIGoiASACKAIAQRBqEMMEQf8BcTYCACAEQRxqIgcgAigCAEEgahDDBEH/AXE2AgAgBEEYaiIAIAIoAgBBGGoQwwRB/wFxNgIAIARBFGoiCCABKAIAQQJ0QbA0aigCADYCACAEQRBqIgkgBygCAEECdEHANWooAgA2AgAgBEEMaiIFIAAoAgA2AgAgBEEIaiIKIAgoAgAgCSgCAGogBSgCAGo2AgAgACgCAARAIAMgACgCAEECdEGgN2ooAgAgAigCACAFKAIAENwBajYCACACKAIAEMAEGgUgA0EANgIACyAEIQACQCADKAIAQQNJBEAgASgCAEUgAygCAEEBTXEEQCADQQEgAygCAGs2AgALIAIoAgBBKGohBSADKAIARQRAIAMgBSgCADYCAAwCCyAAIAUgAygCAEECdGooAgA2AgAgAygCAEEBRwRAIAIoAgAgAigCACgCLDYCMAsgAigCACACKAIAKAIoNgIsIAMgACgCACIANgIAIAIoAgAgADYCKAUgAyADKAIAQQJrNgIAIAIoAgAgAigCACgCLDYCMCACKAIAIAIoAgAoAig2AiwgAigCACADKAIANgIoCwsgBigCACADKAIANgIIIAcoAgBBAnRBoDhqKAIAIQMgBygCAEEfSwR/IAIoAgAgCSgCABDcAQVBAAshACAGKAIAIANBA2ogAGo2AgQgCSgCACAIKAIAakEYSwRAIAIoAgAQwAQaCyABKAIAQQJ0QYA6aigCACEDIAEoAgBBD0sEfyACKAIAIAgoAgAQ3AEFQQALIQAgBigCACADIABqNgIAIAooAgBBH0tBAXIEQCACKAIAEMAEGgsgAigCAEEQaiACKAIAEMQEIAIoAgBBIGogAigCABDEBCACKAIAEMAEGiACKAIAQRhqIAIoAgAQxAQgBCQFC+gI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QTBqIgcgACgCAEEGajYCACAFQSxqIhMgBygCACAKKAIAajYCACAFQShqIhQgEygCACALKAIAajYCACAFQSRqIhYgFCgCACAMKAIAajYCACAFQSBqIgAgECgCAEEDakEEbjYCACAFQRxqIg4gBCgCACAAKAIAajYCACAFQRhqIg8gDigCACAAKAIAajYCACAFQRRqIhEgDygCACAAKAIAajYCACAFQRBqIgMgBCgCADYCACAFQQxqIgQgDigCADYCACAFQQhqIgggDygCADYCACAFQQRqIg0gESgCADYCACAFQTRqIhUgCSgCACAKKAIAIAsoAgBqIAwoAgBqQQZqazYCACAVKAIAIAkoAgBLBEAgBkFsNgIAIAYoAgAhACAFJAUgAA8LIAVBiAFqIgAgBUH4AGoiCSAHKAIAIAooAgAQ8QQ2AgAgACgCABDMAQRAIAYgACgCADYCACAGKAIAIQAgBSQFIAAPCyAAIAVB6ABqIgogEygCACALKAIAEPEENgIAIAAoAgAQzAEEQCAGIAAoAgA2AgAgBigCACEAIAUkBSAADwsgACAFQdgAaiILIBQoAgAgDCgCABDxBDYCACAAKAIAEMwBBEAgBiAAKAIANgIAIAYoAgAhACAFJAUgAA8LIAAgBUHIAGoiDCAWKAIAIBUoAgAQ8QQ2AgAgACgCABDMAQRAIAYgACgCADYCACAGKAIAIQAgBSQFIAAPCyAFIgAgCRDABCAKEMAEciALEMAEciAMEMAEcjYCAANAAkAgACgCAA0AIA0oAgAgEigCAEF5ak8NACADKAIAIAkgASgCACACKAIAENAEIQcgAyADKAIAIAdqNgIAIAQoAgAgCiABKAIAIAIoAgAQ0AQhByAEIAQoAgAgB2o2AgAgCCgCACALIAEoAgAgAigCABDQBCEHIAggCCgCACAHajYCACANKAIAIAwgASgCACACKAIAENAEIQcgDSANKAIAIAdqNgIAIAMoAgAgCSABKAIAIAIoAgAQ0AQhByADIAMoAgAgB2o2AgAgBCgCACAKIAEoAgAgAigCABDQBCEHIAQgBCgCACAHajYCACAIKAIAIAsgASgCACACKAIAENAEIQcgCCAIKAIAIAdqNgIAIA0oAgAgDCABKAIAIAIoAgAQ0AQhByANIA0oAgAgB2o2AgAgACAJEMAEIAoQwARyIAsQwARy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mNABaiAAKAIAIAIoAgBBkNABaigCACACKAIAQZTQAWooAgBrazYCACACKAIAQZTQAWogACgCADYCACACKAIAQZDQAWogACgCADYCACADJAUL/AYBCX8jBSEFIwVB0ABqJAUgBUHEAGohBiAFQUBrIgkgADYCACAFQTxqIgAgATYCACAFQThqIgogAjYCACAFQTRqIgggAzYCACAFQTBqIgcgBDYCACAFQSxqIgEgCCgCADYCACAFQShqIg0gASgCACAHKAIAajYCACAFQSRqIgsgACgCADYCACAFQSBqIgMgCygCADYCACAFQRxqIgwgCygCACAKKAIAajYCACAFQRhqIgIgBygCADYCACAHKAIAQQhJBEAgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyAFQQhqIgAgCSgCACAIKAIAQQUQiAU2AgAgACgCABDMAQRAIAYgACgCADYCACAGKAIAIQAgBSQFIAAPCyAHKAIAIAAoAgBBA2pJBEAgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyABIAEoAgAgACgCAGo2AgAgAiACKAIAIAAoAgBrNgIAIAAgCSgCACAIKAIAIAAoAgAQiQU2AgAgACgCABDMAQRAIAYgACgCADYCACAGKAIAIQAgBSQFIAAPCyAFQRBqIQcgBUEEaiEEIAUhAAJAAkACQAJAAkACQAJAA0AgBEEANgIAIAAgASgCACANKAIAIAEoAgBrIAcQjgQ2AgAgACgCABDMAQ0BIAEgASgCAEEDajYCACACIAIoAgBBA2s2AgAgACgCACACKAIASw0CAkACQAJAAkACQAJAIAcoAgAOBAECAAMECwwICyAEIAkoAgAgAygCACAMKAIAIAMoAgBrIAEoAgAgACgCABCKBTYCAAwDCyAEIAMoAgAgDCgCACADKAIAayABKAIAIAAoAgAQqQQ2AgAMAgsgAigCAA0GDAELDAYLIAAoAgBFDQcgBCgCABDMAUEARyEKIAQoAgAhCCAKDQYgAyADKAIAIAhqNgIAIAEgASgCACAAKAIAajYCACACIAIoAgAgACgCAGs2AgAMAAsACyAGIAAoAgA2AgAgBigCACEAIAUkBSAADwsgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyAGQX82AgAgBigCACEAIAUkBSAADwsgBkG4fzYCACAGKAIAIQAgBSQFIAAP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AgAgCigCACEAIAkkBSAADwsgBygCAEEKTQRAIAEgASgCACADKAIAajYCACANKAIAIAAgEigCACAHKAIAEJUFGgwBCyAKQWw2AgAgCigCACEAIAkkBSAADwsgCiABKAIAIAgoAgBrNgIAIAooAgAhACAJJAUgAAuuBQEFfyMFIQQjBUEgaiQFIARBFGohBSAEQRBqIgMgADYCACAEQQxqIgYgATYCACAEQQhqIgEgAjYCACABKAIAQQFJBEAgAygCACIAQgA3AgAgAEIANwIIIAVBuH82AgAgBSgCACEAIAQkBSAADwsgBEEEaiECIAQhACABKAIAQQRPIQcgAygCACAGKAIANgIMAkAgBwRAIAMoAgAgBigCACABKAIAakF8ajYCCCADKAIAKAIIEOEBIQAgAygCACAANgIAIAIgBigCACABKAIAQQFrai0AADYCACACKAIABEBBCCACKAIAENQBayEAIAMoAgAgADYCBAwCCyAFQX82AgAgBSgCACEAIAQkBSAADwUgAygCACADKAIAKAIMNgIIIAMoAgAgAygCACgCDC0AADYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEoAgBBAmsOBgUEAwIBAAYLIAMoAgAiAiACKAIAIAMoAgAoAgwtAAZBEHRqNgIADAYLDAULDAULDAULDAULDAULDAULIAMoAgAiAiACKAIAIAMoAgAoAgwtAAVBCHRqNgIACyADKAIAIgIgAigCACADKAIAKAIMLQAEajYCAAsgAygCACICIAIoAgAgAygCACgCDC0AA0EYdGo2AgALIAMoAgAiAiACKAIAIAMoAgAoAgwtAAJBEHRqNgIACyADKAIAIgIgAigCACADKAIAKAIMLQABQQh0ajYCAAsgACAGKAIAIAEoAgBBAWtqLQAANgIAIAAoAgAEQEEIIAAoAgAQ1AFrIQAgAygCACAANgIEIAMoAgBBBGoiACAAKAIAQQQgASgCAGtBA3RqNgIADAILIAVBfzYCACAFKAIAIQAgBCQFIAAPCwALIAUgASgCADYCACAFKAIAIQAgBCQFIAALhQEBAn8jBSEDIwVBIGokBSADQRBqIgQgADYCACADQQxqIgAgATYCACADQQhqIgEgAjYCACADQQRqIgIgASgCADYCACADIAIoAgA2AgAgACgCACADKAIALwEAENwB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BiAANgIAIAVBDGoiACABNgIAIAVBCGoiASACNgIAIAVBBGoiAiADNgIAIAUgBDYCACAGKAIAIAAoAgAgASgCACACKAIAIAUoAgBBAEEAEK8FIQAgBSQFIAALxggBB38jBSEHIwVB0ABqJAUgB0HIAGoiCCAANgIAIAdBxABqIgAgATYCACAHQUBrIgsgAjYCACAHQTxqIgogAzYCACAHQThqIgkgBDYCACAHQTRqIgEgBTYCACAHQTBqIgUgBjYCACAHQSxqIgIgCigCADYCACAHQShqIg0gAigCACAJKAIAajYCACAHQSRqIgYgACgCADYCACAHQSBqIgQgBigCADYCACAHQRxqIgwgBigCACALKAIAajYCACAHQRhqIgMgCSgCADYCACAIKAIAELAFGiABKAIABEAgCCgCACABKAIAIAUoAgAQsQUgCCgCAEGY0ABqIAgoAgBBjNAAaigCADYCACAIKAIAQZTQAGogACgCACAIKAIAQYzQAGooAgAgCCgCAEGQ0ABqKAIAa2s2AgAgCCgCAEGQ0ABqIAAoAgA2AgAFIAgoAgBBmNAAaiAAKAIAIgA2AgAgCCgCAEGQ0ABqIAA2AgAgCCgCAEGU0ABqIAA2AgALIAdBzABqIQEgCSgCAEEISQRAIAFBuH82AgAgASgCACEAIAckBSAADwsgB0EIaiIAIAgoAgAgCigCAEEFELIFNgIAIAAoAgAQzAEEQCABIAAoAgA2AgAgASgCACEAIAckBSAADwsgCSgCACAAKAIAQQNqSQRAIAFBuH82AgAgASgCACEAIAckBSAADwsgAiACKAIAIAAoAgBqNgIAIAMgAygCACAAKAIAazYCACAAIAgoAgAgCigCACAAKAIAELMFNgIAIAAoAgAQzAEEQCABIAAoAgA2AgAgASgCACEAIAckBSAADwsgB0EQaiEJIAdBBGohBSAHIQACQAJAAkACQAJAAkACQANAIAVBADYCACAAIAIoAgAgDSgCACACKAIAayAJEI4ENgIAIAAoAgAQzAENASACIAIoAgBBA2o2AgAgAyADKAIAQQNrNgIAIAAoAgAgAygCAEsNAgJAAkACQAJAAkACQCAJKAIADgQBAgADBAsMCAsgBSAIKAIAIAQoAgAgDCgCACAEKAIAayACKAIAIAAoAgAQtAU2AgAMAwsgBSAEKAIAIAwoAgAg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AgAgBSgCACEAIAQkBSAADwsgBEEEaiECIAQhACABKAIAQQRPIQcgAygCACAGKAIANgIMAkAgBwRAIAMoAgAgBigCACABKAIAakF8ajYCCCADKAIAKAIIEL0FIQAgAygCACAANgIAIAIgBigCACABKAIAQQFrai0AADYCACACKAIABEBBCCACKAIAENQBayEAIAMoAgAgADYCBAwCCyAFQX82AgAgBSgCACEAIAQkBSAADwUgAygCACADKAIAKAIMNgIIIAMoAgAgAygCACgCDC0AADYCAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEoAgBBAmsOBgUEAwIBAAYLIAMoAgAiAiACKAIAIAMoAgAoAgwtAAZBEHRqNgIADAYLDAULDAULDAULDAULDAULDAULIAMoAgAiAiACKAIAIAMoAgAoAgwtAAVBCHRqNgIACyADKAIAIgIgAigCACADKAIAKAIMLQAEajYCAAsgAygCACICIAIoAgAgAygCACgCDC0AA0EYdGo2AgALIAMoAgAiAiACKAIAIAMoAgAoAgwtAAJBEHRqNgIACyADKAIAIgIgAigCACADKAIAKAIMLQABQQh0ajYCAAsgACAGKAIAIAEoAgBBAWtqLQAANgIAIAAoAgAEQEEIIAAoAgAQ1AFrIQAgAygCACAANgIEIAMoAgBBBGoiACAAKAIAQQQgASgCAGtBA3RqNgIADAILIAVBfzYCACAFKAIAIQAgBCQFIAAPCwALIAUgASgCADYCACAFKAIAIQAgBCQFIAALdgECfyMFIQMjBUEQaiQFIANBCGoiBCAANgIAIANBBGoiACABNgIAIAMgAjYCACADQQxqIgEgAygCACgBADYBACAAKAIAIAEvAQAQ3AEhASAEKAIAIAE2AgAgACgCABC6BRogBCgCACADKAIAQQRqNgIEIAMkBQvAAwEGfyMFIQMjBUEQaiQFIANBDGohAiADQQhqIgEgADYCACABKAIAKAIEQSBLBEAgAkEDNgIAIAIoAgAhACADJAUgAA8LIAEoAgAhBSABKAIAKAIIIAEoAgAoAgxBBGpPBEAgASgCAEEIaiIAIAAoAgAgBSgCBEEDdms2AgAgASgCAEEEaiIAIAAoAgBBB3E2AgAgASgCACgCCBC9BSEAIAEoAgAgADYCACACQQA2AgAgAigCACEAIAMk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QCACKAIIQQRPDQILA0AgCCgCACAGKAIASQRAIAEgASgCACIAQQFqNgIAIAAsAAAhACAIIAgoAgAiAkEBajYCACACIAA6AAAMAQsLIAogBSgCADYCACAKKAIAIQAgCSQFIAAPCwsgAigCBEEISQRAIAAgAigCBEECdEGQPWooAgA2AgAgCCgCACABKAIALAAAOgAAIAgoAgAgASgCACwAAToAASAIKAIAIAEoAgAsAAI6AAIgCCgCACABKAIALAADOgADIAEgASgCACACKAIEQQJ0QbA9aigCAGo2AgAgCCgCAEEEaiABKAIAEJ4EIAEgASgCACAAKAIAazYCAAUgCCgCACABKAIAEPwCCyAIIAgoAgBBCGo2AgAgASABKAIAQQhqNgIAIAgoAgAhAAJAIAYoAgAgCygCAEF0aksEQCAAIAQoAgBJBEAgCCgCACABKAIAIAQoAgAgCCgCAGsQ+wIgASABKAIAIAQoAgAgCCgCAGtqNgIAIAggBCgCADYCAAsDQCAIKAIAIAYoAgBPDQIgASABKAIAIgBBAWo2AgAgACwAACEAIAggCCgCACICQQFqNgIAIAIgADoAAAwACwAFIAAgASgCACACKAIIQQhrEPsCCwsgCiAFKAIANgIAIAooAgAhACAJJAUgAAs3AQJ/IwUhASMFQRBqJAUgASAANgIAIAFBBGoiAiABKAIAIgAQkAQ2AgAgAigCACEAIAEkBSAAC40LARB/IwUhBSMFQdAAaiQFIAVBQGshBiAFQTxqIhIgADYCACAFQThqIg8gATYCACAFQTRqIgggAjYCACAFQTBqIgAgAzYCACAFQSxqIhAgBDYCACAFQShqIg4gACgCADYCACAFQSRqIgsgDigCACAQKAIAajYCACAFQSBqIgIgDigCADYCACAFQQhqIglBADYCACAFQQRqIhNBADYCACAQKAIAQQRJBEAgBkG4fzYCACAGKAIAIQAgBSQFIAAPCyAFQRBqIgMgAigCABCQBDYCACAFQRxqIgQgAygCAEEPcUEFajYCACAEKAIAQQ9KBEAgBkFUNgIAIAYoAgAhACAFJAUgAA8LIAUhACAFQcYAaiERIAVBxABqIQcgAyADKAIAQQR2NgIAIAVBDGoiAUEENgIAIAgoAgAgBCgCADYCACAFQRhqIgxBASAEKAIAdEEBajYCACAFQRRqIghB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CyABQQRqIgAgACgCACABKAIEQQR2ajYCACABQQhqIgAgACgCACABKAIIQQN2ajYCACABKAIEIAEoAgBJBEAgA0EBNgIACyAFIAcoAgAgBigCACAIKAIAIAIoAgAgAygCAEECdEHE5QBqKAIAQQ9xQagBahEIADYCACAFKAIAIQAgBCQFIAALrQIBBn8jBSEEIwVBoMAAaiQFIARBnMAAaiEFIARBmMAAaiIHIAA2AgAgBEGUwABqIgggATYCACAEQZDAAGoiBiACNgIAIARBjMAAaiIBIAM2AgAgBCIAQQBBgsAAEPYHGiAEQQw7AQAgBEGIwABqIgMgBigCADYCACAEQYTAAGoiAiAEIAYoAgAgASgCABDLBTYCACACKAIAEMwBQQBHIQkgAigCACEGIAkEQCAFIAY2AgAgBSgCACEAIAQkBSAADwsgBiABKAIATwR/IAVBuH82AgAgBSgCACEAIAQkBSAABSADIAMoAgAgAigCAGo2AgAgASABKAIAIAIoAgBrNgIAIAUgBygCACAIKAIAIAMoAgAgASgCACAAEMwFNgIAIAUoAgAhACAEJAUgAAsLrQIBBn8jBSEEIwVBoIABaiQFIARBnIABaiEFIARBmIABaiIHIAA2AgAgBEGUgAFqIgggATYCACAEQZCAAWoiBiACNgIAIARBjIABaiIBIAM2AgAgBCIAQQBBhIABEPYHGiAEQQw2AgAgBEGIgAFqIgMgBigCADYCACAEQYSAAWoiAiAEIAYoAgAgASgCABDDBTYCACACKAIAEMwBQQBHIQkgAigCACEGIAkEQCAFIAY2AgAgBSgCACEAIAQkBSAADwsgBiABKAIATwR/IAVBuH82AgAgBSgCACEAIAQkBSAABSADIAMoAgAgAigCAGo2AgAgASABKAIAIAIoAgBrNgIAIAUgBygCACAIKAIAIAMoAgAgASgCACAAEMQFNgIAIAUoAgAhACAEJAUgAAsLhQoBG38jBSEDIwVB0BBqJAUgA0HIEGohBiADQcQQaiIEIAA2AgAgA0HAEGoiACABNgIAIANBvBBqIgEgAjYCACADQZAJaiICQgA3AwAgAkIANwMIIAJCADcDECACQgA3AxggAkIANwMgIAJCADcDKCACQgA3AzAgAkIANwM4IAJBQGtBADYCACADQcAIaiIHQgA3AwAgB0IANwMIIAdC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AigCAEECdGooAgA2AgAgCiAELgEAEOAEIAogFigCADoAAiAKQQE6AAMgDEEANgIAA0AgDCgCACASKAIATw0CIBUoAgAgDCgCAEECdGogCigBADYBACAMIAwoAgBBAWo2AgAMAAsACwsgC0EANgIAA0AgCygCACAFKAIASQRAIBMgAygCACALKAIAQQF0ai0AADYCACANIAMoAgAgCygCAEEBdGotAAE2AgAgDyAGKAIAIA0oAgBrNgIAIBBBASAXKAIAIA8oAgBrdDYCACARIAAgDSgCAEECdGooAgA2AgAgDiARKAIANgIAIBQgESgCACAQKAIAajYCACAKIAQvAQAgEygCAEEIdGpB//8DcRDgBCAKIA8oAgAgFigCAGo6AAIgCkECOgADA0AgFSgCACEBIA4gDigCACICQQFqNgIAIAEgAkECdGogCigBADYBACAOKAIAIBQoAgBJDQALIAAgDSgCAEECdGoiASABKAIAIBAoAgBqNgIAIAsgCygCAEEBajYCAAwBCwsgCSQFC6YDAQh/IwUhBCMFQcCEAWokBSAEQbSEAWohBSAEQbCEAWoiByAANgIAIARBrIQBaiIIIAE2AgAgBEGohAFqIgEgAjYCACAEQaSEAWoiAiADNgIAIARBoIQBaiIAIAEoAgA2AgAgBEGchAFqIgMgACgCADYCACAEQZSEAWoiBkH/ATYCACACKAIAQQJJBEAgBUG4fzYCACAFKAIAIQAgBCQFIAAPCyAEQZCEAWoiASAEQZCAAWoiCSAGIARBmIQBaiIKIAAoAgAgAigCABC+BTYCACABKAIAEMwBQQBHIQsgASgCACEAIAsEQCAFIAA2AgAgBSgCACEAIAQkBSAADwsgACACKAIATwRAIAVBuH82AgAgBSgCACEAIAQkBSAADwsgAyADKAIAIAEoAgBqNgIAIAIgAigCACABKAIAazYCACABIAQiACAJIAYoAgAgCigCABCVBTYCACABKAIAEMwBBH8gBSABKAIANgIAIAUoAgAhACAEJAUgAAUgBSAHKAIAIAgoAgAgAygCACACKAIAIAAQygU2AgAgBSgCACEAIAQkBSAACwuNDgEkfyMFIQUjBUHAAWokBSAFQbgBaiEQIAVBtAFqIRsgBUGwAWohHCAFQawBaiEdIAVBqAFqIR4gBUGkAWohFSAFQaABaiEKIAVB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AWogADYCACAFKAIAQejhAWooAgAQzQFBAEchAyAFKAIAIQAgAwRAIAYgAEHo4QFqKAIANgIAIAYoAgAhACAHJAUgAA8FIABB3OIJaiACKAIAIAEoAgAQ9AcaIAUoAgBByOABaiAFKAIAQejhAWooAgAgASgCAGs2AgAgBSgCAEGE4QFqQQE2AgAgBkEANgIAIAYoAgAhACAHJAUgAA8LAAsgBSgCAEHc4glqIAUoAgBB6OEBaigCACABKAIAa2ogAigCACABKAIAEPQHGiALIAUoAgAgBSgCAEHc4glqIAUoAgBB6OEBaigCABCoBDYCACALKAIAEM0BBEAgBiALKAIANgIAIAYoAgAhACAHJAUgAA8FIAUoAgBByOABakEDNgIAIAUoAgBBhOEBakECNgIAIAZBADYCACAGKAIAIQAgByQFIAAPCwALIAogAigCAEEDIAQQhwQ2AgAgCigCABDNAUEARyEBIAooAgAhACABBEAgBiAANgIAIAYoAgAhACAHJAUgAA8LIAUoAgBByOABaiAANgIAIAUoAgBBgOEBaiAEKAIANgIAIAUoAgBBiOIBaiAEKAIINgIAIAQoAgRBAEchACAKKAIABEAgBSgCAEGE4QFqIAAEf0EEBUEDCzYCACAGQQA2AgAgBigCACEAIAckBSAADwsgBSgCACEBIAAEQCAFKAIAQcjgAWohACABQfDgAWooAgAEQCAAQQQ2AgAgBSgCAEGE4QFqQQU2AgAFIABBADYCACAFKAIAQYThAWpBADYCAAsFIAFByOABakEDNgIAIAUoAgBBhOEBakECNgIACyAGQQA2AgAgBigCACEAIAckBSAADwsCQAJAAkACQAJAIAUoAgBBgOEBaigCAA4DAQIAAwsgAyAFKAIAIAgoAgAgCSgCACACKAIAIAEoAgBBARCXBDYCAAwDCyADIAgoAgAgCSgCACACKAIAIAEoAgAQqQQ2AgAMAgsgAyAIKAIAIAkoAgAgAigCACABKAIAIAUoAgBBiOIBaigCABDUBTYCAAwBCyAGQWw2AgAgBigCACEAIAckBSAADwsgAygCABDNAUEARyEBIAMoAgAhACABBEAgBiAANgIAIAYoAgAhACAHJAUgAA8LIAUoAgBB+OABaiIBIAEpAwAgAK18NwMAIAUoAgBB8OABaigCAARAIAUoAgBBkOEBaiAI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AygCAEGE4QFqQQI2AgALIAMoAgBB2OABaiADKAIAQdjgAWopAwBCgAhWBH4gAygCAEHY4AFqKQMABUKACAs3AwAgAygCAEHY4AFqKQMAIAMoAgBBrOIBaigCAK1WBEBBNCEBDAULIBkgAygCAEHg4AFqKAIAQQRLBH8gAygCAEHg4AFqKAIABUEECyIGNgIAIBogAygCAEHY4AFqKQMAIAMoAgBB0OABaikDABDjBTYCAAJAAkAgAygCAEGk4gFqKAIAIBkoAgBJDQAgAygCAEG04gFqKAIAIBooAgBJDQAMAQsgIiAZKAIAIBooAgBqNgIAIAMoAgBBjOIBaigCAARAICIoAgAgAygCAEGM4gFqKAIAQfDiCWtLBEBBOyEBDAcLBSADKAIAQaDiAWooAgAhBiANIAMoAgBB+OEBaiIOKQIANwIAIA0gDigCCDYCCCAGIA0Q7wEgAygCAEGk4gFqQQA2AgAgAygCAEG04gFqQQA2AgAgIigCACEGIA0gAygCAEH44QFqIg4pAgA3AgAgDSAOKAIINgIIIAYgDRDtASEGIAMoAgBBoOIBaiAGNgIAIAMoAgBBoOIBaigCAEUEQEE9IQEMBwsLIAMoAgBBpOIBaiAZKAIANgIAIAMoAgBBsOIBaiADKAIAQaDiAWooAgAgAygCAEGk4gFqKAIAajYCACADKAIAQbTiAWogGigCADYCAAsgAygCAEGc4gFqQQI2AgALIBEgAygCABDRBTYCACARKAIARQRAIAMoAgBBnOIBakEANgIAIAFBADYCAAwDCyALKAIAIAIoAgBrIBEoAgBJBEAgAigCACALKAIARgRAIAFBADYCAAwEBSADKAIAQZziAWpBAzYCAAwCCwALICMgAygCABDnBTYCACASIAMoAgAiDiADKAIAQbDiAWooAgAgAygCAEG44gFqKAIAaiAjKAIABH9BAAUgAygCAEG04gFqKAIAIAMoAgBBuOIBaigCAGsLIgYgAigCACARKAIAENMFNgIAIBIoAgAQzQEEQEHGACEBDAQLIAIgAigCACARKAIAajYCACASKAIAICMoAgByBEAgAygCAEG84gFqIAMoAgBBuOIBaigCACASKAIAajYCACADKAIAQZziAWpBBDYCAAsMAgsgJCADKAIAENEFNgIAIBMgJCgCACADKAIAQajiAWooAgBrNgIAICUgAygCABDnBTYCACATKAIAIQYgJSgCAARAIBQgBiALKAIAIAIoAgBrSQR/IBMoAgAFIAsoAgAgAigCAGsLIgY2AgAFIAYgAygCAEGk4gFqKAIAIAMoAgBBqOIBaigCAGtLBEBB0gAhAQwECyAUIAMoAgBBoOIBaigCACADKAIAQajiAWooAgBqIBMoAgAgAigCACALKAIAIAIoAgBrEOgFNgIACyACIAIoAgAgFCgCAGo2AgAgAygCAEGo4gFqIgYgBigCACAUKAIAajYCACAUKAIAIBMoAgBJBEAgAUEANgIADAILIBUgAygCACADKAIAQbDiAWooAgAgAygCAEG44gFqKAIAaiADKAIAQbTiAWooAgAgAygCAEG44gFqKAIAayADKAIAQaDiAWooAgAgJCgCABDTBTYCACAVKAIAEM0BBEBB1wAhAQwDCyADKAIAQajiAWpBADYCACADKAIAIQYgFSgCACAlKAIAcgRAIAMoAgBBvOIBaiAGQbjiAWooAgAgFSgCAGo2AgAgAygCAEGc4gFqQQQ2AgAMAQUgBkGc4gFqQQI2AgALDAELICYgAygCAEG84gFqKAIAIAMoAgBBuOIBaigCAGs2AgAgGyAIKAIAIBwoAgAgCCgCAGsgAygCAEGw4gFqKAIAIAMoAgBBuOIBaigCAGogJigCABDoBTYCACAIIAgoAgAgGygCAGo2AgAgAygCAEG44gFqIgYgBigCACAbKAIAajYCACAbKAIAICYoAgBHBEAgAUEANgIADAELIAMoAgBBnOIBakECNgIAIAMoAgBBtOIBaigCAK0gAygCAEHQ4AFqKQMAVARAIAMoAgBBuOIBaigCACADKAIAQeDgAWooAgBqIAMoAgBBtOIBaigCAEsEQCADKAIAQbziAWpBADYCACADKAIAQbjiAWpBADYCAAsLCwwBCwsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEKaw5ZAA4ODg4OAQ4ODg4ODg4ODg4ODg4OAg4ODg4ODg4OAw4OBA4ODgUODg4OBg4ODg4ODgcOCA4ODg4ODg4OCQ4ODg4ODg4ODg4OCg4ODg4LDg4ODg4ODg4MDg0OCyAqQYziAWooAgAEQCAFQUA2AgAgBSgCACEAIAQkBSAADwsgHSADKAIAQcTiAWooAgAgAygCAEHM4gFqKAIAIAkoAgAgBygCABDlBTYCACAdKAIARQRAIAMoAgBBnOIBakEANgIACyAFIB0oAgA2AgAgBSgCACEAIAQkBSAADwsgDyAKKAIAIAsoAgAgCigCAGsQ9AM2AgAgDygCAEUEQCAFIAwoAgA2AgAgBSgCACEAIAQkBSAADwsgKCADKAIAQZjiAWooAgAEfyADKAIAQZjiAWooAgAoAgQFQQALIgA2AgAgKSADKAIAQZjiAWooAgAEfyADKAIAQZjiAWooAgAoAggFQQALIgA2AgAgAygCAEGM4gFqKAIABEAgBUFANgIAIAUoAgAhACAEJAUgAA8LIB4gAygCAEHE4gFqIAMoAgBByOIBaigCACAPKAIAICgoAgAgKSgCABDmBTYCACAeKAIAEM0BBEAgBSAeKAIANgIAIAUoAgAhACAEJAUgAA8LIAMoAgBByOIBaiAPKAIAIgA2AgAgAygCAEHM4gFqIAA2AgAgHyADKAIAQcTiAWooAgAgDygCACAJKAIAIAcoAgAQ5QU2AgAgHygCAEUEQCADKAIAQZziAWpBADYCAAsgBSAfKAIANgIAIAUoAgAhACAEJAUgAA8LIBAoAgBBAEsEQCADKAIAQdziCWogAygCAEHA4gFqKAIAaiACKAIAIBAoAgAQ9AcaIAMoAgBBwOIBaiIAIAAoAgAgECgCAGo2AgALIAcoAgAgBygCACgCBDYCCCAMKAIAIQAgBUEGIAwoAgBLBH9BBgUgAAsgAygCAEHA4gFqKAIAa0EDajYCACAFKAIAIQAgBCQFIAAPCyAFIBgoAgA2AgAgBSgCACEAIAQkBSAADwsgBSAgKAIANgIAIAUoAgAhACAEJAUgAA8LIAUgISgCADYCACAFKAIAIQAgBCQFIAAPCyAFQXA2AgAgBSgCACEAIAQkBSAADwsgBUFANgIAIAUoAgAhACAEJAUgAA8LIAVBQDYCACAFKAIAIQAgBCQFIAAPCyAFIBIoAgA2AgAgBSgCACEAIAQkBSAADwsgBUFsNgIAIAUoAgAhACAEJAUgAA8LIAUgFSgCADYCACAFKAIAIQAgBCQFIAAPCyAFQX82AgAgBSgCACEAIAQkBSAADwsgBygCAEEIaiIBIAEoAgAgAigCACAKKAIAa2o2AgAgCSgCAEEIaiIBIAEoAgAgCCgCACAnKAIAa2o2AgAgACADKAIAENEFNgIAIAMoAgAhASAAKAIABEAgARDSBUECRkEDbCEBIAAgACgCACABajYCACAAIAAoAgAgAygCAEGo4gFqKAIAazYCACAFIAAoAgA2AgAgBSgCACEAIAQkBSAADwsgAygCAEHQ4gFqKAIAQQBHIQAgAUG84gFqKAIAIAMoAgBBuOIBaigCAEcEQCAARQRAIAcoAgBBCGoiACAAKAIAQX9qNgIAIAMoAgBB0OIBakEBNgIACyAFQQE2AgAgBSgCACEAIAQkBSAADwsCQCAABEAgBygCACgCCCAHKAIAKAIESQRAIAcoAgBBCGoiACAAKAIAQQFqNgIADAILIAMoAgBBnOIBakECNgIAIAVBATYCACAFKAIAIQAgBCQFIAAPCwsgBUEANgIAIAUoAgAhACAEJAUgAA8LQQALvggBHH8jBSEEIwVBgAFqJAUgBEHwAGohBiAEQdwAaiEQIARB2ABqIREgBEHUAGohCCAEQdAAaiESIARBzABqIQkgBEHIAGohEyAEQcQAaiEUIARBQGshFSAEQTxqIQogBEE4aiEWIARBNGohCyAEQTBqIRcgBEEsaiEYIARBKGohGSAEQSRqIQwgBEEgaiEaIARBHGohDSAEQRhqIRsgBEEUaiEcIARBEGohHSAEQQxqIQ4gBEEIaiEeIARBBGohDyAEIR8gBEHsAGoiByAANgIAIARB6ABqIgAgATYCACAEQeQAaiIFIAI2AgAgBEHgAGoiASADNgIAAkACQAJAAkACQCAAKAIAQQRrDgQDAgEABAsgHCAHKAIANgIAIB0gASgCACgCACABKAIAKAIIajYCACAOIAEoAgAoAgQgASgCACgCCGs2AgAgHiAFKAIAKAIAIAUoAgAoAghqNgIAIA8gBSgCACgCBCAFKAIAKAIIazYCACAfIBwoAgAgHigCACAPIB0oAgAgDhD4BTYCACAFKAIAQQhqIgAgACgCACAPKAIAajYCACABKAIAQQhqIgAgACgCACAOKAIAajYCACAGIB8oAgA2AgAgBigCACEAIAQkBSAADwsgGCAHKAIANgIAIBkgASgCACgCACABKAIAKAIIajYCACAMIAEoAgAoAgQgASgCACgCCGs2AgAgGiAFKAIAKAIAIAUoAgAoAghqNgIAIA0gBSgCACgCBCAFKAIAKAIIazYCACAbIBgoAgAgGigCACANIBkoAgAgDBD3BTYCACAFKAIAQQhqIgAgACgCACANKAIAajYCACABKAIAQQhqIgAgACgCACAMKAIAajYCACAGIBsoAgA2AgAgBigCACEAIAQkBSAADwsgFCAHKAIANgIAIBUgASgCACgCACABKAIAKAIIajYCACAKIAEoAgAoAgQgASgCACgCCGs2AgAgFiAFKAIAKAIAIAUoAgAoAghqNgIAIAsgBSgCACgCBCAFKAIAKAIIazYCACAXIBQoAgAgFigCACALIBUoAgAgChD2BTYCACAFKAIAQQhqIgAgACgCACALKAIAajYCACABKAIAQQhqIgAgACgCACAKKAIAajYCACAGIBcoAgA2AgAgBigCACEAIAQkBSAADwsgECAHKAIANgIAIBEgASgCACgCACABKAIAKAIIajYCACAIIAEoAgAoAgQgASgCACgCCGs2AgAgEiAFKAIAKAIAIAUoAgAoAghqNgIAIAkgBSgCACgCBCAFKAIAKAIIazYCACATIBAoAgAgEigCACAJIBEoAgAgCBD1BTYCACAFKAIAQQhqIgAgACgCACAJKAIAajYCACABKAIAQQhqIgAgACgCACAIKAIAajYCACAGIBMoAgA2AgAgBigCACEAIAQkBSAADwsgBkF0NgIAIAYoAgAhACAEJAUgAAuRBQEGfyMFIQUjBUEwaiQFIAVBIGoiBiAANgIAIAVBHGoiByABNgIAIAVBGGoiCCACNgIAIAVBFGoiCSADNgIAIAVBEGoiAyAENgIAIAcoAgAgCCgCAEcEQCAGKAIAKAIAIAcoAgAQ7AMaCyAFQSRqIQEgBUEMaiECIAVBCGohBCAFQQRqIQogBSEAAkACQAJAAkACQCAIKAIAQQRrDgQDAgEABAsgACAHKAIAIAgoAgBHBH8Q7wUFIAYoAgAoAgALNgIAIAAoAgAEQCAAKAIAIAkoAgAgAygCABDwBRogBigCACAAKAIANgIAIAFBADYCACABKAIAIQAgBSQFIAAPBSABQUA2AgAgASgCACEAIAUkBSAADwsACyAKIAcoAgAgCCgCAEcEfxDtBQUgBigCACgCAAs2AgAgCigCAARAIAooAgAgCSgCACADKAIAEO4FGiAGKAIAIAooAgA2AgAgAUEANgIAIAEoAgAhACAFJAUgAA8FIAFBQDYCACABKAIAIQAgBSQFIAAPCwALIAQgBygCACAIKAIARwR/EOsFBSAGKAIAKAIACzYCACAEKAIABEAgBCgCACAJKAIAIAMoAgAQ7AUaIAYoAgAgBCgCADYCACABQQA2AgAgASgCACEAIAUkBSAADwUgAUFANgIAIAEoAgAhACAFJAUgAA8LAAsgAiAHKAIAIAgoAgBHBH8Q9AUFIAYoAgAoAgALNgIAIAIoAgAEQCACKAIAEOkFGiACKAIAIAkoAgAgAygCABDqBRogBigCACACKAIANgIAIAFBADYCACABKAIAIQAgBSQFIAAPBSABQUA2AgAgASgCACEAIAUkBSAADwsACyABQQA2AgAgASgCACEAIAUkBSAACy4BAX8jBSEBIwVBEGokBSABIAA2AgAgASgCAEGE4QFqKAIAQQdGIQAgASQFIAALhwEBBH8jBSEEIwVBIGokBSAEQRBqIgYgADYCACAEQQxqIgUgATYCACAEQQhqIgcgAjYCACAEQQRqIgEgAzYCACAFKAIAIQIgASgCACEDIAQiACAFKAIAIAEoAgBJBH8gAgUgAws2AgAgBigCACAHKAIAIAAoAgAQ9AcaIAAoAgAhACAEJAUgAAsmAQF/IwUhASMFQRBqJAUgASAANgIAIAEoAgAQ8wUhACABJAUgAAtIAQJ/IwUhAyMFQRBqJAUgA0EIaiIEIAA2AgAgA0EEaiIAIAE2AgAgAyACNgIAIAQoAgAgACgCACADKAIAEPIFIQAgAyQFIAALzAEBBH8jBSECIwVBEGokBSACQQRqIQMgAiIBQeAAEIYGNgIAIAEoAgAEfyABKAIAIgBCADcDACAAQgA3AwggAEIANwMQIABCADcDGCAAQgA3AyAgAEIANwMoIABCADcDMCAAQgA3AzggAEFAa0IANwMAIABCADcDSCAAQgA3A1AgAEIANwNYELAEIQAgASgCACAANgIAIAEoAgBBADYCUCADIAEoAgA2AgAgAygCACEBIAIkBSABBSADQQA2AgAgAygCACEBIAIkBSABCwt9AQJ/IwUhBCMFQRBqJAUgBEEIaiIDIAA2AgAgBEEEaiIAIAE2AgAgBCACNgIAIAMoAgBBATYCUCADKAIAQQA2AkggAygCAEEANgJEIAMoAgBBADYCOCADKAIAQQA2AkwgAygCACgCACAAKAIAIAQoAgAQhQUhACAEJAUgAAu+AQEEfyMFIQIjBUEQaiQFIAJBBGohAyACIgFB0AAQhgY2AgAgASgCAAR/IAEoAgAiAEIANwMAIABCADcDCCAAQgA3AxAgAEIANwMYIABCADcDICAAQgA3AyggAEIANwMwIABCADcDOCAAQUBrQgA3AwAgAEIANwNIELIEIQAgASgCACAANgIAIAEoAgBBADYCGCADIAEoAgA2AgAgAygCACEBIAIkBSABBSADQQA2AgAgAygCACEBIAIkBSABCwt9AQJ/IwUhBCMFQRBqJAUgBEEIaiIDIAA2AgAgBEEEaiIAIAE2AgAgBCACNgIAIAMoAgBBATYCGCADKAIAQQA2AjQgAygCAEEANgIwIAMoAgBBADYCJCADKAIAQQA2AkwgAygCACgCACAAKAIAIAQoAgAQ6gQhACAEJAUgAAs0AQJ/IwUhACMFQRBqJAUgAEGg5QApAgA3AgAgAEGo5QAoAgA2AgggABDxBSEBIAAkBSABC30BAn8jBSEEIwVBEGokBSAEQQhqIgMgADYCACAEQQRqIgAgATYCACAEIAI2AgAgAygCAEEBNgIgIAMoAgBBADYCPCADKAIAQQA2AjggAygCAEEANgIsIAMoAgBBADYCWCADKAIAKAIAIAAoAgAgBCgCABC2BCEAIAQkBSAAC5wDAQV/IwUhBCMFQSBqJAUgACgCAEUEQCAAKAIERQRAIABBoOUAKQIANwIAIABBqOUAKAIANgIICwsgBEEIaiEFIARBBGohAiAEIQMgACgCAARAIAAoAgQEQCADIAAoAghB6AAgACgCAEE/cUHIAGoRBwA2AgAgAygCAEUEQCACQQA2AgAgAigCACEAIAQkBSAADwsgAygCACIBQgA3AwAgAUIANwMIIAFCADcDECABQgA3AxggAUIANwMgIAFCADcDKCABQgA3AzAgAUIANwM4IAFBQGtCADcDACABQgA3A0ggAUIANwNQIAFCADcDWCABQgA3A2AgAygCAEHcAGoiASAAKQIANwIAIAEgACgCCDYCCCAFIAApAgA3AgAgBSAAKAIINgIIIAUQ5wQhACADKAIAIAA2AgAgAygCACEAIAMoAgAoAgAEQCAAQQA2AiAgAiADKAIANgIAIAIoAgAhACAEJAUgAA8FIAAQ8AMaIAJBADYCACACKAIAIQAgBCQFIAAPCwALCyACQQA2AgAgAigCACEAIAQkBSAAC04B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AAAAAAAAAGIEfyAARAAAAAAAAPBDoiABEKkGIQAgASgCAEFAagVBAAsiAjYCAAwBCyABIASnQf8PcUGCeGo2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvyEACyAAC6UCAAJ/IAAEfyABQYABSQRAIAAgAToAAEEBDAILQZDpACgCACgCAEUEQCABQYB/cUGAvwNGBEAgACABOgAAQQEMAwVByLUBQdQANgIAQX8MAwsACyABQYAQSQRAIAAgAUEGdkHAAXI6AAAgACABQT9xQYABcjoAAUECDAILIAFBgLADSSABQYBAcUGAwANGcgRAIAAgAUEMdkHgAXI6AAAgACABQQZ2QT9xQYABcjoAASAAIAFBP3FBgAFyOgACQQMMAgsgAUGAgHxqQYCAwABJBH8gACABQRJ2QfABcjoAACAAIAFBDHZBP3FBgAFyOgABIAAgAUEGdkE/cUGAAXI6AAIgACABQT9xQYABcjoAA0EEBUHItQFB1AA2AgBBfwsFQQELCwuTAQECfwJAAkACQANAIAJB8MUAai0AACAARg0BIAJBAWoiAkHXAEcNAAtB1wAhAgwBCyACDQBB0MYAIQAMAQtB0MYAIQADQCAAIQMDQCADQQFqIQAgAywAAARAIAAhAwwBCwsgAkF/aiICDQALCyABKAIUIgEEfyABKAIAIAEoAgQgABCZBgVBAAsiAQR/IAEFIAALC/MBAQR/AkACQCACQRBqIgQoAgAiAw0AIAIQrQYEf0EABSAEKAIAIQMMAQshAgwBCyADIAJBFGoiBSgCACIEayABSQRAIAIgACABIAIoAiRBH3FBiAFqEQUAIQIMAQsCfyACLABLQQBIIAFFcgR/QQAFIAEhAwNAIAAgA0F/aiIGaiwAAEEKRwRAIAYEQCAGIQMMAgVBAAwECwALCyACIAAgAyACKAIkQR9xQYgBahEFACICIANJDQIgACADaiEAIAEgA2shASAFKAIAIQQgAwsLIQIgBCAAIAEQ9AcaIAUgBSgCACABajYCACACIAFqIQILIAILawECfyAAQcoAaiICLAAAIQEgAiABQf8BaiABcjoAACAAKAIAIgFBCHEEfyAAIAFBIHI2AgBBfwUgAEEANgIIIABBADYCBCAAIAAoAiwiATYCHCAAIAE2AhQgACABIAAoAjBqNgIQQQALIgALOwECfyAAKAIQIABBFGoiAygCACIEayIAIAJLBEAgAiEACyAEIAEgABD0BxogAyADKAIAIABqNgIAIAILLAEBfyMFIQIjBUEQaiQFIAIgATYCAEHQ5QAoAgAgACACEJ4GIQAgAiQFIAALqwEBBn8jBSEDIwVBEGokBSADIgQgAUH/AXEiBzoAAAJAAkAgAEEQaiICKAIAIgUNACAAEK0GBH9BfwUgAigCACEFDAELIQEMAQsgAEEUaiICKAIAIgYgBUkEQCABQf8BcSIBIAAsAEtHBEAgAiAGQQFqNgIAIAYgBzoAAAwCCwsgACAEQQEgACgCJEEfcUGIAWoRBQBBAUYEfyAELQAABUF/CyEBCyADJAUgAQvCAQEFfyMFIQMjBUEwaiQFIANBIGohBSADQRBqIQQgAyECQc6TASABLAAAEJQGBEAgARCyBiEGIAIgADYCACACIAZBgIACcjYCBCACQbYDNgIIQQUgAhAMEI8GIgJBAEgEQEEAIQAFIAZBgIAgcQRAIAQgAjYCACAEQQI2AgQgBEEBNgIIQd0BIAQQCxoLIAIgARCzBiIARQRAIAUgAjYCAEEGIAUQDhpBACEACwsFQci1AUEWNgIAQQAhAAsgAyQFIAALmAEBA38gAEErEJQGRSECIAAsAAAiA0HyAEchASACBH8gAQVBAiIBC0GAAXIhAiAAQfgAEJQGBH8gAiIBBSABC0GAgCByIQIgAEHlABCUBgR/IAIiAQUgAQtBwAByIQAgA0HyAEYEfyABBSAAIgELQYAEciEAIANB9wBGBH8gAAUgASIAC0GACHIhASADQeEARgR/IAEFIAALC6IDAQd/IwUhAyMFQUBrJAUgA0EoaiEFIANBGGohBiADQRBqIQcgAyEEIANBOGohCEHOkwEgASwAABCUBgRAQYQJEIYGIgIEQCACQQBB/AAQ9gcaIAFBKxCUBkUEQCACIAEsAABB8gBGBH9BCAVBBAs2AgALIAFB5QAQlAYEQCAEIAA2AgAgBEECNgIEIARBATYCCEHdASAEEAsaCyABLAAAQeEARgRAIAcgADYCACAHQQM2AgRB3QEgBxALIgFBgAhxRQRAIAYgADYCACAGQQQ2AgQgBiABQYAIcjYCCEHdASAGEAsaCyACIAIoAgBBgAFyIgE2AgAFIAIoAgAhAQsgAiAANgI8IAIgAkGEAWo2AiwgAkGACDYCMCACQcsAaiIEQX86AAAgAUEIcUUEQCAFIAA2AgAgBUGTqAE2AgQgBSAINgIIQTYgBRANRQRAIARBCjoAAAsLIAJBFjYCICACQQM2AiQgAkECNgIoIAJBHTYCDEGMtQEoAgBFBEAgAkF/NgJMCyACELQGGgVBACECCwVByLUBQRY2AgALIAMkBSACCzEBAn8gABC1BiIBKAIANgI4IAEoAgAiAgRAIAIgADYCNAsgASAANgIAQcy1ARAPIAALDABBzLUBEAZB1LUBC4YBAQJ/AkAgAARAIAAoAkxBf0wEQCAAELkGIQAMAgsgABC5BiEBIAEhAAVB0OYAKAIABH9B0OYAKAIAELYGBUEACyEAELUGKAIAIgEEQANAIAEoAkwaQQAhAiABKAIUIAEoAhxLBEAgARC5BiAAciEACyABKAI4IgENAAsLQcy1ARAPCwsgAAupAQEFfyAAKAJMGkEAIQUgABC4BiAAKAIAQQFxQQBHIgRFBEAQtQYhAyAAQThqIQEgACgCNCICBEAgAiABKAIANgI4CyABKAIAIgEEQCABIAI2AjQLIAEhAiADKAIAIABGBEAgAyACNgIAC0HMtQEQDwsgABC2BiEDIAAgACgCDEE/cUEIahEEACEBIAAoAlwiAgRAIAIQhwYLIARFBEAgABCHBgsgASADcgtCAQF/IAAoAkQEQCAAQfAAaiEBIAAoAnQiAARAIAAgASgCADYCcAsgASgCACIBBH8gAUH0AGoFQbzpAAsgADYCAAsLngEBBn8CfwJAIABBFGoiASgCACAAQRxqIgIoAgBNDQAgAEEAQQAgACgCJEEfcUGIAWoRBQAaIAEoAgANAEF/DAELIABBBGoiAygCACIEIABBCGoiBSgCACIGSQRAIAAgBCAGa0EBIAAoAihBH3FBiAFqEQUAGgsgAEEANgIQIAJBADYCACABQQA2AgAgBUEANgIAIANBADYCAEEACyIAC2IBBH8CfwJAIAEoAkxBAEgNAAwACyAAQf8BcSEDIABB/wFxIgQgASwAS0cEQCABQRRqIgUoAgAiAiABKAIQSQRAIAUgAkEBajYCACACIAM6AAAgBAwCCwsgASAAELAGCyIACwsAIABBv39qQRpJCxcAIABBIHJBn39qQQZJIAAQlQZBAEdyCwYAQdKTAQtIAQF/IABFBEBBASEACwN/An8gABCGBiIBBEAgAQwBC0HgtQFB4LUBKAIAIgE2AgAgAQR/IAFBA3FB4AFqEQYADAIFQQALCwsLmgICBn8BfiMFIQIjBUEwaiQFIAJBGGohASACQRBqIQQgAiEDIAJBJGohBRDABiIABEAgACgCACIABEAgACkDMCIGQoB+g0KA1qyZ9MiTpsMAUgRAIAFBjZUBNgIAQduUASABEMEGCyAAQdAAaiEBIAZCgdasmfTIk6bDAFEEQCAAKAIsIQELIAUgATYCACAAKAIAIgAoAgQhAUGw3AAgACAFQbDcACgCACgCEEEfcUGIAWoRBQAEQCAFKAIAIgAgACgCACgCCEE/cUEIahEEACEAIANBjZUBNgIAIAMgATYCBCADIAA2AghBhZQBIAMQwQYFIARBjZUBNgIAIAQgATYCBEGylAEgBBDBBgsLC0GBlQEgAkEgahDBBgs8AQJ/IwUhASMFQRBqJAUgASEAQdi1AUEDECwEQEGYlgEgABDBBgVB3LUBKAIAECohACABJAUgAA8LQQALMQEBfyMFIQIjBUEQaiQFIAIgATYCAEHU5gAoAgAiASAAIAIQngYaQQogARC6BhoQKAvSAQEDfyMFIQUjBUFAayQFIAUhAyAAIAFBABDGBgR/QQEFIAEEfyABQcjcAEG43ABBABDKBiIBBH8gA0EEaiIEQgA3AgAgBEIANwIIIARCADcCECAEQgA3AhggBEIANwIgIARCADcCKCAEQQA2AjAgAyABNgIAIAMgADYCCCADQX82AgwgA0EBNgIwIAEgAyACKAIAQQEgASgCACgCHEEHcUGMA2oRCwAgAygCGEEBRgR/IAIgAygCEDYCAEEBBUEACwVBAAsFQQALCyEAIAUkBSAACx4AIAAgASgCCCAFEMYGBEBBACABIAIgAyAEEMkGCwufAQACQCAAIAEoAgggBBDGBgRAQQAgASACIAMQyAYFIAAgASgCACAEEMYGBEAgASgCECACRwRAIAFBFGoiACgCACACRwRAIAEgAzYCICAAIAI2AgAgAUEoaiIAIAAoAgBBAWo2AgAgASgCJEEBRgRAIAEoAhhBAkYEQCABQQE6ADYLCyABQQQ2AiwMBAsLIANBAUYEQCABQQE2AiALCwsLCxwAIAAgASgCCEEAEMYGBEBBACABIAIgAxDHBgsLBwAgACABRgttAQF/AkAgAUEQaiIAKAIAIgQEQCAEIAJHBEAgAUEkaiIAIAAoAgBBAWo2AgAgAUECNgIYIAFBAToANgwCCyABQRhqIgAoAgBBAkYEQCAAIAM2AgALBSAAIAI2AgAgASADNgIYIAFBATYCJAsLCyYBAX8gASgCBCACRgRAIAFBHGoiBCgCAEEBRwRAIAQgAzYCAAsLC7YBACABQQE6ADUCQCABKAIEIANGBEAgAUEBOgA0IAFBEGoiACgCACIDRQRAIAAgAjYCACABIAQ2AhggAUEBNgIkIARBAUYgASgCMEEBRnFFDQIgAUEBOgA2DAILIAMgAkcEQCABQSRqIgAgACgCAEEBajYCACABQQE6ADYMAgsgAUEYaiICKAIAIgBBAkYEQCACIAQ2AgAFIAAhBAsgASgCMEEBRiAEQQFGcQRAIAFBAToANgsLCwuGAwEHfyMFIQgjBUFAayQFIAAgACgCACIEQXhqKAIAaiEHIARBfGooAgAhBiAIIgQgAjYCACAEIAA2AgQgBCABNgIIIAQgAzYCDCAEQRRqIQAgBEEYaiEJIARBHGohCiAEQSBqIQMgBEEoaiEBIARBEGoiBUIANwIAIAVCADcCCCAFQgA3AhAgBUIANwIYIAVBADYCICAFQQA7ASQgBUEAOgAmAkAgBiACQQAQxgYEfyAEQQE2AjAgBiAEIAcgB0EBQQAgBigCACgCFEEDcUGYA2oRDAAgCSgCAEEBRgR/IAcFQQALBSAGIAQgB0EBQQAgBigCACgCGEEDcUGUA2oRDQACQAJAAkACQCAEKAIkDgIAAQILIAAoAgAhACABKAIAQQFGIAooAgBBAUZxIAMoAgBBAUZxRQRAQQAhAAsMBAsMAQtBACEADAILIAkoAgBBAUcEQCABKAIARSAKKAIAQQFGcSADKAIAQQFGcUUEQEEAIQAMAwsLIAUoAgALIQALIAgkBSAAC0QBAX8gACABKAIIIAUQxgYEQEEAIAEgAiADIAQQyQYFIAAoAggiBiABIAIgAyAEIAUgBigCACgCFEEDcUGYA2oRDAALC70CAQN/AkAgACABKAIIIAQQxgYEQEEAIAEgAiADEMgGBSAAIAEoAgAgBBDGBkUEQCAAKAIIIgAgASACIAMgBCAAKAIAKAIYQQNxQZQDahENAAwCCyABKAIQIAJHBEAgAUEUaiIFKAIAIAJHBEAgASADNgIgIAFBLGoiAygCAEEERg0DIAFBNGoiBkEAOgAAIAFBNWoiB0EAOgAAIAAoAggiACABIAIgAkEBIAQgACgCACgCFEEDcUGYA2oRDAAgAwJ/AkAgBywAAAR/IAYsAAANAUEBBUEACyEAIAUgAjYCACABQShqIgIgAigCAEEBajYCACABKAIkQQFGBEAgASgCGEECRgRAIAFBAToANiAADQJBBAwDCwsgAA0AQQQMAQtBAwsiADYCAAwDCwsgA0EBRgRAIAFBATYCIAsLCws+AQF/IAAgASgCCEEAEMYGBEBBACABIAIgAxDHBgUgACgCCCIEIAEgAiADIAQoAgAoAhxBB3FBjANqEQsACwstAQJ/IwUhACMFQRBqJAUgACEBQdy1AUHIABArBEBByZYBIAEQwQYFIAAkBQsLNAECfyMFIQEjBUEQaiQFIAEhAiAAEIcGQdy1ASgCAEEAEC0EQEH7lgEgAhDBBgUgASQFCwsLACAAIAFBABDGBguBAwEDfyMFIQUjBUFAayQFIAUhAyACIAIoAgAoAgA2AgAgACABIgRBABDGBgR/QQEFIARBqN0AQQAQxgYLBH9BAQUgAQR/IAFByNwAQYDdAEEAEMoGIgEEfyABKAIIIAAoAghBf3NxBH9BAAUgAEEMaiIAKAIAIAFBDGoiASgCAEEAEMYGBH9BAQUgACgCAEGg3QBBABDGBgR/QQEFIAAoAgAiAAR/IABByNwAQbjcAEEAEMoGIgQEfyABKAIAIgAEfyAAQcjcAEG43ABBABDKBiIBBH8gA0EEaiIAQgA3AgAgAEIANwIIIABCADcCECAAQgA3AhggAEIANwIgIABCADcCKCAAQQA2AjAgAyABNgIAIAMgBDYCCCADQX82AgwgA0EBNgIwIAEgAyACKAIAQQEgASgCACgCHEEHcUGMA2oRCwAgAygCGEEBRgR/IAIgAygCEDYCAEEBBUEACwVBAAsFQQALBUEACwVBAAsLCwsFQQALBUEACwshACAFJAUgAAsEAEEAC4QCAQh/IAAgASgCCCAFEMYGBEBBACABIAIgAyAEEMkGBSABQTRqIgYsAAAhCSABQTVqIgcsAAAhCiAAQRBqIAAoAgwiCEEDdGohCyAGQQA6AAAgB0EAOgAAIABBEGogASACIAMgBCAFENcGAkAgCEEBSgRAIAFBGGohDCAAQQhqIQggAUE2aiENIABBGGohAANAIA0sAAANAiAGLAAABEAgDCgCAEEBRg0DIAgoAgBBAnFFDQMFIAcsAAAEQCAIKAIAQQFxRQ0ECwsgBkEAOgAAIAdBADoAACAAIAEgAiADIAQgBRDXBiAAQQhqIgAgC0kNAAsLCyAGIAk6AAAgByAKOgAACwubBQEJfwJAIAAgASgCCCAEEMYGBEBBACABIAIgAxDIBgUgACABKAIAIAQQxgZFBEAgACgCDCEFIABBEGogASACIAMgBBDYBiAFQQFMDQIgAEEQaiAFQQN0aiEHIABBGGohBSAAKAIIIgZBAnFFBEAgAUEkaiIAKAIAQQFHBEAgBkEBcUUEQCABQTZqIQYDQCAGLAAADQYgACgCAEEBRg0GIAUgASACIAMgBBDYBiAFQQhqIgUgB0kNAAsMBQsgAUEYaiEGIAFBNmohCANAIAgsAAANBSAAKAIAQQFGBEAgBigCAEEBRg0GCyAFIAEgAiADIAQQ2AYgBUEIaiIFIAdJDQALDAQLCyABQTZqIQADQCAALAAADQMgBSABIAIgAyAEENgGIAVBCGoiBSAHSQ0ACwwCCyABKAIQIAJHBEAgAUEUaiILKAIAIAJHBEAgASADNgIgIAFBLGoiDCgCAEEERg0DIABBEGogACgCDEEDdGohDSABQTRqIQcgAUE1aiEGIAFBNmohCCAAQQhqIQkgAUEYaiEKQQAhAyAAQRBqIQVBACEAAn8CQAJAA0AgBSANTw0BIAdBADoAACAGQQA6AAAgBSABIAIgAkEBIAQQ1wYgCCwAAA0BAkAgBiwAAARAIAcsAABFBEAgCSgCAEEBcQRAQQEhAwwDBUEBIQMMBQsACyAKKAIAQQFGDQQgCSgCAEECcUUNBEEBIQNBASEACwsgBUEIaiEFDAALAAsgAEUEQCALIAI2AgAgAUEoaiIAIAAoAgBBAWo2AgAgASgCJEEBRgRAIAooAgBBAkYEQCAIQQE6AAAgAw0DQQQMBAsLCyADDQBBBAwBC0EDCyEAIAwgADYCAAwDCwsgA0EBRgRAIAFBATYCIAsLCwt5AQJ/AkAgACABKAIIQQAQxgYEQEEAIAEgAiADEMcGBSAAQRBqIAAoAgwiBEEDdGohBSAAQRBqIAEgAiADENYGIARBAUoEQCABQTZqIQQgAEEYaiEAA0AgACABIAIgAxDWBiAELAAADQMgAEEIaiIAIAVJDQALCwsLC1YBA38gACgCBCIFQQh1IQQgBUEBcQRAIAIoAgAgBGooAgAhBAsgACgCACIAKAIAKAIcIQYgACABIAIgBGogBUECcQR/IAMFQQILIAZBB3FBjANqEQsAC1oBA38gACgCBCIHQQh1IQYgB0EBcQRAIAMoAgAgBmooAgAhBgsgACgCACIAKAIAKAIUIQggACABIAIgAyAGaiAHQQJxBH8gBAVBAgsgBSAIQQNxQZgDahEMAAtYAQN/IAAoAgQiBkEIdSEFIAZBAXEEQCACKAIAIAVqKAIAIQULIAAoAgAiACgCACgCGCEHIAAgASACIAVqIAZBAnEEfyADBUECCyAEIAdBA3FBlANqEQ0AC4sGAQx/IwUhCyMFQeAgaiQFIAtB0CBqIQcgCyIKQZAgaiEFAkACQCAARQ0AIAFBAEciBCACRSINcQ0AIAQEfyACKAIABUEACyEMIApBgCBqIAo2AgAgBSAKENoGIAVBMGoiBEIANwIAIARBADYCCCAEQQA6AAwgBUE9aiIOQQE6AAAgBUEgaiEIIAVBJGoiBigCACIEIAUoAihJBEAgByAKENsGIARBADYCACAEQQA2AgQgBEEANgIIIAQgBygCADYCDCAGIAYoAgBBEGo2AgAFIAggChDcBgsgBUE+aiIJQQA6AAAgBUEBOgA/IAdBADYCACAAIAAgABCWBmoiDyAFIAcQ3QYCQAJAAkAgBygCACIEIAksAABFcgR/IAQhAAwBBSAIKAIAIgQgBigCAEYNAiAEKAIAIAQoAgRGDQIgCUEAOgAAIA5BADoAACAFKAIAIQYgBUEEaiIIKAIAIQQDQCAEIAZHBEAgBEFoaiIEEN4GDAELCyAIIAY2AgAgBSgCECEGIAVBFGoiCCgCACEEA0AgBCAGRwRAIARBcGoiBBDfBgwBCwsgCCAGNgIAIAAgDyAFIAcQ3QYgCSwAAAR/IAdBfjYCAEEAIQFBfgUgBygCACEADAILCyEADAILIABFDQBBACEBDAELIAVBBGoiACgCAEFoahDgBiIEQQFqIgYgDEsEQCABIAYQiQYiAUUEQCAHQX82AgBBACEBQX8hAAwCCyANRQRAIAIgBjYCAAsFIAFFBEBBACEBQQAhAAwCCwsgACgCACICQXRqIgcsAAsiCUEASCEGIAcoAgAhDCACQXhqKAIAIQggCUH/AXEhCSACQWhqIAYEfyAMBSAHCyAGBH8gCAUgCQsQ4QYaIAAoAgBBaGoiACwAC0EASARAIAAoAgAhAAsgASAAIAQQ9AcaIAEgBGpBADoAAEEAIQALIAMEQCADIAA2AgALIAVBIGoQ4gYgBUEQahDjBiAFEN8GIApBgCBqQQA2AgAMAQsgAwR/IANBfTYCAEEABUEACyEBCyALJAUgAQuPAQECfyMFIQIjBUEQaiQFIAIgATYCACAAQQA2AgAgAEEANgIEIABBADYCCCAAIAIoAgA2AgwgAiABENsGIABBEGoiA0EANgIAIANBADYCBCADQQA2AgggAyACKAIANgIMIAIgATYCACAAQSBqIgBBADYCACAAQQA2AgQgAEEANgIIIAAgAigCADYCDCACJAULCQAgACABNgIAC9sBAQl/IwUhBSMFQSBqJAUgBUEUaiEGIAUhBEH/////ACIHIABBBGoiCCgCACAAKAIAa0EEdUEBaiIDSQRAECgFIAAoAgggACgCACIJayICQQR1IAdBAXZJIQogAkEDdSICIANPBEAgAiEDCyAAQQxqIQIgBCAKBH8gAwUgBwsgCCgCACAJa0EEdSACENwHIARBCGoiAygCACECIAYgARDbBiACQQA2AgAgAkEANgIEIAJBADYCCCACIAYoAgA2AgwgAyACQRBqNgIAIAAgBBDdByAEEN4HIAUkBQsLtgIBAX8CQCAAIAFJBEACQCAALAAAQd8ARgRAIAEgAGtBA0wEQCADQX42AgAMBAsCQAJAAkACQAJAIAAsAAFB2gBrDgYAAgICAgECCyAAQQJqIgQgASACEOwGIgAgBEYgACABRnJFBEAgACwAAEEuRgRAIAAgASACEO0GIQALCyAAIAFGDQUgA0F+NgIADAcLDAELDAELIAAsAAJB3wBGBEAgACwAA0HaAEYEQCAAQQRqIgQgASACEOwGIgAgBEYgACABRnIEQCADQX42AgAMBwsgACABIAIQ7gYgAUYNBCADQX42AgAMBgsLCyADQX42AgAMAwUgACABIAIQ7wYgAUcEQCADQX42AgAMBAsLCyADKAIARQRAIAIoAgAgAigCBEYEQCADQX42AgALCwUgA0F+NgIACwsLDwAgAEEMahDrBiAAEOsGC1IBA38gACgCACICBEAgAEEEaiIDKAIAIQED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aiEADAELCyADIAZBDGoiAEECEPwGQduZARCWBiECIAMoAgQhBSADLAALIg1B/wFxIQ4gAiANQQBIBH8gBQUgDgtGBEAgA0HbmQEgAhD9BkUhAiADEOsGIAIEQCAAEOQHCwUgAxDrBgsgBCAJEIAHIARBAEHbmQEQ8gYaIAogBCkCADcCACAKIAQoAgg2AghBACECA0AgAkEDRwRAIAQgAkECdGpBADYCACACQQFqIQIMAQsLIApBkpoBEPMGGiAIIAopAgA3AgAgCCAKKAIINgIIQQAhAgNAIAJBA0cEQCAKIAJBAnRqQQA2AgAgAkEBaiECDAELCyAALAALIgVBAEghAiAAKAIAIQ0gBigCECEOIAVB/wFxIQUgCCACBH8gDQUgAAsgAgR/IA4FIAULEOEGGiAMIAgpAgA3AgAgDCAIKAIINgIIQQAhAANAIABBA0cEQCAIIABBAnRqQQA2AgAgAEEBaiEADAELCyAHKAIAIgJBdGoiAEELaiIHLAAAQQBIBEAgACgCACEHIANBADoAACAHIAMQ6AYgAkF4akEANgIABSADQQA6AAAgACADEOgGIAdBADoAAAsgABCOByAAIAwpAgA3AgAgACAMKAIINgIIQQAhAANAIABBA0cEQCAMIABBAnRqQQA2AgAgAEEBaiEADAELCyAMEOsGIAgQ6wYgChDrBiAEEOsGIAkQ3gYgBhDeBiABIQALCwsLCwsLCyALJAUgAAtEAQF/IABBADYCACAAQQRqIgNBADYCACAAQQA2AgggACACKAIANgIMIAAQ4wcgAygCACABEPQGIAMgAygCAEEYajYCAAuSAgEIfyMFIQcjBUEgaiQFIAchBUH/////ACIIIABBBGoiCSgCACAAKAIAa0EEdUEBaiIDSQRAECgFIAAoAgggACgCACIEayICQQR1IAhBAXZJIQYgAkEDdSICIANPBEAgAiEDCyAAQQxqIQIgBSAGBH8gAwUgCAsgCSgCACAEa0EEdSACENwHIAVBCGoiBigCACIEQQA2AgAgBEEEaiICQQA2AgAgBEEIaiIDQQA2AgAgBCABKAIMNgIMIAQgASgCADYCACACIAFBBGoiAigCADYCACADIAFBCGoiAygCADYCACADQQA2AgAgAkEANgIAIAFBADYCACAGIARBEGo2AgAgACAFEN0HIAUQ4gcgByQFCwvrBgERfyMFIQojBUEgaiQFIApBDGohBCAKIQgCQCAAIAFHBEAgACwAAEHGAEYEQCAAQQFqIgMgAUcEQCADLAAAQdkARgRAIABBAmoiAyABRg0ECyADIAEgAhDvBiIFIANHBEAgBEIANwIAIARBADYCCCAEQeOZAUHjmQEQlgYQjAcgAkEEaiEGIARBC2ohDSAEQQRqIQ4gCEELaiERIAhBBGohEiAFIQMCQAJAAkADQAJAA0ACQCADIAFGDQQCfwJAAkACQAJAAkAgAywAAEHFAGsOMgAEBAQEBAQEBAQDBAQCBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBAsMCgsgA0EBagwDCyADQQFqIgUgAUYNASAFLAAAQcUARw0BQQEhDyAFIQMMAwsgA0EBaiIFIAFGDQAgBSwAAEHFAEcNAEECIQ8gBSEDDAILIAYoAgAgAigCAGtBGG0hBSADIAEgAhDvBiELIAYoAgAgAigCAGtBGG0hECALIANGIAsgAUZyDQMgBSEDA0AgAyAQSQRAIA4oAgAhByANLAAAIglB/wFxIQwgCUEASAR/IAcFIAwLQQFLBEAgBEHBmwEQ8wYaCyAIIAIoAgAgA0EYbGoQgAcgESwAACIJQQBIIQcgCCgCACEMIBIoAgAhEyAJQf8BcSEJIAQgBwR/IAwFIAgLIAcEfyATBSAJCxDhBhogCBDrBiADQQFqIQMMAQsLA38gBSAQSQR/IAYoAgAhB0EAIQMDQCADQX9HBEAgByADQX9qIgNBGGxqEN4GDAELCyAGIAdBaGo2AgAgBUEBaiEFDAEFIAsLCwshAwwBCwsMAQsLDAILIAYoAgAhAkEAIQEDQCABQX9HBEAgAiABQX9qIgFBGGxqEN4GDAELCyAGIAJBaGo2AgAMAQsgA0EBaiEBIARB4ZkBEPMGGgJAAkACQCAPQQFrDgIAAQILIARB9aQBEPMGGgwBCyAEQfikARDzBhoLIAIoAgAgBigCACICRwRAIAJBaGpBg5oBEPMGGiANLAAAIgJBAEghACAEKAIAIQMgDigCACEFIAJB/wFxIQIgBigCAEF0akEAIAAEfyADBSAECyAABH8gBQUgAgsQ4QcaIAQQ6wYgASEADAYLCyAEEOsGCwsLCwsgCiQFIAALwwsBDH8jBSEMIwVB8ABqJAUgDEHgAGohBSAMQcgAaiEJIAxBMGohDSAMQSRqIQMgDEEYaiEHIAxBDGohCCAMIQQgACABRwRAIAAsAABBzQBGBEAgAEEBaiIGIAEgAhDvBiILIAZHBEAgCyABIAIQ7wYiASALRwRAIAJBBGoiCygCACIGIAIoAgBrQRhtQQJPBEAgCSAGQWhqEIUHIAsoAgAhAkEAIQADQCAAQX9HBEAgAiAAQX9qIgBBGGxqEN4GDAELCyALIAJBaGo2AgAgDSACQVBqEIUHIAlBDGoiACgCACECAkAgACwAC0EASAR/IAIFIAALLAAAQShGBEAgCUHjmQEQ8wYaIAggCSkCADcCACAIIAkoAgg2AghBACECA0AgAkEDRwRAIAkgAkECdGpBADYCACACQQFqIQIMAQsLIAQgDRCAByAELAALIgZBAEghAiAEKAIAIQogBCgCBCEOIAZB/wFxIQYgCCACBH8gCgUgBAsgAgR/IA4FIAYLEOEGGiAHIAgpAgA3AgAgByAIKAIINgIIQQAhAgNAIAJBA0cEQCAIIAJBAnRqQQA2AgAgAkEBaiECDAELCyAHQfGkARDzBhogAyAHKQIANwIAIAMgBygCCDYCCEEAIQIDQCACQQNHBEAgByACQQJ0akEANgIAIAJBAWohAgwBCwsgCygCACIGQWhqIgJBC2oiCiwAAEEASARAIAIoAgAhCiAFQQA6AAAgCiAFEOgGIAZBbGpBADYCAAUgBUEAOgAAIAIgBRDoBiAKQQA6AAALIAIQjgcgAiADKQIANwIAIAIgAygCCDYCCEEAIQIDQCACQQNHBEAgAyACQQJ0akEANgIAIAJBAWohAgwBCwsgAxDrBiAHEOsGIAQQ6wYgCBDrBiAAQQBB4ZkBEPIGGiADIAApAgA3AgAgAyAAKAIINgIIQQAhAgNAIAJBA0cEQCAAIAJBAnRqQQA2AgAgAkEBaiECDAELCyALKAIAIgJBdGoiAEELaiIELAAAQQBIBEAgACgCACEEIAVBADoAACAEIAUQ6AYgAkF4akEANgIABSAFQQA6AAAgACAFEOgGIARBADoAAAsgABCOByAAIAMpAgA3AgAgACADKAIINgIIQQAhAANAIABBA0cEQCADIABBAnRqQQA2AgAgAEEBaiEADAELCyADEOsGBSAJQYOaARDzBhogCCAJKQIANwIAIAggCSgCCDYCCEEAIQIDQCACQQNHBEAgCSACQQJ0akEANgIAIAJBAWohAgwBCwsgBCANEIAHIAQsAAsiBkEASCECIAQoAgAhCiAEKAIEIQ4gBkH/AXEhBiAIIAIEfyAKBSAECyACBH8gDgUgBgsQ4QYaIAcgCCkCADcCACAHIAgoAgg2AghBACECA0AgAkEDRwRAIAggAkECdGpBADYCACACQQFqIQIMAQsLIAdB8aQBEPMGGiADIAcpAgA3AgAgAyAHKAIINgIIQQAhAgNAIAJBA0cEQCAHIAJBAnRqQQA2AgAgAkEBaiECDAELCyALKAIAIgZBaGoiAkELaiIKLAAAQQBIBEAgAigCACEKIAVBADoAACAKIAUQ6AYgBkFsakEANgIABSAFQQA6AAAgAiAFEOgGIApBADoAAAsgAhCOByACIAMpAgA3AgAgAiADKAIINgIIQQAhAgNAIAJBA0cEQCADIAJBAnRqQQA2AgAgAkEBaiECDAELCyADEOsGIAcQ6wYgBBDrBiAIEOsGIAsoAgAiBEF0aiICQQtqIgMsAABBAEgEQCACKAIAIQMgBUEAOgAAIAMgBRDoBiAEQXhqQQA2AgAFIAVBADoAACACIAUQ6AYgA0EAOgAACyACEI4HIAIgACkCADcCACACIAAoAgg2AghBACECA0AgAkEDRg0CIAAgAkECdGpBADYCACACQQFqIQIMAAsACwsgDRDeBiAJEN4GIAEhAAsLCwsLIAwkBSAAC1oBBH8gAEIANwIAIABBADYCCCABLAALIgNBAEghBSABKAIEIQQgASgCACEGIANB/wFxIQMgBUUEQCADIQQLIAAgBQR/IAYFIAELIAQgAkkEfyAEBSACCxCMBwtwAQN/IAAsAAsiA0EASCIEBH8gACgCBAUgA0H/AXELIQMgAkF/RgRAECgLIAQEQCAAKAIAIQALIAAhBCADIAJLIgAEfyACBSADCyIFBH8gBCABIAUQkwYFQQALIgEEfyABBSADIAJJBH9BfwUgAAsLC/AEAQd/IwUhCCMFQTBqJAUgCEEQaiEFIAghBAJAIAEgAGtBAUoEQCAALAAAQdQARgRAIAAsAAEiA0HfAEYEQCACKAIgIAIoAiQiAUYNAyABQXBqKAIAIgMgAUF0aigCAEYEQCAFEN8HIAJBBGoiASgCACIEIAIoAghJBEAgBCAFEIUHIAEgASgCAEEYajYCAAUgAiAFEIYHCyAFEN4GIAJBAToAPiAAQQJqIQAMBAsgAygCBCEFIAJBBGohBCACQQhqIQYgAygCACEBA0AgASAFRwRAIAQoAgAiAyAGKAIARgRAIAIgARD1BgUgAyABEPQGIAQgBCgCAEEYajYCAAsgAUEYaiEBDAELCyAAQQJqIQAMAwsgA0FQaiIDQQpJBEAgAEECaiEGA0AgBiABRg0EIAYsAAAiB0FQaiIJQQpJBEAgCSADQQpsaiEDIAZBAWohBgwBCwsgB0HfAEYEQCACKAIgIAIoAiQiAUcEQCADQQFqIgMgAUF0aigCACABQXBqKAIAIgdrQQR1TwRAIARCADcCACAEQQA2AgggBCAAIAZBAWoiABDBByAFIAQQgwcgAkEEaiIBKAIAIgMgAigCCEkEQCADIAUQhQcgASABKAIAQRhqNgIABSACIAUQhgcLIAUQ3gYgBBDrBiACQQE6AD4MBgsgByADQQR0aigCBCEEIAJBBGohASACQQhqIQUgByADQQR0aigCACEAA0AgACAERwRAIAEoAgAiAyAFKAIARgRAIAIgABD1BgUgAyAAEPQGIAEgASgCAEEYajYCAAsgAEEYaiEADAELCyAGQQFqIQALCwsLCwsgCCQFIAAL7wgBF38jBSENIwVBQGskBSANQSBqIQcgDUEQaiEFIA1BDGohECANIQ8CQCABIABrQQFKBEAgACwAAEHJAEYEQCACQSRqIQkgAkE9aiIRLAAABEAgCSgCACIGQXBqKAIAIQMgBkF0aiILKAIAIQYDQCAGIANHBEAgBkFwaiIGEN8GDAELCyALIAM2AgALIAVCADcCACAFQQA2AgggBUGFmgFBhZoBEJYGEIwHIAJBBGohDCACQQxqIRMgAkEoaiEWIAJBIGohFyAFQQtqIRQgBUEEaiEVIAdBC2ohGCAHQQRqIRkgAEEBaiEDAkACQANAIAMsAABBxQBHBEAgESwAAARAIBAgEygCADYCACAJKAIAIgYgFigCAEkEQCAHIBAQ2QcgBkEANgIAIAZBADYCBCAGQQA2AgggBiAHKAIANgIMIAkgCSgCAEEQajYCAAUgFyAQENoHCwsgDCgCACACKAIAa0EYbSEGIAMgASACENsHIQsgDCgCACACKAIAa0EYbSEOIBEsAAAEQCAJKAIAIQhBACEEA0AgBEF/RwRAIAggBEF/aiIEQQR0ahDjBgwBCwsgCSAIQXBqNgIACyALIANGIAsgAUZyDQICQCARLAAABEAgCSgCACEEIAcgEygCACIKNgIAIARBdGoiCCgCACIDIARBeGooAgBJBEAgA0EANgIAIANBADYCBCADQQA2AgggAyAKNgIMIAggCCgCAEEQajYCAAUgBEFwaiAHEPEGCyAGIQMDQCADIA5PDQIgAigCACADQRhsaiEEIAkoAgBBdGooAgAiCEF0aiIKKAIAIhIgCEF4aigCAEYEQCAIQXBqIAQQ9QYFIBIgBBD0BiAKIAooAgBBGGo2AgALIANBAWohAwwACwALCyAGIQMDQCADIA5JBEAgFSgCACEEIBQsAAAiCEH/AXEhCiAIQQBIBH8gBAUgCgtBAUsEQCAFQcGbARDzBhoLIAcgAigCACADQRhsahCAByAYLAAAIghBAEghBCAHKAIAIQogGSgCACESIAhB/wFxIQggBSAEBH8gCgUgBwsgBAR/IBIFIAgLEOEGGiAHEOsGIANBAWohAwwBCwsDQCAOIAZHBEAgDCgCACEEQQAhAwNAIANBf0cEQCAEIANBf2oiA0EYbGoQ3gYMAQsLIAwgBEFoajYCACAOQX9qIQ4MAQsLIAshAwwBCwsMAQsgBRDrBgwDCyAULAAAIgFBAEghACAFKAIAIQYgFSgCACELIAFB/wFxIQEgAAR/IAYFIAULIAAEfyALBSABC2pBf2osAABBPkYEfyAFQeikARDzBgUgBUGHmgEQ8wYLGiAPIAUpAgA3AgAgDyAFKAIINgIIQQAhAANAIABBA0cEQCAFIABBAnRqQQA2AgAgAEEBaiEADAELCyAHIA8QgwcgDCgCACIAIAIoAghJBEAgACAHEIUHIAwgDCgCAEEYajYCAAUgAiAHEIYHCyAHEN4GIA8Q6wYgBRDrBiADQQFqIQALCwsgDSQFIAALfgEFfyABQQxqIgMsAAsiAkEASCEEIAMoAgAhBSABKAIQIQYgAkH/AXEhAiABIAQEfyAFBSADCyAEBH8gBgUgAgsQ4QYaIAAgASkCADcCACAAIAEoAgg2AghBACEAA0AgAEEDRwRAIAEgAEECdGpBADYCACAAQQFqIQAMAQsLC7gDAQh/IwUhByMFQUBrJAUgB0EoaiEEIAdBEGohAyAHIQgCQCAAIAFHBEAgACwAAEFQaiIGQQpJBEAgAEEBaiIFIAFHBEADQCAFLAAAQVBqIglBCkkEQCAFQQFqIgUgAUYEQAwGBSAJIAZBCmxqIQYMAgsACwsgASAFayAGTwRAIARCADcCACAEQQA2AgggBCAFIAYQjAcgAyAEQQoQ/AZBx6QBEJYGIQAgAygCBCEBIAMsAAsiCUH/AXEhCiAAIAlBAEgEfyABBSAKC0YEfyADQcekASAAEP0GRQVBAAshACADEOsGIAAEQCADENgHIAJBBGoiACgCACIBIAIoAghJBEAgASADEIUHIAAgACgCAEEYajYCAAUgAiADEIYHCyADEN4GBSAIIAQpAgA3AgAgCCAEKAIINgIIQQAhAANAIABBA0cEQCAEIABBAnRqQQA2AgAgAEEBaiEADAELCyADIAgQgwcgAkEEaiIAKAIAIgEgAigCCEkEQCABIAMQhQcgACAAKAIAQRhqNgIABSACIAMQhgcLIAMQ3gYgCBDrBgsgBBDrBiAFIAZqIQALCwsLCyAHJAUgAAuMAQEEfyAAQgA3AgAgAEEANgIIA0AgA0EDRwRAIAAgA0ECdGpBADYCACADQQFqIQMMAQsLIAEoAgQhAyABQQtqIgYsAAAiBEH/AXEhBSAEQQBOBEAgBSEDCyACEJYGIQQgASgCACEFIAAgBiwAAEEASAR/IAUFIAELIAMgAyAEahCQByAAIAIgBBDhBhoLcQEBfyAAIAEpAgA3AgAgACABKAIINgIIA0AgAkEDRwRAIAEgAkECdGpBADYCACACQQFqIQIMAQsLIABBDGoiAUIANwIAIAFBADYCCEEAIQADQCAAQQNHBEAgASAAQQJ0akEANgIAIABBAWohAAwBCwsLoQIBBH8jBSEFIwVBEGokBSAFIQMgAEELaiICLAAAQQBIBEAgACgCACECIANBADoAACACIAMQ6AYgAEEANgIEBSADQQA6AAAgACADEOgGIAJBADoAAAsgABCOByAAIAEpAgA3AgAgACABKAIINgIIQQAhAgNAIAJBA0cEQCABIAJBAnRqQQA2AgAgAkEBaiECDAELCyAAQQxqIgRBC2oiAiwAAEEASARAIAQoAgAhAiADQQA6AAAgAiADEOgGIABBADYCEAUgA0EAOgAAIAQgAxDoBiACQQA6AAALIAQQjgcgBCABQQxqIgApAgA3AgAgBCAAKAIINgIIQQAhAQNAIAFBA0cEQCAAIAFBAnRqQQA2AgAgAUEBaiEBDAELCyAFJAULfAEBfyAAIAEpAgA3AgAgACABKAIINgIIA0AgAkEDRwRAIAEgAkECdGpBADYCACACQQFqIQIMAQsLIABBDGoiACABQQxqIgEpAgA3AgAgACABKAIINgIIQQAhAANAIABBA0cEQCABIABBAnRqQQA2AgAgAEEBaiEADAELCwuzAQEIfyMFIQUjBUEgaiQFIAUhBEGq1arVACIGIABBBGoiBygCACAAKAIAa0EYbUEBaiIDSQRAECgFIAAoAgggACgCACIIa0EYbSICIAZBAXZJIQkgAkEBdCICIANPBEAgAiEDCyAAQQxqIQIgBCAJBH8gAwUgBgsgBygCACAIa0EYbSACEMgHIARBCGoiAigCACIDIAEQhQcgAiADQRhqNgIAIAAgBBDJByAEEMoHIAUkBQsLgwYBCH8jBSEHIwVBIGokBSAHQQhqIQQgByEGAkAgASAAa0EBSgRAIABBAWohAwJAAkACQCAALAAAQcwARgR/IAMFIAAiAwssAABBzgBrDg0AAgICAgICAgICAgIBAgsgAyABIAIQ0wciASADRwRAIAEhAAsMAwsgAyABIAIQ1AciASADRwRAIAEhAAsMAgsgAyABIAIQ1QciBSADRgRAIAMgASACEIgHIgUgA0YgBSABRnINAiAFLAAAQckARw0CIAUgASACEP8GIgEgBUYNAiACQQRqIgMoAgAiBSACKAIAa0EYbUECSQ0CIAQgBUFoahCAByADKAIAIQJBACEAA0AgAEF/RwRAIAIgAEF/aiIAQRhsahDeBgwBCwsgAyACQWhqNgIAIAQsAAsiA0EASCEAIAQoAgAhBSAEKAIEIQYgA0H/AXEhAyACQVBqIAAEfyAFBSAECyAABH8gBgUgAwsQ4QYaIAQQ6wYgASEADAILIAUgAUYEQCABIQAMAgsgBSwAAEHJAEcEQCAFIQAMAgsgAigCACACQQRqIggoAgAiA0YNASAGIAIoAgw2AgAgBCADQWhqIAYQ+AYgAkEUaiIGKAIAIgMgAigCGEkEQCADQQA2AgAgA0EEaiIJQQA2AgAgA0EIaiIKQQA2AgAgAyAEKAIMNgIMIAMgBCgCADYCACAJIARBBGoiAygCADYCACAKIARBCGoiCSgCADYCACAJQQA2AgAgA0EANgIAIARBADYCACAGIAYoAgBBEGo2AgAFIAJBEGogBBD5BgsgBBDfBiAFIAEgAhD/BiIBIAVGDQEgCCgCACIDIAIoAgBrQRhtQQJJDQEgBCADQWhqEIAHIAgoAgAhAkEAIQADQCAAQX9HBEAgAiAAQX9qIgBBGGxqEN4GDAELCyAIIAJBaGo2AgAgBCwACyIDQQBIIQAgBCgCACEFIAQoAgQhBiADQf8BcSEDIAJBUGogAAR/IAUFIAQLIAAEfyAGBSADCxDhBhogBBDrBiABIQALCyAHJAUgAAulBwEHfyMFIQgjBUEgaiQFIAghAwJAIAEgAGtBAUoEQCAALAAAQdMARgRAAkACQAJAAkACQAJAAkACQCAALAABIgRB3wBrDhUGBwABBwUHBwcHAwcHBwcHBAcHBwIHCyADQZGkARC7ByACQQRqIgEoAgAiBCACKAIISQRAIAQgAxCFByABIAEoAgBBGGo2AgAFIAIgAxCGBwsgAxDeBiAAQQJqIQAMCQsgA0GgpAEQuAcgAkEEaiIBKAIAIgQgAigCCEkEQCAEIAMQhQcgASABKAIAQRhqNgIABSACIAMQhgcLIAMQ3gYgAEECaiEADAgLIANBl6ABELoHIAJBBGoiASgCACIEIAIoAghJBEAgBCADEIUHIAEgASgCAEEYajYCAAUgAiADEIYHCyADEN4GIABBAmohAAwHCyADQfegARC8ByACQQRqIgEoAgAiBCACKAIISQRAIAQgAxCFByABIAEoAgBBGGo2AgAFIAIgAxCGBwsgAxDeBiAAQQJqIQAMBgsgA0HEoQEQvAcgAkEEaiIBKAIAIgQgAigCCEkEQCAEIAMQhQcgASABKAIAQRhqNgIABSACIAMQhgcLIAMQ3gYgAEECaiEADAULIANBkaIBENIHIAJBBGoiASgCACIEIAIoAghJBEAgBCADEIUHIAEgASgCAEEYajYCAAUgAiADEIYHCyADEN4GIABBAmohAAwECyACKAIQIgEgAigCFEYNAyABKAIEIQQgAkEEaiEDIAJBCGohBSABKAIAIQEDQCABIARHBEAgAygCACIGIAUoAgBGBEAgAiABEPUGBSAGIAEQ9AYgAyADKAIAQRhqNgIACyABQRhqIQEMAQsLIABBAmohAAwDCyAEQVBqIgNBCkkiBUUEQCAEELsGRQ0DCyAEQUlqIQYgAEECaiEEIAVFBEAgBiEDCwNAAkAgBCABRg0EIAQsAAAiBiIFQVBqIgdBCkkiCUUEQCAFELsGRQ0BCyADQSRsIQMgBUFJaiEFIARBAWohBCAJBH8gBwUgBQsgA2ohAwwBCwsgBkHfAEcNAiADQQFqIgMgAigCFCACKAIQIgVrQQR1Tw0CIAUgA0EEdGooAgQhBiACQQRqIQEgAkEIaiEHIAUgA0EEdGooAgAhAANAIAAgBkcEQCABKAIAIgMgBygCAEYEQCACIAAQ9QYFIAMgABD0BiABIAEoAgBBGGo2AgALIABBGGohAAwBCwsgBEEBaiEACwsLIAgkBSAAC4EDAQd/IwUhBSMFQUBrJAUgBUEoaiEHIAVBDGohBiAFQRhqIQMgBSEEAkAgASAAa0EDSgRAIAAsAABBxABGBEACQAJAAkAgACwAAUHUAGsOIQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAELDAELDAMLIABBAmoiCSABIAIQjQciCCAJRiAIIAFGckUEQCAILAAAQcUARgRAIAIoAgAgAkEEaiIBKAIAIgJHBEAgBCACQWhqEIAHIARBAEGHpAEQ8gYaIAMgBCkCADcCACADIAQoAgg2AghBACEAA0AgAEEDRwRAIAQgAEECdGpBADYCACAAQQFqIQAMAQsLIANB4ZkBEPMGGiAGIAMpAgA3AgAgBiADKAIINgIIQQAhAANAIABBA0cEQCADIABBAnRqQQA2AgAgAEEBaiEADAELCyAHIAYQgwcgASgCAEFoaiAHEIQHIAcQ3gYgBhDrBiADEOsGIAQQ6wYgCEEBaiEACwsLCwsLIAUkBSAAC9IJAQl/IwUhCiMFQUBrJAUgCkEoaiEGIApBDGohBCAKIgVBGGohBwJAIAEgAGtBA0oEQCAALAAAQcQARgRAIAAsAAFB9gBGBEAgAEECaiIDLAAAIghBT2pBGHRBGHVB/wFxQQlIBEAgAyABEIsHIgggAUYNBCAILAAAQd8ARw0EIAhBAWoiCSABRg0EIAggA2shCyAJLAAAQfAARwRAIAkgASACEO8GIgEgCUYNBSACKAIAIAJBBGoiAigCAEYNBSAFQgA3AgAgBUEANgIIIAUgAyALEIwHIAVBAEGJmgEQ8gYaIAQgBSkCADcCACAEIAUoAgg2AghBACEAA0AgAEEDRwRAIAUgAEECdGpBADYCACAAQQFqIQAMAQsLIARBkpoBEPMGGiAGIAQpAgA3AgAgBiAEKAIINgIIQQAhAANAIABBA0cEQCAEIABBAnRqQQA2AgAgAEEBaiEADAELCyAGLAALIgNBAEghACAGKAIAIQcgBigCBCEIIANB/wFxIQMgAigCAEFoaiAABH8gBwUgBgsgAAR/IAgFIAMLEOEGGiAGEOsGIAQQ6wYgBRDrBiABIQAMBQsgBUIANwIAIAVBADYCCCAFIAMgCxCMByAFQQBBlJoBEPIGGiAEIAUpAgA3AgAgBCAFKAIINgIIQQAhAANAIABBA0cEQCAFIABBAnRqQQA2AgAgAEEBaiEADAELCyAEQZKaARDzBhogByAEKQIANwIAIAcgBCgCCDYCCEEAIQADQCAAQQNHBEAgBCAAQQJ0akEANgIAIABBAWohAAwBCwsgBiAHEIMHIAJBBGoiACgCACIBIAIoAghJBEAgASAGEIUHIAAgACgCAEEYajYCAAUgAiAGEIYHCyAGEN4GIAcQ6wYgBBDrBiAFEOsGIAhBAmohAAwECyAEQgA3AgAgBEEANgIIQQAhBwNAIAdBA0cEQCAEIAdBAnRqQQA2AgAgB0EBaiEHDAELCwJAAkAgCEHfAEYNACADIAEgAhCNByIHIANGDQAgAigCACACQQRqIggoAgAiA0cEQCAFIANBaGoQgAcgBEELaiIDLAAAQQBIBEAgBCgCACEDIAZBADoAACADIAYQ6AYgBEEANgIEBSAGQQA6AAAgBCAGEOgGIANBADoAAAsgBBCOByAEIAUpAgA3AgAgBCAFKAIINgIIQQAhAwNAIANBA0cEQCAFIANBAnRqQQA2AgAgA0EBaiEDDAELCyAFEOsGIAgoAgAhCUEAIQMDQCADQX9HBEAgCSADQX9qIgNBGGxqEN4GDAELCyAIIAlBaGo2AgAgByEDDAELDAELIAMgAUcEQCADLAAAQd8ARgRAIANBAWoiAyABRwRAIAMgASACEO8GIgEgA0cEQCACKAIAIAJBBGoiAigCAEYNBCAFQYmaASAEEI8HIAVBkpoBEPMGGiAGIAUpAgA3AgAgBiAFKAIINgIIQQAhAANAIABBA0cEQCAFIABBAnRqQQA2AgAgAEEBaiEADAELCyAGLAALIgNBAEghACAGKAIAIQcgBigCBCEIIANB/wFxIQMgAigCAEFoaiAABH8gBwUgBgsgAAR/IAgFIAMLEOEGGiAGEOsGIAUQ6wYgASEACwsLCyAEEOsGDAQLIAQQ6wYLCwsLIAokBSAAC4MBAQJ/AkAgACABRwRAIABBAWohAiAALAAAQe4ARgR/IAIFIAAiAgsgAUcEQCACLAAAIgNBMEYEQCACQQFqIQAMAwsgA0FPakEYdEEYdUH/AXFBCUgEQCACIQADQCAAQQFqIgAgAUYEQCABIQAMBQsgACwAAEFQakEKSQ0ACwsLCwsgAAt1AQN/IwUhAyMFQRBqJAUgAkFvSwRAECgLIAJBC0kEQCAAIAI6AAsFIAAgAkEQakFwcSIEEIYGIgU2AgAgACAEQYCAgIB4cjYCCCAAIAI2AgQgBSEACyAAIAEgAhDnBhogA0EAOgAAIAAgAmogAxDoBiADJAUL4zcBEX8jBSELIwVB0AFqJAUgC0GwAWohAyALQfAAaiEFIAtB2ABqIQYgC0FAayEHIAtBMGohCCALQaABaiEQIAtBJGohDCALQZQBaiERIAtBiAFqIRIgC0H8AGohEyALQRhqIQ0gC0EMaiEOIAshCQJAIAEiDyAAayIEQQFKBEAgBEEDSgRAIAAsAABB5wBGBEAgAEECaiEEIAAsAAFB8wBGIgpFBEAgACEECwUgACEECwUgACEECwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBCwAAEExaw5EEhISEhISEhISExMTExMTExMTExMTExMTExMTABMTExMTExMBExMTExMTExMTExMTAxMEBQYCBxMIExMJCgsMDQ4PEBETCyAAIAEgAhCRByEADBQLIAAgASACEP4GIQAMEwsgACABIAIQkgchAAwSCwJAAkACQAJAAkACQAJAAkAgBCwAAUHOAGsOLQMHBwcHBAcHBwcHBwcHBwcHBwcABwcBBwcHBwcHBwcHAgcHBwcHBQcHBwcHBgcLIANCADcCACADQQA2AgggA0HlmQFB5ZkBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMGAsgA0IANwIAIANBADYCCCADQfeZAUH3mQEQlgYQjAcgAEECaiIEIAEgAyACEJQHIQEgAxDrBiABIARHBEAgASEACwwXCyADQgA3AgAgA0EANgIIIANB95kBQfeZARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDBYLIANCADcCACADQQA2AgggA0GimgFBopoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMFQsgA0IANwIAIANBADYCCCADQaWaAUGlmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwUCyAAIAEgAhCVByEADBMLIAAgASACEJYHIQAMEgsMEQsCQAJAAkACQAJAAkAgBCwAAUHjAGsOFAAFBQUFBQUFBQECBQMFBQUFBQUEBQsgACABIAIQlwchAAwVCyAAIAEgAhCYByEADBQLIANCADcCACADQQA2AgggA0GnmgFBp5oBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMEwsgA0IANwIAIANBADYCCCADQamaAUGpmgEQlgYQjAcgAEECaiIEIAEgAyACEJQHIQEgAxDrBiABIARHBEAgASEACwwSCyAAIAEgAhCZByEADBELDBALAkACQAJAAkACQAJAAkACQAJAAkAgBCwAAUHWAGsOIQgJCQkJCQkJCQkJAAkBCQIJCQkJCQkDCQQJCQkJBQYJBwkLIARBAmoiBCABIAIQjQciASAERg0YIAIoAgAgAkEEaiICKAIARg0YIAdCADcCACAHQQA2AggCQCAKBEAgB0GrmgFBq5oBEJYGEIwHBUEAIQADQCAAQQNGDQIgByAAQQJ0akEANgIAIABBAWohAAwACwALCyAHQa6aARDzBhogBiAHKQIANwIAIAYgBygCCDYCCEEAIQADQCAAQQNHBEAgByAAQQJ0akEANgIAIABBAWohAAwBCwsgCCACKAIAQWhqEIAHIAgsAAsiBEEASCEAIAgoAgAhCSAIKAIEIQogBEH/AXEhBCAGIAAEfyAJBSAICyAABH8gCgUgBAsQ4QYaIAUgBikCADcCACAFIAYoAgg2AghBACEAA0AgAEEDRwRAIAYgAEECdGpBADYCACAAQQFqIQAMAQsLIAIoAgAiAkFoaiIAQQtqIgQsAABBAEgEQCAAKAIAIQQgA0EAOgAAIAQgAxDoBiACQWxqQQA2AgAFIANBADoAACAAIAMQ6AYgBEEAOgAACyAAEI4HIAAgBSkCADcCACAAIAUoAgg2AghBACEAA0AgAEEDRwRAIAUgAEECdGpBADYCACAAQQFqIQAMAQsLIAUQ6wYgCBDrBiAGEOsGIAcQ6wYgASEADBgLIAAgASACEJoHIQAMFwsgA0IANwIAIANBADYCCCADQfWZAUH1mQEQlgYQjAcgAEECaiIEIAEgAyACEJQHIQEgAxDrBiABIARHBEAgASEACwwWCyAEQQJqIgQgASACEI0HIgEgBEYNFSACKAIAIAJBBGoiAigCAEYNFSAHQgA3AgAgB0EANgIIAkAgCgRAIAdBq5oBQauaARCWBhCMBwVBACEAA0AgAEEDRg0CIAcgAEECdGpBADYCACAAQQFqIQAMAAsACwsgB0G4mgEQ8wYaIAYgBykCADcCACAGIAcoAgg2AghBACEAA0AgAEEDRwRAIAcgAEECdGpBADYCACAAQQFqIQAMAQsLIAggAigCAEFoahCAByAILAALIgRBAEghACAIKAIAIQkgCCgCBCEKIARB/wFxIQQgBiAABH8gCQUgCAsgAAR/IAoFIAQLEOEGGiAFIAYpAgA3AgAgBSAGKAIINgIIQQAhAANAIABBA0cEQCAGIABBAnRqQQA2AgAgAEEBaiEADAELCyACKAIAIgJBaGoiAEELaiIELAAAQQBIBEAgACgCACEEIANBADoAACAEIAMQ6AYgAkFsakEANgIABSADQQA6AAAgACADEOgGIARBADoAAAsgABCOByAAIAUpAgA3AgAgACAFKAIINgIIQQAhAANAIABBA0cEQCAFIABBAnRqQQA2AgAgAEEBaiEADAELCyAFEOsGIAgQ6wYgBhDrBiAHEOsGIAEhAAwVCyAAIAEgAhCbByEADBQLIAAgASACEJwHIQAMEwsgACABIAIQnQchAAwSCyADQgA3AgAgA0EANgIIIANBwJoBQcCaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDBELIANCADcCACADQQA2AgggA0HCmgFBwpoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMEAsMDwsCQAJAAkACQCAELAABQc8Aaw4jAQMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwIDCyADQgA3AgAgA0EANgIIIANBxZoBQcWaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDBELIANCADcCACADQQA2AgggA0HHmgFBx5oBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMEAsgA0IANwIAIANBADYCCCADQcqaAUHKmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwPCwwOCwJAAkACQCAELAABQeUAaw4QAAICAgICAgICAgICAgICAQILIANCADcCACADQQA2AgggA0HNmgFBzZoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDwsgA0IANwIAIANBADYCCCADQYeaAUGHmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwOCwwNCyAELAABQfgARw0MIABBAmoiBCABIAIQjQciCSAERg0MIAJBBGohBCAJIAEgAhCNByIBIAlGBEAgBCgCACECQQAhAQNAIAFBf0cEQCACIAFBf2oiAUEYbGoQ3gYMAQsLIAQgAkFoajYCAAwNCyAEKAIAIgkgAigCAGtBGG1BAkkNDCADIAlBaGoQgAcgBCgCACECQQAhAANAIABBf0cEQCACIABBf2oiAEEYbGoQ3gYMAQsLIAQgAkFoajYCACAFIAJBUGoQgAcgDEHjmQEgBRCPByAMQdCaARDzBhogCCAMKQIANwIAIAggDCgCCDYCCEEAIQADQCAAQQNHBEAgDCAAQQJ0akEANgIAIABBAWohAAwBCwsgAywACyICQQBIIQAgAygCACEJIAMoAgQhCiACQf8BcSECIAggAAR/IAkFIAMLIAAEfyAKBSACCxDhBhogByAIKQIANwIAIAcgCCgCCDYCCEEAIQADQCAAQQNHBEAgCCAAQQJ0akEANgIAIABBAWohAAwBCwsgB0GSmgEQ8wYaIBAgBykCADcCACAQIAcoAgg2AghBACEAA0AgAEEDRwRAIAcgAEECdGpBADYCACAAQQFqIQAMAQsLIAYgEBCDByAEKAIAQWhqIAYQhAcgBhDeBiAQEOsGIAcQ6wYgCBDrBiAMEOsGIAUQ6wYgAxDrBiABIQAMDAsCQAJAAkACQAJAIAQsAAFB0wBrDiICBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAEDBAsgA0IANwIAIANBADYCCCADQdOaAUHTmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwPCyADQgA3AgAgA0EANgIIIANB1poBQdaaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDA4LIANCADcCACADQQA2AgggA0HZmgFB2ZoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDQsgA0IANwIAIANBADYCCCADQYWaAUGFmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwMCwwLCwJAAkACQAJAAkACQCAELAABQckAaw4lAQUFAwUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUABQUCBAULIANCADcCACADQQA2AgggA0HdmgFB3ZoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDwsgA0IANwIAIANBADYCCCADQd+aAUHfmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwOCyADQgA3AgAgA0EANgIIIANB9ZkBQfWZARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDA0LIANCADcCACADQQA2AgggA0HimgFB4poBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDAsgAEECaiIEIAFHBEAgBCwAAEHfAEYEQCADQgA3AgAgA0EANgIIIANB5ZoBQeWaARCWBhCMByAAQQNqIgQgASADIAIQlAchASADEOsGIAEgBEcEQCABIQALDA0LCyAEIAEgAhCNByIBIARGDQsgAigCACACQQRqIgIoAgAiBEYNCyAGIARBaGoQgAcgBkEAQeOZARDyBhogBSAGKQIANwIAIAUgBigCCDYCCEEAIQADQCAAQQNHBEAgBiAAQQJ0akEANgIAIABBAWohAAwBCwsgBUHomgEQ8wYaIBEgBSkCADcCACARIAUoAgg2AghBACEAA0AgAEEDRwRAIAUgAEECdGpBADYCACAAQQFqIQAMAQsLIAMgERCDByACKAIAQWhqIAMQhAcgAxDeBiAREOsGIAUQ6wYgBhDrBiABIQAMCwsMCgsCQAJAAkACQAJAAkAgBCwAAUHhAGsOGAAFBQUBBQIFBQUFBQUFBQUFBQUDBQUABAULIAAgASACEJ4HIQAMDgsgA0IANwIAIANBADYCCCADQeyaAUHsmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwNCyADQgA3AgAgA0EANgIIIANB3ZoBQd2aARCWBhCMByAAQQJqIgQgASADIAIQlAchASADEOsGIAEgBEcEQCABIQALDAwLIANCADcCACADQQA2AgggA0HvmgFB75oBEJYGEIwHIABBAmoiBCABIAMgAhCUByEBIAMQ6wYgASAERwRAIAEhAAsMCwsgAEECaiIEIAEgAhCfByIBIARHBEAgASEACwwKCwwJCwJAAkACQAJAAkAgBCwAAUHSAGsOIQMEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAQQEAgQLIAAgASACEJsHIQAMDAsgA0IANwIAIANBADYCCCADQfGaAUHxmgEQlgYQjAcgAEECaiIEIAEgAyACEJMHIQEgAxDrBiABIARHBEAgASEACwwLCyADQgA3AgAgA0EANgIIIANB9JoBQfSaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDAoLIANCADcCACADQQA2AgggA0H2mgFB9poBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMCQsMCAsCQAJAAkACQAJAAkACQCAELAABQcwAaw4pAgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYBAAYGAwYGBAUGCyADQgA3AgAgA0EANgIIIANB+ZoBQfmaARCWBhCMByAAQQJqIgQgASADIAIQkwchASADEOsGIAEgBEcEQCABIQALDA0LIANCADcCACADQQA2AgggA0H9mgFB/ZoBEJYGEIwHIABBAmoiBCABIAMgAhCTByEBIAMQ6wYgASAERwRAIAEhAAsMDAsgA0IANwIAIANBADYCCCADQf+aAUH/mgEQlgYQjAcgAEECaiIEIAEg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BEAgACwAAEHMAEYEQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQQFqIgUsAABB1ABrDiYAFBQUFBQUFBQUFBMUBAIDERIQFAUICRQKCw4PFBQUBgcUFAEMDRQLDBYLIANCADcCACADQQA2AgggA0GLowFBi6MBEJYGEIwHIABBAmoiBCABIAMgAhDNByEBIAMQ6wYgASAERwRAIAEhAAsMFQsgACwAA0HFAEcNFAJAAkACQCAALAACQTBrDgIAAQILIANBk6MBEKkHIAJBBGoiBCgCACIBIAIoAghJBEAgASADEIUHIAQgBCgCAEEYajYCAAUgAiADEIYHCyADEN4GIABBBGohAAwWCyADQZmjARDOByACQQRqIgQoAgAiASACKAIISQRAIAEgAxCFByAEIAQoAgBBGGo2AgAFIAIgAxCGBwsgAxDeBiAAQQRqIQAMFQsMFAsgA0IANwIAIANBADYCCCADQZ6jAUGeowEQlgYQjAcgAEECaiIEIAEgAyACEM0HIQEgAxDrBiABIARHBEAgASEACwwTCyADQgA3AgAgA0EANgIIIANBo6MBQaOjARCWBhCMByAAQQJqIgQgASADIAIQzQchASADEOsGIAEgBEcEQCABIQALDBILIANCADcCACADQQA2AgggA0GvowFBr6MBEJYGEIwHIABBAmoiBCABIAMgAhDNByEBIAMQ6wYgASAERwRAIAEhAAsMEQsgA0IANwIAIANBADYCCCADQb2jAUG9owEQlgYQjAcgAEECaiIEIAEgAyACEM0HIQEgAxDrBiABIARHBEAgASEACwwQCyADQgA3AgAgA0EANgIIIANBw6MBQcOjARCWBhCMByAAQQJqIgQgASADIAIQzQchASADEOsGIAEgBEcEQCABIQALDA8LIANCADcCACADQQA2AgggA0HstQFB7LUBEJYGEIwHIABBAmoiBCABIAMgAhDNByEBIAMQ6wYgASAERwRAIAEhAAsMDgsgA0IANwIAIANBADYCCCADQdKjAUHSowEQlgYQjAcgAEECaiIEIAEgAyACEM0HIQEgAxDrBiABIARHBEAgASEACwwNCyADQgA3AgAgA0EANgIIIANB1KMBQdSjARCWBhCMByAAQQJqIgQgASADIAIQzQchASADEOsGIAEgBEcEQCAB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QQA6AAAgACALEOgGIARBADoAAAsgABCOByAAIAkpAgA3AgAgACAJKAIINgIIQQAhAANAIABBA0cEQCAJIABBAnRqQQA2AgAgAEEBaiEADAELCyAJEOsGIAMQ6wYgBRDrBiAHEOsGIAgQ6wYgASEADAILAkACQCAEIAEQ7QciAyAERgR/IAAhAUEDBSADIAEgAhDsBiIBIANGBH8gACEBQQAFIAIoAgAgAigCBCICRgR/IAAhAUEBBSACQWhqIQIgACwAAkH2AEYEfyACQQBB4acBEPIGGkEABSACQQBB86cBEPIGGkEACwsLCyICQQNxDgQAAQEAAQsgASEADAILIAJFBEAgASEACwsLIAYkBSAACw8AIAAoAgAgACwABDoAAAvHAQECfwJAIAAgAUcEQAJAAkACQAJAIAAsAABB6ABrDg8AAgICAgICAgICAgICAgECCyAAQQFqIgMgARCLByICIANGIAIgAUZyDQQgAkEBaiEBIAIsAABB3wBGBH8gAQUgAAsPCwwBCwwCCyAAQQFqIgMgARCLByICIANGIAIgAUZyRQRAIAIsAABB3wBGBEAgAkEBaiIDIAEQiwciAiADRiACIAFGckUEQCACQQFqIQEgAiwAAEHfAEYEQCABIQALCwsLCwsgAAsZACAALAAAQQFGBH9BAAUgAEEBOgAAQQELC0sBAn8jBSEDIwVBEGokBSADIgQgAigCADYCACAAIAEgAyAAKAIAKAIQQR9xQYgBahEFACIABEAgAiAEKAIANgIACyADJAUgAEEBcQscACAABH8gAEHI3ABBgN0AQQAQygZBAEcFQQALCwMAAQsrACAAQf8BcUEYdCAAQQh1Qf8BcUEQdHIgAEEQdUH/AXFBCHRyIABBGHZyCx0BAX8gAWciA0EgRgRAIAMgAGdqIQMLQQAkCSADC8MDAQN/IAJBgMAATgRAIAAgASACECkPCyAAIQQgACACaiEDIABBA3EgAUEDcUYEQANAIABBA3EEQCACRQRAIAQPCyAAIAEsAAA6AAAgAEEBaiEAIAFBAWohASACQQFrIQIMAQsLIANBfHEiAkFAaiEFA0AgACAFTARAIAAgASgCADYCACAAIAEoAgQ2AgQgACABKAIINgIIIAAgASgCDDYCDCAAIAEoAhA2AhAgACABKAIUNgIUIAAgASgCGDYCGCAAIAEoAhw2AhwgACABKAIgNgIgIAAgASgCJDYCJCAAIAEoAig2AiggACABKAIsNgIsIAAgASgCMDYCMCAAIAEoAjQ2AjQgACABKAI4NgI4IAAgASgCPDYCPCAAQUBrIQAgAUFAayEBDAELCwNAIAAgAkgEQCAAIAEoAgA2AgAgAEEEaiEAIAFBBGohAQwBCwsFIANBBGshAgNAIAAgAkgEQCAAIAEsAAA6AAAgACABLAABOgABIAAgASwAAjoAAiAAIAEsAAM6AAMgAEEEaiEAIAFBBGohAQwBCwsLA0AgACADSARAIAAgASwAADoAACAAQQFqIQAgAUEBaiEBDAELCyAEC2ABAX8gASAASCAAIAEgAmpIcQRAIAAhAyABIAJqIQEgACACaiEAA0AgAkEASgRAIAJBAWshAiAAQQFrIgAgAUEBayIBLAAAOgAADAELCyADIQAFIAAgASACEPQHGgsgAAuYAgEEfyAAIAJqIQQgAUH/AXEhASACQcMATgRAA0AgAEEDcQRAIAAgAToAACAAQQFqIQAMAQsLIARBfHEiBUFAaiEGIAEgAUEIdHIgAUEQdHIgAUEYdHIhAwNAIAAgBkwEQCAAIAM2AgAgACADNgIEIAAgAzYCCCAAIAM2AgwgACADNgIQIAAgAzYCFCAAIAM2AhggACADNgIcIAAgAzYCICAAIAM2AiQgACADNgIoIAAgAzYCLCAAIAM2AjAgACADNgI0IAAgAzYCOCAAIAM2AjwgAEFAayEADAELCwNAIAAgBUgEQCAAIAM2AgAgAEEEaiEADAELCwsDQCAAIARIBEAgACABOgAAIABBAWohAAwBCwsgBCACawtRAQF/IABBAEojBCgCACIBIABqIgAgAUhxIABBAEhyBEAQAxpBDBAHQX8PCyMEIAA2AgAgABACSgRAEAFFBEAjBCABNgIAQQwQB0F/DwsLIAELDwAgASAAQT9xQQhqEQQACxIAIAEgAiAAQT9xQcgAahEHAAsUACABIAIgAyAAQR9xQYgBahEFAAsWACABIAIgAyAEIABBD3FBqAFqEQgACxgAIAEgAiADIAQgBSAAQQdxQbgBahEJAAsaACABIAIgAyAEIAUgBiAAQR9xQcABahEKAAsRACABIABB/wBxQeQBahEAAAsSACABIAIgAEEfcUHkAmoRAgALFAAgASACIAMgAEEHcUGEA2oRAwALFgAgASACIAMgBCAAQQdxQYwDahELAAsYACABIAIgAyAEIAUgAEEDcUGUA2oRDQALGgAgASACIAMgBCAFIAYgAEEDcUGYA2oRDAALCABBABAAQQALCABBARAAQQALCABBAhAAQQALCABBAxAAQQALCABBBBAAQQALCABBBRAAQQALCABBBhAAQQALBgBBBxAACwYAQQgQAAsGAEEJEAALBgBBChAACwYAQQsQAAsGAEEMEAALBgBBDRAACwuWmQE0AEGACAsyoC4AADgrAAD4LgAAwC4AALAuAAAgKwAA+C4AAMAuAADgLgAA4CsAACArAAAgKwAA4C4AQcAICyLgLgAA4CsAACArAAAgKwAA4C4AAOArAAAgKwAAICsAAGArAEHwCAsS4C4AAOArAAAgKwAAICsAAJgrAEGQCQuVFrAuAAD4KwAAYCoAAGAqAACwLgAAICwAAGAqAABgKgAAAAAAAGs4BwANsgcAnPIHAHBkCABgrgoAsHELADCqDAATAAAADAAAAA0AAAABAAAABgAAAAEAAAABAAAAEwAAAA0AAAAOAAAAAQAAAAcAAAABAAAAAQAAABMAAAAPAAAAEAAAAAEAAAAGAAAAAQAAAAEAAAAUAAAAEAAAABEAAAABAAAABQAAAAgAAAACAAAAFAAAABEAAAASAAAAAQAAAAUAAAAIAAAAAgAAABQAAAARAAAAEgAAAAIAAAAFAAAAEAAAAAMAAAAVAAAAEQAAABMAAAACAAAABQAAABAAAAAEAAAAFQAAABIAAAATAAAAAwAAAAUAAAAQAAAABAAAABUAAAASAAAAFAAAAAMAAAAFAAAAEAAAAAUAAAAVAAAAEwAAABQAAAADAAAABQAAABAAAAAFAAAAFQAAABMAAAAVAAAABAAAAAUAAAAQAAAABQAAABYAAAAUAAAAFgAAAAQAAAAFAAAAEAAAAAUAAAAWAAAAFAAAABYAAAAFAAAABQAAABAAAAAFAAAAFgAAABUAAAAWAAAABAAAAAUAAAAgAAAABgAAABYAAAAVAAAAFgAAAAUAAAAFAAAAIAAAAAYAAAAWAAAAFgAAABYAAAAGAAAABQAAACAAAAAGAAAAFgAAABUAAAAWAAAABAAAAAUAAAAwAAAABwAAABcAAAAWAAAAFgAAAAQAAAAEAAAAMAAAAAcAAAAXAAAAFgAAABYAAAAFAAAAAwAAAEAAAAAHAAAAFwAAABcAAAAWAAAABwAAAAMAAACAAAAABwAAABkAAAAZAAAAFwAAAAcAAAADAAAAgAAAAAgAAAAaAAAAGgAAABgAAAAHAAAAAwAAAAABAAAIAAAAGwAAABsAAAAZAAAACQAAAAMAAAAAAgAACAAAABIAAAAMAAAADQAAAAEAAAAFAAAAAQAAAAEAAAASAAAADQAAAA4AAAABAAAABgAAAAEAAAABAAAAEgAAAA4AAAANAAAAAQAAAAUAAAAIAAAAAgAAABIAAAAQAAAADwAAAAEAAAAFAAAACAAAAAIAAAASAAAADwAAABEAAAABAAAABQAAAAgAAAADAAAAEgAAABAAAAARAAAABAAAAAUAAAAIAAAAAwAAABIAAAAQAAAAEQAAAAMAAAAFAAAACAAAAAQAAAASAAAAEQAAABEAAAAEAAAABAAAAAgAAAAEAAAAEgAAABEAAAARAAAABAAAAAQAAAAIAAAABQAAABIAAAARAAAAEQAAAAUAAAAEAAAACAAAAAUAAAASAAAAEQAAABEAAAAGAAAABAAAAAgAAAAFAAAAEgAAABIAAAARAAAABgAAAAQAAAAIAAAABQAAABIAAAASAAAAEQAAAAUAAAAEAAAACAAAAAYAAAASAAAAEwAAABEAAAAHAAAABAAAAAgAAAAGAAAAEgAAABIAAAASAAAABAAAAAQAAAAQAAAABwAAABIAAAASAAAAEgAAAAQAAAADAAAAEAAAAAcAAAASAAAAEwAAABIAAAAGAAAAAwAAACAAAAAHAAAAEgAAABMAAAASAAAACAAAAAMAAABAAAAABwAAABIAAAATAAAAEgAAAAkAAAADAAAAgAAAAAcAAAASAAAAEwAAABIAAAAKAAAAAwAAAAABAAAHAAAAEgAAABMAAAASAAAACwAAAAMAAAAAAgAACAAAABIAAAATAAAAEgAAAAwAAAADAAAAAAIAAAgAAAASAAAAEwAAABIAAAANAAAAAwAAAAACAAAIAAAAEQAAAAwAAAAMAAAAAQAAAAUAAAABAAAAAQAAABEAAAAMAAAADQAAAAEAAAAGAAAAAQAAAAEAAAARAAAADQAAABAAAAABAAAABQAAAAEAAAABAAAAEQAAABAAAAAQAAAAAgAAAAUAAAAIAAAAAgAAABEAAAANAAAADwAAAAMAAAAEAAAACAAAAAMAAAARAAAADwAAABEAAAAEAAAABAAAAAgAAAADAAAAEQAAABAAAAARAAAAAwAAAAQAAAAIAAAABAAAABEAAAAPAAAAEQAAAAQAAAAEAAAACAAAAAUAAAARAAAAEQAAABEAAAAEAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAABQAAAAQAAAAIAAAABQAAABEAAAARAAAAEQAAAAYAAAAEAAAACAAAAAUAAAARAAAAEQAAABEAAAAHAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAACAAAAAQAAAAIAAAABQAAABEAAAASAAAAEQAAAAYAAAAEAAAACAAAAAYAAAARAAAAEQAAABEAAAAHAAAAAwAAAAgAAAAHAAAAEQAAABEAAAARAAAABwAAAAMAAAAQAAAABwAAABEAAAASAAAAEQAAAAcAAAADAAAAIAAAAAcAAAARAAAAEgAAABEAAAAHAAAAAwAAAEAAAAAHAAAAEQAAABIAAAARAAAABwAAAAMAAAAAAQAABwAAABEAAAASAAAAEQAAAAgAAAADAAAAAAEAAAcAAAARAAAAEgAAABEAAAAJAAAAAwAAAAABAAAIAAAAEQAAABIAAAARAAAACgAAAAMAAAAAAQAACAAAABEAAAASAAAAEQAAAAsAAAADAAAAAAIAAAgAAAAOAAAADAAAAA0AAAABAAAABQAAAAEAAAABAAAADgAAAA4AAAAOAAAAAQAAAAYAAAABAAAAAQAAAA4AAAAOAAAADgAAAAEAAAAEAAAAAQAAAAEAAAAOAAAADgAAAA4AAAABAAAABAAAAAYAAAACAAAADgAAAA4AAAAOAAAABAAAAAQAAAAGAAAAAwAAAA4AAAAOAAAADgAAAAMAAAAEAAAABgAAAAQAAAAOAAAADgAAAA4AAAAEAAAABAAAAAYAAAAFAAAADgAAAA4AAAAOAAAABQAAAAQAAAAGAAAABQAAAA4AAAAOAAAADgAAAAYAAAAEAAAABgAAAAUAAAAOAAAADwAAAA4AAAAGAAAABAAAAAYAAAAGAAAADgAAAA8AAAAOAAAAAwAAAAMAAAAGAAAABwAAAA4AAAAPAAAADgAAAAYAAAADAAAACAAAAAcAAAAOAAAADwAAAA4AAAAGAAAAAwAAABAAAAAHAAAADgAAAA8AAAAOAAAABgAAAAMAAAAYAAAABwAAAA4AAAAPAAAADwAAAAYAAAADAAAAMAAAAAcAAAAOAAAADwAAAA8AAAAGAAAAAwAAAEAAAAAHAAAADgAAAA8AAAAPAAAABgAAAAMAAABgAAAABwAAAA4AAAAPAAAADwAAAAYAAAADAAAAgAAAAAcAAAAOAAAADwAAAA8AAAAGAAAAAwAAAAABAAAHAAAADgAAAA8AAAAPAAAABwAAAAMAAAAAAQAABwAAAA4AAAAPAAAADwAAAAgAAAADAAAAAAEAAAgAAAAOAAAADwAAAA8AAAAJAAAAAwAAAAABAAAIAAAADgAAAA8AAAAPAAAACgAAAAMAAAAAAQAACAAAAAAAAAABAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AQAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAEGxHwuHAgECAwQFBgcICQoLDA0ODxAQERESEhMTFBQUFBUVFRUWFhYWFhYWFhcXFxcXFxcXGBgYGBgYGBgYGBgYGBgYGAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICAhISIiIyMkJCQkJSUlJSYmJiYmJiYmJycnJycnJycoKCgoKCgoKCgoKCgoKCgoKSkpKSkpKSkpKSkpKSkpKSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqBAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AEHAIQuqAQEAAQABAAEAAQABAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP////////////8AAAAAAAABAAQAAwACAAIAAgACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP//////////////////AEH0IguyBAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAAIAAAAAQABAQYAAAAAAAAEAAAAABAAAAQAAAAAIAAABQEAAAAAAAAFAwAAAAAAAAUEAAAAAAAABQYAAAAAAAAFBwAAAAAAAAUJAAAAAAAABQoAAAAAAAAFDAAAAAAAAAYOAAAAAAABBRAAAAAAAAEFFAAAAAAAAQUWAAAAAAACBRwAAAAAAAMFIAAAAAAABAUwAAAAIAAGBUAAAAAAAAcFgAAAAAAACAYAAQAAAAAKBgAEAAAAAAwGABAAACAAAAQAAAAAAAAABAEAAAAAAAAFAgAAACAAAAUEAAAAAAAABQUAAAAgAAAFBwAAAAAAAAUIAAAAIAAABQoAAAAAAAAFCwAAAAAAAAYNAAAAIAABBRAAAAAAAAEFEgAAACAAAQUWAAAAAAACBRgAAAAgAAMFIAAAAAAAAwUoAAAAAAAGBEAAAAAQAAYEQAAAACAABwWAAAAAAAAJBgACAAAAAAsGAAgAADAAAAQAAAAAEAAABAEAAAAgAAAFAgAAACAAAAUDAAAAIAAABQUAAAAgAAAFBgAAACAAAAUIAAAAIAAABQkAAAAgAAAFCwAAACAAAAUMAAAAAAAABg8AAAAgAAEFEgAAACAAAQUUAAAAIAACBRgAAAAgAAIFHAAAACAAAwUoAAAAIAAEBTAAAAAAABAGAAABAAAADwYAgAAAAAAOBgBAAAAAAA0GACAAQbQnC4MEAQAAAAEAAAAFAAAADQAAAB0AAAA9AAAAfQAAAP0AAAD9AQAA/QMAAP0HAAD9DwAA/R8AAP0/AAD9fwAA/f8AAP3/AQD9/wMA/f8HAP3/DwD9/x8A/f8/AP3/fwD9//8A/f//Af3//wP9//8H/f//D/3//x/9//8//f//fwAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAAQABAQUAAAAAAAAFAAAAAAAABgQ9AAAAAAAJBf0BAAAAAA8F/X8AAAAAFQX9/x8AAAADBQUAAAAAAAcEfQAAAAAADAX9DwAAAAASBf3/AwAAABcF/f9/AAAABQUdAAAAAAAIBP0AAAAAAA4F/T8AAAAAFAX9/w8AAAACBQEAAAAQAAcEfQAAAAAACwX9BwAAAAARBf3/AQAAABYF/f8/AAAABAUNAAAAEAAIBP0AAAAAAA0F/R8AAAAAEwX9/wcAAAABBQEAAAAQAAYEPQAAAAAACgX9AwAAAAAQBf3/AAAAABwF/f//DwAAGwX9//8HAAAaBf3//wMAABkF/f//AQAAGAX9//8AQcArC4YEAQABAQYAAAAAAAAGAwAAAAAAAAQEAAAAIAAABQUAAAAAAAAFBgAAAAAAAAUIAAAAAAAABQkAAAAAAAAFCwAAAAAAAAYNAAAAAAAABhAAAAAAAAAGEwAAAAAAAAYWAAAAAAAABhkAAAAAAAAGHAAAAAAAAAYfAAAAAAAABiIAAAAAAAEGJQAAAAAAAQYpAAAAAAACBi8AAAAAAAMGOwAAAAAABAZTAAAAAAAHBoMAAAAAAAkGAwIAABAAAAQEAAAAAAAABAUAAAAgAAAFBgAAAAAAAAUHAAAAIAAABQkAAAAAAAAFCgAAAAAAAAYMAAAAAAAABg8AAAAAAAAGEgAAAAAAAAYVAAAAAAAABhgAAAAAAAAGGwAAAAAAAAYeAAAAAAAABiEAAAAAAAEGIwAAAAAAAQYnAAAAAAACBisAAAAAAAMGMwAAAAAABAZDAAAAAAAFBmMAAAAAAAgGAwEAACAAAAQEAAAAMAAABAQAAAAQAAAEBQAAACAAAAUHAAAAIAAABQgAAAAgAAAFCgAAACAAAAULAAAAAAAABg4AAAAAAAAGEQAAAAAAAAYUAAAAAAAABhcAAAAAAAAGGgAAAAAAAAYdAAAAAAAABiAAAAAAABAGAwABAAAADwYDgAAAAAAOBgNAAAAAAA0GAyAAAAAADAYDEAAAAAALBgMIAAAAAAoGAwQAQdQvC3ABAAAAAQAAAAUAAAANAAAAHQAAAD0AAAB9AAAA/QAAAP0BAAD9AwAA/QcAAP0PAAD9HwAA/T8AAP1/AAD9/wAA/f8BAP3/AwD9/wcA/f8PAP3/HwD9/z8A/f9/AP3//wD9//8B/f//A/3//wf9//8PAEHQMAvTAQMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQbAyC0gEAAMAAgACAAIAAgACAAIAAgACAAIAAgACAAEAAQABAAIAAgACAAIAAgACAAIAAgACAAMAAgABAAEAAQABAAEA//////////8AQYAzC6oBAQABAAEAAQABAAEAAgACAAIAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA/////////////wAAAAAAAAEABAADAAIAAgACAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEA//////////////////8AQfA0C00BAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEABBwDYLUQEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEABBpDcLbQEAAAADAAAABwAAAA8AAAAfAAAAPwAAAH8AAAD/AAAA/wEAAP8DAAD/BwAA/w8AAP8fAAD/PwAA/38AAP//AAD//wEA//8DAP//BwD//w8A//8fAP//PwD//38A////AP///wH///8DAQAAAAEAQaQ4C88BAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAiAAAAJAAAACYAAAAoAAAALAAAADAAAAA4AAAAQAAAAFAAAABgAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAEGEOgvUAQEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAASAAAAFAAAABYAAAAYAAAAHAAAACAAAAAoAAAAMAAAAEAAAACAAAAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAAAAAEABAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AEHgOwvtAgEAAQABAAEAAQABAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP////////////8AAAAAAAABAAQAAwACAAIAAgACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP//////////////////AAAAAAAACAAAAAgAAAAIAAAABwAAAAgAAAAJAAAACgAAAAsAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAEAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAAABAAAAAgEAAAABAAAAAQAAAAEAAAABAEHYPgsNAQAAAAEAAAACAAAAAgBB8D4LlQMBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAQAAAAIAAAADAAAABAAAAAcAAAAIAAAADwAAABAAAAAfAAAAIAAAAD8AAABAAAAAfwAAAIAAQZDCAAsYEQAKABEREQAAAAAFAAAAAAAACQAAAAALAEGwwgALIREADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQBB4cIACwELAEHqwgALGBEACgoREREACgAAAgAJCwAAAAkACwAACwBBm8MACwEMAEGnwwALFQwAAAAADAAAAAAJDAAAAAAADAAADABB1cMACwEOAEHhwwALFQ0AAAAEDQAAAAAJDgAAAAAADgAADgBBj8QACwEQAEGbxAALHg8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgBB0sQACw4SAAAAEhISAAAAAAAACQBBg8UACwELAEGPxQALFQoAAAAACgAAAAAJCwAAAAAACwAACwBBvcUACwEMAEHJxQALfgwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRlQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABB0MYAC/0cSWxsZWdhbCBieXRlIHNlcXVlbmNlAERvbWFpbiBlcnJvcgBSZXN1bHQgbm90IHJlcHJlc2VudGFibGUATm90IGEgdHR5AFBlcm1pc3Npb24gZGVuaWVkAE9wZXJhdGlvbiBub3QgcGVybWl0dGVkAE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkATm8gc3VjaCBwcm9jZXNzAEZpbGUgZXhpc3RzAFZhbHVlIHRvbyBsYXJnZSBmb3IgZGF0YSB0eXBlAE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlAE91dCBvZiBtZW1vcnkAUmVzb3VyY2UgYnVzeQBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbABSZXNvdXJjZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQBJbnZhbGlkIHNlZWsAQ3Jvc3MtZGV2aWNlIGxpbmsAUmVhZC1vbmx5IGZpbGUgc3lzdGVtAERpcmVjdG9yeSBub3QgZW1wdHkAQ29ubmVjdGlvbiByZXNldCBieSBwZWVyAE9wZXJhdGlvbiB0aW1lZCBvdXQAQ29ubmVjdGlvbiByZWZ1c2VkAEhvc3QgaXMgZG93bgBIb3N0IGlzIHVucmVhY2hhYmxlAEFkZHJlc3MgaW4gdXNlAEJyb2tlbiBwaXBlAEkvTyBlcnJvcgBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzAEJsb2NrIGRldmljZSByZXF1aXJlZABObyBzdWNoIGRldmljZQBOb3QgYSBkaXJlY3RvcnkASXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AAAAAAABkNQAApTcAAGQ1AABGOAAAjDUAALg3AABoKgAAAAAAAGQ1AACIOAAAjDUAAMs4AABoKgAAAAAAAGQ1AABSOQAAjDUAAI45AABoKgAAAAAAAGQ1AAATOgAAjDUAAE06AABoKgAAAAAAAGQ1AADdOgAAjDUAACI7AABoKgAAAAAAAGQ1AACrOwAAjDUAAOk7AABoKgAAAAAAAGQ1AABwPAAAZDUAABY9AAAINgAA6jwAAAAAAAABAAAAACsAAAAAAAAINgAAxjwAAAAAAAABAAAACCsAAAAAAADQNQAAOz0AAAAAAAAgKwAA0DUAAGA9AAABAAAAICsAAGQ1AAC+PQAAjDUAAKg9AABYKwAAAAAAANA1AADYPQAAAAAAAGArAADQNQAA7z0AAAEAAABgKwAAZDUAAB8+AACMNQAABz4AAJArAAAAAAAA0DUAADk+AAAAAAAAmCsAANA1AABSPgAAAQAAAJgrAABkNQAAbD4AANA1AAB3PgAAAAAAAMgrAADQNQAAgz4AAAEAAADIKwAAZDUAAJc+AADQNQAAsz4AAAAAAADwKwAA0DUAANA+AAABAAAA8CsAAGQ1AADuPgAA0DUAAAw/AAAAAAAAGCwAANA1AAArPwAAAQAAABgsAACMNQAAcD8AAGgsAAAAAAAA0DUAAEs/AAAAAAAAYCwAAOw1AABePwAAZDUAALY/AACMNQAACkAAAJgsAAAAAAAA0DUAAOU/AAAAAAAAkCwAAOw1AAD4PwAAZDUAAFBAAACMNQAApkAAAMgsAAAAAAAA0DUAAH9AAAAAAAAAwCwAAOw1AACTQAAAZDUAAO1AAACMNQAAREEAAPgsAAAAAAAA0DUAAB1BAAAAAAAA8CwAAOw1AAAxQQAAZDUAAItBAACMNQAA30EAABgtAAAAAAAAZDUAALtBAABkNQAAREIAAIw1AACtQgAAGC0AAAAAAABkNQAAc0IAAIw1AABOQwAAUC0AAAAAAABkNQAAKEMAAGQ1AAC1QwAAjDUAACJEAABQLQAAAAAAAGQ1AADkQwAACDYAAFtJAAAAAAAAAQAAABguAAAAAAAACDYAABxJAAAAAAAAAQAAABguAAAAAAAACDYAALdIAAAAAAAAAQAAABguAAAAAAAAZDUAAJhIAABkNQAAeUgAAGQ1AABaSAAAZDUAADtIAABkNQAAHEgAAGQ1AAD9RwAAZDUAAN5HAABkNQAAv0cAAGQ1AACgRwAAZDUAAIFHAABkNQAAYkcAAGQ1AABDRwAAZDUAAPZIAACMNQAA6UkAADAuAAAAAAAAZDUAAJZKAACMNQAA9koAAEguAAAAAAAAjDUAAKNKAABYLgAAAAAAAGQ1AADESgAAjDUAANFKAAA4LgAAAAAAAIw1AAD8SwAASC4AAAAAAACMNQAA2EsAAHAuAAAAAAAAjDUAAB5MAABILgAAAAAAALQ1AABGTAAAtDUAAEhMAAC0NQAAS0wAALQ1AABNTAAAtDUAAE9MAAC0NQAAUUwAALQ1AABTTAAAtDUAAFVMAAC0NQAAV0wAALQ1AABZTAAAtDUAANRRAAC0NQAAW0wAALQ1AABdTAAAtDUAAF9MAACMNQAAYUwAAEguAAAAAAAAjDUAAIZMAAA4LgAAAAAAAGAqAAD4LgAA6C4AAKAuAABgKgAAYCoAAPguAAD4LgAA+C4AAGAqAACgLgAAYCoAAAAAAABwKgAAAQAAAAIAAAABAAAAAQAAAAMAAAAEAAAAAgAAAAEAAAACAAAAAAAAAIgqAAABAAAABQAAAAMAAAADAAAABgAAAAcAAAAEAAAAAgAAAAQAAAAAAAAAoCoAAAEAAAAIAAAABQAAAAUAAAAJAAAACgAAAAYAAAADAAAABgAAAAAAAAC4KgAAAQAAAAsAAAAHAAAABwAAAAwAAAANAAAACAAAAAQAAAAIAAAAAAAAANAqAAABAAAADgAAAAkAAAAJAAAADwAAABAAAAAKAAAABQAAAAoAAAAAAAAA6CoAAAEAAAARAAAACwAAAAsAAAASAAAAEwAAAAwAAAAGAAAADAAAADgrAACgLgAAOCsAAMAuAAD4LgAASCsAAGAqAAAgKwAA+C4AAKAuAACgLgAAICsAAGAqAABgKgAAICsAAHArAABgKgAA4C4AAKgrAABgKgAA0CsAAOAuAADgKwAA+C4AAOAuAADgKwAAICsAAPgrAACwLgAA+CsAAOAuAACwLgAA+CsAAGArAACwLgAA+CsAAGAqAAAgLAAAsC4AACAsAACwLgAAICwAAJgrAACwLgAAICwAAGAqAAAAAAAAQCwAABQAAAAVAAAADQAAAA0AAAAWAAAAFwAAAA4AAAAHAAAADgAAAAAAAABwLAAAGAAAABkAAAAPAAAADwAAABoAAAAbAAAAEAAAAAgAAAAQAAAAAAAAAKAsAAAcAAAAHQAAABEAAAARAAAAHgAAAB8AAAASAAAACQAAABIAAAAAAAAA0CwAACAAAAAhAAAAEwAAABMAAAAiAAAAIwAAABQAAAAKAAAAFABB1eMAC7ABLQAAJAAAACUAAAAVAAAAFQAAACYAAAAnAAAACwAAAAwAAAAWAAAAAAAAACAtAAAkAAAAKAAAABcAAAAWAAAAKQAAACoAAAANAAAADgAAABgAAAAAAAAAOC0AACsAAAAsAAAAGQAAABcAAAAtAAAALgAAAA8AAAAQAAAAGgAAAAAAAABYLQAAKwAAAC8AAAAbAAAAGAAAADAAAAAxAAAAEQAAABIAAAAcAAAAAQAAAAEAQZDlAAtFAQAAAAEAAAAEAAAACAAAABMAAAAZAAAAAAAAAAEAAAACAAAAAAAAAAMAAAAEAAAAAAAAAAUAAAAGAAAAAAAAANQyAAAFAEHg5QALAR0AQfjlAAsOAQAAAAIAAABIVAAAAAQAQZDmAAsBAQBBn+YACwUK/////wBB0OYACwnUMgAAWDMAAAUAQeTmAAsBHQBB/OYACwoDAAAAAgAAAOxaAEGU5wALAQIAQaPnAAsF//////8AQZDpAAsCsFoAQezpAAsBBABBk+oACwX//////wBByOoAC+09IC4AADIAAAAzAAAAHgAAAAEAAAAAAAAAOC4AADQAAAA1AAAANgAAADcAAAAFAAAAAQAAAAEAAAABAAAAAAAAAGAuAAA0AAAAOAAAADYAAAA3AAAABQAAAAIAAAACAAAAAgAAAAAAAACQLgAANAAAADkAAAA2AAAANwAAAAYAAAAAAAAAgC4AADQAAAA6AAAANgAAADcAAAAHAAAAAAAAABAvAAA0AAAAOwAAADYAAAA3AAAACAAAAAAAAAAgLwAANAAAADwAAAA2AAAANwAAAAUAAAADAAAAAwAAAAMAAABkdW1teQByYgBsZW5ndGgAYnVmZmVyAGNvbnN0cnVjdG9yAHNldABIRUFQVTgAVmVjdG9yVTgAY2xvbmVUb1ZlY3RvcgBjbG9uZUFzVHlwZWRBcnJheQB0b1R5cGVkQXJyYXlWaWV3AFpzdGRDb21wcmVzc2lvbkRpY3QAY3JlYXRlQ29tcHJlc3Npb25EaWN0AFpzdGREZWNvbXByZXNzaW9uRGljdABjcmVhdGVEZWNvbXByZXNzaW9uRGljdABac3RkQ29kZWMAY29tcHJlc3NCb3VuZABjb250ZW50U2l6ZQBjb21wcmVzcwBkZWNvbXByZXNzAGNvbXByZXNzVXNpbmdEaWN0AGRlY29tcHJlc3NVc2luZ0RpY3QAWnN0ZENvbXByZXNzU3RyZWFtQmluZGluZwBiZWdpbgBiZWdpblVzaW5nRGljdAB0cmFuc2Zvcm0AZmx1c2gAZW5kAFpzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZwBOMTBlbXNjcmlwdGVuM3ZhbEUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4yNVpzdGRDb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0UzJF8wTlNfOWFsbG9jYXRvcklTNV9FRUZ2UktOU182dmVjdG9ySWhOUzZfSWhFRUVFRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UktOU182dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFRUVFAFpOMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nOVRyYW5zZm9ybUVOMTBlbXNjcmlwdGVuM3ZhbEVTMV9FMyRfMABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfMU5TXzlhbGxvY2F0b3JJUzVfRUVGdlJLTlNfNnZlY3RvckloTlM2X0loRUVFRUVFRQBaTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfMQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzNFbmRFTjEwZW1zY3JpcHRlbjN2YWxFRTMkXzJOU185YWxsb2NhdG9ySVM1X0VFRnZSS05TXzZ2ZWN0b3JJaE5TNl9JaEVFRUVFRUUAWk4yNVpzdGRDb21wcmVzc1N0cmVhbUJpbmRpbmczRW5kRU4xMGVtc2NyaXB0ZW4zdmFsRUUzJF8yAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0UzJF8zTlNfOWFsbG9jYXRvcklTNV9FRUZ2UktOU182dmVjdG9ySWhOUzZfSWhFRUVFRUVFAFpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVMxX0UzJF8zAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc1Rmx1c2hFTjEwZW1zY3JpcHRlbjN2YWxFRTMkXzROU185YWxsb2NhdG9ySVM1X0VFRnZSS05TXzZ2ZWN0b3JJaE5TNl9JaEVFRUVFRUUAWk4yN1pzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nM0VuZEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNU5TXzlhbGxvY2F0b3JJUzVfRUVGdlJLTlNfNnZlY3RvckloTlM2X0loRUVFRUVFRQBaTjI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nM0VuZEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNQBwdXNoX2JhY2sAcmVzaXplAHNpemUAZ2V0AE5TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAE5TdDNfXzIxM19fdmVjdG9yX2Jhc2VJaE5TXzlhbGxvY2F0b3JJaEVFRUUATlN0M19fMjIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUVFAFBOU3QzX18yNnZlY3RvckloTlNfOWFsbG9jYXRvckloRUVFRQBQS05TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAGlpAHYAdmkAdmlpaQB2aWlpaQBpaWkAaWlpaQBpaWlpaQAxOVpzdGRDb21wcmVzc2lvbkRpY3QAOFJlc291cmNlSTEyWlNURF9DRGljdF9zRQBQMTlac3RkQ29tcHJlc3Npb25EaWN0AFBLMTlac3RkQ29tcHJlc3Npb25EaWN0ADIxWnN0ZERlY29tcHJlc3Npb25EaWN0ADhSZXNvdXJjZUkxMlpTVERfRERpY3Rfc0UAUDIxWnN0ZERlY29tcHJlc3Npb25EaWN0AFBLMjFac3RkRGVjb21wcmVzc2lvbkRpY3QAOVpzdGRDb2RlYwBQOVpzdGRDb2RlYwBQSzlac3RkQ29kZWMAaWlpaWlpADI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZwBQMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nAFBLMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nADI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nAFAyN1pzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZwBQSzI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nAFBGdlAxMVpTVERfQ0N0eF9zRQBGdlAxMVpTVERfQ0N0eF9zRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZQMTFaU1REX0NDdHhfc0VOU185YWxsb2NhdG9ySVM1X0VFUzRfRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZQMTFaU1REX0NDdHhfc0VFRQBQRnZQMTFaU1REX0RDdHhfc0UARnZQMTFaU1REX0RDdHhfc0UATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2UDExWlNURF9EQ3R4X3NFTlNfOWFsbG9jYXRvcklTNV9FRVM0X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UDExWlNURF9EQ3R4X3NFRUUAUEZ2UDEyWlNURF9DRGljdF9zRQBGdlAxMlpTVERfQ0RpY3Rfc0UATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2UDEyWlNURF9DRGljdF9zRU5TXzlhbGxvY2F0b3JJUzVfRUVTNF9FRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlAxMlpTVERfQ0RpY3Rfc0VFRQBQRnZQMTJaU1REX0REaWN0X3NFAEZ2UDEyWlNURF9ERGljdF9zRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZQMTJaU1REX0REaWN0X3NFTlNfOWFsbG9jYXRvcklTNV9FRVM0X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UDEyWlNURF9ERGljdF9zRUVFAFpOMThac3RkQ29tcHJlc3NTdHJlYW01QmVnaW5FaUUzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMThac3RkQ29tcHJlc3NTdHJlYW01QmVnaW5FaUUzJF8wTlNfOWFsbG9jYXRvcklTM19FRUZtUDExWlNURF9DQ3R4X3NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRm1QMTFaU1REX0NDdHhfc0VFRQBaTjE4WnN0ZENvbXByZXNzU3RyZWFtNUJlZ2luRVJLMTlac3RkQ29tcHJlc3Npb25EaWN0RTMkXzEATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4xOFpzdGRDb21wcmVzc1N0cmVhbTVCZWdpbkVSSzE5WnN0ZENvbXByZXNzaW9uRGljdEUzJF8xTlNfOWFsbG9jYXRvcklTNl9FRUZtUDExWlNURF9DQ3R4X3NFRUUAWk4yMFpzdGREZWNvbXByZXNzU3RyZWFtNUJlZ2luRXZFMyRfMgBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjIwWnN0ZERlY29tcHJlc3NTdHJlYW01QmVnaW5FdkUzJF8yTlNfOWFsbG9jYXRvcklTM19FRUZtUDExWlNURF9EQ3R4X3NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRm1QMTFaU1REX0RDdHhfc0VFRQBaTjIwWnN0ZERlY29tcHJlc3NTdHJlYW01QmVnaW5FUksyMVpzdGREZWNvbXByZXNzaW9uRGljdEUzJF8zAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjBac3RkRGVjb21wcmVzc1N0cmVhbTVCZWdpbkVSSzIxWnN0ZERlY29tcHJlc3Npb25EaWN0RTMkXzNOU185YWxsb2NhdG9ySVM2X0VFRm1QMTFaU1REX0RDdHhfc0VFRQBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUATlN0M19fMjEyYmFzaWNfc3RyaW5nSWhOU18xMWNoYXJfdHJhaXRzSWhFRU5TXzlhbGxvY2F0b3JJaEVFRUUATlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOAHJ3YQBzdGQ6OmJhZF9mdW5jdGlvbl9jYWxsAE5TdDNfXzIxN2JhZF9mdW5jdGlvbl9jYWxsRQB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzOiAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZm9yZWlnbiBleGNlcHRpb24AdGVybWluYXRpbmcAdW5jYXVnaHQAU3Q5ZXhjZXB0aW9uAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAFN0OXR5cGVfaW5mbwBOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAHB0aHJlYWRfb25jZSBmYWlsdXJlIGluIF9fY3hhX2dldF9nbG9iYWxzX2Zhc3QoKQBjYW5ub3QgY3JlYXRlIHB0aHJlYWQga2V5IGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAGNhbm5vdCB6ZXJvIG91dCB0aHJlYWQgdmFsdWUgZm9yIF9fY3hhX2dldF9nbG9iYWxzKCkAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAE4xMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fcGJhc2VfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMjNfX2Z1bmRhbWVudGFsX3R5cGVfaW5mb0UAdgBEbgBiAGMAaABhAHMAdABpAGoAbQBmAGQATjEwX19jeHhhYml2MTIwX19mdW5jdGlvbl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0UAIGNvbnN0ACB2b2xhdGlsZQAgcmVzdHJpY3QAIGNvbXBsZXgAIGltYWdpbmFyeQAgWwAgKAApACgAJiYAb2JqY19vYmplY3Q8ACoAJgBvYmpjcHJvdG8AIAA8AD4AIHZlY3RvclsAXQBwaXhlbCB2ZWN0b3JbACY9AD0ALAB+ADo6AGRlbGV0ZVtdIABkZWxldGUgAC8ALz0AXgBePQA9PQA+PQApWwA8PQA8PAA8PD0ALQAtPQAqPQAtLQApLS0AIT0AIQB8fAB8AHw9AC0+KgArACs9ACsrACkrKwApID8gKAApIDogKAAlACU9AD4+AD4+PQB0aHJvdwB0aHJvdyAAdHlwZWlkKABzaXplb2YuLi4oACwgAHNpemVvZiAoAHN0YXRpY19jYXN0PAA+KAByZWludGVycHJldF9jYXN0PAAtPgBub2V4Y2VwdCAoAFtdIAApIAAuAC4qAHN0ZDo6AG9wZXJhdG9yJiYAb3BlcmF0b3ImAG9wZXJhdG9yJj0Ab3BlcmF0b3I9AG9wZXJhdG9yKCkAb3BlcmF0b3IsAG9wZXJhdG9yfgBvcGVyYXRvciAAb3BlcmF0b3IgZGVsZXRlW10Ab3BlcmF0b3IqAG9wZXJhdG9yLwBvcGVyYXRvci89AG9wZXJhdG9yXgBvcGVyYXRvcl49AG9wZXJhdG9yPT0Ab3BlcmF0b3I+PQBvcGVyYXRvcj4Ab3BlcmF0b3JbXQBvcGVyYXRvcjw9AG9wZXJhdG9yIiIgAG9wZXJhdG9yPDwAb3BlcmF0b3I8PD0Ab3BlcmF0b3I8AG9wZXJhdG9yLQBvcGVyYXRvci09AG9wZXJhdG9yKj0Ab3BlcmF0b3ItLQBvcGVyYXRvciBuZXdbXQBvcGVyYXRvciE9AG9wZXJhdG9yIQBvcGVyYXRvciBuZXcAb3BlcmF0b3J8fABvcGVyYXRvcnwAb3BlcmF0b3J8PQBvcGVyYXRvci0+KgBvcGVyYXRvcisAb3BlcmF0b3IrPQBvcGVyYXRvcisrAG9wZXJhdG9yLT4Ab3BlcmF0b3I/AG9wZXJhdG9yJQBvcGVyYXRvciU9AG9wZXJhdG9yPj4Ab3BlcmF0b3I+Pj0Ab3BlcmF0b3IgZGVsZXRlACd1bm5hbWVkACdsYW1iZGEnKABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+AGJhc2ljX3N0cmluZwBzdGQ6OmlzdHJlYW0Ac3RkOjpiYXNpY19pc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBiYXNpY19pc3RyZWFtAHN0ZDo6b3N0cmVhbQBzdGQ6OmJhc2ljX29zdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+AGJhc2ljX29zdHJlYW0Ac3RkOjppb3N0cmVhbQBzdGQ6OmJhc2ljX2lvc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBiYXNpY19pb3N0cmVhbQBkeW5hbWljX2Nhc3Q8ACkoAGNvbnN0X2Nhc3Q8AGFsaWdub2YgKABmcAB3Y2hhcl90AGZhbHNlAHRydWUAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AHUAbAB1bABsbAB1bGwAX19pbnQxMjgAdW5zaWduZWQgX19pbnQxMjgAJUxhTAAlYQAlYWYAZGVjbHR5cGUoAHN0ZDo6YWxsb2NhdG9yAHN0ZDo6YmFzaWNfc3RyaW5nADo6c3RyaW5nIGxpdGVyYWwAc3RkAF9HTE9CQUxfX04AKGFub255bW91cyBuYW1lc3BhY2UpACA+AFRfAGlkADo6KgAgJgAgJiYAIFtdAHZvaWQAYm9vbABpbnQAdW5zaWduZWQgaW50AGxvbmcAdW5zaWduZWQgbG9uZwBsb25nIGxvbmcAZmxvYXQAbG9uZyBkb3VibGUAX19mbG9hdDEyOAAuLi4AZGVjaW1hbDY0AGRlY2ltYWwxMjgAZGVjaW1hbDMyAGRlY2ltYWwxNgBjaGFyMzJfdABjaGFyMTZfdABhdXRvAHN0ZDo6bnVsbHB0cl90AGRvdWJsZQB1bnNpZ25lZCBsb25nIGxvbmcAX2Jsb2NrX2ludm9rZQBpbnZvY2F0aW9uIGZ1bmN0aW9uIGZvciBibG9jayBpbiAAdnRhYmxlIGZvciAAVlRUIGZvciAAdHlwZWluZm8gZm9yIAB0eXBlaW5mbyBuYW1lIGZvciAAY292YXJpYW50IHJldHVybiB0aHVuayB0byAAY29uc3RydWN0aW9uIHZ0YWJsZSBmb3IgAC1pbi0AdmlydHVhbCB0aHVuayB0byAAbm9uLXZpcnR1YWwgdGh1bmsgdG8gAGd1YXJkIHZhcmlhYmxlIGZvciAAcmVmZXJlbmNlIHRlbXBvcmFyeSBmb3Ig\";var asmjsCodeFile=\"\";if(!isDataURI(wasmTextFile)){wasmTextFile=locateFile(wasmTextFile);}if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile);}if(!isDataURI(asmjsCodeFile)){asmjsCodeFile=locateFile(asmjsCodeFile);}var wasmPageSize=64*1024;var info={\"global\":null,\"env\":null,\"asm2wasm\":asm2wasmImports,\"parent\":Module};var exports=null;function mergeMemory(newBuffer){var oldBuffer=Module[\"buffer\"];if(newBuffer.byteLength<oldBuffer.byteLength){err(\"the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here\");}var oldView=new Int8Array(oldBuffer);var newView=new Int8Array(newBuffer);newView.set(oldView);updateGlobalBuffer(newBuffer);updateGlobalBufferViews();}function fixImports(imports){return imports;}function getBinary(){try{if(Module[\"wasmBinary\"]){return new Uint8Array(Module[\"wasmBinary\"]);}var binary=tryParseAsDataURI(wasmBinaryFile);if(binary){return binary;}if(Module[\"readBinary\"]){return Module[\"readBinary\"](wasmBinaryFile);}else{throw\"both async and sync fetching of the wasm failed\";}}catch(err){abort(err);}}function getBinaryPromise(){if(!Module[\"wasmBinary\"]&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch===\"function\"){return fetch(wasmBinaryFile,{credentials:\"same-origin\"}).then(function(response){if(!response[\"ok\"]){throw\"failed to load wasm binary file at '\"+wasmBinaryFile+\"'\";}return response[\"arrayBuffer\"]();}).catch(function(){return getBinary();});}return new Promise(function(resolve,reject){resolve(getBinary());});}function doNativeWasm(global,env,providedBuffer){if((typeof WebAssembly==='undefined'?'undefined':_typeof(WebAssembly))!==\"object\"){err(\"no native wasm support detected\");return false;}if(!(Module[\"wasmMemory\"]instanceof WebAssembly.Memory)){err(\"no native wasm Memory in use\");return false;}env[\"memory\"]=Module[\"wasmMemory\"];info[\"global\"]={\"NaN\":NaN,\"Infinity\":Infinity};info[\"global.Math\"]=Math;info[\"env\"]=env;function receiveInstance(instance,module){exports=instance.exports;if(exports.memory)mergeMemory(exports.memory);Module[\"asm\"]=exports;Module[\"usingWasm\"]=true;removeRunDependency(\"wasm-instantiate\");}addRunDependency(\"wasm-instantiate\");if(Module[\"instantiateWasm\"]){try{return Module[\"instantiateWasm\"](info,receiveInstance);}catch(e){err(\"Module.instantiateWasm callback failed with error: \"+e);return false;}}function receiveInstantiatedSource(output){receiveInstance(output[\"instance\"],output[\"module\"]);}function instantiateArrayBuffer(receiver){getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info);}).then(receiver).catch(function(reason){err(\"failed to asynchronously prepare wasm: \"+reason);abort(reason);});}if(!Module[\"wasmBinary\"]&&typeof WebAssembly.instantiateStreaming===\"function\"&&!isDataURI(wasmBinaryFile)&&typeof fetch===\"function\"){WebAssembly.instantiateStreaming(fetch(wasmBinaryFile,{credentials:\"same-origin\"}),info).then(receiveInstantiatedSource).catch(function(reason){err(\"wasm streaming compile failed: \"+reason);err(\"falling back to ArrayBuffer instantiation\");instantiateArrayBuffer(receiveInstantiatedSource);});}else{instantiateArrayBuffer(receiveInstantiatedSource);}return{};}Module[\"asmPreload\"]=Module[\"asm\"];var asmjsReallocBuffer=Module[\"reallocBuffer\"];var wasmReallocBuffer=function wasmReallocBuffer(size){var PAGE_MULTIPLE=Module[\"usingWasm\"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;size=alignUp(size,PAGE_MULTIPLE);var old=Module[\"buffer\"];var oldSize=old.byteLength;if(Module[\"usingWasm\"]){try{var result=Module[\"wasmMemory\"].grow((size-oldSize)/wasmPageSize);if(result!==(-1|0)){return Module[\"buffer\"]=Module[\"wasmMemory\"].buffer;}else{return null;}}catch(e){return null;}}};Module[\"reallocBuffer\"]=function(size){if(finalMethod===\"asmjs\"){return asmjsReallocBuffer(size);}else{return wasmReallocBuffer(size);}};var finalMethod=\"\";Module[\"asm\"]=function(global,env,providedBuffer){env=fixImports(env);if(!env[\"table\"]){var TABLE_SIZE=Module[\"wasmTableSize\"];if(TABLE_SIZE===undefined)TABLE_SIZE=1024;var MAX_TABLE_SIZE=Module[\"wasmMaxTableSize\"];if((typeof WebAssembly==='undefined'?'undefined':_typeof(WebAssembly))===\"object\"&&typeof WebAssembly.Table===\"function\"){if(MAX_TABLE_SIZE!==undefined){env[\"table\"]=new WebAssembly.Table({\"initial\":TABLE_SIZE,\"maximum\":MAX_TABLE_SIZE,\"element\":\"anyfunc\"});}else{env[\"table\"]=new WebAssembly.Table({\"initial\":TABLE_SIZE,element:\"anyfunc\"});}}else{env[\"table\"]=new Array(TABLE_SIZE);}Module[\"wasmTable\"]=env[\"table\"];}if(!env[\"memoryBase\"]){env[\"memoryBase\"]=Module[\"STATIC_BASE\"];}if(!env[\"tableBase\"]){env[\"tableBase\"]=0;}var exports;exports=doNativeWasm(global,env,providedBuffer);assert(exports,\"no binaryen method succeeded.\");return exports;};}integrateWasmJS();STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+23280;__ATINIT__.push({func:function func(){__GLOBAL__sub_I_zstd_binding_cc();}},{func:function func(){__GLOBAL__sub_I_bind_cpp();}});var STATIC_BUMP=23280;Module[\"STATIC_BASE\"]=STATIC_BASE;Module[\"STATIC_BUMP\"]=STATIC_BUMP;var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___cxa_allocate_exception(size){return _malloc(size);}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception;}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function deAdjust(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var key in EXCEPTIONS.infos){var ptr=+key;var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr;}}return adjusted;},addRef:function addRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++;},decRef:function decRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module[\"dynCall_vi\"](info.destructor,ptr);}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr);}},clearRef:function clearRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0;}};function ___cxa_begin_catch(ptr){var info=EXCEPTIONS.infos[ptr];if(info&&!info.caught){info.caught=true;__ZSt18uncaught_exceptionv.uncaught_exception--;}if(info)info.rethrown=false;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr;}function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr;}throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\";}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0;}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0;}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module[\"___cxa_is_pointer_type\"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i<typeArray.length;i++){if(typeArray[i]&&Module[\"___cxa_can_catch\"](typeArray[i],throwntype,thrown)){thrown=HEAP32[thrown>>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0;}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0;}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};EXCEPTIONS.last=ptr;if(!(\"uncaught_exception\"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1;}else{__ZSt18uncaught_exceptionv.uncaught_exception++;}throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\";}function ___gxx_personality_v0(){}function ___lock(){}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var ERRNO_MESSAGES={0:\"Success\",1:\"Not super-user\",2:\"No such file or directory\",3:\"No such process\",4:\"Interrupted system call\",5:\"I/O error\",6:\"No such device or address\",7:\"Arg list too long\",8:\"Exec format error\",9:\"Bad file number\",10:\"No children\",11:\"No more processes\",12:\"Not enough core\",13:\"Permission denied\",14:\"Bad address\",15:\"Block device required\",16:\"Mount device busy\",17:\"File exists\",18:\"Cross-device link\",19:\"No such device\",20:\"Not a directory\",21:\"Is a directory\",22:\"Invalid argument\",23:\"Too many open files in system\",24:\"Too many open files\",25:\"Not a typewriter\",26:\"Text file busy\",27:\"File too large\",28:\"No space left on device\",29:\"Illegal seek\",30:\"Read only file system\",31:\"Too many links\",32:\"Broken pipe\",33:\"Math arg out of domain of func\",34:\"Math result not representable\",35:\"File locking deadlock error\",36:\"File or path name too long\",37:\"No record locks available\",38:\"Function not implemented\",39:\"Directory not empty\",40:\"Too many symbolic links\",42:\"No message of desired type\",43:\"Identifier removed\",44:\"Channel number out of range\",45:\"Level 2 not synchronized\",46:\"Level 3 halted\",47:\"Level 3 reset\",48:\"Link number out of range\",49:\"Protocol driver not attached\",50:\"No CSI structure available\",51:\"Level 2 halted\",52:\"Invalid exchange\",53:\"Invalid request descriptor\",54:\"Exchange full\",55:\"No anode\",56:\"Invalid request code\",57:\"Invalid slot\",59:\"Bad font file fmt\",60:\"Device not a stream\",61:\"No data (for no delay io)\",62:\"Timer expired\",63:\"Out of streams resources\",64:\"Machine is not on the network\",65:\"Package not installed\",66:\"The object is remote\",67:\"The link has been severed\",68:\"Advertise error\",69:\"Srmount error\",70:\"Communication error on send\",71:\"Protocol error\",72:\"Multihop attempted\",73:\"Cross mount point (not really error)\",74:\"Trying to read unreadable message\",75:\"Value too large for defined data type\",76:\"Given log. name not unique\",77:\"f.d. invalid for this operation\",78:\"Remote address changed\",79:\"Can   access a needed shared lib\",80:\"Accessing a corrupted shared lib\",81:\".lib section in a.out corrupted\",82:\"Attempting to link in too many libs\",83:\"Attempting to exec a shared library\",84:\"Illegal byte sequence\",86:\"Streams pipe error\",87:\"Too many users\",88:\"Socket operation on non-socket\",89:\"Destination address required\",90:\"Message too long\",91:\"Protocol wrong type for socket\",92:\"Protocol not available\",93:\"Unknown protocol\",94:\"Socket type not supported\",95:\"Not supported\",96:\"Protocol family not supported\",97:\"Address family not supported by protocol family\",98:\"Address already in use\",99:\"Address not available\",100:\"Network interface is not configured\",101:\"Network is unreachable\",102:\"Connection reset by network\",103:\"Connection aborted\",104:\"Connection reset by peer\",105:\"No buffer space available\",106:\"Socket is already connected\",107:\"Socket is not connected\",108:\"Can't send after socket shutdown\",109:\"Too many references\",110:\"Connection timed out\",111:\"Connection refused\",112:\"Host is down\",113:\"Host is unreachable\",114:\"Socket already connected\",115:\"Connection already in progress\",116:\"Stale file handle\",122:\"Quota exceeded\",123:\"No medium (in tape drive)\",125:\"Operation canceled\",130:\"Previous owner died\",131:\"State not recoverable\"};function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value;}var PATH={splitPath:function splitPath(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1);},normalizeArray:function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1);}else if(last===\"..\"){parts.splice(i,1);up++;}else if(up){parts.splice(i,1);up--;}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\");}}return parts;},normalize:function normalize(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p;}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\";}if(path&&trailingSlash){path+=\"/\";}return(isAbsolute?\"/\":\"\")+path;},dirname:function dirname(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\";}if(dir){dir=dir.substr(0,dir.length-1);}return root+dir;},basename:function basename(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1);},extname:function extname(path){return PATH.splitPath(path)[3];},join:function join(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"));},join2:function join2(l,r){return PATH.normalize(l+\"/\"+r);},resolve:function resolve(){var resolvedPath=\"\",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!==\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\");}else if(!path){return\"\";}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=path.charAt(0)===\"/\";}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter(function(p){return!!p;}),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\";},relative:function relative(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break;}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break;}if(start>end)return[];return arr.slice(start,end-start+1);}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break;}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\");}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\");}};var TTY={ttys:[],init:function init(){},shutdown:function shutdown(){},register:function register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops);},stream_ops:{open:function open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}stream.tty=tty;stream.seekable=false;},close:function close(stream){stream.tty.ops.flush(stream.tty);},flush:function flush(stream){stream.tty.ops.flush(stream.tty);},read:function read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO);}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result;}if(bytesRead){stream.node.timestamp=Date.now();}return bytesRead;},write:function write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO);}for(var i=0;i<length;i++){try{stream.tty.ops.put_char(stream.tty,buffer[offset+i]);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}}if(length){stream.node.timestamp=Date.now();}return i;}},default_tty_ops:{get_char:function get_char(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!=\"win32\";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync(\"/dev/stdin\",\"r\");usingDevice=true;}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null);}catch(e){if(e.toString().indexOf(\"EOF\")!=-1)bytesRead=0;else throw e;}if(usingDevice){fs.closeSync(fd);}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\");}else{result=null;}}else if(typeof window!=\"undefined\"&&typeof window.prompt==\"function\"){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\";}}else if(typeof readline==\"function\"){result=readline();if(result!==null){result+=\"\\n\";}}if(!result){return null;}tty.input=intArrayFromString(result,true);}return tty.input.shift();},put_char:function put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[];}else{if(val!=0)tty.output.push(val);}},flush:function flush(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[];}}},default_tty1_ops:{put_char:function put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[];}else{if(val!=0)tty.output.push(val);}},flush:function flush(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[];}}}};var MEMFS={ops_table:null,mount:function mount(_mount){return MEMFS.createNode(null,\"/\",16384|511,0);},createNode:function createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={};}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null;}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream;}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream;}node.timestamp=Date.now();if(parent){parent.contents[name]=node;}return node;},getFileDataAsRegularArray:function getFileDataAsRegularArray(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i<node.usedBytes;++i){arr.push(node.contents[i]);}return arr;}return node.contents;},getFileDataAsTypedArray:function getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array();if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents);},expandFileStorage:function expandFileStorage(node,newCapacity){if(node.contents&&node.contents.subarray&&newCapacity>node.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length;}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return;}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.length<newCapacity){node.contents.push(0);}},resizeFileStorage:function resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return;}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)));}node.usedBytes=newSize;return;}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length<newSize){node.contents.push(0);}node.usedBytes=newSize;},node_ops:{getattr:function getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096;}else if(FS.isFile(node.mode)){attr.size=node.usedBytes;}else if(FS.isLink(node.mode)){attr.size=node.link.length;}else{attr.size=0;}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr;},setattr:function setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode;}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp;}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size);}},lookup:function lookup(parent,name){throw FS.genericErrors[ERRNO_CODES.ENOENT];},mknod:function mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev);},rename:function rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir;},unlink:function unlink(parent,name){delete parent.contents[name];},rmdir:function rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}delete parent.contents[name];},readdir:function readdir(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node;},readlink:function readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return node.link;}},stream_ops:{read:function read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset);}else{for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i];}}return size;},write:function write(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length;}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length;}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length;}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i];}}node.usedBytes=Math.max(node.usedBytes,position+length);return length;},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes;}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;},allocate:function allocate(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset;}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length);}else{contents=Array.prototype.slice.call(contents,position,position+length);}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);}buffer.set(contents,ptr);}return{ptr:ptr,allocated:allocated};},msync:function msync(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}if(mmapFlags&2){return 0;}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0;}}};var IDBFS={dbs:{},indexedDB:function(_indexedDB){function indexedDB(){return _indexedDB.apply(this,arguments);}indexedDB.toString=function(){return _indexedDB.toString();};return indexedDB;}(function(){if(typeof indexedDB!==\"undefined\")return indexedDB;var ret=null;if((typeof window==='undefined'?'undefined':_typeof(window))===\"object\")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,\"IDBFS used, but indexedDB not supported\");return ret;}),DB_VERSION:21,DB_STORE_NAME:\"FILE_DATA\",mount:function mount(_mount2){return MEMFS.mount.apply(null,arguments);},syncfs:function syncfs(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback);});});},getDB:function getDB(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db);}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION);}catch(e){return callback(e);}if(!req){return callback(\"Unable to connect to IndexedDB\");}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME);}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME);}if(!fileStore.indexNames.contains(\"timestamp\")){fileStore.createIndex(\"timestamp\",\"timestamp\",{unique:false});}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db);};req.onerror=function(e){callback(this.error);e.preventDefault();};},getLocalSet:function getLocalSet(mount,callback){var entries={};function isRealDir(p){return p!==\".\"&&p!==\"..\";}function toAbsolute(root){return function(p){return PATH.join2(root,p);};}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path);}catch(e){return callback(e);}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));}entries[path]={timestamp:stat.mtime};}return callback(null,{type:\"local\",entries:entries});},getRemoteSet:function getRemoteSet(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readonly\");transaction.onerror=function(e){callback(this.error);e.preventDefault();};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index(\"timestamp\");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:\"remote\",db:db,entries:entries});}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue();};}catch(e){return callback(e);}});},loadLocalEntry:function loadLocalEntry(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path);}catch(e){return callback(e);}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode});}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents});}else{return callback(new Error(\"node type not supported\"));}},storeLocalEntry:function storeLocalEntry(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode);}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true});}else{return callback(new Error(\"node type not supported\"));}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp);}catch(e){return callback(e);}callback(null);},removeLocalEntry:function removeLocalEntry(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path);}else if(FS.isFile(stat.mode)){FS.unlink(path);}}catch(e){return callback(e);}callback(null);},loadRemoteEntry:function loadRemoteEntry(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result);};req.onerror=function(e){callback(this.error);e.preventDefault();};},storeRemoteEntry:function storeRemoteEntry(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null);};req.onerror=function(e){callback(this.error);e.preventDefault();};},removeRemoteEntry:function removeRemoteEntry(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null);};req.onerror=function(e){callback(this.error);e.preventDefault();};},reconcile:function reconcile(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++;}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++;}});if(!total){return callback(null);}var completed=0;var db=src.type===\"remote\"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readwrite\");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err);}return;}if(++completed>=total){return callback(null);}}transaction.onerror=function(e){done(this.error);e.preventDefault();};create.sort().forEach(function(path){if(dst.type===\"local\"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done);});}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done);});}});remove.sort().reverse().forEach(function(path){if(dst.type===\"local\"){IDBFS.removeLocalEntry(path,done);}else{IDBFS.removeRemoteEntry(store,path,done);}});}};var NODEFS={isWindows:false,staticInit:function staticInit(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process[\"binding\"](\"constants\");if(flags[\"fs\"]){flags=flags[\"fs\"];}NODEFS.flagsForNodeMap={\"1024\":flags[\"O_APPEND\"],\"64\":flags[\"O_CREAT\"],\"128\":flags[\"O_EXCL\"],\"0\":flags[\"O_RDONLY\"],\"2\":flags[\"O_RDWR\"],\"4096\":flags[\"O_SYNC\"],\"512\":flags[\"O_TRUNC\"],\"1\":flags[\"O_WRONLY\"]};},bufferFrom:function bufferFrom(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer);},mount:function mount(_mount3){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,\"/\",NODEFS.getMode(_mount3.opts.root),0);},createNode:function createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node;},getMode:function getMode(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2;}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}return stat.mode;},realPath:function realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent;}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts);},flagsForNode:function flagsForNode(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k;}}if(!flags){return newFlags;}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}},node_ops:{getattr:function getattr(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096;}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0;}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks};},setattr:function setattr(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode;}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date);}if(attr.size!==undefined){fs.truncateSync(path,attr.size);}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},lookup:function lookup(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode);},mknod:function mknod(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode);}else{fs.writeFileSync(path,\"\",{mode:node.mode});}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}return node;},rename:function rename(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},unlink:function unlink(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},rmdir:function rmdir(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},readdir:function readdir(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},symlink:function symlink(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},readlink:function readlink(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path;}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}}},stream_ops:{open:function open(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags));}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},close:function close(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd);}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},read:function read(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},write:function write(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size;}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function mount(_mount4){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync();var root=WORKERFS.createNode(null,\"/\",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split(\"/\");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join(\"/\");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0);}parent=createdParents[curr];}return parent;}function base(path){var parts=path.split(\"/\");return parts[parts.length-1];}Array.prototype.forEach.call(_mount4.opts[\"files\"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate);});(_mount4.opts[\"blobs\"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj[\"name\"]),base(obj[\"name\"]),WORKERFS.FILE_MODE,0,obj[\"data\"]);});(_mount4.opts[\"packages\"]||[]).forEach(function(pack){pack[\"metadata\"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack[\"blob\"].slice(file.start,file.end));});});return root;},createNode:function createNode(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date()).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents;}else{node.size=4096;node.contents={};}if(parent){parent.contents[name]=node;}return node;},node_ops:{getattr:function getattr(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)};},setattr:function setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode;}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp;}},lookup:function lookup(parent,name){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);},mknod:function mknod(parent,name,mode,dev){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},rename:function rename(oldNode,newDir,newName){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},unlink:function unlink(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},rmdir:function rmdir(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},readdir:function readdir(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newName,oldPath){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},readlink:function readlink(node){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}},stream_ops:{read:function read(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size;},write:function write(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO);},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size;}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;}}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function handleFSError(e){if(!(e instanceof FS.ErrnoError))throw e+\" : \"+stackTrace();return ___setErrNo(e.errno);},lookupPath:function lookupPath(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:\"\",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key];}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP);}var parts=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p;}),false);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break;}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root;}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP);}}}}return{path:current_path,node:current};},getPath:function getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?mount+\"/\"+path:mount+path;}path=path?node.name+\"/\"+path:node.name;node=node.parent;}},hashName:function hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0;}return(parentid+hash>>>0)%FS.nameTable.length;},hashAddNode:function hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node;},hashRemoveNode:function hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next;}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break;}current=current.name_next;}}},lookupNode:function lookupNode(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent);}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node;}}return FS.lookup(parent,name);},createNode:function createNode(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this;}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function get(){return(this.mode&readMode)===readMode;},set:function set(val){val?this.mode|=readMode:this.mode&=~readMode;}},write:{get:function get(){return(this.mode&writeMode)===writeMode;},set:function set(val){val?this.mode|=writeMode:this.mode&=~writeMode;}},isFolder:{get:function get(){return FS.isDir(this.mode);}},isDevice:{get:function get(){return FS.isChrdev(this.mode);}}});}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node;},destroyNode:function destroyNode(node){FS.hashRemoveNode(node);},isRoot:function isRoot(node){return node===node.parent;},isMountpoint:function isMountpoint(node){return!!node.mounted;},isFile:function isFile(mode){return(mode&61440)===32768;},isDir:function isDir(mode){return(mode&61440)===16384;},isLink:function isLink(mode){return(mode&61440)===40960;},isChrdev:function isChrdev(mode){return(mode&61440)===8192;},isBlkdev:function isBlkdev(mode){return(mode&61440)===24576;},isFIFO:function isFIFO(mode){return(mode&61440)===4096;},isSocket:function isSocket(mode){return(mode&49152)===49152;},flagModes:{\"r\":0,\"rs\":1052672,\"r+\":2,\"w\":577,\"wx\":705,\"xw\":705,\"w+\":578,\"wx+\":706,\"xw+\":706,\"a\":1089,\"ax\":1217,\"xa\":1217,\"a+\":1090,\"ax+\":1218,\"xa+\":1218},modeStringToFlags:function modeStringToFlags(str){var flags=FS.flagModes[str];if(typeof flags===\"undefined\"){throw new Error(\"Unknown file open mode: \"+str);}return flags;},flagsToPermissionString:function flagsToPermissionString(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\";}return perms;},nodePermissions:function nodePermissions(node,perms){if(FS.ignorePermissions){return 0;}if(perms.indexOf(\"r\")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES;}else if(perms.indexOf(\"w\")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES;}else if(perms.indexOf(\"x\")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES;}return 0;},mayLookup:function mayLookup(dir){var err=FS.nodePermissions(dir,\"x\");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0;},mayCreate:function mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST;}catch(e){}return FS.nodePermissions(dir,\"wx\");},mayDelete:function mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name);}catch(e){return e.errno;}var err=FS.nodePermissions(dir,\"wx\");if(err){return err;}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR;}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY;}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR;}}return 0;},mayOpen:function mayOpen(node,flags){if(!node){return ERRNO_CODES.ENOENT;}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP;}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!==\"r\"||flags&512){return ERRNO_CODES.EISDIR;}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags));},MAX_OPEN_FDS:4096,nextfd:function nextfd(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd;}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE);},getStream:function getStream(fd){return FS.streams[fd];},createStream:function createStream(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function get(){return this.node;},set:function set(val){this.node=val;}},isRead:{get:function get(){return(this.flags&2097155)!==1;}},isWrite:{get:function get(){return(this.flags&2097155)!==0;}},isAppend:{get:function get(){return this.flags&1024;}}});}var newStream=new FS.FSStream();for(var p in stream){newStream[p]=stream[p];}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream;},closeStream:function closeStream(fd){FS.streams[fd]=null;},chrdev_stream_ops:{open:function open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream);}},llseek:function llseek(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}},major:function major(dev){return dev>>8;},minor:function minor(dev){return dev&255;},makedev:function makedev(ma,mi){return ma<<8|mi;},registerDevice:function registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops};},getDevice:function getDevice(dev){return FS.devices[dev];},getMounts:function getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts);}return mounts;},syncfs:function syncfs(populate,callback){if(typeof populate===\"function\"){callback=populate;populate=false;}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log(\"warning: \"+FS.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err);}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err);}return;}if(++completed>=mounts.length){doCallback(null);}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null);}mount.type.syncfs(mount,populate,done);});},mount:function mount(type,opts,mountpoint){var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot;}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount);}}return mountRoot;},unmount:function unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current);}current=next;}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1);},lookup:function lookup(parent,name){return parent.node_ops.lookup(parent,name);},mknod:function mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name===\".\"||name===\"..\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return parent.node_ops.mknod(parent,name,mode,dev);},create:function create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0);},mkdir:function mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0);},mkdirTree:function mkdirTree(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+=\"/\"+dirs[i];try{FS.mkdir(d,mode);}catch(e){if(e.errno!=ERRNO_CODES.EEXIST)throw e;}}},mkdev:function mkdev(path,mode,dev){if(typeof dev===\"undefined\"){dev=mode;mode=438;}mode|=8192;return FS.mknod(path,mode,dev);},symlink:function symlink(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return parent.node_ops.symlink(parent,newname,oldpath);},rename:function rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV);}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(old_node===new_node){return;}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err);}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err);}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,\"w\");if(err){throw new FS.ErrnoError(err);}}try{if(FS.trackingDelegate[\"willMovePath\"]){FS.trackingDelegate[\"willMovePath\"](old_path,new_path);}}catch(e){console.log(\"FS.trackingDelegate['willMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message);}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);}catch(e){throw e;}finally{FS.hashAddNode(old_node);}try{if(FS.trackingDelegate[\"onMovePath\"])FS.trackingDelegate[\"onMovePath\"](old_path,new_path);}catch(e){console.log(\"FS.trackingDelegate['onMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message);}},rmdir:function rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path);}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message);}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path);}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message);}},readdir:function readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}return node.node_ops.readdir(node);},unlink:function unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path);}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message);}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path);}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message);}},readlink:function readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link));},stat:function stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return node.node_ops.getattr(node);},lstat:function lstat(path){return FS.stat(path,true);},chmod:function chmod(path,mode,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()});},lchmod:function lchmod(path,mode){FS.chmod(path,mode,true);},fchmod:function fchmod(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}FS.chmod(stream.node,mode);},chown:function chown(path,uid,gid,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}node.node_ops.setattr(node,{timestamp:Date.now()});},lchown:function lchown(path,uid,gid){FS.chown(path,uid,gid,true);},fchown:function fchown(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}FS.chown(stream.node,uid,gid);},truncate:function truncate(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var err=FS.nodePermissions(node,\"w\");if(err){throw new FS.ErrnoError(err);}node.node_ops.setattr(node,{size:len,timestamp:Date.now()});},ftruncate:function ftruncate(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}FS.truncate(stream.node,len);},utime:function utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)});},open:function open(path,flags,mode,fd_start,fd_end){if(path===\"\"){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}flags=typeof flags===\"string\"?FS.modeStringToFlags(flags):flags;mode=typeof mode===\"undefined\"?438:mode;if(flags&64){mode=mode&4095|32768;}else{mode=0;}var node;if((typeof path==='undefined'?'undefined':_typeof(path))===\"object\"){node=path;}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node;}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST);}}else{node=FS.mknod(path,mode,0);created=true;}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(FS.isChrdev(node.mode)){flags&=~512;}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err);}}if(flags&512){FS.truncate(node,0);}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream);}if(Module[\"logReadFiles\"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;err(\"read file: \"+path);}}try{if(FS.trackingDelegate[\"onOpenFile\"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ;}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE;}FS.trackingDelegate[\"onOpenFile\"](path,trackingFlags);}}catch(e){console.log(\"FS.trackingDelegate['onOpenFile']('\"+path+\"', flags) threw an exception: \"+e.message);}return stream;},close:function close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream);}}catch(e){throw e;}finally{FS.closeStream(stream.fd);}stream.fd=null;},isClosed:function isClosed(stream){return stream.fd===null;},llseek:function llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position;},read:function read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position;}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead;},write:function write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(stream.flags&1024){FS.llseek(stream,0,2);}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position;}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate[\"onWriteToFile\"])FS.trackingDelegate[\"onWriteToFile\"](stream.path);}catch(e){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+path+\"') threw an exception: \"+e.message);}return bytesWritten;},allocate:function allocate(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);}stream.stream_ops.allocate(stream,offset,length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES);}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags);},msync:function msync(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0;}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags);},munmap:function munmap(stream){return 0;},ioctl:function ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);}return stream.stream_ops.ioctl(stream,cmd,arg);},readFile:function readFile(path,opts){opts=opts||{};opts.flags=opts.flags||\"r\";opts.encoding=opts.encoding||\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){throw new Error('Invalid encoding type \"'+opts.encoding+'\"');}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){ret=UTF8ArrayToString(buf,0);}else if(opts.encoding===\"binary\"){ret=buf;}FS.close(stream);return ret;},writeFile:function writeFile(path,data,opts){opts=opts||{};opts.flags=opts.flags||\"w\";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data===\"string\"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn);}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);}else{throw new Error(\"Unsupported data type\");}FS.close(stream);},cwd:function cwd(){return FS.currentPath;},chdir:function chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}var err=FS.nodePermissions(lookup.node,\"x\");if(err){throw new FS.ErrnoError(err);}FS.currentPath=lookup.path;},createDefaultDirectories:function createDefaultDirectories(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\");},createDefaultDevices:function createDefaultDevices(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:function read(){return 0;},write:function write(stream,buffer,offset,length,pos){return length;}});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var random_device;if(typeof crypto!==\"undefined\"){var randomBuffer=new Uint8Array(1);random_device=function random_device(){crypto.getRandomValues(randomBuffer);return randomBuffer[0];};}else if(ENVIRONMENT_IS_NODE){random_device=function random_device(){return require(\"crypto\")[\"randomBytes\"](1)[0];};}else{random_device=function random_device(){return Math.random()*256|0;};}FS.createDevice(\"/dev\",\"random\",random_device);FS.createDevice(\"/dev\",\"urandom\",random_device);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\");},createSpecialDirectories:function createSpecialDirectories(){FS.mkdir(\"/proc\");FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount:function mount(){var node=FS.createNode(\"/proc/self\",\"fd\",16384|511,73);node.node_ops={lookup:function lookup(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function readlink(){return stream.path;}}};ret.parent=ret;return ret;}};return node;}},{},\"/proc/self/fd\");},createStandardStreams:function createStandardStreams(){if(Module[\"stdin\"]){FS.createDevice(\"/dev\",\"stdin\",Module[\"stdin\"]);}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\");}if(Module[\"stdout\"]){FS.createDevice(\"/dev\",\"stdout\",null,Module[\"stdout\"]);}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\");}if(Module[\"stderr\"]){FS.createDevice(\"/dev\",\"stderr\",null,Module[\"stderr\"]);}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\");}var stdin=FS.open(\"/dev/stdin\",\"r\");assert(stdin.fd===0,\"invalid handle for stdin (\"+stdin.fd+\")\");var stdout=FS.open(\"/dev/stdout\",\"w\");assert(stdout.fd===1,\"invalid handle for stdout (\"+stdout.fd+\")\");var stderr=FS.open(\"/dev/stderr\",\"w\");assert(stderr.fd===2,\"invalid handle for stderr (\"+stderr.fd+\")\");},ensureErrnoError:function ensureErrnoError(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break;}}};this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack)Object.defineProperty(this,\"stack\",{value:new Error().stack,writable:true});};FS.ErrnoError.prototype=new Error();FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=\"<generic error, no stack>\";});},staticInit:function staticInit(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={\"MEMFS\":MEMFS,\"IDBFS\":IDBFS,\"NODEFS\":NODEFS,\"WORKERFS\":WORKERFS};},init:function init(input,output,error){assert(!FS.init.initialized,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");FS.init.initialized=true;FS.ensureErrnoError();Module[\"stdin\"]=input||Module[\"stdin\"];Module[\"stdout\"]=output||Module[\"stdout\"];Module[\"stderr\"]=error||Module[\"stderr\"];FS.createStandardStreams();},quit:function quit(){FS.init.initialized=false;var fflush=Module[\"_fflush\"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue;}FS.close(stream);}},getMode:function getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode;},joinPath:function joinPath(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]==\"/\")path=path.substr(1);return path;},absolutePath:function absolutePath(relative,base){return PATH.resolve(base,relative);},standardizePath:function standardizePath(path){return PATH.normalize(path);},findObject:function findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object;}else{___setErrNo(ret.error);return null;}},analyzePath:function analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path;}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\";}catch(e){ret.error=e.errno;}return ret;},createFolder:function createFolder(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode);},createPath:function createPath(parent,path,canRead,canWrite){parent=typeof parent===\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current);}catch(e){}parent=current;}return current;},createFile:function createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode);},createDataFile:function createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data===\"string\"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i){arr[i]=data.charCodeAt(i);}data=arr;}FS.chmod(node,mode|146);var stream=FS.open(node,\"w\");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode);}return node;},createDevice:function createDevice(parent,name,input,output){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function open(stream){stream.seekable=false;},close:function close(stream){if(output&&output.buffer&&output.buffer.length){output(10);}},read:function read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input();}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result;}if(bytesRead){stream.node.timestamp=Date.now();}return bytesRead;},write:function write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i]);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}}if(length){stream.node.timestamp=Date.now();}return i;}});return FS.mkdev(path,mode,dev);},createLink:function createLink(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);return FS.symlink(target,path);},forceLoadFile:function forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!==\"undefined\"){throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");}else if(Module[\"read\"]){try{obj.contents=intArrayFromString(Module[\"read\"](obj.url),true);obj.usedBytes=obj.contents.length;}catch(e){success=false;}}else{throw new Error(\"Cannot load without read() or XMLHttpRequest.\");}if(!success)___setErrNo(ERRNO_CODES.EIO);return success;},createLazyFile:function createLazyFile(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[];}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined;}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset];};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter;};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest();xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function doXHR(from,to){if(from>to)throw new Error(\"invalid range (\"+from+\", \"+to+\") or no bytes requested!\");if(to>datalength-1)throw new Error(\"only \"+datalength+\" bytes available! programmer error!\");var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);if(typeof Uint8Array!=\"undefined\")xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[]);}else{return intArrayFromString(xhr.responseText||\"\",true);}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]===\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end);}if(typeof lazyArray.chunks[chunkNum]===\"undefined\")throw new Error(\"doXHR failed!\");return lazyArray.chunks[chunkNum];});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log(\"LazyFiles on gzip forces download of the whole file when length is accessed\");}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true;};if(typeof XMLHttpRequest!==\"undefined\"){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var lazyArray=new LazyUint8Array();Object.defineProperties(lazyArray,{length:{get:function get(){if(!this.lengthKnown){this.cacheLength();}return this._length;}},chunkSize:{get:function get(){if(!this.lengthKnown){this.cacheLength();}return this._chunkSize;}}});var properties={isDevice:false,contents:lazyArray};}else{var properties={isDevice:false,url:url};}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents;}else if(properties.url){node.contents=null;node.url=properties.url;}Object.defineProperties(node,{usedBytes:{get:function get(){return this.contents.length;}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO);}return fn.apply(null,arguments);};});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO);}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i];}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i);}}return size;};node.stream_ops=stream_ops;return node;},createPreloadedFile:function createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(\"cp \"+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn);}if(onload)onload();removeRunDependency(dep);}var handled=false;Module[\"preloadPlugins\"].forEach(function(plugin){if(handled)return;if(plugin[\"canHandle\"](fullname)){plugin[\"handle\"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep);});handled=true;}});if(!handled)finish(byteArray);}addRunDependency(dep);if(typeof url==\"string\"){Browser.asyncLoad(url,function(byteArray){processData(byteArray);},onerror);}else{processData(url);}},indexedDB:function indexedDB(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;},DB_NAME:function DB_NAME(){return\"EM_FS_\"+window.location.pathname;},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function saveFilesToDB(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION);}catch(e){return onerror(e);}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log(\"creating db\");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME);};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],\"readwrite\");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror();}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish();};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish();};});transaction.onerror=onerror;};openRequest.onerror=onerror;},loadFilesFromDB:function loadFilesFromDB(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION);}catch(e){return onerror(e);}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],\"readonly\");}catch(e){onerror(e);return;}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror();}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path);}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish();};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish();};});transaction.onerror=onerror;};openRequest.onerror=onerror;}};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function calculateAt(dirfd,path){if(path[0]!==\"/\"){var dir;if(dirfd===-100){dir=FS.cwd();}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path;}path=PATH.join2(dir,path);}return path;},doStat:function doStat(func,path,buf){try{var stat=func(path);}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR;}throw e;}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0;},doMsync:function doMsync(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags);},doMkdir:function doMkdir(path,mode){path=PATH.normalize(path);if(path[path.length-1]===\"/\")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0;},doMknod:function doMknod(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL;}FS.mknod(path,mode,dev);return 0;},doReadlink:function doReadlink(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len;},doAccess:function doAccess(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL;}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms=\"\";if(amode&4)perms+=\"r\";if(amode&2)perms+=\"w\";if(amode&1)perms+=\"x\";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES;}return 0;},doDup:function doDup(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd;},doReadv:function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break;}return ret;},doWritev:function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;}return ret;},varargs:0,get:function get(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret;},getStr:function getStr(){var ret=Pointer_stringify(SYSCALLS.get());return ret;},getStreamFromFD:function getStreamFromFD(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream;},getSocketFromFD:function getSocketFromFD(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket;},getSocketAddress:function getSocketAddress(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info;},get64:function get64(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low;},getZero:function getZero(){assert(SYSCALLS.get()===0);}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt);}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt);}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL;}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd;};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0;};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0;};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL;}}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0;};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL;};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp);};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};default:abort(\"bad ioctl syscall \"+op);}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+size);}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i);}embind_charCodes=codes;}var embind_charCodes=undefined;function readLatin1String(ptr){var ret=\"\";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]];}return ret;}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return\"_unknown\";}name=name.replace(/[^a-zA-Z0-9_]/g,\"$\");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return\"_\"+name;}else{return name;}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function(\"body\",\"return function \"+name+\"() {\\n\"+'    \"use strict\";'+\"    return body.apply(this, arguments);\\n\"+\"};\\n\")(body);}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+\"\\n\"+stack.replace(/^Error(:[^\\n]*)?\\n/,\"\");}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name;}else{return this.name+\": \"+this.message;}};return errorClass;}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message);}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message);}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes;});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError(\"Mismatched type converter count\");}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i]);}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach(function(dt,i){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt];}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[];}awaitingDependencies[dt].push(function(){typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters);}});}});if(0===unregisteredTypes.length){onComplete(typeConverters);}}function registerType(rawType,registeredInstance,options){options=options||{};if(!(\"argPackAdvance\"in registeredInstance)){throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");}var name=registeredInstance.name;if(!rawType){throwBindingError('type \"'+name+'\" must have a positive integer typeid pointer');}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return;}else{throwBindingError(\"Cannot register type '\"+name+\"' twice\");}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(function(cb){cb();});}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(wt){return!!wt;},\"toWireType\":function toWireType(destructors,o){return o?trueValue:falseValue;},\"argPackAdvance\":8,\"readValueFromPointer\":function readValueFromPointer(pointer){var heap;if(size===1){heap=HEAP8;}else if(size===2){heap=HEAP16;}else if(size===4){heap=HEAP32;}else{throw new TypeError(\"Unknown boolean type size: \"+name);}return this[\"fromWireType\"](heap[pointer>>shift]);},destructorFunction:null});}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false;}if(!(other instanceof ClassHandle)){return false;}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass;}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass;}return leftClass===rightClass&&left===right;}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType};}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name;}throwBindingError(getInstanceTypeName(obj)+\" instance already deleted\");}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this;}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone;}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr);}else{$$.ptrType.registeredClass.rawDestructor($$.ptr);}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\");}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this);}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined;}}function ClassHandle_isDeleted(){return!this.$$.ptr;}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj[\"delete\"]();}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\");}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes);}this.$$.deleteScheduled=true;return this;}function init_ClassHandle(){ClassHandle.prototype[\"isAliasOf\"]=ClassHandle_isAliasOf;ClassHandle.prototype[\"clone\"]=ClassHandle_clone;ClassHandle.prototype[\"delete\"]=ClassHandle_delete;ClassHandle.prototype[\"isDeleted\"]=ClassHandle_isDeleted;ClassHandle.prototype[\"deleteLater\"]=ClassHandle_deleteLater;}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError(\"Function '\"+humanName+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+proto[methodName].overloadTable+\")!\");}return proto[methodName].overloadTable[arguments.length].apply(this,arguments);};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc;}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(\"Cannot register public name '\"+name+\"' twice\");}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError(\"Cannot register multiple overloads of a function with the same number of arguments (\"+numArguments+\")!\");}Module[name].overloadTable[numArguments]=value;}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments;}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[];}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(\"Expected null or instance of \"+desiredClass.name+\", got an instance of \"+ptrClass.name);}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass;}return ptr;}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}return 0;}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr;}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr);}return ptr;}else{return 0;}}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError(\"Passing raw pointer to smart pointer is illegal\");}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr;}else{throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name);}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr;}else{var clonedHandle=handle[\"clone\"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle[\"delete\"]();}));if(destructors!==null){destructors.push(this.rawDestructor,ptr);}}break;default:throwBindingError(\"Unsupporting sharing policy\");}}return ptr;}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}return 0;}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}if(handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+handle.$$.ptrType.name+\" to parameter type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr;}function simpleReadValueFromPointer(pointer){return this[\"fromWireType\"](HEAPU32[pointer>>2]);}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr);}return ptr;}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr);}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle[\"delete\"]();}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr;}if(undefined===desiredClass.baseClass){return null;}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null;}return desiredClass.downcast(rv);}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length;}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k]);}}return rv;}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes);}}function init_embind(){Module[\"getInheritedInstanceCount\"]=getInheritedInstanceCount;Module[\"getLiveInheritedInstances\"]=getLiveInheritedInstances;Module[\"flushPendingDeletes\"]=flushPendingDeletes;Module[\"setDelayFunction\"]=setDelayFunction;}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError(\"ptr should not be undefined\");}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass;}return ptr;}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr];}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError(\"makeClassHandle requires ptr and ptrType\");}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError(\"Both smartPtrType and smartPtr must be specified\");}record.count={value:1};return Object.create(prototype,{$$:{value:record}});}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null;}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance[\"clone\"]();}else{var rv=registeredInstance[\"clone\"]();this.destructor(ptr);return rv;}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr});}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr});}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this);}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType;}else{toType=registeredPointerRecord.pointerType;}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this);}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr});}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp});}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype[\"argPackAdvance\"]=8;RegisteredPointer.prototype[\"readValueFromPointer\"]=simpleReadValueFromPointer;RegisteredPointer.prototype[\"deleteObject\"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype[\"fromWireType\"]=RegisteredPointer_fromWireType;}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this[\"toWireType\"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null;}else{this[\"toWireType\"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null;}}else{this[\"toWireType\"]=genericPointerToWireType;}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError(\"Replacing nonexistant public symbol\");}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value;}else{Module[name]=value;Module[name].argCount=numArguments;}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i<signature.length;++i){args.push(\"a\"+i);}var name=\"dynCall_\"+signature+\"_\"+rawFunction;var body=\"return function \"+name+\"(\"+args.join(\", \")+\") {\\n\";body+=\"    return dynCall(rawFunction\"+(args.length?\", \":\"\")+args.join(\", \")+\");\\n\";body+=\"};\\n\";return new Function(\"dynCall\",\"rawFunction\",body)(dynCall,rawFunction);}var fp;if(Module[\"FUNCTION_TABLE_\"+signature]!==undefined){fp=Module[\"FUNCTION_TABLE_\"+signature][rawFunction];}else if(typeof FUNCTION_TABLE!==\"undefined\"){fp=FUNCTION_TABLE[rawFunction];}else{var dc=Module[\"asm\"][\"dynCall_\"+signature];if(dc===undefined){dc=Module[\"asm\"][\"dynCall_\"+signature.replace(/f/g,\"d\")];if(dc===undefined){throwBindingError(\"No dynCall invoker for signature: \"+signature);}}fp=makeDynCaller(dc);}if(typeof fp!==\"function\"){throwBindingError(\"unknown function pointer with signature \"+signature+\": \"+rawFunction);}return fp;}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv;}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return;}if(registeredTypes[type]){return;}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return;}unboundTypes.push(type);seen[type]=true;}types.forEach(visit);throw new UnboundTypeError(message+\": \"+unboundTypes.map(getTypeName).join([\", \"]));}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast);}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast);}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(\"Cannot construct \"+name+\" due to unbound types\",[baseClassRawType]);});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype;}else{basePrototype=ClassHandle.prototype;}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(\"Use 'new' to construct \"+name);}if(undefined===registeredClass.constructor_body){throw new BindingError(name+\" has no accessible constructor\");}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError(\"Tried to invoke ctor of \"+name+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(registeredClass.constructor_body).toString()+\") parameters instead!\");}return body.apply(this,arguments);});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+\"*\",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+\" const*\",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter];});}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAP32[(firstElement>>2)+i]);}return array;}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr);}}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=\"constructor \"+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[];}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(\"Cannot register multiple constructors with identical number of parameters (\"+(argCount-1)+\") for class '\"+classType.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError(\"Cannot construct \"+classType.name+\" due to unbound types\",rawArgTypes);};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+\" called with \"+arguments.length+\" arguments, expected \"+(argCount-1));}var destructors=[];var args=new Array(argCount);args[0]=rawConstructor;for(var i=1;i<argCount;++i){args[i]=argTypes[i][\"toWireType\"](destructors,arguments[i-1]);}var ptr=invoker.apply(null,args);runDestructors(destructors);return argTypes[0][\"fromWireType\"](ptr);};return[];});return[];});}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError(\"new_ called with constructor type \"+(typeof constructor==='undefined'?'undefined':_typeof(constructor))+\" which is not a function\");}var dummy=createNamedFunction(constructor.name||\"unknownFunctionName\",function(){});dummy.prototype=constructor.prototype;var obj=new dummy();var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj;}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break;}}var returns=argTypes[0].name!==\"void\";var argsList=\"\";var argsListWired=\"\";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;argsListWired+=(i!==0?\", \":\"\")+\"arg\"+i+\"Wired\";}var invokerFnBody=\"return function \"+makeLegalFunctionName(humanName)+\"(\"+argsList+\") {\\n\"+\"if (arguments.length !== \"+(argCount-2)+\") {\\n\"+\"throwBindingError('function \"+humanName+\" called with ' + arguments.length + ' arguments, expected \"+(argCount-2)+\" args!');\\n\"+\"}\\n\";if(needsDestructorStack){invokerFnBody+=\"var destructors = [];\\n\";}var dtorStack=needsDestructorStack?\"destructors\":\"null\";var args1=[\"throwBindingError\",\"invoker\",\"fn\",\"runDestructors\",\"retType\",\"classParam\"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+=\"var thisWired = classParam.toWireType(\"+dtorStack+\", this);\\n\";}for(var i=0;i<argCount-2;++i){invokerFnBody+=\"var arg\"+i+\"Wired = argType\"+i+\".toWireType(\"+dtorStack+\", arg\"+i+\"); // \"+argTypes[i+2].name+\"\\n\";args1.push(\"argType\"+i);args2.push(argTypes[i+2]);}if(isClassMethodFunc){argsListWired=\"thisWired\"+(argsListWired.length>0?\", \":\"\")+argsListWired;}invokerFnBody+=(returns?\"var rv = \":\"\")+\"invoker(fn\"+(argsListWired.length>0?\", \":\"\")+argsListWired+\");\\n\";if(needsDestructorStack){invokerFnBody+=\"runDestructors(destructors);\\n\";}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?\"thisWired\":\"arg\"+(i-2)+\"Wired\";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+\"_dtor(\"+paramName+\"); // \"+argTypes[i].name+\"\\n\";args1.push(paramName+\"_dtor\");args2.push(argTypes[i].destructorFunction);}}}if(returns){invokerFnBody+=\"var ret = retType.fromWireType(rv);\\n\"+\"return ret;\\n\";}else{}invokerFnBody+=\"}\\n\";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction;}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+\".\"+methodName;if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName);}function unboundTypesHandler(){throwUnboundTypeError(\"Cannot call \"+humanName+\" due to unbound types\",rawArgTypes);}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler;}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler;}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction;}else{proto[methodName].overloadTable[argCount-2]=memberFunction;}return[];});return[];});}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle);}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count;}}return count;}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i];}}return null;}function init_emval(){Module[\"count_emval_handles\"]=count_emval_handles;Module[\"get_first_emval\"]=get_first_emval;}function __emval_register(value){switch(value){case undefined:{return 1;};case null:{return 2;};case true:{return 3;};case false:{return 4;};default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle;}}}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv;},\"toWireType\":function toWireType(destructors,value){return __emval_register(value);},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:null});}function _embind_repr(v){if(v===null){return\"null\";}var t=typeof v==='undefined'?'undefined':_typeof(v);if(t===\"object\"||t===\"array\"||t===\"function\"){return v.toString();}else{return\"\"+v;}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this[\"fromWireType\"](HEAPF32[pointer>>2]);};case 3:return function(pointer){return this[\"fromWireType\"](HEAPF64[pointer>>3]);};default:throw new TypeError(\"Unknown float type: \"+name);}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){return value;},\"toWireType\":function toWireType(destructors,value){if(typeof value!==\"number\"&&typeof value!==\"boolean\"){throw new TypeError('Cannot convert \"'+_embind_repr(value)+'\" to '+this.name);}return value;},\"argPackAdvance\":8,\"readValueFromPointer\":floatReadValueFromPointer(name,shift),destructorFunction:null});}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError(\"Cannot call \"+name+\" due to unbound types\",argTypes);},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[];});}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer];}:function readU8FromPointer(pointer){return HEAPU8[pointer];};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1];}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1];};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2];}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2];};default:throw new TypeError(\"Unknown integer type: \"+name);}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295;}var shift=getShiftFromSize(size);var fromWireType=function fromWireType(value){return value;};if(minRange===0){var bitshift=32-8*size;fromWireType=function fromWireType(value){return value<<bitshift>>>bitshift;};}var isUnsignedType=name.indexOf(\"unsigned\")!=-1;registerType(primitiveType,{name:name,\"fromWireType\":fromWireType,\"toWireType\":function toWireType(destructors,value){if(typeof value!==\"number\"&&typeof value!==\"boolean\"){throw new TypeError('Cannot convert \"'+_embind_repr(value)+'\" to '+this.name);}if(value<minRange||value>maxRange){throw new TypeError('Passing a number \"'+_embind_repr(value)+'\" from JS side to C/C++ side to an argument of type \"'+name+'\", which is outside the valid range ['+minRange+\", \"+maxRange+\"]!\");}return isUnsignedType?value>>>0:value|0;},\"argPackAdvance\":8,\"readValueFromPointer\":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null});}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap[\"buffer\"],data,size);}name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":decodeMemoryView,\"argPackAdvance\":8,\"readValueFromPointer\":decodeMemoryView},{ignoreDuplicateRegistrations:true});}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name===\"std::string\";registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var endChar=HEAPU8[value+4+length];var endCharSwap=0;if(endChar!=0){endCharSwap=endChar;HEAPU8[value+4+length]=0;}var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0){var stringSegment=UTF8ToString(decodeStartPtr);if(str===undefined)str=stringSegment;else{str+=String.fromCharCode(0);str+=stringSegment;}decodeStartPtr=currentBytePtr+1;}}if(endCharSwap!=0)HEAPU8[value+4+length]=endCharSwap;}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[value+4+i]);}str=a.join(\"\");}_free(value);return str;},\"toWireType\":function toWireType(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value);}var getLength;var valueIsOfTypeString=typeof value===\"string\";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError(\"Cannot pass non-string to std::string\");}if(stdStringIsUTF8&&valueIsOfTypeString){getLength=function getLength(){return lengthBytesUTF8(value);};}else{getLength=function getLength(){return value.length;};}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1);}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError(\"String has UTF-16 code units that do not fit in 8 bits\");}HEAPU8[ptr+4+i]=charCode;}}else{for(var i=0;i<length;++i){HEAPU8[ptr+4+i]=value[i];}}}if(destructors!==null){destructors.push(_free,ptr);}return ptr;},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function destructorFunction(ptr){_free(ptr);}});}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var getHeap,shift;if(charSize===2){getHeap=function getHeap(){return HEAPU16;};shift=1;}else if(charSize===4){getHeap=function getHeap(){return HEAPU32;};shift=2;}registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){var HEAP=getHeap();var length=HEAPU32[value>>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAP[start+i]);}_free(value);return a.join(\"\");},\"toWireType\":function toWireType(destructors,value){var HEAP=getHeap();var length=value.length;var ptr=_malloc(4+length*charSize);HEAPU32[ptr>>2]=length;var start=ptr+4>>shift;for(var i=0;i<length;++i){HEAP[start+i]=value.charCodeAt(i);}if(destructors!==null){destructors.push(_free,ptr);}return ptr;},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function destructorFunction(ptr){_free(ptr);}});}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,\"argPackAdvance\":0,\"fromWireType\":function fromWireType(){return undefined;},\"toWireType\":function toWireType(destructors,o){return undefined;}});}function requireHandle(handle){if(!handle){throwBindingError(\"Cannot use deleted val. handle = \"+handle);}return emval_handle_array[handle].value;}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+\" has unknown type \"+getTypeName(rawType));}return impl;}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,\"emval::as\");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType[\"toWireType\"](destructors,handle);}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAP32[(argTypes>>2)+i],\"parameter \"+i);}return a;}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i<argCount;++i){var type=types[i];args[i]=type[\"readValueFromPointer\"](argv);argv+=type[\"argPackAdvance\"];}var rv=handle.apply(undefined,args);return __emval_register(rv);}function __emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>2]=__emval_register(destructors);return destructors;}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address);}else{return symbol;}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args);}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id;}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+\"_$\"+types.slice(1).map(function(t){return t.name;}).join(\"_\")+\"$\";var params=[\"retType\"];var args=[retType];var argsList=\"\";for(var i=0;i<argCount-1;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;params.push(\"argType\"+i);args.push(types[1+i]);}var functionName=makeLegalFunctionName(\"methodCaller_\"+signatureName);var functionBody=\"return function \"+functionName+\"(handle, name, destructors, args) {\\n\";var offset=0;for(var i=0;i<argCount-1;++i){functionBody+=\"    var arg\"+i+\" = argType\"+i+\".readValueFromPointer(args\"+(offset?\"+\"+offset:\"\")+\");\\n\";offset+=types[i+1][\"argPackAdvance\"];}functionBody+=\"    var rv = handle[name](\"+argsList+\");\\n\";for(var i=0;i<argCount-1;++i){if(types[i+1][\"deleteObject\"]){functionBody+=\"    argType\"+i+\".deleteObject(arg\"+i+\");\\n\";}}if(!retType.isVoid){functionBody+=\"    return retType.toWireType(destructors, rv);\\n\";}functionBody+=\"};\\n\";params.push(functionBody);var invokerFunction=new_(Function,params).apply(null,args);return __emval_addMethodCaller(invokerFunction);}function __emval_get_module_property(name){name=getStringOrSymbol(name);return __emval_register(Module[name]);}function __emval_get_property(handle,key){handle=requireHandle(handle);key=requireHandle(key);return __emval_register(handle[key]);}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1;}}function craftEmvalAllocator(argCount){var argsList=\"\";for(var i=0;i<argCount;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;}var functionBody=\"return function emval_allocator_\"+argCount+\"(constructor, argTypes, args) {\\n\";for(var i=0;i<argCount;++i){functionBody+=\"var argType\"+i+\" = requireRegisteredType(HEAP32[(argTypes >> 2) + \"+i+'], \"parameter '+i+'\");\\n'+\"var arg\"+i+\" = argType\"+i+\".readValueFromPointer(args);\\n\"+\"args += argType\"+i+\"['argPackAdvance'];\\n\";}functionBody+=\"var obj = new constructor(\"+argsList+\");\\n\"+\"return __emval_register(obj);\\n\"+\"}\\n\";return new Function(\"requireRegisteredType\",\"HEAP32\",\"__emval_register\",functionBody)(requireRegisteredType,HEAP32,__emval_register);}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer;}return newer(handle,argTypes,args);}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v));}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle);}function __emval_take_value(type,argv){type=requireRegisteredType(type,\"_emval_take_value\");var v=type[\"readValueFromPointer\"](argv);return __emval_register(v);}function _abort(){Module[\"abort\"]();}function _llvm_cttz_i32(x){x=x|0;return(x?31-(Math_clz32(x^x-1)|0)|0:32)|0;}function _llvm_cttz_i64(l,h){var ret=_llvm_cttz_i32(l);if(ret==32)ret+=_llvm_cttz_i32(h);return(setTempRet0(0),ret)|0;}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest;}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0;}var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL;}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0;}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module[\"dynCall_v\"](func);_pthread_once.seen[ptr]=1;}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL;}PTHREAD_SPECIFIC[key]=value;return 0;}FS.staticInit();__ATINIT__.unshift(function(){if(!Module[\"noFSInit\"]&&!FS.init.initialized)FS.init();});__ATMAIN__.push(function(){FS.ignorePermissions=false;});__ATEXIT__.push(function(){FS.quit();});__ATINIT__.unshift(function(){TTY.init();});__ATEXIT__.push(function(){TTY.shutdown();});if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var NODEJS_PATH=require(\"path\");NODEFS.staticInit();}embind_init_charCodes();BindingError=Module[\"BindingError\"]=extendError(Error,\"BindingError\");InternalError=Module[\"InternalError\"]=extendError(Error,\"InternalError\");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module[\"UnboundTypeError\"]=extendError(Error,\"UnboundTypeError\");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array;}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\")  at offset \"+i+\" not in 0x00-0xFF.\");}chr&=255;}ret.push(String.fromCharCode(chr));}return ret.join(\"\");}var decodeBase64=typeof atob===\"function\"?atob:function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2);}if(enc4!==64){output=output+String.fromCharCode(chr3);}}while(i<input.length);return output;};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE===\"boolean\"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,\"base64\");}catch(_){buf=new Buffer(s,\"base64\");}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength);}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i);}return bytes;}catch(_){throw new Error(\"Converting base64 string to bytes failed.\");}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return;}return intArrayFromBase64(filename.slice(dataURIPrefix.length));}Module[\"wasmTableSize\"]=412;Module[\"wasmMaxTableSize\"]=412;function invoke_i(index){var sp=_stackSave();try{return Module[\"dynCall_i\"](index);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_ii(index,a1){var sp=_stackSave();try{return Module[\"dynCall_ii\"](index,a1);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iii(index,a1,a2){var sp=_stackSave();try{return Module[\"dynCall_iii\"](index,a1,a2);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiii(index,a1,a2,a3){var sp=_stackSave();try{return Module[\"dynCall_iiii\"](index,a1,a2,a3);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=_stackSave();try{return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=_stackSave();try{return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=_stackSave();try{return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_v(index){var sp=_stackSave();try{Module[\"dynCall_v\"](index);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_vi(index,a1){var sp=_stackSave();try{Module[\"dynCall_vi\"](index,a1);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_vii(index,a1,a2){var sp=_stackSave();try{Module[\"dynCall_vii\"](index,a1,a2);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viii(index,a1,a2,a3){var sp=_stackSave();try{Module[\"dynCall_viii\"](index,a1,a2,a3);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiii(index,a1,a2,a3,a4){var sp=_stackSave();try{Module[\"dynCall_viiii\"](index,a1,a2,a3,a4);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=_stackSave();try{Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=_stackSave();try{Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}Module.asmGlobalArg={};Module.asmLibraryArg={\"abort\":abort,\"assert\":assert,\"enlargeMemory\":enlargeMemory,\"getTotalMemory\":getTotalMemory,\"abortOnCannotGrowMemory\":abortOnCannotGrowMemory,\"invoke_i\":invoke_i,\"invoke_ii\":invoke_ii,\"invoke_iii\":invoke_iii,\"invoke_iiii\":invoke_iiii,\"invoke_iiiii\":invoke_iiiii,\"invoke_iiiiii\":invoke_iiiiii,\"invoke_iiiiiii\":invoke_iiiiiii,\"invoke_v\":invoke_v,\"invoke_vi\":invoke_vi,\"invoke_vii\":invoke_vii,\"invoke_viii\":invoke_viii,\"invoke_viiii\":invoke_viiii,\"invoke_viiiii\":invoke_viiiii,\"invoke_viiiiii\":invoke_viiiiii,\"ClassHandle\":ClassHandle,\"ClassHandle_clone\":ClassHandle_clone,\"ClassHandle_delete\":ClassHandle_delete,\"ClassHandle_deleteLater\":ClassHandle_deleteLater,\"ClassHandle_isAliasOf\":ClassHandle_isAliasOf,\"ClassHandle_isDeleted\":ClassHandle_isDeleted,\"RegisteredClass\":RegisteredClass,\"RegisteredPointer\":RegisteredPointer,\"RegisteredPointer_deleteObject\":RegisteredPointer_deleteObject,\"RegisteredPointer_destructor\":RegisteredPointer_destructor,\"RegisteredPointer_fromWireType\":RegisteredPointer_fromWireType,\"RegisteredPointer_getPointee\":RegisteredPointer_getPointee,\"__ZSt18uncaught_exceptionv\":__ZSt18uncaught_exceptionv,\"___cxa_allocate_exception\":___cxa_allocate_exception,\"___cxa_begin_catch\":___cxa_begin_catch,\"___cxa_find_matching_catch\":___cxa_find_matching_catch,\"___cxa_throw\":___cxa_throw,\"___gxx_personality_v0\":___gxx_personality_v0,\"___lock\":___lock,\"___resumeException\":___resumeException,\"___setErrNo\":___setErrNo,\"___syscall140\":___syscall140,\"___syscall145\":___syscall145,\"___syscall146\":___syscall146,\"___syscall221\":___syscall221,\"___syscall5\":___syscall5,\"___syscall54\":___syscall54,\"___syscall6\":___syscall6,\"___unlock\":___unlock,\"__embind_register_bool\":__embind_register_bool,\"__embind_register_class\":__embind_register_class,\"__embind_register_class_constructor\":__embind_register_class_constructor,\"__embind_register_class_function\":__embind_register_class_function,\"__embind_register_emval\":__embind_register_emval,\"__embind_register_float\":__embind_register_float,\"__embind_register_function\":__embind_register_function,\"__embind_register_integer\":__embind_register_integer,\"__embind_register_memory_view\":__embind_register_memory_view,\"__embind_register_std_string\":__embind_register_std_string,\"__embind_register_std_wstring\":__embind_register_std_wstring,\"__embind_register_void\":__embind_register_void,\"__emval_addMethodCaller\":__emval_addMethodCaller,\"__emval_allocateDestructors\":__emval_allocateDestructors,\"__emval_as\":__emval_as,\"__emval_call\":__emval_call,\"__emval_call_void_method\":__emval_call_void_method,\"__emval_decref\":__emval_decref,\"__emval_get_method_caller\":__emval_get_method_caller,\"__emval_get_module_property\":__emval_get_module_property,\"__emval_get_property\":__emval_get_property,\"__emval_incref\":__emval_incref,\"__emval_lookupTypes\":__emval_lookupTypes,\"__emval_new\":__emval_new,\"__emval_new_cstring\":__emval_new_cstring,\"__emval_register\":__emval_register,\"__emval_run_destructors\":__emval_run_destructors,\"__emval_take_value\":__emval_take_value,\"_abort\":_abort,\"_embind_repr\":_embind_repr,\"_emscripten_memcpy_big\":_emscripten_memcpy_big,\"_llvm_cttz_i32\":_llvm_cttz_i32,\"_llvm_cttz_i64\":_llvm_cttz_i64,\"_pthread_getspecific\":_pthread_getspecific,\"_pthread_key_create\":_pthread_key_create,\"_pthread_once\":_pthread_once,\"_pthread_setspecific\":_pthread_setspecific,\"constNoSmartPtrRawPointerToWireType\":constNoSmartPtrRawPointerToWireType,\"count_emval_handles\":count_emval_handles,\"craftEmvalAllocator\":craftEmvalAllocator,\"craftInvokerFunction\":craftInvokerFunction,\"createNamedFunction\":createNamedFunction,\"downcastPointer\":downcastPointer,\"embind__requireFunction\":embind__requireFunction,\"embind_init_charCodes\":embind_init_charCodes,\"ensureOverloadTable\":ensureOverloadTable,\"exposePublicSymbol\":exposePublicSymbol,\"extendError\":extendError,\"floatReadValueFromPointer\":floatReadValueFromPointer,\"flushPendingDeletes\":flushPendingDeletes,\"genericPointerToWireType\":genericPointerToWireType,\"getBasestPointer\":getBasestPointer,\"getInheritedInstance\":getInheritedInstance,\"getInheritedInstanceCount\":getInheritedInstanceCount,\"getLiveInheritedInstances\":getLiveInheritedInstances,\"getShiftFromSize\":getShiftFromSize,\"getStringOrSymbol\":getStringOrSymbol,\"getTypeName\":getTypeName,\"get_first_emval\":get_first_emval,\"heap32VectorToArray\":heap32VectorToArray,\"init_ClassHandle\":init_ClassHandle,\"init_RegisteredPointer\":init_RegisteredPointer,\"init_embind\":init_embind,\"init_emval\":init_emval,\"integerReadValueFromPointer\":integerReadValueFromPointer,\"makeClassHandle\":makeClassHandle,\"makeLegalFunctionName\":makeLegalFunctionName,\"new_\":new_,\"nonConstNoSmartPtrRawPointerToWireType\":nonConstNoSmartPtrRawPointerToWireType,\"readLatin1String\":readLatin1String,\"registerType\":registerType,\"replacePublicSymbol\":replacePublicSymbol,\"requireHandle\":requireHandle,\"requireRegisteredType\":requireRegisteredType,\"runDestructor\":runDestructor,\"runDestructors\":runDestructors,\"setDelayFunction\":setDelayFunction,\"shallowCopyInternalPointer\":shallowCopyInternalPointer,\"simpleReadValueFromPointer\":simpleReadValueFromPointer,\"throwBindingError\":throwBindingError,\"throwInstanceAlreadyDeleted\":throwInstanceAlreadyDeleted,\"throwInternalError\":throwInternalError,\"throwUnboundTypeError\":throwUnboundTypeError,\"upcastPointer\":upcastPointer,\"whenDependentTypesAreResolved\":whenDependentTypesAreResolved,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR,\"tempDoublePtr\":tempDoublePtr,\"ABORT\":ABORT,\"STACKTOP\":STACKTOP,\"STACK_MAX\":STACK_MAX};var asm=Module[\"asm\"](Module.asmGlobalArg,Module.asmLibraryArg,buffer);Module[\"asm\"]=asm;var __GLOBAL__sub_I_bind_cpp=Module[\"__GLOBAL__sub_I_bind_cpp\"]=function(){return Module[\"asm\"][\"__GLOBAL__sub_I_bind_cpp\"].apply(null,arguments);};var __GLOBAL__sub_I_zstd_binding_cc=Module[\"__GLOBAL__sub_I_zstd_binding_cc\"]=function(){return Module[\"asm\"][\"__GLOBAL__sub_I_zstd_binding_cc\"].apply(null,arguments);};var ___cxa_can_catch=Module[\"___cxa_can_catch\"]=function(){return Module[\"asm\"][\"___cxa_can_catch\"].apply(null,arguments);};var ___cxa_demangle=Module[\"___cxa_demangle\"]=function(){return Module[\"asm\"][\"___cxa_demangle\"].apply(null,arguments);};var ___cxa_is_pointer_type=Module[\"___cxa_is_pointer_type\"]=function(){return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null,arguments);};var ___errno_location=Module[\"___errno_location\"]=function(){return Module[\"asm\"][\"___errno_location\"].apply(null,arguments);};var ___getTypeName=Module[\"___getTypeName\"]=function(){return Module[\"asm\"][\"___getTypeName\"].apply(null,arguments);};var _free=Module[\"_free\"]=function(){return Module[\"asm\"][\"_free\"].apply(null,arguments);};var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=function(){return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null,arguments);};var _llvm_ctlz_i64=Module[\"_llvm_ctlz_i64\"]=function(){return Module[\"asm\"][\"_llvm_ctlz_i64\"].apply(null,arguments);};var _malloc=Module[\"_malloc\"]=function(){return Module[\"asm\"][\"_malloc\"].apply(null,arguments);};var _memcpy=Module[\"_memcpy\"]=function(){return Module[\"asm\"][\"_memcpy\"].apply(null,arguments);};var _memmove=Module[\"_memmove\"]=function(){return Module[\"asm\"][\"_memmove\"].apply(null,arguments);};var _memset=Module[\"_memset\"]=function(){return Module[\"asm\"][\"_memset\"].apply(null,arguments);};var _sbrk=Module[\"_sbrk\"]=function(){return Module[\"asm\"][\"_sbrk\"].apply(null,arguments);};var establishStackSpace=Module[\"establishStackSpace\"]=function(){return Module[\"asm\"][\"establishStackSpace\"].apply(null,arguments);};var getTempRet0=Module[\"getTempRet0\"]=function(){return Module[\"asm\"][\"getTempRet0\"].apply(null,arguments);};var runPostSets=Module[\"runPostSets\"]=function(){return Module[\"asm\"][\"runPostSets\"].apply(null,arguments);};var setTempRet0=Module[\"setTempRet0\"]=function(){return Module[\"asm\"][\"setTempRet0\"].apply(null,arguments);};var setThrew=Module[\"setThrew\"]=function(){return Module[\"asm\"][\"setThrew\"].apply(null,arguments);};var stackAlloc=Module[\"stackAlloc\"]=function(){return Module[\"asm\"][\"stackAlloc\"].apply(null,arguments);};var _stackRestore=Module[\"stackRestore\"]=function(){return Module[\"asm\"][\"stackRestore\"].apply(null,arguments);};var _stackSave=Module[\"stackSave\"]=function(){return Module[\"asm\"][\"stackSave\"].apply(null,arguments);};var dynCall_i=Module[\"dynCall_i\"]=function(){return Module[\"asm\"][\"dynCall_i\"].apply(null,arguments);};var dynCall_ii=Module[\"dynCall_ii\"]=function(){return Module[\"asm\"][\"dynCall_ii\"].apply(null,arguments);};var dynCall_iii=Module[\"dynCall_iii\"]=function(){return Module[\"asm\"][\"dynCall_iii\"].apply(null,arguments);};var dynCall_iiii=Module[\"dynCall_iiii\"]=function(){return Module[\"asm\"][\"dynCall_iiii\"].apply(null,arguments);};var dynCall_iiiii=Module[\"dynCall_iiiii\"]=function(){return Module[\"asm\"][\"dynCall_iiiii\"].apply(null,arguments);};var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=function(){return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null,arguments);};var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=function(){return Module[\"asm\"][\"dynCall_iiiiiii\"].apply(null,arguments);};var dynCall_v=Module[\"dynCall_v\"]=function(){return Module[\"asm\"][\"dynCall_v\"].apply(null,arguments);};var dynCall_vi=Module[\"dynCall_vi\"]=function(){return Module[\"asm\"][\"dynCall_vi\"].apply(null,arguments);};var dynCall_vii=Module[\"dynCall_vii\"]=function(){return Module[\"asm\"][\"dynCall_vii\"].apply(null,arguments);};var dynCall_viii=Module[\"dynCall_viii\"]=function(){return Module[\"asm\"][\"dynCall_viii\"].apply(null,arguments);};var dynCall_viiii=Module[\"dynCall_viiii\"]=function(){return Module[\"asm\"][\"dynCall_viiii\"].apply(null,arguments);};var dynCall_viiiii=Module[\"dynCall_viiiii\"]=function(){return Module[\"asm\"][\"dynCall_viiiii\"].apply(null,arguments);};var dynCall_viiiiii=Module[\"dynCall_viiiiii\"]=function(){return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null,arguments);};Module[\"asm\"]=asm;Module[\"FS\"]=FS;Module[\"then\"]=function(func){if(Module[\"calledRun\"]){func(Module);}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module);};}return Module;};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status;}ExitStatus.prototype=new Error();ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller;};function run(args){args=args||Module[\"arguments\"];if(runDependencies>0){return;}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun();}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\");},1);doRun();},1);}else{doRun();}}Module[\"run\"]=run;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what);}if(what!==undefined){out(what);err(what);what=JSON.stringify(what);}else{what=\"\";}ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()();}}Module[\"noExitRuntime\"]=true;run();return Module;};}();if((typeof exports==='undefined'?'undefined':_typeof(exports))==='object'&&(typeof module==='undefined'?'undefined':_typeof(module))==='object')module.exports=Module;else if(typeof define==='function'&&define['amd'])define([],function(){return Module;});else if((typeof exports==='undefined'?'undefined':_typeof(exports))==='object')exports[\"Module\"]=Module;\n\n}).call(this,require('_process'),require(\"buffer\").Buffer,\"/lib\")\n},{\"_process\":126,\"buffer\":54,\"crypto\":63,\"fs\":9,\"path\":119}],6:[function(require,module,exports){\n(function (process,Buffer,__dirname){\n'use strict';var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var Module=function(){var _scriptDir=typeof document!=='undefined'&&document.currentScript?document.currentScript.src:undefined;return function(Module){Module=Module||{};var Module;if(!Module)Module=typeof Module!=='undefined'?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key];}}Module[\"arguments\"]=[];Module[\"thisProgram\"]=\"./this.program\";Module[\"quit\"]=function(status,toThrow){throw toThrow;};Module[\"preRun\"]=[];Module[\"postRun\"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=(typeof window==='undefined'?'undefined':_typeof(window))===\"object\";ENVIRONMENT_IS_WORKER=typeof importScripts===\"function\";ENVIRONMENT_IS_NODE=(typeof process==='undefined'?'undefined':_typeof(process))===\"object\"&&typeof require===\"function\"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory);}else{return scriptDirectory+path;}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+\"/\";var nodeFS;var nodePath;Module[\"read\"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require(\"fs\");if(!nodePath)nodePath=require(\"path\");filename=nodePath[\"normalize\"](filename);ret=nodeFS[\"readFileSync\"](filename);}return binary?ret:ret.toString();};Module[\"readBinary\"]=function readBinary(filename){var ret=Module[\"read\"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret);}assert(ret.buffer);return ret;};if(process[\"argv\"].length>1){Module[\"thisProgram\"]=process[\"argv\"][1].replace(/\\\\/g,\"/\");}Module[\"arguments\"]=process[\"argv\"].slice(2);process[\"on\"](\"uncaughtException\",function(ex){if(!(ex instanceof ExitStatus)){throw ex;}});process[\"on\"](\"unhandledRejection\",function(reason,p){process[\"exit\"](1);});Module[\"quit\"]=function(status){process[\"exit\"](status);};Module[\"inspect\"]=function(){return\"[Emscripten Module object]\";};}else if(ENVIRONMENT_IS_SHELL){if(typeof read!=\"undefined\"){Module[\"read\"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data);}return read(f);};}Module[\"readBinary\"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data;}if(typeof readbuffer===\"function\"){return new Uint8Array(readbuffer(f));}data=read(f,\"binary\");assert((typeof data==='undefined'?'undefined':_typeof(data))===\"object\");return data;};if(typeof scriptArgs!=\"undefined\"){Module[\"arguments\"]=scriptArgs;}else if(typeof arguments!=\"undefined\"){Module[\"arguments\"]=arguments;}if(typeof quit===\"function\"){Module[\"quit\"]=function(status){quit(status);};}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WEB){if(document.currentScript){scriptDirectory=document.currentScript.src;}}else{scriptDirectory=self.location.href;}if(_scriptDir){scriptDirectory=_scriptDir;}if(scriptDirectory.indexOf(\"blob:\")!==0){scriptDirectory=scriptDirectory.split(\"/\").slice(0,-1).join(\"/\")+\"/\";}else{scriptDirectory=\"\";}Module[\"read\"]=function shell_read(url){try{var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);xhr.send(null);return xhr.responseText;}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data);}throw err;}};if(ENVIRONMENT_IS_WORKER){Module[\"readBinary\"]=function readBinary(url){try{var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response);}catch(err){var data=tryParseAsDataURI(url);if(data){return data;}throw err;}};}Module[\"readAsync\"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return;}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return;}onerror();};xhr.onerror=onerror;xhr.send(null);};Module[\"setWindowTitle\"]=function(title){document.title=title;};}else{}var out=Module[\"print\"]||(typeof console!==\"undefined\"?console.log.bind(console):typeof print!==\"undefined\"?print:null);var err=Module[\"printErr\"]||(typeof printErr!==\"undefined\"?printErr:typeof console!==\"undefined\"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key];}}moduleOverrides=undefined;var STACK_ALIGN=16;function staticAlloc(size){var ret=STATICTOP;STATICTOP=STATICTOP+size+15&-16;return ret;}function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0;}}return ret;}function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;var ret=size=Math.ceil(size/factor)*factor;return ret;}function getNativeTypeSize(type){switch(type){case\"i1\":case\"i8\":return 1;case\"i16\":return 2;case\"i32\":return 4;case\"i64\":return 8;case\"float\":return 4;case\"double\":return 8;default:{if(type[type.length-1]===\"*\"){return 4;}else if(type[0]===\"i\"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8;}else{return 0;}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text);}}var jsCallStartIndex=1;var functionPointers=new Array(0);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module[\"dynCall_\"+sig].apply(null,[ptr].concat(args));}else{return Module[\"dynCall_\"+sig].call(null,ptr);}}var GLOBAL_BASE=8;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort(\"Assertion failed: \"+text);}}function getCFunc(ident){var func=Module[\"_\"+ident];assert(func,\"Cannot call unknown function \"+ident+\", make sure it is exported\");return func;}var JSfuncs={\"stackSave\":function stackSave(){_stackSave();},\"stackRestore\":function stackRestore(){_stackRestore();},\"arrayToC\":function arrayToC(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret;},\"stringToC\":function stringToC(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len);}return ret;}};var toC={\"string\":JSfuncs[\"stringToC\"],\"array\":JSfuncs[\"arrayToC\"]};function ccall(ident,returnType,argTypes,args,opts){function convertReturnValue(ret){if(returnType===\"string\")return Pointer_stringify(ret);if(returnType===\"boolean\")return Boolean(ret);return ret;}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=_stackSave();cArgs[i]=converter(args[i]);}else{cArgs[i]=args[i];}}}var ret=func.apply(null,cArgs);ret=convertReturnValue(ret);if(stack!==0)_stackRestore(stack);return ret;}function setValue(ptr,value,type,noSafe){type=type||\"i8\";if(type.charAt(type.length-1)===\"*\")type=\"i32\";switch(type){case\"i1\":HEAP8[ptr>>0]=value;break;case\"i8\":HEAP8[ptr>>0]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;default:abort(\"invalid type for setValue: \"+type);}}var ALLOC_STATIC=2;var ALLOC_NONE=4;function Pointer_stringify(ptr,length){if(length===0||!ptr)return\"\";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break;}if(!length)length=i;var ret=\"\";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK;}return ret;}return UTF8ToString(ptr);}var UTF8Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf8\"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr]){++endPtr;}if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr));}else{var u0,u1,u2,u3,u4,u5;var str=\"\";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue;}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue;}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2;}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3;}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4;}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5;}}}if(u0<65536){str+=String.fromCharCode(u0);}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023);}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr);}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023;}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u;}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63;}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63;}}outU8Array[outIdx]=0;return outIdx-startIdx;}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len;}else if(u<=2047){len+=2;}else if(u<=65535){len+=3;}else if(u<=2097151){len+=4;}else if(u<=67108863){len+=5;}else{len+=6;}}return len;}var UTF16Decoder=typeof TextDecoder!==\"undefined\"?new TextDecoder(\"utf-16le\"):undefined;function demangle(func){var __cxa_demangle_func=Module[\"___cxa_demangle\"]||Module[\"__cxa_demangle\"];assert(__cxa_demangle_func);try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(HEAP32[status>>2]===0&&ret){return Pointer_stringify(ret);}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret);}return func;}function demangleAll(text){var regex=/__Z[\\w\\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:x+\" [\"+y+\"]\";});}function jsStackTrace(){var err=new Error();if(!err.stack){try{throw new Error(0);}catch(e){err=e;}if(!err.stack){return\"(no stack trace available)\";}}return err.stack.toString();}function stackTrace(){var js=jsStackTrace();if(Module[\"extraStackTrace\"])js+=\"\\n\"+Module[\"extraStackTrace\"]();return demangleAll(js);}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module[\"HEAP8\"]=HEAP8=new Int8Array(buffer);Module[\"HEAP16\"]=HEAP16=new Int16Array(buffer);Module[\"HEAP32\"]=HEAP32=new Int32Array(buffer);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(buffer);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(buffer);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(buffer);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(buffer);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(buffer);}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){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  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 \");}function enlargeMemory(){abortOnCannotGrowMemory();}var TOTAL_STACK=Module[\"TOTAL_STACK\"]||5242880;var TOTAL_MEMORY=Module[\"TOTAL_MEMORY\"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)err(\"TOTAL_MEMORY should be larger than TOTAL_STACK, was \"+TOTAL_MEMORY+\"! (TOTAL_STACK=\"+TOTAL_STACK+\")\");if(Module[\"buffer\"]){buffer=Module[\"buffer\"];}else{{buffer=new ArrayBuffer(TOTAL_MEMORY);}Module[\"buffer\"]=buffer;}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY;}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback==\"function\"){callback();continue;}var func=callback.func;if(typeof func===\"number\"){if(callback.arg===undefined){Module[\"dynCall_v\"](func);}else{Module[\"dynCall_vi\"](func,callback.arg);}}else{func(callback.arg===undefined?null:callback.arg);}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift());}}callRuntimeCallbacks(__ATPRERUN__);}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__);}function preMain(){callRuntimeCallbacks(__ATMAIN__);}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true;}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift());}}callRuntimeCallbacks(__ATPOSTRUN__);}function addOnPreRun(cb){__ATPRERUN__.unshift(cb);}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb);}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer);}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i);}if(!dontAddNull)HEAP8[buffer>>0]=0;}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id;}function addRunDependency(id){runDependencies++;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies);}}function removeRunDependency(id){runDependencies--;if(Module[\"monitorRunDependencies\"]){Module[\"monitorRunDependencies\"](runDependencies);}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null;}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback();}}}Module[\"preloadedImages\"]={};Module[\"preloadedAudios\"]={};var memoryInitializer=null;var dataURIPrefix=\"data:application/octet-stream;base64,\";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0;}STATIC_BASE=GLOBAL_BASE;STATICTOP=STATIC_BASE+22272;__ATINIT__.push({func:function func(){__GLOBAL__sub_I_zstd_binding_cc();}},{func:function func(){__GLOBAL__sub_I_bind_cpp();}});memoryInitializer=\"data:application/octet-stream;base64,AAAAAAAAAACwKgAASCcAAAgrAADQKgAAwCoAADAnAAAIKwAA0CoAAPAqAADwJwAAMCcAADAnAADwKgAAAAAAAAAAAAAAAAAA8CoAAPAnAAAwJwAAMCcAAPAqAADwJwAAMCcAADAnAABwJwAAAAAAAAAAAAAAAAAA8CoAAPAnAAAwJwAAMCcAAKgnAAAAAAAAAAAAAAAAAADAKgAACCgAAHAmAABwJgAAwCoAADAoAABwJgAAcCYAAAAAAABrOAcADbIHAJzyBwBwZAgAYK4KALBxCwAwqgwAEwAAAAwAAAANAAAAAQAAAAYAAAABAAAAAQAAABMAAAANAAAADgAAAAEAAAAHAAAAAQAAAAEAAAATAAAADwAAABAAAAABAAAABgAAAAEAAAABAAAAFAAAABAAAAARAAAAAQAAAAUAAAAIAAAAAgAAABQAAAARAAAAEgAAAAEAAAAFAAAACAAAAAIAAAAUAAAAEQAAABIAAAACAAAABQAAABAAAAADAAAAFQAAABEAAAATAAAAAgAAAAUAAAAQAAAABAAAABUAAAASAAAAEwAAAAMAAAAFAAAAEAAAAAQAAAAVAAAAEgAAABQAAAADAAAABQAAABAAAAAFAAAAFQAAABMAAAAUAAAAAwAAAAUAAAAQAAAABQAAABUAAAATAAAAFQAAAAQAAAAFAAAAEAAAAAUAAAAWAAAAFAAAABYAAAAEAAAABQAAABAAAAAFAAAAFgAAABQAAAAWAAAABQAAAAUAAAAQAAAABQAAABYAAAAVAAAAFgAAAAQAAAAFAAAAIAAAAAYAAAAWAAAAFQAAABYAAAAFAAAABQAAACAAAAAGAAAAFgAAABYAAAAWAAAABgAAAAUAAAAgAAAABgAAABYAAAAVAAAAFgAAAAQAAAAFAAAAMAAAAAcAAAAXAAAAFgAAABYAAAAEAAAABAAAADAAAAAHAAAAFwAAABYAAAAWAAAABQAAAAMAAABAAAAABwAAABcAAAAXAAAAFgAAAAcAAAADAAAAgAAAAAcAAAAZAAAAGQAAABcAAAAHAAAAAwAAAIAAAAAIAAAAGgAAABoAAAAYAAAABwAAAAMAAAAAAQAACAAAABsAAAAbAAAAGQAAAAkAAAADAAAAAAIAAAgAAAASAAAADAAAAA0AAAABAAAABQAAAAEAAAABAAAAEgAAAA0AAAAOAAAAAQAAAAYAAAABAAAAAQAAABIAAAAOAAAADQAAAAEAAAAFAAAACAAAAAIAAAASAAAAEAAAAA8AAAABAAAABQAAAAgAAAACAAAAEgAAAA8AAAARAAAAAQAAAAUAAAAIAAAAAwAAABIAAAAQAAAAEQAAAAQAAAAFAAAACAAAAAMAAAASAAAAEAAAABEAAAADAAAABQAAAAgAAAAEAAAAEgAAABEAAAARAAAABAAAAAQAAAAIAAAABAAAABIAAAARAAAAEQAAAAQAAAAEAAAACAAAAAUAAAASAAAAEQAAABEAAAAFAAAABAAAAAgAAAAFAAAAEgAAABEAAAARAAAABgAAAAQAAAAIAAAABQAAABIAAAASAAAAEQAAAAYAAAAEAAAACAAAAAUAAAASAAAAEgAAABEAAAAFAAAABAAAAAgAAAAGAAAAEgAAABMAAAARAAAABwAAAAQAAAAIAAAABgAAABIAAAASAAAAEgAAAAQAAAAEAAAAEAAAAAcAAAASAAAAEgAAABIAAAAEAAAAAwAAABAAAAAHAAAAEgAAABMAAAASAAAABgAAAAMAAAAgAAAABwAAABIAAAATAAAAEgAAAAgAAAADAAAAQAAAAAcAAAASAAAAEwAAABIAAAAJAAAAAwAAAIAAAAAHAAAAEgAAABMAAAASAAAACgAAAAMAAAAAAQAABwAAABIAAAATAAAAEgAAAAsAAAADAAAAAAIAAAgAAAASAAAAEwAAABIAAAAMAAAAAwAAAAACAAAIAAAAEgAAABMAAAASAAAADQAAAAMAAAAAAgAACAAAABEAAAAMAAAADAAAAAEAAAAFAAAAAQAAAAEAAAARAAAADAAAAA0AAAABAAAABgAAAAEAAAABAAAAEQAAAA0AAAAQAAAAAQAAAAUAAAABAAAAAQAAABEAAAAQAAAAEAAAAAIAAAAFAAAACAAAAAIAAAARAAAADQAAAA8AAAADAAAABAAAAAgAAAADAAAAEQAAAA8AAAARAAAABAAAAAQAAAAIAAAAAwAAABEAAAAQAAAAEQAAAAMAAAAEAAAACAAAAAQAAAARAAAADwAAABEAAAAEAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAABAAAAAQAAAAIAAAABQAAABEAAAARAAAAEQAAAAUAAAAEAAAACAAAAAUAAAARAAAAEQAAABEAAAAGAAAABAAAAAgAAAAFAAAAEQAAABEAAAARAAAABwAAAAQAAAAIAAAABQAAABEAAAARAAAAEQAAAAgAAAAEAAAACAAAAAUAAAARAAAAEgAAABEAAAAGAAAABAAAAAgAAAAGAAAAEQAAABEAAAARAAAABwAAAAMAAAAIAAAABwAAABEAAAARAAAAEQAAAAcAAAADAAAAEAAAAAcAAAARAAAAEgAAABEAAAAHAAAAAwAAACAAAAAHAAAAEQAAABIAAAARAAAABwAAAAMAAABAAAAABwAAABEAAAASAAAAEQAAAAcAAAADAAAAAAEAAAcAAAARAAAAEgAAABEAAAAIAAAAAwAAAAABAAAHAAAAEQAAABIAAAARAAAACQAAAAMAAAAAAQAACAAAABEAAAASAAAAEQAAAAoAAAADAAAAAAEAAAgAAAARAAAAEgAAABEAAAALAAAAAwAAAAACAAAIAAAADgAAAAwAAAANAAAAAQAAAAUAAAABAAAAAQAAAA4AAAAOAAAADgAAAAEAAAAGAAAAAQAAAAEAAAAOAAAADgAAAA4AAAABAAAABAAAAAEAAAABAAAADgAAAA4AAAAOAAAAAQAAAAQAAAAGAAAAAgAAAA4AAAAOAAAADgAAAAQAAAAEAAAABgAAAAMAAAAOAAAADgAAAA4AAAADAAAABAAAAAYAAAAEAAAADgAAAA4AAAAOAAAABAAAAAQAAAAGAAAABQAAAA4AAAAOAAAADgAAAAUAAAAEAAAABgAAAAUAAAAOAAAADgAAAA4AAAAGAAAABAAAAAYAAAAFAAAADgAAAA8AAAAOAAAABgAAAAQAAAAGAAAABgAAAA4AAAAPAAAADgAAAAMAAAADAAAABgAAAAcAAAAOAAAADwAAAA4AAAAGAAAAAwAAAAgAAAAHAAAADgAAAA8AAAAOAAAABgAAAAMAAAAQAAAABwAAAA4AAAAPAAAADgAAAAYAAAADAAAAGAAAAAcAAAAOAAAADwAAAA8AAAAGAAAAAwAAADAAAAAHAAAADgAAAA8AAAAPAAAABgAAAAMAAABAAAAABwAAAA4AAAAPAAAADwAAAAYAAAADAAAAYAAAAAcAAAAOAAAADwAAAA8AAAAGAAAAAwAAAIAAAAAHAAAADgAAAA8AAAAPAAAABgAAAAMAAAAAAQAABwAAAA4AAAAPAAAADwAAAAcAAAADAAAAAAEAAAcAAAAOAAAADwAAAA8AAAAIAAAAAwAAAAABAAAIAAAADgAAAA8AAAAPAAAACQAAAAMAAAAAAQAACAAAAA4AAAAPAAAADwAAAAoAAAADAAAAAAEAAAgAAAAAAAAAAQAAAAMAAAAHAAAADwAAAB8AAAA/AAAAfwAAAP8AAAD/AQAA/wMAAP8HAAD/DwAA/x8AAP8/AAD/fwAA//8AAP//AQD//wMA//8HAP//DwD//x8A//8/AP//fwD///8A////Af///wP///8H////D////x////8/////fwEAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAAAAAAAAAAAAAECAwQFBgcICQoLDA0ODxAQERESEhMTFBQUFBUVFRUWFhYWFhYWFhcXFxcXFxcXGBgYGBgYGBgYGBgYGBgYGAABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICAhISIiIyMkJCQkJSUlJSYmJiYmJiYmJycnJycnJycoKCgoKCgoKCgoKCgoKCgoKSkpKSkpKSkpKSkpKSkpKSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqBAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AAAAAAAAAAABAAEAAQABAAEAAQACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD/////////////AAAAAAAAAQAEAAMAAgACAAIAAgACAAIAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD//////////////////wAAAAAAAAAAAAABAAAAAgAAAAQAAAAAAAAAAgAAAAQAAAAIAAAAAAAAAAEAAAACAAAACAAAAAEAAQEGAAAAAAAABAAAAAAQAAAEAAAAACAAAAUBAAAAAAAABQMAAAAAAAAFBAAAAAAAAAUGAAAAAAAABQcAAAAAAAAFCQAAAAAAAAUKAAAAAAAABQwAAAAAAAAGDgAAAAAAAQUQAAAA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AxAAAAMgAAADQAAAA4AAAAMAAQAAAAAAAAAAAAAAAAAEAAMAAgACAAIAAgACAAIAAgACAAIAAgACAAEAAQABAAIAAgACAAIAAgACAAIAAgACAAMAAgABAAEAAQABAAEA//////////8AAAAAAAAAAAEAAQABAAEAAQABAAIAAgACAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP////////////8AAAAAAAABAAQAAwACAAIAAgACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAP//////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADwAAAB8AAAA/AAAAfwAAAP8AAAD/AQAA/wMAAP8HAAD/DwAA/x8AAP8/AAD/fwAA//8AAP//AQD//wMA//8HAP//DwD//x8A//8/AP//fwD///8A////Af///wMBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACIAAAAkAAAAJgAAACgAAAAsAAAAMAAAADgAAABAAAAAUAAAAGAAAACAAAAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAASAAAAFAAAABYAAAAYAAAAHAAAACAAAAAoAAAAMAAAAEAAAACAAAAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAEAAAACAAAAAAAEABAADAAIAAgACAAIAAgACAAIAAgACAAIAAgABAAEAAQACAAIAAgACAAIAAgACAAIAAgADAAIAAQABAAEAAQABAP//////////AAAAAAAAAAABAAEAAQABAAEAAQACAAIAAgABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD/////////////AAAAAAAAAQAEAAMAAgACAAIAAgACAAIAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQD//////////////////wAAAAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAAAAAAAAAAEAAAACAAAAAQAAAAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQAAAAIBAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAACAAAAAgAAAAAAAAAAAAAAAQAAAAEAAAACAAAAAgAAACYAAACCAAAAIQUAAEoAAABnCAAAJgAAAMABAACAAAAASQUAAEoAAAC+CAAAKQAAACwCAACAAAAASQUAAEoAAAC+CAAALwAAAMoCAACAAAAAigUAAEoAAACECQAANQAAAHMDAACAAAAAnQUAAEoAAACgCQAAPQAAAIEDAACAAAAA6wUAAEsAAAA+CgAARAAAAJ4DAACAAAAATQYAAEsAAACqCgAASwAAALMDAACAAAAAwQYAAE0AAAAfDQAATQAAAFMEAACAAAAAIwgAAFEAAACmDwAAVAAAAJkEAACAAAAASwkAAFcAAACxEgAAWAAAANoEAACAAAAAbwkAAF0AAAAjFAAAVAAAAEUFAACAAAAAVAoAAGoAAACMFAAAagAAAK8FAACAAAAAdgkAAHwAAABOEAAAfAAAANICAACAAAAAYwcAAJEAAACQBwAAkgAAAAEAAAACAAAAAwAAAAQAAAAHAAAACAAAAA8AAAAQAAAAHwAAACAAAAA/AAAAQAAAAH8AAACAAAAAAAAAAAAAAAARAAoAERERAAAAAAUAAAAAAAAJAAAAAAsAAAAAAAAAABEADwoREREDCgcAARMJCwsAAAkGCwAACwAGEQAAABEREQAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAARAAoKERERAAoAAAIACQsAAAAJAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA0AAAAEDQAAAAAJDgAAAAAADgAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAPAAAAAA8AAAAACRAAAAAAABAAABAAABIAAAASEhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAABISEgAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAoAAAAACgAAAAAJCwAAAAAACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAADAxMjM0NTY3ODlBQkNERUZUISIZDQECAxFLHAwQBAsdEh4naG5vcHFiIAUGDxMUFRoIFgcoJBcYCQoOGx8lI4OCfSYqKzw9Pj9DR0pNWFlaW1xdXl9gYWNkZWZnaWprbHJzdHl6e3wAAAAAAAAAAABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAAAAAAHQxAAC1MwAAdDEAAFY0AACcMQAAyDMAAHgmAAAAAAAAdDEAAJg0AACcMQAA2zQAAHgmAAAAAAAAdDEAAGI1AACcMQAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCoAADIAAAAzAAAAHgAAAAEAAAAAAAAASCoAADQAAAA1AAAANgAAADcAAAAFAAAAAQAAAAEAAAABAAAAAAAAAHAqAAA0AAAAOAAAADYAAAA3AAAABQAAAAIAAAACAAAAAgAAAAAAAACgKgAANAAAADkAAAA2AAAANwAAAAYAAAAAAAAAkCoAADQAAAA6AAAANgAAADcAAAAHAAAAAAAAACArAAA0AAAAOwAAADYAAAA3AAAACAAAAAAAAAAwKwAANAAAADwAAAA2AAAANwAAAAUAAAADAAAAAwAAAAMAAABkdW1teQByYgBsZW5ndGgAYnVmZmVyAGNvbnN0cnVjdG9yAHNldABIRUFQVTgAVmVjdG9yVTgAY2xvbmVUb1ZlY3RvcgBjbG9uZUFzVHlwZWRBcnJheQB0b1R5cGVkQXJyYXlWaWV3AFpzdGRDb21wcmVzc2lvbkRpY3QAY3JlYXRlQ29tcHJlc3Npb25EaWN0AFpzdGREZWNvbXByZXNzaW9uRGljdABjcmVhdGVEZWNvbXByZXNzaW9uRGljdABac3RkQ29kZWMAY29tcHJlc3NCb3VuZABjb250ZW50U2l6ZQBjb21wcmVzcwBkZWNvbXByZXNzAGNvbXByZXNzVXNpbmdEaWN0AGRlY29tcHJlc3NVc2luZ0RpY3QAWnN0ZENvbXByZXNzU3RyZWFtQmluZGluZwBiZWdpbgBiZWdpblVzaW5nRGljdAB0cmFuc2Zvcm0AZmx1c2gAZW5kAFpzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZwBOMTBlbXNjcmlwdGVuM3ZhbEUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4yNVpzdGRDb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0UzJF8wTlNfOWFsbG9jYXRvcklTNV9FRUZ2UktOU182dmVjdG9ySWhOUzZfSWhFRUVFRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UktOU182dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFRUVFAFpOMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nOVRyYW5zZm9ybUVOMTBlbXNjcmlwdGVuM3ZhbEVTMV9FMyRfMABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfMU5TXzlhbGxvY2F0b3JJUzVfRUVGdlJLTlNfNnZlY3RvckloTlM2X0loRUVFRUVFRQBaTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfMQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZzNFbmRFTjEwZW1zY3JpcHRlbjN2YWxFRTMkXzJOU185YWxsb2NhdG9ySVM1X0VFRnZSS05TXzZ2ZWN0b3JJaE5TNl9JaEVFRUVFRUUAWk4yNVpzdGRDb21wcmVzc1N0cmVhbUJpbmRpbmczRW5kRU4xMGVtc2NyaXB0ZW4zdmFsRUUzJF8yAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVM0X0UzJF8zTlNfOWFsbG9jYXRvcklTNV9FRUZ2UktOU182dmVjdG9ySWhOUzZfSWhFRUVFRUVFAFpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc5VHJhbnNmb3JtRU4xMGVtc2NyaXB0ZW4zdmFsRVMxX0UzJF8zAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjdac3RkRGVjb21wcmVzc1N0cmVhbUJpbmRpbmc1Rmx1c2hFTjEwZW1zY3JpcHRlbjN2YWxFRTMkXzROU185YWxsb2NhdG9ySVM1X0VFRnZSS05TXzZ2ZWN0b3JJaE5TNl9JaEVFRUVFRUUAWk4yN1pzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZzVGbHVzaEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNABOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nM0VuZEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNU5TXzlhbGxvY2F0b3JJUzVfRUVGdlJLTlNfNnZlY3RvckloTlM2X0loRUVFRUVFRQBaTjI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nM0VuZEVOMTBlbXNjcmlwdGVuM3ZhbEVFMyRfNQBwdXNoX2JhY2sAcmVzaXplAHNpemUAZ2V0AE5TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAE5TdDNfXzIxM19fdmVjdG9yX2Jhc2VJaE5TXzlhbGxvY2F0b3JJaEVFRUUATlN0M19fMjIwX192ZWN0b3JfYmFzZV9jb21tb25JTGIxRUVFAFBOU3QzX18yNnZlY3RvckloTlNfOWFsbG9jYXRvckloRUVFRQBQS05TdDNfXzI2dmVjdG9ySWhOU185YWxsb2NhdG9ySWhFRUVFAGlpAHYAdmkAdmlpaQB2aWlpaQBpaWkAaWlpaQBpaWlpaQAxOVpzdGRDb21wcmVzc2lvbkRpY3QAOFJlc291cmNlSTEyWlNURF9DRGljdF9zRQBQMTlac3RkQ29tcHJlc3Npb25EaWN0AFBLMTlac3RkQ29tcHJlc3Npb25EaWN0ADIxWnN0ZERlY29tcHJlc3Npb25EaWN0ADhSZXNvdXJjZUkxMlpTVERfRERpY3Rfc0UAUDIxWnN0ZERlY29tcHJlc3Npb25EaWN0AFBLMjFac3RkRGVjb21wcmVzc2lvbkRpY3QAOVpzdGRDb2RlYwBQOVpzdGRDb2RlYwBQSzlac3RkQ29kZWMAaWlpaWlpADI1WnN0ZENvbXByZXNzU3RyZWFtQmluZGluZwBQMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nAFBLMjVac3RkQ29tcHJlc3NTdHJlYW1CaW5kaW5nADI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nAFAyN1pzdGREZWNvbXByZXNzU3RyZWFtQmluZGluZwBQSzI3WnN0ZERlY29tcHJlc3NTdHJlYW1CaW5kaW5nAFBGdlAxMVpTVERfQ0N0eF9zRQBGdlAxMVpTVERfQ0N0eF9zRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZQMTFaU1REX0NDdHhfc0VOU185YWxsb2NhdG9ySVM1X0VFUzRfRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZQMTFaU1REX0NDdHhfc0VFRQBQRnZQMTFaU1REX0RDdHhfc0UARnZQMTFaU1REX0RDdHhfc0UATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2UDExWlNURF9EQ3R4X3NFTlNfOWFsbG9jYXRvcklTNV9FRVM0X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UDExWlNURF9EQ3R4X3NFRUUAUEZ2UDEyWlNURF9DRGljdF9zRQBGdlAxMlpTVERfQ0RpY3Rfc0UATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJUEZ2UDEyWlNURF9DRGljdF9zRU5TXzlhbGxvY2F0b3JJUzVfRUVTNF9FRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlAxMlpTVERfQ0RpY3Rfc0VFRQBQRnZQMTJaU1REX0REaWN0X3NFAEZ2UDEyWlNURF9ERGljdF9zRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0lQRnZQMTJaU1REX0REaWN0X3NFTlNfOWFsbG9jYXRvcklTNV9FRVM0X0VFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZ2UDEyWlNURF9ERGljdF9zRUVFAFpOMThac3RkQ29tcHJlc3NTdHJlYW01QmVnaW5FaUUzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMThac3RkQ29tcHJlc3NTdHJlYW01QmVnaW5FaUUzJF8wTlNfOWFsbG9jYXRvcklTM19FRUZtUDExWlNURF9DQ3R4X3NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRm1QMTFaU1REX0NDdHhfc0VFRQBaTjE4WnN0ZENvbXByZXNzU3RyZWFtNUJlZ2luRVJLMTlac3RkQ29tcHJlc3Npb25EaWN0RTMkXzEATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk4xOFpzdGRDb21wcmVzc1N0cmVhbTVCZWdpbkVSSzE5WnN0ZENvbXByZXNzaW9uRGljdEUzJF8xTlNfOWFsbG9jYXRvcklTNl9FRUZtUDExWlNURF9DQ3R4X3NFRUUAWk4yMFpzdGREZWNvbXByZXNzU3RyZWFtNUJlZ2luRXZFMyRfMgBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjIwWnN0ZERlY29tcHJlc3NTdHJlYW01QmVnaW5FdkUzJF8yTlNfOWFsbG9jYXRvcklTM19FRUZtUDExWlNURF9EQ3R4X3NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRm1QMTFaU1REX0RDdHhfc0VFRQBaTjIwWnN0ZERlY29tcHJlc3NTdHJlYW01QmVnaW5FUksyMVpzdGREZWNvbXByZXNzaW9uRGljdEUzJF8zAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpOMjBac3RkRGVjb21wcmVzc1N0cmVhbTVCZWdpbkVSSzIxWnN0ZERlY29tcHJlc3Npb25EaWN0RTMkXzNOU185YWxsb2NhdG9ySVM2X0VFRm1QMTFaU1REX0RDdHhfc0VFRQBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0l3TlNfMTFjaGFyX3RyYWl0c0l3RUVOU185YWxsb2NhdG9ySXdFRUVFAE5TdDNfXzIyMV9fYmFzaWNfc3RyaW5nX2NvbW1vbklMYjFFRUUATlN0M19fMjEyYmFzaWNfc3RyaW5nSWhOU18xMWNoYXJfdHJhaXRzSWhFRU5TXzlhbGxvY2F0b3JJaEVFRUUATlN0M19fMjEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOAHJ3YQBzdGQ6OmJhZF9mdW5jdGlvbl9jYWxsAE5TdDNfXzIxN2JhZF9mdW5jdGlvbl9jYWxsRQB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzOiAlcwB0ZXJtaW5hdGluZyB3aXRoICVzIGV4Y2VwdGlvbiBvZiB0eXBlICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZm9yZWlnbiBleGNlcHRpb24AdGVybWluYXRpbmcAdW5jYXVnaHQAU3Q5ZXhjZXB0aW9uAE4xMF9fY3h4YWJpdjExNl9fc2hpbV90eXBlX2luZm9FAFN0OXR5cGVfaW5mbwBOMTBfX2N4eGFiaXYxMjBfX3NpX2NsYXNzX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19jbGFzc190eXBlX2luZm9FAHB0aHJlYWRfb25jZSBmYWlsdXJlIGluIF9fY3hhX2dldF9nbG9iYWxzX2Zhc3QoKQBjYW5ub3QgY3JlYXRlIHB0aHJlYWQga2V5IGZvciBfX2N4YV9nZXRfZ2xvYmFscygpAGNhbm5vdCB6ZXJvIG91dCB0aHJlYWQgdmFsdWUgZm9yIF9fY3hhX2dldF9nbG9iYWxzKCkAdGVybWluYXRlX2hhbmRsZXIgdW5leHBlY3RlZGx5IHJldHVybmVkAE4xMF9fY3h4YWJpdjExOV9fcG9pbnRlcl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fcGJhc2VfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMjNfX2Z1bmRhbWVudGFsX3R5cGVfaW5mb0UAdgBEbgBiAGMAaABhAHMAdABpAGoAbQBmAGQATjEwX19jeHhhYml2MTIwX19mdW5jdGlvbl90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0UAIGNvbnN0ACB2b2xhdGlsZQAgcmVzdHJpY3QAIGNvbXBsZXgAIGltYWdpbmFyeQAgWwAgKAApACgAJiYAb2JqY19vYmplY3Q8ACoAJgBvYmpjcHJvdG8AIAA8AD4AIHZlY3RvclsAXQBwaXhlbCB2ZWN0b3JbACY9AD0ALAB+ADo6AGRlbGV0ZVtdIABkZWxldGUgAC8ALz0AXgBePQA9PQA+PQApWwA8PQA8PAA8PD0ALQAtPQAqPQAtLQApLS0AIT0AIQB8fAB8AHw9AC0+KgArACs9ACsrACkrKwApID8gKAApIDogKAAlACU9AD4+AD4+PQB0aHJvdwB0aHJvdyAAdHlwZWlkKABzaXplb2YuLi4oACwgAHNpemVvZiAoAHN0YXRpY19jYXN0PAA+KAByZWludGVycHJldF9jYXN0PAAtPgBub2V4Y2VwdCAoAFtdIAApIAAuAC4qAHN0ZDo6AG9wZXJhdG9yJiYAb3BlcmF0b3ImAG9wZXJhdG9yJj0Ab3BlcmF0b3I9AG9wZXJhdG9yKCkAb3BlcmF0b3IsAG9wZXJhdG9yfgBvcGVyYXRvciAAb3BlcmF0b3IgZGVsZXRlW10Ab3BlcmF0b3IqAG9wZXJhdG9yLwBvcGVyYXRvci89AG9wZXJhdG9yXgBvcGVyYXRvcl49AG9wZXJhdG9yPT0Ab3BlcmF0b3I+PQBvcGVyYXRvcj4Ab3BlcmF0b3JbXQBvcGVyYXRvcjw9AG9wZXJhdG9yIiIgAG9wZXJhdG9yPDwAb3BlcmF0b3I8PD0Ab3BlcmF0b3I8AG9wZXJhdG9yLQBvcGVyYXRvci09AG9wZXJhdG9yKj0Ab3BlcmF0b3ItLQBvcGVyYXRvciBuZXdbXQBvcGVyYXRvciE9AG9wZXJhdG9yIQBvcGVyYXRvciBuZXcAb3BlcmF0b3J8fABvcGVyYXRvcnwAb3BlcmF0b3J8PQBvcGVyYXRvci0+KgBvcGVyYXRvcisAb3BlcmF0b3IrPQBvcGVyYXRvcisrAG9wZXJhdG9yLT4Ab3BlcmF0b3I/AG9wZXJhdG9yJQBvcGVyYXRvciU9AG9wZXJhdG9yPj4Ab3BlcmF0b3I+Pj0Ab3BlcmF0b3IgZGVsZXRlACd1bm5hbWVkACdsYW1iZGEnKABzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBzdGQ6OmFsbG9jYXRvcjxjaGFyPiA+AGJhc2ljX3N0cmluZwBzdGQ6OmlzdHJlYW0Ac3RkOjpiYXNpY19pc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBiYXNpY19pc3RyZWFtAHN0ZDo6b3N0cmVhbQBzdGQ6OmJhc2ljX29zdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiA+AGJhc2ljX29zdHJlYW0Ac3RkOjppb3N0cmVhbQBzdGQ6OmJhc2ljX2lvc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4gPgBiYXNpY19pb3N0cmVhbQBkeW5hbWljX2Nhc3Q8ACkoAGNvbnN0X2Nhc3Q8AGFsaWdub2YgKABmcAB3Y2hhcl90AGZhbHNlAHRydWUAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AHUAbAB1bABsbAB1bGwAX19pbnQxMjgAdW5zaWduZWQgX19pbnQxMjgAJUxhTAAlYQAlYWYAZGVjbHR5cGUoAHN0ZDo6YWxsb2NhdG9yAHN0ZDo6YmFzaWNfc3RyaW5nADo6c3RyaW5nIGxpdGVyYWwAc3RkAF9HTE9CQUxfX04AKGFub255bW91cyBuYW1lc3BhY2UpACA+AFRfAGlkADo6KgAgJgAgJiYAIFtdAHZvaWQAYm9vbABpbnQAdW5zaWduZWQgaW50AGxvbmcAdW5zaWduZWQgbG9uZwBsb25nIGxvbmcAZmxvYXQAbG9uZyBkb3VibGUAX19mbG9hdDEyOAAuLi4AZGVjaW1hbDY0AGRlY2ltYWwxMjgAZGVjaW1hbDMyAGRlY2ltYWwxNgBjaGFyMzJfdABjaGFyMTZfdABhdXRvAHN0ZDo6bnVsbHB0cl90AGRvdWJsZQB1bnNpZ25lZCBsb25nIGxvbmcAX2Jsb2NrX2ludm9rZQBpbnZvY2F0aW9uIGZ1bmN0aW9uIGZvciBibG9jayBpbiAAdnRhYmxlIGZvciAAVlRUIGZvciAAdHlwZWluZm8gZm9yIAB0eXBlaW5mbyBuYW1lIGZvciAAY292YXJpYW50IHJldHVybiB0aHVuayB0byAAY29uc3RydWN0aW9uIHZ0YWJsZSBmb3IgAC1pbi0AdmlydHVhbCB0aHVuayB0byAAbm9uLXZpcnR1YWwgdGh1bmsgdG8gAGd1YXJkIHZhcmlhYmxlIGZvciAAcmVmZXJlbmNlIHRlbXBvcmFyeSBmb3Ig\";var tempDoublePtr=STATICTOP;STATICTOP+=16;function ___cxa_allocate_exception(size){return _malloc(size);}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception;}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function deAdjust(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var key in EXCEPTIONS.infos){var ptr=+key;var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr;}}return adjusted;},addRef:function addRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++;},decRef:function decRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module[\"dynCall_vi\"](info.destructor,ptr);}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr);}},clearRef:function clearRef(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0;}};function ___cxa_begin_catch(ptr){var info=EXCEPTIONS.infos[ptr];if(info&&!info.caught){info.caught=true;__ZSt18uncaught_exceptionv.uncaught_exception--;}if(info)info.rethrown=false;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr;}function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr;}throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\";}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(setTempRet0(0),0)|0;}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(setTempRet0(0),thrown)|0;}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module[\"___cxa_is_pointer_type\"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i<typeArray.length;i++){if(typeArray[i]&&Module[\"___cxa_can_catch\"](typeArray[i],throwntype,thrown)){thrown=HEAP32[thrown>>2];info.adjusted=thrown;return(setTempRet0(typeArray[i]),thrown)|0;}}thrown=HEAP32[thrown>>2];return(setTempRet0(throwntype),thrown)|0;}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};EXCEPTIONS.last=ptr;if(!(\"uncaught_exception\"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1;}else{__ZSt18uncaught_exceptionv.uncaught_exception++;}throw ptr+\" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch.\";}function ___gxx_personality_v0(){}function ___lock(){}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var ERRNO_MESSAGES={0:\"Success\",1:\"Not super-user\",2:\"No such file or directory\",3:\"No such process\",4:\"Interrupted system call\",5:\"I/O error\",6:\"No such device or address\",7:\"Arg list too long\",8:\"Exec format error\",9:\"Bad file number\",10:\"No children\",11:\"No more processes\",12:\"Not enough core\",13:\"Permission denied\",14:\"Bad address\",15:\"Block device required\",16:\"Mount device busy\",17:\"File exists\",18:\"Cross-device link\",19:\"No such device\",20:\"Not a directory\",21:\"Is a directory\",22:\"Invalid argument\",23:\"Too many open files in system\",24:\"Too many open files\",25:\"Not a typewriter\",26:\"Text file busy\",27:\"File too large\",28:\"No space left on device\",29:\"Illegal seek\",30:\"Read only file system\",31:\"Too many links\",32:\"Broken pipe\",33:\"Math arg out of domain of func\",34:\"Math result not representable\",35:\"File locking deadlock error\",36:\"File or path name too long\",37:\"No record locks available\",38:\"Function not implemented\",39:\"Directory not empty\",40:\"Too many symbolic links\",42:\"No message of desired type\",43:\"Identifier removed\",44:\"Channel number out of range\",45:\"Level 2 not synchronized\",46:\"Level 3 halted\",47:\"Level 3 reset\",48:\"Link number out of range\",49:\"Protocol driver not attached\",50:\"No CSI structure available\",51:\"Level 2 halted\",52:\"Invalid exchange\",53:\"Invalid request descriptor\",54:\"Exchange full\",55:\"No anode\",56:\"Invalid request code\",57:\"Invalid slot\",59:\"Bad font file fmt\",60:\"Device not a stream\",61:\"No data (for no delay io)\",62:\"Timer expired\",63:\"Out of streams resources\",64:\"Machine is not on the network\",65:\"Package not installed\",66:\"The object is remote\",67:\"The link has been severed\",68:\"Advertise error\",69:\"Srmount error\",70:\"Communication error on send\",71:\"Protocol error\",72:\"Multihop attempted\",73:\"Cross mount point (not really error)\",74:\"Trying to read unreadable message\",75:\"Value too large for defined data type\",76:\"Given log. name not unique\",77:\"f.d. invalid for this operation\",78:\"Remote address changed\",79:\"Can   access a needed shared lib\",80:\"Accessing a corrupted shared lib\",81:\".lib section in a.out corrupted\",82:\"Attempting to link in too many libs\",83:\"Attempting to exec a shared library\",84:\"Illegal byte sequence\",86:\"Streams pipe error\",87:\"Too many users\",88:\"Socket operation on non-socket\",89:\"Destination address required\",90:\"Message too long\",91:\"Protocol wrong type for socket\",92:\"Protocol not available\",93:\"Unknown protocol\",94:\"Socket type not supported\",95:\"Not supported\",96:\"Protocol family not supported\",97:\"Address family not supported by protocol family\",98:\"Address already in use\",99:\"Address not available\",100:\"Network interface is not configured\",101:\"Network is unreachable\",102:\"Connection reset by network\",103:\"Connection aborted\",104:\"Connection reset by peer\",105:\"No buffer space available\",106:\"Socket is already connected\",107:\"Socket is not connected\",108:\"Can't send after socket shutdown\",109:\"Too many references\",110:\"Connection timed out\",111:\"Connection refused\",112:\"Host is down\",113:\"Host is unreachable\",114:\"Socket already connected\",115:\"Connection already in progress\",116:\"Stale file handle\",122:\"Quota exceeded\",123:\"No medium (in tape drive)\",125:\"Operation canceled\",130:\"Previous owner died\",131:\"State not recoverable\"};function ___setErrNo(value){if(Module[\"___errno_location\"])HEAP32[Module[\"___errno_location\"]()>>2]=value;return value;}var PATH={splitPath:function splitPath(filename){var splitPathRe=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return splitPathRe.exec(filename).slice(1);},normalizeArray:function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last===\".\"){parts.splice(i,1);}else if(last===\"..\"){parts.splice(i,1);up++;}else if(up){parts.splice(i,1);up--;}}if(allowAboveRoot){for(;up;up--){parts.unshift(\"..\");}}return parts;},normalize:function normalize(path){var isAbsolute=path.charAt(0)===\"/\",trailingSlash=path.substr(-1)===\"/\";path=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p;}),!isAbsolute).join(\"/\");if(!path&&!isAbsolute){path=\".\";}if(path&&trailingSlash){path+=\"/\";}return(isAbsolute?\"/\":\"\")+path;},dirname:function dirname(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return\".\";}if(dir){dir=dir.substr(0,dir.length-1);}return root+dir;},basename:function basename(path){if(path===\"/\")return\"/\";var lastSlash=path.lastIndexOf(\"/\");if(lastSlash===-1)return path;return path.substr(lastSlash+1);},extname:function extname(path){return PATH.splitPath(path)[3];},join:function join(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join(\"/\"));},join2:function join2(l,r){return PATH.normalize(l+\"/\"+r);},resolve:function resolve(){var resolvedPath=\"\",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!==\"string\"){throw new TypeError(\"Arguments to path.resolve must be strings\");}else if(!path){return\"\";}resolvedPath=path+\"/\"+resolvedPath;resolvedAbsolute=path.charAt(0)===\"/\";}resolvedPath=PATH.normalizeArray(resolvedPath.split(\"/\").filter(function(p){return!!p;}),!resolvedAbsolute).join(\"/\");return(resolvedAbsolute?\"/\":\"\")+resolvedPath||\".\";},relative:function relative(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!==\"\")break;}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!==\"\")break;}if(start>end)return[];return arr.slice(start,end-start+1);}var fromParts=trim(from.split(\"/\"));var toParts=trim(to.split(\"/\"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break;}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push(\"..\");}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join(\"/\");}};var TTY={ttys:[],init:function init(){},shutdown:function shutdown(){},register:function register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops);},stream_ops:{open:function open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}stream.tty=tty;stream.seekable=false;},close:function close(stream){stream.tty.ops.flush(stream.tty);},flush:function flush(stream){stream.tty.ops.flush(stream.tty);},read:function read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO);}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result;}if(bytesRead){stream.node.timestamp=Date.now();}return bytesRead;},write:function write(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(ERRNO_CODES.ENXIO);}for(var i=0;i<length;i++){try{stream.tty.ops.put_char(stream.tty,buffer[offset+i]);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}}if(length){stream.node.timestamp=Date.now();}return i;}},default_tty_ops:{get_char:function get_char(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=new Buffer(BUFSIZE);var bytesRead=0;var isPosixPlatform=process.platform!=\"win32\";var fd=process.stdin.fd;if(isPosixPlatform){var usingDevice=false;try{fd=fs.openSync(\"/dev/stdin\",\"r\");usingDevice=true;}catch(e){}}try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE,null);}catch(e){if(e.toString().indexOf(\"EOF\")!=-1)bytesRead=0;else throw e;}if(usingDevice){fs.closeSync(fd);}if(bytesRead>0){result=buf.slice(0,bytesRead).toString(\"utf-8\");}else{result=null;}}else if(typeof window!=\"undefined\"&&typeof window.prompt==\"function\"){result=window.prompt(\"Input: \");if(result!==null){result+=\"\\n\";}}else if(typeof readline==\"function\"){result=readline();if(result!==null){result+=\"\\n\";}}if(!result){return null;}tty.input=intArrayFromString(result,true);}return tty.input.shift();},put_char:function put_char(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[];}else{if(val!=0)tty.output.push(val);}},flush:function flush(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[];}}},default_tty1_ops:{put_char:function put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[];}else{if(val!=0)tty.output.push(val);}},flush:function flush(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[];}}}};var MEMFS={ops_table:null,mount:function mount(_mount){return MEMFS.createNode(null,\"/\",16384|511,0);},createNode:function createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={};}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null;}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream;}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream;}node.timestamp=Date.now();if(parent){parent.contents[name]=node;}return node;},getFileDataAsRegularArray:function getFileDataAsRegularArray(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i<node.usedBytes;++i){arr.push(node.contents[i]);}return arr;}return node.contents;},getFileDataAsTypedArray:function getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array();if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents);},expandFileStorage:function expandFileStorage(node,newCapacity){if(node.contents&&node.contents.subarray&&newCapacity>node.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length;}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)|0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return;}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.length<newCapacity){node.contents.push(0);}},resizeFileStorage:function resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return;}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(new ArrayBuffer(newSize));if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)));}node.usedBytes=newSize;return;}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length<newSize){node.contents.push(0);}node.usedBytes=newSize;},node_ops:{getattr:function getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096;}else if(FS.isFile(node.mode)){attr.size=node.usedBytes;}else if(FS.isLink(node.mode)){attr.size=node.link.length;}else{attr.size=0;}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr;},setattr:function setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode;}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp;}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size);}},lookup:function lookup(parent,name){throw FS.genericErrors[ERRNO_CODES.ENOENT];},mknod:function mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev);},rename:function rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}}}delete old_node.parent.contents[old_node.name];old_node.name=new_name;new_dir.contents[new_name]=old_node;old_node.parent=new_dir;},unlink:function unlink(parent,name){delete parent.contents[name];},rmdir:function rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}delete parent.contents[name];},readdir:function readdir(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node;},readlink:function readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return node.link;}},stream_ops:{read:function read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset);}else{for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i];}}return size;},write:function write(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length;}else if(node.usedBytes===0&&position===0){node.contents=new Uint8Array(buffer.subarray(offset,offset+length));node.usedBytes=length;return length;}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length;}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray)node.contents.set(buffer.subarray(offset,offset+length),position);else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i];}}node.usedBytes=Math.max(node.usedBytes,position+length);return length;},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes;}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;},allocate:function allocate(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&(contents.buffer===buffer||contents.buffer===buffer.buffer)){allocated=false;ptr=contents.byteOffset;}else{if(position>0||position+length<stream.node.usedBytes){if(contents.subarray){contents=contents.subarray(position,position+length);}else{contents=Array.prototype.slice.call(contents,position,position+length);}}allocated=true;ptr=_malloc(length);if(!ptr){throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);}buffer.set(contents,ptr);}return{ptr:ptr,allocated:allocated};},msync:function msync(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}if(mmapFlags&2){return 0;}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0;}}};var IDBFS={dbs:{},indexedDB:function(_indexedDB){function indexedDB(){return _indexedDB.apply(this,arguments);}indexedDB.toString=function(){return _indexedDB.toString();};return indexedDB;}(function(){if(typeof indexedDB!==\"undefined\")return indexedDB;var ret=null;if((typeof window==='undefined'?'undefined':_typeof(window))===\"object\")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,\"IDBFS used, but indexedDB not supported\");return ret;}),DB_VERSION:21,DB_STORE_NAME:\"FILE_DATA\",mount:function mount(_mount2){return MEMFS.mount.apply(null,arguments);},syncfs:function syncfs(mount,populate,callback){IDBFS.getLocalSet(mount,function(err,local){if(err)return callback(err);IDBFS.getRemoteSet(mount,function(err,remote){if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback);});});},getDB:function getDB(name,callback){var db=IDBFS.dbs[name];if(db){return callback(null,db);}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION);}catch(e){return callback(e);}if(!req){return callback(\"Unable to connect to IndexedDB\");}req.onupgradeneeded=function(e){var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME);}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME);}if(!fileStore.indexNames.contains(\"timestamp\")){fileStore.createIndex(\"timestamp\",\"timestamp\",{unique:false});}};req.onsuccess=function(){db=req.result;IDBFS.dbs[name]=db;callback(null,db);};req.onerror=function(e){callback(this.error);e.preventDefault();};},getLocalSet:function getLocalSet(mount,callback){var entries={};function isRealDir(p){return p!==\".\"&&p!==\"..\";}function toAbsolute(root){return function(p){return PATH.join2(root,p);};}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path);}catch(e){return callback(e);}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));}entries[path]={timestamp:stat.mtime};}return callback(null,{type:\"local\",entries:entries});},getRemoteSet:function getRemoteSet(mount,callback){var entries={};IDBFS.getDB(mount.mountpoint,function(err,db){if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readonly\");transaction.onerror=function(e){callback(this.error);e.preventDefault();};var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index(\"timestamp\");index.openKeyCursor().onsuccess=function(event){var cursor=event.target.result;if(!cursor){return callback(null,{type:\"remote\",db:db,entries:entries});}entries[cursor.primaryKey]={timestamp:cursor.key};cursor.continue();};}catch(e){return callback(e);}});},loadLocalEntry:function loadLocalEntry(path,callback){var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path);}catch(e){return callback(e);}if(FS.isDir(stat.mode)){return callback(null,{timestamp:stat.mtime,mode:stat.mode});}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{timestamp:stat.mtime,mode:stat.mode,contents:node.contents});}else{return callback(new Error(\"node type not supported\"));}},storeLocalEntry:function storeLocalEntry(path,entry,callback){try{if(FS.isDir(entry.mode)){FS.mkdir(path,entry.mode);}else if(FS.isFile(entry.mode)){FS.writeFile(path,entry.contents,{canOwn:true});}else{return callback(new Error(\"node type not supported\"));}FS.chmod(path,entry.mode);FS.utime(path,entry.timestamp,entry.timestamp);}catch(e){return callback(e);}callback(null);},removeLocalEntry:function removeLocalEntry(path,callback){try{var lookup=FS.lookupPath(path);var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path);}else if(FS.isFile(stat.mode)){FS.unlink(path);}}catch(e){return callback(e);}callback(null);},loadRemoteEntry:function loadRemoteEntry(store,path,callback){var req=store.get(path);req.onsuccess=function(event){callback(null,event.target.result);};req.onerror=function(e){callback(this.error);e.preventDefault();};},storeRemoteEntry:function storeRemoteEntry(store,path,entry,callback){var req=store.put(entry,path);req.onsuccess=function(){callback(null);};req.onerror=function(e){callback(this.error);e.preventDefault();};},removeRemoteEntry:function removeRemoteEntry(store,path,callback){var req=store.delete(path);req.onsuccess=function(){callback(null);};req.onerror=function(e){callback(this.error);e.preventDefault();};},reconcile:function reconcile(src,dst,callback){var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e.timestamp>e2.timestamp){create.push(key);total++;}});var remove=[];Object.keys(dst.entries).forEach(function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++;}});if(!total){return callback(null);}var completed=0;var db=src.type===\"remote\"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],\"readwrite\");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err);}return;}if(++completed>=total){return callback(null);}}transaction.onerror=function(e){done(this.error);e.preventDefault();};create.sort().forEach(function(path){if(dst.type===\"local\"){IDBFS.loadRemoteEntry(store,path,function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done);});}else{IDBFS.loadLocalEntry(path,function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done);});}});remove.sort().reverse().forEach(function(path){if(dst.type===\"local\"){IDBFS.removeLocalEntry(path,done);}else{IDBFS.removeRemoteEntry(store,path,done);}});}};var NODEFS={isWindows:false,staticInit:function staticInit(){NODEFS.isWindows=!!process.platform.match(/^win/);var flags=process[\"binding\"](\"constants\");if(flags[\"fs\"]){flags=flags[\"fs\"];}NODEFS.flagsForNodeMap={\"1024\":flags[\"O_APPEND\"],\"64\":flags[\"O_CREAT\"],\"128\":flags[\"O_EXCL\"],\"0\":flags[\"O_RDONLY\"],\"2\":flags[\"O_RDWR\"],\"4096\":flags[\"O_SYNC\"],\"512\":flags[\"O_TRUNC\"],\"1\":flags[\"O_WRONLY\"]};},bufferFrom:function bufferFrom(arrayBuffer){return Buffer.alloc?Buffer.from(arrayBuffer):new Buffer(arrayBuffer);},mount:function mount(_mount3){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,\"/\",NODEFS.getMode(_mount3.opts.root),0);},createNode:function createNode(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node;},getMode:function getMode(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&292)>>2;}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}return stat.mode;},realPath:function realPath(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent;}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts);},flagsForNode:function flagsForNode(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k;}}if(!flags){return newFlags;}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}},node_ops:{getattr:function getattr(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096;}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0;}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks};},setattr:function setattr(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode;}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date);}if(attr.size!==undefined){fs.truncateSync(path,attr.size);}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},lookup:function lookup(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode);},mknod:function mknod(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode);}else{fs.writeFileSync(path,\"\",{mode:node.mode});}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}return node;},rename:function rename(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},unlink:function unlink(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},rmdir:function rmdir(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},readdir:function readdir(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},symlink:function symlink(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath);}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},readlink:function readlink(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path;}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}}},stream_ops:{open:function open(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags));}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},close:function close(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd);}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},read:function read(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},write:function write(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size;}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code]);}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;}}};var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function mount(_mount4){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync();var root=WORKERFS.createNode(null,\"/\",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split(\"/\");var parent=root;for(var i=0;i<parts.length-1;i++){var curr=parts.slice(0,i+1).join(\"/\");if(!createdParents[curr]){createdParents[curr]=WORKERFS.createNode(parent,parts[i],WORKERFS.DIR_MODE,0);}parent=createdParents[curr];}return parent;}function base(path){var parts=path.split(\"/\");return parts[parts.length-1];}Array.prototype.forEach.call(_mount4.opts[\"files\"]||[],function(file){WORKERFS.createNode(ensureParent(file.name),base(file.name),WORKERFS.FILE_MODE,0,file,file.lastModifiedDate);});(_mount4.opts[\"blobs\"]||[]).forEach(function(obj){WORKERFS.createNode(ensureParent(obj[\"name\"]),base(obj[\"name\"]),WORKERFS.FILE_MODE,0,obj[\"data\"]);});(_mount4.opts[\"packages\"]||[]).forEach(function(pack){pack[\"metadata\"].files.forEach(function(file){var name=file.filename.substr(1);WORKERFS.createNode(ensureParent(name),base(name),WORKERFS.FILE_MODE,0,pack[\"blob\"].slice(file.start,file.end));});});return root;},createNode:function createNode(parent,name,mode,dev,contents,mtime){var node=FS.createNode(parent,name,mode);node.mode=mode;node.node_ops=WORKERFS.node_ops;node.stream_ops=WORKERFS.stream_ops;node.timestamp=(mtime||new Date()).getTime();assert(WORKERFS.FILE_MODE!==WORKERFS.DIR_MODE);if(mode===WORKERFS.FILE_MODE){node.size=contents.size;node.contents=contents;}else{node.size=4096;node.contents={};}if(parent){parent.contents[name]=node;}return node;},node_ops:{getattr:function getattr(node){return{dev:1,ino:undefined,mode:node.mode,nlink:1,uid:0,gid:0,rdev:undefined,size:node.size,atime:new Date(node.timestamp),mtime:new Date(node.timestamp),ctime:new Date(node.timestamp),blksize:4096,blocks:Math.ceil(node.size/4096)};},setattr:function setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode;}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp;}},lookup:function lookup(parent,name){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);},mknod:function mknod(parent,name,mode,dev){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},rename:function rename(oldNode,newDir,newName){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},unlink:function unlink(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},rmdir:function rmdir(parent,name){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},readdir:function readdir(node){var entries=[\".\",\"..\"];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue;}entries.push(key);}return entries;},symlink:function symlink(parent,newName,oldPath){throw new FS.ErrnoError(ERRNO_CODES.EPERM);},readlink:function readlink(node){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}},stream_ops:{read:function read(stream,buffer,offset,length,position){if(position>=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size;},write:function write(stream,buffer,offset,length,position){throw new FS.ErrnoError(ERRNO_CODES.EIO);},llseek:function llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position;}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.size;}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return position;}}};STATICTOP+=16;STATICTOP+=16;STATICTOP+=16;var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function handleFSError(e){if(!(e instanceof FS.ErrnoError))throw e+\" : \"+stackTrace();return ___setErrNo(e.errno);},lookupPath:function lookupPath(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:\"\",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key];}}if(opts.recurse_count>8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP);}var parts=PATH.normalizeArray(path.split(\"/\").filter(function(p){return!!p;}),false);var current=FS.root;var current_path=\"/\";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break;}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root;}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP);}}}}return{path:current_path,node:current};},getPath:function getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!==\"/\"?mount+\"/\"+path:mount+path;}path=path?node.name+\"/\"+path:node.name;node=node.parent;}},hashName:function hashName(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0;}return(parentid+hash>>>0)%FS.nameTable.length;},hashAddNode:function hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node;},hashRemoveNode:function hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next;}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break;}current=current.name_next;}}},lookupNode:function lookupNode(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent);}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node;}}return FS.lookup(parent,name);},createNode:function createNode(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=function(parent,name,mode,rdev){if(!parent){parent=this;}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;};FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:function get(){return(this.mode&readMode)===readMode;},set:function set(val){val?this.mode|=readMode:this.mode&=~readMode;}},write:{get:function get(){return(this.mode&writeMode)===writeMode;},set:function set(val){val?this.mode|=writeMode:this.mode&=~writeMode;}},isFolder:{get:function get(){return FS.isDir(this.mode);}},isDevice:{get:function get(){return FS.isChrdev(this.mode);}}});}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node;},destroyNode:function destroyNode(node){FS.hashRemoveNode(node);},isRoot:function isRoot(node){return node===node.parent;},isMountpoint:function isMountpoint(node){return!!node.mounted;},isFile:function isFile(mode){return(mode&61440)===32768;},isDir:function isDir(mode){return(mode&61440)===16384;},isLink:function isLink(mode){return(mode&61440)===40960;},isChrdev:function isChrdev(mode){return(mode&61440)===8192;},isBlkdev:function isBlkdev(mode){return(mode&61440)===24576;},isFIFO:function isFIFO(mode){return(mode&61440)===4096;},isSocket:function isSocket(mode){return(mode&49152)===49152;},flagModes:{\"r\":0,\"rs\":1052672,\"r+\":2,\"w\":577,\"wx\":705,\"xw\":705,\"w+\":578,\"wx+\":706,\"xw+\":706,\"a\":1089,\"ax\":1217,\"xa\":1217,\"a+\":1090,\"ax+\":1218,\"xa+\":1218},modeStringToFlags:function modeStringToFlags(str){var flags=FS.flagModes[str];if(typeof flags===\"undefined\"){throw new Error(\"Unknown file open mode: \"+str);}return flags;},flagsToPermissionString:function flagsToPermissionString(flag){var perms=[\"r\",\"w\",\"rw\"][flag&3];if(flag&512){perms+=\"w\";}return perms;},nodePermissions:function nodePermissions(node,perms){if(FS.ignorePermissions){return 0;}if(perms.indexOf(\"r\")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES;}else if(perms.indexOf(\"w\")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES;}else if(perms.indexOf(\"x\")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES;}return 0;},mayLookup:function mayLookup(dir){var err=FS.nodePermissions(dir,\"x\");if(err)return err;if(!dir.node_ops.lookup)return ERRNO_CODES.EACCES;return 0;},mayCreate:function mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST;}catch(e){}return FS.nodePermissions(dir,\"wx\");},mayDelete:function mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name);}catch(e){return e.errno;}var err=FS.nodePermissions(dir,\"wx\");if(err){return err;}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR;}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY;}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR;}}return 0;},mayOpen:function mayOpen(node,flags){if(!node){return ERRNO_CODES.ENOENT;}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP;}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!==\"r\"||flags&512){return ERRNO_CODES.EISDIR;}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags));},MAX_OPEN_FDS:4096,nextfd:function nextfd(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd;}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE);},getStream:function getStream(fd){return FS.streams[fd];},createStream:function createStream(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:function get(){return this.node;},set:function set(val){this.node=val;}},isRead:{get:function get(){return(this.flags&2097155)!==1;}},isWrite:{get:function get(){return(this.flags&2097155)!==0;}},isAppend:{get:function get(){return this.flags&1024;}}});}var newStream=new FS.FSStream();for(var p in stream){newStream[p]=stream[p];}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream;},closeStream:function closeStream(fd){FS.streams[fd]=null;},chrdev_stream_ops:{open:function open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream);}},llseek:function llseek(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}},major:function major(dev){return dev>>8;},minor:function minor(dev){return dev&255;},makedev:function makedev(ma,mi){return ma<<8|mi;},registerDevice:function registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops};},getDevice:function getDevice(dev){return FS.devices[dev];},getMounts:function getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts);}return mounts;},syncfs:function syncfs(populate,callback){if(typeof populate===\"function\"){callback=populate;populate=false;}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log(\"warning: \"+FS.syncFSRequests+\" FS.syncfs operations in flight at once, probably just doing extra work\");}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err);}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err);}return;}if(++completed>=mounts.length){doCallback(null);}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null);}mount.type.syncfs(mount,populate,done);});},mount:function mount(type,opts,mountpoint){var root=mountpoint===\"/\";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot;}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount);}}return mountRoot;},unmount:function unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current);}current=next;}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1);},lookup:function lookup(parent,name){return parent.node_ops.lookup(parent,name);},mknod:function mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name===\".\"||name===\"..\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return parent.node_ops.mknod(parent,name,mode,dev);},create:function create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0);},mkdir:function mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0);},mkdirTree:function mkdirTree(path,mode){var dirs=path.split(\"/\");var d=\"\";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+=\"/\"+dirs[i];try{FS.mkdir(d,mode);}catch(e){if(e.errno!=ERRNO_CODES.EEXIST)throw e;}}},mkdev:function mkdev(path,mode,dev){if(typeof dev===\"undefined\"){dev=mode;mode=438;}mode|=8192;return FS.mknod(path,mode,dev);},symlink:function symlink(oldpath,newpath){if(!PATH.resolve(oldpath)){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return parent.node_ops.symlink(parent,newname,oldpath);},rename:function rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(!old_dir||!new_dir)throw new FS.ErrnoError(ERRNO_CODES.ENOENT);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV);}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!==\".\"){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);}var new_node;try{new_node=FS.lookupNode(new_dir,new_name);}catch(e){}if(old_node===new_node){return;}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err);}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err);}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,\"w\");if(err){throw new FS.ErrnoError(err);}}try{if(FS.trackingDelegate[\"willMovePath\"]){FS.trackingDelegate[\"willMovePath\"](old_path,new_path);}}catch(e){console.log(\"FS.trackingDelegate['willMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message);}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);}catch(e){throw e;}finally{FS.hashAddNode(old_node);}try{if(FS.trackingDelegate[\"onMovePath\"])FS.trackingDelegate[\"onMovePath\"](old_path,new_path);}catch(e){console.log(\"FS.trackingDelegate['onMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \"+e.message);}},rmdir:function rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path);}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message);}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path);}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message);}},readdir:function readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}return node.node_ops.readdir(node);},unlink:function unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){throw new FS.ErrnoError(err);}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY);}try{if(FS.trackingDelegate[\"willDeletePath\"]){FS.trackingDelegate[\"willDeletePath\"](path);}}catch(e){console.log(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \"+e.message);}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate[\"onDeletePath\"])FS.trackingDelegate[\"onDeletePath\"](path);}catch(e){console.log(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \"+e.message);}},readlink:function readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}return PATH.resolve(FS.getPath(link.parent),link.node_ops.readlink(link));},stat:function stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}return node.node_ops.getattr(node);},lstat:function lstat(path){return FS.stat(path,true);},chmod:function chmod(path,mode,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()});},lchmod:function lchmod(path,mode){FS.chmod(path,mode,true);},fchmod:function fchmod(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}FS.chmod(stream.node,mode);},chown:function chown(path,uid,gid,dontFollow){var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}node.node_ops.setattr(node,{timestamp:Date.now()});},lchown:function lchown(path,uid,gid){FS.chown(path,uid,gid,true);},fchown:function fchown(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}FS.chown(stream.node,uid,gid);},truncate:function truncate(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var node;if(typeof path===\"string\"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;}else{node=path;}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM);}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var err=FS.nodePermissions(node,\"w\");if(err){throw new FS.ErrnoError(err);}node.node_ops.setattr(node,{size:len,timestamp:Date.now()});},ftruncate:function ftruncate(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}FS.truncate(stream.node,len);},utime:function utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)});},open:function open(path,flags,mode,fd_start,fd_end){if(path===\"\"){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}flags=typeof flags===\"string\"?FS.modeStringToFlags(flags):flags;mode=typeof mode===\"undefined\"?438:mode;if(flags&64){mode=mode&4095|32768;}else{mode=0;}var node;if((typeof path==='undefined'?'undefined':_typeof(path))===\"object\"){node=path;}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node;}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST);}}else{node=FS.mknod(path,mode,0);created=true;}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(FS.isChrdev(node.mode)){flags&=~512;}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}if(!created){var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err);}}if(flags&512){FS.truncate(node,0);}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream);}if(Module[\"logReadFiles\"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;err(\"read file: \"+path);}}try{if(FS.trackingDelegate[\"onOpenFile\"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ;}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE;}FS.trackingDelegate[\"onOpenFile\"](path,trackingFlags);}}catch(e){console.log(\"FS.trackingDelegate['onOpenFile']('\"+path+\"', flags) threw an exception: \"+e.message);}return stream;},close:function close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream);}}catch(e){throw e;}finally{FS.closeStream(stream.fd);}stream.fd=null;},isClosed:function isClosed(stream){return stream.fd===null;},llseek:function llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position;},read:function read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position;}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead;},write:function write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR);}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if(stream.flags&1024){FS.llseek(stream,0,2);}var seeking=typeof position!==\"undefined\";if(!seeking){position=stream.position;}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate[\"onWriteToFile\"])FS.trackingDelegate[\"onWriteToFile\"](stream.path);}catch(e){console.log(\"FS.trackingDelegate['onWriteToFile']('\"+path+\"') threw an exception: \"+e.message);}return bytesWritten;},allocate:function allocate(stream,offset,length){if(FS.isClosed(stream)){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL);}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF);}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);}stream.stream_ops.allocate(stream,offset,length);},mmap:function mmap(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES);}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV);}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags);},msync:function msync(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0;}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags);},munmap:function munmap(stream){return 0;},ioctl:function ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);}return stream.stream_ops.ioctl(stream,cmd,arg);},readFile:function readFile(path,opts){opts=opts||{};opts.flags=opts.flags||\"r\";opts.encoding=opts.encoding||\"binary\";if(opts.encoding!==\"utf8\"&&opts.encoding!==\"binary\"){throw new Error('Invalid encoding type \"'+opts.encoding+'\"');}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding===\"utf8\"){ret=UTF8ArrayToString(buf,0);}else if(opts.encoding===\"binary\"){ret=buf;}FS.close(stream);return ret;},writeFile:function writeFile(path,data,opts){opts=opts||{};opts.flags=opts.flags||\"w\";var stream=FS.open(path,opts.flags,opts.mode);if(typeof data===\"string\"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn);}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);}else{throw new Error(\"Unsupported data type\");}FS.close(stream);},cwd:function cwd(){return FS.currentPath;},chdir:function chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(ERRNO_CODES.ENOENT);}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);}var err=FS.nodePermissions(lookup.node,\"x\");if(err){throw new FS.ErrnoError(err);}FS.currentPath=lookup.path;},createDefaultDirectories:function createDefaultDirectories(){FS.mkdir(\"/tmp\");FS.mkdir(\"/home\");FS.mkdir(\"/home/web_user\");},createDefaultDevices:function createDefaultDevices(){FS.mkdir(\"/dev\");FS.registerDevice(FS.makedev(1,3),{read:function read(){return 0;},write:function write(stream,buffer,offset,length,pos){return length;}});FS.mkdev(\"/dev/null\",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev(\"/dev/tty\",FS.makedev(5,0));FS.mkdev(\"/dev/tty1\",FS.makedev(6,0));var random_device;if(typeof crypto!==\"undefined\"){var randomBuffer=new Uint8Array(1);random_device=function random_device(){crypto.getRandomValues(randomBuffer);return randomBuffer[0];};}else if(ENVIRONMENT_IS_NODE){random_device=function random_device(){return require(\"crypto\")[\"randomBytes\"](1)[0];};}else{random_device=function random_device(){return Math.random()*256|0;};}FS.createDevice(\"/dev\",\"random\",random_device);FS.createDevice(\"/dev\",\"urandom\",random_device);FS.mkdir(\"/dev/shm\");FS.mkdir(\"/dev/shm/tmp\");},createSpecialDirectories:function createSpecialDirectories(){FS.mkdir(\"/proc\");FS.mkdir(\"/proc/self\");FS.mkdir(\"/proc/self/fd\");FS.mount({mount:function mount(){var node=FS.createNode(\"/proc/self\",\"fd\",16384|511,73);node.node_ops={lookup:function lookup(parent,name){var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);var ret={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:function readlink(){return stream.path;}}};ret.parent=ret;return ret;}};return node;}},{},\"/proc/self/fd\");},createStandardStreams:function createStandardStreams(){if(Module[\"stdin\"]){FS.createDevice(\"/dev\",\"stdin\",Module[\"stdin\"]);}else{FS.symlink(\"/dev/tty\",\"/dev/stdin\");}if(Module[\"stdout\"]){FS.createDevice(\"/dev\",\"stdout\",null,Module[\"stdout\"]);}else{FS.symlink(\"/dev/tty\",\"/dev/stdout\");}if(Module[\"stderr\"]){FS.createDevice(\"/dev\",\"stderr\",null,Module[\"stderr\"]);}else{FS.symlink(\"/dev/tty1\",\"/dev/stderr\");}var stdin=FS.open(\"/dev/stdin\",\"r\");assert(stdin.fd===0,\"invalid handle for stdin (\"+stdin.fd+\")\");var stdout=FS.open(\"/dev/stdout\",\"w\");assert(stdout.fd===1,\"invalid handle for stdout (\"+stdout.fd+\")\");var stderr=FS.open(\"/dev/stderr\",\"w\");assert(stderr.fd===2,\"invalid handle for stderr (\"+stderr.fd+\")\");},ensureErrnoError:function ensureErrnoError(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break;}}};this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack)Object.defineProperty(this,\"stack\",{value:new Error().stack,writable:true});};FS.ErrnoError.prototype=new Error();FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=\"<generic error, no stack>\";});},staticInit:function staticInit(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},\"/\");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={\"MEMFS\":MEMFS,\"IDBFS\":IDBFS,\"NODEFS\":NODEFS,\"WORKERFS\":WORKERFS};},init:function init(input,output,error){assert(!FS.init.initialized,\"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)\");FS.init.initialized=true;FS.ensureErrnoError();Module[\"stdin\"]=input||Module[\"stdin\"];Module[\"stdout\"]=output||Module[\"stdout\"];Module[\"stderr\"]=error||Module[\"stderr\"];FS.createStandardStreams();},quit:function quit(){FS.init.initialized=false;var fflush=Module[\"_fflush\"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue;}FS.close(stream);}},getMode:function getMode(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode;},joinPath:function joinPath(parts,forceRelative){var path=PATH.join.apply(null,parts);if(forceRelative&&path[0]==\"/\")path=path.substr(1);return path;},absolutePath:function absolutePath(relative,base){return PATH.resolve(base,relative);},standardizePath:function standardizePath(path){return PATH.normalize(path);},findObject:function findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object;}else{___setErrNo(ret.error);return null;}},analyzePath:function analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path;}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path===\"/\";}catch(e){ret.error=e.errno;}return ret;},createFolder:function createFolder(parent,name,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.mkdir(path,mode);},createPath:function createPath(parent,path,canRead,canWrite){parent=typeof parent===\"string\"?parent:FS.getPath(parent);var parts=path.split(\"/\").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current);}catch(e){}parent=current;}return current;},createFile:function createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode);},createDataFile:function createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name):parent;var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data===\"string\"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i){arr[i]=data.charCodeAt(i);}data=arr;}FS.chmod(node,mode|146);var stream=FS.open(node,\"w\");FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode);}return node;},createDevice:function createDevice(parent,name,input,output){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:function open(stream){stream.seekable=false;},close:function close(stream){if(output&&output.buffer&&output.buffer.length){output(10);}},read:function read(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input();}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result;}if(bytesRead){stream.node.timestamp=Date.now();}return bytesRead;},write:function write(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i]);}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EIO);}}if(length){stream.node.timestamp=Date.now();}return i;}});return FS.mkdev(path,mode,dev);},createLink:function createLink(parent,name,target,canRead,canWrite){var path=PATH.join2(typeof parent===\"string\"?parent:FS.getPath(parent),name);return FS.symlink(target,path);},forceLoadFile:function forceLoadFile(obj){if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;var success=true;if(typeof XMLHttpRequest!==\"undefined\"){throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");}else if(Module[\"read\"]){try{obj.contents=intArrayFromString(Module[\"read\"](obj.url),true);obj.usedBytes=obj.contents.length;}catch(e){success=false;}}else{throw new Error(\"Cannot load without read() or XMLHttpRequest.\");}if(!success)___setErrNo(ERRNO_CODES.EIO);return success;},createLazyFile:function createLazyFile(parent,name,url,canRead,canWrite){function LazyUint8Array(){this.lengthKnown=false;this.chunks=[];}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined;}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset];};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter;};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest();xhr.open(\"HEAD\",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);var datalength=Number(xhr.getResponseHeader(\"Content-length\"));var header;var hasByteServing=(header=xhr.getResponseHeader(\"Accept-Ranges\"))&&header===\"bytes\";var usesGzip=(header=xhr.getResponseHeader(\"Content-Encoding\"))&&header===\"gzip\";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function doXHR(from,to){if(from>to)throw new Error(\"invalid range (\"+from+\", \"+to+\") or no bytes requested!\");if(to>datalength-1)throw new Error(\"only \"+datalength+\" bytes available! programmer error!\");var xhr=new XMLHttpRequest();xhr.open(\"GET\",url,false);if(datalength!==chunkSize)xhr.setRequestHeader(\"Range\",\"bytes=\"+from+\"-\"+to);if(typeof Uint8Array!=\"undefined\")xhr.responseType=\"arraybuffer\";if(xhr.overrideMimeType){xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error(\"Couldn't load \"+url+\". Status: \"+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[]);}else{return intArrayFromString(xhr.responseText||\"\",true);}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]===\"undefined\"){lazyArray.chunks[chunkNum]=doXHR(start,end);}if(typeof lazyArray.chunks[chunkNum]===\"undefined\")throw new Error(\"doXHR failed!\");return lazyArray.chunks[chunkNum];});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log(\"LazyFiles on gzip forces download of the whole file when length is accessed\");}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true;};if(typeof XMLHttpRequest!==\"undefined\"){if(!ENVIRONMENT_IS_WORKER)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var lazyArray=new LazyUint8Array();Object.defineProperties(lazyArray,{length:{get:function get(){if(!this.lengthKnown){this.cacheLength();}return this._length;}},chunkSize:{get:function get(){if(!this.lengthKnown){this.cacheLength();}return this._chunkSize;}}});var properties={isDevice:false,contents:lazyArray};}else{var properties={isDevice:false,url:url};}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents;}else if(properties.url){node.contents=null;node.url=properties.url;}Object.defineProperties(node,{usedBytes:{get:function get(){return this.contents.length;}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO);}return fn.apply(null,arguments);};});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO);}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i];}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i);}}return size;};node.stream_ops=stream_ops;return node;},createPreloadedFile:function createPreloadedFile(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();var fullname=name?PATH.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(\"cp \"+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn);}if(onload)onload();removeRunDependency(dep);}var handled=false;Module[\"preloadPlugins\"].forEach(function(plugin){if(handled)return;if(plugin[\"canHandle\"](fullname)){plugin[\"handle\"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep);});handled=true;}});if(!handled)finish(byteArray);}addRunDependency(dep);if(typeof url==\"string\"){Browser.asyncLoad(url,function(byteArray){processData(byteArray);},onerror);}else{processData(url);}},indexedDB:function indexedDB(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;},DB_NAME:function DB_NAME(){return\"EM_FS_\"+window.location.pathname;},DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function saveFilesToDB(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION);}catch(e){return onerror(e);}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){console.log(\"creating db\");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME);};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],\"readwrite\");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror();}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish();};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish();};});transaction.onerror=onerror;};openRequest.onerror=onerror;},loadFilesFromDB:function loadFilesFromDB(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION);}catch(e){return onerror(e);}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],\"readonly\");}catch(e){onerror(e);return;}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror();}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path);}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish();};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish();};});transaction.onerror=onerror;};openRequest.onerror=onerror;}};var SYSCALLS={DEFAULT_POLLMASK:5,mappings:{},umask:511,calculateAt:function calculateAt(dirfd,path){if(path[0]!==\"/\"){var dir;if(dirfd===-100){dir=FS.cwd();}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);dir=dirstream.path;}path=PATH.join2(dir,path);}return path;},doStat:function doStat(func,path,buf){try{var stat=func(path);}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-ERRNO_CODES.ENOTDIR;}throw e;}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;HEAP32[buf+36>>2]=stat.size;HEAP32[buf+40>>2]=4096;HEAP32[buf+44>>2]=stat.blocks;HEAP32[buf+48>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+52>>2]=0;HEAP32[buf+56>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ino;return 0;},doMsync:function doMsync(addr,stream,len,flags){var buffer=new Uint8Array(HEAPU8.subarray(addr,addr+len));FS.msync(stream,buffer,0,len,flags);},doMkdir:function doMkdir(path,mode){path=PATH.normalize(path);if(path[path.length-1]===\"/\")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0;},doMknod:function doMknod(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-ERRNO_CODES.EINVAL;}FS.mknod(path,mode,dev);return 0;},doReadlink:function doReadlink(path,buf,bufsize){if(bufsize<=0)return-ERRNO_CODES.EINVAL;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len;},doAccess:function doAccess(path,amode){if(amode&~7){return-ERRNO_CODES.EINVAL;}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;var perms=\"\";if(amode&4)perms+=\"r\";if(amode&2)perms+=\"w\";if(amode&1)perms+=\"x\";if(perms&&FS.nodePermissions(node,perms)){return-ERRNO_CODES.EACCES;}return 0;},doDup:function doDup(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd;},doReadv:function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break;}return ret;},doWritev:function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;}return ret;},varargs:0,get:function get(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret;},getStr:function getStr(){var ret=Pointer_stringify(SYSCALLS.get());return ret;},getStreamFromFD:function getStreamFromFD(){var stream=FS.getStream(SYSCALLS.get());if(!stream)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return stream;},getSocketFromFD:function getSocketFromFD(){var socket=SOCKFS.getSocket(SYSCALLS.get());if(!socket)throw new FS.ErrnoError(ERRNO_CODES.EBADF);return socket;},getSocketAddress:function getSocketAddress(allowNull){var addrp=SYSCALLS.get(),addrlen=SYSCALLS.get();if(allowNull&&addrp===0)return null;var info=__read_sockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info;},get64:function get64(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low;},getZero:function getZero(){assert(SYSCALLS.get()===0);}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt);}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt);}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL;}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd;};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0;};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0;};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL;}}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0;};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL;};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp);};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0;};default:abort(\"bad ioctl syscall \"+op);}}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0;}catch(e){if(typeof FS===\"undefined\"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno;}}function ___unlock(){}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError(\"Unknown type size: \"+size);}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i);}embind_charCodes=codes;}var embind_charCodes=undefined;function readLatin1String(ptr){var ret=\"\";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]];}return ret;}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return\"_unknown\";}name=name.replace(/[^a-zA-Z0-9_]/g,\"$\");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return\"_\"+name;}else{return name;}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function(\"body\",\"return function \"+name+\"() {\\n\"+'    \"use strict\";'+\"    return body.apply(this, arguments);\\n\"+\"};\\n\")(body);}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+\"\\n\"+stack.replace(/^Error(:[^\\n]*)?\\n/,\"\");}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name;}else{return this.name+\": \"+this.message;}};return errorClass;}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message);}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message);}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes;});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError(\"Mismatched type converter count\");}for(var i=0;i<myTypes.length;++i){registerType(myTypes[i],myTypeConverters[i]);}}var typeConverters=new Array(dependentTypes.length);var unregisteredTypes=[];var registered=0;dependentTypes.forEach(function(dt,i){if(registeredTypes.hasOwnProperty(dt)){typeConverters[i]=registeredTypes[dt];}else{unregisteredTypes.push(dt);if(!awaitingDependencies.hasOwnProperty(dt)){awaitingDependencies[dt]=[];}awaitingDependencies[dt].push(function(){typeConverters[i]=registeredTypes[dt];++registered;if(registered===unregisteredTypes.length){onComplete(typeConverters);}});}});if(0===unregisteredTypes.length){onComplete(typeConverters);}}function registerType(rawType,registeredInstance,options){options=options||{};if(!(\"argPackAdvance\"in registeredInstance)){throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");}var name=registeredInstance.name;if(!rawType){throwBindingError('type \"'+name+'\" must have a positive integer typeid pointer');}if(registeredTypes.hasOwnProperty(rawType)){if(options.ignoreDuplicateRegistrations){return;}else{throwBindingError(\"Cannot register type '\"+name+\"' twice\");}}registeredTypes[rawType]=registeredInstance;delete typeDependencies[rawType];if(awaitingDependencies.hasOwnProperty(rawType)){var callbacks=awaitingDependencies[rawType];delete awaitingDependencies[rawType];callbacks.forEach(function(cb){cb();});}}function __embind_register_bool(rawType,name,size,trueValue,falseValue){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(wt){return!!wt;},\"toWireType\":function toWireType(destructors,o){return o?trueValue:falseValue;},\"argPackAdvance\":8,\"readValueFromPointer\":function readValueFromPointer(pointer){var heap;if(size===1){heap=HEAP8;}else if(size===2){heap=HEAP16;}else if(size===4){heap=HEAP32;}else{throw new TypeError(\"Unknown boolean type size: \"+name);}return this[\"fromWireType\"](heap[pointer>>shift]);},destructorFunction:null});}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false;}if(!(other instanceof ClassHandle)){return false;}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass;}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass;}return leftClass===rightClass&&left===right;}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType};}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name;}throwBindingError(getInstanceTypeName(obj)+\" instance already deleted\");}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this;}else{var clone=Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}});clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone;}}function runDestructor(handle){var $$=handle.$$;if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr);}else{$$.ptrType.registeredClass.rawDestructor($$.ptr);}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\");}this.$$.count.value-=1;var toDelete=0===this.$$.count.value;if(toDelete){runDestructor(this);}if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined;}}function ClassHandle_isDeleted(){return!this.$$.ptr;}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj[\"delete\"]();}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this);}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError(\"Object already scheduled for deletion\");}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes);}this.$$.deleteScheduled=true;return this;}function init_ClassHandle(){ClassHandle.prototype[\"isAliasOf\"]=ClassHandle_isAliasOf;ClassHandle.prototype[\"clone\"]=ClassHandle_clone;ClassHandle.prototype[\"delete\"]=ClassHandle_delete;ClassHandle.prototype[\"isDeleted\"]=ClassHandle_isDeleted;ClassHandle.prototype[\"deleteLater\"]=ClassHandle_deleteLater;}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError(\"Function '\"+humanName+\"' called with an invalid number of arguments (\"+arguments.length+\") - expects one of (\"+proto[methodName].overloadTable+\")!\");}return proto[methodName].overloadTable[arguments.length].apply(this,arguments);};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc;}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError(\"Cannot register public name '\"+name+\"' twice\");}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError(\"Cannot register multiple overloads of a function with the same number of arguments (\"+numArguments+\")!\");}Module[name].overloadTable[numArguments]=value;}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments;}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[];}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError(\"Expected null or instance of \"+desiredClass.name+\", got an instance of \"+ptrClass.name);}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass;}return ptr;}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}return 0;}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr;}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr);}return ptr;}else{return 0;}}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError(\"Passing raw pointer to smart pointer is illegal\");}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr;}else{throwBindingError(\"Cannot convert argument of type \"+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+\" to parameter type \"+this.name);}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr;}else{var clonedHandle=handle[\"clone\"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle[\"delete\"]();}));if(destructors!==null){destructors.push(this.rawDestructor,ptr);}}break;default:throwBindingError(\"Unsupporting sharing policy\");}}return ptr;}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError(\"null is not a valid \"+this.name);}return 0;}if(!handle.$$){throwBindingError('Cannot pass \"'+_embind_repr(handle)+'\" as a '+this.name);}if(!handle.$$.ptr){throwBindingError(\"Cannot pass deleted object as a pointer of type \"+this.name);}if(handle.$$.ptrType.isConst){throwBindingError(\"Cannot convert argument of type \"+handle.$$.ptrType.name+\" to parameter type \"+this.name);}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr;}function simpleReadValueFromPointer(pointer){return this[\"fromWireType\"](HEAPU32[pointer>>2]);}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr);}return ptr;}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr);}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle[\"delete\"]();}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr;}if(undefined===desiredClass.baseClass){return null;}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null;}return desiredClass.downcast(rv);}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length;}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k]);}}return rv;}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes);}}function init_embind(){Module[\"getInheritedInstanceCount\"]=getInheritedInstanceCount;Module[\"getLiveInheritedInstances\"]=getLiveInheritedInstances;Module[\"flushPendingDeletes\"]=flushPendingDeletes;Module[\"setDelayFunction\"]=setDelayFunction;}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError(\"ptr should not be undefined\");}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass;}return ptr;}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr];}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError(\"makeClassHandle requires ptr and ptrType\");}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError(\"Both smartPtrType and smartPtr must be specified\");}record.count={value:1};return Object.create(prototype,{$$:{value:record}});}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null;}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance[\"clone\"]();}else{var rv=registeredInstance[\"clone\"]();this.destructor(ptr);return rv;}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr});}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr});}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this);}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType;}else{toType=registeredPointerRecord.pointerType;}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this);}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr});}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp});}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype[\"argPackAdvance\"]=8;RegisteredPointer.prototype[\"readValueFromPointer\"]=simpleReadValueFromPointer;RegisteredPointer.prototype[\"deleteObject\"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype[\"fromWireType\"]=RegisteredPointer_fromWireType;}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&&registeredClass.baseClass===undefined){if(isConst){this[\"toWireType\"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null;}else{this[\"toWireType\"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null;}}else{this[\"toWireType\"]=genericPointerToWireType;}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError(\"Replacing nonexistant public symbol\");}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value;}else{Module[name]=value;Module[name].argCount=numArguments;}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i<signature.length;++i){args.push(\"a\"+i);}var name=\"dynCall_\"+signature+\"_\"+rawFunction;var body=\"return function \"+name+\"(\"+args.join(\", \")+\") {\\n\";body+=\"    return dynCall(rawFunction\"+(args.length?\", \":\"\")+args.join(\", \")+\");\\n\";body+=\"};\\n\";return new Function(\"dynCall\",\"rawFunction\",body)(dynCall,rawFunction);}var fp;if(Module[\"FUNCTION_TABLE_\"+signature]!==undefined){fp=Module[\"FUNCTION_TABLE_\"+signature][rawFunction];}else if(typeof FUNCTION_TABLE!==\"undefined\"){fp=FUNCTION_TABLE[rawFunction];}else{var dc=Module[\"asm\"][\"dynCall_\"+signature];if(dc===undefined){dc=Module[\"asm\"][\"dynCall_\"+signature.replace(/f/g,\"d\")];if(dc===undefined){throwBindingError(\"No dynCall invoker for signature: \"+signature);}}fp=makeDynCaller(dc);}if(typeof fp!==\"function\"){throwBindingError(\"unknown function pointer with signature \"+signature+\": \"+rawFunction);}return fp;}var UnboundTypeError=undefined;function getTypeName(type){var ptr=___getTypeName(type);var rv=readLatin1String(ptr);_free(ptr);return rv;}function throwUnboundTypeError(message,types){var unboundTypes=[];var seen={};function visit(type){if(seen[type]){return;}if(registeredTypes[type]){return;}if(typeDependencies[type]){typeDependencies[type].forEach(visit);return;}unboundTypes.push(type);seen[type]=true;}types.forEach(visit);throw new UnboundTypeError(message+\": \"+unboundTypes.map(getTypeName).join([\", \"]));}function __embind_register_class(rawType,rawPointerType,rawConstPointerType,baseClassRawType,getActualTypeSignature,getActualType,upcastSignature,upcast,downcastSignature,downcast,name,destructorSignature,rawDestructor){name=readLatin1String(name);getActualType=embind__requireFunction(getActualTypeSignature,getActualType);if(upcast){upcast=embind__requireFunction(upcastSignature,upcast);}if(downcast){downcast=embind__requireFunction(downcastSignature,downcast);}rawDestructor=embind__requireFunction(destructorSignature,rawDestructor);var legalFunctionName=makeLegalFunctionName(name);exposePublicSymbol(legalFunctionName,function(){throwUnboundTypeError(\"Cannot construct \"+name+\" due to unbound types\",[baseClassRawType]);});whenDependentTypesAreResolved([rawType,rawPointerType,rawConstPointerType],baseClassRawType?[baseClassRawType]:[],function(base){base=base[0];var baseClass;var basePrototype;if(baseClassRawType){baseClass=base.registeredClass;basePrototype=baseClass.instancePrototype;}else{basePrototype=ClassHandle.prototype;}var constructor=createNamedFunction(legalFunctionName,function(){if(Object.getPrototypeOf(this)!==instancePrototype){throw new BindingError(\"Use 'new' to construct \"+name);}if(undefined===registeredClass.constructor_body){throw new BindingError(name+\" has no accessible constructor\");}var body=registeredClass.constructor_body[arguments.length];if(undefined===body){throw new BindingError(\"Tried to invoke ctor of \"+name+\" with invalid number of parameters (\"+arguments.length+\") - expected (\"+Object.keys(registeredClass.constructor_body).toString()+\") parameters instead!\");}return body.apply(this,arguments);});var instancePrototype=Object.create(basePrototype,{constructor:{value:constructor}});constructor.prototype=instancePrototype;var registeredClass=new RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast);var referenceConverter=new RegisteredPointer(name,registeredClass,true,false,false);var pointerConverter=new RegisteredPointer(name+\"*\",registeredClass,false,false,false);var constPointerConverter=new RegisteredPointer(name+\" const*\",registeredClass,false,true,false);registeredPointers[rawType]={pointerType:pointerConverter,constPointerType:constPointerConverter};replacePublicSymbol(legalFunctionName,constructor);return[referenceConverter,pointerConverter,constPointerConverter];});}function heap32VectorToArray(count,firstElement){var array=[];for(var i=0;i<count;i++){array.push(HEAP32[(firstElement>>2)+i]);}return array;}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr);}}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=\"constructor \"+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[];}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError(\"Cannot register multiple constructors with identical number of parameters (\"+(argCount-1)+\") for class '\"+classType.name+\"'! Overload resolution is currently only performed using the parameter count, not actual type info!\");}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError(\"Cannot construct \"+classType.name+\" due to unbound types\",rawArgTypes);};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+\" called with \"+arguments.length+\" arguments, expected \"+(argCount-1));}var destructors=[];var args=new Array(argCount);args[0]=rawConstructor;for(var i=1;i<argCount;++i){args[i]=argTypes[i][\"toWireType\"](destructors,arguments[i-1]);}var ptr=invoker.apply(null,args);runDestructors(destructors);return argTypes[0][\"fromWireType\"](ptr);};return[];});return[];});}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError(\"new_ called with constructor type \"+(typeof constructor==='undefined'?'undefined':_typeof(constructor))+\" which is not a function\");}var dummy=createNamedFunction(constructor.name||\"unknownFunctionName\",function(){});dummy.prototype=constructor.prototype;var obj=new dummy();var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj;}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i<argTypes.length;++i){if(argTypes[i]!==null&&argTypes[i].destructorFunction===undefined){needsDestructorStack=true;break;}}var returns=argTypes[0].name!==\"void\";var argsList=\"\";var argsListWired=\"\";for(var i=0;i<argCount-2;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;argsListWired+=(i!==0?\", \":\"\")+\"arg\"+i+\"Wired\";}var invokerFnBody=\"return function \"+makeLegalFunctionName(humanName)+\"(\"+argsList+\") {\\n\"+\"if (arguments.length !== \"+(argCount-2)+\") {\\n\"+\"throwBindingError('function \"+humanName+\" called with ' + arguments.length + ' arguments, expected \"+(argCount-2)+\" args!');\\n\"+\"}\\n\";if(needsDestructorStack){invokerFnBody+=\"var destructors = [];\\n\";}var dtorStack=needsDestructorStack?\"destructors\":\"null\";var args1=[\"throwBindingError\",\"invoker\",\"fn\",\"runDestructors\",\"retType\",\"classParam\"];var args2=[throwBindingError,cppInvokerFunc,cppTargetFunc,runDestructors,argTypes[0],argTypes[1]];if(isClassMethodFunc){invokerFnBody+=\"var thisWired = classParam.toWireType(\"+dtorStack+\", this);\\n\";}for(var i=0;i<argCount-2;++i){invokerFnBody+=\"var arg\"+i+\"Wired = argType\"+i+\".toWireType(\"+dtorStack+\", arg\"+i+\"); // \"+argTypes[i+2].name+\"\\n\";args1.push(\"argType\"+i);args2.push(argTypes[i+2]);}if(isClassMethodFunc){argsListWired=\"thisWired\"+(argsListWired.length>0?\", \":\"\")+argsListWired;}invokerFnBody+=(returns?\"var rv = \":\"\")+\"invoker(fn\"+(argsListWired.length>0?\", \":\"\")+argsListWired+\");\\n\";if(needsDestructorStack){invokerFnBody+=\"runDestructors(destructors);\\n\";}else{for(var i=isClassMethodFunc?1:2;i<argTypes.length;++i){var paramName=i===1?\"thisWired\":\"arg\"+(i-2)+\"Wired\";if(argTypes[i].destructorFunction!==null){invokerFnBody+=paramName+\"_dtor(\"+paramName+\"); // \"+argTypes[i].name+\"\\n\";args1.push(paramName+\"_dtor\");args2.push(argTypes[i].destructorFunction);}}}if(returns){invokerFnBody+=\"var ret = retType.fromWireType(rv);\\n\"+\"return ret;\\n\";}else{}invokerFnBody+=\"}\\n\";args1.push(invokerFnBody);var invokerFunction=new_(Function,args1).apply(null,args2);return invokerFunction;}function __embind_register_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,context,isPureVirtual){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+\".\"+methodName;if(isPureVirtual){classType.registeredClass.pureVirtualFunctions.push(methodName);}function unboundTypesHandler(){throwUnboundTypeError(\"Cannot call \"+humanName+\" due to unbound types\",rawArgTypes);}var proto=classType.registeredClass.instancePrototype;var method=proto[methodName];if(undefined===method||undefined===method.overloadTable&&method.className!==classType.name&&method.argCount===argCount-2){unboundTypesHandler.argCount=argCount-2;unboundTypesHandler.className=classType.name;proto[methodName]=unboundTypesHandler;}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-2]=unboundTypesHandler;}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var memberFunction=craftInvokerFunction(humanName,argTypes,classType,rawInvoker,context);if(undefined===proto[methodName].overloadTable){memberFunction.argCount=argCount-2;proto[methodName]=memberFunction;}else{proto[methodName].overloadTable[argCount-2]=memberFunction;}return[];});return[];});}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle);}}function count_emval_handles(){var count=0;for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){++count;}}return count;}function get_first_emval(){for(var i=5;i<emval_handle_array.length;++i){if(emval_handle_array[i]!==undefined){return emval_handle_array[i];}}return null;}function init_emval(){Module[\"count_emval_handles\"]=count_emval_handles;Module[\"get_first_emval\"]=get_first_emval;}function __emval_register(value){switch(value){case undefined:{return 1;};case null:{return 2;};case true:{return 3;};case false:{return 4;};default:{var handle=emval_free_list.length?emval_free_list.pop():emval_handle_array.length;emval_handle_array[handle]={refcount:1,value:value};return handle;}}}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv;},\"toWireType\":function toWireType(destructors,value){return __emval_register(value);},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:null});}function _embind_repr(v){if(v===null){return\"null\";}var t=typeof v==='undefined'?'undefined':_typeof(v);if(t===\"object\"||t===\"array\"||t===\"function\"){return v.toString();}else{return\"\"+v;}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this[\"fromWireType\"](HEAPF32[pointer>>2]);};case 3:return function(pointer){return this[\"fromWireType\"](HEAPF64[pointer>>3]);};default:throw new TypeError(\"Unknown float type: \"+name);}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){return value;},\"toWireType\":function toWireType(destructors,value){if(typeof value!==\"number\"&&typeof value!==\"boolean\"){throw new TypeError('Cannot convert \"'+_embind_repr(value)+'\" to '+this.name);}return value;},\"argPackAdvance\":8,\"readValueFromPointer\":floatReadValueFromPointer(name,shift),destructorFunction:null});}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError(\"Cannot call \"+name+\" due to unbound types\",argTypes);},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[];});}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer];}:function readU8FromPointer(pointer){return HEAPU8[pointer];};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1];}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1];};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2];}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2];};default:throw new TypeError(\"Unknown integer type: \"+name);}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295;}var shift=getShiftFromSize(size);var fromWireType=function fromWireType(value){return value;};if(minRange===0){var bitshift=32-8*size;fromWireType=function fromWireType(value){return value<<bitshift>>>bitshift;};}var isUnsignedType=name.indexOf(\"unsigned\")!=-1;registerType(primitiveType,{name:name,\"fromWireType\":fromWireType,\"toWireType\":function toWireType(destructors,value){if(typeof value!==\"number\"&&typeof value!==\"boolean\"){throw new TypeError('Cannot convert \"'+_embind_repr(value)+'\" to '+this.name);}if(value<minRange||value>maxRange){throw new TypeError('Passing a number \"'+_embind_repr(value)+'\" from JS side to C/C++ side to an argument of type \"'+name+'\", which is outside the valid range ['+minRange+\", \"+maxRange+\"]!\");}return isUnsignedType?value>>>0:value|0;},\"argPackAdvance\":8,\"readValueFromPointer\":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null});}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(heap[\"buffer\"],data,size);}name=readLatin1String(name);registerType(rawType,{name:name,\"fromWireType\":decodeMemoryView,\"argPackAdvance\":8,\"readValueFromPointer\":decodeMemoryView},{ignoreDuplicateRegistrations:true});}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name===\"std::string\";registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var endChar=HEAPU8[value+4+length];var endCharSwap=0;if(endChar!=0){endCharSwap=endChar;HEAPU8[value+4+length]=0;}var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0){var stringSegment=UTF8ToString(decodeStartPtr);if(str===undefined)str=stringSegment;else{str+=String.fromCharCode(0);str+=stringSegment;}decodeStartPtr=currentBytePtr+1;}}if(endCharSwap!=0)HEAPU8[value+4+length]=endCharSwap;}else{var a=new Array(length);for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAPU8[value+4+i]);}str=a.join(\"\");}_free(value);return str;},\"toWireType\":function toWireType(destructors,value){if(value instanceof ArrayBuffer){value=new Uint8Array(value);}var getLength;var valueIsOfTypeString=typeof value===\"string\";if(!(valueIsOfTypeString||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Int8Array)){throwBindingError(\"Cannot pass non-string to std::string\");}if(stdStringIsUTF8&&valueIsOfTypeString){getLength=function getLength(){return lengthBytesUTF8(value);};}else{getLength=function getLength(){return value.length;};}var length=getLength();var ptr=_malloc(4+length+1);HEAPU32[ptr>>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1);}else{if(valueIsOfTypeString){for(var i=0;i<length;++i){var charCode=value.charCodeAt(i);if(charCode>255){_free(ptr);throwBindingError(\"String has UTF-16 code units that do not fit in 8 bits\");}HEAPU8[ptr+4+i]=charCode;}}else{for(var i=0;i<length;++i){HEAPU8[ptr+4+i]=value[i];}}}if(destructors!==null){destructors.push(_free,ptr);}return ptr;},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function destructorFunction(ptr){_free(ptr);}});}function __embind_register_std_wstring(rawType,charSize,name){name=readLatin1String(name);var getHeap,shift;if(charSize===2){getHeap=function getHeap(){return HEAPU16;};shift=1;}else if(charSize===4){getHeap=function getHeap(){return HEAPU32;};shift=2;}registerType(rawType,{name:name,\"fromWireType\":function fromWireType(value){var HEAP=getHeap();var length=HEAPU32[value>>2];var a=new Array(length);var start=value+4>>shift;for(var i=0;i<length;++i){a[i]=String.fromCharCode(HEAP[start+i]);}_free(value);return a.join(\"\");},\"toWireType\":function toWireType(destructors,value){var HEAP=getHeap();var length=value.length;var ptr=_malloc(4+length*charSize);HEAPU32[ptr>>2]=length;var start=ptr+4>>shift;for(var i=0;i<length;++i){HEAP[start+i]=value.charCodeAt(i);}if(destructors!==null){destructors.push(_free,ptr);}return ptr;},\"argPackAdvance\":8,\"readValueFromPointer\":simpleReadValueFromPointer,destructorFunction:function destructorFunction(ptr){_free(ptr);}});}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,\"argPackAdvance\":0,\"fromWireType\":function fromWireType(){return undefined;},\"toWireType\":function toWireType(destructors,o){return undefined;}});}function requireHandle(handle){if(!handle){throwBindingError(\"Cannot use deleted val. handle = \"+handle);}return emval_handle_array[handle].value;}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+\" has unknown type \"+getTypeName(rawType));}return impl;}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,\"emval::as\");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType[\"toWireType\"](destructors,handle);}function __emval_lookupTypes(argCount,argTypes,argWireTypes){var a=new Array(argCount);for(var i=0;i<argCount;++i){a[i]=requireRegisteredType(HEAP32[(argTypes>>2)+i],\"parameter \"+i);}return a;}function __emval_call(handle,argCount,argTypes,argv){handle=requireHandle(handle);var types=__emval_lookupTypes(argCount,argTypes);var args=new Array(argCount);for(var i=0;i<argCount;++i){var type=types[i];args[i]=type[\"readValueFromPointer\"](argv);argv+=type[\"argPackAdvance\"];}var rv=handle.apply(undefined,args);return __emval_register(rv);}function __emval_allocateDestructors(destructorsRef){var destructors=[];HEAP32[destructorsRef>>2]=__emval_register(destructors);return destructors;}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address);}else{return symbol;}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args);}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id;}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+\"_$\"+types.slice(1).map(function(t){return t.name;}).join(\"_\")+\"$\";var params=[\"retType\"];var args=[retType];var argsList=\"\";for(var i=0;i<argCount-1;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;params.push(\"argType\"+i);args.push(types[1+i]);}var functionName=makeLegalFunctionName(\"methodCaller_\"+signatureName);var functionBody=\"return function \"+functionName+\"(handle, name, destructors, args) {\\n\";var offset=0;for(var i=0;i<argCount-1;++i){functionBody+=\"    var arg\"+i+\" = argType\"+i+\".readValueFromPointer(args\"+(offset?\"+\"+offset:\"\")+\");\\n\";offset+=types[i+1][\"argPackAdvance\"];}functionBody+=\"    var rv = handle[name](\"+argsList+\");\\n\";for(var i=0;i<argCount-1;++i){if(types[i+1][\"deleteObject\"]){functionBody+=\"    argType\"+i+\".deleteObject(arg\"+i+\");\\n\";}}if(!retType.isVoid){functionBody+=\"    return retType.toWireType(destructors, rv);\\n\";}functionBody+=\"};\\n\";params.push(functionBody);var invokerFunction=new_(Function,params).apply(null,args);return __emval_addMethodCaller(invokerFunction);}function __emval_get_module_property(name){name=getStringOrSymbol(name);return __emval_register(Module[name]);}function __emval_get_property(handle,key){handle=requireHandle(handle);key=requireHandle(key);return __emval_register(handle[key]);}function __emval_incref(handle){if(handle>4){emval_handle_array[handle].refcount+=1;}}function craftEmvalAllocator(argCount){var argsList=\"\";for(var i=0;i<argCount;++i){argsList+=(i!==0?\", \":\"\")+\"arg\"+i;}var functionBody=\"return function emval_allocator_\"+argCount+\"(constructor, argTypes, args) {\\n\";for(var i=0;i<argCount;++i){functionBody+=\"var argType\"+i+\" = requireRegisteredType(HEAP32[(argTypes >> 2) + \"+i+'], \"parameter '+i+'\");\\n'+\"var arg\"+i+\" = argType\"+i+\".readValueFromPointer(args);\\n\"+\"args += argType\"+i+\"['argPackAdvance'];\\n\";}functionBody+=\"var obj = new constructor(\"+argsList+\");\\n\"+\"return __emval_register(obj);\\n\"+\"}\\n\";return new Function(\"requireRegisteredType\",\"HEAP32\",\"__emval_register\",functionBody)(requireRegisteredType,HEAP32,__emval_register);}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer;}return newer(handle,argTypes,args);}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v));}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle);}function __emval_take_value(type,argv){type=requireRegisteredType(type,\"_emval_take_value\");var v=type[\"readValueFromPointer\"](argv);return __emval_register(v);}function _abort(){Module[\"abort\"]();}function _llvm_cttz_i64(l,h){var ret=_llvm_cttz_i32(l);if(ret==32)ret+=_llvm_cttz_i32(h);return(setTempRet0(0),ret)|0;}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest;}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0;}var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL;}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0;}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module[\"dynCall_v\"](func);_pthread_once.seen[ptr]=1;}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL;}PTHREAD_SPECIFIC[key]=value;return 0;}FS.staticInit();__ATINIT__.unshift(function(){if(!Module[\"noFSInit\"]&&!FS.init.initialized)FS.init();});__ATMAIN__.push(function(){FS.ignorePermissions=false;});__ATEXIT__.push(function(){FS.quit();});__ATINIT__.unshift(function(){TTY.init();});__ATEXIT__.push(function(){TTY.shutdown();});if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var NODEJS_PATH=require(\"path\");NODEFS.staticInit();}embind_init_charCodes();BindingError=Module[\"BindingError\"]=extendError(Error,\"BindingError\");InternalError=Module[\"InternalError\"]=extendError(Error,\"InternalError\");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module[\"UnboundTypeError\"]=extendError(Error,\"UnboundTypeError\");init_emval();DYNAMICTOP_PTR=staticAlloc(4);STACK_BASE=STACKTOP=alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array;}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,\"Character code \"+chr+\" (\"+String.fromCharCode(chr)+\")  at offset \"+i+\" not in 0x00-0xFF.\");}chr&=255;}ret.push(String.fromCharCode(chr));}return ret.join(\"\");}var decodeBase64=typeof atob===\"function\"?atob:function(input){var keyStr=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";var output=\"\";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2);}if(enc4!==64){output=output+String.fromCharCode(chr3);}}while(i<input.length);return output;};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE===\"boolean\"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,\"base64\");}catch(_){buf=new Buffer(s,\"base64\");}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength);}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i);}return bytes;}catch(_){throw new Error(\"Converting base64 string to bytes failed.\");}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return;}return intArrayFromBase64(filename.slice(dataURIPrefix.length));}function invoke_i(index){var sp=_stackSave();try{return Module[\"dynCall_i\"](index);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_ii(index,a1){var sp=_stackSave();try{return Module[\"dynCall_ii\"](index,a1);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iii(index,a1,a2){var sp=_stackSave();try{return Module[\"dynCall_iii\"](index,a1,a2);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiii(index,a1,a2,a3){var sp=_stackSave();try{return Module[\"dynCall_iiii\"](index,a1,a2,a3);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=_stackSave();try{return Module[\"dynCall_iiiii\"](index,a1,a2,a3,a4);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=_stackSave();try{return Module[\"dynCall_iiiiii\"](index,a1,a2,a3,a4,a5);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=_stackSave();try{return Module[\"dynCall_iiiiiii\"](index,a1,a2,a3,a4,a5,a6);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_v(index){var sp=_stackSave();try{Module[\"dynCall_v\"](index);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_vi(index,a1){var sp=_stackSave();try{Module[\"dynCall_vi\"](index,a1);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_vii(index,a1,a2){var sp=_stackSave();try{Module[\"dynCall_vii\"](index,a1,a2);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viii(index,a1,a2,a3){var sp=_stackSave();try{Module[\"dynCall_viii\"](index,a1,a2,a3);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiii(index,a1,a2,a3,a4){var sp=_stackSave();try{Module[\"dynCall_viiii\"](index,a1,a2,a3,a4);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=_stackSave();try{Module[\"dynCall_viiiii\"](index,a1,a2,a3,a4,a5);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=_stackSave();try{Module[\"dynCall_viiiiii\"](index,a1,a2,a3,a4,a5,a6);}catch(e){_stackRestore(sp);if(typeof e!==\"number\"&&e!==\"longjmp\")throw e;Module[\"setThrew\"](1,0);}}Module.asmGlobalArg={\"Math\":Math,\"Int8Array\":Int8Array,\"Int16Array\":Int16Array,\"Int32Array\":Int32Array,\"Uint8Array\":Uint8Array,\"Uint16Array\":Uint16Array,\"Uint32Array\":Uint32Array,\"Float32Array\":Float32Array,\"Float64Array\":Float64Array,\"NaN\":NaN,\"Infinity\":Infinity};Module.asmLibraryArg={\"abort\":abort,\"assert\":assert,\"enlargeMemory\":enlargeMemory,\"getTotalMemory\":getTotalMemory,\"abortOnCannotGrowMemory\":abortOnCannotGrowMemory,\"invoke_i\":invoke_i,\"invoke_ii\":invoke_ii,\"invoke_iii\":invoke_iii,\"invoke_iiii\":invoke_iiii,\"invoke_iiiii\":invoke_iiiii,\"invoke_iiiiii\":invoke_iiiiii,\"invoke_iiiiiii\":invoke_iiiiiii,\"invoke_v\":invoke_v,\"invoke_vi\":invoke_vi,\"invoke_vii\":invoke_vii,\"invoke_viii\":invoke_viii,\"invoke_viiii\":invoke_viiii,\"invoke_viiiii\":invoke_viiiii,\"invoke_viiiiii\":invoke_viiiiii,\"ClassHandle\":ClassHandle,\"ClassHandle_clone\":ClassHandle_clone,\"ClassHandle_delete\":ClassHandle_delete,\"ClassHandle_deleteLater\":ClassHandle_deleteLater,\"ClassHandle_isAliasOf\":ClassHandle_isAliasOf,\"ClassHandle_isDeleted\":ClassHandle_isDeleted,\"RegisteredClass\":RegisteredClass,\"RegisteredPointer\":RegisteredPointer,\"RegisteredPointer_deleteObject\":RegisteredPointer_deleteObject,\"RegisteredPointer_destructor\":RegisteredPointer_destructor,\"RegisteredPointer_fromWireType\":RegisteredPointer_fromWireType,\"RegisteredPointer_getPointee\":RegisteredPointer_getPointee,\"__ZSt18uncaught_exceptionv\":__ZSt18uncaught_exceptionv,\"___cxa_allocate_exception\":___cxa_allocate_exception,\"___cxa_begin_catch\":___cxa_begin_catch,\"___cxa_find_matching_catch\":___cxa_find_matching_catch,\"___cxa_throw\":___cxa_throw,\"___gxx_personality_v0\":___gxx_personality_v0,\"___lock\":___lock,\"___resumeException\":___resumeException,\"___setErrNo\":___setErrNo,\"___syscall140\":___syscall140,\"___syscall145\":___syscall145,\"___syscall146\":___syscall146,\"___syscall221\":___syscall221,\"___syscall5\":___syscall5,\"___syscall54\":___syscall54,\"___syscall6\":___syscall6,\"___unlock\":___unlock,\"__embind_register_bool\":__embind_register_bool,\"__embind_register_class\":__embind_register_class,\"__embind_register_class_constructor\":__embind_register_class_constructor,\"__embind_register_class_function\":__embind_register_class_function,\"__embind_register_emval\":__embind_register_emval,\"__embind_register_float\":__embind_register_float,\"__embind_register_function\":__embind_register_function,\"__embind_register_integer\":__embind_register_integer,\"__embind_register_memory_view\":__embind_register_memory_view,\"__embind_register_std_string\":__embind_register_std_string,\"__embind_register_std_wstring\":__embind_register_std_wstring,\"__embind_register_void\":__embind_register_void,\"__emval_addMethodCaller\":__emval_addMethodCaller,\"__emval_allocateDestructors\":__emval_allocateDestructors,\"__emval_as\":__emval_as,\"__emval_call\":__emval_call,\"__emval_call_void_method\":__emval_call_void_method,\"__emval_decref\":__emval_decref,\"__emval_get_method_caller\":__emval_get_method_caller,\"__emval_get_module_property\":__emval_get_module_property,\"__emval_get_property\":__emval_get_property,\"__emval_incref\":__emval_incref,\"__emval_lookupTypes\":__emval_lookupTypes,\"__emval_new\":__emval_new,\"__emval_new_cstring\":__emval_new_cstring,\"__emval_register\":__emval_register,\"__emval_run_destructors\":__emval_run_destructors,\"__emval_take_value\":__emval_take_value,\"_abort\":_abort,\"_embind_repr\":_embind_repr,\"_emscripten_memcpy_big\":_emscripten_memcpy_big,\"_llvm_cttz_i64\":_llvm_cttz_i64,\"_pthread_getspecific\":_pthread_getspecific,\"_pthread_key_create\":_pthread_key_create,\"_pthread_once\":_pthread_once,\"_pthread_setspecific\":_pthread_setspecific,\"constNoSmartPtrRawPointerToWireType\":constNoSmartPtrRawPointerToWireType,\"count_emval_handles\":count_emval_handles,\"craftEmvalAllocator\":craftEmvalAllocator,\"craftInvokerFunction\":craftInvokerFunction,\"createNamedFunction\":createNamedFunction,\"downcastPointer\":downcastPointer,\"embind__requireFunction\":embind__requireFunction,\"embind_init_charCodes\":embind_init_charCodes,\"ensureOverloadTable\":ensureOverloadTable,\"exposePublicSymbol\":exposePublicSymbol,\"extendError\":extendError,\"floatReadValueFromPointer\":floatReadValueFromPointer,\"flushPendingDeletes\":flushPendingDeletes,\"genericPointerToWireType\":genericPointerToWireType,\"getBasestPointer\":getBasestPointer,\"getInheritedInstance\":getInheritedInstance,\"getInheritedInstanceCount\":getInheritedInstanceCount,\"getLiveInheritedInstances\":getLiveInheritedInstances,\"getShiftFromSize\":getShiftFromSize,\"getStringOrSymbol\":getStringOrSymbol,\"getTypeName\":getTypeName,\"get_first_emval\":get_first_emval,\"heap32VectorToArray\":heap32VectorToArray,\"init_ClassHandle\":init_ClassHandle,\"init_RegisteredPointer\":init_RegisteredPointer,\"init_embind\":init_embind,\"init_emval\":init_emval,\"integerReadValueFromPointer\":integerReadValueFromPointer,\"makeClassHandle\":makeClassHandle,\"makeLegalFunctionName\":makeLegalFunctionName,\"new_\":new_,\"nonConstNoSmartPtrRawPointerToWireType\":nonConstNoSmartPtrRawPointerToWireType,\"readLatin1String\":readLatin1String,\"registerType\":registerType,\"replacePublicSymbol\":replacePublicSymbol,\"requireHandle\":requireHandle,\"requireRegisteredType\":requireRegisteredType,\"runDestructor\":runDestructor,\"runDestructors\":runDestructors,\"setDelayFunction\":setDelayFunction,\"shallowCopyInternalPointer\":shallowCopyInternalPointer,\"simpleReadValueFromPointer\":simpleReadValueFromPointer,\"throwBindingError\":throwBindingError,\"throwInstanceAlreadyDeleted\":throwInstanceAlreadyDeleted,\"throwInternalError\":throwInternalError,\"throwUnboundTypeError\":throwUnboundTypeError,\"upcastPointer\":upcastPointer,\"whenDependentTypesAreResolved\":whenDependentTypesAreResolved,\"DYNAMICTOP_PTR\":DYNAMICTOP_PTR,\"tempDoublePtr\":tempDoublePtr,\"ABORT\":ABORT,\"STACKTOP\":STACKTOP,\"STACK_MAX\":STACK_MAX};// EMSCRIPTEN_START_ASM\nvar asm=/** @suppress {uselessCode} */function(global,env,buffer){\"use asm\";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0;var y=0;var z=global.Math.floor;var A=global.Math.abs;var B=global.Math.sqrt;var C=global.Math.pow;var D=global.Math.cos;var E=global.Math.sin;var F=global.Math.tan;var G=global.Math.acos;var H=global.Math.asin;var I=global.Math.atan;var J=global.Math.atan2;var K=global.Math.exp;var L=global.Math.log;var M=global.Math.ceil;var N=global.Math.imul;var O=global.Math.min;var P=global.Math.max;var Q=global.Math.clz32;var R=env.abort;var S=env.assert;var T=env.enlargeMemory;var U=env.getTotalMemory;var V=env.abortOnCannotGrowMemory;var W=env.invoke_i;var X=env.invoke_ii;var Y=env.invoke_iii;var Z=env.invoke_iiii;var _=env.invoke_iiiii;var $=env.invoke_iiiiii;var aa=env.invoke_iiiiiii;var ba=env.invoke_v;var ca=env.invoke_vi;var da=env.invoke_vii;var ea=env.invoke_viii;var fa=env.invoke_viiii;var ga=env.invoke_viiiii;var ha=env.invoke_viiiiii;var ia=env.ClassHandle;var ja=env.ClassHandle_clone;var ka=env.ClassHandle_delete;var la=env.ClassHandle_deleteLater;var ma=env.ClassHandle_isAliasOf;var na=env.ClassHandle_isDeleted;var oa=env.RegisteredClass;var pa=env.RegisteredPointer;var qa=env.RegisteredPointer_deleteObject;var ra=env.RegisteredPointer_destructor;var sa=env.RegisteredPointer_fromWireType;var ta=env.RegisteredPointer_getPointee;var ua=env.__ZSt18uncaught_exceptionv;var va=env.___cxa_allocate_exception;var wa=env.___cxa_begin_catch;var xa=env.___cxa_find_matching_catch;var ya=env.___cxa_throw;var za=env.___gxx_personality_v0;var Aa=env.___lock;var Ba=env.___resumeException;var Ca=env.___setErrNo;var Da=env.___syscall140;var Ea=env.___syscall145;var Fa=env.___syscall146;var Ga=env.___syscall221;var Ha=env.___syscall5;var Ia=env.___syscall54;var Ja=env.___syscall6;var Ka=env.___unlock;var La=env.__embind_register_bool;var Ma=env.__embind_register_class;var Na=env.__embind_register_class_constructor;var Oa=env.__embind_register_class_function;var Pa=env.__embind_register_emval;var Qa=env.__embind_register_float;var Ra=env.__embind_register_function;var Sa=env.__embind_register_integer;var Ta=env.__embind_register_memory_view;var Ua=env.__embind_register_std_string;var Va=env.__embind_register_std_wstring;var Wa=env.__embind_register_void;var Xa=env.__emval_addMethodCaller;var Ya=env.__emval_allocateDestructors;var Za=env.__emval_as;var _a=env.__emval_call;var $a=env.__emval_call_void_method;var ab=env.__emval_decref;var bb=env.__emval_get_method_caller;var cb=env.__emval_get_module_property;var db=env.__emval_get_property;var eb=env.__emval_incref;var fb=env.__emval_lookupTypes;var gb=env.__emval_new;var hb=env.__emval_new_cstring;var ib=env.__emval_register;var jb=env.__emval_run_destructors;var kb=env.__emval_take_value;var lb=env._abort;var mb=env._embind_repr;var nb=env._emscripten_memcpy_big;var ob=env._llvm_cttz_i64;var pb=env._pthread_getspecific;var qb=env._pthread_key_create;var rb=env._pthread_once;var sb=env._pthread_setspecific;var tb=env.constNoSmartPtrRawPointerToWireType;var ub=env.count_emval_handles;var vb=env.craftEmvalAllocator;var wb=env.craftInvokerFunction;var xb=env.createNamedFunction;var yb=env.downcastPointer;var zb=env.embind__requireFunction;var Ab=env.embind_init_charCodes;var Bb=env.ensureOverloadTable;var Cb=env.exposePublicSymbol;var Db=env.extendError;var Eb=env.floatReadValueFromPointer;var Fb=env.flushPendingDeletes;var Gb=env.genericPointerToWireType;var Hb=env.getBasestPointer;var Ib=env.getInheritedInstance;var Jb=env.getInheritedInstanceCount;var Kb=env.getLiveInheritedInstances;var Lb=env.getShiftFromSize;var Mb=env.getStringOrSymbol;var Nb=env.getTypeName;var Ob=env.get_first_emval;var Pb=env.heap32VectorToArray;var Qb=env.init_ClassHandle;var Rb=env.init_RegisteredPointer;var Sb=env.init_embind;var Tb=env.init_emval;var Ub=env.integerReadValueFromPointer;var Vb=env.makeClassHandle;var Wb=env.makeLegalFunctionName;var Xb=env.new_;var Yb=env.nonConstNoSmartPtrRawPointerToWireType;var Zb=env.readLatin1String;var _b=env.registerType;var $b=env.replacePublicSymbol;var ac=env.requireHandle;var bc=env.requireRegisteredType;var cc=env.runDestructor;var dc=env.runDestructors;var ec=env.setDelayFunction;var fc=env.shallowCopyInternalPointer;var gc=env.simpleReadValueFromPointer;var hc=env.throwBindingError;var ic=env.throwInstanceAlreadyDeleted;var jc=env.throwInternalError;var kc=env.throwUnboundTypeError;var lc=env.upcastPointer;var mc=env.whenDependentTypesAreResolved;var nc=0.0;// EMSCRIPTEN_START_FUNCS\nfunction Ds(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}f=(c[k>>2]|0)>>>0>=4;c[(c[i>>2]|0)+12>>2]=c[j>>2];do{if(f){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;e=Qs(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=e;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0)p=8-(Rs(d[m>>0]|0)|0)|0;else p=0;c[(c[i>>2]|0)+4>>2]=p;if(!(d[m>>0]|0)){c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);q=10;break;}case 6:{q=10;break;}case 5:{q=11;break;}case 4:{q=12;break;}case 3:{q=13;break;}case 2:{q=14;break;}default:{}}if((q|0)==10){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);q=11;}if((q|0)==11){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);q=12;}if((q|0)==12){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);q=13;}if((q|0)==13){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);q=14;}if((q|0)==14){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0)r=8-(Rs(d[n>>0]|0)|0)|0;else r=0;c[(c[i>>2]|0)+4>>2]=r;if(d[n>>0]|0|0){e=(c[i>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function Es(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[i>>2];c[k>>2]=c[j>>2];j=Ms(c[h>>2]|0,e[c[k>>2]>>1]|0)|0;c[c[g>>2]>>2]=j;Fs(c[h>>2]|0)|0;c[(c[g>>2]|0)+4>>2]=(c[i>>2]|0)+4;l=f;return;}function Fs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=((c[(c[e>>2]|0)+12>>2]|0)+4|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=Qs(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=Qs(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function Gs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=l;l=l+64|0;e=d+48|0;f=d+36|0;g=d+32|0;h=d+28|0;i=d+24|0;j=d+20|0;k=d+16|0;m=d+12|0;n=d+8|0;o=d+4|0;p=d;c[e>>2]=b;c[g>>2]=(Ls((c[e>>2]|0)+16|0)|0)&255;c[h>>2]=(Ls((c[e>>2]|0)+32|0)|0)&255;c[i>>2]=(Ls((c[e>>2]|0)+24|0)|0)&255;c[j>>2]=c[5696+(c[g>>2]<<2)>>2];c[k>>2]=c[5840+(c[h>>2]<<2)>>2];c[m>>2]=c[i>>2];c[n>>2]=(c[j>>2]|0)+(c[k>>2]|0)+(c[m>>2]|0);if(c[i>>2]|0){b=c[5088+(c[i>>2]<<2)>>2]|0;c[o>>2]=b+(Ms(c[e>>2]|0,c[m>>2]|0)|0);if(Dq()|0)Fs(c[e>>2]|0)|0;}else c[o>>2]=0;do{if((c[i>>2]|0)>>>0<=1){if((c[g>>2]|0)==0&(c[o>>2]|0)>>>0<=1|0)c[o>>2]=1-(c[o>>2]|0);m=(c[e>>2]|0)+40|0;if(!(c[o>>2]|0)){c[o>>2]=c[m>>2];break;}c[p>>2]=c[m+(c[o>>2]<<2)>>2];if((c[o>>2]|0)!=1)c[(c[e>>2]|0)+40+8>>2]=c[(c[e>>2]|0)+40+4>>2];c[(c[e>>2]|0)+40+4>>2]=c[(c[e>>2]|0)+40>>2];m=c[p>>2]|0;c[o>>2]=m;c[(c[e>>2]|0)+40>>2]=m;}else{c[(c[e>>2]|0)+40+8>>2]=c[(c[e>>2]|0)+40+4>>2];c[(c[e>>2]|0)+40+4>>2]=c[(c[e>>2]|0)+40>>2];c[(c[e>>2]|0)+40>>2]=c[o>>2];}}while(0);c[f+8>>2]=c[o>>2];o=c[5216+(c[h>>2]<<2)>>2]|0;if((c[h>>2]|0)>>>0>31)q=Ms(c[e>>2]|0,c[k>>2]|0)|0;else q=0;c[f+4>>2]=o+q;if(Dq()|0?((c[k>>2]|0)+(c[j>>2]|0)|0)>>>0>24:0)Fs(c[e>>2]|0)|0;k=c[6416+(c[g>>2]<<2)>>2]|0;if((c[g>>2]|0)>>>0>15)r=Ms(c[e>>2]|0,c[j>>2]|0)|0;else r=0;c[f>>2]=k+r;r=(Dq()|0)!=0;if(r|(c[n>>2]|0)>>>0>31)Fs(c[e>>2]|0)|0;Ns((c[e>>2]|0)+16|0,c[e>>2]|0);Ns((c[e>>2]|0)+32|0,c[e>>2]|0);if(!(Dq()|0)){s=c[e>>2]|0;t=s+24|0;u=c[e>>2]|0;Ns(t,u);c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];l=d;return;}Fs(c[e>>2]|0)|0;s=c[e>>2]|0;t=s+24|0;u=c[e>>2]|0;Ns(t,u);c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];l=d;return;}function Hs(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;k=l;l=l+64|0;m=k+60|0;n=k+56|0;o=k+52|0;p=k+48|0;q=k+44|0;r=k+40|0;s=k+36|0;t=k+32|0;u=k+28|0;v=k+24|0;w=k+20|0;x=k+16|0;y=k+12|0;z=k+8|0;A=k+4|0;B=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+4>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+8>>2]|0));if(((c[u>>2]|0)>>>0>(c[x>>2]|0)>>>0?1:(c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0)|0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}Is(c[n>>2]|0,c[c[p>>2]>>2]|0,c[e>>2]|0);c[n>>2]=c[u>>2];c[c[p>>2]>>2]=c[y>>2];do{if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+4>>2]|0)|0)>>>0<=(c[t>>2]|0)>>>0){nE(c[u>>2]|0,c[z>>2]|0,c[e+4>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);y=e+4|0;c[y>>2]=(c[y>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];if((c[n>>2]|0)>>>0<=(c[x>>2]|0)>>>0?(c[e+4>>2]|0)>>>0>=3:0)break;while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;y=c[z>>2]|0;c[z>>2]=y+1;p=a[y>>0]|0;y=c[n>>2]|0;c[n>>2]=y+1;a[y>>0]=p;}c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}}while(0);if((c[e+8>>2]|0)>>>0<8){c[B>>2]=c[6816+(c[e+8>>2]<<2)>>2];a[c[n>>2]>>0]=a[c[z>>2]>>0]|0;a[(c[n>>2]|0)+1>>0]=a[(c[z>>2]|0)+1>>0]|0;a[(c[n>>2]|0)+2>>0]=a[(c[z>>2]|0)+2>>0]|0;a[(c[n>>2]|0)+3>>0]=a[(c[z>>2]|0)+3>>0]|0;c[z>>2]=(c[z>>2]|0)+(c[6848+(c[e+8>>2]<<2)>>2]|0);Js((c[n>>2]|0)+4|0,c[z>>2]|0);c[z>>2]=(c[z>>2]|0)+(0-(c[B>>2]|0));}else Ks(c[n>>2]|0,c[z>>2]|0);c[n>>2]=(c[n>>2]|0)+8;c[z>>2]=(c[z>>2]|0)+8;B=c[n>>2]|0;a:do{if((c[w>>2]|0)>>>0>((c[o>>2]|0)+-13|0)>>>0){if(B>>>0<(c[x>>2]|0)>>>0){Is(c[n>>2]|0,c[z>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);c[z>>2]=(c[z>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;r=c[z>>2]|0;c[z>>2]=r+1;A=a[r>>0]|0;r=c[n>>2]|0;c[n>>2]=r+1;a[r>>0]=A;}}else Is(B,c[z>>2]|0,(c[e+4>>2]|0)-8|0);}while(0);c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}function Is(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Ks(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Js(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function Ks(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Ls(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=(c[(c[f>>2]|0)+4>>2]|0)+(c[c[f>>2]>>2]<<2)|0;b[g>>1]=b[d>>1]|0;b[g+2>>1]=b[d+2>>1]|0;l=e;return a[g+2>>0]|0;}function Ms(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Os(c[e>>2]|0,c[f>>2]|0)|0;Ps(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Ns(a,f){a=a|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+16|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=f;f=(c[(c[h>>2]|0)+4>>2]|0)+(c[c[h>>2]>>2]<<2)|0;b[j>>1]=b[f>>1]|0;b[j+2>>1]=b[f+2>>1]|0;c[k>>2]=d[j+3>>0];c[m>>2]=Ms(c[i>>2]|0,c[k>>2]|0)|0;c[c[h>>2]>>2]=(e[j>>1]|0)+(c[m>>2]|0);l=g;return;}function Os(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function Ps(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function Qs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Dq()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=Bq(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=Fq(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Rs(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Ss(b,e,f,g,h,i,j,k,m){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;n=l;l=l+160|0;o=n+152|0;p=n+148|0;q=n+144|0;r=n+140|0;s=n+136|0;t=n+132|0;u=n+128|0;v=n+124|0;w=n+120|0;x=n+116|0;y=n+112|0;z=n;A=n+108|0;c[p>>2]=b;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;c[v>>2]=j;c[w>>2]=k;c[x>>2]=m;a:do{switch(c[q>>2]|0){case 1:{if(!(c[u>>2]|0)){c[o>>2]=-72;break a;}if((d[c[t>>2]>>0]|0)>>>0>(c[r>>2]|0)>>>0){c[o>>2]=-20;break a;}else{Ts(c[p>>2]|0,a[c[t>>2]>>0]|0)|0;c[o>>2]=1;break a;}break;}case 0:{Us(c[p>>2]|0,c[v>>2]|0,c[r>>2]|0,c[w>>2]|0)|0;c[o>>2]=0;break;}case 2:{if(c[x>>2]|0){c[o>>2]=0;break a;}else{c[o>>2]=-20;break a;}break;}default:{c[A>>2]=Vs(z,r,y,c[t>>2]|0,c[u>>2]|0)|0;if(hr(c[A>>2]|0)|0){c[o>>2]=-20;break a;}if((c[y>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break a;}else{Us(c[p>>2]|0,z,c[r>>2]|0,c[y>>2]|0)|0;c[o>>2]=c[A>>2];break a;}}}}while(0);l=n;return c[o>>2]|0;}function Ts(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+20|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=d;a[h>>0]=e;c[i>>2]=c[g>>2];c[j>>2]=c[i>>2];c[k>>2]=(c[g>>2]|0)+4;c[m>>2]=c[k>>2];b[c[j>>2]>>1]=0;b[(c[j>>2]|0)+2>>1]=0;b[c[m>>2]>>1]=0;a[(c[m>>2]|0)+2>>0]=a[h>>0]|0;a[(c[m>>2]|0)+3>>0]=0;l=f;return 0;}function Us(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;j=l;l=l+592|0;k=j+576|0;m=j+572|0;n=j+568|0;o=j+564|0;p=j+560|0;q=j+556|0;r=j+552|0;s=j;t=j+548|0;u=j+544|0;v=j+540|0;w=j+584|0;x=j+582|0;y=j+536|0;z=j+532|0;A=j+528|0;B=j+524|0;C=j+520|0;D=j+516|0;E=j+512|0;F=j+588|0;G=j+580|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[q>>2]=(c[m>>2]|0)+4;c[r>>2]=c[q>>2];c[t>>2]=(c[o>>2]|0)+1;c[u>>2]=1<<c[p>>2];c[v>>2]=(c[u>>2]|0)-1;if((c[o>>2]|0)>>>0>255){c[k>>2]=-46;H=c[k>>2]|0;l=j;return H|0;}if((c[p>>2]|0)>>>0>12){c[k>>2]=-44;H=c[k>>2]|0;l=j;return H|0;}b[w>>1]=c[p>>2];b[w+2>>1]=1;b[x>>1]=1<<(c[p>>2]|0)-1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0)==-1){o=c[y>>2]&255;q=c[r>>2]|0;i=c[v>>2]|0;c[v>>2]=i+-1;a[q+(i<<2)+2>>0]=o;b[s+(c[y>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0)>=(b[x>>1]|0))b[w+2>>1]=0;b[s+(c[y>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0;}c[y>>2]=(c[y>>2]|0)+1;}y=c[m>>2]|0;b[y>>1]=b[w>>1]|0;b[y+2>>1]=b[w+2>>1]|0;c[z>>2]=(c[u>>2]|0)-1;c[A>>2]=((c[u>>2]|0)>>>1)+((c[u>>2]|0)>>>3)+3;c[C>>2]=0;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;c[D>>2]=0;while(1){I=c[B>>2]|0;if((c[D>>2]|0)>=(b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0))break;a[(c[r>>2]|0)+(c[C>>2]<<2)+2>>0]=I;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0)&c[z>>2];while(1){if((c[C>>2]|0)>>>0<=(c[v>>2]|0)>>>0)break;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0)&c[z>>2];}c[D>>2]=(c[D>>2]|0)+1;}c[B>>2]=I+1;}if(c[C>>2]|0){c[k>>2]=-1;H=c[k>>2]|0;l=j;return H|0;}c[E>>2]=0;while(1){if((c[E>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;a[F>>0]=a[(c[r>>2]|0)+(c[E>>2]<<2)+2>>0]|0;C=s+(d[F>>0]<<1)|0;I=b[C>>1]|0;b[C>>1]=I+1<<16>>16;b[G>>1]=I;I=c[p>>2]|0;C=I-(Rs(e[G>>1]|0)|0)&255;a[(c[r>>2]|0)+(c[E>>2]<<2)+3>>0]=C;b[(c[r>>2]|0)+(c[E>>2]<<2)>>1]=(e[G>>1]<<d[(c[r>>2]|0)+(c[E>>2]<<2)+3>>0])-(c[u>>2]|0);c[E>>2]=(c[E>>2]|0)+1;}c[k>>2]=0;H=c[k>>2]|0;l=j;return H|0;}function Vs(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;A=h+70|0;B=h+68|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=Bq(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if((c[t>>2]|0)<=1)break;if((c[x>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0)break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=Bq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=19;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[m+(n<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;n=Bq(c[r>>2]|0)|0;c[v>>2]=n>>>(c[w>>2]|0);}}while(0);b[A>>1]=(c[u>>2]<<1)-1-(c[t>>2]|0);n=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(b[A>>1]|0)>>>0){b[B>>1]=n&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{b[B>>1]=n&(m<<1)-1;if((b[B>>1]|0)>=(c[u>>2]|0))b[B>>1]=(b[B>>1]|0)-(b[A>>1]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}b[B>>1]=(b[B>>1]|0)+-1<<16>>16;m=(Ws(b[B>>1]|0)|0)<<16>>16;c[t>>2]=(c[t>>2]|0)-m;m=b[B>>1]|0;n=c[j>>2]|0;g=c[x>>2]|0;c[x>>2]=g+1;b[n+(g<<1)>>1]=m;c[y>>2]=((b[B>>1]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=Bq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==19){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-1;C=c[i>>2]|0;l=h;return C|0;}c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);if(((c[r>>2]|0)-(c[p>>2]|0)|0)>>>0>(c[o>>2]|0)>>>0){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}else{c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function Ws(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=a;a=b[d>>1]|0;l=c;return((b[d>>1]|0)<0?0-a|0:a)&65535|0;}function Xs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=kt(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(at(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[n>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=Bt(c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0,c[i>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Ys(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(!(c[k>>2]|0)){c[h>>2]=-70;p=c[h>>2]|0;l=g;return p|0;}if((c[n>>2]|0)>>>0<=1?1:(c[n>>2]|0)>>>0>=(c[k>>2]|0)>>>0){c[h>>2]=-20;p=c[h>>2]|0;l=g;return p|0;}c[o>>2]=ht(c[k>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;i=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;if(c[o>>2]|0)q=it(f,i,j,k,m)|0;else q=jt(f,i,j,k,m)|0;c[h>>2]=q;p=c[h>>2]|0;l=g;return p|0;}function Zs(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;p=h+24|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;_s(p,c[o>>2]|0);if((d[p+1>>0]|0|0)!=1){c[i>>2]=-1;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=$s(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function _s(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;a[b>>0]=a[g>>0]|0;a[b+1>>0]=a[g+1>>0]|0;a[b+2>>0]=a[g+2>>0]|0;a[b+3>>0]=a[g+3>>0]|0;l=e;return;}function $s(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;h=l;l=l+80|0;i=h+60|0;j=h+56|0;k=h+52|0;m=h+48|0;n=h+44|0;o=h+40|0;p=h+24|0;q=h+16|0;r=h+12|0;s=h+8|0;t=h+4|0;u=h;v=h+64|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[q>>2]=Ds(p,c[m>>2]|0,c[n>>2]|0)|0;if(at(c[q>>2]|0)|0){c[i>>2]=c[q>>2];w=c[i>>2]|0;l=h;return w|0;}c[r>>2]=c[j>>2];c[s>>2]=(c[r>>2]|0)+(c[k>>2]|0);c[t>>2]=(c[o>>2]|0)+4;c[u>>2]=c[t>>2];_s(v,c[o>>2]|0);bt(c[r>>2]|0,p,c[s>>2]|0,c[u>>2]|0,d[v+2>>0]|0)|0;if(ct(p)|0){c[i>>2]=c[k>>2];w=c[i>>2]|0;l=h;return w|0;}else{c[i>>2]=-20;w=c[i>>2]|0;l=h;return w|0;}return 0;}function at(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=hr(c[d>>2]|0)|0;l=b;return a|0;}function bt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[h>>2];while(1){if(Fs(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>=((c[j>>2]|0)+-7|0)>>>0)break;if(dt()|0){f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}dt()|0;f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;if(dt()|0){f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){if(Fs(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=et(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){o=c[h>>2]|0;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=et(o,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}if(o>>>0>=(c[j>>2]|0)>>>0){p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}j=ft(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+j;p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}function ct(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function dt(){return 0;}function et(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=gt(c[j>>2]|0,c[m>>2]|0)|0;m=c[i>>2]|0;i=(c[k>>2]|0)+(c[n>>2]<<2)|0;a[m>>0]=a[i>>0]|0;a[m+1>>0]=a[i+1>>0]|0;Ps(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0;}function ft(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=gt(c[j>>2]|0,c[m>>2]|0)|0;a[c[i>>2]>>0]=a[(c[k>>2]|0)+(c[n>>2]<<2)>>0]|0;i=c[j>>2]|0;if((d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0)==1){Ps(i,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return 1;}if((c[i+4>>2]|0)>>>0>=32){l=h;return 1;}Ps(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);if((c[(c[j>>2]|0)+4>>2]|0)>>>0<=32){l=h;return 1;}c[(c[j>>2]|0)+4>>2]=32;l=h;return 1;}function gt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function ht(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d+8|0;i=d+4|0;j=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(c[f>>2]<<4>>>0)/((c[e>>2]|0)>>>0)|0;c[h>>2]=(c[e>>2]|0)>>>8;c[i>>2]=(c[7008+((c[g>>2]|0)*24|0)>>2]|0)+(N(c[7008+((c[g>>2]|0)*24|0)+4>>2]|0,c[h>>2]|0)|0);c[j>>2]=(c[7008+((c[g>>2]|0)*24|0)+8>>2]|0)+(N(c[7008+((c[g>>2]|0)*24|0)+8+4>>2]|0,c[h>>2]|0)|0);c[j>>2]=(c[j>>2]|0)+((c[j>>2]|0)>>>3);l=d;return(c[j>>2]|0)>>>0<(c[i>>2]|0)>>>0|0;}function it(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=vt(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(at(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[n>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=wt(c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0,c[i>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function jt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=kt(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(at(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[n>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=lt(c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0,c[i>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function kt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;g=l;l=l+416|0;h=g+396|0;i=g+392|0;j=g+388|0;k=g+384|0;m=g+80|0;n=g;o=g+380|0;p=g+376|0;q=g+372|0;r=g+368|0;s=g+364|0;t=g+404|0;u=g+360|0;v=g+356|0;w=g+352|0;x=g+348|0;y=g+344|0;z=g+340|0;A=g+336|0;B=g+400|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[o>>2]=0;c[p>>2]=0;c[r>>2]=(c[i>>2]|0)+4;c[s>>2]=c[r>>2];c[q>>2]=ot(m,256,n,p,o,c[j>>2]|0,c[k>>2]|0)|0;if(at(c[q>>2]|0)|0){c[h>>2]=c[q>>2];C=c[h>>2]|0;l=g;return C|0;}_s(t,c[i>>2]|0);if((c[o>>2]|0)>>>0>((d[t>>0]|0)+1|0)>>>0){c[h>>2]=-44;C=c[h>>2]|0;l=g;return C|0;}a[t+1>>0]=0;a[t+2>>0]=c[o>>2];k=c[i>>2]|0;a[k>>0]=a[t>>0]|0;a[k+1>>0]=a[t+1>>0]|0;a[k+2>>0]=a[t+2>>0]|0;a[k+3>>0]=a[t+3>>0]|0;c[v>>2]=0;c[u>>2]=1;while(1){if((c[u>>2]|0)>>>0>=((c[o>>2]|0)+1|0)>>>0)break;c[w>>2]=c[v>>2];c[v>>2]=(c[v>>2]|0)+(c[n+(c[u>>2]<<2)>>2]<<(c[u>>2]|0)-1);c[n+(c[u>>2]<<2)>>2]=c[w>>2];c[u>>2]=(c[u>>2]|0)+1;}c[x>>2]=0;while(1){if((c[x>>2]|0)>>>0>=(c[p>>2]|0)>>>0)break;c[y>>2]=d[m+(c[x>>2]|0)>>0];c[z>>2]=1<<c[y>>2]>>1;a[B>>0]=c[x>>2];a[B+1>>0]=(c[o>>2]|0)+1-(c[y>>2]|0);c[A>>2]=c[n+(c[y>>2]<<2)>>2];while(1){if((c[A>>2]|0)>>>0>=((c[n+(c[y>>2]<<2)>>2]|0)+(c[z>>2]|0)|0)>>>0)break;u=(c[s>>2]|0)+(c[A>>2]<<1)|0;a[u>>0]=a[B>>0]|0;a[u+1>>0]=a[B+1>>0]|0;c[A>>2]=(c[A>>2]|0)+1;}u=n+(c[y>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[z>>2]|0);c[x>>2]=(c[x>>2]|0)+1;}c[h>>2]=c[q>>2];C=c[h>>2]|0;l=g;return C|0;}function lt(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;i=l;l=l+208|0;j=i+192|0;k=i+188|0;m=i+184|0;n=i+180|0;o=i+176|0;p=i+172|0;q=i+168|0;r=i+164|0;s=i+160|0;t=i+156|0;u=i+152|0;v=i+136|0;w=i+120|0;x=i+104|0;y=i+88|0;z=i+84|0;A=i+80|0;B=i+76|0;C=i+72|0;D=i+68|0;E=i+64|0;F=i+60|0;G=i+56|0;H=i+52|0;I=i+48|0;J=i+44|0;K=i+40|0;L=i+36|0;M=i+32|0;N=i+28|0;O=i+24|0;P=i+20|0;Q=i+196|0;R=i+16|0;S=i+12|0;T=i+8|0;U=i+4|0;V=i;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if((c[o>>2]|0)>>>0<10){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}c[q>>2]=c[n>>2];c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=(c[p>>2]|0)+4;c[u>>2]=c[t>>2];c[z>>2]=(Eq(c[q>>2]|0)|0)&65535;c[A>>2]=(Eq((c[q>>2]|0)+2|0)|0)&65535;c[B>>2]=(Eq((c[q>>2]|0)+4|0)|0)&65535;c[C>>2]=(c[o>>2]|0)-((c[z>>2]|0)+(c[A>>2]|0)+(c[B>>2]|0)+6);c[D>>2]=(c[q>>2]|0)+6;c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(((c[m>>2]|0)+3|0)>>>0)/4|0;c[I>>2]=(c[r>>2]|0)+(c[H>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[H>>2]|0);c[K>>2]=(c[J>>2]|0)+(c[H>>2]|0);c[L>>2]=c[r>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];c[O>>2]=c[K>>2];_s(Q,c[p>>2]|0);c[R>>2]=d[Q+2>>0];if((c[C>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}c[S>>2]=Ds(v,c[D>>2]|0,c[z>>2]|0)|0;if(at(c[S>>2]|0)|0){c[j>>2]=c[S>>2];W=c[j>>2]|0;l=i;return W|0;}c[T>>2]=Ds(w,c[E>>2]|0,c[A>>2]|0)|0;if(at(c[T>>2]|0)|0){c[j>>2]=c[T>>2];W=c[j>>2]|0;l=i;return W|0;}c[U>>2]=Ds(x,c[F>>2]|0,c[B>>2]|0)|0;if(at(c[U>>2]|0)|0){c[j>>2]=c[U>>2];W=c[j>>2]|0;l=i;return W|0;}c[V>>2]=Ds(y,c[G>>2]|0,c[C>>2]|0)|0;if(at(c[V>>2]|0)|0){c[j>>2]=c[V>>2];W=c[j>>2]|0;l=i;return W|0;}V=Fs(v)|0;C=V|(Fs(w)|0);V=C|(Fs(x)|0);c[P>>2]=V|(Fs(y)|0);while(1){if(c[P>>2]|0)break;if((c[O>>2]|0)>>>0>=((c[s>>2]|0)+-7|0)>>>0)break;if(dt()|0){V=mt(v,c[u>>2]|0,c[R>>2]|0)|0;C=c[L>>2]|0;c[L>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(w,c[u>>2]|0,c[R>>2]|0)|0;C=c[M>>2]|0;c[M>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(x,c[u>>2]|0,c[R>>2]|0)|0;C=c[N>>2]|0;c[N>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(y,c[u>>2]|0,c[R>>2]|0)|0;C=c[O>>2]|0;c[O>>2]=C+1;a[C>>0]=V;}dt()|0;V=mt(v,c[u>>2]|0,c[R>>2]|0)|0;C=c[L>>2]|0;c[L>>2]=C+1;a[C>>0]=V;dt()|0;V=mt(w,c[u>>2]|0,c[R>>2]|0)|0;C=c[M>>2]|0;c[M>>2]=C+1;a[C>>0]=V;dt()|0;V=mt(x,c[u>>2]|0,c[R>>2]|0)|0;C=c[N>>2]|0;c[N>>2]=C+1;a[C>>0]=V;dt()|0;V=mt(y,c[u>>2]|0,c[R>>2]|0)|0;C=c[O>>2]|0;c[O>>2]=C+1;a[C>>0]=V;if(dt()|0){V=mt(v,c[u>>2]|0,c[R>>2]|0)|0;C=c[L>>2]|0;c[L>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(w,c[u>>2]|0,c[R>>2]|0)|0;C=c[M>>2]|0;c[M>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(x,c[u>>2]|0,c[R>>2]|0)|0;C=c[N>>2]|0;c[N>>2]=C+1;a[C>>0]=V;}if(dt()|0){V=mt(y,c[u>>2]|0,c[R>>2]|0)|0;C=c[O>>2]|0;c[O>>2]=C+1;a[C>>0]=V;}V=mt(v,c[u>>2]|0,c[R>>2]|0)|0;C=c[L>>2]|0;c[L>>2]=C+1;a[C>>0]=V;V=mt(w,c[u>>2]|0,c[R>>2]|0)|0;C=c[M>>2]|0;c[M>>2]=C+1;a[C>>0]=V;V=mt(x,c[u>>2]|0,c[R>>2]|0)|0;C=c[N>>2]|0;c[N>>2]=C+1;a[C>>0]=V;V=mt(y,c[u>>2]|0,c[R>>2]|0)|0;C=c[O>>2]|0;c[O>>2]=C+1;a[C>>0]=V;V=Fs(v)|0;C=V|(Fs(w)|0);V=C|(Fs(x)|0);c[P>>2]=V|(Fs(y)|0);}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}nt(c[L>>2]|0,v,c[I>>2]|0,c[u>>2]|0,c[R>>2]|0)|0;nt(c[M>>2]|0,w,c[J>>2]|0,c[u>>2]|0,c[R>>2]|0)|0;nt(c[N>>2]|0,x,c[K>>2]|0,c[u>>2]|0,c[R>>2]|0)|0;nt(c[O>>2]|0,y,c[s>>2]|0,c[u>>2]|0,c[R>>2]|0)|0;R=ct(v)|0;v=R&(ct(w)|0);w=v&(ct(x)|0);c[P>>2]=w&(ct(y)|0);if(c[P>>2]|0){c[j>>2]=c[m>>2];W=c[j>>2]|0;l=i;return W|0;}else{c[j>>2]=-20;W=c[j>>2]|0;l=i;return W|0;}return 0;}function mt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+16|0;c[h>>2]=b;c[i>>2]=e;c[j>>2]=f;c[k>>2]=gt(c[h>>2]|0,c[j>>2]|0)|0;a[m>>0]=a[(c[i>>2]|0)+(c[k>>2]<<1)>>0]|0;Ps(c[h>>2]|0,d[(c[i>>2]|0)+(c[k>>2]<<1)+1>>0]|0);l=g;return a[m>>0]|0;}function nt(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[i>>2];while(1){if(Fs(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>((c[k>>2]|0)+-4|0)>>>0)break;if(dt()|0){g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}dt()|0;g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;if(dt()|0){g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if(Fs(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=mt(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}l=h;return(c[k>>2]|0)-(c[o>>2]|0)|0;}function ot(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;k=l;l=l+80|0;m=k+72|0;n=k+68|0;o=k+64|0;p=k+60|0;q=k+56|0;r=k+52|0;s=k+48|0;t=k+44|0;u=k+40|0;v=k+36|0;w=k+32|0;x=k+28|0;y=k+24|0;z=k+20|0;A=k+16|0;B=k+12|0;C=k+8|0;D=k+4|0;E=k;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[v>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}c[w>>2]=d[c[v>>2]>>0];s=c[w>>2]|0;a:do{if((c[w>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}c[x>>2]=pt(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[v>>2]|0)+1|0,c[w>>2]|0)|0;if(qt(c[x>>2]|0)|0){c[m>>2]=c[x>>2];F=c[m>>2]|0;l=k;return F|0;}}else{j=c[w>>2]|0;if(s>>>0>=242){c[x>>2]=c[7392+(j-242<<2)>>2];oE(c[n>>2]|0,1,c[o>>2]|0)|0;c[w>>2]=0;break;}c[x>>2]=j-127;c[w>>2]=(((c[x>>2]|0)+1|0)>>>0)/2|0;if(((c[w>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}if((c[x>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[v>>2]=(c[v>>2]|0)+1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[y>>2]|0)+1)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)&15;c[y>>2]=(c[y>>2]|0)+2;}}}while(0);y=c[p>>2]|0;v=y+68|0;do{c[y>>2]=0;y=y+4|0;}while((y|0)<(v|0));c[u>>2]=0;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0|0)>=16){G=20;break;}y=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)<<2)|0;c[y>>2]=(c[y>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)>>1);c[z>>2]=(c[z>>2]|0)+1;}if((G|0)==20){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[A>>2]=(Rs(c[u>>2]|0)|0)+1;if((c[A>>2]|0)>>>0>16){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[c[r>>2]>>2]=c[A>>2];c[B>>2]=1<<c[A>>2];c[C>>2]=(c[B>>2]|0)-(c[u>>2]|0);c[D>>2]=1<<(Rs(c[C>>2]|0)|0);c[E>>2]=(Rs(c[C>>2]|0)|0)+1;if((c[D>>2]|0)!=(c[C>>2]|0)){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}a[(c[n>>2]|0)+(c[x>>2]|0)>>0]=c[E>>2];n=(c[p>>2]|0)+(c[E>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[x>>2]|0)+1;c[m>>2]=(c[w>>2]|0)+1;F=c[m>>2]|0;l=k;return F|0;}c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}function pt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+16960|0;g=f+16952|0;h=f+16948|0;i=f+16944|0;j=f+16940|0;k=f+16936|0;m=f+16932|0;n=f+16928|0;o=f+16400|0;p=f;q=f+16924|0;r=f+16920|0;s=f+16916|0;t=f+16912|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=c[m>>2];c[r>>2]=255;if((c[k>>2]|0)>>>0<2){c[g>>2]=-72;u=c[g>>2]|0;l=f;return u|0;}c[s>>2]=Vs(o,r,q,c[m>>2]|0,c[k>>2]|0)|0;m=(hr(c[s>>2]|0)|0)!=0;j=c[s>>2]|0;if(m){c[g>>2]=j;u=c[g>>2]|0;l=f;return u|0;}if(j>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;u=c[g>>2]|0;l=f;return u|0;}c[n>>2]=(c[n>>2]|0)+(c[s>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[s>>2]|0);c[t>>2]=Us(p,o,c[r>>2]|0,c[q>>2]|0)|0;if(hr(c[t>>2]|0)|0){c[g>>2]=c[t>>2];u=c[g>>2]|0;l=f;return u|0;}else{c[g>>2]=rt(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,p)|0;u=c[g>>2]|0;l=f;return u|0;}return 0;}function qt(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=hr(c[d>>2]|0)|0;l=b;return a|0;}function rt(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;i=l;l=l+208|0;j=i+192|0;k=i+188|0;m=i+184|0;n=i+180|0;o=i+176|0;p=i+172|0;q=i+168|0;r=i+164|0;s=i+160|0;t=i+156|0;u=i+152|0;v=i+136|0;w=i+128|0;x=i+120|0;y=i+116|0;z=i+112|0;A=i+108|0;B=i+104|0;C=i+100|0;D=i+96|0;E=i+92|0;F=i+88|0;G=i+84|0;H=i+80|0;I=i+76|0;J=i+72|0;K=i+56|0;L=i+48|0;M=i+40|0;N=i+36|0;O=i+32|0;P=i+28|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[P>>2]=b;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=c[T>>2];c[V>>2]=c[U>>2];c[W>>2]=e[(c[V>>2]|0)+2>>1];V=c[P>>2]|0;P=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;if(c[W>>2]|0){c[A>>2]=V;c[B>>2]=P;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=1;c[G>>2]=c[A>>2];c[H>>2]=c[G>>2];c[I>>2]=(c[H>>2]|0)+(c[B>>2]|0);c[J>>2]=(c[I>>2]|0)+-3;c[N>>2]=Ds(K,c[C>>2]|0,c[D>>2]|0)|0;do{if(hr(c[N>>2]|0)|0)c[z>>2]=c[N>>2];else{Es(L,K,c[E>>2]|0);Es(M,K,c[E>>2]|0);while(1){if(Fs(K)|0)break;if((c[H>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break;if(c[F>>2]|0)X=(st(L,K)|0)&255;else X=(tt(L,K)|0)&255;a[c[H>>2]>>0]=X;if(c[F>>2]|0)Y=(st(M,K)|0)&255;else Y=(tt(M,K)|0)&255;a[(c[H>>2]|0)+1>>0]=Y;if((Fs(K)|0)>>>0>0){Z=14;break;}if(c[F>>2]|0)_=(st(L,K)|0)&255;else _=(tt(L,K)|0)&255;a[(c[H>>2]|0)+2>>0]=_;if(c[F>>2]|0)$=(st(M,K)|0)&255;else $=(tt(M,K)|0)&255;a[(c[H>>2]|0)+3>>0]=$;c[H>>2]=(c[H>>2]|0)+4;}if((Z|0)==14)c[H>>2]=(c[H>>2]|0)+2;while(1){if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=24;break;}if(c[F>>2]|0)aa=(st(L,K)|0)&255;else aa=(tt(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=aa;if((Fs(K)|0)==3){Z=29;break;}if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=34;break;}if(c[F>>2]|0)ba=(st(M,K)|0)&255;else ba=(tt(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ba;if((Fs(K)|0)==3){Z=39;break;}}if((Z|0)==24){c[z>>2]=-70;break;}else if((Z|0)==29){if(c[F>>2]|0)ca=(st(M,K)|0)&255;else ca=(tt(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ca;}else if((Z|0)==34){c[z>>2]=-70;break;}else if((Z|0)==39){if(c[F>>2]|0)da=(st(L,K)|0)&255;else da=(tt(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=da;}c[z>>2]=(c[H>>2]|0)-(c[G>>2]|0);}}while(0);c[O>>2]=c[z>>2];ea=c[O>>2]|0;l=i;return ea|0;}else{c[k>>2]=V;c[m>>2]=P;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=0;c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[s>>2]|0)+(c[m>>2]|0);c[u>>2]=(c[t>>2]|0)+-3;c[y>>2]=Ds(v,c[n>>2]|0,c[o>>2]|0)|0;do{if(hr(c[y>>2]|0)|0)c[j>>2]=c[y>>2];else{Es(w,v,c[p>>2]|0);Es(x,v,c[p>>2]|0);while(1){if(Fs(v)|0)break;if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;if(c[q>>2]|0)fa=(st(w,v)|0)&255;else fa=(tt(w,v)|0)&255;a[c[s>>2]>>0]=fa;if(c[q>>2]|0)ga=(st(x,v)|0)&255;else ga=(tt(x,v)|0)&255;a[(c[s>>2]|0)+1>>0]=ga;if((Fs(v)|0)>>>0>0){Z=58;break;}if(c[q>>2]|0)ha=(st(w,v)|0)&255;else ha=(tt(w,v)|0)&255;a[(c[s>>2]|0)+2>>0]=ha;if(c[q>>2]|0)ia=(st(x,v)|0)&255;else ia=(tt(x,v)|0)&255;a[(c[s>>2]|0)+3>>0]=ia;c[s>>2]=(c[s>>2]|0)+4;}if((Z|0)==58)c[s>>2]=(c[s>>2]|0)+2;while(1){if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=68;break;}if(c[q>>2]|0)ja=(st(w,v)|0)&255;else ja=(tt(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ja;if((Fs(v)|0)==3){Z=73;break;}if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=78;break;}if(c[q>>2]|0)ka=(st(x,v)|0)&255;else ka=(tt(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ka;if((Fs(v)|0)==3){Z=83;break;}}if((Z|0)==68){c[j>>2]=-70;break;}else if((Z|0)==73){if(c[q>>2]|0)la=(st(x,v)|0)&255;else la=(tt(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=la;}else if((Z|0)==78){c[j>>2]=-70;break;}else if((Z|0)==83){if(c[q>>2]|0)ma=(st(w,v)|0)&255;else ma=(tt(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ma;}c[j>>2]=(c[s>>2]|0)-(c[r>>2]|0);}}while(0);c[O>>2]=c[j>>2];ea=c[O>>2]|0;l=i;return ea|0;}return 0;}function st(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=ut(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function tt(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=Ms(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=gt(c[e>>2]|0,c[f>>2]|0)|0;Ps(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function vt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;g=l;l=l+2144|0;h=g+2124|0;i=g+2120|0;j=g+2116|0;k=g+2112|0;m=g+1760|0;n=g+1248|0;o=g+1168|0;p=g+1088|0;q=g+2108|0;r=g;s=g+2104|0;t=g+2100|0;u=g+2096|0;v=g+2092|0;w=g+2128|0;x=g+2088|0;y=g+2084|0;z=g+2080|0;A=g+2076|0;B=g+2072|0;C=g+2068|0;D=g+2064|0;E=g+2060|0;F=g+2056|0;G=g+2052|0;H=g+2048|0;I=g+2044|0;J=g+2040|0;K=g+2036|0;L=g+2032|0;M=g+2028|0;N=g+2024|0;O=g+2020|0;P=g+2016|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;f=o;e=f+68|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));f=p;e=f+72|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));c[q>>2]=p+4;_s(w,c[i>>2]|0);c[x>>2]=d[w>>0];c[z>>2]=(c[i>>2]|0)+4;c[A>>2]=c[z>>2];if((c[x>>2]|0)>>>0>16){c[h>>2]=-44;Q=c[h>>2]|0;l=g;return Q|0;}c[y>>2]=ot(m,256,o,v,s,c[j>>2]|0,c[k>>2]|0)|0;if(at(c[y>>2]|0)|0){c[h>>2]=c[y>>2];Q=c[h>>2]|0;l=g;return Q|0;}if((c[s>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[h>>2]=-44;Q=c[h>>2]|0;l=g;return Q|0;}c[t>>2]=c[s>>2];while(1){if(c[o+(c[t>>2]<<2)>>2]|0)break;c[t>>2]=(c[t>>2]|0)+-1;}c[C>>2]=0;c[B>>2]=1;while(1){R=c[C>>2]|0;if((c[B>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[D>>2]=R;c[C>>2]=(c[C>>2]|0)+(c[o+(c[B>>2]<<2)>>2]|0);c[(c[q>>2]|0)+(c[B>>2]<<2)>>2]=c[D>>2];c[B>>2]=(c[B>>2]|0)+1;}c[c[q>>2]>>2]=R;c[u>>2]=c[C>>2];c[E>>2]=0;while(1){if((c[E>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[F>>2]=d[m+(c[E>>2]|0)>>0];C=(c[q>>2]|0)+(c[F>>2]<<2)|0;R=c[C>>2]|0;c[C>>2]=R+1;c[G>>2]=R;a[n+(c[G>>2]<<1)>>0]=c[E>>2];a[n+(c[G>>2]<<1)+1>>0]=c[F>>2];c[E>>2]=(c[E>>2]|0)+1;}c[c[q>>2]>>2]=0;c[H>>2]=r;c[I>>2]=(c[x>>2]|0)-(c[s>>2]|0)-1;c[J>>2]=0;c[K>>2]=1;while(1){if((c[K>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[L>>2]=c[J>>2];c[J>>2]=(c[J>>2]|0)+(c[o+(c[K>>2]<<2)>>2]<<(c[K>>2]|0)+(c[I>>2]|0));c[(c[H>>2]|0)+(c[K>>2]<<2)>>2]=c[L>>2];c[K>>2]=(c[K>>2]|0)+1;}c[M>>2]=(c[s>>2]|0)+1-(c[t>>2]|0);c[N>>2]=c[M>>2];while(1){if((c[N>>2]|0)>>>0>=((c[x>>2]|0)-(c[M>>2]|0)+1|0)>>>0)break;c[O>>2]=r+((c[N>>2]|0)*68|0);c[P>>2]=1;while(1){if((c[P>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[(c[O>>2]|0)+(c[P>>2]<<2)>>2]=(c[(c[H>>2]|0)+(c[P>>2]<<2)>>2]|0)>>>(c[N>>2]|0);c[P>>2]=(c[P>>2]|0)+1;}c[N>>2]=(c[N>>2]|0)+1;}xt(c[A>>2]|0,c[x>>2]|0,n,c[u>>2]|0,p,r,c[t>>2]|0,(c[s>>2]|0)+1|0);a[w+2>>0]=c[x>>2];a[w+1>>0]=1;x=c[i>>2]|0;a[x>>0]=a[w>>0]|0;a[x+1>>0]=a[w+1>>0]|0;a[x+2>>0]=a[w+2>>0]|0;a[x+3>>0]=a[w+3>>0]|0;c[h>>2]=c[y>>2];Q=c[h>>2]|0;l=g;return Q|0;}function wt(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;h=l;l=l+208|0;i=h+200|0;j=h+196|0;k=h+192|0;m=h+188|0;n=h+184|0;o=h+180|0;p=h+176|0;q=h+172|0;r=h+168|0;s=h+164|0;t=h+160|0;u=h+144|0;v=h+128|0;w=h+112|0;x=h+96|0;y=h+88|0;z=h+84|0;A=h+80|0;B=h+76|0;C=h+72|0;D=h+68|0;E=h+64|0;F=h+60|0;G=h+56|0;H=h+52|0;I=h+48|0;J=h+44|0;K=h+40|0;L=h+36|0;M=h+32|0;N=h+28|0;O=h+24|0;P=h+204|0;Q=h+20|0;R=h+16|0;S=h+12|0;T=h+8|0;U=h+4|0;V=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[n>>2]|0)>>>0<10){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}c[p>>2]=c[m>>2];c[q>>2]=c[j>>2];c[r>>2]=(c[q>>2]|0)+(c[k>>2]|0);c[s>>2]=(c[o>>2]|0)+4;c[t>>2]=c[s>>2];c[y>>2]=(Eq(c[p>>2]|0)|0)&65535;c[z>>2]=(Eq((c[p>>2]|0)+2|0)|0)&65535;c[A>>2]=(Eq((c[p>>2]|0)+4|0)|0)&65535;c[B>>2]=(c[n>>2]|0)-((c[y>>2]|0)+(c[z>>2]|0)+(c[A>>2]|0)+6);c[C>>2]=(c[p>>2]|0)+6;c[D>>2]=(c[C>>2]|0)+(c[y>>2]|0);c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(((c[k>>2]|0)+3|0)>>>0)/4|0;c[H>>2]=(c[q>>2]|0)+(c[G>>2]|0);c[I>>2]=(c[H>>2]|0)+(c[G>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[G>>2]|0);c[K>>2]=c[q>>2];c[L>>2]=c[H>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];_s(P,c[o>>2]|0);c[Q>>2]=d[P+2>>0];if((c[B>>2]|0)>>>0>(c[n>>2]|0)>>>0){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}c[R>>2]=Ds(u,c[C>>2]|0,c[y>>2]|0)|0;if(at(c[R>>2]|0)|0){c[i>>2]=c[R>>2];W=c[i>>2]|0;l=h;return W|0;}c[S>>2]=Ds(v,c[D>>2]|0,c[z>>2]|0)|0;if(at(c[S>>2]|0)|0){c[i>>2]=c[S>>2];W=c[i>>2]|0;l=h;return W|0;}c[T>>2]=Ds(w,c[E>>2]|0,c[A>>2]|0)|0;if(at(c[T>>2]|0)|0){c[i>>2]=c[T>>2];W=c[i>>2]|0;l=h;return W|0;}c[U>>2]=Ds(x,c[F>>2]|0,c[B>>2]|0)|0;if(at(c[U>>2]|0)|0){c[i>>2]=c[U>>2];W=c[i>>2]|0;l=h;return W|0;}U=Fs(u)|0;B=U|(Fs(v)|0);U=B|(Fs(w)|0);c[O>>2]=U|(Fs(x)|0);while(1){if(c[O>>2]|0)break;if((c[N>>2]|0)>>>0>=((c[r>>2]|0)+-7|0)>>>0)break;if(dt()|0){U=et(c[K>>2]|0,u,c[t>>2]|0,c[Q>>2]|0)|0;c[K>>2]=(c[K>>2]|0)+U;}if(dt()|0){U=et(c[L>>2]|0,v,c[t>>2]|0,c[Q>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+U;}if(dt()|0){U=et(c[M>>2]|0,w,c[t>>2]|0,c[Q>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+U;}if(dt()|0){U=et(c[N>>2]|0,x,c[t>>2]|0,c[Q>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+U;}dt()|0;U=et(c[K>>2]|0,u,c[t>>2]|0,c[Q>>2]|0)|0;c[K>>2]=(c[K>>2]|0)+U;dt()|0;U=et(c[L>>2]|0,v,c[t>>2]|0,c[Q>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+U;dt()|0;U=et(c[M>>2]|0,w,c[t>>2]|0,c[Q>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+U;dt()|0;U=et(c[N>>2]|0,x,c[t>>2]|0,c[Q>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+U;if(dt()|0){U=et(c[K>>2]|0,u,c[t>>2]|0,c[Q>>2]|0)|0;c[K>>2]=(c[K>>2]|0)+U;}if(dt()|0){U=et(c[L>>2]|0,v,c[t>>2]|0,c[Q>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+U;}if(dt()|0){U=et(c[M>>2]|0,w,c[t>>2]|0,c[Q>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+U;}if(dt()|0){U=et(c[N>>2]|0,x,c[t>>2]|0,c[Q>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+U;}U=et(c[K>>2]|0,u,c[t>>2]|0,c[Q>>2]|0)|0;c[K>>2]=(c[K>>2]|0)+U;U=et(c[L>>2]|0,v,c[t>>2]|0,c[Q>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+U;U=et(c[M>>2]|0,w,c[t>>2]|0,c[Q>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+U;U=et(c[N>>2]|0,x,c[t>>2]|0,c[Q>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+U;U=Fs(u)|0;B=U|(Fs(v)|0);U=B|(Fs(w)|0);c[O>>2]=U|(Fs(x)|0);}if((c[K>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}bt(c[K>>2]|0,u,c[H>>2]|0,c[t>>2]|0,c[Q>>2]|0)|0;bt(c[L>>2]|0,v,c[I>>2]|0,c[t>>2]|0,c[Q>>2]|0)|0;bt(c[M>>2]|0,w,c[J>>2]|0,c[t>>2]|0,c[Q>>2]|0)|0;bt(c[N>>2]|0,x,c[r>>2]|0,c[t>>2]|0,c[Q>>2]|0)|0;Q=ct(u)|0;u=Q&(ct(v)|0);v=u&(ct(w)|0);c[V>>2]=v&(ct(x)|0);if(c[V>>2]|0){c[i>>2]=c[k>>2];W=c[i>>2]|0;l=h;return W|0;}else{c[i>>2]=-20;W=c[i>>2]|0;l=h;return W|0;}return 0;}function xt(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+160|0;o=n+140|0;p=n+136|0;q=n+132|0;r=n+128|0;s=n+124|0;t=n+120|0;u=n+116|0;v=n+112|0;w=n;x=n+108|0;y=n+104|0;z=n+100|0;A=n+148|0;B=n+96|0;C=n+92|0;D=n+88|0;E=n+84|0;F=n+80|0;G=n+76|0;H=n+144|0;I=n+72|0;J=n+68|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+68|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];yt((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*68|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{zt(H,b[A>>1]|0);a[H+2>>0]=c[C>>2];a[H+3>>0]=1;c[J>>2]=(c[D>>2]|0)+(c[E>>2]|0);c[I>>2]=c[D>>2];while(1){if((c[I>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[I>>2]<<2)|0;b[m>>1]=b[H>>1]|0;b[m+2>>1]=b[H+2>>1]|0;c[I>>2]=(c[I>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function yt(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+160|0;q=p+136|0;r=p+132|0;s=p+128|0;t=p+124|0;u=p+120|0;v=p+116|0;w=p+112|0;x=p+108|0;y=p+144|0;z=p+140|0;A=p;B=p+104|0;C=p+100|0;D=p+96|0;E=p+92|0;F=p+88|0;G=p+84|0;H=p+80|0;I=p+76|0;J=p+72|0;K=p+68|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+68|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[C>>2]=c[A+(c[u>>2]<<2)>>2];zt(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[C>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[B>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[B>>2]=(c[B>>2]|0)+1;}}}while(0);c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);zt(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{B=c[q>>2]|0;C=c[J>>2]|0;c[J>>2]=C+1;u=B+(C<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}l=p;return;}function zt(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Gq()|0)!=0;d=c[h>>2]|0;if(f){At(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function At(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=c[g>>2]|0;a[e>>0]=a[h>>0]|0;a[e+1>>0]=a[h+1>>0]|0;l=f;return;}function Bt(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+80|0;i=h+60|0;j=h+56|0;k=h+52|0;m=h+48|0;n=h+44|0;o=h+40|0;p=h+36|0;q=h+32|0;r=h+28|0;s=h+24|0;t=h+8|0;u=h+64|0;v=h+4|0;w=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[j>>2];c[q>>2]=(c[p>>2]|0)+(c[k>>2]|0);c[r>>2]=(c[o>>2]|0)+4;c[s>>2]=c[r>>2];_s(u,c[o>>2]|0);c[v>>2]=d[u+2>>0];c[w>>2]=Ds(t,c[m>>2]|0,c[n>>2]|0)|0;if(at(c[w>>2]|0)|0){c[i>>2]=c[w>>2];x=c[i>>2]|0;l=h;return x|0;}nt(c[p>>2]|0,t,c[q>>2]|0,c[s>>2]|0,c[v>>2]|0)|0;if(ct(t)|0){c[i>>2]=c[k>>2];x=c[i>>2]|0;l=h;return x|0;}else{c[i>>2]=-20;x=c[i>>2]|0;l=h;return x|0;}return 0;}function Ct(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[(c[d>>2]|0)+21536>>2]=5;c[(c[d>>2]|0)+21580>>2]=0;c[(c[d>>2]|0)+21520>>2]=0;c[(c[d>>2]|0)+21524>>2]=0;c[(c[d>>2]|0)+21528>>2]=0;c[(c[d>>2]|0)+21532>>2]=0;c[(c[d>>2]|0)+5132>>2]=201326604;c[(c[d>>2]|0)+21588>>2]=0;c[(c[d>>2]|0)+21584>>2]=0;c[(c[d>>2]|0)+21684>>2]=0;c[e>>2]=0;while(1){if((c[e>>2]|0)>=3)break;c[(c[d>>2]|0)+21540+(c[e>>2]<<2)>>2]=c[11940+(c[e>>2]<<2)>>2];c[e>>2]=(c[e>>2]|0)+1;}l=b;return 0;}function Dt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)>>>0<8){c[f>>2]=Et(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}c[j>>2]=Bq(c[h>>2]|0)|0;if((c[j>>2]|0)!=-332356553){c[f>>2]=Et(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}j=Bq((c[h>>2]|0)+4|0)|0;c[(c[g>>2]|0)+21684>>2]=j;c[h>>2]=(c[h>>2]|0)+8;c[i>>2]=(c[i>>2]|0)-8;c[k>>2]=Ft(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;if(hr(c[k>>2]|0)|0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}else{c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);c[f>>2]=Et(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}return 0;}function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+21532>>2]=c[(c[f>>2]|0)+21520>>2];c[(c[f>>2]|0)+21528>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+21520>>2]|0)-(c[(c[f>>2]|0)+21524>>2]|0)));c[(c[f>>2]|0)+21524>>2]=c[g>>2];c[(c[f>>2]|0)+21520>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return 0;}function Ft(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;e=l;l=l+336|0;f=e+324|0;g=e+320|0;h=e+316|0;i=e+312|0;j=e+308|0;k=e+304|0;m=e+300|0;n=e+192|0;o=e+296|0;p=e+292|0;q=e+288|0;r=e+284|0;s=e+80|0;t=e+280|0;u=e+276|0;v=e+272|0;w=e+268|0;x=e;y=e+264|0;z=e+260|0;A=e+256|0;B=e+252|0;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[h>>2];c[k>>2]=(c[j>>2]|0)+(c[i>>2]|0);c[m>>2]=vt((c[g>>2]|0)+5132|0,c[h>>2]|0,c[i>>2]|0)|0;if(hr(c[m>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[m>>2]|0);c[o>>2]=28;c[q>>2]=Vs(n,o,p,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if(hr(c[q>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[p>>2]|0)>>>0>8){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[r>>2]=Us((c[g>>2]|0)+2052|0,n,c[o>>2]|0,c[p>>2]|0)|0;if(hr(c[r>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[q>>2]|0);c[t>>2]=52;c[v>>2]=Vs(s,t,u,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if(hr(c[v>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[u>>2]|0)>>>0>9){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[w>>2]=Us((c[g>>2]|0)+3080|0,s,c[t>>2]|0,c[u>>2]|0)|0;if(hr(c[w>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[v>>2]|0);c[y>>2]=35;c[A>>2]=Vs(x,y,z,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if(hr(c[A>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[z>>2]|0)>>>0>9){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[B>>2]=Us(c[g>>2]|0,x,c[y>>2]|0,c[z>>2]|0)|0;if(hr(c[B>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[A>>2]|0);if(((c[j>>2]|0)+12|0)>>>0>(c[k>>2]|0)>>>0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}k=Bq(c[j>>2]|0)|0;c[(c[g>>2]|0)+21540>>2]=k;if(c[(c[g>>2]|0)+21540>>2]|0?(c[(c[g>>2]|0)+21540>>2]|0)>>>0<(c[i>>2]|0)>>>0:0){k=Bq((c[j>>2]|0)+4|0)|0;c[(c[g>>2]|0)+21540+4>>2]=k;if(c[(c[g>>2]|0)+21540+4>>2]|0?(c[(c[g>>2]|0)+21540+4>>2]|0)>>>0<(c[i>>2]|0)>>>0:0){k=Bq((c[j>>2]|0)+8|0)|0;c[(c[g>>2]|0)+21540+8>>2]=k;if(c[(c[g>>2]|0)+21540+8>>2]|0?(c[(c[g>>2]|0)+21540+8>>2]|0)>>>0<(c[i>>2]|0)>>>0:0){c[j>>2]=(c[j>>2]|0)+12;c[(c[g>>2]|0)+21588>>2]=1;c[(c[g>>2]|0)+21584>>2]=1;c[f>>2]=(c[j>>2]|0)-(c[h>>2]|0);C=c[f>>2]|0;l=e;return C|0;}c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}function Gt(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;if((c[a>>2]|0)==0?(c[a+4>>2]|0)==0:0){c[a>>2]=c[2988];c[a+4>>2]=c[2989];c[a+8>>2]=c[2990];}if(c[a>>2]|0?c[a+4>>2]|0:0){c[e>>2]=qc[c[a>>2]&63](c[a+8>>2]|0,152808)|0;if(c[e>>2]|0){f=(c[e>>2]|0)+21692|0;c[f>>2]=c[a>>2];c[f+4>>2]=c[a+4>>2];c[f+8>>2]=c[a+8>>2];Ct(c[e>>2]|0)|0;c[d>>2]=c[e>>2];g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=0;g=c[d>>2]|0;l=b;return g|0;}}c[d>>2]=0;g=c[d>>2]|0;l=b;return g|0;}function Ht(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[d+8>>2]=a;c[e>>2]=b;c[f>>2]=Cy(c[e>>2]|0)|0;l=d;return c[f>>2]|0;}function It(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[d+4>>2]=a;c[e>>2]=b;Dy(c[e>>2]|0);l=d;return;}function Jt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=Ou(c[g>>2]|0)|0;if(jr(c[j>>2]|0)|0){c[f>>2]=c[j>>2];m=c[f>>2]|0;l=e;return m|0;}if((c[h>>2]|0)!=0&(c[i>>2]|0)!=0?(c[k>>2]=Pu(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0,jr(c[k>>2]|0)|0):0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}function Kt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+21520>>2]|0)){l=d;return;}c[(c[e>>2]|0)+21532>>2]=c[(c[e>>2]|0)+21520>>2];c[(c[e>>2]|0)+21528>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+21520>>2]|0)-(c[(c[e>>2]|0)+21524>>2]|0)));c[(c[e>>2]|0)+21524>>2]=c[f>>2];c[(c[e>>2]|0)+21520>>2]=c[f>>2];l=d;return;}function Lt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=l;l=l+80|0;h=g+68|0;i=g+64|0;j=g+60|0;k=g+56|0;m=g+52|0;n=g+48|0;o=g+44|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+16|0;v=g+8|0;w=g+4|0;x=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=(c[o>>2]|0)+(c[n>>2]|0);c[q>>2]=c[j>>2];c[r>>2]=c[q>>2];c[s>>2]=(c[q>>2]|0)+(c[k>>2]|0);c[t>>2]=c[n>>2];c[u>>2]=0;c[u+4>>2]=0;if((c[n>>2]|0)>>>0<8){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}c[v>>2]=Nq(c[m>>2]|0,5)|0;if(jr(c[v>>2]|0)|0){c[h>>2]=c[v>>2];y=c[h>>2]|0;l=g;return y|0;}if((c[n>>2]|0)>>>0<((c[v>>2]|0)+3|0)>>>0){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}if(Mt(c[i>>2]|0,c[m>>2]|0,c[v>>2]|0)|0){c[h>>2]=-20;y=c[h>>2]|0;l=g;return y|0;}c[o>>2]=(c[o>>2]|0)+(c[v>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[v>>2]|0);a:while(1){c[w>>2]=0;c[x>>2]=kr(c[o>>2]|0,(c[p>>2]|0)-(c[o>>2]|0)|0,u)|0;if(jr(c[x>>2]|0)|0){z=11;break;}c[o>>2]=(c[o>>2]|0)+3;c[t>>2]=(c[t>>2]|0)-3;if((c[x>>2]|0)>>>0>(c[t>>2]|0)>>>0){z=13;break;}switch(c[u>>2]|0){case 2:{z=17;break a;break;}case 0:{c[w>>2]=Nt(c[i>>2]|0,c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[x>>2]|0)|0;break;}case 1:{c[w>>2]=Ot(c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[x>>2]|0)|0;break;}case 3:{if(c[t>>2]|0){z=19;break a;}break;}default:{z=20;break a;}}if(!(c[x>>2]|0)){z=25;break;}v=(jr(c[w>>2]|0)|0)!=0;A=c[w>>2]|0;if(v){z=23;break;}c[r>>2]=(c[r>>2]|0)+A;c[o>>2]=(c[o>>2]|0)+(c[x>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[x>>2]|0);}if((z|0)==11){c[h>>2]=c[x>>2];y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==13){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==17){c[h>>2]=-1;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==19){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==20){c[h>>2]=-1;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==23){c[h>>2]=A;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==25){c[h>>2]=(c[r>>2]|0)-(c[q>>2]|0);y=c[h>>2]|0;l=g;return y|0;}return 0;}function Mt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=zq((c[g>>2]|0)+21544|0,c[h>>2]|0,c[i>>2]|0)|0;if(au()|0?(c[(c[g>>2]|0)+21544+8>>2]|0)>>>0>25:0){c[f>>2]=-14;k=c[f>>2]|0;l=e;return k|0;}c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}function Nt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];if((c[n>>2]|0)>>>0>=131072){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}c[p>>2]=Pt(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(jr(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+f;c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=Qt(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Ot(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function Pt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+40|0;p=g+36|0;q=g+32|0;r=g+28|0;s=g+24|0;t=g+20|0;u=g+16|0;v=g+12|0;w=g+8|0;x=g+4|0;y=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<3){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch((d[c[m>>2]>>0]|0)>>6|0){case 0:{c[p>>2]=0;c[q>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[k>>2]|0)>>>0<5){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch(c[q>>2]|0){case 3:{c[q>>2]=5;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<14)+((d[(c[m>>2]|0)+1>>0]|0)<<6)+((d[(c[m>>2]|0)+2>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&3)<<16)+((d[(c[m>>2]|0)+3>>0]|0)<<8)+(d[(c[m>>2]|0)+4>>0]|0);break;}case 2:{c[q>>2]=4;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<10)+((d[(c[m>>2]|0)+1>>0]|0)<<2)+((d[(c[m>>2]|0)+2>>0]|0)>>6);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&63)<<8)+(d[(c[m>>2]|0)+3>>0]|0);break;}default:{c[q>>2]=3;c[p>>2]=(d[c[m>>2]>>0]|0)&16;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);}}if((c[n>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(((c[o>>2]|0)+(c[q>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}j=(c[i>>2]|0)+21580|0;f=c[n>>2]|0;e=(c[m>>2]|0)+(c[q>>2]|0)|0;b=c[o>>2]|0;if(c[p>>2]|0)A=lu(j,f,e,b)|0;else A=mu(j,f,e,b)|0;if(jr(A)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+21572>>2]=(c[i>>2]|0)+21580;c[(c[i>>2]|0)+21576>>2]=c[n>>2];n=(c[i>>2]|0)+21580+(c[(c[i>>2]|0)+21576>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=(c[o>>2]|0)+(c[q>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 1:{c[t>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[t>>2]|0)!=1){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(!(c[(c[i>>2]|0)+21568>>2]|0)){c[h>>2]=-30;z=c[h>>2]|0;l=g;return z|0;}c[t>>2]=3;c[r>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[s>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if(((c[s>>2]|0)+(c[t>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}c[u>>2]=nu((c[i>>2]|0)+21580|0,c[r>>2]|0,(c[m>>2]|0)+(c[t>>2]|0)|0,c[s>>2]|0,(c[i>>2]|0)+5132|0)|0;if(jr(c[u>>2]|0)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+21572>>2]=(c[i>>2]|0)+21580;c[(c[i>>2]|0)+21576>>2]=c[r>>2];r=(c[i>>2]|0)+21580+(c[(c[i>>2]|0)+21576>>2]|0)|0;a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;a[r+6>>0]=0;a[r+7>>0]=0;c[h>>2]=(c[s>>2]|0)+(c[t>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[w>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[w>>2]|0){case 3:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);break;}case 2:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[w>>2]=1;c[v>>2]=(d[c[m>>2]>>0]|0)&31;}}if(((c[w>>2]|0)+(c[v>>2]|0)+8|0)>>>0<=(c[k>>2]|0)>>>0){c[(c[i>>2]|0)+21572>>2]=(c[m>>2]|0)+(c[w>>2]|0);c[(c[i>>2]|0)+21576>>2]=c[v>>2];c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}if(((c[v>>2]|0)+(c[w>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{mE((c[i>>2]|0)+21580|0,(c[m>>2]|0)+(c[w>>2]|0)|0,c[v>>2]|0)|0;c[(c[i>>2]|0)+21572>>2]=(c[i>>2]|0)+21580;c[(c[i>>2]|0)+21576>>2]=c[v>>2];t=(c[i>>2]|0)+21580+(c[(c[i>>2]|0)+21576>>2]|0)|0;a[t>>0]=0;a[t+1>>0]=0;a[t+2>>0]=0;a[t+3>>0]=0;a[t+4>>0]=0;a[t+5>>0]=0;a[t+6>>0]=0;a[t+7>>0]=0;c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 3:{c[y>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[y>>2]|0){case 3:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if((c[k>>2]|0)>>>0<4){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[y>>2]=1;c[x>>2]=(d[c[m>>2]>>0]|0)&31;}}if((c[x>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{oE((c[i>>2]|0)+21580|0,(d[(c[m>>2]|0)+(c[y>>2]|0)>>0]|0)&255|0,(c[x>>2]|0)+8|0)|0;c[(c[i>>2]|0)+21572>>2]=(c[i>>2]|0)+21580;c[(c[i>>2]|0)+21576>>2]=c[x>>2];c[h>>2]=(c[y>>2]|0)+1;z=c[h>>2]|0;l=g;return z|0;}break;}default:{}}return 0;}function Qt(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;g=l;l=l+176|0;h=g+164|0;i=g+160|0;j=g+156|0;k=g+152|0;m=g+148|0;n=g+144|0;o=g+140|0;p=g+136|0;q=g+132|0;r=g+128|0;s=g+124|0;t=g+120|0;u=g+116|0;v=g+112|0;w=g+108|0;x=g+104|0;y=g+100|0;z=g+96|0;A=g+92|0;B=g+88|0;C=g+84|0;D=g+80|0;E=g+68|0;F=g+16|0;G=g+12|0;H=g+8|0;I=g+4|0;J=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=c[(c[j>>2]|0)+21572>>2];c[v>>2]=(c[u>>2]|0)+(c[(c[j>>2]|0)+21576>>2]|0);c[w>>2]=c[j>>2];c[x>>2]=(c[j>>2]|0)+3080;c[y>>2]=(c[j>>2]|0)+2052;c[z>>2]=c[(c[j>>2]|0)+21524>>2];c[A>>2]=c[(c[j>>2]|0)+21528>>2];c[B>>2]=c[(c[j>>2]|0)+21532>>2];c[D>>2]=Rt(C,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[(c[j>>2]|0)+21568>>2]|0,c[p>>2]|0,c[o>>2]|0)|0;o=(jr(c[D>>2]|0)|0)!=0;m=c[D>>2]|0;if(o){c[i>>2]=m;K=c[i>>2]|0;l=g;return K|0;}c[p>>2]=(c[p>>2]|0)+m;c[(c[j>>2]|0)+21568>>2]=0;if(c[C>>2]|0){c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+8>>2]=1;c[G>>2]=0;while(1){if((c[G>>2]|0)>>>0>=3)break;c[F+40+(c[G>>2]<<2)>>2]=1;c[G>>2]=(c[G>>2]|0)+1;}c[H>>2]=St(F,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;if(jr(c[H>>2]|0)|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}Tt(F+16|0,F,c[w>>2]|0);Tt(F+24|0,F,c[y>>2]|0);Tt(F+32|0,F,c[x>>2]|0);while(1){x=(Ut(F)|0)>>>0<=2;L=c[C>>2]|0;if(!(x?(c[C>>2]|0)!=0:0))break;c[C>>2]=L+-1;Vt(E,F);x=c[t>>2]|0;y=c[s>>2]|0;w=c[v>>2]|0;H=c[z>>2]|0;p=c[A>>2]|0;q=c[B>>2]|0;c[h>>2]=c[E>>2];c[h+4>>2]=c[E+4>>2];c[h+8>>2]=c[E+8>>2];c[I>>2]=Wt(x,y,h,u,w,H,p,q)|0;q=(jr(c[I>>2]|0)|0)!=0;M=c[I>>2]|0;if(q){N=12;break;}c[t>>2]=(c[t>>2]|0)+M;}if((N|0)==12){c[i>>2]=M;K=c[i>>2]|0;l=g;return K|0;}if(L|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}}c[J>>2]=(c[v>>2]|0)-(c[u>>2]|0);if((c[u>>2]|0)>>>0>(c[v>>2]|0)>>>0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}if(((c[t>>2]|0)+(c[J>>2]|0)|0)>>>0>(c[s>>2]|0)>>>0){c[i>>2]=-70;K=c[i>>2]|0;l=g;return K|0;}else{mE(c[t>>2]|0,c[u>>2]|0,c[J>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[J>>2]|0);c[i>>2]=(c[t>>2]|0)-(c[r>>2]|0);K=c[i>>2]|0;l=g;return K|0;}return 0;}function Rt(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;j=l;l=l+80|0;k=j+68|0;m=j+64|0;n=j+60|0;o=j+56|0;p=j+52|0;q=j+48|0;r=j+44|0;s=j+40|0;t=j+36|0;u=j+32|0;v=j+28|0;w=j+24|0;x=j+20|0;y=j+16|0;z=j+12|0;A=j+8|0;B=j+4|0;C=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=c[r>>2];c[u>>2]=(c[t>>2]|0)+(c[s>>2]|0);c[v>>2]=c[t>>2];if((c[s>>2]|0)>>>0<1){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}s=c[v>>2]|0;c[v>>2]=s+1;c[w>>2]=d[s>>0];if(!(c[w>>2]|0)){c[c[m>>2]>>2]=0;c[k>>2]=1;D=c[k>>2]|0;l=j;return D|0;}do{if((c[w>>2]|0)>127){s=c[v>>2]|0;if((c[w>>2]|0)==255){if((s+2|0)>>>0<=(c[u>>2]|0)>>>0){c[w>>2]=((Oq(c[v>>2]|0)|0)&65535)+32512;c[v>>2]=(c[v>>2]|0)+2;break;}c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else{if(s>>>0<(c[u>>2]|0)>>>0){s=(c[w>>2]|0)-128<<8;r=c[v>>2]|0;c[v>>2]=r+1;c[w>>2]=s+(d[r>>0]|0);break;}c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}}}while(0);c[c[m>>2]>>2]=c[w>>2];c[x>>2]=(d[c[v>>2]>>0]|0)>>6;c[y>>2]=(d[c[v>>2]>>0]|0)>>4&3;c[z>>2]=(d[c[v>>2]>>0]|0)>>2&3;c[v>>2]=(c[v>>2]|0)+1;if((c[v>>2]|0)>>>0>((c[u>>2]|0)+-3|0)>>>0){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}c[A>>2]=gu(c[n>>2]|0,c[x>>2]|0,35,9,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,6560,6,c[q>>2]|0)|0;if(jr(c[A>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}c[v>>2]=(c[v>>2]|0)+(c[A>>2]|0);c[B>>2]=gu(c[p>>2]|0,c[y>>2]|0,28,8,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,6640,5,c[q>>2]|0)|0;if(jr(c[B>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}c[v>>2]=(c[v>>2]|0)+(c[B>>2]|0);c[C>>2]=gu(c[o>>2]|0,c[z>>2]|0,52,9,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,6704,6,c[q>>2]|0)|0;if(jr(c[C>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}else{c[v>>2]=(c[v>>2]|0)+(c[C>>2]|0);c[k>>2]=(c[v>>2]|0)-(c[t>>2]|0);D=c[k>>2]|0;l=j;return D|0;}return 0;}function St(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}f=(c[k>>2]|0)>>>0>=4;c[(c[i>>2]|0)+12>>2]=c[j>>2];do{if(f){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;e=eu(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=e;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0){e=8-(fu(d[m>>0]|0)|0)|0;c[(c[i>>2]|0)+4>>2]=e;break;}c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);p=9;break;}case 6:{p=9;break;}case 5:{p=10;break;}case 4:{p=11;break;}case 3:{p=12;break;}case 2:{p=13;break;}default:{}}if((p|0)==9){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);p=10;}if((p|0)==10){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);p=11;}if((p|0)==11){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);p=12;}if((p|0)==12){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);p=13;}if((p|0)==13){e=c[i>>2]|0;c[e>>2]=(c[e>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0){e=8-(fu(d[n>>0]|0)|0)|0;c[(c[i>>2]|0)+4>>2]=e;e=(c[i>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function Tt(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[i>>2];c[k>>2]=c[j>>2];j=$t(c[h>>2]|0,e[c[k>>2]>>1]|0)|0;c[c[g>>2]>>2]=j;Ut(c[h>>2]|0)|0;c[(c[g>>2]|0)+4>>2]=(c[i>>2]|0)+4;l=f;return;}function Ut(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=((c[(c[e>>2]|0)+12>>2]|0)+4|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=eu(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=eu(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function Vt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=l;l=l+48|0;e=d+40|0;f=d+36|0;g=d+32|0;h=d+28|0;i=d+24|0;j=d+20|0;k=d+16|0;m=d+12|0;n=d+8|0;o=d+4|0;p=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(_t((c[f>>2]|0)+16|0)|0)&255;c[h>>2]=(_t((c[f>>2]|0)+32|0)|0)&255;c[i>>2]=(_t((c[f>>2]|0)+24|0)|0)&255;c[j>>2]=c[5696+(c[g>>2]<<2)>>2];c[k>>2]=c[5840+(c[h>>2]<<2)>>2];c[m>>2]=c[i>>2];c[n>>2]=(c[j>>2]|0)+(c[k>>2]|0)+(c[m>>2]|0);if(c[i>>2]|0){b=c[6064+(c[i>>2]<<2)>>2]|0;c[o>>2]=b+($t(c[f>>2]|0,c[m>>2]|0)|0);if(au()|0)Ut(c[f>>2]|0)|0;}else c[o>>2]=0;do{if((c[o>>2]|0)>>>0<3){if((c[g>>2]|0)==0&(c[o>>2]|0)>>>0<=1)c[o>>2]=1-(c[o>>2]|0);m=(c[f>>2]|0)+40|0;if(!(c[o>>2]|0)){c[o>>2]=c[m>>2];break;}c[p>>2]=c[m+(c[o>>2]<<2)>>2];if((c[o>>2]|0)!=1)c[(c[f>>2]|0)+40+8>>2]=c[(c[f>>2]|0)+40+4>>2];c[(c[f>>2]|0)+40+4>>2]=c[(c[f>>2]|0)+40>>2];m=c[p>>2]|0;c[o>>2]=m;c[(c[f>>2]|0)+40>>2]=m;}else{c[o>>2]=(c[o>>2]|0)-2;c[(c[f>>2]|0)+40+8>>2]=c[(c[f>>2]|0)+40+4>>2];c[(c[f>>2]|0)+40+4>>2]=c[(c[f>>2]|0)+40>>2];c[(c[f>>2]|0)+40>>2]=c[o>>2];}}while(0);c[(c[e>>2]|0)+8>>2]=c[o>>2];o=(c[6192+(c[h>>2]<<2)>>2]|0)+3|0;if((c[h>>2]|0)>>>0>31)q=$t(c[f>>2]|0,c[k>>2]|0)|0;else q=0;c[(c[e>>2]|0)+4>>2]=o+q;if(au()|0?((c[k>>2]|0)+(c[j>>2]|0)|0)>>>0>24:0)Ut(c[f>>2]|0)|0;k=c[6416+(c[g>>2]<<2)>>2]|0;if((c[g>>2]|0)>>>0>15)r=$t(c[f>>2]|0,c[j>>2]|0)|0;else r=0;c[c[e>>2]>>2]=k+r;r=(au()|0)!=0;if(r|(c[n>>2]|0)>>>0>31)Ut(c[f>>2]|0)|0;bu((c[f>>2]|0)+16|0,c[f>>2]|0);bu((c[f>>2]|0)+32|0,c[f>>2]|0);if(!(au()|0)){s=c[f>>2]|0;t=s+24|0;u=c[f>>2]|0;bu(t,u);l=d;return;}Ut(c[f>>2]|0)|0;s=c[f>>2]|0;t=s+24|0;u=c[f>>2]|0;bu(t,u);l=d;return;}function Wt(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;k=l;l=l+64|0;m=k+60|0;n=k+56|0;o=k+52|0;p=k+48|0;q=k+44|0;r=k+40|0;s=k+36|0;t=k+32|0;u=k+28|0;v=k+24|0;w=k+20|0;x=k+16|0;y=k+12|0;z=k+8|0;A=k+4|0;B=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+4>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+8>>2]|0));if((c[u>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}Xt(c[n>>2]|0,c[c[p>>2]>>2]|0,c[e>>2]|0);c[n>>2]=c[u>>2];c[c[p>>2]>>2]=c[y>>2];do{if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+4>>2]|0)|0)>>>0<=(c[t>>2]|0)>>>0){nE(c[u>>2]|0,c[z>>2]|0,c[e+4>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);y=e+4|0;c[y>>2]=(c[y>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];if((c[n>>2]|0)>>>0<=(c[x>>2]|0)>>>0?(c[e+4>>2]|0)>>>0>=3:0)break;while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;y=c[z>>2]|0;c[z>>2]=y+1;p=a[y>>0]|0;y=c[n>>2]|0;c[n>>2]=y+1;a[y>>0]=p;}c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}}while(0);if((c[e+8>>2]|0)>>>0<8){c[B>>2]=c[6816+(c[e+8>>2]<<2)>>2];a[c[n>>2]>>0]=a[c[z>>2]>>0]|0;a[(c[n>>2]|0)+1>>0]=a[(c[z>>2]|0)+1>>0]|0;a[(c[n>>2]|0)+2>>0]=a[(c[z>>2]|0)+2>>0]|0;a[(c[n>>2]|0)+3>>0]=a[(c[z>>2]|0)+3>>0]|0;c[z>>2]=(c[z>>2]|0)+(c[6848+(c[e+8>>2]<<2)>>2]|0);Yt((c[n>>2]|0)+4|0,c[z>>2]|0);c[z>>2]=(c[z>>2]|0)+(0-(c[B>>2]|0));}else Zt(c[n>>2]|0,c[z>>2]|0);c[n>>2]=(c[n>>2]|0)+8;c[z>>2]=(c[z>>2]|0)+8;B=c[n>>2]|0;a:do{if((c[w>>2]|0)>>>0>((c[o>>2]|0)+-13|0)>>>0){if(B>>>0<(c[x>>2]|0)>>>0){Xt(c[n>>2]|0,c[z>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);c[z>>2]=(c[z>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;r=c[z>>2]|0;c[z>>2]=r+1;A=a[r>>0]|0;r=c[n>>2]|0;c[n>>2]=r+1;a[r>>0]=A;}}else Xt(B,c[z>>2]|0,(c[e+4>>2]|0)-8|0);}while(0);c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}function Xt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Zt(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Yt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function Zt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function _t(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=(c[(c[f>>2]|0)+4>>2]|0)+(c[c[f>>2]>>2]<<2)|0;b[g>>1]=b[d>>1]|0;b[g+2>>1]=b[d+2>>1]|0;l=e;return a[g+2>>0]|0;}function $t(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=cu(c[e>>2]|0,c[f>>2]|0)|0;du(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function au(){return 1;}function bu(a,f){a=a|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+16|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=f;f=(c[(c[h>>2]|0)+4>>2]|0)+(c[c[h>>2]>>2]<<2)|0;b[j>>1]=b[f>>1]|0;b[j+2>>1]=b[f+2>>1]|0;c[k>>2]=d[j+3>>0];c[m>>2]=$t(c[i>>2]|0,c[k>>2]|0)|0;c[c[h>>2]>>2]=(e[j>>1]|0)+(c[m>>2]|0);l=g;return;}function cu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function du(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function eu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(au()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=Mq(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=Pq(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function fu(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function gu(b,e,f,g,h,i,j,k,m){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;n=l;l=l+160|0;o=n+152|0;p=n+148|0;q=n+144|0;r=n+140|0;s=n+136|0;t=n+132|0;u=n+128|0;v=n+124|0;w=n+120|0;x=n+116|0;y=n+112|0;z=n;A=n+108|0;c[p>>2]=b;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;c[v>>2]=j;c[w>>2]=k;c[x>>2]=m;a:do{switch(c[q>>2]|0){case 1:{if(!(c[u>>2]|0)){c[o>>2]=-72;break a;}if((d[c[t>>2]>>0]|0)>>>0>(c[r>>2]|0)>>>0){c[o>>2]=-20;break a;}else{hu(c[p>>2]|0,a[c[t>>2]>>0]|0)|0;c[o>>2]=1;break a;}break;}case 0:{iu(c[p>>2]|0,c[v>>2]|0,c[r>>2]|0,c[w>>2]|0)|0;c[o>>2]=0;break;}case 2:{if(c[x>>2]|0){c[o>>2]=0;break a;}else{c[o>>2]=-20;break a;}break;}default:{c[A>>2]=ju(z,r,y,c[t>>2]|0,c[u>>2]|0)|0;if(jr(c[A>>2]|0)|0){c[o>>2]=-20;break a;}if((c[y>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break a;}else{iu(c[p>>2]|0,z,c[r>>2]|0,c[y>>2]|0)|0;c[o>>2]=c[A>>2];break a;}}}}while(0);l=n;return c[o>>2]|0;}function hu(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+20|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=d;a[h>>0]=e;c[i>>2]=c[g>>2];c[j>>2]=c[i>>2];c[k>>2]=(c[g>>2]|0)+4;c[m>>2]=c[k>>2];b[c[j>>2]>>1]=0;b[(c[j>>2]|0)+2>>1]=0;b[c[m>>2]>>1]=0;a[(c[m>>2]|0)+2>>0]=a[h>>0]|0;a[(c[m>>2]|0)+3>>0]=0;l=f;return 0;}function iu(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;j=l;l=l+592|0;k=j+576|0;m=j+572|0;n=j+568|0;o=j+564|0;p=j+560|0;q=j+556|0;r=j+552|0;s=j;t=j+548|0;u=j+544|0;v=j+540|0;w=j+584|0;x=j+582|0;y=j+536|0;z=j+532|0;A=j+528|0;B=j+524|0;C=j+520|0;D=j+516|0;E=j+512|0;F=j+588|0;G=j+580|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[q>>2]=(c[m>>2]|0)+4;c[r>>2]=c[q>>2];c[t>>2]=(c[o>>2]|0)+1;c[u>>2]=1<<c[p>>2];c[v>>2]=(c[u>>2]|0)-1;if((c[o>>2]|0)>>>0>255){c[k>>2]=-46;H=c[k>>2]|0;l=j;return H|0;}if((c[p>>2]|0)>>>0>12){c[k>>2]=-44;H=c[k>>2]|0;l=j;return H|0;}b[w>>1]=c[p>>2];b[w+2>>1]=1;b[x>>1]=1<<(c[p>>2]|0)-1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0)==-1){o=c[y>>2]&255;q=c[r>>2]|0;i=c[v>>2]|0;c[v>>2]=i+-1;a[q+(i<<2)+2>>0]=o;b[s+(c[y>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0)>=(b[x>>1]|0))b[w+2>>1]=0;b[s+(c[y>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[y>>2]<<1)>>1]|0;}c[y>>2]=(c[y>>2]|0)+1;}y=c[m>>2]|0;b[y>>1]=b[w>>1]|0;b[y+2>>1]=b[w+2>>1]|0;c[z>>2]=(c[u>>2]|0)-1;c[A>>2]=((c[u>>2]|0)>>>1)+((c[u>>2]|0)>>>3)+3;c[C>>2]=0;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;c[D>>2]=0;while(1){I=c[B>>2]|0;if((c[D>>2]|0)>=(b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0))break;a[(c[r>>2]|0)+(c[C>>2]<<2)+2>>0]=I;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0)&c[z>>2];while(1){if((c[C>>2]|0)>>>0<=(c[v>>2]|0)>>>0)break;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0)&c[z>>2];}c[D>>2]=(c[D>>2]|0)+1;}c[B>>2]=I+1;}if(c[C>>2]|0){c[k>>2]=-1;H=c[k>>2]|0;l=j;return H|0;}c[E>>2]=0;while(1){if((c[E>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;a[F>>0]=a[(c[r>>2]|0)+(c[E>>2]<<2)+2>>0]|0;C=s+(d[F>>0]<<1)|0;I=b[C>>1]|0;b[C>>1]=I+1<<16>>16;b[G>>1]=I;I=c[p>>2]|0;C=I-(fu(e[G>>1]|0)|0)&255;a[(c[r>>2]|0)+(c[E>>2]<<2)+3>>0]=C;b[(c[r>>2]|0)+(c[E>>2]<<2)>>1]=(e[G>>1]<<d[(c[r>>2]|0)+(c[E>>2]<<2)+3>>0])-(c[u>>2]|0);c[E>>2]=(c[E>>2]|0)+1;}c[k>>2]=0;H=c[k>>2]|0;l=j;return H|0;}function ju(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;A=h+70|0;B=h+68|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=Mq(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if((c[t>>2]|0)<=1)break;if((c[x>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0)break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=Mq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=19;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[m+(n<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;n=Mq(c[r>>2]|0)|0;c[v>>2]=n>>>(c[w>>2]|0);}}while(0);b[A>>1]=(c[u>>2]<<1)-1-(c[t>>2]|0);n=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(b[A>>1]|0)>>>0){b[B>>1]=n&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{b[B>>1]=n&(m<<1)-1;if((b[B>>1]|0)>=(c[u>>2]|0))b[B>>1]=(b[B>>1]|0)-(b[A>>1]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}b[B>>1]=(b[B>>1]|0)+-1<<16>>16;m=(ku(b[B>>1]|0)|0)<<16>>16;c[t>>2]=(c[t>>2]|0)-m;m=b[B>>1]|0;n=c[j>>2]|0;g=c[x>>2]|0;c[x>>2]=g+1;b[n+(g<<1)>>1]=m;c[y>>2]=((b[B>>1]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=Mq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==19){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-1;C=c[i>>2]|0;l=h;return C|0;}c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);if(((c[r>>2]|0)-(c[p>>2]|0)|0)>>>0>(c[o>>2]|0)>>>0){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}else{c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function ku(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=a;a=b[d>>1]|0;l=c;return((b[d>>1]|0)<0?0-a|0:a)&65535|0;}function lu(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=Ju(n,c[k>>2]|0,c[m>>2]|0)|0;k=(ou(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=Nu(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function mu(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=l;l=l+48|0;h=g+44|0;i=g+40|0;j=g+36|0;k=g+32|0;m=g+28|0;n=g+16|0;o=g+12|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;if(!(c[j>>2]|0)){c[h>>2]=-70;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)>>>0>(c[j>>2]|0)>>>0){c[h>>2]=-20;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==(c[j>>2]|0)){mE(c[i>>2]|0,c[k>>2]|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==1){oE(c[i>>2]|0,(d[c[k>>2]>>0]|0)&255|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}c[o>>2]=(c[m>>2]<<4>>>0)/((c[j>>2]|0)>>>0)|0;c[p>>2]=(c[j>>2]|0)>>>8;c[q>>2]=0;while(1){if((c[q>>2]|0)>>>0>=3)break;f=(c[7008+((c[o>>2]|0)*24|0)+(c[q>>2]<<3)>>2]|0)+(N(c[7008+((c[o>>2]|0)*24|0)+(c[q>>2]<<3)+4>>2]|0,c[p>>2]|0)|0)|0;c[n+(c[q>>2]<<2)>>2]=f;c[q>>2]=(c[q>>2]|0)+1;}q=n+4|0;c[q>>2]=(c[q>>2]|0)+((c[n+4>>2]|0)>>>4);q=n+8|0;c[q>>2]=(c[q>>2]|0)+((c[n+8>>2]|0)>>>3);c[r>>2]=0;c[r>>2]=(c[n+4>>2]|0)>>>0<(c[n>>2]|0)>>>0?1:0;c[h>>2]=sc[c[11964+(c[r>>2]<<2)>>2]&15](c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;s=c[h>>2]|0;l=g;return s|0;}function nu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=l;l=l+80|0;h=g+68|0;i=g+64|0;j=g+60|0;k=g+56|0;m=g+52|0;n=g+48|0;o=g+44|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+8|0;v=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[c[n>>2]>>2];c[s>>2]=c[n>>2];c[t>>2]=(c[s>>2]|0)+4;c[v>>2]=St(u,c[o>>2]|0,c[m>>2]|0)|0;if(ou(c[v>>2]|0)|0){c[h>>2]=c[v>>2];w=c[h>>2]|0;l=g;return w|0;}pu(c[p>>2]|0,u,c[q>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;if(qu(u)|0){c[h>>2]=c[j>>2];w=c[h>>2]|0;l=g;return w|0;}else{c[h>>2]=-20;w=c[h>>2]|0;l=g;return w|0;}return 0;}function ou(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=jr(c[d>>2]|0)|0;l=b;return a|0;}function pu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[h>>2];while(1){if(Ut(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>=((c[j>>2]|0)+-7|0)>>>0)break;if(ru()|0){f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}ru()|0;f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;if(ru()|0){f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){if(Ut(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=su(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){o=c[h>>2]|0;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=su(o,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}if(o>>>0>=(c[j>>2]|0)>>>0){p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}j=tu(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+j;p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}function qu(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function ru(){return 0;}function su(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=uu(c[j>>2]|0,c[m>>2]|0)|0;m=c[i>>2]|0;i=(c[k>>2]|0)+(c[n>>2]<<2)|0;a[m>>0]=a[i>>0]|0;a[m+1>>0]=a[i+1>>0]|0;du(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0;}function tu(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=uu(c[j>>2]|0,c[m>>2]|0)|0;a[c[i>>2]>>0]=a[(c[k>>2]|0)+(c[n>>2]<<2)>>0]|0;i=c[j>>2]|0;if((d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0)==1){du(i,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return 1;}if((c[i+4>>2]|0)>>>0>=32){l=h;return 1;}du(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);if((c[(c[j>>2]|0)+4>>2]|0)>>>0<=32){l=h;return 1;}c[(c[j>>2]|0)+4>>2]=32;l=h;return 1;}function uu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function vu(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=Ju(n,c[k>>2]|0,c[m>>2]|0)|0;k=(ou(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=Ku(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function wu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+16416|0;g=f+16412|0;h=f+16408|0;i=f+16404|0;j=f+16400|0;k=f+16396|0;m=f;n=f+16392|0;o=f+16388|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;oE(m|0,0,16388)|0;c[m>>2]=12;c[n>>2]=c[j>>2];c[o>>2]=xu(m,c[j>>2]|0,c[k>>2]|0)|0;j=(ou(c[o>>2]|0)|0)!=0;e=c[o>>2]|0;if(j){c[g>>2]=e;p=c[g>>2]|0;l=f;return p|0;}if(e>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;p=c[g>>2]|0;l=f;return p|0;}else{c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[o>>2]|0);c[g>>2]=yu(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,m)|0;p=c[g>>2]|0;l=f;return p|0;}return 0;}function xu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+2128|0;h=g+2124|0;i=g+2120|0;j=g+2116|0;k=g+2112|0;m=g+1760|0;n=g+1248|0;o=g+1168|0;p=g+1088|0;q=g+2108|0;r=g;s=g+2104|0;t=g+2100|0;u=g+2096|0;v=g+2092|0;w=g+2088|0;x=g+2084|0;y=g+2080|0;z=g+2076|0;A=g+2072|0;B=g+2068|0;C=g+2064|0;D=g+2060|0;E=g+2056|0;F=g+2052|0;G=g+2048|0;H=g+2044|0;I=g+2040|0;J=g+2036|0;K=g+2032|0;L=g+2028|0;M=g+2024|0;N=g+2020|0;O=g+2016|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;f=o;e=f+68|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));f=p;e=f+72|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));c[q>>2]=p+4;c[w>>2]=c[c[i>>2]>>2];c[y>>2]=c[i>>2];c[z>>2]=(c[y>>2]|0)+4;if((c[w>>2]|0)>>>0>16){c[h>>2]=-44;P=c[h>>2]|0;l=g;return P|0;}c[x>>2]=zu(m,256,o,v,s,c[j>>2]|0,c[k>>2]|0)|0;if(ou(c[x>>2]|0)|0){c[h>>2]=c[x>>2];P=c[h>>2]|0;l=g;return P|0;}if((c[s>>2]|0)>>>0>(c[w>>2]|0)>>>0){c[h>>2]=-44;P=c[h>>2]|0;l=g;return P|0;}c[t>>2]=c[s>>2];while(1){if(c[o+(c[t>>2]<<2)>>2]|0)break;c[t>>2]=(c[t>>2]|0)+-1;}c[B>>2]=0;c[A>>2]=1;while(1){Q=c[B>>2]|0;if((c[A>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[C>>2]=Q;c[B>>2]=(c[B>>2]|0)+(c[o+(c[A>>2]<<2)>>2]|0);c[(c[q>>2]|0)+(c[A>>2]<<2)>>2]=c[C>>2];c[A>>2]=(c[A>>2]|0)+1;}c[c[q>>2]>>2]=Q;c[u>>2]=c[B>>2];c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[E>>2]=d[m+(c[D>>2]|0)>>0];B=(c[q>>2]|0)+(c[E>>2]<<2)|0;Q=c[B>>2]|0;c[B>>2]=Q+1;c[F>>2]=Q;a[n+(c[F>>2]<<1)>>0]=c[D>>2];a[n+(c[F>>2]<<1)+1>>0]=c[E>>2];c[D>>2]=(c[D>>2]|0)+1;}c[c[q>>2]>>2]=0;c[G>>2]=r;c[H>>2]=(c[w>>2]|0)-(c[s>>2]|0)-1;c[I>>2]=0;c[J>>2]=1;while(1){if((c[J>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[K>>2]=c[I>>2];c[I>>2]=(c[I>>2]|0)+(c[o+(c[J>>2]<<2)>>2]<<(c[J>>2]|0)+(c[H>>2]|0));c[(c[G>>2]|0)+(c[J>>2]<<2)>>2]=c[K>>2];c[J>>2]=(c[J>>2]|0)+1;}c[L>>2]=(c[s>>2]|0)+1-(c[t>>2]|0);c[M>>2]=c[L>>2];while(1){if((c[M>>2]|0)>>>0>=((c[w>>2]|0)-(c[L>>2]|0)+1|0)>>>0)break;c[N>>2]=r+((c[M>>2]|0)*68|0);c[O>>2]=1;while(1){if((c[O>>2]|0)>>>0>=((c[t>>2]|0)+1|0)>>>0)break;c[(c[N>>2]|0)+(c[O>>2]<<2)>>2]=(c[(c[G>>2]|0)+(c[O>>2]<<2)>>2]|0)>>>(c[M>>2]|0);c[O>>2]=(c[O>>2]|0)+1;}c[M>>2]=(c[M>>2]|0)+1;}Au(c[z>>2]|0,c[w>>2]|0,n,c[u>>2]|0,p,r,c[t>>2]|0,(c[s>>2]|0)+1|0);c[h>>2]=c[x>>2];P=c[h>>2]|0;l=g;return P|0;}function yu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+192|0;h=g+184|0;i=g+180|0;j=g+176|0;k=g+172|0;m=g+168|0;n=g+164|0;o=g+160|0;p=g+156|0;q=g+152|0;r=g+148|0;s=g+144|0;t=g+140|0;u=g+136|0;v=g+120|0;w=g+104|0;x=g+88|0;y=g+72|0;z=g+64|0;A=g+60|0;B=g+56|0;C=g+52|0;D=g+48|0;E=g+44|0;F=g+40|0;G=g+36|0;H=g+32|0;I=g+28|0;J=g+24|0;K=g+20|0;L=g+16|0;M=g+12|0;N=g+8|0;O=g+4|0;P=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[m>>2]|0)>>>0<10){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+4;c[t>>2]=c[c[n>>2]>>2];c[z>>2]=(Oq(c[o>>2]|0)|0)&65535;c[A>>2]=(Oq((c[o>>2]|0)+2|0)|0)&65535;c[B>>2]=(Oq((c[o>>2]|0)+4|0)|0)&65535;c[D>>2]=(c[o>>2]|0)+6;c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(((c[j>>2]|0)+3|0)>>>0)/4|0;c[I>>2]=(c[p>>2]|0)+(c[H>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[H>>2]|0);c[K>>2]=(c[J>>2]|0)+(c[H>>2]|0);c[L>>2]=c[p>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];c[O>>2]=c[K>>2];c[C>>2]=(c[m>>2]|0)-((c[z>>2]|0)+(c[A>>2]|0)+(c[B>>2]|0)+6);if((c[C>>2]|0)>>>0>(c[m>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=St(v,c[D>>2]|0,c[z>>2]|0)|0;if(ou(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=St(w,c[E>>2]|0,c[A>>2]|0)|0;if(ou(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=St(x,c[F>>2]|0,c[B>>2]|0)|0;if(ou(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=St(y,c[G>>2]|0,c[C>>2]|0)|0;if(ou(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}u=Ut(v)|0;C=u|(Ut(w)|0);u=C|(Ut(x)|0);c[P>>2]=u|(Ut(y)|0);while(1){if(c[P>>2]|0)break;if((c[O>>2]|0)>>>0>=((c[q>>2]|0)+-7|0)>>>0)break;if(ru()|0){u=su(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if(ru()|0){u=su(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if(ru()|0){u=su(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if(ru()|0){u=su(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}ru()|0;u=su(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;ru()|0;u=su(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;ru()|0;u=su(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;ru()|0;u=su(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;if(ru()|0){u=su(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if(ru()|0){u=su(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if(ru()|0){u=su(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if(ru()|0){u=su(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}u=su(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;u=su(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;u=su(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;u=su(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;u=Ut(v)|0;C=u|(Ut(w)|0);u=C|(Ut(x)|0);c[P>>2]=u|(Ut(y)|0);}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}pu(c[L>>2]|0,v,c[I>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;pu(c[M>>2]|0,w,c[J>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;pu(c[N>>2]|0,x,c[K>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;pu(c[O>>2]|0,y,c[q>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;t=qu(v)|0;v=t&(qu(w)|0);w=v&(qu(x)|0);c[P>>2]=w&(qu(y)|0);if(c[P>>2]|0){c[h>>2]=c[j>>2];Q=c[h>>2]|0;l=g;return Q|0;}else{c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}return 0;}function zu(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;k=l;l=l+80|0;m=k+72|0;n=k+68|0;o=k+64|0;p=k+60|0;q=k+56|0;r=k+52|0;s=k+48|0;t=k+44|0;u=k+40|0;v=k+36|0;w=k+32|0;x=k+28|0;y=k+24|0;z=k+20|0;A=k+16|0;B=k+12|0;C=k+8|0;D=k+4|0;E=k;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[v>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}c[w>>2]=d[c[v>>2]>>0];s=c[w>>2]|0;a:do{if((c[w>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}c[x>>2]=Eu(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[v>>2]|0)+1|0,c[w>>2]|0)|0;if(jr(c[x>>2]|0)|0){c[m>>2]=c[x>>2];F=c[m>>2]|0;l=k;return F|0;}}else{j=c[w>>2]|0;if(s>>>0>=242){c[x>>2]=c[7392+(j-242<<2)>>2];oE(c[n>>2]|0,1,c[o>>2]|0)|0;c[w>>2]=0;break;}c[x>>2]=j-127;c[w>>2]=(((c[x>>2]|0)+1|0)>>>0)/2|0;if(((c[w>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;F=c[m>>2]|0;l=k;return F|0;}if((c[x>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[v>>2]=(c[v>>2]|0)+1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[y>>2]|0)+1)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)&15;c[y>>2]=(c[y>>2]|0)+2;}}}while(0);y=c[p>>2]|0;v=y+68|0;do{c[y>>2]=0;y=y+4|0;}while((y|0)<(v|0));c[u>>2]=0;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0|0)>=16){G=20;break;}y=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)<<2)|0;c[y>>2]=(c[y>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)>>1);c[z>>2]=(c[z>>2]|0)+1;}if((G|0)==20){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[A>>2]=(fu(c[u>>2]|0)|0)+1;if((c[A>>2]|0)>>>0>16){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}c[c[r>>2]>>2]=c[A>>2];c[B>>2]=1<<c[A>>2];c[C>>2]=(c[B>>2]|0)-(c[u>>2]|0);c[D>>2]=1<<(fu(c[C>>2]|0)|0);c[E>>2]=(fu(c[C>>2]|0)|0)+1;if((c[D>>2]|0)!=(c[C>>2]|0)){c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}a[(c[n>>2]|0)+(c[x>>2]|0)>>0]=c[E>>2];n=(c[p>>2]|0)+(c[E>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[x>>2]|0)+1;c[m>>2]=(c[w>>2]|0)+1;F=c[m>>2]|0;l=k;return F|0;}c[m>>2]=-20;F=c[m>>2]|0;l=k;return F|0;}function Au(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+160|0;o=n+140|0;p=n+136|0;q=n+132|0;r=n+128|0;s=n+124|0;t=n+120|0;u=n+116|0;v=n+112|0;w=n;x=n+108|0;y=n+104|0;z=n+100|0;A=n+148|0;B=n+96|0;C=n+92|0;D=n+88|0;E=n+84|0;F=n+80|0;G=n+76|0;H=n+144|0;I=n+72|0;J=n+68|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+68|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];Bu((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*68|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{Cu(H,b[A>>1]|0);a[H+2>>0]=c[C>>2];a[H+3>>0]=1;c[J>>2]=(c[D>>2]|0)+(c[E>>2]|0);c[I>>2]=c[D>>2];while(1){if((c[I>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[I>>2]<<2)|0;b[m>>1]=b[H>>1]|0;b[m+2>>1]=b[H+2>>1]|0;c[I>>2]=(c[I>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function Bu(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+160|0;q=p+136|0;r=p+132|0;s=p+128|0;t=p+124|0;u=p+120|0;v=p+116|0;w=p+112|0;x=p+108|0;y=p+144|0;z=p+140|0;A=p;B=p+104|0;C=p+100|0;D=p+96|0;E=p+92|0;F=p+88|0;G=p+84|0;H=p+80|0;I=p+76|0;J=p+72|0;K=p+68|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+68|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[C>>2]=c[A+(c[u>>2]<<2)>>2];Cu(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[C>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[B>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[B>>2]=(c[B>>2]|0)+1;}}}while(0);c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);Cu(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{B=c[q>>2]|0;C=c[J>>2]|0;c[J>>2]=C+1;u=B+(C<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}l=p;return;}function Cu(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Qq()|0)!=0;d=c[h>>2]|0;if(f){Du(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function Du(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=c[g>>2]|0;a[e>>0]=a[h>>0]|0;a[e+1>>0]=a[h+1>>0]|0;l=f;return;}function Eu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+16960|0;g=f+16952|0;h=f+16948|0;i=f+16944|0;j=f+16940|0;k=f+16936|0;m=f+16932|0;n=f+16928|0;o=f+16400|0;p=f;q=f+16924|0;r=f+16920|0;s=f+16916|0;t=f+16912|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=c[m>>2];c[r>>2]=255;if((c[k>>2]|0)>>>0<2){c[g>>2]=-72;u=c[g>>2]|0;l=f;return u|0;}c[s>>2]=ju(o,r,q,c[m>>2]|0,c[k>>2]|0)|0;m=(jr(c[s>>2]|0)|0)!=0;j=c[s>>2]|0;if(m){c[g>>2]=j;u=c[g>>2]|0;l=f;return u|0;}if(j>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;u=c[g>>2]|0;l=f;return u|0;}c[n>>2]=(c[n>>2]|0)+(c[s>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[s>>2]|0);c[t>>2]=iu(p,o,c[r>>2]|0,c[q>>2]|0)|0;if(jr(c[t>>2]|0)|0){c[g>>2]=c[t>>2];u=c[g>>2]|0;l=f;return u|0;}else{c[g>>2]=Fu(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,p)|0;u=c[g>>2]|0;l=f;return u|0;}return 0;}function Fu(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;i=l;l=l+208|0;j=i+192|0;k=i+188|0;m=i+184|0;n=i+180|0;o=i+176|0;p=i+172|0;q=i+168|0;r=i+164|0;s=i+160|0;t=i+156|0;u=i+152|0;v=i+136|0;w=i+128|0;x=i+120|0;y=i+116|0;z=i+112|0;A=i+108|0;B=i+104|0;C=i+100|0;D=i+96|0;E=i+92|0;F=i+88|0;G=i+84|0;H=i+80|0;I=i+76|0;J=i+72|0;K=i+56|0;L=i+48|0;M=i+40|0;N=i+36|0;O=i+32|0;P=i+28|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[P>>2]=b;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=c[T>>2];c[V>>2]=c[U>>2];c[W>>2]=e[(c[V>>2]|0)+2>>1];V=c[P>>2]|0;P=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;if(c[W>>2]|0){c[A>>2]=V;c[B>>2]=P;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=1;c[G>>2]=c[A>>2];c[H>>2]=c[G>>2];c[I>>2]=(c[H>>2]|0)+(c[B>>2]|0);c[J>>2]=(c[I>>2]|0)+-3;c[N>>2]=St(K,c[C>>2]|0,c[D>>2]|0)|0;do{if(jr(c[N>>2]|0)|0)c[z>>2]=c[N>>2];else{Tt(L,K,c[E>>2]|0);Tt(M,K,c[E>>2]|0);while(1){if(Ut(K)|0)break;if((c[H>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break;if(c[F>>2]|0)X=(Gu(L,K)|0)&255;else X=(Hu(L,K)|0)&255;a[c[H>>2]>>0]=X;if(c[F>>2]|0)Y=(Gu(M,K)|0)&255;else Y=(Hu(M,K)|0)&255;a[(c[H>>2]|0)+1>>0]=Y;if((Ut(K)|0)>>>0>0){Z=14;break;}if(c[F>>2]|0)_=(Gu(L,K)|0)&255;else _=(Hu(L,K)|0)&255;a[(c[H>>2]|0)+2>>0]=_;if(c[F>>2]|0)$=(Gu(M,K)|0)&255;else $=(Hu(M,K)|0)&255;a[(c[H>>2]|0)+3>>0]=$;c[H>>2]=(c[H>>2]|0)+4;}if((Z|0)==14)c[H>>2]=(c[H>>2]|0)+2;while(1){if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=24;break;}if(c[F>>2]|0)aa=(Gu(L,K)|0)&255;else aa=(Hu(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=aa;if((Ut(K)|0)==3){Z=29;break;}if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=34;break;}if(c[F>>2]|0)ba=(Gu(M,K)|0)&255;else ba=(Hu(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ba;if((Ut(K)|0)==3){Z=39;break;}}if((Z|0)==24){c[z>>2]=-70;break;}else if((Z|0)==29){if(c[F>>2]|0)ca=(Gu(M,K)|0)&255;else ca=(Hu(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ca;}else if((Z|0)==34){c[z>>2]=-70;break;}else if((Z|0)==39){if(c[F>>2]|0)da=(Gu(L,K)|0)&255;else da=(Hu(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=da;}c[z>>2]=(c[H>>2]|0)-(c[G>>2]|0);}}while(0);c[O>>2]=c[z>>2];ea=c[O>>2]|0;l=i;return ea|0;}else{c[k>>2]=V;c[m>>2]=P;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=0;c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[s>>2]|0)+(c[m>>2]|0);c[u>>2]=(c[t>>2]|0)+-3;c[y>>2]=St(v,c[n>>2]|0,c[o>>2]|0)|0;do{if(jr(c[y>>2]|0)|0)c[j>>2]=c[y>>2];else{Tt(w,v,c[p>>2]|0);Tt(x,v,c[p>>2]|0);while(1){if(Ut(v)|0)break;if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;if(c[q>>2]|0)fa=(Gu(w,v)|0)&255;else fa=(Hu(w,v)|0)&255;a[c[s>>2]>>0]=fa;if(c[q>>2]|0)ga=(Gu(x,v)|0)&255;else ga=(Hu(x,v)|0)&255;a[(c[s>>2]|0)+1>>0]=ga;if((Ut(v)|0)>>>0>0){Z=58;break;}if(c[q>>2]|0)ha=(Gu(w,v)|0)&255;else ha=(Hu(w,v)|0)&255;a[(c[s>>2]|0)+2>>0]=ha;if(c[q>>2]|0)ia=(Gu(x,v)|0)&255;else ia=(Hu(x,v)|0)&255;a[(c[s>>2]|0)+3>>0]=ia;c[s>>2]=(c[s>>2]|0)+4;}if((Z|0)==58)c[s>>2]=(c[s>>2]|0)+2;while(1){if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=68;break;}if(c[q>>2]|0)ja=(Gu(w,v)|0)&255;else ja=(Hu(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ja;if((Ut(v)|0)==3){Z=73;break;}if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=78;break;}if(c[q>>2]|0)ka=(Gu(x,v)|0)&255;else ka=(Hu(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ka;if((Ut(v)|0)==3){Z=83;break;}}if((Z|0)==68){c[j>>2]=-70;break;}else if((Z|0)==73){if(c[q>>2]|0)la=(Gu(x,v)|0)&255;else la=(Hu(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=la;}else if((Z|0)==78){c[j>>2]=-70;break;}else if((Z|0)==83){if(c[q>>2]|0)ma=(Gu(w,v)|0)&255;else ma=(Hu(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ma;}c[j>>2]=(c[s>>2]|0)-(c[r>>2]|0);}}while(0);c[O>>2]=c[j>>2];ea=c[O>>2]|0;l=i;return ea|0;}return 0;}function Gu(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=Iu(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function Hu(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=$t(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function Iu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=uu(c[e>>2]|0,c[f>>2]|0)|0;du(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Ju(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;i=l;l=l+400|0;j=i+392|0;k=i+388|0;m=i+384|0;n=i+380|0;o=i+80|0;p=i;q=i+376|0;r=i+372|0;s=i+368|0;t=i+364|0;u=i+360|0;v=i+356|0;w=i+352|0;x=i+348|0;y=i+344|0;z=i+340|0;A=i+336|0;B=i+396|0;c[k>>2]=f;c[m>>2]=g;c[n>>2]=h;c[q>>2]=0;c[s>>2]=0;c[v>>2]=(c[k>>2]|0)+2;c[w>>2]=c[v>>2];c[r>>2]=zu(o,256,p,s,q,c[m>>2]|0,c[n>>2]|0)|0;if(ou(c[r>>2]|0)|0){c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}if((c[q>>2]|0)>>>0>(e[c[k>>2]>>1]|0)>>>0){c[j>>2]=-44;C=c[j>>2]|0;l=i;return C|0;}b[c[k>>2]>>1]=c[q>>2];c[u>>2]=0;c[t>>2]=1;while(1){if((c[t>>2]|0)>>>0>=((c[q>>2]|0)+1|0)>>>0)break;c[x>>2]=c[u>>2];c[u>>2]=(c[u>>2]|0)+(c[p+(c[t>>2]<<2)>>2]<<(c[t>>2]|0)-1);c[p+(c[t>>2]<<2)>>2]=c[x>>2];c[t>>2]=(c[t>>2]|0)+1;}c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[y>>2]=d[o+(c[t>>2]|0)>>0];c[z>>2]=1<<c[y>>2]>>1;a[B>>0]=c[t>>2];a[B+1>>0]=(c[q>>2]|0)+1-(c[y>>2]|0);c[A>>2]=c[p+(c[y>>2]<<2)>>2];while(1){if((c[A>>2]|0)>>>0>=((c[p+(c[y>>2]<<2)>>2]|0)+(c[z>>2]|0)|0)>>>0)break;x=(c[w>>2]|0)+(c[A>>2]<<1)|0;a[x>>0]=a[B>>0]|0;a[x+1>>0]=a[B+1>>0]|0;c[A>>2]=(c[A>>2]|0)+1;}x=p+(c[y>>2]<<2)|0;c[x>>2]=(c[x>>2]|0)+(c[z>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}function Ku(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;i=l;l=l+192|0;j=i+184|0;k=i+180|0;m=i+176|0;n=i+172|0;o=i+168|0;p=i+164|0;q=i+160|0;r=i+156|0;s=i+152|0;t=i+148|0;u=i+144|0;v=i+140|0;w=i+136|0;x=i+120|0;y=i+104|0;z=i+88|0;A=i+72|0;B=i+64|0;C=i+60|0;D=i+56|0;E=i+52|0;F=i+48|0;G=i+44|0;H=i+40|0;I=i+36|0;J=i+32|0;K=i+28|0;L=i+24|0;M=i+20|0;N=i+16|0;O=i+12|0;P=i+8|0;Q=i+4|0;R=i;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if((c[o>>2]|0)>>>0<10){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[q>>2]=c[n>>2];c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[p>>2];c[u>>2]=(c[t>>2]|0)+2;c[v>>2]=e[c[p>>2]>>1];c[B>>2]=(Oq(c[q>>2]|0)|0)&65535;c[C>>2]=(Oq((c[q>>2]|0)+2|0)|0)&65535;c[D>>2]=(Oq((c[q>>2]|0)+4|0)|0)&65535;c[F>>2]=(c[q>>2]|0)+6;c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(c[G>>2]|0)+(c[C>>2]|0);c[I>>2]=(c[H>>2]|0)+(c[D>>2]|0);c[J>>2]=(((c[m>>2]|0)+3|0)>>>0)/4|0;c[K>>2]=(c[r>>2]|0)+(c[J>>2]|0);c[L>>2]=(c[K>>2]|0)+(c[J>>2]|0);c[M>>2]=(c[L>>2]|0)+(c[J>>2]|0);c[N>>2]=c[r>>2];c[O>>2]=c[K>>2];c[P>>2]=c[L>>2];c[Q>>2]=c[M>>2];c[E>>2]=(c[o>>2]|0)-((c[B>>2]|0)+(c[C>>2]|0)+(c[D>>2]|0)+6);if((c[E>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=St(x,c[F>>2]|0,c[B>>2]|0)|0;if(ou(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=St(y,c[G>>2]|0,c[C>>2]|0)|0;if(ou(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=St(z,c[H>>2]|0,c[D>>2]|0)|0;if(ou(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=St(A,c[I>>2]|0,c[E>>2]|0)|0;if(ou(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}w=Ut(x)|0;E=w|(Ut(y)|0);w=E|(Ut(z)|0);c[R>>2]=w|(Ut(A)|0);while(1){if(c[R>>2]|0)break;if((c[Q>>2]|0)>>>0>=((c[s>>2]|0)+-7|0)>>>0)break;if(ru()|0){w=Lu(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}ru()|0;w=Lu(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;ru()|0;w=Lu(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;ru()|0;w=Lu(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;ru()|0;w=Lu(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;if(ru()|0){w=Lu(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if(ru()|0){w=Lu(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}w=Lu(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;w=Lu(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;w=Lu(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;w=Lu(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;w=Ut(x)|0;E=w|(Ut(y)|0);w=E|(Ut(z)|0);c[R>>2]=w|(Ut(A)|0);}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[O>>2]|0)>>>0>(c[L>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[P>>2]|0)>>>0>(c[M>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}Mu(c[N>>2]|0,x,c[K>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;Mu(c[O>>2]|0,y,c[L>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;Mu(c[P>>2]|0,z,c[M>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;Mu(c[Q>>2]|0,A,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;v=qu(x)|0;x=v&(qu(y)|0);y=x&(qu(z)|0);c[R>>2]=y&(qu(A)|0);if(c[R>>2]|0){c[j>>2]=c[m>>2];S=c[j>>2]|0;l=i;return S|0;}else{c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}return 0;}function Lu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+16|0;c[h>>2]=b;c[i>>2]=e;c[j>>2]=f;c[k>>2]=uu(c[h>>2]|0,c[j>>2]|0)|0;a[m>>0]=a[(c[i>>2]|0)+(c[k>>2]<<1)>>0]|0;du(c[h>>2]|0,d[(c[i>>2]|0)+(c[k>>2]<<1)+1>>0]|0);l=g;return a[m>>0]|0;}function Mu(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[i>>2];while(1){if(Ut(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>((c[k>>2]|0)+-4|0)>>>0)break;if(ru()|0){g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}ru()|0;g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;if(ru()|0){g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if(Ut(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=Lu(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}l=h;return(c[k>>2]|0)-(c[o>>2]|0)|0;}function Nu(a,b,d,f,g){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+8|0;v=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[j>>2];c[q>>2]=(c[p>>2]|0)+(c[k>>2]|0);c[r>>2]=e[c[o>>2]>>1];c[s>>2]=c[o>>2];c[t>>2]=(c[s>>2]|0)+2;c[v>>2]=St(u,c[m>>2]|0,c[n>>2]|0)|0;if(ou(c[v>>2]|0)|0){c[i>>2]=c[v>>2];w=c[i>>2]|0;l=h;return w|0;}Mu(c[p>>2]|0,u,c[q>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;if(qu(u)|0){c[i>>2]=c[k>>2];w=c[i>>2]|0;l=h;return w|0;}else{c[i>>2]=-20;w=c[i>>2]|0;l=h;return w|0;}return 0;}function Ou(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+21536>>2]=5;c[(c[d>>2]|0)+21564>>2]=0;c[(c[d>>2]|0)+21520>>2]=0;c[(c[d>>2]|0)+21524>>2]=0;c[(c[d>>2]|0)+21528>>2]=0;c[(c[d>>2]|0)+21532>>2]=0;c[(c[d>>2]|0)+5132>>2]=12;c[(c[d>>2]|0)+21568>>2]=0;l=b;return 0;}function Pu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[k>>2]=Mq(c[h>>2]|0)|0;if((c[k>>2]|0)!=-332356554){Qu(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)-4;c[j>>2]=Ru(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[j>>2]|0)|0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}else{c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);Qu(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}return 0;}function Qu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+21532>>2]=c[(c[f>>2]|0)+21520>>2];c[(c[f>>2]|0)+21528>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+21520>>2]|0)-(c[(c[f>>2]|0)+21524>>2]|0)));c[(c[f>>2]|0)+21524>>2]=c[g>>2];c[(c[f>>2]|0)+21520>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Ru(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=l;l=l+320|0;f=e+316|0;g=e+312|0;h=e+308|0;i=e+304|0;j=e+300|0;k=e+296|0;m=e+292|0;n=e+288|0;o=e+192|0;p=e+284|0;q=e+280|0;r=e+276|0;s=e+80|0;t=e+272|0;u=e+268|0;v=e+264|0;w=e;x=e+260|0;y=e+256|0;z=e+252|0;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=xu((c[g>>2]|0)+5132|0,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[j>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);c[p>>2]=28;c[k>>2]=ju(o,p,q,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[k>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}if((c[q>>2]|0)>>>0>8){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[r>>2]=iu((c[g>>2]|0)+2052|0,o,c[p>>2]|0,c[q>>2]|0)|0;if(jr(c[r>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);c[t>>2]=52;c[m>>2]=ju(s,t,u,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[m>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}if((c[u>>2]|0)>>>0>9){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[v>>2]=iu((c[g>>2]|0)+3080|0,s,c[t>>2]|0,c[u>>2]|0)|0;if(jr(c[v>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[m>>2]|0);c[x>>2]=35;c[n>>2]=ju(w,x,y,c[h>>2]|0,c[i>>2]|0)|0;if(jr(c[n>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}if((c[y>>2]|0)>>>0>9){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}c[z>>2]=iu(c[g>>2]|0,w,c[x>>2]|0,c[y>>2]|0)|0;if(jr(c[z>>2]|0)|0){c[f>>2]=-30;A=c[f>>2]|0;l=e;return A|0;}else{c[(c[g>>2]|0)+21568>>2]=1;c[f>>2]=(c[j>>2]|0)+(c[k>>2]|0)+(c[m>>2]|0)+(c[n>>2]|0);A=c[f>>2]|0;l=e;return A|0;}return 0;}function Su(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=dw(c[g>>2]|0)|0;if(mr(c[j>>2]|0)|0){c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}if((c[h>>2]|0)!=0&(c[i>>2]|0)!=0?(c[j>>2]=ew(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0,mr(c[j>>2]|0)|0):0){c[f>>2]=-30;k=c[f>>2]|0;l=e;return k|0;}c[f>>2]=0;k=c[f>>2]|0;l=e;return k|0;}function Tu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+26640>>2]|0)){l=d;return;}c[(c[e>>2]|0)+26652>>2]=c[(c[e>>2]|0)+26640>>2];c[(c[e>>2]|0)+26648>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+26640>>2]|0)-(c[(c[e>>2]|0)+26644>>2]|0)));c[(c[e>>2]|0)+26644>>2]=c[f>>2];c[(c[e>>2]|0)+26640>>2]=c[f>>2];l=d;return;}function Uu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=l;l=l+80|0;h=g+68|0;i=g+64|0;j=g+60|0;k=g+56|0;m=g+52|0;n=g+48|0;o=g+44|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+16|0;v=g+8|0;w=g+4|0;x=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=(c[o>>2]|0)+(c[n>>2]|0);c[q>>2]=c[j>>2];c[r>>2]=c[q>>2];c[s>>2]=(c[q>>2]|0)+(c[k>>2]|0);c[t>>2]=c[n>>2];if((c[n>>2]|0)>>>0<8){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}c[v>>2]=Vu(c[i>>2]|0,c[m>>2]|0,5)|0;if(mr(c[v>>2]|0)|0){c[h>>2]=c[v>>2];y=c[h>>2]|0;l=g;return y|0;}if((c[n>>2]|0)>>>0<((c[v>>2]|0)+3|0)>>>0){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}c[o>>2]=(c[o>>2]|0)+(c[v>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[v>>2]|0);c[v>>2]=Wu(c[i>>2]|0,c[m>>2]|0,c[v>>2]|0)|0;if(mr(c[v>>2]|0)|0){c[h>>2]=c[v>>2];y=c[h>>2]|0;l=g;return y|0;}a:while(1){c[w>>2]=0;c[x>>2]=lr(c[o>>2]|0,(c[p>>2]|0)-(c[o>>2]|0)|0,u)|0;if(mr(c[x>>2]|0)|0){z=11;break;}c[o>>2]=(c[o>>2]|0)+3;c[t>>2]=(c[t>>2]|0)-3;if((c[x>>2]|0)>>>0>(c[t>>2]|0)>>>0){z=13;break;}switch(c[u>>2]|0){case 2:{z=17;break a;break;}case 0:{c[w>>2]=Xu(c[i>>2]|0,c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[x>>2]|0)|0;break;}case 1:{c[w>>2]=Yu(c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[x>>2]|0)|0;break;}case 3:{if(c[t>>2]|0){z=19;break a;}break;}default:{z=20;break a;}}if(!(c[x>>2]|0)){z=25;break;}v=(mr(c[w>>2]|0)|0)!=0;A=c[w>>2]|0;if(v){z=23;break;}c[r>>2]=(c[r>>2]|0)+A;c[o>>2]=(c[o>>2]|0)+(c[x>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[x>>2]|0);}if((z|0)==11){c[h>>2]=c[x>>2];y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==13){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==17){c[h>>2]=-1;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==19){c[h>>2]=-72;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==20){c[h>>2]=-1;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==23){c[h>>2]=A;y=c[h>>2]|0;l=g;return y|0;}else if((z|0)==25){c[h>>2]=(c[r>>2]|0)-(c[q>>2]|0);y=c[h>>2]|0;l=g;return y|0;}return 0;}function Vu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)!=5){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}c[j>>2]=Wq(c[h>>2]|0)|0;if((c[j>>2]|0)!=-47205083){c[f>>2]=-10;k=c[f>>2]|0;l=e;return k|0;}else{c[(c[g>>2]|0)+26660>>2]=5;c[f>>2]=c[(c[g>>2]|0)+26660>>2];k=c[f>>2]|0;l=e;return k|0;}return 0;}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)!=(c[(c[g>>2]|0)+26660>>2]|0)){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}c[j>>2]=yq((c[g>>2]|0)+26664|0,c[h>>2]|0,c[i>>2]|0)|0;if(kv()|0?(c[(c[g>>2]|0)+26664+8>>2]|0)>>>0>25:0){c[f>>2]=-14;k=c[f>>2]|0;l=e;return k|0;}c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}function Xu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];if((c[n>>2]|0)>>>0>=131072){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}c[p>>2]=Zu(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(mr(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+f;c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=_u(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Yu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function Zu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+40|0;p=g+36|0;q=g+32|0;r=g+28|0;s=g+24|0;t=g+20|0;u=g+16|0;v=g+12|0;w=g+8|0;x=g+4|0;y=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<3){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch((d[c[m>>2]>>0]|0)>>6|0){case 0:{c[p>>2]=0;c[q>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[k>>2]|0)>>>0<5){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch(c[q>>2]|0){case 3:{c[q>>2]=5;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<14)+((d[(c[m>>2]|0)+1>>0]|0)<<6)+((d[(c[m>>2]|0)+2>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&3)<<16)+((d[(c[m>>2]|0)+3>>0]|0)<<8)+(d[(c[m>>2]|0)+4>>0]|0);break;}case 2:{c[q>>2]=4;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<10)+((d[(c[m>>2]|0)+1>>0]|0)<<2)+((d[(c[m>>2]|0)+2>>0]|0)>>6);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&63)<<8)+(d[(c[m>>2]|0)+3>>0]|0);break;}default:{c[q>>2]=3;c[p>>2]=(d[c[m>>2]>>0]|0)&16;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);}}if((c[n>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(((c[o>>2]|0)+(c[q>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}j=(c[i>>2]|0)+26724|0;f=c[n>>2]|0;e=(c[m>>2]|0)+(c[q>>2]|0)|0;b=c[o>>2]|0;if(c[p>>2]|0)A=Av(j,f,e,b)|0;else A=Bv(j,f,e,b)|0;if(Cv(A)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+26716>>2]=(c[i>>2]|0)+26724;c[(c[i>>2]|0)+26720>>2]=c[n>>2];n=(c[i>>2]|0)+26724+(c[(c[i>>2]|0)+26720>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=(c[o>>2]|0)+(c[q>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 1:{c[u>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[u>>2]|0)!=1){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(!(c[(c[i>>2]|0)+26712>>2]|0)){c[h>>2]=-30;z=c[h>>2]|0;l=g;return z|0;}c[u>>2]=3;c[s>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[t>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if(((c[t>>2]|0)+(c[u>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}c[r>>2]=Dv((c[i>>2]|0)+26724|0,c[s>>2]|0,(c[m>>2]|0)+(c[u>>2]|0)|0,c[t>>2]|0,(c[i>>2]|0)+10252|0)|0;if(Cv(c[r>>2]|0)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+26716>>2]=(c[i>>2]|0)+26724;c[(c[i>>2]|0)+26720>>2]=c[s>>2];s=(c[i>>2]|0)+26724+(c[(c[i>>2]|0)+26720>>2]|0)|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;a[s+4>>0]=0;a[s+5>>0]=0;a[s+6>>0]=0;a[s+7>>0]=0;c[h>>2]=(c[t>>2]|0)+(c[u>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[w>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[w>>2]|0){case 3:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);break;}case 2:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[w>>2]=1;c[v>>2]=(d[c[m>>2]>>0]|0)&31;}}if(((c[w>>2]|0)+(c[v>>2]|0)+8|0)>>>0<=(c[k>>2]|0)>>>0){c[(c[i>>2]|0)+26716>>2]=(c[m>>2]|0)+(c[w>>2]|0);c[(c[i>>2]|0)+26720>>2]=c[v>>2];c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}if(((c[v>>2]|0)+(c[w>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{mE((c[i>>2]|0)+26724|0,(c[m>>2]|0)+(c[w>>2]|0)|0,c[v>>2]|0)|0;c[(c[i>>2]|0)+26716>>2]=(c[i>>2]|0)+26724;c[(c[i>>2]|0)+26720>>2]=c[v>>2];u=(c[i>>2]|0)+26724+(c[(c[i>>2]|0)+26720>>2]|0)|0;a[u>>0]=0;a[u+1>>0]=0;a[u+2>>0]=0;a[u+3>>0]=0;a[u+4>>0]=0;a[u+5>>0]=0;a[u+6>>0]=0;a[u+7>>0]=0;c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 3:{c[y>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[y>>2]|0){case 3:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if((c[k>>2]|0)>>>0<4){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[y>>2]=1;c[x>>2]=(d[c[m>>2]>>0]|0)&31;}}if((c[x>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{oE((c[i>>2]|0)+26724|0,(d[(c[m>>2]|0)+(c[y>>2]|0)>>0]|0)&255|0,(c[x>>2]|0)+8|0)|0;c[(c[i>>2]|0)+26716>>2]=(c[i>>2]|0)+26724;c[(c[i>>2]|0)+26720>>2]=c[x>>2];c[h>>2]=(c[y>>2]|0)+1;z=c[h>>2]|0;l=g;return z|0;}break;}default:{}}return 0;}function _u(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;g=l;l=l+176|0;h=g+164|0;i=g+160|0;j=g+156|0;k=g+152|0;m=g+148|0;n=g+144|0;o=g+140|0;p=g+136|0;q=g+132|0;r=g+128|0;s=g+124|0;t=g+120|0;u=g+116|0;v=g+112|0;w=g+108|0;x=g+104|0;y=g+100|0;z=g+96|0;A=g+92|0;B=g+88|0;C=g+84|0;D=g+80|0;E=g+76|0;F=g+72|0;G=g+60|0;H=g+8|0;I=g+4|0;J=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[w>>2]=c[(c[j>>2]|0)+26716>>2];c[x>>2]=(c[w>>2]|0)+(c[(c[j>>2]|0)+26720>>2]|0);c[A>>2]=c[j>>2];c[B>>2]=(c[j>>2]|0)+6152;c[C>>2]=(c[j>>2]|0)+4100;c[D>>2]=c[(c[j>>2]|0)+26644>>2];c[E>>2]=c[(c[j>>2]|0)+26648>>2];c[F>>2]=c[(c[j>>2]|0)+26652>>2];c[u>>2]=$u(y,z,v,c[A>>2]|0,c[B>>2]|0,c[C>>2]|0,c[p>>2]|0,c[o>>2]|0,c[(c[j>>2]|0)+26712>>2]|0)|0;j=(mr(c[u>>2]|0)|0)!=0;o=c[u>>2]|0;if(j){c[i>>2]=o;K=c[i>>2]|0;l=g;return K|0;}c[p>>2]=(c[p>>2]|0)+o;if(c[y>>2]|0){c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+8>>2]=1;c[H+44>>2]=c[z>>2];c[H+48>>2]=(c[z>>2]|0)+(c[v>>2]|0);c[H+40>>2]=1;c[u>>2]=av(H,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;if(nr(c[u>>2]|0)|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}bv(H+16|0,H,c[A>>2]|0);bv(H+24|0,H,c[C>>2]|0);bv(H+32|0,H,c[B>>2]|0);while(1){B=(cv(H)|0)>>>0<=2;L=c[y>>2]|0;if(!(B?(c[y>>2]|0)!=0:0))break;c[y>>2]=L+-1;dv(G,H);B=c[s>>2]|0;C=c[t>>2]|0;A=c[x>>2]|0;u=c[D>>2]|0;p=c[E>>2]|0;q=c[F>>2]|0;c[h>>2]=c[G>>2];c[h+4>>2]=c[G+4>>2];c[h+8>>2]=c[G+8>>2];c[I>>2]=ev(B,C,h,w,A,u,p,q)|0;q=(mr(c[I>>2]|0)|0)!=0;M=c[I>>2]|0;if(q){N=9;break;}c[s>>2]=(c[s>>2]|0)+M;}if((N|0)==9){c[i>>2]=M;K=c[i>>2]|0;l=g;return K|0;}if(L|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}}c[J>>2]=(c[x>>2]|0)-(c[w>>2]|0);if((c[w>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}if(((c[s>>2]|0)+(c[J>>2]|0)|0)>>>0>(c[t>>2]|0)>>>0){c[i>>2]=-70;K=c[i>>2]|0;l=g;return K|0;}else{mE(c[s>>2]|0,c[w>>2]|0,c[J>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[J>>2]|0);c[i>>2]=(c[s>>2]|0)-(c[r>>2]|0);K=c[i>>2]|0;l=g;return K|0;}return 0;}function $u(b,e,f,g,h,i,j,k,m){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;n=l;l=l+352|0;o=n+348|0;p=n+344|0;q=n+340|0;r=n+336|0;s=n+332|0;t=n+328|0;u=n+324|0;v=n+320|0;w=n+316|0;x=n+312|0;y=n+308|0;z=n+304|0;A=n+300|0;B=n+296|0;C=n+292|0;D=n+288|0;E=n+284|0;F=n+280|0;G=n+276|0;H=n+272|0;I=n;J=n+268|0;K=n+264|0;L=n+260|0;M=n+256|0;c[p>>2]=b;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;c[v>>2]=j;c[w>>2]=k;c[x>>2]=m;c[y>>2]=c[v>>2];c[z>>2]=c[y>>2];c[A>>2]=(c[y>>2]|0)+(c[w>>2]|0);if((c[w>>2]|0)>>>0<1){c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}w=c[z>>2]|0;c[z>>2]=w+1;c[c[p>>2]>>2]=d[w>>0];if(!(c[c[p>>2]>>2]|0)){c[o>>2]=1;N=c[o>>2]|0;l=n;return N|0;}do{if((c[c[p>>2]>>2]|0)>=128){if((c[z>>2]|0)>>>0<(c[A>>2]|0)>>>0){w=(c[c[p>>2]>>2]|0)-128<<8;v=c[z>>2]|0;c[z>>2]=v+1;c[c[p>>2]>>2]=w+(d[v>>0]|0);break;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}}while(0);if((c[z>>2]|0)>>>0>=(c[A>>2]|0)>>>0){c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}c[B>>2]=(d[c[z>>2]>>0]|0)>>6;c[C>>2]=(d[c[z>>2]>>0]|0)>>4&3;c[D>>2]=(d[c[z>>2]>>0]|0)>>2&3;p=c[z>>2]|0;do{if((d[c[z>>2]>>0]|0)&2|0){if((p+3|0)>>>0<=(c[A>>2]|0)>>>0){c[H>>2]=d[(c[z>>2]|0)+2>>0];c[H>>2]=(c[H>>2]|0)+((d[(c[z>>2]|0)+1>>0]|0)<<8);c[z>>2]=(c[z>>2]|0)+3;break;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}else{if((p+2|0)>>>0<=(c[A>>2]|0)>>>0){c[H>>2]=d[(c[z>>2]|0)+1>>0];c[H>>2]=(c[H>>2]|0)+(((d[c[z>>2]>>0]|0)&1)<<8);c[z>>2]=(c[z>>2]|0)+2;break;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}}while(0);c[c[q>>2]>>2]=c[z>>2];c[z>>2]=(c[z>>2]|0)+(c[H>>2]|0);c[c[r>>2]>>2]=c[H>>2];if((c[z>>2]|0)>>>0>((c[A>>2]|0)+-3|0)>>>0){c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}a:do{switch(c[B>>2]|0){case 1:{c[E>>2]=0;H=c[s>>2]|0;r=c[z>>2]|0;c[z>>2]=r+1;tv(H,a[r>>0]|0)|0;break;}case 0:{c[E>>2]=6;uv(c[s>>2]|0,6)|0;break;}case 2:{if(!(c[x>>2]|0)){c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}break;}default:{c[K>>2]=63;c[J>>2]=vv(I,K,E,c[z>>2]|0,(c[A>>2]|0)-(c[z>>2]|0)|0)|0;if(wv(c[J>>2]|0)|0){c[o>>2]=-1;N=c[o>>2]|0;l=n;return N|0;}if((c[E>>2]|0)>>>0<=10){c[z>>2]=(c[z>>2]|0)+(c[J>>2]|0);xv(c[s>>2]|0,I,c[K>>2]|0,c[E>>2]|0)|0;break a;}c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}}}while(0);b:do{switch(c[C>>2]|0){case 1:{c[F>>2]=0;if((c[z>>2]|0)>>>0<=((c[A>>2]|0)+-2|0)>>>0){E=c[u>>2]|0;K=c[z>>2]|0;c[z>>2]=K+1;tv(E,(d[K>>0]|0)&31)|0;break b;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}case 0:{c[F>>2]=5;uv(c[u>>2]|0,5)|0;break;}case 2:{if(!(c[x>>2]|0)){c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}break;}default:{c[L>>2]=31;c[J>>2]=vv(I,L,F,c[z>>2]|0,(c[A>>2]|0)-(c[z>>2]|0)|0)|0;if(wv(c[J>>2]|0)|0){c[o>>2]=-1;N=c[o>>2]|0;l=n;return N|0;}if((c[F>>2]|0)>>>0<=9){c[z>>2]=(c[z>>2]|0)+(c[J>>2]|0);xv(c[u>>2]|0,I,c[L>>2]|0,c[F>>2]|0)|0;break b;}c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}}}while(0);c:do{switch(c[D>>2]|0){case 1:{c[G>>2]=0;if((c[z>>2]|0)>>>0<=((c[A>>2]|0)+-2|0)>>>0){F=c[t>>2]|0;L=c[z>>2]|0;c[z>>2]=L+1;tv(F,a[L>>0]|0)|0;break c;}c[o>>2]=-72;N=c[o>>2]|0;l=n;return N|0;}case 0:{c[G>>2]=7;uv(c[t>>2]|0,7)|0;break;}case 2:{if(!(c[x>>2]|0)){c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}break;}default:{c[M>>2]=127;c[J>>2]=vv(I,M,G,c[z>>2]|0,(c[A>>2]|0)-(c[z>>2]|0)|0)|0;if(wv(c[J>>2]|0)|0){c[o>>2]=-1;N=c[o>>2]|0;l=n;return N|0;}if((c[G>>2]|0)>>>0<=10){c[z>>2]=(c[z>>2]|0)+(c[J>>2]|0);xv(c[t>>2]|0,I,c[M>>2]|0,c[G>>2]|0)|0;break c;}c[o>>2]=-20;N=c[o>>2]|0;l=n;return N|0;}}}while(0);c[o>>2]=(c[z>>2]|0)-(c[y>>2]|0);N=c[o>>2]|0;l=n;return N|0;}function av(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;if((c[j>>2]|0)>>>0<1){e=c[h>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[g>>2]=-72;n=c[g>>2]|0;l=f;return n|0;}e=(c[j>>2]|0)>>>0>=4;c[(c[h>>2]|0)+12>>2]=c[i>>2];do{if(e){c[(c[h>>2]|0)+8>>2]=(c[i>>2]|0)+(c[j>>2]|0)+-4;b=ov(c[(c[h>>2]|0)+8>>2]|0)|0;c[c[h>>2]>>2]=b;c[k>>2]=d[(c[i>>2]|0)+((c[j>>2]|0)-1)>>0];if(c[k>>2]|0){b=8-(sv(c[k>>2]|0)|0)|0;c[(c[h>>2]|0)+4>>2]=b;break;}c[g>>2]=-1;n=c[g>>2]|0;l=f;return n|0;}else{c[(c[h>>2]|0)+8>>2]=c[(c[h>>2]|0)+12>>2];c[c[h>>2]>>2]=d[c[(c[h>>2]|0)+12>>2]>>0];switch(c[j>>2]|0){case 7:{b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+6>>0]|0)<<16);o=9;break;}case 6:{o=9;break;}case 5:{o=10;break;}case 4:{o=11;break;}case 3:{o=12;break;}case 2:{o=13;break;}default:{}}if((o|0)==9){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+5>>0]|0)<<8);o=10;}if((o|0)==10){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+4>>0]|0)<<0);o=11;}if((o|0)==11){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+3>>0]|0)<<24);o=12;}if((o|0)==12){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+2>>0]|0)<<16);o=13;}if((o|0)==13){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+1>>0]|0)<<8);}c[m>>2]=d[(c[i>>2]|0)+((c[j>>2]|0)-1)>>0];if(c[m>>2]|0){b=8-(sv(c[m>>2]|0)|0)|0;c[(c[h>>2]|0)+4>>2]=b;b=(c[h>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(4-(c[j>>2]|0)<<3);break;}c[g>>2]=-1;n=c[g>>2]|0;l=f;return n|0;}}while(0);c[g>>2]=c[j>>2];n=c[g>>2]|0;l=f;return n|0;}function bv(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[i>>2];c[k>>2]=c[j>>2];j=jv(c[h>>2]|0,e[c[k>>2]>>1]|0)|0;c[c[g>>2]>>2]=j;cv(c[h>>2]|0)|0;c[(c[g>>2]|0)+4>>2]=(c[i>>2]|0)+4;l=f;return;}function cv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=((c[(c[e>>2]|0)+12>>2]|0)+4|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=ov(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=ov(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function dv(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;e=l;l=l+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e+24|0;m=e+20|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;r=e;c[f>>2]=a;c[g>>2]=b;c[m>>2]=c[(c[g>>2]|0)+44>>2];c[n>>2]=c[(c[g>>2]|0)+48>>2];c[h>>2]=(iv((c[g>>2]|0)+16|0)|0)&255;if(c[h>>2]|0)s=c[(c[f>>2]|0)+8>>2]|0;else s=c[(c[g>>2]|0)+40>>2]|0;c[i>>2]=s;if((c[h>>2]|0)==63){s=c[m>>2]|0;c[m>>2]=s+1;c[o>>2]=d[s>>0];do{if((c[o>>2]|0)>>>0>=255){c[h>>2]=(Wq(c[m>>2]|0)|0)&16777215;s=c[h>>2]|0;if(c[h>>2]&1|0){c[h>>2]=s>>>1;c[m>>2]=(c[m>>2]|0)+3;break;}else{c[h>>2]=(s&65535)>>1;c[m>>2]=(c[m>>2]|0)+2;break;}}else c[h>>2]=(c[h>>2]|0)+(c[o>>2]|0);}while(0);if((c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0)c[h>>2]=318;if((c[m>>2]|0)>>>0>=(c[n>>2]|0)>>>0)c[m>>2]=(c[n>>2]|0)+-1;}c[p>>2]=(iv((c[g>>2]|0)+24|0)|0)&255;o=(c[p>>2]|0)-1|0;c[q>>2]=o;c[q>>2]=(c[p>>2]|0)==0?0:o;o=c[6880+(c[p>>2]<<2)>>2]|0;c[j>>2]=o+(jv(c[g>>2]|0,c[q>>2]|0)|0);if(kv()|0)cv(c[g>>2]|0)|0;if(!(c[p>>2]|0))c[j>>2]=c[i>>2];if(c[p>>2]|((c[h>>2]|0)!=0^1)&1|0)c[(c[g>>2]|0)+40>>2]=c[(c[f>>2]|0)+8>>2];lv((c[g>>2]|0)+24|0,c[g>>2]|0)|0;lv((c[g>>2]|0)+16|0,c[g>>2]|0)|0;if(kv()|0)cv(c[g>>2]|0)|0;c[k>>2]=(lv((c[g>>2]|0)+32|0,c[g>>2]|0)|0)&255;if((c[k>>2]|0)!=127){t=c[k>>2]|0;u=t+4|0;c[k>>2]=u;v=c[h>>2]|0;w=c[f>>2]|0;c[w>>2]=v;x=c[j>>2]|0;y=c[f>>2]|0;z=y+8|0;c[z>>2]=x;A=c[k>>2]|0;B=c[f>>2]|0;C=B+4|0;c[C>>2]=A;D=c[m>>2]|0;E=c[g>>2]|0;F=E+44|0;c[F>>2]=D;l=e;return;}p=c[m>>2]|0;c[m>>2]=p+1;c[r>>2]=d[p>>0];do{if((c[r>>2]|0)>>>0>=255){c[k>>2]=(Wq(c[m>>2]|0)|0)&16777215;p=c[k>>2]|0;if(c[k>>2]&1|0){c[k>>2]=p>>>1;c[m>>2]=(c[m>>2]|0)+3;break;}else{c[k>>2]=(p&65535)>>1;c[m>>2]=(c[m>>2]|0)+2;break;}}else c[k>>2]=(c[k>>2]|0)+(c[r>>2]|0);}while(0);if((c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0)c[k>>2]=382;if((c[m>>2]|0)>>>0<(c[n>>2]|0)>>>0){t=c[k>>2]|0;u=t+4|0;c[k>>2]=u;v=c[h>>2]|0;w=c[f>>2]|0;c[w>>2]=v;x=c[j>>2]|0;y=c[f>>2]|0;z=y+8|0;c[z>>2]=x;A=c[k>>2]|0;B=c[f>>2]|0;C=B+4|0;c[C>>2]=A;D=c[m>>2]|0;E=c[g>>2]|0;F=E+44|0;c[F>>2]=D;l=e;return;}c[m>>2]=(c[n>>2]|0)+-1;t=c[k>>2]|0;u=t+4|0;c[k>>2]=u;v=c[h>>2]|0;w=c[f>>2]|0;c[w>>2]=v;x=c[j>>2]|0;y=c[f>>2]|0;z=y+8|0;c[z>>2]=x;A=c[k>>2]|0;B=c[f>>2]|0;C=B+4|0;c[C>>2]=A;D=c[m>>2]|0;E=c[g>>2]|0;F=E+44|0;c[F>>2]=D;l=e;return;}function ev(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;k=l;l=l+64|0;m=k+60|0;n=k+56|0;o=k+52|0;p=k+48|0;q=k+44|0;r=k+40|0;s=k+36|0;t=k+32|0;u=k+28|0;v=k+24|0;w=k+20|0;x=k+16|0;y=k+12|0;z=k+8|0;A=k+4|0;B=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+4>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+8>>2]|0));if((c[u>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}fv(c[n>>2]|0,c[c[p>>2]>>2]|0,c[e>>2]|0);c[n>>2]=c[u>>2];c[c[p>>2]>>2]=c[y>>2];do{if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+4>>2]|0)|0)>>>0<=(c[t>>2]|0)>>>0){nE(c[u>>2]|0,c[z>>2]|0,c[e+4>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);y=e+4|0;c[y>>2]=(c[y>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];if((c[n>>2]|0)>>>0<=(c[x>>2]|0)>>>0?(c[e+4>>2]|0)>>>0>=4:0)break;while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;y=c[z>>2]|0;c[z>>2]=y+1;p=a[y>>0]|0;y=c[n>>2]|0;c[n>>2]=y+1;a[y>>0]=p;}c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}}while(0);if((c[e+8>>2]|0)>>>0<8){c[B>>2]=c[6816+(c[e+8>>2]<<2)>>2];a[c[n>>2]>>0]=a[c[z>>2]>>0]|0;a[(c[n>>2]|0)+1>>0]=a[(c[z>>2]|0)+1>>0]|0;a[(c[n>>2]|0)+2>>0]=a[(c[z>>2]|0)+2>>0]|0;a[(c[n>>2]|0)+3>>0]=a[(c[z>>2]|0)+3>>0]|0;c[z>>2]=(c[z>>2]|0)+(c[6848+(c[e+8>>2]<<2)>>2]|0);gv((c[n>>2]|0)+4|0,c[z>>2]|0);c[z>>2]=(c[z>>2]|0)+(0-(c[B>>2]|0));}else hv(c[n>>2]|0,c[z>>2]|0);c[n>>2]=(c[n>>2]|0)+8;c[z>>2]=(c[z>>2]|0)+8;B=c[n>>2]|0;a:do{if((c[w>>2]|0)>>>0>((c[o>>2]|0)+-12|0)>>>0){if(B>>>0<(c[x>>2]|0)>>>0){fv(c[n>>2]|0,c[z>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);c[z>>2]=(c[z>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;r=c[z>>2]|0;c[z>>2]=r+1;A=a[r>>0]|0;r=c[n>>2]|0;c[n>>2]=r+1;a[r>>0]=A;}}else fv(B,c[z>>2]|0,(c[e+4>>2]|0)-8|0);}while(0);c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}function fv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{hv(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function gv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function hv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function iv(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=(c[(c[f>>2]|0)+4>>2]|0)+(c[c[f>>2]>>2]<<2)|0;b[g>>1]=b[d>>1]|0;b[g+2>>1]=b[d+2>>1]|0;l=e;return a[g+2>>0]|0;}function jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=mv(c[e>>2]|0,c[f>>2]|0)|0;nv(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function kv(){return 1;}function lv(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=jv(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function mv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function nv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function ov(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(kv()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=Wq(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=pv(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function pv(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(Xq()|0)!=0;f=qv(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=rv(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function qv(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function rv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function sv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function tv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+20|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=d;a[h>>0]=e;c[i>>2]=c[g>>2];c[j>>2]=c[i>>2];c[k>>2]=(c[g>>2]|0)+4;c[m>>2]=c[k>>2];b[c[j>>2]>>1]=0;b[(c[j>>2]|0)+2>>1]=0;b[c[m>>2]>>1]=0;a[(c[m>>2]|0)+2>>0]=a[h>>0]|0;a[(c[m>>2]|0)+3>>0]=0;l=f;return 0;}function uv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+48|0;g=f+40|0;h=f+36|0;i=f+32|0;j=f+28|0;k=f+24|0;m=f+20|0;n=f+16|0;o=f+12|0;p=f+8|0;q=f+4|0;r=f;c[h>>2]=d;c[i>>2]=e;c[j>>2]=c[h>>2];c[k>>2]=c[j>>2];c[m>>2]=(c[h>>2]|0)+4;c[n>>2]=c[m>>2];c[o>>2]=1<<c[i>>2];c[p>>2]=(c[o>>2]|0)-1;c[q>>2]=c[p>>2];if((c[i>>2]|0)>>>0<1){c[g>>2]=-1;s=c[g>>2]|0;l=f;return s|0;}b[c[k>>2]>>1]=c[i>>2];b[(c[k>>2]|0)+2>>1]=1;c[r>>2]=0;while(1){if((c[r>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;b[(c[n>>2]|0)+(c[r>>2]<<2)>>1]=0;a[(c[n>>2]|0)+(c[r>>2]<<2)+2>>0]=c[r>>2];a[(c[n>>2]|0)+(c[r>>2]<<2)+3>>0]=c[i>>2];c[r>>2]=(c[r>>2]|0)+1;}c[g>>2]=0;s=c[g>>2]|0;l=f;return s|0;}function vv(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;A=h+70|0;B=h+68|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=Wq(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if((c[t>>2]|0)<=1)break;if((c[x>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0)break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=Wq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=19;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[m+(n<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;n=Wq(c[r>>2]|0)|0;c[v>>2]=n>>>(c[w>>2]|0);}}while(0);b[A>>1]=(c[u>>2]<<1)-1-(c[t>>2]|0);n=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(b[A>>1]|0)>>>0){b[B>>1]=n&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{b[B>>1]=n&(m<<1)-1;if((b[B>>1]|0)>=(c[u>>2]|0))b[B>>1]=(b[B>>1]|0)-(b[A>>1]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}b[B>>1]=(b[B>>1]|0)+-1<<16>>16;m=(zv(b[B>>1]|0)|0)<<16>>16;c[t>>2]=(c[t>>2]|0)-m;m=b[B>>1]|0;n=c[j>>2]|0;g=c[x>>2]|0;c[x>>2]=g+1;b[n+(g<<1)>>1]=m;c[y>>2]=((b[B>>1]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=Wq(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==19){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-1;C=c[i>>2]|0;l=h;return C|0;}c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);if(((c[r>>2]|0)-(c[p>>2]|0)|0)>>>0>(c[o>>2]|0)>>>0){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}else{c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function wv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=nr(c[d>>2]|0)|0;l=b;return a|0;}function xv(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;j=l;l=l+592|0;k=j+572|0;m=j+568|0;n=j+564|0;o=j+560|0;p=j+556|0;q=j+580|0;r=j+552|0;s=j+548|0;t=j+544|0;u=j+540|0;v=j+536|0;w=j;x=j+532|0;y=j+528|0;z=j+578|0;A=j+524|0;B=j+520|0;C=j+516|0;D=j+512|0;E=j+584|0;F=j+576|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[r>>2]=(c[m>>2]|0)+4;c[s>>2]=c[r>>2];c[t>>2]=1<<c[p>>2];c[u>>2]=(c[t>>2]|0)-1;c[v>>2]=yv(c[t>>2]|0)|0;c[x>>2]=0;c[y>>2]=(c[t>>2]|0)-1;b[z>>1]=1<<(c[p>>2]|0)-1;c[A>>2]=1;if((c[o>>2]|0)>>>0>255){c[k>>2]=-46;G=c[k>>2]|0;l=j;return G|0;}if((c[p>>2]|0)>>>0>12){c[k>>2]=-44;G=c[k>>2]|0;l=j;return G|0;}b[q>>1]=c[p>>2];c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0)==-1){r=c[B>>2]&255;i=c[s>>2]|0;h=c[y>>2]|0;c[y>>2]=h+-1;a[i+(h<<2)+2>>0]=r;b[w+(c[B>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0)>=(b[z>>1]|0))c[A>>2]=0;b[w+(c[B>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0;}c[B>>2]=(c[B>>2]|0)+1;}c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;c[C>>2]=0;while(1){H=c[B>>2]|0;if((c[C>>2]|0)>=(b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0))break;a[(c[s>>2]|0)+(c[x>>2]<<2)+2>>0]=H;c[x>>2]=(c[x>>2]|0)+(c[v>>2]|0)&c[u>>2];while(1){if((c[x>>2]|0)>>>0<=(c[y>>2]|0)>>>0)break;c[x>>2]=(c[x>>2]|0)+(c[v>>2]|0)&c[u>>2];}c[C>>2]=(c[C>>2]|0)+1;}c[B>>2]=H+1;}if(c[x>>2]|0){c[k>>2]=-1;G=c[k>>2]|0;l=j;return G|0;}c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;a[E>>0]=a[(c[s>>2]|0)+(c[D>>2]<<2)+2>>0]|0;x=w+(d[E>>0]<<1)|0;H=b[x>>1]|0;b[x>>1]=H+1<<16>>16;b[F>>1]=H;H=c[p>>2]|0;x=H-(sv(e[F>>1]|0)|0)&255;a[(c[s>>2]|0)+(c[D>>2]<<2)+3>>0]=x;b[(c[s>>2]|0)+(c[D>>2]<<2)>>1]=(e[F>>1]<<d[(c[s>>2]|0)+(c[D>>2]<<2)+3>>0])-(c[t>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}b[q+2>>1]=c[A>>2];A=c[m>>2]|0;b[A>>1]=b[q>>1]|0;b[A+2>>1]=b[q+2>>1]|0;c[k>>2]=0;G=c[k>>2]|0;l=j;return G|0;}function yv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return((c[d>>2]|0)>>>1)+((c[d>>2]|0)>>>3)+3|0;}function zv(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=a;a=b[d>>1]|0;l=c;return((b[d>>1]|0)<0?0-a|0:a)&65535|0;}function Av(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=_v(n,c[k>>2]|0,c[m>>2]|0)|0;k=(Cv(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=cw(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Bv(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=l;l=l+48|0;h=g+44|0;i=g+40|0;j=g+36|0;k=g+32|0;m=g+28|0;n=g+24|0;o=g+20|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[o>>2]=(c[j>>2]|0)>>>8;c[q>>2]=0;if(!(c[j>>2]|0)){c[h>>2]=-70;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)>>>0>=(c[j>>2]|0)>>>0){c[h>>2]=-20;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==1){oE(c[i>>2]|0,(d[c[k>>2]>>0]|0)&255|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}c[n>>2]=(c[m>>2]<<4>>>0)/((c[j>>2]|0)>>>0)|0;c[r>>2]=0;while(1){if((c[r>>2]|0)>=3)break;f=(c[7008+((c[n>>2]|0)*24|0)+(c[r>>2]<<3)>>2]|0)+(N(c[7008+((c[n>>2]|0)*24|0)+(c[r>>2]<<3)+4>>2]|0,c[o>>2]|0)|0)|0;c[p+(c[r>>2]<<2)>>2]=f;c[r>>2]=(c[r>>2]|0)+1;}r=p+4|0;c[r>>2]=(c[r>>2]|0)+((c[p+4>>2]|0)>>>4);r=p+8|0;c[r>>2]=(c[r>>2]|0)+((c[p+8>>2]|0)>>>3);if((c[p+4>>2]|0)>>>0<(c[p>>2]|0)>>>0)c[q>>2]=1;c[h>>2]=sc[c[11976+(c[q>>2]<<2)>>2]&15](c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;s=c[h>>2]|0;l=g;return s|0;}function Cv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=nr(c[d>>2]|0)|0;l=b;return a|0;}function Dv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+40|0;p=g+36|0;q=g+32|0;r=g+28|0;s=g+24|0;t=g+20|0;u=g+16|0;v=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[c[n>>2]>>2];c[s>>2]=c[n>>2];c[t>>2]=(c[s>>2]|0)+4;c[u>>2]=av(v,c[o>>2]|0,c[m>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];w=c[h>>2]|0;l=g;return w|0;}Ev(c[p>>2]|0,v,c[q>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;if(Fv(v)|0){c[h>>2]=c[j>>2];w=c[h>>2]|0;l=g;return w|0;}else{c[h>>2]=-20;w=c[h>>2]|0;l=g;return w|0;}return 0;}function Ev(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[h>>2];while(1){if(cv(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>=((c[j>>2]|0)+-7|0)>>>0)break;if(Gv()|0){f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}Gv()|0;f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;if(Gv()|0){f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){if(cv(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=Hv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){o=c[h>>2]|0;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=Hv(o,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}if(o>>>0>=(c[j>>2]|0)>>>0){p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}j=Iv(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+j;p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}function Fv(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function Gv(){return 0;}function Hv(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=Jv(c[j>>2]|0,c[m>>2]|0)|0;m=c[i>>2]|0;i=(c[k>>2]|0)+(c[n>>2]<<2)|0;a[m>>0]=a[i>>0]|0;a[m+1>>0]=a[i+1>>0]|0;nv(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0;}function Iv(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=Jv(c[j>>2]|0,c[m>>2]|0)|0;a[c[i>>2]>>0]=a[(c[k>>2]|0)+(c[n>>2]<<2)>>0]|0;i=c[j>>2]|0;if((d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0)==1){nv(i,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return 1;}if((c[i+4>>2]|0)>>>0>=32){l=h;return 1;}nv(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);if((c[(c[j>>2]|0)+4>>2]|0)>>>0<=32){l=h;return 1;}c[(c[j>>2]|0)+4>>2]=32;l=h;return 1;}function Jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function Kv(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=_v(n,c[k>>2]|0,c[m>>2]|0)|0;k=(Cv(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=$v(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Lv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+16416|0;g=f+16412|0;h=f+16408|0;i=f+16404|0;j=f+16400|0;k=f+16396|0;m=f;n=f+16392|0;o=f+16388|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;oE(m|0,0,16388)|0;c[m>>2]=12;c[n>>2]=c[j>>2];c[o>>2]=Mv(m,c[j>>2]|0,c[k>>2]|0)|0;j=(Cv(c[o>>2]|0)|0)!=0;e=c[o>>2]|0;if(j){c[g>>2]=e;p=c[g>>2]|0;l=f;return p|0;}if(e>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;p=c[g>>2]|0;l=f;return p|0;}else{c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[o>>2]|0);c[g>>2]=Nv(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,m)|0;p=c[g>>2]|0;l=f;return p|0;}return 0;}function Mv(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;g=l;l=l+2128|0;h=g+2120|0;i=g+2116|0;j=g+2112|0;k=g+2108|0;m=g+1760|0;n=g+1248|0;o=g+1168|0;p=g+1088|0;q=g+2104|0;r=g;s=g+2100|0;t=g+2096|0;u=g+2092|0;v=g+2088|0;w=g+2084|0;x=g+2080|0;y=g+2076|0;z=g+2072|0;A=g+2068|0;B=g+2064|0;C=g+2060|0;D=g+2056|0;E=g+2052|0;F=g+2048|0;G=g+2044|0;H=g+2040|0;I=g+2036|0;J=g+2032|0;K=g+2028|0;L=g+2024|0;M=g+2020|0;N=g+2016|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;f=o;e=f+68|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));f=p;e=f+72|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));c[q>>2]=p+4;c[w>>2]=c[c[i>>2]>>2];c[y>>2]=c[i>>2];c[z>>2]=(c[y>>2]|0)+4;if((c[w>>2]|0)>>>0>16){c[h>>2]=-44;O=c[h>>2]|0;l=g;return O|0;}c[x>>2]=Qv(m,256,o,v,s,c[j>>2]|0,c[k>>2]|0)|0;if(Cv(c[x>>2]|0)|0){c[h>>2]=c[x>>2];O=c[h>>2]|0;l=g;return O|0;}if((c[s>>2]|0)>>>0>(c[w>>2]|0)>>>0){c[h>>2]=-44;O=c[h>>2]|0;l=g;return O|0;}c[t>>2]=c[s>>2];while(1){if(c[o+(c[t>>2]<<2)>>2]|0)break;c[t>>2]=(c[t>>2]|0)+-1;}c[B>>2]=0;c[A>>2]=1;while(1){P=c[B>>2]|0;if((c[A>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[C>>2]=P;c[B>>2]=(c[B>>2]|0)+(c[o+(c[A>>2]<<2)>>2]|0);c[(c[q>>2]|0)+(c[A>>2]<<2)>>2]=c[C>>2];c[A>>2]=(c[A>>2]|0)+1;}c[c[q>>2]>>2]=P;c[u>>2]=c[B>>2];c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[E>>2]=d[m+(c[D>>2]|0)>>0];B=(c[q>>2]|0)+(c[E>>2]<<2)|0;P=c[B>>2]|0;c[B>>2]=P+1;c[F>>2]=P;a[n+(c[F>>2]<<1)>>0]=c[D>>2];a[n+(c[F>>2]<<1)+1>>0]=c[E>>2];c[D>>2]=(c[D>>2]|0)+1;}c[c[q>>2]>>2]=0;c[G>>2]=(c[s>>2]|0)+1-(c[t>>2]|0);c[H>>2]=0;c[K>>2]=(c[w>>2]|0)-(c[s>>2]|0)-1;c[L>>2]=r;c[I>>2]=1;while(1){if((c[I>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[M>>2]=c[H>>2];c[H>>2]=(c[H>>2]|0)+(c[o+(c[I>>2]<<2)>>2]<<(c[I>>2]|0)+(c[K>>2]|0));c[(c[L>>2]|0)+(c[I>>2]<<2)>>2]=c[M>>2];c[I>>2]=(c[I>>2]|0)+1;}c[J>>2]=c[G>>2];while(1){if((c[J>>2]|0)>>>0>((c[w>>2]|0)-(c[G>>2]|0)|0)>>>0)break;c[N>>2]=r+((c[J>>2]|0)*68|0);c[I>>2]=1;while(1){if((c[I>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[(c[N>>2]|0)+(c[I>>2]<<2)>>2]=(c[(c[L>>2]|0)+(c[I>>2]<<2)>>2]|0)>>>(c[J>>2]|0);c[I>>2]=(c[I>>2]|0)+1;}c[J>>2]=(c[J>>2]|0)+1;}Rv(c[z>>2]|0,c[w>>2]|0,n,c[u>>2]|0,p,r,c[t>>2]|0,(c[s>>2]|0)+1|0);c[h>>2]=c[x>>2];O=c[h>>2]|0;l=g;return O|0;}function Nv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+192|0;h=g+184|0;i=g+180|0;j=g+176|0;k=g+172|0;m=g+168|0;n=g+164|0;o=g+160|0;p=g+156|0;q=g+152|0;r=g+148|0;s=g+144|0;t=g+140|0;u=g+136|0;v=g+120|0;w=g+104|0;x=g+88|0;y=g+72|0;z=g+64|0;A=g+60|0;B=g+56|0;C=g+52|0;D=g+48|0;E=g+44|0;F=g+40|0;G=g+36|0;H=g+32|0;I=g+28|0;J=g+24|0;K=g+20|0;L=g+16|0;M=g+12|0;N=g+8|0;O=g+4|0;P=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[m>>2]|0)>>>0<10){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+4;c[t>>2]=c[c[n>>2]>>2];c[z>>2]=(Ov(c[o>>2]|0)|0)&65535;c[A>>2]=(Ov((c[o>>2]|0)+2|0)|0)&65535;c[B>>2]=(Ov((c[o>>2]|0)+4|0)|0)&65535;c[D>>2]=(c[o>>2]|0)+6;c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(((c[j>>2]|0)+3|0)>>>0)/4|0;c[I>>2]=(c[p>>2]|0)+(c[H>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[H>>2]|0);c[K>>2]=(c[J>>2]|0)+(c[H>>2]|0);c[L>>2]=c[p>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];c[O>>2]=c[K>>2];c[C>>2]=(c[m>>2]|0)-((c[z>>2]|0)+(c[A>>2]|0)+(c[B>>2]|0)+6);if((c[C>>2]|0)>>>0>(c[m>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=av(v,c[D>>2]|0,c[z>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=av(w,c[E>>2]|0,c[A>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=av(x,c[F>>2]|0,c[B>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=av(y,c[G>>2]|0,c[C>>2]|0)|0;if(Cv(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}u=cv(v)|0;C=u|(cv(w)|0);u=C|(cv(x)|0);c[P>>2]=u|(cv(y)|0);while(1){if(c[P>>2]|0)break;if((c[O>>2]|0)>>>0>=((c[q>>2]|0)+-7|0)>>>0)break;if(Gv()|0){u=Hv(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if(Gv()|0){u=Hv(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if(Gv()|0){u=Hv(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if(Gv()|0){u=Hv(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}Gv()|0;u=Hv(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;Gv()|0;u=Hv(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;Gv()|0;u=Hv(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;Gv()|0;u=Hv(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;if(Gv()|0){u=Hv(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if(Gv()|0){u=Hv(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if(Gv()|0){u=Hv(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if(Gv()|0){u=Hv(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}u=Hv(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;u=Hv(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;u=Hv(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;u=Hv(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;u=cv(v)|0;C=u|(cv(w)|0);u=C|(cv(x)|0);c[P>>2]=u|(cv(y)|0);}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}Ev(c[L>>2]|0,v,c[I>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;Ev(c[M>>2]|0,w,c[J>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;Ev(c[N>>2]|0,x,c[K>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;Ev(c[O>>2]|0,y,c[q>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;t=Fv(v)|0;v=t&(Fv(w)|0);w=v&(Fv(x)|0);c[P>>2]=w&(Fv(y)|0);if(c[P>>2]|0){c[h>>2]=c[j>>2];Q=c[h>>2]|0;l=g;return Q|0;}else{c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}return 0;}function Ov(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(Xq()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=Pv(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function Pv(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Qv(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;k=l;l=l+80|0;m=k+68|0;n=k+64|0;o=k+60|0;p=k+56|0;q=k+52|0;r=k+48|0;s=k+44|0;t=k+40|0;u=k+36|0;v=k+32|0;w=k+28|0;x=k+24|0;y=k+20|0;z=k+16|0;A=k+12|0;B=k+8|0;C=k+4|0;D=k;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[w>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}c[x>>2]=d[c[w>>2]>>0];s=c[x>>2]|0;a:do{if((c[x>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}c[y>>2]=Vv(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[w>>2]|0)+1|0,c[x>>2]|0)|0;if(wv(c[y>>2]|0)|0){c[m>>2]=c[y>>2];E=c[m>>2]|0;l=k;return E|0;}}else{j=c[x>>2]|0;if(s>>>0>=242){c[y>>2]=c[7392+(j-242<<2)>>2];oE(c[n>>2]|0,1,c[o>>2]|0)|0;c[x>>2]=0;break;}c[y>>2]=j-127;c[x>>2]=(((c[y>>2]|0)+1|0)>>>0)/2|0;if(((c[x>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}if((c[y>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[w>>2]=(c[w>>2]|0)+1;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[z>>2]|0)>>0]=(d[(c[w>>2]|0)+(((c[z>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[z>>2]|0)+1)>>0]=(d[(c[w>>2]|0)+(((c[z>>2]|0)>>>0)/2|0)>>0]|0)&15;c[z>>2]=(c[z>>2]|0)+2;}}}while(0);w=c[p>>2]|0;o=w+68|0;do{c[w>>2]=0;w=w+4|0;}while((w|0)<(o|0));c[u>>2]=0;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0|0)>=16){F=20;break;}w=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)<<2)|0;c[w>>2]=(c[w>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)>>1);c[z>>2]=(c[z>>2]|0)+1;}if((F|0)==20){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[v>>2]=(sv(c[u>>2]|0)|0)+1;if((c[v>>2]|0)>>>0>16){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[A>>2]=1<<c[v>>2];c[B>>2]=(c[A>>2]|0)-(c[u>>2]|0);c[C>>2]=1<<(sv(c[B>>2]|0)|0);c[D>>2]=(sv(c[B>>2]|0)|0)+1;if((c[C>>2]|0)!=(c[B>>2]|0)){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=c[D>>2];n=(c[p>>2]|0)+(c[D>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[y>>2]|0)+1;c[c[r>>2]>>2]=c[v>>2];c[m>>2]=(c[x>>2]|0)+1;E=c[m>>2]|0;l=k;return E|0;}c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}function Rv(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+160|0;o=n+140|0;p=n+136|0;q=n+132|0;r=n+128|0;s=n+124|0;t=n+120|0;u=n+116|0;v=n+112|0;w=n;x=n+108|0;y=n+104|0;z=n+100|0;A=n+148|0;B=n+96|0;C=n+92|0;D=n+88|0;E=n+84|0;F=n+80|0;G=n+76|0;H=n+72|0;I=n+68|0;J=n+144|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+68|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];Sv((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*68|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{c[I>>2]=(c[D>>2]|0)+(c[E>>2]|0);Tv(J,b[A>>1]|0);a[J+2>>0]=c[C>>2];a[J+3>>0]=1;c[H>>2]=c[D>>2];while(1){if((c[H>>2]|0)>>>0>=(c[I>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[H>>2]<<2)|0;b[m>>1]=b[J>>1]|0;b[m+2>>1]=b[J+2>>1]|0;c[H>>2]=(c[H>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function Sv(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+160|0;q=p+136|0;r=p+132|0;s=p+128|0;t=p+124|0;u=p+120|0;v=p+116|0;w=p+112|0;x=p+108|0;y=p+144|0;z=p+140|0;A=p;B=p+104|0;C=p+100|0;D=p+96|0;E=p+92|0;F=p+88|0;G=p+84|0;H=p+80|0;I=p+76|0;J=p+72|0;K=p+68|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+68|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[D>>2]=c[A+(c[u>>2]<<2)>>2];Tv(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[C>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[C>>2]=(c[C>>2]|0)+1;}}}while(0);c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[B>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[B>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);Tv(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{C=c[q>>2]|0;D=c[J>>2]|0;c[J>>2]=D+1;u=C+(D<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[B>>2]=(c[B>>2]|0)+1;}l=p;return;}function Tv(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Xq()|0)!=0;d=c[h>>2]|0;if(f){Uv(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function Uv(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=b[h>>1]|0;h=c[g>>2]|0;a[h>>0]=e;a[h+1>>0]=e>>8;l=f;return;}function Vv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+16960|0;g=f+16948|0;h=f+16944|0;i=f+16940|0;j=f+16936|0;k=f+16932|0;m=f+16928|0;n=f+16924|0;o=f+16400|0;p=f;q=f+16920|0;r=f+16916|0;s=f+16912|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=c[m>>2];c[r>>2]=255;if((c[k>>2]|0)>>>0<2){c[g>>2]=-72;t=c[g>>2]|0;l=f;return t|0;}c[s>>2]=vv(o,r,q,c[m>>2]|0,c[k>>2]|0)|0;m=(wv(c[s>>2]|0)|0)!=0;j=c[s>>2]|0;if(m){c[g>>2]=j;t=c[g>>2]|0;l=f;return t|0;}if(j>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;t=c[g>>2]|0;l=f;return t|0;}c[n>>2]=(c[n>>2]|0)+(c[s>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[s>>2]|0);c[s>>2]=xv(p,o,c[r>>2]|0,c[q>>2]|0)|0;if(wv(c[s>>2]|0)|0){c[g>>2]=c[s>>2];t=c[g>>2]|0;l=f;return t|0;}else{c[g>>2]=Wv(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,p)|0;t=c[g>>2]|0;l=f;return t|0;}return 0;}function Wv(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;i=l;l=l+208|0;j=i+192|0;k=i+188|0;m=i+184|0;n=i+180|0;o=i+176|0;p=i+172|0;q=i+168|0;r=i+164|0;s=i+160|0;t=i+156|0;u=i+152|0;v=i+136|0;w=i+128|0;x=i+120|0;y=i+116|0;z=i+112|0;A=i+108|0;B=i+104|0;C=i+100|0;D=i+96|0;E=i+92|0;F=i+88|0;G=i+84|0;H=i+80|0;I=i+76|0;J=i+72|0;K=i+56|0;L=i+48|0;M=i+40|0;N=i+36|0;O=i+32|0;P=i+28|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[P>>2]=b;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=c[T>>2];c[V>>2]=c[U>>2];c[W>>2]=e[(c[V>>2]|0)+2>>1];V=c[P>>2]|0;P=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;if(c[W>>2]|0){c[A>>2]=V;c[B>>2]=P;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=1;c[G>>2]=c[A>>2];c[H>>2]=c[G>>2];c[I>>2]=(c[H>>2]|0)+(c[B>>2]|0);c[J>>2]=(c[I>>2]|0)+-3;c[N>>2]=av(K,c[C>>2]|0,c[D>>2]|0)|0;do{if(!(wv(c[N>>2]|0)|0)){bv(L,K,c[E>>2]|0);bv(M,K,c[E>>2]|0);while(1){if(cv(K)|0)break;if((c[H>>2]|0)>>>0>=(c[J>>2]|0)>>>0)break;if(c[F>>2]|0)X=(Xv(L,K)|0)&255;else X=(lv(L,K)|0)&255;a[c[H>>2]>>0]=X;if(c[F>>2]|0)Y=(Xv(M,K)|0)&255;else Y=(lv(M,K)|0)&255;a[(c[H>>2]|0)+1>>0]=Y;if((cv(K)|0)>>>0>0){Z=14;break;}if(c[F>>2]|0)_=(Xv(L,K)|0)&255;else _=(lv(L,K)|0)&255;a[(c[H>>2]|0)+2>>0]=_;if(c[F>>2]|0)$=(Xv(M,K)|0)&255;else $=(lv(M,K)|0)&255;a[(c[H>>2]|0)+3>>0]=$;c[H>>2]=(c[H>>2]|0)+4;}if((Z|0)==14)c[H>>2]=(c[H>>2]|0)+2;while(1){if((cv(K)|0)>>>0>2)break;if((c[H>>2]|0)==(c[I>>2]|0))break;if(Fv(K)|0){if(c[F>>2]|0)break;if(Yv(L)|0)break;}if(c[F>>2]|0)aa=(Xv(L,K)|0)&255;else aa=(lv(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=aa;if((cv(K)|0)>>>0>2)break;if((c[H>>2]|0)==(c[I>>2]|0))break;if(Fv(K)|0){if(c[F>>2]|0)break;if(Yv(M)|0)break;}if(c[F>>2]|0)ba=(Xv(M,K)|0)&255;else ba=(lv(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ba;}if((Fv(K)|0?Yv(L)|0:0)?Yv(M)|0:0){c[z>>2]=(c[H>>2]|0)-(c[G>>2]|0);break;}if((c[H>>2]|0)==(c[I>>2]|0)){c[z>>2]=-70;break;}else{c[z>>2]=-20;break;}}else c[z>>2]=c[N>>2];}while(0);c[O>>2]=c[z>>2];ca=c[O>>2]|0;l=i;return ca|0;}else{c[k>>2]=V;c[m>>2]=P;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=0;c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[s>>2]|0)+(c[m>>2]|0);c[u>>2]=(c[t>>2]|0)+-3;c[y>>2]=av(v,c[n>>2]|0,c[o>>2]|0)|0;do{if(!(wv(c[y>>2]|0)|0)){bv(w,v,c[p>>2]|0);bv(x,v,c[p>>2]|0);while(1){if(cv(v)|0)break;if((c[s>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;if(c[q>>2]|0)da=(Xv(w,v)|0)&255;else da=(lv(w,v)|0)&255;a[c[s>>2]>>0]=da;if(c[q>>2]|0)ea=(Xv(x,v)|0)&255;else ea=(lv(x,v)|0)&255;a[(c[s>>2]|0)+1>>0]=ea;if((cv(v)|0)>>>0>0){Z=60;break;}if(c[q>>2]|0)fa=(Xv(w,v)|0)&255;else fa=(lv(w,v)|0)&255;a[(c[s>>2]|0)+2>>0]=fa;if(c[q>>2]|0)ga=(Xv(x,v)|0)&255;else ga=(lv(x,v)|0)&255;a[(c[s>>2]|0)+3>>0]=ga;c[s>>2]=(c[s>>2]|0)+4;}if((Z|0)==60)c[s>>2]=(c[s>>2]|0)+2;while(1){if((cv(v)|0)>>>0>2)break;if((c[s>>2]|0)==(c[t>>2]|0))break;if(Fv(v)|0){if(c[q>>2]|0)break;if(Yv(w)|0)break;}if(c[q>>2]|0)ha=(Xv(w,v)|0)&255;else ha=(lv(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ha;if((cv(v)|0)>>>0>2)break;if((c[s>>2]|0)==(c[t>>2]|0))break;if(Fv(v)|0){if(c[q>>2]|0)break;if(Yv(x)|0)break;}if(c[q>>2]|0)ia=(Xv(x,v)|0)&255;else ia=(lv(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ia;}if((Fv(v)|0?Yv(w)|0:0)?Yv(x)|0:0){c[j>>2]=(c[s>>2]|0)-(c[r>>2]|0);break;}if((c[s>>2]|0)==(c[t>>2]|0)){c[j>>2]=-70;break;}else{c[j>>2]=-20;break;}}else c[j>>2]=c[y>>2];}while(0);c[O>>2]=c[j>>2];ca=c[O>>2]|0;l=i;return ca|0;}return 0;}function Xv(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=Zv(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function Yv(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[c[d>>2]>>2]|0)==0|0;}function Zv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Jv(c[e>>2]|0,c[f>>2]|0)|0;nv(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function _v(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;i=l;l=l+400|0;j=i+392|0;k=i+388|0;m=i+384|0;n=i+380|0;o=i+80|0;p=i;q=i+376|0;r=i+372|0;s=i+368|0;t=i+364|0;u=i+360|0;v=i+356|0;w=i+352|0;x=i+348|0;y=i+344|0;z=i+340|0;A=i+336|0;B=i+396|0;c[k>>2]=f;c[m>>2]=g;c[n>>2]=h;c[q>>2]=0;c[s>>2]=0;c[v>>2]=(c[k>>2]|0)+2;c[w>>2]=c[v>>2];c[r>>2]=Qv(o,256,p,s,q,c[m>>2]|0,c[n>>2]|0)|0;if(Cv(c[r>>2]|0)|0){c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}if((c[q>>2]|0)>>>0>(e[c[k>>2]>>1]|0)>>>0){c[j>>2]=-44;C=c[j>>2]|0;l=i;return C|0;}b[c[k>>2]>>1]=c[q>>2];c[u>>2]=0;c[t>>2]=1;while(1){if((c[t>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;c[x>>2]=c[u>>2];c[u>>2]=(c[u>>2]|0)+(c[p+(c[t>>2]<<2)>>2]<<(c[t>>2]|0)-1);c[p+(c[t>>2]<<2)>>2]=c[x>>2];c[t>>2]=(c[t>>2]|0)+1;}c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[y>>2]=d[o+(c[t>>2]|0)>>0];c[z>>2]=1<<c[y>>2]>>1;a[B>>0]=c[t>>2];a[B+1>>0]=(c[q>>2]|0)+1-(c[y>>2]|0);c[A>>2]=c[p+(c[y>>2]<<2)>>2];while(1){if((c[A>>2]|0)>>>0>=((c[p+(c[y>>2]<<2)>>2]|0)+(c[z>>2]|0)|0)>>>0)break;x=(c[w>>2]|0)+(c[A>>2]<<1)|0;a[x>>0]=a[B>>0]|0;a[x+1>>0]=a[B+1>>0]|0;c[A>>2]=(c[A>>2]|0)+1;}x=p+(c[y>>2]<<2)|0;c[x>>2]=(c[x>>2]|0)+(c[z>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}function $v(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;i=l;l=l+192|0;j=i+184|0;k=i+180|0;m=i+176|0;n=i+172|0;o=i+168|0;p=i+164|0;q=i+160|0;r=i+156|0;s=i+152|0;t=i+148|0;u=i+144|0;v=i+140|0;w=i+136|0;x=i+120|0;y=i+104|0;z=i+88|0;A=i+72|0;B=i+64|0;C=i+60|0;D=i+56|0;E=i+52|0;F=i+48|0;G=i+44|0;H=i+40|0;I=i+36|0;J=i+32|0;K=i+28|0;L=i+24|0;M=i+20|0;N=i+16|0;O=i+12|0;P=i+8|0;Q=i+4|0;R=i;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=c[n>>2];c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[p>>2];c[u>>2]=(c[t>>2]|0)+2;c[v>>2]=e[c[p>>2]>>1];c[B>>2]=(Ov(c[q>>2]|0)|0)&65535;c[C>>2]=(Ov((c[q>>2]|0)+2|0)|0)&65535;c[D>>2]=(Ov((c[q>>2]|0)+4|0)|0)&65535;c[F>>2]=(c[q>>2]|0)+6;c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(c[G>>2]|0)+(c[C>>2]|0);c[I>>2]=(c[H>>2]|0)+(c[D>>2]|0);c[J>>2]=(((c[m>>2]|0)+3|0)>>>0)/4|0;c[K>>2]=(c[r>>2]|0)+(c[J>>2]|0);c[L>>2]=(c[K>>2]|0)+(c[J>>2]|0);c[M>>2]=(c[L>>2]|0)+(c[J>>2]|0);c[N>>2]=c[r>>2];c[O>>2]=c[K>>2];c[P>>2]=c[L>>2];c[Q>>2]=c[M>>2];if((c[o>>2]|0)>>>0<10){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[E>>2]=(c[o>>2]|0)-((c[B>>2]|0)+(c[C>>2]|0)+(c[D>>2]|0)+6);if((c[E>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=av(x,c[F>>2]|0,c[B>>2]|0)|0;if(Cv(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=av(y,c[G>>2]|0,c[C>>2]|0)|0;if(Cv(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=av(z,c[H>>2]|0,c[D>>2]|0)|0;if(Cv(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=av(A,c[I>>2]|0,c[E>>2]|0)|0;if(Cv(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}w=cv(x)|0;E=w|(cv(y)|0);w=E|(cv(z)|0);c[R>>2]=w|(cv(A)|0);while(1){if(c[R>>2]|0)break;if((c[Q>>2]|0)>>>0>=((c[s>>2]|0)+-7|0)>>>0)break;if(Gv()|0){w=aw(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}Gv()|0;w=aw(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;Gv()|0;w=aw(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;Gv()|0;w=aw(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;Gv()|0;w=aw(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;if(Gv()|0){w=aw(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if(Gv()|0){w=aw(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}w=aw(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;w=aw(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;w=aw(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;w=aw(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;w=cv(x)|0;E=w|(cv(y)|0);w=E|(cv(z)|0);c[R>>2]=w|(cv(A)|0);}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[O>>2]|0)>>>0>(c[L>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[P>>2]|0)>>>0>(c[M>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}bw(c[N>>2]|0,x,c[K>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;bw(c[O>>2]|0,y,c[L>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;bw(c[P>>2]|0,z,c[M>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;bw(c[Q>>2]|0,A,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;v=Fv(x)|0;x=v&(Fv(y)|0);y=x&(Fv(z)|0);c[R>>2]=y&(Fv(A)|0);if(c[R>>2]|0){c[j>>2]=c[m>>2];S=c[j>>2]|0;l=i;return S|0;}else{c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}return 0;}function aw(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+16|0;c[h>>2]=b;c[i>>2]=e;c[j>>2]=f;c[k>>2]=Jv(c[h>>2]|0,c[j>>2]|0)|0;a[m>>0]=a[(c[i>>2]|0)+(c[k>>2]<<1)>>0]|0;nv(c[h>>2]|0,d[(c[i>>2]|0)+(c[k>>2]<<1)+1>>0]|0);l=g;return a[m>>0]|0;}function bw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[i>>2];while(1){if(cv(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>((c[k>>2]|0)+-4|0)>>>0)break;if(Gv()|0){g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}Gv()|0;g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;if(Gv()|0){g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if(cv(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=aw(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}l=h;return(c[k>>2]|0)-(c[o>>2]|0)|0;}function cw(a,b,d,f,g){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+8|0;v=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[j>>2];c[q>>2]=(c[p>>2]|0)+(c[k>>2]|0);c[r>>2]=e[c[o>>2]>>1];c[s>>2]=c[o>>2];c[t>>2]=(c[s>>2]|0)+2;if((c[k>>2]|0)>>>0<=(c[n>>2]|0)>>>0){c[i>>2]=-70;w=c[i>>2]|0;l=h;return w|0;}c[v>>2]=av(u,c[m>>2]|0,c[n>>2]|0)|0;if(Cv(c[v>>2]|0)|0){c[i>>2]=c[v>>2];w=c[i>>2]|0;l=h;return w|0;}bw(c[p>>2]|0,u,c[q>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;if(Fv(u)|0){c[i>>2]=c[k>>2];w=c[i>>2]|0;l=h;return w|0;}else{c[i>>2]=-20;w=c[i>>2]|0;l=h;return w|0;}return 0;}function dw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+26656>>2]=5;c[(c[d>>2]|0)+26708>>2]=0;c[(c[d>>2]|0)+26640>>2]=0;c[(c[d>>2]|0)+26644>>2]=0;c[(c[d>>2]|0)+26648>>2]=0;c[(c[d>>2]|0)+26652>>2]=0;c[(c[d>>2]|0)+10252>>2]=12;c[(c[d>>2]|0)+26712>>2]=0;l=b;return 0;}function ew(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[k>>2]=Wq(c[h>>2]|0)|0;if((c[k>>2]|0)!=-332356555){fw(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)-4;c[j>>2]=gw(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;if(mr(c[j>>2]|0)|0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}else{c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);fw(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}return 0;}function fw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+26652>>2]=c[(c[f>>2]|0)+26640>>2];c[(c[f>>2]|0)+26648>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+26640>>2]|0)-(c[(c[f>>2]|0)+26644>>2]|0)));c[(c[f>>2]|0)+26644>>2]=c[g>>2];c[(c[f>>2]|0)+26640>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function gw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;e=l;l=l+512|0;f=e+504|0;g=e+500|0;h=e+496|0;i=e+492|0;j=e+488|0;k=e+484|0;m=e+480|0;n=e+476|0;o=e+472|0;p=e+384|0;q=e+468|0;r=e+464|0;s=e+128|0;t=e+460|0;u=e+456|0;v=e;w=e+452|0;x=e+448|0;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[q>>2]=31;c[t>>2]=127;c[w>>2]=63;c[j>>2]=Mv((c[g>>2]|0)+10252|0,c[h>>2]|0,c[i>>2]|0)|0;if(Cv(c[j>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);c[k>>2]=vv(p,q,r,c[h>>2]|0,c[i>>2]|0)|0;if(wv(c[k>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}if((c[r>>2]|0)>>>0>9){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[n>>2]=xv((c[g>>2]|0)+4100|0,p,c[q>>2]|0,c[r>>2]|0)|0;if(wv(c[n>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);c[m>>2]=vv(s,t,u,c[h>>2]|0,c[i>>2]|0)|0;if(wv(c[m>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}if((c[u>>2]|0)>>>0>10){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[n>>2]=xv((c[g>>2]|0)+6152|0,s,c[t>>2]|0,c[u>>2]|0)|0;if(wv(c[n>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[m>>2]|0);c[o>>2]=vv(v,w,x,c[h>>2]|0,c[i>>2]|0)|0;if((c[x>>2]|0)>>>0>10){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}if(wv(c[o>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}c[n>>2]=xv(c[g>>2]|0,v,c[w>>2]|0,c[x>>2]|0)|0;if(wv(c[n>>2]|0)|0){c[f>>2]=-30;y=c[f>>2]|0;l=e;return y|0;}else{c[(c[g>>2]|0)+26712>>2]=1;c[f>>2]=(c[j>>2]|0)+(c[k>>2]|0)+(c[m>>2]|0)+(c[o>>2]|0);y=c[f>>2]|0;l=e;return y|0;}return 0;}function hw(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(141416)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{kw(c[d>>2]|0)|0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function iw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;f=jw(c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,0,0)|0;l=g;return f|0;}function jw(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;i=l;l=l+80|0;j=i+76|0;k=i+72|0;m=i+68|0;n=i+64|0;o=i+60|0;p=i+56|0;q=i+52|0;r=i+48|0;s=i+44|0;t=i+40|0;u=i+36|0;v=i+32|0;w=i+28|0;x=i+24|0;y=i+16|0;z=i+8|0;A=i+4|0;B=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=c[o>>2];c[t>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[u>>2]=c[m>>2];c[v>>2]=c[u>>2];c[w>>2]=(c[u>>2]|0)+(c[n>>2]|0);c[x>>2]=c[p>>2];kw(c[k>>2]|0)|0;if(c[q>>2]|0){lw(c[k>>2]|0,c[q>>2]|0,c[r>>2]|0);c[(c[k>>2]|0)+10264>>2]=c[(c[k>>2]|0)+10252>>2];c[(c[k>>2]|0)+10260>>2]=(c[m>>2]|0)+(0-((c[(c[k>>2]|0)+10252>>2]|0)-(c[(c[k>>2]|0)+10256>>2]|0)));c[(c[k>>2]|0)+10256>>2]=c[m>>2];}else{r=c[m>>2]|0;c[(c[k>>2]|0)+10264>>2]=r;c[(c[k>>2]|0)+10256>>2]=r;c[(c[k>>2]|0)+10260>>2]=r;}if((c[p>>2]|0)>>>0<8){c[j>>2]=-72;C=c[j>>2]|0;l=i;return C|0;}c[z>>2]=mw(c[k>>2]|0,c[o>>2]|0,5)|0;if(rr(c[z>>2]|0)|0){c[j>>2]=c[z>>2];C=c[j>>2]|0;l=i;return C|0;}if((c[p>>2]|0)>>>0<((c[z>>2]|0)+3|0)>>>0){c[j>>2]=-72;C=c[j>>2]|0;l=i;return C|0;}c[s>>2]=(c[s>>2]|0)+(c[z>>2]|0);c[x>>2]=(c[x>>2]|0)-(c[z>>2]|0);c[z>>2]=nw(c[k>>2]|0,c[o>>2]|0,c[z>>2]|0)|0;if(rr(c[z>>2]|0)|0){c[j>>2]=c[z>>2];C=c[j>>2]|0;l=i;return C|0;}a:while(1){c[A>>2]=0;c[B>>2]=qr(c[s>>2]|0,(c[t>>2]|0)-(c[s>>2]|0)|0,y)|0;if(rr(c[B>>2]|0)|0){D=14;break;}c[s>>2]=(c[s>>2]|0)+3;c[x>>2]=(c[x>>2]|0)-3;if((c[B>>2]|0)>>>0>(c[x>>2]|0)>>>0){D=16;break;}switch(c[y>>2]|0){case 2:{D=20;break a;break;}case 0:{c[A>>2]=ow(c[k>>2]|0,c[v>>2]|0,(c[w>>2]|0)-(c[v>>2]|0)|0,c[s>>2]|0,c[B>>2]|0)|0;break;}case 1:{c[A>>2]=pw(c[v>>2]|0,(c[w>>2]|0)-(c[v>>2]|0)|0,c[s>>2]|0,c[B>>2]|0)|0;break;}case 3:{if(c[x>>2]|0){D=22;break a;}break;}default:{D=23;break a;}}if(!(c[B>>2]|0)){D=28;break;}z=(rr(c[A>>2]|0)|0)!=0;E=c[A>>2]|0;if(z){D=26;break;}c[v>>2]=(c[v>>2]|0)+E;c[s>>2]=(c[s>>2]|0)+(c[B>>2]|0);c[x>>2]=(c[x>>2]|0)-(c[B>>2]|0);}if((D|0)==14){c[j>>2]=c[B>>2];C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==16){c[j>>2]=-72;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==20){c[j>>2]=-1;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==22){c[j>>2]=-72;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==23){c[j>>2]=-1;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==26){c[j>>2]=E;C=c[j>>2]|0;l=i;return C|0;}else if((D|0)==28){c[j>>2]=(c[v>>2]|0)-(c[u>>2]|0);C=c[j>>2]|0;l=i;return C|0;}return 0;}function kw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+10268>>2]=5;c[(c[d>>2]|0)+10316>>2]=0;c[(c[d>>2]|0)+10252>>2]=0;c[(c[d>>2]|0)+10256>>2]=0;c[(c[d>>2]|0)+10260>>2]=0;c[(c[d>>2]|0)+10264>>2]=0;l=b;return 0;}function lw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+10264>>2]=c[(c[f>>2]|0)+10252>>2];c[(c[f>>2]|0)+10260>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+10252>>2]|0)-(c[(c[f>>2]|0)+10256>>2]|0)));c[(c[f>>2]|0)+10256>>2]=c[g>>2];c[(c[f>>2]|0)+10252>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function mw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)!=5){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}c[j>>2]=pr(c[h>>2]|0)|0;if((c[j>>2]|0)!=-47205084){c[f>>2]=-10;k=c[f>>2]|0;l=e;return k|0;}else{c[(c[g>>2]|0)+10272>>2]=5;c[f>>2]=c[(c[g>>2]|0)+10272>>2];k=c[f>>2]|0;l=e;return k|0;}return 0;}function nw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)!=(c[(c[g>>2]|0)+10272>>2]|0)){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}c[j>>2]=sx((c[g>>2]|0)+10280|0,c[h>>2]|0,c[i>>2]|0)|0;if(Dw()|0?(c[(c[g>>2]|0)+10280+8>>2]|0)>>>0>25:0){c[f>>2]=-14;k=c[f>>2]|0;l=e;return k|0;}c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}function ow(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=qw(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(rr(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+f;c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=rw(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function pw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function qw(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+48|0;h=g+32|0;i=g+28|0;j=g+24|0;k=g+20|0;m=g+16|0;n=g+12|0;o=g+8|0;p=g+4|0;q=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<11){c[h>>2]=-20;r=c[h>>2]|0;l=g;return r|0;}switch((d[c[m>>2]>>0]|0)&3|0){case 0:{c[n>>2]=131072;c[o>>2]=Uw((c[i>>2]|0)+10328|0,n,c[j>>2]|0,c[k>>2]|0)|0;c[(c[i>>2]|0)+10320>>2]=(c[i>>2]|0)+10328;c[(c[i>>2]|0)+10324>>2]=c[n>>2];n=(c[i>>2]|0)+10328+(c[(c[i>>2]|0)+10324>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=c[o>>2];r=c[h>>2]|0;l=g;return r|0;}case 1:{c[p>>2]=((pr(c[m>>2]|0)|0)&16777215)>>>2;if((c[p>>2]|0)>>>0<=((c[k>>2]|0)-11|0)>>>0){c[(c[i>>2]|0)+10320>>2]=(c[m>>2]|0)+3;c[(c[i>>2]|0)+10324>>2]=c[p>>2];c[h>>2]=(c[p>>2]|0)+3;r=c[h>>2]|0;l=g;return r|0;}if((c[p>>2]|0)>>>0>((c[k>>2]|0)-3|0)>>>0){c[h>>2]=-20;r=c[h>>2]|0;l=g;return r|0;}else{mE((c[i>>2]|0)+10328|0,c[m>>2]|0,c[p>>2]|0)|0;c[(c[i>>2]|0)+10320>>2]=(c[i>>2]|0)+10328;c[(c[i>>2]|0)+10324>>2]=c[p>>2];k=(c[i>>2]|0)+10328+(c[(c[i>>2]|0)+10324>>2]|0)|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;a[k+4>>0]=0;a[k+5>>0]=0;a[k+6>>0]=0;a[k+7>>0]=0;c[h>>2]=(c[p>>2]|0)+3;r=c[h>>2]|0;l=g;return r|0;}break;}case 2:{c[q>>2]=((pr(c[m>>2]|0)|0)&16777215)>>>2;if((c[q>>2]|0)>>>0>131072){c[h>>2]=-20;r=c[h>>2]|0;l=g;return r|0;}else{oE((c[i>>2]|0)+10328|0,(d[(c[m>>2]|0)+3>>0]|0)&255|0,(c[q>>2]|0)+8|0)|0;c[(c[i>>2]|0)+10320>>2]=(c[i>>2]|0)+10328;c[(c[i>>2]|0)+10324>>2]=c[q>>2];c[h>>2]=4;r=c[h>>2]|0;l=g;return r|0;}break;}default:{c[h>>2]=-20;r=c[h>>2]|0;l=g;return r|0;}}return 0;}function rw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=l;l=l+176|0;h=g+164|0;i=g+160|0;j=g+156|0;k=g+152|0;m=g+148|0;n=g+144|0;o=g+140|0;p=g+136|0;q=g+132|0;r=g+128|0;s=g+124|0;t=g+120|0;u=g+116|0;v=g+112|0;w=g+108|0;x=g+104|0;y=g+100|0;z=g+96|0;A=g+92|0;B=g+88|0;C=g+84|0;D=g+80|0;E=g+76|0;F=g+72|0;G=g+60|0;H=g+8|0;I=g+4|0;J=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[w>>2]=c[(c[j>>2]|0)+10320>>2];c[x>>2]=(c[w>>2]|0)+(c[(c[j>>2]|0)+10324>>2]|0);c[A>>2]=c[j>>2];c[B>>2]=(c[j>>2]|0)+6152;c[C>>2]=(c[j>>2]|0)+4100;c[D>>2]=c[(c[j>>2]|0)+10256>>2];c[E>>2]=c[(c[j>>2]|0)+10260>>2];c[F>>2]=c[(c[j>>2]|0)+10264>>2];c[u>>2]=sw(y,z,v,c[A>>2]|0,c[B>>2]|0,c[C>>2]|0,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;j=(rr(c[u>>2]|0)|0)!=0;m=c[u>>2]|0;if(j){c[i>>2]=m;K=c[i>>2]|0;l=g;return K|0;}c[p>>2]=(c[p>>2]|0)+m;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+4>>2]=4;c[H+44>>2]=c[z>>2];c[H+48>>2]=(c[z>>2]|0)+(c[v>>2]|0);c[H+40>>2]=4;c[u>>2]=tw(H,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;if(sr(c[u>>2]|0)|0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}uw(H+16|0,H,c[A>>2]|0);uw(H+24|0,H,c[C>>2]|0);uw(H+32|0,H,c[B>>2]|0);while(1){B=(vw(H)|0)>>>0<=2;if(!(B?(c[y>>2]|0)!=0:0))break;c[y>>2]=(c[y>>2]|0)+-1;ww(G,H);B=c[s>>2]|0;C=c[t>>2]|0;A=c[x>>2]|0;u=c[D>>2]|0;p=c[E>>2]|0;q=c[F>>2]|0;c[h>>2]=c[G>>2];c[h+4>>2]=c[G+4>>2];c[h+8>>2]=c[G+8>>2];c[I>>2]=xw(B,C,h,w,A,u,p,q)|0;q=(rr(c[I>>2]|0)|0)!=0;L=c[I>>2]|0;if(q){M=8;break;}c[s>>2]=(c[s>>2]|0)+L;}if((M|0)==8){c[i>>2]=L;K=c[i>>2]|0;l=g;return K|0;}if(!(yw(H)|0)){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}c[J>>2]=(c[x>>2]|0)-(c[w>>2]|0);if((c[w>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[i>>2]=-20;K=c[i>>2]|0;l=g;return K|0;}if(((c[s>>2]|0)+(c[J>>2]|0)|0)>>>0>(c[t>>2]|0)>>>0){c[i>>2]=-70;K=c[i>>2]|0;l=g;return K|0;}if((c[s>>2]|0)!=(c[w>>2]|0))mE(c[s>>2]|0,c[w>>2]|0,c[J>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[J>>2]|0);c[i>>2]=(c[s>>2]|0)-(c[r>>2]|0);K=c[i>>2]|0;l=g;return K|0;}function sw(b,e,f,g,h,i,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;m=l;l=l+352|0;n=m+344|0;o=m+340|0;p=m+336|0;q=m+332|0;r=m+328|0;s=m+324|0;t=m+320|0;u=m+316|0;v=m+312|0;w=m+308|0;x=m+304|0;y=m+300|0;z=m+296|0;A=m+292|0;B=m+288|0;C=m+284|0;D=m+280|0;E=m+276|0;F=m+272|0;G=m;H=m+268|0;I=m+264|0;J=m+260|0;K=m+256|0;c[o>>2]=b;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=c[u>>2];c[x>>2]=c[w>>2];c[y>>2]=(c[w>>2]|0)+(c[v>>2]|0);if((c[v>>2]|0)>>>0<5){c[n>>2]=-72;L=c[n>>2]|0;l=m;return L|0;}v=(Lw(c[x>>2]|0)|0)&65535;c[c[o>>2]>>2]=v;c[x>>2]=(c[x>>2]|0)+2;c[z>>2]=(d[c[x>>2]>>0]|0)>>6;c[A>>2]=(d[c[x>>2]>>0]|0)>>4&3;c[B>>2]=(d[c[x>>2]>>0]|0)>>2&3;v=c[x>>2]|0;if((d[c[x>>2]>>0]|0)&2|0){c[F>>2]=d[v+2>>0];c[F>>2]=(c[F>>2]|0)+((d[(c[x>>2]|0)+1>>0]|0)<<8);c[x>>2]=(c[x>>2]|0)+3;}else{c[F>>2]=d[v+1>>0];c[F>>2]=(c[F>>2]|0)+(((d[c[x>>2]>>0]|0)&1)<<8);c[x>>2]=(c[x>>2]|0)+2;}c[c[p>>2]>>2]=c[x>>2];c[x>>2]=(c[x>>2]|0)+(c[F>>2]|0);c[c[q>>2]>>2]=c[F>>2];if((c[x>>2]|0)>>>0>((c[y>>2]|0)+-3|0)>>>0){c[n>>2]=-72;L=c[n>>2]|0;l=m;return L|0;}a:do{switch(c[z>>2]|0){case 2:{c[C>>2]=0;F=c[r>>2]|0;q=c[x>>2]|0;c[x>>2]=q+1;Mw(F,a[q>>0]|0)|0;break;}case 1:{c[C>>2]=6;Nw(c[r>>2]|0,6)|0;break;}default:{c[I>>2]=63;c[H>>2]=Ow(G,I,C,c[x>>2]|0,(c[y>>2]|0)-(c[x>>2]|0)|0)|0;if(Pw(c[H>>2]|0)|0){c[n>>2]=-1;L=c[n>>2]|0;l=m;return L|0;}if((c[C>>2]|0)>>>0<=10){c[x>>2]=(c[x>>2]|0)+(c[H>>2]|0);Qw(c[r>>2]|0,G,c[I>>2]|0,c[C>>2]|0)|0;break a;}c[n>>2]=-20;L=c[n>>2]|0;l=m;return L|0;}}}while(0);b:do{switch(c[A>>2]|0){case 2:{c[D>>2]=0;if((c[x>>2]|0)>>>0<=((c[y>>2]|0)+-2|0)>>>0){C=c[t>>2]|0;I=c[x>>2]|0;c[x>>2]=I+1;Mw(C,(d[I>>0]|0)&31)|0;break b;}c[n>>2]=-72;L=c[n>>2]|0;l=m;return L|0;}case 1:{c[D>>2]=5;Nw(c[t>>2]|0,5)|0;break;}default:{c[J>>2]=31;c[H>>2]=Ow(G,J,D,c[x>>2]|0,(c[y>>2]|0)-(c[x>>2]|0)|0)|0;if(Pw(c[H>>2]|0)|0){c[n>>2]=-1;L=c[n>>2]|0;l=m;return L|0;}if((c[D>>2]|0)>>>0<=9){c[x>>2]=(c[x>>2]|0)+(c[H>>2]|0);Qw(c[t>>2]|0,G,c[J>>2]|0,c[D>>2]|0)|0;break b;}c[n>>2]=-20;L=c[n>>2]|0;l=m;return L|0;}}}while(0);c:do{switch(c[B>>2]|0){case 2:{c[E>>2]=0;if((c[x>>2]|0)>>>0<=((c[y>>2]|0)+-2|0)>>>0){D=c[s>>2]|0;J=c[x>>2]|0;c[x>>2]=J+1;Mw(D,a[J>>0]|0)|0;break c;}c[n>>2]=-72;L=c[n>>2]|0;l=m;return L|0;}case 1:{c[E>>2]=7;Nw(c[s>>2]|0,7)|0;break;}default:{c[K>>2]=127;c[H>>2]=Ow(G,K,E,c[x>>2]|0,(c[y>>2]|0)-(c[x>>2]|0)|0)|0;if(Pw(c[H>>2]|0)|0){c[n>>2]=-1;L=c[n>>2]|0;l=m;return L|0;}if((c[E>>2]|0)>>>0<=10){c[x>>2]=(c[x>>2]|0)+(c[H>>2]|0);Qw(c[s>>2]|0,G,c[K>>2]|0,c[E>>2]|0)|0;break c;}c[n>>2]=-20;L=c[n>>2]|0;l=m;return L|0;}}}while(0);c[n>>2]=(c[x>>2]|0)-(c[w>>2]|0);L=c[n>>2]|0;l=m;return L|0;}function tw(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;if((c[j>>2]|0)>>>0<1){e=c[h>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[g>>2]=-72;n=c[g>>2]|0;l=f;return n|0;}e=(c[j>>2]|0)>>>0>=4;c[(c[h>>2]|0)+12>>2]=c[i>>2];do{if(e){c[(c[h>>2]|0)+8>>2]=(c[i>>2]|0)+(c[j>>2]|0)+-4;b=Hw(c[(c[h>>2]|0)+8>>2]|0)|0;c[c[h>>2]>>2]=b;c[k>>2]=d[(c[i>>2]|0)+((c[j>>2]|0)-1)>>0];if(c[k>>2]|0){b=8-(Kw(c[k>>2]|0)|0)|0;c[(c[h>>2]|0)+4>>2]=b;break;}c[g>>2]=-1;n=c[g>>2]|0;l=f;return n|0;}else{c[(c[h>>2]|0)+8>>2]=c[(c[h>>2]|0)+12>>2];c[c[h>>2]>>2]=d[c[(c[h>>2]|0)+12>>2]>>0];switch(c[j>>2]|0){case 7:{b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+6>>0]|0)<<16);o=9;break;}case 6:{o=9;break;}case 5:{o=10;break;}case 4:{o=11;break;}case 3:{o=12;break;}case 2:{o=13;break;}default:{}}if((o|0)==9){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+5>>0]|0)<<8);o=10;}if((o|0)==10){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+4>>0]|0)<<0);o=11;}if((o|0)==11){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+3>>0]|0)<<24);o=12;}if((o|0)==12){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+2>>0]|0)<<16);o=13;}if((o|0)==13){b=c[h>>2]|0;c[b>>2]=(c[b>>2]|0)+((d[(c[(c[h>>2]|0)+12>>2]|0)+1>>0]|0)<<8);}c[m>>2]=d[(c[i>>2]|0)+((c[j>>2]|0)-1)>>0];if(c[m>>2]|0){b=8-(Kw(c[m>>2]|0)|0)|0;c[(c[h>>2]|0)+4>>2]=b;b=(c[h>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(4-(c[j>>2]|0)<<3);break;}c[g>>2]=-1;n=c[g>>2]|0;l=f;return n|0;}}while(0);c[g>>2]=c[j>>2];n=c[g>>2]|0;l=f;return n|0;}function uw(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+16|0;h=g+8|0;i=g+4|0;j=g;k=g+12|0;c[h>>2]=a;c[i>>2]=d;c[j>>2]=f;f=c[j>>2]|0;b[k>>1]=b[f>>1]|0;b[k+2>>1]=b[f+2>>1]|0;f=Ew(c[i>>2]|0,e[k>>1]|0)|0;c[c[h>>2]>>2]=f;vw(c[i>>2]|0)|0;c[(c[h>>2]|0)+4>>2]=(c[j>>2]|0)+4;l=g;return;}function vw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=((c[(c[e>>2]|0)+12>>2]|0)+4|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=Hw(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=Hw(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function ww(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=l;l=l+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e+24|0;m=e+20|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;r=e;c[f>>2]=a;c[g>>2]=b;c[m>>2]=c[(c[g>>2]|0)+44>>2];c[n>>2]=c[(c[g>>2]|0)+48>>2];c[h>>2]=(Cw((c[g>>2]|0)+16|0,c[g>>2]|0)|0)&255;if(c[h>>2]|0)s=c[(c[f>>2]|0)+4>>2]|0;else s=c[(c[g>>2]|0)+40>>2]|0;c[i>>2]=s;if((c[h>>2]|0)==63){s=c[m>>2]|0;c[m>>2]=s+1;c[o>>2]=d[s>>0];if((c[o>>2]|0)>>>0<255)c[h>>2]=(c[h>>2]|0)+(c[o>>2]|0);else{c[h>>2]=(d[c[m>>2]>>0]|0)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+((d[(c[m>>2]|0)+2>>0]|0)<<16);c[m>>2]=(c[m>>2]|0)+3;}if((c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0)c[h>>2]=318;if((c[m>>2]|0)>>>0>=(c[n>>2]|0)>>>0)c[m>>2]=(c[n>>2]|0)+-1;}c[p>>2]=(Cw((c[g>>2]|0)+24|0,c[g>>2]|0)|0)&255;if(Dw()|0)vw(c[g>>2]|0)|0;o=(c[p>>2]|0)-1|0;c[q>>2]=o;c[q>>2]=(c[p>>2]|0)==0?0:o;o=c[6880+(c[p>>2]<<2)>>2]|0;c[j>>2]=o+(Ew(c[g>>2]|0,c[q>>2]|0)|0);if(Dw()|0)vw(c[g>>2]|0)|0;if(!(c[p>>2]|0))c[j>>2]=c[i>>2];if(c[p>>2]|((c[h>>2]|0)!=0^1)&1|0)c[(c[g>>2]|0)+40>>2]=c[(c[f>>2]|0)+4>>2];c[k>>2]=(Cw((c[g>>2]|0)+32|0,c[g>>2]|0)|0)&255;if((c[k>>2]|0)==127){p=c[m>>2]|0;c[m>>2]=p+1;c[r>>2]=d[p>>0];if((c[r>>2]|0)>>>0<255)c[k>>2]=(c[k>>2]|0)+(c[r>>2]|0);else{c[k>>2]=(d[c[m>>2]>>0]|0)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+((d[(c[m>>2]|0)+2>>0]|0)<<16);c[m>>2]=(c[m>>2]|0)+3;}if((c[m>>2]|0)>>>0>(c[n>>2]|0)>>>0)c[k>>2]=382;if((c[m>>2]|0)>>>0>=(c[n>>2]|0)>>>0)c[m>>2]=(c[n>>2]|0)+-1;}c[k>>2]=(c[k>>2]|0)+4;c[c[f>>2]>>2]=c[h>>2];c[(c[f>>2]|0)+4>>2]=c[j>>2];c[(c[f>>2]|0)+8>>2]=c[k>>2];c[(c[g>>2]|0)+44>>2]=c[m>>2];l=e;return;}function xw(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;k=l;l=l+64|0;m=k+60|0;n=k+56|0;o=k+52|0;p=k+48|0;q=k+44|0;r=k+40|0;s=k+36|0;t=k+32|0;u=k+28|0;v=k+24|0;w=k+20|0;x=k+16|0;y=k+12|0;z=k+8|0;A=k+4|0;B=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+8>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+4>>2]|0));if((c[u>>2]|0)>>>0>(c[x>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[m>>2]=-70;C=c[m>>2]|0;l=k;return C|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}zw(c[n>>2]|0,c[c[p>>2]>>2]|0,c[e>>2]|0);c[n>>2]=c[u>>2];c[c[p>>2]>>2]=c[y>>2];do{if((c[e+4>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+4>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;C=c[m>>2]|0;l=k;return C|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+8>>2]|0)|0)>>>0<=(c[t>>2]|0)>>>0){nE(c[u>>2]|0,c[z>>2]|0,c[e+8>>2]|0)|0;c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);y=e+8|0;c[y>>2]=(c[y>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];if((c[n>>2]|0)>>>0<=(c[x>>2]|0)>>>0?(c[e+8>>2]|0)>>>0>=4:0)break;while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;y=c[z>>2]|0;c[z>>2]=y+1;p=a[y>>0]|0;y=c[n>>2]|0;c[n>>2]=y+1;a[y>>0]=p;}c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}}while(0);if((c[e+4>>2]|0)>>>0<8){c[B>>2]=c[6816+(c[e+4>>2]<<2)>>2];a[c[n>>2]>>0]=a[c[z>>2]>>0]|0;a[(c[n>>2]|0)+1>>0]=a[(c[z>>2]|0)+1>>0]|0;a[(c[n>>2]|0)+2>>0]=a[(c[z>>2]|0)+2>>0]|0;a[(c[n>>2]|0)+3>>0]=a[(c[z>>2]|0)+3>>0]|0;c[z>>2]=(c[z>>2]|0)+(c[6848+(c[e+4>>2]<<2)>>2]|0);Aw((c[n>>2]|0)+4|0,c[z>>2]|0);c[z>>2]=(c[z>>2]|0)+(0-(c[B>>2]|0));}else Bw(c[n>>2]|0,c[z>>2]|0);c[n>>2]=(c[n>>2]|0)+8;c[z>>2]=(c[z>>2]|0)+8;B=c[n>>2]|0;a:do{if((c[w>>2]|0)>>>0>((c[o>>2]|0)+-12|0)>>>0){if(B>>>0<(c[x>>2]|0)>>>0){zw(c[n>>2]|0,c[z>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);c[z>>2]=(c[z>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;r=c[z>>2]|0;c[z>>2]=r+1;A=a[r>>0]|0;r=c[n>>2]|0;c[n>>2]=r+1;a[r>>0]=A;}}else zw(B,c[z>>2]|0,(c[e+8>>2]|0)-8|0);}while(0);c[m>>2]=c[v>>2];C=c[m>>2]|0;l=k;return C|0;}function yw(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function zw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Bw(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Aw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function Bw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Cw(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=Ew(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function Dw(){return 1;}function Ew(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Fw(c[e>>2]|0,c[f>>2]|0)|0;Gw(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Fw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function Gw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function Hw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Dw()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=pr(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=Iw(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Iw(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;b=l;l=l+16|0;e=b;f=b+12|0;g=b+8|0;c[f>>2]=a;a=(tr()|0)!=0;h=c[f>>2]|0;if(a){a=Jw(h)|0;f=e;c[f>>2]=a;c[f+4>>2]=y;i=e;j=i;k=c[j>>2]|0;m=i+4|0;n=m;o=c[n>>2]|0;y=o;l=b;return k|0;}else{c[g>>2]=h;h=d[c[g>>2]>>0]|0;f=jE(d[(c[g>>2]|0)+1>>0]|0|0,0,8)|0;a=dE(h|0,0,f|0,y|0)|0;f=y;h=jE(d[(c[g>>2]|0)+2>>0]|0|0,0,16)|0;p=dE(a|0,f|0,h|0,y|0)|0;h=y;f=jE(d[(c[g>>2]|0)+3>>0]|0|0,0,24)|0;a=dE(p|0,h|0,f|0,y|0)|0;f=dE(a|0,y|0,0,d[(c[g>>2]|0)+4>>0]|0|0)|0;a=y;h=jE(d[(c[g>>2]|0)+5>>0]|0|0,0,40)|0;p=dE(f|0,a|0,h|0,y|0)|0;h=y;a=jE(d[(c[g>>2]|0)+6>>0]|0|0,0,48)|0;f=dE(p|0,h|0,a|0,y|0)|0;a=y;h=jE(d[(c[g>>2]|0)+7>>0]|0|0,0,56)|0;g=dE(f|0,a|0,h|0,y|0)|0;h=e;c[h>>2]=g;c[h+4>>2]=y;i=e;j=i;k=c[j>>2]|0;m=i+4|0;n=m;o=c[n>>2]|0;y=o;l=b;return k|0;}return 0;}function Jw(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;a[f+4>>0]=a[b+4>>0]|0;a[f+5>>0]=a[b+5>>0]|0;a[f+6>>0]=a[b+6>>0]|0;a[f+7>>0]=a[b+7>>0]|0;b=f;y=c[b+4>>2]|0;l=d;return c[b>>2]|0;}function Kw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Lw(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(tr()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=Tw(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function Mw(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+20|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=d;a[h>>0]=e;c[i>>2]=c[g>>2];c[j>>2]=c[i>>2];c[k>>2]=(c[g>>2]|0)+4;c[m>>2]=c[k>>2];b[c[j>>2]>>1]=0;b[(c[j>>2]|0)+2>>1]=0;b[c[m>>2]>>1]=0;a[(c[m>>2]|0)+2>>0]=a[h>>0]|0;a[(c[m>>2]|0)+3>>0]=0;l=f;return 0;}function Nw(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+48|0;g=f+40|0;h=f+36|0;i=f+32|0;j=f+28|0;k=f+24|0;m=f+20|0;n=f+16|0;o=f+12|0;p=f+8|0;q=f+4|0;r=f;c[h>>2]=d;c[i>>2]=e;c[j>>2]=c[h>>2];c[k>>2]=c[j>>2];c[m>>2]=(c[h>>2]|0)+4;c[n>>2]=c[m>>2];c[o>>2]=1<<c[i>>2];c[p>>2]=(c[o>>2]|0)-1;c[q>>2]=c[p>>2];if((c[i>>2]|0)>>>0<1){c[g>>2]=-1;s=c[g>>2]|0;l=f;return s|0;}b[c[k>>2]>>1]=c[i>>2];b[(c[k>>2]|0)+2>>1]=1;c[r>>2]=0;while(1){if((c[r>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;b[(c[n>>2]|0)+(c[r>>2]<<2)>>1]=0;a[(c[n>>2]|0)+(c[r>>2]<<2)+2>>0]=c[r>>2];a[(c[n>>2]|0)+(c[r>>2]<<2)+3>>0]=c[i>>2];c[r>>2]=(c[r>>2]|0)+1;}c[g>>2]=0;s=c[g>>2]|0;l=f;return s|0;}function Ow(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;A=h+70|0;B=h+68|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=pr(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if((c[t>>2]|0)<=1)break;if((c[x>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0)break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=pr(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=19;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[m+(n<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;n=pr(c[r>>2]|0)|0;c[v>>2]=n>>>(c[w>>2]|0);}}while(0);b[A>>1]=(c[u>>2]<<1)-1-(c[t>>2]|0);n=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(b[A>>1]|0)>>>0){b[B>>1]=n&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{b[B>>1]=n&(m<<1)-1;if((b[B>>1]|0)>=(c[u>>2]|0))b[B>>1]=(b[B>>1]|0)-(b[A>>1]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}b[B>>1]=(b[B>>1]|0)+-1<<16>>16;m=(Sw(b[B>>1]|0)|0)<<16>>16;c[t>>2]=(c[t>>2]|0)-m;m=b[B>>1]|0;n=c[j>>2]|0;g=c[x>>2]|0;c[x>>2]=g+1;b[n+(g<<1)>>1]=m;c[y>>2]=((b[B>>1]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=pr(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==19){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-1;C=c[i>>2]|0;l=h;return C|0;}c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);if(((c[r>>2]|0)-(c[p>>2]|0)|0)>>>0>(c[o>>2]|0)>>>0){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}else{c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function Pw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=sr(c[d>>2]|0)|0;l=b;return a|0;}function Qw(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;j=l;l=l+592|0;k=j+572|0;m=j+568|0;n=j+564|0;o=j+560|0;p=j+556|0;q=j+580|0;r=j+552|0;s=j+548|0;t=j+544|0;u=j+540|0;v=j+536|0;w=j;x=j+532|0;y=j+528|0;z=j+578|0;A=j+524|0;B=j+520|0;C=j+516|0;D=j+512|0;E=j+584|0;F=j+576|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[r>>2]=(c[m>>2]|0)+4;c[s>>2]=c[r>>2];c[t>>2]=1<<c[p>>2];c[u>>2]=(c[t>>2]|0)-1;c[v>>2]=Rw(c[t>>2]|0)|0;c[x>>2]=0;c[y>>2]=(c[t>>2]|0)-1;b[z>>1]=1<<(c[p>>2]|0)-1;c[A>>2]=1;if((c[o>>2]|0)>>>0>255){c[k>>2]=-46;G=c[k>>2]|0;l=j;return G|0;}if((c[p>>2]|0)>>>0>12){c[k>>2]=-44;G=c[k>>2]|0;l=j;return G|0;}b[q>>1]=c[p>>2];c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0)==-1){r=c[B>>2]&255;i=c[s>>2]|0;h=c[y>>2]|0;c[y>>2]=h+-1;a[i+(h<<2)+2>>0]=r;b[w+(c[B>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0)>=(b[z>>1]|0))c[A>>2]=0;b[w+(c[B>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0;}c[B>>2]=(c[B>>2]|0)+1;}c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;c[C>>2]=0;while(1){H=c[B>>2]|0;if((c[C>>2]|0)>=(b[(c[n>>2]|0)+(c[B>>2]<<1)>>1]|0))break;a[(c[s>>2]|0)+(c[x>>2]<<2)+2>>0]=H;c[x>>2]=(c[x>>2]|0)+(c[v>>2]|0)&c[u>>2];while(1){if((c[x>>2]|0)>>>0<=(c[y>>2]|0)>>>0)break;c[x>>2]=(c[x>>2]|0)+(c[v>>2]|0)&c[u>>2];}c[C>>2]=(c[C>>2]|0)+1;}c[B>>2]=H+1;}if(c[x>>2]|0){c[k>>2]=-1;G=c[k>>2]|0;l=j;return G|0;}c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;a[E>>0]=a[(c[s>>2]|0)+(c[D>>2]<<2)+2>>0]|0;x=w+(d[E>>0]<<1)|0;H=b[x>>1]|0;b[x>>1]=H+1<<16>>16;b[F>>1]=H;H=c[p>>2]|0;x=H-(Kw(e[F>>1]|0)|0)&255;a[(c[s>>2]|0)+(c[D>>2]<<2)+3>>0]=x;b[(c[s>>2]|0)+(c[D>>2]<<2)>>1]=(e[F>>1]<<d[(c[s>>2]|0)+(c[D>>2]<<2)+3>>0])-(c[t>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}b[q+2>>1]=c[A>>2];A=c[m>>2]|0;b[A>>1]=b[q>>1]|0;b[A+2>>1]=b[q+2>>1]|0;c[k>>2]=0;G=c[k>>2]|0;l=j;return G|0;}function Rw(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return((c[d>>2]|0)>>>1)+((c[d>>2]|0)>>>3)+3|0;}function Sw(a){a=a|0;var c=0,d=0;c=l;l=l+16|0;d=c;b[d>>1]=a;a=b[d>>1]|0;l=c;return((b[d>>1]|0)<0?0-a|0:a)&65535|0;}function Tw(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;l=e;return b[g>>1]|0;}function Uw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=((pr(c[j>>2]|0)|0)&2097151)>>>2;c[o>>2]=((pr((c[m>>2]|0)+2|0)|0)&16777215)>>>5;if((c[n>>2]|0)>>>0>(c[c[i>>2]>>2]|0)>>>0){c[g>>2]=-20;p=c[g>>2]|0;l=f;return p|0;}if(((c[o>>2]|0)+5|0)>>>0>(c[k>>2]|0)>>>0){c[g>>2]=-20;p=c[g>>2]|0;l=f;return p|0;}if(Ww(Vw(c[h>>2]|0,c[n>>2]|0,(c[m>>2]|0)+5|0,c[o>>2]|0)|0)|0){c[g>>2]=-20;p=c[g>>2]|0;l=f;return p|0;}else{c[c[i>>2]>>2]=c[n>>2];c[g>>2]=(c[o>>2]|0)+5;p=c[g>>2]|0;l=f;return p|0;}return 0;}function Vw(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=l;l=l+48|0;h=g+44|0;i=g+40|0;j=g+36|0;k=g+32|0;m=g+28|0;n=g+24|0;o=g+20|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[o>>2]=(c[j>>2]|0)>>>8;c[q>>2]=0;if(!(c[j>>2]|0)){c[h>>2]=-70;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)>>>0>(c[j>>2]|0)>>>0){c[h>>2]=-20;s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==(c[j>>2]|0)){mE(c[i>>2]|0,c[k>>2]|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}if((c[m>>2]|0)==1){oE(c[i>>2]|0,(d[c[k>>2]>>0]|0)&255|0,c[j>>2]|0)|0;c[h>>2]=c[j>>2];s=c[h>>2]|0;l=g;return s|0;}c[n>>2]=(c[m>>2]<<4>>>0)/((c[j>>2]|0)>>>0)|0;c[r>>2]=0;while(1){if((c[r>>2]|0)>=3)break;f=(c[7008+((c[n>>2]|0)*24|0)+(c[r>>2]<<3)>>2]|0)+(N(c[7008+((c[n>>2]|0)*24|0)+(c[r>>2]<<3)+4>>2]|0,c[o>>2]|0)|0)|0;c[p+(c[r>>2]<<2)>>2]=f;c[r>>2]=(c[r>>2]|0)+1;}r=p+4|0;c[r>>2]=(c[r>>2]|0)+((c[p+4>>2]|0)>>>4);r=p+8|0;c[r>>2]=(c[r>>2]|0)+((c[p+8>>2]|0)>>>3);if((c[p+4>>2]|0)>>>0<(c[p>>2]|0)>>>0)c[q>>2]=1;c[h>>2]=sc[c[11988+(c[q>>2]<<2)>>2]&15](c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;s=c[h>>2]|0;l=g;return s|0;}function Ww(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=sr(c[d>>2]|0)|0;l=b;return a|0;}function Xw(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+8224|0;h=g+8220|0;i=g+8216|0;j=g+8212|0;k=g+8208|0;m=g+8204|0;n=g;o=g+8200|0;p=g+8196|0;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;oE(n|0,0,8194)|0;b[n>>1]=12;c[o>>2]=c[k>>2];c[p>>2]=ox(n,c[k>>2]|0,c[m>>2]|0)|0;k=(Ww(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(k){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}if(f>>>0>=(c[m>>2]|0)>>>0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+(c[p>>2]|0);c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);c[h>>2]=px(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0,c[m>>2]|0,n)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function Yw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+16416|0;g=f+16412|0;h=f+16408|0;i=f+16404|0;j=f+16400|0;k=f+16396|0;m=f;n=f+16392|0;o=f+16388|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;oE(m|0,0,16388)|0;c[m>>2]=12;c[n>>2]=c[j>>2];c[o>>2]=Zw(m,c[j>>2]|0,c[k>>2]|0)|0;j=(Ww(c[o>>2]|0)|0)!=0;e=c[o>>2]|0;if(j){c[g>>2]=e;p=c[g>>2]|0;l=f;return p|0;}if(e>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;p=c[g>>2]|0;l=f;return p|0;}else{c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[o>>2]|0);c[g>>2]=_w(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,m)|0;p=c[g>>2]|0;l=f;return p|0;}return 0;}function Zw(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+2128|0;h=g+2120|0;i=g+2116|0;j=g+2112|0;k=g+2108|0;m=g+1760|0;n=g+1248|0;o=g+1168|0;p=g+1088|0;q=g+2104|0;r=g;s=g+2100|0;t=g+2096|0;u=g+2092|0;v=g+2088|0;w=g+2084|0;x=g+2080|0;y=g+2076|0;z=g+2072|0;A=g+2068|0;B=g+2064|0;C=g+2060|0;D=g+2056|0;E=g+2052|0;F=g+2048|0;G=g+2044|0;H=g+2040|0;I=g+2036|0;J=g+2032|0;K=g+2028|0;L=g+2024|0;M=g+2020|0;N=g+2016|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;f=o;e=f+68|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));f=p;e=f+72|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(e|0));c[q>>2]=p+4;c[w>>2]=c[c[i>>2]>>2];c[y>>2]=c[i>>2];c[z>>2]=(c[y>>2]|0)+4;if((c[w>>2]|0)>>>0>16){c[h>>2]=-44;O=c[h>>2]|0;l=g;return O|0;}c[x>>2]=ex(m,256,o,v,s,c[j>>2]|0,c[k>>2]|0)|0;if(Ww(c[x>>2]|0)|0){c[h>>2]=c[x>>2];O=c[h>>2]|0;l=g;return O|0;}if((c[s>>2]|0)>>>0>(c[w>>2]|0)>>>0){c[h>>2]=-44;O=c[h>>2]|0;l=g;return O|0;}c[t>>2]=c[s>>2];while(1){if(c[o+(c[t>>2]<<2)>>2]|0)break;if(!(c[t>>2]|0)){P=10;break;}c[t>>2]=(c[t>>2]|0)+-1;}if((P|0)==10){c[h>>2]=-1;O=c[h>>2]|0;l=g;return O|0;}c[B>>2]=0;c[A>>2]=1;while(1){Q=c[B>>2]|0;if((c[A>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[C>>2]=Q;c[B>>2]=(c[B>>2]|0)+(c[o+(c[A>>2]<<2)>>2]|0);c[(c[q>>2]|0)+(c[A>>2]<<2)>>2]=c[C>>2];c[A>>2]=(c[A>>2]|0)+1;}c[c[q>>2]>>2]=Q;c[u>>2]=c[B>>2];c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[E>>2]=d[m+(c[D>>2]|0)>>0];B=(c[q>>2]|0)+(c[E>>2]<<2)|0;Q=c[B>>2]|0;c[B>>2]=Q+1;c[F>>2]=Q;a[n+(c[F>>2]<<1)>>0]=c[D>>2];a[n+(c[F>>2]<<1)+1>>0]=c[E>>2];c[D>>2]=(c[D>>2]|0)+1;}c[c[q>>2]>>2]=0;c[G>>2]=(c[s>>2]|0)+1-(c[t>>2]|0);c[H>>2]=0;c[K>>2]=(c[w>>2]|0)-(c[s>>2]|0)-1;c[L>>2]=r;c[I>>2]=1;while(1){if((c[I>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[M>>2]=c[H>>2];c[H>>2]=(c[H>>2]|0)+(c[o+(c[I>>2]<<2)>>2]<<(c[I>>2]|0)+(c[K>>2]|0));c[(c[L>>2]|0)+(c[I>>2]<<2)>>2]=c[M>>2];c[I>>2]=(c[I>>2]|0)+1;}c[J>>2]=c[G>>2];while(1){if((c[J>>2]|0)>>>0>((c[w>>2]|0)-(c[G>>2]|0)|0)>>>0)break;c[N>>2]=r+((c[J>>2]|0)*68|0);c[I>>2]=1;while(1){if((c[I>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[(c[N>>2]|0)+(c[I>>2]<<2)>>2]=(c[(c[L>>2]|0)+(c[I>>2]<<2)>>2]|0)>>>(c[J>>2]|0);c[I>>2]=(c[I>>2]|0)+1;}c[J>>2]=(c[J>>2]|0)+1;}fx(c[z>>2]|0,c[w>>2]|0,n,c[u>>2]|0,p,r,c[t>>2]|0,(c[s>>2]|0)+1|0);c[h>>2]=c[x>>2];O=c[h>>2]|0;l=g;return O|0;}function _w(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+192|0;h=g+184|0;i=g+180|0;j=g+176|0;k=g+172|0;m=g+168|0;n=g+164|0;o=g+160|0;p=g+156|0;q=g+152|0;r=g+148|0;s=g+144|0;t=g+140|0;u=g+136|0;v=g+120|0;w=g+104|0;x=g+88|0;y=g+72|0;z=g+64|0;A=g+60|0;B=g+56|0;C=g+52|0;D=g+48|0;E=g+44|0;F=g+40|0;G=g+36|0;H=g+32|0;I=g+28|0;J=g+24|0;K=g+20|0;L=g+16|0;M=g+12|0;N=g+8|0;O=g+4|0;P=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[m>>2]|0)>>>0<10){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[o>>2]=c[k>>2];c[p>>2]=c[i>>2];c[q>>2]=(c[p>>2]|0)+(c[j>>2]|0);c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+4;c[t>>2]=c[c[n>>2]>>2];c[z>>2]=(Lw(c[o>>2]|0)|0)&65535;c[A>>2]=(Lw((c[o>>2]|0)+2|0)|0)&65535;c[B>>2]=(Lw((c[o>>2]|0)+4|0)|0)&65535;c[D>>2]=(c[o>>2]|0)+6;c[E>>2]=(c[D>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[E>>2]|0)+(c[A>>2]|0);c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(((c[j>>2]|0)+3|0)>>>0)/4|0;c[I>>2]=(c[p>>2]|0)+(c[H>>2]|0);c[J>>2]=(c[I>>2]|0)+(c[H>>2]|0);c[K>>2]=(c[J>>2]|0)+(c[H>>2]|0);c[L>>2]=c[p>>2];c[M>>2]=c[I>>2];c[N>>2]=c[J>>2];c[O>>2]=c[K>>2];c[C>>2]=(c[m>>2]|0)-((c[z>>2]|0)+(c[A>>2]|0)+(c[B>>2]|0)+6);if((c[C>>2]|0)>>>0>(c[m>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=tw(v,c[D>>2]|0,c[z>>2]|0)|0;if(Ww(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=tw(w,c[E>>2]|0,c[A>>2]|0)|0;if(Ww(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=tw(x,c[F>>2]|0,c[B>>2]|0)|0;if(Ww(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}c[u>>2]=tw(y,c[G>>2]|0,c[C>>2]|0)|0;if(Ww(c[u>>2]|0)|0){c[h>>2]=c[u>>2];Q=c[h>>2]|0;l=g;return Q|0;}u=vw(v)|0;C=u|(vw(w)|0);u=C|(vw(x)|0);c[P>>2]=u|(vw(y)|0);while(1){if(c[P>>2]|0)break;if((c[O>>2]|0)>>>0>=((c[q>>2]|0)+-7|0)>>>0)break;if($w()|0){u=ax(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if($w()|0){u=ax(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if($w()|0){u=ax(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if($w()|0){u=ax(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}$w()|0;u=ax(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;$w()|0;u=ax(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;$w()|0;u=ax(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;$w()|0;u=ax(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;if($w()|0){u=ax(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;}if($w()|0){u=ax(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;}if($w()|0){u=ax(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;}if($w()|0){u=ax(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;}u=ax(c[L>>2]|0,v,c[s>>2]|0,c[t>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+u;u=ax(c[M>>2]|0,w,c[s>>2]|0,c[t>>2]|0)|0;c[M>>2]=(c[M>>2]|0)+u;u=ax(c[N>>2]|0,x,c[s>>2]|0,c[t>>2]|0)|0;c[N>>2]=(c[N>>2]|0)+u;u=ax(c[O>>2]|0,y,c[s>>2]|0,c[t>>2]|0)|0;c[O>>2]=(c[O>>2]|0)+u;u=vw(v)|0;C=u|(vw(w)|0);u=C|(vw(x)|0);c[P>>2]=u|(vw(y)|0);}if((c[L>>2]|0)>>>0>(c[I>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[M>>2]|0)>>>0>(c[J>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}bx(c[L>>2]|0,v,c[I>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;bx(c[M>>2]|0,w,c[J>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;bx(c[N>>2]|0,x,c[K>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;bx(c[O>>2]|0,y,c[q>>2]|0,c[s>>2]|0,c[t>>2]|0)|0;t=yw(v)|0;v=t&(yw(w)|0);w=v&(yw(x)|0);c[P>>2]=w&(yw(y)|0);if(c[P>>2]|0){c[h>>2]=c[j>>2];Q=c[h>>2]|0;l=g;return Q|0;}else{c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}return 0;}function $w(){return 0;}function ax(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=dx(c[j>>2]|0,c[m>>2]|0)|0;m=c[i>>2]|0;i=(c[k>>2]|0)+(c[n>>2]<<2)|0;a[m>>0]=a[i>>0]|0;a[m+1>>0]=a[i+1>>0]|0;Gw(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0;}function bx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[h>>2];while(1){if(vw(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>=((c[j>>2]|0)+-7|0)>>>0)break;if($w()|0){f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}$w()|0;f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;if($w()|0){f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){if(vw(c[i>>2]|0)|0)break;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=ax(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}while(1){o=c[h>>2]|0;if((c[h>>2]|0)>>>0>((c[j>>2]|0)+-2|0)>>>0)break;f=ax(o,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+f;}if(o>>>0>=(c[j>>2]|0)>>>0){p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}j=cx(c[h>>2]|0,c[i>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+j;p=c[h>>2]|0;q=c[n>>2]|0;r=p;s=q;t=r-s|0;l=g;return t|0;}function cx(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=g;c[n>>2]=dx(c[j>>2]|0,c[m>>2]|0)|0;a[c[i>>2]>>0]=a[(c[k>>2]|0)+(c[n>>2]<<2)>>0]|0;i=c[j>>2]|0;if((d[(c[k>>2]|0)+(c[n>>2]<<2)+3>>0]|0|0)==1){Gw(i,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);l=h;return 1;}if((c[i+4>>2]|0)>>>0>=32){l=h;return 1;}Gw(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<2)+2>>0]|0);if((c[(c[j>>2]|0)+4>>2]|0)>>>0<=32){l=h;return 1;}c[(c[j>>2]|0)+4>>2]=32;l=h;return 1;}function dx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function ex(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;k=l;l=l+80|0;m=k+68|0;n=k+64|0;o=k+60|0;p=k+56|0;q=k+52|0;r=k+48|0;s=k+44|0;t=k+40|0;u=k+36|0;v=k+32|0;w=k+28|0;x=k+24|0;y=k+20|0;z=k+16|0;A=k+12|0;B=k+8|0;C=k+4|0;D=k;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[w>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}c[x>>2]=d[c[w>>2]>>0];s=c[x>>2]|0;a:do{if((c[x>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}c[y>>2]=jx(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[w>>2]|0)+1|0,c[x>>2]|0)|0;if(Pw(c[y>>2]|0)|0){c[m>>2]=c[y>>2];E=c[m>>2]|0;l=k;return E|0;}}else{j=c[x>>2]|0;if(s>>>0>=242){c[y>>2]=c[7392+(j-242<<2)>>2];oE(c[n>>2]|0,1,c[o>>2]|0)|0;c[x>>2]=0;break;}c[y>>2]=j-127;c[x>>2]=(((c[y>>2]|0)+1|0)>>>0)/2|0;if(((c[x>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;E=c[m>>2]|0;l=k;return E|0;}if((c[y>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[w>>2]=(c[w>>2]|0)+1;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[z>>2]|0)>>0]=(d[(c[w>>2]|0)+(((c[z>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[z>>2]|0)+1)>>0]=(d[(c[w>>2]|0)+(((c[z>>2]|0)>>>0)/2|0)>>0]|0)&15;c[z>>2]=(c[z>>2]|0)+2;}}}while(0);w=c[p>>2]|0;o=w+68|0;do{c[w>>2]=0;w=w+4|0;}while((w|0)<(o|0));c[u>>2]=0;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0|0)>=16){F=20;break;}w=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)<<2)|0;c[w>>2]=(c[w>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[z>>2]|0)>>0]|0)>>1);c[z>>2]=(c[z>>2]|0)+1;}if((F|0)==20){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[v>>2]=(Kw(c[u>>2]|0)|0)+1;if((c[v>>2]|0)>>>0>16){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}c[A>>2]=1<<c[v>>2];c[B>>2]=(c[A>>2]|0)-(c[u>>2]|0);c[C>>2]=1<<(Kw(c[B>>2]|0)|0);c[D>>2]=(Kw(c[B>>2]|0)|0)+1;if((c[C>>2]|0)!=(c[B>>2]|0)){c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=c[D>>2];n=(c[p>>2]|0)+(c[D>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[y>>2]|0)+1;c[c[r>>2]>>2]=c[v>>2];c[m>>2]=(c[x>>2]|0)+1;E=c[m>>2]|0;l=k;return E|0;}c[m>>2]=-20;E=c[m>>2]|0;l=k;return E|0;}function fx(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+160|0;o=n+140|0;p=n+136|0;q=n+132|0;r=n+128|0;s=n+124|0;t=n+120|0;u=n+116|0;v=n+112|0;w=n;x=n+108|0;y=n+104|0;z=n+100|0;A=n+148|0;B=n+96|0;C=n+92|0;D=n+88|0;E=n+84|0;F=n+80|0;G=n+76|0;H=n+72|0;I=n+68|0;J=n+144|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+68|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];gx((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*68|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{c[I>>2]=(c[D>>2]|0)+(c[E>>2]|0);hx(J,b[A>>1]|0);a[J+2>>0]=c[C>>2];a[J+3>>0]=1;c[H>>2]=c[D>>2];while(1){if((c[H>>2]|0)>>>0>=(c[I>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[H>>2]<<2)|0;b[m>>1]=b[J>>1]|0;b[m+2>>1]=b[J+2>>1]|0;c[H>>2]=(c[H>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function gx(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+160|0;q=p+136|0;r=p+132|0;s=p+128|0;t=p+124|0;u=p+120|0;v=p+116|0;w=p+112|0;x=p+108|0;y=p+144|0;z=p+140|0;A=p;B=p+104|0;C=p+100|0;D=p+96|0;E=p+92|0;F=p+88|0;G=p+84|0;H=p+80|0;I=p+76|0;J=p+72|0;K=p+68|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+68|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[D>>2]=c[A+(c[u>>2]<<2)>>2];hx(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[C>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[C>>2]=(c[C>>2]|0)+1;}}}while(0);c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[B>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[B>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);hx(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{C=c[q>>2]|0;D=c[J>>2]|0;c[J>>2]=D+1;u=C+(D<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[B>>2]=(c[B>>2]|0)+1;}l=p;return;}function hx(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(tr()|0)!=0;d=c[h>>2]|0;if(f){ix(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function ix(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=c[g>>2]|0;a[e>>0]=a[h>>0]|0;a[e+1>>0]=a[h+1>>0]|0;l=f;return;}function jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+16960|0;g=f+16948|0;h=f+16944|0;i=f+16940|0;j=f+16936|0;k=f+16932|0;m=f+16928|0;n=f+16924|0;o=f+16400|0;p=f;q=f+16920|0;r=f+16916|0;s=f+16912|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=c[m>>2];c[r>>2]=255;if((c[k>>2]|0)>>>0<2){c[g>>2]=-72;t=c[g>>2]|0;l=f;return t|0;}c[s>>2]=Ow(o,r,q,c[m>>2]|0,c[k>>2]|0)|0;m=(Pw(c[s>>2]|0)|0)!=0;j=c[s>>2]|0;if(m){c[g>>2]=j;t=c[g>>2]|0;l=f;return t|0;}if(j>>>0>=(c[k>>2]|0)>>>0){c[g>>2]=-72;t=c[g>>2]|0;l=f;return t|0;}c[n>>2]=(c[n>>2]|0)+(c[s>>2]|0);c[k>>2]=(c[k>>2]|0)-(c[s>>2]|0);c[s>>2]=Qw(p,o,c[r>>2]|0,c[q>>2]|0)|0;if(Pw(c[s>>2]|0)|0){c[g>>2]=c[s>>2];t=c[g>>2]|0;l=f;return t|0;}else{c[g>>2]=kx(c[h>>2]|0,c[i>>2]|0,c[n>>2]|0,c[k>>2]|0,p)|0;t=c[g>>2]|0;l=f;return t|0;}return 0;}function kx(d,f,g,h,i){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;j=l;l=l+192|0;k=j+184|0;m=j+180|0;n=j+176|0;o=j+172|0;p=j+168|0;q=j+164|0;r=j+160|0;s=j+156|0;t=j+152|0;u=j+148|0;v=j+144|0;w=j+128|0;x=j+120|0;y=j+112|0;z=j+108|0;A=j+104|0;B=j+100|0;C=j+96|0;D=j+92|0;E=j+88|0;F=j+84|0;G=j+80|0;H=j+76|0;I=j+72|0;J=j+68|0;K=j+64|0;L=j+48|0;M=j+40|0;N=j+32|0;O=j+28|0;P=j+24|0;Q=j+20|0;R=j+16|0;S=j+12|0;T=j+8|0;U=j+4|0;V=j+188|0;W=j;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=i;i=c[U>>2]|0;b[V>>1]=b[i>>1]|0;b[V+2>>1]=b[i+2>>1]|0;c[W>>2]=e[V+2>>1];V=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;T=c[U>>2]|0;if(c[W>>2]|0){c[B>>2]=V;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=T;c[G>>2]=1;c[H>>2]=c[B>>2];c[I>>2]=c[H>>2];c[J>>2]=(c[I>>2]|0)+(c[C>>2]|0);c[K>>2]=(c[J>>2]|0)+-3;c[O>>2]=tw(L,c[D>>2]|0,c[E>>2]|0)|0;do{if(!(Pw(c[O>>2]|0)|0)){uw(M,L,c[F>>2]|0);uw(N,L,c[F>>2]|0);while(1){if(vw(L)|0)break;if((c[I>>2]|0)>>>0>=(c[K>>2]|0)>>>0)break;if(c[G>>2]|0)X=(lx(M,L)|0)&255;else X=(Cw(M,L)|0)&255;a[c[I>>2]>>0]=X;if(c[G>>2]|0)Y=(lx(N,L)|0)&255;else Y=(Cw(N,L)|0)&255;a[(c[I>>2]|0)+1>>0]=Y;if((vw(L)|0)>>>0>0){Z=14;break;}if(c[G>>2]|0)_=(lx(M,L)|0)&255;else _=(Cw(M,L)|0)&255;a[(c[I>>2]|0)+2>>0]=_;if(c[G>>2]|0)$=(lx(N,L)|0)&255;else $=(Cw(N,L)|0)&255;a[(c[I>>2]|0)+3>>0]=$;c[I>>2]=(c[I>>2]|0)+4;}if((Z|0)==14)c[I>>2]=(c[I>>2]|0)+2;while(1){if((vw(L)|0)>>>0>2)break;if((c[I>>2]|0)==(c[J>>2]|0))break;if(yw(L)|0){if(c[G>>2]|0)break;if(mx(M)|0)break;}if(c[G>>2]|0)aa=(lx(M,L)|0)&255;else aa=(Cw(M,L)|0)&255;E=c[I>>2]|0;c[I>>2]=E+1;a[E>>0]=aa;if((vw(L)|0)>>>0>2)break;if((c[I>>2]|0)==(c[J>>2]|0))break;if(yw(L)|0){if(c[G>>2]|0)break;if(mx(N)|0)break;}if(c[G>>2]|0)ba=(lx(N,L)|0)&255;else ba=(Cw(N,L)|0)&255;E=c[I>>2]|0;c[I>>2]=E+1;a[E>>0]=ba;}if((yw(L)|0?mx(M)|0:0)?mx(N)|0:0){c[A>>2]=(c[I>>2]|0)-(c[H>>2]|0);break;}if((c[I>>2]|0)==(c[J>>2]|0)){c[A>>2]=-70;break;}else{c[A>>2]=-20;break;}}else c[A>>2]=c[O>>2];}while(0);c[P>>2]=c[A>>2];ca=c[P>>2]|0;l=j;return ca|0;}else{c[m>>2]=V;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=T;c[r>>2]=0;c[s>>2]=c[m>>2];c[t>>2]=c[s>>2];c[u>>2]=(c[t>>2]|0)+(c[n>>2]|0);c[v>>2]=(c[u>>2]|0)+-3;c[z>>2]=tw(w,c[o>>2]|0,c[p>>2]|0)|0;do{if(!(Pw(c[z>>2]|0)|0)){uw(x,w,c[q>>2]|0);uw(y,w,c[q>>2]|0);while(1){if(vw(w)|0)break;if((c[t>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;if(c[r>>2]|0)da=(lx(x,w)|0)&255;else da=(Cw(x,w)|0)&255;a[c[t>>2]>>0]=da;if(c[r>>2]|0)ea=(lx(y,w)|0)&255;else ea=(Cw(y,w)|0)&255;a[(c[t>>2]|0)+1>>0]=ea;if((vw(w)|0)>>>0>0){Z=60;break;}if(c[r>>2]|0)fa=(lx(x,w)|0)&255;else fa=(Cw(x,w)|0)&255;a[(c[t>>2]|0)+2>>0]=fa;if(c[r>>2]|0)ga=(lx(y,w)|0)&255;else ga=(Cw(y,w)|0)&255;a[(c[t>>2]|0)+3>>0]=ga;c[t>>2]=(c[t>>2]|0)+4;}if((Z|0)==60)c[t>>2]=(c[t>>2]|0)+2;while(1){if((vw(w)|0)>>>0>2)break;if((c[t>>2]|0)==(c[u>>2]|0))break;if(yw(w)|0){if(c[r>>2]|0)break;if(mx(x)|0)break;}if(c[r>>2]|0)ha=(lx(x,w)|0)&255;else ha=(Cw(x,w)|0)&255;p=c[t>>2]|0;c[t>>2]=p+1;a[p>>0]=ha;if((vw(w)|0)>>>0>2)break;if((c[t>>2]|0)==(c[u>>2]|0))break;if(yw(w)|0){if(c[r>>2]|0)break;if(mx(y)|0)break;}if(c[r>>2]|0)ia=(lx(y,w)|0)&255;else ia=(Cw(y,w)|0)&255;p=c[t>>2]|0;c[t>>2]=p+1;a[p>>0]=ia;}if((yw(w)|0?mx(x)|0:0)?mx(y)|0:0){c[k>>2]=(c[t>>2]|0)-(c[s>>2]|0);break;}if((c[t>>2]|0)==(c[u>>2]|0)){c[k>>2]=-70;break;}else{c[k>>2]=-20;break;}}else c[k>>2]=c[z>>2];}while(0);c[P>>2]=c[k>>2];ca=c[P>>2]|0;l=j;return ca|0;}return 0;}function lx(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=nx(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function mx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[c[d>>2]>>2]|0)==0|0;}function nx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=dx(c[e>>2]|0,c[f>>2]|0)|0;Gw(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function ox(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;i=l;l=l+400|0;j=i+392|0;k=i+388|0;m=i+384|0;n=i+380|0;o=i+80|0;p=i;q=i+376|0;r=i+372|0;s=i+368|0;t=i+364|0;u=i+360|0;v=i+356|0;w=i+352|0;x=i+348|0;y=i+344|0;z=i+340|0;A=i+336|0;B=i+396|0;c[k>>2]=f;c[m>>2]=g;c[n>>2]=h;c[q>>2]=0;c[s>>2]=0;c[v>>2]=(c[k>>2]|0)+2;c[w>>2]=c[v>>2];c[r>>2]=ex(o,256,p,s,q,c[m>>2]|0,c[n>>2]|0)|0;if(Ww(c[r>>2]|0)|0){c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}if((c[q>>2]|0)>>>0>(e[c[k>>2]>>1]|0)>>>0){c[j>>2]=-44;C=c[j>>2]|0;l=i;return C|0;}b[c[k>>2]>>1]=c[q>>2];c[u>>2]=0;c[t>>2]=1;while(1){if((c[t>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;c[x>>2]=c[u>>2];c[u>>2]=(c[u>>2]|0)+(c[p+(c[t>>2]<<2)>>2]<<(c[t>>2]|0)-1);c[p+(c[t>>2]<<2)>>2]=c[x>>2];c[t>>2]=(c[t>>2]|0)+1;}c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[y>>2]=d[o+(c[t>>2]|0)>>0];c[z>>2]=1<<c[y>>2]>>1;a[B>>0]=c[t>>2];a[B+1>>0]=(c[q>>2]|0)+1-(c[y>>2]|0);c[A>>2]=c[p+(c[y>>2]<<2)>>2];while(1){if((c[A>>2]|0)>>>0>=((c[p+(c[y>>2]<<2)>>2]|0)+(c[z>>2]|0)|0)>>>0)break;x=(c[w>>2]|0)+(c[A>>2]<<1)|0;a[x>>0]=a[B>>0]|0;a[x+1>>0]=a[B+1>>0]|0;c[A>>2]=(c[A>>2]|0)+1;}x=p+(c[y>>2]<<2)|0;c[x>>2]=(c[x>>2]|0)+(c[z>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}c[j>>2]=c[r>>2];C=c[j>>2]|0;l=i;return C|0;}function px(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;i=l;l=l+192|0;j=i+184|0;k=i+180|0;m=i+176|0;n=i+172|0;o=i+168|0;p=i+164|0;q=i+160|0;r=i+156|0;s=i+152|0;t=i+148|0;u=i+144|0;v=i+140|0;w=i+136|0;x=i+120|0;y=i+104|0;z=i+88|0;A=i+72|0;B=i+64|0;C=i+60|0;D=i+56|0;E=i+52|0;F=i+48|0;G=i+44|0;H=i+40|0;I=i+36|0;J=i+32|0;K=i+28|0;L=i+24|0;M=i+20|0;N=i+16|0;O=i+12|0;P=i+8|0;Q=i+4|0;R=i;c[k>>2]=b;c[m>>2]=d;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if((c[o>>2]|0)>>>0<10){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[q>>2]=c[n>>2];c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[p>>2];c[u>>2]=(c[t>>2]|0)+2;c[v>>2]=e[c[p>>2]>>1];c[B>>2]=(Lw(c[q>>2]|0)|0)&65535;c[C>>2]=(Lw((c[q>>2]|0)+2|0)|0)&65535;c[D>>2]=(Lw((c[q>>2]|0)+4|0)|0)&65535;c[F>>2]=(c[q>>2]|0)+6;c[G>>2]=(c[F>>2]|0)+(c[B>>2]|0);c[H>>2]=(c[G>>2]|0)+(c[C>>2]|0);c[I>>2]=(c[H>>2]|0)+(c[D>>2]|0);c[J>>2]=(((c[m>>2]|0)+3|0)>>>0)/4|0;c[K>>2]=(c[r>>2]|0)+(c[J>>2]|0);c[L>>2]=(c[K>>2]|0)+(c[J>>2]|0);c[M>>2]=(c[L>>2]|0)+(c[J>>2]|0);c[N>>2]=c[r>>2];c[O>>2]=c[K>>2];c[P>>2]=c[L>>2];c[Q>>2]=c[M>>2];c[E>>2]=(c[o>>2]|0)-((c[B>>2]|0)+(c[C>>2]|0)+(c[D>>2]|0)+6);if((c[E>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=tw(x,c[F>>2]|0,c[B>>2]|0)|0;if(Ww(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=tw(y,c[G>>2]|0,c[C>>2]|0)|0;if(Ww(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=tw(z,c[H>>2]|0,c[D>>2]|0)|0;if(Ww(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}c[w>>2]=tw(A,c[I>>2]|0,c[E>>2]|0)|0;if(Ww(c[w>>2]|0)|0){c[j>>2]=c[w>>2];S=c[j>>2]|0;l=i;return S|0;}w=vw(x)|0;E=w|(vw(y)|0);w=E|(vw(z)|0);c[R>>2]=w|(vw(A)|0);while(1){if(c[R>>2]|0)break;if((c[Q>>2]|0)>>>0>=((c[s>>2]|0)+-7|0)>>>0)break;if($w()|0){w=qx(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}$w()|0;w=qx(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;$w()|0;w=qx(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;$w()|0;w=qx(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;$w()|0;w=qx(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;if($w()|0){w=qx(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;}if($w()|0){w=qx(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;}w=qx(x,c[u>>2]|0,c[v>>2]|0)|0;E=c[N>>2]|0;c[N>>2]=E+1;a[E>>0]=w;w=qx(y,c[u>>2]|0,c[v>>2]|0)|0;E=c[O>>2]|0;c[O>>2]=E+1;a[E>>0]=w;w=qx(z,c[u>>2]|0,c[v>>2]|0)|0;E=c[P>>2]|0;c[P>>2]=E+1;a[E>>0]=w;w=qx(A,c[u>>2]|0,c[v>>2]|0)|0;E=c[Q>>2]|0;c[Q>>2]=E+1;a[E>>0]=w;w=vw(x)|0;E=w|(vw(y)|0);w=E|(vw(z)|0);c[R>>2]=w|(vw(A)|0);}if((c[N>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[O>>2]|0)>>>0>(c[L>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}if((c[P>>2]|0)>>>0>(c[M>>2]|0)>>>0){c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}rx(c[N>>2]|0,x,c[K>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;rx(c[O>>2]|0,y,c[L>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;rx(c[P>>2]|0,z,c[M>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;rx(c[Q>>2]|0,A,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;v=yw(x)|0;x=v&(yw(y)|0);y=x&(yw(z)|0);c[R>>2]=y&(yw(A)|0);if(c[R>>2]|0){c[j>>2]=c[m>>2];S=c[j>>2]|0;l=i;return S|0;}else{c[j>>2]=-20;S=c[j>>2]|0;l=i;return S|0;}return 0;}function qx(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+16|0;c[h>>2]=b;c[i>>2]=e;c[j>>2]=f;c[k>>2]=dx(c[h>>2]|0,c[j>>2]|0)|0;a[m>>0]=a[(c[i>>2]|0)+(c[k>>2]<<1)>>0]|0;Gw(c[h>>2]|0,d[(c[i>>2]|0)+(c[k>>2]<<1)+1>>0]|0);l=g;return a[m>>0]|0;}function rx(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[i>>2];while(1){if(vw(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>((c[k>>2]|0)+-4|0)>>>0)break;if($w()|0){g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}$w()|0;g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;if($w()|0){g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if(vw(c[j>>2]|0)|0)break;if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}while(1){if((c[i>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;g=qx(c[j>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;f=c[i>>2]|0;c[i>>2]=f+1;a[f>>0]=g;}l=h;return(c[k>>2]|0)-(c[o>>2]|0)|0;}function sx(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;if((c[j>>2]|0)>>>0<5){c[g>>2]=5;m=c[g>>2]|0;l=f;return m|0;}c[k>>2]=pr(c[i>>2]|0)|0;if((c[k>>2]|0)!=-47205084){c[g>>2]=-10;m=c[g>>2]|0;l=f;return m|0;}k=c[h>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[k+28>>2]=0;c[(c[h>>2]|0)+8>>2]=((d[(c[i>>2]|0)+4>>0]|0)&15)+11;if((d[(c[i>>2]|0)+4>>0]|0)>>4|0){c[g>>2]=-14;m=c[g>>2]|0;l=f;return m|0;}else{c[g>>2]=0;m=c[g>>2]|0;l=f;return m|0;}return 0;}function tx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;f=Zr(c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,0,0)|0;l=g;return f|0;}function ux(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[n>>2]=Wp()|0;if(!(c[n>>2]|0)){c[g>>2]=-64;o=c[g>>2]|0;l=f;return o|0;}else{c[m>>2]=tx(c[n>>2]|0,c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;Xp(c[n>>2]|0)|0;c[g>>2]=c[m>>2];o=c[g>>2]|0;l=f;return o|0;}return 0;}function vx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+28744>>2]|0;}function wx(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;switch(c[(c[e>>2]|0)+28804>>2]|0){case 6:case 7:{c[d>>2]=5;break;}case 2:{c[d>>2]=1;break;}case 3:{c[d>>2]=2;break;}case 4:{c[d>>2]=3;break;}case 5:{c[d>>2]=4;break;}default:c[d>>2]=0;}l=b;return c[d>>2]|0;}function xx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=l;l=l+64|0;h=g+52|0;i=g+48|0;j=g+44|0;k=g+40|0;m=g+36|0;n=g+32|0;o=g+28|0;p=g+16|0;q=g+12|0;r=g+8|0;s=g+4|0;t=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[n>>2]|0)!=(c[(c[i>>2]|0)+28744>>2]|0)){c[h>>2]=-72;u=c[h>>2]|0;l=g;return u|0;}if(c[k>>2]|0)Br(c[i>>2]|0,c[j>>2]|0);switch(c[(c[i>>2]|0)+28804>>2]|0){case 0:{if((c[(c[i>>2]|0)+28912>>2]|0)==0?((hq(c[m>>2]|0)|0)&-16|0)==407710288:0){mE((c[i>>2]|0)+160092|0,c[m>>2]|0,c[n>>2]|0)|0;c[(c[i>>2]|0)+28744>>2]=8-(c[n>>2]|0);c[(c[i>>2]|0)+28804>>2]=6;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}f=nq(c[m>>2]|0,c[n>>2]|0,c[(c[i>>2]|0)+28912>>2]|0)|0;c[(c[i>>2]|0)+28904>>2]=f;f=($q(c[(c[i>>2]|0)+28904>>2]|0)|0)!=0;e=c[i>>2]|0;if(f){c[h>>2]=c[e+28904>>2];u=c[h>>2]|0;l=g;return u|0;}else{mE(e+160092|0,c[m>>2]|0,c[n>>2]|0)|0;c[(c[i>>2]|0)+28744>>2]=(c[(c[i>>2]|0)+28904>>2]|0)-(c[n>>2]|0);c[(c[i>>2]|0)+28804>>2]=1;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}break;}case 1:{mE((c[i>>2]|0)+160092+((c[(c[i>>2]|0)+28904>>2]|0)-(c[n>>2]|0))|0,c[m>>2]|0,c[n>>2]|0)|0;c[o>>2]=fs(c[i>>2]|0,(c[i>>2]|0)+160092|0,c[(c[i>>2]|0)+28904>>2]|0)|0;if($q(c[o>>2]|0)|0){c[h>>2]=c[o>>2];u=c[h>>2]|0;l=g;return u|0;}else{c[(c[i>>2]|0)+28744>>2]=3;c[(c[i>>2]|0)+28804>>2]=2;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}break;}case 2:{c[q>>2]=br(c[m>>2]|0,3,p)|0;o=($q(c[q>>2]|0)|0)!=0;e=c[q>>2]|0;if(o){c[h>>2]=e;u=c[h>>2]|0;l=g;return u|0;}c[(c[i>>2]|0)+28744>>2]=e;c[(c[i>>2]|0)+28800>>2]=c[p>>2];c[(c[i>>2]|0)+28936>>2]=c[p+8>>2];e=(c[p+4>>2]|0)!=0;if(c[q>>2]|0){c[(c[i>>2]|0)+28804>>2]=e?4:3;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}q=c[i>>2]|0;do{if(e){p=(c[i>>2]|0)+28744|0;if(c[q+28752+32>>2]|0){c[p>>2]=4;c[(c[i>>2]|0)+28804>>2]=5;break;}else{c[p>>2]=0;c[(c[i>>2]|0)+28804>>2]=0;break;}}else{c[q+28744>>2]=3;c[(c[i>>2]|0)+28804>>2]=2;}}while(0);c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}case 3:case 4:{switch(c[(c[i>>2]|0)+28800>>2]|0){case 2:{c[r>>2]=Cr(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,1)|0;break;}case 0:{c[r>>2]=gs(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;break;}case 1:{c[r>>2]=yx(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[(c[i>>2]|0)+28936>>2]|0)|0;break;}default:{c[h>>2]=-20;u=c[h>>2]|0;l=g;return u|0;}}k=($q(c[r>>2]|0)|0)!=0;q=c[r>>2]|0;if(k){c[h>>2]=q;u=c[h>>2]|0;l=g;return u|0;}k=(c[i>>2]|0)+28792|0;e=k;p=k;c[p>>2]=dE(c[e>>2]|0,c[e+4>>2]|0,q|0,0)|0;c[p+4>>2]=y;if(c[(c[i>>2]|0)+28752+32>>2]|0)Nh((c[i>>2]|0)+28816|0,c[j>>2]|0,c[r>>2]|0)|0;p=c[i>>2]|0;do{if((c[(c[i>>2]|0)+28804>>2]|0)==4){q=p+28752|0;if(((c[q>>2]|0)!=-1?1:(c[q+4>>2]|0)!=-1)?(q=(c[i>>2]|0)+28792|0,e=(c[i>>2]|0)+28752|0,(c[q>>2]|0)!=(c[e>>2]|0)?1:(c[q+4>>2]|0)!=(c[e+4>>2]|0)):0){c[h>>2]=-20;u=c[h>>2]|0;l=g;return u|0;}e=(c[i>>2]|0)+28744|0;if(c[(c[i>>2]|0)+28752+32>>2]|0){c[e>>2]=4;c[(c[i>>2]|0)+28804>>2]=5;break;}else{c[e>>2]=0;c[(c[i>>2]|0)+28804>>2]=0;break;}}else{c[p+28804>>2]=2;c[(c[i>>2]|0)+28744>>2]=3;c[(c[i>>2]|0)+28728>>2]=(c[j>>2]|0)+(c[r>>2]|0);}}while(0);c[h>>2]=c[r>>2];u=c[h>>2]|0;l=g;return u|0;}case 5:{c[s>>2]=Oh((c[i>>2]|0)+28816|0)|0;c[t>>2]=hq(c[m>>2]|0)|0;if((c[t>>2]|0)!=(c[s>>2]|0)){c[h>>2]=-22;u=c[h>>2]|0;l=g;return u|0;}else{c[(c[i>>2]|0)+28744>>2]=0;c[(c[i>>2]|0)+28804>>2]=0;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}break;}case 6:{mE((c[i>>2]|0)+160092+(8-(c[n>>2]|0))|0,c[m>>2]|0,c[n>>2]|0)|0;n=hq((c[i>>2]|0)+160092+4|0)|0;c[(c[i>>2]|0)+28744>>2]=n;c[(c[i>>2]|0)+28804>>2]=7;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}case 7:{c[(c[i>>2]|0)+28744>>2]=0;c[(c[i>>2]|0)+28804>>2]=0;c[h>>2]=0;u=c[h>>2]|0;l=g;return u|0;}default:{c[h>>2]=-1;u=c[h>>2]|0;l=g;return u|0;}}return 0;}function yx(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[n>>2]|0)!=1){c[i>>2]=-72;p=c[i>>2]|0;l=h;return p|0;}if((c[o>>2]|0)>>>0>(c[k>>2]|0)>>>0){c[i>>2]=-70;p=c[i>>2]|0;l=h;return p|0;}else{oE(c[j>>2]|0,(d[c[m>>2]>>0]|0)&255|0,c[o>>2]|0)|0;c[i>>2]=c[o>>2];p=c[i>>2]|0;l=h;return p|0;}return 0;}function zx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+48|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;if(((c[f>>2]|0)!=0^1)&1^((c[f+4>>2]|0)!=0^1)&1|0){c[i>>2]=0;p=c[i>>2]|0;l=g;return p|0;};c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[o>>2]=Rh(28744,h)|0;if(!(c[o>>2]|0)){c[i>>2]=0;p=c[i>>2]|0;l=g;return p|0;}h=(c[o>>2]|0)+28732|0;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];f=($q(Ax(c[o>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0)|0)!=0;n=c[o>>2]|0;if(f){Yp(n)|0;c[i>>2]=0;p=c[i>>2]|0;l=g;return p|0;}else{c[i>>2]=n;p=c[i>>2]|0;l=g;return p|0;}return 0;}function Ax(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+48|0;h=g+32|0;i=g+28|0;j=g+24|0;k=g+20|0;m=g+16|0;n=g+12|0;o=g+8|0;p=g+4|0;q=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;do{if((c[n>>2]|0)!=1&(c[k>>2]|0)!=0&(c[m>>2]|0)!=0){f=c[m>>2]|0;e=(c[j>>2]|0)+28732|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[p>>2]=Rh(f,h)|0;c[c[j>>2]>>2]=c[p>>2];c[(c[j>>2]|0)+4>>2]=c[p>>2];if(c[p>>2]|0){mE(c[p>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;break;}c[i>>2]=-64;r=c[i>>2]|0;l=g;return r|0;}else{c[c[j>>2]>>2]=0;c[(c[j>>2]|0)+4>>2]=c[k>>2];}}while(0);c[(c[j>>2]|0)+8>>2]=c[m>>2];c[(c[j>>2]|0)+12+10264>>2]=201326604;c[q>>2]=Bx(c[j>>2]|0,c[o>>2]|0)|0;if($q(c[q>>2]|0)|0){c[i>>2]=c[q>>2];r=c[i>>2]|0;l=g;return r|0;}else{c[i>>2]=0;r=c[i>>2]|0;l=g;return r|0;}return 0;}function Bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[f>>2]=a;c[g>>2]=b;c[(c[f>>2]|0)+28724>>2]=0;c[(c[f>>2]|0)+28728>>2]=0;do{if((c[g>>2]|0)!=1){if((c[(c[f>>2]|0)+8>>2]|0)>>>0<8)if((c[g>>2]|0)==2){c[e>>2]=-30;break;}else{c[e>>2]=0;break;}c[h>>2]=hq(c[(c[f>>2]|0)+4>>2]|0)|0;if((c[h>>2]|0)!=-332356553){if((c[g>>2]|0)==2){c[e>>2]=-30;break;}else{c[e>>2]=0;break;}}else{b=hq((c[(c[f>>2]|0)+4>>2]|0)+4|0)|0;c[(c[f>>2]|0)+28724>>2]=b;c[i>>2]=ls((c[f>>2]|0)+12|0,c[(c[f>>2]|0)+4>>2]|0,c[(c[f>>2]|0)+8>>2]|0)|0;if($q(c[i>>2]|0)|0){c[e>>2]=-30;break;}else{c[(c[f>>2]|0)+28728>>2]=1;c[e>>2]=0;break;}}}else c[e>>2]=0;}while(0);l=d;return c[e>>2]|0;}function Cx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;c[g>>2]=b;b=c[f>>2]|0;f=c[g>>2]|0;c[e>>2]=c[5415];c[e+4>>2]=c[5416];c[e+8>>2]=c[5417];g=zx(b,f,0,0,e)|0;l=d;return g|0;}function Dx(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;g=_r(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,0,0,c[o>>2]|0)|0;l=h;return g|0;}function Ex(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[5412];c[b+4>>2]=c[5413];c[b+8>>2]=c[5414];d=Fx(b)|0;l=a;return d|0;}function Fx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];a=Vp(d)|0;l=b;return a|0;}function Gx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Xp(c[d>>2]|0)|0;l=b;return a|0;}function Hx(){return 131075;}function Ix(){return 131072;}function Jx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+48|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;if(c[(c[j>>2]|0)+28956>>2]|0){c[i>>2]=-60;p=c[i>>2]|0;l=g;return p|0;}Yp(c[(c[j>>2]|0)+28948>>2]|0)|0;if((c[k>>2]|0)!=0&(c[m>>2]|0)>>>0>=8){f=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=(c[j>>2]|0)+28920|0;c[h>>2]=c[o>>2];c[h+4>>2]=c[o+4>>2];c[h+8>>2]=c[o+8>>2];o=zx(f,k,m,n,h)|0;c[(c[j>>2]|0)+28948>>2]=o;if(!(c[(c[j>>2]|0)+28948>>2]|0)){c[i>>2]=-64;p=c[i>>2]|0;l=g;return p|0;}}else c[(c[j>>2]|0)+28948>>2]=0;c[(c[j>>2]|0)+28952>>2]=c[(c[j>>2]|0)+28948>>2];c[i>>2]=0;p=c[i>>2]|0;l=g;return p|0;}function Kx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=Jx(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,0,0)|0;l=e;return d|0;}function Lx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[(c[g>>2]|0)+28956>>2]=0;c[j>>2]=Kx(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;if($q(c[j>>2]|0)|0){c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}else{c[f>>2]=5;k=c[f>>2]|0;l=e;return k|0;}return 0;}function Mx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Lx(c[d>>2]|0,0,0)|0;l=b;return a|0;}function Nx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Mx(c[e>>2]|0)|0;c[(c[e>>2]|0)+28952>>2]=c[f>>2];l=d;return c[g>>2]|0;}function Ox(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+28956>>2]=1;c[(c[d>>2]|0)+28988>>2]=0;c[(c[d>>2]|0)+28984>>2]=0;c[(c[d>>2]|0)+28968>>2]=0;c[(c[d>>2]|0)+28992>>2]=0;c[(c[d>>2]|0)+29004>>2]=0;c[(c[d>>2]|0)+29008>>2]=0;l=b;return 5;}function Px(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+48|0;g=f+40|0;h=f+24|0;i=f+16|0;j=f+36|0;k=f+8|0;m=f;n=f+32|0;o=h;c[o>>2]=a;c[o+4>>2]=b;b=i;c[b>>2]=d;c[b+4>>2]=e;e=h;b=c[e+4>>2]|0;d=b>>>0<0|(b|0)==0&(c[e>>2]|0)>>>0<131072;e=h;b=c[e+4>>2]|0;b=d?c[e>>2]|0:131072;c[j>>2]=b;b=h;h=dE(c[b>>2]|0,c[b+4>>2]|0,c[j>>2]|0,0)|0;j=dE(h|0,y|0,16,0)|0;h=k;c[h>>2]=j;c[h+4>>2]=y;h=i;j=c[h+4>>2]|0;b=k;e=c[b+4>>2]|0;d=j>>>0<e>>>0|((j|0)==(e|0)?(c[h>>2]|0)>>>0<(c[b>>2]|0)>>>0:0);b=i;i=k;k=d?c[b+4>>2]|0:c[i+4>>2]|0;h=m;c[h>>2]=d?c[b>>2]|0:c[i>>2]|0;c[h+4>>2]=k;c[n>>2]=c[m>>2];k=m;if(0!=(c[k+4>>2]|0)?1:(c[n>>2]|0)!=(c[k>>2]|0)){c[g>>2]=-16;p=c[g>>2]|0;l=f;return p|0;}else{c[g>>2]=c[n>>2];p=c[g>>2]|0;l=f;return p|0;}return 0;}function Qx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;e=l;l=l+176|0;f=e+152|0;g=e+148|0;h=e+144|0;i=e+140|0;j=e+136|0;k=e+132|0;m=e+128|0;n=e+124|0;o=e+120|0;p=e+116|0;q=e+112|0;r=e+108|0;s=e+104|0;t=e+100|0;u=e+96|0;v=e+92|0;w=e+88|0;x=e+84|0;y=e+80|0;z=e+76|0;A=e+72|0;B=e+68|0;C=e+64|0;D=e+60|0;E=e+56|0;F=e+52|0;G=e+48|0;H=e+44|0;I=e+40|0;J=e+36|0;K=e+32|0;L=e+28|0;M=e+24|0;N=e+20|0;O=e+16|0;P=e+12|0;Q=e+8|0;R=e+4|0;S=e;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[m>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0);c[n>>2]=c[k>>2];c[o>>2]=(c[c[i>>2]>>2]|0)+(c[(c[i>>2]|0)+8>>2]|0);c[p>>2]=(c[c[i>>2]>>2]|0)+(c[(c[i>>2]|0)+4>>2]|0);c[q>>2]=c[o>>2];c[r>>2]=1;if((c[(c[j>>2]|0)+8>>2]|0)>>>0>(c[(c[j>>2]|0)+4>>2]|0)>>>0){c[g>>2]=-72;T=c[g>>2]|0;l=e;return T|0;}if((c[(c[i>>2]|0)+8>>2]|0)>>>0>(c[(c[i>>2]|0)+4>>2]|0)>>>0){c[g>>2]=-70;T=c[g>>2]|0;l=e;return T|0;}a:while(1){if(!(c[r>>2]|0)){U=98;break;}switch(c[(c[h>>2]|0)+28956>>2]|0){case 0:{Ox(c[h>>2]|0)|0;U=9;break;}case 1:{U=9;break;}case 2:{U=64;break;}case 3:{U=76;break;}case 4:{U=91;break;}default:{U=96;break a;}}do{if((U|0)==9){U=0;V=c[h>>2]|0;if(c[(c[h>>2]|0)+29004>>2]|0){U=10;break a;}c[t>>2]=qq(V+28752|0,(c[h>>2]|0)+160092|0,c[(c[h>>2]|0)+28992>>2]|0,c[(c[h>>2]|0)+28912>>2]|0)|0;if($q(c[t>>2]|0)|0){U=16;break a;}if(c[t>>2]|0){c[z>>2]=(c[t>>2]|0)-(c[(c[h>>2]|0)+28992>>2]|0);c[A>>2]=(c[m>>2]|0)-(c[n>>2]|0);if((c[z>>2]|0)>>>0>(c[A>>2]|0)>>>0){U=31;break a;}mE((c[h>>2]|0)+160092+(c[(c[h>>2]|0)+28992>>2]|0)|0,c[n>>2]|0,c[z>>2]|0)|0;c[(c[h>>2]|0)+28992>>2]=c[t>>2];c[n>>2]=(c[n>>2]|0)+(c[z>>2]|0);break;}d=(c[h>>2]|0)+28752|0;if((((c[d>>2]|0)!=0|(c[d+4>>2]|0)!=0?(d=(c[h>>2]|0)+28752+8|0,(c[d>>2]|0)!=0|(c[d+4>>2]|0)!=0):0)?(d=(c[h>>2]|0)+28752|0,b=c[d+4>>2]|0,0>b>>>0|(0==(b|0)?((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0>=(c[d>>2]|0)>>>0:0)):0)?(c[B>>2]=_q(c[k>>2]|0,(c[m>>2]|0)-(c[k>>2]|0)|0)|0,(c[B>>2]|0)>>>0<=((c[m>>2]|0)-(c[k>>2]|0)|0)>>>0):0){c[C>>2]=Dx(c[h>>2]|0,c[q>>2]|0,(c[p>>2]|0)-(c[q>>2]|0)|0,c[k>>2]|0,c[B>>2]|0,c[(c[h>>2]|0)+28952>>2]|0)|0;if($q(c[C>>2]|0)|0){U=40;break a;}c[n>>2]=(c[k>>2]|0)+(c[B>>2]|0);c[q>>2]=(c[q>>2]|0)+(c[C>>2]|0);c[(c[h>>2]|0)+28744>>2]=0;c[(c[h>>2]|0)+28956>>2]=0;c[r>>2]=0;break;}c[D>>2]=cs(c[h>>2]|0,c[(c[h>>2]|0)+28952>>2]|0)|0;if($q(c[D>>2]|0)|0){U=43;break a;}d=((hq((c[h>>2]|0)+160092|0)|0)&-16|0)==407710288;b=c[h>>2]|0;if(d){d=hq(b+160092+4|0)|0;c[(c[h>>2]|0)+28744>>2]=d;c[(c[h>>2]|0)+28804>>2]=7;}else{c[E>>2]=fs(b,(c[h>>2]|0)+160092|0,c[(c[h>>2]|0)+28992>>2]|0)|0;if($q(c[E>>2]|0)|0){U=47;break a;}c[(c[h>>2]|0)+28744>>2]=3;c[(c[h>>2]|0)+28804>>2]=2;}b=(c[h>>2]|0)+28752+8|0;d=c[b+4>>2]|0;if(d>>>0>0|(d|0)==0&(c[b>>2]|0)>>>0>1024){b=(c[h>>2]|0)+28752+8|0;W=c[b>>2]|0;X=c[b+4>>2]|0;}else{W=1024;X=0;}b=(c[h>>2]|0)+28752+8|0;c[b>>2]=W;c[b+4>>2]=X;b=(c[h>>2]|0)+28752+8|0;d=c[b+4>>2]|0;if(d>>>0>0|((d|0)==0?(c[b>>2]|0)>>>0>(c[(c[h>>2]|0)+28972>>2]|0)>>>0:0)){U=52;break a;}if((c[(c[h>>2]|0)+28752+16>>2]|0)>>>0>4)Y=c[(c[h>>2]|0)+28752+16>>2]|0;else Y=4;c[F>>2]=Y;b=(c[h>>2]|0)+28752+8|0;d=(c[h>>2]|0)+28752|0;c[G>>2]=Px(c[b>>2]|0,c[b+4>>2]|0,c[d>>2]|0,c[d+4>>2]|0)|0;if(!((c[(c[h>>2]|0)+28964>>2]|0)>>>0>=(c[F>>2]|0)>>>0?(c[(c[h>>2]|0)+28980>>2]|0)>>>0>=(c[G>>2]|0)>>>0:0)){c[H>>2]=(c[F>>2]|0)+(c[G>>2]|0);if(c[(c[h>>2]|0)+28940>>2]|0){if((c[H>>2]|0)>>>0>((c[(c[h>>2]|0)+28940>>2]|0)-160112|0)>>>0){U=59;break a;}}else{d=c[(c[h>>2]|0)+28960>>2]|0;b=(c[h>>2]|0)+28920|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];Th(d,f);c[(c[h>>2]|0)+28964>>2]=0;c[(c[h>>2]|0)+28980>>2]=0;d=c[H>>2]|0;b=(c[h>>2]|0)+28920|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];b=Rh(d,f)|0;c[(c[h>>2]|0)+28960>>2]=b;if(!(c[(c[h>>2]|0)+28960>>2]|0)){U=61;break a;}}c[(c[h>>2]|0)+28964>>2]=c[F>>2];c[(c[h>>2]|0)+28976>>2]=(c[(c[h>>2]|0)+28960>>2]|0)+(c[(c[h>>2]|0)+28964>>2]|0);c[(c[h>>2]|0)+28980>>2]=c[G>>2];}c[(c[h>>2]|0)+28956>>2]=2;U=64;}}while(0);do{if((U|0)==64){U=0;c[I>>2]=vx(c[h>>2]|0)|0;if(!(c[I>>2]|0)){c[(c[h>>2]|0)+28956>>2]=0;c[r>>2]=0;break;}if(((c[m>>2]|0)-(c[n>>2]|0)|0)>>>0<(c[I>>2]|0)>>>0)if((c[n>>2]|0)==(c[m>>2]|0)){c[r>>2]=0;break;}else{c[(c[h>>2]|0)+28956>>2]=3;U=76;break;}c[J>>2]=Tx(c[h>>2]|0)|0;if(c[J>>2]|0)Z=0;else Z=(c[(c[h>>2]|0)+28980>>2]|0)-(c[(c[h>>2]|0)+28984>>2]|0)|0;c[K>>2]=xx(c[h>>2]|0,(c[(c[h>>2]|0)+28976>>2]|0)+(c[(c[h>>2]|0)+28984>>2]|0)|0,Z,c[n>>2]|0,c[I>>2]|0)|0;if($q(c[K>>2]|0)|0){U=70;break a;}c[n>>2]=(c[n>>2]|0)+(c[I>>2]|0);if((c[K>>2]|0)!=0|(c[J>>2]|0)!=0){c[(c[h>>2]|0)+28988>>2]=(c[(c[h>>2]|0)+28984>>2]|0)+(c[K>>2]|0);c[(c[h>>2]|0)+28956>>2]=4;}}}while(0);do{if((U|0)==76){U=0;c[L>>2]=vx(c[h>>2]|0)|0;c[M>>2]=(c[L>>2]|0)-(c[(c[h>>2]|0)+28968>>2]|0);c[N>>2]=Tx(c[h>>2]|0)|0;b=c[M>>2]|0;if(c[N>>2]|0){if(b>>>0<((c[m>>2]|0)-(c[n>>2]|0)|0)>>>0)_=c[M>>2]|0;else _=(c[m>>2]|0)-(c[n>>2]|0)|0;c[O>>2]=_;}else{if(b>>>0>((c[(c[h>>2]|0)+28964>>2]|0)-(c[(c[h>>2]|0)+28968>>2]|0)|0)>>>0){U=82;break a;}c[O>>2]=Ux((c[(c[h>>2]|0)+28960>>2]|0)+(c[(c[h>>2]|0)+28968>>2]|0)|0,c[M>>2]|0,c[n>>2]|0,(c[m>>2]|0)-(c[n>>2]|0)|0)|0;}c[n>>2]=(c[n>>2]|0)+(c[O>>2]|0);b=(c[h>>2]|0)+28968|0;c[b>>2]=(c[b>>2]|0)+(c[O>>2]|0);if((c[O>>2]|0)>>>0<(c[M>>2]|0)>>>0){c[r>>2]=0;break;}c[P>>2]=xx(c[h>>2]|0,(c[(c[h>>2]|0)+28976>>2]|0)+(c[(c[h>>2]|0)+28984>>2]|0)|0,(c[(c[h>>2]|0)+28980>>2]|0)-(c[(c[h>>2]|0)+28984>>2]|0)|0,c[(c[h>>2]|0)+28960>>2]|0,c[L>>2]|0)|0;if($q(c[P>>2]|0)|0){U=87;break a;}c[(c[h>>2]|0)+28968>>2]=0;b=c[h>>2]|0;if((c[P>>2]|0)!=0|(c[N>>2]|0)!=0){c[(c[h>>2]|0)+28988>>2]=(c[b+28984>>2]|0)+(c[P>>2]|0);c[(c[h>>2]|0)+28956>>2]=4;U=91;break;}else{c[b+28956>>2]=2;break;}}}while(0);do{if((U|0)==91){U=0;c[Q>>2]=(c[(c[h>>2]|0)+28988>>2]|0)-(c[(c[h>>2]|0)+28984>>2]|0);c[R>>2]=Ux(c[q>>2]|0,(c[p>>2]|0)-(c[q>>2]|0)|0,(c[(c[h>>2]|0)+28976>>2]|0)+(c[(c[h>>2]|0)+28984>>2]|0)|0,c[Q>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[R>>2]|0);b=(c[h>>2]|0)+28984|0;c[b>>2]=(c[b>>2]|0)+(c[R>>2]|0);if((c[R>>2]|0)!=(c[Q>>2]|0)){c[r>>2]=0;break;}c[(c[h>>2]|0)+28956>>2]=2;b=(c[h>>2]|0)+28752|0;d=c[b+4>>2]|0;if(0<d>>>0|(0==(d|0)?(c[(c[h>>2]|0)+28980>>2]|0)>>>0<(c[b>>2]|0)>>>0:0)?((c[(c[h>>2]|0)+28984>>2]|0)+(c[(c[h>>2]|0)+28752+16>>2]|0)|0)>>>0>(c[(c[h>>2]|0)+28980>>2]|0)>>>0:0){c[(c[h>>2]|0)+28988>>2]=0;c[(c[h>>2]|0)+28984>>2]=0;}}}while(0);}switch(U|0){case 10:{if(c[V+28940>>2]|0){c[g>>2]=-64;T=c[g>>2]|0;l=e;return T|0;}c[s>>2]=Rx(c[(c[h>>2]|0)+28996>>2]|0,c[(c[h>>2]|0)+29004>>2]|0,c[i>>2]|0,c[j>>2]|0)|0;if(!(c[s>>2]|0))c[(c[h>>2]|0)+28956>>2]=0;c[g>>2]=c[s>>2];T=c[g>>2]|0;l=e;return T|0;}case 16:{c[u>>2]=iq(c[k>>2]|0,(c[m>>2]|0)-(c[k>>2]|0)|0)|0;if(!(c[u>>2]|0)){c[g>>2]=c[t>>2];T=c[g>>2]|0;l=e;return T|0;}if(c[(c[h>>2]|0)+28952>>2]|0)$=c[(c[(c[h>>2]|0)+28952>>2]|0)+4>>2]|0;else $=0;c[v>>2]=$;if(c[(c[h>>2]|0)+28952>>2]|0)aa=c[(c[(c[h>>2]|0)+28952>>2]|0)+8>>2]|0;else aa=0;c[w>>2]=aa;if(c[(c[h>>2]|0)+28940>>2]|0){c[g>>2]=-64;T=c[g>>2]|0;l=e;return T|0;}c[x>>2]=Sx((c[h>>2]|0)+28996|0,c[(c[h>>2]|0)+29e3>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;if($q(c[x>>2]|0)|0){c[g>>2]=c[x>>2];T=c[g>>2]|0;l=e;return T|0;}x=c[u>>2]|0;c[(c[h>>2]|0)+29e3>>2]=x;c[(c[h>>2]|0)+29004>>2]=x;c[y>>2]=Rx(c[(c[h>>2]|0)+28996>>2]|0,c[u>>2]|0,c[i>>2]|0,c[j>>2]|0)|0;if(!(c[y>>2]|0))c[(c[h>>2]|0)+28956>>2]=0;c[g>>2]=c[y>>2];T=c[g>>2]|0;l=e;return T|0;}case 31:{if((c[A>>2]|0)>>>0>0){mE((c[h>>2]|0)+160092+(c[(c[h>>2]|0)+28992>>2]|0)|0,c[n>>2]|0,c[A>>2]|0)|0;y=(c[h>>2]|0)+28992|0;c[y>>2]=(c[y>>2]|0)+(c[A>>2]|0);}c[(c[j>>2]|0)+8>>2]=c[(c[j>>2]|0)+4>>2];c[g>>2]=(6>(c[t>>2]|0)>>>0?6:c[t>>2]|0)-(c[(c[h>>2]|0)+28992>>2]|0)+3;T=c[g>>2]|0;l=e;return T|0;}case 40:{c[g>>2]=c[C>>2];T=c[g>>2]|0;l=e;return T|0;}case 43:{c[g>>2]=c[D>>2];T=c[g>>2]|0;l=e;return T|0;}case 47:{c[g>>2]=c[E>>2];T=c[g>>2]|0;l=e;return T|0;}case 52:{c[g>>2]=-16;T=c[g>>2]|0;l=e;return T|0;}case 59:{c[g>>2]=-64;T=c[g>>2]|0;l=e;return T|0;}case 61:{c[g>>2]=-64;T=c[g>>2]|0;l=e;return T|0;}case 70:{c[g>>2]=c[K>>2];T=c[g>>2]|0;l=e;return T|0;}case 82:{c[g>>2]=-20;T=c[g>>2]|0;l=e;return T|0;}case 87:{c[g>>2]=c[P>>2];T=c[g>>2]|0;l=e;return T|0;}case 96:{c[g>>2]=-1;T=c[g>>2]|0;l=e;return T|0;}case 98:{P=(c[j>>2]|0)+8|0;c[P>>2]=(c[P>>2]|0)+((c[n>>2]|0)-(c[k>>2]|0));k=(c[i>>2]|0)+8|0;c[k>>2]=(c[k>>2]|0)+((c[q>>2]|0)-(c[o>>2]|0));c[S>>2]=vx(c[h>>2]|0)|0;o=c[h>>2]|0;if(c[S>>2]|0){q=((wx(o)|0)==2&1)*3|0;c[S>>2]=(c[S>>2]|0)+q;c[S>>2]=(c[S>>2]|0)-(c[(c[h>>2]|0)+28968>>2]|0);c[g>>2]=c[S>>2];T=c[g>>2]|0;l=e;return T|0;}S=(c[(c[h>>2]|0)+29008>>2]|0)!=0;if((c[o+28988>>2]|0)!=(c[(c[h>>2]|0)+28984>>2]|0)){if(!S){o=(c[j>>2]|0)+8|0;c[o>>2]=(c[o>>2]|0)+-1;c[(c[h>>2]|0)+29008>>2]=1;}c[g>>2]=1;T=c[g>>2]|0;l=e;return T|0;}do{if(S){if((c[(c[j>>2]|0)+8>>2]|0)>>>0<(c[(c[j>>2]|0)+4>>2]|0)>>>0){o=(c[j>>2]|0)+8|0;c[o>>2]=(c[o>>2]|0)+1;break;}c[(c[h>>2]|0)+28956>>2]=2;c[g>>2]=1;T=c[g>>2]|0;l=e;return T|0;}}while(0);c[g>>2]=0;T=c[g>>2]|0;l=e;return T|0;}}return 0;}function Rx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;f=l;l=l+128|0;g=f+112|0;h=f+108|0;i=f+104|0;j=f+100|0;k=f+96|0;m=f+92|0;n=f+88|0;o=f+84|0;p=f+80|0;q=f+76|0;r=f+72|0;s=f+68|0;t=f+64|0;u=f+60|0;v=f+56|0;w=f+52|0;x=f+48|0;y=f+44|0;z=f+40|0;A=f+36|0;B=f+32|0;C=f+28|0;D=f+24|0;E=f+20|0;F=f+16|0;G=f+12|0;H=f+8|0;I=f+4|0;J=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;switch(c[i>>2]|0){case 7:{c[E>>2]=c[h>>2];c[F>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0);c[G>>2]=(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[k>>2]|0)+8>>2]|0);c[H>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[I>>2]=(c[(c[j>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+8>>2]|0);c[J>>2]=jy(c[E>>2]|0,c[H>>2]|0,I,c[F>>2]|0,G)|0;F=(c[j>>2]|0)+8|0;c[F>>2]=(c[F>>2]|0)+(c[I>>2]|0);I=(c[k>>2]|0)+8|0;c[I>>2]=(c[I>>2]|0)+(c[G>>2]|0);c[g>>2]=c[J>>2];K=c[g>>2]|0;l=f;return K|0;}case 6:{c[y>>2]=c[h>>2];c[z>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0);c[A>>2]=(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[k>>2]|0)+8>>2]|0);c[B>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[C>>2]=(c[(c[j>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+8>>2]|0);c[D>>2]=iy(c[y>>2]|0,c[B>>2]|0,C,c[z>>2]|0,A)|0;z=(c[j>>2]|0)+8|0;c[z>>2]=(c[z>>2]|0)+(c[C>>2]|0);C=(c[k>>2]|0)+8|0;c[C>>2]=(c[C>>2]|0)+(c[A>>2]|0);c[g>>2]=c[D>>2];K=c[g>>2]|0;l=f;return K|0;}case 5:{c[s>>2]=c[h>>2];c[t>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0);c[u>>2]=(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[k>>2]|0)+8>>2]|0);c[v>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[w>>2]=(c[(c[j>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+8>>2]|0);c[x>>2]=hy(c[s>>2]|0,c[v>>2]|0,w,c[t>>2]|0,u)|0;t=(c[j>>2]|0)+8|0;c[t>>2]=(c[t>>2]|0)+(c[w>>2]|0);w=(c[k>>2]|0)+8|0;c[w>>2]=(c[w>>2]|0)+(c[u>>2]|0);c[g>>2]=c[x>>2];K=c[g>>2]|0;l=f;return K|0;}case 4:{c[m>>2]=c[h>>2];c[n>>2]=(c[c[k>>2]>>2]|0)+(c[(c[k>>2]|0)+8>>2]|0);c[o>>2]=(c[(c[k>>2]|0)+4>>2]|0)-(c[(c[k>>2]|0)+8>>2]|0);c[p>>2]=(c[c[j>>2]>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[q>>2]=(c[(c[j>>2]|0)+4>>2]|0)-(c[(c[j>>2]|0)+8>>2]|0);c[r>>2]=gy(c[m>>2]|0,c[p>>2]|0,q,c[n>>2]|0,o)|0;n=(c[j>>2]|0)+8|0;c[n>>2]=(c[n>>2]|0)+(c[q>>2]|0);q=(c[k>>2]|0)+8|0;c[q>>2]=(c[q>>2]|0)+(c[o>>2]|0);c[g>>2]=c[r>>2];K=c[g>>2]|0;l=f;return K|0;}default:{c[g>>2]=-12;K=c[g>>2]|0;l=f;return K|0;}}return 0;}function Sx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=l;l=l+48|0;h=g+36|0;i=g+32|0;j=g+28|0;k=g+24|0;m=g+20|0;n=g+16|0;o=g+12|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[j>>2]|0)!=(c[k>>2]|0))Zp(c[c[i>>2]>>2]|0,c[j>>2]|0)|0;switch(c[k>>2]|0){case 7:{if((c[j>>2]|0)!=(c[k>>2]|0))s=ay()|0;else s=c[c[i>>2]>>2]|0;c[r>>2]=s;if(!(c[r>>2]|0)){c[h>>2]=-64;t=c[h>>2]|0;l=g;return t|0;}else{by(c[r>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;c[c[i>>2]>>2]=c[r>>2];c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}break;}case 6:{if((c[j>>2]|0)!=(c[k>>2]|0))u=_x()|0;else u=c[c[i>>2]>>2]|0;c[q>>2]=u;if(!(c[q>>2]|0)){c[h>>2]=-64;t=c[h>>2]|0;l=g;return t|0;}else{$x(c[q>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;c[c[i>>2]>>2]=c[q>>2];c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}break;}case 5:{if((c[j>>2]|0)!=(c[k>>2]|0))v=Yx()|0;else v=c[c[i>>2]>>2]|0;c[p>>2]=v;if(!(c[p>>2]|0)){c[h>>2]=-64;t=c[h>>2]|0;l=g;return t|0;}else{Zx(c[p>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;c[c[i>>2]>>2]=c[p>>2];c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}break;}case 4:{if((c[j>>2]|0)!=(c[k>>2]|0))w=Vx()|0;else w=c[c[i>>2]>>2]|0;c[o>>2]=w;if(!(c[o>>2]|0)){c[h>>2]=-64;t=c[h>>2]|0;l=g;return t|0;}else{Wx(c[o>>2]|0)|0;Xx(c[o>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;c[c[i>>2]>>2]=c[o>>2];c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}break;}default:{c[h>>2]=0;t=c[h>>2]|0;l=g;return t|0;}}return 0;}function Tx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[(c[d>>2]|0)+28804>>2]|0)==7|0;}function Ux(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function Vx(){return fy()|0;}function Wx(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=ey(c[d>>2]|0)|0;l=b;return a|0;}function Xx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=dy(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function Yx(){var a=0,b=0,d=0,e=0,f=0,g=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(96)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{f=c[d>>2]|0;g=f+96|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(g|0));f=ns()|0;c[c[d>>2]>>2]=f;c[(c[d>>2]|0)+80>>2]=0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function Zx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+80>>2]=1;c[(c[f>>2]|0)+72>>2]=0;c[(c[f>>2]|0)+68>>2]=0;c[(c[f>>2]|0)+56>>2]=0;c[(c[f>>2]|0)+76>>2]=0;d=Su(c[c[f>>2]>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function _x(){var a=0,b=0,d=0,e=0,f=0,g=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(80)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{f=c[d>>2]|0;g=f+80|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(g|0));f=ps()|0;c[c[d>>2]>>2]=f;c[(c[d>>2]|0)+24>>2]=0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function $x(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+24>>2]=1;c[(c[f>>2]|0)+52>>2]=0;c[(c[f>>2]|0)+48>>2]=0;c[(c[f>>2]|0)+36>>2]=0;c[(c[f>>2]|0)+76>>2]=0;d=Jt(c[c[f>>2]>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function ay(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[2988];c[b+4>>2]=c[2989];c[b+8>>2]=c[2990];d=cy(b)|0;l=a;return d|0;}function by(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+32>>2]=1;c[(c[f>>2]|0)+60>>2]=0;c[(c[f>>2]|0)+56>>2]=0;c[(c[f>>2]|0)+44>>2]=0;c[(c[f>>2]|0)+88>>2]=0;d=ts(c[c[f>>2]>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function cy(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+32|0;d=b+8|0;e=b+4|0;f=b;if((c[a>>2]|0)==0?(c[a+4>>2]|0)==0:0){c[a>>2]=c[2988];c[a+4>>2]=c[2989];c[a+8>>2]=c[2990];}if(c[a>>2]|0?c[a+4>>2]|0:0){c[f>>2]=qc[c[a>>2]&63](c[a+8>>2]|0,104)|0;if(!(c[f>>2]|0)){c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}h=c[f>>2]|0;i=h+104|0;do{c[h>>2]=0;h=h+4|0;}while((h|0)<(i|0));h=(c[f>>2]|0)+92|0;c[h>>2]=c[a>>2];c[h+4>>2]=c[a+4>>2];c[h+8>>2]=c[a+8>>2];c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];a=Gt(d)|0;c[c[f>>2]>>2]=a;a=c[f>>2]|0;if(!(c[c[f>>2]>>2]|0)){bq(a)|0;c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}else{c[a+32>>2]=0;c[e>>2]=c[f>>2];g=c[e>>2]|0;l=b;return g|0;}}c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}function dy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+72>>2]=c[g>>2];c[(c[f>>2]|0)+76>>2]=c[h>>2];l=e;return 0;}function ey(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+80>>2]=1;c[(c[d>>2]|0)+76>>2]=0;c[(c[d>>2]|0)+64>>2]=0;c[(c[d>>2]|0)+60>>2]=0;c[(c[d>>2]|0)+48>>2]=0;c[(c[d>>2]|0)+68>>2]=0;a=kw(c[c[d>>2]>>2]|0)|0;l=b;return a|0;}function fy(){var a=0,b=0,d=0,e=0,f=0,g=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(96)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{f=c[d>>2]|0;g=f+96|0;do{c[f>>2]=0;f=f+4|0;}while((f|0)<(g|0));f=hw()|0;c[c[d>>2]>>2]=f;c[(c[d>>2]|0)+80>>2]=0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function gy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;f=uy(c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;l=g;return f|0;}function Ko(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;i=l;l=l+48|0;j=i+32|0;k=i+28|0;m=i+24|0;n=i+20|0;o=i+16|0;p=i+12|0;q=i+8|0;r=i+4|0;s=i;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;g=c[m>>2]|0;f=c[r>>2]|0;r=c[q>>2]|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[s>>2]=Jo(g,f,j,r,0)|0;if(wj(c[s>>2]|0)|0){c[k>>2]=c[s>>2];t=c[k>>2]|0;l=i;return t|0;}else{c[k>>2]=Bo(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;t=c[k>>2]|0;l=i;return t|0;}return 0;}function Lo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;h=l;l=l+48|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;c[i>>2]=c[2981];c[i+4>>2]=c[2982];c[i+8>>2]=c[2983];p=Ko(g,j,k,m,n,o,i)|0;l=h;return p|0;}function Mo(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[5406];c[b+4>>2]=c[5407];c[b+8>>2]=c[5408];d=No(b)|0;l=a;return d|0;}function No(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];a=nj(d)|0;l=b;return a|0;}function Oo(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=qj(c[d>>2]|0)|0;l=b;return a|0;}function Po(){return 131072;}function Qo(){return(lj(131072)|0)+3+4|0;}function Ro(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=l;l=l+144|0;k=j+40|0;m=j+32|0;n=j+28|0;o=j+24|0;p=j+20|0;q=j+16|0;r=j+12|0;s=j;t=j+8|0;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;f=s;c[f>>2]=h;c[f+4>>2]=i;i=c[n>>2]|0;f=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;r=s;h=c[r>>2]|0;e=c[r+4>>2]|0;r=k;d=g;g=r+104|0;do{c[r>>2]=c[d>>2];r=r+4|0;d=d+4|0;}while((r|0)<(g|0));c[t>>2]=xo(i,f,o,p,q,k,h,e,1)|0;if(wj(c[t>>2]|0)|0){c[m>>2]=c[t>>2];u=c[m>>2]|0;l=j;return u|0;}else{c[(c[n>>2]|0)+600>>2]=0;c[(c[n>>2]|0)+604>>2]=0;t=s;c[(c[n>>2]|0)+608>>2]=(c[(c[n>>2]|0)+232>>2]|0)+((0==(c[t+4>>2]|0)?(c[(c[n>>2]|0)+232>>2]|0)==(c[t>>2]|0):0)&1);c[(c[n>>2]|0)+624>>2]=0;c[(c[n>>2]|0)+620>>2]=0;c[(c[n>>2]|0)+628>>2]=1;c[(c[n>>2]|0)+632>>2]=0;c[m>>2]=0;u=c[m>>2]|0;l=j;return u|0;}return 0;}function So(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;i=l;l=l+192|0;j=i+88|0;k=i+52|0;m=i+80|0;n=i+48|0;o=i+44|0;p=i+40|0;q=i+36|0;r=i;s=i+8|0;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;e=r;c[e>>2]=g;c[e+4>>2]=h;if((c[o>>2]|0)!=0&(c[p>>2]|0)>>>0>=8){if(c[(c[n>>2]|0)+364>>2]|0){c[m>>2]=-64;t=c[m>>2]|0;l=i;return t|0;}rj(c[(c[n>>2]|0)+636>>2]|0)|0;h=c[o>>2]|0;o=c[p>>2]|0;p=f+4|0;e=(c[n>>2]|0)+352|0;c[k>>2]=c[p>>2];c[k+4>>2]=c[p+4>>2];c[k+8>>2]=c[p+8>>2];c[k+12>>2]=c[p+12>>2];c[k+16>>2]=c[p+16>>2];c[k+20>>2]=c[p+20>>2];c[k+24>>2]=c[p+24>>2];c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];e=zj(h,o,0,0,k,j)|0;c[(c[n>>2]|0)+636>>2]=e;c[(c[n>>2]|0)+640>>2]=c[(c[n>>2]|0)+636>>2];if(!(c[(c[n>>2]|0)+636>>2]|0)){c[m>>2]=-64;t=c[m>>2]|0;l=i;return t|0;}}else{if(c[q>>2]|0){e=f+4|0;Io(s,c[q>>2]|0);c[e>>2]=c[s>>2];c[e+4>>2]=c[s+4>>2];c[e+8>>2]=c[s+8>>2];c[e+12>>2]=c[s+12>>2];c[e+16>>2]=c[s+16>>2];c[e+20>>2]=c[s+20>>2];c[e+24>>2]=c[s+24>>2];}rj(c[(c[n>>2]|0)+636>>2]|0)|0;c[(c[n>>2]|0)+636>>2]=0;c[(c[n>>2]|0)+640>>2]=c[q>>2];}q=c[n>>2]|0;s=c[(c[n>>2]|0)+640>>2]|0;n=r;r=c[n>>2]|0;e=c[n+4>>2]|0;n=j;k=f;f=n+104|0;do{c[n>>2]=c[k>>2];n=n+4|0;k=k+4|0;}while((n|0)<(f|0));c[m>>2]=Ro(q,0,0,0,s,j,r,e)|0;t=c[m>>2]|0;l=i;return t|0;}function To(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+272|0;h=g+160|0;i=g+152|0;j=g+148|0;k=g+144|0;m=g;n=g+40|0;o=g+8|0;c[j>>2]=a;c[k>>2]=b;b=m;c[b>>2]=e;c[b+4>>2]=f;if(c[k>>2]|0){f=n;b=(c[j>>2]|0)+12|0;e=f+104|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0;}while((f|0)<(e|0));a=n+4|0;Io(o,c[k>>2]|0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];c[a+16>>2]=c[o+16>>2];c[a+20>>2]=c[o+20>>2];c[a+24>>2]=c[o+24>>2];o=n+32|0;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];d=c[j>>2]|0;j=c[k>>2]|0;k=m;m=c[k>>2]|0;o=c[k+4>>2]|0;f=h;b=n;e=f+104|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0;}while((f|0)<(e|0));c[i>>2]=So(d,0,0,j,h,m,o)|0;p=c[i>>2]|0;l=g;return p|0;}else{c[i>>2]=-32;p=c[i>>2]|0;l=g;return p|0;}return 0;}function Uo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+32|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;c[g>>2]=b;b=c[f>>2]|0;f=c[g>>2]|0;c[e>>2]=c[5409];c[e+4>>2]=c[5410];c[e+8>>2]=c[5411];g=To(b,f,e,-1,-1)|0;l=d;return g|0;}function Vo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+384|0;g=f+280|0;h=f+168|0;i=f+272|0;j=f+160|0;k=f+8|0;m=f;n=f+120|0;o=f+16|0;c[i>>2]=a;c[j>>2]=b;b=k;c[b>>2]=d;c[b+4>>2]=e;e=k;b=(c[e>>2]|0)==0&(c[e+4>>2]|0)==0;e=k;k=b?-1:c[e+4>>2]|0;d=m;c[d>>2]=b?-1:c[e>>2]|0;c[d+4>>2]=k;k=m;Ao(n,c[j>>2]|0,c[k>>2]|0,c[k+4>>2]|0,0);k=h;j=(c[i>>2]|0)+12|0;d=k+104|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0;}while((k|0)<(d|0));k=g;j=n;d=k+40|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0;}while((k|0)<(d|0));zo(o,h,g);h=c[i>>2]|0;i=m;m=c[i>>2]|0;n=c[i+4>>2]|0;k=g;j=o;d=k+104|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0;}while((k|0)<(d|0));j=So(h,0,0,0,g,m,n)|0;l=f;return j|0;}function Wo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Vo(c[e>>2]|0,c[f>>2]|0,-1,-1)|0;l=d;return b|0;}function Xo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=l;l=l+96|0;g=f+88|0;h=f+84|0;i=f+80|0;j=f+76|0;k=f+72|0;m=f+68|0;n=f+64|0;o=f+60|0;p=f+56|0;q=f+52|0;r=f+48|0;s=f+44|0;t=f+40|0;u=f+36|0;v=f+32|0;w=f+28|0;x=f+24|0;y=f+20|0;z=f+16|0;A=f+12|0;B=f+8|0;C=f+4|0;D=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[c[j>>2]>>2];c[n>>2]=(c[m>>2]|0)+(c[(c[j>>2]|0)+4>>2]|0);c[o>>2]=(c[m>>2]|0)+(c[(c[j>>2]|0)+8>>2]|0);c[p>>2]=c[c[i>>2]>>2];c[q>>2]=(c[p>>2]|0)+(c[(c[i>>2]|0)+4>>2]|0);c[r>>2]=(c[p>>2]|0)+(c[(c[i>>2]|0)+8>>2]|0);c[s>>2]=1;a:while(1){if(!(c[s>>2]|0)){E=39;break;}b:do{switch(c[(c[h>>2]|0)+628>>2]|0){case 0:{E=4;break a;break;}case 1:{if(((c[k>>2]|0)==2?(e=(c[q>>2]|0)-(c[r>>2]|0)|0,e>>>0>=(lj((c[n>>2]|0)-(c[o>>2]|0)|0)|0)>>>0):0)?(c[(c[h>>2]|0)+604>>2]|0)==0:0){c[t>>2]=Bo(c[h>>2]|0,c[r>>2]|0,(c[q>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,(c[n>>2]|0)-(c[o>>2]|0)|0)|0;if(Ph(c[t>>2]|0)|0){E=9;break a;}c[o>>2]=c[n>>2];c[r>>2]=(c[r>>2]|0)+(c[t>>2]|0);c[(c[h>>2]|0)+632>>2]=1;jl(c[h>>2]|0);c[s>>2]=0;break b;}c[u>>2]=(c[(c[h>>2]|0)+608>>2]|0)-(c[(c[h>>2]|0)+604>>2]|0);c[v>>2]=Yo((c[(c[h>>2]|0)+592>>2]|0)+(c[(c[h>>2]|0)+604>>2]|0)|0,c[u>>2]|0,c[o>>2]|0,(c[n>>2]|0)-(c[o>>2]|0)|0)|0;e=(c[h>>2]|0)+604|0;c[e>>2]=(c[e>>2]|0)+(c[v>>2]|0);c[o>>2]=(c[o>>2]|0)+(c[v>>2]|0);if((c[k>>2]|0)==0?(c[(c[h>>2]|0)+604>>2]|0)>>>0<(c[(c[h>>2]|0)+608>>2]|0)>>>0:0){c[s>>2]=0;break b;}if((c[k>>2]|0)==1?(c[(c[h>>2]|0)+604>>2]|0)==(c[(c[h>>2]|0)+600>>2]|0):0){c[s>>2]=0;break b;}c[y>>2]=(c[(c[h>>2]|0)+604>>2]|0)-(c[(c[h>>2]|0)+600>>2]|0);c[z>>2]=(c[q>>2]|0)-(c[r>>2]|0);if((c[k>>2]|0)==2)F=(c[o>>2]|0)==(c[n>>2]|0);else F=0;c[A>>2]=F&1;if((c[z>>2]|0)>>>0>=(lj(c[y>>2]|0)|0)>>>0)c[w>>2]=c[r>>2];else{c[w>>2]=c[(c[h>>2]|0)+612>>2];c[z>>2]=c[(c[h>>2]|0)+616>>2];}e=c[h>>2]|0;d=c[w>>2]|0;b=c[z>>2]|0;a=(c[(c[h>>2]|0)+592>>2]|0)+(c[(c[h>>2]|0)+600>>2]|0)|0;G=c[y>>2]|0;if(c[A>>2]|0)H=Bo(e,d,b,a,G)|0;else H=vn(e,d,b,a,G)|0;c[x>>2]=H;if(Ph(c[x>>2]|0)|0){E=26;break a;}c[(c[h>>2]|0)+632>>2]=c[A>>2];c[(c[h>>2]|0)+608>>2]=(c[(c[h>>2]|0)+604>>2]|0)+(c[(c[h>>2]|0)+232>>2]|0);if((c[(c[h>>2]|0)+608>>2]|0)>>>0>(c[(c[h>>2]|0)+596>>2]|0)>>>0){c[(c[h>>2]|0)+604>>2]=0;c[(c[h>>2]|0)+608>>2]=c[(c[h>>2]|0)+232>>2];}c[(c[h>>2]|0)+600>>2]=c[(c[h>>2]|0)+604>>2];G=c[x>>2]|0;if((c[w>>2]|0)!=(c[r>>2]|0)){c[(c[h>>2]|0)+620>>2]=G;c[(c[h>>2]|0)+624>>2]=0;c[(c[h>>2]|0)+628>>2]=2;E=33;break b;}c[r>>2]=(c[r>>2]|0)+G;if(c[(c[h>>2]|0)+632>>2]|0){c[s>>2]=0;jl(c[h>>2]|0);}break;}case 2:{E=33;break;}default:{}}}while(0);do{if((E|0)==33){E=0;c[B>>2]=(c[(c[h>>2]|0)+620>>2]|0)-(c[(c[h>>2]|0)+624>>2]|0);c[C>>2]=Yo(c[r>>2]|0,(c[q>>2]|0)-(c[r>>2]|0)|0,(c[(c[h>>2]|0)+612>>2]|0)+(c[(c[h>>2]|0)+624>>2]|0)|0,c[B>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[C>>2]|0);G=(c[h>>2]|0)+624|0;c[G>>2]=(c[G>>2]|0)+(c[C>>2]|0);if((c[B>>2]|0)!=(c[C>>2]|0)){c[s>>2]=0;break;}c[(c[h>>2]|0)+624>>2]=0;c[(c[h>>2]|0)+620>>2]=0;if(c[(c[h>>2]|0)+632>>2]|0){c[s>>2]=0;jl(c[h>>2]|0);break;}else{c[(c[h>>2]|0)+628>>2]=1;break;}}}while(0);}if((E|0)==4){c[g>>2]=-62;I=c[g>>2]|0;l=f;return I|0;}else if((E|0)==9){c[g>>2]=c[t>>2];I=c[g>>2]|0;l=f;return I|0;}else if((E|0)==26){c[g>>2]=c[x>>2];I=c[g>>2]|0;l=f;return I|0;}else if((E|0)==39){c[(c[j>>2]|0)+8>>2]=(c[o>>2]|0)-(c[m>>2]|0);c[(c[i>>2]|0)+8>>2]=(c[r>>2]|0)-(c[p>>2]|0);if(c[(c[h>>2]|0)+632>>2]|0){c[g>>2]=0;I=c[g>>2]|0;l=f;return I|0;}c[D>>2]=(c[(c[h>>2]|0)+608>>2]|0)-(c[(c[h>>2]|0)+604>>2]|0);if(!(c[D>>2]|0))c[D>>2]=c[(c[h>>2]|0)+232>>2];c[g>>2]=c[D>>2];I=c[g>>2]|0;l=f;return I|0;}return 0;}function Yo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;if(!(c[k>>2]|0)){m=c[k>>2]|0;l=f;return m|0;}mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;m=c[k>>2]|0;l=f;return m|0;}function Zo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[(c[h>>2]|0)+8>>2]|0)>>>0>(c[(c[h>>2]|0)+4>>2]|0)>>>0){c[f>>2]=-1;j=c[f>>2]|0;l=e;return j|0;}if((c[(c[i>>2]|0)+8>>2]|0)>>>0>(c[(c[i>>2]|0)+4>>2]|0)>>>0){c[f>>2]=-1;j=c[f>>2]|0;l=e;return j|0;}else{c[f>>2]=Xo(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0,0)|0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function _o(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;d=l;l=l+48|0;e=d+36|0;f=d+32|0;g=d+28|0;h=d+16|0;i=d+12|0;j=d+8|0;k=d+4|0;m=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;if((c[(c[g>>2]|0)+8>>2]|0)>>>0>(c[(c[g>>2]|0)+4>>2]|0)>>>0){c[e>>2]=-1;n=c[e>>2]|0;l=d;return n|0;}c[i>>2]=Xo(c[f>>2]|0,c[g>>2]|0,h,2)|0;if(wj(c[i>>2]|0)|0){c[e>>2]=c[i>>2];n=c[e>>2]|0;l=d;return n|0;}c[j>>2]=c[(c[f>>2]|0)+632>>2]|0?0:3;if(c[(c[f>>2]|0)+632>>2]|0)o=0;else o=c[(c[f>>2]|0)+116+32+4>>2]<<2;c[k>>2]=o;c[m>>2]=(c[(c[f>>2]|0)+620>>2]|0)-(c[(c[f>>2]|0)+624>>2]|0)+(c[j>>2]|0)+(c[k>>2]|0);c[e>>2]=c[m>>2];n=c[e>>2]|0;l=d;return n|0;}function $o(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;i=l;l=l+96|0;j=i+80|0;k=i+76|0;m=i+72|0;n=i+68|0;o=i+64|0;p=i+60|0;q=i+56|0;r=i+52|0;s=i+48|0;t=i+44|0;u=i+40|0;v=i+36|0;w=i+32|0;x=i+28|0;y=i+88|0;z=i+24|0;A=i+20|0;B=i+16|0;C=i+12|0;D=i+8|0;E=i+4|0;F=i;G=i+84|0;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=0;c[r>>2]=0;c[t>>2]=(c[k>>2]|0)+4;c[u>>2]=c[t>>2];c[x>>2]=0;c[v>>2]=(c[o>>2]|0)+(c[x>>2]<<2);c[x>>2]=(c[x>>2]|0)+16;c[w>>2]=(c[o>>2]|0)+(c[x>>2]<<2);c[x>>2]=(c[x>>2]|0)+64;if(c[x>>2]<<2>>>0>(c[p>>2]|0)>>>0){c[j>>2]=-44;H=c[j>>2]|0;l=i;return H|0;}c[s>>2]=fh(c[w>>2]|0,256,c[v>>2]|0,r,q,c[m>>2]|0,c[n>>2]|0)|0;if(ap(c[s>>2]|0)|0){c[j>>2]=c[s>>2];H=c[j>>2]|0;l=i;return H|0;}bp(y,c[k>>2]|0);if((c[q>>2]|0)>>>0>((d[y>>0]|0)+1|0)>>>0){c[j>>2]=-44;H=c[j>>2]|0;l=i;return H|0;}a[y+1>>0]=0;a[y+2>>0]=c[q>>2];n=c[k>>2]|0;a[n>>0]=a[y>>0]|0;a[n+1>>0]=a[y+1>>0]|0;a[n+2>>0]=a[y+2>>0]|0;a[n+3>>0]=a[y+3>>0]|0;c[A>>2]=0;c[z>>2]=1;while(1){if((c[z>>2]|0)>>>0>=((c[q>>2]|0)+1|0)>>>0)break;c[B>>2]=c[A>>2];c[A>>2]=(c[A>>2]|0)+(c[(c[v>>2]|0)+(c[z>>2]<<2)>>2]<<(c[z>>2]|0)-1);c[(c[v>>2]|0)+(c[z>>2]<<2)>>2]=c[B>>2];c[z>>2]=(c[z>>2]|0)+1;}c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;c[D>>2]=d[(c[w>>2]|0)+(c[C>>2]|0)>>0];c[E>>2]=1<<c[D>>2]>>1;a[G>>0]=c[C>>2];a[G+1>>0]=(c[q>>2]|0)+1-(c[D>>2]|0);c[F>>2]=c[(c[v>>2]|0)+(c[D>>2]<<2)>>2];while(1){if((c[F>>2]|0)>>>0>=((c[(c[v>>2]|0)+(c[D>>2]<<2)>>2]|0)+(c[E>>2]|0)|0)>>>0)break;z=(c[u>>2]|0)+(c[F>>2]<<1)|0;a[z>>0]=a[G>>0]|0;a[z+1>>0]=a[G+1>>0]|0;c[F>>2]=(c[F>>2]|0)+1;}z=(c[v>>2]|0)+(c[D>>2]<<2)|0;c[z>>2]=(c[z>>2]|0)+(c[E>>2]|0);c[C>>2]=(c[C>>2]|0)+1;}c[j>>2]=c[s>>2];H=c[j>>2]|0;l=i;return H|0;}function ap(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function bp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;a[g+2>>0]=a[d+2>>0]|0;a[g+3>>0]=a[d+3>>0]|0;a[b>>0]=a[g>>0]|0;a[b+1>>0]=a[g+1>>0]|0;a[b+2>>0]=a[g+2>>0]|0;a[b+3>>0]=a[g+3>>0]|0;l=e;return;}function cp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=dp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=ep(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function dp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;i=l;l=l+224|0;j=i+204|0;k=i+200|0;m=i+196|0;n=i+192|0;o=i+217|0;p=i+188|0;q=i+184|0;r=i+180|0;s=i+176|0;t=i+216|0;u=i+172|0;v=i+168|0;w=i+164|0;x=i+160|0;y=i+215|0;z=i+156|0;A=i+152|0;B=i+148|0;C=i+144|0;D=i+214|0;E=i+140|0;F=i+136|0;G=i+132|0;H=i+128|0;I=i+213|0;J=i+124|0;K=i+120|0;L=i+116|0;M=i+112|0;N=i+212|0;O=i+108|0;P=i+104|0;Q=i+100|0;R=i+96|0;S=i+92|0;T=i+84|0;U=i+80|0;V=i+76|0;W=i+72|0;X=i+68|0;Y=i+64|0;Z=i+60|0;_=i+56|0;$=i+52|0;aa=i+48|0;ba=i+28|0;ca=i+208|0;da=i+24|0;ea=i+20|0;fa=i+16|0;ga=i+12|0;ha=i+8|0;ia=i+4|0;ja=i;c[fa>>2]=b;c[ga>>2]=e;c[ha>>2]=f;c[ia>>2]=g;c[ja>>2]=h;h=c[ga>>2]|0;ga=c[ha>>2]|0;ha=c[ia>>2]|0;ia=c[ja>>2]|0;c[U>>2]=c[fa>>2];c[V>>2]=h;c[W>>2]=ga;c[X>>2]=ha;c[Y>>2]=ia;c[Z>>2]=c[U>>2];c[_>>2]=(c[Z>>2]|0)+(c[V>>2]|0);c[$>>2]=(c[Y>>2]|0)+4;c[aa>>2]=c[$>>2];bp(ca,c[Y>>2]|0);c[da>>2]=d[ca+2>>0];c[ea>>2]=fp(ba,c[W>>2]|0,c[X>>2]|0)|0;if(ap(c[ea>>2]|0)|0){c[T>>2]=c[ea>>2];ka=c[T>>2]|0;l=i;return ka|0;}ea=c[_>>2]|0;_=c[aa>>2]|0;aa=c[da>>2]|0;c[O>>2]=c[Z>>2];c[P>>2]=ba;c[Q>>2]=ea;c[R>>2]=_;c[S>>2]=aa;c[i+88>>2]=c[O>>2];while(1){aa=(gp(c[P>>2]|0)|0)==0&1;if(!(aa&(c[O>>2]|0)>>>0<((c[Q>>2]|0)+-3|0)>>>0))break;if(hp()|0){aa=c[R>>2]|0;_=c[S>>2]|0;c[J>>2]=c[P>>2];c[K>>2]=aa;c[L>>2]=_;c[M>>2]=ip(c[J>>2]|0,c[L>>2]|0)|0;a[N>>0]=a[(c[K>>2]|0)+(c[M>>2]<<1)>>0]|0;jp(c[J>>2]|0,d[(c[K>>2]|0)+(c[M>>2]<<1)+1>>0]|0);_=a[N>>0]|0;aa=c[O>>2]|0;c[O>>2]=aa+1;a[aa>>0]=_;}hp()|0;_=c[R>>2]|0;aa=c[S>>2]|0;c[E>>2]=c[P>>2];c[F>>2]=_;c[G>>2]=aa;c[H>>2]=ip(c[E>>2]|0,c[G>>2]|0)|0;a[I>>0]=a[(c[F>>2]|0)+(c[H>>2]<<1)>>0]|0;jp(c[E>>2]|0,d[(c[F>>2]|0)+(c[H>>2]<<1)+1>>0]|0);aa=a[I>>0]|0;_=c[O>>2]|0;c[O>>2]=_+1;a[_>>0]=aa;if(hp()|0){aa=c[R>>2]|0;_=c[S>>2]|0;c[z>>2]=c[P>>2];c[A>>2]=aa;c[B>>2]=_;c[C>>2]=ip(c[z>>2]|0,c[B>>2]|0)|0;a[D>>0]=a[(c[A>>2]|0)+(c[C>>2]<<1)>>0]|0;jp(c[z>>2]|0,d[(c[A>>2]|0)+(c[C>>2]<<1)+1>>0]|0);_=a[D>>0]|0;aa=c[O>>2]|0;c[O>>2]=aa+1;a[aa>>0]=_;}_=c[R>>2]|0;aa=c[S>>2]|0;c[u>>2]=c[P>>2];c[v>>2]=_;c[w>>2]=aa;c[x>>2]=ip(c[u>>2]|0,c[w>>2]|0)|0;a[y>>0]=a[(c[v>>2]|0)+(c[x>>2]<<1)>>0]|0;jp(c[u>>2]|0,d[(c[v>>2]|0)+(c[x>>2]<<1)+1>>0]|0);aa=a[y>>0]|0;_=c[O>>2]|0;c[O>>2]=_+1;a[_>>0]=aa;}a:do{if(kp()|0)while(1){y=(gp(c[P>>2]|0)|0)==0&1;if(!(y&(c[O>>2]|0)>>>0<(c[Q>>2]|0)>>>0))break a;y=c[R>>2]|0;x=c[S>>2]|0;c[p>>2]=c[P>>2];c[q>>2]=y;c[r>>2]=x;c[s>>2]=ip(c[p>>2]|0,c[r>>2]|0)|0;a[t>>0]=a[(c[q>>2]|0)+(c[s>>2]<<1)>>0]|0;jp(c[p>>2]|0,d[(c[q>>2]|0)+(c[s>>2]<<1)+1>>0]|0);x=a[t>>0]|0;y=c[O>>2]|0;c[O>>2]=y+1;a[y>>0]=x;}}while(0);while(1){if((c[O>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break;t=c[R>>2]|0;s=c[S>>2]|0;c[j>>2]=c[P>>2];c[k>>2]=t;c[m>>2]=s;c[n>>2]=ip(c[j>>2]|0,c[m>>2]|0)|0;a[o>>0]=a[(c[k>>2]|0)+(c[n>>2]<<1)>>0]|0;jp(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<1)+1>>0]|0);s=a[o>>0]|0;t=c[O>>2]|0;c[O>>2]=t+1;a[t>>0]=s;}if(lp(ba)|0){c[T>>2]=c[V>>2];ka=c[T>>2]|0;l=i;return ka|0;}else{c[T>>2]=-20;ka=c[T>>2]|0;l=i;return ka|0;}return 0;}function ep(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;i=l;l=l+224|0;j=i+204|0;k=i+200|0;m=i+196|0;n=i+192|0;o=i+217|0;p=i+188|0;q=i+184|0;r=i+180|0;s=i+176|0;t=i+216|0;u=i+172|0;v=i+168|0;w=i+164|0;x=i+160|0;y=i+215|0;z=i+156|0;A=i+152|0;B=i+148|0;C=i+144|0;D=i+214|0;E=i+140|0;F=i+136|0;G=i+132|0;H=i+128|0;I=i+213|0;J=i+124|0;K=i+120|0;L=i+116|0;M=i+112|0;N=i+212|0;O=i+108|0;P=i+104|0;Q=i+100|0;R=i+96|0;S=i+92|0;T=i+84|0;U=i+80|0;V=i+76|0;W=i+72|0;X=i+68|0;Y=i+64|0;Z=i+60|0;_=i+56|0;$=i+52|0;aa=i+48|0;ba=i+28|0;ca=i+208|0;da=i+24|0;ea=i+20|0;fa=i+16|0;ga=i+12|0;ha=i+8|0;ia=i+4|0;ja=i;c[fa>>2]=b;c[ga>>2]=e;c[ha>>2]=f;c[ia>>2]=g;c[ja>>2]=h;h=c[ga>>2]|0;ga=c[ha>>2]|0;ha=c[ia>>2]|0;ia=c[ja>>2]|0;c[U>>2]=c[fa>>2];c[V>>2]=h;c[W>>2]=ga;c[X>>2]=ha;c[Y>>2]=ia;c[Z>>2]=c[U>>2];c[_>>2]=(c[Z>>2]|0)+(c[V>>2]|0);c[$>>2]=(c[Y>>2]|0)+4;c[aa>>2]=c[$>>2];bp(ca,c[Y>>2]|0);c[da>>2]=d[ca+2>>0];c[ea>>2]=fp(ba,c[W>>2]|0,c[X>>2]|0)|0;if(ap(c[ea>>2]|0)|0){c[T>>2]=c[ea>>2];ka=c[T>>2]|0;l=i;return ka|0;}ea=c[_>>2]|0;_=c[aa>>2]|0;aa=c[da>>2]|0;c[O>>2]=c[Z>>2];c[P>>2]=ba;c[Q>>2]=ea;c[R>>2]=_;c[S>>2]=aa;c[i+88>>2]=c[O>>2];while(1){aa=(gp(c[P>>2]|0)|0)==0&1;if(!(aa&(c[O>>2]|0)>>>0<((c[Q>>2]|0)+-3|0)>>>0))break;if(hp()|0){aa=c[R>>2]|0;_=c[S>>2]|0;c[J>>2]=c[P>>2];c[K>>2]=aa;c[L>>2]=_;c[M>>2]=ip(c[J>>2]|0,c[L>>2]|0)|0;a[N>>0]=a[(c[K>>2]|0)+(c[M>>2]<<1)>>0]|0;jp(c[J>>2]|0,d[(c[K>>2]|0)+(c[M>>2]<<1)+1>>0]|0);_=a[N>>0]|0;aa=c[O>>2]|0;c[O>>2]=aa+1;a[aa>>0]=_;}hp()|0;_=c[R>>2]|0;aa=c[S>>2]|0;c[E>>2]=c[P>>2];c[F>>2]=_;c[G>>2]=aa;c[H>>2]=ip(c[E>>2]|0,c[G>>2]|0)|0;a[I>>0]=a[(c[F>>2]|0)+(c[H>>2]<<1)>>0]|0;jp(c[E>>2]|0,d[(c[F>>2]|0)+(c[H>>2]<<1)+1>>0]|0);aa=a[I>>0]|0;_=c[O>>2]|0;c[O>>2]=_+1;a[_>>0]=aa;if(hp()|0){aa=c[R>>2]|0;_=c[S>>2]|0;c[z>>2]=c[P>>2];c[A>>2]=aa;c[B>>2]=_;c[C>>2]=ip(c[z>>2]|0,c[B>>2]|0)|0;a[D>>0]=a[(c[A>>2]|0)+(c[C>>2]<<1)>>0]|0;jp(c[z>>2]|0,d[(c[A>>2]|0)+(c[C>>2]<<1)+1>>0]|0);_=a[D>>0]|0;aa=c[O>>2]|0;c[O>>2]=aa+1;a[aa>>0]=_;}_=c[R>>2]|0;aa=c[S>>2]|0;c[u>>2]=c[P>>2];c[v>>2]=_;c[w>>2]=aa;c[x>>2]=ip(c[u>>2]|0,c[w>>2]|0)|0;a[y>>0]=a[(c[v>>2]|0)+(c[x>>2]<<1)>>0]|0;jp(c[u>>2]|0,d[(c[v>>2]|0)+(c[x>>2]<<1)+1>>0]|0);aa=a[y>>0]|0;_=c[O>>2]|0;c[O>>2]=_+1;a[_>>0]=aa;}a:do{if(kp()|0)while(1){y=(gp(c[P>>2]|0)|0)==0&1;if(!(y&(c[O>>2]|0)>>>0<(c[Q>>2]|0)>>>0))break a;y=c[R>>2]|0;x=c[S>>2]|0;c[p>>2]=c[P>>2];c[q>>2]=y;c[r>>2]=x;c[s>>2]=ip(c[p>>2]|0,c[r>>2]|0)|0;a[t>>0]=a[(c[q>>2]|0)+(c[s>>2]<<1)>>0]|0;jp(c[p>>2]|0,d[(c[q>>2]|0)+(c[s>>2]<<1)+1>>0]|0);x=a[t>>0]|0;y=c[O>>2]|0;c[O>>2]=y+1;a[y>>0]=x;}}while(0);while(1){if((c[O>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break;t=c[R>>2]|0;s=c[S>>2]|0;c[j>>2]=c[P>>2];c[k>>2]=t;c[m>>2]=s;c[n>>2]=ip(c[j>>2]|0,c[m>>2]|0)|0;a[o>>0]=a[(c[k>>2]|0)+(c[n>>2]<<1)>>0]|0;jp(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<1)+1>>0]|0);s=a[o>>0]|0;t=c[O>>2]|0;c[O>>2]=t+1;a[t>>0]=s;}if(lp(ba)|0){c[T>>2]=c[V>>2];ka=c[T>>2]|0;l=i;return ka|0;}else{c[T>>2]=-20;ka=c[T>>2]|0;l=i;return ka|0;}return 0;}function fp(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}c[(c[i>>2]|0)+12>>2]=c[j>>2];c[(c[i>>2]|0)+16>>2]=(c[(c[i>>2]|0)+12>>2]|0)+4;do{if((c[k>>2]|0)>>>0>=4){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;f=mp(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=f;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0)p=8-(up(d[m>>0]|0)|0)|0;else p=0;c[(c[i>>2]|0)+4>>2]=p;if(!(d[m>>0]|0)){c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);q=10;break;}case 6:{q=10;break;}case 5:{q=11;break;}case 4:{q=12;break;}case 3:{q=13;break;}case 2:{q=14;break;}default:{}}if((q|0)==10){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);q=11;}if((q|0)==11){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);q=12;}if((q|0)==12){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);q=13;}if((q|0)==13){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);q=14;}if((q|0)==14){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0)r=8-(up(d[n>>0]|0)|0)|0;else r=0;c[(c[i>>2]|0)+4>>2]=r;if(d[n>>0]|0|0){f=(c[i>>2]|0)+4|0;c[f>>2]=(c[f>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-20;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function gp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=mp(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=mp(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function hp(){return 0;}function ip(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function jp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function kp(){return 1;}function lp(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;if((c[(c[d>>2]|0)+8>>2]|0)!=(c[(c[d>>2]|0)+12>>2]|0)){e=0;f=e&1;l=b;return f|0;}e=(c[(c[d>>2]|0)+4>>2]|0)==32;f=e&1;l=b;return f|0;}function mp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(kp()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=np(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=op(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function np(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(pp()|0)!=0;f=sp(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=tp(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function op(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(pp()|0)!=0;f=qp(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=rp(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function pp(){return d[11936]|0|0;}function qp(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function rp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function sp(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function tp(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function up(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function vp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=wp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=xp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function wp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0;i=l;l=l+1024|0;j=i+968|0;k=i+964|0;m=i+960|0;n=i+956|0;o=i+1015|0;p=i+952|0;q=i+948|0;r=i+944|0;s=i+940|0;t=i+1014|0;u=i+936|0;v=i+932|0;w=i+928|0;x=i+924|0;y=i+1013|0;z=i+920|0;A=i+916|0;B=i+912|0;C=i+908|0;D=i+1012|0;E=i+904|0;F=i+900|0;G=i+896|0;H=i+892|0;I=i+1011|0;J=i+888|0;K=i+884|0;L=i+880|0;M=i+876|0;N=i+1010|0;O=i+872|0;P=i+868|0;Q=i+864|0;R=i+860|0;S=i+856|0;T=i+852|0;U=i+848|0;V=i+844|0;W=i+840|0;X=i+836|0;Y=i+1009|0;Z=i+832|0;_=i+828|0;$=i+824|0;aa=i+820|0;ba=i+1008|0;ca=i+816|0;da=i+812|0;ea=i+808|0;fa=i+804|0;ga=i+1007|0;ha=i+800|0;ia=i+796|0;ja=i+792|0;ka=i+788|0;la=i+1006|0;ma=i+784|0;na=i+780|0;oa=i+776|0;pa=i+772|0;qa=i+1005|0;ra=i+768|0;sa=i+764|0;ta=i+760|0;ua=i+756|0;va=i+1004|0;wa=i+752|0;xa=i+748|0;ya=i+744|0;za=i+740|0;Aa=i+736|0;Ba=i+732|0;Ca=i+728|0;Da=i+724|0;Ea=i+720|0;Fa=i+716|0;Ga=i+1003|0;Ha=i+712|0;Ia=i+708|0;Ja=i+704|0;Ka=i+700|0;La=i+1002|0;Ma=i+696|0;Na=i+692|0;Oa=i+688|0;Pa=i+684|0;Qa=i+1001|0;Ra=i+680|0;Sa=i+676|0;Ta=i+672|0;Ua=i+668|0;Va=i+1e3|0;Wa=i+664|0;Xa=i+660|0;Ya=i+656|0;Za=i+652|0;_a=i+999|0;$a=i+648|0;ab=i+644|0;bb=i+640|0;cb=i+636|0;db=i+998|0;eb=i+632|0;fb=i+628|0;gb=i+624|0;hb=i+620|0;ib=i+616|0;jb=i+612|0;kb=i+608|0;lb=i+604|0;mb=i+600|0;nb=i+596|0;ob=i+997|0;pb=i+592|0;qb=i+588|0;rb=i+584|0;sb=i+580|0;tb=i+996|0;ub=i+576|0;vb=i+572|0;wb=i+568|0;xb=i+564|0;yb=i+995|0;zb=i+560|0;Ab=i+556|0;Bb=i+552|0;Cb=i+548|0;Db=i+994|0;Eb=i+544|0;Fb=i+540|0;Gb=i+536|0;Hb=i+532|0;Ib=i+993|0;Jb=i+528|0;Kb=i+524|0;Lb=i+520|0;Mb=i+516|0;Nb=i+992|0;Ob=i+512|0;Pb=i+508|0;Qb=i+504|0;Rb=i+500|0;Sb=i+496|0;Tb=i+492|0;Ub=i+488|0;Vb=i+484|0;Wb=i+480|0;Xb=i+476|0;Yb=i+991|0;Zb=i+472|0;_b=i+468|0;$b=i+464|0;ac=i+460|0;bc=i+990|0;cc=i+456|0;dc=i+452|0;ec=i+448|0;fc=i+444|0;gc=i+989|0;hc=i+440|0;ic=i+436|0;jc=i+432|0;kc=i+428|0;lc=i+988|0;mc=i+424|0;nc=i+420|0;oc=i+416|0;pc=i+412|0;qc=i+987|0;rc=i+408|0;sc=i+404|0;tc=i+400|0;uc=i+396|0;vc=i+986|0;wc=i+392|0;xc=i+388|0;yc=i+384|0;zc=i+380|0;Ac=i+985|0;Bc=i+376|0;Cc=i+372|0;Dc=i+368|0;Ec=i+364|0;Fc=i+984|0;Gc=i+360|0;Hc=i+356|0;Ic=i+352|0;Jc=i+348|0;Kc=i+983|0;Lc=i+344|0;Mc=i+340|0;Nc=i+336|0;Oc=i+332|0;Pc=i+982|0;Qc=i+328|0;Rc=i+324|0;Sc=i+320|0;Tc=i+316|0;Uc=i+981|0;Vc=i+312|0;Wc=i+308|0;Xc=i+304|0;Yc=i+300|0;Zc=i+980|0;_c=i+296|0;$c=i+292|0;ad=i+288|0;bd=i+284|0;cd=i+979|0;dd=i+280|0;ed=i+276|0;fd=i+272|0;gd=i+268|0;hd=i+978|0;id=i+264|0;jd=i+260|0;kd=i+256|0;ld=i+252|0;md=i+977|0;nd=i+248|0;od=i+244|0;pd=i+240|0;qd=i+236|0;rd=i+976|0;sd=i+232|0;td=i+228|0;ud=i+224|0;vd=i+220|0;wd=i+216|0;xd=i+212|0;yd=i+208|0;zd=i+204|0;Ad=i+200|0;Bd=i+196|0;Cd=i+192|0;Dd=i+172|0;Ed=i+152|0;Fd=i+132|0;Gd=i+112|0;Hd=i+108|0;Id=i+104|0;Jd=i+100|0;Kd=i+96|0;Ld=i+92|0;Md=i+88|0;Nd=i+84|0;Od=i+80|0;Pd=i+76|0;Qd=i+72|0;Rd=i+68|0;Sd=i+64|0;Td=i+60|0;Ud=i+56|0;Vd=i+52|0;Wd=i+48|0;Xd=i+44|0;Yd=i+972|0;Zd=i+40|0;_d=i+36|0;$d=i+32|0;ae=i+28|0;be=i+24|0;ce=i+20|0;de=i+16|0;ee=i+12|0;fe=i+8|0;ge=i+4|0;he=i;c[de>>2]=b;c[ee>>2]=e;c[fe>>2]=f;c[ge>>2]=g;c[he>>2]=h;h=c[ee>>2]|0;ee=c[fe>>2]|0;fe=c[ge>>2]|0;ge=c[he>>2]|0;c[td>>2]=c[de>>2];c[ud>>2]=h;c[vd>>2]=ee;c[wd>>2]=fe;c[xd>>2]=ge;if((c[wd>>2]|0)>>>0<10){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}c[yd>>2]=c[vd>>2];c[zd>>2]=c[td>>2];c[Ad>>2]=(c[zd>>2]|0)+(c[ud>>2]|0);c[Bd>>2]=(c[xd>>2]|0)+4;c[Cd>>2]=c[Bd>>2];c[Hd>>2]=(yp(c[yd>>2]|0)|0)&65535;c[Id>>2]=(yp((c[yd>>2]|0)+2|0)|0)&65535;c[Jd>>2]=(yp((c[yd>>2]|0)+4|0)|0)&65535;c[Kd>>2]=(c[wd>>2]|0)-((c[Hd>>2]|0)+(c[Id>>2]|0)+(c[Jd>>2]|0)+6);c[Ld>>2]=(c[yd>>2]|0)+6;c[Md>>2]=(c[Ld>>2]|0)+(c[Hd>>2]|0);c[Nd>>2]=(c[Md>>2]|0)+(c[Id>>2]|0);c[Od>>2]=(c[Nd>>2]|0)+(c[Jd>>2]|0);c[Pd>>2]=(((c[ud>>2]|0)+3|0)>>>0)/4|0;c[Qd>>2]=(c[zd>>2]|0)+(c[Pd>>2]|0);c[Rd>>2]=(c[Qd>>2]|0)+(c[Pd>>2]|0);c[Sd>>2]=(c[Rd>>2]|0)+(c[Pd>>2]|0);c[Td>>2]=c[zd>>2];c[Ud>>2]=c[Qd>>2];c[Vd>>2]=c[Rd>>2];c[Wd>>2]=c[Sd>>2];c[Xd>>2]=0;bp(Yd,c[xd>>2]|0);c[Zd>>2]=d[Yd+2>>0];if((c[Kd>>2]|0)>>>0>(c[wd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}c[_d>>2]=fp(Dd,c[Ld>>2]|0,c[Hd>>2]|0)|0;if(ap(c[_d>>2]|0)|0){c[sd>>2]=c[_d>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[$d>>2]=fp(Ed,c[Md>>2]|0,c[Id>>2]|0)|0;if(ap(c[$d>>2]|0)|0){c[sd>>2]=c[$d>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[ae>>2]=fp(Fd,c[Nd>>2]|0,c[Jd>>2]|0)|0;if(ap(c[ae>>2]|0)|0){c[sd>>2]=c[ae>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[be>>2]=fp(Gd,c[Od>>2]|0,c[Kd>>2]|0)|0;if(ap(c[be>>2]|0)|0){c[sd>>2]=c[be>>2];ie=c[sd>>2]|0;l=i;return ie|0;}be=gp(Dd)|0;Kd=be|(gp(Ed)|0);be=Kd|(gp(Fd)|0);c[Xd>>2]=be|(gp(Gd)|0);while(1){if(c[Xd>>2]|0)break;if((c[Wd>>2]|0)>>>0>=((c[Ad>>2]|0)+-3|0)>>>0)break;if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[nd>>2]=Dd;c[od>>2]=be;c[pd>>2]=Kd;c[qd>>2]=ip(c[nd>>2]|0,c[pd>>2]|0)|0;a[rd>>0]=a[(c[od>>2]|0)+(c[qd>>2]<<1)>>0]|0;jp(c[nd>>2]|0,d[(c[od>>2]|0)+(c[qd>>2]<<1)+1>>0]|0);Kd=a[rd>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[id>>2]=Ed;c[jd>>2]=Kd;c[kd>>2]=be;c[ld>>2]=ip(c[id>>2]|0,c[kd>>2]|0)|0;a[md>>0]=a[(c[jd>>2]|0)+(c[ld>>2]<<1)>>0]|0;jp(c[id>>2]|0,d[(c[jd>>2]|0)+(c[ld>>2]<<1)+1>>0]|0);be=a[md>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;}if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[dd>>2]=Fd;c[ed>>2]=be;c[fd>>2]=Kd;c[gd>>2]=ip(c[dd>>2]|0,c[fd>>2]|0)|0;a[hd>>0]=a[(c[ed>>2]|0)+(c[gd>>2]<<1)>>0]|0;jp(c[dd>>2]|0,d[(c[ed>>2]|0)+(c[gd>>2]<<1)+1>>0]|0);Kd=a[hd>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[_c>>2]=Gd;c[$c>>2]=Kd;c[ad>>2]=be;c[bd>>2]=ip(c[_c>>2]|0,c[ad>>2]|0)|0;a[cd>>0]=a[(c[$c>>2]|0)+(c[bd>>2]<<1)>>0]|0;jp(c[_c>>2]|0,d[(c[$c>>2]|0)+(c[bd>>2]<<1)+1>>0]|0);be=a[cd>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;}hp()|0;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Vc>>2]=Dd;c[Wc>>2]=be;c[Xc>>2]=Kd;c[Yc>>2]=ip(c[Vc>>2]|0,c[Xc>>2]|0)|0;a[Zc>>0]=a[(c[Wc>>2]|0)+(c[Yc>>2]<<1)>>0]|0;jp(c[Vc>>2]|0,d[(c[Wc>>2]|0)+(c[Yc>>2]<<1)+1>>0]|0);Kd=a[Zc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;hp()|0;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Qc>>2]=Ed;c[Rc>>2]=Kd;c[Sc>>2]=be;c[Tc>>2]=ip(c[Qc>>2]|0,c[Sc>>2]|0)|0;a[Uc>>0]=a[(c[Rc>>2]|0)+(c[Tc>>2]<<1)>>0]|0;jp(c[Qc>>2]|0,d[(c[Rc>>2]|0)+(c[Tc>>2]<<1)+1>>0]|0);be=a[Uc>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;hp()|0;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Lc>>2]=Fd;c[Mc>>2]=be;c[Nc>>2]=Kd;c[Oc>>2]=ip(c[Lc>>2]|0,c[Nc>>2]|0)|0;a[Pc>>0]=a[(c[Mc>>2]|0)+(c[Oc>>2]<<1)>>0]|0;jp(c[Lc>>2]|0,d[(c[Mc>>2]|0)+(c[Oc>>2]<<1)+1>>0]|0);Kd=a[Pc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;hp()|0;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Gc>>2]=Gd;c[Hc>>2]=Kd;c[Ic>>2]=be;c[Jc>>2]=ip(c[Gc>>2]|0,c[Ic>>2]|0)|0;a[Kc>>0]=a[(c[Hc>>2]|0)+(c[Jc>>2]<<1)>>0]|0;jp(c[Gc>>2]|0,d[(c[Hc>>2]|0)+(c[Jc>>2]<<1)+1>>0]|0);be=a[Kc>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Bc>>2]=Dd;c[Cc>>2]=be;c[Dc>>2]=Kd;c[Ec>>2]=ip(c[Bc>>2]|0,c[Dc>>2]|0)|0;a[Fc>>0]=a[(c[Cc>>2]|0)+(c[Ec>>2]<<1)>>0]|0;jp(c[Bc>>2]|0,d[(c[Cc>>2]|0)+(c[Ec>>2]<<1)+1>>0]|0);Kd=a[Fc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[wc>>2]=Ed;c[xc>>2]=Kd;c[yc>>2]=be;c[zc>>2]=ip(c[wc>>2]|0,c[yc>>2]|0)|0;a[Ac>>0]=a[(c[xc>>2]|0)+(c[zc>>2]<<1)>>0]|0;jp(c[wc>>2]|0,d[(c[xc>>2]|0)+(c[zc>>2]<<1)+1>>0]|0);be=a[Ac>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;}if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[rc>>2]=Fd;c[sc>>2]=be;c[tc>>2]=Kd;c[uc>>2]=ip(c[rc>>2]|0,c[tc>>2]|0)|0;a[vc>>0]=a[(c[sc>>2]|0)+(c[uc>>2]<<1)>>0]|0;jp(c[rc>>2]|0,d[(c[sc>>2]|0)+(c[uc>>2]<<1)+1>>0]|0);Kd=a[vc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[mc>>2]=Gd;c[nc>>2]=Kd;c[oc>>2]=be;c[pc>>2]=ip(c[mc>>2]|0,c[oc>>2]|0)|0;a[qc>>0]=a[(c[nc>>2]|0)+(c[pc>>2]<<1)>>0]|0;jp(c[mc>>2]|0,d[(c[nc>>2]|0)+(c[pc>>2]<<1)+1>>0]|0);be=a[qc>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;}be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[hc>>2]=Dd;c[ic>>2]=be;c[jc>>2]=Kd;c[kc>>2]=ip(c[hc>>2]|0,c[jc>>2]|0)|0;a[lc>>0]=a[(c[ic>>2]|0)+(c[kc>>2]<<1)>>0]|0;jp(c[hc>>2]|0,d[(c[ic>>2]|0)+(c[kc>>2]<<1)+1>>0]|0);Kd=a[lc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[cc>>2]=Ed;c[dc>>2]=Kd;c[ec>>2]=be;c[fc>>2]=ip(c[cc>>2]|0,c[ec>>2]|0)|0;a[gc>>0]=a[(c[dc>>2]|0)+(c[fc>>2]<<1)>>0]|0;jp(c[cc>>2]|0,d[(c[dc>>2]|0)+(c[fc>>2]<<1)+1>>0]|0);be=a[gc>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Zb>>2]=Fd;c[_b>>2]=be;c[$b>>2]=Kd;c[ac>>2]=ip(c[Zb>>2]|0,c[$b>>2]|0)|0;a[bc>>0]=a[(c[_b>>2]|0)+(c[ac>>2]<<1)>>0]|0;jp(c[Zb>>2]|0,d[(c[_b>>2]|0)+(c[ac>>2]<<1)+1>>0]|0);Kd=a[bc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Ub>>2]=Gd;c[Vb>>2]=Kd;c[Wb>>2]=be;c[Xb>>2]=ip(c[Ub>>2]|0,c[Wb>>2]|0)|0;a[Yb>>0]=a[(c[Vb>>2]|0)+(c[Xb>>2]<<1)>>0]|0;jp(c[Ub>>2]|0,d[(c[Vb>>2]|0)+(c[Xb>>2]<<1)+1>>0]|0);be=a[Yb>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;gp(Dd)|0;gp(Ed)|0;gp(Fd)|0;gp(Gd)|0;}if((c[Td>>2]|0)>>>0>(c[Qd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}if((c[Ud>>2]|0)>>>0>(c[Rd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}if((c[Vd>>2]|0)>>>0>(c[Sd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}Yb=c[Qd>>2]|0;Qd=c[Cd>>2]|0;Xb=c[Zd>>2]|0;c[Ob>>2]=c[Td>>2];c[Pb>>2]=Dd;c[Qb>>2]=Yb;c[Rb>>2]=Qd;c[Sb>>2]=Xb;c[Tb>>2]=c[Ob>>2];while(1){Tb=(gp(c[Pb>>2]|0)|0)==0&1;if(!(Tb&(c[Ob>>2]|0)>>>0<((c[Qb>>2]|0)+-3|0)>>>0))break;if(hp()|0){Tb=c[Rb>>2]|0;Xb=c[Sb>>2]|0;c[Jb>>2]=c[Pb>>2];c[Kb>>2]=Tb;c[Lb>>2]=Xb;c[Mb>>2]=ip(c[Jb>>2]|0,c[Lb>>2]|0)|0;a[Nb>>0]=a[(c[Kb>>2]|0)+(c[Mb>>2]<<1)>>0]|0;jp(c[Jb>>2]|0,d[(c[Kb>>2]|0)+(c[Mb>>2]<<1)+1>>0]|0);Xb=a[Nb>>0]|0;Tb=c[Ob>>2]|0;c[Ob>>2]=Tb+1;a[Tb>>0]=Xb;}hp()|0;Xb=c[Rb>>2]|0;Tb=c[Sb>>2]|0;c[Eb>>2]=c[Pb>>2];c[Fb>>2]=Xb;c[Gb>>2]=Tb;c[Hb>>2]=ip(c[Eb>>2]|0,c[Gb>>2]|0)|0;a[Ib>>0]=a[(c[Fb>>2]|0)+(c[Hb>>2]<<1)>>0]|0;jp(c[Eb>>2]|0,d[(c[Fb>>2]|0)+(c[Hb>>2]<<1)+1>>0]|0);Tb=a[Ib>>0]|0;Xb=c[Ob>>2]|0;c[Ob>>2]=Xb+1;a[Xb>>0]=Tb;if(hp()|0){Tb=c[Rb>>2]|0;Xb=c[Sb>>2]|0;c[zb>>2]=c[Pb>>2];c[Ab>>2]=Tb;c[Bb>>2]=Xb;c[Cb>>2]=ip(c[zb>>2]|0,c[Bb>>2]|0)|0;a[Db>>0]=a[(c[Ab>>2]|0)+(c[Cb>>2]<<1)>>0]|0;jp(c[zb>>2]|0,d[(c[Ab>>2]|0)+(c[Cb>>2]<<1)+1>>0]|0);Xb=a[Db>>0]|0;Tb=c[Ob>>2]|0;c[Ob>>2]=Tb+1;a[Tb>>0]=Xb;}Xb=c[Rb>>2]|0;Tb=c[Sb>>2]|0;c[ub>>2]=c[Pb>>2];c[vb>>2]=Xb;c[wb>>2]=Tb;c[xb>>2]=ip(c[ub>>2]|0,c[wb>>2]|0)|0;a[yb>>0]=a[(c[vb>>2]|0)+(c[xb>>2]<<1)>>0]|0;jp(c[ub>>2]|0,d[(c[vb>>2]|0)+(c[xb>>2]<<1)+1>>0]|0);Tb=a[yb>>0]|0;Xb=c[Ob>>2]|0;c[Ob>>2]=Xb+1;a[Xb>>0]=Tb;}a:do{if(kp()|0)while(1){yb=(gp(c[Pb>>2]|0)|0)==0&1;if(!(yb&(c[Ob>>2]|0)>>>0<(c[Qb>>2]|0)>>>0))break a;yb=c[Rb>>2]|0;xb=c[Sb>>2]|0;c[pb>>2]=c[Pb>>2];c[qb>>2]=yb;c[rb>>2]=xb;c[sb>>2]=ip(c[pb>>2]|0,c[rb>>2]|0)|0;a[tb>>0]=a[(c[qb>>2]|0)+(c[sb>>2]<<1)>>0]|0;jp(c[pb>>2]|0,d[(c[qb>>2]|0)+(c[sb>>2]<<1)+1>>0]|0);xb=a[tb>>0]|0;yb=c[Ob>>2]|0;c[Ob>>2]=yb+1;a[yb>>0]=xb;}}while(0);while(1){if((c[Ob>>2]|0)>>>0>=(c[Qb>>2]|0)>>>0)break;tb=c[Rb>>2]|0;sb=c[Sb>>2]|0;c[kb>>2]=c[Pb>>2];c[lb>>2]=tb;c[mb>>2]=sb;c[nb>>2]=ip(c[kb>>2]|0,c[mb>>2]|0)|0;a[ob>>0]=a[(c[lb>>2]|0)+(c[nb>>2]<<1)>>0]|0;jp(c[kb>>2]|0,d[(c[lb>>2]|0)+(c[nb>>2]<<1)+1>>0]|0);sb=a[ob>>0]|0;tb=c[Ob>>2]|0;c[Ob>>2]=tb+1;a[tb>>0]=sb;}Ob=c[Rd>>2]|0;Rd=c[Cd>>2]|0;ob=c[Zd>>2]|0;c[eb>>2]=c[Ud>>2];c[fb>>2]=Ed;c[gb>>2]=Ob;c[hb>>2]=Rd;c[ib>>2]=ob;c[jb>>2]=c[eb>>2];while(1){jb=(gp(c[fb>>2]|0)|0)==0&1;if(!(jb&(c[eb>>2]|0)>>>0<((c[gb>>2]|0)+-3|0)>>>0))break;if(hp()|0){jb=c[hb>>2]|0;ob=c[ib>>2]|0;c[$a>>2]=c[fb>>2];c[ab>>2]=jb;c[bb>>2]=ob;c[cb>>2]=ip(c[$a>>2]|0,c[bb>>2]|0)|0;a[db>>0]=a[(c[ab>>2]|0)+(c[cb>>2]<<1)>>0]|0;jp(c[$a>>2]|0,d[(c[ab>>2]|0)+(c[cb>>2]<<1)+1>>0]|0);ob=a[db>>0]|0;jb=c[eb>>2]|0;c[eb>>2]=jb+1;a[jb>>0]=ob;}hp()|0;ob=c[hb>>2]|0;jb=c[ib>>2]|0;c[Wa>>2]=c[fb>>2];c[Xa>>2]=ob;c[Ya>>2]=jb;c[Za>>2]=ip(c[Wa>>2]|0,c[Ya>>2]|0)|0;a[_a>>0]=a[(c[Xa>>2]|0)+(c[Za>>2]<<1)>>0]|0;jp(c[Wa>>2]|0,d[(c[Xa>>2]|0)+(c[Za>>2]<<1)+1>>0]|0);jb=a[_a>>0]|0;ob=c[eb>>2]|0;c[eb>>2]=ob+1;a[ob>>0]=jb;if(hp()|0){jb=c[hb>>2]|0;ob=c[ib>>2]|0;c[Ra>>2]=c[fb>>2];c[Sa>>2]=jb;c[Ta>>2]=ob;c[Ua>>2]=ip(c[Ra>>2]|0,c[Ta>>2]|0)|0;a[Va>>0]=a[(c[Sa>>2]|0)+(c[Ua>>2]<<1)>>0]|0;jp(c[Ra>>2]|0,d[(c[Sa>>2]|0)+(c[Ua>>2]<<1)+1>>0]|0);ob=a[Va>>0]|0;jb=c[eb>>2]|0;c[eb>>2]=jb+1;a[jb>>0]=ob;}ob=c[hb>>2]|0;jb=c[ib>>2]|0;c[Ma>>2]=c[fb>>2];c[Na>>2]=ob;c[Oa>>2]=jb;c[Pa>>2]=ip(c[Ma>>2]|0,c[Oa>>2]|0)|0;a[Qa>>0]=a[(c[Na>>2]|0)+(c[Pa>>2]<<1)>>0]|0;jp(c[Ma>>2]|0,d[(c[Na>>2]|0)+(c[Pa>>2]<<1)+1>>0]|0);jb=a[Qa>>0]|0;ob=c[eb>>2]|0;c[eb>>2]=ob+1;a[ob>>0]=jb;}b:do{if(kp()|0)while(1){Qa=(gp(c[fb>>2]|0)|0)==0&1;if(!(Qa&(c[eb>>2]|0)>>>0<(c[gb>>2]|0)>>>0))break b;Qa=c[hb>>2]|0;Pa=c[ib>>2]|0;c[Ha>>2]=c[fb>>2];c[Ia>>2]=Qa;c[Ja>>2]=Pa;c[Ka>>2]=ip(c[Ha>>2]|0,c[Ja>>2]|0)|0;a[La>>0]=a[(c[Ia>>2]|0)+(c[Ka>>2]<<1)>>0]|0;jp(c[Ha>>2]|0,d[(c[Ia>>2]|0)+(c[Ka>>2]<<1)+1>>0]|0);Pa=a[La>>0]|0;Qa=c[eb>>2]|0;c[eb>>2]=Qa+1;a[Qa>>0]=Pa;}}while(0);while(1){if((c[eb>>2]|0)>>>0>=(c[gb>>2]|0)>>>0)break;La=c[hb>>2]|0;Ka=c[ib>>2]|0;c[Ca>>2]=c[fb>>2];c[Da>>2]=La;c[Ea>>2]=Ka;c[Fa>>2]=ip(c[Ca>>2]|0,c[Ea>>2]|0)|0;a[Ga>>0]=a[(c[Da>>2]|0)+(c[Fa>>2]<<1)>>0]|0;jp(c[Ca>>2]|0,d[(c[Da>>2]|0)+(c[Fa>>2]<<1)+1>>0]|0);Ka=a[Ga>>0]|0;La=c[eb>>2]|0;c[eb>>2]=La+1;a[La>>0]=Ka;}eb=c[Sd>>2]|0;Sd=c[Cd>>2]|0;Ga=c[Zd>>2]|0;c[wa>>2]=c[Vd>>2];c[xa>>2]=Fd;c[ya>>2]=eb;c[za>>2]=Sd;c[Aa>>2]=Ga;c[Ba>>2]=c[wa>>2];while(1){Ba=(gp(c[xa>>2]|0)|0)==0&1;if(!(Ba&(c[wa>>2]|0)>>>0<((c[ya>>2]|0)+-3|0)>>>0))break;if(hp()|0){Ba=c[za>>2]|0;Ga=c[Aa>>2]|0;c[ra>>2]=c[xa>>2];c[sa>>2]=Ba;c[ta>>2]=Ga;c[ua>>2]=ip(c[ra>>2]|0,c[ta>>2]|0)|0;a[va>>0]=a[(c[sa>>2]|0)+(c[ua>>2]<<1)>>0]|0;jp(c[ra>>2]|0,d[(c[sa>>2]|0)+(c[ua>>2]<<1)+1>>0]|0);Ga=a[va>>0]|0;Ba=c[wa>>2]|0;c[wa>>2]=Ba+1;a[Ba>>0]=Ga;}hp()|0;Ga=c[za>>2]|0;Ba=c[Aa>>2]|0;c[ma>>2]=c[xa>>2];c[na>>2]=Ga;c[oa>>2]=Ba;c[pa>>2]=ip(c[ma>>2]|0,c[oa>>2]|0)|0;a[qa>>0]=a[(c[na>>2]|0)+(c[pa>>2]<<1)>>0]|0;jp(c[ma>>2]|0,d[(c[na>>2]|0)+(c[pa>>2]<<1)+1>>0]|0);Ba=a[qa>>0]|0;Ga=c[wa>>2]|0;c[wa>>2]=Ga+1;a[Ga>>0]=Ba;if(hp()|0){Ba=c[za>>2]|0;Ga=c[Aa>>2]|0;c[ha>>2]=c[xa>>2];c[ia>>2]=Ba;c[ja>>2]=Ga;c[ka>>2]=ip(c[ha>>2]|0,c[ja>>2]|0)|0;a[la>>0]=a[(c[ia>>2]|0)+(c[ka>>2]<<1)>>0]|0;jp(c[ha>>2]|0,d[(c[ia>>2]|0)+(c[ka>>2]<<1)+1>>0]|0);Ga=a[la>>0]|0;Ba=c[wa>>2]|0;c[wa>>2]=Ba+1;a[Ba>>0]=Ga;}Ga=c[za>>2]|0;Ba=c[Aa>>2]|0;c[ca>>2]=c[xa>>2];c[da>>2]=Ga;c[ea>>2]=Ba;c[fa>>2]=ip(c[ca>>2]|0,c[ea>>2]|0)|0;a[ga>>0]=a[(c[da>>2]|0)+(c[fa>>2]<<1)>>0]|0;jp(c[ca>>2]|0,d[(c[da>>2]|0)+(c[fa>>2]<<1)+1>>0]|0);Ba=a[ga>>0]|0;Ga=c[wa>>2]|0;c[wa>>2]=Ga+1;a[Ga>>0]=Ba;}c:do{if(kp()|0)while(1){ga=(gp(c[xa>>2]|0)|0)==0&1;if(!(ga&(c[wa>>2]|0)>>>0<(c[ya>>2]|0)>>>0))break c;ga=c[za>>2]|0;fa=c[Aa>>2]|0;c[Z>>2]=c[xa>>2];c[_>>2]=ga;c[$>>2]=fa;c[aa>>2]=ip(c[Z>>2]|0,c[$>>2]|0)|0;a[ba>>0]=a[(c[_>>2]|0)+(c[aa>>2]<<1)>>0]|0;jp(c[Z>>2]|0,d[(c[_>>2]|0)+(c[aa>>2]<<1)+1>>0]|0);fa=a[ba>>0]|0;ga=c[wa>>2]|0;c[wa>>2]=ga+1;a[ga>>0]=fa;}}while(0);while(1){if((c[wa>>2]|0)>>>0>=(c[ya>>2]|0)>>>0)break;ba=c[za>>2]|0;aa=c[Aa>>2]|0;c[U>>2]=c[xa>>2];c[V>>2]=ba;c[W>>2]=aa;c[X>>2]=ip(c[U>>2]|0,c[W>>2]|0)|0;a[Y>>0]=a[(c[V>>2]|0)+(c[X>>2]<<1)>>0]|0;jp(c[U>>2]|0,d[(c[V>>2]|0)+(c[X>>2]<<1)+1>>0]|0);aa=a[Y>>0]|0;ba=c[wa>>2]|0;c[wa>>2]=ba+1;a[ba>>0]=aa;}wa=c[Ad>>2]|0;Ad=c[Cd>>2]|0;Cd=c[Zd>>2]|0;c[O>>2]=c[Wd>>2];c[P>>2]=Gd;c[Q>>2]=wa;c[R>>2]=Ad;c[S>>2]=Cd;c[T>>2]=c[O>>2];while(1){T=(gp(c[P>>2]|0)|0)==0&1;if(!(T&(c[O>>2]|0)>>>0<((c[Q>>2]|0)+-3|0)>>>0))break;if(hp()|0){T=c[R>>2]|0;Cd=c[S>>2]|0;c[J>>2]=c[P>>2];c[K>>2]=T;c[L>>2]=Cd;c[M>>2]=ip(c[J>>2]|0,c[L>>2]|0)|0;a[N>>0]=a[(c[K>>2]|0)+(c[M>>2]<<1)>>0]|0;jp(c[J>>2]|0,d[(c[K>>2]|0)+(c[M>>2]<<1)+1>>0]|0);Cd=a[N>>0]|0;T=c[O>>2]|0;c[O>>2]=T+1;a[T>>0]=Cd;}hp()|0;Cd=c[R>>2]|0;T=c[S>>2]|0;c[E>>2]=c[P>>2];c[F>>2]=Cd;c[G>>2]=T;c[H>>2]=ip(c[E>>2]|0,c[G>>2]|0)|0;a[I>>0]=a[(c[F>>2]|0)+(c[H>>2]<<1)>>0]|0;jp(c[E>>2]|0,d[(c[F>>2]|0)+(c[H>>2]<<1)+1>>0]|0);T=a[I>>0]|0;Cd=c[O>>2]|0;c[O>>2]=Cd+1;a[Cd>>0]=T;if(hp()|0){T=c[R>>2]|0;Cd=c[S>>2]|0;c[z>>2]=c[P>>2];c[A>>2]=T;c[B>>2]=Cd;c[C>>2]=ip(c[z>>2]|0,c[B>>2]|0)|0;a[D>>0]=a[(c[A>>2]|0)+(c[C>>2]<<1)>>0]|0;jp(c[z>>2]|0,d[(c[A>>2]|0)+(c[C>>2]<<1)+1>>0]|0);Cd=a[D>>0]|0;T=c[O>>2]|0;c[O>>2]=T+1;a[T>>0]=Cd;}Cd=c[R>>2]|0;T=c[S>>2]|0;c[u>>2]=c[P>>2];c[v>>2]=Cd;c[w>>2]=T;c[x>>2]=ip(c[u>>2]|0,c[w>>2]|0)|0;a[y>>0]=a[(c[v>>2]|0)+(c[x>>2]<<1)>>0]|0;jp(c[u>>2]|0,d[(c[v>>2]|0)+(c[x>>2]<<1)+1>>0]|0);T=a[y>>0]|0;Cd=c[O>>2]|0;c[O>>2]=Cd+1;a[Cd>>0]=T;}d:do{if(kp()|0)while(1){y=(gp(c[P>>2]|0)|0)==0&1;if(!(y&(c[O>>2]|0)>>>0<(c[Q>>2]|0)>>>0))break d;y=c[R>>2]|0;x=c[S>>2]|0;c[p>>2]=c[P>>2];c[q>>2]=y;c[r>>2]=x;c[s>>2]=ip(c[p>>2]|0,c[r>>2]|0)|0;a[t>>0]=a[(c[q>>2]|0)+(c[s>>2]<<1)>>0]|0;jp(c[p>>2]|0,d[(c[q>>2]|0)+(c[s>>2]<<1)+1>>0]|0);x=a[t>>0]|0;y=c[O>>2]|0;c[O>>2]=y+1;a[y>>0]=x;}}while(0);while(1){if((c[O>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break;t=c[R>>2]|0;s=c[S>>2]|0;c[j>>2]=c[P>>2];c[k>>2]=t;c[m>>2]=s;c[n>>2]=ip(c[j>>2]|0,c[m>>2]|0)|0;a[o>>0]=a[(c[k>>2]|0)+(c[n>>2]<<1)>>0]|0;jp(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<1)+1>>0]|0);s=a[o>>0]|0;t=c[O>>2]|0;c[O>>2]=t+1;a[t>>0]=s;}O=lp(Dd)|0;Dd=O&(lp(Ed)|0);Ed=Dd&(lp(Fd)|0);c[ce>>2]=Ed&(lp(Gd)|0);if(c[ce>>2]|0){c[sd>>2]=c[ud>>2];ie=c[sd>>2]|0;l=i;return ie|0;}else{c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}return 0;}function xp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0;i=l;l=l+1024|0;j=i+968|0;k=i+964|0;m=i+960|0;n=i+956|0;o=i+1015|0;p=i+952|0;q=i+948|0;r=i+944|0;s=i+940|0;t=i+1014|0;u=i+936|0;v=i+932|0;w=i+928|0;x=i+924|0;y=i+1013|0;z=i+920|0;A=i+916|0;B=i+912|0;C=i+908|0;D=i+1012|0;E=i+904|0;F=i+900|0;G=i+896|0;H=i+892|0;I=i+1011|0;J=i+888|0;K=i+884|0;L=i+880|0;M=i+876|0;N=i+1010|0;O=i+872|0;P=i+868|0;Q=i+864|0;R=i+860|0;S=i+856|0;T=i+852|0;U=i+848|0;V=i+844|0;W=i+840|0;X=i+836|0;Y=i+1009|0;Z=i+832|0;_=i+828|0;$=i+824|0;aa=i+820|0;ba=i+1008|0;ca=i+816|0;da=i+812|0;ea=i+808|0;fa=i+804|0;ga=i+1007|0;ha=i+800|0;ia=i+796|0;ja=i+792|0;ka=i+788|0;la=i+1006|0;ma=i+784|0;na=i+780|0;oa=i+776|0;pa=i+772|0;qa=i+1005|0;ra=i+768|0;sa=i+764|0;ta=i+760|0;ua=i+756|0;va=i+1004|0;wa=i+752|0;xa=i+748|0;ya=i+744|0;za=i+740|0;Aa=i+736|0;Ba=i+732|0;Ca=i+728|0;Da=i+724|0;Ea=i+720|0;Fa=i+716|0;Ga=i+1003|0;Ha=i+712|0;Ia=i+708|0;Ja=i+704|0;Ka=i+700|0;La=i+1002|0;Ma=i+696|0;Na=i+692|0;Oa=i+688|0;Pa=i+684|0;Qa=i+1001|0;Ra=i+680|0;Sa=i+676|0;Ta=i+672|0;Ua=i+668|0;Va=i+1e3|0;Wa=i+664|0;Xa=i+660|0;Ya=i+656|0;Za=i+652|0;_a=i+999|0;$a=i+648|0;ab=i+644|0;bb=i+640|0;cb=i+636|0;db=i+998|0;eb=i+632|0;fb=i+628|0;gb=i+624|0;hb=i+620|0;ib=i+616|0;jb=i+612|0;kb=i+608|0;lb=i+604|0;mb=i+600|0;nb=i+596|0;ob=i+997|0;pb=i+592|0;qb=i+588|0;rb=i+584|0;sb=i+580|0;tb=i+996|0;ub=i+576|0;vb=i+572|0;wb=i+568|0;xb=i+564|0;yb=i+995|0;zb=i+560|0;Ab=i+556|0;Bb=i+552|0;Cb=i+548|0;Db=i+994|0;Eb=i+544|0;Fb=i+540|0;Gb=i+536|0;Hb=i+532|0;Ib=i+993|0;Jb=i+528|0;Kb=i+524|0;Lb=i+520|0;Mb=i+516|0;Nb=i+992|0;Ob=i+512|0;Pb=i+508|0;Qb=i+504|0;Rb=i+500|0;Sb=i+496|0;Tb=i+492|0;Ub=i+488|0;Vb=i+484|0;Wb=i+480|0;Xb=i+476|0;Yb=i+991|0;Zb=i+472|0;_b=i+468|0;$b=i+464|0;ac=i+460|0;bc=i+990|0;cc=i+456|0;dc=i+452|0;ec=i+448|0;fc=i+444|0;gc=i+989|0;hc=i+440|0;ic=i+436|0;jc=i+432|0;kc=i+428|0;lc=i+988|0;mc=i+424|0;nc=i+420|0;oc=i+416|0;pc=i+412|0;qc=i+987|0;rc=i+408|0;sc=i+404|0;tc=i+400|0;uc=i+396|0;vc=i+986|0;wc=i+392|0;xc=i+388|0;yc=i+384|0;zc=i+380|0;Ac=i+985|0;Bc=i+376|0;Cc=i+372|0;Dc=i+368|0;Ec=i+364|0;Fc=i+984|0;Gc=i+360|0;Hc=i+356|0;Ic=i+352|0;Jc=i+348|0;Kc=i+983|0;Lc=i+344|0;Mc=i+340|0;Nc=i+336|0;Oc=i+332|0;Pc=i+982|0;Qc=i+328|0;Rc=i+324|0;Sc=i+320|0;Tc=i+316|0;Uc=i+981|0;Vc=i+312|0;Wc=i+308|0;Xc=i+304|0;Yc=i+300|0;Zc=i+980|0;_c=i+296|0;$c=i+292|0;ad=i+288|0;bd=i+284|0;cd=i+979|0;dd=i+280|0;ed=i+276|0;fd=i+272|0;gd=i+268|0;hd=i+978|0;id=i+264|0;jd=i+260|0;kd=i+256|0;ld=i+252|0;md=i+977|0;nd=i+248|0;od=i+244|0;pd=i+240|0;qd=i+236|0;rd=i+976|0;sd=i+232|0;td=i+228|0;ud=i+224|0;vd=i+220|0;wd=i+216|0;xd=i+212|0;yd=i+208|0;zd=i+204|0;Ad=i+200|0;Bd=i+196|0;Cd=i+192|0;Dd=i+172|0;Ed=i+152|0;Fd=i+132|0;Gd=i+112|0;Hd=i+108|0;Id=i+104|0;Jd=i+100|0;Kd=i+96|0;Ld=i+92|0;Md=i+88|0;Nd=i+84|0;Od=i+80|0;Pd=i+76|0;Qd=i+72|0;Rd=i+68|0;Sd=i+64|0;Td=i+60|0;Ud=i+56|0;Vd=i+52|0;Wd=i+48|0;Xd=i+44|0;Yd=i+972|0;Zd=i+40|0;_d=i+36|0;$d=i+32|0;ae=i+28|0;be=i+24|0;ce=i+20|0;de=i+16|0;ee=i+12|0;fe=i+8|0;ge=i+4|0;he=i;c[de>>2]=b;c[ee>>2]=e;c[fe>>2]=f;c[ge>>2]=g;c[he>>2]=h;h=c[ee>>2]|0;ee=c[fe>>2]|0;fe=c[ge>>2]|0;ge=c[he>>2]|0;c[td>>2]=c[de>>2];c[ud>>2]=h;c[vd>>2]=ee;c[wd>>2]=fe;c[xd>>2]=ge;if((c[wd>>2]|0)>>>0<10){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}c[yd>>2]=c[vd>>2];c[zd>>2]=c[td>>2];c[Ad>>2]=(c[zd>>2]|0)+(c[ud>>2]|0);c[Bd>>2]=(c[xd>>2]|0)+4;c[Cd>>2]=c[Bd>>2];c[Hd>>2]=(yp(c[yd>>2]|0)|0)&65535;c[Id>>2]=(yp((c[yd>>2]|0)+2|0)|0)&65535;c[Jd>>2]=(yp((c[yd>>2]|0)+4|0)|0)&65535;c[Kd>>2]=(c[wd>>2]|0)-((c[Hd>>2]|0)+(c[Id>>2]|0)+(c[Jd>>2]|0)+6);c[Ld>>2]=(c[yd>>2]|0)+6;c[Md>>2]=(c[Ld>>2]|0)+(c[Hd>>2]|0);c[Nd>>2]=(c[Md>>2]|0)+(c[Id>>2]|0);c[Od>>2]=(c[Nd>>2]|0)+(c[Jd>>2]|0);c[Pd>>2]=(((c[ud>>2]|0)+3|0)>>>0)/4|0;c[Qd>>2]=(c[zd>>2]|0)+(c[Pd>>2]|0);c[Rd>>2]=(c[Qd>>2]|0)+(c[Pd>>2]|0);c[Sd>>2]=(c[Rd>>2]|0)+(c[Pd>>2]|0);c[Td>>2]=c[zd>>2];c[Ud>>2]=c[Qd>>2];c[Vd>>2]=c[Rd>>2];c[Wd>>2]=c[Sd>>2];c[Xd>>2]=0;bp(Yd,c[xd>>2]|0);c[Zd>>2]=d[Yd+2>>0];if((c[Kd>>2]|0)>>>0>(c[wd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}c[_d>>2]=fp(Dd,c[Ld>>2]|0,c[Hd>>2]|0)|0;if(ap(c[_d>>2]|0)|0){c[sd>>2]=c[_d>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[$d>>2]=fp(Ed,c[Md>>2]|0,c[Id>>2]|0)|0;if(ap(c[$d>>2]|0)|0){c[sd>>2]=c[$d>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[ae>>2]=fp(Fd,c[Nd>>2]|0,c[Jd>>2]|0)|0;if(ap(c[ae>>2]|0)|0){c[sd>>2]=c[ae>>2];ie=c[sd>>2]|0;l=i;return ie|0;}c[be>>2]=fp(Gd,c[Od>>2]|0,c[Kd>>2]|0)|0;if(ap(c[be>>2]|0)|0){c[sd>>2]=c[be>>2];ie=c[sd>>2]|0;l=i;return ie|0;}be=gp(Dd)|0;Kd=be|(gp(Ed)|0);be=Kd|(gp(Fd)|0);c[Xd>>2]=be|(gp(Gd)|0);while(1){if(c[Xd>>2]|0)break;if((c[Wd>>2]|0)>>>0>=((c[Ad>>2]|0)+-3|0)>>>0)break;if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[nd>>2]=Dd;c[od>>2]=be;c[pd>>2]=Kd;c[qd>>2]=ip(c[nd>>2]|0,c[pd>>2]|0)|0;a[rd>>0]=a[(c[od>>2]|0)+(c[qd>>2]<<1)>>0]|0;jp(c[nd>>2]|0,d[(c[od>>2]|0)+(c[qd>>2]<<1)+1>>0]|0);Kd=a[rd>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[id>>2]=Ed;c[jd>>2]=Kd;c[kd>>2]=be;c[ld>>2]=ip(c[id>>2]|0,c[kd>>2]|0)|0;a[md>>0]=a[(c[jd>>2]|0)+(c[ld>>2]<<1)>>0]|0;jp(c[id>>2]|0,d[(c[jd>>2]|0)+(c[ld>>2]<<1)+1>>0]|0);be=a[md>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;}if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[dd>>2]=Fd;c[ed>>2]=be;c[fd>>2]=Kd;c[gd>>2]=ip(c[dd>>2]|0,c[fd>>2]|0)|0;a[hd>>0]=a[(c[ed>>2]|0)+(c[gd>>2]<<1)>>0]|0;jp(c[dd>>2]|0,d[(c[ed>>2]|0)+(c[gd>>2]<<1)+1>>0]|0);Kd=a[hd>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[_c>>2]=Gd;c[$c>>2]=Kd;c[ad>>2]=be;c[bd>>2]=ip(c[_c>>2]|0,c[ad>>2]|0)|0;a[cd>>0]=a[(c[$c>>2]|0)+(c[bd>>2]<<1)>>0]|0;jp(c[_c>>2]|0,d[(c[$c>>2]|0)+(c[bd>>2]<<1)+1>>0]|0);be=a[cd>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;}hp()|0;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Vc>>2]=Dd;c[Wc>>2]=be;c[Xc>>2]=Kd;c[Yc>>2]=ip(c[Vc>>2]|0,c[Xc>>2]|0)|0;a[Zc>>0]=a[(c[Wc>>2]|0)+(c[Yc>>2]<<1)>>0]|0;jp(c[Vc>>2]|0,d[(c[Wc>>2]|0)+(c[Yc>>2]<<1)+1>>0]|0);Kd=a[Zc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;hp()|0;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Qc>>2]=Ed;c[Rc>>2]=Kd;c[Sc>>2]=be;c[Tc>>2]=ip(c[Qc>>2]|0,c[Sc>>2]|0)|0;a[Uc>>0]=a[(c[Rc>>2]|0)+(c[Tc>>2]<<1)>>0]|0;jp(c[Qc>>2]|0,d[(c[Rc>>2]|0)+(c[Tc>>2]<<1)+1>>0]|0);be=a[Uc>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;hp()|0;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Lc>>2]=Fd;c[Mc>>2]=be;c[Nc>>2]=Kd;c[Oc>>2]=ip(c[Lc>>2]|0,c[Nc>>2]|0)|0;a[Pc>>0]=a[(c[Mc>>2]|0)+(c[Oc>>2]<<1)>>0]|0;jp(c[Lc>>2]|0,d[(c[Mc>>2]|0)+(c[Oc>>2]<<1)+1>>0]|0);Kd=a[Pc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;hp()|0;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Gc>>2]=Gd;c[Hc>>2]=Kd;c[Ic>>2]=be;c[Jc>>2]=ip(c[Gc>>2]|0,c[Ic>>2]|0)|0;a[Kc>>0]=a[(c[Hc>>2]|0)+(c[Jc>>2]<<1)>>0]|0;jp(c[Gc>>2]|0,d[(c[Hc>>2]|0)+(c[Jc>>2]<<1)+1>>0]|0);be=a[Kc>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Bc>>2]=Dd;c[Cc>>2]=be;c[Dc>>2]=Kd;c[Ec>>2]=ip(c[Bc>>2]|0,c[Dc>>2]|0)|0;a[Fc>>0]=a[(c[Cc>>2]|0)+(c[Ec>>2]<<1)>>0]|0;jp(c[Bc>>2]|0,d[(c[Cc>>2]|0)+(c[Ec>>2]<<1)+1>>0]|0);Kd=a[Fc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[wc>>2]=Ed;c[xc>>2]=Kd;c[yc>>2]=be;c[zc>>2]=ip(c[wc>>2]|0,c[yc>>2]|0)|0;a[Ac>>0]=a[(c[xc>>2]|0)+(c[zc>>2]<<1)>>0]|0;jp(c[wc>>2]|0,d[(c[xc>>2]|0)+(c[zc>>2]<<1)+1>>0]|0);be=a[Ac>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;}if(hp()|0){be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[rc>>2]=Fd;c[sc>>2]=be;c[tc>>2]=Kd;c[uc>>2]=ip(c[rc>>2]|0,c[tc>>2]|0)|0;a[vc>>0]=a[(c[sc>>2]|0)+(c[uc>>2]<<1)>>0]|0;jp(c[rc>>2]|0,d[(c[sc>>2]|0)+(c[uc>>2]<<1)+1>>0]|0);Kd=a[vc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;}if(hp()|0){Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[mc>>2]=Gd;c[nc>>2]=Kd;c[oc>>2]=be;c[pc>>2]=ip(c[mc>>2]|0,c[oc>>2]|0)|0;a[qc>>0]=a[(c[nc>>2]|0)+(c[pc>>2]<<1)>>0]|0;jp(c[mc>>2]|0,d[(c[nc>>2]|0)+(c[pc>>2]<<1)+1>>0]|0);be=a[qc>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;}be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[hc>>2]=Dd;c[ic>>2]=be;c[jc>>2]=Kd;c[kc>>2]=ip(c[hc>>2]|0,c[jc>>2]|0)|0;a[lc>>0]=a[(c[ic>>2]|0)+(c[kc>>2]<<1)>>0]|0;jp(c[hc>>2]|0,d[(c[ic>>2]|0)+(c[kc>>2]<<1)+1>>0]|0);Kd=a[lc>>0]|0;be=c[Td>>2]|0;c[Td>>2]=be+1;a[be>>0]=Kd;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[cc>>2]=Ed;c[dc>>2]=Kd;c[ec>>2]=be;c[fc>>2]=ip(c[cc>>2]|0,c[ec>>2]|0)|0;a[gc>>0]=a[(c[dc>>2]|0)+(c[fc>>2]<<1)>>0]|0;jp(c[cc>>2]|0,d[(c[dc>>2]|0)+(c[fc>>2]<<1)+1>>0]|0);be=a[gc>>0]|0;Kd=c[Ud>>2]|0;c[Ud>>2]=Kd+1;a[Kd>>0]=be;be=c[Cd>>2]|0;Kd=c[Zd>>2]|0;c[Zb>>2]=Fd;c[_b>>2]=be;c[$b>>2]=Kd;c[ac>>2]=ip(c[Zb>>2]|0,c[$b>>2]|0)|0;a[bc>>0]=a[(c[_b>>2]|0)+(c[ac>>2]<<1)>>0]|0;jp(c[Zb>>2]|0,d[(c[_b>>2]|0)+(c[ac>>2]<<1)+1>>0]|0);Kd=a[bc>>0]|0;be=c[Vd>>2]|0;c[Vd>>2]=be+1;a[be>>0]=Kd;Kd=c[Cd>>2]|0;be=c[Zd>>2]|0;c[Ub>>2]=Gd;c[Vb>>2]=Kd;c[Wb>>2]=be;c[Xb>>2]=ip(c[Ub>>2]|0,c[Wb>>2]|0)|0;a[Yb>>0]=a[(c[Vb>>2]|0)+(c[Xb>>2]<<1)>>0]|0;jp(c[Ub>>2]|0,d[(c[Vb>>2]|0)+(c[Xb>>2]<<1)+1>>0]|0);be=a[Yb>>0]|0;Kd=c[Wd>>2]|0;c[Wd>>2]=Kd+1;a[Kd>>0]=be;gp(Dd)|0;gp(Ed)|0;gp(Fd)|0;gp(Gd)|0;}if((c[Td>>2]|0)>>>0>(c[Qd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}if((c[Ud>>2]|0)>>>0>(c[Rd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}if((c[Vd>>2]|0)>>>0>(c[Sd>>2]|0)>>>0){c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}Yb=c[Qd>>2]|0;Qd=c[Cd>>2]|0;Xb=c[Zd>>2]|0;c[Ob>>2]=c[Td>>2];c[Pb>>2]=Dd;c[Qb>>2]=Yb;c[Rb>>2]=Qd;c[Sb>>2]=Xb;c[Tb>>2]=c[Ob>>2];while(1){Tb=(gp(c[Pb>>2]|0)|0)==0&1;if(!(Tb&(c[Ob>>2]|0)>>>0<((c[Qb>>2]|0)+-3|0)>>>0))break;if(hp()|0){Tb=c[Rb>>2]|0;Xb=c[Sb>>2]|0;c[Jb>>2]=c[Pb>>2];c[Kb>>2]=Tb;c[Lb>>2]=Xb;c[Mb>>2]=ip(c[Jb>>2]|0,c[Lb>>2]|0)|0;a[Nb>>0]=a[(c[Kb>>2]|0)+(c[Mb>>2]<<1)>>0]|0;jp(c[Jb>>2]|0,d[(c[Kb>>2]|0)+(c[Mb>>2]<<1)+1>>0]|0);Xb=a[Nb>>0]|0;Tb=c[Ob>>2]|0;c[Ob>>2]=Tb+1;a[Tb>>0]=Xb;}hp()|0;Xb=c[Rb>>2]|0;Tb=c[Sb>>2]|0;c[Eb>>2]=c[Pb>>2];c[Fb>>2]=Xb;c[Gb>>2]=Tb;c[Hb>>2]=ip(c[Eb>>2]|0,c[Gb>>2]|0)|0;a[Ib>>0]=a[(c[Fb>>2]|0)+(c[Hb>>2]<<1)>>0]|0;jp(c[Eb>>2]|0,d[(c[Fb>>2]|0)+(c[Hb>>2]<<1)+1>>0]|0);Tb=a[Ib>>0]|0;Xb=c[Ob>>2]|0;c[Ob>>2]=Xb+1;a[Xb>>0]=Tb;if(hp()|0){Tb=c[Rb>>2]|0;Xb=c[Sb>>2]|0;c[zb>>2]=c[Pb>>2];c[Ab>>2]=Tb;c[Bb>>2]=Xb;c[Cb>>2]=ip(c[zb>>2]|0,c[Bb>>2]|0)|0;a[Db>>0]=a[(c[Ab>>2]|0)+(c[Cb>>2]<<1)>>0]|0;jp(c[zb>>2]|0,d[(c[Ab>>2]|0)+(c[Cb>>2]<<1)+1>>0]|0);Xb=a[Db>>0]|0;Tb=c[Ob>>2]|0;c[Ob>>2]=Tb+1;a[Tb>>0]=Xb;}Xb=c[Rb>>2]|0;Tb=c[Sb>>2]|0;c[ub>>2]=c[Pb>>2];c[vb>>2]=Xb;c[wb>>2]=Tb;c[xb>>2]=ip(c[ub>>2]|0,c[wb>>2]|0)|0;a[yb>>0]=a[(c[vb>>2]|0)+(c[xb>>2]<<1)>>0]|0;jp(c[ub>>2]|0,d[(c[vb>>2]|0)+(c[xb>>2]<<1)+1>>0]|0);Tb=a[yb>>0]|0;Xb=c[Ob>>2]|0;c[Ob>>2]=Xb+1;a[Xb>>0]=Tb;}a:do{if(kp()|0)while(1){yb=(gp(c[Pb>>2]|0)|0)==0&1;if(!(yb&(c[Ob>>2]|0)>>>0<(c[Qb>>2]|0)>>>0))break a;yb=c[Rb>>2]|0;xb=c[Sb>>2]|0;c[pb>>2]=c[Pb>>2];c[qb>>2]=yb;c[rb>>2]=xb;c[sb>>2]=ip(c[pb>>2]|0,c[rb>>2]|0)|0;a[tb>>0]=a[(c[qb>>2]|0)+(c[sb>>2]<<1)>>0]|0;jp(c[pb>>2]|0,d[(c[qb>>2]|0)+(c[sb>>2]<<1)+1>>0]|0);xb=a[tb>>0]|0;yb=c[Ob>>2]|0;c[Ob>>2]=yb+1;a[yb>>0]=xb;}}while(0);while(1){if((c[Ob>>2]|0)>>>0>=(c[Qb>>2]|0)>>>0)break;tb=c[Rb>>2]|0;sb=c[Sb>>2]|0;c[kb>>2]=c[Pb>>2];c[lb>>2]=tb;c[mb>>2]=sb;c[nb>>2]=ip(c[kb>>2]|0,c[mb>>2]|0)|0;a[ob>>0]=a[(c[lb>>2]|0)+(c[nb>>2]<<1)>>0]|0;jp(c[kb>>2]|0,d[(c[lb>>2]|0)+(c[nb>>2]<<1)+1>>0]|0);sb=a[ob>>0]|0;tb=c[Ob>>2]|0;c[Ob>>2]=tb+1;a[tb>>0]=sb;}Ob=c[Rd>>2]|0;Rd=c[Cd>>2]|0;ob=c[Zd>>2]|0;c[eb>>2]=c[Ud>>2];c[fb>>2]=Ed;c[gb>>2]=Ob;c[hb>>2]=Rd;c[ib>>2]=ob;c[jb>>2]=c[eb>>2];while(1){jb=(gp(c[fb>>2]|0)|0)==0&1;if(!(jb&(c[eb>>2]|0)>>>0<((c[gb>>2]|0)+-3|0)>>>0))break;if(hp()|0){jb=c[hb>>2]|0;ob=c[ib>>2]|0;c[$a>>2]=c[fb>>2];c[ab>>2]=jb;c[bb>>2]=ob;c[cb>>2]=ip(c[$a>>2]|0,c[bb>>2]|0)|0;a[db>>0]=a[(c[ab>>2]|0)+(c[cb>>2]<<1)>>0]|0;jp(c[$a>>2]|0,d[(c[ab>>2]|0)+(c[cb>>2]<<1)+1>>0]|0);ob=a[db>>0]|0;jb=c[eb>>2]|0;c[eb>>2]=jb+1;a[jb>>0]=ob;}hp()|0;ob=c[hb>>2]|0;jb=c[ib>>2]|0;c[Wa>>2]=c[fb>>2];c[Xa>>2]=ob;c[Ya>>2]=jb;c[Za>>2]=ip(c[Wa>>2]|0,c[Ya>>2]|0)|0;a[_a>>0]=a[(c[Xa>>2]|0)+(c[Za>>2]<<1)>>0]|0;jp(c[Wa>>2]|0,d[(c[Xa>>2]|0)+(c[Za>>2]<<1)+1>>0]|0);jb=a[_a>>0]|0;ob=c[eb>>2]|0;c[eb>>2]=ob+1;a[ob>>0]=jb;if(hp()|0){jb=c[hb>>2]|0;ob=c[ib>>2]|0;c[Ra>>2]=c[fb>>2];c[Sa>>2]=jb;c[Ta>>2]=ob;c[Ua>>2]=ip(c[Ra>>2]|0,c[Ta>>2]|0)|0;a[Va>>0]=a[(c[Sa>>2]|0)+(c[Ua>>2]<<1)>>0]|0;jp(c[Ra>>2]|0,d[(c[Sa>>2]|0)+(c[Ua>>2]<<1)+1>>0]|0);ob=a[Va>>0]|0;jb=c[eb>>2]|0;c[eb>>2]=jb+1;a[jb>>0]=ob;}ob=c[hb>>2]|0;jb=c[ib>>2]|0;c[Ma>>2]=c[fb>>2];c[Na>>2]=ob;c[Oa>>2]=jb;c[Pa>>2]=ip(c[Ma>>2]|0,c[Oa>>2]|0)|0;a[Qa>>0]=a[(c[Na>>2]|0)+(c[Pa>>2]<<1)>>0]|0;jp(c[Ma>>2]|0,d[(c[Na>>2]|0)+(c[Pa>>2]<<1)+1>>0]|0);jb=a[Qa>>0]|0;ob=c[eb>>2]|0;c[eb>>2]=ob+1;a[ob>>0]=jb;}b:do{if(kp()|0)while(1){Qa=(gp(c[fb>>2]|0)|0)==0&1;if(!(Qa&(c[eb>>2]|0)>>>0<(c[gb>>2]|0)>>>0))break b;Qa=c[hb>>2]|0;Pa=c[ib>>2]|0;c[Ha>>2]=c[fb>>2];c[Ia>>2]=Qa;c[Ja>>2]=Pa;c[Ka>>2]=ip(c[Ha>>2]|0,c[Ja>>2]|0)|0;a[La>>0]=a[(c[Ia>>2]|0)+(c[Ka>>2]<<1)>>0]|0;jp(c[Ha>>2]|0,d[(c[Ia>>2]|0)+(c[Ka>>2]<<1)+1>>0]|0);Pa=a[La>>0]|0;Qa=c[eb>>2]|0;c[eb>>2]=Qa+1;a[Qa>>0]=Pa;}}while(0);while(1){if((c[eb>>2]|0)>>>0>=(c[gb>>2]|0)>>>0)break;La=c[hb>>2]|0;Ka=c[ib>>2]|0;c[Ca>>2]=c[fb>>2];c[Da>>2]=La;c[Ea>>2]=Ka;c[Fa>>2]=ip(c[Ca>>2]|0,c[Ea>>2]|0)|0;a[Ga>>0]=a[(c[Da>>2]|0)+(c[Fa>>2]<<1)>>0]|0;jp(c[Ca>>2]|0,d[(c[Da>>2]|0)+(c[Fa>>2]<<1)+1>>0]|0);Ka=a[Ga>>0]|0;La=c[eb>>2]|0;c[eb>>2]=La+1;a[La>>0]=Ka;}eb=c[Sd>>2]|0;Sd=c[Cd>>2]|0;Ga=c[Zd>>2]|0;c[wa>>2]=c[Vd>>2];c[xa>>2]=Fd;c[ya>>2]=eb;c[za>>2]=Sd;c[Aa>>2]=Ga;c[Ba>>2]=c[wa>>2];while(1){Ba=(gp(c[xa>>2]|0)|0)==0&1;if(!(Ba&(c[wa>>2]|0)>>>0<((c[ya>>2]|0)+-3|0)>>>0))break;if(hp()|0){Ba=c[za>>2]|0;Ga=c[Aa>>2]|0;c[ra>>2]=c[xa>>2];c[sa>>2]=Ba;c[ta>>2]=Ga;c[ua>>2]=ip(c[ra>>2]|0,c[ta>>2]|0)|0;a[va>>0]=a[(c[sa>>2]|0)+(c[ua>>2]<<1)>>0]|0;jp(c[ra>>2]|0,d[(c[sa>>2]|0)+(c[ua>>2]<<1)+1>>0]|0);Ga=a[va>>0]|0;Ba=c[wa>>2]|0;c[wa>>2]=Ba+1;a[Ba>>0]=Ga;}hp()|0;Ga=c[za>>2]|0;Ba=c[Aa>>2]|0;c[ma>>2]=c[xa>>2];c[na>>2]=Ga;c[oa>>2]=Ba;c[pa>>2]=ip(c[ma>>2]|0,c[oa>>2]|0)|0;a[qa>>0]=a[(c[na>>2]|0)+(c[pa>>2]<<1)>>0]|0;jp(c[ma>>2]|0,d[(c[na>>2]|0)+(c[pa>>2]<<1)+1>>0]|0);Ba=a[qa>>0]|0;Ga=c[wa>>2]|0;c[wa>>2]=Ga+1;a[Ga>>0]=Ba;if(hp()|0){Ba=c[za>>2]|0;Ga=c[Aa>>2]|0;c[ha>>2]=c[xa>>2];c[ia>>2]=Ba;c[ja>>2]=Ga;c[ka>>2]=ip(c[ha>>2]|0,c[ja>>2]|0)|0;a[la>>0]=a[(c[ia>>2]|0)+(c[ka>>2]<<1)>>0]|0;jp(c[ha>>2]|0,d[(c[ia>>2]|0)+(c[ka>>2]<<1)+1>>0]|0);Ga=a[la>>0]|0;Ba=c[wa>>2]|0;c[wa>>2]=Ba+1;a[Ba>>0]=Ga;}Ga=c[za>>2]|0;Ba=c[Aa>>2]|0;c[ca>>2]=c[xa>>2];c[da>>2]=Ga;c[ea>>2]=Ba;c[fa>>2]=ip(c[ca>>2]|0,c[ea>>2]|0)|0;a[ga>>0]=a[(c[da>>2]|0)+(c[fa>>2]<<1)>>0]|0;jp(c[ca>>2]|0,d[(c[da>>2]|0)+(c[fa>>2]<<1)+1>>0]|0);Ba=a[ga>>0]|0;Ga=c[wa>>2]|0;c[wa>>2]=Ga+1;a[Ga>>0]=Ba;}c:do{if(kp()|0)while(1){ga=(gp(c[xa>>2]|0)|0)==0&1;if(!(ga&(c[wa>>2]|0)>>>0<(c[ya>>2]|0)>>>0))break c;ga=c[za>>2]|0;fa=c[Aa>>2]|0;c[Z>>2]=c[xa>>2];c[_>>2]=ga;c[$>>2]=fa;c[aa>>2]=ip(c[Z>>2]|0,c[$>>2]|0)|0;a[ba>>0]=a[(c[_>>2]|0)+(c[aa>>2]<<1)>>0]|0;jp(c[Z>>2]|0,d[(c[_>>2]|0)+(c[aa>>2]<<1)+1>>0]|0);fa=a[ba>>0]|0;ga=c[wa>>2]|0;c[wa>>2]=ga+1;a[ga>>0]=fa;}}while(0);while(1){if((c[wa>>2]|0)>>>0>=(c[ya>>2]|0)>>>0)break;ba=c[za>>2]|0;aa=c[Aa>>2]|0;c[U>>2]=c[xa>>2];c[V>>2]=ba;c[W>>2]=aa;c[X>>2]=ip(c[U>>2]|0,c[W>>2]|0)|0;a[Y>>0]=a[(c[V>>2]|0)+(c[X>>2]<<1)>>0]|0;jp(c[U>>2]|0,d[(c[V>>2]|0)+(c[X>>2]<<1)+1>>0]|0);aa=a[Y>>0]|0;ba=c[wa>>2]|0;c[wa>>2]=ba+1;a[ba>>0]=aa;}wa=c[Ad>>2]|0;Ad=c[Cd>>2]|0;Cd=c[Zd>>2]|0;c[O>>2]=c[Wd>>2];c[P>>2]=Gd;c[Q>>2]=wa;c[R>>2]=Ad;c[S>>2]=Cd;c[T>>2]=c[O>>2];while(1){T=(gp(c[P>>2]|0)|0)==0&1;if(!(T&(c[O>>2]|0)>>>0<((c[Q>>2]|0)+-3|0)>>>0))break;if(hp()|0){T=c[R>>2]|0;Cd=c[S>>2]|0;c[J>>2]=c[P>>2];c[K>>2]=T;c[L>>2]=Cd;c[M>>2]=ip(c[J>>2]|0,c[L>>2]|0)|0;a[N>>0]=a[(c[K>>2]|0)+(c[M>>2]<<1)>>0]|0;jp(c[J>>2]|0,d[(c[K>>2]|0)+(c[M>>2]<<1)+1>>0]|0);Cd=a[N>>0]|0;T=c[O>>2]|0;c[O>>2]=T+1;a[T>>0]=Cd;}hp()|0;Cd=c[R>>2]|0;T=c[S>>2]|0;c[E>>2]=c[P>>2];c[F>>2]=Cd;c[G>>2]=T;c[H>>2]=ip(c[E>>2]|0,c[G>>2]|0)|0;a[I>>0]=a[(c[F>>2]|0)+(c[H>>2]<<1)>>0]|0;jp(c[E>>2]|0,d[(c[F>>2]|0)+(c[H>>2]<<1)+1>>0]|0);T=a[I>>0]|0;Cd=c[O>>2]|0;c[O>>2]=Cd+1;a[Cd>>0]=T;if(hp()|0){T=c[R>>2]|0;Cd=c[S>>2]|0;c[z>>2]=c[P>>2];c[A>>2]=T;c[B>>2]=Cd;c[C>>2]=ip(c[z>>2]|0,c[B>>2]|0)|0;a[D>>0]=a[(c[A>>2]|0)+(c[C>>2]<<1)>>0]|0;jp(c[z>>2]|0,d[(c[A>>2]|0)+(c[C>>2]<<1)+1>>0]|0);Cd=a[D>>0]|0;T=c[O>>2]|0;c[O>>2]=T+1;a[T>>0]=Cd;}Cd=c[R>>2]|0;T=c[S>>2]|0;c[u>>2]=c[P>>2];c[v>>2]=Cd;c[w>>2]=T;c[x>>2]=ip(c[u>>2]|0,c[w>>2]|0)|0;a[y>>0]=a[(c[v>>2]|0)+(c[x>>2]<<1)>>0]|0;jp(c[u>>2]|0,d[(c[v>>2]|0)+(c[x>>2]<<1)+1>>0]|0);T=a[y>>0]|0;Cd=c[O>>2]|0;c[O>>2]=Cd+1;a[Cd>>0]=T;}d:do{if(kp()|0)while(1){y=(gp(c[P>>2]|0)|0)==0&1;if(!(y&(c[O>>2]|0)>>>0<(c[Q>>2]|0)>>>0))break d;y=c[R>>2]|0;x=c[S>>2]|0;c[p>>2]=c[P>>2];c[q>>2]=y;c[r>>2]=x;c[s>>2]=ip(c[p>>2]|0,c[r>>2]|0)|0;a[t>>0]=a[(c[q>>2]|0)+(c[s>>2]<<1)>>0]|0;jp(c[p>>2]|0,d[(c[q>>2]|0)+(c[s>>2]<<1)+1>>0]|0);x=a[t>>0]|0;y=c[O>>2]|0;c[O>>2]=y+1;a[y>>0]=x;}}while(0);while(1){if((c[O>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break;t=c[R>>2]|0;s=c[S>>2]|0;c[j>>2]=c[P>>2];c[k>>2]=t;c[m>>2]=s;c[n>>2]=ip(c[j>>2]|0,c[m>>2]|0)|0;a[o>>0]=a[(c[k>>2]|0)+(c[n>>2]<<1)>>0]|0;jp(c[j>>2]|0,d[(c[k>>2]|0)+(c[n>>2]<<1)+1>>0]|0);s=a[o>>0]|0;t=c[O>>2]|0;c[O>>2]=t+1;a[t>>0]=s;}O=lp(Dd)|0;Dd=O&(lp(Ed)|0);Ed=Dd&(lp(Fd)|0);c[ce>>2]=Ed&(lp(Gd)|0);if(c[ce>>2]|0){c[sd>>2]=c[ud>>2];ie=c[sd>>2]|0;l=i;return ie|0;}else{c[sd>>2]=-20;ie=c[sd>>2]|0;l=i;return ie|0;}return 0;}function yp(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(pp()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=zp(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function zp(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Ap(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+40|0;m=j+36|0;n=j+32|0;o=j+28|0;p=j+24|0;q=j+20|0;r=j+16|0;s=j+12|0;t=j+8|0;u=j+4|0;v=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=c[p>>2];c[v>>2]=$o(c[m>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0;s=(ap(c[v>>2]|0)|0)!=0;r=c[v>>2]|0;if(s){c[k>>2]=r;w=c[k>>2]|0;l=j;return w|0;}if(r>>>0>=(c[q>>2]|0)>>>0){c[k>>2]=-72;w=c[k>>2]|0;l=j;return w|0;}else{c[u>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[v>>2]|0);c[k>>2]=vp(c[n>>2]|0,c[o>>2]|0,c[u>>2]|0,c[q>>2]|0,c[m>>2]|0,c[t>>2]|0)|0;w=c[k>>2]|0;l=j;return w|0;}return 0;}function Bp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;i=l;l=l+160|0;j=i+140|0;k=i+136|0;m=i+132|0;n=i+128|0;o=i+124|0;p=i+120|0;q=i+116|0;r=i+112|0;s=i+108|0;t=i+104|0;u=i+144|0;v=i+100|0;w=i+96|0;x=i+92|0;y=i+88|0;z=i+84|0;A=i+80|0;B=i+76|0;C=i+72|0;D=i+68|0;E=i+64|0;F=i+60|0;G=i+56|0;H=i+52|0;I=i+48|0;J=i+44|0;K=i+40|0;L=i+36|0;M=i+32|0;N=i+28|0;O=i+24|0;P=i+20|0;Q=i+16|0;R=i+12|0;S=i+8|0;T=i+4|0;U=i;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;bp(u,c[k>>2]|0);c[v>>2]=d[u>>0];c[x>>2]=(c[k>>2]|0)+4;c[y>>2]=c[x>>2];c[F>>2]=0;c[A>>2]=(c[o>>2]|0)+(c[F>>2]<<2);c[F>>2]=(c[F>>2]|0)+156;c[B>>2]=(c[o>>2]|0)+(c[F>>2]<<2);c[F>>2]=(c[F>>2]|0)+13;c[C>>2]=(c[o>>2]|0)+(c[F>>2]<<2);c[F>>2]=(c[F>>2]|0)+14;c[D>>2]=(c[o>>2]|0)+(((c[F>>2]<<2>>>0)/2|0)<<1);c[F>>2]=(c[F>>2]|0)+128;c[E>>2]=(c[o>>2]|0)+(c[F>>2]<<2);c[F>>2]=(c[F>>2]|0)+64;if(c[F>>2]<<2>>>0>(c[p>>2]|0)>>>0){c[j>>2]=-44;V=c[j>>2]|0;l=i;return V|0;}c[z>>2]=(c[C>>2]|0)+4;p=c[B>>2]|0;F=p+108|0;do{c[p>>2]=0;p=p+4|0;}while((p|0)<(F|0));if((c[v>>2]|0)>>>0>12){c[j>>2]=-44;V=c[j>>2]|0;l=i;return V|0;}c[w>>2]=fh(c[E>>2]|0,256,c[B>>2]|0,t,q,c[m>>2]|0,c[n>>2]|0)|0;if(ap(c[w>>2]|0)|0){c[j>>2]=c[w>>2];V=c[j>>2]|0;l=i;return V|0;}if((c[q>>2]|0)>>>0>(c[v>>2]|0)>>>0){c[j>>2]=-44;V=c[j>>2]|0;l=i;return V|0;}c[r>>2]=c[q>>2];while(1){if(c[(c[B>>2]|0)+(c[r>>2]<<2)>>2]|0)break;c[r>>2]=(c[r>>2]|0)+-1;}c[H>>2]=0;c[G>>2]=1;while(1){W=c[H>>2]|0;if((c[G>>2]|0)>>>0>=((c[r>>2]|0)+1|0)>>>0)break;c[I>>2]=W;c[H>>2]=(c[H>>2]|0)+(c[(c[B>>2]|0)+(c[G>>2]<<2)>>2]|0);c[(c[z>>2]|0)+(c[G>>2]<<2)>>2]=c[I>>2];c[G>>2]=(c[G>>2]|0)+1;}c[c[z>>2]>>2]=W;c[s>>2]=c[H>>2];c[J>>2]=0;while(1){if((c[J>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;c[K>>2]=d[(c[E>>2]|0)+(c[J>>2]|0)>>0];H=(c[z>>2]|0)+(c[K>>2]<<2)|0;W=c[H>>2]|0;c[H>>2]=W+1;c[L>>2]=W;a[(c[D>>2]|0)+(c[L>>2]<<1)>>0]=c[J>>2];a[(c[D>>2]|0)+(c[L>>2]<<1)+1>>0]=c[K>>2];c[J>>2]=(c[J>>2]|0)+1;}c[c[z>>2]>>2]=0;c[M>>2]=c[A>>2];c[N>>2]=(c[v>>2]|0)-(c[q>>2]|0)-1;c[O>>2]=0;c[P>>2]=1;while(1){if((c[P>>2]|0)>>>0>=((c[r>>2]|0)+1|0)>>>0)break;c[Q>>2]=c[O>>2];c[O>>2]=(c[O>>2]|0)+(c[(c[B>>2]|0)+(c[P>>2]<<2)>>2]<<(c[P>>2]|0)+(c[N>>2]|0));c[(c[M>>2]|0)+(c[P>>2]<<2)>>2]=c[Q>>2];c[P>>2]=(c[P>>2]|0)+1;}c[R>>2]=(c[q>>2]|0)+1-(c[r>>2]|0);c[S>>2]=c[R>>2];while(1){if((c[S>>2]|0)>>>0>=((c[v>>2]|0)-(c[R>>2]|0)+1|0)>>>0)break;c[T>>2]=(c[A>>2]|0)+((c[S>>2]|0)*52|0);c[U>>2]=1;while(1){if((c[U>>2]|0)>>>0>=((c[r>>2]|0)+1|0)>>>0)break;c[(c[T>>2]|0)+(c[U>>2]<<2)>>2]=(c[(c[M>>2]|0)+(c[U>>2]<<2)>>2]|0)>>>(c[S>>2]|0);c[U>>2]=(c[U>>2]|0)+1;}c[S>>2]=(c[S>>2]|0)+1;}Cp(c[y>>2]|0,c[v>>2]|0,c[D>>2]|0,c[s>>2]|0,c[C>>2]|0,c[A>>2]|0,c[r>>2]|0,(c[q>>2]|0)+1|0);a[u+2>>0]=c[v>>2];a[u+1>>0]=1;v=c[k>>2]|0;a[v>>0]=a[u>>0]|0;a[v+1>>0]=a[u+1>>0]|0;a[v+2>>0]=a[u+2>>0]|0;a[v+3>>0]=a[u+3>>0]|0;c[j>>2]=c[w>>2];V=c[j>>2]|0;l=i;return V|0;}function Cp(e,f,g,h,i,j,k,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;n=l;l=l+144|0;o=n+124|0;p=n+120|0;q=n+116|0;r=n+112|0;s=n+108|0;t=n+104|0;u=n+100|0;v=n+96|0;w=n;x=n+92|0;y=n+88|0;z=n+84|0;A=n+132|0;B=n+80|0;C=n+76|0;D=n+72|0;E=n+68|0;F=n+64|0;G=n+60|0;H=n+128|0;I=n+56|0;J=n+52|0;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=k;c[v>>2]=m;c[x>>2]=(c[v>>2]|0)-(c[p>>2]|0);c[y>>2]=(c[v>>2]|0)-(c[u>>2]|0);u=w;m=c[t>>2]|0;k=u+52|0;do{c[u>>2]=c[m>>2];u=u+4|0;m=m+4|0;}while((u|0)<(k|0));c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[r>>2]|0)>>>0)break;b[A>>1]=d[(c[q>>2]|0)+(c[z>>2]<<1)>>0]|0;c[B>>2]=d[(c[q>>2]|0)+(c[z>>2]<<1)+1>>0];c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);c[D>>2]=c[w+(c[B>>2]<<2)>>2];c[E>>2]=1<<(c[p>>2]|0)-(c[C>>2]|0);a:do{if(((c[p>>2]|0)-(c[C>>2]|0)|0)>>>0>=(c[y>>2]|0)>>>0){m=(c[C>>2]|0)+(c[x>>2]|0)|0;c[G>>2]=m;c[G>>2]=(c[G>>2]|0)<1?1:m;c[F>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];Dp((c[o>>2]|0)+(c[D>>2]<<2)|0,(c[p>>2]|0)-(c[C>>2]|0)|0,c[C>>2]|0,(c[t>>2]|0)+((c[C>>2]|0)*52|0)|0,c[G>>2]|0,(c[q>>2]|0)+(c[F>>2]<<1)|0,(c[r>>2]|0)-(c[F>>2]|0)|0,c[v>>2]|0,b[A>>1]|0);}else{Ep(H,b[A>>1]|0);a[H+2>>0]=c[C>>2];a[H+3>>0]=1;c[I>>2]=(c[D>>2]|0)+(c[E>>2]|0);c[J>>2]=c[D>>2];while(1){if((c[J>>2]|0)>>>0>=(c[I>>2]|0)>>>0)break a;m=(c[o>>2]|0)+(c[J>>2]<<2)|0;b[m>>1]=b[H>>1]|0;b[m+2>>1]=b[H+2>>1]|0;c[J>>2]=(c[J>>2]|0)+1;}}}while(0);m=w+(c[B>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+(c[E>>2]|0);c[z>>2]=(c[z>>2]|0)+1;}l=n;return;}function Dp(f,g,h,i,j,k,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;p=l;l=l+144|0;q=p+120|0;r=p+116|0;s=p+112|0;t=p+108|0;u=p+104|0;v=p+100|0;w=p+96|0;x=p+92|0;y=p+128|0;z=p+124|0;A=p;B=p+88|0;C=p+84|0;D=p+80|0;E=p+76|0;F=p+72|0;G=p+68|0;H=p+64|0;I=p+60|0;J=p+56|0;K=p+52|0;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;c[v>>2]=k;c[w>>2]=m;c[x>>2]=n;b[y>>1]=o;o=A;n=c[t>>2]|0;t=o+52|0;do{c[o>>2]=c[n>>2];o=o+4|0;n=n+4|0;}while((o|0)<(t|0));a:do{if((c[u>>2]|0)>1){c[C>>2]=c[A+(c[u>>2]<<2)>>2];Ep(z,b[y>>1]|0);a[z+2>>0]=c[s>>2];a[z+3>>0]=1;c[B>>2]=0;while(1){if((c[B>>2]|0)>>>0>=(c[C>>2]|0)>>>0)break a;n=(c[q>>2]|0)+(c[B>>2]<<2)|0;b[n>>1]=b[z>>1]|0;b[n+2>>1]=b[z+2>>1]|0;c[B>>2]=(c[B>>2]|0)+1;}}}while(0);c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[E>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)>>0];c[F>>2]=d[(c[v>>2]|0)+(c[D>>2]<<1)+1>>0];c[G>>2]=(c[x>>2]|0)-(c[F>>2]|0);c[H>>2]=1<<(c[r>>2]|0)-(c[G>>2]|0);c[I>>2]=c[A+(c[F>>2]<<2)>>2];c[J>>2]=c[I>>2];c[K>>2]=(c[I>>2]|0)+(c[H>>2]|0);Ep(z,(e[y>>1]|0)+(c[E>>2]<<8)&65535);a[z+2>>0]=(c[G>>2]|0)+(c[s>>2]|0);a[z+3>>0]=2;do{B=c[q>>2]|0;C=c[J>>2]|0;c[J>>2]=C+1;u=B+(C<<2)|0;b[u>>1]=b[z>>1]|0;b[u+2>>1]=b[z+2>>1]|0;}while((c[J>>2]|0)>>>0<(c[K>>2]|0)>>>0);u=A+(c[F>>2]<<2)|0;c[u>>2]=(c[u>>2]|0)+(c[H>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}l=p;return;}function Ep(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(pp()|0)!=0;d=c[h>>2]|0;if(f){Fp(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function Fp(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=b[h>>1]|0;h=c[g>>2]|0;a[h>>0]=e;a[h+1>>0]=e>>8;l=f;return;}function Gp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=Hp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=Ip(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function Hp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;i=l;l=l+256|0;j=i+244|0;k=i+240|0;m=i+236|0;n=i+232|0;o=i+228|0;p=i+224|0;q=i+220|0;r=i+216|0;s=i+212|0;t=i+208|0;u=i+204|0;v=i+200|0;w=i+196|0;x=i+192|0;y=i+188|0;z=i+184|0;A=i+180|0;B=i+176|0;C=i+172|0;D=i+168|0;E=i+164|0;F=i+160|0;G=i+156|0;H=i+152|0;I=i+148|0;J=i+144|0;K=i+140|0;L=i+136|0;M=i+132|0;N=i+128|0;O=i+124|0;P=i+120|0;Q=i+116|0;R=i+112|0;S=i+108|0;T=i+104|0;U=i+100|0;V=i+96|0;W=i+92|0;X=i+88|0;Y=i+80|0;Z=i+76|0;_=i+72|0;$=i+68|0;aa=i+64|0;ba=i+60|0;ca=i+40|0;da=i+36|0;ea=i+32|0;fa=i+28|0;ga=i+24|0;ha=i+20|0;ia=i+248|0;ja=i+16|0;ka=i+12|0;la=i+8|0;ma=i+4|0;na=i;c[ja>>2]=b;c[ka>>2]=e;c[la>>2]=f;c[ma>>2]=g;c[na>>2]=h;h=c[ka>>2]|0;ka=c[la>>2]|0;la=c[ma>>2]|0;ma=c[na>>2]|0;c[Z>>2]=c[ja>>2];c[_>>2]=h;c[$>>2]=ka;c[aa>>2]=la;c[ba>>2]=ma;c[da>>2]=fp(ca,c[$>>2]|0,c[aa>>2]|0)|0;if(ap(c[da>>2]|0)|0){c[Y>>2]=c[da>>2];oa=c[Y>>2]|0;l=i;return oa|0;}c[ea>>2]=c[Z>>2];c[fa>>2]=(c[ea>>2]|0)+(c[_>>2]|0);c[ga>>2]=(c[ba>>2]|0)+4;c[ha>>2]=c[ga>>2];bp(ia,c[ba>>2]|0);ba=c[fa>>2]|0;fa=c[ha>>2]|0;ha=d[ia+2>>0]|0;c[T>>2]=c[ea>>2];c[U>>2]=ca;c[V>>2]=ba;c[W>>2]=fa;c[X>>2]=ha;c[i+84>>2]=c[T>>2];while(1){ha=(gp(c[U>>2]|0)|0)==0&1;if(!(ha&(c[T>>2]|0)>>>0<((c[V>>2]|0)+-3|0)>>>0))break;if(hp()|0){ha=c[U>>2]|0;fa=c[W>>2]|0;ba=c[X>>2]|0;c[O>>2]=c[T>>2];c[P>>2]=ha;c[Q>>2]=fa;c[R>>2]=ba;c[S>>2]=ip(c[P>>2]|0,c[R>>2]|0)|0;ba=c[O>>2]|0;fa=(c[Q>>2]|0)+(c[S>>2]<<2)|0;a[ba>>0]=a[fa>>0]|0;a[ba+1>>0]=a[fa+1>>0]|0;jp(c[P>>2]|0,d[(c[Q>>2]|0)+(c[S>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[Q>>2]|0)+(c[S>>2]<<2)+3>>0]|0);}hp()|0;fa=c[U>>2]|0;ba=c[W>>2]|0;ha=c[X>>2]|0;c[J>>2]=c[T>>2];c[K>>2]=fa;c[L>>2]=ba;c[M>>2]=ha;c[N>>2]=ip(c[K>>2]|0,c[M>>2]|0)|0;ha=c[J>>2]|0;ba=(c[L>>2]|0)+(c[N>>2]<<2)|0;a[ha>>0]=a[ba>>0]|0;a[ha+1>>0]=a[ba+1>>0]|0;jp(c[K>>2]|0,d[(c[L>>2]|0)+(c[N>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[L>>2]|0)+(c[N>>2]<<2)+3>>0]|0);if(hp()|0){ba=c[U>>2]|0;ha=c[W>>2]|0;fa=c[X>>2]|0;c[E>>2]=c[T>>2];c[F>>2]=ba;c[G>>2]=ha;c[H>>2]=fa;c[I>>2]=ip(c[F>>2]|0,c[H>>2]|0)|0;fa=c[E>>2]|0;ha=(c[G>>2]|0)+(c[I>>2]<<2)|0;a[fa>>0]=a[ha>>0]|0;a[fa+1>>0]=a[ha+1>>0]|0;jp(c[F>>2]|0,d[(c[G>>2]|0)+(c[I>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[G>>2]|0)+(c[I>>2]<<2)+3>>0]|0);}ha=c[U>>2]|0;fa=c[W>>2]|0;ba=c[X>>2]|0;c[z>>2]=c[T>>2];c[A>>2]=ha;c[B>>2]=fa;c[C>>2]=ba;c[D>>2]=ip(c[A>>2]|0,c[C>>2]|0)|0;ba=c[z>>2]|0;fa=(c[B>>2]|0)+(c[D>>2]<<2)|0;a[ba>>0]=a[fa>>0]|0;a[ba+1>>0]=a[fa+1>>0]|0;jp(c[A>>2]|0,d[(c[B>>2]|0)+(c[D>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[B>>2]|0)+(c[D>>2]<<2)+3>>0]|0);}while(1){D=(gp(c[U>>2]|0)|0)==0&1;if(!(D&(c[T>>2]|0)>>>0<=((c[V>>2]|0)+-2|0)>>>0))break;D=c[U>>2]|0;B=c[W>>2]|0;A=c[X>>2]|0;c[u>>2]=c[T>>2];c[v>>2]=D;c[w>>2]=B;c[x>>2]=A;c[y>>2]=ip(c[v>>2]|0,c[x>>2]|0)|0;A=c[u>>2]|0;B=(c[w>>2]|0)+(c[y>>2]<<2)|0;a[A>>0]=a[B>>0]|0;a[A+1>>0]=a[B+1>>0]|0;jp(c[v>>2]|0,d[(c[w>>2]|0)+(c[y>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[w>>2]|0)+(c[y>>2]<<2)+3>>0]|0);}while(1){pa=c[T>>2]|0;if((c[T>>2]|0)>>>0>((c[V>>2]|0)+-2|0)>>>0)break;y=c[U>>2]|0;w=c[W>>2]|0;v=c[X>>2]|0;c[p>>2]=pa;c[q>>2]=y;c[r>>2]=w;c[s>>2]=v;c[t>>2]=ip(c[q>>2]|0,c[s>>2]|0)|0;v=c[p>>2]|0;w=(c[r>>2]|0)+(c[t>>2]<<2)|0;a[v>>0]=a[w>>0]|0;a[v+1>>0]=a[w+1>>0]|0;jp(c[q>>2]|0,d[(c[r>>2]|0)+(c[t>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[r>>2]|0)+(c[t>>2]<<2)+3>>0]|0);}if(pa>>>0<(c[V>>2]|0)>>>0){V=c[U>>2]|0;U=c[W>>2]|0;W=c[X>>2]|0;c[j>>2]=c[T>>2];c[k>>2]=V;c[m>>2]=U;c[n>>2]=W;c[o>>2]=ip(c[k>>2]|0,c[n>>2]|0)|0;a[c[j>>2]>>0]=a[(c[m>>2]|0)+(c[o>>2]<<2)>>0]|0;j=c[k>>2]|0;if((d[(c[m>>2]|0)+(c[o>>2]<<2)+3>>0]|0|0)!=1){if((c[j+4>>2]|0)>>>0<32?(jp(c[k>>2]|0,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0),(c[(c[k>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[k>>2]|0)+4>>2]=32;}else jp(j,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+1;}if(lp(ca)|0){c[Y>>2]=c[_>>2];oa=c[Y>>2]|0;l=i;return oa|0;}else{c[Y>>2]=-20;oa=c[Y>>2]|0;l=i;return oa|0;}return 0;}function Ip(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;i=l;l=l+256|0;j=i+244|0;k=i+240|0;m=i+236|0;n=i+232|0;o=i+228|0;p=i+224|0;q=i+220|0;r=i+216|0;s=i+212|0;t=i+208|0;u=i+204|0;v=i+200|0;w=i+196|0;x=i+192|0;y=i+188|0;z=i+184|0;A=i+180|0;B=i+176|0;C=i+172|0;D=i+168|0;E=i+164|0;F=i+160|0;G=i+156|0;H=i+152|0;I=i+148|0;J=i+144|0;K=i+140|0;L=i+136|0;M=i+132|0;N=i+128|0;O=i+124|0;P=i+120|0;Q=i+116|0;R=i+112|0;S=i+108|0;T=i+104|0;U=i+100|0;V=i+96|0;W=i+92|0;X=i+88|0;Y=i+80|0;Z=i+76|0;_=i+72|0;$=i+68|0;aa=i+64|0;ba=i+60|0;ca=i+40|0;da=i+36|0;ea=i+32|0;fa=i+28|0;ga=i+24|0;ha=i+20|0;ia=i+248|0;ja=i+16|0;ka=i+12|0;la=i+8|0;ma=i+4|0;na=i;c[ja>>2]=b;c[ka>>2]=e;c[la>>2]=f;c[ma>>2]=g;c[na>>2]=h;h=c[ka>>2]|0;ka=c[la>>2]|0;la=c[ma>>2]|0;ma=c[na>>2]|0;c[Z>>2]=c[ja>>2];c[_>>2]=h;c[$>>2]=ka;c[aa>>2]=la;c[ba>>2]=ma;c[da>>2]=fp(ca,c[$>>2]|0,c[aa>>2]|0)|0;if(ap(c[da>>2]|0)|0){c[Y>>2]=c[da>>2];oa=c[Y>>2]|0;l=i;return oa|0;}c[ea>>2]=c[Z>>2];c[fa>>2]=(c[ea>>2]|0)+(c[_>>2]|0);c[ga>>2]=(c[ba>>2]|0)+4;c[ha>>2]=c[ga>>2];bp(ia,c[ba>>2]|0);ba=c[fa>>2]|0;fa=c[ha>>2]|0;ha=d[ia+2>>0]|0;c[T>>2]=c[ea>>2];c[U>>2]=ca;c[V>>2]=ba;c[W>>2]=fa;c[X>>2]=ha;c[i+84>>2]=c[T>>2];while(1){ha=(gp(c[U>>2]|0)|0)==0&1;if(!(ha&(c[T>>2]|0)>>>0<((c[V>>2]|0)+-3|0)>>>0))break;if(hp()|0){ha=c[U>>2]|0;fa=c[W>>2]|0;ba=c[X>>2]|0;c[O>>2]=c[T>>2];c[P>>2]=ha;c[Q>>2]=fa;c[R>>2]=ba;c[S>>2]=ip(c[P>>2]|0,c[R>>2]|0)|0;ba=c[O>>2]|0;fa=(c[Q>>2]|0)+(c[S>>2]<<2)|0;a[ba>>0]=a[fa>>0]|0;a[ba+1>>0]=a[fa+1>>0]|0;jp(c[P>>2]|0,d[(c[Q>>2]|0)+(c[S>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[Q>>2]|0)+(c[S>>2]<<2)+3>>0]|0);}hp()|0;fa=c[U>>2]|0;ba=c[W>>2]|0;ha=c[X>>2]|0;c[J>>2]=c[T>>2];c[K>>2]=fa;c[L>>2]=ba;c[M>>2]=ha;c[N>>2]=ip(c[K>>2]|0,c[M>>2]|0)|0;ha=c[J>>2]|0;ba=(c[L>>2]|0)+(c[N>>2]<<2)|0;a[ha>>0]=a[ba>>0]|0;a[ha+1>>0]=a[ba+1>>0]|0;jp(c[K>>2]|0,d[(c[L>>2]|0)+(c[N>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[L>>2]|0)+(c[N>>2]<<2)+3>>0]|0);if(hp()|0){ba=c[U>>2]|0;ha=c[W>>2]|0;fa=c[X>>2]|0;c[E>>2]=c[T>>2];c[F>>2]=ba;c[G>>2]=ha;c[H>>2]=fa;c[I>>2]=ip(c[F>>2]|0,c[H>>2]|0)|0;fa=c[E>>2]|0;ha=(c[G>>2]|0)+(c[I>>2]<<2)|0;a[fa>>0]=a[ha>>0]|0;a[fa+1>>0]=a[ha+1>>0]|0;jp(c[F>>2]|0,d[(c[G>>2]|0)+(c[I>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[G>>2]|0)+(c[I>>2]<<2)+3>>0]|0);}ha=c[U>>2]|0;fa=c[W>>2]|0;ba=c[X>>2]|0;c[z>>2]=c[T>>2];c[A>>2]=ha;c[B>>2]=fa;c[C>>2]=ba;c[D>>2]=ip(c[A>>2]|0,c[C>>2]|0)|0;ba=c[z>>2]|0;fa=(c[B>>2]|0)+(c[D>>2]<<2)|0;a[ba>>0]=a[fa>>0]|0;a[ba+1>>0]=a[fa+1>>0]|0;jp(c[A>>2]|0,d[(c[B>>2]|0)+(c[D>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[B>>2]|0)+(c[D>>2]<<2)+3>>0]|0);}while(1){D=(gp(c[U>>2]|0)|0)==0&1;if(!(D&(c[T>>2]|0)>>>0<=((c[V>>2]|0)+-2|0)>>>0))break;D=c[U>>2]|0;B=c[W>>2]|0;A=c[X>>2]|0;c[u>>2]=c[T>>2];c[v>>2]=D;c[w>>2]=B;c[x>>2]=A;c[y>>2]=ip(c[v>>2]|0,c[x>>2]|0)|0;A=c[u>>2]|0;B=(c[w>>2]|0)+(c[y>>2]<<2)|0;a[A>>0]=a[B>>0]|0;a[A+1>>0]=a[B+1>>0]|0;jp(c[v>>2]|0,d[(c[w>>2]|0)+(c[y>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[w>>2]|0)+(c[y>>2]<<2)+3>>0]|0);}while(1){pa=c[T>>2]|0;if((c[T>>2]|0)>>>0>((c[V>>2]|0)+-2|0)>>>0)break;y=c[U>>2]|0;w=c[W>>2]|0;v=c[X>>2]|0;c[p>>2]=pa;c[q>>2]=y;c[r>>2]=w;c[s>>2]=v;c[t>>2]=ip(c[q>>2]|0,c[s>>2]|0)|0;v=c[p>>2]|0;w=(c[r>>2]|0)+(c[t>>2]<<2)|0;a[v>>0]=a[w>>0]|0;a[v+1>>0]=a[w+1>>0]|0;jp(c[q>>2]|0,d[(c[r>>2]|0)+(c[t>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[r>>2]|0)+(c[t>>2]<<2)+3>>0]|0);}if(pa>>>0<(c[V>>2]|0)>>>0){V=c[U>>2]|0;U=c[W>>2]|0;W=c[X>>2]|0;c[j>>2]=c[T>>2];c[k>>2]=V;c[m>>2]=U;c[n>>2]=W;c[o>>2]=ip(c[k>>2]|0,c[n>>2]|0)|0;a[c[j>>2]>>0]=a[(c[m>>2]|0)+(c[o>>2]<<2)>>0]|0;j=c[k>>2]|0;if((d[(c[m>>2]|0)+(c[o>>2]<<2)+3>>0]|0|0)!=1){if((c[j+4>>2]|0)>>>0<32?(jp(c[k>>2]|0,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0),(c[(c[k>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[k>>2]|0)+4>>2]=32;}else jp(j,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+1;}if(lp(ca)|0){c[Y>>2]=c[_>>2];oa=c[Y>>2]|0;l=i;return oa|0;}else{c[Y>>2]=-20;oa=c[Y>>2]|0;l=i;return oa|0;}return 0;}function Jp(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=Kp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=Lp(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function Kp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0;i=l;l=l+1216|0;j=i+1208|0;k=i+1204|0;m=i+1200|0;n=i+1196|0;o=i+1192|0;p=i+1188|0;q=i+1184|0;r=i+1180|0;s=i+1176|0;t=i+1172|0;u=i+1168|0;v=i+1164|0;w=i+1160|0;x=i+1156|0;y=i+1152|0;z=i+1148|0;A=i+1144|0;B=i+1140|0;C=i+1136|0;D=i+1132|0;E=i+1128|0;F=i+1124|0;G=i+1120|0;H=i+1116|0;I=i+1112|0;J=i+1108|0;K=i+1104|0;L=i+1100|0;M=i+1096|0;N=i+1092|0;O=i+1088|0;P=i+1084|0;Q=i+1080|0;R=i+1076|0;S=i+1072|0;T=i+1068|0;U=i+1064|0;V=i+1060|0;W=i+1056|0;X=i+1052|0;Y=i+1048|0;Z=i+1044|0;_=i+1040|0;$=i+1036|0;aa=i+1032|0;ba=i+1028|0;ca=i+1024|0;da=i+1020|0;ea=i+1016|0;fa=i+1012|0;ga=i+1008|0;ha=i+1004|0;ia=i+1e3|0;ja=i+996|0;ka=i+992|0;la=i+988|0;ma=i+984|0;na=i+980|0;oa=i+976|0;pa=i+972|0;qa=i+968|0;ra=i+964|0;sa=i+960|0;ta=i+956|0;ua=i+952|0;va=i+948|0;wa=i+944|0;xa=i+940|0;ya=i+936|0;za=i+932|0;Aa=i+928|0;Ba=i+924|0;Ca=i+920|0;Da=i+916|0;Ea=i+912|0;Fa=i+908|0;Ga=i+904|0;Ha=i+900|0;Ia=i+896|0;Ja=i+892|0;Ka=i+888|0;La=i+884|0;Ma=i+880|0;Na=i+876|0;Oa=i+872|0;Pa=i+868|0;Qa=i+864|0;Ra=i+860|0;Sa=i+856|0;Ta=i+852|0;Ua=i+848|0;Va=i+844|0;Wa=i+840|0;Xa=i+836|0;Ya=i+832|0;Za=i+828|0;_a=i+824|0;$a=i+820|0;ab=i+816|0;bb=i+812|0;cb=i+808|0;db=i+804|0;eb=i+800|0;fb=i+796|0;gb=i+792|0;hb=i+788|0;ib=i+784|0;jb=i+780|0;kb=i+776|0;lb=i+772|0;mb=i+768|0;nb=i+764|0;ob=i+760|0;pb=i+756|0;qb=i+752|0;rb=i+748|0;sb=i+744|0;tb=i+740|0;ub=i+736|0;vb=i+732|0;wb=i+728|0;xb=i+724|0;yb=i+720|0;zb=i+716|0;Ab=i+712|0;Bb=i+708|0;Cb=i+704|0;Db=i+700|0;Eb=i+696|0;Fb=i+692|0;Gb=i+688|0;Hb=i+684|0;Ib=i+680|0;Jb=i+676|0;Kb=i+672|0;Lb=i+668|0;Mb=i+664|0;Nb=i+660|0;Ob=i+656|0;Pb=i+652|0;Qb=i+648|0;Rb=i+644|0;Sb=i+640|0;Tb=i+636|0;Ub=i+632|0;Vb=i+628|0;Wb=i+624|0;Xb=i+620|0;Yb=i+616|0;Zb=i+612|0;_b=i+608|0;$b=i+604|0;ac=i+600|0;bc=i+596|0;cc=i+592|0;dc=i+588|0;ec=i+584|0;fc=i+580|0;gc=i+576|0;hc=i+572|0;ic=i+568|0;jc=i+564|0;kc=i+560|0;lc=i+556|0;mc=i+552|0;nc=i+548|0;oc=i+544|0;pc=i+540|0;qc=i+536|0;rc=i+532|0;sc=i+528|0;tc=i+524|0;uc=i+520|0;vc=i+516|0;wc=i+512|0;xc=i+508|0;yc=i+504|0;zc=i+500|0;Ac=i+496|0;Bc=i+492|0;Cc=i+488|0;Dc=i+484|0;Ec=i+480|0;Fc=i+476|0;Gc=i+472|0;Hc=i+468|0;Ic=i+464|0;Jc=i+460|0;Kc=i+456|0;Lc=i+452|0;Mc=i+448|0;Nc=i+444|0;Oc=i+440|0;Pc=i+436|0;Qc=i+432|0;Rc=i+428|0;Sc=i+424|0;Tc=i+420|0;Uc=i+416|0;Vc=i+412|0;Wc=i+408|0;Xc=i+404|0;Yc=i+400|0;Zc=i+396|0;_c=i+392|0;$c=i+388|0;ad=i+384|0;bd=i+380|0;cd=i+376|0;dd=i+372|0;ed=i+368|0;fd=i+364|0;gd=i+360|0;hd=i+356|0;id=i+352|0;jd=i+348|0;kd=i+344|0;ld=i+340|0;md=i+336|0;nd=i+332|0;od=i+328|0;pd=i+324|0;qd=i+320|0;rd=i+316|0;sd=i+312|0;td=i+308|0;ud=i+304|0;vd=i+300|0;wd=i+296|0;xd=i+292|0;yd=i+288|0;zd=i+284|0;Ad=i+280|0;Bd=i+276|0;Cd=i+272|0;Dd=i+268|0;Ed=i+264|0;Fd=i+260|0;Gd=i+256|0;Hd=i+252|0;Id=i+248|0;Jd=i+244|0;Kd=i+240|0;Ld=i+236|0;Md=i+232|0;Nd=i+228|0;Od=i+224|0;Pd=i+220|0;Qd=i+216|0;Rd=i+212|0;Sd=i+208|0;Td=i+204|0;Ud=i+200|0;Vd=i+196|0;Wd=i+192|0;Xd=i+172|0;Yd=i+152|0;Zd=i+132|0;_d=i+112|0;$d=i+108|0;ae=i+104|0;be=i+100|0;ce=i+96|0;de=i+92|0;ee=i+88|0;fe=i+84|0;ge=i+80|0;he=i+76|0;ie=i+72|0;je=i+68|0;ke=i+64|0;le=i+60|0;me=i+56|0;ne=i+52|0;oe=i+48|0;pe=i+44|0;qe=i+1212|0;re=i+40|0;se=i+36|0;te=i+32|0;ue=i+28|0;ve=i+24|0;we=i+20|0;xe=i+16|0;ye=i+12|0;ze=i+8|0;Ae=i+4|0;Be=i;c[xe>>2]=b;c[ye>>2]=e;c[ze>>2]=f;c[Ae>>2]=g;c[Be>>2]=h;h=c[ye>>2]|0;ye=c[ze>>2]|0;ze=c[Ae>>2]|0;Ae=c[Be>>2]|0;c[Nd>>2]=c[xe>>2];c[Od>>2]=h;c[Pd>>2]=ye;c[Qd>>2]=ze;c[Rd>>2]=Ae;if((c[Qd>>2]|0)>>>0<10){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}c[Sd>>2]=c[Pd>>2];c[Td>>2]=c[Nd>>2];c[Ud>>2]=(c[Td>>2]|0)+(c[Od>>2]|0);c[Vd>>2]=(c[Rd>>2]|0)+4;c[Wd>>2]=c[Vd>>2];c[$d>>2]=(yp(c[Sd>>2]|0)|0)&65535;c[ae>>2]=(yp((c[Sd>>2]|0)+2|0)|0)&65535;c[be>>2]=(yp((c[Sd>>2]|0)+4|0)|0)&65535;c[ce>>2]=(c[Qd>>2]|0)-((c[$d>>2]|0)+(c[ae>>2]|0)+(c[be>>2]|0)+6);c[de>>2]=(c[Sd>>2]|0)+6;c[ee>>2]=(c[de>>2]|0)+(c[$d>>2]|0);c[fe>>2]=(c[ee>>2]|0)+(c[ae>>2]|0);c[ge>>2]=(c[fe>>2]|0)+(c[be>>2]|0);c[he>>2]=(((c[Od>>2]|0)+3|0)>>>0)/4|0;c[ie>>2]=(c[Td>>2]|0)+(c[he>>2]|0);c[je>>2]=(c[ie>>2]|0)+(c[he>>2]|0);c[ke>>2]=(c[je>>2]|0)+(c[he>>2]|0);c[le>>2]=c[Td>>2];c[me>>2]=c[ie>>2];c[ne>>2]=c[je>>2];c[oe>>2]=c[ke>>2];bp(qe,c[Rd>>2]|0);c[re>>2]=d[qe+2>>0];if((c[ce>>2]|0)>>>0>(c[Qd>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}c[se>>2]=fp(Xd,c[de>>2]|0,c[$d>>2]|0)|0;if(ap(c[se>>2]|0)|0){c[Md>>2]=c[se>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[te>>2]=fp(Yd,c[ee>>2]|0,c[ae>>2]|0)|0;if(ap(c[te>>2]|0)|0){c[Md>>2]=c[te>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[ue>>2]=fp(Zd,c[fe>>2]|0,c[be>>2]|0)|0;if(ap(c[ue>>2]|0)|0){c[Md>>2]=c[ue>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[ve>>2]=fp(_d,c[ge>>2]|0,c[ce>>2]|0)|0;if(ap(c[ve>>2]|0)|0){c[Md>>2]=c[ve>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}ve=gp(Xd)|0;ce=ve|(gp(Yd)|0);ve=ce|(gp(Zd)|0);c[pe>>2]=ve|(gp(_d)|0);while(1){if(!(((c[pe>>2]|0)==0?(c[oe>>2]|0)>>>0<((c[Ud>>2]|0)+-3|0)>>>0:0)|0))break;if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Hd>>2]=c[le>>2];c[Id>>2]=Xd;c[Jd>>2]=ve;c[Kd>>2]=ce;c[Ld>>2]=ip(c[Id>>2]|0,c[Kd>>2]|0)|0;ce=c[Hd>>2]|0;ve=(c[Jd>>2]|0)+(c[Ld>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Id>>2]|0,d[(c[Jd>>2]|0)+(c[Ld>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Jd>>2]|0)+(c[Ld>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Cd>>2]=c[me>>2];c[Dd>>2]=Yd;c[Ed>>2]=ve;c[Fd>>2]=ce;c[Gd>>2]=ip(c[Dd>>2]|0,c[Fd>>2]|0)|0;ce=c[Cd>>2]|0;ve=(c[Ed>>2]|0)+(c[Gd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Dd>>2]|0,d[(c[Ed>>2]|0)+(c[Gd>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[Ed>>2]|0)+(c[Gd>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[xd>>2]=c[ne>>2];c[yd>>2]=Zd;c[zd>>2]=ve;c[Ad>>2]=ce;c[Bd>>2]=ip(c[yd>>2]|0,c[Ad>>2]|0)|0;ce=c[xd>>2]|0;ve=(c[zd>>2]|0)+(c[Bd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[yd>>2]|0,d[(c[zd>>2]|0)+(c[Bd>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[zd>>2]|0)+(c[Bd>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[sd>>2]=c[oe>>2];c[td>>2]=_d;c[ud>>2]=ve;c[vd>>2]=ce;c[wd>>2]=ip(c[td>>2]|0,c[vd>>2]|0)|0;ce=c[sd>>2]|0;ve=(c[ud>>2]|0)+(c[wd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[td>>2]|0,d[(c[ud>>2]|0)+(c[wd>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[ud>>2]|0)+(c[wd>>2]<<2)+3>>0]|0);}hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[nd>>2]=c[le>>2];c[od>>2]=Xd;c[pd>>2]=ve;c[qd>>2]=ce;c[rd>>2]=ip(c[od>>2]|0,c[qd>>2]|0)|0;ce=c[nd>>2]|0;ve=(c[pd>>2]|0)+(c[rd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[od>>2]|0,d[(c[pd>>2]|0)+(c[rd>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[pd>>2]|0)+(c[rd>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[id>>2]=c[me>>2];c[jd>>2]=Yd;c[kd>>2]=ve;c[ld>>2]=ce;c[md>>2]=ip(c[jd>>2]|0,c[ld>>2]|0)|0;ce=c[id>>2]|0;ve=(c[kd>>2]|0)+(c[md>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[jd>>2]|0,d[(c[kd>>2]|0)+(c[md>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[kd>>2]|0)+(c[md>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[dd>>2]=c[ne>>2];c[ed>>2]=Zd;c[fd>>2]=ve;c[gd>>2]=ce;c[hd>>2]=ip(c[ed>>2]|0,c[gd>>2]|0)|0;ce=c[dd>>2]|0;ve=(c[fd>>2]|0)+(c[hd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[ed>>2]|0,d[(c[fd>>2]|0)+(c[hd>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[fd>>2]|0)+(c[hd>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[_c>>2]=c[oe>>2];c[$c>>2]=_d;c[ad>>2]=ve;c[bd>>2]=ce;c[cd>>2]=ip(c[$c>>2]|0,c[bd>>2]|0)|0;ce=c[_c>>2]|0;ve=(c[ad>>2]|0)+(c[cd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[$c>>2]|0,d[(c[ad>>2]|0)+(c[cd>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[ad>>2]|0)+(c[cd>>2]<<2)+3>>0]|0);if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Vc>>2]=c[le>>2];c[Wc>>2]=Xd;c[Xc>>2]=ve;c[Yc>>2]=ce;c[Zc>>2]=ip(c[Wc>>2]|0,c[Yc>>2]|0)|0;ce=c[Vc>>2]|0;ve=(c[Xc>>2]|0)+(c[Zc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Wc>>2]|0,d[(c[Xc>>2]|0)+(c[Zc>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Xc>>2]|0)+(c[Zc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Qc>>2]=c[me>>2];c[Rc>>2]=Yd;c[Sc>>2]=ve;c[Tc>>2]=ce;c[Uc>>2]=ip(c[Rc>>2]|0,c[Tc>>2]|0)|0;ce=c[Qc>>2]|0;ve=(c[Sc>>2]|0)+(c[Uc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Rc>>2]|0,d[(c[Sc>>2]|0)+(c[Uc>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[Sc>>2]|0)+(c[Uc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Lc>>2]=c[ne>>2];c[Mc>>2]=Zd;c[Nc>>2]=ve;c[Oc>>2]=ce;c[Pc>>2]=ip(c[Mc>>2]|0,c[Oc>>2]|0)|0;ce=c[Lc>>2]|0;ve=(c[Nc>>2]|0)+(c[Pc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Mc>>2]|0,d[(c[Nc>>2]|0)+(c[Pc>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[Nc>>2]|0)+(c[Pc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Gc>>2]=c[oe>>2];c[Hc>>2]=_d;c[Ic>>2]=ve;c[Jc>>2]=ce;c[Kc>>2]=ip(c[Hc>>2]|0,c[Jc>>2]|0)|0;ce=c[Gc>>2]|0;ve=(c[Ic>>2]|0)+(c[Kc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Hc>>2]|0,d[(c[Ic>>2]|0)+(c[Kc>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[Ic>>2]|0)+(c[Kc>>2]<<2)+3>>0]|0);}ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Bc>>2]=c[le>>2];c[Cc>>2]=Xd;c[Dc>>2]=ve;c[Ec>>2]=ce;c[Fc>>2]=ip(c[Cc>>2]|0,c[Ec>>2]|0)|0;ce=c[Bc>>2]|0;ve=(c[Dc>>2]|0)+(c[Fc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Cc>>2]|0,d[(c[Dc>>2]|0)+(c[Fc>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Dc>>2]|0)+(c[Fc>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[wc>>2]=c[me>>2];c[xc>>2]=Yd;c[yc>>2]=ve;c[zc>>2]=ce;c[Ac>>2]=ip(c[xc>>2]|0,c[zc>>2]|0)|0;ce=c[wc>>2]|0;ve=(c[yc>>2]|0)+(c[Ac>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[xc>>2]|0,d[(c[yc>>2]|0)+(c[Ac>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[yc>>2]|0)+(c[Ac>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[rc>>2]=c[ne>>2];c[sc>>2]=Zd;c[tc>>2]=ve;c[uc>>2]=ce;c[vc>>2]=ip(c[sc>>2]|0,c[uc>>2]|0)|0;ce=c[rc>>2]|0;ve=(c[tc>>2]|0)+(c[vc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[sc>>2]|0,d[(c[tc>>2]|0)+(c[vc>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[tc>>2]|0)+(c[vc>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[mc>>2]=c[oe>>2];c[nc>>2]=_d;c[oc>>2]=ve;c[pc>>2]=ce;c[qc>>2]=ip(c[nc>>2]|0,c[pc>>2]|0)|0;ce=c[mc>>2]|0;ve=(c[oc>>2]|0)+(c[qc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[nc>>2]|0,d[(c[oc>>2]|0)+(c[qc>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[oc>>2]|0)+(c[qc>>2]<<2)+3>>0]|0);ve=gp(Xd)|0;ce=ve|(gp(Yd)|0);ve=ce|(gp(Zd)|0);c[pe>>2]=ve|(gp(_d)|0);}if((c[le>>2]|0)>>>0>(c[ie>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}if((c[me>>2]|0)>>>0>(c[je>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}if((c[ne>>2]|0)>>>0>(c[ke>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}pe=c[ie>>2]|0;ie=c[Wd>>2]|0;qc=c[re>>2]|0;c[gc>>2]=c[le>>2];c[hc>>2]=Xd;c[ic>>2]=pe;c[jc>>2]=ie;c[kc>>2]=qc;c[lc>>2]=c[gc>>2];while(1){lc=(gp(c[hc>>2]|0)|0)==0&1;if(!(lc&(c[gc>>2]|0)>>>0<((c[ic>>2]|0)+-3|0)>>>0))break;if(hp()|0){lc=c[hc>>2]|0;qc=c[jc>>2]|0;ie=c[kc>>2]|0;c[bc>>2]=c[gc>>2];c[cc>>2]=lc;c[dc>>2]=qc;c[ec>>2]=ie;c[fc>>2]=ip(c[cc>>2]|0,c[ec>>2]|0)|0;ie=c[bc>>2]|0;qc=(c[dc>>2]|0)+(c[fc>>2]<<2)|0;a[ie>>0]=a[qc>>0]|0;a[ie+1>>0]=a[qc+1>>0]|0;jp(c[cc>>2]|0,d[(c[dc>>2]|0)+(c[fc>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[dc>>2]|0)+(c[fc>>2]<<2)+3>>0]|0);}hp()|0;qc=c[hc>>2]|0;ie=c[jc>>2]|0;lc=c[kc>>2]|0;c[Yb>>2]=c[gc>>2];c[Zb>>2]=qc;c[_b>>2]=ie;c[$b>>2]=lc;c[ac>>2]=ip(c[Zb>>2]|0,c[$b>>2]|0)|0;lc=c[Yb>>2]|0;ie=(c[_b>>2]|0)+(c[ac>>2]<<2)|0;a[lc>>0]=a[ie>>0]|0;a[lc+1>>0]=a[ie+1>>0]|0;jp(c[Zb>>2]|0,d[(c[_b>>2]|0)+(c[ac>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[_b>>2]|0)+(c[ac>>2]<<2)+3>>0]|0);if(hp()|0){ie=c[hc>>2]|0;lc=c[jc>>2]|0;qc=c[kc>>2]|0;c[Tb>>2]=c[gc>>2];c[Ub>>2]=ie;c[Vb>>2]=lc;c[Wb>>2]=qc;c[Xb>>2]=ip(c[Ub>>2]|0,c[Wb>>2]|0)|0;qc=c[Tb>>2]|0;lc=(c[Vb>>2]|0)+(c[Xb>>2]<<2)|0;a[qc>>0]=a[lc>>0]|0;a[qc+1>>0]=a[lc+1>>0]|0;jp(c[Ub>>2]|0,d[(c[Vb>>2]|0)+(c[Xb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Vb>>2]|0)+(c[Xb>>2]<<2)+3>>0]|0);}lc=c[hc>>2]|0;qc=c[jc>>2]|0;ie=c[kc>>2]|0;c[Ob>>2]=c[gc>>2];c[Pb>>2]=lc;c[Qb>>2]=qc;c[Rb>>2]=ie;c[Sb>>2]=ip(c[Pb>>2]|0,c[Rb>>2]|0)|0;ie=c[Ob>>2]|0;qc=(c[Qb>>2]|0)+(c[Sb>>2]<<2)|0;a[ie>>0]=a[qc>>0]|0;a[ie+1>>0]=a[qc+1>>0]|0;jp(c[Pb>>2]|0,d[(c[Qb>>2]|0)+(c[Sb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Qb>>2]|0)+(c[Sb>>2]<<2)+3>>0]|0);}while(1){Sb=(gp(c[hc>>2]|0)|0)==0&1;if(!(Sb&(c[gc>>2]|0)>>>0<=((c[ic>>2]|0)+-2|0)>>>0))break;Sb=c[hc>>2]|0;Qb=c[jc>>2]|0;Pb=c[kc>>2]|0;c[Jb>>2]=c[gc>>2];c[Kb>>2]=Sb;c[Lb>>2]=Qb;c[Mb>>2]=Pb;c[Nb>>2]=ip(c[Kb>>2]|0,c[Mb>>2]|0)|0;Pb=c[Jb>>2]|0;Qb=(c[Lb>>2]|0)+(c[Nb>>2]<<2)|0;a[Pb>>0]=a[Qb>>0]|0;a[Pb+1>>0]=a[Qb+1>>0]|0;jp(c[Kb>>2]|0,d[(c[Lb>>2]|0)+(c[Nb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Lb>>2]|0)+(c[Nb>>2]<<2)+3>>0]|0);}while(1){De=c[gc>>2]|0;if((c[gc>>2]|0)>>>0>((c[ic>>2]|0)+-2|0)>>>0)break;Nb=c[hc>>2]|0;Lb=c[jc>>2]|0;Kb=c[kc>>2]|0;c[Eb>>2]=De;c[Fb>>2]=Nb;c[Gb>>2]=Lb;c[Hb>>2]=Kb;c[Ib>>2]=ip(c[Fb>>2]|0,c[Hb>>2]|0)|0;Kb=c[Eb>>2]|0;Lb=(c[Gb>>2]|0)+(c[Ib>>2]<<2)|0;a[Kb>>0]=a[Lb>>0]|0;a[Kb+1>>0]=a[Lb+1>>0]|0;jp(c[Fb>>2]|0,d[(c[Gb>>2]|0)+(c[Ib>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Gb>>2]|0)+(c[Ib>>2]<<2)+3>>0]|0);}if(De>>>0<(c[ic>>2]|0)>>>0){ic=c[hc>>2]|0;hc=c[jc>>2]|0;jc=c[kc>>2]|0;c[zb>>2]=c[gc>>2];c[Ab>>2]=ic;c[Bb>>2]=hc;c[Cb>>2]=jc;c[Db>>2]=ip(c[Ab>>2]|0,c[Cb>>2]|0)|0;a[c[zb>>2]>>0]=a[(c[Bb>>2]|0)+(c[Db>>2]<<2)>>0]|0;zb=c[Ab>>2]|0;if((d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+3>>0]|0|0)!=1){if((c[zb+4>>2]|0)>>>0<32?(jp(c[Ab>>2]|0,d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+2>>0]|0),(c[(c[Ab>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[Ab>>2]|0)+4>>2]=32;}else jp(zb,d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+1;}gc=c[je>>2]|0;je=c[Wd>>2]|0;Db=c[re>>2]|0;c[tb>>2]=c[me>>2];c[ub>>2]=Yd;c[vb>>2]=gc;c[wb>>2]=je;c[xb>>2]=Db;c[yb>>2]=c[tb>>2];while(1){yb=(gp(c[ub>>2]|0)|0)==0&1;if(!(yb&(c[tb>>2]|0)>>>0<((c[vb>>2]|0)+-3|0)>>>0))break;if(hp()|0){yb=c[ub>>2]|0;Db=c[wb>>2]|0;je=c[xb>>2]|0;c[ob>>2]=c[tb>>2];c[pb>>2]=yb;c[qb>>2]=Db;c[rb>>2]=je;c[sb>>2]=ip(c[pb>>2]|0,c[rb>>2]|0)|0;je=c[ob>>2]|0;Db=(c[qb>>2]|0)+(c[sb>>2]<<2)|0;a[je>>0]=a[Db>>0]|0;a[je+1>>0]=a[Db+1>>0]|0;jp(c[pb>>2]|0,d[(c[qb>>2]|0)+(c[sb>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[qb>>2]|0)+(c[sb>>2]<<2)+3>>0]|0);}hp()|0;Db=c[ub>>2]|0;je=c[wb>>2]|0;yb=c[xb>>2]|0;c[jb>>2]=c[tb>>2];c[kb>>2]=Db;c[lb>>2]=je;c[mb>>2]=yb;c[nb>>2]=ip(c[kb>>2]|0,c[mb>>2]|0)|0;yb=c[jb>>2]|0;je=(c[lb>>2]|0)+(c[nb>>2]<<2)|0;a[yb>>0]=a[je>>0]|0;a[yb+1>>0]=a[je+1>>0]|0;jp(c[kb>>2]|0,d[(c[lb>>2]|0)+(c[nb>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[lb>>2]|0)+(c[nb>>2]<<2)+3>>0]|0);if(hp()|0){je=c[ub>>2]|0;yb=c[wb>>2]|0;Db=c[xb>>2]|0;c[eb>>2]=c[tb>>2];c[fb>>2]=je;c[gb>>2]=yb;c[hb>>2]=Db;c[ib>>2]=ip(c[fb>>2]|0,c[hb>>2]|0)|0;Db=c[eb>>2]|0;yb=(c[gb>>2]|0)+(c[ib>>2]<<2)|0;a[Db>>0]=a[yb>>0]|0;a[Db+1>>0]=a[yb+1>>0]|0;jp(c[fb>>2]|0,d[(c[gb>>2]|0)+(c[ib>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[gb>>2]|0)+(c[ib>>2]<<2)+3>>0]|0);}yb=c[ub>>2]|0;Db=c[wb>>2]|0;je=c[xb>>2]|0;c[$a>>2]=c[tb>>2];c[ab>>2]=yb;c[bb>>2]=Db;c[cb>>2]=je;c[db>>2]=ip(c[ab>>2]|0,c[cb>>2]|0)|0;je=c[$a>>2]|0;Db=(c[bb>>2]|0)+(c[db>>2]<<2)|0;a[je>>0]=a[Db>>0]|0;a[je+1>>0]=a[Db+1>>0]|0;jp(c[ab>>2]|0,d[(c[bb>>2]|0)+(c[db>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[bb>>2]|0)+(c[db>>2]<<2)+3>>0]|0);}while(1){db=(gp(c[ub>>2]|0)|0)==0&1;if(!(db&(c[tb>>2]|0)>>>0<=((c[vb>>2]|0)+-2|0)>>>0))break;db=c[ub>>2]|0;bb=c[wb>>2]|0;ab=c[xb>>2]|0;c[Wa>>2]=c[tb>>2];c[Xa>>2]=db;c[Ya>>2]=bb;c[Za>>2]=ab;c[_a>>2]=ip(c[Xa>>2]|0,c[Za>>2]|0)|0;ab=c[Wa>>2]|0;bb=(c[Ya>>2]|0)+(c[_a>>2]<<2)|0;a[ab>>0]=a[bb>>0]|0;a[ab+1>>0]=a[bb+1>>0]|0;jp(c[Xa>>2]|0,d[(c[Ya>>2]|0)+(c[_a>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[Ya>>2]|0)+(c[_a>>2]<<2)+3>>0]|0);}while(1){Ee=c[tb>>2]|0;if((c[tb>>2]|0)>>>0>((c[vb>>2]|0)+-2|0)>>>0)break;_a=c[ub>>2]|0;Ya=c[wb>>2]|0;Xa=c[xb>>2]|0;c[Ra>>2]=Ee;c[Sa>>2]=_a;c[Ta>>2]=Ya;c[Ua>>2]=Xa;c[Va>>2]=ip(c[Sa>>2]|0,c[Ua>>2]|0)|0;Xa=c[Ra>>2]|0;Ya=(c[Ta>>2]|0)+(c[Va>>2]<<2)|0;a[Xa>>0]=a[Ya>>0]|0;a[Xa+1>>0]=a[Ya+1>>0]|0;jp(c[Sa>>2]|0,d[(c[Ta>>2]|0)+(c[Va>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[Ta>>2]|0)+(c[Va>>2]<<2)+3>>0]|0);}if(Ee>>>0<(c[vb>>2]|0)>>>0){vb=c[ub>>2]|0;ub=c[wb>>2]|0;wb=c[xb>>2]|0;c[Ma>>2]=c[tb>>2];c[Na>>2]=vb;c[Oa>>2]=ub;c[Pa>>2]=wb;c[Qa>>2]=ip(c[Na>>2]|0,c[Pa>>2]|0)|0;a[c[Ma>>2]>>0]=a[(c[Oa>>2]|0)+(c[Qa>>2]<<2)>>0]|0;Ma=c[Na>>2]|0;if((d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+3>>0]|0|0)!=1){if((c[Ma+4>>2]|0)>>>0<32?(jp(c[Na>>2]|0,d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+2>>0]|0),(c[(c[Na>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[Na>>2]|0)+4>>2]=32;}else jp(Ma,d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+1;}tb=c[ke>>2]|0;ke=c[Wd>>2]|0;Qa=c[re>>2]|0;c[Ga>>2]=c[ne>>2];c[Ha>>2]=Zd;c[Ia>>2]=tb;c[Ja>>2]=ke;c[Ka>>2]=Qa;c[La>>2]=c[Ga>>2];while(1){La=(gp(c[Ha>>2]|0)|0)==0&1;if(!(La&(c[Ga>>2]|0)>>>0<((c[Ia>>2]|0)+-3|0)>>>0))break;if(hp()|0){La=c[Ha>>2]|0;Qa=c[Ja>>2]|0;ke=c[Ka>>2]|0;c[Ba>>2]=c[Ga>>2];c[Ca>>2]=La;c[Da>>2]=Qa;c[Ea>>2]=ke;c[Fa>>2]=ip(c[Ca>>2]|0,c[Ea>>2]|0)|0;ke=c[Ba>>2]|0;Qa=(c[Da>>2]|0)+(c[Fa>>2]<<2)|0;a[ke>>0]=a[Qa>>0]|0;a[ke+1>>0]=a[Qa+1>>0]|0;jp(c[Ca>>2]|0,d[(c[Da>>2]|0)+(c[Fa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[Da>>2]|0)+(c[Fa>>2]<<2)+3>>0]|0);}hp()|0;Qa=c[Ha>>2]|0;ke=c[Ja>>2]|0;La=c[Ka>>2]|0;c[wa>>2]=c[Ga>>2];c[xa>>2]=Qa;c[ya>>2]=ke;c[za>>2]=La;c[Aa>>2]=ip(c[xa>>2]|0,c[za>>2]|0)|0;La=c[wa>>2]|0;ke=(c[ya>>2]|0)+(c[Aa>>2]<<2)|0;a[La>>0]=a[ke>>0]|0;a[La+1>>0]=a[ke+1>>0]|0;jp(c[xa>>2]|0,d[(c[ya>>2]|0)+(c[Aa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ya>>2]|0)+(c[Aa>>2]<<2)+3>>0]|0);if(hp()|0){ke=c[Ha>>2]|0;La=c[Ja>>2]|0;Qa=c[Ka>>2]|0;c[ra>>2]=c[Ga>>2];c[sa>>2]=ke;c[ta>>2]=La;c[ua>>2]=Qa;c[va>>2]=ip(c[sa>>2]|0,c[ua>>2]|0)|0;Qa=c[ra>>2]|0;La=(c[ta>>2]|0)+(c[va>>2]<<2)|0;a[Qa>>0]=a[La>>0]|0;a[Qa+1>>0]=a[La+1>>0]|0;jp(c[sa>>2]|0,d[(c[ta>>2]|0)+(c[va>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ta>>2]|0)+(c[va>>2]<<2)+3>>0]|0);}La=c[Ha>>2]|0;Qa=c[Ja>>2]|0;ke=c[Ka>>2]|0;c[ma>>2]=c[Ga>>2];c[na>>2]=La;c[oa>>2]=Qa;c[pa>>2]=ke;c[qa>>2]=ip(c[na>>2]|0,c[pa>>2]|0)|0;ke=c[ma>>2]|0;Qa=(c[oa>>2]|0)+(c[qa>>2]<<2)|0;a[ke>>0]=a[Qa>>0]|0;a[ke+1>>0]=a[Qa+1>>0]|0;jp(c[na>>2]|0,d[(c[oa>>2]|0)+(c[qa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[oa>>2]|0)+(c[qa>>2]<<2)+3>>0]|0);}while(1){qa=(gp(c[Ha>>2]|0)|0)==0&1;if(!(qa&(c[Ga>>2]|0)>>>0<=((c[Ia>>2]|0)+-2|0)>>>0))break;qa=c[Ha>>2]|0;oa=c[Ja>>2]|0;na=c[Ka>>2]|0;c[ha>>2]=c[Ga>>2];c[ia>>2]=qa;c[ja>>2]=oa;c[ka>>2]=na;c[la>>2]=ip(c[ia>>2]|0,c[ka>>2]|0)|0;na=c[ha>>2]|0;oa=(c[ja>>2]|0)+(c[la>>2]<<2)|0;a[na>>0]=a[oa>>0]|0;a[na+1>>0]=a[oa+1>>0]|0;jp(c[ia>>2]|0,d[(c[ja>>2]|0)+(c[la>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ja>>2]|0)+(c[la>>2]<<2)+3>>0]|0);}while(1){Fe=c[Ga>>2]|0;if((c[Ga>>2]|0)>>>0>((c[Ia>>2]|0)+-2|0)>>>0)break;la=c[Ha>>2]|0;ja=c[Ja>>2]|0;ia=c[Ka>>2]|0;c[ca>>2]=Fe;c[da>>2]=la;c[ea>>2]=ja;c[fa>>2]=ia;c[ga>>2]=ip(c[da>>2]|0,c[fa>>2]|0)|0;ia=c[ca>>2]|0;ja=(c[ea>>2]|0)+(c[ga>>2]<<2)|0;a[ia>>0]=a[ja>>0]|0;a[ia+1>>0]=a[ja+1>>0]|0;jp(c[da>>2]|0,d[(c[ea>>2]|0)+(c[ga>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ea>>2]|0)+(c[ga>>2]<<2)+3>>0]|0);}if(Fe>>>0<(c[Ia>>2]|0)>>>0){Ia=c[Ha>>2]|0;Ha=c[Ja>>2]|0;Ja=c[Ka>>2]|0;c[Z>>2]=c[Ga>>2];c[_>>2]=Ia;c[$>>2]=Ha;c[aa>>2]=Ja;c[ba>>2]=ip(c[_>>2]|0,c[aa>>2]|0)|0;a[c[Z>>2]>>0]=a[(c[$>>2]|0)+(c[ba>>2]<<2)>>0]|0;Z=c[_>>2]|0;if((d[(c[$>>2]|0)+(c[ba>>2]<<2)+3>>0]|0|0)!=1){if((c[Z+4>>2]|0)>>>0<32?(jp(c[_>>2]|0,d[(c[$>>2]|0)+(c[ba>>2]<<2)+2>>0]|0),(c[(c[_>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[_>>2]|0)+4>>2]=32;}else jp(Z,d[(c[$>>2]|0)+(c[ba>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+1;}Ga=c[Ud>>2]|0;Ud=c[Wd>>2]|0;Wd=c[re>>2]|0;c[T>>2]=c[oe>>2];c[U>>2]=_d;c[V>>2]=Ga;c[W>>2]=Ud;c[X>>2]=Wd;c[Y>>2]=c[T>>2];while(1){Y=(gp(c[U>>2]|0)|0)==0&1;if(!(Y&(c[T>>2]|0)>>>0<((c[V>>2]|0)+-3|0)>>>0))break;if(hp()|0){Y=c[U>>2]|0;Wd=c[W>>2]|0;Ud=c[X>>2]|0;c[O>>2]=c[T>>2];c[P>>2]=Y;c[Q>>2]=Wd;c[R>>2]=Ud;c[S>>2]=ip(c[P>>2]|0,c[R>>2]|0)|0;Ud=c[O>>2]|0;Wd=(c[Q>>2]|0)+(c[S>>2]<<2)|0;a[Ud>>0]=a[Wd>>0]|0;a[Ud+1>>0]=a[Wd+1>>0]|0;jp(c[P>>2]|0,d[(c[Q>>2]|0)+(c[S>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[Q>>2]|0)+(c[S>>2]<<2)+3>>0]|0);}hp()|0;Wd=c[U>>2]|0;Ud=c[W>>2]|0;Y=c[X>>2]|0;c[J>>2]=c[T>>2];c[K>>2]=Wd;c[L>>2]=Ud;c[M>>2]=Y;c[N>>2]=ip(c[K>>2]|0,c[M>>2]|0)|0;Y=c[J>>2]|0;Ud=(c[L>>2]|0)+(c[N>>2]<<2)|0;a[Y>>0]=a[Ud>>0]|0;a[Y+1>>0]=a[Ud+1>>0]|0;jp(c[K>>2]|0,d[(c[L>>2]|0)+(c[N>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[L>>2]|0)+(c[N>>2]<<2)+3>>0]|0);if(hp()|0){Ud=c[U>>2]|0;Y=c[W>>2]|0;Wd=c[X>>2]|0;c[E>>2]=c[T>>2];c[F>>2]=Ud;c[G>>2]=Y;c[H>>2]=Wd;c[I>>2]=ip(c[F>>2]|0,c[H>>2]|0)|0;Wd=c[E>>2]|0;Y=(c[G>>2]|0)+(c[I>>2]<<2)|0;a[Wd>>0]=a[Y>>0]|0;a[Wd+1>>0]=a[Y+1>>0]|0;jp(c[F>>2]|0,d[(c[G>>2]|0)+(c[I>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[G>>2]|0)+(c[I>>2]<<2)+3>>0]|0);}Y=c[U>>2]|0;Wd=c[W>>2]|0;Ud=c[X>>2]|0;c[z>>2]=c[T>>2];c[A>>2]=Y;c[B>>2]=Wd;c[C>>2]=Ud;c[D>>2]=ip(c[A>>2]|0,c[C>>2]|0)|0;Ud=c[z>>2]|0;Wd=(c[B>>2]|0)+(c[D>>2]<<2)|0;a[Ud>>0]=a[Wd>>0]|0;a[Ud+1>>0]=a[Wd+1>>0]|0;jp(c[A>>2]|0,d[(c[B>>2]|0)+(c[D>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[B>>2]|0)+(c[D>>2]<<2)+3>>0]|0);}while(1){D=(gp(c[U>>2]|0)|0)==0&1;if(!(D&(c[T>>2]|0)>>>0<=((c[V>>2]|0)+-2|0)>>>0))break;D=c[U>>2]|0;B=c[W>>2]|0;A=c[X>>2]|0;c[u>>2]=c[T>>2];c[v>>2]=D;c[w>>2]=B;c[x>>2]=A;c[y>>2]=ip(c[v>>2]|0,c[x>>2]|0)|0;A=c[u>>2]|0;B=(c[w>>2]|0)+(c[y>>2]<<2)|0;a[A>>0]=a[B>>0]|0;a[A+1>>0]=a[B+1>>0]|0;jp(c[v>>2]|0,d[(c[w>>2]|0)+(c[y>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[w>>2]|0)+(c[y>>2]<<2)+3>>0]|0);}while(1){Ge=c[T>>2]|0;if((c[T>>2]|0)>>>0>((c[V>>2]|0)+-2|0)>>>0)break;y=c[U>>2]|0;w=c[W>>2]|0;v=c[X>>2]|0;c[p>>2]=Ge;c[q>>2]=y;c[r>>2]=w;c[s>>2]=v;c[t>>2]=ip(c[q>>2]|0,c[s>>2]|0)|0;v=c[p>>2]|0;w=(c[r>>2]|0)+(c[t>>2]<<2)|0;a[v>>0]=a[w>>0]|0;a[v+1>>0]=a[w+1>>0]|0;jp(c[q>>2]|0,d[(c[r>>2]|0)+(c[t>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[r>>2]|0)+(c[t>>2]<<2)+3>>0]|0);}if(Ge>>>0<(c[V>>2]|0)>>>0){V=c[U>>2]|0;U=c[W>>2]|0;W=c[X>>2]|0;c[j>>2]=c[T>>2];c[k>>2]=V;c[m>>2]=U;c[n>>2]=W;c[o>>2]=ip(c[k>>2]|0,c[n>>2]|0)|0;a[c[j>>2]>>0]=a[(c[m>>2]|0)+(c[o>>2]<<2)>>0]|0;j=c[k>>2]|0;if((d[(c[m>>2]|0)+(c[o>>2]<<2)+3>>0]|0|0)!=1){if((c[j+4>>2]|0)>>>0<32?(jp(c[k>>2]|0,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0),(c[(c[k>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[k>>2]|0)+4>>2]=32;}else jp(j,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+1;}T=lp(Xd)|0;Xd=T&(lp(Yd)|0);Yd=Xd&(lp(Zd)|0);c[we>>2]=Yd&(lp(_d)|0);if(c[we>>2]|0){c[Md>>2]=c[Od>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}else{c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}return 0;}function Lp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0;i=l;l=l+1216|0;j=i+1208|0;k=i+1204|0;m=i+1200|0;n=i+1196|0;o=i+1192|0;p=i+1188|0;q=i+1184|0;r=i+1180|0;s=i+1176|0;t=i+1172|0;u=i+1168|0;v=i+1164|0;w=i+1160|0;x=i+1156|0;y=i+1152|0;z=i+1148|0;A=i+1144|0;B=i+1140|0;C=i+1136|0;D=i+1132|0;E=i+1128|0;F=i+1124|0;G=i+1120|0;H=i+1116|0;I=i+1112|0;J=i+1108|0;K=i+1104|0;L=i+1100|0;M=i+1096|0;N=i+1092|0;O=i+1088|0;P=i+1084|0;Q=i+1080|0;R=i+1076|0;S=i+1072|0;T=i+1068|0;U=i+1064|0;V=i+1060|0;W=i+1056|0;X=i+1052|0;Y=i+1048|0;Z=i+1044|0;_=i+1040|0;$=i+1036|0;aa=i+1032|0;ba=i+1028|0;ca=i+1024|0;da=i+1020|0;ea=i+1016|0;fa=i+1012|0;ga=i+1008|0;ha=i+1004|0;ia=i+1e3|0;ja=i+996|0;ka=i+992|0;la=i+988|0;ma=i+984|0;na=i+980|0;oa=i+976|0;pa=i+972|0;qa=i+968|0;ra=i+964|0;sa=i+960|0;ta=i+956|0;ua=i+952|0;va=i+948|0;wa=i+944|0;xa=i+940|0;ya=i+936|0;za=i+932|0;Aa=i+928|0;Ba=i+924|0;Ca=i+920|0;Da=i+916|0;Ea=i+912|0;Fa=i+908|0;Ga=i+904|0;Ha=i+900|0;Ia=i+896|0;Ja=i+892|0;Ka=i+888|0;La=i+884|0;Ma=i+880|0;Na=i+876|0;Oa=i+872|0;Pa=i+868|0;Qa=i+864|0;Ra=i+860|0;Sa=i+856|0;Ta=i+852|0;Ua=i+848|0;Va=i+844|0;Wa=i+840|0;Xa=i+836|0;Ya=i+832|0;Za=i+828|0;_a=i+824|0;$a=i+820|0;ab=i+816|0;bb=i+812|0;cb=i+808|0;db=i+804|0;eb=i+800|0;fb=i+796|0;gb=i+792|0;hb=i+788|0;ib=i+784|0;jb=i+780|0;kb=i+776|0;lb=i+772|0;mb=i+768|0;nb=i+764|0;ob=i+760|0;pb=i+756|0;qb=i+752|0;rb=i+748|0;sb=i+744|0;tb=i+740|0;ub=i+736|0;vb=i+732|0;wb=i+728|0;xb=i+724|0;yb=i+720|0;zb=i+716|0;Ab=i+712|0;Bb=i+708|0;Cb=i+704|0;Db=i+700|0;Eb=i+696|0;Fb=i+692|0;Gb=i+688|0;Hb=i+684|0;Ib=i+680|0;Jb=i+676|0;Kb=i+672|0;Lb=i+668|0;Mb=i+664|0;Nb=i+660|0;Ob=i+656|0;Pb=i+652|0;Qb=i+648|0;Rb=i+644|0;Sb=i+640|0;Tb=i+636|0;Ub=i+632|0;Vb=i+628|0;Wb=i+624|0;Xb=i+620|0;Yb=i+616|0;Zb=i+612|0;_b=i+608|0;$b=i+604|0;ac=i+600|0;bc=i+596|0;cc=i+592|0;dc=i+588|0;ec=i+584|0;fc=i+580|0;gc=i+576|0;hc=i+572|0;ic=i+568|0;jc=i+564|0;kc=i+560|0;lc=i+556|0;mc=i+552|0;nc=i+548|0;oc=i+544|0;pc=i+540|0;qc=i+536|0;rc=i+532|0;sc=i+528|0;tc=i+524|0;uc=i+520|0;vc=i+516|0;wc=i+512|0;xc=i+508|0;yc=i+504|0;zc=i+500|0;Ac=i+496|0;Bc=i+492|0;Cc=i+488|0;Dc=i+484|0;Ec=i+480|0;Fc=i+476|0;Gc=i+472|0;Hc=i+468|0;Ic=i+464|0;Jc=i+460|0;Kc=i+456|0;Lc=i+452|0;Mc=i+448|0;Nc=i+444|0;Oc=i+440|0;Pc=i+436|0;Qc=i+432|0;Rc=i+428|0;Sc=i+424|0;Tc=i+420|0;Uc=i+416|0;Vc=i+412|0;Wc=i+408|0;Xc=i+404|0;Yc=i+400|0;Zc=i+396|0;_c=i+392|0;$c=i+388|0;ad=i+384|0;bd=i+380|0;cd=i+376|0;dd=i+372|0;ed=i+368|0;fd=i+364|0;gd=i+360|0;hd=i+356|0;id=i+352|0;jd=i+348|0;kd=i+344|0;ld=i+340|0;md=i+336|0;nd=i+332|0;od=i+328|0;pd=i+324|0;qd=i+320|0;rd=i+316|0;sd=i+312|0;td=i+308|0;ud=i+304|0;vd=i+300|0;wd=i+296|0;xd=i+292|0;yd=i+288|0;zd=i+284|0;Ad=i+280|0;Bd=i+276|0;Cd=i+272|0;Dd=i+268|0;Ed=i+264|0;Fd=i+260|0;Gd=i+256|0;Hd=i+252|0;Id=i+248|0;Jd=i+244|0;Kd=i+240|0;Ld=i+236|0;Md=i+232|0;Nd=i+228|0;Od=i+224|0;Pd=i+220|0;Qd=i+216|0;Rd=i+212|0;Sd=i+208|0;Td=i+204|0;Ud=i+200|0;Vd=i+196|0;Wd=i+192|0;Xd=i+172|0;Yd=i+152|0;Zd=i+132|0;_d=i+112|0;$d=i+108|0;ae=i+104|0;be=i+100|0;ce=i+96|0;de=i+92|0;ee=i+88|0;fe=i+84|0;ge=i+80|0;he=i+76|0;ie=i+72|0;je=i+68|0;ke=i+64|0;le=i+60|0;me=i+56|0;ne=i+52|0;oe=i+48|0;pe=i+44|0;qe=i+1212|0;re=i+40|0;se=i+36|0;te=i+32|0;ue=i+28|0;ve=i+24|0;we=i+20|0;xe=i+16|0;ye=i+12|0;ze=i+8|0;Ae=i+4|0;Be=i;c[xe>>2]=b;c[ye>>2]=e;c[ze>>2]=f;c[Ae>>2]=g;c[Be>>2]=h;h=c[ye>>2]|0;ye=c[ze>>2]|0;ze=c[Ae>>2]|0;Ae=c[Be>>2]|0;c[Nd>>2]=c[xe>>2];c[Od>>2]=h;c[Pd>>2]=ye;c[Qd>>2]=ze;c[Rd>>2]=Ae;if((c[Qd>>2]|0)>>>0<10){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}c[Sd>>2]=c[Pd>>2];c[Td>>2]=c[Nd>>2];c[Ud>>2]=(c[Td>>2]|0)+(c[Od>>2]|0);c[Vd>>2]=(c[Rd>>2]|0)+4;c[Wd>>2]=c[Vd>>2];c[$d>>2]=(yp(c[Sd>>2]|0)|0)&65535;c[ae>>2]=(yp((c[Sd>>2]|0)+2|0)|0)&65535;c[be>>2]=(yp((c[Sd>>2]|0)+4|0)|0)&65535;c[ce>>2]=(c[Qd>>2]|0)-((c[$d>>2]|0)+(c[ae>>2]|0)+(c[be>>2]|0)+6);c[de>>2]=(c[Sd>>2]|0)+6;c[ee>>2]=(c[de>>2]|0)+(c[$d>>2]|0);c[fe>>2]=(c[ee>>2]|0)+(c[ae>>2]|0);c[ge>>2]=(c[fe>>2]|0)+(c[be>>2]|0);c[he>>2]=(((c[Od>>2]|0)+3|0)>>>0)/4|0;c[ie>>2]=(c[Td>>2]|0)+(c[he>>2]|0);c[je>>2]=(c[ie>>2]|0)+(c[he>>2]|0);c[ke>>2]=(c[je>>2]|0)+(c[he>>2]|0);c[le>>2]=c[Td>>2];c[me>>2]=c[ie>>2];c[ne>>2]=c[je>>2];c[oe>>2]=c[ke>>2];bp(qe,c[Rd>>2]|0);c[re>>2]=d[qe+2>>0];if((c[ce>>2]|0)>>>0>(c[Qd>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}c[se>>2]=fp(Xd,c[de>>2]|0,c[$d>>2]|0)|0;if(ap(c[se>>2]|0)|0){c[Md>>2]=c[se>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[te>>2]=fp(Yd,c[ee>>2]|0,c[ae>>2]|0)|0;if(ap(c[te>>2]|0)|0){c[Md>>2]=c[te>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[ue>>2]=fp(Zd,c[fe>>2]|0,c[be>>2]|0)|0;if(ap(c[ue>>2]|0)|0){c[Md>>2]=c[ue>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}c[ve>>2]=fp(_d,c[ge>>2]|0,c[ce>>2]|0)|0;if(ap(c[ve>>2]|0)|0){c[Md>>2]=c[ve>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}ve=gp(Xd)|0;ce=ve|(gp(Yd)|0);ve=ce|(gp(Zd)|0);c[pe>>2]=ve|(gp(_d)|0);while(1){if(!(((c[pe>>2]|0)==0?(c[oe>>2]|0)>>>0<((c[Ud>>2]|0)+-3|0)>>>0:0)|0))break;if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Hd>>2]=c[le>>2];c[Id>>2]=Xd;c[Jd>>2]=ve;c[Kd>>2]=ce;c[Ld>>2]=ip(c[Id>>2]|0,c[Kd>>2]|0)|0;ce=c[Hd>>2]|0;ve=(c[Jd>>2]|0)+(c[Ld>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Id>>2]|0,d[(c[Jd>>2]|0)+(c[Ld>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Jd>>2]|0)+(c[Ld>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Cd>>2]=c[me>>2];c[Dd>>2]=Yd;c[Ed>>2]=ve;c[Fd>>2]=ce;c[Gd>>2]=ip(c[Dd>>2]|0,c[Fd>>2]|0)|0;ce=c[Cd>>2]|0;ve=(c[Ed>>2]|0)+(c[Gd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Dd>>2]|0,d[(c[Ed>>2]|0)+(c[Gd>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[Ed>>2]|0)+(c[Gd>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[xd>>2]=c[ne>>2];c[yd>>2]=Zd;c[zd>>2]=ve;c[Ad>>2]=ce;c[Bd>>2]=ip(c[yd>>2]|0,c[Ad>>2]|0)|0;ce=c[xd>>2]|0;ve=(c[zd>>2]|0)+(c[Bd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[yd>>2]|0,d[(c[zd>>2]|0)+(c[Bd>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[zd>>2]|0)+(c[Bd>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[sd>>2]=c[oe>>2];c[td>>2]=_d;c[ud>>2]=ve;c[vd>>2]=ce;c[wd>>2]=ip(c[td>>2]|0,c[vd>>2]|0)|0;ce=c[sd>>2]|0;ve=(c[ud>>2]|0)+(c[wd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[td>>2]|0,d[(c[ud>>2]|0)+(c[wd>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[ud>>2]|0)+(c[wd>>2]<<2)+3>>0]|0);}hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[nd>>2]=c[le>>2];c[od>>2]=Xd;c[pd>>2]=ve;c[qd>>2]=ce;c[rd>>2]=ip(c[od>>2]|0,c[qd>>2]|0)|0;ce=c[nd>>2]|0;ve=(c[pd>>2]|0)+(c[rd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[od>>2]|0,d[(c[pd>>2]|0)+(c[rd>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[pd>>2]|0)+(c[rd>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[id>>2]=c[me>>2];c[jd>>2]=Yd;c[kd>>2]=ve;c[ld>>2]=ce;c[md>>2]=ip(c[jd>>2]|0,c[ld>>2]|0)|0;ce=c[id>>2]|0;ve=(c[kd>>2]|0)+(c[md>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[jd>>2]|0,d[(c[kd>>2]|0)+(c[md>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[kd>>2]|0)+(c[md>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[dd>>2]=c[ne>>2];c[ed>>2]=Zd;c[fd>>2]=ve;c[gd>>2]=ce;c[hd>>2]=ip(c[ed>>2]|0,c[gd>>2]|0)|0;ce=c[dd>>2]|0;ve=(c[fd>>2]|0)+(c[hd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[ed>>2]|0,d[(c[fd>>2]|0)+(c[hd>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[fd>>2]|0)+(c[hd>>2]<<2)+3>>0]|0);hp()|0;ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[_c>>2]=c[oe>>2];c[$c>>2]=_d;c[ad>>2]=ve;c[bd>>2]=ce;c[cd>>2]=ip(c[$c>>2]|0,c[bd>>2]|0)|0;ce=c[_c>>2]|0;ve=(c[ad>>2]|0)+(c[cd>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[$c>>2]|0,d[(c[ad>>2]|0)+(c[cd>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[ad>>2]|0)+(c[cd>>2]<<2)+3>>0]|0);if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Vc>>2]=c[le>>2];c[Wc>>2]=Xd;c[Xc>>2]=ve;c[Yc>>2]=ce;c[Zc>>2]=ip(c[Wc>>2]|0,c[Yc>>2]|0)|0;ce=c[Vc>>2]|0;ve=(c[Xc>>2]|0)+(c[Zc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Wc>>2]|0,d[(c[Xc>>2]|0)+(c[Zc>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Xc>>2]|0)+(c[Zc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Qc>>2]=c[me>>2];c[Rc>>2]=Yd;c[Sc>>2]=ve;c[Tc>>2]=ce;c[Uc>>2]=ip(c[Rc>>2]|0,c[Tc>>2]|0)|0;ce=c[Qc>>2]|0;ve=(c[Sc>>2]|0)+(c[Uc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Rc>>2]|0,d[(c[Sc>>2]|0)+(c[Uc>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[Sc>>2]|0)+(c[Uc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Lc>>2]=c[ne>>2];c[Mc>>2]=Zd;c[Nc>>2]=ve;c[Oc>>2]=ce;c[Pc>>2]=ip(c[Mc>>2]|0,c[Oc>>2]|0)|0;ce=c[Lc>>2]|0;ve=(c[Nc>>2]|0)+(c[Pc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Mc>>2]|0,d[(c[Nc>>2]|0)+(c[Pc>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[Nc>>2]|0)+(c[Pc>>2]<<2)+3>>0]|0);}if(hp()|0){ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Gc>>2]=c[oe>>2];c[Hc>>2]=_d;c[Ic>>2]=ve;c[Jc>>2]=ce;c[Kc>>2]=ip(c[Hc>>2]|0,c[Jc>>2]|0)|0;ce=c[Gc>>2]|0;ve=(c[Ic>>2]|0)+(c[Kc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Hc>>2]|0,d[(c[Ic>>2]|0)+(c[Kc>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[Ic>>2]|0)+(c[Kc>>2]<<2)+3>>0]|0);}ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[Bc>>2]=c[le>>2];c[Cc>>2]=Xd;c[Dc>>2]=ve;c[Ec>>2]=ce;c[Fc>>2]=ip(c[Cc>>2]|0,c[Ec>>2]|0)|0;ce=c[Bc>>2]|0;ve=(c[Dc>>2]|0)+(c[Fc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[Cc>>2]|0,d[(c[Dc>>2]|0)+(c[Fc>>2]<<2)+2>>0]|0);c[le>>2]=(c[le>>2]|0)+(d[(c[Dc>>2]|0)+(c[Fc>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[wc>>2]=c[me>>2];c[xc>>2]=Yd;c[yc>>2]=ve;c[zc>>2]=ce;c[Ac>>2]=ip(c[xc>>2]|0,c[zc>>2]|0)|0;ce=c[wc>>2]|0;ve=(c[yc>>2]|0)+(c[Ac>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[xc>>2]|0,d[(c[yc>>2]|0)+(c[Ac>>2]<<2)+2>>0]|0);c[me>>2]=(c[me>>2]|0)+(d[(c[yc>>2]|0)+(c[Ac>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[rc>>2]=c[ne>>2];c[sc>>2]=Zd;c[tc>>2]=ve;c[uc>>2]=ce;c[vc>>2]=ip(c[sc>>2]|0,c[uc>>2]|0)|0;ce=c[rc>>2]|0;ve=(c[tc>>2]|0)+(c[vc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[sc>>2]|0,d[(c[tc>>2]|0)+(c[vc>>2]<<2)+2>>0]|0);c[ne>>2]=(c[ne>>2]|0)+(d[(c[tc>>2]|0)+(c[vc>>2]<<2)+3>>0]|0);ve=c[Wd>>2]|0;ce=c[re>>2]|0;c[mc>>2]=c[oe>>2];c[nc>>2]=_d;c[oc>>2]=ve;c[pc>>2]=ce;c[qc>>2]=ip(c[nc>>2]|0,c[pc>>2]|0)|0;ce=c[mc>>2]|0;ve=(c[oc>>2]|0)+(c[qc>>2]<<2)|0;a[ce>>0]=a[ve>>0]|0;a[ce+1>>0]=a[ve+1>>0]|0;jp(c[nc>>2]|0,d[(c[oc>>2]|0)+(c[qc>>2]<<2)+2>>0]|0);c[oe>>2]=(c[oe>>2]|0)+(d[(c[oc>>2]|0)+(c[qc>>2]<<2)+3>>0]|0);ve=gp(Xd)|0;ce=ve|(gp(Yd)|0);ve=ce|(gp(Zd)|0);c[pe>>2]=ve|(gp(_d)|0);}if((c[le>>2]|0)>>>0>(c[ie>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}if((c[me>>2]|0)>>>0>(c[je>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}if((c[ne>>2]|0)>>>0>(c[ke>>2]|0)>>>0){c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}pe=c[ie>>2]|0;ie=c[Wd>>2]|0;qc=c[re>>2]|0;c[gc>>2]=c[le>>2];c[hc>>2]=Xd;c[ic>>2]=pe;c[jc>>2]=ie;c[kc>>2]=qc;c[lc>>2]=c[gc>>2];while(1){lc=(gp(c[hc>>2]|0)|0)==0&1;if(!(lc&(c[gc>>2]|0)>>>0<((c[ic>>2]|0)+-3|0)>>>0))break;if(hp()|0){lc=c[hc>>2]|0;qc=c[jc>>2]|0;ie=c[kc>>2]|0;c[bc>>2]=c[gc>>2];c[cc>>2]=lc;c[dc>>2]=qc;c[ec>>2]=ie;c[fc>>2]=ip(c[cc>>2]|0,c[ec>>2]|0)|0;ie=c[bc>>2]|0;qc=(c[dc>>2]|0)+(c[fc>>2]<<2)|0;a[ie>>0]=a[qc>>0]|0;a[ie+1>>0]=a[qc+1>>0]|0;jp(c[cc>>2]|0,d[(c[dc>>2]|0)+(c[fc>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[dc>>2]|0)+(c[fc>>2]<<2)+3>>0]|0);}hp()|0;qc=c[hc>>2]|0;ie=c[jc>>2]|0;lc=c[kc>>2]|0;c[Yb>>2]=c[gc>>2];c[Zb>>2]=qc;c[_b>>2]=ie;c[$b>>2]=lc;c[ac>>2]=ip(c[Zb>>2]|0,c[$b>>2]|0)|0;lc=c[Yb>>2]|0;ie=(c[_b>>2]|0)+(c[ac>>2]<<2)|0;a[lc>>0]=a[ie>>0]|0;a[lc+1>>0]=a[ie+1>>0]|0;jp(c[Zb>>2]|0,d[(c[_b>>2]|0)+(c[ac>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[_b>>2]|0)+(c[ac>>2]<<2)+3>>0]|0);if(hp()|0){ie=c[hc>>2]|0;lc=c[jc>>2]|0;qc=c[kc>>2]|0;c[Tb>>2]=c[gc>>2];c[Ub>>2]=ie;c[Vb>>2]=lc;c[Wb>>2]=qc;c[Xb>>2]=ip(c[Ub>>2]|0,c[Wb>>2]|0)|0;qc=c[Tb>>2]|0;lc=(c[Vb>>2]|0)+(c[Xb>>2]<<2)|0;a[qc>>0]=a[lc>>0]|0;a[qc+1>>0]=a[lc+1>>0]|0;jp(c[Ub>>2]|0,d[(c[Vb>>2]|0)+(c[Xb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Vb>>2]|0)+(c[Xb>>2]<<2)+3>>0]|0);}lc=c[hc>>2]|0;qc=c[jc>>2]|0;ie=c[kc>>2]|0;c[Ob>>2]=c[gc>>2];c[Pb>>2]=lc;c[Qb>>2]=qc;c[Rb>>2]=ie;c[Sb>>2]=ip(c[Pb>>2]|0,c[Rb>>2]|0)|0;ie=c[Ob>>2]|0;qc=(c[Qb>>2]|0)+(c[Sb>>2]<<2)|0;a[ie>>0]=a[qc>>0]|0;a[ie+1>>0]=a[qc+1>>0]|0;jp(c[Pb>>2]|0,d[(c[Qb>>2]|0)+(c[Sb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Qb>>2]|0)+(c[Sb>>2]<<2)+3>>0]|0);}while(1){Sb=(gp(c[hc>>2]|0)|0)==0&1;if(!(Sb&(c[gc>>2]|0)>>>0<=((c[ic>>2]|0)+-2|0)>>>0))break;Sb=c[hc>>2]|0;Qb=c[jc>>2]|0;Pb=c[kc>>2]|0;c[Jb>>2]=c[gc>>2];c[Kb>>2]=Sb;c[Lb>>2]=Qb;c[Mb>>2]=Pb;c[Nb>>2]=ip(c[Kb>>2]|0,c[Mb>>2]|0)|0;Pb=c[Jb>>2]|0;Qb=(c[Lb>>2]|0)+(c[Nb>>2]<<2)|0;a[Pb>>0]=a[Qb>>0]|0;a[Pb+1>>0]=a[Qb+1>>0]|0;jp(c[Kb>>2]|0,d[(c[Lb>>2]|0)+(c[Nb>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Lb>>2]|0)+(c[Nb>>2]<<2)+3>>0]|0);}while(1){De=c[gc>>2]|0;if((c[gc>>2]|0)>>>0>((c[ic>>2]|0)+-2|0)>>>0)break;Nb=c[hc>>2]|0;Lb=c[jc>>2]|0;Kb=c[kc>>2]|0;c[Eb>>2]=De;c[Fb>>2]=Nb;c[Gb>>2]=Lb;c[Hb>>2]=Kb;c[Ib>>2]=ip(c[Fb>>2]|0,c[Hb>>2]|0)|0;Kb=c[Eb>>2]|0;Lb=(c[Gb>>2]|0)+(c[Ib>>2]<<2)|0;a[Kb>>0]=a[Lb>>0]|0;a[Kb+1>>0]=a[Lb+1>>0]|0;jp(c[Fb>>2]|0,d[(c[Gb>>2]|0)+(c[Ib>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+(d[(c[Gb>>2]|0)+(c[Ib>>2]<<2)+3>>0]|0);}if(De>>>0<(c[ic>>2]|0)>>>0){ic=c[hc>>2]|0;hc=c[jc>>2]|0;jc=c[kc>>2]|0;c[zb>>2]=c[gc>>2];c[Ab>>2]=ic;c[Bb>>2]=hc;c[Cb>>2]=jc;c[Db>>2]=ip(c[Ab>>2]|0,c[Cb>>2]|0)|0;a[c[zb>>2]>>0]=a[(c[Bb>>2]|0)+(c[Db>>2]<<2)>>0]|0;zb=c[Ab>>2]|0;if((d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+3>>0]|0|0)!=1){if((c[zb+4>>2]|0)>>>0<32?(jp(c[Ab>>2]|0,d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+2>>0]|0),(c[(c[Ab>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[Ab>>2]|0)+4>>2]=32;}else jp(zb,d[(c[Bb>>2]|0)+(c[Db>>2]<<2)+2>>0]|0);c[gc>>2]=(c[gc>>2]|0)+1;}gc=c[je>>2]|0;je=c[Wd>>2]|0;Db=c[re>>2]|0;c[tb>>2]=c[me>>2];c[ub>>2]=Yd;c[vb>>2]=gc;c[wb>>2]=je;c[xb>>2]=Db;c[yb>>2]=c[tb>>2];while(1){yb=(gp(c[ub>>2]|0)|0)==0&1;if(!(yb&(c[tb>>2]|0)>>>0<((c[vb>>2]|0)+-3|0)>>>0))break;if(hp()|0){yb=c[ub>>2]|0;Db=c[wb>>2]|0;je=c[xb>>2]|0;c[ob>>2]=c[tb>>2];c[pb>>2]=yb;c[qb>>2]=Db;c[rb>>2]=je;c[sb>>2]=ip(c[pb>>2]|0,c[rb>>2]|0)|0;je=c[ob>>2]|0;Db=(c[qb>>2]|0)+(c[sb>>2]<<2)|0;a[je>>0]=a[Db>>0]|0;a[je+1>>0]=a[Db+1>>0]|0;jp(c[pb>>2]|0,d[(c[qb>>2]|0)+(c[sb>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[qb>>2]|0)+(c[sb>>2]<<2)+3>>0]|0);}hp()|0;Db=c[ub>>2]|0;je=c[wb>>2]|0;yb=c[xb>>2]|0;c[jb>>2]=c[tb>>2];c[kb>>2]=Db;c[lb>>2]=je;c[mb>>2]=yb;c[nb>>2]=ip(c[kb>>2]|0,c[mb>>2]|0)|0;yb=c[jb>>2]|0;je=(c[lb>>2]|0)+(c[nb>>2]<<2)|0;a[yb>>0]=a[je>>0]|0;a[yb+1>>0]=a[je+1>>0]|0;jp(c[kb>>2]|0,d[(c[lb>>2]|0)+(c[nb>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[lb>>2]|0)+(c[nb>>2]<<2)+3>>0]|0);if(hp()|0){je=c[ub>>2]|0;yb=c[wb>>2]|0;Db=c[xb>>2]|0;c[eb>>2]=c[tb>>2];c[fb>>2]=je;c[gb>>2]=yb;c[hb>>2]=Db;c[ib>>2]=ip(c[fb>>2]|0,c[hb>>2]|0)|0;Db=c[eb>>2]|0;yb=(c[gb>>2]|0)+(c[ib>>2]<<2)|0;a[Db>>0]=a[yb>>0]|0;a[Db+1>>0]=a[yb+1>>0]|0;jp(c[fb>>2]|0,d[(c[gb>>2]|0)+(c[ib>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[gb>>2]|0)+(c[ib>>2]<<2)+3>>0]|0);}yb=c[ub>>2]|0;Db=c[wb>>2]|0;je=c[xb>>2]|0;c[$a>>2]=c[tb>>2];c[ab>>2]=yb;c[bb>>2]=Db;c[cb>>2]=je;c[db>>2]=ip(c[ab>>2]|0,c[cb>>2]|0)|0;je=c[$a>>2]|0;Db=(c[bb>>2]|0)+(c[db>>2]<<2)|0;a[je>>0]=a[Db>>0]|0;a[je+1>>0]=a[Db+1>>0]|0;jp(c[ab>>2]|0,d[(c[bb>>2]|0)+(c[db>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[bb>>2]|0)+(c[db>>2]<<2)+3>>0]|0);}while(1){db=(gp(c[ub>>2]|0)|0)==0&1;if(!(db&(c[tb>>2]|0)>>>0<=((c[vb>>2]|0)+-2|0)>>>0))break;db=c[ub>>2]|0;bb=c[wb>>2]|0;ab=c[xb>>2]|0;c[Wa>>2]=c[tb>>2];c[Xa>>2]=db;c[Ya>>2]=bb;c[Za>>2]=ab;c[_a>>2]=ip(c[Xa>>2]|0,c[Za>>2]|0)|0;ab=c[Wa>>2]|0;bb=(c[Ya>>2]|0)+(c[_a>>2]<<2)|0;a[ab>>0]=a[bb>>0]|0;a[ab+1>>0]=a[bb+1>>0]|0;jp(c[Xa>>2]|0,d[(c[Ya>>2]|0)+(c[_a>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[Ya>>2]|0)+(c[_a>>2]<<2)+3>>0]|0);}while(1){Ee=c[tb>>2]|0;if((c[tb>>2]|0)>>>0>((c[vb>>2]|0)+-2|0)>>>0)break;_a=c[ub>>2]|0;Ya=c[wb>>2]|0;Xa=c[xb>>2]|0;c[Ra>>2]=Ee;c[Sa>>2]=_a;c[Ta>>2]=Ya;c[Ua>>2]=Xa;c[Va>>2]=ip(c[Sa>>2]|0,c[Ua>>2]|0)|0;Xa=c[Ra>>2]|0;Ya=(c[Ta>>2]|0)+(c[Va>>2]<<2)|0;a[Xa>>0]=a[Ya>>0]|0;a[Xa+1>>0]=a[Ya+1>>0]|0;jp(c[Sa>>2]|0,d[(c[Ta>>2]|0)+(c[Va>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+(d[(c[Ta>>2]|0)+(c[Va>>2]<<2)+3>>0]|0);}if(Ee>>>0<(c[vb>>2]|0)>>>0){vb=c[ub>>2]|0;ub=c[wb>>2]|0;wb=c[xb>>2]|0;c[Ma>>2]=c[tb>>2];c[Na>>2]=vb;c[Oa>>2]=ub;c[Pa>>2]=wb;c[Qa>>2]=ip(c[Na>>2]|0,c[Pa>>2]|0)|0;a[c[Ma>>2]>>0]=a[(c[Oa>>2]|0)+(c[Qa>>2]<<2)>>0]|0;Ma=c[Na>>2]|0;if((d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+3>>0]|0|0)!=1){if((c[Ma+4>>2]|0)>>>0<32?(jp(c[Na>>2]|0,d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+2>>0]|0),(c[(c[Na>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[Na>>2]|0)+4>>2]=32;}else jp(Ma,d[(c[Oa>>2]|0)+(c[Qa>>2]<<2)+2>>0]|0);c[tb>>2]=(c[tb>>2]|0)+1;}tb=c[ke>>2]|0;ke=c[Wd>>2]|0;Qa=c[re>>2]|0;c[Ga>>2]=c[ne>>2];c[Ha>>2]=Zd;c[Ia>>2]=tb;c[Ja>>2]=ke;c[Ka>>2]=Qa;c[La>>2]=c[Ga>>2];while(1){La=(gp(c[Ha>>2]|0)|0)==0&1;if(!(La&(c[Ga>>2]|0)>>>0<((c[Ia>>2]|0)+-3|0)>>>0))break;if(hp()|0){La=c[Ha>>2]|0;Qa=c[Ja>>2]|0;ke=c[Ka>>2]|0;c[Ba>>2]=c[Ga>>2];c[Ca>>2]=La;c[Da>>2]=Qa;c[Ea>>2]=ke;c[Fa>>2]=ip(c[Ca>>2]|0,c[Ea>>2]|0)|0;ke=c[Ba>>2]|0;Qa=(c[Da>>2]|0)+(c[Fa>>2]<<2)|0;a[ke>>0]=a[Qa>>0]|0;a[ke+1>>0]=a[Qa+1>>0]|0;jp(c[Ca>>2]|0,d[(c[Da>>2]|0)+(c[Fa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[Da>>2]|0)+(c[Fa>>2]<<2)+3>>0]|0);}hp()|0;Qa=c[Ha>>2]|0;ke=c[Ja>>2]|0;La=c[Ka>>2]|0;c[wa>>2]=c[Ga>>2];c[xa>>2]=Qa;c[ya>>2]=ke;c[za>>2]=La;c[Aa>>2]=ip(c[xa>>2]|0,c[za>>2]|0)|0;La=c[wa>>2]|0;ke=(c[ya>>2]|0)+(c[Aa>>2]<<2)|0;a[La>>0]=a[ke>>0]|0;a[La+1>>0]=a[ke+1>>0]|0;jp(c[xa>>2]|0,d[(c[ya>>2]|0)+(c[Aa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ya>>2]|0)+(c[Aa>>2]<<2)+3>>0]|0);if(hp()|0){ke=c[Ha>>2]|0;La=c[Ja>>2]|0;Qa=c[Ka>>2]|0;c[ra>>2]=c[Ga>>2];c[sa>>2]=ke;c[ta>>2]=La;c[ua>>2]=Qa;c[va>>2]=ip(c[sa>>2]|0,c[ua>>2]|0)|0;Qa=c[ra>>2]|0;La=(c[ta>>2]|0)+(c[va>>2]<<2)|0;a[Qa>>0]=a[La>>0]|0;a[Qa+1>>0]=a[La+1>>0]|0;jp(c[sa>>2]|0,d[(c[ta>>2]|0)+(c[va>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ta>>2]|0)+(c[va>>2]<<2)+3>>0]|0);}La=c[Ha>>2]|0;Qa=c[Ja>>2]|0;ke=c[Ka>>2]|0;c[ma>>2]=c[Ga>>2];c[na>>2]=La;c[oa>>2]=Qa;c[pa>>2]=ke;c[qa>>2]=ip(c[na>>2]|0,c[pa>>2]|0)|0;ke=c[ma>>2]|0;Qa=(c[oa>>2]|0)+(c[qa>>2]<<2)|0;a[ke>>0]=a[Qa>>0]|0;a[ke+1>>0]=a[Qa+1>>0]|0;jp(c[na>>2]|0,d[(c[oa>>2]|0)+(c[qa>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[oa>>2]|0)+(c[qa>>2]<<2)+3>>0]|0);}while(1){qa=(gp(c[Ha>>2]|0)|0)==0&1;if(!(qa&(c[Ga>>2]|0)>>>0<=((c[Ia>>2]|0)+-2|0)>>>0))break;qa=c[Ha>>2]|0;oa=c[Ja>>2]|0;na=c[Ka>>2]|0;c[ha>>2]=c[Ga>>2];c[ia>>2]=qa;c[ja>>2]=oa;c[ka>>2]=na;c[la>>2]=ip(c[ia>>2]|0,c[ka>>2]|0)|0;na=c[ha>>2]|0;oa=(c[ja>>2]|0)+(c[la>>2]<<2)|0;a[na>>0]=a[oa>>0]|0;a[na+1>>0]=a[oa+1>>0]|0;jp(c[ia>>2]|0,d[(c[ja>>2]|0)+(c[la>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ja>>2]|0)+(c[la>>2]<<2)+3>>0]|0);}while(1){Fe=c[Ga>>2]|0;if((c[Ga>>2]|0)>>>0>((c[Ia>>2]|0)+-2|0)>>>0)break;la=c[Ha>>2]|0;ja=c[Ja>>2]|0;ia=c[Ka>>2]|0;c[ca>>2]=Fe;c[da>>2]=la;c[ea>>2]=ja;c[fa>>2]=ia;c[ga>>2]=ip(c[da>>2]|0,c[fa>>2]|0)|0;ia=c[ca>>2]|0;ja=(c[ea>>2]|0)+(c[ga>>2]<<2)|0;a[ia>>0]=a[ja>>0]|0;a[ia+1>>0]=a[ja+1>>0]|0;jp(c[da>>2]|0,d[(c[ea>>2]|0)+(c[ga>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+(d[(c[ea>>2]|0)+(c[ga>>2]<<2)+3>>0]|0);}if(Fe>>>0<(c[Ia>>2]|0)>>>0){Ia=c[Ha>>2]|0;Ha=c[Ja>>2]|0;Ja=c[Ka>>2]|0;c[Z>>2]=c[Ga>>2];c[_>>2]=Ia;c[$>>2]=Ha;c[aa>>2]=Ja;c[ba>>2]=ip(c[_>>2]|0,c[aa>>2]|0)|0;a[c[Z>>2]>>0]=a[(c[$>>2]|0)+(c[ba>>2]<<2)>>0]|0;Z=c[_>>2]|0;if((d[(c[$>>2]|0)+(c[ba>>2]<<2)+3>>0]|0|0)!=1){if((c[Z+4>>2]|0)>>>0<32?(jp(c[_>>2]|0,d[(c[$>>2]|0)+(c[ba>>2]<<2)+2>>0]|0),(c[(c[_>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[_>>2]|0)+4>>2]=32;}else jp(Z,d[(c[$>>2]|0)+(c[ba>>2]<<2)+2>>0]|0);c[Ga>>2]=(c[Ga>>2]|0)+1;}Ga=c[Ud>>2]|0;Ud=c[Wd>>2]|0;Wd=c[re>>2]|0;c[T>>2]=c[oe>>2];c[U>>2]=_d;c[V>>2]=Ga;c[W>>2]=Ud;c[X>>2]=Wd;c[Y>>2]=c[T>>2];while(1){Y=(gp(c[U>>2]|0)|0)==0&1;if(!(Y&(c[T>>2]|0)>>>0<((c[V>>2]|0)+-3|0)>>>0))break;if(hp()|0){Y=c[U>>2]|0;Wd=c[W>>2]|0;Ud=c[X>>2]|0;c[O>>2]=c[T>>2];c[P>>2]=Y;c[Q>>2]=Wd;c[R>>2]=Ud;c[S>>2]=ip(c[P>>2]|0,c[R>>2]|0)|0;Ud=c[O>>2]|0;Wd=(c[Q>>2]|0)+(c[S>>2]<<2)|0;a[Ud>>0]=a[Wd>>0]|0;a[Ud+1>>0]=a[Wd+1>>0]|0;jp(c[P>>2]|0,d[(c[Q>>2]|0)+(c[S>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[Q>>2]|0)+(c[S>>2]<<2)+3>>0]|0);}hp()|0;Wd=c[U>>2]|0;Ud=c[W>>2]|0;Y=c[X>>2]|0;c[J>>2]=c[T>>2];c[K>>2]=Wd;c[L>>2]=Ud;c[M>>2]=Y;c[N>>2]=ip(c[K>>2]|0,c[M>>2]|0)|0;Y=c[J>>2]|0;Ud=(c[L>>2]|0)+(c[N>>2]<<2)|0;a[Y>>0]=a[Ud>>0]|0;a[Y+1>>0]=a[Ud+1>>0]|0;jp(c[K>>2]|0,d[(c[L>>2]|0)+(c[N>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[L>>2]|0)+(c[N>>2]<<2)+3>>0]|0);if(hp()|0){Ud=c[U>>2]|0;Y=c[W>>2]|0;Wd=c[X>>2]|0;c[E>>2]=c[T>>2];c[F>>2]=Ud;c[G>>2]=Y;c[H>>2]=Wd;c[I>>2]=ip(c[F>>2]|0,c[H>>2]|0)|0;Wd=c[E>>2]|0;Y=(c[G>>2]|0)+(c[I>>2]<<2)|0;a[Wd>>0]=a[Y>>0]|0;a[Wd+1>>0]=a[Y+1>>0]|0;jp(c[F>>2]|0,d[(c[G>>2]|0)+(c[I>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[G>>2]|0)+(c[I>>2]<<2)+3>>0]|0);}Y=c[U>>2]|0;Wd=c[W>>2]|0;Ud=c[X>>2]|0;c[z>>2]=c[T>>2];c[A>>2]=Y;c[B>>2]=Wd;c[C>>2]=Ud;c[D>>2]=ip(c[A>>2]|0,c[C>>2]|0)|0;Ud=c[z>>2]|0;Wd=(c[B>>2]|0)+(c[D>>2]<<2)|0;a[Ud>>0]=a[Wd>>0]|0;a[Ud+1>>0]=a[Wd+1>>0]|0;jp(c[A>>2]|0,d[(c[B>>2]|0)+(c[D>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[B>>2]|0)+(c[D>>2]<<2)+3>>0]|0);}while(1){D=(gp(c[U>>2]|0)|0)==0&1;if(!(D&(c[T>>2]|0)>>>0<=((c[V>>2]|0)+-2|0)>>>0))break;D=c[U>>2]|0;B=c[W>>2]|0;A=c[X>>2]|0;c[u>>2]=c[T>>2];c[v>>2]=D;c[w>>2]=B;c[x>>2]=A;c[y>>2]=ip(c[v>>2]|0,c[x>>2]|0)|0;A=c[u>>2]|0;B=(c[w>>2]|0)+(c[y>>2]<<2)|0;a[A>>0]=a[B>>0]|0;a[A+1>>0]=a[B+1>>0]|0;jp(c[v>>2]|0,d[(c[w>>2]|0)+(c[y>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[w>>2]|0)+(c[y>>2]<<2)+3>>0]|0);}while(1){Ge=c[T>>2]|0;if((c[T>>2]|0)>>>0>((c[V>>2]|0)+-2|0)>>>0)break;y=c[U>>2]|0;w=c[W>>2]|0;v=c[X>>2]|0;c[p>>2]=Ge;c[q>>2]=y;c[r>>2]=w;c[s>>2]=v;c[t>>2]=ip(c[q>>2]|0,c[s>>2]|0)|0;v=c[p>>2]|0;w=(c[r>>2]|0)+(c[t>>2]<<2)|0;a[v>>0]=a[w>>0]|0;a[v+1>>0]=a[w+1>>0]|0;jp(c[q>>2]|0,d[(c[r>>2]|0)+(c[t>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+(d[(c[r>>2]|0)+(c[t>>2]<<2)+3>>0]|0);}if(Ge>>>0<(c[V>>2]|0)>>>0){V=c[U>>2]|0;U=c[W>>2]|0;W=c[X>>2]|0;c[j>>2]=c[T>>2];c[k>>2]=V;c[m>>2]=U;c[n>>2]=W;c[o>>2]=ip(c[k>>2]|0,c[n>>2]|0)|0;a[c[j>>2]>>0]=a[(c[m>>2]|0)+(c[o>>2]<<2)>>0]|0;j=c[k>>2]|0;if((d[(c[m>>2]|0)+(c[o>>2]<<2)+3>>0]|0|0)!=1){if((c[j+4>>2]|0)>>>0<32?(jp(c[k>>2]|0,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0),(c[(c[k>>2]|0)+4>>2]|0)>>>0>32):0)c[(c[k>>2]|0)+4>>2]=32;}else jp(j,d[(c[m>>2]|0)+(c[o>>2]<<2)+2>>0]|0);c[T>>2]=(c[T>>2]|0)+1;}T=lp(Xd)|0;Xd=T&(lp(Yd)|0);Yd=Xd&(lp(Zd)|0);c[we>>2]=Yd&(lp(_d)|0);if(c[we>>2]|0){c[Md>>2]=c[Od>>2];Ce=c[Md>>2]|0;l=i;return Ce|0;}else{c[Md>>2]=-20;Ce=c[Md>>2]|0;l=i;return Ce|0;}return 0;}function Mp(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+40|0;m=j+36|0;n=j+32|0;o=j+28|0;p=j+24|0;q=j+20|0;r=j+16|0;s=j+12|0;t=j+8|0;u=j+4|0;v=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=c[p>>2];c[v>>2]=Bp(c[m>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0;s=(ap(c[v>>2]|0)|0)!=0;r=c[v>>2]|0;if(s){c[k>>2]=r;w=c[k>>2]|0;l=j;return w|0;}if(r>>>0>=(c[q>>2]|0)>>>0){c[k>>2]=-72;w=c[k>>2]|0;l=j;return w|0;}else{c[u>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[v>>2]|0);c[k>>2]=Jp(c[n>>2]|0,c[o>>2]|0,c[u>>2]|0,c[q>>2]|0,c[m>>2]|0,c[t>>2]|0)|0;w=c[k>>2]|0;l=j;return w|0;}return 0;}function Np(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d+8|0;i=d+4|0;j=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)>>>0>=(c[e>>2]|0)>>>0)k=15;else k=(c[f>>2]<<4>>>0)/((c[e>>2]|0)>>>0)|0;c[g>>2]=k;c[h>>2]=(c[e>>2]|0)>>>8;c[i>>2]=(c[7008+((c[g>>2]|0)*24|0)>>2]|0)+(N(c[7008+((c[g>>2]|0)*24|0)+4>>2]|0,c[h>>2]|0)|0);c[j>>2]=(c[7008+((c[g>>2]|0)*24|0)+8>>2]|0)+(N(c[7008+((c[g>>2]|0)*24|0)+8+4>>2]|0,c[h>>2]|0)|0);c[j>>2]=(c[j>>2]|0)+((c[j>>2]|0)>>>3);l=d;return(c[j>>2]|0)>>>0<(c[i>>2]|0)>>>0|0;}function Op(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;q=i+24|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;bp(q,c[o>>2]|0);h=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;if(d[q+1>>0]|0|0){r=Gp(h,j,k,m,n,o)|0;l=i;return r|0;}else{r=cp(h,j,k,m,n,o)|0;l=i;return r|0;}return 0;}function Pp(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+40|0;m=j+36|0;n=j+32|0;o=j+28|0;p=j+24|0;q=j+20|0;r=j+16|0;s=j+12|0;t=j+8|0;u=j+4|0;v=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=c[p>>2];c[v>>2]=$o(c[m>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0;s=(ap(c[v>>2]|0)|0)!=0;r=c[v>>2]|0;if(s){c[k>>2]=r;w=c[k>>2]|0;l=j;return w|0;}if(r>>>0>=(c[q>>2]|0)>>>0){c[k>>2]=-72;w=c[k>>2]|0;l=j;return w|0;}else{c[u>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[v>>2]|0);c[k>>2]=cp(c[n>>2]|0,c[o>>2]|0,c[u>>2]|0,c[q>>2]|0,c[m>>2]|0,c[t>>2]|0)|0;w=c[k>>2]|0;l=j;return w|0;}return 0;}function Qp(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;i=l;l=l+32|0;j=i+20|0;k=i+16|0;m=i+12|0;n=i+8|0;o=i+4|0;p=i;q=i+24|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;bp(q,c[o>>2]|0);h=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;if(d[q+1>>0]|0|0){r=Jp(h,j,k,m,n,o)|0;l=i;return r|0;}else{r=vp(h,j,k,m,n,o)|0;l=i;return r|0;}return 0;}function Rp(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+36|0;m=j+32|0;n=j+28|0;o=j+24|0;p=j+20|0;q=j+16|0;r=j+12|0;s=j+8|0;t=j+4|0;u=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;if(!(c[o>>2]|0)){c[k>>2]=-70;v=c[k>>2]|0;l=j;return v|0;}if(!(c[q>>2]|0)){c[k>>2]=-20;v=c[k>>2]|0;l=j;return v|0;}c[u>>2]=Np(c[o>>2]|0,c[q>>2]|0)|0;i=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;r=c[s>>2]|0;s=c[t>>2]|0;if(c[u>>2]|0)w=Mp(i,m,n,o,p,q,r,s)|0;else w=Ap(i,m,n,o,p,q,r,s)|0;c[k>>2]=w;v=c[k>>2]|0;l=j;return v|0;}function Sp(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+48|0;d=b+24|0;e=b+16|0;f=b;c[e>>2]=a;c[(c[e>>2]|0)+28912>>2]=0;c[(c[e>>2]|0)+28940>>2]=0;c[(c[e>>2]|0)+28972>>2]=134217729;c[(c[e>>2]|0)+28952>>2]=0;c[(c[e>>2]|0)+28948>>2]=0;c[(c[e>>2]|0)+28960>>2]=0;c[(c[e>>2]|0)+28964>>2]=0;c[(c[e>>2]|0)+28980>>2]=0;c[(c[e>>2]|0)+28956>>2]=0;Tp(f);c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];f=Up(d)|0;c[(c[e>>2]|0)+28944>>2]=f;l=b;return;}function Tp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+28|0;e=b+24|0;f=b+20|0;g=b+16|0;h=b;c[d>>2]=0;c[e>>2]=0;c[f>>2]=0;c[g>>2]=0;c[h>>2]=c[d>>2];c[h+4>>2]=c[e>>2];c[h+8>>2]=c[f>>2];c[h+12>>2]=c[g>>2];c[a>>2]=c[h>>2];c[a+4>>2]=c[h+4>>2];c[a+8>>2]=c[h+8>>2];c[a+12>>2]=c[h+12>>2];l=b;return;}function Up(a){a=a|0;return(c[a+8>>2]&256|0)!=0|0;}function Vp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+32|0;d=b+8|0;e=b+4|0;f=b;if(((c[a>>2]|0)!=0^1)&1^((c[a+4>>2]|0)!=0^1)&1|0){c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;};c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[f>>2]=Rh(160112,d)|0;if(c[f>>2]|0){d=(c[f>>2]|0)+28920|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[(c[f>>2]|0)+28996>>2]=0;c[(c[f>>2]|0)+29e3>>2]=0;Sp(c[f>>2]|0);c[e>>2]=c[f>>2];g=c[e>>2]|0;l=b;return g|0;}else{c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}return 0;}function Wp(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[5412];c[b+4>>2]=c[5413];c[b+8>>2]=c[5414];d=Vp(b)|0;l=a;return d|0;}function Xp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+20|0;e=b+16|0;f=b+12|0;g=b;c[f>>2]=a;if(!(c[f>>2]|0)){c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}if(c[(c[f>>2]|0)+28940>>2]|0){c[e>>2]=-64;h=c[e>>2]|0;l=b;return h|0;}a=(c[f>>2]|0)+28920|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];Yp(c[(c[f>>2]|0)+28948>>2]|0)|0;c[(c[f>>2]|0)+28948>>2]=0;a=c[(c[f>>2]|0)+28960>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);c[(c[f>>2]|0)+28960>>2]=0;if(c[(c[f>>2]|0)+28996>>2]|0)Zp(c[(c[f>>2]|0)+28996>>2]|0,c[(c[f>>2]|0)+29e3>>2]|0)|0;a=c[f>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}function Yp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+20|0;e=b+16|0;f=b+12|0;g=b;c[f>>2]=a;if(!(c[f>>2]|0)){c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}else{a=(c[f>>2]|0)+28732|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];a=c[c[f>>2]>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);a=c[f>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}return 0;}function Zp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;c[g>>2]=b;switch(c[g>>2]|0){case 7:{c[e>>2]=bq(c[f>>2]|0)|0;break;}case 6:{c[e>>2]=aq(c[f>>2]|0)|0;break;}case 5:{c[e>>2]=$p(c[f>>2]|0)|0;break;}case 4:{c[e>>2]=_p(c[f>>2]|0)|0;break;}default:c[e>>2]=-12;}l=d;return c[e>>2]|0;}function _p(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=fq(c[d>>2]|0)|0;l=b;return a|0;}function $p(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{eq(c[c[e>>2]>>2]|0)|0;Dy(c[(c[e>>2]|0)+48>>2]|0);Dy(c[(c[e>>2]|0)+60>>2]|0);Dy(c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}return 0;}function aq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{dq(c[c[e>>2]>>2]|0)|0;Dy(c[(c[e>>2]|0)+28>>2]|0);Dy(c[(c[e>>2]|0)+40>>2]|0);Dy(c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}return 0;}function bq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}cq(c[c[e>>2]>>2]|0)|0;if(c[(c[e>>2]|0)+36>>2]|0)xc[c[(c[e>>2]|0)+92+4>>2]&31](c[(c[e>>2]|0)+92+8>>2]|0,c[(c[e>>2]|0)+36>>2]|0);if(c[(c[e>>2]|0)+48>>2]|0)xc[c[(c[e>>2]|0)+92+4>>2]&31](c[(c[e>>2]|0)+92+8>>2]|0,c[(c[e>>2]|0)+48>>2]|0);xc[c[(c[e>>2]|0)+92+4>>2]&31](c[(c[e>>2]|0)+92+8>>2]|0,c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}function cq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{xc[c[(c[e>>2]|0)+21692+4>>2]&31](c[(c[e>>2]|0)+21692+8>>2]|0,c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}return 0;}function dq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;Dy(c[d>>2]|0);l=b;return 0;}function eq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;Dy(c[d>>2]|0);l=b;return 0;}function fq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;if(!(c[e>>2]|0)){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{gq(c[c[e>>2]>>2]|0)|0;Dy(c[(c[e>>2]|0)+40>>2]|0);Dy(c[(c[e>>2]|0)+52>>2]|0);Dy(c[e>>2]|0);c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}return 0;}function gq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;Dy(c[d>>2]|0);l=b;return 0;}function hq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(jq()|0)!=0;f=kq(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=lq(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;c[f>>2]=a;c[g>>2]=b;a:do{if((c[g>>2]|0)>>>0<4)c[e>>2]=0;else{c[h>>2]=hq(c[f>>2]|0)|0;switch(c[h>>2]|0){case-47205084:{c[e>>2]=4;break a;break;}case-47205083:{c[e>>2]=5;break a;break;}case-47205082:{c[e>>2]=6;break a;break;}case-47205081:{c[e>>2]=7;break a;break;}default:{c[e>>2]=0;break a;}}}}while(0);l=d;return c[e>>2]|0;}function jq(){return d[11936]|0|0;}function kq(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function lq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function mq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=nq(c[e>>2]|0,c[f>>2]|0,0)|0;l=d;return b|0;}function nq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=l;l=l+48|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+32|0;o=g+8|0;p=g+4|0;q=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=oq(c[k>>2]|0)|0;if((c[j>>2]|0)>>>0<(c[m>>2]|0)>>>0){c[h>>2]=-72;r=c[h>>2]|0;l=g;return r|0;}a[n>>0]=a[(c[i>>2]|0)+((c[m>>2]|0)-1)>>0]|0;c[o>>2]=(d[n>>0]|0)&3;c[p>>2]=(d[n>>0]|0)>>5&1;c[q>>2]=(d[n>>0]|0)>>6;if(c[p>>2]|0)s=(c[q>>2]|0)!=0^1;else s=0;c[h>>2]=(c[m>>2]|0)+(((c[p>>2]|0)!=0^1)&1)+(c[3456+(c[o>>2]<<2)>>2]|0)+(c[3472+(c[q>>2]<<2)>>2]|0)+(s&1);r=c[h>>2]|0;l=g;return r|0;}function oq(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[d>>2]|0)==1?1:5;l=b;return c[e>>2]|0;}function pq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=qq(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,0)|0;l=e;return d|0;}function qq(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+72|0;j=h+68|0;k=h+64|0;m=h+60|0;n=h+56|0;o=h+52|0;p=h+48|0;q=h+44|0;r=h+77|0;s=h+40|0;t=h+36|0;u=h+32|0;v=h+28|0;w=h+24|0;x=h+8|0;z=h+20|0;A=h;B=h+76|0;C=h+16|0;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=c[k>>2];c[p>>2]=oq(c[n>>2]|0)|0;if((c[m>>2]|0)>>>0<(c[p>>2]|0)>>>0){c[i>>2]=c[p>>2];D=c[i>>2]|0;l=h;return D|0;}if((c[n>>2]|0)!=1?(hq(c[k>>2]|0)|0)!=-47205080:0){if(((hq(c[k>>2]|0)|0)&-16|0)!=407710288){c[i>>2]=-10;D=c[i>>2]|0;l=h;return D|0;}if((c[m>>2]|0)>>>0<8){c[i>>2]=8;D=c[i>>2]|0;l=h;return D|0;}else{g=c[j>>2]|0;f=g+40|0;do{c[g>>2]=0;g=g+4|0;}while((g|0)<(f|0));g=hq((c[k>>2]|0)+4|0)|0;f=c[j>>2]|0;c[f>>2]=g;c[f+4>>2]=0;c[(c[j>>2]|0)+20>>2]=1;c[i>>2]=0;D=c[i>>2]|0;l=h;return D|0;}}c[q>>2]=nq(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;n=c[q>>2]|0;if((c[m>>2]|0)>>>0<(c[q>>2]|0)>>>0){c[i>>2]=n;D=c[i>>2]|0;l=h;return D|0;}c[(c[j>>2]|0)+24>>2]=n;a[r>>0]=a[(c[o>>2]|0)+((c[p>>2]|0)-1)>>0]|0;c[s>>2]=c[p>>2];c[t>>2]=(d[r>>0]|0)&3;c[u>>2]=(d[r>>0]|0)>>2&1;c[v>>2]=(d[r>>0]|0)>>5&1;c[w>>2]=(d[r>>0]|0)>>6;p=x;c[p>>2]=0;c[p+4>>2]=0;c[z>>2]=0;p=A;c[p>>2]=-1;c[p+4>>2]=-1;if((d[r>>0]|0)&8|0){c[i>>2]=-14;D=c[i>>2]|0;l=h;return D|0;}do{if(!(c[v>>2]|0)){r=c[o>>2]|0;p=c[s>>2]|0;c[s>>2]=p+1;a[B>>0]=a[r+p>>0]|0;c[C>>2]=((d[B>>0]|0)>>3)+10;if((c[C>>2]|0)>>>0<=30){p=jE(1,0,c[C>>2]|0)|0;r=x;c[r>>2]=p;c[r+4>>2]=y;r=x;p=iE(c[r>>2]|0,c[r+4>>2]|0,3)|0;r=(d[B>>0]|0)&7;n=cE(p|0,y|0,r|0,((r|0)<0)<<31>>31|0)|0;r=x;p=dE(c[r>>2]|0,c[r+4>>2]|0,n|0,y|0)|0;n=x;c[n>>2]=p;c[n+4>>2]=y;break;}c[i>>2]=-16;D=c[i>>2]|0;l=h;return D|0;}}while(0);switch(c[t>>2]|0){case 3:{c[z>>2]=hq((c[o>>2]|0)+(c[s>>2]|0)|0)|0;c[s>>2]=(c[s>>2]|0)+4;break;}case 1:{c[z>>2]=d[(c[o>>2]|0)+(c[s>>2]|0)>>0];c[s>>2]=(c[s>>2]|0)+1;break;}case 2:{c[z>>2]=(rq((c[o>>2]|0)+(c[s>>2]|0)|0)|0)&65535;c[s>>2]=(c[s>>2]|0)+2;break;}default:{}}switch(c[w>>2]|0){case 3:{w=A;c[w>>2]=sq((c[o>>2]|0)+(c[s>>2]|0)|0)|0;c[w+4>>2]=y;break;}case 1:{w=((rq((c[o>>2]|0)+(c[s>>2]|0)|0)|0)&65535)+256|0;t=A;c[t>>2]=w;c[t+4>>2]=((w|0)<0)<<31>>31;break;}case 2:{w=A;c[w>>2]=hq((c[o>>2]|0)+(c[s>>2]|0)|0)|0;c[w+4>>2]=0;break;}default:if(c[v>>2]|0){w=A;c[w>>2]=d[(c[o>>2]|0)+(c[s>>2]|0)>>0];c[w+4>>2]=0;}}if(c[v>>2]|0){v=A;w=c[v+4>>2]|0;s=x;c[s>>2]=c[v>>2];c[s+4>>2]=w;}c[(c[j>>2]|0)+20>>2]=0;w=A;A=c[w+4>>2]|0;s=c[j>>2]|0;c[s>>2]=c[w>>2];c[s+4>>2]=A;A=x;s=c[A+4>>2]|0;w=(c[j>>2]|0)+8|0;c[w>>2]=c[A>>2];c[w+4>>2]=s;s=x;w=c[s+4>>2]|0;A=w>>>0<0|(w|0)==0&(c[s>>2]|0)>>>0<131072;s=x;x=c[s+4>>2]|0;x=A?c[s>>2]|0:131072;c[(c[j>>2]|0)+16>>2]=x;c[(c[j>>2]|0)+28>>2]=c[z>>2];c[(c[j>>2]|0)+32>>2]=c[u>>2];c[i>>2]=0;D=c[i>>2]|0;l=h;return D|0;}function rq(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(jq()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=vq(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function sq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(jq()|0)!=0;f=tq(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=uq(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function tq(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function uq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function vq(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function wq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+64|0;e=d+48|0;f=d+60|0;g=d+56|0;h=d+40|0;i=d;c[f>>2]=a;c[g>>2]=b;b=(iq(c[f>>2]|0,c[g>>2]|0)|0)!=0;a=c[f>>2]|0;f=c[g>>2]|0;do{if(!b){if(pq(i,a,f)|0){g=e;c[g>>2]=-2;c[g+4>>2]=-1;break;}if((c[i+20>>2]|0)==1){g=e;c[g>>2]=0;c[g+4>>2]=0;break;}else{g=i;j=c[g+4>>2]|0;k=e;c[k>>2]=c[g>>2];c[k+4>>2]=j;break;}}else{j=xq(a,f)|0;k=h;c[k>>2]=j;c[k+4>>2]=y;k=h;j=(c[k>>2]|0)==0&(c[k+4>>2]|0)==0;k=h;g=j?-1:c[k+4>>2]|0;m=e;c[m>>2]=j?-1:c[k>>2]|0;c[m+4>>2]=g;}}while(0);h=e;y=c[h+4>>2]|0;l=d;return c[h>>2]|0;}function xq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;d=l;l=l+112|0;e=d+80|0;f=d+108|0;g=d+104|0;h=d+100|0;i=d+40|0;j=d+96|0;k=d+24|0;m=d+92|0;n=d;o=d+88|0;c[f>>2]=a;c[g>>2]=b;c[h>>2]=iq(c[f>>2]|0,c[g>>2]|0)|0;do{if((c[h>>2]|0)>>>0>=5){if((c[h>>2]|0)==5){c[j>>2]=yq(i,c[f>>2]|0,c[g>>2]|0)|0;if(c[j>>2]|0){b=e;c[b>>2]=0;c[b+4>>2]=0;break;}else{b=i;a=c[b+4>>2]|0;p=e;c[p>>2]=c[b>>2];c[p+4>>2]=a;break;}}if((c[h>>2]|0)==6){c[m>>2]=zq(k,c[f>>2]|0,c[g>>2]|0)|0;if(c[m>>2]|0){a=e;c[a>>2]=0;c[a+4>>2]=0;break;}else{a=k;p=c[a+4>>2]|0;b=e;c[b>>2]=c[a>>2];c[b+4>>2]=p;break;}}if((c[h>>2]|0)!=7){p=e;c[p>>2]=0;c[p+4>>2]=0;break;}c[o>>2]=Aq(n,c[f>>2]|0,c[g>>2]|0)|0;if(c[o>>2]|0){p=e;c[p>>2]=0;c[p+4>>2]=0;break;}else{p=n;b=c[p+4>>2]|0;a=e;c[a>>2]=c[p>>2];c[a+4>>2]=b;break;}}else{b=e;c[b>>2]=0;c[b+4>>2]=0;}}while(0);n=e;y=c[n+4>>2]|0;l=d;return c[n>>2]|0;}function yq(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;if((c[j>>2]|0)>>>0<5){c[g>>2]=5;m=c[g>>2]|0;l=f;return m|0;}c[k>>2]=Wq(c[i>>2]|0)|0;if((c[k>>2]|0)!=-47205083){c[g>>2]=-10;m=c[g>>2]|0;l=f;return m|0;}k=c[h>>2]|0;j=k+40|0;do{c[k>>2]=0;k=k+4|0;}while((k|0)<(j|0));c[(c[h>>2]|0)+8>>2]=((d[(c[i>>2]|0)+4>>0]|0)&15)+11;if((d[(c[i>>2]|0)+4>>0]|0)>>4|0){c[g>>2]=-14;m=c[g>>2]|0;l=f;return m|0;}else{c[g>>2]=0;m=c[g>>2]|0;l=f;return m|0;}return 0;}function zq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;o=g+24|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<5){c[h>>2]=5;p=c[h>>2]|0;l=g;return p|0;}if((Mq(c[j>>2]|0)|0)!=-47205082){c[h>>2]=-10;p=c[h>>2]|0;l=g;return p|0;}c[n>>2]=Nq(c[j>>2]|0,c[k>>2]|0)|0;if((c[k>>2]|0)>>>0<(c[n>>2]|0)>>>0){c[h>>2]=c[n>>2];p=c[h>>2]|0;l=g;return p|0;}n=c[i>>2]|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;a[o>>0]=a[(c[m>>2]|0)+4>>0]|0;c[(c[i>>2]|0)+8>>2]=((d[o>>0]|0)&15)+12;if((d[o>>0]|0)&32|0){c[h>>2]=-14;p=c[h>>2]|0;l=g;return p|0;}switch((d[o>>0]|0)>>6|0){case 0:{o=c[i>>2]|0;c[o>>2]=0;c[o+4>>2]=0;break;}case 1:{o=c[i>>2]|0;c[o>>2]=d[(c[m>>2]|0)+5>>0];c[o+4>>2]=0;break;}case 2:{o=((Oq((c[m>>2]|0)+5|0)|0)&65535)+256|0;n=c[i>>2]|0;c[n>>2]=o;c[n+4>>2]=((o|0)<0)<<31>>31;break;}case 3:{o=Pq((c[m>>2]|0)+5|0)|0;m=c[i>>2]|0;c[m>>2]=o;c[m+4>>2]=y;break;}default:{}}c[h>>2]=0;p=c[h>>2]|0;l=g;return p|0;}function Aq(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+69|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+20|0;v=g+16|0;w=g+12|0;x=g;z=g+68|0;A=g+8|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<5){c[h>>2]=5;B=c[h>>2]|0;l=g;return B|0;}f=(Bq(c[j>>2]|0)|0)!=-47205081;e=c[j>>2]|0;if(f){if(((Bq(e)|0)&-16|0)!=407710288){c[h>>2]=-10;B=c[h>>2]|0;l=g;return B|0;}if((c[k>>2]|0)>>>0<8){c[h>>2]=8;B=c[h>>2]|0;l=g;return B|0;}else{f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;f=Bq((c[j>>2]|0)+4|0)|0;j=c[i>>2]|0;c[j>>2]=f;c[j+4>>2]=0;c[(c[i>>2]|0)+8>>2]=0;c[h>>2]=0;B=c[h>>2]|0;l=g;return B|0;}}c[n>>2]=Cq(e,c[k>>2]|0)|0;if((c[k>>2]|0)>>>0<(c[n>>2]|0)>>>0){c[h>>2]=c[n>>2];B=c[h>>2]|0;l=g;return B|0;}a[o>>0]=a[(c[m>>2]|0)+4>>0]|0;c[p>>2]=5;c[q>>2]=(d[o>>0]|0)&3;c[r>>2]=(d[o>>0]|0)>>2&1;c[s>>2]=(d[o>>0]|0)>>5&1;c[t>>2]=(d[o>>0]|0)>>6;n=(Dq()|0)!=0;c[u>>2]=1<<(n?25:27);c[v>>2]=0;c[w>>2]=0;n=x;c[n>>2]=0;c[n+4>>2]=0;if((d[o>>0]|0)&8|0){c[h>>2]=-14;B=c[h>>2]|0;l=g;return B|0;}do{if(!(c[s>>2]|0)){o=c[m>>2]|0;n=c[p>>2]|0;c[p>>2]=n+1;a[z>>0]=a[o+n>>0]|0;c[A>>2]=((d[z>>0]|0)>>3)+10;n=c[A>>2]|0;o=(Dq()|0)!=0;if(n>>>0<=(o?25:27)>>>0){c[v>>2]=1<<c[A>>2];o=N((c[v>>2]|0)>>>3,(d[z>>0]|0)&7)|0;c[v>>2]=(c[v>>2]|0)+o;break;}c[h>>2]=-14;B=c[h>>2]|0;l=g;return B|0;}}while(0);switch(c[q>>2]|0){case 3:{c[w>>2]=Bq((c[m>>2]|0)+(c[p>>2]|0)|0)|0;c[p>>2]=(c[p>>2]|0)+4;break;}case 1:{c[w>>2]=d[(c[m>>2]|0)+(c[p>>2]|0)>>0];c[p>>2]=(c[p>>2]|0)+1;break;}case 2:{c[w>>2]=(Eq((c[m>>2]|0)+(c[p>>2]|0)|0)|0)&65535;c[p>>2]=(c[p>>2]|0)+2;break;}default:{}}switch(c[t>>2]|0){case 3:{t=x;c[t>>2]=Fq((c[m>>2]|0)+(c[p>>2]|0)|0)|0;c[t+4>>2]=y;break;}case 1:{t=((Eq((c[m>>2]|0)+(c[p>>2]|0)|0)|0)&65535)+256|0;q=x;c[q>>2]=t;c[q+4>>2]=((t|0)<0)<<31>>31;break;}case 2:{t=x;c[t>>2]=Bq((c[m>>2]|0)+(c[p>>2]|0)|0)|0;c[t+4>>2]=0;break;}default:if(c[s>>2]|0){s=x;c[s>>2]=d[(c[m>>2]|0)+(c[p>>2]|0)>>0];c[s+4>>2]=0;}}if(!(c[v>>2]|0))c[v>>2]=c[x>>2];if((c[v>>2]|0)>>>0>(c[u>>2]|0)>>>0){c[h>>2]=-14;B=c[h>>2]|0;l=g;return B|0;}else{u=x;x=c[u+4>>2]|0;s=c[i>>2]|0;c[s>>2]=c[u>>2];c[s+4>>2]=x;c[(c[i>>2]|0)+8>>2]=c[v>>2];c[(c[i>>2]|0)+12>>2]=c[w>>2];c[(c[i>>2]|0)+16>>2]=c[r>>2];c[h>>2]=0;B=c[h>>2]|0;l=g;return B|0;}return 0;}function Bq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Gq()|0)!=0;f=Kq(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Lq(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Cq(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+24|0;k=f+8|0;m=f+4|0;n=f;c[h>>2]=b;c[i>>2]=e;if((c[i>>2]|0)>>>0<5){c[g>>2]=-72;o=c[g>>2]|0;l=f;return o|0;}a[j>>0]=a[(c[h>>2]|0)+4>>0]|0;c[k>>2]=(d[j>>0]|0)&3;c[m>>2]=(d[j>>0]|0)>>5&1;c[n>>2]=(d[j>>0]|0)>>6;if(c[m>>2]|0)p=(c[3472+(c[n>>2]<<2)>>2]|0)!=0^1;else p=0;c[g>>2]=5+(((c[m>>2]|0)!=0^1)&1)+(c[3456+(c[k>>2]<<2)>>2]|0)+(c[3472+(c[n>>2]<<2)>>2]|0)+(p&1);o=c[g>>2]|0;l=f;return o|0;}function Dq(){return 1;}function Eq(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(Gq()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=Jq(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function Fq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(Gq()|0)!=0;f=Hq(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=Iq(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function Gq(){return d[11936]|0|0;}function Hq(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;a[f+4>>0]=a[b+4>>0]|0;a[f+5>>0]=a[b+5>>0]|0;a[f+6>>0]=a[b+6>>0]|0;a[f+7>>0]=a[b+7>>0]|0;b=f;y=c[b+4>>2]|0;l=d;return c[b>>2]|0;}function Iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Jq(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;l=e;return b[g>>1]|0;}function Kq(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;l=d;return c[f>>2]|0;}function Lq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Mq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Qq()|0)!=0;f=Uq(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Vq(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Nq(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;if((c[h>>2]|0)>>>0<5){c[f>>2]=-72;j=c[f>>2]|0;l=e;return j|0;}else{c[i>>2]=(d[(c[g>>2]|0)+4>>0]|0)>>6;c[f>>2]=5+(c[3488+(c[i>>2]<<2)>>2]|0);j=c[f>>2]|0;l=e;return j|0;}return 0;}function Oq(a){a=a|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[g>>2]=a;a=(Qq()|0)!=0;i=c[g>>2]|0;if(a){b[f>>1]=Tq(i)|0;j=b[f>>1]|0;l=e;return j|0;}else{c[h>>2]=i;b[f>>1]=(d[c[h>>2]>>0]|0)+((d[(c[h>>2]|0)+1>>0]|0)<<8);j=b[f>>1]|0;l=e;return j|0;}return 0;}function Pq(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(Qq()|0)!=0;f=Rq(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=Sq(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function Qq(){return d[11936]|0|0;}function Rq(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;a[f+4>>0]=a[b+4>>0]|0;a[f+5>>0]=a[b+5>>0]|0;a[f+6>>0]=a[b+6>>0]|0;a[f+7>>0]=a[b+7>>0]|0;b=f;y=c[b+4>>2]|0;l=d;return c[b>>2]|0;}function Sq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Tq(d){d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;g=e+4|0;c[f>>2]=d;d=c[f>>2]|0;a[g>>0]=a[d>>0]|0;a[g+1>>0]=a[d+1>>0]|0;l=e;return b[g>>1]|0;}function Uq(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;l=d;return c[f>>2]|0;}function Vq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Wq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Xq()|0)!=0;f=Yq(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Zq(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Xq(){return d[11936]|0|0;}function Yq(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Zq(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function _q(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;d=l;l=l+96|0;e=d+80|0;f=d+76|0;g=d+72|0;h=d+68|0;i=d+64|0;j=d+60|0;k=d;m=d+56|0;n=d+44|0;o=d+40|0;c[f>>2]=a;c[g>>2]=b;if(iq(c[f>>2]|0,c[g>>2]|0)|0){c[e>>2]=ar(c[f>>2]|0,c[g>>2]|0)|0;p=c[e>>2]|0;l=d;return p|0;}if((c[g>>2]|0)>>>0>=8?((hq(c[f>>2]|0)|0)&-16|0)==407710288:0){c[e>>2]=8+(hq((c[f>>2]|0)+4|0)|0);p=c[e>>2]|0;l=d;return p|0;}c[h>>2]=c[f>>2];c[i>>2]=c[h>>2];c[j>>2]=c[g>>2];c[m>>2]=pq(k,c[f>>2]|0,c[g>>2]|0)|0;g=($q(c[m>>2]|0)|0)!=0;f=c[m>>2]|0;if(g){c[e>>2]=f;p=c[e>>2]|0;l=d;return p|0;}if(f>>>0>0){c[e>>2]=-72;p=c[e>>2]|0;l=d;return p|0;}c[h>>2]=(c[h>>2]|0)+(c[k+24>>2]|0);c[j>>2]=(c[j>>2]|0)-(c[k+24>>2]|0);while(1){c[o>>2]=br(c[h>>2]|0,c[j>>2]|0,n)|0;f=($q(c[o>>2]|0)|0)!=0;q=c[o>>2]|0;if(f){r=12;break;}if((3+q|0)>>>0>(c[j>>2]|0)>>>0){r=14;break;}c[h>>2]=(c[h>>2]|0)+(3+(c[o>>2]|0));c[j>>2]=(c[j>>2]|0)-(3+(c[o>>2]|0));if(c[n+4>>2]|0){r=17;break;}}if((r|0)==12){c[e>>2]=q;p=c[e>>2]|0;l=d;return p|0;}else if((r|0)==14){c[e>>2]=-72;p=c[e>>2]|0;l=d;return p|0;}else if((r|0)==17){do{if(c[k+32>>2]|0){if((c[j>>2]|0)>>>0>=4){c[h>>2]=(c[h>>2]|0)+4;c[j>>2]=(c[j>>2]|0)-4;break;}c[e>>2]=-72;p=c[e>>2]|0;l=d;return p|0;}}while(0);c[e>>2]=(c[h>>2]|0)-(c[i>>2]|0);p=c[e>>2]|0;l=d;return p|0;}return 0;}function $q(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function ar(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=iq(c[f>>2]|0,c[g>>2]|0)|0;switch(c[h>>2]|0){case 4:{c[e>>2]=dr(c[f>>2]|0,c[g>>2]|0)|0;break;}case 5:{c[e>>2]=er(c[f>>2]|0,c[g>>2]|0)|0;break;}case 6:{c[e>>2]=fr(c[f>>2]|0,c[g>>2]|0)|0;break;}case 7:{c[e>>2]=gr(c[f>>2]|0,c[g>>2]|0)|0;break;}default:c[e>>2]=-10;}l=d;return c[e>>2]|0;}function br(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[h>>2]|0)>>>0<3){c[f>>2]=-72;m=c[f>>2]|0;l=e;return m|0;}c[j>>2]=cr(c[g>>2]|0)|0;c[k>>2]=(c[j>>2]|0)>>>3;c[(c[i>>2]|0)+4>>2]=c[j>>2]&1;c[c[i>>2]>>2]=(c[j>>2]|0)>>>1&3;c[(c[i>>2]|0)+8>>2]=c[k>>2];if((c[c[i>>2]>>2]|0)==1){c[f>>2]=1;m=c[f>>2]|0;l=e;return m|0;}if((c[c[i>>2]>>2]|0)==3){c[f>>2]=-20;m=c[f>>2]|0;l=e;return m|0;}else{c[f>>2]=c[k>>2];m=c[f>>2]|0;l=e;return m|0;}return 0;}function cr(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=(rq(c[e>>2]|0)|0)&65535;l=b;return a+((d[(c[e>>2]|0)+2>>0]|0)<<16)|0;}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=or(c[e>>2]|0,c[f>>2]|0)|0;l=d;return b|0;}function er(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;d=l;l=l+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;i=d+16|0;j=d+8|0;k=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[f>>2];c[i>>2]=c[g>>2];if((c[g>>2]|0)>>>0<5){c[e>>2]=-72;m=c[e>>2]|0;l=d;return m|0;}if((Wq(c[f>>2]|0)|0)!=-47205083){c[e>>2]=-10;m=c[e>>2]|0;l=d;return m|0;}c[h>>2]=(c[h>>2]|0)+5;c[i>>2]=(c[i>>2]|0)-5;while(1){c[k>>2]=lr(c[h>>2]|0,c[i>>2]|0,j)|0;if(mr(c[k>>2]|0)|0){n=7;break;}c[h>>2]=(c[h>>2]|0)+3;c[i>>2]=(c[i>>2]|0)-3;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){n=9;break;}if(!(c[k>>2]|0)){n=12;break;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);}if((n|0)==7){c[e>>2]=c[k>>2];m=c[e>>2]|0;l=d;return m|0;}else if((n|0)==9){c[e>>2]=-72;m=c[e>>2]|0;l=d;return m|0;}else if((n|0)==12){c[e>>2]=(c[h>>2]|0)-(c[f>>2]|0);m=c[e>>2]|0;l=d;return m|0;}return 0;}function fr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;d=l;l=l+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;i=d+16|0;j=d+8|0;k=d+4|0;m=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[f>>2];c[i>>2]=c[g>>2];c[j>>2]=0;c[j+4>>2]=0;c[k>>2]=Nq(c[f>>2]|0,5)|0;if(jr(c[k>>2]|0)|0){c[e>>2]=c[k>>2];n=c[e>>2]|0;l=d;return n|0;}if((Mq(c[f>>2]|0)|0)!=-47205082){c[e>>2]=-10;n=c[e>>2]|0;l=d;return n|0;}if((c[g>>2]|0)>>>0<((c[k>>2]|0)+3|0)>>>0){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);while(1){c[m>>2]=kr(c[h>>2]|0,c[i>>2]|0,j)|0;if(jr(c[m>>2]|0)|0){o=9;break;}c[h>>2]=(c[h>>2]|0)+3;c[i>>2]=(c[i>>2]|0)-3;if((c[m>>2]|0)>>>0>(c[i>>2]|0)>>>0){o=11;break;}if(!(c[m>>2]|0)){o=14;break;}c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[m>>2]|0);}if((o|0)==9){c[e>>2]=c[m>>2];n=c[e>>2]|0;l=d;return n|0;}else if((o|0)==11){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}else if((o|0)==14){c[e>>2]=(c[h>>2]|0)-(c[f>>2]|0);n=c[e>>2]|0;l=d;return n|0;}return 0;}function gr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;d=l;l=l+48|0;e=d+36|0;f=d+32|0;g=d+28|0;h=d+24|0;i=d+20|0;j=d+16|0;k=d+8|0;m=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[f>>2];c[i>>2]=c[g>>2];if((c[g>>2]|0)>>>0<8){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}c[j>>2]=Cq(c[f>>2]|0,5)|0;if(hr(c[j>>2]|0)|0){c[e>>2]=c[j>>2];n=c[e>>2]|0;l=d;return n|0;}if((Bq(c[f>>2]|0)|0)!=-47205081){c[e>>2]=-10;n=c[e>>2]|0;l=d;return n|0;}if((c[g>>2]|0)>>>0<((c[j>>2]|0)+3|0)>>>0){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}c[h>>2]=(c[h>>2]|0)+(c[j>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[j>>2]|0);while(1){c[m>>2]=ir(c[h>>2]|0,c[i>>2]|0,k)|0;if(hr(c[m>>2]|0)|0){o=11;break;}c[h>>2]=(c[h>>2]|0)+3;c[i>>2]=(c[i>>2]|0)-3;if((c[k>>2]|0)==3){o=16;break;}if((c[m>>2]|0)>>>0>(c[i>>2]|0)>>>0){o=14;break;}c[h>>2]=(c[h>>2]|0)+(c[m>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[m>>2]|0);}if((o|0)==11){c[e>>2]=c[m>>2];n=c[e>>2]|0;l=d;return n|0;}else if((o|0)==14){c[e>>2]=-72;n=c[e>>2]|0;l=d;return n|0;}else if((o|0)==16){c[e>>2]=(c[h>>2]|0)-(c[f>>2]|0);n=c[e>>2]|0;l=d;return n|0;}return 0;}function hr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function ir(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];if((c[i>>2]|0)>>>0<3){c[g>>2]=-72;n=c[g>>2]|0;l=f;return n|0;}c[c[j>>2]>>2]=(d[c[k>>2]>>0]|0)>>6;c[m>>2]=(d[(c[k>>2]|0)+2>>0]|0)+((d[(c[k>>2]|0)+1>>0]|0)<<8)+(((d[c[k>>2]>>0]|0)&7)<<16);c[(c[j>>2]|0)+4>>2]=(c[c[j>>2]>>2]|0)==2?c[m>>2]|0:0;if((c[c[j>>2]>>2]|0)==3){c[g>>2]=0;n=c[g>>2]|0;l=f;return n|0;}if((c[c[j>>2]>>2]|0)==2){c[g>>2]=1;n=c[g>>2]|0;l=f;return n|0;}else{c[g>>2]=c[m>>2];n=c[g>>2]|0;l=f;return n|0;}return 0;}function jr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function kr(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];if((c[i>>2]|0)>>>0<3){c[g>>2]=-72;n=c[g>>2]|0;l=f;return n|0;}c[c[j>>2]>>2]=(d[c[k>>2]>>0]|0)>>6;c[m>>2]=(d[(c[k>>2]|0)+2>>0]|0)+((d[(c[k>>2]|0)+1>>0]|0)<<8)+(((d[c[k>>2]>>0]|0)&7)<<16);c[(c[j>>2]|0)+4>>2]=(c[c[j>>2]>>2]|0)==2?c[m>>2]|0:0;if((c[c[j>>2]>>2]|0)==3){c[g>>2]=0;n=c[g>>2]|0;l=f;return n|0;}if((c[c[j>>2]>>2]|0)==2){c[g>>2]=1;n=c[g>>2]|0;l=f;return n|0;}else{c[g>>2]=c[m>>2];n=c[g>>2]|0;l=f;return n|0;}return 0;}function lr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g+24|0;o=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[i>>2];if((c[j>>2]|0)>>>0<3){c[h>>2]=-72;p=c[h>>2]|0;l=g;return p|0;}a[n>>0]=a[c[m>>2]>>0]|0;c[o>>2]=(d[(c[m>>2]|0)+2>>0]|0)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(((d[c[m>>2]>>0]|0)&7)<<16);c[c[k>>2]>>2]=(d[n>>0]|0)>>6;c[(c[k>>2]|0)+4>>2]=(c[c[k>>2]>>2]|0)==2?c[o>>2]|0:0;if((c[c[k>>2]>>2]|0)==3){c[h>>2]=0;p=c[h>>2]|0;l=g;return p|0;}if((c[c[k>>2]>>2]|0)==2){c[h>>2]=1;p=c[h>>2]|0;l=g;return p|0;}else{c[h>>2]=c[o>>2];p=c[h>>2]|0;l=g;return p|0;}return 0;}function mr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=nr(c[d>>2]|0)|0;l=b;return a|0;}function nr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function or(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;d=l;l=l+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;i=d+16|0;j=d+8|0;k=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=c[f>>2];c[i>>2]=c[g>>2];if((c[g>>2]|0)>>>0<5){c[e>>2]=-72;m=c[e>>2]|0;l=d;return m|0;}if((pr(c[f>>2]|0)|0)!=-47205084){c[e>>2]=-10;m=c[e>>2]|0;l=d;return m|0;}c[h>>2]=(c[h>>2]|0)+5;c[i>>2]=(c[i>>2]|0)-5;while(1){c[k>>2]=qr(c[h>>2]|0,c[i>>2]|0,j)|0;if(rr(c[k>>2]|0)|0){n=7;break;}c[h>>2]=(c[h>>2]|0)+3;c[i>>2]=(c[i>>2]|0)-3;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){n=9;break;}if(!(c[k>>2]|0)){n=12;break;}c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);}if((n|0)==7){c[e>>2]=c[k>>2];m=c[e>>2]|0;l=d;return m|0;}else if((n|0)==9){c[e>>2]=-72;m=c[e>>2]|0;l=d;return m|0;}else if((n|0)==12){c[e>>2]=(c[h>>2]|0)-(c[f>>2]|0);m=c[e>>2]|0;l=d;return m|0;}return 0;}function pr(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;e=b+8|0;f=b+4|0;g=b;c[f>>2]=a;a=(tr()|0)!=0;h=c[f>>2]|0;if(a){c[e>>2]=ur(h)|0;i=c[e>>2]|0;l=b;return i|0;}else{c[g>>2]=h;c[e>>2]=(d[c[g>>2]>>0]|0)+((d[(c[g>>2]|0)+1>>0]|0)<<8)+((d[(c[g>>2]|0)+2>>0]|0)<<16)+((d[(c[g>>2]|0)+3>>0]|0)<<24);i=c[e>>2]|0;l=b;return i|0;}return 0;}function qr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g+24|0;o=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[i>>2];if((c[j>>2]|0)>>>0<3){c[h>>2]=-72;p=c[h>>2]|0;l=g;return p|0;}a[n>>0]=a[c[m>>2]>>0]|0;c[o>>2]=(d[(c[m>>2]|0)+2>>0]|0)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(((d[c[m>>2]>>0]|0)&7)<<16);c[c[k>>2]>>2]=(d[n>>0]|0)>>6;c[(c[k>>2]|0)+4>>2]=(c[c[k>>2]>>2]|0)==2?c[o>>2]|0:0;if((c[c[k>>2]>>2]|0)==3){c[h>>2]=0;p=c[h>>2]|0;l=g;return p|0;}if((c[c[k>>2]>>2]|0)==2){c[h>>2]=1;p=c[h>>2]|0;l=g;return p|0;}else{c[h>>2]=c[o>>2];p=c[h>>2]|0;l=g;return p|0;}return 0;}function rr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=sr(c[d>>2]|0)|0;l=b;return a|0;}function sr(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function tr(){return d[11936]|0|0;}function ur(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;l=d;return c[f>>2]|0;}function vr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=l;l=l+80|0;h=g+68|0;i=g+64|0;j=g+60|0;k=g+56|0;m=g+52|0;n=g+48|0;o=g+44|0;p=g+40|0;q=g+36|0;r=g+32|0;s=g+28|0;t=g+24|0;u=g+20|0;v=g+16|0;w=g+12|0;x=g+8|0;y=g+4|0;z=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<3){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}c[m>>2]=c[j>>2];c[n>>2]=(d[c[m>>2]>>0]|0)&3;switch(c[n>>2]|0){case 3:{if(!(c[(c[i>>2]|0)+28808>>2]|0)){c[h>>2]=-30;A=c[h>>2]|0;l=g;return A|0;}break;}case 2:break;case 0:{c[w>>2]=(d[c[m>>2]>>0]|0)>>2&3;switch(c[w>>2]|0){case 3:{c[v>>2]=3;c[u>>2]=(cr(c[m>>2]|0)|0)>>>4;break;}case 1:{c[v>>2]=2;c[u>>2]=((rq(c[m>>2]|0)|0)&65535)>>4;break;}default:{c[v>>2]=1;c[u>>2]=(d[c[m>>2]>>0]|0)>>3;}}if(((c[v>>2]|0)+(c[u>>2]|0)+8|0)>>>0<=(c[k>>2]|0)>>>0){c[(c[i>>2]|0)+28916>>2]=(c[m>>2]|0)+(c[v>>2]|0);c[(c[i>>2]|0)+28932>>2]=c[u>>2];c[h>>2]=(c[v>>2]|0)+(c[u>>2]|0);A=c[h>>2]|0;l=g;return A|0;}if(((c[u>>2]|0)+(c[v>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}else{mE((c[i>>2]|0)+29012|0,(c[m>>2]|0)+(c[v>>2]|0)|0,c[u>>2]|0)|0;c[(c[i>>2]|0)+28916>>2]=(c[i>>2]|0)+29012;c[(c[i>>2]|0)+28932>>2]=c[u>>2];w=(c[i>>2]|0)+29012+(c[(c[i>>2]|0)+28932>>2]|0)|0;a[w>>0]=0;a[w+1>>0]=0;a[w+2>>0]=0;a[w+3>>0]=0;a[w+4>>0]=0;a[w+5>>0]=0;a[w+6>>0]=0;a[w+7>>0]=0;c[h>>2]=(c[v>>2]|0)+(c[u>>2]|0);A=c[h>>2]|0;l=g;return A|0;}break;}case 1:{c[x>>2]=(d[c[m>>2]>>0]|0)>>2&3;switch(c[x>>2]|0){case 3:{c[z>>2]=3;c[y>>2]=(cr(c[m>>2]|0)|0)>>>4;if((c[k>>2]|0)>>>0<4){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}break;}case 1:{c[z>>2]=2;c[y>>2]=((rq(c[m>>2]|0)|0)&65535)>>4;break;}default:{c[z>>2]=1;c[y>>2]=(d[c[m>>2]>>0]|0)>>3;}}if((c[y>>2]|0)>>>0>131072){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}else{oE((c[i>>2]|0)+29012|0,(d[(c[m>>2]|0)+(c[z>>2]|0)>>0]|0)&255|0,(c[y>>2]|0)+8|0)|0;c[(c[i>>2]|0)+28916>>2]=(c[i>>2]|0)+29012;c[(c[i>>2]|0)+28932>>2]=c[y>>2];c[h>>2]=(c[z>>2]|0)+1;A=c[h>>2]|0;l=g;return A|0;}break;}default:{c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}}if((c[k>>2]|0)>>>0<5){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}c[r>>2]=0;c[s>>2]=(d[c[m>>2]>>0]|0)>>2&3;c[t>>2]=hq(c[m>>2]|0)|0;switch(c[s>>2]|0){case 3:{c[o>>2]=5;c[p>>2]=(c[t>>2]|0)>>>4&262143;c[q>>2]=((c[t>>2]|0)>>>22)+((d[(c[m>>2]|0)+4>>0]|0)<<10);break;}case 2:{c[o>>2]=4;c[p>>2]=(c[t>>2]|0)>>>4&16383;c[q>>2]=(c[t>>2]|0)>>>18;break;}default:{c[r>>2]=((c[s>>2]|0)!=0^1)&1;c[o>>2]=3;c[p>>2]=(c[t>>2]|0)>>>4&1023;c[q>>2]=(c[t>>2]|0)>>>14&1023;}}if((c[p>>2]|0)>>>0>131072){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}if(((c[q>>2]|0)+(c[o>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}k=(c[r>>2]|0)!=0;r=c[i>>2]|0;do{if((c[n>>2]|0)==3){t=r+29012|0;s=c[p>>2]|0;z=(c[m>>2]|0)+(c[o>>2]|0)|0;y=c[q>>2]|0;x=c[(c[i>>2]|0)+12>>2]|0;u=c[(c[i>>2]|0)+28944>>2]|0;if(k){B=Op(t,s,z,y,x,u)|0;break;}else{B=Qp(t,s,z,y,x,u)|0;break;}}else{u=r+16+10264|0;x=(c[i>>2]|0)+29012|0;y=c[p>>2]|0;z=(c[m>>2]|0)+(c[o>>2]|0)|0;s=c[q>>2]|0;t=(c[i>>2]|0)+16+26652|0;v=c[(c[i>>2]|0)+28944>>2]|0;if(k){B=Pp(u,x,y,z,s,t,2048,v)|0;break;}else{B=Rp(u,x,y,z,s,t,2048,v)|0;break;}}}while(0);if($q(B)|0){c[h>>2]=-20;A=c[h>>2]|0;l=g;return A|0;}c[(c[i>>2]|0)+28916>>2]=(c[i>>2]|0)+29012;c[(c[i>>2]|0)+28932>>2]=c[p>>2];c[(c[i>>2]|0)+28808>>2]=1;if((c[n>>2]|0)==2)c[(c[i>>2]|0)+12>>2]=(c[i>>2]|0)+16+10264;n=(c[i>>2]|0)+29012+(c[(c[i>>2]|0)+28932>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=(c[q>>2]|0)+(c[o>>2]|0);A=c[h>>2]|0;l=g;return A|0;}function wr(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;g=l;l=l+64|0;h=g+56|0;i=g+52|0;j=g+48|0;k=g+44|0;m=g+40|0;n=g+36|0;o=g+32|0;p=g+28|0;q=g+24|0;r=g+20|0;s=g+16|0;t=g+12|0;u=g+8|0;v=g+4|0;w=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[k>>2];c[o>>2]=(c[n>>2]|0)+(c[m>>2]|0);c[p>>2]=c[n>>2];if((c[m>>2]|0)>>>0<1){c[h>>2]=-72;x=c[h>>2]|0;l=g;return x|0;}m=c[p>>2]|0;c[p>>2]=m+1;c[q>>2]=d[m>>0];if(!(c[q>>2]|0)){c[c[j>>2]>>2]=0;c[h>>2]=1;x=c[h>>2]|0;l=g;return x|0;}do{if((c[q>>2]|0)>127){m=c[p>>2]|0;if((c[q>>2]|0)==255){if((m+2|0)>>>0<=(c[o>>2]|0)>>>0){c[q>>2]=((rq(c[p>>2]|0)|0)&65535)+32512;c[p>>2]=(c[p>>2]|0)+2;break;}c[h>>2]=-72;x=c[h>>2]|0;l=g;return x|0;}else{if(m>>>0<(c[o>>2]|0)>>>0){m=(c[q>>2]|0)-128<<8;k=c[p>>2]|0;c[p>>2]=k+1;c[q>>2]=m+(d[k>>0]|0);break;}c[h>>2]=-72;x=c[h>>2]|0;l=g;return x|0;}}}while(0);c[c[j>>2]>>2]=c[q>>2];if(((c[p>>2]|0)+4|0)>>>0>(c[o>>2]|0)>>>0){c[h>>2]=-72;x=c[h>>2]|0;l=g;return x|0;}c[r>>2]=(d[c[p>>2]>>0]|0)>>6;c[s>>2]=(d[c[p>>2]>>0]|0)>>4&3;c[t>>2]=(d[c[p>>2]>>0]|0)>>2&3;c[p>>2]=(c[p>>2]|0)+1;c[u>>2]=xr((c[i>>2]|0)+16|0,c[i>>2]|0,c[r>>2]|0,35,9,c[p>>2]|0,(c[o>>2]|0)-(c[p>>2]|0)|0,6416,5696,3504,c[(c[i>>2]|0)+28812>>2]|0)|0;if($q(c[u>>2]|0)|0){c[h>>2]=-20;x=c[h>>2]|0;l=g;return x|0;}c[p>>2]=(c[p>>2]|0)+(c[u>>2]|0);c[v>>2]=xr((c[i>>2]|0)+16+4104|0,(c[i>>2]|0)+8|0,c[s>>2]|0,31,8,c[p>>2]|0,(c[o>>2]|0)-(c[p>>2]|0)|0,4032,4160,4288,c[(c[i>>2]|0)+28812>>2]|0)|0;if($q(c[v>>2]|0)|0){c[h>>2]=-20;x=c[h>>2]|0;l=g;return x|0;}c[p>>2]=(c[p>>2]|0)+(c[v>>2]|0);c[w>>2]=xr((c[i>>2]|0)+16+6160|0,(c[i>>2]|0)+4|0,c[t>>2]|0,52,9,c[p>>2]|0,(c[o>>2]|0)-(c[p>>2]|0)|0,5216,5840,4560,c[(c[i>>2]|0)+28812>>2]|0)|0;if($q(c[w>>2]|0)|0){c[h>>2]=-20;x=c[h>>2]|0;l=g;return x|0;}else{c[p>>2]=(c[p>>2]|0)+(c[w>>2]|0);c[h>>2]=(c[p>>2]|0)-(c[n>>2]|0);x=c[h>>2]|0;l=g;return x|0;}return 0;}function xr(a,b,e,f,g,h,i,j,k,m,n){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;o=l;l=l+176|0;p=o+172|0;q=o+168|0;r=o+164|0;s=o+160|0;t=o+156|0;u=o+152|0;v=o+148|0;w=o+144|0;x=o+140|0;y=o+136|0;z=o+132|0;A=o+128|0;B=o+124|0;C=o+120|0;D=o+116|0;E=o+112|0;F=o;G=o+108|0;c[q>>2]=a;c[r>>2]=b;c[s>>2]=e;c[t>>2]=f;c[u>>2]=g;c[v>>2]=h;c[w>>2]=i;c[x>>2]=j;c[y>>2]=k;c[z>>2]=m;c[A>>2]=n;a:do{switch(c[s>>2]|0){case 1:{if(!(c[w>>2]|0)){c[p>>2]=-72;break a;}if((d[c[v>>2]>>0]|0)>>>0>(c[t>>2]|0)>>>0){c[p>>2]=-20;break a;}else{c[B>>2]=d[c[v>>2]>>0];c[C>>2]=c[(c[x>>2]|0)+(c[B>>2]<<2)>>2];c[D>>2]=c[(c[y>>2]|0)+(c[B>>2]<<2)>>2];yr(c[q>>2]|0,c[C>>2]|0,c[D>>2]|0);c[c[r>>2]>>2]=c[q>>2];c[p>>2]=1;break a;}break;}case 0:{c[c[r>>2]>>2]=c[z>>2];c[p>>2]=0;break;}case 3:{if(c[A>>2]|0){c[p>>2]=0;break a;}else{c[p>>2]=-20;break a;}break;}case 2:{c[G>>2]=ah(F,t,E,c[v>>2]|0,c[w>>2]|0)|0;if($q(c[G>>2]|0)|0){c[p>>2]=-20;break a;}if((c[E>>2]|0)>>>0>(c[u>>2]|0)>>>0){c[p>>2]=-20;break a;}else{zr(c[q>>2]|0,F,c[t>>2]|0,c[x>>2]|0,c[y>>2]|0,c[E>>2]|0);c[c[r>>2]>>2]=c[q>>2];c[p>>2]=c[G>>2];break a;}break;}default:c[p>>2]=-1;}}while(0);l=o;return c[p>>2]|0;}function yr(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=d;c[i>>2]=e;c[j>>2]=f;c[k>>2]=c[h>>2];c[m>>2]=c[k>>2];c[n>>2]=(c[h>>2]|0)+8;c[(c[m>>2]|0)+4>>2]=0;c[c[m>>2]>>2]=0;a[(c[n>>2]|0)+3>>0]=0;b[c[n>>2]>>1]=0;a[(c[n>>2]|0)+2>>0]=c[j>>2];c[(c[n>>2]|0)+4>>2]=c[i>>2];l=g;return;}function zr(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;k=l;l=l+208|0;m=k+188|0;n=k+184|0;o=k+180|0;p=k+176|0;q=k+172|0;r=k+168|0;s=k+164|0;t=k;u=k+160|0;v=k+156|0;w=k+152|0;x=k+144|0;y=k+192|0;z=k+140|0;A=k+136|0;B=k+132|0;C=k+128|0;D=k+124|0;E=k+120|0;F=k+116|0;G=k+112|0;H=k+108|0;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[q>>2]=i;c[r>>2]=j;c[s>>2]=(c[m>>2]|0)+8;c[u>>2]=(c[o>>2]|0)+1;c[v>>2]=1<<c[r>>2];c[w>>2]=(c[v>>2]|0)-1;c[x+4>>2]=c[r>>2];c[x>>2]=1;b[y>>1]=1<<(c[r>>2]|0)-1;c[z>>2]=0;while(1){if((c[z>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;if((b[(c[n>>2]|0)+(c[z>>2]<<1)>>1]|0)==-1){o=c[z>>2]|0;j=c[s>>2]|0;i=c[w>>2]|0;c[w>>2]=i+-1;c[j+(i<<3)+4>>2]=o;b[t+(c[z>>2]<<1)>>1]=1;}else{if((b[(c[n>>2]|0)+(c[z>>2]<<1)>>1]|0)>=(b[y>>1]|0))c[x>>2]=0;b[t+(c[z>>2]<<1)>>1]=b[(c[n>>2]|0)+(c[z>>2]<<1)>>1]|0;}c[z>>2]=(c[z>>2]|0)+1;}z=c[m>>2]|0;c[z>>2]=c[x>>2];c[z+4>>2]=c[x+4>>2];c[A>>2]=(c[v>>2]|0)-1;c[B>>2]=((c[v>>2]|0)>>>1)+((c[v>>2]|0)>>>3)+3;c[D>>2]=0;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;c[E>>2]=0;while(1){I=c[C>>2]|0;if((c[E>>2]|0)>=(b[(c[n>>2]|0)+(c[C>>2]<<1)>>1]|0))break;c[(c[s>>2]|0)+(c[D>>2]<<3)+4>>2]=I;c[D>>2]=(c[D>>2]|0)+(c[B>>2]|0)&c[A>>2];while(1){if((c[D>>2]|0)>>>0<=(c[w>>2]|0)>>>0)break;c[D>>2]=(c[D>>2]|0)+(c[B>>2]|0)&c[A>>2];}c[E>>2]=(c[E>>2]|0)+1;}c[C>>2]=I+1;}c[F>>2]=0;while(1){if((c[F>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;c[G>>2]=c[(c[s>>2]|0)+(c[F>>2]<<3)+4>>2];I=t+(c[G>>2]<<1)|0;C=b[I>>1]|0;b[I>>1]=C+1<<16>>16;c[H>>2]=C&65535;C=c[r>>2]|0;I=C-(Ar(c[H>>2]|0)|0)&255;a[(c[s>>2]|0)+(c[F>>2]<<3)+3>>0]=I;b[(c[s>>2]|0)+(c[F>>2]<<3)>>1]=(c[H>>2]<<d[(c[s>>2]|0)+(c[F>>2]<<3)+3>>0])-(c[v>>2]|0);a[(c[s>>2]|0)+(c[F>>2]<<3)+2>>0]=c[(c[q>>2]|0)+(c[G>>2]<<2)>>2];c[(c[s>>2]|0)+(c[F>>2]<<3)+4>>2]=c[(c[p>>2]|0)+(c[G>>2]<<2)>>2];c[F>>2]=(c[F>>2]|0)+1;}l=k;return;}function Ar(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Br(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+28728>>2]|0)){l=d;return;}c[(c[e>>2]|0)+28740>>2]=c[(c[e>>2]|0)+28728>>2];c[(c[e>>2]|0)+28736>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+28728>>2]|0)-(c[(c[e>>2]|0)+28732>>2]|0)));c[(c[e>>2]|0)+28732>>2]=c[f>>2];c[(c[e>>2]|0)+28728>>2]=c[f>>2];l=d;return;}function Cr(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0;h=l;l=l+64|0;i=h+52|0;j=h+48|0;k=h+44|0;m=h+40|0;n=h+36|0;o=h+32|0;p=h+28|0;q=h+24|0;r=h+20|0;s=h+16|0;t=h+12|0;u=h+8|0;v=h+4|0;w=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[n>>2];if(Dr()|0){if(c[p>>2]|0){g=(c[j>>2]|0)+28752+8|0;f=c[g>>2]|0;e=c[g+4>>2]|0;g=(Dr()|0)!=0;d=jE(1,0,(g?25:57)|0)|0;g=y;x=e>>>0>g>>>0|(e|0)==(g|0)&f>>>0>d>>>0;}else x=1;}else x=0;c[r>>2]=x&1;if((c[o>>2]|0)>>>0>=131072){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}c[s>>2]=vr(c[j>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;n=($q(c[s>>2]|0)|0)!=0;x=c[s>>2]|0;if(n){c[i>>2]=x;z=c[i>>2]|0;l=h;return z|0;}c[q>>2]=(c[q>>2]|0)+x;c[o>>2]=(c[o>>2]|0)-(c[s>>2]|0);c[u>>2]=wr(c[j>>2]|0,t,c[q>>2]|0,c[o>>2]|0)|0;s=($q(c[u>>2]|0)|0)!=0;x=c[u>>2]|0;if(s){c[i>>2]=x;z=c[i>>2]|0;l=h;return z|0;}c[q>>2]=(c[q>>2]|0)+x;c[o>>2]=(c[o>>2]|0)-(c[u>>2]|0);if(c[p>>2]|0){p=(c[j>>2]|0)+28752+8|0;u=c[p+4>>2]|0;if((u>>>0>0|(u|0)==0&(c[p>>2]|0)>>>0>16777216)&(c[t>>2]|0)>0)A=13;}else if((c[t>>2]|0)>0)A=13;if((A|0)==13?(c[v>>2]=Er(c[(c[j>>2]|0)+8>>2]|0)|0,A=(Fr()|0)!=0,c[w>>2]=A?7:20,(c[v>>2]|0)>>>0>=(c[w>>2]|0)>>>0):0){c[i>>2]=Gr(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[q>>2]|0,c[o>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;z=c[i>>2]|0;l=h;return z|0;}c[i>>2]=Hr(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[q>>2]|0,c[o>>2]|0,c[t>>2]|0,c[r>>2]|0)|0;z=c[i>>2]|0;l=h;return z|0;}function Dr(){return 1;}function Er(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=l;l=l+32|0;e=b+24|0;f=b+20|0;g=b+16|0;h=b+12|0;i=b+8|0;j=b+4|0;k=b;c[e>>2]=a;c[f>>2]=c[e>>2];c[g>>2]=c[(c[f>>2]|0)+4>>2];c[h>>2]=(c[e>>2]|0)+8;c[i>>2]=1<<c[g>>2];c[k>>2]=0;c[j>>2]=0;while(1){if((c[j>>2]|0)>>>0>=(c[i>>2]|0)>>>0)break;if((d[(c[h>>2]|0)+(c[j>>2]<<3)+2>>0]|0|0)>22)c[k>>2]=(c[k>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1;}c[k>>2]=c[k>>2]<<8-(c[g>>2]|0);l=b;return c[k>>2]|0;}function Fr(){return 0;}function Gr(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+32|0;j=i+28|0;k=i+24|0;m=i+20|0;n=i+16|0;o=i+12|0;p=i+8|0;q=i+4|0;r=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;h=c[k>>2]|0;g=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;if(c[(c[k>>2]|0)+28944>>2]|0){c[j>>2]=Xr(h,g,m,n,o,p,q)|0;s=c[j>>2]|0;l=i;return s|0;}else{c[j>>2]=Yr(h,g,m,n,o,p,q)|0;s=c[j>>2]|0;l=i;return s|0;}return 0;}function Hr(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+32|0;j=i+28|0;k=i+24|0;m=i+20|0;n=i+16|0;o=i+12|0;p=i+8|0;q=i+4|0;r=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;h=c[k>>2]|0;g=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;if(c[(c[k>>2]|0)+28944>>2]|0){c[j>>2]=Ir(h,g,m,n,o,p,q)|0;s=c[j>>2]|0;l=i;return s|0;}else{c[j>>2]=Jr(h,g,m,n,o,p,q)|0;s=c[j>>2]|0;l=i;return s|0;}return 0;}function Ir(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;m=l;l=l+448|0;n=m+432|0;o=m+424|0;p=m+420|0;q=m+416|0;r=m+412|0;s=m+408|0;t=m+404|0;u=m+400|0;v=m+396|0;w=m+392|0;x=m+388|0;y=m+384|0;z=m+380|0;A=m+376|0;B=m+372|0;C=m+368|0;D=m+364|0;E=m+360|0;F=m;G=m+356|0;H=m+352|0;I=m+344|0;J=m+340|0;K=m+336|0;L=m+332|0;M=m+328|0;N=m+320|0;O=m+316|0;P=m+312|0;Q=m+308|0;R=m+304|0;S=m+296|0;T=m+292|0;U=m+288|0;V=m+284|0;W=m+280|0;X=m+264|0;Y=m+256|0;Z=m+252|0;_=m+248|0;$=m+244|0;aa=m+240|0;ba=m+236|0;ca=m+232|0;da=m+228|0;ea=m+224|0;fa=m+220|0;ga=m+216|0;ha=m+212|0;ia=m+208|0;ja=m+204|0;ka=m+200|0;la=m+196|0;ma=m+192|0;na=m+188|0;oa=m+184|0;pa=m+180|0;qa=m+176|0;ra=m+172|0;sa=m+168|0;ta=m+164|0;ua=m+160|0;va=m+156|0;wa=m+152|0;xa=m+148|0;ya=m+80|0;za=m+76|0;Aa=m+72|0;Ba=m+56|0;Ca=m+52|0;Da=m+48|0;Ea=m+44|0;Fa=m+40|0;Ga=m+36|0;Ha=m+32|0;Ia=m+28|0;Ja=m+24|0;Ka=m+20|0;La=m+16|0;c[Fa>>2]=b;c[Ga>>2]=f;c[Ha>>2]=g;c[Ia>>2]=h;c[Ja>>2]=i;c[Ka>>2]=j;c[La>>2]=k;k=c[Ga>>2]|0;Ga=c[Ha>>2]|0;Ha=c[Ia>>2]|0;Ia=c[Ja>>2]|0;Ja=c[Ka>>2]|0;Ka=c[La>>2]|0;c[ha>>2]=c[Fa>>2];c[ia>>2]=k;c[ja>>2]=Ga;c[ka>>2]=Ha;c[la>>2]=Ia;c[ma>>2]=Ja;c[na>>2]=Ka;c[oa>>2]=c[ka>>2];c[pa>>2]=(c[oa>>2]|0)+(c[la>>2]|0);c[qa>>2]=c[ia>>2];c[ra>>2]=(c[qa>>2]|0)+(c[ja>>2]|0);c[sa>>2]=c[qa>>2];c[ta>>2]=c[(c[ha>>2]|0)+28916>>2];c[ua>>2]=(c[ta>>2]|0)+(c[(c[ha>>2]|0)+28932>>2]|0);c[va>>2]=c[(c[ha>>2]|0)+28732>>2];c[wa>>2]=c[(c[ha>>2]|0)+28736>>2];c[xa>>2]=c[(c[ha>>2]|0)+28740>>2];a:do{if(c[ma>>2]|0){c[(c[ha>>2]|0)+28812>>2]=1;c[za>>2]=0;while(1){if((c[za>>2]|0)>>>0>=3)break;c[ya+44+(c[za>>2]<<2)>>2]=c[(c[ha>>2]|0)+16+28700+(c[za>>2]<<2)>>2];c[za>>2]=(c[za>>2]|0)+1;}c[Aa>>2]=Kr(ya,c[oa>>2]|0,(c[pa>>2]|0)-(c[oa>>2]|0)|0)|0;if($q(c[Aa>>2]|0)|0){c[ga>>2]=-20;Ma=c[ga>>2]|0;l=m;return Ma|0;}Lr(ya+20|0,ya,c[c[ha>>2]>>2]|0);Lr(ya+28|0,ya,c[(c[ha>>2]|0)+8>>2]|0);Lr(ya+36|0,ya,c[(c[ha>>2]|0)+4>>2]|0);while(1){ja=(Mr(ya)|0)>>>0<=2;Na=c[ma>>2]|0;if(!(ja?(c[ma>>2]|0)!=0:0))break;c[ma>>2]=Na+-1;ja=c[na>>2]|0;c[V>>2]=ya;c[W>>2]=ja;c[Y>>2]=d[(c[(c[V>>2]|0)+20+4>>2]|0)+(c[(c[V>>2]|0)+20>>2]<<3)+2>>0];c[Z>>2]=d[(c[(c[V>>2]|0)+36+4>>2]|0)+(c[(c[V>>2]|0)+36>>2]<<3)+2>>0];c[_>>2]=d[(c[(c[V>>2]|0)+28+4>>2]|0)+(c[(c[V>>2]|0)+28>>2]<<3)+2>>0];c[$>>2]=(c[Y>>2]|0)+(c[Z>>2]|0)+(c[_>>2]|0);c[aa>>2]=c[(c[(c[V>>2]|0)+20+4>>2]|0)+(c[(c[V>>2]|0)+20>>2]<<3)+4>>2];c[ba>>2]=c[(c[(c[V>>2]|0)+36+4>>2]|0)+(c[(c[V>>2]|0)+36>>2]<<3)+4>>2];c[ca>>2]=c[(c[(c[V>>2]|0)+28+4>>2]|0)+(c[(c[V>>2]|0)+28>>2]<<3)+4>>2];do{if(c[_>>2]|0){ja=(Dr()|0)!=0;if(!(ja&(c[W>>2]|0)!=0&(c[_>>2]|0)>>>0>=25)){ja=c[ca>>2]|0;c[da>>2]=ja+(Nr(c[V>>2]|0,c[_>>2]|0)|0);if(!(Dr()|0))break;Mr(c[V>>2]|0)|0;break;}if((c[_>>2]|0)>>>0<(32-(c[(c[V>>2]|0)+4>>2]|0)|0)>>>0)Oa=c[_>>2]|0;else Oa=32-(c[(c[V>>2]|0)+4>>2]|0)|0;c[ea>>2]=(c[_>>2]|0)-Oa;ja=c[ca>>2]|0;ia=Nr(c[V>>2]|0,(c[_>>2]|0)-(c[ea>>2]|0)|0)|0;c[da>>2]=ja+(ia<<c[ea>>2]);Mr(c[V>>2]|0)|0;if(c[ea>>2]|0){ia=Nr(c[V>>2]|0,c[ea>>2]|0)|0;c[da>>2]=(c[da>>2]|0)+ia;}}else c[da>>2]=0;}while(0);do{if((c[_>>2]|0)>>>0<=1){c[da>>2]=(c[da>>2]|0)+((c[aa>>2]|0)==0&1);if(!(c[da>>2]|0)){c[da>>2]=c[(c[V>>2]|0)+44>>2];break;}ia=(c[V>>2]|0)+44|0;if((c[da>>2]|0)==3)Pa=(c[ia>>2]|0)-1|0;else Pa=c[ia+(c[da>>2]<<2)>>2]|0;c[fa>>2]=Pa;c[fa>>2]=(c[fa>>2]|0)+(((c[fa>>2]|0)!=0^1)&1);if((c[da>>2]|0)!=1)c[(c[V>>2]|0)+44+8>>2]=c[(c[V>>2]|0)+44+4>>2];c[(c[V>>2]|0)+44+4>>2]=c[(c[V>>2]|0)+44>>2];ia=c[fa>>2]|0;c[da>>2]=ia;c[(c[V>>2]|0)+44>>2]=ia;}else{c[(c[V>>2]|0)+44+8>>2]=c[(c[V>>2]|0)+44+4>>2];c[(c[V>>2]|0)+44+4>>2]=c[(c[V>>2]|0)+44>>2];c[(c[V>>2]|0)+44>>2]=c[da>>2];}}while(0);c[X+8>>2]=c[da>>2];ia=c[ba>>2]|0;if((c[Z>>2]|0)>>>0>0)Qa=Nr(c[V>>2]|0,c[Z>>2]|0)|0;else Qa=0;c[X+4>>2]=ia+Qa;if(Dr()|0?((c[Z>>2]|0)+(c[Y>>2]|0)|0)>>>0>=20:0)Mr(c[V>>2]|0)|0;ia=(Fr()|0)!=0;if(ia&(c[$>>2]|0)>>>0>=31)Mr(c[V>>2]|0)|0;ia=c[aa>>2]|0;if((c[Y>>2]|0)>>>0>0)Ra=Nr(c[V>>2]|0,c[Y>>2]|0)|0;else Ra=0;c[X>>2]=ia+Ra;if(Dr()|0)Mr(c[V>>2]|0)|0;ia=c[V>>2]|0;c[Q>>2]=(c[V>>2]|0)+20;c[R>>2]=ia;ia=(c[(c[Q>>2]|0)+4>>2]|0)+(c[c[Q>>2]>>2]<<3)|0;c[S>>2]=c[ia>>2];c[S+4>>2]=c[ia+4>>2];c[T>>2]=d[S+3>>0];c[U>>2]=Or(c[R>>2]|0,c[T>>2]|0)|0;c[c[Q>>2]>>2]=(e[S>>1]|0)+(c[U>>2]|0);ia=c[V>>2]|0;c[L>>2]=(c[V>>2]|0)+36;c[M>>2]=ia;ia=(c[(c[L>>2]|0)+4>>2]|0)+(c[c[L>>2]>>2]<<3)|0;c[N>>2]=c[ia>>2];c[N+4>>2]=c[ia+4>>2];c[O>>2]=d[N+3>>0];c[P>>2]=Or(c[M>>2]|0,c[O>>2]|0)|0;c[c[L>>2]>>2]=(e[N>>1]|0)+(c[P>>2]|0);if(Dr()|0)Mr(c[V>>2]|0)|0;ia=c[V>>2]|0;c[G>>2]=(c[V>>2]|0)+28;c[H>>2]=ia;ia=(c[(c[G>>2]|0)+4>>2]|0)+(c[c[G>>2]>>2]<<3)|0;c[I>>2]=c[ia>>2];c[I+4>>2]=c[ia+4>>2];c[J>>2]=d[I+3>>0];c[K>>2]=Or(c[H>>2]|0,c[J>>2]|0)|0;c[c[G>>2]>>2]=(e[I>>1]|0)+(c[K>>2]|0);c[Ba>>2]=c[X>>2];c[Ba+4>>2]=c[X+4>>2];c[Ba+8>>2]=c[X+8>>2];c[Ba+12>>2]=c[X+12>>2];ia=c[sa>>2]|0;ja=c[ra>>2]|0;la=c[ua>>2]|0;ka=c[va>>2]|0;Ka=c[wa>>2]|0;Ja=c[xa>>2]|0;Ia=F;Ha=Ba;Ga=Ia+16|0;do{a[Ia>>0]=a[Ha>>0]|0;Ia=Ia+1|0;Ha=Ha+1|0;}while((Ia|0)<(Ga|0));c[p>>2]=ia;c[q>>2]=ja;c[r>>2]=ta;c[s>>2]=la;c[t>>2]=ka;c[u>>2]=Ka;c[v>>2]=Ja;c[w>>2]=(c[p>>2]|0)+(c[F>>2]|0);c[x>>2]=(c[F>>2]|0)+(c[F+4>>2]|0);c[y>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[q>>2]|0)+-8;c[A>>2]=(c[c[r>>2]>>2]|0)+(c[F>>2]|0);c[B>>2]=(c[w>>2]|0)+(0-(c[F+8>>2]|0));b:do{if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[o>>2]=-70;else{if((c[A>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break;}Ha=c[p>>2]|0;if((c[w>>2]|0)>>>0>(c[z>>2]|0)>>>0){Ia=c[q>>2]|0;Ga=c[r>>2]|0;k=c[s>>2]|0;Fa=c[t>>2]|0;La=c[u>>2]|0;j=c[v>>2]|0;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];c[n+8>>2]=c[F+8>>2];c[n+12>>2]=c[F+12>>2];c[o>>2]=Pr(Ha,Ia,n,Ga,k,Fa,La,j)|0;break;}Qr(Ha,c[c[r>>2]>>2]|0);if((c[F>>2]|0)>>>0>8)Rr((c[p>>2]|0)+8|0,(c[c[r>>2]>>2]|0)+8|0,(c[F>>2]|0)-8|0);c[p>>2]=c[w>>2];c[c[r>>2]>>2]=c[A>>2];do{if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[t>>2]|0)|0)>>>0){if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[u>>2]|0)|0)>>>0){c[o>>2]=-20;break b;}c[B>>2]=(c[v>>2]|0)+((c[B>>2]|0)-(c[t>>2]|0));if(((c[B>>2]|0)+(c[F+4>>2]|0)|0)>>>0<=(c[v>>2]|0)>>>0){nE(c[w>>2]|0,c[B>>2]|0,c[F+4>>2]|0)|0;c[o>>2]=c[x>>2];break b;}c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);nE(c[w>>2]|0,c[B>>2]|0,c[C>>2]|0)|0;c[p>>2]=(c[w>>2]|0)+(c[C>>2]|0);Ha=F+4|0;c[Ha>>2]=(c[Ha>>2]|0)-(c[C>>2]|0);c[B>>2]=c[t>>2];if((c[p>>2]|0)>>>0<=(c[z>>2]|0)>>>0?(c[F+4>>2]|0)>>>0>=3:0)break;c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[F+4>>2]|0)>>>0)break;a[(c[p>>2]|0)+(c[D>>2]|0)>>0]=a[(c[B>>2]|0)+(c[D>>2]|0)>>0]|0;c[D>>2]=(c[D>>2]|0)+1;}c[o>>2]=c[x>>2];break b;}}while(0);if((c[F+8>>2]|0)>>>0<8){c[E>>2]=c[6816+(c[F+8>>2]<<2)>>2];a[c[p>>2]>>0]=a[c[B>>2]>>0]|0;a[(c[p>>2]|0)+1>>0]=a[(c[B>>2]|0)+1>>0]|0;a[(c[p>>2]|0)+2>>0]=a[(c[B>>2]|0)+2>>0]|0;a[(c[p>>2]|0)+3>>0]=a[(c[B>>2]|0)+3>>0]|0;c[B>>2]=(c[B>>2]|0)+(c[6848+(c[F+8>>2]<<2)>>2]|0);Sr((c[p>>2]|0)+4|0,c[B>>2]|0);c[B>>2]=(c[B>>2]|0)+(0-(c[E>>2]|0));}else Qr(c[p>>2]|0,c[B>>2]|0);c[p>>2]=(c[p>>2]|0)+8;c[B>>2]=(c[B>>2]|0)+8;Ha=c[p>>2]|0;c:do{if((c[y>>2]|0)>>>0>((c[q>>2]|0)+-13|0)>>>0){if(Ha>>>0<(c[z>>2]|0)>>>0){Rr(c[p>>2]|0,c[B>>2]|0,(c[z>>2]|0)-(c[p>>2]|0)|0);c[B>>2]=(c[B>>2]|0)+((c[z>>2]|0)-(c[p>>2]|0));c[p>>2]=c[z>>2];}while(1){if((c[p>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break c;j=c[B>>2]|0;c[B>>2]=j+1;La=a[j>>0]|0;j=c[p>>2]|0;c[p>>2]=j+1;a[j>>0]=La;}}else Rr(Ha,c[B>>2]|0,(c[F+4>>2]|0)-8|0);}while(0);c[o>>2]=c[x>>2];}}while(0);c[Ca>>2]=c[o>>2];Ja=($q(c[Ca>>2]|0)|0)!=0;Sa=c[Ca>>2]|0;if(Ja){Ta=73;break;}c[sa>>2]=(c[sa>>2]|0)+Sa;}if((Ta|0)==73){c[ga>>2]=Sa;Ma=c[ga>>2]|0;l=m;return Ma|0;}if(Na|0){c[ga>>2]=-20;Ma=c[ga>>2]|0;l=m;return Ma|0;}c[Da>>2]=0;while(1){if((c[Da>>2]|0)>>>0>=3)break a;c[(c[ha>>2]|0)+16+28700+(c[Da>>2]<<2)>>2]=c[ya+44+(c[Da>>2]<<2)>>2];c[Da>>2]=(c[Da>>2]|0)+1;}}}while(0);c[Ea>>2]=(c[ua>>2]|0)-(c[ta>>2]|0);if((c[Ea>>2]|0)>>>0>((c[ra>>2]|0)-(c[sa>>2]|0)|0)>>>0){c[ga>>2]=-70;Ma=c[ga>>2]|0;l=m;return Ma|0;}else{mE(c[sa>>2]|0,c[ta>>2]|0,c[Ea>>2]|0)|0;c[sa>>2]=(c[sa>>2]|0)+(c[Ea>>2]|0);c[ga>>2]=(c[sa>>2]|0)-(c[qa>>2]|0);Ma=c[ga>>2]|0;l=m;return Ma|0;}return 0;}function Jr(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;m=l;l=l+448|0;n=m+432|0;o=m+424|0;p=m+420|0;q=m+416|0;r=m+412|0;s=m+408|0;t=m+404|0;u=m+400|0;v=m+396|0;w=m+392|0;x=m+388|0;y=m+384|0;z=m+380|0;A=m+376|0;B=m+372|0;C=m+368|0;D=m+364|0;E=m+360|0;F=m;G=m+356|0;H=m+352|0;I=m+344|0;J=m+340|0;K=m+336|0;L=m+332|0;M=m+328|0;N=m+320|0;O=m+316|0;P=m+312|0;Q=m+308|0;R=m+304|0;S=m+296|0;T=m+292|0;U=m+288|0;V=m+284|0;W=m+280|0;X=m+264|0;Y=m+256|0;Z=m+252|0;_=m+248|0;$=m+244|0;aa=m+240|0;ba=m+236|0;ca=m+232|0;da=m+228|0;ea=m+224|0;fa=m+220|0;ga=m+216|0;ha=m+212|0;ia=m+208|0;ja=m+204|0;ka=m+200|0;la=m+196|0;ma=m+192|0;na=m+188|0;oa=m+184|0;pa=m+180|0;qa=m+176|0;ra=m+172|0;sa=m+168|0;ta=m+164|0;ua=m+160|0;va=m+156|0;wa=m+152|0;xa=m+148|0;ya=m+80|0;za=m+76|0;Aa=m+72|0;Ba=m+56|0;Ca=m+52|0;Da=m+48|0;Ea=m+44|0;Fa=m+40|0;Ga=m+36|0;Ha=m+32|0;Ia=m+28|0;Ja=m+24|0;Ka=m+20|0;La=m+16|0;c[Fa>>2]=b;c[Ga>>2]=f;c[Ha>>2]=g;c[Ia>>2]=h;c[Ja>>2]=i;c[Ka>>2]=j;c[La>>2]=k;k=c[Ga>>2]|0;Ga=c[Ha>>2]|0;Ha=c[Ia>>2]|0;Ia=c[Ja>>2]|0;Ja=c[Ka>>2]|0;Ka=c[La>>2]|0;c[ha>>2]=c[Fa>>2];c[ia>>2]=k;c[ja>>2]=Ga;c[ka>>2]=Ha;c[la>>2]=Ia;c[ma>>2]=Ja;c[na>>2]=Ka;c[oa>>2]=c[ka>>2];c[pa>>2]=(c[oa>>2]|0)+(c[la>>2]|0);c[qa>>2]=c[ia>>2];c[ra>>2]=(c[qa>>2]|0)+(c[ja>>2]|0);c[sa>>2]=c[qa>>2];c[ta>>2]=c[(c[ha>>2]|0)+28916>>2];c[ua>>2]=(c[ta>>2]|0)+(c[(c[ha>>2]|0)+28932>>2]|0);c[va>>2]=c[(c[ha>>2]|0)+28732>>2];c[wa>>2]=c[(c[ha>>2]|0)+28736>>2];c[xa>>2]=c[(c[ha>>2]|0)+28740>>2];a:do{if(c[ma>>2]|0){c[(c[ha>>2]|0)+28812>>2]=1;c[za>>2]=0;while(1){if((c[za>>2]|0)>>>0>=3)break;c[ya+44+(c[za>>2]<<2)>>2]=c[(c[ha>>2]|0)+16+28700+(c[za>>2]<<2)>>2];c[za>>2]=(c[za>>2]|0)+1;}c[Aa>>2]=Kr(ya,c[oa>>2]|0,(c[pa>>2]|0)-(c[oa>>2]|0)|0)|0;if($q(c[Aa>>2]|0)|0){c[ga>>2]=-20;Ma=c[ga>>2]|0;l=m;return Ma|0;}Lr(ya+20|0,ya,c[c[ha>>2]>>2]|0);Lr(ya+28|0,ya,c[(c[ha>>2]|0)+8>>2]|0);Lr(ya+36|0,ya,c[(c[ha>>2]|0)+4>>2]|0);while(1){ja=(Mr(ya)|0)>>>0<=2;Na=c[ma>>2]|0;if(!(ja?(c[ma>>2]|0)!=0:0))break;c[ma>>2]=Na+-1;ja=c[na>>2]|0;c[V>>2]=ya;c[W>>2]=ja;c[Y>>2]=d[(c[(c[V>>2]|0)+20+4>>2]|0)+(c[(c[V>>2]|0)+20>>2]<<3)+2>>0];c[Z>>2]=d[(c[(c[V>>2]|0)+36+4>>2]|0)+(c[(c[V>>2]|0)+36>>2]<<3)+2>>0];c[_>>2]=d[(c[(c[V>>2]|0)+28+4>>2]|0)+(c[(c[V>>2]|0)+28>>2]<<3)+2>>0];c[$>>2]=(c[Y>>2]|0)+(c[Z>>2]|0)+(c[_>>2]|0);c[aa>>2]=c[(c[(c[V>>2]|0)+20+4>>2]|0)+(c[(c[V>>2]|0)+20>>2]<<3)+4>>2];c[ba>>2]=c[(c[(c[V>>2]|0)+36+4>>2]|0)+(c[(c[V>>2]|0)+36>>2]<<3)+4>>2];c[ca>>2]=c[(c[(c[V>>2]|0)+28+4>>2]|0)+(c[(c[V>>2]|0)+28>>2]<<3)+4>>2];do{if(c[_>>2]|0){ja=(Dr()|0)!=0;if(!(ja&(c[W>>2]|0)!=0&(c[_>>2]|0)>>>0>=25)){ja=c[ca>>2]|0;c[da>>2]=ja+(Nr(c[V>>2]|0,c[_>>2]|0)|0);if(!(Dr()|0))break;Mr(c[V>>2]|0)|0;break;}if((c[_>>2]|0)>>>0<(32-(c[(c[V>>2]|0)+4>>2]|0)|0)>>>0)Oa=c[_>>2]|0;else Oa=32-(c[(c[V>>2]|0)+4>>2]|0)|0;c[ea>>2]=(c[_>>2]|0)-Oa;ja=c[ca>>2]|0;ia=Nr(c[V>>2]|0,(c[_>>2]|0)-(c[ea>>2]|0)|0)|0;c[da>>2]=ja+(ia<<c[ea>>2]);Mr(c[V>>2]|0)|0;if(c[ea>>2]|0){ia=Nr(c[V>>2]|0,c[ea>>2]|0)|0;c[da>>2]=(c[da>>2]|0)+ia;}}else c[da>>2]=0;}while(0);do{if((c[_>>2]|0)>>>0<=1){c[da>>2]=(c[da>>2]|0)+((c[aa>>2]|0)==0&1);if(!(c[da>>2]|0)){c[da>>2]=c[(c[V>>2]|0)+44>>2];break;}ia=(c[V>>2]|0)+44|0;if((c[da>>2]|0)==3)Pa=(c[ia>>2]|0)-1|0;else Pa=c[ia+(c[da>>2]<<2)>>2]|0;c[fa>>2]=Pa;c[fa>>2]=(c[fa>>2]|0)+(((c[fa>>2]|0)!=0^1)&1);if((c[da>>2]|0)!=1)c[(c[V>>2]|0)+44+8>>2]=c[(c[V>>2]|0)+44+4>>2];c[(c[V>>2]|0)+44+4>>2]=c[(c[V>>2]|0)+44>>2];ia=c[fa>>2]|0;c[da>>2]=ia;c[(c[V>>2]|0)+44>>2]=ia;}else{c[(c[V>>2]|0)+44+8>>2]=c[(c[V>>2]|0)+44+4>>2];c[(c[V>>2]|0)+44+4>>2]=c[(c[V>>2]|0)+44>>2];c[(c[V>>2]|0)+44>>2]=c[da>>2];}}while(0);c[X+8>>2]=c[da>>2];ia=c[ba>>2]|0;if((c[Z>>2]|0)>>>0>0)Qa=Nr(c[V>>2]|0,c[Z>>2]|0)|0;else Qa=0;c[X+4>>2]=ia+Qa;if(Dr()|0?((c[Z>>2]|0)+(c[Y>>2]|0)|0)>>>0>=20:0)Mr(c[V>>2]|0)|0;ia=(Fr()|0)!=0;if(ia&(c[$>>2]|0)>>>0>=31)Mr(c[V>>2]|0)|0;ia=c[aa>>2]|0;if((c[Y>>2]|0)>>>0>0)Ra=Nr(c[V>>2]|0,c[Y>>2]|0)|0;else Ra=0;c[X>>2]=ia+Ra;if(Dr()|0)Mr(c[V>>2]|0)|0;ia=c[V>>2]|0;c[Q>>2]=(c[V>>2]|0)+20;c[R>>2]=ia;ia=(c[(c[Q>>2]|0)+4>>2]|0)+(c[c[Q>>2]>>2]<<3)|0;c[S>>2]=c[ia>>2];c[S+4>>2]=c[ia+4>>2];c[T>>2]=d[S+3>>0];c[U>>2]=Or(c[R>>2]|0,c[T>>2]|0)|0;c[c[Q>>2]>>2]=(e[S>>1]|0)+(c[U>>2]|0);ia=c[V>>2]|0;c[L>>2]=(c[V>>2]|0)+36;c[M>>2]=ia;ia=(c[(c[L>>2]|0)+4>>2]|0)+(c[c[L>>2]>>2]<<3)|0;c[N>>2]=c[ia>>2];c[N+4>>2]=c[ia+4>>2];c[O>>2]=d[N+3>>0];c[P>>2]=Or(c[M>>2]|0,c[O>>2]|0)|0;c[c[L>>2]>>2]=(e[N>>1]|0)+(c[P>>2]|0);if(Dr()|0)Mr(c[V>>2]|0)|0;ia=c[V>>2]|0;c[G>>2]=(c[V>>2]|0)+28;c[H>>2]=ia;ia=(c[(c[G>>2]|0)+4>>2]|0)+(c[c[G>>2]>>2]<<3)|0;c[I>>2]=c[ia>>2];c[I+4>>2]=c[ia+4>>2];c[J>>2]=d[I+3>>0];c[K>>2]=Or(c[H>>2]|0,c[J>>2]|0)|0;c[c[G>>2]>>2]=(e[I>>1]|0)+(c[K>>2]|0);c[Ba>>2]=c[X>>2];c[Ba+4>>2]=c[X+4>>2];c[Ba+8>>2]=c[X+8>>2];c[Ba+12>>2]=c[X+12>>2];ia=c[sa>>2]|0;ja=c[ra>>2]|0;la=c[ua>>2]|0;ka=c[va>>2]|0;Ka=c[wa>>2]|0;Ja=c[xa>>2]|0;Ia=F;Ha=Ba;Ga=Ia+16|0;do{a[Ia>>0]=a[Ha>>0]|0;Ia=Ia+1|0;Ha=Ha+1|0;}while((Ia|0)<(Ga|0));c[p>>2]=ia;c[q>>2]=ja;c[r>>2]=ta;c[s>>2]=la;c[t>>2]=ka;c[u>>2]=Ka;c[v>>2]=Ja;c[w>>2]=(c[p>>2]|0)+(c[F>>2]|0);c[x>>2]=(c[F>>2]|0)+(c[F+4>>2]|0);c[y>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[q>>2]|0)+-8;c[A>>2]=(c[c[r>>2]>>2]|0)+(c[F>>2]|0);c[B>>2]=(c[w>>2]|0)+(0-(c[F+8>>2]|0));b:do{if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[o>>2]=-70;else{if((c[A>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break;}Ha=c[p>>2]|0;if((c[w>>2]|0)>>>0>(c[z>>2]|0)>>>0){Ia=c[q>>2]|0;Ga=c[r>>2]|0;k=c[s>>2]|0;Fa=c[t>>2]|0;La=c[u>>2]|0;j=c[v>>2]|0;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];c[n+8>>2]=c[F+8>>2];c[n+12>>2]=c[F+12>>2];c[o>>2]=Pr(Ha,Ia,n,Ga,k,Fa,La,j)|0;break;}Qr(Ha,c[c[r>>2]>>2]|0);if((c[F>>2]|0)>>>0>8)Rr((c[p>>2]|0)+8|0,(c[c[r>>2]>>2]|0)+8|0,(c[F>>2]|0)-8|0);c[p>>2]=c[w>>2];c[c[r>>2]>>2]=c[A>>2];do{if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[t>>2]|0)|0)>>>0){if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[u>>2]|0)|0)>>>0){c[o>>2]=-20;break b;}c[B>>2]=(c[v>>2]|0)+((c[B>>2]|0)-(c[t>>2]|0));if(((c[B>>2]|0)+(c[F+4>>2]|0)|0)>>>0<=(c[v>>2]|0)>>>0){nE(c[w>>2]|0,c[B>>2]|0,c[F+4>>2]|0)|0;c[o>>2]=c[x>>2];break b;}c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);nE(c[w>>2]|0,c[B>>2]|0,c[C>>2]|0)|0;c[p>>2]=(c[w>>2]|0)+(c[C>>2]|0);Ha=F+4|0;c[Ha>>2]=(c[Ha>>2]|0)-(c[C>>2]|0);c[B>>2]=c[t>>2];if((c[p>>2]|0)>>>0<=(c[z>>2]|0)>>>0?(c[F+4>>2]|0)>>>0>=3:0)break;c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[F+4>>2]|0)>>>0)break;a[(c[p>>2]|0)+(c[D>>2]|0)>>0]=a[(c[B>>2]|0)+(c[D>>2]|0)>>0]|0;c[D>>2]=(c[D>>2]|0)+1;}c[o>>2]=c[x>>2];break b;}}while(0);if((c[F+8>>2]|0)>>>0<8){c[E>>2]=c[6816+(c[F+8>>2]<<2)>>2];a[c[p>>2]>>0]=a[c[B>>2]>>0]|0;a[(c[p>>2]|0)+1>>0]=a[(c[B>>2]|0)+1>>0]|0;a[(c[p>>2]|0)+2>>0]=a[(c[B>>2]|0)+2>>0]|0;a[(c[p>>2]|0)+3>>0]=a[(c[B>>2]|0)+3>>0]|0;c[B>>2]=(c[B>>2]|0)+(c[6848+(c[F+8>>2]<<2)>>2]|0);Sr((c[p>>2]|0)+4|0,c[B>>2]|0);c[B>>2]=(c[B>>2]|0)+(0-(c[E>>2]|0));}else Qr(c[p>>2]|0,c[B>>2]|0);c[p>>2]=(c[p>>2]|0)+8;c[B>>2]=(c[B>>2]|0)+8;Ha=c[p>>2]|0;c:do{if((c[y>>2]|0)>>>0>((c[q>>2]|0)+-13|0)>>>0){if(Ha>>>0<(c[z>>2]|0)>>>0){Rr(c[p>>2]|0,c[B>>2]|0,(c[z>>2]|0)-(c[p>>2]|0)|0);c[B>>2]=(c[B>>2]|0)+((c[z>>2]|0)-(c[p>>2]|0));c[p>>2]=c[z>>2];}while(1){if((c[p>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break c;j=c[B>>2]|0;c[B>>2]=j+1;La=a[j>>0]|0;j=c[p>>2]|0;c[p>>2]=j+1;a[j>>0]=La;}}else Rr(Ha,c[B>>2]|0,(c[F+4>>2]|0)-8|0);}while(0);c[o>>2]=c[x>>2];}}while(0);c[Ca>>2]=c[o>>2];Ja=($q(c[Ca>>2]|0)|0)!=0;Sa=c[Ca>>2]|0;if(Ja){Ta=73;break;}c[sa>>2]=(c[sa>>2]|0)+Sa;}if((Ta|0)==73){c[ga>>2]=Sa;Ma=c[ga>>2]|0;l=m;return Ma|0;}if(Na|0){c[ga>>2]=-20;Ma=c[ga>>2]|0;l=m;return Ma|0;}c[Da>>2]=0;while(1){if((c[Da>>2]|0)>>>0>=3)break a;c[(c[ha>>2]|0)+16+28700+(c[Da>>2]<<2)>>2]=c[ya+44+(c[Da>>2]<<2)>>2];c[Da>>2]=(c[Da>>2]|0)+1;}}}while(0);c[Ea>>2]=(c[ua>>2]|0)-(c[ta>>2]|0);if((c[Ea>>2]|0)>>>0>((c[ra>>2]|0)-(c[sa>>2]|0)|0)>>>0){c[ga>>2]=-70;Ma=c[ga>>2]|0;l=m;return Ma|0;}else{mE(c[sa>>2]|0,c[ta>>2]|0,c[Ea>>2]|0)|0;c[sa>>2]=(c[sa>>2]|0)+(c[Ea>>2]|0);c[ga>>2]=(c[sa>>2]|0)-(c[qa>>2]|0);Ma=c[ga>>2]|0;l=m;return Ma|0;}return 0;}function Kr(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}c[(c[i>>2]|0)+12>>2]=c[j>>2];c[(c[i>>2]|0)+16>>2]=(c[(c[i>>2]|0)+12>>2]|0)+4;do{if((c[k>>2]|0)>>>0>=4){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;f=Wr(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=f;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0)p=8-(Ar(d[m>>0]|0)|0)|0;else p=0;c[(c[i>>2]|0)+4>>2]=p;if(!(d[m>>0]|0)){c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);q=10;break;}case 6:{q=10;break;}case 5:{q=11;break;}case 4:{q=12;break;}case 3:{q=13;break;}case 2:{q=14;break;}default:{}}if((q|0)==10){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);q=11;}if((q|0)==11){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);q=12;}if((q|0)==12){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);q=13;}if((q|0)==13){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);q=14;}if((q|0)==14){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0)r=8-(Ar(d[n>>0]|0)|0)|0;else r=0;c[(c[i>>2]|0)+4>>2]=r;if(d[n>>0]|0|0){f=(c[i>>2]|0)+4|0;c[f>>2]=(c[f>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-20;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function Lr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[h>>2];c[j>>2]=c[i>>2];i=Or(c[g>>2]|0,c[(c[j>>2]|0)+4>>2]|0)|0;c[c[f>>2]>>2]=i;Mr(c[g>>2]|0)|0;c[(c[f>>2]|0)+4>>2]=(c[h>>2]|0)+8;l=e;return;}function Mr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=Wr(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=Wr(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function Nr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Vr(c[e>>2]|0,c[f>>2]|0)|0;Ur(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Or(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=Tr(c[e>>2]|0,c[f>>2]|0)|0;Ur(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function Pr(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;k=l;l=l+64|0;m=k+56|0;n=k+52|0;o=k+48|0;p=k+44|0;q=k+40|0;r=k+36|0;s=k+32|0;t=k+28|0;u=k+24|0;v=k+20|0;w=k+16|0;x=k+12|0;y=k+8|0;z=k+4|0;A=k;c[n>>2]=b;c[o>>2]=d;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=(c[n>>2]|0)+(c[e>>2]|0);c[v>>2]=(c[e>>2]|0)+(c[e+4>>2]|0);c[w>>2]=(c[n>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[o>>2]|0)+-8;c[y>>2]=(c[c[p>>2]>>2]|0)+(c[e>>2]|0);c[z>>2]=(c[u>>2]|0)+(0-(c[e+8>>2]|0));if((c[w>>2]|0)>>>0>(c[o>>2]|0)>>>0){c[m>>2]=-70;B=c[m>>2]|0;l=k;return B|0;}if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0){c[m>>2]=-20;B=c[m>>2]|0;l=k;return B|0;}if((c[u>>2]|0)>>>0<=(c[x>>2]|0)>>>0){c[m>>2]=-1;B=c[m>>2]|0;l=k;return B|0;}if((c[n>>2]|0)>>>0<(c[x>>2]|0)>>>0){Rr(c[n>>2]|0,c[c[p>>2]>>2]|0,(c[x>>2]|0)-(c[n>>2]|0)|0);q=c[p>>2]|0;c[q>>2]=(c[q>>2]|0)+((c[x>>2]|0)-(c[n>>2]|0));c[n>>2]=c[x>>2];}while(1){if((c[n>>2]|0)>>>0>=(c[u>>2]|0)>>>0)break;x=c[p>>2]|0;q=c[x>>2]|0;c[x>>2]=q+1;x=a[q>>0]|0;q=c[n>>2]|0;c[n>>2]=q+1;a[q>>0]=x;}do{if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[r>>2]|0)|0)>>>0){if((c[e+8>>2]|0)>>>0>((c[u>>2]|0)-(c[s>>2]|0)|0)>>>0){c[m>>2]=-20;B=c[m>>2]|0;l=k;return B|0;}c[z>>2]=(c[t>>2]|0)+(0-((c[r>>2]|0)-(c[z>>2]|0)));if(((c[z>>2]|0)+(c[e+4>>2]|0)|0)>>>0>(c[t>>2]|0)>>>0){c[A>>2]=(c[t>>2]|0)-(c[z>>2]|0);nE(c[u>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;c[n>>2]=(c[u>>2]|0)+(c[A>>2]|0);p=e+4|0;c[p>>2]=(c[p>>2]|0)-(c[A>>2]|0);c[z>>2]=c[r>>2];break;}nE(c[u>>2]|0,c[z>>2]|0,c[e+4>>2]|0)|0;c[m>>2]=c[v>>2];B=c[m>>2]|0;l=k;return B|0;}}while(0);while(1){if((c[n>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;e=c[z>>2]|0;c[z>>2]=e+1;u=a[e>>0]|0;e=c[n>>2]|0;c[n>>2]=e+1;a[e>>0]=u;}c[m>>2]=c[v>>2];B=c[m>>2]|0;l=k;return B|0;}function Qr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Rr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Qr(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Sr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;l=e;return;}function Tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function Ur(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function Vr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function Wr(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Dr()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=hq(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=sq(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Xr(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0;m=l;l=l+784|0;n=m+760|0;o=m+756|0;p=m+752|0;q=m+748|0;r=m+744|0;s=m+740|0;t=m+736|0;u=m+732|0;v=m+728|0;w=m+724|0;x=m+720|0;y=m+716|0;z=m+712|0;A=m+708|0;B=m+704|0;C=m+700|0;D=m+696|0;E=m+692|0;F=m+80|0;G=m+688|0;H=m+684|0;I=m+680|0;J=m+676|0;K=m+672|0;L=m+668|0;M=m+664|0;N=m+660|0;O=m+656|0;P=m+652|0;Q=m+648|0;R=m+644|0;S=m+640|0;T=m+636|0;U=m+632|0;V=m+628|0;W=m+624|0;X=m+64|0;Y=m+620|0;Z=m+616|0;_=m+608|0;$=m+604|0;aa=m+600|0;ba=m+596|0;ca=m+592|0;da=m+584|0;ea=m+580|0;fa=m+576|0;ga=m+572|0;ha=m+568|0;ia=m+560|0;ja=m+556|0;ka=m+552|0;la=m+548|0;ma=m+544|0;na=m+528|0;oa=m+524|0;pa=m+520|0;qa=m+516|0;ra=m+512|0;sa=m+508|0;ta=m+504|0;ua=m+500|0;va=m+496|0;wa=m+492|0;xa=m+488|0;ya=m+484|0;za=m+480|0;Aa=m+476|0;Ba=m+472|0;Ca=m+464|0;Da=m+460|0;Ea=m+456|0;Fa=m+452|0;Ga=m+448|0;Ha=m+440|0;Ia=m+436|0;Ja=m+432|0;Ka=m+428|0;La=m+424|0;Ma=m+416|0;Na=m+412|0;Oa=m+408|0;Pa=m+404|0;Qa=m+400|0;Ra=m+384|0;Sa=m+376|0;Ta=m+372|0;Ua=m+368|0;Va=m+364|0;Wa=m+360|0;Xa=m+356|0;Ya=m+352|0;Za=m+348|0;_a=m+344|0;$a=m+340|0;ab=m+336|0;bb=m+332|0;cb=m+328|0;db=m+324|0;eb=m+320|0;fb=m+316|0;gb=m+312|0;hb=m+308|0;ib=m+304|0;jb=m+300|0;kb=m+296|0;lb=m+292|0;mb=m+288|0;nb=m+284|0;ob=m+280|0;pb=m+276|0;qb=m+272|0;rb=m+268|0;sb=m+264|0;tb=m+260|0;ub=m;vb=m+256|0;wb=m+188|0;xb=m+184|0;yb=m+180|0;zb=m+176|0;Ab=m+160|0;Bb=m+144|0;Cb=m+136|0;Db=m+132|0;Eb=m+128|0;Fb=m+124|0;Gb=m+120|0;Hb=m+116|0;Ib=m+112|0;Jb=m+108|0;Kb=m+104|0;Lb=m+100|0;Mb=m+96|0;c[Gb>>2]=b;c[Hb>>2]=f;c[Ib>>2]=g;c[Jb>>2]=h;c[Kb>>2]=i;c[Lb>>2]=j;c[Mb>>2]=k;k=c[Hb>>2]|0;Hb=c[Ib>>2]|0;Ib=c[Jb>>2]|0;Jb=c[Kb>>2]|0;Kb=c[Lb>>2]|0;Lb=c[Mb>>2]|0;c[db>>2]=c[Gb>>2];c[eb>>2]=k;c[fb>>2]=Hb;c[gb>>2]=Ib;c[hb>>2]=Jb;c[ib>>2]=Kb;c[jb>>2]=Lb;c[kb>>2]=c[gb>>2];c[lb>>2]=(c[kb>>2]|0)+(c[hb>>2]|0);c[mb>>2]=c[eb>>2];c[nb>>2]=(c[mb>>2]|0)+(c[fb>>2]|0);c[ob>>2]=c[mb>>2];c[pb>>2]=c[(c[db>>2]|0)+28916>>2];c[qb>>2]=(c[pb>>2]|0)+(c[(c[db>>2]|0)+28932>>2]|0);c[rb>>2]=c[(c[db>>2]|0)+28732>>2];c[sb>>2]=c[(c[db>>2]|0)+28736>>2];c[tb>>2]=c[(c[db>>2]|0)+28740>>2];a:do{if(c[ib>>2]|0){c[vb>>2]=(c[ib>>2]|0)<4?c[ib>>2]|0:4;c[(c[db>>2]|0)+28812>>2]=1;c[yb>>2]=0;while(1){if((c[yb>>2]|0)>>>0>=3)break;c[wb+44+(c[yb>>2]<<2)>>2]=c[(c[db>>2]|0)+16+28700+(c[yb>>2]<<2)>>2];c[yb>>2]=(c[yb>>2]|0)+1;}c[wb+56>>2]=c[rb>>2];c[wb+64>>2]=(c[ob>>2]|0)-(c[rb>>2]|0);c[wb+60>>2]=c[tb>>2];c[zb>>2]=Kr(wb,c[kb>>2]|0,(c[lb>>2]|0)-(c[kb>>2]|0)|0)|0;if($q(c[zb>>2]|0)|0){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}Lr(wb+20|0,wb,c[c[db>>2]>>2]|0);Lr(wb+28|0,wb,c[(c[db>>2]|0)+8>>2]|0);Lr(wb+36|0,wb,c[(c[db>>2]|0)+4>>2]|0);c[xb>>2]=0;while(1){if((Mr(wb)|0)>>>0<=2)Ob=(c[xb>>2]|0)<(c[vb>>2]|0);else Ob=0;Pb=c[xb>>2]|0;if(!Ob)break;fb=ub+(Pb<<4)|0;eb=c[jb>>2]|0;c[Pa>>2]=wb;c[Qa>>2]=eb;c[Sa>>2]=d[(c[(c[Pa>>2]|0)+20+4>>2]|0)+(c[(c[Pa>>2]|0)+20>>2]<<3)+2>>0];c[Ta>>2]=d[(c[(c[Pa>>2]|0)+36+4>>2]|0)+(c[(c[Pa>>2]|0)+36>>2]<<3)+2>>0];c[Ua>>2]=d[(c[(c[Pa>>2]|0)+28+4>>2]|0)+(c[(c[Pa>>2]|0)+28>>2]<<3)+2>>0];c[Va>>2]=(c[Sa>>2]|0)+(c[Ta>>2]|0)+(c[Ua>>2]|0);c[Wa>>2]=c[(c[(c[Pa>>2]|0)+20+4>>2]|0)+(c[(c[Pa>>2]|0)+20>>2]<<3)+4>>2];c[Xa>>2]=c[(c[(c[Pa>>2]|0)+36+4>>2]|0)+(c[(c[Pa>>2]|0)+36>>2]<<3)+4>>2];c[Ya>>2]=c[(c[(c[Pa>>2]|0)+28+4>>2]|0)+(c[(c[Pa>>2]|0)+28>>2]<<3)+4>>2];do{if(c[Ua>>2]|0){eb=(Dr()|0)!=0;if(!(eb&(c[Qa>>2]|0)!=0)){eb=c[Ya>>2]|0;c[Za>>2]=eb+(Nr(c[Pa>>2]|0,c[Ua>>2]|0)|0);if(!(Dr()|0))break;Mr(c[Pa>>2]|0)|0;break;}c[_a>>2]=(c[Ua>>2]|0)-((c[Ua>>2]|0)>>>0<24?c[Ua>>2]|0:24);eb=c[Ya>>2]|0;hb=Nr(c[Pa>>2]|0,(c[Ua>>2]|0)-(c[_a>>2]|0)|0)|0;c[Za>>2]=eb+(hb<<c[_a>>2]);hb=(Dr()|0)!=0;if(hb|(c[_a>>2]|0)!=0)Mr(c[Pa>>2]|0)|0;if(c[_a>>2]|0){hb=Nr(c[Pa>>2]|0,c[_a>>2]|0)|0;c[Za>>2]=(c[Za>>2]|0)+hb;}}else c[Za>>2]=0;}while(0);do{if((c[Ua>>2]|0)>>>0<=1){c[Za>>2]=(c[Za>>2]|0)+((c[Wa>>2]|0)==0&1);if(!(c[Za>>2]|0)){c[Za>>2]=c[(c[Pa>>2]|0)+44>>2];break;}hb=(c[Pa>>2]|0)+44|0;if((c[Za>>2]|0)==3)Qb=(c[hb>>2]|0)-1|0;else Qb=c[hb+(c[Za>>2]<<2)>>2]|0;c[$a>>2]=Qb;c[$a>>2]=(c[$a>>2]|0)+(((c[$a>>2]|0)!=0^1)&1);if((c[Za>>2]|0)!=1)c[(c[Pa>>2]|0)+44+8>>2]=c[(c[Pa>>2]|0)+44+4>>2];c[(c[Pa>>2]|0)+44+4>>2]=c[(c[Pa>>2]|0)+44>>2];hb=c[$a>>2]|0;c[Za>>2]=hb;c[(c[Pa>>2]|0)+44>>2]=hb;}else{c[(c[Pa>>2]|0)+44+8>>2]=c[(c[Pa>>2]|0)+44+4>>2];c[(c[Pa>>2]|0)+44+4>>2]=c[(c[Pa>>2]|0)+44>>2];c[(c[Pa>>2]|0)+44>>2]=c[Za>>2];}}while(0);c[Ra+8>>2]=c[Za>>2];hb=c[Xa>>2]|0;if((c[Ta>>2]|0)>>>0>0)Rb=Nr(c[Pa>>2]|0,c[Ta>>2]|0)|0;else Rb=0;c[Ra+4>>2]=hb+Rb;if(Dr()|0?((c[Ta>>2]|0)+(c[Sa>>2]|0)|0)>>>0>=20:0)Mr(c[Pa>>2]|0)|0;hb=(Fr()|0)!=0;if(hb&(c[Va>>2]|0)>>>0>=31)Mr(c[Pa>>2]|0)|0;hb=c[Wa>>2]|0;if((c[Sa>>2]|0)>>>0>0)Sb=Nr(c[Pa>>2]|0,c[Sa>>2]|0)|0;else Sb=0;c[Ra>>2]=hb+Sb;if(Dr()|0)Mr(c[Pa>>2]|0)|0;c[ab>>2]=(c[(c[Pa>>2]|0)+64>>2]|0)+(c[Ra>>2]|0);hb=c[Pa>>2]|0;if((c[Ra+8>>2]|0)>>>0>(c[ab>>2]|0)>>>0)Tb=c[hb+60>>2]|0;else Tb=c[hb+56>>2]|0;c[bb>>2]=Tb;c[Ra+12>>2]=(c[bb>>2]|0)+(c[ab>>2]|0)+(0-(c[Ra+8>>2]|0));c[(c[Pa>>2]|0)+64>>2]=(c[ab>>2]|0)+(c[Ra+4>>2]|0);hb=c[Pa>>2]|0;c[Ka>>2]=(c[Pa>>2]|0)+20;c[La>>2]=hb;hb=(c[(c[Ka>>2]|0)+4>>2]|0)+(c[c[Ka>>2]>>2]<<3)|0;c[Ma>>2]=c[hb>>2];c[Ma+4>>2]=c[hb+4>>2];c[Na>>2]=d[Ma+3>>0];c[Oa>>2]=Or(c[La>>2]|0,c[Na>>2]|0)|0;c[c[Ka>>2]>>2]=(e[Ma>>1]|0)+(c[Oa>>2]|0);hb=c[Pa>>2]|0;c[Fa>>2]=(c[Pa>>2]|0)+36;c[Ga>>2]=hb;hb=(c[(c[Fa>>2]|0)+4>>2]|0)+(c[c[Fa>>2]>>2]<<3)|0;c[Ha>>2]=c[hb>>2];c[Ha+4>>2]=c[hb+4>>2];c[Ia>>2]=d[Ha+3>>0];c[Ja>>2]=Or(c[Ga>>2]|0,c[Ia>>2]|0)|0;c[c[Fa>>2]>>2]=(e[Ha>>1]|0)+(c[Ja>>2]|0);if(Dr()|0)Mr(c[Pa>>2]|0)|0;hb=c[Pa>>2]|0;c[Aa>>2]=(c[Pa>>2]|0)+28;c[Ba>>2]=hb;hb=(c[(c[Aa>>2]|0)+4>>2]|0)+(c[c[Aa>>2]>>2]<<3)|0;c[Ca>>2]=c[hb>>2];c[Ca+4>>2]=c[hb+4>>2];c[Da>>2]=d[Ca+3>>0];c[Ea>>2]=Or(c[Ba>>2]|0,c[Da>>2]|0)|0;c[c[Aa>>2]>>2]=(e[Ca>>1]|0)+(c[Ea>>2]|0);c[Ab>>2]=c[Ra>>2];c[Ab+4>>2]=c[Ra+4>>2];c[Ab+8>>2]=c[Ra+8>>2];c[Ab+12>>2]=c[Ra+12>>2];c[fb>>2]=c[Ab>>2];c[fb+4>>2]=c[Ab+4>>2];c[fb+8>>2]=c[Ab+8>>2];c[fb+12>>2]=c[Ab+12>>2];c[xb>>2]=(c[xb>>2]|0)+1;}if((Pb|0)<(c[vb>>2]|0)){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}while(1){if((Mr(wb)|0)>>>0>2)break;if((c[xb>>2]|0)>=(c[ib>>2]|0))break;hb=c[jb>>2]|0;c[la>>2]=wb;c[ma>>2]=hb;c[oa>>2]=d[(c[(c[la>>2]|0)+20+4>>2]|0)+(c[(c[la>>2]|0)+20>>2]<<3)+2>>0];c[pa>>2]=d[(c[(c[la>>2]|0)+36+4>>2]|0)+(c[(c[la>>2]|0)+36>>2]<<3)+2>>0];c[qa>>2]=d[(c[(c[la>>2]|0)+28+4>>2]|0)+(c[(c[la>>2]|0)+28>>2]<<3)+2>>0];c[ra>>2]=(c[oa>>2]|0)+(c[pa>>2]|0)+(c[qa>>2]|0);c[sa>>2]=c[(c[(c[la>>2]|0)+20+4>>2]|0)+(c[(c[la>>2]|0)+20>>2]<<3)+4>>2];c[ta>>2]=c[(c[(c[la>>2]|0)+36+4>>2]|0)+(c[(c[la>>2]|0)+36>>2]<<3)+4>>2];c[ua>>2]=c[(c[(c[la>>2]|0)+28+4>>2]|0)+(c[(c[la>>2]|0)+28>>2]<<3)+4>>2];do{if(c[qa>>2]|0){hb=(Dr()|0)!=0;if(!(hb&(c[ma>>2]|0)!=0)){hb=c[ua>>2]|0;c[va>>2]=hb+(Nr(c[la>>2]|0,c[qa>>2]|0)|0);if(!(Dr()|0))break;Mr(c[la>>2]|0)|0;break;}c[wa>>2]=(c[qa>>2]|0)-((c[qa>>2]|0)>>>0<24?c[qa>>2]|0:24);hb=c[ua>>2]|0;eb=Nr(c[la>>2]|0,(c[qa>>2]|0)-(c[wa>>2]|0)|0)|0;c[va>>2]=hb+(eb<<c[wa>>2]);eb=(Dr()|0)!=0;if(eb|(c[wa>>2]|0)!=0)Mr(c[la>>2]|0)|0;if(c[wa>>2]|0){eb=Nr(c[la>>2]|0,c[wa>>2]|0)|0;c[va>>2]=(c[va>>2]|0)+eb;}}else c[va>>2]=0;}while(0);do{if((c[qa>>2]|0)>>>0<=1){c[va>>2]=(c[va>>2]|0)+((c[sa>>2]|0)==0&1);if(!(c[va>>2]|0)){c[va>>2]=c[(c[la>>2]|0)+44>>2];break;}fb=(c[la>>2]|0)+44|0;if((c[va>>2]|0)==3)Ub=(c[fb>>2]|0)-1|0;else Ub=c[fb+(c[va>>2]<<2)>>2]|0;c[xa>>2]=Ub;c[xa>>2]=(c[xa>>2]|0)+(((c[xa>>2]|0)!=0^1)&1);if((c[va>>2]|0)!=1)c[(c[la>>2]|0)+44+8>>2]=c[(c[la>>2]|0)+44+4>>2];c[(c[la>>2]|0)+44+4>>2]=c[(c[la>>2]|0)+44>>2];fb=c[xa>>2]|0;c[va>>2]=fb;c[(c[la>>2]|0)+44>>2]=fb;}else{c[(c[la>>2]|0)+44+8>>2]=c[(c[la>>2]|0)+44+4>>2];c[(c[la>>2]|0)+44+4>>2]=c[(c[la>>2]|0)+44>>2];c[(c[la>>2]|0)+44>>2]=c[va>>2];}}while(0);c[na+8>>2]=c[va>>2];fb=c[ta>>2]|0;if((c[pa>>2]|0)>>>0>0)Vb=Nr(c[la>>2]|0,c[pa>>2]|0)|0;else Vb=0;c[na+4>>2]=fb+Vb;if(Dr()|0?((c[pa>>2]|0)+(c[oa>>2]|0)|0)>>>0>=20:0)Mr(c[la>>2]|0)|0;fb=(Fr()|0)!=0;if(fb&(c[ra>>2]|0)>>>0>=31)Mr(c[la>>2]|0)|0;fb=c[sa>>2]|0;if((c[oa>>2]|0)>>>0>0)Wb=Nr(c[la>>2]|0,c[oa>>2]|0)|0;else Wb=0;c[na>>2]=fb+Wb;if(Dr()|0)Mr(c[la>>2]|0)|0;c[ya>>2]=(c[(c[la>>2]|0)+64>>2]|0)+(c[na>>2]|0);fb=c[la>>2]|0;if((c[na+8>>2]|0)>>>0>(c[ya>>2]|0)>>>0)Xb=c[fb+60>>2]|0;else Xb=c[fb+56>>2]|0;c[za>>2]=Xb;c[na+12>>2]=(c[za>>2]|0)+(c[ya>>2]|0)+(0-(c[na+8>>2]|0));c[(c[la>>2]|0)+64>>2]=(c[ya>>2]|0)+(c[na+4>>2]|0);fb=c[la>>2]|0;c[ga>>2]=(c[la>>2]|0)+20;c[ha>>2]=fb;fb=(c[(c[ga>>2]|0)+4>>2]|0)+(c[c[ga>>2]>>2]<<3)|0;c[ia>>2]=c[fb>>2];c[ia+4>>2]=c[fb+4>>2];c[ja>>2]=d[ia+3>>0];c[ka>>2]=Or(c[ha>>2]|0,c[ja>>2]|0)|0;c[c[ga>>2]>>2]=(e[ia>>1]|0)+(c[ka>>2]|0);fb=c[la>>2]|0;c[ba>>2]=(c[la>>2]|0)+36;c[ca>>2]=fb;fb=(c[(c[ba>>2]|0)+4>>2]|0)+(c[c[ba>>2]>>2]<<3)|0;c[da>>2]=c[fb>>2];c[da+4>>2]=c[fb+4>>2];c[ea>>2]=d[da+3>>0];c[fa>>2]=Or(c[ca>>2]|0,c[ea>>2]|0)|0;c[c[ba>>2]>>2]=(e[da>>1]|0)+(c[fa>>2]|0);if(Dr()|0)Mr(c[la>>2]|0)|0;fb=c[la>>2]|0;c[Y>>2]=(c[la>>2]|0)+28;c[Z>>2]=fb;fb=(c[(c[Y>>2]|0)+4>>2]|0)+(c[c[Y>>2]>>2]<<3)|0;c[_>>2]=c[fb>>2];c[_+4>>2]=c[fb+4>>2];c[$>>2]=d[_+3>>0];c[aa>>2]=Or(c[Z>>2]|0,c[$>>2]|0)|0;c[c[Y>>2]>>2]=(e[_>>1]|0)+(c[aa>>2]|0);c[Bb>>2]=c[na>>2];c[Bb+4>>2]=c[na+4>>2];c[Bb+8>>2]=c[na+8>>2];c[Bb+12>>2]=c[na+12>>2];fb=c[ob>>2]|0;eb=c[nb>>2]|0;hb=c[qb>>2]|0;gb=c[rb>>2]|0;Lb=c[sb>>2]|0;Kb=c[tb>>2]|0;Yb=X;Zb=ub+(((c[xb>>2]|0)-4&3)<<4)|0;_b=Yb+16|0;do{a[Yb>>0]=a[Zb>>0]|0;Yb=Yb+1|0;Zb=Zb+1|0;}while((Yb|0)<(_b|0));c[H>>2]=fb;c[I>>2]=eb;c[J>>2]=pb;c[K>>2]=hb;c[L>>2]=gb;c[M>>2]=Lb;c[N>>2]=Kb;c[O>>2]=(c[H>>2]|0)+(c[X>>2]|0);c[P>>2]=(c[X>>2]|0)+(c[X+4>>2]|0);c[Q>>2]=(c[H>>2]|0)+(c[P>>2]|0);c[R>>2]=(c[I>>2]|0)+-8;c[S>>2]=(c[c[J>>2]>>2]|0)+(c[X>>2]|0);c[T>>2]=c[X+12>>2];b:do{if((c[Q>>2]|0)>>>0>(c[I>>2]|0)>>>0)c[G>>2]=-70;else{if((c[S>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[G>>2]=-20;break;}Jb=c[H>>2]|0;if((c[O>>2]|0)>>>0>(c[R>>2]|0)>>>0){Ib=c[I>>2]|0;Hb=c[J>>2]|0;k=c[K>>2]|0;Gb=c[L>>2]|0;Mb=c[M>>2]|0;j=c[N>>2]|0;c[n>>2]=c[X>>2];c[n+4>>2]=c[X+4>>2];c[n+8>>2]=c[X+8>>2];c[n+12>>2]=c[X+12>>2];c[G>>2]=Pr(Jb,Ib,n,Hb,k,Gb,Mb,j)|0;break;}Qr(Jb,c[c[J>>2]>>2]|0);if((c[X>>2]|0)>>>0>8)Rr((c[H>>2]|0)+8|0,(c[c[J>>2]>>2]|0)+8|0,(c[X>>2]|0)-8|0);c[H>>2]=c[O>>2];c[c[J>>2]>>2]=c[S>>2];do{if((c[X+8>>2]|0)>>>0>((c[O>>2]|0)-(c[L>>2]|0)|0)>>>0){if((c[X+8>>2]|0)>>>0>((c[O>>2]|0)-(c[M>>2]|0)|0)>>>0){c[G>>2]=-20;break b;}if(((c[T>>2]|0)+(c[X+4>>2]|0)|0)>>>0<=(c[N>>2]|0)>>>0){nE(c[O>>2]|0,c[T>>2]|0,c[X+4>>2]|0)|0;c[G>>2]=c[P>>2];break b;}c[U>>2]=(c[N>>2]|0)-(c[T>>2]|0);nE(c[O>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[H>>2]=(c[O>>2]|0)+(c[U>>2]|0);Jb=X+4|0;c[Jb>>2]=(c[Jb>>2]|0)-(c[U>>2]|0);c[T>>2]=c[L>>2];if((c[H>>2]|0)>>>0<=(c[R>>2]|0)>>>0?(c[X+4>>2]|0)>>>0>=3:0)break;c[V>>2]=0;while(1){if((c[V>>2]|0)>>>0>=(c[X+4>>2]|0)>>>0)break;a[(c[H>>2]|0)+(c[V>>2]|0)>>0]=a[(c[T>>2]|0)+(c[V>>2]|0)>>0]|0;c[V>>2]=(c[V>>2]|0)+1;}c[G>>2]=c[P>>2];break b;}}while(0);if((c[X+8>>2]|0)>>>0<8){c[W>>2]=c[6816+(c[X+8>>2]<<2)>>2];a[c[H>>2]>>0]=a[c[T>>2]>>0]|0;a[(c[H>>2]|0)+1>>0]=a[(c[T>>2]|0)+1>>0]|0;a[(c[H>>2]|0)+2>>0]=a[(c[T>>2]|0)+2>>0]|0;a[(c[H>>2]|0)+3>>0]=a[(c[T>>2]|0)+3>>0]|0;c[T>>2]=(c[T>>2]|0)+(c[6848+(c[X+8>>2]<<2)>>2]|0);Sr((c[H>>2]|0)+4|0,c[T>>2]|0);c[T>>2]=(c[T>>2]|0)+(0-(c[W>>2]|0));}else Qr(c[H>>2]|0,c[T>>2]|0);c[H>>2]=(c[H>>2]|0)+8;c[T>>2]=(c[T>>2]|0)+8;Jb=c[H>>2]|0;c:do{if((c[Q>>2]|0)>>>0>((c[I>>2]|0)+-13|0)>>>0){if(Jb>>>0<(c[R>>2]|0)>>>0){Rr(c[H>>2]|0,c[T>>2]|0,(c[R>>2]|0)-(c[H>>2]|0)|0);c[T>>2]=(c[T>>2]|0)+((c[R>>2]|0)-(c[H>>2]|0));c[H>>2]=c[R>>2];}while(1){if((c[H>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break c;j=c[T>>2]|0;c[T>>2]=j+1;Mb=a[j>>0]|0;j=c[H>>2]|0;c[H>>2]=j+1;a[j>>0]=Mb;}}else Rr(Jb,c[T>>2]|0,(c[X+4>>2]|0)-8|0);}while(0);c[G>>2]=c[P>>2];}}while(0);c[Cb>>2]=c[G>>2];if($q(c[Cb>>2]|0)|0){$b=118;break;}Kb=ub+((c[xb>>2]&3)<<4)|0;c[Kb>>2]=c[Bb>>2];c[Kb+4>>2]=c[Bb+4>>2];c[Kb+8>>2]=c[Bb+8>>2];c[Kb+12>>2]=c[Bb+12>>2];c[ob>>2]=(c[ob>>2]|0)+(c[Cb>>2]|0);c[xb>>2]=(c[xb>>2]|0)+1;}if(($b|0)==118){c[cb>>2]=c[Cb>>2];Nb=c[cb>>2]|0;l=m;return Nb|0;}if((c[xb>>2]|0)<(c[ib>>2]|0)){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}c[xb>>2]=(c[xb>>2]|0)-(c[vb>>2]|0);while(1){if((c[xb>>2]|0)>=(c[ib>>2]|0))break;Kb=c[ob>>2]|0;Lb=c[nb>>2]|0;gb=c[qb>>2]|0;hb=c[rb>>2]|0;eb=c[sb>>2]|0;fb=c[tb>>2]|0;Yb=F;Zb=ub+((c[xb>>2]&3)<<4)|0;_b=Yb+16|0;do{a[Yb>>0]=a[Zb>>0]|0;Yb=Yb+1|0;Zb=Zb+1|0;}while((Yb|0)<(_b|0));c[p>>2]=Kb;c[q>>2]=Lb;c[r>>2]=pb;c[s>>2]=gb;c[t>>2]=hb;c[u>>2]=eb;c[v>>2]=fb;c[w>>2]=(c[p>>2]|0)+(c[F>>2]|0);c[x>>2]=(c[F>>2]|0)+(c[F+4>>2]|0);c[y>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[q>>2]|0)+-8;c[A>>2]=(c[c[r>>2]>>2]|0)+(c[F>>2]|0);c[B>>2]=c[F+12>>2];d:do{if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[o>>2]=-70;else{if((c[A>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break;}Jb=c[p>>2]|0;if((c[w>>2]|0)>>>0>(c[z>>2]|0)>>>0){Mb=c[q>>2]|0;j=c[r>>2]|0;Gb=c[s>>2]|0;k=c[t>>2]|0;Hb=c[u>>2]|0;Ib=c[v>>2]|0;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];c[n+8>>2]=c[F+8>>2];c[n+12>>2]=c[F+12>>2];c[o>>2]=Pr(Jb,Mb,n,j,Gb,k,Hb,Ib)|0;break;}Qr(Jb,c[c[r>>2]>>2]|0);if((c[F>>2]|0)>>>0>8)Rr((c[p>>2]|0)+8|0,(c[c[r>>2]>>2]|0)+8|0,(c[F>>2]|0)-8|0);c[p>>2]=c[w>>2];c[c[r>>2]>>2]=c[A>>2];do{if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[t>>2]|0)|0)>>>0){if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[u>>2]|0)|0)>>>0){c[o>>2]=-20;break d;}if(((c[B>>2]|0)+(c[F+4>>2]|0)|0)>>>0<=(c[v>>2]|0)>>>0){nE(c[w>>2]|0,c[B>>2]|0,c[F+4>>2]|0)|0;c[o>>2]=c[x>>2];break d;}c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);nE(c[w>>2]|0,c[B>>2]|0,c[C>>2]|0)|0;c[p>>2]=(c[w>>2]|0)+(c[C>>2]|0);Jb=F+4|0;c[Jb>>2]=(c[Jb>>2]|0)-(c[C>>2]|0);c[B>>2]=c[t>>2];if((c[p>>2]|0)>>>0<=(c[z>>2]|0)>>>0?(c[F+4>>2]|0)>>>0>=3:0)break;c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[F+4>>2]|0)>>>0)break;a[(c[p>>2]|0)+(c[D>>2]|0)>>0]=a[(c[B>>2]|0)+(c[D>>2]|0)>>0]|0;c[D>>2]=(c[D>>2]|0)+1;}c[o>>2]=c[x>>2];break d;}}while(0);if((c[F+8>>2]|0)>>>0<8){c[E>>2]=c[6816+(c[F+8>>2]<<2)>>2];a[c[p>>2]>>0]=a[c[B>>2]>>0]|0;a[(c[p>>2]|0)+1>>0]=a[(c[B>>2]|0)+1>>0]|0;a[(c[p>>2]|0)+2>>0]=a[(c[B>>2]|0)+2>>0]|0;a[(c[p>>2]|0)+3>>0]=a[(c[B>>2]|0)+3>>0]|0;c[B>>2]=(c[B>>2]|0)+(c[6848+(c[F+8>>2]<<2)>>2]|0);Sr((c[p>>2]|0)+4|0,c[B>>2]|0);c[B>>2]=(c[B>>2]|0)+(0-(c[E>>2]|0));}else Qr(c[p>>2]|0,c[B>>2]|0);c[p>>2]=(c[p>>2]|0)+8;c[B>>2]=(c[B>>2]|0)+8;Jb=c[p>>2]|0;e:do{if((c[y>>2]|0)>>>0>((c[q>>2]|0)+-13|0)>>>0){if(Jb>>>0<(c[z>>2]|0)>>>0){Rr(c[p>>2]|0,c[B>>2]|0,(c[z>>2]|0)-(c[p>>2]|0)|0);c[B>>2]=(c[B>>2]|0)+((c[z>>2]|0)-(c[p>>2]|0));c[p>>2]=c[z>>2];}while(1){if((c[p>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break e;Ib=c[B>>2]|0;c[B>>2]=Ib+1;Hb=a[Ib>>0]|0;Ib=c[p>>2]|0;c[p>>2]=Ib+1;a[Ib>>0]=Hb;}}else Rr(Jb,c[B>>2]|0,(c[F+4>>2]|0)-8|0);}while(0);c[o>>2]=c[x>>2];}}while(0);c[Db>>2]=c[o>>2];fb=($q(c[Db>>2]|0)|0)!=0;ac=c[Db>>2]|0;if(fb){$b=155;break;}c[ob>>2]=(c[ob>>2]|0)+ac;c[xb>>2]=(c[xb>>2]|0)+1;}if(($b|0)==155){c[cb>>2]=ac;Nb=c[cb>>2]|0;l=m;return Nb|0;}c[Eb>>2]=0;while(1){if((c[Eb>>2]|0)>>>0>=3)break a;c[(c[db>>2]|0)+16+28700+(c[Eb>>2]<<2)>>2]=c[wb+44+(c[Eb>>2]<<2)>>2];c[Eb>>2]=(c[Eb>>2]|0)+1;}}}while(0);c[Fb>>2]=(c[qb>>2]|0)-(c[pb>>2]|0);if((c[Fb>>2]|0)>>>0>((c[nb>>2]|0)-(c[ob>>2]|0)|0)>>>0){c[cb>>2]=-70;Nb=c[cb>>2]|0;l=m;return Nb|0;}else{mE(c[ob>>2]|0,c[pb>>2]|0,c[Fb>>2]|0)|0;c[ob>>2]=(c[ob>>2]|0)+(c[Fb>>2]|0);c[cb>>2]=(c[ob>>2]|0)-(c[mb>>2]|0);Nb=c[cb>>2]|0;l=m;return Nb|0;}return 0;}function Yr(b,f,g,h,i,j,k){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0;m=l;l=l+784|0;n=m+760|0;o=m+756|0;p=m+752|0;q=m+748|0;r=m+744|0;s=m+740|0;t=m+736|0;u=m+732|0;v=m+728|0;w=m+724|0;x=m+720|0;y=m+716|0;z=m+712|0;A=m+708|0;B=m+704|0;C=m+700|0;D=m+696|0;E=m+692|0;F=m+80|0;G=m+688|0;H=m+684|0;I=m+680|0;J=m+676|0;K=m+672|0;L=m+668|0;M=m+664|0;N=m+660|0;O=m+656|0;P=m+652|0;Q=m+648|0;R=m+644|0;S=m+640|0;T=m+636|0;U=m+632|0;V=m+628|0;W=m+624|0;X=m+64|0;Y=m+620|0;Z=m+616|0;_=m+608|0;$=m+604|0;aa=m+600|0;ba=m+596|0;ca=m+592|0;da=m+584|0;ea=m+580|0;fa=m+576|0;ga=m+572|0;ha=m+568|0;ia=m+560|0;ja=m+556|0;ka=m+552|0;la=m+548|0;ma=m+544|0;na=m+528|0;oa=m+524|0;pa=m+520|0;qa=m+516|0;ra=m+512|0;sa=m+508|0;ta=m+504|0;ua=m+500|0;va=m+496|0;wa=m+492|0;xa=m+488|0;ya=m+484|0;za=m+480|0;Aa=m+476|0;Ba=m+472|0;Ca=m+464|0;Da=m+460|0;Ea=m+456|0;Fa=m+452|0;Ga=m+448|0;Ha=m+440|0;Ia=m+436|0;Ja=m+432|0;Ka=m+428|0;La=m+424|0;Ma=m+416|0;Na=m+412|0;Oa=m+408|0;Pa=m+404|0;Qa=m+400|0;Ra=m+384|0;Sa=m+376|0;Ta=m+372|0;Ua=m+368|0;Va=m+364|0;Wa=m+360|0;Xa=m+356|0;Ya=m+352|0;Za=m+348|0;_a=m+344|0;$a=m+340|0;ab=m+336|0;bb=m+332|0;cb=m+328|0;db=m+324|0;eb=m+320|0;fb=m+316|0;gb=m+312|0;hb=m+308|0;ib=m+304|0;jb=m+300|0;kb=m+296|0;lb=m+292|0;mb=m+288|0;nb=m+284|0;ob=m+280|0;pb=m+276|0;qb=m+272|0;rb=m+268|0;sb=m+264|0;tb=m+260|0;ub=m;vb=m+256|0;wb=m+188|0;xb=m+184|0;yb=m+180|0;zb=m+176|0;Ab=m+160|0;Bb=m+144|0;Cb=m+136|0;Db=m+132|0;Eb=m+128|0;Fb=m+124|0;Gb=m+120|0;Hb=m+116|0;Ib=m+112|0;Jb=m+108|0;Kb=m+104|0;Lb=m+100|0;Mb=m+96|0;c[Gb>>2]=b;c[Hb>>2]=f;c[Ib>>2]=g;c[Jb>>2]=h;c[Kb>>2]=i;c[Lb>>2]=j;c[Mb>>2]=k;k=c[Hb>>2]|0;Hb=c[Ib>>2]|0;Ib=c[Jb>>2]|0;Jb=c[Kb>>2]|0;Kb=c[Lb>>2]|0;Lb=c[Mb>>2]|0;c[db>>2]=c[Gb>>2];c[eb>>2]=k;c[fb>>2]=Hb;c[gb>>2]=Ib;c[hb>>2]=Jb;c[ib>>2]=Kb;c[jb>>2]=Lb;c[kb>>2]=c[gb>>2];c[lb>>2]=(c[kb>>2]|0)+(c[hb>>2]|0);c[mb>>2]=c[eb>>2];c[nb>>2]=(c[mb>>2]|0)+(c[fb>>2]|0);c[ob>>2]=c[mb>>2];c[pb>>2]=c[(c[db>>2]|0)+28916>>2];c[qb>>2]=(c[pb>>2]|0)+(c[(c[db>>2]|0)+28932>>2]|0);c[rb>>2]=c[(c[db>>2]|0)+28732>>2];c[sb>>2]=c[(c[db>>2]|0)+28736>>2];c[tb>>2]=c[(c[db>>2]|0)+28740>>2];a:do{if(c[ib>>2]|0){c[vb>>2]=(c[ib>>2]|0)<4?c[ib>>2]|0:4;c[(c[db>>2]|0)+28812>>2]=1;c[yb>>2]=0;while(1){if((c[yb>>2]|0)>>>0>=3)break;c[wb+44+(c[yb>>2]<<2)>>2]=c[(c[db>>2]|0)+16+28700+(c[yb>>2]<<2)>>2];c[yb>>2]=(c[yb>>2]|0)+1;}c[wb+56>>2]=c[rb>>2];c[wb+64>>2]=(c[ob>>2]|0)-(c[rb>>2]|0);c[wb+60>>2]=c[tb>>2];c[zb>>2]=Kr(wb,c[kb>>2]|0,(c[lb>>2]|0)-(c[kb>>2]|0)|0)|0;if($q(c[zb>>2]|0)|0){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}Lr(wb+20|0,wb,c[c[db>>2]>>2]|0);Lr(wb+28|0,wb,c[(c[db>>2]|0)+8>>2]|0);Lr(wb+36|0,wb,c[(c[db>>2]|0)+4>>2]|0);c[xb>>2]=0;while(1){if((Mr(wb)|0)>>>0<=2)Ob=(c[xb>>2]|0)<(c[vb>>2]|0);else Ob=0;Pb=c[xb>>2]|0;if(!Ob)break;fb=ub+(Pb<<4)|0;eb=c[jb>>2]|0;c[Pa>>2]=wb;c[Qa>>2]=eb;c[Sa>>2]=d[(c[(c[Pa>>2]|0)+20+4>>2]|0)+(c[(c[Pa>>2]|0)+20>>2]<<3)+2>>0];c[Ta>>2]=d[(c[(c[Pa>>2]|0)+36+4>>2]|0)+(c[(c[Pa>>2]|0)+36>>2]<<3)+2>>0];c[Ua>>2]=d[(c[(c[Pa>>2]|0)+28+4>>2]|0)+(c[(c[Pa>>2]|0)+28>>2]<<3)+2>>0];c[Va>>2]=(c[Sa>>2]|0)+(c[Ta>>2]|0)+(c[Ua>>2]|0);c[Wa>>2]=c[(c[(c[Pa>>2]|0)+20+4>>2]|0)+(c[(c[Pa>>2]|0)+20>>2]<<3)+4>>2];c[Xa>>2]=c[(c[(c[Pa>>2]|0)+36+4>>2]|0)+(c[(c[Pa>>2]|0)+36>>2]<<3)+4>>2];c[Ya>>2]=c[(c[(c[Pa>>2]|0)+28+4>>2]|0)+(c[(c[Pa>>2]|0)+28>>2]<<3)+4>>2];do{if(c[Ua>>2]|0){eb=(Dr()|0)!=0;if(!(eb&(c[Qa>>2]|0)!=0)){eb=c[Ya>>2]|0;c[Za>>2]=eb+(Nr(c[Pa>>2]|0,c[Ua>>2]|0)|0);if(!(Dr()|0))break;Mr(c[Pa>>2]|0)|0;break;}c[_a>>2]=(c[Ua>>2]|0)-((c[Ua>>2]|0)>>>0<24?c[Ua>>2]|0:24);eb=c[Ya>>2]|0;hb=Nr(c[Pa>>2]|0,(c[Ua>>2]|0)-(c[_a>>2]|0)|0)|0;c[Za>>2]=eb+(hb<<c[_a>>2]);hb=(Dr()|0)!=0;if(hb|(c[_a>>2]|0)!=0)Mr(c[Pa>>2]|0)|0;if(c[_a>>2]|0){hb=Nr(c[Pa>>2]|0,c[_a>>2]|0)|0;c[Za>>2]=(c[Za>>2]|0)+hb;}}else c[Za>>2]=0;}while(0);do{if((c[Ua>>2]|0)>>>0<=1){c[Za>>2]=(c[Za>>2]|0)+((c[Wa>>2]|0)==0&1);if(!(c[Za>>2]|0)){c[Za>>2]=c[(c[Pa>>2]|0)+44>>2];break;}hb=(c[Pa>>2]|0)+44|0;if((c[Za>>2]|0)==3)Qb=(c[hb>>2]|0)-1|0;else Qb=c[hb+(c[Za>>2]<<2)>>2]|0;c[$a>>2]=Qb;c[$a>>2]=(c[$a>>2]|0)+(((c[$a>>2]|0)!=0^1)&1);if((c[Za>>2]|0)!=1)c[(c[Pa>>2]|0)+44+8>>2]=c[(c[Pa>>2]|0)+44+4>>2];c[(c[Pa>>2]|0)+44+4>>2]=c[(c[Pa>>2]|0)+44>>2];hb=c[$a>>2]|0;c[Za>>2]=hb;c[(c[Pa>>2]|0)+44>>2]=hb;}else{c[(c[Pa>>2]|0)+44+8>>2]=c[(c[Pa>>2]|0)+44+4>>2];c[(c[Pa>>2]|0)+44+4>>2]=c[(c[Pa>>2]|0)+44>>2];c[(c[Pa>>2]|0)+44>>2]=c[Za>>2];}}while(0);c[Ra+8>>2]=c[Za>>2];hb=c[Xa>>2]|0;if((c[Ta>>2]|0)>>>0>0)Rb=Nr(c[Pa>>2]|0,c[Ta>>2]|0)|0;else Rb=0;c[Ra+4>>2]=hb+Rb;if(Dr()|0?((c[Ta>>2]|0)+(c[Sa>>2]|0)|0)>>>0>=20:0)Mr(c[Pa>>2]|0)|0;hb=(Fr()|0)!=0;if(hb&(c[Va>>2]|0)>>>0>=31)Mr(c[Pa>>2]|0)|0;hb=c[Wa>>2]|0;if((c[Sa>>2]|0)>>>0>0)Sb=Nr(c[Pa>>2]|0,c[Sa>>2]|0)|0;else Sb=0;c[Ra>>2]=hb+Sb;if(Dr()|0)Mr(c[Pa>>2]|0)|0;c[ab>>2]=(c[(c[Pa>>2]|0)+64>>2]|0)+(c[Ra>>2]|0);hb=c[Pa>>2]|0;if((c[Ra+8>>2]|0)>>>0>(c[ab>>2]|0)>>>0)Tb=c[hb+60>>2]|0;else Tb=c[hb+56>>2]|0;c[bb>>2]=Tb;c[Ra+12>>2]=(c[bb>>2]|0)+(c[ab>>2]|0)+(0-(c[Ra+8>>2]|0));c[(c[Pa>>2]|0)+64>>2]=(c[ab>>2]|0)+(c[Ra+4>>2]|0);hb=c[Pa>>2]|0;c[Ka>>2]=(c[Pa>>2]|0)+20;c[La>>2]=hb;hb=(c[(c[Ka>>2]|0)+4>>2]|0)+(c[c[Ka>>2]>>2]<<3)|0;c[Ma>>2]=c[hb>>2];c[Ma+4>>2]=c[hb+4>>2];c[Na>>2]=d[Ma+3>>0];c[Oa>>2]=Or(c[La>>2]|0,c[Na>>2]|0)|0;c[c[Ka>>2]>>2]=(e[Ma>>1]|0)+(c[Oa>>2]|0);hb=c[Pa>>2]|0;c[Fa>>2]=(c[Pa>>2]|0)+36;c[Ga>>2]=hb;hb=(c[(c[Fa>>2]|0)+4>>2]|0)+(c[c[Fa>>2]>>2]<<3)|0;c[Ha>>2]=c[hb>>2];c[Ha+4>>2]=c[hb+4>>2];c[Ia>>2]=d[Ha+3>>0];c[Ja>>2]=Or(c[Ga>>2]|0,c[Ia>>2]|0)|0;c[c[Fa>>2]>>2]=(e[Ha>>1]|0)+(c[Ja>>2]|0);if(Dr()|0)Mr(c[Pa>>2]|0)|0;hb=c[Pa>>2]|0;c[Aa>>2]=(c[Pa>>2]|0)+28;c[Ba>>2]=hb;hb=(c[(c[Aa>>2]|0)+4>>2]|0)+(c[c[Aa>>2]>>2]<<3)|0;c[Ca>>2]=c[hb>>2];c[Ca+4>>2]=c[hb+4>>2];c[Da>>2]=d[Ca+3>>0];c[Ea>>2]=Or(c[Ba>>2]|0,c[Da>>2]|0)|0;c[c[Aa>>2]>>2]=(e[Ca>>1]|0)+(c[Ea>>2]|0);c[Ab>>2]=c[Ra>>2];c[Ab+4>>2]=c[Ra+4>>2];c[Ab+8>>2]=c[Ra+8>>2];c[Ab+12>>2]=c[Ra+12>>2];c[fb>>2]=c[Ab>>2];c[fb+4>>2]=c[Ab+4>>2];c[fb+8>>2]=c[Ab+8>>2];c[fb+12>>2]=c[Ab+12>>2];c[xb>>2]=(c[xb>>2]|0)+1;}if((Pb|0)<(c[vb>>2]|0)){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}while(1){if((Mr(wb)|0)>>>0>2)break;if((c[xb>>2]|0)>=(c[ib>>2]|0))break;hb=c[jb>>2]|0;c[la>>2]=wb;c[ma>>2]=hb;c[oa>>2]=d[(c[(c[la>>2]|0)+20+4>>2]|0)+(c[(c[la>>2]|0)+20>>2]<<3)+2>>0];c[pa>>2]=d[(c[(c[la>>2]|0)+36+4>>2]|0)+(c[(c[la>>2]|0)+36>>2]<<3)+2>>0];c[qa>>2]=d[(c[(c[la>>2]|0)+28+4>>2]|0)+(c[(c[la>>2]|0)+28>>2]<<3)+2>>0];c[ra>>2]=(c[oa>>2]|0)+(c[pa>>2]|0)+(c[qa>>2]|0);c[sa>>2]=c[(c[(c[la>>2]|0)+20+4>>2]|0)+(c[(c[la>>2]|0)+20>>2]<<3)+4>>2];c[ta>>2]=c[(c[(c[la>>2]|0)+36+4>>2]|0)+(c[(c[la>>2]|0)+36>>2]<<3)+4>>2];c[ua>>2]=c[(c[(c[la>>2]|0)+28+4>>2]|0)+(c[(c[la>>2]|0)+28>>2]<<3)+4>>2];do{if(c[qa>>2]|0){hb=(Dr()|0)!=0;if(!(hb&(c[ma>>2]|0)!=0)){hb=c[ua>>2]|0;c[va>>2]=hb+(Nr(c[la>>2]|0,c[qa>>2]|0)|0);if(!(Dr()|0))break;Mr(c[la>>2]|0)|0;break;}c[wa>>2]=(c[qa>>2]|0)-((c[qa>>2]|0)>>>0<24?c[qa>>2]|0:24);hb=c[ua>>2]|0;eb=Nr(c[la>>2]|0,(c[qa>>2]|0)-(c[wa>>2]|0)|0)|0;c[va>>2]=hb+(eb<<c[wa>>2]);eb=(Dr()|0)!=0;if(eb|(c[wa>>2]|0)!=0)Mr(c[la>>2]|0)|0;if(c[wa>>2]|0){eb=Nr(c[la>>2]|0,c[wa>>2]|0)|0;c[va>>2]=(c[va>>2]|0)+eb;}}else c[va>>2]=0;}while(0);do{if((c[qa>>2]|0)>>>0<=1){c[va>>2]=(c[va>>2]|0)+((c[sa>>2]|0)==0&1);if(!(c[va>>2]|0)){c[va>>2]=c[(c[la>>2]|0)+44>>2];break;}fb=(c[la>>2]|0)+44|0;if((c[va>>2]|0)==3)Ub=(c[fb>>2]|0)-1|0;else Ub=c[fb+(c[va>>2]<<2)>>2]|0;c[xa>>2]=Ub;c[xa>>2]=(c[xa>>2]|0)+(((c[xa>>2]|0)!=0^1)&1);if((c[va>>2]|0)!=1)c[(c[la>>2]|0)+44+8>>2]=c[(c[la>>2]|0)+44+4>>2];c[(c[la>>2]|0)+44+4>>2]=c[(c[la>>2]|0)+44>>2];fb=c[xa>>2]|0;c[va>>2]=fb;c[(c[la>>2]|0)+44>>2]=fb;}else{c[(c[la>>2]|0)+44+8>>2]=c[(c[la>>2]|0)+44+4>>2];c[(c[la>>2]|0)+44+4>>2]=c[(c[la>>2]|0)+44>>2];c[(c[la>>2]|0)+44>>2]=c[va>>2];}}while(0);c[na+8>>2]=c[va>>2];fb=c[ta>>2]|0;if((c[pa>>2]|0)>>>0>0)Vb=Nr(c[la>>2]|0,c[pa>>2]|0)|0;else Vb=0;c[na+4>>2]=fb+Vb;if(Dr()|0?((c[pa>>2]|0)+(c[oa>>2]|0)|0)>>>0>=20:0)Mr(c[la>>2]|0)|0;fb=(Fr()|0)!=0;if(fb&(c[ra>>2]|0)>>>0>=31)Mr(c[la>>2]|0)|0;fb=c[sa>>2]|0;if((c[oa>>2]|0)>>>0>0)Wb=Nr(c[la>>2]|0,c[oa>>2]|0)|0;else Wb=0;c[na>>2]=fb+Wb;if(Dr()|0)Mr(c[la>>2]|0)|0;c[ya>>2]=(c[(c[la>>2]|0)+64>>2]|0)+(c[na>>2]|0);fb=c[la>>2]|0;if((c[na+8>>2]|0)>>>0>(c[ya>>2]|0)>>>0)Xb=c[fb+60>>2]|0;else Xb=c[fb+56>>2]|0;c[za>>2]=Xb;c[na+12>>2]=(c[za>>2]|0)+(c[ya>>2]|0)+(0-(c[na+8>>2]|0));c[(c[la>>2]|0)+64>>2]=(c[ya>>2]|0)+(c[na+4>>2]|0);fb=c[la>>2]|0;c[ga>>2]=(c[la>>2]|0)+20;c[ha>>2]=fb;fb=(c[(c[ga>>2]|0)+4>>2]|0)+(c[c[ga>>2]>>2]<<3)|0;c[ia>>2]=c[fb>>2];c[ia+4>>2]=c[fb+4>>2];c[ja>>2]=d[ia+3>>0];c[ka>>2]=Or(c[ha>>2]|0,c[ja>>2]|0)|0;c[c[ga>>2]>>2]=(e[ia>>1]|0)+(c[ka>>2]|0);fb=c[la>>2]|0;c[ba>>2]=(c[la>>2]|0)+36;c[ca>>2]=fb;fb=(c[(c[ba>>2]|0)+4>>2]|0)+(c[c[ba>>2]>>2]<<3)|0;c[da>>2]=c[fb>>2];c[da+4>>2]=c[fb+4>>2];c[ea>>2]=d[da+3>>0];c[fa>>2]=Or(c[ca>>2]|0,c[ea>>2]|0)|0;c[c[ba>>2]>>2]=(e[da>>1]|0)+(c[fa>>2]|0);if(Dr()|0)Mr(c[la>>2]|0)|0;fb=c[la>>2]|0;c[Y>>2]=(c[la>>2]|0)+28;c[Z>>2]=fb;fb=(c[(c[Y>>2]|0)+4>>2]|0)+(c[c[Y>>2]>>2]<<3)|0;c[_>>2]=c[fb>>2];c[_+4>>2]=c[fb+4>>2];c[$>>2]=d[_+3>>0];c[aa>>2]=Or(c[Z>>2]|0,c[$>>2]|0)|0;c[c[Y>>2]>>2]=(e[_>>1]|0)+(c[aa>>2]|0);c[Bb>>2]=c[na>>2];c[Bb+4>>2]=c[na+4>>2];c[Bb+8>>2]=c[na+8>>2];c[Bb+12>>2]=c[na+12>>2];fb=c[ob>>2]|0;eb=c[nb>>2]|0;hb=c[qb>>2]|0;gb=c[rb>>2]|0;Lb=c[sb>>2]|0;Kb=c[tb>>2]|0;Yb=X;Zb=ub+(((c[xb>>2]|0)-4&3)<<4)|0;_b=Yb+16|0;do{a[Yb>>0]=a[Zb>>0]|0;Yb=Yb+1|0;Zb=Zb+1|0;}while((Yb|0)<(_b|0));c[H>>2]=fb;c[I>>2]=eb;c[J>>2]=pb;c[K>>2]=hb;c[L>>2]=gb;c[M>>2]=Lb;c[N>>2]=Kb;c[O>>2]=(c[H>>2]|0)+(c[X>>2]|0);c[P>>2]=(c[X>>2]|0)+(c[X+4>>2]|0);c[Q>>2]=(c[H>>2]|0)+(c[P>>2]|0);c[R>>2]=(c[I>>2]|0)+-8;c[S>>2]=(c[c[J>>2]>>2]|0)+(c[X>>2]|0);c[T>>2]=c[X+12>>2];b:do{if((c[Q>>2]|0)>>>0>(c[I>>2]|0)>>>0)c[G>>2]=-70;else{if((c[S>>2]|0)>>>0>(c[K>>2]|0)>>>0){c[G>>2]=-20;break;}Jb=c[H>>2]|0;if((c[O>>2]|0)>>>0>(c[R>>2]|0)>>>0){Ib=c[I>>2]|0;Hb=c[J>>2]|0;k=c[K>>2]|0;Gb=c[L>>2]|0;Mb=c[M>>2]|0;j=c[N>>2]|0;c[n>>2]=c[X>>2];c[n+4>>2]=c[X+4>>2];c[n+8>>2]=c[X+8>>2];c[n+12>>2]=c[X+12>>2];c[G>>2]=Pr(Jb,Ib,n,Hb,k,Gb,Mb,j)|0;break;}Qr(Jb,c[c[J>>2]>>2]|0);if((c[X>>2]|0)>>>0>8)Rr((c[H>>2]|0)+8|0,(c[c[J>>2]>>2]|0)+8|0,(c[X>>2]|0)-8|0);c[H>>2]=c[O>>2];c[c[J>>2]>>2]=c[S>>2];do{if((c[X+8>>2]|0)>>>0>((c[O>>2]|0)-(c[L>>2]|0)|0)>>>0){if((c[X+8>>2]|0)>>>0>((c[O>>2]|0)-(c[M>>2]|0)|0)>>>0){c[G>>2]=-20;break b;}if(((c[T>>2]|0)+(c[X+4>>2]|0)|0)>>>0<=(c[N>>2]|0)>>>0){nE(c[O>>2]|0,c[T>>2]|0,c[X+4>>2]|0)|0;c[G>>2]=c[P>>2];break b;}c[U>>2]=(c[N>>2]|0)-(c[T>>2]|0);nE(c[O>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[H>>2]=(c[O>>2]|0)+(c[U>>2]|0);Jb=X+4|0;c[Jb>>2]=(c[Jb>>2]|0)-(c[U>>2]|0);c[T>>2]=c[L>>2];if((c[H>>2]|0)>>>0<=(c[R>>2]|0)>>>0?(c[X+4>>2]|0)>>>0>=3:0)break;c[V>>2]=0;while(1){if((c[V>>2]|0)>>>0>=(c[X+4>>2]|0)>>>0)break;a[(c[H>>2]|0)+(c[V>>2]|0)>>0]=a[(c[T>>2]|0)+(c[V>>2]|0)>>0]|0;c[V>>2]=(c[V>>2]|0)+1;}c[G>>2]=c[P>>2];break b;}}while(0);if((c[X+8>>2]|0)>>>0<8){c[W>>2]=c[6816+(c[X+8>>2]<<2)>>2];a[c[H>>2]>>0]=a[c[T>>2]>>0]|0;a[(c[H>>2]|0)+1>>0]=a[(c[T>>2]|0)+1>>0]|0;a[(c[H>>2]|0)+2>>0]=a[(c[T>>2]|0)+2>>0]|0;a[(c[H>>2]|0)+3>>0]=a[(c[T>>2]|0)+3>>0]|0;c[T>>2]=(c[T>>2]|0)+(c[6848+(c[X+8>>2]<<2)>>2]|0);Sr((c[H>>2]|0)+4|0,c[T>>2]|0);c[T>>2]=(c[T>>2]|0)+(0-(c[W>>2]|0));}else Qr(c[H>>2]|0,c[T>>2]|0);c[H>>2]=(c[H>>2]|0)+8;c[T>>2]=(c[T>>2]|0)+8;Jb=c[H>>2]|0;c:do{if((c[Q>>2]|0)>>>0>((c[I>>2]|0)+-13|0)>>>0){if(Jb>>>0<(c[R>>2]|0)>>>0){Rr(c[H>>2]|0,c[T>>2]|0,(c[R>>2]|0)-(c[H>>2]|0)|0);c[T>>2]=(c[T>>2]|0)+((c[R>>2]|0)-(c[H>>2]|0));c[H>>2]=c[R>>2];}while(1){if((c[H>>2]|0)>>>0>=(c[Q>>2]|0)>>>0)break c;j=c[T>>2]|0;c[T>>2]=j+1;Mb=a[j>>0]|0;j=c[H>>2]|0;c[H>>2]=j+1;a[j>>0]=Mb;}}else Rr(Jb,c[T>>2]|0,(c[X+4>>2]|0)-8|0);}while(0);c[G>>2]=c[P>>2];}}while(0);c[Cb>>2]=c[G>>2];if($q(c[Cb>>2]|0)|0){$b=118;break;}Kb=ub+((c[xb>>2]&3)<<4)|0;c[Kb>>2]=c[Bb>>2];c[Kb+4>>2]=c[Bb+4>>2];c[Kb+8>>2]=c[Bb+8>>2];c[Kb+12>>2]=c[Bb+12>>2];c[ob>>2]=(c[ob>>2]|0)+(c[Cb>>2]|0);c[xb>>2]=(c[xb>>2]|0)+1;}if(($b|0)==118){c[cb>>2]=c[Cb>>2];Nb=c[cb>>2]|0;l=m;return Nb|0;}if((c[xb>>2]|0)<(c[ib>>2]|0)){c[cb>>2]=-20;Nb=c[cb>>2]|0;l=m;return Nb|0;}c[xb>>2]=(c[xb>>2]|0)-(c[vb>>2]|0);while(1){if((c[xb>>2]|0)>=(c[ib>>2]|0))break;Kb=c[ob>>2]|0;Lb=c[nb>>2]|0;gb=c[qb>>2]|0;hb=c[rb>>2]|0;eb=c[sb>>2]|0;fb=c[tb>>2]|0;Yb=F;Zb=ub+((c[xb>>2]&3)<<4)|0;_b=Yb+16|0;do{a[Yb>>0]=a[Zb>>0]|0;Yb=Yb+1|0;Zb=Zb+1|0;}while((Yb|0)<(_b|0));c[p>>2]=Kb;c[q>>2]=Lb;c[r>>2]=pb;c[s>>2]=gb;c[t>>2]=hb;c[u>>2]=eb;c[v>>2]=fb;c[w>>2]=(c[p>>2]|0)+(c[F>>2]|0);c[x>>2]=(c[F>>2]|0)+(c[F+4>>2]|0);c[y>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[q>>2]|0)+-8;c[A>>2]=(c[c[r>>2]>>2]|0)+(c[F>>2]|0);c[B>>2]=c[F+12>>2];d:do{if((c[y>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[o>>2]=-70;else{if((c[A>>2]|0)>>>0>(c[s>>2]|0)>>>0){c[o>>2]=-20;break;}Jb=c[p>>2]|0;if((c[w>>2]|0)>>>0>(c[z>>2]|0)>>>0){Mb=c[q>>2]|0;j=c[r>>2]|0;Gb=c[s>>2]|0;k=c[t>>2]|0;Hb=c[u>>2]|0;Ib=c[v>>2]|0;c[n>>2]=c[F>>2];c[n+4>>2]=c[F+4>>2];c[n+8>>2]=c[F+8>>2];c[n+12>>2]=c[F+12>>2];c[o>>2]=Pr(Jb,Mb,n,j,Gb,k,Hb,Ib)|0;break;}Qr(Jb,c[c[r>>2]>>2]|0);if((c[F>>2]|0)>>>0>8)Rr((c[p>>2]|0)+8|0,(c[c[r>>2]>>2]|0)+8|0,(c[F>>2]|0)-8|0);c[p>>2]=c[w>>2];c[c[r>>2]>>2]=c[A>>2];do{if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[t>>2]|0)|0)>>>0){if((c[F+8>>2]|0)>>>0>((c[w>>2]|0)-(c[u>>2]|0)|0)>>>0){c[o>>2]=-20;break d;}if(((c[B>>2]|0)+(c[F+4>>2]|0)|0)>>>0<=(c[v>>2]|0)>>>0){nE(c[w>>2]|0,c[B>>2]|0,c[F+4>>2]|0)|0;c[o>>2]=c[x>>2];break d;}c[C>>2]=(c[v>>2]|0)-(c[B>>2]|0);nE(c[w>>2]|0,c[B>>2]|0,c[C>>2]|0)|0;c[p>>2]=(c[w>>2]|0)+(c[C>>2]|0);Jb=F+4|0;c[Jb>>2]=(c[Jb>>2]|0)-(c[C>>2]|0);c[B>>2]=c[t>>2];if((c[p>>2]|0)>>>0<=(c[z>>2]|0)>>>0?(c[F+4>>2]|0)>>>0>=3:0)break;c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[F+4>>2]|0)>>>0)break;a[(c[p>>2]|0)+(c[D>>2]|0)>>0]=a[(c[B>>2]|0)+(c[D>>2]|0)>>0]|0;c[D>>2]=(c[D>>2]|0)+1;}c[o>>2]=c[x>>2];break d;}}while(0);if((c[F+8>>2]|0)>>>0<8){c[E>>2]=c[6816+(c[F+8>>2]<<2)>>2];a[c[p>>2]>>0]=a[c[B>>2]>>0]|0;a[(c[p>>2]|0)+1>>0]=a[(c[B>>2]|0)+1>>0]|0;a[(c[p>>2]|0)+2>>0]=a[(c[B>>2]|0)+2>>0]|0;a[(c[p>>2]|0)+3>>0]=a[(c[B>>2]|0)+3>>0]|0;c[B>>2]=(c[B>>2]|0)+(c[6848+(c[F+8>>2]<<2)>>2]|0);Sr((c[p>>2]|0)+4|0,c[B>>2]|0);c[B>>2]=(c[B>>2]|0)+(0-(c[E>>2]|0));}else Qr(c[p>>2]|0,c[B>>2]|0);c[p>>2]=(c[p>>2]|0)+8;c[B>>2]=(c[B>>2]|0)+8;Jb=c[p>>2]|0;e:do{if((c[y>>2]|0)>>>0>((c[q>>2]|0)+-13|0)>>>0){if(Jb>>>0<(c[z>>2]|0)>>>0){Rr(c[p>>2]|0,c[B>>2]|0,(c[z>>2]|0)-(c[p>>2]|0)|0);c[B>>2]=(c[B>>2]|0)+((c[z>>2]|0)-(c[p>>2]|0));c[p>>2]=c[z>>2];}while(1){if((c[p>>2]|0)>>>0>=(c[y>>2]|0)>>>0)break e;Ib=c[B>>2]|0;c[B>>2]=Ib+1;Hb=a[Ib>>0]|0;Ib=c[p>>2]|0;c[p>>2]=Ib+1;a[Ib>>0]=Hb;}}else Rr(Jb,c[B>>2]|0,(c[F+4>>2]|0)-8|0);}while(0);c[o>>2]=c[x>>2];}}while(0);c[Db>>2]=c[o>>2];fb=($q(c[Db>>2]|0)|0)!=0;ac=c[Db>>2]|0;if(fb){$b=155;break;}c[ob>>2]=(c[ob>>2]|0)+ac;c[xb>>2]=(c[xb>>2]|0)+1;}if(($b|0)==155){c[cb>>2]=ac;Nb=c[cb>>2]|0;l=m;return Nb|0;}c[Eb>>2]=0;while(1){if((c[Eb>>2]|0)>>>0>=3)break a;c[(c[db>>2]|0)+16+28700+(c[Eb>>2]<<2)>>2]=c[wb+44+(c[Eb>>2]<<2)>>2];c[Eb>>2]=(c[Eb>>2]|0)+1;}}}while(0);c[Fb>>2]=(c[qb>>2]|0)-(c[pb>>2]|0);if((c[Fb>>2]|0)>>>0>((c[nb>>2]|0)-(c[ob>>2]|0)|0)>>>0){c[cb>>2]=-70;Nb=c[cb>>2]|0;l=m;return Nb|0;}else{mE(c[ob>>2]|0,c[pb>>2]|0,c[Fb>>2]|0)|0;c[ob>>2]=(c[ob>>2]|0)+(c[Fb>>2]|0);c[cb>>2]=(c[ob>>2]|0)-(c[mb>>2]|0);Nb=c[cb>>2]|0;l=m;return Nb|0;}return 0;}function Zr(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;i=l;l=l+32|0;j=i+24|0;k=i+20|0;m=i+16|0;n=i+12|0;o=i+8|0;p=i+4|0;q=i;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;h=_r(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,0)|0;l=i;return h|0;}function _r(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;j=l;l=l+80|0;k=j+64|0;m=j+60|0;n=j+56|0;o=j+52|0;p=j+48|0;q=j+44|0;r=j+40|0;s=j+36|0;t=j+32|0;u=j+28|0;v=j+24|0;w=j+20|0;x=j+16|0;y=j+12|0;z=j+8|0;A=j+4|0;B=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=c[n>>2];if(c[t>>2]|0){c[r>>2]=$r(c[t>>2]|0)|0;c[s>>2]=as(c[t>>2]|0)|0;}while(1){if((c[q>>2]|0)>>>0<5){C=27;break;}i=(iq(c[p>>2]|0,c[q>>2]|0)|0)!=0;h=c[p>>2]|0;if(i){c[x>>2]=ar(h,c[q>>2]|0)|0;if($q(c[x>>2]|0)|0){C=7;break;}if(c[(c[m>>2]|0)+28940>>2]|0){C=9;break;}c[w>>2]=bs(c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[x>>2]|0,c[r>>2]|0,c[s>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+(c[w>>2]|0);c[o>>2]=(c[o>>2]|0)-(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[x>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[x>>2]|0);continue;}c[v>>2]=hq(h)|0;if((c[v>>2]|0)!=-47205080){if((c[v>>2]&-16|0)!=407710288){C=18;break;}if((c[q>>2]|0)>>>0<8){C=14;break;}c[y>>2]=(hq((c[p>>2]|0)+4|0)|0)+8;if((c[q>>2]|0)>>>0<(c[y>>2]|0)>>>0){C=16;break;}c[p>>2]=(c[p>>2]|0)+(c[y>>2]|0);c[q>>2]=(c[q>>2]|0)-(c[y>>2]|0);continue;}h=c[m>>2]|0;if(c[t>>2]|0){c[z>>2]=cs(h,c[t>>2]|0)|0;if($q(c[z>>2]|0)|0){C=21;break;}}else{c[A>>2]=ds(h,c[r>>2]|0,c[s>>2]|0)|0;if($q(c[A>>2]|0)|0){C=23;break;}}Br(c[m>>2]|0,c[n>>2]|0);c[B>>2]=es(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,p,q)|0;if($q(c[B>>2]|0)|0){C=25;break;}c[n>>2]=(c[n>>2]|0)+(c[B>>2]|0);c[o>>2]=(c[o>>2]|0)-(c[B>>2]|0);}if((C|0)==7){c[k>>2]=c[x>>2];D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==9){c[k>>2]=-64;D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==14){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==16){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==18){c[k>>2]=-10;D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==21){c[k>>2]=c[z>>2];D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==23){c[k>>2]=c[A>>2];D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==25){c[k>>2]=c[B>>2];D=c[k>>2]|0;l=j;return D|0;}else if((C|0)==27)if(c[q>>2]|0){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else{c[k>>2]=(c[n>>2]|0)-(c[u>>2]|0);D=c[k>>2]|0;l=j;return D|0;}return 0;}function $r(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+4>>2]|0;}function as(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+8>>2]|0;}function bs(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+64|0;i=h+52|0;j=h+48|0;k=h+44|0;m=h+40|0;n=h+36|0;o=h+32|0;p=h+28|0;q=h+24|0;r=h+20|0;s=h+16|0;t=h+12|0;u=h+8|0;v=h+4|0;w=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=iq(c[m>>2]|0,c[n>>2]|0)|0;switch(c[q>>2]|0){case 4:{c[i>>2]=ms(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;x=c[i>>2]|0;l=h;return x|0;}case 5:{c[s>>2]=ns()|0;if(!(c[s>>2]|0)){c[i>>2]=-64;x=c[i>>2]|0;l=h;return x|0;}else{c[r>>2]=os(c[s>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;eq(c[s>>2]|0)|0;c[i>>2]=c[r>>2];x=c[i>>2]|0;l=h;return x|0;}break;}case 6:{c[u>>2]=ps()|0;if(!(c[u>>2]|0)){c[i>>2]=-64;x=c[i>>2]|0;l=h;return x|0;}else{c[t>>2]=qs(c[u>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;dq(c[u>>2]|0)|0;c[i>>2]=c[t>>2];x=c[i>>2]|0;l=h;return x|0;}break;}case 7:{c[w>>2]=rs()|0;if(!(c[w>>2]|0)){c[i>>2]=-64;x=c[i>>2]|0;l=h;return x|0;}else{c[v>>2]=ss(c[w>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;cq(c[w>>2]|0)|0;c[i>>2]=c[v>>2];x=c[i>>2]|0;l=h;return x|0;}break;}default:{c[i>>2]=-10;x=c[i>>2]|0;l=h;return x|0;}}return 0;}function cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=l;l=l+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;c[f>>2]=a;c[g>>2]=b;c[h>>2]=is(c[f>>2]|0)|0;if($q(c[h>>2]|0)|0){c[e>>2]=c[h>>2];i=c[e>>2]|0;l=d;return i|0;}do{if(c[g>>2]|0){c[(c[f>>2]|0)+28908>>2]=c[(c[g>>2]|0)+28724>>2];c[(c[f>>2]|0)+28732>>2]=c[(c[g>>2]|0)+4>>2];c[(c[f>>2]|0)+28736>>2]=c[(c[g>>2]|0)+4>>2];c[(c[f>>2]|0)+28740>>2]=(c[(c[g>>2]|0)+4>>2]|0)+(c[(c[g>>2]|0)+8>>2]|0);c[(c[f>>2]|0)+28728>>2]=c[(c[f>>2]|0)+28740>>2];h=(c[f>>2]|0)+28808|0;if(c[(c[g>>2]|0)+28728>>2]|0){c[h>>2]=1;c[(c[f>>2]|0)+28812>>2]=1;c[c[f>>2]>>2]=(c[g>>2]|0)+12;c[(c[f>>2]|0)+4>>2]=(c[g>>2]|0)+12+6160;c[(c[f>>2]|0)+8>>2]=(c[g>>2]|0)+12+4104;c[(c[f>>2]|0)+12>>2]=(c[g>>2]|0)+12+10264;c[(c[f>>2]|0)+16+28700>>2]=c[(c[g>>2]|0)+12+28700>>2];c[(c[f>>2]|0)+16+28700+4>>2]=c[(c[g>>2]|0)+12+28700+4>>2];c[(c[f>>2]|0)+16+28700+8>>2]=c[(c[g>>2]|0)+12+28700+8>>2];break;}else{c[h>>2]=0;c[(c[f>>2]|0)+28812>>2]=0;break;}}}while(0);c[e>>2]=0;i=c[e>>2]|0;l=d;return i|0;}function ds(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=is(c[g>>2]|0)|0;if($q(c[j>>2]|0)|0){c[f>>2]=c[j>>2];m=c[f>>2]|0;l=e;return m|0;}if((c[h>>2]|0)!=0&(c[i>>2]|0)!=0?(c[k>>2]=js(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0,$q(c[k>>2]|0)|0):0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}function es(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;h=l;l=l+80|0;i=h+76|0;j=h+72|0;k=h+68|0;m=h+64|0;n=h+60|0;o=h+56|0;p=h+52|0;q=h+48|0;r=h+44|0;s=h+40|0;t=h+36|0;u=h+32|0;v=h+28|0;w=h+24|0;x=h+12|0;y=h+8|0;z=h+4|0;A=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[c[n>>2]>>2];c[q>>2]=c[k>>2];c[r>>2]=(c[q>>2]|0)+(c[m>>2]|0);c[s>>2]=c[q>>2];c[t>>2]=c[c[o>>2]>>2];if((c[t>>2]|0)>>>0<9){c[i>>2]=-72;B=c[i>>2]|0;l=h;return B|0;}c[u>>2]=mq(c[p>>2]|0,5)|0;if($q(c[u>>2]|0)|0){c[i>>2]=c[u>>2];B=c[i>>2]|0;l=h;return B|0;}if((c[t>>2]|0)>>>0<((c[u>>2]|0)+3|0)>>>0){c[i>>2]=-72;B=c[i>>2]|0;l=h;return B|0;}c[v>>2]=fs(c[j>>2]|0,c[p>>2]|0,c[u>>2]|0)|0;if($q(c[v>>2]|0)|0){c[i>>2]=c[v>>2];B=c[i>>2]|0;l=h;return B|0;}c[p>>2]=(c[p>>2]|0)+(c[u>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[u>>2]|0);a:while(1){c[y>>2]=br(c[p>>2]|0,c[t>>2]|0,x)|0;if($q(c[y>>2]|0)|0){C=11;break;}c[p>>2]=(c[p>>2]|0)+3;c[t>>2]=(c[t>>2]|0)-3;if((c[y>>2]|0)>>>0>(c[t>>2]|0)>>>0){C=13;break;}switch(c[x>>2]|0){case 2:{c[w>>2]=Cr(c[j>>2]|0,c[s>>2]|0,(c[r>>2]|0)-(c[s>>2]|0)|0,c[p>>2]|0,c[y>>2]|0,1)|0;break;}case 0:{c[w>>2]=gs(c[s>>2]|0,(c[r>>2]|0)-(c[s>>2]|0)|0,c[p>>2]|0,c[y>>2]|0)|0;break;}case 1:{c[w>>2]=hs(c[s>>2]|0,(c[r>>2]|0)-(c[s>>2]|0)|0,a[c[p>>2]>>0]|0,c[x+8>>2]|0)|0;break;}default:{C=18;break a;}}if($q(c[w>>2]|0)|0){C=20;break;}if(c[(c[j>>2]|0)+28752+32>>2]|0)Nh((c[j>>2]|0)+28816|0,c[s>>2]|0,c[w>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[y>>2]|0);c[t>>2]=(c[t>>2]|0)-(c[y>>2]|0);if(c[x+4>>2]|0){C=25;break;}}if((C|0)==11){c[i>>2]=c[y>>2];B=c[i>>2]|0;l=h;return B|0;}else if((C|0)==13){c[i>>2]=-72;B=c[i>>2]|0;l=h;return B|0;}else if((C|0)==18){c[i>>2]=-20;B=c[i>>2]|0;l=h;return B|0;}else if((C|0)==20){c[i>>2]=c[w>>2];B=c[i>>2]|0;l=h;return B|0;}else if((C|0)==25){C=(c[j>>2]|0)+28752|0;if(((c[C>>2]|0)!=-1?1:(c[C+4>>2]|0)!=-1)?(C=(c[s>>2]|0)-(c[q>>2]|0)|0,w=(c[j>>2]|0)+28752|0,(C|0)!=(c[w>>2]|0)?1:(((C|0)<0)<<31>>31|0)!=(c[w+4>>2]|0)):0){c[i>>2]=-20;B=c[i>>2]|0;l=h;return B|0;}do{if(c[(c[j>>2]|0)+28752+32>>2]|0){w=Oh((c[j>>2]|0)+28816|0)|0;c[z>>2]=w;if((c[t>>2]|0)>>>0<4){c[i>>2]=-22;B=c[i>>2]|0;l=h;return B|0;}c[A>>2]=hq(c[p>>2]|0)|0;if((c[A>>2]|0)==(c[z>>2]|0)){c[p>>2]=(c[p>>2]|0)+4;c[t>>2]=(c[t>>2]|0)-4;break;}c[i>>2]=-22;B=c[i>>2]|0;l=h;return B|0;}}while(0);c[c[n>>2]>>2]=c[p>>2];c[c[o>>2]>>2]=c[t>>2];c[i>>2]=(c[s>>2]|0)-(c[q>>2]|0);B=c[i>>2]|0;l=h;return B|0;}return 0;}function fs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=qq((c[g>>2]|0)+28752|0,c[h>>2]|0,c[i>>2]|0,c[(c[g>>2]|0)+28912>>2]|0)|0;i=($q(c[j>>2]|0)|0)!=0;h=c[j>>2]|0;if(i){c[f>>2]=h;k=c[f>>2]|0;l=e;return k|0;}if(h>>>0>0){c[f>>2]=-72;k=c[f>>2]|0;l=e;return k|0;}if(c[(c[g>>2]|0)+28752+28>>2]|0?(c[(c[g>>2]|0)+28908>>2]|0)!=(c[(c[g>>2]|0)+28752+28>>2]|0):0){c[f>>2]=-32;k=c[f>>2]|0;l=e;return k|0;}if(c[(c[g>>2]|0)+28752+32>>2]|0)Lh((c[g>>2]|0)+28816|0,0,0)|0;c[f>>2]=0;k=c[f>>2]|0;l=e;return k|0;}function gs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function hs(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h+16|0;n=h;c[j>>2]=b;c[k>>2]=e;a[m>>0]=f;c[n>>2]=g;if((c[n>>2]|0)>>>0>(c[k>>2]|0)>>>0){c[i>>2]=-70;o=c[i>>2]|0;l=h;return o|0;}else{oE(c[j>>2]|0,(d[m>>0]|0)&255|0,c[n>>2]|0)|0;c[i>>2]=c[n>>2];o=c[i>>2]|0;l=h;return o|0;}return 0;}function is(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=oq(c[(c[d>>2]|0)+28912>>2]|0)|0;c[(c[d>>2]|0)+28744>>2]=a;c[(c[d>>2]|0)+28804>>2]=0;a=(c[d>>2]|0)+28792|0;c[a>>2]=0;c[a+4>>2]=0;c[(c[d>>2]|0)+28728>>2]=0;c[(c[d>>2]|0)+28732>>2]=0;c[(c[d>>2]|0)+28736>>2]=0;c[(c[d>>2]|0)+28740>>2]=0;c[(c[d>>2]|0)+16+10264>>2]=201326604;c[(c[d>>2]|0)+28812>>2]=0;c[(c[d>>2]|0)+28808>>2]=0;c[(c[d>>2]|0)+28908>>2]=0;a=(c[d>>2]|0)+16+28700|0;c[a>>2]=c[2985];c[a+4>>2]=c[2986];c[a+8>>2]=c[2987];c[c[d>>2]>>2]=(c[d>>2]|0)+16;c[(c[d>>2]|0)+4>>2]=(c[d>>2]|0)+16+6160;c[(c[d>>2]|0)+8>>2]=(c[d>>2]|0)+16+4104;c[(c[d>>2]|0)+12>>2]=(c[d>>2]|0)+16+10264;l=b;return 0;}function js(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[i>>2]|0)>>>0<8){c[f>>2]=ks(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}c[j>>2]=hq(c[h>>2]|0)|0;if((c[j>>2]|0)!=-332356553){c[f>>2]=ks(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}j=hq((c[h>>2]|0)+4|0)|0;c[(c[g>>2]|0)+28908>>2]=j;c[k>>2]=ls((c[g>>2]|0)+16|0,c[h>>2]|0,c[i>>2]|0)|0;if($q(c[k>>2]|0)|0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}else{c[h>>2]=(c[h>>2]|0)+(c[k>>2]|0);c[i>>2]=(c[i>>2]|0)-(c[k>>2]|0);c[(c[g>>2]|0)+28812>>2]=1;c[(c[g>>2]|0)+28808>>2]=1;c[f>>2]=ks(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0;m=c[f>>2]|0;l=e;return m|0;}return 0;}function ks(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[(c[f>>2]|0)+28740>>2]=c[(c[f>>2]|0)+28728>>2];c[(c[f>>2]|0)+28736>>2]=(c[g>>2]|0)+(0-((c[(c[f>>2]|0)+28728>>2]|0)-(c[(c[f>>2]|0)+28732>>2]|0)));c[(c[f>>2]|0)+28732>>2]=c[g>>2];c[(c[f>>2]|0)+28728>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return 0;}function ls(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=l;l=l+336|0;f=e+328|0;g=e+324|0;h=e+320|0;i=e+316|0;j=e+312|0;k=e+308|0;m=e+304|0;n=e+192|0;o=e+300|0;p=e+296|0;q=e+292|0;r=e+80|0;s=e+288|0;t=e+284|0;u=e+280|0;v=e;w=e+276|0;x=e+272|0;y=e+268|0;z=e+264|0;A=e+260|0;B=e+256|0;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[h>>2];c[k>>2]=(c[j>>2]|0)+(c[i>>2]|0);if((c[i>>2]|0)>>>0<=8){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+8;c[m>>2]=Bp((c[g>>2]|0)+10264|0,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0,(c[g>>2]|0)+26652|0,2048)|0;if($q(c[m>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[j>>2]=(c[j>>2]|0)+(c[m>>2]|0);c[o>>2]=31;c[q>>2]=ah(n,o,p,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if($q(c[q>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[o>>2]|0)>>>0>31){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[p>>2]|0)>>>0>8){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}zr((c[g>>2]|0)+4104|0,n,c[o>>2]|0,4032,4160,c[p>>2]|0);c[j>>2]=(c[j>>2]|0)+(c[q>>2]|0);c[s>>2]=52;c[u>>2]=ah(r,s,t,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if($q(c[u>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[s>>2]|0)>>>0>52){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[t>>2]|0)>>>0>9){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}zr((c[g>>2]|0)+6160|0,r,c[s>>2]|0,5216,5840,c[t>>2]|0);c[j>>2]=(c[j>>2]|0)+(c[u>>2]|0);c[w>>2]=35;c[y>>2]=ah(v,w,x,c[j>>2]|0,(c[k>>2]|0)-(c[j>>2]|0)|0)|0;if($q(c[y>>2]|0)|0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[w>>2]|0)>>>0>35){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}if((c[x>>2]|0)>>>0>9){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}zr(c[g>>2]|0,v,c[w>>2]|0,6416,5696,c[x>>2]|0);c[j>>2]=(c[j>>2]|0)+(c[y>>2]|0);if(((c[j>>2]|0)+12|0)>>>0>(c[k>>2]|0)>>>0){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}c[A>>2]=(c[k>>2]|0)-((c[j>>2]|0)+12);c[z>>2]=0;while(1){D=c[j>>2]|0;if((c[z>>2]|0)>=3){E=31;break;}c[B>>2]=hq(D)|0;c[j>>2]=(c[j>>2]|0)+4;if(!(c[B>>2]|0)){E=29;break;}if((c[B>>2]|0)>>>0>=(c[A>>2]|0)>>>0){E=29;break;}c[(c[g>>2]|0)+28700+(c[z>>2]<<2)>>2]=c[B>>2];c[z>>2]=(c[z>>2]|0)+1;}if((E|0)==29){c[f>>2]=-30;C=c[f>>2]|0;l=e;return C|0;}else if((E|0)==31){c[f>>2]=D-(c[h>>2]|0);C=c[f>>2]|0;l=e;return C|0;}return 0;}function ms(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[n>>2]=hw()|0;if(!(c[n>>2]|0)){c[g>>2]=-64;o=c[g>>2]|0;l=f;return o|0;}else{c[m>>2]=iw(c[n>>2]|0,c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;gq(c[n>>2]|0)|0;c[g>>2]=c[m>>2];o=c[g>>2]|0;l=f;return o|0;}return 0;}function ns(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(157816)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{dw(c[d>>2]|0)|0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function os(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;i=l;l=l+32|0;j=i+24|0;k=i+20|0;m=i+16|0;n=i+12|0;o=i+8|0;p=i+4|0;q=i;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;Su(c[j>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;Tu(c[j>>2]|0,c[k>>2]|0);q=Uu(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;l=i;return q|0;}function ps(){var a=0,b=0,d=0,e=0;a=l;l=l+16|0;b=a+4|0;d=a;c[d>>2]=Cy(152680)|0;if(!(c[d>>2]|0)){c[b>>2]=0;e=c[b>>2]|0;l=a;return e|0;}else{Ou(c[d>>2]|0)|0;c[b>>2]=c[d>>2];e=c[b>>2]|0;l=a;return e|0;}return 0;}function qs(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;i=l;l=l+32|0;j=i+24|0;k=i+20|0;m=i+16|0;n=i+12|0;o=i+8|0;p=i+4|0;q=i;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;Jt(c[j>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;Kt(c[j>>2]|0,c[k>>2]|0);q=Lt(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;l=i;return q|0;}function rs(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[2988];c[b+4>>2]=c[2989];c[b+8>>2]=c[2990];d=Gt(b)|0;l=a;return d|0;}function ss(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;i=l;l=l+32|0;j=i+24|0;k=i+20|0;m=i+16|0;n=i+12|0;o=i+8|0;p=i+4|0;q=i;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;ts(c[j>>2]|0,c[p>>2]|0,c[q>>2]|0)|0;us(c[j>>2]|0,c[k>>2]|0);q=vs(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;l=i;return q|0;}function ts(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=Ct(c[g>>2]|0)|0;if(hr(c[j>>2]|0)|0){c[f>>2]=c[j>>2];m=c[f>>2]|0;l=e;return m|0;}if((c[h>>2]|0)!=0&(c[i>>2]|0)!=0?(c[k>>2]=Dt(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0)|0,hr(c[k>>2]|0)|0):0){c[f>>2]=-30;m=c[f>>2]|0;l=e;return m|0;}c[f>>2]=0;m=c[f>>2]|0;l=e;return m|0;}function us(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+21520>>2]|0)){l=d;return;}c[(c[e>>2]|0)+21532>>2]=c[(c[e>>2]|0)+21520>>2];c[(c[e>>2]|0)+21528>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+21520>>2]|0)-(c[(c[e>>2]|0)+21524>>2]|0)));c[(c[e>>2]|0)+21524>>2]=c[f>>2];c[(c[e>>2]|0)+21520>>2]=c[f>>2];l=d;return;}function vs(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;h=l;l=l+80|0;i=h+68|0;j=h+64|0;k=h+60|0;m=h+56|0;n=h+52|0;o=h+48|0;p=h+44|0;q=h+40|0;r=h+36|0;s=h+32|0;t=h+28|0;u=h+24|0;v=h+20|0;w=h+16|0;x=h+8|0;y=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=c[o>>2];if((c[o>>2]|0)>>>0<8){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}c[v>>2]=Cq(c[n>>2]|0,5)|0;if(hr(c[v>>2]|0)|0){c[i>>2]=c[v>>2];z=c[i>>2]|0;l=h;return z|0;}if((c[o>>2]|0)>>>0<((c[v>>2]|0)+3|0)>>>0){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}if(ws(c[j>>2]|0,c[n>>2]|0,c[v>>2]|0)|0){c[i>>2]=-20;z=c[i>>2]|0;l=h;return z|0;}c[p>>2]=(c[p>>2]|0)+(c[v>>2]|0);c[u>>2]=(c[u>>2]|0)-(c[v>>2]|0);a:while(1){c[y>>2]=ir(c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0,x)|0;if(hr(c[y>>2]|0)|0){A=11;break;}c[p>>2]=(c[p>>2]|0)+3;c[u>>2]=(c[u>>2]|0)-3;if((c[y>>2]|0)>>>0>(c[u>>2]|0)>>>0){A=13;break;}switch(c[x>>2]|0){case 0:{c[w>>2]=xs(c[j>>2]|0,c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,c[p>>2]|0,c[y>>2]|0)|0;break;}case 1:{c[w>>2]=ys(c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,c[p>>2]|0,c[y>>2]|0)|0;break;}case 2:{c[w>>2]=zs(c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,a[c[p>>2]>>0]|0,c[x+4>>2]|0)|0;break;}case 3:{if(c[u>>2]|0){A=19;break a;}c[w>>2]=0;break;}default:{A=21;break a;}}if((c[x>>2]|0)==3){A=28;break;}if(hr(c[w>>2]|0)|0){A=24;break;}if(c[(c[j>>2]|0)+21552+16>>2]|0)Nh((c[j>>2]|0)+21592|0,c[t>>2]|0,c[w>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[y>>2]|0);c[u>>2]=(c[u>>2]|0)-(c[y>>2]|0);}if((A|0)==11){c[i>>2]=c[y>>2];z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==13){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==19){c[i>>2]=-72;z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==21){c[i>>2]=-1;z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==24){c[i>>2]=c[w>>2];z=c[i>>2]|0;l=h;return z|0;}else if((A|0)==28){c[i>>2]=(c[t>>2]|0)-(c[r>>2]|0);z=c[i>>2]|0;l=h;return z|0;}return 0;}function ws(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=Aq((c[g>>2]|0)+21552|0,c[h>>2]|0,c[i>>2]|0)|0;if(c[(c[g>>2]|0)+21552+12>>2]|0?(c[(c[g>>2]|0)+21684>>2]|0)!=(c[(c[g>>2]|0)+21552+12>>2]|0):0){c[f>>2]=-32;k=c[f>>2]|0;l=e;return k|0;}if(c[(c[g>>2]|0)+21552+16>>2]|0)Lh((c[g>>2]|0)+21592|0,0,0)|0;c[f>>2]=c[j>>2];k=c[f>>2]|0;l=e;return k|0;}function xs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];if((c[n>>2]|0)>>>0>=131072){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}c[p>>2]=As(c[i>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;m=(hr(c[p>>2]|0)|0)!=0;f=c[p>>2]|0;if(m){c[h>>2]=f;q=c[h>>2]|0;l=g;return q|0;}else{c[o>>2]=(c[o>>2]|0)+f;c[n>>2]=(c[n>>2]|0)-(c[p>>2]|0);c[h>>2]=Bs(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0,c[n>>2]|0)|0;q=c[h>>2]|0;l=g;return q|0;}return 0;}function ys(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0){c[g>>2]=-70;m=c[g>>2]|0;l=f;return m|0;}else{mE(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;c[g>>2]=c[k>>2];m=c[g>>2]|0;l=f;return m|0;}return 0;}function zs(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+4|0;m=h+16|0;n=h;c[j>>2]=b;c[k>>2]=e;a[m>>0]=f;c[n>>2]=g;if((c[n>>2]|0)>>>0>(c[k>>2]|0)>>>0){c[i>>2]=-70;o=c[i>>2]|0;l=h;return o|0;}else{oE(c[j>>2]|0,(d[m>>0]|0)&255|0,c[n>>2]|0)|0;c[i>>2]=c[n>>2];o=c[i>>2]|0;l=h;return o|0;}return 0;}function As(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+52|0;m=g+48|0;n=g+44|0;o=g+40|0;p=g+36|0;q=g+32|0;r=g+28|0;s=g+24|0;t=g+20|0;u=g+16|0;v=g+12|0;w=g+8|0;x=g+4|0;y=g;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=c[j>>2];if((c[k>>2]|0)>>>0<3){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch((d[c[m>>2]>>0]|0)>>6|0){case 0:{c[p>>2]=0;c[q>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[k>>2]|0)>>>0<5){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}switch(c[q>>2]|0){case 3:{c[q>>2]=5;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<14)+((d[(c[m>>2]|0)+1>>0]|0)<<6)+((d[(c[m>>2]|0)+2>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&3)<<16)+((d[(c[m>>2]|0)+3>>0]|0)<<8)+(d[(c[m>>2]|0)+4>>0]|0);break;}case 2:{c[q>>2]=4;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<10)+((d[(c[m>>2]|0)+1>>0]|0)<<2)+((d[(c[m>>2]|0)+2>>0]|0)>>6);c[o>>2]=(((d[(c[m>>2]|0)+2>>0]|0)&63)<<8)+(d[(c[m>>2]|0)+3>>0]|0);break;}default:{c[q>>2]=3;c[p>>2]=(d[c[m>>2]>>0]|0)&16;c[n>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[o>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);}}if((c[n>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(((c[o>>2]|0)+(c[q>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}j=(c[i>>2]|0)+5132|0;f=(c[i>>2]|0)+21708|0;e=c[n>>2]|0;b=(c[m>>2]|0)+(c[q>>2]|0)|0;A=c[o>>2]|0;if(c[p>>2]|0)B=Xs(j,f,e,b,A)|0;else B=Ys(j,f,e,b,A)|0;if(hr(B)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+21688>>2]=(c[i>>2]|0)+21708;c[(c[i>>2]|0)+21704>>2]=c[n>>2];c[(c[i>>2]|0)+21584>>2]=1;n=(c[i>>2]|0)+21708+(c[(c[i>>2]|0)+21704>>2]|0)|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;a[n+4>>0]=0;a[n+5>>0]=0;a[n+6>>0]=0;a[n+7>>0]=0;c[h>>2]=(c[o>>2]|0)+(c[q>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 1:{c[t>>2]=(d[c[m>>2]>>0]|0)>>4&3;if((c[t>>2]|0)!=1){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}if(!(c[(c[i>>2]|0)+21584>>2]|0)){c[h>>2]=-30;z=c[h>>2]|0;l=g;return z|0;}c[t>>2]=3;c[r>>2]=(((d[c[m>>2]>>0]|0)&15)<<6)+((d[(c[m>>2]|0)+1>>0]|0)>>2);c[s>>2]=(((d[(c[m>>2]|0)+1>>0]|0)&3)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if(((c[s>>2]|0)+(c[t>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}c[u>>2]=Zs((c[i>>2]|0)+21708|0,c[r>>2]|0,(c[m>>2]|0)+(c[t>>2]|0)|0,c[s>>2]|0,(c[i>>2]|0)+5132|0)|0;if(hr(c[u>>2]|0)|0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{c[(c[i>>2]|0)+21688>>2]=(c[i>>2]|0)+21708;c[(c[i>>2]|0)+21704>>2]=c[r>>2];r=(c[i>>2]|0)+21708+(c[(c[i>>2]|0)+21704>>2]|0)|0;a[r>>0]=0;a[r+1>>0]=0;a[r+2>>0]=0;a[r+3>>0]=0;a[r+4>>0]=0;a[r+5>>0]=0;a[r+6>>0]=0;a[r+7>>0]=0;c[h>>2]=(c[s>>2]|0)+(c[t>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[w>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[w>>2]|0){case 3:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);break;}case 2:{c[v>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[w>>2]=1;c[v>>2]=(d[c[m>>2]>>0]|0)&31;}}if(((c[w>>2]|0)+(c[v>>2]|0)+8|0)>>>0<=(c[k>>2]|0)>>>0){c[(c[i>>2]|0)+21688>>2]=(c[m>>2]|0)+(c[w>>2]|0);c[(c[i>>2]|0)+21704>>2]=c[v>>2];c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}if(((c[v>>2]|0)+(c[w>>2]|0)|0)>>>0>(c[k>>2]|0)>>>0){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{mE((c[i>>2]|0)+21708|0,(c[m>>2]|0)+(c[w>>2]|0)|0,c[v>>2]|0)|0;c[(c[i>>2]|0)+21688>>2]=(c[i>>2]|0)+21708;c[(c[i>>2]|0)+21704>>2]=c[v>>2];t=(c[i>>2]|0)+21708+(c[(c[i>>2]|0)+21704>>2]|0)|0;a[t>>0]=0;a[t+1>>0]=0;a[t+2>>0]=0;a[t+3>>0]=0;a[t+4>>0]=0;a[t+5>>0]=0;a[t+6>>0]=0;a[t+7>>0]=0;c[h>>2]=(c[w>>2]|0)+(c[v>>2]|0);z=c[h>>2]|0;l=g;return z|0;}break;}case 3:{c[y>>2]=(d[c[m>>2]>>0]|0)>>4&3;switch(c[y>>2]|0){case 3:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<16)+((d[(c[m>>2]|0)+1>>0]|0)<<8)+(d[(c[m>>2]|0)+2>>0]|0);if((c[k>>2]|0)>>>0<4){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}break;}case 2:{c[x>>2]=(((d[c[m>>2]>>0]|0)&15)<<8)+(d[(c[m>>2]|0)+1>>0]|0);break;}default:{c[y>>2]=1;c[x>>2]=(d[c[m>>2]>>0]|0)&31;}}if((c[x>>2]|0)>>>0>131072){c[h>>2]=-20;z=c[h>>2]|0;l=g;return z|0;}else{oE((c[i>>2]|0)+21708|0,(d[(c[m>>2]|0)+(c[y>>2]|0)>>0]|0)&255|0,(c[x>>2]|0)+8|0)|0;c[(c[i>>2]|0)+21688>>2]=(c[i>>2]|0)+21708;c[(c[i>>2]|0)+21704>>2]=c[x>>2];c[h>>2]=(c[y>>2]|0)+1;z=c[h>>2]|0;l=g;return z|0;}break;}default:{}}return 0;}function Bs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;g=l;l=l+192|0;h=g+168|0;i=g+164|0;j=g+160|0;k=g+156|0;m=g+152|0;n=g+148|0;o=g+144|0;p=g+140|0;q=g+136|0;r=g+132|0;s=g+128|0;t=g+124|0;u=g+120|0;v=g+116|0;w=g+112|0;x=g+108|0;y=g+104|0;z=g+100|0;A=g+96|0;B=g+92|0;C=g+88|0;D=g+84|0;E=g+32|0;F=g+28|0;G=g+24|0;H=g+12|0;I=g+8|0;J=g+4|0;K=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[k>>2];c[s>>2]=(c[r>>2]|0)+(c[m>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=c[(c[j>>2]|0)+21688>>2];c[v>>2]=(c[u>>2]|0)+(c[(c[j>>2]|0)+21704>>2]|0);c[w>>2]=c[j>>2];c[x>>2]=(c[j>>2]|0)+3080;c[y>>2]=(c[j>>2]|0)+2052;c[z>>2]=c[(c[j>>2]|0)+21524>>2];c[A>>2]=c[(c[j>>2]|0)+21528>>2];c[B>>2]=c[(c[j>>2]|0)+21532>>2];c[D>>2]=Cs(C,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[(c[j>>2]|0)+21588>>2]|0,c[p>>2]|0,c[o>>2]|0)|0;o=(hr(c[D>>2]|0)|0)!=0;m=c[D>>2]|0;if(o){c[i>>2]=m;L=c[i>>2]|0;l=g;return L|0;}c[p>>2]=(c[p>>2]|0)+m;a:do{if(c[C>>2]|0){c[(c[j>>2]|0)+21588>>2]=1;c[F>>2]=0;while(1){if((c[F>>2]|0)>>>0>=3)break;c[E+40+(c[F>>2]<<2)>>2]=c[(c[j>>2]|0)+21540+(c[F>>2]<<2)>>2];c[F>>2]=(c[F>>2]|0)+1;}c[G>>2]=Ds(E,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;if(hr(c[G>>2]|0)|0){c[i>>2]=-20;L=c[i>>2]|0;l=g;return L|0;}Es(E+16|0,E,c[w>>2]|0);Es(E+24|0,E,c[y>>2]|0);Es(E+32|0,E,c[x>>2]|0);while(1){m=(Fs(E)|0)>>>0<=2;M=c[C>>2]|0;if(!(m?(c[C>>2]|0)!=0:0))break;c[C>>2]=M+-1;Gs(H,E);m=c[t>>2]|0;o=c[s>>2]|0;D=c[v>>2]|0;k=c[z>>2]|0;n=c[A>>2]|0;f=c[B>>2]|0;c[h>>2]=c[H>>2];c[h+4>>2]=c[H+4>>2];c[h+8>>2]=c[H+8>>2];c[I>>2]=Hs(m,o,h,u,D,k,n,f)|0;f=(hr(c[I>>2]|0)|0)!=0;N=c[I>>2]|0;if(f){O=12;break;}c[t>>2]=(c[t>>2]|0)+N;}if((O|0)==12){c[i>>2]=N;L=c[i>>2]|0;l=g;return L|0;}if(M|0){c[i>>2]=-20;L=c[i>>2]|0;l=g;return L|0;}c[J>>2]=0;while(1){if((c[J>>2]|0)>>>0>=3)break a;c[(c[j>>2]|0)+21540+(c[J>>2]<<2)>>2]=c[E+40+(c[J>>2]<<2)>>2];c[J>>2]=(c[J>>2]|0)+1;}}}while(0);c[K>>2]=(c[v>>2]|0)-(c[u>>2]|0);if((c[K>>2]|0)>>>0>((c[s>>2]|0)-(c[t>>2]|0)|0)>>>0){c[i>>2]=-70;L=c[i>>2]|0;l=g;return L|0;}else{mE(c[t>>2]|0,c[u>>2]|0,c[K>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[K>>2]|0);c[i>>2]=(c[t>>2]|0)-(c[r>>2]|0);L=c[i>>2]|0;l=g;return L|0;}return 0;}function Cs(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;j=l;l=l+80|0;k=j+68|0;m=j+64|0;n=j+60|0;o=j+56|0;p=j+52|0;q=j+48|0;r=j+44|0;s=j+40|0;t=j+36|0;u=j+32|0;v=j+28|0;w=j+24|0;x=j+20|0;y=j+16|0;z=j+12|0;A=j+8|0;B=j+4|0;C=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=c[r>>2];c[u>>2]=(c[t>>2]|0)+(c[s>>2]|0);c[v>>2]=c[t>>2];if((c[s>>2]|0)>>>0<1){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}s=c[v>>2]|0;c[v>>2]=s+1;c[w>>2]=d[s>>0];if(!(c[w>>2]|0)){c[c[m>>2]>>2]=0;c[k>>2]=1;D=c[k>>2]|0;l=j;return D|0;}do{if((c[w>>2]|0)>127){s=c[v>>2]|0;if((c[w>>2]|0)==255){if((s+2|0)>>>0<=(c[u>>2]|0)>>>0){c[w>>2]=((Eq(c[v>>2]|0)|0)&65535)+32512;c[v>>2]=(c[v>>2]|0)+2;break;}c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}else{if(s>>>0<(c[u>>2]|0)>>>0){s=(c[w>>2]|0)-128<<8;r=c[v>>2]|0;c[v>>2]=r+1;c[w>>2]=s+(d[r>>0]|0);break;}c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}}}while(0);c[c[m>>2]>>2]=c[w>>2];c[x>>2]=(d[c[v>>2]>>0]|0)>>6;c[y>>2]=(d[c[v>>2]>>0]|0)>>4&3;c[z>>2]=(d[c[v>>2]>>0]|0)>>2&3;c[v>>2]=(c[v>>2]|0)+1;if((c[v>>2]|0)>>>0>((c[u>>2]|0)+-3|0)>>>0){c[k>>2]=-72;D=c[k>>2]|0;l=j;return D|0;}c[A>>2]=Ss(c[n>>2]|0,c[x>>2]|0,35,9,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,5440,6,c[q>>2]|0)|0;if(hr(c[A>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}c[v>>2]=(c[v>>2]|0)+(c[A>>2]|0);c[B>>2]=Ss(c[p>>2]|0,c[y>>2]|0,28,8,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,5520,5,c[q>>2]|0)|0;if(hr(c[B>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}c[v>>2]=(c[v>>2]|0)+(c[B>>2]|0);c[C>>2]=Ss(c[o>>2]|0,c[z>>2]|0,52,9,c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,5584,6,c[q>>2]|0)|0;if(hr(c[C>>2]|0)|0){c[k>>2]=-20;D=c[k>>2]|0;l=j;return D|0;}else{c[v>>2]=(c[v>>2]|0)+(c[C>>2]|0);c[k>>2]=(c[v>>2]|0)-(c[t>>2]|0);D=c[k>>2]|0;l=j;return D|0;}return 0;}function Cc(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0;}function Dc(){return l|0;}function Ec(a){a=a|0;l=a;}function Fc(a,b){a=a|0;b=b|0;l=a;m=b;}function Gc(a,b){a=a|0;b=b|0;if(!n){n=a;o=b;}}function Hc(a){a=a|0;y=a;}function Ic(){return y|0;}function Jc(){var a=0;a=l;l=l+16|0;Kz(Cz(12856,12862)|0)|0;Az(12856,a)|0;l=a;return;}function Kc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=l;l=l+32|0;f=e;g=c[d>>2]|0;h=hb(12865)|0;i=db(g|0,h|0)|0;ab(h|0);j=+Za(i|0,11e3,f|0);jb(c[f>>2]|0);h=~~j>>>0;ab(i|0);i=b+4|0;g=c[i>>2]|0;k=c[b>>2]|0;m=g-k|0;n=k;a:do{if(m>>>0<h>>>0){o=h-m|0;p=b+8|0;q=c[p>>2]|0;if((q-g|0)>>>0>=o>>>0){r=o;s=g;while(1){a[s>>0]=0;s=(c[i>>2]|0)+1|0;c[i>>2]=s;r=r+-1|0;if(!r)break a;}}if((h|0)<0)Wz(b);r=q-k|0;s=r<<1;t=r>>>0<1073741823?s>>>0<h>>>0?h:s:2147483647;if(!t)u=0;else u=Uz(t)|0;oE(u+m|0,0,o|0)|0;if((m|0)>0)mE(u|0,n|0,m|0)|0;c[b>>2]=u;c[i>>2]=u+h;c[p>>2]=u+t;if(k|0)Vz(n);}else if(m>>>0>h>>>0)c[i>>2]=n+h;}while(0);n=cb(12872)|0;i=c[d>>2]|0;m=hb(12879)|0;k=db(i|0,m|0)|0;ab(m|0);m=c[b>>2]|0;eb(n|0);c[f>>2]=n;c[f+8>>2]=m;c[f+16>>2]=h;h=gb(k|0,3,11072,f|0)|0;ab(k|0);cd(h,12891,d);ab(h|0);ab(n|0);l=e;return;}function Lc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;e=l;l=l+32|0;f=e;g=cb(12895)|0;h=cb(12872)|0;i=hb(12879)|0;j=db(g|0,i|0)|0;ab(i|0);i=c[d>>2]|0;k=d+4|0;m=c[k>>2]|0;eb(h|0);c[f>>2]=h;c[f+8>>2]=i;c[f+16>>2]=m-i;i=gb(j|0,3,11092,f|0)|0;m=i;ab(j|0);j=hb(12879)|0;n=db(h|0,j|0)|0;ab(j|0);c[f>>2]=(c[k>>2]|0)-(c[d>>2]|0);d=gb(n|0,1,11104,f|0)|0;ab(n|0);n=hb(12879)|0;k=db(g|0,n|0)|0;ab(n|0);eb(d|0);c[f>>2]=d;n=gb(k|0,1,11108,f|0)|0;c[b>>2]=n;ab(k|0);if((a[21600]|0)==0?WD(21600)|0:0)c[5404]=bb(2,11084)|0;k=c[5404]|0;eb(i|0);c[f>>2]=m;$a(k|0,n|0,12891,f|0);ab(d|0);ab(i|0);ab(h|0);ab(g|0);l=e;return;}function Mc(a){a=a|0;return(c[a+4>>2]|0)-(c[a>>2]|0)|0;}function Nc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d;f=cb(12872)|0;g=cb(12895)|0;h=hb(12879)|0;i=db(g|0,h|0)|0;ab(h|0);h=c[b>>2]|0;j=c[b+4>>2]|0;eb(f|0);c[e>>2]=f;c[e+8>>2]=h;c[e+16>>2]=j-h;c[a>>2]=gb(i|0,3,11092,e|0)|0;ab(i|0);ab(g|0);ab(f|0);l=d;return;}function Oc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=Uz(32)|0;Pc(e,a);Ef(f,e,b);b=c[e>>2]|0;if(!b){l=d;return f|0;}c[e+4>>2]=b;Vz(b);l=d;return f|0;}function Pc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0.0,n=0,o=0,p=0;d=l;l=l+48|0;e=d;f=d+24|0;c[f>>2]=0;g=f+4|0;c[g>>2]=0;h=f+8|0;c[h>>2]=0;i=c[b>>2]|0;j=hb(12865)|0;k=db(i|0,j|0)|0;ab(j|0);m=+Za(k|0,11016,e|0);jb(c[e>>2]|0);j=~~m>>>0;do{if(j|0)if((j|0)<0)Wz(f);else{i=Uz(j)|0;oE(i|0,0,j|0)|0;n=i+j|0;c[f>>2]=i;c[g>>2]=n;c[h>>2]=n;break;}}while(0);ab(k|0);k=c[b>>2]|0;j=hb(12865)|0;n=db(k|0,j|0)|0;ab(j|0);m=+Za(n|0,11e3,e|0);jb(c[e>>2]|0);j=~~m>>>0;ab(n|0);n=cb(12872)|0;k=c[b>>2]|0;i=hb(12879)|0;o=db(k|0,i|0)|0;ab(i|0);i=c[f>>2]|0;eb(n|0);c[e>>2]=n;c[e+8>>2]=i;c[e+16>>2]=j;i=gb(o|0,3,11072,e|0)|0;ab(o|0);o=c[f>>2]|0;e=o;if(((c[h>>2]|0)-o|0)>>>0<j>>>0){k=(c[g>>2]|0)-o|0;p=Uz(j)|0;if((k|0)>0)mE(p|0,e|0,k|0)|0;c[f>>2]=p;c[g>>2]=p+k;c[h>>2]=p+j;if(o|0)Vz(e);}dd(i,12891,b);ab(i|0);ab(n|0);c[a>>2]=c[f>>2];c[a+4>>2]=c[g>>2];c[a+8>>2]=c[h>>2];l=d;return;}function Qc(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b;e=Uz(32)|0;Pc(d,a);Pf(e,d);a=c[d>>2]|0;if(!a){l=b;return e|0;}c[d+4>>2]=a;Vz(a);l=b;return e|0;}function Rc(a,b){a=a|0;b=b|0;return ag(a,b)|0;}function Sc(a,b){a=a|0;b=b|0;return mg(a,b)|0;}function Tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+48|0;f=e+28|0;g=e+24|0;h=e;c[f>>2]=0;i=f+4|0;c[i>>2]=0;c[f+8>>2]=0;j=c[b>>2]|0;c[g>>2]=j;eb(j|0);Kc(f,g);ab(c[g>>2]|0);g=h+16|0;c[h>>2]=11128;c[h+4>>2]=d;c[g>>2]=h;d=vg(a,f,h)|0;a=c[g>>2]|0;if((h|0)!=(a|0)){if(a|0)wc[c[(c[a>>2]|0)+20>>2]&127](a);}else wc[c[(c[a>>2]|0)+16>>2]&127](a);a=c[f>>2]|0;if(!a){l=e;return d|0;}c[i>>2]=a;Vz(a);l=e;return d|0;}function Uc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11172;c[e+4>>2]=b;c[f>>2]=e;b=xg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function Vc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11216;c[e+4>>2]=b;c[f>>2]=e;b=yg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function Wc(a){a=a|0;return Bg(a)|0;}function Xc(a,b){a=a|0;b=b|0;return Mg(a,b)|0;}function Yc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+48|0;f=e+28|0;g=e+24|0;h=e;c[f>>2]=0;i=f+4|0;c[i>>2]=0;c[f+8>>2]=0;j=c[b>>2]|0;c[g>>2]=j;eb(j|0);Kc(f,g);ab(c[g>>2]|0);g=h+16|0;c[h>>2]=11260;c[h+4>>2]=d;c[g>>2]=h;d=Vg(a,f,h)|0;a=c[g>>2]|0;if((h|0)!=(a|0)){if(a|0)wc[c[(c[a>>2]|0)+20>>2]&127](a);}else wc[c[(c[a>>2]|0)+16>>2]&127](a);a=c[f>>2]|0;if(!a){l=e;return d|0;}c[i>>2]=a;Vz(a);l=e;return d|0;}function Zc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11304;c[e+4>>2]=b;c[f>>2]=e;b=Xg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function _c(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11348;c[e+4>>2]=b;c[f>>2]=e;b=Yg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function $c(a){a=a|0;ad(12902);Ra(12856,1,11420,14747,61,2);Ra(12911,3,11424,14750,1,26);Ra(12925,2,11436,14761,20,27);Ra(12943,2,11436,14761,20,28);Ma(10096,10112,10128,0,14742,31,14745,0,14745,0,12960,14747,62);Ra(12980,3,11444,14765,9,21);Ma(10152,10168,10184,0,14742,32,14745,0,14745,0,13002,14747,63);Ra(13024,2,11456,14761,22,33);Ma(10200,10208,10224,0,14742,34,14745,0,14745,0,13048,14747,64);Na(10200,1,11464,14742,35,1);a=Uz(8)|0;c[a>>2]=23;c[a+4>>2]=0;Oa(10200,13058,3,11468,14765,10,a|0,0);a=Uz(8)|0;c[a>>2]=24;c[a+4>>2]=0;Oa(10200,13072,3,11480,14765,11,a|0,0);a=Uz(8)|0;c[a>>2]=7;c[a+4>>2]=0;Oa(10200,13084,5,48,15008,1,a|0,0);a=Uz(8)|0;c[a>>2]=12;c[a+4>>2]=0;Oa(10200,13093,4,80,14770,8,a|0,0);a=Uz(8)|0;c[a>>2]=9;c[a+4>>2]=0;Oa(10200,13104,5,96,15008,2,a|0,0);a=Uz(8)|0;c[a>>2]=10;c[a+4>>2]=0;Oa(10200,13122,5,128,15008,3,a|0,0);Ma(10240,10248,10264,0,14742,36,14745,0,14745,0,13142,14747,65);Na(10240,1,11492,14742,37,2);a=Uz(8)|0;c[a>>2]=25;c[a+4>>2]=0;Oa(10240,13168,3,11496,14765,13,a|0,0);a=Uz(8)|0;c[a>>2]=26;c[a+4>>2]=0;Oa(10240,13174,3,11508,14765,14,a|0,0);a=Uz(8)|0;c[a>>2]=15;c[a+4>>2]=0;Oa(10240,13189,4,160,14770,11,a|0,0);a=Uz(8)|0;c[a>>2]=27;c[a+4>>2]=0;Oa(10240,13199,3,11520,14765,16,a|0,0);a=Uz(8)|0;c[a>>2]=28;c[a+4>>2]=0;Oa(10240,13205,3,11520,14765,16,a|0,0);Ma(10280,10288,10304,0,14742,38,14745,0,14745,0,13209,14747,66);Na(10280,1,11532,14742,39,3);a=Uz(8)|0;c[a>>2]=40;c[a+4>>2]=0;Oa(10280,13168,2,11536,14761,29,a|0,0);a=Uz(8)|0;c[a>>2]=30;c[a+4>>2]=0;Oa(10280,13174,3,11544,14765,17,a|0,0);a=Uz(8)|0;c[a>>2]=18;c[a+4>>2]=0;Oa(10280,13189,4,176,14770,12,a|0,0);a=Uz(8)|0;c[a>>2]=31;c[a+4>>2]=0;Oa(10280,13199,3,11556,14765,19,a|0,0);a=Uz(8)|0;c[a>>2]=32;c[a+4>>2]=0;Oa(10280,13205,3,11556,14765,19,a|0,0);return;}function ad(a){a=a|0;Ma(10032,10056,10072,0,14742,41,14745,0,14745,0,a|0,14747,67);Na(10032,1,11384,14742,42,4);a=Uz(8)|0;c[a>>2]=29;c[a+4>>2]=0;Oa(10032,14524,3,11388,14750,2,a|0,0);a=Uz(8)|0;c[a>>2]=3;c[a+4>>2]=0;Oa(10032,14534,4,16,14755,4,a|0,0);a=Uz(8)|0;c[a>>2]=43;c[a+4>>2]=0;Oa(10032,14541,2,11400,14761,33,a|0,0);a=Uz(4)|0;c[a>>2]=4;Oa(10032,14546,3,11408,14765,20,a|0,0);a=Uz(4)|0;c[a>>2]=21;Oa(10032,12891,4,32,14770,13,a|0,0);return;}function bd(a){a=a|0;wa(a|0)|0;sA();}function cd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;if((a[21600]|0)==0?WD(21600)|0:0)c[5404]=bb(2,11084)|0;h=c[5404]|0;eb(c[e>>2]|0);c[g>>2]=c[e>>2];$a(h|0,b|0,d|0,g|0);l=f;return;}function dd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;if((a[21608]|0)==0?WD(21608)|0:0)c[5405]=bb(2,11112)|0;h=c[5405]|0;eb(c[e>>2]|0);c[g>>2]=c[e>>2];$a(h|0,b|0,d|0,g|0);l=f;return;}function ed(a){a=a|0;Vz(a);return;}function fd(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11128;c[b+4>>2]=c[a+4>>2];return b|0;}function gd(a,b){a=a|0;b=b|0;c[b>>2]=11128;c[b+4>>2]=c[a+4>>2];return;}function hd(a){a=a|0;return;}function id(a){a=a|0;Vz(a);return;}function jd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function kd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==13464?a+4|0:0)|0;}function ld(a){a=a|0;return 9872;}function md(a){a=a|0;Vz(a);return;}function nd(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11172;c[b+4>>2]=c[a+4>>2];return b|0;}function od(a,b){a=a|0;b=b|0;c[b>>2]=11172;c[b+4>>2]=c[a+4>>2];return;}function pd(a){a=a|0;return;}function qd(a){a=a|0;Vz(a);return;}function rd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function sd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==13666?a+4|0:0)|0;}function td(a){a=a|0;return 9896;}function ud(a){a=a|0;Vz(a);return;}function vd(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11216;c[b+4>>2]=c[a+4>>2];return b|0;}function wd(a,b){a=a|0;b=b|0;c[b>>2]=11216;c[b+4>>2]=c[a+4>>2];return;}function xd(a){a=a|0;return;}function yd(a){a=a|0;Vz(a);return;}function zd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function Ad(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==13859?a+4|0:0)|0;}function Bd(a){a=a|0;return 9920;}function Cd(a){a=a|0;return;}function Dd(a){a=a|0;Vz(a);return;}function Ed(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11260;c[b+4>>2]=c[a+4>>2];return b|0;}function Fd(a,b){a=a|0;b=b|0;c[b>>2]=11260;c[b+4>>2]=c[a+4>>2];return;}function Gd(a){a=a|0;return;}function Hd(a){a=a|0;Vz(a);return;}function Id(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function Jd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==14061?a+4|0:0)|0;}function Kd(a){a=a|0;return 9944;}function Ld(a){a=a|0;Vz(a);return;}function Md(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11304;c[b+4>>2]=c[a+4>>2];return b|0;}function Nd(a,b){a=a|0;b=b|0;c[b>>2]=11304;c[b+4>>2]=c[a+4>>2];return;}function Od(a){a=a|0;return;}function Pd(a){a=a|0;Vz(a);return;}function Qd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function Rd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==14267?a+4|0:0)|0;}function Sd(a){a=a|0;return 9968;}function Td(a){a=a|0;Vz(a);return;}function Ud(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11348;c[b+4>>2]=c[a+4>>2];return b|0;}function Vd(a,b){a=a|0;b=b|0;c[b>>2]=11348;c[b+4>>2]=c[a+4>>2];return;}function Wd(a){a=a|0;return;}function Xd(a){a=a|0;Vz(a);return;}function Yd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;f=d+8|0;Lc(f,b);b=c[a+4>>2]|0;a=c[f>>2]|0;eb(a|0);c[e>>2]=a;ab(_a(c[b>>2]|0,1,11108,e|0)|0);ab(a|0);l=d;return;}function Zd(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==14464?a+4|0:0)|0;}function _d(a){a=a|0;return 9992;}function $d(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=b+4|0;f=c[e>>2]|0;g=b+8|0;h=c[g>>2]|0;if((f|0)!=(h|0)){a[f>>0]=a[d>>0]|0;c[e>>2]=(c[e>>2]|0)+1;return;}i=c[b>>2]|0;j=f-i|0;f=j+1|0;k=i;if((f|0)<0)Wz(b);l=h-i|0;h=l<<1;m=l>>>0<1073741823?h>>>0<f>>>0?f:h:2147483647;if(!m)n=0;else n=Uz(m)|0;h=n+j|0;a[h>>0]=a[d>>0]|0;if((j|0)>0)mE(n|0,k|0,j|0)|0;c[b>>2]=n;c[e>>2]=h+1;c[g>>2]=n+m;if(!i)return;Vz(k);return;}function ae(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+4|0;f=c[a>>2]|0;g=(c[e>>2]|0)-f|0;if(g>>>0<b>>>0){de(a,b-g|0,d);return;}if(g>>>0<=b>>>0)return;c[e>>2]=f+b;return;}function be(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;g=f;h=c[b>>2]|0;if(((c[b+4>>2]|0)-h|0)>>>0<=e>>>0){i=1;c[a>>2]=i;l=f;return;}c[g>>2]=d[h+e>>0];i=kb(10960,g|0)|0;c[a>>2]=i;l=f;return;}function ce(b,d,e){b=b|0;d=d|0;e=e|0;a[(c[b>>2]|0)+d>>0]=a[e>>0]|0;return 1;}function de(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=b+8|0;g=c[f>>2]|0;h=b+4|0;i=c[h>>2]|0;if((g-i|0)>>>0>=d>>>0){j=d;k=i;do{a[k>>0]=a[e>>0]|0;k=(c[h>>2]|0)+1|0;c[h>>2]=k;j=j+-1|0;}while((j|0)!=0);return;}j=c[b>>2]|0;k=i-j|0;l=k+d|0;if((l|0)<0)Wz(b);m=g-j|0;g=m<<1;n=m>>>0<1073741823?g>>>0<l>>>0?l:g:2147483647;if(!n)o=0;else o=Uz(n)|0;g=o+k|0;k=o+n|0;n=i+d-j|0;j=d;d=g;while(1){a[d>>0]=a[e>>0]|0;j=j+-1|0;if(!j)break;else d=d+1|0;}d=c[b>>2]|0;j=(c[h>>2]|0)-d|0;e=g+(0-j)|0;if((j|0)>0)mE(e|0,d|0,j|0)|0;c[b>>2]=e;c[h>>2]=o+n;c[f>>2]=k;if(!d)return;Vz(d);return;}function ee(a){a=a|0;return 10032;}function fe(a){a=a|0;var b=0;if(!a)return;b=c[a>>2]|0;if(b|0){c[a+4>>2]=b;Vz(b);}Vz(a);return;}function ge(){var a=0;a=Uz(12)|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return a|0;}function he(a){a=a|0;return oc[a&7]()|0;}function ie(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f;h=c[b>>2]|0;i=c[b+4>>2]|0;b=d+(i>>1)|0;if(!(i&1))j=h;else j=c[(c[b>>2]|0)+h>>2]|0;a[g>>0]=e;xc[j&31](b,g);l=f;return;}function je(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=l;l=l+16|0;h=g;i=c[b>>2]|0;j=c[b+4>>2]|0;b=d+(j>>1)|0;if(!(j&1))k=i;else k=c[(c[b>>2]|0)+i>>2]|0;a[h>>0]=f;yc[k&7](b,e,h);l=g;return;}function ke(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;e=c[a+4>>2]|0;a=b+(e>>1)|0;if(!(e&1))f=d;else f=c[(c[a>>2]|0)+d>>2]|0;return pc[f&63](a)|0;}function le(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;yc[c[a>>2]&7](f,b,d);eb(c[f>>2]|0);d=c[f>>2]|0;ab(d|0);l=e;return d|0;}function me(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=l;l=l+16|0;h=g;i=c[b>>2]|0;a[h>>0]=f;f=rc[i&31](d,e,h)|0;l=g;return f|0;}function ne(a){a=a|0;vc[a&3]();return;}function oe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=d;xc[a&31](b,f);ab(c[f>>2]|0);l=e;return;}function pe(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;xc[a&31](e,b);eb(c[e>>2]|0);b=c[e>>2]|0;ab(b|0);l=d;return b|0;}function qe(a){a=a|0;return 10096;}function re(a){a=a|0;if(!a)return;se(a);Vz(a);return;}function se(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b;e=c[a>>2]|0;do{if(e){c[d>>2]=e;f=a+24|0;g=c[f>>2]|0;if(!g){h=va(4)|0;c[h>>2]=12636;ya(h|0,10800,50);}else{xc[c[(c[g>>2]|0)+24>>2]&31](g,d);c[a>>2]=0;i=f;break;}}else i=a+24|0;}while(0);d=c[i>>2]|0;if((a+8|0)==(d|0)){wc[c[(c[d>>2]|0)+16>>2]&127](d);l=b;return;}if(!d){l=b;return;}wc[c[(c[d>>2]|0)+20>>2]&127](d);l=b;return;}function te(a){a=a|0;var b=0;b=c[a+16>>2]|0;if((a|0)==(b|0)){wc[c[(c[b>>2]|0)+16>>2]&127](b);return;}if(!b)return;wc[c[(c[b>>2]|0)+20>>2]&127](b);return;}function ue(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+16|0;f=e;c[f>>2]=b;b=qc[a&63](f,d)|0;ab(c[f>>2]|0);l=e;return b|0;}function ve(a){a=a|0;return 10152;}function we(a){a=a|0;if(!a)return;xe(a);Vz(a);return;}function xe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b;e=c[a>>2]|0;do{if(e){c[d>>2]=e;f=a+24|0;g=c[f>>2]|0;if(!g){h=va(4)|0;c[h>>2]=12636;ya(h|0,10800,50);}else{xc[c[(c[g>>2]|0)+24>>2]&31](g,d);c[a>>2]=0;i=f;break;}}else i=a+24|0;}while(0);d=c[i>>2]|0;if((a+8|0)==(d|0)){wc[c[(c[d>>2]|0)+16>>2]&127](d);l=b;return;}if(!d){l=b;return;}wc[c[(c[d>>2]|0)+20>>2]&127](d);l=b;return;}function ye(a){a=a|0;var b=0;b=c[a+16>>2]|0;if((a|0)==(b|0)){wc[c[(c[b>>2]|0)+16>>2]&127](b);return;}if(!b)return;wc[c[(c[b>>2]|0)+20>>2]&127](b);return;}function ze(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=pc[a&63](e)|0;ab(c[e>>2]|0);l=d;return b|0;}function Ae(a){a=a|0;return 10200;}function Be(a){a=a|0;if(!a)return;Vz(a);return;}function Ce(){return Uz(1)|0;}function De(a){a=a|0;return oc[a&7]()|0;}function Ee(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Fe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Ge(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;return sc[i&15](a,d,e,f)|0;}function He(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=c[a>>2]|0;g=c[a+4>>2]|0;a=b+(g>>1)|0;if(!(g&1))h=f;else h=c[(c[a>>2]|0)+f>>2]|0;return rc[h&31](a,d,e)|0;}function Ie(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;return sc[i&15](a,d,e,f)|0;}function Je(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;return sc[i&15](a,d,e,f)|0;}function Ke(a){a=a|0;return 10240;}function Le(a){a=a|0;if(!a)return;$f(a);Vz(a);return;}function Me(){var a=0;a=Uz(36)|0;_f(a);return a|0;}function Ne(a){a=a|0;return oc[a&7]()|0;}function Oe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Pe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Qe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;g=f+4|0;h=f;i=c[a>>2]|0;j=c[a+4>>2]|0;a=b+(j>>1)|0;if(!(j&1))k=i;else k=c[(c[a>>2]|0)+i>>2]|0;c[g>>2]=d;c[h>>2]=e;e=rc[k&31](a,g,h)|0;ab(c[h>>2]|0);ab(c[g>>2]|0);l=f;return e|0;}function Re(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;c[f>>2]=d;d=qc[i&63](a,f)|0;ab(c[f>>2]|0);l=e;return d|0;}function Se(a){a=a|0;return 10280;}function Te(a){a=a|0;if(!a)return;Ag(a);Vz(a);return;}function Ue(){var a=0;a=Uz(36)|0;zg(a);return a|0;}function Ve(a){a=a|0;return oc[a&7]()|0;}function We(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a>>2]|0;e=c[a+4>>2]|0;a=b+(e>>1)|0;if(!(e&1))f=d;else f=c[(c[a>>2]|0)+d>>2]|0;return pc[f&63](a)|0;}function Xe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=c[a+4>>2]|0;a=b+(f>>1)|0;if(!(f&1))g=e;else g=c[(c[a>>2]|0)+e>>2]|0;return qc[g&63](a,d)|0;}function Ye(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;g=f+4|0;h=f;i=c[a>>2]|0;j=c[a+4>>2]|0;a=b+(j>>1)|0;if(!(j&1))k=i;else k=c[(c[a>>2]|0)+i>>2]|0;c[g>>2]=d;c[h>>2]=e;e=rc[k&31](a,g,h)|0;ab(c[h>>2]|0);ab(c[g>>2]|0);l=f;return e|0;}function Ze(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=c[a>>2]|0;h=c[a+4>>2]|0;a=b+(h>>1)|0;if(!(h&1))i=g;else i=c[(c[a>>2]|0)+g>>2]|0;c[f>>2]=d;d=qc[i&63](a,f)|0;ab(c[f>>2]|0);l=e;return d|0;}function _e(){$c(0);return;}function $e(a,b){a=a|0;b=b|0;a=lj(b)|0;b=(Ph(a)|0)==0;return(b?a>>>0>2147483646?-2:a:-1)|0;}function af(a,b){a=a|0;b=b|0;var d=0;a=c[b>>2]|0;d=wq(a,(c[b+4>>2]|0)-a|0)|0;a=(Ph(d)|0)==0;return(a?d>>>0>2147483646?-2:d:-1)|0;}function bf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;a=c[b>>2]|0;f=c[d>>2]|0;g=Go(a,(c[b+4>>2]|0)-a|0,f,(c[d+4>>2]|0)-f|0,e)|0;e=(Ph(g)|0)==0;return(e?g>>>0>2147483646?-2:g:-1)|0;}function cf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;a=c[b>>2]|0;e=c[d>>2]|0;f=ux(a,(c[b+4>>2]|0)-a|0,e,(c[d+4>>2]|0)-e|0)|0;e=(Ph(f)|0)==0;return(e?f>>>0>2147483646?-2:f:-1)|0;}function df(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a=l;l=l+32|0;f=a;g=mj()|0;c[f>>2]=g;h=f+8|0;c[f+24>>2]=h;c[h>>2]=11576;c[f+12>>2]=68;if(!g){i=-3;ff(f);l=a;return i|0;}h=c[b>>2]|0;j=c[d>>2]|0;k=Lo(g,h,(c[b+4>>2]|0)-h|0,j,(c[d+4>>2]|0)-j|0,c[e>>2]|0)|0;e=(Ph(k)|0)==0;i=e?k>>>0>2147483646?-2:k:-1;ff(f);l=a;return i|0;}function ef(a){a=a|0;qj(a)|0;return;}function ff(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b;e=c[a>>2]|0;do{if(e){c[d>>2]=e;f=a+24|0;g=c[f>>2]|0;if(!g){h=va(4)|0;c[h>>2]=12636;ya(h|0,10800,50);}else{xc[c[(c[g>>2]|0)+24>>2]&31](g,d);c[a>>2]=0;i=f;break;}}else i=a+24|0;}while(0);d=c[i>>2]|0;if((a+8|0)==(d|0)){wc[c[(c[d>>2]|0)+16>>2]&127](d);l=b;return;}if(!d){l=b;return;}wc[c[(c[d>>2]|0)+20>>2]&127](d);l=b;return;}function gf(a){a=a|0;var b=0;b=c[a+16>>2]|0;if((a|0)==(b|0)){wc[c[(c[b>>2]|0)+16>>2]&127](b);return;}if(!b)return;wc[c[(c[b>>2]|0)+20>>2]&127](b);return;}function hf(a){a=a|0;return;}function jf(a){a=a|0;Vz(a);return;}function kf(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11576;c[b+4>>2]=c[a+4>>2];return b|0;}function lf(a,b){a=a|0;b=b|0;c[b>>2]=11576;c[b+4>>2]=c[a+4>>2];return;}function mf(a){a=a|0;return;}function nf(a){a=a|0;Vz(a);return;}function of(a,b){a=a|0;b=b|0;wc[c[a+4>>2]&127](c[b>>2]|0);return;}function pf(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15195?a+4|0:0)|0;}function qf(a){a=a|0;return 10336;}function rf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a=l;l=l+32|0;f=a;g=Wp()|0;c[f>>2]=g;h=f+8|0;c[f+24>>2]=h;c[h>>2]=11620;c[f+12>>2]=69;if(!g){i=-4;tf(f);l=a;return i|0;}h=c[b>>2]|0;j=c[d>>2]|0;k=Dx(g,h,(c[b+4>>2]|0)-h|0,j,(c[d+4>>2]|0)-j|0,c[e>>2]|0)|0;e=(Ph(k)|0)==0;i=e?k>>>0>2147483646?-2:k:-1;tf(f);l=a;return i|0;}function sf(a){a=a|0;Xp(a)|0;return;}function tf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b;e=c[a>>2]|0;do{if(e){c[d>>2]=e;f=a+24|0;g=c[f>>2]|0;if(!g){h=va(4)|0;c[h>>2]=12636;ya(h|0,10800,50);}else{xc[c[(c[g>>2]|0)+24>>2]&31](g,d);c[a>>2]=0;i=f;break;}}else i=a+24|0;}while(0);d=c[i>>2]|0;if((a+8|0)==(d|0)){wc[c[(c[d>>2]|0)+16>>2]&127](d);l=b;return;}if(!d){l=b;return;}wc[c[(c[d>>2]|0)+20>>2]&127](d);l=b;return;}function uf(a){a=a|0;var b=0;b=c[a+16>>2]|0;if((a|0)==(b|0)){wc[c[(c[b>>2]|0)+16>>2]&127](b);return;}if(!b)return;wc[c[(c[b>>2]|0)+20>>2]&127](b);return;}function vf(a){a=a|0;return;}function wf(a){a=a|0;Vz(a);return;}function xf(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11620;c[b+4>>2]=c[a+4>>2];return b|0;}function yf(a,b){a=a|0;b=b|0;c[b>>2]=11620;c[b+4>>2]=c[a+4>>2];return;}function zf(a){a=a|0;return;}function Af(a){a=a|0;Vz(a);return;}function Bf(a,b){a=a|0;b=b|0;wc[c[a+4>>2]&127](c[b>>2]|0);return;}function Cf(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15349?a+4|0:0)|0;}function Df(a){a=a|0;return 10384;}function Ef(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[b>>2]|0;c[a>>2]=Ho(e,(c[b+4>>2]|0)-e|0,d)|0;d=a+8|0;c[a+24>>2]=d;c[d>>2]=11664;c[a+12>>2]=70;return;}function Ff(a){a=a|0;rj(a)|0;return;}function Gf(a){a=a|0;return;}function Hf(a){a=a|0;Vz(a);return;}function If(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11664;c[b+4>>2]=c[a+4>>2];return b|0;}function Jf(a,b){a=a|0;b=b|0;c[b>>2]=11664;c[b+4>>2]=c[a+4>>2];return;}function Kf(a){a=a|0;return;}function Lf(a){a=a|0;Vz(a);return;}function Mf(a,b){a=a|0;b=b|0;wc[c[a+4>>2]&127](c[b>>2]|0);return;}function Nf(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15503?a+4|0:0)|0;}function Of(a){a=a|0;return 10432;}function Pf(a,b){a=a|0;b=b|0;var d=0;d=c[b>>2]|0;c[a>>2]=Cx(d,(c[b+4>>2]|0)-d|0)|0;d=a+8|0;c[a+24>>2]=d;c[d>>2]=11708;c[a+12>>2]=71;return;}function Qf(a){a=a|0;Yp(a)|0;return;}function Rf(a){a=a|0;return;}function Sf(a){a=a|0;Vz(a);return;}function Tf(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11708;c[b+4>>2]=c[a+4>>2];return b|0;}function Uf(a,b){a=a|0;b=b|0;c[b>>2]=11708;c[b+4>>2]=c[a+4>>2];return;}function Vf(a){a=a|0;return;}function Wf(a){a=a|0;Vz(a);return;}function Xf(a,b){a=a|0;b=b|0;wc[c[a+4>>2]&127](c[b>>2]|0);return;}function Yf(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15661?a+4|0:0)|0;}function Zf(a){a=a|0;return 10480;}function _f(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=44;b=a+8|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;return;}function $f(a){a=a|0;var b=0;b=c[a+24>>2]|0;if(b|0){c[a+28>>2]=b;Vz(b);}b=c[a+12>>2]|0;if(b|0){c[a+16>>2]=b;Vz(b);}b=c[a>>2]|0;c[a>>2]=0;if(!b)return;pc[c[a+4>>2]&63](b)|0;return;}function ag(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11752;c[e+4>>2]=b;c[f>>2]=e;b=bg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function bg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+16|0;e=d;if(c[a>>2]|0){f=1;l=d;return f|0;}g=Mo()|0;if(!g){f=0;l=d;return f|0;}c[e>>2]=g;h=c[b+16>>2]|0;if(!h){b=va(4)|0;c[b>>2]=12636;ya(b|0,10800,50);}if(Ph(qc[c[(c[h>>2]|0)+24>>2]&63](h,e)|0)|0){Oo(g)|0;f=0;l=d;return f|0;}e=c[a>>2]|0;c[a>>2]=g;g=a+4|0;if(e|0)pc[c[g>>2]&63](e)|0;c[g>>2]=44;g=Po()|0;e=a+12|0;h=a+20|0;b=c[e>>2]|0;i=b;if(((c[h>>2]|0)-b|0)>>>0<g>>>0){j=a+16|0;k=(c[j>>2]|0)-b|0;m=Uz(g)|0;if((k|0)>0)mE(m|0,i|0,k|0)|0;c[e>>2]=m;c[j>>2]=m+k;c[h>>2]=m+g;if(b|0)Vz(i);}cg(a+24|0,Qo()|0);c[a+8>>2]=(c[h>>2]|0)-(c[e>>2]|0);f=1;l=d;return f|0;}function cg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=b+4|0;f=c[e>>2]|0;g=c[b>>2]|0;h=f-g|0;i=g;if(h>>>0>=d>>>0){if(h>>>0<=d>>>0)return;c[e>>2]=i+d;return;}j=d-h|0;k=b+8|0;l=c[k>>2]|0;if((l-f|0)>>>0>=j>>>0){m=j;n=f;do{a[n>>0]=0;n=(c[e>>2]|0)+1|0;c[e>>2]=n;m=m+-1|0;}while((m|0)!=0);return;}if((d|0)<0)Wz(b);m=l-g|0;l=m<<1;n=m>>>0<1073741823?l>>>0<d>>>0?d:l:2147483647;if(!n)o=0;else o=Uz(n)|0;oE(o+h|0,0,j|0)|0;if((h|0)>0)mE(o|0,i|0,h|0)|0;c[b>>2]=o;c[e>>2]=o+d;c[k>>2]=o+n;if(!g)return;Vz(i);return;}function dg(a){a=a|0;return;}function eg(a){a=a|0;Vz(a);return;}function fg(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11752;c[b+4>>2]=c[a+4>>2];return b|0;}function gg(a,b){a=a|0;b=b|0;c[b>>2]=11752;c[b+4>>2]=c[a+4>>2];return;}function hg(a){a=a|0;return;}function ig(a){a=a|0;Vz(a);return;}function jg(a,b){a=a|0;b=b|0;return Wo(c[b>>2]|0,c[a+4>>2]|0)|0;}function kg(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==15819?a+4|0:0)|0;}function lg(a){a=a|0;return 10528;}function mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11796;c[e+4>>2]=b;c[f>>2]=e;b=bg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function ng(a){a=a|0;Vz(a);return;}function og(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11796;c[b+4>>2]=c[a+4>>2];return b|0;}function pg(a,b){a=a|0;b=b|0;c[b>>2]=11796;c[b+4>>2]=c[a+4>>2];return;}function qg(a){a=a|0;return;}function rg(a){a=a|0;Vz(a);return;}function sg(a,b){a=a|0;b=b|0;return Uo(c[b>>2]|0,c[c[a+4>>2]>>2]|0)|0;}function tg(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==16003?a+4|0:0)|0;}function ug(a){a=a|0;return 10560;}function vg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!(c[b>>2]|0)){f=0;return f|0;}g=d+4|0;h=c[d>>2]|0;i=(c[g>>2]|0)-h|0;if(!i){f=1;return f|0;}j=b+12|0;k=b+20|0;l=b+16|0;m=b+8|0;n=0;o=h;h=i;a:while(1){i=c[k>>2]|0;p=c[j>>2]|0;q=c[l>>2]|0;r=p-q+(i-p)|0;s=h-n|0;t=s>>>0<r>>>0?s:r;s=o+n|0;u=s+t|0;n=t+n|0;if(!t){v=p;w=q;}else{p=q;q=i;i=s;while(1){if((p|0)==(q|0)){s=c[j>>2]|0;t=q-s|0;x=t+1|0;y=s;if((x|0)<0){z=9;break a;}A=t<<1;B=t>>>0<1073741823?A>>>0<x>>>0?x:A:2147483647;if(!B)C=0;else C=Uz(B)|0;A=C+t|0;a[A>>0]=a[i>>0]|0;if((t|0)>0)mE(C|0,y|0,t|0)|0;c[j>>2]=C;c[l>>2]=A+1;c[k>>2]=C+B;if(s|0)Vz(y);}else{a[p>>0]=a[i>>0]|0;c[l>>2]=(c[l>>2]|0)+1;}y=i+1|0;if((y|0)==(u|0))break;p=c[l>>2]|0;q=c[k>>2]|0;i=y;}v=c[j>>2]|0;w=c[l>>2]|0;}if(((r|0)==0?1:(w-v|0)>>>0>=(c[m>>2]|0)>>>0)?!(wg(b,e)|0):0){f=0;z=22;break;}o=c[d>>2]|0;h=(c[g>>2]|0)-o|0;if(h>>>0<=n>>>0){f=1;z=22;break;}}if((z|0)==9)Wz(j);else if((z|0)==22)return f|0;return 0;}function wg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=l;l=l+32|0;e=d+12|0;f=d;g=a+12|0;h=c[g>>2]|0;i=a+16|0;j=c[i>>2]|0;k=h;if((h|0)==(j|0)){m=1;l=d;return m|0;}c[e>>2]=h;h=e+4|0;n=j-k|0;c[h>>2]=n;j=e+8|0;c[j>>2]=0;do{if(n){o=a+24|0;p=a+32|0;q=f+4|0;r=a+28|0;s=f+8|0;t=a+8|0;u=b+16|0;while(1){cg(o,(c[p>>2]|0)-(c[o>>2]|0)|0);v=c[o>>2]|0;c[f>>2]=v;c[q>>2]=(c[r>>2]|0)-v;c[s>>2]=0;v=Zo(c[a>>2]|0,f,e)|0;c[t>>2]=v;if(Ph(v)|0){w=8;break;}cg(o,c[s>>2]|0);v=c[u>>2]|0;if(!v){w=6;break;}xc[c[(c[v>>2]|0)+24>>2]&31](v,o);if((c[j>>2]|0)>>>0>=(c[h>>2]|0)>>>0){w=9;break;}}if((w|0)==6){o=va(4)|0;c[o>>2]=12636;ya(o|0,10800,50);}else if((w|0)==8){x=0;break;}else if((w|0)==9){y=c[g>>2]|0;w=10;break;}}else{y=k;w=10;}}while(0);if((w|0)==10){c[i>>2]=y;x=1;}m=x;l=d;return m|0;}function xg(a,b){a=a|0;b=b|0;return wg(a,b)|0;}function yg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+16|0;e=d;if(!(c[a>>2]|0)){f=1;l=d;return f|0;}if((c[a+12>>2]|0)!=(c[a+16>>2]|0)?!(wg(a,b)|0):0)g=0;else h=4;do{if((h|0)==4){i=a+24|0;cg(i,(c[a+32>>2]|0)-(c[i>>2]|0)|0);j=c[i>>2]|0;c[e>>2]=j;c[e+4>>2]=(c[a+28>>2]|0)-j;j=e+8|0;c[j>>2]=0;if(_o(c[a>>2]|0,e)|0){f=0;l=d;return f|0;}cg(i,c[j>>2]|0);j=c[b+16>>2]|0;if(!j){k=va(4)|0;c[k>>2]=12636;ya(k|0,10800,50);}else{xc[c[(c[j>>2]|0)+24>>2]&31](j,i);g=1;break;}}}while(0);b=c[a>>2]|0;c[a>>2]=0;if(!b){f=g;l=d;return f|0;}pc[c[a+4>>2]&63](b)|0;f=g;l=d;return f|0;}function zg(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=45;b=a+8|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;return;}function Ag(a){a=a|0;var b=0;b=c[a+24>>2]|0;if(b|0){c[a+28>>2]=b;Vz(b);}b=c[a+12>>2]|0;if(b|0){c[a+16>>2]=b;Vz(b);}b=c[a>>2]|0;c[a>>2]=0;if(!b)return;pc[c[a+4>>2]&63](b)|0;return;}function Bg(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+32|0;d=b;e=d+16|0;c[d>>2]=11840;c[e>>2]=d;f=Cg(a,d)|0;a=c[e>>2]|0;if((d|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=b;return f|0;}if(!a){l=b;return f|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=b;return f|0;}function Cg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;d=l;l=l+16|0;e=d;if(c[a>>2]|0){f=1;l=d;return f|0;}g=Ex()|0;if(!g){f=0;l=d;return f|0;}c[e>>2]=g;h=c[b+16>>2]|0;if(!h){b=va(4)|0;c[b>>2]=12636;ya(b|0,10800,50);}b=qc[c[(c[h>>2]|0)+24>>2]&63](h,e)|0;if(Ph(b)|0){Gx(g)|0;f=0;l=d;return f|0;}e=c[a>>2]|0;c[a>>2]=g;g=a+4|0;if(e|0)pc[c[g>>2]&63](e)|0;c[g>>2]=45;g=Hx()|0;e=a+12|0;h=a+20|0;i=c[e>>2]|0;j=i;if(((c[h>>2]|0)-i|0)>>>0<g>>>0){k=a+16|0;m=(c[k>>2]|0)-i|0;n=Uz(g)|0;if((m|0)>0)mE(n|0,j|0,m|0)|0;c[e>>2]=n;c[k>>2]=n+m;c[h>>2]=n+g;if(i|0)Vz(j);}cg(a+24|0,Ix()|0);c[a+8>>2]=b;f=1;l=d;return f|0;}function Dg(a){a=a|0;return;}function Eg(a){a=a|0;Vz(a);return;}function Fg(a){a=a|0;a=Uz(8)|0;c[a>>2]=11840;return a|0;}function Gg(a,b){a=a|0;b=b|0;c[b>>2]=11840;return;}function Hg(a){a=a|0;return;}function Ig(a){a=a|0;Vz(a);return;}function Jg(a,b){a=a|0;b=b|0;return Mx(c[b>>2]|0)|0;}function Kg(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==16184?a+4|0:0)|0;}function Lg(a){a=a|0;return 10584;}function Mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+32|0;e=d;f=e+16|0;c[e>>2]=11884;c[e+4>>2]=b;c[f>>2]=e;b=Cg(a,e)|0;a=c[f>>2]|0;if((e|0)==(a|0)){wc[c[(c[a>>2]|0)+16>>2]&127](a);l=d;return b|0;}if(!a){l=d;return b|0;}wc[c[(c[a>>2]|0)+20>>2]&127](a);l=d;return b|0;}function Ng(a){a=a|0;Vz(a);return;}function Og(a){a=a|0;var b=0;b=Uz(8)|0;c[b>>2]=11884;c[b+4>>2]=c[a+4>>2];return b|0;}function Pg(a,b){a=a|0;b=b|0;c[b>>2]=11884;c[b+4>>2]=c[a+4>>2];return;}function Qg(a){a=a|0;return;}function Rg(a){a=a|0;Vz(a);return;}function Sg(a,b){a=a|0;b=b|0;return Nx(c[b>>2]|0,c[c[a+4>>2]>>2]|0)|0;}function Tg(a,b){a=a|0;b=b|0;return((c[b+4>>2]|0)==16372?a+4|0:0)|0;}function Ug(a){a=a|0;return 10616;}function Vg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;if(!(c[b>>2]|0)){f=0;return f|0;}g=d+4|0;h=c[d>>2]|0;i=(c[g>>2]|0)-h|0;if(!i){f=1;return f|0;}j=b+12|0;k=b+20|0;l=b+16|0;m=b+8|0;n=0;o=h;h=i;a:while(1){i=c[k>>2]|0;p=c[j>>2]|0;q=c[l>>2]|0;r=p-q+(i-p)|0;s=h-n|0;t=s>>>0<r>>>0?s:r;s=o+n|0;u=s+t|0;n=t+n|0;if(!t){v=p;w=q;}else{p=q;q=i;i=s;while(1){if((p|0)==(q|0)){s=c[j>>2]|0;t=q-s|0;x=t+1|0;y=s;if((x|0)<0){z=9;break a;}A=t<<1;B=t>>>0<1073741823?A>>>0<x>>>0?x:A:2147483647;if(!B)C=0;else C=Uz(B)|0;A=C+t|0;a[A>>0]=a[i>>0]|0;if((t|0)>0)mE(C|0,y|0,t|0)|0;c[j>>2]=C;c[l>>2]=A+1;c[k>>2]=C+B;if(s|0)Vz(y);}else{a[p>>0]=a[i>>0]|0;c[l>>2]=(c[l>>2]|0)+1;}y=i+1|0;if((y|0)==(u|0))break;p=c[l>>2]|0;q=c[k>>2]|0;i=y;}v=c[j>>2]|0;w=c[l>>2]|0;}if(((r|0)==0?1:(w-v|0)>>>0>=(c[m>>2]|0)>>>0)?!(Wg(b,e)|0):0){f=0;z=22;break;}o=c[d>>2]|0;h=(c[g>>2]|0)-o|0;if(h>>>0<=n>>>0){f=1;z=22;break;}}if((z|0)==9)Wz(j);else if((z|0)==22)return f|0;return 0;}function Wg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=l;l=l+32|0;e=d+12|0;f=d;g=a+12|0;h=c[g>>2]|0;i=a+16|0;j=c[i>>2]|0;k=h;if((h|0)==(j|0)){m=1;l=d;return m|0;}c[e>>2]=h;h=e+4|0;n=j-k|0;c[h>>2]=n;j=e+8|0;c[j>>2]=0;do{if(n){o=a+24|0;p=a+32|0;q=f+4|0;r=a+28|0;s=f+8|0;t=a+8|0;u=b+16|0;while(1){cg(o,(c[p>>2]|0)-(c[o>>2]|0)|0);v=c[o>>2]|0;c[f>>2]=v;c[q>>2]=(c[r>>2]|0)-v;c[s>>2]=0;v=Qx(c[a>>2]|0,f,e)|0;c[t>>2]=v;if(Ph(v)|0){w=8;break;}cg(o,c[s>>2]|0);v=c[u>>2]|0;if(!v){w=6;break;}xc[c[(c[v>>2]|0)+24>>2]&31](v,o);if((c[j>>2]|0)>>>0>=(c[h>>2]|0)>>>0){w=9;break;}}if((w|0)==6){o=va(4)|0;c[o>>2]=12636;ya(o|0,10800,50);}else if((w|0)==8){x=0;break;}else if((w|0)==9){y=c[g>>2]|0;w=10;break;}}else{y=k;w=10;}}while(0);if((w|0)==10){c[i>>2]=y;x=1;}m=x;l=d;return m|0;}function Xg(a,b){a=a|0;b=b|0;return Wg(a,b)|0;}function Yg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a>>2]|0;if(!d){e=1;return e|0;}if((c[a+12>>2]|0)!=(c[a+16>>2]|0)){f=Wg(a,b)|0;b=c[a>>2]|0;c[a>>2]=0;if(!b){e=f;return e|0;}else{g=f;h=b;}}else{c[a>>2]=0;g=1;h=d;}pc[c[a+4>>2]&63](h)|0;e=g;return e|0;}function Zg(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=_g(c[d>>2]|0)|0;l=b;return a|0;}function _g(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function $g(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=_g(c[d>>2]|0)|0;l=b;return a|0;}function ah(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;h=l;l=l+80|0;i=h+72|0;j=h+68|0;k=h+64|0;m=h+60|0;n=h+56|0;o=h+52|0;p=h+48|0;q=h+44|0;r=h+40|0;s=h+36|0;t=h+32|0;u=h+28|0;v=h+24|0;w=h+20|0;x=h+16|0;y=h+12|0;z=h+8|0;A=h+4|0;B=h;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=c[n>>2];c[q>>2]=(c[p>>2]|0)+(c[o>>2]|0);c[r>>2]=c[p>>2];c[x>>2]=0;c[y>>2]=0;if((c[o>>2]|0)>>>0<4){c[i>>2]=-72;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=bh(c[r>>2]|0)|0;c[s>>2]=(c[v>>2]&15)+5;if((c[s>>2]|0)>15){c[i>>2]=-44;C=c[i>>2]|0;l=h;return C|0;}c[v>>2]=(c[v>>2]|0)>>>4;c[w>>2]=4;c[c[m>>2]>>2]=c[s>>2];c[t>>2]=(1<<c[s>>2])+1;c[u>>2]=1<<c[s>>2];c[s>>2]=(c[s>>2]|0)+1;a:while(1){if(!(((c[t>>2]|0)>1?(c[x>>2]|0)>>>0<=(c[c[k>>2]>>2]|0)>>>0:0)|0))break;do{if(c[y>>2]|0){c[z>>2]=c[x>>2];while(1){if((c[v>>2]&65535|0)!=65535)break;c[z>>2]=(c[z>>2]|0)+24;if((c[r>>2]|0)>>>0<((c[q>>2]|0)+-5|0)>>>0){c[r>>2]=(c[r>>2]|0)+2;m=bh(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]|0);}else{c[v>>2]=(c[v>>2]|0)>>>16;c[w>>2]=(c[w>>2]|0)+16;}}while(1){if((c[v>>2]&3|0)!=3)break;c[z>>2]=(c[z>>2]|0)+3;c[v>>2]=(c[v>>2]|0)>>>2;c[w>>2]=(c[w>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+(c[v>>2]&3);c[w>>2]=(c[w>>2]|0)+2;if((c[z>>2]|0)>>>0>(c[c[k>>2]>>2]|0)>>>0){D=18;break a;}while(1){if((c[x>>2]|0)>>>0>=(c[z>>2]|0)>>>0)break;m=c[j>>2]|0;o=c[x>>2]|0;c[x>>2]=o+1;b[m+(o<<1)>>1]=0;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[v>>2]=(c[v>>2]|0)>>>2;break;}c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;o=bh(c[r>>2]|0)|0;c[v>>2]=o>>>(c[w>>2]|0);}}while(0);c[A>>2]=(c[u>>2]<<1)-1-(c[t>>2]|0);o=c[v>>2]|0;m=c[u>>2]|0;if((c[v>>2]&(c[u>>2]|0)-1)>>>0<(c[A>>2]|0)>>>0){c[B>>2]=o&m-1;c[w>>2]=(c[w>>2]|0)+((c[s>>2]|0)-1);}else{c[B>>2]=o&(m<<1)-1;if((c[B>>2]|0)>=(c[u>>2]|0))c[B>>2]=(c[B>>2]|0)-(c[A>>2]|0);c[w>>2]=(c[w>>2]|0)+(c[s>>2]|0);}c[B>>2]=(c[B>>2]|0)+-1;m=c[B>>2]|0;c[t>>2]=(c[t>>2]|0)-((c[B>>2]|0)<0?0-m|0:m);m=c[B>>2]&65535;o=c[j>>2]|0;n=c[x>>2]|0;c[x>>2]=n+1;b[o+(n<<1)>>1]=m;c[y>>2]=((c[B>>2]|0)!=0^1)&1;while(1){if((c[t>>2]|0)>=(c[u>>2]|0))break;c[s>>2]=(c[s>>2]|0)+-1;c[u>>2]=c[u>>2]>>1;}if((c[r>>2]|0)>>>0>((c[q>>2]|0)+-7|0)>>>0?((c[r>>2]|0)+(c[w>>2]>>3)|0)>>>0>((c[q>>2]|0)+-4|0)>>>0:0){c[w>>2]=(c[w>>2]|0)-((c[q>>2]|0)+-4-(c[r>>2]|0)<<3);c[r>>2]=(c[q>>2]|0)+-4;}else{c[r>>2]=(c[r>>2]|0)+(c[w>>2]>>3);c[w>>2]=c[w>>2]&7;}m=bh(c[r>>2]|0)|0;c[v>>2]=m>>>(c[w>>2]&31);}if((D|0)==18){c[i>>2]=-48;C=c[i>>2]|0;l=h;return C|0;}if((c[t>>2]|0)!=1){c[i>>2]=-20;C=c[i>>2]|0;l=h;return C|0;}if((c[w>>2]|0)>32){c[i>>2]=-20;C=c[i>>2]|0;l=h;return C|0;}else{c[c[k>>2]>>2]=(c[x>>2]|0)-1;c[r>>2]=(c[r>>2]|0)+((c[w>>2]|0)+7>>3);c[i>>2]=(c[r>>2]|0)-(c[p>>2]|0);C=c[i>>2]|0;l=h;return C|0;}return 0;}function bh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(ch()|0)!=0;f=dh(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=eh(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function ch(){return d[11936]|0|0;}function dh(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function eh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function fh(b,e,f,g,h,i,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;k=l;l=l+336|0;m=k+332|0;n=k+328|0;o=k+324|0;p=k+320|0;q=k+316|0;r=k+312|0;s=k+308|0;t=k+304|0;u=k+300|0;v=k+296|0;w=k+292|0;x=k+288|0;y=k+284|0;z=k;A=k+280|0;B=k+276|0;C=k+272|0;D=k+268|0;E=k+264|0;F=k+260|0;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[v>>2]=c[s>>2];if(!(c[t>>2]|0)){c[m>>2]=-72;G=c[m>>2]|0;l=k;return G|0;}c[w>>2]=d[c[v>>2]>>0];s=c[w>>2]|0;a:do{if((c[w>>2]|0)>>>0<128){if((s+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;G=c[m>>2]|0;l=k;return G|0;}c[x>>2]=gh(c[n>>2]|0,(c[o>>2]|0)-1|0,(c[v>>2]|0)+1|0,c[w>>2]|0,z,6)|0;if(Zg(c[x>>2]|0)|0){c[m>>2]=c[x>>2];G=c[m>>2]|0;l=k;return G|0;}}else{c[x>>2]=s-127;c[w>>2]=(((c[x>>2]|0)+1|0)>>>0)/2|0;if(((c[w>>2]|0)+1|0)>>>0>(c[t>>2]|0)>>>0){c[m>>2]=-72;G=c[m>>2]|0;l=k;return G|0;}if((c[x>>2]|0)>>>0>=(c[o>>2]|0)>>>0){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}c[v>>2]=(c[v>>2]|0)+1;c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break a;a[(c[n>>2]|0)+(c[y>>2]|0)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)>>4;a[(c[n>>2]|0)+((c[y>>2]|0)+1)>>0]=(d[(c[v>>2]|0)+(((c[y>>2]|0)>>>0)/2|0)>>0]|0)&15;c[y>>2]=(c[y>>2]|0)+2;}}}while(0);y=c[p>>2]|0;v=y+52|0;do{c[y>>2]=0;y=y+4|0;}while((y|0)<(v|0));c[u>>2]=0;c[A>>2]=0;while(1){if((c[A>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;if((d[(c[n>>2]|0)+(c[A>>2]|0)>>0]|0|0)>=12){H=18;break;}y=(c[p>>2]|0)+((d[(c[n>>2]|0)+(c[A>>2]|0)>>0]|0)<<2)|0;c[y>>2]=(c[y>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+(1<<(d[(c[n>>2]|0)+(c[A>>2]|0)>>0]|0)>>1);c[A>>2]=(c[A>>2]|0)+1;}if((H|0)==18){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}if(!(c[u>>2]|0)){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}c[B>>2]=(hh(c[u>>2]|0)|0)+1;if((c[B>>2]|0)>>>0>12){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}c[c[r>>2]>>2]=c[B>>2];c[C>>2]=1<<c[B>>2];c[D>>2]=(c[C>>2]|0)-(c[u>>2]|0);c[E>>2]=1<<(hh(c[D>>2]|0)|0);c[F>>2]=(hh(c[D>>2]|0)|0)+1;if((c[E>>2]|0)!=(c[D>>2]|0)){c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}a[(c[n>>2]|0)+(c[x>>2]|0)>>0]=c[F>>2];n=(c[p>>2]|0)+(c[F>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+1;if((c[(c[p>>2]|0)+4>>2]|0)>>>0>=2?(c[(c[p>>2]|0)+4>>2]&1|0)==0:0){c[c[q>>2]>>2]=(c[x>>2]|0)+1;c[m>>2]=(c[w>>2]|0)+1;G=c[m>>2]|0;l=k;return G|0;}c[m>>2]=-20;G=c[m>>2]|0;l=k;return G|0;}function gh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+576|0;i=h+560|0;j=h+556|0;k=h+552|0;m=h+548|0;n=h+544|0;o=h+540|0;p=h+536|0;q=h+532|0;r=h+528|0;s=h;t=h+524|0;u=h+520|0;v=h+516|0;w=h+512|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[m>>2];c[r>>2]=c[q>>2];c[u>>2]=255;c[v>>2]=ah(s,u,t,c[q>>2]|0,c[n>>2]|0)|0;if(ih(c[v>>2]|0)|0){c[i>>2]=c[v>>2];x=c[i>>2]|0;l=h;return x|0;}if((c[t>>2]|0)>>>0>(c[p>>2]|0)>>>0){c[i>>2]=-44;x=c[i>>2]|0;l=h;return x|0;}c[r>>2]=(c[r>>2]|0)+(c[v>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[v>>2]|0);c[w>>2]=jh(c[o>>2]|0,s,c[u>>2]|0,c[t>>2]|0)|0;if(ih(c[w>>2]|0)|0){c[i>>2]=c[w>>2];x=c[i>>2]|0;l=h;return x|0;}else{c[i>>2]=kh(c[j>>2]|0,c[k>>2]|0,c[r>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;x=c[i>>2]|0;l=h;return x|0;}return 0;}function hh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function ih(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function jh(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;i=l;l=l+608|0;j=i+580|0;k=i+576|0;m=i+572|0;n=i+568|0;o=i+564|0;p=i+560|0;q=i+556|0;r=i;s=i+552|0;t=i+548|0;u=i+544|0;v=i+588|0;w=i+584|0;x=i+540|0;y=i+536|0;z=i+532|0;A=i+528|0;B=i+524|0;C=i+520|0;D=i+516|0;E=i+592|0;F=i+512|0;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=(c[k>>2]|0)+4;c[q>>2]=c[p>>2];c[s>>2]=(c[n>>2]|0)+1;c[t>>2]=1<<c[o>>2];c[u>>2]=(c[t>>2]|0)-1;if((c[n>>2]|0)>>>0>255){c[j>>2]=-46;G=c[j>>2]|0;l=i;return G|0;}if((c[o>>2]|0)>>>0>12){c[j>>2]=-44;G=c[j>>2]|0;l=i;return G|0;}b[v>>1]=c[o>>2];b[v+2>>1]=1;b[w>>1]=1<<(c[o>>2]|0)-1;c[x>>2]=0;while(1){if((c[x>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;if((b[(c[m>>2]|0)+(c[x>>2]<<1)>>1]|0)==-1){n=c[x>>2]&255;p=c[q>>2]|0;h=c[u>>2]|0;c[u>>2]=h+-1;a[p+(h<<2)+2>>0]=n;b[r+(c[x>>2]<<1)>>1]=1;}else{if((b[(c[m>>2]|0)+(c[x>>2]<<1)>>1]|0)>=(b[w>>1]|0))b[v+2>>1]=0;b[r+(c[x>>2]<<1)>>1]=b[(c[m>>2]|0)+(c[x>>2]<<1)>>1]|0;}c[x>>2]=(c[x>>2]|0)+1;}x=c[k>>2]|0;b[x>>1]=b[v>>1]|0;b[x+2>>1]=b[v+2>>1]|0;c[y>>2]=(c[t>>2]|0)-1;c[z>>2]=((c[t>>2]|0)>>>1)+((c[t>>2]|0)>>>3)+3;c[B>>2]=0;c[A>>2]=0;while(1){if((c[A>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[C>>2]=0;while(1){H=c[A>>2]|0;if((c[C>>2]|0)>=(b[(c[m>>2]|0)+(c[A>>2]<<1)>>1]|0))break;a[(c[q>>2]|0)+(c[B>>2]<<2)+2>>0]=H;c[B>>2]=(c[B>>2]|0)+(c[z>>2]|0)&c[y>>2];while(1){if((c[B>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;c[B>>2]=(c[B>>2]|0)+(c[z>>2]|0)&c[y>>2];}c[C>>2]=(c[C>>2]|0)+1;}c[A>>2]=H+1;}if(c[B>>2]|0){c[j>>2]=-1;G=c[j>>2]|0;l=i;return G|0;}c[D>>2]=0;while(1){if((c[D>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;a[E>>0]=a[(c[q>>2]|0)+(c[D>>2]<<2)+2>>0]|0;B=r+(d[E>>0]<<1)|0;H=b[B>>1]|0;b[B>>1]=H+1<<16>>16;c[F>>2]=H&65535;H=c[o>>2]|0;B=H-(Eh(c[F>>2]|0)|0)&255;a[(c[q>>2]|0)+(c[D>>2]<<2)+3>>0]=B;b[(c[q>>2]|0)+(c[D>>2]<<2)>>1]=(c[F>>2]<<d[(c[q>>2]|0)+(c[D>>2]<<2)+3>>0])-(c[t>>2]|0);c[D>>2]=(c[D>>2]|0)+1;}c[j>>2]=0;G=c[j>>2]|0;l=i;return G|0;}function kh(b,d,f,g,h){b=b|0;d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;i=l;l=l+208|0;j=i+204|0;k=i+200|0;m=i+196|0;n=i+192|0;o=i+188|0;p=i+184|0;q=i+180|0;r=i+176|0;s=i+172|0;t=i+168|0;u=i+164|0;v=i+144|0;w=i+136|0;x=i+128|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+56|0;L=i+48|0;M=i+40|0;N=i+36|0;O=i+32|0;P=i+28|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[P>>2]=b;c[Q>>2]=d;c[R>>2]=f;c[S>>2]=g;c[T>>2]=h;c[U>>2]=c[T>>2];c[V>>2]=c[U>>2];c[W>>2]=e[(c[V>>2]|0)+2>>1];V=c[P>>2]|0;P=c[Q>>2]|0;Q=c[R>>2]|0;R=c[S>>2]|0;S=c[T>>2]|0;if(c[W>>2]|0){c[A>>2]=V;c[B>>2]=P;c[C>>2]=Q;c[D>>2]=R;c[E>>2]=S;c[F>>2]=1;c[G>>2]=c[A>>2];c[H>>2]=c[G>>2];c[I>>2]=(c[H>>2]|0)+(c[B>>2]|0);c[J>>2]=(c[I>>2]|0)+-3;c[N>>2]=lh(K,c[C>>2]|0,c[D>>2]|0)|0;do{if(ih(c[N>>2]|0)|0)c[z>>2]=c[N>>2];else{mh(L,K,c[E>>2]|0);mh(M,K,c[E>>2]|0);while(1){D=(nh(K)|0)==0&1;if(!(D&(c[H>>2]|0)>>>0<(c[J>>2]|0)>>>0))break;if(c[F>>2]|0)X=(oh(L,K)|0)&255;else X=(ph(L,K)|0)&255;a[c[H>>2]>>0]=X;if(c[F>>2]|0)Y=(oh(M,K)|0)&255;else Y=(ph(M,K)|0)&255;a[(c[H>>2]|0)+1>>0]=Y;if((nh(K)|0)>>>0>0){Z=13;break;}if(c[F>>2]|0)_=(oh(L,K)|0)&255;else _=(ph(L,K)|0)&255;a[(c[H>>2]|0)+2>>0]=_;if(c[F>>2]|0)$=(oh(M,K)|0)&255;else $=(ph(M,K)|0)&255;a[(c[H>>2]|0)+3>>0]=$;c[H>>2]=(c[H>>2]|0)+4;}if((Z|0)==13)c[H>>2]=(c[H>>2]|0)+2;while(1){if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=23;break;}if(c[F>>2]|0)aa=(oh(L,K)|0)&255;else aa=(ph(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=aa;if((nh(K)|0)==3){Z=28;break;}if((c[H>>2]|0)>>>0>((c[I>>2]|0)+-2|0)>>>0){Z=33;break;}if(c[F>>2]|0)ba=(oh(M,K)|0)&255;else ba=(ph(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ba;if((nh(K)|0)==3){Z=38;break;}}if((Z|0)==23){c[z>>2]=-70;break;}else if((Z|0)==28){if(c[F>>2]|0)ca=(oh(M,K)|0)&255;else ca=(ph(M,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=ca;}else if((Z|0)==33){c[z>>2]=-70;break;}else if((Z|0)==38){if(c[F>>2]|0)da=(oh(L,K)|0)&255;else da=(ph(L,K)|0)&255;D=c[H>>2]|0;c[H>>2]=D+1;a[D>>0]=da;}c[z>>2]=(c[H>>2]|0)-(c[G>>2]|0);}}while(0);c[O>>2]=c[z>>2];ea=c[O>>2]|0;l=i;return ea|0;}else{c[k>>2]=V;c[m>>2]=P;c[n>>2]=Q;c[o>>2]=R;c[p>>2]=S;c[q>>2]=0;c[r>>2]=c[k>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[s>>2]|0)+(c[m>>2]|0);c[u>>2]=(c[t>>2]|0)+-3;c[y>>2]=lh(v,c[n>>2]|0,c[o>>2]|0)|0;do{if(ih(c[y>>2]|0)|0)c[j>>2]=c[y>>2];else{mh(w,v,c[p>>2]|0);mh(x,v,c[p>>2]|0);while(1){o=(nh(v)|0)==0&1;if(!(o&(c[s>>2]|0)>>>0<(c[u>>2]|0)>>>0))break;if(c[q>>2]|0)fa=(oh(w,v)|0)&255;else fa=(ph(w,v)|0)&255;a[c[s>>2]>>0]=fa;if(c[q>>2]|0)ga=(oh(x,v)|0)&255;else ga=(ph(x,v)|0)&255;a[(c[s>>2]|0)+1>>0]=ga;if((nh(v)|0)>>>0>0){Z=56;break;}if(c[q>>2]|0)ha=(oh(w,v)|0)&255;else ha=(ph(w,v)|0)&255;a[(c[s>>2]|0)+2>>0]=ha;if(c[q>>2]|0)ia=(oh(x,v)|0)&255;else ia=(ph(x,v)|0)&255;a[(c[s>>2]|0)+3>>0]=ia;c[s>>2]=(c[s>>2]|0)+4;}if((Z|0)==56)c[s>>2]=(c[s>>2]|0)+2;while(1){if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=66;break;}if(c[q>>2]|0)ja=(oh(w,v)|0)&255;else ja=(ph(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ja;if((nh(v)|0)==3){Z=71;break;}if((c[s>>2]|0)>>>0>((c[t>>2]|0)+-2|0)>>>0){Z=76;break;}if(c[q>>2]|0)ka=(oh(x,v)|0)&255;else ka=(ph(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ka;if((nh(v)|0)==3){Z=81;break;}}if((Z|0)==66){c[j>>2]=-70;break;}else if((Z|0)==71){if(c[q>>2]|0)la=(oh(x,v)|0)&255;else la=(ph(x,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=la;}else if((Z|0)==76){c[j>>2]=-70;break;}else if((Z|0)==81){if(c[q>>2]|0)ma=(oh(w,v)|0)&255;else ma=(ph(w,v)|0)&255;o=c[s>>2]|0;c[s>>2]=o+1;a[o>>0]=ma;}c[j>>2]=(c[s>>2]|0)-(c[r>>2]|0);}}while(0);c[O>>2]=c[j>>2];ea=c[O>>2]|0;l=i;return ea|0;}return 0;}function lh(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+12|0;i=g+8|0;j=g+4|0;k=g;m=g+17|0;n=g+16|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;if((c[k>>2]|0)>>>0<1){f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[h>>2]=-72;o=c[h>>2]|0;l=g;return o|0;}c[(c[i>>2]|0)+12>>2]=c[j>>2];c[(c[i>>2]|0)+16>>2]=(c[(c[i>>2]|0)+12>>2]|0)+4;do{if((c[k>>2]|0)>>>0>=4){c[(c[i>>2]|0)+8>>2]=(c[j>>2]|0)+(c[k>>2]|0)+-4;f=vh(c[(c[i>>2]|0)+8>>2]|0)|0;c[c[i>>2]>>2]=f;a[m>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[m>>0]|0|0)p=8-(Eh(d[m>>0]|0)|0)|0;else p=0;c[(c[i>>2]|0)+4>>2]=p;if(!(d[m>>0]|0)){c[h>>2]=-1;o=c[h>>2]|0;l=g;return o|0;}}else{c[(c[i>>2]|0)+8>>2]=c[(c[i>>2]|0)+12>>2];c[c[i>>2]>>2]=d[c[(c[i>>2]|0)+12>>2]>>0];switch(c[k>>2]|0){case 7:{f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+6>>0]|0)<<16);q=10;break;}case 6:{q=10;break;}case 5:{q=11;break;}case 4:{q=12;break;}case 3:{q=13;break;}case 2:{q=14;break;}default:{}}if((q|0)==10){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+5>>0]|0)<<8);q=11;}if((q|0)==11){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+4>>0]|0)<<0);q=12;}if((q|0)==12){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+3>>0]|0)<<24);q=13;}if((q|0)==13){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+2>>0]|0)<<16);q=14;}if((q|0)==14){f=c[i>>2]|0;c[f>>2]=(c[f>>2]|0)+((d[(c[j>>2]|0)+1>>0]|0)<<8);}a[n>>0]=a[(c[j>>2]|0)+((c[k>>2]|0)-1)>>0]|0;if(d[n>>0]|0|0)r=8-(Eh(d[n>>0]|0)|0)|0;else r=0;c[(c[i>>2]|0)+4>>2]=r;if(d[n>>0]|0|0){f=(c[i>>2]|0)+4|0;c[f>>2]=(c[f>>2]|0)+(4-(c[k>>2]|0)<<3);break;}c[h>>2]=-20;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[h>>2]=c[k>>2];o=c[h>>2]|0;l=g;return o|0;}function mh(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=c[i>>2];c[k>>2]=c[j>>2];j=qh(c[h>>2]|0,e[c[k>>2]>>1]|0)|0;c[c[g>>2]>>2]=j;nh(c[h>>2]|0)|0;c[(c[g>>2]|0)+4>>2]=(c[i>>2]|0)+4;l=f;return;}function nh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[e>>2]=a;if((c[(c[e>>2]|0)+4>>2]|0)>>>0>32){c[d>>2]=3;h=c[d>>2]|0;l=b;return h|0;}a=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){i=(c[e>>2]|0)+8|0;c[i>>2]=(c[i>>2]|0)+(0-((c[a+4>>2]|0)>>>3));i=(c[e>>2]|0)+4|0;c[i>>2]=c[i>>2]&7;i=vh(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=i;c[d>>2]=0;h=c[d>>2]|0;l=b;return h|0;}i=c[(c[e>>2]|0)+4>>2]|0;if((c[a+8>>2]|0)!=(c[(c[e>>2]|0)+12>>2]|0)){c[f>>2]=i>>>3;c[g>>2]=0;if(((c[(c[e>>2]|0)+8>>2]|0)+(0-(c[f>>2]|0))|0)>>>0<(c[(c[e>>2]|0)+12>>2]|0)>>>0){c[f>>2]=(c[(c[e>>2]|0)+8>>2]|0)-(c[(c[e>>2]|0)+12>>2]|0);c[g>>2]=1;}a=(c[e>>2]|0)+8|0;c[a>>2]=(c[a>>2]|0)+(0-(c[f>>2]|0));a=(c[e>>2]|0)+4|0;c[a>>2]=(c[a>>2]|0)-(c[f>>2]<<3);f=vh(c[(c[e>>2]|0)+8>>2]|0)|0;c[c[e>>2]>>2]=f;c[d>>2]=c[g>>2];h=c[d>>2]|0;l=b;return h|0;}if(i>>>0<32){c[d>>2]=1;h=c[d>>2]|0;l=b;return h|0;}else{c[d>>2]=2;h=c[d>>2]|0;l=b;return h|0;}return 0;}function oh(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=th(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function ph(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+12|0;j=h+8|0;k=h+16|0;m=h+4|0;n=h+20|0;o=h;c[i>>2]=f;c[j>>2]=g;g=(c[(c[i>>2]|0)+4>>2]|0)+(c[c[i>>2]>>2]<<2)|0;b[k>>1]=b[g>>1]|0;b[k+2>>1]=b[g+2>>1]|0;c[m>>2]=d[k+3>>0];a[n>>0]=a[k+2>>0]|0;c[o>>2]=qh(c[j>>2]|0,c[m>>2]|0)|0;c[c[i>>2]>>2]=(e[k>>1]|0)+(c[o>>2]|0);l=h;return a[n>>0]|0;}function qh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=rh(c[e>>2]|0,c[f>>2]|0)|0;sh(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function rh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>1>>>(31-(c[f>>2]|0)&31)|0;}function sh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(c[e>>2]|0)+4|0;c[b>>2]=(c[b>>2]|0)+(c[f>>2]|0);l=d;return;}function th(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=uh(c[e>>2]|0,c[f>>2]|0)|0;sh(c[e>>2]|0,c[f>>2]|0);l=d;return c[g>>2]|0;}function uh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;c[e>>2]=a;c[f>>2]=b;c[d>>2]=31;l=d;return c[c[e>>2]>>2]<<(c[(c[e>>2]|0)+4>>2]&31)>>>(32-(c[f>>2]|0)&31)|0;}function vh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(wh()|0)!=0;f=c[e>>2]|0;if(a){c[d>>2]=xh(f)|0;g=c[d>>2]|0;l=b;return g|0;}else{a=yh(f)|0;c[d>>2]=a;g=c[d>>2]|0;l=b;return g|0;}return 0;}function wh(){return 1;}function xh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(zh()|0)!=0;f=Ch(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Dh(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function yh(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(zh()|0)!=0;f=Ah(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=Bh(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function zh(){return d[11936]|0|0;}function Ah(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function Bh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Ch(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Dh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Eh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Fh(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;l=d;return c[f>>2]|0;}function Gh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Hh(b){b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+8|0;f=d;c[e>>2]=b;b=c[e>>2]|0;a[f>>0]=a[b>>0]|0;a[f+1>>0]=a[b+1>>0]|0;a[f+2>>0]=a[b+2>>0]|0;a[f+3>>0]=a[b+3>>0]|0;a[f+4>>0]=a[b+4>>0]|0;a[f+5>>0]=a[b+5>>0]|0;a[f+6>>0]=a[b+6>>0]|0;a[f+7>>0]=a[b+7>>0]|0;b=f;y=c[b+4>>2]|0;l=d;return c[b>>2]|0;}function Ih(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Jh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;g=f+8|0;h=f;i=g;c[i>>2]=a;c[i+4>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;h=cE(c[e>>2]|0,c[e+4>>2]|0,668265295,-1028477379)|0;e=g;b=dE(c[e>>2]|0,c[e+4>>2]|0,h|0,y|0)|0;h=g;c[h>>2]=b;c[h+4>>2]=y;h=g;b=jE(c[h>>2]|0,c[h+4>>2]|0,31)|0;h=y;e=g;d=iE(c[e>>2]|0,c[e+4>>2]|0,33)|0;e=g;c[e>>2]=b|d;c[e+4>>2]=h|y;h=g;e=cE(c[h>>2]|0,c[h+4>>2]|0,-2048144761,-1640531535)|0;h=g;c[h>>2]=e;c[h+4>>2]=y;h=g;y=c[h+4>>2]|0;l=f;return c[h>>2]|0;}function Kh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=l;l=l+16|0;g=f+8|0;h=f;i=g;c[i>>2]=a;c[i+4>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;b=Jh(0,0,c[e>>2]|0,c[e+4>>2]|0)|0;e=h;c[e>>2]=b;c[e+4>>2]=y;e=h;h=g;b=c[h+4>>2]^c[e+4>>2];d=g;c[d>>2]=c[h>>2]^c[e>>2];c[d+4>>2]=b;b=g;d=cE(c[b>>2]|0,c[b+4>>2]|0,-2048144761,-1640531535)|0;b=dE(d|0,y|0,-1028477341,-2048144777)|0;d=g;c[d>>2]=b;c[d+4>>2]=y;d=g;y=c[d+4>>2]|0;l=f;return c[d>>2]|0;}function Lh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+112|0;f=e+96|0;g=e+88|0;h=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=h;a=d+80|0;do{c[d>>2]=0;d=d+4|0;}while((d|0)<(a|0));b=g;i=dE(c[b>>2]|0,c[b+4>>2]|0,-2048144761,-1640531535)|0;b=dE(i|0,y|0,668265295,-1028477379)|0;i=h+8|0;c[i>>2]=b;c[i+4>>2]=y;i=g;b=dE(c[i>>2]|0,c[i+4>>2]|0,668265295,-1028477379)|0;i=h+16|0;c[i>>2]=b;c[i+4>>2]=y;i=g;b=dE(c[i>>2]|0,c[i+4>>2]|0,0,0)|0;i=h+24|0;c[i>>2]=b;c[i+4>>2]=y;i=g;g=eE(c[i>>2]|0,c[i+4>>2]|0,-2048144761,-1640531535)|0;i=h+32|0;c[i>>2]=g;c[i+4>>2]=y;d=c[f>>2]|0;f=h;a=d+88|0;do{c[d>>2]=c[f>>2];d=d+4|0;f=f+4|0;}while((d|0)<(a|0));l=e;return 0;}function Mh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;mE(d|0,c[g>>2]|0,c[h>>2]|0)|0;l=e;return d|0;}function Nh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0;f=l;l=l+608|0;g=f+184|0;h=f+592|0;i=f+588|0;j=f+584|0;k=f+580|0;m=f+576|0;n=f+176|0;o=f+572|0;p=f+568|0;q=f+564|0;r=f+560|0;s=f+556|0;t=f+168|0;u=f+552|0;v=f+548|0;w=f+544|0;x=f+540|0;z=f+536|0;A=f+160|0;B=f+532|0;C=f+528|0;D=f+524|0;E=f+520|0;F=f+516|0;G=f+152|0;H=f+512|0;I=f+508|0;J=f+504|0;K=f+500|0;L=f+496|0;M=f+144|0;N=f+492|0;O=f+488|0;P=f+484|0;Q=f+480|0;R=f+476|0;S=f+136|0;T=f+472|0;U=f+468|0;V=f+464|0;W=f+460|0;X=f+456|0;Y=f+128|0;Z=f+452|0;_=f+448|0;$=f+444|0;aa=f+440|0;ba=f+436|0;ca=f+432|0;da=f+428|0;ea=f+424|0;fa=f+420|0;ga=f+416|0;ha=f+412|0;ia=f+408|0;ja=f+404|0;ka=f+120|0;la=f+112|0;ma=f+104|0;na=f+96|0;oa=f+88|0;pa=f+400|0;qa=f+396|0;ra=f+392|0;sa=f+388|0;ta=f+384|0;ua=f+80|0;va=f+380|0;wa=f+376|0;xa=f+372|0;ya=f+368|0;za=f+364|0;Aa=f+72|0;Ba=f+360|0;Ca=f+356|0;Da=f+352|0;Ea=f+348|0;Fa=f+344|0;Ga=f+64|0;Ha=f+340|0;Ia=f+336|0;Ja=f+332|0;Ka=f+328|0;La=f+324|0;Ma=f+56|0;Na=f+320|0;Oa=f+316|0;Pa=f+312|0;Qa=f+308|0;Ra=f+304|0;Sa=f+48|0;Ta=f+300|0;Ua=f+296|0;Va=f+292|0;Wa=f+288|0;Xa=f+284|0;Ya=f+40|0;Za=f+280|0;_a=f+276|0;$a=f+272|0;ab=f+268|0;bb=f+264|0;cb=f+32|0;db=f+260|0;eb=f+256|0;fb=f+252|0;gb=f+248|0;hb=f+244|0;ib=f+240|0;jb=f+236|0;kb=f+232|0;lb=f+228|0;mb=f+224|0;nb=f+220|0;ob=f+216|0;pb=f+212|0;qb=f+24|0;rb=f+16|0;sb=f+8|0;tb=f;ub=f+208|0;vb=f+204|0;wb=f+200|0;xb=f+196|0;yb=f+192|0;c[vb>>2]=b;c[wb>>2]=d;c[xb>>2]=e;c[yb>>2]=a[11920];e=c[vb>>2]|0;vb=c[wb>>2]|0;wb=c[xb>>2]|0;if((c[yb>>2]|0)==1){c[jb>>2]=e;c[kb>>2]=vb;c[lb>>2]=wb;c[mb>>2]=1;c[nb>>2]=c[kb>>2];c[ob>>2]=(c[nb>>2]|0)+(c[lb>>2]|0);yb=c[jb>>2]|0;xb=yb;d=dE(c[xb>>2]|0,c[xb+4>>2]|0,c[lb>>2]|0,0)|0;xb=yb;c[xb>>2]=d;c[xb+4>>2]=y;xb=c[jb>>2]|0;if(((c[(c[jb>>2]|0)+72>>2]|0)+(c[lb>>2]|0)|0)>>>0<32){Mh(xb+40+(c[(c[jb>>2]|0)+72>>2]|0)|0,c[kb>>2]|0,c[lb>>2]|0)|0;d=(c[jb>>2]|0)+72|0;c[d>>2]=(c[d>>2]|0)+(c[lb>>2]|0);c[ib>>2]=0;}else{if(c[xb+72>>2]|0){Mh((c[jb>>2]|0)+40+(c[(c[jb>>2]|0)+72>>2]|0)|0,c[kb>>2]|0,32-(c[(c[jb>>2]|0)+72>>2]|0)|0)|0;kb=(c[jb>>2]|0)+8|0;xb=c[kb>>2]|0;lb=c[kb+4>>2]|0;kb=c[mb>>2]|0;c[gb>>2]=(c[jb>>2]|0)+40;c[hb>>2]=kb;kb=c[hb>>2]|0;c[db>>2]=c[gb>>2];c[eb>>2]=kb;c[fb>>2]=1;kb=(c[eb>>2]|0)==1;eb=c[db>>2]|0;if((c[fb>>2]|0)==1){fb=Hh(eb)|0;db=y;if(kb){zb=fb;Ab=db;}else{gb=Ih(fb,db)|0;zb=gb;Ab=y;}gb=cb;c[gb>>2]=zb;c[gb+4>>2]=Ab;}else{Ab=eb;eb=c[Ab>>2]|0;gb=c[Ab+4>>2]|0;if(kb){Bb=eb;Cb=gb;}else{kb=Ih(eb,gb)|0;Bb=kb;Cb=y;}kb=cb;c[kb>>2]=Bb;c[kb+4>>2]=Cb;}Cb=cb;cb=Jh(xb,lb,c[Cb>>2]|0,c[Cb+4>>2]|0)|0;Cb=(c[jb>>2]|0)+8|0;c[Cb>>2]=cb;c[Cb+4>>2]=y;Cb=(c[jb>>2]|0)+16|0;cb=c[Cb>>2]|0;lb=c[Cb+4>>2]|0;Cb=c[mb>>2]|0;c[ab>>2]=(c[jb>>2]|0)+40+8;c[bb>>2]=Cb;Cb=c[bb>>2]|0;c[Za>>2]=c[ab>>2];c[_a>>2]=Cb;c[$a>>2]=1;Cb=(c[_a>>2]|0)==1;_a=c[Za>>2]|0;if((c[$a>>2]|0)==1){$a=Hh(_a)|0;Za=y;if(Cb){Db=$a;Eb=Za;}else{ab=Ih($a,Za)|0;Db=ab;Eb=y;}ab=Ya;c[ab>>2]=Db;c[ab+4>>2]=Eb;}else{Eb=_a;_a=c[Eb>>2]|0;ab=c[Eb+4>>2]|0;if(Cb){Fb=_a;Gb=ab;}else{Cb=Ih(_a,ab)|0;Fb=Cb;Gb=y;}Cb=Ya;c[Cb>>2]=Fb;c[Cb+4>>2]=Gb;}Gb=Ya;Ya=Jh(cb,lb,c[Gb>>2]|0,c[Gb+4>>2]|0)|0;Gb=(c[jb>>2]|0)+16|0;c[Gb>>2]=Ya;c[Gb+4>>2]=y;Gb=(c[jb>>2]|0)+24|0;Ya=c[Gb>>2]|0;lb=c[Gb+4>>2]|0;Gb=c[mb>>2]|0;c[Wa>>2]=(c[jb>>2]|0)+40+16;c[Xa>>2]=Gb;Gb=c[Xa>>2]|0;c[Ta>>2]=c[Wa>>2];c[Ua>>2]=Gb;c[Va>>2]=1;Gb=(c[Ua>>2]|0)==1;Ua=c[Ta>>2]|0;if((c[Va>>2]|0)==1){Va=Hh(Ua)|0;Ta=y;if(Gb){Hb=Va;Ib=Ta;}else{Wa=Ih(Va,Ta)|0;Hb=Wa;Ib=y;}Wa=Sa;c[Wa>>2]=Hb;c[Wa+4>>2]=Ib;}else{Ib=Ua;Ua=c[Ib>>2]|0;Wa=c[Ib+4>>2]|0;if(Gb){Jb=Ua;Kb=Wa;}else{Gb=Ih(Ua,Wa)|0;Jb=Gb;Kb=y;}Gb=Sa;c[Gb>>2]=Jb;c[Gb+4>>2]=Kb;}Kb=Sa;Sa=Jh(Ya,lb,c[Kb>>2]|0,c[Kb+4>>2]|0)|0;Kb=(c[jb>>2]|0)+24|0;c[Kb>>2]=Sa;c[Kb+4>>2]=y;Kb=(c[jb>>2]|0)+32|0;Sa=c[Kb>>2]|0;lb=c[Kb+4>>2]|0;Kb=c[mb>>2]|0;c[Qa>>2]=(c[jb>>2]|0)+40+24;c[Ra>>2]=Kb;Kb=c[Ra>>2]|0;c[Na>>2]=c[Qa>>2];c[Oa>>2]=Kb;c[Pa>>2]=1;Kb=(c[Oa>>2]|0)==1;Oa=c[Na>>2]|0;if((c[Pa>>2]|0)==1){Pa=Hh(Oa)|0;Na=y;if(Kb){Lb=Pa;Mb=Na;}else{Qa=Ih(Pa,Na)|0;Lb=Qa;Mb=y;}Qa=Ma;c[Qa>>2]=Lb;c[Qa+4>>2]=Mb;}else{Mb=Oa;Oa=c[Mb>>2]|0;Qa=c[Mb+4>>2]|0;if(Kb){Nb=Oa;Ob=Qa;}else{Kb=Ih(Oa,Qa)|0;Nb=Kb;Ob=y;}Kb=Ma;c[Kb>>2]=Nb;c[Kb+4>>2]=Ob;}Ob=Ma;Ma=Jh(Sa,lb,c[Ob>>2]|0,c[Ob+4>>2]|0)|0;Ob=(c[jb>>2]|0)+32|0;c[Ob>>2]=Ma;c[Ob+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+(32-(c[(c[jb>>2]|0)+72>>2]|0));c[(c[jb>>2]|0)+72>>2]=0;}if(((c[nb>>2]|0)+32|0)>>>0<=(c[ob>>2]|0)>>>0){c[pb>>2]=(c[ob>>2]|0)+-32;Ob=(c[jb>>2]|0)+8|0;Ma=c[Ob+4>>2]|0;lb=qb;c[lb>>2]=c[Ob>>2];c[lb+4>>2]=Ma;Ma=(c[jb>>2]|0)+16|0;lb=c[Ma+4>>2]|0;Ob=rb;c[Ob>>2]=c[Ma>>2];c[Ob+4>>2]=lb;lb=(c[jb>>2]|0)+24|0;Ob=c[lb+4>>2]|0;Ma=sb;c[Ma>>2]=c[lb>>2];c[Ma+4>>2]=Ob;Ob=(c[jb>>2]|0)+32|0;Ma=c[Ob+4>>2]|0;lb=tb;c[lb>>2]=c[Ob>>2];c[lb+4>>2]=Ma;do{Ma=qb;lb=c[Ma>>2]|0;Ob=c[Ma+4>>2]|0;Ma=c[mb>>2]|0;c[Ka>>2]=c[nb>>2];c[La>>2]=Ma;Ma=c[La>>2]|0;c[Ha>>2]=c[Ka>>2];c[Ia>>2]=Ma;c[Ja>>2]=1;Ma=(c[Ia>>2]|0)==1;Sa=c[Ha>>2]|0;if((c[Ja>>2]|0)==1){Kb=Hh(Sa)|0;Nb=y;if(Ma){Pb=Kb;Qb=Nb;}else{Qa=Ih(Kb,Nb)|0;Pb=Qa;Qb=y;}Qa=Ga;c[Qa>>2]=Pb;c[Qa+4>>2]=Qb;}else{Qa=Sa;Sa=c[Qa>>2]|0;Nb=c[Qa+4>>2]|0;if(Ma){Rb=Sa;Sb=Nb;}else{Ma=Ih(Sa,Nb)|0;Rb=Ma;Sb=y;}Ma=Ga;c[Ma>>2]=Rb;c[Ma+4>>2]=Sb;}Ma=Ga;Nb=Jh(lb,Ob,c[Ma>>2]|0,c[Ma+4>>2]|0)|0;Ma=qb;c[Ma>>2]=Nb;c[Ma+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+8;Ma=rb;Nb=c[Ma>>2]|0;Ob=c[Ma+4>>2]|0;Ma=c[mb>>2]|0;c[Ea>>2]=c[nb>>2];c[Fa>>2]=Ma;Ma=c[Fa>>2]|0;c[Ba>>2]=c[Ea>>2];c[Ca>>2]=Ma;c[Da>>2]=1;Ma=(c[Ca>>2]|0)==1;lb=c[Ba>>2]|0;if((c[Da>>2]|0)==1){Sa=Hh(lb)|0;Qa=y;if(Ma){Tb=Sa;Ub=Qa;}else{Kb=Ih(Sa,Qa)|0;Tb=Kb;Ub=y;}Kb=Aa;c[Kb>>2]=Tb;c[Kb+4>>2]=Ub;}else{Kb=lb;lb=c[Kb>>2]|0;Qa=c[Kb+4>>2]|0;if(Ma){Vb=lb;Wb=Qa;}else{Ma=Ih(lb,Qa)|0;Vb=Ma;Wb=y;}Ma=Aa;c[Ma>>2]=Vb;c[Ma+4>>2]=Wb;}Ma=Aa;Qa=Jh(Nb,Ob,c[Ma>>2]|0,c[Ma+4>>2]|0)|0;Ma=rb;c[Ma>>2]=Qa;c[Ma+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+8;Ma=sb;Qa=c[Ma>>2]|0;Ob=c[Ma+4>>2]|0;Ma=c[mb>>2]|0;c[ya>>2]=c[nb>>2];c[za>>2]=Ma;Ma=c[za>>2]|0;c[va>>2]=c[ya>>2];c[wa>>2]=Ma;c[xa>>2]=1;Ma=(c[wa>>2]|0)==1;Nb=c[va>>2]|0;if((c[xa>>2]|0)==1){lb=Hh(Nb)|0;Kb=y;if(Ma){Xb=lb;Yb=Kb;}else{Sa=Ih(lb,Kb)|0;Xb=Sa;Yb=y;}Sa=ua;c[Sa>>2]=Xb;c[Sa+4>>2]=Yb;}else{Sa=Nb;Nb=c[Sa>>2]|0;Kb=c[Sa+4>>2]|0;if(Ma){Zb=Nb;_b=Kb;}else{Ma=Ih(Nb,Kb)|0;Zb=Ma;_b=y;}Ma=ua;c[Ma>>2]=Zb;c[Ma+4>>2]=_b;}Ma=ua;Kb=Jh(Qa,Ob,c[Ma>>2]|0,c[Ma+4>>2]|0)|0;Ma=sb;c[Ma>>2]=Kb;c[Ma+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+8;Ma=tb;Kb=c[Ma>>2]|0;Ob=c[Ma+4>>2]|0;Ma=c[mb>>2]|0;c[sa>>2]=c[nb>>2];c[ta>>2]=Ma;Ma=c[ta>>2]|0;c[pa>>2]=c[sa>>2];c[qa>>2]=Ma;c[ra>>2]=1;Ma=(c[qa>>2]|0)==1;Qa=c[pa>>2]|0;if((c[ra>>2]|0)==1){Nb=Hh(Qa)|0;Sa=y;if(Ma){$b=Nb;ac=Sa;}else{lb=Ih(Nb,Sa)|0;$b=lb;ac=y;}lb=oa;c[lb>>2]=$b;c[lb+4>>2]=ac;}else{lb=Qa;Qa=c[lb>>2]|0;Sa=c[lb+4>>2]|0;if(Ma){bc=Qa;cc=Sa;}else{Ma=Ih(Qa,Sa)|0;bc=Ma;cc=y;}Ma=oa;c[Ma>>2]=bc;c[Ma+4>>2]=cc;}Ma=oa;Sa=Jh(Kb,Ob,c[Ma>>2]|0,c[Ma+4>>2]|0)|0;Ma=tb;c[Ma>>2]=Sa;c[Ma+4>>2]=y;c[nb>>2]=(c[nb>>2]|0)+8;}while((c[nb>>2]|0)>>>0<=(c[pb>>2]|0)>>>0);pb=qb;qb=c[pb+4>>2]|0;oa=(c[jb>>2]|0)+8|0;c[oa>>2]=c[pb>>2];c[oa+4>>2]=qb;qb=rb;rb=c[qb+4>>2]|0;oa=(c[jb>>2]|0)+16|0;c[oa>>2]=c[qb>>2];c[oa+4>>2]=rb;rb=sb;sb=c[rb+4>>2]|0;oa=(c[jb>>2]|0)+24|0;c[oa>>2]=c[rb>>2];c[oa+4>>2]=sb;sb=tb;tb=c[sb+4>>2]|0;oa=(c[jb>>2]|0)+32|0;c[oa>>2]=c[sb>>2];c[oa+4>>2]=tb;}if((c[nb>>2]|0)>>>0<(c[ob>>2]|0)>>>0){Mh((c[jb>>2]|0)+40|0,c[nb>>2]|0,(c[ob>>2]|0)-(c[nb>>2]|0)|0)|0;c[(c[jb>>2]|0)+72>>2]=(c[ob>>2]|0)-(c[nb>>2]|0);}c[ib>>2]=0;}c[ub>>2]=c[ib>>2];dc=c[ub>>2]|0;l=f;return dc|0;}else{c[da>>2]=e;c[ea>>2]=vb;c[fa>>2]=wb;c[ga>>2]=0;c[ha>>2]=c[ea>>2];c[ia>>2]=(c[ha>>2]|0)+(c[fa>>2]|0);wb=c[da>>2]|0;vb=wb;e=dE(c[vb>>2]|0,c[vb+4>>2]|0,c[fa>>2]|0,0)|0;vb=wb;c[vb>>2]=e;c[vb+4>>2]=y;vb=c[da>>2]|0;if(((c[(c[da>>2]|0)+72>>2]|0)+(c[fa>>2]|0)|0)>>>0<32){Mh(vb+40+(c[(c[da>>2]|0)+72>>2]|0)|0,c[ea>>2]|0,c[fa>>2]|0)|0;e=(c[da>>2]|0)+72|0;c[e>>2]=(c[e>>2]|0)+(c[fa>>2]|0);c[ca>>2]=0;}else{if(c[vb+72>>2]|0){Mh((c[da>>2]|0)+40+(c[(c[da>>2]|0)+72>>2]|0)|0,c[ea>>2]|0,32-(c[(c[da>>2]|0)+72>>2]|0)|0)|0;ea=(c[da>>2]|0)+8|0;vb=c[ea>>2]|0;fa=c[ea+4>>2]|0;ea=c[ga>>2]|0;c[aa>>2]=(c[da>>2]|0)+40;c[ba>>2]=ea;ea=c[ba>>2]|0;c[Z>>2]=c[aa>>2];c[_>>2]=ea;c[$>>2]=1;ea=(c[_>>2]|0)==1;_=c[Z>>2]|0;if((c[$>>2]|0)==1){$=Hh(_)|0;Z=y;if(ea){ec=$;fc=Z;}else{aa=Ih($,Z)|0;ec=aa;fc=y;}aa=Y;c[aa>>2]=ec;c[aa+4>>2]=fc;}else{fc=_;_=c[fc>>2]|0;aa=c[fc+4>>2]|0;if(ea){gc=_;hc=aa;}else{ea=Ih(_,aa)|0;gc=ea;hc=y;}ea=Y;c[ea>>2]=gc;c[ea+4>>2]=hc;}hc=Y;Y=Jh(vb,fa,c[hc>>2]|0,c[hc+4>>2]|0)|0;hc=(c[da>>2]|0)+8|0;c[hc>>2]=Y;c[hc+4>>2]=y;hc=(c[da>>2]|0)+16|0;Y=c[hc>>2]|0;fa=c[hc+4>>2]|0;hc=c[ga>>2]|0;c[W>>2]=(c[da>>2]|0)+40+8;c[X>>2]=hc;hc=c[X>>2]|0;c[T>>2]=c[W>>2];c[U>>2]=hc;c[V>>2]=1;hc=(c[U>>2]|0)==1;U=c[T>>2]|0;if((c[V>>2]|0)==1){V=Hh(U)|0;T=y;if(hc){ic=V;jc=T;}else{W=Ih(V,T)|0;ic=W;jc=y;}W=S;c[W>>2]=ic;c[W+4>>2]=jc;}else{jc=U;U=c[jc>>2]|0;W=c[jc+4>>2]|0;if(hc){kc=U;lc=W;}else{hc=Ih(U,W)|0;kc=hc;lc=y;}hc=S;c[hc>>2]=kc;c[hc+4>>2]=lc;}lc=S;S=Jh(Y,fa,c[lc>>2]|0,c[lc+4>>2]|0)|0;lc=(c[da>>2]|0)+16|0;c[lc>>2]=S;c[lc+4>>2]=y;lc=(c[da>>2]|0)+24|0;S=c[lc>>2]|0;fa=c[lc+4>>2]|0;lc=c[ga>>2]|0;c[Q>>2]=(c[da>>2]|0)+40+16;c[R>>2]=lc;lc=c[R>>2]|0;c[N>>2]=c[Q>>2];c[O>>2]=lc;c[P>>2]=1;lc=(c[O>>2]|0)==1;O=c[N>>2]|0;if((c[P>>2]|0)==1){P=Hh(O)|0;N=y;if(lc){mc=P;nc=N;}else{Q=Ih(P,N)|0;mc=Q;nc=y;}Q=M;c[Q>>2]=mc;c[Q+4>>2]=nc;}else{nc=O;O=c[nc>>2]|0;Q=c[nc+4>>2]|0;if(lc){oc=O;pc=Q;}else{lc=Ih(O,Q)|0;oc=lc;pc=y;}lc=M;c[lc>>2]=oc;c[lc+4>>2]=pc;}pc=M;M=Jh(S,fa,c[pc>>2]|0,c[pc+4>>2]|0)|0;pc=(c[da>>2]|0)+24|0;c[pc>>2]=M;c[pc+4>>2]=y;pc=(c[da>>2]|0)+32|0;M=c[pc>>2]|0;fa=c[pc+4>>2]|0;pc=c[ga>>2]|0;c[K>>2]=(c[da>>2]|0)+40+24;c[L>>2]=pc;pc=c[L>>2]|0;c[H>>2]=c[K>>2];c[I>>2]=pc;c[J>>2]=1;pc=(c[I>>2]|0)==1;I=c[H>>2]|0;if((c[J>>2]|0)==1){J=Hh(I)|0;H=y;if(pc){qc=J;rc=H;}else{K=Ih(J,H)|0;qc=K;rc=y;}K=G;c[K>>2]=qc;c[K+4>>2]=rc;}else{rc=I;I=c[rc>>2]|0;K=c[rc+4>>2]|0;if(pc){sc=I;tc=K;}else{pc=Ih(I,K)|0;sc=pc;tc=y;}pc=G;c[pc>>2]=sc;c[pc+4>>2]=tc;}tc=G;G=Jh(M,fa,c[tc>>2]|0,c[tc+4>>2]|0)|0;tc=(c[da>>2]|0)+32|0;c[tc>>2]=G;c[tc+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+(32-(c[(c[da>>2]|0)+72>>2]|0));c[(c[da>>2]|0)+72>>2]=0;}if(((c[ha>>2]|0)+32|0)>>>0<=(c[ia>>2]|0)>>>0){c[ja>>2]=(c[ia>>2]|0)+-32;tc=(c[da>>2]|0)+8|0;G=c[tc+4>>2]|0;fa=ka;c[fa>>2]=c[tc>>2];c[fa+4>>2]=G;G=(c[da>>2]|0)+16|0;fa=c[G+4>>2]|0;tc=la;c[tc>>2]=c[G>>2];c[tc+4>>2]=fa;fa=(c[da>>2]|0)+24|0;tc=c[fa+4>>2]|0;G=ma;c[G>>2]=c[fa>>2];c[G+4>>2]=tc;tc=(c[da>>2]|0)+32|0;G=c[tc+4>>2]|0;fa=na;c[fa>>2]=c[tc>>2];c[fa+4>>2]=G;do{G=ka;fa=c[G>>2]|0;tc=c[G+4>>2]|0;G=c[ga>>2]|0;c[E>>2]=c[ha>>2];c[F>>2]=G;G=c[F>>2]|0;c[B>>2]=c[E>>2];c[C>>2]=G;c[D>>2]=1;G=(c[C>>2]|0)==1;M=c[B>>2]|0;if((c[D>>2]|0)==1){pc=Hh(M)|0;sc=y;if(G){uc=pc;vc=sc;}else{K=Ih(pc,sc)|0;uc=K;vc=y;}K=A;c[K>>2]=uc;c[K+4>>2]=vc;}else{K=M;M=c[K>>2]|0;sc=c[K+4>>2]|0;if(G){wc=M;xc=sc;}else{G=Ih(M,sc)|0;wc=G;xc=y;}G=A;c[G>>2]=wc;c[G+4>>2]=xc;}G=A;sc=Jh(fa,tc,c[G>>2]|0,c[G+4>>2]|0)|0;G=ka;c[G>>2]=sc;c[G+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+8;G=la;sc=c[G>>2]|0;tc=c[G+4>>2]|0;G=c[ga>>2]|0;c[x>>2]=c[ha>>2];c[z>>2]=G;G=c[z>>2]|0;c[u>>2]=c[x>>2];c[v>>2]=G;c[w>>2]=1;G=(c[v>>2]|0)==1;fa=c[u>>2]|0;if((c[w>>2]|0)==1){M=Hh(fa)|0;K=y;if(G){yc=M;zc=K;}else{pc=Ih(M,K)|0;yc=pc;zc=y;}pc=t;c[pc>>2]=yc;c[pc+4>>2]=zc;}else{pc=fa;fa=c[pc>>2]|0;K=c[pc+4>>2]|0;if(G){Ac=fa;Bc=K;}else{G=Ih(fa,K)|0;Ac=G;Bc=y;}G=t;c[G>>2]=Ac;c[G+4>>2]=Bc;}G=t;K=Jh(sc,tc,c[G>>2]|0,c[G+4>>2]|0)|0;G=la;c[G>>2]=K;c[G+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+8;G=ma;K=c[G>>2]|0;tc=c[G+4>>2]|0;G=c[ga>>2]|0;c[r>>2]=c[ha>>2];c[s>>2]=G;G=c[s>>2]|0;c[o>>2]=c[r>>2];c[p>>2]=G;c[q>>2]=1;G=(c[p>>2]|0)==1;sc=c[o>>2]|0;if((c[q>>2]|0)==1){fa=Hh(sc)|0;pc=y;if(G){Cc=fa;Dc=pc;}else{M=Ih(fa,pc)|0;Cc=M;Dc=y;}M=n;c[M>>2]=Cc;c[M+4>>2]=Dc;}else{M=sc;sc=c[M>>2]|0;pc=c[M+4>>2]|0;if(G){Ec=sc;Fc=pc;}else{G=Ih(sc,pc)|0;Ec=G;Fc=y;}G=n;c[G>>2]=Ec;c[G+4>>2]=Fc;}G=n;pc=Jh(K,tc,c[G>>2]|0,c[G+4>>2]|0)|0;G=ma;c[G>>2]=pc;c[G+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+8;G=na;pc=c[G>>2]|0;tc=c[G+4>>2]|0;G=c[ga>>2]|0;c[k>>2]=c[ha>>2];c[m>>2]=G;G=c[m>>2]|0;c[h>>2]=c[k>>2];c[i>>2]=G;c[j>>2]=1;G=(c[i>>2]|0)==1;K=c[h>>2]|0;if((c[j>>2]|0)==1){sc=Hh(K)|0;M=y;if(G){Gc=sc;Hc=M;}else{fa=Ih(sc,M)|0;Gc=fa;Hc=y;}fa=g;c[fa>>2]=Gc;c[fa+4>>2]=Hc;}else{fa=K;K=c[fa>>2]|0;M=c[fa+4>>2]|0;if(G){Ic=K;Jc=M;}else{G=Ih(K,M)|0;Ic=G;Jc=y;}G=g;c[G>>2]=Ic;c[G+4>>2]=Jc;}G=g;M=Jh(pc,tc,c[G>>2]|0,c[G+4>>2]|0)|0;G=na;c[G>>2]=M;c[G+4>>2]=y;c[ha>>2]=(c[ha>>2]|0)+8;}while((c[ha>>2]|0)>>>0<=(c[ja>>2]|0)>>>0);ja=ka;ka=c[ja+4>>2]|0;g=(c[da>>2]|0)+8|0;c[g>>2]=c[ja>>2];c[g+4>>2]=ka;ka=la;la=c[ka+4>>2]|0;g=(c[da>>2]|0)+16|0;c[g>>2]=c[ka>>2];c[g+4>>2]=la;la=ma;ma=c[la+4>>2]|0;g=(c[da>>2]|0)+24|0;c[g>>2]=c[la>>2];c[g+4>>2]=ma;ma=na;na=c[ma+4>>2]|0;g=(c[da>>2]|0)+32|0;c[g>>2]=c[ma>>2];c[g+4>>2]=na;}if((c[ha>>2]|0)>>>0<(c[ia>>2]|0)>>>0){Mh((c[da>>2]|0)+40|0,c[ha>>2]|0,(c[ia>>2]|0)-(c[ha>>2]|0)|0)|0;c[(c[da>>2]|0)+72>>2]=(c[ia>>2]|0)-(c[ha>>2]|0);}c[ca>>2]=0;}c[ub>>2]=c[ca>>2];dc=c[ub>>2]|0;l=f;return dc|0;}return 0;}function Oh(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0;e=l;l=l+256|0;f=e+244|0;g=e+240|0;h=e+236|0;i=e+232|0;j=e+228|0;k=e+224|0;m=e+112|0;n=e+220|0;o=e+216|0;p=e+212|0;q=e+208|0;r=e+204|0;s=e+200|0;t=e+196|0;u=e+192|0;v=e+188|0;w=e+104|0;x=e+96|0;z=e+88|0;A=e+80|0;B=e+72|0;C=e+64|0;D=e+184|0;E=e+180|0;F=e+176|0;G=e+172|0;H=e+168|0;I=e+164|0;J=e+56|0;K=e+160|0;L=e+156|0;M=e+152|0;N=e+148|0;O=e+144|0;P=e+140|0;Q=e+136|0;R=e+132|0;S=e+128|0;T=e+48|0;U=e+40|0;V=e+32|0;W=e+24|0;X=e+16|0;Y=e+8|0;Z=e;_=e+124|0;$=e+120|0;c[_>>2]=b;c[$>>2]=a[11920];b=c[_>>2]|0;if((c[$>>2]|0)==1){c[P>>2]=b;c[Q>>2]=1;c[R>>2]=(c[P>>2]|0)+40;c[S>>2]=(c[P>>2]|0)+40+(c[(c[P>>2]|0)+72>>2]|0);$=c[P>>2]|0;_=c[$+4>>2]|0;aa=c[P>>2]|0;if(_>>>0>0|(_|0)==0&(c[$>>2]|0)>>>0>=32){$=aa+8|0;_=c[$+4>>2]|0;ba=U;c[ba>>2]=c[$>>2];c[ba+4>>2]=_;_=(c[P>>2]|0)+16|0;ba=c[_+4>>2]|0;$=V;c[$>>2]=c[_>>2];c[$+4>>2]=ba;ba=(c[P>>2]|0)+24|0;$=c[ba+4>>2]|0;_=W;c[_>>2]=c[ba>>2];c[_+4>>2]=$;$=(c[P>>2]|0)+32|0;_=c[$+4>>2]|0;ba=X;c[ba>>2]=c[$>>2];c[ba+4>>2]=_;_=U;ba=jE(c[_>>2]|0,c[_+4>>2]|0,1)|0;_=y;$=U;ca=iE(c[$>>2]|0,c[$+4>>2]|0,63)|0;$=_|y;_=V;da=jE(c[_>>2]|0,c[_+4>>2]|0,7)|0;_=y;ea=V;fa=iE(c[ea>>2]|0,c[ea+4>>2]|0,57)|0;ea=dE(ba|ca|0,$|0,da|fa|0,_|y|0)|0;_=y;fa=W;da=jE(c[fa>>2]|0,c[fa+4>>2]|0,12)|0;fa=y;$=W;ca=iE(c[$>>2]|0,c[$+4>>2]|0,52)|0;$=dE(ea|0,_|0,da|ca|0,fa|y|0)|0;fa=y;ca=X;da=jE(c[ca>>2]|0,c[ca+4>>2]|0,18)|0;ca=y;_=X;ea=iE(c[_>>2]|0,c[_+4>>2]|0,46)|0;_=dE($|0,fa|0,da|ea|0,ca|y|0)|0;ca=T;c[ca>>2]=_;c[ca+4>>2]=y;ca=T;_=U;U=Kh(c[ca>>2]|0,c[ca+4>>2]|0,c[_>>2]|0,c[_+4>>2]|0)|0;_=T;c[_>>2]=U;c[_+4>>2]=y;_=T;U=V;V=Kh(c[_>>2]|0,c[_+4>>2]|0,c[U>>2]|0,c[U+4>>2]|0)|0;U=T;c[U>>2]=V;c[U+4>>2]=y;U=T;V=W;W=Kh(c[U>>2]|0,c[U+4>>2]|0,c[V>>2]|0,c[V+4>>2]|0)|0;V=T;c[V>>2]=W;c[V+4>>2]=y;V=T;W=X;X=Kh(c[V>>2]|0,c[V+4>>2]|0,c[W>>2]|0,c[W+4>>2]|0)|0;W=T;c[W>>2]=X;c[W+4>>2]=y;}else{W=aa+24|0;aa=dE(c[W>>2]|0,c[W+4>>2]|0,374761413,668265263)|0;W=T;c[W>>2]=aa;c[W+4>>2]=y;}W=c[P>>2]|0;P=T;aa=dE(c[P>>2]|0,c[P+4>>2]|0,c[W>>2]|0,c[W+4>>2]|0)|0;W=T;c[W>>2]=aa;c[W+4>>2]=y;while(1){ga=c[R>>2]|0;if(((c[R>>2]|0)+8|0)>>>0>(c[S>>2]|0)>>>0)break;W=c[Q>>2]|0;c[N>>2]=ga;c[O>>2]=W;W=c[O>>2]|0;c[K>>2]=c[N>>2];c[L>>2]=W;c[M>>2]=1;W=(c[L>>2]|0)==1;aa=c[K>>2]|0;if((c[M>>2]|0)==1){P=Hh(aa)|0;X=y;if(W){ha=P;ia=X;}else{V=Ih(P,X)|0;ha=V;ia=y;}V=J;c[V>>2]=ha;c[V+4>>2]=ia;}else{V=aa;aa=c[V>>2]|0;X=c[V+4>>2]|0;if(W){ja=aa;ka=X;}else{W=Ih(aa,X)|0;ja=W;ka=y;}W=J;c[W>>2]=ja;c[W+4>>2]=ka;}W=J;X=Jh(0,0,c[W>>2]|0,c[W+4>>2]|0)|0;W=Y;c[W>>2]=X;c[W+4>>2]=y;W=Y;X=T;aa=c[X+4>>2]^c[W+4>>2];V=T;c[V>>2]=c[X>>2]^c[W>>2];c[V+4>>2]=aa;aa=T;V=jE(c[aa>>2]|0,c[aa+4>>2]|0,27)|0;aa=y;W=T;X=iE(c[W>>2]|0,c[W+4>>2]|0,37)|0;W=cE(V|X|0,aa|y|0,-2048144761,-1640531535)|0;aa=dE(W|0,y|0,-1028477341,-2048144777)|0;W=T;c[W>>2]=aa;c[W+4>>2]=y;c[R>>2]=(c[R>>2]|0)+8;}if((ga+4|0)>>>0<=(c[S>>2]|0)>>>0){ga=c[Q>>2]|0;c[H>>2]=c[R>>2];c[I>>2]=ga;ga=c[I>>2]|0;c[E>>2]=c[H>>2];c[F>>2]=ga;c[G>>2]=1;ga=(c[F>>2]|0)==1;F=c[E>>2]|0;if((c[G>>2]|0)==1){G=Fh(F)|0;if(ga)la=G;else la=Gh(G)|0;c[D>>2]=la;}else{la=c[F>>2]|0;if(ga)ma=la;else ma=Gh(la)|0;c[D>>2]=ma;}ma=cE(c[D>>2]|0,0,-2048144761,-1640531535)|0;D=T;la=c[D+4>>2]^y;ga=T;c[ga>>2]=c[D>>2]^ma;c[ga+4>>2]=la;la=T;ga=jE(c[la>>2]|0,c[la+4>>2]|0,23)|0;la=y;ma=T;D=iE(c[ma>>2]|0,c[ma+4>>2]|0,41)|0;ma=cE(ga|D|0,la|y|0,668265295,-1028477379)|0;la=dE(ma|0,y|0,-1640531463,374761393)|0;ma=T;c[ma>>2]=la;c[ma+4>>2]=y;c[R>>2]=(c[R>>2]|0)+4;}while(1){if((c[R>>2]|0)>>>0>=(c[S>>2]|0)>>>0)break;ma=cE(d[c[R>>2]>>0]|0,0,374761413,668265263)|0;la=T;D=c[la+4>>2]^y;ga=T;c[ga>>2]=c[la>>2]^ma;c[ga+4>>2]=D;D=T;ga=jE(c[D>>2]|0,c[D+4>>2]|0,11)|0;D=y;ma=T;la=iE(c[ma>>2]|0,c[ma+4>>2]|0,53)|0;ma=cE(ga|la|0,D|y|0,-2048144761,-1640531535)|0;D=T;c[D>>2]=ma;c[D+4>>2]=y;c[R>>2]=(c[R>>2]|0)+1;}R=T;S=iE(c[R>>2]|0,c[R+4>>2]|0,33)|0;R=T;D=c[R+4>>2]^y;ma=T;c[ma>>2]=c[R>>2]^S;c[ma+4>>2]=D;D=T;ma=cE(c[D>>2]|0,c[D+4>>2]|0,668265295,-1028477379)|0;D=T;c[D>>2]=ma;c[D+4>>2]=y;D=T;ma=iE(c[D>>2]|0,c[D+4>>2]|0,29)|0;D=T;S=c[D+4>>2]^y;R=T;c[R>>2]=c[D>>2]^ma;c[R+4>>2]=S;S=T;R=cE(c[S>>2]|0,c[S+4>>2]|0,-1640531463,374761393)|0;S=T;c[S>>2]=R;c[S+4>>2]=y;S=T;R=c[S+4>>2]|0;ma=T;c[ma>>2]=c[S>>2]^c[T+4>>2];c[ma+4>>2]=R;R=T;T=c[R+4>>2]|0;ma=Z;c[ma>>2]=c[R>>2];c[ma+4>>2]=T;na=Z;oa=na;pa=c[oa>>2]|0;qa=na+4|0;ra=qa;sa=c[ra>>2]|0;y=sa;l=e;return pa|0;}else{c[s>>2]=b;c[t>>2]=0;c[u>>2]=(c[s>>2]|0)+40;c[v>>2]=(c[s>>2]|0)+40+(c[(c[s>>2]|0)+72>>2]|0);b=c[s>>2]|0;T=c[b+4>>2]|0;ma=c[s>>2]|0;if(T>>>0>0|(T|0)==0&(c[b>>2]|0)>>>0>=32){b=ma+8|0;T=c[b+4>>2]|0;R=x;c[R>>2]=c[b>>2];c[R+4>>2]=T;T=(c[s>>2]|0)+16|0;R=c[T+4>>2]|0;b=z;c[b>>2]=c[T>>2];c[b+4>>2]=R;R=(c[s>>2]|0)+24|0;b=c[R+4>>2]|0;T=A;c[T>>2]=c[R>>2];c[T+4>>2]=b;b=(c[s>>2]|0)+32|0;T=c[b+4>>2]|0;R=B;c[R>>2]=c[b>>2];c[R+4>>2]=T;T=x;R=jE(c[T>>2]|0,c[T+4>>2]|0,1)|0;T=y;b=x;S=iE(c[b>>2]|0,c[b+4>>2]|0,63)|0;b=T|y;T=z;D=jE(c[T>>2]|0,c[T+4>>2]|0,7)|0;T=y;la=z;ga=iE(c[la>>2]|0,c[la+4>>2]|0,57)|0;la=dE(R|S|0,b|0,D|ga|0,T|y|0)|0;T=y;ga=A;D=jE(c[ga>>2]|0,c[ga+4>>2]|0,12)|0;ga=y;b=A;S=iE(c[b>>2]|0,c[b+4>>2]|0,52)|0;b=dE(la|0,T|0,D|S|0,ga|y|0)|0;ga=y;S=B;D=jE(c[S>>2]|0,c[S+4>>2]|0,18)|0;S=y;T=B;la=iE(c[T>>2]|0,c[T+4>>2]|0,46)|0;T=dE(b|0,ga|0,D|la|0,S|y|0)|0;S=w;c[S>>2]=T;c[S+4>>2]=y;S=w;T=x;x=Kh(c[S>>2]|0,c[S+4>>2]|0,c[T>>2]|0,c[T+4>>2]|0)|0;T=w;c[T>>2]=x;c[T+4>>2]=y;T=w;x=z;z=Kh(c[T>>2]|0,c[T+4>>2]|0,c[x>>2]|0,c[x+4>>2]|0)|0;x=w;c[x>>2]=z;c[x+4>>2]=y;x=w;z=A;A=Kh(c[x>>2]|0,c[x+4>>2]|0,c[z>>2]|0,c[z+4>>2]|0)|0;z=w;c[z>>2]=A;c[z+4>>2]=y;z=w;A=B;B=Kh(c[z>>2]|0,c[z+4>>2]|0,c[A>>2]|0,c[A+4>>2]|0)|0;A=w;c[A>>2]=B;c[A+4>>2]=y;}else{A=ma+24|0;ma=dE(c[A>>2]|0,c[A+4>>2]|0,374761413,668265263)|0;A=w;c[A>>2]=ma;c[A+4>>2]=y;}A=c[s>>2]|0;s=w;ma=dE(c[s>>2]|0,c[s+4>>2]|0,c[A>>2]|0,c[A+4>>2]|0)|0;A=w;c[A>>2]=ma;c[A+4>>2]=y;while(1){ta=c[u>>2]|0;if(((c[u>>2]|0)+8|0)>>>0>(c[v>>2]|0)>>>0)break;A=c[t>>2]|0;c[q>>2]=ta;c[r>>2]=A;A=c[r>>2]|0;c[n>>2]=c[q>>2];c[o>>2]=A;c[p>>2]=1;A=(c[o>>2]|0)==1;ma=c[n>>2]|0;if((c[p>>2]|0)==1){s=Hh(ma)|0;B=y;if(A){ua=s;va=B;}else{z=Ih(s,B)|0;ua=z;va=y;}z=m;c[z>>2]=ua;c[z+4>>2]=va;}else{z=ma;ma=c[z>>2]|0;B=c[z+4>>2]|0;if(A){wa=ma;xa=B;}else{A=Ih(ma,B)|0;wa=A;xa=y;}A=m;c[A>>2]=wa;c[A+4>>2]=xa;}A=m;B=Jh(0,0,c[A>>2]|0,c[A+4>>2]|0)|0;A=C;c[A>>2]=B;c[A+4>>2]=y;A=C;B=w;ma=c[B+4>>2]^c[A+4>>2];z=w;c[z>>2]=c[B>>2]^c[A>>2];c[z+4>>2]=ma;ma=w;z=jE(c[ma>>2]|0,c[ma+4>>2]|0,27)|0;ma=y;A=w;B=iE(c[A>>2]|0,c[A+4>>2]|0,37)|0;A=cE(z|B|0,ma|y|0,-2048144761,-1640531535)|0;ma=dE(A|0,y|0,-1028477341,-2048144777)|0;A=w;c[A>>2]=ma;c[A+4>>2]=y;c[u>>2]=(c[u>>2]|0)+8;}if((ta+4|0)>>>0<=(c[v>>2]|0)>>>0){ta=c[t>>2]|0;c[j>>2]=c[u>>2];c[k>>2]=ta;ta=c[k>>2]|0;c[g>>2]=c[j>>2];c[h>>2]=ta;c[i>>2]=1;ta=(c[h>>2]|0)==1;h=c[g>>2]|0;if((c[i>>2]|0)==1){i=Fh(h)|0;if(ta)ya=i;else ya=Gh(i)|0;c[f>>2]=ya;}else{ya=c[h>>2]|0;if(ta)za=ya;else za=Gh(ya)|0;c[f>>2]=za;}za=cE(c[f>>2]|0,0,-2048144761,-1640531535)|0;f=w;ya=c[f+4>>2]^y;ta=w;c[ta>>2]=c[f>>2]^za;c[ta+4>>2]=ya;ya=w;ta=jE(c[ya>>2]|0,c[ya+4>>2]|0,23)|0;ya=y;za=w;f=iE(c[za>>2]|0,c[za+4>>2]|0,41)|0;za=cE(ta|f|0,ya|y|0,668265295,-1028477379)|0;ya=dE(za|0,y|0,-1640531463,374761393)|0;za=w;c[za>>2]=ya;c[za+4>>2]=y;c[u>>2]=(c[u>>2]|0)+4;}while(1){if((c[u>>2]|0)>>>0>=(c[v>>2]|0)>>>0)break;za=cE(d[c[u>>2]>>0]|0,0,374761413,668265263)|0;ya=w;f=c[ya+4>>2]^y;ta=w;c[ta>>2]=c[ya>>2]^za;c[ta+4>>2]=f;f=w;ta=jE(c[f>>2]|0,c[f+4>>2]|0,11)|0;f=y;za=w;ya=iE(c[za>>2]|0,c[za+4>>2]|0,53)|0;za=cE(ta|ya|0,f|y|0,-2048144761,-1640531535)|0;f=w;c[f>>2]=za;c[f+4>>2]=y;c[u>>2]=(c[u>>2]|0)+1;}u=w;v=iE(c[u>>2]|0,c[u+4>>2]|0,33)|0;u=w;f=c[u+4>>2]^y;za=w;c[za>>2]=c[u>>2]^v;c[za+4>>2]=f;f=w;za=cE(c[f>>2]|0,c[f+4>>2]|0,668265295,-1028477379)|0;f=w;c[f>>2]=za;c[f+4>>2]=y;f=w;za=iE(c[f>>2]|0,c[f+4>>2]|0,29)|0;f=w;v=c[f+4>>2]^y;u=w;c[u>>2]=c[f>>2]^za;c[u+4>>2]=v;v=w;u=cE(c[v>>2]|0,c[v+4>>2]|0,-1640531463,374761393)|0;v=w;c[v>>2]=u;c[v+4>>2]=y;v=w;u=c[v+4>>2]|0;za=w;c[za>>2]=c[v>>2]^c[w+4>>2];c[za+4>>2]=u;u=w;w=c[u+4>>2]|0;za=Z;c[za>>2]=c[u>>2];c[za+4>>2]=w;na=Z;oa=na;pa=c[oa>>2]|0;qa=na+4|0;ra=qa;sa=c[ra>>2]|0;y=sa;l=e;return pa|0;}return 0;}function Ph(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=Qh(c[d>>2]|0)|0;l=b;return a|0;}function Qh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function Rh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+4|0;f=d;c[f>>2]=a;if(c[b>>2]|0){c[e>>2]=qc[c[b>>2]&63](c[b+8>>2]|0,c[f>>2]|0)|0;g=c[e>>2]|0;l=d;return g|0;}else{c[e>>2]=Cy(c[f>>2]|0)|0;g=c[e>>2]|0;l=d;return g|0;}return 0;}function Sh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;if(c[b>>2]|0){c[g>>2]=qc[c[b>>2]&63](c[b+8>>2]|0,c[f>>2]|0)|0;oE(c[g>>2]|0,0,c[f>>2]|0)|0;c[e>>2]=c[g>>2];h=c[e>>2]|0;l=d;return h|0;}else{c[e>>2]=Ey(1,c[f>>2]|0)|0;h=c[e>>2]|0;l=d;return h|0;}return 0;}function Th(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=a;if(!(c[e>>2]|0)){l=d;return;}if(c[b+4>>2]|0){xc[c[b+4>>2]&31](c[b+8>>2]|0,c[e>>2]|0);l=d;return;}else{Dy(c[e>>2]|0);l=d;return;}}function Uh(e,f,g,h,i,j){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;k=l;l=l+1136|0;m=k+1124|0;n=k+1120|0;o=k+1116|0;p=k+1112|0;q=k+1108|0;r=k+1104|0;s=k+1100|0;t=k+1096|0;u=k+1092|0;v=k+1088|0;w=k+1084|0;x=k+1080|0;y=k+1076|0;z=k+1072|0;A=k;B=k+1068|0;C=k+1064|0;D=k+1060|0;E=k+1056|0;F=k+1052|0;G=k+1048|0;H=k+1044|0;I=k+1128|0;J=k+1040|0;K=k+1036|0;L=k+1032|0;M=k+1028|0;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=j;c[t>>2]=1<<c[q>>2];c[u>>2]=(c[t>>2]|0)-1;c[v>>2]=c[n>>2];c[w>>2]=(c[v>>2]|0)+4;c[x>>2]=(c[v>>2]|0)+4+((c[q>>2]|0?(c[t>>2]|0)>>>1:1)<<2);c[y>>2]=c[x>>2];c[z>>2]=((c[t>>2]|0)>>>1)+((c[t>>2]|0)>>>3)+3;c[B>>2]=c[r>>2];c[C>>2]=(c[t>>2]|0)-1;if(1<<c[q>>2]>>>0>(c[s>>2]|0)>>>0){c[m>>2]=-44;N=c[m>>2]|0;l=k;return N|0;}b[(c[w>>2]|0)+-4>>1]=c[q>>2];b[(c[w>>2]|0)+-2>>1]=c[p>>2];c[A>>2]=0;c[D>>2]=1;while(1){if((c[D>>2]|0)>>>0>((c[p>>2]|0)+1|0)>>>0)break;s=c[A+((c[D>>2]|0)-1<<2)>>2]|0;if((b[(c[o>>2]|0)+((c[D>>2]|0)-1<<1)>>1]|0)==-1){c[A+(c[D>>2]<<2)>>2]=s+1;r=(c[D>>2]|0)-1&255;x=c[B>>2]|0;v=c[C>>2]|0;c[C>>2]=v+-1;a[x+v>>0]=r;}else c[A+(c[D>>2]<<2)>>2]=s+(b[(c[o>>2]|0)+((c[D>>2]|0)-1<<1)>>1]|0);c[D>>2]=(c[D>>2]|0)+1;}c[A+((c[p>>2]|0)+1<<2)>>2]=(c[t>>2]|0)+1;c[E>>2]=0;c[F>>2]=0;while(1){if((c[F>>2]|0)>>>0>(c[p>>2]|0)>>>0)break;c[G>>2]=0;while(1){O=c[F>>2]|0;if((c[G>>2]|0)>=(b[(c[o>>2]|0)+(c[F>>2]<<1)>>1]|0))break;a[(c[B>>2]|0)+(c[E>>2]|0)>>0]=O;c[E>>2]=(c[E>>2]|0)+(c[z>>2]|0)&c[u>>2];while(1){if((c[E>>2]|0)>>>0<=(c[C>>2]|0)>>>0)break;c[E>>2]=(c[E>>2]|0)+(c[z>>2]|0)&c[u>>2];}c[G>>2]=(c[G>>2]|0)+1;}c[F>>2]=O+1;}if(c[E>>2]|0){c[m>>2]=-1;N=c[m>>2]|0;l=k;return N|0;}c[H>>2]=0;while(1){if((c[H>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;a[I>>0]=a[(c[B>>2]|0)+(c[H>>2]|0)>>0]|0;E=(c[t>>2]|0)+(c[H>>2]|0)&65535;O=c[w>>2]|0;F=A+(d[I>>0]<<2)|0;G=c[F>>2]|0;c[F>>2]=G+1;b[O+(G<<1)>>1]=E;c[H>>2]=(c[H>>2]|0)+1;}c[J>>2]=0;c[K>>2]=0;while(1){if((c[K>>2]|0)>>>0>(c[p>>2]|0)>>>0)break;switch(b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]|0){case 0:break;case 1:case-1:{c[(c[y>>2]|0)+(c[K>>2]<<3)+4>>2]=(c[q>>2]<<16)-(1<<c[q>>2]);c[(c[y>>2]|0)+(c[K>>2]<<3)>>2]=(c[J>>2]|0)-1;c[J>>2]=(c[J>>2]|0)+1;break;}default:{c[L>>2]=(c[q>>2]|0)-(Vh((b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]|0)-1|0)|0);c[M>>2]=b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]<<c[L>>2];c[(c[y>>2]|0)+(c[K>>2]<<3)+4>>2]=(c[L>>2]<<16)-(c[M>>2]|0);c[(c[y>>2]|0)+(c[K>>2]<<3)>>2]=(c[J>>2]|0)-(b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]|0);c[J>>2]=(c[J>>2]|0)+(b[(c[o>>2]|0)+(c[K>>2]<<1)>>1]|0);}}c[K>>2]=(c[K>>2]|0)+1;}c[m>>2]=0;N=c[m>>2]|0;l=k;return N|0;}function Vh(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Wh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=((N((c[e>>2]|0)+1|0,c[f>>2]|0)|0)>>>3)+3;l=d;return(c[e>>2]|0?c[g>>2]|0:512)|0;}function Xh(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;do{if((c[n>>2]|0)>>>0<=12){if((c[n>>2]|0)>>>0<5){c[h>>2]=-1;break;}f=c[j>>2]|0;e=f>>>0<(Wh(c[m>>2]|0,c[n>>2]|0)|0)>>>0;f=c[i>>2]|0;d=c[j>>2]|0;b=c[k>>2]|0;a=c[m>>2]|0;o=c[n>>2]|0;if(e){c[h>>2]=Yh(f,d,b,a,o,0)|0;break;}else{c[h>>2]=Yh(f,d,b,a,o,1)|0;break;}}else c[h>>2]=-44;}while(0);l=g;return c[h>>2]|0;}function Yh(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;j=l;l=l+96|0;k=j+80|0;m=j+76|0;n=j+72|0;o=j+68|0;p=j+64|0;q=j+60|0;r=j+56|0;s=j+52|0;t=j+48|0;u=j+44|0;v=j+40|0;w=j+36|0;x=j+32|0;y=j+28|0;z=j+24|0;A=j+20|0;B=j+16|0;C=j+12|0;D=j+8|0;E=j+4|0;F=j;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=c[m>>2];c[t>>2]=c[s>>2];c[u>>2]=(c[s>>2]|0)+(c[n>>2]|0);c[w>>2]=1<<c[q>>2];c[B>>2]=0;c[C>>2]=0;c[z>>2]=0;c[A>>2]=0;c[z>>2]=(c[z>>2]|0)+((c[q>>2]|0)-5<<c[A>>2]);c[A>>2]=(c[A>>2]|0)+4;c[x>>2]=(c[w>>2]|0)+1;c[y>>2]=c[w>>2];c[v>>2]=(c[q>>2]|0)+1;a:while(1){if((c[x>>2]|0)<=1){G=34;break;}if(c[C>>2]|0){c[D>>2]=c[B>>2];while(1){if(!((b[(c[o>>2]|0)+(c[B>>2]<<1)>>1]|0)!=0^1))break;c[B>>2]=(c[B>>2]|0)+1;}while(1){if((c[B>>2]|0)>>>0<((c[D>>2]|0)+24|0)>>>0)break;c[D>>2]=(c[D>>2]|0)+24;c[z>>2]=(c[z>>2]|0)+(65535<<c[A>>2]);if((c[r>>2]|0)==0?(c[t>>2]|0)>>>0>((c[u>>2]|0)+-2|0)>>>0:0){G=11;break a;}a[c[t>>2]>>0]=c[z>>2];a[(c[t>>2]|0)+1>>0]=(c[z>>2]|0)>>>8;c[t>>2]=(c[t>>2]|0)+2;c[z>>2]=(c[z>>2]|0)>>>16;}while(1){if((c[B>>2]|0)>>>0<((c[D>>2]|0)+3|0)>>>0)break;c[D>>2]=(c[D>>2]|0)+3;c[z>>2]=(c[z>>2]|0)+(3<<c[A>>2]);c[A>>2]=(c[A>>2]|0)+2;}c[z>>2]=(c[z>>2]|0)+((c[B>>2]|0)-(c[D>>2]|0)<<c[A>>2]);c[A>>2]=(c[A>>2]|0)+2;if((c[A>>2]|0)>16){if((c[r>>2]|0)==0?(c[t>>2]|0)>>>0>((c[u>>2]|0)+-2|0)>>>0:0){G=19;break;}a[c[t>>2]>>0]=c[z>>2];a[(c[t>>2]|0)+1>>0]=(c[z>>2]|0)>>>8;c[t>>2]=(c[t>>2]|0)+2;c[z>>2]=(c[z>>2]|0)>>>16;c[A>>2]=(c[A>>2]|0)-16;}}q=c[o>>2]|0;w=c[B>>2]|0;c[B>>2]=w+1;c[E>>2]=b[q+(w<<1)>>1];c[F>>2]=(c[y>>2]<<1)-1-(c[x>>2]|0);w=c[E>>2]|0;c[x>>2]=(c[x>>2]|0)-((c[E>>2]|0)<0?0-w|0:w);c[E>>2]=(c[E>>2]|0)+1;if((c[E>>2]|0)>=(c[y>>2]|0))c[E>>2]=(c[E>>2]|0)+(c[F>>2]|0);c[z>>2]=(c[z>>2]|0)+(c[E>>2]<<c[A>>2]);c[A>>2]=(c[A>>2]|0)+(c[v>>2]|0);c[A>>2]=(c[A>>2]|0)-((c[E>>2]|0)<(c[F>>2]|0)&1);c[C>>2]=(c[E>>2]|0)==1&1;if((c[x>>2]|0)<1){G=24;break;}while(1){if((c[x>>2]|0)>=(c[y>>2]|0))break;c[v>>2]=(c[v>>2]|0)+-1;c[y>>2]=c[y>>2]>>1;}if((c[A>>2]|0)>16){if((c[r>>2]|0)==0?(c[t>>2]|0)>>>0>((c[u>>2]|0)+-2|0)>>>0:0){G=31;break;}a[c[t>>2]>>0]=c[z>>2];a[(c[t>>2]|0)+1>>0]=(c[z>>2]|0)>>>8;c[t>>2]=(c[t>>2]|0)+2;c[z>>2]=(c[z>>2]|0)>>>16;c[A>>2]=(c[A>>2]|0)-16;}}if((G|0)==11){c[k>>2]=-70;H=c[k>>2]|0;l=j;return H|0;}else if((G|0)==19){c[k>>2]=-70;H=c[k>>2]|0;l=j;return H|0;}else if((G|0)==24){c[k>>2]=-1;H=c[k>>2]|0;l=j;return H|0;}else if((G|0)==31){c[k>>2]=-70;H=c[k>>2]|0;l=j;return H|0;}else if((G|0)==34){if((c[r>>2]|0)==0?(c[t>>2]|0)>>>0>((c[u>>2]|0)+-2|0)>>>0:0){c[k>>2]=-70;H=c[k>>2]|0;l=j;return H|0;}a[c[t>>2]>>0]=c[z>>2];a[(c[t>>2]|0)+1>>0]=(c[z>>2]|0)>>>8;c[t>>2]=(c[t>>2]|0)+(((c[A>>2]|0)+7|0)/8|0);if((c[B>>2]|0)>>>0>((c[p>>2]|0)+1|0)>>>0){c[k>>2]=-1;H=c[k>>2]|0;l=j;return H|0;}else{c[k>>2]=(c[t>>2]|0)-(c[s>>2]|0);H=c[k>>2]|0;l=j;return H|0;}}return 0;}function Zh(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+48|0;h=g+36|0;i=g+32|0;j=g+28|0;k=g+24|0;m=g+20|0;n=g+16|0;o=g+12|0;p=g+8|0;q=g+4|0;r=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[k>>2];c[o>>2]=(c[n>>2]|0)+(c[m>>2]|0);c[p>>2]=c[c[j>>2]>>2];c[q>>2]=0;oE(c[i>>2]|0,0,(c[p>>2]|0)+1<<2|0)|0;if(!(c[m>>2]|0)){c[c[j>>2]>>2]=0;c[h>>2]=0;s=c[h>>2]|0;l=g;return s|0;}while(1){if((c[n>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;m=c[i>>2]|0;k=c[n>>2]|0;c[n>>2]=k+1;f=m+((d[k>>0]|0)<<2)|0;c[f>>2]=(c[f>>2]|0)+1;}while(1){t=c[p>>2]|0;if(!((c[(c[i>>2]|0)+(c[p>>2]<<2)>>2]|0)!=0^1))break;c[p>>2]=t+-1;}c[c[j>>2]>>2]=t;c[r>>2]=0;while(1){if((c[r>>2]|0)>>>0>(c[p>>2]|0)>>>0)break;if((c[(c[i>>2]|0)+(c[r>>2]<<2)>>2]|0)>>>0>(c[q>>2]|0)>>>0)c[q>>2]=c[(c[i>>2]|0)+(c[r>>2]<<2)>>2];c[r>>2]=(c[r>>2]|0)+1;}c[h>>2]=c[q>>2];s=c[h>>2]|0;l=g;return s|0;}function _h(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;f=c[i>>2]|0;i=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;if((c[m>>2]|0)>>>0<1500){c[h>>2]=Zh(f,i,j,k)|0;o=c[h>>2]|0;l=g;return o|0;}else{c[h>>2]=$h(f,i,j,k,0,c[n>>2]|0)|0;o=c[h>>2]|0;l=g;return o|0;}return 0;}function $h(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;i=l;l=l+80|0;j=i+72|0;k=i+68|0;m=i+64|0;n=i+60|0;o=i+56|0;p=i+52|0;q=i+48|0;r=i+44|0;s=i+40|0;t=i+36|0;u=i+32|0;v=i+28|0;w=i+24|0;x=i+20|0;y=i+16|0;z=i+12|0;A=i+8|0;B=i+4|0;C=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+(c[o>>2]|0);c[t>>2]=c[c[m>>2]>>2];c[u>>2]=0;c[v>>2]=c[q>>2];c[w>>2]=(c[v>>2]|0)+1024;c[x>>2]=(c[w>>2]|0)+1024;c[y>>2]=(c[x>>2]|0)+1024;oE(c[q>>2]|0,0,4096)|0;if(!(c[o>>2]|0)){oE(c[k>>2]|0,0,(c[t>>2]|0)+1|0)|0;c[c[m>>2]>>2]=0;c[j>>2]=0;D=c[j>>2]|0;l=i;return D|0;}if(!(c[t>>2]|0))c[t>>2]=255;c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;while(1){if((c[r>>2]|0)>>>0>=((c[s>>2]|0)+-15|0)>>>0)break;c[A>>2]=c[z>>2];c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;o=(c[v>>2]|0)+((c[A>>2]&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[w>>2]|0)+(((c[A>>2]|0)>>>8&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[x>>2]|0)+(((c[A>>2]|0)>>>16&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[y>>2]|0)+((c[A>>2]|0)>>>24<<2)|0;c[o>>2]=(c[o>>2]|0)+1;c[A>>2]=c[z>>2];c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;o=(c[v>>2]|0)+((c[A>>2]&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[w>>2]|0)+(((c[A>>2]|0)>>>8&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[x>>2]|0)+(((c[A>>2]|0)>>>16&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[y>>2]|0)+((c[A>>2]|0)>>>24<<2)|0;c[o>>2]=(c[o>>2]|0)+1;c[A>>2]=c[z>>2];c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;o=(c[v>>2]|0)+((c[A>>2]&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[w>>2]|0)+(((c[A>>2]|0)>>>8&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[x>>2]|0)+(((c[A>>2]|0)>>>16&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[y>>2]|0)+((c[A>>2]|0)>>>24<<2)|0;c[o>>2]=(c[o>>2]|0)+1;c[A>>2]=c[z>>2];c[z>>2]=ai(c[r>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+4;o=(c[v>>2]|0)+((c[A>>2]&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[w>>2]|0)+(((c[A>>2]|0)>>>8&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[x>>2]|0)+(((c[A>>2]|0)>>>16&255)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;o=(c[y>>2]|0)+((c[A>>2]|0)>>>24<<2)|0;c[o>>2]=(c[o>>2]|0)+1;}c[r>>2]=(c[r>>2]|0)+-4;while(1){if((c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;A=c[v>>2]|0;z=c[r>>2]|0;c[r>>2]=z+1;o=A+((d[z>>0]|0)<<2)|0;c[o>>2]=(c[o>>2]|0)+1;}a:do{if(c[p>>2]|0){c[B>>2]=255;while(1){if((c[B>>2]|0)>>>0<=(c[t>>2]|0)>>>0)break a;r=(c[v>>2]|0)+(c[B>>2]<<2)|0;c[r>>2]=(c[r>>2]|0)+((c[(c[w>>2]|0)+(c[B>>2]<<2)>>2]|0)+(c[(c[x>>2]|0)+(c[B>>2]<<2)>>2]|0)+(c[(c[y>>2]|0)+(c[B>>2]<<2)>>2]|0));if(c[(c[v>>2]|0)+(c[B>>2]<<2)>>2]|0)break;c[B>>2]=(c[B>>2]|0)+-1;}c[j>>2]=-48;D=c[j>>2]|0;l=i;return D|0;}}while(0);if((c[t>>2]|0)>>>0>255)c[t>>2]=255;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>(c[t>>2]|0)>>>0)break;c[(c[k>>2]|0)+(c[C>>2]<<2)>>2]=(c[(c[v>>2]|0)+(c[C>>2]<<2)>>2]|0)+(c[(c[w>>2]|0)+(c[C>>2]<<2)>>2]|0)+(c[(c[x>>2]|0)+(c[C>>2]<<2)>>2]|0)+(c[(c[y>>2]|0)+(c[C>>2]<<2)>>2]|0);if((c[(c[k>>2]|0)+(c[C>>2]<<2)>>2]|0)>>>0>(c[u>>2]|0)>>>0)c[u>>2]=c[(c[k>>2]|0)+(c[C>>2]<<2)>>2];c[C>>2]=(c[C>>2]|0)+1;}while(1){E=c[t>>2]|0;if(!((c[(c[k>>2]|0)+(c[t>>2]<<2)>>2]|0)!=0^1))break;c[t>>2]=E+-1;}c[c[m>>2]>>2]=E;c[j>>2]=c[u>>2];D=c[j>>2]|0;l=i;return D|0;}function ai(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function bi(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[c[j>>2]>>2]|0)>>>0<255){c[h>>2]=$h(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,1,c[n>>2]|0)|0;o=c[h>>2]|0;l=g;return o|0;}else{c[c[j>>2]>>2]=255;c[h>>2]=_h(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;o=c[h>>2]|0;l=g;return o|0;}return 0;}function ci(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;e=Vh((c[h>>2]|0)-1|0)|0;c[k>>2]=e-(c[j>>2]|0);c[m>>2]=c[g>>2];c[n>>2]=di(c[h>>2]|0,c[i>>2]|0)|0;if(!(c[m>>2]|0))c[m>>2]=11;if((c[k>>2]|0)>>>0<(c[m>>2]|0)>>>0)c[m>>2]=c[k>>2];if((c[n>>2]|0)>>>0>(c[m>>2]|0)>>>0)c[m>>2]=c[n>>2];if((c[m>>2]|0)>>>0<5)c[m>>2]=5;if((c[m>>2]|0)>>>0<=12){o=c[m>>2]|0;l=f;return o|0;}c[m>>2]=12;o=c[m>>2]|0;l=f;return o|0;}function di(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(Vh((c[e>>2]|0)-1|0)|0)+1;c[h>>2]=(Vh(c[f>>2]|0)|0)+2;c[i>>2]=(c[g>>2]|0)>>>0<(c[h>>2]|0)>>>0?c[g>>2]|0:c[h>>2]|0;l=d;return c[i>>2]|0;}function ei(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=ci(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,2)|0;l=e;return d|0;}function fi(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0;h=l;l=l+80|0;i=h+72|0;j=h+68|0;k=h+64|0;m=h+60|0;n=h+56|0;o=h+52|0;p=h+24|0;q=h+16|0;r=h+8|0;s=h+48|0;t=h+44|0;u=h+40|0;v=h+78|0;w=h+36|0;x=h+76|0;z=h;A=h+32|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if(!(c[k>>2]|0))c[k>>2]=11;if((c[k>>2]|0)>>>0<5){c[i>>2]=-1;B=c[i>>2]|0;l=h;return B|0;}if((c[k>>2]|0)>>>0>12){c[i>>2]=-44;B=c[i>>2]|0;l=h;return B|0;}g=c[k>>2]|0;if(g>>>0<(di(c[n>>2]|0,c[o>>2]|0)|0)>>>0){c[i>>2]=-1;B=c[i>>2]|0;l=h;return B|0;}g=p;c[g>>2]=62-(c[k>>2]|0);c[g+4>>2]=0;g=hE(0,1073741824,c[n>>2]|0,0)|0;f=q;c[f>>2]=g;c[f+4>>2]=y;f=p;g=eE(c[f>>2]|0,c[f+4>>2]|0,20,0)|0;f=jE(1,0,g|0)|0;g=r;c[g>>2]=f;c[g+4>>2]=y;c[s>>2]=1<<c[k>>2];c[u>>2]=0;b[v>>1]=0;c[w>>2]=(c[n>>2]|0)>>>(c[k>>2]|0);c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0)==(c[n>>2]|0)){C=12;break;}do{if(!(c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0))b[(c[j>>2]|0)+(c[t>>2]<<1)>>1]=0;else{if((c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0)>>>0<=(c[w>>2]|0)>>>0){b[(c[j>>2]|0)+(c[t>>2]<<1)>>1]=-1;c[s>>2]=(c[s>>2]|0)+-1;break;}g=q;f=cE(c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0,0,c[g>>2]|0,c[g+4>>2]|0)|0;g=iE(f|0,y|0,c[p>>2]|0)|0;b[x>>1]=g;if((b[x>>1]|0)<8){g=r;f=cE(c[g>>2]|0,c[g+4>>2]|0,c[192+(b[x>>1]<<2)>>2]|0,0)|0;g=z;c[g>>2]=f;c[g+4>>2]=y;g=q;f=cE(c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]|0,0,c[g>>2]|0,c[g+4>>2]|0)|0;g=y;e=b[x>>1]|0;d=jE(e|0,((e|0)<0)<<31>>31|0,c[p>>2]|0)|0;e=eE(f|0,g|0,d|0,y|0)|0;d=y;g=z;f=c[g+4>>2]|0;b[x>>1]=(b[x>>1]|0)+((d>>>0>f>>>0|((d|0)==(f|0)?e>>>0>(c[g>>2]|0)>>>0:0))&1);}if((b[x>>1]|0)>(b[v>>1]|0)){b[v>>1]=b[x>>1]|0;c[u>>2]=c[t>>2];}b[(c[j>>2]|0)+(c[t>>2]<<1)>>1]=b[x>>1]|0;c[s>>2]=(c[s>>2]|0)-(b[x>>1]|0);}}while(0);c[t>>2]=(c[t>>2]|0)+1;}if((C|0)==12){c[i>>2]=0;B=c[i>>2]|0;l=h;return B|0;}if((0-(c[s>>2]|0)|0)>=(b[(c[j>>2]|0)+(c[u>>2]<<1)>>1]>>1|0)){c[A>>2]=gi(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;if(hi(c[A>>2]|0)|0){c[i>>2]=c[A>>2];B=c[i>>2]|0;l=h;return B|0;}}else{A=(c[j>>2]|0)+(c[u>>2]<<1)|0;b[A>>1]=(b[A>>1]|0)+((c[s>>2]&65535)<<16>>16);}c[i>>2]=c[k>>2];B=c[i>>2]|0;l=h;return B|0;}function gi(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=l;l=l+112|0;i=h+100|0;j=h+96|0;k=h+92|0;m=h+88|0;n=h+84|0;o=h+80|0;p=h+76|0;q=h+72|0;r=h+68|0;s=h+64|0;t=h+60|0;u=h+56|0;v=h+52|0;w=h+32|0;x=h+24|0;z=h+16|0;A=h+8|0;B=h;C=h+48|0;D=h+44|0;E=h+40|0;c[j>>2]=a;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;b[h+104>>1]=-2;c[q>>2]=0;c[s>>2]=(c[n>>2]|0)>>>(c[k>>2]|0);c[t>>2]=((c[n>>2]|0)*3|0)>>>((c[k>>2]|0)+1|0);c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;do{if(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0){if((c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)>>>0<=(c[s>>2]|0)>>>0){b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=-1;c[q>>2]=(c[q>>2]|0)+1;c[n>>2]=(c[n>>2]|0)-(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0);break;}g=(c[j>>2]|0)+(c[p>>2]<<1)|0;if((c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)>>>0<=(c[t>>2]|0)>>>0){b[g>>1]=1;c[q>>2]=(c[q>>2]|0)+1;c[n>>2]=(c[n>>2]|0)-(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0);break;}else{b[g>>1]=-2;break;}}else b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=0;}while(0);c[p>>2]=(c[p>>2]|0)+1;}c[r>>2]=(1<<c[k>>2])-(c[q>>2]|0);if((((c[n>>2]|0)>>>0)/((c[r>>2]|0)>>>0)|0)>>>0>(c[t>>2]|0)>>>0){c[t>>2]=(((c[n>>2]|0)*3|0)>>>0)/(c[r>>2]<<1>>>0)|0;c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]|0)==-2?(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)>>>0<=(c[t>>2]|0)>>>0:0){b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=1;c[q>>2]=(c[q>>2]|0)+1;c[n>>2]=(c[n>>2]|0)-(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0);}c[p>>2]=(c[p>>2]|0)+1;}c[r>>2]=(1<<c[k>>2])-(c[q>>2]|0);}if((c[q>>2]|0)==((c[o>>2]|0)+1|0)){c[u>>2]=0;c[v>>2]=0;c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>(c[o>>2]|0)>>>0)break;if((c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)>>>0>(c[v>>2]|0)>>>0){c[u>>2]=c[p>>2];c[v>>2]=c[(c[m>>2]|0)+(c[p>>2]<<2)>>2];}c[p>>2]=(c[p>>2]|0)+1;}v=(c[j>>2]|0)+(c[u>>2]<<1)|0;b[v>>1]=(b[v>>1]|0)+((c[r>>2]&65535)<<16>>16);c[i>>2]=0;F=c[i>>2]|0;l=h;return F|0;}if(!(c[n>>2]|0)){c[p>>2]=0;while(1){if((c[r>>2]|0)>>>0<=0)break;if((b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]|0)>0){c[r>>2]=(c[r>>2]|0)+-1;v=(c[j>>2]|0)+(c[p>>2]<<1)|0;b[v>>1]=(b[v>>1]|0)+1<<16>>16;}c[p>>2]=(((c[p>>2]|0)+1|0)>>>0)%(((c[o>>2]|0)+1|0)>>>0)|0;}c[i>>2]=0;F=c[i>>2]|0;l=h;return F|0;}v=w;c[v>>2]=62-(c[k>>2]|0);c[v+4>>2]=0;v=w;k=eE(c[v>>2]|0,c[v+4>>2]|0,1,0)|0;v=jE(1,0,k|0)|0;k=eE(v|0,y|0,1,0)|0;v=x;c[v>>2]=k;c[v+4>>2]=y;v=jE(1,0,c[w>>2]|0)|0;k=cE(v|0,y|0,c[r>>2]|0,0)|0;r=x;v=dE(k|0,y|0,c[r>>2]|0,c[r+4>>2]|0)|0;r=hE(v|0,y|0,c[n>>2]|0,0)|0;n=z;c[n>>2]=r;c[n+4>>2]=y;n=x;x=c[n+4>>2]|0;r=A;c[r>>2]=c[n>>2];c[r+4>>2]=x;c[p>>2]=0;while(1){if((c[p>>2]|0)>>>0>(c[o>>2]|0)>>>0){G=40;break;}if((b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]|0)==-2){x=A;r=c[x>>2]|0;n=c[x+4>>2]|0;x=z;v=cE(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0,0,c[x>>2]|0,c[x+4>>2]|0)|0;x=dE(r|0,n|0,v|0,y|0)|0;v=B;c[v>>2]=x;c[v+4>>2]=y;v=A;x=iE(c[v>>2]|0,c[v+4>>2]|0,c[w>>2]|0)|0;c[C>>2]=x;x=B;v=iE(c[x>>2]|0,c[x+4>>2]|0,c[w>>2]|0)|0;c[D>>2]=v;c[E>>2]=(c[D>>2]|0)-(c[C>>2]|0);if((c[E>>2]|0)>>>0<1){G=37;break;}b[(c[j>>2]|0)+(c[p>>2]<<1)>>1]=c[E>>2];v=B;x=c[v+4>>2]|0;n=A;c[n>>2]=c[v>>2];c[n+4>>2]=x;}c[p>>2]=(c[p>>2]|0)+1;}if((G|0)==37){c[i>>2]=-1;F=c[i>>2]|0;l=h;return F|0;}else if((G|0)==40){c[i>>2]=0;F=c[i>>2]|0;l=h;return F|0;}return 0;}function hi(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function ii(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+32|0;h=g+16|0;i=g+20|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[h>>2]=e;a[i>>0]=f;c[j>>2]=c[h>>2];c[k>>2]=(c[j>>2]|0)+4;c[m>>2]=(c[j>>2]|0)+8;c[n>>2]=c[m>>2];b[(c[k>>2]|0)+-4>>1]=0;b[(c[k>>2]|0)+-2>>1]=d[i>>0]|0;b[c[k>>2]>>1]=0;b[(c[k>>2]|0)+2>>1]=0;c[(c[n>>2]|0)+((d[i>>0]|0)<<3)+4>>2]=0;c[(c[n>>2]|0)+((d[i>>0]|0)<<3)>>2]=0;l=g;return 0;}function ji(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=(c[j>>2]|0)>>>0>=((c[m>>2]|0)+((c[m>>2]|0)>>>7)|0)>>>0&1;f=c[i>>2]|0;i=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;if(c[o>>2]|0){c[h>>2]=ki(f,i,j,k,m,1)|0;p=c[h>>2]|0;l=g;return p|0;}else{c[h>>2]=ki(f,i,j,k,m,0)|0;p=c[h>>2]|0;l=g;return p|0;}return 0;}function ki(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;i=l;l=l+112|0;j=i+96|0;k=i+92|0;m=i+88|0;n=i+84|0;o=i+80|0;p=i+76|0;q=i+72|0;r=i+68|0;s=i+64|0;t=i+60|0;u=i+40|0;v=i+24|0;w=i+8|0;x=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)+(c[o>>2]|0);c[t>>2]=c[s>>2];if((c[o>>2]|0)>>>0<=2){c[j>>2]=0;y=c[j>>2]|0;l=i;return y|0;}c[x>>2]=li(u,c[k>>2]|0,c[m>>2]|0)|0;if(hi(c[x>>2]|0)|0){c[j>>2]=0;y=c[j>>2]|0;l=i;return y|0;}x=(c[o>>2]&1|0)!=0;m=c[p>>2]|0;k=(c[t>>2]|0)+-1|0;c[t>>2]=k;s=d[k>>0]|0;do{if(x){mi(v,m,s);k=c[p>>2]|0;n=(c[t>>2]|0)+-1|0;c[t>>2]=n;mi(w,k,d[n>>0]|0);n=(c[t>>2]|0)+-1|0;c[t>>2]=n;ni(u,v,d[n>>0]|0);if(c[q>>2]|0){oi(u);break;}else{pi(u);break;}}else{mi(w,m,s);n=c[p>>2]|0;k=(c[t>>2]|0)+-1|0;c[t>>2]=k;mi(v,n,d[k>>0]|0);}}while(0);c[o>>2]=(c[o>>2]|0)-2;while(1){if((c[t>>2]|0)>>>0<=(c[r>>2]|0)>>>0)break;o=(c[t>>2]|0)+-1|0;c[t>>2]=o;ni(u,w,d[o>>0]|0);o=(c[t>>2]|0)+-1|0;c[t>>2]=o;ni(u,v,d[o>>0]|0);if(c[q>>2]|0)oi(u);else pi(u);}qi(u,w);qi(u,v);c[j>>2]=ri(u)|0;y=c[j>>2]|0;l=i;return y|0;}function li(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[c[g>>2]>>2]=0;c[(c[g>>2]|0)+4>>2]=0;c[(c[g>>2]|0)+8>>2]=c[h>>2];c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+8>>2];c[(c[g>>2]|0)+16>>2]=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]|0)+-4;if((c[i>>2]|0)>>>0<=4){c[f>>2]=-70;j=c[f>>2]|0;l=e;return j|0;}else{c[f>>2]=0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function mi(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;Di(c[g>>2]|0,c[h>>2]|0);h=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]<<3)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[k>>2]=c[(c[g>>2]|0)+4>>2];c[m>>2]=((c[j+4>>2]|0)+32768|0)>>>16;c[c[g>>2]>>2]=(c[m>>2]<<16)-(c[j+4>>2]|0);c[c[g>>2]>>2]=e[(c[k>>2]|0)+((c[c[g>>2]>>2]>>c[m>>2])+(c[j>>2]|0)<<1)>>1];l=f;return;}function ni(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;d=(c[(c[h>>2]|0)+8>>2]|0)+(c[i>>2]<<3)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[k>>2]=c[(c[h>>2]|0)+4>>2];c[m>>2]=((c[c[h>>2]>>2]|0)+(c[j+4>>2]|0)|0)>>>16;ti(c[g>>2]|0,c[c[h>>2]>>2]|0,c[m>>2]|0);c[c[h>>2]>>2]=e[(c[k>>2]|0)+((c[c[h>>2]>>2]>>c[m>>2])+(c[j>>2]|0)<<1)>>1];l=f;return;}function oi(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[(c[d>>2]|0)+4>>2]|0)>>>3;ui(c[(c[d>>2]|0)+12>>2]|0,c[c[d>>2]>>2]|0);a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);a=(c[d>>2]|0)+4|0;c[a>>2]=c[a>>2]&7;a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)>>>(c[e>>2]<<3);l=b;return;}function pi(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[(c[d>>2]|0)+4>>2]|0)>>>3;ui(c[(c[d>>2]|0)+12>>2]|0,c[c[d>>2]>>2]|0);a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);if((c[(c[d>>2]|0)+12>>2]|0)>>>0>(c[(c[d>>2]|0)+16>>2]|0)>>>0)c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+16>>2];a=(c[d>>2]|0)+4|0;c[a>>2]=c[a>>2]&7;a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)>>>(c[e>>2]<<3);l=b;return;}function qi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;ti(c[e>>2]|0,c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+12>>2]|0);pi(c[e>>2]|0);l=d;return;}function ri(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;si(c[e>>2]|0,1,1);pi(c[e>>2]|0);if((c[(c[e>>2]|0)+12>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{c[d>>2]=(c[(c[e>>2]|0)+12>>2]|0)-(c[(c[e>>2]|0)+8>>2]|0)+((c[(c[e>>2]|0)+4>>2]|0)>>>0>0&1);f=c[d>>2]|0;l=b;return f|0;}return 0;}function si(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|c[g>>2]<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function ti(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|(c[g>>2]&c[2800+(c[h>>2]<<2)>>2])<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function ui(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(vi()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){wi(a,e);l=d;return;}else{xi(a,e,0);l=d;return;}}function vi(){return 1;}function wi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(yi()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){Bi(a,e);l=d;return;}else{Bi(a,Ci(e)|0);l=d;return;}}function xi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=(yi()|0)!=0;a=c[f>>2]|0;f=g;g=c[f>>2]|0;b=c[f+4>>2]|0;if(d){zi(a,g,b);l=e;return;}else{d=Ai(g,b)|0;zi(a,d,y);l=e;return;}}function yi(){return d[11936]|0|0;}function zi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+8|0;h=f;c[g>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;h=c[e>>2]|0;b=c[e+4>>2]|0;e=c[g>>2]|0;g=e;a[g>>0]=h;a[g+1>>0]=h>>8;a[g+2>>0]=h>>16;a[g+3>>0]=h>>24;h=e+4|0;a[h>>0]=b;a[h+1>>0]=b>>8;a[h+2>>0]=b>>16;a[h+3>>0]=b>>24;l=f;return;}function Ai(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Bi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[g>>2]|0;g=c[f>>2]|0;a[g>>0]=d;a[g+1>>0]=d>>8;a[g+2>>0]=d>>16;a[g+3>>0]=d>>24;l=e;return;}function Ci(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Di(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[f>>2];c[h>>2]=c[g>>2];c[i>>2]=(Ei(c[g>>2]|0)|0)&65535;c[c[e>>2]>>2]=1<<c[i>>2];c[(c[e>>2]|0)+4>>2]=(c[h>>2]|0)+4;if(c[i>>2]|0)j=1<<(c[i>>2]|0)-1;else j=1;c[(c[e>>2]|0)+8>>2]=(c[f>>2]|0)+4+(j<<2);c[(c[e>>2]|0)+12>>2]=c[i>>2];l=d;return;}function Ei(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Fi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=ci(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,1)|0;l=e;return d|0;}function Gi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=l;l=l+464|0;g=f+452|0;h=f+448|0;i=f+444|0;j=f+440|0;k=f+436|0;m=f+432|0;n=f+428|0;o=f+424|0;p=f+420|0;q=f+416|0;r=f+160|0;s=f+32|0;t=f;u=f+412|0;v=f+408|0;w=f+404|0;x=f+400|0;y=f+396|0;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[h>>2];c[n>>2]=c[m>>2];c[o>>2]=(c[m>>2]|0)+(c[i>>2]|0);c[p>>2]=12;c[q>>2]=6;if((c[k>>2]|0)>>>0<=1){c[g>>2]=0;z=c[g>>2]|0;l=f;return z|0;}c[u>>2]=Zh(s,p,c[j>>2]|0,c[k>>2]|0)|0;i=(Hi(c[u>>2]|0)|0)!=0;h=c[u>>2]|0;if(i){c[g>>2]=h;z=c[g>>2]|0;l=f;return z|0;}if((h|0)==(c[k>>2]|0)){c[g>>2]=1;z=c[g>>2]|0;l=f;return z|0;}if((c[u>>2]|0)==1){c[g>>2]=0;z=c[g>>2]|0;l=f;return z|0;}c[q>>2]=ei(c[q>>2]|0,c[k>>2]|0,c[p>>2]|0)|0;c[v>>2]=fi(t,c[q>>2]|0,s,c[k>>2]|0,c[p>>2]|0)|0;if(Hi(c[v>>2]|0)|0){c[g>>2]=c[v>>2];z=c[g>>2]|0;l=f;return z|0;}c[w>>2]=Xh(c[n>>2]|0,(c[o>>2]|0)-(c[n>>2]|0)|0,t,c[p>>2]|0,c[q>>2]|0)|0;v=(Hi(c[w>>2]|0)|0)!=0;s=c[w>>2]|0;if(v){c[g>>2]=s;z=c[g>>2]|0;l=f;return z|0;}c[n>>2]=(c[n>>2]|0)+s;c[x>>2]=Uh(r,t,c[p>>2]|0,c[q>>2]|0,f+96|0,64)|0;if(Hi(c[x>>2]|0)|0){c[g>>2]=c[x>>2];z=c[g>>2]|0;l=f;return z|0;}c[y>>2]=ji(c[n>>2]|0,(c[o>>2]|0)-(c[n>>2]|0)|0,c[j>>2]|0,c[k>>2]|0,r)|0;r=(Hi(c[y>>2]|0)|0)!=0;k=c[y>>2]|0;if(r){c[g>>2]=k;z=c[g>>2]|0;l=f;return z|0;}if(!k){c[g>>2]=0;z=c[g>>2]|0;l=f;return z|0;}else{c[n>>2]=(c[n>>2]|0)+(c[y>>2]|0);c[g>>2]=(c[n>>2]|0)-(c[m>>2]|0);z=c[g>>2]|0;l=f;return z|0;}return 0;}function Hi(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function Ii(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;i=l;l=l+320|0;j=i+288|0;k=i+284|0;m=i+280|0;n=i+276|0;o=i+272|0;p=i+268|0;q=i+292|0;r=i;s=i+264|0;t=i+260|0;u=i+256|0;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;c[s>>2]=c[k>>2];if((c[o>>2]|0)>>>0>255){c[j>>2]=-46;v=c[j>>2]|0;l=i;return v|0;}a[q>>0]=0;c[t>>2]=1;while(1){if((c[t>>2]|0)>>>0>=((c[p>>2]|0)+1|0)>>>0)break;a[q+(c[t>>2]|0)>>0]=(c[p>>2]|0)+1-(c[t>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;a[r+(c[t>>2]|0)>>0]=a[q+(d[(c[n>>2]|0)+(c[t>>2]<<2)+2>>0]|0)>>0]|0;c[t>>2]=(c[t>>2]|0)+1;}c[u>>2]=Gi((c[s>>2]|0)+1|0,(c[m>>2]|0)-1|0,r,c[o>>2]|0)|0;n=(Hi(c[u>>2]|0)|0)!=0;q=c[u>>2]|0;if(n){c[j>>2]=q;v=c[j>>2]|0;l=i;return v|0;}if((q>>>0>1?(c[u>>2]|0)>>>0<(((c[o>>2]|0)>>>0)/2|0)>>>0:0)|0){a[c[s>>2]>>0]=c[u>>2];c[j>>2]=(c[u>>2]|0)+1;v=c[j>>2]|0;l=i;return v|0;}if((c[o>>2]|0)>>>0>128){c[j>>2]=-1;v=c[j>>2]|0;l=i;return v|0;}if((((((c[o>>2]|0)+1|0)>>>0)/2|0)+1|0)>>>0>(c[m>>2]|0)>>>0){c[j>>2]=-70;v=c[j>>2]|0;l=i;return v|0;}a[c[s>>2]>>0]=128+((c[o>>2]|0)-1);a[r+(c[o>>2]|0)>>0]=0;c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;a[(c[s>>2]|0)+((((c[t>>2]|0)>>>0)/2|0)+1)>>0]=((d[r+(c[t>>2]|0)>>0]|0)<<4)+(d[r+((c[t>>2]|0)+1)>>0]|0);c[t>>2]=(c[t>>2]|0)+2;}c[j>>2]=((((c[o>>2]|0)+1|0)>>>0)/2|0)+1;v=c[j>>2]|0;l=i;return v|0;}function Ji(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;j=l;l=l+464|0;k=j+444|0;m=j+440|0;n=j+436|0;o=j+432|0;p=j+428|0;q=j+128|0;r=j+64|0;s=j+424|0;t=j+420|0;u=j+416|0;v=j+412|0;w=j+408|0;x=j+404|0;y=j+400|0;z=j+396|0;A=j+32|0;B=j;C=j+392|0;D=j+448|0;E=j+388|0;F=j+384|0;c[m>>2]=f;c[n>>2]=g;c[o>>2]=h;c[p>>2]=i;c[s>>2]=0;c[t>>2]=0;c[u>>2]=fh(q,256,r,t,s,c[o>>2]|0,c[p>>2]|0)|0;if(Hi(c[u>>2]|0)|0){c[k>>2]=c[u>>2];G=c[k>>2]|0;l=j;return G|0;}if((c[s>>2]|0)>>>0>12){c[k>>2]=-44;G=c[k>>2]|0;l=j;return G|0;}if((c[t>>2]|0)>>>0>((c[c[n>>2]>>2]|0)+1|0)>>>0){c[k>>2]=-48;G=c[k>>2]|0;l=j;return G|0;}c[w>>2]=0;c[v>>2]=1;while(1){if((c[v>>2]|0)>>>0>(c[s>>2]|0)>>>0)break;c[x>>2]=c[w>>2];c[w>>2]=(c[w>>2]|0)+(c[r+(c[v>>2]<<2)>>2]<<(c[v>>2]|0)-1);c[r+(c[v>>2]<<2)>>2]=c[x>>2];c[v>>2]=(c[v>>2]|0)+1;}c[y>>2]=0;while(1){if((c[y>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;c[z>>2]=d[q+(c[y>>2]|0)>>0];a[(c[m>>2]|0)+(c[y>>2]<<2)+2>>0]=(c[s>>2]|0)+1-(c[z>>2]|0);c[y>>2]=(c[y>>2]|0)+1;}c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;c[A+16>>2]=0;c[A+20>>2]=0;c[A+24>>2]=0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[B+24>>2]=0;c[C>>2]=0;while(1){if((c[C>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;y=A+((d[(c[m>>2]|0)+(c[C>>2]<<2)+2>>0]|0)<<1)|0;b[y>>1]=(b[y>>1]|0)+1<<16>>16;c[C>>2]=(c[C>>2]|0)+1;}b[B+((c[s>>2]|0)+1<<1)>>1]=0;b[D>>1]=0;c[E>>2]=c[s>>2];while(1){if((c[E>>2]|0)>>>0<=0)break;b[B+(c[E>>2]<<1)>>1]=b[D>>1]|0;b[D>>1]=(e[D>>1]|0)+(e[A+(c[E>>2]<<1)>>1]|0);b[D>>1]=(e[D>>1]|0)>>1;c[E>>2]=(c[E>>2]|0)+-1;}c[F>>2]=0;while(1){if((c[F>>2]|0)>>>0>=(c[t>>2]|0)>>>0)break;E=B+((d[(c[m>>2]|0)+(c[F>>2]<<2)+2>>0]|0)<<1)|0;D=b[E>>1]|0;b[E>>1]=D+1<<16>>16;b[(c[m>>2]|0)+(c[F>>2]<<2)>>1]=D;c[F>>2]=(c[F>>2]|0)+1;}c[c[n>>2]>>2]=(c[t>>2]|0)-1;c[k>>2]=c[u>>2];G=c[k>>2]|0;l=j;return G|0;}function Ki(f,g,h,i,j,k){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;m=l;l=l+128|0;n=m+120|0;o=m+116|0;p=m+112|0;q=m+108|0;r=m+104|0;s=m+100|0;t=m+96|0;u=m+92|0;v=m+88|0;w=m+84|0;x=m+80|0;y=m+76|0;z=m+72|0;A=m+126|0;B=m+68|0;C=m+64|0;D=m+60|0;E=m+32|0;F=m;G=m+124|0;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=j;c[t>>2]=k;c[u>>2]=c[s>>2];c[v>>2]=(c[u>>2]|0)+8;b[A>>1]=256;if(c[s>>2]&3|0){c[n>>2]=-1;H=c[n>>2]|0;l=m;return H|0;}if((c[t>>2]|0)>>>0<4096){c[n>>2]=-66;H=c[n>>2]|0;l=m;return H|0;}if(!(c[r>>2]|0))c[r>>2]=11;if((c[q>>2]|0)>>>0>255){c[n>>2]=-46;H=c[n>>2]|0;l=m;return H|0;}oE(c[u>>2]|0,0,4096)|0;Li(c[v>>2]|0,c[p>>2]|0,c[q>>2]|0);c[x>>2]=c[q>>2];while(1){I=c[x>>2]|0;if(c[(c[v>>2]|0)+(c[x>>2]<<3)>>2]|0)break;c[x>>2]=I+-1;}c[y>>2]=I;c[B>>2]=(e[A>>1]|0)+(c[y>>2]|0)-1;c[z>>2]=e[A>>1];c[(c[v>>2]|0)+((e[A>>1]|0)<<3)>>2]=(c[(c[v>>2]|0)+(c[y>>2]<<3)>>2]|0)+(c[(c[v>>2]|0)+((c[y>>2]|0)-1<<3)>>2]|0);I=b[A>>1]|0;b[(c[v>>2]|0)+((c[y>>2]|0)-1<<3)+4>>1]=I;b[(c[v>>2]|0)+(c[y>>2]<<3)+4>>1]=I;b[A>>1]=(b[A>>1]|0)+1<<16>>16;c[y>>2]=(c[y>>2]|0)-2;c[w>>2]=e[A>>1];while(1){if((c[w>>2]|0)>>>0>(c[B>>2]|0)>>>0)break;c[(c[v>>2]|0)+(c[w>>2]<<3)>>2]=1073741824;c[w>>2]=(c[w>>2]|0)+1;}c[c[u>>2]>>2]=-2147483648;while(1){J=c[v>>2]|0;if((e[A>>1]|0)>>>0>(c[B>>2]|0)>>>0)break;if((c[J+(c[y>>2]<<3)>>2]|0)>>>0<(c[(c[v>>2]|0)+(c[z>>2]<<3)>>2]|0)>>>0){u=c[y>>2]|0;c[y>>2]=u+-1;K=u;}else{u=c[z>>2]|0;c[z>>2]=u+1;K=u;}c[C>>2]=K;if((c[(c[v>>2]|0)+(c[y>>2]<<3)>>2]|0)>>>0<(c[(c[v>>2]|0)+(c[z>>2]<<3)>>2]|0)>>>0){u=c[y>>2]|0;c[y>>2]=u+-1;L=u;}else{u=c[z>>2]|0;c[z>>2]=u+1;L=u;}c[D>>2]=L;c[(c[v>>2]|0)+((e[A>>1]|0)<<3)>>2]=(c[(c[v>>2]|0)+(c[C>>2]<<3)>>2]|0)+(c[(c[v>>2]|0)+(c[D>>2]<<3)>>2]|0);u=b[A>>1]|0;b[(c[v>>2]|0)+(c[D>>2]<<3)+4>>1]=u;b[(c[v>>2]|0)+(c[C>>2]<<3)+4>>1]=u;b[A>>1]=(b[A>>1]|0)+1<<16>>16;}a[J+(c[B>>2]<<3)+7>>0]=0;c[w>>2]=(c[B>>2]|0)-1;while(1){if((c[w>>2]|0)>>>0<256)break;a[(c[v>>2]|0)+(c[w>>2]<<3)+7>>0]=(d[(c[v>>2]|0)+((e[(c[v>>2]|0)+(c[w>>2]<<3)+4>>1]|0)<<3)+7>>0]|0)+1;c[w>>2]=(c[w>>2]|0)+-1;}c[w>>2]=0;while(1){M=c[v>>2]|0;if((c[w>>2]|0)>>>0>(c[x>>2]|0)>>>0)break;a[(c[v>>2]|0)+(c[w>>2]<<3)+7>>0]=(d[M+((e[(c[v>>2]|0)+(c[w>>2]<<3)+4>>1]|0)<<3)+7>>0]|0)+1;c[w>>2]=(c[w>>2]|0)+1;}c[r>>2]=Mi(M,c[x>>2]|0,c[r>>2]|0)|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;c[E+16>>2]=0;c[E+20>>2]=0;b[E+24>>1]=0;c[F>>2]=0;c[F+4>>2]=0;c[F+8>>2]=0;c[F+12>>2]=0;c[F+16>>2]=0;c[F+20>>2]=0;b[F+24>>1]=0;if((c[r>>2]|0)>>>0>12){c[n>>2]=-1;H=c[n>>2]|0;l=m;return H|0;}c[w>>2]=0;while(1){if((c[w>>2]|0)>>>0>(c[x>>2]|0)>>>0)break;M=E+((d[(c[v>>2]|0)+(c[w>>2]<<3)+7>>0]|0)<<1)|0;b[M>>1]=(b[M>>1]|0)+1<<16>>16;c[w>>2]=(c[w>>2]|0)+1;}b[G>>1]=0;c[w>>2]=c[r>>2];while(1){if((c[w>>2]|0)>>>0<=0)break;b[F+(c[w>>2]<<1)>>1]=b[G>>1]|0;b[G>>1]=(e[G>>1]|0)+(e[E+(c[w>>2]<<1)>>1]|0);b[G>>1]=(e[G>>1]|0)>>1;c[w>>2]=(c[w>>2]|0)+-1;}c[w>>2]=0;while(1){if((c[w>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;a[(c[o>>2]|0)+((d[(c[v>>2]|0)+(c[w>>2]<<3)+6>>0]|0)<<2)+2>>0]=a[(c[v>>2]|0)+(c[w>>2]<<3)+7>>0]|0;c[w>>2]=(c[w>>2]|0)+1;}c[w>>2]=0;while(1){if((c[w>>2]|0)>>>0>(c[q>>2]|0)>>>0)break;v=F+((d[(c[o>>2]|0)+(c[w>>2]<<2)+2>>0]|0)<<1)|0;G=b[v>>1]|0;b[v>>1]=G+1<<16>>16;b[(c[o>>2]|0)+(c[w>>2]<<2)>>1]=G;c[w>>2]=(c[w>>2]|0)+1;}c[n>>2]=c[r>>2];H=c[n>>2]|0;l=m;return H|0;}function Li(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+288|0;g=f+284|0;h=f+280|0;i=f+276|0;j=f;k=f+272|0;m=f+268|0;n=f+264|0;o=f+260|0;p=f+256|0;c[g>>2]=b;c[h>>2]=d;c[i>>2]=e;oE(j|0,0,256)|0;c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0)break;c[m>>2]=Ni((c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)+1|0)|0;e=j+(c[m>>2]<<3)|0;c[e>>2]=(c[e>>2]|0)+1;c[k>>2]=(c[k>>2]|0)+1;}c[k>>2]=30;while(1){if((c[k>>2]|0)>>>0<=0)break;m=j+((c[k>>2]|0)-1<<3)|0;c[m>>2]=(c[m>>2]|0)+(c[j+(c[k>>2]<<3)>>2]|0);c[k>>2]=(c[k>>2]|0)+-1;}c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>=32)break;c[j+(c[k>>2]<<3)+4>>2]=c[j+(c[k>>2]<<3)>>2];c[k>>2]=(c[k>>2]|0)+1;}c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>(c[i>>2]|0)>>>0)break;c[n>>2]=c[(c[h>>2]|0)+(c[k>>2]<<2)>>2];c[o>>2]=(Ni((c[n>>2]|0)+1|0)|0)+1;m=j+(c[o>>2]<<3)+4|0;e=c[m>>2]|0;c[m>>2]=e+1;c[p>>2]=e;while(1){if((c[p>>2]|0)>>>0<=(c[j+(c[o>>2]<<3)>>2]|0)>>>0)break;if((c[n>>2]|0)>>>0<=(c[(c[g>>2]|0)+((c[p>>2]|0)-1<<3)>>2]|0)>>>0)break;e=(c[g>>2]|0)+(c[p>>2]<<3)|0;m=(c[g>>2]|0)+((c[p>>2]|0)-1<<3)|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[p>>2]=(c[p>>2]|0)+-1;}c[(c[g>>2]|0)+(c[p>>2]<<3)>>2]=c[n>>2];a[(c[g>>2]|0)+(c[p>>2]<<3)+6>>0]=c[k>>2];c[k>>2]=(c[k>>2]|0)+1;}l=f;return;}function Mi(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=l;l=l+128|0;h=g+116|0;i=g+112|0;j=g+108|0;k=g+104|0;m=g+100|0;n=g+96|0;o=g+92|0;p=g+88|0;q=g+84|0;r=g;s=g+80|0;t=g+76|0;u=g+72|0;v=g+68|0;w=g+64|0;x=g+60|0;y=g+56|0;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=d[(c[i>>2]|0)+(c[j>>2]<<3)+7>>0];if((c[m>>2]|0)>>>0<=(c[k>>2]|0)>>>0){c[h>>2]=c[m>>2];z=c[h>>2]|0;l=g;return z|0;}c[n>>2]=0;c[o>>2]=1<<(c[m>>2]|0)-(c[k>>2]|0);c[p>>2]=c[j>>2];while(1){if((d[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]|0)>>>0<=(c[k>>2]|0)>>>0)break;c[n>>2]=(c[n>>2]|0)+((c[o>>2]|0)-(1<<(c[m>>2]|0)-(d[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]|0)));a[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]=c[k>>2];c[p>>2]=(c[p>>2]|0)+-1;}while(1){if((d[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]|0|0)!=(c[k>>2]|0))break;c[p>>2]=(c[p>>2]|0)+-1;}c[n>>2]=c[n>>2]>>(c[m>>2]|0)-(c[k>>2]|0);c[q>>2]=-252645136;q=r;m=q+56|0;do{c[q>>2]=-252645136;q=q+4|0;}while((q|0)<(m|0));c[t>>2]=c[k>>2];c[s>>2]=c[p>>2];while(1){if((c[s>>2]|0)<0)break;if((d[(c[i>>2]|0)+(c[s>>2]<<3)+7>>0]|0)>>>0<(c[t>>2]|0)>>>0){c[t>>2]=d[(c[i>>2]|0)+(c[s>>2]<<3)+7>>0];c[r+((c[k>>2]|0)-(c[t>>2]|0)<<2)>>2]=c[s>>2];}c[s>>2]=(c[s>>2]|0)+-1;}while(1){if((c[n>>2]|0)<=0)break;c[u>>2]=(Ni(c[n>>2]|0)|0)+1;while(1){if((c[u>>2]|0)>>>0<=1)break;c[v>>2]=c[r+(c[u>>2]<<2)>>2];c[w>>2]=c[r+((c[u>>2]|0)-1<<2)>>2];if((c[v>>2]|0)!=-252645136){if((c[w>>2]|0)==-252645136)break;c[x>>2]=c[(c[i>>2]|0)+(c[v>>2]<<3)>>2];c[y>>2]=c[(c[i>>2]|0)+(c[w>>2]<<3)>>2]<<1;if((c[x>>2]|0)>>>0<=(c[y>>2]|0)>>>0)break;}c[u>>2]=(c[u>>2]|0)+-1;}while(1){if((c[u>>2]|0)>>>0<=12)A=(c[r+(c[u>>2]<<2)>>2]|0)==-252645136;else A=0;B=c[u>>2]|0;if(!A)break;c[u>>2]=B+1;}c[n>>2]=(c[n>>2]|0)-(1<<B-1);if((c[r+((c[u>>2]|0)-1<<2)>>2]|0)==-252645136)c[r+((c[u>>2]|0)-1<<2)>>2]=c[r+(c[u>>2]<<2)>>2];s=(c[i>>2]|0)+(c[r+(c[u>>2]<<2)>>2]<<3)+7|0;a[s>>0]=(a[s>>0]|0)+1<<24>>24;s=r+(c[u>>2]<<2)|0;if(c[r+(c[u>>2]<<2)>>2]|0){c[s>>2]=(c[s>>2]|0)+-1;if((d[(c[i>>2]|0)+(c[r+(c[u>>2]<<2)>>2]<<3)+7>>0]|0|0)!=((c[k>>2]|0)-(c[u>>2]|0)|0))c[r+(c[u>>2]<<2)>>2]=-252645136;}else c[s>>2]=-252645136;}while(1){if((c[n>>2]|0)>=0)break;if((c[r+4>>2]|0)!=-252645136){u=(c[i>>2]|0)+((c[r+4>>2]|0)+1<<3)+7|0;a[u>>0]=(a[u>>0]|0)+-1<<24>>24;u=r+4|0;c[u>>2]=(c[u>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1;continue;}while(1){if((d[(c[i>>2]|0)+(c[p>>2]<<3)+7>>0]|0|0)!=(c[k>>2]|0))break;c[p>>2]=(c[p>>2]|0)+-1;}u=(c[i>>2]|0)+((c[p>>2]|0)+1<<3)+7|0;a[u>>0]=(a[u>>0]|0)+-1<<24>>24;c[r+4>>2]=(c[p>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1;}c[h>>2]=c[k>>2];z=c[h>>2]|0;l=g;return z|0;}function Ni(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Oi(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[j>>2]|0;j=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;if(c[p>>2]|0){c[i>>2]=Pi(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}else{c[i>>2]=Qi(g,j,k,m,n)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function Pi(a,b,f,g,h){a=a|0;b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;i=l;l=l+176|0;j=i+168|0;k=i+164|0;m=i+160|0;n=i+156|0;o=i+152|0;p=i+148|0;q=i+144|0;r=i+140|0;s=i+136|0;t=i+132|0;u=i+128|0;v=i+124|0;w=i+120|0;x=i+116|0;y=i+112|0;z=i+108|0;A=i+104|0;B=i+100|0;C=i+96|0;D=i+92|0;E=i+88|0;F=i+84|0;G=i+80|0;H=i+76|0;I=i+72|0;J=i+68|0;K=i+64|0;L=i+60|0;M=i+56|0;N=i+52|0;O=i+48|0;P=i+44|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[S>>2]=a;c[T>>2]=b;c[U>>2]=f;c[V>>2]=g;c[W>>2]=h;h=c[T>>2]|0;T=c[U>>2]|0;U=c[V>>2]|0;V=c[W>>2]|0;c[G>>2]=c[S>>2];c[H>>2]=h;c[I>>2]=T;c[J>>2]=U;c[K>>2]=V;c[L>>2]=c[I>>2];c[M>>2]=c[G>>2];c[N>>2]=(c[M>>2]|0)+(c[H>>2]|0);c[O>>2]=c[M>>2];if((c[H>>2]|0)>>>0<8){c[F>>2]=0;X=c[F>>2]|0;l=i;return X|0;}c[R>>2]=Ri(Q,c[O>>2]|0,(c[N>>2]|0)-(c[O>>2]|0)|0)|0;if(Hi(c[R>>2]|0)|0){c[F>>2]=0;X=c[F>>2]|0;l=i;return X|0;}c[P>>2]=c[J>>2]&-4;switch(c[J>>2]&3|0){case 3:{J=d[(c[L>>2]|0)+((c[P>>2]|0)+2)>>0]|0;R=c[K>>2]|0;c[C>>2]=Q;c[D>>2]=J;c[E>>2]=R;Si(c[C>>2]|0,e[(c[E>>2]|0)+(c[D>>2]<<2)>>1]|0,d[(c[E>>2]|0)+(c[D>>2]<<2)+2>>0]|0);Ti(Q);Y=7;break;}case 2:{Y=7;break;}case 1:{Y=8;break;}case 0:break;default:{}}if((Y|0)==7){D=d[(c[L>>2]|0)+((c[P>>2]|0)+1)>>0]|0;E=c[K>>2]|0;c[z>>2]=Q;c[A>>2]=D;c[B>>2]=E;Si(c[z>>2]|0,e[(c[B>>2]|0)+(c[A>>2]<<2)>>1]|0,d[(c[B>>2]|0)+(c[A>>2]<<2)+2>>0]|0);Y=8;}if((Y|0)==8){Y=d[(c[L>>2]|0)+(c[P>>2]|0)>>0]|0;A=c[K>>2]|0;c[w>>2]=Q;c[x>>2]=Y;c[y>>2]=A;Si(c[w>>2]|0,e[(c[y>>2]|0)+(c[x>>2]<<2)>>1]|0,d[(c[y>>2]|0)+(c[x>>2]<<2)+2>>0]|0);Ti(Q);}while(1){if((c[P>>2]|0)>>>0<=0)break;x=d[(c[L>>2]|0)+((c[P>>2]|0)-1)>>0]|0;y=c[K>>2]|0;c[t>>2]=Q;c[u>>2]=x;c[v>>2]=y;Si(c[t>>2]|0,e[(c[v>>2]|0)+(c[u>>2]<<2)>>1]|0,d[(c[v>>2]|0)+(c[u>>2]<<2)+2>>0]|0);y=d[(c[L>>2]|0)+((c[P>>2]|0)-2)>>0]|0;x=c[K>>2]|0;c[q>>2]=Q;c[r>>2]=y;c[s>>2]=x;Si(c[q>>2]|0,e[(c[s>>2]|0)+(c[r>>2]<<2)>>1]|0,d[(c[s>>2]|0)+(c[r>>2]<<2)+2>>0]|0);Ti(Q);x=d[(c[L>>2]|0)+((c[P>>2]|0)-3)>>0]|0;y=c[K>>2]|0;c[n>>2]=Q;c[o>>2]=x;c[p>>2]=y;Si(c[n>>2]|0,e[(c[p>>2]|0)+(c[o>>2]<<2)>>1]|0,d[(c[p>>2]|0)+(c[o>>2]<<2)+2>>0]|0);y=d[(c[L>>2]|0)+((c[P>>2]|0)-4)>>0]|0;x=c[K>>2]|0;c[j>>2]=Q;c[k>>2]=y;c[m>>2]=x;Si(c[j>>2]|0,e[(c[m>>2]|0)+(c[k>>2]<<2)>>1]|0,d[(c[m>>2]|0)+(c[k>>2]<<2)+2>>0]|0);Ti(Q);c[P>>2]=(c[P>>2]|0)-4;}c[F>>2]=Ui(Q)|0;X=c[F>>2]|0;l=i;return X|0;}function Qi(a,b,f,g,h){a=a|0;b=b|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;i=l;l=l+176|0;j=i+168|0;k=i+164|0;m=i+160|0;n=i+156|0;o=i+152|0;p=i+148|0;q=i+144|0;r=i+140|0;s=i+136|0;t=i+132|0;u=i+128|0;v=i+124|0;w=i+120|0;x=i+116|0;y=i+112|0;z=i+108|0;A=i+104|0;B=i+100|0;C=i+96|0;D=i+92|0;E=i+88|0;F=i+84|0;G=i+80|0;H=i+76|0;I=i+72|0;J=i+68|0;K=i+64|0;L=i+60|0;M=i+56|0;N=i+52|0;O=i+48|0;P=i+44|0;Q=i+24|0;R=i+20|0;S=i+16|0;T=i+12|0;U=i+8|0;V=i+4|0;W=i;c[S>>2]=a;c[T>>2]=b;c[U>>2]=f;c[V>>2]=g;c[W>>2]=h;h=c[T>>2]|0;T=c[U>>2]|0;U=c[V>>2]|0;V=c[W>>2]|0;c[G>>2]=c[S>>2];c[H>>2]=h;c[I>>2]=T;c[J>>2]=U;c[K>>2]=V;c[L>>2]=c[I>>2];c[M>>2]=c[G>>2];c[N>>2]=(c[M>>2]|0)+(c[H>>2]|0);c[O>>2]=c[M>>2];if((c[H>>2]|0)>>>0<8){c[F>>2]=0;X=c[F>>2]|0;l=i;return X|0;}c[R>>2]=Ri(Q,c[O>>2]|0,(c[N>>2]|0)-(c[O>>2]|0)|0)|0;if(Hi(c[R>>2]|0)|0){c[F>>2]=0;X=c[F>>2]|0;l=i;return X|0;}c[P>>2]=c[J>>2]&-4;switch(c[J>>2]&3|0){case 3:{J=d[(c[L>>2]|0)+((c[P>>2]|0)+2)>>0]|0;R=c[K>>2]|0;c[C>>2]=Q;c[D>>2]=J;c[E>>2]=R;Si(c[C>>2]|0,e[(c[E>>2]|0)+(c[D>>2]<<2)>>1]|0,d[(c[E>>2]|0)+(c[D>>2]<<2)+2>>0]|0);Ti(Q);Y=7;break;}case 2:{Y=7;break;}case 1:{Y=8;break;}case 0:break;default:{}}if((Y|0)==7){D=d[(c[L>>2]|0)+((c[P>>2]|0)+1)>>0]|0;E=c[K>>2]|0;c[z>>2]=Q;c[A>>2]=D;c[B>>2]=E;Si(c[z>>2]|0,e[(c[B>>2]|0)+(c[A>>2]<<2)>>1]|0,d[(c[B>>2]|0)+(c[A>>2]<<2)+2>>0]|0);Y=8;}if((Y|0)==8){Y=d[(c[L>>2]|0)+(c[P>>2]|0)>>0]|0;A=c[K>>2]|0;c[w>>2]=Q;c[x>>2]=Y;c[y>>2]=A;Si(c[w>>2]|0,e[(c[y>>2]|0)+(c[x>>2]<<2)>>1]|0,d[(c[y>>2]|0)+(c[x>>2]<<2)+2>>0]|0);Ti(Q);}while(1){if((c[P>>2]|0)>>>0<=0)break;x=d[(c[L>>2]|0)+((c[P>>2]|0)-1)>>0]|0;y=c[K>>2]|0;c[t>>2]=Q;c[u>>2]=x;c[v>>2]=y;Si(c[t>>2]|0,e[(c[v>>2]|0)+(c[u>>2]<<2)>>1]|0,d[(c[v>>2]|0)+(c[u>>2]<<2)+2>>0]|0);y=d[(c[L>>2]|0)+((c[P>>2]|0)-2)>>0]|0;x=c[K>>2]|0;c[q>>2]=Q;c[r>>2]=y;c[s>>2]=x;Si(c[q>>2]|0,e[(c[s>>2]|0)+(c[r>>2]<<2)>>1]|0,d[(c[s>>2]|0)+(c[r>>2]<<2)+2>>0]|0);Ti(Q);x=d[(c[L>>2]|0)+((c[P>>2]|0)-3)>>0]|0;y=c[K>>2]|0;c[n>>2]=Q;c[o>>2]=x;c[p>>2]=y;Si(c[n>>2]|0,e[(c[p>>2]|0)+(c[o>>2]<<2)>>1]|0,d[(c[p>>2]|0)+(c[o>>2]<<2)+2>>0]|0);y=d[(c[L>>2]|0)+((c[P>>2]|0)-4)>>0]|0;x=c[K>>2]|0;c[j>>2]=Q;c[k>>2]=y;c[m>>2]=x;Si(c[j>>2]|0,e[(c[m>>2]|0)+(c[k>>2]<<2)>>1]|0,d[(c[m>>2]|0)+(c[k>>2]<<2)+2>>0]|0);Ti(Q);c[P>>2]=(c[P>>2]|0)-4;}c[F>>2]=Ui(Q)|0;X=c[F>>2]|0;l=i;return X|0;}function Ri(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[c[g>>2]>>2]=0;c[(c[g>>2]|0)+4>>2]=0;c[(c[g>>2]|0)+8>>2]=c[h>>2];c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+8>>2];c[(c[g>>2]|0)+16>>2]=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]|0)+-4;if((c[i>>2]|0)>>>0<=4){c[f>>2]=-70;j=c[f>>2]|0;l=e;return j|0;}else{c[f>>2]=0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function Si(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|c[g>>2]<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Ti(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[(c[d>>2]|0)+4>>2]|0)>>>3;Vi(c[(c[d>>2]|0)+12>>2]|0,c[c[d>>2]>>2]|0);a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);if((c[(c[d>>2]|0)+12>>2]|0)>>>0>(c[(c[d>>2]|0)+16>>2]|0)>>>0)c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+16>>2];a=(c[d>>2]|0)+4|0;c[a>>2]=c[a>>2]&7;a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)>>>(c[e>>2]<<3);l=b;return;}function Ui(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;Si(c[e>>2]|0,1,1);Ti(c[e>>2]|0);if((c[(c[e>>2]|0)+12>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{c[d>>2]=(c[(c[e>>2]|0)+12>>2]|0)-(c[(c[e>>2]|0)+8>>2]|0)+((c[(c[e>>2]|0)+4>>2]|0)>>>0>0&1);f=c[d>>2]|0;l=b;return f|0;}return 0;}function Vi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(Wi()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){Xi(a,e);l=d;return;}else{Yi(a,e,0);l=d;return;}}function Wi(){return 1;}function Xi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(Zi()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){aj(a,e);l=d;return;}else{aj(a,bj(e)|0);l=d;return;}}function Yi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=(Zi()|0)!=0;a=c[f>>2]|0;f=g;g=c[f>>2]|0;b=c[f+4>>2]|0;if(d){_i(a,g,b);l=e;return;}else{d=$i(g,b)|0;_i(a,d,y);l=e;return;}}function Zi(){return d[11936]|0|0;}function _i(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+8|0;h=f;c[g>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;h=c[e>>2]|0;b=c[e+4>>2]|0;e=c[g>>2]|0;g=e;a[g>>0]=h;a[g+1>>0]=h>>8;a[g+2>>0]=h>>16;a[g+3>>0]=h>>24;h=e+4|0;a[h>>0]=b;a[h+1>>0]=b>>8;a[h+2>>0]=b>>16;a[h+3>>0]=b>>24;l=f;return;}function $i(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function aj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[g>>2]|0;g=c[f>>2]|0;a[g>>0]=d;a[g+1>>0]=d>>8;a[g+2>>0]=d>>16;a[g+3>>0]=d>>24;l=e;return;}function bj(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function cj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;h=l;l=l+80|0;i=h+64|0;j=h+60|0;k=h+56|0;m=h+52|0;n=h+48|0;o=h+44|0;p=h+40|0;q=h+36|0;r=h+32|0;s=h+28|0;t=h+24|0;u=h+20|0;v=h+16|0;w=h+12|0;x=h+8|0;y=h+4|0;z=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=(((c[n>>2]|0)+3|0)>>>0)/4|0;c[r>>2]=c[m>>2];c[s>>2]=(c[r>>2]|0)+(c[n>>2]|0);c[t>>2]=c[j>>2];c[u>>2]=(c[t>>2]|0)+(c[k>>2]|0);c[v>>2]=c[t>>2];if((c[k>>2]|0)>>>0<17){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}if((c[n>>2]|0)>>>0<12){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}c[v>>2]=(c[v>>2]|0)+6;c[w>>2]=Oi(c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,c[r>>2]|0,c[q>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;n=(Hi(c[w>>2]|0)|0)!=0;k=c[w>>2]|0;if(n){c[i>>2]=k;A=c[i>>2]|0;l=h;return A|0;}if(!k){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}dj(c[t>>2]|0,c[w>>2]&65535);c[v>>2]=(c[v>>2]|0)+(c[w>>2]|0);c[r>>2]=(c[r>>2]|0)+(c[q>>2]|0);c[x>>2]=Oi(c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,c[r>>2]|0,c[q>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;w=(Hi(c[x>>2]|0)|0)!=0;k=c[x>>2]|0;if(w){c[i>>2]=k;A=c[i>>2]|0;l=h;return A|0;}if(!k){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}dj((c[t>>2]|0)+2|0,c[x>>2]&65535);c[v>>2]=(c[v>>2]|0)+(c[x>>2]|0);c[r>>2]=(c[r>>2]|0)+(c[q>>2]|0);c[y>>2]=Oi(c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,c[r>>2]|0,c[q>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;x=(Hi(c[y>>2]|0)|0)!=0;k=c[y>>2]|0;if(x){c[i>>2]=k;A=c[i>>2]|0;l=h;return A|0;}if(!k){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}dj((c[t>>2]|0)+4|0,c[y>>2]&65535);c[v>>2]=(c[v>>2]|0)+(c[y>>2]|0);c[r>>2]=(c[r>>2]|0)+(c[q>>2]|0);c[z>>2]=Oi(c[v>>2]|0,(c[u>>2]|0)-(c[v>>2]|0)|0,c[r>>2]|0,(c[s>>2]|0)-(c[r>>2]|0)|0,c[o>>2]|0,c[p>>2]|0)|0;p=(Hi(c[z>>2]|0)|0)!=0;o=c[z>>2]|0;if(p){c[i>>2]=o;A=c[i>>2]|0;l=h;return A|0;}if(!o){c[i>>2]=0;A=c[i>>2]|0;l=h;return A|0;}else{c[v>>2]=(c[v>>2]|0)+(c[z>>2]|0);c[i>>2]=(c[v>>2]|0)-(c[t>>2]|0);A=c[i>>2]|0;l=h;return A|0;}return 0;}function dj(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Zi()|0)!=0;d=c[h>>2]|0;if(f){ej(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function ej(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=b[h>>1]|0;h=c[g>>2]|0;a[h>>0]=e;a[h+1>>0]=e>>8;l=f;return;}function fj(b,d,e,f,g,h,i,j,k,m,n,o,p){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;q=l;l=l+96|0;r=q+88|0;s=q+84|0;t=q+80|0;u=q+76|0;v=q+72|0;w=q+68|0;x=q+64|0;y=q+60|0;z=q+56|0;A=q+52|0;B=q+48|0;C=q+44|0;D=q+40|0;E=q+36|0;F=q+32|0;G=q+28|0;H=q+24|0;I=q+20|0;J=q+16|0;K=q+12|0;L=q+8|0;M=q+4|0;N=q;c[s>>2]=b;c[t>>2]=d;c[u>>2]=e;c[v>>2]=f;c[w>>2]=g;c[x>>2]=h;c[y>>2]=i;c[z>>2]=j;c[A>>2]=k;c[B>>2]=m;c[C>>2]=n;c[D>>2]=o;c[E>>2]=p;c[F>>2]=c[z>>2];c[G>>2]=c[s>>2];c[H>>2]=(c[G>>2]|0)+(c[t>>2]|0);c[I>>2]=c[G>>2];if(c[z>>2]&3|0){c[r>>2]=-1;O=c[r>>2]|0;l=q;return O|0;}if((c[A>>2]|0)>>>0<6144){c[r>>2]=-66;O=c[r>>2]|0;l=q;return O|0;}if(!(c[v>>2]|0)){c[r>>2]=0;O=c[r>>2]|0;l=q;return O|0;}if(!(c[t>>2]|0)){c[r>>2]=0;O=c[r>>2]|0;l=q;return O|0;}if((c[v>>2]|0)>>>0>131072){c[r>>2]=-72;O=c[r>>2]|0;l=q;return O|0;}if((c[x>>2]|0)>>>0>12){c[r>>2]=-44;O=c[r>>2]|0;l=q;return O|0;}if((c[w>>2]|0)>>>0>255){c[r>>2]=-46;O=c[r>>2]|0;l=q;return O|0;}if(!(c[w>>2]|0))c[w>>2]=255;if(!(c[x>>2]|0))c[x>>2]=11;if((c[D>>2]|0)!=0&(c[C>>2]|0)!=0?(c[c[C>>2]>>2]|0)==2:0){c[r>>2]=gj(c[G>>2]|0,c[I>>2]|0,c[H>>2]|0,c[u>>2]|0,c[v>>2]|0,c[y>>2]|0,c[B>>2]|0,c[E>>2]|0)|0;O=c[r>>2]|0;l=q;return O|0;}c[J>>2]=bi(c[F>>2]|0,w,c[u>>2]|0,c[v>>2]|0,c[F>>2]|0)|0;A=(Hi(c[J>>2]|0)|0)!=0;z=c[J>>2]|0;if(A){c[r>>2]=z;O=c[r>>2]|0;l=q;return O|0;}if((z|0)==(c[v>>2]|0)){a[c[G>>2]>>0]=a[c[u>>2]>>0]|0;c[r>>2]=1;O=c[r>>2]|0;l=q;return O|0;}if((c[J>>2]|0)>>>0<=(((c[v>>2]|0)>>>7)+1|0)>>>0){c[r>>2]=0;O=c[r>>2]|0;l=q;return O|0;}if((c[C>>2]|0?(c[c[C>>2]>>2]|0)==1:0)?(hj(c[B>>2]|0,c[F>>2]|0,c[w>>2]|0)|0)==0:0)c[c[C>>2]>>2]=0;if((c[D>>2]|0)!=0&(c[C>>2]|0)!=0?c[c[C>>2]>>2]|0:0){c[r>>2]=gj(c[G>>2]|0,c[I>>2]|0,c[H>>2]|0,c[u>>2]|0,c[v>>2]|0,c[y>>2]|0,c[B>>2]|0,c[E>>2]|0)|0;O=c[r>>2]|0;l=q;return O|0;}c[x>>2]=Fi(c[x>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;c[K>>2]=Ki((c[F>>2]|0)+1024|0,c[F>>2]|0,c[w>>2]|0,c[x>>2]|0,(c[F>>2]|0)+2048|0,4096)|0;D=(Hi(c[K>>2]|0)|0)!=0;J=c[K>>2]|0;if(D){c[r>>2]=J;O=c[r>>2]|0;l=q;return O|0;}c[x>>2]=J;oE((c[F>>2]|0)+1024+((c[w>>2]|0)+1<<2)|0,0,1024-((c[w>>2]|0)+1<<2)|0)|0;c[L>>2]=Ii(c[I>>2]|0,c[t>>2]|0,(c[F>>2]|0)+1024|0,c[w>>2]|0,c[x>>2]|0)|0;if(Hi(c[L>>2]|0)|0){c[r>>2]=c[L>>2];O=c[r>>2]|0;l=q;return O|0;}do{if(c[C>>2]|0?c[c[C>>2]>>2]|0:0){c[M>>2]=ij(c[B>>2]|0,c[F>>2]|0,c[w>>2]|0)|0;c[N>>2]=ij((c[F>>2]|0)+1024|0,c[F>>2]|0,c[w>>2]|0)|0;if((c[M>>2]|0)>>>0>((c[L>>2]|0)+(c[N>>2]|0)|0)>>>0?((c[L>>2]|0)+12|0)>>>0<(c[v>>2]|0)>>>0:0)break;c[r>>2]=gj(c[G>>2]|0,c[I>>2]|0,c[H>>2]|0,c[u>>2]|0,c[v>>2]|0,c[y>>2]|0,c[B>>2]|0,c[E>>2]|0)|0;O=c[r>>2]|0;l=q;return O|0;}}while(0);if(((c[L>>2]|0)+12|0)>>>0>=(c[v>>2]|0)>>>0){c[r>>2]=0;O=c[r>>2]|0;l=q;return O|0;}c[I>>2]=(c[I>>2]|0)+(c[L>>2]|0);if(c[C>>2]|0)c[c[C>>2]>>2]=0;if(c[B>>2]|0)mE(c[B>>2]|0,(c[F>>2]|0)+1024|0,1024)|0;c[r>>2]=gj(c[G>>2]|0,c[I>>2]|0,c[H>>2]|0,c[u>>2]|0,c[v>>2]|0,c[y>>2]|0,(c[F>>2]|0)+1024|0,c[E>>2]|0)|0;O=c[r>>2]|0;l=q;return O|0;}function gj(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+48|0;k=j+36|0;m=j+32|0;n=j+28|0;o=j+24|0;p=j+20|0;q=j+16|0;r=j+12|0;s=j+8|0;t=j+4|0;u=j;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;i=c[n>>2]|0;h=(c[o>>2]|0)-(c[n>>2]|0)|0;o=c[p>>2]|0;p=c[q>>2]|0;g=c[s>>2]|0;s=c[t>>2]|0;if(c[r>>2]|0)v=Oi(i,h,o,p,g,s)|0;else v=cj(i,h,o,p,g,s)|0;c[u>>2]=v;v=(Hi(c[u>>2]|0)|0)!=0;s=c[u>>2]|0;if(v){c[k>>2]=s;w=c[k>>2]|0;l=j;return w|0;}if(!s){c[k>>2]=0;w=c[k>>2]|0;l=j;return w|0;}c[n>>2]=(c[n>>2]|0)+(c[u>>2]|0);if(((c[n>>2]|0)-(c[m>>2]|0)|0)>>>0>=((c[q>>2]|0)-1|0)>>>0){c[k>>2]=0;w=c[k>>2]|0;l=j;return w|0;}else{c[k>>2]=(c[n>>2]|0)-(c[m>>2]|0);w=c[k>>2]|0;l=j;return w|0;}return 0;}function hj(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=e;c[j>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>(c[i>>2]|0))break;c[j>>2]=c[j>>2]|(c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0?(d[(c[g>>2]|0)+(c[k>>2]<<2)+2>>0]|0|0)==0:0);c[k>>2]=(c[k>>2]|0)+1;}l=f;return((c[j>>2]|0)!=0^1)&1|0;}function ij(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=e;c[j>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>(c[i>>2]|0))break;e=N(d[(c[g>>2]|0)+(c[k>>2]<<2)+2>>0]|0,c[(c[h>>2]|0)+(c[k>>2]<<2)>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+e;c[k>>2]=(c[k>>2]|0)+1;}l=f;return(c[j>>2]|0)>>>3|0;}function jj(a,b,d,e,f,g,h,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;o=l;l=l+48|0;p=o+44|0;q=o+40|0;r=o+36|0;s=o+32|0;t=o+28|0;u=o+24|0;v=o+20|0;w=o+16|0;x=o+12|0;y=o+8|0;z=o+4|0;A=o;c[p>>2]=a;c[q>>2]=b;c[r>>2]=d;c[s>>2]=e;c[t>>2]=f;c[u>>2]=g;c[v>>2]=h;c[w>>2]=i;c[x>>2]=j;c[y>>2]=k;c[z>>2]=m;c[A>>2]=n;n=fj(c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,1,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;l=o;return n|0;}function kj(a,b,d,e,f,g,h,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;o=l;l=l+48|0;p=o+44|0;q=o+40|0;r=o+36|0;s=o+32|0;t=o+28|0;u=o+24|0;v=o+20|0;w=o+16|0;x=o+12|0;y=o+8|0;z=o+4|0;A=o;c[p>>2]=a;c[q>>2]=b;c[r>>2]=d;c[s>>2]=e;c[t>>2]=f;c[u>>2]=g;c[v>>2]=h;c[w>>2]=i;c[x>>2]=j;c[y>>2]=k;c[z>>2]=m;c[A>>2]=n;n=fj(c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,0,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;l=o;return n|0;}function lj(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=(c[d>>2]|0)+((c[d>>2]|0)>>>8)|0;if((c[d>>2]|0)>>>0>=131072){e=0;f=a+e|0;l=b;return f|0;}e=(131072-(c[d>>2]|0)|0)>>>11;f=a+e|0;l=b;return f|0;}function mj(){var a=0,b=0,d=0;a=l;l=l+16|0;b=a;c[b>>2]=c[5406];c[b+4>>2]=c[5407];c[b+8>>2]=c[5408];d=nj(b)|0;l=a;return d|0;}function nj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=l;l=l+48|0;d=b+24|0;e=b+20|0;f=b+16|0;g=b;if(((c[a>>2]|0)!=0^1)&1^((c[a+4>>2]|0)!=0^1)&1|0){c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;};c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[f>>2]=Sh(656,d)|0;if(c[f>>2]|0){i=(c[f>>2]|0)+352|0;c[i>>2]=c[a>>2];c[i+4>>2]=c[a+4>>2];c[i+8>>2]=c[a+8>>2];c[(c[f>>2]|0)+12+44>>2]=3;c[(c[f>>2]|0)+12+32>>2]=1;oj(g);c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];g=pj(d)|0;c[(c[f>>2]|0)+8>>2]=g;c[e>>2]=c[f>>2];h=c[e>>2]|0;l=b;return h|0;}else{c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}return 0;}function oj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+28|0;e=b+24|0;f=b+20|0;g=b+16|0;h=b;c[d>>2]=0;c[e>>2]=0;c[f>>2]=0;c[g>>2]=0;c[h>>2]=c[d>>2];c[h+4>>2]=c[e>>2];c[h+8>>2]=c[f>>2];c[h+12>>2]=c[g>>2];c[a>>2]=c[h>>2];c[a+4>>2]=c[h+4>>2];c[a+8>>2]=c[h+8>>2];c[a+12>>2]=c[h+12>>2];l=b;return;}function pj(a){a=a|0;return(c[a+8>>2]&256|0)!=0|0;}function qj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+8|0;e=b+4|0;f=b;c[f>>2]=a;if(!(c[f>>2]|0)){c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}if(c[(c[f>>2]|0)+364>>2]|0){c[e>>2]=-64;g=c[e>>2]|0;l=b;return g|0;}else{a=c[(c[f>>2]|0)+224>>2]|0;h=(c[f>>2]|0)+352|0;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];Th(a,d);c[(c[f>>2]|0)+224>>2]=0;rj(c[(c[f>>2]|0)+636>>2]|0)|0;c[(c[f>>2]|0)+636>>2]=0;a=c[f>>2]|0;h=(c[f>>2]|0)+352|0;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];Th(a,d);c[e>>2]=0;g=c[e>>2]|0;l=b;return g|0;}return 0;}function rj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=l;l=l+32|0;d=b+20|0;e=b+16|0;f=b+12|0;g=b;c[f>>2]=a;if(!(c[f>>2]|0)){c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}else{a=(c[f>>2]|0)+4748|0;c[g>>2]=c[a>>2];c[g+4>>2]=c[a+4>>2];c[g+8>>2]=c[a+8>>2];a=c[(c[f>>2]|0)+12>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);a=c[c[f>>2]>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);a=c[f>>2]|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];Th(a,d);c[e>>2]=0;h=c[e>>2]|0;l=b;return h|0;}return 0;}function sj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0;g=l;l=l+96|0;h=g+64|0;i=g+60|0;j=g+8|0;k=g+56|0;m=g+52|0;n=g;o=g+48|0;p=g+44|0;q=g+16|0;c[i>>2]=b;b=j;c[b>>2]=d;c[b+4>>2]=e;c[k>>2]=f;f=j;c[m>>2]=(c[f>>2]|0)!=0|(c[f+4>>2]|0)!=0?0:500;f=j;e=dE(c[f>>2]|0,c[f+4>>2]|0,c[k>>2]|0,0)|0;if((e|0)!=0|(y|0)!=0){e=j;f=dE(c[e>>2]|0,c[e+4>>2]|0,c[k>>2]|0,0)|0;e=dE(f|0,y|0,c[m>>2]|0,0)|0;r=e;s=y;}else{r=-1;s=-1;}e=n;c[e>>2]=r;c[e+4>>2]=s;s=n;e=c[s+4>>2]|0;r=n;m=c[r+4>>2]|0;f=n;n=c[f+4>>2]|0;c[o>>2]=((e>>>0<0|(e|0)==0&(c[s>>2]|0)>>>0<=262144)&1)+((m>>>0<0|(m|0)==0&(c[r>>2]|0)>>>0<=131072)&1)+((n>>>0<0|(n|0)==0&(c[f>>2]|0)>>>0<=16384)&1);f=c[i>>2]|0;c[p>>2]=f;n=(c[i>>2]|0)==0?3:f;c[p>>2]=n;f=(c[i>>2]|0)<0?0:n;c[p>>2]=f;c[p>>2]=(c[i>>2]|0)>22?22:f;f=224+((c[o>>2]|0)*644|0)+((c[p>>2]|0)*28|0)|0;c[q>>2]=c[f>>2];c[q+4>>2]=c[f+4>>2];c[q+8>>2]=c[f+8>>2];c[q+12>>2]=c[f+12>>2];c[q+16>>2]=c[f+16>>2];c[q+20>>2]=c[f+20>>2];c[q+24>>2]=c[f+24>>2];if((c[i>>2]|0)>=0){t=j;u=t;v=c[u>>2]|0;w=t+4|0;x=w;z=c[x>>2]|0;A=c[k>>2]|0;c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[h+16>>2]=c[q+16>>2];c[h+20>>2]=c[q+20>>2];c[h+24>>2]=c[q+24>>2];tj(a,h,v,z,A);l=g;return;}c[q+20>>2]=0-(c[i>>2]|0);t=j;u=t;v=c[u>>2]|0;w=t+4|0;x=w;z=c[x>>2]|0;A=c[k>>2]|0;c[h>>2]=c[q>>2];c[h+4>>2]=c[q+4>>2];c[h+8>>2]=c[q+8>>2];c[h+12>>2]=c[q+12>>2];c[h+16>>2]=c[q+16>>2];c[h+20>>2]=c[q+20>>2];c[h+24>>2]=c[q+24>>2];tj(a,h,v,z,A);l=g;return;}function tj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=h;c[n>>2]=d;c[n+4>>2]=e;c[i>>2]=f;if(c[i>>2]|0?(f=h,e=dE(c[f>>2]|0,c[f+4>>2]|0,1,0)|0,f=y,f>>>0<0|(f|0)==0&e>>>0<2):0){e=h;c[e>>2]=513;c[e+4>>2]=0;}else o=4;if((o|0)==4?(o=h,(c[o>>2]|0)==0&(c[o+4>>2]|0)==0):0){o=h;c[o>>2]=-1;c[o+4>>2]=-1;}o=h;e=c[o+4>>2]|0;if(e>>>0<0|(e|0)==0&(c[o>>2]|0)>>>0<536870912?0<0|0==0&(c[i>>2]|0)>>>0<536870912:0){o=h;h=dE(c[o>>2]|0,c[o+4>>2]|0,c[i>>2]|0,0)|0;c[j>>2]=h;if((c[j>>2]|0)>>>0<64)p=6;else p=(uj((c[j>>2]|0)-1|0)|0)+1|0;c[k>>2]=p;if((c[b>>2]|0)>>>0>(c[k>>2]|0)>>>0)c[b>>2]=c[k>>2];}if((c[b+8>>2]|0)>>>0>(c[b>>2]|0)>>>0)c[b+8>>2]=c[b>>2];c[m>>2]=vj(c[b+4>>2]|0,c[b+24>>2]|0)|0;if((c[m>>2]|0)>>>0>(c[b>>2]|0)>>>0){k=b+4|0;c[k>>2]=(c[k>>2]|0)-((c[m>>2]|0)-(c[b>>2]|0));}if((c[b>>2]|0)>>>0>=10){c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];l=g;return;}c[b>>2]=10;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];l=g;return;}function uj(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function vj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(c[f>>2]|0)>>>0>=6&1;l=d;return(c[e>>2]|0)-(c[g>>2]|0)|0;}function wj(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[d>>2]|0)>>>0>4294967176|0;}function xj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e+8|0;i=e+4|0;j=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;a:do{switch(c[h>>2]|0){case 10:{if((c[i>>2]|0)>>>0>1){c[f>>2]=-40;break a;}else{c[c[g>>2]>>2]=c[i>>2];c[f>>2]=c[c[g>>2]>>2];break a;}break;}case 100:{c[j>>2]=c[i>>2];if((c[j>>2]|0)>(yj()|0))c[j>>2]=yj()|0;if(c[j>>2]|0){c[(c[g>>2]|0)+48>>2]=(c[j>>2]|0)<0&1;c[(c[g>>2]|0)+44>>2]=c[j>>2];}if((c[(c[g>>2]|0)+44>>2]|0)>=0){c[f>>2]=c[(c[g>>2]|0)+44>>2];break a;}else{c[f>>2]=0;break a;}break;}case 101:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<10|(c[i>>2]|0)>>>0>30|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4>>2];break;}case 102:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<6|(c[i>>2]|0)>>>0>30|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+8>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+8>>2];break;}case 103:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<6|(c[i>>2]|0)>>>0>29|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+4>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+4>>2];break;}case 104:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<1|(c[i>>2]|0)>>>0>29|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+12>>2]=c[i>>2];c[f>>2]=c[i>>2];break;}case 105:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<3|(c[i>>2]|0)>>>0>7|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+16>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+16>>2];break;}case 106:{c[(c[g>>2]|0)+4+20>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+20>>2];break;}case 107:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<1|(c[i>>2]|0)>>>0>8|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+4+24>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+4+24>>2];break;}case 1e3:{c[(c[g>>2]|0)+48>>2]=((c[i>>2]|0)!=0^1)&1;c[f>>2]=((c[(c[g>>2]|0)+48>>2]|0)!=0^1)&1;break;}case 200:{c[(c[g>>2]|0)+32>>2]=(c[i>>2]|0)>>>0>0&1;c[f>>2]=c[(c[g>>2]|0)+32>>2];break;}case 201:{c[(c[g>>2]|0)+32+4>>2]=(c[i>>2]|0)>>>0>0&1;c[f>>2]=c[(c[g>>2]|0)+32+4>>2];break;}case 202:{c[(c[g>>2]|0)+32+8>>2]=((c[i>>2]|0)!=0^1)&1;c[f>>2]=((c[(c[g>>2]|0)+32+8>>2]|0)!=0^1)&1;break;}case 1100:{c[(c[g>>2]|0)+52>>2]=(c[i>>2]|0)>>>0>0&1;c[f>>2]=c[(c[g>>2]|0)+52>>2];break;}case 400:{if((c[i>>2]|0)>>>0>0){c[f>>2]=-40;break a;}else{c[f>>2]=0;break a;}break;}case 401:{c[f>>2]=-40;break;}case 402:{c[f>>2]=-40;break;}case 160:{c[(c[g>>2]|0)+68>>2]=(c[i>>2]|0)>>>0>0&1;c[f>>2]=c[(c[g>>2]|0)+68>>2];break;}case 161:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<6|(c[i>>2]|0)>>>0>30|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+68+4>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+68+4>>2];break;}case 162:{if((c[i>>2]|0)>>>0>0?(c[i>>2]|0)>>>0<4|(c[i>>2]|0)>>>0>4096|0:0){c[f>>2]=-42;break a;}c[(c[g>>2]|0)+68+12>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+68+12>>2];break;}case 163:{if((c[i>>2]|0)>>>0>8){c[f>>2]=-42;break a;}else{c[(c[g>>2]|0)+68+8>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+68+8>>2];break a;}break;}case 164:{if((c[i>>2]|0)>>>0>24){c[f>>2]=-42;break a;}else{c[(c[g>>2]|0)+68+16>>2]=c[i>>2];c[f>>2]=c[(c[g>>2]|0)+68+16>>2];break a;}break;}default:c[f>>2]=-40;}}while(0);l=e;return c[f>>2]|0;}function yj(){return 22;}function zj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+64|0;i=h+32|0;j=h+28|0;k=h+24|0;m=h+20|0;n=h+16|0;o=h+12|0;p=h+8|0;q=h+4|0;r=h;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;if(((c[g>>2]|0)!=0^1)&1^((c[g+4>>2]|0)!=0^1)&1|0){c[j>>2]=0;s=c[j>>2]|0;l=h;return s|0;};c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[p>>2]=Rh(4764,i)|0;c[q>>2]=6144+(Aj(f,0)|0);e=c[q>>2]|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[r>>2]=Rh(e,i)|0;e=c[p>>2]|0;if(!((c[p>>2]|0)!=0&(c[r>>2]|0)!=0)){c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];Th(e,i);d=c[r>>2]|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];Th(d,i);c[j>>2]=0;s=c[j>>2]|0;l=h;return s|0;}d=e+4748|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[(c[p>>2]|0)+12>>2]=c[r>>2];c[(c[p>>2]|0)+16>>2]=c[q>>2];q=c[p>>2]|0;r=c[k>>2]|0;k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];c[i+24>>2]=c[f+24>>2];f=(Ph(Bj(q,r,k,m,n,i)|0)|0)!=0;i=c[p>>2]|0;if(f){rj(i)|0;c[j>>2]=0;s=c[j>>2]|0;l=h;return s|0;}else{c[j>>2]=i;s=c[j>>2]|0;l=h;return s|0;}return 0;}function Aj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;d=l;l=l+48|0;e=d+32|0;f=d+28|0;g=d+24|0;h=d+20|0;i=d+16|0;j=d+12|0;k=d+8|0;m=d+4|0;n=d;c[e>>2]=a;c[f>>2]=b;if((c[(c[e>>2]|0)+24>>2]|0)==1)o=0;else o=1<<c[(c[e>>2]|0)+4>>2];c[g>>2]=o;c[h>>2]=1<<c[(c[e>>2]|0)+8>>2];if(c[f>>2]|0?(c[(c[e>>2]|0)+16>>2]|0)==3:0){if(17<(c[c[e>>2]>>2]|0)>>>0)p=17;else p=c[c[e>>2]>>2]|0;}else p=0;c[i>>2]=p;c[j>>2]=1<<c[i>>2];c[k>>2]=(c[g>>2]|0)+(c[h>>2]|0)+(c[j>>2]|0)<<2;c[m>>2]=149e3;if(c[f>>2]|0){if((c[(c[e>>2]|0)+24>>2]|0)==7)q=1;else q=(c[(c[e>>2]|0)+24>>2]|0)==8;}else q=0;c[n>>2]=q?149e3:0;l=d;return(c[k>>2]|0)+(c[n>>2]|0)|0;}function Bj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;h=l;l=l+160|0;i=h+144|0;j=h+140|0;k=h+136|0;m=h+132|0;n=h+128|0;o=h+124|0;p=h+120|0;q=h+116|0;r=h+112|0;s=h+8|0;t=h;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;f=(c[k>>2]|0)+4720|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];c[f+16>>2]=c[g+16>>2];c[f+20>>2]=c[g+20>>2];c[f+24>>2]=c[g+24>>2];do{if((c[o>>2]|0)!=1&(c[m>>2]|0)!=0&(c[n>>2]|0)!=0){f=c[n>>2]|0;e=(c[k>>2]|0)+4748|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[q>>2]=Rh(f,i)|0;c[c[k>>2]>>2]=c[q>>2];c[(c[k>>2]|0)+4>>2]=c[q>>2];if(c[q>>2]|0){mE(c[q>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;break;}c[j>>2]=-64;u=c[j>>2]|0;l=h;return u|0;}else{c[c[k>>2]>>2]=0;c[(c[k>>2]|0)+4>>2]=c[m>>2];}}while(0);c[(c[k>>2]|0)+8>>2]=c[n>>2];Cj((c[k>>2]|0)+128|0);c[r>>2]=Dj((c[k>>2]|0)+20|0,(c[(c[k>>2]|0)+12>>2]|0)+6144|0,g,0,0)|0;r=s;n=r+104|0;do{c[r>>2]=0;r=r+4|0;}while((r|0)<(n|0));c[s+44>>2]=3;c[s+32>>2]=1;r=s+4|0;c[r>>2]=c[g>>2];c[r+4>>2]=c[g+4>>2];c[r+8>>2]=c[g+8>>2];c[r+12>>2]=c[g+12>>2];c[r+16>>2]=c[g+16>>2];c[r+20>>2]=c[g+20>>2];c[r+24>>2]=c[g+24>>2];c[t>>2]=Ej((c[k>>2]|0)+128|0,(c[k>>2]|0)+20|0,s,c[(c[k>>2]|0)+4>>2]|0,c[(c[k>>2]|0)+8>>2]|0,c[p>>2]|0,c[(c[k>>2]|0)+12>>2]|0)|0;p=(Ph(c[t>>2]|0)|0)!=0;s=c[t>>2]|0;if(p){c[j>>2]=s;u=c[j>>2]|0;l=h;return u|0;}else{c[(c[k>>2]|0)+4760>>2]=s;c[j>>2]=0;u=c[j>>2]|0;l=h;return u|0;}return 0;}function Cj(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=0;while(1){if((c[e>>2]|0)>=3)break;c[(c[d>>2]|0)+4580+(c[e>>2]<<2)>>2]=c[11940+(c[e>>2]<<2)>>2];c[e>>2]=(c[e>>2]|0)+1;}c[(c[d>>2]|0)+4564>>2]=0;c[(c[d>>2]|0)+4568>>2]=0;c[(c[d>>2]|0)+4572>>2]=0;c[(c[d>>2]|0)+4576>>2]=0;l=b;return;}function Dj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+48|0;h=g+36|0;i=g+32|0;j=g+28|0;k=g+24|0;m=g+20|0;n=g+16|0;o=g+12|0;p=g+8|0;q=g+4|0;r=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;if((c[(c[j>>2]|0)+24>>2]|0)==1)s=0;else s=1<<c[(c[j>>2]|0)+4>>2];c[n>>2]=s;c[o>>2]=1<<c[(c[j>>2]|0)+8>>2];if(c[m>>2]|0?(c[(c[j>>2]|0)+16>>2]|0)==3:0){if(17<(c[c[j>>2]>>2]|0)>>>0)t=17;else t=c[c[j>>2]>>2]|0;}else t=0;c[p>>2]=t;c[q>>2]=1<<c[p>>2];c[r>>2]=(c[n>>2]|0)+(c[o>>2]|0)+(c[q>>2]|0)<<2;c[(c[h>>2]|0)+32>>2]=c[p>>2];p=c[h>>2]|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;hl(c[h>>2]|0);if(c[m>>2]|0?((c[(c[j>>2]|0)+24>>2]|0)==7?1:(c[(c[j>>2]|0)+24>>2]|0)==8)|0:0){c[(c[h>>2]|0)+48>>2]=c[i>>2];c[(c[h>>2]|0)+48+4>>2]=(c[(c[h>>2]|0)+48>>2]|0)+1024;c[(c[h>>2]|0)+48+8>>2]=(c[(c[h>>2]|0)+48+4>>2]|0)+144;c[(c[h>>2]|0)+48+12>>2]=(c[(c[h>>2]|0)+48+8>>2]|0)+212;c[i>>2]=(c[(c[h>>2]|0)+48+12>>2]|0)+128;c[(c[h>>2]|0)+48+16>>2]=c[i>>2];c[i>>2]=(c[(c[h>>2]|0)+48+16>>2]|0)+32768+8;c[(c[h>>2]|0)+48+20>>2]=c[i>>2];c[i>>2]=(c[(c[h>>2]|0)+48+20>>2]|0)+114688+28;}if((c[k>>2]|0)==1){u=c[i>>2]|0;v=c[h>>2]|0;w=v+36|0;c[w>>2]=u;x=c[h>>2]|0;y=x+36|0;z=c[y>>2]|0;A=c[o>>2]|0;B=z+(A<<2)|0;C=c[h>>2]|0;D=C+44|0;c[D>>2]=B;E=c[h>>2]|0;F=E+44|0;G=c[F>>2]|0;H=c[n>>2]|0;I=G+(H<<2)|0;J=c[h>>2]|0;K=J+40|0;c[K>>2]=I;L=c[h>>2]|0;M=L+40|0;N=c[M>>2]|0;O=c[q>>2]|0;P=N+(O<<2)|0;c[i>>2]=P;Q=c[i>>2]|0;l=g;return Q|0;}oE(c[i>>2]|0,0,c[r>>2]|0)|0;u=c[i>>2]|0;v=c[h>>2]|0;w=v+36|0;c[w>>2]=u;x=c[h>>2]|0;y=x+36|0;z=c[y>>2]|0;A=c[o>>2]|0;B=z+(A<<2)|0;C=c[h>>2]|0;D=C+44|0;c[D>>2]=B;E=c[h>>2]|0;F=E+44|0;G=c[F>>2]|0;H=c[n>>2]|0;I=G+(H<<2)|0;J=c[h>>2]|0;K=J+40|0;c[K>>2]=I;L=c[h>>2]|0;M=L+40|0;N=c[M>>2]|0;O=c[q>>2]|0;P=N+(O<<2)|0;c[i>>2]=P;Q=c[i>>2]|0;l=g;return Q|0;}function Ej(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;i=l;l=l+32|0;j=i+28|0;k=i+24|0;m=i+20|0;n=i+16|0;o=i+12|0;p=i+8|0;q=i+4|0;r=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;if((c[o>>2]|0)==0|(c[p>>2]|0)>>>0<=8){c[j>>2]=0;s=c[j>>2]|0;l=i;return s|0;}Cj(c[k>>2]|0);if((c[q>>2]|0)==1){c[j>>2]=Fj(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;s=c[j>>2]|0;l=i;return s|0;}if((Gj(c[o>>2]|0)|0)!=-332356553){if(!(c[q>>2]|0)){c[j>>2]=Fj(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;s=c[j>>2]|0;l=i;return s|0;}if((c[q>>2]|0)==2){c[j>>2]=-32;s=c[j>>2]|0;l=i;return s|0;}}c[j>>2]=Hj(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[r>>2]|0)|0;s=c[j>>2]|0;l=i;return s|0;}function Fj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=c[j>>2];c[n>>2]=(c[m>>2]|0)+(c[k>>2]|0);c[o>>2]=(c[i>>2]|0)+4;Mj(c[h>>2]|0,c[j>>2]|0,c[k>>2]|0)|0;if(c[(c[i>>2]|0)+52>>2]|0)p=0;else p=(c[n>>2]|0)-(c[(c[h>>2]|0)+4>>2]|0)|0;c[(c[h>>2]|0)+20>>2]=p;if((c[k>>2]|0)>>>0<=8){c[g>>2]=0;q=c[g>>2]|0;l=f;return q|0;}switch(c[(c[i>>2]|0)+4+24>>2]|0){case 1:{Nj(c[h>>2]|0,c[o>>2]|0,c[n>>2]|0);break;}case 2:{Oj(c[h>>2]|0,c[o>>2]|0,c[n>>2]|0);break;}case 5:case 4:case 3:{if((c[k>>2]|0)>>>0>=8)Pj(c[h>>2]|0,c[o>>2]|0,(c[n>>2]|0)+-8|0)|0;break;}case 8:case 7:case 6:{if((c[k>>2]|0)>>>0>=8)Qj(c[h>>2]|0,c[o>>2]|0,(c[n>>2]|0)+-8|0,c[n>>2]|0);break;}default:{}}c[(c[h>>2]|0)+24>>2]=(c[n>>2]|0)-(c[(c[h>>2]|0)+4>>2]|0);c[g>>2]=0;q=c[g>>2]|0;l=f;return q|0;}function Gj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Jj()|0)!=0;f=Kj(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Lj(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Hj(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;h=l;l=l+384|0;i=h+380|0;j=h+376|0;k=h+372|0;m=h+368|0;n=h+364|0;o=h+360|0;p=h+356|0;q=h+352|0;r=h+348|0;s=h+192|0;t=h+344|0;u=h+340|0;v=h+336|0;w=h+332|0;x=h+328|0;y=h+324|0;z=h+320|0;A=h+80|0;B=h+316|0;C=h+312|0;D=h+308|0;E=h+304|0;F=h+300|0;G=h;H=h+296|0;I=h+292|0;J=h+288|0;K=h+284|0;L=h+280|0;M=h+276|0;N=h+272|0;O=h+268|0;P=h+264|0;Q=h+260|0;R=h+256|0;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[n>>2];c[r>>2]=(c[q>>2]|0)+(c[o>>2]|0);c[t>>2]=31;c[q>>2]=(c[q>>2]|0)+4;if(c[(c[m>>2]|0)+32+8>>2]|0)S=0;else S=Gj(c[q>>2]|0)|0;c[u>>2]=S;c[q>>2]=(c[q>>2]|0)+4;c[v>>2]=255;c[w>>2]=Ji(c[j>>2]|0,v,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0)|0;if($g(c[w>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}if((c[v>>2]|0)>>>0<255){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);c[y>>2]=ah(s,t,x,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0)|0;if(Zg(c[y>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}if((c[x>>2]|0)>>>0>8){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[z>>2]=Uh((c[j>>2]|0)+1024|0,s,c[t>>2]|0,c[x>>2]|0,c[p>>2]|0,6144)|0;if(wj(c[z>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[q>>2]=(c[q>>2]|0)+(c[y>>2]|0);c[B>>2]=52;c[D>>2]=ah(A,B,C,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0)|0;if(Zg(c[D>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}if((c[C>>2]|0)>>>0>9){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[E>>2]=Ij(A,c[B>>2]|0,52)|0;if(wj(c[E>>2]|0)|0){c[i>>2]=c[E>>2];T=c[i>>2]|0;l=h;return T|0;}c[F>>2]=Uh((c[j>>2]|0)+1796|0,A,c[B>>2]|0,c[C>>2]|0,c[p>>2]|0,6144)|0;if(wj(c[F>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[q>>2]=(c[q>>2]|0)+(c[D>>2]|0);c[H>>2]=35;c[J>>2]=ah(G,H,I,c[q>>2]|0,(c[r>>2]|0)-(c[q>>2]|0)|0)|0;if(Zg(c[J>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}if((c[I>>2]|0)>>>0>9){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[K>>2]=Ij(G,c[H>>2]|0,35)|0;if(wj(c[K>>2]|0)|0){c[i>>2]=c[K>>2];T=c[i>>2]|0;l=h;return T|0;}c[L>>2]=Uh((c[j>>2]|0)+3248|0,G,c[H>>2]|0,c[I>>2]|0,c[p>>2]|0,6144)|0;if(wj(c[L>>2]|0)|0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}c[q>>2]=(c[q>>2]|0)+(c[J>>2]|0);if(((c[q>>2]|0)+12|0)>>>0>(c[r>>2]|0)>>>0){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}J=Gj(c[q>>2]|0)|0;c[(c[j>>2]|0)+4580>>2]=J;J=Gj((c[q>>2]|0)+4|0)|0;c[(c[j>>2]|0)+4580+4>>2]=J;J=Gj((c[q>>2]|0)+8|0)|0;c[(c[j>>2]|0)+4580+8>>2]=J;c[q>>2]=(c[q>>2]|0)+12;c[M>>2]=(c[r>>2]|0)-(c[q>>2]|0);c[N>>2]=31;if((c[M>>2]|0)>>>0<=4294836223){c[O>>2]=(c[M>>2]|0)+131072;c[N>>2]=uj(c[O>>2]|0)|0;}c[P>>2]=Ij(s,c[t>>2]|0,(c[N>>2]|0)>>>0<31?c[N>>2]|0:31)|0;if(wj(c[P>>2]|0)|0){c[i>>2]=c[P>>2];T=c[i>>2]|0;l=h;return T|0;}c[Q>>2]=0;while(1){U=c[j>>2]|0;if((c[Q>>2]|0)>>>0>=3){V=42;break;}if(!(c[U+4580+(c[Q>>2]<<2)>>2]|0)){V=38;break;}if((c[(c[j>>2]|0)+4580+(c[Q>>2]<<2)>>2]|0)>>>0>(c[M>>2]|0)>>>0){V=40;break;}c[Q>>2]=(c[Q>>2]|0)+1;}if((V|0)==38){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}else if((V|0)==40){c[i>>2]=-30;T=c[i>>2]|0;l=h;return T|0;}else if((V|0)==42){c[U+4564>>2]=2;c[(c[j>>2]|0)+4568>>2]=2;c[(c[j>>2]|0)+4572>>2]=2;c[(c[j>>2]|0)+4576>>2]=2;c[R>>2]=Fj(c[k>>2]|0,c[m>>2]|0,c[q>>2]|0,c[M>>2]|0)|0;if(wj(c[R>>2]|0)|0){c[i>>2]=c[R>>2];T=c[i>>2]|0;l=h;return T|0;}else{c[i>>2]=c[u>>2];T=c[i>>2]|0;l=h;return T|0;}}return 0;}function Ij(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[h>>2]=a;c[i>>2]=d;c[j>>2]=e;if((c[i>>2]|0)>>>0<(c[j>>2]|0)>>>0){c[g>>2]=-30;m=c[g>>2]|0;l=f;return m|0;}c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>(c[j>>2]|0)>>>0){n=8;break;}if(!(b[(c[h>>2]|0)+(c[k>>2]<<1)>>1]|0)){n=6;break;}c[k>>2]=(c[k>>2]|0)+1;}if((n|0)==6){c[g>>2]=-30;m=c[g>>2]|0;l=f;return m|0;}else if((n|0)==8){c[g>>2]=0;m=c[g>>2]|0;l=f;return m|0;}return 0;}function Jj(){return d[11936]|0|0;}function Kj(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Lj(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Mj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;e=l;l=l+32|0;f=e+28|0;g=e+24|0;h=e+20|0;i=e+16|0;j=e+12|0;k=e+8|0;m=e+4|0;n=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=1;if((c[g>>2]|0)!=(c[c[f>>2]>>2]|0)){c[k>>2]=(c[c[f>>2]>>2]|0)-(c[(c[f>>2]|0)+4>>2]|0);c[(c[f>>2]|0)+16>>2]=c[(c[f>>2]|0)+12>>2];c[(c[f>>2]|0)+12>>2]=c[k>>2];c[(c[f>>2]|0)+8>>2]=c[(c[f>>2]|0)+4>>2];c[(c[f>>2]|0)+4>>2]=(c[i>>2]|0)+(0-(c[k>>2]|0));if(((c[(c[f>>2]|0)+12>>2]|0)-(c[(c[f>>2]|0)+16>>2]|0)|0)>>>0<8)c[(c[f>>2]|0)+16>>2]=c[(c[f>>2]|0)+12>>2];c[j>>2]=0;}c[c[f>>2]>>2]=(c[i>>2]|0)+(c[h>>2]|0);if(!(((c[i>>2]|0)>>>0<((c[(c[f>>2]|0)+8>>2]|0)+(c[(c[f>>2]|0)+12>>2]|0)|0)>>>0?((c[i>>2]|0)+(c[h>>2]|0)|0)>>>0>((c[(c[f>>2]|0)+8>>2]|0)+(c[(c[f>>2]|0)+16>>2]|0)|0)>>>0:0)|0)){o=c[j>>2]|0;l=e;return o|0;}c[m>>2]=(c[i>>2]|0)+(c[h>>2]|0)-(c[(c[f>>2]|0)+8>>2]|0);if((c[m>>2]|0)>(c[(c[f>>2]|0)+12>>2]|0))p=c[(c[f>>2]|0)+12>>2]|0;else p=c[m>>2]|0;c[n>>2]=p;c[(c[f>>2]|0)+16>>2]=c[n>>2];o=c[j>>2]|0;l=e;return o|0;}function Nj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=l;l=l+64|0;f=e+48|0;g=e+44|0;h=e+40|0;i=e+36|0;j=e+32|0;k=e+28|0;m=e+24|0;n=e+20|0;o=e+16|0;p=e+8|0;q=e+4|0;r=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[(c[f>>2]|0)+36>>2];c[j>>2]=c[(c[g>>2]|0)+8>>2];c[k>>2]=c[(c[g>>2]|0)+16>>2];c[m>>2]=c[(c[f>>2]|0)+4>>2];c[n>>2]=(c[m>>2]|0)+(c[(c[f>>2]|0)+24>>2]|0);c[o>>2]=(c[h>>2]|0)+-8;c[e+12>>2]=3;while(1){if(((c[n>>2]|0)+3+-1|0)>>>0>(c[o>>2]|0)>>>0)break;c[p>>2]=(c[n>>2]|0)-(c[m>>2]|0);c[q>>2]=0;while(1){s=c[n>>2]|0;if((c[q>>2]|0)>>>0>=3)break;c[r>>2]=Tk(s+(c[q>>2]|0)|0,c[j>>2]|0,c[k>>2]|0)|0;if(!((c[q>>2]|0)!=0?(c[(c[i>>2]|0)+(c[r>>2]<<2)>>2]|0)!=0:0))c[(c[i>>2]|0)+(c[r>>2]<<2)>>2]=(c[p>>2]|0)+(c[q>>2]|0);c[q>>2]=(c[q>>2]|0)+1;}c[n>>2]=s+3;}l=e;return;}function Oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=l;l=l+64|0;f=e+60|0;g=e+56|0;h=e+52|0;i=e+48|0;j=e+44|0;k=e+40|0;m=e+36|0;n=e+32|0;o=e+28|0;p=e+24|0;q=e+20|0;r=e+12|0;s=e+8|0;t=e+4|0;u=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[(c[f>>2]|0)+36>>2];c[j>>2]=c[(c[g>>2]|0)+8>>2];c[k>>2]=c[(c[g>>2]|0)+16>>2];c[m>>2]=c[(c[f>>2]|0)+44>>2];c[n>>2]=c[(c[g>>2]|0)+4>>2];c[o>>2]=c[(c[f>>2]|0)+4>>2];c[p>>2]=(c[o>>2]|0)+(c[(c[f>>2]|0)+24>>2]|0);c[q>>2]=(c[h>>2]|0)+-8;c[e+16>>2]=3;while(1){if(((c[p>>2]|0)+3+-1|0)>>>0>(c[q>>2]|0)>>>0)break;c[r>>2]=(c[p>>2]|0)-(c[o>>2]|0);c[s>>2]=0;while(1){v=c[p>>2]|0;if((c[s>>2]|0)>>>0>=3)break;c[t>>2]=Dk(v+(c[s>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0;c[u>>2]=Dk((c[p>>2]|0)+(c[s>>2]|0)|0,c[j>>2]|0,8)|0;if(!(c[s>>2]|0))c[(c[m>>2]|0)+(c[t>>2]<<2)>>2]=(c[r>>2]|0)+(c[s>>2]|0);if(!((c[s>>2]|0)!=0?(c[(c[i>>2]|0)+(c[u>>2]<<2)>>2]|0)!=0:0))c[(c[i>>2]|0)+(c[u>>2]<<2)>>2]=(c[r>>2]|0)+(c[s>>2]|0);c[s>>2]=(c[s>>2]|0)+1;}c[p>>2]=v+3;}l=e;return;}function Pj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=mk(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0,c[(c[g>>2]|0)+16>>2]|0)|0;l=e;return d|0;}function Qj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+64|0;g=f+48|0;h=f+44|0;i=f+40|0;j=f+36|0;k=f+32|0;m=f+28|0;n=f+24|0;o=f+20|0;p=f+16|0;q=f+12|0;r=f+8|0;s=f+4|0;t=f;c[q>>2]=a;c[r>>2]=b;c[s>>2]=d;c[t>>2]=e;e=c[r>>2]|0;d=c[s>>2]|0;s=c[t>>2]|0;t=c[(c[r>>2]|0)+16>>2]|0;c[g>>2]=c[q>>2];c[h>>2]=e;c[i>>2]=d;c[j>>2]=s;c[k>>2]=t;c[m>>2]=0;c[n>>2]=c[(c[g>>2]|0)+4>>2];c[o>>2]=(c[i>>2]|0)-(c[n>>2]|0);c[p>>2]=c[(c[g>>2]|0)+24>>2];while(1){if((c[p>>2]|0)>>>0>=(c[o>>2]|0)>>>0)break;i=Rj(c[g>>2]|0,c[h>>2]|0,(c[n>>2]|0)+(c[p>>2]|0)|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0)|0;c[p>>2]=(c[p>>2]|0)+i;}c[(c[g>>2]|0)+24>>2]=c[o>>2];l=f;return;}function Rj(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;i=l;l=l+144|0;j=i+128|0;k=i+124|0;m=i+120|0;n=i+116|0;o=i+112|0;p=i+108|0;q=i+104|0;r=i+100|0;s=i+96|0;t=i+92|0;u=i+88|0;v=i+84|0;w=i+80|0;x=i+76|0;y=i+72|0;z=i+68|0;A=i+64|0;B=i+60|0;C=i+56|0;D=i+52|0;E=i+48|0;F=i+44|0;G=i+40|0;H=i+36|0;I=i+32|0;J=i+28|0;K=i+24|0;L=i+20|0;M=i+16|0;N=i+12|0;O=i+8|0;P=i+4|0;Q=i;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=c[(c[k>>2]|0)+36>>2];c[s>>2]=c[(c[m>>2]|0)+8>>2];c[t>>2]=Sj(c[n>>2]|0,c[s>>2]|0,c[p>>2]|0)|0;c[u>>2]=c[(c[k>>2]|0)+44>>2];c[v>>2]=(c[(c[m>>2]|0)+4>>2]|0)-1;c[w>>2]=(1<<c[v>>2])-1;c[x>>2]=c[(c[r>>2]|0)+(c[t>>2]<<2)>>2];c[y>>2]=0;c[z>>2]=0;c[A>>2]=c[(c[k>>2]|0)+4>>2];c[B>>2]=c[(c[k>>2]|0)+8>>2];c[C>>2]=c[(c[k>>2]|0)+12>>2];c[D>>2]=(c[B>>2]|0)+(c[C>>2]|0);c[E>>2]=(c[A>>2]|0)+(c[C>>2]|0);c[G>>2]=(c[n>>2]|0)-(c[A>>2]|0);if((c[w>>2]|0)>>>0>=(c[G>>2]|0)>>>0)R=0;else R=(c[G>>2]|0)-(c[w>>2]|0)|0;c[H>>2]=R;c[I>>2]=(c[u>>2]|0)+((c[G>>2]&c[w>>2])<<1<<2);c[J>>2]=(c[I>>2]|0)+4;c[L>>2]=c[(c[k>>2]|0)+16>>2];c[M>>2]=(c[G>>2]|0)+8+1;c[N>>2]=8;c[O>>2]=1<<c[(c[m>>2]|0)+12>>2];c[(c[r>>2]|0)+(c[t>>2]<<2)>>2]=c[G>>2];while(1){t=c[O>>2]|0;c[O>>2]=t+-1;if(!t)break;if((c[x>>2]|0)>>>0<=(c[L>>2]|0)>>>0)break;c[P>>2]=(c[u>>2]|0)+((c[x>>2]&c[w>>2])<<1<<2);c[Q>>2]=(c[y>>2]|0)>>>0<(c[z>>2]|0)>>>0?c[y>>2]|0:c[z>>2]|0;if(c[q>>2]|0?((c[x>>2]|0)+(c[Q>>2]|0)|0)>>>0<(c[C>>2]|0)>>>0:0){c[F>>2]=(c[B>>2]|0)+(c[x>>2]|0);t=Uj((c[n>>2]|0)+(c[Q>>2]|0)|0,(c[F>>2]|0)+(c[Q>>2]|0)|0,c[o>>2]|0,c[D>>2]|0,c[E>>2]|0)|0;c[Q>>2]=(c[Q>>2]|0)+t;if(((c[x>>2]|0)+(c[Q>>2]|0)|0)>>>0>=(c[C>>2]|0)>>>0)c[F>>2]=(c[A>>2]|0)+(c[x>>2]|0);}else{c[F>>2]=(c[A>>2]|0)+(c[x>>2]|0);t=Tj((c[n>>2]|0)+(c[Q>>2]|0)|0,(c[F>>2]|0)+(c[Q>>2]|0)|0,c[o>>2]|0)|0;c[Q>>2]=(c[Q>>2]|0)+t;}if((c[Q>>2]|0)>>>0>(c[N>>2]|0)>>>0?(c[N>>2]=c[Q>>2],(c[Q>>2]|0)>>>0>((c[M>>2]|0)-(c[x>>2]|0)|0)>>>0):0)c[M>>2]=(c[x>>2]|0)+(c[Q>>2]|0);if(((c[n>>2]|0)+(c[Q>>2]|0)|0)==(c[o>>2]|0))break;t=c[x>>2]|0;if((d[(c[F>>2]|0)+(c[Q>>2]|0)>>0]|0|0)<(d[(c[n>>2]|0)+(c[Q>>2]|0)>>0]|0|0)){c[c[I>>2]>>2]=t;c[y>>2]=c[Q>>2];if((c[x>>2]|0)>>>0<=(c[H>>2]|0)>>>0){S=17;break;}c[I>>2]=(c[P>>2]|0)+4;c[x>>2]=c[(c[P>>2]|0)+4>>2];}else{c[c[J>>2]>>2]=t;c[z>>2]=c[Q>>2];if((c[x>>2]|0)>>>0<=(c[H>>2]|0)>>>0){S=20;break;}c[J>>2]=c[P>>2];c[x>>2]=c[c[P>>2]>>2];}}if((S|0)==17)c[I>>2]=K;else if((S|0)==20)c[J>>2]=K;c[c[J>>2]>>2]=0;c[c[I>>2]>>2]=0;if((c[N>>2]|0)>>>0>384){c[j>>2]=192<((c[N>>2]|0)-384|0)>>>0?192:(c[N>>2]|0)-384|0;T=c[j>>2]|0;l=i;return T|0;}else{c[j>>2]=(c[M>>2]|0)-((c[G>>2]|0)+8);T=c[j>>2]|0;l=i;return T|0;}return 0;}function Sj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;switch(c[i>>2]|0){case 8:{c[f>>2]=dk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 5:{c[f>>2]=ak(c[g>>2]|0,c[h>>2]|0)|0;break;}case 6:{c[f>>2]=bk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 7:{c[f>>2]=ck(c[g>>2]|0,c[h>>2]|0)|0;break;}default:c[f>>2]=$j(c[g>>2]|0,c[h>>2]|0)|0;}l=e;return c[f>>2]|0;}function Tj(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=Vj(c[i>>2]|0)|0;c[n>>2]=e^(Vj(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=Wj(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=Vj(c[i>>2]|0)|0;c[o>>2]=e^(Vj(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=Wj(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((Xj()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=Yj(c[i>>2]|0)|0,(o|0)==(Yj(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(Zj(c[i>>2]|0)|0)&65535,(o|0)==((Zj(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function Uj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=Tj(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(Tj((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function Vj(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Wj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(_j()|0)!=0;f=(Xj()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function Xj(){return 0;}function Yj(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Zj(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function _j(){return d[11936]|0|0;}function $j(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Yj(c[e>>2]|0)|0;e=lk(b,c[f>>2]|0)|0;l=d;return e|0;}function ak(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=ek(c[e>>2]|0)|0;e=kk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function bk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=ek(c[e>>2]|0)|0;e=jk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function ck(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=ek(c[e>>2]|0)|0;e=ik(b,y,c[f>>2]|0)|0;l=d;return e|0;}function dk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=ek(c[e>>2]|0)|0;e=fk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function ek(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(_j()|0)!=0;f=gk(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=hk(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function fk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=cE(c[d>>2]|0,c[d+4>>2]|0,-1213897629,-820265764)|0;d=iE(f|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return d|0;}function gk(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function hk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function ik(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,8)|0;d=cE(f|0,y|0,-591420061,13573052)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function jk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,16)|0;d=cE(f|0,y|0,-1126383717,53019)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function kk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,24)|0;d=cE(f|0,y|0,465362107,207)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function lk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]|0,-1640531535)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function mk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+48|0;g=f+44|0;h=f+40|0;i=f+36|0;j=f+32|0;k=f+28|0;m=f+24|0;n=f+20|0;o=f+16|0;p=f+12|0;q=f+8|0;r=f+4|0;s=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=c[(c[g>>2]|0)+36>>2];c[m>>2]=c[(c[h>>2]|0)+8>>2];c[n>>2]=c[(c[g>>2]|0)+44>>2];c[o>>2]=(1<<c[(c[h>>2]|0)+4>>2])-1;c[p>>2]=c[(c[g>>2]|0)+4>>2];c[q>>2]=(c[i>>2]|0)-(c[p>>2]|0);c[r>>2]=c[(c[g>>2]|0)+24>>2];while(1){if((c[r>>2]|0)>>>0>=(c[q>>2]|0)>>>0)break;c[s>>2]=nk((c[p>>2]|0)+(c[r>>2]|0)|0,c[m>>2]|0,c[j>>2]|0)|0;c[(c[n>>2]|0)+((c[r>>2]&c[o>>2])<<2)>>2]=c[(c[k>>2]|0)+(c[s>>2]<<2)>>2];c[(c[k>>2]|0)+(c[s>>2]<<2)>>2]=c[r>>2];c[r>>2]=(c[r>>2]|0)+1;}c[(c[g>>2]|0)+24>>2]=c[q>>2];q=c[k>>2]|0;k=c[q+((nk(c[i>>2]|0,c[m>>2]|0,c[j>>2]|0)|0)<<2)>>2]|0;l=f;return k|0;}function nk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;switch(c[i>>2]|0){case 8:{c[f>>2]=sk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 5:{c[f>>2]=pk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 6:{c[f>>2]=qk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 7:{c[f>>2]=rk(c[g>>2]|0,c[h>>2]|0)|0;break;}default:c[f>>2]=ok(c[g>>2]|0,c[h>>2]|0)|0;}l=e;return c[f>>2]|0;}function ok(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Bk(c[e>>2]|0)|0;e=Ck(b,c[f>>2]|0)|0;l=d;return e|0;}function pk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=tk(c[e>>2]|0)|0;e=Ak(b,y,c[f>>2]|0)|0;l=d;return e|0;}function qk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=tk(c[e>>2]|0)|0;e=zk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=tk(c[e>>2]|0)|0;e=yk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function sk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=tk(c[e>>2]|0)|0;e=uk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function tk(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(vk()|0)!=0;f=wk(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=xk(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function uk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=cE(c[d>>2]|0,c[d+4>>2]|0,-1213897629,-820265764)|0;d=iE(f|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return d|0;}function vk(){return d[11936]|0|0;}function wk(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function xk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function yk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,8)|0;d=cE(f|0,y|0,-591420061,13573052)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function zk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,16)|0;d=cE(f|0,y|0,-1126383717,53019)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,24)|0;d=cE(f|0,y|0,465362107,207)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Bk(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Ck(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]|0,-1640531535)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function Dk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;switch(c[i>>2]|0){case 8:{c[f>>2]=Ik(c[g>>2]|0,c[h>>2]|0)|0;break;}case 5:{c[f>>2]=Fk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 6:{c[f>>2]=Gk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 7:{c[f>>2]=Hk(c[g>>2]|0,c[h>>2]|0)|0;break;}default:c[f>>2]=Ek(c[g>>2]|0,c[h>>2]|0)|0;}l=e;return c[f>>2]|0;}function Ek(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Rk(c[e>>2]|0)|0;e=Sk(b,c[f>>2]|0)|0;l=d;return e|0;}function Fk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Jk(c[e>>2]|0)|0;e=Qk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Gk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Jk(c[e>>2]|0)|0;e=Pk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Hk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Jk(c[e>>2]|0)|0;e=Ok(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Ik(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Jk(c[e>>2]|0)|0;e=Kk(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Jk(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=(Lk()|0)!=0;f=Mk(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=Nk(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function Kk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=cE(c[d>>2]|0,c[d+4>>2]|0,-1213897629,-820265764)|0;d=iE(f|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return d|0;}function Lk(){return d[11936]|0|0;}function Mk(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function Nk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Ok(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,8)|0;d=cE(f|0,y|0,-591420061,13573052)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,16)|0;d=cE(f|0,y|0,-1126383717,53019)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Qk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,24)|0;d=cE(f|0,y|0,465362107,207)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function Rk(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Sk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]|0,-1640531535)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function Tk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;switch(c[i>>2]|0){case 8:{c[f>>2]=Yk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 5:{c[f>>2]=Vk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 6:{c[f>>2]=Wk(c[g>>2]|0,c[h>>2]|0)|0;break;}case 7:{c[f>>2]=Xk(c[g>>2]|0,c[h>>2]|0)|0;break;}default:c[f>>2]=Uk(c[g>>2]|0,c[h>>2]|0)|0;}l=e;return c[f>>2]|0;}function Uk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=fl(c[e>>2]|0)|0;e=gl(b,c[f>>2]|0)|0;l=d;return e|0;}function Vk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Zk(c[e>>2]|0)|0;e=el(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Wk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Zk(c[e>>2]|0)|0;e=dl(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Xk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Zk(c[e>>2]|0)|0;e=cl(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Yk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Zk(c[e>>2]|0)|0;e=_k(b,y,c[f>>2]|0)|0;l=d;return e|0;}function Zk(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b;e=b+8|0;c[e>>2]=a;a=($k()|0)!=0;f=al(c[e>>2]|0)|0;e=y;if(a){a=d;c[a>>2]=f;c[a+4>>2]=e;}else{a=bl(f,e)|0;e=d;c[e>>2]=a;c[e+4>>2]=y;}e=d;y=c[e+4>>2]|0;l=b;return c[e>>2]|0;}function _k(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=cE(c[d>>2]|0,c[d+4>>2]|0,-1213897629,-820265764)|0;d=iE(f|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return d|0;}function $k(){return d[11936]|0|0;}function al(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;e=a;f=a+4|0;y=d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24;l=b;return d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24|0;}function bl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function cl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,8)|0;d=cE(f|0,y|0,-591420061,13573052)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function dl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,16)|0;d=cE(f|0,y|0,-1126383717,53019)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function el(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=jE(c[d>>2]|0,c[d+4>>2]|0,24)|0;d=cE(f|0,y|0,465362107,207)|0;f=iE(d|0,y|0,64-(c[g>>2]|0)|0)|0;l=e;return f|0;}function fl(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function gl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]|0,-1640531535)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function hl(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;il(c[d>>2]|0);c[(c[d>>2]|0)+24>>2]=(c[(c[d>>2]|0)+12>>2]|0)+1;c[(c[d>>2]|0)+20>>2]=0;c[(c[d>>2]|0)+48+28>>2]=0;l=b;return;}function il(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+8|0;e=b+4|0;f=b;c[d>>2]=a;c[e>>2]=(c[c[d>>2]>>2]|0)-(c[(c[d>>2]|0)+4>>2]|0);c[f>>2]=c[e>>2];c[(c[d>>2]|0)+16>>2]=c[f>>2];c[(c[d>>2]|0)+12>>2]=c[f>>2];l=b;return;}function jl(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+628>>2]=0;a=(c[d>>2]|0)+240|0;c[a>>2]=0;c[a+4>>2]=0;l=b;return;}function kl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+12|0;e=b+8|0;f=b+4|0;g=b;c[d>>2]=1<<c[a+4>>2];c[e>>2]=(c[a+8>>2]|0)>>>0<(c[a+4>>2]|0)>>>0?c[a+8>>2]|0:c[a+4>>2]|0;c[f>>2]=1<<(c[a+4>>2]|0)-(c[e>>2]|0);c[g>>2]=(c[f>>2]|0)+(c[d>>2]<<3);l=b;return(c[a>>2]|0?c[g>>2]|0:0)|0;}function ll(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d;c[e>>2]=b;if(!(c[a>>2]|0)){f=0;l=d;return f|0;}f=((c[e>>2]|0)>>>0)/((c[a+12>>2]|0)>>>0)|0;l=d;return f|0;}function ml(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;h=l;l=l+304|0;i=h+200|0;j=h+80|0;k=h+196|0;m=h+192|0;n=h;o=h+188|0;p=h+184|0;q=h+76|0;r=h+72|0;s=h+68|0;t=h+64|0;u=h+60|0;v=h+56|0;w=h+52|0;x=h+48|0;z=h+44|0;A=h+40|0;B=h+36|0;C=h+32|0;D=h+28|0;E=h+24|0;F=h+20|0;G=h+16|0;H=h+12|0;I=h+8|0;c[m>>2]=a;a=n;c[a>>2]=d;c[a+4>>2]=e;c[o>>2]=f;c[p>>2]=g;if(!(c[o>>2]|0)){g=c[(c[m>>2]|0)+596>>2]|0;f=c[(c[m>>2]|0)+232>>2]|0;e=c[p>>2]|0;a=n;d=c[a>>2]|0;J=c[a+4>>2]|0;K=j;L=(c[m>>2]|0)+116|0;M=K+104|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0;}while((K|0)<(M|0));K=i;L=b;M=K+104|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0;}while((K|0)<(M|0));if(nl(j,i,g,f,e,d,J)|0){J=c[m>>2]|0;d=n;e=c[d>>2]|0;f=c[d+4>>2]|0;K=i;L=b;M=K+104|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0;}while((K|0)<(M|0));c[k>>2]=ol(J,i,e,f)|0;N=c[k>>2]|0;l=h;return N|0;}}if(c[b+68>>2]|0){c[b+68+20>>2]=c[b+4>>2];pl(b+68|0,b+4|0);f=ql(c[b+68+12>>2]|0)|0;e=(c[m>>2]|0)+408+32|0;c[e>>2]=f;c[e+4>>2]=y;}e=jE(1,0,c[b+4>>2]|0)|0;f=y;J=n;d=c[J+4>>2]|0;if(f>>>0<d>>>0|((f|0)==(d|0)?e>>>0<(c[J>>2]|0)>>>0:0)){J=jE(1,0,c[b+4>>2]|0)|0;O=J;P=y;}else{J=n;O=c[J>>2]|0;P=c[J+4>>2]|0;}if(1>O>>>0)Q=1;else{O=jE(1,0,c[b+4>>2]|0)|0;J=y;P=n;e=c[P+4>>2]|0;if(J>>>0<e>>>0|((J|0)==(e|0)?O>>>0<(c[P>>2]|0)>>>0:0)){P=jE(1,0,c[b+4>>2]|0)|0;R=P;S=y;}else{P=n;R=c[P>>2]|0;S=c[P+4>>2]|0;}Q=R;}c[q>>2]=Q;c[r>>2]=131072<(c[q>>2]|0)>>>0?131072:c[q>>2]|0;c[s>>2]=(c[b+4+16>>2]|0)==3?3:4;c[t>>2]=((c[r>>2]|0)>>>0)/((c[s>>2]|0)>>>0)|0;c[u>>2]=(c[r>>2]|0)+((c[t>>2]|0)*11|0);if((c[p>>2]|0)==1)T=(lj(c[r>>2]|0)|0)+1|0;else T=0;c[v>>2]=T;if((c[p>>2]|0)==1)U=(c[q>>2]|0)+(c[r>>2]|0)|0;else U=0;c[w>>2]=U;c[x>>2]=Aj(b+4|0,1)|0;U=b+68|0;q=c[r>>2]|0;c[i>>2]=c[U>>2];c[i+4>>2]=c[U+4>>2];c[i+8>>2]=c[U+8>>2];c[i+12>>2]=c[U+12>>2];c[i+16>>2]=c[U+16>>2];c[i+20>>2]=c[U+20>>2];c[z>>2]=ll(i,q)|0;c[B>>2]=6144;c[C>>2]=9184;c[D>>2]=(c[w>>2]|0)+(c[v>>2]|0);C=b+68|0;c[i>>2]=c[C>>2];c[i+4>>2]=c[C+4>>2];c[i+8>>2]=c[C+8>>2];c[i+12>>2]=c[C+12>>2];c[i+16>>2]=c[C+16>>2];c[i+20>>2]=c[C+20>>2];c[E>>2]=kl(i)|0;c[F>>2]=(c[z>>2]|0)*12;c[G>>2]=15328+(c[E>>2]|0)+(c[F>>2]|0)+(c[x>>2]|0)+(c[u>>2]|0)+(c[D>>2]|0);do{if((c[(c[m>>2]|0)+228>>2]|0)>>>0<(c[G>>2]|0)>>>0){if(c[(c[m>>2]|0)+364>>2]|0){c[k>>2]=-64;N=c[k>>2]|0;l=h;return N|0;}c[(c[m>>2]|0)+228>>2]=0;D=c[(c[m>>2]|0)+224>>2]|0;u=(c[m>>2]|0)+352|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];Th(D,i);D=c[G>>2]|0;u=(c[m>>2]|0)+352|0;c[i>>2]=c[u>>2];c[i+4>>2]=c[u+4>>2];c[i+8>>2]=c[u+8>>2];u=Rh(D,i)|0;c[(c[m>>2]|0)+224>>2]=u;if(c[(c[m>>2]|0)+224>>2]|0){c[(c[m>>2]|0)+228>>2]=c[G>>2];c[A>>2]=c[(c[m>>2]|0)+224>>2];c[(c[m>>2]|0)+472>>2]=c[(c[m>>2]|0)+224>>2];c[(c[m>>2]|0)+472+4>>2]=(c[(c[m>>2]|0)+472>>2]|0)+4592;c[A>>2]=(c[(c[m>>2]|0)+472+4>>2]|0)+4592;c[(c[m>>2]|0)+588>>2]=c[A>>2];break;}c[k>>2]=-64;N=c[k>>2]|0;l=h;return N|0;}}while(0);K=(c[m>>2]|0)+116|0;L=b;M=K+104|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0;}while((K|0)<(M|0));L=n;K=dE(c[L>>2]|0,c[L+4>>2]|0,1,0)|0;L=(c[m>>2]|0)+240|0;c[L>>2]=K;c[L+4>>2]=y;L=(c[m>>2]|0)+248|0;c[L>>2]=0;c[L+4>>2]=0;L=(c[m>>2]|0)+256|0;c[L>>2]=0;c[L+4>>2]=0;L=n;if((c[L>>2]|0)==-1?(c[L+4>>2]|0)==-1:0)c[(c[m>>2]|0)+116+32>>2]=0;c[(c[m>>2]|0)+232>>2]=c[r>>2];Lh((c[m>>2]|0)+264|0,0,0)|0;c[c[m>>2]>>2]=1;c[(c[m>>2]|0)+220>>2]=0;Cj(c[(c[m>>2]|0)+472>>2]|0);c[A>>2]=(c[(c[m>>2]|0)+588>>2]|0)+6144;if(c[b+68>>2]|0){c[H>>2]=1<<c[b+68+4>>2];oE(c[A>>2]|0,0,c[H>>2]<<3|0)|0;c[(c[m>>2]|0)+408+20>>2]=c[A>>2];c[A>>2]=(c[(c[m>>2]|0)+408+20>>2]|0)+(c[H>>2]<<3);c[(c[m>>2]|0)+448>>2]=c[A>>2];c[A>>2]=(c[(c[m>>2]|0)+448>>2]|0)+((c[z>>2]|0)*12|0);c[(c[m>>2]|0)+452>>2]=c[z>>2];z=(c[m>>2]|0)+408|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;}c[A>>2]=Dj((c[m>>2]|0)+472+8|0,c[A>>2]|0,b+4|0,c[o>>2]|0,1)|0;c[(c[m>>2]|0)+368>>2]=c[A>>2];c[A>>2]=(c[(c[m>>2]|0)+368>>2]|0)+(c[t>>2]<<3);c[(c[m>>2]|0)+368+16>>2]=c[A>>2];c[(c[m>>2]|0)+368+20>>2]=(c[(c[m>>2]|0)+368+16>>2]|0)+(c[t>>2]|0);c[(c[m>>2]|0)+368+24>>2]=(c[(c[m>>2]|0)+368+20>>2]|0)+(c[t>>2]|0);c[(c[m>>2]|0)+368+8>>2]=(c[(c[m>>2]|0)+368+24>>2]|0)+(c[t>>2]|0);c[A>>2]=(c[(c[m>>2]|0)+368+8>>2]|0)+(c[r>>2]|0);if(c[b+68>>2]|0){c[I>>2]=1<<(c[b+68+4>>2]|0)-(c[b+68+8>>2]|0);oE(c[A>>2]|0,0,c[I>>2]|0)|0;c[(c[m>>2]|0)+408+24>>2]=c[A>>2];c[A>>2]=(c[(c[m>>2]|0)+408+24>>2]|0)+(c[I>>2]|0);il((c[m>>2]|0)+408|0);}rl(c[m>>2]|0,0,0)|0;c[(c[m>>2]|0)+596>>2]=c[w>>2];c[(c[m>>2]|0)+592>>2]=c[A>>2];c[(c[m>>2]|0)+616>>2]=c[v>>2];c[(c[m>>2]|0)+612>>2]=(c[(c[m>>2]|0)+592>>2]|0)+(c[w>>2]|0);c[k>>2]=0;N=c[k>>2]|0;l=h;return N|0;}function nl(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;i=l;l=l+80|0;j=i+48|0;k=i+16|0;m=i+44|0;n=i+12|0;o=i+8|0;p=i;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;f=p;c[f>>2]=g;c[f+4>>2]=h;h=a+4|0;f=b+4|0;c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];c[k+12>>2]=c[h+12>>2];c[k+16>>2]=c[h+16>>2];c[k+20>>2]=c[h+20>>2];c[k+24>>2]=c[h+24>>2];c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];c[j+16>>2]=c[f+16>>2];c[j+20>>2]=c[f+20>>2];c[j+24>>2]=c[f+24>>2];if(!(tl(k,j)|0)){q=0;r=q&1;l=i;return r|0;}f=a+68|0;a=b+68|0;c[k>>2]=c[f>>2];c[k+4>>2]=c[f+4>>2];c[k+8>>2]=c[f+8>>2];c[k+12>>2]=c[f+12>>2];c[k+16>>2]=c[f+16>>2];c[k+20>>2]=c[f+20>>2];c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];c[j+16>>2]=c[a+16>>2];c[j+20>>2]=c[a+20>>2];if(!(ul(k,j)|0)){q=0;r=q&1;l=i;return r|0;}k=c[m>>2]|0;m=c[n>>2]|0;n=c[o>>2]|0;o=b+4|0;b=p;p=c[b>>2]|0;a=c[b+4>>2]|0;c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];c[j+16>>2]=c[o+16>>2];c[j+20>>2]=c[o+20>>2];c[j+24>>2]=c[o+24>>2];q=(vl(k,m,n,j,p,a)|0)!=0;r=q&1;l=i;return r|0;}function ol(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0;f=l;l=l+32|0;g=f+16|0;h=f;i=f+12|0;j=f+8|0;c[g>>2]=a;a=h;c[a>>2]=d;c[a+4>>2]=e;e=jE(1,0,c[b+4>>2]|0)|0;a=y;d=h;k=c[d+4>>2]|0;if(a>>>0<k>>>0|((a|0)==(k|0)?e>>>0<(c[d>>2]|0)>>>0:0)){d=jE(1,0,c[b+4>>2]|0)|0;m=y;n=d;}else{d=h;m=c[d+4>>2]|0;n=c[d>>2]|0;}if(1>n>>>0)o=1;else{n=jE(1,0,c[b+4>>2]|0)|0;d=y;m=h;e=c[m+4>>2]|0;if(d>>>0<e>>>0|((d|0)==(e|0)?n>>>0<(c[m>>2]|0)>>>0:0)){m=jE(1,0,c[b+4>>2]|0)|0;p=m;q=y;}else{m=h;p=c[m>>2]|0;q=c[m+4>>2]|0;}o=p;}c[i>>2]=o;c[j>>2]=131072<(c[i>>2]|0)>>>0?131072:c[i>>2]|0;c[(c[g>>2]|0)+232>>2]=c[j>>2];j=(c[g>>2]|0)+116|0;i=b;o=j+104|0;do{c[j>>2]=c[i>>2];j=j+4|0;i=i+4|0;}while((j|0)<(o|0));i=h;j=dE(c[i>>2]|0,c[i+4>>2]|0,1,0)|0;i=(c[g>>2]|0)+240|0;c[i>>2]=j;c[i+4>>2]=y;i=(c[g>>2]|0)+248|0;c[i>>2]=0;c[i+4>>2]=0;i=(c[g>>2]|0)+256|0;c[i>>2]=0;c[i+4>>2]=0;i=h;if((c[i>>2]|0)==-1?(c[i+4>>2]|0)==-1:0)c[(c[g>>2]|0)+116+32>>2]=0;c[c[g>>2]>>2]=1;c[(c[g>>2]|0)+220>>2]=0;if(!(c[b+68>>2]|0)){r=c[g>>2]|0;rl(r,0,0)|0;s=c[g>>2]|0;t=s+472|0;u=t+8|0;hl(u);v=c[g>>2]|0;w=v+472|0;x=c[w>>2]|0;Cj(x);z=c[g>>2]|0;A=z+264|0;Lh(A,0,0)|0;l=f;return 0;}il((c[g>>2]|0)+408|0);r=c[g>>2]|0;rl(r,0,0)|0;s=c[g>>2]|0;t=s+472|0;u=t+8|0;hl(u);v=c[g>>2]|0;w=v+472|0;x=c[w>>2]|0;Cj(x);z=c[g>>2]|0;A=z+264|0;Lh(A,0,0)|0;l=f;return 0;}function pl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;d=l;l=l+16|0;e=d+12|0;f=d+8|0;g=d+4|0;h=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[c[f>>2]>>2];if(!(c[(c[e>>2]|0)+8>>2]|0))c[(c[e>>2]|0)+8>>2]=3;if(!(c[(c[e>>2]|0)+12>>2]|0))c[(c[e>>2]|0)+12>>2]=64;if((c[(c[f>>2]|0)+24>>2]|0)>>>0>=7){if((c[(c[f>>2]|0)+20>>2]|0)>>>0>(c[(c[e>>2]|0)+12>>2]|0)>>>0)i=c[(c[f>>2]|0)+20>>2]|0;else i=c[(c[e>>2]|0)+12>>2]|0;c[h>>2]=i;c[(c[e>>2]|0)+12>>2]=c[h>>2];}if(!(c[(c[e>>2]|0)+4>>2]|0))c[(c[e>>2]|0)+4>>2]=6>((c[g>>2]|0)-7|0)>>>0?6:(c[g>>2]|0)-7|0;if(!(c[(c[e>>2]|0)+16>>2]|0)){if((c[g>>2]|0)>>>0<(c[(c[e>>2]|0)+4>>2]|0)>>>0)j=0;else j=(c[g>>2]|0)-(c[(c[e>>2]|0)+4>>2]|0)|0;c[(c[e>>2]|0)+16>>2]=j;}j=c[e>>2]|0;if((c[(c[e>>2]|0)+8>>2]|0)>>>0<(c[(c[e>>2]|0)+4>>2]|0)>>>0){k=c[j+8>>2]|0;m=c[e>>2]|0;n=m+8|0;c[n>>2]=k;l=d;return;}else{k=c[j+4>>2]|0;m=c[e>>2]|0;n=m+8|0;c[n>>2]=k;l=d;return;}}function ql(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=sl(-1213897629,-820265764,(c[d>>2]|0)-1|0,0)|0;l=b;return a|0;}function rl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;if((c[c[g>>2]>>2]|0)!=1){c[f>>2]=-60;j=c[f>>2]|0;l=e;return j|0;}if(c[(c[g>>2]|0)+116+68>>2]|0){c[f>>2]=-40;j=c[f>>2]|0;l=e;return j|0;}else{c[(c[g>>2]|0)+456>>2]=c[h>>2];c[(c[g>>2]|0)+456+8>>2]=c[i>>2];c[(c[g>>2]|0)+456+12>>2]=c[i>>2];c[(c[g>>2]|0)+456+4>>2]=0;c[f>>2]=0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function sl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+16|0;h=f+8|0;i=f;j=g;c[j>>2]=a;c[j+4>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=i;c[e>>2]=1;c[e+4>>2]=0;while(1){e=h;if(!((c[e>>2]|0)!=0|(c[e+4>>2]|0)!=0))break;if((c[h>>2]&1|0)!=0|0!=0){e=g;b=i;d=cE(c[b>>2]|0,c[b+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;e=i;c[e>>2]=d;c[e+4>>2]=y;}e=h;d=iE(c[e>>2]|0,c[e+4>>2]|0,1)|0;e=h;c[e>>2]=d;c[e+4>>2]=y;e=g;d=g;b=cE(c[d>>2]|0,c[d+4>>2]|0,c[e>>2]|0,c[e+4>>2]|0)|0;e=g;c[e>>2]=b;c[e+4>>2]=y;}g=i;y=c[g+4>>2]|0;l=f;return c[g>>2]|0;}function tl(a,b){a=a|0;b=b|0;return((c[a+8>>2]|0)==(c[b+8>>2]|0)?(c[a+4>>2]|0)==(c[b+4>>2]|0):0)&(c[a+24>>2]|0)==(c[b+24>>2]|0)&((c[a+16>>2]|0)==3|0)==((c[b+16>>2]|0)==3|0)|0;}function ul(a,b){a=a|0;b=b|0;var d=0;if(!(c[a>>2]|0)?!(c[b>>2]|0):0)d=1;else if((((c[a>>2]|0)==(c[b>>2]|0)?(c[a+4>>2]|0)==(c[b+4>>2]|0):0)?(c[a+8>>2]|0)==(c[b+8>>2]|0):0)?(c[a+12>>2]|0)==(c[b+12>>2]|0):0)d=(c[a+16>>2]|0)==(c[b+16>>2]|0);else d=0;return d&1|0;}function vl(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;h=l;l=l+32|0;i=h+28|0;j=h+24|0;k=h+20|0;m=h;n=h+16|0;o=h+12|0;p=h+8|0;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;d=m;c[d>>2]=f;c[d+4>>2]=g;g=jE(1,0,c[e>>2]|0)|0;d=y;f=m;b=c[f+4>>2]|0;if(d>>>0<b>>>0|((d|0)==(b|0)?g>>>0<(c[f>>2]|0)>>>0:0)){f=jE(1,0,c[e>>2]|0)|0;q=f;r=y;}else{f=m;q=c[f>>2]|0;r=c[f+4>>2]|0;}if(1>q>>>0)s=1;else{q=jE(1,0,c[e>>2]|0)|0;f=y;r=m;g=c[r+4>>2]|0;if(f>>>0<g>>>0|((f|0)==(g|0)?q>>>0<(c[r>>2]|0)>>>0:0)){r=jE(1,0,c[e>>2]|0)|0;t=r;u=y;}else{r=m;t=c[r>>2]|0;u=c[r+4>>2]|0;}s=t;}c[n>>2]=s;c[o>>2]=131072<(c[n>>2]|0)>>>0?131072:c[n>>2]|0;if((c[k>>2]|0)!=1){v=0;c[p>>2]=v;w=c[o>>2]|0;x=c[j>>2]|0;z=w>>>0<=x>>>0;A=z&1;B=c[p>>2]|0;C=c[i>>2]|0;D=B>>>0<=C>>>0;E=D&1;F=A&E;l=h;return F|0;}v=(c[n>>2]|0)+(c[o>>2]|0)|0;c[p>>2]=v;w=c[o>>2]|0;x=c[j>>2]|0;z=w>>>0<=x>>>0;A=z&1;B=c[p>>2]|0;C=c[i>>2]|0;D=B>>>0<=C>>>0;E=D&1;F=A&E;l=h;return F|0;}function wl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;xl(c[f>>2]|0,c[g>>2]&65535);a[(c[f>>2]|0)+2>>0]=(c[g>>2]|0)>>>16;l=e;return;}function xl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g+4|0;i=g+8|0;j=g;c[h>>2]=d;b[i>>1]=f;f=(Jj()|0)!=0;d=c[h>>2]|0;if(f){yl(d,b[i>>1]|0);l=g;return;}else{c[j>>2]=d;a[c[j>>2]>>0]=b[i>>1];a[(c[j>>2]|0)+1>>0]=(e[i>>1]|0)>>8;l=g;return;}}function yl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f;h=f+4|0;c[g>>2]=d;b[h>>1]=e;e=b[h>>1]|0;h=c[g>>2]|0;a[h>>0]=e;a[h+1>>0]=e>>8;l=f;return;}function zl(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;d=l;l=l+48|0;f=d+32|0;g=d+28|0;h=d+24|0;i=d+20|0;j=d+16|0;k=d+12|0;m=d+8|0;n=d+4|0;o=d;c[f>>2]=b;c[g>>2]=c[c[f>>2]>>2];c[h>>2]=c[(c[f>>2]|0)+16>>2];c[i>>2]=c[(c[f>>2]|0)+24>>2];c[j>>2]=c[(c[f>>2]|0)+20>>2];c[k>>2]=((c[(c[f>>2]|0)+4>>2]|0)-(c[c[f>>2]>>2]|0)|0)/8|0;c[m>>2]=0;while(1){if((c[m>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;c[n>>2]=e[(c[g>>2]|0)+(c[m>>2]<<3)+4>>1];c[o>>2]=e[(c[g>>2]|0)+(c[m>>2]<<3)+6>>1];b=(Al(c[n>>2]|0)|0)&255;a[(c[h>>2]|0)+(c[m>>2]|0)>>0]=b;b=(uj(c[(c[g>>2]|0)+(c[m>>2]<<3)>>2]|0)|0)&255;a[(c[i>>2]|0)+(c[m>>2]|0)>>0]=b;b=(Bl(c[o>>2]|0)|0)&255;a[(c[j>>2]|0)+(c[m>>2]|0)>>0]=b;c[m>>2]=(c[m>>2]|0)+1;}if((c[(c[f>>2]|0)+28>>2]|0)==1)a[(c[h>>2]|0)+(c[(c[f>>2]|0)+32>>2]|0)>>0]=35;if((c[(c[f>>2]|0)+28>>2]|0)!=2){l=d;return;}a[(c[j>>2]|0)+(c[(c[f>>2]|0)+32>>2]|0)>>0]=52;l=d;return;}function Al(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;if((c[e>>2]|0)>>>0>63){f=(uj(a)|0)+19|0;l=b;return f|0;}else{f=d[3008+a>>0]|0;l=b;return f|0;}return 0;}function Bl(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;if((c[e>>2]|0)>>>0>127){f=(uj(a)|0)+36|0;l=b;return f|0;}else{f=d[3072+a>>0]|0;l=b;return f|0;}return 0;}function Cl(a,b,d,e,f,g,h,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;o=l;l=l+64|0;p=o+48|0;q=o+44|0;r=o+40|0;s=o+36|0;t=o+32|0;u=o+28|0;v=o+24|0;w=o+20|0;x=o+16|0;y=o+12|0;z=o+8|0;A=o+4|0;B=o;c[q>>2]=a;c[r>>2]=b;c[s>>2]=d;c[t>>2]=e;c[u>>2]=f;c[v>>2]=g;c[w>>2]=h;c[x>>2]=i;c[y>>2]=j;c[z>>2]=k;c[A>>2]=m;c[B>>2]=n;if(c[B>>2]|0){c[p>>2]=Dl(c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;C=c[p>>2]|0;l=o;return C|0;}else{c[p>>2]=El(c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0,c[x>>2]|0,c[y>>2]|0,c[z>>2]|0,c[A>>2]|0)|0;C=c[p>>2]|0;l=o;return C|0;}return 0;}function Dl(b,f,g,h,i,j,k,m,n,o,p){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;q=l;l=l+208|0;r=q+192|0;s=q+188|0;t=q+184|0;u=q+180|0;v=q+176|0;w=q+172|0;x=q+168|0;y=q+164|0;z=q+160|0;A=q+156|0;B=q+152|0;C=q+148|0;D=q+128|0;E=q+112|0;F=q+96|0;G=q+80|0;H=q+76|0;I=q+72|0;J=q+68|0;K=q+64|0;L=q+198|0;M=q+197|0;N=q+196|0;O=q+60|0;P=q+56|0;Q=q+52|0;R=q+48|0;S=q+44|0;T=q+40|0;U=q+36|0;V=q+32|0;W=q+28|0;X=q+24|0;Y=q+20|0;Z=q+16|0;_=q+12|0;$=q+8|0;aa=q+4|0;ba=q;c[T>>2]=b;c[U>>2]=f;c[V>>2]=g;c[W>>2]=h;c[X>>2]=i;c[Y>>2]=j;c[Z>>2]=k;c[_>>2]=m;c[$>>2]=n;c[aa>>2]=o;c[ba>>2]=p;p=c[U>>2]|0;U=c[V>>2]|0;V=c[W>>2]|0;W=c[X>>2]|0;X=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;aa=c[ba>>2]|0;c[s>>2]=c[T>>2];c[t>>2]=p;c[u>>2]=U;c[v>>2]=V;c[w>>2]=W;c[x>>2]=X;c[y>>2]=Y;c[z>>2]=Z;c[A>>2]=_;c[B>>2]=$;c[C>>2]=aa;c[H>>2]=Fl(D,c[s>>2]|0,c[t>>2]|0)|0;if(wj(c[H>>2]|0)|0){c[r>>2]=-70;ca=c[r>>2]|0;l=q;return ca|0;}Gl(E,c[u>>2]|0,d[(c[v>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Gl(F,c[w>>2]|0,d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Gl(G,c[y>>2]|0,d[(c[z>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Hl(D,e[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)+4>>1]|0,c[5696+((d[(c[z>>2]|0)+((c[B>>2]|0)-1)>>0]|0)<<2)>>2]|0);if(Il()|0)Jl(D);Hl(D,e[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)+6>>1]|0,c[5840+((d[(c[v>>2]|0)+((c[B>>2]|0)-1)>>0]|0)<<2)>>2]|0);if(Il()|0)Jl(D);if(c[C>>2]|0){c[I>>2]=d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0];y=c[I>>2]|0;w=c[I>>2]|0;u=(Il()|0)!=0;if(w>>>0<((u?25:57)-1|0)>>>0)da=c[I>>2]|0;else{u=(Il()|0)!=0;da=(u?25:57)-1|0;}c[J>>2]=y-da;if(c[J>>2]|0){Hl(D,c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0,c[J>>2]|0);Jl(D);}Hl(D,(c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0)>>>(c[J>>2]|0),(c[I>>2]|0)-(c[J>>2]|0)|0);}else Hl(D,c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0,d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Jl(D);c[K>>2]=(c[B>>2]|0)-2;while(1){if((c[K>>2]|0)>>>0>=(c[B>>2]|0)>>>0)break;a[L>>0]=a[(c[z>>2]|0)+(c[K>>2]|0)>>0]|0;a[M>>0]=a[(c[x>>2]|0)+(c[K>>2]|0)>>0]|0;a[N>>0]=a[(c[v>>2]|0)+(c[K>>2]|0)>>0]|0;c[O>>2]=c[5696+((d[L>>0]|0)<<2)>>2];c[P>>2]=d[M>>0];c[Q>>2]=c[5840+((d[N>>0]|0)<<2)>>2];Kl(D,F,d[M>>0]|0);Kl(D,E,d[N>>0]|0);if(Il()|0)Jl(D);Kl(D,G,d[L>>0]|0);if(!(!(Il()|0)?((c[P>>2]|0)+(c[Q>>2]|0)+(c[O>>2]|0)|0)>>>0<31:0))Jl(D);Hl(D,e[(c[A>>2]|0)+(c[K>>2]<<3)+4>>1]|0,c[O>>2]|0);if(Il()|0?((c[O>>2]|0)+(c[Q>>2]|0)|0)>>>0>24:0)Jl(D);Hl(D,e[(c[A>>2]|0)+(c[K>>2]<<3)+6>>1]|0,c[Q>>2]|0);if(!(!(Il()|0)?((c[P>>2]|0)+(c[Q>>2]|0)+(c[O>>2]|0)|0)>>>0<=56:0))Jl(D);if(c[C>>2]|0){J=c[P>>2]|0;I=c[P>>2]|0;da=(Il()|0)!=0;if(I>>>0<((da?25:57)-1|0)>>>0)ea=c[P>>2]|0;else{da=(Il()|0)!=0;ea=(da?25:57)-1|0;}c[R>>2]=J-ea;if(c[R>>2]|0){Hl(D,c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0,c[R>>2]|0);Jl(D);}Hl(D,(c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0)>>>(c[R>>2]|0),(c[P>>2]|0)-(c[R>>2]|0)|0);}else Hl(D,c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0,c[P>>2]|0);Jl(D);c[K>>2]=(c[K>>2]|0)+-1;}Ll(D,E);Ll(D,F);Ll(D,G);c[S>>2]=Ml(D)|0;if(!(c[S>>2]|0)){c[r>>2]=-70;ca=c[r>>2]|0;l=q;return ca|0;}else{c[r>>2]=c[S>>2];ca=c[r>>2]|0;l=q;return ca|0;}return 0;}function El(b,f,g,h,i,j,k,m,n,o,p){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;q=l;l=l+208|0;r=q+192|0;s=q+188|0;t=q+184|0;u=q+180|0;v=q+176|0;w=q+172|0;x=q+168|0;y=q+164|0;z=q+160|0;A=q+156|0;B=q+152|0;C=q+148|0;D=q+128|0;E=q+112|0;F=q+96|0;G=q+80|0;H=q+76|0;I=q+72|0;J=q+68|0;K=q+64|0;L=q+198|0;M=q+197|0;N=q+196|0;O=q+60|0;P=q+56|0;Q=q+52|0;R=q+48|0;S=q+44|0;T=q+40|0;U=q+36|0;V=q+32|0;W=q+28|0;X=q+24|0;Y=q+20|0;Z=q+16|0;_=q+12|0;$=q+8|0;aa=q+4|0;ba=q;c[T>>2]=b;c[U>>2]=f;c[V>>2]=g;c[W>>2]=h;c[X>>2]=i;c[Y>>2]=j;c[Z>>2]=k;c[_>>2]=m;c[$>>2]=n;c[aa>>2]=o;c[ba>>2]=p;p=c[U>>2]|0;U=c[V>>2]|0;V=c[W>>2]|0;W=c[X>>2]|0;X=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;aa=c[ba>>2]|0;c[s>>2]=c[T>>2];c[t>>2]=p;c[u>>2]=U;c[v>>2]=V;c[w>>2]=W;c[x>>2]=X;c[y>>2]=Y;c[z>>2]=Z;c[A>>2]=_;c[B>>2]=$;c[C>>2]=aa;c[H>>2]=Fl(D,c[s>>2]|0,c[t>>2]|0)|0;if(wj(c[H>>2]|0)|0){c[r>>2]=-70;ca=c[r>>2]|0;l=q;return ca|0;}Gl(E,c[u>>2]|0,d[(c[v>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Gl(F,c[w>>2]|0,d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Gl(G,c[y>>2]|0,d[(c[z>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Hl(D,e[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)+4>>1]|0,c[5696+((d[(c[z>>2]|0)+((c[B>>2]|0)-1)>>0]|0)<<2)>>2]|0);if(Il()|0)Jl(D);Hl(D,e[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)+6>>1]|0,c[5840+((d[(c[v>>2]|0)+((c[B>>2]|0)-1)>>0]|0)<<2)>>2]|0);if(Il()|0)Jl(D);if(c[C>>2]|0){c[I>>2]=d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0];y=c[I>>2]|0;w=c[I>>2]|0;u=(Il()|0)!=0;if(w>>>0<((u?25:57)-1|0)>>>0)da=c[I>>2]|0;else{u=(Il()|0)!=0;da=(u?25:57)-1|0;}c[J>>2]=y-da;if(c[J>>2]|0){Hl(D,c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0,c[J>>2]|0);Jl(D);}Hl(D,(c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0)>>>(c[J>>2]|0),(c[I>>2]|0)-(c[J>>2]|0)|0);}else Hl(D,c[(c[A>>2]|0)+((c[B>>2]|0)-1<<3)>>2]|0,d[(c[x>>2]|0)+((c[B>>2]|0)-1)>>0]|0);Jl(D);c[K>>2]=(c[B>>2]|0)-2;while(1){if((c[K>>2]|0)>>>0>=(c[B>>2]|0)>>>0)break;a[L>>0]=a[(c[z>>2]|0)+(c[K>>2]|0)>>0]|0;a[M>>0]=a[(c[x>>2]|0)+(c[K>>2]|0)>>0]|0;a[N>>0]=a[(c[v>>2]|0)+(c[K>>2]|0)>>0]|0;c[O>>2]=c[5696+((d[L>>0]|0)<<2)>>2];c[P>>2]=d[M>>0];c[Q>>2]=c[5840+((d[N>>0]|0)<<2)>>2];Kl(D,F,d[M>>0]|0);Kl(D,E,d[N>>0]|0);if(Il()|0)Jl(D);Kl(D,G,d[L>>0]|0);if(!(!(Il()|0)?((c[P>>2]|0)+(c[Q>>2]|0)+(c[O>>2]|0)|0)>>>0<31:0))Jl(D);Hl(D,e[(c[A>>2]|0)+(c[K>>2]<<3)+4>>1]|0,c[O>>2]|0);if(Il()|0?((c[O>>2]|0)+(c[Q>>2]|0)|0)>>>0>24:0)Jl(D);Hl(D,e[(c[A>>2]|0)+(c[K>>2]<<3)+6>>1]|0,c[Q>>2]|0);if(!(!(Il()|0)?((c[P>>2]|0)+(c[Q>>2]|0)+(c[O>>2]|0)|0)>>>0<=56:0))Jl(D);if(c[C>>2]|0){J=c[P>>2]|0;I=c[P>>2]|0;da=(Il()|0)!=0;if(I>>>0<((da?25:57)-1|0)>>>0)ea=c[P>>2]|0;else{da=(Il()|0)!=0;ea=(da?25:57)-1|0;}c[R>>2]=J-ea;if(c[R>>2]|0){Hl(D,c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0,c[R>>2]|0);Jl(D);}Hl(D,(c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0)>>>(c[R>>2]|0),(c[P>>2]|0)-(c[R>>2]|0)|0);}else Hl(D,c[(c[A>>2]|0)+(c[K>>2]<<3)>>2]|0,c[P>>2]|0);Jl(D);c[K>>2]=(c[K>>2]|0)+-1;}Ll(D,E);Ll(D,F);Ll(D,G);c[S>>2]=Ml(D)|0;if(!(c[S>>2]|0)){c[r>>2]=-70;ca=c[r>>2]|0;l=q;return ca|0;}else{c[r>>2]=c[S>>2];ca=c[r>>2]|0;l=q;return ca|0;}return 0;}function Fl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[c[g>>2]>>2]=0;c[(c[g>>2]|0)+4>>2]=0;c[(c[g>>2]|0)+8>>2]=c[h>>2];c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+8>>2];c[(c[g>>2]|0)+16>>2]=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]|0)+-4;if((c[i>>2]|0)>>>0<=4){c[f>>2]=-70;j=c[f>>2]|0;l=e;return j|0;}else{c[f>>2]=0;j=c[f>>2]|0;l=e;return j|0;}return 0;}function Gl(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;Ul(c[g>>2]|0,c[h>>2]|0);h=(c[(c[g>>2]|0)+8>>2]|0)+(c[i>>2]<<3)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[k>>2]=c[(c[g>>2]|0)+4>>2];c[m>>2]=((c[j+4>>2]|0)+32768|0)>>>16;c[c[g>>2]>>2]=(c[m>>2]<<16)-(c[j+4>>2]|0);c[c[g>>2]>>2]=e[(c[k>>2]|0)+((c[c[g>>2]>>2]>>c[m>>2])+(c[j>>2]|0)<<1)>>1];l=f;return;}function Hl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|(c[g>>2]&c[2800+(c[h>>2]<<2)>>2])<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Il(){return 1;}function Jl(a){a=a|0;var b=0,d=0,e=0;b=l;l=l+16|0;d=b+4|0;e=b;c[d>>2]=a;c[e>>2]=(c[(c[d>>2]|0)+4>>2]|0)>>>3;Ol(c[(c[d>>2]|0)+12>>2]|0,c[c[d>>2]>>2]|0);a=(c[d>>2]|0)+12|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);if((c[(c[d>>2]|0)+12>>2]|0)>>>0>(c[(c[d>>2]|0)+16>>2]|0)>>>0)c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+16>>2];a=(c[d>>2]|0)+4|0;c[a>>2]=c[a>>2]&7;a=c[d>>2]|0;c[a>>2]=(c[a>>2]|0)>>>(c[e>>2]<<3);l=b;return;}function Kl(a,b,d){a=a|0;b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;d=(c[(c[h>>2]|0)+8>>2]|0)+(c[i>>2]<<3)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[k>>2]=c[(c[h>>2]|0)+4>>2];c[m>>2]=((c[c[h>>2]>>2]|0)+(c[j+4>>2]|0)|0)>>>16;Hl(c[g>>2]|0,c[c[h>>2]>>2]|0,c[m>>2]|0);c[c[h>>2]>>2]=e[(c[k>>2]|0)+((c[c[h>>2]>>2]>>c[m>>2])+(c[j>>2]|0)<<1)>>1];l=f;return;}function Ll(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;Hl(c[e>>2]|0,c[c[f>>2]>>2]|0,c[(c[f>>2]|0)+12>>2]|0);Jl(c[e>>2]|0);l=d;return;}function Ml(a){a=a|0;var b=0,d=0,e=0,f=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;Nl(c[e>>2]|0,1,1);Jl(c[e>>2]|0);if((c[(c[e>>2]|0)+12>>2]|0)>>>0>=(c[(c[e>>2]|0)+16>>2]|0)>>>0){c[d>>2]=0;f=c[d>>2]|0;l=b;return f|0;}else{c[d>>2]=(c[(c[e>>2]|0)+12>>2]|0)-(c[(c[e>>2]|0)+8>>2]|0)+((c[(c[e>>2]|0)+4>>2]|0)>>>0>0&1);f=c[d>>2]|0;l=b;return f|0;}return 0;}function Nl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=c[f>>2]|0;c[d>>2]=c[d>>2]|c[g>>2]<<c[(c[f>>2]|0)+4>>2];g=(c[f>>2]|0)+4|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Ol(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(Il()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){Pl(a,e);l=d;return;}else{Ql(a,e,0);l=d;return;}}function Pl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=(Jj()|0)!=0;a=c[e>>2]|0;e=c[f>>2]|0;if(b){Tl(a,e);l=d;return;}else{Tl(a,Lj(e)|0);l=d;return;}}function Ql(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+8|0;g=e;c[f>>2]=a;a=g;c[a>>2]=b;c[a+4>>2]=d;d=(Jj()|0)!=0;a=c[f>>2]|0;f=g;g=c[f>>2]|0;b=c[f+4>>2]|0;if(d){Rl(a,g,b);l=e;return;}else{d=Sl(g,b)|0;Rl(a,d,y);l=e;return;}}function Rl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+16|0;g=f+8|0;h=f;c[g>>2]=b;b=h;c[b>>2]=d;c[b+4>>2]=e;e=h;h=c[e>>2]|0;b=c[e+4>>2]|0;e=c[g>>2]|0;g=e;a[g>>0]=h;a[g+1>>0]=h>>8;a[g+2>>0]=h>>16;a[g+3>>0]=h>>24;h=e+4|0;a[h>>0]=b;a[h+1>>0]=b>>8;a[h+2>>0]=b>>16;a[h+3>>0]=b>>24;l=f;return;}function Sl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d;f=e;c[f>>2]=a;c[f+4>>2]=b;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,56)|0;b=y&-16777216;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,40)|0;f=b|y&16711680;b=e;jE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=f|y&65280;f=e;jE(c[f>>2]|0,c[f+4>>2]|0,8)|0;f=b|y&255;b=e;a=iE(c[b>>2]|0,c[b+4>>2]|0,8)|0;b=e;g=iE(c[b>>2]|0,c[b+4>>2]|0,24)|0;b=e;h=iE(c[b>>2]|0,c[b+4>>2]|0,40)|0;b=e;e=iE(c[b>>2]|0,c[b+4>>2]|0,56)|0;y=f;l=d;return a&-16777216|g&16711680|h&65280|e&255|0;}function Tl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[g>>2]|0;g=c[f>>2]|0;a[g>>0]=d;a[g+1>>0]=d>>8;a[g+2>>0]=d>>16;a[g+3>>0]=d>>24;l=e;return;}function Ul(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[f>>2];c[h>>2]=c[g>>2];c[i>>2]=(Vl(c[g>>2]|0)|0)&65535;c[c[e>>2]>>2]=1<<c[i>>2];c[(c[e>>2]|0)+4>>2]=(c[h>>2]|0)+4;if(c[i>>2]|0)j=1<<(c[i>>2]|0)-1;else j=1;c[(c[e>>2]|0)+8>>2]=(c[f>>2]|0)+4+(j<<2);c[(c[e>>2]|0)+12>>2]=c[i>>2];l=d;return;}function Vl(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Wl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;l=d;return c[2928+(((c[f>>2]|0)!=0&1)*36|0)+(c[e>>2]<<2)>>2]|0;}function Xl(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0;i=l;l=l+512|0;j=i+500|0;k=i+496|0;m=i+492|0;n=i+488|0;o=i+484|0;p=i+480|0;q=i+476|0;r=i+472|0;s=i+468|0;t=i+464|0;u=i+460|0;v=i+456|0;w=i+452|0;x=i+448|0;y=i+444|0;z=i+440|0;A=i+436|0;B=i+432|0;C=i+428|0;D=i+424|0;E=i+420|0;F=i+416|0;G=i+412|0;H=i+408|0;I=i+404|0;J=i+400|0;K=i+396|0;L=i+392|0;M=i+388|0;N=i+384|0;O=i+380|0;P=i+376|0;Q=i+372|0;R=i+368|0;S=i+364|0;T=i+360|0;U=i+356|0;V=i+352|0;W=i+348|0;X=i+344|0;Y=i+340|0;Z=i+336|0;_=i+332|0;$=i+328|0;aa=i+324|0;ba=i+320|0;ca=i+316|0;da=i+312|0;ea=i+308|0;fa=i+304|0;ga=i+300|0;ha=i+296|0;ia=i+292|0;ja=i+288|0;ka=i+284|0;la=i+280|0;ma=i+276|0;na=i+272|0;oa=i+268|0;pa=i+264|0;qa=i+260|0;ra=i+256|0;sa=i+252|0;ta=i+248|0;ua=i+244|0;va=i+240|0;wa=i+236|0;xa=i+232|0;ya=i+228|0;za=i+224|0;Aa=i+220|0;Ba=i+216|0;Ca=i+212|0;Da=i+208|0;Ea=i+204|0;Fa=i+200|0;Ga=i+196|0;Ha=i+192|0;Ia=i+188|0;Ja=i+184|0;Ka=i+180|0;La=i+176|0;Ma=i+172|0;Na=i+168|0;Oa=i+164|0;Pa=i+160|0;Qa=i+156|0;Ra=i+152|0;Sa=i+148|0;Ta=i+144|0;Ua=i+140|0;Va=i+136|0;Wa=i+132|0;Xa=i+128|0;Ya=i+124|0;Za=i+120|0;_a=i+116|0;$a=i+112|0;ab=i+108|0;bb=i+104|0;cb=i+100|0;db=i+96|0;eb=i+92|0;fb=i+88|0;gb=i+84|0;hb=i+80|0;ib=i+76|0;jb=i+72|0;kb=i+68|0;lb=i+64|0;mb=i+60|0;nb=i+56|0;ob=i+52|0;pb=i+48|0;qb=i+44|0;rb=i+40|0;sb=i+36|0;tb=i+32|0;ub=i+28|0;vb=i+24|0;wb=i+20|0;xb=i+16|0;yb=i+12|0;zb=i+8|0;Ab=i+4|0;Bb=i;c[tb>>2]=a;c[ub>>2]=b;c[vb>>2]=e;c[wb>>2]=f;c[xb>>2]=g;c[yb>>2]=h;c[zb>>2]=c[(c[wb>>2]|0)+8>>2];c[Ab>>2]=c[(c[wb>>2]|0)+16>>2];c[Bb>>2]=c[(c[wb>>2]|0)+20>>2];switch(c[Ab>>2]|0){case 7:{Ab=c[ub>>2]|0;wb=c[vb>>2]|0;h=c[xb>>2]|0;g=c[yb>>2]|0;f=c[zb>>2]|0;e=c[Bb>>2]|0;c[j>>2]=c[tb>>2];c[k>>2]=Ab;c[m>>2]=wb;c[n>>2]=h;c[o>>2]=g;c[p>>2]=f;c[q>>2]=e;c[r>>2]=7;c[s>>2]=c[(c[j>>2]|0)+36>>2];c[t>>2]=c[(c[j>>2]|0)+4>>2];c[u>>2]=c[n>>2];c[v>>2]=c[u>>2];c[w>>2]=c[u>>2];c[x>>2]=c[(c[j>>2]|0)+12>>2];c[y>>2]=(c[t>>2]|0)+(c[x>>2]|0);c[z>>2]=(c[u>>2]|0)+(c[o>>2]|0);c[A>>2]=(c[z>>2]|0)+-8;c[B>>2]=c[c[m>>2]>>2];c[C>>2]=c[(c[m>>2]|0)+4>>2];c[D>>2]=0;c[v>>2]=(c[v>>2]|0)+((c[v>>2]|0)==(c[y>>2]|0)&1);c[E>>2]=(c[v>>2]|0)-(c[y>>2]|0);if((c[C>>2]|0)>>>0>(c[E>>2]|0)>>>0){c[D>>2]=c[C>>2];c[C>>2]=0;}if((c[B>>2]|0)>>>0>(c[E>>2]|0)>>>0){c[D>>2]=c[B>>2];c[B>>2]=0;}a:while(1){if((c[v>>2]|0)>>>0>=(c[A>>2]|0)>>>0)break;c[G>>2]=Tk(c[v>>2]|0,c[p>>2]|0,c[r>>2]|0)|0;c[H>>2]=(c[v>>2]|0)-(c[t>>2]|0);c[I>>2]=c[(c[s>>2]|0)+(c[G>>2]<<2)>>2];c[J>>2]=(c[t>>2]|0)+(c[I>>2]|0);c[(c[s>>2]|0)+(c[G>>2]<<2)>>2]=c[H>>2];E=(c[B>>2]|0)>>>0>0&1;o=fl((c[v>>2]|0)+1+(0-(c[B>>2]|0))|0)|0;do{if(E&(o|0)==(fl((c[v>>2]|0)+1|0)|0)|0){c[F>>2]=(nn((c[v>>2]|0)+1+4|0,(c[v>>2]|0)+1+4+(0-(c[B>>2]|0))|0,c[z>>2]|0)|0)+4;c[v>>2]=(c[v>>2]|0)+1;kn(c[k>>2]|0,(c[v>>2]|0)-(c[w>>2]|0)|0,c[w>>2]|0,0,(c[F>>2]|0)-3|0);}else{if((c[I>>2]|0)>>>0>(c[x>>2]|0)>>>0?(u=fl(c[J>>2]|0)|0,(u|0)==(fl(c[v>>2]|0)|0)):0){c[F>>2]=(nn((c[v>>2]|0)+4|0,(c[J>>2]|0)+4|0,c[z>>2]|0)|0)+4;c[K>>2]=(c[v>>2]|0)-(c[J>>2]|0);while(1){if(!(((c[v>>2]|0)>>>0>(c[w>>2]|0)>>>0?(c[J>>2]|0)>>>0>(c[y>>2]|0)>>>0:0)|0))break;if((d[(c[v>>2]|0)+-1>>0]|0|0)!=(d[(c[J>>2]|0)+-1>>0]|0|0))break;c[v>>2]=(c[v>>2]|0)+-1;c[J>>2]=(c[J>>2]|0)+-1;c[F>>2]=(c[F>>2]|0)+1;}c[C>>2]=c[B>>2];c[B>>2]=c[K>>2];kn(c[k>>2]|0,(c[v>>2]|0)-(c[w>>2]|0)|0,c[w>>2]|0,(c[K>>2]|0)+2|0,(c[F>>2]|0)-3|0);break;}c[v>>2]=(c[v>>2]|0)+(((c[v>>2]|0)-(c[w>>2]|0)>>8)+(c[q>>2]|0));continue a;}}while(0);c[v>>2]=(c[v>>2]|0)+(c[F>>2]|0);c[w>>2]=c[v>>2];b:do{if((c[v>>2]|0)>>>0<=(c[A>>2]|0)>>>0){o=(c[H>>2]|0)+2|0;E=c[s>>2]|0;c[E+((Tk((c[t>>2]|0)+(c[H>>2]|0)+2|0,c[p>>2]|0,c[r>>2]|0)|0)<<2)>>2]=o;o=(c[v>>2]|0)+-2-(c[t>>2]|0)|0;E=c[s>>2]|0;c[E+((Tk((c[v>>2]|0)+-2|0,c[p>>2]|0,c[r>>2]|0)|0)<<2)>>2]=o;while(1){if((c[v>>2]|0)>>>0>(c[A>>2]|0)>>>0)break b;o=(c[C>>2]|0)>>>0>0&1;E=fl(c[v>>2]|0)|0;if(!(o&(E|0)==(fl((c[v>>2]|0)+(0-(c[C>>2]|0))|0)|0)))break b;c[L>>2]=(nn((c[v>>2]|0)+4|0,(c[v>>2]|0)+4+(0-(c[C>>2]|0))|0,c[z>>2]|0)|0)+4;c[M>>2]=c[C>>2];c[C>>2]=c[B>>2];c[B>>2]=c[M>>2];E=(c[v>>2]|0)-(c[t>>2]|0)|0;o=c[s>>2]|0;c[o+((Tk(c[v>>2]|0,c[p>>2]|0,c[r>>2]|0)|0)<<2)>>2]=E;kn(c[k>>2]|0,0,c[w>>2]|0,0,(c[L>>2]|0)-3|0);c[v>>2]=(c[v>>2]|0)+(c[L>>2]|0);c[w>>2]=c[v>>2];}}}while(0);}c[c[m>>2]>>2]=c[B>>2]|0?c[B>>2]|0:c[D>>2]|0;c[(c[m>>2]|0)+4>>2]=c[C>>2]|0?c[C>>2]|0:c[D>>2]|0;c[sb>>2]=(c[z>>2]|0)-(c[w>>2]|0);Cb=c[sb>>2]|0;l=i;return Cb|0;}case 5:{w=c[ub>>2]|0;z=c[vb>>2]|0;D=c[xb>>2]|0;C=c[yb>>2]|0;m=c[zb>>2]|0;B=c[Bb>>2]|0;c[oa>>2]=c[tb>>2];c[pa>>2]=w;c[qa>>2]=z;c[ra>>2]=D;c[sa>>2]=C;c[ta>>2]=m;c[ua>>2]=B;c[va>>2]=5;c[wa>>2]=c[(c[oa>>2]|0)+36>>2];c[xa>>2]=c[(c[oa>>2]|0)+4>>2];c[ya>>2]=c[ra>>2];c[za>>2]=c[ya>>2];c[Aa>>2]=c[ya>>2];c[Ba>>2]=c[(c[oa>>2]|0)+12>>2];c[Ca>>2]=(c[xa>>2]|0)+(c[Ba>>2]|0);c[Da>>2]=(c[ya>>2]|0)+(c[sa>>2]|0);c[Ea>>2]=(c[Da>>2]|0)+-8;c[Fa>>2]=c[c[qa>>2]>>2];c[Ga>>2]=c[(c[qa>>2]|0)+4>>2];c[Ha>>2]=0;c[za>>2]=(c[za>>2]|0)+((c[za>>2]|0)==(c[Ca>>2]|0)&1);c[Ia>>2]=(c[za>>2]|0)-(c[Ca>>2]|0);if((c[Ga>>2]|0)>>>0>(c[Ia>>2]|0)>>>0){c[Ha>>2]=c[Ga>>2];c[Ga>>2]=0;}if((c[Fa>>2]|0)>>>0>(c[Ia>>2]|0)>>>0){c[Ha>>2]=c[Fa>>2];c[Fa>>2]=0;}c:while(1){if((c[za>>2]|0)>>>0>=(c[Ea>>2]|0)>>>0)break;c[Ka>>2]=Tk(c[za>>2]|0,c[ta>>2]|0,c[va>>2]|0)|0;c[La>>2]=(c[za>>2]|0)-(c[xa>>2]|0);c[Ma>>2]=c[(c[wa>>2]|0)+(c[Ka>>2]<<2)>>2];c[Na>>2]=(c[xa>>2]|0)+(c[Ma>>2]|0);c[(c[wa>>2]|0)+(c[Ka>>2]<<2)>>2]=c[La>>2];Ia=(c[Fa>>2]|0)>>>0>0&1;sa=fl((c[za>>2]|0)+1+(0-(c[Fa>>2]|0))|0)|0;do{if(Ia&(sa|0)==(fl((c[za>>2]|0)+1|0)|0)|0){c[Ja>>2]=(nn((c[za>>2]|0)+1+4|0,(c[za>>2]|0)+1+4+(0-(c[Fa>>2]|0))|0,c[Da>>2]|0)|0)+4;c[za>>2]=(c[za>>2]|0)+1;kn(c[pa>>2]|0,(c[za>>2]|0)-(c[Aa>>2]|0)|0,c[Aa>>2]|0,0,(c[Ja>>2]|0)-3|0);}else{if((c[Ma>>2]|0)>>>0>(c[Ba>>2]|0)>>>0?(ya=fl(c[Na>>2]|0)|0,(ya|0)==(fl(c[za>>2]|0)|0)):0){c[Ja>>2]=(nn((c[za>>2]|0)+4|0,(c[Na>>2]|0)+4|0,c[Da>>2]|0)|0)+4;c[Oa>>2]=(c[za>>2]|0)-(c[Na>>2]|0);while(1){if(!(((c[za>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?(c[Na>>2]|0)>>>0>(c[Ca>>2]|0)>>>0:0)|0))break;if((d[(c[za>>2]|0)+-1>>0]|0|0)!=(d[(c[Na>>2]|0)+-1>>0]|0|0))break;c[za>>2]=(c[za>>2]|0)+-1;c[Na>>2]=(c[Na>>2]|0)+-1;c[Ja>>2]=(c[Ja>>2]|0)+1;}c[Ga>>2]=c[Fa>>2];c[Fa>>2]=c[Oa>>2];kn(c[pa>>2]|0,(c[za>>2]|0)-(c[Aa>>2]|0)|0,c[Aa>>2]|0,(c[Oa>>2]|0)+2|0,(c[Ja>>2]|0)-3|0);break;}c[za>>2]=(c[za>>2]|0)+(((c[za>>2]|0)-(c[Aa>>2]|0)>>8)+(c[ua>>2]|0));continue c;}}while(0);c[za>>2]=(c[za>>2]|0)+(c[Ja>>2]|0);c[Aa>>2]=c[za>>2];d:do{if((c[za>>2]|0)>>>0<=(c[Ea>>2]|0)>>>0){sa=(c[La>>2]|0)+2|0;Ia=c[wa>>2]|0;c[Ia+((Tk((c[xa>>2]|0)+(c[La>>2]|0)+2|0,c[ta>>2]|0,c[va>>2]|0)|0)<<2)>>2]=sa;sa=(c[za>>2]|0)+-2-(c[xa>>2]|0)|0;Ia=c[wa>>2]|0;c[Ia+((Tk((c[za>>2]|0)+-2|0,c[ta>>2]|0,c[va>>2]|0)|0)<<2)>>2]=sa;while(1){if((c[za>>2]|0)>>>0>(c[Ea>>2]|0)>>>0)break d;sa=(c[Ga>>2]|0)>>>0>0&1;Ia=fl(c[za>>2]|0)|0;if(!(sa&(Ia|0)==(fl((c[za>>2]|0)+(0-(c[Ga>>2]|0))|0)|0)))break d;c[Pa>>2]=(nn((c[za>>2]|0)+4|0,(c[za>>2]|0)+4+(0-(c[Ga>>2]|0))|0,c[Da>>2]|0)|0)+4;c[Qa>>2]=c[Ga>>2];c[Ga>>2]=c[Fa>>2];c[Fa>>2]=c[Qa>>2];Ia=(c[za>>2]|0)-(c[xa>>2]|0)|0;sa=c[wa>>2]|0;c[sa+((Tk(c[za>>2]|0,c[ta>>2]|0,c[va>>2]|0)|0)<<2)>>2]=Ia;kn(c[pa>>2]|0,0,c[Aa>>2]|0,0,(c[Pa>>2]|0)-3|0);c[za>>2]=(c[za>>2]|0)+(c[Pa>>2]|0);c[Aa>>2]=c[za>>2];}}}while(0);}c[c[qa>>2]>>2]=c[Fa>>2]|0?c[Fa>>2]|0:c[Ha>>2]|0;c[(c[qa>>2]|0)+4>>2]=c[Ga>>2]|0?c[Ga>>2]|0:c[Ha>>2]|0;c[sb>>2]=(c[Da>>2]|0)-(c[Aa>>2]|0);Cb=c[sb>>2]|0;l=i;return Cb|0;}case 6:{Aa=c[ub>>2]|0;Da=c[vb>>2]|0;Ha=c[xb>>2]|0;Ga=c[yb>>2]|0;qa=c[zb>>2]|0;Fa=c[Bb>>2]|0;c[N>>2]=c[tb>>2];c[O>>2]=Aa;c[P>>2]=Da;c[Q>>2]=Ha;c[R>>2]=Ga;c[S>>2]=qa;c[T>>2]=Fa;c[U>>2]=6;c[V>>2]=c[(c[N>>2]|0)+36>>2];c[W>>2]=c[(c[N>>2]|0)+4>>2];c[X>>2]=c[Q>>2];c[Y>>2]=c[X>>2];c[Z>>2]=c[X>>2];c[_>>2]=c[(c[N>>2]|0)+12>>2];c[$>>2]=(c[W>>2]|0)+(c[_>>2]|0);c[aa>>2]=(c[X>>2]|0)+(c[R>>2]|0);c[ba>>2]=(c[aa>>2]|0)+-8;c[ca>>2]=c[c[P>>2]>>2];c[da>>2]=c[(c[P>>2]|0)+4>>2];c[ea>>2]=0;c[Y>>2]=(c[Y>>2]|0)+((c[Y>>2]|0)==(c[$>>2]|0)&1);c[fa>>2]=(c[Y>>2]|0)-(c[$>>2]|0);if((c[da>>2]|0)>>>0>(c[fa>>2]|0)>>>0){c[ea>>2]=c[da>>2];c[da>>2]=0;}if((c[ca>>2]|0)>>>0>(c[fa>>2]|0)>>>0){c[ea>>2]=c[ca>>2];c[ca>>2]=0;}e:while(1){if((c[Y>>2]|0)>>>0>=(c[ba>>2]|0)>>>0)break;c[ha>>2]=Tk(c[Y>>2]|0,c[S>>2]|0,c[U>>2]|0)|0;c[ia>>2]=(c[Y>>2]|0)-(c[W>>2]|0);c[ja>>2]=c[(c[V>>2]|0)+(c[ha>>2]<<2)>>2];c[ka>>2]=(c[W>>2]|0)+(c[ja>>2]|0);c[(c[V>>2]|0)+(c[ha>>2]<<2)>>2]=c[ia>>2];fa=(c[ca>>2]|0)>>>0>0&1;R=fl((c[Y>>2]|0)+1+(0-(c[ca>>2]|0))|0)|0;do{if(fa&(R|0)==(fl((c[Y>>2]|0)+1|0)|0)|0){c[ga>>2]=(nn((c[Y>>2]|0)+1+4|0,(c[Y>>2]|0)+1+4+(0-(c[ca>>2]|0))|0,c[aa>>2]|0)|0)+4;c[Y>>2]=(c[Y>>2]|0)+1;kn(c[O>>2]|0,(c[Y>>2]|0)-(c[Z>>2]|0)|0,c[Z>>2]|0,0,(c[ga>>2]|0)-3|0);}else{if((c[ja>>2]|0)>>>0>(c[_>>2]|0)>>>0?(X=fl(c[ka>>2]|0)|0,(X|0)==(fl(c[Y>>2]|0)|0)):0){c[ga>>2]=(nn((c[Y>>2]|0)+4|0,(c[ka>>2]|0)+4|0,c[aa>>2]|0)|0)+4;c[la>>2]=(c[Y>>2]|0)-(c[ka>>2]|0);while(1){if(!(((c[Y>>2]|0)>>>0>(c[Z>>2]|0)>>>0?(c[ka>>2]|0)>>>0>(c[$>>2]|0)>>>0:0)|0))break;if((d[(c[Y>>2]|0)+-1>>0]|0|0)!=(d[(c[ka>>2]|0)+-1>>0]|0|0))break;c[Y>>2]=(c[Y>>2]|0)+-1;c[ka>>2]=(c[ka>>2]|0)+-1;c[ga>>2]=(c[ga>>2]|0)+1;}c[da>>2]=c[ca>>2];c[ca>>2]=c[la>>2];kn(c[O>>2]|0,(c[Y>>2]|0)-(c[Z>>2]|0)|0,c[Z>>2]|0,(c[la>>2]|0)+2|0,(c[ga>>2]|0)-3|0);break;}c[Y>>2]=(c[Y>>2]|0)+(((c[Y>>2]|0)-(c[Z>>2]|0)>>8)+(c[T>>2]|0));continue e;}}while(0);c[Y>>2]=(c[Y>>2]|0)+(c[ga>>2]|0);c[Z>>2]=c[Y>>2];f:do{if((c[Y>>2]|0)>>>0<=(c[ba>>2]|0)>>>0){R=(c[ia>>2]|0)+2|0;fa=c[V>>2]|0;c[fa+((Tk((c[W>>2]|0)+(c[ia>>2]|0)+2|0,c[S>>2]|0,c[U>>2]|0)|0)<<2)>>2]=R;R=(c[Y>>2]|0)+-2-(c[W>>2]|0)|0;fa=c[V>>2]|0;c[fa+((Tk((c[Y>>2]|0)+-2|0,c[S>>2]|0,c[U>>2]|0)|0)<<2)>>2]=R;while(1){if((c[Y>>2]|0)>>>0>(c[ba>>2]|0)>>>0)break f;R=(c[da>>2]|0)>>>0>0&1;fa=fl(c[Y>>2]|0)|0;if(!(R&(fa|0)==(fl((c[Y>>2]|0)+(0-(c[da>>2]|0))|0)|0)))break f;c[ma>>2]=(nn((c[Y>>2]|0)+4|0,(c[Y>>2]|0)+4+(0-(c[da>>2]|0))|0,c[aa>>2]|0)|0)+4;c[na>>2]=c[da>>2];c[da>>2]=c[ca>>2];c[ca>>2]=c[na>>2];fa=(c[Y>>2]|0)-(c[W>>2]|0)|0;R=c[V>>2]|0;c[R+((Tk(c[Y>>2]|0,c[S>>2]|0,c[U>>2]|0)|0)<<2)>>2]=fa;kn(c[O>>2]|0,0,c[Z>>2]|0,0,(c[ma>>2]|0)-3|0);c[Y>>2]=(c[Y>>2]|0)+(c[ma>>2]|0);c[Z>>2]=c[Y>>2];}}}while(0);}c[c[P>>2]>>2]=c[ca>>2]|0?c[ca>>2]|0:c[ea>>2]|0;c[(c[P>>2]|0)+4>>2]=c[da>>2]|0?c[da>>2]|0:c[ea>>2]|0;c[sb>>2]=(c[aa>>2]|0)-(c[Z>>2]|0);Cb=c[sb>>2]|0;l=i;return Cb|0;}default:{Z=c[ub>>2]|0;ub=c[vb>>2]|0;vb=c[xb>>2]|0;xb=c[yb>>2]|0;yb=c[zb>>2]|0;zb=c[Bb>>2]|0;c[Ra>>2]=c[tb>>2];c[Sa>>2]=Z;c[Ta>>2]=ub;c[Ua>>2]=vb;c[Va>>2]=xb;c[Wa>>2]=yb;c[Xa>>2]=zb;c[Ya>>2]=4;c[Za>>2]=c[(c[Ra>>2]|0)+36>>2];c[_a>>2]=c[(c[Ra>>2]|0)+4>>2];c[$a>>2]=c[Ua>>2];c[ab>>2]=c[$a>>2];c[bb>>2]=c[$a>>2];c[cb>>2]=c[(c[Ra>>2]|0)+12>>2];c[db>>2]=(c[_a>>2]|0)+(c[cb>>2]|0);c[eb>>2]=(c[$a>>2]|0)+(c[Va>>2]|0);c[fb>>2]=(c[eb>>2]|0)+-8;c[gb>>2]=c[c[Ta>>2]>>2];c[hb>>2]=c[(c[Ta>>2]|0)+4>>2];c[ib>>2]=0;c[ab>>2]=(c[ab>>2]|0)+((c[ab>>2]|0)==(c[db>>2]|0)&1);c[jb>>2]=(c[ab>>2]|0)-(c[db>>2]|0);if((c[hb>>2]|0)>>>0>(c[jb>>2]|0)>>>0){c[ib>>2]=c[hb>>2];c[hb>>2]=0;}if((c[gb>>2]|0)>>>0>(c[jb>>2]|0)>>>0){c[ib>>2]=c[gb>>2];c[gb>>2]=0;}g:while(1){if((c[ab>>2]|0)>>>0>=(c[fb>>2]|0)>>>0)break;c[lb>>2]=Tk(c[ab>>2]|0,c[Wa>>2]|0,c[Ya>>2]|0)|0;c[mb>>2]=(c[ab>>2]|0)-(c[_a>>2]|0);c[nb>>2]=c[(c[Za>>2]|0)+(c[lb>>2]<<2)>>2];c[ob>>2]=(c[_a>>2]|0)+(c[nb>>2]|0);c[(c[Za>>2]|0)+(c[lb>>2]<<2)>>2]=c[mb>>2];jb=(c[gb>>2]|0)>>>0>0&1;Va=fl((c[ab>>2]|0)+1+(0-(c[gb>>2]|0))|0)|0;do{if(jb&(Va|0)==(fl((c[ab>>2]|0)+1|0)|0)|0){c[kb>>2]=(nn((c[ab>>2]|0)+1+4|0,(c[ab>>2]|0)+1+4+(0-(c[gb>>2]|0))|0,c[eb>>2]|0)|0)+4;c[ab>>2]=(c[ab>>2]|0)+1;kn(c[Sa>>2]|0,(c[ab>>2]|0)-(c[bb>>2]|0)|0,c[bb>>2]|0,0,(c[kb>>2]|0)-3|0);}else{if((c[nb>>2]|0)>>>0>(c[cb>>2]|0)>>>0?($a=fl(c[ob>>2]|0)|0,($a|0)==(fl(c[ab>>2]|0)|0)):0){c[kb>>2]=(nn((c[ab>>2]|0)+4|0,(c[ob>>2]|0)+4|0,c[eb>>2]|0)|0)+4;c[pb>>2]=(c[ab>>2]|0)-(c[ob>>2]|0);while(1){if(!(((c[ab>>2]|0)>>>0>(c[bb>>2]|0)>>>0?(c[ob>>2]|0)>>>0>(c[db>>2]|0)>>>0:0)|0))break;if((d[(c[ab>>2]|0)+-1>>0]|0|0)!=(d[(c[ob>>2]|0)+-1>>0]|0|0))break;c[ab>>2]=(c[ab>>2]|0)+-1;c[ob>>2]=(c[ob>>2]|0)+-1;c[kb>>2]=(c[kb>>2]|0)+1;}c[hb>>2]=c[gb>>2];c[gb>>2]=c[pb>>2];kn(c[Sa>>2]|0,(c[ab>>2]|0)-(c[bb>>2]|0)|0,c[bb>>2]|0,(c[pb>>2]|0)+2|0,(c[kb>>2]|0)-3|0);break;}c[ab>>2]=(c[ab>>2]|0)+(((c[ab>>2]|0)-(c[bb>>2]|0)>>8)+(c[Xa>>2]|0));continue g;}}while(0);c[ab>>2]=(c[ab>>2]|0)+(c[kb>>2]|0);c[bb>>2]=c[ab>>2];h:do{if((c[ab>>2]|0)>>>0<=(c[fb>>2]|0)>>>0){Va=(c[mb>>2]|0)+2|0;jb=c[Za>>2]|0;c[jb+((Tk((c[_a>>2]|0)+(c[mb>>2]|0)+2|0,c[Wa>>2]|0,c[Ya>>2]|0)|0)<<2)>>2]=Va;Va=(c[ab>>2]|0)+-2-(c[_a>>2]|0)|0;jb=c[Za>>2]|0;c[jb+((Tk((c[ab>>2]|0)+-2|0,c[Wa>>2]|0,c[Ya>>2]|0)|0)<<2)>>2]=Va;while(1){if((c[ab>>2]|0)>>>0>(c[fb>>2]|0)>>>0)break h;Va=(c[hb>>2]|0)>>>0>0&1;jb=fl(c[ab>>2]|0)|0;if(!(Va&(jb|0)==(fl((c[ab>>2]|0)+(0-(c[hb>>2]|0))|0)|0)))break h;c[qb>>2]=(nn((c[ab>>2]|0)+4|0,(c[ab>>2]|0)+4+(0-(c[hb>>2]|0))|0,c[eb>>2]|0)|0)+4;c[rb>>2]=c[hb>>2];c[hb>>2]=c[gb>>2];c[gb>>2]=c[rb>>2];jb=(c[ab>>2]|0)-(c[_a>>2]|0)|0;Va=c[Za>>2]|0;c[Va+((Tk(c[ab>>2]|0,c[Wa>>2]|0,c[Ya>>2]|0)|0)<<2)>>2]=jb;kn(c[Sa>>2]|0,0,c[bb>>2]|0,0,(c[qb>>2]|0)-3|0);c[ab>>2]=(c[ab>>2]|0)+(c[qb>>2]|0);c[bb>>2]=c[ab>>2];}}}while(0);}c[c[Ta>>2]>>2]=c[gb>>2]|0?c[gb>>2]|0:c[ib>>2]|0;c[(c[Ta>>2]|0)+4>>2]=c[hb>>2]|0?c[hb>>2]|0:c[ib>>2]|0;c[sb>>2]=(c[eb>>2]|0)-(c[bb>>2]|0);Cb=c[sb>>2]|0;l=i;return Cb|0;}}return 0;}function Yl(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0;i=l;l=l+624|0;j=i+620|0;k=i+616|0;m=i+612|0;n=i+608|0;o=i+604|0;p=i+600|0;q=i+596|0;r=i+592|0;s=i+588|0;t=i+584|0;u=i+580|0;v=i+576|0;w=i+572|0;x=i+568|0;z=i+564|0;A=i+560|0;B=i+556|0;C=i+552|0;D=i+548|0;E=i+544|0;F=i+540|0;G=i+536|0;H=i+532|0;I=i+528|0;J=i+524|0;K=i+520|0;L=i+516|0;M=i+512|0;N=i+508|0;O=i+504|0;P=i+500|0;Q=i+496|0;R=i+492|0;S=i+488|0;T=i+484|0;U=i+480|0;V=i+476|0;W=i+472|0;X=i+468|0;Y=i+464|0;Z=i+460|0;_=i+456|0;$=i+452|0;aa=i+448|0;ba=i+444|0;ca=i+440|0;da=i+436|0;ea=i+432|0;fa=i+428|0;ga=i+424|0;ha=i+420|0;ia=i+416|0;ja=i+412|0;ka=i+408|0;la=i+404|0;ma=i+400|0;na=i+396|0;oa=i+392|0;pa=i+388|0;qa=i+384|0;ra=i+380|0;sa=i+376|0;ta=i+372|0;ua=i+368|0;va=i+364|0;wa=i+360|0;xa=i+356|0;ya=i+352|0;za=i+348|0;Aa=i+344|0;Ba=i+340|0;Ca=i+336|0;Da=i+332|0;Ea=i+328|0;Fa=i+324|0;Ga=i+320|0;Ha=i+316|0;Ia=i+312|0;Ja=i+308|0;Ka=i+304|0;La=i+300|0;Ma=i+296|0;Na=i+292|0;Oa=i+288|0;Pa=i+284|0;Qa=i+280|0;Ra=i+276|0;Sa=i+272|0;Ta=i+268|0;Ua=i+264|0;Va=i+260|0;Wa=i+256|0;Xa=i+252|0;Ya=i+248|0;Za=i+244|0;_a=i+240|0;$a=i+236|0;ab=i+232|0;bb=i+228|0;cb=i+224|0;db=i+220|0;eb=i+216|0;fb=i+212|0;gb=i+208|0;hb=i+204|0;ib=i+200|0;jb=i+196|0;kb=i+192|0;lb=i+188|0;mb=i+184|0;nb=i+180|0;ob=i+176|0;pb=i+172|0;qb=i+168|0;rb=i+164|0;sb=i+160|0;tb=i+156|0;ub=i+152|0;vb=i+148|0;wb=i+144|0;xb=i+140|0;yb=i+136|0;zb=i+132|0;Ab=i+128|0;Bb=i+124|0;Cb=i+120|0;Db=i+116|0;Eb=i+112|0;Fb=i+108|0;Gb=i+104|0;Hb=i+100|0;Ib=i+96|0;Jb=i+92|0;Kb=i+88|0;Lb=i+84|0;Mb=i+80|0;Nb=i+76|0;Ob=i+72|0;Pb=i+68|0;Qb=i+64|0;Rb=i+60|0;Sb=i+56|0;Tb=i+52|0;Ub=i+48|0;Vb=i+44|0;Wb=i+40|0;Xb=i+36|0;Yb=i+32|0;Zb=i+28|0;_b=i+24|0;$b=i+20|0;ac=i+16|0;bc=i+12|0;cc=i+8|0;dc=i+4|0;ec=i;c[_b>>2]=a;c[$b>>2]=b;c[ac>>2]=e;c[bc>>2]=f;c[cc>>2]=g;c[dc>>2]=h;c[ec>>2]=c[(c[bc>>2]|0)+16>>2];switch(c[ec>>2]|0){case 7:{ec=c[$b>>2]|0;h=c[ac>>2]|0;g=c[bc>>2]|0;f=c[cc>>2]|0;e=c[dc>>2]|0;c[j>>2]=c[_b>>2];c[k>>2]=ec;c[m>>2]=h;c[n>>2]=g;c[o>>2]=f;c[p>>2]=e;c[q>>2]=7;c[r>>2]=c[(c[j>>2]|0)+36>>2];c[s>>2]=c[(c[n>>2]|0)+8>>2];c[t>>2]=c[(c[j>>2]|0)+44>>2];c[u>>2]=c[(c[n>>2]|0)+4>>2];c[v>>2]=c[(c[j>>2]|0)+4>>2];c[w>>2]=c[o>>2];c[x>>2]=c[w>>2];c[z>>2]=c[w>>2];c[A>>2]=c[(c[j>>2]|0)+12>>2];c[B>>2]=(c[v>>2]|0)+(c[A>>2]|0);c[C>>2]=(c[w>>2]|0)+(c[p>>2]|0);c[D>>2]=(c[C>>2]|0)+-8;c[E>>2]=c[c[m>>2]>>2];c[F>>2]=c[(c[m>>2]|0)+4>>2];c[G>>2]=0;c[x>>2]=(c[x>>2]|0)+((c[x>>2]|0)==(c[B>>2]|0)&1);c[H>>2]=(c[x>>2]|0)-(c[B>>2]|0);if((c[F>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[G>>2]=c[F>>2];c[F>>2]=0;}if((c[E>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[G>>2]=c[E>>2];c[E>>2]=0;}a:while(1){if((c[x>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[J>>2]=Dk(c[x>>2]|0,c[s>>2]|0,8)|0;c[K>>2]=Dk(c[x>>2]|0,c[u>>2]|0,c[q>>2]|0)|0;c[L>>2]=(c[x>>2]|0)-(c[v>>2]|0);c[M>>2]=c[(c[r>>2]|0)+(c[J>>2]<<2)>>2];c[N>>2]=c[(c[t>>2]|0)+(c[K>>2]<<2)>>2];c[O>>2]=(c[v>>2]|0)+(c[M>>2]|0);c[P>>2]=(c[v>>2]|0)+(c[N>>2]|0);H=c[L>>2]|0;c[(c[t>>2]|0)+(c[K>>2]<<2)>>2]=H;c[(c[r>>2]|0)+(c[J>>2]<<2)>>2]=H;H=(c[E>>2]|0)>>>0>0&1;p=Rk((c[x>>2]|0)+1+(0-(c[E>>2]|0))|0)|0;if(H&(p|0)==(Rk((c[x>>2]|0)+1|0)|0)|0){c[I>>2]=(cn((c[x>>2]|0)+1+4|0,(c[x>>2]|0)+1+4+(0-(c[E>>2]|0))|0,c[C>>2]|0)|0)+4;c[x>>2]=(c[x>>2]|0)+1;$m(c[k>>2]|0,(c[x>>2]|0)-(c[z>>2]|0)|0,c[z>>2]|0,0,(c[I>>2]|0)-3|0);}else{b:do{if((c[M>>2]|0)>>>0>(c[A>>2]|0)>>>0?(p=Mk(c[O>>2]|0)|0,H=y,w=Mk(c[x>>2]|0)|0,(p|0)==(w|0)&(H|0)==(y|0)):0){c[I>>2]=(cn((c[x>>2]|0)+8|0,(c[O>>2]|0)+8|0,c[C>>2]|0)|0)+8;c[Q>>2]=(c[x>>2]|0)-(c[O>>2]|0);while(1){if(!(((c[x>>2]|0)>>>0>(c[z>>2]|0)>>>0?(c[O>>2]|0)>>>0>(c[B>>2]|0)>>>0:0)|0))break b;if((d[(c[x>>2]|0)+-1>>0]|0|0)!=(d[(c[O>>2]|0)+-1>>0]|0|0))break b;c[x>>2]=(c[x>>2]|0)+-1;c[O>>2]=(c[O>>2]|0)+-1;c[I>>2]=(c[I>>2]|0)+1;}}else fc=121;}while(0);c:do{if((fc|0)==121){fc=0;if((c[N>>2]|0)>>>0>(c[A>>2]|0)>>>0?(H=Rk(c[P>>2]|0)|0,(H|0)==(Rk(c[x>>2]|0)|0)):0){c[R>>2]=Dk((c[x>>2]|0)+1|0,c[s>>2]|0,8)|0;c[S>>2]=c[(c[r>>2]|0)+(c[R>>2]<<2)>>2];c[T>>2]=(c[v>>2]|0)+(c[S>>2]|0);c[(c[r>>2]|0)+(c[R>>2]<<2)>>2]=(c[L>>2]|0)+1;if((c[S>>2]|0)>>>0>(c[A>>2]|0)>>>0?(H=Mk(c[T>>2]|0)|0,w=y,p=Mk((c[x>>2]|0)+1|0)|0,(H|0)==(p|0)&(w|0)==(y|0)):0){c[I>>2]=(cn((c[x>>2]|0)+9|0,(c[T>>2]|0)+8|0,c[C>>2]|0)|0)+8;c[x>>2]=(c[x>>2]|0)+1;c[Q>>2]=(c[x>>2]|0)-(c[T>>2]|0);while(1){if(!(((c[x>>2]|0)>>>0>(c[z>>2]|0)>>>0?(c[T>>2]|0)>>>0>(c[B>>2]|0)>>>0:0)|0))break c;if((d[(c[x>>2]|0)+-1>>0]|0|0)!=(d[(c[T>>2]|0)+-1>>0]|0|0))break c;c[x>>2]=(c[x>>2]|0)+-1;c[T>>2]=(c[T>>2]|0)+-1;c[I>>2]=(c[I>>2]|0)+1;}}c[I>>2]=(cn((c[x>>2]|0)+4|0,(c[P>>2]|0)+4|0,c[C>>2]|0)|0)+4;c[Q>>2]=(c[x>>2]|0)-(c[P>>2]|0);while(1){if(!(((c[x>>2]|0)>>>0>(c[z>>2]|0)>>>0?(c[P>>2]|0)>>>0>(c[B>>2]|0)>>>0:0)|0))break c;if((d[(c[x>>2]|0)+-1>>0]|0|0)!=(d[(c[P>>2]|0)+-1>>0]|0|0))break c;c[x>>2]=(c[x>>2]|0)+-1;c[P>>2]=(c[P>>2]|0)+-1;c[I>>2]=(c[I>>2]|0)+1;}}c[x>>2]=(c[x>>2]|0)+(((c[x>>2]|0)-(c[z>>2]|0)>>8)+1);continue a;}}while(0);c[F>>2]=c[E>>2];c[E>>2]=c[Q>>2];$m(c[k>>2]|0,(c[x>>2]|0)-(c[z>>2]|0)|0,c[z>>2]|0,(c[Q>>2]|0)+2|0,(c[I>>2]|0)-3|0);}c[x>>2]=(c[x>>2]|0)+(c[I>>2]|0);c[z>>2]=c[x>>2];d:do{if((c[x>>2]|0)>>>0<=(c[D>>2]|0)>>>0){w=(c[L>>2]|0)+2|0;p=c[t>>2]|0;c[p+((Dk((c[v>>2]|0)+(c[L>>2]|0)+2|0,c[u>>2]|0,c[q>>2]|0)|0)<<2)>>2]=w;p=c[r>>2]|0;c[p+((Dk((c[v>>2]|0)+(c[L>>2]|0)+2|0,c[s>>2]|0,8)|0)<<2)>>2]=w;w=(c[x>>2]|0)+-2-(c[v>>2]|0)|0;p=c[t>>2]|0;c[p+((Dk((c[x>>2]|0)+-2|0,c[u>>2]|0,c[q>>2]|0)|0)<<2)>>2]=w;p=c[r>>2]|0;c[p+((Dk((c[x>>2]|0)+-2|0,c[s>>2]|0,8)|0)<<2)>>2]=w;while(1){if((c[x>>2]|0)>>>0>(c[D>>2]|0)>>>0)break d;w=(c[F>>2]|0)>>>0>0&1;p=Rk(c[x>>2]|0)|0;if(!(w&(p|0)==(Rk((c[x>>2]|0)+(0-(c[F>>2]|0))|0)|0)))break d;c[U>>2]=(cn((c[x>>2]|0)+4|0,(c[x>>2]|0)+4+(0-(c[F>>2]|0))|0,c[C>>2]|0)|0)+4;c[V>>2]=c[F>>2];c[F>>2]=c[E>>2];c[E>>2]=c[V>>2];p=(c[x>>2]|0)-(c[v>>2]|0)|0;w=c[t>>2]|0;c[w+((Dk(c[x>>2]|0,c[u>>2]|0,c[q>>2]|0)|0)<<2)>>2]=p;p=(c[x>>2]|0)-(c[v>>2]|0)|0;w=c[r>>2]|0;c[w+((Dk(c[x>>2]|0,c[s>>2]|0,8)|0)<<2)>>2]=p;$m(c[k>>2]|0,0,c[z>>2]|0,0,(c[U>>2]|0)-3|0);c[x>>2]=(c[x>>2]|0)+(c[U>>2]|0);c[z>>2]=c[x>>2];}}}while(0);}c[c[m>>2]>>2]=c[E>>2]|0?c[E>>2]|0:c[G>>2]|0;c[(c[m>>2]|0)+4>>2]=c[F>>2]|0?c[F>>2]|0:c[G>>2]|0;c[Zb>>2]=(c[C>>2]|0)-(c[z>>2]|0);gc=c[Zb>>2]|0;l=i;return gc|0;}case 5:{z=c[$b>>2]|0;C=c[ac>>2]|0;G=c[bc>>2]|0;F=c[cc>>2]|0;m=c[dc>>2]|0;c[Fa>>2]=c[_b>>2];c[Ga>>2]=z;c[Ha>>2]=C;c[Ia>>2]=G;c[Ja>>2]=F;c[Ka>>2]=m;c[La>>2]=5;c[Ma>>2]=c[(c[Fa>>2]|0)+36>>2];c[Na>>2]=c[(c[Ia>>2]|0)+8>>2];c[Oa>>2]=c[(c[Fa>>2]|0)+44>>2];c[Pa>>2]=c[(c[Ia>>2]|0)+4>>2];c[Qa>>2]=c[(c[Fa>>2]|0)+4>>2];c[Ra>>2]=c[Ja>>2];c[Sa>>2]=c[Ra>>2];c[Ta>>2]=c[Ra>>2];c[Ua>>2]=c[(c[Fa>>2]|0)+12>>2];c[Va>>2]=(c[Qa>>2]|0)+(c[Ua>>2]|0);c[Wa>>2]=(c[Ra>>2]|0)+(c[Ka>>2]|0);c[Xa>>2]=(c[Wa>>2]|0)+-8;c[Ya>>2]=c[c[Ha>>2]>>2];c[Za>>2]=c[(c[Ha>>2]|0)+4>>2];c[_a>>2]=0;c[Sa>>2]=(c[Sa>>2]|0)+((c[Sa>>2]|0)==(c[Va>>2]|0)&1);c[$a>>2]=(c[Sa>>2]|0)-(c[Va>>2]|0);if((c[Za>>2]|0)>>>0>(c[$a>>2]|0)>>>0){c[_a>>2]=c[Za>>2];c[Za>>2]=0;}if((c[Ya>>2]|0)>>>0>(c[$a>>2]|0)>>>0){c[_a>>2]=c[Ya>>2];c[Ya>>2]=0;}e:while(1){if((c[Sa>>2]|0)>>>0>=(c[Xa>>2]|0)>>>0)break;c[bb>>2]=Dk(c[Sa>>2]|0,c[Na>>2]|0,8)|0;c[cb>>2]=Dk(c[Sa>>2]|0,c[Pa>>2]|0,c[La>>2]|0)|0;c[db>>2]=(c[Sa>>2]|0)-(c[Qa>>2]|0);c[eb>>2]=c[(c[Ma>>2]|0)+(c[bb>>2]<<2)>>2];c[fb>>2]=c[(c[Oa>>2]|0)+(c[cb>>2]<<2)>>2];c[gb>>2]=(c[Qa>>2]|0)+(c[eb>>2]|0);c[hb>>2]=(c[Qa>>2]|0)+(c[fb>>2]|0);$a=c[db>>2]|0;c[(c[Oa>>2]|0)+(c[cb>>2]<<2)>>2]=$a;c[(c[Ma>>2]|0)+(c[bb>>2]<<2)>>2]=$a;$a=(c[Ya>>2]|0)>>>0>0&1;Ka=Rk((c[Sa>>2]|0)+1+(0-(c[Ya>>2]|0))|0)|0;if($a&(Ka|0)==(Rk((c[Sa>>2]|0)+1|0)|0)|0){c[ab>>2]=(cn((c[Sa>>2]|0)+1+4|0,(c[Sa>>2]|0)+1+4+(0-(c[Ya>>2]|0))|0,c[Wa>>2]|0)|0)+4;c[Sa>>2]=(c[Sa>>2]|0)+1;$m(c[Ga>>2]|0,(c[Sa>>2]|0)-(c[Ta>>2]|0)|0,c[Ta>>2]|0,0,(c[ab>>2]|0)-3|0);}else{f:do{if((c[eb>>2]|0)>>>0>(c[Ua>>2]|0)>>>0?(Ka=Mk(c[gb>>2]|0)|0,$a=y,Ra=Mk(c[Sa>>2]|0)|0,(Ka|0)==(Ra|0)&($a|0)==(y|0)):0){c[ab>>2]=(cn((c[Sa>>2]|0)+8|0,(c[gb>>2]|0)+8|0,c[Wa>>2]|0)|0)+8;c[ib>>2]=(c[Sa>>2]|0)-(c[gb>>2]|0);while(1){if(!(((c[Sa>>2]|0)>>>0>(c[Ta>>2]|0)>>>0?(c[gb>>2]|0)>>>0>(c[Va>>2]|0)>>>0:0)|0))break f;if((d[(c[Sa>>2]|0)+-1>>0]|0|0)!=(d[(c[gb>>2]|0)+-1>>0]|0|0))break f;c[Sa>>2]=(c[Sa>>2]|0)+-1;c[gb>>2]=(c[gb>>2]|0)+-1;c[ab>>2]=(c[ab>>2]|0)+1;}}else fc=51;}while(0);g:do{if((fc|0)==51){fc=0;if((c[fb>>2]|0)>>>0>(c[Ua>>2]|0)>>>0?($a=Rk(c[hb>>2]|0)|0,($a|0)==(Rk(c[Sa>>2]|0)|0)):0){c[jb>>2]=Dk((c[Sa>>2]|0)+1|0,c[Na>>2]|0,8)|0;c[kb>>2]=c[(c[Ma>>2]|0)+(c[jb>>2]<<2)>>2];c[lb>>2]=(c[Qa>>2]|0)+(c[kb>>2]|0);c[(c[Ma>>2]|0)+(c[jb>>2]<<2)>>2]=(c[db>>2]|0)+1;if((c[kb>>2]|0)>>>0>(c[Ua>>2]|0)>>>0?($a=Mk(c[lb>>2]|0)|0,Ra=y,Ka=Mk((c[Sa>>2]|0)+1|0)|0,($a|0)==(Ka|0)&(Ra|0)==(y|0)):0){c[ab>>2]=(cn((c[Sa>>2]|0)+9|0,(c[lb>>2]|0)+8|0,c[Wa>>2]|0)|0)+8;c[Sa>>2]=(c[Sa>>2]|0)+1;c[ib>>2]=(c[Sa>>2]|0)-(c[lb>>2]|0);while(1){if(!(((c[Sa>>2]|0)>>>0>(c[Ta>>2]|0)>>>0?(c[lb>>2]|0)>>>0>(c[Va>>2]|0)>>>0:0)|0))break g;if((d[(c[Sa>>2]|0)+-1>>0]|0|0)!=(d[(c[lb>>2]|0)+-1>>0]|0|0))break g;c[Sa>>2]=(c[Sa>>2]|0)+-1;c[lb>>2]=(c[lb>>2]|0)+-1;c[ab>>2]=(c[ab>>2]|0)+1;}}c[ab>>2]=(cn((c[Sa>>2]|0)+4|0,(c[hb>>2]|0)+4|0,c[Wa>>2]|0)|0)+4;c[ib>>2]=(c[Sa>>2]|0)-(c[hb>>2]|0);while(1){if(!(((c[Sa>>2]|0)>>>0>(c[Ta>>2]|0)>>>0?(c[hb>>2]|0)>>>0>(c[Va>>2]|0)>>>0:0)|0))break g;if((d[(c[Sa>>2]|0)+-1>>0]|0|0)!=(d[(c[hb>>2]|0)+-1>>0]|0|0))break g;c[Sa>>2]=(c[Sa>>2]|0)+-1;c[hb>>2]=(c[hb>>2]|0)+-1;c[ab>>2]=(c[ab>>2]|0)+1;}}c[Sa>>2]=(c[Sa>>2]|0)+(((c[Sa>>2]|0)-(c[Ta>>2]|0)>>8)+1);continue e;}}while(0);c[Za>>2]=c[Ya>>2];c[Ya>>2]=c[ib>>2];$m(c[Ga>>2]|0,(c[Sa>>2]|0)-(c[Ta>>2]|0)|0,c[Ta>>2]|0,(c[ib>>2]|0)+2|0,(c[ab>>2]|0)-3|0);}c[Sa>>2]=(c[Sa>>2]|0)+(c[ab>>2]|0);c[Ta>>2]=c[Sa>>2];h:do{if((c[Sa>>2]|0)>>>0<=(c[Xa>>2]|0)>>>0){Ra=(c[db>>2]|0)+2|0;Ka=c[Oa>>2]|0;c[Ka+((Dk((c[Qa>>2]|0)+(c[db>>2]|0)+2|0,c[Pa>>2]|0,c[La>>2]|0)|0)<<2)>>2]=Ra;Ka=c[Ma>>2]|0;c[Ka+((Dk((c[Qa>>2]|0)+(c[db>>2]|0)+2|0,c[Na>>2]|0,8)|0)<<2)>>2]=Ra;Ra=(c[Sa>>2]|0)+-2-(c[Qa>>2]|0)|0;Ka=c[Oa>>2]|0;c[Ka+((Dk((c[Sa>>2]|0)+-2|0,c[Pa>>2]|0,c[La>>2]|0)|0)<<2)>>2]=Ra;Ka=c[Ma>>2]|0;c[Ka+((Dk((c[Sa>>2]|0)+-2|0,c[Na>>2]|0,8)|0)<<2)>>2]=Ra;while(1){if((c[Sa>>2]|0)>>>0>(c[Xa>>2]|0)>>>0)break h;Ra=(c[Za>>2]|0)>>>0>0&1;Ka=Rk(c[Sa>>2]|0)|0;if(!(Ra&(Ka|0)==(Rk((c[Sa>>2]|0)+(0-(c[Za>>2]|0))|0)|0)))break h;c[mb>>2]=(cn((c[Sa>>2]|0)+4|0,(c[Sa>>2]|0)+4+(0-(c[Za>>2]|0))|0,c[Wa>>2]|0)|0)+4;c[nb>>2]=c[Za>>2];c[Za>>2]=c[Ya>>2];c[Ya>>2]=c[nb>>2];Ka=(c[Sa>>2]|0)-(c[Qa>>2]|0)|0;Ra=c[Oa>>2]|0;c[Ra+((Dk(c[Sa>>2]|0,c[Pa>>2]|0,c[La>>2]|0)|0)<<2)>>2]=Ka;Ka=(c[Sa>>2]|0)-(c[Qa>>2]|0)|0;Ra=c[Ma>>2]|0;c[Ra+((Dk(c[Sa>>2]|0,c[Na>>2]|0,8)|0)<<2)>>2]=Ka;$m(c[Ga>>2]|0,0,c[Ta>>2]|0,0,(c[mb>>2]|0)-3|0);c[Sa>>2]=(c[Sa>>2]|0)+(c[mb>>2]|0);c[Ta>>2]=c[Sa>>2];}}}while(0);}c[c[Ha>>2]>>2]=c[Ya>>2]|0?c[Ya>>2]|0:c[_a>>2]|0;c[(c[Ha>>2]|0)+4>>2]=c[Za>>2]|0?c[Za>>2]|0:c[_a>>2]|0;c[Zb>>2]=(c[Wa>>2]|0)-(c[Ta>>2]|0);gc=c[Zb>>2]|0;l=i;return gc|0;}case 6:{Ta=c[$b>>2]|0;Wa=c[ac>>2]|0;_a=c[bc>>2]|0;Za=c[cc>>2]|0;Ha=c[dc>>2]|0;c[W>>2]=c[_b>>2];c[X>>2]=Ta;c[Y>>2]=Wa;c[Z>>2]=_a;c[_>>2]=Za;c[$>>2]=Ha;c[aa>>2]=6;c[ba>>2]=c[(c[W>>2]|0)+36>>2];c[ca>>2]=c[(c[Z>>2]|0)+8>>2];c[da>>2]=c[(c[W>>2]|0)+44>>2];c[ea>>2]=c[(c[Z>>2]|0)+4>>2];c[fa>>2]=c[(c[W>>2]|0)+4>>2];c[ga>>2]=c[_>>2];c[ha>>2]=c[ga>>2];c[ia>>2]=c[ga>>2];c[ja>>2]=c[(c[W>>2]|0)+12>>2];c[ka>>2]=(c[fa>>2]|0)+(c[ja>>2]|0);c[la>>2]=(c[ga>>2]|0)+(c[$>>2]|0);c[ma>>2]=(c[la>>2]|0)+-8;c[na>>2]=c[c[Y>>2]>>2];c[oa>>2]=c[(c[Y>>2]|0)+4>>2];c[pa>>2]=0;c[ha>>2]=(c[ha>>2]|0)+((c[ha>>2]|0)==(c[ka>>2]|0)&1);c[qa>>2]=(c[ha>>2]|0)-(c[ka>>2]|0);if((c[oa>>2]|0)>>>0>(c[qa>>2]|0)>>>0){c[pa>>2]=c[oa>>2];c[oa>>2]=0;}if((c[na>>2]|0)>>>0>(c[qa>>2]|0)>>>0){c[pa>>2]=c[na>>2];c[na>>2]=0;}i:while(1){if((c[ha>>2]|0)>>>0>=(c[ma>>2]|0)>>>0)break;c[sa>>2]=Dk(c[ha>>2]|0,c[ca>>2]|0,8)|0;c[ta>>2]=Dk(c[ha>>2]|0,c[ea>>2]|0,c[aa>>2]|0)|0;c[ua>>2]=(c[ha>>2]|0)-(c[fa>>2]|0);c[va>>2]=c[(c[ba>>2]|0)+(c[sa>>2]<<2)>>2];c[wa>>2]=c[(c[da>>2]|0)+(c[ta>>2]<<2)>>2];c[xa>>2]=(c[fa>>2]|0)+(c[va>>2]|0);c[ya>>2]=(c[fa>>2]|0)+(c[wa>>2]|0);qa=c[ua>>2]|0;c[(c[da>>2]|0)+(c[ta>>2]<<2)>>2]=qa;c[(c[ba>>2]|0)+(c[sa>>2]<<2)>>2]=qa;qa=(c[na>>2]|0)>>>0>0&1;$=Rk((c[ha>>2]|0)+1+(0-(c[na>>2]|0))|0)|0;if(qa&($|0)==(Rk((c[ha>>2]|0)+1|0)|0)|0){c[ra>>2]=(cn((c[ha>>2]|0)+1+4|0,(c[ha>>2]|0)+1+4+(0-(c[na>>2]|0))|0,c[la>>2]|0)|0)+4;c[ha>>2]=(c[ha>>2]|0)+1;$m(c[X>>2]|0,(c[ha>>2]|0)-(c[ia>>2]|0)|0,c[ia>>2]|0,0,(c[ra>>2]|0)-3|0);}else{j:do{if((c[va>>2]|0)>>>0>(c[ja>>2]|0)>>>0?($=Mk(c[xa>>2]|0)|0,qa=y,ga=Mk(c[ha>>2]|0)|0,($|0)==(ga|0)&(qa|0)==(y|0)):0){c[ra>>2]=(cn((c[ha>>2]|0)+8|0,(c[xa>>2]|0)+8|0,c[la>>2]|0)|0)+8;c[za>>2]=(c[ha>>2]|0)-(c[xa>>2]|0);while(1){if(!(((c[ha>>2]|0)>>>0>(c[ia>>2]|0)>>>0?(c[xa>>2]|0)>>>0>(c[ka>>2]|0)>>>0:0)|0))break j;if((d[(c[ha>>2]|0)+-1>>0]|0|0)!=(d[(c[xa>>2]|0)+-1>>0]|0|0))break j;c[ha>>2]=(c[ha>>2]|0)+-1;c[xa>>2]=(c[xa>>2]|0)+-1;c[ra>>2]=(c[ra>>2]|0)+1;}}else fc=86;}while(0);k:do{if((fc|0)==86){fc=0;if((c[wa>>2]|0)>>>0>(c[ja>>2]|0)>>>0?(qa=Rk(c[ya>>2]|0)|0,(qa|0)==(Rk(c[ha>>2]|0)|0)):0){c[Aa>>2]=Dk((c[ha>>2]|0)+1|0,c[ca>>2]|0,8)|0;c[Ba>>2]=c[(c[ba>>2]|0)+(c[Aa>>2]<<2)>>2];c[Ca>>2]=(c[fa>>2]|0)+(c[Ba>>2]|0);c[(c[ba>>2]|0)+(c[Aa>>2]<<2)>>2]=(c[ua>>2]|0)+1;if((c[Ba>>2]|0)>>>0>(c[ja>>2]|0)>>>0?(qa=Mk(c[Ca>>2]|0)|0,ga=y,$=Mk((c[ha>>2]|0)+1|0)|0,(qa|0)==($|0)&(ga|0)==(y|0)):0){c[ra>>2]=(cn((c[ha>>2]|0)+9|0,(c[Ca>>2]|0)+8|0,c[la>>2]|0)|0)+8;c[ha>>2]=(c[ha>>2]|0)+1;c[za>>2]=(c[ha>>2]|0)-(c[Ca>>2]|0);while(1){if(!(((c[ha>>2]|0)>>>0>(c[ia>>2]|0)>>>0?(c[Ca>>2]|0)>>>0>(c[ka>>2]|0)>>>0:0)|0))break k;if((d[(c[ha>>2]|0)+-1>>0]|0|0)!=(d[(c[Ca>>2]|0)+-1>>0]|0|0))break k;c[ha>>2]=(c[ha>>2]|0)+-1;c[Ca>>2]=(c[Ca>>2]|0)+-1;c[ra>>2]=(c[ra>>2]|0)+1;}}c[ra>>2]=(cn((c[ha>>2]|0)+4|0,(c[ya>>2]|0)+4|0,c[la>>2]|0)|0)+4;c[za>>2]=(c[ha>>2]|0)-(c[ya>>2]|0);while(1){if(!(((c[ha>>2]|0)>>>0>(c[ia>>2]|0)>>>0?(c[ya>>2]|0)>>>0>(c[ka>>2]|0)>>>0:0)|0))break k;if((d[(c[ha>>2]|0)+-1>>0]|0|0)!=(d[(c[ya>>2]|0)+-1>>0]|0|0))break k;c[ha>>2]=(c[ha>>2]|0)+-1;c[ya>>2]=(c[ya>>2]|0)+-1;c[ra>>2]=(c[ra>>2]|0)+1;}}c[ha>>2]=(c[ha>>2]|0)+(((c[ha>>2]|0)-(c[ia>>2]|0)>>8)+1);continue i;}}while(0);c[oa>>2]=c[na>>2];c[na>>2]=c[za>>2];$m(c[X>>2]|0,(c[ha>>2]|0)-(c[ia>>2]|0)|0,c[ia>>2]|0,(c[za>>2]|0)+2|0,(c[ra>>2]|0)-3|0);}c[ha>>2]=(c[ha>>2]|0)+(c[ra>>2]|0);c[ia>>2]=c[ha>>2];l:do{if((c[ha>>2]|0)>>>0<=(c[ma>>2]|0)>>>0){ga=(c[ua>>2]|0)+2|0;$=c[da>>2]|0;c[$+((Dk((c[fa>>2]|0)+(c[ua>>2]|0)+2|0,c[ea>>2]|0,c[aa>>2]|0)|0)<<2)>>2]=ga;$=c[ba>>2]|0;c[$+((Dk((c[fa>>2]|0)+(c[ua>>2]|0)+2|0,c[ca>>2]|0,8)|0)<<2)>>2]=ga;ga=(c[ha>>2]|0)+-2-(c[fa>>2]|0)|0;$=c[da>>2]|0;c[$+((Dk((c[ha>>2]|0)+-2|0,c[ea>>2]|0,c[aa>>2]|0)|0)<<2)>>2]=ga;$=c[ba>>2]|0;c[$+((Dk((c[ha>>2]|0)+-2|0,c[ca>>2]|0,8)|0)<<2)>>2]=ga;while(1){if((c[ha>>2]|0)>>>0>(c[ma>>2]|0)>>>0)break l;ga=(c[oa>>2]|0)>>>0>0&1;$=Rk(c[ha>>2]|0)|0;if(!(ga&($|0)==(Rk((c[ha>>2]|0)+(0-(c[oa>>2]|0))|0)|0)))break l;c[Da>>2]=(cn((c[ha>>2]|0)+4|0,(c[ha>>2]|0)+4+(0-(c[oa>>2]|0))|0,c[la>>2]|0)|0)+4;c[Ea>>2]=c[oa>>2];c[oa>>2]=c[na>>2];c[na>>2]=c[Ea>>2];$=(c[ha>>2]|0)-(c[fa>>2]|0)|0;ga=c[da>>2]|0;c[ga+((Dk(c[ha>>2]|0,c[ea>>2]|0,c[aa>>2]|0)|0)<<2)>>2]=$;$=(c[ha>>2]|0)-(c[fa>>2]|0)|0;ga=c[ba>>2]|0;c[ga+((Dk(c[ha>>2]|0,c[ca>>2]|0,8)|0)<<2)>>2]=$;$m(c[X>>2]|0,0,c[ia>>2]|0,0,(c[Da>>2]|0)-3|0);c[ha>>2]=(c[ha>>2]|0)+(c[Da>>2]|0);c[ia>>2]=c[ha>>2];}}}while(0);}c[c[Y>>2]>>2]=c[na>>2]|0?c[na>>2]|0:c[pa>>2]|0;c[(c[Y>>2]|0)+4>>2]=c[oa>>2]|0?c[oa>>2]|0:c[pa>>2]|0;c[Zb>>2]=(c[la>>2]|0)-(c[ia>>2]|0);gc=c[Zb>>2]|0;l=i;return gc|0;}default:{ia=c[$b>>2]|0;$b=c[ac>>2]|0;ac=c[bc>>2]|0;bc=c[cc>>2]|0;cc=c[dc>>2]|0;c[ob>>2]=c[_b>>2];c[pb>>2]=ia;c[qb>>2]=$b;c[rb>>2]=ac;c[sb>>2]=bc;c[tb>>2]=cc;c[ub>>2]=4;c[vb>>2]=c[(c[ob>>2]|0)+36>>2];c[wb>>2]=c[(c[rb>>2]|0)+8>>2];c[xb>>2]=c[(c[ob>>2]|0)+44>>2];c[yb>>2]=c[(c[rb>>2]|0)+4>>2];c[zb>>2]=c[(c[ob>>2]|0)+4>>2];c[Ab>>2]=c[sb>>2];c[Bb>>2]=c[Ab>>2];c[Cb>>2]=c[Ab>>2];c[Db>>2]=c[(c[ob>>2]|0)+12>>2];c[Eb>>2]=(c[zb>>2]|0)+(c[Db>>2]|0);c[Fb>>2]=(c[Ab>>2]|0)+(c[tb>>2]|0);c[Gb>>2]=(c[Fb>>2]|0)+-8;c[Hb>>2]=c[c[qb>>2]>>2];c[Ib>>2]=c[(c[qb>>2]|0)+4>>2];c[Jb>>2]=0;c[Bb>>2]=(c[Bb>>2]|0)+((c[Bb>>2]|0)==(c[Eb>>2]|0)&1);c[Kb>>2]=(c[Bb>>2]|0)-(c[Eb>>2]|0);if((c[Ib>>2]|0)>>>0>(c[Kb>>2]|0)>>>0){c[Jb>>2]=c[Ib>>2];c[Ib>>2]=0;}if((c[Hb>>2]|0)>>>0>(c[Kb>>2]|0)>>>0){c[Jb>>2]=c[Hb>>2];c[Hb>>2]=0;}m:while(1){if((c[Bb>>2]|0)>>>0>=(c[Gb>>2]|0)>>>0)break;c[Mb>>2]=Dk(c[Bb>>2]|0,c[wb>>2]|0,8)|0;c[Nb>>2]=Dk(c[Bb>>2]|0,c[yb>>2]|0,c[ub>>2]|0)|0;c[Ob>>2]=(c[Bb>>2]|0)-(c[zb>>2]|0);c[Pb>>2]=c[(c[vb>>2]|0)+(c[Mb>>2]<<2)>>2];c[Qb>>2]=c[(c[xb>>2]|0)+(c[Nb>>2]<<2)>>2];c[Rb>>2]=(c[zb>>2]|0)+(c[Pb>>2]|0);c[Sb>>2]=(c[zb>>2]|0)+(c[Qb>>2]|0);Kb=c[Ob>>2]|0;c[(c[xb>>2]|0)+(c[Nb>>2]<<2)>>2]=Kb;c[(c[vb>>2]|0)+(c[Mb>>2]<<2)>>2]=Kb;Kb=(c[Hb>>2]|0)>>>0>0&1;tb=Rk((c[Bb>>2]|0)+1+(0-(c[Hb>>2]|0))|0)|0;if(Kb&(tb|0)==(Rk((c[Bb>>2]|0)+1|0)|0)|0){c[Lb>>2]=(cn((c[Bb>>2]|0)+1+4|0,(c[Bb>>2]|0)+1+4+(0-(c[Hb>>2]|0))|0,c[Fb>>2]|0)|0)+4;c[Bb>>2]=(c[Bb>>2]|0)+1;$m(c[pb>>2]|0,(c[Bb>>2]|0)-(c[Cb>>2]|0)|0,c[Cb>>2]|0,0,(c[Lb>>2]|0)-3|0);}else{n:do{if((c[Pb>>2]|0)>>>0>(c[Db>>2]|0)>>>0?(tb=Mk(c[Rb>>2]|0)|0,Kb=y,Ab=Mk(c[Bb>>2]|0)|0,(tb|0)==(Ab|0)&(Kb|0)==(y|0)):0){c[Lb>>2]=(cn((c[Bb>>2]|0)+8|0,(c[Rb>>2]|0)+8|0,c[Fb>>2]|0)|0)+8;c[Tb>>2]=(c[Bb>>2]|0)-(c[Rb>>2]|0);while(1){if(!(((c[Bb>>2]|0)>>>0>(c[Cb>>2]|0)>>>0?(c[Rb>>2]|0)>>>0>(c[Eb>>2]|0)>>>0:0)|0))break n;if((d[(c[Bb>>2]|0)+-1>>0]|0|0)!=(d[(c[Rb>>2]|0)+-1>>0]|0|0))break n;c[Bb>>2]=(c[Bb>>2]|0)+-1;c[Rb>>2]=(c[Rb>>2]|0)+-1;c[Lb>>2]=(c[Lb>>2]|0)+1;}}else fc=16;}while(0);o:do{if((fc|0)==16){fc=0;if((c[Qb>>2]|0)>>>0>(c[Db>>2]|0)>>>0?(Kb=Rk(c[Sb>>2]|0)|0,(Kb|0)==(Rk(c[Bb>>2]|0)|0)):0){c[Ub>>2]=Dk((c[Bb>>2]|0)+1|0,c[wb>>2]|0,8)|0;c[Vb>>2]=c[(c[vb>>2]|0)+(c[Ub>>2]<<2)>>2];c[Wb>>2]=(c[zb>>2]|0)+(c[Vb>>2]|0);c[(c[vb>>2]|0)+(c[Ub>>2]<<2)>>2]=(c[Ob>>2]|0)+1;if((c[Vb>>2]|0)>>>0>(c[Db>>2]|0)>>>0?(Kb=Mk(c[Wb>>2]|0)|0,Ab=y,tb=Mk((c[Bb>>2]|0)+1|0)|0,(Kb|0)==(tb|0)&(Ab|0)==(y|0)):0){c[Lb>>2]=(cn((c[Bb>>2]|0)+9|0,(c[Wb>>2]|0)+8|0,c[Fb>>2]|0)|0)+8;c[Bb>>2]=(c[Bb>>2]|0)+1;c[Tb>>2]=(c[Bb>>2]|0)-(c[Wb>>2]|0);while(1){if(!(((c[Bb>>2]|0)>>>0>(c[Cb>>2]|0)>>>0?(c[Wb>>2]|0)>>>0>(c[Eb>>2]|0)>>>0:0)|0))break o;if((d[(c[Bb>>2]|0)+-1>>0]|0|0)!=(d[(c[Wb>>2]|0)+-1>>0]|0|0))break o;c[Bb>>2]=(c[Bb>>2]|0)+-1;c[Wb>>2]=(c[Wb>>2]|0)+-1;c[Lb>>2]=(c[Lb>>2]|0)+1;}}c[Lb>>2]=(cn((c[Bb>>2]|0)+4|0,(c[Sb>>2]|0)+4|0,c[Fb>>2]|0)|0)+4;c[Tb>>2]=(c[Bb>>2]|0)-(c[Sb>>2]|0);while(1){if(!(((c[Bb>>2]|0)>>>0>(c[Cb>>2]|0)>>>0?(c[Sb>>2]|0)>>>0>(c[Eb>>2]|0)>>>0:0)|0))break o;if((d[(c[Bb>>2]|0)+-1>>0]|0|0)!=(d[(c[Sb>>2]|0)+-1>>0]|0|0))break o;c[Bb>>2]=(c[Bb>>2]|0)+-1;c[Sb>>2]=(c[Sb>>2]|0)+-1;c[Lb>>2]=(c[Lb>>2]|0)+1;}}c[Bb>>2]=(c[Bb>>2]|0)+(((c[Bb>>2]|0)-(c[Cb>>2]|0)>>8)+1);continue m;}}while(0);c[Ib>>2]=c[Hb>>2];c[Hb>>2]=c[Tb>>2];$m(c[pb>>2]|0,(c[Bb>>2]|0)-(c[Cb>>2]|0)|0,c[Cb>>2]|0,(c[Tb>>2]|0)+2|0,(c[Lb>>2]|0)-3|0);}c[Bb>>2]=(c[Bb>>2]|0)+(c[Lb>>2]|0);c[Cb>>2]=c[Bb>>2];p:do{if((c[Bb>>2]|0)>>>0<=(c[Gb>>2]|0)>>>0){Ab=(c[Ob>>2]|0)+2|0;tb=c[xb>>2]|0;c[tb+((Dk((c[zb>>2]|0)+(c[Ob>>2]|0)+2|0,c[yb>>2]|0,c[ub>>2]|0)|0)<<2)>>2]=Ab;tb=c[vb>>2]|0;c[tb+((Dk((c[zb>>2]|0)+(c[Ob>>2]|0)+2|0,c[wb>>2]|0,8)|0)<<2)>>2]=Ab;Ab=(c[Bb>>2]|0)+-2-(c[zb>>2]|0)|0;tb=c[xb>>2]|0;c[tb+((Dk((c[Bb>>2]|0)+-2|0,c[yb>>2]|0,c[ub>>2]|0)|0)<<2)>>2]=Ab;tb=c[vb>>2]|0;c[tb+((Dk((c[Bb>>2]|0)+-2|0,c[wb>>2]|0,8)|0)<<2)>>2]=Ab;while(1){if((c[Bb>>2]|0)>>>0>(c[Gb>>2]|0)>>>0)break p;Ab=(c[Ib>>2]|0)>>>0>0&1;tb=Rk(c[Bb>>2]|0)|0;if(!(Ab&(tb|0)==(Rk((c[Bb>>2]|0)+(0-(c[Ib>>2]|0))|0)|0)))break p;c[Xb>>2]=(cn((c[Bb>>2]|0)+4|0,(c[Bb>>2]|0)+4+(0-(c[Ib>>2]|0))|0,c[Fb>>2]|0)|0)+4;c[Yb>>2]=c[Ib>>2];c[Ib>>2]=c[Hb>>2];c[Hb>>2]=c[Yb>>2];tb=(c[Bb>>2]|0)-(c[zb>>2]|0)|0;Ab=c[xb>>2]|0;c[Ab+((Dk(c[Bb>>2]|0,c[yb>>2]|0,c[ub>>2]|0)|0)<<2)>>2]=tb;tb=(c[Bb>>2]|0)-(c[zb>>2]|0)|0;Ab=c[vb>>2]|0;c[Ab+((Dk(c[Bb>>2]|0,c[wb>>2]|0,8)|0)<<2)>>2]=tb;$m(c[pb>>2]|0,0,c[Cb>>2]|0,0,(c[Xb>>2]|0)-3|0);c[Bb>>2]=(c[Bb>>2]|0)+(c[Xb>>2]|0);c[Cb>>2]=c[Bb>>2];}}}while(0);}c[c[qb>>2]>>2]=c[Hb>>2]|0?c[Hb>>2]|0:c[Jb>>2]|0;c[(c[qb>>2]|0)+4>>2]=c[Ib>>2]|0?c[Ib>>2]|0:c[Jb>>2]|0;c[Zb>>2]=(c[Fb>>2]|0)-(c[Cb>>2]|0);gc=c[Zb>>2]|0;l=i;return gc|0;}}return 0;}function jm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0;i=l;l=l+2144|0;j=i+2136|0;k=i+2132|0;m=i+2128|0;n=i+2124|0;o=i+2120|0;p=i+2116|0;q=i+2112|0;r=i+2108|0;s=i+2104|0;t=i+2100|0;u=i+2096|0;v=i+2092|0;w=i+2088|0;x=i+2084|0;y=i+2080|0;z=i+2076|0;A=i+2072|0;B=i+2068|0;C=i+2064|0;D=i+2060|0;E=i+2056|0;F=i+2052|0;G=i+2048|0;H=i+2044|0;I=i+2040|0;J=i+2036|0;K=i+2032|0;L=i+2028|0;M=i+2024|0;N=i+2020|0;O=i+2016|0;P=i+2012|0;Q=i+2008|0;R=i+2004|0;S=i+2e3|0;T=i+1996|0;U=i+1992|0;V=i+1988|0;W=i+1984|0;X=i+1980|0;Y=i+1976|0;Z=i+1972|0;_=i+1968|0;$=i+1964|0;aa=i+1960|0;ba=i+1956|0;ca=i+1952|0;da=i+1948|0;ea=i+1944|0;fa=i+1940|0;ga=i+1936|0;ha=i+1932|0;ia=i+1928|0;ja=i+1924|0;ka=i+1920|0;la=i+1916|0;ma=i+1912|0;na=i+1908|0;oa=i+1904|0;pa=i+1900|0;qa=i+1896|0;ra=i+1892|0;sa=i+1888|0;ta=i+1884|0;ua=i+1880|0;va=i+1876|0;wa=i+1872|0;xa=i+1868|0;ya=i+1864|0;za=i+1860|0;Aa=i+1856|0;Ba=i+1852|0;Ca=i+1848|0;Da=i+1844|0;Ea=i+1840|0;Fa=i+1836|0;Ga=i+1832|0;Ha=i+1828|0;Ia=i+1824|0;Ja=i+1820|0;Ka=i+1816|0;La=i+1812|0;Ma=i+1808|0;Na=i+1804|0;Oa=i+1800|0;Pa=i+1796|0;Qa=i+1792|0;Ra=i+1788|0;Sa=i+1784|0;Ta=i+1780|0;Ua=i+1776|0;Va=i+1772|0;Wa=i+1768|0;Xa=i+1764|0;Ya=i+1760|0;Za=i+1756|0;_a=i+1752|0;$a=i+1748|0;ab=i+1744|0;bb=i+1740|0;cb=i+1736|0;db=i+1732|0;eb=i+1728|0;fb=i+1724|0;gb=i+1720|0;hb=i+1716|0;ib=i+1712|0;jb=i+1708|0;kb=i+1704|0;lb=i+1700|0;mb=i+1696|0;nb=i+1692|0;ob=i+1688|0;pb=i+1684|0;qb=i+1680|0;rb=i+1676|0;sb=i+1672|0;tb=i+1668|0;ub=i+1664|0;vb=i+1660|0;wb=i+1656|0;xb=i+1652|0;yb=i+1648|0;zb=i+1644|0;Ab=i+1640|0;Bb=i+1636|0;Cb=i+1632|0;Db=i+1628|0;Eb=i+1624|0;Fb=i+1620|0;Gb=i+1616|0;Hb=i+1612|0;Ib=i+1608|0;Jb=i+1604|0;Kb=i+1600|0;Lb=i+1596|0;Mb=i+1592|0;Nb=i+1588|0;Ob=i+1584|0;Pb=i+1580|0;Qb=i+1576|0;Rb=i+1572|0;Sb=i+1568|0;Tb=i+1564|0;Ub=i+1560|0;Vb=i+1556|0;Wb=i+1552|0;Xb=i+1548|0;Yb=i+1544|0;Zb=i+1540|0;_b=i+1536|0;$b=i+1532|0;ac=i+1528|0;bc=i+1524|0;cc=i+1520|0;dc=i+1516|0;ec=i+1512|0;fc=i+1508|0;gc=i+1504|0;hc=i+1500|0;ic=i+1496|0;jc=i+1492|0;kc=i+1488|0;lc=i+1484|0;mc=i+1480|0;nc=i+1476|0;oc=i+1472|0;pc=i+1468|0;qc=i+1464|0;rc=i+1460|0;sc=i+1456|0;tc=i+1452|0;uc=i+1448|0;vc=i+1444|0;wc=i+1440|0;xc=i+1436|0;yc=i+1432|0;zc=i+1428|0;Ac=i+1424|0;Bc=i+1420|0;Cc=i+1416|0;Dc=i+1412|0;Ec=i+1408|0;Fc=i+1404|0;Gc=i+1400|0;Hc=i+1396|0;Ic=i+1392|0;Jc=i+1388|0;Kc=i+1384|0;Lc=i+1380|0;Mc=i+1376|0;Nc=i+1372|0;Oc=i+1368|0;Pc=i+1364|0;Qc=i+1360|0;Rc=i+1356|0;Sc=i+1352|0;Tc=i+1348|0;Uc=i+1344|0;Vc=i+1340|0;Wc=i+1336|0;Xc=i+1332|0;Yc=i+1328|0;Zc=i+1324|0;_c=i+1320|0;$c=i+1316|0;ad=i+1312|0;bd=i+1308|0;cd=i+1304|0;dd=i+1300|0;ed=i+1296|0;fd=i+1292|0;gd=i+1288|0;hd=i+1284|0;id=i+1280|0;jd=i+1276|0;kd=i+1272|0;ld=i+1268|0;md=i+1264|0;nd=i+1260|0;od=i+1256|0;pd=i+1252|0;qd=i+1248|0;rd=i+1244|0;sd=i+1240|0;td=i+1236|0;ud=i+1232|0;vd=i+1228|0;wd=i+1224|0;xd=i+1220|0;yd=i+1216|0;zd=i+1212|0;Ad=i+1208|0;Bd=i+1204|0;Cd=i+1200|0;Dd=i+1196|0;Ed=i+1192|0;Fd=i+1188|0;Gd=i+1184|0;Hd=i+1180|0;Id=i+1176|0;Jd=i+1172|0;Kd=i+1168|0;Ld=i+1164|0;Md=i+1160|0;Nd=i+1156|0;Od=i+1152|0;Pd=i+1148|0;Qd=i+1144|0;Rd=i+1140|0;Sd=i+1136|0;Td=i+1132|0;Ud=i+1128|0;Vd=i+1124|0;Wd=i+1120|0;Xd=i+1116|0;Yd=i+1112|0;Zd=i+1108|0;_d=i+1104|0;$d=i+1100|0;ae=i+1096|0;be=i+1092|0;ce=i+1088|0;de=i+1084|0;ee=i+1080|0;fe=i+1076|0;ge=i+1072|0;he=i+1068|0;ie=i+1064|0;je=i+1060|0;ke=i+1056|0;le=i+1052|0;me=i+1048|0;ne=i+1044|0;oe=i+1040|0;pe=i+1036|0;qe=i+1032|0;re=i+1028|0;se=i+1024|0;te=i+1020|0;ue=i+1016|0;ve=i+1012|0;we=i+1008|0;xe=i+1004|0;ye=i+1e3|0;ze=i+996|0;Ae=i+992|0;Be=i+988|0;Ce=i+984|0;De=i+980|0;Ee=i+976|0;Fe=i+972|0;Ge=i+968|0;He=i+964|0;Ie=i+960|0;Je=i+956|0;Ke=i+952|0;Le=i+948|0;Me=i+944|0;Ne=i+940|0;Oe=i+936|0;Pe=i+932|0;Qe=i+928|0;Re=i+924|0;Se=i+920|0;Te=i+916|0;Ue=i+912|0;Ve=i+908|0;We=i+904|0;Xe=i+900|0;Ye=i+896|0;Ze=i+892|0;_e=i+888|0;$e=i+884|0;af=i+880|0;bf=i+876|0;cf=i+872|0;df=i+868|0;ef=i+864|0;ff=i+860|0;gf=i+856|0;hf=i+852|0;jf=i+848|0;kf=i+844|0;lf=i+840|0;mf=i+836|0;nf=i+832|0;of=i+828|0;pf=i+824|0;qf=i+820|0;rf=i+816|0;sf=i+812|0;tf=i+808|0;uf=i+804|0;vf=i+800|0;wf=i+796|0;xf=i+792|0;yf=i+788|0;zf=i+784|0;Af=i+780|0;Bf=i+776|0;Cf=i+772|0;Df=i+768|0;Ef=i+764|0;Ff=i+760|0;Gf=i+756|0;Hf=i+752|0;If=i+748|0;Jf=i+744|0;Kf=i+740|0;Lf=i+736|0;Mf=i+732|0;Nf=i+728|0;Of=i+724|0;Pf=i+720|0;Qf=i+716|0;Rf=i+712|0;Sf=i+708|0;Tf=i+704|0;Uf=i+700|0;Vf=i+696|0;Wf=i+692|0;Xf=i+688|0;Yf=i+684|0;Zf=i+680|0;_f=i+676|0;$f=i+672|0;ag=i+668|0;bg=i+664|0;cg=i+660|0;dg=i+656|0;eg=i+652|0;fg=i+648|0;gg=i+644|0;hg=i+640|0;ig=i+636|0;jg=i+632|0;kg=i+628|0;lg=i+624|0;mg=i+620|0;ng=i+616|0;og=i+612|0;pg=i+608|0;qg=i+604|0;rg=i+600|0;sg=i+596|0;tg=i+592|0;ug=i+588|0;vg=i+584|0;wg=i+580|0;xg=i+576|0;yg=i+572|0;zg=i+568|0;Ag=i+564|0;Bg=i+560|0;Cg=i+556|0;Dg=i+552|0;Eg=i+548|0;Fg=i+544|0;Gg=i+540|0;Hg=i+536|0;Ig=i+532|0;Jg=i+528|0;Kg=i+524|0;Lg=i+520|0;Mg=i+516|0;Ng=i+512|0;Og=i+508|0;Pg=i+504|0;Qg=i+500|0;Rg=i+496|0;Sg=i+492|0;Tg=i+488|0;Ug=i+484|0;Vg=i+480|0;Wg=i+476|0;Xg=i+472|0;Yg=i+468|0;Zg=i+464|0;_g=i+460|0;$g=i+456|0;ah=i+452|0;bh=i+448|0;ch=i+444|0;dh=i+440|0;eh=i+436|0;fh=i+432|0;gh=i+428|0;hh=i+424|0;ih=i+420|0;jh=i+416|0;kh=i+412|0;lh=i+408|0;mh=i+404|0;nh=i+400|0;oh=i+396|0;ph=i+392|0;qh=i+388|0;rh=i+384|0;sh=i+380|0;th=i+376|0;uh=i+372|0;vh=i+368|0;wh=i+364|0;xh=i+360|0;yh=i+356|0;zh=i+352|0;Ah=i+348|0;Bh=i+344|0;Ch=i+340|0;Dh=i+336|0;Eh=i+332|0;Fh=i+328|0;Gh=i+324|0;Hh=i+320|0;Ih=i+316|0;Jh=i+312|0;Kh=i+308|0;Lh=i+304|0;Mh=i+300|0;Nh=i+296|0;Oh=i+292|0;Ph=i+288|0;Qh=i+284|0;Rh=i+280|0;Sh=i+276|0;Th=i+272|0;Uh=i+268|0;Vh=i+264|0;Wh=i+260|0;Xh=i+256|0;Yh=i+252|0;Zh=i+248|0;_h=i+244|0;$h=i+240|0;ai=i+236|0;bi=i+232|0;ci=i+228|0;di=i+216|0;ei=i+212|0;fi=i+208|0;gi=i+204|0;hi=i+200|0;ii=i+196|0;ji=i+192|0;ki=i+188|0;li=i+184|0;mi=i+180|0;ni=i+176|0;oi=i+172|0;pi=i+168|0;qi=i+164|0;ri=i+160|0;si=i+148|0;ti=i+144|0;ui=i+140|0;vi=i+136|0;wi=i+132|0;xi=i+128|0;yi=i+124|0;zi=i+120|0;Ai=i+116|0;Bi=i+112|0;Ci=i+108|0;Di=i+104|0;Ei=i+100|0;Fi=i+88|0;Gi=i+84|0;Hi=i+80|0;Ii=i+76|0;Ji=i+72|0;Ki=i+68|0;Li=i+64|0;Mi=i+60|0;Ni=i+56|0;Oi=i+52|0;Pi=i+48|0;Qi=i+44|0;Ri=i+40|0;Si=i+36|0;Ti=i+32|0;Ui=i+28|0;Vi=i+24|0;Wi=i+20|0;Xi=i+16|0;Yi=i+12|0;Zi=i+8|0;_i=i+4|0;$i=i;c[Wi>>2]=a;c[Xi>>2]=b;c[Yi>>2]=e;c[Zi>>2]=f;c[_i>>2]=g;c[$i>>2]=h;h=c[Xi>>2]|0;Xi=c[Yi>>2]|0;Yi=c[Zi>>2]|0;Zi=c[_i>>2]|0;_i=c[$i>>2]|0;c[Lh>>2]=c[Wi>>2];c[Mh>>2]=h;c[Nh>>2]=Xi;c[Oh>>2]=Yi;c[Ph>>2]=Zi;c[Qh>>2]=_i;c[Rh>>2]=0;c[Sh>>2]=1;c[Th>>2]=(c[Lh>>2]|0)+48;c[Uh>>2]=c[Ph>>2];c[Vh>>2]=c[Uh>>2];c[Wh>>2]=c[Uh>>2];c[Xh>>2]=(c[Uh>>2]|0)+(c[Qh>>2]|0);c[Yh>>2]=(c[Xh>>2]|0)+-8;c[Zh>>2]=c[(c[Lh>>2]|0)+4>>2];c[_h>>2]=(c[Zh>>2]|0)+(c[(c[Lh>>2]|0)+12>>2]|0);if((c[(c[Oh>>2]|0)+20>>2]|0)>>>0<4095)aj=c[(c[Oh>>2]|0)+20>>2]|0;else aj=4095;c[$h>>2]=aj;c[ai>>2]=(c[(c[Oh>>2]|0)+16>>2]|0)==3?3:4;c[bi>>2]=c[(c[Th>>2]|0)+20>>2];c[ci>>2]=c[(c[Th>>2]|0)+16>>2];c[(c[Lh>>2]|0)+28>>2]=c[(c[Lh>>2]|0)+24>>2];lm(c[Th>>2]|0,c[Ph>>2]|0,c[Qh>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+((c[Vh>>2]|0)==(c[_h>>2]|0)&1);c[di>>2]=0;c[di+4>>2]=0;c[di+8>>2]=0;while(1){if((c[Vh>>2]|0)>>>0>=(c[Yh>>2]|0)>>>0)break;c[fi>>2]=0;c[ii>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[ji>>2]=((c[ii>>2]|0)!=0^1)&1;_h=c[Oh>>2]|0;Qh=c[Vh>>2]|0;Ph=c[Xh>>2]|0;aj=c[Sh>>2]|0;Zh=c[Nh>>2]|0;Uh=c[ji>>2]|0;_i=c[ci>>2]|0;Zi=c[ai>>2]|0;c[Bh>>2]=c[Lh>>2];c[Ch>>2]=_h;c[Dh>>2]=Qh;c[Eh>>2]=Ph;c[Fh>>2]=aj;c[Gh>>2]=Zh;c[Hh>>2]=Uh;c[Ih>>2]=_i;c[Jh>>2]=Zi;c[Kh>>2]=c[(c[Ch>>2]|0)+16>>2];a:do{if((c[Dh>>2]|0)>>>0<((c[(c[Bh>>2]|0)+4>>2]|0)+(c[(c[Bh>>2]|0)+24>>2]|0)|0)>>>0)c[Ah>>2]=0;else{Zi=c[Ch>>2]|0;_i=c[Dh>>2]|0;Uh=c[Eh>>2]|0;Zh=c[Kh>>2]|0;aj=c[Fh>>2]|0;c[rh>>2]=c[Bh>>2];c[sh>>2]=Zi;c[th>>2]=_i;c[uh>>2]=Uh;c[vh>>2]=Zh;c[wh>>2]=aj;c[xh>>2]=c[(c[rh>>2]|0)+4>>2];c[yh>>2]=(c[th>>2]|0)-(c[xh>>2]|0);c[zh>>2]=c[(c[rh>>2]|0)+24>>2];while(1){if((c[zh>>2]|0)>>>0>=(c[yh>>2]|0)>>>0)break;aj=Rj(c[rh>>2]|0,c[sh>>2]|0,(c[xh>>2]|0)+(c[zh>>2]|0)|0,c[uh>>2]|0,c[vh>>2]|0,c[wh>>2]|0)|0;c[zh>>2]=(c[zh>>2]|0)+aj;}c[(c[rh>>2]|0)+24>>2]=c[yh>>2];switch(c[Kh>>2]|0){case 3:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[wg>>2]=c[Bh>>2];c[xg>>2]=aj;c[yg>>2]=Zh;c[zg>>2]=Uh;c[Ag>>2]=_i;c[Bg>>2]=Zi;c[Cg>>2]=Ph;c[Dg>>2]=Qh;c[Eg>>2]=_h;c[Fg>>2]=3;if((c[(c[xg>>2]|0)+20>>2]|0)>>>0<4095)bj=c[(c[xg>>2]|0)+20>>2]|0;else bj=4095;c[Gg>>2]=bj;c[Hg>>2]=c[(c[wg>>2]|0)+4>>2];c[Ig>>2]=(c[yg>>2]|0)-(c[Hg>>2]|0);c[Jg>>2]=c[(c[xg>>2]|0)+8>>2];c[Kg>>2]=(c[Fg>>2]|0)==3?3:4;c[Lg>>2]=c[(c[wg>>2]|0)+36>>2];c[Mg>>2]=Sj(c[yg>>2]|0,c[Jg>>2]|0,c[Fg>>2]|0)|0;c[Ng>>2]=c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2];c[Og>>2]=c[(c[wg>>2]|0)+44>>2];c[Pg>>2]=(c[(c[xg>>2]|0)+4>>2]|0)-1;c[Qg>>2]=(1<<c[Pg>>2])-1;c[Rg>>2]=0;c[Sg>>2]=0;c[Tg>>2]=c[(c[wg>>2]|0)+8>>2];c[Ug>>2]=c[(c[wg>>2]|0)+12>>2];c[Vg>>2]=(c[Tg>>2]|0)+(c[Ug>>2]|0);c[Wg>>2]=(c[Hg>>2]|0)+(c[Ug>>2]|0);if((c[Qg>>2]|0)>>>0>=(c[Ig>>2]|0)>>>0)cj=0;else cj=(c[Ig>>2]|0)-(c[Qg>>2]|0)|0;c[Xg>>2]=cj;c[Yg>>2]=c[(c[wg>>2]|0)+16>>2];c[Zg>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2);c[_g>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2)+4;c[$g>>2]=(c[Ig>>2]|0)+8+1;c[bh>>2]=0;c[ch>>2]=1<<c[(c[xg>>2]|0)+12>>2];c[dh>>2]=(c[Eg>>2]|0)-1;c[eh>>2]=3+(c[Cg>>2]|0);c[fh>>2]=c[Cg>>2];while(1){if((c[fh>>2]|0)>>>0>=(c[eh>>2]|0)>>>0){dj=31;break;}_h=c[Bg>>2]|0;if((c[fh>>2]|0)==3)ej=(c[_h>>2]|0)-1|0;else ej=c[_h+(c[fh>>2]<<2)>>2]|0;c[gh>>2]=ej;c[hh>>2]=(c[Ig>>2]|0)-(c[gh>>2]|0);c[ih>>2]=0;if(((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Ug>>2]|0)|0)>>>0){_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0;if((_h|0)==(mm((c[yg>>2]|0)+(0-(c[gh>>2]|0))|0,c[Kg>>2]|0)|0)){_h=Tj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[yg>>2]|0)+(c[Kg>>2]|0)+(0-(c[gh>>2]|0))|0,c[zg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}else{c[jh>>2]=(c[Tg>>2]|0)+(c[hh>>2]|0);if((c[Ag>>2]|0?(((c[Ug>>2]|0)-1-(c[hh>>2]|0)|0)>>>0>=3?((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Yg>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0,(_h|0)==(mm(c[jh>>2]|0,c[Kg>>2]|0)|0)):0){_h=Uj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[jh>>2]|0)+(c[Kg>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}if((c[ih>>2]|0)>>>0>(c[dh>>2]|0)>>>0?(c[dh>>2]=c[ih>>2],c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[fh>>2]|0)-(c[Cg>>2]|0),c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ih>>2],c[bh>>2]=(c[bh>>2]|0)+1,((c[ih>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[ih>>2]|0)|0)==(c[zg>>2]|0))|0):0){dj=29;break;}c[fh>>2]=(c[fh>>2]|0)+1;}do{if((dj|0)==29){dj=0;c[vg>>2]=c[bh>>2];}else if((dj|0)==31){dj=0;if(((c[Fg>>2]|0)==3?(c[dh>>2]|0)>>>0<(c[Fg>>2]|0)>>>0:0)?(c[kh>>2]=nm(c[wg>>2]|0,c[yg>>2]|0)|0,((c[kh>>2]|0)>>>0>(c[Yg>>2]|0)>>>0?((c[Ig>>2]|0)-(c[kh>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ag>>2]|0?(c[kh>>2]|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[nh>>2]=(c[Tg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Uj(c[yg>>2]|0,c[nh>>2]|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;}else{c[mh>>2]=(c[Hg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Tj(c[yg>>2]|0,c[mh>>2]|0,c[zg>>2]|0)|0;}if((c[lh>>2]|0)>>>0>=(c[Fg>>2]|0)>>>0?(c[dh>>2]=c[lh>>2],c[c[Dg>>2]>>2]=(c[Ig>>2]|0)-(c[kh>>2]|0)+2,c[(c[Dg>>2]|0)+4>>2]=c[lh>>2],c[bh>>2]=1,((c[lh>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[lh>>2]|0)|0)==(c[zg>>2]|0))|0):0){c[(c[wg>>2]|0)+24>>2]=(c[Ig>>2]|0)+1;c[vg>>2]=1;break;}}c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2]=c[Ig>>2];while(1){_h=c[ch>>2]|0;c[ch>>2]=_h+-1;if(!_h)break;if((c[Ng>>2]|0)>>>0<=(c[Yg>>2]|0)>>>0)break;c[oh>>2]=(c[Og>>2]|0)+((c[Ng>>2]&c[Qg>>2])<<1<<2);c[ph>>2]=(c[Rg>>2]|0)>>>0<(c[Sg>>2]|0)>>>0?c[Rg>>2]|0:c[Sg>>2]|0;if(c[Ag>>2]|0?((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[qh>>2]=(c[Tg>>2]|0)+(c[Ng>>2]|0);_h=Uj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;if(((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0>=(c[Ug>>2]|0)>>>0)c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);}else{c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);_h=Tj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;}if((c[ph>>2]|0)>>>0>(c[dh>>2]|0)>>>0){if((c[ph>>2]|0)>>>0>((c[$g>>2]|0)-(c[Ng>>2]|0)|0)>>>0)c[$g>>2]=(c[Ng>>2]|0)+(c[ph>>2]|0);c[dh>>2]=c[ph>>2];c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[Ig>>2]|0)-(c[Ng>>2]|0)+2;c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ph>>2];c[bh>>2]=(c[bh>>2]|0)+1;if((c[ph>>2]|0)>>>0>4096)break;if(((c[yg>>2]|0)+(c[ph>>2]|0)|0)==(c[zg>>2]|0))break;}_h=c[Ng>>2]|0;if((d[(c[qh>>2]|0)+(c[ph>>2]|0)>>0]|0|0)<(d[(c[yg>>2]|0)+(c[ph>>2]|0)>>0]|0|0)){c[c[Zg>>2]>>2]=_h;c[Rg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=56;break;}c[Zg>>2]=(c[oh>>2]|0)+4;c[Ng>>2]=c[(c[oh>>2]|0)+4>>2];}else{c[c[_g>>2]>>2]=_h;c[Sg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=59;break;}c[_g>>2]=c[oh>>2];c[Ng>>2]=c[c[oh>>2]>>2];}}if((dj|0)==56){dj=0;c[Zg>>2]=ah;}else if((dj|0)==59){dj=0;c[_g>>2]=ah;}c[c[_g>>2]>>2]=0;c[c[Zg>>2]>>2]=0;c[(c[wg>>2]|0)+24>>2]=(c[$g>>2]|0)-8;c[vg>>2]=c[bh>>2];}}while(0);c[Ah>>2]=c[vg>>2];break a;break;}case 7:case 6:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Hd>>2]=c[Bh>>2];c[Id>>2]=_h;c[Jd>>2]=Qh;c[Kd>>2]=Ph;c[Ld>>2]=Zi;c[Md>>2]=_i;c[Nd>>2]=Uh;c[Od>>2]=Zh;c[Pd>>2]=aj;c[Qd>>2]=6;if((c[(c[Id>>2]|0)+20>>2]|0)>>>0<4095)fj=c[(c[Id>>2]|0)+20>>2]|0;else fj=4095;c[Rd>>2]=fj;c[Sd>>2]=c[(c[Hd>>2]|0)+4>>2];c[Td>>2]=(c[Jd>>2]|0)-(c[Sd>>2]|0);c[Ud>>2]=c[(c[Id>>2]|0)+8>>2];c[Vd>>2]=(c[Qd>>2]|0)==3?3:4;c[Wd>>2]=c[(c[Hd>>2]|0)+36>>2];c[Xd>>2]=Sj(c[Jd>>2]|0,c[Ud>>2]|0,c[Qd>>2]|0)|0;c[Yd>>2]=c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2];c[Zd>>2]=c[(c[Hd>>2]|0)+44>>2];c[_d>>2]=(c[(c[Id>>2]|0)+4>>2]|0)-1;c[$d>>2]=(1<<c[_d>>2])-1;c[ae>>2]=0;c[be>>2]=0;c[ce>>2]=c[(c[Hd>>2]|0)+8>>2];c[de>>2]=c[(c[Hd>>2]|0)+12>>2];c[ee>>2]=(c[ce>>2]|0)+(c[de>>2]|0);c[fe>>2]=(c[Sd>>2]|0)+(c[de>>2]|0);if((c[$d>>2]|0)>>>0>=(c[Td>>2]|0)>>>0)gj=0;else gj=(c[Td>>2]|0)-(c[$d>>2]|0)|0;c[ge>>2]=gj;c[he>>2]=c[(c[Hd>>2]|0)+16>>2];c[ie>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2);c[je>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2)+4;c[ke>>2]=(c[Td>>2]|0)+8+1;c[me>>2]=0;c[ne>>2]=1<<c[(c[Id>>2]|0)+12>>2];c[oe>>2]=(c[Pd>>2]|0)-1;c[pe>>2]=3+(c[Nd>>2]|0);c[qe>>2]=c[Nd>>2];while(1){if((c[qe>>2]|0)>>>0>=(c[pe>>2]|0)>>>0){dj=190;break;}aj=c[Md>>2]|0;if((c[qe>>2]|0)==3)hj=(c[aj>>2]|0)-1|0;else hj=c[aj+(c[qe>>2]<<2)>>2]|0;c[re>>2]=hj;c[se>>2]=(c[Td>>2]|0)-(c[re>>2]|0);c[te>>2]=0;if(((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[de>>2]|0)|0)>>>0){aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0;if((aj|0)==(mm((c[Jd>>2]|0)+(0-(c[re>>2]|0))|0,c[Vd>>2]|0)|0)){aj=Tj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[Jd>>2]|0)+(c[Vd>>2]|0)+(0-(c[re>>2]|0))|0,c[Kd>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}else{c[ue>>2]=(c[ce>>2]|0)+(c[se>>2]|0);if((c[Ld>>2]|0?(((c[de>>2]|0)-1-(c[se>>2]|0)|0)>>>0>=3?((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[he>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0,(aj|0)==(mm(c[ue>>2]|0,c[Vd>>2]|0)|0)):0){aj=Uj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[ue>>2]|0)+(c[Vd>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}if((c[te>>2]|0)>>>0>(c[oe>>2]|0)>>>0?(c[oe>>2]=c[te>>2],c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[qe>>2]|0)-(c[Nd>>2]|0),c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[te>>2],c[me>>2]=(c[me>>2]|0)+1,((c[te>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[te>>2]|0)|0)==(c[Kd>>2]|0))|0):0){dj=188;break;}c[qe>>2]=(c[qe>>2]|0)+1;}do{if((dj|0)==188){dj=0;c[Gd>>2]=c[me>>2];}else if((dj|0)==190){dj=0;if(((c[Qd>>2]|0)==3?(c[oe>>2]|0)>>>0<(c[Qd>>2]|0)>>>0:0)?(c[ve>>2]=nm(c[Hd>>2]|0,c[Jd>>2]|0)|0,((c[ve>>2]|0)>>>0>(c[he>>2]|0)>>>0?((c[Td>>2]|0)-(c[ve>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ld>>2]|0?(c[ve>>2]|0)>>>0<(c[de>>2]|0)>>>0:0){c[ye>>2]=(c[ce>>2]|0)+(c[ve>>2]|0);c[we>>2]=Uj(c[Jd>>2]|0,c[ye>>2]|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;}else{c[xe>>2]=(c[Sd>>2]|0)+(c[ve>>2]|0);c[we>>2]=Tj(c[Jd>>2]|0,c[xe>>2]|0,c[Kd>>2]|0)|0;}if((c[we>>2]|0)>>>0>=(c[Qd>>2]|0)>>>0?(c[oe>>2]=c[we>>2],c[c[Od>>2]>>2]=(c[Td>>2]|0)-(c[ve>>2]|0)+2,c[(c[Od>>2]|0)+4>>2]=c[we>>2],c[me>>2]=1,((c[we>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[we>>2]|0)|0)==(c[Kd>>2]|0))|0):0){c[(c[Hd>>2]|0)+24>>2]=(c[Td>>2]|0)+1;c[Gd>>2]=1;break;}}c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2]=c[Td>>2];while(1){aj=c[ne>>2]|0;c[ne>>2]=aj+-1;if(!aj)break;if((c[Yd>>2]|0)>>>0<=(c[he>>2]|0)>>>0)break;c[ze>>2]=(c[Zd>>2]|0)+((c[Yd>>2]&c[$d>>2])<<1<<2);c[Ae>>2]=(c[ae>>2]|0)>>>0<(c[be>>2]|0)>>>0?c[ae>>2]|0:c[be>>2]|0;if(c[Ld>>2]|0?((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0<(c[de>>2]|0)>>>0:0){c[Be>>2]=(c[ce>>2]|0)+(c[Yd>>2]|0);aj=Uj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;if(((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0>=(c[de>>2]|0)>>>0)c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);}else{c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);aj=Tj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;}if((c[Ae>>2]|0)>>>0>(c[oe>>2]|0)>>>0){if((c[Ae>>2]|0)>>>0>((c[ke>>2]|0)-(c[Yd>>2]|0)|0)>>>0)c[ke>>2]=(c[Yd>>2]|0)+(c[Ae>>2]|0);c[oe>>2]=c[Ae>>2];c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[Td>>2]|0)-(c[Yd>>2]|0)+2;c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[Ae>>2];c[me>>2]=(c[me>>2]|0)+1;if((c[Ae>>2]|0)>>>0>4096)break;if(((c[Jd>>2]|0)+(c[Ae>>2]|0)|0)==(c[Kd>>2]|0))break;}aj=c[Yd>>2]|0;if((d[(c[Be>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)<(d[(c[Jd>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)){c[c[ie>>2]>>2]=aj;c[ae>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=215;break;}c[ie>>2]=(c[ze>>2]|0)+4;c[Yd>>2]=c[(c[ze>>2]|0)+4>>2];}else{c[c[je>>2]>>2]=aj;c[be>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=218;break;}c[je>>2]=c[ze>>2];c[Yd>>2]=c[c[ze>>2]>>2];}}if((dj|0)==215){dj=0;c[ie>>2]=le;}else if((dj|0)==218){dj=0;c[je>>2]=le;}c[c[je>>2]>>2]=0;c[c[ie>>2]>>2]=0;c[(c[Hd>>2]|0)+24>>2]=(c[ke>>2]|0)-8;c[Gd>>2]=c[me>>2];}}while(0);c[Ah>>2]=c[Gd>>2];break a;break;}case 5:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[De>>2]=c[Bh>>2];c[Ee>>2]=aj;c[Fe>>2]=Zh;c[Ge>>2]=Uh;c[He>>2]=_i;c[Ie>>2]=Zi;c[Je>>2]=Ph;c[Ke>>2]=Qh;c[Le>>2]=_h;c[Me>>2]=5;if((c[(c[Ee>>2]|0)+20>>2]|0)>>>0<4095)ij=c[(c[Ee>>2]|0)+20>>2]|0;else ij=4095;c[Ne>>2]=ij;c[Oe>>2]=c[(c[De>>2]|0)+4>>2];c[Pe>>2]=(c[Fe>>2]|0)-(c[Oe>>2]|0);c[Qe>>2]=c[(c[Ee>>2]|0)+8>>2];c[Re>>2]=(c[Me>>2]|0)==3?3:4;c[Se>>2]=c[(c[De>>2]|0)+36>>2];c[Te>>2]=Sj(c[Fe>>2]|0,c[Qe>>2]|0,c[Me>>2]|0)|0;c[Ue>>2]=c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2];c[Ve>>2]=c[(c[De>>2]|0)+44>>2];c[We>>2]=(c[(c[Ee>>2]|0)+4>>2]|0)-1;c[Xe>>2]=(1<<c[We>>2])-1;c[Ye>>2]=0;c[Ze>>2]=0;c[_e>>2]=c[(c[De>>2]|0)+8>>2];c[$e>>2]=c[(c[De>>2]|0)+12>>2];c[af>>2]=(c[_e>>2]|0)+(c[$e>>2]|0);c[bf>>2]=(c[Oe>>2]|0)+(c[$e>>2]|0);if((c[Xe>>2]|0)>>>0>=(c[Pe>>2]|0)>>>0)jj=0;else jj=(c[Pe>>2]|0)-(c[Xe>>2]|0)|0;c[cf>>2]=jj;c[df>>2]=c[(c[De>>2]|0)+16>>2];c[ef>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2);c[ff>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2)+4;c[gf>>2]=(c[Pe>>2]|0)+8+1;c[jf>>2]=0;c[kf>>2]=1<<c[(c[Ee>>2]|0)+12>>2];c[lf>>2]=(c[Le>>2]|0)-1;c[mf>>2]=3+(c[Je>>2]|0);c[nf>>2]=c[Je>>2];while(1){if((c[nf>>2]|0)>>>0>=(c[mf>>2]|0)>>>0){dj=137;break;}_h=c[Ie>>2]|0;if((c[nf>>2]|0)==3)kj=(c[_h>>2]|0)-1|0;else kj=c[_h+(c[nf>>2]<<2)>>2]|0;c[of>>2]=kj;c[pf>>2]=(c[Pe>>2]|0)-(c[of>>2]|0);c[qf>>2]=0;if(((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[$e>>2]|0)|0)>>>0){_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0;if((_h|0)==(mm((c[Fe>>2]|0)+(0-(c[of>>2]|0))|0,c[Re>>2]|0)|0)){_h=Tj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[Fe>>2]|0)+(c[Re>>2]|0)+(0-(c[of>>2]|0))|0,c[Ge>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}else{c[rf>>2]=(c[_e>>2]|0)+(c[pf>>2]|0);if((c[He>>2]|0?(((c[$e>>2]|0)-1-(c[pf>>2]|0)|0)>>>0>=3?((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[df>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0,(_h|0)==(mm(c[rf>>2]|0,c[Re>>2]|0)|0)):0){_h=Uj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[rf>>2]|0)+(c[Re>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}if((c[qf>>2]|0)>>>0>(c[lf>>2]|0)>>>0?(c[lf>>2]=c[qf>>2],c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[nf>>2]|0)-(c[Je>>2]|0),c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[qf>>2],c[jf>>2]=(c[jf>>2]|0)+1,((c[qf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[qf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){dj=135;break;}c[nf>>2]=(c[nf>>2]|0)+1;}do{if((dj|0)==135){dj=0;c[Ce>>2]=c[jf>>2];}else if((dj|0)==137){dj=0;if(((c[Me>>2]|0)==3?(c[lf>>2]|0)>>>0<(c[Me>>2]|0)>>>0:0)?(c[sf>>2]=nm(c[De>>2]|0,c[Fe>>2]|0)|0,((c[sf>>2]|0)>>>0>(c[df>>2]|0)>>>0?((c[Pe>>2]|0)-(c[sf>>2]|0)|0)>>>0<262144:0)|0):0){if(c[He>>2]|0?(c[sf>>2]|0)>>>0<(c[$e>>2]|0)>>>0:0){c[vf>>2]=(c[_e>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Uj(c[Fe>>2]|0,c[vf>>2]|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;}else{c[uf>>2]=(c[Oe>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Tj(c[Fe>>2]|0,c[uf>>2]|0,c[Ge>>2]|0)|0;}if((c[tf>>2]|0)>>>0>=(c[Me>>2]|0)>>>0?(c[lf>>2]=c[tf>>2],c[c[Ke>>2]>>2]=(c[Pe>>2]|0)-(c[sf>>2]|0)+2,c[(c[Ke>>2]|0)+4>>2]=c[tf>>2],c[jf>>2]=1,((c[tf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[tf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){c[(c[De>>2]|0)+24>>2]=(c[Pe>>2]|0)+1;c[Ce>>2]=1;break;}}c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2]=c[Pe>>2];while(1){_h=c[kf>>2]|0;c[kf>>2]=_h+-1;if(!_h)break;if((c[Ue>>2]|0)>>>0<=(c[df>>2]|0)>>>0)break;c[wf>>2]=(c[Ve>>2]|0)+((c[Ue>>2]&c[Xe>>2])<<1<<2);c[xf>>2]=(c[Ye>>2]|0)>>>0<(c[Ze>>2]|0)>>>0?c[Ye>>2]|0:c[Ze>>2]|0;if(c[He>>2]|0?((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0<(c[$e>>2]|0)>>>0:0){c[yf>>2]=(c[_e>>2]|0)+(c[Ue>>2]|0);_h=Uj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;if(((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0>=(c[$e>>2]|0)>>>0)c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);}else{c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);_h=Tj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;}if((c[xf>>2]|0)>>>0>(c[lf>>2]|0)>>>0){if((c[xf>>2]|0)>>>0>((c[gf>>2]|0)-(c[Ue>>2]|0)|0)>>>0)c[gf>>2]=(c[Ue>>2]|0)+(c[xf>>2]|0);c[lf>>2]=c[xf>>2];c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[Pe>>2]|0)-(c[Ue>>2]|0)+2;c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[xf>>2];c[jf>>2]=(c[jf>>2]|0)+1;if((c[xf>>2]|0)>>>0>4096)break;if(((c[Fe>>2]|0)+(c[xf>>2]|0)|0)==(c[Ge>>2]|0))break;}_h=c[Ue>>2]|0;if((d[(c[yf>>2]|0)+(c[xf>>2]|0)>>0]|0|0)<(d[(c[Fe>>2]|0)+(c[xf>>2]|0)>>0]|0|0)){c[c[ef>>2]>>2]=_h;c[Ye>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=162;break;}c[ef>>2]=(c[wf>>2]|0)+4;c[Ue>>2]=c[(c[wf>>2]|0)+4>>2];}else{c[c[ff>>2]>>2]=_h;c[Ze>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=165;break;}c[ff>>2]=c[wf>>2];c[Ue>>2]=c[c[wf>>2]>>2];}}if((dj|0)==162){dj=0;c[ef>>2]=hf;}else if((dj|0)==165){dj=0;c[ff>>2]=hf;}c[c[ff>>2]>>2]=0;c[c[ef>>2]>>2]=0;c[(c[De>>2]|0)+24>>2]=(c[gf>>2]|0)-8;c[Ce>>2]=c[jf>>2];}}while(0);c[Ah>>2]=c[Ce>>2];break a;break;}default:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Af>>2]=c[Bh>>2];c[Bf>>2]=_h;c[Cf>>2]=Qh;c[Df>>2]=Ph;c[Ef>>2]=Zi;c[Ff>>2]=_i;c[Gf>>2]=Uh;c[Hf>>2]=Zh;c[If>>2]=aj;c[Jf>>2]=4;if((c[(c[Bf>>2]|0)+20>>2]|0)>>>0<4095)lj=c[(c[Bf>>2]|0)+20>>2]|0;else lj=4095;c[Kf>>2]=lj;c[Lf>>2]=c[(c[Af>>2]|0)+4>>2];c[Mf>>2]=(c[Cf>>2]|0)-(c[Lf>>2]|0);c[Nf>>2]=c[(c[Bf>>2]|0)+8>>2];c[Of>>2]=(c[Jf>>2]|0)==3?3:4;c[Pf>>2]=c[(c[Af>>2]|0)+36>>2];c[Qf>>2]=Sj(c[Cf>>2]|0,c[Nf>>2]|0,c[Jf>>2]|0)|0;c[Rf>>2]=c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2];c[Sf>>2]=c[(c[Af>>2]|0)+44>>2];c[Tf>>2]=(c[(c[Bf>>2]|0)+4>>2]|0)-1;c[Uf>>2]=(1<<c[Tf>>2])-1;c[Vf>>2]=0;c[Wf>>2]=0;c[Xf>>2]=c[(c[Af>>2]|0)+8>>2];c[Yf>>2]=c[(c[Af>>2]|0)+12>>2];c[Zf>>2]=(c[Xf>>2]|0)+(c[Yf>>2]|0);c[_f>>2]=(c[Lf>>2]|0)+(c[Yf>>2]|0);if((c[Uf>>2]|0)>>>0>=(c[Mf>>2]|0)>>>0)mj=0;else mj=(c[Mf>>2]|0)-(c[Uf>>2]|0)|0;c[$f>>2]=mj;c[ag>>2]=c[(c[Af>>2]|0)+16>>2];c[bg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2);c[cg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2)+4;c[dg>>2]=(c[Mf>>2]|0)+8+1;c[fg>>2]=0;c[gg>>2]=1<<c[(c[Bf>>2]|0)+12>>2];c[hg>>2]=(c[If>>2]|0)-1;c[ig>>2]=3+(c[Gf>>2]|0);c[jg>>2]=c[Gf>>2];while(1){if((c[jg>>2]|0)>>>0>=(c[ig>>2]|0)>>>0){dj=84;break;}aj=c[Ff>>2]|0;if((c[jg>>2]|0)==3)nj=(c[aj>>2]|0)-1|0;else nj=c[aj+(c[jg>>2]<<2)>>2]|0;c[kg>>2]=nj;c[lg>>2]=(c[Mf>>2]|0)-(c[kg>>2]|0);c[mg>>2]=0;if(((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[Yf>>2]|0)|0)>>>0){aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0;if((aj|0)==(mm((c[Cf>>2]|0)+(0-(c[kg>>2]|0))|0,c[Of>>2]|0)|0)){aj=Tj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[Cf>>2]|0)+(c[Of>>2]|0)+(0-(c[kg>>2]|0))|0,c[Df>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}else{c[ng>>2]=(c[Xf>>2]|0)+(c[lg>>2]|0);if((c[Ef>>2]|0?(((c[Yf>>2]|0)-1-(c[lg>>2]|0)|0)>>>0>=3?((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[ag>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0,(aj|0)==(mm(c[ng>>2]|0,c[Of>>2]|0)|0)):0){aj=Uj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[ng>>2]|0)+(c[Of>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}if((c[mg>>2]|0)>>>0>(c[hg>>2]|0)>>>0?(c[hg>>2]=c[mg>>2],c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[jg>>2]|0)-(c[Gf>>2]|0),c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[mg>>2],c[fg>>2]=(c[fg>>2]|0)+1,((c[mg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[mg>>2]|0)|0)==(c[Df>>2]|0))|0):0){dj=82;break;}c[jg>>2]=(c[jg>>2]|0)+1;}do{if((dj|0)==82){dj=0;c[zf>>2]=c[fg>>2];}else if((dj|0)==84){dj=0;if(((c[Jf>>2]|0)==3?(c[hg>>2]|0)>>>0<(c[Jf>>2]|0)>>>0:0)?(c[og>>2]=nm(c[Af>>2]|0,c[Cf>>2]|0)|0,((c[og>>2]|0)>>>0>(c[ag>>2]|0)>>>0?((c[Mf>>2]|0)-(c[og>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ef>>2]|0?(c[og>>2]|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[rg>>2]=(c[Xf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Uj(c[Cf>>2]|0,c[rg>>2]|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;}else{c[qg>>2]=(c[Lf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Tj(c[Cf>>2]|0,c[qg>>2]|0,c[Df>>2]|0)|0;}if((c[pg>>2]|0)>>>0>=(c[Jf>>2]|0)>>>0?(c[hg>>2]=c[pg>>2],c[c[Hf>>2]>>2]=(c[Mf>>2]|0)-(c[og>>2]|0)+2,c[(c[Hf>>2]|0)+4>>2]=c[pg>>2],c[fg>>2]=1,((c[pg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[pg>>2]|0)|0)==(c[Df>>2]|0))|0):0){c[(c[Af>>2]|0)+24>>2]=(c[Mf>>2]|0)+1;c[zf>>2]=1;break;}}c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2]=c[Mf>>2];while(1){aj=c[gg>>2]|0;c[gg>>2]=aj+-1;if(!aj)break;if((c[Rf>>2]|0)>>>0<=(c[ag>>2]|0)>>>0)break;c[sg>>2]=(c[Sf>>2]|0)+((c[Rf>>2]&c[Uf>>2])<<1<<2);c[tg>>2]=(c[Vf>>2]|0)>>>0<(c[Wf>>2]|0)>>>0?c[Vf>>2]|0:c[Wf>>2]|0;if(c[Ef>>2]|0?((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[ug>>2]=(c[Xf>>2]|0)+(c[Rf>>2]|0);aj=Uj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;if(((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0>=(c[Yf>>2]|0)>>>0)c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);}else{c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);aj=Tj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;}if((c[tg>>2]|0)>>>0>(c[hg>>2]|0)>>>0){if((c[tg>>2]|0)>>>0>((c[dg>>2]|0)-(c[Rf>>2]|0)|0)>>>0)c[dg>>2]=(c[Rf>>2]|0)+(c[tg>>2]|0);c[hg>>2]=c[tg>>2];c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[Mf>>2]|0)-(c[Rf>>2]|0)+2;c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[tg>>2];c[fg>>2]=(c[fg>>2]|0)+1;if((c[tg>>2]|0)>>>0>4096)break;if(((c[Cf>>2]|0)+(c[tg>>2]|0)|0)==(c[Df>>2]|0))break;}aj=c[Rf>>2]|0;if((d[(c[ug>>2]|0)+(c[tg>>2]|0)>>0]|0|0)<(d[(c[Cf>>2]|0)+(c[tg>>2]|0)>>0]|0|0)){c[c[bg>>2]>>2]=aj;c[Vf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=109;break;}c[bg>>2]=(c[sg>>2]|0)+4;c[Rf>>2]=c[(c[sg>>2]|0)+4>>2];}else{c[c[cg>>2]>>2]=aj;c[Wf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=112;break;}c[cg>>2]=c[sg>>2];c[Rf>>2]=c[c[sg>>2]>>2];}}if((dj|0)==109){dj=0;c[bg>>2]=eg;}else if((dj|0)==112){dj=0;c[cg>>2]=eg;}c[c[cg>>2]>>2]=0;c[c[bg>>2]>>2]=0;c[(c[Af>>2]|0)+24>>2]=(c[dg>>2]|0)-8;c[zf>>2]=c[fg>>2];}}while(0);c[Ah>>2]=c[zf>>2];break a;}}}}while(0);c[ki>>2]=c[Ah>>2];if(!(c[ki>>2]|0)){c[Vh>>2]=(c[Vh>>2]|0)+1;continue;}c[li>>2]=0;while(1){if((c[li>>2]|0)>>>0>=3)break;c[(c[bi>>2]|0)+16+(c[li>>2]<<2)>>2]=c[(c[Nh>>2]|0)+(c[li>>2]<<2)>>2];c[li>>2]=(c[li>>2]|0)+1;}c[(c[bi>>2]|0)+8>>2]=1;c[(c[bi>>2]|0)+12>>2]=c[ii>>2];c[mi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)+4>>2];do{if((c[mi>>2]|0)>>>0<=(c[$h>>2]|0)>>>0){c[ni>>2]=om(di,c[Wh>>2]|0,c[ii>>2]|0,c[Th>>2]|0)|0;c[oi>>2]=0;while(1){if((c[oi>>2]|0)>>>0>=(c[ai>>2]|0)>>>0)break;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=1073741824;c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=0;while(1){if((c[pi>>2]|0)>>>0>=(c[ki>>2]|0)>>>0)break;c[qi>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)>>2];c[ri>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)+4>>2];pm(si,c[Nh>>2]|0,c[qi>>2]|0,c[ji>>2]|0);while(1){if((c[oi>>2]|0)>>>0>(c[ri>>2]|0)>>>0)break;aj=c[ni>>2]|0;Zh=c[oi>>2]|0;Uh=c[Th>>2]|0;_i=c[Rh>>2]|0;c[yd>>2]=c[qi>>2];c[zd>>2]=Zh;c[Ad>>2]=Uh;c[Bd>>2]=_i;c[Dd>>2]=qm((c[yd>>2]|0)+1|0)|0;c[Ed>>2]=(c[zd>>2]|0)-3;if(c[(c[Ad>>2]|0)+56>>2]|0){_i=(qm((c[Ed>>2]|0)+1|0)|0)+16|0;c[xd>>2]=_i+(c[Dd>>2]|0);}else{_i=(c[Dd>>2]|0)+(c[(c[Ad>>2]|0)+52>>2]|0)|0;c[Cd>>2]=_i-(qm((c[(c[(c[Ad>>2]|0)+12>>2]|0)+(c[Dd>>2]<<2)>>2]|0)+1|0)|0);if((c[Bd>>2]|0)<2&(c[Dd>>2]|0)>>>0>=20)c[Cd>>2]=(c[Cd>>2]|0)+((c[Dd>>2]|0)-19<<1);c[Fd>>2]=rm(c[Ed>>2]|0)|0;_i=(c[5840+(c[Fd>>2]<<2)>>2]|0)+(c[(c[Ad>>2]|0)+48>>2]|0)|0;Uh=_i-(qm((c[(c[(c[Ad>>2]|0)+8>>2]|0)+(c[Fd>>2]<<2)>>2]|0)+1|0)|0)|0;c[Cd>>2]=(c[Cd>>2]|0)+Uh;c[xd>>2]=c[Cd>>2];}c[ti>>2]=aj+(c[xd>>2]|0);c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=c[oi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+4>>2]=c[qi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+12>>2]=c[ii>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=c[ti>>2];aj=(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+16|0;c[aj>>2]=c[si>>2];c[aj+4>>2]=c[si+4>>2];c[aj+8>>2]=c[si+8>>2];c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=(c[pi>>2]|0)+1;}c[fi>>2]=(c[oi>>2]|0)-1;c[ei>>2]=1;b:while(1){if((c[ei>>2]|0)>>>0>(c[fi>>2]|0)>>>0){dj=504;break;}c[ui>>2]=(c[Vh>>2]|0)+(c[ei>>2]|0);if((c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+8>>2]|0)==1)oj=(c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+12>>2]|0)+1|0;else oj=1;c[vi>>2]=oj;if((c[ei>>2]|0)>>>0>(c[vi>>2]|0)>>>0){aj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[vi>>2]|0)|0)*28|0)>>2]|0;c[wi>>2]=aj+(sm((c[ui>>2]|0)+(0-(c[vi>>2]|0))|0,c[vi>>2]|0,c[Th>>2]|0)|0);}else c[wi>>2]=tm(di,c[Wh>>2]|0,c[vi>>2]|0,c[Th>>2]|0)|0;if((c[wi>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0)){c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+4>>2]=0;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]=c[vi>>2];c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]=c[wi>>2];aj=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Uh=(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+16|0;c[aj>>2]=c[Uh>>2];c[aj+4>>2]=c[Uh+4>>2];c[aj+8>>2]=c[Uh+8>>2];}c:do{if((c[ui>>2]|0)>>>0<=(c[Yh>>2]|0)>>>0){if((c[ei>>2]|0)==(c[fi>>2]|0)){dj=504;break b;}if((c[Rh>>2]|0)==0?(c[(c[bi>>2]|0)+(((c[ei>>2]|0)+1|0)*28|0)>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0):0)break;c[xi>>2]=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)!=1&1;if((c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)==1)pj=c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]|0;else pj=0;c[yi>>2]=pj;if((c[ei>>2]|0)>>>0>(c[yi>>2]|0)>>>0)qj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[yi>>2]|0)|0)*28|0)>>2]|0;else qj=0;c[zi>>2]=qj;Uh=c[zi>>2]|0;c[Ai>>2]=Uh+(um((c[ui>>2]|0)+(0-(c[yi>>2]|0))|0,c[yi>>2]|0,c[Th>>2]|0)|0);Uh=c[Oh>>2]|0;aj=c[ui>>2]|0;_i=c[Xh>>2]|0;Zh=c[Sh>>2]|0;Zi=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Ph=c[xi>>2]|0;Qh=c[ci>>2]|0;_h=c[ai>>2]|0;c[nd>>2]=c[Lh>>2];c[od>>2]=Uh;c[pd>>2]=aj;c[qd>>2]=_i;c[rd>>2]=Zh;c[sd>>2]=Zi;c[td>>2]=Ph;c[ud>>2]=Qh;c[vd>>2]=_h;c[wd>>2]=c[(c[od>>2]|0)+16>>2];d:do{if((c[pd>>2]|0)>>>0<((c[(c[nd>>2]|0)+4>>2]|0)+(c[(c[nd>>2]|0)+24>>2]|0)|0)>>>0)c[md>>2]=0;else{_h=c[od>>2]|0;Qh=c[pd>>2]|0;Ph=c[qd>>2]|0;Zi=c[wd>>2]|0;Zh=c[rd>>2]|0;c[dd>>2]=c[nd>>2];c[ed>>2]=_h;c[fd>>2]=Qh;c[gd>>2]=Ph;c[hd>>2]=Zi;c[id>>2]=Zh;c[jd>>2]=c[(c[dd>>2]|0)+4>>2];c[kd>>2]=(c[fd>>2]|0)-(c[jd>>2]|0);c[ld>>2]=c[(c[dd>>2]|0)+24>>2];while(1){if((c[ld>>2]|0)>>>0>=(c[kd>>2]|0)>>>0)break;Zh=Rj(c[dd>>2]|0,c[ed>>2]|0,(c[jd>>2]|0)+(c[ld>>2]|0)|0,c[gd>>2]|0,c[hd>>2]|0,c[id>>2]|0)|0;c[ld>>2]=(c[ld>>2]|0)+Zh;}c[(c[dd>>2]|0)+24>>2]=c[kd>>2];switch(c[wd>>2]|0){case 3:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[ic>>2]=c[nd>>2];c[jc>>2]=Zh;c[kc>>2]=Zi;c[lc>>2]=Ph;c[mc>>2]=Qh;c[nc>>2]=_h;c[oc>>2]=_i;c[pc>>2]=aj;c[qc>>2]=Uh;c[rc>>2]=3;if((c[(c[jc>>2]|0)+20>>2]|0)>>>0<4095)rj=c[(c[jc>>2]|0)+20>>2]|0;else rj=4095;c[sc>>2]=rj;c[tc>>2]=c[(c[ic>>2]|0)+4>>2];c[uc>>2]=(c[kc>>2]|0)-(c[tc>>2]|0);c[vc>>2]=c[(c[jc>>2]|0)+8>>2];c[wc>>2]=(c[rc>>2]|0)==3?3:4;c[xc>>2]=c[(c[ic>>2]|0)+36>>2];c[yc>>2]=Sj(c[kc>>2]|0,c[vc>>2]|0,c[rc>>2]|0)|0;c[zc>>2]=c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2];c[Ac>>2]=c[(c[ic>>2]|0)+44>>2];c[Bc>>2]=(c[(c[jc>>2]|0)+4>>2]|0)-1;c[Cc>>2]=(1<<c[Bc>>2])-1;c[Dc>>2]=0;c[Ec>>2]=0;c[Fc>>2]=c[(c[ic>>2]|0)+8>>2];c[Gc>>2]=c[(c[ic>>2]|0)+12>>2];c[Hc>>2]=(c[Fc>>2]|0)+(c[Gc>>2]|0);c[Ic>>2]=(c[tc>>2]|0)+(c[Gc>>2]|0);if((c[Cc>>2]|0)>>>0>=(c[uc>>2]|0)>>>0)sj=0;else sj=(c[uc>>2]|0)-(c[Cc>>2]|0)|0;c[Jc>>2]=sj;c[Kc>>2]=c[(c[ic>>2]|0)+16>>2];c[Lc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2);c[Mc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2)+4;c[Nc>>2]=(c[uc>>2]|0)+8+1;c[Pc>>2]=0;c[Qc>>2]=1<<c[(c[jc>>2]|0)+12>>2];c[Rc>>2]=(c[qc>>2]|0)-1;c[Sc>>2]=3+(c[oc>>2]|0);c[Tc>>2]=c[oc>>2];while(1){if((c[Tc>>2]|0)>>>0>=(c[Sc>>2]|0)>>>0){dj=287;break;}Uh=c[nc>>2]|0;if((c[Tc>>2]|0)==3)tj=(c[Uh>>2]|0)-1|0;else tj=c[Uh+(c[Tc>>2]<<2)>>2]|0;c[Uc>>2]=tj;c[Vc>>2]=(c[uc>>2]|0)-(c[Uc>>2]|0);c[Wc>>2]=0;do{if(((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Gc>>2]|0)|0)>>>0){Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm((c[kc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[wc>>2]|0)|0))break;Uh=Tj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[kc>>2]|0)+(c[wc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[lc>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}else{c[Xc>>2]=(c[Fc>>2]|0)+(c[Vc>>2]|0);if(!(c[mc>>2]|0))break;if(!((((c[Gc>>2]|0)-1-(c[Vc>>2]|0)|0)>>>0>=3?((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Kc>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm(c[Xc>>2]|0,c[wc>>2]|0)|0))break;Uh=Uj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[Xc>>2]|0)+(c[wc>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}}while(0);if((c[Wc>>2]|0)>>>0>(c[Rc>>2]|0)>>>0?(c[Rc>>2]=c[Wc>>2],c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[Tc>>2]|0)-(c[oc>>2]|0),c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[Wc>>2],c[Pc>>2]=(c[Pc>>2]|0)+1,((c[Wc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Wc>>2]|0)|0)==(c[lc>>2]|0))|0):0){dj=285;break;}c[Tc>>2]=(c[Tc>>2]|0)+1;}e:do{if((dj|0)==285){dj=0;c[hc>>2]=c[Pc>>2];}else if((dj|0)==287){dj=0;do{if((c[rc>>2]|0)==3){if((c[Rc>>2]|0)>>>0>=(c[rc>>2]|0)>>>0)break;c[Yc>>2]=nm(c[ic>>2]|0,c[kc>>2]|0)|0;if(!(((c[Yc>>2]|0)>>>0>(c[Kc>>2]|0)>>>0?((c[uc>>2]|0)-(c[Yc>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[mc>>2]|0){if((c[Yc>>2]|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=292;break;}c[$c>>2]=(c[Fc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Uj(c[kc>>2]|0,c[$c>>2]|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;}else dj=292;}while(0);if((dj|0)==292){dj=0;c[_c>>2]=(c[tc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Tj(c[kc>>2]|0,c[_c>>2]|0,c[lc>>2]|0)|0;}if((c[Zc>>2]|0)>>>0<(c[rc>>2]|0)>>>0)break;c[Rc>>2]=c[Zc>>2];c[c[pc>>2]>>2]=(c[uc>>2]|0)-(c[Yc>>2]|0)+2;c[(c[pc>>2]|0)+4>>2]=c[Zc>>2];c[Pc>>2]=1;if(!(((c[Zc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Zc>>2]|0)|0)==(c[lc>>2]|0))|0))break;c[(c[ic>>2]|0)+24>>2]=(c[uc>>2]|0)+1;c[hc>>2]=1;break e;}}while(0);c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2]=c[uc>>2];while(1){Uh=c[Qc>>2]|0;c[Qc>>2]=Uh+-1;if(!Uh)break;if((c[zc>>2]|0)>>>0<=(c[Kc>>2]|0)>>>0)break;c[ad>>2]=(c[Ac>>2]|0)+((c[zc>>2]&c[Cc>>2])<<1<<2);c[bd>>2]=(c[Dc>>2]|0)>>>0<(c[Ec>>2]|0)>>>0?c[Dc>>2]|0:c[Ec>>2]|0;do{if(c[mc>>2]|0){if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=302;break;}c[cd>>2]=(c[Fc>>2]|0)+(c[zc>>2]|0);Uh=Uj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0<(c[Gc>>2]|0)>>>0)break;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);}else dj=302;}while(0);if((dj|0)==302){dj=0;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);Uh=Tj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;}if((c[bd>>2]|0)>>>0>(c[Rc>>2]|0)>>>0){if((c[bd>>2]|0)>>>0>((c[Nc>>2]|0)-(c[zc>>2]|0)|0)>>>0)c[Nc>>2]=(c[zc>>2]|0)+(c[bd>>2]|0);c[Rc>>2]=c[bd>>2];c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[uc>>2]|0)-(c[zc>>2]|0)+2;c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[bd>>2];c[Pc>>2]=(c[Pc>>2]|0)+1;if((c[bd>>2]|0)>>>0>4096)break;if(((c[kc>>2]|0)+(c[bd>>2]|0)|0)==(c[lc>>2]|0))break;}Uh=c[zc>>2]|0;if((d[(c[cd>>2]|0)+(c[bd>>2]|0)>>0]|0|0)<(d[(c[kc>>2]|0)+(c[bd>>2]|0)>>0]|0|0)){c[c[Lc>>2]>>2]=Uh;c[Dc>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=312;break;}c[Lc>>2]=(c[ad>>2]|0)+4;c[zc>>2]=c[(c[ad>>2]|0)+4>>2];}else{c[c[Mc>>2]>>2]=Uh;c[Ec>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=315;break;}c[Mc>>2]=c[ad>>2];c[zc>>2]=c[c[ad>>2]>>2];}}if((dj|0)==312){dj=0;c[Lc>>2]=Oc;}else if((dj|0)==315){dj=0;c[Mc>>2]=Oc;}c[c[Mc>>2]>>2]=0;c[c[Lc>>2]>>2]=0;c[(c[ic>>2]|0)+24>>2]=(c[Nc>>2]|0)-8;c[hc>>2]=c[Pc>>2];}}while(0);c[md>>2]=c[hc>>2];break d;break;}case 7:case 6:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[u>>2]=c[nd>>2];c[v>>2]=Uh;c[w>>2]=aj;c[x>>2]=_i;c[y>>2]=_h;c[z>>2]=Qh;c[A>>2]=Ph;c[B>>2]=Zi;c[C>>2]=Zh;c[D>>2]=6;if((c[(c[v>>2]|0)+20>>2]|0)>>>0<4095)uj=c[(c[v>>2]|0)+20>>2]|0;else uj=4095;c[E>>2]=uj;c[F>>2]=c[(c[u>>2]|0)+4>>2];c[G>>2]=(c[w>>2]|0)-(c[F>>2]|0);c[H>>2]=c[(c[v>>2]|0)+8>>2];c[I>>2]=(c[D>>2]|0)==3?3:4;c[J>>2]=c[(c[u>>2]|0)+36>>2];c[K>>2]=Sj(c[w>>2]|0,c[H>>2]|0,c[D>>2]|0)|0;c[L>>2]=c[(c[J>>2]|0)+(c[K>>2]<<2)>>2];c[M>>2]=c[(c[u>>2]|0)+44>>2];c[N>>2]=(c[(c[v>>2]|0)+4>>2]|0)-1;c[O>>2]=(1<<c[N>>2])-1;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=c[(c[u>>2]|0)+8>>2];c[S>>2]=c[(c[u>>2]|0)+12>>2];c[T>>2]=(c[R>>2]|0)+(c[S>>2]|0);c[U>>2]=(c[F>>2]|0)+(c[S>>2]|0);if((c[O>>2]|0)>>>0>=(c[G>>2]|0)>>>0)vj=0;else vj=(c[G>>2]|0)-(c[O>>2]|0)|0;c[V>>2]=vj;c[W>>2]=c[(c[u>>2]|0)+16>>2];c[X>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2);c[Y>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2)+4;c[Z>>2]=(c[G>>2]|0)+8+1;c[$>>2]=0;c[aa>>2]=1<<c[(c[v>>2]|0)+12>>2];c[ba>>2]=(c[C>>2]|0)-1;c[ca>>2]=3+(c[A>>2]|0);c[da>>2]=c[A>>2];while(1){if((c[da>>2]|0)>>>0>=(c[ca>>2]|0)>>>0){dj=446;break;}Zh=c[z>>2]|0;if((c[da>>2]|0)==3)wj=(c[Zh>>2]|0)-1|0;else wj=c[Zh+(c[da>>2]<<2)>>2]|0;c[ea>>2]=wj;c[fa>>2]=(c[G>>2]|0)-(c[ea>>2]|0);c[ga>>2]=0;do{if(((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[S>>2]|0)|0)>>>0){Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm((c[w>>2]|0)+(0-(c[ea>>2]|0))|0,c[I>>2]|0)|0))break;Zh=Tj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[w>>2]|0)+(c[I>>2]|0)+(0-(c[ea>>2]|0))|0,c[x>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}else{c[ha>>2]=(c[R>>2]|0)+(c[fa>>2]|0);if(!(c[y>>2]|0))break;if(!((((c[S>>2]|0)-1-(c[fa>>2]|0)|0)>>>0>=3?((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[W>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm(c[ha>>2]|0,c[I>>2]|0)|0))break;Zh=Uj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[ha>>2]|0)+(c[I>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}}while(0);if((c[ga>>2]|0)>>>0>(c[ba>>2]|0)>>>0?(c[ba>>2]=c[ga>>2],c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[da>>2]|0)-(c[A>>2]|0),c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[ga>>2],c[$>>2]=(c[$>>2]|0)+1,((c[ga>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ga>>2]|0)|0)==(c[x>>2]|0))|0):0){dj=444;break;}c[da>>2]=(c[da>>2]|0)+1;}f:do{if((dj|0)==444){dj=0;c[t>>2]=c[$>>2];}else if((dj|0)==446){dj=0;do{if((c[D>>2]|0)==3){if((c[ba>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[ia>>2]=nm(c[u>>2]|0,c[w>>2]|0)|0;if(!(((c[ia>>2]|0)>>>0>(c[W>>2]|0)>>>0?((c[G>>2]|0)-(c[ia>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[y>>2]|0){if((c[ia>>2]|0)>>>0>=(c[S>>2]|0)>>>0){dj=451;break;}c[la>>2]=(c[R>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Uj(c[w>>2]|0,c[la>>2]|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;}else dj=451;}while(0);if((dj|0)==451){dj=0;c[ka>>2]=(c[F>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Tj(c[w>>2]|0,c[ka>>2]|0,c[x>>2]|0)|0;}if((c[ja>>2]|0)>>>0<(c[D>>2]|0)>>>0)break;c[ba>>2]=c[ja>>2];c[c[B>>2]>>2]=(c[G>>2]|0)-(c[ia>>2]|0)+2;c[(c[B>>2]|0)+4>>2]=c[ja>>2];c[$>>2]=1;if(!(((c[ja>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ja>>2]|0)|0)==(c[x>>2]|0))|0))break;c[(c[u>>2]|0)+24>>2]=(c[G>>2]|0)+1;c[t>>2]=1;break f;}}while(0);c[(c[J>>2]|0)+(c[K>>2]<<2)>>2]=c[G>>2];while(1){Zh=c[aa>>2]|0;c[aa>>2]=Zh+-1;if(!Zh)break;if((c[L>>2]|0)>>>0<=(c[W>>2]|0)>>>0)break;c[ma>>2]=(c[M>>2]|0)+((c[L>>2]&c[O>>2])<<1<<2);c[na>>2]=(c[P>>2]|0)>>>0<(c[Q>>2]|0)>>>0?c[P>>2]|0:c[Q>>2]|0;do{if(c[y>>2]|0){if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0>=(c[S>>2]|0)>>>0){dj=461;break;}c[oa>>2]=(c[R>>2]|0)+(c[L>>2]|0);Zh=Uj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0<(c[S>>2]|0)>>>0)break;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);}else dj=461;}while(0);if((dj|0)==461){dj=0;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);Zh=Tj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;}if((c[na>>2]|0)>>>0>(c[ba>>2]|0)>>>0){if((c[na>>2]|0)>>>0>((c[Z>>2]|0)-(c[L>>2]|0)|0)>>>0)c[Z>>2]=(c[L>>2]|0)+(c[na>>2]|0);c[ba>>2]=c[na>>2];c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[G>>2]|0)-(c[L>>2]|0)+2;c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[na>>2];c[$>>2]=(c[$>>2]|0)+1;if((c[na>>2]|0)>>>0>4096)break;if(((c[w>>2]|0)+(c[na>>2]|0)|0)==(c[x>>2]|0))break;}Zh=c[L>>2]|0;if((d[(c[oa>>2]|0)+(c[na>>2]|0)>>0]|0|0)<(d[(c[w>>2]|0)+(c[na>>2]|0)>>0]|0|0)){c[c[X>>2]>>2]=Zh;c[P>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=471;break;}c[X>>2]=(c[ma>>2]|0)+4;c[L>>2]=c[(c[ma>>2]|0)+4>>2];}else{c[c[Y>>2]>>2]=Zh;c[Q>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=474;break;}c[Y>>2]=c[ma>>2];c[L>>2]=c[c[ma>>2]>>2];}}if((dj|0)==471){dj=0;c[X>>2]=_;}else if((dj|0)==474){dj=0;c[Y>>2]=_;}c[c[Y>>2]>>2]=0;c[c[X>>2]>>2]=0;c[(c[u>>2]|0)+24>>2]=(c[Z>>2]|0)-8;c[t>>2]=c[$>>2];}}while(0);c[md>>2]=c[t>>2];break d;break;}case 5:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[qa>>2]=c[nd>>2];c[ra>>2]=Zh;c[sa>>2]=Zi;c[ta>>2]=Ph;c[ua>>2]=Qh;c[va>>2]=_h;c[wa>>2]=_i;c[xa>>2]=aj;c[ya>>2]=Uh;c[za>>2]=5;if((c[(c[ra>>2]|0)+20>>2]|0)>>>0<4095)xj=c[(c[ra>>2]|0)+20>>2]|0;else xj=4095;c[Aa>>2]=xj;c[Ba>>2]=c[(c[qa>>2]|0)+4>>2];c[Ca>>2]=(c[sa>>2]|0)-(c[Ba>>2]|0);c[Da>>2]=c[(c[ra>>2]|0)+8>>2];c[Ea>>2]=(c[za>>2]|0)==3?3:4;c[Fa>>2]=c[(c[qa>>2]|0)+36>>2];c[Ga>>2]=Sj(c[sa>>2]|0,c[Da>>2]|0,c[za>>2]|0)|0;c[Ha>>2]=c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2];c[Ia>>2]=c[(c[qa>>2]|0)+44>>2];c[Ja>>2]=(c[(c[ra>>2]|0)+4>>2]|0)-1;c[Ka>>2]=(1<<c[Ja>>2])-1;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=c[(c[qa>>2]|0)+8>>2];c[Oa>>2]=c[(c[qa>>2]|0)+12>>2];c[Pa>>2]=(c[Na>>2]|0)+(c[Oa>>2]|0);c[Qa>>2]=(c[Ba>>2]|0)+(c[Oa>>2]|0);if((c[Ka>>2]|0)>>>0>=(c[Ca>>2]|0)>>>0)yj=0;else yj=(c[Ca>>2]|0)-(c[Ka>>2]|0)|0;c[Ra>>2]=yj;c[Sa>>2]=c[(c[qa>>2]|0)+16>>2];c[Ta>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2);c[Ua>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2)+4;c[Va>>2]=(c[Ca>>2]|0)+8+1;c[Xa>>2]=0;c[Ya>>2]=1<<c[(c[ra>>2]|0)+12>>2];c[Za>>2]=(c[ya>>2]|0)-1;c[_a>>2]=3+(c[wa>>2]|0);c[$a>>2]=c[wa>>2];while(1){if((c[$a>>2]|0)>>>0>=(c[_a>>2]|0)>>>0){dj=393;break;}Uh=c[va>>2]|0;if((c[$a>>2]|0)==3)zj=(c[Uh>>2]|0)-1|0;else zj=c[Uh+(c[$a>>2]<<2)>>2]|0;c[ab>>2]=zj;c[bb>>2]=(c[Ca>>2]|0)-(c[ab>>2]|0);c[cb>>2]=0;do{if(((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Oa>>2]|0)|0)>>>0){Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm((c[sa>>2]|0)+(0-(c[ab>>2]|0))|0,c[Ea>>2]|0)|0))break;Uh=Tj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[sa>>2]|0)+(c[Ea>>2]|0)+(0-(c[ab>>2]|0))|0,c[ta>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}else{c[db>>2]=(c[Na>>2]|0)+(c[bb>>2]|0);if(!(c[ua>>2]|0))break;if(!((((c[Oa>>2]|0)-1-(c[bb>>2]|0)|0)>>>0>=3?((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Sa>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm(c[db>>2]|0,c[Ea>>2]|0)|0))break;Uh=Uj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[db>>2]|0)+(c[Ea>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}}while(0);if((c[cb>>2]|0)>>>0>(c[Za>>2]|0)>>>0?(c[Za>>2]=c[cb>>2],c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[$a>>2]|0)-(c[wa>>2]|0),c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[cb>>2],c[Xa>>2]=(c[Xa>>2]|0)+1,((c[cb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[cb>>2]|0)|0)==(c[ta>>2]|0))|0):0){dj=391;break;}c[$a>>2]=(c[$a>>2]|0)+1;}g:do{if((dj|0)==391){dj=0;c[pa>>2]=c[Xa>>2];}else if((dj|0)==393){dj=0;do{if((c[za>>2]|0)==3){if((c[Za>>2]|0)>>>0>=(c[za>>2]|0)>>>0)break;c[eb>>2]=nm(c[qa>>2]|0,c[sa>>2]|0)|0;if(!(((c[eb>>2]|0)>>>0>(c[Sa>>2]|0)>>>0?((c[Ca>>2]|0)-(c[eb>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[ua>>2]|0){if((c[eb>>2]|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=398;break;}c[hb>>2]=(c[Na>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Uj(c[sa>>2]|0,c[hb>>2]|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;}else dj=398;}while(0);if((dj|0)==398){dj=0;c[gb>>2]=(c[Ba>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Tj(c[sa>>2]|0,c[gb>>2]|0,c[ta>>2]|0)|0;}if((c[fb>>2]|0)>>>0<(c[za>>2]|0)>>>0)break;c[Za>>2]=c[fb>>2];c[c[xa>>2]>>2]=(c[Ca>>2]|0)-(c[eb>>2]|0)+2;c[(c[xa>>2]|0)+4>>2]=c[fb>>2];c[Xa>>2]=1;if(!(((c[fb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[fb>>2]|0)|0)==(c[ta>>2]|0))|0))break;c[(c[qa>>2]|0)+24>>2]=(c[Ca>>2]|0)+1;c[pa>>2]=1;break g;}}while(0);c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2]=c[Ca>>2];while(1){Uh=c[Ya>>2]|0;c[Ya>>2]=Uh+-1;if(!Uh)break;if((c[Ha>>2]|0)>>>0<=(c[Sa>>2]|0)>>>0)break;c[ib>>2]=(c[Ia>>2]|0)+((c[Ha>>2]&c[Ka>>2])<<1<<2);c[jb>>2]=(c[La>>2]|0)>>>0<(c[Ma>>2]|0)>>>0?c[La>>2]|0:c[Ma>>2]|0;do{if(c[ua>>2]|0){if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=408;break;}c[kb>>2]=(c[Na>>2]|0)+(c[Ha>>2]|0);Uh=Uj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0<(c[Oa>>2]|0)>>>0)break;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);}else dj=408;}while(0);if((dj|0)==408){dj=0;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);Uh=Tj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;}if((c[jb>>2]|0)>>>0>(c[Za>>2]|0)>>>0){if((c[jb>>2]|0)>>>0>((c[Va>>2]|0)-(c[Ha>>2]|0)|0)>>>0)c[Va>>2]=(c[Ha>>2]|0)+(c[jb>>2]|0);c[Za>>2]=c[jb>>2];c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[Ca>>2]|0)-(c[Ha>>2]|0)+2;c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[jb>>2];c[Xa>>2]=(c[Xa>>2]|0)+1;if((c[jb>>2]|0)>>>0>4096)break;if(((c[sa>>2]|0)+(c[jb>>2]|0)|0)==(c[ta>>2]|0))break;}Uh=c[Ha>>2]|0;if((d[(c[kb>>2]|0)+(c[jb>>2]|0)>>0]|0|0)<(d[(c[sa>>2]|0)+(c[jb>>2]|0)>>0]|0|0)){c[c[Ta>>2]>>2]=Uh;c[La>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=418;break;}c[Ta>>2]=(c[ib>>2]|0)+4;c[Ha>>2]=c[(c[ib>>2]|0)+4>>2];}else{c[c[Ua>>2]>>2]=Uh;c[Ma>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=421;break;}c[Ua>>2]=c[ib>>2];c[Ha>>2]=c[c[ib>>2]>>2];}}if((dj|0)==418){dj=0;c[Ta>>2]=Wa;}else if((dj|0)==421){dj=0;c[Ua>>2]=Wa;}c[c[Ua>>2]>>2]=0;c[c[Ta>>2]>>2]=0;c[(c[qa>>2]|0)+24>>2]=(c[Va>>2]|0)-8;c[pa>>2]=c[Xa>>2];}}while(0);c[md>>2]=c[pa>>2];break d;break;}default:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[mb>>2]=c[nd>>2];c[nb>>2]=Uh;c[ob>>2]=aj;c[pb>>2]=_i;c[qb>>2]=_h;c[rb>>2]=Qh;c[sb>>2]=Ph;c[tb>>2]=Zi;c[ub>>2]=Zh;c[vb>>2]=4;if((c[(c[nb>>2]|0)+20>>2]|0)>>>0<4095)Aj=c[(c[nb>>2]|0)+20>>2]|0;else Aj=4095;c[wb>>2]=Aj;c[xb>>2]=c[(c[mb>>2]|0)+4>>2];c[yb>>2]=(c[ob>>2]|0)-(c[xb>>2]|0);c[zb>>2]=c[(c[nb>>2]|0)+8>>2];c[Ab>>2]=(c[vb>>2]|0)==3?3:4;c[Bb>>2]=c[(c[mb>>2]|0)+36>>2];c[Cb>>2]=Sj(c[ob>>2]|0,c[zb>>2]|0,c[vb>>2]|0)|0;c[Db>>2]=c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2];c[Eb>>2]=c[(c[mb>>2]|0)+44>>2];c[Fb>>2]=(c[(c[nb>>2]|0)+4>>2]|0)-1;c[Gb>>2]=(1<<c[Fb>>2])-1;c[Hb>>2]=0;c[Ib>>2]=0;c[Jb>>2]=c[(c[mb>>2]|0)+8>>2];c[Kb>>2]=c[(c[mb>>2]|0)+12>>2];c[Lb>>2]=(c[Jb>>2]|0)+(c[Kb>>2]|0);c[Mb>>2]=(c[xb>>2]|0)+(c[Kb>>2]|0);if((c[Gb>>2]|0)>>>0>=(c[yb>>2]|0)>>>0)Bj=0;else Bj=(c[yb>>2]|0)-(c[Gb>>2]|0)|0;c[Nb>>2]=Bj;c[Ob>>2]=c[(c[mb>>2]|0)+16>>2];c[Pb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2);c[Qb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2)+4;c[Rb>>2]=(c[yb>>2]|0)+8+1;c[Tb>>2]=0;c[Ub>>2]=1<<c[(c[nb>>2]|0)+12>>2];c[Vb>>2]=(c[ub>>2]|0)-1;c[Wb>>2]=3+(c[sb>>2]|0);c[Xb>>2]=c[sb>>2];while(1){if((c[Xb>>2]|0)>>>0>=(c[Wb>>2]|0)>>>0){dj=340;break;}Zh=c[rb>>2]|0;if((c[Xb>>2]|0)==3)Cj=(c[Zh>>2]|0)-1|0;else Cj=c[Zh+(c[Xb>>2]<<2)>>2]|0;c[Yb>>2]=Cj;c[Zb>>2]=(c[yb>>2]|0)-(c[Yb>>2]|0);c[_b>>2]=0;do{if(((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Kb>>2]|0)|0)>>>0){Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm((c[ob>>2]|0)+(0-(c[Yb>>2]|0))|0,c[Ab>>2]|0)|0))break;Zh=Tj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[ob>>2]|0)+(c[Ab>>2]|0)+(0-(c[Yb>>2]|0))|0,c[pb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}else{c[$b>>2]=(c[Jb>>2]|0)+(c[Zb>>2]|0);if(!(c[qb>>2]|0))break;if(!((((c[Kb>>2]|0)-1-(c[Zb>>2]|0)|0)>>>0>=3?((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Ob>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm(c[$b>>2]|0,c[Ab>>2]|0)|0))break;Zh=Uj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[$b>>2]|0)+(c[Ab>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}}while(0);if((c[_b>>2]|0)>>>0>(c[Vb>>2]|0)>>>0?(c[Vb>>2]=c[_b>>2],c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[Xb>>2]|0)-(c[sb>>2]|0),c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[_b>>2],c[Tb>>2]=(c[Tb>>2]|0)+1,((c[_b>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[_b>>2]|0)|0)==(c[pb>>2]|0))|0):0){dj=338;break;}c[Xb>>2]=(c[Xb>>2]|0)+1;}h:do{if((dj|0)==338){dj=0;c[lb>>2]=c[Tb>>2];}else if((dj|0)==340){dj=0;do{if((c[vb>>2]|0)==3){if((c[Vb>>2]|0)>>>0>=(c[vb>>2]|0)>>>0)break;c[ac>>2]=nm(c[mb>>2]|0,c[ob>>2]|0)|0;if(!(((c[ac>>2]|0)>>>0>(c[Ob>>2]|0)>>>0?((c[yb>>2]|0)-(c[ac>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[qb>>2]|0){if((c[ac>>2]|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=345;break;}c[dc>>2]=(c[Jb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Uj(c[ob>>2]|0,c[dc>>2]|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;}else dj=345;}while(0);if((dj|0)==345){dj=0;c[cc>>2]=(c[xb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Tj(c[ob>>2]|0,c[cc>>2]|0,c[pb>>2]|0)|0;}if((c[bc>>2]|0)>>>0<(c[vb>>2]|0)>>>0)break;c[Vb>>2]=c[bc>>2];c[c[tb>>2]>>2]=(c[yb>>2]|0)-(c[ac>>2]|0)+2;c[(c[tb>>2]|0)+4>>2]=c[bc>>2];c[Tb>>2]=1;if(!(((c[bc>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[bc>>2]|0)|0)==(c[pb>>2]|0))|0))break;c[(c[mb>>2]|0)+24>>2]=(c[yb>>2]|0)+1;c[lb>>2]=1;break h;}}while(0);c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2]=c[yb>>2];while(1){Zh=c[Ub>>2]|0;c[Ub>>2]=Zh+-1;if(!Zh)break;if((c[Db>>2]|0)>>>0<=(c[Ob>>2]|0)>>>0)break;c[ec>>2]=(c[Eb>>2]|0)+((c[Db>>2]&c[Gb>>2])<<1<<2);c[fc>>2]=(c[Hb>>2]|0)>>>0<(c[Ib>>2]|0)>>>0?c[Hb>>2]|0:c[Ib>>2]|0;do{if(c[qb>>2]|0){if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=355;break;}c[gc>>2]=(c[Jb>>2]|0)+(c[Db>>2]|0);Zh=Uj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0<(c[Kb>>2]|0)>>>0)break;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);}else dj=355;}while(0);if((dj|0)==355){dj=0;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);Zh=Tj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;}if((c[fc>>2]|0)>>>0>(c[Vb>>2]|0)>>>0){if((c[fc>>2]|0)>>>0>((c[Rb>>2]|0)-(c[Db>>2]|0)|0)>>>0)c[Rb>>2]=(c[Db>>2]|0)+(c[fc>>2]|0);c[Vb>>2]=c[fc>>2];c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[yb>>2]|0)-(c[Db>>2]|0)+2;c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[fc>>2];c[Tb>>2]=(c[Tb>>2]|0)+1;if((c[fc>>2]|0)>>>0>4096)break;if(((c[ob>>2]|0)+(c[fc>>2]|0)|0)==(c[pb>>2]|0))break;}Zh=c[Db>>2]|0;if((d[(c[gc>>2]|0)+(c[fc>>2]|0)>>0]|0|0)<(d[(c[ob>>2]|0)+(c[fc>>2]|0)>>0]|0|0)){c[c[Pb>>2]>>2]=Zh;c[Hb>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=365;break;}c[Pb>>2]=(c[ec>>2]|0)+4;c[Db>>2]=c[(c[ec>>2]|0)+4>>2];}else{c[c[Qb>>2]>>2]=Zh;c[Ib>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=368;break;}c[Qb>>2]=c[ec>>2];c[Db>>2]=c[c[ec>>2]>>2];}}if((dj|0)==365){dj=0;c[Pb>>2]=Sb;}else if((dj|0)==368){dj=0;c[Qb>>2]=Sb;}c[c[Qb>>2]>>2]=0;c[c[Pb>>2]>>2]=0;c[(c[mb>>2]|0)+24>>2]=(c[Rb>>2]|0)-8;c[lb>>2]=c[Tb>>2];}}while(0);c[md>>2]=c[lb>>2];break d;}}}}while(0);c[Bi>>2]=c[md>>2];if(c[Bi>>2]|0){c[Di>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)+4>>2];if(((c[Di>>2]|0)>>>0>(c[$h>>2]|0)>>>0?1:((c[ei>>2]|0)+(c[Di>>2]|0)|0)>>>0>=4096)|0){dj=481;break b;}c[Ci>>2]=0;while(1){if((c[Ci>>2]|0)>>>0>=(c[Bi>>2]|0)>>>0)break c;c[Ei>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)>>2];pm(Fi,(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0,c[Ei>>2]|0,c[xi>>2]|0);c[Gi>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)+4>>2];if((c[Ci>>2]|0)>>>0>0)Dj=(c[(c[ci>>2]|0)+((c[Ci>>2]|0)-1<<3)+4>>2]|0)+1|0;else Dj=c[ai>>2]|0;c[Hi>>2]=Dj;c[Ii>>2]=c[Gi>>2];i:while(1){if((c[Ii>>2]|0)>>>0<(c[Hi>>2]|0)>>>0)break;c[Ji>>2]=(c[ei>>2]|0)+(c[Ii>>2]|0);Zh=c[Ai>>2]|0;Zi=c[Ii>>2]|0;Ph=c[Th>>2]|0;Qh=c[Rh>>2]|0;c[k>>2]=c[Ei>>2];c[m>>2]=Zi;c[n>>2]=Ph;c[o>>2]=Qh;c[q>>2]=qm((c[k>>2]|0)+1|0)|0;c[r>>2]=(c[m>>2]|0)-3;if(c[(c[n>>2]|0)+56>>2]|0){Qh=(qm((c[r>>2]|0)+1|0)|0)+16|0;c[j>>2]=Qh+(c[q>>2]|0);}else{Qh=(c[q>>2]|0)+(c[(c[n>>2]|0)+52>>2]|0)|0;c[p>>2]=Qh-(qm((c[(c[(c[n>>2]|0)+12>>2]|0)+(c[q>>2]<<2)>>2]|0)+1|0)|0);if((c[o>>2]|0)<2&(c[q>>2]|0)>>>0>=20)c[p>>2]=(c[p>>2]|0)+((c[q>>2]|0)-19<<1);c[s>>2]=rm(c[r>>2]|0)|0;Qh=(c[5840+(c[s>>2]<<2)>>2]|0)+(c[(c[n>>2]|0)+48>>2]|0)|0;Ph=Qh-(qm((c[(c[(c[n>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0)+1|0)|0)|0;c[p>>2]=(c[p>>2]|0)+Ph;c[j>>2]=c[p>>2];}c[Ki>>2]=Zh+(c[j>>2]|0);do{if((c[Ji>>2]|0)>>>0<=(c[fi>>2]|0)>>>0){if((c[Ki>>2]|0)<(c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]|0)){dj=496;break;}if(!(c[Rh>>2]|0))break i;}else dj=496;}while(0);if((dj|0)==496){dj=0;while(1){if((c[fi>>2]|0)>>>0>=(c[Ji>>2]|0)>>>0)break;c[(c[bi>>2]|0)+(((c[fi>>2]|0)+1|0)*28|0)>>2]=1073741824;c[fi>>2]=(c[fi>>2]|0)+1;}c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+8>>2]=c[Ii>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+4>>2]=c[Ei>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+12>>2]=c[yi>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]=c[Ki>>2];Zh=(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+16|0;c[Zh>>2]=c[Fi>>2];c[Zh+4>>2]=c[Fi+4>>2];c[Zh+8>>2]=c[Fi+8>>2];}c[Ii>>2]=(c[Ii>>2]|0)+-1;}c[Ci>>2]=(c[Ci>>2]|0)+1;}}}}while(0);c[ei>>2]=(c[ei>>2]|0)+1;}if((dj|0)==481){dj=0;c[gi>>2]=c[Di>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)>>2];c[fi>>2]=(c[ei>>2]|0)+1;break;}else if((dj|0)==504){dj=0;c[gi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+8>>2];c[hi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+4>>2];c[ei>>2]=(c[fi>>2]|0)-(c[gi>>2]|0);break;}}else{c[gi>>2]=c[mi>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)>>2];c[ei>>2]=0;c[fi>>2]=1;}}while(0);c[Li>>2]=c[gi>>2];c[Mi>>2]=c[hi>>2];c[Ni>>2]=c[ei>>2];while(1){c[Oi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2];c[Pi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2]=c[Li>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2]=c[Mi>>2];c[Li>>2]=c[Oi>>2];c[Mi>>2]=c[Pi>>2];if((c[Oi>>2]|0)>>>0>(c[Ni>>2]|0)>>>0)break;c[Ni>>2]=(c[Ni>>2]|0)-(c[Oi>>2]|0);}c[Qi>>2]=0;while(1){if((c[Qi>>2]|0)>>>0>=(c[fi>>2]|0)>>>0)break;c[Ri>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[Si>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+8>>2];c[Ti>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+4>>2];if((c[Si>>2]|0)==1){c[Vh>>2]=(c[Vh>>2]|0)+1;c[Qi>>2]=(c[Qi>>2]|0)+1;continue;}c[Qi>>2]=(c[Qi>>2]|0)+(c[Si>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+(c[Si>>2]|0);if((c[Ti>>2]|0)>>>0<3){c[Ui>>2]=(c[Ti>>2]|0)+((c[Ri>>2]|0)==0&1);if(c[Ui>>2]|0){Zh=c[Nh>>2]|0;if((c[Ui>>2]|0)==3)Ej=(c[Zh>>2]|0)-1|0;else Ej=c[Zh+(c[Ui>>2]<<2)>>2]|0;c[Vi>>2]=Ej;if((c[Ui>>2]|0)>>>0>=2)c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=c[Vi>>2];}}else{c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=(c[Ti>>2]|0)-2;}vm(c[Th>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,c[Si>>2]|0);wm(c[Mh>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,(c[Si>>2]|0)-3|0);c[Wh>>2]=c[Vh>>2];}xm(c[Th>>2]|0);}l=i;return(c[Xh>>2]|0)-(c[Wh>>2]|0)|0;}function km(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0;i=l;l=l+2144|0;j=i+2136|0;k=i+2132|0;m=i+2128|0;n=i+2124|0;o=i+2120|0;p=i+2116|0;q=i+2112|0;r=i+2108|0;s=i+2104|0;t=i+2100|0;u=i+2096|0;v=i+2092|0;w=i+2088|0;x=i+2084|0;y=i+2080|0;z=i+2076|0;A=i+2072|0;B=i+2068|0;C=i+2064|0;D=i+2060|0;E=i+2056|0;F=i+2052|0;G=i+2048|0;H=i+2044|0;I=i+2040|0;J=i+2036|0;K=i+2032|0;L=i+2028|0;M=i+2024|0;N=i+2020|0;O=i+2016|0;P=i+2012|0;Q=i+2008|0;R=i+2004|0;S=i+2e3|0;T=i+1996|0;U=i+1992|0;V=i+1988|0;W=i+1984|0;X=i+1980|0;Y=i+1976|0;Z=i+1972|0;_=i+1968|0;$=i+1964|0;aa=i+1960|0;ba=i+1956|0;ca=i+1952|0;da=i+1948|0;ea=i+1944|0;fa=i+1940|0;ga=i+1936|0;ha=i+1932|0;ia=i+1928|0;ja=i+1924|0;ka=i+1920|0;la=i+1916|0;ma=i+1912|0;na=i+1908|0;oa=i+1904|0;pa=i+1900|0;qa=i+1896|0;ra=i+1892|0;sa=i+1888|0;ta=i+1884|0;ua=i+1880|0;va=i+1876|0;wa=i+1872|0;xa=i+1868|0;ya=i+1864|0;za=i+1860|0;Aa=i+1856|0;Ba=i+1852|0;Ca=i+1848|0;Da=i+1844|0;Ea=i+1840|0;Fa=i+1836|0;Ga=i+1832|0;Ha=i+1828|0;Ia=i+1824|0;Ja=i+1820|0;Ka=i+1816|0;La=i+1812|0;Ma=i+1808|0;Na=i+1804|0;Oa=i+1800|0;Pa=i+1796|0;Qa=i+1792|0;Ra=i+1788|0;Sa=i+1784|0;Ta=i+1780|0;Ua=i+1776|0;Va=i+1772|0;Wa=i+1768|0;Xa=i+1764|0;Ya=i+1760|0;Za=i+1756|0;_a=i+1752|0;$a=i+1748|0;ab=i+1744|0;bb=i+1740|0;cb=i+1736|0;db=i+1732|0;eb=i+1728|0;fb=i+1724|0;gb=i+1720|0;hb=i+1716|0;ib=i+1712|0;jb=i+1708|0;kb=i+1704|0;lb=i+1700|0;mb=i+1696|0;nb=i+1692|0;ob=i+1688|0;pb=i+1684|0;qb=i+1680|0;rb=i+1676|0;sb=i+1672|0;tb=i+1668|0;ub=i+1664|0;vb=i+1660|0;wb=i+1656|0;xb=i+1652|0;yb=i+1648|0;zb=i+1644|0;Ab=i+1640|0;Bb=i+1636|0;Cb=i+1632|0;Db=i+1628|0;Eb=i+1624|0;Fb=i+1620|0;Gb=i+1616|0;Hb=i+1612|0;Ib=i+1608|0;Jb=i+1604|0;Kb=i+1600|0;Lb=i+1596|0;Mb=i+1592|0;Nb=i+1588|0;Ob=i+1584|0;Pb=i+1580|0;Qb=i+1576|0;Rb=i+1572|0;Sb=i+1568|0;Tb=i+1564|0;Ub=i+1560|0;Vb=i+1556|0;Wb=i+1552|0;Xb=i+1548|0;Yb=i+1544|0;Zb=i+1540|0;_b=i+1536|0;$b=i+1532|0;ac=i+1528|0;bc=i+1524|0;cc=i+1520|0;dc=i+1516|0;ec=i+1512|0;fc=i+1508|0;gc=i+1504|0;hc=i+1500|0;ic=i+1496|0;jc=i+1492|0;kc=i+1488|0;lc=i+1484|0;mc=i+1480|0;nc=i+1476|0;oc=i+1472|0;pc=i+1468|0;qc=i+1464|0;rc=i+1460|0;sc=i+1456|0;tc=i+1452|0;uc=i+1448|0;vc=i+1444|0;wc=i+1440|0;xc=i+1436|0;yc=i+1432|0;zc=i+1428|0;Ac=i+1424|0;Bc=i+1420|0;Cc=i+1416|0;Dc=i+1412|0;Ec=i+1408|0;Fc=i+1404|0;Gc=i+1400|0;Hc=i+1396|0;Ic=i+1392|0;Jc=i+1388|0;Kc=i+1384|0;Lc=i+1380|0;Mc=i+1376|0;Nc=i+1372|0;Oc=i+1368|0;Pc=i+1364|0;Qc=i+1360|0;Rc=i+1356|0;Sc=i+1352|0;Tc=i+1348|0;Uc=i+1344|0;Vc=i+1340|0;Wc=i+1336|0;Xc=i+1332|0;Yc=i+1328|0;Zc=i+1324|0;_c=i+1320|0;$c=i+1316|0;ad=i+1312|0;bd=i+1308|0;cd=i+1304|0;dd=i+1300|0;ed=i+1296|0;fd=i+1292|0;gd=i+1288|0;hd=i+1284|0;id=i+1280|0;jd=i+1276|0;kd=i+1272|0;ld=i+1268|0;md=i+1264|0;nd=i+1260|0;od=i+1256|0;pd=i+1252|0;qd=i+1248|0;rd=i+1244|0;sd=i+1240|0;td=i+1236|0;ud=i+1232|0;vd=i+1228|0;wd=i+1224|0;xd=i+1220|0;yd=i+1216|0;zd=i+1212|0;Ad=i+1208|0;Bd=i+1204|0;Cd=i+1200|0;Dd=i+1196|0;Ed=i+1192|0;Fd=i+1188|0;Gd=i+1184|0;Hd=i+1180|0;Id=i+1176|0;Jd=i+1172|0;Kd=i+1168|0;Ld=i+1164|0;Md=i+1160|0;Nd=i+1156|0;Od=i+1152|0;Pd=i+1148|0;Qd=i+1144|0;Rd=i+1140|0;Sd=i+1136|0;Td=i+1132|0;Ud=i+1128|0;Vd=i+1124|0;Wd=i+1120|0;Xd=i+1116|0;Yd=i+1112|0;Zd=i+1108|0;_d=i+1104|0;$d=i+1100|0;ae=i+1096|0;be=i+1092|0;ce=i+1088|0;de=i+1084|0;ee=i+1080|0;fe=i+1076|0;ge=i+1072|0;he=i+1068|0;ie=i+1064|0;je=i+1060|0;ke=i+1056|0;le=i+1052|0;me=i+1048|0;ne=i+1044|0;oe=i+1040|0;pe=i+1036|0;qe=i+1032|0;re=i+1028|0;se=i+1024|0;te=i+1020|0;ue=i+1016|0;ve=i+1012|0;we=i+1008|0;xe=i+1004|0;ye=i+1e3|0;ze=i+996|0;Ae=i+992|0;Be=i+988|0;Ce=i+984|0;De=i+980|0;Ee=i+976|0;Fe=i+972|0;Ge=i+968|0;He=i+964|0;Ie=i+960|0;Je=i+956|0;Ke=i+952|0;Le=i+948|0;Me=i+944|0;Ne=i+940|0;Oe=i+936|0;Pe=i+932|0;Qe=i+928|0;Re=i+924|0;Se=i+920|0;Te=i+916|0;Ue=i+912|0;Ve=i+908|0;We=i+904|0;Xe=i+900|0;Ye=i+896|0;Ze=i+892|0;_e=i+888|0;$e=i+884|0;af=i+880|0;bf=i+876|0;cf=i+872|0;df=i+868|0;ef=i+864|0;ff=i+860|0;gf=i+856|0;hf=i+852|0;jf=i+848|0;kf=i+844|0;lf=i+840|0;mf=i+836|0;nf=i+832|0;of=i+828|0;pf=i+824|0;qf=i+820|0;rf=i+816|0;sf=i+812|0;tf=i+808|0;uf=i+804|0;vf=i+800|0;wf=i+796|0;xf=i+792|0;yf=i+788|0;zf=i+784|0;Af=i+780|0;Bf=i+776|0;Cf=i+772|0;Df=i+768|0;Ef=i+764|0;Ff=i+760|0;Gf=i+756|0;Hf=i+752|0;If=i+748|0;Jf=i+744|0;Kf=i+740|0;Lf=i+736|0;Mf=i+732|0;Nf=i+728|0;Of=i+724|0;Pf=i+720|0;Qf=i+716|0;Rf=i+712|0;Sf=i+708|0;Tf=i+704|0;Uf=i+700|0;Vf=i+696|0;Wf=i+692|0;Xf=i+688|0;Yf=i+684|0;Zf=i+680|0;_f=i+676|0;$f=i+672|0;ag=i+668|0;bg=i+664|0;cg=i+660|0;dg=i+656|0;eg=i+652|0;fg=i+648|0;gg=i+644|0;hg=i+640|0;ig=i+636|0;jg=i+632|0;kg=i+628|0;lg=i+624|0;mg=i+620|0;ng=i+616|0;og=i+612|0;pg=i+608|0;qg=i+604|0;rg=i+600|0;sg=i+596|0;tg=i+592|0;ug=i+588|0;vg=i+584|0;wg=i+580|0;xg=i+576|0;yg=i+572|0;zg=i+568|0;Ag=i+564|0;Bg=i+560|0;Cg=i+556|0;Dg=i+552|0;Eg=i+548|0;Fg=i+544|0;Gg=i+540|0;Hg=i+536|0;Ig=i+532|0;Jg=i+528|0;Kg=i+524|0;Lg=i+520|0;Mg=i+516|0;Ng=i+512|0;Og=i+508|0;Pg=i+504|0;Qg=i+500|0;Rg=i+496|0;Sg=i+492|0;Tg=i+488|0;Ug=i+484|0;Vg=i+480|0;Wg=i+476|0;Xg=i+472|0;Yg=i+468|0;Zg=i+464|0;_g=i+460|0;$g=i+456|0;ah=i+452|0;bh=i+448|0;ch=i+444|0;dh=i+440|0;eh=i+436|0;fh=i+432|0;gh=i+428|0;hh=i+424|0;ih=i+420|0;jh=i+416|0;kh=i+412|0;lh=i+408|0;mh=i+404|0;nh=i+400|0;oh=i+396|0;ph=i+392|0;qh=i+388|0;rh=i+384|0;sh=i+380|0;th=i+376|0;uh=i+372|0;vh=i+368|0;wh=i+364|0;xh=i+360|0;yh=i+356|0;zh=i+352|0;Ah=i+348|0;Bh=i+344|0;Ch=i+340|0;Dh=i+336|0;Eh=i+332|0;Fh=i+328|0;Gh=i+324|0;Hh=i+320|0;Ih=i+316|0;Jh=i+312|0;Kh=i+308|0;Lh=i+304|0;Mh=i+300|0;Nh=i+296|0;Oh=i+292|0;Ph=i+288|0;Qh=i+284|0;Rh=i+280|0;Sh=i+276|0;Th=i+272|0;Uh=i+268|0;Vh=i+264|0;Wh=i+260|0;Xh=i+256|0;Yh=i+252|0;Zh=i+248|0;_h=i+244|0;$h=i+240|0;ai=i+236|0;bi=i+232|0;ci=i+228|0;di=i+216|0;ei=i+212|0;fi=i+208|0;gi=i+204|0;hi=i+200|0;ii=i+196|0;ji=i+192|0;ki=i+188|0;li=i+184|0;mi=i+180|0;ni=i+176|0;oi=i+172|0;pi=i+168|0;qi=i+164|0;ri=i+160|0;si=i+148|0;ti=i+144|0;ui=i+140|0;vi=i+136|0;wi=i+132|0;xi=i+128|0;yi=i+124|0;zi=i+120|0;Ai=i+116|0;Bi=i+112|0;Ci=i+108|0;Di=i+104|0;Ei=i+100|0;Fi=i+88|0;Gi=i+84|0;Hi=i+80|0;Ii=i+76|0;Ji=i+72|0;Ki=i+68|0;Li=i+64|0;Mi=i+60|0;Ni=i+56|0;Oi=i+52|0;Pi=i+48|0;Qi=i+44|0;Ri=i+40|0;Si=i+36|0;Ti=i+32|0;Ui=i+28|0;Vi=i+24|0;Wi=i+20|0;Xi=i+16|0;Yi=i+12|0;Zi=i+8|0;_i=i+4|0;$i=i;c[Wi>>2]=a;c[Xi>>2]=b;c[Yi>>2]=e;c[Zi>>2]=f;c[_i>>2]=g;c[$i>>2]=h;h=c[Xi>>2]|0;Xi=c[Yi>>2]|0;Yi=c[Zi>>2]|0;Zi=c[_i>>2]|0;_i=c[$i>>2]|0;c[Lh>>2]=c[Wi>>2];c[Mh>>2]=h;c[Nh>>2]=Xi;c[Oh>>2]=Yi;c[Ph>>2]=Zi;c[Qh>>2]=_i;c[Rh>>2]=2;c[Sh>>2]=1;c[Th>>2]=(c[Lh>>2]|0)+48;c[Uh>>2]=c[Ph>>2];c[Vh>>2]=c[Uh>>2];c[Wh>>2]=c[Uh>>2];c[Xh>>2]=(c[Uh>>2]|0)+(c[Qh>>2]|0);c[Yh>>2]=(c[Xh>>2]|0)+-8;c[Zh>>2]=c[(c[Lh>>2]|0)+4>>2];c[_h>>2]=(c[Zh>>2]|0)+(c[(c[Lh>>2]|0)+12>>2]|0);if((c[(c[Oh>>2]|0)+20>>2]|0)>>>0<4095)aj=c[(c[Oh>>2]|0)+20>>2]|0;else aj=4095;c[$h>>2]=aj;c[ai>>2]=(c[(c[Oh>>2]|0)+16>>2]|0)==3?3:4;c[bi>>2]=c[(c[Th>>2]|0)+20>>2];c[ci>>2]=c[(c[Th>>2]|0)+16>>2];c[(c[Lh>>2]|0)+28>>2]=c[(c[Lh>>2]|0)+24>>2];lm(c[Th>>2]|0,c[Ph>>2]|0,c[Qh>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+((c[Vh>>2]|0)==(c[_h>>2]|0)&1);c[di>>2]=0;c[di+4>>2]=0;c[di+8>>2]=0;while(1){if((c[Vh>>2]|0)>>>0>=(c[Yh>>2]|0)>>>0)break;c[fi>>2]=0;c[ii>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[ji>>2]=((c[ii>>2]|0)!=0^1)&1;_h=c[Oh>>2]|0;Qh=c[Vh>>2]|0;Ph=c[Xh>>2]|0;aj=c[Sh>>2]|0;Zh=c[Nh>>2]|0;Uh=c[ji>>2]|0;_i=c[ci>>2]|0;Zi=c[ai>>2]|0;c[Bh>>2]=c[Lh>>2];c[Ch>>2]=_h;c[Dh>>2]=Qh;c[Eh>>2]=Ph;c[Fh>>2]=aj;c[Gh>>2]=Zh;c[Hh>>2]=Uh;c[Ih>>2]=_i;c[Jh>>2]=Zi;c[Kh>>2]=c[(c[Ch>>2]|0)+16>>2];a:do{if((c[Dh>>2]|0)>>>0<((c[(c[Bh>>2]|0)+4>>2]|0)+(c[(c[Bh>>2]|0)+24>>2]|0)|0)>>>0)c[Ah>>2]=0;else{Zi=c[Ch>>2]|0;_i=c[Dh>>2]|0;Uh=c[Eh>>2]|0;Zh=c[Kh>>2]|0;aj=c[Fh>>2]|0;c[rh>>2]=c[Bh>>2];c[sh>>2]=Zi;c[th>>2]=_i;c[uh>>2]=Uh;c[vh>>2]=Zh;c[wh>>2]=aj;c[xh>>2]=c[(c[rh>>2]|0)+4>>2];c[yh>>2]=(c[th>>2]|0)-(c[xh>>2]|0);c[zh>>2]=c[(c[rh>>2]|0)+24>>2];while(1){if((c[zh>>2]|0)>>>0>=(c[yh>>2]|0)>>>0)break;aj=Rj(c[rh>>2]|0,c[sh>>2]|0,(c[xh>>2]|0)+(c[zh>>2]|0)|0,c[uh>>2]|0,c[vh>>2]|0,c[wh>>2]|0)|0;c[zh>>2]=(c[zh>>2]|0)+aj;}c[(c[rh>>2]|0)+24>>2]=c[yh>>2];switch(c[Kh>>2]|0){case 3:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[wg>>2]=c[Bh>>2];c[xg>>2]=aj;c[yg>>2]=Zh;c[zg>>2]=Uh;c[Ag>>2]=_i;c[Bg>>2]=Zi;c[Cg>>2]=Ph;c[Dg>>2]=Qh;c[Eg>>2]=_h;c[Fg>>2]=3;if((c[(c[xg>>2]|0)+20>>2]|0)>>>0<4095)bj=c[(c[xg>>2]|0)+20>>2]|0;else bj=4095;c[Gg>>2]=bj;c[Hg>>2]=c[(c[wg>>2]|0)+4>>2];c[Ig>>2]=(c[yg>>2]|0)-(c[Hg>>2]|0);c[Jg>>2]=c[(c[xg>>2]|0)+8>>2];c[Kg>>2]=(c[Fg>>2]|0)==3?3:4;c[Lg>>2]=c[(c[wg>>2]|0)+36>>2];c[Mg>>2]=Sj(c[yg>>2]|0,c[Jg>>2]|0,c[Fg>>2]|0)|0;c[Ng>>2]=c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2];c[Og>>2]=c[(c[wg>>2]|0)+44>>2];c[Pg>>2]=(c[(c[xg>>2]|0)+4>>2]|0)-1;c[Qg>>2]=(1<<c[Pg>>2])-1;c[Rg>>2]=0;c[Sg>>2]=0;c[Tg>>2]=c[(c[wg>>2]|0)+8>>2];c[Ug>>2]=c[(c[wg>>2]|0)+12>>2];c[Vg>>2]=(c[Tg>>2]|0)+(c[Ug>>2]|0);c[Wg>>2]=(c[Hg>>2]|0)+(c[Ug>>2]|0);if((c[Qg>>2]|0)>>>0>=(c[Ig>>2]|0)>>>0)cj=0;else cj=(c[Ig>>2]|0)-(c[Qg>>2]|0)|0;c[Xg>>2]=cj;c[Yg>>2]=c[(c[wg>>2]|0)+16>>2];c[Zg>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2);c[_g>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2)+4;c[$g>>2]=(c[Ig>>2]|0)+8+1;c[bh>>2]=0;c[ch>>2]=1<<c[(c[xg>>2]|0)+12>>2];c[dh>>2]=(c[Eg>>2]|0)-1;c[eh>>2]=3+(c[Cg>>2]|0);c[fh>>2]=c[Cg>>2];while(1){if((c[fh>>2]|0)>>>0>=(c[eh>>2]|0)>>>0){dj=31;break;}_h=c[Bg>>2]|0;if((c[fh>>2]|0)==3)ej=(c[_h>>2]|0)-1|0;else ej=c[_h+(c[fh>>2]<<2)>>2]|0;c[gh>>2]=ej;c[hh>>2]=(c[Ig>>2]|0)-(c[gh>>2]|0);c[ih>>2]=0;if(((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Ug>>2]|0)|0)>>>0){_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0;if((_h|0)==(mm((c[yg>>2]|0)+(0-(c[gh>>2]|0))|0,c[Kg>>2]|0)|0)){_h=Tj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[yg>>2]|0)+(c[Kg>>2]|0)+(0-(c[gh>>2]|0))|0,c[zg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}else{c[jh>>2]=(c[Tg>>2]|0)+(c[hh>>2]|0);if((c[Ag>>2]|0?(((c[Ug>>2]|0)-1-(c[hh>>2]|0)|0)>>>0>=3?((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Yg>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0,(_h|0)==(mm(c[jh>>2]|0,c[Kg>>2]|0)|0)):0){_h=Uj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[jh>>2]|0)+(c[Kg>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}if((c[ih>>2]|0)>>>0>(c[dh>>2]|0)>>>0?(c[dh>>2]=c[ih>>2],c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[fh>>2]|0)-(c[Cg>>2]|0),c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ih>>2],c[bh>>2]=(c[bh>>2]|0)+1,((c[ih>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[ih>>2]|0)|0)==(c[zg>>2]|0))|0):0){dj=29;break;}c[fh>>2]=(c[fh>>2]|0)+1;}do{if((dj|0)==29){dj=0;c[vg>>2]=c[bh>>2];}else if((dj|0)==31){dj=0;if(((c[Fg>>2]|0)==3?(c[dh>>2]|0)>>>0<(c[Fg>>2]|0)>>>0:0)?(c[kh>>2]=nm(c[wg>>2]|0,c[yg>>2]|0)|0,((c[kh>>2]|0)>>>0>(c[Yg>>2]|0)>>>0?((c[Ig>>2]|0)-(c[kh>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ag>>2]|0?(c[kh>>2]|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[nh>>2]=(c[Tg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Uj(c[yg>>2]|0,c[nh>>2]|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;}else{c[mh>>2]=(c[Hg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Tj(c[yg>>2]|0,c[mh>>2]|0,c[zg>>2]|0)|0;}if((c[lh>>2]|0)>>>0>=(c[Fg>>2]|0)>>>0?(c[dh>>2]=c[lh>>2],c[c[Dg>>2]>>2]=(c[Ig>>2]|0)-(c[kh>>2]|0)+2,c[(c[Dg>>2]|0)+4>>2]=c[lh>>2],c[bh>>2]=1,((c[lh>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[lh>>2]|0)|0)==(c[zg>>2]|0))|0):0){c[(c[wg>>2]|0)+24>>2]=(c[Ig>>2]|0)+1;c[vg>>2]=1;break;}}c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2]=c[Ig>>2];while(1){_h=c[ch>>2]|0;c[ch>>2]=_h+-1;if(!_h)break;if((c[Ng>>2]|0)>>>0<=(c[Yg>>2]|0)>>>0)break;c[oh>>2]=(c[Og>>2]|0)+((c[Ng>>2]&c[Qg>>2])<<1<<2);c[ph>>2]=(c[Rg>>2]|0)>>>0<(c[Sg>>2]|0)>>>0?c[Rg>>2]|0:c[Sg>>2]|0;if(c[Ag>>2]|0?((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[qh>>2]=(c[Tg>>2]|0)+(c[Ng>>2]|0);_h=Uj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;if(((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0>=(c[Ug>>2]|0)>>>0)c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);}else{c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);_h=Tj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;}if((c[ph>>2]|0)>>>0>(c[dh>>2]|0)>>>0){if((c[ph>>2]|0)>>>0>((c[$g>>2]|0)-(c[Ng>>2]|0)|0)>>>0)c[$g>>2]=(c[Ng>>2]|0)+(c[ph>>2]|0);c[dh>>2]=c[ph>>2];c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[Ig>>2]|0)-(c[Ng>>2]|0)+2;c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ph>>2];c[bh>>2]=(c[bh>>2]|0)+1;if((c[ph>>2]|0)>>>0>4096)break;if(((c[yg>>2]|0)+(c[ph>>2]|0)|0)==(c[zg>>2]|0))break;}_h=c[Ng>>2]|0;if((d[(c[qh>>2]|0)+(c[ph>>2]|0)>>0]|0|0)<(d[(c[yg>>2]|0)+(c[ph>>2]|0)>>0]|0|0)){c[c[Zg>>2]>>2]=_h;c[Rg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=56;break;}c[Zg>>2]=(c[oh>>2]|0)+4;c[Ng>>2]=c[(c[oh>>2]|0)+4>>2];}else{c[c[_g>>2]>>2]=_h;c[Sg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=59;break;}c[_g>>2]=c[oh>>2];c[Ng>>2]=c[c[oh>>2]>>2];}}if((dj|0)==56){dj=0;c[Zg>>2]=ah;}else if((dj|0)==59){dj=0;c[_g>>2]=ah;}c[c[_g>>2]>>2]=0;c[c[Zg>>2]>>2]=0;c[(c[wg>>2]|0)+24>>2]=(c[$g>>2]|0)-8;c[vg>>2]=c[bh>>2];}}while(0);c[Ah>>2]=c[vg>>2];break a;break;}case 7:case 6:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Hd>>2]=c[Bh>>2];c[Id>>2]=_h;c[Jd>>2]=Qh;c[Kd>>2]=Ph;c[Ld>>2]=Zi;c[Md>>2]=_i;c[Nd>>2]=Uh;c[Od>>2]=Zh;c[Pd>>2]=aj;c[Qd>>2]=6;if((c[(c[Id>>2]|0)+20>>2]|0)>>>0<4095)fj=c[(c[Id>>2]|0)+20>>2]|0;else fj=4095;c[Rd>>2]=fj;c[Sd>>2]=c[(c[Hd>>2]|0)+4>>2];c[Td>>2]=(c[Jd>>2]|0)-(c[Sd>>2]|0);c[Ud>>2]=c[(c[Id>>2]|0)+8>>2];c[Vd>>2]=(c[Qd>>2]|0)==3?3:4;c[Wd>>2]=c[(c[Hd>>2]|0)+36>>2];c[Xd>>2]=Sj(c[Jd>>2]|0,c[Ud>>2]|0,c[Qd>>2]|0)|0;c[Yd>>2]=c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2];c[Zd>>2]=c[(c[Hd>>2]|0)+44>>2];c[_d>>2]=(c[(c[Id>>2]|0)+4>>2]|0)-1;c[$d>>2]=(1<<c[_d>>2])-1;c[ae>>2]=0;c[be>>2]=0;c[ce>>2]=c[(c[Hd>>2]|0)+8>>2];c[de>>2]=c[(c[Hd>>2]|0)+12>>2];c[ee>>2]=(c[ce>>2]|0)+(c[de>>2]|0);c[fe>>2]=(c[Sd>>2]|0)+(c[de>>2]|0);if((c[$d>>2]|0)>>>0>=(c[Td>>2]|0)>>>0)gj=0;else gj=(c[Td>>2]|0)-(c[$d>>2]|0)|0;c[ge>>2]=gj;c[he>>2]=c[(c[Hd>>2]|0)+16>>2];c[ie>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2);c[je>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2)+4;c[ke>>2]=(c[Td>>2]|0)+8+1;c[me>>2]=0;c[ne>>2]=1<<c[(c[Id>>2]|0)+12>>2];c[oe>>2]=(c[Pd>>2]|0)-1;c[pe>>2]=3+(c[Nd>>2]|0);c[qe>>2]=c[Nd>>2];while(1){if((c[qe>>2]|0)>>>0>=(c[pe>>2]|0)>>>0){dj=190;break;}aj=c[Md>>2]|0;if((c[qe>>2]|0)==3)hj=(c[aj>>2]|0)-1|0;else hj=c[aj+(c[qe>>2]<<2)>>2]|0;c[re>>2]=hj;c[se>>2]=(c[Td>>2]|0)-(c[re>>2]|0);c[te>>2]=0;if(((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[de>>2]|0)|0)>>>0){aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0;if((aj|0)==(mm((c[Jd>>2]|0)+(0-(c[re>>2]|0))|0,c[Vd>>2]|0)|0)){aj=Tj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[Jd>>2]|0)+(c[Vd>>2]|0)+(0-(c[re>>2]|0))|0,c[Kd>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}else{c[ue>>2]=(c[ce>>2]|0)+(c[se>>2]|0);if((c[Ld>>2]|0?(((c[de>>2]|0)-1-(c[se>>2]|0)|0)>>>0>=3?((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[he>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0,(aj|0)==(mm(c[ue>>2]|0,c[Vd>>2]|0)|0)):0){aj=Uj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[ue>>2]|0)+(c[Vd>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}if((c[te>>2]|0)>>>0>(c[oe>>2]|0)>>>0?(c[oe>>2]=c[te>>2],c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[qe>>2]|0)-(c[Nd>>2]|0),c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[te>>2],c[me>>2]=(c[me>>2]|0)+1,((c[te>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[te>>2]|0)|0)==(c[Kd>>2]|0))|0):0){dj=188;break;}c[qe>>2]=(c[qe>>2]|0)+1;}do{if((dj|0)==188){dj=0;c[Gd>>2]=c[me>>2];}else if((dj|0)==190){dj=0;if(((c[Qd>>2]|0)==3?(c[oe>>2]|0)>>>0<(c[Qd>>2]|0)>>>0:0)?(c[ve>>2]=nm(c[Hd>>2]|0,c[Jd>>2]|0)|0,((c[ve>>2]|0)>>>0>(c[he>>2]|0)>>>0?((c[Td>>2]|0)-(c[ve>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ld>>2]|0?(c[ve>>2]|0)>>>0<(c[de>>2]|0)>>>0:0){c[ye>>2]=(c[ce>>2]|0)+(c[ve>>2]|0);c[we>>2]=Uj(c[Jd>>2]|0,c[ye>>2]|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;}else{c[xe>>2]=(c[Sd>>2]|0)+(c[ve>>2]|0);c[we>>2]=Tj(c[Jd>>2]|0,c[xe>>2]|0,c[Kd>>2]|0)|0;}if((c[we>>2]|0)>>>0>=(c[Qd>>2]|0)>>>0?(c[oe>>2]=c[we>>2],c[c[Od>>2]>>2]=(c[Td>>2]|0)-(c[ve>>2]|0)+2,c[(c[Od>>2]|0)+4>>2]=c[we>>2],c[me>>2]=1,((c[we>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[we>>2]|0)|0)==(c[Kd>>2]|0))|0):0){c[(c[Hd>>2]|0)+24>>2]=(c[Td>>2]|0)+1;c[Gd>>2]=1;break;}}c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2]=c[Td>>2];while(1){aj=c[ne>>2]|0;c[ne>>2]=aj+-1;if(!aj)break;if((c[Yd>>2]|0)>>>0<=(c[he>>2]|0)>>>0)break;c[ze>>2]=(c[Zd>>2]|0)+((c[Yd>>2]&c[$d>>2])<<1<<2);c[Ae>>2]=(c[ae>>2]|0)>>>0<(c[be>>2]|0)>>>0?c[ae>>2]|0:c[be>>2]|0;if(c[Ld>>2]|0?((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0<(c[de>>2]|0)>>>0:0){c[Be>>2]=(c[ce>>2]|0)+(c[Yd>>2]|0);aj=Uj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;if(((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0>=(c[de>>2]|0)>>>0)c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);}else{c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);aj=Tj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;}if((c[Ae>>2]|0)>>>0>(c[oe>>2]|0)>>>0){if((c[Ae>>2]|0)>>>0>((c[ke>>2]|0)-(c[Yd>>2]|0)|0)>>>0)c[ke>>2]=(c[Yd>>2]|0)+(c[Ae>>2]|0);c[oe>>2]=c[Ae>>2];c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[Td>>2]|0)-(c[Yd>>2]|0)+2;c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[Ae>>2];c[me>>2]=(c[me>>2]|0)+1;if((c[Ae>>2]|0)>>>0>4096)break;if(((c[Jd>>2]|0)+(c[Ae>>2]|0)|0)==(c[Kd>>2]|0))break;}aj=c[Yd>>2]|0;if((d[(c[Be>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)<(d[(c[Jd>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)){c[c[ie>>2]>>2]=aj;c[ae>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=215;break;}c[ie>>2]=(c[ze>>2]|0)+4;c[Yd>>2]=c[(c[ze>>2]|0)+4>>2];}else{c[c[je>>2]>>2]=aj;c[be>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=218;break;}c[je>>2]=c[ze>>2];c[Yd>>2]=c[c[ze>>2]>>2];}}if((dj|0)==215){dj=0;c[ie>>2]=le;}else if((dj|0)==218){dj=0;c[je>>2]=le;}c[c[je>>2]>>2]=0;c[c[ie>>2]>>2]=0;c[(c[Hd>>2]|0)+24>>2]=(c[ke>>2]|0)-8;c[Gd>>2]=c[me>>2];}}while(0);c[Ah>>2]=c[Gd>>2];break a;break;}case 5:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[De>>2]=c[Bh>>2];c[Ee>>2]=aj;c[Fe>>2]=Zh;c[Ge>>2]=Uh;c[He>>2]=_i;c[Ie>>2]=Zi;c[Je>>2]=Ph;c[Ke>>2]=Qh;c[Le>>2]=_h;c[Me>>2]=5;if((c[(c[Ee>>2]|0)+20>>2]|0)>>>0<4095)ij=c[(c[Ee>>2]|0)+20>>2]|0;else ij=4095;c[Ne>>2]=ij;c[Oe>>2]=c[(c[De>>2]|0)+4>>2];c[Pe>>2]=(c[Fe>>2]|0)-(c[Oe>>2]|0);c[Qe>>2]=c[(c[Ee>>2]|0)+8>>2];c[Re>>2]=(c[Me>>2]|0)==3?3:4;c[Se>>2]=c[(c[De>>2]|0)+36>>2];c[Te>>2]=Sj(c[Fe>>2]|0,c[Qe>>2]|0,c[Me>>2]|0)|0;c[Ue>>2]=c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2];c[Ve>>2]=c[(c[De>>2]|0)+44>>2];c[We>>2]=(c[(c[Ee>>2]|0)+4>>2]|0)-1;c[Xe>>2]=(1<<c[We>>2])-1;c[Ye>>2]=0;c[Ze>>2]=0;c[_e>>2]=c[(c[De>>2]|0)+8>>2];c[$e>>2]=c[(c[De>>2]|0)+12>>2];c[af>>2]=(c[_e>>2]|0)+(c[$e>>2]|0);c[bf>>2]=(c[Oe>>2]|0)+(c[$e>>2]|0);if((c[Xe>>2]|0)>>>0>=(c[Pe>>2]|0)>>>0)jj=0;else jj=(c[Pe>>2]|0)-(c[Xe>>2]|0)|0;c[cf>>2]=jj;c[df>>2]=c[(c[De>>2]|0)+16>>2];c[ef>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2);c[ff>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2)+4;c[gf>>2]=(c[Pe>>2]|0)+8+1;c[jf>>2]=0;c[kf>>2]=1<<c[(c[Ee>>2]|0)+12>>2];c[lf>>2]=(c[Le>>2]|0)-1;c[mf>>2]=3+(c[Je>>2]|0);c[nf>>2]=c[Je>>2];while(1){if((c[nf>>2]|0)>>>0>=(c[mf>>2]|0)>>>0){dj=137;break;}_h=c[Ie>>2]|0;if((c[nf>>2]|0)==3)kj=(c[_h>>2]|0)-1|0;else kj=c[_h+(c[nf>>2]<<2)>>2]|0;c[of>>2]=kj;c[pf>>2]=(c[Pe>>2]|0)-(c[of>>2]|0);c[qf>>2]=0;if(((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[$e>>2]|0)|0)>>>0){_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0;if((_h|0)==(mm((c[Fe>>2]|0)+(0-(c[of>>2]|0))|0,c[Re>>2]|0)|0)){_h=Tj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[Fe>>2]|0)+(c[Re>>2]|0)+(0-(c[of>>2]|0))|0,c[Ge>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}else{c[rf>>2]=(c[_e>>2]|0)+(c[pf>>2]|0);if((c[He>>2]|0?(((c[$e>>2]|0)-1-(c[pf>>2]|0)|0)>>>0>=3?((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[df>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0,(_h|0)==(mm(c[rf>>2]|0,c[Re>>2]|0)|0)):0){_h=Uj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[rf>>2]|0)+(c[Re>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}if((c[qf>>2]|0)>>>0>(c[lf>>2]|0)>>>0?(c[lf>>2]=c[qf>>2],c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[nf>>2]|0)-(c[Je>>2]|0),c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[qf>>2],c[jf>>2]=(c[jf>>2]|0)+1,((c[qf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[qf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){dj=135;break;}c[nf>>2]=(c[nf>>2]|0)+1;}do{if((dj|0)==135){dj=0;c[Ce>>2]=c[jf>>2];}else if((dj|0)==137){dj=0;if(((c[Me>>2]|0)==3?(c[lf>>2]|0)>>>0<(c[Me>>2]|0)>>>0:0)?(c[sf>>2]=nm(c[De>>2]|0,c[Fe>>2]|0)|0,((c[sf>>2]|0)>>>0>(c[df>>2]|0)>>>0?((c[Pe>>2]|0)-(c[sf>>2]|0)|0)>>>0<262144:0)|0):0){if(c[He>>2]|0?(c[sf>>2]|0)>>>0<(c[$e>>2]|0)>>>0:0){c[vf>>2]=(c[_e>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Uj(c[Fe>>2]|0,c[vf>>2]|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;}else{c[uf>>2]=(c[Oe>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Tj(c[Fe>>2]|0,c[uf>>2]|0,c[Ge>>2]|0)|0;}if((c[tf>>2]|0)>>>0>=(c[Me>>2]|0)>>>0?(c[lf>>2]=c[tf>>2],c[c[Ke>>2]>>2]=(c[Pe>>2]|0)-(c[sf>>2]|0)+2,c[(c[Ke>>2]|0)+4>>2]=c[tf>>2],c[jf>>2]=1,((c[tf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[tf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){c[(c[De>>2]|0)+24>>2]=(c[Pe>>2]|0)+1;c[Ce>>2]=1;break;}}c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2]=c[Pe>>2];while(1){_h=c[kf>>2]|0;c[kf>>2]=_h+-1;if(!_h)break;if((c[Ue>>2]|0)>>>0<=(c[df>>2]|0)>>>0)break;c[wf>>2]=(c[Ve>>2]|0)+((c[Ue>>2]&c[Xe>>2])<<1<<2);c[xf>>2]=(c[Ye>>2]|0)>>>0<(c[Ze>>2]|0)>>>0?c[Ye>>2]|0:c[Ze>>2]|0;if(c[He>>2]|0?((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0<(c[$e>>2]|0)>>>0:0){c[yf>>2]=(c[_e>>2]|0)+(c[Ue>>2]|0);_h=Uj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;if(((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0>=(c[$e>>2]|0)>>>0)c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);}else{c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);_h=Tj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;}if((c[xf>>2]|0)>>>0>(c[lf>>2]|0)>>>0){if((c[xf>>2]|0)>>>0>((c[gf>>2]|0)-(c[Ue>>2]|0)|0)>>>0)c[gf>>2]=(c[Ue>>2]|0)+(c[xf>>2]|0);c[lf>>2]=c[xf>>2];c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[Pe>>2]|0)-(c[Ue>>2]|0)+2;c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[xf>>2];c[jf>>2]=(c[jf>>2]|0)+1;if((c[xf>>2]|0)>>>0>4096)break;if(((c[Fe>>2]|0)+(c[xf>>2]|0)|0)==(c[Ge>>2]|0))break;}_h=c[Ue>>2]|0;if((d[(c[yf>>2]|0)+(c[xf>>2]|0)>>0]|0|0)<(d[(c[Fe>>2]|0)+(c[xf>>2]|0)>>0]|0|0)){c[c[ef>>2]>>2]=_h;c[Ye>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=162;break;}c[ef>>2]=(c[wf>>2]|0)+4;c[Ue>>2]=c[(c[wf>>2]|0)+4>>2];}else{c[c[ff>>2]>>2]=_h;c[Ze>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=165;break;}c[ff>>2]=c[wf>>2];c[Ue>>2]=c[c[wf>>2]>>2];}}if((dj|0)==162){dj=0;c[ef>>2]=hf;}else if((dj|0)==165){dj=0;c[ff>>2]=hf;}c[c[ff>>2]>>2]=0;c[c[ef>>2]>>2]=0;c[(c[De>>2]|0)+24>>2]=(c[gf>>2]|0)-8;c[Ce>>2]=c[jf>>2];}}while(0);c[Ah>>2]=c[Ce>>2];break a;break;}default:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Af>>2]=c[Bh>>2];c[Bf>>2]=_h;c[Cf>>2]=Qh;c[Df>>2]=Ph;c[Ef>>2]=Zi;c[Ff>>2]=_i;c[Gf>>2]=Uh;c[Hf>>2]=Zh;c[If>>2]=aj;c[Jf>>2]=4;if((c[(c[Bf>>2]|0)+20>>2]|0)>>>0<4095)lj=c[(c[Bf>>2]|0)+20>>2]|0;else lj=4095;c[Kf>>2]=lj;c[Lf>>2]=c[(c[Af>>2]|0)+4>>2];c[Mf>>2]=(c[Cf>>2]|0)-(c[Lf>>2]|0);c[Nf>>2]=c[(c[Bf>>2]|0)+8>>2];c[Of>>2]=(c[Jf>>2]|0)==3?3:4;c[Pf>>2]=c[(c[Af>>2]|0)+36>>2];c[Qf>>2]=Sj(c[Cf>>2]|0,c[Nf>>2]|0,c[Jf>>2]|0)|0;c[Rf>>2]=c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2];c[Sf>>2]=c[(c[Af>>2]|0)+44>>2];c[Tf>>2]=(c[(c[Bf>>2]|0)+4>>2]|0)-1;c[Uf>>2]=(1<<c[Tf>>2])-1;c[Vf>>2]=0;c[Wf>>2]=0;c[Xf>>2]=c[(c[Af>>2]|0)+8>>2];c[Yf>>2]=c[(c[Af>>2]|0)+12>>2];c[Zf>>2]=(c[Xf>>2]|0)+(c[Yf>>2]|0);c[_f>>2]=(c[Lf>>2]|0)+(c[Yf>>2]|0);if((c[Uf>>2]|0)>>>0>=(c[Mf>>2]|0)>>>0)mj=0;else mj=(c[Mf>>2]|0)-(c[Uf>>2]|0)|0;c[$f>>2]=mj;c[ag>>2]=c[(c[Af>>2]|0)+16>>2];c[bg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2);c[cg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2)+4;c[dg>>2]=(c[Mf>>2]|0)+8+1;c[fg>>2]=0;c[gg>>2]=1<<c[(c[Bf>>2]|0)+12>>2];c[hg>>2]=(c[If>>2]|0)-1;c[ig>>2]=3+(c[Gf>>2]|0);c[jg>>2]=c[Gf>>2];while(1){if((c[jg>>2]|0)>>>0>=(c[ig>>2]|0)>>>0){dj=84;break;}aj=c[Ff>>2]|0;if((c[jg>>2]|0)==3)nj=(c[aj>>2]|0)-1|0;else nj=c[aj+(c[jg>>2]<<2)>>2]|0;c[kg>>2]=nj;c[lg>>2]=(c[Mf>>2]|0)-(c[kg>>2]|0);c[mg>>2]=0;if(((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[Yf>>2]|0)|0)>>>0){aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0;if((aj|0)==(mm((c[Cf>>2]|0)+(0-(c[kg>>2]|0))|0,c[Of>>2]|0)|0)){aj=Tj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[Cf>>2]|0)+(c[Of>>2]|0)+(0-(c[kg>>2]|0))|0,c[Df>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}else{c[ng>>2]=(c[Xf>>2]|0)+(c[lg>>2]|0);if((c[Ef>>2]|0?(((c[Yf>>2]|0)-1-(c[lg>>2]|0)|0)>>>0>=3?((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[ag>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0,(aj|0)==(mm(c[ng>>2]|0,c[Of>>2]|0)|0)):0){aj=Uj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[ng>>2]|0)+(c[Of>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}if((c[mg>>2]|0)>>>0>(c[hg>>2]|0)>>>0?(c[hg>>2]=c[mg>>2],c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[jg>>2]|0)-(c[Gf>>2]|0),c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[mg>>2],c[fg>>2]=(c[fg>>2]|0)+1,((c[mg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[mg>>2]|0)|0)==(c[Df>>2]|0))|0):0){dj=82;break;}c[jg>>2]=(c[jg>>2]|0)+1;}do{if((dj|0)==82){dj=0;c[zf>>2]=c[fg>>2];}else if((dj|0)==84){dj=0;if(((c[Jf>>2]|0)==3?(c[hg>>2]|0)>>>0<(c[Jf>>2]|0)>>>0:0)?(c[og>>2]=nm(c[Af>>2]|0,c[Cf>>2]|0)|0,((c[og>>2]|0)>>>0>(c[ag>>2]|0)>>>0?((c[Mf>>2]|0)-(c[og>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ef>>2]|0?(c[og>>2]|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[rg>>2]=(c[Xf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Uj(c[Cf>>2]|0,c[rg>>2]|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;}else{c[qg>>2]=(c[Lf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Tj(c[Cf>>2]|0,c[qg>>2]|0,c[Df>>2]|0)|0;}if((c[pg>>2]|0)>>>0>=(c[Jf>>2]|0)>>>0?(c[hg>>2]=c[pg>>2],c[c[Hf>>2]>>2]=(c[Mf>>2]|0)-(c[og>>2]|0)+2,c[(c[Hf>>2]|0)+4>>2]=c[pg>>2],c[fg>>2]=1,((c[pg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[pg>>2]|0)|0)==(c[Df>>2]|0))|0):0){c[(c[Af>>2]|0)+24>>2]=(c[Mf>>2]|0)+1;c[zf>>2]=1;break;}}c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2]=c[Mf>>2];while(1){aj=c[gg>>2]|0;c[gg>>2]=aj+-1;if(!aj)break;if((c[Rf>>2]|0)>>>0<=(c[ag>>2]|0)>>>0)break;c[sg>>2]=(c[Sf>>2]|0)+((c[Rf>>2]&c[Uf>>2])<<1<<2);c[tg>>2]=(c[Vf>>2]|0)>>>0<(c[Wf>>2]|0)>>>0?c[Vf>>2]|0:c[Wf>>2]|0;if(c[Ef>>2]|0?((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[ug>>2]=(c[Xf>>2]|0)+(c[Rf>>2]|0);aj=Uj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;if(((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0>=(c[Yf>>2]|0)>>>0)c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);}else{c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);aj=Tj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;}if((c[tg>>2]|0)>>>0>(c[hg>>2]|0)>>>0){if((c[tg>>2]|0)>>>0>((c[dg>>2]|0)-(c[Rf>>2]|0)|0)>>>0)c[dg>>2]=(c[Rf>>2]|0)+(c[tg>>2]|0);c[hg>>2]=c[tg>>2];c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[Mf>>2]|0)-(c[Rf>>2]|0)+2;c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[tg>>2];c[fg>>2]=(c[fg>>2]|0)+1;if((c[tg>>2]|0)>>>0>4096)break;if(((c[Cf>>2]|0)+(c[tg>>2]|0)|0)==(c[Df>>2]|0))break;}aj=c[Rf>>2]|0;if((d[(c[ug>>2]|0)+(c[tg>>2]|0)>>0]|0|0)<(d[(c[Cf>>2]|0)+(c[tg>>2]|0)>>0]|0|0)){c[c[bg>>2]>>2]=aj;c[Vf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=109;break;}c[bg>>2]=(c[sg>>2]|0)+4;c[Rf>>2]=c[(c[sg>>2]|0)+4>>2];}else{c[c[cg>>2]>>2]=aj;c[Wf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=112;break;}c[cg>>2]=c[sg>>2];c[Rf>>2]=c[c[sg>>2]>>2];}}if((dj|0)==109){dj=0;c[bg>>2]=eg;}else if((dj|0)==112){dj=0;c[cg>>2]=eg;}c[c[cg>>2]>>2]=0;c[c[bg>>2]>>2]=0;c[(c[Af>>2]|0)+24>>2]=(c[dg>>2]|0)-8;c[zf>>2]=c[fg>>2];}}while(0);c[Ah>>2]=c[zf>>2];break a;}}}}while(0);c[ki>>2]=c[Ah>>2];if(!(c[ki>>2]|0)){c[Vh>>2]=(c[Vh>>2]|0)+1;continue;}c[li>>2]=0;while(1){if((c[li>>2]|0)>>>0>=3)break;c[(c[bi>>2]|0)+16+(c[li>>2]<<2)>>2]=c[(c[Nh>>2]|0)+(c[li>>2]<<2)>>2];c[li>>2]=(c[li>>2]|0)+1;}c[(c[bi>>2]|0)+8>>2]=1;c[(c[bi>>2]|0)+12>>2]=c[ii>>2];c[mi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)+4>>2];do{if((c[mi>>2]|0)>>>0<=(c[$h>>2]|0)>>>0){c[ni>>2]=om(di,c[Wh>>2]|0,c[ii>>2]|0,c[Th>>2]|0)|0;c[oi>>2]=0;while(1){if((c[oi>>2]|0)>>>0>=(c[ai>>2]|0)>>>0)break;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=1073741824;c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=0;while(1){if((c[pi>>2]|0)>>>0>=(c[ki>>2]|0)>>>0)break;c[qi>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)>>2];c[ri>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)+4>>2];pm(si,c[Nh>>2]|0,c[qi>>2]|0,c[ji>>2]|0);while(1){if((c[oi>>2]|0)>>>0>(c[ri>>2]|0)>>>0)break;aj=c[ni>>2]|0;Zh=c[oi>>2]|0;Uh=c[Th>>2]|0;_i=c[Rh>>2]|0;c[yd>>2]=c[qi>>2];c[zd>>2]=Zh;c[Ad>>2]=Uh;c[Bd>>2]=_i;c[Dd>>2]=qm((c[yd>>2]|0)+1|0)|0;c[Ed>>2]=(c[zd>>2]|0)-3;if(c[(c[Ad>>2]|0)+56>>2]|0){_i=(qm((c[Ed>>2]|0)+1|0)|0)+16|0;c[xd>>2]=_i+(c[Dd>>2]|0);}else{_i=(c[Dd>>2]|0)+(c[(c[Ad>>2]|0)+52>>2]|0)|0;c[Cd>>2]=_i-(qm((c[(c[(c[Ad>>2]|0)+12>>2]|0)+(c[Dd>>2]<<2)>>2]|0)+1|0)|0);if((c[Bd>>2]|0)<2&(c[Dd>>2]|0)>>>0>=20)c[Cd>>2]=(c[Cd>>2]|0)+((c[Dd>>2]|0)-19<<1);c[Fd>>2]=rm(c[Ed>>2]|0)|0;_i=(c[5840+(c[Fd>>2]<<2)>>2]|0)+(c[(c[Ad>>2]|0)+48>>2]|0)|0;Uh=_i-(qm((c[(c[(c[Ad>>2]|0)+8>>2]|0)+(c[Fd>>2]<<2)>>2]|0)+1|0)|0)|0;c[Cd>>2]=(c[Cd>>2]|0)+Uh;c[xd>>2]=c[Cd>>2];}c[ti>>2]=aj+(c[xd>>2]|0);c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=c[oi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+4>>2]=c[qi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+12>>2]=c[ii>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=c[ti>>2];aj=(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+16|0;c[aj>>2]=c[si>>2];c[aj+4>>2]=c[si+4>>2];c[aj+8>>2]=c[si+8>>2];c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=(c[pi>>2]|0)+1;}c[fi>>2]=(c[oi>>2]|0)-1;c[ei>>2]=1;b:while(1){if((c[ei>>2]|0)>>>0>(c[fi>>2]|0)>>>0){dj=504;break;}c[ui>>2]=(c[Vh>>2]|0)+(c[ei>>2]|0);if((c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+8>>2]|0)==1)oj=(c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+12>>2]|0)+1|0;else oj=1;c[vi>>2]=oj;if((c[ei>>2]|0)>>>0>(c[vi>>2]|0)>>>0){aj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[vi>>2]|0)|0)*28|0)>>2]|0;c[wi>>2]=aj+(sm((c[ui>>2]|0)+(0-(c[vi>>2]|0))|0,c[vi>>2]|0,c[Th>>2]|0)|0);}else c[wi>>2]=tm(di,c[Wh>>2]|0,c[vi>>2]|0,c[Th>>2]|0)|0;if((c[wi>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0)){c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+4>>2]=0;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]=c[vi>>2];c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]=c[wi>>2];aj=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Uh=(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+16|0;c[aj>>2]=c[Uh>>2];c[aj+4>>2]=c[Uh+4>>2];c[aj+8>>2]=c[Uh+8>>2];}c:do{if((c[ui>>2]|0)>>>0<=(c[Yh>>2]|0)>>>0){if((c[ei>>2]|0)==(c[fi>>2]|0)){dj=504;break b;}if((c[Rh>>2]|0)==0?(c[(c[bi>>2]|0)+(((c[ei>>2]|0)+1|0)*28|0)>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0):0)break;c[xi>>2]=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)!=1&1;if((c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)==1)pj=c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]|0;else pj=0;c[yi>>2]=pj;if((c[ei>>2]|0)>>>0>(c[yi>>2]|0)>>>0)qj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[yi>>2]|0)|0)*28|0)>>2]|0;else qj=0;c[zi>>2]=qj;Uh=c[zi>>2]|0;c[Ai>>2]=Uh+(um((c[ui>>2]|0)+(0-(c[yi>>2]|0))|0,c[yi>>2]|0,c[Th>>2]|0)|0);Uh=c[Oh>>2]|0;aj=c[ui>>2]|0;_i=c[Xh>>2]|0;Zh=c[Sh>>2]|0;Zi=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Ph=c[xi>>2]|0;Qh=c[ci>>2]|0;_h=c[ai>>2]|0;c[nd>>2]=c[Lh>>2];c[od>>2]=Uh;c[pd>>2]=aj;c[qd>>2]=_i;c[rd>>2]=Zh;c[sd>>2]=Zi;c[td>>2]=Ph;c[ud>>2]=Qh;c[vd>>2]=_h;c[wd>>2]=c[(c[od>>2]|0)+16>>2];d:do{if((c[pd>>2]|0)>>>0<((c[(c[nd>>2]|0)+4>>2]|0)+(c[(c[nd>>2]|0)+24>>2]|0)|0)>>>0)c[md>>2]=0;else{_h=c[od>>2]|0;Qh=c[pd>>2]|0;Ph=c[qd>>2]|0;Zi=c[wd>>2]|0;Zh=c[rd>>2]|0;c[dd>>2]=c[nd>>2];c[ed>>2]=_h;c[fd>>2]=Qh;c[gd>>2]=Ph;c[hd>>2]=Zi;c[id>>2]=Zh;c[jd>>2]=c[(c[dd>>2]|0)+4>>2];c[kd>>2]=(c[fd>>2]|0)-(c[jd>>2]|0);c[ld>>2]=c[(c[dd>>2]|0)+24>>2];while(1){if((c[ld>>2]|0)>>>0>=(c[kd>>2]|0)>>>0)break;Zh=Rj(c[dd>>2]|0,c[ed>>2]|0,(c[jd>>2]|0)+(c[ld>>2]|0)|0,c[gd>>2]|0,c[hd>>2]|0,c[id>>2]|0)|0;c[ld>>2]=(c[ld>>2]|0)+Zh;}c[(c[dd>>2]|0)+24>>2]=c[kd>>2];switch(c[wd>>2]|0){case 3:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[ic>>2]=c[nd>>2];c[jc>>2]=Zh;c[kc>>2]=Zi;c[lc>>2]=Ph;c[mc>>2]=Qh;c[nc>>2]=_h;c[oc>>2]=_i;c[pc>>2]=aj;c[qc>>2]=Uh;c[rc>>2]=3;if((c[(c[jc>>2]|0)+20>>2]|0)>>>0<4095)rj=c[(c[jc>>2]|0)+20>>2]|0;else rj=4095;c[sc>>2]=rj;c[tc>>2]=c[(c[ic>>2]|0)+4>>2];c[uc>>2]=(c[kc>>2]|0)-(c[tc>>2]|0);c[vc>>2]=c[(c[jc>>2]|0)+8>>2];c[wc>>2]=(c[rc>>2]|0)==3?3:4;c[xc>>2]=c[(c[ic>>2]|0)+36>>2];c[yc>>2]=Sj(c[kc>>2]|0,c[vc>>2]|0,c[rc>>2]|0)|0;c[zc>>2]=c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2];c[Ac>>2]=c[(c[ic>>2]|0)+44>>2];c[Bc>>2]=(c[(c[jc>>2]|0)+4>>2]|0)-1;c[Cc>>2]=(1<<c[Bc>>2])-1;c[Dc>>2]=0;c[Ec>>2]=0;c[Fc>>2]=c[(c[ic>>2]|0)+8>>2];c[Gc>>2]=c[(c[ic>>2]|0)+12>>2];c[Hc>>2]=(c[Fc>>2]|0)+(c[Gc>>2]|0);c[Ic>>2]=(c[tc>>2]|0)+(c[Gc>>2]|0);if((c[Cc>>2]|0)>>>0>=(c[uc>>2]|0)>>>0)sj=0;else sj=(c[uc>>2]|0)-(c[Cc>>2]|0)|0;c[Jc>>2]=sj;c[Kc>>2]=c[(c[ic>>2]|0)+16>>2];c[Lc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2);c[Mc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2)+4;c[Nc>>2]=(c[uc>>2]|0)+8+1;c[Pc>>2]=0;c[Qc>>2]=1<<c[(c[jc>>2]|0)+12>>2];c[Rc>>2]=(c[qc>>2]|0)-1;c[Sc>>2]=3+(c[oc>>2]|0);c[Tc>>2]=c[oc>>2];while(1){if((c[Tc>>2]|0)>>>0>=(c[Sc>>2]|0)>>>0){dj=287;break;}Uh=c[nc>>2]|0;if((c[Tc>>2]|0)==3)tj=(c[Uh>>2]|0)-1|0;else tj=c[Uh+(c[Tc>>2]<<2)>>2]|0;c[Uc>>2]=tj;c[Vc>>2]=(c[uc>>2]|0)-(c[Uc>>2]|0);c[Wc>>2]=0;do{if(((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Gc>>2]|0)|0)>>>0){Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm((c[kc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[wc>>2]|0)|0))break;Uh=Tj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[kc>>2]|0)+(c[wc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[lc>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}else{c[Xc>>2]=(c[Fc>>2]|0)+(c[Vc>>2]|0);if(!(c[mc>>2]|0))break;if(!((((c[Gc>>2]|0)-1-(c[Vc>>2]|0)|0)>>>0>=3?((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Kc>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm(c[Xc>>2]|0,c[wc>>2]|0)|0))break;Uh=Uj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[Xc>>2]|0)+(c[wc>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}}while(0);if((c[Wc>>2]|0)>>>0>(c[Rc>>2]|0)>>>0?(c[Rc>>2]=c[Wc>>2],c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[Tc>>2]|0)-(c[oc>>2]|0),c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[Wc>>2],c[Pc>>2]=(c[Pc>>2]|0)+1,((c[Wc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Wc>>2]|0)|0)==(c[lc>>2]|0))|0):0){dj=285;break;}c[Tc>>2]=(c[Tc>>2]|0)+1;}e:do{if((dj|0)==285){dj=0;c[hc>>2]=c[Pc>>2];}else if((dj|0)==287){dj=0;do{if((c[rc>>2]|0)==3){if((c[Rc>>2]|0)>>>0>=(c[rc>>2]|0)>>>0)break;c[Yc>>2]=nm(c[ic>>2]|0,c[kc>>2]|0)|0;if(!(((c[Yc>>2]|0)>>>0>(c[Kc>>2]|0)>>>0?((c[uc>>2]|0)-(c[Yc>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[mc>>2]|0){if((c[Yc>>2]|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=292;break;}c[$c>>2]=(c[Fc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Uj(c[kc>>2]|0,c[$c>>2]|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;}else dj=292;}while(0);if((dj|0)==292){dj=0;c[_c>>2]=(c[tc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Tj(c[kc>>2]|0,c[_c>>2]|0,c[lc>>2]|0)|0;}if((c[Zc>>2]|0)>>>0<(c[rc>>2]|0)>>>0)break;c[Rc>>2]=c[Zc>>2];c[c[pc>>2]>>2]=(c[uc>>2]|0)-(c[Yc>>2]|0)+2;c[(c[pc>>2]|0)+4>>2]=c[Zc>>2];c[Pc>>2]=1;if(!(((c[Zc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Zc>>2]|0)|0)==(c[lc>>2]|0))|0))break;c[(c[ic>>2]|0)+24>>2]=(c[uc>>2]|0)+1;c[hc>>2]=1;break e;}}while(0);c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2]=c[uc>>2];while(1){Uh=c[Qc>>2]|0;c[Qc>>2]=Uh+-1;if(!Uh)break;if((c[zc>>2]|0)>>>0<=(c[Kc>>2]|0)>>>0)break;c[ad>>2]=(c[Ac>>2]|0)+((c[zc>>2]&c[Cc>>2])<<1<<2);c[bd>>2]=(c[Dc>>2]|0)>>>0<(c[Ec>>2]|0)>>>0?c[Dc>>2]|0:c[Ec>>2]|0;do{if(c[mc>>2]|0){if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=302;break;}c[cd>>2]=(c[Fc>>2]|0)+(c[zc>>2]|0);Uh=Uj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0<(c[Gc>>2]|0)>>>0)break;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);}else dj=302;}while(0);if((dj|0)==302){dj=0;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);Uh=Tj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;}if((c[bd>>2]|0)>>>0>(c[Rc>>2]|0)>>>0){if((c[bd>>2]|0)>>>0>((c[Nc>>2]|0)-(c[zc>>2]|0)|0)>>>0)c[Nc>>2]=(c[zc>>2]|0)+(c[bd>>2]|0);c[Rc>>2]=c[bd>>2];c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[uc>>2]|0)-(c[zc>>2]|0)+2;c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[bd>>2];c[Pc>>2]=(c[Pc>>2]|0)+1;if((c[bd>>2]|0)>>>0>4096)break;if(((c[kc>>2]|0)+(c[bd>>2]|0)|0)==(c[lc>>2]|0))break;}Uh=c[zc>>2]|0;if((d[(c[cd>>2]|0)+(c[bd>>2]|0)>>0]|0|0)<(d[(c[kc>>2]|0)+(c[bd>>2]|0)>>0]|0|0)){c[c[Lc>>2]>>2]=Uh;c[Dc>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=312;break;}c[Lc>>2]=(c[ad>>2]|0)+4;c[zc>>2]=c[(c[ad>>2]|0)+4>>2];}else{c[c[Mc>>2]>>2]=Uh;c[Ec>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=315;break;}c[Mc>>2]=c[ad>>2];c[zc>>2]=c[c[ad>>2]>>2];}}if((dj|0)==312){dj=0;c[Lc>>2]=Oc;}else if((dj|0)==315){dj=0;c[Mc>>2]=Oc;}c[c[Mc>>2]>>2]=0;c[c[Lc>>2]>>2]=0;c[(c[ic>>2]|0)+24>>2]=(c[Nc>>2]|0)-8;c[hc>>2]=c[Pc>>2];}}while(0);c[md>>2]=c[hc>>2];break d;break;}case 7:case 6:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[u>>2]=c[nd>>2];c[v>>2]=Uh;c[w>>2]=aj;c[x>>2]=_i;c[y>>2]=_h;c[z>>2]=Qh;c[A>>2]=Ph;c[B>>2]=Zi;c[C>>2]=Zh;c[D>>2]=6;if((c[(c[v>>2]|0)+20>>2]|0)>>>0<4095)uj=c[(c[v>>2]|0)+20>>2]|0;else uj=4095;c[E>>2]=uj;c[F>>2]=c[(c[u>>2]|0)+4>>2];c[G>>2]=(c[w>>2]|0)-(c[F>>2]|0);c[H>>2]=c[(c[v>>2]|0)+8>>2];c[I>>2]=(c[D>>2]|0)==3?3:4;c[J>>2]=c[(c[u>>2]|0)+36>>2];c[K>>2]=Sj(c[w>>2]|0,c[H>>2]|0,c[D>>2]|0)|0;c[L>>2]=c[(c[J>>2]|0)+(c[K>>2]<<2)>>2];c[M>>2]=c[(c[u>>2]|0)+44>>2];c[N>>2]=(c[(c[v>>2]|0)+4>>2]|0)-1;c[O>>2]=(1<<c[N>>2])-1;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=c[(c[u>>2]|0)+8>>2];c[S>>2]=c[(c[u>>2]|0)+12>>2];c[T>>2]=(c[R>>2]|0)+(c[S>>2]|0);c[U>>2]=(c[F>>2]|0)+(c[S>>2]|0);if((c[O>>2]|0)>>>0>=(c[G>>2]|0)>>>0)vj=0;else vj=(c[G>>2]|0)-(c[O>>2]|0)|0;c[V>>2]=vj;c[W>>2]=c[(c[u>>2]|0)+16>>2];c[X>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2);c[Y>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2)+4;c[Z>>2]=(c[G>>2]|0)+8+1;c[$>>2]=0;c[aa>>2]=1<<c[(c[v>>2]|0)+12>>2];c[ba>>2]=(c[C>>2]|0)-1;c[ca>>2]=3+(c[A>>2]|0);c[da>>2]=c[A>>2];while(1){if((c[da>>2]|0)>>>0>=(c[ca>>2]|0)>>>0){dj=446;break;}Zh=c[z>>2]|0;if((c[da>>2]|0)==3)wj=(c[Zh>>2]|0)-1|0;else wj=c[Zh+(c[da>>2]<<2)>>2]|0;c[ea>>2]=wj;c[fa>>2]=(c[G>>2]|0)-(c[ea>>2]|0);c[ga>>2]=0;do{if(((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[S>>2]|0)|0)>>>0){Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm((c[w>>2]|0)+(0-(c[ea>>2]|0))|0,c[I>>2]|0)|0))break;Zh=Tj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[w>>2]|0)+(c[I>>2]|0)+(0-(c[ea>>2]|0))|0,c[x>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}else{c[ha>>2]=(c[R>>2]|0)+(c[fa>>2]|0);if(!(c[y>>2]|0))break;if(!((((c[S>>2]|0)-1-(c[fa>>2]|0)|0)>>>0>=3?((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[W>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm(c[ha>>2]|0,c[I>>2]|0)|0))break;Zh=Uj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[ha>>2]|0)+(c[I>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}}while(0);if((c[ga>>2]|0)>>>0>(c[ba>>2]|0)>>>0?(c[ba>>2]=c[ga>>2],c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[da>>2]|0)-(c[A>>2]|0),c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[ga>>2],c[$>>2]=(c[$>>2]|0)+1,((c[ga>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ga>>2]|0)|0)==(c[x>>2]|0))|0):0){dj=444;break;}c[da>>2]=(c[da>>2]|0)+1;}f:do{if((dj|0)==444){dj=0;c[t>>2]=c[$>>2];}else if((dj|0)==446){dj=0;do{if((c[D>>2]|0)==3){if((c[ba>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[ia>>2]=nm(c[u>>2]|0,c[w>>2]|0)|0;if(!(((c[ia>>2]|0)>>>0>(c[W>>2]|0)>>>0?((c[G>>2]|0)-(c[ia>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[y>>2]|0){if((c[ia>>2]|0)>>>0>=(c[S>>2]|0)>>>0){dj=451;break;}c[la>>2]=(c[R>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Uj(c[w>>2]|0,c[la>>2]|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;}else dj=451;}while(0);if((dj|0)==451){dj=0;c[ka>>2]=(c[F>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Tj(c[w>>2]|0,c[ka>>2]|0,c[x>>2]|0)|0;}if((c[ja>>2]|0)>>>0<(c[D>>2]|0)>>>0)break;c[ba>>2]=c[ja>>2];c[c[B>>2]>>2]=(c[G>>2]|0)-(c[ia>>2]|0)+2;c[(c[B>>2]|0)+4>>2]=c[ja>>2];c[$>>2]=1;if(!(((c[ja>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ja>>2]|0)|0)==(c[x>>2]|0))|0))break;c[(c[u>>2]|0)+24>>2]=(c[G>>2]|0)+1;c[t>>2]=1;break f;}}while(0);c[(c[J>>2]|0)+(c[K>>2]<<2)>>2]=c[G>>2];while(1){Zh=c[aa>>2]|0;c[aa>>2]=Zh+-1;if(!Zh)break;if((c[L>>2]|0)>>>0<=(c[W>>2]|0)>>>0)break;c[ma>>2]=(c[M>>2]|0)+((c[L>>2]&c[O>>2])<<1<<2);c[na>>2]=(c[P>>2]|0)>>>0<(c[Q>>2]|0)>>>0?c[P>>2]|0:c[Q>>2]|0;do{if(c[y>>2]|0){if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0>=(c[S>>2]|0)>>>0){dj=461;break;}c[oa>>2]=(c[R>>2]|0)+(c[L>>2]|0);Zh=Uj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0<(c[S>>2]|0)>>>0)break;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);}else dj=461;}while(0);if((dj|0)==461){dj=0;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);Zh=Tj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;}if((c[na>>2]|0)>>>0>(c[ba>>2]|0)>>>0){if((c[na>>2]|0)>>>0>((c[Z>>2]|0)-(c[L>>2]|0)|0)>>>0)c[Z>>2]=(c[L>>2]|0)+(c[na>>2]|0);c[ba>>2]=c[na>>2];c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[G>>2]|0)-(c[L>>2]|0)+2;c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[na>>2];c[$>>2]=(c[$>>2]|0)+1;if((c[na>>2]|0)>>>0>4096)break;if(((c[w>>2]|0)+(c[na>>2]|0)|0)==(c[x>>2]|0))break;}Zh=c[L>>2]|0;if((d[(c[oa>>2]|0)+(c[na>>2]|0)>>0]|0|0)<(d[(c[w>>2]|0)+(c[na>>2]|0)>>0]|0|0)){c[c[X>>2]>>2]=Zh;c[P>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=471;break;}c[X>>2]=(c[ma>>2]|0)+4;c[L>>2]=c[(c[ma>>2]|0)+4>>2];}else{c[c[Y>>2]>>2]=Zh;c[Q>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=474;break;}c[Y>>2]=c[ma>>2];c[L>>2]=c[c[ma>>2]>>2];}}if((dj|0)==471){dj=0;c[X>>2]=_;}else if((dj|0)==474){dj=0;c[Y>>2]=_;}c[c[Y>>2]>>2]=0;c[c[X>>2]>>2]=0;c[(c[u>>2]|0)+24>>2]=(c[Z>>2]|0)-8;c[t>>2]=c[$>>2];}}while(0);c[md>>2]=c[t>>2];break d;break;}case 5:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[qa>>2]=c[nd>>2];c[ra>>2]=Zh;c[sa>>2]=Zi;c[ta>>2]=Ph;c[ua>>2]=Qh;c[va>>2]=_h;c[wa>>2]=_i;c[xa>>2]=aj;c[ya>>2]=Uh;c[za>>2]=5;if((c[(c[ra>>2]|0)+20>>2]|0)>>>0<4095)xj=c[(c[ra>>2]|0)+20>>2]|0;else xj=4095;c[Aa>>2]=xj;c[Ba>>2]=c[(c[qa>>2]|0)+4>>2];c[Ca>>2]=(c[sa>>2]|0)-(c[Ba>>2]|0);c[Da>>2]=c[(c[ra>>2]|0)+8>>2];c[Ea>>2]=(c[za>>2]|0)==3?3:4;c[Fa>>2]=c[(c[qa>>2]|0)+36>>2];c[Ga>>2]=Sj(c[sa>>2]|0,c[Da>>2]|0,c[za>>2]|0)|0;c[Ha>>2]=c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2];c[Ia>>2]=c[(c[qa>>2]|0)+44>>2];c[Ja>>2]=(c[(c[ra>>2]|0)+4>>2]|0)-1;c[Ka>>2]=(1<<c[Ja>>2])-1;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=c[(c[qa>>2]|0)+8>>2];c[Oa>>2]=c[(c[qa>>2]|0)+12>>2];c[Pa>>2]=(c[Na>>2]|0)+(c[Oa>>2]|0);c[Qa>>2]=(c[Ba>>2]|0)+(c[Oa>>2]|0);if((c[Ka>>2]|0)>>>0>=(c[Ca>>2]|0)>>>0)yj=0;else yj=(c[Ca>>2]|0)-(c[Ka>>2]|0)|0;c[Ra>>2]=yj;c[Sa>>2]=c[(c[qa>>2]|0)+16>>2];c[Ta>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2);c[Ua>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2)+4;c[Va>>2]=(c[Ca>>2]|0)+8+1;c[Xa>>2]=0;c[Ya>>2]=1<<c[(c[ra>>2]|0)+12>>2];c[Za>>2]=(c[ya>>2]|0)-1;c[_a>>2]=3+(c[wa>>2]|0);c[$a>>2]=c[wa>>2];while(1){if((c[$a>>2]|0)>>>0>=(c[_a>>2]|0)>>>0){dj=393;break;}Uh=c[va>>2]|0;if((c[$a>>2]|0)==3)zj=(c[Uh>>2]|0)-1|0;else zj=c[Uh+(c[$a>>2]<<2)>>2]|0;c[ab>>2]=zj;c[bb>>2]=(c[Ca>>2]|0)-(c[ab>>2]|0);c[cb>>2]=0;do{if(((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Oa>>2]|0)|0)>>>0){Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm((c[sa>>2]|0)+(0-(c[ab>>2]|0))|0,c[Ea>>2]|0)|0))break;Uh=Tj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[sa>>2]|0)+(c[Ea>>2]|0)+(0-(c[ab>>2]|0))|0,c[ta>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}else{c[db>>2]=(c[Na>>2]|0)+(c[bb>>2]|0);if(!(c[ua>>2]|0))break;if(!((((c[Oa>>2]|0)-1-(c[bb>>2]|0)|0)>>>0>=3?((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Sa>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm(c[db>>2]|0,c[Ea>>2]|0)|0))break;Uh=Uj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[db>>2]|0)+(c[Ea>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}}while(0);if((c[cb>>2]|0)>>>0>(c[Za>>2]|0)>>>0?(c[Za>>2]=c[cb>>2],c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[$a>>2]|0)-(c[wa>>2]|0),c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[cb>>2],c[Xa>>2]=(c[Xa>>2]|0)+1,((c[cb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[cb>>2]|0)|0)==(c[ta>>2]|0))|0):0){dj=391;break;}c[$a>>2]=(c[$a>>2]|0)+1;}g:do{if((dj|0)==391){dj=0;c[pa>>2]=c[Xa>>2];}else if((dj|0)==393){dj=0;do{if((c[za>>2]|0)==3){if((c[Za>>2]|0)>>>0>=(c[za>>2]|0)>>>0)break;c[eb>>2]=nm(c[qa>>2]|0,c[sa>>2]|0)|0;if(!(((c[eb>>2]|0)>>>0>(c[Sa>>2]|0)>>>0?((c[Ca>>2]|0)-(c[eb>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[ua>>2]|0){if((c[eb>>2]|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=398;break;}c[hb>>2]=(c[Na>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Uj(c[sa>>2]|0,c[hb>>2]|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;}else dj=398;}while(0);if((dj|0)==398){dj=0;c[gb>>2]=(c[Ba>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Tj(c[sa>>2]|0,c[gb>>2]|0,c[ta>>2]|0)|0;}if((c[fb>>2]|0)>>>0<(c[za>>2]|0)>>>0)break;c[Za>>2]=c[fb>>2];c[c[xa>>2]>>2]=(c[Ca>>2]|0)-(c[eb>>2]|0)+2;c[(c[xa>>2]|0)+4>>2]=c[fb>>2];c[Xa>>2]=1;if(!(((c[fb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[fb>>2]|0)|0)==(c[ta>>2]|0))|0))break;c[(c[qa>>2]|0)+24>>2]=(c[Ca>>2]|0)+1;c[pa>>2]=1;break g;}}while(0);c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2]=c[Ca>>2];while(1){Uh=c[Ya>>2]|0;c[Ya>>2]=Uh+-1;if(!Uh)break;if((c[Ha>>2]|0)>>>0<=(c[Sa>>2]|0)>>>0)break;c[ib>>2]=(c[Ia>>2]|0)+((c[Ha>>2]&c[Ka>>2])<<1<<2);c[jb>>2]=(c[La>>2]|0)>>>0<(c[Ma>>2]|0)>>>0?c[La>>2]|0:c[Ma>>2]|0;do{if(c[ua>>2]|0){if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=408;break;}c[kb>>2]=(c[Na>>2]|0)+(c[Ha>>2]|0);Uh=Uj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0<(c[Oa>>2]|0)>>>0)break;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);}else dj=408;}while(0);if((dj|0)==408){dj=0;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);Uh=Tj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;}if((c[jb>>2]|0)>>>0>(c[Za>>2]|0)>>>0){if((c[jb>>2]|0)>>>0>((c[Va>>2]|0)-(c[Ha>>2]|0)|0)>>>0)c[Va>>2]=(c[Ha>>2]|0)+(c[jb>>2]|0);c[Za>>2]=c[jb>>2];c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[Ca>>2]|0)-(c[Ha>>2]|0)+2;c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[jb>>2];c[Xa>>2]=(c[Xa>>2]|0)+1;if((c[jb>>2]|0)>>>0>4096)break;if(((c[sa>>2]|0)+(c[jb>>2]|0)|0)==(c[ta>>2]|0))break;}Uh=c[Ha>>2]|0;if((d[(c[kb>>2]|0)+(c[jb>>2]|0)>>0]|0|0)<(d[(c[sa>>2]|0)+(c[jb>>2]|0)>>0]|0|0)){c[c[Ta>>2]>>2]=Uh;c[La>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=418;break;}c[Ta>>2]=(c[ib>>2]|0)+4;c[Ha>>2]=c[(c[ib>>2]|0)+4>>2];}else{c[c[Ua>>2]>>2]=Uh;c[Ma>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=421;break;}c[Ua>>2]=c[ib>>2];c[Ha>>2]=c[c[ib>>2]>>2];}}if((dj|0)==418){dj=0;c[Ta>>2]=Wa;}else if((dj|0)==421){dj=0;c[Ua>>2]=Wa;}c[c[Ua>>2]>>2]=0;c[c[Ta>>2]>>2]=0;c[(c[qa>>2]|0)+24>>2]=(c[Va>>2]|0)-8;c[pa>>2]=c[Xa>>2];}}while(0);c[md>>2]=c[pa>>2];break d;break;}default:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[mb>>2]=c[nd>>2];c[nb>>2]=Uh;c[ob>>2]=aj;c[pb>>2]=_i;c[qb>>2]=_h;c[rb>>2]=Qh;c[sb>>2]=Ph;c[tb>>2]=Zi;c[ub>>2]=Zh;c[vb>>2]=4;if((c[(c[nb>>2]|0)+20>>2]|0)>>>0<4095)Aj=c[(c[nb>>2]|0)+20>>2]|0;else Aj=4095;c[wb>>2]=Aj;c[xb>>2]=c[(c[mb>>2]|0)+4>>2];c[yb>>2]=(c[ob>>2]|0)-(c[xb>>2]|0);c[zb>>2]=c[(c[nb>>2]|0)+8>>2];c[Ab>>2]=(c[vb>>2]|0)==3?3:4;c[Bb>>2]=c[(c[mb>>2]|0)+36>>2];c[Cb>>2]=Sj(c[ob>>2]|0,c[zb>>2]|0,c[vb>>2]|0)|0;c[Db>>2]=c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2];c[Eb>>2]=c[(c[mb>>2]|0)+44>>2];c[Fb>>2]=(c[(c[nb>>2]|0)+4>>2]|0)-1;c[Gb>>2]=(1<<c[Fb>>2])-1;c[Hb>>2]=0;c[Ib>>2]=0;c[Jb>>2]=c[(c[mb>>2]|0)+8>>2];c[Kb>>2]=c[(c[mb>>2]|0)+12>>2];c[Lb>>2]=(c[Jb>>2]|0)+(c[Kb>>2]|0);c[Mb>>2]=(c[xb>>2]|0)+(c[Kb>>2]|0);if((c[Gb>>2]|0)>>>0>=(c[yb>>2]|0)>>>0)Bj=0;else Bj=(c[yb>>2]|0)-(c[Gb>>2]|0)|0;c[Nb>>2]=Bj;c[Ob>>2]=c[(c[mb>>2]|0)+16>>2];c[Pb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2);c[Qb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2)+4;c[Rb>>2]=(c[yb>>2]|0)+8+1;c[Tb>>2]=0;c[Ub>>2]=1<<c[(c[nb>>2]|0)+12>>2];c[Vb>>2]=(c[ub>>2]|0)-1;c[Wb>>2]=3+(c[sb>>2]|0);c[Xb>>2]=c[sb>>2];while(1){if((c[Xb>>2]|0)>>>0>=(c[Wb>>2]|0)>>>0){dj=340;break;}Zh=c[rb>>2]|0;if((c[Xb>>2]|0)==3)Cj=(c[Zh>>2]|0)-1|0;else Cj=c[Zh+(c[Xb>>2]<<2)>>2]|0;c[Yb>>2]=Cj;c[Zb>>2]=(c[yb>>2]|0)-(c[Yb>>2]|0);c[_b>>2]=0;do{if(((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Kb>>2]|0)|0)>>>0){Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm((c[ob>>2]|0)+(0-(c[Yb>>2]|0))|0,c[Ab>>2]|0)|0))break;Zh=Tj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[ob>>2]|0)+(c[Ab>>2]|0)+(0-(c[Yb>>2]|0))|0,c[pb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}else{c[$b>>2]=(c[Jb>>2]|0)+(c[Zb>>2]|0);if(!(c[qb>>2]|0))break;if(!((((c[Kb>>2]|0)-1-(c[Zb>>2]|0)|0)>>>0>=3?((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Ob>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm(c[$b>>2]|0,c[Ab>>2]|0)|0))break;Zh=Uj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[$b>>2]|0)+(c[Ab>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}}while(0);if((c[_b>>2]|0)>>>0>(c[Vb>>2]|0)>>>0?(c[Vb>>2]=c[_b>>2],c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[Xb>>2]|0)-(c[sb>>2]|0),c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[_b>>2],c[Tb>>2]=(c[Tb>>2]|0)+1,((c[_b>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[_b>>2]|0)|0)==(c[pb>>2]|0))|0):0){dj=338;break;}c[Xb>>2]=(c[Xb>>2]|0)+1;}h:do{if((dj|0)==338){dj=0;c[lb>>2]=c[Tb>>2];}else if((dj|0)==340){dj=0;do{if((c[vb>>2]|0)==3){if((c[Vb>>2]|0)>>>0>=(c[vb>>2]|0)>>>0)break;c[ac>>2]=nm(c[mb>>2]|0,c[ob>>2]|0)|0;if(!(((c[ac>>2]|0)>>>0>(c[Ob>>2]|0)>>>0?((c[yb>>2]|0)-(c[ac>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[qb>>2]|0){if((c[ac>>2]|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=345;break;}c[dc>>2]=(c[Jb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Uj(c[ob>>2]|0,c[dc>>2]|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;}else dj=345;}while(0);if((dj|0)==345){dj=0;c[cc>>2]=(c[xb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Tj(c[ob>>2]|0,c[cc>>2]|0,c[pb>>2]|0)|0;}if((c[bc>>2]|0)>>>0<(c[vb>>2]|0)>>>0)break;c[Vb>>2]=c[bc>>2];c[c[tb>>2]>>2]=(c[yb>>2]|0)-(c[ac>>2]|0)+2;c[(c[tb>>2]|0)+4>>2]=c[bc>>2];c[Tb>>2]=1;if(!(((c[bc>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[bc>>2]|0)|0)==(c[pb>>2]|0))|0))break;c[(c[mb>>2]|0)+24>>2]=(c[yb>>2]|0)+1;c[lb>>2]=1;break h;}}while(0);c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2]=c[yb>>2];while(1){Zh=c[Ub>>2]|0;c[Ub>>2]=Zh+-1;if(!Zh)break;if((c[Db>>2]|0)>>>0<=(c[Ob>>2]|0)>>>0)break;c[ec>>2]=(c[Eb>>2]|0)+((c[Db>>2]&c[Gb>>2])<<1<<2);c[fc>>2]=(c[Hb>>2]|0)>>>0<(c[Ib>>2]|0)>>>0?c[Hb>>2]|0:c[Ib>>2]|0;do{if(c[qb>>2]|0){if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=355;break;}c[gc>>2]=(c[Jb>>2]|0)+(c[Db>>2]|0);Zh=Uj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0<(c[Kb>>2]|0)>>>0)break;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);}else dj=355;}while(0);if((dj|0)==355){dj=0;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);Zh=Tj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;}if((c[fc>>2]|0)>>>0>(c[Vb>>2]|0)>>>0){if((c[fc>>2]|0)>>>0>((c[Rb>>2]|0)-(c[Db>>2]|0)|0)>>>0)c[Rb>>2]=(c[Db>>2]|0)+(c[fc>>2]|0);c[Vb>>2]=c[fc>>2];c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[yb>>2]|0)-(c[Db>>2]|0)+2;c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[fc>>2];c[Tb>>2]=(c[Tb>>2]|0)+1;if((c[fc>>2]|0)>>>0>4096)break;if(((c[ob>>2]|0)+(c[fc>>2]|0)|0)==(c[pb>>2]|0))break;}Zh=c[Db>>2]|0;if((d[(c[gc>>2]|0)+(c[fc>>2]|0)>>0]|0|0)<(d[(c[ob>>2]|0)+(c[fc>>2]|0)>>0]|0|0)){c[c[Pb>>2]>>2]=Zh;c[Hb>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=365;break;}c[Pb>>2]=(c[ec>>2]|0)+4;c[Db>>2]=c[(c[ec>>2]|0)+4>>2];}else{c[c[Qb>>2]>>2]=Zh;c[Ib>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=368;break;}c[Qb>>2]=c[ec>>2];c[Db>>2]=c[c[ec>>2]>>2];}}if((dj|0)==365){dj=0;c[Pb>>2]=Sb;}else if((dj|0)==368){dj=0;c[Qb>>2]=Sb;}c[c[Qb>>2]>>2]=0;c[c[Pb>>2]>>2]=0;c[(c[mb>>2]|0)+24>>2]=(c[Rb>>2]|0)-8;c[lb>>2]=c[Tb>>2];}}while(0);c[md>>2]=c[lb>>2];break d;}}}}while(0);c[Bi>>2]=c[md>>2];if(c[Bi>>2]|0){c[Di>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)+4>>2];if(((c[Di>>2]|0)>>>0>(c[$h>>2]|0)>>>0?1:((c[ei>>2]|0)+(c[Di>>2]|0)|0)>>>0>=4096)|0){dj=481;break b;}c[Ci>>2]=0;while(1){if((c[Ci>>2]|0)>>>0>=(c[Bi>>2]|0)>>>0)break c;c[Ei>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)>>2];pm(Fi,(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0,c[Ei>>2]|0,c[xi>>2]|0);c[Gi>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)+4>>2];if((c[Ci>>2]|0)>>>0>0)Dj=(c[(c[ci>>2]|0)+((c[Ci>>2]|0)-1<<3)+4>>2]|0)+1|0;else Dj=c[ai>>2]|0;c[Hi>>2]=Dj;c[Ii>>2]=c[Gi>>2];i:while(1){if((c[Ii>>2]|0)>>>0<(c[Hi>>2]|0)>>>0)break;c[Ji>>2]=(c[ei>>2]|0)+(c[Ii>>2]|0);Zh=c[Ai>>2]|0;Zi=c[Ii>>2]|0;Ph=c[Th>>2]|0;Qh=c[Rh>>2]|0;c[k>>2]=c[Ei>>2];c[m>>2]=Zi;c[n>>2]=Ph;c[o>>2]=Qh;c[q>>2]=qm((c[k>>2]|0)+1|0)|0;c[r>>2]=(c[m>>2]|0)-3;if(c[(c[n>>2]|0)+56>>2]|0){Qh=(qm((c[r>>2]|0)+1|0)|0)+16|0;c[j>>2]=Qh+(c[q>>2]|0);}else{Qh=(c[q>>2]|0)+(c[(c[n>>2]|0)+52>>2]|0)|0;c[p>>2]=Qh-(qm((c[(c[(c[n>>2]|0)+12>>2]|0)+(c[q>>2]<<2)>>2]|0)+1|0)|0);if((c[o>>2]|0)<2&(c[q>>2]|0)>>>0>=20)c[p>>2]=(c[p>>2]|0)+((c[q>>2]|0)-19<<1);c[s>>2]=rm(c[r>>2]|0)|0;Qh=(c[5840+(c[s>>2]<<2)>>2]|0)+(c[(c[n>>2]|0)+48>>2]|0)|0;Ph=Qh-(qm((c[(c[(c[n>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0)+1|0)|0)|0;c[p>>2]=(c[p>>2]|0)+Ph;c[j>>2]=c[p>>2];}c[Ki>>2]=Zh+(c[j>>2]|0);do{if((c[Ji>>2]|0)>>>0<=(c[fi>>2]|0)>>>0){if((c[Ki>>2]|0)<(c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]|0)){dj=496;break;}if(!(c[Rh>>2]|0))break i;}else dj=496;}while(0);if((dj|0)==496){dj=0;while(1){if((c[fi>>2]|0)>>>0>=(c[Ji>>2]|0)>>>0)break;c[(c[bi>>2]|0)+(((c[fi>>2]|0)+1|0)*28|0)>>2]=1073741824;c[fi>>2]=(c[fi>>2]|0)+1;}c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+8>>2]=c[Ii>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+4>>2]=c[Ei>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+12>>2]=c[yi>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]=c[Ki>>2];Zh=(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+16|0;c[Zh>>2]=c[Fi>>2];c[Zh+4>>2]=c[Fi+4>>2];c[Zh+8>>2]=c[Fi+8>>2];}c[Ii>>2]=(c[Ii>>2]|0)+-1;}c[Ci>>2]=(c[Ci>>2]|0)+1;}}}}while(0);c[ei>>2]=(c[ei>>2]|0)+1;}if((dj|0)==481){dj=0;c[gi>>2]=c[Di>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)>>2];c[fi>>2]=(c[ei>>2]|0)+1;break;}else if((dj|0)==504){dj=0;c[gi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+8>>2];c[hi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+4>>2];c[ei>>2]=(c[fi>>2]|0)-(c[gi>>2]|0);break;}}else{c[gi>>2]=c[mi>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)>>2];c[ei>>2]=0;c[fi>>2]=1;}}while(0);c[Li>>2]=c[gi>>2];c[Mi>>2]=c[hi>>2];c[Ni>>2]=c[ei>>2];while(1){c[Oi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2];c[Pi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2]=c[Li>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2]=c[Mi>>2];c[Li>>2]=c[Oi>>2];c[Mi>>2]=c[Pi>>2];if((c[Oi>>2]|0)>>>0>(c[Ni>>2]|0)>>>0)break;c[Ni>>2]=(c[Ni>>2]|0)-(c[Oi>>2]|0);}c[Qi>>2]=0;while(1){if((c[Qi>>2]|0)>>>0>=(c[fi>>2]|0)>>>0)break;c[Ri>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[Si>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+8>>2];c[Ti>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+4>>2];if((c[Si>>2]|0)==1){c[Vh>>2]=(c[Vh>>2]|0)+1;c[Qi>>2]=(c[Qi>>2]|0)+1;continue;}c[Qi>>2]=(c[Qi>>2]|0)+(c[Si>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+(c[Si>>2]|0);if((c[Ti>>2]|0)>>>0<3){c[Ui>>2]=(c[Ti>>2]|0)+((c[Ri>>2]|0)==0&1);if(c[Ui>>2]|0){Zh=c[Nh>>2]|0;if((c[Ui>>2]|0)==3)Ej=(c[Zh>>2]|0)-1|0;else Ej=c[Zh+(c[Ui>>2]<<2)>>2]|0;c[Vi>>2]=Ej;if((c[Ui>>2]|0)>>>0>=2)c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=c[Vi>>2];}}else{c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=(c[Ti>>2]|0)-2;}vm(c[Th>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,c[Si>>2]|0);wm(c[Mh>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,(c[Si>>2]|0)-3|0);c[Wh>>2]=c[Vh>>2];}xm(c[Th>>2]|0);}l=i;return(c[Xh>>2]|0)-(c[Wh>>2]|0)|0;}function lm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=e;c[(c[g>>2]|0)+56>>2]=0;if(c[(c[g>>2]|0)+28>>2]|0){c[(c[g>>2]|0)+24>>2]=0;c[k>>2]=0;while(1){m=c[g>>2]|0;if((c[k>>2]|0)>>>0>255)break;c[(c[c[g>>2]>>2]|0)+(c[k>>2]<<2)>>2]=1+((c[(c[m>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>5);e=(c[g>>2]|0)+24|0;c[e>>2]=(c[e>>2]|0)+(c[(c[c[g>>2]>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1;}c[m+28>>2]=0;c[k>>2]=0;while(1){n=c[g>>2]|0;if((c[k>>2]|0)>>>0>35)break;c[(c[(c[g>>2]|0)+4>>2]|0)+(c[k>>2]<<2)>>2]=1+((c[(c[n+4>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>5);m=(c[g>>2]|0)+28|0;c[m>>2]=(c[m>>2]|0)+(c[(c[(c[g>>2]|0)+4>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1;}c[n+32>>2]=0;c[k>>2]=0;while(1){o=c[g>>2]|0;if((c[k>>2]|0)>>>0>52)break;c[(c[(c[g>>2]|0)+8>>2]|0)+(c[k>>2]<<2)>>2]=1+((c[(c[o+8>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>4);n=(c[g>>2]|0)+32|0;c[n>>2]=(c[n>>2]|0)+(c[(c[(c[g>>2]|0)+8>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1;}c[o+36>>2]=0;c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>31)break;c[(c[(c[g>>2]|0)+12>>2]|0)+(c[k>>2]<<2)>>2]=1+((c[(c[(c[g>>2]|0)+12>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>4);o=(c[g>>2]|0)+36|0;c[o>>2]=(c[o>>2]|0)+(c[(c[(c[g>>2]|0)+12>>2]|0)+(c[k>>2]<<2)>>2]|0);c[k>>2]=(c[k>>2]|0)+1;}p=c[g>>2]|0;xm(p);l=f;return;}if((c[i>>2]|0)>>>0<=1024)c[(c[g>>2]|0)+56>>2]=1;c[j>>2]=0;while(1){if((c[j>>2]|0)>>>0>255)break;c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<2)>>2]=0;c[j>>2]=(c[j>>2]|0)+1;}c[j>>2]=0;while(1){q=c[g>>2]|0;if((c[j>>2]|0)>>>0>=(c[i>>2]|0)>>>0)break;k=(c[q>>2]|0)+((d[(c[h>>2]|0)+(c[j>>2]|0)>>0]|0)<<2)|0;c[k>>2]=(c[k>>2]|0)+1;c[j>>2]=(c[j>>2]|0)+1;}c[q+24>>2]=0;c[j>>2]=0;while(1){if((c[j>>2]|0)>>>0>255)break;c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<2)>>2]=1+((c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<2)>>2]|0)>>>4);q=(c[g>>2]|0)+24|0;c[q>>2]=(c[q>>2]|0)+(c[(c[c[g>>2]>>2]|0)+(c[j>>2]<<2)>>2]|0);c[j>>2]=(c[j>>2]|0)+1;}c[j>>2]=0;while(1){r=c[g>>2]|0;if((c[j>>2]|0)>>>0>35)break;c[(c[r+4>>2]|0)+(c[j>>2]<<2)>>2]=1;c[j>>2]=(c[j>>2]|0)+1;}c[r+28>>2]=36;c[j>>2]=0;while(1){s=c[g>>2]|0;if((c[j>>2]|0)>>>0>52)break;c[(c[s+8>>2]|0)+(c[j>>2]<<2)>>2]=1;c[j>>2]=(c[j>>2]|0)+1;}c[s+32>>2]=53;c[j>>2]=0;while(1){t=c[g>>2]|0;if((c[j>>2]|0)>>>0>31)break;c[(c[t+12>>2]|0)+(c[j>>2]<<2)>>2]=1;c[j>>2]=(c[j>>2]|0)+1;}c[t+36>>2]=32;p=c[g>>2]|0;xm(p);l=f;return;}function mm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[f>>2]=a;c[g>>2]=b;do{if((c[g>>2]|0)==3){b=(_j()|0)!=0;a=Yj(c[f>>2]|0)|0;if(b){c[e>>2]=a<<8;break;}else{c[e>>2]=a>>>8;break;}}else c[e>>2]=Yj(c[f>>2]|0)|0;}while(0);l=d;return c[e>>2]|0;}function nm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+32|0;e=d+28|0;f=d+24|0;g=d+20|0;h=d+16|0;i=d+12|0;j=d+8|0;k=d+4|0;m=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=c[(c[e>>2]|0)+40>>2];c[h>>2]=c[(c[e>>2]|0)+32>>2];c[i>>2]=c[(c[e>>2]|0)+4>>2];c[j>>2]=c[(c[e>>2]|0)+28>>2];b=(c[f>>2]|0)-(c[i>>2]|0)|0;c[(c[e>>2]|0)+28>>2]=b;c[k>>2]=b;c[m>>2]=Fm(c[f>>2]|0,c[h>>2]|0)|0;while(1){if((c[j>>2]|0)>>>0>=(c[k>>2]|0)>>>0)break;f=c[j>>2]|0;b=c[g>>2]|0;c[b+((Fm((c[i>>2]|0)+(c[j>>2]|0)|0,c[h>>2]|0)|0)<<2)>>2]=f;c[j>>2]=(c[j>>2]|0)+1;}l=d;return c[(c[g>>2]|0)+(c[m>>2]<<2)>>2]|0;}function om(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f+12|0;h=f+8|0;i=f+4|0;j=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;e=Dm(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0,c[j>>2]|0)|0;h=e+(Cm(c[i>>2]|0,c[j>>2]|0)|0)|0;l=f;return h|0;}function pm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+8|0;k=f+4|0;m=f;c[g>>2]=b;c[h>>2]=d;c[i>>2]=e;if((c[h>>2]|0)>>>0>=3){c[j+8>>2]=c[(c[g>>2]|0)+4>>2];c[j+4>>2]=c[c[g>>2]>>2];c[j>>2]=(c[h>>2]|0)-2;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}c[k>>2]=(c[h>>2]|0)+(c[i>>2]|0);if((c[k>>2]|0)>>>0<=0){i=c[g>>2]|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}i=c[g>>2]|0;if((c[k>>2]|0)==3)n=(c[i>>2]|0)-1|0;else n=c[i+(c[k>>2]<<2)>>2]|0;c[m>>2]=n;n=c[g>>2]|0;if((c[k>>2]|0)>>>0>=2)o=c[n+4>>2]|0;else o=c[n+8>>2]|0;c[j+8>>2]=o;c[j+4>>2]=c[c[g>>2]>>2];c[j>>2]=c[m>>2];c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}function qm(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function rm(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;if((c[e>>2]|0)>>>0>127){f=(qm(a)|0)+36|0;l=b;return f|0;}else{f=d[3072+a>>0]|0;l=b;return f|0;}return 0;}function sm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=Bm(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;c[i>>2]=d+(Em(c[g>>2]|0,c[h>>2]|0)|0);l=e;return c[i>>2]|0;}function tm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;e=Dm(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0,c[j>>2]|0)|0;c[k>>2]=e+(Em(c[i>>2]|0,c[j>>2]|0)|0);l=f;return c[k>>2]|0;}function um(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;d=Bm(c[f>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;f=d+(Cm(c[g>>2]|0,c[h>>2]|0)|0)|0;l=e;return f|0;}function vm(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;h=l;l=l+48|0;i=h+36|0;j=h+32|0;k=h+28|0;m=h+24|0;n=h+20|0;o=h+16|0;p=h+12|0;q=h+8|0;r=h+4|0;s=h;c[i>>2]=a;c[j>>2]=b;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;c[o>>2]=0;while(1){if((c[o>>2]|0)>>>0>=(c[j>>2]|0)>>>0)break;g=(c[c[i>>2]>>2]|0)+((d[(c[k>>2]|0)+(c[o>>2]|0)>>0]|0)<<2)|0;c[g>>2]=(c[g>>2]|0)+2;c[o>>2]=(c[o>>2]|0)+1;}o=(c[i>>2]|0)+24|0;c[o>>2]=(c[o>>2]|0)+(c[j>>2]<<1);c[p>>2]=Am(c[j>>2]|0)|0;j=(c[(c[i>>2]|0)+4>>2]|0)+(c[p>>2]<<2)|0;c[j>>2]=(c[j>>2]|0)+1;j=(c[i>>2]|0)+28|0;c[j>>2]=(c[j>>2]|0)+1;c[q>>2]=qm((c[m>>2]|0)+1|0)|0;m=(c[(c[i>>2]|0)+12>>2]|0)+(c[q>>2]<<2)|0;c[m>>2]=(c[m>>2]|0)+1;m=(c[i>>2]|0)+36|0;c[m>>2]=(c[m>>2]|0)+1;c[r>>2]=(c[n>>2]|0)-3;c[s>>2]=rm(c[r>>2]|0)|0;r=(c[(c[i>>2]|0)+8>>2]|0)+(c[s>>2]<<2)|0;c[r>>2]=(c[r>>2]|0)+1;r=(c[i>>2]|0)+32|0;c[r>>2]=(c[r>>2]|0)+1;l=h;return;}function wm(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;ym(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function xm(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=qm((c[(c[d>>2]|0)+24>>2]|0)+1|0)|0;c[(c[d>>2]|0)+40>>2]=a;a=qm((c[(c[d>>2]|0)+28>>2]|0)+1|0)|0;c[(c[d>>2]|0)+44>>2]=a;a=qm((c[(c[d>>2]|0)+32>>2]|0)+1|0)|0;c[(c[d>>2]|0)+48>>2]=a;a=qm((c[(c[d>>2]|0)+36>>2]|0)+1|0)|0;c[(c[d>>2]|0)+52>>2]=a;l=b;return;}function ym(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{zm(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function zm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Am(a){a=a|0;var b=0,e=0,f=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;if((c[e>>2]|0)>>>0>63){f=(qm(a)|0)+19|0;l=b;return f|0;}else{f=d[3008+a>>0]|0;l=b;return f|0;}return 0;}function Bm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f+8|0;k=f+4|0;m=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;e=c[i>>2]|0;if(c[(c[j>>2]|0)+56>>2]|0){c[g>>2]=e*6;n=c[g>>2]|0;l=f;return n|0;}if(!e){c[g>>2]=0;n=c[g>>2]|0;l=f;return n|0;}c[m>>2]=N(c[i>>2]|0,c[(c[j>>2]|0)+40>>2]|0)|0;c[k>>2]=0;while(1){if((c[k>>2]|0)>>>0>=(c[i>>2]|0)>>>0)break;e=qm((c[(c[c[j>>2]>>2]|0)+((d[(c[h>>2]|0)+(c[k>>2]|0)>>0]|0)<<2)>>2]|0)+1|0)|0;c[m>>2]=(c[m>>2]|0)-e;c[k>>2]=(c[k>>2]|0)+1;}c[g>>2]=c[m>>2];n=c[g>>2]|0;l=f;return n|0;}function Cm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[f>>2]=a;c[g>>2]=b;b=c[f>>2]|0;if(c[(c[g>>2]|0)+56>>2]|0){c[e>>2]=qm(b+1|0)|0;j=c[e>>2]|0;l=d;return j|0;}else{c[h>>2]=Am(b)|0;b=(c[5696+(c[h>>2]<<2)>>2]|0)+(c[(c[g>>2]|0)+44>>2]|0)|0;c[i>>2]=b-(qm((c[(c[(c[g>>2]|0)+4>>2]|0)+(c[h>>2]<<2)>>2]|0)+1|0)|0);c[e>>2]=c[i>>2];j=c[e>>2]|0;l=d;return j|0;}return 0;}function Dm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;if((c[h>>2]|0)==(c[c[g>>2]>>2]|0)){c[k>>2]=c[(c[g>>2]|0)+8>>2];c[n>>2]=(c[h>>2]|0)+(c[(c[g>>2]|0)+4>>2]|0);c[m>>2]=(c[i>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);}else{c[k>>2]=0;c[n>>2]=c[h>>2];c[m>>2]=c[i>>2];}e=c[k>>2]|0;c[o>>2]=e+(Bm(c[n>>2]|0,c[m>>2]|0,c[j>>2]|0)|0);c[c[g>>2]>>2]=c[h>>2];c[(c[g>>2]|0)+4>>2]=c[i>>2];c[(c[g>>2]|0)+8>>2]=c[o>>2];l=f;return c[o>>2]|0;}function Em(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+16|0;f=d+12|0;g=d+8|0;h=d+4|0;i=d;c[f>>2]=a;c[g>>2]=b;b=c[f>>2]|0;if(c[(c[g>>2]|0)+56>>2]|0){c[e>>2]=qm(b+1|0)|0;j=c[e>>2]|0;l=d;return j|0;}else{c[h>>2]=Am(b)|0;b=c[5696+(c[h>>2]<<2)>>2]|0;f=b+(qm((c[c[(c[g>>2]|0)+4>>2]>>2]|0)+1|0)|0)|0;c[i>>2]=f-(qm((c[(c[(c[g>>2]|0)+4>>2]|0)+(c[h>>2]<<2)>>2]|0)+1|0)|0);c[e>>2]=c[i>>2];j=c[e>>2]|0;l=d;return j|0;}return 0;}function Fm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=Gm(c[e>>2]|0)|0;e=Hm(b,c[f>>2]|0)|0;l=d;return e|0;}function Gm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(_j()|0)!=0;f=Yj(c[e>>2]|0)|0;if(a){c[d>>2]=f;g=c[d>>2]|0;l=b;return g|0;}else{c[d>>2]=Im(f)|0;g=c[d>>2]|0;l=b;return g|0;}return 0;}function Hm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;b=N(c[e>>2]<<8,506832829)|0;l=d;return b>>>(32-(c[f>>2]|0)|0)|0;}function Im(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[d>>2]<<24&-16777216|c[d>>2]<<8&16711680|(c[d>>2]|0)>>>8&65280|(c[d>>2]|0)>>>24&255|0;}function Jm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;switch(c[(c[j>>2]|0)+16>>2]|0){case 7:case 6:{c[h>>2]=Vm(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,6)|0;o=c[h>>2]|0;l=g;return o|0;}case 5:{c[h>>2]=Vm(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,5)|0;o=c[h>>2]|0;l=g;return o|0;}default:{c[h>>2]=Vm(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,4)|0;o=c[h>>2]|0;l=g;return o|0;}}return 0;}function Km(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0;h=l;l=l+320|0;i=h+308|0;j=h+304|0;k=h+300|0;m=h+296|0;n=h+292|0;o=h+288|0;p=h+284|0;q=h+280|0;r=h+276|0;s=h+272|0;t=h+268|0;u=h+264|0;v=h+260|0;w=h+256|0;x=h+252|0;y=h+248|0;z=h+244|0;A=h+240|0;B=h+236|0;C=h+232|0;D=h+228|0;E=h+224|0;F=h+220|0;G=h+216|0;H=h+212|0;I=h+208|0;J=h+204|0;K=h+200|0;L=h+196|0;M=h+192|0;N=h+188|0;O=h+184|0;P=h+180|0;Q=h+176|0;R=h+172|0;S=h+168|0;T=h+164|0;U=h+160|0;V=h+156|0;W=h+152|0;X=h+148|0;Y=h+144|0;Z=h+140|0;_=h+136|0;$=h+132|0;aa=h+128|0;ba=h+124|0;ca=h+120|0;da=h+116|0;ea=h+112|0;fa=h+108|0;ga=h+104|0;ha=h+100|0;ia=h+96|0;ja=h+92|0;ka=h+88|0;la=h+84|0;ma=h+80|0;na=h+76|0;oa=h+72|0;pa=h+68|0;qa=h+64|0;ra=h+60|0;sa=h+56|0;ta=h+52|0;ua=h+48|0;va=h+44|0;wa=h+40|0;xa=h+36|0;ya=h+32|0;za=h+28|0;Aa=h+24|0;Ba=h+20|0;Ca=h+16|0;Da=h+12|0;Ea=h+8|0;Fa=h+4|0;Ga=h;c[Ca>>2]=a;c[Da>>2]=b;c[Ea>>2]=e;c[Fa>>2]=f;c[Ga>>2]=g;switch(c[(c[Da>>2]|0)+16>>2]|0){case 7:case 6:{g=c[Da>>2]|0;f=c[Ea>>2]|0;e=c[Fa>>2]|0;b=c[Ga>>2]|0;c[i>>2]=c[Ca>>2];c[j>>2]=g;c[k>>2]=f;c[m>>2]=e;c[n>>2]=b;c[o>>2]=6;c[p>>2]=1;c[q>>2]=c[(c[i>>2]|0)+44>>2];c[r>>2]=1<<c[(c[j>>2]|0)+4>>2];c[s>>2]=(c[r>>2]|0)-1;c[t>>2]=c[(c[i>>2]|0)+4>>2];c[u>>2]=c[(c[i>>2]|0)+8>>2];c[v>>2]=c[(c[i>>2]|0)+12>>2];c[w>>2]=(c[t>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[y>>2]=c[(c[i>>2]|0)+16>>2];c[z>>2]=(c[k>>2]|0)-(c[t>>2]|0);if((c[z>>2]|0)>>>0>(c[r>>2]|0)>>>0)Ha=(c[z>>2]|0)-(c[r>>2]|0)|0;else Ha=0;c[A>>2]=Ha;c[B>>2]=1<<c[(c[j>>2]|0)+12>>2];c[C>>2]=3;c[D>>2]=mk(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0)|0;while(1){if(!(((c[B>>2]|0)>>>0>0?(c[D>>2]|0)>>>0>(c[y>>2]|0)>>>0:0)|0))break;c[E>>2]=0;if(c[p>>2]|0?(c[D>>2]|0)>>>0<(c[v>>2]|0)>>>0:0){c[G>>2]=(c[u>>2]|0)+(c[D>>2]|0);o=Bk(c[G>>2]|0)|0;if((o|0)==(Bk(c[k>>2]|0)|0))c[E>>2]=(Lm((c[k>>2]|0)+4|0,(c[G>>2]|0)+4|0,c[m>>2]|0,c[x>>2]|0,c[w>>2]|0)|0)+4;}else Ia=38;if((Ia|0)==38?(Ia=0,c[F>>2]=(c[t>>2]|0)+(c[D>>2]|0),(d[(c[F>>2]|0)+(c[C>>2]|0)>>0]|0|0)==(d[(c[k>>2]|0)+(c[C>>2]|0)>>0]|0|0)):0)c[E>>2]=Qm(c[k>>2]|0,c[F>>2]|0,c[m>>2]|0)|0;if((c[E>>2]|0)>>>0>(c[C>>2]|0)>>>0?(c[C>>2]=c[E>>2],c[c[n>>2]>>2]=(c[z>>2]|0)-(c[D>>2]|0)+2,((c[k>>2]|0)+(c[E>>2]|0)|0)==(c[m>>2]|0)):0)break;if((c[D>>2]|0)>>>0<=(c[A>>2]|0)>>>0)break;c[D>>2]=c[(c[q>>2]|0)+((c[D>>2]&c[s>>2])<<2)>>2];c[B>>2]=(c[B>>2]|0)+-1;}c[Ba>>2]=c[C>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}case 5:{C=c[Da>>2]|0;B=c[Ea>>2]|0;s=c[Fa>>2]|0;D=c[Ga>>2]|0;c[H>>2]=c[Ca>>2];c[I>>2]=C;c[J>>2]=B;c[K>>2]=s;c[L>>2]=D;c[M>>2]=5;c[N>>2]=1;c[O>>2]=c[(c[H>>2]|0)+44>>2];c[P>>2]=1<<c[(c[I>>2]|0)+4>>2];c[Q>>2]=(c[P>>2]|0)-1;c[R>>2]=c[(c[H>>2]|0)+4>>2];c[S>>2]=c[(c[H>>2]|0)+8>>2];c[T>>2]=c[(c[H>>2]|0)+12>>2];c[U>>2]=(c[R>>2]|0)+(c[T>>2]|0);c[V>>2]=(c[S>>2]|0)+(c[T>>2]|0);c[W>>2]=c[(c[H>>2]|0)+16>>2];c[X>>2]=(c[J>>2]|0)-(c[R>>2]|0);if((c[X>>2]|0)>>>0>(c[P>>2]|0)>>>0)Ka=(c[X>>2]|0)-(c[P>>2]|0)|0;else Ka=0;c[Y>>2]=Ka;c[Z>>2]=1<<c[(c[I>>2]|0)+12>>2];c[_>>2]=3;c[$>>2]=mk(c[H>>2]|0,c[I>>2]|0,c[J>>2]|0,c[M>>2]|0)|0;while(1){if(!(((c[Z>>2]|0)>>>0>0?(c[$>>2]|0)>>>0>(c[W>>2]|0)>>>0:0)|0))break;c[aa>>2]=0;if(c[N>>2]|0?(c[$>>2]|0)>>>0<(c[T>>2]|0)>>>0:0){c[ca>>2]=(c[S>>2]|0)+(c[$>>2]|0);M=Bk(c[ca>>2]|0)|0;if((M|0)==(Bk(c[J>>2]|0)|0))c[aa>>2]=(Lm((c[J>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[K>>2]|0,c[V>>2]|0,c[U>>2]|0)|0)+4;}else Ia=23;if((Ia|0)==23?(Ia=0,c[ba>>2]=(c[R>>2]|0)+(c[$>>2]|0),(d[(c[ba>>2]|0)+(c[_>>2]|0)>>0]|0|0)==(d[(c[J>>2]|0)+(c[_>>2]|0)>>0]|0|0)):0)c[aa>>2]=Qm(c[J>>2]|0,c[ba>>2]|0,c[K>>2]|0)|0;if((c[aa>>2]|0)>>>0>(c[_>>2]|0)>>>0?(c[_>>2]=c[aa>>2],c[c[L>>2]>>2]=(c[X>>2]|0)-(c[$>>2]|0)+2,((c[J>>2]|0)+(c[aa>>2]|0)|0)==(c[K>>2]|0)):0)break;if((c[$>>2]|0)>>>0<=(c[Y>>2]|0)>>>0)break;c[$>>2]=c[(c[O>>2]|0)+((c[$>>2]&c[Q>>2])<<2)>>2];c[Z>>2]=(c[Z>>2]|0)+-1;}c[Ba>>2]=c[_>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}default:{_=c[Da>>2]|0;Da=c[Ea>>2]|0;Ea=c[Fa>>2]|0;Fa=c[Ga>>2]|0;c[da>>2]=c[Ca>>2];c[ea>>2]=_;c[fa>>2]=Da;c[ga>>2]=Ea;c[ha>>2]=Fa;c[ia>>2]=4;c[ja>>2]=1;c[ka>>2]=c[(c[da>>2]|0)+44>>2];c[la>>2]=1<<c[(c[ea>>2]|0)+4>>2];c[ma>>2]=(c[la>>2]|0)-1;c[na>>2]=c[(c[da>>2]|0)+4>>2];c[oa>>2]=c[(c[da>>2]|0)+8>>2];c[pa>>2]=c[(c[da>>2]|0)+12>>2];c[qa>>2]=(c[na>>2]|0)+(c[pa>>2]|0);c[ra>>2]=(c[oa>>2]|0)+(c[pa>>2]|0);c[sa>>2]=c[(c[da>>2]|0)+16>>2];c[ta>>2]=(c[fa>>2]|0)-(c[na>>2]|0);if((c[ta>>2]|0)>>>0>(c[la>>2]|0)>>>0)La=(c[ta>>2]|0)-(c[la>>2]|0)|0;else La=0;c[ua>>2]=La;c[va>>2]=1<<c[(c[ea>>2]|0)+12>>2];c[wa>>2]=3;c[xa>>2]=mk(c[da>>2]|0,c[ea>>2]|0,c[fa>>2]|0,c[ia>>2]|0)|0;while(1){if(!(((c[va>>2]|0)>>>0>0?(c[xa>>2]|0)>>>0>(c[sa>>2]|0)>>>0:0)|0))break;c[ya>>2]=0;if(c[ja>>2]|0?(c[xa>>2]|0)>>>0<(c[pa>>2]|0)>>>0:0){c[Aa>>2]=(c[oa>>2]|0)+(c[xa>>2]|0);ia=Bk(c[Aa>>2]|0)|0;if((ia|0)==(Bk(c[fa>>2]|0)|0))c[ya>>2]=(Lm((c[fa>>2]|0)+4|0,(c[Aa>>2]|0)+4|0,c[ga>>2]|0,c[ra>>2]|0,c[qa>>2]|0)|0)+4;}else Ia=8;if((Ia|0)==8?(Ia=0,c[za>>2]=(c[na>>2]|0)+(c[xa>>2]|0),(d[(c[za>>2]|0)+(c[wa>>2]|0)>>0]|0|0)==(d[(c[fa>>2]|0)+(c[wa>>2]|0)>>0]|0|0)):0)c[ya>>2]=Qm(c[fa>>2]|0,c[za>>2]|0,c[ga>>2]|0)|0;if((c[ya>>2]|0)>>>0>(c[wa>>2]|0)>>>0?(c[wa>>2]=c[ya>>2],c[c[ha>>2]>>2]=(c[ta>>2]|0)-(c[xa>>2]|0)+2,((c[fa>>2]|0)+(c[ya>>2]|0)|0)==(c[ga>>2]|0)):0)break;if((c[xa>>2]|0)>>>0<=(c[ua>>2]|0)>>>0)break;c[xa>>2]=c[(c[ka>>2]|0)+((c[xa>>2]&c[ma>>2])<<2)>>2];c[va>>2]=(c[va>>2]|0)+-1;}c[Ba>>2]=c[wa>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}}return 0;}function Lm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=Qm(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(Qm((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function Mm(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;a=31-(Q(c[d>>2]|0)|0)|0;l=b;return a|0;}function Nm(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;Om(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function Om(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{Pm(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function Pm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function Qm(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=Rm(c[i>>2]|0)|0;c[n>>2]=e^(Rm(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=Sm(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=Rm(c[i>>2]|0)|0;c[o>>2]=e^(Rm(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=Sm(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((Tm()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=Bk(c[i>>2]|0)|0,(o|0)==(Bk(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(Um(c[i>>2]|0)|0)&65535,(o|0)==((Um(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function Rm(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function Sm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(vk()|0)!=0;f=(Tm()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function Tm(){return 0;}function Um(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function Vm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;if((c[m>>2]|0)>>>0<((c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+24>>2]|0)|0)>>>0){c[i>>2]=0;q=c[i>>2]|0;l=h;return q|0;}else{Wm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[p>>2]|0);c[i>>2]=Xm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,1)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function Wm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;g=l;l=l+80|0;h=g+64|0;i=g+60|0;j=g+56|0;k=g+48|0;m=g+44|0;n=g+40|0;o=g+36|0;p=g+32|0;q=g+28|0;r=g+24|0;s=g+20|0;t=g+16|0;u=g+12|0;v=g+8|0;w=g+4|0;x=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[g+52>>2]=e;c[k>>2]=f;c[m>>2]=c[(c[h>>2]|0)+36>>2];c[n>>2]=c[(c[i>>2]|0)+8>>2];c[o>>2]=c[(c[h>>2]|0)+44>>2];c[p>>2]=(c[(c[i>>2]|0)+4>>2]|0)-1;c[q>>2]=(1<<c[p>>2])-1;c[r>>2]=c[(c[h>>2]|0)+4>>2];c[s>>2]=(c[j>>2]|0)-(c[r>>2]|0);c[t>>2]=c[(c[h>>2]|0)+24>>2];while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0)break;c[u>>2]=nk((c[r>>2]|0)+(c[t>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0;c[v>>2]=c[(c[m>>2]|0)+(c[u>>2]<<2)>>2];c[w>>2]=(c[o>>2]|0)+((c[t>>2]&c[q>>2])<<1<<2);c[x>>2]=(c[w>>2]|0)+4;c[(c[m>>2]|0)+(c[u>>2]<<2)>>2]=c[t>>2];c[c[w>>2]>>2]=c[v>>2];c[c[x>>2]>>2]=1;c[t>>2]=(c[t>>2]|0)+1;}c[(c[h>>2]|0)+24>>2]=c[s>>2];l=g;return;}function Xm(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;j=l;l=l+176|0;k=j+160|0;m=j+156|0;n=j+152|0;o=j+148|0;p=j+144|0;q=j+140|0;r=j+136|0;s=j+132|0;t=j+128|0;u=j+124|0;v=j+120|0;w=j+116|0;x=j+112|0;y=j+108|0;z=j+104|0;A=j+100|0;B=j+96|0;C=j+92|0;D=j+88|0;E=j+84|0;F=j+80|0;G=j+76|0;H=j+72|0;I=j+68|0;J=j+64|0;K=j+60|0;L=j+56|0;M=j+52|0;N=j+48|0;O=j+44|0;P=j+40|0;Q=j+36|0;R=j+32|0;S=j+28|0;T=j+24|0;U=j+20|0;V=j+16|0;W=j+12|0;X=j+8|0;Y=j+4|0;Z=j;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=c[(c[k>>2]|0)+36>>2];c[t>>2]=c[(c[m>>2]|0)+8>>2];c[u>>2]=nk(c[n>>2]|0,c[t>>2]|0,c[q>>2]|0)|0;c[v>>2]=c[(c[s>>2]|0)+(c[u>>2]<<2)>>2];c[w>>2]=c[(c[k>>2]|0)+4>>2];c[x>>2]=(c[n>>2]|0)-(c[w>>2]|0);c[y>>2]=c[(c[k>>2]|0)+16>>2];c[z>>2]=c[(c[k>>2]|0)+44>>2];c[A>>2]=(c[(c[m>>2]|0)+4>>2]|0)-1;c[B>>2]=(1<<c[A>>2])-1;if((c[B>>2]|0)>>>0>=(c[x>>2]|0)>>>0)_=0;else _=(c[x>>2]|0)-(c[B>>2]|0)|0;c[C>>2]=_;c[D>>2]=(c[C>>2]|0)>>>0>(c[y>>2]|0)>>>0?c[C>>2]|0:c[y>>2]|0;c[E>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2);c[F>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2)+4;c[G>>2]=1<<c[(c[m>>2]|0)+12>>2];c[H>>2]=c[G>>2];c[I>>2]=0;while(1){if((c[v>>2]|0)>>>0<=(c[D>>2]|0)>>>0)break;if(!((c[H>>2]|0)>>>0>1?(c[c[F>>2]>>2]|0)==1:0))break;c[c[F>>2]>>2]=c[I>>2];c[I>>2]=c[v>>2];c[v>>2]=c[c[E>>2]>>2];c[E>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2);c[F>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2)+4;c[H>>2]=(c[H>>2]|0)+-1;}if((c[v>>2]|0)>>>0>(c[D>>2]|0)>>>0?(c[c[F>>2]>>2]|0)==1:0){c[c[F>>2]>>2]=0;c[c[E>>2]>>2]=0;}c[v>>2]=c[I>>2];while(1){if(!(c[v>>2]|0))break;c[J>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2)+4;c[K>>2]=c[c[J>>2]>>2];Ym(c[k>>2]|0,c[m>>2]|0,c[v>>2]|0,c[o>>2]|0,c[H>>2]|0,c[D>>2]|0,c[r>>2]|0);c[v>>2]=c[K>>2];c[H>>2]=(c[H>>2]|0)+1;}c[L>>2]=0;c[M>>2]=0;c[N>>2]=c[(c[k>>2]|0)+8>>2];c[O>>2]=c[(c[k>>2]|0)+12>>2];c[P>>2]=(c[N>>2]|0)+(c[O>>2]|0);c[Q>>2]=(c[w>>2]|0)+(c[O>>2]|0);c[R>>2]=(c[z>>2]|0)+((c[x>>2]&c[B>>2])<<1<<2);c[S>>2]=(c[z>>2]|0)+((c[x>>2]&c[B>>2])<<1<<2)+4;c[T>>2]=(c[x>>2]|0)+8+1;c[V>>2]=0;c[v>>2]=c[(c[s>>2]|0)+(c[u>>2]<<2)>>2];c[(c[s>>2]|0)+(c[u>>2]<<2)>>2]=c[x>>2];while(1){u=c[G>>2]|0;c[G>>2]=u+-1;if(!u)break;if((c[v>>2]|0)>>>0<=(c[y>>2]|0)>>>0)break;c[W>>2]=(c[z>>2]|0)+((c[v>>2]&c[B>>2])<<1<<2);c[X>>2]=(c[L>>2]|0)>>>0<(c[M>>2]|0)>>>0?c[L>>2]|0:c[M>>2]|0;if(c[r>>2]|0?((c[v>>2]|0)+(c[X>>2]|0)|0)>>>0<(c[O>>2]|0)>>>0:0){c[Y>>2]=(c[N>>2]|0)+(c[v>>2]|0);u=Lm((c[n>>2]|0)+(c[X>>2]|0)|0,(c[Y>>2]|0)+(c[X>>2]|0)|0,c[o>>2]|0,c[P>>2]|0,c[Q>>2]|0)|0;c[X>>2]=(c[X>>2]|0)+u;if(((c[v>>2]|0)+(c[X>>2]|0)|0)>>>0>=(c[O>>2]|0)>>>0)c[Y>>2]=(c[w>>2]|0)+(c[v>>2]|0);}else{c[Y>>2]=(c[w>>2]|0)+(c[v>>2]|0);u=Qm((c[n>>2]|0)+(c[X>>2]|0)|0,(c[Y>>2]|0)+(c[X>>2]|0)|0,c[o>>2]|0)|0;c[X>>2]=(c[X>>2]|0)+u;}if((c[X>>2]|0)>>>0>(c[V>>2]|0)>>>0){if((c[X>>2]|0)>>>0>((c[T>>2]|0)-(c[v>>2]|0)|0)>>>0)c[T>>2]=(c[v>>2]|0)+(c[X>>2]|0);u=(c[X>>2]|0)-(c[V>>2]|0)<<2;s=Mm((c[x>>2]|0)-(c[v>>2]|0)+1|0)|0;if((u|0)>(s-(Mm((c[c[p>>2]>>2]|0)+1|0)|0)|0)){c[V>>2]=c[X>>2];c[c[p>>2]>>2]=2+(c[x>>2]|0)-(c[v>>2]|0);}if(((c[n>>2]|0)+(c[X>>2]|0)|0)==(c[o>>2]|0))break;}s=c[v>>2]|0;if((d[(c[Y>>2]|0)+(c[X>>2]|0)>>0]|0|0)<(d[(c[n>>2]|0)+(c[X>>2]|0)>>0]|0|0)){c[c[R>>2]>>2]=s;c[L>>2]=c[X>>2];if((c[v>>2]|0)>>>0<=(c[C>>2]|0)>>>0){$=29;break;}c[R>>2]=(c[W>>2]|0)+4;c[v>>2]=c[(c[W>>2]|0)+4>>2];}else{c[c[S>>2]>>2]=s;c[M>>2]=c[X>>2];if((c[v>>2]|0)>>>0<=(c[C>>2]|0)>>>0){$=32;break;}c[S>>2]=c[W>>2];c[v>>2]=c[c[W>>2]>>2];}}if(($|0)==29)c[R>>2]=U;else if(($|0)==32)c[S>>2]=U;c[c[S>>2]>>2]=0;c[c[R>>2]>>2]=0;c[(c[k>>2]|0)+24>>2]=(c[T>>2]|0)-8;if((c[V>>2]|0)>>>0<3){aa=c[V>>2]|0;l=j;return aa|0;}c[Z>>2]=(c[x>>2]|0)-((c[c[p>>2]>>2]|0)-2);aa=c[V>>2]|0;l=j;return aa|0;}function Ym(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;j=l;l=l+112|0;k=j+108|0;m=j+104|0;n=j+100|0;o=j+96|0;p=j+92|0;q=j+88|0;r=j+84|0;s=j+80|0;t=j+76|0;u=j+72|0;v=j+68|0;w=j+64|0;x=j+60|0;y=j+56|0;z=j+52|0;A=j+48|0;B=j+44|0;C=j+40|0;D=j+36|0;E=j+32|0;F=j+28|0;G=j+24|0;H=j+20|0;I=j+16|0;J=j+12|0;K=j+8|0;L=j+4|0;M=j;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=c[(c[k>>2]|0)+44>>2];c[t>>2]=(c[(c[m>>2]|0)+4>>2]|0)-1;c[u>>2]=(1<<c[t>>2])-1;c[v>>2]=0;c[w>>2]=0;c[x>>2]=c[(c[k>>2]|0)+4>>2];c[y>>2]=c[(c[k>>2]|0)+8>>2];c[z>>2]=c[(c[k>>2]|0)+12>>2];c[A>>2]=(c[n>>2]|0)>>>0>=(c[z>>2]|0)>>>0?(c[x>>2]|0)+(c[n>>2]|0)|0:(c[y>>2]|0)+(c[n>>2]|0)|0;c[B>>2]=(c[n>>2]|0)>>>0>=(c[z>>2]|0)>>>0?c[o>>2]|0:(c[y>>2]|0)+(c[z>>2]|0)|0;c[C>>2]=(c[y>>2]|0)+(c[z>>2]|0);c[D>>2]=(c[x>>2]|0)+(c[z>>2]|0);c[F>>2]=(c[s>>2]|0)+((c[n>>2]&c[u>>2])<<1<<2);c[G>>2]=(c[F>>2]|0)+4;c[H>>2]=c[c[F>>2]>>2];c[J>>2]=c[(c[k>>2]|0)+16>>2];while(1){k=c[p>>2]|0;c[p>>2]=k+-1;if(!k){N=23;break;}if((c[H>>2]|0)>>>0<=(c[J>>2]|0)>>>0){N=23;break;}c[K>>2]=(c[s>>2]|0)+((c[H>>2]&c[u>>2])<<1<<2);c[L>>2]=(c[v>>2]|0)>>>0<(c[w>>2]|0)>>>0?c[v>>2]|0:c[w>>2]|0;if((c[r>>2]|0?((c[H>>2]|0)+(c[L>>2]|0)|0)>>>0<(c[z>>2]|0)>>>0:0)?(c[n>>2]|0)>>>0>=(c[z>>2]|0)>>>0:0){c[E>>2]=(c[y>>2]|0)+(c[H>>2]|0);k=Lm((c[A>>2]|0)+(c[L>>2]|0)|0,(c[E>>2]|0)+(c[L>>2]|0)|0,c[B>>2]|0,c[C>>2]|0,c[D>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+k;if(((c[H>>2]|0)+(c[L>>2]|0)|0)>>>0>=(c[z>>2]|0)>>>0)c[E>>2]=(c[x>>2]|0)+(c[H>>2]|0);}else{if(c[r>>2]|0?((c[H>>2]|0)+(c[L>>2]|0)|0)>>>0<(c[z>>2]|0)>>>0:0)O=c[y>>2]|0;else O=c[x>>2]|0;c[M>>2]=O;c[E>>2]=(c[M>>2]|0)+(c[H>>2]|0);k=Qm((c[A>>2]|0)+(c[L>>2]|0)|0,(c[E>>2]|0)+(c[L>>2]|0)|0,c[B>>2]|0)|0;c[L>>2]=(c[L>>2]|0)+k;}if(((c[A>>2]|0)+(c[L>>2]|0)|0)==(c[B>>2]|0)){N=23;break;}k=c[H>>2]|0;if((d[(c[E>>2]|0)+(c[L>>2]|0)>>0]|0|0)<(d[(c[A>>2]|0)+(c[L>>2]|0)>>0]|0|0)){c[c[F>>2]>>2]=k;c[v>>2]=c[L>>2];if((c[H>>2]|0)>>>0<=(c[q>>2]|0)>>>0){N=17;break;}c[F>>2]=(c[K>>2]|0)+4;c[H>>2]=c[(c[K>>2]|0)+4>>2];}else{c[c[G>>2]>>2]=k;c[w>>2]=c[L>>2];if((c[H>>2]|0)>>>0<=(c[q>>2]|0)>>>0){N=20;break;}c[G>>2]=c[K>>2];c[H>>2]=c[c[K>>2]>>2];}}if((N|0)==17){c[F>>2]=I;P=c[G>>2]|0;c[P>>2]=0;Q=c[F>>2]|0;c[Q>>2]=0;l=j;return;}else if((N|0)==20){c[G>>2]=I;P=c[G>>2]|0;c[P>>2]=0;Q=c[F>>2]|0;c[Q>>2]=0;l=j;return;}else if((N|0)==23){P=c[G>>2]|0;c[P>>2]=0;Q=c[F>>2]|0;c[Q>>2]=0;l=j;return;}}function Zm(a,b,e,f,g,h,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;j=l;l=l+240|0;k=j+224|0;m=j+220|0;n=j+216|0;o=j+212|0;p=j+208|0;q=j+204|0;r=j+200|0;s=j+196|0;t=j+192|0;u=j+188|0;v=j+184|0;w=j+180|0;x=j+176|0;z=j+172|0;A=j+168|0;B=j+164|0;C=j+160|0;D=j+156|0;E=j+152|0;F=j+148|0;G=j+144|0;H=j+140|0;I=j+136|0;J=j+132|0;K=j+128|0;L=j+124|0;M=j+120|0;N=j+116|0;O=j+112|0;P=j+108|0;Q=j+104|0;R=j+100|0;S=j+96|0;T=j+92|0;U=j+88|0;V=j+84|0;W=j+80|0;X=j+76|0;Y=j+72|0;Z=j+68|0;_=j+64|0;$=j+60|0;aa=j+56|0;ba=j+52|0;ca=j+48|0;da=j+44|0;ea=j+40|0;fa=j+36|0;ga=j+32|0;ha=j+28|0;ia=j+24|0;ja=j+20|0;ka=j+16|0;la=j+12|0;ma=j+8|0;na=j+4|0;oa=j;c[k>>2]=a;c[m>>2]=b;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=h;c[r>>2]=i;c[s>>2]=c[(c[k>>2]|0)+36>>2];c[t>>2]=c[(c[o>>2]|0)+8>>2];c[u>>2]=c[(c[k>>2]|0)+44>>2];c[v>>2]=c[(c[o>>2]|0)+4>>2];c[w>>2]=c[(c[k>>2]|0)+4>>2];c[x>>2]=c[(c[k>>2]|0)+8>>2];c[z>>2]=c[p>>2];c[A>>2]=c[z>>2];c[B>>2]=c[z>>2];c[C>>2]=c[(c[k>>2]|0)+16>>2];c[D>>2]=(c[x>>2]|0)+(c[C>>2]|0);c[E>>2]=c[(c[k>>2]|0)+12>>2];c[F>>2]=(c[w>>2]|0)+(c[E>>2]|0);c[G>>2]=(c[x>>2]|0)+(c[E>>2]|0);c[H>>2]=(c[z>>2]|0)+(c[q>>2]|0);c[I>>2]=(c[H>>2]|0)+-8;c[J>>2]=c[c[n>>2]>>2];c[K>>2]=c[(c[n>>2]|0)+4>>2];a:while(1){if((c[A>>2]|0)>>>0>=(c[I>>2]|0)>>>0)break;c[L>>2]=Dk(c[A>>2]|0,c[v>>2]|0,c[r>>2]|0)|0;c[M>>2]=c[(c[u>>2]|0)+(c[L>>2]<<2)>>2];c[N>>2]=(c[M>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[x>>2]|0:c[w>>2]|0;c[O>>2]=(c[N>>2]|0)+(c[M>>2]|0);c[P>>2]=Dk(c[A>>2]|0,c[t>>2]|0,8)|0;c[Q>>2]=c[(c[s>>2]|0)+(c[P>>2]<<2)>>2];c[R>>2]=(c[Q>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[x>>2]|0:c[w>>2]|0;c[S>>2]=(c[R>>2]|0)+(c[Q>>2]|0);c[T>>2]=(c[A>>2]|0)-(c[w>>2]|0);c[U>>2]=(c[T>>2]|0)+1-(c[J>>2]|0);c[V>>2]=(c[U>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[x>>2]|0:c[w>>2]|0;c[W>>2]=(c[V>>2]|0)+(c[U>>2]|0);q=c[T>>2]|0;c[(c[s>>2]|0)+(c[P>>2]<<2)>>2]=q;c[(c[u>>2]|0)+(c[L>>2]<<2)>>2]=q;if(((c[U>>2]|0)>>>0>(c[C>>2]|0)>>>0?((c[E>>2]|0)-1-(c[U>>2]|0)|0)>>>0>=3:0)|0?(q=Rk(c[W>>2]|0)|0,(q|0)==(Rk((c[A>>2]|0)+1|0)|0)):0){c[Y>>2]=(c[U>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[X>>2]=(_m((c[A>>2]|0)+1+4|0,(c[W>>2]|0)+4|0,c[H>>2]|0,c[Y>>2]|0,c[F>>2]|0)|0)+4;c[A>>2]=(c[A>>2]|0)+1;$m(c[m>>2]|0,(c[A>>2]|0)-(c[B>>2]|0)|0,c[B>>2]|0,0,(c[X>>2]|0)-3|0);}else pa=6;do{if((pa|0)==6){pa=0;if((c[Q>>2]|0)>>>0>(c[C>>2]|0)>>>0?(q=Mk(c[S>>2]|0)|0,z=y,k=Mk(c[A>>2]|0)|0,(q|0)==(k|0)&(z|0)==(y|0)):0){c[Z>>2]=(c[Q>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[_>>2]=(c[Q>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[D>>2]|0:c[F>>2]|0;c[X>>2]=(_m((c[A>>2]|0)+8|0,(c[S>>2]|0)+8|0,c[H>>2]|0,c[Z>>2]|0,c[F>>2]|0)|0)+8;c[$>>2]=(c[T>>2]|0)-(c[Q>>2]|0);while(1){if(!(((c[A>>2]|0)>>>0>(c[B>>2]|0)>>>0?(c[S>>2]|0)>>>0>(c[_>>2]|0)>>>0:0)|0))break;if((d[(c[A>>2]|0)+-1>>0]|0|0)!=(d[(c[S>>2]|0)+-1>>0]|0|0))break;c[A>>2]=(c[A>>2]|0)+-1;c[S>>2]=(c[S>>2]|0)+-1;c[X>>2]=(c[X>>2]|0)+1;}c[K>>2]=c[J>>2];c[J>>2]=c[$>>2];$m(c[m>>2]|0,(c[A>>2]|0)-(c[B>>2]|0)|0,c[B>>2]|0,(c[$>>2]|0)+2|0,(c[X>>2]|0)-3|0);break;}if((c[M>>2]|0)>>>0>(c[C>>2]|0)>>>0?(z=Rk(c[O>>2]|0)|0,(z|0)==(Rk(c[A>>2]|0)|0)):0){c[aa>>2]=Dk((c[A>>2]|0)+1|0,c[t>>2]|0,8)|0;c[ba>>2]=c[(c[s>>2]|0)+(c[aa>>2]<<2)>>2];c[ca>>2]=(c[ba>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[x>>2]|0:c[w>>2]|0;c[da>>2]=(c[ca>>2]|0)+(c[ba>>2]|0);c[(c[s>>2]|0)+(c[aa>>2]<<2)>>2]=(c[T>>2]|0)+1;b:do{if((c[ba>>2]|0)>>>0>(c[C>>2]|0)>>>0?(z=Mk(c[da>>2]|0)|0,k=y,q=Mk((c[A>>2]|0)+1|0)|0,(z|0)==(q|0)&(k|0)==(y|0)):0){c[fa>>2]=(c[ba>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[ga>>2]=(c[ba>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[D>>2]|0:c[F>>2]|0;c[X>>2]=(_m((c[A>>2]|0)+9|0,(c[da>>2]|0)+8|0,c[H>>2]|0,c[fa>>2]|0,c[F>>2]|0)|0)+8;c[A>>2]=(c[A>>2]|0)+1;c[ea>>2]=(c[T>>2]|0)+1-(c[ba>>2]|0);while(1){if(!(((c[A>>2]|0)>>>0>(c[B>>2]|0)>>>0?(c[da>>2]|0)>>>0>(c[ga>>2]|0)>>>0:0)|0))break b;if((d[(c[A>>2]|0)+-1>>0]|0|0)!=(d[(c[da>>2]|0)+-1>>0]|0|0))break b;c[A>>2]=(c[A>>2]|0)+-1;c[da>>2]=(c[da>>2]|0)+-1;c[X>>2]=(c[X>>2]|0)+1;}}else pa=21;}while(0);c:do{if((pa|0)==21){pa=0;c[ha>>2]=(c[M>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[ia>>2]=(c[M>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[D>>2]|0:c[F>>2]|0;c[X>>2]=(_m((c[A>>2]|0)+4|0,(c[O>>2]|0)+4|0,c[H>>2]|0,c[ha>>2]|0,c[F>>2]|0)|0)+4;c[ea>>2]=(c[T>>2]|0)-(c[M>>2]|0);while(1){if(!(((c[A>>2]|0)>>>0>(c[B>>2]|0)>>>0?(c[O>>2]|0)>>>0>(c[ia>>2]|0)>>>0:0)|0))break c;if((d[(c[A>>2]|0)+-1>>0]|0|0)!=(d[(c[O>>2]|0)+-1>>0]|0|0))break c;c[A>>2]=(c[A>>2]|0)+-1;c[O>>2]=(c[O>>2]|0)+-1;c[X>>2]=(c[X>>2]|0)+1;}}}while(0);c[K>>2]=c[J>>2];c[J>>2]=c[ea>>2];$m(c[m>>2]|0,(c[A>>2]|0)-(c[B>>2]|0)|0,c[B>>2]|0,(c[ea>>2]|0)+2|0,(c[X>>2]|0)-3|0);break;}c[A>>2]=(c[A>>2]|0)+(((c[A>>2]|0)-(c[B>>2]|0)>>8)+1);continue a;}}while(0);c[A>>2]=(c[A>>2]|0)+(c[X>>2]|0);c[B>>2]=c[A>>2];d:do{if((c[A>>2]|0)>>>0<=(c[I>>2]|0)>>>0){k=(c[T>>2]|0)+2|0;q=c[u>>2]|0;c[q+((Dk((c[w>>2]|0)+(c[T>>2]|0)+2|0,c[v>>2]|0,c[r>>2]|0)|0)<<2)>>2]=k;k=(c[T>>2]|0)+2|0;q=c[s>>2]|0;c[q+((Dk((c[w>>2]|0)+(c[T>>2]|0)+2|0,c[t>>2]|0,8)|0)<<2)>>2]=k;k=(c[A>>2]|0)+-2-(c[w>>2]|0)|0;q=c[u>>2]|0;c[q+((Dk((c[A>>2]|0)+-2|0,c[v>>2]|0,c[r>>2]|0)|0)<<2)>>2]=k;k=(c[A>>2]|0)+-2-(c[w>>2]|0)|0;q=c[s>>2]|0;c[q+((Dk((c[A>>2]|0)+-2|0,c[t>>2]|0,8)|0)<<2)>>2]=k;while(1){if((c[A>>2]|0)>>>0>(c[I>>2]|0)>>>0)break d;c[ja>>2]=(c[A>>2]|0)-(c[w>>2]|0);c[ka>>2]=(c[ja>>2]|0)-(c[K>>2]|0);c[la>>2]=(c[ka>>2]|0)>>>0<(c[E>>2]|0)>>>0?(c[x>>2]|0)+(c[ka>>2]|0)|0:(c[w>>2]|0)+(c[ka>>2]|0)|0;if(!(((c[ka>>2]|0)>>>0>(c[C>>2]|0)>>>0?((c[E>>2]|0)-1-(c[ka>>2]|0)|0)>>>0>=3:0)|0))break d;k=Rk(c[la>>2]|0)|0;if((k|0)!=(Rk(c[A>>2]|0)|0))break d;c[ma>>2]=(c[ka>>2]|0)>>>0<(c[E>>2]|0)>>>0?c[G>>2]|0:c[H>>2]|0;c[na>>2]=(_m((c[A>>2]|0)+4|0,(c[la>>2]|0)+4|0,c[H>>2]|0,c[ma>>2]|0,c[F>>2]|0)|0)+4;c[oa>>2]=c[K>>2];c[K>>2]=c[J>>2];c[J>>2]=c[oa>>2];$m(c[m>>2]|0,0,c[B>>2]|0,0,(c[na>>2]|0)-3|0);k=c[ja>>2]|0;q=c[u>>2]|0;c[q+((Dk(c[A>>2]|0,c[v>>2]|0,c[r>>2]|0)|0)<<2)>>2]=k;k=c[ja>>2]|0;q=c[s>>2]|0;c[q+((Dk(c[A>>2]|0,c[t>>2]|0,8)|0)<<2)>>2]=k;c[A>>2]=(c[A>>2]|0)+(c[na>>2]|0);c[B>>2]=c[A>>2];}}}while(0);}c[c[n>>2]>>2]=c[J>>2];c[(c[n>>2]|0)+4>>2]=c[K>>2];l=j;return(c[H>>2]|0)-(c[B>>2]|0)|0;}function _m(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=cn(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(cn((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function $m(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;an(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function an(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{bn(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function bn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function cn(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=dn(c[i>>2]|0)|0;c[n>>2]=e^(dn(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=en(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=dn(c[i>>2]|0)|0;c[o>>2]=e^(dn(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=en(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((fn()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=Rk(c[i>>2]|0)|0,(o|0)==(Rk(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(gn(c[i>>2]|0)|0)&65535,(o|0)==((gn(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function dn(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function en(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(Lk()|0)!=0;f=(fn()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function fn(){return 0;}function gn(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function hn(a,b,e,f,g,h,i,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;k=l;l=l+176|0;m=k+164|0;n=k+160|0;o=k+156|0;p=k+152|0;q=k+148|0;r=k+144|0;s=k+140|0;t=k+136|0;u=k+132|0;v=k+128|0;w=k+124|0;x=k+120|0;y=k+116|0;z=k+112|0;A=k+108|0;B=k+104|0;C=k+100|0;D=k+96|0;E=k+92|0;F=k+88|0;G=k+84|0;H=k+80|0;I=k+76|0;J=k+72|0;K=k+68|0;L=k+64|0;M=k+60|0;N=k+56|0;O=k+52|0;P=k+48|0;Q=k+44|0;R=k+40|0;S=k+36|0;T=k+32|0;U=k+28|0;V=k+24|0;W=k+20|0;X=k+16|0;Y=k+12|0;Z=k+8|0;_=k+4|0;$=k;c[m>>2]=a;c[n>>2]=b;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=j;c[u>>2]=c[(c[m>>2]|0)+36>>2];c[v>>2]=c[(c[m>>2]|0)+4>>2];c[w>>2]=c[(c[m>>2]|0)+8>>2];c[x>>2]=c[p>>2];c[y>>2]=c[x>>2];c[z>>2]=c[x>>2];c[A>>2]=c[(c[m>>2]|0)+16>>2];c[B>>2]=(c[w>>2]|0)+(c[A>>2]|0);c[C>>2]=c[(c[m>>2]|0)+12>>2];c[D>>2]=(c[v>>2]|0)+(c[C>>2]|0);c[E>>2]=(c[w>>2]|0)+(c[C>>2]|0);c[F>>2]=(c[x>>2]|0)+(c[q>>2]|0);c[G>>2]=(c[F>>2]|0)+-8;c[H>>2]=c[c[o>>2]>>2];c[I>>2]=c[(c[o>>2]|0)+4>>2];a:while(1){if((c[y>>2]|0)>>>0>=(c[G>>2]|0)>>>0)break;c[J>>2]=Tk(c[y>>2]|0,c[r>>2]|0,c[t>>2]|0)|0;c[K>>2]=c[(c[u>>2]|0)+(c[J>>2]<<2)>>2];c[L>>2]=(c[K>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[w>>2]|0:c[v>>2]|0;c[M>>2]=(c[L>>2]|0)+(c[K>>2]|0);c[N>>2]=(c[y>>2]|0)-(c[v>>2]|0);c[O>>2]=(c[N>>2]|0)+1-(c[H>>2]|0);c[P>>2]=(c[O>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[w>>2]|0:c[v>>2]|0;c[Q>>2]=(c[P>>2]|0)+(c[O>>2]|0);c[(c[u>>2]|0)+(c[J>>2]<<2)>>2]=c[N>>2];if(((c[O>>2]|0)>>>0>(c[A>>2]|0)>>>0?((c[C>>2]|0)-1-(c[O>>2]|0)|0)>>>0>=3:0)|0?(q=fl(c[Q>>2]|0)|0,(q|0)==(fl((c[y>>2]|0)+1|0)|0)):0){c[S>>2]=(c[O>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[E>>2]|0:c[F>>2]|0;c[R>>2]=(jn((c[y>>2]|0)+1+4|0,(c[Q>>2]|0)+4|0,c[F>>2]|0,c[S>>2]|0,c[D>>2]|0)|0)+4;c[y>>2]=(c[y>>2]|0)+1;kn(c[n>>2]|0,(c[y>>2]|0)-(c[z>>2]|0)|0,c[z>>2]|0,0,(c[R>>2]|0)-3|0);}else aa=6;do{if((aa|0)==6){aa=0;if((c[K>>2]|0)>>>0>=(c[A>>2]|0)>>>0?(q=fl(c[M>>2]|0)|0,(q|0)==(fl(c[y>>2]|0)|0)):0){c[T>>2]=(c[K>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[E>>2]|0:c[F>>2]|0;c[U>>2]=(c[K>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[B>>2]|0:c[D>>2]|0;c[R>>2]=(jn((c[y>>2]|0)+4|0,(c[M>>2]|0)+4|0,c[F>>2]|0,c[T>>2]|0,c[D>>2]|0)|0)+4;while(1){if(!(((c[y>>2]|0)>>>0>(c[z>>2]|0)>>>0?(c[M>>2]|0)>>>0>(c[U>>2]|0)>>>0:0)|0))break;if((d[(c[y>>2]|0)+-1>>0]|0|0)!=(d[(c[M>>2]|0)+-1>>0]|0|0))break;c[y>>2]=(c[y>>2]|0)+-1;c[M>>2]=(c[M>>2]|0)+-1;c[R>>2]=(c[R>>2]|0)+1;}c[V>>2]=(c[N>>2]|0)-(c[K>>2]|0);c[I>>2]=c[H>>2];c[H>>2]=c[V>>2];kn(c[n>>2]|0,(c[y>>2]|0)-(c[z>>2]|0)|0,c[z>>2]|0,(c[V>>2]|0)+2|0,(c[R>>2]|0)-3|0);break;}c[y>>2]=(c[y>>2]|0)+(((c[y>>2]|0)-(c[z>>2]|0)>>8)+(c[s>>2]|0));continue a;}}while(0);c[y>>2]=(c[y>>2]|0)+(c[R>>2]|0);c[z>>2]=c[y>>2];b:do{if((c[y>>2]|0)>>>0<=(c[G>>2]|0)>>>0){q=(c[N>>2]|0)+2|0;x=c[u>>2]|0;c[x+((Tk((c[v>>2]|0)+(c[N>>2]|0)+2|0,c[r>>2]|0,c[t>>2]|0)|0)<<2)>>2]=q;q=(c[y>>2]|0)+-2-(c[v>>2]|0)|0;x=c[u>>2]|0;c[x+((Tk((c[y>>2]|0)+-2|0,c[r>>2]|0,c[t>>2]|0)|0)<<2)>>2]=q;while(1){if((c[y>>2]|0)>>>0>(c[G>>2]|0)>>>0)break b;c[W>>2]=(c[y>>2]|0)-(c[v>>2]|0);c[X>>2]=(c[W>>2]|0)-(c[I>>2]|0);c[Y>>2]=(c[X>>2]|0)>>>0<(c[C>>2]|0)>>>0?(c[w>>2]|0)+(c[X>>2]|0)|0:(c[v>>2]|0)+(c[X>>2]|0)|0;if(!(((c[X>>2]|0)>>>0>(c[A>>2]|0)>>>0?((c[C>>2]|0)-1-(c[X>>2]|0)|0)>>>0>=3:0)|0))break b;q=fl(c[Y>>2]|0)|0;if((q|0)!=(fl(c[y>>2]|0)|0))break b;c[Z>>2]=(c[X>>2]|0)>>>0<(c[C>>2]|0)>>>0?c[E>>2]|0:c[F>>2]|0;c[_>>2]=(jn((c[y>>2]|0)+4|0,(c[Y>>2]|0)+4|0,c[F>>2]|0,c[Z>>2]|0,c[D>>2]|0)|0)+4;c[$>>2]=c[I>>2];c[I>>2]=c[H>>2];c[H>>2]=c[$>>2];kn(c[n>>2]|0,0,c[z>>2]|0,0,(c[_>>2]|0)-3|0);q=c[W>>2]|0;x=c[u>>2]|0;c[x+((Tk(c[y>>2]|0,c[r>>2]|0,c[t>>2]|0)|0)<<2)>>2]=q;c[y>>2]=(c[y>>2]|0)+(c[_>>2]|0);c[z>>2]=c[y>>2];}}}while(0);}c[c[o>>2]>>2]=c[H>>2];c[(c[o>>2]|0)+4>>2]=c[I>>2];l=k;return(c[F>>2]|0)-(c[z>>2]|0)|0;}function jn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=nn(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(nn((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function kn(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;ln(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function ln(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{mn(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function mn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function nn(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=on(c[i>>2]|0)|0;c[n>>2]=e^(on(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=pn(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=on(c[i>>2]|0)|0;c[o>>2]=e^(on(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=pn(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((qn()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=fl(c[i>>2]|0)|0,(o|0)==(fl(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(rn(c[i>>2]|0)|0)&65535,(o|0)==((rn(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function on(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function pn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=($k()|0)!=0;f=(qn()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function qn(){return 0;}function rn(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function sn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;switch(c[(c[j>>2]|0)+16>>2]|0){case 7:case 6:{c[h>>2]=un(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,6)|0;o=c[h>>2]|0;l=g;return o|0;}case 5:{c[h>>2]=un(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,5)|0;o=c[h>>2]|0;l=g;return o|0;}default:{c[h>>2]=un(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,4)|0;o=c[h>>2]|0;l=g;return o|0;}}return 0;}function tn(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0;h=l;l=l+320|0;i=h+308|0;j=h+304|0;k=h+300|0;m=h+296|0;n=h+292|0;o=h+288|0;p=h+284|0;q=h+280|0;r=h+276|0;s=h+272|0;t=h+268|0;u=h+264|0;v=h+260|0;w=h+256|0;x=h+252|0;y=h+248|0;z=h+244|0;A=h+240|0;B=h+236|0;C=h+232|0;D=h+228|0;E=h+224|0;F=h+220|0;G=h+216|0;H=h+212|0;I=h+208|0;J=h+204|0;K=h+200|0;L=h+196|0;M=h+192|0;N=h+188|0;O=h+184|0;P=h+180|0;Q=h+176|0;R=h+172|0;S=h+168|0;T=h+164|0;U=h+160|0;V=h+156|0;W=h+152|0;X=h+148|0;Y=h+144|0;Z=h+140|0;_=h+136|0;$=h+132|0;aa=h+128|0;ba=h+124|0;ca=h+120|0;da=h+116|0;ea=h+112|0;fa=h+108|0;ga=h+104|0;ha=h+100|0;ia=h+96|0;ja=h+92|0;ka=h+88|0;la=h+84|0;ma=h+80|0;na=h+76|0;oa=h+72|0;pa=h+68|0;qa=h+64|0;ra=h+60|0;sa=h+56|0;ta=h+52|0;ua=h+48|0;va=h+44|0;wa=h+40|0;xa=h+36|0;ya=h+32|0;za=h+28|0;Aa=h+24|0;Ba=h+20|0;Ca=h+16|0;Da=h+12|0;Ea=h+8|0;Fa=h+4|0;Ga=h;c[Ca>>2]=a;c[Da>>2]=b;c[Ea>>2]=e;c[Fa>>2]=f;c[Ga>>2]=g;switch(c[(c[Da>>2]|0)+16>>2]|0){case 7:case 6:{g=c[Da>>2]|0;f=c[Ea>>2]|0;e=c[Fa>>2]|0;b=c[Ga>>2]|0;c[i>>2]=c[Ca>>2];c[j>>2]=g;c[k>>2]=f;c[m>>2]=e;c[n>>2]=b;c[o>>2]=6;c[p>>2]=0;c[q>>2]=c[(c[i>>2]|0)+44>>2];c[r>>2]=1<<c[(c[j>>2]|0)+4>>2];c[s>>2]=(c[r>>2]|0)-1;c[t>>2]=c[(c[i>>2]|0)+4>>2];c[u>>2]=c[(c[i>>2]|0)+8>>2];c[v>>2]=c[(c[i>>2]|0)+12>>2];c[w>>2]=(c[t>>2]|0)+(c[v>>2]|0);c[x>>2]=(c[u>>2]|0)+(c[v>>2]|0);c[y>>2]=c[(c[i>>2]|0)+16>>2];c[z>>2]=(c[k>>2]|0)-(c[t>>2]|0);if((c[z>>2]|0)>>>0>(c[r>>2]|0)>>>0)Ha=(c[z>>2]|0)-(c[r>>2]|0)|0;else Ha=0;c[A>>2]=Ha;c[B>>2]=1<<c[(c[j>>2]|0)+12>>2];c[C>>2]=3;c[D>>2]=mk(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[o>>2]|0)|0;while(1){if(!(((c[B>>2]|0)>>>0>0?(c[D>>2]|0)>>>0>(c[y>>2]|0)>>>0:0)|0))break;c[E>>2]=0;if(c[p>>2]|0?(c[D>>2]|0)>>>0<(c[v>>2]|0)>>>0:0){c[G>>2]=(c[u>>2]|0)+(c[D>>2]|0);o=Bk(c[G>>2]|0)|0;if((o|0)==(Bk(c[k>>2]|0)|0))c[E>>2]=(Lm((c[k>>2]|0)+4|0,(c[G>>2]|0)+4|0,c[m>>2]|0,c[x>>2]|0,c[w>>2]|0)|0)+4;}else Ia=38;if((Ia|0)==38?(Ia=0,c[F>>2]=(c[t>>2]|0)+(c[D>>2]|0),(d[(c[F>>2]|0)+(c[C>>2]|0)>>0]|0|0)==(d[(c[k>>2]|0)+(c[C>>2]|0)>>0]|0|0)):0)c[E>>2]=Qm(c[k>>2]|0,c[F>>2]|0,c[m>>2]|0)|0;if((c[E>>2]|0)>>>0>(c[C>>2]|0)>>>0?(c[C>>2]=c[E>>2],c[c[n>>2]>>2]=(c[z>>2]|0)-(c[D>>2]|0)+2,((c[k>>2]|0)+(c[E>>2]|0)|0)==(c[m>>2]|0)):0)break;if((c[D>>2]|0)>>>0<=(c[A>>2]|0)>>>0)break;c[D>>2]=c[(c[q>>2]|0)+((c[D>>2]&c[s>>2])<<2)>>2];c[B>>2]=(c[B>>2]|0)+-1;}c[Ba>>2]=c[C>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}case 5:{C=c[Da>>2]|0;B=c[Ea>>2]|0;s=c[Fa>>2]|0;D=c[Ga>>2]|0;c[H>>2]=c[Ca>>2];c[I>>2]=C;c[J>>2]=B;c[K>>2]=s;c[L>>2]=D;c[M>>2]=5;c[N>>2]=0;c[O>>2]=c[(c[H>>2]|0)+44>>2];c[P>>2]=1<<c[(c[I>>2]|0)+4>>2];c[Q>>2]=(c[P>>2]|0)-1;c[R>>2]=c[(c[H>>2]|0)+4>>2];c[S>>2]=c[(c[H>>2]|0)+8>>2];c[T>>2]=c[(c[H>>2]|0)+12>>2];c[U>>2]=(c[R>>2]|0)+(c[T>>2]|0);c[V>>2]=(c[S>>2]|0)+(c[T>>2]|0);c[W>>2]=c[(c[H>>2]|0)+16>>2];c[X>>2]=(c[J>>2]|0)-(c[R>>2]|0);if((c[X>>2]|0)>>>0>(c[P>>2]|0)>>>0)Ka=(c[X>>2]|0)-(c[P>>2]|0)|0;else Ka=0;c[Y>>2]=Ka;c[Z>>2]=1<<c[(c[I>>2]|0)+12>>2];c[_>>2]=3;c[$>>2]=mk(c[H>>2]|0,c[I>>2]|0,c[J>>2]|0,c[M>>2]|0)|0;while(1){if(!(((c[Z>>2]|0)>>>0>0?(c[$>>2]|0)>>>0>(c[W>>2]|0)>>>0:0)|0))break;c[aa>>2]=0;if(c[N>>2]|0?(c[$>>2]|0)>>>0<(c[T>>2]|0)>>>0:0){c[ca>>2]=(c[S>>2]|0)+(c[$>>2]|0);M=Bk(c[ca>>2]|0)|0;if((M|0)==(Bk(c[J>>2]|0)|0))c[aa>>2]=(Lm((c[J>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[K>>2]|0,c[V>>2]|0,c[U>>2]|0)|0)+4;}else Ia=23;if((Ia|0)==23?(Ia=0,c[ba>>2]=(c[R>>2]|0)+(c[$>>2]|0),(d[(c[ba>>2]|0)+(c[_>>2]|0)>>0]|0|0)==(d[(c[J>>2]|0)+(c[_>>2]|0)>>0]|0|0)):0)c[aa>>2]=Qm(c[J>>2]|0,c[ba>>2]|0,c[K>>2]|0)|0;if((c[aa>>2]|0)>>>0>(c[_>>2]|0)>>>0?(c[_>>2]=c[aa>>2],c[c[L>>2]>>2]=(c[X>>2]|0)-(c[$>>2]|0)+2,((c[J>>2]|0)+(c[aa>>2]|0)|0)==(c[K>>2]|0)):0)break;if((c[$>>2]|0)>>>0<=(c[Y>>2]|0)>>>0)break;c[$>>2]=c[(c[O>>2]|0)+((c[$>>2]&c[Q>>2])<<2)>>2];c[Z>>2]=(c[Z>>2]|0)+-1;}c[Ba>>2]=c[_>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}default:{_=c[Da>>2]|0;Da=c[Ea>>2]|0;Ea=c[Fa>>2]|0;Fa=c[Ga>>2]|0;c[da>>2]=c[Ca>>2];c[ea>>2]=_;c[fa>>2]=Da;c[ga>>2]=Ea;c[ha>>2]=Fa;c[ia>>2]=4;c[ja>>2]=0;c[ka>>2]=c[(c[da>>2]|0)+44>>2];c[la>>2]=1<<c[(c[ea>>2]|0)+4>>2];c[ma>>2]=(c[la>>2]|0)-1;c[na>>2]=c[(c[da>>2]|0)+4>>2];c[oa>>2]=c[(c[da>>2]|0)+8>>2];c[pa>>2]=c[(c[da>>2]|0)+12>>2];c[qa>>2]=(c[na>>2]|0)+(c[pa>>2]|0);c[ra>>2]=(c[oa>>2]|0)+(c[pa>>2]|0);c[sa>>2]=c[(c[da>>2]|0)+16>>2];c[ta>>2]=(c[fa>>2]|0)-(c[na>>2]|0);if((c[ta>>2]|0)>>>0>(c[la>>2]|0)>>>0)La=(c[ta>>2]|0)-(c[la>>2]|0)|0;else La=0;c[ua>>2]=La;c[va>>2]=1<<c[(c[ea>>2]|0)+12>>2];c[wa>>2]=3;c[xa>>2]=mk(c[da>>2]|0,c[ea>>2]|0,c[fa>>2]|0,c[ia>>2]|0)|0;while(1){if(!(((c[va>>2]|0)>>>0>0?(c[xa>>2]|0)>>>0>(c[sa>>2]|0)>>>0:0)|0))break;c[ya>>2]=0;if(c[ja>>2]|0?(c[xa>>2]|0)>>>0<(c[pa>>2]|0)>>>0:0){c[Aa>>2]=(c[oa>>2]|0)+(c[xa>>2]|0);ia=Bk(c[Aa>>2]|0)|0;if((ia|0)==(Bk(c[fa>>2]|0)|0))c[ya>>2]=(Lm((c[fa>>2]|0)+4|0,(c[Aa>>2]|0)+4|0,c[ga>>2]|0,c[ra>>2]|0,c[qa>>2]|0)|0)+4;}else Ia=8;if((Ia|0)==8?(Ia=0,c[za>>2]=(c[na>>2]|0)+(c[xa>>2]|0),(d[(c[za>>2]|0)+(c[wa>>2]|0)>>0]|0|0)==(d[(c[fa>>2]|0)+(c[wa>>2]|0)>>0]|0|0)):0)c[ya>>2]=Qm(c[fa>>2]|0,c[za>>2]|0,c[ga>>2]|0)|0;if((c[ya>>2]|0)>>>0>(c[wa>>2]|0)>>>0?(c[wa>>2]=c[ya>>2],c[c[ha>>2]>>2]=(c[ta>>2]|0)-(c[xa>>2]|0)+2,((c[fa>>2]|0)+(c[ya>>2]|0)|0)==(c[ga>>2]|0)):0)break;if((c[xa>>2]|0)>>>0<=(c[ua>>2]|0)>>>0)break;c[xa>>2]=c[(c[ka>>2]|0)+((c[xa>>2]&c[ma>>2])<<2)>>2];c[va>>2]=(c[va>>2]|0)+-1;}c[Ba>>2]=c[wa>>2];Ja=c[Ba>>2]|0;l=h;return Ja|0;}}return 0;}function un(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+32|0;i=h+24|0;j=h+20|0;k=h+16|0;m=h+12|0;n=h+8|0;o=h+4|0;p=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;if((c[m>>2]|0)>>>0<((c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+24>>2]|0)|0)>>>0){c[i>>2]=0;q=c[i>>2]|0;l=h;return q|0;}else{Wm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[p>>2]|0);c[i>>2]=Xm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,0)|0;q=c[i>>2]|0;l=h;return q|0;}return 0;}function vn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;f=wn(c[h>>2]|0,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,1,0)|0;l=g;return f|0;}function wn(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;i=l;l=l+160|0;j=i+48|0;k=i+40|0;m=i+36|0;n=i+32|0;o=i+28|0;p=i+24|0;q=i+20|0;r=i+16|0;s=i+12|0;t=i+8|0;u=i+4|0;v=i;c[m>>2]=a;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=(c[m>>2]|0)+472+8;c[u>>2]=0;if(!(c[c[m>>2]>>2]|0)){c[k>>2]=-60;w=c[k>>2]|0;l=i;return w|0;}do{if(c[r>>2]|0?(c[c[m>>2]>>2]|0)==1:0){h=c[n>>2]|0;g=c[o>>2]|0;f=(c[m>>2]|0)+116|0;e=(c[m>>2]|0)+240|0;d=eE(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;e=y;b=c[(c[m>>2]|0)+220>>2]|0;a=j;x=f;f=a+104|0;do{c[a>>2]=c[x>>2];a=a+4|0;x=x+4|0;}while((a|0)<(f|0));c[u>>2]=xn(h,g,j,d,e,b)|0;x=(Ph(c[u>>2]|0)|0)!=0;a=c[u>>2]|0;if(!x){c[o>>2]=(c[o>>2]|0)-a;c[n>>2]=(c[n>>2]|0)+(c[u>>2]|0);c[c[m>>2]>>2]=2;break;}c[k>>2]=a;w=c[k>>2]|0;l=i;return w|0;}}while(0);if(!(c[q>>2]|0)){c[k>>2]=c[u>>2];w=c[k>>2]|0;l=i;return w|0;}if(!(Mj(c[t>>2]|0,c[p>>2]|0,c[q>>2]|0)|0))c[(c[t>>2]|0)+24>>2]=c[(c[t>>2]|0)+12>>2];if(c[(c[m>>2]|0)+116+68>>2]|0)Mj((c[m>>2]|0)+408|0,c[p>>2]|0,c[q>>2]|0)|0;t=c[m>>2]|0;j=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;if(c[r>>2]|0)z=yn(t,j,n,o,p,c[s>>2]|0)|0;else z=zn(t,j,n,o,p)|0;c[v>>2]=z;if(Ph(c[v>>2]|0)|0){c[k>>2]=c[v>>2];w=c[k>>2]|0;l=i;return w|0;}z=(c[m>>2]|0)+248|0;p=z;o=dE(c[p>>2]|0,c[p+4>>2]|0,c[q>>2]|0,0)|0;q=z;c[q>>2]=o;c[q+4>>2]=y;q=(c[m>>2]|0)+256|0;o=q;z=dE(c[o>>2]|0,c[o+4>>2]|0,(c[v>>2]|0)+(c[u>>2]|0)|0,0)|0;o=q;c[o>>2]=z;c[o+4>>2]=y;if(c[(c[m>>2]|0)+116+32>>2]|0?(o=(c[m>>2]|0)+248|0,z=dE(c[o>>2]|0,c[o+4>>2]|0,1,0)|0,o=y,q=(c[m>>2]|0)+240|0,m=c[q+4>>2]|0,o>>>0>m>>>0|((o|0)==(m|0)?z>>>0>(c[q>>2]|0)>>>0:0)):0){c[k>>2]=-72;w=c[k>>2]|0;l=i;return w|0;}c[k>>2]=(c[v>>2]|0)+(c[u>>2]|0);w=c[k>>2]|0;l=i;return w|0;}function xn(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;i=l;l=l+64|0;j=i+52|0;k=i+48|0;m=i+44|0;n=i;o=i+40|0;p=i+36|0;q=i+32|0;r=i+28|0;s=i+24|0;t=i+20|0;u=i+16|0;v=i+57|0;w=i+12|0;x=i+56|0;y=i+8|0;c[k>>2]=b;c[m>>2]=d;d=n;c[d>>2]=f;c[d+4>>2]=g;c[o>>2]=h;c[p>>2]=c[k>>2];c[q>>2]=((c[o>>2]|0)>>>0>0&1)+((c[o>>2]|0)>>>0>=256&1)+((c[o>>2]|0)>>>0>=65536&1);c[r>>2]=c[e+32+8>>2]|0?0:c[q>>2]|0;c[s>>2]=(c[e+32+4>>2]|0)>>>0>0&1;c[t>>2]=1<<c[e+4>>2];if(c[e+32>>2]|0){q=n;h=c[q+4>>2]|0;z=0>h>>>0|(0==(h|0)?(c[t>>2]|0)>>>0>=(c[q>>2]|0)>>>0:0);}else z=0;c[u>>2]=z&1;a[v>>0]=(c[e+4>>2]|0)-10<<3;if(c[e+32>>2]|0){z=n;q=c[z+4>>2]|0;t=n;h=c[t+4>>2]|0;g=n;d=c[g+4>>2]|0;A=((q>>>0>0|(q|0)==0&(c[z>>2]|0)>>>0>=256)&1)+((h>>>0>0|(h|0)==0&(c[t>>2]|0)>>>0>=65792)&1)+((d>>>0>0|(d|0)==0&(c[g>>2]|0)>>>0>=4294967295)&1)|0;}else A=0;c[w>>2]=A;a[x>>0]=(c[r>>2]|0)+(c[s>>2]<<2)+(c[u>>2]<<5)+(c[w>>2]<<6);c[y>>2]=0;if((c[m>>2]|0)>>>0<18){c[j>>2]=-70;B=c[j>>2]|0;l=i;return B|0;}if(!(c[e>>2]|0)){Pl(c[k>>2]|0,-47205080);c[y>>2]=4;}k=a[x>>0]|0;x=c[p>>2]|0;e=c[y>>2]|0;c[y>>2]=e+1;a[x+e>>0]=k;if(!(c[u>>2]|0)){k=a[v>>0]|0;v=c[p>>2]|0;e=c[y>>2]|0;c[y>>2]=e+1;a[v+e>>0]=k;}switch(c[r>>2]|0){case 3:{Pl((c[p>>2]|0)+(c[y>>2]|0)|0,c[o>>2]|0);c[y>>2]=(c[y>>2]|0)+4;break;}case 1:{a[(c[p>>2]|0)+(c[y>>2]|0)>>0]=c[o>>2];c[y>>2]=(c[y>>2]|0)+1;break;}case 2:{xl((c[p>>2]|0)+(c[y>>2]|0)|0,c[o>>2]&65535);c[y>>2]=(c[y>>2]|0)+2;break;}default:{}}switch(c[w>>2]|0){case 3:{w=n;Ql((c[p>>2]|0)+(c[y>>2]|0)|0,c[w>>2]|0,c[w+4>>2]|0);c[y>>2]=(c[y>>2]|0)+8;break;}case 1:{w=(c[p>>2]|0)+(c[y>>2]|0)|0;o=n;xl(w,(eE(c[o>>2]|0,c[o+4>>2]|0,256,0)|0)&65535);c[y>>2]=(c[y>>2]|0)+2;break;}case 2:{Pl((c[p>>2]|0)+(c[y>>2]|0)|0,c[n>>2]|0);c[y>>2]=(c[y>>2]|0)+4;break;}default:if(c[u>>2]|0){u=c[n>>2]&255;n=c[p>>2]|0;p=c[y>>2]|0;c[y>>2]=p+1;a[n+p>>0]=u;}}c[j>>2]=c[y>>2];B=c[j>>2]|0;l=i;return B|0;}function yn(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=l;l=l+112|0;i=h+80|0;j=h+76|0;k=h+72|0;m=h+68|0;n=h+64|0;o=h+60|0;p=h+56|0;q=h+52|0;r=h+48|0;s=h+44|0;t=h+40|0;u=h+36|0;v=h+32|0;w=h+28|0;x=h+24|0;y=h+20|0;z=h+16|0;A=h+12|0;B=h+8|0;C=h+4|0;D=h;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=c[(c[k>>2]|0)+232>>2];c[s>>2]=c[p>>2];c[t>>2]=c[o>>2];c[u>>2]=c[m>>2];c[v>>2]=c[u>>2];c[w>>2]=1<<c[(c[k>>2]|0)+116+4>>2];if(c[p>>2]|0?(c[(c[k>>2]|0)+116+32+4>>2]|0)!=0:0)Nh((c[k>>2]|0)+264|0,c[o>>2]|0,c[p>>2]|0)|0;while(1){if(!(c[s>>2]|0)){E=24;break;}c[x>>2]=(c[k>>2]|0)+472+8;c[y>>2]=c[q>>2]&(c[r>>2]|0)>>>0>=(c[s>>2]|0)>>>0;if((c[n>>2]|0)>>>0<6){E=6;break;}if((c[s>>2]|0)>>>0<(c[r>>2]|0)>>>0)c[r>>2]=c[s>>2];p=c[x>>2]|0;o=(c[t>>2]|0)+(c[r>>2]|0)|0;c[i>>2]=c[p>>2];c[i+4>>2]=c[p+4>>2];c[i+8>>2]=c[p+8>>2];c[i+12>>2]=c[p+12>>2];c[i+16>>2]=c[p+16>>2];if(ro(i,o)|0){c[z>>2]=vj(c[(c[k>>2]|0)+116+4+4>>2]|0,c[(c[k>>2]|0)+116+4+24>>2]|0)|0;c[A>>2]=so(c[x>>2]|0,c[z>>2]|0,c[w>>2]|0,c[t>>2]|0)|0;to(c[k>>2]|0,c[A>>2]|0);if((c[(c[x>>2]|0)+24>>2]|0)>>>0<(c[A>>2]|0)>>>0)c[(c[x>>2]|0)+24>>2]=0;else{o=(c[x>>2]|0)+24|0;c[o>>2]=(c[o>>2]|0)-(c[A>>2]|0);}c[(c[x>>2]|0)+20>>2]=0;}uo(c[x>>2]|0,(c[t>>2]|0)+(c[r>>2]|0)|0,c[w>>2]|0,(c[x>>2]|0)+20|0);if((c[(c[x>>2]|0)+24>>2]|0)>>>0<(c[(c[x>>2]|0)+16>>2]|0)>>>0)c[(c[x>>2]|0)+24>>2]=c[(c[x>>2]|0)+16>>2];c[B>>2]=zn(c[k>>2]|0,(c[v>>2]|0)+3|0,(c[n>>2]|0)-3|0,c[t>>2]|0,c[r>>2]|0)|0;o=(Ph(c[B>>2]|0)|0)!=0;F=c[B>>2]|0;if(o){E=17;break;}o=c[y>>2]|0;if(!F){c[C>>2]=o+0+(c[r>>2]<<3);if(((c[r>>2]|0)+3|0)>>>0>(c[n>>2]|0)>>>0){E=20;break;}Pl(c[v>>2]|0,c[C>>2]|0);mE((c[v>>2]|0)+3|0,c[t>>2]|0,c[r>>2]|0)|0;c[B>>2]=3+(c[r>>2]|0);}else{c[D>>2]=o+4+(c[B>>2]<<3);wl(c[v>>2]|0,c[D>>2]|0);c[B>>2]=(c[B>>2]|0)+3;}c[t>>2]=(c[t>>2]|0)+(c[r>>2]|0);c[s>>2]=(c[s>>2]|0)-(c[r>>2]|0);c[v>>2]=(c[v>>2]|0)+(c[B>>2]|0);c[n>>2]=(c[n>>2]|0)-(c[B>>2]|0);}if((E|0)==6){c[j>>2]=-70;G=c[j>>2]|0;l=h;return G|0;}else if((E|0)==17){c[j>>2]=F;G=c[j>>2]|0;l=h;return G|0;}else if((E|0)==20){c[j>>2]=-70;G=c[j>>2]|0;l=h;return G|0;}else if((E|0)==24){if(c[q>>2]|0?(c[v>>2]|0)>>>0>(c[u>>2]|0)>>>0:0)c[c[k>>2]>>2]=3;c[j>>2]=(c[v>>2]|0)-(c[u>>2]|0);G=c[j>>2]|0;l=h;return G|0;}return 0;}function zn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=l;l=l+112|0;h=g+92|0;i=g+88|0;j=g+84|0;k=g+80|0;m=g+76|0;n=g+72|0;o=g+68|0;p=g+64|0;q=g+60|0;r=g+56|0;s=g+52|0;t=g+48|0;u=g+44|0;v=g+40|0;w=g+24|0;x=g+16|0;y=g+12|0;z=g+8|0;A=g+4|0;B=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=(c[j>>2]|0)+472+8;f=c[j>>2]|0;if((c[o>>2]|0)>>>0<7){An(f+456|0,c[o>>2]|0,c[(c[j>>2]|0)+116+4+16>>2]|0);c[i>>2]=0;C=c[i>>2]|0;l=g;return C|0;}Bn(f+368|0);c[q>>2]=c[(c[p>>2]|0)+4>>2];c[r>>2]=c[n>>2];c[s>>2]=(c[r>>2]|0)-(c[q>>2]|0);if((c[s>>2]|0)>>>0>((c[(c[p>>2]|0)+24>>2]|0)+384|0)>>>0){if(192<((c[s>>2]|0)-(c[(c[p>>2]|0)+24>>2]|0)-384|0)>>>0)D=192;else D=(c[s>>2]|0)-(c[(c[p>>2]|0)+24>>2]|0)-384|0;c[(c[p>>2]|0)+24>>2]=(c[s>>2]|0)-D;}D=c[p>>2]|0;c[h>>2]=c[D>>2];c[h+4>>2]=c[D+4>>2];c[h+8>>2]=c[D+8>>2];c[h+12>>2]=c[D+12>>2];c[h+16>>2]=c[D+16>>2];c[t>>2]=Cn(h)|0;c[v>>2]=0;while(1){E=c[j>>2]|0;if((c[v>>2]|0)>=3)break;c[(c[(c[j>>2]|0)+472+4>>2]|0)+4580+(c[v>>2]<<2)>>2]=c[(c[E+472>>2]|0)+4580+(c[v>>2]<<2)>>2];c[v>>2]=(c[v>>2]|0)+1;}v=c[j>>2]|0;do{if((c[E+456+4>>2]|0)>>>0<(c[(c[j>>2]|0)+456+8>>2]|0)>>>0)c[u>>2]=Dn(v+456|0,c[p>>2]|0,(c[j>>2]|0)+368|0,(c[(c[j>>2]|0)+472+4>>2]|0)+4580|0,(c[j>>2]|0)+116+4|0,c[n>>2]|0,c[o>>2]|0,c[t>>2]|0)|0;else{if(!(c[v+116+68>>2]|0)){c[y>>2]=Wl(c[(c[j>>2]|0)+116+4+24>>2]|0,c[t>>2]|0)|0;c[u>>2]=uc[c[y>>2]&31](c[p>>2]|0,(c[j>>2]|0)+368|0,(c[(c[j>>2]|0)+472+4>>2]|0)+4580|0,(c[j>>2]|0)+116+4|0,c[n>>2]|0,c[o>>2]|0)|0;break;};c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;c[w+12>>2]=0;c[w>>2]=c[(c[j>>2]|0)+448>>2];c[w+12>>2]=c[(c[j>>2]|0)+452>>2];c[x>>2]=En((c[j>>2]|0)+408|0,w,(c[j>>2]|0)+116+68|0,c[n>>2]|0,c[o>>2]|0)|0;if(!(wj(c[x>>2]|0)|0)){c[u>>2]=Dn(w,c[p>>2]|0,(c[j>>2]|0)+368|0,(c[(c[j>>2]|0)+472+4>>2]|0)+4580|0,(c[j>>2]|0)+116+4|0,c[n>>2]|0,c[o>>2]|0,c[t>>2]|0)|0;break;}c[i>>2]=c[x>>2];C=c[i>>2]|0;l=g;return C|0;}}while(0);c[z>>2]=(c[n>>2]|0)+(c[o>>2]|0)+(0-(c[u>>2]|0));Fn((c[j>>2]|0)+368|0,c[z>>2]|0,c[u>>2]|0);c[A>>2]=Gn((c[j>>2]|0)+368|0,c[(c[j>>2]|0)+472>>2]|0,c[(c[j>>2]|0)+472+4>>2]|0,(c[j>>2]|0)+116|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[(c[j>>2]|0)+588>>2]|0,c[(c[j>>2]|0)+8>>2]|0)|0;o=(Ph(c[A>>2]|0)|0)!=0;if(o|(c[A>>2]|0)==0){c[i>>2]=c[A>>2];C=c[i>>2]|0;l=g;return C|0;}else{c[B>>2]=c[(c[j>>2]|0)+472>>2];c[(c[j>>2]|0)+472>>2]=c[(c[j>>2]|0)+472+4>>2];c[(c[j>>2]|0)+472+4>>2]=c[B>>2];c[i>>2]=c[A>>2];C=c[i>>2]|0;l=g;return C|0;}return 0;}function An(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;while(1){if((c[g>>2]|0)>>>0<=0){j=12;break;}if((c[(c[f>>2]|0)+4>>2]|0)>>>0>=(c[(c[f>>2]|0)+8>>2]|0)>>>0){j=12;break;}c[i>>2]=(c[c[f>>2]>>2]|0)+((c[(c[f>>2]|0)+4>>2]|0)*12|0);if((c[g>>2]|0)>>>0<=(c[(c[i>>2]|0)+4>>2]|0)>>>0){j=5;break;}c[g>>2]=(c[g>>2]|0)-(c[(c[i>>2]|0)+4>>2]|0);c[(c[i>>2]|0)+4>>2]=0;if((c[g>>2]|0)>>>0<(c[(c[i>>2]|0)+8>>2]|0)>>>0){j=7;break;}c[g>>2]=(c[g>>2]|0)-(c[(c[i>>2]|0)+8>>2]|0);c[(c[i>>2]|0)+8>>2]=0;d=(c[f>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)+1;}if((j|0)==5){d=(c[i>>2]|0)+4|0;c[d>>2]=(c[d>>2]|0)-(c[g>>2]|0);l=e;return;}else if((j|0)==7){d=(c[i>>2]|0)+8|0;c[d>>2]=(c[d>>2]|0)-(c[g>>2]|0);if((c[(c[i>>2]|0)+8>>2]|0)>>>0>=(c[h>>2]|0)>>>0){l=e;return;}if(((c[(c[f>>2]|0)+4>>2]|0)+1|0)>>>0<(c[(c[f>>2]|0)+8>>2]|0)>>>0){h=(c[i>>2]|0)+12+4|0;c[h>>2]=(c[h>>2]|0)+(c[(c[i>>2]|0)+8>>2]|0);}i=(c[f>>2]|0)+4|0;c[i>>2]=(c[i>>2]|0)+1;l=e;return;}else if((j|0)==12){l=e;return;}}function Bn(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;c[(c[d>>2]|0)+12>>2]=c[(c[d>>2]|0)+8>>2];c[(c[d>>2]|0)+4>>2]=c[c[d>>2]>>2];c[(c[d>>2]|0)+28>>2]=0;l=b;return;}function Cn(a){a=a|0;return(c[a+16>>2]|0)>>>0<(c[a+12>>2]|0)>>>0|0;}function Dn(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;j=l;l=l+80|0;k=j+76|0;m=j+72|0;n=j+68|0;o=j+64|0;p=j+60|0;q=j+56|0;r=j+52|0;s=j+48|0;t=j+44|0;u=j+40|0;v=j+36|0;w=j+32|0;x=j+28|0;y=j+24|0;z=j+12|0;A=j+8|0;B=j+4|0;C=j;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;c[o>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;c[t>>2]=c[(c[p>>2]|0)+16>>2];c[u>>2]=Wl(c[(c[p>>2]|0)+24>>2]|0,c[s>>2]|0)|0;c[v>>2]=c[(c[m>>2]|0)+4>>2];c[w>>2]=c[q>>2];c[x>>2]=(c[w>>2]|0)+(c[r>>2]|0);c[y>>2]=c[w>>2];while(1){if((c[(c[k>>2]|0)+4>>2]|0)>>>0>=(c[(c[k>>2]|0)+8>>2]|0)>>>0)break;if((c[y>>2]|0)>>>0>=(c[x>>2]|0)>>>0)break;lo(z,c[k>>2]|0,(c[x>>2]|0)-(c[y>>2]|0)|0,c[t>>2]|0);if(!(c[z>>2]|0))break;mo(c[m>>2]|0,c[y>>2]|0);no(c[m>>2]|0,c[p>>2]|0,c[y>>2]|0)|0;c[B>>2]=uc[c[u>>2]&31](c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[y>>2]|0,c[z+4>>2]|0)|0;c[y>>2]=(c[y>>2]|0)+(c[z+4>>2]|0);c[(c[m>>2]|0)+24>>2]=(c[y>>2]|0)-(c[v>>2]|0);c[A>>2]=2;while(1){if((c[A>>2]|0)<=0)break;c[(c[o>>2]|0)+(c[A>>2]<<2)>>2]=c[(c[o>>2]|0)+((c[A>>2]|0)-1<<2)>>2];c[A>>2]=(c[A>>2]|0)+-1;}c[c[o>>2]>>2]=c[z>>2];oo(c[n>>2]|0,c[B>>2]|0,(c[y>>2]|0)+(0-(c[B>>2]|0))|0,(c[z>>2]|0)+2|0,(c[z+8>>2]|0)-3|0);c[y>>2]=(c[y>>2]|0)+(c[z+8>>2]|0);}mo(c[m>>2]|0,c[y>>2]|0);no(c[m>>2]|0,c[p>>2]|0,c[y>>2]|0)|0;c[C>>2]=uc[c[u>>2]&31](c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[y>>2]|0,(c[x>>2]|0)-(c[y>>2]|0)|0)|0;c[(c[m>>2]|0)+24>>2]=(c[x>>2]|0)-(c[v>>2]|0);l=j;return c[C>>2]|0;}function En(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=l;l=l+112|0;h=g+84|0;i=g+80|0;j=g+76|0;k=g+72|0;m=g+68|0;n=g+64|0;o=g+60|0;p=g+56|0;q=g+52|0;r=g+48|0;s=g+40|0;t=g+36|0;u=g+32|0;v=g+28|0;w=g+24|0;x=g+20|0;y=g+16|0;z=g+12|0;A=g+8|0;B=g+4|0;C=g;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=1<<c[(c[m>>2]|0)+20>>2];c[q>>2]=c[n>>2];c[r>>2]=(c[q>>2]|0)+(c[o>>2]|0);c[g+44>>2]=1048576;c[s>>2]=(((c[o>>2]|0)>>>0)/1048576|0)+((((c[o>>2]|0)>>>0)%1048576|0|0)!=0&1);c[u>>2]=0;c[t>>2]=0;while(1){if((c[t>>2]|0)>>>0>=(c[s>>2]|0)>>>0){D=12;break;}if((c[(c[k>>2]|0)+8>>2]|0)>>>0>=(c[(c[k>>2]|0)+12>>2]|0)>>>0){D=12;break;}c[v>>2]=(c[q>>2]|0)+(c[t>>2]<<20);c[w>>2]=(c[r>>2]|0)-(c[v>>2]|0);c[x>>2]=(c[w>>2]|0)>>>0<1048576?c[r>>2]|0:(c[v>>2]|0)+1048576|0;c[y>>2]=(c[x>>2]|0)-(c[v>>2]|0);c[A>>2]=c[(c[k>>2]|0)+8>>2];o=c[j>>2]|0;f=c[x>>2]|0;c[h>>2]=c[o>>2];c[h+4>>2]=c[o+4>>2];c[h+8>>2]=c[o+8>>2];c[h+12>>2]=c[o+12>>2];c[h+16>>2]=c[o+16>>2];if(On(h,f)|0){c[B>>2]=1<<c[(c[m>>2]|0)+4>>2];c[C>>2]=Pn(c[j>>2]|0,0,c[p>>2]|0,c[n>>2]|0)|0;Qn(c[(c[j>>2]|0)+20>>2]|0,c[B>>2]|0,c[C>>2]|0);}Rn(c[j>>2]|0,c[x>>2]|0,c[p>>2]|0,0);c[z>>2]=Sn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[v>>2]|0,c[y>>2]|0)|0;if(Ph(c[z>>2]|0)|0){D=7;break;}if((c[A>>2]|0)>>>0<(c[(c[k>>2]|0)+8>>2]|0)>>>0){f=(c[c[k>>2]>>2]|0)+((c[A>>2]|0)*12|0)+4|0;c[f>>2]=(c[f>>2]|0)+(c[u>>2]|0);c[u>>2]=c[z>>2];}else c[u>>2]=(c[u>>2]|0)+(c[y>>2]|0);c[t>>2]=(c[t>>2]|0)+1;}if((D|0)==7){c[i>>2]=c[z>>2];E=c[i>>2]|0;l=g;return E|0;}else if((D|0)==12){c[i>>2]=0;E=c[i>>2]|0;l=g;return E|0;}return 0;}function Fn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e+8|0;g=e+4|0;h=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;mE(c[(c[f>>2]|0)+12>>2]|0,c[g>>2]|0,c[h>>2]|0)|0;g=(c[f>>2]|0)+12|0;c[g>>2]=(c[g>>2]|0)+(c[h>>2]|0);l=e;return;}function Gn(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;k=l;l=l+48|0;m=k+44|0;n=k+40|0;o=k+36|0;p=k+32|0;q=k+28|0;r=k+24|0;s=k+20|0;t=k+16|0;u=k+12|0;v=k+8|0;w=k+4|0;x=k;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;c[v>>2]=j;c[w>>2]=Hn(c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0,c[u>>2]|0,c[v>>2]|0)|0;if(((c[w>>2]|0)==-70?(c[t>>2]|0)>>>0<=(c[s>>2]|0)>>>0:0)|0){c[m>>2]=0;y=c[m>>2]|0;l=k;return y|0;}if(Ph(c[w>>2]|0)|0){c[m>>2]=c[w>>2];y=c[m>>2]|0;l=k;return y|0;}s=c[t>>2]|0;c[x>>2]=s-(In(c[t>>2]|0)|0);if((c[w>>2]|0)>>>0>=(c[x>>2]|0)>>>0){c[m>>2]=0;y=c[m>>2]|0;l=k;return y|0;}if((c[(c[p>>2]|0)+4568>>2]|0)==2)c[(c[p>>2]|0)+4568>>2]=1;c[m>>2]=c[w>>2];y=c[m>>2]|0;l=k;return y|0;}function Hn(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;k=l;l=l+368|0;m=k+364|0;n=k+360|0;o=k+356|0;p=k+352|0;q=k+348|0;r=k+344|0;s=k+340|0;t=k+336|0;u=k+332|0;v=k+328|0;w=k;x=k+324|0;y=k+320|0;z=k+316|0;A=k+312|0;B=k+308|0;C=k+304|0;D=k+300|0;E=k+296|0;F=k+292|0;G=k+288|0;H=k+284|0;I=k+280|0;J=k+276|0;K=k+272|0;L=k+268|0;M=k+264|0;N=k+260|0;O=k+256|0;P=k+252|0;Q=k+248|0;R=k+244|0;S=k+240|0;T=k+236|0;U=k+232|0;V=k+228|0;W=k+224|0;X=k+220|0;Y=k+216|0;Z=k+212|0;c[n>>2]=b;c[o>>2]=d;c[p>>2]=e;c[q>>2]=f;c[r>>2]=g;c[s>>2]=h;c[t>>2]=i;c[u>>2]=j;j=c[(c[q>>2]|0)+4>>2]|0;i=(Il()|0)!=0;c[v>>2]=j>>>0>(i?25:57)>>>0&1;c[x>>2]=(c[p>>2]|0)+3248;c[y>>2]=(c[p>>2]|0)+1024;c[z>>2]=(c[p>>2]|0)+1796;c[D>>2]=c[c[n>>2]>>2];c[E>>2]=c[(c[n>>2]|0)+24>>2];c[F>>2]=c[(c[n>>2]|0)+16>>2];c[G>>2]=c[(c[n>>2]|0)+20>>2];c[H>>2]=c[r>>2];c[I>>2]=(c[H>>2]|0)+(c[s>>2]|0);c[J>>2]=c[H>>2];c[K>>2]=((c[(c[n>>2]|0)+4>>2]|0)-(c[c[n>>2]>>2]|0)|0)/8|0;c[M>>2]=c[(c[n>>2]|0)+8>>2];c[N>>2]=(c[(c[n>>2]|0)+12>>2]|0)-(c[M>>2]|0);c[O>>2]=Jn(c[o>>2]|0,c[p>>2]|0,c[(c[q>>2]|0)+4+24>>2]|0,c[(c[q>>2]|0)+48>>2]|0,c[J>>2]|0,c[s>>2]|0,c[M>>2]|0,c[N>>2]|0,c[t>>2]|0,c[u>>2]|0)|0;N=(Ph(c[O>>2]|0)|0)!=0;M=c[O>>2]|0;if(N){c[m>>2]=M;_=c[m>>2]|0;l=k;return _|0;}c[J>>2]=(c[J>>2]|0)+M;if(((c[I>>2]|0)-(c[J>>2]|0)|0)<4){c[m>>2]=-70;_=c[m>>2]|0;l=k;return _|0;}M=c[K>>2]|0;do{if((c[K>>2]|0)>>>0>=127){if(M>>>0<32512){a[c[J>>2]>>0]=((c[K>>2]|0)>>>8)+128;a[(c[J>>2]|0)+1>>0]=c[K>>2];c[J>>2]=(c[J>>2]|0)+2;break;}else{a[c[J>>2]>>0]=-1;xl((c[J>>2]|0)+1|0,(c[K>>2]|0)-32512&65535);c[J>>2]=(c[J>>2]|0)+3;break;}}else{N=c[J>>2]|0;c[J>>2]=N+1;a[N>>0]=M;}}while(0);if(!(c[K>>2]|0)){mE((c[p>>2]|0)+3248|0,(c[o>>2]|0)+3248|0,1316)|0;c[(c[p>>2]|0)+4576>>2]=c[(c[o>>2]|0)+4576>>2];mE((c[p>>2]|0)+1024|0,(c[o>>2]|0)+1024|0,772)|0;c[(c[p>>2]|0)+4568>>2]=c[(c[o>>2]|0)+4568>>2];mE((c[p>>2]|0)+1796|0,(c[o>>2]|0)+1796|0,1452)|0;c[(c[p>>2]|0)+4572>>2]=c[(c[o>>2]|0)+4572>>2];c[m>>2]=(c[J>>2]|0)-(c[H>>2]|0);_=c[m>>2]|0;l=k;return _|0;}M=c[J>>2]|0;c[J>>2]=M+1;c[L>>2]=M;zl(c[n>>2]|0);c[P>>2]=35;c[Q>>2]=_h(w,P,c[F>>2]|0,c[K>>2]|0,c[t>>2]|0)|0;c[(c[p>>2]|0)+4576>>2]=c[(c[o>>2]|0)+4576>>2];c[A>>2]=Kn((c[p>>2]|0)+4576|0,c[Q>>2]|0,c[K>>2]|0,6,1)|0;c[R>>2]=Ln(c[J>>2]|0,(c[I>>2]|0)-(c[J>>2]|0)|0,c[x>>2]|0,9,c[A>>2]|0,w,c[P>>2]|0,c[F>>2]|0,c[K>>2]|0,3200,6,35,(c[o>>2]|0)+3248|0,1316,c[t>>2]|0,6144)|0;P=(Ph(c[R>>2]|0)|0)!=0;Q=c[R>>2]|0;if(P){c[m>>2]=Q;_=c[m>>2]|0;l=k;return _|0;}c[J>>2]=(c[J>>2]|0)+Q;c[S>>2]=31;c[T>>2]=_h(w,S,c[E>>2]|0,c[K>>2]|0,c[t>>2]|0)|0;c[U>>2]=(c[S>>2]|0)>>>0<=28?1:0;c[(c[p>>2]|0)+4568>>2]=c[(c[o>>2]|0)+4568>>2];c[B>>2]=Kn((c[p>>2]|0)+4568|0,c[T>>2]|0,c[K>>2]|0,5,c[U>>2]|0)|0;c[V>>2]=Ln(c[J>>2]|0,(c[I>>2]|0)-(c[J>>2]|0)|0,c[y>>2]|0,8,c[B>>2]|0,w,c[S>>2]|0,c[E>>2]|0,c[K>>2]|0,3280,5,28,(c[o>>2]|0)+1024|0,772,c[t>>2]|0,6144)|0;S=(Ph(c[V>>2]|0)|0)!=0;U=c[V>>2]|0;if(S){c[m>>2]=U;_=c[m>>2]|0;l=k;return _|0;}c[J>>2]=(c[J>>2]|0)+U;c[W>>2]=52;c[X>>2]=_h(w,W,c[G>>2]|0,c[K>>2]|0,c[t>>2]|0)|0;c[(c[p>>2]|0)+4572>>2]=c[(c[o>>2]|0)+4572>>2];c[C>>2]=Kn((c[p>>2]|0)+4572|0,c[X>>2]|0,c[K>>2]|0,6,1)|0;c[Y>>2]=Ln(c[J>>2]|0,(c[I>>2]|0)-(c[J>>2]|0)|0,c[z>>2]|0,9,c[C>>2]|0,w,c[W>>2]|0,c[G>>2]|0,c[K>>2]|0,3344,6,52,(c[o>>2]|0)+1796|0,1452,c[t>>2]|0,6144)|0;t=(Ph(c[Y>>2]|0)|0)!=0;o=c[Y>>2]|0;if(t){c[m>>2]=o;_=c[m>>2]|0;l=k;return _|0;}c[J>>2]=(c[J>>2]|0)+o;a[c[L>>2]>>0]=(c[A>>2]<<6)+(c[B>>2]<<4)+(c[C>>2]<<2);c[Z>>2]=Cl(c[J>>2]|0,(c[I>>2]|0)-(c[J>>2]|0)|0,c[z>>2]|0,c[G>>2]|0,c[y>>2]|0,c[E>>2]|0,c[x>>2]|0,c[F>>2]|0,c[D>>2]|0,c[K>>2]|0,c[v>>2]|0,c[u>>2]|0)|0;u=(Ph(c[Z>>2]|0)|0)!=0;v=c[Z>>2]|0;if(u){c[m>>2]=v;_=c[m>>2]|0;l=k;return _|0;}else{c[J>>2]=(c[J>>2]|0)+v;c[m>>2]=(c[J>>2]|0)-(c[H>>2]|0);_=c[m>>2]|0;l=k;return _|0;}return 0;}function In(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return((c[d>>2]|0)>>>6)+2|0;}function Jn(b,d,e,f,g,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;n=l;l=l+96|0;o=n+88|0;p=n+84|0;q=n+80|0;r=n+76|0;s=n+72|0;t=n+68|0;u=n+64|0;v=n+60|0;w=n+56|0;x=n+52|0;y=n+48|0;z=n+44|0;A=n+40|0;B=n+36|0;C=n+32|0;D=n+28|0;E=n+24|0;F=n+20|0;G=n+16|0;H=n+12|0;I=n+8|0;J=n+4|0;K=n;c[p>>2]=b;c[q>>2]=d;c[r>>2]=e;c[s>>2]=f;c[t>>2]=g;c[u>>2]=h;c[v>>2]=i;c[w>>2]=j;c[x>>2]=k;c[y>>2]=m;c[z>>2]=In(c[w>>2]|0)|0;c[A>>2]=3+((c[w>>2]|0)>>>0>=1024&1)+((c[w>>2]|0)>>>0>=16384&1);c[B>>2]=c[t>>2];c[C>>2]=(c[w>>2]|0)>>>0<256&1;c[D>>2]=2;c[(c[q>>2]|0)+4564>>2]=c[(c[p>>2]|0)+4564>>2];mE(c[q>>2]|0,c[p>>2]|0,1024)|0;if(c[s>>2]|0){c[o>>2]=Mn(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;L=c[o>>2]|0;l=n;return L|0;}c[F>>2]=(c[(c[p>>2]|0)+4564>>2]|0)==2?6:63;if((c[w>>2]|0)>>>0<=(c[F>>2]|0)>>>0){c[o>>2]=Mn(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;L=c[o>>2]|0;l=n;return L|0;}if((c[u>>2]|0)>>>0<((c[A>>2]|0)+1|0)>>>0){c[o>>2]=-70;L=c[o>>2]|0;l=n;return L|0;}c[G>>2]=c[(c[p>>2]|0)+4564>>2];c[H>>2]=(c[r>>2]|0)>>>0<4?(c[w>>2]|0)>>>0<=1024&1:0;if((c[G>>2]|0)==2&(c[A>>2]|0)==3)c[C>>2]=1;r=(c[B>>2]|0)+(c[A>>2]|0)|0;F=(c[u>>2]|0)-(c[A>>2]|0)|0;s=c[v>>2]|0;m=c[w>>2]|0;k=c[x>>2]|0;x=c[q>>2]|0;j=c[H>>2]|0;H=c[y>>2]|0;if(c[C>>2]|0)M=jj(r,F,s,m,255,11,k,6144,x,G,j,H)|0;else M=kj(r,F,s,m,255,11,k,6144,x,G,j,H)|0;c[E>>2]=M;if(c[G>>2]|0)c[D>>2]=3;G=(c[E>>2]|0)==0?1:(c[E>>2]|0)>>>0>=((c[w>>2]|0)-(c[z>>2]|0)|0)>>>0;if(G|(wj(c[E>>2]|0)|0)|0){mE(c[q>>2]|0,c[p>>2]|0,1024)|0;c[o>>2]=Mn(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;L=c[o>>2]|0;l=n;return L|0;}if((c[E>>2]|0)==1){mE(c[q>>2]|0,c[p>>2]|0,1024)|0;c[o>>2]=Nn(c[t>>2]|0,c[u>>2]|0,c[v>>2]|0,c[w>>2]|0)|0;L=c[o>>2]|0;l=n;return L|0;}if((c[D>>2]|0)==2)c[(c[q>>2]|0)+4564>>2]=1;switch(c[A>>2]|0){case 3:{c[I>>2]=(c[D>>2]|0)+((((c[C>>2]|0)!=0^1)&1)<<2)+(c[w>>2]<<4)+(c[E>>2]<<14);wl(c[B>>2]|0,c[I>>2]|0);break;}case 4:{c[J>>2]=(c[D>>2]|0)+8+(c[w>>2]<<4)+(c[E>>2]<<18);Pl(c[B>>2]|0,c[J>>2]|0);break;}case 5:{c[K>>2]=(c[D>>2]|0)+12+(c[w>>2]<<4)+(c[E>>2]<<22);Pl(c[B>>2]|0,c[K>>2]|0);a[(c[B>>2]|0)+4>>0]=(c[E>>2]|0)>>>10;break;}default:{}}c[o>>2]=(c[A>>2]|0)+(c[E>>2]|0);L=c[o>>2]|0;l=n;return L|0;}function Kn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;g=l;l=l+32|0;h=g+20|0;i=g+16|0;j=g+12|0;k=g+8|0;m=g+4|0;n=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if((c[j>>2]|0)==(c[k>>2]|0)?(c[n>>2]|0)==0|(c[k>>2]|0)>>>0>2:0){c[c[i>>2]>>2]=1;c[h>>2]=1;o=c[h>>2]|0;l=g;return o|0;}if(c[n>>2]|0?(c[k>>2]|0)>>>0<1e3?(c[c[i>>2]>>2]|0)==2:0:0){c[h>>2]=3;o=c[h>>2]|0;l=g;return o|0;}do{if(c[n>>2]|0){if((c[k>>2]|0)>>>0>=64?(c[j>>2]|0)>>>0>=(c[k>>2]|0)>>>((c[m>>2]|0)-1|0)>>>0:0)break;c[c[i>>2]>>2]=0;c[h>>2]=0;o=c[h>>2]|0;l=g;return o|0;}}while(0);c[c[i>>2]>>2]=1;c[h>>2]=2;o=c[h>>2]|0;l=g;return o|0;}function Ln(b,e,f,g,h,i,j,k,m,n,o,p,q,r,s,t){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;var u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;u=l;l=l+224|0;v=u+208|0;w=u+204|0;x=u+200|0;y=u+196|0;z=u+192|0;A=u+188|0;B=u+184|0;C=u+180|0;D=u+176|0;E=u+172|0;F=u+168|0;G=u+164|0;H=u+160|0;I=u+156|0;J=u+152|0;K=u+148|0;L=u+144|0;M=u+140|0;N=u+136|0;O=u+132|0;P=u+128|0;Q=u;R=u+124|0;S=u+120|0;T=u+116|0;U=u+112|0;V=u+108|0;c[w>>2]=b;c[x>>2]=e;c[y>>2]=f;c[z>>2]=g;c[A>>2]=h;c[B>>2]=i;c[C>>2]=j;c[D>>2]=k;c[E>>2]=m;c[F>>2]=n;c[G>>2]=o;c[H>>2]=p;c[I>>2]=q;c[J>>2]=r;c[K>>2]=s;c[L>>2]=t;c[M>>2]=c[w>>2];c[N>>2]=(c[M>>2]|0)+(c[x>>2]|0);switch(c[A>>2]|0){case 1:{a[c[M>>2]>>0]=a[c[D>>2]>>0]|0;c[O>>2]=ii(c[y>>2]|0,c[C>>2]&255)|0;if(wj(c[O>>2]|0)|0){c[v>>2]=c[O>>2];W=c[v>>2]|0;l=u;return W|0;}else{c[v>>2]=1;W=c[v>>2]|0;l=u;return W|0;}break;}case 3:{mE(c[y>>2]|0,c[I>>2]|0,c[J>>2]|0)|0;c[v>>2]=0;W=c[v>>2]|0;l=u;return W|0;}case 0:{c[P>>2]=Uh(c[y>>2]|0,c[F>>2]|0,c[H>>2]|0,c[G>>2]|0,c[K>>2]|0,c[L>>2]|0)|0;if(wj(c[P>>2]|0)|0){c[v>>2]=c[P>>2];W=c[v>>2]|0;l=u;return W|0;}else{c[v>>2]=0;W=c[v>>2]|0;l=u;return W|0;}break;}case 2:{c[R>>2]=c[E>>2];c[S>>2]=ei(c[z>>2]|0,c[E>>2]|0,c[C>>2]|0)|0;if((c[(c[B>>2]|0)+((d[(c[D>>2]|0)+((c[E>>2]|0)-1)>>0]|0)<<2)>>2]|0)>>>0>1){z=(c[B>>2]|0)+((d[(c[D>>2]|0)+((c[E>>2]|0)-1)>>0]|0)<<2)|0;c[z>>2]=(c[z>>2]|0)+-1;c[R>>2]=(c[R>>2]|0)+-1;}c[T>>2]=fi(Q,c[S>>2]|0,c[B>>2]|0,c[R>>2]|0,c[C>>2]|0)|0;if(wj(c[T>>2]|0)|0){c[v>>2]=c[T>>2];W=c[v>>2]|0;l=u;return W|0;}c[U>>2]=Xh(c[M>>2]|0,(c[N>>2]|0)-(c[M>>2]|0)|0,Q,c[C>>2]|0,c[S>>2]|0)|0;if(Zg(c[U>>2]|0)|0){c[v>>2]=c[U>>2];W=c[v>>2]|0;l=u;return W|0;}c[V>>2]=Uh(c[y>>2]|0,Q,c[C>>2]|0,c[S>>2]|0,c[K>>2]|0,c[L>>2]|0)|0;if(wj(c[V>>2]|0)|0){c[v>>2]=c[V>>2];W=c[v>>2]|0;l=u;return W|0;}else{c[v>>2]=c[U>>2];W=c[v>>2]|0;l=u;return W|0;}break;}default:{c[v>>2]=-1;W=c[v>>2]|0;l=u;return W|0;}}return 0;}function Mn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+32|0;h=g+24|0;i=g+20|0;j=g+16|0;k=g+12|0;m=g+8|0;n=g+4|0;o=g;c[i>>2]=b;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=c[i>>2];c[o>>2]=1+((c[m>>2]|0)>>>0>31&1)+((c[m>>2]|0)>>>0>4095&1);if(((c[m>>2]|0)+(c[o>>2]|0)|0)>>>0>(c[j>>2]|0)>>>0){c[h>>2]=-70;p=c[h>>2]|0;l=g;return p|0;}switch(c[o>>2]|0){case 1:{a[c[n>>2]>>0]=0+(c[m>>2]<<3);break;}case 2:{xl(c[n>>2]|0,4+(c[m>>2]<<4)&65535);break;}case 3:{Pl(c[n>>2]|0,12+(c[m>>2]<<4)|0);break;}default:{}}mE((c[n>>2]|0)+(c[o>>2]|0)|0,c[k>>2]|0,c[m>>2]|0)|0;c[h>>2]=(c[m>>2]|0)+(c[o>>2]|0);p=c[h>>2]|0;l=g;return p|0;}function Nn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+32|0;h=g+20|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=b;c[g+16>>2]=d;c[i>>2]=e;c[j>>2]=f;c[k>>2]=c[h>>2];c[m>>2]=1+((c[j>>2]|0)>>>0>31&1)+((c[j>>2]|0)>>>0>4095&1);switch(c[m>>2]|0){case 1:{a[c[k>>2]>>0]=1+(c[j>>2]<<3);break;}case 2:{xl(c[k>>2]|0,5+(c[j>>2]<<4)&65535);break;}case 3:{Pl(c[k>>2]|0,13+(c[j>>2]<<4)|0);break;}default:{}}a[(c[k>>2]|0)+(c[m>>2]|0)>>0]=a[c[i>>2]>>0]|0;l=g;return(c[m>>2]|0)+1|0;}function On(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;c[f>>2]=(c[e>>2]|0)-(c[a+4>>2]|0);l=d;return(c[f>>2]|0)>>>0>2684354560|0;}function Pn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(1<<c[h>>2])-1;c[m>>2]=(c[j>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);c[n>>2]=(c[m>>2]&c[k>>2])+(c[i>>2]|0);c[o>>2]=(c[m>>2]|0)-(c[n>>2]|0);n=(c[g>>2]|0)+4|0;c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);n=(c[g>>2]|0)+8|0;c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);n=(c[g>>2]|0)+16|0;c[n>>2]=(c[n>>2]|0)-(c[o>>2]|0);n=(c[g>>2]|0)+12|0;c[n>>2]=(c[n>>2]|0)-(c[o>>2]|0);l=f;return c[o>>2]|0;}function Qn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=0;while(1){if((c[i>>2]|0)>>>0>=(c[g>>2]|0)>>>0)break;if((c[(c[f>>2]|0)+(c[i>>2]<<3)>>2]|0)>>>0<(c[h>>2]|0)>>>0)c[(c[f>>2]|0)+(c[i>>2]<<3)>>2]=0;else{d=(c[f>>2]|0)+(c[i>>2]<<3)|0;c[d>>2]=(c[d>>2]|0)-(c[h>>2]|0);}c[i>>2]=(c[i>>2]|0)+1;}l=e;return;}function Rn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);if(c[j>>2]|0)o=c[c[j>>2]>>2]|0;else o=0;c[m>>2]=o;if((c[k>>2]|0)>>>0<=((c[i>>2]|0)+(c[m>>2]|0)|0)>>>0){l=f;return;}c[n>>2]=(c[k>>2]|0)-(c[i>>2]|0);if((c[(c[g>>2]|0)+16>>2]|0)>>>0<(c[n>>2]|0)>>>0)c[(c[g>>2]|0)+16>>2]=c[n>>2];if((c[(c[g>>2]|0)+12>>2]|0)>>>0<(c[(c[g>>2]|0)+16>>2]|0)>>>0)c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+16>>2];if(!(c[j>>2]|0)){l=f;return;}c[c[j>>2]>>2]=0;l=f;return;}function Sn(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;h=l;l=l+224|0;i=h+200|0;j=h+192|0;k=h+188|0;m=h+184|0;n=h+180|0;o=h+176|0;p=h+172|0;q=h+168|0;r=h+164|0;s=h+8|0;t=h+160|0;u=h+156|0;v=h+152|0;w=h+148|0;x=h+144|0;z=h+140|0;A=h+136|0;B=h+132|0;C=h+128|0;D=h+124|0;E=h+120|0;F=h+116|0;G=h+112|0;H=h+108|0;I=h+104|0;J=h+100|0;K=h+96|0;L=h;M=h+92|0;N=h+88|0;O=h+84|0;P=h+80|0;Q=h+76|0;R=h+72|0;S=h+68|0;T=h+64|0;U=h+60|0;V=h+56|0;W=h+52|0;X=h+48|0;Y=h+44|0;Z=h+40|0;_=h+36|0;$=h+32|0;aa=h+28|0;ba=h+24|0;ca=h+20|0;da=h+16|0;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;g=c[k>>2]|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];c[q>>2]=Tn(i)|0;c[r>>2]=c[(c[n>>2]|0)+12>>2];g=(c[k>>2]|0)+32|0;f=c[g+4>>2]|0;e=s;c[e>>2]=c[g>>2];c[e+4>>2]=f;c[t>>2]=(c[(c[n>>2]|0)+4>>2]|0)-(c[(c[n>>2]|0)+8>>2]|0);c[u>>2]=1<<c[(c[n>>2]|0)+8>>2];c[v>>2]=c[(c[n>>2]|0)+16>>2];c[w>>2]=(1<<c[(c[n>>2]|0)+16>>2])-1;c[x>>2]=c[(c[k>>2]|0)+12>>2];if(c[q>>2]|0)ea=c[(c[k>>2]|0)+16>>2]|0;else ea=c[x>>2]|0;c[z>>2]=ea;c[A>>2]=c[(c[k>>2]|0)+4>>2];if(c[q>>2]|0)fa=c[(c[k>>2]|0)+8>>2]|0;else fa=0;c[B>>2]=fa;c[C>>2]=c[q>>2]|0?(c[B>>2]|0)+(c[z>>2]|0)|0:0;c[D>>2]=c[q>>2]|0?(c[B>>2]|0)+(c[x>>2]|0)|0:0;c[E>>2]=(c[A>>2]|0)+(c[x>>2]|0);c[F>>2]=c[o>>2];c[G>>2]=(c[F>>2]|0)+(c[p>>2]|0);c[H>>2]=(c[G>>2]|0)+(0-((c[r>>2]|0)>>>0>8?c[r>>2]|0:8));c[I>>2]=c[F>>2];c[J>>2]=c[F>>2];c[K>>2]=0;p=L;c[p>>2]=0;c[p+4>>2]=0;while(1){if((c[J>>2]|0)>>>0>(c[H>>2]|0)>>>0){ga=32;break;}c[N>>2]=(c[J>>2]|0)-(c[A>>2]|0);c[O>>2]=0;c[P>>2]=0;c[Q>>2]=0;if((c[J>>2]|0)!=(c[F>>2]|0)){p=L;o=s;fa=Un(c[p>>2]|0,c[p+4>>2]|0,a[c[K>>2]>>0]|0,a[(c[K>>2]|0)+(c[r>>2]|0)>>0]|0,c[o>>2]|0,c[o+4>>2]|0)|0;o=L;c[o>>2]=fa;c[o+4>>2]=y;}else{o=Vn(c[J>>2]|0,c[r>>2]|0)|0;fa=L;c[fa>>2]=o;c[fa+4>>2]=y;}c[K>>2]=c[J>>2];fa=L;o=Wn(c[fa>>2]|0,c[fa+4>>2]|0,c[t>>2]|0,c[v>>2]|0)|0;if((o|0)!=(c[w>>2]|0)){c[J>>2]=(c[J>>2]|0)+1;continue;}o=c[k>>2]|0;fa=L;p=Xn(c[fa>>2]|0,c[fa+4>>2]|0,c[t>>2]|0)|0;fa=c[n>>2]|0;c[i>>2]=c[fa>>2];c[i+4>>2]=c[fa+4>>2];c[i+8>>2]=c[fa+8>>2];c[i+12>>2]=c[fa+12>>2];c[i+16>>2]=c[fa+16>>2];c[i+20>>2]=c[fa+20>>2];c[R>>2]=Yn(o,p,i)|0;c[T>>2]=0;p=L;c[U>>2]=Zn(c[p>>2]|0,c[p+4>>2]|0,c[t>>2]|0)|0;c[S>>2]=c[R>>2];while(1){if((c[S>>2]|0)>>>0>=((c[R>>2]|0)+(c[u>>2]<<3)|0)>>>0)break;do{if((c[(c[S>>2]|0)+4>>2]|0)==(c[U>>2]|0)?(c[c[S>>2]>>2]|0)>>>0>(c[z>>2]|0)>>>0:0){if(c[q>>2]|0){c[Y>>2]=(c[c[S>>2]>>2]|0)>>>0<(c[x>>2]|0)>>>0?c[B>>2]|0:c[A>>2]|0;c[Z>>2]=(c[Y>>2]|0)+(c[c[S>>2]>>2]|0);c[_>>2]=(c[c[S>>2]>>2]|0)>>>0<(c[x>>2]|0)>>>0?c[D>>2]|0:c[G>>2]|0;c[$>>2]=(c[c[S>>2]>>2]|0)>>>0<(c[x>>2]|0)>>>0?c[C>>2]|0:c[E>>2]|0;c[V>>2]=_n(c[J>>2]|0,c[Z>>2]|0,c[G>>2]|0,c[_>>2]|0,c[E>>2]|0)|0;if((c[V>>2]|0)>>>0<(c[r>>2]|0)>>>0)break;c[W>>2]=$n(c[J>>2]|0,c[I>>2]|0,c[Z>>2]|0,c[$>>2]|0)|0;c[X>>2]=(c[V>>2]|0)+(c[W>>2]|0);}else{c[aa>>2]=(c[A>>2]|0)+(c[c[S>>2]>>2]|0);c[V>>2]=ao(c[J>>2]|0,c[aa>>2]|0,c[G>>2]|0)|0;if((c[V>>2]|0)>>>0<(c[r>>2]|0)>>>0)break;c[W>>2]=$n(c[J>>2]|0,c[I>>2]|0,c[aa>>2]|0,c[E>>2]|0)|0;c[X>>2]=(c[V>>2]|0)+(c[W>>2]|0);}if((c[X>>2]|0)>>>0>(c[T>>2]|0)>>>0){c[T>>2]=c[X>>2];c[O>>2]=c[V>>2];c[P>>2]=c[W>>2];c[Q>>2]=c[S>>2];}}}while(0);c[S>>2]=(c[S>>2]|0)+8;}if(!(c[Q>>2]|0)){p=c[k>>2]|0;o=L;fa=c[o>>2]|0;ea=c[o+4>>2]|0;o=c[t>>2]|0;f=c[N>>2]|0;e=c[n>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];c[i+20>>2]=c[e+20>>2];bo(p,fa,ea,o,f,i);c[J>>2]=(c[J>>2]|0)+1;continue;}c[M>>2]=(c[O>>2]|0)+(c[P>>2]|0);c[J>>2]=(c[J>>2]|0)+(0-(c[P>>2]|0));c[ba>>2]=c[c[Q>>2]>>2];c[ca>>2]=(c[N>>2]|0)-(c[ba>>2]|0);c[da>>2]=(c[c[m>>2]>>2]|0)+((c[(c[m>>2]|0)+8>>2]|0)*12|0);if((c[(c[m>>2]|0)+8>>2]|0)==(c[(c[m>>2]|0)+12>>2]|0)){ga=28;break;}c[(c[da>>2]|0)+4>>2]=(c[J>>2]|0)-(c[I>>2]|0);c[(c[da>>2]|0)+8>>2]=c[M>>2];c[c[da>>2]>>2]=c[ca>>2];f=(c[m>>2]|0)+8|0;c[f>>2]=(c[f>>2]|0)+1;f=c[k>>2]|0;o=L;ea=c[o>>2]|0;fa=c[o+4>>2]|0;o=c[t>>2]|0;p=(c[K>>2]|0)-(c[A>>2]|0)|0;e=c[n>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];c[i+20>>2]=c[e+20>>2];bo(f,ea,fa,o,p,i);if(((c[J>>2]|0)+(c[M>>2]|0)|0)>>>0<=(c[H>>2]|0)>>>0){p=c[k>>2]|0;o=L;fa=c[o>>2]|0;ea=c[o+4>>2]|0;o=c[K>>2]|0;f=(c[J>>2]|0)+(c[M>>2]|0)|0;e=c[A>>2]|0;g=c[t>>2]|0;d=c[n>>2]|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];d=co(p,fa,ea,o,f,e,g,i)|0;g=L;c[g>>2]=d;c[g+4>>2]=y;c[K>>2]=(c[J>>2]|0)+(c[M>>2]|0)+-1;}c[J>>2]=(c[J>>2]|0)+(c[M>>2]|0);c[I>>2]=c[J>>2];}if((ga|0)==28){c[j>>2]=-70;ha=c[j>>2]|0;l=h;return ha|0;}else if((ga|0)==32){c[j>>2]=(c[G>>2]|0)-(c[I>>2]|0);ha=c[j>>2]|0;l=h;return ha|0;}return 0;}function Tn(a){a=a|0;return(c[a+16>>2]|0)>>>0<(c[a+12>>2]|0)>>>0|0;}function Un(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0;j=l;l=l+32|0;k=j+8|0;m=j+17|0;n=j+16|0;o=j;p=k;c[p>>2]=b;c[p+4>>2]=e;a[m>>0]=f;a[n>>0]=g;g=o;c[g>>2]=h;c[g+4>>2]=i;i=(d[m>>0]|0)+10|0;m=o;o=cE(i|0,((i|0)<0)<<31>>31|0,c[m>>2]|0,c[m+4>>2]|0)|0;m=k;i=eE(c[m>>2]|0,c[m+4>>2]|0,o|0,y|0)|0;o=k;c[o>>2]=i;c[o+4>>2]=y;o=k;i=cE(c[o>>2]|0,c[o+4>>2]|0,-1213897629,-820265764)|0;o=k;c[o>>2]=i;c[o+4>>2]=y;o=(d[n>>0]|0)+10|0;n=k;i=dE(c[n>>2]|0,c[n+4>>2]|0,o|0,((o|0)<0)<<31>>31|0)|0;o=k;c[o>>2]=i;c[o+4>>2]=y;o=k;y=c[o+4>>2]|0;l=j;return c[o>>2]|0;}function Vn(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;e=l;l=l+32|0;f=e+16|0;g=e+12|0;h=e;i=e+8|0;c[f>>2]=a;c[g>>2]=b;b=h;c[b>>2]=0;c[b+4>>2]=0;c[i>>2]=0;while(1){b=h;j=c[b>>2]|0;k=c[b+4>>2]|0;if((c[i>>2]|0)>>>0>=(c[g>>2]|0)>>>0)break;b=cE(j|0,k|0,-1213897629,-820265764)|0;a=h;c[a>>2]=b;c[a+4>>2]=y;a=(d[(c[f>>2]|0)+(c[i>>2]|0)>>0]|0)+10|0;b=h;m=dE(c[b>>2]|0,c[b+4>>2]|0,a|0,((a|0)<0)<<31>>31|0)|0;a=h;c[a>>2]=m;c[a+4>>2]=y;c[i>>2]=(c[i>>2]|0)+1;}y=k;l=e;return j|0;}function Wn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+16|0;h=f;i=f+12|0;j=f+8|0;k=h;c[k>>2]=a;c[k+4>>2]=b;c[i>>2]=d;c[j>>2]=e;e=h;h=c[e>>2]|0;d=c[e+4>>2]|0;if((32-(c[i>>2]|0)|0)>>>0<(c[j>>2]|0)>>>0){c[g>>2]=h&(1<<c[j>>2])-1;m=c[g>>2]|0;l=f;return m|0;}else{e=iE(h|0,d|0,32-(c[i>>2]|0)-(c[j>>2]|0)|0)|0;c[g>>2]=e&(1<<c[j>>2])-1;m=c[g>>2]|0;l=f;return m|0;}return 0;}function Xn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;if(!(c[g>>2]|0)){i=0;l=e;return i|0;}d=f;f=iE(c[d>>2]|0,c[d+4>>2]|0,64-(c[g>>2]|0)|0)|0;i=f;l=e;return i|0;}function Yn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=a;c[g>>2]=b;l=e;return(c[(c[f>>2]|0)+20>>2]|0)+(c[g>>2]<<c[d+8>>2]<<3)|0;}function Zn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+16|0;f=e;g=e+8|0;h=f;c[h>>2]=a;c[h+4>>2]=b;c[g>>2]=d;d=f;f=iE(c[d>>2]|0,c[d+4>>2]|0,32-(c[g>>2]|0)|0)|0;l=e;return f|0;}function _n(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;if(((c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0)>>>0<(c[k>>2]|0)>>>0)q=(c[i>>2]|0)+((c[m>>2]|0)-(c[j>>2]|0))|0;else q=c[k>>2]|0;c[o>>2]=q;c[p>>2]=ao(c[i>>2]|0,c[j>>2]|0,c[o>>2]|0)|0;o=c[p>>2]|0;if(((c[j>>2]|0)+(c[p>>2]|0)|0)!=(c[m>>2]|0)){c[h>>2]=o;r=c[h>>2]|0;l=g;return r|0;}else{c[h>>2]=o+(ao((c[i>>2]|0)+(c[p>>2]|0)|0,c[n>>2]|0,c[k>>2]|0)|0);r=c[h>>2]|0;l=g;return r|0;}return 0;}function $n(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0;g=l;l=l+32|0;h=g+16|0;i=g+12|0;j=g+8|0;k=g+4|0;m=g;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=f;c[m>>2]=0;while(1){if((c[h>>2]|0)>>>0<=(c[i>>2]|0)>>>0){n=6;break;}if((c[j>>2]|0)>>>0<=(c[k>>2]|0)>>>0){n=6;break;}if((d[(c[h>>2]|0)+-1>>0]|0|0)!=(d[(c[j>>2]|0)+-1>>0]|0|0)){n=6;break;}c[h>>2]=(c[h>>2]|0)+-1;c[j>>2]=(c[j>>2]|0)+-1;c[m>>2]=(c[m>>2]|0)+1;}if((n|0)==6){l=g;return c[m>>2]|0;}return 0;}function ao(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[h>>2]=a;c[i>>2]=b;c[j>>2]=e;c[k>>2]=c[h>>2];c[m>>2]=(c[j>>2]|0)+-3;a:do{if((c[h>>2]|0)>>>0<(c[m>>2]|0)>>>0){e=fo(c[i>>2]|0)|0;c[n>>2]=e^(fo(c[h>>2]|0)|0);if(c[n>>2]|0){c[g>>2]=go(c[n>>2]|0)|0;p=c[g>>2]|0;l=f;return p|0;}c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;while(1){if((c[h>>2]|0)>>>0>=(c[m>>2]|0)>>>0)break a;e=fo(c[i>>2]|0)|0;c[o>>2]=e^(fo(c[h>>2]|0)|0);if(c[o>>2]|0)break;c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}e=go(c[o>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+e;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}}while(0);if((ho()|0?(c[h>>2]|0)>>>0<((c[j>>2]|0)+-3|0)>>>0:0)?(o=io(c[i>>2]|0)|0,(o|0)==(io(c[h>>2]|0)|0)):0){c[h>>2]=(c[h>>2]|0)+4;c[i>>2]=(c[i>>2]|0)+4;}if((c[h>>2]|0)>>>0<((c[j>>2]|0)+-1|0)>>>0?(o=(jo(c[i>>2]|0)|0)&65535,(o|0)==((jo(c[h>>2]|0)|0)&65535|0)):0){c[h>>2]=(c[h>>2]|0)+2;c[i>>2]=(c[i>>2]|0)+2;}if((c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?(d[c[i>>2]>>0]|0|0)==(d[c[h>>2]>>0]|0|0):0)c[h>>2]=(c[h>>2]|0)+1;c[g>>2]=(c[h>>2]|0)-(c[k>>2]|0);p=c[g>>2]|0;l=f;return p|0;}function bo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+80|0;i=h+56|0;j=h+48|0;k=h+40|0;m=h;n=h+36|0;o=h+32|0;p=h+28|0;q=h+24|0;r=h+20|0;s=h+16|0;t=h+8|0;c[k>>2]=a;a=m;c[a>>2]=b;c[a+4>>2]=d;c[n>>2]=e;c[o>>2]=f;f=m;c[p>>2]=Wn(c[f>>2]|0,c[f+4>>2]|0,c[n>>2]|0,c[g+16>>2]|0)|0;c[q>>2]=(1<<c[g+16>>2])-1;if((c[p>>2]|0)!=(c[q>>2]|0)){l=h;return;}q=m;c[r>>2]=Xn(c[q>>2]|0,c[q+4>>2]|0,c[n>>2]|0)|0;q=m;c[s>>2]=Zn(c[q>>2]|0,c[q+4>>2]|0,c[n>>2]|0)|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[s>>2];s=c[k>>2]|0;k=c[r>>2]|0;c[j>>2]=c[t>>2];c[j+4>>2]=c[t+4>>2];c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];c[i+20>>2]=c[g+20>>2];eo(s,k,j,i);l=h;return;}function co(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;k=l;l=l+64|0;m=k+40|0;n=k+36|0;o=k+8|0;p=k+32|0;q=k+28|0;r=k+24|0;s=k+20|0;t=k;u=k+16|0;c[n>>2]=b;b=o;c[b>>2]=d;c[b+4>>2]=e;c[p>>2]=f;c[q>>2]=g;c[r>>2]=h;c[s>>2]=i;i=o;o=c[i+4>>2]|0;h=t;c[h>>2]=c[i>>2];c[h+4>>2]=o;c[u>>2]=(c[p>>2]|0)+1;while(1){p=t;v=c[p>>2]|0;w=c[p+4>>2]|0;if((c[u>>2]|0)>>>0>=(c[q>>2]|0)>>>0)break;p=(c[n>>2]|0)+32|0;o=Un(v,w,a[(c[u>>2]|0)+-1>>0]|0,a[(c[u>>2]|0)+((c[j+12>>2]|0)-1)>>0]|0,c[p>>2]|0,c[p+4>>2]|0)|0;p=t;c[p>>2]=o;c[p+4>>2]=y;p=c[n>>2]|0;o=t;h=c[o>>2]|0;i=c[o+4>>2]|0;o=c[s>>2]|0;g=(c[u>>2]|0)-(c[r>>2]|0)|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];c[m+16>>2]=c[j+16>>2];c[m+20>>2]=c[j+20>>2];bo(p,h,i,o,g,m);c[u>>2]=(c[u>>2]|0)+1;}y=w;l=k;return v|0;}function eo(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0;h=l;l=l+48|0;i=h+16|0;j=h+8|0;k=h+4|0;m=h;c[j>>2]=b;c[k>>2]=e;c[m>>2]=c[(c[j>>2]|0)+24>>2];e=c[j>>2]|0;j=c[k>>2]|0;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];c[i+20>>2]=c[g+20>>2];b=Yn(e,j,i)|0;i=b+((d[(c[m>>2]|0)+(c[k>>2]|0)>>0]|0)<<3)|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];f=(c[m>>2]|0)+(c[k>>2]|0)|0;a[f>>0]=(a[f>>0]|0)+1<<24>>24;f=(c[m>>2]|0)+(c[k>>2]|0)|0;a[f>>0]=(d[f>>0]|0)&(1<<c[g+8>>2])-1;l=h;return;}function fo(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function go(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=l;l=l+16|0;d=b+4|0;e=b;c[e>>2]=a;a=(ko()|0)!=0;f=(ho()|0)!=0;g=c[e>>2]|0;do{if(a){if(f){e=ob(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(fE(g|0)|0)>>3;break;}}else if(f){e=lE(g|0,0,0)|0;c[d>>2]=e>>3;break;}else{c[d>>2]=(Q(g|0)|0)>>3;break;}}while(0);l=b;return c[d>>2]|0;}function ho(){return 0;}function io(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|d[a+2>>0]<<16|d[a+3>>0]<<24|0;}function jo(a){a=a|0;var b=0,e=0;b=l;l=l+16|0;e=b;c[e>>2]=a;a=c[e>>2]|0;l=b;return d[a>>0]|d[a+1>>0]<<8|0;}function ko(){return d[11936]|0|0;}function lo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f+20|0;h=f+16|0;i=f+12|0;j=f;c[g>>2]=b;c[h>>2]=d;c[i>>2]=e;e=(c[c[g>>2]>>2]|0)+((c[(c[g>>2]|0)+4>>2]|0)*12|0)|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];if((c[h>>2]|0)>>>0>=((c[j+4>>2]|0)+(c[j+8>>2]|0)|0)>>>0){e=(c[g>>2]|0)+4|0;c[e>>2]=(c[e>>2]|0)+1;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}if((c[h>>2]|0)>>>0>(c[j+4>>2]|0)>>>0){if((c[h>>2]|0)>>>0<((c[j+4>>2]|0)+(c[j+8>>2]|0)|0)>>>0?(c[j+8>>2]=(c[h>>2]|0)-(c[j+4>>2]|0),(c[j+8>>2]|0)>>>0<(c[i>>2]|0)>>>0):0)c[j>>2]=0;}else c[j>>2]=0;An(c[g>>2]|0,c[h>>2]|0,c[i>>2]|0);c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];l=f;return;}function mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=l;l=l+16|0;e=d+8|0;f=d+4|0;g=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(c[f>>2]|0)-(c[(c[e>>2]|0)+4>>2]|0);if((c[g>>2]|0)>>>0<=((c[(c[e>>2]|0)+24>>2]|0)+1024|0)>>>0){l=d;return;}if(512<((c[g>>2]|0)-(c[(c[e>>2]|0)+24>>2]|0)-1024|0)>>>0)h=512;else h=(c[g>>2]|0)-(c[(c[e>>2]|0)+24>>2]|0)-1024|0;c[(c[e>>2]|0)+24>>2]=(c[g>>2]|0)-h;l=d;return;}function no(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e+12|0;g=e+8|0;h=e+4|0;i=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[h>>2];switch(c[(c[g>>2]|0)+24>>2]|0){case 1:{Nj(c[f>>2]|0,c[g>>2]|0,c[i>>2]|0);c[(c[f>>2]|0)+24>>2]=(c[i>>2]|0)-(c[(c[f>>2]|0)+4>>2]|0);l=e;return 0;}case 2:{Oj(c[f>>2]|0,c[g>>2]|0,c[i>>2]|0);c[(c[f>>2]|0)+24>>2]=(c[i>>2]|0)-(c[(c[f>>2]|0)+4>>2]|0);l=e;return 0;}default:{l=e;return 0;}}return 0;}function oo(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=l;l=l+32|0;i=h+16|0;j=h+12|0;k=h+8|0;m=h+4|0;n=h;c[i>>2]=a;c[j>>2]=d;c[k>>2]=e;c[m>>2]=f;c[n>>2]=g;po(c[(c[i>>2]|0)+12>>2]|0,c[k>>2]|0,c[j>>2]|0);k=(c[i>>2]|0)+12|0;c[k>>2]=(c[k>>2]|0)+(c[j>>2]|0);if((c[j>>2]|0)>>>0>65535){c[(c[i>>2]|0)+28>>2]=1;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;}b[(c[(c[i>>2]|0)+4>>2]|0)+4>>1]=c[j>>2];c[c[(c[i>>2]|0)+4>>2]>>2]=(c[m>>2]|0)+1;if((c[n>>2]|0)>>>0<=65535){o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}c[(c[i>>2]|0)+28>>2]=2;c[(c[i>>2]|0)+32>>2]=((c[(c[i>>2]|0)+4>>2]|0)-(c[c[i>>2]>>2]|0)|0)/8|0;o=c[n>>2]|0;p=o&65535;q=c[i>>2]|0;r=q+4|0;s=c[r>>2]|0;t=s+6|0;b[t>>1]=p;u=c[i>>2]|0;v=u+4|0;w=c[v>>2]|0;x=w+8|0;c[v>>2]=x;l=h;return;}function po(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+32|0;f=e+20|0;g=e+16|0;h=e+12|0;i=e+8|0;j=e+4|0;k=e;c[f>>2]=a;c[g>>2]=b;c[h>>2]=d;c[i>>2]=c[g>>2];c[j>>2]=c[f>>2];c[k>>2]=(c[j>>2]|0)+(c[h>>2]|0);do{qo(c[j>>2]|0,c[i>>2]|0);c[j>>2]=(c[j>>2]|0)+8;c[i>>2]=(c[i>>2]|0)+8;}while((c[j>>2]|0)>>>0<(c[k>>2]|0)>>>0);l=e;return;}function qo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e+4|0;g=e;c[f>>2]=b;c[g>>2]=d;d=c[f>>2]|0;f=c[g>>2]|0;a[d>>0]=a[f>>0]|0;a[d+1>>0]=a[f+1>>0]|0;a[d+2>>0]=a[f+2>>0]|0;a[d+3>>0]=a[f+3>>0]|0;a[d+4>>0]=a[f+4>>0]|0;a[d+5>>0]=a[f+5>>0]|0;a[d+6>>0]=a[f+6>>0]|0;a[d+7>>0]=a[f+7>>0]|0;l=e;return;}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=b;c[f>>2]=(c[e>>2]|0)-(c[a+4>>2]|0);l=d;return(c[f>>2]|0)>>>0>2684354560|0;}function so(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+28|0;h=f+24|0;i=f+20|0;j=f+16|0;k=f+12|0;m=f+8|0;n=f+4|0;o=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(1<<c[h>>2])-1;c[m>>2]=(c[j>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);c[n>>2]=(c[m>>2]&c[k>>2])+(c[i>>2]|0);c[o>>2]=(c[m>>2]|0)-(c[n>>2]|0);n=(c[g>>2]|0)+4|0;c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);n=(c[g>>2]|0)+8|0;c[n>>2]=(c[n>>2]|0)+(c[o>>2]|0);n=(c[g>>2]|0)+16|0;c[n>>2]=(c[n>>2]|0)-(c[o>>2]|0);n=(c[g>>2]|0)+12|0;c[n>>2]=(c[n>>2]|0)-(c[o>>2]|0);l=f;return c[o>>2]|0;}function to(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=l;l=l+32|0;e=d+20|0;f=d+16|0;g=d+12|0;h=d+8|0;i=d+4|0;j=d;c[e>>2]=a;c[f>>2]=b;c[g>>2]=(c[e>>2]|0)+472+8;c[h>>2]=1<<c[(c[e>>2]|0)+116+4+8>>2];vo(c[(c[g>>2]|0)+36>>2]|0,c[h>>2]|0,c[f>>2]|0);do{if((c[(c[e>>2]|0)+116+4+24>>2]|0)!=1){c[i>>2]=1<<c[(c[e>>2]|0)+116+4+4>>2];h=c[(c[g>>2]|0)+44>>2]|0;b=c[i>>2]|0;a=c[f>>2]|0;if((c[(c[e>>2]|0)+116+4+24>>2]|0)==6){wo(h,b,a);break;}else{vo(h,b,a);break;}}}while(0);if(!(c[(c[g>>2]|0)+32>>2]|0)){l=d;return;}c[j>>2]=1<<c[(c[g>>2]|0)+32>>2];vo(c[(c[g>>2]|0)+40>>2]|0,c[j>>2]|0,c[f>>2]|0);l=d;return;}function uo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+32|0;g=f+24|0;h=f+20|0;i=f+16|0;j=f+12|0;k=f+8|0;m=f+4|0;n=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)-(c[(c[g>>2]|0)+4>>2]|0);if(c[j>>2]|0)o=c[c[j>>2]>>2]|0;else o=0;c[m>>2]=o;if((c[k>>2]|0)>>>0<=((c[i>>2]|0)+(c[m>>2]|0)|0)>>>0){l=f;return;}c[n>>2]=(c[k>>2]|0)-(c[i>>2]|0);if((c[(c[g>>2]|0)+16>>2]|0)>>>0<(c[n>>2]|0)>>>0)c[(c[g>>2]|0)+16>>2]=c[n>>2];if((c[(c[g>>2]|0)+12>>2]|0)>>>0<(c[(c[g>>2]|0)+16>>2]|0)>>>0)c[(c[g>>2]|0)+12>>2]=c[(c[g>>2]|0)+16>>2];if(!(c[j>>2]|0)){l=f;return;}c[c[j>>2]>>2]=0;l=f;return;}function vo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;e=l;l=l+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e+24|0;m=e+20|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;r=e;c[p>>2]=a;c[q>>2]=b;c[r>>2]=d;d=c[q>>2]|0;q=c[r>>2]|0;c[f>>2]=c[p>>2];c[g>>2]=d;c[h>>2]=q;c[i>>2]=0;c[j>>2]=(c[g>>2]|0)/16|0;c[k>>2]=0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[j>>2]|0))break;c[n>>2]=0;while(1){if((c[n>>2]|0)>=16)break;if(c[i>>2]|0){c[o>>2]=(c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]|0)==1?c[h>>2]|0:0;g=(c[f>>2]|0)+(c[k>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)+(c[o>>2]|0);}if((c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>0<(c[h>>2]|0)>>>0)c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]=0;else{g=(c[f>>2]|0)+(c[k>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)-(c[h>>2]|0);}c[k>>2]=(c[k>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1;}c[m>>2]=(c[m>>2]|0)+1;}l=e;return;}function wo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;e=l;l=l+48|0;f=e+44|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e+24|0;m=e+20|0;n=e+16|0;o=e+12|0;p=e+8|0;q=e+4|0;r=e;c[p>>2]=a;c[q>>2]=b;c[r>>2]=d;d=c[q>>2]|0;q=c[r>>2]|0;c[f>>2]=c[p>>2];c[g>>2]=d;c[h>>2]=q;c[i>>2]=1;c[j>>2]=(c[g>>2]|0)/16|0;c[k>>2]=0;c[m>>2]=0;while(1){if((c[m>>2]|0)>=(c[j>>2]|0))break;c[n>>2]=0;while(1){if((c[n>>2]|0)>=16)break;if(c[i>>2]|0){c[o>>2]=(c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]|0)==1?c[h>>2]|0:0;g=(c[f>>2]|0)+(c[k>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)+(c[o>>2]|0);}if((c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]|0)>>>0<(c[h>>2]|0)>>>0)c[(c[f>>2]|0)+(c[k>>2]<<2)>>2]=0;else{g=(c[f>>2]|0)+(c[k>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)-(c[h>>2]|0);}c[k>>2]=(c[k>>2]|0)+1;c[n>>2]=(c[n>>2]|0)+1;}c[m>>2]=(c[m>>2]|0)+1;}l=e;return;}function xo(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;k=l;l=l+160|0;m=k+48|0;n=k+40|0;o=k+36|0;p=k+32|0;q=k+28|0;r=k+24|0;s=k+20|0;t=k;u=k+16|0;v=k+12|0;w=k+8|0;c[o>>2]=a;c[p>>2]=b;c[q>>2]=d;c[r>>2]=e;c[s>>2]=f;f=t;c[f>>2]=h;c[f+4>>2]=i;c[u>>2]=j;if(c[s>>2]|0?(c[(c[s>>2]|0)+8>>2]|0)>>>0>0:0){x=(c[o>>2]|0)+12|0;y=g;z=x+104|0;do{c[x>>2]=c[y>>2];x=x+4|0;y=y+4|0;}while((x|0)<(z|0));j=c[o>>2]|0;i=c[s>>2]|0;s=c[g+4>>2]|0;f=g+32|0;h=t;e=c[h>>2]|0;d=c[h+4>>2]|0;h=c[u>>2]|0;c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[n>>2]=yo(j,i,s,m,e,d,h)|0;A=c[n>>2]|0;l=k;return A|0;}h=c[o>>2]|0;d=t;t=c[d>>2]|0;e=c[d+4>>2]|0;d=c[u>>2]|0;x=m;y=g;z=x+104|0;do{c[x>>2]=c[y>>2];x=x+4|0;y=y+4|0;}while((x|0)<(z|0));c[v>>2]=ml(h,m,t,e,0,d)|0;if(wj(c[v>>2]|0)|0){c[n>>2]=c[v>>2];A=c[n>>2]|0;l=k;return A|0;}c[w>>2]=Ej(c[(c[o>>2]|0)+472>>2]|0,(c[o>>2]|0)+472+8|0,g,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0,c[(c[o>>2]|0)+588>>2]|0)|0;r=(Ph(c[w>>2]|0)|0)!=0;q=c[w>>2]|0;if(r){c[n>>2]=q;A=c[n>>2]|0;l=k;return A|0;}else{c[(c[o>>2]|0)+220>>2]=q;c[n>>2]=0;A=c[n>>2]|0;l=k;return A|0;}return 0;}function yo(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;i=l;l=l+256|0;j=i+152|0;k=i+148|0;m=i+144|0;n=i+140|0;o=i;p=i+136|0;q=i+32|0;r=i+28|0;s=i+24|0;t=i+20|0;u=i+16|0;v=i+12|0;w=i+8|0;c[k>>2]=a;c[m>>2]=b;c[n>>2]=d;d=o;c[d>>2]=f;c[d+4>>2]=g;c[p>>2]=h;h=q;g=(c[k>>2]|0)+12|0;d=h+104|0;do{c[h>>2]=c[g>>2];h=h+4|0;g=g+4|0;}while((h|0)<(d|0));f=q+4|0;b=(c[m>>2]|0)+4720|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[b+16>>2];c[f+20>>2]=c[b+20>>2];c[f+24>>2]=c[b+24>>2];if(c[n>>2]|0)c[q+4>>2]=c[n>>2];n=q+32|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];e=c[k>>2]|0;n=o;o=c[n>>2]|0;b=c[n+4>>2]|0;n=c[p>>2]|0;h=j;g=q;d=h+104|0;do{c[h>>2]=c[g>>2];h=h+4|0;g=g+4|0;}while((h|0)<(d|0));ml(e,j,o,b,1,n)|0;if((c[(c[m>>2]|0)+4720+24>>2]|0)==1)x=0;else x=1<<c[(c[m>>2]|0)+4720+4>>2];c[r>>2]=x;c[s>>2]=1<<c[(c[m>>2]|0)+4720+8>>2];c[t>>2]=(c[r>>2]|0)+(c[s>>2]|0)<<2;mE(c[(c[k>>2]|0)+472+8+36>>2]|0,c[(c[m>>2]|0)+20+36>>2]|0,c[t>>2]|0)|0;c[u>>2]=1<<c[(c[k>>2]|0)+472+8+32>>2];oE(c[(c[k>>2]|0)+472+8+40>>2]|0,0,c[u>>2]<<2|0)|0;c[v>>2]=(c[m>>2]|0)+20;c[w>>2]=(c[k>>2]|0)+472+8;u=c[w>>2]|0;t=c[v>>2]|0;c[u>>2]=c[t>>2];c[u+4>>2]=c[t+4>>2];c[u+8>>2]=c[t+8>>2];c[u+12>>2]=c[t+12>>2];c[u+16>>2]=c[t+16>>2];c[(c[w>>2]|0)+24>>2]=c[(c[v>>2]|0)+24>>2];c[(c[w>>2]|0)+28>>2]=c[(c[v>>2]|0)+28>>2];c[(c[w>>2]|0)+20>>2]=c[(c[v>>2]|0)+20>>2];c[(c[k>>2]|0)+220>>2]=c[(c[m>>2]|0)+4760>>2];mE(c[(c[k>>2]|0)+472>>2]|0,(c[m>>2]|0)+128|0,4592)|0;l=i;return 0;}function zo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+112|0;f=e;g=f;h=b;b=g+104|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0;}while((g|0)<(b|0));i=f+4|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];c[i+16>>2]=c[d+16>>2];c[i+20>>2]=c[d+20>>2];c[i+24>>2]=c[d+24>>2];i=f+32|0;j=d+28|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[f+44>>2]=3;g=a;h=f;b=g+104|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0;}while((g|0)<(b|0));l=e;return;}function Ao(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0;g=l;l=l+96|0;h=g+84|0;i=g;j=g+80|0;k=g+40|0;m=g+8|0;c[h>>2]=b;b=i;c[b>>2]=d;c[b+4>>2]=e;c[j>>2]=f;f=i;sj(m,c[h>>2]|0,c[f>>2]|0,c[f+4>>2]|0,c[j>>2]|0);j=k;f=j+40|0;do{c[j>>2]=0;j=j+4|0;}while((j|0)<(f|0));c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];c[k+12>>2]=c[m+12>>2];c[k+16>>2]=c[m+16>>2];c[k+20>>2]=c[m+20>>2];c[k+24>>2]=c[m+24>>2];c[k+28>>2]=1;j=a;a=k;f=j+40|0;do{c[j>>2]=c[a>>2];j=j+4|0;a=a+4|0;}while((j|0)<(f|0));l=g;return;}function Bo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+32|0;h=g+28|0;i=g+24|0;j=g+20|0;k=g+16|0;m=g+12|0;n=g+8|0;o=g+4|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[p>>2]=wn(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,1,1)|0;if(Ph(c[p>>2]|0)|0){c[h>>2]=c[p>>2];q=c[h>>2]|0;l=g;return q|0;}c[o>>2]=Co(c[i>>2]|0,(c[j>>2]|0)+(c[p>>2]|0)|0,(c[k>>2]|0)-(c[p>>2]|0)|0)|0;if(Ph(c[o>>2]|0)|0){c[h>>2]=c[o>>2];q=c[h>>2]|0;l=g;return q|0;}if(c[(c[i>>2]|0)+116+32>>2]|0?(k=(c[i>>2]|0)+240|0,j=c[k>>2]|0,n=c[k+4>>2]|0,k=(c[i>>2]|0)+248|0,i=dE(c[k>>2]|0,c[k+4>>2]|0,1,0)|0,(j|0)!=(i|0)|(n|0)!=(y|0)):0){c[h>>2]=-72;q=c[h>>2]|0;l=g;return q|0;}c[h>>2]=(c[p>>2]|0)+(c[o>>2]|0);q=c[h>>2]|0;l=g;return q|0;}function Co(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=l;l=l+144|0;f=e+40|0;g=e+32|0;h=e+28|0;i=e+24|0;j=e+20|0;k=e+16|0;m=e+12|0;n=e+8|0;o=e+4|0;p=e;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;c[k>>2]=c[i>>2];c[m>>2]=c[k>>2];c[n>>2]=0;if(!(c[c[h>>2]>>2]|0)){c[g>>2]=-60;q=c[g>>2]|0;l=e;return q|0;}do{if((c[c[h>>2]>>2]|0)==1){d=c[i>>2]|0;b=c[j>>2]|0;a=f;r=(c[h>>2]|0)+116|0;s=a+104|0;do{c[a>>2]=c[r>>2];a=a+4|0;r=r+4|0;}while((a|0)<(s|0));c[n>>2]=xn(d,b,f,0,0,0)|0;r=(Ph(c[n>>2]|0)|0)!=0;a=c[n>>2]|0;if(!r){c[j>>2]=(c[j>>2]|0)-a;c[m>>2]=(c[m>>2]|0)+(c[n>>2]|0);c[c[h>>2]>>2]=2;break;}c[g>>2]=a;q=c[g>>2]|0;l=e;return q|0;}}while(0);do{if((c[c[h>>2]>>2]|0)!=3){c[o>>2]=1;if((c[j>>2]|0)>>>0>=4){Pl(c[m>>2]|0,1);c[m>>2]=(c[m>>2]|0)+3;c[j>>2]=(c[j>>2]|0)-3;break;}c[g>>2]=-70;q=c[g>>2]|0;l=e;return q|0;}}while(0);do{if(c[(c[h>>2]|0)+116+32+4>>2]|0){o=Oh((c[h>>2]|0)+264|0)|0;c[p>>2]=o;if((c[j>>2]|0)>>>0>=4){Pl(c[m>>2]|0,c[p>>2]|0);c[m>>2]=(c[m>>2]|0)+4;break;}c[g>>2]=-70;q=c[g>>2]|0;l=e;return q|0;}}while(0);c[c[h>>2]>>2]=0;c[g>>2]=(c[m>>2]|0)-(c[k>>2]|0);q=c[g>>2]|0;l=e;return q|0;}function Do(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;j=l;l=l+144|0;k=j+40|0;m=j+32|0;n=j+28|0;o=j+24|0;p=j+20|0;q=j+16|0;r=j+12|0;s=j+8|0;t=j+4|0;u=j;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;h=c[n>>2]|0;g=c[s>>2]|0;s=c[t>>2]|0;t=c[r>>2]|0;f=k;e=i;i=f+104|0;do{c[f>>2]=c[e>>2];f=f+4|0;e=e+4|0;}while((f|0)<(i|0));c[u>>2]=xo(h,g,s,0,0,k,t,0,0)|0;if(wj(c[u>>2]|0)|0){c[m>>2]=c[u>>2];v=c[m>>2]|0;l=j;return v|0;}else{c[m>>2]=Bo(c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[r>>2]|0)|0;v=c[m>>2]|0;l=j;return v|0;}return 0;}function Eo(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;j=l;l=l+400|0;k=j+288|0;m=j+176|0;n=j+280|0;o=j+168|0;p=j+164|0;q=j+160|0;r=j+156|0;s=j+152|0;t=j+148|0;u=j+144|0;v=j+104|0;w=j;c[n>>2]=a;c[o>>2]=b;c[p>>2]=d;c[q>>2]=e;c[r>>2]=f;c[s>>2]=g;c[t>>2]=h;c[u>>2]=i;Ao(v,c[u>>2]|0,c[r>>2]|0?c[r>>2]|0:1,0,c[s>>2]|0?c[t>>2]|0:0);i=m;h=(c[n>>2]|0)+12|0;g=i+104|0;do{c[i>>2]=c[h>>2];i=i+4|0;h=h+4|0;}while((i|0)<(g|0));i=k;h=v;g=i+40|0;do{c[i>>2]=c[h>>2];i=i+4|0;h=h+4|0;}while((i|0)<(g|0));zo(w,m,k);xj(w,1e3,(c[u>>2]|0)>=0&1)|0;u=c[n>>2]|0;n=c[o>>2]|0;o=c[p>>2]|0;p=c[q>>2]|0;q=c[r>>2]|0;r=c[s>>2]|0;s=c[t>>2]|0;i=k;h=w;g=i+104|0;do{c[i>>2]=c[h>>2];i=i+4|0;h=h+4|0;}while((i|0)<(g|0));h=Do(u,n,o,p,q,r,s,k)|0;l=j;return h|0;}function Fo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+32|0;i=h+20|0;j=h+16|0;k=h+12|0;m=h+8|0;n=h+4|0;o=h;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;g=Eo(c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,0,0,c[o>>2]|0)|0;l=h;return g|0;}function Go(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+704|0;h=g+680|0;i=g+676|0;j=g+672|0;k=g+668|0;m=g+664|0;n=g+660|0;o=g+656|0;p=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;oE(p|0,0,656)|0;f=p+352|0;c[f>>2]=c[5406];c[f+4>>2]=c[5407];c[f+8>>2]=c[5408];c[o>>2]=Fo(p,c[i>>2]|0,c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0)|0;n=c[p+224>>2]|0;c[h>>2]=c[5406];c[h+4>>2]=c[5407];c[h+8>>2]=c[5408];Th(n,h);l=g;return c[o>>2]|0;}function Ho(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=l;l=l+80|0;f=e+68|0;g=e+40|0;h=e+36|0;i=e+32|0;j=e+28|0;k=e;c[h>>2]=a;c[i>>2]=b;c[j>>2]=d;sj(k,c[j>>2]|0,0,0,c[i>>2]|0);j=c[h>>2]|0;h=c[i>>2]|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=c[k+20>>2];c[g+24>>2]=c[k+24>>2];c[f>>2]=c[5406];c[f+4>>2]=c[5407];c[f+8>>2]=c[5408];k=zj(j,h,0,0,g,f)|0;l=e;return k|0;}function Io(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=(c[e>>2]|0)+4720|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];l=d;return;}function Jo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=l;l=l+272|0;h=g+168|0;i=g+160|0;j=g+156|0;k=g+152|0;m=g;n=g+48|0;o=g+16|0;p=g+12|0;q=g+8|0;c[j>>2]=a;c[k>>2]=b;b=m;c[b>>2]=e;c[b+4>>2]=f;if(!(c[k>>2]|0)){c[i>>2]=-32;r=c[i>>2]|0;l=g;return r|0;}f=n;b=(c[j>>2]|0)+12|0;e=f+104|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0;}while((f|0)<(e|0));a=n+4|0;Io(o,c[k>>2]|0);c[a>>2]=c[o>>2];c[a+4>>2]=c[o+4>>2];c[a+8>>2]=c[o+8>>2];c[a+12>>2]=c[o+12>>2];c[a+16>>2]=c[o+16>>2];c[a+20>>2]=c[o+20>>2];c[a+24>>2]=c[o+24>>2];o=m;if((c[o>>2]|0)!=-1?1:(c[o+4>>2]|0)!=-1){o=m;a=c[o+4>>2]|0;s=a>>>0<0|(a|0)==0&(c[o>>2]|0)>>>0<524288;o=m;a=c[o+4>>2]|0;a=s?c[o>>2]|0:524288;c[p>>2]=a;if((c[p>>2]|0)>>>0>1)t=(uj((c[p>>2]|0)-1|0)|0)+1|0;else t=1;c[q>>2]=t;c[n+4>>2]=(c[n+4>>2]|0)>>>0>(c[q>>2]|0)>>>0?c[n+4>>2]|0:c[q>>2]|0;}q=n+32|0;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];d=c[j>>2]|0;j=c[k>>2]|0;k=m;m=c[k>>2]|0;q=c[k+4>>2]|0;f=h;b=n;e=f+104|0;do{c[f>>2]=c[b>>2];f=f+4|0;b=b+4|0;}while((f|0)<(e|0));c[i>>2]=xo(d,0,0,0,j,h,m,q,0)|0;r=c[i>>2]|0;l=g;return r|0;}function hy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=l;l=l+112|0;h=g+100|0;i=g+96|0;j=g+92|0;k=g+88|0;m=g+84|0;n=g+80|0;o=g+76|0;p=g+72|0;q=g+68|0;r=g+64|0;s=g+60|0;t=g+56|0;u=g+52|0;v=g+48|0;w=g+44|0;x=g+40|0;y=g+36|0;z=g+32|0;A=g+28|0;B=g+24|0;C=g+20|0;D=g+16|0;E=g+12|0;F=g+8|0;G=g+4|0;H=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=c[o>>2];c[q>>2]=(c[o>>2]|0)+(c[c[n>>2]>>2]|0);c[r>>2]=c[j>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[r>>2]|0)+(c[c[k>>2]>>2]|0);c[u>>2]=1;a:while(1){if(!(c[u>>2]|0)){I=48;break;}switch(c[(c[i>>2]|0)+80>>2]|0){case 0:{I=4;break a;break;}case 1:{c[v>>2]=yq((c[i>>2]|0)+8|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;j=(mr(c[v>>2]|0)|0)!=0;J=c[v>>2]|0;if(j){I=6;break a;}K=c[i>>2]|0;if(J|0){I=8;break a;}c[K+80>>2]=3;break;}case 2:{c[w>>2]=ry((c[i>>2]|0)+84+(c[(c[i>>2]|0)+76>>2]|0)|0,5-(c[(c[i>>2]|0)+76>>2]|0)|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;j=(c[i>>2]|0)+76|0;c[j>>2]=(c[j>>2]|0)+(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[w>>2]|0);c[w>>2]=yq((c[i>>2]|0)+8|0,(c[i>>2]|0)+84|0,c[(c[i>>2]|0)+76>>2]|0)|0;j=(mr(c[w>>2]|0)|0)!=0;L=c[w>>2]|0;if(j){I=11;break a;}if(L|0){I=13;break a;}else I=14;break;}case 3:{I=14;break;}case 4:{I=23;break;}case 5:{I=33;break;}case 6:{I=42;break;}default:{I=46;break a;}}do{if((I|0)==14){I=0;c[x>>2]=1<<c[(c[i>>2]|0)+8+8>>2];c[y>>2]=131072;if((c[(c[i>>2]|0)+52>>2]|0)>>>0<(c[y>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+48>>2]|0),c[(c[i>>2]|0)+52>>2]=c[y>>2],j=Cy(c[y>>2]|0)|0,c[(c[i>>2]|0)+48>>2]=j,(c[(c[i>>2]|0)+48>>2]|0)==0):0){I=16;break a;}if((c[(c[i>>2]|0)+64>>2]|0)>>>0<(c[x>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+60>>2]|0),c[(c[i>>2]|0)+64>>2]=c[x>>2],j=Cy(c[x>>2]|0)|0,c[(c[i>>2]|0)+60>>2]=j,(c[(c[i>>2]|0)+60>>2]|0)==0):0){I=19;break a;}j=c[i>>2]|0;if(c[(c[i>>2]|0)+76>>2]|0){mE(c[j+48>>2]|0,(c[i>>2]|0)+84|0,c[(c[i>>2]|0)+76>>2]|0)|0;c[(c[i>>2]|0)+56>>2]=c[(c[i>>2]|0)+76>>2];c[(c[i>>2]|0)+76>>2]=0;c[(c[i>>2]|0)+80>>2]=5;break;}else{c[j+80>>2]=4;I=23;break;}}}while(0);do{if((I|0)==23){I=0;c[z>>2]=sy(c[c[i>>2]>>2]|0)|0;if(!(c[z>>2]|0)){c[(c[i>>2]|0)+80>>2]=0;c[u>>2]=0;break;}if(((c[q>>2]|0)-(c[p>>2]|0)|0)>>>0<(c[z>>2]|0)>>>0){if((c[p>>2]|0)==(c[q>>2]|0)){c[u>>2]=0;break;}else{c[(c[i>>2]|0)+80>>2]=5;I=33;break;}}else{c[A>>2]=ty(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+60>>2]|0)+(c[(c[i>>2]|0)+68>>2]|0)|0,(c[(c[i>>2]|0)+64>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0)|0,c[p>>2]|0,c[z>>2]|0)|0;if(mr(c[A>>2]|0)|0){I=27;break a;}c[p>>2]=(c[p>>2]|0)+(c[z>>2]|0);if(!(c[A>>2]|0))break;c[(c[i>>2]|0)+72>>2]=(c[(c[i>>2]|0)+68>>2]|0)+(c[A>>2]|0);c[(c[i>>2]|0)+80>>2]=6;break;}}}while(0);do{if((I|0)==33){I=0;c[B>>2]=sy(c[c[i>>2]>>2]|0)|0;c[C>>2]=(c[B>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0);if((c[C>>2]|0)>>>0>((c[(c[i>>2]|0)+52>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0)|0)>>>0){I=34;break a;}c[D>>2]=ry((c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0,c[C>>2]|0,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;c[p>>2]=(c[p>>2]|0)+(c[D>>2]|0);j=(c[i>>2]|0)+56|0;c[j>>2]=(c[j>>2]|0)+(c[D>>2]|0);if((c[D>>2]|0)>>>0<(c[C>>2]|0)>>>0){c[u>>2]=0;break;}c[E>>2]=ty(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+60>>2]|0)+(c[(c[i>>2]|0)+68>>2]|0)|0,(c[(c[i>>2]|0)+64>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0)|0,c[(c[i>>2]|0)+48>>2]|0,c[B>>2]|0)|0;if(mr(c[E>>2]|0)|0){I=38;break a;}c[(c[i>>2]|0)+56>>2]=0;j=c[i>>2]|0;if(c[E>>2]|0){c[(c[i>>2]|0)+72>>2]=(c[j+68>>2]|0)+(c[E>>2]|0);c[(c[i>>2]|0)+80>>2]=6;I=42;break;}else{c[j+80>>2]=4;break;}}}while(0);do{if((I|0)==42){I=0;c[F>>2]=(c[(c[i>>2]|0)+72>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0);c[G>>2]=ry(c[s>>2]|0,(c[t>>2]|0)-(c[s>>2]|0)|0,(c[(c[i>>2]|0)+60>>2]|0)+(c[(c[i>>2]|0)+68>>2]|0)|0,c[F>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[G>>2]|0);j=(c[i>>2]|0)+68|0;c[j>>2]=(c[j>>2]|0)+(c[G>>2]|0);if((c[G>>2]|0)!=(c[F>>2]|0)){c[u>>2]=0;break;}c[(c[i>>2]|0)+80>>2]=4;if(((c[(c[i>>2]|0)+68>>2]|0)+131072|0)>>>0>(c[(c[i>>2]|0)+64>>2]|0)>>>0){c[(c[i>>2]|0)+72>>2]=0;c[(c[i>>2]|0)+68>>2]=0;}}}while(0);}switch(I|0){case 4:{c[h>>2]=-62;M=c[h>>2]|0;l=g;return M|0;}case 6:{c[h>>2]=J;M=c[h>>2]|0;l=g;return M|0;}case 8:{mE(K+84+(c[(c[i>>2]|0)+76>>2]|0)|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;m=(c[i>>2]|0)+76|0;c[m>>2]=(c[m>>2]|0)+(c[c[n>>2]>>2]|0);c[c[k>>2]>>2]=0;c[(c[i>>2]|0)+80>>2]=2;c[h>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+76>>2]|0);M=c[h>>2]|0;l=g;return M|0;}case 11:{c[h>>2]=L;M=c[h>>2]|0;l=g;return M|0;}case 13:{c[c[k>>2]>>2]=0;c[h>>2]=(c[w>>2]|0)-(c[(c[i>>2]|0)+76>>2]|0);M=c[h>>2]|0;l=g;return M|0;}case 16:{c[h>>2]=-64;M=c[h>>2]|0;l=g;return M|0;}case 19:{c[h>>2]=-64;M=c[h>>2]|0;l=g;return M|0;}case 27:{c[h>>2]=c[A>>2];M=c[h>>2]|0;l=g;return M|0;}case 34:{c[h>>2]=-20;M=c[h>>2]|0;l=g;return M|0;}case 38:{c[h>>2]=c[E>>2];M=c[h>>2]|0;l=g;return M|0;}case 46:{c[h>>2]=-1;M=c[h>>2]|0;l=g;return M|0;}case 48:{c[c[n>>2]>>2]=(c[p>>2]|0)-(c[o>>2]|0);c[c[k>>2]>>2]=(c[s>>2]|0)-(c[r>>2]|0);c[H>>2]=sy(c[c[i>>2]>>2]|0)|0;if((c[H>>2]|0)>>>0>3)c[H>>2]=(c[H>>2]|0)+3;c[H>>2]=(c[H>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0);c[h>>2]=c[H>>2];M=c[h>>2]|0;l=g;return M|0;}}return 0;}function iy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=l;l=l+128|0;h=g+116|0;i=g+112|0;j=g+108|0;k=g+104|0;m=g+100|0;n=g+96|0;o=g+92|0;p=g+88|0;q=g+84|0;r=g+80|0;s=g+76|0;t=g+72|0;u=g+68|0;v=g+64|0;w=g+60|0;x=g+56|0;y=g+52|0;z=g+48|0;A=g+44|0;B=g+40|0;C=g+36|0;D=g+32|0;E=g+28|0;F=g+24|0;G=g+20|0;H=g+16|0;I=g+12|0;J=g+8|0;K=g+4|0;L=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=(c[o>>2]|0)+(c[c[n>>2]>>2]|0);c[q>>2]=c[o>>2];c[r>>2]=c[j>>2];c[s>>2]=(c[r>>2]|0)+(c[c[k>>2]>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=1;a:while(1){if(!(c[u>>2]|0)){M=50;break;}b:do{switch(c[(c[i>>2]|0)+24>>2]|0){case 0:{M=4;break a;break;}case 1:{c[v>>2]=zq((c[i>>2]|0)+8|0,(c[i>>2]|0)+60|0,c[(c[i>>2]|0)+76>>2]|0)|0;if(c[v>>2]|0){c[w>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+76>>2]|0);if(jr(c[v>>2]|0)|0){M=7;break a;}N=(c[i>>2]|0)+60+(c[(c[i>>2]|0)+76>>2]|0)|0;O=c[q>>2]|0;if((c[w>>2]|0)>>>0>((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0){M=9;break a;}mE(N|0,O|0,c[w>>2]|0)|0;c[(c[i>>2]|0)+76>>2]=c[v>>2];c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);break b;}c[x>>2]=oy(c[c[i>>2]>>2]|0)|0;c[y>>2]=py(c[c[i>>2]>>2]|0,0,0,(c[i>>2]|0)+60|0,c[x>>2]|0)|0;if(jr(c[y>>2]|0)|0){M=12;break a;}if((c[x>>2]|0)>>>0<(c[(c[i>>2]|0)+76>>2]|0)>>>0?(c[z>>2]=oy(c[c[i>>2]>>2]|0)|0,c[A>>2]=py(c[c[i>>2]>>2]|0,0,0,(c[i>>2]|0)+60+(c[x>>2]|0)|0,c[z>>2]|0)|0,jr(c[A>>2]|0)|0):0){M=15;break a;}if((1<<c[(c[i>>2]|0)+8+8>>2]|0)<131072)P=1<<c[(c[i>>2]|0)+8+8>>2];else P=131072;c[B>>2]=P;c[(c[i>>2]|0)+56>>2]=c[B>>2];if((c[(c[i>>2]|0)+32>>2]|0)>>>0<(c[B>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+28>>2]|0),c[(c[i>>2]|0)+32>>2]=c[B>>2],j=Cy(c[B>>2]|0)|0,c[(c[i>>2]|0)+28>>2]=j,(c[(c[i>>2]|0)+28>>2]|0)==0):0){M=20;break a;}c[C>>2]=(1<<c[(c[i>>2]|0)+8+8>>2])+(c[B>>2]|0)+16;if((c[(c[i>>2]|0)+44>>2]|0)>>>0<(c[C>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+40>>2]|0),c[(c[i>>2]|0)+44>>2]=c[C>>2],j=Cy(c[C>>2]|0)|0,c[(c[i>>2]|0)+40>>2]=j,(c[(c[i>>2]|0)+40>>2]|0)==0):0){M=23;break a;}c[(c[i>>2]|0)+24>>2]=2;M=25;break;}case 2:{M=25;break;}case 3:{M=35;break;}case 4:{M=44;break;}default:{M=48;break a;}}}while(0);do{if((M|0)==25){M=0;c[D>>2]=oy(c[c[i>>2]>>2]|0)|0;if(!(c[D>>2]|0)){c[(c[i>>2]|0)+24>>2]=0;c[u>>2]=0;break;}if(((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0<(c[D>>2]|0)>>>0){if((c[q>>2]|0)==(c[p>>2]|0)){c[u>>2]=0;break;}else{c[(c[i>>2]|0)+24>>2]=3;M=35;break;}}else{c[E>>2]=py(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+40>>2]|0)+(c[(c[i>>2]|0)+48>>2]|0)|0,(c[(c[i>>2]|0)+44>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0)|0,c[q>>2]|0,c[D>>2]|0)|0;if(jr(c[E>>2]|0)|0){M=29;break a;}c[q>>2]=(c[q>>2]|0)+(c[D>>2]|0);if(!(c[E>>2]|0))break;c[(c[i>>2]|0)+52>>2]=(c[(c[i>>2]|0)+48>>2]|0)+(c[E>>2]|0);c[(c[i>>2]|0)+24>>2]=4;break;}}}while(0);do{if((M|0)==35){M=0;c[F>>2]=oy(c[c[i>>2]>>2]|0)|0;c[G>>2]=(c[F>>2]|0)-(c[(c[i>>2]|0)+36>>2]|0);if((c[G>>2]|0)>>>0>((c[(c[i>>2]|0)+32>>2]|0)-(c[(c[i>>2]|0)+36>>2]|0)|0)>>>0){M=36;break a;}c[H>>2]=qy((c[(c[i>>2]|0)+28>>2]|0)+(c[(c[i>>2]|0)+36>>2]|0)|0,c[G>>2]|0,c[q>>2]|0,(c[p>>2]|0)-(c[q>>2]|0)|0)|0;c[q>>2]=(c[q>>2]|0)+(c[H>>2]|0);j=(c[i>>2]|0)+36|0;c[j>>2]=(c[j>>2]|0)+(c[H>>2]|0);if((c[H>>2]|0)>>>0<(c[G>>2]|0)>>>0){c[u>>2]=0;break;}c[I>>2]=py(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+40>>2]|0)+(c[(c[i>>2]|0)+48>>2]|0)|0,(c[(c[i>>2]|0)+44>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0)|0,c[(c[i>>2]|0)+28>>2]|0,c[F>>2]|0)|0;if(jr(c[I>>2]|0)|0){M=40;break a;}c[(c[i>>2]|0)+36>>2]=0;j=c[i>>2]|0;if(c[I>>2]|0){c[(c[i>>2]|0)+52>>2]=(c[j+48>>2]|0)+(c[I>>2]|0);c[(c[i>>2]|0)+24>>2]=4;M=44;break;}else{c[j+24>>2]=2;break;}}}while(0);do{if((M|0)==44){M=0;c[J>>2]=(c[(c[i>>2]|0)+52>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0);c[K>>2]=qy(c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,(c[(c[i>>2]|0)+40>>2]|0)+(c[(c[i>>2]|0)+48>>2]|0)|0,c[J>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[K>>2]|0);j=(c[i>>2]|0)+48|0;c[j>>2]=(c[j>>2]|0)+(c[K>>2]|0);if((c[K>>2]|0)!=(c[J>>2]|0)){c[u>>2]=0;break;}c[(c[i>>2]|0)+24>>2]=2;if(((c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0)>>>0>(c[(c[i>>2]|0)+44>>2]|0)>>>0){c[(c[i>>2]|0)+52>>2]=0;c[(c[i>>2]|0)+48>>2]=0;}}}while(0);}switch(M|0){case 4:{c[h>>2]=-62;Q=c[h>>2]|0;l=g;return Q|0;}case 7:{c[h>>2]=c[v>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 9:{mE(N|0,O|0,(c[p>>2]|0)-(c[q>>2]|0)|0)|0;O=(c[i>>2]|0)+76|0;c[O>>2]=(c[O>>2]|0)+((c[p>>2]|0)-(c[q>>2]|0));c[q>>2]=c[p>>2];c[u>>2]=0;c[c[k>>2]>>2]=0;c[h>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+76>>2]|0)+3;Q=c[h>>2]|0;l=g;return Q|0;}case 12:{c[h>>2]=c[y>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 15:{c[h>>2]=c[A>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 20:{c[h>>2]=-64;Q=c[h>>2]|0;l=g;return Q|0;}case 23:{c[h>>2]=-64;Q=c[h>>2]|0;l=g;return Q|0;}case 29:{c[h>>2]=c[E>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 36:{c[h>>2]=-20;Q=c[h>>2]|0;l=g;return Q|0;}case 40:{c[h>>2]=c[I>>2];Q=c[h>>2]|0;l=g;return Q|0;}case 48:{c[h>>2]=-1;Q=c[h>>2]|0;l=g;return Q|0;}case 50:{c[c[n>>2]>>2]=(c[q>>2]|0)-(c[o>>2]|0);c[c[k>>2]>>2]=(c[t>>2]|0)-(c[r>>2]|0);c[L>>2]=oy(c[c[i>>2]>>2]|0)|0;if((c[L>>2]|0)>>>0>3)c[L>>2]=(c[L>>2]|0)+3;c[L>>2]=(c[L>>2]|0)-(c[(c[i>>2]|0)+36>>2]|0);c[h>>2]=c[L>>2];Q=c[h>>2]|0;l=g;return Q|0;}}return 0;}function jy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;g=l;l=l+128|0;h=g+124|0;i=g+120|0;j=g+116|0;k=g+112|0;m=g+108|0;n=g+104|0;o=g+100|0;p=g+96|0;q=g+92|0;r=g+88|0;s=g+84|0;t=g+80|0;u=g+76|0;v=g+72|0;w=g+68|0;x=g+64|0;y=g+60|0;z=g+56|0;A=g+52|0;B=g+48|0;C=g+44|0;D=g+40|0;E=g+36|0;F=g+32|0;G=g+28|0;H=g+24|0;I=g+20|0;J=g+16|0;K=g+12|0;L=g+8|0;M=g+4|0;N=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=(c[o>>2]|0)+(c[c[n>>2]>>2]|0);c[q>>2]=c[o>>2];c[r>>2]=c[j>>2];c[s>>2]=(c[r>>2]|0)+(c[c[k>>2]>>2]|0);c[t>>2]=c[r>>2];c[u>>2]=1;a:while(1){if(!(c[u>>2]|0)){O=54;break;}b:do{switch(c[(c[i>>2]|0)+32>>2]|0){case 0:{O=4;break a;break;}case 1:{c[v>>2]=Aq((c[i>>2]|0)+8|0,(c[i>>2]|0)+68|0,c[(c[i>>2]|0)+88>>2]|0)|0;j=(hr(c[v>>2]|0)|0)!=0;P=c[v>>2]|0;if(j){O=6;break a;}if(P|0){c[w>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+88>>2]|0);Q=(c[i>>2]|0)+68+(c[(c[i>>2]|0)+88>>2]|0)|0;R=c[q>>2]|0;if((c[w>>2]|0)>>>0>((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0){O=9;break a;}mE(Q|0,R|0,c[w>>2]|0)|0;c[(c[i>>2]|0)+88>>2]=c[v>>2];c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);break b;}c[x>>2]=ky(c[c[i>>2]>>2]|0)|0;c[y>>2]=ly(c[c[i>>2]>>2]|0,0,0,(c[i>>2]|0)+68|0,c[x>>2]|0)|0;if(hr(c[y>>2]|0)|0){O=12;break a;}if((c[x>>2]|0)>>>0<(c[(c[i>>2]|0)+88>>2]|0)>>>0?(c[z>>2]=ky(c[c[i>>2]>>2]|0)|0,c[A>>2]=ly(c[c[i>>2]>>2]|0,0,0,(c[i>>2]|0)+68+(c[x>>2]|0)|0,c[z>>2]|0)|0,hr(c[A>>2]|0)|0):0){O=15;break a;}if((c[(c[i>>2]|0)+8+8>>2]|0)>>>0>1024)S=c[(c[i>>2]|0)+8+8>>2]|0;else S=1024;c[(c[i>>2]|0)+8+8>>2]=S;if((c[(c[i>>2]|0)+8+8>>2]|0)>>>0<131072)T=c[(c[i>>2]|0)+8+8>>2]|0;else T=131072;c[B>>2]=T;c[(c[i>>2]|0)+64>>2]=c[B>>2];if((c[(c[i>>2]|0)+40>>2]|0)>>>0<(c[B>>2]|0)>>>0?(xc[c[(c[i>>2]|0)+92+4>>2]&31](c[(c[i>>2]|0)+92+8>>2]|0,c[(c[i>>2]|0)+36>>2]|0),c[(c[i>>2]|0)+40>>2]=c[B>>2],j=qc[c[(c[i>>2]|0)+92>>2]&63](c[(c[i>>2]|0)+92+8>>2]|0,c[B>>2]|0)|0,c[(c[i>>2]|0)+36>>2]=j,(c[(c[i>>2]|0)+36>>2]|0)==0):0){O=22;break a;}c[C>>2]=(c[(c[i>>2]|0)+8+8>>2]|0)+(c[B>>2]|0)+16;if((c[(c[i>>2]|0)+52>>2]|0)>>>0<(c[C>>2]|0)>>>0?(xc[c[(c[i>>2]|0)+92+4>>2]&31](c[(c[i>>2]|0)+92+8>>2]|0,c[(c[i>>2]|0)+48>>2]|0),c[(c[i>>2]|0)+52>>2]=c[C>>2],j=qc[c[(c[i>>2]|0)+92>>2]&63](c[(c[i>>2]|0)+92+8>>2]|0,c[C>>2]|0)|0,c[(c[i>>2]|0)+48>>2]=j,(c[(c[i>>2]|0)+48>>2]|0)==0):0){O=25;break a;}c[(c[i>>2]|0)+32>>2]=2;O=27;break;}case 2:{O=27;break;}case 3:{O=39;break;}case 4:{O=48;break;}default:{O=52;break a;}}}while(0);do{if((O|0)==27){O=0;c[D>>2]=ky(c[c[i>>2]>>2]|0)|0;if(!(c[D>>2]|0)){c[(c[i>>2]|0)+32>>2]=0;c[u>>2]=0;break;}if(((c[p>>2]|0)-(c[q>>2]|0)|0)>>>0<(c[D>>2]|0)>>>0)if((c[q>>2]|0)==(c[p>>2]|0)){c[u>>2]=0;break;}else{c[(c[i>>2]|0)+32>>2]=3;O=39;break;}c[E>>2]=my(c[c[i>>2]>>2]|0)|0;if(c[E>>2]|0)U=0;else U=(c[(c[i>>2]|0)+52>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0)|0;c[F>>2]=ly(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0,U,c[q>>2]|0,c[D>>2]|0)|0;if(hr(c[F>>2]|0)|0){O=33;break a;}c[q>>2]=(c[q>>2]|0)+(c[D>>2]|0);if((c[F>>2]|0)!=0|(c[E>>2]|0)!=0){c[(c[i>>2]|0)+60>>2]=(c[(c[i>>2]|0)+56>>2]|0)+(c[F>>2]|0);c[(c[i>>2]|0)+32>>2]=4;}}}while(0);do{if((O|0)==39){O=0;c[G>>2]=ky(c[c[i>>2]>>2]|0)|0;c[H>>2]=(c[G>>2]|0)-(c[(c[i>>2]|0)+44>>2]|0);if((c[H>>2]|0)>>>0>((c[(c[i>>2]|0)+40>>2]|0)-(c[(c[i>>2]|0)+44>>2]|0)|0)>>>0){O=40;break a;}c[I>>2]=ny((c[(c[i>>2]|0)+36>>2]|0)+(c[(c[i>>2]|0)+44>>2]|0)|0,c[H>>2]|0,c[q>>2]|0,(c[p>>2]|0)-(c[q>>2]|0)|0)|0;c[q>>2]=(c[q>>2]|0)+(c[I>>2]|0);j=(c[i>>2]|0)+44|0;c[j>>2]=(c[j>>2]|0)+(c[I>>2]|0);if((c[I>>2]|0)>>>0<(c[H>>2]|0)>>>0){c[u>>2]=0;break;}c[J>>2]=my(c[c[i>>2]>>2]|0)|0;c[K>>2]=ly(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0,(c[(c[i>>2]|0)+52>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0)|0,c[(c[i>>2]|0)+36>>2]|0,c[G>>2]|0)|0;if(hr(c[K>>2]|0)|0){O=44;break a;}c[(c[i>>2]|0)+44>>2]=0;j=c[i>>2]|0;if((c[K>>2]|0)!=0|(c[J>>2]|0)!=0){c[(c[i>>2]|0)+60>>2]=(c[j+56>>2]|0)+(c[K>>2]|0);c[(c[i>>2]|0)+32>>2]=4;O=48;break;}else{c[j+32>>2]=2;break;}}}while(0);do{if((O|0)==48){O=0;c[L>>2]=(c[(c[i>>2]|0)+60>>2]|0)-(c[(c[i>>2]|0)+56>>2]|0);c[M>>2]=ny(c[t>>2]|0,(c[s>>2]|0)-(c[t>>2]|0)|0,(c[(c[i>>2]|0)+48>>2]|0)+(c[(c[i>>2]|0)+56>>2]|0)|0,c[L>>2]|0)|0;c[t>>2]=(c[t>>2]|0)+(c[M>>2]|0);j=(c[i>>2]|0)+56|0;c[j>>2]=(c[j>>2]|0)+(c[M>>2]|0);if((c[M>>2]|0)!=(c[L>>2]|0)){c[u>>2]=0;break;}c[(c[i>>2]|0)+32>>2]=2;if(((c[(c[i>>2]|0)+56>>2]|0)+(c[(c[i>>2]|0)+64>>2]|0)|0)>>>0>(c[(c[i>>2]|0)+52>>2]|0)>>>0){c[(c[i>>2]|0)+60>>2]=0;c[(c[i>>2]|0)+56>>2]=0;}}}while(0);}switch(O|0){case 4:{c[h>>2]=-62;V=c[h>>2]|0;l=g;return V|0;}case 6:{c[h>>2]=P;V=c[h>>2]|0;l=g;return V|0;}case 9:{mE(Q|0,R|0,(c[p>>2]|0)-(c[q>>2]|0)|0)|0;R=(c[i>>2]|0)+88|0;c[R>>2]=(c[R>>2]|0)+((c[p>>2]|0)-(c[q>>2]|0));c[c[k>>2]>>2]=0;c[h>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+88>>2]|0)+3;V=c[h>>2]|0;l=g;return V|0;}case 12:{c[h>>2]=c[y>>2];V=c[h>>2]|0;l=g;return V|0;}case 15:{c[h>>2]=c[A>>2];V=c[h>>2]|0;l=g;return V|0;}case 22:{c[h>>2]=-64;V=c[h>>2]|0;l=g;return V|0;}case 25:{c[h>>2]=-64;V=c[h>>2]|0;l=g;return V|0;}case 33:{c[h>>2]=c[F>>2];V=c[h>>2]|0;l=g;return V|0;}case 40:{c[h>>2]=-20;V=c[h>>2]|0;l=g;return V|0;}case 44:{c[h>>2]=c[K>>2];V=c[h>>2]|0;l=g;return V|0;}case 52:{c[h>>2]=-1;V=c[h>>2]|0;l=g;return V|0;}case 54:{c[c[n>>2]>>2]=(c[q>>2]|0)-(c[o>>2]|0);c[c[k>>2]>>2]=(c[t>>2]|0)-(c[r>>2]|0);c[N>>2]=ky(c[c[i>>2]>>2]|0)|0;c[N>>2]=(c[N>>2]|0)-(c[(c[i>>2]|0)+44>>2]|0);c[h>>2]=c[N>>2];V=c[h>>2]|0;l=g;return V|0;}}return 0;}function ky(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+21536>>2]|0;}function ly(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0;i=l;l=l+80|0;j=i+64|0;k=i+60|0;m=i+56|0;n=i+52|0;o=i+48|0;p=i+44|0;q=i+40|0;r=i+32|0;s=i+24|0;t=i;u=i+20|0;v=i+16|0;w=i+12|0;x=i+8|0;c[k>>2]=b;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;c[p>>2]=h;if((c[p>>2]|0)!=(c[(c[k>>2]|0)+21536>>2]|0)){c[j>>2]=-72;z=c[j>>2]|0;l=i;return z|0;}if(c[n>>2]|0)us(c[k>>2]|0,c[m>>2]|0);a:do{switch(c[(c[k>>2]|0)+21580>>2]|0){case 0:{if((c[p>>2]|0)!=5){c[j>>2]=-72;z=c[j>>2]|0;l=i;return z|0;}if(((Bq(c[o>>2]|0)|0)&-16|0)==407710288){h=(c[k>>2]|0)+152788|0;g=c[o>>2]|0;a[h>>0]=a[g>>0]|0;a[h+1>>0]=a[g+1>>0]|0;a[h+2>>0]=a[g+2>>0]|0;a[h+3>>0]=a[g+3>>0]|0;a[h+4>>0]=a[g+4>>0]|0;c[(c[k>>2]|0)+21536>>2]=3;c[(c[k>>2]|0)+21580>>2]=4;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}g=Cq(c[o>>2]|0,5)|0;c[(c[k>>2]|0)+21680>>2]=g;g=(hr(c[(c[k>>2]|0)+21680>>2]|0)|0)!=0;h=c[k>>2]|0;if(g){c[j>>2]=c[h+21680>>2];z=c[j>>2]|0;l=i;return z|0;}g=h+152788|0;h=c[o>>2]|0;a[g>>0]=a[h>>0]|0;a[g+1>>0]=a[h+1>>0]|0;a[g+2>>0]=a[h+2>>0]|0;a[g+3>>0]=a[h+3>>0]|0;a[g+4>>0]=a[h+4>>0]|0;h=c[k>>2]|0;if((c[(c[k>>2]|0)+21680>>2]|0)>>>0<=5){c[h+21536>>2]=0;break a;}c[(c[k>>2]|0)+21536>>2]=(c[h+21680>>2]|0)-5;c[(c[k>>2]|0)+21580>>2]=1;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}case 1:break;case 2:{c[s>>2]=ir(c[o>>2]|0,3,r)|0;if(hr(c[s>>2]|0)|0){c[j>>2]=c[s>>2];z=c[j>>2]|0;l=i;return z|0;}if((c[r>>2]|0)==3){if(c[(c[k>>2]|0)+21552+16>>2]|0?(h=Oh((c[k>>2]|0)+21592|0)|0,g=t,c[g>>2]=h,c[g+4>>2]=y,g=t,h=iE(c[g>>2]|0,c[g+4>>2]|0,11)|0,c[u>>2]=h&4194303,c[v>>2]=c[o>>2],c[w>>2]=(d[(c[v>>2]|0)+2>>0]|0)+((d[(c[v>>2]|0)+1>>0]|0)<<8)+(((d[c[v>>2]>>0]|0)&63)<<16),(c[w>>2]|0)!=(c[u>>2]|0)):0){c[j>>2]=-22;z=c[j>>2]|0;l=i;return z|0;}c[(c[k>>2]|0)+21536>>2]=0;c[(c[k>>2]|0)+21580>>2]=0;}else{c[(c[k>>2]|0)+21536>>2]=c[s>>2];c[(c[k>>2]|0)+21576>>2]=c[r>>2];c[(c[k>>2]|0)+21580>>2]=3;}c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}case 3:{switch(c[(c[k>>2]|0)+21576>>2]|0){case 0:{c[x>>2]=xs(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;break;}case 1:{c[x>>2]=ys(c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0)|0;break;}case 2:{c[j>>2]=-1;z=c[j>>2]|0;l=i;return z|0;}case 3:{c[x>>2]=0;break;}default:{c[j>>2]=-1;z=c[j>>2]|0;l=i;return z|0;}}c[(c[k>>2]|0)+21580>>2]=2;c[(c[k>>2]|0)+21536>>2]=3;c[(c[k>>2]|0)+21520>>2]=(c[m>>2]|0)+(c[x>>2]|0);if(hr(c[x>>2]|0)|0){c[j>>2]=c[x>>2];z=c[j>>2]|0;l=i;return z|0;}if(c[(c[k>>2]|0)+21552+16>>2]|0)Nh((c[k>>2]|0)+21592|0,c[m>>2]|0,c[x>>2]|0)|0;c[j>>2]=c[x>>2];z=c[j>>2]|0;l=i;return z|0;}case 4:{mE((c[k>>2]|0)+152788+5|0,c[o>>2]|0,c[(c[k>>2]|0)+21536>>2]|0)|0;h=Bq((c[k>>2]|0)+152788+4|0)|0;c[(c[k>>2]|0)+21536>>2]=h;c[(c[k>>2]|0)+21580>>2]=5;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}case 5:{c[(c[k>>2]|0)+21536>>2]=0;c[(c[k>>2]|0)+21580>>2]=0;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}default:{c[j>>2]=-1;z=c[j>>2]|0;l=i;return z|0;}}}while(0);mE((c[k>>2]|0)+152788+5|0,c[o>>2]|0,c[(c[k>>2]|0)+21536>>2]|0)|0;c[q>>2]=ws(c[k>>2]|0,(c[k>>2]|0)+152788|0,c[(c[k>>2]|0)+21680>>2]|0)|0;if(hr(c[q>>2]|0)|0){c[j>>2]=c[q>>2];z=c[j>>2]|0;l=i;return z|0;}else{c[(c[k>>2]|0)+21536>>2]=3;c[(c[k>>2]|0)+21580>>2]=2;c[j>>2]=0;z=c[j>>2]|0;l=i;return z|0;}return 0;}function my(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return(c[(c[d>>2]|0)+21580>>2]|0)==5|0;}function ny(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function oy(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+21536>>2]|0;}function py(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+48|0;i=h+40|0;j=h+36|0;k=h+32|0;m=h+28|0;n=h+24|0;o=h+20|0;p=h+16|0;q=h+8|0;r=h+4|0;s=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[o>>2]|0)!=(c[(c[j>>2]|0)+21536>>2]|0)){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}if(c[m>>2]|0)Kt(c[j>>2]|0,c[k>>2]|0);a:do{switch(c[(c[j>>2]|0)+21564>>2]|0){case 0:{if((c[o>>2]|0)!=5){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}g=Nq(c[n>>2]|0,5)|0;c[(c[j>>2]|0)+21540>>2]=g;g=(jr(c[(c[j>>2]|0)+21540>>2]|0)|0)!=0;f=c[j>>2]|0;if(g){c[i>>2]=c[f+21540>>2];t=c[i>>2]|0;l=h;return t|0;}g=f+152660|0;f=c[n>>2]|0;a[g>>0]=a[f>>0]|0;a[g+1>>0]=a[f+1>>0]|0;a[g+2>>0]=a[f+2>>0]|0;a[g+3>>0]=a[f+3>>0]|0;a[g+4>>0]=a[f+4>>0]|0;f=c[j>>2]|0;if((c[(c[j>>2]|0)+21540>>2]|0)>>>0<=5){c[f+21536>>2]=0;break a;}c[(c[j>>2]|0)+21536>>2]=(c[f+21540>>2]|0)-5;c[(c[j>>2]|0)+21564>>2]=1;c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}case 1:break;case 2:{c[r>>2]=kr(c[n>>2]|0,3,q)|0;if(jr(c[r>>2]|0)|0){c[i>>2]=c[r>>2];t=c[i>>2]|0;l=h;return t|0;}if((c[q>>2]|0)==3){c[(c[j>>2]|0)+21536>>2]=0;c[(c[j>>2]|0)+21564>>2]=0;}else{c[(c[j>>2]|0)+21536>>2]=c[r>>2];c[(c[j>>2]|0)+21560>>2]=c[q>>2];c[(c[j>>2]|0)+21564>>2]=3;}c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}case 3:{switch(c[(c[j>>2]|0)+21560>>2]|0){case 0:{c[s>>2]=Nt(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 1:{c[s>>2]=Ot(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 2:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 3:{c[s>>2]=0;break;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}c[(c[j>>2]|0)+21564>>2]=2;c[(c[j>>2]|0)+21536>>2]=3;c[(c[j>>2]|0)+21520>>2]=(c[k>>2]|0)+(c[s>>2]|0);c[i>>2]=c[s>>2];t=c[i>>2]|0;l=h;return t|0;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}}while(0);mE((c[j>>2]|0)+152660+5|0,c[n>>2]|0,c[(c[j>>2]|0)+21536>>2]|0)|0;c[p>>2]=Mt(c[j>>2]|0,(c[j>>2]|0)+152660|0,c[(c[j>>2]|0)+21540>>2]|0)|0;if(jr(c[p>>2]|0)|0){c[i>>2]=c[p>>2];t=c[i>>2]|0;l=h;return t|0;}else{c[(c[j>>2]|0)+21536>>2]=3;c[(c[j>>2]|0)+21564>>2]=2;c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}return 0;}function qy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function ry(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function sy(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+26656>>2]|0;}function ty(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+48|0;i=h+40|0;j=h+36|0;k=h+32|0;m=h+28|0;n=h+24|0;o=h+20|0;p=h+16|0;q=h+8|0;r=h+4|0;s=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[o>>2]|0)!=(c[(c[j>>2]|0)+26656>>2]|0)){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}Tu(c[j>>2]|0,c[k>>2]|0);a:do{switch(c[(c[j>>2]|0)+26708>>2]|0){case 0:{if((c[o>>2]|0)!=5){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}g=Vu(c[j>>2]|0,c[n>>2]|0,5)|0;c[(c[j>>2]|0)+26660>>2]=g;g=(mr(c[(c[j>>2]|0)+26660>>2]|0)|0)!=0;f=c[j>>2]|0;if(g){c[i>>2]=c[f+26660>>2];t=c[i>>2]|0;l=h;return t|0;}g=f+157804|0;f=c[n>>2]|0;a[g>>0]=a[f>>0]|0;a[g+1>>0]=a[f+1>>0]|0;a[g+2>>0]=a[f+2>>0]|0;a[g+3>>0]=a[f+3>>0]|0;a[g+4>>0]=a[f+4>>0]|0;if((c[(c[j>>2]|0)+26660>>2]|0)>>>0<=5){c[(c[j>>2]|0)+26656>>2]=0;break a;}c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 1:break;case 2:{c[r>>2]=lr(c[n>>2]|0,3,q)|0;if(mr(c[r>>2]|0)|0){c[i>>2]=c[r>>2];t=c[i>>2]|0;l=h;return t|0;}if((c[q>>2]|0)==3){c[(c[j>>2]|0)+26656>>2]=0;c[(c[j>>2]|0)+26708>>2]=0;}else{c[(c[j>>2]|0)+26656>>2]=c[r>>2];c[(c[j>>2]|0)+26704>>2]=c[q>>2];c[(c[j>>2]|0)+26708>>2]=3;}c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}case 3:{switch(c[(c[j>>2]|0)+26704>>2]|0){case 0:{c[s>>2]=Xu(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 1:{c[s>>2]=Yu(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 2:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 3:{c[s>>2]=0;break;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}c[(c[j>>2]|0)+26708>>2]=2;c[(c[j>>2]|0)+26656>>2]=3;c[(c[j>>2]|0)+26640>>2]=(c[k>>2]|0)+(c[s>>2]|0);c[i>>2]=c[s>>2];t=c[i>>2]|0;l=h;return t|0;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}}while(0);c[p>>2]=Wu(c[j>>2]|0,(c[j>>2]|0)+157804|0,c[(c[j>>2]|0)+26660>>2]|0)|0;if(mr(c[p>>2]|0)|0){c[i>>2]=c[p>>2];t=c[i>>2]|0;l=h;return t|0;}else{c[(c[j>>2]|0)+26656>>2]=3;c[(c[j>>2]|0)+26708>>2]=2;c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}return 0;}function uy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=l;l=l+112|0;h=g+100|0;i=g+96|0;j=g+92|0;k=g+88|0;m=g+84|0;n=g+80|0;o=g+76|0;p=g+72|0;q=g+68|0;r=g+64|0;s=g+60|0;t=g+56|0;u=g+52|0;v=g+48|0;w=g+44|0;x=g+40|0;y=g+36|0;z=g+32|0;A=g+28|0;B=g+24|0;C=g+20|0;D=g+16|0;E=g+12|0;F=g+8|0;G=g+4|0;H=g;c[i>>2]=a;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=c[m>>2];c[p>>2]=c[o>>2];c[q>>2]=(c[o>>2]|0)+(c[c[n>>2]>>2]|0);c[r>>2]=c[j>>2];c[s>>2]=c[r>>2];c[t>>2]=(c[r>>2]|0)+(c[c[k>>2]>>2]|0);c[u>>2]=1;a:while(1){if(!(c[u>>2]|0)){I=50;break;}switch(c[(c[i>>2]|0)+80>>2]|0){case 0:{I=4;break a;break;}case 1:{c[v>>2]=sx((c[i>>2]|0)+8|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;j=(rr(c[v>>2]|0)|0)!=0;J=c[v>>2]|0;if(j){I=6;break a;}K=c[i>>2]|0;if(J|0){I=8;break a;}c[K+80>>2]=3;break;}case 2:{c[w>>2]=vy((c[i>>2]|0)+84+(c[(c[i>>2]|0)+68>>2]|0)|0,5-(c[(c[i>>2]|0)+68>>2]|0)|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;j=(c[i>>2]|0)+68|0;c[j>>2]=(c[j>>2]|0)+(c[w>>2]|0);c[p>>2]=(c[p>>2]|0)+(c[w>>2]|0);c[w>>2]=sx((c[i>>2]|0)+8|0,(c[i>>2]|0)+84|0,c[(c[i>>2]|0)+68>>2]|0)|0;j=(rr(c[w>>2]|0)|0)!=0;L=c[w>>2]|0;if(j){I=11;break a;}if(L|0){I=13;break a;}else I=14;break;}case 3:{I=14;break;}case 4:{I=25;break;}case 5:{I=35;break;}case 6:{I=44;break;}default:{I=48;break a;}}do{if((I|0)==14){I=0;c[x>>2]=1<<c[(c[i>>2]|0)+8+8>>2];c[y>>2]=131072;if((c[(c[i>>2]|0)+44>>2]|0)>>>0<131072?(Dy(c[(c[i>>2]|0)+40>>2]|0),c[(c[i>>2]|0)+44>>2]=131072,j=Cy(131072)|0,c[(c[i>>2]|0)+40>>2]=j,(c[(c[i>>2]|0)+40>>2]|0)==0):0){I=16;break a;}if((c[(c[i>>2]|0)+56>>2]|0)>>>0<(c[x>>2]|0)>>>0?(Dy(c[(c[i>>2]|0)+52>>2]|0),c[(c[i>>2]|0)+56>>2]=c[x>>2],j=Cy(c[x>>2]|0)|0,c[(c[i>>2]|0)+52>>2]=j,(c[(c[i>>2]|0)+52>>2]|0)==0):0){I=19;break a;}if(c[(c[i>>2]|0)+76>>2]|0)lw(c[c[i>>2]>>2]|0,c[(c[i>>2]|0)+72>>2]|0,c[(c[i>>2]|0)+76>>2]|0);j=c[i>>2]|0;if(c[(c[i>>2]|0)+68>>2]|0){mE(c[j+40>>2]|0,(c[i>>2]|0)+84|0,c[(c[i>>2]|0)+68>>2]|0)|0;c[(c[i>>2]|0)+48>>2]=c[(c[i>>2]|0)+68>>2];c[(c[i>>2]|0)+68>>2]=0;c[(c[i>>2]|0)+80>>2]=5;break;}else{c[j+80>>2]=4;I=25;break;}}}while(0);do{if((I|0)==25){I=0;c[z>>2]=wy(c[c[i>>2]>>2]|0)|0;if(!(c[z>>2]|0)){c[(c[i>>2]|0)+80>>2]=0;c[u>>2]=0;break;}if(((c[q>>2]|0)-(c[p>>2]|0)|0)>>>0<(c[z>>2]|0)>>>0){if((c[p>>2]|0)==(c[q>>2]|0)){c[u>>2]=0;break;}else{c[(c[i>>2]|0)+80>>2]=5;I=35;break;}}else{c[A>>2]=xy(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+52>>2]|0)+(c[(c[i>>2]|0)+60>>2]|0)|0,(c[(c[i>>2]|0)+56>>2]|0)-(c[(c[i>>2]|0)+60>>2]|0)|0,c[p>>2]|0,c[z>>2]|0)|0;if(rr(c[A>>2]|0)|0){I=29;break a;}c[p>>2]=(c[p>>2]|0)+(c[z>>2]|0);if(!(c[A>>2]|0))break;c[(c[i>>2]|0)+64>>2]=(c[(c[i>>2]|0)+60>>2]|0)+(c[A>>2]|0);c[(c[i>>2]|0)+80>>2]=6;break;}}}while(0);do{if((I|0)==35){I=0;c[B>>2]=wy(c[c[i>>2]>>2]|0)|0;c[C>>2]=(c[B>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0);if((c[C>>2]|0)>>>0>((c[(c[i>>2]|0)+44>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0)|0)>>>0){I=36;break a;}c[D>>2]=vy((c[(c[i>>2]|0)+40>>2]|0)+(c[(c[i>>2]|0)+48>>2]|0)|0,c[C>>2]|0,c[p>>2]|0,(c[q>>2]|0)-(c[p>>2]|0)|0)|0;c[p>>2]=(c[p>>2]|0)+(c[D>>2]|0);j=(c[i>>2]|0)+48|0;c[j>>2]=(c[j>>2]|0)+(c[D>>2]|0);if((c[D>>2]|0)>>>0<(c[C>>2]|0)>>>0){c[u>>2]=0;break;}c[E>>2]=xy(c[c[i>>2]>>2]|0,(c[(c[i>>2]|0)+52>>2]|0)+(c[(c[i>>2]|0)+60>>2]|0)|0,(c[(c[i>>2]|0)+56>>2]|0)-(c[(c[i>>2]|0)+60>>2]|0)|0,c[(c[i>>2]|0)+40>>2]|0,c[B>>2]|0)|0;if(rr(c[E>>2]|0)|0){I=40;break a;}c[(c[i>>2]|0)+48>>2]=0;j=c[i>>2]|0;if(c[E>>2]|0){c[(c[i>>2]|0)+64>>2]=(c[j+60>>2]|0)+(c[E>>2]|0);c[(c[i>>2]|0)+80>>2]=6;I=44;break;}else{c[j+80>>2]=4;break;}}}while(0);do{if((I|0)==44){I=0;c[F>>2]=(c[(c[i>>2]|0)+64>>2]|0)-(c[(c[i>>2]|0)+60>>2]|0);c[G>>2]=vy(c[s>>2]|0,(c[t>>2]|0)-(c[s>>2]|0)|0,(c[(c[i>>2]|0)+52>>2]|0)+(c[(c[i>>2]|0)+60>>2]|0)|0,c[F>>2]|0)|0;c[s>>2]=(c[s>>2]|0)+(c[G>>2]|0);j=(c[i>>2]|0)+60|0;c[j>>2]=(c[j>>2]|0)+(c[G>>2]|0);if((c[G>>2]|0)!=(c[F>>2]|0)){c[u>>2]=0;break;}c[(c[i>>2]|0)+80>>2]=4;if(((c[(c[i>>2]|0)+60>>2]|0)+131072|0)>>>0>(c[(c[i>>2]|0)+56>>2]|0)>>>0){c[(c[i>>2]|0)+64>>2]=0;c[(c[i>>2]|0)+60>>2]=0;}}}while(0);}switch(I|0){case 4:{c[h>>2]=-62;M=c[h>>2]|0;l=g;return M|0;}case 6:{c[h>>2]=J;M=c[h>>2]|0;l=g;return M|0;}case 8:{mE(K+84+(c[(c[i>>2]|0)+68>>2]|0)|0,c[m>>2]|0,c[c[n>>2]>>2]|0)|0;m=(c[i>>2]|0)+68|0;c[m>>2]=(c[m>>2]|0)+(c[c[n>>2]>>2]|0);c[c[k>>2]>>2]=0;c[(c[i>>2]|0)+80>>2]=2;c[h>>2]=(c[v>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0);M=c[h>>2]|0;l=g;return M|0;}case 11:{c[h>>2]=L;M=c[h>>2]|0;l=g;return M|0;}case 13:{c[c[k>>2]>>2]=0;c[h>>2]=(c[w>>2]|0)-(c[(c[i>>2]|0)+68>>2]|0);M=c[h>>2]|0;l=g;return M|0;}case 16:{c[h>>2]=-64;M=c[h>>2]|0;l=g;return M|0;}case 19:{c[h>>2]=-64;M=c[h>>2]|0;l=g;return M|0;}case 29:{c[h>>2]=c[A>>2];M=c[h>>2]|0;l=g;return M|0;}case 36:{c[h>>2]=-20;M=c[h>>2]|0;l=g;return M|0;}case 40:{c[h>>2]=c[E>>2];M=c[h>>2]|0;l=g;return M|0;}case 48:{c[h>>2]=-1;M=c[h>>2]|0;l=g;return M|0;}case 50:{c[c[n>>2]>>2]=(c[p>>2]|0)-(c[o>>2]|0);c[c[k>>2]>>2]=(c[s>>2]|0)-(c[r>>2]|0);c[H>>2]=wy(c[c[i>>2]>>2]|0)|0;if((c[H>>2]|0)>>>0>3)c[H>>2]=(c[H>>2]|0)+3;c[H>>2]=(c[H>>2]|0)-(c[(c[i>>2]|0)+48>>2]|0);c[h>>2]=c[H>>2];M=c[h>>2]|0;l=g;return M|0;}}return 0;}function vy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+32|0;g=f+16|0;h=f+12|0;i=f+8|0;j=f+4|0;k=f;c[g>>2]=a;c[h>>2]=b;c[i>>2]=d;c[j>>2]=e;c[k>>2]=(c[h>>2]|0)>>>0<(c[j>>2]|0)>>>0?c[h>>2]|0:c[j>>2]|0;mE(c[g>>2]|0,c[i>>2]|0,c[k>>2]|0)|0;l=f;return c[k>>2]|0;}function wy(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=a;l=b;return c[(c[d>>2]|0)+10268>>2]|0;}function xy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+48|0;i=h+40|0;j=h+36|0;k=h+32|0;m=h+28|0;n=h+24|0;o=h+20|0;p=h+16|0;q=h+8|0;r=h+4|0;s=h;c[j>>2]=b;c[k>>2]=d;c[m>>2]=e;c[n>>2]=f;c[o>>2]=g;if((c[o>>2]|0)!=(c[(c[j>>2]|0)+10268>>2]|0)){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}yy(c[j>>2]|0,c[k>>2]|0);a:do{switch(c[(c[j>>2]|0)+10316>>2]|0){case 0:{if((c[o>>2]|0)!=5){c[i>>2]=-72;t=c[i>>2]|0;l=h;return t|0;}g=mw(c[j>>2]|0,c[n>>2]|0,5)|0;c[(c[j>>2]|0)+10272>>2]=g;g=(rr(c[(c[j>>2]|0)+10272>>2]|0)|0)!=0;f=c[j>>2]|0;if(g){c[i>>2]=c[f+10272>>2];t=c[i>>2]|0;l=h;return t|0;}g=f+141408|0;f=c[n>>2]|0;a[g>>0]=a[f>>0]|0;a[g+1>>0]=a[f+1>>0]|0;a[g+2>>0]=a[f+2>>0]|0;a[g+3>>0]=a[f+3>>0]|0;a[g+4>>0]=a[f+4>>0]|0;if((c[(c[j>>2]|0)+10272>>2]|0)>>>0<=5){c[(c[j>>2]|0)+10268>>2]=0;break a;}c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 1:break;case 2:{c[r>>2]=qr(c[n>>2]|0,3,q)|0;if(rr(c[r>>2]|0)|0){c[i>>2]=c[r>>2];t=c[i>>2]|0;l=h;return t|0;}if((c[q>>2]|0)==3){c[(c[j>>2]|0)+10268>>2]=0;c[(c[j>>2]|0)+10316>>2]=0;}else{c[(c[j>>2]|0)+10268>>2]=c[r>>2];c[(c[j>>2]|0)+10312>>2]=c[q>>2];c[(c[j>>2]|0)+10316>>2]=3;}c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}case 3:{switch(c[(c[j>>2]|0)+10312>>2]|0){case 0:{c[s>>2]=ow(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 1:{c[s>>2]=pw(c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0)|0;break;}case 2:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}case 3:{c[s>>2]=0;break;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}c[(c[j>>2]|0)+10316>>2]=2;c[(c[j>>2]|0)+10268>>2]=3;c[(c[j>>2]|0)+10252>>2]=(c[k>>2]|0)+(c[s>>2]|0);c[i>>2]=c[s>>2];t=c[i>>2]|0;l=h;return t|0;}default:{c[i>>2]=-1;t=c[i>>2]|0;l=h;return t|0;}}}while(0);c[p>>2]=nw(c[j>>2]|0,(c[j>>2]|0)+141408|0,c[(c[j>>2]|0)+10272>>2]|0)|0;if(rr(c[p>>2]|0)|0){c[i>>2]=c[p>>2];t=c[i>>2]|0;l=h;return t|0;}else{c[(c[j>>2]|0)+10268>>2]=3;c[(c[j>>2]|0)+10316>>2]=2;c[i>>2]=0;t=c[i>>2]|0;l=h;return t|0;}return 0;}function yy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+16|0;e=d+4|0;f=d;c[e>>2]=a;c[f>>2]=b;if((c[f>>2]|0)==(c[(c[e>>2]|0)+10252>>2]|0)){l=d;return;}c[(c[e>>2]|0)+10264>>2]=c[(c[e>>2]|0)+10252>>2];c[(c[e>>2]|0)+10260>>2]=(c[f>>2]|0)+(0-((c[(c[e>>2]|0)+10252>>2]|0)-(c[(c[e>>2]|0)+10256>>2]|0)));c[(c[e>>2]|0)+10256>>2]=c[f>>2];c[(c[e>>2]|0)+10252>>2]=c[f>>2];l=d;return;}function zy(){Ay(0);return;}function Ay(a){a=a|0;Wa(10928,20112);La(10944,20117,1,1,0);Sa(10952,19886,1,-128,127);Sa(10968,19891,1,-128,127);Sa(10960,19903,1,0,255);Sa(10976,19917,2,-32768,32767);Sa(10984,19923,2,0,65535);Sa(10992,20122,4,-2147483648,2147483647);Sa(11e3,20126,4,0,-1);Sa(11008,20139,4,-2147483648,2147483647);Sa(11016,20144,4,0,-1);Qa(11024,20168,4);Qa(11032,20280,8);Ua(10624,19495);Ua(10648,16561);Va(10672,4,16594);Pa(9840,16607);Ta(10696,0,16623);Ta(10704,0,16653);Ta(10712,1,16690);Ta(10720,2,16729);Ta(10728,3,16760);Ta(10736,4,16800);Ta(10744,5,16829);Ta(10752,4,16867);Ta(10760,5,16897);Ta(10704,0,16936);Ta(10712,1,16968);Ta(10720,2,17001);Ta(10728,3,17034);Ta(10736,4,17068);Ta(10744,5,17101);Ta(10768,6,17135);Ta(10776,7,17166);Ta(10784,7,17198);return;}function By(a){a=a|0;return Oz(c[a+4>>2]|0)|0;}function Cy(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;b=l;l=l+16|0;d=b;do{if(a>>>0<245){e=a>>>0<11?16:a+11&-8;f=e>>>3;g=c[5418]|0;h=g>>>f;if(h&3|0){i=(h&1^1)+f|0;j=21712+(i<<1<<2)|0;k=j+8|0;m=c[k>>2]|0;n=m+8|0;o=c[n>>2]|0;if((o|0)==(j|0))c[5418]=g&~(1<<i);else{c[o+12>>2]=j;c[k>>2]=o;}o=i<<3;c[m+4>>2]=o|3;i=m+o+4|0;c[i>>2]=c[i>>2]|1;p=n;l=b;return p|0;}n=c[5420]|0;if(e>>>0>n>>>0){if(h|0){i=2<<f;o=h<<f&(i|0-i);i=(o&0-o)+-1|0;o=i>>>12&16;f=i>>>o;i=f>>>5&8;h=f>>>i;f=h>>>2&4;m=h>>>f;h=m>>>1&2;k=m>>>h;m=k>>>1&1;j=(i|o|f|h|m)+(k>>>m)|0;m=21712+(j<<1<<2)|0;k=m+8|0;h=c[k>>2]|0;f=h+8|0;o=c[f>>2]|0;if((o|0)==(m|0)){i=g&~(1<<j);c[5418]=i;q=i;}else{c[o+12>>2]=m;c[k>>2]=o;q=g;}o=j<<3;j=o-e|0;c[h+4>>2]=e|3;k=h+e|0;c[k+4>>2]=j|1;c[h+o>>2]=j;if(n|0){o=c[5423]|0;h=n>>>3;m=21712+(h<<1<<2)|0;i=1<<h;if(!(q&i)){c[5418]=q|i;r=m;s=m+8|0;}else{i=m+8|0;r=c[i>>2]|0;s=i;}c[s>>2]=o;c[r+12>>2]=o;c[o+8>>2]=r;c[o+12>>2]=m;}c[5420]=j;c[5423]=k;p=f;l=b;return p|0;}f=c[5419]|0;if(f){k=(f&0-f)+-1|0;j=k>>>12&16;m=k>>>j;k=m>>>5&8;o=m>>>k;m=o>>>2&4;i=o>>>m;o=i>>>1&2;h=i>>>o;i=h>>>1&1;t=c[21976+((k|j|m|o|i)+(h>>>i)<<2)>>2]|0;i=t;h=t;o=(c[t+4>>2]&-8)-e|0;while(1){t=c[i+16>>2]|0;if(!t){m=c[i+20>>2]|0;if(!m)break;else u=m;}else u=t;t=(c[u+4>>2]&-8)-e|0;m=t>>>0<o>>>0;i=u;h=m?u:h;o=m?t:o;}i=h+e|0;if(i>>>0>h>>>0){t=c[h+24>>2]|0;m=c[h+12>>2]|0;do{if((m|0)==(h|0)){j=h+20|0;k=c[j>>2]|0;if(!k){v=h+16|0;w=c[v>>2]|0;if(!w){x=0;break;}else{y=w;z=v;}}else{y=k;z=j;}j=y;k=z;while(1){v=j+20|0;w=c[v>>2]|0;if(!w){A=j+16|0;B=c[A>>2]|0;if(!B)break;else{C=B;D=A;}}else{C=w;D=v;}j=C;k=D;}c[k>>2]=0;x=j;}else{v=c[h+8>>2]|0;c[v+12>>2]=m;c[m+8>>2]=v;x=m;}}while(0);do{if(t|0){m=c[h+28>>2]|0;v=21976+(m<<2)|0;if((h|0)==(c[v>>2]|0)){c[v>>2]=x;if(!x){c[5419]=f&~(1<<m);break;}}else{m=t+16|0;c[((c[m>>2]|0)==(h|0)?m:t+20|0)>>2]=x;if(!x)break;}c[x+24>>2]=t;m=c[h+16>>2]|0;if(m|0){c[x+16>>2]=m;c[m+24>>2]=x;}m=c[h+20>>2]|0;if(m|0){c[x+20>>2]=m;c[m+24>>2]=x;}}}while(0);if(o>>>0<16){t=o+e|0;c[h+4>>2]=t|3;f=h+t+4|0;c[f>>2]=c[f>>2]|1;}else{c[h+4>>2]=e|3;c[i+4>>2]=o|1;c[i+o>>2]=o;if(n|0){f=c[5423]|0;t=n>>>3;m=21712+(t<<1<<2)|0;v=1<<t;if(!(v&g)){c[5418]=v|g;E=m;F=m+8|0;}else{v=m+8|0;E=c[v>>2]|0;F=v;}c[F>>2]=f;c[E+12>>2]=f;c[f+8>>2]=E;c[f+12>>2]=m;}c[5420]=o;c[5423]=i;}p=h+8|0;l=b;return p|0;}else G=e;}else G=e;}else G=e;}else if(a>>>0<=4294967231){m=a+11|0;f=m&-8;v=c[5419]|0;if(v){t=0-f|0;w=m>>>8;if(w){if(f>>>0>16777215)H=31;else{m=(w+1048320|0)>>>16&8;A=w<<m;w=(A+520192|0)>>>16&4;B=A<<w;A=(B+245760|0)>>>16&2;I=14-(w|m|A)+(B<<A>>>15)|0;H=f>>>(I+7|0)&1|I<<1;}}else H=0;I=c[21976+(H<<2)>>2]|0;a:do{if(!I){J=0;K=0;L=t;M=61;}else{A=0;B=t;m=I;w=f<<((H|0)==31?0:25-(H>>>1)|0);N=0;while(1){O=(c[m+4>>2]&-8)-f|0;if(O>>>0<B>>>0){if(!O){P=m;Q=0;R=m;M=65;break a;}else{S=m;T=O;}}else{S=A;T=B;}O=c[m+20>>2]|0;m=c[m+16+(w>>>31<<2)>>2]|0;U=(O|0)==0|(O|0)==(m|0)?N:O;if(!m){J=U;K=S;L=T;M=61;break;}else{A=S;B=T;w=w<<1;N=U;}}}}while(0);if((M|0)==61){if((J|0)==0&(K|0)==0){I=2<<H;t=(I|0-I)&v;if(!t){G=f;break;}I=(t&0-t)+-1|0;t=I>>>12&16;e=I>>>t;I=e>>>5&8;h=e>>>I;e=h>>>2&4;i=h>>>e;h=i>>>1&2;o=i>>>h;i=o>>>1&1;V=0;W=c[21976+((I|t|e|h|i)+(o>>>i)<<2)>>2]|0;}else{V=K;W=J;}if(!W){X=V;Y=L;}else{P=V;Q=L;R=W;M=65;}}if((M|0)==65){i=P;o=Q;h=R;while(1){e=(c[h+4>>2]&-8)-f|0;t=e>>>0<o>>>0;I=t?e:o;e=t?h:i;t=c[h+16>>2]|0;if(!t)Z=c[h+20>>2]|0;else Z=t;if(!Z){X=e;Y=I;break;}else{i=e;o=I;h=Z;}}}if(((X|0)!=0?Y>>>0<((c[5420]|0)-f|0)>>>0:0)?(h=X+f|0,h>>>0>X>>>0):0){o=c[X+24>>2]|0;i=c[X+12>>2]|0;do{if((i|0)==(X|0)){I=X+20|0;e=c[I>>2]|0;if(!e){t=X+16|0;g=c[t>>2]|0;if(!g){_=0;break;}else{$=g;aa=t;}}else{$=e;aa=I;}I=$;e=aa;while(1){t=I+20|0;g=c[t>>2]|0;if(!g){n=I+16|0;N=c[n>>2]|0;if(!N)break;else{ba=N;ca=n;}}else{ba=g;ca=t;}I=ba;e=ca;}c[e>>2]=0;_=I;}else{t=c[X+8>>2]|0;c[t+12>>2]=i;c[i+8>>2]=t;_=i;}}while(0);do{if(o){i=c[X+28>>2]|0;t=21976+(i<<2)|0;if((X|0)==(c[t>>2]|0)){c[t>>2]=_;if(!_){t=v&~(1<<i);c[5419]=t;da=t;break;}}else{t=o+16|0;c[((c[t>>2]|0)==(X|0)?t:o+20|0)>>2]=_;if(!_){da=v;break;}}c[_+24>>2]=o;t=c[X+16>>2]|0;if(t|0){c[_+16>>2]=t;c[t+24>>2]=_;}t=c[X+20>>2]|0;if(t){c[_+20>>2]=t;c[t+24>>2]=_;da=v;}else da=v;}else da=v;}while(0);b:do{if(Y>>>0<16){v=Y+f|0;c[X+4>>2]=v|3;o=X+v+4|0;c[o>>2]=c[o>>2]|1;}else{c[X+4>>2]=f|3;c[h+4>>2]=Y|1;c[h+Y>>2]=Y;o=Y>>>3;if(Y>>>0<256){v=21712+(o<<1<<2)|0;t=c[5418]|0;i=1<<o;if(!(t&i)){c[5418]=t|i;ea=v;fa=v+8|0;}else{i=v+8|0;ea=c[i>>2]|0;fa=i;}c[fa>>2]=h;c[ea+12>>2]=h;c[h+8>>2]=ea;c[h+12>>2]=v;break;}v=Y>>>8;if(v){if(Y>>>0>16777215)ga=31;else{i=(v+1048320|0)>>>16&8;t=v<<i;v=(t+520192|0)>>>16&4;o=t<<v;t=(o+245760|0)>>>16&2;g=14-(v|i|t)+(o<<t>>>15)|0;ga=Y>>>(g+7|0)&1|g<<1;}}else ga=0;g=21976+(ga<<2)|0;c[h+28>>2]=ga;t=h+16|0;c[t+4>>2]=0;c[t>>2]=0;t=1<<ga;if(!(da&t)){c[5419]=da|t;c[g>>2]=h;c[h+24>>2]=g;c[h+12>>2]=h;c[h+8>>2]=h;break;}t=c[g>>2]|0;c:do{if((c[t+4>>2]&-8|0)==(Y|0))ha=t;else{g=Y<<((ga|0)==31?0:25-(ga>>>1)|0);o=t;while(1){ia=o+16+(g>>>31<<2)|0;i=c[ia>>2]|0;if(!i)break;if((c[i+4>>2]&-8|0)==(Y|0)){ha=i;break c;}else{g=g<<1;o=i;}}c[ia>>2]=h;c[h+24>>2]=o;c[h+12>>2]=h;c[h+8>>2]=h;break b;}}while(0);t=ha+8|0;I=c[t>>2]|0;c[I+12>>2]=h;c[t>>2]=h;c[h+8>>2]=I;c[h+12>>2]=ha;c[h+24>>2]=0;}}while(0);p=X+8|0;l=b;return p|0;}else G=f;}else G=f;}else G=-1;}while(0);X=c[5420]|0;if(X>>>0>=G>>>0){ha=X-G|0;ia=c[5423]|0;if(ha>>>0>15){Y=ia+G|0;c[5423]=Y;c[5420]=ha;c[Y+4>>2]=ha|1;c[ia+X>>2]=ha;c[ia+4>>2]=G|3;}else{c[5420]=0;c[5423]=0;c[ia+4>>2]=X|3;ha=ia+X+4|0;c[ha>>2]=c[ha>>2]|1;}p=ia+8|0;l=b;return p|0;}ia=c[5421]|0;if(ia>>>0>G>>>0){ha=ia-G|0;c[5421]=ha;X=c[5424]|0;Y=X+G|0;c[5424]=Y;c[Y+4>>2]=ha|1;c[X+4>>2]=G|3;p=X+8|0;l=b;return p|0;}if(!(c[5536]|0)){c[5538]=4096;c[5537]=4096;c[5539]=-1;c[5540]=-1;c[5541]=0;c[5529]=0;c[5536]=d&-16^1431655768;ja=4096;}else ja=c[5538]|0;d=G+48|0;X=G+47|0;ha=ja+X|0;Y=0-ja|0;ja=ha&Y;if(ja>>>0<=G>>>0){p=0;l=b;return p|0;}ga=c[5528]|0;if(ga|0?(da=c[5526]|0,ea=da+ja|0,ea>>>0<=da>>>0|ea>>>0>ga>>>0):0){p=0;l=b;return p|0;}d:do{if(!(c[5529]&4)){ga=c[5424]|0;e:do{if(ga){ea=22120;while(1){da=c[ea>>2]|0;if(da>>>0<=ga>>>0?(da+(c[ea+4>>2]|0)|0)>>>0>ga>>>0:0)break;da=c[ea+8>>2]|0;if(!da){M=128;break e;}else ea=da;}da=ha-ia&Y;if(da>>>0<2147483647){fa=pE(da|0)|0;if((fa|0)==((c[ea>>2]|0)+(c[ea+4>>2]|0)|0)){if((fa|0)==(-1|0))ka=da;else{la=da;ma=fa;M=145;break d;}}else{na=fa;oa=da;M=136;}}else ka=0;}else M=128;}while(0);do{if((M|0)==128){ga=pE(0)|0;if((ga|0)!=(-1|0)?(f=ga,da=c[5537]|0,fa=da+-1|0,_=((fa&f|0)==0?0:(fa+f&0-da)-f|0)+ja|0,f=c[5526]|0,da=_+f|0,_>>>0>G>>>0&_>>>0<2147483647):0){fa=c[5528]|0;if(fa|0?da>>>0<=f>>>0|da>>>0>fa>>>0:0){ka=0;break;}fa=pE(_|0)|0;if((fa|0)==(ga|0)){la=_;ma=ga;M=145;break d;}else{na=fa;oa=_;M=136;}}else ka=0;}}while(0);do{if((M|0)==136){_=0-oa|0;if(!(d>>>0>oa>>>0&(oa>>>0<2147483647&(na|0)!=(-1|0))))if((na|0)==(-1|0)){ka=0;break;}else{la=oa;ma=na;M=145;break d;}fa=c[5538]|0;ga=X-oa+fa&0-fa;if(ga>>>0>=2147483647){la=oa;ma=na;M=145;break d;}if((pE(ga|0)|0)==(-1|0)){pE(_|0)|0;ka=0;break;}else{la=ga+oa|0;ma=na;M=145;break d;}}}while(0);c[5529]=c[5529]|4;pa=ka;M=143;}else{pa=0;M=143;}}while(0);if(((M|0)==143?ja>>>0<2147483647:0)?(ka=pE(ja|0)|0,ja=pE(0)|0,na=ja-ka|0,oa=na>>>0>(G+40|0)>>>0,!((ka|0)==(-1|0)|oa^1|ka>>>0<ja>>>0&((ka|0)!=(-1|0)&(ja|0)!=(-1|0))^1)):0){la=oa?na:pa;ma=ka;M=145;}if((M|0)==145){ka=(c[5526]|0)+la|0;c[5526]=ka;if(ka>>>0>(c[5527]|0)>>>0)c[5527]=ka;ka=c[5424]|0;f:do{if(ka){pa=22120;while(1){qa=c[pa>>2]|0;ra=c[pa+4>>2]|0;if((ma|0)==(qa+ra|0)){M=154;break;}na=c[pa+8>>2]|0;if(!na)break;else pa=na;}if(((M|0)==154?(na=pa+4|0,(c[pa+12>>2]&8|0)==0):0)?ma>>>0>ka>>>0&qa>>>0<=ka>>>0:0){c[na>>2]=ra+la;na=(c[5421]|0)+la|0;oa=ka+8|0;ja=(oa&7|0)==0?0:0-oa&7;oa=ka+ja|0;X=na-ja|0;c[5424]=oa;c[5421]=X;c[oa+4>>2]=X|1;c[ka+na+4>>2]=40;c[5425]=c[5540];break;}if(ma>>>0<(c[5422]|0)>>>0)c[5422]=ma;na=ma+la|0;X=22120;while(1){if((c[X>>2]|0)==(na|0)){M=162;break;}oa=c[X+8>>2]|0;if(!oa)break;else X=oa;}if((M|0)==162?(c[X+12>>2]&8|0)==0:0){c[X>>2]=ma;pa=X+4|0;c[pa>>2]=(c[pa>>2]|0)+la;pa=ma+8|0;oa=ma+((pa&7|0)==0?0:0-pa&7)|0;pa=na+8|0;ja=na+((pa&7|0)==0?0:0-pa&7)|0;pa=oa+G|0;d=ja-oa-G|0;c[oa+4>>2]=G|3;g:do{if((ka|0)==(ja|0)){Y=(c[5421]|0)+d|0;c[5421]=Y;c[5424]=pa;c[pa+4>>2]=Y|1;}else{if((c[5423]|0)==(ja|0)){Y=(c[5420]|0)+d|0;c[5420]=Y;c[5423]=pa;c[pa+4>>2]=Y|1;c[pa+Y>>2]=Y;break;}Y=c[ja+4>>2]|0;if((Y&3|0)==1){ia=Y&-8;ha=Y>>>3;h:do{if(Y>>>0<256){ga=c[ja+8>>2]|0;_=c[ja+12>>2]|0;if((_|0)==(ga|0)){c[5418]=c[5418]&~(1<<ha);break;}else{c[ga+12>>2]=_;c[_+8>>2]=ga;break;}}else{ga=c[ja+24>>2]|0;_=c[ja+12>>2]|0;do{if((_|0)==(ja|0)){fa=ja+16|0;da=fa+4|0;f=c[da>>2]|0;if(!f){ca=c[fa>>2]|0;if(!ca){sa=0;break;}else{ta=ca;ua=fa;}}else{ta=f;ua=da;}da=ta;f=ua;while(1){fa=da+20|0;ca=c[fa>>2]|0;if(!ca){ba=da+16|0;aa=c[ba>>2]|0;if(!aa)break;else{va=aa;wa=ba;}}else{va=ca;wa=fa;}da=va;f=wa;}c[f>>2]=0;sa=da;}else{fa=c[ja+8>>2]|0;c[fa+12>>2]=_;c[_+8>>2]=fa;sa=_;}}while(0);if(!ga)break;_=c[ja+28>>2]|0;o=21976+(_<<2)|0;do{if((c[o>>2]|0)!=(ja|0)){fa=ga+16|0;c[((c[fa>>2]|0)==(ja|0)?fa:ga+20|0)>>2]=sa;if(!sa)break h;}else{c[o>>2]=sa;if(sa|0)break;c[5419]=c[5419]&~(1<<_);break h;}}while(0);c[sa+24>>2]=ga;_=ja+16|0;o=c[_>>2]|0;if(o|0){c[sa+16>>2]=o;c[o+24>>2]=sa;}o=c[_+4>>2]|0;if(!o)break;c[sa+20>>2]=o;c[o+24>>2]=sa;}}while(0);xa=ja+ia|0;ya=ia+d|0;}else{xa=ja;ya=d;}ha=xa+4|0;c[ha>>2]=c[ha>>2]&-2;c[pa+4>>2]=ya|1;c[pa+ya>>2]=ya;ha=ya>>>3;if(ya>>>0<256){Y=21712+(ha<<1<<2)|0;ea=c[5418]|0;o=1<<ha;if(!(ea&o)){c[5418]=ea|o;za=Y;Aa=Y+8|0;}else{o=Y+8|0;za=c[o>>2]|0;Aa=o;}c[Aa>>2]=pa;c[za+12>>2]=pa;c[pa+8>>2]=za;c[pa+12>>2]=Y;break;}Y=ya>>>8;do{if(!Y)Ba=0;else{if(ya>>>0>16777215){Ba=31;break;}o=(Y+1048320|0)>>>16&8;ea=Y<<o;ha=(ea+520192|0)>>>16&4;_=ea<<ha;ea=(_+245760|0)>>>16&2;fa=14-(ha|o|ea)+(_<<ea>>>15)|0;Ba=ya>>>(fa+7|0)&1|fa<<1;}}while(0);Y=21976+(Ba<<2)|0;c[pa+28>>2]=Ba;ia=pa+16|0;c[ia+4>>2]=0;c[ia>>2]=0;ia=c[5419]|0;fa=1<<Ba;if(!(ia&fa)){c[5419]=ia|fa;c[Y>>2]=pa;c[pa+24>>2]=Y;c[pa+12>>2]=pa;c[pa+8>>2]=pa;break;}fa=c[Y>>2]|0;i:do{if((c[fa+4>>2]&-8|0)==(ya|0))Ca=fa;else{Y=ya<<((Ba|0)==31?0:25-(Ba>>>1)|0);ia=fa;while(1){Da=ia+16+(Y>>>31<<2)|0;ea=c[Da>>2]|0;if(!ea)break;if((c[ea+4>>2]&-8|0)==(ya|0)){Ca=ea;break i;}else{Y=Y<<1;ia=ea;}}c[Da>>2]=pa;c[pa+24>>2]=ia;c[pa+12>>2]=pa;c[pa+8>>2]=pa;break g;}}while(0);fa=Ca+8|0;Y=c[fa>>2]|0;c[Y+12>>2]=pa;c[fa>>2]=pa;c[pa+8>>2]=Y;c[pa+12>>2]=Ca;c[pa+24>>2]=0;}}while(0);p=oa+8|0;l=b;return p|0;}pa=22120;while(1){d=c[pa>>2]|0;if(d>>>0<=ka>>>0?(Ea=d+(c[pa+4>>2]|0)|0,Ea>>>0>ka>>>0):0)break;pa=c[pa+8>>2]|0;}pa=Ea+-47|0;oa=pa+8|0;d=pa+((oa&7|0)==0?0:0-oa&7)|0;oa=ka+16|0;pa=d>>>0<oa>>>0?ka:d;d=pa+8|0;ja=la+-40|0;na=ma+8|0;X=(na&7|0)==0?0:0-na&7;na=ma+X|0;Y=ja-X|0;c[5424]=na;c[5421]=Y;c[na+4>>2]=Y|1;c[ma+ja+4>>2]=40;c[5425]=c[5540];ja=pa+4|0;c[ja>>2]=27;c[d>>2]=c[5530];c[d+4>>2]=c[5531];c[d+8>>2]=c[5532];c[d+12>>2]=c[5533];c[5530]=ma;c[5531]=la;c[5533]=0;c[5532]=d;d=pa+24|0;do{Y=d;d=d+4|0;c[d>>2]=7;}while((Y+8|0)>>>0<Ea>>>0);if((pa|0)!=(ka|0)){d=pa-ka|0;c[ja>>2]=c[ja>>2]&-2;c[ka+4>>2]=d|1;c[pa>>2]=d;Y=d>>>3;if(d>>>0<256){na=21712+(Y<<1<<2)|0;X=c[5418]|0;fa=1<<Y;if(!(X&fa)){c[5418]=X|fa;Fa=na;Ga=na+8|0;}else{fa=na+8|0;Fa=c[fa>>2]|0;Ga=fa;}c[Ga>>2]=ka;c[Fa+12>>2]=ka;c[ka+8>>2]=Fa;c[ka+12>>2]=na;break;}na=d>>>8;if(na){if(d>>>0>16777215)Ha=31;else{fa=(na+1048320|0)>>>16&8;X=na<<fa;na=(X+520192|0)>>>16&4;Y=X<<na;X=(Y+245760|0)>>>16&2;ga=14-(na|fa|X)+(Y<<X>>>15)|0;Ha=d>>>(ga+7|0)&1|ga<<1;}}else Ha=0;ga=21976+(Ha<<2)|0;c[ka+28>>2]=Ha;c[ka+20>>2]=0;c[oa>>2]=0;X=c[5419]|0;Y=1<<Ha;if(!(X&Y)){c[5419]=X|Y;c[ga>>2]=ka;c[ka+24>>2]=ga;c[ka+12>>2]=ka;c[ka+8>>2]=ka;break;}Y=c[ga>>2]|0;j:do{if((c[Y+4>>2]&-8|0)==(d|0))Ia=Y;else{ga=d<<((Ha|0)==31?0:25-(Ha>>>1)|0);X=Y;while(1){Ja=X+16+(ga>>>31<<2)|0;fa=c[Ja>>2]|0;if(!fa)break;if((c[fa+4>>2]&-8|0)==(d|0)){Ia=fa;break j;}else{ga=ga<<1;X=fa;}}c[Ja>>2]=ka;c[ka+24>>2]=X;c[ka+12>>2]=ka;c[ka+8>>2]=ka;break f;}}while(0);d=Ia+8|0;Y=c[d>>2]|0;c[Y+12>>2]=ka;c[d>>2]=ka;c[ka+8>>2]=Y;c[ka+12>>2]=Ia;c[ka+24>>2]=0;}}else{Y=c[5422]|0;if((Y|0)==0|ma>>>0<Y>>>0)c[5422]=ma;c[5530]=ma;c[5531]=la;c[5533]=0;c[5427]=c[5536];c[5426]=-1;c[5431]=21712;c[5430]=21712;c[5433]=21720;c[5432]=21720;c[5435]=21728;c[5434]=21728;c[5437]=21736;c[5436]=21736;c[5439]=21744;c[5438]=21744;c[5441]=21752;c[5440]=21752;c[5443]=21760;c[5442]=21760;c[5445]=21768;c[5444]=21768;c[5447]=21776;c[5446]=21776;c[5449]=21784;c[5448]=21784;c[5451]=21792;c[5450]=21792;c[5453]=21800;c[5452]=21800;c[5455]=21808;c[5454]=21808;c[5457]=21816;c[5456]=21816;c[5459]=21824;c[5458]=21824;c[5461]=21832;c[5460]=21832;c[5463]=21840;c[5462]=21840;c[5465]=21848;c[5464]=21848;c[5467]=21856;c[5466]=21856;c[5469]=21864;c[5468]=21864;c[5471]=21872;c[5470]=21872;c[5473]=21880;c[5472]=21880;c[5475]=21888;c[5474]=21888;c[5477]=21896;c[5476]=21896;c[5479]=21904;c[5478]=21904;c[5481]=21912;c[5480]=21912;c[5483]=21920;c[5482]=21920;c[5485]=21928;c[5484]=21928;c[5487]=21936;c[5486]=21936;c[5489]=21944;c[5488]=21944;c[5491]=21952;c[5490]=21952;c[5493]=21960;c[5492]=21960;Y=la+-40|0;d=ma+8|0;oa=(d&7|0)==0?0:0-d&7;d=ma+oa|0;pa=Y-oa|0;c[5424]=d;c[5421]=pa;c[d+4>>2]=pa|1;c[ma+Y+4>>2]=40;c[5425]=c[5540];}}while(0);ma=c[5421]|0;if(ma>>>0>G>>>0){la=ma-G|0;c[5421]=la;ma=c[5424]|0;ka=ma+G|0;c[5424]=ka;c[ka+4>>2]=la|1;c[ma+4>>2]=G|3;p=ma+8|0;l=b;return p|0;}}c[(My()|0)>>2]=12;p=0;l=b;return p|0;}function Dy(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;if(!a)return;b=a+-8|0;d=c[5422]|0;e=c[a+-4>>2]|0;a=e&-8;f=b+a|0;do{if(!(e&1)){g=c[b>>2]|0;if(!(e&3))return;h=b+(0-g)|0;i=g+a|0;if(h>>>0<d>>>0)return;if((c[5423]|0)==(h|0)){j=f+4|0;k=c[j>>2]|0;if((k&3|0)!=3){l=h;m=i;n=h;break;}c[5420]=i;c[j>>2]=k&-2;c[h+4>>2]=i|1;c[h+i>>2]=i;return;}k=g>>>3;if(g>>>0<256){g=c[h+8>>2]|0;j=c[h+12>>2]|0;if((j|0)==(g|0)){c[5418]=c[5418]&~(1<<k);l=h;m=i;n=h;break;}else{c[g+12>>2]=j;c[j+8>>2]=g;l=h;m=i;n=h;break;}}g=c[h+24>>2]|0;j=c[h+12>>2]|0;do{if((j|0)==(h|0)){k=h+16|0;o=k+4|0;p=c[o>>2]|0;if(!p){q=c[k>>2]|0;if(!q){r=0;break;}else{s=q;t=k;}}else{s=p;t=o;}o=s;p=t;while(1){k=o+20|0;q=c[k>>2]|0;if(!q){u=o+16|0;v=c[u>>2]|0;if(!v)break;else{w=v;x=u;}}else{w=q;x=k;}o=w;p=x;}c[p>>2]=0;r=o;}else{k=c[h+8>>2]|0;c[k+12>>2]=j;c[j+8>>2]=k;r=j;}}while(0);if(g){j=c[h+28>>2]|0;k=21976+(j<<2)|0;if((c[k>>2]|0)==(h|0)){c[k>>2]=r;if(!r){c[5419]=c[5419]&~(1<<j);l=h;m=i;n=h;break;}}else{j=g+16|0;c[((c[j>>2]|0)==(h|0)?j:g+20|0)>>2]=r;if(!r){l=h;m=i;n=h;break;}}c[r+24>>2]=g;j=h+16|0;k=c[j>>2]|0;if(k|0){c[r+16>>2]=k;c[k+24>>2]=r;}k=c[j+4>>2]|0;if(k){c[r+20>>2]=k;c[k+24>>2]=r;l=h;m=i;n=h;}else{l=h;m=i;n=h;}}else{l=h;m=i;n=h;}}else{l=b;m=a;n=b;}}while(0);if(n>>>0>=f>>>0)return;b=f+4|0;a=c[b>>2]|0;if(!(a&1))return;if(!(a&2)){if((c[5424]|0)==(f|0)){r=(c[5421]|0)+m|0;c[5421]=r;c[5424]=l;c[l+4>>2]=r|1;if((l|0)!=(c[5423]|0))return;c[5423]=0;c[5420]=0;return;}if((c[5423]|0)==(f|0)){r=(c[5420]|0)+m|0;c[5420]=r;c[5423]=n;c[l+4>>2]=r|1;c[n+r>>2]=r;return;}r=(a&-8)+m|0;x=a>>>3;do{if(a>>>0<256){w=c[f+8>>2]|0;t=c[f+12>>2]|0;if((t|0)==(w|0)){c[5418]=c[5418]&~(1<<x);break;}else{c[w+12>>2]=t;c[t+8>>2]=w;break;}}else{w=c[f+24>>2]|0;t=c[f+12>>2]|0;do{if((t|0)==(f|0)){s=f+16|0;d=s+4|0;e=c[d>>2]|0;if(!e){k=c[s>>2]|0;if(!k){y=0;break;}else{z=k;A=s;}}else{z=e;A=d;}d=z;e=A;while(1){s=d+20|0;k=c[s>>2]|0;if(!k){j=d+16|0;q=c[j>>2]|0;if(!q)break;else{B=q;C=j;}}else{B=k;C=s;}d=B;e=C;}c[e>>2]=0;y=d;}else{o=c[f+8>>2]|0;c[o+12>>2]=t;c[t+8>>2]=o;y=t;}}while(0);if(w|0){t=c[f+28>>2]|0;h=21976+(t<<2)|0;if((c[h>>2]|0)==(f|0)){c[h>>2]=y;if(!y){c[5419]=c[5419]&~(1<<t);break;}}else{t=w+16|0;c[((c[t>>2]|0)==(f|0)?t:w+20|0)>>2]=y;if(!y)break;}c[y+24>>2]=w;t=f+16|0;h=c[t>>2]|0;if(h|0){c[y+16>>2]=h;c[h+24>>2]=y;}h=c[t+4>>2]|0;if(h|0){c[y+20>>2]=h;c[h+24>>2]=y;}}}}while(0);c[l+4>>2]=r|1;c[n+r>>2]=r;if((l|0)==(c[5423]|0)){c[5420]=r;return;}else D=r;}else{c[b>>2]=a&-2;c[l+4>>2]=m|1;c[n+m>>2]=m;D=m;}m=D>>>3;if(D>>>0<256){n=21712+(m<<1<<2)|0;a=c[5418]|0;b=1<<m;if(!(a&b)){c[5418]=a|b;E=n;F=n+8|0;}else{b=n+8|0;E=c[b>>2]|0;F=b;}c[F>>2]=l;c[E+12>>2]=l;c[l+8>>2]=E;c[l+12>>2]=n;return;}n=D>>>8;if(n){if(D>>>0>16777215)G=31;else{E=(n+1048320|0)>>>16&8;F=n<<E;n=(F+520192|0)>>>16&4;b=F<<n;F=(b+245760|0)>>>16&2;a=14-(n|E|F)+(b<<F>>>15)|0;G=D>>>(a+7|0)&1|a<<1;}}else G=0;a=21976+(G<<2)|0;c[l+28>>2]=G;c[l+20>>2]=0;c[l+16>>2]=0;F=c[5419]|0;b=1<<G;a:do{if(!(F&b)){c[5419]=F|b;c[a>>2]=l;c[l+24>>2]=a;c[l+12>>2]=l;c[l+8>>2]=l;}else{E=c[a>>2]|0;b:do{if((c[E+4>>2]&-8|0)==(D|0))H=E;else{n=D<<((G|0)==31?0:25-(G>>>1)|0);m=E;while(1){I=m+16+(n>>>31<<2)|0;r=c[I>>2]|0;if(!r)break;if((c[r+4>>2]&-8|0)==(D|0)){H=r;break b;}else{n=n<<1;m=r;}}c[I>>2]=l;c[l+24>>2]=m;c[l+12>>2]=l;c[l+8>>2]=l;break a;}}while(0);E=H+8|0;w=c[E>>2]|0;c[w+12>>2]=l;c[E>>2]=l;c[l+8>>2]=w;c[l+12>>2]=H;c[l+24>>2]=0;}}while(0);l=(c[5426]|0)+-1|0;c[5426]=l;if(l|0)return;l=22128;while(1){H=c[l>>2]|0;if(!H)break;else l=H+8|0;}c[5426]=-1;return;}function Ey(a,b){a=a|0;b=b|0;var d=0,e=0;if(a){d=N(b,a)|0;if((b|a)>>>0>65535)e=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1;else e=d;}else e=0;d=Cy(e)|0;if(!d)return d|0;if(!(c[d+-4>>2]&3))return d|0;oE(d|0,0,e|0)|0;return d|0;}function Fy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!a){d=Cy(b)|0;return d|0;}if(b>>>0>4294967231){c[(My()|0)>>2]=12;d=0;return d|0;}e=Gy(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(e|0){d=e+8|0;return d|0;}e=Cy(b)|0;if(!e){d=0;return d|0;}f=c[a+-4>>2]|0;g=(f&-8)-((f&3|0)==0?8:4)|0;mE(e|0,a|0,(g>>>0<b>>>0?g:b)|0)|0;Dy(a);d=e;return d|0;}function Gy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;d=a+4|0;e=c[d>>2]|0;f=e&-8;g=a+f|0;if(!(e&3)){if(b>>>0<256){h=0;return h|0;}if(f>>>0>=(b+4|0)>>>0?(f-b|0)>>>0<=c[5538]<<1>>>0:0){h=a;return h|0;}h=0;return h|0;}if(f>>>0>=b>>>0){i=f-b|0;if(i>>>0<=15){h=a;return h|0;}j=a+b|0;c[d>>2]=e&1|b|2;c[j+4>>2]=i|3;k=g+4|0;c[k>>2]=c[k>>2]|1;Hy(j,i);h=a;return h|0;}if((c[5424]|0)==(g|0)){i=(c[5421]|0)+f|0;j=i-b|0;k=a+b|0;if(i>>>0<=b>>>0){h=0;return h|0;}c[d>>2]=e&1|b|2;c[k+4>>2]=j|1;c[5424]=k;c[5421]=j;h=a;return h|0;}if((c[5423]|0)==(g|0)){j=(c[5420]|0)+f|0;if(j>>>0<b>>>0){h=0;return h|0;}k=j-b|0;if(k>>>0>15){i=a+b|0;l=a+j|0;c[d>>2]=e&1|b|2;c[i+4>>2]=k|1;c[l>>2]=k;m=l+4|0;c[m>>2]=c[m>>2]&-2;n=i;o=k;}else{c[d>>2]=e&1|j|2;k=a+j+4|0;c[k>>2]=c[k>>2]|1;n=0;o=0;}c[5420]=o;c[5423]=n;h=a;return h|0;}n=c[g+4>>2]|0;if(n&2|0){h=0;return h|0;}o=(n&-8)+f|0;if(o>>>0<b>>>0){h=0;return h|0;}f=o-b|0;k=n>>>3;do{if(n>>>0<256){j=c[g+8>>2]|0;i=c[g+12>>2]|0;if((i|0)==(j|0)){c[5418]=c[5418]&~(1<<k);break;}else{c[j+12>>2]=i;c[i+8>>2]=j;break;}}else{j=c[g+24>>2]|0;i=c[g+12>>2]|0;do{if((i|0)==(g|0)){m=g+16|0;l=m+4|0;p=c[l>>2]|0;if(!p){q=c[m>>2]|0;if(!q){r=0;break;}else{s=q;t=m;}}else{s=p;t=l;}l=s;p=t;while(1){m=l+20|0;q=c[m>>2]|0;if(!q){u=l+16|0;v=c[u>>2]|0;if(!v)break;else{w=v;x=u;}}else{w=q;x=m;}l=w;p=x;}c[p>>2]=0;r=l;}else{m=c[g+8>>2]|0;c[m+12>>2]=i;c[i+8>>2]=m;r=i;}}while(0);if(j|0){i=c[g+28>>2]|0;m=21976+(i<<2)|0;if((c[m>>2]|0)==(g|0)){c[m>>2]=r;if(!r){c[5419]=c[5419]&~(1<<i);break;}}else{i=j+16|0;c[((c[i>>2]|0)==(g|0)?i:j+20|0)>>2]=r;if(!r)break;}c[r+24>>2]=j;i=g+16|0;m=c[i>>2]|0;if(m|0){c[r+16>>2]=m;c[m+24>>2]=r;}m=c[i+4>>2]|0;if(m|0){c[r+20>>2]=m;c[m+24>>2]=r;}}}}while(0);if(f>>>0<16){c[d>>2]=e&1|o|2;r=a+o+4|0;c[r>>2]=c[r>>2]|1;h=a;return h|0;}else{r=a+b|0;c[d>>2]=e&1|b|2;c[r+4>>2]=f|3;b=a+o+4|0;c[b>>2]=c[b>>2]|1;Hy(r,f);h=a;return h|0;}return 0;}function Hy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;d=a+b|0;e=c[a+4>>2]|0;do{if(!(e&1)){f=c[a>>2]|0;if(!(e&3))return;g=a+(0-f)|0;h=f+b|0;if((c[5423]|0)==(g|0)){i=d+4|0;j=c[i>>2]|0;if((j&3|0)!=3){k=g;l=h;break;}c[5420]=h;c[i>>2]=j&-2;c[g+4>>2]=h|1;c[d>>2]=h;return;}j=f>>>3;if(f>>>0<256){f=c[g+8>>2]|0;i=c[g+12>>2]|0;if((i|0)==(f|0)){c[5418]=c[5418]&~(1<<j);k=g;l=h;break;}else{c[f+12>>2]=i;c[i+8>>2]=f;k=g;l=h;break;}}f=c[g+24>>2]|0;i=c[g+12>>2]|0;do{if((i|0)==(g|0)){j=g+16|0;m=j+4|0;n=c[m>>2]|0;if(!n){o=c[j>>2]|0;if(!o){p=0;break;}else{q=o;r=j;}}else{q=n;r=m;}m=q;n=r;while(1){j=m+20|0;o=c[j>>2]|0;if(!o){s=m+16|0;t=c[s>>2]|0;if(!t)break;else{u=t;v=s;}}else{u=o;v=j;}m=u;n=v;}c[n>>2]=0;p=m;}else{j=c[g+8>>2]|0;c[j+12>>2]=i;c[i+8>>2]=j;p=i;}}while(0);if(f){i=c[g+28>>2]|0;j=21976+(i<<2)|0;if((c[j>>2]|0)==(g|0)){c[j>>2]=p;if(!p){c[5419]=c[5419]&~(1<<i);k=g;l=h;break;}}else{i=f+16|0;c[((c[i>>2]|0)==(g|0)?i:f+20|0)>>2]=p;if(!p){k=g;l=h;break;}}c[p+24>>2]=f;i=g+16|0;j=c[i>>2]|0;if(j|0){c[p+16>>2]=j;c[j+24>>2]=p;}j=c[i+4>>2]|0;if(j){c[p+20>>2]=j;c[j+24>>2]=p;k=g;l=h;}else{k=g;l=h;}}else{k=g;l=h;}}else{k=a;l=b;}}while(0);b=d+4|0;a=c[b>>2]|0;if(!(a&2)){if((c[5424]|0)==(d|0)){p=(c[5421]|0)+l|0;c[5421]=p;c[5424]=k;c[k+4>>2]=p|1;if((k|0)!=(c[5423]|0))return;c[5423]=0;c[5420]=0;return;}if((c[5423]|0)==(d|0)){p=(c[5420]|0)+l|0;c[5420]=p;c[5423]=k;c[k+4>>2]=p|1;c[k+p>>2]=p;return;}p=(a&-8)+l|0;v=a>>>3;do{if(a>>>0<256){u=c[d+8>>2]|0;r=c[d+12>>2]|0;if((r|0)==(u|0)){c[5418]=c[5418]&~(1<<v);break;}else{c[u+12>>2]=r;c[r+8>>2]=u;break;}}else{u=c[d+24>>2]|0;r=c[d+12>>2]|0;do{if((r|0)==(d|0)){q=d+16|0;e=q+4|0;j=c[e>>2]|0;if(!j){i=c[q>>2]|0;if(!i){w=0;break;}else{x=i;y=q;}}else{x=j;y=e;}e=x;j=y;while(1){q=e+20|0;i=c[q>>2]|0;if(!i){o=e+16|0;s=c[o>>2]|0;if(!s)break;else{z=s;A=o;}}else{z=i;A=q;}e=z;j=A;}c[j>>2]=0;w=e;}else{m=c[d+8>>2]|0;c[m+12>>2]=r;c[r+8>>2]=m;w=r;}}while(0);if(u|0){r=c[d+28>>2]|0;h=21976+(r<<2)|0;if((c[h>>2]|0)==(d|0)){c[h>>2]=w;if(!w){c[5419]=c[5419]&~(1<<r);break;}}else{r=u+16|0;c[((c[r>>2]|0)==(d|0)?r:u+20|0)>>2]=w;if(!w)break;}c[w+24>>2]=u;r=d+16|0;h=c[r>>2]|0;if(h|0){c[w+16>>2]=h;c[h+24>>2]=w;}h=c[r+4>>2]|0;if(h|0){c[w+20>>2]=h;c[h+24>>2]=w;}}}}while(0);c[k+4>>2]=p|1;c[k+p>>2]=p;if((k|0)==(c[5423]|0)){c[5420]=p;return;}else B=p;}else{c[b>>2]=a&-2;c[k+4>>2]=l|1;c[k+l>>2]=l;B=l;}l=B>>>3;if(B>>>0<256){a=21712+(l<<1<<2)|0;b=c[5418]|0;p=1<<l;if(!(b&p)){c[5418]=b|p;C=a;D=a+8|0;}else{p=a+8|0;C=c[p>>2]|0;D=p;}c[D>>2]=k;c[C+12>>2]=k;c[k+8>>2]=C;c[k+12>>2]=a;return;}a=B>>>8;if(a){if(B>>>0>16777215)E=31;else{C=(a+1048320|0)>>>16&8;D=a<<C;a=(D+520192|0)>>>16&4;p=D<<a;D=(p+245760|0)>>>16&2;b=14-(a|C|D)+(p<<D>>>15)|0;E=B>>>(b+7|0)&1|b<<1;}}else E=0;b=21976+(E<<2)|0;c[k+28>>2]=E;c[k+20>>2]=0;c[k+16>>2]=0;D=c[5419]|0;p=1<<E;if(!(D&p)){c[5419]=D|p;c[b>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;return;}p=c[b>>2]|0;a:do{if((c[p+4>>2]&-8|0)==(B|0))F=p;else{b=B<<((E|0)==31?0:25-(E>>>1)|0);D=p;while(1){G=D+16+(b>>>31<<2)|0;C=c[G>>2]|0;if(!C)break;if((c[C+4>>2]&-8|0)==(B|0)){F=C;break a;}else{b=b<<1;D=C;}}c[G>>2]=k;c[k+24>>2]=D;c[k+12>>2]=k;c[k+8>>2]=k;return;}}while(0);G=F+8|0;B=c[G>>2]|0;c[B+12>>2]=k;c[G>>2]=k;c[k+8>>2]=B;c[k+12>>2]=F;c[k+24>>2]=0;return;}function Iy(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Oy(c[a+60>>2]|0)|0;a=Ly(Ja(6,d|0)|0)|0;l=b;return a|0;}function Jy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+32|0;g=f;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[g>>2]=c[b+60>>2],c[g+4>>2]=21523,c[g+8>>2]=f+16,Ia(54,g|0)|0):0)a[b+75>>0]=-1;g=Ny(b,d,e)|0;l=f;return g|0;}function Ky(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=l;l=l+32|0;f=e;g=e+20|0;c[f>>2]=c[a+60>>2];c[f+4>>2]=0;c[f+8>>2]=b;c[f+12>>2]=g;c[f+16>>2]=d;if((Ly(Da(140,f|0)|0)|0)<0){c[g>>2]=-1;h=-1;}else h=c[g>>2]|0;l=e;return h|0;}function Ly(a){a=a|0;var b=0;if(a>>>0>4294963200){c[(My()|0)>>2]=0-a;b=-1;}else b=a;return b|0;}function My(){return 22232;}function Ny(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=l;l=l+48|0;f=e+32|0;g=e+16|0;h=e;i=a+28|0;j=c[i>>2]|0;c[h>>2]=j;k=a+20|0;m=(c[k>>2]|0)-j|0;c[h+4>>2]=m;c[h+8>>2]=b;c[h+12>>2]=d;b=m+d|0;m=a+60|0;c[g>>2]=c[m>>2];c[g+4>>2]=h;c[g+8>>2]=2;j=Ly(Fa(146,g|0)|0)|0;a:do{if((b|0)!=(j|0)){g=2;n=b;o=h;p=j;while(1){if((p|0)<0)break;n=n-p|0;q=c[o+4>>2]|0;r=p>>>0>q>>>0;s=r?o+8|0:o;t=g+(r<<31>>31)|0;u=p-(r?q:0)|0;c[s>>2]=(c[s>>2]|0)+u;q=s+4|0;c[q>>2]=(c[q>>2]|0)-u;c[f>>2]=c[m>>2];c[f+4>>2]=s;c[f+8>>2]=t;p=Ly(Fa(146,f|0)|0)|0;if((n|0)==(p|0)){v=3;break a;}else{g=t;o=s;}}c[a+16>>2]=0;c[i>>2]=0;c[k>>2]=0;c[a>>2]=c[a>>2]|32;if((g|0)==2)w=0;else w=d-(c[o+4>>2]|0)|0;}else v=3;}while(0);if((v|0)==3){v=c[a+44>>2]|0;c[a+16>>2]=v+(c[a+48>>2]|0);a=v;c[i>>2]=a;c[k>>2]=a;w=d;}l=e;return w|0;}function Oy(a){a=a|0;return a|0;}function Py(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+32|0;g=f+16|0;h=f;c[h>>2]=d;i=h+4|0;j=b+48|0;k=c[j>>2]|0;c[i>>2]=e-((k|0)!=0&1);m=b+44|0;c[h+8>>2]=c[m>>2];c[h+12>>2]=k;c[g>>2]=c[b+60>>2];c[g+4>>2]=h;c[g+8>>2]=2;h=Ly(Ea(145,g|0)|0)|0;if((h|0)>=1){g=c[i>>2]|0;if(h>>>0>g>>>0){i=c[m>>2]|0;m=b+4|0;c[m>>2]=i;k=i;c[b+8>>2]=k+(h-g);if(!(c[j>>2]|0))n=e;else{c[m>>2]=k+1;a[d+(e+-1)>>0]=a[k>>0]|0;n=e;}}else n=h;}else{c[b>>2]=c[b>>2]|h&48^16;n=h;}l=f;return n|0;}function Qy(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;a:do{if(!d)e=0;else{f=b;g=d;h=c;while(1){i=a[f>>0]|0;j=a[h>>0]|0;if(i<<24>>24!=j<<24>>24)break;g=g+-1|0;if(!g){e=0;break a;}else{f=f+1|0;h=h+1|0;}}e=(i&255)-(j&255)|0;}}while(0);return e|0;}function Ry(b,c){b=b|0;c=c|0;var d=0;d=Xy(b,c)|0;return((a[d>>0]|0)==(c&255)<<24>>24?d:0)|0;}function Sy(a){a=a|0;return(a+-48|0)>>>0<10|0;}function Ty(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=b;a:do{if(!(d&3)){e=b;f=5;}else{g=b;h=d;while(1){if(!(a[g>>0]|0)){i=h;break a;}j=g+1|0;h=j;if(!(h&3)){e=j;f=5;break;}else g=j;}}}while(0);if((f|0)==5){f=e;while(1){k=c[f>>2]|0;if(!((k&-2139062144^-2139062144)&k+-16843009))f=f+4|0;else break;}if(!((k&255)<<24>>24))l=f;else{k=f;while(1){f=k+1|0;if(!(a[f>>0]|0)){l=f;break;}else k=f;}}i=l;}return i-d|0;}function Uy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;f=d&255;g=(e|0)!=0;a:do{if(g&(b&3|0)!=0){h=d&255;i=b;j=e;while(1){if((a[i>>0]|0)==h<<24>>24){k=i;l=j;m=6;break a;}n=i+1|0;o=j+-1|0;p=(o|0)!=0;if(p&(n&3|0)!=0){i=n;j=o;}else{q=n;r=o;s=p;m=5;break;}}}else{q=b;r=e;s=g;m=5;}}while(0);if((m|0)==5)if(s){k=q;l=r;m=6;}else m=16;b:do{if((m|0)==6){r=d&255;if((a[k>>0]|0)==r<<24>>24)if(!l){m=16;break;}else{t=k;break;}q=N(f,16843009)|0;c:do{if(l>>>0>3){s=k;g=l;while(1){e=c[s>>2]^q;if((e&-2139062144^-2139062144)&e+-16843009|0){u=g;v=s;break c;}e=s+4|0;b=g+-4|0;if(b>>>0>3){s=e;g=b;}else{w=e;x=b;m=11;break;}}}else{w=k;x=l;m=11;}}while(0);if((m|0)==11)if(!x){m=16;break;}else{u=x;v=w;}q=v;g=u;while(1){if((a[q>>0]|0)==r<<24>>24){t=q;break b;}g=g+-1|0;if(!g){m=16;break;}else q=q+1|0;}}}while(0);if((m|0)==16)t=0;return t|0;}function Vy(a){a=a|0;return 0;}function Wy(a){a=a|0;return;}function Xy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=d&255;a:do{if(!e)f=b+(Ty(b)|0)|0;else{if(!(b&3))g=b;else{h=d&255;i=b;while(1){j=a[i>>0]|0;if(j<<24>>24==0?1:j<<24>>24==h<<24>>24){f=i;break a;}j=i+1|0;if(!(j&3)){g=j;break;}else i=j;}}i=N(e,16843009)|0;h=c[g>>2]|0;b:do{if(!((h&-2139062144^-2139062144)&h+-16843009)){j=g;k=h;while(1){l=k^i;if((l&-2139062144^-2139062144)&l+-16843009|0){m=j;break b;}l=j+4|0;k=c[l>>2]|0;if((k&-2139062144^-2139062144)&k+-16843009|0){m=l;break;}else j=l;}}else m=g;}while(0);i=d&255;h=m;while(1){j=a[h>>0]|0;if(j<<24>>24==0?1:j<<24>>24==i<<24>>24){f=h;break;}else h=h+1|0;}}}while(0);return f|0;}function Yy(a,b){a=a|0;b=b|0;var d=0;if(!b)d=0;else d=Zy(c[b>>2]|0,c[b+4>>2]|0,a)|0;return((d|0)==0?a:d)|0;}function Zy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=(c[b>>2]|0)+1794895138|0;g=_y(c[b+8>>2]|0,f)|0;h=_y(c[b+12>>2]|0,f)|0;i=_y(c[b+16>>2]|0,f)|0;a:do{if((g>>>0<d>>>2>>>0?(j=d-(g<<2)|0,h>>>0<j>>>0&i>>>0<j>>>0):0)?((i|h)&3|0)==0:0){j=h>>>2;k=i>>>2;l=0;m=g;while(1){n=m>>>1;o=l+n|0;p=o<<1;q=p+j|0;r=_y(c[b+(q<<2)>>2]|0,f)|0;s=_y(c[b+(q+1<<2)>>2]|0,f)|0;if(!(s>>>0<d>>>0&r>>>0<(d-s|0)>>>0)){t=0;break a;}if(a[b+(s+r)>>0]|0){t=0;break a;}r=$y(e,b+s|0)|0;if(!r)break;s=(r|0)<0;if((m|0)==1){t=0;break a;}l=s?l:o;m=s?n:m-n|0;}m=p+k|0;l=_y(c[b+(m<<2)>>2]|0,f)|0;j=_y(c[b+(m+1<<2)>>2]|0,f)|0;if(j>>>0<d>>>0&l>>>0<(d-j|0)>>>0)t=(a[b+(j+l)>>0]|0)==0?b+j|0:0;else t=0;}else t=0;}while(0);return t|0;}function _y(a,b){a=a|0;b=b|0;var c=0;c=kE(a|0)|0;return((b|0)==0?a:c)|0;}function $y(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=a[b>>0]|0;e=a[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24){f=e;g=d;}else{d=c;c=b;do{c=c+1|0;d=d+1|0;b=a[c>>0]|0;e=a[d>>0]|0;}while(!(b<<24>>24==0?1:b<<24>>24!=e<<24>>24));f=e;g=b;}return(g&255)-(f&255)|0;}function az(){return 12260;}function bz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+16|0;g=f;c[g>>2]=e;e=cz(a,b,d,g)|0;l=f;return e|0;}function cz(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;g=l;l=l+128|0;h=g+124|0;i=g;j=i;k=12504;m=j+124|0;do{c[j>>2]=c[k>>2];j=j+4|0;k=k+4|0;}while((j|0)<(m|0));if((d+-1|0)>>>0>2147483646){if(!d){n=h;o=1;p=4;}else{c[(My()|0)>>2]=75;q=-1;}}else{n=b;o=d;p=4;}if((p|0)==4){p=-2-n|0;d=o>>>0>p>>>0?p:o;c[i+48>>2]=d;o=i+20|0;c[o>>2]=n;c[i+44>>2]=n;p=n+d|0;n=i+16|0;c[n>>2]=p;c[i+28>>2]=p;p=dz(i,e,f)|0;if(!d)q=p;else{d=c[o>>2]|0;a[d+(((d|0)==(c[n>>2]|0))<<31>>31)>>0]=0;q=p;}}l=g;return q|0;}function dz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+224|0;g=f+208|0;h=f+160|0;i=f+80|0;j=f;k=h;m=k+40|0;do{c[k>>2]=0;k=k+4|0;}while((k|0)<(m|0));c[g>>2]=c[e>>2];if((ez(0,d,g,i,h)|0)<0)n=-1;else{if((c[b+76>>2]|0)>-1)o=Vy(b)|0;else o=0;e=c[b>>2]|0;k=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;e=b+48|0;if(!(c[e>>2]|0)){m=b+44|0;p=c[m>>2]|0;c[m>>2]=j;q=b+28|0;c[q>>2]=j;r=b+20|0;c[r>>2]=j;c[e>>2]=80;s=b+16|0;c[s>>2]=j+80;j=ez(b,d,g,i,h)|0;if(!p)t=j;else{rc[c[b+36>>2]&31](b,0,0)|0;u=(c[r>>2]|0)==0?-1:j;c[m>>2]=p;c[e>>2]=0;c[s>>2]=0;c[q>>2]=0;c[r>>2]=0;t=u;}}else t=ez(b,d,g,i,h)|0;h=c[b>>2]|0;c[b>>2]=h|k;if(o|0)Wy(b);n=(h&32|0)==0?t:-1;}l=f;return n|0;}function ez(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0;j=l;l=l+64|0;k=j+56|0;m=j+40|0;n=j;o=j+48|0;p=j+60|0;c[k>>2]=e;e=(d|0)!=0;q=n+40|0;r=q;s=n+39|0;n=o+4|0;t=0;u=0;v=0;a:while(1){w=t;x=u;while(1){do{if((x|0)>-1){if((w|0)>(2147483647-x|0)){c[(My()|0)>>2]=75;z=-1;break;}else{z=w+x|0;break;}}else z=x;}while(0);A=c[k>>2]|0;B=a[A>>0]|0;if(!(B<<24>>24)){C=94;break a;}D=B;B=A;b:while(1){switch(D<<24>>24){case 37:{C=10;break b;break;}case 0:{E=B;break b;break;}default:{}}F=B+1|0;c[k>>2]=F;D=a[F>>0]|0;B=F;}c:do{if((C|0)==10){C=0;D=B;F=B;while(1){if((a[F+1>>0]|0)!=37){E=D;break c;}G=D+1|0;F=F+2|0;c[k>>2]=F;if((a[F>>0]|0)!=37){E=G;break;}else D=G;}}}while(0);w=E-A|0;if(e)fz(d,A,w);if(!w)break;else x=z;}x=(Sy(a[(c[k>>2]|0)+1>>0]|0)|0)==0;w=c[k>>2]|0;if(!x?(a[w+2>>0]|0)==36:0){H=(a[w+1>>0]|0)+-48|0;I=1;J=3;}else{H=-1;I=v;J=1;}x=w+J|0;c[k>>2]=x;w=a[x>>0]|0;B=(w<<24>>24)+-32|0;if(B>>>0>31|(1<<B&75913|0)==0){K=0;L=w;M=x;}else{w=0;D=B;B=x;while(1){x=1<<D|w;F=B+1|0;c[k>>2]=F;G=a[F>>0]|0;D=(G<<24>>24)+-32|0;if(D>>>0>31|(1<<D&75913|0)==0){K=x;L=G;M=F;break;}else{w=x;B=F;}}}if(L<<24>>24==42){if((Sy(a[M+1>>0]|0)|0)!=0?(B=c[k>>2]|0,(a[B+2>>0]|0)==36):0){w=B+1|0;c[i+((a[w>>0]|0)+-48<<2)>>2]=10;N=c[g+((a[w>>0]|0)+-48<<3)>>2]|0;O=1;P=B+3|0;}else{if(I|0){Q=-1;break;}if(e){B=(c[f>>2]|0)+(4-1)&~(4-1);w=c[B>>2]|0;c[f>>2]=B+4;R=w;}else R=0;N=R;O=0;P=(c[k>>2]|0)+1|0;}c[k>>2]=P;w=(N|0)<0;S=w?0-N|0:N;T=w?K|8192:K;U=O;V=P;}else{w=gz(k)|0;if((w|0)<0){Q=-1;break;}S=w;T=K;U=I;V=c[k>>2]|0;}do{if((a[V>>0]|0)==46){w=V+1|0;if((a[w>>0]|0)!=42){c[k>>2]=w;w=gz(k)|0;W=w;X=c[k>>2]|0;break;}if(Sy(a[V+2>>0]|0)|0?(w=c[k>>2]|0,(a[w+3>>0]|0)==36):0){B=w+2|0;c[i+((a[B>>0]|0)+-48<<2)>>2]=10;D=c[g+((a[B>>0]|0)+-48<<3)>>2]|0;B=w+4|0;c[k>>2]=B;W=D;X=B;break;}if(U|0){Q=-1;break a;}if(e){B=(c[f>>2]|0)+(4-1)&~(4-1);D=c[B>>2]|0;c[f>>2]=B+4;Y=D;}else Y=0;D=(c[k>>2]|0)+2|0;c[k>>2]=D;W=Y;X=D;}else{W=-1;X=V;}}while(0);D=0;B=X;while(1){if(((a[B>>0]|0)+-65|0)>>>0>57){Q=-1;break a;}w=B;B=B+1|0;c[k>>2]=B;Z=a[(a[w>>0]|0)+-65+(7456+(D*58|0))>>0]|0;_=Z&255;if((_+-1|0)>>>0>=8)break;else D=_;}if(!(Z<<24>>24)){Q=-1;break;}w=(H|0)>-1;do{if(Z<<24>>24==19){if(w){Q=-1;break a;}else C=54;}else{if(w){c[i+(H<<2)>>2]=_;F=g+(H<<3)|0;x=c[F+4>>2]|0;G=m;c[G>>2]=c[F>>2];c[G+4>>2]=x;C=54;break;}if(!e){Q=0;break a;}hz(m,_,f);$=c[k>>2]|0;C=55;}}while(0);if((C|0)==54){C=0;if(e){$=B;C=55;}else aa=0;}d:do{if((C|0)==55){C=0;w=a[$+-1>>0]|0;x=(D|0)!=0&(w&15|0)==3?w&-33:w;w=T&-65537;G=(T&8192|0)==0?T:w;e:do{switch(x|0){case 110:{switch((D&255)<<24>>24){case 0:{c[c[m>>2]>>2]=z;aa=0;break d;break;}case 1:{c[c[m>>2]>>2]=z;aa=0;break d;break;}case 2:{F=c[m>>2]|0;c[F>>2]=z;c[F+4>>2]=((z|0)<0)<<31>>31;aa=0;break d;break;}case 3:{b[c[m>>2]>>1]=z;aa=0;break d;break;}case 4:{a[c[m>>2]>>0]=z;aa=0;break d;break;}case 6:{c[c[m>>2]>>2]=z;aa=0;break d;break;}case 7:{F=c[m>>2]|0;c[F>>2]=z;c[F+4>>2]=((z|0)<0)<<31>>31;aa=0;break d;break;}default:{aa=0;break d;}}break;}case 112:{ba=120;ca=W>>>0>8?W:8;da=G|8;C=67;break;}case 88:case 120:{ba=x;ca=W;da=G;C=67;break;}case 111:{F=m;ea=c[F>>2]|0;fa=c[F+4>>2]|0;F=jz(ea,fa,q)|0;ga=r-F|0;ha=F;ia=0;ja=17834;ka=(G&8|0)==0|(W|0)>(ga|0)?W:ga+1|0;la=G;ma=ea;na=fa;C=73;break;}case 105:case 100:{fa=m;ea=c[fa>>2]|0;ga=c[fa+4>>2]|0;if((ga|0)<0){fa=eE(0,0,ea|0,ga|0)|0;F=y;oa=m;c[oa>>2]=fa;c[oa+4>>2]=F;pa=1;qa=17834;ra=fa;sa=F;C=72;break e;}else{pa=(G&2049|0)!=0&1;qa=(G&2048|0)==0?(G&1|0)==0?17834:17836:17835;ra=ea;sa=ga;C=72;break e;}break;}case 117:{ga=m;pa=0;qa=17834;ra=c[ga>>2]|0;sa=c[ga+4>>2]|0;C=72;break;}case 99:{a[s>>0]=c[m>>2];ta=s;ua=0;va=17834;wa=1;xa=w;ya=r;break;}case 109:{za=lz(c[(My()|0)>>2]|0)|0;C=77;break;}case 115:{ga=c[m>>2]|0;za=(ga|0)==0?17844:ga;C=77;break;}case 67:{c[o>>2]=c[m>>2];c[n>>2]=0;c[m>>2]=o;Aa=-1;C=81;break;}case 83:{if(!W){mz(d,32,S,0,G);Ba=0;C=91;}else{Aa=W;C=81;}break;}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{aa=oz(d,+h[m>>3],S,W,G,x)|0;break d;break;}default:{ta=A;ua=0;va=17834;wa=W;xa=G;ya=r;}}}while(0);f:do{if((C|0)==67){C=0;x=m;ga=c[x>>2]|0;ea=c[x+4>>2]|0;x=iz(ga,ea,q,ba&32)|0;F=(da&8|0)==0|(ga|0)==0&(ea|0)==0;ha=x;ia=F?0:2;ja=F?17834:17834+(ba>>>4)|0;ka=ca;la=da;ma=ga;na=ea;C=73;}else if((C|0)==72){C=0;ha=kz(ra,sa,q)|0;ia=pa;ja=qa;ka=W;la=G;ma=ra;na=sa;C=73;}else if((C|0)==77){C=0;ea=Uy(za,0,W)|0;ga=(ea|0)==0;ta=za;ua=0;va=17834;wa=ga?W:ea-za|0;xa=w;ya=ga?za+W|0:ea;}else if((C|0)==81){C=0;ea=c[m>>2]|0;ga=0;while(1){F=c[ea>>2]|0;if(!F){Ca=ga;break;}x=nz(p,F)|0;Da=(x|0)<0;if(Da|x>>>0>(Aa-ga|0)>>>0){C=85;break;}F=x+ga|0;if(Aa>>>0>F>>>0){ea=ea+4|0;ga=F;}else{Ca=F;break;}}if((C|0)==85){C=0;if(Da){Q=-1;break a;}else Ca=ga;}mz(d,32,S,Ca,G);if(!Ca){Ba=0;C=91;}else{ea=c[m>>2]|0;F=0;while(1){x=c[ea>>2]|0;if(!x){Ba=Ca;C=91;break f;}fa=nz(p,x)|0;F=fa+F|0;if((F|0)>(Ca|0)){Ba=Ca;C=91;break f;}fz(d,p,fa);if(F>>>0>=Ca>>>0){Ba=Ca;C=91;break;}else ea=ea+4|0;}}}}while(0);if((C|0)==73){C=0;w=(ma|0)!=0|(na|0)!=0;ea=(ka|0)!=0|w;F=r-ha+((w^1)&1)|0;ta=ea?ha:q;ua=ia;va=ja;wa=ea?(ka|0)>(F|0)?ka:F:0;xa=(ka|0)>-1?la&-65537:la;ya=r;}else if((C|0)==91){C=0;mz(d,32,S,Ba,G^8192);aa=(S|0)>(Ba|0)?S:Ba;break;}F=ya-ta|0;ea=(wa|0)<(F|0)?F:wa;w=ea+ua|0;ga=(S|0)<(w|0)?w:S;mz(d,32,ga,w,xa);fz(d,va,ua);mz(d,48,ga,w,xa^65536);mz(d,48,ea,F,0);fz(d,ta,F);mz(d,32,ga,w,xa^8192);aa=ga;}}while(0);t=aa;u=z;v=U;}g:do{if((C|0)==94)if(!d){if(!v)Q=0;else{U=1;while(1){u=c[i+(U<<2)>>2]|0;if(!u)break;hz(g+(U<<3)|0,u,f);u=U+1|0;if(u>>>0<10)U=u;else{Q=1;break g;}}u=U;while(1){if(c[i+(u<<2)>>2]|0){Q=-1;break g;}u=u+1|0;if(u>>>0>=10){Q=1;break;}}}}else Q=z;}while(0);l=j;return Q|0;}function fz(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))xz(b,d,a)|0;return;}function gz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;if(!(Sy(a[c[b>>2]>>0]|0)|0))d=0;else{e=0;while(1){f=c[b>>2]|0;g=(e*10|0)+-48+(a[f>>0]|0)|0;h=f+1|0;c[b>>2]=h;if(!(Sy(a[h>>0]|0)|0)){d=g;break;}else e=g;}}return d|0;}function hz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0;a:do{if(b>>>0<=20)do{switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=f;break a;break;}case 10:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a;break;}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=f;c[e+4>>2]=0;break a;break;}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);f=e;g=c[f>>2]|0;i=c[f+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=g;c[e+4>>2]=i;break a;break;}case 13:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=(e&65535)<<16>>16;e=a;c[e>>2]=i;c[e+4>>2]=((i|0)<0)<<31>>31;break a;break;}case 14:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=a;c[i>>2]=e&65535;c[i+4>>2]=0;break a;break;}case 15:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=(e&255)<<24>>24;e=a;c[e>>2]=i;c[e+4>>2]=((i|0)<0)<<31>>31;break a;break;}case 16:{i=(c[d>>2]|0)+(4-1)&~(4-1);e=c[i>>2]|0;c[d>>2]=i+4;i=a;c[i>>2]=e&255;c[i+4>>2]=0;break a;break;}case 17:{i=(c[d>>2]|0)+(8-1)&~(8-1);j=+h[i>>3];c[d>>2]=i+8;h[a>>3]=j;break a;break;}case 18:{i=(c[d>>2]|0)+(8-1)&~(8-1);j=+h[i>>3];c[d>>2]=i+8;h[a>>3]=j;break a;break;}default:break a;}}while(0);}while(0);return;}function iz(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0;if((b|0)==0&(c|0)==0)g=e;else{h=e;e=c;c=b;while(1){b=h+-1|0;a[b>>0]=d[7920+(c&15)>>0]|0|f;c=iE(c|0,e|0,4)|0;e=y;if((c|0)==0&(e|0)==0){g=b;break;}else h=b;}}return g|0;}function jz(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;if((b|0)==0&(c|0)==0)e=d;else{f=d;d=c;c=b;while(1){b=f+-1|0;a[b>>0]=c&7|48;c=iE(c|0,d|0,3)|0;d=y;if((c|0)==0&(d|0)==0){e=b;break;}else f=b;}}return e|0;}function kz(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295){e=d;f=b;g=c;do{c=f;f=hE(f|0,g|0,10,0)|0;h=g;g=y;i=cE(f|0,g|0,10,0)|0;j=eE(c|0,h|0,i|0,y|0)|0;e=e+-1|0;a[e>>0]=j&255|48;}while(h>>>0>9|(h|0)==9&c>>>0>4294967295);k=f;l=e;}else{k=b;l=d;}if(!k)m=l;else{d=k;k=l;while(1){l=d;d=(d>>>0)/10|0;b=k+-1|0;a[b>>0]=l-(d*10|0)|48;if(l>>>0<10){m=b;break;}else k=b;}}return m|0;}function lz(a){a=a|0;return vz(a,c[(uz()|0)+188>>2]|0)|0;}function mz(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=l;l=l+256|0;g=f;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;oE(g|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;d=e;do{fz(a,g,256);d=d+-256|0;}while(d>>>0>255);h=b&255;}else h=e;fz(a,g,h);}l=f;return;}function nz(a,b){a=a|0;b=b|0;var c=0;if(!a)c=0;else c=sz(a,b,0)|0;return c|0;}function oz(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,O=0,P=0,Q=0,R=0.0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0.0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;j=l;l=l+560|0;k=j+32|0;m=j+536|0;n=j;o=n;p=j+540|0;c[m>>2]=0;q=p+12|0;r=pz(e)|0;s=y;if((s|0)<0){t=-e;u=pz(t)|0;v=t;w=1;x=17851;z=y;A=u;}else{v=e;w=(h&2049|0)!=0&1;x=(h&2048|0)==0?(h&1|0)==0?17852:17857:17854;z=s;A=r;}do{if(0==0&(z&2146435072|0)==2146435072){r=(i&32|0)!=0;A=w+3|0;mz(b,32,f,A,h&-65537);fz(b,x,w);fz(b,v!=v|0.0!=0.0?r?17878:17882:r?17870:17874,3);mz(b,32,f,A,h^8192);B=A;}else{e=+qz(v,m)*2.0;A=e!=0.0;if(A)c[m>>2]=(c[m>>2]|0)+-1;r=i|32;if((r|0)==97){s=i&32;u=(s|0)==0?x:x+9|0;C=w|2;D=12-g|0;do{if(!(g>>>0>11|(D|0)==0)){t=8.0;E=D;do{E=E+-1|0;t=t*16.0;}while((E|0)!=0);if((a[u>>0]|0)==45){F=-(t+(-e-t));break;}else{F=e+t-t;break;}}else F=e;}while(0);D=c[m>>2]|0;E=(D|0)<0?0-D|0:D;G=kz(E,((E|0)<0)<<31>>31,q)|0;if((G|0)==(q|0)){E=p+11|0;a[E>>0]=48;H=E;}else H=G;a[H+-1>>0]=(D>>31&2)+43;D=H+-2|0;a[D>>0]=i+15;G=(g|0)<1;E=(h&8|0)==0;I=n;J=F;while(1){K=~~J;L=I+1|0;a[I>>0]=s|d[7920+K>>0];J=(J-+(K|0))*16.0;if((L-o|0)==1?!(E&(G&J==0.0)):0){a[L>>0]=46;M=I+2|0;}else M=L;if(!(J!=0.0))break;else I=M;}I=M;if((g|0)!=0?(-2-o+I|0)<(g|0):0){G=q;E=D;O=g+2+G-E|0;P=G;Q=E;}else{E=q;G=D;O=E-o-G+I|0;P=E;Q=G;}G=O+C|0;mz(b,32,f,G,h);fz(b,u,C);mz(b,48,f,G,h^65536);E=I-o|0;fz(b,n,E);I=P-Q|0;mz(b,48,O-(E+I)|0,0,0);fz(b,D,I);mz(b,32,f,G,h^8192);B=G;break;}G=(g|0)<0?6:g;if(A){I=(c[m>>2]|0)+-28|0;c[m>>2]=I;R=e*268435456.0;S=I;}else{R=e;S=c[m>>2]|0;}I=(S|0)<0?k:k+288|0;E=I;J=R;do{s=~~J>>>0;c[E>>2]=s;E=E+4|0;J=(J-+(s>>>0))*1.0e9;}while(J!=0.0);A=I;if((S|0)>0){D=I;C=E;u=S;while(1){s=(u|0)<29?u:29;L=C+-4|0;if(L>>>0>=D>>>0){K=L;L=0;do{T=jE(c[K>>2]|0,0,s|0)|0;U=dE(T|0,y|0,L|0,0)|0;T=y;L=hE(U|0,T|0,1e9,0)|0;V=cE(L|0,y|0,1e9,0)|0;W=eE(U|0,T|0,V|0,y|0)|0;c[K>>2]=W;K=K+-4|0;}while(K>>>0>=D>>>0);if(L){K=D+-4|0;c[K>>2]=L;X=K;}else X=D;}else X=D;a:do{if(C>>>0>X>>>0){K=C;while(1){W=K+-4|0;if(c[W>>2]|0){Y=K;break a;}if(W>>>0>X>>>0)K=W;else{Y=W;break;}}}else Y=C;}while(0);L=(c[m>>2]|0)-s|0;c[m>>2]=L;if((L|0)>0){D=X;C=Y;u=L;}else{Z=X;_=Y;$=L;break;}}}else{Z=I;_=E;$=S;}if(($|0)<0){u=((G+25|0)/9|0)+1|0;C=(r|0)==102;D=Z;L=_;K=$;while(1){W=0-K|0;V=(W|0)<9?W:9;if(D>>>0<L>>>0){W=(1<<V)+-1|0;T=1e9>>>V;U=0;aa=D;do{ba=c[aa>>2]|0;c[aa>>2]=(ba>>>V)+U;U=N(ba&W,T)|0;aa=aa+4|0;}while(aa>>>0<L>>>0);aa=(c[D>>2]|0)==0?D+4|0:D;if(!U){ca=L;da=aa;}else{c[L>>2]=U;ca=L+4|0;da=aa;}}else{ca=L;da=(c[D>>2]|0)==0?D+4|0:D;}aa=C?I:da;T=(ca-aa>>2|0)>(u|0)?aa+(u<<2)|0:ca;K=(c[m>>2]|0)+V|0;c[m>>2]=K;if((K|0)>=0){ea=da;fa=T;break;}else{D=da;L=T;}}}else{ea=Z;fa=_;}if(ea>>>0<fa>>>0){L=(A-ea>>2)*9|0;D=c[ea>>2]|0;if(D>>>0<10)ga=L;else{K=L;L=10;while(1){L=L*10|0;u=K+1|0;if(D>>>0<L>>>0){ga=u;break;}else K=u;}}}else ga=0;K=(r|0)==103;L=(G|0)!=0;D=G-((r|0)==102?0:ga)+((L&K)<<31>>31)|0;if((D|0)<(((fa-A>>2)*9|0)+-9|0)){u=D+9216|0;D=(u|0)/9|0;C=I+4+(D+-1024<<2)|0;E=u-(D*9|0)|0;if((E|0)<8){D=E;E=10;while(1){u=E*10|0;if((D|0)<7){D=D+1|0;E=u;}else{ha=u;break;}}}else ha=10;E=c[C>>2]|0;D=(E>>>0)/(ha>>>0)|0;r=E-(N(D,ha)|0)|0;u=(C+4|0)==(fa|0);if(!(u&(r|0)==0)){t=(D&1|0)==0?9007199254740992.0:9007199254740994.0;D=ha>>>1;J=r>>>0<D>>>0?.5:u&(r|0)==(D|0)?1.0:1.5;if(!w){ia=J;ja=t;}else{D=(a[x>>0]|0)==45;ia=D?-J:J;ja=D?-t:t;}D=E-r|0;c[C>>2]=D;if(ja+ia!=ja){r=D+ha|0;c[C>>2]=r;if(r>>>0>999999999){r=C;D=ea;while(1){E=r+-4|0;c[r>>2]=0;if(E>>>0<D>>>0){u=D+-4|0;c[u>>2]=0;ka=u;}else ka=D;u=(c[E>>2]|0)+1|0;c[E>>2]=u;if(u>>>0>999999999){r=E;D=ka;}else{la=E;ma=ka;break;}}}else{la=C;ma=ea;}D=(A-ma>>2)*9|0;r=c[ma>>2]|0;if(r>>>0<10){na=la;oa=D;pa=ma;}else{E=D;D=10;while(1){D=D*10|0;u=E+1|0;if(r>>>0<D>>>0){na=la;oa=u;pa=ma;break;}else E=u;}}}else{na=C;oa=ga;pa=ea;}}else{na=C;oa=ga;pa=ea;}E=na+4|0;qa=oa;ra=fa>>>0>E>>>0?E:fa;sa=pa;}else{qa=ga;ra=fa;sa=ea;}E=0-qa|0;b:do{if(ra>>>0>sa>>>0){D=ra;while(1){r=D+-4|0;if(c[r>>2]|0){ta=D;ua=1;break b;}if(r>>>0>sa>>>0)D=r;else{ta=r;ua=0;break;}}}else{ta=ra;ua=0;}}while(0);do{if(K){C=G+((L^1)&1)|0;if((C|0)>(qa|0)&(qa|0)>-5){va=i+-1|0;wa=C+-1-qa|0;}else{va=i+-2|0;wa=C+-1|0;}if(!(h&8)){if(ua?(C=c[ta+-4>>2]|0,(C|0)!=0):0){if(!((C>>>0)%10|0)){D=0;V=10;while(1){V=V*10|0;U=D+1|0;if((C>>>0)%(V>>>0)|0|0){xa=U;break;}else D=U;}}else xa=0;}else xa=9;D=((ta-A>>2)*9|0)+-9|0;if((va|32|0)==102){V=D-xa|0;C=(V|0)>0?V:0;ya=va;za=(wa|0)<(C|0)?wa:C;break;}else{C=D+qa-xa|0;D=(C|0)>0?C:0;ya=va;za=(wa|0)<(D|0)?wa:D;break;}}else{ya=va;za=wa;}}else{ya=i;za=G;}}while(0);G=(za|0)!=0;A=G?1:h>>>3&1;L=(ya|32|0)==102;if(L){Aa=0;Ba=(qa|0)>0?qa:0;}else{K=(qa|0)<0?E:qa;D=kz(K,((K|0)<0)<<31>>31,q)|0;K=q;if((K-D|0)<2){C=D;while(1){V=C+-1|0;a[V>>0]=48;if((K-V|0)<2)C=V;else{Ca=V;break;}}}else Ca=D;a[Ca+-1>>0]=(qa>>31&2)+43;C=Ca+-2|0;a[C>>0]=ya;Aa=C;Ba=K-C|0;}C=w+1+za+A+Ba|0;mz(b,32,f,C,h);fz(b,x,w);mz(b,48,f,C,h^65536);if(L){E=sa>>>0>I>>>0?I:sa;V=n+9|0;U=V;r=n+8|0;u=E;do{T=kz(c[u>>2]|0,0,V)|0;if((u|0)==(E|0)){if((T|0)==(V|0)){a[r>>0]=48;Da=r;}else Da=T;}else if(T>>>0>n>>>0){oE(n|0,48,T-o|0)|0;aa=T;while(1){W=aa+-1|0;if(W>>>0>n>>>0)aa=W;else{Da=W;break;}}}else Da=T;fz(b,Da,U-Da|0);u=u+4|0;}while(u>>>0<=I>>>0);if(!((h&8|0)==0&(G^1)))fz(b,18964,1);if(u>>>0<ta>>>0&(za|0)>0){I=za;U=u;while(1){r=kz(c[U>>2]|0,0,V)|0;if(r>>>0>n>>>0){oE(n|0,48,r-o|0)|0;E=r;while(1){L=E+-1|0;if(L>>>0>n>>>0)E=L;else{Ea=L;break;}}}else Ea=r;fz(b,Ea,(I|0)<9?I:9);U=U+4|0;E=I+-9|0;if(!(U>>>0<ta>>>0&(I|0)>9)){Fa=E;break;}else I=E;}}else Fa=za;mz(b,48,Fa+9|0,9,0);}else{I=ua?ta:sa+4|0;if(sa>>>0<I>>>0&(za|0)>-1){U=n+9|0;V=(h&8|0)==0;u=U;G=0-o|0;E=n+8|0;T=za;L=sa;while(1){A=kz(c[L>>2]|0,0,U)|0;if((A|0)==(U|0)){a[E>>0]=48;Ga=E;}else Ga=A;do{if((L|0)==(sa|0)){A=Ga+1|0;fz(b,Ga,1);if(V&(T|0)<1){Ha=A;break;}fz(b,18964,1);Ha=A;}else{if(Ga>>>0<=n>>>0){Ha=Ga;break;}oE(n|0,48,Ga+G|0)|0;A=Ga;while(1){K=A+-1|0;if(K>>>0>n>>>0)A=K;else{Ha=K;break;}}}}while(0);r=u-Ha|0;fz(b,Ha,(T|0)>(r|0)?r:T);A=T-r|0;L=L+4|0;if(!(L>>>0<I>>>0&(A|0)>-1)){Ia=A;break;}else T=A;}}else Ia=za;mz(b,48,Ia+18|0,18,0);fz(b,Aa,q-Aa|0);}mz(b,32,f,C,h^8192);B=C;}}while(0);l=j;return((B|0)<(f|0)?f:B)|0;}function pz(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;y=c[j+4>>2]|0;return b|0;}function qz(a,b){a=+a;b=b|0;return+ +rz(a,b);}function rz(a,b){a=+a;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,k=0,l=0.0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=iE(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){g=+rz(a*18446744073709551616.0,b);i=g;k=(c[b>>2]|0)+-64|0;}else{i=a;k=0;}c[b>>2]=k;l=i;break;}case 2047:{l=a;break;}default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;l=+h[j>>3];}}return+l;}function sz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;do{if(b){if(d>>>0<128){a[b>>0]=d;f=1;break;}if(!(c[c[(tz()|0)+188>>2]>>2]|0))if((d&-128|0)==57216){a[b>>0]=d;f=1;break;}else{c[(My()|0)>>2]=84;f=-1;break;}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;f=2;break;}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;f=3;break;}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;f=4;break;}else{c[(My()|0)>>2]=84;f=-1;break;}}else f=1;}while(0);return f|0;}function tz(){return az()|0;}function uz(){return az()|0;}function vz(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=0;while(1){if((d[7936+f>>0]|0)==(b|0)){g=4;break;}h=f+1|0;if((h|0)==87){i=87;g=5;break;}else f=h;}if((g|0)==4)if(!f)j=8032;else{i=f;g=5;}if((g|0)==5){g=8032;f=i;while(1){i=g;do{b=i;i=i+1|0;}while((a[b>>0]|0)!=0);f=f+-1|0;if(!f){j=i;break;}else g=i;}}return wz(j,c[e+20>>2]|0)|0;}function wz(a,b){a=a|0;b=b|0;return Yy(a,b)|0;}function xz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=e+16|0;g=c[f>>2]|0;if(!g){if(!(yz(e)|0)){h=c[f>>2]|0;i=5;}else j=0;}else{h=g;i=5;}a:do{if((i|0)==5){g=e+20|0;f=c[g>>2]|0;k=f;if((h-f|0)>>>0<d>>>0){j=rc[c[e+36>>2]&31](e,b,d)|0;break;}b:do{if((a[e+75>>0]|0)<0|(d|0)==0){l=0;m=b;n=d;o=k;}else{f=d;while(1){p=f+-1|0;if((a[b+p>>0]|0)==10)break;if(!p){l=0;m=b;n=d;o=k;break b;}else f=p;}p=rc[c[e+36>>2]&31](e,b,f)|0;if(p>>>0<f>>>0){j=p;break a;}l=f;m=b+f|0;n=d-f|0;o=c[g>>2]|0;}}while(0);mE(o|0,m|0,n|0)|0;c[g>>2]=(c[g>>2]|0)+n;j=l+n|0;}}while(0);return j|0;}function yz(b){b=b|0;var d=0,e=0,f=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;e=c[b>>2]|0;if(!(e&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);f=0;}else{c[b>>2]=e|32;f=-1;}return f|0;}function zz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+20|0;f=c[e>>2]|0;g=(c[a+16>>2]|0)-f|0;a=g>>>0>d>>>0?d:g;mE(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0;}function Az(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=dz(c[3e3]|0,a,e)|0;l=d;return b|0;}function Bz(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+16|0;g=f;h=e&255;a[g>>0]=h;i=b+16|0;j=c[i>>2]|0;if(!j){if(!(yz(b)|0)){k=c[i>>2]|0;m=4;}else n=-1;}else{k=j;m=4;}do{if((m|0)==4){j=b+20|0;i=c[j>>2]|0;if(i>>>0<k>>>0?(o=e&255,(o|0)!=(a[b+75>>0]|0)):0){c[j>>2]=i+1;a[i>>0]=h;n=o;break;}if((rc[c[b+36>>2]&31](b,g,1)|0)==1)n=d[g>>0]|0;else n=-1;}}while(0);l=f;return n|0;}function Cz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+48|0;f=e+32|0;g=e+16|0;h=e;if(Ry(17886,a[d>>0]|0)|0){i=Dz(d)|0;c[h>>2]=b;c[h+4>>2]=i|32768;c[h+8>>2]=438;b=Ly(Ha(5,h|0)|0)|0;if((b|0)>=0){if(i&524288|0){c[g>>2]=b;c[g+4>>2]=2;c[g+8>>2]=1;Ga(221,g|0)|0;}g=Ez(b,d)|0;if(!g){c[f>>2]=b;Ja(6,f|0)|0;j=0;}else j=g;}else j=0;}else{c[(My()|0)>>2]=22;j=0;}l=e;return j|0;}function Dz(b){b=b|0;var c=0,d=0,e=0,f=0;c=(Ry(b,43)|0)==0;d=a[b>>0]|0;e=c?d<<24>>24!=114&1:2;c=(Ry(b,120)|0)==0;f=c?e:e|128;e=(Ry(b,101)|0)==0;b=e?f:f|524288;f=d<<24>>24==114?b:b|64;b=d<<24>>24==119?f|512:f;return(d<<24>>24==97?b|1024:b)|0;}function Ez(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;e=l;l=l+64|0;f=e+40|0;g=e+24|0;h=e+16|0;i=e;j=e+56|0;if(Ry(17886,a[d>>0]|0)|0){k=Cy(1156)|0;if(!k)m=0;else{oE(k|0,0,124)|0;if(!(Ry(d,43)|0))c[k>>2]=(a[d>>0]|0)==114?8:4;if(Ry(d,101)|0){c[i>>2]=b;c[i+4>>2]=2;c[i+8>>2]=1;Ga(221,i|0)|0;}if((a[d>>0]|0)==97){c[h>>2]=b;c[h+4>>2]=3;d=Ga(221,h|0)|0;if(!(d&1024)){c[g>>2]=b;c[g+4>>2]=4;c[g+8>>2]=d|1024;Ga(221,g|0)|0;}g=c[k>>2]|128;c[k>>2]=g;n=g;}else n=c[k>>2]|0;c[k+60>>2]=b;c[k+44>>2]=k+132;c[k+48>>2]=1024;g=k+75|0;a[g>>0]=-1;if((n&8|0)==0?(c[f>>2]=b,c[f+4>>2]=21523,c[f+8>>2]=j,(Ia(54,f|0)|0)==0):0)a[g>>0]=10;c[k+32>>2]=22;c[k+36>>2]=3;c[k+40>>2]=2;c[k+12>>2]=29;if(!(c[5543]|0))c[k+76>>2]=-1;Fz(k)|0;m=k;}}else{c[(My()|0)>>2]=22;m=0;}l=e;return m|0;}function Fz(a){a=a|0;var b=0,d=0;b=Gz()|0;c[a+56>>2]=c[b>>2];d=c[b>>2]|0;if(d|0)c[d+52>>2]=a;c[b>>2]=a;Hz();return a|0;}function Gz(){Aa(22236);return 22244;}function Hz(){Ka(22236);return;}function Iz(){return az()|0;}function Jz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;do{if(a){if((c[a+76>>2]|0)<=-1){b=Mz(a)|0;break;}d=(Vy(a)|0)==0;e=Mz(a)|0;if(d)b=e;else{Wy(a);b=e;}}else{if(!(c[3032]|0))f=0;else f=Jz(c[3032]|0)|0;e=c[(Gz()|0)>>2]|0;if(!e)g=f;else{d=e;e=f;while(1){if((c[d+76>>2]|0)>-1)h=Vy(d)|0;else h=0;if((c[d+20>>2]|0)>>>0>(c[d+28>>2]|0)>>>0)i=Mz(d)|0|e;else i=e;if(h|0)Wy(d);d=c[d+56>>2]|0;if(!d){g=i;break;}else e=i;}}Hz();b=g;}}while(0);return b|0;}function Kz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;if((c[a+76>>2]|0)>-1)b=Vy(a)|0;else b=0;Lz(a);d=(c[a>>2]&1|0)!=0;if(!d){e=Gz()|0;f=c[a+52>>2]|0;g=a+56|0;if(f|0)c[f+56>>2]=c[g>>2];h=c[g>>2]|0;if(h|0)c[h+52>>2]=f;if((c[e>>2]|0)==(a|0))c[e>>2]=h;Hz();}h=Jz(a)|0;e=pc[c[a+12>>2]&63](a)|0|h;h=c[a+92>>2]|0;if(h|0)Dy(h);if(d){if(b|0)Wy(a);}else Dy(a);return e|0;}function Lz(a){a=a|0;var b=0,d=0,e=0;if(c[a+68>>2]|0){b=c[a+116>>2]|0;d=a+112|0;if(b|0)c[b+112>>2]=c[d>>2];a=c[d>>2]|0;if(!a)e=(Iz()|0)+232|0;else e=a+116|0;c[e>>2]=b;}return;}function Mz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+20|0;d=a+28|0;if((c[b>>2]|0)>>>0>(c[d>>2]|0)>>>0?(rc[c[a+36>>2]&31](a,0,0)|0,(c[b>>2]|0)==0):0)e=-1;else{f=a+4|0;g=c[f>>2]|0;h=a+8|0;i=c[h>>2]|0;if(g>>>0<i>>>0)rc[c[a+40>>2]&31](a,g-i|0,1)|0;c[a+16>>2]=0;c[d>>2]=0;c[b>>2]=0;c[h>>2]=0;c[f>>2]=0;e=0;}return e|0;}function Nz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((c[d+76>>2]|0)>=0?(Vy(d)|0)!=0:0){e=b&255;f=b&255;if((f|0)!=(a[d+75>>0]|0)?(g=d+20|0,h=c[g>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[g>>2]=h+1;a[h>>0]=e;i=f;}else i=Bz(d,b)|0;Wy(d);j=i;}else k=3;do{if((k|0)==3){i=b&255;f=b&255;if((f|0)!=(a[d+75>>0]|0)?(e=d+20|0,h=c[e>>2]|0,h>>>0<(c[d+16>>2]|0)>>>0):0){c[e>>2]=h+1;a[h>>0]=i;j=f;break;}j=Bz(d,b)|0;}}while(0);return j|0;}function Oz(a){a=a|0;var b=0,c=0,d=0;b=(Ty(a)|0)+1|0;c=Cy(b)|0;if(!c)d=0;else d=mE(c|0,a|0,b|0)|0;return d|0;}function Pz(a){a=a|0;return(a+-65|0)>>>0<26|0;}function Qz(a){a=a|0;return(((a|32)+-97|0)>>>0<6|(Sy(a)|0)!=0)&1|0;}function Rz(a){a=a|0;return;}function Sz(a){a=a|0;Rz(a);Vz(a);return;}function Tz(a){a=a|0;return 17890;}function Uz(a){a=a|0;var b=0,c=0;b=(a|0)==0?1:a;while(1){a=Cy(b)|0;if(a|0){c=a;break;}a=ZD()|0;if(!a){c=0;break;}vc[a&3]();}return c|0;}function Vz(a){a=a|0;Dy(a);return;}function Wz(a){a=a|0;lb();}function Xz(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a=l;l=l+48|0;b=a+32|0;d=a+24|0;e=a+16|0;f=a;g=a+36|0;a=Yz()|0;if(a|0?(h=c[a>>2]|0,h|0):0){a=h+48|0;i=c[a>>2]|0;j=c[a+4>>2]|0;if(!((i&-256|0)==1126902528&(j|0)==1129074247)){c[d>>2]=18077;Zz(18027,d);}if((i|0)==1126902529&(j|0)==1129074247)k=c[h+44>>2]|0;else k=h+80|0;c[g>>2]=k;k=c[h>>2]|0;h=c[k+4>>2]|0;if(rc[c[(c[2704]|0)+16>>2]&31](10816,k,g)|0){k=c[g>>2]|0;g=pc[c[(c[k>>2]|0)+8>>2]&63](k)|0;c[f>>2]=18077;c[f+4>>2]=h;c[f+8>>2]=g;Zz(17941,f);}else{c[e>>2]=18077;c[e+4>>2]=h;Zz(17986,e);}}Zz(18065,b);}function Yz(){var a=0,b=0;a=l;l=l+16|0;if(!(rb(22248,3)|0)){b=pb(c[5563]|0)|0;l=a;return b|0;}else Zz(18216,a);return 0;}function Zz(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;c[e>>2]=b;b=c[3033]|0;dz(b,a,e)|0;Nz(10,b)|0;lb();}function _z(a){a=a|0;return;}function $z(a){a=a|0;_z(a);Vz(a);return;}function aA(a){a=a|0;return;}function bA(a){a=a|0;return;}function cA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+64|0;f=e;if(!(gA(a,b,0)|0)){if((b|0)!=0?(g=kA(b,10840,10824,0)|0,(g|0)!=0):0){b=f+4|0;h=b+52|0;do{c[b>>2]=0;b=b+4|0;}while((b|0)<(h|0));c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;zc[c[(c[g>>2]|0)+28>>2]&7](g,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];i=1;}else i=0;j=i;}else j=0;}else j=1;l=e;return j|0;}function dA(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(gA(a,c[b+8>>2]|0,g)|0)jA(0,b,d,e,f);return;}function eA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do{if(!(gA(b,c[d+8>>2]|0,g)|0)){if(gA(b,c[d>>2]|0,g)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;h=d+40|0;c[h>>2]=(c[h>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break;}if((f|0)==1)c[d+32>>2]=1;}}else iA(0,d,e,f);}while(0);return;}function fA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(gA(a,c[b+8>>2]|0,0)|0)hA(0,b,d,e);return;}function gA(a,b,c){a=a|0;b=b|0;c=c|0;return(a|0)==(b|0)|0;}function hA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;b=d+16|0;g=c[b>>2]|0;do{if(g){if((g|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;break;}h=d+24|0;if((c[h>>2]|0)==2)c[h>>2]=f;}else{c[b>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1;}}while(0);return;}function iA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((c[b+4>>2]|0)==(d|0)?(d=b+28|0,(c[d>>2]|0)!=1):0)c[d>>2]=e;return;}function jA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;a[d+53>>0]=1;do{if((c[d+4>>2]|0)==(f|0)){a[d+52>>0]=1;b=d+16|0;h=c[b>>2]|0;if(!h){c[b>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0))break;a[d+54>>0]=1;break;}if((h|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;a[d+54>>0]=1;break;}h=d+24|0;b=c[h>>2]|0;if((b|0)==2){c[h>>2]=g;i=g;}else i=b;if((i|0)==1?(c[d+48>>2]|0)==1:0)a[d+54>>0]=1;}}while(0);return;}function kA(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;h=l;l=l+64|0;i=h;j=c[d>>2]|0;k=d+(c[j+-8>>2]|0)|0;m=c[j+-4>>2]|0;c[i>>2]=f;c[i+4>>2]=d;c[i+8>>2]=e;c[i+12>>2]=g;g=i+16|0;e=i+20|0;d=i+24|0;j=i+28|0;n=i+32|0;o=i+40|0;p=g;q=p+36|0;do{c[p>>2]=0;p=p+4|0;}while((p|0)<(q|0));b[g+36>>1]=0;a[g+38>>0]=0;a:do{if(gA(m,f,0)|0){c[i+48>>2]=1;Bc[c[(c[m>>2]|0)+20>>2]&3](m,i,k,k,1,0);r=(c[d>>2]|0)==1?k:0;}else{Ac[c[(c[m>>2]|0)+24>>2]&3](m,i,k,1,0);switch(c[i+36>>2]|0){case 0:{r=(c[o>>2]|0)==1&(c[j>>2]|0)==1&(c[n>>2]|0)==1?c[e>>2]|0:0;break a;break;}case 1:break;default:{r=0;break a;}}if((c[d>>2]|0)!=1?!((c[o>>2]|0)==0&(c[j>>2]|0)==1&(c[n>>2]|0)==1):0){r=0;break;}r=c[g>>2]|0;}}while(0);l=h;return r|0;}function lA(a){a=a|0;_z(a);Vz(a);return;}function mA(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;if(gA(a,c[b+8>>2]|0,g)|0)jA(0,b,d,e,f);else{h=c[a+8>>2]|0;Bc[c[(c[h>>2]|0)+20>>2]&3](h,b,d,e,f,g);}return;}function nA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;do{if(!(gA(b,c[d+8>>2]|0,g)|0)){if(!(gA(b,c[d>>2]|0,g)|0)){h=c[b+8>>2]|0;Ac[c[(c[h>>2]|0)+24>>2]&3](h,d,e,f,g);break;}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;j=d+52|0;a[j>>0]=0;k=d+53|0;a[k>>0]=0;l=c[b+8>>2]|0;Bc[c[(c[l>>2]|0)+20>>2]&3](l,d,e,e,1,g);if(a[k>>0]|0){if(!(a[j>>0]|0)){m=1;n=11;}else n=15;}else{m=0;n=11;}do{if((n|0)==11){c[h>>2]=e;j=d+40|0;c[j>>2]=(c[j>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(m){n=15;break;}else{o=4;break;}}if(m)n=15;else o=4;}}while(0);if((n|0)==15)o=3;c[i>>2]=o;break;}if((f|0)==1)c[d+32>>2]=1;}else iA(0,d,e,f);}while(0);return;}function oA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;if(gA(a,c[b+8>>2]|0,0)|0)hA(0,b,d,e);else{f=c[a+8>>2]|0;zc[c[(c[f>>2]|0)+28>>2]&7](f,b,d,e);}return;}function pA(a){a=a|0;return;}function qA(){var a=0;a=l;l=l+16|0;if(!(qb(22252,72)|0)){l=a;return;}else Zz(18265,a);}function rA(a){a=a|0;var b=0;b=l;l=l+16|0;Dy(a);if(!(sb(c[5563]|0,0)|0)){l=b;return;}else Zz(18315,b);}function sA(){var a=0,b=0;a=Yz()|0;if((a|0?(b=c[a>>2]|0,b|0):0)?(a=b+48|0,(c[a>>2]&-256|0)==1126902528?(c[a+4>>2]|0)==1129074247:0):0)tA(c[b+12>>2]|0);tA(uA()|0);}function tA(a){a=a|0;var b=0;b=l;l=l+16|0;vc[a&3]();Zz(18368,b);}function uA(){var a=0;a=c[3162]|0;c[3162]=a+0;return a|0;}function vA(a){a=a|0;return;}function wA(a){a=a|0;_z(a);Vz(a);return;}function xA(a,b,c){a=a|0;b=b|0;c=c|0;return gA(a,b,0)|0;}function yA(a){a=a|0;_z(a);Vz(a);return;}function zA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=l;l=l+64|0;f=e;c[d>>2]=c[c[d>>2]>>2];if(!(AA(a,b,0)|0)){if(((b|0)!=0?(g=kA(b,10840,10896,0)|0,(g|0)!=0):0)?(c[g+8>>2]&~c[a+8>>2]|0)==0:0){b=a+12|0;a=g+12|0;if(!(gA(c[b>>2]|0,c[a>>2]|0,0)|0)?!(gA(c[b>>2]|0,10928,0)|0):0){g=c[b>>2]|0;if((((g|0)!=0?(b=kA(g,10840,10824,0)|0,(b|0)!=0):0)?(g=c[a>>2]|0,(g|0)!=0):0)?(a=kA(g,10840,10824,0)|0,(a|0)!=0):0){g=f+4|0;h=g+52|0;do{c[g>>2]=0;g=g+4|0;}while((g|0)<(h|0));c[f>>2]=a;c[f+8>>2]=b;c[f+12>>2]=-1;c[f+48>>2]=1;zc[c[(c[a>>2]|0)+28>>2]&7](a,f,c[d>>2]|0,1);if((c[f+24>>2]|0)==1){c[d>>2]=c[f+16>>2];i=1;}else i=0;j=i;}else j=0;}else j=1;}else j=0;}else j=1;l=e;return j|0;}function AA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(gA(a,b,0)|0)d=1;else d=gA(b,10936,0)|0;return d|0;}function BA(a){a=a|0;_z(a);Vz(a);return;}function CA(a,b,c){a=a|0;b=b|0;c=c|0;return 0;}function DA(a){a=a|0;_z(a);Vz(a);return;}function EA(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(gA(b,c[d+8>>2]|0,h)|0)jA(0,d,e,f,g);else{i=d+52|0;j=a[i>>0]|0;k=d+53|0;l=a[k>>0]|0;m=c[b+12>>2]|0;n=b+16+(m<<3)|0;a[i>>0]=0;a[k>>0]=0;IA(b+16|0,d,e,f,g,h);a:do{if((m|0)>1){o=d+24|0;p=b+8|0;q=d+54|0;r=b+24|0;do{if(a[q>>0]|0)break a;if(!(a[i>>0]|0)){if(a[k>>0]|0?(c[p>>2]&1|0)==0:0)break a;}else{if((c[o>>2]|0)==1)break a;if(!(c[p>>2]&2))break a;}a[i>>0]=0;a[k>>0]=0;IA(r,d,e,f,g,h);r=r+8|0;}while(r>>>0<n>>>0);}}while(0);a[i>>0]=j;a[k>>0]=l;}return;}function FA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;a:do{if(!(gA(b,c[d+8>>2]|0,g)|0)){if(!(gA(b,c[d>>2]|0,g)|0)){h=c[b+12>>2]|0;i=b+16+(h<<3)|0;JA(b+16|0,d,e,f,g);j=b+24|0;if((h|0)<=1)break;h=c[b+8>>2]|0;if((h&2|0)==0?(k=d+36|0,(c[k>>2]|0)!=1):0){if(!(h&1)){h=d+54|0;l=j;while(1){if(a[h>>0]|0)break a;if((c[k>>2]|0)==1)break a;JA(l,d,e,f,g);l=l+8|0;if(l>>>0>=i>>>0)break a;}}l=d+24|0;h=d+54|0;m=j;while(1){if(a[h>>0]|0)break a;if((c[k>>2]|0)==1?(c[l>>2]|0)==1:0)break a;JA(m,d,e,f,g);m=m+8|0;if(m>>>0>=i>>>0)break a;}}m=d+54|0;l=j;while(1){if(a[m>>0]|0)break a;JA(l,d,e,f,g);l=l+8|0;if(l>>>0>=i>>>0)break a;}}if((c[d+16>>2]|0)!=(e|0)?(i=d+20|0,(c[i>>2]|0)!=(e|0)):0){c[d+32>>2]=f;l=d+44|0;if((c[l>>2]|0)==4)break;m=b+16+(c[b+12>>2]<<3)|0;j=d+52|0;k=d+53|0;h=d+54|0;n=b+8|0;o=d+24|0;p=0;q=b+16|0;r=0;b:while(1){if(q>>>0>=m>>>0){s=p;t=18;break;}a[j>>0]=0;a[k>>0]=0;IA(q,d,e,e,1,g);if(a[h>>0]|0){s=p;t=18;break;}do{if(a[k>>0]|0){if(!(a[j>>0]|0))if(!(c[n>>2]&1)){s=1;t=18;break b;}else{u=1;v=r;break;}if((c[o>>2]|0)==1){t=23;break b;}if(!(c[n>>2]&2)){t=23;break b;}else{u=1;v=1;}}else{u=p;v=r;}}while(0);p=u;q=q+8|0;r=v;}do{if((t|0)==18){if((!r?(c[i>>2]=e,q=d+40|0,c[q>>2]=(c[q>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[o>>2]|0)==2:0){a[h>>0]=1;if(s){t=23;break;}else{w=4;break;}}if(s)t=23;else w=4;}}while(0);if((t|0)==23)w=3;c[l>>2]=w;break;}if((f|0)==1)c[d+32>>2]=1;}else iA(0,d,e,f);}while(0);return;}function GA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do{if(!(gA(b,c[d+8>>2]|0,0)|0)){g=c[b+12>>2]|0;h=b+16+(g<<3)|0;HA(b+16|0,d,e,f);if((g|0)>1){g=d+54|0;i=b+24|0;do{HA(i,d,e,f);if(a[g>>0]|0)break a;i=i+8|0;}while(i>>>0<h>>>0);}}else hA(0,d,e,f);}while(0);return;}function HA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=c[a+4>>2]|0;g=f>>8;if(!(f&1))h=g;else h=c[(c[d>>2]|0)+g>>2]|0;g=c[a>>2]|0;zc[c[(c[g>>2]|0)+28>>2]&7](g,b,d+h|0,(f&2|0)==0?2:e);return;}function IA(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=c[a+4>>2]|0;i=h>>8;if(!(h&1))j=i;else j=c[(c[e>>2]|0)+i>>2]|0;i=c[a>>2]|0;Bc[c[(c[i>>2]|0)+20>>2]&3](i,b,d,e+j|0,(h&2|0)==0?2:f,g);return;}function JA(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[a+4>>2]|0;h=g>>8;if(!(g&1))i=h;else i=c[(c[d>>2]|0)+h>>2]|0;h=c[a>>2]|0;Ac[c[(c[h>>2]|0)+24>>2]&3](h,b,d+i|0,(g&2|0)==0?2:e,f);return;}function KA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;g=l;l=l+4192|0;h=g+4176|0;i=g;j=g+4112|0;if((b|0)!=0?(k=(d|0)!=0,m=(e|0)==0,!(k&m)):0){if(k)n=c[e>>2]|0;else n=0;LA(i);MA(j,i);k=j+48|0;o=j+61|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;a[k+12>>0]=0;a[o>>0]=1;k=j+32|0;p=j+36|0;q=c[p>>2]|0;if(q>>>0<(c[j+40>>2]|0)>>>0){NA(h,i);c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=c[h>>2];c[p>>2]=(c[p>>2]|0)+16;}else OA(k,i);q=j+62|0;a[q>>0]=0;a[j+63>>0]=1;c[h>>2]=0;r=b+(Ty(b)|0)|0;PA(b,r,j,h);s=c[h>>2]|0;do{if(!((s|0)!=0|(a[q>>0]|0)==0)){t=c[k>>2]|0;if((t|0)!=(c[p>>2]|0)?(c[t>>2]|0)!=(c[t+4>>2]|0):0){a[q>>0]=0;a[o>>0]=0;t=c[j>>2]|0;u=j+4|0;v=c[u>>2]|0;while(1){if((v|0)==(t|0))break;w=v+-24|0;QA(w);v=w;}c[u>>2]=t;v=c[j+16>>2]|0;w=j+20|0;x=c[w>>2]|0;while(1){if((x|0)==(v|0))break;y=x+-16|0;RA(y);x=y;}c[w>>2]=v;PA(b,r,j,h);if(!(a[q>>0]|0)){z=c[h>>2]|0;A=22;break;}else{c[h>>2]=-2;B=0;C=-2;break;}}else A=23;}else{z=s;A=22;}}while(0);if((A|0)==22)if(!z)A=23;else{B=0;C=z;}do{if((A|0)==23){z=j+4|0;s=SA((c[z>>2]|0)+-24|0)|0;q=s+1|0;if(q>>>0>n>>>0){r=Fy(d,q)|0;if(!r){c[h>>2]=-1;B=0;C=-1;break;}if(m)D=r;else{c[e>>2]=q;D=r;}}else if(!d){B=0;C=0;break;}else D=d;r=c[z>>2]|0;q=r+-12|0;b=a[q+11>>0]|0;o=b<<24>>24<0;TA(r+-24|0,o?c[q>>2]|0:q,o?c[r+-8>>2]|0:b&255)|0;b=(c[z>>2]|0)+-24|0;if((a[b+11>>0]|0)<0)E=c[b>>2]|0;else E=b;mE(D|0,E|0,s|0)|0;a[D+s>>0]=0;B=D;C=0;}}while(0);if(f|0)c[f>>2]=C;UA(j);VA(i);F=B;}else if(!f)F=0;else{c[f>>2]=-3;F=0;}l=g;return F|0;}function LA(a){a=a|0;c[a+4096>>2]=a;return;}function MA(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=d;SD(e,b);c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=c[e>>2];NA(e,b);TD(a+16|0,e);UD(e,b);VD(a+32|0,e);l=d;return;}function NA(a,b){a=a|0;b=b|0;c[a>>2]=b;return;}function OA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+32|0;e=d+20|0;f=d;g=a+4|0;h=((c[g>>2]|0)-(c[a>>2]|0)>>4)+1|0;i=qD(a)|0;if(i>>>0<h>>>0)Wz(a);else{j=c[a>>2]|0;k=(c[a+8>>2]|0)-j|0;m=k>>3;rD(f,k>>4>>>0<i>>>1>>>0?m>>>0<h>>>0?h:m:i,(c[g>>2]|0)-j>>4,a+12|0);j=f+8|0;g=c[j>>2]|0;NA(e,b);c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=c[e>>2];c[j>>2]=g+16;sD(a,f);tD(f);l=d;return;}}function PA(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a:do{if(b>>>0<d>>>0){b:do{if((a[b>>0]|0)!=95){if((mB(b,d,e)|0)!=(d|0)){c[f>>2]=-2;break a;}}else{if((d-b|0)<=3){c[f>>2]=-2;break a;}switch(a[b+1>>0]|0){case 90:{g=b+2|0;h=jB(g,d,e)|0;if(!((h|0)==(g|0)|(h|0)==(d|0))?(a[h>>0]|0)==46:0)i=kB(h,d,e)|0;else i=h;if((i|0)==(d|0))break b;c[f>>2]=-2;break a;break;}case 95:{j=11;break;}default:{}}if(((j|0)==11?(a[b+2>>0]|0)==95:0)?(a[b+3>>0]|0)==90:0){h=b+4|0;g=jB(h,d,e)|0;if((g|0)==(h|0)|(g|0)==(d|0)){c[f>>2]=-2;break a;}if((lB(g,d,e)|0)==(d|0))break;c[f>>2]=-2;break a;}c[f>>2]=-2;break a;}}while(0);if((c[f>>2]|0)==0?(c[e>>2]|0)==(c[e+4>>2]|0):0)c[f>>2]=-2;}else c[f>>2]=-2;}while(0);return;}function QA(a){a=a|0;iB(a+12|0);iB(a);return;}function RA(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(b|0){d=a+4|0;e=c[d>>2]|0;while(1){if((e|0)==(b|0))break;f=e+-24|0;QA(f);e=f;}c[d>>2]=b;b=c[a>>2]|0;hB(a+12|0,b,((c[a+8>>2]|0)-b|0)/24|0);}return;}function SA(b){b=b|0;var d=0,e=0,f=0;d=a[b+11>>0]|0;if(d<<24>>24<0)e=c[b+4>>2]|0;else e=d&255;d=a[b+12+11>>0]|0;if(d<<24>>24<0)f=c[b+16>>2]|0;else f=d&255;return f+e|0;}function TA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+16|0;g=f;h=b+11|0;i=a[h>>0]|0;j=i<<24>>24<0;if(j){k=c[b+4>>2]|0;m=(c[b+8>>2]&2147483647)+-1|0;}else{k=i&255;m=10;}if((m-k|0)>>>0>=e>>>0){if(e|0){if(j)n=c[b>>2]|0;else n=b;bB(n+k|0,d,e)|0;j=k+e|0;if((a[h>>0]|0)<0)c[b+4>>2]=j;else a[h>>0]=j;a[g>>0]=0;cB(n+j|0,g);}}else dB(b,m,k+e-m|0,k,k,0,e,d);l=f;return b|0;}function UA(a){a=a|0;WA(a+32|0);XA(a+16|0);RA(a);return;}function VA(a){a=a|0;c[a+4096>>2]=0;return;}function WA(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(b|0){d=a+4|0;e=c[d>>2]|0;while(1){if((e|0)==(b|0))break;f=e+-16|0;XA(f);e=f;}c[d>>2]=b;b=c[a>>2]|0;aB(a+12|0,b,(c[a+8>>2]|0)-b>>4);}return;}function XA(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a>>2]|0;if(b|0){d=a+4|0;e=c[d>>2]|0;while(1){if((e|0)==(b|0))break;f=e+-16|0;RA(f);e=f;}c[d>>2]=b;b=c[a>>2]|0;YA(a+12|0,b,(c[a+8>>2]|0)-b>>4);}return;}function YA(a,b,d){a=a|0;b=b|0;d=d|0;ZA(c[a>>2]|0,b,d<<4);return;}function ZA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(_A(a,b)|0){e=b+($A(d)|0)|0;d=a+4096|0;if((e|0)==(c[d>>2]|0))c[d>>2]=b;}else Dy(b);return;}function _A(a,b){a=a|0;b=b|0;return(a+4096|0)>>>0>=b>>>0&a>>>0<=b>>>0|0;}function $A(a){a=a|0;return a+15&-16|0;}function aB(a,b,d){a=a|0;b=b|0;d=d|0;ZA(c[a>>2]|0,b,d<<4);return;}function bB(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)mE(a|0,b|0,c|0)|0;return a|0;}function cB(b,c){b=b|0;c=c|0;a[b>>0]=a[c>>0]|0;return;}function dB(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0;k=l;l=l+16|0;m=k;if((-18-d|0)>>>0<e>>>0)eB(b);if((a[b+11>>0]|0)<0)n=c[b>>2]|0;else n=b;if(d>>>0<2147483623){o=e+d|0;e=d<<1;p=o>>>0<e>>>0?e:o;q=p>>>0<11?11:p+16&-16;}else q=-17;p=fB(q)|0;if(g|0)bB(p,n,g)|0;if(i|0)bB(p+g|0,j,i)|0;j=f-h|0;f=j-g|0;if(f|0)bB(p+g+i|0,n+g+h|0,f)|0;if((d|0)!=10)gB(n);c[b>>2]=p;c[b+8>>2]=q|-2147483648;q=j+i|0;c[b+4>>2]=q;a[m>>0]=0;cB(p+q|0,m);l=k;return;}function eB(a){a=a|0;lb();}function fB(a){a=a|0;return Cy(a)|0;}function gB(a){a=a|0;Dy(a);return;}function hB(a,b,d){a=a|0;b=b|0;d=d|0;ZA(c[a>>2]|0,b,d*24|0);return;}function iB(b){b=b|0;if((a[b+11>>0]|0)<0)gB(c[b>>2]|0);return;}function jB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;f=l;l=l+64|0;g=f+48|0;h=f+40|0;i=f+32|0;j=f+24|0;k=f+12|0;m=f;if((b|0)!=(d|0)){n=e+56|0;MD(h,n);c[n>>2]=(c[n>>2]|0)+1;o=e+61|0;ND(i,o);if((c[n>>2]|0)>>>0>1)a[o>>0]=1;a:do{switch(a[b>>0]|0){case 84:case 71:{p=OD(b,d,e)|0;q=1;break;}default:{n=MB(b,d,e)|0;r=c[e+48>>2]|0;s=c[e+52>>2]|0;b:do{if((n|0)!=(b|0)){if((n|0)!=(d|0)){switch(a[n>>0]|0){case 46:case 69:{t=n;break b;break;}default:{}}ND(j,o);a[o>>0]=0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;u=0;while(1){if((u|0)==3)break;c[k+(u<<2)>>2]=0;u=u+1|0;}u=e+4|0;v=c[u>>2]|0;c:do{if((c[e>>2]|0)!=(v|0)){w=v+-24|0;x=a[w+11>>0]|0;y=x<<24>>24<0;if(y)z=c[v+-20>>2]|0;else z=x&255;if(z){if(!(a[e+60>>0]|0)){if(y){A=c[w>>2]|0;B=c[v+-20>>2]|0;}else{A=w;B=x&255;}if((a[A+B+-1>>0]|0)==62){if(y){C=c[v+-20>>2]|0;D=c[w>>2]|0;}else{C=x&255;D=w;}if((a[D+(C+-2)>>0]|0)!=45){if(y){E=c[v+-20>>2]|0;F=c[w>>2]|0;}else{E=x&255;F=w;}if((a[F+(E+-2)>>0]|0)!=62){x=mB(n,d,e)|0;if((x|0)==(n|0)){G=b;H=0;break;}y=c[u>>2]|0;I=y;if(((y-(c[e>>2]|0)|0)/24|0)>>>0<2){G=b;H=0;break;}y=I+-24|0;c[m>>2]=c[y>>2];c[m+4>>2]=c[y+4>>2];c[m+8>>2]=c[y+8>>2];J=0;while(1){if((J|0)==3)break;c[y+(J<<2)>>2]=0;J=J+1|0;}J=I+-12|0;y=k+11|0;if((a[y>>0]|0)<0){K=c[k>>2]|0;a[g>>0]=0;cB(K,g);c[k+4>>2]=0;}else{a[g>>0]=0;cB(k,g);a[y>>0]=0;}TB(k);c[k>>2]=c[J>>2];c[k+4>>2]=c[J+4>>2];c[k+8>>2]=c[J+8>>2];K=0;while(1){if((K|0)==3)break;c[J+(K<<2)>>2]=0;K=K+1|0;}K=a[y>>0]|0;if(!((K<<24>>24<0?c[k+4>>2]|0:K&255)|0))NC(m,32);K=c[u>>2]|0;J=0;while(1){if((J|0)==-1)break;I=J+-1|0;QA(K+(I*24|0)|0);J=I;}c[u>>2]=K+-24;J=a[m+11>>0]|0;y=J<<24>>24<0;zD(K+-48|0,0,y?c[m>>2]|0:m,y?c[m+4>>2]|0:J&255)|0;iB(m);L=x;M=(c[u>>2]|0)+-24|0;}else{L=n;M=w;}}else{L=n;M=w;}}else{L=n;M=w;}}else{L=n;M=w;}NC(M,40);if((L|0)!=(d|0)?(a[L>>0]|0)==118:0){N=L+1|0;O=c[e>>2]|0;P=c[u>>2]|0;}else Q=50;do{if((Q|0)==50){J=g+11|0;y=g+4|0;I=m+11|0;R=m+4|0;S=1;T=L;d:while(1){U=T;while(1){V=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;W=mB(U,d,e)|0;X=c[u>>2]|0;Y=c[e>>2]|0;Z=(X-Y|0)/24|0;if((W|0)==(U|0)){Q=74;break d;}if(Z>>>0>V>>>0)break;else U=W;}c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;_=0;while(1){if((_|0)==3)break;c[g+(_<<2)>>2]=0;_=_+1|0;}_=V;while(1){if(_>>>0>=Z>>>0)break;$=a[J>>0]|0;if(($<<24>>24<0?c[y>>2]|0:$&255)|0)qB(g,18897)|0;FB(m,(c[e>>2]|0)+(_*24|0)|0);$=a[I>>0]|0;aa=$<<24>>24<0;TA(g,aa?c[m>>2]|0:m,aa?c[R>>2]|0:$&255)|0;iB(m);_=_+1|0;}_=V;while(1){if(_>>>0>=Z>>>0)break;$=c[u>>2]|0;aa=0;while(1){if((aa|0)==-1)break;ba=aa+-1|0;QA($+(ba*24|0)|0);aa=ba;}c[u>>2]=$+-24;_=_+1|0;}_=a[J>>0]|0;aa=c[y>>2]|0;ba=_&255;if(!((_<<24>>24<0?aa:ba)|0))ca=S;else{da=c[u>>2]|0;if((c[e>>2]|0)==(da|0)){Q=86;break;}if(S){ea=ba;fa=da;ga=_;ha=aa;}else{qB(da+-24|0,18897)|0;da=a[J>>0]|0;ea=da&255;fa=c[u>>2]|0;ga=da;ha=c[y>>2]|0;}da=ga<<24>>24<0;TA(fa+-24|0,da?c[g>>2]|0:g,da?ha:ea)|0;ca=0;}iB(g);S=ca;T=W;}if((Q|0)==74){N=U;O=Y;P=X;break;}else if((Q|0)==86){iB(g);G=b;H=0;break c;}}}while(0);if((O|0)!=(P|0)){NC(P+-24|0,41);if(r&1|0)qB((c[u>>2]|0)+-24|0,18620)|0;if(r&2|0)qB((c[u>>2]|0)+-24|0,18627)|0;if(r&4|0)qB((c[u>>2]|0)+-24|0,18637)|0;switch(s|0){case 1:{qB((c[u>>2]|0)+-24|0,20101)|0;break;}case 2:{qB((c[u>>2]|0)+-24|0,20104)|0;break;}default:{}}w=a[k+11>>0]|0;x=w<<24>>24<0;TA((c[u>>2]|0)+-24|0,x?c[k>>2]|0:k,x?c[k+4>>2]|0:w&255)|0;G=N;H=1;}else{G=b;H=0;}}else{G=b;H=0;}}else{G=b;H=0;}}while(0);iB(k);PD(j);if(H)t=G;else{p=G;q=0;break a;}}else t=d;}else t=b;}while(0);p=t;q=1;}}}while(0);PD(i);QD(h);if(q){ia=p;Q=90;}else ja=b;}else{ia=b;Q=90;}if((Q|0)==90)ja=ia;l=f;return ja|0;}function kB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+48|0;g=f+24|0;h=f+12|0;i=f;if(((b|0)!=(d|0)?(a[b>>0]|0)==46:0)?(j=e+4|0,(c[e>>2]|0)!=(c[j>>2]|0)):0){c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;QC(i,b,d);pB(i,0,18670)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];e=0;while(1){if((e|0)==3)break;c[i+(e<<2)>>2]=0;e=e+1|0;}qB(h,18673)|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];e=0;while(1){if((e|0)==3)break;c[h+(e<<2)>>2]=0;e=e+1|0;}e=a[g+11>>0]|0;k=e<<24>>24<0;TA((c[j>>2]|0)+-24|0,k?c[g>>2]|0:g,k?c[g+4>>2]|0:e&255)|0;iB(g);iB(h);iB(i);m=d;}else m=b;l=f;return m|0;}function lB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;a:do{if((d-b|0)>12){f=0;g=b;while(1){if(f>>>0>=13)break;if((a[g>>0]|0)!=(a[20306+f>>0]|0)){h=b;break a;}f=f+1|0;g=g+1|0;}b:do{if((g|0)==(d|0))i=d;else{if((a[g>>0]|0)==95){f=g+1|0;if((f|0)==(d|0)){h=b;break a;}if(((a[f>>0]|0)+-48|0)>>>0>=10){h=b;break a;}j=g+2|0;}else j=g;f=j;while(1){if((f|0)==(d|0)){i=d;break b;}if(((a[f>>0]|0)+-48|0)>>>0>=10){i=f;break b;}f=f+1|0;}}}while(0);g=c[e+4>>2]|0;if((c[e>>2]|0)!=(g|0)){pB(g+-24|0,0,20320)|0;h=i;}else h=b;}else h=b;}while(0);return h|0;}function mB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;f=l;l=l+144|0;g=f+128|0;h=f+104|0;i=f+40|0;j=f+88|0;k=f+24|0;m=f+76|0;n=f+12|0;o=f;p=f+64|0;a:do{if((b|0)!=(d|0)){switch(a[b>>0]|0){case 75:case 86:case 114:{c[g>>2]=0;q=nB(b,d,g)|0;b:do{if((q|0)!=(b|0)?(r=(a[q>>0]|0)==70,s=e+4|0,t=((c[s>>2]|0)-(c[e>>2]|0)|0)/24|0,u=mB(q,d,e)|0,v=((c[s>>2]|0)-(c[e>>2]|0)|0)/24|0,(u|0)!=(q|0)):0){s=e+20|0;w=c[s>>2]|0;if(r){x=0;while(1){if((x|0)==-1)break;y=x+-1|0;RA(w+(y<<4)|0);x=y;}x=w+-16|0;c[s>>2]=x;z=x;}else z=w;x=c[e+12>>2]|0;c[h>>2]=x;if(z>>>0<(c[e+24>>2]|0)>>>0){c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=x;c[s>>2]=(c[s>>2]|0)+16;}else oB(e+16|0,h);x=c[g>>2]|0;y=(x&1|0)==0;A=(x&2|0)==0;B=(x&4|0)==0;x=t;while(1){if(x>>>0>=v>>>0){C=u;break b;}if(r){D=c[e>>2]|0;E=D+(x*24|0)+12|0;F=a[E+11>>0]|0;G=F<<24>>24<0;if(G){H=c[D+(x*24|0)+16>>2]|0;I=c[E>>2]|0;}else{H=F&255;I=E;}J=H+-2|0;if((a[I+J>>0]|0)==38)K=H+-3|0;else{if(G){L=c[E>>2]|0;M=c[D+(x*24|0)+16>>2]|0;}else{L=E;M=F&255;}K=(a[L+M+-1>>0]|0)==38?J:H;}if(y)N=K;else{pB(E,K,18620)|0;N=K+6|0;}if(A)O=N;else{pB((c[e>>2]|0)+(x*24|0)+12|0,N,18627)|0;O=N+9|0;}if(!B)pB((c[e>>2]|0)+(x*24|0)+12|0,O,18637)|0;}else{if(!y)qB((c[e>>2]|0)+(x*24|0)|0,18620)|0;if(!A)qB((c[e>>2]|0)+(x*24|0)|0,18627)|0;if(!B)qB((c[e>>2]|0)+(x*24|0)|0,18637)|0;}E=c[s>>2]|0;J=(c[e>>2]|0)+(x*24|0)|0;F=E+-12|0;D=c[F>>2]|0;if((D|0)==(c[E+-8>>2]|0))sB(E+-16|0,J);else{rB(D,J);c[F>>2]=(c[F>>2]|0)+24;}x=x+1|0;}}else C=b;}while(0);P=C;break a;break;}default:{}}q=tB(b,d,e)|0;if((q|0)==(b|0)){c:do{switch(a[b>>0]|0){case 65:{x=uB(b,d,e)|0;if((x|0)==(b|0)){P=b;break a;}s=c[e+4>>2]|0;if((c[e>>2]|0)==(s|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,s+-24|0,h);s=e+20|0;B=c[s>>2]|0;if(B>>>0<(c[e+24>>2]|0)>>>0){c[B>>2]=0;A=B+4|0;c[A>>2]=0;y=B+8|0;c[y>>2]=0;c[B+12>>2]=c[g+12>>2];c[B>>2]=c[g>>2];B=g+4|0;c[A>>2]=c[B>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[B>>2]=0;c[g>>2]=0;c[s>>2]=(c[s>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=x;break a;break;}case 67:{x=b+1|0;s=mB(x,d,e)|0;if((s|0)==(x|0)){P=b;break a;}x=e+4|0;B=c[x>>2]|0;if((c[e>>2]|0)==(B|0)){P=b;break a;}qB(B+-24|0,18647)|0;B=(c[x>>2]|0)+-24|0;c[h>>2]=c[e+12>>2];vB(g,B,h);B=e+20|0;x=c[B>>2]|0;if(x>>>0<(c[e+24>>2]|0)>>>0){c[x>>2]=0;A=x+4|0;c[A>>2]=0;y=x+8|0;c[y>>2]=0;c[x+12>>2]=c[g+12>>2];c[x>>2]=c[g>>2];x=g+4|0;c[A>>2]=c[x>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[x>>2]=0;c[g>>2]=0;c[B>>2]=(c[B>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=s;break a;break;}case 70:{s=xB(b,d,e)|0;if((s|0)==(b|0)){P=b;break a;}B=c[e+4>>2]|0;if((c[e>>2]|0)==(B|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,B+-24|0,h);B=e+20|0;x=c[B>>2]|0;if(x>>>0<(c[e+24>>2]|0)>>>0){c[x>>2]=0;A=x+4|0;c[A>>2]=0;y=x+8|0;c[y>>2]=0;c[x+12>>2]=c[g+12>>2];c[x>>2]=c[g>>2];x=g+4|0;c[A>>2]=c[x>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[x>>2]=0;c[g>>2]=0;c[B>>2]=(c[B>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=s;break a;break;}case 71:{s=b+1|0;B=mB(s,d,e)|0;if((B|0)==(s|0)){P=b;break a;}s=e+4|0;x=c[s>>2]|0;if((c[e>>2]|0)==(x|0)){P=b;break a;}qB(x+-24|0,18656)|0;x=(c[s>>2]|0)+-24|0;c[h>>2]=c[e+12>>2];vB(g,x,h);x=e+20|0;s=c[x>>2]|0;if(s>>>0<(c[e+24>>2]|0)>>>0){c[s>>2]=0;A=s+4|0;c[A>>2]=0;y=s+8|0;c[y>>2]=0;c[s+12>>2]=c[g+12>>2];c[s>>2]=c[g>>2];s=g+4|0;c[A>>2]=c[s>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[s>>2]=0;c[g>>2]=0;c[x>>2]=(c[x>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=B;break a;break;}case 77:{B=yB(b,d,e)|0;if((B|0)==(b|0)){P=b;break a;}x=c[e+4>>2]|0;if((c[e>>2]|0)==(x|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,x+-24|0,h);x=e+20|0;s=c[x>>2]|0;if(s>>>0<(c[e+24>>2]|0)>>>0){c[s>>2]=0;A=s+4|0;c[A>>2]=0;y=s+8|0;c[y>>2]=0;c[s+12>>2]=c[g+12>>2];c[s>>2]=c[g>>2];s=g+4|0;c[A>>2]=c[s>>2];A=g+8|0;c[y>>2]=c[A>>2];c[A>>2]=0;c[s>>2]=0;c[g>>2]=0;c[x>>2]=(c[x>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=B;break a;break;}case 79:{B=e+4|0;x=((c[B>>2]|0)-(c[e>>2]|0)|0)/24|0;s=b+1|0;A=mB(s,d,e)|0;y=((c[B>>2]|0)-(c[e>>2]|0)|0)/24|0;if((A|0)==(s|0)){P=b;break a;}s=c[e+12>>2]|0;c[g>>2]=s;B=e+20|0;r=c[B>>2]|0;if(r>>>0<(c[e+24>>2]|0)>>>0){c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=s;c[B>>2]=(c[B>>2]|0)+16;}else oB(e+16|0,g);s=g+11|0;r=g+4|0;u=x;while(1){if(u>>>0>=y>>>0){P=A;break a;}zB(g,(c[e>>2]|0)+(u*24|0)+12|0,2);x=AB(18667)|0;v=a[s>>0]|0;if((x|0)==((v<<24>>24<0?c[r>>2]|0:v&255)|0))Q=(BB(g,18667,x)|0)==0;else Q=0;iB(g);x=c[e>>2]|0;v=x+(u*24|0)|0;if(!Q){t=x+(u*24|0)+12|0;if((a[t+11>>0]|0)<0)R=c[t>>2]|0;else R=t;if((a[R>>0]|0)==40){qB(v,18675)|0;pB((c[e>>2]|0)+(u*24|0)+12|0,0,18673)|0;}}else{qB(v,18670)|0;pB((c[e>>2]|0)+(u*24|0)+12|0,0,18673)|0;}qB((c[e>>2]|0)+(u*24|0)|0,18677)|0;v=c[B>>2]|0;t=(c[e>>2]|0)+(u*24|0)|0;x=v+-12|0;w=c[x>>2]|0;if((w|0)==(c[v+-8>>2]|0))sB(v+-16|0,t);else{rB(w,t);c[x>>2]=(c[x>>2]|0)+24;}u=u+1|0;}break;}case 80:{u=e+4|0;B=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;r=b+1|0;s=mB(r,d,e)|0;A=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;if((s|0)==(r|0)){P=b;break a;}u=c[e+12>>2]|0;c[g>>2]=u;y=e+20|0;x=c[y>>2]|0;if(x>>>0<(c[e+24>>2]|0)>>>0){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=u;c[y>>2]=(c[y>>2]|0)+16;}else oB(e+16|0,g);u=g+11|0;x=g+4|0;t=g+11|0;w=g+4|0;v=B;while(1){if(v>>>0>=A>>>0){P=s;break a;}zB(g,(c[e>>2]|0)+(v*24|0)+12|0,2);B=AB(18667)|0;F=a[u>>0]|0;if((B|0)==((F<<24>>24<0?c[x>>2]|0:F&255)|0))S=(BB(g,18667,B)|0)==0;else S=0;iB(g);B=c[e>>2]|0;F=B+(v*24|0)|0;if(!S){J=B+(v*24|0)+12|0;if((a[J+11>>0]|0)<0)T=c[J>>2]|0;else T=J;if((a[T>>0]|0)==40){qB(F,18675)|0;pB((c[e>>2]|0)+(v*24|0)+12|0,0,18673)|0;}}else{qB(F,18670)|0;pB((c[e>>2]|0)+(v*24|0)+12|0,0,18673)|0;}if((a[r>>0]|0)==85){zB(g,(c[e>>2]|0)+(v*24|0)|0,12);F=AB(18680)|0;J=a[t>>0]|0;if((F|0)==((J<<24>>24<0?c[w>>2]|0:J&255)|0))U=(BB(g,18680,F)|0)!=0;else U=1;iB(g);F=(c[e>>2]|0)+(v*24|0)|0;if(U){V=F;W=113;}else CB(F);}else{V=(c[e>>2]|0)+(v*24|0)|0;W=113;}if((W|0)==113){W=0;qB(V,18693)|0;}F=c[y>>2]|0;J=(c[e>>2]|0)+(v*24|0)|0;B=F+-12|0;D=c[B>>2]|0;if((D|0)==(c[F+-8>>2]|0))sB(F+-16|0,J);else{rB(D,J);c[B>>2]=(c[B>>2]|0)+24;}v=v+1|0;}break;}case 82:{v=e+4|0;y=((c[v>>2]|0)-(c[e>>2]|0)|0)/24|0;w=b+1|0;t=mB(w,d,e)|0;r=((c[v>>2]|0)-(c[e>>2]|0)|0)/24|0;if((t|0)==(w|0)){P=b;break a;}w=c[e+12>>2]|0;c[g>>2]=w;v=e+20|0;x=c[v>>2]|0;if(x>>>0<(c[e+24>>2]|0)>>>0){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=w;c[v>>2]=(c[v>>2]|0)+16;}else oB(e+16|0,g);w=g+11|0;x=g+4|0;u=y;while(1){if(u>>>0>=r>>>0){P=t;break a;}zB(g,(c[e>>2]|0)+(u*24|0)+12|0,2);y=AB(18667)|0;s=a[w>>0]|0;if((y|0)==((s<<24>>24<0?c[x>>2]|0:s&255)|0))X=(BB(g,18667,y)|0)==0;else X=0;iB(g);y=c[e>>2]|0;s=y+(u*24|0)|0;if(!X){A=y+(u*24|0)+12|0;if((a[A+11>>0]|0)<0)Y=c[A>>2]|0;else Y=A;if((a[Y>>0]|0)==40){qB(s,18675)|0;pB((c[e>>2]|0)+(u*24|0)+12|0,0,18673)|0;}}else{qB(s,18670)|0;pB((c[e>>2]|0)+(u*24|0)+12|0,0,18673)|0;}qB((c[e>>2]|0)+(u*24|0)|0,18695)|0;s=c[v>>2]|0;A=(c[e>>2]|0)+(u*24|0)|0;y=s+-12|0;B=c[y>>2]|0;if((B|0)==(c[s+-8>>2]|0))sB(s+-16|0,A);else{rB(B,A);c[y>>2]=(c[y>>2]|0)+24;}u=u+1|0;}break;}case 84:{u=e+4|0;v=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;x=DB(b,d,e)|0;w=((c[u>>2]|0)-(c[e>>2]|0)|0)/24|0;if((x|0)==(b|0)){P=b;break a;}t=e+16|0;r=e+12|0;y=c[r>>2]|0;c[g>>2]=y;A=e+20|0;B=c[A>>2]|0;s=e+24|0;if(B>>>0<(c[s>>2]|0)>>>0){c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=y;c[A>>2]=(c[A>>2]|0)+16;}else oB(t,g);y=v;while(1){if(y>>>0>=w>>>0)break;B=c[A>>2]|0;J=(c[e>>2]|0)+(y*24|0)|0;D=B+-12|0;F=c[D>>2]|0;if((F|0)==(c[B+-8>>2]|0))sB(B+-16|0,J);else{rB(F,J);c[D>>2]=(c[D>>2]|0)+24;}y=y+1|0;}if(!((w|0)==(v+1|0)&(a[e+63>>0]|0)!=0)){P=x;break a;}y=EB(x,d,e)|0;if((y|0)==(x|0)){P=x;break a;}FB(g,(c[u>>2]|0)+-24|0);D=c[u>>2]|0;J=0;while(1){if((J|0)==-1)break;F=J+-1|0;QA(D+(F*24|0)|0);J=F;}c[u>>2]=D+-24;J=a[g+11>>0]|0;x=J<<24>>24<0;TA(D+-48|0,x?c[g>>2]|0:g,x?c[g+4>>2]|0:J&255)|0;J=(c[u>>2]|0)+-24|0;c[i>>2]=c[r>>2];vB(h,J,i);J=c[A>>2]|0;if(J>>>0<(c[s>>2]|0)>>>0){c[J>>2]=0;x=J+4|0;c[x>>2]=0;v=J+8|0;c[v>>2]=0;c[J+12>>2]=c[h+12>>2];c[J>>2]=c[h>>2];J=h+4|0;c[x>>2]=c[J>>2];x=h+8|0;c[v>>2]=c[x>>2];c[x>>2]=0;c[J>>2]=0;c[h>>2]=0;c[A>>2]=(c[A>>2]|0)+16;}else wB(t,h);RA(h);iB(g);P=y;break a;break;}case 85:{J=b+1|0;if((J|0)==(d|0)){P=b;break a;}x=GB(J,d,e)|0;if((x|0)==(J|0)){P=b;break a;}J=mB(x,d,e)|0;if((J|0)==(x|0)){P=b;break a;}x=e+4|0;v=c[x>>2]|0;if(((v-(c[e>>2]|0)|0)/24|0)>>>0<2){P=b;break a;}FB(g,v+-24|0);v=c[x>>2]|0;w=0;while(1){if((w|0)==-1)break;F=w+-1|0;QA(v+(F*24|0)|0);w=F;}c[x>>2]=v+-24;zB(h,v+-48|0,9);w=AB(18697)|0;y=a[h+11>>0]|0;if((w|0)==((y<<24>>24<0?c[h+4>>2]|0:y&255)|0)){y=(BB(h,18697,w)|0)==0;iB(h);if(y){FB(h,(c[x>>2]|0)+-24|0);y=c[x>>2]|0;w=0;while(1){if((w|0)==-1)break;t=w+-1|0;QA(y+(t*24|0)|0);w=t;}c[x>>2]=y+-24;w=h+11|0;v=a[w>>0]|0;t=v<<24>>24<0;A=h+4|0;s=t?c[h>>2]|0:h;r=GB(s+9|0,s+(t?c[A>>2]|0:v&255)|0,e)|0;if((r|0)==(((a[w>>0]|0)<0?c[h>>2]|0:h)+9|0)){HB(k,g,18707);r=a[w>>0]|0;w=r<<24>>24<0;TA(k,w?c[h>>2]|0:h,w?c[A>>2]|0:r&255)|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];r=0;while(1){if((r|0)==3)break;c[k+(r<<2)>>2]=0;r=r+1|0;}IB(i,p);r=c[x>>2]|0;if(r>>>0<(c[e+8>>2]|0)>>>0){KB(r,i);c[x>>2]=(c[x>>2]|0)+24;}else LB(e,i);QA(i);iB(p);iB(k);}else{HB(n,g,18709);FB(o,(c[x>>2]|0)+-24|0);r=a[o+11>>0]|0;y=r<<24>>24<0;TA(n,y?c[o>>2]|0:o,y?c[o+4>>2]|0:r&255)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];r=0;while(1){if((r|0)==3)break;c[n+(r<<2)>>2]=0;r=r+1|0;}qB(k,18711)|0;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[m+8>>2]=c[k+8>>2];r=0;while(1){if((r|0)==3)break;c[k+(r<<2)>>2]=0;r=r+1|0;}IB(i,m);JB((c[x>>2]|0)+-24|0,i);QA(i);iB(m);iB(k);iB(o);iB(n);}iB(h);}else W=167;}else{iB(h);W=167;}if((W|0)==167){HB(i,g,18707);FB(k,(c[x>>2]|0)+-24|0);r=a[k+11>>0]|0;y=r<<24>>24<0;TA(i,y?c[k>>2]|0:k,y?c[k+4>>2]|0:r&255)|0;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];c[j+8>>2]=c[i+8>>2];r=0;while(1){if((r|0)==3)break;c[i+(r<<2)>>2]=0;r=r+1|0;}IB(h,j);JB((c[x>>2]|0)+-24|0,h);QA(h);iB(j);iB(k);iB(i);}r=(c[x>>2]|0)+-24|0;c[i>>2]=c[e+12>>2];vB(h,r,i);r=e+20|0;y=c[r>>2]|0;if(y>>>0<(c[e+24>>2]|0)>>>0){c[y>>2]=0;A=y+4|0;c[A>>2]=0;w=y+8|0;c[w>>2]=0;c[y+12>>2]=c[h+12>>2];c[y>>2]=c[h>>2];y=h+4|0;c[A>>2]=c[y>>2];A=h+8|0;c[w>>2]=c[A>>2];c[A>>2]=0;c[y>>2]=0;c[h>>2]=0;c[r>>2]=(c[r>>2]|0)+16;}else wB(e+16|0,h);RA(h);iB(g);P=J;break a;break;}case 83:{r=b+1|0;if((r|0)!=(d|0)?(a[r>>0]|0)==116:0){r=MB(b,d,e)|0;if((r|0)==(b|0)){P=b;break a;}y=c[e+4>>2]|0;if((c[e>>2]|0)==(y|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,y+-24|0,h);y=e+20|0;A=c[y>>2]|0;if(A>>>0<(c[e+24>>2]|0)>>>0){c[A>>2]=0;w=A+4|0;c[w>>2]=0;v=A+8|0;c[v>>2]=0;c[A+12>>2]=c[g+12>>2];c[A>>2]=c[g>>2];A=g+4|0;c[w>>2]=c[A>>2];w=g+8|0;c[v>>2]=c[w>>2];c[w>>2]=0;c[A>>2]=0;c[g>>2]=0;c[y>>2]=(c[y>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=r;break a;}r=NB(b,d,e)|0;if((r|0)==(b|0)){P=b;break a;}y=EB(r,d,e)|0;if((y|0)==(r|0)){P=r;break a;}A=e+4|0;w=c[A>>2]|0;if(((w-(c[e>>2]|0)|0)/24|0)>>>0<2){P=r;break a;}FB(g,w+-24|0);w=c[A>>2]|0;r=0;while(1){if((r|0)==-1)break;v=r+-1|0;QA(w+(v*24|0)|0);r=v;}c[A>>2]=w+-24;r=a[g+11>>0]|0;J=r<<24>>24<0;TA(w+-48|0,J?c[g>>2]|0:g,J?c[g+4>>2]|0:r&255)|0;r=(c[A>>2]|0)+-24|0;c[i>>2]=c[e+12>>2];vB(h,r,i);r=e+20|0;J=c[r>>2]|0;if(J>>>0<(c[e+24>>2]|0)>>>0){c[J>>2]=0;x=J+4|0;c[x>>2]=0;v=J+8|0;c[v>>2]=0;c[J+12>>2]=c[h+12>>2];c[J>>2]=c[h>>2];J=h+4|0;c[x>>2]=c[J>>2];x=h+8|0;c[v>>2]=c[x>>2];c[x>>2]=0;c[J>>2]=0;c[h>>2]=0;c[r>>2]=(c[r>>2]|0)+16;}else wB(e+16|0,h);RA(h);iB(g);P=y;break a;break;}case 68:{r=b+1|0;if((r|0)!=(d|0))switch(a[r>>0]|0){case 112:{r=e+4|0;J=((c[r>>2]|0)-(c[e>>2]|0)|0)/24|0;x=b+2|0;v=mB(x,d,e)|0;t=((c[r>>2]|0)-(c[e>>2]|0)|0)/24|0;if((v|0)==(x|0))break c;x=c[e+12>>2]|0;c[g>>2]=x;r=e+20|0;s=c[r>>2]|0;if(s>>>0<(c[e+24>>2]|0)>>>0){c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=x;c[r>>2]=(c[r>>2]|0)+16;}else oB(e+16|0,g);x=J;while(1){if(x>>>0>=t>>>0){P=v;break a;}J=c[r>>2]|0;s=(c[e>>2]|0)+(x*24|0)|0;u=J+-12|0;D=c[u>>2]|0;if((D|0)==(c[J+-8>>2]|0))sB(J+-16|0,s);else{rB(D,s);c[u>>2]=(c[u>>2]|0)+24;}x=x+1|0;}break;}case 84:case 116:{x=OB(b,d,e)|0;if((x|0)==(b|0))break c;r=c[e+4>>2]|0;if((c[e>>2]|0)==(r|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,r+-24|0,h);r=e+20|0;v=c[r>>2]|0;if(v>>>0<(c[e+24>>2]|0)>>>0){c[v>>2]=0;t=v+4|0;c[t>>2]=0;y=v+8|0;c[y>>2]=0;c[v+12>>2]=c[g+12>>2];c[v>>2]=c[g>>2];v=g+4|0;c[t>>2]=c[v>>2];t=g+8|0;c[y>>2]=c[t>>2];c[t>>2]=0;c[v>>2]=0;c[g>>2]=0;c[r>>2]=(c[r>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=x;break a;break;}case 118:{x=PB(b,d,e)|0;if((x|0)==(b|0))break c;r=c[e+4>>2]|0;if((c[e>>2]|0)==(r|0)){P=b;break a;}c[h>>2]=c[e+12>>2];vB(g,r+-24|0,h);r=e+20|0;v=c[r>>2]|0;if(v>>>0<(c[e+24>>2]|0)>>>0){c[v>>2]=0;t=v+4|0;c[t>>2]=0;y=v+8|0;c[y>>2]=0;c[v+12>>2]=c[g+12>>2];c[v>>2]=c[g>>2];v=g+4|0;c[t>>2]=c[v>>2];t=g+8|0;c[y>>2]=c[t>>2];c[t>>2]=0;c[v>>2]=0;c[g>>2]=0;c[r>>2]=(c[r>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=x;break a;break;}default:break c;}break;}default:{}}}while(0);x=tB(b,d,e)|0;if((x|0)==(b|0)){r=MB(b,d,e)|0;if((r|0)!=(b|0)?(v=c[e+4>>2]|0,(c[e>>2]|0)!=(v|0)):0){c[h>>2]=c[e+12>>2];vB(g,v+-24|0,h);v=e+20|0;t=c[v>>2]|0;if(t>>>0<(c[e+24>>2]|0)>>>0){c[t>>2]=0;y=t+4|0;c[y>>2]=0;A=t+8|0;c[A>>2]=0;c[t+12>>2]=c[g+12>>2];c[t>>2]=c[g>>2];t=g+4|0;c[y>>2]=c[t>>2];y=g+8|0;c[A>>2]=c[y>>2];c[y>>2]=0;c[t>>2]=0;c[g>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(e+16|0,g);RA(g);P=r;}else P=b;}else P=x;}else P=q;}else P=b;}while(0);l=f;return P|0;}function nB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c[e>>2]=0;if((b|0)!=(d|0)){d=a[b>>0]|0;if(d<<24>>24==114){c[e>>2]=4;f=b+1|0;g=f;h=4;i=a[f>>0]|0;}else{g=b;h=0;i=d;}if(i<<24>>24==86){d=h|2;c[e>>2]=d;f=g+1|0;j=f;k=a[f>>0]|0;l=d;}else{j=g;k=i;l=h;}if(k<<24>>24==75){c[e>>2]=l|1;m=j+1|0;}else m=j;}else m=b;return m|0;}function oB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=((c[f>>2]|0)-(c[a>>2]|0)>>4)+1|0;h=AD(a)|0;if(h>>>0<g>>>0)Wz(a);else{i=c[a>>2]|0;j=(c[a+8>>2]|0)-i|0;k=j>>3;BD(e,j>>4>>>0<h>>>1>>>0?k>>>0<g>>>0?g:k:h,(c[f>>2]|0)-i>>4,a+12|0);i=e+8|0;f=c[i>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=c[b>>2];c[i>>2]=f+16;CD(a,e);DD(e);l=d;return;}}function pB(a,b,c){a=a|0;b=b|0;c=c|0;return zD(a,b,c,AB(c)|0)|0;}function qB(a,b){a=a|0;b=b|0;return TA(a,b,AB(b)|0)|0;}function rB(a,b){a=a|0;b=b|0;TC(a,b);TC(a+12|0,b+12|0);return;}function sB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=(((c[f>>2]|0)-(c[a>>2]|0)|0)/24|0)+1|0;h=XC(a)|0;if(h>>>0<g>>>0)Wz(a);else{i=c[a>>2]|0;j=((c[a+8>>2]|0)-i|0)/24|0;k=j<<1;YC(e,j>>>0<h>>>1>>>0?k>>>0<g>>>0?g:k:h,((c[f>>2]|0)-i|0)/24|0,a+12|0);i=e+8|0;f=c[i>>2]|0;rB(f,b);c[i>>2]=f+24;ZC(a,e);_C(e);l=d;return;}}function tB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+32|0;g=f;a:do{if((b|0)==(d|0))h=b;else do{switch(a[b>>0]|0){case 118:{cD(g,20112);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 119:{HD(g);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 98:{cD(g,20117);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 99:{cD(g,19886);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 97:{JC(g,19891);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 104:{gD(g,19903);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 115:{sC(g,19917);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 116:{KC(g,19923);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 105:{ID(g,20122);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 106:{LC(g,20126);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 108:{cD(g,20139);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 109:{gD(g,20144);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 120:{GC(g,20158);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 121:{JD(g);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 110:{KD(g,19952);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 111:{HC(g,19961);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 102:{sC(g,20168);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 100:{LD(g);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 101:{JC(g,20174);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 103:{FC(g,20186);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 122:{ID(g,20197);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);h=b+1|0;break a;break;}case 117:{i=b+1|0;j=GB(i,d,e)|0;h=(j|0)==(i|0)?b:j;break a;break;}case 68:{j=b+1|0;if((j|0)==(d|0)){h=b;break a;}switch(a[j>>0]|0){case 100:{GC(g,20201);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 101:{FC(g,20211);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 102:{GC(g,20222);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 104:{GC(g,20232);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 105:{KD(g,20242);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 115:{KD(g,20251);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 97:{cD(g,20260);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}case 110:{KC(g,20265);j=e+4|0;i=c[j>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);h=b+2|0;break a;break;}default:{h=b;break a;}}break;}default:{h=b;break a;}}}while(0);}while(0);l=f;return h|0;}function uB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;f=l;l=l+112|0;g=f+96|0;h=f+72|0;i=f+48|0;j=f+36|0;k=f+24|0;m=f+12|0;n=f;do{if(((b|0)!=(d|0)?(a[b>>0]|0)==65:0)?(o=b+1|0,(o|0)!=(d|0)):0){p=a[o>>0]|0;if(p<<24>>24==95){q=b+2|0;r=mB(q,d,e)|0;if((r|0)==(q|0)){s=b;break;}q=e+4|0;t=c[q>>2]|0;if((c[e>>2]|0)==(t|0)){s=b;break;}zB(g,t+-12|0,2);t=AB(18667)|0;u=a[g+11>>0]|0;if((t|0)==((u<<24>>24<0?c[g+4>>2]|0:u&255)|0)){u=(BB(g,18667,t)|0)==0;iB(g);if(u)GD((c[q>>2]|0)+-12|0);}else iB(g);pB((c[q>>2]|0)+-12|0,0,20108)|0;s=r;break;}if((p+-49&255)<9){p=QB(o,d)|0;if((p|0)==(d|0)){s=b;break;}if((a[p>>0]|0)!=95){s=b;break;}r=p+1|0;q=mB(r,d,e)|0;if((q|0)==(r|0)){s=b;break;}r=e+4|0;u=c[r>>2]|0;if((c[e>>2]|0)==(u|0)){s=b;break;}zB(g,u+-12|0,2);u=AB(18667)|0;t=a[g+11>>0]|0;if((u|0)==((t<<24>>24<0?c[g+4>>2]|0:t&255)|0)){t=(BB(g,18667,u)|0)==0;iB(g);if(t)GD((c[r>>2]|0)+-12|0);}else iB(g);t=(c[r>>2]|0)+-12|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;QC(i,o,p);pB(i,0,18667)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];p=0;while(1){if((p|0)==3)break;c[i+(p<<2)>>2]=0;p=p+1|0;}qB(h,18722)|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];p=0;while(1){if((p|0)==3)break;c[h+(p<<2)>>2]=0;p=p+1|0;}p=a[g+11>>0]|0;r=p<<24>>24<0;zD(t,0,r?c[g>>2]|0:g,r?c[g+4>>2]|0:p&255)|0;iB(g);iB(h);iB(i);s=q;break;}p=SB(o,d,e)|0;if(((!((p|0)==(o|0)|(p|0)==(d|0))?(a[p>>0]|0)==95:0)?(r=p+1|0,p=mB(r,d,e)|0,(p|0)!=(r|0)):0)?(r=e+4|0,u=c[r>>2]|0,((u-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){KB(h,u+-24|0);u=c[r>>2]|0;v=0;while(1){if((v|0)==-1)break;w=v+-1|0;QA(u+(w*24|0)|0);v=w;}c[r>>2]=u+-24;KB(i,u+-48|0);v=c[r>>2]|0;o=v+-24|0;q=o+11|0;if((a[q>>0]|0)<0){t=c[o>>2]|0;a[g>>0]=0;cB(t,g);c[v+-20>>2]=0;}else{a[g>>0]=0;cB(o,g);a[q>>0]=0;}TB(o);c[o>>2]=c[h>>2];c[o+4>>2]=c[h+4>>2];c[o+8>>2]=c[h+8>>2];o=0;while(1){if((o|0)==3)break;c[h+(o<<2)>>2]=0;o=o+1|0;}o=h+12|0;zB(g,o,2);u=AB(18667)|0;q=a[g+11>>0]|0;if((u|0)==((q<<24>>24<0?c[g+4>>2]|0:q&255)|0)){q=(BB(g,18667,u)|0)==0;iB(g);if(q)GD(o);}else iB(g);FB(n,i);pB(n,0,18667)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];q=0;while(1){if((q|0)==3)break;c[n+(q<<2)>>2]=0;q=q+1|0;}qB(m,18722)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];q=0;while(1){if((q|0)==3)break;c[m+(q<<2)>>2]=0;q=q+1|0;}q=a[o+11>>0]|0;u=q<<24>>24<0;TA(k,u?c[o>>2]|0:o,u?c[h+16>>2]|0:q&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];q=0;while(1){if((q|0)==3)break;c[k+(q<<2)>>2]=0;q=q+1|0;}q=c[r>>2]|0;o=q+-12|0;u=o+11|0;if((a[u>>0]|0)<0){v=c[o>>2]|0;a[g>>0]=0;cB(v,g);c[q+-8>>2]=0;}else{a[g>>0]=0;cB(o,g);a[u>>0]=0;}TB(o);c[o>>2]=c[j>>2];c[o+4>>2]=c[j+4>>2];c[o+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}iB(j);iB(k);iB(m);iB(n);QA(i);QA(h);s=p;}else s=b;}else s=b;}while(0);l=f;return s|0;}function vB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[a>>2]=0;e=a+4|0;c[e>>2]=0;c[a+8>>2]=0;c[a+12>>2]=c[d>>2];FD(a);rB(c[e>>2]|0,b);c[e>>2]=(c[e>>2]|0)+24;return;}function wB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=((c[f>>2]|0)-(c[a>>2]|0)>>4)+1|0;h=AD(a)|0;if(h>>>0<g>>>0)Wz(a);else{i=c[a>>2]|0;j=(c[a+8>>2]|0)-i|0;k=j>>3;BD(e,j>>4>>>0<h>>>1>>>0?k>>>0<g>>>0?g:k:h,(c[f>>2]|0)-i>>4,a+12|0);i=e+8|0;f=c[i>>2]|0;c[f>>2]=0;h=f+4|0;c[h>>2]=0;k=f+8|0;c[k>>2]=0;c[f+12>>2]=c[b+12>>2];c[f>>2]=c[b>>2];g=b+4|0;c[h>>2]=c[g>>2];h=b+8|0;c[k>>2]=c[h>>2];c[h>>2]=0;c[g>>2]=0;c[b>>2]=0;c[i>>2]=f+16;CD(a,e);DD(e);l=d;return;}}function xB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;f=l;l=l+32|0;g=f+12|0;h=f;do{if(((b|0)!=(d|0)?(a[b>>0]|0)==70:0)?(i=b+1|0,(i|0)!=(d|0)):0){if((a[i>>0]|0)==89){j=b+2|0;if((j|0)==(d|0)){k=b;break;}else m=j;}else m=i;i=mB(m,d,e)|0;if((i|0)!=(m|0)){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18675,AB(18675)|0);j=e+4|0;n=g+11|0;o=g+4|0;p=h+11|0;q=h+4|0;r=0;s=i;a:while(1){t=s;b:while(1){if((t|0)==(d|0)){u=11;break a;}switch(a[t>>0]|0){case 69:{u=16;break a;break;}case 118:{v=t+1|0;break;}case 82:{i=t+1|0;if((i|0)!=(d|0)?(a[i>>0]|0)==69:0){w=1;x=i;break b;}else u=23;break;}case 79:{i=t+1|0;if((i|0)!=(d|0)?(a[i>>0]|0)==69:0){w=2;x=i;break b;}else u=23;break;}default:u=23;}c:do{if((u|0)==23){u=0;i=((c[j>>2]|0)-(c[e>>2]|0)|0)/24|0;y=mB(t,d,e)|0;z=((c[j>>2]|0)-(c[e>>2]|0)|0)/24|0;if((y|0)==(t|0)|(y|0)==(d|0))break a;A=i;while(1){if(A>>>0>=z>>>0)break;B=a[n>>0]|0;if((B<<24>>24<0?c[o>>2]|0:B&255)>>>0>1)qB(g,18897)|0;FB(h,(c[e>>2]|0)+(A*24|0)|0);B=a[p>>0]|0;C=B<<24>>24<0;TA(g,C?c[h>>2]|0:h,C?c[q>>2]|0:B&255)|0;iB(h);A=A+1|0;}A=i;while(1){if(A>>>0>=z>>>0){v=y;break c;}B=c[j>>2]|0;C=0;while(1){if((C|0)==-1)break;D=C+-1|0;QA(B+(D*24|0)|0);C=D;}c[j>>2]=B+-24;A=A+1|0;}}}while(0);t=v;}r=w;s=x;}if((u|0)==11){s=c[j>>2]|0;q=0;while(1){if((q|0)==-1)break;p=q+-1|0;QA(s+(p*24|0)|0);q=p;}c[j>>2]=s+-24;}else if((u|0)==16){q=t+1|0;qB(g,18673)|0;switch(r&3){case 1:{qB(g,20101)|0;break;}case 2:{qB(g,20104)|0;break;}default:{}}p=c[j>>2]|0;if((c[e>>2]|0)!=(p|0)){qB(p+-24|0,18707)|0;p=a[n>>0]|0;A=p<<24>>24<0;zD((c[j>>2]|0)+-12|0,0,A?c[g>>2]|0:g,A?c[o>>2]|0:p&255)|0;iB(g);k=q;break;}}iB(g);k=b;}else k=b;}else k=b;}while(0);l=f;return k|0;}function yB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=l;l=l+112|0;g=f+96|0;h=f+72|0;i=f+48|0;j=f+36|0;k=f+24|0;m=f+12|0;n=f;if(((((b|0)!=(d|0)?(a[b>>0]|0)==77:0)?(o=b+1|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=mB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){KB(h,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;KB(i,d+-48|0);d=h+12|0;a:do{if((a[((a[d+11>>0]|0)<0?c[d>>2]|0:d)>>0]|0)==40){qB(h,18675)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];e=0;while(1){if((e|0)==3)break;c[h+(e<<2)>>2]=0;e=e+1|0;}FB(n,i);e=a[n+11>>0]|0;q=e<<24>>24<0;TA(m,q?c[n>>2]|0:n,q?c[n+4>>2]|0:e&255)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];e=0;while(1){if((e|0)==3)break;c[m+(e<<2)>>2]=0;e=e+1|0;}qB(k,20097)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];e=0;while(1){if((e|0)==3)break;c[k+(e<<2)>>2]=0;e=e+1|0;}e=c[p>>2]|0;q=e+-24|0;r=q+11|0;if((a[r>>0]|0)<0){s=c[q>>2]|0;a[g>>0]=0;cB(s,g);c[e+-20>>2]=0;}else{a[g>>0]=0;cB(q,g);a[r>>0]=0;}TB(q);c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];q=0;while(1){if((q|0)==3)break;c[j+(q<<2)>>2]=0;q=q+1|0;}iB(j);iB(k);iB(n);iB(m);pB(d,0,18673)|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];q=0;while(1){if((q|0)==3)break;c[d+(q<<2)>>2]=0;q=q+1|0;}q=c[p>>2]|0;r=q+-12|0;e=r+11|0;if((a[e>>0]|0)<0){s=c[r>>2]|0;a[g>>0]=0;cB(s,g);c[q+-8>>2]=0;}else{a[g>>0]=0;cB(r,g);a[e>>0]=0;}TB(r);c[r>>2]=c[j>>2];c[r+4>>2]=c[j+4>>2];c[r+8>>2]=c[j+8>>2];r=0;while(1){if((r|0)==3)break;c[j+(r<<2)>>2]=0;r=r+1|0;}iB(j);}else{qB(h,18707)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];r=0;while(1){if((r|0)==3)break;c[h+(r<<2)>>2]=0;r=r+1|0;}FB(n,i);r=a[n+11>>0]|0;e=r<<24>>24<0;TA(m,e?c[n>>2]|0:n,e?c[n+4>>2]|0:r&255)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];r=0;while(1){if((r|0)==3)break;c[m+(r<<2)>>2]=0;r=r+1|0;}qB(k,20097)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];r=0;while(1){if((r|0)==3)break;c[k+(r<<2)>>2]=0;r=r+1|0;}r=c[p>>2]|0;e=r+-24|0;q=e+11|0;if((a[q>>0]|0)<0){s=c[e>>2]|0;a[g>>0]=0;cB(s,g);c[r+-20>>2]=0;}else{a[g>>0]=0;cB(e,g);a[q>>0]=0;}TB(e);c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];e=0;while(1){if((e|0)==3)break;c[j+(e<<2)>>2]=0;e=e+1|0;}iB(j);iB(k);iB(n);iB(m);e=c[p>>2]|0;q=e+-12|0;r=q+11|0;if((a[r>>0]|0)<0){s=c[q>>2]|0;a[g>>0]=0;cB(s,g);c[e+-8>>2]=0;}else{a[g>>0]=0;cB(q,g);a[r>>0]=0;}TB(q);c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];q=0;while(1){if((q|0)==3)break a;c[d+(q<<2)>>2]=0;q=q+1|0;}}}while(0);QA(i);QA(h);t=o;}else t=b;l=f;return t|0;}function zB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=a[d+11>>0]|0;g=f<<24>>24<0;h=g?c[d+4>>2]|0:f&255;RB(b,g?c[d>>2]|0:d,h>>>0<e>>>0?h:e);return;}function AB(a){a=a|0;return Ty(a)|0;}function BB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=a[b+11>>0]|0;g=f<<24>>24<0;if(g)h=c[b+4>>2]|0;else h=f&255;if((e|0)==-1)xD(b);if(g)i=c[b>>2]|0;else i=b;b=h>>>0>e>>>0;g=yD(i,d,b?e:h)|0;if(!g)return(h>>>0<e>>>0?-1:b&1)|0;else return g|0;return 0;}function CB(a){a=a|0;wD(a,AB(20094)|0);return;}function DB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+48|0;g=f+16|0;h=f;a:do{if((d-b|0)>1?(a[b>>0]|0)==84:0){i=a[b+1>>0]|0;if(i<<24>>24==95){j=c[e+36>>2]|0;if((c[e+32>>2]|0)==(j|0)){k=b;break;}m=c[j+-16>>2]|0;if((m|0)==(c[j+-12>>2]|0)){vD(g);j=e+4|0;n=c[j>>2]|0;if(n>>>0<(c[e+8>>2]|0)>>>0){KB(n,g);c[j>>2]=(c[j>>2]|0)+24;}else LB(e,g);QA(g);a[e+62>>0]=1;k=b+2|0;break;}j=c[m+4>>2]|0;n=e+4|0;o=e+8|0;p=c[m>>2]|0;while(1){if((p|0)==(j|0))break;m=c[n>>2]|0;if((m|0)==(c[o>>2]|0))sB(e,p);else{rB(m,p);c[n>>2]=(c[n>>2]|0)+24;}p=p+24|0;}k=b+2|0;break;}p=(i<<24>>24)+-48|0;if(p>>>0<10){n=p;p=b+2|0;while(1){if((p|0)==(d|0)){k=b;break a;}q=a[p>>0]|0;o=(q<<24>>24)+-48|0;if(o>>>0>=10)break;n=o+(n*10|0)|0;p=p+1|0;}if(q<<24>>24==95?(i=c[e+36>>2]|0,(c[e+32>>2]|0)!=(i|0)):0){o=n+1|0;j=c[i+-16>>2]|0;m=j;if(o>>>0>=(c[i+-12>>2]|0)-j>>4>>>0){j=p+1|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;QC(h,b,j);IB(g,h);i=e+4|0;r=c[i>>2]|0;if(r>>>0<(c[e+8>>2]|0)>>>0){KB(r,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);iB(h);a[e+62>>0]=1;k=j;break;}j=c[m+(o<<4)+4>>2]|0;i=e+4|0;r=e+8|0;s=c[m+(o<<4)>>2]|0;while(1){if((s|0)==(j|0))break;o=c[i>>2]|0;if((o|0)==(c[r>>2]|0))sB(e,s);else{rB(o,s);c[i>>2]=(c[i>>2]|0)+24;}s=s+24|0;}k=p+1|0;}else k=b;}else k=b;}else k=b;}while(0);l=f;return k|0;}function EB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=l;l=l+64|0;g=f+32|0;h=f+16|0;i=f+12|0;j=f;do{if((d-b|0)>1?(a[b>>0]|0)==73:0){k=e+61|0;m=e+36|0;if(a[k>>0]|0){n=c[m>>2]|0;o=c[n+-16>>2]|0;p=n+-12|0;n=c[p>>2]|0;while(1){if((n|0)==(o|0))break;q=n+-16|0;RA(q);n=q;}c[p>>2]=o;}c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;RB(h,18709,AB(18709)|0);n=e+4|0;q=e+12|0;r=e+40|0;s=e+32|0;t=h+11|0;u=h+4|0;v=g+11|0;w=g+4|0;x=b+1|0;while(1){if((a[x>>0]|0)==69)break;if(a[k>>0]|0){c[i>>2]=c[q>>2];y=c[m>>2]|0;if(y>>>0<(c[r>>2]|0)>>>0){nD(g,i);c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[y+12>>2]=c[g>>2];c[m>>2]=(c[m>>2]|0)+16;}else oD(s,i);}y=((c[n>>2]|0)-(c[e>>2]|0)|0)/24|0;z=pD(x,d,e)|0;A=((c[n>>2]|0)-(c[e>>2]|0)|0)/24|0;if(a[k>>0]|0){B=c[m>>2]|0;C=0;while(1){if((C|0)==-1)break;D=C+-1|0;XA(B+(D<<4)|0);C=D;}c[m>>2]=B+-16;}if((z|0)==(x|0)|(z|0)==(d|0)){E=53;break;}a:do{if(a[k>>0]|0){C=c[m>>2]|0;D=c[q>>2]|0;c[g>>2]=D;F=C+-12|0;G=c[F>>2]|0;if(G>>>0<(c[C+-8>>2]|0)>>>0){c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=D;c[F>>2]=(c[F>>2]|0)+16;}else oB(C+-16|0,g);C=y;while(1){if(C>>>0>=A>>>0)break a;F=c[(c[m>>2]|0)+-12>>2]|0;D=(c[e>>2]|0)+(C*24|0)|0;G=F+-12|0;H=c[G>>2]|0;if((H|0)==(c[F+-8>>2]|0))sB(F+-16|0,D);else{rB(H,D);c[G>>2]=(c[G>>2]|0)+24;}C=C+1|0;}}}while(0);B=y;while(1){if(B>>>0>=A>>>0)break;C=a[t>>0]|0;if((C<<24>>24<0?c[u>>2]|0:C&255)>>>0>1)qB(h,18897)|0;FB(g,(c[e>>2]|0)+(B*24|0)|0);C=a[v>>0]|0;G=C<<24>>24<0;TA(h,G?c[g>>2]|0:g,G?c[w>>2]|0:C&255)|0;iB(g);B=B+1|0;}B=A;while(1){if((B|0)==(y|0))break;C=c[n>>2]|0;G=0;while(1){if((G|0)==-1)break;D=G+-1|0;QA(C+(D*24|0)|0);G=D;}c[n>>2]=C+-24;B=B+-1|0;}x=z;}if((E|0)==53){iB(h);I=b;break;}w=x+1|0;v=a[t>>0]|0;m=v<<24>>24<0;if((a[(m?c[h>>2]|0:h)+(m?c[u>>2]|0:v&255)+-1>>0]|0)==62)qB(h,20088)|0;else qB(h,18711)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];v=0;while(1){if((v|0)==3)break;c[h+(v<<2)>>2]=0;v=v+1|0;}IB(g,j);v=c[n>>2]|0;if(v>>>0<(c[e+8>>2]|0)>>>0){KB(v,g);c[n>>2]=(c[n>>2]|0)+24;}else LB(e,g);QA(g);iB(j);iB(h);I=w;}else I=b;}while(0);l=f;return I|0;}function FB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=d+12|0;f=a[e+11>>0]|0;g=f<<24>>24<0;TA(d,g?c[e>>2]|0:e,g?c[d+16>>2]|0:f&255)|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];b=0;while(1){if((b|0)==3)break;c[d+(b<<2)>>2]=0;b=b+1|0;}return;}function GB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;f=l;l=l+64|0;g=f+40|0;h=f+16|0;i=f;a:do{if(((b|0)!=(d|0)?(j=(a[b>>0]|0)+-48|0,j>>>0<10):0)?(k=b+1|0,(k|0)!=(d|0)):0){m=j;j=k;while(1){k=(a[j>>0]|0)+-48|0;if(k>>>0>=10)break;n=j+1|0;if((n|0)==(d|0)){o=b;break a;}m=k+(m*10|0)|0;j=n;}if((d-j|0)>>>0>=m>>>0){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,j,m);zB(h,g,10);n=AB(20055)|0;k=a[h+11>>0]|0;if((n|0)==((k<<24>>24<0?c[h+4>>2]|0:k&255)|0))p=(BB(h,20055,n)|0)==0;else p=0;iB(h);if(p){mD(h);n=e+4|0;k=c[n>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,h);c[n>>2]=(c[n>>2]|0)+24;}else LB(e,h);QA(h);}else{c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];n=0;while(1){if((n|0)==3)break;c[g+(n<<2)>>2]=0;n=n+1|0;}IB(h,i);n=e+4|0;k=c[n>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,h);c[n>>2]=(c[n>>2]|0)+24;}else LB(e,h);QA(h);iB(i);}iB(g);o=j+m|0;}else o=b;}else o=b;}while(0);l=f;return o|0;}function HB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=0;while(1){if((f|0)==3)break;c[b+(f<<2)>>2]=0;f=f+1|0;}f=d+11|0;g=a[f>>0]|0;h=g<<24>>24<0?c[d+4>>2]|0:g&255;g=AB(e)|0;VB(b,(a[f>>0]|0)<0?c[d>>2]|0:d,h,h+g|0);TA(b,e,g)|0;return;}function IB(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0;}d=a+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[d+(a<<2)>>2]=0;a=a+1|0;}return;}function JB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=l;l=l+16|0;f=e;g=b+11|0;if((a[g>>0]|0)<0){h=c[b>>2]|0;a[f>>0]=0;cB(h,f);c[b+4>>2]=0;}else{a[f>>0]=0;cB(b,f);a[g>>0]=0;}TB(b);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];g=0;while(1){if((g|0)==3)break;c[d+(g<<2)>>2]=0;g=g+1|0;}g=b+12|0;h=d+12|0;d=g+11|0;if((a[d>>0]|0)<0){i=c[g>>2]|0;a[f>>0]=0;cB(i,f);c[b+16>>2]=0;}else{a[f>>0]=0;cB(g,f);a[d>>0]=0;}TB(g);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];g=0;while(1){if((g|0)==3)break;c[h+(g<<2)>>2]=0;g=g+1|0;}l=e;return;}function KB(a,b){a=a|0;b=b|0;var d=0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0;}d=a+12|0;a=b+12|0;c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];d=0;while(1){if((d|0)==3)break;c[a+(d<<2)>>2]=0;d=d+1|0;}return;}function LB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=l;l=l+32|0;e=d;f=a+4|0;g=(((c[f>>2]|0)-(c[a>>2]|0)|0)/24|0)+1|0;h=XC(a)|0;if(h>>>0<g>>>0)Wz(a);else{i=c[a>>2]|0;j=((c[a+8>>2]|0)-i|0)/24|0;k=j<<1;YC(e,j>>>0<h>>>1>>>0?k>>>0<g>>>0?g:k:h,((c[f>>2]|0)-i|0)/24|0,a+12|0);i=e+8|0;f=c[i>>2]|0;KB(f,b);c[i>>2]=f+24;ZC(a,e);_C(e);l=d;return;}}function MB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+32|0;g=f+8|0;h=f;a:do{if((d-b|0)>1){i=(a[b>>0]|0)==76?b+1|0:b;switch(a[i>>0]|0){case 78:{j=hD(i,d,e)|0;k=(j|0)==(i|0)?b:j;break a;break;}case 90:{j=iD(i,d,e)|0;k=(j|0)==(i|0)?b:j;break a;break;}default:{j=jD(i,d,e)|0;if((j|0)==(i|0)){m=NB(i,d,e)|0;if((m|0)==(i|0)|(m|0)==(d|0)){k=b;break a;}if((a[m>>0]|0)!=73){k=b;break a;}i=EB(m,d,e)|0;if((i|0)==(m|0)){k=b;break a;}m=e+4|0;n=c[m>>2]|0;if(((n-(c[e>>2]|0)|0)/24|0)>>>0<2){k=b;break a;}FB(g,n+-24|0);n=c[m>>2]|0;o=0;while(1){if((o|0)==-1)break;p=o+-1|0;QA(n+(p*24|0)|0);o=p;}c[m>>2]=n+-24;o=a[g+11>>0]|0;p=o<<24>>24<0;TA(n+-48|0,p?c[g>>2]|0:g,p?c[g+4>>2]|0:o&255)|0;iB(g);k=i;break a;}if((j|0)==(d|0)){k=d;break a;}if((a[j>>0]|0)!=73){k=j;break a;}o=e+4|0;p=c[o>>2]|0;if((c[e>>2]|0)==(p|0)){k=b;break a;}c[h>>2]=c[e+12>>2];vB(g,p+-24|0,h);p=e+20|0;q=c[p>>2]|0;if(q>>>0<(c[e+24>>2]|0)>>>0){c[q>>2]=0;r=q+4|0;c[r>>2]=0;s=q+8|0;c[s>>2]=0;c[q+12>>2]=c[g+12>>2];c[q>>2]=c[g>>2];q=g+4|0;c[r>>2]=c[q>>2];r=g+8|0;c[s>>2]=c[r>>2];c[r>>2]=0;c[q>>2]=0;c[g>>2]=0;c[p>>2]=(c[p>>2]|0)+16;}else wB(e+16|0,g);RA(g);p=EB(j,d,e)|0;if((p|0)==(j|0)){k=b;break a;}q=c[o>>2]|0;if(((q-(c[e>>2]|0)|0)/24|0)>>>0<2){k=b;break a;}FB(g,q+-24|0);q=c[o>>2]|0;r=0;while(1){if((r|0)==-1)break;s=r+-1|0;QA(q+(s*24|0)|0);r=s;}c[o>>2]=q+-24;r=a[g+11>>0]|0;j=r<<24>>24<0;TA(q+-48|0,j?c[g>>2]|0:g,j?c[g+4>>2]|0:r&255)|0;iB(g);k=p;break a;}}}else k=b;}while(0);l=f;return k|0;}function NB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+32|0;g=f;a:do{if((d-b|0)>1?(a[b>>0]|0)==83:0){h=a[b+1>>0]|0;switch(h|0){case 97:{KC(g,20001);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 98:{HC(g,20016);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 115:{JC(g,19495);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 105:{LC(g,19591);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 111:{LC(g,19668);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 100:{gD(g,19745);i=e+4|0;j=c[i>>2]|0;if(j>>>0<(c[e+8>>2]|0)>>>0){KB(j,g);c[i>>2]=(c[i>>2]|0)+24;}else LB(e,g);QA(g);k=b+2|0;break a;break;}case 95:{i=c[e+16>>2]|0;if((i|0)==(c[e+20>>2]|0)){k=b;break a;}j=c[i+4>>2]|0;m=e+4|0;n=e+8|0;o=c[i>>2]|0;while(1){if((o|0)==(j|0))break;i=c[m>>2]|0;if((i|0)==(c[n>>2]|0))sB(e,o);else{rB(i,o);c[m>>2]=(c[m>>2]|0)+24;}o=o+24|0;}k=b+2|0;break a;break;}default:{o=h+-48|0;m=o>>>0<10;if(!m?(Pz(h)|0)==0:0){k=b;break a;}n=b+2|0;j=m?o:h+-55|0;while(1){if((n|0)==(d|0)){k=b;break a;}p=a[n>>0]|0;o=p<<24>>24;m=o+-48|0;i=m>>>0<10;if(!i?(Pz(o)|0)==0:0)break;n=n+1|0;j=(i?m:o+-55|0)+(j*36|0)|0;}if(p<<24>>24!=95){k=b;break a;}h=j+1|0;o=c[e+16>>2]|0;m=o;if(h>>>0>=(c[e+20>>2]|0)-o>>4>>>0){k=b;break a;}o=c[m+(h<<4)+4>>2]|0;i=e+4|0;q=e+8|0;r=c[m+(h<<4)>>2]|0;while(1){if((r|0)==(o|0))break;h=c[i>>2]|0;if((h|0)==(c[q>>2]|0))sB(e,r);else{rB(h,r);c[i>>2]=(c[i>>2]|0)+24;}r=r+24|0;}k=n+1|0;break a;}}}else k=b;}while(0);l=f;return k|0;}function OB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;a:do{if((d-b|0)>3?(a[b>>0]|0)==68:0){switch(a[b+1>>0]|0){case 84:case 116:break;default:{k=b;break a;}}m=b+2|0;n=SB(m,d,e)|0;if((!((n|0)==(m|0)|(n|0)==(d|0))?(a[n>>0]|0)==69:0)?(m=e+4|0,o=c[m>>2]|0,(c[e>>2]|0)!=(o|0)):0){FB(j,o+-24|0);pB(j,0,19991)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];o=0;while(1){if((o|0)==3)break;c[i+(o<<2)>>2]=0;o=o+1|0;}IB(g,h);JB((c[m>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);k=n+1|0;}else k=b;}else k=b;}while(0);l=f;return k|0;}function PB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f;j=f+24|0;a:do{if(((d-b|0)>3?(a[b>>0]|0)==68:0)?(a[b+1>>0]|0)==118:0){k=b+2|0;m=a[k>>0]|0;if((m+-49&255)<9){n=QB(k,d)|0;if((n|0)==(d|0)){o=b;break;}if((a[n>>0]|0)!=95){o=b;break;}p=n-k|0;q=n+1|0;if((q|0)==(d|0)){o=b;break;}if((a[q>>0]|0)!=112){r=mB(q,d,e)|0;if((r|0)==(q|0)){o=b;break;}q=e+4|0;if((c[e>>2]|0)==(c[q>>2]|0)){o=b;break;};c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;RB(i,k,p);pB(i,0,18713)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];s=0;while(1){if((s|0)==3)break;c[i+(s<<2)>>2]=0;s=s+1|0;}qB(h,18722)|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];s=0;while(1){if((s|0)==3)break;c[h+(s<<2)>>2]=0;s=s+1|0;}s=a[g+11>>0]|0;t=s<<24>>24<0;TA((c[q>>2]|0)+-24|0,t?c[g>>2]|0:g,t?c[g+4>>2]|0:s&255)|0;iB(g);iB(h);iB(i);o=r;break;}s=n+2|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;RB(i,k,p);pB(i,0,18724)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];t=0;while(1){if((t|0)==3)break;c[i+(t<<2)>>2]=0;t=t+1|0;}qB(h,18722)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];t=0;while(1){if((t|0)==3)break;c[h+(t<<2)>>2]=0;t=t+1|0;}IB(g,j);t=e+4|0;p=c[t>>2]|0;if(p>>>0<(c[e+8>>2]|0)>>>0){KB(p,g);c[t>>2]=(c[t>>2]|0)+24;}else LB(e,g);QA(g);iB(j);iB(h);iB(i);o=s;break;};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;t=0;while(1){if((t|0)==3)break;c[h+(t<<2)>>2]=0;t=t+1|0;}if(m<<24>>24!=95?(t=SB(k,d,e)|0,(t|0)!=(k|0)):0){s=e+4|0;p=c[s>>2]|0;if((c[e>>2]|0)!=(p|0)){FB(i,p+-24|0);p=h+11|0;if((a[p>>0]|0)<0){n=c[h>>2]|0;a[g>>0]=0;cB(n,g);c[h+4>>2]=0;}else{a[g>>0]=0;cB(h,g);a[p>>0]=0;}TB(h);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];p=0;while(1){if((p|0)==3)break;c[i+(p<<2)>>2]=0;p=p+1|0;}iB(i);p=c[s>>2]|0;m=0;while(1){if((m|0)==-1)break;n=m+-1|0;QA(p+(n*24|0)|0);m=n;}c[s>>2]=p+-24;u=t;v=44;}}else{u=k;v=44;}do{if((v|0)==44){if((((u|0)!=(d|0)?(a[u>>0]|0)==95:0)?(m=u+1|0,(m|0)!=(d|0)):0)?(n=mB(m,d,e)|0,(n|0)!=(m|0)):0){m=e+4|0;if((c[e>>2]|0)==(c[m>>2]|0))break;UB(i,18713,h);qB(i,18722)|0;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];r=0;while(1){if((r|0)==3)break;c[i+(r<<2)>>2]=0;r=r+1|0;}r=a[g+11>>0]|0;q=r<<24>>24<0;TA((c[m>>2]|0)+-24|0,q?c[g>>2]|0:g,q?c[g+4>>2]|0:r&255)|0;iB(g);iB(i);w=n;}else w=b;iB(h);o=w;break a;}}while(0);iB(h);o=b;}else o=b;}while(0);l=f;return o|0;}function QB(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a:do{if((b|0)!=(c|0)?(d=(a[b>>0]|0)==110?b+1|0:b,(d|0)!=(c|0)):0){e=a[d>>0]|0;if(e<<24>>24==48){f=d+1|0;break;}if((e+-49&255)<9){e=d;while(1){d=e+1|0;if((d|0)==(c|0)){f=c;break a;}if(((a[d>>0]|0)+-48|0)>>>0<10)e=d;else{f=d;break;}}}else f=b;}else f=b;}while(0);return f|0;}function RB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=l;l=l+16|0;g=f;if(e>>>0>4294967279)eB(b);if(e>>>0<11){a[b+11>>0]=e;h=b;}else{i=e+16&-16;j=fB(i)|0;c[b>>2]=j;c[b+8>>2]=i|-2147483648;c[b+4>>2]=e;h=j;}bB(h,d,e)|0;a[g>>0]=0;cB(h+e|0,g);l=f;return;}function SB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=l;l=l+208|0;g=f+176|0;h=f+112|0;i=f+88|0;j=f+64|0;k=f+48|0;m=f+160|0;n=f+36|0;o=f+148|0;p=f+136|0;q=f+124|0;r=f+24|0;s=f+12|0;t=f;u=d;v=u-b|0;a:do{if((v|0)>1){if((v|0)>3?(a[b>>0]|0)==103:0){w=(a[b+1>>0]|0)==115;x=w?b+2|0:b;y=w;}else{x=b;y=0;}do{switch(a[x>>0]|0){case 76:{z=WB(b,d,e)|0;break a;break;}case 84:{z=DB(b,d,e)|0;break a;break;}case 102:{z=XB(b,d,e)|0;break a;break;}case 97:{switch(a[x+1>>0]|0){case 97:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18677,AB(18677)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 100:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18695,AB(18695)|0);w=ZB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 110:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18695,AB(18695)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 78:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18738,AB(18738)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 83:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18741,AB(18741)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 116:{z=_B(b,d,e)|0;break a;break;}case 122:{z=$B(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}case 99:{switch(a[x+1>>0]|0){case 99:{z=aC(b,d,e)|0;break a;break;}case 108:{z=bC(b,d,e)|0;break a;break;}case 109:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18743,AB(18743)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 111:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18745,AB(18745)|0);A=ZB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 118:{z=cC(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}case 100:{switch(a[x+1>>0]|0){case 97:{A=x+2|0;w=SB(A,d,e)|0;if((w|0)==(A|0)){z=b;break a;}A=e+4|0;if((c[e>>2]|0)==(c[A>>2]|0)){z=b;break a;};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;b:do{if(y)RB(j,18747,AB(18747)|0);else{B=0;while(1){if((B|0)==3)break b;c[j+(B<<2)>>2]=0;B=B+1|0;}}}while(0);qB(j,18750)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];B=0;while(1){if((B|0)==3)break;c[j+(B<<2)>>2]=0;B=B+1|0;}FB(k,(c[A>>2]|0)+-24|0);B=a[k+11>>0]|0;C=B<<24>>24<0;TA(i,C?c[k>>2]|0:k,C?c[k+4>>2]|0:B&255)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];B=0;while(1){if((B|0)==3)break;c[i+(B<<2)>>2]=0;B=B+1|0;}B=c[A>>2]|0;C=B+-24|0;D=C+11|0;if((a[D>>0]|0)<0){E=c[C>>2]|0;a[g>>0]=0;cB(E,g);c[B+-20>>2]=0;}else{a[g>>0]=0;cB(C,g);a[D>>0]=0;}TB(C);c[C>>2]=c[h>>2];c[C+4>>2]=c[h+4>>2];c[C+8>>2]=c[h+8>>2];C=0;while(1){if((C|0)==3)break;c[h+(C<<2)>>2]=0;C=C+1|0;}iB(h);iB(k);iB(i);iB(j);z=w;break a;break;}case 99:{z=dC(b,d,e)|0;break a;break;}case 101:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18693,AB(18693)|0);A=ZB(C,d,g,e)|0;iB(g);z=(A|0)==(C|0)?b:A;break a;break;}case 108:{A=x+2|0;C=SB(A,d,e)|0;if((C|0)==(A|0)){z=b;break a;}A=e+4|0;if((c[e>>2]|0)==(c[A>>2]|0)){z=b;break a;};c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c:do{if(y)RB(j,18747,AB(18747)|0);else{D=0;while(1){if((D|0)==3)break c;c[j+(D<<2)>>2]=0;D=D+1|0;}}}while(0);qB(j,18760)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];w=0;while(1){if((w|0)==3)break;c[j+(w<<2)>>2]=0;w=w+1|0;}FB(k,(c[A>>2]|0)+-24|0);w=a[k+11>>0]|0;D=w<<24>>24<0;TA(i,D?c[k>>2]|0:k,D?c[k+4>>2]|0:w&255)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];w=0;while(1){if((w|0)==3)break;c[i+(w<<2)>>2]=0;w=w+1|0;}w=c[A>>2]|0;D=w+-24|0;B=D+11|0;if((a[B>>0]|0)<0){E=c[D>>2]|0;a[g>>0]=0;cB(E,g);c[w+-20>>2]=0;}else{a[g>>0]=0;cB(D,g);a[B>>0]=0;}TB(D);c[D>>2]=c[h>>2];c[D+4>>2]=c[h+4>>2];c[D+8>>2]=c[h+8>>2];D=0;while(1){if((D|0)==3)break;c[h+(D<<2)>>2]=0;D=D+1|0;}iB(h);iB(k);iB(i);iB(j);z=C;break a;break;}case 110:{z=eC(b,d,e)|0;break a;break;}case 115:{z=fC(b,d,e)|0;break a;break;}case 116:{z=gC(b,d,e)|0;break a;break;}case 118:{D=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18768,AB(18768)|0);A=YB(D,d,g,e)|0;iB(g);z=(A|0)==(D|0)?b:A;break a;break;}case 86:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18770,AB(18770)|0);D=YB(A,d,g,e)|0;iB(g);z=(D|0)==(A|0)?b:D;break a;break;}default:{z=b;break a;}}break;}case 101:{switch(a[x+1>>0]|0){case 111:{D=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18773,AB(18773)|0);A=YB(D,d,g,e)|0;iB(g);z=(A|0)==(D|0)?b:A;break a;break;}case 79:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18775,AB(18775)|0);D=YB(A,d,g,e)|0;iB(g);z=(D|0)==(A|0)?b:D;break a;break;}case 113:{D=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18778,AB(18778)|0);A=YB(D,d,g,e)|0;iB(g);z=(A|0)==(D|0)?b:A;break a;break;}default:{z=b;break a;}}break;}case 103:{switch(a[x+1>>0]|0){case 101:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18781,AB(18781)|0);D=YB(A,d,g,e)|0;iB(g);z=(D|0)==(A|0)?b:D;break a;break;}case 116:{D=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18711,AB(18711)|0);A=YB(D,d,g,e)|0;iB(g);z=(A|0)==(D|0)?b:A;break a;break;}default:{z=b;break a;}}break;}case 105:{if((a[x+1>>0]|0)!=120){z=b;break a;}A=b+2|0;D=SB(A,d,e)|0;if((D|0)==(A|0)){z=b;break a;}A=SB(D,d,e)|0;B=e+4|0;if((A|0)==(D|0)){D=c[B>>2]|0;w=0;while(1){if((w|0)==-1)break;E=w+-1|0;QA(D+(E*24|0)|0);w=E;}c[B>>2]=D+-24;z=b;break a;}w=c[B>>2]|0;if(((w-(c[e>>2]|0)|0)/24|0)>>>0<2){z=b;break a;}FB(g,w+-24|0);w=c[B>>2]|0;C=0;while(1){if((C|0)==-1)break;E=C+-1|0;QA(w+(E*24|0)|0);C=E;}c[B>>2]=w+-24;FB(h,w+-48|0);UB(n,18675,h);qB(n,18784)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];C=0;while(1){if((C|0)==3)break;c[n+(C<<2)>>2]=0;C=C+1|0;}C=a[g+11>>0]|0;w=C<<24>>24<0;TA(k,w?c[g>>2]|0:g,w?c[g+4>>2]|0:C&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];C=0;while(1){if((C|0)==3)break;c[k+(C<<2)>>2]=0;C=C+1|0;}qB(j,18722)|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];C=0;while(1){if((C|0)==3)break;c[j+(C<<2)>>2]=0;C=C+1|0;}IB(i,m);JB((c[B>>2]|0)+-24|0,i);QA(i);iB(m);iB(j);iB(k);iB(n);iB(h);iB(g);z=A;break a;break;}case 108:{switch(a[x+1>>0]|0){case 101:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18787,AB(18787)|0);w=YB(C,d,g,e)|0;iB(g);z=(w|0)==(C|0)?b:w;break a;break;}case 115:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18790,AB(18790)|0);C=YB(w,d,g,e)|0;iB(g);z=(C|0)==(w|0)?b:C;break a;break;}case 83:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18793,AB(18793)|0);w=YB(C,d,g,e)|0;iB(g);z=(w|0)==(C|0)?b:w;break a;break;}case 116:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18709,AB(18709)|0);C=YB(w,d,g,e)|0;iB(g);z=(C|0)==(w|0)?b:C;break a;break;}default:{z=b;break a;}}break;}case 109:{switch(a[x+1>>0]|0){case 105:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18797,AB(18797)|0);w=YB(C,d,g,e)|0;iB(g);z=(w|0)==(C|0)?b:w;break a;break;}case 73:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18799,AB(18799)|0);C=YB(w,d,g,e)|0;iB(g);z=(C|0)==(w|0)?b:C;break a;break;}case 108:{C=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18693,AB(18693)|0);w=YB(C,d,g,e)|0;iB(g);z=(w|0)==(C|0)?b:w;break a;break;}case 76:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18802,AB(18802)|0);C=YB(w,d,g,e)|0;iB(g);z=(C|0)==(w|0)?b:C;break a;break;}case 109:{C=b+2|0;if((C|0)!=(d|0)?(a[C>>0]|0)==95:0){w=b+3|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18805,AB(18805)|0);D=ZB(w,d,g,e)|0;iB(g);z=(D|0)==(w|0)?b:D;break a;}D=SB(C,d,e)|0;if((D|0)==(C|0)){z=b;break a;}C=e+4|0;w=c[C>>2]|0;if((c[e>>2]|0)==(w|0)){z=b;break a;}FB(i,w+-24|0);pB(i,0,18675)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];w=0;while(1){if((w|0)==3)break;c[i+(w<<2)>>2]=0;w=w+1|0;}qB(h,18808)|0;c[o>>2]=c[h>>2];c[o+4>>2]=c[h+4>>2];c[o+8>>2]=c[h+8>>2];w=0;while(1){if((w|0)==3)break;c[h+(w<<2)>>2]=0;w=w+1|0;}IB(g,o);JB((c[C>>2]|0)+-24|0,g);QA(g);iB(o);iB(h);iB(i);z=D;break a;break;}default:{z=b;break a;}}break;}case 110:{switch(a[x+1>>0]|0){case 119:case 97:{z=hC(b,d,e)|0;break a;break;}case 101:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18812,AB(18812)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 103:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18797,AB(18797)|0);w=ZB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 116:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18815,AB(18815)|0);A=ZB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 120:{A=b+2|0;w=iC(A,d,e)|0;z=(w|0)==(A|0)?b:w;break a;break;}default:{z=b;break a;}}break;}case 111:{switch(a[x+1>>0]|0){case 110:{z=eC(b,d,e)|0;break a;break;}case 111:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18817,AB(18817)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 114:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18820,AB(18820)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 82:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18822,AB(18822)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}default:{z=b;break a;}}break;}case 112:{switch(a[x+1>>0]|0){case 109:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18825,AB(18825)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 108:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18829,AB(18829)|0);A=YB(w,d,g,e)|0;iB(g);z=(A|0)==(w|0)?b:A;break a;break;}case 76:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18831,AB(18831)|0);w=YB(A,d,g,e)|0;iB(g);z=(w|0)==(A|0)?b:w;break a;break;}case 112:{w=b+2|0;if((w|0)!=(d|0)?(a[w>>0]|0)==95:0){A=b+3|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18834,AB(18834)|0);B=ZB(A,d,g,e)|0;iB(g);z=(B|0)==(A|0)?b:B;break a;}B=SB(w,d,e)|0;if((B|0)==(w|0)){z=b;break a;}w=e+4|0;A=c[w>>2]|0;if((c[e>>2]|0)==(A|0)){z=b;break a;}FB(i,A+-24|0);pB(i,0,18675)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];A=0;while(1){if((A|0)==3)break;c[i+(A<<2)>>2]=0;A=A+1|0;}qB(h,18837)|0;c[p>>2]=c[h>>2];c[p+4>>2]=c[h+4>>2];c[p+8>>2]=c[h+8>>2];A=0;while(1){if((A|0)==3)break;c[h+(A<<2)>>2]=0;A=A+1|0;}IB(g,p);JB((c[w>>2]|0)+-24|0,g);QA(g);iB(p);iB(h);iB(i);z=B;break a;break;}case 115:{A=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18829,AB(18829)|0);D=ZB(A,d,g,e)|0;iB(g);z=(D|0)==(A|0)?b:D;break a;break;}case 116:{z=jC(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}case 113:{if((a[x+1>>0]|0)!=117){z=b;break a;}D=b+2|0;A=SB(D,d,e)|0;if((A|0)==(D|0)){z=b;break a;}D=SB(A,d,e)|0;if((D|0)==(A|0)){A=e+4|0;C=c[A>>2]|0;E=0;while(1){if((E|0)==-1)break;F=E+-1|0;QA(C+(F*24|0)|0);E=F;}c[A>>2]=C+-24;z=b;break a;}E=SB(D,d,e)|0;B=e+4|0;if((E|0)==(D|0)){w=c[B>>2]|0;F=0;while(1){if((F|0)==-1)break;G=F+-1|0;QA(w+(G*24|0)|0);F=G;}F=w+-24|0;c[B>>2]=F;D=0;while(1){if((D|0)==-1)break;C=D+-1|0;QA(F+(C*24|0)|0);D=C;}c[B>>2]=w+-48;z=b;break a;}D=c[B>>2]|0;if(((D-(c[e>>2]|0)|0)/24|0)>>>0<3){z=b;break a;}FB(g,D+-24|0);D=c[B>>2]|0;F=0;while(1){if((F|0)==-1)break;C=F+-1|0;QA(D+(C*24|0)|0);F=C;}c[B>>2]=D+-24;FB(h,D+-48|0);F=c[B>>2]|0;w=0;while(1){if((w|0)==-1)break;C=w+-1|0;QA(F+(C*24|0)|0);w=C;}c[B>>2]=F+-24;FB(i,F+-48|0);UB(t,18675,i);qB(t,18841)|0;c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];w=0;while(1){if((w|0)==3)break;c[t+(w<<2)>>2]=0;w=w+1|0;}w=a[h+11>>0]|0;F=w<<24>>24<0;TA(s,F?c[h>>2]|0:h,F?c[h+4>>2]|0:w&255)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];w=0;while(1){if((w|0)==3)break;c[s+(w<<2)>>2]=0;w=w+1|0;}qB(r,18847)|0;c[n>>2]=c[r>>2];c[n+4>>2]=c[r+4>>2];c[n+8>>2]=c[r+8>>2];w=0;while(1){if((w|0)==3)break;c[r+(w<<2)>>2]=0;w=w+1|0;}w=a[g+11>>0]|0;F=w<<24>>24<0;TA(n,F?c[g>>2]|0:g,F?c[g+4>>2]|0:w&255)|0;c[k>>2]=c[n>>2];c[k+4>>2]=c[n+4>>2];c[k+8>>2]=c[n+8>>2];w=0;while(1){if((w|0)==3)break;c[n+(w<<2)>>2]=0;w=w+1|0;}qB(k,18673)|0;c[q>>2]=c[k>>2];c[q+4>>2]=c[k+4>>2];c[q+8>>2]=c[k+8>>2];w=0;while(1){if((w|0)==3)break;c[k+(w<<2)>>2]=0;w=w+1|0;}IB(j,q);JB((c[B>>2]|0)+-24|0,j);QA(j);iB(q);iB(k);iB(n);iB(r);iB(s);iB(t);iB(i);iB(h);iB(g);z=E;break a;break;}case 114:{switch(a[x+1>>0]|0){case 99:{z=kC(b,d,e)|0;break a;break;}case 109:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18853,AB(18853)|0);F=YB(w,d,g,e)|0;iB(g);z=(F|0)==(w|0)?b:F;break a;break;}case 77:{F=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18855,AB(18855)|0);w=YB(F,d,g,e)|0;iB(g);z=(w|0)==(F|0)?b:w;break a;break;}case 115:{w=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18858,AB(18858)|0);F=YB(w,d,g,e)|0;iB(g);z=(F|0)==(w|0)?b:F;break a;break;}case 83:{F=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18861,AB(18861)|0);w=YB(F,d,g,e)|0;iB(g);z=(w|0)==(F|0)?b:w;break a;break;}default:{z=b;break a;}}break;}case 115:{switch(a[x+1>>0]|0){case 99:{z=lC(b,d,e)|0;break a;break;}case 112:{z=mC(b,d,e)|0;break a;break;}case 114:{z=eC(b,d,e)|0;break a;break;}case 116:{z=nC(b,d,e)|0;break a;break;}case 122:{z=oC(b,d,e)|0;break a;break;}case 90:{if((u-x|0)<=2){z=b;break a;}switch(a[x+2>>0]|0){case 84:{z=pC(b,d,e)|0;break a;break;}case 102:{z=qC(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}default:{z=b;break a;}}break;}case 116:{switch(a[x+1>>0]|0){case 105:case 101:{z=rC(b,d,e)|0;break a;break;}case 114:{sC(g,18865);w=e+4|0;F=c[w>>2]|0;if(F>>>0<(c[e+8>>2]|0)>>>0){KB(F,g);c[w>>2]=(c[w>>2]|0)+24;}else LB(e,g);QA(g);z=b+2|0;break a;break;}case 119:{z=tC(b,d,e)|0;break a;break;}default:{z=b;break a;}}break;}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{z=eC(b,d,e)|0;break a;break;}default:{z=b;break a;}}}while(0);}else z=b;}while(0);l=f;return z|0;}function TB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=b+11|0;e=a[d>>0]|0;f=e<<24>>24<0;if(f){g=c[b+4>>2]|0;h=(c[b+8>>2]&2147483647)+-1|0;}else{g=e&255;h=10;}i=g>>>0<11;j=i?10:(g+16&-16)+-1|0;a:do{if((j|0)!=(h|0)){do{if(i){k=c[b>>2]|0;if(f){l=0;m=k;n=b;o=12;}else{bB(b,k,(e&255)+1|0)|0;gB(k);o=15;}}else{k=j+1|0;p=fB(k)|0;if(j>>>0<=h>>>0&(p|0)==0)break a;q=a[d>>0]|0;if(q<<24>>24<0){l=1;m=c[b>>2]|0;n=p;o=12;break;}else{bB(p,b,(q&255)+1|0)|0;r=p;s=k;t=b+4|0;o=14;break;}}}while(0);if((o|0)==12){k=b+4|0;bB(n,m,(c[k>>2]|0)+1|0)|0;gB(m);if(l){r=n;s=j+1|0;t=k;o=14;}else o=15;}if((o|0)==14){c[b+8>>2]=s|-2147483648;c[t>>2]=g;c[b>>2]=r;break;}else if((o|0)==15){a[d>>0]=g;break;}}}while(0);return;}function UB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=0;while(1){if((f|0)==3)break;c[b+(f<<2)>>2]=0;f=f+1|0;}f=AB(d)|0;g=e+11|0;h=a[g>>0]|0;i=h<<24>>24<0?c[e+4>>2]|0:h&255;VB(b,d,f,i+f|0);TA(b,(a[g>>0]|0)<0?c[e>>2]|0:e,i)|0;return;}function VB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=l;l=l+16|0;h=g;if(f>>>0>4294967279)eB(b);if(f>>>0<11){a[b+11>>0]=e;i=b;}else{j=f+16&-16;f=fB(j)|0;c[b>>2]=f;c[b+8>>2]=j|-2147483648;c[b+4>>2]=e;i=f;}bB(i,d,e)|0;a[h>>0]=0;cB(i+e|0,h);l=g;return;}function WB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+96|0;g=f+64|0;h=f+48|0;i=f+36|0;j=f+24|0;k=f+12|0;m=f;a:do{if((d-b|0)>3?(a[b>>0]|0)==76:0){n=b+1|0;do{switch(a[n>>0]|0){case 84:{o=b;break a;break;}case 119:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19867,AB(19867)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 98:{if((a[b+3>>0]|0)!=69){o=b;break a;}switch(a[b+2>>0]|0){case 48:{sC(g,19875);q=e+4|0;p=c[q>>2]|0;if(p>>>0<(c[e+8>>2]|0)>>>0){KB(p,g);c[q>>2]=(c[q>>2]|0)+24;}else LB(e,g);QA(g);o=b+4|0;break a;break;}case 49:{cD(g,19881);q=e+4|0;p=c[q>>2]|0;if(p>>>0<(c[e+8>>2]|0)>>>0){KB(p,g);c[q>>2]=(c[q>>2]|0)+24;}else LB(e,g);QA(g);o=b+4|0;break a;break;}default:{o=b;break a;}}break;}case 99:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19886,AB(19886)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 97:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19891,AB(19891)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 104:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19903,AB(19903)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 115:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19917,AB(19917)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 116:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19923,AB(19923)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 105:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,22268,AB(22268)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 106:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19938,AB(19938)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 108:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19940,AB(19940)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 109:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19942,AB(19942)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 120:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19945,AB(19945)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 121:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19948,AB(19948)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 110:{p=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19952,AB(19952)|0);q=bD(p,d,g,e)|0;iB(g);o=(q|0)==(p|0)?b:q;break a;break;}case 111:{q=b+2|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,19961,AB(19961)|0);p=bD(q,d,g,e)|0;iB(g);o=(p|0)==(q|0)?b:p;break a;break;}case 102:{p=b+2|0;q=dD(p,d,e)|0;o=(q|0)==(p|0)?b:q;break a;break;}case 100:{q=b+2|0;p=eD(q,d,e)|0;o=(p|0)==(q|0)?b:p;break a;break;}case 101:{p=b+2|0;q=fD(p,d,e)|0;o=(q|0)==(p|0)?b:q;break a;break;}case 95:{if((a[b+2>>0]|0)!=90){o=b;break a;}q=b+3|0;p=jB(q,d,e)|0;if((p|0)==(q|0)|(p|0)==(d|0)){o=b;break a;}o=(a[p>>0]|0)==69?p+1|0:b;break a;break;}default:{p=mB(n,d,e)|0;if((p|0)==(n|0)|(p|0)==(d|0)){o=b;break a;}if((a[p>>0]|0)==69){o=p+1|0;break a;}q=p;while(1){if((q|0)==(d|0)){o=b;break a;}r=a[q>>0]|0;if(((r<<24>>24)+-48|0)>>>0>=10)break;q=q+1|0;}if(!((q|0)!=(p|0)&r<<24>>24==69)){o=b;break a;}s=e+4|0;t=c[s>>2]|0;if((c[e>>2]|0)==(t|0)){o=b;break a;}FB(k,t+-24|0);pB(k,0,18675)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];t=0;while(1){if((t|0)==3)break;c[k+(t<<2)>>2]=0;t=t+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];t=0;while(1){if((t|0)==3)break;c[j+(t<<2)>>2]=0;t=t+1|0;}c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;QC(m,p,q);t=a[m+11>>0]|0;u=t<<24>>24<0;TA(i,u?c[m>>2]|0:m,u?c[m+4>>2]|0:t&255)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];t=0;while(1){if((t|0)==3)break;c[i+(t<<2)>>2]=0;t=t+1|0;}IB(g,h);JB((c[s>>2]|0)+-24|0,g);QA(g);iB(h);iB(m);iB(i);iB(j);iB(k);o=q+1|0;break a;}}}while(0);}else o=b;}while(0);l=f;return o|0;}function XB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+80|0;g=f+64|0;h=f+40|0;i=f+12|0;j=f+24|0;k=f;a:do{if((d-b|0)>2?(a[b>>0]|0)==102:0){switch(a[b+1>>0]|0){case 112:{m=nB(b+2|0,d,g)|0;n=QB(m,d)|0;if((n|0)!=(d|0)?(a[n>>0]|0)==95:0){c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;QC(j,m,n);pB(j,0,19864)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];m=0;while(1){if((m|0)==3)break;c[j+(m<<2)>>2]=0;m=m+1|0;}IB(h,i);m=e+4|0;o=c[m>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){KB(o,h);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,h);QA(h);iB(i);iB(j);p=n+1|0;}else p=b;q=p;break a;break;}case 76:break;default:{q=b;break a;}}m=QB(b+2|0,d)|0;if((((m|0)!=(d|0)?(a[m>>0]|0)==112:0)?(o=nB(m+1|0,d,g)|0,m=QB(o,d)|0,(m|0)!=(d|0)):0)?(a[m>>0]|0)==95:0){c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;QC(j,o,m);pB(j,0,19864)|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}IB(h,k);o=e+4|0;n=c[o>>2]|0;if(n>>>0<(c[e+8>>2]|0)>>>0){KB(n,h);c[o>>2]=(c[o>>2]|0)+24;}else LB(e,h);QA(h);iB(k);iB(j);r=m+1|0;}else r=b;q=r;}else q=b;}while(0);l=f;return q|0;}function YB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;g=l;l=l+96|0;h=g+84|0;i=g+72|0;j=g+60|0;k=g+48|0;m=g+36|0;n=g+24|0;o=g+12|0;p=g;q=SB(b,d,f)|0;do{if((q|0)!=(b|0)){r=SB(q,d,f)|0;s=f+4|0;if((r|0)==(q|0)){t=c[s>>2]|0;u=0;while(1){if((u|0)==-1)break;v=u+-1|0;QA(t+(v*24|0)|0);u=v;}c[s>>2]=t+-24;w=b;break;}u=c[s>>2]|0;if(((u-(c[f>>2]|0)|0)/24|0)>>>0>=2){FB(i,u+-24|0);u=c[s>>2]|0;v=0;while(1){if((v|0)==-1)break;x=v+-1|0;QA(u+(x*24|0)|0);v=x;}c[s>>2]=u+-24;FB(j,u+-48|0);v=c[s>>2]|0;t=v+-24|0;x=t+11|0;if((a[x>>0]|0)<0){y=c[t>>2]|0;a[h>>0]=0;cB(y,h);c[v+-20>>2]=0;}else{a[h>>0]=0;cB(t,h);a[x>>0]=0;}x=AB(18711)|0;v=e+11|0;y=a[v>>0]|0;z=e+4|0;if((x|0)==((y<<24>>24<0?c[z>>2]|0:y&255)|0)?(BB(e,18711,x)|0)==0:0)NC(t,40);UB(p,18675,j);qB(p,18961)|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];x=0;while(1){if((x|0)==3)break;c[p+(x<<2)>>2]=0;x=x+1|0;}x=a[v>>0]|0;s=x<<24>>24<0;TA(o,s?c[e>>2]|0:e,s?c[z>>2]|0:x&255)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];x=0;while(1){if((x|0)==3)break;c[o+(x<<2)>>2]=0;x=x+1|0;}qB(n,18670)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];x=0;while(1){if((x|0)==3)break;c[n+(x<<2)>>2]=0;x=x+1|0;}x=a[i+11>>0]|0;s=x<<24>>24<0;TA(m,s?c[i>>2]|0:i,s?c[i+4>>2]|0:x&255)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];x=0;while(1){if((x|0)==3)break;c[m+(x<<2)>>2]=0;x=x+1|0;}qB(k,18673)|0;c[h>>2]=c[k>>2];c[h+4>>2]=c[k+4>>2];c[h+8>>2]=c[k+8>>2];x=0;while(1){if((x|0)==3)break;c[k+(x<<2)>>2]=0;x=x+1|0;}x=a[h+11>>0]|0;s=x<<24>>24<0;TA(t,s?c[h>>2]|0:h,s?c[h+4>>2]|0:x&255)|0;iB(h);iB(k);iB(m);iB(n);iB(o);iB(p);x=AB(18711)|0;s=a[v>>0]|0;if((x|0)==((s<<24>>24<0?c[z>>2]|0:s&255)|0)?(BB(e,18711,x)|0)==0:0)NC(t,41);iB(j);iB(i);w=r;}else w=b;}else w=b;}while(0);l=g;return w|0;}function ZB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+64|0;h=g+48|0;i=g+36|0;j=g+24|0;k=g+12|0;m=g;n=SB(b,d,f)|0;if((n|0)!=(b|0)?(d=f+4|0,(c[f>>2]|0)!=(c[d>>2]|0)):0){HB(k,e,18675);FB(m,(c[d>>2]|0)+-24|0);e=a[m+11>>0]|0;f=e<<24>>24<0;TA(k,f?c[m>>2]|0:m,f?c[m+4>>2]|0:e&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];e=0;while(1){if((e|0)==3)break;c[k+(e<<2)>>2]=0;e=e+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];e=0;while(1){if((e|0)==3)break;c[j+(e<<2)>>2]=0;e=e+1|0;}e=c[d>>2]|0;d=e+-24|0;f=d+11|0;if((a[f>>0]|0)<0){o=c[d>>2]|0;a[h>>0]=0;cB(o,h);c[e+-20>>2]=0;}else{a[h>>0]=0;cB(d,h);a[f>>0]=0;}TB(d);c[d>>2]=c[i>>2];c[d+4>>2]=c[i+4>>2];c[d+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}iB(i);iB(j);iB(m);iB(k);p=n;}else p=b;l=g;return p|0;}function _B(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+48|0;g=f+36|0;h=f+24|0;i=f+12|0;j=f;if(((((d-b|0)>2?(a[b>>0]|0)==97:0)?(a[b+1>>0]|0)==116:0)?(k=b+2|0,m=mB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,19854)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}d=c[k>>2]|0;k=d+-24|0;e=k+11|0;if((a[e>>0]|0)<0){n=c[k>>2]|0;a[g>>0]=0;cB(n,g);c[d+-20>>2]=0;}else{a[g>>0]=0;cB(k,g);a[e>>0]=0;}TB(k);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];k=0;while(1){if((k|0)==3)break;c[h+(k<<2)>>2]=0;k=k+1|0;}iB(h);iB(i);iB(j);o=m;}else o=b;l=f;return o|0;}function $B(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+48|0;g=f+36|0;h=f+24|0;i=f+12|0;j=f;if(((((d-b|0)>2?(a[b>>0]|0)==97:0)?(a[b+1>>0]|0)==122:0)?(k=b+2|0,m=SB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,19854)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}d=c[k>>2]|0;k=d+-24|0;e=k+11|0;if((a[e>>0]|0)<0){n=c[k>>2]|0;a[g>>0]=0;cB(n,g);c[d+-20>>2]=0;}else{a[g>>0]=0;cB(k,g);a[e>>0]=0;}TB(k);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];k=0;while(1){if((k|0)==3)break;c[h+(k<<2)>>2]=0;k=k+1|0;}iB(h);iB(i);iB(j);o=m;}else o=b;l=f;return o|0;}function aC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;if((((((d-b|0)>2?(a[b>>0]|0)==99:0)?(a[b+1>>0]|0)==99:0)?(o=b+2|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=SB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;FB(n,d+-48|0);pB(n,0,19842)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=0;while(1){if((d|0)==3)break;c[n+(d<<2)>>2]=0;d=d+1|0;}qB(m,18922)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];d=0;while(1){if((d|0)==3)break;c[m+(d<<2)>>2]=0;d=d+1|0;}d=a[g+11>>0]|0;e=d<<24>>24<0;TA(k,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];d=0;while(1){if((d|0)==3)break;c[k+(d<<2)>>2]=0;d=d+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}IB(h,i);JB((c[p>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);r=o;}else r=b;l=f;return r|0;}function bC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=l;l=l+32|0;g=f+12|0;h=f;a:do{if(((((d-b|0)>3?(a[b>>0]|0)==99:0)?(a[b+1>>0]|0)==108:0)?(i=b+2|0,j=SB(i,d,e)|0,!((j|0)==(i|0)|(j|0)==(d|0))):0)?(i=e+4|0,k=c[i>>2]|0,(c[e>>2]|0)!=(k|0)):0){m=k+-12|0;n=a[m+11>>0]|0;o=n<<24>>24<0;TA(k+-24|0,o?c[m>>2]|0:m,o?c[k+-8>>2]|0:n&255)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;n=0;while(1){if((n|0)==3)break;c[h+(n<<2)>>2]=0;n=n+1|0;}n=c[i>>2]|0;k=n+-12|0;o=k+11|0;if((a[o>>0]|0)<0){m=c[k>>2]|0;a[g>>0]=0;cB(m,g);c[n+-8>>2]=0;}else{a[g>>0]=0;cB(k,g);a[o>>0]=0;}TB(k);c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];k=0;while(1){if((k|0)==3)break;c[h+(k<<2)>>2]=0;k=k+1|0;}iB(h);qB((c[i>>2]|0)+-24|0,18675)|0;k=g+11|0;o=g+4|0;n=0;m=j;while(1){if((a[m>>0]|0)==69)break;p=SB(m,d,e)|0;if((p|0)==(m|0)|(p|0)==(d|0)){q=b;break a;}r=c[i>>2]|0;if((c[e>>2]|0)==(r|0)){q=b;break a;}FB(g,r+-24|0);r=c[i>>2]|0;s=0;while(1){if((s|0)==-1)break;t=s+-1|0;QA(r+(t*24|0)|0);s=t;}s=r+-24|0;c[i>>2]=s;t=a[k>>0]|0;u=t<<24>>24<0;v=u?c[o>>2]|0:t&255;if(v){if((c[e>>2]|0)==(s|0)){w=0;x=b;y=m;}else{TA(r+-48|0,u?c[g>>2]|0:g,v)|0;w=1;x=n;y=p;}}else{w=1;x=n;y=p;}iB(g);if(w){n=x;m=y;}else{q=x;break a;}}n=c[i>>2]|0;if((c[e>>2]|0)!=(n|0)){qB(n+-24|0,18673)|0;q=m+1|0;}else q=b;}else q=b;}while(0);l=f;return q|0;}function cC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;a:do{if((((d-b|0)>2?(a[b>>0]|0)==99:0)?(a[b+1>>0]|0)==118:0)?(o=e+63|0,p=a[o>>0]|0,a[o>>0]=0,q=b+2|0,r=mB(q,d,e)|0,a[o>>0]=p,!((r|0)==(q|0)|(r|0)==(d|0))):0){if((a[r>>0]|0)!=95){q=SB(r,d,e)|0;if((q|0)==(r|0)){s=b;break;}else t=q;}else{q=r+1|0;if((q|0)==(d|0)){s=b;break;}r=a[q>>0]|0;b:do{if(r<<24>>24==69){p=e+4|0;o=c[p>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;VC(o);c[p>>2]=(c[p>>2]|0)+24;u=q;break;}else{WC(e);u=q;break;}}else{p=q;o=r;while(1){if(o<<24>>24==69){u=p;break b;}v=SB(p,d,e)|0;if((v|0)==(p|0)|(v|0)==(d|0)){s=b;break a;}p=v;o=a[v>>0]|0;}}}while(0);t=u+1|0;}r=e+4|0;q=c[r>>2]|0;if(((q-(c[e>>2]|0)|0)/24|0)>>>0>=2){FB(g,q+-24|0);q=c[r>>2]|0;o=0;while(1){if((o|0)==-1)break;p=o+-1|0;QA(q+(p*24|0)|0);o=p;}c[r>>2]=q+-24;FB(n,q+-48|0);pB(n,0,18675)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];o=0;while(1){if((o|0)==3)break;c[n+(o<<2)>>2]=0;o=o+1|0;}qB(m,19839)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];o=0;while(1){if((o|0)==3)break;c[m+(o<<2)>>2]=0;o=o+1|0;}o=a[g+11>>0]|0;q=o<<24>>24<0;TA(k,q?c[g>>2]|0:g,q?c[g+4>>2]|0:o&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];o=0;while(1){if((o|0)==3)break;c[k+(o<<2)>>2]=0;o=o+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}IB(h,i);JB((c[r>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);s=t;}else s=b;}else s=b;}while(0);l=f;return s|0;}function dC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;if((((((d-b|0)>2?(a[b>>0]|0)==100:0)?(a[b+1>>0]|0)==99:0)?(o=b+2|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=SB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;FB(n,d+-48|0);pB(n,0,19825)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=0;while(1){if((d|0)==3)break;c[n+(d<<2)>>2]=0;d=d+1|0;}qB(m,18922)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];d=0;while(1){if((d|0)==3)break;c[m+(d<<2)>>2]=0;d=d+1|0;}d=a[g+11>>0]|0;e=d<<24>>24<0;TA(k,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];d=0;while(1){if((d|0)==3)break;c[k+(d<<2)>>2]=0;d=d+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}IB(h,i);JB((c[p>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);r=o;}else r=b;l=f;return r|0;}function eC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;f=l;l=l+32|0;g=f+12|0;h=f;i=d;a:do{if((i-b|0)>2){if((a[b>>0]|0)==103){j=(a[b+1>>0]|0)==115;k=j;m=j?b+2|0:b;}else{k=0;m=b;}j=xC(m,d,e)|0;if((j|0)!=(m|0)){if(!k){n=j;break;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){n=b;break;}pB(o+-24|0,0,18747)|0;n=j;break;}if(((i-m|0)>2?(a[m>>0]|0)==115:0)?(a[m+1>>0]|0)==114:0){j=m+2|0;if((a[j>>0]|0)==78){o=m+3|0;p=yC(o,d,e)|0;if((p|0)==(o|0)|(p|0)==(d|0)){n=b;break;}o=EB(p,d,e)|0;q=e+4|0;do{if((o|0)==(p|0)){r=p;s=e;}else{t=c[q>>2]|0;if(((t-(c[e>>2]|0)|0)/24|0)>>>0<2){n=b;break a;}FB(g,t+-24|0);t=c[q>>2]|0;u=0;while(1){if((u|0)==-1)break;v=u+-1|0;QA(t+(v*24|0)|0);u=v;}c[q>>2]=t+-24;u=a[g+11>>0]|0;v=u<<24>>24<0;TA(t+-48|0,v?c[g>>2]|0:g,v?c[g+4>>2]|0:u&255)|0;if((o|0)!=(d|0)){iB(g);r=o;s=e;break;}u=c[q>>2]|0;v=0;while(1){if((v|0)==-1)break;w=v+-1|0;QA(u+(w*24|0)|0);v=w;}c[q>>2]=u+-24;iB(g);n=b;break a;}}while(0);o=h+11|0;p=h+4|0;v=r;while(1){if((a[v>>0]|0)==69)break;t=zC(v,d,e)|0;if((t|0)==(v|0)|(t|0)==(d|0)){n=b;break a;}w=c[q>>2]|0;if(((w-(c[s>>2]|0)|0)/24|0)>>>0<2){n=b;break a;}FB(g,w+-24|0);w=c[q>>2]|0;x=0;while(1){if((x|0)==-1)break;y=x+-1|0;QA(w+(y*24|0)|0);x=y;}c[q>>2]=w+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];x=0;while(1){if((x|0)==3)break;c[g+(x<<2)>>2]=0;x=x+1|0;}x=a[o>>0]|0;w=x<<24>>24<0;TA((c[q>>2]|0)+-24|0,w?c[h>>2]|0:h,w?c[p>>2]|0:x&255)|0;iB(h);iB(g);v=t;}p=v+1|0;o=xC(p,d,e)|0;if((o|0)==(p|0)){p=c[q>>2]|0;if((c[e>>2]|0)==(p|0)){n=b;break;}x=0;while(1){if((x|0)==-1)break;w=x+-1|0;QA(p+(w*24|0)|0);x=w;}c[q>>2]=p+-24;n=b;break;}x=c[q>>2]|0;if(((x-(c[s>>2]|0)|0)/24|0)>>>0<2){n=b;break;}FB(g,x+-24|0);x=c[q>>2]|0;v=0;while(1){if((v|0)==-1)break;w=v+-1|0;QA(x+(w*24|0)|0);v=w;}c[q>>2]=x+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];v=0;while(1){if((v|0)==3)break;c[g+(v<<2)>>2]=0;v=v+1|0;}v=a[h+11>>0]|0;x=v<<24>>24<0;TA((c[q>>2]|0)+-24|0,x?c[h>>2]|0:h,x?c[h+4>>2]|0:v&255)|0;iB(h);iB(g);n=o;break;}v=yC(j,d,e)|0;if((v|0)!=(j|0)){x=EB(v,d,e)|0;if((x|0)==(v|0))z=v;else{v=e+4|0;p=c[v>>2]|0;if(((p-(c[e>>2]|0)|0)/24|0)>>>0<2){n=b;break;}FB(g,p+-24|0);p=c[v>>2]|0;w=0;while(1){if((w|0)==-1)break;u=w+-1|0;QA(p+(u*24|0)|0);w=u;}c[v>>2]=p+-24;w=a[g+11>>0]|0;o=w<<24>>24<0;TA(p+-48|0,o?c[g>>2]|0:g,o?c[g+4>>2]|0:w&255)|0;iB(g);z=x;}w=xC(z,d,e)|0;if((w|0)==(z|0)){o=e+4|0;q=c[o>>2]|0;if((c[e>>2]|0)==(q|0)){n=b;break;}u=0;while(1){if((u|0)==-1)break;y=u+-1|0;QA(q+(y*24|0)|0);u=y;}c[o>>2]=q+-24;n=b;break;}u=e+4|0;x=c[u>>2]|0;if(((x-(c[e>>2]|0)|0)/24|0)>>>0<2){n=b;break;}FB(g,x+-24|0);x=c[u>>2]|0;p=0;while(1){if((p|0)==-1)break;v=p+-1|0;QA(x+(v*24|0)|0);p=v;}c[u>>2]=x+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];p=0;while(1){if((p|0)==3)break;c[g+(p<<2)>>2]=0;p=p+1|0;}p=a[h+11>>0]|0;x=p<<24>>24<0;TA((c[u>>2]|0)+-24|0,x?c[h>>2]|0:h,x?c[h+4>>2]|0:p&255)|0;iB(h);iB(g);n=w;break;}p=zC(j,d,e)|0;if(!((p|0)==(j|0)|(p|0)==(d|0))){if(k){x=e+4|0;q=c[x>>2]|0;if((c[e>>2]|0)==(q|0)){n=b;break;}pB(q+-24|0,0,18747)|0;A=x;}else A=e+4|0;x=h+11|0;q=h+4|0;o=p;while(1){if((a[o>>0]|0)==69)break;p=zC(o,d,e)|0;if((p|0)==(o|0)|(p|0)==(d|0)){n=b;break a;}v=c[A>>2]|0;if(((v-(c[e>>2]|0)|0)/24|0)>>>0<2){n=b;break a;}FB(g,v+-24|0);v=c[A>>2]|0;y=0;while(1){if((y|0)==-1)break;B=y+-1|0;QA(v+(B*24|0)|0);y=B;}c[A>>2]=v+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];y=0;while(1){if((y|0)==3)break;c[g+(y<<2)>>2]=0;y=y+1|0;}y=a[x>>0]|0;v=y<<24>>24<0;TA((c[A>>2]|0)+-24|0,v?c[h>>2]|0:h,v?c[q>>2]|0:y&255)|0;iB(h);iB(g);o=p;}q=o+1|0;x=xC(q,d,e)|0;if((x|0)==(q|0)){q=c[A>>2]|0;if((c[e>>2]|0)==(q|0)){n=b;break;}j=0;while(1){if((j|0)==-1)break;w=j+-1|0;QA(q+(w*24|0)|0);j=w;}c[A>>2]=q+-24;n=b;break;}j=c[A>>2]|0;if(((j-(c[e>>2]|0)|0)/24|0)>>>0>=2){FB(g,j+-24|0);j=c[A>>2]|0;o=0;while(1){if((o|0)==-1)break;w=o+-1|0;QA(j+(w*24|0)|0);o=w;}c[A>>2]=j+-24;pB(g,0,18747)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];o=0;while(1){if((o|0)==3)break;c[g+(o<<2)>>2]=0;o=o+1|0;}o=a[h+11>>0]|0;j=o<<24>>24<0;TA((c[A>>2]|0)+-24|0,j?c[h>>2]|0:h,j?c[h+4>>2]|0:o&255)|0;iB(h);iB(g);n=x;}else n=b;}else n=b;}else n=b;}else n=b;}while(0);l=f;return n|0;}function fC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+12|0;h=f;if((((((d-b|0)>2?(a[b>>0]|0)==100:0)?(a[b+1>>0]|0)==115:0)?(i=b+2|0,j=SB(i,d,e)|0,(j|0)!=(i|0)):0)?(i=SB(j,d,e)|0,(i|0)!=(j|0)):0)?(j=e+4|0,d=c[j>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[j>>2]|0;e=0;while(1){if((e|0)==-1)break;k=e+-1|0;QA(d+(k*24|0)|0);e=k;}c[j>>2]=d+-24;UB(h,18966,g);d=a[h+11>>0]|0;e=d<<24>>24<0;TA((c[j>>2]|0)+-24|0,e?c[h>>2]|0:h,e?c[h+4>>2]|0:d&255)|0;iB(h);iB(g);m=i;}else m=b;l=f;return m|0;}function gC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f+12|0;h=f;if((((((d-b|0)>2?(a[b>>0]|0)==100:0)?(a[b+1>>0]|0)==116:0)?(i=b+2|0,j=SB(i,d,e)|0,(j|0)!=(i|0)):0)?(i=eC(j,d,e)|0,(i|0)!=(j|0)):0)?(j=e+4|0,d=c[j>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[j>>2]|0;e=0;while(1){if((e|0)==-1)break;k=e+-1|0;QA(d+(k*24|0)|0);e=k;}c[j>>2]=d+-24;UB(h,18964,g);d=a[h+11>>0]|0;e=d<<24>>24<0;TA((c[j>>2]|0)+-24|0,e?c[h>>2]|0:h,e?c[h+4>>2]|0:d&255)|0;iB(h);iB(g);m=i;}else m=b;l=f;return m|0;}function hC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;f=l;l=l+112|0;g=f+88|0;h=f+76|0;i=f+64|0;j=f+40|0;k=f+16|0;m=f;n=f+52|0;o=d;a:do{if((o-b|0)>3){p=a[b>>0]|0;if(p<<24>>24==103){q=(a[b+1>>0]|0)==115;r=q?b+2|0:b;s=q;t=r;u=a[r>>0]|0;}else{s=0;t=b;u=p;}if(u<<24>>24==110){p=a[t+1>>0]|0;switch(p<<24>>24){case 97:case 119:break;default:{v=b;break a;}}r=p<<24>>24==97;p=t+2|0;b:do{if((p|0)!=(d|0)){q=0;w=p;while(1){if((a[w>>0]|0)==95)break;x=SB(w,d,e)|0;if((x|0)==(w|0)|(x|0)==(d|0))break b;else{q=1;w=x;}}x=w+1|0;y=mB(x,d,e)|0;if(!((y|0)==(x|0)|(y|0)==(d|0))){x=a[y>>0]|0;c:do{if(!((o-y|0)>2&x<<24>>24==112)){if(x<<24>>24==69){z=0;A=y;}else break b;}else{if((a[y+1>>0]|0)!=105)break b;B=y+2|0;while(1){if((a[B>>0]|0)==69){z=1;A=B;break c;}C=B;B=SB(B,d,e)|0;if((B|0)==(C|0)|(B|0)==(d|0))break b;}}}while(0);c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;y=0;while(1){if((y|0)==3)break;c[h+(y<<2)>>2]=0;y=y+1|0;}if(z){y=e+4|0;x=c[y>>2]|0;if((c[e>>2]|0)==(x|0)){D=b;E=1;}else{FB(i,x+-24|0);x=h+11|0;if((a[x>>0]|0)<0){w=c[h>>2]|0;a[g>>0]=0;cB(w,g);c[h+4>>2]=0;}else{a[g>>0]=0;cB(h,g);a[x>>0]=0;}TB(h);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];x=0;while(1){if((x|0)==3)break;c[i+(x<<2)>>2]=0;x=x+1|0;}iB(i);x=c[y>>2]|0;w=0;while(1){if((w|0)==-1)break;B=w+-1|0;QA(x+(B*24|0)|0);w=B;}w=x+-24|0;c[y>>2]=w;F=y;G=e;H=w;I=33;}}else{w=e+4|0;F=w;G=e;H=c[w>>2]|0;I=33;}if((I|0)==33)if((c[G>>2]|0)==(H|0)){D=b;E=1;}else{FB(i,H+-24|0);w=c[F>>2]|0;B=0;while(1){if((B|0)==-1)break;C=B+-1|0;QA(w+(C*24|0)|0);B=C;}B=w+-24|0;c[F>>2]=B;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;y=0;while(1){if((y|0)==3)break;c[j+(y<<2)>>2]=0;y=y+1|0;}if(q){if((c[G>>2]|0)==(B|0)){J=b;K=1;}else{FB(k,w+-48|0);y=j+11|0;if((a[y>>0]|0)<0){x=c[j>>2]|0;a[g>>0]=0;cB(x,g);c[j+4>>2]=0;}else{a[g>>0]=0;cB(j,g);a[y>>0]=0;}TB(j);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];y=0;while(1){if((y|0)==3)break;c[k+(y<<2)>>2]=0;y=y+1|0;}iB(k);y=c[F>>2]|0;w=0;while(1){if((w|0)==-1)break;B=w+-1|0;QA(y+(B*24|0)|0);w=B;}c[F>>2]=y+-24;I=52;}}else I=52;if((I|0)==52){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;w=0;while(1){if((w|0)==3)break;c[g+(w<<2)>>2]=0;w=w+1|0;}if(s)uC(g,18747);if(r)qB(g,18957)|0;else qB(g,18707)|0;if(q){UB(m,18675,j);qB(m,18961)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];w=0;while(1){if((w|0)==3)break;c[m+(w<<2)>>2]=0;w=w+1|0;}w=a[k+11>>0]|0;q=w<<24>>24<0;TA(g,q?c[k>>2]|0:k,q?c[k+4>>2]|0:w&255)|0;iB(k);iB(m);}w=a[i+11>>0]|0;q=w<<24>>24<0;TA(g,q?c[i>>2]|0:i,q?c[i+4>>2]|0:w&255)|0;if(z){UB(m,18670,h);qB(m,18673)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];w=0;while(1){if((w|0)==3)break;c[m+(w<<2)>>2]=0;w=w+1|0;}w=a[k+11>>0]|0;q=w<<24>>24<0;TA(g,q?c[k>>2]|0:k,q?c[k+4>>2]|0:w&255)|0;iB(k);iB(m);};c[n>>2]=c[g>>2];c[n+4>>2]=c[g+4>>2];c[n+8>>2]=c[g+8>>2];w=0;while(1){if((w|0)==3)break;c[g+(w<<2)>>2]=0;w=w+1|0;}IB(k,n);w=c[F>>2]|0;if(w>>>0<(c[e+8>>2]|0)>>>0){KB(w,k);c[F>>2]=(c[F>>2]|0)+24;}else LB(e,k);QA(k);iB(n);iB(g);J=A+1|0;K=0;}iB(j);iB(i);D=J;E=K;}iB(h);if(!E){v=D;break a;}}}}while(0);v=b;}else v=b;}else v=b;}while(0);l=f;return v|0;}function iC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+48|0;g=f+36|0;h=f+24|0;i=f+12|0;j=f;k=SB(b,d,e)|0;if((k|0)!=(b|0)?(d=e+4|0,m=c[d>>2]|0,(c[e>>2]|0)!=(m|0)):0){FB(j,m+-24|0);pB(j,0,18946)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];m=0;while(1){if((m|0)==3)break;c[j+(m<<2)>>2]=0;m=m+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];m=0;while(1){if((m|0)==3)break;c[i+(m<<2)>>2]=0;m=m+1|0;}m=c[d>>2]|0;d=m+-24|0;e=d+11|0;if((a[e>>0]|0)<0){n=c[d>>2]|0;a[g>>0]=0;cB(n,g);c[m+-20>>2]=0;}else{a[g>>0]=0;cB(d,g);a[e>>0]=0;}TB(d);c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];d=0;while(1){if((d|0)==3)break;c[h+(d<<2)>>2]=0;d=d+1|0;}iB(h);iB(i);iB(j);o=k;}else o=b;l=f;return o|0;}function jC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=l;l=l+16|0;g=f;if((((((d-b|0)>2?(a[b>>0]|0)==112:0)?(a[b+1>>0]|0)==116:0)?(h=b+2|0,i=SB(h,d,e)|0,(i|0)!=(h|0)):0)?(h=SB(i,d,e)|0,(h|0)!=(i|0)):0)?(i=e+4|0,d=c[i>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[i>>2]|0;e=0;while(1){if((e|0)==-1)break;j=e+-1|0;QA(d+(j*24|0)|0);e=j;}c[i>>2]=d+-24;qB(d+-48|0,18943)|0;d=a[g+11>>0]|0;e=d<<24>>24<0;TA((c[i>>2]|0)+-24|0,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;iB(g);k=h;}else k=b;l=f;return k|0;}function kC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;if((((((d-b|0)>2?(a[b>>0]|0)==114:0)?(a[b+1>>0]|0)==99:0)?(o=b+2|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=SB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;FB(n,d+-48|0);pB(n,0,18925)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=0;while(1){if((d|0)==3)break;c[n+(d<<2)>>2]=0;d=d+1|0;}qB(m,18922)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];d=0;while(1){if((d|0)==3)break;c[m+(d<<2)>>2]=0;d=d+1|0;}d=a[g+11>>0]|0;e=d<<24>>24<0;TA(k,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];d=0;while(1){if((d|0)==3)break;c[k+(d<<2)>>2]=0;d=d+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}IB(h,i);JB((c[p>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);r=o;}else r=b;l=f;return r|0;}function lC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+112|0;g=f+88|0;h=f+64|0;i=f+36|0;j=f+48|0;k=f+24|0;m=f+12|0;n=f;if((((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==99:0)?(o=b+2|0,p=mB(o,d,e)|0,(p|0)!=(o|0)):0)?(o=SB(p,d,e)|0,(o|0)!=(p|0)):0)?(p=e+4|0,d=c[p>>2]|0,((d-(c[e>>2]|0)|0)/24|0)>>>0>=2):0){FB(g,d+-24|0);d=c[p>>2]|0;e=0;while(1){if((e|0)==-1)break;q=e+-1|0;QA(d+(q*24|0)|0);e=q;}c[p>>2]=d+-24;FB(n,d+-48|0);pB(n,0,18909)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=0;while(1){if((d|0)==3)break;c[n+(d<<2)>>2]=0;d=d+1|0;}qB(m,18922)|0;c[k>>2]=c[m>>2];c[k+4>>2]=c[m+4>>2];c[k+8>>2]=c[m+8>>2];d=0;while(1){if((d|0)==3)break;c[m+(d<<2)>>2]=0;d=d+1|0;}d=a[g+11>>0]|0;e=d<<24>>24<0;TA(k,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];d=0;while(1){if((d|0)==3)break;c[k+(d<<2)>>2]=0;d=d+1|0;}qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}IB(h,i);JB((c[p>>2]|0)+-24|0,h);QA(h);iB(i);iB(j);iB(k);iB(m);iB(n);iB(g);r=o;}else r=b;l=f;return r|0;}function mC(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(((c-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==112:0){e=b+2|0;f=SB(e,c,d)|0;g=(f|0)==(e|0)?b:f;}else g=b;return g|0;}function nC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;if(((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==116:0)?(k=b+2|0,m=mB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,18900)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}IB(g,h);JB((c[k>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);n=m;}else n=b;l=f;return n|0;}function oC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;if(((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==122:0)?(k=b+2|0,m=SB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,18900)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}IB(g,h);JB((c[k>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);n=m;}else n=b;l=f;return n|0;}function pC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+64|0;g=f+48|0;h=f+24|0;i=f;j=f+12|0;if(((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==90:0)?(k=b+2|0,(a[k>>0]|0)==84):0)?(m=e+4|0,n=((c[m>>2]|0)-(c[e>>2]|0)|0)/24|0,o=DB(k,d,e)|0,d=((c[m>>2]|0)-(c[e>>2]|0)|0)/24|0,(o|0)!=(k|0)):0){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;RB(g,18886,AB(18886)|0);a:do{if((n|0)!=(d|0)){FB(h,(c[e>>2]|0)+(n*24|0)|0);k=a[h+11>>0]|0;p=k<<24>>24<0;TA(g,p?c[h>>2]|0:h,p?c[h+4>>2]|0:k&255)|0;iB(h);k=h+11|0;p=h+4|0;q=n;while(1){r=q+1|0;if((r|0)==(d|0))break a;FB(i,(c[e>>2]|0)+(r*24|0)|0);pB(i,0,18897)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];s=0;while(1){if((s|0)==3)break;c[i+(s<<2)>>2]=0;s=s+1|0;}s=a[k>>0]|0;t=s<<24>>24<0;TA(g,t?c[h>>2]|0:h,t?c[p>>2]|0:s&255)|0;iB(h);iB(i);q=r;}}}while(0);qB(g,18673)|0;i=d;while(1){if((i|0)==(n|0))break;d=c[m>>2]|0;q=0;while(1){if((q|0)==-1)break;p=q+-1|0;QA(d+(p*24|0)|0);q=p;}c[m>>2]=d+-24;i=i+-1|0;}c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];i=0;while(1){if((i|0)==3)break;c[g+(i<<2)>>2]=0;i=i+1|0;}IB(h,j);i=c[m>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,h);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,h);QA(h);iB(j);iB(g);u=o;}else u=b;l=f;return u|0;}function qC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;if((((((d-b|0)>2?(a[b>>0]|0)==115:0)?(a[b+1>>0]|0)==90:0)?(k=b+2|0,(a[k>>0]|0)==102):0)?(m=XB(k,d,e)|0,(m|0)!=(k|0)):0)?(k=e+4|0,d=c[k>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(j,d+-24|0);pB(j,0,18886)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];d=0;while(1){if((d|0)==3)break;c[j+(d<<2)>>2]=0;d=d+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}IB(g,h);JB((c[k>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);n=m;}else n=b;l=f;return n|0;}function rC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+64|0;g=f+40|0;h=f+12|0;i=f+24|0;j=f;a:do{if((d-b|0)>2?(a[b>>0]|0)==116:0){k=a[b+1>>0]|0;switch(k<<24>>24){case 105:case 101:break;default:{m=b;break a;}}n=b+2|0;if(k<<24>>24==101)o=SB(n,d,e)|0;else o=mB(n,d,e)|0;if((o|0)!=(n|0)?(n=e+4|0,k=c[n>>2]|0,(c[e>>2]|0)!=(k|0)):0){FB(j,k+-24|0);pB(j,0,18878)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];k=0;while(1){if((k|0)==3)break;c[j+(k<<2)>>2]=0;k=k+1|0;}qB(i,18673)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];k=0;while(1){if((k|0)==3)break;c[i+(k<<2)>>2]=0;k=k+1|0;}IB(g,h);JB((c[n>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);iB(j);m=o;}else m=b;}else m=b;}while(0);l=f;return m|0;}function sC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,5);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function tC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+48|0;g=f+24|0;h=f;i=f+12|0;if(((((d-b|0)>2?(a[b>>0]|0)==116:0)?(a[b+1>>0]|0)==119:0)?(j=b+2|0,k=SB(j,d,e)|0,(k|0)!=(j|0)):0)?(j=e+4|0,d=c[j>>2]|0,(c[e>>2]|0)!=(d|0)):0){FB(i,d+-24|0);pB(i,0,18871)|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];d=0;while(1){if((d|0)==3)break;c[i+(d<<2)>>2]=0;d=d+1|0;}IB(g,h);JB((c[j>>2]|0)+-24|0,g);QA(g);iB(h);iB(i);m=k;}else m=b;l=f;return m|0;}function uC(a,b){a=a|0;b=b|0;vC(a,b,AB(b)|0);return;}function vC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;f=l;l=l+16|0;g=f;h=b+11|0;i=a[h>>0]|0;j=i<<24>>24<0;if(j)k=(c[b+8>>2]&2147483647)+-1|0;else k=10;do{if(k>>>0>=e>>>0){if(j)m=c[b>>2]|0;else m=b;wC(m,d,e)|0;a[g>>0]=0;cB(m+e|0,g);if((a[h>>0]|0)<0){c[b+4>>2]=e;break;}else{a[h>>0]=e;break;}}else{if(j)n=c[b+4>>2]|0;else n=i&255;dB(b,k,e-k|0,n,0,n,e,d);}}while(0);l=f;return;}function wC(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)nE(a|0,b|0,c|0)|0;return a|0;}function xC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+16|0;g=f;a:do{if((d-b|0)>1){h=a[b>>0]|0;switch(h<<24>>24){case 100:case 111:{if((a[b+1>>0]|0)==110){i=b+2|0;if(h<<24>>24!=111){h=UC(i,d,e)|0;j=(h|0)==(i|0)?b:h;break a;}h=EC(i,d,e)|0;if((h|0)==(i|0)){j=b;break a;}i=EB(h,d,e)|0;if((i|0)==(h|0)){j=h;break a;}h=e+4|0;k=c[h>>2]|0;if(((k-(c[e>>2]|0)|0)/24|0)>>>0<2){j=i;break a;}FB(g,k+-24|0);k=c[h>>2]|0;m=0;while(1){if((m|0)==-1)break;n=m+-1|0;QA(k+(n*24|0)|0);m=n;}c[h>>2]=k+-24;m=a[g+11>>0]|0;n=m<<24>>24<0;TA(k+-48|0,n?c[g>>2]|0:g,n?c[g+4>>2]|0:m&255)|0;iB(g);j=i;break a;}break;}default:{}}m=AC(b,d,e)|0;if((m|0)==(b|0)){n=EC(b,d,e)|0;if((n|0)!=(b|0)){o=EB(n,d,e)|0;if((o|0)!=(n|0)){p=e+4|0;q=c[p>>2]|0;if(((q-(c[e>>2]|0)|0)/24|0)>>>0<2)j=o;else{FB(g,q+-24|0);q=c[p>>2]|0;r=0;while(1){if((r|0)==-1)break;s=r+-1|0;QA(q+(s*24|0)|0);r=s;}c[p>>2]=q+-24;r=a[g+11>>0]|0;i=r<<24>>24<0;TA(q+-48|0,i?c[g>>2]|0:g,i?c[g+4>>2]|0:r&255)|0;iB(g);j=o;}}else j=n;}else j=b;}else j=m;}else j=b;}while(0);l=f;return j|0;}function yC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=l;l=l+32|0;g=f+8|0;h=f;a:do{if((b|0)==(d|0))i=b;else switch(a[b>>0]|0){case 84:{j=e+4|0;k=((c[j>>2]|0)-(c[e>>2]|0)|0)/24|0;m=DB(b,d,e)|0;n=c[j>>2]|0;o=(n-(c[e>>2]|0)|0)/24|0;p=n;if((m|0)!=(b|0)&(o|0)==(k+1|0)){c[h>>2]=c[e+12>>2];vB(g,p+-24|0,h);n=e+20|0;q=c[n>>2]|0;if(q>>>0<(c[e+24>>2]|0)>>>0){c[q>>2]=0;r=q+4|0;c[r>>2]=0;s=q+8|0;c[s>>2]=0;c[q+12>>2]=c[g+12>>2];c[q>>2]=c[g>>2];q=g+4|0;c[r>>2]=c[q>>2];r=g+8|0;c[s>>2]=c[r>>2];c[r>>2]=0;c[q>>2]=0;c[g>>2]=0;c[n>>2]=(c[n>>2]|0)+16;}else wB(e+16|0,g);RA(g);i=m;break a;}m=o;o=p;while(1){if((m|0)==(k|0)){i=b;break a;}p=0;while(1){if((p|0)==-1)break;n=p+-1|0;QA(o+(n*24|0)|0);p=n;}p=o+-24|0;c[j>>2]=p;m=m+-1|0;o=p;}break;}case 68:{o=OB(b,d,e)|0;if((o|0)==(b|0)){i=b;break a;}m=c[e+4>>2]|0;if((c[e>>2]|0)==(m|0)){i=b;break a;}c[h>>2]=c[e+12>>2];vB(g,m+-24|0,h);m=e+20|0;j=c[m>>2]|0;if(j>>>0<(c[e+24>>2]|0)>>>0){c[j>>2]=0;k=j+4|0;c[k>>2]=0;p=j+8|0;c[p>>2]=0;c[j+12>>2]=c[g+12>>2];c[j>>2]=c[g>>2];j=g+4|0;c[k>>2]=c[j>>2];k=g+8|0;c[p>>2]=c[k>>2];c[k>>2]=0;c[j>>2]=0;c[g>>2]=0;c[m>>2]=(c[m>>2]|0)+16;}else wB(e+16|0,g);RA(g);i=o;break a;break;}case 83:{o=NB(b,d,e)|0;if((o|0)!=(b|0)){i=o;break a;}if((d-b|0)<=2){i=b;break a;}if((a[b+1>>0]|0)!=116){i=b;break a;}o=b+2|0;m=BC(o,d,e)|0;if((m|0)==(o|0)){i=b;break a;}o=e+4|0;j=c[o>>2]|0;if((c[e>>2]|0)==(j|0)){i=b;break a;}pB(j+-24|0,0,18969)|0;j=(c[o>>2]|0)+-24|0;c[h>>2]=c[e+12>>2];vB(g,j,h);j=e+20|0;o=c[j>>2]|0;if(o>>>0<(c[e+24>>2]|0)>>>0){c[o>>2]=0;k=o+4|0;c[k>>2]=0;p=o+8|0;c[p>>2]=0;c[o+12>>2]=c[g+12>>2];c[o>>2]=c[g>>2];o=g+4|0;c[k>>2]=c[o>>2];k=g+8|0;c[p>>2]=c[k>>2];c[k>>2]=0;c[o>>2]=0;c[g>>2]=0;c[j>>2]=(c[j>>2]|0)+16;}else wB(e+16|0,g);RA(g);i=m;break a;break;}default:{i=b;break a;}}}while(0);l=f;return i|0;}function zC(a,b,c){a=a|0;b=b|0;c=c|0;return AC(a,b,c)|0;}function AC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+16|0;g=f;if((b|0)!=(d|0)?(h=GB(b,d,e)|0,(h|0)!=(b|0)):0){i=EB(h,d,e)|0;if((i|0)!=(h|0)){d=e+4|0;j=c[d>>2]|0;if(((j-(c[e>>2]|0)|0)/24|0)>>>0<2)k=b;else{FB(g,j+-24|0);j=c[d>>2]|0;e=0;while(1){if((e|0)==-1)break;m=e+-1|0;QA(j+(m*24|0)|0);e=m;}c[d>>2]=j+-24;d=a[g+11>>0]|0;e=d<<24>>24<0;TA(j+-48|0,e?c[g>>2]|0:g,e?c[g+4>>2]|0:d&255)|0;iB(g);k=i;}}else k=h;}else k=b;l=f;return k|0;}function BC(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;a:do{if((b|0)==(c|0))e=b;else switch(a[b>>0]|0){case 68:case 67:{e=CC(b,c,d)|0;break a;break;}case 85:{e=DC(b,c,d)|0;break a;break;}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{e=GB(b,c,d)|0;break a;break;}default:return EC(b,c,d)|0;}}while(0);return e|0;}function CC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;f=l;l=l+64|0;g=f+40|0;h=f+24|0;i=f;j=f+12|0;a:do{if((d-b|0)>1?(k=e+4|0,m=c[k>>2]|0,(c[e>>2]|0)!=(m|0)):0){switch(a[b>>0]|0){case 67:{switch(a[b+1>>0]|0){case 53:case 51:case 50:case 49:break;default:{n=b;break a;}}SC(h,m+-24|0);IB(g,h);o=c[k>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){KB(o,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);iB(h);a[e+60>>0]=1;n=b+2|0;break a;break;}case 68:break;default:{n=b;break a;}}switch(a[b+1>>0]|0){case 53:case 50:case 49:case 48:break;default:{n=b;break a;}}SC(j,m+-24|0);pB(j,0,18745)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];m=0;while(1){if((m|0)==3)break;c[j+(m<<2)>>2]=0;m=m+1|0;}IB(g,i);m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);iB(i);iB(j);a[e+60>>0]=1;n=b+2|0;}else n=b;}while(0);l=f;return n|0;}function Zl(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;i=l;l=l+192|0;j=i+176|0;k=i+172|0;m=i+168|0;n=i+164|0;o=i+160|0;p=i+156|0;q=i+152|0;r=i+148|0;s=i+144|0;t=i+140|0;u=i+136|0;v=i+132|0;w=i+128|0;x=i+124|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+72|0;L=i+68|0;M=i+64|0;N=i+60|0;O=i+56|0;P=i+52|0;Q=i+48|0;R=i+44|0;S=i+40|0;T=i+36|0;U=i+32|0;V=i+28|0;W=i+24|0;X=i+20|0;Y=i+16|0;Z=i+12|0;_=i+8|0;$=i+4|0;aa=i;c[X>>2]=a;c[Y>>2]=b;c[Z>>2]=e;c[_>>2]=f;c[$>>2]=g;c[aa>>2]=h;h=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;c[j>>2]=c[X>>2];c[k>>2]=h;c[m>>2]=Y;c[n>>2]=Z;c[o>>2]=_;c[p>>2]=$;c[q>>2]=0;c[r>>2]=0;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[y>>2]=c[q>>2]|0?5:4;c[z>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[m>>2]|0)+4>>2];c[B>>2]=0;c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[x>>2]|0)&1);c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[C>>2]=(c[t>>2]|0)-(c[x>>2]|0);if((c[A>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[A>>2];c[A>>2]=0;}if((c[z>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[z>>2];c[z>>2]=0;}while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[D>>2]=0;c[E>>2]=0;c[F>>2]=(c[t>>2]|0)+1;C=(c[z>>2]|0)>>>0>0&1;q=Bk((c[t>>2]|0)+1|0)|0;if(!(C&(q|0)==(Bk((c[t>>2]|0)+1+(0-(c[z>>2]|0))|0)|0)|0?(c[D>>2]=(Qm((c[t>>2]|0)+1+4|0,(c[t>>2]|0)+1+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[G>>2]=99999999;c[H>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,G)|0;if((c[H>>2]|0)>>>0>(c[D>>2]|0)>>>0){c[D>>2]=c[H>>2];c[F>>2]=c[t>>2];c[E>>2]=c[G>>2];}if((c[D>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;if(((c[E>>2]|0?(q=(c[z>>2]|0)>>>0>0&1,C=Bk(c[t>>2]|0)|0,q&(C|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[I>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[J>>2]=(c[I>>2]|0)*3,C=(c[D>>2]|0)*3|0,c[K>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[I>>2]|0)>>>0>=4):0)?(c[J>>2]|0)>(c[K>>2]|0):0){c[D>>2]=c[I>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}c[L>>2]=99999999;c[M>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,L)|0;C=c[M>>2]<<2;c[N>>2]=C-(Mm((c[L>>2]|0)+1|0)|0);C=c[D>>2]<<2;c[O>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+4;if((c[M>>2]|0)>>>0>=4?(c[N>>2]|0)>(c[O>>2]|0):0){c[D>>2]=c[M>>2];c[E>>2]=c[L>>2];c[F>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;do{if((c[E>>2]|0?(C=(c[z>>2]|0)>>>0>0&1,q=Bk(c[t>>2]|0)|0,C&(q|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[P>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[Q>>2]=c[P>>2]<<2,q=c[D>>2]<<2,c[R>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[P>>2]|0)>>>0>=4):0){if((c[Q>>2]|0)<=(c[R>>2]|0))break;c[D>>2]=c[P>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}}while(0);c[S>>2]=99999999;c[T>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,S)|0;q=c[T>>2]<<2;c[U>>2]=q-(Mm((c[S>>2]|0)+1|0)|0);q=c[D>>2]<<2;c[V>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+7;if((c[T>>2]|0)>>>0<4)break a;if((c[U>>2]|0)<=(c[V>>2]|0))break a;c[D>>2]=c[T>>2];c[E>>2]=c[S>>2];c[F>>2]=c[t>>2];}}while(0);if(c[E>>2]|0){while(1){if(!(((c[F>>2]|0)>>>0>(c[u>>2]|0)>>>0?((c[F>>2]|0)+(0-((c[E>>2]|0)-2))|0)>>>0>(c[x>>2]|0)>>>0:0)|0))break;if((d[(c[F>>2]|0)+-1>>0]|0|0)!=(d[(c[F>>2]|0)+(0-((c[E>>2]|0)-2))+-1>>0]|0|0))break;c[F>>2]=(c[F>>2]|0)+-1;c[D>>2]=(c[D>>2]|0)+1;}c[A>>2]=c[z>>2];c[z>>2]=(c[E>>2]|0)-2;}}c[W>>2]=(c[F>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[W>>2]|0,c[u>>2]|0,c[E>>2]|0,(c[D>>2]|0)-3|0);q=(c[F>>2]|0)+(c[D>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if(!(((c[A>>2]|0)>>>0>0?(c[t>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk((c[t>>2]|0)+(0-(c[A>>2]|0))|0)|0))break;c[D>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[A>>2]|0))|0,c[v>>2]|0)|0)+4;c[E>>2]=c[A>>2];c[A>>2]=c[z>>2];c[z>>2]=c[E>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[D>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[D>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[z>>2]|0?c[z>>2]|0:c[B>>2]|0;c[(c[m>>2]|0)+4>>2]=c[A>>2]|0?c[A>>2]|0:c[B>>2]|0;l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function _l(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;i=l;l=l+192|0;j=i+176|0;k=i+172|0;m=i+168|0;n=i+164|0;o=i+160|0;p=i+156|0;q=i+152|0;r=i+148|0;s=i+144|0;t=i+140|0;u=i+136|0;v=i+132|0;w=i+128|0;x=i+124|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+72|0;L=i+68|0;M=i+64|0;N=i+60|0;O=i+56|0;P=i+52|0;Q=i+48|0;R=i+44|0;S=i+40|0;T=i+36|0;U=i+32|0;V=i+28|0;W=i+24|0;X=i+20|0;Y=i+16|0;Z=i+12|0;_=i+8|0;$=i+4|0;aa=i;c[X>>2]=a;c[Y>>2]=b;c[Z>>2]=e;c[_>>2]=f;c[$>>2]=g;c[aa>>2]=h;h=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;c[j>>2]=c[X>>2];c[k>>2]=h;c[m>>2]=Y;c[n>>2]=Z;c[o>>2]=_;c[p>>2]=$;c[q>>2]=0;c[r>>2]=1;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[y>>2]=c[q>>2]|0?5:4;c[z>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[m>>2]|0)+4>>2];c[B>>2]=0;c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[x>>2]|0)&1);c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[C>>2]=(c[t>>2]|0)-(c[x>>2]|0);if((c[A>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[A>>2];c[A>>2]=0;}if((c[z>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[z>>2];c[z>>2]=0;}while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[D>>2]=0;c[E>>2]=0;c[F>>2]=(c[t>>2]|0)+1;C=(c[z>>2]|0)>>>0>0&1;q=Bk((c[t>>2]|0)+1|0)|0;if(!(C&(q|0)==(Bk((c[t>>2]|0)+1+(0-(c[z>>2]|0))|0)|0)|0?(c[D>>2]=(Qm((c[t>>2]|0)+1+4|0,(c[t>>2]|0)+1+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[G>>2]=99999999;c[H>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,G)|0;if((c[H>>2]|0)>>>0>(c[D>>2]|0)>>>0){c[D>>2]=c[H>>2];c[F>>2]=c[t>>2];c[E>>2]=c[G>>2];}if((c[D>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;if(((c[E>>2]|0?(q=(c[z>>2]|0)>>>0>0&1,C=Bk(c[t>>2]|0)|0,q&(C|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[I>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[J>>2]=(c[I>>2]|0)*3,C=(c[D>>2]|0)*3|0,c[K>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[I>>2]|0)>>>0>=4):0)?(c[J>>2]|0)>(c[K>>2]|0):0){c[D>>2]=c[I>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}c[L>>2]=99999999;c[M>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,L)|0;C=c[M>>2]<<2;c[N>>2]=C-(Mm((c[L>>2]|0)+1|0)|0);C=c[D>>2]<<2;c[O>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+4;if((c[M>>2]|0)>>>0>=4?(c[N>>2]|0)>(c[O>>2]|0):0){c[D>>2]=c[M>>2];c[E>>2]=c[L>>2];c[F>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;do{if((c[E>>2]|0?(C=(c[z>>2]|0)>>>0>0&1,q=Bk(c[t>>2]|0)|0,C&(q|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[P>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[Q>>2]=c[P>>2]<<2,q=c[D>>2]<<2,c[R>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[P>>2]|0)>>>0>=4):0){if((c[Q>>2]|0)<=(c[R>>2]|0))break;c[D>>2]=c[P>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}}while(0);c[S>>2]=99999999;c[T>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,S)|0;q=c[T>>2]<<2;c[U>>2]=q-(Mm((c[S>>2]|0)+1|0)|0);q=c[D>>2]<<2;c[V>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+7;if((c[T>>2]|0)>>>0<4)break a;if((c[U>>2]|0)<=(c[V>>2]|0))break a;c[D>>2]=c[T>>2];c[E>>2]=c[S>>2];c[F>>2]=c[t>>2];}}while(0);if(c[E>>2]|0){while(1){if(!(((c[F>>2]|0)>>>0>(c[u>>2]|0)>>>0?((c[F>>2]|0)+(0-((c[E>>2]|0)-2))|0)>>>0>(c[x>>2]|0)>>>0:0)|0))break;if((d[(c[F>>2]|0)+-1>>0]|0|0)!=(d[(c[F>>2]|0)+(0-((c[E>>2]|0)-2))+-1>>0]|0|0))break;c[F>>2]=(c[F>>2]|0)+-1;c[D>>2]=(c[D>>2]|0)+1;}c[A>>2]=c[z>>2];c[z>>2]=(c[E>>2]|0)-2;}}c[W>>2]=(c[F>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[W>>2]|0,c[u>>2]|0,c[E>>2]|0,(c[D>>2]|0)-3|0);q=(c[F>>2]|0)+(c[D>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if(!(((c[A>>2]|0)>>>0>0?(c[t>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk((c[t>>2]|0)+(0-(c[A>>2]|0))|0)|0))break;c[D>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[A>>2]|0))|0,c[v>>2]|0)|0)+4;c[E>>2]=c[A>>2];c[A>>2]=c[z>>2];c[z>>2]=c[E>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[D>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[D>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[z>>2]|0?c[z>>2]|0:c[B>>2]|0;c[(c[m>>2]|0)+4>>2]=c[A>>2]|0?c[A>>2]|0:c[B>>2]|0;l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function $l(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;i=l;l=l+192|0;j=i+176|0;k=i+172|0;m=i+168|0;n=i+164|0;o=i+160|0;p=i+156|0;q=i+152|0;r=i+148|0;s=i+144|0;t=i+140|0;u=i+136|0;v=i+132|0;w=i+128|0;x=i+124|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+72|0;L=i+68|0;M=i+64|0;N=i+60|0;O=i+56|0;P=i+52|0;Q=i+48|0;R=i+44|0;S=i+40|0;T=i+36|0;U=i+32|0;V=i+28|0;W=i+24|0;X=i+20|0;Y=i+16|0;Z=i+12|0;_=i+8|0;$=i+4|0;aa=i;c[X>>2]=a;c[Y>>2]=b;c[Z>>2]=e;c[_>>2]=f;c[$>>2]=g;c[aa>>2]=h;h=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;c[j>>2]=c[X>>2];c[k>>2]=h;c[m>>2]=Y;c[n>>2]=Z;c[o>>2]=_;c[p>>2]=$;c[q>>2]=0;c[r>>2]=2;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[y>>2]=c[q>>2]|0?5:4;c[z>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[m>>2]|0)+4>>2];c[B>>2]=0;c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[x>>2]|0)&1);c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[C>>2]=(c[t>>2]|0)-(c[x>>2]|0);if((c[A>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[A>>2];c[A>>2]=0;}if((c[z>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[z>>2];c[z>>2]=0;}while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[D>>2]=0;c[E>>2]=0;c[F>>2]=(c[t>>2]|0)+1;C=(c[z>>2]|0)>>>0>0&1;q=Bk((c[t>>2]|0)+1|0)|0;if(!(C&(q|0)==(Bk((c[t>>2]|0)+1+(0-(c[z>>2]|0))|0)|0)|0?(c[D>>2]=(Qm((c[t>>2]|0)+1+4|0,(c[t>>2]|0)+1+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[G>>2]=99999999;c[H>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,G)|0;if((c[H>>2]|0)>>>0>(c[D>>2]|0)>>>0){c[D>>2]=c[H>>2];c[F>>2]=c[t>>2];c[E>>2]=c[G>>2];}if((c[D>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;if(((c[E>>2]|0?(q=(c[z>>2]|0)>>>0>0&1,C=Bk(c[t>>2]|0)|0,q&(C|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[I>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[J>>2]=(c[I>>2]|0)*3,C=(c[D>>2]|0)*3|0,c[K>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[I>>2]|0)>>>0>=4):0)?(c[J>>2]|0)>(c[K>>2]|0):0){c[D>>2]=c[I>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}c[L>>2]=99999999;c[M>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,L)|0;C=c[M>>2]<<2;c[N>>2]=C-(Mm((c[L>>2]|0)+1|0)|0);C=c[D>>2]<<2;c[O>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+4;if((c[M>>2]|0)>>>0>=4?(c[N>>2]|0)>(c[O>>2]|0):0){c[D>>2]=c[M>>2];c[E>>2]=c[L>>2];c[F>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;do{if((c[E>>2]|0?(C=(c[z>>2]|0)>>>0>0&1,q=Bk(c[t>>2]|0)|0,C&(q|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[P>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[Q>>2]=c[P>>2]<<2,q=c[D>>2]<<2,c[R>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[P>>2]|0)>>>0>=4):0){if((c[Q>>2]|0)<=(c[R>>2]|0))break;c[D>>2]=c[P>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}}while(0);c[S>>2]=99999999;c[T>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,S)|0;q=c[T>>2]<<2;c[U>>2]=q-(Mm((c[S>>2]|0)+1|0)|0);q=c[D>>2]<<2;c[V>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+7;if((c[T>>2]|0)>>>0<4)break a;if((c[U>>2]|0)<=(c[V>>2]|0))break a;c[D>>2]=c[T>>2];c[E>>2]=c[S>>2];c[F>>2]=c[t>>2];}}while(0);if(c[E>>2]|0){while(1){if(!(((c[F>>2]|0)>>>0>(c[u>>2]|0)>>>0?((c[F>>2]|0)+(0-((c[E>>2]|0)-2))|0)>>>0>(c[x>>2]|0)>>>0:0)|0))break;if((d[(c[F>>2]|0)+-1>>0]|0|0)!=(d[(c[F>>2]|0)+(0-((c[E>>2]|0)-2))+-1>>0]|0|0))break;c[F>>2]=(c[F>>2]|0)+-1;c[D>>2]=(c[D>>2]|0)+1;}c[A>>2]=c[z>>2];c[z>>2]=(c[E>>2]|0)-2;}}c[W>>2]=(c[F>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[W>>2]|0,c[u>>2]|0,c[E>>2]|0,(c[D>>2]|0)-3|0);q=(c[F>>2]|0)+(c[D>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if(!(((c[A>>2]|0)>>>0>0?(c[t>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk((c[t>>2]|0)+(0-(c[A>>2]|0))|0)|0))break;c[D>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[A>>2]|0))|0,c[v>>2]|0)|0)+4;c[E>>2]=c[A>>2];c[A>>2]=c[z>>2];c[z>>2]=c[E>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[D>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[D>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[z>>2]|0?c[z>>2]|0:c[B>>2]|0;c[(c[m>>2]|0)+4>>2]=c[A>>2]|0?c[A>>2]|0:c[B>>2]|0;l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function am(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;i=l;l=l+192|0;j=i+176|0;k=i+172|0;m=i+168|0;n=i+164|0;o=i+160|0;p=i+156|0;q=i+152|0;r=i+148|0;s=i+144|0;t=i+140|0;u=i+136|0;v=i+132|0;w=i+128|0;x=i+124|0;y=i+120|0;z=i+116|0;A=i+112|0;B=i+108|0;C=i+104|0;D=i+100|0;E=i+96|0;F=i+92|0;G=i+88|0;H=i+84|0;I=i+80|0;J=i+76|0;K=i+72|0;L=i+68|0;M=i+64|0;N=i+60|0;O=i+56|0;P=i+52|0;Q=i+48|0;R=i+44|0;S=i+40|0;T=i+36|0;U=i+32|0;V=i+28|0;W=i+24|0;X=i+20|0;Y=i+16|0;Z=i+12|0;_=i+8|0;$=i+4|0;aa=i;c[X>>2]=a;c[Y>>2]=b;c[Z>>2]=e;c[_>>2]=f;c[$>>2]=g;c[aa>>2]=h;h=c[Y>>2]|0;Y=c[Z>>2]|0;Z=c[_>>2]|0;_=c[$>>2]|0;$=c[aa>>2]|0;c[j>>2]=c[X>>2];c[k>>2]=h;c[m>>2]=Y;c[n>>2]=Z;c[o>>2]=_;c[p>>2]=$;c[q>>2]=1;c[r>>2]=2;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=(c[(c[j>>2]|0)+4>>2]|0)+(c[(c[j>>2]|0)+12>>2]|0);c[y>>2]=c[q>>2]|0?5:4;c[z>>2]=c[c[m>>2]>>2];c[A>>2]=c[(c[m>>2]|0)+4>>2];c[B>>2]=0;c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[x>>2]|0)&1);c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[C>>2]=(c[t>>2]|0)-(c[x>>2]|0);if((c[A>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[A>>2];c[A>>2]=0;}if((c[z>>2]|0)>>>0>(c[C>>2]|0)>>>0){c[B>>2]=c[z>>2];c[z>>2]=0;}while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[D>>2]=0;c[E>>2]=0;c[F>>2]=(c[t>>2]|0)+1;C=(c[z>>2]|0)>>>0>0&1;q=Bk((c[t>>2]|0)+1|0)|0;if(!(C&(q|0)==(Bk((c[t>>2]|0)+1+(0-(c[z>>2]|0))|0)|0)|0?(c[D>>2]=(Qm((c[t>>2]|0)+1+4|0,(c[t>>2]|0)+1+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[G>>2]=99999999;c[H>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,G)|0;if((c[H>>2]|0)>>>0>(c[D>>2]|0)>>>0){c[D>>2]=c[H>>2];c[F>>2]=c[t>>2];c[E>>2]=c[G>>2];}if((c[D>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;if(((c[E>>2]|0?(q=(c[z>>2]|0)>>>0>0&1,C=Bk(c[t>>2]|0)|0,q&(C|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[I>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[J>>2]=(c[I>>2]|0)*3,C=(c[D>>2]|0)*3|0,c[K>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[I>>2]|0)>>>0>=4):0)?(c[J>>2]|0)>(c[K>>2]|0):0){c[D>>2]=c[I>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}c[L>>2]=99999999;c[M>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,L)|0;C=c[M>>2]<<2;c[N>>2]=C-(Mm((c[L>>2]|0)+1|0)|0);C=c[D>>2]<<2;c[O>>2]=C-(Mm((c[E>>2]|0)+1|0)|0)+4;if((c[M>>2]|0)>>>0>=4?(c[N>>2]|0)>(c[O>>2]|0):0){c[D>>2]=c[M>>2];c[E>>2]=c[L>>2];c[F>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;do{if((c[E>>2]|0?(C=(c[z>>2]|0)>>>0>0&1,q=Bk(c[t>>2]|0)|0,C&(q|0)==(Bk((c[t>>2]|0)+(0-(c[z>>2]|0))|0)|0)|0):0)?(c[P>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[z>>2]|0))|0,c[v>>2]|0)|0)+4,c[Q>>2]=c[P>>2]<<2,q=c[D>>2]<<2,c[R>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+1,(c[P>>2]|0)>>>0>=4):0){if((c[Q>>2]|0)<=(c[R>>2]|0))break;c[D>>2]=c[P>>2];c[E>>2]=0;c[F>>2]=c[t>>2];}}while(0);c[S>>2]=99999999;c[T>>2]=tc[c[y>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,S)|0;q=c[T>>2]<<2;c[U>>2]=q-(Mm((c[S>>2]|0)+1|0)|0);q=c[D>>2]<<2;c[V>>2]=q-(Mm((c[E>>2]|0)+1|0)|0)+7;if((c[T>>2]|0)>>>0<4)break a;if((c[U>>2]|0)<=(c[V>>2]|0))break a;c[D>>2]=c[T>>2];c[E>>2]=c[S>>2];c[F>>2]=c[t>>2];}}while(0);if(c[E>>2]|0){while(1){if(!(((c[F>>2]|0)>>>0>(c[u>>2]|0)>>>0?((c[F>>2]|0)+(0-((c[E>>2]|0)-2))|0)>>>0>(c[x>>2]|0)>>>0:0)|0))break;if((d[(c[F>>2]|0)+-1>>0]|0|0)!=(d[(c[F>>2]|0)+(0-((c[E>>2]|0)-2))+-1>>0]|0|0))break;c[F>>2]=(c[F>>2]|0)+-1;c[D>>2]=(c[D>>2]|0)+1;}c[A>>2]=c[z>>2];c[z>>2]=(c[E>>2]|0)-2;}}c[W>>2]=(c[F>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[W>>2]|0,c[u>>2]|0,c[E>>2]|0,(c[D>>2]|0)-3|0);q=(c[F>>2]|0)+(c[D>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if(!(((c[A>>2]|0)>>>0>0?(c[t>>2]|0)>>>0<=(c[w>>2]|0)>>>0:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk((c[t>>2]|0)+(0-(c[A>>2]|0))|0)|0))break;c[D>>2]=(Qm((c[t>>2]|0)+4|0,(c[t>>2]|0)+4+(0-(c[A>>2]|0))|0,c[v>>2]|0)|0)+4;c[E>>2]=c[A>>2];c[A>>2]=c[z>>2];c[z>>2]=c[E>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[D>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[D>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[z>>2]|0?c[z>>2]|0:c[B>>2]|0;c[(c[m>>2]|0)+4>>2]=c[A>>2]|0?c[A>>2]|0:c[B>>2]|0;l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function bm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0;i=l;l=l+2144|0;j=i+2136|0;k=i+2132|0;m=i+2128|0;n=i+2124|0;o=i+2120|0;p=i+2116|0;q=i+2112|0;r=i+2108|0;s=i+2104|0;t=i+2100|0;u=i+2096|0;v=i+2092|0;w=i+2088|0;x=i+2084|0;y=i+2080|0;z=i+2076|0;A=i+2072|0;B=i+2068|0;C=i+2064|0;D=i+2060|0;E=i+2056|0;F=i+2052|0;G=i+2048|0;H=i+2044|0;I=i+2040|0;J=i+2036|0;K=i+2032|0;L=i+2028|0;M=i+2024|0;N=i+2020|0;O=i+2016|0;P=i+2012|0;Q=i+2008|0;R=i+2004|0;S=i+2e3|0;T=i+1996|0;U=i+1992|0;V=i+1988|0;W=i+1984|0;X=i+1980|0;Y=i+1976|0;Z=i+1972|0;_=i+1968|0;$=i+1964|0;aa=i+1960|0;ba=i+1956|0;ca=i+1952|0;da=i+1948|0;ea=i+1944|0;fa=i+1940|0;ga=i+1936|0;ha=i+1932|0;ia=i+1928|0;ja=i+1924|0;ka=i+1920|0;la=i+1916|0;ma=i+1912|0;na=i+1908|0;oa=i+1904|0;pa=i+1900|0;qa=i+1896|0;ra=i+1892|0;sa=i+1888|0;ta=i+1884|0;ua=i+1880|0;va=i+1876|0;wa=i+1872|0;xa=i+1868|0;ya=i+1864|0;za=i+1860|0;Aa=i+1856|0;Ba=i+1852|0;Ca=i+1848|0;Da=i+1844|0;Ea=i+1840|0;Fa=i+1836|0;Ga=i+1832|0;Ha=i+1828|0;Ia=i+1824|0;Ja=i+1820|0;Ka=i+1816|0;La=i+1812|0;Ma=i+1808|0;Na=i+1804|0;Oa=i+1800|0;Pa=i+1796|0;Qa=i+1792|0;Ra=i+1788|0;Sa=i+1784|0;Ta=i+1780|0;Ua=i+1776|0;Va=i+1772|0;Wa=i+1768|0;Xa=i+1764|0;Ya=i+1760|0;Za=i+1756|0;_a=i+1752|0;$a=i+1748|0;ab=i+1744|0;bb=i+1740|0;cb=i+1736|0;db=i+1732|0;eb=i+1728|0;fb=i+1724|0;gb=i+1720|0;hb=i+1716|0;ib=i+1712|0;jb=i+1708|0;kb=i+1704|0;lb=i+1700|0;mb=i+1696|0;nb=i+1692|0;ob=i+1688|0;pb=i+1684|0;qb=i+1680|0;rb=i+1676|0;sb=i+1672|0;tb=i+1668|0;ub=i+1664|0;vb=i+1660|0;wb=i+1656|0;xb=i+1652|0;yb=i+1648|0;zb=i+1644|0;Ab=i+1640|0;Bb=i+1636|0;Cb=i+1632|0;Db=i+1628|0;Eb=i+1624|0;Fb=i+1620|0;Gb=i+1616|0;Hb=i+1612|0;Ib=i+1608|0;Jb=i+1604|0;Kb=i+1600|0;Lb=i+1596|0;Mb=i+1592|0;Nb=i+1588|0;Ob=i+1584|0;Pb=i+1580|0;Qb=i+1576|0;Rb=i+1572|0;Sb=i+1568|0;Tb=i+1564|0;Ub=i+1560|0;Vb=i+1556|0;Wb=i+1552|0;Xb=i+1548|0;Yb=i+1544|0;Zb=i+1540|0;_b=i+1536|0;$b=i+1532|0;ac=i+1528|0;bc=i+1524|0;cc=i+1520|0;dc=i+1516|0;ec=i+1512|0;fc=i+1508|0;gc=i+1504|0;hc=i+1500|0;ic=i+1496|0;jc=i+1492|0;kc=i+1488|0;lc=i+1484|0;mc=i+1480|0;nc=i+1476|0;oc=i+1472|0;pc=i+1468|0;qc=i+1464|0;rc=i+1460|0;sc=i+1456|0;tc=i+1452|0;uc=i+1448|0;vc=i+1444|0;wc=i+1440|0;xc=i+1436|0;yc=i+1432|0;zc=i+1428|0;Ac=i+1424|0;Bc=i+1420|0;Cc=i+1416|0;Dc=i+1412|0;Ec=i+1408|0;Fc=i+1404|0;Gc=i+1400|0;Hc=i+1396|0;Ic=i+1392|0;Jc=i+1388|0;Kc=i+1384|0;Lc=i+1380|0;Mc=i+1376|0;Nc=i+1372|0;Oc=i+1368|0;Pc=i+1364|0;Qc=i+1360|0;Rc=i+1356|0;Sc=i+1352|0;Tc=i+1348|0;Uc=i+1344|0;Vc=i+1340|0;Wc=i+1336|0;Xc=i+1332|0;Yc=i+1328|0;Zc=i+1324|0;_c=i+1320|0;$c=i+1316|0;ad=i+1312|0;bd=i+1308|0;cd=i+1304|0;dd=i+1300|0;ed=i+1296|0;fd=i+1292|0;gd=i+1288|0;hd=i+1284|0;id=i+1280|0;jd=i+1276|0;kd=i+1272|0;ld=i+1268|0;md=i+1264|0;nd=i+1260|0;od=i+1256|0;pd=i+1252|0;qd=i+1248|0;rd=i+1244|0;sd=i+1240|0;td=i+1236|0;ud=i+1232|0;vd=i+1228|0;wd=i+1224|0;xd=i+1220|0;yd=i+1216|0;zd=i+1212|0;Ad=i+1208|0;Bd=i+1204|0;Cd=i+1200|0;Dd=i+1196|0;Ed=i+1192|0;Fd=i+1188|0;Gd=i+1184|0;Hd=i+1180|0;Id=i+1176|0;Jd=i+1172|0;Kd=i+1168|0;Ld=i+1164|0;Md=i+1160|0;Nd=i+1156|0;Od=i+1152|0;Pd=i+1148|0;Qd=i+1144|0;Rd=i+1140|0;Sd=i+1136|0;Td=i+1132|0;Ud=i+1128|0;Vd=i+1124|0;Wd=i+1120|0;Xd=i+1116|0;Yd=i+1112|0;Zd=i+1108|0;_d=i+1104|0;$d=i+1100|0;ae=i+1096|0;be=i+1092|0;ce=i+1088|0;de=i+1084|0;ee=i+1080|0;fe=i+1076|0;ge=i+1072|0;he=i+1068|0;ie=i+1064|0;je=i+1060|0;ke=i+1056|0;le=i+1052|0;me=i+1048|0;ne=i+1044|0;oe=i+1040|0;pe=i+1036|0;qe=i+1032|0;re=i+1028|0;se=i+1024|0;te=i+1020|0;ue=i+1016|0;ve=i+1012|0;we=i+1008|0;xe=i+1004|0;ye=i+1e3|0;ze=i+996|0;Ae=i+992|0;Be=i+988|0;Ce=i+984|0;De=i+980|0;Ee=i+976|0;Fe=i+972|0;Ge=i+968|0;He=i+964|0;Ie=i+960|0;Je=i+956|0;Ke=i+952|0;Le=i+948|0;Me=i+944|0;Ne=i+940|0;Oe=i+936|0;Pe=i+932|0;Qe=i+928|0;Re=i+924|0;Se=i+920|0;Te=i+916|0;Ue=i+912|0;Ve=i+908|0;We=i+904|0;Xe=i+900|0;Ye=i+896|0;Ze=i+892|0;_e=i+888|0;$e=i+884|0;af=i+880|0;bf=i+876|0;cf=i+872|0;df=i+868|0;ef=i+864|0;ff=i+860|0;gf=i+856|0;hf=i+852|0;jf=i+848|0;kf=i+844|0;lf=i+840|0;mf=i+836|0;nf=i+832|0;of=i+828|0;pf=i+824|0;qf=i+820|0;rf=i+816|0;sf=i+812|0;tf=i+808|0;uf=i+804|0;vf=i+800|0;wf=i+796|0;xf=i+792|0;yf=i+788|0;zf=i+784|0;Af=i+780|0;Bf=i+776|0;Cf=i+772|0;Df=i+768|0;Ef=i+764|0;Ff=i+760|0;Gf=i+756|0;Hf=i+752|0;If=i+748|0;Jf=i+744|0;Kf=i+740|0;Lf=i+736|0;Mf=i+732|0;Nf=i+728|0;Of=i+724|0;Pf=i+720|0;Qf=i+716|0;Rf=i+712|0;Sf=i+708|0;Tf=i+704|0;Uf=i+700|0;Vf=i+696|0;Wf=i+692|0;Xf=i+688|0;Yf=i+684|0;Zf=i+680|0;_f=i+676|0;$f=i+672|0;ag=i+668|0;bg=i+664|0;cg=i+660|0;dg=i+656|0;eg=i+652|0;fg=i+648|0;gg=i+644|0;hg=i+640|0;ig=i+636|0;jg=i+632|0;kg=i+628|0;lg=i+624|0;mg=i+620|0;ng=i+616|0;og=i+612|0;pg=i+608|0;qg=i+604|0;rg=i+600|0;sg=i+596|0;tg=i+592|0;ug=i+588|0;vg=i+584|0;wg=i+580|0;xg=i+576|0;yg=i+572|0;zg=i+568|0;Ag=i+564|0;Bg=i+560|0;Cg=i+556|0;Dg=i+552|0;Eg=i+548|0;Fg=i+544|0;Gg=i+540|0;Hg=i+536|0;Ig=i+532|0;Jg=i+528|0;Kg=i+524|0;Lg=i+520|0;Mg=i+516|0;Ng=i+512|0;Og=i+508|0;Pg=i+504|0;Qg=i+500|0;Rg=i+496|0;Sg=i+492|0;Tg=i+488|0;Ug=i+484|0;Vg=i+480|0;Wg=i+476|0;Xg=i+472|0;Yg=i+468|0;Zg=i+464|0;_g=i+460|0;$g=i+456|0;ah=i+452|0;bh=i+448|0;ch=i+444|0;dh=i+440|0;eh=i+436|0;fh=i+432|0;gh=i+428|0;hh=i+424|0;ih=i+420|0;jh=i+416|0;kh=i+412|0;lh=i+408|0;mh=i+404|0;nh=i+400|0;oh=i+396|0;ph=i+392|0;qh=i+388|0;rh=i+384|0;sh=i+380|0;th=i+376|0;uh=i+372|0;vh=i+368|0;wh=i+364|0;xh=i+360|0;yh=i+356|0;zh=i+352|0;Ah=i+348|0;Bh=i+344|0;Ch=i+340|0;Dh=i+336|0;Eh=i+332|0;Fh=i+328|0;Gh=i+324|0;Hh=i+320|0;Ih=i+316|0;Jh=i+312|0;Kh=i+308|0;Lh=i+304|0;Mh=i+300|0;Nh=i+296|0;Oh=i+292|0;Ph=i+288|0;Qh=i+284|0;Rh=i+280|0;Sh=i+276|0;Th=i+272|0;Uh=i+268|0;Vh=i+264|0;Wh=i+260|0;Xh=i+256|0;Yh=i+252|0;Zh=i+248|0;_h=i+244|0;$h=i+240|0;ai=i+236|0;bi=i+232|0;ci=i+228|0;di=i+216|0;ei=i+212|0;fi=i+208|0;gi=i+204|0;hi=i+200|0;ii=i+196|0;ji=i+192|0;ki=i+188|0;li=i+184|0;mi=i+180|0;ni=i+176|0;oi=i+172|0;pi=i+168|0;qi=i+164|0;ri=i+160|0;si=i+148|0;ti=i+144|0;ui=i+140|0;vi=i+136|0;wi=i+132|0;xi=i+128|0;yi=i+124|0;zi=i+120|0;Ai=i+116|0;Bi=i+112|0;Ci=i+108|0;Di=i+104|0;Ei=i+100|0;Fi=i+88|0;Gi=i+84|0;Hi=i+80|0;Ii=i+76|0;Ji=i+72|0;Ki=i+68|0;Li=i+64|0;Mi=i+60|0;Ni=i+56|0;Oi=i+52|0;Pi=i+48|0;Qi=i+44|0;Ri=i+40|0;Si=i+36|0;Ti=i+32|0;Ui=i+28|0;Vi=i+24|0;Wi=i+20|0;Xi=i+16|0;Yi=i+12|0;Zi=i+8|0;_i=i+4|0;$i=i;c[Wi>>2]=a;c[Xi>>2]=b;c[Yi>>2]=e;c[Zi>>2]=f;c[_i>>2]=g;c[$i>>2]=h;h=c[Xi>>2]|0;Xi=c[Yi>>2]|0;Yi=c[Zi>>2]|0;Zi=c[_i>>2]|0;_i=c[$i>>2]|0;c[Lh>>2]=c[Wi>>2];c[Mh>>2]=h;c[Nh>>2]=Xi;c[Oh>>2]=Yi;c[Ph>>2]=Zi;c[Qh>>2]=_i;c[Rh>>2]=0;c[Sh>>2]=0;c[Th>>2]=(c[Lh>>2]|0)+48;c[Uh>>2]=c[Ph>>2];c[Vh>>2]=c[Uh>>2];c[Wh>>2]=c[Uh>>2];c[Xh>>2]=(c[Uh>>2]|0)+(c[Qh>>2]|0);c[Yh>>2]=(c[Xh>>2]|0)+-8;c[Zh>>2]=c[(c[Lh>>2]|0)+4>>2];c[_h>>2]=(c[Zh>>2]|0)+(c[(c[Lh>>2]|0)+12>>2]|0);if((c[(c[Oh>>2]|0)+20>>2]|0)>>>0<4095)aj=c[(c[Oh>>2]|0)+20>>2]|0;else aj=4095;c[$h>>2]=aj;c[ai>>2]=(c[(c[Oh>>2]|0)+16>>2]|0)==3?3:4;c[bi>>2]=c[(c[Th>>2]|0)+20>>2];c[ci>>2]=c[(c[Th>>2]|0)+16>>2];c[(c[Lh>>2]|0)+28>>2]=c[(c[Lh>>2]|0)+24>>2];lm(c[Th>>2]|0,c[Ph>>2]|0,c[Qh>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+((c[Vh>>2]|0)==(c[_h>>2]|0)&1);c[di>>2]=0;c[di+4>>2]=0;c[di+8>>2]=0;while(1){if((c[Vh>>2]|0)>>>0>=(c[Yh>>2]|0)>>>0)break;c[fi>>2]=0;c[ii>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[ji>>2]=((c[ii>>2]|0)!=0^1)&1;_h=c[Oh>>2]|0;Qh=c[Vh>>2]|0;Ph=c[Xh>>2]|0;aj=c[Sh>>2]|0;Zh=c[Nh>>2]|0;Uh=c[ji>>2]|0;_i=c[ci>>2]|0;Zi=c[ai>>2]|0;c[Bh>>2]=c[Lh>>2];c[Ch>>2]=_h;c[Dh>>2]=Qh;c[Eh>>2]=Ph;c[Fh>>2]=aj;c[Gh>>2]=Zh;c[Hh>>2]=Uh;c[Ih>>2]=_i;c[Jh>>2]=Zi;c[Kh>>2]=c[(c[Ch>>2]|0)+16>>2];a:do{if((c[Dh>>2]|0)>>>0<((c[(c[Bh>>2]|0)+4>>2]|0)+(c[(c[Bh>>2]|0)+24>>2]|0)|0)>>>0)c[Ah>>2]=0;else{Zi=c[Ch>>2]|0;_i=c[Dh>>2]|0;Uh=c[Eh>>2]|0;Zh=c[Kh>>2]|0;aj=c[Fh>>2]|0;c[rh>>2]=c[Bh>>2];c[sh>>2]=Zi;c[th>>2]=_i;c[uh>>2]=Uh;c[vh>>2]=Zh;c[wh>>2]=aj;c[xh>>2]=c[(c[rh>>2]|0)+4>>2];c[yh>>2]=(c[th>>2]|0)-(c[xh>>2]|0);c[zh>>2]=c[(c[rh>>2]|0)+24>>2];while(1){if((c[zh>>2]|0)>>>0>=(c[yh>>2]|0)>>>0)break;aj=Rj(c[rh>>2]|0,c[sh>>2]|0,(c[xh>>2]|0)+(c[zh>>2]|0)|0,c[uh>>2]|0,c[vh>>2]|0,c[wh>>2]|0)|0;c[zh>>2]=(c[zh>>2]|0)+aj;}c[(c[rh>>2]|0)+24>>2]=c[yh>>2];switch(c[Kh>>2]|0){case 3:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[wg>>2]=c[Bh>>2];c[xg>>2]=aj;c[yg>>2]=Zh;c[zg>>2]=Uh;c[Ag>>2]=_i;c[Bg>>2]=Zi;c[Cg>>2]=Ph;c[Dg>>2]=Qh;c[Eg>>2]=_h;c[Fg>>2]=3;if((c[(c[xg>>2]|0)+20>>2]|0)>>>0<4095)bj=c[(c[xg>>2]|0)+20>>2]|0;else bj=4095;c[Gg>>2]=bj;c[Hg>>2]=c[(c[wg>>2]|0)+4>>2];c[Ig>>2]=(c[yg>>2]|0)-(c[Hg>>2]|0);c[Jg>>2]=c[(c[xg>>2]|0)+8>>2];c[Kg>>2]=(c[Fg>>2]|0)==3?3:4;c[Lg>>2]=c[(c[wg>>2]|0)+36>>2];c[Mg>>2]=Sj(c[yg>>2]|0,c[Jg>>2]|0,c[Fg>>2]|0)|0;c[Ng>>2]=c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2];c[Og>>2]=c[(c[wg>>2]|0)+44>>2];c[Pg>>2]=(c[(c[xg>>2]|0)+4>>2]|0)-1;c[Qg>>2]=(1<<c[Pg>>2])-1;c[Rg>>2]=0;c[Sg>>2]=0;c[Tg>>2]=c[(c[wg>>2]|0)+8>>2];c[Ug>>2]=c[(c[wg>>2]|0)+12>>2];c[Vg>>2]=(c[Tg>>2]|0)+(c[Ug>>2]|0);c[Wg>>2]=(c[Hg>>2]|0)+(c[Ug>>2]|0);if((c[Qg>>2]|0)>>>0>=(c[Ig>>2]|0)>>>0)cj=0;else cj=(c[Ig>>2]|0)-(c[Qg>>2]|0)|0;c[Xg>>2]=cj;c[Yg>>2]=c[(c[wg>>2]|0)+16>>2];c[Zg>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2);c[_g>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2)+4;c[$g>>2]=(c[Ig>>2]|0)+8+1;c[bh>>2]=0;c[ch>>2]=1<<c[(c[xg>>2]|0)+12>>2];c[dh>>2]=(c[Eg>>2]|0)-1;c[eh>>2]=3+(c[Cg>>2]|0);c[fh>>2]=c[Cg>>2];while(1){if((c[fh>>2]|0)>>>0>=(c[eh>>2]|0)>>>0){dj=31;break;}_h=c[Bg>>2]|0;if((c[fh>>2]|0)==3)ej=(c[_h>>2]|0)-1|0;else ej=c[_h+(c[fh>>2]<<2)>>2]|0;c[gh>>2]=ej;c[hh>>2]=(c[Ig>>2]|0)-(c[gh>>2]|0);c[ih>>2]=0;if(((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Ug>>2]|0)|0)>>>0){_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0;if((_h|0)==(mm((c[yg>>2]|0)+(0-(c[gh>>2]|0))|0,c[Kg>>2]|0)|0)){_h=Tj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[yg>>2]|0)+(c[Kg>>2]|0)+(0-(c[gh>>2]|0))|0,c[zg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}else{c[jh>>2]=(c[Tg>>2]|0)+(c[hh>>2]|0);if((c[Ag>>2]|0?(((c[Ug>>2]|0)-1-(c[hh>>2]|0)|0)>>>0>=3?((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Yg>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0,(_h|0)==(mm(c[jh>>2]|0,c[Kg>>2]|0)|0)):0){_h=Uj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[jh>>2]|0)+(c[Kg>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}if((c[ih>>2]|0)>>>0>(c[dh>>2]|0)>>>0?(c[dh>>2]=c[ih>>2],c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[fh>>2]|0)-(c[Cg>>2]|0),c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ih>>2],c[bh>>2]=(c[bh>>2]|0)+1,((c[ih>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[ih>>2]|0)|0)==(c[zg>>2]|0))|0):0){dj=29;break;}c[fh>>2]=(c[fh>>2]|0)+1;}do{if((dj|0)==29){dj=0;c[vg>>2]=c[bh>>2];}else if((dj|0)==31){dj=0;if(((c[Fg>>2]|0)==3?(c[dh>>2]|0)>>>0<(c[Fg>>2]|0)>>>0:0)?(c[kh>>2]=nm(c[wg>>2]|0,c[yg>>2]|0)|0,((c[kh>>2]|0)>>>0>(c[Yg>>2]|0)>>>0?((c[Ig>>2]|0)-(c[kh>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ag>>2]|0?(c[kh>>2]|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[nh>>2]=(c[Tg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Uj(c[yg>>2]|0,c[nh>>2]|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;}else{c[mh>>2]=(c[Hg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Tj(c[yg>>2]|0,c[mh>>2]|0,c[zg>>2]|0)|0;}if((c[lh>>2]|0)>>>0>=(c[Fg>>2]|0)>>>0?(c[dh>>2]=c[lh>>2],c[c[Dg>>2]>>2]=(c[Ig>>2]|0)-(c[kh>>2]|0)+2,c[(c[Dg>>2]|0)+4>>2]=c[lh>>2],c[bh>>2]=1,((c[lh>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[lh>>2]|0)|0)==(c[zg>>2]|0))|0):0){c[(c[wg>>2]|0)+24>>2]=(c[Ig>>2]|0)+1;c[vg>>2]=1;break;}}c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2]=c[Ig>>2];while(1){_h=c[ch>>2]|0;c[ch>>2]=_h+-1;if(!_h)break;if((c[Ng>>2]|0)>>>0<=(c[Yg>>2]|0)>>>0)break;c[oh>>2]=(c[Og>>2]|0)+((c[Ng>>2]&c[Qg>>2])<<1<<2);c[ph>>2]=(c[Rg>>2]|0)>>>0<(c[Sg>>2]|0)>>>0?c[Rg>>2]|0:c[Sg>>2]|0;if(c[Ag>>2]|0?((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[qh>>2]=(c[Tg>>2]|0)+(c[Ng>>2]|0);_h=Uj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;if(((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0>=(c[Ug>>2]|0)>>>0)c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);}else{c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);_h=Tj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;}if((c[ph>>2]|0)>>>0>(c[dh>>2]|0)>>>0){if((c[ph>>2]|0)>>>0>((c[$g>>2]|0)-(c[Ng>>2]|0)|0)>>>0)c[$g>>2]=(c[Ng>>2]|0)+(c[ph>>2]|0);c[dh>>2]=c[ph>>2];c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[Ig>>2]|0)-(c[Ng>>2]|0)+2;c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ph>>2];c[bh>>2]=(c[bh>>2]|0)+1;if((c[ph>>2]|0)>>>0>4096)break;if(((c[yg>>2]|0)+(c[ph>>2]|0)|0)==(c[zg>>2]|0))break;}_h=c[Ng>>2]|0;if((d[(c[qh>>2]|0)+(c[ph>>2]|0)>>0]|0|0)<(d[(c[yg>>2]|0)+(c[ph>>2]|0)>>0]|0|0)){c[c[Zg>>2]>>2]=_h;c[Rg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=56;break;}c[Zg>>2]=(c[oh>>2]|0)+4;c[Ng>>2]=c[(c[oh>>2]|0)+4>>2];}else{c[c[_g>>2]>>2]=_h;c[Sg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=59;break;}c[_g>>2]=c[oh>>2];c[Ng>>2]=c[c[oh>>2]>>2];}}if((dj|0)==56){dj=0;c[Zg>>2]=ah;}else if((dj|0)==59){dj=0;c[_g>>2]=ah;}c[c[_g>>2]>>2]=0;c[c[Zg>>2]>>2]=0;c[(c[wg>>2]|0)+24>>2]=(c[$g>>2]|0)-8;c[vg>>2]=c[bh>>2];}}while(0);c[Ah>>2]=c[vg>>2];break a;break;}case 7:case 6:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Hd>>2]=c[Bh>>2];c[Id>>2]=_h;c[Jd>>2]=Qh;c[Kd>>2]=Ph;c[Ld>>2]=Zi;c[Md>>2]=_i;c[Nd>>2]=Uh;c[Od>>2]=Zh;c[Pd>>2]=aj;c[Qd>>2]=6;if((c[(c[Id>>2]|0)+20>>2]|0)>>>0<4095)fj=c[(c[Id>>2]|0)+20>>2]|0;else fj=4095;c[Rd>>2]=fj;c[Sd>>2]=c[(c[Hd>>2]|0)+4>>2];c[Td>>2]=(c[Jd>>2]|0)-(c[Sd>>2]|0);c[Ud>>2]=c[(c[Id>>2]|0)+8>>2];c[Vd>>2]=(c[Qd>>2]|0)==3?3:4;c[Wd>>2]=c[(c[Hd>>2]|0)+36>>2];c[Xd>>2]=Sj(c[Jd>>2]|0,c[Ud>>2]|0,c[Qd>>2]|0)|0;c[Yd>>2]=c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2];c[Zd>>2]=c[(c[Hd>>2]|0)+44>>2];c[_d>>2]=(c[(c[Id>>2]|0)+4>>2]|0)-1;c[$d>>2]=(1<<c[_d>>2])-1;c[ae>>2]=0;c[be>>2]=0;c[ce>>2]=c[(c[Hd>>2]|0)+8>>2];c[de>>2]=c[(c[Hd>>2]|0)+12>>2];c[ee>>2]=(c[ce>>2]|0)+(c[de>>2]|0);c[fe>>2]=(c[Sd>>2]|0)+(c[de>>2]|0);if((c[$d>>2]|0)>>>0>=(c[Td>>2]|0)>>>0)gj=0;else gj=(c[Td>>2]|0)-(c[$d>>2]|0)|0;c[ge>>2]=gj;c[he>>2]=c[(c[Hd>>2]|0)+16>>2];c[ie>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2);c[je>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2)+4;c[ke>>2]=(c[Td>>2]|0)+8+1;c[me>>2]=0;c[ne>>2]=1<<c[(c[Id>>2]|0)+12>>2];c[oe>>2]=(c[Pd>>2]|0)-1;c[pe>>2]=3+(c[Nd>>2]|0);c[qe>>2]=c[Nd>>2];while(1){if((c[qe>>2]|0)>>>0>=(c[pe>>2]|0)>>>0){dj=190;break;}aj=c[Md>>2]|0;if((c[qe>>2]|0)==3)hj=(c[aj>>2]|0)-1|0;else hj=c[aj+(c[qe>>2]<<2)>>2]|0;c[re>>2]=hj;c[se>>2]=(c[Td>>2]|0)-(c[re>>2]|0);c[te>>2]=0;if(((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[de>>2]|0)|0)>>>0){aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0;if((aj|0)==(mm((c[Jd>>2]|0)+(0-(c[re>>2]|0))|0,c[Vd>>2]|0)|0)){aj=Tj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[Jd>>2]|0)+(c[Vd>>2]|0)+(0-(c[re>>2]|0))|0,c[Kd>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}else{c[ue>>2]=(c[ce>>2]|0)+(c[se>>2]|0);if((c[Ld>>2]|0?(((c[de>>2]|0)-1-(c[se>>2]|0)|0)>>>0>=3?((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[he>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0,(aj|0)==(mm(c[ue>>2]|0,c[Vd>>2]|0)|0)):0){aj=Uj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[ue>>2]|0)+(c[Vd>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}if((c[te>>2]|0)>>>0>(c[oe>>2]|0)>>>0?(c[oe>>2]=c[te>>2],c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[qe>>2]|0)-(c[Nd>>2]|0),c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[te>>2],c[me>>2]=(c[me>>2]|0)+1,((c[te>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[te>>2]|0)|0)==(c[Kd>>2]|0))|0):0){dj=188;break;}c[qe>>2]=(c[qe>>2]|0)+1;}do{if((dj|0)==188){dj=0;c[Gd>>2]=c[me>>2];}else if((dj|0)==190){dj=0;if(((c[Qd>>2]|0)==3?(c[oe>>2]|0)>>>0<(c[Qd>>2]|0)>>>0:0)?(c[ve>>2]=nm(c[Hd>>2]|0,c[Jd>>2]|0)|0,((c[ve>>2]|0)>>>0>(c[he>>2]|0)>>>0?((c[Td>>2]|0)-(c[ve>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ld>>2]|0?(c[ve>>2]|0)>>>0<(c[de>>2]|0)>>>0:0){c[ye>>2]=(c[ce>>2]|0)+(c[ve>>2]|0);c[we>>2]=Uj(c[Jd>>2]|0,c[ye>>2]|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;}else{c[xe>>2]=(c[Sd>>2]|0)+(c[ve>>2]|0);c[we>>2]=Tj(c[Jd>>2]|0,c[xe>>2]|0,c[Kd>>2]|0)|0;}if((c[we>>2]|0)>>>0>=(c[Qd>>2]|0)>>>0?(c[oe>>2]=c[we>>2],c[c[Od>>2]>>2]=(c[Td>>2]|0)-(c[ve>>2]|0)+2,c[(c[Od>>2]|0)+4>>2]=c[we>>2],c[me>>2]=1,((c[we>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[we>>2]|0)|0)==(c[Kd>>2]|0))|0):0){c[(c[Hd>>2]|0)+24>>2]=(c[Td>>2]|0)+1;c[Gd>>2]=1;break;}}c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2]=c[Td>>2];while(1){aj=c[ne>>2]|0;c[ne>>2]=aj+-1;if(!aj)break;if((c[Yd>>2]|0)>>>0<=(c[he>>2]|0)>>>0)break;c[ze>>2]=(c[Zd>>2]|0)+((c[Yd>>2]&c[$d>>2])<<1<<2);c[Ae>>2]=(c[ae>>2]|0)>>>0<(c[be>>2]|0)>>>0?c[ae>>2]|0:c[be>>2]|0;if(c[Ld>>2]|0?((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0<(c[de>>2]|0)>>>0:0){c[Be>>2]=(c[ce>>2]|0)+(c[Yd>>2]|0);aj=Uj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;if(((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0>=(c[de>>2]|0)>>>0)c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);}else{c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);aj=Tj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;}if((c[Ae>>2]|0)>>>0>(c[oe>>2]|0)>>>0){if((c[Ae>>2]|0)>>>0>((c[ke>>2]|0)-(c[Yd>>2]|0)|0)>>>0)c[ke>>2]=(c[Yd>>2]|0)+(c[Ae>>2]|0);c[oe>>2]=c[Ae>>2];c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[Td>>2]|0)-(c[Yd>>2]|0)+2;c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[Ae>>2];c[me>>2]=(c[me>>2]|0)+1;if((c[Ae>>2]|0)>>>0>4096)break;if(((c[Jd>>2]|0)+(c[Ae>>2]|0)|0)==(c[Kd>>2]|0))break;}aj=c[Yd>>2]|0;if((d[(c[Be>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)<(d[(c[Jd>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)){c[c[ie>>2]>>2]=aj;c[ae>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=215;break;}c[ie>>2]=(c[ze>>2]|0)+4;c[Yd>>2]=c[(c[ze>>2]|0)+4>>2];}else{c[c[je>>2]>>2]=aj;c[be>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=218;break;}c[je>>2]=c[ze>>2];c[Yd>>2]=c[c[ze>>2]>>2];}}if((dj|0)==215){dj=0;c[ie>>2]=le;}else if((dj|0)==218){dj=0;c[je>>2]=le;}c[c[je>>2]>>2]=0;c[c[ie>>2]>>2]=0;c[(c[Hd>>2]|0)+24>>2]=(c[ke>>2]|0)-8;c[Gd>>2]=c[me>>2];}}while(0);c[Ah>>2]=c[Gd>>2];break a;break;}case 5:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[De>>2]=c[Bh>>2];c[Ee>>2]=aj;c[Fe>>2]=Zh;c[Ge>>2]=Uh;c[He>>2]=_i;c[Ie>>2]=Zi;c[Je>>2]=Ph;c[Ke>>2]=Qh;c[Le>>2]=_h;c[Me>>2]=5;if((c[(c[Ee>>2]|0)+20>>2]|0)>>>0<4095)ij=c[(c[Ee>>2]|0)+20>>2]|0;else ij=4095;c[Ne>>2]=ij;c[Oe>>2]=c[(c[De>>2]|0)+4>>2];c[Pe>>2]=(c[Fe>>2]|0)-(c[Oe>>2]|0);c[Qe>>2]=c[(c[Ee>>2]|0)+8>>2];c[Re>>2]=(c[Me>>2]|0)==3?3:4;c[Se>>2]=c[(c[De>>2]|0)+36>>2];c[Te>>2]=Sj(c[Fe>>2]|0,c[Qe>>2]|0,c[Me>>2]|0)|0;c[Ue>>2]=c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2];c[Ve>>2]=c[(c[De>>2]|0)+44>>2];c[We>>2]=(c[(c[Ee>>2]|0)+4>>2]|0)-1;c[Xe>>2]=(1<<c[We>>2])-1;c[Ye>>2]=0;c[Ze>>2]=0;c[_e>>2]=c[(c[De>>2]|0)+8>>2];c[$e>>2]=c[(c[De>>2]|0)+12>>2];c[af>>2]=(c[_e>>2]|0)+(c[$e>>2]|0);c[bf>>2]=(c[Oe>>2]|0)+(c[$e>>2]|0);if((c[Xe>>2]|0)>>>0>=(c[Pe>>2]|0)>>>0)jj=0;else jj=(c[Pe>>2]|0)-(c[Xe>>2]|0)|0;c[cf>>2]=jj;c[df>>2]=c[(c[De>>2]|0)+16>>2];c[ef>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2);c[ff>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2)+4;c[gf>>2]=(c[Pe>>2]|0)+8+1;c[jf>>2]=0;c[kf>>2]=1<<c[(c[Ee>>2]|0)+12>>2];c[lf>>2]=(c[Le>>2]|0)-1;c[mf>>2]=3+(c[Je>>2]|0);c[nf>>2]=c[Je>>2];while(1){if((c[nf>>2]|0)>>>0>=(c[mf>>2]|0)>>>0){dj=137;break;}_h=c[Ie>>2]|0;if((c[nf>>2]|0)==3)kj=(c[_h>>2]|0)-1|0;else kj=c[_h+(c[nf>>2]<<2)>>2]|0;c[of>>2]=kj;c[pf>>2]=(c[Pe>>2]|0)-(c[of>>2]|0);c[qf>>2]=0;if(((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[$e>>2]|0)|0)>>>0){_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0;if((_h|0)==(mm((c[Fe>>2]|0)+(0-(c[of>>2]|0))|0,c[Re>>2]|0)|0)){_h=Tj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[Fe>>2]|0)+(c[Re>>2]|0)+(0-(c[of>>2]|0))|0,c[Ge>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}else{c[rf>>2]=(c[_e>>2]|0)+(c[pf>>2]|0);if((c[He>>2]|0?(((c[$e>>2]|0)-1-(c[pf>>2]|0)|0)>>>0>=3?((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[df>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0,(_h|0)==(mm(c[rf>>2]|0,c[Re>>2]|0)|0)):0){_h=Uj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[rf>>2]|0)+(c[Re>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}if((c[qf>>2]|0)>>>0>(c[lf>>2]|0)>>>0?(c[lf>>2]=c[qf>>2],c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[nf>>2]|0)-(c[Je>>2]|0),c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[qf>>2],c[jf>>2]=(c[jf>>2]|0)+1,((c[qf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[qf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){dj=135;break;}c[nf>>2]=(c[nf>>2]|0)+1;}do{if((dj|0)==135){dj=0;c[Ce>>2]=c[jf>>2];}else if((dj|0)==137){dj=0;if(((c[Me>>2]|0)==3?(c[lf>>2]|0)>>>0<(c[Me>>2]|0)>>>0:0)?(c[sf>>2]=nm(c[De>>2]|0,c[Fe>>2]|0)|0,((c[sf>>2]|0)>>>0>(c[df>>2]|0)>>>0?((c[Pe>>2]|0)-(c[sf>>2]|0)|0)>>>0<262144:0)|0):0){if(c[He>>2]|0?(c[sf>>2]|0)>>>0<(c[$e>>2]|0)>>>0:0){c[vf>>2]=(c[_e>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Uj(c[Fe>>2]|0,c[vf>>2]|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;}else{c[uf>>2]=(c[Oe>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Tj(c[Fe>>2]|0,c[uf>>2]|0,c[Ge>>2]|0)|0;}if((c[tf>>2]|0)>>>0>=(c[Me>>2]|0)>>>0?(c[lf>>2]=c[tf>>2],c[c[Ke>>2]>>2]=(c[Pe>>2]|0)-(c[sf>>2]|0)+2,c[(c[Ke>>2]|0)+4>>2]=c[tf>>2],c[jf>>2]=1,((c[tf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[tf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){c[(c[De>>2]|0)+24>>2]=(c[Pe>>2]|0)+1;c[Ce>>2]=1;break;}}c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2]=c[Pe>>2];while(1){_h=c[kf>>2]|0;c[kf>>2]=_h+-1;if(!_h)break;if((c[Ue>>2]|0)>>>0<=(c[df>>2]|0)>>>0)break;c[wf>>2]=(c[Ve>>2]|0)+((c[Ue>>2]&c[Xe>>2])<<1<<2);c[xf>>2]=(c[Ye>>2]|0)>>>0<(c[Ze>>2]|0)>>>0?c[Ye>>2]|0:c[Ze>>2]|0;if(c[He>>2]|0?((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0<(c[$e>>2]|0)>>>0:0){c[yf>>2]=(c[_e>>2]|0)+(c[Ue>>2]|0);_h=Uj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;if(((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0>=(c[$e>>2]|0)>>>0)c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);}else{c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);_h=Tj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;}if((c[xf>>2]|0)>>>0>(c[lf>>2]|0)>>>0){if((c[xf>>2]|0)>>>0>((c[gf>>2]|0)-(c[Ue>>2]|0)|0)>>>0)c[gf>>2]=(c[Ue>>2]|0)+(c[xf>>2]|0);c[lf>>2]=c[xf>>2];c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[Pe>>2]|0)-(c[Ue>>2]|0)+2;c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[xf>>2];c[jf>>2]=(c[jf>>2]|0)+1;if((c[xf>>2]|0)>>>0>4096)break;if(((c[Fe>>2]|0)+(c[xf>>2]|0)|0)==(c[Ge>>2]|0))break;}_h=c[Ue>>2]|0;if((d[(c[yf>>2]|0)+(c[xf>>2]|0)>>0]|0|0)<(d[(c[Fe>>2]|0)+(c[xf>>2]|0)>>0]|0|0)){c[c[ef>>2]>>2]=_h;c[Ye>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=162;break;}c[ef>>2]=(c[wf>>2]|0)+4;c[Ue>>2]=c[(c[wf>>2]|0)+4>>2];}else{c[c[ff>>2]>>2]=_h;c[Ze>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=165;break;}c[ff>>2]=c[wf>>2];c[Ue>>2]=c[c[wf>>2]>>2];}}if((dj|0)==162){dj=0;c[ef>>2]=hf;}else if((dj|0)==165){dj=0;c[ff>>2]=hf;}c[c[ff>>2]>>2]=0;c[c[ef>>2]>>2]=0;c[(c[De>>2]|0)+24>>2]=(c[gf>>2]|0)-8;c[Ce>>2]=c[jf>>2];}}while(0);c[Ah>>2]=c[Ce>>2];break a;break;}default:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Af>>2]=c[Bh>>2];c[Bf>>2]=_h;c[Cf>>2]=Qh;c[Df>>2]=Ph;c[Ef>>2]=Zi;c[Ff>>2]=_i;c[Gf>>2]=Uh;c[Hf>>2]=Zh;c[If>>2]=aj;c[Jf>>2]=4;if((c[(c[Bf>>2]|0)+20>>2]|0)>>>0<4095)lj=c[(c[Bf>>2]|0)+20>>2]|0;else lj=4095;c[Kf>>2]=lj;c[Lf>>2]=c[(c[Af>>2]|0)+4>>2];c[Mf>>2]=(c[Cf>>2]|0)-(c[Lf>>2]|0);c[Nf>>2]=c[(c[Bf>>2]|0)+8>>2];c[Of>>2]=(c[Jf>>2]|0)==3?3:4;c[Pf>>2]=c[(c[Af>>2]|0)+36>>2];c[Qf>>2]=Sj(c[Cf>>2]|0,c[Nf>>2]|0,c[Jf>>2]|0)|0;c[Rf>>2]=c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2];c[Sf>>2]=c[(c[Af>>2]|0)+44>>2];c[Tf>>2]=(c[(c[Bf>>2]|0)+4>>2]|0)-1;c[Uf>>2]=(1<<c[Tf>>2])-1;c[Vf>>2]=0;c[Wf>>2]=0;c[Xf>>2]=c[(c[Af>>2]|0)+8>>2];c[Yf>>2]=c[(c[Af>>2]|0)+12>>2];c[Zf>>2]=(c[Xf>>2]|0)+(c[Yf>>2]|0);c[_f>>2]=(c[Lf>>2]|0)+(c[Yf>>2]|0);if((c[Uf>>2]|0)>>>0>=(c[Mf>>2]|0)>>>0)mj=0;else mj=(c[Mf>>2]|0)-(c[Uf>>2]|0)|0;c[$f>>2]=mj;c[ag>>2]=c[(c[Af>>2]|0)+16>>2];c[bg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2);c[cg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2)+4;c[dg>>2]=(c[Mf>>2]|0)+8+1;c[fg>>2]=0;c[gg>>2]=1<<c[(c[Bf>>2]|0)+12>>2];c[hg>>2]=(c[If>>2]|0)-1;c[ig>>2]=3+(c[Gf>>2]|0);c[jg>>2]=c[Gf>>2];while(1){if((c[jg>>2]|0)>>>0>=(c[ig>>2]|0)>>>0){dj=84;break;}aj=c[Ff>>2]|0;if((c[jg>>2]|0)==3)nj=(c[aj>>2]|0)-1|0;else nj=c[aj+(c[jg>>2]<<2)>>2]|0;c[kg>>2]=nj;c[lg>>2]=(c[Mf>>2]|0)-(c[kg>>2]|0);c[mg>>2]=0;if(((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[Yf>>2]|0)|0)>>>0){aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0;if((aj|0)==(mm((c[Cf>>2]|0)+(0-(c[kg>>2]|0))|0,c[Of>>2]|0)|0)){aj=Tj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[Cf>>2]|0)+(c[Of>>2]|0)+(0-(c[kg>>2]|0))|0,c[Df>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}else{c[ng>>2]=(c[Xf>>2]|0)+(c[lg>>2]|0);if((c[Ef>>2]|0?(((c[Yf>>2]|0)-1-(c[lg>>2]|0)|0)>>>0>=3?((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[ag>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0,(aj|0)==(mm(c[ng>>2]|0,c[Of>>2]|0)|0)):0){aj=Uj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[ng>>2]|0)+(c[Of>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}if((c[mg>>2]|0)>>>0>(c[hg>>2]|0)>>>0?(c[hg>>2]=c[mg>>2],c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[jg>>2]|0)-(c[Gf>>2]|0),c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[mg>>2],c[fg>>2]=(c[fg>>2]|0)+1,((c[mg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[mg>>2]|0)|0)==(c[Df>>2]|0))|0):0){dj=82;break;}c[jg>>2]=(c[jg>>2]|0)+1;}do{if((dj|0)==82){dj=0;c[zf>>2]=c[fg>>2];}else if((dj|0)==84){dj=0;if(((c[Jf>>2]|0)==3?(c[hg>>2]|0)>>>0<(c[Jf>>2]|0)>>>0:0)?(c[og>>2]=nm(c[Af>>2]|0,c[Cf>>2]|0)|0,((c[og>>2]|0)>>>0>(c[ag>>2]|0)>>>0?((c[Mf>>2]|0)-(c[og>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ef>>2]|0?(c[og>>2]|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[rg>>2]=(c[Xf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Uj(c[Cf>>2]|0,c[rg>>2]|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;}else{c[qg>>2]=(c[Lf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Tj(c[Cf>>2]|0,c[qg>>2]|0,c[Df>>2]|0)|0;}if((c[pg>>2]|0)>>>0>=(c[Jf>>2]|0)>>>0?(c[hg>>2]=c[pg>>2],c[c[Hf>>2]>>2]=(c[Mf>>2]|0)-(c[og>>2]|0)+2,c[(c[Hf>>2]|0)+4>>2]=c[pg>>2],c[fg>>2]=1,((c[pg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[pg>>2]|0)|0)==(c[Df>>2]|0))|0):0){c[(c[Af>>2]|0)+24>>2]=(c[Mf>>2]|0)+1;c[zf>>2]=1;break;}}c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2]=c[Mf>>2];while(1){aj=c[gg>>2]|0;c[gg>>2]=aj+-1;if(!aj)break;if((c[Rf>>2]|0)>>>0<=(c[ag>>2]|0)>>>0)break;c[sg>>2]=(c[Sf>>2]|0)+((c[Rf>>2]&c[Uf>>2])<<1<<2);c[tg>>2]=(c[Vf>>2]|0)>>>0<(c[Wf>>2]|0)>>>0?c[Vf>>2]|0:c[Wf>>2]|0;if(c[Ef>>2]|0?((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[ug>>2]=(c[Xf>>2]|0)+(c[Rf>>2]|0);aj=Uj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;if(((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0>=(c[Yf>>2]|0)>>>0)c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);}else{c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);aj=Tj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;}if((c[tg>>2]|0)>>>0>(c[hg>>2]|0)>>>0){if((c[tg>>2]|0)>>>0>((c[dg>>2]|0)-(c[Rf>>2]|0)|0)>>>0)c[dg>>2]=(c[Rf>>2]|0)+(c[tg>>2]|0);c[hg>>2]=c[tg>>2];c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[Mf>>2]|0)-(c[Rf>>2]|0)+2;c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[tg>>2];c[fg>>2]=(c[fg>>2]|0)+1;if((c[tg>>2]|0)>>>0>4096)break;if(((c[Cf>>2]|0)+(c[tg>>2]|0)|0)==(c[Df>>2]|0))break;}aj=c[Rf>>2]|0;if((d[(c[ug>>2]|0)+(c[tg>>2]|0)>>0]|0|0)<(d[(c[Cf>>2]|0)+(c[tg>>2]|0)>>0]|0|0)){c[c[bg>>2]>>2]=aj;c[Vf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=109;break;}c[bg>>2]=(c[sg>>2]|0)+4;c[Rf>>2]=c[(c[sg>>2]|0)+4>>2];}else{c[c[cg>>2]>>2]=aj;c[Wf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=112;break;}c[cg>>2]=c[sg>>2];c[Rf>>2]=c[c[sg>>2]>>2];}}if((dj|0)==109){dj=0;c[bg>>2]=eg;}else if((dj|0)==112){dj=0;c[cg>>2]=eg;}c[c[cg>>2]>>2]=0;c[c[bg>>2]>>2]=0;c[(c[Af>>2]|0)+24>>2]=(c[dg>>2]|0)-8;c[zf>>2]=c[fg>>2];}}while(0);c[Ah>>2]=c[zf>>2];break a;}}}}while(0);c[ki>>2]=c[Ah>>2];if(!(c[ki>>2]|0)){c[Vh>>2]=(c[Vh>>2]|0)+1;continue;}c[li>>2]=0;while(1){if((c[li>>2]|0)>>>0>=3)break;c[(c[bi>>2]|0)+16+(c[li>>2]<<2)>>2]=c[(c[Nh>>2]|0)+(c[li>>2]<<2)>>2];c[li>>2]=(c[li>>2]|0)+1;}c[(c[bi>>2]|0)+8>>2]=1;c[(c[bi>>2]|0)+12>>2]=c[ii>>2];c[mi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)+4>>2];do{if((c[mi>>2]|0)>>>0<=(c[$h>>2]|0)>>>0){c[ni>>2]=om(di,c[Wh>>2]|0,c[ii>>2]|0,c[Th>>2]|0)|0;c[oi>>2]=0;while(1){if((c[oi>>2]|0)>>>0>=(c[ai>>2]|0)>>>0)break;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=1073741824;c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=0;while(1){if((c[pi>>2]|0)>>>0>=(c[ki>>2]|0)>>>0)break;c[qi>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)>>2];c[ri>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)+4>>2];pm(si,c[Nh>>2]|0,c[qi>>2]|0,c[ji>>2]|0);while(1){if((c[oi>>2]|0)>>>0>(c[ri>>2]|0)>>>0)break;aj=c[ni>>2]|0;Zh=c[oi>>2]|0;Uh=c[Th>>2]|0;_i=c[Rh>>2]|0;c[yd>>2]=c[qi>>2];c[zd>>2]=Zh;c[Ad>>2]=Uh;c[Bd>>2]=_i;c[Dd>>2]=qm((c[yd>>2]|0)+1|0)|0;c[Ed>>2]=(c[zd>>2]|0)-3;if(c[(c[Ad>>2]|0)+56>>2]|0){_i=(qm((c[Ed>>2]|0)+1|0)|0)+16|0;c[xd>>2]=_i+(c[Dd>>2]|0);}else{_i=(c[Dd>>2]|0)+(c[(c[Ad>>2]|0)+52>>2]|0)|0;c[Cd>>2]=_i-(qm((c[(c[(c[Ad>>2]|0)+12>>2]|0)+(c[Dd>>2]<<2)>>2]|0)+1|0)|0);if((c[Bd>>2]|0)<2&(c[Dd>>2]|0)>>>0>=20)c[Cd>>2]=(c[Cd>>2]|0)+((c[Dd>>2]|0)-19<<1);c[Fd>>2]=rm(c[Ed>>2]|0)|0;_i=(c[5840+(c[Fd>>2]<<2)>>2]|0)+(c[(c[Ad>>2]|0)+48>>2]|0)|0;Uh=_i-(qm((c[(c[(c[Ad>>2]|0)+8>>2]|0)+(c[Fd>>2]<<2)>>2]|0)+1|0)|0)|0;c[Cd>>2]=(c[Cd>>2]|0)+Uh;c[xd>>2]=c[Cd>>2];}c[ti>>2]=aj+(c[xd>>2]|0);c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=c[oi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+4>>2]=c[qi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+12>>2]=c[ii>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=c[ti>>2];aj=(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+16|0;c[aj>>2]=c[si>>2];c[aj+4>>2]=c[si+4>>2];c[aj+8>>2]=c[si+8>>2];c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=(c[pi>>2]|0)+1;}c[fi>>2]=(c[oi>>2]|0)-1;c[ei>>2]=1;b:while(1){if((c[ei>>2]|0)>>>0>(c[fi>>2]|0)>>>0){dj=504;break;}c[ui>>2]=(c[Vh>>2]|0)+(c[ei>>2]|0);if((c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+8>>2]|0)==1)oj=(c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+12>>2]|0)+1|0;else oj=1;c[vi>>2]=oj;if((c[ei>>2]|0)>>>0>(c[vi>>2]|0)>>>0){aj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[vi>>2]|0)|0)*28|0)>>2]|0;c[wi>>2]=aj+(sm((c[ui>>2]|0)+(0-(c[vi>>2]|0))|0,c[vi>>2]|0,c[Th>>2]|0)|0);}else c[wi>>2]=tm(di,c[Wh>>2]|0,c[vi>>2]|0,c[Th>>2]|0)|0;if((c[wi>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0)){c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+4>>2]=0;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]=c[vi>>2];c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]=c[wi>>2];aj=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Uh=(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+16|0;c[aj>>2]=c[Uh>>2];c[aj+4>>2]=c[Uh+4>>2];c[aj+8>>2]=c[Uh+8>>2];}c:do{if((c[ui>>2]|0)>>>0<=(c[Yh>>2]|0)>>>0){if((c[ei>>2]|0)==(c[fi>>2]|0)){dj=504;break b;}if((c[Rh>>2]|0)==0?(c[(c[bi>>2]|0)+(((c[ei>>2]|0)+1|0)*28|0)>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0):0)break;c[xi>>2]=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)!=1&1;if((c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)==1)pj=c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]|0;else pj=0;c[yi>>2]=pj;if((c[ei>>2]|0)>>>0>(c[yi>>2]|0)>>>0)qj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[yi>>2]|0)|0)*28|0)>>2]|0;else qj=0;c[zi>>2]=qj;Uh=c[zi>>2]|0;c[Ai>>2]=Uh+(um((c[ui>>2]|0)+(0-(c[yi>>2]|0))|0,c[yi>>2]|0,c[Th>>2]|0)|0);Uh=c[Oh>>2]|0;aj=c[ui>>2]|0;_i=c[Xh>>2]|0;Zh=c[Sh>>2]|0;Zi=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Ph=c[xi>>2]|0;Qh=c[ci>>2]|0;_h=c[ai>>2]|0;c[nd>>2]=c[Lh>>2];c[od>>2]=Uh;c[pd>>2]=aj;c[qd>>2]=_i;c[rd>>2]=Zh;c[sd>>2]=Zi;c[td>>2]=Ph;c[ud>>2]=Qh;c[vd>>2]=_h;c[wd>>2]=c[(c[od>>2]|0)+16>>2];d:do{if((c[pd>>2]|0)>>>0<((c[(c[nd>>2]|0)+4>>2]|0)+(c[(c[nd>>2]|0)+24>>2]|0)|0)>>>0)c[md>>2]=0;else{_h=c[od>>2]|0;Qh=c[pd>>2]|0;Ph=c[qd>>2]|0;Zi=c[wd>>2]|0;Zh=c[rd>>2]|0;c[dd>>2]=c[nd>>2];c[ed>>2]=_h;c[fd>>2]=Qh;c[gd>>2]=Ph;c[hd>>2]=Zi;c[id>>2]=Zh;c[jd>>2]=c[(c[dd>>2]|0)+4>>2];c[kd>>2]=(c[fd>>2]|0)-(c[jd>>2]|0);c[ld>>2]=c[(c[dd>>2]|0)+24>>2];while(1){if((c[ld>>2]|0)>>>0>=(c[kd>>2]|0)>>>0)break;Zh=Rj(c[dd>>2]|0,c[ed>>2]|0,(c[jd>>2]|0)+(c[ld>>2]|0)|0,c[gd>>2]|0,c[hd>>2]|0,c[id>>2]|0)|0;c[ld>>2]=(c[ld>>2]|0)+Zh;}c[(c[dd>>2]|0)+24>>2]=c[kd>>2];switch(c[wd>>2]|0){case 3:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[ic>>2]=c[nd>>2];c[jc>>2]=Zh;c[kc>>2]=Zi;c[lc>>2]=Ph;c[mc>>2]=Qh;c[nc>>2]=_h;c[oc>>2]=_i;c[pc>>2]=aj;c[qc>>2]=Uh;c[rc>>2]=3;if((c[(c[jc>>2]|0)+20>>2]|0)>>>0<4095)rj=c[(c[jc>>2]|0)+20>>2]|0;else rj=4095;c[sc>>2]=rj;c[tc>>2]=c[(c[ic>>2]|0)+4>>2];c[uc>>2]=(c[kc>>2]|0)-(c[tc>>2]|0);c[vc>>2]=c[(c[jc>>2]|0)+8>>2];c[wc>>2]=(c[rc>>2]|0)==3?3:4;c[xc>>2]=c[(c[ic>>2]|0)+36>>2];c[yc>>2]=Sj(c[kc>>2]|0,c[vc>>2]|0,c[rc>>2]|0)|0;c[zc>>2]=c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2];c[Ac>>2]=c[(c[ic>>2]|0)+44>>2];c[Bc>>2]=(c[(c[jc>>2]|0)+4>>2]|0)-1;c[Cc>>2]=(1<<c[Bc>>2])-1;c[Dc>>2]=0;c[Ec>>2]=0;c[Fc>>2]=c[(c[ic>>2]|0)+8>>2];c[Gc>>2]=c[(c[ic>>2]|0)+12>>2];c[Hc>>2]=(c[Fc>>2]|0)+(c[Gc>>2]|0);c[Ic>>2]=(c[tc>>2]|0)+(c[Gc>>2]|0);if((c[Cc>>2]|0)>>>0>=(c[uc>>2]|0)>>>0)sj=0;else sj=(c[uc>>2]|0)-(c[Cc>>2]|0)|0;c[Jc>>2]=sj;c[Kc>>2]=c[(c[ic>>2]|0)+16>>2];c[Lc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2);c[Mc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2)+4;c[Nc>>2]=(c[uc>>2]|0)+8+1;c[Pc>>2]=0;c[Qc>>2]=1<<c[(c[jc>>2]|0)+12>>2];c[Rc>>2]=(c[qc>>2]|0)-1;c[Sc>>2]=3+(c[oc>>2]|0);c[Tc>>2]=c[oc>>2];while(1){if((c[Tc>>2]|0)>>>0>=(c[Sc>>2]|0)>>>0){dj=287;break;}Uh=c[nc>>2]|0;if((c[Tc>>2]|0)==3)tj=(c[Uh>>2]|0)-1|0;else tj=c[Uh+(c[Tc>>2]<<2)>>2]|0;c[Uc>>2]=tj;c[Vc>>2]=(c[uc>>2]|0)-(c[Uc>>2]|0);c[Wc>>2]=0;do{if(((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Gc>>2]|0)|0)>>>0){Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm((c[kc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[wc>>2]|0)|0))break;Uh=Tj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[kc>>2]|0)+(c[wc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[lc>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}else{c[Xc>>2]=(c[Fc>>2]|0)+(c[Vc>>2]|0);if(!(c[mc>>2]|0))break;if(!((((c[Gc>>2]|0)-1-(c[Vc>>2]|0)|0)>>>0>=3?((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Kc>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm(c[Xc>>2]|0,c[wc>>2]|0)|0))break;Uh=Uj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[Xc>>2]|0)+(c[wc>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}}while(0);if((c[Wc>>2]|0)>>>0>(c[Rc>>2]|0)>>>0?(c[Rc>>2]=c[Wc>>2],c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[Tc>>2]|0)-(c[oc>>2]|0),c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[Wc>>2],c[Pc>>2]=(c[Pc>>2]|0)+1,((c[Wc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Wc>>2]|0)|0)==(c[lc>>2]|0))|0):0){dj=285;break;}c[Tc>>2]=(c[Tc>>2]|0)+1;}e:do{if((dj|0)==285){dj=0;c[hc>>2]=c[Pc>>2];}else if((dj|0)==287){dj=0;do{if((c[rc>>2]|0)==3){if((c[Rc>>2]|0)>>>0>=(c[rc>>2]|0)>>>0)break;c[Yc>>2]=nm(c[ic>>2]|0,c[kc>>2]|0)|0;if(!(((c[Yc>>2]|0)>>>0>(c[Kc>>2]|0)>>>0?((c[uc>>2]|0)-(c[Yc>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[mc>>2]|0){if((c[Yc>>2]|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=292;break;}c[$c>>2]=(c[Fc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Uj(c[kc>>2]|0,c[$c>>2]|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;}else dj=292;}while(0);if((dj|0)==292){dj=0;c[_c>>2]=(c[tc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Tj(c[kc>>2]|0,c[_c>>2]|0,c[lc>>2]|0)|0;}if((c[Zc>>2]|0)>>>0<(c[rc>>2]|0)>>>0)break;c[Rc>>2]=c[Zc>>2];c[c[pc>>2]>>2]=(c[uc>>2]|0)-(c[Yc>>2]|0)+2;c[(c[pc>>2]|0)+4>>2]=c[Zc>>2];c[Pc>>2]=1;if(!(((c[Zc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Zc>>2]|0)|0)==(c[lc>>2]|0))|0))break;c[(c[ic>>2]|0)+24>>2]=(c[uc>>2]|0)+1;c[hc>>2]=1;break e;}}while(0);c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2]=c[uc>>2];while(1){Uh=c[Qc>>2]|0;c[Qc>>2]=Uh+-1;if(!Uh)break;if((c[zc>>2]|0)>>>0<=(c[Kc>>2]|0)>>>0)break;c[ad>>2]=(c[Ac>>2]|0)+((c[zc>>2]&c[Cc>>2])<<1<<2);c[bd>>2]=(c[Dc>>2]|0)>>>0<(c[Ec>>2]|0)>>>0?c[Dc>>2]|0:c[Ec>>2]|0;do{if(c[mc>>2]|0){if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=302;break;}c[cd>>2]=(c[Fc>>2]|0)+(c[zc>>2]|0);Uh=Uj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0<(c[Gc>>2]|0)>>>0)break;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);}else dj=302;}while(0);if((dj|0)==302){dj=0;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);Uh=Tj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;}if((c[bd>>2]|0)>>>0>(c[Rc>>2]|0)>>>0){if((c[bd>>2]|0)>>>0>((c[Nc>>2]|0)-(c[zc>>2]|0)|0)>>>0)c[Nc>>2]=(c[zc>>2]|0)+(c[bd>>2]|0);c[Rc>>2]=c[bd>>2];c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[uc>>2]|0)-(c[zc>>2]|0)+2;c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[bd>>2];c[Pc>>2]=(c[Pc>>2]|0)+1;if((c[bd>>2]|0)>>>0>4096)break;if(((c[kc>>2]|0)+(c[bd>>2]|0)|0)==(c[lc>>2]|0))break;}Uh=c[zc>>2]|0;if((d[(c[cd>>2]|0)+(c[bd>>2]|0)>>0]|0|0)<(d[(c[kc>>2]|0)+(c[bd>>2]|0)>>0]|0|0)){c[c[Lc>>2]>>2]=Uh;c[Dc>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=312;break;}c[Lc>>2]=(c[ad>>2]|0)+4;c[zc>>2]=c[(c[ad>>2]|0)+4>>2];}else{c[c[Mc>>2]>>2]=Uh;c[Ec>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=315;break;}c[Mc>>2]=c[ad>>2];c[zc>>2]=c[c[ad>>2]>>2];}}if((dj|0)==312){dj=0;c[Lc>>2]=Oc;}else if((dj|0)==315){dj=0;c[Mc>>2]=Oc;}c[c[Mc>>2]>>2]=0;c[c[Lc>>2]>>2]=0;c[(c[ic>>2]|0)+24>>2]=(c[Nc>>2]|0)-8;c[hc>>2]=c[Pc>>2];}}while(0);c[md>>2]=c[hc>>2];break d;break;}case 7:case 6:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[u>>2]=c[nd>>2];c[v>>2]=Uh;c[w>>2]=aj;c[x>>2]=_i;c[y>>2]=_h;c[z>>2]=Qh;c[A>>2]=Ph;c[B>>2]=Zi;c[C>>2]=Zh;c[D>>2]=6;if((c[(c[v>>2]|0)+20>>2]|0)>>>0<4095)uj=c[(c[v>>2]|0)+20>>2]|0;else uj=4095;c[E>>2]=uj;c[F>>2]=c[(c[u>>2]|0)+4>>2];c[G>>2]=(c[w>>2]|0)-(c[F>>2]|0);c[H>>2]=c[(c[v>>2]|0)+8>>2];c[I>>2]=(c[D>>2]|0)==3?3:4;c[J>>2]=c[(c[u>>2]|0)+36>>2];c[K>>2]=Sj(c[w>>2]|0,c[H>>2]|0,c[D>>2]|0)|0;c[L>>2]=c[(c[J>>2]|0)+(c[K>>2]<<2)>>2];c[M>>2]=c[(c[u>>2]|0)+44>>2];c[N>>2]=(c[(c[v>>2]|0)+4>>2]|0)-1;c[O>>2]=(1<<c[N>>2])-1;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=c[(c[u>>2]|0)+8>>2];c[S>>2]=c[(c[u>>2]|0)+12>>2];c[T>>2]=(c[R>>2]|0)+(c[S>>2]|0);c[U>>2]=(c[F>>2]|0)+(c[S>>2]|0);if((c[O>>2]|0)>>>0>=(c[G>>2]|0)>>>0)vj=0;else vj=(c[G>>2]|0)-(c[O>>2]|0)|0;c[V>>2]=vj;c[W>>2]=c[(c[u>>2]|0)+16>>2];c[X>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2);c[Y>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2)+4;c[Z>>2]=(c[G>>2]|0)+8+1;c[$>>2]=0;c[aa>>2]=1<<c[(c[v>>2]|0)+12>>2];c[ba>>2]=(c[C>>2]|0)-1;c[ca>>2]=3+(c[A>>2]|0);c[da>>2]=c[A>>2];while(1){if((c[da>>2]|0)>>>0>=(c[ca>>2]|0)>>>0){dj=446;break;}Zh=c[z>>2]|0;if((c[da>>2]|0)==3)wj=(c[Zh>>2]|0)-1|0;else wj=c[Zh+(c[da>>2]<<2)>>2]|0;c[ea>>2]=wj;c[fa>>2]=(c[G>>2]|0)-(c[ea>>2]|0);c[ga>>2]=0;do{if(((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[S>>2]|0)|0)>>>0){Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm((c[w>>2]|0)+(0-(c[ea>>2]|0))|0,c[I>>2]|0)|0))break;Zh=Tj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[w>>2]|0)+(c[I>>2]|0)+(0-(c[ea>>2]|0))|0,c[x>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}else{c[ha>>2]=(c[R>>2]|0)+(c[fa>>2]|0);if(!(c[y>>2]|0))break;if(!((((c[S>>2]|0)-1-(c[fa>>2]|0)|0)>>>0>=3?((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[W>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm(c[ha>>2]|0,c[I>>2]|0)|0))break;Zh=Uj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[ha>>2]|0)+(c[I>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}}while(0);if((c[ga>>2]|0)>>>0>(c[ba>>2]|0)>>>0?(c[ba>>2]=c[ga>>2],c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[da>>2]|0)-(c[A>>2]|0),c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[ga>>2],c[$>>2]=(c[$>>2]|0)+1,((c[ga>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ga>>2]|0)|0)==(c[x>>2]|0))|0):0){dj=444;break;}c[da>>2]=(c[da>>2]|0)+1;}f:do{if((dj|0)==444){dj=0;c[t>>2]=c[$>>2];}else if((dj|0)==446){dj=0;do{if((c[D>>2]|0)==3){if((c[ba>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[ia>>2]=nm(c[u>>2]|0,c[w>>2]|0)|0;if(!(((c[ia>>2]|0)>>>0>(c[W>>2]|0)>>>0?((c[G>>2]|0)-(c[ia>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[y>>2]|0){if((c[ia>>2]|0)>>>0>=(c[S>>2]|0)>>>0){dj=451;break;}c[la>>2]=(c[R>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Uj(c[w>>2]|0,c[la>>2]|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;}else dj=451;}while(0);if((dj|0)==451){dj=0;c[ka>>2]=(c[F>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Tj(c[w>>2]|0,c[ka>>2]|0,c[x>>2]|0)|0;}if((c[ja>>2]|0)>>>0<(c[D>>2]|0)>>>0)break;c[ba>>2]=c[ja>>2];c[c[B>>2]>>2]=(c[G>>2]|0)-(c[ia>>2]|0)+2;c[(c[B>>2]|0)+4>>2]=c[ja>>2];c[$>>2]=1;if(!(((c[ja>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ja>>2]|0)|0)==(c[x>>2]|0))|0))break;c[(c[u>>2]|0)+24>>2]=(c[G>>2]|0)+1;c[t>>2]=1;break f;}}while(0);c[(c[J>>2]|0)+(c[K>>2]<<2)>>2]=c[G>>2];while(1){Zh=c[aa>>2]|0;c[aa>>2]=Zh+-1;if(!Zh)break;if((c[L>>2]|0)>>>0<=(c[W>>2]|0)>>>0)break;c[ma>>2]=(c[M>>2]|0)+((c[L>>2]&c[O>>2])<<1<<2);c[na>>2]=(c[P>>2]|0)>>>0<(c[Q>>2]|0)>>>0?c[P>>2]|0:c[Q>>2]|0;do{if(c[y>>2]|0){if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0>=(c[S>>2]|0)>>>0){dj=461;break;}c[oa>>2]=(c[R>>2]|0)+(c[L>>2]|0);Zh=Uj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0<(c[S>>2]|0)>>>0)break;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);}else dj=461;}while(0);if((dj|0)==461){dj=0;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);Zh=Tj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;}if((c[na>>2]|0)>>>0>(c[ba>>2]|0)>>>0){if((c[na>>2]|0)>>>0>((c[Z>>2]|0)-(c[L>>2]|0)|0)>>>0)c[Z>>2]=(c[L>>2]|0)+(c[na>>2]|0);c[ba>>2]=c[na>>2];c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[G>>2]|0)-(c[L>>2]|0)+2;c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[na>>2];c[$>>2]=(c[$>>2]|0)+1;if((c[na>>2]|0)>>>0>4096)break;if(((c[w>>2]|0)+(c[na>>2]|0)|0)==(c[x>>2]|0))break;}Zh=c[L>>2]|0;if((d[(c[oa>>2]|0)+(c[na>>2]|0)>>0]|0|0)<(d[(c[w>>2]|0)+(c[na>>2]|0)>>0]|0|0)){c[c[X>>2]>>2]=Zh;c[P>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=471;break;}c[X>>2]=(c[ma>>2]|0)+4;c[L>>2]=c[(c[ma>>2]|0)+4>>2];}else{c[c[Y>>2]>>2]=Zh;c[Q>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=474;break;}c[Y>>2]=c[ma>>2];c[L>>2]=c[c[ma>>2]>>2];}}if((dj|0)==471){dj=0;c[X>>2]=_;}else if((dj|0)==474){dj=0;c[Y>>2]=_;}c[c[Y>>2]>>2]=0;c[c[X>>2]>>2]=0;c[(c[u>>2]|0)+24>>2]=(c[Z>>2]|0)-8;c[t>>2]=c[$>>2];}}while(0);c[md>>2]=c[t>>2];break d;break;}case 5:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[qa>>2]=c[nd>>2];c[ra>>2]=Zh;c[sa>>2]=Zi;c[ta>>2]=Ph;c[ua>>2]=Qh;c[va>>2]=_h;c[wa>>2]=_i;c[xa>>2]=aj;c[ya>>2]=Uh;c[za>>2]=5;if((c[(c[ra>>2]|0)+20>>2]|0)>>>0<4095)xj=c[(c[ra>>2]|0)+20>>2]|0;else xj=4095;c[Aa>>2]=xj;c[Ba>>2]=c[(c[qa>>2]|0)+4>>2];c[Ca>>2]=(c[sa>>2]|0)-(c[Ba>>2]|0);c[Da>>2]=c[(c[ra>>2]|0)+8>>2];c[Ea>>2]=(c[za>>2]|0)==3?3:4;c[Fa>>2]=c[(c[qa>>2]|0)+36>>2];c[Ga>>2]=Sj(c[sa>>2]|0,c[Da>>2]|0,c[za>>2]|0)|0;c[Ha>>2]=c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2];c[Ia>>2]=c[(c[qa>>2]|0)+44>>2];c[Ja>>2]=(c[(c[ra>>2]|0)+4>>2]|0)-1;c[Ka>>2]=(1<<c[Ja>>2])-1;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=c[(c[qa>>2]|0)+8>>2];c[Oa>>2]=c[(c[qa>>2]|0)+12>>2];c[Pa>>2]=(c[Na>>2]|0)+(c[Oa>>2]|0);c[Qa>>2]=(c[Ba>>2]|0)+(c[Oa>>2]|0);if((c[Ka>>2]|0)>>>0>=(c[Ca>>2]|0)>>>0)yj=0;else yj=(c[Ca>>2]|0)-(c[Ka>>2]|0)|0;c[Ra>>2]=yj;c[Sa>>2]=c[(c[qa>>2]|0)+16>>2];c[Ta>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2);c[Ua>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2)+4;c[Va>>2]=(c[Ca>>2]|0)+8+1;c[Xa>>2]=0;c[Ya>>2]=1<<c[(c[ra>>2]|0)+12>>2];c[Za>>2]=(c[ya>>2]|0)-1;c[_a>>2]=3+(c[wa>>2]|0);c[$a>>2]=c[wa>>2];while(1){if((c[$a>>2]|0)>>>0>=(c[_a>>2]|0)>>>0){dj=393;break;}Uh=c[va>>2]|0;if((c[$a>>2]|0)==3)zj=(c[Uh>>2]|0)-1|0;else zj=c[Uh+(c[$a>>2]<<2)>>2]|0;c[ab>>2]=zj;c[bb>>2]=(c[Ca>>2]|0)-(c[ab>>2]|0);c[cb>>2]=0;do{if(((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Oa>>2]|0)|0)>>>0){Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm((c[sa>>2]|0)+(0-(c[ab>>2]|0))|0,c[Ea>>2]|0)|0))break;Uh=Tj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[sa>>2]|0)+(c[Ea>>2]|0)+(0-(c[ab>>2]|0))|0,c[ta>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}else{c[db>>2]=(c[Na>>2]|0)+(c[bb>>2]|0);if(!(c[ua>>2]|0))break;if(!((((c[Oa>>2]|0)-1-(c[bb>>2]|0)|0)>>>0>=3?((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Sa>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm(c[db>>2]|0,c[Ea>>2]|0)|0))break;Uh=Uj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[db>>2]|0)+(c[Ea>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}}while(0);if((c[cb>>2]|0)>>>0>(c[Za>>2]|0)>>>0?(c[Za>>2]=c[cb>>2],c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[$a>>2]|0)-(c[wa>>2]|0),c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[cb>>2],c[Xa>>2]=(c[Xa>>2]|0)+1,((c[cb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[cb>>2]|0)|0)==(c[ta>>2]|0))|0):0){dj=391;break;}c[$a>>2]=(c[$a>>2]|0)+1;}g:do{if((dj|0)==391){dj=0;c[pa>>2]=c[Xa>>2];}else if((dj|0)==393){dj=0;do{if((c[za>>2]|0)==3){if((c[Za>>2]|0)>>>0>=(c[za>>2]|0)>>>0)break;c[eb>>2]=nm(c[qa>>2]|0,c[sa>>2]|0)|0;if(!(((c[eb>>2]|0)>>>0>(c[Sa>>2]|0)>>>0?((c[Ca>>2]|0)-(c[eb>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[ua>>2]|0){if((c[eb>>2]|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=398;break;}c[hb>>2]=(c[Na>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Uj(c[sa>>2]|0,c[hb>>2]|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;}else dj=398;}while(0);if((dj|0)==398){dj=0;c[gb>>2]=(c[Ba>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Tj(c[sa>>2]|0,c[gb>>2]|0,c[ta>>2]|0)|0;}if((c[fb>>2]|0)>>>0<(c[za>>2]|0)>>>0)break;c[Za>>2]=c[fb>>2];c[c[xa>>2]>>2]=(c[Ca>>2]|0)-(c[eb>>2]|0)+2;c[(c[xa>>2]|0)+4>>2]=c[fb>>2];c[Xa>>2]=1;if(!(((c[fb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[fb>>2]|0)|0)==(c[ta>>2]|0))|0))break;c[(c[qa>>2]|0)+24>>2]=(c[Ca>>2]|0)+1;c[pa>>2]=1;break g;}}while(0);c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2]=c[Ca>>2];while(1){Uh=c[Ya>>2]|0;c[Ya>>2]=Uh+-1;if(!Uh)break;if((c[Ha>>2]|0)>>>0<=(c[Sa>>2]|0)>>>0)break;c[ib>>2]=(c[Ia>>2]|0)+((c[Ha>>2]&c[Ka>>2])<<1<<2);c[jb>>2]=(c[La>>2]|0)>>>0<(c[Ma>>2]|0)>>>0?c[La>>2]|0:c[Ma>>2]|0;do{if(c[ua>>2]|0){if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=408;break;}c[kb>>2]=(c[Na>>2]|0)+(c[Ha>>2]|0);Uh=Uj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0<(c[Oa>>2]|0)>>>0)break;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);}else dj=408;}while(0);if((dj|0)==408){dj=0;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);Uh=Tj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;}if((c[jb>>2]|0)>>>0>(c[Za>>2]|0)>>>0){if((c[jb>>2]|0)>>>0>((c[Va>>2]|0)-(c[Ha>>2]|0)|0)>>>0)c[Va>>2]=(c[Ha>>2]|0)+(c[jb>>2]|0);c[Za>>2]=c[jb>>2];c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[Ca>>2]|0)-(c[Ha>>2]|0)+2;c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[jb>>2];c[Xa>>2]=(c[Xa>>2]|0)+1;if((c[jb>>2]|0)>>>0>4096)break;if(((c[sa>>2]|0)+(c[jb>>2]|0)|0)==(c[ta>>2]|0))break;}Uh=c[Ha>>2]|0;if((d[(c[kb>>2]|0)+(c[jb>>2]|0)>>0]|0|0)<(d[(c[sa>>2]|0)+(c[jb>>2]|0)>>0]|0|0)){c[c[Ta>>2]>>2]=Uh;c[La>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=418;break;}c[Ta>>2]=(c[ib>>2]|0)+4;c[Ha>>2]=c[(c[ib>>2]|0)+4>>2];}else{c[c[Ua>>2]>>2]=Uh;c[Ma>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=421;break;}c[Ua>>2]=c[ib>>2];c[Ha>>2]=c[c[ib>>2]>>2];}}if((dj|0)==418){dj=0;c[Ta>>2]=Wa;}else if((dj|0)==421){dj=0;c[Ua>>2]=Wa;}c[c[Ua>>2]>>2]=0;c[c[Ta>>2]>>2]=0;c[(c[qa>>2]|0)+24>>2]=(c[Va>>2]|0)-8;c[pa>>2]=c[Xa>>2];}}while(0);c[md>>2]=c[pa>>2];break d;break;}default:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[mb>>2]=c[nd>>2];c[nb>>2]=Uh;c[ob>>2]=aj;c[pb>>2]=_i;c[qb>>2]=_h;c[rb>>2]=Qh;c[sb>>2]=Ph;c[tb>>2]=Zi;c[ub>>2]=Zh;c[vb>>2]=4;if((c[(c[nb>>2]|0)+20>>2]|0)>>>0<4095)Aj=c[(c[nb>>2]|0)+20>>2]|0;else Aj=4095;c[wb>>2]=Aj;c[xb>>2]=c[(c[mb>>2]|0)+4>>2];c[yb>>2]=(c[ob>>2]|0)-(c[xb>>2]|0);c[zb>>2]=c[(c[nb>>2]|0)+8>>2];c[Ab>>2]=(c[vb>>2]|0)==3?3:4;c[Bb>>2]=c[(c[mb>>2]|0)+36>>2];c[Cb>>2]=Sj(c[ob>>2]|0,c[zb>>2]|0,c[vb>>2]|0)|0;c[Db>>2]=c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2];c[Eb>>2]=c[(c[mb>>2]|0)+44>>2];c[Fb>>2]=(c[(c[nb>>2]|0)+4>>2]|0)-1;c[Gb>>2]=(1<<c[Fb>>2])-1;c[Hb>>2]=0;c[Ib>>2]=0;c[Jb>>2]=c[(c[mb>>2]|0)+8>>2];c[Kb>>2]=c[(c[mb>>2]|0)+12>>2];c[Lb>>2]=(c[Jb>>2]|0)+(c[Kb>>2]|0);c[Mb>>2]=(c[xb>>2]|0)+(c[Kb>>2]|0);if((c[Gb>>2]|0)>>>0>=(c[yb>>2]|0)>>>0)Bj=0;else Bj=(c[yb>>2]|0)-(c[Gb>>2]|0)|0;c[Nb>>2]=Bj;c[Ob>>2]=c[(c[mb>>2]|0)+16>>2];c[Pb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2);c[Qb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2)+4;c[Rb>>2]=(c[yb>>2]|0)+8+1;c[Tb>>2]=0;c[Ub>>2]=1<<c[(c[nb>>2]|0)+12>>2];c[Vb>>2]=(c[ub>>2]|0)-1;c[Wb>>2]=3+(c[sb>>2]|0);c[Xb>>2]=c[sb>>2];while(1){if((c[Xb>>2]|0)>>>0>=(c[Wb>>2]|0)>>>0){dj=340;break;}Zh=c[rb>>2]|0;if((c[Xb>>2]|0)==3)Cj=(c[Zh>>2]|0)-1|0;else Cj=c[Zh+(c[Xb>>2]<<2)>>2]|0;c[Yb>>2]=Cj;c[Zb>>2]=(c[yb>>2]|0)-(c[Yb>>2]|0);c[_b>>2]=0;do{if(((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Kb>>2]|0)|0)>>>0){Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm((c[ob>>2]|0)+(0-(c[Yb>>2]|0))|0,c[Ab>>2]|0)|0))break;Zh=Tj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[ob>>2]|0)+(c[Ab>>2]|0)+(0-(c[Yb>>2]|0))|0,c[pb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}else{c[$b>>2]=(c[Jb>>2]|0)+(c[Zb>>2]|0);if(!(c[qb>>2]|0))break;if(!((((c[Kb>>2]|0)-1-(c[Zb>>2]|0)|0)>>>0>=3?((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Ob>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm(c[$b>>2]|0,c[Ab>>2]|0)|0))break;Zh=Uj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[$b>>2]|0)+(c[Ab>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}}while(0);if((c[_b>>2]|0)>>>0>(c[Vb>>2]|0)>>>0?(c[Vb>>2]=c[_b>>2],c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[Xb>>2]|0)-(c[sb>>2]|0),c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[_b>>2],c[Tb>>2]=(c[Tb>>2]|0)+1,((c[_b>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[_b>>2]|0)|0)==(c[pb>>2]|0))|0):0){dj=338;break;}c[Xb>>2]=(c[Xb>>2]|0)+1;}h:do{if((dj|0)==338){dj=0;c[lb>>2]=c[Tb>>2];}else if((dj|0)==340){dj=0;do{if((c[vb>>2]|0)==3){if((c[Vb>>2]|0)>>>0>=(c[vb>>2]|0)>>>0)break;c[ac>>2]=nm(c[mb>>2]|0,c[ob>>2]|0)|0;if(!(((c[ac>>2]|0)>>>0>(c[Ob>>2]|0)>>>0?((c[yb>>2]|0)-(c[ac>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[qb>>2]|0){if((c[ac>>2]|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=345;break;}c[dc>>2]=(c[Jb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Uj(c[ob>>2]|0,c[dc>>2]|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;}else dj=345;}while(0);if((dj|0)==345){dj=0;c[cc>>2]=(c[xb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Tj(c[ob>>2]|0,c[cc>>2]|0,c[pb>>2]|0)|0;}if((c[bc>>2]|0)>>>0<(c[vb>>2]|0)>>>0)break;c[Vb>>2]=c[bc>>2];c[c[tb>>2]>>2]=(c[yb>>2]|0)-(c[ac>>2]|0)+2;c[(c[tb>>2]|0)+4>>2]=c[bc>>2];c[Tb>>2]=1;if(!(((c[bc>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[bc>>2]|0)|0)==(c[pb>>2]|0))|0))break;c[(c[mb>>2]|0)+24>>2]=(c[yb>>2]|0)+1;c[lb>>2]=1;break h;}}while(0);c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2]=c[yb>>2];while(1){Zh=c[Ub>>2]|0;c[Ub>>2]=Zh+-1;if(!Zh)break;if((c[Db>>2]|0)>>>0<=(c[Ob>>2]|0)>>>0)break;c[ec>>2]=(c[Eb>>2]|0)+((c[Db>>2]&c[Gb>>2])<<1<<2);c[fc>>2]=(c[Hb>>2]|0)>>>0<(c[Ib>>2]|0)>>>0?c[Hb>>2]|0:c[Ib>>2]|0;do{if(c[qb>>2]|0){if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=355;break;}c[gc>>2]=(c[Jb>>2]|0)+(c[Db>>2]|0);Zh=Uj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0<(c[Kb>>2]|0)>>>0)break;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);}else dj=355;}while(0);if((dj|0)==355){dj=0;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);Zh=Tj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;}if((c[fc>>2]|0)>>>0>(c[Vb>>2]|0)>>>0){if((c[fc>>2]|0)>>>0>((c[Rb>>2]|0)-(c[Db>>2]|0)|0)>>>0)c[Rb>>2]=(c[Db>>2]|0)+(c[fc>>2]|0);c[Vb>>2]=c[fc>>2];c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[yb>>2]|0)-(c[Db>>2]|0)+2;c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[fc>>2];c[Tb>>2]=(c[Tb>>2]|0)+1;if((c[fc>>2]|0)>>>0>4096)break;if(((c[ob>>2]|0)+(c[fc>>2]|0)|0)==(c[pb>>2]|0))break;}Zh=c[Db>>2]|0;if((d[(c[gc>>2]|0)+(c[fc>>2]|0)>>0]|0|0)<(d[(c[ob>>2]|0)+(c[fc>>2]|0)>>0]|0|0)){c[c[Pb>>2]>>2]=Zh;c[Hb>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=365;break;}c[Pb>>2]=(c[ec>>2]|0)+4;c[Db>>2]=c[(c[ec>>2]|0)+4>>2];}else{c[c[Qb>>2]>>2]=Zh;c[Ib>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=368;break;}c[Qb>>2]=c[ec>>2];c[Db>>2]=c[c[ec>>2]>>2];}}if((dj|0)==365){dj=0;c[Pb>>2]=Sb;}else if((dj|0)==368){dj=0;c[Qb>>2]=Sb;}c[c[Qb>>2]>>2]=0;c[c[Pb>>2]>>2]=0;c[(c[mb>>2]|0)+24>>2]=(c[Rb>>2]|0)-8;c[lb>>2]=c[Tb>>2];}}while(0);c[md>>2]=c[lb>>2];break d;}}}}while(0);c[Bi>>2]=c[md>>2];if(c[Bi>>2]|0){c[Di>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)+4>>2];if(((c[Di>>2]|0)>>>0>(c[$h>>2]|0)>>>0?1:((c[ei>>2]|0)+(c[Di>>2]|0)|0)>>>0>=4096)|0){dj=481;break b;}c[Ci>>2]=0;while(1){if((c[Ci>>2]|0)>>>0>=(c[Bi>>2]|0)>>>0)break c;c[Ei>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)>>2];pm(Fi,(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0,c[Ei>>2]|0,c[xi>>2]|0);c[Gi>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)+4>>2];if((c[Ci>>2]|0)>>>0>0)Dj=(c[(c[ci>>2]|0)+((c[Ci>>2]|0)-1<<3)+4>>2]|0)+1|0;else Dj=c[ai>>2]|0;c[Hi>>2]=Dj;c[Ii>>2]=c[Gi>>2];i:while(1){if((c[Ii>>2]|0)>>>0<(c[Hi>>2]|0)>>>0)break;c[Ji>>2]=(c[ei>>2]|0)+(c[Ii>>2]|0);Zh=c[Ai>>2]|0;Zi=c[Ii>>2]|0;Ph=c[Th>>2]|0;Qh=c[Rh>>2]|0;c[k>>2]=c[Ei>>2];c[m>>2]=Zi;c[n>>2]=Ph;c[o>>2]=Qh;c[q>>2]=qm((c[k>>2]|0)+1|0)|0;c[r>>2]=(c[m>>2]|0)-3;if(c[(c[n>>2]|0)+56>>2]|0){Qh=(qm((c[r>>2]|0)+1|0)|0)+16|0;c[j>>2]=Qh+(c[q>>2]|0);}else{Qh=(c[q>>2]|0)+(c[(c[n>>2]|0)+52>>2]|0)|0;c[p>>2]=Qh-(qm((c[(c[(c[n>>2]|0)+12>>2]|0)+(c[q>>2]<<2)>>2]|0)+1|0)|0);if((c[o>>2]|0)<2&(c[q>>2]|0)>>>0>=20)c[p>>2]=(c[p>>2]|0)+((c[q>>2]|0)-19<<1);c[s>>2]=rm(c[r>>2]|0)|0;Qh=(c[5840+(c[s>>2]<<2)>>2]|0)+(c[(c[n>>2]|0)+48>>2]|0)|0;Ph=Qh-(qm((c[(c[(c[n>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0)+1|0)|0)|0;c[p>>2]=(c[p>>2]|0)+Ph;c[j>>2]=c[p>>2];}c[Ki>>2]=Zh+(c[j>>2]|0);do{if((c[Ji>>2]|0)>>>0<=(c[fi>>2]|0)>>>0){if((c[Ki>>2]|0)<(c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]|0)){dj=496;break;}if(!(c[Rh>>2]|0))break i;}else dj=496;}while(0);if((dj|0)==496){dj=0;while(1){if((c[fi>>2]|0)>>>0>=(c[Ji>>2]|0)>>>0)break;c[(c[bi>>2]|0)+(((c[fi>>2]|0)+1|0)*28|0)>>2]=1073741824;c[fi>>2]=(c[fi>>2]|0)+1;}c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+8>>2]=c[Ii>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+4>>2]=c[Ei>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+12>>2]=c[yi>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]=c[Ki>>2];Zh=(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+16|0;c[Zh>>2]=c[Fi>>2];c[Zh+4>>2]=c[Fi+4>>2];c[Zh+8>>2]=c[Fi+8>>2];}c[Ii>>2]=(c[Ii>>2]|0)+-1;}c[Ci>>2]=(c[Ci>>2]|0)+1;}}}}while(0);c[ei>>2]=(c[ei>>2]|0)+1;}if((dj|0)==481){dj=0;c[gi>>2]=c[Di>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)>>2];c[fi>>2]=(c[ei>>2]|0)+1;break;}else if((dj|0)==504){dj=0;c[gi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+8>>2];c[hi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+4>>2];c[ei>>2]=(c[fi>>2]|0)-(c[gi>>2]|0);break;}}else{c[gi>>2]=c[mi>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)>>2];c[ei>>2]=0;c[fi>>2]=1;}}while(0);c[Li>>2]=c[gi>>2];c[Mi>>2]=c[hi>>2];c[Ni>>2]=c[ei>>2];while(1){c[Oi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2];c[Pi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2]=c[Li>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2]=c[Mi>>2];c[Li>>2]=c[Oi>>2];c[Mi>>2]=c[Pi>>2];if((c[Oi>>2]|0)>>>0>(c[Ni>>2]|0)>>>0)break;c[Ni>>2]=(c[Ni>>2]|0)-(c[Oi>>2]|0);}c[Qi>>2]=0;while(1){if((c[Qi>>2]|0)>>>0>=(c[fi>>2]|0)>>>0)break;c[Ri>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[Si>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+8>>2];c[Ti>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+4>>2];if((c[Si>>2]|0)==1){c[Vh>>2]=(c[Vh>>2]|0)+1;c[Qi>>2]=(c[Qi>>2]|0)+1;continue;}c[Qi>>2]=(c[Qi>>2]|0)+(c[Si>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+(c[Si>>2]|0);if((c[Ti>>2]|0)>>>0<3){c[Ui>>2]=(c[Ti>>2]|0)+((c[Ri>>2]|0)==0&1);if(c[Ui>>2]|0){Zh=c[Nh>>2]|0;if((c[Ui>>2]|0)==3)Ej=(c[Zh>>2]|0)-1|0;else Ej=c[Zh+(c[Ui>>2]<<2)>>2]|0;c[Vi>>2]=Ej;if((c[Ui>>2]|0)>>>0>=2)c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=c[Vi>>2];}}else{c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=(c[Ti>>2]|0)-2;}vm(c[Th>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,c[Si>>2]|0);wm(c[Mh>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,(c[Si>>2]|0)-3|0);c[Wh>>2]=c[Vh>>2];}xm(c[Th>>2]|0);}l=i;return(c[Xh>>2]|0)-(c[Wh>>2]|0)|0;}function cm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0,Uf=0,Vf=0,Wf=0,Xf=0,Yf=0,Zf=0,_f=0,$f=0,ag=0,bg=0,cg=0,dg=0,eg=0,fg=0,gg=0,hg=0,ig=0,jg=0,kg=0,lg=0,mg=0,ng=0,og=0,pg=0,qg=0,rg=0,sg=0,tg=0,ug=0,vg=0,wg=0,xg=0,yg=0,zg=0,Ag=0,Bg=0,Cg=0,Dg=0,Eg=0,Fg=0,Gg=0,Hg=0,Ig=0,Jg=0,Kg=0,Lg=0,Mg=0,Ng=0,Og=0,Pg=0,Qg=0,Rg=0,Sg=0,Tg=0,Ug=0,Vg=0,Wg=0,Xg=0,Yg=0,Zg=0,_g=0,$g=0,ah=0,bh=0,ch=0,dh=0,eh=0,fh=0,gh=0,hh=0,ih=0,jh=0,kh=0,lh=0,mh=0,nh=0,oh=0,ph=0,qh=0,rh=0,sh=0,th=0,uh=0,vh=0,wh=0,xh=0,yh=0,zh=0,Ah=0,Bh=0,Ch=0,Dh=0,Eh=0,Fh=0,Gh=0,Hh=0,Ih=0,Jh=0,Kh=0,Lh=0,Mh=0,Nh=0,Oh=0,Ph=0,Qh=0,Rh=0,Sh=0,Th=0,Uh=0,Vh=0,Wh=0,Xh=0,Yh=0,Zh=0,_h=0,$h=0,ai=0,bi=0,ci=0,di=0,ei=0,fi=0,gi=0,hi=0,ii=0,ji=0,ki=0,li=0,mi=0,ni=0,oi=0,pi=0,qi=0,ri=0,si=0,ti=0,ui=0,vi=0,wi=0,xi=0,yi=0,zi=0,Ai=0,Bi=0,Ci=0,Di=0,Ei=0,Fi=0,Gi=0,Hi=0,Ii=0,Ji=0,Ki=0,Li=0,Mi=0,Ni=0,Oi=0,Pi=0,Qi=0,Ri=0,Si=0,Ti=0,Ui=0,Vi=0,Wi=0,Xi=0,Yi=0,Zi=0,_i=0,$i=0,aj=0,bj=0,cj=0,dj=0,ej=0,fj=0,gj=0,hj=0,ij=0,jj=0,kj=0,lj=0,mj=0,nj=0,oj=0,pj=0,qj=0,rj=0,sj=0,tj=0,uj=0,vj=0,wj=0,xj=0,yj=0,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0;i=l;l=l+2144|0;j=i+2136|0;k=i+2132|0;m=i+2128|0;n=i+2124|0;o=i+2120|0;p=i+2116|0;q=i+2112|0;r=i+2108|0;s=i+2104|0;t=i+2100|0;u=i+2096|0;v=i+2092|0;w=i+2088|0;x=i+2084|0;y=i+2080|0;z=i+2076|0;A=i+2072|0;B=i+2068|0;C=i+2064|0;D=i+2060|0;E=i+2056|0;F=i+2052|0;G=i+2048|0;H=i+2044|0;I=i+2040|0;J=i+2036|0;K=i+2032|0;L=i+2028|0;M=i+2024|0;N=i+2020|0;O=i+2016|0;P=i+2012|0;Q=i+2008|0;R=i+2004|0;S=i+2e3|0;T=i+1996|0;U=i+1992|0;V=i+1988|0;W=i+1984|0;X=i+1980|0;Y=i+1976|0;Z=i+1972|0;_=i+1968|0;$=i+1964|0;aa=i+1960|0;ba=i+1956|0;ca=i+1952|0;da=i+1948|0;ea=i+1944|0;fa=i+1940|0;ga=i+1936|0;ha=i+1932|0;ia=i+1928|0;ja=i+1924|0;ka=i+1920|0;la=i+1916|0;ma=i+1912|0;na=i+1908|0;oa=i+1904|0;pa=i+1900|0;qa=i+1896|0;ra=i+1892|0;sa=i+1888|0;ta=i+1884|0;ua=i+1880|0;va=i+1876|0;wa=i+1872|0;xa=i+1868|0;ya=i+1864|0;za=i+1860|0;Aa=i+1856|0;Ba=i+1852|0;Ca=i+1848|0;Da=i+1844|0;Ea=i+1840|0;Fa=i+1836|0;Ga=i+1832|0;Ha=i+1828|0;Ia=i+1824|0;Ja=i+1820|0;Ka=i+1816|0;La=i+1812|0;Ma=i+1808|0;Na=i+1804|0;Oa=i+1800|0;Pa=i+1796|0;Qa=i+1792|0;Ra=i+1788|0;Sa=i+1784|0;Ta=i+1780|0;Ua=i+1776|0;Va=i+1772|0;Wa=i+1768|0;Xa=i+1764|0;Ya=i+1760|0;Za=i+1756|0;_a=i+1752|0;$a=i+1748|0;ab=i+1744|0;bb=i+1740|0;cb=i+1736|0;db=i+1732|0;eb=i+1728|0;fb=i+1724|0;gb=i+1720|0;hb=i+1716|0;ib=i+1712|0;jb=i+1708|0;kb=i+1704|0;lb=i+1700|0;mb=i+1696|0;nb=i+1692|0;ob=i+1688|0;pb=i+1684|0;qb=i+1680|0;rb=i+1676|0;sb=i+1672|0;tb=i+1668|0;ub=i+1664|0;vb=i+1660|0;wb=i+1656|0;xb=i+1652|0;yb=i+1648|0;zb=i+1644|0;Ab=i+1640|0;Bb=i+1636|0;Cb=i+1632|0;Db=i+1628|0;Eb=i+1624|0;Fb=i+1620|0;Gb=i+1616|0;Hb=i+1612|0;Ib=i+1608|0;Jb=i+1604|0;Kb=i+1600|0;Lb=i+1596|0;Mb=i+1592|0;Nb=i+1588|0;Ob=i+1584|0;Pb=i+1580|0;Qb=i+1576|0;Rb=i+1572|0;Sb=i+1568|0;Tb=i+1564|0;Ub=i+1560|0;Vb=i+1556|0;Wb=i+1552|0;Xb=i+1548|0;Yb=i+1544|0;Zb=i+1540|0;_b=i+1536|0;$b=i+1532|0;ac=i+1528|0;bc=i+1524|0;cc=i+1520|0;dc=i+1516|0;ec=i+1512|0;fc=i+1508|0;gc=i+1504|0;hc=i+1500|0;ic=i+1496|0;jc=i+1492|0;kc=i+1488|0;lc=i+1484|0;mc=i+1480|0;nc=i+1476|0;oc=i+1472|0;pc=i+1468|0;qc=i+1464|0;rc=i+1460|0;sc=i+1456|0;tc=i+1452|0;uc=i+1448|0;vc=i+1444|0;wc=i+1440|0;xc=i+1436|0;yc=i+1432|0;zc=i+1428|0;Ac=i+1424|0;Bc=i+1420|0;Cc=i+1416|0;Dc=i+1412|0;Ec=i+1408|0;Fc=i+1404|0;Gc=i+1400|0;Hc=i+1396|0;Ic=i+1392|0;Jc=i+1388|0;Kc=i+1384|0;Lc=i+1380|0;Mc=i+1376|0;Nc=i+1372|0;Oc=i+1368|0;Pc=i+1364|0;Qc=i+1360|0;Rc=i+1356|0;Sc=i+1352|0;Tc=i+1348|0;Uc=i+1344|0;Vc=i+1340|0;Wc=i+1336|0;Xc=i+1332|0;Yc=i+1328|0;Zc=i+1324|0;_c=i+1320|0;$c=i+1316|0;ad=i+1312|0;bd=i+1308|0;cd=i+1304|0;dd=i+1300|0;ed=i+1296|0;fd=i+1292|0;gd=i+1288|0;hd=i+1284|0;id=i+1280|0;jd=i+1276|0;kd=i+1272|0;ld=i+1268|0;md=i+1264|0;nd=i+1260|0;od=i+1256|0;pd=i+1252|0;qd=i+1248|0;rd=i+1244|0;sd=i+1240|0;td=i+1236|0;ud=i+1232|0;vd=i+1228|0;wd=i+1224|0;xd=i+1220|0;yd=i+1216|0;zd=i+1212|0;Ad=i+1208|0;Bd=i+1204|0;Cd=i+1200|0;Dd=i+1196|0;Ed=i+1192|0;Fd=i+1188|0;Gd=i+1184|0;Hd=i+1180|0;Id=i+1176|0;Jd=i+1172|0;Kd=i+1168|0;Ld=i+1164|0;Md=i+1160|0;Nd=i+1156|0;Od=i+1152|0;Pd=i+1148|0;Qd=i+1144|0;Rd=i+1140|0;Sd=i+1136|0;Td=i+1132|0;Ud=i+1128|0;Vd=i+1124|0;Wd=i+1120|0;Xd=i+1116|0;Yd=i+1112|0;Zd=i+1108|0;_d=i+1104|0;$d=i+1100|0;ae=i+1096|0;be=i+1092|0;ce=i+1088|0;de=i+1084|0;ee=i+1080|0;fe=i+1076|0;ge=i+1072|0;he=i+1068|0;ie=i+1064|0;je=i+1060|0;ke=i+1056|0;le=i+1052|0;me=i+1048|0;ne=i+1044|0;oe=i+1040|0;pe=i+1036|0;qe=i+1032|0;re=i+1028|0;se=i+1024|0;te=i+1020|0;ue=i+1016|0;ve=i+1012|0;we=i+1008|0;xe=i+1004|0;ye=i+1e3|0;ze=i+996|0;Ae=i+992|0;Be=i+988|0;Ce=i+984|0;De=i+980|0;Ee=i+976|0;Fe=i+972|0;Ge=i+968|0;He=i+964|0;Ie=i+960|0;Je=i+956|0;Ke=i+952|0;Le=i+948|0;Me=i+944|0;Ne=i+940|0;Oe=i+936|0;Pe=i+932|0;Qe=i+928|0;Re=i+924|0;Se=i+920|0;Te=i+916|0;Ue=i+912|0;Ve=i+908|0;We=i+904|0;Xe=i+900|0;Ye=i+896|0;Ze=i+892|0;_e=i+888|0;$e=i+884|0;af=i+880|0;bf=i+876|0;cf=i+872|0;df=i+868|0;ef=i+864|0;ff=i+860|0;gf=i+856|0;hf=i+852|0;jf=i+848|0;kf=i+844|0;lf=i+840|0;mf=i+836|0;nf=i+832|0;of=i+828|0;pf=i+824|0;qf=i+820|0;rf=i+816|0;sf=i+812|0;tf=i+808|0;uf=i+804|0;vf=i+800|0;wf=i+796|0;xf=i+792|0;yf=i+788|0;zf=i+784|0;Af=i+780|0;Bf=i+776|0;Cf=i+772|0;Df=i+768|0;Ef=i+764|0;Ff=i+760|0;Gf=i+756|0;Hf=i+752|0;If=i+748|0;Jf=i+744|0;Kf=i+740|0;Lf=i+736|0;Mf=i+732|0;Nf=i+728|0;Of=i+724|0;Pf=i+720|0;Qf=i+716|0;Rf=i+712|0;Sf=i+708|0;Tf=i+704|0;Uf=i+700|0;Vf=i+696|0;Wf=i+692|0;Xf=i+688|0;Yf=i+684|0;Zf=i+680|0;_f=i+676|0;$f=i+672|0;ag=i+668|0;bg=i+664|0;cg=i+660|0;dg=i+656|0;eg=i+652|0;fg=i+648|0;gg=i+644|0;hg=i+640|0;ig=i+636|0;jg=i+632|0;kg=i+628|0;lg=i+624|0;mg=i+620|0;ng=i+616|0;og=i+612|0;pg=i+608|0;qg=i+604|0;rg=i+600|0;sg=i+596|0;tg=i+592|0;ug=i+588|0;vg=i+584|0;wg=i+580|0;xg=i+576|0;yg=i+572|0;zg=i+568|0;Ag=i+564|0;Bg=i+560|0;Cg=i+556|0;Dg=i+552|0;Eg=i+548|0;Fg=i+544|0;Gg=i+540|0;Hg=i+536|0;Ig=i+532|0;Jg=i+528|0;Kg=i+524|0;Lg=i+520|0;Mg=i+516|0;Ng=i+512|0;Og=i+508|0;Pg=i+504|0;Qg=i+500|0;Rg=i+496|0;Sg=i+492|0;Tg=i+488|0;Ug=i+484|0;Vg=i+480|0;Wg=i+476|0;Xg=i+472|0;Yg=i+468|0;Zg=i+464|0;_g=i+460|0;$g=i+456|0;ah=i+452|0;bh=i+448|0;ch=i+444|0;dh=i+440|0;eh=i+436|0;fh=i+432|0;gh=i+428|0;hh=i+424|0;ih=i+420|0;jh=i+416|0;kh=i+412|0;lh=i+408|0;mh=i+404|0;nh=i+400|0;oh=i+396|0;ph=i+392|0;qh=i+388|0;rh=i+384|0;sh=i+380|0;th=i+376|0;uh=i+372|0;vh=i+368|0;wh=i+364|0;xh=i+360|0;yh=i+356|0;zh=i+352|0;Ah=i+348|0;Bh=i+344|0;Ch=i+340|0;Dh=i+336|0;Eh=i+332|0;Fh=i+328|0;Gh=i+324|0;Hh=i+320|0;Ih=i+316|0;Jh=i+312|0;Kh=i+308|0;Lh=i+304|0;Mh=i+300|0;Nh=i+296|0;Oh=i+292|0;Ph=i+288|0;Qh=i+284|0;Rh=i+280|0;Sh=i+276|0;Th=i+272|0;Uh=i+268|0;Vh=i+264|0;Wh=i+260|0;Xh=i+256|0;Yh=i+252|0;Zh=i+248|0;_h=i+244|0;$h=i+240|0;ai=i+236|0;bi=i+232|0;ci=i+228|0;di=i+216|0;ei=i+212|0;fi=i+208|0;gi=i+204|0;hi=i+200|0;ii=i+196|0;ji=i+192|0;ki=i+188|0;li=i+184|0;mi=i+180|0;ni=i+176|0;oi=i+172|0;pi=i+168|0;qi=i+164|0;ri=i+160|0;si=i+148|0;ti=i+144|0;ui=i+140|0;vi=i+136|0;wi=i+132|0;xi=i+128|0;yi=i+124|0;zi=i+120|0;Ai=i+116|0;Bi=i+112|0;Ci=i+108|0;Di=i+104|0;Ei=i+100|0;Fi=i+88|0;Gi=i+84|0;Hi=i+80|0;Ii=i+76|0;Ji=i+72|0;Ki=i+68|0;Li=i+64|0;Mi=i+60|0;Ni=i+56|0;Oi=i+52|0;Pi=i+48|0;Qi=i+44|0;Ri=i+40|0;Si=i+36|0;Ti=i+32|0;Ui=i+28|0;Vi=i+24|0;Wi=i+20|0;Xi=i+16|0;Yi=i+12|0;Zi=i+8|0;_i=i+4|0;$i=i;c[Wi>>2]=a;c[Xi>>2]=b;c[Yi>>2]=e;c[Zi>>2]=f;c[_i>>2]=g;c[$i>>2]=h;h=c[Xi>>2]|0;Xi=c[Yi>>2]|0;Yi=c[Zi>>2]|0;Zi=c[_i>>2]|0;_i=c[$i>>2]|0;c[Lh>>2]=c[Wi>>2];c[Mh>>2]=h;c[Nh>>2]=Xi;c[Oh>>2]=Yi;c[Ph>>2]=Zi;c[Qh>>2]=_i;c[Rh>>2]=2;c[Sh>>2]=0;c[Th>>2]=(c[Lh>>2]|0)+48;c[Uh>>2]=c[Ph>>2];c[Vh>>2]=c[Uh>>2];c[Wh>>2]=c[Uh>>2];c[Xh>>2]=(c[Uh>>2]|0)+(c[Qh>>2]|0);c[Yh>>2]=(c[Xh>>2]|0)+-8;c[Zh>>2]=c[(c[Lh>>2]|0)+4>>2];c[_h>>2]=(c[Zh>>2]|0)+(c[(c[Lh>>2]|0)+12>>2]|0);if((c[(c[Oh>>2]|0)+20>>2]|0)>>>0<4095)aj=c[(c[Oh>>2]|0)+20>>2]|0;else aj=4095;c[$h>>2]=aj;c[ai>>2]=(c[(c[Oh>>2]|0)+16>>2]|0)==3?3:4;c[bi>>2]=c[(c[Th>>2]|0)+20>>2];c[ci>>2]=c[(c[Th>>2]|0)+16>>2];c[(c[Lh>>2]|0)+28>>2]=c[(c[Lh>>2]|0)+24>>2];lm(c[Th>>2]|0,c[Ph>>2]|0,c[Qh>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+((c[Vh>>2]|0)==(c[_h>>2]|0)&1);c[di>>2]=0;c[di+4>>2]=0;c[di+8>>2]=0;while(1){if((c[Vh>>2]|0)>>>0>=(c[Yh>>2]|0)>>>0)break;c[fi>>2]=0;c[ii>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[ji>>2]=((c[ii>>2]|0)!=0^1)&1;_h=c[Oh>>2]|0;Qh=c[Vh>>2]|0;Ph=c[Xh>>2]|0;aj=c[Sh>>2]|0;Zh=c[Nh>>2]|0;Uh=c[ji>>2]|0;_i=c[ci>>2]|0;Zi=c[ai>>2]|0;c[Bh>>2]=c[Lh>>2];c[Ch>>2]=_h;c[Dh>>2]=Qh;c[Eh>>2]=Ph;c[Fh>>2]=aj;c[Gh>>2]=Zh;c[Hh>>2]=Uh;c[Ih>>2]=_i;c[Jh>>2]=Zi;c[Kh>>2]=c[(c[Ch>>2]|0)+16>>2];a:do{if((c[Dh>>2]|0)>>>0<((c[(c[Bh>>2]|0)+4>>2]|0)+(c[(c[Bh>>2]|0)+24>>2]|0)|0)>>>0)c[Ah>>2]=0;else{Zi=c[Ch>>2]|0;_i=c[Dh>>2]|0;Uh=c[Eh>>2]|0;Zh=c[Kh>>2]|0;aj=c[Fh>>2]|0;c[rh>>2]=c[Bh>>2];c[sh>>2]=Zi;c[th>>2]=_i;c[uh>>2]=Uh;c[vh>>2]=Zh;c[wh>>2]=aj;c[xh>>2]=c[(c[rh>>2]|0)+4>>2];c[yh>>2]=(c[th>>2]|0)-(c[xh>>2]|0);c[zh>>2]=c[(c[rh>>2]|0)+24>>2];while(1){if((c[zh>>2]|0)>>>0>=(c[yh>>2]|0)>>>0)break;aj=Rj(c[rh>>2]|0,c[sh>>2]|0,(c[xh>>2]|0)+(c[zh>>2]|0)|0,c[uh>>2]|0,c[vh>>2]|0,c[wh>>2]|0)|0;c[zh>>2]=(c[zh>>2]|0)+aj;}c[(c[rh>>2]|0)+24>>2]=c[yh>>2];switch(c[Kh>>2]|0){case 3:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[wg>>2]=c[Bh>>2];c[xg>>2]=aj;c[yg>>2]=Zh;c[zg>>2]=Uh;c[Ag>>2]=_i;c[Bg>>2]=Zi;c[Cg>>2]=Ph;c[Dg>>2]=Qh;c[Eg>>2]=_h;c[Fg>>2]=3;if((c[(c[xg>>2]|0)+20>>2]|0)>>>0<4095)bj=c[(c[xg>>2]|0)+20>>2]|0;else bj=4095;c[Gg>>2]=bj;c[Hg>>2]=c[(c[wg>>2]|0)+4>>2];c[Ig>>2]=(c[yg>>2]|0)-(c[Hg>>2]|0);c[Jg>>2]=c[(c[xg>>2]|0)+8>>2];c[Kg>>2]=(c[Fg>>2]|0)==3?3:4;c[Lg>>2]=c[(c[wg>>2]|0)+36>>2];c[Mg>>2]=Sj(c[yg>>2]|0,c[Jg>>2]|0,c[Fg>>2]|0)|0;c[Ng>>2]=c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2];c[Og>>2]=c[(c[wg>>2]|0)+44>>2];c[Pg>>2]=(c[(c[xg>>2]|0)+4>>2]|0)-1;c[Qg>>2]=(1<<c[Pg>>2])-1;c[Rg>>2]=0;c[Sg>>2]=0;c[Tg>>2]=c[(c[wg>>2]|0)+8>>2];c[Ug>>2]=c[(c[wg>>2]|0)+12>>2];c[Vg>>2]=(c[Tg>>2]|0)+(c[Ug>>2]|0);c[Wg>>2]=(c[Hg>>2]|0)+(c[Ug>>2]|0);if((c[Qg>>2]|0)>>>0>=(c[Ig>>2]|0)>>>0)cj=0;else cj=(c[Ig>>2]|0)-(c[Qg>>2]|0)|0;c[Xg>>2]=cj;c[Yg>>2]=c[(c[wg>>2]|0)+16>>2];c[Zg>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2);c[_g>>2]=(c[Og>>2]|0)+((c[Ig>>2]&c[Qg>>2])<<1<<2)+4;c[$g>>2]=(c[Ig>>2]|0)+8+1;c[bh>>2]=0;c[ch>>2]=1<<c[(c[xg>>2]|0)+12>>2];c[dh>>2]=(c[Eg>>2]|0)-1;c[eh>>2]=3+(c[Cg>>2]|0);c[fh>>2]=c[Cg>>2];while(1){if((c[fh>>2]|0)>>>0>=(c[eh>>2]|0)>>>0){dj=31;break;}_h=c[Bg>>2]|0;if((c[fh>>2]|0)==3)ej=(c[_h>>2]|0)-1|0;else ej=c[_h+(c[fh>>2]<<2)>>2]|0;c[gh>>2]=ej;c[hh>>2]=(c[Ig>>2]|0)-(c[gh>>2]|0);c[ih>>2]=0;if(((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Ug>>2]|0)|0)>>>0){_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0;if((_h|0)==(mm((c[yg>>2]|0)+(0-(c[gh>>2]|0))|0,c[Kg>>2]|0)|0)){_h=Tj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[yg>>2]|0)+(c[Kg>>2]|0)+(0-(c[gh>>2]|0))|0,c[zg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}else{c[jh>>2]=(c[Tg>>2]|0)+(c[hh>>2]|0);if((c[Ag>>2]|0?(((c[Ug>>2]|0)-1-(c[hh>>2]|0)|0)>>>0>=3?((c[gh>>2]|0)-1|0)>>>0<((c[Ig>>2]|0)-(c[Yg>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[yg>>2]|0,c[Kg>>2]|0)|0,(_h|0)==(mm(c[jh>>2]|0,c[Kg>>2]|0)|0)):0){_h=Uj((c[yg>>2]|0)+(c[Kg>>2]|0)|0,(c[jh>>2]|0)+(c[Kg>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ih>>2]=_h+(c[Kg>>2]|0);}}if((c[ih>>2]|0)>>>0>(c[dh>>2]|0)>>>0?(c[dh>>2]=c[ih>>2],c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[fh>>2]|0)-(c[Cg>>2]|0),c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ih>>2],c[bh>>2]=(c[bh>>2]|0)+1,((c[ih>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[ih>>2]|0)|0)==(c[zg>>2]|0))|0):0){dj=29;break;}c[fh>>2]=(c[fh>>2]|0)+1;}do{if((dj|0)==29){dj=0;c[vg>>2]=c[bh>>2];}else if((dj|0)==31){dj=0;if(((c[Fg>>2]|0)==3?(c[dh>>2]|0)>>>0<(c[Fg>>2]|0)>>>0:0)?(c[kh>>2]=nm(c[wg>>2]|0,c[yg>>2]|0)|0,((c[kh>>2]|0)>>>0>(c[Yg>>2]|0)>>>0?((c[Ig>>2]|0)-(c[kh>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ag>>2]|0?(c[kh>>2]|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[nh>>2]=(c[Tg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Uj(c[yg>>2]|0,c[nh>>2]|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;}else{c[mh>>2]=(c[Hg>>2]|0)+(c[kh>>2]|0);c[lh>>2]=Tj(c[yg>>2]|0,c[mh>>2]|0,c[zg>>2]|0)|0;}if((c[lh>>2]|0)>>>0>=(c[Fg>>2]|0)>>>0?(c[dh>>2]=c[lh>>2],c[c[Dg>>2]>>2]=(c[Ig>>2]|0)-(c[kh>>2]|0)+2,c[(c[Dg>>2]|0)+4>>2]=c[lh>>2],c[bh>>2]=1,((c[lh>>2]|0)>>>0>(c[Gg>>2]|0)>>>0?1:((c[yg>>2]|0)+(c[lh>>2]|0)|0)==(c[zg>>2]|0))|0):0){c[(c[wg>>2]|0)+24>>2]=(c[Ig>>2]|0)+1;c[vg>>2]=1;break;}}c[(c[Lg>>2]|0)+(c[Mg>>2]<<2)>>2]=c[Ig>>2];while(1){_h=c[ch>>2]|0;c[ch>>2]=_h+-1;if(!_h)break;if((c[Ng>>2]|0)>>>0<=(c[Yg>>2]|0)>>>0)break;c[oh>>2]=(c[Og>>2]|0)+((c[Ng>>2]&c[Qg>>2])<<1<<2);c[ph>>2]=(c[Rg>>2]|0)>>>0<(c[Sg>>2]|0)>>>0?c[Rg>>2]|0:c[Sg>>2]|0;if(c[Ag>>2]|0?((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0<(c[Ug>>2]|0)>>>0:0){c[qh>>2]=(c[Tg>>2]|0)+(c[Ng>>2]|0);_h=Uj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0,c[Vg>>2]|0,c[Wg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;if(((c[Ng>>2]|0)+(c[ph>>2]|0)|0)>>>0>=(c[Ug>>2]|0)>>>0)c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);}else{c[qh>>2]=(c[Hg>>2]|0)+(c[Ng>>2]|0);_h=Tj((c[yg>>2]|0)+(c[ph>>2]|0)|0,(c[qh>>2]|0)+(c[ph>>2]|0)|0,c[zg>>2]|0)|0;c[ph>>2]=(c[ph>>2]|0)+_h;}if((c[ph>>2]|0)>>>0>(c[dh>>2]|0)>>>0){if((c[ph>>2]|0)>>>0>((c[$g>>2]|0)-(c[Ng>>2]|0)|0)>>>0)c[$g>>2]=(c[Ng>>2]|0)+(c[ph>>2]|0);c[dh>>2]=c[ph>>2];c[(c[Dg>>2]|0)+(c[bh>>2]<<3)>>2]=(c[Ig>>2]|0)-(c[Ng>>2]|0)+2;c[(c[Dg>>2]|0)+(c[bh>>2]<<3)+4>>2]=c[ph>>2];c[bh>>2]=(c[bh>>2]|0)+1;if((c[ph>>2]|0)>>>0>4096)break;if(((c[yg>>2]|0)+(c[ph>>2]|0)|0)==(c[zg>>2]|0))break;}_h=c[Ng>>2]|0;if((d[(c[qh>>2]|0)+(c[ph>>2]|0)>>0]|0|0)<(d[(c[yg>>2]|0)+(c[ph>>2]|0)>>0]|0|0)){c[c[Zg>>2]>>2]=_h;c[Rg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=56;break;}c[Zg>>2]=(c[oh>>2]|0)+4;c[Ng>>2]=c[(c[oh>>2]|0)+4>>2];}else{c[c[_g>>2]>>2]=_h;c[Sg>>2]=c[ph>>2];if((c[Ng>>2]|0)>>>0<=(c[Xg>>2]|0)>>>0){dj=59;break;}c[_g>>2]=c[oh>>2];c[Ng>>2]=c[c[oh>>2]>>2];}}if((dj|0)==56){dj=0;c[Zg>>2]=ah;}else if((dj|0)==59){dj=0;c[_g>>2]=ah;}c[c[_g>>2]>>2]=0;c[c[Zg>>2]>>2]=0;c[(c[wg>>2]|0)+24>>2]=(c[$g>>2]|0)-8;c[vg>>2]=c[bh>>2];}}while(0);c[Ah>>2]=c[vg>>2];break a;break;}case 7:case 6:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Hd>>2]=c[Bh>>2];c[Id>>2]=_h;c[Jd>>2]=Qh;c[Kd>>2]=Ph;c[Ld>>2]=Zi;c[Md>>2]=_i;c[Nd>>2]=Uh;c[Od>>2]=Zh;c[Pd>>2]=aj;c[Qd>>2]=6;if((c[(c[Id>>2]|0)+20>>2]|0)>>>0<4095)fj=c[(c[Id>>2]|0)+20>>2]|0;else fj=4095;c[Rd>>2]=fj;c[Sd>>2]=c[(c[Hd>>2]|0)+4>>2];c[Td>>2]=(c[Jd>>2]|0)-(c[Sd>>2]|0);c[Ud>>2]=c[(c[Id>>2]|0)+8>>2];c[Vd>>2]=(c[Qd>>2]|0)==3?3:4;c[Wd>>2]=c[(c[Hd>>2]|0)+36>>2];c[Xd>>2]=Sj(c[Jd>>2]|0,c[Ud>>2]|0,c[Qd>>2]|0)|0;c[Yd>>2]=c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2];c[Zd>>2]=c[(c[Hd>>2]|0)+44>>2];c[_d>>2]=(c[(c[Id>>2]|0)+4>>2]|0)-1;c[$d>>2]=(1<<c[_d>>2])-1;c[ae>>2]=0;c[be>>2]=0;c[ce>>2]=c[(c[Hd>>2]|0)+8>>2];c[de>>2]=c[(c[Hd>>2]|0)+12>>2];c[ee>>2]=(c[ce>>2]|0)+(c[de>>2]|0);c[fe>>2]=(c[Sd>>2]|0)+(c[de>>2]|0);if((c[$d>>2]|0)>>>0>=(c[Td>>2]|0)>>>0)gj=0;else gj=(c[Td>>2]|0)-(c[$d>>2]|0)|0;c[ge>>2]=gj;c[he>>2]=c[(c[Hd>>2]|0)+16>>2];c[ie>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2);c[je>>2]=(c[Zd>>2]|0)+((c[Td>>2]&c[$d>>2])<<1<<2)+4;c[ke>>2]=(c[Td>>2]|0)+8+1;c[me>>2]=0;c[ne>>2]=1<<c[(c[Id>>2]|0)+12>>2];c[oe>>2]=(c[Pd>>2]|0)-1;c[pe>>2]=3+(c[Nd>>2]|0);c[qe>>2]=c[Nd>>2];while(1){if((c[qe>>2]|0)>>>0>=(c[pe>>2]|0)>>>0){dj=190;break;}aj=c[Md>>2]|0;if((c[qe>>2]|0)==3)hj=(c[aj>>2]|0)-1|0;else hj=c[aj+(c[qe>>2]<<2)>>2]|0;c[re>>2]=hj;c[se>>2]=(c[Td>>2]|0)-(c[re>>2]|0);c[te>>2]=0;if(((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[de>>2]|0)|0)>>>0){aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0;if((aj|0)==(mm((c[Jd>>2]|0)+(0-(c[re>>2]|0))|0,c[Vd>>2]|0)|0)){aj=Tj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[Jd>>2]|0)+(c[Vd>>2]|0)+(0-(c[re>>2]|0))|0,c[Kd>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}else{c[ue>>2]=(c[ce>>2]|0)+(c[se>>2]|0);if((c[Ld>>2]|0?(((c[de>>2]|0)-1-(c[se>>2]|0)|0)>>>0>=3?((c[re>>2]|0)-1|0)>>>0<((c[Td>>2]|0)-(c[he>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Jd>>2]|0,c[Vd>>2]|0)|0,(aj|0)==(mm(c[ue>>2]|0,c[Vd>>2]|0)|0)):0){aj=Uj((c[Jd>>2]|0)+(c[Vd>>2]|0)|0,(c[ue>>2]|0)+(c[Vd>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[te>>2]=aj+(c[Vd>>2]|0);}}if((c[te>>2]|0)>>>0>(c[oe>>2]|0)>>>0?(c[oe>>2]=c[te>>2],c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[qe>>2]|0)-(c[Nd>>2]|0),c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[te>>2],c[me>>2]=(c[me>>2]|0)+1,((c[te>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[te>>2]|0)|0)==(c[Kd>>2]|0))|0):0){dj=188;break;}c[qe>>2]=(c[qe>>2]|0)+1;}do{if((dj|0)==188){dj=0;c[Gd>>2]=c[me>>2];}else if((dj|0)==190){dj=0;if(((c[Qd>>2]|0)==3?(c[oe>>2]|0)>>>0<(c[Qd>>2]|0)>>>0:0)?(c[ve>>2]=nm(c[Hd>>2]|0,c[Jd>>2]|0)|0,((c[ve>>2]|0)>>>0>(c[he>>2]|0)>>>0?((c[Td>>2]|0)-(c[ve>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ld>>2]|0?(c[ve>>2]|0)>>>0<(c[de>>2]|0)>>>0:0){c[ye>>2]=(c[ce>>2]|0)+(c[ve>>2]|0);c[we>>2]=Uj(c[Jd>>2]|0,c[ye>>2]|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;}else{c[xe>>2]=(c[Sd>>2]|0)+(c[ve>>2]|0);c[we>>2]=Tj(c[Jd>>2]|0,c[xe>>2]|0,c[Kd>>2]|0)|0;}if((c[we>>2]|0)>>>0>=(c[Qd>>2]|0)>>>0?(c[oe>>2]=c[we>>2],c[c[Od>>2]>>2]=(c[Td>>2]|0)-(c[ve>>2]|0)+2,c[(c[Od>>2]|0)+4>>2]=c[we>>2],c[me>>2]=1,((c[we>>2]|0)>>>0>(c[Rd>>2]|0)>>>0?1:((c[Jd>>2]|0)+(c[we>>2]|0)|0)==(c[Kd>>2]|0))|0):0){c[(c[Hd>>2]|0)+24>>2]=(c[Td>>2]|0)+1;c[Gd>>2]=1;break;}}c[(c[Wd>>2]|0)+(c[Xd>>2]<<2)>>2]=c[Td>>2];while(1){aj=c[ne>>2]|0;c[ne>>2]=aj+-1;if(!aj)break;if((c[Yd>>2]|0)>>>0<=(c[he>>2]|0)>>>0)break;c[ze>>2]=(c[Zd>>2]|0)+((c[Yd>>2]&c[$d>>2])<<1<<2);c[Ae>>2]=(c[ae>>2]|0)>>>0<(c[be>>2]|0)>>>0?c[ae>>2]|0:c[be>>2]|0;if(c[Ld>>2]|0?((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0<(c[de>>2]|0)>>>0:0){c[Be>>2]=(c[ce>>2]|0)+(c[Yd>>2]|0);aj=Uj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0,c[ee>>2]|0,c[fe>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;if(((c[Yd>>2]|0)+(c[Ae>>2]|0)|0)>>>0>=(c[de>>2]|0)>>>0)c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);}else{c[Be>>2]=(c[Sd>>2]|0)+(c[Yd>>2]|0);aj=Tj((c[Jd>>2]|0)+(c[Ae>>2]|0)|0,(c[Be>>2]|0)+(c[Ae>>2]|0)|0,c[Kd>>2]|0)|0;c[Ae>>2]=(c[Ae>>2]|0)+aj;}if((c[Ae>>2]|0)>>>0>(c[oe>>2]|0)>>>0){if((c[Ae>>2]|0)>>>0>((c[ke>>2]|0)-(c[Yd>>2]|0)|0)>>>0)c[ke>>2]=(c[Yd>>2]|0)+(c[Ae>>2]|0);c[oe>>2]=c[Ae>>2];c[(c[Od>>2]|0)+(c[me>>2]<<3)>>2]=(c[Td>>2]|0)-(c[Yd>>2]|0)+2;c[(c[Od>>2]|0)+(c[me>>2]<<3)+4>>2]=c[Ae>>2];c[me>>2]=(c[me>>2]|0)+1;if((c[Ae>>2]|0)>>>0>4096)break;if(((c[Jd>>2]|0)+(c[Ae>>2]|0)|0)==(c[Kd>>2]|0))break;}aj=c[Yd>>2]|0;if((d[(c[Be>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)<(d[(c[Jd>>2]|0)+(c[Ae>>2]|0)>>0]|0|0)){c[c[ie>>2]>>2]=aj;c[ae>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=215;break;}c[ie>>2]=(c[ze>>2]|0)+4;c[Yd>>2]=c[(c[ze>>2]|0)+4>>2];}else{c[c[je>>2]>>2]=aj;c[be>>2]=c[Ae>>2];if((c[Yd>>2]|0)>>>0<=(c[ge>>2]|0)>>>0){dj=218;break;}c[je>>2]=c[ze>>2];c[Yd>>2]=c[c[ze>>2]>>2];}}if((dj|0)==215){dj=0;c[ie>>2]=le;}else if((dj|0)==218){dj=0;c[je>>2]=le;}c[c[je>>2]>>2]=0;c[c[ie>>2]>>2]=0;c[(c[Hd>>2]|0)+24>>2]=(c[ke>>2]|0)-8;c[Gd>>2]=c[me>>2];}}while(0);c[Ah>>2]=c[Gd>>2];break a;break;}case 5:{aj=c[Ch>>2]|0;Zh=c[Dh>>2]|0;Uh=c[Eh>>2]|0;_i=c[Fh>>2]|0;Zi=c[Gh>>2]|0;Ph=c[Hh>>2]|0;Qh=c[Ih>>2]|0;_h=c[Jh>>2]|0;c[De>>2]=c[Bh>>2];c[Ee>>2]=aj;c[Fe>>2]=Zh;c[Ge>>2]=Uh;c[He>>2]=_i;c[Ie>>2]=Zi;c[Je>>2]=Ph;c[Ke>>2]=Qh;c[Le>>2]=_h;c[Me>>2]=5;if((c[(c[Ee>>2]|0)+20>>2]|0)>>>0<4095)ij=c[(c[Ee>>2]|0)+20>>2]|0;else ij=4095;c[Ne>>2]=ij;c[Oe>>2]=c[(c[De>>2]|0)+4>>2];c[Pe>>2]=(c[Fe>>2]|0)-(c[Oe>>2]|0);c[Qe>>2]=c[(c[Ee>>2]|0)+8>>2];c[Re>>2]=(c[Me>>2]|0)==3?3:4;c[Se>>2]=c[(c[De>>2]|0)+36>>2];c[Te>>2]=Sj(c[Fe>>2]|0,c[Qe>>2]|0,c[Me>>2]|0)|0;c[Ue>>2]=c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2];c[Ve>>2]=c[(c[De>>2]|0)+44>>2];c[We>>2]=(c[(c[Ee>>2]|0)+4>>2]|0)-1;c[Xe>>2]=(1<<c[We>>2])-1;c[Ye>>2]=0;c[Ze>>2]=0;c[_e>>2]=c[(c[De>>2]|0)+8>>2];c[$e>>2]=c[(c[De>>2]|0)+12>>2];c[af>>2]=(c[_e>>2]|0)+(c[$e>>2]|0);c[bf>>2]=(c[Oe>>2]|0)+(c[$e>>2]|0);if((c[Xe>>2]|0)>>>0>=(c[Pe>>2]|0)>>>0)jj=0;else jj=(c[Pe>>2]|0)-(c[Xe>>2]|0)|0;c[cf>>2]=jj;c[df>>2]=c[(c[De>>2]|0)+16>>2];c[ef>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2);c[ff>>2]=(c[Ve>>2]|0)+((c[Pe>>2]&c[Xe>>2])<<1<<2)+4;c[gf>>2]=(c[Pe>>2]|0)+8+1;c[jf>>2]=0;c[kf>>2]=1<<c[(c[Ee>>2]|0)+12>>2];c[lf>>2]=(c[Le>>2]|0)-1;c[mf>>2]=3+(c[Je>>2]|0);c[nf>>2]=c[Je>>2];while(1){if((c[nf>>2]|0)>>>0>=(c[mf>>2]|0)>>>0){dj=137;break;}_h=c[Ie>>2]|0;if((c[nf>>2]|0)==3)kj=(c[_h>>2]|0)-1|0;else kj=c[_h+(c[nf>>2]<<2)>>2]|0;c[of>>2]=kj;c[pf>>2]=(c[Pe>>2]|0)-(c[of>>2]|0);c[qf>>2]=0;if(((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[$e>>2]|0)|0)>>>0){_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0;if((_h|0)==(mm((c[Fe>>2]|0)+(0-(c[of>>2]|0))|0,c[Re>>2]|0)|0)){_h=Tj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[Fe>>2]|0)+(c[Re>>2]|0)+(0-(c[of>>2]|0))|0,c[Ge>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}else{c[rf>>2]=(c[_e>>2]|0)+(c[pf>>2]|0);if((c[He>>2]|0?(((c[$e>>2]|0)-1-(c[pf>>2]|0)|0)>>>0>=3?((c[of>>2]|0)-1|0)>>>0<((c[Pe>>2]|0)-(c[df>>2]|0)|0)>>>0:0)|0:0)?(_h=mm(c[Fe>>2]|0,c[Re>>2]|0)|0,(_h|0)==(mm(c[rf>>2]|0,c[Re>>2]|0)|0)):0){_h=Uj((c[Fe>>2]|0)+(c[Re>>2]|0)|0,(c[rf>>2]|0)+(c[Re>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[qf>>2]=_h+(c[Re>>2]|0);}}if((c[qf>>2]|0)>>>0>(c[lf>>2]|0)>>>0?(c[lf>>2]=c[qf>>2],c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[nf>>2]|0)-(c[Je>>2]|0),c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[qf>>2],c[jf>>2]=(c[jf>>2]|0)+1,((c[qf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[qf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){dj=135;break;}c[nf>>2]=(c[nf>>2]|0)+1;}do{if((dj|0)==135){dj=0;c[Ce>>2]=c[jf>>2];}else if((dj|0)==137){dj=0;if(((c[Me>>2]|0)==3?(c[lf>>2]|0)>>>0<(c[Me>>2]|0)>>>0:0)?(c[sf>>2]=nm(c[De>>2]|0,c[Fe>>2]|0)|0,((c[sf>>2]|0)>>>0>(c[df>>2]|0)>>>0?((c[Pe>>2]|0)-(c[sf>>2]|0)|0)>>>0<262144:0)|0):0){if(c[He>>2]|0?(c[sf>>2]|0)>>>0<(c[$e>>2]|0)>>>0:0){c[vf>>2]=(c[_e>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Uj(c[Fe>>2]|0,c[vf>>2]|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;}else{c[uf>>2]=(c[Oe>>2]|0)+(c[sf>>2]|0);c[tf>>2]=Tj(c[Fe>>2]|0,c[uf>>2]|0,c[Ge>>2]|0)|0;}if((c[tf>>2]|0)>>>0>=(c[Me>>2]|0)>>>0?(c[lf>>2]=c[tf>>2],c[c[Ke>>2]>>2]=(c[Pe>>2]|0)-(c[sf>>2]|0)+2,c[(c[Ke>>2]|0)+4>>2]=c[tf>>2],c[jf>>2]=1,((c[tf>>2]|0)>>>0>(c[Ne>>2]|0)>>>0?1:((c[Fe>>2]|0)+(c[tf>>2]|0)|0)==(c[Ge>>2]|0))|0):0){c[(c[De>>2]|0)+24>>2]=(c[Pe>>2]|0)+1;c[Ce>>2]=1;break;}}c[(c[Se>>2]|0)+(c[Te>>2]<<2)>>2]=c[Pe>>2];while(1){_h=c[kf>>2]|0;c[kf>>2]=_h+-1;if(!_h)break;if((c[Ue>>2]|0)>>>0<=(c[df>>2]|0)>>>0)break;c[wf>>2]=(c[Ve>>2]|0)+((c[Ue>>2]&c[Xe>>2])<<1<<2);c[xf>>2]=(c[Ye>>2]|0)>>>0<(c[Ze>>2]|0)>>>0?c[Ye>>2]|0:c[Ze>>2]|0;if(c[He>>2]|0?((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0<(c[$e>>2]|0)>>>0:0){c[yf>>2]=(c[_e>>2]|0)+(c[Ue>>2]|0);_h=Uj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0,c[af>>2]|0,c[bf>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;if(((c[Ue>>2]|0)+(c[xf>>2]|0)|0)>>>0>=(c[$e>>2]|0)>>>0)c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);}else{c[yf>>2]=(c[Oe>>2]|0)+(c[Ue>>2]|0);_h=Tj((c[Fe>>2]|0)+(c[xf>>2]|0)|0,(c[yf>>2]|0)+(c[xf>>2]|0)|0,c[Ge>>2]|0)|0;c[xf>>2]=(c[xf>>2]|0)+_h;}if((c[xf>>2]|0)>>>0>(c[lf>>2]|0)>>>0){if((c[xf>>2]|0)>>>0>((c[gf>>2]|0)-(c[Ue>>2]|0)|0)>>>0)c[gf>>2]=(c[Ue>>2]|0)+(c[xf>>2]|0);c[lf>>2]=c[xf>>2];c[(c[Ke>>2]|0)+(c[jf>>2]<<3)>>2]=(c[Pe>>2]|0)-(c[Ue>>2]|0)+2;c[(c[Ke>>2]|0)+(c[jf>>2]<<3)+4>>2]=c[xf>>2];c[jf>>2]=(c[jf>>2]|0)+1;if((c[xf>>2]|0)>>>0>4096)break;if(((c[Fe>>2]|0)+(c[xf>>2]|0)|0)==(c[Ge>>2]|0))break;}_h=c[Ue>>2]|0;if((d[(c[yf>>2]|0)+(c[xf>>2]|0)>>0]|0|0)<(d[(c[Fe>>2]|0)+(c[xf>>2]|0)>>0]|0|0)){c[c[ef>>2]>>2]=_h;c[Ye>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=162;break;}c[ef>>2]=(c[wf>>2]|0)+4;c[Ue>>2]=c[(c[wf>>2]|0)+4>>2];}else{c[c[ff>>2]>>2]=_h;c[Ze>>2]=c[xf>>2];if((c[Ue>>2]|0)>>>0<=(c[cf>>2]|0)>>>0){dj=165;break;}c[ff>>2]=c[wf>>2];c[Ue>>2]=c[c[wf>>2]>>2];}}if((dj|0)==162){dj=0;c[ef>>2]=hf;}else if((dj|0)==165){dj=0;c[ff>>2]=hf;}c[c[ff>>2]>>2]=0;c[c[ef>>2]>>2]=0;c[(c[De>>2]|0)+24>>2]=(c[gf>>2]|0)-8;c[Ce>>2]=c[jf>>2];}}while(0);c[Ah>>2]=c[Ce>>2];break a;break;}default:{_h=c[Ch>>2]|0;Qh=c[Dh>>2]|0;Ph=c[Eh>>2]|0;Zi=c[Fh>>2]|0;_i=c[Gh>>2]|0;Uh=c[Hh>>2]|0;Zh=c[Ih>>2]|0;aj=c[Jh>>2]|0;c[Af>>2]=c[Bh>>2];c[Bf>>2]=_h;c[Cf>>2]=Qh;c[Df>>2]=Ph;c[Ef>>2]=Zi;c[Ff>>2]=_i;c[Gf>>2]=Uh;c[Hf>>2]=Zh;c[If>>2]=aj;c[Jf>>2]=4;if((c[(c[Bf>>2]|0)+20>>2]|0)>>>0<4095)lj=c[(c[Bf>>2]|0)+20>>2]|0;else lj=4095;c[Kf>>2]=lj;c[Lf>>2]=c[(c[Af>>2]|0)+4>>2];c[Mf>>2]=(c[Cf>>2]|0)-(c[Lf>>2]|0);c[Nf>>2]=c[(c[Bf>>2]|0)+8>>2];c[Of>>2]=(c[Jf>>2]|0)==3?3:4;c[Pf>>2]=c[(c[Af>>2]|0)+36>>2];c[Qf>>2]=Sj(c[Cf>>2]|0,c[Nf>>2]|0,c[Jf>>2]|0)|0;c[Rf>>2]=c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2];c[Sf>>2]=c[(c[Af>>2]|0)+44>>2];c[Tf>>2]=(c[(c[Bf>>2]|0)+4>>2]|0)-1;c[Uf>>2]=(1<<c[Tf>>2])-1;c[Vf>>2]=0;c[Wf>>2]=0;c[Xf>>2]=c[(c[Af>>2]|0)+8>>2];c[Yf>>2]=c[(c[Af>>2]|0)+12>>2];c[Zf>>2]=(c[Xf>>2]|0)+(c[Yf>>2]|0);c[_f>>2]=(c[Lf>>2]|0)+(c[Yf>>2]|0);if((c[Uf>>2]|0)>>>0>=(c[Mf>>2]|0)>>>0)mj=0;else mj=(c[Mf>>2]|0)-(c[Uf>>2]|0)|0;c[$f>>2]=mj;c[ag>>2]=c[(c[Af>>2]|0)+16>>2];c[bg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2);c[cg>>2]=(c[Sf>>2]|0)+((c[Mf>>2]&c[Uf>>2])<<1<<2)+4;c[dg>>2]=(c[Mf>>2]|0)+8+1;c[fg>>2]=0;c[gg>>2]=1<<c[(c[Bf>>2]|0)+12>>2];c[hg>>2]=(c[If>>2]|0)-1;c[ig>>2]=3+(c[Gf>>2]|0);c[jg>>2]=c[Gf>>2];while(1){if((c[jg>>2]|0)>>>0>=(c[ig>>2]|0)>>>0){dj=84;break;}aj=c[Ff>>2]|0;if((c[jg>>2]|0)==3)nj=(c[aj>>2]|0)-1|0;else nj=c[aj+(c[jg>>2]<<2)>>2]|0;c[kg>>2]=nj;c[lg>>2]=(c[Mf>>2]|0)-(c[kg>>2]|0);c[mg>>2]=0;if(((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[Yf>>2]|0)|0)>>>0){aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0;if((aj|0)==(mm((c[Cf>>2]|0)+(0-(c[kg>>2]|0))|0,c[Of>>2]|0)|0)){aj=Tj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[Cf>>2]|0)+(c[Of>>2]|0)+(0-(c[kg>>2]|0))|0,c[Df>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}else{c[ng>>2]=(c[Xf>>2]|0)+(c[lg>>2]|0);if((c[Ef>>2]|0?(((c[Yf>>2]|0)-1-(c[lg>>2]|0)|0)>>>0>=3?((c[kg>>2]|0)-1|0)>>>0<((c[Mf>>2]|0)-(c[ag>>2]|0)|0)>>>0:0)|0:0)?(aj=mm(c[Cf>>2]|0,c[Of>>2]|0)|0,(aj|0)==(mm(c[ng>>2]|0,c[Of>>2]|0)|0)):0){aj=Uj((c[Cf>>2]|0)+(c[Of>>2]|0)|0,(c[ng>>2]|0)+(c[Of>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[mg>>2]=aj+(c[Of>>2]|0);}}if((c[mg>>2]|0)>>>0>(c[hg>>2]|0)>>>0?(c[hg>>2]=c[mg>>2],c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[jg>>2]|0)-(c[Gf>>2]|0),c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[mg>>2],c[fg>>2]=(c[fg>>2]|0)+1,((c[mg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[mg>>2]|0)|0)==(c[Df>>2]|0))|0):0){dj=82;break;}c[jg>>2]=(c[jg>>2]|0)+1;}do{if((dj|0)==82){dj=0;c[zf>>2]=c[fg>>2];}else if((dj|0)==84){dj=0;if(((c[Jf>>2]|0)==3?(c[hg>>2]|0)>>>0<(c[Jf>>2]|0)>>>0:0)?(c[og>>2]=nm(c[Af>>2]|0,c[Cf>>2]|0)|0,((c[og>>2]|0)>>>0>(c[ag>>2]|0)>>>0?((c[Mf>>2]|0)-(c[og>>2]|0)|0)>>>0<262144:0)|0):0){if(c[Ef>>2]|0?(c[og>>2]|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[rg>>2]=(c[Xf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Uj(c[Cf>>2]|0,c[rg>>2]|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;}else{c[qg>>2]=(c[Lf>>2]|0)+(c[og>>2]|0);c[pg>>2]=Tj(c[Cf>>2]|0,c[qg>>2]|0,c[Df>>2]|0)|0;}if((c[pg>>2]|0)>>>0>=(c[Jf>>2]|0)>>>0?(c[hg>>2]=c[pg>>2],c[c[Hf>>2]>>2]=(c[Mf>>2]|0)-(c[og>>2]|0)+2,c[(c[Hf>>2]|0)+4>>2]=c[pg>>2],c[fg>>2]=1,((c[pg>>2]|0)>>>0>(c[Kf>>2]|0)>>>0?1:((c[Cf>>2]|0)+(c[pg>>2]|0)|0)==(c[Df>>2]|0))|0):0){c[(c[Af>>2]|0)+24>>2]=(c[Mf>>2]|0)+1;c[zf>>2]=1;break;}}c[(c[Pf>>2]|0)+(c[Qf>>2]<<2)>>2]=c[Mf>>2];while(1){aj=c[gg>>2]|0;c[gg>>2]=aj+-1;if(!aj)break;if((c[Rf>>2]|0)>>>0<=(c[ag>>2]|0)>>>0)break;c[sg>>2]=(c[Sf>>2]|0)+((c[Rf>>2]&c[Uf>>2])<<1<<2);c[tg>>2]=(c[Vf>>2]|0)>>>0<(c[Wf>>2]|0)>>>0?c[Vf>>2]|0:c[Wf>>2]|0;if(c[Ef>>2]|0?((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0<(c[Yf>>2]|0)>>>0:0){c[ug>>2]=(c[Xf>>2]|0)+(c[Rf>>2]|0);aj=Uj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0,c[Zf>>2]|0,c[_f>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;if(((c[Rf>>2]|0)+(c[tg>>2]|0)|0)>>>0>=(c[Yf>>2]|0)>>>0)c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);}else{c[ug>>2]=(c[Lf>>2]|0)+(c[Rf>>2]|0);aj=Tj((c[Cf>>2]|0)+(c[tg>>2]|0)|0,(c[ug>>2]|0)+(c[tg>>2]|0)|0,c[Df>>2]|0)|0;c[tg>>2]=(c[tg>>2]|0)+aj;}if((c[tg>>2]|0)>>>0>(c[hg>>2]|0)>>>0){if((c[tg>>2]|0)>>>0>((c[dg>>2]|0)-(c[Rf>>2]|0)|0)>>>0)c[dg>>2]=(c[Rf>>2]|0)+(c[tg>>2]|0);c[hg>>2]=c[tg>>2];c[(c[Hf>>2]|0)+(c[fg>>2]<<3)>>2]=(c[Mf>>2]|0)-(c[Rf>>2]|0)+2;c[(c[Hf>>2]|0)+(c[fg>>2]<<3)+4>>2]=c[tg>>2];c[fg>>2]=(c[fg>>2]|0)+1;if((c[tg>>2]|0)>>>0>4096)break;if(((c[Cf>>2]|0)+(c[tg>>2]|0)|0)==(c[Df>>2]|0))break;}aj=c[Rf>>2]|0;if((d[(c[ug>>2]|0)+(c[tg>>2]|0)>>0]|0|0)<(d[(c[Cf>>2]|0)+(c[tg>>2]|0)>>0]|0|0)){c[c[bg>>2]>>2]=aj;c[Vf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=109;break;}c[bg>>2]=(c[sg>>2]|0)+4;c[Rf>>2]=c[(c[sg>>2]|0)+4>>2];}else{c[c[cg>>2]>>2]=aj;c[Wf>>2]=c[tg>>2];if((c[Rf>>2]|0)>>>0<=(c[$f>>2]|0)>>>0){dj=112;break;}c[cg>>2]=c[sg>>2];c[Rf>>2]=c[c[sg>>2]>>2];}}if((dj|0)==109){dj=0;c[bg>>2]=eg;}else if((dj|0)==112){dj=0;c[cg>>2]=eg;}c[c[cg>>2]>>2]=0;c[c[bg>>2]>>2]=0;c[(c[Af>>2]|0)+24>>2]=(c[dg>>2]|0)-8;c[zf>>2]=c[fg>>2];}}while(0);c[Ah>>2]=c[zf>>2];break a;}}}}while(0);c[ki>>2]=c[Ah>>2];if(!(c[ki>>2]|0)){c[Vh>>2]=(c[Vh>>2]|0)+1;continue;}c[li>>2]=0;while(1){if((c[li>>2]|0)>>>0>=3)break;c[(c[bi>>2]|0)+16+(c[li>>2]<<2)>>2]=c[(c[Nh>>2]|0)+(c[li>>2]<<2)>>2];c[li>>2]=(c[li>>2]|0)+1;}c[(c[bi>>2]|0)+8>>2]=1;c[(c[bi>>2]|0)+12>>2]=c[ii>>2];c[mi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)+4>>2];do{if((c[mi>>2]|0)>>>0<=(c[$h>>2]|0)>>>0){c[ni>>2]=om(di,c[Wh>>2]|0,c[ii>>2]|0,c[Th>>2]|0)|0;c[oi>>2]=0;while(1){if((c[oi>>2]|0)>>>0>=(c[ai>>2]|0)>>>0)break;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=1073741824;c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=0;while(1){if((c[pi>>2]|0)>>>0>=(c[ki>>2]|0)>>>0)break;c[qi>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)>>2];c[ri>>2]=c[(c[ci>>2]|0)+(c[pi>>2]<<3)+4>>2];pm(si,c[Nh>>2]|0,c[qi>>2]|0,c[ji>>2]|0);while(1){if((c[oi>>2]|0)>>>0>(c[ri>>2]|0)>>>0)break;aj=c[ni>>2]|0;Zh=c[oi>>2]|0;Uh=c[Th>>2]|0;_i=c[Rh>>2]|0;c[yd>>2]=c[qi>>2];c[zd>>2]=Zh;c[Ad>>2]=Uh;c[Bd>>2]=_i;c[Dd>>2]=qm((c[yd>>2]|0)+1|0)|0;c[Ed>>2]=(c[zd>>2]|0)-3;if(c[(c[Ad>>2]|0)+56>>2]|0){_i=(qm((c[Ed>>2]|0)+1|0)|0)+16|0;c[xd>>2]=_i+(c[Dd>>2]|0);}else{_i=(c[Dd>>2]|0)+(c[(c[Ad>>2]|0)+52>>2]|0)|0;c[Cd>>2]=_i-(qm((c[(c[(c[Ad>>2]|0)+12>>2]|0)+(c[Dd>>2]<<2)>>2]|0)+1|0)|0);if((c[Bd>>2]|0)<2&(c[Dd>>2]|0)>>>0>=20)c[Cd>>2]=(c[Cd>>2]|0)+((c[Dd>>2]|0)-19<<1);c[Fd>>2]=rm(c[Ed>>2]|0)|0;_i=(c[5840+(c[Fd>>2]<<2)>>2]|0)+(c[(c[Ad>>2]|0)+48>>2]|0)|0;Uh=_i-(qm((c[(c[(c[Ad>>2]|0)+8>>2]|0)+(c[Fd>>2]<<2)>>2]|0)+1|0)|0)|0;c[Cd>>2]=(c[Cd>>2]|0)+Uh;c[xd>>2]=c[Cd>>2];}c[ti>>2]=aj+(c[xd>>2]|0);c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+8>>2]=c[oi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+4>>2]=c[qi>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+12>>2]=c[ii>>2];c[(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)>>2]=c[ti>>2];aj=(c[bi>>2]|0)+((c[oi>>2]|0)*28|0)+16|0;c[aj>>2]=c[si>>2];c[aj+4>>2]=c[si+4>>2];c[aj+8>>2]=c[si+8>>2];c[oi>>2]=(c[oi>>2]|0)+1;}c[pi>>2]=(c[pi>>2]|0)+1;}c[fi>>2]=(c[oi>>2]|0)-1;c[ei>>2]=1;b:while(1){if((c[ei>>2]|0)>>>0>(c[fi>>2]|0)>>>0){dj=504;break;}c[ui>>2]=(c[Vh>>2]|0)+(c[ei>>2]|0);if((c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+8>>2]|0)==1)oj=(c[(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+12>>2]|0)+1|0;else oj=1;c[vi>>2]=oj;if((c[ei>>2]|0)>>>0>(c[vi>>2]|0)>>>0){aj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[vi>>2]|0)|0)*28|0)>>2]|0;c[wi>>2]=aj+(sm((c[ui>>2]|0)+(0-(c[vi>>2]|0))|0,c[vi>>2]|0,c[Th>>2]|0)|0);}else c[wi>>2]=tm(di,c[Wh>>2]|0,c[vi>>2]|0,c[Th>>2]|0)|0;if((c[wi>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0)){c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]=1;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+4>>2]=0;c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]=c[vi>>2];c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]=c[wi>>2];aj=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Uh=(c[bi>>2]|0)+(((c[ei>>2]|0)-1|0)*28|0)+16|0;c[aj>>2]=c[Uh>>2];c[aj+4>>2]=c[Uh+4>>2];c[aj+8>>2]=c[Uh+8>>2];}c:do{if((c[ui>>2]|0)>>>0<=(c[Yh>>2]|0)>>>0){if((c[ei>>2]|0)==(c[fi>>2]|0)){dj=504;break b;}if((c[Rh>>2]|0)==0?(c[(c[bi>>2]|0)+(((c[ei>>2]|0)+1|0)*28|0)>>2]|0)<=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)>>2]|0):0)break;c[xi>>2]=(c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)!=1&1;if((c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+8>>2]|0)==1)pj=c[(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+12>>2]|0;else pj=0;c[yi>>2]=pj;if((c[ei>>2]|0)>>>0>(c[yi>>2]|0)>>>0)qj=c[(c[bi>>2]|0)+(((c[ei>>2]|0)-(c[yi>>2]|0)|0)*28|0)>>2]|0;else qj=0;c[zi>>2]=qj;Uh=c[zi>>2]|0;c[Ai>>2]=Uh+(um((c[ui>>2]|0)+(0-(c[yi>>2]|0))|0,c[yi>>2]|0,c[Th>>2]|0)|0);Uh=c[Oh>>2]|0;aj=c[ui>>2]|0;_i=c[Xh>>2]|0;Zh=c[Sh>>2]|0;Zi=(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0;Ph=c[xi>>2]|0;Qh=c[ci>>2]|0;_h=c[ai>>2]|0;c[nd>>2]=c[Lh>>2];c[od>>2]=Uh;c[pd>>2]=aj;c[qd>>2]=_i;c[rd>>2]=Zh;c[sd>>2]=Zi;c[td>>2]=Ph;c[ud>>2]=Qh;c[vd>>2]=_h;c[wd>>2]=c[(c[od>>2]|0)+16>>2];d:do{if((c[pd>>2]|0)>>>0<((c[(c[nd>>2]|0)+4>>2]|0)+(c[(c[nd>>2]|0)+24>>2]|0)|0)>>>0)c[md>>2]=0;else{_h=c[od>>2]|0;Qh=c[pd>>2]|0;Ph=c[qd>>2]|0;Zi=c[wd>>2]|0;Zh=c[rd>>2]|0;c[dd>>2]=c[nd>>2];c[ed>>2]=_h;c[fd>>2]=Qh;c[gd>>2]=Ph;c[hd>>2]=Zi;c[id>>2]=Zh;c[jd>>2]=c[(c[dd>>2]|0)+4>>2];c[kd>>2]=(c[fd>>2]|0)-(c[jd>>2]|0);c[ld>>2]=c[(c[dd>>2]|0)+24>>2];while(1){if((c[ld>>2]|0)>>>0>=(c[kd>>2]|0)>>>0)break;Zh=Rj(c[dd>>2]|0,c[ed>>2]|0,(c[jd>>2]|0)+(c[ld>>2]|0)|0,c[gd>>2]|0,c[hd>>2]|0,c[id>>2]|0)|0;c[ld>>2]=(c[ld>>2]|0)+Zh;}c[(c[dd>>2]|0)+24>>2]=c[kd>>2];switch(c[wd>>2]|0){case 3:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[ic>>2]=c[nd>>2];c[jc>>2]=Zh;c[kc>>2]=Zi;c[lc>>2]=Ph;c[mc>>2]=Qh;c[nc>>2]=_h;c[oc>>2]=_i;c[pc>>2]=aj;c[qc>>2]=Uh;c[rc>>2]=3;if((c[(c[jc>>2]|0)+20>>2]|0)>>>0<4095)rj=c[(c[jc>>2]|0)+20>>2]|0;else rj=4095;c[sc>>2]=rj;c[tc>>2]=c[(c[ic>>2]|0)+4>>2];c[uc>>2]=(c[kc>>2]|0)-(c[tc>>2]|0);c[vc>>2]=c[(c[jc>>2]|0)+8>>2];c[wc>>2]=(c[rc>>2]|0)==3?3:4;c[xc>>2]=c[(c[ic>>2]|0)+36>>2];c[yc>>2]=Sj(c[kc>>2]|0,c[vc>>2]|0,c[rc>>2]|0)|0;c[zc>>2]=c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2];c[Ac>>2]=c[(c[ic>>2]|0)+44>>2];c[Bc>>2]=(c[(c[jc>>2]|0)+4>>2]|0)-1;c[Cc>>2]=(1<<c[Bc>>2])-1;c[Dc>>2]=0;c[Ec>>2]=0;c[Fc>>2]=c[(c[ic>>2]|0)+8>>2];c[Gc>>2]=c[(c[ic>>2]|0)+12>>2];c[Hc>>2]=(c[Fc>>2]|0)+(c[Gc>>2]|0);c[Ic>>2]=(c[tc>>2]|0)+(c[Gc>>2]|0);if((c[Cc>>2]|0)>>>0>=(c[uc>>2]|0)>>>0)sj=0;else sj=(c[uc>>2]|0)-(c[Cc>>2]|0)|0;c[Jc>>2]=sj;c[Kc>>2]=c[(c[ic>>2]|0)+16>>2];c[Lc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2);c[Mc>>2]=(c[Ac>>2]|0)+((c[uc>>2]&c[Cc>>2])<<1<<2)+4;c[Nc>>2]=(c[uc>>2]|0)+8+1;c[Pc>>2]=0;c[Qc>>2]=1<<c[(c[jc>>2]|0)+12>>2];c[Rc>>2]=(c[qc>>2]|0)-1;c[Sc>>2]=3+(c[oc>>2]|0);c[Tc>>2]=c[oc>>2];while(1){if((c[Tc>>2]|0)>>>0>=(c[Sc>>2]|0)>>>0){dj=287;break;}Uh=c[nc>>2]|0;if((c[Tc>>2]|0)==3)tj=(c[Uh>>2]|0)-1|0;else tj=c[Uh+(c[Tc>>2]<<2)>>2]|0;c[Uc>>2]=tj;c[Vc>>2]=(c[uc>>2]|0)-(c[Uc>>2]|0);c[Wc>>2]=0;do{if(((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Gc>>2]|0)|0)>>>0){Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm((c[kc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[wc>>2]|0)|0))break;Uh=Tj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[kc>>2]|0)+(c[wc>>2]|0)+(0-(c[Uc>>2]|0))|0,c[lc>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}else{c[Xc>>2]=(c[Fc>>2]|0)+(c[Vc>>2]|0);if(!(c[mc>>2]|0))break;if(!((((c[Gc>>2]|0)-1-(c[Vc>>2]|0)|0)>>>0>=3?((c[Uc>>2]|0)-1|0)>>>0<((c[uc>>2]|0)-(c[Kc>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[kc>>2]|0,c[wc>>2]|0)|0;if((Uh|0)!=(mm(c[Xc>>2]|0,c[wc>>2]|0)|0))break;Uh=Uj((c[kc>>2]|0)+(c[wc>>2]|0)|0,(c[Xc>>2]|0)+(c[wc>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[Wc>>2]=Uh+(c[wc>>2]|0);}}while(0);if((c[Wc>>2]|0)>>>0>(c[Rc>>2]|0)>>>0?(c[Rc>>2]=c[Wc>>2],c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[Tc>>2]|0)-(c[oc>>2]|0),c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[Wc>>2],c[Pc>>2]=(c[Pc>>2]|0)+1,((c[Wc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Wc>>2]|0)|0)==(c[lc>>2]|0))|0):0){dj=285;break;}c[Tc>>2]=(c[Tc>>2]|0)+1;}e:do{if((dj|0)==285){dj=0;c[hc>>2]=c[Pc>>2];}else if((dj|0)==287){dj=0;do{if((c[rc>>2]|0)==3){if((c[Rc>>2]|0)>>>0>=(c[rc>>2]|0)>>>0)break;c[Yc>>2]=nm(c[ic>>2]|0,c[kc>>2]|0)|0;if(!(((c[Yc>>2]|0)>>>0>(c[Kc>>2]|0)>>>0?((c[uc>>2]|0)-(c[Yc>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[mc>>2]|0){if((c[Yc>>2]|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=292;break;}c[$c>>2]=(c[Fc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Uj(c[kc>>2]|0,c[$c>>2]|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;}else dj=292;}while(0);if((dj|0)==292){dj=0;c[_c>>2]=(c[tc>>2]|0)+(c[Yc>>2]|0);c[Zc>>2]=Tj(c[kc>>2]|0,c[_c>>2]|0,c[lc>>2]|0)|0;}if((c[Zc>>2]|0)>>>0<(c[rc>>2]|0)>>>0)break;c[Rc>>2]=c[Zc>>2];c[c[pc>>2]>>2]=(c[uc>>2]|0)-(c[Yc>>2]|0)+2;c[(c[pc>>2]|0)+4>>2]=c[Zc>>2];c[Pc>>2]=1;if(!(((c[Zc>>2]|0)>>>0>(c[sc>>2]|0)>>>0?1:((c[kc>>2]|0)+(c[Zc>>2]|0)|0)==(c[lc>>2]|0))|0))break;c[(c[ic>>2]|0)+24>>2]=(c[uc>>2]|0)+1;c[hc>>2]=1;break e;}}while(0);c[(c[xc>>2]|0)+(c[yc>>2]<<2)>>2]=c[uc>>2];while(1){Uh=c[Qc>>2]|0;c[Qc>>2]=Uh+-1;if(!Uh)break;if((c[zc>>2]|0)>>>0<=(c[Kc>>2]|0)>>>0)break;c[ad>>2]=(c[Ac>>2]|0)+((c[zc>>2]&c[Cc>>2])<<1<<2);c[bd>>2]=(c[Dc>>2]|0)>>>0<(c[Ec>>2]|0)>>>0?c[Dc>>2]|0:c[Ec>>2]|0;do{if(c[mc>>2]|0){if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0>=(c[Gc>>2]|0)>>>0){dj=302;break;}c[cd>>2]=(c[Fc>>2]|0)+(c[zc>>2]|0);Uh=Uj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0,c[Hc>>2]|0,c[Ic>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;if(((c[zc>>2]|0)+(c[bd>>2]|0)|0)>>>0<(c[Gc>>2]|0)>>>0)break;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);}else dj=302;}while(0);if((dj|0)==302){dj=0;c[cd>>2]=(c[tc>>2]|0)+(c[zc>>2]|0);Uh=Tj((c[kc>>2]|0)+(c[bd>>2]|0)|0,(c[cd>>2]|0)+(c[bd>>2]|0)|0,c[lc>>2]|0)|0;c[bd>>2]=(c[bd>>2]|0)+Uh;}if((c[bd>>2]|0)>>>0>(c[Rc>>2]|0)>>>0){if((c[bd>>2]|0)>>>0>((c[Nc>>2]|0)-(c[zc>>2]|0)|0)>>>0)c[Nc>>2]=(c[zc>>2]|0)+(c[bd>>2]|0);c[Rc>>2]=c[bd>>2];c[(c[pc>>2]|0)+(c[Pc>>2]<<3)>>2]=(c[uc>>2]|0)-(c[zc>>2]|0)+2;c[(c[pc>>2]|0)+(c[Pc>>2]<<3)+4>>2]=c[bd>>2];c[Pc>>2]=(c[Pc>>2]|0)+1;if((c[bd>>2]|0)>>>0>4096)break;if(((c[kc>>2]|0)+(c[bd>>2]|0)|0)==(c[lc>>2]|0))break;}Uh=c[zc>>2]|0;if((d[(c[cd>>2]|0)+(c[bd>>2]|0)>>0]|0|0)<(d[(c[kc>>2]|0)+(c[bd>>2]|0)>>0]|0|0)){c[c[Lc>>2]>>2]=Uh;c[Dc>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=312;break;}c[Lc>>2]=(c[ad>>2]|0)+4;c[zc>>2]=c[(c[ad>>2]|0)+4>>2];}else{c[c[Mc>>2]>>2]=Uh;c[Ec>>2]=c[bd>>2];if((c[zc>>2]|0)>>>0<=(c[Jc>>2]|0)>>>0){dj=315;break;}c[Mc>>2]=c[ad>>2];c[zc>>2]=c[c[ad>>2]>>2];}}if((dj|0)==312){dj=0;c[Lc>>2]=Oc;}else if((dj|0)==315){dj=0;c[Mc>>2]=Oc;}c[c[Mc>>2]>>2]=0;c[c[Lc>>2]>>2]=0;c[(c[ic>>2]|0)+24>>2]=(c[Nc>>2]|0)-8;c[hc>>2]=c[Pc>>2];}}while(0);c[md>>2]=c[hc>>2];break d;break;}case 7:case 6:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[u>>2]=c[nd>>2];c[v>>2]=Uh;c[w>>2]=aj;c[x>>2]=_i;c[y>>2]=_h;c[z>>2]=Qh;c[A>>2]=Ph;c[B>>2]=Zi;c[C>>2]=Zh;c[D>>2]=6;if((c[(c[v>>2]|0)+20>>2]|0)>>>0<4095)uj=c[(c[v>>2]|0)+20>>2]|0;else uj=4095;c[E>>2]=uj;c[F>>2]=c[(c[u>>2]|0)+4>>2];c[G>>2]=(c[w>>2]|0)-(c[F>>2]|0);c[H>>2]=c[(c[v>>2]|0)+8>>2];c[I>>2]=(c[D>>2]|0)==3?3:4;c[J>>2]=c[(c[u>>2]|0)+36>>2];c[K>>2]=Sj(c[w>>2]|0,c[H>>2]|0,c[D>>2]|0)|0;c[L>>2]=c[(c[J>>2]|0)+(c[K>>2]<<2)>>2];c[M>>2]=c[(c[u>>2]|0)+44>>2];c[N>>2]=(c[(c[v>>2]|0)+4>>2]|0)-1;c[O>>2]=(1<<c[N>>2])-1;c[P>>2]=0;c[Q>>2]=0;c[R>>2]=c[(c[u>>2]|0)+8>>2];c[S>>2]=c[(c[u>>2]|0)+12>>2];c[T>>2]=(c[R>>2]|0)+(c[S>>2]|0);c[U>>2]=(c[F>>2]|0)+(c[S>>2]|0);if((c[O>>2]|0)>>>0>=(c[G>>2]|0)>>>0)vj=0;else vj=(c[G>>2]|0)-(c[O>>2]|0)|0;c[V>>2]=vj;c[W>>2]=c[(c[u>>2]|0)+16>>2];c[X>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2);c[Y>>2]=(c[M>>2]|0)+((c[G>>2]&c[O>>2])<<1<<2)+4;c[Z>>2]=(c[G>>2]|0)+8+1;c[$>>2]=0;c[aa>>2]=1<<c[(c[v>>2]|0)+12>>2];c[ba>>2]=(c[C>>2]|0)-1;c[ca>>2]=3+(c[A>>2]|0);c[da>>2]=c[A>>2];while(1){if((c[da>>2]|0)>>>0>=(c[ca>>2]|0)>>>0){dj=446;break;}Zh=c[z>>2]|0;if((c[da>>2]|0)==3)wj=(c[Zh>>2]|0)-1|0;else wj=c[Zh+(c[da>>2]<<2)>>2]|0;c[ea>>2]=wj;c[fa>>2]=(c[G>>2]|0)-(c[ea>>2]|0);c[ga>>2]=0;do{if(((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[S>>2]|0)|0)>>>0){Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm((c[w>>2]|0)+(0-(c[ea>>2]|0))|0,c[I>>2]|0)|0))break;Zh=Tj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[w>>2]|0)+(c[I>>2]|0)+(0-(c[ea>>2]|0))|0,c[x>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}else{c[ha>>2]=(c[R>>2]|0)+(c[fa>>2]|0);if(!(c[y>>2]|0))break;if(!((((c[S>>2]|0)-1-(c[fa>>2]|0)|0)>>>0>=3?((c[ea>>2]|0)-1|0)>>>0<((c[G>>2]|0)-(c[W>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[w>>2]|0,c[I>>2]|0)|0;if((Zh|0)!=(mm(c[ha>>2]|0,c[I>>2]|0)|0))break;Zh=Uj((c[w>>2]|0)+(c[I>>2]|0)|0,(c[ha>>2]|0)+(c[I>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[ga>>2]=Zh+(c[I>>2]|0);}}while(0);if((c[ga>>2]|0)>>>0>(c[ba>>2]|0)>>>0?(c[ba>>2]=c[ga>>2],c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[da>>2]|0)-(c[A>>2]|0),c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[ga>>2],c[$>>2]=(c[$>>2]|0)+1,((c[ga>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ga>>2]|0)|0)==(c[x>>2]|0))|0):0){dj=444;break;}c[da>>2]=(c[da>>2]|0)+1;}f:do{if((dj|0)==444){dj=0;c[t>>2]=c[$>>2];}else if((dj|0)==446){dj=0;do{if((c[D>>2]|0)==3){if((c[ba>>2]|0)>>>0>=(c[D>>2]|0)>>>0)break;c[ia>>2]=nm(c[u>>2]|0,c[w>>2]|0)|0;if(!(((c[ia>>2]|0)>>>0>(c[W>>2]|0)>>>0?((c[G>>2]|0)-(c[ia>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[y>>2]|0){if((c[ia>>2]|0)>>>0>=(c[S>>2]|0)>>>0){dj=451;break;}c[la>>2]=(c[R>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Uj(c[w>>2]|0,c[la>>2]|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;}else dj=451;}while(0);if((dj|0)==451){dj=0;c[ka>>2]=(c[F>>2]|0)+(c[ia>>2]|0);c[ja>>2]=Tj(c[w>>2]|0,c[ka>>2]|0,c[x>>2]|0)|0;}if((c[ja>>2]|0)>>>0<(c[D>>2]|0)>>>0)break;c[ba>>2]=c[ja>>2];c[c[B>>2]>>2]=(c[G>>2]|0)-(c[ia>>2]|0)+2;c[(c[B>>2]|0)+4>>2]=c[ja>>2];c[$>>2]=1;if(!(((c[ja>>2]|0)>>>0>(c[E>>2]|0)>>>0?1:((c[w>>2]|0)+(c[ja>>2]|0)|0)==(c[x>>2]|0))|0))break;c[(c[u>>2]|0)+24>>2]=(c[G>>2]|0)+1;c[t>>2]=1;break f;}}while(0);c[(c[J>>2]|0)+(c[K>>2]<<2)>>2]=c[G>>2];while(1){Zh=c[aa>>2]|0;c[aa>>2]=Zh+-1;if(!Zh)break;if((c[L>>2]|0)>>>0<=(c[W>>2]|0)>>>0)break;c[ma>>2]=(c[M>>2]|0)+((c[L>>2]&c[O>>2])<<1<<2);c[na>>2]=(c[P>>2]|0)>>>0<(c[Q>>2]|0)>>>0?c[P>>2]|0:c[Q>>2]|0;do{if(c[y>>2]|0){if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0>=(c[S>>2]|0)>>>0){dj=461;break;}c[oa>>2]=(c[R>>2]|0)+(c[L>>2]|0);Zh=Uj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0,c[T>>2]|0,c[U>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;if(((c[L>>2]|0)+(c[na>>2]|0)|0)>>>0<(c[S>>2]|0)>>>0)break;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);}else dj=461;}while(0);if((dj|0)==461){dj=0;c[oa>>2]=(c[F>>2]|0)+(c[L>>2]|0);Zh=Tj((c[w>>2]|0)+(c[na>>2]|0)|0,(c[oa>>2]|0)+(c[na>>2]|0)|0,c[x>>2]|0)|0;c[na>>2]=(c[na>>2]|0)+Zh;}if((c[na>>2]|0)>>>0>(c[ba>>2]|0)>>>0){if((c[na>>2]|0)>>>0>((c[Z>>2]|0)-(c[L>>2]|0)|0)>>>0)c[Z>>2]=(c[L>>2]|0)+(c[na>>2]|0);c[ba>>2]=c[na>>2];c[(c[B>>2]|0)+(c[$>>2]<<3)>>2]=(c[G>>2]|0)-(c[L>>2]|0)+2;c[(c[B>>2]|0)+(c[$>>2]<<3)+4>>2]=c[na>>2];c[$>>2]=(c[$>>2]|0)+1;if((c[na>>2]|0)>>>0>4096)break;if(((c[w>>2]|0)+(c[na>>2]|0)|0)==(c[x>>2]|0))break;}Zh=c[L>>2]|0;if((d[(c[oa>>2]|0)+(c[na>>2]|0)>>0]|0|0)<(d[(c[w>>2]|0)+(c[na>>2]|0)>>0]|0|0)){c[c[X>>2]>>2]=Zh;c[P>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=471;break;}c[X>>2]=(c[ma>>2]|0)+4;c[L>>2]=c[(c[ma>>2]|0)+4>>2];}else{c[c[Y>>2]>>2]=Zh;c[Q>>2]=c[na>>2];if((c[L>>2]|0)>>>0<=(c[V>>2]|0)>>>0){dj=474;break;}c[Y>>2]=c[ma>>2];c[L>>2]=c[c[ma>>2]>>2];}}if((dj|0)==471){dj=0;c[X>>2]=_;}else if((dj|0)==474){dj=0;c[Y>>2]=_;}c[c[Y>>2]>>2]=0;c[c[X>>2]>>2]=0;c[(c[u>>2]|0)+24>>2]=(c[Z>>2]|0)-8;c[t>>2]=c[$>>2];}}while(0);c[md>>2]=c[t>>2];break d;break;}case 5:{Zh=c[od>>2]|0;Zi=c[pd>>2]|0;Ph=c[qd>>2]|0;Qh=c[rd>>2]|0;_h=c[sd>>2]|0;_i=c[td>>2]|0;aj=c[ud>>2]|0;Uh=c[vd>>2]|0;c[qa>>2]=c[nd>>2];c[ra>>2]=Zh;c[sa>>2]=Zi;c[ta>>2]=Ph;c[ua>>2]=Qh;c[va>>2]=_h;c[wa>>2]=_i;c[xa>>2]=aj;c[ya>>2]=Uh;c[za>>2]=5;if((c[(c[ra>>2]|0)+20>>2]|0)>>>0<4095)xj=c[(c[ra>>2]|0)+20>>2]|0;else xj=4095;c[Aa>>2]=xj;c[Ba>>2]=c[(c[qa>>2]|0)+4>>2];c[Ca>>2]=(c[sa>>2]|0)-(c[Ba>>2]|0);c[Da>>2]=c[(c[ra>>2]|0)+8>>2];c[Ea>>2]=(c[za>>2]|0)==3?3:4;c[Fa>>2]=c[(c[qa>>2]|0)+36>>2];c[Ga>>2]=Sj(c[sa>>2]|0,c[Da>>2]|0,c[za>>2]|0)|0;c[Ha>>2]=c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2];c[Ia>>2]=c[(c[qa>>2]|0)+44>>2];c[Ja>>2]=(c[(c[ra>>2]|0)+4>>2]|0)-1;c[Ka>>2]=(1<<c[Ja>>2])-1;c[La>>2]=0;c[Ma>>2]=0;c[Na>>2]=c[(c[qa>>2]|0)+8>>2];c[Oa>>2]=c[(c[qa>>2]|0)+12>>2];c[Pa>>2]=(c[Na>>2]|0)+(c[Oa>>2]|0);c[Qa>>2]=(c[Ba>>2]|0)+(c[Oa>>2]|0);if((c[Ka>>2]|0)>>>0>=(c[Ca>>2]|0)>>>0)yj=0;else yj=(c[Ca>>2]|0)-(c[Ka>>2]|0)|0;c[Ra>>2]=yj;c[Sa>>2]=c[(c[qa>>2]|0)+16>>2];c[Ta>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2);c[Ua>>2]=(c[Ia>>2]|0)+((c[Ca>>2]&c[Ka>>2])<<1<<2)+4;c[Va>>2]=(c[Ca>>2]|0)+8+1;c[Xa>>2]=0;c[Ya>>2]=1<<c[(c[ra>>2]|0)+12>>2];c[Za>>2]=(c[ya>>2]|0)-1;c[_a>>2]=3+(c[wa>>2]|0);c[$a>>2]=c[wa>>2];while(1){if((c[$a>>2]|0)>>>0>=(c[_a>>2]|0)>>>0){dj=393;break;}Uh=c[va>>2]|0;if((c[$a>>2]|0)==3)zj=(c[Uh>>2]|0)-1|0;else zj=c[Uh+(c[$a>>2]<<2)>>2]|0;c[ab>>2]=zj;c[bb>>2]=(c[Ca>>2]|0)-(c[ab>>2]|0);c[cb>>2]=0;do{if(((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Oa>>2]|0)|0)>>>0){Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm((c[sa>>2]|0)+(0-(c[ab>>2]|0))|0,c[Ea>>2]|0)|0))break;Uh=Tj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[sa>>2]|0)+(c[Ea>>2]|0)+(0-(c[ab>>2]|0))|0,c[ta>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}else{c[db>>2]=(c[Na>>2]|0)+(c[bb>>2]|0);if(!(c[ua>>2]|0))break;if(!((((c[Oa>>2]|0)-1-(c[bb>>2]|0)|0)>>>0>=3?((c[ab>>2]|0)-1|0)>>>0<((c[Ca>>2]|0)-(c[Sa>>2]|0)|0)>>>0:0)|0))break;Uh=mm(c[sa>>2]|0,c[Ea>>2]|0)|0;if((Uh|0)!=(mm(c[db>>2]|0,c[Ea>>2]|0)|0))break;Uh=Uj((c[sa>>2]|0)+(c[Ea>>2]|0)|0,(c[db>>2]|0)+(c[Ea>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[cb>>2]=Uh+(c[Ea>>2]|0);}}while(0);if((c[cb>>2]|0)>>>0>(c[Za>>2]|0)>>>0?(c[Za>>2]=c[cb>>2],c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[$a>>2]|0)-(c[wa>>2]|0),c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[cb>>2],c[Xa>>2]=(c[Xa>>2]|0)+1,((c[cb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[cb>>2]|0)|0)==(c[ta>>2]|0))|0):0){dj=391;break;}c[$a>>2]=(c[$a>>2]|0)+1;}g:do{if((dj|0)==391){dj=0;c[pa>>2]=c[Xa>>2];}else if((dj|0)==393){dj=0;do{if((c[za>>2]|0)==3){if((c[Za>>2]|0)>>>0>=(c[za>>2]|0)>>>0)break;c[eb>>2]=nm(c[qa>>2]|0,c[sa>>2]|0)|0;if(!(((c[eb>>2]|0)>>>0>(c[Sa>>2]|0)>>>0?((c[Ca>>2]|0)-(c[eb>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[ua>>2]|0){if((c[eb>>2]|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=398;break;}c[hb>>2]=(c[Na>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Uj(c[sa>>2]|0,c[hb>>2]|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;}else dj=398;}while(0);if((dj|0)==398){dj=0;c[gb>>2]=(c[Ba>>2]|0)+(c[eb>>2]|0);c[fb>>2]=Tj(c[sa>>2]|0,c[gb>>2]|0,c[ta>>2]|0)|0;}if((c[fb>>2]|0)>>>0<(c[za>>2]|0)>>>0)break;c[Za>>2]=c[fb>>2];c[c[xa>>2]>>2]=(c[Ca>>2]|0)-(c[eb>>2]|0)+2;c[(c[xa>>2]|0)+4>>2]=c[fb>>2];c[Xa>>2]=1;if(!(((c[fb>>2]|0)>>>0>(c[Aa>>2]|0)>>>0?1:((c[sa>>2]|0)+(c[fb>>2]|0)|0)==(c[ta>>2]|0))|0))break;c[(c[qa>>2]|0)+24>>2]=(c[Ca>>2]|0)+1;c[pa>>2]=1;break g;}}while(0);c[(c[Fa>>2]|0)+(c[Ga>>2]<<2)>>2]=c[Ca>>2];while(1){Uh=c[Ya>>2]|0;c[Ya>>2]=Uh+-1;if(!Uh)break;if((c[Ha>>2]|0)>>>0<=(c[Sa>>2]|0)>>>0)break;c[ib>>2]=(c[Ia>>2]|0)+((c[Ha>>2]&c[Ka>>2])<<1<<2);c[jb>>2]=(c[La>>2]|0)>>>0<(c[Ma>>2]|0)>>>0?c[La>>2]|0:c[Ma>>2]|0;do{if(c[ua>>2]|0){if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0>=(c[Oa>>2]|0)>>>0){dj=408;break;}c[kb>>2]=(c[Na>>2]|0)+(c[Ha>>2]|0);Uh=Uj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0,c[Pa>>2]|0,c[Qa>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;if(((c[Ha>>2]|0)+(c[jb>>2]|0)|0)>>>0<(c[Oa>>2]|0)>>>0)break;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);}else dj=408;}while(0);if((dj|0)==408){dj=0;c[kb>>2]=(c[Ba>>2]|0)+(c[Ha>>2]|0);Uh=Tj((c[sa>>2]|0)+(c[jb>>2]|0)|0,(c[kb>>2]|0)+(c[jb>>2]|0)|0,c[ta>>2]|0)|0;c[jb>>2]=(c[jb>>2]|0)+Uh;}if((c[jb>>2]|0)>>>0>(c[Za>>2]|0)>>>0){if((c[jb>>2]|0)>>>0>((c[Va>>2]|0)-(c[Ha>>2]|0)|0)>>>0)c[Va>>2]=(c[Ha>>2]|0)+(c[jb>>2]|0);c[Za>>2]=c[jb>>2];c[(c[xa>>2]|0)+(c[Xa>>2]<<3)>>2]=(c[Ca>>2]|0)-(c[Ha>>2]|0)+2;c[(c[xa>>2]|0)+(c[Xa>>2]<<3)+4>>2]=c[jb>>2];c[Xa>>2]=(c[Xa>>2]|0)+1;if((c[jb>>2]|0)>>>0>4096)break;if(((c[sa>>2]|0)+(c[jb>>2]|0)|0)==(c[ta>>2]|0))break;}Uh=c[Ha>>2]|0;if((d[(c[kb>>2]|0)+(c[jb>>2]|0)>>0]|0|0)<(d[(c[sa>>2]|0)+(c[jb>>2]|0)>>0]|0|0)){c[c[Ta>>2]>>2]=Uh;c[La>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=418;break;}c[Ta>>2]=(c[ib>>2]|0)+4;c[Ha>>2]=c[(c[ib>>2]|0)+4>>2];}else{c[c[Ua>>2]>>2]=Uh;c[Ma>>2]=c[jb>>2];if((c[Ha>>2]|0)>>>0<=(c[Ra>>2]|0)>>>0){dj=421;break;}c[Ua>>2]=c[ib>>2];c[Ha>>2]=c[c[ib>>2]>>2];}}if((dj|0)==418){dj=0;c[Ta>>2]=Wa;}else if((dj|0)==421){dj=0;c[Ua>>2]=Wa;}c[c[Ua>>2]>>2]=0;c[c[Ta>>2]>>2]=0;c[(c[qa>>2]|0)+24>>2]=(c[Va>>2]|0)-8;c[pa>>2]=c[Xa>>2];}}while(0);c[md>>2]=c[pa>>2];break d;break;}default:{Uh=c[od>>2]|0;aj=c[pd>>2]|0;_i=c[qd>>2]|0;_h=c[rd>>2]|0;Qh=c[sd>>2]|0;Ph=c[td>>2]|0;Zi=c[ud>>2]|0;Zh=c[vd>>2]|0;c[mb>>2]=c[nd>>2];c[nb>>2]=Uh;c[ob>>2]=aj;c[pb>>2]=_i;c[qb>>2]=_h;c[rb>>2]=Qh;c[sb>>2]=Ph;c[tb>>2]=Zi;c[ub>>2]=Zh;c[vb>>2]=4;if((c[(c[nb>>2]|0)+20>>2]|0)>>>0<4095)Aj=c[(c[nb>>2]|0)+20>>2]|0;else Aj=4095;c[wb>>2]=Aj;c[xb>>2]=c[(c[mb>>2]|0)+4>>2];c[yb>>2]=(c[ob>>2]|0)-(c[xb>>2]|0);c[zb>>2]=c[(c[nb>>2]|0)+8>>2];c[Ab>>2]=(c[vb>>2]|0)==3?3:4;c[Bb>>2]=c[(c[mb>>2]|0)+36>>2];c[Cb>>2]=Sj(c[ob>>2]|0,c[zb>>2]|0,c[vb>>2]|0)|0;c[Db>>2]=c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2];c[Eb>>2]=c[(c[mb>>2]|0)+44>>2];c[Fb>>2]=(c[(c[nb>>2]|0)+4>>2]|0)-1;c[Gb>>2]=(1<<c[Fb>>2])-1;c[Hb>>2]=0;c[Ib>>2]=0;c[Jb>>2]=c[(c[mb>>2]|0)+8>>2];c[Kb>>2]=c[(c[mb>>2]|0)+12>>2];c[Lb>>2]=(c[Jb>>2]|0)+(c[Kb>>2]|0);c[Mb>>2]=(c[xb>>2]|0)+(c[Kb>>2]|0);if((c[Gb>>2]|0)>>>0>=(c[yb>>2]|0)>>>0)Bj=0;else Bj=(c[yb>>2]|0)-(c[Gb>>2]|0)|0;c[Nb>>2]=Bj;c[Ob>>2]=c[(c[mb>>2]|0)+16>>2];c[Pb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2);c[Qb>>2]=(c[Eb>>2]|0)+((c[yb>>2]&c[Gb>>2])<<1<<2)+4;c[Rb>>2]=(c[yb>>2]|0)+8+1;c[Tb>>2]=0;c[Ub>>2]=1<<c[(c[nb>>2]|0)+12>>2];c[Vb>>2]=(c[ub>>2]|0)-1;c[Wb>>2]=3+(c[sb>>2]|0);c[Xb>>2]=c[sb>>2];while(1){if((c[Xb>>2]|0)>>>0>=(c[Wb>>2]|0)>>>0){dj=340;break;}Zh=c[rb>>2]|0;if((c[Xb>>2]|0)==3)Cj=(c[Zh>>2]|0)-1|0;else Cj=c[Zh+(c[Xb>>2]<<2)>>2]|0;c[Yb>>2]=Cj;c[Zb>>2]=(c[yb>>2]|0)-(c[Yb>>2]|0);c[_b>>2]=0;do{if(((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Kb>>2]|0)|0)>>>0){Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm((c[ob>>2]|0)+(0-(c[Yb>>2]|0))|0,c[Ab>>2]|0)|0))break;Zh=Tj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[ob>>2]|0)+(c[Ab>>2]|0)+(0-(c[Yb>>2]|0))|0,c[pb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}else{c[$b>>2]=(c[Jb>>2]|0)+(c[Zb>>2]|0);if(!(c[qb>>2]|0))break;if(!((((c[Kb>>2]|0)-1-(c[Zb>>2]|0)|0)>>>0>=3?((c[Yb>>2]|0)-1|0)>>>0<((c[yb>>2]|0)-(c[Ob>>2]|0)|0)>>>0:0)|0))break;Zh=mm(c[ob>>2]|0,c[Ab>>2]|0)|0;if((Zh|0)!=(mm(c[$b>>2]|0,c[Ab>>2]|0)|0))break;Zh=Uj((c[ob>>2]|0)+(c[Ab>>2]|0)|0,(c[$b>>2]|0)+(c[Ab>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[_b>>2]=Zh+(c[Ab>>2]|0);}}while(0);if((c[_b>>2]|0)>>>0>(c[Vb>>2]|0)>>>0?(c[Vb>>2]=c[_b>>2],c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[Xb>>2]|0)-(c[sb>>2]|0),c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[_b>>2],c[Tb>>2]=(c[Tb>>2]|0)+1,((c[_b>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[_b>>2]|0)|0)==(c[pb>>2]|0))|0):0){dj=338;break;}c[Xb>>2]=(c[Xb>>2]|0)+1;}h:do{if((dj|0)==338){dj=0;c[lb>>2]=c[Tb>>2];}else if((dj|0)==340){dj=0;do{if((c[vb>>2]|0)==3){if((c[Vb>>2]|0)>>>0>=(c[vb>>2]|0)>>>0)break;c[ac>>2]=nm(c[mb>>2]|0,c[ob>>2]|0)|0;if(!(((c[ac>>2]|0)>>>0>(c[Ob>>2]|0)>>>0?((c[yb>>2]|0)-(c[ac>>2]|0)|0)>>>0<262144:0)|0))break;do{if(c[qb>>2]|0){if((c[ac>>2]|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=345;break;}c[dc>>2]=(c[Jb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Uj(c[ob>>2]|0,c[dc>>2]|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;}else dj=345;}while(0);if((dj|0)==345){dj=0;c[cc>>2]=(c[xb>>2]|0)+(c[ac>>2]|0);c[bc>>2]=Tj(c[ob>>2]|0,c[cc>>2]|0,c[pb>>2]|0)|0;}if((c[bc>>2]|0)>>>0<(c[vb>>2]|0)>>>0)break;c[Vb>>2]=c[bc>>2];c[c[tb>>2]>>2]=(c[yb>>2]|0)-(c[ac>>2]|0)+2;c[(c[tb>>2]|0)+4>>2]=c[bc>>2];c[Tb>>2]=1;if(!(((c[bc>>2]|0)>>>0>(c[wb>>2]|0)>>>0?1:((c[ob>>2]|0)+(c[bc>>2]|0)|0)==(c[pb>>2]|0))|0))break;c[(c[mb>>2]|0)+24>>2]=(c[yb>>2]|0)+1;c[lb>>2]=1;break h;}}while(0);c[(c[Bb>>2]|0)+(c[Cb>>2]<<2)>>2]=c[yb>>2];while(1){Zh=c[Ub>>2]|0;c[Ub>>2]=Zh+-1;if(!Zh)break;if((c[Db>>2]|0)>>>0<=(c[Ob>>2]|0)>>>0)break;c[ec>>2]=(c[Eb>>2]|0)+((c[Db>>2]&c[Gb>>2])<<1<<2);c[fc>>2]=(c[Hb>>2]|0)>>>0<(c[Ib>>2]|0)>>>0?c[Hb>>2]|0:c[Ib>>2]|0;do{if(c[qb>>2]|0){if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0>=(c[Kb>>2]|0)>>>0){dj=355;break;}c[gc>>2]=(c[Jb>>2]|0)+(c[Db>>2]|0);Zh=Uj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0,c[Lb>>2]|0,c[Mb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;if(((c[Db>>2]|0)+(c[fc>>2]|0)|0)>>>0<(c[Kb>>2]|0)>>>0)break;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);}else dj=355;}while(0);if((dj|0)==355){dj=0;c[gc>>2]=(c[xb>>2]|0)+(c[Db>>2]|0);Zh=Tj((c[ob>>2]|0)+(c[fc>>2]|0)|0,(c[gc>>2]|0)+(c[fc>>2]|0)|0,c[pb>>2]|0)|0;c[fc>>2]=(c[fc>>2]|0)+Zh;}if((c[fc>>2]|0)>>>0>(c[Vb>>2]|0)>>>0){if((c[fc>>2]|0)>>>0>((c[Rb>>2]|0)-(c[Db>>2]|0)|0)>>>0)c[Rb>>2]=(c[Db>>2]|0)+(c[fc>>2]|0);c[Vb>>2]=c[fc>>2];c[(c[tb>>2]|0)+(c[Tb>>2]<<3)>>2]=(c[yb>>2]|0)-(c[Db>>2]|0)+2;c[(c[tb>>2]|0)+(c[Tb>>2]<<3)+4>>2]=c[fc>>2];c[Tb>>2]=(c[Tb>>2]|0)+1;if((c[fc>>2]|0)>>>0>4096)break;if(((c[ob>>2]|0)+(c[fc>>2]|0)|0)==(c[pb>>2]|0))break;}Zh=c[Db>>2]|0;if((d[(c[gc>>2]|0)+(c[fc>>2]|0)>>0]|0|0)<(d[(c[ob>>2]|0)+(c[fc>>2]|0)>>0]|0|0)){c[c[Pb>>2]>>2]=Zh;c[Hb>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=365;break;}c[Pb>>2]=(c[ec>>2]|0)+4;c[Db>>2]=c[(c[ec>>2]|0)+4>>2];}else{c[c[Qb>>2]>>2]=Zh;c[Ib>>2]=c[fc>>2];if((c[Db>>2]|0)>>>0<=(c[Nb>>2]|0)>>>0){dj=368;break;}c[Qb>>2]=c[ec>>2];c[Db>>2]=c[c[ec>>2]>>2];}}if((dj|0)==365){dj=0;c[Pb>>2]=Sb;}else if((dj|0)==368){dj=0;c[Qb>>2]=Sb;}c[c[Qb>>2]>>2]=0;c[c[Pb>>2]>>2]=0;c[(c[mb>>2]|0)+24>>2]=(c[Rb>>2]|0)-8;c[lb>>2]=c[Tb>>2];}}while(0);c[md>>2]=c[lb>>2];break d;}}}}while(0);c[Bi>>2]=c[md>>2];if(c[Bi>>2]|0){c[Di>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)+4>>2];if(((c[Di>>2]|0)>>>0>(c[$h>>2]|0)>>>0?1:((c[ei>>2]|0)+(c[Di>>2]|0)|0)>>>0>=4096)|0){dj=481;break b;}c[Ci>>2]=0;while(1){if((c[Ci>>2]|0)>>>0>=(c[Bi>>2]|0)>>>0)break c;c[Ei>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)>>2];pm(Fi,(c[bi>>2]|0)+((c[ei>>2]|0)*28|0)+16|0,c[Ei>>2]|0,c[xi>>2]|0);c[Gi>>2]=c[(c[ci>>2]|0)+(c[Ci>>2]<<3)+4>>2];if((c[Ci>>2]|0)>>>0>0)Dj=(c[(c[ci>>2]|0)+((c[Ci>>2]|0)-1<<3)+4>>2]|0)+1|0;else Dj=c[ai>>2]|0;c[Hi>>2]=Dj;c[Ii>>2]=c[Gi>>2];i:while(1){if((c[Ii>>2]|0)>>>0<(c[Hi>>2]|0)>>>0)break;c[Ji>>2]=(c[ei>>2]|0)+(c[Ii>>2]|0);Zh=c[Ai>>2]|0;Zi=c[Ii>>2]|0;Ph=c[Th>>2]|0;Qh=c[Rh>>2]|0;c[k>>2]=c[Ei>>2];c[m>>2]=Zi;c[n>>2]=Ph;c[o>>2]=Qh;c[q>>2]=qm((c[k>>2]|0)+1|0)|0;c[r>>2]=(c[m>>2]|0)-3;if(c[(c[n>>2]|0)+56>>2]|0){Qh=(qm((c[r>>2]|0)+1|0)|0)+16|0;c[j>>2]=Qh+(c[q>>2]|0);}else{Qh=(c[q>>2]|0)+(c[(c[n>>2]|0)+52>>2]|0)|0;c[p>>2]=Qh-(qm((c[(c[(c[n>>2]|0)+12>>2]|0)+(c[q>>2]<<2)>>2]|0)+1|0)|0);if((c[o>>2]|0)<2&(c[q>>2]|0)>>>0>=20)c[p>>2]=(c[p>>2]|0)+((c[q>>2]|0)-19<<1);c[s>>2]=rm(c[r>>2]|0)|0;Qh=(c[5840+(c[s>>2]<<2)>>2]|0)+(c[(c[n>>2]|0)+48>>2]|0)|0;Ph=Qh-(qm((c[(c[(c[n>>2]|0)+8>>2]|0)+(c[s>>2]<<2)>>2]|0)+1|0)|0)|0;c[p>>2]=(c[p>>2]|0)+Ph;c[j>>2]=c[p>>2];}c[Ki>>2]=Zh+(c[j>>2]|0);do{if((c[Ji>>2]|0)>>>0<=(c[fi>>2]|0)>>>0){if((c[Ki>>2]|0)<(c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]|0)){dj=496;break;}if(!(c[Rh>>2]|0))break i;}else dj=496;}while(0);if((dj|0)==496){dj=0;while(1){if((c[fi>>2]|0)>>>0>=(c[Ji>>2]|0)>>>0)break;c[(c[bi>>2]|0)+(((c[fi>>2]|0)+1|0)*28|0)>>2]=1073741824;c[fi>>2]=(c[fi>>2]|0)+1;}c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+8>>2]=c[Ii>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+4>>2]=c[Ei>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+12>>2]=c[yi>>2];c[(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)>>2]=c[Ki>>2];Zh=(c[bi>>2]|0)+((c[Ji>>2]|0)*28|0)+16|0;c[Zh>>2]=c[Fi>>2];c[Zh+4>>2]=c[Fi+4>>2];c[Zh+8>>2]=c[Fi+8>>2];}c[Ii>>2]=(c[Ii>>2]|0)+-1;}c[Ci>>2]=(c[Ci>>2]|0)+1;}}}}while(0);c[ei>>2]=(c[ei>>2]|0)+1;}if((dj|0)==481){dj=0;c[gi>>2]=c[Di>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[Bi>>2]|0)-1<<3)>>2];c[fi>>2]=(c[ei>>2]|0)+1;break;}else if((dj|0)==504){dj=0;c[gi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+8>>2];c[hi>>2]=c[(c[bi>>2]|0)+((c[fi>>2]|0)*28|0)+4>>2];c[ei>>2]=(c[fi>>2]|0)-(c[gi>>2]|0);break;}}else{c[gi>>2]=c[mi>>2];c[hi>>2]=c[(c[ci>>2]|0)+((c[ki>>2]|0)-1<<3)>>2];c[ei>>2]=0;c[fi>>2]=1;}}while(0);c[Li>>2]=c[gi>>2];c[Mi>>2]=c[hi>>2];c[Ni>>2]=c[ei>>2];while(1){c[Oi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2];c[Pi>>2]=c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+8>>2]=c[Li>>2];c[(c[bi>>2]|0)+((c[Ni>>2]|0)*28|0)+4>>2]=c[Mi>>2];c[Li>>2]=c[Oi>>2];c[Mi>>2]=c[Pi>>2];if((c[Oi>>2]|0)>>>0>(c[Ni>>2]|0)>>>0)break;c[Ni>>2]=(c[Ni>>2]|0)-(c[Oi>>2]|0);}c[Qi>>2]=0;while(1){if((c[Qi>>2]|0)>>>0>=(c[fi>>2]|0)>>>0)break;c[Ri>>2]=(c[Vh>>2]|0)-(c[Wh>>2]|0);c[Si>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+8>>2];c[Ti>>2]=c[(c[bi>>2]|0)+((c[Qi>>2]|0)*28|0)+4>>2];if((c[Si>>2]|0)==1){c[Vh>>2]=(c[Vh>>2]|0)+1;c[Qi>>2]=(c[Qi>>2]|0)+1;continue;}c[Qi>>2]=(c[Qi>>2]|0)+(c[Si>>2]|0);c[Vh>>2]=(c[Vh>>2]|0)+(c[Si>>2]|0);if((c[Ti>>2]|0)>>>0<3){c[Ui>>2]=(c[Ti>>2]|0)+((c[Ri>>2]|0)==0&1);if(c[Ui>>2]|0){Zh=c[Nh>>2]|0;if((c[Ui>>2]|0)==3)Ej=(c[Zh>>2]|0)-1|0;else Ej=c[Zh+(c[Ui>>2]<<2)>>2]|0;c[Vi>>2]=Ej;if((c[Ui>>2]|0)>>>0>=2)c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=c[Vi>>2];}}else{c[(c[Nh>>2]|0)+8>>2]=c[(c[Nh>>2]|0)+4>>2];c[(c[Nh>>2]|0)+4>>2]=c[c[Nh>>2]>>2];c[c[Nh>>2]>>2]=(c[Ti>>2]|0)-2;}vm(c[Th>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,c[Si>>2]|0);wm(c[Mh>>2]|0,c[Ri>>2]|0,c[Wh>>2]|0,c[Ti>>2]|0,(c[Si>>2]|0)-3|0);c[Wh>>2]=c[Vh>>2];}xm(c[Th>>2]|0);}l=i;return(c[Xh>>2]|0)-(c[Wh>>2]|0)|0;}function dm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=l;l=l+48|0;i=h+36|0;j=h+32|0;k=h+28|0;m=h+24|0;n=h+20|0;o=h+16|0;p=h+12|0;q=h+8|0;r=h+4|0;s=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[(c[n>>2]|0)+8>>2];c[r>>2]=c[(c[n>>2]|0)+16>>2];c[s>>2]=c[(c[n>>2]|0)+20>>2];switch(c[r>>2]|0){case 7:{c[i>>2]=hn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,7)|0;t=c[i>>2]|0;l=h;return t|0;}case 5:{c[i>>2]=hn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,5)|0;t=c[i>>2]|0;l=h;return t|0;}case 6:{c[i>>2]=hn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,6)|0;t=c[i>>2]|0;l=h;return t|0;}default:{c[i>>2]=hn(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[o>>2]|0,c[p>>2]|0,c[q>>2]|0,c[s>>2]|0,4)|0;t=c[i>>2]|0;l=h;return t|0;}}return 0;}function em(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;h=l;l=l+32|0;i=h+28|0;j=h+24|0;k=h+20|0;m=h+16|0;n=h+12|0;o=h+8|0;p=h+4|0;q=h;c[j>>2]=a;c[k>>2]=b;c[m>>2]=d;c[n>>2]=e;c[o>>2]=f;c[p>>2]=g;c[q>>2]=c[(c[n>>2]|0)+16>>2];switch(c[q>>2]|0){case 7:{c[i>>2]=Zm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,7)|0;r=c[i>>2]|0;l=h;return r|0;}case 5:{c[i>>2]=Zm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,5)|0;r=c[i>>2]|0;l=h;return r|0;}case 6:{c[i>>2]=Zm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,6)|0;r=c[i>>2]|0;l=h;return r|0;}default:{c[i>>2]=Zm(c[j>>2]|0,c[k>>2]|0,c[m>>2]|0,c[n>>2]|0,c[o>>2]|0,c[p>>2]|0,4)|0;r=c[i>>2]|0;l=h;return r|0;}}return 0;}function fm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;i=l;l=l+288|0;j=i+272|0;k=i+268|0;m=i+264|0;n=i+260|0;o=i+256|0;p=i+252|0;q=i+248|0;r=i+244|0;s=i+240|0;t=i+236|0;u=i+232|0;v=i+228|0;w=i+224|0;x=i+220|0;y=i+216|0;z=i+212|0;A=i+208|0;B=i+204|0;C=i+200|0;D=i+196|0;E=i+192|0;F=i+188|0;G=i+184|0;H=i+180|0;I=i+176|0;J=i+172|0;K=i+168|0;L=i+164|0;M=i+160|0;N=i+156|0;O=i+152|0;P=i+148|0;Q=i+144|0;R=i+140|0;S=i+136|0;T=i+132|0;U=i+128|0;V=i+124|0;W=i+120|0;X=i+116|0;Y=i+112|0;Z=i+108|0;_=i+104|0;$=i+100|0;aa=i+96|0;ba=i+92|0;ca=i+88|0;da=i+84|0;ea=i+80|0;fa=i+76|0;ga=i+72|0;ha=i+68|0;ia=i+64|0;ja=i+60|0;ka=i+56|0;la=i+52|0;ma=i+48|0;na=i+44|0;oa=i+40|0;pa=i+36|0;qa=i+32|0;ra=i+28|0;sa=i+24|0;ta=i+20|0;ua=i+16|0;va=i+12|0;wa=i+8|0;xa=i+4|0;ya=i;c[ta>>2]=a;c[ua>>2]=b;c[va>>2]=e;c[wa>>2]=f;c[xa>>2]=g;c[ya>>2]=h;h=c[ua>>2]|0;ua=c[va>>2]|0;va=c[wa>>2]|0;wa=c[xa>>2]|0;xa=c[ya>>2]|0;c[j>>2]=c[ta>>2];c[k>>2]=h;c[m>>2]=ua;c[n>>2]=va;c[o>>2]=wa;c[p>>2]=xa;c[q>>2]=0;c[r>>2]=0;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=c[(c[j>>2]|0)+4>>2];c[y>>2]=c[(c[j>>2]|0)+12>>2];c[z>>2]=c[(c[j>>2]|0)+16>>2];c[A>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[B>>2]=c[(c[j>>2]|0)+8>>2];c[C>>2]=(c[B>>2]|0)+(c[y>>2]|0);c[D>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[E>>2]=c[q>>2]|0?7:6;c[F>>2]=c[c[m>>2]>>2];c[G>>2]=c[(c[m>>2]|0)+4>>2];c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[A>>2]|0)&1);while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[H>>2]=0;c[I>>2]=0;c[J>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[t>>2]|0)-(c[x>>2]|0);c[L>>2]=(c[K>>2]|0)+1-(c[F>>2]|0);c[M>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[N>>2]=(c[M>>2]|0)+(c[L>>2]|0);if(!((((c[L>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[L>>2]|0)|0)>>>0>=3:0)|0?(q=Bk((c[t>>2]|0)+1|0)|0,(q|0)==(Bk(c[N>>2]|0)|0)):0)?(c[O>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[H>>2]=(Lm((c[t>>2]|0)+1+4|0,(c[N>>2]|0)+4|0,c[v>>2]|0,c[O>>2]|0,c[A>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[P>>2]=99999999;c[Q>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,P)|0;if((c[Q>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[H>>2]=c[Q>>2];c[J>>2]=c[t>>2];c[I>>2]=c[P>>2];}if((c[H>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[R>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[S>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[T>>2]=(c[S>>2]|0)+(c[R>>2]|0),((c[R>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[R>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[T>>2]|0)|0)):0)?(c[U>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[V>>2]=(Lm((c[t>>2]|0)+4|0,(c[T>>2]|0)+4|0,c[v>>2]|0,c[U>>2]|0,c[A>>2]|0)|0)+4,c[W>>2]=(c[V>>2]|0)*3,q=(c[H>>2]|0)*3|0,c[X>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[V>>2]|0)>>>0>=4):0)?(c[W>>2]|0)>(c[X>>2]|0):0){c[H>>2]=c[V>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[Y>>2]=99999999;c[Z>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,Y)|0;q=c[Z>>2]<<2;c[_>>2]=q-(Mm((c[Y>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[$>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+4;if((c[Z>>2]|0)>>>0>=4?(c[_>>2]|0)>(c[$>>2]|0):0){c[H>>2]=c[Z>>2];c[I>>2]=c[Y>>2];c[J>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[aa>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[ba>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[ca>>2]=(c[ba>>2]|0)+(c[aa>>2]|0),((c[aa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[aa>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[ca>>2]|0)|0)):0)?(c[da>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[ea>>2]=(Lm((c[t>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[v>>2]|0,c[da>>2]|0,c[A>>2]|0)|0)+4,c[fa>>2]=c[ea>>2]<<2,q=c[H>>2]<<2,c[ga>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[ea>>2]|0)>>>0>=4):0)?(c[fa>>2]|0)>(c[ga>>2]|0):0){c[H>>2]=c[ea>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[ha>>2]=99999999;c[ia>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,ha)|0;q=c[ia>>2]<<2;c[ja>>2]=q-(Mm((c[ha>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[ka>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+7;if((c[ia>>2]|0)>>>0<4)break a;if((c[ja>>2]|0)<=(c[ka>>2]|0))break a;c[H>>2]=c[ia>>2];c[I>>2]=c[ha>>2];c[J>>2]=c[t>>2];}}while(0);if(c[I>>2]|0){c[la>>2]=(c[J>>2]|0)-(c[x>>2]|0)-((c[I>>2]|0)-2);c[ma>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?(c[B>>2]|0)+(c[la>>2]|0)|0:(c[x>>2]|0)+(c[la>>2]|0)|0;c[na>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[D>>2]|0:c[A>>2]|0;while(1){if((c[J>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;if((c[ma>>2]|0)>>>0<=(c[na>>2]|0)>>>0)break;if((d[(c[J>>2]|0)+-1>>0]|0|0)!=(d[(c[ma>>2]|0)+-1>>0]|0|0))break;c[J>>2]=(c[J>>2]|0)+-1;c[ma>>2]=(c[ma>>2]|0)+-1;c[H>>2]=(c[H>>2]|0)+1;}c[G>>2]=c[F>>2];c[F>>2]=(c[I>>2]|0)-2;}}c[oa>>2]=(c[J>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[oa>>2]|0,c[u>>2]|0,c[I>>2]|0,(c[H>>2]|0)-3|0);q=(c[J>>2]|0)+(c[H>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if((c[t>>2]|0)>>>0>(c[w>>2]|0)>>>0)break;c[pa>>2]=(c[t>>2]|0)-(c[x>>2]|0)-(c[G>>2]|0);c[qa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[ra>>2]=(c[qa>>2]|0)+(c[pa>>2]|0);if(!(((c[pa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[pa>>2]|0)|0)>>>0>=3:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk(c[ra>>2]|0)|0))break;c[sa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0;c[H>>2]=(Lm((c[t>>2]|0)+4|0,(c[ra>>2]|0)+4|0,c[v>>2]|0,c[sa>>2]|0,c[A>>2]|0)|0)+4;c[I>>2]=c[G>>2];c[G>>2]=c[F>>2];c[F>>2]=c[I>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[H>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[H>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[F>>2];c[(c[m>>2]|0)+4>>2]=c[G>>2];l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function gm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;i=l;l=l+288|0;j=i+272|0;k=i+268|0;m=i+264|0;n=i+260|0;o=i+256|0;p=i+252|0;q=i+248|0;r=i+244|0;s=i+240|0;t=i+236|0;u=i+232|0;v=i+228|0;w=i+224|0;x=i+220|0;y=i+216|0;z=i+212|0;A=i+208|0;B=i+204|0;C=i+200|0;D=i+196|0;E=i+192|0;F=i+188|0;G=i+184|0;H=i+180|0;I=i+176|0;J=i+172|0;K=i+168|0;L=i+164|0;M=i+160|0;N=i+156|0;O=i+152|0;P=i+148|0;Q=i+144|0;R=i+140|0;S=i+136|0;T=i+132|0;U=i+128|0;V=i+124|0;W=i+120|0;X=i+116|0;Y=i+112|0;Z=i+108|0;_=i+104|0;$=i+100|0;aa=i+96|0;ba=i+92|0;ca=i+88|0;da=i+84|0;ea=i+80|0;fa=i+76|0;ga=i+72|0;ha=i+68|0;ia=i+64|0;ja=i+60|0;ka=i+56|0;la=i+52|0;ma=i+48|0;na=i+44|0;oa=i+40|0;pa=i+36|0;qa=i+32|0;ra=i+28|0;sa=i+24|0;ta=i+20|0;ua=i+16|0;va=i+12|0;wa=i+8|0;xa=i+4|0;ya=i;c[ta>>2]=a;c[ua>>2]=b;c[va>>2]=e;c[wa>>2]=f;c[xa>>2]=g;c[ya>>2]=h;h=c[ua>>2]|0;ua=c[va>>2]|0;va=c[wa>>2]|0;wa=c[xa>>2]|0;xa=c[ya>>2]|0;c[j>>2]=c[ta>>2];c[k>>2]=h;c[m>>2]=ua;c[n>>2]=va;c[o>>2]=wa;c[p>>2]=xa;c[q>>2]=0;c[r>>2]=1;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=c[(c[j>>2]|0)+4>>2];c[y>>2]=c[(c[j>>2]|0)+12>>2];c[z>>2]=c[(c[j>>2]|0)+16>>2];c[A>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[B>>2]=c[(c[j>>2]|0)+8>>2];c[C>>2]=(c[B>>2]|0)+(c[y>>2]|0);c[D>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[E>>2]=c[q>>2]|0?7:6;c[F>>2]=c[c[m>>2]>>2];c[G>>2]=c[(c[m>>2]|0)+4>>2];c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[A>>2]|0)&1);while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[H>>2]=0;c[I>>2]=0;c[J>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[t>>2]|0)-(c[x>>2]|0);c[L>>2]=(c[K>>2]|0)+1-(c[F>>2]|0);c[M>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[N>>2]=(c[M>>2]|0)+(c[L>>2]|0);if(!((((c[L>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[L>>2]|0)|0)>>>0>=3:0)|0?(q=Bk((c[t>>2]|0)+1|0)|0,(q|0)==(Bk(c[N>>2]|0)|0)):0)?(c[O>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[H>>2]=(Lm((c[t>>2]|0)+1+4|0,(c[N>>2]|0)+4|0,c[v>>2]|0,c[O>>2]|0,c[A>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[P>>2]=99999999;c[Q>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,P)|0;if((c[Q>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[H>>2]=c[Q>>2];c[J>>2]=c[t>>2];c[I>>2]=c[P>>2];}if((c[H>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[R>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[S>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[T>>2]=(c[S>>2]|0)+(c[R>>2]|0),((c[R>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[R>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[T>>2]|0)|0)):0)?(c[U>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[V>>2]=(Lm((c[t>>2]|0)+4|0,(c[T>>2]|0)+4|0,c[v>>2]|0,c[U>>2]|0,c[A>>2]|0)|0)+4,c[W>>2]=(c[V>>2]|0)*3,q=(c[H>>2]|0)*3|0,c[X>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[V>>2]|0)>>>0>=4):0)?(c[W>>2]|0)>(c[X>>2]|0):0){c[H>>2]=c[V>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[Y>>2]=99999999;c[Z>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,Y)|0;q=c[Z>>2]<<2;c[_>>2]=q-(Mm((c[Y>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[$>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+4;if((c[Z>>2]|0)>>>0>=4?(c[_>>2]|0)>(c[$>>2]|0):0){c[H>>2]=c[Z>>2];c[I>>2]=c[Y>>2];c[J>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[aa>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[ba>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[ca>>2]=(c[ba>>2]|0)+(c[aa>>2]|0),((c[aa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[aa>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[ca>>2]|0)|0)):0)?(c[da>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[ea>>2]=(Lm((c[t>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[v>>2]|0,c[da>>2]|0,c[A>>2]|0)|0)+4,c[fa>>2]=c[ea>>2]<<2,q=c[H>>2]<<2,c[ga>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[ea>>2]|0)>>>0>=4):0)?(c[fa>>2]|0)>(c[ga>>2]|0):0){c[H>>2]=c[ea>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[ha>>2]=99999999;c[ia>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,ha)|0;q=c[ia>>2]<<2;c[ja>>2]=q-(Mm((c[ha>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[ka>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+7;if((c[ia>>2]|0)>>>0<4)break a;if((c[ja>>2]|0)<=(c[ka>>2]|0))break a;c[H>>2]=c[ia>>2];c[I>>2]=c[ha>>2];c[J>>2]=c[t>>2];}}while(0);if(c[I>>2]|0){c[la>>2]=(c[J>>2]|0)-(c[x>>2]|0)-((c[I>>2]|0)-2);c[ma>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?(c[B>>2]|0)+(c[la>>2]|0)|0:(c[x>>2]|0)+(c[la>>2]|0)|0;c[na>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[D>>2]|0:c[A>>2]|0;while(1){if((c[J>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;if((c[ma>>2]|0)>>>0<=(c[na>>2]|0)>>>0)break;if((d[(c[J>>2]|0)+-1>>0]|0|0)!=(d[(c[ma>>2]|0)+-1>>0]|0|0))break;c[J>>2]=(c[J>>2]|0)+-1;c[ma>>2]=(c[ma>>2]|0)+-1;c[H>>2]=(c[H>>2]|0)+1;}c[G>>2]=c[F>>2];c[F>>2]=(c[I>>2]|0)-2;}}c[oa>>2]=(c[J>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[oa>>2]|0,c[u>>2]|0,c[I>>2]|0,(c[H>>2]|0)-3|0);q=(c[J>>2]|0)+(c[H>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if((c[t>>2]|0)>>>0>(c[w>>2]|0)>>>0)break;c[pa>>2]=(c[t>>2]|0)-(c[x>>2]|0)-(c[G>>2]|0);c[qa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[ra>>2]=(c[qa>>2]|0)+(c[pa>>2]|0);if(!(((c[pa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[pa>>2]|0)|0)>>>0>=3:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk(c[ra>>2]|0)|0))break;c[sa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0;c[H>>2]=(Lm((c[t>>2]|0)+4|0,(c[ra>>2]|0)+4|0,c[v>>2]|0,c[sa>>2]|0,c[A>>2]|0)|0)+4;c[I>>2]=c[G>>2];c[G>>2]=c[F>>2];c[F>>2]=c[I>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[H>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[H>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[F>>2];c[(c[m>>2]|0)+4>>2]=c[G>>2];l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function hm(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;i=l;l=l+288|0;j=i+272|0;k=i+268|0;m=i+264|0;n=i+260|0;o=i+256|0;p=i+252|0;q=i+248|0;r=i+244|0;s=i+240|0;t=i+236|0;u=i+232|0;v=i+228|0;w=i+224|0;x=i+220|0;y=i+216|0;z=i+212|0;A=i+208|0;B=i+204|0;C=i+200|0;D=i+196|0;E=i+192|0;F=i+188|0;G=i+184|0;H=i+180|0;I=i+176|0;J=i+172|0;K=i+168|0;L=i+164|0;M=i+160|0;N=i+156|0;O=i+152|0;P=i+148|0;Q=i+144|0;R=i+140|0;S=i+136|0;T=i+132|0;U=i+128|0;V=i+124|0;W=i+120|0;X=i+116|0;Y=i+112|0;Z=i+108|0;_=i+104|0;$=i+100|0;aa=i+96|0;ba=i+92|0;ca=i+88|0;da=i+84|0;ea=i+80|0;fa=i+76|0;ga=i+72|0;ha=i+68|0;ia=i+64|0;ja=i+60|0;ka=i+56|0;la=i+52|0;ma=i+48|0;na=i+44|0;oa=i+40|0;pa=i+36|0;qa=i+32|0;ra=i+28|0;sa=i+24|0;ta=i+20|0;ua=i+16|0;va=i+12|0;wa=i+8|0;xa=i+4|0;ya=i;c[ta>>2]=a;c[ua>>2]=b;c[va>>2]=e;c[wa>>2]=f;c[xa>>2]=g;c[ya>>2]=h;h=c[ua>>2]|0;ua=c[va>>2]|0;va=c[wa>>2]|0;wa=c[xa>>2]|0;xa=c[ya>>2]|0;c[j>>2]=c[ta>>2];c[k>>2]=h;c[m>>2]=ua;c[n>>2]=va;c[o>>2]=wa;c[p>>2]=xa;c[q>>2]=0;c[r>>2]=2;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=c[(c[j>>2]|0)+4>>2];c[y>>2]=c[(c[j>>2]|0)+12>>2];c[z>>2]=c[(c[j>>2]|0)+16>>2];c[A>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[B>>2]=c[(c[j>>2]|0)+8>>2];c[C>>2]=(c[B>>2]|0)+(c[y>>2]|0);c[D>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[E>>2]=c[q>>2]|0?7:6;c[F>>2]=c[c[m>>2]>>2];c[G>>2]=c[(c[m>>2]|0)+4>>2];c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[A>>2]|0)&1);while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[H>>2]=0;c[I>>2]=0;c[J>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[t>>2]|0)-(c[x>>2]|0);c[L>>2]=(c[K>>2]|0)+1-(c[F>>2]|0);c[M>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[N>>2]=(c[M>>2]|0)+(c[L>>2]|0);if(!((((c[L>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[L>>2]|0)|0)>>>0>=3:0)|0?(q=Bk((c[t>>2]|0)+1|0)|0,(q|0)==(Bk(c[N>>2]|0)|0)):0)?(c[O>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[H>>2]=(Lm((c[t>>2]|0)+1+4|0,(c[N>>2]|0)+4|0,c[v>>2]|0,c[O>>2]|0,c[A>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[P>>2]=99999999;c[Q>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,P)|0;if((c[Q>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[H>>2]=c[Q>>2];c[J>>2]=c[t>>2];c[I>>2]=c[P>>2];}if((c[H>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[R>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[S>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[T>>2]=(c[S>>2]|0)+(c[R>>2]|0),((c[R>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[R>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[T>>2]|0)|0)):0)?(c[U>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[V>>2]=(Lm((c[t>>2]|0)+4|0,(c[T>>2]|0)+4|0,c[v>>2]|0,c[U>>2]|0,c[A>>2]|0)|0)+4,c[W>>2]=(c[V>>2]|0)*3,q=(c[H>>2]|0)*3|0,c[X>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[V>>2]|0)>>>0>=4):0)?(c[W>>2]|0)>(c[X>>2]|0):0){c[H>>2]=c[V>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[Y>>2]=99999999;c[Z>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,Y)|0;q=c[Z>>2]<<2;c[_>>2]=q-(Mm((c[Y>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[$>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+4;if((c[Z>>2]|0)>>>0>=4?(c[_>>2]|0)>(c[$>>2]|0):0){c[H>>2]=c[Z>>2];c[I>>2]=c[Y>>2];c[J>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[aa>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[ba>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[ca>>2]=(c[ba>>2]|0)+(c[aa>>2]|0),((c[aa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[aa>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[ca>>2]|0)|0)):0)?(c[da>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[ea>>2]=(Lm((c[t>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[v>>2]|0,c[da>>2]|0,c[A>>2]|0)|0)+4,c[fa>>2]=c[ea>>2]<<2,q=c[H>>2]<<2,c[ga>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[ea>>2]|0)>>>0>=4):0)?(c[fa>>2]|0)>(c[ga>>2]|0):0){c[H>>2]=c[ea>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[ha>>2]=99999999;c[ia>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,ha)|0;q=c[ia>>2]<<2;c[ja>>2]=q-(Mm((c[ha>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[ka>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+7;if((c[ia>>2]|0)>>>0<4)break a;if((c[ja>>2]|0)<=(c[ka>>2]|0))break a;c[H>>2]=c[ia>>2];c[I>>2]=c[ha>>2];c[J>>2]=c[t>>2];}}while(0);if(c[I>>2]|0){c[la>>2]=(c[J>>2]|0)-(c[x>>2]|0)-((c[I>>2]|0)-2);c[ma>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?(c[B>>2]|0)+(c[la>>2]|0)|0:(c[x>>2]|0)+(c[la>>2]|0)|0;c[na>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[D>>2]|0:c[A>>2]|0;while(1){if((c[J>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;if((c[ma>>2]|0)>>>0<=(c[na>>2]|0)>>>0)break;if((d[(c[J>>2]|0)+-1>>0]|0|0)!=(d[(c[ma>>2]|0)+-1>>0]|0|0))break;c[J>>2]=(c[J>>2]|0)+-1;c[ma>>2]=(c[ma>>2]|0)+-1;c[H>>2]=(c[H>>2]|0)+1;}c[G>>2]=c[F>>2];c[F>>2]=(c[I>>2]|0)-2;}}c[oa>>2]=(c[J>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[oa>>2]|0,c[u>>2]|0,c[I>>2]|0,(c[H>>2]|0)-3|0);q=(c[J>>2]|0)+(c[H>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if((c[t>>2]|0)>>>0>(c[w>>2]|0)>>>0)break;c[pa>>2]=(c[t>>2]|0)-(c[x>>2]|0)-(c[G>>2]|0);c[qa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[ra>>2]=(c[qa>>2]|0)+(c[pa>>2]|0);if(!(((c[pa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[pa>>2]|0)|0)>>>0>=3:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk(c[ra>>2]|0)|0))break;c[sa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0;c[H>>2]=(Lm((c[t>>2]|0)+4|0,(c[ra>>2]|0)+4|0,c[v>>2]|0,c[sa>>2]|0,c[A>>2]|0)|0)+4;c[I>>2]=c[G>>2];c[G>>2]=c[F>>2];c[F>>2]=c[I>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[H>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[H>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[F>>2];c[(c[m>>2]|0)+4>>2]=c[G>>2];l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function im(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;i=l;l=l+288|0;j=i+272|0;k=i+268|0;m=i+264|0;n=i+260|0;o=i+256|0;p=i+252|0;q=i+248|0;r=i+244|0;s=i+240|0;t=i+236|0;u=i+232|0;v=i+228|0;w=i+224|0;x=i+220|0;y=i+216|0;z=i+212|0;A=i+208|0;B=i+204|0;C=i+200|0;D=i+196|0;E=i+192|0;F=i+188|0;G=i+184|0;H=i+180|0;I=i+176|0;J=i+172|0;K=i+168|0;L=i+164|0;M=i+160|0;N=i+156|0;O=i+152|0;P=i+148|0;Q=i+144|0;R=i+140|0;S=i+136|0;T=i+132|0;U=i+128|0;V=i+124|0;W=i+120|0;X=i+116|0;Y=i+112|0;Z=i+108|0;_=i+104|0;$=i+100|0;aa=i+96|0;ba=i+92|0;ca=i+88|0;da=i+84|0;ea=i+80|0;fa=i+76|0;ga=i+72|0;ha=i+68|0;ia=i+64|0;ja=i+60|0;ka=i+56|0;la=i+52|0;ma=i+48|0;na=i+44|0;oa=i+40|0;pa=i+36|0;qa=i+32|0;ra=i+28|0;sa=i+24|0;ta=i+20|0;ua=i+16|0;va=i+12|0;wa=i+8|0;xa=i+4|0;ya=i;c[ta>>2]=a;c[ua>>2]=b;c[va>>2]=e;c[wa>>2]=f;c[xa>>2]=g;c[ya>>2]=h;h=c[ua>>2]|0;ua=c[va>>2]|0;va=c[wa>>2]|0;wa=c[xa>>2]|0;xa=c[ya>>2]|0;c[j>>2]=c[ta>>2];c[k>>2]=h;c[m>>2]=ua;c[n>>2]=va;c[o>>2]=wa;c[p>>2]=xa;c[q>>2]=1;c[r>>2]=2;c[s>>2]=c[o>>2];c[t>>2]=c[s>>2];c[u>>2]=c[s>>2];c[v>>2]=(c[s>>2]|0)+(c[p>>2]|0);c[w>>2]=(c[v>>2]|0)+-8;c[x>>2]=c[(c[j>>2]|0)+4>>2];c[y>>2]=c[(c[j>>2]|0)+12>>2];c[z>>2]=c[(c[j>>2]|0)+16>>2];c[A>>2]=(c[x>>2]|0)+(c[y>>2]|0);c[B>>2]=c[(c[j>>2]|0)+8>>2];c[C>>2]=(c[B>>2]|0)+(c[y>>2]|0);c[D>>2]=(c[B>>2]|0)+(c[z>>2]|0);c[E>>2]=c[q>>2]|0?7:6;c[F>>2]=c[c[m>>2]>>2];c[G>>2]=c[(c[m>>2]|0)+4>>2];c[(c[j>>2]|0)+28>>2]=c[(c[j>>2]|0)+24>>2];c[t>>2]=(c[t>>2]|0)+((c[t>>2]|0)==(c[A>>2]|0)&1);while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break;c[H>>2]=0;c[I>>2]=0;c[J>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[t>>2]|0)-(c[x>>2]|0);c[L>>2]=(c[K>>2]|0)+1-(c[F>>2]|0);c[M>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[N>>2]=(c[M>>2]|0)+(c[L>>2]|0);if(!((((c[L>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[L>>2]|0)|0)>>>0>=3:0)|0?(q=Bk((c[t>>2]|0)+1|0)|0,(q|0)==(Bk(c[N>>2]|0)|0)):0)?(c[O>>2]=(c[L>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[H>>2]=(Lm((c[t>>2]|0)+1+4|0,(c[N>>2]|0)+4|0,c[v>>2]|0,c[O>>2]|0,c[A>>2]|0)|0)+4,!(c[r>>2]|0)):0)){c[P>>2]=99999999;c[Q>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,P)|0;if((c[Q>>2]|0)>>>0>(c[H>>2]|0)>>>0){c[H>>2]=c[Q>>2];c[J>>2]=c[t>>2];c[I>>2]=c[P>>2];}if((c[H>>2]|0)>>>0<4){c[t>>2]=(c[t>>2]|0)+(((c[t>>2]|0)-(c[u>>2]|0)>>8)+1);continue;}a:do{if((c[r>>2]|0)>>>0>=1)while(1){if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[R>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[S>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[T>>2]=(c[S>>2]|0)+(c[R>>2]|0),((c[R>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[R>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[T>>2]|0)|0)):0)?(c[U>>2]=(c[R>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[V>>2]=(Lm((c[t>>2]|0)+4|0,(c[T>>2]|0)+4|0,c[v>>2]|0,c[U>>2]|0,c[A>>2]|0)|0)+4,c[W>>2]=(c[V>>2]|0)*3,q=(c[H>>2]|0)*3|0,c[X>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[V>>2]|0)>>>0>=4):0)?(c[W>>2]|0)>(c[X>>2]|0):0){c[H>>2]=c[V>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[Y>>2]=99999999;c[Z>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,Y)|0;q=c[Z>>2]<<2;c[_>>2]=q-(Mm((c[Y>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[$>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+4;if((c[Z>>2]|0)>>>0>=4?(c[_>>2]|0)>(c[$>>2]|0):0){c[H>>2]=c[Z>>2];c[I>>2]=c[Y>>2];c[J>>2]=c[t>>2];continue;}if((c[r>>2]|0)!=2)break a;if((c[t>>2]|0)>>>0>=(c[w>>2]|0)>>>0)break a;c[t>>2]=(c[t>>2]|0)+1;c[K>>2]=(c[K>>2]|0)+1;if((((c[I>>2]|0?(c[aa>>2]=(c[K>>2]|0)-(c[F>>2]|0),c[ba>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0,c[ca>>2]=(c[ba>>2]|0)+(c[aa>>2]|0),((c[aa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[aa>>2]|0)|0)>>>0>=3:0)|0):0)?(q=Bk(c[t>>2]|0)|0,(q|0)==(Bk(c[ca>>2]|0)|0)):0)?(c[da>>2]=(c[aa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0,c[ea>>2]=(Lm((c[t>>2]|0)+4|0,(c[ca>>2]|0)+4|0,c[v>>2]|0,c[da>>2]|0,c[A>>2]|0)|0)+4,c[fa>>2]=c[ea>>2]<<2,q=c[H>>2]<<2,c[ga>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+1,(c[ea>>2]|0)>>>0>=4):0)?(c[fa>>2]|0)>(c[ga>>2]|0):0){c[H>>2]=c[ea>>2];c[I>>2]=0;c[J>>2]=c[t>>2];}c[ha>>2]=99999999;c[ia>>2]=tc[c[E>>2]&7](c[j>>2]|0,c[n>>2]|0,c[t>>2]|0,c[v>>2]|0,ha)|0;q=c[ia>>2]<<2;c[ja>>2]=q-(Mm((c[ha>>2]|0)+1|0)|0);q=c[H>>2]<<2;c[ka>>2]=q-(Mm((c[I>>2]|0)+1|0)|0)+7;if((c[ia>>2]|0)>>>0<4)break a;if((c[ja>>2]|0)<=(c[ka>>2]|0))break a;c[H>>2]=c[ia>>2];c[I>>2]=c[ha>>2];c[J>>2]=c[t>>2];}}while(0);if(c[I>>2]|0){c[la>>2]=(c[J>>2]|0)-(c[x>>2]|0)-((c[I>>2]|0)-2);c[ma>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?(c[B>>2]|0)+(c[la>>2]|0)|0:(c[x>>2]|0)+(c[la>>2]|0)|0;c[na>>2]=(c[la>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[D>>2]|0:c[A>>2]|0;while(1){if((c[J>>2]|0)>>>0<=(c[u>>2]|0)>>>0)break;if((c[ma>>2]|0)>>>0<=(c[na>>2]|0)>>>0)break;if((d[(c[J>>2]|0)+-1>>0]|0|0)!=(d[(c[ma>>2]|0)+-1>>0]|0|0))break;c[J>>2]=(c[J>>2]|0)+-1;c[ma>>2]=(c[ma>>2]|0)+-1;c[H>>2]=(c[H>>2]|0)+1;}c[G>>2]=c[F>>2];c[F>>2]=(c[I>>2]|0)-2;}}c[oa>>2]=(c[J>>2]|0)-(c[u>>2]|0);Nm(c[k>>2]|0,c[oa>>2]|0,c[u>>2]|0,c[I>>2]|0,(c[H>>2]|0)-3|0);q=(c[J>>2]|0)+(c[H>>2]|0)|0;c[t>>2]=q;c[u>>2]=q;while(1){if((c[t>>2]|0)>>>0>(c[w>>2]|0)>>>0)break;c[pa>>2]=(c[t>>2]|0)-(c[x>>2]|0)-(c[G>>2]|0);c[qa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[B>>2]|0:c[x>>2]|0;c[ra>>2]=(c[qa>>2]|0)+(c[pa>>2]|0);if(!(((c[pa>>2]|0)>>>0>(c[z>>2]|0)>>>0?((c[y>>2]|0)-1-(c[pa>>2]|0)|0)>>>0>=3:0)|0))break;q=Bk(c[t>>2]|0)|0;if((q|0)!=(Bk(c[ra>>2]|0)|0))break;c[sa>>2]=(c[pa>>2]|0)>>>0<(c[y>>2]|0)>>>0?c[C>>2]|0:c[v>>2]|0;c[H>>2]=(Lm((c[t>>2]|0)+4|0,(c[ra>>2]|0)+4|0,c[v>>2]|0,c[sa>>2]|0,c[A>>2]|0)|0)+4;c[I>>2]=c[G>>2];c[G>>2]=c[F>>2];c[F>>2]=c[I>>2];Nm(c[k>>2]|0,0,c[u>>2]|0,0,(c[H>>2]|0)-3|0);c[t>>2]=(c[t>>2]|0)+(c[H>>2]|0);c[u>>2]=c[t>>2];}}c[c[m>>2]>>2]=c[F>>2];c[(c[m>>2]|0)+4>>2]=c[G>>2];l=i;return(c[v>>2]|0)-(c[u>>2]|0)|0;}function DC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;f=l;l=l+80|0;g=f+56|0;h=f+40|0;i=f+28|0;j=f+12|0;k=f;m=f+24|0;a:do{if((d-b|0)>2?(a[b>>0]|0)==85:0){switch(a[b+1>>0]|0){case 116:{c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;RB(h,19476,AB(19476)|0);IB(g,h);n=e+4|0;o=c[n>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){KB(o,g);c[n>>2]=(c[n>>2]|0)+24;}else LB(e,g);QA(g);iB(h);o=b+2|0;if((o|0)==(d|0)){p=c[n>>2]|0;q=0;while(1){if((q|0)==-1)break;r=q+-1|0;QA(p+(r*24|0)|0);q=r;}c[n>>2]=p+-24;s=b;break a;}if(((a[o>>0]|0)+-48|0)>>>0<10){q=b+3|0;while(1){if((q|0)==(d|0)){t=d;break;}if(((a[q>>0]|0)+-48|0)>>>0>=10){t=q;break;}q=q+1|0;}MC((c[n>>2]|0)+-24|0,o,t);u=t;}else u=o;NC((c[n>>2]|0)+-24|0,39);if((u|0)!=(d|0)?(a[u>>0]|0)==95:0){s=u+1|0;break a;}q=c[n>>2]|0;p=0;while(1){if((p|0)==-1)break;r=p+-1|0;QA(q+(r*24|0)|0);p=r;}c[n>>2]=q+-24;s=b;break a;break;}case 108:break;default:{s=b;break a;}}c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;RB(i,19485,AB(19485)|0);IB(g,i);p=e+4|0;o=c[p>>2]|0;if(o>>>0<(c[e+8>>2]|0)>>>0){KB(o,g);c[p>>2]=(c[p>>2]|0)+24;}else LB(e,g);QA(g);iB(i);o=b+2|0;do{if((a[o>>0]|0)!=118){r=mB(o,d,e)|0;if((r|0)==(o|0)){v=c[p>>2]|0;w=0;while(1){if((w|0)==-1)break;x=w+-1|0;QA(v+(x*24|0)|0);w=x;}c[p>>2]=v+-24;s=b;break a;}w=c[p>>2]|0;if(((w-(c[e>>2]|0)|0)/24|0)>>>0<2){s=b;break a;}FB(j,w+-24|0);w=c[p>>2]|0;x=0;while(1){if((x|0)==-1)break;y=x+-1|0;QA(w+(y*24|0)|0);x=y;}c[p>>2]=w+-24;x=j+11|0;v=a[x>>0]|0;y=v<<24>>24<0;z=j+4|0;TA(w+-48|0,y?c[j>>2]|0:j,y?c[z>>2]|0:v&255)|0;v=r;while(1){y=mB(v,d,e)|0;if((y|0)==(v|0)){A=54;break;}B=c[p>>2]|0;if(((B-(c[e>>2]|0)|0)/24|0)>>>0<2){A=82;break;}FB(k,B+-24|0);if((a[x>>0]|0)<0){B=c[j>>2]|0;a[g>>0]=0;cB(B,g);c[z>>2]=0;}else{a[g>>0]=0;cB(j,g);a[x>>0]=0;}TB(j);c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];B=0;while(1){if((B|0)==3)break;c[k+(B<<2)>>2]=0;B=B+1|0;}iB(k);B=c[p>>2]|0;C=0;while(1){if((C|0)==-1)break;D=C+-1|0;QA(B+(D*24|0)|0);C=D;}c[p>>2]=B+-24;C=a[x>>0]|0;if((C<<24>>24<0?c[z>>2]|0:C&255)|0){qB(B+-48|0,18897)|0;C=a[x>>0]|0;D=C<<24>>24<0;TA((c[p>>2]|0)+-24|0,D?c[j>>2]|0:j,D?c[z>>2]|0:C&255)|0;}v=y;}if((A|0)==54){qB((c[p>>2]|0)+-24|0,18673)|0;iB(j);E=v;break;}else if((A|0)==82){iB(j);s=b;break a;}}else{NC((c[p>>2]|0)+-24|0,41);E=b+3|0;}}while(0);if((E|0)!=(d|0)?(a[E>>0]|0)==69:0){o=E+1|0;if((o|0)==(d|0)){q=c[p>>2]|0;n=0;while(1){if((n|0)==-1)break;z=n+-1|0;QA(q+(z*24|0)|0);n=z;}c[p>>2]=q+-24;s=b;break;}if(((a[o>>0]|0)+-48|0)>>>0<10){n=E+2|0;while(1){if((n|0)==(d|0)){F=d;break;}if(((a[n>>0]|0)+-48|0)>>>0>=10){F=n;break;}n=n+1|0;}n=(c[p>>2]|0)+-24|0;if((a[n+11>>0]|0)<0)G=c[n>>2]|0;else G=n;c[m>>2]=G+7;c[g>>2]=c[m>>2];OC(n,g,o,F)|0;H=F;}else H=o;if((H|0)!=(d|0)?(a[H>>0]|0)==95:0){s=H+1|0;break;}n=c[p>>2]|0;q=0;while(1){if((q|0)==-1)break;z=q+-1|0;QA(n+(z*24|0)|0);q=z;}c[p>>2]=n+-24;s=b;break;}q=c[p>>2]|0;o=0;while(1){if((o|0)==-1)break;z=o+-1|0;QA(q+(z*24|0)|0);o=z;}c[p>>2]=q+-24;s=b;}else s=b;}while(0);l=f;return s|0;}function EC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+32|0;g=f;a:do{if((d-b|0)>1)do{switch(a[b>>0]|0){case 97:{switch(a[b+1>>0]|0){case 97:{FC(g,18975);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 110:case 100:{GC(g,18986);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 78:{FC(g,18996);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 83:{GC(g,19007);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 99:{switch(a[b+1>>0]|0){case 108:{FC(g,19017);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 109:{GC(g,19028);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 111:{GC(g,19038);h=e+4|0;i=c[h>>2]|0;if(i>>>0<(c[e+8>>2]|0)>>>0){KB(i,g);c[h>>2]=(c[h>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 118:{h=e+63|0;i=a[h>>0]|0;a[h>>0]=0;k=b+2|0;m=mB(k,d,e)|0;a[h>>0]=i;if((m|0)==(k|0)){j=b;break a;}k=c[e+4>>2]|0;if((c[e>>2]|0)==(k|0)){j=b;break a;}pB(k+-24|0,0,19048)|0;a[e+60>>0]=1;j=m;break a;break;}default:{j=b;break a;}}break;}case 100:{switch(a[b+1>>0]|0){case 97:{HC(g,19058);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 101:{GC(g,19076);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 108:{IC(g);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 118:{GC(g,19086);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 86:{FC(g,19096);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 101:{switch(a[b+1>>0]|0){case 111:{GC(g,19107);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 79:{FC(g,19117);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 113:{FC(g,19128);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 103:{switch(a[b+1>>0]|0){case 101:{FC(g,19139);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 116:{GC(g,19150);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 105:{if((a[b+1>>0]|0)!=120){j=b;break a;}FC(g,19160);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 108:{switch(a[b+1>>0]|0){case 101:{FC(g,19171);m=e+4|0;k=c[m>>2]|0;if(k>>>0<(c[e+8>>2]|0)>>>0){KB(k,g);c[m>>2]=(c[m>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 105:{m=b+2|0;k=GB(m,d,e)|0;if((k|0)==(m|0)){j=b;break a;}m=c[e+4>>2]|0;if((c[e>>2]|0)==(m|0)){j=b;break a;}pB(m+-24|0,0,19182)|0;j=k;break a;break;}case 115:{FC(g,19194);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 83:{JC(g,19205);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 116:{GC(g,19217);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 109:{switch(a[b+1>>0]|0){case 105:{GC(g,19227);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 73:{FC(g,19237);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 108:{GC(g,19076);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 76:{FC(g,19248);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 109:{FC(g,19259);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 110:{switch(a[b+1>>0]|0){case 97:{KC(g,19270);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 101:{FC(g,19285);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 103:{GC(g,19227);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 116:{GC(g,19296);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 119:{LC(g,19306);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 111:{switch(a[b+1>>0]|0){case 111:{FC(g,19319);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 114:{GC(g,19330);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 82:{FC(g,19340);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 112:{switch(a[b+1>>0]|0){case 109:{JC(g,19351);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 108:{GC(g,19363);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 76:{FC(g,19373);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 112:{FC(g,19384);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 115:{GC(g,19363);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 116:{FC(g,19395);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 113:{if((a[b+1>>0]|0)!=117){j=b;break a;}GC(g,19406);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 114:{switch(a[b+1>>0]|0){case 109:{GC(g,19416);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 77:{FC(g,19426);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 115:{FC(g,19437);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}case 83:{JC(g,19448);k=e+4|0;m=c[k>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[k>>2]=(c[k>>2]|0)+24;}else LB(e,g);QA(g);j=b+2|0;break a;break;}default:{j=b;break a;}}break;}case 118:{if(((a[b+1>>0]|0)+-48|0)>>>0>=10){j=b;break a;}k=b+2|0;m=GB(k,d,e)|0;if((m|0)==(k|0)){j=b;break a;}k=c[e+4>>2]|0;if((c[e>>2]|0)==(k|0)){j=b;break a;}pB(k+-24|0,0,19048)|0;j=m;break a;break;}default:{j=b;break a;}}}while(0);else j=b;}while(0);l=f;return j|0;}function FC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,10);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function GC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,9);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function HC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,17);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function IC(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,19460,15);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function JC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,11);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function KC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,14);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function LC(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,12);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function MC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+16|0;g=d;h=f;i=b+11|0;j=a[i>>0]|0;k=j<<24>>24<0;if(k){m=c[b+4>>2]|0;n=(c[b+8>>2]&2147483647)+-1|0;}else{m=j&255;n=10;}o=e-g|0;do{if(o|0){if(k){p=c[b>>2]|0;q=c[b+4>>2]|0;}else{p=b;q=j&255;}if(PC(d,p,p+q|0)|0){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;QC(h,d,e);r=a[h+11>>0]|0;s=r<<24>>24<0;TA(b,s?c[h>>2]|0:h,s?c[h+4>>2]|0:r&255)|0;iB(h);break;}if((n-m|0)>>>0<o>>>0)RC(b,n,m+o-n|0,m,m,0);if((a[i>>0]|0)<0)t=c[b>>2]|0;else t=b;r=e+(m-g)|0;s=t+m|0;u=d;while(1){if((u|0)==(e|0))break;cB(s,u);s=s+1|0;u=u+1|0;}a[h>>0]=0;cB(t+r|0,h);u=m+o|0;if((a[i>>0]|0)<0){c[b+4>>2]=u;break;}else{a[i>>0]=u;break;}}}while(0);l=f;return;}function NC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;e=l;l=l+16|0;f=e;g=e+1|0;a[f>>0]=d;d=b+11|0;h=a[d>>0]|0;i=h<<24>>24<0;if(i){j=c[b+4>>2]|0;k=(c[b+8>>2]&2147483647)+-1|0;}else{j=h&255;k=10;}if((j|0)==(k|0)){RC(b,k,1,k,k,0);if((a[d>>0]|0)<0)m=8;else m=7;}else if(i)m=8;else m=7;if((m|0)==7){a[d>>0]=j+1;n=b;}else if((m|0)==8){m=c[b>>2]|0;c[b+4>>2]=j+1;n=m;}m=n+j|0;cB(m,f);a[g>>0]=0;cB(m+1|0,g);l=e;return;}function OC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;g=l;l=l+32|0;h=g+16|0;i=g+4|0;j=g;k=b+11|0;m=a[k>>0]|0;n=m<<24>>24<0;if(n)o=c[b>>2]|0;else o=b;p=c[d>>2]|0;d=p-o|0;o=f-e|0;do{if(!o){q=m;r=27;}else{if(n){s=c[b>>2]|0;t=c[b+4>>2]|0;}else{s=b;t=m&255;}if(PC(e,s,s+t|0)|0){c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;QC(i,e,f);c[j>>2]=p;u=a[i+11>>0]|0;v=u<<24>>24<0;w=v?c[i>>2]|0:i;x=w+(v?c[i+4>>2]|0:u&255)|0;c[h>>2]=c[j>>2];u=OC(b,h,w,x)|0;iB(i);y=u;break;}u=a[k>>0]|0;x=u<<24>>24<0;if(x){z=c[b+4>>2]|0;A=(c[b+8>>2]&2147483647)+-1|0;}else{z=u&255;A=10;}if((A-z|0)>>>0>=o>>>0){if(x)B=c[b>>2]|0;else B=b;x=z-d|0;if(!x)C=B;else{u=B+d|0;wC(u+o|0,u,x)|0;C=B;}}else{RC(b,A,z+o-A|0,z,d,o);C=c[b>>2]|0;}x=z+o|0;if((a[k>>0]|0)<0)c[b+4>>2]=x;else a[k>>0]=x;a[h>>0]=0;cB(C+x|0,h);x=e;u=C+d|0;while(1){if((x|0)==(f|0))break;cB(u,x);x=x+1|0;u=u+1|0;}q=a[k>>0]|0;r=27;}}while(0);if((r|0)==27){if(q<<24>>24<0)D=c[b>>2]|0;else D=b;y=D+d|0;}l=g;return y|0;}function PC(a,b,c){a=a|0;b=b|0;c=c|0;return b>>>0<=a>>>0&a>>>0<c>>>0|0;}function QC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;f=l;l=l+16|0;g=d;h=f;i=e-g|0;if(i>>>0>4294967279)eB(b);if(i>>>0<11){a[b+11>>0]=i;j=b;}else{k=i+16&-16;m=fB(k)|0;c[b>>2]=m;c[b+8>>2]=k|-2147483648;c[b+4>>2]=i;j=m;}m=e-g|0;g=d;d=j;while(1){if((g|0)==(e|0))break;cB(d,g);g=g+1|0;d=d+1|0;}a[h>>0]=0;cB(j+m|0,h);l=f;return;}function RC(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;if((-17-d|0)>>>0<e>>>0)eB(b);if((a[b+11>>0]|0)<0)i=c[b>>2]|0;else i=b;if(d>>>0<2147483623){j=e+d|0;e=d<<1;k=j>>>0<e>>>0?e:j;l=k>>>0<11?11:k+16&-16;}else l=-17;k=fB(l)|0;if(g|0)bB(k,i,g)|0;j=f-g|0;if(j|0)bB(k+g+h|0,i+g|0,j)|0;if((d|0)!=10)gB(i);c[b>>2]=k;c[b+8>>2]=l|-2147483648;return;}function SC(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=d+11|0;f=a[e>>0]|0;g=d+4|0;a:do{if(!((f<<24>>24<0?c[g>>2]|0:f&255)|0))TC(b,d);else{h=AB(19495)|0;i=a[e>>0]|0;if((h|0)==((i<<24>>24<0?c[g>>2]|0:i&255)|0)?(BB(d,19495,h)|0)==0:0){uC(d,19507);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;RB(b,19578,AB(19578)|0);break;}h=AB(19591)|0;i=a[e>>0]|0;if((h|0)==((i<<24>>24<0?c[g>>2]|0:i&255)|0)?(BB(d,19591,h)|0)==0:0){uC(d,19604);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;RB(b,19654,AB(19654)|0);break;}h=AB(19668)|0;i=a[e>>0]|0;if((h|0)==((i<<24>>24<0?c[g>>2]|0:i&255)|0)?(BB(d,19668,h)|0)==0:0){uC(d,19681);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;RB(b,19731,AB(19731)|0);break;}h=AB(19745)|0;i=a[e>>0]|0;j=c[g>>2]|0;k=i&255;do{if((h|0)==((i<<24>>24<0?j:k)|0)){if(!(BB(d,19745,h)|0)){uC(d,19759);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;RB(b,19810,AB(19810)|0);break a;}else{l=a[e>>0]|0;m=l&255;n=l;o=c[g>>2]|0;break;}}else{m=k;n=i;o=j;}}while(0);j=n<<24>>24<0;i=j?c[d>>2]|0:d;k=i+(j?o:m)|0;do{if((a[k+-1>>0]|0)==62){j=1;h=k;b:while(1){p=h;c:while(1){q=p+-1|0;if((q|0)==(i|0))break b;switch(a[p+-2>>0]|0){case 60:{r=24;break c;break;}case 62:{r=25;break c;break;}default:p=q;}}if((r|0)==24){r=0;l=j+-1|0;if(!l){r=27;break;}else s=l;}else if((r|0)==25){r=0;s=j+1|0;}j=s;h=q;}if((r|0)==27){t=p+-2|0;break;};c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;h=0;while(1){if((h|0)==3)break a;c[b+(h<<2)>>2]=0;h=h+1|0;}}else t=k;}while(0);k=t;while(1){h=k+-1|0;if((h|0)==(i|0)){u=i;break;}if((a[h>>0]|0)==58){u=k;break;}else k=h;}c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;QC(b,u,t);}}while(0);return;}function TC(b,d){b=b|0;d=d|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if((a[d+11>>0]|0)<0)RB(b,c[d>>2]|0,c[d+4>>2]|0);else{c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];}return;}function UC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((a|0)!=(b|0)){e=yC(a,b,d)|0;if((e|0)==(a|0))f=AC(a,b,d)|0;else f=e;if((f|0)!=(a|0)?(e=c[d+4>>2]|0,(c[d>>2]|0)!=(e|0)):0){pB(e+-24|0,0,18745)|0;g=f;}else g=a;}else g=a;return g|0;}function VC(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;b=0;while(1){if((b|0)==3)break;c[a+(b<<2)>>2]=0;b=b+1|0;}b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function WC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=l;l=l+32|0;d=b;e=a+4|0;f=(((c[e>>2]|0)-(c[a>>2]|0)|0)/24|0)+1|0;g=XC(a)|0;if(g>>>0<f>>>0)Wz(a);else{h=c[a>>2]|0;i=((c[a+8>>2]|0)-h|0)/24|0;j=i<<1;YC(d,i>>>0<g>>>1>>>0?j>>>0<f>>>0?f:j:g,((c[e>>2]|0)-h|0)/24|0,a+12|0);h=d+8|0;e=c[h>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;VC(e);c[h>>2]=e+24;ZC(a,d);_C(d);l=b;return;}}function XC(a){a=a|0;return 178956970;}function YC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+12|0;c[f>>2]=0;c[a+16>>2]=e;if(!b)g=0;else g=$C(e,b)|0;c[a>>2]=g;e=g+(d*24|0)|0;c[a+8>>2]=e;c[a+4>>2]=e;c[f>>2]=g+(b*24|0);return;}function ZC(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[a>>2]|0;e=a+4|0;f=b+4|0;g=c[e>>2]|0;while(1){if((g|0)==(d|0))break;h=g+-24|0;KB((c[f>>2]|0)+-24|0,h);c[f>>2]=(c[f>>2]|0)+-24;g=h;}g=c[a>>2]|0;c[a>>2]=c[f>>2];c[f>>2]=g;g=b+8|0;d=c[e>>2]|0;c[e>>2]=c[g>>2];c[g>>2]=d;d=a+8|0;a=b+12|0;g=c[d>>2]|0;c[d>>2]=c[a>>2];c[a>>2]=g;c[b>>2]=c[f>>2];return;}function _C(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+4>>2]|0;d=a+8|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;f=e+-24|0;c[d>>2]=f;QA(f);}d=c[a>>2]|0;if(d|0)hB(c[a+16>>2]|0,d,((c[a+12>>2]|0)-d|0)/24|0);return;}function $C(a,b){a=a|0;b=b|0;return aD(c[a>>2]|0,b*24|0)|0;}function aD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=$A(b)|0;b=a+4096|0;e=c[b>>2]|0;if((a+4096-e|0)>>>0<d>>>0)f=Cy(d)|0;else{c[b>>2]=e+d;f=e;}return f|0;}function bD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;g=l;l=l+48|0;h=g+24|0;i=g;j=g+12|0;k=QB(b,d)|0;if(!((k|0)==(b|0)|(k|0)==(d|0))?(a[k>>0]|0)==69:0){d=e+11|0;m=a[d>>0]|0;n=e+4|0;do{if((m<<24>>24<0?c[n>>2]|0:m&255)>>>0<=3){o=f+4|0;p=c[o>>2]|0;if(p>>>0<(c[f+8>>2]|0)>>>0){c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;VC(p);c[o>>2]=(c[o>>2]|0)+24;break;}else{WC(f);break;}}else{UB(j,18675,e);qB(j,18673)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];o=0;while(1){if((o|0)==3)break;c[j+(o<<2)>>2]=0;o=o+1|0;}IB(h,i);o=f+4|0;p=c[o>>2]|0;if(p>>>0<(c[f+8>>2]|0)>>>0){KB(p,h);c[o>>2]=(c[o>>2]|0)+24;}else LB(f,h);QA(h);iB(i);iB(j);}}while(0);j=f+4|0;if((a[b>>0]|0)==110){NC((c[j>>2]|0)+-24|0,45);q=b+1|0;}else q=b;MC((c[j>>2]|0)+-24|0,q,k);q=a[d>>0]|0;d=q<<24>>24<0;f=d?c[n>>2]|0:q&255;if(f>>>0<4)TA((c[j>>2]|0)+-24|0,d?c[e>>2]|0:e,f)|0;r=k+1|0;}else r=b;l=g;return r|0;}function cD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,4);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function dD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;f=l;l=l+64|0;i=f+24|0;j=f+60|0;k=f;m=f+48|0;a:do{if((d-b|0)>>>0>8){n=0;o=j;while(1){p=a[b+n>>0]|0;q=p<<24>>24;if((n|0)==8){r=6;break;}if(!(Qz(q)|0))break;s=a[b+(n|1)>>0]|0;a[o>>0]=(((q+-48|0)>>>0<10?0:9)+q<<4)+s+((s+-48|0)>>>0<10?208:169);n=n+2|0;o=o+1|0;}do{if((r|0)==6){if(p<<24>>24==69){b:do{if((o|0)!=(j|0)){n=o;s=j;while(1){q=n+-1|0;if(s>>>0>=q>>>0)break b;t=a[s>>0]|0;a[s>>0]=a[q>>0]|0;a[q>>0]=t;n=q;s=s+1|0;}}}while(0);c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;h[i>>3]=+g[j>>2];s=bz(k,24,19987,i)|0;if(s>>>0>23)break;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;RB(m,k,s);IB(i,m);s=e+4|0;n=c[s>>2]|0;if(n>>>0<(c[e+8>>2]|0)>>>0){KB(n,i);c[s>>2]=(c[s>>2]|0)+24;}else LB(e,i);QA(i);iB(m);u=b+9|0;}else u=b;v=u;break a;}}while(0);v=b;}else v=b;}while(0);l=f;return v|0;}function eD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+80|0;g=f+40|0;i=f+32|0;j=f;k=f+64|0;a:do{if((d-b|0)>>>0>16){m=0;n=i;while(1){o=a[b+m>>0]|0;p=o<<24>>24;if((m|0)==16){q=6;break;}if(!(Qz(p)|0))break;r=a[b+(m|1)>>0]|0;a[n>>0]=(((p+-48|0)>>>0<10?0:9)+p<<4)+r+((r+-48|0)>>>0<10?208:169);m=m+2|0;n=n+1|0;}do{if((q|0)==6){if(o<<24>>24==69){b:do{if((n|0)!=(i|0)){m=n;r=i;while(1){p=m+-1|0;if(r>>>0>=p>>>0)break b;s=a[r>>0]|0;a[r>>0]=a[p>>0]|0;a[p>>0]=s;m=p;r=r+1|0;}}}while(0);c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[j+28>>2]=0;h[g>>3]=+h[i>>3];r=bz(j,32,19984,g)|0;if(r>>>0>31)break;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;RB(k,j,r);IB(g,k);r=e+4|0;m=c[r>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[r>>2]=(c[r>>2]|0)+24;}else LB(e,g);QA(g);iB(k);t=b+17|0;}else t=b;u=t;break a;}}while(0);u=b;}else u=b;}while(0);l=f;return u|0;}function fD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=l;l=l+96|0;g=f+48|0;i=f+40|0;j=f;k=f+72|0;a:do{if((d-b|0)>>>0>20){m=0;n=i;while(1){o=a[b+m>>0]|0;p=o<<24>>24;if((m|0)==20){q=6;break;}if(!(Qz(p)|0))break;r=a[b+(m|1)>>0]|0;a[n>>0]=(((p+-48|0)>>>0<10?0:9)+p<<4)+r+((r+-48|0)>>>0<10?208:169);m=m+2|0;n=n+1|0;}do{if((q|0)==6){if(o<<24>>24==69){b:do{if((n|0)!=(i|0)){m=n;r=i;while(1){p=m+-1|0;if(r>>>0>=p>>>0)break b;s=a[r>>0]|0;a[r>>0]=a[p>>0]|0;a[p>>0]=s;m=p;r=r+1|0;}}}while(0);r=j;m=r+40|0;do{c[r>>2]=0;r=r+4|0;}while((r|0)<(m|0));h[g>>3]=+h[i>>3];r=bz(j,40,19979,g)|0;if(r>>>0>39)break;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;RB(k,j,r);IB(g,k);r=e+4|0;m=c[r>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){KB(m,g);c[r>>2]=(c[r>>2]|0)+24;}else LB(e,g);QA(g);iB(k);t=b+21|0;}else t=b;u=t;break a;}}while(0);u=b;}else u=b;}while(0);l=f;return u|0;}function gD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,13);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function hD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;f=l;l=l+48|0;g=f+36|0;h=f+24|0;i=f+8|0;j=f;a:do{if((b|0)!=(d|0)?(a[b>>0]|0)==78:0){k=nB(b+1|0,d,g)|0;b:do{if((k|0)!=(d|0)){m=e+52|0;c[m>>2]=0;switch(a[k>>0]|0){case 82:{n=1;o=6;break;}case 79:{n=2;o=6;break;}default:p=k;}if((o|0)==6){c[m>>2]=n;p=k+1|0;}m=e+4|0;q=c[m>>2]|0;if(q>>>0<(c[e+8>>2]|0)>>>0){c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;VC(q);c[m>>2]=(c[m>>2]|0)+24;}else WC(e);if(((d-p|0)>1?(a[p>>0]|0)==83:0)?(a[p+1>>0]|0)==116:0){uC((c[m>>2]|0)+-24|0,20051);r=p+2|0;}else r=p;if((r|0)==(d|0)){q=c[m>>2]|0;s=0;while(1){if((s|0)==-1)break;t=s+-1|0;QA(q+(t*24|0)|0);s=t;}c[m>>2]=q+-24;break;}s=h+11|0;t=h+4|0;u=e+12|0;v=e+20|0;w=e+24|0;x=i+11|0;y=i+4|0;z=i+11|0;A=i+4|0;B=i+12|0;C=i+4|0;D=i+8|0;E=e+16|0;F=i+12|0;G=i+4|0;H=i+8|0;I=i+11|0;J=i+4|0;K=i+12|0;L=i+4|0;M=i+8|0;N=i+11|0;O=i+4|0;P=i+12|0;Q=i+4|0;R=i+8|0;S=i+12|0;T=i+4|0;U=i+8|0;V=0;W=r;c:while(1){X=W;d:while(1){Y=a[X>>0]|0;if(Y<<24>>24==69)break c;switch(Y<<24>>24|0){case 83:{o=23;break d;break;}case 84:{o=39;break d;break;}case 68:{o=53;break d;break;}case 73:{Y=EB(X,d,e)|0;if((Y|0)==(X|0)|(Y|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);Z=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;$=_+-1|0;QA(Z+($*24|0)|0);_=$;}c[m>>2]=Z+-24;_=a[s>>0]|0;$=_<<24>>24<0;TA(Z+-48|0,$?c[h>>2]|0:h,$?c[t>>2]|0:_&255)|0;_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;$=_+4|0;c[$>>2]=0;aa=_+8|0;c[aa>>2]=0;c[_+12>>2]=c[B>>2];c[_>>2]=c[i>>2];c[$>>2]=c[C>>2];c[aa>>2]=c[D>>2];c[D>>2]=0;c[C>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);iB(h);ba=Y;break;}case 76:{aa=X+1|0;if((aa|0)==(d|0))break b;else ba=aa;break;}default:{o=79;break d;}}X=ba;}e:do{if((o|0)==23){o=0;aa=X+1|0;if((aa|0)!=(d|0)?(a[aa>>0]|0)==116:0){o=79;break;}aa=NB(X,d,e)|0;if((aa|0)==(X|0)|(aa|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);$=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;ca=_+-1|0;QA($+(ca*24|0)|0);_=ca;}c[m>>2]=$+-24;_=$+-48|0;Y=a[_+11>>0]|0;if(Y<<24>>24<0)da=c[$+-44>>2]|0;else da=Y&255;if(!da)lD(_,h);else{UB(i,18747,h);_=a[I>>0]|0;Y=_<<24>>24<0;TA((c[m>>2]|0)+-24|0,Y?c[i>>2]|0:i,Y?c[J>>2]|0:_&255)|0;iB(i);_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;Y=_+4|0;c[Y>>2]=0;Z=_+8|0;c[Z>>2]=0;c[_+12>>2]=c[S>>2];c[_>>2]=c[i>>2];c[Y>>2]=c[T>>2];c[Z>>2]=c[U>>2];c[U>>2]=0;c[T>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);}iB(h);ea=aa;}else if((o|0)==39){o=0;Z=DB(X,d,e)|0;if((Z|0)==(X|0)|(Z|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);Y=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;ca=_+-1|0;QA(Y+(ca*24|0)|0);_=ca;}c[m>>2]=Y+-24;_=Y+-48|0;aa=a[_+11>>0]|0;if(aa<<24>>24<0)fa=c[Y+-44>>2]|0;else fa=aa&255;if(!fa)lD(_,h);else{UB(i,18747,h);_=a[z>>0]|0;aa=_<<24>>24<0;TA((c[m>>2]|0)+-24|0,aa?c[i>>2]|0:i,aa?c[A>>2]|0:_&255)|0;iB(i);}_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;aa=_+4|0;c[aa>>2]=0;$=_+8|0;c[$>>2]=0;c[_+12>>2]=c[K>>2];c[_>>2]=c[i>>2];c[aa>>2]=c[L>>2];c[$>>2]=c[M>>2];c[M>>2]=0;c[L>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);iB(h);ea=Z;}else if((o|0)==53){o=0;$=X+1|0;if(($|0)!=(d|0))switch(a[$>>0]|0){case 84:case 116:break;default:{o=79;break e;}}$=OB(X,d,e)|0;if(($|0)==(X|0)|($|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);aa=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;ca=_+-1|0;QA(aa+(ca*24|0)|0);_=ca;}c[m>>2]=aa+-24;_=aa+-48|0;Z=a[_+11>>0]|0;if(Z<<24>>24<0)ga=c[aa+-44>>2]|0;else ga=Z&255;if(!ga)lD(_,h);else{UB(i,18747,h);_=a[N>>0]|0;Z=_<<24>>24<0;TA((c[m>>2]|0)+-24|0,Z?c[i>>2]|0:i,Z?c[O>>2]|0:_&255)|0;iB(i);}_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;Z=_+4|0;c[Z>>2]=0;Y=_+8|0;c[Y>>2]=0;c[_+12>>2]=c[P>>2];c[_>>2]=c[i>>2];c[Z>>2]=c[Q>>2];c[Y>>2]=c[R>>2];c[R>>2]=0;c[Q>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);iB(h);ea=$;}}while(0);if((o|0)==79){o=0;Y=BC(X,d,e)|0;if((Y|0)==(X|0)|(Y|0)==(d|0))break b;FB(h,(c[m>>2]|0)+-24|0);Z=c[m>>2]|0;_=0;while(1){if((_|0)==-1)break;ca=_+-1|0;QA(Z+(ca*24|0)|0);_=ca;}c[m>>2]=Z+-24;_=Z+-48|0;ca=a[_+11>>0]|0;if(ca<<24>>24<0)ha=c[Z+-44>>2]|0;else ha=ca&255;if(!ha)lD(_,h);else{UB(i,18747,h);_=a[x>>0]|0;ca=_<<24>>24<0;TA((c[m>>2]|0)+-24|0,ca?c[i>>2]|0:i,ca?c[y>>2]|0:_&255)|0;iB(i);}_=(c[m>>2]|0)+-24|0;c[j>>2]=c[u>>2];vB(i,_,j);_=c[v>>2]|0;if(_>>>0<(c[w>>2]|0)>>>0){c[_>>2]=0;ca=_+4|0;c[ca>>2]=0;ia=_+8|0;c[ia>>2]=0;c[_+12>>2]=c[F>>2];c[_>>2]=c[i>>2];c[ca>>2]=c[G>>2];c[ia>>2]=c[H>>2];c[H>>2]=0;c[G>>2]=0;c[i>>2]=0;c[v>>2]=(c[v>>2]|0)+16;}else wB(E,i);RA(i);iB(h);ea=Y;}V=1;W=ea;}W=X+1|0;c[e+48>>2]=c[g>>2];if(V?(E=c[v>>2]|0,(c[e+16>>2]|0)!=(E|0)):0){G=0;while(1){if((G|0)==-1)break;H=G+-1|0;RA(E+(H<<4)|0);G=H;}c[v>>2]=E+-16;}ja=W;break a;}}while(0);ja=b;}else ja=b;}while(0);l=f;return ja|0;}function iD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;f=l;l=l+16|0;g=f;a:do{if(((((b|0)!=(d|0)?(a[b>>0]|0)==90:0)?(h=b+1|0,i=jB(h,d,e)|0,!((i|0)==(h|0)|(i|0)==(d|0))):0)?(a[i>>0]|0)==69:0)?(h=i+1|0,(h|0)!=(d|0)):0)switch(a[h>>0]|0){case 115:{j=kD(i+2|0,d)|0;k=c[e+4>>2]|0;if((c[e>>2]|0)==(k|0)){m=j;break a;}qB(k+-24|0,20034)|0;m=j;break a;break;}case 100:{j=i+2|0;if((j|0)==(d|0)){m=b;break a;}i=QB(j,d)|0;if((i|0)==(d|0)){m=b;break a;}if((a[i>>0]|0)!=95){m=b;break a;}j=i+1|0;i=MB(j,d,e)|0;k=e+4|0;if((i|0)==(j|0)){j=c[k>>2]|0;n=0;while(1){if((n|0)==-1)break;o=n+-1|0;QA(j+(o*24|0)|0);n=o;}c[k>>2]=j+-24;m=b;break a;}n=c[k>>2]|0;if(((n-(c[e>>2]|0)|0)/24|0)>>>0<2){m=b;break a;}FB(g,n+-24|0);n=c[k>>2]|0;o=0;while(1){if((o|0)==-1)break;p=o+-1|0;QA(n+(p*24|0)|0);o=p;}c[k>>2]=n+-24;qB(n+-48|0,18747)|0;o=a[g+11>>0]|0;j=o<<24>>24<0;TA((c[k>>2]|0)+-24|0,j?c[g>>2]|0:g,j?c[g+4>>2]|0:o&255)|0;iB(g);m=i;break a;break;}default:{o=MB(h,d,e)|0;if((o|0)==(h|0)){j=e+4|0;p=c[j>>2]|0;q=0;while(1){if((q|0)==-1)break;r=q+-1|0;QA(p+(r*24|0)|0);q=r;}c[j>>2]=p+-24;m=b;break a;}q=kD(o,d)|0;h=e+4|0;i=c[h>>2]|0;if(((i-(c[e>>2]|0)|0)/24|0)>>>0<2){m=q;break a;}FB(g,i+-24|0);i=c[h>>2]|0;k=0;while(1){if((k|0)==-1)break;n=k+-1|0;QA(i+(n*24|0)|0);k=n;}c[h>>2]=i+-24;qB(i+-48|0,18747)|0;k=a[g+11>>0]|0;o=k<<24>>24<0;TA((c[h>>2]|0)+-24|0,o?c[g>>2]|0:g,o?c[g+4>>2]|0:k&255)|0;iB(g);m=q;break a;}}else m=b;}while(0);l=f;return m|0;}function jD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((d-b|0)>1){if((a[b>>0]|0)==83?(a[b+1>>0]|0)==116:0){f=b+2|0;if((f|0)==(d|0)){g=0;h=d;}else{g=0;h=(a[f>>0]|0)==76?b+3|0:f;}}else{g=1;h=b;}f=BC(h,d,e)|0;d=(f|0)==(h|0);if(!(g|d)){g=c[e+4>>2]|0;if((c[e>>2]|0)==(g|0))i=b;else{pB(g+-24|0,0,18969)|0;i=f;}}else i=d?b:f;}else i=b;return i|0;}function kD(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;a:do{if((b|0)!=(c|0)){d=a[b>>0]|0;if(d<<24>>24!=95){if(((d<<24>>24)+-48|0)>>>0>=10){e=b;break;}d=b;while(1){f=d+1|0;if((f|0)==(c|0)){e=c;break a;}if(((a[f>>0]|0)+-48|0)>>>0<10)d=f;else{e=f;break a;}}}d=b+1|0;if((d|0)!=(c|0)){f=a[d>>0]|0;if(((f<<24>>24)+-48|0)>>>0<10){e=b+2|0;break;}if(f<<24>>24==95){f=b+2|0;while(1){if((f|0)==(c|0)){e=b;break a;}g=a[f>>0]|0;if(((g<<24>>24)+-48|0)>>>0>=10)break;f=f+1|0;}return(g<<24>>24==95?f+1|0:b)|0;}else e=b;}else e=b;}else e=b;}while(0);return e|0;}function lD(b,d){b=b|0;d=d|0;var e=0,f=0;if((b|0)!=(d|0)){e=a[d+11>>0]|0;f=e<<24>>24<0;vC(b,f?c[d>>2]|0:d,f?c[d+4>>2]|0:e&255);}return;}function mD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,20066,21);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function nD(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];return;}function oD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+32|0;e=d+20|0;f=d;g=a+4|0;h=((c[g>>2]|0)-(c[a>>2]|0)>>4)+1|0;i=qD(a)|0;if(i>>>0<h>>>0)Wz(a);else{j=c[a>>2]|0;k=(c[a+8>>2]|0)-j|0;m=k>>3;rD(f,k>>4>>>0<i>>>1>>>0?m>>>0<h>>>0?h:m:i,(c[g>>2]|0)-j>>4,a+12|0);j=f+8|0;g=c[j>>2]|0;nD(e,b);c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=c[e>>2];c[j>>2]=g+16;sD(a,f);tD(f);l=d;return;}}function pD(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;a:do{if((b|0)==(c|0))e=b;else switch(a[b>>0]|0){case 88:{f=b+1|0;g=SB(f,c,d)|0;if((g|0)==(f|0)|(g|0)==(c|0)){e=b;break a;}e=(a[g>>0]|0)==69?g+1|0:b;break a;break;}case 74:{g=b+1|0;if((g|0)==(c|0)){e=b;break a;}f=g;while(1){if((a[f>>0]|0)==69)break;g=pD(f,c,d)|0;if((g|0)==(f|0)){e=b;break a;}else f=g;}e=f+1|0;break a;break;}case 76:{g=b+1|0;if((g|0)!=(c|0)?(a[g>>0]|0)==90:0){g=b+2|0;h=jB(g,c,d)|0;if((h|0)==(g|0)|(h|0)==(c|0)){e=b;break a;}e=(a[h>>0]|0)==69?h+1|0:b;break a;}e=WB(b,c,d)|0;break a;break;}default:{e=mB(b,c,d)|0;break a;}}}while(0);return e|0;}function qD(a){a=a|0;return 268435455;}function rD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+12|0;c[f>>2]=0;c[a+16>>2]=e;if(!b)g=0;else g=uD(e,b)|0;c[a>>2]=g;e=g+(d<<4)|0;c[a+8>>2]=e;c[a+4>>2]=e;c[f>>2]=g+(b<<4);return;}function sD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[a>>2]|0;e=a+4|0;f=b+4|0;g=c[e>>2]|0;while(1){if((g|0)==(d|0))break;h=c[f>>2]|0;i=h+-16|0;j=g+-16|0;c[i>>2]=0;k=h+-12|0;c[k>>2]=0;l=h+-8|0;c[l>>2]=0;c[h+-4>>2]=c[g+-4>>2];c[i>>2]=c[j>>2];i=g+-12|0;c[k>>2]=c[i>>2];k=g+-8|0;c[l>>2]=c[k>>2];c[k>>2]=0;c[i>>2]=0;c[j>>2]=0;c[f>>2]=(c[f>>2]|0)+-16;g=j;}g=c[a>>2]|0;c[a>>2]=c[f>>2];c[f>>2]=g;g=b+8|0;d=c[e>>2]|0;c[e>>2]=c[g>>2];c[g>>2]=d;d=a+8|0;a=b+12|0;g=c[d>>2]|0;c[d>>2]=c[a>>2];c[a>>2]=g;c[b>>2]=c[f>>2];return;}function tD(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+4>>2]|0;d=a+8|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;f=e+-16|0;c[d>>2]=f;XA(f);}d=c[a>>2]|0;if(d|0)aB(c[a+16>>2]|0,d,(c[a+12>>2]|0)-d>>4);return;}function uD(a,b){a=a|0;b=b|0;return aD(c[a>>2]|0,b<<4)|0;}function vD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,20091,2);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function wD(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=l;l=l+16|0;f=e;g=b+11|0;h=a[g>>0]|0;i=h<<24>>24<0;if(i){j=c[b+4>>2]|0;k=j>>>0<11?j:11;m=j;n=(c[b+8>>2]&2147483647)+-1|0;}else{j=h&255;k=j>>>0<11?j:11;m=j;n=10;}if((k-m+n|0)>>>0<d>>>0)dB(b,n,d-k+m-n|0,m,0,k,d,20094);else{if(i)o=c[b>>2]|0;else o=b;do{if((k|0)!=(d|0)){i=m-k|0;if(!i){p=k;q=0;r=20094;s=d;t=17;}else{if(k>>>0>d>>>0){wC(o,20094,d)|0;wC(o+d|0,o+k|0,i)|0;u=k;v=d;break;}do{if(o>>>0<20094>>>0&(o+m|0)>>>0>20094>>>0){if((o+k|0)>>>0>20094>>>0){wC(o,20094,k)|0;w=0;x=k;y=20094+d|0;z=d-k|0;break;}else{w=k;x=0;y=20094+(d-k)|0;z=d;break;}}else{w=k;x=0;y=20094;z=d;}}while(0);n=o+x|0;wC(n+z|0,n+w|0,i)|0;p=w;q=x;r=y;s=z;t=17;}}else{p=d;q=0;r=20094;s=d;t=17;}}while(0);if((t|0)==17){wC(o+q|0,r,s)|0;u=p;v=s;}s=v-u+m|0;if((a[g>>0]|0)<0)c[b+4>>2]=s;else a[g>>0]=s;a[f>>0]=0;cB(o+s|0,f);}l=e;return;}function xD(a){a=a|0;lb();}function yD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if(!c)d=0;else d=Qy(a,b,c)|0;return d|0;}function zD(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;g=l;l=l+16|0;h=g;i=b+11|0;j=a[i>>0]|0;k=j<<24>>24<0;if(k)m=c[b+4>>2]|0;else m=j&255;if(m>>>0<d>>>0)xD(b);if(k)n=(c[b+8>>2]&2147483647)+-1|0;else n=10;if((n-m|0)>>>0>=f>>>0){if(f|0){if(k)o=c[b>>2]|0;else o=b;k=m-d|0;j=o+d|0;if(!k)p=e;else{wC(j+f|0,j,k)|0;p=j>>>0<=e>>>0&(o+m|0)>>>0>e>>>0?e+f|0:e;}wC(j,p,f)|0;p=m+f|0;if((a[i>>0]|0)<0)c[b+4>>2]=p;else a[i>>0]=p;a[h>>0]=0;cB(o+p|0,h);}}else dB(b,n,m+f-n|0,m,d,0,f,e);l=g;return b|0;}function AD(a){a=a|0;return 268435455;}function BD(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=a+12|0;c[f>>2]=0;c[a+16>>2]=e;if(!b)g=0;else g=ED(e,b)|0;c[a>>2]=g;e=g+(d<<4)|0;c[a+8>>2]=e;c[a+4>>2]=e;c[f>>2]=g+(b<<4);return;}function CD(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[a>>2]|0;e=a+4|0;f=b+4|0;g=c[e>>2]|0;while(1){if((g|0)==(d|0))break;h=c[f>>2]|0;i=h+-16|0;j=g+-16|0;c[i>>2]=0;k=h+-12|0;c[k>>2]=0;l=h+-8|0;c[l>>2]=0;c[h+-4>>2]=c[g+-4>>2];c[i>>2]=c[j>>2];i=g+-12|0;c[k>>2]=c[i>>2];k=g+-8|0;c[l>>2]=c[k>>2];c[k>>2]=0;c[i>>2]=0;c[j>>2]=0;c[f>>2]=(c[f>>2]|0)+-16;g=j;}g=c[a>>2]|0;c[a>>2]=c[f>>2];c[f>>2]=g;g=b+8|0;d=c[e>>2]|0;c[e>>2]=c[g>>2];c[g>>2]=d;d=a+8|0;a=b+12|0;g=c[d>>2]|0;c[d>>2]=c[a>>2];c[a>>2]=g;c[b>>2]=c[f>>2];return;}function DD(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[a+4>>2]|0;d=a+8|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;f=e+-16|0;c[d>>2]=f;RA(f);}d=c[a>>2]|0;if(d|0)YA(c[a+16>>2]|0,d,(c[a+12>>2]|0)-d>>4);return;}function ED(a,b){a=a|0;b=b|0;return aD(c[a>>2]|0,b<<4)|0;}function FD(a){a=a|0;var b=0;if(!(XC(a)|0))Wz(a);else{b=$C(a+12|0,1)|0;c[a+4>>2]=b;c[a>>2]=b;c[a+8>>2]=b+24;return;}}function GD(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;d=l;l=l+16|0;e=d;f=b+11|0;g=a[f>>0]|0;if(g<<24>>24<0){h=c[b>>2]|0;i=c[b+4>>2]|0;}else{h=b;i=g&255;}j=(i|0)!=0&1;k=i-j|0;if(!k)m=g;else{wC(h,h+j|0,k)|0;m=a[f>>0]|0;}if(m<<24>>24<0)c[b+4>>2]=k;else a[f>>0]=k;a[e>>0]=0;cB(h+k|0,e);l=d;return;}function HD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,19867,7);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function ID(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,3);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function JD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,20287,18);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function KD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,b,8);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function LD(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;RB(a,20280,6);b=a+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a=0;while(1){if((a|0)==3)break;c[b+(a<<2)>>2]=0;a=a+1|0;}return;}function MD(a,b){a=a|0;b=b|0;c[a>>2]=b;c[a+4>>2]=c[b>>2];return;}function ND(b,d){b=b|0;d=d|0;c[b>>2]=d;a[b+4>>0]=a[d>>0]|0;return;}function OD(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;f=l;l=l+64|0;g=f+60|0;h=f+48|0;i=f+36|0;j=f+24|0;k=f+12|0;m=f;a:do{if((d-b|0)>2){switch(a[b>>0]|0){case 84:break;case 71:{switch(a[b+1>>0]|0){case 86:{n=b+2|0;o=MB(n,d,e)|0;if((o|0)==(n|0)){p=b;q=60;break a;}n=c[e+4>>2]|0;if((c[e>>2]|0)==(n|0)){r=b;break a;}pB(n+-24|0,0,20505)|0;p=o;q=60;break a;break;}case 82:{o=b+2|0;n=MB(o,d,e)|0;if((n|0)==(o|0)){p=b;q=60;break a;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){r=b;break a;}pB(o+-24|0,0,20525)|0;p=n;q=60;break a;break;}default:{p=b;q=60;break a;}}break;}default:{p=b;q=60;break a;}}n=b+1|0;switch(a[n>>0]|0){case 86:{o=b+2|0;s=mB(o,d,e)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){r=b;break a;}pB(o+-24|0,0,20354)|0;p=s;q=60;break a;break;}case 84:{s=b+2|0;o=mB(s,d,e)|0;if((o|0)==(s|0)){p=b;q=60;break a;}s=c[e+4>>2]|0;if((c[e>>2]|0)==(s|0)){r=b;break a;}pB(s+-24|0,0,20366)|0;p=o;q=60;break a;break;}case 73:{o=b+2|0;s=mB(o,d,e)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){r=b;break a;}pB(o+-24|0,0,20375)|0;p=s;q=60;break a;break;}case 83:{s=b+2|0;o=mB(s,d,e)|0;if((o|0)==(s|0)){p=b;q=60;break a;}s=c[e+4>>2]|0;if((c[e>>2]|0)==(s|0)){r=b;break a;}pB(s+-24|0,0,20389)|0;p=o;q=60;break a;break;}case 99:{o=b+2|0;s=RD(o,d)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=RD(s,d)|0;if((o|0)==(s|0)){p=b;q=60;break a;}s=jB(o,d,e)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=c[e+4>>2]|0;if((c[e>>2]|0)==(o|0)){r=b;break a;}pB(o+-24|0,0,20408)|0;p=s;q=60;break a;break;}case 67:{s=b+2|0;o=mB(s,d,e)|0;if((o|0)==(s|0)){p=b;q=60;break a;}s=QB(o,d)|0;if((s|0)==(o|0)|(s|0)==(d|0)){p=b;q=60;break a;}if((a[s>>0]|0)!=95){p=b;q=60;break a;}o=s+1|0;s=mB(o,d,e)|0;if((s|0)==(o|0)){p=b;q=60;break a;}o=e+4|0;t=c[o>>2]|0;if(((t-(c[e>>2]|0)|0)/24|0)>>>0<2){r=b;break a;}FB(h,t+-24|0);t=c[o>>2]|0;u=0;while(1){if((u|0)==-1)break;v=u+-1|0;QA(t+(v*24|0)|0);u=v;}c[o>>2]=t+-24;pB(h,0,20435)|0;c[k>>2]=c[h>>2];c[k+4>>2]=c[h+4>>2];c[k+8>>2]=c[h+8>>2];u=0;while(1){if((u|0)==3)break;c[h+(u<<2)>>2]=0;u=u+1|0;}qB(k,20460)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];u=0;while(1){if((u|0)==3)break;c[k+(u<<2)>>2]=0;u=u+1|0;}FB(m,(c[o>>2]|0)+-24|0);u=a[m+11>>0]|0;t=u<<24>>24<0;TA(j,t?c[m>>2]|0:m,t?c[m+4>>2]|0:u&255)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];u=0;while(1){if((u|0)==3)break;c[j+(u<<2)>>2]=0;u=u+1|0;}u=c[o>>2]|0;t=u+-24|0;v=t+11|0;if((a[v>>0]|0)<0){w=c[t>>2]|0;a[g>>0]=0;cB(w,g);c[u+-20>>2]=0;}else{a[g>>0]=0;cB(t,g);a[v>>0]=0;}TB(t);c[t>>2]=c[i>>2];c[t+4>>2]=c[i+4>>2];c[t+8>>2]=c[i+8>>2];t=0;while(1){if((t|0)==3)break;c[i+(t<<2)>>2]=0;t=t+1|0;}iB(i);iB(m);iB(j);iB(k);iB(h);p=s;q=60;break a;break;}default:{t=RD(n,d)|0;do{if((t|0)!=(n|0)){o=jB(t,d,e)|0;if((o|0)!=(t|0)){v=c[e+4>>2]|0;if((c[e>>2]|0)!=(v|0)){u=v+-24|0;if((a[b+2>>0]|0)==118){pB(u,0,20465)|0;x=0;y=o;break;}else{pB(u,0,20483)|0;x=0;y=o;break;}}else{x=1;y=b;}}else{x=0;y=b;}}else{x=3;y=b;}}while(0);switch(x&3){case 3:case 0:{p=y;q=60;break a;break;}default:{}}if(!x){p=y;q=60;break a;}else{r=b;break a;}}}}else{p=b;q=60;}}while(0);if((q|0)==60)r=p;l=f;return r|0;}function PD(b){b=b|0;a[c[b>>2]>>0]=a[b+4>>0]|0;return;}function QD(a){a=a|0;c[c[a>>2]>>2]=c[a+4>>2];return;}function RD(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;a:do{if((b|0)!=(c|0)){switch(a[b>>0]|0){case 104:{d=b+1|0;e=QB(d,c)|0;if((e|0)==(d|0)|(e|0)==(c|0)){f=b;break a;}return((a[e>>0]|0)==95?e+1|0:b)|0;}case 118:break;default:{f=b;break a;}}e=b+1|0;d=QB(e,c)|0;if((!((d|0)==(e|0)|(d|0)==(c|0))?(a[d>>0]|0)==95:0)?(e=d+1|0,d=QB(e,c)|0,!((d|0)==(e|0)|(d|0)==(c|0))):0)f=(a[d>>0]|0)==95?d+1|0:b;else f=b;}else f=b;}while(0);return f|0;}function SD(a,b){a=a|0;b=b|0;c[a>>2]=b;return;}function TD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=c[b>>2];return;}function UD(a,b){a=a|0;b=b|0;c[a>>2]=b;return;}function VD(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=c[b>>2];return;}function WD(b){b=b|0;var c=0;if((a[b>>0]|0)==1)c=0;else{a[b>>0]=1;c=1;}return c|0;}function XD(a){a=a|0;return;}function YD(a){a=a|0;return;}function ZD(){var a=0;a=c[5564]|0;c[5564]=a+0;return a|0;}function _D(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=l;l=l+16|0;f=e;c[f>>2]=c[d>>2];g=rc[c[(c[a>>2]|0)+16>>2]&31](a,b,f)|0;if(g)c[d>>2]=c[f>>2];l=e;return g&1|0;}function $D(a){a=a|0;var b=0;if(!a)b=0;else b=(kA(a,10840,10896,0)|0)!=0&1;return b|0;}function aE(){}function bE(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=N(d,c)|0;f=a>>>16;a=(e>>>16)+(N(d,f)|0)|0;d=b>>>16;b=N(d,c)|0;return(y=(a>>>16)+(N(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0;}function cE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=bE(e,a)|0;f=y;return(y=(N(b,a)|0)+(N(d,e)|0)+f|f&0,c|0|0)|0;}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return(y=b+d+(e>>>0<a>>>0|0)>>>0,e|0)|0;}function eE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return(y=e,a-c>>>0|0)|0;}function fE(a){a=a|0;return(a?31-(Q(a^a-1)|0)|0:32)|0;}function gE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;g=a;h=b;i=h;j=d;k=e;l=k;if(!i){m=(f|0)!=0;if(!l){if(m){c[f>>2]=(g>>>0)%(j>>>0);c[f+4>>2]=0;}n=0;o=(g>>>0)/(j>>>0)>>>0;return(y=n,o)|0;}else{if(!m){n=0;o=0;return(y=n,o)|0;}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;o=0;return(y=n,o)|0;}}m=(l|0)==0;do{if(j){if(!m){p=(Q(l|0)|0)-(Q(i|0)|0)|0;if(p>>>0<=31){q=p+1|0;r=31-p|0;s=p-31>>31;t=q;u=g>>>(q>>>0)&s|i<<r;v=i>>>(q>>>0)&s;w=0;x=g<<r;break;}if(!f){n=0;o=0;return(y=n,o)|0;}c[f>>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(y=n,o)|0;}r=j-1|0;if(r&j|0){s=(Q(j|0)|0)+33-(Q(i|0)|0)|0;q=64-s|0;p=32-s|0;z=p>>31;A=s-32|0;B=A>>31;t=s;u=p-1>>31&i>>>(A>>>0)|(i<<p|g>>>(s>>>0))&B;v=B&i>>>(s>>>0);w=g<<q&z;x=(i<<q|g>>>(A>>>0))&z|g<<p&s-33>>31;break;}if(f|0){c[f>>2]=r&g;c[f+4>>2]=0;}if((j|0)==1){n=h|b&0;o=a|0|0;return(y=n,o)|0;}else{r=fE(j|0)|0;n=i>>>(r>>>0)|0;o=i<<32-r|g>>>(r>>>0)|0;return(y=n,o)|0;}}else{if(m){if(f|0){c[f>>2]=(i>>>0)%(j>>>0);c[f+4>>2]=0;}n=0;o=(i>>>0)/(j>>>0)>>>0;return(y=n,o)|0;}if(!g){if(f|0){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(l>>>0);}n=0;o=(i>>>0)/(l>>>0)>>>0;return(y=n,o)|0;}r=l-1|0;if(!(r&l)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=r&i|b&0;}n=0;o=i>>>((fE(l|0)|0)>>>0);return(y=n,o)|0;}r=(Q(l|0)|0)-(Q(i|0)|0)|0;if(r>>>0<=30){s=r+1|0;p=31-r|0;t=s;u=i<<p|g>>>(s>>>0);v=i>>>(s>>>0);w=0;x=g<<p;break;}if(!f){n=0;o=0;return(y=n,o)|0;}c[f>>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(y=n,o)|0;}}while(0);if(!t){C=x;D=w;E=v;F=u;G=0;H=0;}else{b=d|0|0;d=k|e&0;e=dE(b|0,d|0,-1,-1)|0;k=y;h=x;x=w;w=v;v=u;u=t;t=0;do{a=h;h=x>>>31|h<<1;x=t|x<<1;g=v<<1|a>>>31|0;a=v>>>31|w<<1|0;eE(e|0,k|0,g|0,a|0)|0;i=y;l=i>>31|((i|0)<0?-1:0)<<1;t=l&1;v=eE(g|0,a|0,l&b|0,(((i|0)<0?-1:0)>>31|((i|0)<0?-1:0)<<1)&d|0)|0;w=y;u=u-1|0;}while((u|0)!=0);C=h;D=x;E=w;F=v;G=0;H=t;}t=D;D=0;if(f|0){c[f>>2]=F;c[f+4>>2]=E;}n=(t|0)>>>31|(C|D)<<1|(D<<1|t>>>31)&0|G;o=(t<<1|0>>>31)&-2|H;return(y=n,o)|0;}function hE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return gE(a,b,c,d,0)|0;}function iE(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c;}y=0;return b>>>c-32|0;}function jE(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c;}y=a<<c-32;return 0;}function kE(a){a=a|0;return(a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0;}function lE(a,b,c){a=a|0;b=b|0;c=c|0;c=Q(b)|0;if((c|0)==32)c=c+(Q(a)|0)|0;y=0;return c|0;}function mE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return nb(b|0,d|0,e|0)|0;f=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0;}h=g&-4|0;e=h-64|0;while((b|0)<=(e|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0;}while((b|0)<(h|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;}}else{h=g-4|0;while((b|0)<(h|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0;}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;}return f|0;}function nE(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0;}b=e;}else mE(b,c,d)|0;return b|0;}function oE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0;}g=f&-4|0;h=g-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(h|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0;}while((b|0)<(g|0)){c[b>>2]=i;b=b+4|0;}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0;}return f-e|0;}function pE(a){a=a|0;var b=0,d=0;b=c[i>>2]|0;d=b+a|0;if((a|0)>0&(d|0)<(b|0)|(d|0)<0){V()|0;Ca(12);return-1;}c[i>>2]=d;if((d|0)>(U()|0)?(T()|0)==0:0){c[i>>2]=b;Ca(12);return-1;}return b|0;}function qE(a){a=a|0;return oc[a&7]()|0;}function rE(a,b){a=a|0;b=b|0;return pc[a&63](b|0)|0;}function sE(a,b,c){a=a|0;b=b|0;c=c|0;return qc[a&63](b|0,c|0)|0;}function tE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return rc[a&31](b|0,c|0,d|0)|0;}function uE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return sc[a&15](b|0,c|0,d|0,e|0)|0;}function vE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return tc[a&7](b|0,c|0,d|0,e|0,f|0)|0;}function wE(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return uc[a&31](b|0,c|0,d|0,e|0,f|0,g|0)|0;}function xE(a){a=a|0;vc[a&3]();}function yE(a,b){a=a|0;b=b|0;wc[a&127](b|0);}function zE(a,b,c){a=a|0;b=b|0;c=c|0;xc[a&31](b|0,c|0);}function AE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;yc[a&7](b|0,c|0,d|0);}function BE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;zc[a&7](b|0,c|0,d|0,e|0);}function CE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Ac[a&3](b|0,c|0,d|0,e|0,f|0);}function DE(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Bc[a&3](b|0,c|0,d|0,e|0,f|0,g|0);}function EE(){R(0);return 0;}function FE(a){a=a|0;R(1);return 0;}function GE(a,b){a=a|0;b=b|0;R(2);return 0;}function HE(a,b,c){a=a|0;b=b|0;c=c|0;R(3);return 0;}function IE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;R(4);return 0;}function JE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;R(5);return 0;}function KE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;R(6);return 0;}function LE(){R(7);}function ME(a){a=a|0;R(8);}function NE(a,b){a=a|0;b=b|0;R(9);}function OE(a,b,c){a=a|0;b=b|0;c=c|0;R(10);}function PE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;R(11);}function QE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;R(12);}function RE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;R(13);}// EMSCRIPTEN_END_FUNCS\nvar oc=[EE,Ce,Me,Ue,ge,EE,EE,EE];var pc=[FE,fd,ld,nd,td,vd,Bd,Ed,Kd,Md,Sd,Ud,_d,kf,qf,xf,Df,If,Of,Tf,Zf,fg,lg,og,ug,Fg,Lg,Og,Ug,Iy,Tz,qe,ve,Qc,Ae,De,Ke,Ne,Se,Ve,Wc,ee,he,Mc,Oo,Gx,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE,FE];var qc=[GE,kd,sd,Ad,Jd,Rd,Zd,pf,Cf,Nf,Yf,jg,kg,sg,tg,Jg,Kg,Sg,Tg,Ht,pe,Oc,ze,$e,af,Rc,Sc,Uc,Vc,We,Xc,Zc,_c,ke,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE,GE];var rc=[HE,Jy,Ky,Ny,zz,cA,xA,zA,CA,ue,Ee,Fe,cf,Oe,Pe,Tc,Re,Xe,Yc,Ze,le,ce,Py,HE,HE,HE,HE,HE,HE,HE,HE,HE];var sc=[IE,vu,wu,Kv,Lv,Xw,Yw,bf,He,df,rf,Qe,Ye,me,IE,IE];var tc=[JE,Ge,Ie,Je,tn,sn,Km,Jm];var uc=[KE,Xl,Yl,Zl,_l,$l,am,bm,cm,dm,em,fm,gm,hm,im,jm,km,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE,KE];var vc=[LE,Xz,Jc,qA];var wc=[ME,Cd,ed,hd,id,md,pd,qd,ud,xd,yd,Dd,Gd,Hd,Ld,Od,Pd,Td,Wd,Xd,hf,jf,mf,nf,vf,wf,zf,Af,Gf,Hf,Kf,Lf,Rf,Sf,Vf,Wf,dg,eg,hg,ig,ng,qg,rg,Dg,Eg,Hg,Ig,Ng,Qg,Rg,Rz,Sz,_z,$z,aA,bA,lA,wA,yA,BA,DA,ne,re,we,Be,Le,Te,fe,ef,sf,Ff,Qf,rA,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME,ME];var xc=[NE,gd,jd,od,rd,wd,zd,Fd,Id,Nd,Qd,Vd,Yd,lf,of,yf,Bf,Jf,Mf,Uf,Xf,gg,pg,Gg,Pg,It,Kc,Lc,Nc,$d,NE,NE];var yc=[OE,oe,ie,ae,be,OE,OE,OE];var zc=[PE,fA,oA,GA,je,PE,PE,PE];var Ac=[QE,eA,nA,FA];var Bc=[RE,dA,mA,EA];return{__GLOBAL__sub_I_bind_cpp:zy,__GLOBAL__sub_I_zstd_binding_cc:_e,___cxa_can_catch:_D,___cxa_demangle:KA,___cxa_is_pointer_type:$D,___errno_location:My,___getTypeName:By,___muldi3:cE,___udivdi3:hE,_bitshift64Lshr:iE,_bitshift64Shl:jE,_free:Dy,_i64Add:dE,_i64Subtract:eE,_llvm_bswap_i32:kE,_llvm_ctlz_i64:lE,_llvm_cttz_i32:fE,_malloc:Cy,_memcpy:mE,_memmove:nE,_memset:oE,_sbrk:pE,dynCall_i:qE,dynCall_ii:rE,dynCall_iii:sE,dynCall_iiii:tE,dynCall_iiiii:uE,dynCall_iiiiii:vE,dynCall_iiiiiii:wE,dynCall_v:xE,dynCall_vi:yE,dynCall_vii:zE,dynCall_viii:AE,dynCall_viiii:BE,dynCall_viiiii:CE,dynCall_viiiiii:DE,establishStackSpace:Fc,getTempRet0:Ic,runPostSets:aE,setTempRet0:Hc,setThrew:Gc,stackAlloc:Cc,stackRestore:Ec,stackSave:Dc};}(// EMSCRIPTEN_END_ASM\nModule.asmGlobalArg,Module.asmLibraryArg,buffer);var __GLOBAL__sub_I_bind_cpp=Module[\"__GLOBAL__sub_I_bind_cpp\"]=asm[\"__GLOBAL__sub_I_bind_cpp\"];var __GLOBAL__sub_I_zstd_binding_cc=Module[\"__GLOBAL__sub_I_zstd_binding_cc\"]=asm[\"__GLOBAL__sub_I_zstd_binding_cc\"];var ___cxa_can_catch=Module[\"___cxa_can_catch\"]=asm[\"___cxa_can_catch\"];var ___cxa_demangle=Module[\"___cxa_demangle\"]=asm[\"___cxa_demangle\"];var ___cxa_is_pointer_type=Module[\"___cxa_is_pointer_type\"]=asm[\"___cxa_is_pointer_type\"];var ___errno_location=Module[\"___errno_location\"]=asm[\"___errno_location\"];var ___getTypeName=Module[\"___getTypeName\"]=asm[\"___getTypeName\"];var ___muldi3=Module[\"___muldi3\"]=asm[\"___muldi3\"];var ___udivdi3=Module[\"___udivdi3\"]=asm[\"___udivdi3\"];var _bitshift64Lshr=Module[\"_bitshift64Lshr\"]=asm[\"_bitshift64Lshr\"];var _bitshift64Shl=Module[\"_bitshift64Shl\"]=asm[\"_bitshift64Shl\"];var _free=Module[\"_free\"]=asm[\"_free\"];var _i64Add=Module[\"_i64Add\"]=asm[\"_i64Add\"];var _i64Subtract=Module[\"_i64Subtract\"]=asm[\"_i64Subtract\"];var _llvm_bswap_i32=Module[\"_llvm_bswap_i32\"]=asm[\"_llvm_bswap_i32\"];var _llvm_ctlz_i64=Module[\"_llvm_ctlz_i64\"]=asm[\"_llvm_ctlz_i64\"];var _llvm_cttz_i32=Module[\"_llvm_cttz_i32\"]=asm[\"_llvm_cttz_i32\"];var _malloc=Module[\"_malloc\"]=asm[\"_malloc\"];var _memcpy=Module[\"_memcpy\"]=asm[\"_memcpy\"];var _memmove=Module[\"_memmove\"]=asm[\"_memmove\"];var _memset=Module[\"_memset\"]=asm[\"_memset\"];var _sbrk=Module[\"_sbrk\"]=asm[\"_sbrk\"];var establishStackSpace=Module[\"establishStackSpace\"]=asm[\"establishStackSpace\"];var getTempRet0=Module[\"getTempRet0\"]=asm[\"getTempRet0\"];var runPostSets=Module[\"runPostSets\"]=asm[\"runPostSets\"];var setTempRet0=Module[\"setTempRet0\"]=asm[\"setTempRet0\"];var setThrew=Module[\"setThrew\"]=asm[\"setThrew\"];var stackAlloc=Module[\"stackAlloc\"]=asm[\"stackAlloc\"];var _stackRestore=Module[\"stackRestore\"]=asm[\"stackRestore\"];var _stackSave=Module[\"stackSave\"]=asm[\"stackSave\"];var dynCall_i=Module[\"dynCall_i\"]=asm[\"dynCall_i\"];var dynCall_ii=Module[\"dynCall_ii\"]=asm[\"dynCall_ii\"];var dynCall_iii=Module[\"dynCall_iii\"]=asm[\"dynCall_iii\"];var dynCall_iiii=Module[\"dynCall_iiii\"]=asm[\"dynCall_iiii\"];var dynCall_iiiii=Module[\"dynCall_iiiii\"]=asm[\"dynCall_iiiii\"];var dynCall_iiiiii=Module[\"dynCall_iiiiii\"]=asm[\"dynCall_iiiiii\"];var dynCall_iiiiiii=Module[\"dynCall_iiiiiii\"]=asm[\"dynCall_iiiiiii\"];var dynCall_v=Module[\"dynCall_v\"]=asm[\"dynCall_v\"];var dynCall_vi=Module[\"dynCall_vi\"]=asm[\"dynCall_vi\"];var dynCall_vii=Module[\"dynCall_vii\"]=asm[\"dynCall_vii\"];var dynCall_viii=Module[\"dynCall_viii\"]=asm[\"dynCall_viii\"];var dynCall_viiii=Module[\"dynCall_viiii\"]=asm[\"dynCall_viiii\"];var dynCall_viiiii=Module[\"dynCall_viiiii\"]=asm[\"dynCall_viiiii\"];var dynCall_viiiiii=Module[\"dynCall_viiiiii\"]=asm[\"dynCall_viiiiii\"];Module[\"asm\"]=asm;Module[\"FS\"]=FS;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer);}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module[\"readBinary\"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE);}else{var doBrowserLoad=function doBrowserLoad(){Module[\"readAsync\"](memoryInitializer,applyMemoryInitializer,function(){throw\"could not load memory initializer \"+memoryInitializer;});};addRunDependency(\"memory initializer\");var applyMemoryInitializer=function applyMemoryInitializer(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module[\"memoryInitializerRequest\"])delete Module[\"memoryInitializerRequest\"].response;removeRunDependency(\"memory initializer\");};var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer);}else if(Module[\"memoryInitializerRequest\"]){var useRequest=function useRequest(){var request=Module[\"memoryInitializerRequest\"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module[\"memoryInitializerRequestURL\"]);if(data){response=data.buffer;}else{console.warn(\"a problem seems to have happened with Module.memoryInitializerRequest, status: \"+request.status+\", retrying \"+memoryInitializer);doBrowserLoad();return;}}applyMemoryInitializer(response);};if(Module[\"memoryInitializerRequest\"].response){setTimeout(useRequest,0);}else{Module[\"memoryInitializerRequest\"].addEventListener(\"load\",useRequest);}}else{doBrowserLoad();}}}Module[\"then\"]=function(func){if(Module[\"calledRun\"]){func(Module);}else{var old=Module[\"onRuntimeInitialized\"];Module[\"onRuntimeInitialized\"]=function(){if(old)old();func(Module);};}return Module;};function ExitStatus(status){this.name=\"ExitStatus\";this.message=\"Program terminated with exit(\"+status+\")\";this.status=status;}ExitStatus.prototype=new Error();ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;dependenciesFulfilled=function runCaller(){if(!Module[\"calledRun\"])run();if(!Module[\"calledRun\"])dependenciesFulfilled=runCaller;};function run(args){args=args||Module[\"arguments\"];if(runDependencies>0){return;}preRun();if(runDependencies>0)return;if(Module[\"calledRun\"])return;function doRun(){if(Module[\"calledRun\"])return;Module[\"calledRun\"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module[\"onRuntimeInitialized\"])Module[\"onRuntimeInitialized\"]();postRun();}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(function(){setTimeout(function(){Module[\"setStatus\"](\"\");},1);doRun();},1);}else{doRun();}}Module[\"run\"]=run;function abort(what){if(Module[\"onAbort\"]){Module[\"onAbort\"](what);}if(what!==undefined){out(what);err(what);what=JSON.stringify(what);}else{what=\"\";}ABORT=true;EXITSTATUS=1;throw\"abort(\"+what+\"). Build with -s ASSERTIONS=1 for more info.\";}Module[\"abort\"]=abort;if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()();}}Module[\"noExitRuntime\"]=true;run();return Module;};}();if((typeof exports==='undefined'?'undefined':_typeof(exports))==='object'&&(typeof module==='undefined'?'undefined':_typeof(module))==='object')module.exports=Module;else if(typeof define==='function'&&define['amd'])define([],function(){return Module;});else if((typeof exports==='undefined'?'undefined':_typeof(exports))==='object')exports[\"Module\"]=Module;\n\n}).call(this,require('_process'),require(\"buffer\").Buffer,\"/lib\")\n},{\"_process\":126,\"buffer\":54,\"crypto\":63,\"fs\":9,\"path\":119}],7:[function(require,module,exports){\n'use strict';var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}var ArrayBufferHelper=require('./helpers.js').ArrayBufferHelper;var constants=require('./constants.js');var onReady=function onReady(binding){var codec=new binding.ZstdCodec();var withBindingInstance=function withBindingInstance(instance,callback){try{return callback(instance);}finally{instance.delete();}};var withCppVector=function withCppVector(callback){var vector=new binding.VectorU8();return withBindingInstance(vector,callback);};var correctCompressionLevel=function correctCompressionLevel(compression_level){return compression_level||constants.DEFAULT_COMPRESSION_LEVEL;};var compressBoundImpl=function compressBoundImpl(content_size){var rc=codec.compressBound(content_size);return rc>=0?rc:null;};var contentSizeImpl=function contentSizeImpl(src_vec){var rc=codec.contentSize(src_vec);return rc>=0?rc:null;};var ArrayBufferSink=function(){function ArrayBufferSink(initial_size){_classCallCheck(this,ArrayBufferSink);this._buffer=new ArrayBuffer(initial_size);this._array=new Uint8Array(this._buffer);this._offset=0;}_createClass(ArrayBufferSink,[{key:'concat',value:function concat(array){if(array.length+this._offset>this._array.length){this._grow(Math.max(this._array.length,array.length)*2);}this._array.set(array,this._offset);this._offset+=array.length;}},{key:'array',value:function array(){// NOTE: clone buffer to shrink to fit\nvar buffer=ArrayBufferHelper.transfer(this._buffer,this._offset);return new Uint8Array(buffer);}},{key:'_grow',value:function _grow(new_size){this._buffer=ArrayBufferHelper.transfer(this._buffer,new_size);this._array=new Uint8Array(this._buffer);}}]);return ArrayBufferSink;}();var Generic=function(){function Generic(){_classCallCheck(this,Generic);}_createClass(Generic,[{key:'compressBound',value:function compressBound(content_bytes){return compressBoundImpl(content_bytes.length);}},{key:'contentSize',value:function contentSize(compressed_bytes){return withCppVector(function(src){binding.cloneToVector(src,compressed_bytes);return contentSizeImpl(src);});}}]);return Generic;}();var Simple=function(){function Simple(){_classCallCheck(this,Simple);}_createClass(Simple,[{key:'compress',value:function compress(content_bytes,compression_level){// use basic-api `compress`, to embed `frameContentSize`.\nvar compressBound=compressBoundImpl(content_bytes.length);if(!compressBound)return null;compression_level=correctCompressionLevel(compression_level);return withCppVector(function(src){return withCppVector(function(dest){binding.cloneToVector(src,content_bytes);dest.resize(compressBound,0);var rc=codec.compress(dest,src,compression_level);if(rc<0)return null;// `rc` is compressed size\ndest.resize(rc,0);return binding.cloneAsTypedArray(dest);});});}},{key:'decompress',value:function decompress(compressed_bytes){// use streaming-api, to support data without `frameContentSize`.\nreturn withCppVector(function(src){return withCppVector(function(dest){binding.cloneToVector(src,compressed_bytes);var contentSize=contentSizeImpl(src);if(!contentSize)return null;dest.resize(contentSize,0);var rc=codec.decompress(dest,src);if(rc<0||rc!=contentSize)return null;// `rc` is compressed size\nreturn binding.cloneAsTypedArray(dest);});});}},{key:'compressUsingDict',value:function compressUsingDict(content_bytes,cdict){// use basic-api `compress`, to embed `frameContentSize`.\nvar compressBound=compressBoundImpl(content_bytes.length);if(!compressBound)return null;return withCppVector(function(src){return withCppVector(function(dest){binding.cloneToVector(src,content_bytes);dest.resize(compressBound,0);var rc=codec.compressUsingDict(dest,src,cdict.get());if(rc<0)return null;// `rc` is original content size\ndest.resize(rc,0);return binding.cloneAsTypedArray(dest);});});}},{key:'decompressUsingDict',value:function decompressUsingDict(compressed_bytes,ddict){// use streaming-api, to support data without `frameContentSize`.\nreturn withCppVector(function(src){return withCppVector(function(dest){binding.cloneToVector(src,compressed_bytes);var contentSize=contentSizeImpl(src);if(!contentSize)return null;dest.resize(contentSize,0);var rc=codec.decompressUsingDict(dest,src,ddict.get());if(rc<0||rc!=contentSize)return null;// `rc` is compressed size\nreturn binding.cloneAsTypedArray(dest);});});}}]);return Simple;}();var Streaming=function(){function Streaming(){_classCallCheck(this,Streaming);}_createClass(Streaming,[{key:'compress',value:function compress(content_bytes,compression_level){return withBindingInstance(new binding.ZstdCompressStreamBinding(),function(stream){var initial_size=compressBoundImpl(content_bytes.length);var sink=new ArrayBufferSink(initial_size);var callback=function callback(compressed){sink.concat(compressed);};var level=correctCompressionLevel(compression_level);if(!stream.begin(level))return null;if(!stream.transform(content_bytes,callback))return null;if(!stream.end(callback))return null;return sink.array();});}},{key:'compressChunks',value:function compressChunks(chunks,size_hint,compression_level){return withBindingInstance(new binding.ZstdCompressStreamBinding(),function(stream){var initial_size=size_hint||constants.STREAMING_DEFAULT_BUFFER_SIZE;var sink=new ArrayBufferSink(initial_size);var callback=function callback(compressed){sink.concat(compressed);};var level=correctCompressionLevel(compression_level);if(!stream.begin(level))return null;var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=chunks[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var chunk=_step.value;if(!stream.transform(chunk,callback))return null;}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}if(!stream.end(callback))return null;return sink.array();});}},{key:'compressUsingDict',value:function compressUsingDict(content_bytes,cdict){return withBindingInstance(new binding.ZstdCompressStreamBinding(),function(stream){var initial_size=compressBoundImpl(content_bytes.length);var sink=new ArrayBufferSink(initial_size);var callback=function callback(compressed){sink.concat(compressed);};if(!stream.beginUsingDict(cdict.get()))return null;if(!stream.transform(content_bytes,callback))return null;if(!stream.end(callback))return null;return sink.array();});}},{key:'compressChunksUsingDict',value:function compressChunksUsingDict(chunks,size_hint,cdict){return withBindingInstance(new binding.ZstdCompressStreamBinding(),function(stream){var initial_size=size_hint||constants.STREAMING_DEFAULT_BUFFER_SIZE;var sink=new ArrayBufferSink(initial_size);var callback=function callback(compressed){sink.concat(compressed);};if(!stream.beginUsingDict(cdict.get()))return null;var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=chunks[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var chunk=_step2.value;if(!stream.transform(chunk,callback))return null;}}catch(err){_didIteratorError2=true;_iteratorError2=err;}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return();}}finally{if(_didIteratorError2){throw _iteratorError2;}}}if(!stream.end(callback))return null;return sink.array();});}},{key:'decompress',value:function decompress(compressed_bytes,size_hint){var _this=this;return withBindingInstance(new binding.ZstdDecompressStreamBinding(),function(stream){var initial_size=size_hint||_this._estimateContentSize(compressed_bytes);var sink=new ArrayBufferSink(initial_size);var callback=function callback(decompressed){sink.concat(decompressed);};if(!stream.begin())return null;if(!stream.transform(compressed_bytes,callback))return null;if(!stream.end(callback))return null;return sink.array();});}},{key:'decompressChunks',value:function decompressChunks(chunks,size_hint){return withBindingInstance(new binding.ZstdDecompressStreamBinding(),function(stream){var initial_size=size_hint||constants.STREAMING_DEFAULT_BUFFER_SIZE;var sink=new ArrayBufferSink(initial_size);var callback=function callback(decompressed){sink.concat(decompressed);};if(!stream.begin())return null;var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=chunks[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var chunk=_step3.value;if(!stream.transform(chunk,callback))return null;}}catch(err){_didIteratorError3=true;_iteratorError3=err;}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return();}}finally{if(_didIteratorError3){throw _iteratorError3;}}}if(!stream.end(callback))return null;return sink.array();});}},{key:'decompressUsingDict',value:function decompressUsingDict(compressed_bytes,size_hint,ddict){var _this2=this;return withBindingInstance(new binding.ZstdDecompressStreamBinding(),function(stream){var initial_size=size_hint||_this2._estimateContentSize(compressed_bytes);var sink=new ArrayBufferSink(initial_size);var callback=function callback(decompressed){sink.concat(decompressed);};if(!stream.beginUsingDict(ddict.get()))return null;if(!stream.transform(compressed_bytes,callback))return null;if(!stream.end(callback))return null;return sink.array();});}},{key:'decompressChunksUsingDict',value:function decompressChunksUsingDict(chunks,size_hint,ddict){return withBindingInstance(new binding.ZstdDecompressStreamBinding(),function(stream){var initial_size=size_hint||constants.STREAMING_DEFAULT_BUFFER_SIZE;var sink=new ArrayBufferSink(initial_size);var callback=function callback(decompressed){sink.concat(decompressed);};if(!stream.beginUsingDict(ddict.get()))return null;var _iteratorNormalCompletion4=true;var _didIteratorError4=false;var _iteratorError4=undefined;try{for(var _iterator4=chunks[Symbol.iterator](),_step4;!(_iteratorNormalCompletion4=(_step4=_iterator4.next()).done);_iteratorNormalCompletion4=true){var chunk=_step4.value;if(!stream.transform(chunk,callback))return null;}}catch(err){_didIteratorError4=true;_iteratorError4=err;}finally{try{if(!_iteratorNormalCompletion4&&_iterator4.return){_iterator4.return();}}finally{if(_didIteratorError4){throw _iteratorError4;}}}if(!stream.end(callback))return null;return sink.array();});}},{key:'_estimateContentSize',value:function _estimateContentSize(compressed_bytes){// REF: https://code.facebook.com/posts/1658392934479273/smaller-and-faster-data-compression-with-zstandard/\n// with lzbench, ratio=3.11 .. 3.14. round up to integer\nreturn compressed_bytes.length*4;}}]);return Streaming;}();var ZstdCompressionDict=function(){function ZstdCompressionDict(dict_bytes,compression_level){_classCallCheck(this,ZstdCompressionDict);this.binding=binding.createCompressionDict(dict_bytes,compression_level);}_createClass(ZstdCompressionDict,[{key:'get',value:function get(){return this.binding;}},{key:'close',value:function close(){if(this.binding){this.binding.delete();}}},{key:'delete',value:function _delete(){this.close();}}]);return ZstdCompressionDict;}();var ZstdDecompressionDict=function(){function ZstdDecompressionDict(dict_bytes){_classCallCheck(this,ZstdDecompressionDict);this.binding=new binding.createDecompressionDict(dict_bytes);}_createClass(ZstdDecompressionDict,[{key:'get',value:function get(){return this.binding;}},{key:'close',value:function close(){if(this.binding){this.binding.delete();}}},{key:'delete',value:function _delete(){this.close();}}]);return ZstdDecompressionDict;}();var zstd={};zstd.Generic=Generic;zstd.Simple=Simple;zstd.Streaming=Streaming;zstd.Dict={};zstd.Dict.Compress=ZstdCompressionDict;zstd.Dict.Decompress=ZstdDecompressionDict;return zstd;};exports.run=function(f){return require('./module.js').run(function(binding){var zstd=onReady(binding);f(zstd);});};\n\n},{\"./constants.js\":2,\"./helpers.js\":3,\"./module.js\":4}],8:[function(require,module,exports){\n'use strict';var _typeof=typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj;};var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if(\"value\"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor;};}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError(\"Cannot call a class as a function\");}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}return call&&(typeof call===\"object\"||typeof call===\"function\")?call:self;}function _inherits(subClass,superClass){if(typeof superClass!==\"function\"&&superClass!==null){throw new TypeError(\"Super expression must either be null or a function, not \"+typeof superClass);}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;}var stream=require('stream');var binding=require('./module.js').Binding;var constants=require('./constants.js');var helpers=require('./helpers.js');var getClassName=helpers.getClassName;var toTypedArray=helpers.toTypedArray;var fromTypedArrayToBuffer=helpers.fromTypedArrayToBuffer;var onReady=function onReady(binding){var ZstdCompressTransform=function(_stream$Transform){_inherits(ZstdCompressTransform,_stream$Transform);function ZstdCompressTransform(compression_level,string_decoder,option){_classCallCheck(this,ZstdCompressTransform);var _this=_possibleConstructorReturn(this,(ZstdCompressTransform.__proto__||Object.getPrototypeOf(ZstdCompressTransform)).call(this,option||{}));_this.string_decoder=string_decoder;_this.binding=new binding.ZstdCompressStreamBinding();_this.binding.begin(compression_level||constants.DEFAULT_COMPRESSION_LEVEL);_this.callback=function(compressed){_this.push(fromTypedArrayToBuffer(compressed),'buffer');};return _this;}_createClass(ZstdCompressTransform,[{key:'_transform',value:function _transform(chunk,encoding,callback){var chunkBytes=toTypedArray(chunk,encoding,this.string_decoder);if(!chunkBytes){var type_name=getClassName(chunk)||(typeof chunk==='undefined'?'undefined':_typeof(chunk));callback(new Error('unsupported chunk type: '+type_name));return;}if(this.binding.transform(chunkBytes,this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _transform'));}}},{key:'_flush',value:function _flush(callback){if(this.binding.flush(this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _flush'));}}},{key:'_final',value:function _final(callback){if(this.binding.end(this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _final'));}}}]);return ZstdCompressTransform;}(stream.Transform);var ZstdDecompressTransform=function(_stream$Transform2){_inherits(ZstdDecompressTransform,_stream$Transform2);function ZstdDecompressTransform(option){_classCallCheck(this,ZstdDecompressTransform);var _this2=_possibleConstructorReturn(this,(ZstdDecompressTransform.__proto__||Object.getPrototypeOf(ZstdDecompressTransform)).call(this,option||{}));_this2.binding=new binding.ZstdDecompressStreamBinding();_this2.binding.begin();_this2.callback=function(decompressed){_this2.push(fromTypedArrayToBuffer(decompressed),'buffer');};return _this2;}_createClass(ZstdDecompressTransform,[{key:'_transform',value:function _transform(chunk,encoding,callback){var chunkBytes=toTypedArray(chunk,encoding,this.string_decoder);if(!chunkBytes){var type_name=getClassName(chunk)||(typeof chunk==='undefined'?'undefined':_typeof(chunk));callback(new Error('unsupported chunk type: '+type_name));return;}if(this.binding.transform(chunk,this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _transform'));}}},{key:'_flush',value:function _flush(callback){if(this.binding.flush(this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _flush'));}}},{key:'_final',value:function _final(callback){if(this.binding.end(this.callback)){callback();}else{callback(new Error('ZstdDecompressTransform: Error on _final'));}}}]);return ZstdDecompressTransform;}(stream.Transform);var streams={};streams.ZstdCompressTransform=ZstdCompressTransform;streams.ZstdDecompressTransform=ZstdDecompressTransform;return streams;};exports=function exports(f){return require('./module.js').then(function(binding){var streams=onReady(binding);f(streams);});};\n\n},{\"./constants.js\":2,\"./helpers.js\":3,\"./module.js\":4,\"stream\":157}],9:[function(require,module,exports){\n\n},{}],10:[function(require,module,exports){\nvar asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n\n},{\"./asn1/api\":11,\"./asn1/base\":13,\"./asn1/constants\":17,\"./asn1/decoders\":19,\"./asn1/encoders\":22,\"bn.js\":25}],11:[function(require,module,exports){\nvar asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n\n  this.decoders = {};\n  this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n  var named;\n  try {\n    named = require('vm').runInThisContext(\n      '(function ' + this.name + '(entity) {\\n' +\n      '  this._initNamed(entity);\\n' +\n      '})'\n    );\n  } catch (e) {\n    named = function (entity) {\n      this._initNamed(entity);\n    };\n  }\n  inherits(named, base);\n  named.prototype._initNamed = function initnamed(entity) {\n    base.call(this, entity);\n  };\n\n  return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der';\n  // Lazily create decoder\n  if (!this.decoders.hasOwnProperty(enc))\n    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der';\n  // Lazily create encoder\n  if (!this.encoders.hasOwnProperty(enc))\n    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};\n\n},{\"../asn1\":10,\"inherits\":108,\"vm\":160}],12:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n  return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  var res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length)\n    return this.base.readUInt8(this.offset++, true);\n  else\n    return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length))\n    return this.error(fail || 'DecoderBuffer overrun');\n\n  var res = new DecoderBuffer(this.base);\n\n  // Share reporter state\n  res._reporterState = this._reporterState;\n\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function(item) {\n      if (!(item instanceof EncoderBuffer))\n        item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff))\n      return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + typeof value);\n  }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out)\n    out = new Buffer(this.length);\n  if (!offset)\n    offset = 0;\n\n  if (this.length === 0)\n    return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function(item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number')\n      out[offset] = this.value;\n    else if (typeof this.value === 'string')\n      out.write(this.value, offset);\n    else if (Buffer.isBuffer(this.value))\n      this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};\n\n},{\"../base\":13,\"buffer\":54,\"inherits\":108}],13:[function(require,module,exports){\nvar base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n\n},{\"./buffer\":12,\"./node\":14,\"./reporter\":15}],14:[function(require,module,exports){\nvar Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n  'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n  'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n  'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n  'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n  'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n  'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n  '_peekTag', '_decodeTag', '_use',\n  '_decodeStr', '_decodeObjid', '_decodeTime',\n  '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n  '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n  '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n  var state = {};\n  this._baseState = state;\n\n  state.enc = enc;\n\n  state.parent = parent || null;\n  state.children = null;\n\n  // State\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null;\n\n  // Should create new instance on each method\n  if (!state.parent) {\n    state.children = [];\n    this._wrap();\n  }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n  'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n  'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n  'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n  var state = this._baseState;\n  var cstate = {};\n  stateProps.forEach(function(prop) {\n    cstate[prop] = state[prop];\n  });\n  var res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  var state = this._baseState;\n  methods.forEach(function(method) {\n    this[method] = function _wrappedMethod() {\n      var clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  var state = this._baseState;\n\n  assert(state.parent === null);\n  body.call(this);\n\n  // Filter children\n  state.children = state.children.filter(function(child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  var state = this._baseState;\n\n  // Filter children and args\n  var children = args.filter(function(arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function(arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children;\n\n    // Replace parent to maintain backward link\n    children.forEach(function(child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function(arg) {\n      if (typeof arg !== 'object' || arg.constructor !== Object)\n        return arg;\n\n      var res = {};\n      Object.keys(arg).forEach(function(key) {\n        if (key == (key | 0))\n          key |= 0;\n        var value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n  Node.prototype[method] = function _overrided() {\n    var state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    var state = this._baseState;\n    var args = Array.prototype.slice.call(arguments);\n\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.use = item;\n\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  var state = this._baseState;\n\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  var state = this._baseState;\n\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  var state = this._baseState;\n\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  var state = this._baseState;\n  var args = Array.prototype.slice.call(arguments);\n\n  state.obj = true;\n\n  if (args.length !== 0)\n    this._useArgs(args);\n\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  var state = this._baseState;\n\n  assert(state.key === null);\n  state.key = newKey;\n\n  return this;\n};\n\nNode.prototype.any = function any() {\n  var state = this._baseState;\n\n  state.any = true;\n\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  var state = this._baseState;\n\n  assert(state.choice === null);\n  state.choice = obj;\n  this._useArgs(Object.keys(obj).map(function(key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  var state = this._baseState;\n\n  assert(state.use === null);\n  state.contains = item;\n\n  return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return input.wrapResult(state.children[0]._decode(input, options));\n\n  var result = state['default'];\n  var present = true;\n\n  var prevKey = null;\n  if (state.key !== null)\n    prevKey = input.enterKey(state.key);\n\n  // Check if tag is there\n  if (state.optional) {\n    var tag = null;\n    if (state.explicit !== null)\n      tag = state.explicit;\n    else if (state.implicit !== null)\n      tag = state.implicit;\n    else if (state.tag !== null)\n      tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      var save = input.save();\n      try {\n        if (state.choice === null)\n          this._decodeGeneric(state.tag, input, options);\n        else\n          this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n\n      if (input.isError(present))\n        return present;\n    }\n  }\n\n  // Push object on stack\n  var prevObj;\n  if (state.obj && present)\n    prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      var explicit = this._decodeTag(input, state.explicit);\n      if (input.isError(explicit))\n        return explicit;\n      input = explicit;\n    }\n\n    var start = input.offset;\n\n    // Unwrap implicit and normal values\n    if (state.use === null && state.choice === null) {\n      if (state.any)\n        var save = input.save();\n      var body = this._decodeTag(\n        input,\n        state.implicit !== null ? state.implicit : state.tag,\n        state.any\n      );\n      if (input.isError(body))\n        return body;\n\n      if (state.any)\n        result = input.raw(save);\n      else\n        input = body;\n    }\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), start, input.length, 'tagged');\n\n    if (options && options.track && state.tag !== null)\n      options.track(input.path(), input.offset, input.length, 'content');\n\n    // Select proper method for tag\n    if (state.any)\n      result = result;\n    else if (state.choice === null)\n      result = this._decodeGeneric(state.tag, input, options);\n    else\n      result = this._decodeChoice(input, options);\n\n    if (input.isError(result))\n      return result;\n\n    // Decode children\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    }\n\n    // Decode contained/encoded by schema, only in bit or octet strings\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      var data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)\n          ._decode(data, options);\n    }\n  }\n\n  // Pop object\n  if (state.obj && present)\n    result = input.leaveObject(prevObj);\n\n  // Set key\n  if (state.key !== null && (result !== null || present === true))\n    input.leaveKey(prevKey, state.key, result);\n  else if (prevKey !== null)\n    input.exitKey(prevKey);\n\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  var state = this._baseState;\n\n  if (tag === 'seq' || tag === 'set')\n    return null;\n  if (tag === 'seqof' || tag === 'setof')\n    return this._decodeList(input, tag, state.args[0], options);\n  else if (/str$/.test(tag))\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'objid' && state.args)\n    return this._decodeObjid(input, state.args[0], state.args[1], options);\n  else if (tag === 'objid')\n    return this._decodeObjid(input, null, null, options);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._decodeTime(input, tag, options);\n  else if (tag === 'null_')\n    return this._decodeNull(input, options);\n  else if (tag === 'bool')\n    return this._decodeBool(input, options);\n  else if (tag === 'objDesc')\n    return this._decodeStr(input, tag, options);\n  else if (tag === 'int' || tag === 'enum')\n    return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)\n        ._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n  var state = this._baseState;\n  // Create altered use decoder if implicit is set\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  var state = this._baseState;\n  var result = null;\n  var match = false;\n\n  Object.keys(state.choice).some(function(key) {\n    var save = input.save();\n    var node = state.choice[key];\n    try {\n      var value = node._decode(input, options);\n      if (input.isError(value))\n        return false;\n\n      result = { type: key, value: value };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n    return true;\n  }, this);\n\n  if (!match)\n    return input.error('Choice not matched');\n\n  return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  var state = this._baseState;\n  if (state['default'] !== null && state['default'] === data)\n    return;\n\n  var result = this._encodeValue(data, reporter, parent);\n  if (result === undefined)\n    return;\n\n  if (this._skipDefault(result, reporter, parent))\n    return;\n\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  var state = this._baseState;\n\n  // Decode root node\n  if (state.parent === null)\n    return state.children[0]._encode(data, reporter || new Reporter());\n\n  var result = null;\n\n  // Set reporter to share it with a child class\n  this.reporter = reporter;\n\n  // Check if data is there\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null)\n      data = state['default']\n    else\n      return;\n  }\n\n  // Encode children first\n  var content = null;\n  var primitive = false;\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function(child) {\n      if (child._baseState.tag === 'null_')\n        return child._encode(null, reporter, data);\n\n      if (child._baseState.key === null)\n        return reporter.error('Child should have a key');\n      var prevKey = reporter.enterKey(child._baseState.key);\n\n      if (typeof data !== 'object')\n        return reporter.error('Child expected, but input is not object');\n\n      var res = child._encode(data[child._baseState.key], reporter, data);\n      reporter.leaveKey(prevKey);\n\n      return res;\n    }, this).filter(function(child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1))\n        return reporter.error('Too many args for : ' + state.tag);\n\n      if (!Array.isArray(data))\n        return reporter.error('seqof/setof, but data is not Array');\n\n      var child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function(item) {\n        var state = this._baseState;\n\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  }\n\n  // Encode data itself\n  var result;\n  if (!state.any && state.choice === null) {\n    var tag = state.implicit !== null ? state.implicit : state.tag;\n    var cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null)\n        reporter.error('Tag could be ommited only for .use()');\n    } else {\n      if (state.use === null)\n        result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  }\n\n  // Wrap in explicit\n  if (state.explicit !== null)\n    result = this._encodeComposite(state.explicit, false, 'context', result);\n\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  var state = this._baseState;\n\n  var node = state.choice[data.type];\n  if (!node) {\n    assert(\n        false,\n        data.type + ' not found in ' +\n            JSON.stringify(Object.keys(state.choice)));\n  }\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  var state = this._baseState;\n\n  if (/str$/.test(tag))\n    return this._encodeStr(data, tag);\n  else if (tag === 'objid' && state.args)\n    return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n  else if (tag === 'objid')\n    return this._encodeObjid(data, null, null);\n  else if (tag === 'gentime' || tag === 'utctime')\n    return this._encodeTime(data, tag);\n  else if (tag === 'null_')\n    return this._encodeNull();\n  else if (tag === 'int' || tag === 'enum')\n    return this._encodeInt(data, state.args && state.reverseArgs[0]);\n  else if (tag === 'bool')\n    return this._encodeBool(data);\n  else if (tag === 'objDesc')\n    return this._encodeStr(data, tag);\n  else\n    throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n\n},{\"../base\":13,\"minimalistic-assert\":112}],15:[function(require,module,exports){\nvar inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  var state = this._reporterState;\n\n  return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n  var state = this._reporterState;\n\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  var state = this._reporterState;\n\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  var state = this._reporterState;\n\n  this.exitKey(index);\n  if (state.obj !== null)\n    state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  var state = this._reporterState;\n\n  var prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  var state = this._reporterState;\n\n  var now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  var err;\n  var state = this._reporterState;\n\n  var inherited = msg instanceof ReporterError;\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function(elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial)\n    throw err;\n\n  if (!inherited)\n    state.errors.push(err);\n\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  var state = this._reporterState;\n  if (!state.options.partial)\n    return result;\n\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace)\n    Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n  return this;\n};\n\n},{\"inherits\":108}],16:[function(require,module,exports){\nvar constants = require('../constants');\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n\n},{\"../constants\":17}],17:[function(require,module,exports){\nvar constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n  var res = {};\n\n  Object.keys(map).forEach(function(key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key)\n      key = key | 0;\n\n    var value = map[key];\n    res[value] = key;\n  });\n\n  return res;\n};\n\nconstants.der = require('./der');\n\n},{\"./der\":16}],18:[function(require,module,exports){\nvar inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!(data instanceof base.DecoderBuffer))\n    data = new base.DecoderBuffer(data, options);\n\n  return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty())\n    return false;\n\n  var state = buffer.save();\n  var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  buffer.restore(state);\n\n  return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n    (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  var decodedTag = derDecodeTag(buffer,\n                                'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag))\n    return decodedTag;\n\n  var len = derDecodeLen(buffer,\n                         decodedTag.primitive,\n                         'Failed to get length of \"' + tag + '\"');\n\n  // Failure\n  if (buffer.isError(len))\n    return len;\n\n  if (!any &&\n      decodedTag.tag !== tag &&\n      decodedTag.tagStr !== tag &&\n      decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null)\n    return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n  // Indefinite length... find END tag\n  var state = buffer.save();\n  var res = this._skipUntilEnd(\n      buffer,\n      'Failed to skip indefinite length body: \"' + this.tag + '\"');\n  if (buffer.isError(res))\n    return res;\n\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  while (true) {\n    var tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag))\n      return tag;\n    var len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len))\n      return len;\n\n    var res;\n    if (tag.primitive || len !== null)\n      res = buffer.skip(len)\n    else\n      res = this._skipUntilEnd(buffer, fail);\n\n    // Failure\n    if (buffer.isError(res))\n      return res;\n\n    if (tag.tagStr === 'end')\n      break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n                                                    options) {\n  var result = [];\n  while (!buffer.isEmpty()) {\n    var possibleEnd = this._peekTag(buffer, 'end');\n    if (buffer.isError(possibleEnd))\n      return possibleEnd;\n\n    var res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd)\n      break;\n    result.push(res);\n  }\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    var unused = buffer.readUInt8();\n    if (buffer.isError(unused))\n      return unused;\n    return { unused: unused, data: buffer.raw() };\n  } else if (tag === 'bmpstr') {\n    var raw = buffer.raw();\n    if (raw.length % 2 === 1)\n      return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n    var str = '';\n    for (var i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n    return str;\n  } else if (tag === 'numstr') {\n    var numstr = buffer.raw().toString('ascii');\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'numstr unsupported characters');\n    }\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    var printstr = buffer.raw().toString('ascii');\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' +\n                          'printstr unsupported characters');\n    }\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  var result;\n  var identifiers = [];\n  var ident = 0;\n  while (!buffer.isEmpty()) {\n    var subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n  if (subident & 0x80)\n    identifiers.push(ident);\n\n  var first = (identifiers[0] / 40) | 0;\n  var second = identifiers[0] % 40;\n\n  if (relative)\n    result = identifiers;\n  else\n    result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    var tmp = values[result.join(' ')];\n    if (tmp === undefined)\n      tmp = values[result.join('.')];\n    if (tmp !== undefined)\n      result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  var str = buffer.raw().toString();\n  if (tag === 'gentime') {\n    var year = str.slice(0, 4) | 0;\n    var mon = str.slice(4, 6) | 0;\n    var day = str.slice(6, 8) | 0;\n    var hour = str.slice(8, 10) | 0;\n    var min = str.slice(10, 12) | 0;\n    var sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    var year = str.slice(0, 2) | 0;\n    var mon = str.slice(2, 4) | 0;\n    var day = str.slice(4, 6) | 0;\n    var hour = str.slice(6, 8) | 0;\n    var min = str.slice(8, 10) | 0;\n    var sec = str.slice(10, 12) | 0;\n    if (year < 70)\n      year = 2000 + year;\n    else\n      year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  var res = buffer.readUInt8();\n  if (buffer.isError(res))\n    return res;\n  else\n    return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  var raw = buffer.raw();\n  var res = new bignum(raw);\n\n  if (values)\n    res = values[res.toString(10)] || res;\n\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n  var tag = buf.readUInt8(fail);\n  if (buf.isError(tag))\n    return tag;\n\n  var cls = der.tagClass[tag >> 6];\n  var primitive = (tag & 0x20) === 0;\n\n  // Multi-octet tag - load\n  if ((tag & 0x1f) === 0x1f) {\n    var oct = tag;\n    tag = 0;\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct))\n        return oct;\n\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n  var tagStr = der.tag[tag];\n\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  var len = buf.readUInt8(fail);\n  if (buf.isError(len))\n    return len;\n\n  // Indefinite form\n  if (!primitive && len === 0x80)\n    return null;\n\n  // Definite form\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  }\n\n  // Long form\n  var num = len & 0x7f;\n  if (num > 4)\n    return buf.error('length octect is too long');\n\n  len = 0;\n  for (var i = 0; i < num; i++) {\n    len <<= 8;\n    var j = buf.readUInt8(fail);\n    if (buf.isError(j))\n      return j;\n    len |= j;\n  }\n\n  return len;\n}\n\n},{\"../../asn1\":10,\"inherits\":108}],19:[function(require,module,exports){\nvar decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n\n},{\"./der\":18,\"./pem\":20}],20:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  var lines = data.toString().split(/[\\r\\n]+/g);\n\n  var label = options.label.toUpperCase();\n\n  var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  var start = -1;\n  var end = -1;\n  for (var i = 0; i < lines.length; i++) {\n    var match = lines[i].match(re);\n    if (match === null)\n      continue;\n\n    if (match[2] !== label)\n      continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN')\n        break;\n      start = i;\n    } else {\n      if (match[1] !== 'END')\n        break;\n      end = i;\n      break;\n    }\n  }\n  if (start === -1 || end === -1)\n    throw new Error('PEM section not found for: ' + label);\n\n  var base64 = lines.slice(start + 1, end).join('');\n  // Remove excessive symbols\n  base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n  var input = new Buffer(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};\n\n},{\"./der\":18,\"buffer\":54,\"inherits\":108}],21:[function(require,module,exports){\nvar inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity;\n\n  // Construct base tree\n  this.tree = new DERNode();\n  this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n                                                              primitive,\n                                                              cls,\n                                                              content) {\n  var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n  // Short form\n  if (content.length < 0x80) {\n    var header = new Buffer(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([ header, content ]);\n  }\n\n  // Long form\n  // Count octets required to store length\n  var lenOctets = 1;\n  for (var i = content.length; i >= 0x100; i >>= 8)\n    lenOctets++;\n\n  var header = new Buffer(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n    header[i] = j & 0xff;\n\n  return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n  } else if (tag === 'bmpstr') {\n    var buf = new Buffer(str.length * 2);\n    for (var i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' +\n                                 'only digits and space');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' +\n                                 'only latin upper and lower case letters, ' +\n                                 'digits, space, apostrophe, left and rigth ' +\n                                 'parenthesis, plus sign, comma, hyphen, ' +\n                                 'dot, slash, colon, equal sign, ' +\n                                 'question mark');\n    }\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag +\n                               ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values)\n      return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id))\n      return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s\\.]+/g);\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n    for (var i = 0; i < id.length; i++)\n      id[i] |= 0;\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' +\n                               'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40)\n      return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  }\n\n  // Count number of octets\n  var size = 0;\n  for (var i = 0; i < id.length; i++) {\n    var ident = id[i];\n    for (size++; ident >= 0x80; ident >>= 7)\n      size++;\n  }\n\n  var objid = new Buffer(size);\n  var offset = objid.length - 1;\n  for (var i = id.length - 1; i >= 0; i--) {\n    var ident = id[i];\n    objid[offset--] = ident & 0x7f;\n    while ((ident >>= 7) > 0)\n      objid[offset--] = 0x80 | (ident & 0x7f);\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10)\n    return '0' + num;\n  else\n    return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  var str;\n  var date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [\n      two(date.getFullYear()),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else if (tag === 'utctime') {\n    str = [\n      two(date.getFullYear() % 100),\n      two(date.getUTCMonth() + 1),\n      two(date.getUTCDate()),\n      two(date.getUTCHours()),\n      two(date.getUTCMinutes()),\n      two(date.getUTCSeconds()),\n      'Z'\n    ].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values)\n      return this.reporter.error('String int or enum given, but no values map');\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' +\n                                 JSON.stringify(num));\n    }\n    num = values[num];\n  }\n\n  // Bignum, assume big endian\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    var numArray = num.toArray();\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n    num = new Buffer(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    var size = num.length;\n    if (num.length === 0)\n      size++;\n\n    var out = new Buffer(size);\n    num.copy(out);\n    if (num.length === 0)\n      out[0] = 0\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80)\n    return this._createEncoderBuffer(num);\n\n  if (num < 0x100)\n    return this._createEncoderBuffer([0, num]);\n\n  var size = 1;\n  for (var i = num; i >= 0x100; i >>= 8)\n    size++;\n\n  var out = new Array(size);\n  for (var i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n  if(out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function')\n    entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  var state = this._baseState;\n  var i;\n  if (state['default'] === null)\n    return false;\n\n  var data = dataBuffer.join();\n  if (state.defaultBuffer === undefined)\n    state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n  if (data.length !== state.defaultBuffer.length)\n    return false;\n\n  for (i=0; i < data.length; i++)\n    if (data[i] !== state.defaultBuffer[i])\n      return false;\n\n  return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  var res;\n\n  if (tag === 'seqof')\n    tag = 'seq';\n  else if (tag === 'setof')\n    tag = 'set';\n\n  if (der.tagByName.hasOwnProperty(tag))\n    res = der.tagByName[tag];\n  else if (typeof tag === 'number' && (tag | 0) === tag)\n    res = tag;\n  else\n    return reporter.error('Unknown tag: ' + tag);\n\n  if (res >= 0x1f)\n    return reporter.error('Multi-octet tag encoding unsupported');\n\n  if (!primitive)\n    res |= 0x20;\n\n  res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n  return res;\n}\n\n},{\"../../asn1\":10,\"buffer\":54,\"inherits\":108}],22:[function(require,module,exports){\nvar encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n\n},{\"./der\":21,\"./pem\":23}],23:[function(require,module,exports){\nvar inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  var buf = DEREncoder.prototype.encode.call(this, data);\n\n  var p = buf.toString('base64');\n  var out = [ '-----BEGIN ' + options.label + '-----' ];\n  for (var i = 0; i < p.length; i += 64)\n    out.push(p.slice(i, i + 64));\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};\n\n},{\"./der\":21,\"inherits\":108}],24:[function(require,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n  var len = b64.length\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n  // base64 is 4/3 + up to two characters of the original data\n  return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n  var i, l, tmp, placeHolders, arr\n  var len = b64.length\n  placeHolders = placeHoldersCount(b64)\n\n  arr = new Arr((len * 3 / 4) - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0; i < l; i += 4) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n\n},{}],25:[function(require,module,exports){\n(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    Buffer = require('buffer').Buffer;\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n    }\n\n    if (base === 16) {\n      this._parseHex(number, start);\n    } else {\n      this._parseBase(number, base, start);\n    }\n\n    if (number[0] === '-') {\n      this.negative = 1;\n    }\n\n    this.strip();\n\n    if (endian !== 'le') return;\n\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex (str, start, end) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r <<= 4;\n\n      // 'a' - 'f'\n      if (c >= 49 && c <= 54) {\n        r |= c - 49 + 0xa;\n\n      // 'A' - 'F'\n      } else if (c >= 17 && c <= 22) {\n        r |= c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r |= c & 0xf;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    // Scan 24-bit chunks and add them to the number\n    var off = 0;\n    for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n      w = parseHex(number, i, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n      off += 24;\n      if (off >= 26) {\n        off -= 26;\n        j++;\n      }\n    }\n    if (i + 6 !== start) {\n      w = parseHex(number, start, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n    }\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      r.strip();\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n\n},{\"buffer\":27}],26:[function(require,module,exports){\nvar r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n\n},{\"crypto\":27}],27:[function(require,module,exports){\narguments[4][9][0].apply(exports,arguments)\n},{\"dup\":9}],28:[function(require,module,exports){\n(function (Buffer){\n// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar uint_max = Math.pow(2, 32)\nfunction fixup_uint32 (x) {\n  var ret, x_pos\n  ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x\n  return ret\n}\nfunction scrub_vec (v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0\n  }\n  return false\n}\n\nfunction Global () {\n  this.SBOX = []\n  this.INV_SBOX = []\n  this.SUB_MIX = [[], [], [], []]\n  this.INV_SUB_MIX = [[], [], [], []]\n  this.init()\n  this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\n}\n\nGlobal.prototype.init = function () {\n  var d, i, sx, t, x, x2, x4, x8, xi, _i\n  d = (function () {\n    var _i, _results\n    _results = []\n    for (i = _i = 0; _i < 256; i = ++_i) {\n      if (i < 128) {\n        _results.push(i << 1)\n      } else {\n        _results.push((i << 1) ^ 0x11b)\n      }\n    }\n    return _results\n  })()\n  x = 0\n  xi = 0\n  for (i = _i = 0; _i < 256; i = ++_i) {\n    sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n    sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n    this.SBOX[x] = sx\n    this.INV_SBOX[sx] = x\n    x2 = d[x]\n    x4 = d[x2]\n    x8 = d[x4]\n    t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n    this.SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n    this.SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n    this.SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n    this.SUB_MIX[3][x] = t\n    t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n    this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n    this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n    this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n    this.INV_SUB_MIX[3][sx] = t\n    if (x === 0) {\n      x = xi = 1\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]]\n      xi ^= d[d[xi]]\n    }\n  }\n  return true\n}\n\nvar G = new Global()\n\nAES.blockSize = 4 * 4\n\nAES.prototype.blockSize = AES.blockSize\n\nAES.keySize = 256 / 8\n\nAES.prototype.keySize = AES.keySize\n\nfunction bufferToArray (buf) {\n  var len = buf.length / 4\n  var out = new Array(len)\n  var i = -1\n  while (++i < len) {\n    out[i] = buf.readUInt32BE(i * 4)\n  }\n  return out\n}\nfunction AES (key) {\n  this._key = bufferToArray(key)\n  this._doReset()\n}\n\nAES.prototype._doReset = function () {\n  var invKsRow, keySize, keyWords, ksRow, ksRows, t\n  keyWords = this._key\n  keySize = keyWords.length\n  this._nRounds = keySize + 6\n  ksRows = (this._nRounds + 1) * 4\n  this._keySchedule = []\n  for (ksRow = 0; ksRow < ksRows; ksRow++) {\n    this._keySchedule[ksRow] = ksRow < keySize ? keyWords[ksRow] : (t = this._keySchedule[ksRow - 1], (ksRow % keySize) === 0 ? (t = (t << 8) | (t >>> 24), t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff], t ^= G.RCON[(ksRow / keySize) | 0] << 24) : keySize > 6 && ksRow % keySize === 4 ? t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff] : void 0, this._keySchedule[ksRow - keySize] ^ t)\n  }\n  this._invKeySchedule = []\n  for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n    ksRow = ksRows - invKsRow\n    t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)]\n    this._invKeySchedule[invKsRow] = invKsRow < 4 || ksRow <= 4 ? t : G.INV_SUB_MIX[0][G.SBOX[t >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(t >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(t >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[t & 0xff]]\n  }\n  return true\n}\n\nAES.prototype.encryptBlock = function (M) {\n  M = bufferToArray(new Buffer(M))\n  var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX)\n  var buf = new Buffer(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n  M = bufferToArray(new Buffer(M))\n  var temp = [M[3], M[1]]\n  M[1] = temp[0]\n  M[3] = temp[1]\n  var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX)\n  var buf = new Buffer(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[3], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[1], 12)\n  return buf\n}\n\nAES.prototype.scrub = function () {\n  scrub_vec(this._keySchedule)\n  scrub_vec(this._invKeySchedule)\n  scrub_vec(this._key)\n}\n\nAES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) {\n  var ksRow, s0, s1, s2, s3, t0, t1, t2, t3\n\n  s0 = M[0] ^ keySchedule[0]\n  s1 = M[1] ^ keySchedule[1]\n  s2 = M[2] ^ keySchedule[2]\n  s3 = M[3] ^ keySchedule[3]\n  ksRow = 4\n  for (var round = 1; round < this._nRounds; round++) {\n    t0 = SUB_MIX[0][s0 >>> 24] ^ SUB_MIX[1][(s1 >>> 16) & 0xff] ^ SUB_MIX[2][(s2 >>> 8) & 0xff] ^ SUB_MIX[3][s3 & 0xff] ^ keySchedule[ksRow++]\n    t1 = SUB_MIX[0][s1 >>> 24] ^ SUB_MIX[1][(s2 >>> 16) & 0xff] ^ SUB_MIX[2][(s3 >>> 8) & 0xff] ^ SUB_MIX[3][s0 & 0xff] ^ keySchedule[ksRow++]\n    t2 = SUB_MIX[0][s2 >>> 24] ^ SUB_MIX[1][(s3 >>> 16) & 0xff] ^ SUB_MIX[2][(s0 >>> 8) & 0xff] ^ SUB_MIX[3][s1 & 0xff] ^ keySchedule[ksRow++]\n    t3 = SUB_MIX[0][s3 >>> 24] ^ SUB_MIX[1][(s0 >>> 16) & 0xff] ^ SUB_MIX[2][(s1 >>> 8) & 0xff] ^ SUB_MIX[3][s2 & 0xff] ^ keySchedule[ksRow++]\n    s0 = t0\n    s1 = t1\n    s2 = t2\n    s3 = t3\n  }\n  t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n  t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n  t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n  t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n  return [\n    fixup_uint32(t0),\n    fixup_uint32(t1),\n    fixup_uint32(t2),\n    fixup_uint32(t3)\n  ]\n}\n\nexports.AES = AES\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],29:[function(require,module,exports){\n(function (Buffer){\nvar aes = require('./aes')\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\ninherits(StreamCipher, Transform)\nmodule.exports = StreamCipher\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n  if (!(this instanceof StreamCipher)) {\n    return new StreamCipher(mode, key, iv)\n  }\n  Transform.call(this)\n  this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])])\n  iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])])\n  this._cipher = new aes.AES(key)\n  this._prev = new Buffer(iv.length)\n  this._cache = new Buffer('')\n  this._secCache = new Buffer('')\n  this._decrypt = decrypt\n  this._alen = 0\n  this._len = 0\n  iv.copy(this._prev)\n  this._mode = mode\n  var h = new Buffer(4)\n  h.fill(0)\n  this._ghash = new GHASH(this._cipher.encryptBlock(h))\n  this._authTag = null\n  this._called = false\n}\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - (this._alen % 16)\n    if (rump < 16) {\n      rump = new Buffer(rump)\n      rump.fill(0)\n      this._ghash.update(rump)\n    }\n  }\n  this._called = true\n  var out = this._mode.encrypt(this, chunk)\n  if (this._decrypt) {\n    this._ghash.update(chunk)\n  } else {\n    this._ghash.update(out)\n  }\n  this._len += chunk.length\n  return out\n}\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) {\n    throw new Error('Unsupported state or unable to authenticate data')\n  }\n  var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n  if (this._decrypt) {\n    if (xorTest(tag, this._authTag)) {\n      throw new Error('Unsupported state or unable to authenticate data')\n    }\n  } else {\n    this._authTag = tag\n  }\n  this._cipher.scrub()\n}\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n  if (!this._decrypt && Buffer.isBuffer(this._authTag)) {\n    return this._authTag\n  } else {\n    throw new Error('Attempting to get auth tag in unsupported state')\n  }\n}\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n  if (this._decrypt) {\n    this._authTag = tag\n  } else {\n    throw new Error('Attempting to set auth tag in unsupported state')\n  }\n}\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n  if (!this._called) {\n    this._ghash.update(buf)\n    this._alen += buf.length\n  } else {\n    throw new Error('Attempting to set AAD in unsupported state')\n  }\n}\nfunction xorTest (a, b) {\n  var out = 0\n  if (a.length !== b.length) {\n    out++\n  }\n  var len = Math.min(a.length, b.length)\n  var i = -1\n  while (++i < len) {\n    out += (a[i] ^ b[i])\n  }\n  return out\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aes\":28,\"./ghash\":33,\"buffer\":54,\"buffer-xor\":53,\"cipher-base\":55,\"inherits\":108}],30:[function(require,module,exports){\nvar ciphers = require('./encrypter')\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nvar deciphers = require('./decrypter')\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nvar modes = require('./modes')\nfunction getCiphers () {\n  return Object.keys(modes)\n}\nexports.listCiphers = exports.getCiphers = getCiphers\n\n},{\"./decrypter\":31,\"./encrypter\":32,\"./modes\":34}],31:[function(require,module,exports){\n(function (Buffer){\nvar aes = require('./aes')\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar modes = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar AuthCipher = require('./authCipher')\nvar ebtk = require('evp_bytestokey')\n\ninherits(Decipher, Transform)\nfunction Decipher (mode, key, iv) {\n  if (!(this instanceof Decipher)) {\n    return new Decipher(mode, key, iv)\n  }\n  Transform.call(this)\n  this._cache = new Splitter()\n  this._last = void 0\n  this._cipher = new aes.AES(key)\n  this._prev = new Buffer(iv.length)\n  iv.copy(this._prev)\n  this._mode = mode\n  this._autopadding = true\n}\nDecipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get(this._autopadding))) {\n    thing = this._mode.decrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk))\n  } else if (chunk) {\n    throw new Error('data not multiple of block length')\n  }\n}\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\nfunction Splitter () {\n  if (!(this instanceof Splitter)) {\n    return new Splitter()\n  }\n  this.cache = new Buffer('')\n}\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n  var out\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16)\n      this.cache = this.cache.slice(16)\n      return out\n    }\n  }\n  return null\n}\nSplitter.prototype.flush = function () {\n  if (this.cache.length) {\n    return this.cache\n  }\n}\nfunction unpad (last) {\n  var padded = last[15]\n  var i = -1\n  while (++i < padded) {\n    if (last[(i + (16 - padded))] !== padded) {\n      throw new Error('unable to decrypt data')\n    }\n  }\n  if (padded === 16) {\n    return\n  }\n  return last.slice(0, 16 - padded)\n}\n\nvar modelist = {\n  ECB: require('./modes/ecb'),\n  CBC: require('./modes/cbc'),\n  CFB: require('./modes/cfb'),\n  CFB8: require('./modes/cfb8'),\n  CFB1: require('./modes/cfb1'),\n  OFB: require('./modes/ofb'),\n  CTR: require('./modes/ctr'),\n  GCM: require('./modes/ctr')\n}\n\nfunction createDecipheriv (suite, password, iv) {\n  var config = modes[suite.toLowerCase()]\n  if (!config) {\n    throw new TypeError('invalid suite type')\n  }\n  if (typeof iv === 'string') {\n    iv = new Buffer(iv)\n  }\n  if (typeof password === 'string') {\n    password = new Buffer(password)\n  }\n  if (password.length !== config.key / 8) {\n    throw new TypeError('invalid key length ' + password.length)\n  }\n  if (iv.length !== config.iv) {\n    throw new TypeError('invalid iv length ' + iv.length)\n  }\n  if (config.type === 'stream') {\n    return new StreamCipher(modelist[config.mode], password, iv, true)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(modelist[config.mode], password, iv, true)\n  }\n  return new Decipher(modelist[config.mode], password, iv)\n}\n\nfunction createDecipher (suite, password) {\n  var config = modes[suite.toLowerCase()]\n  if (!config) {\n    throw new TypeError('invalid suite type')\n  }\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aes\":28,\"./authCipher\":29,\"./modes\":34,\"./modes/cbc\":35,\"./modes/cfb\":36,\"./modes/cfb1\":37,\"./modes/cfb8\":38,\"./modes/ctr\":39,\"./modes/ecb\":40,\"./modes/ofb\":41,\"./streamCipher\":42,\"buffer\":54,\"cipher-base\":55,\"evp_bytestokey\":91,\"inherits\":108}],32:[function(require,module,exports){\n(function (Buffer){\nvar aes = require('./aes')\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar modes = require('./modes')\nvar ebtk = require('evp_bytestokey')\nvar StreamCipher = require('./streamCipher')\nvar AuthCipher = require('./authCipher')\ninherits(Cipher, Transform)\nfunction Cipher (mode, key, iv) {\n  if (!(this instanceof Cipher)) {\n    return new Cipher(mode, key, iv)\n  }\n  Transform.call(this)\n  this._cache = new Splitter()\n  this._cipher = new aes.AES(key)\n  this._prev = new Buffer(iv.length)\n  iv.copy(this._prev)\n  this._mode = mode\n  this._autopadding = true\n}\nCipher.prototype._update = function (data) {\n  this._cache.add(data)\n  var chunk\n  var thing\n  var out = []\n  while ((chunk = this._cache.get())) {\n    thing = this._mode.encrypt(this, chunk)\n    out.push(thing)\n  }\n  return Buffer.concat(out)\n}\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush()\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk)\n    this._cipher.scrub()\n    return chunk\n  } else if (chunk.toString('hex') !== '10101010101010101010101010101010') {\n    this._cipher.scrub()\n    throw new Error('data not multiple of block length')\n  }\n}\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo\n  return this\n}\n\nfunction Splitter () {\n  if (!(this instanceof Splitter)) {\n    return new Splitter()\n  }\n  this.cache = new Buffer('')\n}\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    return out\n  }\n  return null\n}\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length\n  var padBuff = new Buffer(len)\n\n  var i = -1\n  while (++i < len) {\n    padBuff.writeUInt8(len, i)\n  }\n  var out = Buffer.concat([this.cache, padBuff])\n  return out\n}\nvar modelist = {\n  ECB: require('./modes/ecb'),\n  CBC: require('./modes/cbc'),\n  CFB: require('./modes/cfb'),\n  CFB8: require('./modes/cfb8'),\n  CFB1: require('./modes/cfb1'),\n  OFB: require('./modes/ofb'),\n  CTR: require('./modes/ctr'),\n  GCM: require('./modes/ctr')\n}\n\nfunction createCipheriv (suite, password, iv) {\n  var config = modes[suite.toLowerCase()]\n  if (!config) {\n    throw new TypeError('invalid suite type')\n  }\n  if (typeof iv === 'string') {\n    iv = new Buffer(iv)\n  }\n  if (typeof password === 'string') {\n    password = new Buffer(password)\n  }\n  if (password.length !== config.key / 8) {\n    throw new TypeError('invalid key length ' + password.length)\n  }\n  if (iv.length !== config.iv) {\n    throw new TypeError('invalid iv length ' + iv.length)\n  }\n  if (config.type === 'stream') {\n    return new StreamCipher(modelist[config.mode], password, iv)\n  } else if (config.type === 'auth') {\n    return new AuthCipher(modelist[config.mode], password, iv)\n  }\n  return new Cipher(modelist[config.mode], password, iv)\n}\nfunction createCipher (suite, password) {\n  var config = modes[suite.toLowerCase()]\n  if (!config) {\n    throw new TypeError('invalid suite type')\n  }\n  var keys = ebtk(password, false, config.key, config.iv)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aes\":28,\"./authCipher\":29,\"./modes\":34,\"./modes/cbc\":35,\"./modes/cfb\":36,\"./modes/cfb1\":37,\"./modes/cfb8\":38,\"./modes/ctr\":39,\"./modes/ecb\":40,\"./modes/ofb\":41,\"./streamCipher\":42,\"buffer\":54,\"cipher-base\":55,\"evp_bytestokey\":91,\"inherits\":108}],33:[function(require,module,exports){\n(function (Buffer){\nvar zeros = new Buffer(16)\nzeros.fill(0)\nmodule.exports = GHASH\nfunction GHASH (key) {\n  this.h = key\n  this.state = new Buffer(16)\n  this.state.fill(0)\n  this.cache = new Buffer('')\n}\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n  var i = -1\n  while (++i < block.length) {\n    this.state[i] ^= block[i]\n  }\n  this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h)\n  var Zi = [0, 0, 0, 0]\n  var j, xi, lsb_Vi\n  var i = -1\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi = xor(Zi, Vi)\n    }\n\n    // Store the value of LSB(V_i)\n    lsb_Vi = (Vi[3] & 1) !== 0\n\n    // V_i+1 = V_i >> 1\n    for (j = 3; j > 0; j--) {\n      Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n    }\n    Vi[0] = Vi[0] >>> 1\n\n    // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n    if (lsb_Vi) {\n      Vi[0] = Vi[0] ^ (0xe1 << 24)\n    }\n  }\n  this.state = fromArray(Zi)\n}\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf])\n  var chunk\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16)\n    this.cache = this.cache.slice(16)\n    this.ghash(chunk)\n  }\n}\nGHASH.prototype.final = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, zeros], 16))\n  }\n  this.ghash(fromArray([\n    0, abl,\n    0, bl\n  ]))\n  return this.state\n}\n\nfunction toArray (buf) {\n  return [\n    buf.readUInt32BE(0),\n    buf.readUInt32BE(4),\n    buf.readUInt32BE(8),\n    buf.readUInt32BE(12)\n  ]\n}\nfunction fromArray (out) {\n  out = out.map(fixup_uint32)\n  var buf = new Buffer(16)\n  buf.writeUInt32BE(out[0], 0)\n  buf.writeUInt32BE(out[1], 4)\n  buf.writeUInt32BE(out[2], 8)\n  buf.writeUInt32BE(out[3], 12)\n  return buf\n}\nvar uint_max = Math.pow(2, 32)\nfunction fixup_uint32 (x) {\n  var ret, x_pos\n  ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x\n  return ret\n}\nfunction xor (a, b) {\n  return [\n    a[0] ^ b[0],\n    a[1] ^ b[1],\n    a[2] ^ b[2],\n    a[3] ^ b[3]\n  ]\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],34:[function(require,module,exports){\nexports['aes-128-ecb'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 0,\n  mode: 'ECB',\n  type: 'block'\n}\nexports['aes-192-ecb'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 0,\n  mode: 'ECB',\n  type: 'block'\n}\nexports['aes-256-ecb'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 0,\n  mode: 'ECB',\n  type: 'block'\n}\nexports['aes-128-cbc'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CBC',\n  type: 'block'\n}\nexports['aes-192-cbc'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CBC',\n  type: 'block'\n}\nexports['aes-256-cbc'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CBC',\n  type: 'block'\n}\nexports['aes128'] = exports['aes-128-cbc']\nexports['aes192'] = exports['aes-192-cbc']\nexports['aes256'] = exports['aes-256-cbc']\nexports['aes-128-cfb'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CFB',\n  type: 'stream'\n}\nexports['aes-192-cfb'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CFB',\n  type: 'stream'\n}\nexports['aes-256-cfb'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CFB',\n  type: 'stream'\n}\nexports['aes-128-cfb8'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CFB8',\n  type: 'stream'\n}\nexports['aes-192-cfb8'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CFB8',\n  type: 'stream'\n}\nexports['aes-256-cfb8'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CFB8',\n  type: 'stream'\n}\nexports['aes-128-cfb1'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CFB1',\n  type: 'stream'\n}\nexports['aes-192-cfb1'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CFB1',\n  type: 'stream'\n}\nexports['aes-256-cfb1'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CFB1',\n  type: 'stream'\n}\nexports['aes-128-ofb'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'OFB',\n  type: 'stream'\n}\nexports['aes-192-ofb'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'OFB',\n  type: 'stream'\n}\nexports['aes-256-ofb'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'OFB',\n  type: 'stream'\n}\nexports['aes-128-ctr'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 16,\n  mode: 'CTR',\n  type: 'stream'\n}\nexports['aes-192-ctr'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 16,\n  mode: 'CTR',\n  type: 'stream'\n}\nexports['aes-256-ctr'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 16,\n  mode: 'CTR',\n  type: 'stream'\n}\nexports['aes-128-gcm'] = {\n  cipher: 'AES',\n  key: 128,\n  iv: 12,\n  mode: 'GCM',\n  type: 'auth'\n}\nexports['aes-192-gcm'] = {\n  cipher: 'AES',\n  key: 192,\n  iv: 12,\n  mode: 'GCM',\n  type: 'auth'\n}\nexports['aes-256-gcm'] = {\n  cipher: 'AES',\n  key: 256,\n  iv: 12,\n  mode: 'GCM',\n  type: 'auth'\n}\n\n},{}],35:[function(require,module,exports){\nvar xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev)\n\n  self._prev = self._cipher.encryptBlock(data)\n  return self._prev\n}\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev\n\n  self._prev = block\n  var out = self._cipher.decryptBlock(block)\n\n  return xor(out, pad)\n}\n\n},{\"buffer-xor\":53}],36:[function(require,module,exports){\n(function (Buffer){\nvar xor = require('buffer-xor')\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = new Buffer('')\n  var len\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev)\n      self._prev = new Buffer('')\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n      data = data.slice(len)\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n      break\n    }\n  }\n\n  return out\n}\nfunction encryptStart (self, data, decrypt) {\n  var len = data.length\n  var out = xor(data, self._cache)\n  self._cache = self._cache.slice(len)\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n  return out\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"buffer-xor\":53}],37:[function(require,module,exports){\n(function (Buffer){\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad\n  var i = -1\n  var len = 8\n  var out = 0\n  var bit, value\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev)\n    bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n    value = pad[0] ^ bit\n    out += ((value & 0x80) >> (i % 8))\n    self._prev = shiftIn(self._prev, decrypt ? bit : value)\n  }\n  return out\n}\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = new Buffer(len)\n  var i = -1\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n  return out\n}\nfunction shiftIn (buffer, value) {\n  var len = buffer.length\n  var i = -1\n  var out = new Buffer(buffer.length)\n  buffer = Buffer.concat([buffer, new Buffer([value])])\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n  }\n  return out\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],38:[function(require,module,exports){\n(function (Buffer){\nfunction encryptByte (self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev)\n  var out = pad[0] ^ byteParam\n  self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])])\n  return out\n}\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length\n  var out = new Buffer(len)\n  var i = -1\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt)\n  }\n  return out\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],39:[function(require,module,exports){\n(function (Buffer){\nvar xor = require('buffer-xor')\n\nfunction incr32 (iv) {\n  var len = iv.length\n  var item\n  while (len--) {\n    item = iv.readUInt8(len)\n    if (item === 255) {\n      iv.writeUInt8(0, len)\n    } else {\n      item++\n      iv.writeUInt8(item, len)\n      break\n    }\n  }\n}\n\nfunction getBlock (self) {\n  var out = self._cipher.encryptBlock(self._prev)\n  incr32(self._prev)\n  return out\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"buffer-xor\":53}],40:[function(require,module,exports){\nexports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block)\n}\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block)\n}\n\n},{}],41:[function(require,module,exports){\n(function (Buffer){\nvar xor = require('buffer-xor')\n\nfunction getBlock (self) {\n  self._prev = self._cipher.encryptBlock(self._prev)\n  return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)])\n  }\n\n  var pad = self._cache.slice(0, chunk.length)\n  self._cache = self._cache.slice(chunk.length)\n  return xor(chunk, pad)\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"buffer-xor\":53}],42:[function(require,module,exports){\n(function (Buffer){\nvar aes = require('./aes')\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\ninherits(StreamCipher, Transform)\nmodule.exports = StreamCipher\nfunction StreamCipher (mode, key, iv, decrypt) {\n  if (!(this instanceof StreamCipher)) {\n    return new StreamCipher(mode, key, iv)\n  }\n  Transform.call(this)\n  this._cipher = new aes.AES(key)\n  this._prev = new Buffer(iv.length)\n  this._cache = new Buffer('')\n  this._secCache = new Buffer('')\n  this._decrypt = decrypt\n  iv.copy(this._prev)\n  this._mode = mode\n}\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt)\n}\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub()\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aes\":28,\"buffer\":54,\"cipher-base\":55,\"inherits\":108}],43:[function(require,module,exports){\nvar ebtk = require('evp_bytestokey')\nvar aes = require('browserify-aes/browser')\nvar DES = require('browserify-des')\nvar desModes = require('browserify-des/modes')\nvar aesModes = require('browserify-aes/modes')\nfunction createCipher (suite, password) {\n  var keyLen, ivLen\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createCipheriv(suite, keys.key, keys.iv)\n}\nfunction createDecipher (suite, password) {\n  var keyLen, ivLen\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key\n    ivLen = aesModes[suite].iv\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8\n    ivLen = desModes[suite].iv\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n  var keys = ebtk(password, false, keyLen, ivLen)\n  return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) {\n    return aes.createCipheriv(suite, key, iv)\n  } else if (desModes[suite]) {\n    return new DES({\n      key: key,\n      iv: iv,\n      mode: suite\n    })\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n}\nfunction createDecipheriv (suite, key, iv) {\n  suite = suite.toLowerCase()\n  if (aesModes[suite]) {\n    return aes.createDecipheriv(suite, key, iv)\n  } else if (desModes[suite]) {\n    return new DES({\n      key: key,\n      iv: iv,\n      mode: suite,\n      decrypt: true\n    })\n  } else {\n    throw new TypeError('invalid suite type')\n  }\n}\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nfunction getCiphers () {\n  return Object.keys(desModes).concat(aes.getCiphers())\n}\nexports.listCiphers = exports.getCiphers = getCiphers\n\n},{\"browserify-aes/browser\":30,\"browserify-aes/modes\":34,\"browserify-des\":44,\"browserify-des/modes\":45,\"evp_bytestokey\":91}],44:[function(require,module,exports){\n(function (Buffer){\nvar CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n  CipherBase.call(this)\n  var modeName = opts.mode.toLowerCase()\n  var mode = modes[modeName]\n  var type\n  if (opts.decrypt) {\n    type = 'decrypt'\n  } else {\n    type = 'encrypt'\n  }\n  var key = opts.key\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)])\n  }\n  var iv = opts.iv\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  })\n}\nDES.prototype._update = function (data) {\n  return new Buffer(this._des.update(data))\n}\nDES.prototype._final = function () {\n  return new Buffer(this._des.final())\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"cipher-base\":55,\"des.js\":64,\"inherits\":108}],45:[function(require,module,exports){\nexports['des-ecb'] = {\n  key: 8,\n  iv: 0\n}\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n}\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n}\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n}\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n}\n\n},{}],46:[function(require,module,exports){\n(function (Buffer){\nvar bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n  var r = getr(priv);\n  var blinder = r.toRed(bn.mont(priv.modulus))\n  .redPow(new bn(priv.publicExponent)).fromRed();\n  return {\n    blinder: blinder,\n    unblinder:r.invm(priv.modulus)\n  };\n}\nfunction crt(msg, priv) {\n  var blinds = blind(priv);\n  var len = priv.modulus.byteLength();\n  var mod = bn.mont(priv.modulus);\n  var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n  var c1 = blinded.toRed(bn.mont(priv.prime1));\n  var c2 = blinded.toRed(bn.mont(priv.prime2));\n  var qinv = priv.coefficient;\n  var p = priv.prime1;\n  var q = priv.prime2;\n  var m1 = c1.redPow(priv.exponent1);\n  var m2 = c2.redPow(priv.exponent2);\n  m1 = m1.fromRed();\n  m2 = m2.fromRed();\n  var h = m1.isub(m2).imul(qinv).umod(p);\n  h.imul(q);\n  m2.iadd(h);\n  return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n  var len = priv.modulus.byteLength();\n  var r = new bn(randomBytes(len));\n  while (r.cmp(priv.modulus) >=  0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n    r = new bn(randomBytes(len));\n  }\n  return r;\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":25,\"buffer\":54,\"randombytes\":133}],47:[function(require,module,exports){\nmodule.exports = require('./browser/algorithms.json')\n\n},{\"./browser/algorithms.json\":48}],48:[function(require,module,exports){\nmodule.exports={\n  \"sha224WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"RSA-SHA224\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"302d300d06096086480165030402040500041c\"\n  },\n  \"sha256WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"RSA-SHA256\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"3031300d060960864801650304020105000420\"\n  },\n  \"sha384WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"RSA-SHA384\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"3041300d060960864801650304020205000430\"\n  },\n  \"sha512WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA512\": {\n    \"sign\": \"ecdsa/rsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"3051300d060960864801650304020305000440\"\n  },\n  \"RSA-SHA1\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"3021300906052b0e03021a05000414\"\n  },\n  \"ecdsa-with-SHA1\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"sha256\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"sha224\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"sha384\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"sha512\": {\n    \"sign\": \"ecdsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA1\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha1\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA224\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha224\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA256\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha256\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA384\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha384\",\n    \"id\": \"\"\n  },\n  \"DSA-WITH-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-SHA512\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"sha512\",\n    \"id\": \"\"\n  },\n  \"DSA-RIPEMD160\": {\n    \"sign\": \"dsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"\"\n  },\n  \"ripemd160WithRSA\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"RSA-RIPEMD160\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"rmd160\",\n    \"id\": \"3021300906052b2403020105000414\"\n  },\n  \"md5WithRSAEncryption\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  },\n  \"RSA-MD5\": {\n    \"sign\": \"rsa\",\n    \"hash\": \"md5\",\n    \"id\": \"3020300c06082a864886f70d020505000410\"\n  }\n}\n\n},{}],49:[function(require,module,exports){\nmodule.exports={\n  \"1.3.132.0.10\": \"secp256k1\",\n  \"1.3.132.0.33\": \"p224\",\n  \"1.2.840.10045.3.1.1\": \"p192\",\n  \"1.2.840.10045.3.1.7\": \"p256\",\n  \"1.3.132.0.34\": \"p384\",\n  \"1.3.132.0.35\": \"p521\"\n}\n\n},{}],50:[function(require,module,exports){\n(function (Buffer){\nvar createHash = require('create-hash')\nvar stream = require('stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = new Buffer(algorithms[key].id, 'hex')\n  algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hashType = data.hash\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nSign.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n  this.end()\n  var hash = this._hash.digest()\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n  return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n  stream.Writable.call(this)\n\n  var data = algorithms[algorithm]\n  if (!data) throw new Error('Unknown message digest')\n\n  this._hash = createHash(data.hash)\n  this._tag = data.id\n  this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n  this._hash.update(data)\n  done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc)\n\n  this._hash.update(data)\n  return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n  if (typeof sig === 'string') sig = new Buffer(sig, enc)\n\n  this.end()\n  var hash = this._hash.digest()\n  return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n  return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n  return new Verify(algorithm)\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./algorithms.json\":48,\"./sign\":51,\"./verify\":52,\"buffer\":54,\"create-hash\":58,\"inherits\":108,\"stream\":157}],51:[function(require,module,exports){\n(function (Buffer){\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key)\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n    return ecSign(hash, priv)\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong private key type')\n    return dsaSign(hash, priv, hashType)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = priv.modulus.byteLength()\n  var pad = [ 0, 1 ]\n  while (hash.length + pad.length + 1 < len) pad.push(0xff)\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) pad.push(hash[i])\n\n  var out = crt(pad, priv)\n  return out\n}\n\nfunction ecSign (hash, priv) {\n  var curveId = curves[priv.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var key = curve.keyFromPrivate(priv.privateKey)\n  var out = key.sign(hash)\n\n  return new Buffer(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n  var x = priv.params.priv_key\n  var p = priv.params.p\n  var q = priv.params.q\n  var g = priv.params.g\n  var r = new BN(0)\n  var k\n  var H = bits2int(hash, q).mod(q)\n  var s = false\n  var kv = getKey(x, q, hash, algo)\n  while (s === false) {\n    k = makeKey(q, kv, algo)\n    r = makeR(g, k, p, q)\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n    if (s.cmpn(0) === 0) {\n      s = false\n      r = new BN(0)\n    }\n  }\n  return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n  r = r.toArray()\n  s = s.toArray()\n\n  // Pad values\n  if (r[0] & 0x80) r = [ 0 ].concat(r)\n  if (s[0] & 0x80) s = [ 0 ].concat(s)\n\n  var total = r.length + s.length + 4\n  var res = [ 0x30, total, 0x02, r.length ]\n  res = res.concat(r, [ 0x02, s.length ], s)\n  return new Buffer(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n  x = new Buffer(x.toArray())\n  if (x.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - x.length)\n    zeros.fill(0)\n    x = Buffer.concat([ zeros, x ])\n  }\n  var hlen = hash.length\n  var hbits = bits2octets(hash, q)\n  var v = new Buffer(hlen)\n  v.fill(1)\n  var k = new Buffer(hlen)\n  k.fill(0)\n  k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()\n  v = createHmac(algo, k).update(v).digest()\n  return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n  var bits = new BN(obits)\n  var shift = (obits.length << 3) - q.bitLength()\n  if (shift > 0) bits.ishrn(shift)\n  return bits\n}\n\nfunction bits2octets (bits, q) {\n  bits = bits2int(bits, q)\n  bits = bits.mod(q)\n  var out = new Buffer(bits.toArray())\n  if (out.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - out.length)\n    zeros.fill(0)\n    out = Buffer.concat([ zeros, out ])\n  }\n  return out\n}\n\nfunction makeKey (q, kv, algo) {\n  var t\n  var k\n\n  do {\n    t = new Buffer(0)\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n      t = Buffer.concat([ t, kv.v ])\n    }\n\n    k = bits2int(t, q)\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n  } while (k.cmp(q) !== -1)\n\n  return k\n}\n\nfunction makeR (g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./curves.json\":49,\"bn.js\":25,\"browserify-rsa\":46,\"buffer\":54,\"create-hmac\":61,\"elliptic\":74,\"parse-asn1\":118}],52:[function(require,module,exports){\n(function (Buffer){\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n  var pub = parseKeys(key)\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n    return ecVerify(sig, hash, pub)\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong public key type')\n    return dsaVerify(sig, hash, pub)\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n  }\n  hash = Buffer.concat([tag, hash])\n  var len = pub.modulus.byteLength()\n  var pad = [ 1 ]\n  var padNum = 0\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff)\n    padNum++\n  }\n  pad.push(0x00)\n  var i = -1\n  while (++i < hash.length) {\n    pad.push(hash[i])\n  }\n  pad = new Buffer(pad)\n  var red = BN.mont(pub.modulus)\n  sig = new BN(sig).toRed(red)\n\n  sig = sig.redPow(new BN(pub.publicExponent))\n  sig = new Buffer(sig.fromRed().toArray())\n  var out = padNum < 8 ? 1 : 0\n  len = Math.min(sig.length, pad.length)\n  if (sig.length !== pad.length) out = 1\n\n  i = -1\n  while (++i < len) out |= sig[i] ^ pad[i]\n  return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')]\n  if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n  var curve = new EC(curveId)\n  var pubkey = pub.data.subjectPrivateKey.data\n\n  return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n  var p = pub.data.p\n  var q = pub.data.q\n  var g = pub.data.g\n  var y = pub.data.pub_key\n  var unpacked = parseKeys.signature.decode(sig, 'der')\n  var s = unpacked.s\n  var r = unpacked.r\n  checkValue(s, q)\n  checkValue(r, q)\n  var montp = BN.mont(p)\n  var w = s.invm(q)\n  var v = g.toRed(montp)\n    .redPow(new BN(hash).mul(w).mod(q))\n    .fromRed()\n    .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n    .mod(p)\n    .mod(q)\n  return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n  if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n  if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./curves.json\":49,\"bn.js\":25,\"buffer\":54,\"elliptic\":74,\"parse-asn1\":118}],53:[function(require,module,exports){\n(function (Buffer){\nmodule.exports = function xor (a, b) {\n  var length = Math.min(a.length, b.length)\n  var buffer = new Buffer(length)\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i]\n  }\n\n  return buffer\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],54:[function(require,module,exports){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('Invalid typed array length')\n  }\n  // Return an augmented `Uint8Array` instance\n  var buf = new Uint8Array(length)\n  buf.__proto__ = Buffer.prototype\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species &&\n    Buffer[Symbol.species] === Buffer) {\n  Object.defineProperty(Buffer, Symbol.species, {\n    value: null,\n    configurable: true,\n    enumerable: false,\n    writable: false\n  })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (isArrayBuffer(value)) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  return fromObject(value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  var buf = createBuffer(length)\n\n  var actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  var buf = createBuffer(length)\n  for (var i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  var buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  buf.__proto__ = Buffer.prototype\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    var buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj) {\n    if (isArrayBufferView(obj) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n        return createBuffer(0)\n      }\n      return fromArrayLike(obj)\n    }\n\n    if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n      return fromArrayLike(obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (isArrayBufferView(string) || isArrayBuffer(string)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  newBuf.__proto__ = Buffer.prototype\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    var limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : new Buffer(val, encoding)\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check\n// but they should be treated as valid. See: https://github.com/feross/buffer/issues/166\nfunction isArrayBuffer (obj) {\n  return obj instanceof ArrayBuffer ||\n    (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' &&\n      typeof obj.byteLength === 'number')\n}\n\n// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`\nfunction isArrayBufferView (obj) {\n  return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)\n}\n\nfunction numberIsNaN (obj) {\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n},{\"base64-js\":24,\"ieee754\":106}],55:[function(require,module,exports){\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n  Transform.call(this)\n  this.hashMode = typeof hashMode === 'string'\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest\n  } else {\n    this.final = this._finalOrDigest\n  }\n  if (this._final) {\n    this.__final = this._final\n    this._final = null\n  }\n  this._decoder = null\n  this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc)\n  }\n\n  var outData = this._update(data)\n  if (this.hashMode) return this\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc)\n  }\n\n  return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err\n  try {\n    if (this.hashMode) {\n      this._update(data)\n    } else {\n      this.push(this._update(data))\n    }\n  } catch (e) {\n    err = e\n  } finally {\n    next(err)\n  }\n}\nCipherBase.prototype._flush = function (done) {\n  var err\n  try {\n    this.push(this.__final())\n  } catch (e) {\n    err = e\n  }\n\n  done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0)\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true)\n  }\n  return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc)\n    this._encoding = enc\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n  var out = this._decoder.write(value)\n  if (fin) {\n    out += this._decoder.end()\n  }\n\n  return out\n}\n\nmodule.exports = CipherBase\n\n},{\"inherits\":108,\"safe-buffer\":148,\"stream\":157,\"string_decoder\":158}],56:[function(require,module,exports){\n(function (Buffer){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n}).call(this,{\"isBuffer\":require(\"../../is-buffer/index.js\")})\n},{\"../../is-buffer/index.js\":109}],57:[function(require,module,exports){\n(function (Buffer){\nvar elliptic = require('elliptic');\nvar BN = require('bn.js');\n\nmodule.exports = function createECDH(curve) {\n\treturn new ECDH(curve);\n};\n\nvar aliases = {\n\tsecp256k1: {\n\t\tname: 'secp256k1',\n\t\tbyteLength: 32\n\t},\n\tsecp224r1: {\n\t\tname: 'p224',\n\t\tbyteLength: 28\n\t},\n\tprime256v1: {\n\t\tname: 'p256',\n\t\tbyteLength: 32\n\t},\n\tprime192v1: {\n\t\tname: 'p192',\n\t\tbyteLength: 24\n\t},\n\ted25519: {\n\t\tname: 'ed25519',\n\t\tbyteLength: 32\n\t},\n\tsecp384r1: {\n\t\tname: 'p384',\n\t\tbyteLength: 48\n\t},\n\tsecp521r1: {\n\t\tname: 'p521',\n\t\tbyteLength: 66\n\t}\n};\n\naliases.p224 = aliases.secp224r1;\naliases.p256 = aliases.secp256r1 = aliases.prime256v1;\naliases.p192 = aliases.secp192r1 = aliases.prime192v1;\naliases.p384 = aliases.secp384r1;\naliases.p521 = aliases.secp521r1;\n\nfunction ECDH(curve) {\n\tthis.curveType = aliases[curve];\n\tif (!this.curveType ) {\n\t\tthis.curveType = {\n\t\t\tname: curve\n\t\t};\n\t}\n\tthis.curve = new elliptic.ec(this.curveType.name);\n\tthis.keys = void 0;\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n\tthis.keys = this.curve.genKeyPair();\n\treturn this.getPublicKey(enc, format);\n};\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n\tinenc = inenc || 'utf8';\n\tif (!Buffer.isBuffer(other)) {\n\t\tother = new Buffer(other, inenc);\n\t}\n\tvar otherPub = this.curve.keyFromPublic(other).getPublic();\n\tvar out = otherPub.mul(this.keys.getPrivate()).getX();\n\treturn formatReturnValue(out, enc, this.curveType.byteLength);\n};\n\nECDH.prototype.getPublicKey = function (enc, format) {\n\tvar key = this.keys.getPublic(format === 'compressed', true);\n\tif (format === 'hybrid') {\n\t\tif (key[key.length - 1] % 2) {\n\t\t\tkey[0] = 7;\n\t\t} else {\n\t\t\tkey [0] = 6;\n\t\t}\n\t}\n\treturn formatReturnValue(key, enc);\n};\n\nECDH.prototype.getPrivateKey = function (enc) {\n\treturn formatReturnValue(this.keys.getPrivate(), enc);\n};\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n\tenc = enc || 'utf8';\n\tif (!Buffer.isBuffer(pub)) {\n\t\tpub = new Buffer(pub, enc);\n\t}\n\tthis.keys._importPublic(pub);\n\treturn this;\n};\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n\tenc = enc || 'utf8';\n\tif (!Buffer.isBuffer(priv)) {\n\t\tpriv = new Buffer(priv, enc);\n\t}\n\tvar _priv = new BN(priv);\n\t_priv = _priv.toString(16);\n\tthis.keys._importPrivate(_priv);\n\treturn this;\n};\n\nfunction formatReturnValue(bn, enc, len) {\n\tif (!Array.isArray(bn)) {\n\t\tbn = bn.toArray();\n\t}\n\tvar buf = new Buffer(bn);\n\tif (len && buf.length < len) {\n\t\tvar zeros = new Buffer(len - buf.length);\n\t\tzeros.fill(0);\n\t\tbuf = Buffer.concat([zeros, buf]);\n\t}\n\tif (!enc) {\n\t\treturn buf;\n\t} else {\n\t\treturn buf.toString(enc);\n\t}\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":25,\"buffer\":54,\"elliptic\":74}],58:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nvar inherits = require('inherits')\nvar md5 = require('./md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar Base = require('cipher-base')\n\nfunction HashNoConstructor (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n  this.buffers = []\n}\n\ninherits(HashNoConstructor, Base)\n\nHashNoConstructor.prototype._update = function (data) {\n  this.buffers.push(data)\n}\n\nHashNoConstructor.prototype._final = function () {\n  var buf = Buffer.concat(this.buffers)\n  var r = this._hash(buf)\n  this.buffers = null\n\n  return r\n}\n\nfunction Hash (hash) {\n  Base.call(this, 'digest')\n\n  this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n  return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n  alg = alg.toLowerCase()\n  if (alg === 'md5') return new HashNoConstructor(md5)\n  if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())\n\n  return new Hash(sha(alg))\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./md5\":60,\"buffer\":54,\"cipher-base\":55,\"inherits\":108,\"ripemd160\":147,\"sha.js\":150}],59:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nvar intSize = 4\nvar zeroBuffer = new Buffer(intSize)\nzeroBuffer.fill(0)\n\nvar charSize = 8\nvar hashSize = 16\n\nfunction toArray (buf) {\n  if ((buf.length % intSize) !== 0) {\n    var len = buf.length + (intSize - (buf.length % intSize))\n    buf = Buffer.concat([buf, zeroBuffer], len)\n  }\n\n  var arr = new Array(buf.length >>> 2)\n  for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {\n    arr[j] = buf.readInt32LE(i)\n  }\n\n  return arr\n}\n\nmodule.exports = function hash (buf, fn) {\n  var arr = fn(toArray(buf), buf.length * charSize)\n  buf = new Buffer(hashSize)\n  for (var i = 0; i < arr.length; i++) {\n    buf.writeInt32LE(arr[i], i << 2, true)\n  }\n  return buf\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],60:[function(require,module,exports){\n'use strict'\n/*\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\nvar makeHash = require('./make-hash')\n\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length\n */\nfunction core_md5 (x, len) {\n  /* append padding */\n  x[len >> 5] |= 0x80 << ((len) % 32)\n  x[(((len + 64) >>> 9) << 4) + 14] = len\n\n  var a = 1732584193\n  var b = -271733879\n  var c = -1732584194\n  var d = 271733878\n\n  for (var i = 0; i < x.length; i += 16) {\n    var olda = a\n    var oldb = b\n    var oldc = c\n    var oldd = d\n\n    a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)\n    d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)\n    c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)\n    b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)\n    a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)\n    d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)\n    c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)\n    b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)\n    a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)\n    d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)\n    c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)\n    b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)\n    a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)\n    d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)\n    c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)\n    b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)\n\n    a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)\n    d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)\n    c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)\n    b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)\n    a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)\n    d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)\n    c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)\n    b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)\n    a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)\n    d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)\n    c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)\n    b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)\n    a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)\n    d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)\n    c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)\n    b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)\n\n    a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)\n    d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)\n    c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)\n    b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)\n    a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)\n    d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)\n    c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)\n    b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)\n    a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)\n    d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)\n    c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)\n    b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)\n    a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)\n    d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)\n    c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)\n    b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)\n\n    a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)\n    d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)\n    c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)\n    b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)\n    a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)\n    d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)\n    c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)\n    b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)\n    a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)\n    d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)\n    c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)\n    b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)\n    a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)\n    d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)\n    c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)\n    b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)\n\n    a = safe_add(a, olda)\n    b = safe_add(b, oldb)\n    c = safe_add(c, oldc)\n    d = safe_add(d, oldd)\n  }\n\n  return [a, b, c, d]\n}\n\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\nfunction md5_cmn (q, a, b, x, s, t) {\n  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)\n}\n\nfunction md5_ff (a, b, c, d, x, s, t) {\n  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)\n}\n\nfunction md5_gg (a, b, c, d, x, s, t) {\n  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)\n}\n\nfunction md5_hh (a, b, c, d, x, s, t) {\n  return md5_cmn(b ^ c ^ d, a, b, x, s, t)\n}\n\nfunction md5_ii (a, b, c, d, x, s, t) {\n  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)\n}\n\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\nfunction safe_add (x, y) {\n  var lsw = (x & 0xFFFF) + (y & 0xFFFF)\n  var msw = (x >> 16) + (y >> 16) + (lsw >> 16)\n  return (msw << 16) | (lsw & 0xFFFF)\n}\n\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\nfunction bit_rol (num, cnt) {\n  return (num << cnt) | (num >>> (32 - cnt))\n}\n\nmodule.exports = function md5 (buf) {\n  return makeHash(buf, core_md5)\n}\n\n},{\"./make-hash\":59}],61:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  this._alg = alg\n  this._key = key\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n    key = hash.update(key).digest()\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n  this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest()\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n  return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n  alg = alg.toLowerCase()\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key)\n  }\n  if (alg === 'md5') {\n    return new Legacy(md5, key)\n  }\n  return new Hmac(alg, key)\n}\n\n},{\"./legacy\":62,\"cipher-base\":55,\"create-hash/md5\":60,\"inherits\":108,\"ripemd160\":147,\"safe-buffer\":148,\"sha.js\":150}],62:[function(require,module,exports){\n'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n  Base.call(this, 'digest')\n  if (typeof key === 'string') {\n    key = Buffer.from(key)\n  }\n\n  this._alg = alg\n  this._key = key\n\n  if (key.length > blocksize) {\n    key = alg(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n  var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash))\n  return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n\n},{\"cipher-base\":55,\"inherits\":108,\"safe-buffer\":148}],63:[function(require,module,exports){\n'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n  return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nexports.createCredentials = function () {\n  throw new Error([\n    'sorry, createCredentials is not implemented yet',\n    'we accept pull requests',\n    'https://github.com/crypto-browserify/crypto-browserify'\n  ].join('\\n'))\n}\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n}\n\n},{\"browserify-cipher\":43,\"browserify-sign\":50,\"browserify-sign/algos\":47,\"create-ecdh\":57,\"create-hash\":58,\"create-hmac\":61,\"diffie-hellman\":70,\"pbkdf2\":120,\"public-encrypt\":127,\"randombytes\":133}],64:[function(require,module,exports){\n'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n\n},{\"./des/cbc\":65,\"./des/cipher\":66,\"./des/des\":67,\"./des/ede\":68,\"./des/utils\":69}],65:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n\n  this.iv = new Array(8);\n  for (var i = 0; i < this.iv.length; i++)\n    this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n    this._cbcInit();\n  }\n  inherits(CBC, Base);\n\n  var keys = Object.keys(proto);\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n\n  var iv = state.iv;\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] ^= inp[inOff + i];\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = out[outOff + i];\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++)\n      out[outOff + i] ^= iv[i];\n\n    for (var i = 0; i < this.blockSize; i++)\n      iv[i] = inp[inOff + i];\n  }\n};\n\n},{\"inherits\":108,\"minimalistic-assert\":112}],66:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n\n  this.type = this.options.type;\n  this.blockSize = 8;\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n  // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0)\n    return [];\n\n  if (this.type === 'decrypt')\n    return this._updateDecrypt(data);\n  else\n    return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n  for (var i = 0; i < min; i++)\n    this.buffer[this.bufferOff + i] = data[off + i];\n  this.bufferOff += min;\n\n  // Shift next\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n\n    if (this.bufferOff === this.buffer.length)\n      outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Write blocks\n  var max = data.length - ((data.length - inputOff) % this.blockSize);\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n    outputOff += this.blockSize;\n  }\n\n  // Queue rest\n  for (; inputOff < data.length; inputOff++, this.bufferOff++)\n    this.buffer[this.bufferOff] = data[inputOff];\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize);\n\n  // TODO(indutny): optimize it, this is far from optimal\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  }\n\n  // Buffer rest of the input\n  inputOff += this._buffer(data, inputOff);\n\n  return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n  var first;\n  if (buffer)\n    first = this.update(buffer);\n\n  var last;\n  if (this.type === 'encrypt')\n    last = this._finalEncrypt();\n  else\n    last = this._finalDecrypt();\n\n  if (first)\n    return first.concat(last);\n  else\n    return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0)\n    return false;\n\n  while (off < buffer.length)\n    buffer[off++] = 0;\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff))\n    return [];\n\n  var out = new Array(this.blockSize);\n  this._update(this.buffer, 0, out, 0);\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};\n\n},{\"minimalistic-assert\":112}],67:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar utils = des.utils;\nvar Cipher = des.Cipher;\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n\n  var state = new DESState();\n  this._desState = state;\n\n  this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [\n  1, 1, 2, 2, 2, 2, 2, 2,\n  1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4);\n\n  // Initial Permutation\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  if (this.type === 'encrypt')\n    this._encrypt(state, l, r, state.tmp, 0);\n  else\n    this._decrypt(state, l, r, state.tmp, 0);\n\n  l = state.tmp[0];\n  r = state.tmp[1];\n\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  var value = buffer.length - off;\n  for (var i = off; i < buffer.length; i++)\n    buffer[i] = value;\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  var pad = buffer[buffer.length - 1];\n  for (var i = buffer.length - pad; i < buffer.length; i++)\n    assert.equal(buffer[i], pad);\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart;\n\n  // Apply f() x16 times\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(r, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart;\n\n  // Apply f() x16 times\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1];\n\n    // f(r, k)\n    utils.expand(l, state.tmp, 0);\n\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  }\n\n  // Reverse Initial Permutation\n  utils.rip(l, r, out, off);\n};\n\n},{\"../des\":64,\"inherits\":108,\"minimalistic-assert\":112}],68:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar Cipher = des.Cipher;\nvar DES = des.DES;\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [\n      DES.create({ type: 'encrypt', key: k1 }),\n      DES.create({ type: 'decrypt', key: k2 }),\n      DES.create({ type: 'encrypt', key: k3 })\n    ];\n  } else {\n    this.ciphers = [\n      DES.create({ type: 'decrypt', key: k3 }),\n      DES.create({ type: 'encrypt', key: k2 }),\n      DES.create({ type: 'decrypt', key: k1 })\n    ];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n  state.ciphers[1]._update(out, outOff, out, outOff);\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n\n},{\"../des\":64,\"inherits\":108,\"minimalistic-assert\":112}],69:[function(require,module,exports){\n'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res =  (bytes[0 + off] << 24) |\n             (bytes[1 + off] << 16) |\n             (bytes[2 + off] << 8) |\n             bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = (value >>> 16) & 0xff;\n  bytes[2 + off] = (value >>> 8) & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n    }\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= (inR >>> (j + i)) & 1;\n      outL <<= 1;\n      outL |= (inL >>> (j + i)) & 1;\n    }\n  }\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= (inR >>> (j + i)) & 1;\n      outR <<= 1;\n      outR |= (inL >>> (j + i)) & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= (inR >> (j + i)) & 1;\n  }\n\n  // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inR >> (j + i)) & 1;\n    }\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= (inL >> (j + i)) & 1;\n    }\n  }\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= (inL >> (j + i)) & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n  // inL => outL\n  14, 11, 17, 4, 27, 23, 25, 0,\n  13, 22, 7, 18, 5, 9, 16, 24,\n  2, 20, 12, 21, 1, 8, 15, 26,\n\n  // inR => outR\n  15, 4, 25, 19, 9, 1, 26, 16,\n  5, 11, 23, 8, 12, 7, 17, 0,\n  22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  var len = pc2table.length >>> 1;\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= (inL >>> pc2table[i]) & 0x1;\n  }\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= (inR >>> pc2table[i]) & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  outL = ((r & 1) << 5) | (r >>> 27);\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= (r >>> i) & 0x3f;\n  }\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= (r >>> i) & 0x3f;\n    outR <<= 6;\n  }\n  outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n  14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n  3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n  4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n  15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n  15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n  9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n  0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n  5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n  10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n  1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n  13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n  11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n  7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n  1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n  10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n  15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n  2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n  8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n  4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n  15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n  12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n  0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n  9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n  7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n  4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n  3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n  1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n  10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n  13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n  10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n  7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n  0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n  for (var i = 0; i < 4; i++) {\n    var b = (inL >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  for (var i = 0; i < 4; i++) {\n    var b = (inR >>> (18 - i * 6)) & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n    out <<= 4;\n    out |= sb;\n  }\n  return out >>> 0;\n};\n\nvar permuteTable = [\n  16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n  30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n  var out = 0;\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= (num >>> permuteTable[i]) & 0x1;\n  }\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n  while (str.length < size)\n    str = '0' + str;\n\n  var out = [];\n  for (var i = 0; i < size; i += group)\n    out.push(str.slice(i, i + group));\n  return out.join(' ');\n};\n\n},{}],70:[function(require,module,exports){\n(function (Buffer){\nvar generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex')\n  var gen = new Buffer(primes[mod].gen, 'hex')\n\n  return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n  'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator)\n  }\n\n  enc = enc || 'binary'\n  genc = genc || 'binary'\n  generator = generator || new Buffer([2])\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc)\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true)\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc)\n  }\n\n  return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./lib/dh\":71,\"./lib/generatePrime\":72,\"./lib/primes.json\":73,\"buffer\":54}],71:[function(require,module,exports){\n(function (Buffer){\nvar BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n  var error = 0;\n\n  if (prime.isEven() ||\n    !primes.simpleSieve ||\n    !primes.fermatTest(prime) ||\n    !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n    primeCache[hex] = error;\n    return error;\n  }\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n  var rem;\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n      break;\n    case '05':\n      rem = prime.mod(TEN);\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n      break;\n    default:\n      error += 4;\n  }\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function () {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n    return this._primeCode;\n  }\n});\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./generatePrime\":72,\"bn.js\":25,\"buffer\":54,\"miller-rabin\":111,\"randombytes\":133}],72:[function(require,module,exports){\nvar randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null)\n    return primes;\n\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n    for (var j = 0; j < i && res[j] <= sqrt; j++)\n      if (k % res[j] === 0)\n        break;\n\n    if (i !== j && res[j] <= sqrt)\n      continue;\n\n    res[i++] = k;\n  }\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++)\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n  gen = new BN(gen);\n\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n    n2 = num.shrn(1);\n    if (simpleSieve(n2) && simpleSieve(num) &&\n      fermatTest(n2) && fermatTest(num) &&\n      millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n\n}\n\n},{\"bn.js\":25,\"miller-rabin\":111,\"randombytes\":133}],73:[function(require,module,exports){\nmodule.exports={\n    \"modp1\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n    },\n    \"modp2\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n    },\n    \"modp5\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n    },\n    \"modp14\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n    },\n    \"modp15\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n    },\n    \"modp16\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n    },\n    \"modp17\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n    },\n    \"modp18\": {\n        \"gen\": \"02\",\n        \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n    }\n}\n},{}],74:[function(require,module,exports){\n'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n\n},{\"../package.json\":89,\"./elliptic/curve\":77,\"./elliptic/curves\":80,\"./elliptic/ec\":81,\"./elliptic/eddsa\":84,\"./elliptic/utils\":88,\"brorand\":26}],75:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16);\n\n  // Use Montgomery, when there is no fast reduction for the prime\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n  // Useful for many curves\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red);\n\n  // Curve configuration, optional\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n  // Temporary arrays\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4);\n\n  // Generalized Greg Maxwell's trick\n  var adjustCount = this.n && this.p.div(this.n);\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  for (var j = 0; j < naf.length; j += doubles.step) {\n    var nafW = 0;\n    for (var k = j + doubles.step - 1; k >= j; k--)\n      nafW = (nafW << 1) + naf[k];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (var j = 0; j < repr.length; j++) {\n      var nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var k = 0; i >= 0 && naf[i] === 0; i--)\n      k++;\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n                                                       points,\n                                                       coeffs,\n                                                       len,\n                                                       jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  for (var i = 0; i < len; i++) {\n    var p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (var i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a]);\n      naf[b] = getNAF(coeffs[b], wndWidth[b]);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b] /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (var j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (var i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (var j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (var j = 0; j < len; j++) {\n      var z = tmp[j];\n      var p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (var i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n                          bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n\n},{\"../../elliptic\":74,\"bn.js\":25}],76:[function(require,module,exports){\n'use strict';\n\nvar curve = require('../curve');\nvar elliptic = require('../../elliptic');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - 1) / (d y^2 + 1)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.one);\n  var rhs = y2.redMul(this.d).redAdd(this.one);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n         this.y.cmp(this.z) === 0;\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // E = a * C\n    var e = this.curve._mulA(c);\n    // F = E + D\n    var f = e.redAdd(d);\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F^2 - 2 * F\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      var h = this.z.redSqr();\n      // J = F - 2 * H\n      var j = f.redSub(h).redISub(h);\n      // X3 = (B-C-D)*J\n      nx = b.redSub(c).redISub(d).redMul(j);\n      // Y3 = F * (E - D)\n      ny = f.redMul(e.redSub(d));\n      // Z3 = F * J\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    var e = c.redAdd(d);\n    // H = (c * Z1)^2\n    var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();\n    // J = E - 2 * H\n    var j = e.redSub(h).redSub(h);\n    // X3 = c * (B - E) * J\n    nx = this.curve._mulC(b.redISub(e)).redMul(j);\n    // Y3 = c * E * (C - D)\n    ny = this.curve._mulC(e).redMul(c.redISub(d));\n    // Z3 = E * J\n    nz = e.redMul(j);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  // Double in extended coordinates\n  if (this.curve.extended)\n    return this._extDbl();\n  else\n    return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n  // B = (Y1 + X1) * (Y2 + X2)\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n  // C = T1 * k * T2\n  var c = this.t.redMul(this.curve.dd).redMul(p.t);\n  // D = Z1 * 2 * Z2\n  var d = this.z.redMul(p.z.redAdd(p.z));\n  // E = B - A\n  var e = b.redSub(a);\n  // F = D - C\n  var f = d.redSub(c);\n  // G = D + C\n  var g = d.redAdd(c);\n  // H = B + A\n  var h = b.redAdd(a);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z);\n  // B = A^2\n  var b = a.redSqr();\n  // C = X1 * X2\n  var c = this.x.redMul(p.x);\n  // D = Y1 * Y2\n  var d = this.y.redMul(p.y);\n  // E = d * C * D\n  var e = this.curve.d.redMul(c).redMul(d);\n  // F = B - E\n  var f = b.redSub(e);\n  // G = B + E\n  var g = b.redAdd(e);\n  // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n    // Z3 = F * G\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c));\n    // Z3 = c * F * G\n    nz = this.curve._mulC(f).redMul(g);\n  }\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity())\n    return p;\n  if (p.isInfinity())\n    return this;\n\n  if (this.curve.extended)\n    return this._extAdd(p);\n  else\n    return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne)\n    return this;\n\n  // Normalize coordinates\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t)\n    this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(),\n                          this.y,\n                          this.z,\n                          this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other ||\n         this.getX().cmp(other.getX()) === 0 &&\n         this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n  return false;\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n\n},{\"../../elliptic\":74,\"../curve\":77,\"bn.js\":25,\"inherits\":108}],77:[function(require,module,exports){\n'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n\n},{\"./base\":75,\"./edwards\":76,\"./mont\":78,\"./short\":79}],78:[function(require,module,exports){\n'use strict';\n\nvar curve = require('../curve');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n  }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n  // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n\n},{\"../../elliptic\":74,\"../curve\":77,\"bn.js\":25,\"inherits\":108}],79:[function(require,module,exports){\n'use strict';\n\nvar curve = require('../curve');\nvar elliptic = require('../../elliptic');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = curve.base;\n\nvar assert = elliptic.utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16)\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 }\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n  var npoints = this._endoWnafT1;\n  var ncoeffs = this._endoWnafT2;\n  for (var i = 0; i < points.length; i++) {\n    var split = this._endoSplit(coeffs[i]);\n    var p = points[i];\n    var beta = p._getBeta();\n\n    if (split.k1.negative) {\n      split.k1.ineg();\n      p = p.neg(true);\n    }\n    if (split.k2.negative) {\n      split.k2.ineg();\n      beta = beta.neg(true);\n    }\n\n    npoints[i * 2] = p;\n    npoints[i * 2 + 1] = beta;\n    ncoeffs[i * 2] = split.k1;\n    ncoeffs[i * 2 + 1] = split.k2;\n  }\n  var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n  // Clean-up references to points and coefficients\n  for (var j = 0; j < i * 2; j++) {\n    npoints[j] = null;\n    ncoeffs[j] = null;\n  }\n  return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul)\n      }\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1)\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1)\n    }\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point))\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point))\n    }\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n\n  if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate)\n      }\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (var i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (var i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n  return false;\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\n},{\"../../elliptic\":74,\"../curve\":77,\"bn.js\":25,\"inherits\":108}],80:[function(require,module,exports){\n'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar elliptic = require('../elliptic');\n\nvar assert = elliptic.utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new elliptic.curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new elliptic.curve.edwards(options);\n  else\n    this.curve = new elliptic.curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve\n      });\n      return curve;\n    }\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n    '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n  ]\n});\n\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n    'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n  ]\n});\n\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n    '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n  ]\n});\n\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n     '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n     'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: [\n    'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n    '5502f25d bf55296c 3a545e38 72760ab7',\n    '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n    '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n  ]\n});\n\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n     '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n     '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n     'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n     'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n    '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n    'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n    '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n    '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n    '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n  ]\n});\n\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '9'\n  ]\n});\n\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658'\n  ]\n});\n\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3'\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15'\n    }\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre\n  ]\n});\n\n},{\"../elliptic\":74,\"./precomputed/secp256k1\":87,\"hash.js\":93}],81:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n    options = elliptic.curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof elliptic.curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash for function for DRBG\n  this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options)\n    options = {};\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray()\n  });\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  do {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0)\n    msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0)\n    return msg.sub(this.n);\n  else\n    return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (typeof enc === 'object') {\n    options = enc;\n    enc = null;\n  }\n  if (!options)\n    options = {};\n\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16));\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8'\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; true; iter++) {\n    var k = options.k ?\n        options.k(iter) :\n        new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n\n  if (!this.curve._maxwellTrick) {\n    var p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n\n},{\"../../elliptic\":74,\"./key\":82,\"./signature\":83,\"bn.js\":25,\"hmac-drbg\":105}],82:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n\n  if (pub.isInfinity())\n    return { result: false, reason: 'Invalid public key' };\n  if (!pub.validate())\n    return { result: false, reason: 'Public key is not a point' };\n  if (!pub.mul(this.ec.curve.n).isInfinity())\n    return { result: false, reason: 'Public key * N != O' };\n\n  return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub)\n    this.pub = this.ec.g.mul(this.priv);\n\n  if (!enc)\n    return this.pub;\n\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex')\n    return this.priv.toString(16, 2);\n  else\n    return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16);\n\n  // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n\n},{\"../../elliptic\":74,\"bn.js\":25}],83:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n  }\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0 && (r[1] & 0x80)) {\n    r = r.slice(1);\n  }\n  if (s[0] === 0 && (s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n\n},{\"../../elliptic\":74,\"bn.js\":25}],84:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n  if (!(this instanceof EDDSA))\n    return new EDDSA(curve);\n\n  var curve = elliptic.curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n               .mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n  for (var i = 0; i < arguments.length; i++)\n    hash.update(arguments[i]);\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n\n},{\"../../elliptic\":74,\"./key\":85,\"./signature\":86,\"hash.js\":93}],85:[function(require,module,exports){\n'use strict';\n\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub))\n    this._pub = params.pub;\n  else\n    this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair)\n    return pub;\n  return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair)\n    return secret;\n  return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes)\n    return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n\n  return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n\n},{\"../../elliptic\":74}],86:[function(require,module,exports){\n'use strict';\n\nvar BN = require('bn.js');\nvar elliptic = require('../../elliptic');\nvar utils = elliptic.utils;\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength)\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n\n},{\"../../elliptic\":74,\"bn.js\":25}],87:[function(require,module,exports){\nmodule.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n      ]\n    ]\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n      ]\n    ]\n  }\n};\n\n},{}],88:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n  var naf = [];\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n  while (k.cmpn(1) >= 0) {\n    var z;\n    if (k.isOdd()) {\n      var mod = k.andln(ws - 1);\n      if (mod > (ws >> 1) - 1)\n        z = (ws >> 1) - mod;\n      else\n        z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n    naf.push(z);\n\n    // Optimization, shift by word if possible\n    var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n    for (var i = 1; i < shift; i++)\n      naf.push(0);\n    k.iushrn(shift);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    []\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      var m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      var m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n           this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n                                     bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n\n},{\"bn.js\":25,\"minimalistic-assert\":112,\"minimalistic-crypto-utils\":113}],89:[function(require,module,exports){\nmodule.exports={\n  \"_from\": \"elliptic@^6.0.0\",\n  \"_id\": \"elliptic@6.4.0\",\n  \"_inBundle\": false,\n  \"_integrity\": \"sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=\",\n  \"_location\": \"/browserify/elliptic\",\n  \"_phantomChildren\": {},\n  \"_requested\": {\n    \"type\": \"range\",\n    \"registry\": true,\n    \"raw\": \"elliptic@^6.0.0\",\n    \"name\": \"elliptic\",\n    \"escapedName\": \"elliptic\",\n    \"rawSpec\": \"^6.0.0\",\n    \"saveSpec\": null,\n    \"fetchSpec\": \"^6.0.0\"\n  },\n  \"_requiredBy\": [\n    \"/browserify/browserify-sign\",\n    \"/browserify/create-ecdh\"\n  ],\n  \"_resolved\": \"https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz\",\n  \"_shasum\": \"cac9af8762c85836187003c8dfe193e5e2eae5df\",\n  \"_spec\": \"elliptic@^6.0.0\",\n  \"_where\": \"/usr/local/lib/node_modules/browserify/node_modules/browserify-sign\",\n  \"author\": {\n    \"name\": \"Fedor Indutny\",\n    \"email\": \"fedor@indutny.com\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/indutny/elliptic/issues\"\n  },\n  \"bundleDependencies\": false,\n  \"dependencies\": {\n    \"bn.js\": \"^4.4.0\",\n    \"brorand\": \"^1.0.1\",\n    \"hash.js\": \"^1.0.0\",\n    \"hmac-drbg\": \"^1.0.0\",\n    \"inherits\": \"^2.0.1\",\n    \"minimalistic-assert\": \"^1.0.0\",\n    \"minimalistic-crypto-utils\": \"^1.0.0\"\n  },\n  \"deprecated\": false,\n  \"description\": \"EC cryptography\",\n  \"devDependencies\": {\n    \"brfs\": \"^1.4.3\",\n    \"coveralls\": \"^2.11.3\",\n    \"grunt\": \"^0.4.5\",\n    \"grunt-browserify\": \"^5.0.0\",\n    \"grunt-cli\": \"^1.2.0\",\n    \"grunt-contrib-connect\": \"^1.0.0\",\n    \"grunt-contrib-copy\": \"^1.0.0\",\n    \"grunt-contrib-uglify\": \"^1.0.1\",\n    \"grunt-mocha-istanbul\": \"^3.0.1\",\n    \"grunt-saucelabs\": \"^8.6.2\",\n    \"istanbul\": \"^0.4.2\",\n    \"jscs\": \"^2.9.0\",\n    \"jshint\": \"^2.6.0\",\n    \"mocha\": \"^2.1.0\"\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"homepage\": \"https://github.com/indutny/elliptic\",\n  \"keywords\": [\n    \"EC\",\n    \"Elliptic\",\n    \"curve\",\n    \"Cryptography\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"lib/elliptic.js\",\n  \"name\": \"elliptic\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+ssh://git@github.com/indutny/elliptic.git\"\n  },\n  \"scripts\": {\n    \"jscs\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n    \"jshint\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n    \"lint\": \"npm run jscs && npm run jshint\",\n    \"test\": \"npm run lint && npm run unit\",\n    \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n    \"version\": \"grunt dist && git add dist/\"\n  },\n  \"version\": \"6.4.0\"\n}\n\n},{}],90:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\n},{}],91:[function(require,module,exports){\n(function (Buffer){\nvar md5 = require('create-hash/md5')\nmodule.exports = EVP_BytesToKey\nfunction EVP_BytesToKey (password, salt, keyLen, ivLen) {\n  if (!Buffer.isBuffer(password)) {\n    password = new Buffer(password, 'binary')\n  }\n  if (salt && !Buffer.isBuffer(salt)) {\n    salt = new Buffer(salt, 'binary')\n  }\n  keyLen = keyLen / 8\n  ivLen = ivLen || 0\n  var ki = 0\n  var ii = 0\n  var key = new Buffer(keyLen)\n  var iv = new Buffer(ivLen)\n  var addmd = 0\n  var md_buf\n  var i\n  var bufs = []\n  while (true) {\n    if (addmd++ > 0) {\n      bufs.push(md_buf)\n    }\n    bufs.push(password)\n    if (salt) {\n      bufs.push(salt)\n    }\n    md_buf = md5(Buffer.concat(bufs))\n    bufs = []\n    i = 0\n    if (keyLen > 0) {\n      while (true) {\n        if (keyLen === 0) {\n          break\n        }\n        if (i === md_buf.length) {\n          break\n        }\n        key[ki++] = md_buf[i]\n        keyLen--\n        i++\n      }\n    }\n    if (ivLen > 0 && i !== md_buf.length) {\n      while (true) {\n        if (ivLen === 0) {\n          break\n        }\n        if (i === md_buf.length) {\n          break\n        }\n        iv[ii++] = md_buf[i]\n        ivLen--\n        i++\n      }\n    }\n    if (keyLen === 0 && ivLen === 0) {\n      break\n    }\n  }\n  for (i = 0; i < md_buf.length; i++) {\n    md_buf[i] = 0\n  }\n  return {\n    key: key,\n    iv: iv\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"create-hash/md5\":60}],92:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction HashBase (blockSize) {\n  Transform.call(this)\n\n  this._block = new Buffer(blockSize)\n  this._blockSize = blockSize\n  this._blockOffset = 0\n  this._length = [0, 0, 0, 0]\n\n  this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null\n  try {\n    if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)\n    this.update(chunk)\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n  var error = null\n  try {\n    this.push(this._digest())\n  } catch (err) {\n    error = err\n  }\n\n  callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n  if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')\n  if (this._finalized) throw new Error('Digest already called')\n  if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')\n\n  // consume data\n  var block = this._block\n  var offset = 0\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n    this._update()\n    this._blockOffset = 0\n  }\n  while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n  // update length\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry\n    carry = (this._length[j] / 0x0100000000) | 0\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry\n  }\n\n  return this\n}\n\nHashBase.prototype._update = function (data) {\n  throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called')\n  this._finalized = true\n\n  var digest = this._digest()\n  if (encoding !== undefined) digest = digest.toString(encoding)\n  return digest\n}\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"inherits\":108,\"stream\":157}],93:[function(require,module,exports){\nvar hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n\n},{\"./hash/common\":94,\"./hash/hmac\":95,\"./hash/ripemd\":96,\"./hash/sha\":97,\"./hash/utils\":104}],94:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending)\n    this.pending = msg;\n  else\n    this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length;\n\n  // Enough data, try updating\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending;\n\n    // Process pending data in blocks\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0)\n      this.pending = null;\n\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n    for (var i = 0; i < msg.length; i += this._delta32)\n      this._update(msg, i, i + this._delta32);\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - ((len + this.padLength) % bytes);\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n  for (var i = 1; i < k; i++)\n    res[i] = 0;\n\n  // Append length\n  len <<= 3;\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = (len >>> 8) & 0xff;\n    res[i++] = (len >>> 16) & 0xff;\n    res[i++] = (len >>> 24) & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++)\n      res[i++] = 0;\n  }\n\n  return res;\n};\n\n},{\"./utils\":104,\"minimalistic-assert\":112}],95:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n\n},{\"./utils\":104,\"minimalistic-assert\":112}],96:[function(require,module,exports){\n'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160))\n    return new RIPEMD160();\n\n  BlockHash.call(this);\n\n  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n  this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(\n      rotl32(\n        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n        s[j]),\n      E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(\n      rotl32(\n        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n        sh[j]),\n      Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'little');\n  else\n    return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15)\n    return x ^ y ^ z;\n  else if (j <= 31)\n    return (x & y) | ((~x) & z);\n  else if (j <= 47)\n    return (x | (~y)) ^ z;\n  else if (j <= 63)\n    return (x & z) | (y & (~z));\n  else\n    return x ^ (y | (~z));\n}\n\nfunction K(j) {\n  if (j <= 15)\n    return 0x00000000;\n  else if (j <= 31)\n    return 0x5a827999;\n  else if (j <= 47)\n    return 0x6ed9eba1;\n  else if (j <= 63)\n    return 0x8f1bbcdc;\n  else\n    return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15)\n    return 0x50a28be6;\n  else if (j <= 31)\n    return 0x5c4dd124;\n  else if (j <= 47)\n    return 0x6d703ef3;\n  else if (j <= 63)\n    return 0x7a6d76e9;\n  else\n    return 0x00000000;\n}\n\nvar r = [\n  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n\n},{\"./common\":94,\"./utils\":104}],97:[function(require,module,exports){\n'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n\n},{\"./sha/1\":98,\"./sha/224\":99,\"./sha/256\":100,\"./sha/384\":101,\"./sha/512\":102}],98:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n  0x5A827999, 0x6ED9EBA1,\n  0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1))\n    return new SHA1();\n\n  BlockHash.call(this);\n  this.h = [\n    0x67452301, 0xefcdab89, 0x98badcfe,\n    0x10325476, 0xc3d2e1f0 ];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n\n  for(; i < W.length; i++)\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":94,\"../utils\":104,\"./common\":103}],99:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224))\n    return new SHA224();\n\n  SHA256.call(this);\n  this.h = [\n    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 7), 'big');\n  else\n    return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n\n},{\"../utils\":104,\"./256\":100}],100:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256))\n    return new SHA256();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n  ];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i++)\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n\n  assert(this.k.length === W.length);\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\n},{\"../common\":94,\"../utils\":104,\"./common\":103,\"minimalistic-assert\":112}],101:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384))\n    return new SHA384();\n\n  SHA512.call(this);\n  this.h = [\n    0xcbbb9d5d, 0xc1059ed8,\n    0x629a292a, 0x367cd507,\n    0x9159015a, 0x3070dd17,\n    0x152fecd8, 0xf70e5939,\n    0x67332667, 0xffc00b31,\n    0x8eb44a87, 0x68581511,\n    0xdb0c2e0d, 0x64f98fa7,\n    0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h.slice(0, 12), 'big');\n  else\n    return utils.split32(this.h.slice(0, 12), 'big');\n};\n\n},{\"../utils\":104,\"./512\":102}],102:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512))\n    return new SHA512();\n\n  BlockHash.call(this);\n  this.h = [\n    0x6a09e667, 0xf3bcc908,\n    0xbb67ae85, 0x84caa73b,\n    0x3c6ef372, 0xfe94f82b,\n    0xa54ff53a, 0x5f1d36f1,\n    0x510e527f, 0xade682d1,\n    0x9b05688c, 0x2b3e6c1f,\n    0x1f83d9ab, 0xfb41bd6b,\n    0x5be0cd19, 0x137e2179 ];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W;\n\n  // 32 x 32bit words\n  for (var i = 0; i < 32; i++)\n    W[i] = msg[start + i];\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14];  // i - 7\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32];  // i - 16\n    var c3_lo = W[i - 31];\n\n    W[i] = sum64_4_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n\n  assert(this.k.length === W.length);\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n\n    var T1_hi = sum64_5_hi(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(\n      c0_hi, c0_lo,\n      c1_hi, c1_lo,\n      c2_hi, c2_lo,\n      c3_hi, c3_lo,\n      c4_hi, c4_lo);\n\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n    hh = gh;\n    hl = gl;\n\n    gh = fh;\n    gl = fl;\n\n    fh = eh;\n    fl = el;\n\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n    dh = ch;\n    dl = cl;\n\n    ch = bh;\n    cl = bl;\n\n    bh = ah;\n    bl = al;\n\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex')\n    return utils.toHex32(this.h, 'big');\n  else\n    return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ ((~xh) & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ ((~xl) & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2);  // 34\n  var c2_hi = rotr64_hi(xl, xh, 7);  // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2);  // 34\n  var c2_lo = rotr64_lo(xl, xh, 7);  // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9);  // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9);  // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29);  // 61\n  var c2_hi = shr64_hi(xh, xl, 6);\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29);  // 61\n  var c2_lo = shr64_lo(xh, xl, 6);\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0)\n    r += 0x100000000;\n  return r;\n}\n\n},{\"../common\":94,\"../utils\":104,\"minimalistic-assert\":112}],103:[function(require,module,exports){\n'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0)\n    return ch32(x, y, z);\n  if (s === 1 || s === 3)\n    return p32(x, y, z);\n  if (s === 2)\n    return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n\n},{\"../utils\":104}],104:[function(require,module,exports){\n'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg === 'string') {\n    if (!enc) {\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n        var hi = c >> 8;\n        var lo = c & 0xff;\n        if (hi)\n          res.push(hi, lo);\n        else\n          res.push(lo);\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0)\n        msg = '0' + msg;\n      for (i = 0; i < msg.length; i += 2)\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n  }\n  return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = (w >>> 24) |\n            ((w >>> 8) & 0xff00) |\n            ((w << 8) & 0xff0000) |\n            ((w & 0xff) << 24);\n  return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little')\n      w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n  return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7)\n    return '0' + word;\n  else if (word.length === 6)\n    return '00' + word;\n  else if (word.length === 5)\n    return '000' + word;\n  else if (word.length === 4)\n    return '0000' + word;\n  else if (word.length === 3)\n    return '00000' + word;\n  else if (word.length === 2)\n    return '000000' + word;\n  else if (word.length === 1)\n    return '0000000' + word;\n  else\n    return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big')\n      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n    else\n      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n    res[i] = w >>> 0;\n  }\n  return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = (m >>> 16) & 0xff;\n      res[k + 2] = (m >>> 8) & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = (m >>> 16) & 0xff;\n      res[k + 1] = (m >>> 8) & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n  return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = (al + bl) >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = (lo + bl) >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = (lo + cl) >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = (lo + dl) >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = (lo + el) >>> 0;\n  carry += lo < el ? 1 : 0;\n\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n\n  return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = (al << (32 - num)) | (ah >>> num);\n  return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = (ah << (32 - num)) | (al >>> num);\n  return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n\n},{\"inherits\":108,\"minimalistic-assert\":112}],105:[function(require,module,exports){\n'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n\n},{\"hash.js\":93,\"minimalistic-assert\":112,\"minimalistic-crypto-utils\":113}],106:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n},{}],107:[function(require,module,exports){\n\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n},{}],108:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n},{}],109:[function(require,module,exports){\n/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n},{}],110:[function(require,module,exports){\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n},{}],111:[function(require,module,exports){\nvar bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._rand = function _rand(n) {\n  var len = n.bitLength();\n  var buf = this.rand.generate(Math.ceil(len / 8));\n\n  // Set low bits\n  buf[0] |= 3;\n\n  // Mask high bits\n  var mask = len & 0x7;\n  if (mask !== 0)\n    buf[buf.length - 1] >>= 7 - mask;\n\n  return new bn(buf);\n}\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  var n2 = n1.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  var prime = true;\n  for (; k > 0; k--) {\n    var a = this._rand(n2);\n    if (cb)\n      cb(a);\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return false;\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s)\n      return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n\n  if (!k)\n    k = Math.max(1, (len / 48) | 0);\n\n  // Find d and s, (n - 1) = (2 ^ s) * d;\n  var n1 = n.subn(1);\n  var n2 = n1.subn(1);\n  for (var s = 0; !n1.testn(s); s++) {}\n  var d = n.shrn(s);\n\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._rand(n2);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0)\n      return g;\n\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n      continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n\n      if (x.cmp(rone) === 0)\n        return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0)\n        break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};\n\n},{\"bn.js\":25,\"brorand\":26}],112:[function(require,module,exports){\nmodule.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val)\n    throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r)\n    throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n\n},{}],113:[function(require,module,exports){\n'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n\n},{}],114:[function(require,module,exports){\nmodule.exports={\"2.16.840.1.101.3.4.1.1\": \"aes-128-ecb\",\n\"2.16.840.1.101.3.4.1.2\": \"aes-128-cbc\",\n\"2.16.840.1.101.3.4.1.3\": \"aes-128-ofb\",\n\"2.16.840.1.101.3.4.1.4\": \"aes-128-cfb\",\n\"2.16.840.1.101.3.4.1.21\": \"aes-192-ecb\",\n\"2.16.840.1.101.3.4.1.22\": \"aes-192-cbc\",\n\"2.16.840.1.101.3.4.1.23\": \"aes-192-ofb\",\n\"2.16.840.1.101.3.4.1.24\": \"aes-192-cfb\",\n\"2.16.840.1.101.3.4.1.41\": \"aes-256-ecb\",\n\"2.16.840.1.101.3.4.1.42\": \"aes-256-cbc\",\n\"2.16.840.1.101.3.4.1.43\": \"aes-256-ofb\",\n\"2.16.840.1.101.3.4.1.44\": \"aes-256-cfb\"\n}\n},{}],115:[function(require,module,exports){\n// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('modulus').int(),\n    this.key('publicExponent').int(),\n    this.key('privateExponent').int(),\n    this.key('prime1').int(),\n    this.key('prime2').int(),\n    this.key('exponent1').int(),\n    this.key('exponent2').int(),\n    this.key('coefficient').int()\n  )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n  this.seq().obj(\n    this.key('modulus').int(),\n    this.key('publicExponent').int()\n  )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('none').null_().optional(),\n    this.key('curve').objid().optional(),\n    this.key('params').seq().obj(\n      this.key('p').int(),\n      this.key('q').int(),\n      this.key('g').int()\n    ).optional()\n  )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').seq().obj(\n      this.key('id').objid(),\n      this.key('decrypt').seq().obj(\n        this.key('kde').seq().obj(\n          this.key('id').objid(),\n          this.key('kdeparams').seq().obj(\n            this.key('salt').octstr(),\n            this.key('iters').int()\n          )\n        ),\n        this.key('cipher').seq().obj(\n          this.key('algo').objid(),\n          this.key('iv').octstr()\n        )\n      )\n    ),\n    this.key('subjectPrivateKey').octstr()\n  )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('p').int(),\n    this.key('q').int(),\n    this.key('g').int(),\n    this.key('pub_key').int(),\n    this.key('priv_key').int()\n  )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n  this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n  this.seq().obj(\n    this.key('version').int(),\n    this.key('privateKey').octstr(),\n    this.key('parameters').optional().explicit(0).use(ECParameters),\n    this.key('publicKey').optional().explicit(1).bitstr()\n  )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n  this.choice({\n    namedCurve: this.objid()\n  })\n})\n\nexports.signature = asn1.define('signature', function () {\n  this.seq().obj(\n    this.key('r').int(),\n    this.key('s').int()\n  )\n})\n\n},{\"./certificate\":116,\"asn1.js\":10}],116:[function(require,module,exports){\n// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n  this.choice({\n    utcTime: this.utctime(),\n    generalTime: this.gentime()\n  })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n  this.seq().obj(\n    this.key('type').objid(),\n    this.key('value').any()\n  )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n  this.seq().obj(\n    this.key('algorithm').objid(),\n    this.key('parameters').optional()\n  )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(\n    this.key('algorithm').use(AlgorithmIdentifier),\n    this.key('subjectPublicKey').bitstr()\n  )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n  this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n  this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n  this.choice({\n    rdnSequence: this.use(RDNSequence)\n  })\n})\n\nvar Validity = asn.define('Validity', function () {\n  this.seq().obj(\n    this.key('notBefore').use(Time),\n    this.key('notAfter').use(Time)\n  )\n})\n\nvar Extension = asn.define('Extension', function () {\n  this.seq().obj(\n    this.key('extnID').objid(),\n    this.key('critical').bool().def(false),\n    this.key('extnValue').octstr()\n  )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n  this.seq().obj(\n    this.key('version').explicit(0).int(),\n    this.key('serialNumber').int(),\n    this.key('signature').use(AlgorithmIdentifier),\n    this.key('issuer').use(Name),\n    this.key('validity').use(Validity),\n    this.key('subject').use(Name),\n    this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n    this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n    this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n    this.key('extensions').explicit(3).seqof(Extension).optional()\n  )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n  this.seq().obj(\n    this.key('tbsCertificate').use(TBSCertificate),\n    this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n    this.key('signatureValue').bitstr()\n  )\n})\n\nmodule.exports = X509Certificate\n\n},{\"asn1.js\":10}],117:[function(require,module,exports){\n(function (Buffer){\n// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED\\n\\r?DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\\n\\r?\\n\\r?([0-9A-z\\n\\r\\+\\/\\=]+)\\n\\r?/m\nvar startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\\n/m\nvar fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\\n\\r?([0-9A-z\\n\\r\\+\\/\\=]+)\\n\\r?-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nmodule.exports = function (okey, password) {\n  var key = okey.toString()\n  var match = key.match(findProc)\n  var decrypted\n  if (!match) {\n    var match2 = key.match(fullRegex)\n    decrypted = new Buffer(match2[2].replace(/\\r?\\n/g, ''), 'base64')\n  } else {\n    var suite = 'aes' + match[1]\n    var iv = new Buffer(match[2], 'hex')\n    var cipherText = new Buffer(match[3].replace(/\\r?\\n/g, ''), 'base64')\n    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n    var out = []\n    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n    out.push(cipher.update(cipherText))\n    out.push(cipher.final())\n    decrypted = Buffer.concat(out)\n  }\n  var tag = key.match(startRegex)[1]\n  return {\n    tag: tag,\n    data: decrypted\n  }\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"browserify-aes\":30,\"buffer\":54,\"evp_bytestokey\":91}],118:[function(require,module,exports){\n(function (Buffer){\nvar asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n  var password\n  if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n    password = buffer.passphrase\n    buffer = buffer.key\n  }\n  if (typeof buffer === 'string') {\n    buffer = new Buffer(buffer)\n  }\n\n  var stripped = fixProc(buffer, password)\n\n  var type = stripped.tag\n  var data = stripped.data\n  var subtype, ndata\n  switch (type) {\n    case 'CERTIFICATE':\n      ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n      // falls through\n    case 'PUBLIC KEY':\n      if (!ndata) {\n        ndata = asn1.PublicKey.decode(data, 'der')\n      }\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n        case '1.2.840.10045.2.1':\n          ndata.subjectPrivateKey = ndata.subjectPublicKey\n          return {\n            type: 'ec',\n            data: ndata\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n          return {\n            type: 'dsa',\n            data: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      throw new Error('unknown key type ' + type)\n    case 'ENCRYPTED PRIVATE KEY':\n      data = asn1.EncryptedPrivateKey.decode(data, 'der')\n      data = decrypt(data, password)\n      // falls through\n    case 'PRIVATE KEY':\n      ndata = asn1.PrivateKey.decode(data, 'der')\n      subtype = ndata.algorithm.algorithm.join('.')\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n        case '1.2.840.10045.2.1':\n          return {\n            curve: ndata.algorithm.curve,\n            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n          }\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n          return {\n            type: 'dsa',\n            params: ndata.algorithm.params\n          }\n        default: throw new Error('unknown key id ' + subtype)\n      }\n      throw new Error('unknown key type ' + type)\n    case 'RSA PUBLIC KEY':\n      return asn1.RSAPublicKey.decode(data, 'der')\n    case 'RSA PRIVATE KEY':\n      return asn1.RSAPrivateKey.decode(data, 'der')\n    case 'DSA PRIVATE KEY':\n      return {\n        type: 'dsa',\n        params: asn1.DSAPrivateKey.decode(data, 'der')\n      }\n    case 'EC PRIVATE KEY':\n      data = asn1.ECPrivateKey.decode(data, 'der')\n      return {\n        curve: data.parameters.value,\n        privateKey: data.privateKey\n      }\n    default: throw new Error('unknown key type ' + type)\n  }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n  var salt = data.algorithm.decrypt.kde.kdeparams.salt\n  var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n  var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n  var iv = data.algorithm.decrypt.cipher.iv\n  var cipherText = data.subjectPrivateKey\n  var keylen = parseInt(algo.split('-')[1], 10) / 8\n  var key = compat.pbkdf2Sync(password, salt, iters, keylen)\n  var cipher = ciphers.createDecipheriv(algo, key, iv)\n  var out = []\n  out.push(cipher.update(cipherText))\n  out.push(cipher.final())\n  return Buffer.concat(out)\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./aesid.json\":114,\"./asn1\":115,\"./fixProc\":117,\"browserify-aes\":30,\"buffer\":54,\"pbkdf2\":120}],119:[function(require,module,exports){\n(function (process){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n    /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n  return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n  var result = splitPath(path),\n      root = result[0],\n      dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.substr(0, dir.length - 1);\n  }\n\n  return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n  var f = splitPath(path)[2];\n  // TODO: make this comparison case-insensitive on windows?\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\n\nexports.extname = function(path) {\n  return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n\n}).call(this,require('_process'))\n},{\"_process\":126}],120:[function(require,module,exports){\n\nexports.pbkdf2 = require('./lib/async')\n\nexports.pbkdf2Sync = require('./lib/sync')\n\n},{\"./lib/async\":121,\"./lib/sync\":124}],121:[function(require,module,exports){\n(function (process,global){\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n  'sha': 'SHA-1',\n  'sha-1': 'SHA-1',\n  'sha1': 'SHA-1',\n  'sha256': 'SHA-256',\n  'sha-256': 'SHA-256',\n  'sha384': 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false)\n  }\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false)\n  }\n  if (checks[algo] !== undefined) {\n    return checks[algo]\n  }\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n    .then(function () {\n      return true\n    }).catch(function () {\n      return false\n    })\n  checks[algo] = prom\n  return prom\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n  return subtle.importKey(\n    'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n  ).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3)\n  }).then(function (res) {\n    return Buffer.from(res)\n  })\n}\nfunction resolvePromise (promise, callback) {\n  promise.then(function (out) {\n    process.nextTick(function () {\n      callback(null, out)\n    })\n  }, function (e) {\n    process.nextTick(function () {\n      callback(e)\n    })\n  })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n  checkParameters(iterations, keylen)\n  if (typeof digest === 'function') {\n    callback = digest\n    digest = undefined\n  }\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n  digest = digest || 'sha1'\n  var algo = toBrowser[digest.toLowerCase()]\n  if (!algo || typeof global.Promise !== 'function') {\n    return process.nextTick(function () {\n      var out\n      try {\n        out = sync(password, salt, iterations, keylen, digest)\n      } catch (e) {\n        return callback(e)\n      }\n      callback(null, out)\n    })\n  }\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) {\n      return browserPbkdf2(password, salt, iterations, keylen, algo)\n    } else {\n      return sync(password, salt, iterations, keylen, digest)\n    }\n  }), callback)\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./default-encoding\":122,\"./precondition\":123,\"./sync\":124,\"_process\":126,\"safe-buffer\":148}],122:[function(require,module,exports){\n(function (process){\nvar defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n  defaultEncoding = 'utf-8'\n} else {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n\n}).call(this,require('_process'))\n},{\"_process\":126}],123:[function(require,module,exports){\nvar MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\nmodule.exports = function (iterations, keylen) {\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number')\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations')\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number')\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length')\n  }\n}\n\n},{}],124:[function(require,module,exports){\nvar md5 = require('create-hash/md5')\nvar rmd160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n  var hash = getDigest(alg)\n  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n  if (key.length > blocksize) {\n    key = hash(key)\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize)\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36\n    opad[i] = key[i] ^ 0x5C\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n  ipad.copy(ipad1, 0, 0, blocksize)\n  this.ipad1 = ipad1\n  this.ipad2 = ipad\n  this.opad = opad\n  this.alg = alg\n  this.blocksize = blocksize\n  this.hash = hash\n  this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize)\n  var h = this.hash(ipad)\n  h.copy(this.opad, this.blocksize)\n  return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n  function shaFunc (data) {\n    return sha(alg).update(data).digest()\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160\n  if (alg === 'md5') return md5\n  return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n  checkParameters(iterations, keylen)\n\n  digest = digest || 'sha1'\n\n  var hmac = new Hmac(digest, password, salt.length)\n\n  var DK = Buffer.allocUnsafe(keylen)\n  var block1 = Buffer.allocUnsafe(salt.length + 4)\n  salt.copy(block1, 0, 0, salt.length)\n\n  var destPos = 0\n  var hLen = sizes[digest]\n  var l = Math.ceil(keylen / hLen)\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length)\n\n    var T = hmac.run(block1, hmac.ipad1)\n    var U = T\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2)\n      for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n    }\n\n    T.copy(DK, destPos)\n    destPos += hLen\n  }\n\n  return DK\n}\n\nmodule.exports = pbkdf2\n\n},{\"./default-encoding\":122,\"./precondition\":123,\"create-hash/md5\":60,\"ripemd160\":147,\"safe-buffer\":148,\"sha.js\":150}],125:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (!process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = nextTick;\n} else {\n  module.exports = process.nextTick;\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n}).call(this,require('_process'))\n},{\"_process\":126}],126:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],127:[function(require,module,exports){\nexports.publicEncrypt = require('./publicEncrypt');\nexports.privateDecrypt = require('./privateDecrypt');\n\nexports.privateEncrypt = function privateEncrypt(key, buf) {\n  return exports.publicEncrypt(key, buf, true);\n};\n\nexports.publicDecrypt = function publicDecrypt(key, buf) {\n  return exports.privateDecrypt(key, buf, true);\n};\n},{\"./privateDecrypt\":129,\"./publicEncrypt\":130}],128:[function(require,module,exports){\n(function (Buffer){\nvar createHash = require('create-hash');\nmodule.exports = function (seed, len) {\n  var t = new Buffer('');\n  var  i = 0, c;\n  while (t.length < len) {\n    c = i2ops(i++);\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);\n  }\n  return t.slice(0, len);\n};\n\nfunction i2ops(c) {\n  var out = new Buffer(4);\n  out.writeUInt32BE(c,0);\n  return out;\n}\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"create-hash\":58}],129:[function(require,module,exports){\n(function (Buffer){\nvar parseKeys = require('parse-asn1');\nvar mgf = require('./mgf');\nvar xor = require('./xor');\nvar bn = require('bn.js');\nvar crt = require('browserify-rsa');\nvar createHash = require('create-hash');\nvar withPublic = require('./withPublic');\nmodule.exports = function privateDecrypt(private_key, enc, reverse) {\n  var padding;\n  if (private_key.padding) {\n    padding = private_key.padding;\n  } else if (reverse) {\n    padding = 1;\n  } else {\n    padding = 4;\n  }\n\n  var key = parseKeys(private_key);\n  var k = key.modulus.byteLength();\n  if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error');\n  }\n  var msg;\n  if (reverse) {\n    msg = withPublic(new bn(enc), key);\n  } else {\n    msg = crt(enc, key);\n  }\n  var zBuffer = new Buffer(k - msg.length);\n  zBuffer.fill(0);\n  msg = Buffer.concat([zBuffer, msg], k);\n  if (padding === 4) {\n    return oaep(key, msg);\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse);\n  } else if (padding === 3) {\n    return msg;\n  } else {\n    throw new Error('unknown padding');\n  }\n};\n\nfunction oaep(key, msg){\n  var n = key.modulus;\n  var k = key.modulus.byteLength();\n  var mLen = msg.length;\n  var iHash = createHash('sha1').update(new Buffer('')).digest();\n  var hLen = iHash.length;\n  var hLen2 = 2 * hLen;\n  if (msg[0] !== 0) {\n    throw new Error('decryption error');\n  }\n  var maskedSeed = msg.slice(1, hLen + 1);\n  var maskedDb =  msg.slice(hLen + 1);\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen));\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1));\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error');\n  }\n  var i = hLen;\n  while (db[i] === 0) {\n    i++;\n  }\n  if (db[i++] !== 1) {\n    throw new Error('decryption error');\n  }\n  return db.slice(i);\n}\n\nfunction pkcs1(key, msg, reverse){\n  var p1 = msg.slice(0, 2);\n  var i = 2;\n  var status = 0;\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++;\n      break;\n    }\n  }\n  var ps = msg.slice(2, i - 1);\n  var p2 = msg.slice(i - 1, i);\n\n  if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){\n    status++;\n  }\n  if (ps.length < 8) {\n    status++;\n  }\n  if (status) {\n    throw new Error('decryption error');\n  }\n  return  msg.slice(i);\n}\nfunction compare(a, b){\n  a = new Buffer(a);\n  b = new Buffer(b);\n  var dif = 0;\n  var len = a.length;\n  if (a.length !== b.length) {\n    dif++;\n    len = Math.min(a.length, b.length);\n  }\n  var i = -1;\n  while (++i < len) {\n    dif += (a[i] ^ b[i]);\n  }\n  return dif;\n}\n}).call(this,require(\"buffer\").Buffer)\n},{\"./mgf\":128,\"./withPublic\":131,\"./xor\":132,\"bn.js\":25,\"browserify-rsa\":46,\"buffer\":54,\"create-hash\":58,\"parse-asn1\":118}],130:[function(require,module,exports){\n(function (Buffer){\nvar parseKeys = require('parse-asn1');\nvar randomBytes = require('randombytes');\nvar createHash = require('create-hash');\nvar mgf = require('./mgf');\nvar xor = require('./xor');\nvar bn = require('bn.js');\nvar withPublic = require('./withPublic');\nvar crt = require('browserify-rsa');\n\nvar constants = {\n  RSA_PKCS1_OAEP_PADDING: 4,\n  RSA_PKCS1_PADDIN: 1,\n  RSA_NO_PADDING: 3\n};\n\nmodule.exports = function publicEncrypt(public_key, msg, reverse) {\n  var padding;\n  if (public_key.padding) {\n    padding = public_key.padding;\n  } else if (reverse) {\n    padding = 1;\n  } else {\n    padding = 4;\n  }\n  var key = parseKeys(public_key);\n  var paddedMsg;\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg);\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse);\n  } else if (padding === 3) {\n    paddedMsg = new bn(msg);\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus');\n    }\n  } else {\n    throw new Error('unknown padding');\n  }\n  if (reverse) {\n    return crt(paddedMsg, key);\n  } else {\n    return withPublic(paddedMsg, key);\n  }\n};\n\nfunction oaep(key, msg){\n  var k = key.modulus.byteLength();\n  var mLen = msg.length;\n  var iHash = createHash('sha1').update(new Buffer('')).digest();\n  var hLen = iHash.length;\n  var hLen2 = 2 * hLen;\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long');\n  }\n  var ps = new Buffer(k - mLen - hLen2 - 2);\n  ps.fill(0);\n  var dblen = k - hLen - 1;\n  var seed = randomBytes(hLen);\n  var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen));\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen));\n  return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k));\n}\nfunction pkcs1(key, msg, reverse){\n  var mLen = msg.length;\n  var k = key.modulus.byteLength();\n  if (mLen > k - 11) {\n    throw new Error('message too long');\n  }\n  var ps;\n  if (reverse) {\n    ps = new Buffer(k - mLen - 3);\n    ps.fill(0xff);\n  } else {\n    ps = nonZero(k - mLen - 3);\n  }\n  return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k));\n}\nfunction nonZero(len, crypto) {\n  var out = new Buffer(len);\n  var i = 0;\n  var cache = randomBytes(len*2);\n  var cur = 0;\n  var num;\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len*2);\n      cur = 0;\n    }\n    num = cache[cur++];\n    if (num) {\n      out[i++] = num;\n    }\n  }\n  return out;\n}\n}).call(this,require(\"buffer\").Buffer)\n},{\"./mgf\":128,\"./withPublic\":131,\"./xor\":132,\"bn.js\":25,\"browserify-rsa\":46,\"buffer\":54,\"create-hash\":58,\"parse-asn1\":118,\"randombytes\":133}],131:[function(require,module,exports){\n(function (Buffer){\nvar bn = require('bn.js');\nfunction withPublic(paddedMsg, key) {\n  return new Buffer(paddedMsg\n    .toRed(bn.mont(key.modulus))\n    .redPow(new bn(key.publicExponent))\n    .fromRed()\n    .toArray());\n}\n\nmodule.exports = withPublic;\n}).call(this,require(\"buffer\").Buffer)\n},{\"bn.js\":25,\"buffer\":54}],132:[function(require,module,exports){\nmodule.exports = function xor(a, b) {\n  var len = a.length;\n  var i = -1;\n  while (++i < len) {\n    a[i] ^= b[i];\n  }\n  return a\n};\n},{}],133:[function(require,module,exports){\n(function (process,global){\n'use strict'\n\nfunction oldBrowser () {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes\n} else {\n  module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n  // phantomjs needs to throw\n  if (size > 65536) throw new Error('requested too many random bytes')\n  // in case browserify  isn't using the Uint8Array version\n  var rawBytes = new global.Uint8Array(size)\n\n  // This will not work in older browsers.\n  // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n  if (size > 0) {  // getRandomValues fails on IE if size == 0\n    crypto.getRandomValues(rawBytes)\n  }\n\n  // XXX: phantomjs doesn't like a buffer being passed here\n  var bytes = Buffer.from(rawBytes.buffer)\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes)\n    })\n  }\n\n  return bytes\n}\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"_process\":126,\"safe-buffer\":148}],134:[function(require,module,exports){\nmodule.exports = require('./lib/_stream_duplex.js');\n\n},{\"./lib/_stream_duplex.js\":135}],135:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\nvar keys = objectKeys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n  var method = keys[v];\n  if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  processNextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  processNextTick(cb, err);\n};\n\nfunction forEach(xs, f) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    f(xs[i], i);\n  }\n}\n},{\"./_stream_readable\":137,\"./_stream_writable\":139,\"core-util-is\":56,\"inherits\":108,\"process-nextick-args\":125}],136:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};\n},{\"./_stream_transform\":138,\"core-util-is\":56,\"inherits\":108}],137:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n// TODO(bmeurer): Change this back to const once hole checks are\n// properly optimized away early in Ignition+TurboFan.\n/*<replacement>*/\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') {\n    return emitter.prependListener(event, fn);\n  } else {\n    // This is a hack to make sure that our error handler is attached before any\n    // userland ones.  NEVER DO THIS. This is here only because this code needs\n    // to continue to work with older versions of Node.js that do not include\n    // the prependListener() method. The goal is to eventually remove this hack.\n    if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n  }\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    processNextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, unpipeInfo);\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        processNextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    processNextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var state = this._readableState;\n  var paused = false;\n\n  var self = this;\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) self.push(chunk);\n    }\n\n    self.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = self.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  self._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    processNextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction forEach(xs, f) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    f(xs[i], i);\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./_stream_duplex\":135,\"./internal/streams/BufferList\":140,\"./internal/streams/destroy\":141,\"./internal/streams/stream\":142,\"_process\":126,\"core-util-is\":56,\"events\":90,\"inherits\":108,\"isarray\":110,\"process-nextick-args\":125,\"safe-buffer\":148,\"string_decoder/\":158,\"util\":27}],138:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction TransformState(stream) {\n  this.afterTransform = function (er, data) {\n    return afterTransform(stream, er, data);\n  };\n\n  this.needTransform = false;\n  this.transforming = false;\n  this.writecb = null;\n  this.writechunk = null;\n  this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n  var ts = stream._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return stream.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data !== null && data !== undefined) stream.push(data);\n\n  cb(er);\n\n  var rs = stream._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    stream._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = new TransformState(this);\n\n  var stream = this;\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.once('prefinish', function () {\n    if (typeof this._flush === 'function') this._flush(function (er, data) {\n      done(stream, er, data);\n    });else done(stream);\n  });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data !== null && data !== undefined) stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  var ws = stream._writableState;\n  var ts = stream._transformState;\n\n  if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}\n},{\"./_stream_duplex\":135,\"core-util-is\":56,\"inherits\":108}],139:[function(require,module,exports){\n(function (process,global){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  processNextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    processNextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = _isUint8Array(chunk) && !state.objectMode;\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    processNextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    processNextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequestCount = 0;\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      processNextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) processNextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n  if (state.corkedRequestsFree) {\n    state.corkedRequestsFree.next = corkReq;\n  } else {\n    state.corkedRequestsFree = corkReq;\n  }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./_stream_duplex\":135,\"./internal/streams/destroy\":141,\"./internal/streams/stream\":142,\"_process\":126,\"core-util-is\":56,\"inherits\":108,\"process-nextick-args\":125,\"safe-buffer\":148,\"util-deprecate\":159}],140:[function(require,module,exports){\n'use strict';\n\n/*<replacement>*/\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    if (this.length === 1) return this.head.data;\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n},{\"safe-buffer\":148}],141:[function(require,module,exports){\n'use strict';\n\n/*<replacement>*/\n\nvar processNextTick = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n      processNextTick(emitErrorNT, this, err);\n    }\n    return;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      processNextTick(emitErrorNT, _this, err);\n      if (_this._writableState) {\n        _this._writableState.errorEmitted = true;\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};\n},{\"process-nextick-args\":125}],142:[function(require,module,exports){\nmodule.exports = require('events').EventEmitter;\n\n},{\"events\":90}],143:[function(require,module,exports){\nmodule.exports = require('./readable').PassThrough\n\n},{\"./readable\":144}],144:[function(require,module,exports){\nexports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n\n},{\"./lib/_stream_duplex.js\":135,\"./lib/_stream_passthrough.js\":136,\"./lib/_stream_readable.js\":137,\"./lib/_stream_transform.js\":138,\"./lib/_stream_writable.js\":139}],145:[function(require,module,exports){\nmodule.exports = require('./readable').Transform\n\n},{\"./readable\":144}],146:[function(require,module,exports){\nmodule.exports = require('./lib/_stream_writable.js');\n\n},{\"./lib/_stream_writable.js\":139}],147:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nfunction RIPEMD160 () {\n  HashBase.call(this, 64)\n\n  // state\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n  var m = new Array(16)\n  for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)\n\n  var al = this._a\n  var bl = this._b\n  var cl = this._c\n  var dl = this._d\n  var el = this._e\n\n  // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n  // K = 0x00000000\n  // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8\n  al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)\n  el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)\n  dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)\n  cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)\n  bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)\n  al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)\n  el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)\n  dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)\n  cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)\n  bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)\n  al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)\n  el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)\n  dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)\n  cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)\n  bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)\n  al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)\n\n  // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8\n  // K = 0x5a827999\n  // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12\n  el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)\n  dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)\n  cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)\n  bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)\n  al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)\n  el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)\n  dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)\n  cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)\n  bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)\n  al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)\n  el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)\n  dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)\n  cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)\n  bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)\n  al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)\n  el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)\n\n  // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12\n  // K = 0x6ed9eba1\n  // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5\n  dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)\n  cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)\n  bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)\n  al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)\n  el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)\n  dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)\n  cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)\n  bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)\n  al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)\n  el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)\n  dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)\n  cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)\n  bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)\n  al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)\n  el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)\n  dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)\n\n  // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2\n  // K = 0x8f1bbcdc\n  // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12\n  cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)\n  bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)\n  al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)\n  el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)\n  dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)\n  cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)\n  bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)\n  al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)\n  el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)\n  dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)\n  cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)\n  bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)\n  al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)\n  el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)\n  dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)\n  cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)\n\n  // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n  // K = 0xa953fd4e\n  // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n  bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)\n  al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)\n  el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)\n  dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)\n  cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)\n  bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)\n  al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)\n  el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)\n  dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)\n  cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)\n  bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)\n  al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)\n  el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)\n  dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)\n  cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)\n  bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)\n\n  var ar = this._a\n  var br = this._b\n  var cr = this._c\n  var dr = this._d\n  var er = this._e\n\n  // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12\n  // K' = 0x50a28be6\n  // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6\n  ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)\n  er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)\n  dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)\n  cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)\n  br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)\n  ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)\n  er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)\n  dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)\n  cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)\n  br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)\n  ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)\n  er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)\n  dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)\n  cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)\n  br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)\n  ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)\n\n  // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2\n  // K' = 0x5c4dd124\n  // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11\n  er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)\n  dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)\n  cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)\n  br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)\n  ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)\n  er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)\n  dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)\n  cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)\n  br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)\n  ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)\n  er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)\n  dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)\n  cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)\n  br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)\n  ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)\n  er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)\n\n  // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13\n  // K' = 0x6d703ef3\n  // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5\n  dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)\n  cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)\n  br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)\n  ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)\n  er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)\n  dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)\n  cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)\n  br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)\n  ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)\n  er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)\n  dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)\n  cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)\n  br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)\n  ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)\n  er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)\n  dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)\n\n  // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14\n  // K' = 0x7a6d76e9\n  // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8\n  cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)\n  br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)\n  ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)\n  er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)\n  dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)\n  cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)\n  br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)\n  ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)\n  er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)\n  dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)\n  cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)\n  br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)\n  ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)\n  er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)\n  dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)\n  cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)\n\n  // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n  // K' = 0x00000000\n  // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n  br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)\n  ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)\n  er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)\n  dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)\n  cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)\n  br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)\n  ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)\n  er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)\n  dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)\n  cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)\n  br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)\n  ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)\n  er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)\n  dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)\n  cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)\n  br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)\n\n  // change state\n  var t = (this._b + cl + dr) | 0\n  this._b = (this._c + dl + er) | 0\n  this._c = (this._d + el + ar) | 0\n  this._d = (this._e + al + br) | 0\n  this._e = (this._a + bl + cr) | 0\n  this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64)\n    this._update()\n    this._blockOffset = 0\n  }\n\n  this._block.fill(0, this._blockOffset, 56)\n  this._block.writeUInt32LE(this._length[0], 56)\n  this._block.writeUInt32LE(this._length[1], 60)\n  this._update()\n\n  // produce result\n  var buffer = new Buffer(20)\n  buffer.writeInt32LE(this._a, 0)\n  buffer.writeInt32LE(this._b, 4)\n  buffer.writeInt32LE(this._c, 8)\n  buffer.writeInt32LE(this._d, 12)\n  buffer.writeInt32LE(this._e, 16)\n  return buffer\n}\n\nfunction rotl (x, n) {\n  return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n  return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54,\"hash-base\":92,\"inherits\":108}],148:[function(require,module,exports){\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":54}],149:[function(require,module,exports){\n(function (Buffer){\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n  this._block = new Buffer(blockSize)\n  this._finalSize = finalSize\n  this._blockSize = blockSize\n  this._len = 0\n  this._s = 0\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8'\n    data = new Buffer(data, enc)\n  }\n\n  var l = this._len += data.length\n  var s = this._s || 0\n  var f = 0\n  var buffer = this._block\n\n  while (s < l) {\n    var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))\n    var ch = (t - f)\n\n    for (var i = 0; i < ch; i++) {\n      buffer[(s % this._blockSize) + i] = data[i + f]\n    }\n\n    s += ch\n    f += ch\n\n    if ((s % this._blockSize) === 0) {\n      this._update(buffer)\n    }\n  }\n  this._s = s\n\n  return this\n}\n\nHash.prototype.digest = function (enc) {\n  // Suppose the length of the message M, in bits, is l\n  var l = this._len * 8\n\n  // Append the bit 1 to the end of the message\n  this._block[this._len % this._blockSize] = 0x80\n\n  // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize\n  this._block.fill(0, this._len % this._blockSize + 1)\n\n  if (l % (this._blockSize * 8) >= this._finalSize * 8) {\n    this._update(this._block)\n    this._block.fill(0)\n  }\n\n  // to this append the block which is equal to the number l written in binary\n  // TODO: handle case where l is > Math.pow(2, 29)\n  this._block.writeInt32BE(l, this._blockSize - 4)\n\n  var hash = this._update(this._block) || this._hash()\n\n  return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":54}],150:[function(require,module,exports){\nvar exports = module.exports = function SHA (algorithm) {\n  algorithm = algorithm.toLowerCase()\n\n  var Algorithm = exports[algorithm]\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n  return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n\n},{\"./sha\":151,\"./sha1\":152,\"./sha224\":153,\"./sha256\":154,\"./sha384\":155,\"./sha512\":156}],151:[function(require,module,exports){\n(function (Buffer){\n/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n  var H = new Buffer(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"buffer\":54,\"inherits\":108}],152:[function(require,module,exports){\n(function (Buffer){\n/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\n\nvar K = [\n  0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301\n  this._b = 0xefcdab89\n  this._c = 0x98badcfe\n  this._d = 0x10325476\n  this._e = 0xc3d2e1f0\n\n  return this\n}\n\nfunction rotl1 (num) {\n  return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n  return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n  return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n  if (s === 0) return (b & c) | ((~b) & d)\n  if (s === 2) return (b & c) | (b & d) | (c & d)\n  return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20)\n    var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n    e = d\n    d = c\n    c = rotl30(b)\n    b = a\n    a = t\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n  var H = new Buffer(20)\n\n  H.writeInt32BE(this._a | 0, 0)\n  H.writeInt32BE(this._b | 0, 4)\n  H.writeInt32BE(this._c | 0, 8)\n  H.writeInt32BE(this._d | 0, 12)\n  H.writeInt32BE(this._e | 0, 16)\n\n  return H\n}\n\nmodule.exports = Sha1\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"buffer\":54,\"inherits\":108}],153:[function(require,module,exports){\n(function (Buffer){\n/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8\n  this._b = 0x367cd507\n  this._c = 0x3070dd17\n  this._d = 0xf70e5939\n  this._e = 0xffc00b31\n  this._f = 0x68581511\n  this._g = 0x64f98fa7\n  this._h = 0xbefa4fa4\n\n  return this\n}\n\nSha224.prototype._hash = function () {\n  var H = new Buffer(28)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n\n  return H\n}\n\nmodule.exports = Sha224\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"./sha256\":154,\"buffer\":54,\"inherits\":108}],154:[function(require,module,exports){\n(function (Buffer){\n/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\n\nvar K = [\n  0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n  0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n  0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n  0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n  0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n  0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n  0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n  0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n  0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n  0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n  0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n  0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n  0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n  0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n  0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n  0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n  this.init()\n\n  this._w = W // new Array(64)\n\n  Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667\n  this._b = 0xbb67ae85\n  this._c = 0x3c6ef372\n  this._d = 0xa54ff53a\n  this._e = 0x510e527f\n  this._f = 0x9b05688c\n  this._g = 0x1f83d9ab\n  this._h = 0x5be0cd19\n\n  return this\n}\n\nfunction ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w\n\n  var a = this._a | 0\n  var b = this._b | 0\n  var c = this._c | 0\n  var d = this._d | 0\n  var e = this._e | 0\n  var f = this._f | 0\n  var g = this._g | 0\n  var h = this._h | 0\n\n  for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n  for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n    var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n    h = g\n    g = f\n    f = e\n    e = (d + T1) | 0\n    d = c\n    c = b\n    b = a\n    a = (T1 + T2) | 0\n  }\n\n  this._a = (a + this._a) | 0\n  this._b = (b + this._b) | 0\n  this._c = (c + this._c) | 0\n  this._d = (d + this._d) | 0\n  this._e = (e + this._e) | 0\n  this._f = (f + this._f) | 0\n  this._g = (g + this._g) | 0\n  this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n  var H = new Buffer(32)\n\n  H.writeInt32BE(this._a, 0)\n  H.writeInt32BE(this._b, 4)\n  H.writeInt32BE(this._c, 8)\n  H.writeInt32BE(this._d, 12)\n  H.writeInt32BE(this._e, 16)\n  H.writeInt32BE(this._f, 20)\n  H.writeInt32BE(this._g, 24)\n  H.writeInt32BE(this._h, 28)\n\n  return H\n}\n\nmodule.exports = Sha256\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"buffer\":54,\"inherits\":108}],155:[function(require,module,exports){\n(function (Buffer){\nvar inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d\n  this._bh = 0x629a292a\n  this._ch = 0x9159015a\n  this._dh = 0x152fecd8\n  this._eh = 0x67332667\n  this._fh = 0x8eb44a87\n  this._gh = 0xdb0c2e0d\n  this._hh = 0x47b5481d\n\n  this._al = 0xc1059ed8\n  this._bl = 0x367cd507\n  this._cl = 0x3070dd17\n  this._dl = 0xf70e5939\n  this._el = 0xffc00b31\n  this._fl = 0x68581511\n  this._gl = 0x64f98fa7\n  this._hl = 0xbefa4fa4\n\n  return this\n}\n\nSha384.prototype._hash = function () {\n  var H = new Buffer(48)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n\n  return H\n}\n\nmodule.exports = Sha384\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"./sha512\":156,\"buffer\":54,\"inherits\":108}],156:[function(require,module,exports){\n(function (Buffer){\nvar inherits = require('inherits')\nvar Hash = require('./hash')\n\nvar K = [\n  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n  this.init()\n  this._w = W\n\n  Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667\n  this._bh = 0xbb67ae85\n  this._ch = 0x3c6ef372\n  this._dh = 0xa54ff53a\n  this._eh = 0x510e527f\n  this._fh = 0x9b05688c\n  this._gh = 0x1f83d9ab\n  this._hh = 0x5be0cd19\n\n  this._al = 0xf3bcc908\n  this._bl = 0x84caa73b\n  this._cl = 0xfe94f82b\n  this._dl = 0x5f1d36f1\n  this._el = 0xade682d1\n  this._fl = 0x2b3e6c1f\n  this._gl = 0xfb41bd6b\n  this._hl = 0x137e2179\n\n  return this\n}\n\nfunction Ch (x, y, z) {\n  return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n  return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n  return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w\n\n  var ah = this._ah | 0\n  var bh = this._bh | 0\n  var ch = this._ch | 0\n  var dh = this._dh | 0\n  var eh = this._eh | 0\n  var fh = this._fh | 0\n  var gh = this._gh | 0\n  var hh = this._hh | 0\n\n  var al = this._al | 0\n  var bl = this._bl | 0\n  var cl = this._cl | 0\n  var dl = this._dl | 0\n  var el = this._el | 0\n  var fl = this._fl | 0\n  var gl = this._gl | 0\n  var hl = this._hl | 0\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4)\n    W[i + 1] = M.readInt32BE(i * 4 + 4)\n  }\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2]\n    var xl = W[i - 15 * 2 + 1]\n    var gamma0 = Gamma0(xh, xl)\n    var gamma0l = Gamma0l(xl, xh)\n\n    xh = W[i - 2 * 2]\n    xl = W[i - 2 * 2 + 1]\n    var gamma1 = Gamma1(xh, xl)\n    var gamma1l = Gamma1l(xl, xh)\n\n    // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n    var Wi7h = W[i - 7 * 2]\n    var Wi7l = W[i - 7 * 2 + 1]\n\n    var Wi16h = W[i - 16 * 2]\n    var Wi16l = W[i - 16 * 2 + 1]\n\n    var Wil = (gamma0l + Wi7l) | 0\n    var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n    Wil = (Wil + gamma1l) | 0\n    Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n    Wil = (Wil + Wi16l) | 0\n    Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n    W[i] = Wih\n    W[i + 1] = Wil\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j]\n    Wil = W[j + 1]\n\n    var majh = maj(ah, bh, ch)\n    var majl = maj(al, bl, cl)\n\n    var sigma0h = sigma0(ah, al)\n    var sigma0l = sigma0(al, ah)\n    var sigma1h = sigma1(eh, el)\n    var sigma1l = sigma1(el, eh)\n\n    // t1 = h + sigma1 + ch + K[j] + W[j]\n    var Kih = K[j]\n    var Kil = K[j + 1]\n\n    var chh = Ch(eh, fh, gh)\n    var chl = Ch(el, fl, gl)\n\n    var t1l = (hl + sigma1l) | 0\n    var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n    t1l = (t1l + chl) | 0\n    t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n    t1l = (t1l + Kil) | 0\n    t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n    t1l = (t1l + Wil) | 0\n    t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n    // t2 = sigma0 + maj\n    var t2l = (sigma0l + majl) | 0\n    var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n    hh = gh\n    hl = gl\n    gh = fh\n    gl = fl\n    fh = eh\n    fl = el\n    el = (dl + t1l) | 0\n    eh = (dh + t1h + getCarry(el, dl)) | 0\n    dh = ch\n    dl = cl\n    ch = bh\n    cl = bl\n    bh = ah\n    bl = al\n    al = (t1l + t2l) | 0\n    ah = (t1h + t2h + getCarry(al, t1l)) | 0\n  }\n\n  this._al = (this._al + al) | 0\n  this._bl = (this._bl + bl) | 0\n  this._cl = (this._cl + cl) | 0\n  this._dl = (this._dl + dl) | 0\n  this._el = (this._el + el) | 0\n  this._fl = (this._fl + fl) | 0\n  this._gl = (this._gl + gl) | 0\n  this._hl = (this._hl + hl) | 0\n\n  this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n  this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n  this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n  this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n  this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n  this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n  this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n  this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n  var H = new Buffer(64)\n\n  function writeInt64BE (h, l, offset) {\n    H.writeInt32BE(h, offset)\n    H.writeInt32BE(l, offset + 4)\n  }\n\n  writeInt64BE(this._ah, this._al, 0)\n  writeInt64BE(this._bh, this._bl, 8)\n  writeInt64BE(this._ch, this._cl, 16)\n  writeInt64BE(this._dh, this._dl, 24)\n  writeInt64BE(this._eh, this._el, 32)\n  writeInt64BE(this._fh, this._fl, 40)\n  writeInt64BE(this._gh, this._gl, 48)\n  writeInt64BE(this._hh, this._hl, 56)\n\n  return H\n}\n\nmodule.exports = Sha512\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./hash\":149,\"buffer\":54,\"inherits\":108}],157:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain);\n\n  // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    dest.end();\n  }\n\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n\n    if (typeof dest.destroy === 'function') dest.destroy();\n  }\n\n  // don't leave dangling pipes when there are errors.\n  function onerror(er) {\n    cleanup();\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror);\n\n  // remove all the event listeners that were added.\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n\n  dest.on('close', cleanup);\n\n  dest.emit('pipe', source);\n\n  // Allow for unix-like usage: A.pipe(B).pipe(C)\n  return dest;\n};\n\n},{\"events\":90,\"inherits\":108,\"readable-stream/duplex.js\":134,\"readable-stream/passthrough.js\":143,\"readable-stream/readable.js\":144,\"readable-stream/transform.js\":145,\"readable-stream/writable.js\":146}],158:[function(require,module,exports){\n'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n      return true;\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n      default:\n        if (retried) return; // undefined\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte.\nfunction utf8CheckByte(byte) {\n  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n  return -1;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n  if (--j < i) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n  if (--j < i) return 0;\n  nb = utf8CheckByte(buf[j]);\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n    return nb;\n  }\n  return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// UTF-8 replacement characters ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return '\\ufffd'.repeat(p);\n  }\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return '\\ufffd'.repeat(p + 1);\n    }\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return '\\ufffd'.repeat(p + 2);\n      }\n    }\n  }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character for each buffered byte of a (partial)\n// character needs to be added to the output.\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + '\\ufffd'.repeat(this.lastTotal - this.lastNeed);\n  return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n    return r;\n  }\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}\n},{\"safe-buffer\":148}],159:[function(require,module,exports){\n(function (global){\n\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],160:[function(require,module,exports){\nvar indexOf = require('indexof');\n\nvar Object_keys = function (obj) {\n    if (Object.keys) return Object.keys(obj)\n    else {\n        var res = [];\n        for (var key in obj) res.push(key)\n        return res;\n    }\n};\n\nvar forEach = function (xs, fn) {\n    if (xs.forEach) return xs.forEach(fn)\n    else for (var i = 0; i < xs.length; i++) {\n        fn(xs[i], i, xs);\n    }\n};\n\nvar defineProp = (function() {\n    try {\n        Object.defineProperty({}, '_', {});\n        return function(obj, name, value) {\n            Object.defineProperty(obj, name, {\n                writable: true,\n                enumerable: false,\n                configurable: true,\n                value: value\n            })\n        };\n    } catch(e) {\n        return function(obj, name, value) {\n            obj[name] = value;\n        };\n    }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n    if (!(this instanceof Script)) return new Script(code);\n    this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n    if (!(context instanceof Context)) {\n        throw new TypeError(\"needs a 'context' argument.\");\n    }\n\n    var iframe = document.createElement('iframe');\n    if (!iframe.style) iframe.style = {};\n    iframe.style.display = 'none';\n\n    document.body.appendChild(iframe);\n\n    var win = iframe.contentWindow;\n    var wEval = win.eval, wExecScript = win.execScript;\n\n    if (!wEval && wExecScript) {\n        // win.eval() magically appears when this is called in IE:\n        wExecScript.call(win, 'null');\n        wEval = win.eval;\n    }\n\n    forEach(Object_keys(context), function (key) {\n        win[key] = context[key];\n    });\n    forEach(globals, function (key) {\n        if (context[key]) {\n            win[key] = context[key];\n        }\n    });\n\n    var winKeys = Object_keys(win);\n\n    var res = wEval.call(win, this.code);\n\n    forEach(Object_keys(win), function (key) {\n        // Avoid copying circular objects like `top` and `window` by only\n        // updating existing context properties or new properties in the `win`\n        // that was only introduced after the eval.\n        if (key in context || indexOf(winKeys, key) === -1) {\n            context[key] = win[key];\n        }\n    });\n\n    forEach(globals, function (key) {\n        if (!(key in context)) {\n            defineProp(context, key, win[key]);\n        }\n    });\n\n    document.body.removeChild(iframe);\n\n    return res;\n};\n\nScript.prototype.runInThisContext = function () {\n    return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n    var ctx = Script.createContext(context);\n    var res = this.runInContext(ctx);\n\n    forEach(Object_keys(ctx), function (key) {\n        context[key] = ctx[key];\n    });\n\n    return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n    exports[name] = Script[name] = function (code) {\n        var s = Script(code);\n        return s[name].apply(s, [].slice.call(arguments, 1));\n    };\n});\n\nexports.createScript = function (code) {\n    return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n    var copy = new Context();\n    if(typeof context === 'object') {\n        forEach(Object_keys(context), function (key) {\n            copy[key] = context[key];\n        });\n    }\n    return copy;\n};\n\n},{\"indexof\":107}]},{},[1]);\n"
  },
  {
    "path": "main.js",
    "content": "const electron = require('electron')\nconst app = electron.app\nconst BrowserWindow = electron.BrowserWindow\nconst Menu = electron.Menu;\nconst MenuItem = electron.MenuItem;\nconst remote = electron.remote;\n\nconst path = require('path')\nconst url = require('url')\n\n// Keep a global reference of the window object, if you don't, the window will\n// be closed automatically when the JavaScript object is garbage collected.\nlet mainWindow\n\nfunction createWindow () {\n\t// Create the browser window.\n\tmainWindow = new BrowserWindow({\n\t\twidth: 1600, \n\t\theight: 1200,\n\t\twebPreferences: {\n\t\t\tnodeIntegration: true,\n\t\t\tbackgroundThrottling: false,\n\t\t\tcontextIsolation: false,\n\t\t\tenableRemoteModule: true,\n\t\t}\n \n\t})\n\n\t// and load the index.html of the app.\n\t// mainWindow.loadURL(url.format({\n\t// \tpathname: path.join(__dirname, 'index.html'),\n\t// \tprotocol: 'file:',\n\t// \tslashes: true\n\t// }));\n\tmainWindow.loadFile(path.join(__dirname, 'index.html'));\n\n\n\t//let menu = new Menu();\n\t//let menuItemWindow = new MenuItem({label: \"Window\"});\n\t//let menuItemToggleDevTools = new MenuItem({label: 'Toggle Developer Tools', click() { \n\t//\t\t//remote.getCurrentWindow().toggleDevTools();\n\t//\t\tmainWindow.webContents.toggleDevTools();\n\t//\t}});\n\t////menuItemWindow.append(menuItemToggleDevTools);\n\t//menuItemWindow.submenu = [menuItemToggleDevTools];\n\n\t//menu.append(menuItemWindow);\n\n\tlet template = [\n\t\t{\n\t\t\tlabel: \"Window\",\n\t\t\tsubmenu: [\n\t\t\t\t{label: \"Reload\", click() { mainWindow.webContents.reloadIgnoringCache() }},\n\t\t\t\t{label: \"Toggle Developer Tools\", click() { mainWindow.webContents.toggleDevTools() }},\n\t\t\t]\n\t\t}\n\t];\n\n\t\n\n\tlet menu = Menu.buildFromTemplate(template);\n\tmainWindow.setMenu(menu);\n\n\n\t{\n\t\tconst { ipcMain } = require('electron');\n\n\t\tipcMain.on('asynchronous-message', (event, arg) => {\n\t\t\tconsole.log(arg) // prints \"ping\"\n\t\t\tevent.reply('asynchronous-reply', 'pong')\n\t\t})\n\n\t\tipcMain.on('synchronous-message', (event, arg) => {\n\t\t\tconsole.log(arg) // prints \"ping\"\n\t\t\tevent.returnValue = 'pong'\n\t\t})\n\t}\n\n\t// {\n\t// \tconst { spawn, fork, execFile } = require('child_process');\n\t// \tlet inputPaths = [\"D:/dev/pointclouds/bunny_20M.las\"];\n\t// \tlet chosenPath = \"D:/dev/pointclouds/bunny_20M.las_converted\";\n\n\t// \tconst process = spawn('./libs/PotreeConverter2/Converter.exe', [\n\t// \t\t...inputPaths,\n\t// \t\t\"-o\", chosenPath\n\t// \t], {\n\n\t// \t});\n\n\t// \tprocess.stdout.on('data', (data) => {\n\t// \t\tconsole.log(`stdout: ${data}`);\n\t// \t});\n\t// }\n\t\n\n\n\t// require('remote').getCurrentWindow().toggleDevTools();\n\n\n\t// Open the DevTools.\n\t//mainWindow.webContents.openDevTools();\n\n\t// Emitted when the window is closed.\n\tmainWindow.on('closed', function () {\n\t\t// Dereference the window object, usually you would store windows\n\t\t// in an array if your app supports multi windows, this is the time\n\t\t// when you should delete the corresponding element.\n\t\tmainWindow = null\n\t})\n}\n\n// This method will be called when Electron has finished\n// initialization and is ready to create browser windows.\n// Some APIs can only be used after this event occurs.\napp.on('ready', createWindow)\n\n// Quit when all windows are closed.\napp.on('window-all-closed', function () {\n\t// On OS X it is common for applications and their menu bar\n\t// to stay active until the user quits explicitly with Cmd + Q\n\tif (process.platform !== 'darwin') {\n\t\tapp.quit()\n\t}\n})\n\napp.on('activate', function () {\n\t// On OS X it's common to re-create a window in the app when the\n\t// dock icon is clicked and there are no other windows open.\n\tif (mainWindow === null) {\n\t\tcreateWindow()\n\t}\n})\n\n// In this file you can include the rest of your app's specific main process\n// code. You can also put them in separate files and require them here.\n"
  },
  {
    "path": "package.json",
    "content": "{\n\t\"name\": \"potree_desktop\",\n\t\"version\": \"1.7.0\",\n\t\"description\": \"A WebGL Point Cloud Viewer\",\n\t\"main\": \"main.js\",\n\t\"scripts\": {\n\t\t\"start\": \"electron .\"\n\t},\n\t\"repository\": \"https://github.com/potree/potree\",\n\t\"keywords\": [\n\t\t\"Potree\",\n\t\t\"point cloud viewer\",\n\t\t\"lidar viewer\"\n\t],\n\t\"author\": \"Markus Schuetz\",\n\t\"license\": \"no license available at this time\",\n\t\"dependencies\": {\n\t\t\"electron\": \"21.3.1\"\n\t}\n}\n"
  },
  {
    "path": "src/desktop.css",
    "content": ".droproot{\r\n\tdisplay: none;\r\n\tpointer-events: none;\r\n\topacity: 0.7;\r\n\tposition: absolute; \r\n\twidth:100%; \r\n\theight: 100%; \r\n\tz-index: 1000000;\r\n}\r\n\r\n.dropzone{\r\n\tborder: 1em solid black;\r\n\tbackground: white;\r\n}\r\n\r\n.dropzone:before{\r\n\t\tdisplay: block;\r\n\tposition: absolute;\r\n\tborder: 0.4em solid red;\r\n\tborder-style: dashed;\r\n\tbackground: white;\r\n\topacity: 0.8;\r\n\tcontent: \" \";\r\n\ttop: 1em;\r\n\tleft: 1em;\r\n\tright: 1em;\r\n\tbottom: 1em;\r\n}\r\n\r\n.middle {\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\ttop: 50%;\r\n\t-webkit-transform: translate(-50%, -50%);\r\n\ttransform: translate(-50%, -50%);\r\n\t/* pointer-events: none; */\r\n}\r\n\r\n.center{\r\n\tleft: 50%;\r\n\t-webkit-transform: translate(-50%, -0%);\r\n\ttransform: translate(-50%, -0%);\r\n}\r\n\r\n.dropzone_title{\r\n\tfont-size: 3vw;\r\n\tfont-family: Arial;\r\n\tfont-weight: bold;\r\n\twhite-space: nowrap;\r\n\ttext-align: center;\r\n}\r\n\r\n.dropzone_text{\r\n\tfont-size: 1.4vw;\r\n\tfont-family: Arial;\r\n\tfont-weight: bold;\r\n\twhite-space: nowrap;\r\n}\r\n\r\n#drop * {pointer-events: none;}\r\n\r\n#converter_panel{\r\n\tposition: absolute; margin: auto; z-index: 2000000;\r\n\tbackground: white;\r\n\tborder: 0.2em solid black;\r\n\tborder-radius: 1em;\r\n\tpadding: 1em;\r\n\tdisplay: none;\r\n}\r\n\r\n#converter_panel .h2{\r\n\ttext-align: center !important; \r\n\tfont-weight: bold;\r\n\tfont-family: arial;\r\n\tfont-size: 1.5em;\r\n}\r\n\r\n.converter_panel_list{\r\n\tmax-height: 100px;\r\n\toverflow: auto;\r\n\tborder: 1px solid black;\r\n}\r\n\r\n\r\n#converter_panel a:link{\r\n\tcolor: blue;\r\n}\r\n\r\n#converter_panel a:visited{\r\n\tcolor: blueviolet;\r\n}\r\n\r\n#converter_panel a:hover a:focus{\r\n\tcolor: blue;\r\n}\r\n\r\n#converter_panel a:active{\r\n\tcolor: blue;\r\n}\r\n\r\n\r\n\r\n\r\n.selection_buttons{\r\n\tdisplay: flex;\r\n}\r\n\r\n.selection_buttons label {\r\n\tflex: 1;\r\n\tdisplay: block;\r\n\tposition: relative;\r\n\tmargin: 0;\r\n\tpadding: 1em;\r\n\tcursor: pointer;\r\n\tbackground-color: #ccc;\r\n\tborder: 1px solid black;\r\n\topacity: 0.3;\r\n\r\n}\r\n\r\n.selection_buttons input[type=\"radio\"] {\r\n\tdisplay: none;\r\n}\r\n\r\n.selection_buttons input[type=\"radio\"]:hover+label {\r\n\topacity: 0.5;\r\n\tz-index: 1000;\r\n\tbox-shadow: 0 0 0 1pt black;\r\n}\r\n\r\n.selection_buttons input[type=\"radio\"]:checked+label {\r\n\topacity: 1.0;\r\n\tbox-shadow: 0 0 0 1pt black;\r\n}\r\n\r\n.selection_buttons li{\r\n\tfont-family: Arial;\r\n\tfont-size: 1em;\r\n}\r\n\r\n.selection_buttons .title {\r\n\tfont-family: Arial;\r\n\tfont-weight: bold;\r\n\tfont-size: 1.5em;\r\n\twidth:100%;\r\n\ttext-align: center;\r\n\tleft: 50%;\r\n\ttransform: translateX(-50%);\r\n}\r\n\r\n.selection_buttons .left{\r\n\tborder-radius: 1em 0em 0em 1em;\r\n}\r\n\r\n.selection_buttons .right{\r\n\tborder-radius: 0em 1em 1em 0em;\r\n}\r\n\r\n.converter_panel_widget{\r\n\tmargin: 10px 0px;\r\n}"
  },
  {
    "path": "src/desktop.js",
    "content": "\r\nimport * as THREE from \"../libs/three.js/build/three.module.js\"\r\nimport JSON5 from \"../libs/json5-2.1.3/json5.mjs\";\r\n\r\nexport function loadDroppedPointcloud(cloudjsPath){\r\n\tconst folderName = cloudjsPath.replace(/\\\\/g, \"/\").split(\"/\").reverse()[1];\r\n\r\n\tPotree.loadPointCloud(cloudjsPath).then(e => {\r\n\t\tlet pointcloud = e.pointcloud;\r\n\t\tlet material = pointcloud.material;\r\n\r\n\t\tpointcloud.name = folderName;\r\n\r\n\t\tviewer.scene.addPointCloud(pointcloud);\r\n\r\n\t\tlet hasRGBA = pointcloud.getAttributes().attributes.find(a => a.name === \"rgba\") !== undefined\r\n\t\tif(hasRGBA){\r\n\t\t\tpointcloud.material.activeAttributeName = \"rgba\";\r\n\t\t}else{\r\n\t\t\tpointcloud.material.activeAttributeName = \"color\";\r\n\t\t}\r\n\r\n\t\tmaterial.size = 1;\r\n\t\tmaterial.pointSizeType = Potree.PointSizeType.ADAPTIVE;\r\n\r\n\t\tviewer.zoomTo(e.pointcloud);\r\n\t});\r\n};\r\n\r\nexport function createPlaceholder(aabb){\r\n\tconsole.log(\"create placeholder\");\r\n\tconsole.log(aabb);\r\n\r\n\tconst placeholder = {};\r\n\r\n\tconst node = new THREE.Object3D();\r\n\t\r\n\tconst min = new THREE.Vector3(...aabb.min);\r\n\tconst max = new THREE.Vector3(...aabb.max);\r\n\tconst center = new THREE.Vector3(\r\n\t\t(min.x + max.x) / 2,\r\n\t\t(min.y + max.y) / 2,\r\n\t\t(min.z + max.z) / 2,\r\n\t);\r\n\tconst radius = center.distanceTo(max);\r\n\tnode.boundingSphere = new THREE.Sphere(center, radius);\r\n\r\n\tconst text = new Potree.TextSprite(\"\");\r\n\ttext.position.copy(center);\r\n\tconst textScale = radius / 5;\r\n\ttext.material.depthTest = false;\r\n\ttext.material.depthWrite = false;\r\n\ttext.material.transparent = true;\r\n\ttext.material.opacity = 0.7;\r\n\ttext.scale.set(textScale, textScale, textScale);\r\n\tviewer.scene.scene.add(text);\r\n\r\n\tconst box = new THREE.Box3(min, max);\r\n\tconst box3 = new Potree.Box3Helper(box, 0xff0000);\r\n\tviewer.scene.scene.add(box3);\r\n\r\n\tconst camera = viewer.scene.getActiveCamera();\r\n\tviewer.zoomTo(node);\r\n\r\n\tplaceholder.text = text;\r\n\tplaceholder.box = box3;\r\n\tplaceholder.remove = () => {\r\n\t\tviewer.scene.scene.remove(box3);\r\n\t\tviewer.scene.scene.remove(text);\r\n\t};\r\n\r\n\r\n\treturn placeholder;\r\n}\r\n\r\n\r\nexport function convert_17(inputPaths, chosenPath, pointcloudName){\r\n\tlet message = `Starting conversion.<br>\r\n\tinput: ${inputPaths}<br>\r\n\toutput: ${chosenPath}`;\r\n\tviewer.postMessage(message, {duration: 15000});\r\n\r\n\tconst { spawn } = require('child_process');\r\n\r\n\tlet exe = './libs/PotreeConverter/PotreeConverter.exe';\r\n\tlet parameters = [\r\n\t\t...inputPaths,\r\n\t\t\"-o\", chosenPath,\r\n\t\t\"--overwrite\"\r\n\t];\r\n\r\n\tconst converter = spawn(exe, parameters);\r\n\r\n\tlet placeholder = null;\r\n\tlet outputBuffer = \"\";\r\n\tconverter.stdout.on('data', (data) => {\r\n\t\tconst string = new TextDecoder(\"utf-8\").decode(data);\r\n\r\n\t\tconsole.log(\"stdout\", string);\r\n\t\toutputBuffer += string;\r\n\r\n\t\tif(!placeholder){ \r\n\t\t\t// match for AABB\r\n\t\t\tconst regexp = /(.*AABB): ({[.\\s\\S]*?})/g;\r\n\t\t\tconst matches = outputBuffer.matchAll(regexp);\r\n\t\t\t\t\r\n\t\t\tfor (const match of matches) {\r\n\t\t\t\ttry{\r\n\t\t\t\t\tconst name = match[1];\r\n\t\t\t\t\tconst value = match[2];\r\n\t\t\t\t\tconst aabb = JSON.parse(match[2]);\r\n\t\t\t\t\tconsole.log(aabb);\r\n\r\n\t\t\t\t\tif(name === \"cubicAABB\"){\r\n\t\t\t\t\t\tplaceholder = createPlaceholder(aabb);\r\n\r\n\t\t\t\t\t\toutputBuffer = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}catch(e){\r\n\t\t\t\t\tconsole.error(match[0]);\r\n\t\t\t\t\tconsole.error(e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{ \r\n\t\t\t// match for progress\r\n\t\t\tconst regexp = /INDEXING: ([\\w\\.]*) of ([\\w\\.]*) processed/g;\r\n\t\t\tconst matches = outputBuffer.matchAll(regexp);\r\n\r\n\t\t\tfor(const match of matches){\r\n\r\n\t\t\t\tconst processed = parseInt(match[1].replace(/\\D/g,''));\r\n\t\t\t\tconst total = parseInt(match[2].replace(/\\D/g,''));\r\n\t\t\t\tconst percent = parseInt(100 * (processed / total));\r\n\t\t\t\t\r\n\t\t\t\tconst text = `${percent}%`;\r\n\t\t\t\tplaceholder.text.setText(text);\r\n\r\n\t\t\t\toutputBuffer = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tconverter.stderr.on('data', (data) => {\r\n\t\tconsole.log(\"==\");\r\n\t\tconsole.error(`stderr: ${data}`);\r\n\t});\r\n\r\n\tconverter.on('close', (code) => {\r\n\t\tconsole.log(`child process exited with code ${code}`);\r\n\r\n\t\tconst cloudJS = `${chosenPath}/cloud.js`;\r\n\t\tconsole.log(\"now loading point cloud: \" + cloudJS);\r\n\r\n\t\tif(placeholder){\r\n\t\t\tplaceholder.remove();\r\n\t\t}\r\n\r\n\t\tlet message = `conversion finished, now loading ${cloudJS}`;\r\n\t\tviewer.postMessage(message, {duration: 15000});\r\n\r\n\t\tPotree.loadPointCloud(cloudJS, pointcloudName, function(e){\r\n\t\t\tviewer.scene.addPointCloud(e.pointcloud);\r\n\r\n\t\t\tlet material = e.pointcloud.material;\r\n\t\t\tmaterial.size = 1;\r\n\t\t\tmaterial.pointSizeType = Potree.PointSizeType.ADAPTIVE;\r\n\r\n\t\t\t//viewer.zoomTo(e.pointcloud);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nexport function convert_20(inputPaths, chosenPath, pointcloudName){\r\n\tlet message = `Starting conversion.<br>\r\n\tinput: ${inputPaths}<br>\r\n\toutput: ${chosenPath}`;\r\n\tviewer.postMessage(message, {duration: 15000});\r\n\r\n\tconst { spawn, fork, execFile } = require('child_process');\r\n\r\n\tlet exe = './libs/PotreeConverter2/PotreeConverter.exe';\r\n\tlet parameters = [\r\n\t\t...inputPaths,\r\n\t\t\"-o\", chosenPath\r\n\t];\r\n\r\n\tconst converter = spawn(exe, parameters);\r\n\r\n\tlet placeholder = null;\r\n\tlet outputBuffer = \"\";\r\n\tconverter.stdout.on('data', (data) => {\r\n\r\n\t\tconst string = new TextDecoder(\"utf-8\").decode(data);\r\n\t\tconsole.log(\"stdout\", string);\r\n\t\toutputBuffer += string;\r\n\r\n\t\tif(!placeholder){ \r\n\t\t\t// match for AABB\r\n\t\t\tconst regexp = /(.*AABB): ({[.\\s\\S]*?})/g;\r\n\t\t\tconst matches = outputBuffer.matchAll(regexp);\r\n\t\t\t\t\r\n\t\t\tfor (const match of matches) {\r\n\t\t\t\ttry{\r\n\t\t\t\t\tconst name = match[1];\r\n\t\t\t\t\tconst value = match[2];\r\n\t\t\t\t\tconst aabb = JSON.parse(match[2]);\r\n\t\t\t\t\tconsole.log(aabb);\r\n\r\n\t\t\t\t\tif(name === \"cubicAABB\"){\r\n\t\t\t\t\t\tplaceholder = createPlaceholder(aabb);\r\n\t\t\t\t\t\tplaceholder.text.setText(\"0%\");\r\n\r\n\t\t\t\t\t\toutputBuffer = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}catch(e){\r\n\t\t\t\t\tconsole.error(match[0]);\r\n\t\t\t\t\tconsole.error(e);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{ \r\n\t\t\t// match for progress\r\n\r\n\t\t\tlet regexp = /\\[(\\d+)%,/g;\r\n\r\n\t\t\tconst matches = outputBuffer.replace(/'/g, \"\").matchAll(regexp);\r\n\r\n\t\t\tfor(const match of matches){\r\n\t\t\t\tconst percent = parseInt(match[1].replace(/\\D/g,''));\r\n\t\t\t\t\r\n\t\t\t\tconst text = `${percent}%`;\r\n\t\t\t\tplaceholder.text.setText(text);\r\n\r\n\t\t\t\toutputBuffer = \"\";\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tconverter.stderr.on('data', (data) => {\r\n\t\tconsole.log(\"==\");\r\n\t\tconsole.error(`stderr: ${data}`);\r\n\t});\r\n\r\n\tconverter.on('exit', (code) => {\r\n\t\tconsole.log(`child process exited with code ${code}`);\r\n\r\n\t\tconst cloudJS = `${chosenPath}/metadata.json`;\r\n\t\tconsole.log(\"now loading point cloud: \" + cloudJS);\r\n\r\n\t\tif(placeholder){\r\n\t\t\tplaceholder.remove();\r\n\t\t}\r\n\r\n\t\tlet message = `conversion finished, now loading ${cloudJS}`;\r\n\t\tviewer.postMessage(message, {duration: 15000});\r\n\r\n\t\tPotree.loadPointCloud(cloudJS).then(e => {\r\n\t\t\tlet pointcloud = e.pointcloud;\r\n\t\t\tlet material = pointcloud.material;\r\n\r\n\t\t\tpointcloud.name = pointcloudName;\r\n\r\n\t\t\tlet hasRGBA = pointcloud.getAttributes().attributes.find(a => a.name === \"rgba\") !== undefined\r\n\t\t\tif(hasRGBA){\r\n\t\t\t\tpointcloud.material.activeAttributeName = \"rgba\";\r\n\t\t\t}else{\r\n\t\t\t\tpointcloud.material.activeAttributeName = \"color\";\r\n\t\t\t}\r\n\r\n\t\t\tmaterial.size = 1;\r\n\t\t\tmaterial.pointSizeType = Potree.PointSizeType.ADAPTIVE;\r\n\r\n\t\t\tviewer.scene.addPointCloud(pointcloud);\r\n\t\t\t//viewer.fitToScreen();\r\n\t\t\tviewer.zoomTo(e.pointcloud);\r\n\t\t});\r\n\r\n\t});\r\n}\r\n\r\nexport async function doConversion(inputPaths, suggestedDirectory, suggestedName){\r\n\r\n\tconst fs = require(\"fs\");\r\n\tconst npath = require(\"path\");\r\n\tconst fsp = fs.promises;\r\n\r\n\tconsole.log(\"Open converter panel\");\r\n\tconsole.log(\"input paths: \", inputPaths);\r\n\tconsole.log(\"suggested directory: \", suggestedDirectory);\r\n\tconsole.log(\"suggested name: \", suggestedName);\r\n\r\n\tlet i = 1; \r\n\tlet suggestedPath = `${suggestedDirectory}/${suggestedName}`;\r\n\twhile(fs.existsSync(suggestedPath)){\r\n\t\tsuggestedPath = `${suggestedDirectory}/${suggestedName}_${i}`;\r\n\t\ti++;\r\n\t}\r\n\r\n\r\n\tlet elPanel = document.getElementById(\"converter_panel\");\r\n\tlet elFiles = document.getElementById(\"converter_panel_files\");\r\n\tlet elTargetDir = document.getElementById(\"converter_panel_target_directory\");\r\n\tlet elTargetDirWarning = document.getElementById(\"converter_panel_target_directory_warning\");\r\n\t// let elPickTargetDir = document.getElementById(\"converter_panel_pick_target_directory\");\r\n\tlet elCancel = document.getElementById(\"converter_panel_cancel\");\r\n\tlet elStart = document.getElementById(\"converter_panel_start\");\r\n\r\n\telPanel.style.display = \"block\";\r\n\r\n\telTargetDir.value = suggestedPath;\r\n\telFiles.innerHTML = inputPaths.map(file => `<div>${file}</div>`).join(\"\\n\");\r\n\r\n\tlet checkTarget = () => {\r\n\t\tlet targetDir = elTargetDir.value;\r\n\r\n\t\ttry{\r\n\t\t\tlet stat = fs.lstatSync(targetDir);\r\n\r\n\t\t\tif(stat.isDirectory()){\r\n\t\t\t\tlet msg = `WARNING: the target folder already exists. Contents may be overriden.`;\r\n\t\t\t\telTargetDirWarning.innerHTML = msg;\r\n\t\t\t}else{\r\n\t\t\t\telTargetDirWarning.innerHTML = \"&nbsp;\";\r\n\t\t\t}\r\n\t\t}catch(e){\r\n\t\t\telTargetDirWarning.innerHTML = \"&nbsp;\";\r\n\t\t}\r\n\t};\r\n\r\n\telTargetDir.oninput = () => {\r\n\t\tcheckTarget();\r\n\t};\r\n\r\n\t// elPickTargetDir.onclick = () => {\r\n\t// \tconst dialog = require('electron').remote.dialog;\r\n\t// \tconst chosenPath = dialog.showSaveDialogSync(null, {\r\n\t// \t\ttitle: \"Chose Conversion Directory\",\r\n\t// \t\tdefaultPath: suggestedPath,\r\n\t// \t\tbuttonLabel: \"Select\",\r\n\t// \t\tfilters: [],\r\n\t// \t\tproperties: [\"openDirectory \", \"promptToCreate\", \"createDirectory\"],\r\n\t// \t});\r\n\r\n\t// \tif(chosenPath === undefined){\r\n\t// \t\t// keep old path\r\n\t// \t}else{\r\n\t// \t\telTargetDir.value = chosenPath;\r\n\t// \t}\r\n\r\n\t// \tcheckTarget();\r\n\t// };\r\n\r\n\telCancel.onclick = () => {\r\n\t\telPanel.style.display = \"none\";\r\n\t};\r\n\r\n\telStart.onclick = () => {\r\n\t\tconsole.log(\"start conversion!!\");\r\n\r\n\t\tlet el_1_7 = document.getElementById(\"selection_converter_version_1_7\");\r\n\t\tlet el_2_0 = document.getElementById(\"selection_converter_version_2_0\");\r\n\r\n\t\tlet targetDirectory = elTargetDir.value;\r\n\r\n\t\tconsole.log(\"targetDirectory\", targetDirectory);\r\n\t\tconsole.log(\"inputPaths\", inputPaths);\r\n\r\n\t\telPanel.style.display = \"none\";\r\n\r\n\t\tif(el_1_7.checked){\r\n\t\t\tconsole.log(\"convert 1.7\");\r\n\t\t\tconvert_17(inputPaths, targetDirectory, suggestedName);\r\n\t\t}else if(el_2_0.checked){\r\n\t\t\t// console.log(\"convert 2.0\");\r\n\t\t\tconvert_20(inputPaths, targetDirectory, suggestedName);\r\n\t\t}\r\n\r\n\r\n\t};\r\n}\r\n\r\n\r\nexport function showDropzones(){\r\n\tlet element = document.getElementById(\"pointcloud_file_dropzone\");\r\n\r\n\telement.style.display = \"block\";\r\n}\r\n\r\nexport function hideDropzones(){\r\n\tlet element = document.getElementById(\"pointcloud_file_dropzone\");\r\n\r\n\telement.style.display = \"none\";\r\n}\r\n\r\nexport function dragEnter(e) {\r\n\te.dataTransfer.dropEffect = 'copy';\r\n\r\n\te.preventDefault();\r\n\te.stopPropagation();\r\n\r\n\tconsole.log(\"enter\");\r\n\r\n\tshowDropzones();\r\n\r\n\treturn false;\r\n}\r\n\r\nexport function dragOver(e){\r\n\te.preventDefault();\r\n\te.stopPropagation();\r\n\r\n\tshowDropzones();\r\n\r\n\treturn false;\r\n}\r\n\r\nexport function dragLeave(e){\r\n\r\n\te.preventDefault();\r\n\te.stopPropagation();\r\n\r\n\thideDropzones();\r\n\r\n\treturn false;\r\n}\r\n\r\nexport async function dropHandler(event){\r\n\t// console.log(event);\r\n\tevent.preventDefault();\r\n\tevent.stopPropagation();\r\n\r\n\thideDropzones();\r\n\r\n\tlet u = event.clientX / document.body.clientWidth;\r\n\r\n\tconsole.log(u);\r\n\r\n\tconst cloudJsFiles = [];\r\n\tconst lasLazFiles = [];\r\n\r\n\tlet suggestedDirectory = null;\r\n\tlet suggestedName = null;\r\n\r\n\tfor(let i = 0; i < event.dataTransfer.items.length; i++){\r\n\t\tlet item = event.dataTransfer.items[i];\r\n\r\n\t\tif(item.kind !== \"file\"){\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tlet file = item.getAsFile();\r\n\t\tlet path = file.path;\r\n\r\n\t\tconst fs = require(\"fs\");\r\n\t\tconst fsp = fs.promises;\r\n\t\tconst np = require('path');\r\n\r\n\t\tconst whitelist = [\".las\", \".laz\"];\r\n\r\n\t\tlet isFile = fs.lstatSync(path).isFile();\r\n\t\tconst isJson5 = file.name.toLowerCase().endsWith(\".json5\");\r\n\r\n\t\tif(isJson5){\r\n\t\t\ttry{\r\n\r\n\t\t\t\tconst text = await file.text();\r\n\t\t\t\tconst json = JSON5.parse(text);\r\n\r\n\t\t\t\tif(json.type === \"Potree\"){\r\n\t\t\t\t\tPotree.loadProject(viewer, json);\r\n\t\t\t\t}\r\n\t\t\t}catch(e){\r\n\t\t\t\tconsole.error(\"failed to parse the dropped file as JSON\");\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t}\r\n\t\t}else if(isFile && path.indexOf(\"cloud.js\") >= 0){\r\n\t\t\tcloudJsFiles.push(file.path);\r\n\t\t}else if(isFile && path.indexOf(\"metadata.json\") >= 0){\r\n\t\t\tcloudJsFiles.push(file.path);\r\n\t\t}else if(isFile){\r\n\t\t\tconst extension = np.extname(path).toLowerCase();\r\n\r\n\t\t\tif(whitelist.includes(extension)){\r\n\t\t\t\tlasLazFiles.push(file.path);\r\n\r\n\t\t\t\tif(suggestedDirectory == null){\r\n\t\t\t\t\tsuggestedDirectory = np.normalize(`${path}/..`);\r\n\t\t\t\t\tsuggestedName = np.basename(path, np.extname(path)) + \"_converted\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else if(fs.lstatSync(path).isDirectory()){\r\n\t\t\t// handle directory\r\n\r\n\t\t\tconsole.log(\"start readdir!\");\r\n\t\t\tconst files = await fsp.readdir(path);\r\n\r\n\t\t\tconsole.log(\"readdir done!\");\r\n\r\n\t\t\tfor(const file of files){\r\n\t\t\t\tconst extension = np.extname(file).toLowerCase();\r\n\r\n\t\t\t\tif(whitelist.includes(extension)){\r\n\t\t\t\t\tlasLazFiles.push(`${path}/${file}`);\r\n\r\n\t\t\t\t\tif(suggestedDirectory == null){\r\n\t\t\t\t\t\tsuggestedDirectory = np.normalize(`${path}/..`);\r\n\t\t\t\t\t\tsuggestedName = np.basename(path, np.extname(path)) + \"_converted\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else if(file.toLowerCase().endsWith(\"cloud.js\")){\r\n\t\t\t\t\tcloudJsFiles.push(`${path}/${file}`);\r\n\t\t\t\t}else if(file.toLowerCase().endsWith(\"metadata.json\")){\r\n\t\t\t\t\tcloudJsFiles.push(`${path}/${file}`);\r\n\t\t\t\t}\r\n\r\n\t\t\t};\r\n\r\n\t\t\t// lasLazFiles.push(path);\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t// console.log(cloudJsFiles);\r\n\t// console.log(lasLazFiles);\r\n\r\n\tif(lasLazFiles.length > 0){\r\n\t\tdoConversion(lasLazFiles, suggestedDirectory, suggestedName);\r\n\t}\r\n\r\n\tfor(const cloudjs of cloudJsFiles){\r\n\t\tloadDroppedPointcloud(cloudjs);\r\n\t}\r\n\r\n\treturn false;\r\n};"
  }
]